ZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYmluL2FyIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaW4vYXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGRlNTJiYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYmluL2FyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYmluL2FzIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaW4vYXMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzU5MDU5MgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYmluL2FzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYmluL2MrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYmluL2MrKwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44YzUxZTdlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaW4vYysrCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYmluL2crKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYmluL2crKwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44YzUxZTdlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaW4vZysrCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYmluL2djYyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYmluL2djYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMGQxZGIzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaW4vZ2NjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYmluL2xkIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaW4vbGQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTU4OTZmNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYmluL2xkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYmluL25tIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaW4vbm0KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTQ5MDBmNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYmluL25tCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYmluL29iamNvcHkgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2Jpbi9vYmpjb3B5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJjNmM3MTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2Jpbi9vYmpjb3B5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYmluL29iamR1bXAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2Jpbi9vYmpkdW1wCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFmYTIwZDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2Jpbi9vYmpkdW1wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYmluL3JhbmxpYiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYmluL3JhbmxpYgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNThlNDA0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaW4vcmFubGliCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYmluL3N0cmlwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaW4vc3RyaXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWIyMWI4ZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYmluL3N0cmlwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYWxnb3JpdGhtIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hbGdvcml0aG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ0OWVjMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYWxnb3JpdGhtCkBAIC0wLDAgKzEsNjkgQEAKKy8vIDxhbGdvcml0aG0+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5NworICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGluY2x1ZGUvYWxnb3JpdGhtCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0FMR09SSVRITQorI2RlZmluZSBfR0xJQkNYWF9BTEdPUklUSE0gMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDx1dGlsaXR5PiAvLyBVSy0zMDAuCisjaW5jbHVkZSA8Yml0cy9zdGxfYWxnb2Jhc2UuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9hbGdvLmg+CisKKyNpZmRlZiBfR0xJQkNYWF9QQVJBTExFTAorIyBpbmNsdWRlIDxwYXJhbGxlbC9hbGdvcml0aG0+CisjZW5kaWYKKworI2VuZGlmIC8qIF9HTElCQ1hYX0FMR09SSVRITSAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2JpdHMvYXRvbWljX3dvcmQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaXRzL2F0b21pY193b3JkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJiZGJiYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaXRzL2F0b21pY193b3JkLmgKQEAgLTAsMCArMSw0NyBAQAorLy8gTG93LWxldmVsIHR5cGUgZm9yIGF0b21pYyBvcGVyYXRpb25zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYXRvbWljX3dvcmQuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfQVRPTUlDX1dPUkRfSAorI2RlZmluZSBfR0xJQkNYWF9BVE9NSUNfV09SRF9ICTEKKwordHlwZWRlZiBpbnQgX0F0b21pY193b3JkOworCisvLyBEZWZpbmUgdGhlc2UgdHdvIG1hY3JvcyB1c2luZyB0aGUgYXBwcm9wcmlhdGUgbWVtb3J5IGJhcnJpZXIgZm9yIHRoZSB0YXJnZXQuCisvLyBUaGUgY29tbWVudGVkIG91dCB2ZXJzaW9ucyBiZWxvdyBhcmUgdGhlIGRlZmF1bHRzLgorLy8gU2VlIGlhNjQvYXRvbWljX3dvcmQuaCBmb3IgYW4gYWx0ZXJuYXRpdmUgYXBwcm9hY2guCisKKy8vIFRoaXMgb25lIHByZXZlbnRzIGxvYWRzIGZyb20gYmVpbmcgaG9pc3RlZCBhY3Jvc3MgdGhlIGJhcnJpZXI7CisvLyBpbiBvdGhlciB3b3JkcywgdGhpcyBpcyBhIExvYWQtTG9hZCBhY3F1aXJlIGJhcnJpZXIuCisvLyBUaGlzIGlzIG5lY2Vzc2FyeSBpZmYgVEFSR0VUX1JFTEFYRURfT1JERVJJTkcgaXMgZGVmaW5lZCBpbiB0bS5oLiAgCisvLyAjZGVmaW5lIF9HTElCQ1hYX1JFQURfTUVNX0JBUlJJRVIgX19hc20gX192b2xhdGlsZSAoIiI6OjoibWVtb3J5IikKKworLy8gVGhpcyBvbmUgcHJldmVudHMgc3RvcmVzIGZyb20gYmVpbmcgc3VuayBhY3Jvc3MgdGhlIGJhcnJpZXI7IGluIG90aGVyCisvLyB3b3JkcywgYSBTdG9yZS1TdG9yZSByZWxlYXNlIGJhcnJpZXIuCisvLyAjZGVmaW5lIF9HTElCQ1hYX1dSSVRFX01FTV9CQVJSSUVSIF9fYXNtIF9fdm9sYXRpbGUgKCIiOjo6Im1lbW9yeSIpCisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaXRzL2Jhc2ljX2ZpbGUuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaXRzL2Jhc2ljX2ZpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjMwYzRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2JpdHMvYmFzaWNfZmlsZS5oCkBAIC0wLDAgKzEsMTA4IEBACisvLyBXcmFwcGVyIG9mIEMtbGFuZ3VhZ2UgRklMRSBzdHJ1Y3QgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjcuOCAgRmlsZS1iYXNlZCBzdHJlYW1zCisvLworCisvKiogQGZpbGUgYmFzaWNfZmlsZS5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfQkFTSUNfRklMRV9TVERJT19ICisjZGVmaW5lIF9HTElCQ1hYX0JBU0lDX0ZJTEVfU1RESU9fSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Yml0cy9jKytpby5oPiAgLy8gZm9yIF9fY19sb2NrIGFuZCBfX2NfZmlsZQorI2luY2x1ZGUgPGlvcz4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvLyBHZW5lcmljIGRlY2xhcmF0aW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgY2xhc3MgX19iYXNpY19maWxlOyAKKworICAvLyBTcGVjaWFsaXphdGlvbi4KKyAgdGVtcGxhdGU8PgorICAgIGNsYXNzIF9fYmFzaWNfZmlsZTxjaGFyPgorICAgIHsKKyAgICAgIC8vIFVuZGVybHlpbmcgZGF0YSBzb3VyY2Uvc2luay4KKyAgICAgIF9fY19maWxlKiAJX01fY2ZpbGU7CisKKyAgICAgIC8vIFRydWUgaWZmIHdlIG9wZW5lZCBfTV9jZmlsZSwgYW5kIHRodXMgbXVzdCBjbG9zZSBpdCBvdXJzZWx2ZXMuCisgICAgICBib29sIAkJX01fY2ZpbGVfY3JlYXRlZDsKKworICAgIHB1YmxpYzoKKyAgICAgIF9fYmFzaWNfZmlsZShfX2NfbG9jayogX19sb2NrID0gMCkgdGhyb3cgKCk7CisKKyAgICAgIF9fYmFzaWNfZmlsZSogCisgICAgICBvcGVuKGNvbnN0IGNoYXIqIF9fbmFtZSwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwgaW50IF9fcHJvdCA9IDA2NjQpOworCisgICAgICBfX2Jhc2ljX2ZpbGUqCisgICAgICBzeXNfb3BlbihfX2NfZmlsZSogX19maWxlLCBpb3NfYmFzZTo6b3Blbm1vZGUpOworCisgICAgICBfX2Jhc2ljX2ZpbGUqCisgICAgICBzeXNfb3BlbihpbnQgX19mZCwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSkgdGhyb3cgKCk7CisKKyAgICAgIF9fYmFzaWNfZmlsZSogCisgICAgICBjbG9zZSgpOyAKKworICAgICAgX0dMSUJDWFhfUFVSRSBib29sIAorICAgICAgaXNfb3BlbigpIGNvbnN0IHRocm93ICgpOworCisgICAgICBfR0xJQkNYWF9QVVJFIGludCAKKyAgICAgIGZkKCkgdGhyb3cgKCk7CisKKyAgICAgIF9HTElCQ1hYX1BVUkUgX19jX2ZpbGUqCisgICAgICBmaWxlKCkgdGhyb3cgKCk7CisKKyAgICAgIH5fX2Jhc2ljX2ZpbGUoKTsKKworICAgICAgc3RyZWFtc2l6ZSAKKyAgICAgIHhzcHV0bihjb25zdCBjaGFyKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKKworICAgICAgc3RyZWFtc2l6ZSAKKyAgICAgIHhzcHV0bl8yKGNvbnN0IGNoYXIqIF9fczEsIHN0cmVhbXNpemUgX19uMSwKKwkgICAgICAgY29uc3QgY2hhciogX19zMiwgc3RyZWFtc2l6ZSBfX24yKTsKKworICAgICAgc3RyZWFtc2l6ZSAKKyAgICAgIHhzZ2V0bihjaGFyKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKKworICAgICAgc3RyZWFtb2ZmCisgICAgICBzZWVrb2ZmKHN0cmVhbW9mZiBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXkpIHRocm93ICgpOworCisgICAgICBpbnQgCisgICAgICBzeW5jKCk7CisKKyAgICAgIHN0cmVhbXNpemUKKyAgICAgIHNob3dtYW55YygpOworICAgIH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmCQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2JpdHMvYysrYWxsb2NhdG9yLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYml0cy9jKythbGxvY2F0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzNhMTI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2JpdHMvYysrYWxsb2NhdG9yLmgKQEAgLTAsMCArMSwzNyBAQAorLy8gQmFzZSB0byBzdGQ6OmFsbG9jYXRvciAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGMrK2FsbG9jYXRvci5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfQ1hYX0FMTE9DQVRPUl9ICisjZGVmaW5lIF9HTElCQ1hYX0NYWF9BTExPQ0FUT1JfSCAxCisKKy8vIERlZmluZSBuZXdfYWxsb2NhdG9yIGFzIHRoZSBiYXNlIGNsYXNzIHRvIHN0ZDo6YWxsb2NhdG9yLgorI2luY2x1ZGUgPGV4dC9uZXdfYWxsb2NhdG9yLmg+CisjZGVmaW5lIF9fZ2xpYmN4eF9iYXNlX2FsbG9jYXRvciAgX19nbnVfY3h4OjpuZXdfYWxsb2NhdG9yCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2JpdHMvYysrY29uZmlnLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYml0cy9jKytjb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmYxNzEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2JpdHMvYysrY29uZmlnLmgKQEAgLTAsMCArMSwxNTAzIEBACisvLyBQcmVkZWZpbmVkIHN5bWJvbHMgYW5kIG1hY3JvcyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsCisvLyAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBjKytjb25maWcuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0NYWF9DT05GSUdfSAorI2RlZmluZSBfR0xJQkNYWF9DWFhfQ09ORklHX0ggMQorCisvLyBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBDKysgbGlicmFyeSBpbiBjb21wcmVzc2VkIElTTyBkYXRlIGZvcm1hdC4KKyNkZWZpbmUgX19HTElCQ1hYX18gMjAxMTA0MjggCisKKy8vIE1hY3JvcyBmb3IgdmlzaWJpbGl0eS4KKy8vIF9HTElCQ1hYX0hBVkVfQVRUUklCVVRFX1ZJU0lCSUxJVFkKKy8vIF9HTElCQ1hYX1ZJU0lCSUxJVFlfQVRUUgorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9BVFRSSUJVVEVfVklTSUJJTElUWSAxCisKKyNpZiBfR0xJQkNYWF9IQVZFX0FUVFJJQlVURV9WSVNJQklMSVRZCisjIGRlZmluZSBfR0xJQkNYWF9WSVNJQklMSVRZX0FUVFIoVikgX19hdHRyaWJ1dGVfXyAoKF9fdmlzaWJpbGl0eV9fICgjVikpKQorI2Vsc2UKKy8vIElmIHRoaXMgaXMgbm90IHN1cHBsaWVkIGJ5IHRoZSBPUy1zcGVjaWZpYyBvciBDUFUtc3BlY2lmaWMKKy8vIGhlYWRlcnMgaW5jbHVkZWQgYmVsb3csIGl0IHdpbGwgYmUgZGVmaW5lZCB0byBhbiBlbXB0eSBkZWZhdWx0LgorIyBkZWZpbmUgX0dMSUJDWFhfVklTSUJJTElUWV9BVFRSKFYpIF9HTElCQ1hYX1BTRVVET19WSVNJQklMSVRZKFYpCisjZW5kaWYKKworLy8gTWFjcm9zIGZvciBkZXByZWNhdGVkLgorLy8gX0dMSUJDWFhfREVQUkVDQVRFRAorLy8gX0dMSUJDWFhfREVQUkVDQVRFRF9BVFRSCisjaWZuZGVmIF9HTElCQ1hYX0RFUFJFQ0FURUQKKyMgZGVmaW5lIF9HTElCQ1hYX0RFUFJFQ0FURUQgMQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fREVQUkVDQVRFRCkgJiYgZGVmaW5lZChfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXykKKyMgZGVmaW5lIF9HTElCQ1hYX0RFUFJFQ0FURURfQVRUUiBfX2F0dHJpYnV0ZV9fICgoX19kZXByZWNhdGVkX18pKQorI2Vsc2UKKyMgZGVmaW5lIF9HTElCQ1hYX0RFUFJFQ0FURURfQVRUUgorI2VuZGlmCisKKy8vIE1hY3JvcyBmb3IgYWN0aXZhdGluZyB2YXJpb3VzIG5hbWVzcGFjZSBhc3NvY2lhdGlvbiBtb2Rlcy4KKy8vIF9HTElCQ1hYX05BTUVTUEFDRV9BU1NPQ0lBVElPTl9ERUJVRworLy8gX0dMSUJDWFhfTkFNRVNQQUNFX0FTU09DSUFUSU9OX1BBUkFMTEVMCisvLyBfR0xJQkNYWF9OQU1FU1BBQ0VfQVNTT0NJQVRJT05fVkVSU0lPTgorCisvLyBHdWlkZSB0byBsaWJzdGRjKysgbmFtZXNwYWNlcy4KKy8qCisgIG5hbWVzcGFjZSBzdGQKKyAgeworICAgIG5hbWVzcGFjZSBfX2RlYnVnIHsgfQorICAgIG5hbWVzcGFjZSBfX3BhcmFsbGVsIHsgfQorICAgIG5hbWVzcGFjZSBfX25vcm0geyB9IC8vIF9fbm9ybWF0aXZlLCBfX3NoYWRvdywgX19yZXBsYWNlZAorICAgIG5hbWVzcGFjZSBfX2N4eDE5OTggeyB9CisKKyAgICBuYW1lc3BhY2UgdHIxIHsgfQorICB9CisqLworI2lmIF9fY3BsdXNwbHVzCisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworIyBkZWZpbmUgX0dMSUJDWFhfTkFNRVNQQUNFX0FTU09DSUFUSU9OX0RFQlVHIDEKKyNlbmRpZgorCisjaWZkZWYgX0dMSUJDWFhfUEFSQUxMRUwKKyMgZGVmaW5lIF9HTElCQ1hYX05BTUVTUEFDRV9BU1NPQ0lBVElPTl9QQVJBTExFTCAxCisjZW5kaWYKKworLy8gTmFtZXNwYWNlIGFzc29jaWF0aW9uIGZvciBwcm9maWxlCisjaWZkZWYgX0dMSUJDWFhfUFJPRklMRQorIyBkZWZpbmUgX0dMSUJDWFhfTkFNRVNQQUNFX0FTU09DSUFUSU9OX1BST0ZJTEUgMQorI2VuZGlmCisKKyMgZGVmaW5lIF9HTElCQ1hYX05BTUVTUEFDRV9BU1NPQ0lBVElPTl9WRVJTSU9OIDAgCisKKy8vIERlZmluZWQgaWYgYW55IG5hbWVzcGFjZSBhc3NvY2lhdGlvbiBtb2RlcyBhcmUgYWN0aXZlLgorI2lmIF9HTElCQ1hYX05BTUVTUEFDRV9BU1NPQ0lBVElPTl9ERUJVRyBcCisgIHx8IF9HTElCQ1hYX05BTUVTUEFDRV9BU1NPQ0lBVElPTl9QQVJBTExFTCBcCisgIHx8IF9HTElCQ1hYX05BTUVTUEFDRV9BU1NPQ0lBVElPTl9QUk9GSUxFIFwKKyAgfHwgX0dMSUJDWFhfTkFNRVNQQUNFX0FTU09DSUFUSU9OX1ZFUlNJT04KKyMgZGVmaW5lIF9HTElCQ1hYX1VTRV9OQU1FU1BBQ0VfQVNTT0NJQVRJT04gMQorI2VuZGlmCisKKy8vIE1hY3JvcyBmb3IgbmFtZXNwYWNlIHNjb3BlLiBFaXRoZXIgbmFtZXNwYWNlIHN0ZDo6IG9yIHRoZSBuYW1lCisvLyBvZiBzb21lIG5lc3RlZCBuYW1lc3BhY2Ugd2l0aGluIGl0LgorLy8gX0dMSUJDWFhfU1RECisvLyBfR0xJQkNYWF9TVERfRAorLy8gX0dMSUJDWFhfU1REX1AKKy8vCisvLyBNYWNyb3MgZm9yIGVuY2xvc2luZyBuYW1lc3BhY2VzIGFuZCBwb3NzaWJseSBuZXN0ZWQgbmFtZXNwYWNlcy4KKy8vIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRQorLy8gX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorLy8gX0dMSUJDWFhfQkVHSU5fTkVTVEVEX05BTUVTUEFDRQorLy8gX0dMSUJDWFhfRU5EX05FU1RFRF9OQU1FU1BBQ0UKKyNpZm5kZWYgX0dMSUJDWFhfVVNFX05BTUVTUEFDRV9BU1NPQ0lBVElPTgorIyBkZWZpbmUgX0dMSUJDWFhfU1REX0QgX0dMSUJDWFhfU1RECisjIGRlZmluZSBfR0xJQkNYWF9TVERfUCBfR0xJQkNYWF9TVEQKKyMgZGVmaW5lIF9HTElCQ1hYX1NURF9QUiBfR0xJQkNYWF9TVEQKKyMgZGVmaW5lIF9HTElCQ1hYX1NURCBzdGQKKyMgZGVmaW5lIF9HTElCQ1hYX0JFR0lOX05FU1RFRF9OQU1FU1BBQ0UoWCwgWSkgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKFgpCisjIGRlZmluZSBfR0xJQkNYWF9FTkRfTkVTVEVEX05BTUVTUEFDRSBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoWCkgbmFtZXNwYWNlIFggX0dMSUJDWFhfVklTSUJJTElUWV9BVFRSKGRlZmF1bHQpIHsKKyMgZGVmaW5lIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0UgfQorI2Vsc2UKKworIyBpZiBfR0xJQkNYWF9OQU1FU1BBQ0VfQVNTT0NJQVRJT05fVkVSU0lPTiAvLyAmJiBub3QgYW55dGhpbmcgZWxzZQorIyAgZGVmaW5lIF9HTElCQ1hYX1NURF9EIF9HTElCQ1hYX1NURAorIyAgZGVmaW5lIF9HTElCQ1hYX1NURF9QIF9HTElCQ1hYX1NURAorIyAgZGVmaW5lIF9HTElCQ1hYX1NURCBfNgorIyAgZGVmaW5lIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShYKSBfR0xJQkNYWF9CRUdJTl9ORVNURURfTkFNRVNQQUNFKFgsIF82KQorIyAgZGVmaW5lIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0UgX0dMSUJDWFhfRU5EX05FU1RFRF9OQU1FU1BBQ0UKKyMgZW5kaWYKKworLy8gIGRlYnVnCisjIGlmIF9HTElCQ1hYX05BTUVTUEFDRV9BU1NPQ0lBVElPTl9ERUJVRyAmJiAhX0dMSUJDWFhfTkFNRVNQQUNFX0FTU09DSUFUSU9OX1BBUkFMTEVMICYmICFfR0xJQkNYWF9OQU1FU1BBQ0VfQVNTT0NJQVRJT05fUFJPRklMRQorIyAgZGVmaW5lIF9HTElCQ1hYX1NURF9EIF9fbm9ybQorIyAgZGVmaW5lIF9HTElCQ1hYX1NURF9QIF9HTElCQ1hYX1NURAorIyAgZGVmaW5lIF9HTElCQ1hYX1NURCBfX2N4eDE5OTgKKyMgIGRlZmluZSBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoWCkgbmFtZXNwYWNlIFggX0dMSUJDWFhfVklTSUJJTElUWV9BVFRSKGRlZmF1bHQpIHsgCisjICBkZWZpbmUgX0dMSUJDWFhfRU5EX05BTUVTUEFDRSB9CisjICBkZWZpbmUgX0dMSUJDWFhfRVhURVJOX1RFTVBMQVRFIC0xCisjIGVuZGlmCisKKy8vIHBhcmFsbGVsCisjIGlmIF9HTElCQ1hYX05BTUVTUEFDRV9BU1NPQ0lBVElPTl9QQVJBTExFTCAmJiAhX0dMSUJDWFhfTkFNRVNQQUNFX0FTU09DSUFUSU9OX0RFQlVHICYmICFfR0xJQkNYWF9OQU1FU1BBQ0VfQVNTT0NJQVRJT05fUFJPRklMRQorIyAgZGVmaW5lIF9HTElCQ1hYX1NURF9EIF9HTElCQ1hYX1NURAorIyAgZGVmaW5lIF9HTElCQ1hYX1NURF9QIF9fbm9ybQorIyAgZGVmaW5lIF9HTElCQ1hYX1NURCBfX2N4eDE5OTgKKyMgIGRlZmluZSBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoWCkgbmFtZXNwYWNlIFggX0dMSUJDWFhfVklTSUJJTElUWV9BVFRSKGRlZmF1bHQpIHsgCisjICBkZWZpbmUgX0dMSUJDWFhfRU5EX05BTUVTUEFDRSB9CisjIGVuZGlmCisKKy8vIGRlYnVnICsgcGFyYWxsZWwKKyMgaWYgX0dMSUJDWFhfTkFNRVNQQUNFX0FTU09DSUFUSU9OX1BBUkFMTEVMICYmIF9HTElCQ1hYX05BTUVTUEFDRV9BU1NPQ0lBVElPTl9ERUJVRyAgJiYgIV9HTElCQ1hYX05BTUVTUEFDRV9BU1NPQ0lBVElPTl9QUk9GSUxFCisjICBkZWZpbmUgX0dMSUJDWFhfU1REX0QgX19ub3JtCisjICBkZWZpbmUgX0dMSUJDWFhfU1REX1AgX19ub3JtCisjICBkZWZpbmUgX0dMSUJDWFhfU1REIF9fY3h4MTk5OAorIyAgZGVmaW5lIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShYKSBuYW1lc3BhY2UgWCBfR0xJQkNYWF9WSVNJQklMSVRZX0FUVFIoZGVmYXVsdCkgeyAKKyMgIGRlZmluZSBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFIH0KKyMgIGRlZmluZSBfR0xJQkNYWF9FWFRFUk5fVEVNUExBVEUgLTEKKyMgZW5kaWYKKworLy8gcHJvZmlsZQorIyBpZiBfR0xJQkNYWF9OQU1FU1BBQ0VfQVNTT0NJQVRJT05fUFJPRklMRQorIyAgaWYgX0dMSUJDWFhfTkFNRVNQQUNFX0FTU09DSUFUSU9OX1BBUkFMTEVMIHx8IF9HTElCQ1hYX05BTUVTUEFDRV9BU1NPQ0lBVElPTl9ERUJVRworIyAgIGVycm9yIENhbm5vdCB1c2UgLURfR0xJQkNYWF9QUk9GSUxFIHdpdGggLURfR0xJQkNYWF9ERUJVRyBvciBcCisgICAgLURfR0xJQkNYWF9QQVJBTExFTAorIyAgZW5kaWYKKyMgIGRlZmluZSBfR0xJQkNYWF9TVERfRCBfX25vcm0KKyMgIGRlZmluZSBfR0xJQkNYWF9TVERfUCBfR0xJQkNYWF9TVEQKKyMgIGRlZmluZSBfR0xJQkNYWF9TVERfUFIgX19ub3JtCisjICBkZWZpbmUgX0dMSUJDWFhfU1REIF9fY3h4MTk5OAorIyAgZGVmaW5lIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShYKSBuYW1lc3BhY2UgWCBfR0xJQkNYWF9WSVNJQklMSVRZX0FUVFIoZGVmYXVsdCkgeyAKKyMgIGRlZmluZSBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFIH0KKyMgZW5kaWYKKworIyBpZiBfX05PX0lOTElORV9fICYmICFfX0dYWF9XRUFLX18KKyMgIHdhcm5pbmcgY3VycmVudGx5IHVzaW5nIG5hbWVzcGFjZSBhc3NvY2lhdGVkIG1vZGUgd2hpY2ggbWF5IGZhaWwgXAorICAgd2l0aG91dCBpbmxpbmluZyBkdWUgdG8gbGFjayBvZiB3ZWFrIHN5bWJvbHMKKyMgZW5kaWYKKworIyBkZWZpbmUgX0dMSUJDWFhfQkVHSU5fTkVTVEVEX05BTUVTUEFDRShYLCBZKSAgbmFtZXNwYWNlIFggeyBuYW1lc3BhY2UgWSBfR0xJQkNYWF9WSVNJQklMSVRZX0FUVFIoZGVmYXVsdCkgeworIyBkZWZpbmUgX0dMSUJDWFhfRU5EX05FU1RFRF9OQU1FU1BBQ0UgfSB9CisjZW5kaWYKKworLy8gTmFtZXNwYWNlIGFzc29jaWF0aW9ucyBmb3IgZGVidWcgbW9kZS4KKyNpZiBfR0xJQkNYWF9OQU1FU1BBQ0VfQVNTT0NJQVRJT05fREVCVUcgJiYgIV9HTElCQ1hYX05BTUVTUEFDRV9BU1NPQ0lBVElPTl9QUk9GSUxFCituYW1lc3BhY2Ugc3RkCit7IAorICBuYW1lc3BhY2UgX19ub3JtIHsgfSAKKyAgaW5saW5lIG5hbWVzcGFjZSBfX2RlYnVnIHsgfQorICBpbmxpbmUgbmFtZXNwYWNlIF9fY3h4MTk5OCB7IH0KK30KKyNlbmRpZgorCisvLyBOYW1lc3BhY2UgYXNzb2NpYXRpb25zIGZvciBwYXJhbGxlbCBtb2RlLgorI2lmIF9HTElCQ1hYX05BTUVTUEFDRV9BU1NPQ0lBVElPTl9QQVJBTExFTAorbmFtZXNwYWNlIHN0ZAoreyAKKyAgbmFtZXNwYWNlIF9fbm9ybSB7IH0gCisgIGlubGluZSBuYW1lc3BhY2UgX19wYXJhbGxlbCB7IH0KKyAgaW5saW5lIG5hbWVzcGFjZSBfX2N4eDE5OTggeyB9Cit9CisjZW5kaWYKKworLy8gTmFtZXNwYWNlIGFzc29jaWF0aW9ucyBmb3IgcHJvZmlsZSBtb2RlCisjaWYgX0dMSUJDWFhfTkFNRVNQQUNFX0FTU09DSUFUSU9OX1BST0ZJTEUKK25hbWVzcGFjZSBzdGQKK3sgCisgIG5hbWVzcGFjZSBfX25vcm0geyB9IAorICBpbmxpbmUgbmFtZXNwYWNlIF9fcHJvZmlsZSB7IH0KKyAgaW5saW5lIG5hbWVzcGFjZSBfX2N4eDE5OTggeyB9Cit9CisjZW5kaWYKKworLy8gTmFtZXNwYWNlIGFzc29jaWF0aW9ucyBmb3IgdmVyc2lvbmluZyBtb2RlLgorI2lmIF9HTElCQ1hYX05BTUVTUEFDRV9BU1NPQ0lBVElPTl9WRVJTSU9OCituYW1lc3BhY2Ugc3RkCit7CisgIGlubGluZSBuYW1lc3BhY2UgXzYgeyB9Cit9CisKK25hbWVzcGFjZSBfX2dudV9jeHggCit7IAorICBpbmxpbmUgbmFtZXNwYWNlIF82IHsgfQorfQorCituYW1lc3BhY2Ugc3RkCit7CisgIG5hbWVzcGFjZSB0cjEgCisgIHsgCisgICAgaW5saW5lIG5hbWVzcGFjZSBfNiB7IH0KKyAgfQorfQorI2VuZGlmCisKKy8vIFhYWCBHTElCQ1hYX0FCSSBEZXByZWNhdGVkCisvLyBEZWZpbmUgaWYgY29tcGF0aWJpbGl0eSBzaG91bGQgYmUgcHJvdmlkZWQgZm9yIC1tbG9uZy1kb3VibGUtNjQKKyN1bmRlZiBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQKKworLy8gTmFtZXNwYWNlIGFzc29jaWF0aW9ucyBmb3IgbG9uZyBkb3VibGUgMTI4IG1vZGUuCisjaWYgZGVmaW5lZCBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQgJiYgZGVmaW5lZCBfX0xPTkdfRE9VQkxFXzEyOF9fIAorbmFtZXNwYWNlIHN0ZAoreworICBpbmxpbmUgbmFtZXNwYWNlIF9fZ251X2N4eF9sZGJsMTI4IHsgfQorfQorIyBkZWZpbmUgX0dMSUJDWFhfTERCTF9OQU1FU1BBQ0UgX19nbnVfY3h4X2xkYmwxMjg6OgorIyBkZWZpbmUgX0dMSUJDWFhfQkVHSU5fTERCTF9OQU1FU1BBQ0UgbmFtZXNwYWNlIF9fZ251X2N4eF9sZGJsMTI4IHsKKyMgZGVmaW5lIF9HTElCQ1hYX0VORF9MREJMX05BTUVTUEFDRSB9CisjZWxzZQorIyBkZWZpbmUgX0dMSUJDWFhfTERCTF9OQU1FU1BBQ0UKKyMgZGVmaW5lIF9HTElCQ1hYX0JFR0lOX0xEQkxfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xJQkNYWF9FTkRfTERCTF9OQU1FU1BBQ0UKKyNlbmRpZgorCisKKy8vIERlZmluZXMgZm9yIEMgY29tcGF0aWJpbGl0eS4gSW4gcGFydGljdWxhciwgZGVmaW5lIGV4dGVybiAiQyIKKy8vIGxpbmthZ2Ugb25seSB3aGVuIHVzaW5nIEMrKy4KKyMgZGVmaW5lIF9HTElCQ1hYX0JFR0lOX0VYVEVSTl9DIGV4dGVybiAiQyIgeworIyBkZWZpbmUgX0dMSUJDWFhfRU5EX0VYVEVSTl9DIH0KKworI2Vsc2UgLy8gIV9fY3BsdXNwbHVzCisjIHVuZGVmIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRQorIyB1bmRlZiBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisjIGRlZmluZSBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoWCkgCisjIGRlZmluZSBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFIAorIyBkZWZpbmUgX0dMSUJDWFhfQkVHSU5fRVhURVJOX0MKKyMgZGVmaW5lIF9HTElCQ1hYX0VORF9FWFRFUk5fQyAKKyNlbmRpZgorCisvLyBGaXJzdCBpbmNsdWRlcy4KKworLy8gUGljayB1cCBhbnkgT1Mtc3BlY2lmaWMgZGVmaW5pdGlvbnMuCisjaW5jbHVkZSA8Yml0cy9vc19kZWZpbmVzLmg+CisKKy8vIFBpY2sgdXAgYW55IENQVS1zcGVjaWZpYyBkZWZpbml0aW9ucy4KKyNpbmNsdWRlIDxiaXRzL2NwdV9kZWZpbmVzLmg+CisKKy8vIElmIHBsYXRmb3JtIHVzZXMgbmVpdGhlciB2aXNpYmlsaXR5IG5vciBwc3VlZG8tdmlzaWJpbGl0eSwKKy8vIHNwZWNpZnkgZW1wdHkgZGVmYXVsdCBmb3IgbmFtZXNwYWNlIGFubm90YXRpb24gbWFjcm9zLgorI2lmbmRlZiBfR0xJQkNYWF9QU0VVRE9fVklTSUJJTElUWQorI2RlZmluZSBfR0xJQkNYWF9QU0VVRE9fVklTSUJJTElUWShWKQorI2VuZGlmCisKKy8vIEFsbG93IHVzZSBvZiAiZXhwb3J0IHRlbXBsYXRlLiIgVGhpcyBpcyBjdXJyZW50bHkgbm90IGEgZmVhdHVyZQorLy8gdGhhdCBnKysgc3VwcG9ydHMuCisvLyAjZGVmaW5lIF9HTElCQ1hYX0VYUE9SVF9URU1QTEFURSAxCisKKy8vIEFsbG93IHVzZSBvZiB0aGUgR05VIHN5bnRheCBleHRlbnNpb24sICJleHRlcm4gdGVtcGxhdGUuIiBUaGlzCisvLyBleHRlbnNpb24gaXMgZnVsbHkgZG9jdW1lbnRlZCBpbiB0aGUgZysrIG1hbnVhbCwgYnV0IGluIGEgbnV0c2hlbGwsCisvLyBpdCBpbmhpYml0cyBhbGwgaW1wbGljaXQgaW5zdGFudGlhdGlvbnMgYW5kIGlzIHVzZWQgdGhyb3VnaG91dCB0aGUKKy8vIGxpYnJhcnkgdG8gYXZvaWQgbXVsdGlwbGUgd2VhayBkZWZpbml0aW9ucyBmb3IgcmVxdWlyZWQgdHlwZXMgdGhhdAorLy8gYXJlIGFscmVhZHkgZXhwbGljaXRseSBpbnN0YW50aWF0ZWQgaW4gdGhlIGxpYnJhcnkgYmluYXJ5LiBUaGlzCisvLyBzdWJzdGFudGlhbGx5IHJlZHVjZXMgdGhlIGJpbmFyeSBzaXplIG9mIHJlc3VsdGluZyBleGVjdXRhYmxlcy4KKworLy8gU3BlY2lhbCBjYXNlOiBfR0xJQkNYWF9FWFRFUk5fVEVNUExBVEUgPT0gLTEgZGlzYWxsb3dzIGV4dGVybgorLy8gdGVtcGxhdGVzIG9ubHkgaW4gYmFzaWNfc3RyaW5nLCB0aHVzIGFjdGl2YXRpbmcgaXRzIGRlYnVnLW1vZGUKKy8vIGNoZWNrcyBldmVuIGF0IC1PMC4KKyNpZm5kZWYgX0dMSUJDWFhfRVhURVJOX1RFTVBMQVRFCisjIGRlZmluZSBfR0xJQkNYWF9FWFRFUk5fVEVNUExBVEUgMQorI2VuZGlmCisKKy8vIENlcnRhaW4gZnVuY3Rpb24gZGVmaW5pdGlvbnMgdGhhdCBhcmUgbWVhbnQgdG8gYmUgb3ZlcnJpZGFibGUgZnJvbQorLy8gdXNlciBjb2RlIGFyZSBkZWNvcmF0ZWQgd2l0aCB0aGlzIG1hY3JvLiAgRm9yIHNvbWUgdGFyZ2V0cywgdGhpcworLy8gbWFjcm8gY2F1c2VzIHRoZXNlIGRlZmluaXRpb25zIHRvIGJlIHdlYWsuCisjaWZuZGVmIF9HTElCQ1hYX1dFQUtfREVGSU5JVElPTgorIyBkZWZpbmUgX0dMSUJDWFhfV0VBS19ERUZJTklUSU9OCisjZW5kaWYKKworLy8gQXNzZXJ0LgorLy8gQXZvaWQgdGhlIHVzZSBvZiBhc3NlcnQsIGJlY2F1c2Ugd2UncmUgdHJ5aW5nIHRvIGtlZXAgdGhlIDxjYXNzZXJ0PgorLy8gaW5jbHVkZSBvdXQgb2YgdGhlIG1peC4KKyNpZiAhZGVmaW5lZChfR0xJQkNYWF9ERUJVRykgJiYgIWRlZmluZWQoX0dMSUJDWFhfUEFSQUxMRUwpCisjZGVmaW5lIF9fZ2xpYmN4eF9hc3NlcnQoX0NvbmRpdGlvbikKKyNlbHNlCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorICAvLyBBdm9pZCB0aGUgdXNlIG9mIGFzc2VydCwgYmVjYXVzZSB3ZSdyZSB0cnlpbmcgdG8ga2VlcCB0aGUgPGNhc3NlcnQ+CisgIC8vIGluY2x1ZGUgb3V0IG9mIHRoZSBtaXguCisgIGlubGluZSB2b2lkCisgIF9fcmVwbGFjZW1lbnRfYXNzZXJ0KGNvbnN0IGNoYXIqIF9fZmlsZSwgaW50IF9fbGluZSwgCisJCSAgICAgICBjb25zdCBjaGFyKiBfX2Z1bmN0aW9uLCBjb25zdCBjaGFyKiBfX2NvbmRpdGlvbikKKyAgeworICAgIF9fYnVpbHRpbl9wcmludGYoIiVzOiVkOiAlczogQXNzZXJ0aW9uICclcycgZmFpbGVkLlxuIiwgX19maWxlLCBfX2xpbmUsCisJCSAgICAgX19mdW5jdGlvbiwgX19jb25kaXRpb24pOworICAgIF9fYnVpbHRpbl9hYm9ydCgpOworICB9CitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNkZWZpbmUgX19nbGliY3h4X2Fzc2VydChfQ29uZGl0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAorICBkbyAJCQkJCQkJCSAgICAgICAgXAorICB7CQkJCQkJCSAgICAgIAkJXAorICAgIGlmICghIChfQ29uZGl0aW9uKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RkOjpfX3JlcGxhY2VtZW50X2Fzc2VydChfX0ZJTEVfXywgX19MSU5FX18sIAkJCVwKKwkJCQlfX1BSRVRUWV9GVU5DVElPTl9fLCAjX0NvbmRpdGlvbik7CVwKKyAgfSB3aGlsZSAoZmFsc2UpCisjZW5kaWYKKworLy8gVGhlIHJlbWFpbmRlciBvZiB0aGUgcHJld3JpdHRlbiBjb25maWcgaXMgYXV0b21hdGljOyBhbGwgdGhlCisvLyB1c2VyIGhvb2tzIGFyZSBsaXN0ZWQgYWJvdmUuCisKKy8vIENyZWF0ZSBhIGJvb2xlYW4gZmxhZyB0byBiZSB1c2VkIHRvIGRldGVybWluZSBpZiAtLWZhc3QtbWF0aCBpcyBzZXQuCisjaWZkZWYgX19GQVNUX01BVEhfXworIyBkZWZpbmUgX0dMSUJDWFhfRkFTVF9NQVRIIDEKKyNlbHNlCisjIGRlZmluZSBfR0xJQkNYWF9GQVNUX01BVEggMAorI2VuZGlmCisKKy8vIFRoaXMgbWFya3Mgc3RyaW5nIGxpdGVyYWxzIGluIGhlYWRlciBmaWxlcyB0byBiZSBleHRyYWN0ZWQgZm9yIGV2ZW50dWFsCisvLyB0cmFuc2xhdGlvbi4gIEl0IGlzIHByaW1hcmlseSB1c2VkIGZvciBtZXNzYWdlcyBpbiB0aHJvd24gZXhjZXB0aW9uczsgc2VlCisvLyBzcmMvZnVuY3RleGNlcHQuY2MuICBXZSB1c2UgX19OIGJlY2F1c2UgdGhlIG1vcmUgdHJhZGl0aW9uYWwgX04gaXMgdXNlZAorLy8gZm9yIHNvbWV0aGluZyBlbHNlIHVuZGVyIGNlcnRhaW4gT1NlcyAoc2VlIEJBRE5BTUVTKS4KKyNkZWZpbmUgX19OKG1zZ2lkKSAgICAgKG1zZ2lkKQorCisvLyBGb3IgZXhhbXBsZSwgPHdpbmRvd3MuaD4gaXMga25vd24gdG8gI2RlZmluZSBtaW4gYW5kIG1heCBhcyBtYWNyb3MuLi4KKyN1bmRlZiBtaW4KKyN1bmRlZiBtYXgKKworI2lmbmRlZiBfR0xJQkNYWF9QVVJFCisjIGRlZmluZSBfR0xJQkNYWF9QVVJFIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpCisjZW5kaWYKKworI2lmbmRlZiBfR0xJQkNYWF9DT05TVAorIyBkZWZpbmUgX0dMSUJDWFhfQ09OU1QgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpCisjZW5kaWYKKworI2lmbmRlZiBfR0xJQkNYWF9OT1JFVFVSTgorIyBkZWZpbmUgX0dMSUJDWFhfTk9SRVRVUk4gX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpCisjZW5kaWYKKworI2lmbmRlZiBfR0xJQkNYWF9OT1RIUk9XCisjIGlmZGVmIF9fY3BsdXNwbHVzCisjICBkZWZpbmUgX0dMSUJDWFhfTk9USFJPVyB0aHJvdygpIAorIyBlbHNlCisjICBkZWZpbmUgX0dMSUJDWFhfTk9USFJPVyBfX2F0dHJpYnV0ZV9fKChfX25vdGhyb3dfXykpCisjIGVuZGlmCisjZW5kaWYKKworLy8gRW5kIG9mIHByZXdyaXR0ZW4gY29uZmlnOyB0aGUgZGlzY292ZXJlZCBzZXR0aW5ncyBmb2xsb3cuCisvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZy5oLmluIGJ5IGNvbmZpZ3VyZS4gICovCisvKiBjb25maWcuaC5pbi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5hYyBieSBhdXRvaGVhZGVyLiAgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhY29zZicgZnVuY3Rpb24uICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfQUNPU0YgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGFjb3NsJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX0FDT1NMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYXNpbmYnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0FTSU5GIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhc2lubCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9BU0lOTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgdGFyZ2V0IGFzc2VtYmxlciBzdXBwb3J0cyAuc3ltdmVyIGRpcmVjdGl2ZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9BU19TWU1WRVJfRElSRUNUSVZFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhdGFuMmYnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0FUQU4yRiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYXRhbjJsJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX0FUQU4yTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGF0YW5mJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9BVEFORiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYXRhbmwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfQVRBTkwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHRhcmdldCBhc3NlbWJsZXIgc3VwcG9ydHMgdGhyZWFkLWxvY2FsIHN0b3JhZ2UuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9DQ19UTFMgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjZWlsZicgZnVuY3Rpb24uICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfQ0VJTEYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNlaWxsJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX0NFSUxMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Y29tcGxleC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9DT01QTEVYX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNvc2YnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0NPU0YgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNvc2hmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9DT1NIRiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY29zaGwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfQ09TSEwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjb3NsJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX0NPU0wgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkbGZjbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9ETEZDTl9IIDEKKworLyogRGVmaW5lIGlmIEVCQURNU0cgZXhpc3RzLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0VCQURNU0cgMQorCisvKiBEZWZpbmUgaWYgRUNBTkNFTEVEIGV4aXN0cy4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9FQ0FOQ0VMRUQgMQorCisvKiBEZWZpbmUgaWYgRUlEUk0gZXhpc3RzLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0VJRFJNIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxlbmRpYW4uaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfRU5ESUFOX0ggMQorCisvKiBEZWZpbmUgaWYgRU5PREFUQSBleGlzdHMuICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfRU5PREFUQSAxCisKKy8qIERlZmluZSBpZiBFTk9MSU5LIGV4aXN0cy4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9FTk9MSU5LIDEKKworLyogRGVmaW5lIGlmIEVOT1NSIGV4aXN0cy4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9FTk9TUiAxCisKKy8qIERlZmluZSBpZiBFTk9TVFIgZXhpc3RzLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0VOT1NUUiAxCisKKy8qIERlZmluZSBpZiBFTk9UUkVDT1ZFUkFCTEUgZXhpc3RzLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0VOT1RSRUNPVkVSQUJMRSAxCisKKy8qIERlZmluZSBpZiBFTk9UU1VQIGV4aXN0cy4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9FTk9UU1VQIDEKKworLyogRGVmaW5lIGlmIEVPVkVSRkxPVyBleGlzdHMuICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfRU9WRVJGTE9XIDEKKworLyogRGVmaW5lIGlmIEVPV05FUkRFQUQgZXhpc3RzLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0VPV05FUkRFQUQgMQorCisvKiBEZWZpbmUgaWYgRVBST1RPIGV4aXN0cy4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9FUFJPVE8gMQorCisvKiBEZWZpbmUgaWYgRVRJTUUgZXhpc3RzLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0VUSU1FIDEKKworLyogRGVmaW5lIGlmIEVUWFRCU1kgZXhpc3RzLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0VUWFRCU1kgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGV4ZWNpbmZvLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0VYRUNJTkZPX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGV4cGYnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0VYUEYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGV4cGwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfRVhQTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZhYnNmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9GQUJTRiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmFic2wnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfRkFCU0wgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxmZW52Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0ZFTlZfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmluaXRlJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9GSU5JVEUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZpbml0ZWYnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0ZJTklURUYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZpbml0ZWwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfRklOSVRFTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGZsb2F0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0ZMT0FUX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZsb29yZicgZnVuY3Rpb24uICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfRkxPT1JGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmbG9vcmwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfRkxPT1JMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZm1vZGYnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0ZNT0RGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmbW9kbCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9GTU9ETCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZwY2xhc3MnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfRlBDTEFTUyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGZwLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfRlBfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZyZXhwZicgZnVuY3Rpb24uICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfRlJFWFBGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmcmV4cGwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfRlJFWFBMICovCisKKy8qIERlZmluZSBpZiBfVW53aW5kX0dldElQSW5mbyBpcyBhdmFpbGFibGUuICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfR0VUSVBJTkZPIDEKKworLyogRGVmaW5lIGlmIGd0aHItZGVmYXVsdC5oIGV4aXN0cyAobWVhbmluZyB0aGF0IHRocmVhZGluZyBzdXBwb3J0IGlzCisgICBlbmFibGVkKS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9HVEhSX0RFRkFVTFQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGh5cG90JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9IWVBPVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaHlwb3RmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9IWVBPVEYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGh5cG90bCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9IWVBPVEwgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpY29udigpIGZ1bmN0aW9uLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0lDT05WIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpZWVlZnAuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9JRUVFRlBfSCAqLworCisvKiBEZWZpbmUgaWYgaW50NjRfdCBpcyBhdmFpbGFibGUgaW4gPHN0ZGludC5oPi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9JTlQ2NF9UIDEKKworLyogRGVmaW5lIGlmIGludDY0X3QgaXMgYSBsb25nLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfSU5UNjRfVF9MT05HICovCisKKy8qIERlZmluZSBpZiBpbnQ2NF90IGlzIGEgbG9uZyBsb25nLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0lOVDY0X1RfTE9OR19MT05HIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9JTlRUWVBFU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpc2luZicgZnVuY3Rpb24uICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfSVNJTkYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlzaW5mZicgZnVuY3Rpb24uICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfSVNJTkZGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpc2luZmwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfSVNJTkZMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaXNuYW4nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0lTTkFOIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpc25hbmYnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0lTTkFORiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaXNuYW5sJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX0lTTkFOTCAqLworCisvKiBEZWZpbmVkIGlmIGlzd2JsYW5rIGV4aXN0cy4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9JU1dCTEFOSyAxCisKKy8qIERlZmluZSBpZiBMQ19NRVNTQUdFUyBpcyBhdmFpbGFibGUgaW4gPGxvY2FsZS5oPi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9MQ19NRVNTQUdFUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGRleHBmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9MREVYUEYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxkZXhwbCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9MREVYUEwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaWJpbnRsLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfTElCSU5UTF9IICovCisKKy8qIE9ubHkgdXNlZCBpbiBidWlsZCBkaXJlY3RvcnkgdGVzdHN1aXRlX2hvb2tzLmguICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9MSU1JVF9BUyAqLworCisvKiBPbmx5IHVzZWQgaW4gYnVpbGQgZGlyZWN0b3J5IHRlc3RzdWl0ZV9ob29rcy5oLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfTElNSVRfREFUQSAqLworCisvKiBPbmx5IHVzZWQgaW4gYnVpbGQgZGlyZWN0b3J5IHRlc3RzdWl0ZV9ob29rcy5oLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfTElNSVRfRlNJWkUgKi8KKworLyogT25seSB1c2VkIGluIGJ1aWxkIGRpcmVjdG9yeSB0ZXN0c3VpdGVfaG9va3MuaC4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX0xJTUlUX1JTUyAqLworCisvKiBPbmx5IHVzZWQgaW4gYnVpbGQgZGlyZWN0b3J5IHRlc3RzdWl0ZV9ob29rcy5oLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfTElNSVRfVk1FTSAqLworCisvKiBEZWZpbmUgaWYgZnV0ZXggc3lzY2FsbCBpcyBhdmFpbGFibGUuICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfTElOVVhfRlVURVggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxvY2FsZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9MT0NBTEVfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbG9nMTBmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9MT0cxMEYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxvZzEwbCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9MT0cxMEwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsb2dmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9MT0dGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsb2dsJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX0xPR0wgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtYWNoaW5lL2VuZGlhbi5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX01BQ0hJTkVfRU5ESUFOX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtYWNoaW5lL3BhcmFtLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfTUFDSElORV9QQVJBTV9IICovCisKKy8qIERlZmluZSBpZiBtYnN0YXRlX3QgZXhpc3RzIGluIHdjaGFyLmguICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfTUJTVEFURV9UIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfTUVNT1JZX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1vZGYnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX01PREYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1vZGZmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9NT0RGRiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbW9kZmwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfTU9ERkwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuYW4uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9OQU5fSCAqLworCisvKiBEZWZpbmUgaWYgcG9sbCBpcyBhdmFpbGFibGUgaW4gPHBvbGwuaD4uICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfUE9MTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcG93ZicgZnVuY3Rpb24uICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfUE9XRiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcG93bCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9QT1dMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcWZwY2xhc3MnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfUUZQQ0xBU1MgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRlbnYnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfU0VURU5WICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2luY29zJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9TSU5DT1MgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpbmNvc2YnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1NJTkNPU0YgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpbmNvc2wnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfU0lOQ09TTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpbmYnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1NJTkYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpbmhmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9TSU5IRiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2luaGwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfU0lOSEwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzaW5sJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX1NJTkwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzcXJ0ZicgZnVuY3Rpb24uICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfU1FSVEYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNxcnRsJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX1NRUlRMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkYm9vbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9TVERCT09MX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9TVERJTlRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1NURExJQl9IIDEKKworLyogRGVmaW5lIGlmIHN0cmVycm9yX2wgaXMgYXZhaWxhYmxlIGluIDxzdHJpbmcuaD4uICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfU1RSRVJST1JfTCAxCisKKy8qIERlZmluZSBpZiBzdHJlcnJvcl9yIGlzIGF2YWlsYWJsZSBpbiA8c3RyaW5nLmg+LiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1NUUkVSUk9SX1IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfU1RSSU5HU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfU1RSSU5HX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnRvZicgZnVuY3Rpb24uICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfU1RSVE9GIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJ0b2xkJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9TVFJUT0xEIDEKKworLyogRGVmaW5lIGlmIHN0cnhmcm1fbCBpcyBhdmFpbGFibGUgaW4gPHN0cmluZy5oPi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9TVFJYRlJNX0wgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9maWxpby5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX1NZU19GSUxJT19IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2lvY3RsLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1NZU19JT0NUTF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvaXBjLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1NZU19JUENfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2lzYV9kZWZzLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfU1lTX0lTQV9ERUZTX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvbWFjaGluZS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX1NZU19NQUNISU5FX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcGFyYW0uaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfU1lTX1BBUkFNX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9yZXNvdXJjZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9TWVNfUkVTT1VSQ0VfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NlbS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9TWVNfU0VNX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zdGF0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1NZU19TVEFUX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1NZU19USU1FX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9TWVNfVFlQRVNfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Vpby5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9TWVNfVUlPX0ggMQorCisvKiBEZWZpbmUgaWYgU19JRlJFRyBpcyBhdmFpbGFibGUgaW4gPHN5cy9zdGF0Lmg+LiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfU19JRlJFRyAqLworCisvKiBEZWZpbmUgaWYgU19JRlJFRyBpcyBhdmFpbGFibGUgaW4gPHN5cy9zdGF0Lmg+LiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1NfSVNSRUcgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHRhbmYnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1RBTkYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHRhbmhmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9UQU5IRiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdGFuaGwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfVEFOSEwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB0YW5sJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX1RBTkwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0Z21hdGguaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfVEdNQVRIX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgdGFyZ2V0IHN1cHBvcnRzIHRocmVhZC1sb2NhbCBzdG9yYWdlLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1RMUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1VOSVNURF9IIDEKKworLyogRGVmaW5lZCBpZiB2ZndzY2FuZiBleGlzdHMuICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfVkZXU0NBTkYgMQorCisvKiBEZWZpbmVkIGlmIHZzd3NjYW5mIGV4aXN0cy4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9WU1dTQ0FORiAxCisKKy8qIERlZmluZWQgaWYgdndzY2FuZiBleGlzdHMuICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfVldTQ0FORiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2NoYXIuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfV0NIQVJfSCAxCisKKy8qIERlZmluZWQgaWYgd2NzdG9mIGV4aXN0cy4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9XQ1NUT0YgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHdjdHlwZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9XQ1RZUEVfSCAxCisKKy8qIERlZmluZSBpZiB3cml0ZXYgaXMgYXZhaWxhYmxlIGluIDxzeXMvdWlvLmg+LiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1dSSVRFViAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2Fjb3NmJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19BQ09TRiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9hY29zbCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fQUNPU0wgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfYXNpbmYnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0FTSU5GICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2FzaW5sJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19BU0lOTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9hdGFuMmYnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0FUQU4yRiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9hdGFuMmwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0FUQU4yTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9hdGFuZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fQVRBTkYgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfYXRhbmwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0FUQU5MICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2NlaWxmJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19DRUlMRiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9jZWlsbCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fQ0VJTEwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfY29zZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fQ09TRiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9jb3NoZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fQ09TSEYgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfY29zaGwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0NPU0hMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2Nvc2wnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0NPU0wgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfZXhwZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fRVhQRiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9leHBsJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19FWFBMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2ZhYnNmJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19GQUJTRiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9mYWJzbCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fRkFCU0wgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfZmluaXRlJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19GSU5JVEUgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfZmluaXRlZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fRklOSVRFRiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9maW5pdGVsJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19GSU5JVEVMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2Zsb29yZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fRkxPT1JGICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2Zsb29ybCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fRkxPT1JMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2Ztb2RmJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19GTU9ERiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9mbW9kbCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fRk1PREwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfZnBjbGFzcycgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fRlBDTEFTUyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9mcmV4cGYnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0ZSRVhQRiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9mcmV4cGwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0ZSRVhQTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9oeXBvdCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fSFlQT1QgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfaHlwb3RmJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19IWVBPVEYgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfaHlwb3RsJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19IWVBPVEwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfaXNpbmYnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0lTSU5GICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2lzaW5mZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fSVNJTkZGICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2lzaW5mbCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fSVNJTkZMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2lzbmFuJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19JU05BTiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9pc25hbmYnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0lTTkFORiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9pc25hbmwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0lTTkFOTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9sZGV4cGYnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0xERVhQRiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9sZGV4cGwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0xERVhQTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9sb2cxMGYnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0xPRzEwRiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9sb2cxMGwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0xPRzEwTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9sb2dmJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19MT0dGICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2xvZ2wnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0xPR0wgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfbW9kZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fTU9ERiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9tb2RmZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fTU9ERkYgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfbW9kZmwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX01PREZMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX3Bvd2YnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX1BPV0YgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfcG93bCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fUE9XTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9xZnBjbGFzcycgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fUUZQQ0xBU1MgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfc2luY29zJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19TSU5DT1MgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfc2luY29zZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fU0lOQ09TRiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9zaW5jb3NsJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19TSU5DT1NMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX3NpbmYnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX1NJTkYgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfc2luaGYnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX1NJTkhGICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX3NpbmhsJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19TSU5ITCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9zaW5sJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19TSU5MICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX3NxcnRmJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19TUVJURiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9zcXJ0bCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fU1FSVEwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfdGFuZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fVEFORiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF90YW5oZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fVEFOSEYgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfdGFuaGwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX1RBTkhMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX3RhbmwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX1RBTkwgKi8KKworLyogRGVmaW5lIGFzIGNvbnN0IGlmIHRoZSBkZWNsYXJhdGlvbiBvZiBpY29udigpIG5lZWRzIGNvbnN0LiAqLworI2RlZmluZSBfR0xJQkNYWF9JQ09OVl9DT05TVCAKKworLyogRGVmaW5lIHRvIHRoZSBzdWItZGlyZWN0b3J5IGluIHdoaWNoIGxpYnRvb2wgc3RvcmVzIHVuaW5zdGFsbGVkIGxpYnJhcmllcy4KKyAgICovCisjZGVmaW5lIExUX09CSkRJUiAiLmxpYnMvIgorCisvKiBOYW1lIG9mIHBhY2thZ2UgKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9QQUNLQUdFICovCisKKy8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLworI2RlZmluZSBfR0xJQkNYWF9QQUNLQUdFX0JVR1JFUE9SVCAiIgorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIF9HTElCQ1hYX1BBQ0tBR0VfTkFNRSAicGFja2FnZS11bnVzZWQiCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfUEFDS0FHRV9TVFJJTkcgInBhY2thZ2UtdW51c2VkIHZlcnNpb24tdW51c2VkIgorCisvKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIF9HTElCQ1hYX1BBQ0tBR0VfVEFSTkFNRSAibGlic3RkYysrIgorCisvKiBEZWZpbmUgdG8gdGhlIGhvbWUgcGFnZSBmb3IgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBfR0xJQkNYWF9QQUNLQUdFX1VSTCAiIgorCisvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBfR0xJQkNYWF9QQUNLQUdFX19HTElCQ1hYX1ZFUlNJT04gInZlcnNpb24tdW51c2VkIgorCisvKiBUaGUgc2l6ZSBvZiBgY2hhcicsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKy8qICN1bmRlZiBTSVpFT0ZfQ0hBUiAqLworCisvKiBUaGUgc2l6ZSBvZiBgaW50JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworLyogI3VuZGVmIFNJWkVPRl9JTlQgKi8KKworLyogVGhlIHNpemUgb2YgYGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisvKiAjdW5kZWYgU0laRU9GX0xPTkcgKi8KKworLyogVGhlIHNpemUgb2YgYHNob3J0JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworLyogI3VuZGVmIFNJWkVPRl9TSE9SVCAqLworCisvKiBUaGUgc2l6ZSBvZiBgdm9pZCAqJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworLyogI3VuZGVmIFNJWkVPRl9WT0lEX1AgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCisjZGVmaW5lIFNURENfSEVBREVSUyAxCisKKy8qIFZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2UgKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9WRVJTSU9OICovCisKKy8qIERlZmluZSBpZiBidWlsdGluIGF0b21pYyBvcGVyYXRpb25zIGZvciBib29sIGFyZSBzdXBwb3J0ZWQgb24gdGhpcyBob3N0LiAqLworI2RlZmluZSBfR0xJQkNYWF9BVE9NSUNfQlVJTFRJTlNfMSAxCisKKy8qIERlZmluZSBpZiBidWlsdGluIGF0b21pYyBvcGVyYXRpb25zIGZvciBzaG9ydCBhcmUgc3VwcG9ydGVkIG9uIHRoaXMgaG9zdC4KKyAgICovCisjZGVmaW5lIF9HTElCQ1hYX0FUT01JQ19CVUlMVElOU18yIDEKKworLyogRGVmaW5lIGlmIGJ1aWx0aW4gYXRvbWljIG9wZXJhdGlvbnMgZm9yIGludCBhcmUgc3VwcG9ydGVkIG9uIHRoaXMgaG9zdC4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfQVRPTUlDX0JVSUxUSU5TXzQgMQorCisvKiBEZWZpbmUgaWYgYnVpbHRpbiBhdG9taWMgb3BlcmF0aW9ucyBmb3IgbG9uZyBsb25nIGFyZSBzdXBwb3J0ZWQgb24gdGhpcworICAgaG9zdC4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9BVE9NSUNfQlVJTFRJTlNfOCAqLworCisvKiBEZWZpbmUgdG8gdXNlIGNvbmNlcHQgY2hlY2tpbmcgY29kZSBmcm9tIHRoZSBib29zdCBsaWJyYXJpZXMuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfQ09OQ0VQVF9DSEVDS1MgKi8KKworLyogRGVmaW5lIGlmIGEgZnVsbHkgZHluYW1pYyBiYXNpY19zdHJpbmcgaXMgd2FudGVkLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0ZVTExZX0RZTkFNSUNfU1RSSU5HICovCisKKy8qIERlZmluZSBpZiBndGhyZWFkcyBsaWJyYXJ5IGlzIGF2YWlsYWJsZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFTX0dUSFJFQURTIDEKKworLyogRGVmaW5lIHRvIDEgaWYgYSBmdWxsIGhvc3RlZCBsaWJyYXJ5IGlzIGJ1aWx0LCBvciAwIGlmIGZyZWVzdGFuZGluZy4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSE9TVEVEIDEKKworLyogRGVmaW5lIGlmIGNvbXBhdGliaWxpdHkgc2hvdWxkIGJlIHByb3ZpZGVkIGZvciAtbWxvbmctZG91YmxlLTY0LiAqLworCisvKiBEZWZpbmUgaWYgcHRyZGlmZl90IGlzIGludC4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfUFRSRElGRl9UX0lTX0lOVCAxCisKKy8qIERlZmluZSBpZiB1c2luZyBzZXRybGltaXQgdG8gc2V0IHJlc291cmNlIGxpbWl0cyBkdXJpbmcgIm1ha2UgY2hlY2siICovCisvKiAjdW5kZWYgX0dMSUJDWFhfUkVTX0xJTUlUUyAqLworCisvKiBEZWZpbmUgaWYgc2l6ZV90IGlzIHVuc2lnbmVkIGludC4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfU0laRV9UX0lTX1VJTlQgMQorCisvKiBEZWZpbmUgaWYgdGhlIGNvbXBpbGVyIGlzIGNvbmZpZ3VyZWQgZm9yIHNldGptcC9sb25nam1wIGV4Y2VwdGlvbnMuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfU0pMSl9FWENFUFRJT05TICovCisKKy8qIERlZmluZSBpZiBFT0YgPT0gLTEsIFNFRUtfQ1VSID09IDEsIFNFRUtfRU5EID09IDIuICovCisjZGVmaW5lIF9HTElCQ1hYX1NURElPX01BQ1JPUyAxCisKKy8qIERlZmluZSB0byB1c2Ugc3ltYm9sIHZlcnNpb25pbmcgaW4gdGhlIHNoYXJlZCBsaWJyYXJ5LiAqLworI2RlZmluZSBfR0xJQkNYWF9TWU1WRVIgMQorCisvKiBEZWZpbmUgdG8gdXNlIGRhcndpbiB2ZXJzaW9uaW5nIGluIHRoZSBzaGFyZWQgbGlicmFyeS4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9TWU1WRVJfREFSV0lOICovCisKKy8qIERlZmluZSB0byB1c2UgR05VIHZlcnNpb25pbmcgaW4gdGhlIHNoYXJlZCBsaWJyYXJ5LiAqLworI2RlZmluZSBfR0xJQkNYWF9TWU1WRVJfR05VIDEKKworLyogRGVmaW5lIHRvIHVzZSBHTlUgbmFtZXNwYWNlIHZlcnNpb25pbmcgaW4gdGhlIHNoYXJlZCBsaWJyYXJ5LiAqLworLyogI3VuZGVmIF9HTElCQ1hYX1NZTVZFUl9HTlVfTkFNRVNQQUNFICovCisKKy8qIERlZmluZSBpZiBDOTkgZnVuY3Rpb25zIG9yIG1hY3JvcyBmcm9tIDx3Y2hhci5oPiwgPG1hdGguaD4sIDxjb21wbGV4Lmg+LAorICAgPHN0ZGlvLmg+LCBhbmQgPHN0ZGxpYi5oPiBjYW4gYmUgdXNlZCBvciBleHBvc2VkLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX1VTRV9DOTkgKi8KKworLyogRGVmaW5lIGlmIEM5OSBmdW5jdGlvbnMgaW4gPGNvbXBsZXguaD4gc2hvdWxkIGJlIHVzZWQgaW4gPGNvbXBsZXg+LiBVc2luZworICAgY29tcGlsZXIgYnVpbHRpbnMgZm9yIHRoZXNlIGZ1bmN0aW9ucyByZXF1aXJlcyBjb3JyZXNwb25kaW5nIEM5OSBsaWJyYXJ5CisgICBmdW5jdGlvbnMgdG8gYmUgcHJlc2VudC4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9VU0VfQzk5X0NPTVBMRVggKi8KKworLyogRGVmaW5lIGlmIEM5OSBmdW5jdGlvbnMgaW4gPGNvbXBsZXguaD4gc2hvdWxkIGJlIHVzZWQgaW4gPHRyMS9jb21wbGV4Pi4KKyAgIFVzaW5nIGNvbXBpbGVyIGJ1aWx0aW5zIGZvciB0aGVzZSBmdW5jdGlvbnMgcmVxdWlyZXMgY29ycmVzcG9uZGluZyBDOTkKKyAgIGxpYnJhcnkgZnVuY3Rpb25zIHRvIGJlIHByZXNlbnQuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfVVNFX0M5OV9DT01QTEVYX1RSMSAqLworCisvKiBEZWZpbmUgaWYgQzk5IGZ1bmN0aW9ucyBpbiA8Y3R5cGUuaD4gc2hvdWxkIGJlIGltcG9ydGVkIGluIDx0cjEvY2N0eXBlPiBpbgorICAgbmFtZXNwYWNlIHN0ZDo6dHIxLiAqLworI2RlZmluZSBfR0xJQkNYWF9VU0VfQzk5X0NUWVBFX1RSMSAxCisKKy8qIERlZmluZSBpZiBDOTkgZnVuY3Rpb25zIGluIDxmZW52Lmg+IHNob3VsZCBiZSBpbXBvcnRlZCBpbiA8dHIxL2NmZW52PiBpbgorICAgbmFtZXNwYWNlIHN0ZDo6dHIxLiAqLworI2RlZmluZSBfR0xJQkNYWF9VU0VfQzk5X0ZFTlZfVFIxIDEKKworLyogRGVmaW5lIGlmIEM5OSBmdW5jdGlvbnMgaW4gPGludHR5cGVzLmg+IHNob3VsZCBiZSBpbXBvcnRlZCBpbgorICAgPHRyMS9jaW50dHlwZXM+IGluIG5hbWVzcGFjZSBzdGQ6OnRyMS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfVVNFX0M5OV9JTlRUWVBFU19UUjEgMQorCisvKiBEZWZpbmUgaWYgd2NoYXJfdCBDOTkgZnVuY3Rpb25zIGluIDxpbnR0eXBlcy5oPiBzaG91bGQgYmUgaW1wb3J0ZWQgaW4KKyAgIDx0cjEvY2ludHR5cGVzPiBpbiBuYW1lc3BhY2Ugc3RkOjp0cjEuICovCisjZGVmaW5lIF9HTElCQ1hYX1VTRV9DOTlfSU5UVFlQRVNfV0NIQVJfVF9UUjEgMQorCisvKiBEZWZpbmUgaWYgQzk5IGZ1bmN0aW9ucyBvciBtYWNyb3MgaW4gPG1hdGguaD4gc2hvdWxkIGJlIGltcG9ydGVkIGluIDxjbWF0aD4KKyAgIGluIG5hbWVzcGFjZSBzdGQuICovCisjZGVmaW5lIF9HTElCQ1hYX1VTRV9DOTlfTUFUSCAxCisKKy8qIERlZmluZSBpZiBDOTkgZnVuY3Rpb25zIG9yIG1hY3JvcyBpbiA8bWF0aC5oPiBzaG91bGQgYmUgaW1wb3J0ZWQgaW4KKyAgIDx0cjEvY21hdGg+IGluIG5hbWVzcGFjZSBzdGQ6OnRyMS4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxICovCisKKy8qIERlZmluZSBpZiBDOTkgdHlwZXMgaW4gPHN0ZGludC5oPiBzaG91bGQgYmUgaW1wb3J0ZWQgaW4gPHRyMS9jc3RkaW50PiBpbgorICAgbmFtZXNwYWNlIHN0ZDo6dHIxLiAqLworI2RlZmluZSBfR0xJQkNYWF9VU0VfQzk5X1NURElOVF9UUjEgMQorCisvKiBEZWZpbmVkIGlmIGNsb2NrX2dldHRpbWUgaGFzIG1vbm90b25pYyBjbG9jayBzdXBwb3J0LiAqLworLyogI3VuZGVmIF9HTElCQ1hYX1VTRV9DTE9DS19NT05PVE9OSUMgKi8KKworLyogRGVmaW5lZCBpZiBjbG9ja19nZXR0aW1lIGhhcyByZWFsdGltZSBjbG9jayBzdXBwb3J0LiAqLworLyogI3VuZGVmIF9HTElCQ1hYX1VTRV9DTE9DS19SRUFMVElNRSAqLworCisvKiBEZWZpbmUgaWYgSVNPL0lFQyBUUiAyNDczMyBkZWNpbWFsIGZsb2F0aW5nIHBvaW50IHR5cGVzIGFyZSBzdXBwb3J0ZWQgb24KKyAgIHRoaXMgaG9zdC4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9VU0VfREVDSU1BTF9GTE9BVCAqLworCisvKiBEZWZpbmVkIGlmIGdldHRpbWVvZmRheSBpcyBhdmFpbGFibGUuICovCisjZGVmaW5lIF9HTElCQ1hYX1VTRV9HRVRUSU1FT0ZEQVkgMQorCisvKiBEZWZpbmUgaWYgTEZTIHN1cHBvcnQgaXMgYXZhaWxhYmxlLiAqLworI2RlZmluZSBfR0xJQkNYWF9VU0VfTEZTIDEKKworLyogRGVmaW5lIGlmIGNvZGUgc3BlY2lhbGl6ZWQgZm9yIGxvbmcgbG9uZyBzaG91bGQgYmUgdXNlZC4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfVVNFX0xPTkdfTE9ORyAxCisKKy8qIERlZmluZWQgaWYgbmFub3NsZWVwIGlzIGF2YWlsYWJsZS4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9VU0VfTkFOT1NMRUVQICovCisKKy8qIERlZmluZSBpZiBOTFMgdHJhbnNsYXRpb25zIGFyZSB0byBiZSB1c2VkLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX1VTRV9OTFMgKi8KKworLyogRGVmaW5lIGlmIC9kZXYvcmFuZG9tIGFuZCAvZGV2L3VyYW5kb20gYXJlIGF2YWlsYWJsZSBmb3IgdGhlIHJhbmRvbV9kZXZpY2UKKyAgIG9mIFRSMSAoQ2hhcHRlciA1LjEpLiAqLworI2RlZmluZSBfR0xJQkNYWF9VU0VfUkFORE9NX1RSMSAxCisKKy8qIERlZmluZWQgaWYgc2NoZWRfeWllbGQgaXMgYXZhaWxhYmxlLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX1VTRV9TQ0hFRF9ZSUVMRCAqLworCisvKiBEZWZpbmUgaWYgY29kZSBzcGVjaWFsaXplZCBmb3Igd2NoYXJfdCBzaG91bGQgYmUgdXNlZC4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfVVNFX1dDSEFSX1QgMQorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fQUNPU0YpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9BQ09TRikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfQUNPU0YgMQorIyBkZWZpbmUgYWNvc2YgX2Fjb3NmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0FDT1NMKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfQUNPU0wpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX0FDT1NMIDEKKyMgZGVmaW5lIGFjb3NsIF9hY29zbAorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19BU0lORikgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0FTSU5GKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9BU0lORiAxCisjIGRlZmluZSBhc2luZiBfYXNpbmYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fQVNJTkwpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9BU0lOTCkKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfQVNJTkwgMQorIyBkZWZpbmUgYXNpbmwgX2FzaW5sCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0FUQU4yRikgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0FUQU4yRikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfQVRBTjJGIDEKKyMgZGVmaW5lIGF0YW4yZiBfYXRhbjJmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0FUQU4yTCkgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0FUQU4yTCkKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfQVRBTjJMIDEKKyMgZGVmaW5lIGF0YW4ybCBfYXRhbjJsCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0FUQU5GKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfQVRBTkYpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX0FUQU5GIDEKKyMgZGVmaW5lIGF0YW5mIF9hdGFuZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19BVEFOTCkgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0FUQU5MKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9BVEFOTCAxCisjIGRlZmluZSBhdGFubCBfYXRhbmwKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fQ0VJTEYpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9DRUlMRikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfQ0VJTEYgMQorIyBkZWZpbmUgY2VpbGYgX2NlaWxmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0NFSUxMKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfQ0VJTEwpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX0NFSUxMIDEKKyMgZGVmaW5lIGNlaWxsIF9jZWlsbAorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19DT1NGKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfQ09TRikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfQ09TRiAxCisjIGRlZmluZSBjb3NmIF9jb3NmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0NPU0hGKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfQ09TSEYpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX0NPU0hGIDEKKyMgZGVmaW5lIGNvc2hmIF9jb3NoZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19DT1NITCkgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0NPU0hMKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9DT1NITCAxCisjIGRlZmluZSBjb3NobCBfY29zaGwKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fQ09TTCkgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0NPU0wpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX0NPU0wgMQorIyBkZWZpbmUgY29zbCBfY29zbAorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19FWFBGKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfRVhQRikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfRVhQRiAxCisjIGRlZmluZSBleHBmIF9leHBmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0VYUEwpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9FWFBMKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9FWFBMIDEKKyMgZGVmaW5lIGV4cGwgX2V4cGwKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fRkFCU0YpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9GQUJTRikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfRkFCU0YgMQorIyBkZWZpbmUgZmFic2YgX2ZhYnNmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0ZBQlNMKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfRkFCU0wpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX0ZBQlNMIDEKKyMgZGVmaW5lIGZhYnNsIF9mYWJzbAorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19GSU5JVEUpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9GSU5JVEUpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX0ZJTklURSAxCisjIGRlZmluZSBmaW5pdGUgX2Zpbml0ZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19GSU5JVEVGKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfRklOSVRFRikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfRklOSVRFRiAxCisjIGRlZmluZSBmaW5pdGVmIF9maW5pdGVmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0ZJTklURUwpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9GSU5JVEVMKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9GSU5JVEVMIDEKKyMgZGVmaW5lIGZpbml0ZWwgX2Zpbml0ZWwKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fRkxPT1JGKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfRkxPT1JGKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9GTE9PUkYgMQorIyBkZWZpbmUgZmxvb3JmIF9mbG9vcmYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fRkxPT1JMKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfRkxPT1JMKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9GTE9PUkwgMQorIyBkZWZpbmUgZmxvb3JsIF9mbG9vcmwKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fRk1PREYpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9GTU9ERikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfRk1PREYgMQorIyBkZWZpbmUgZm1vZGYgX2Ztb2RmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0ZNT0RMKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfRk1PREwpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX0ZNT0RMIDEKKyMgZGVmaW5lIGZtb2RsIF9mbW9kbAorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19GUENMQVNTKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfRlBDTEFTUykKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfRlBDTEFTUyAxCisjIGRlZmluZSBmcGNsYXNzIF9mcGNsYXNzCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0ZSRVhQRikgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0ZSRVhQRikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfRlJFWFBGIDEKKyMgZGVmaW5lIGZyZXhwZiBfZnJleHBmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0ZSRVhQTCkgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0ZSRVhQTCkKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfRlJFWFBMIDEKKyMgZGVmaW5lIGZyZXhwbCBfZnJleHBsCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0hZUE9UKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfSFlQT1QpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX0hZUE9UIDEKKyMgZGVmaW5lIGh5cG90IF9oeXBvdAorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19IWVBPVEYpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9IWVBPVEYpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX0hZUE9URiAxCisjIGRlZmluZSBoeXBvdGYgX2h5cG90ZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19IWVBPVEwpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9IWVBPVEwpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX0hZUE9UTCAxCisjIGRlZmluZSBoeXBvdGwgX2h5cG90bAorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19JU0lORikgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0lTSU5GKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9JU0lORiAxCisjIGRlZmluZSBpc2luZiBfaXNpbmYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fSVNJTkZGKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfSVNJTkZGKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9JU0lORkYgMQorIyBkZWZpbmUgaXNpbmZmIF9pc2luZmYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fSVNJTkZMKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfSVNJTkZMKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9JU0lORkwgMQorIyBkZWZpbmUgaXNpbmZsIF9pc2luZmwKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fSVNOQU4pICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9JU05BTikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfSVNOQU4gMQorIyBkZWZpbmUgaXNuYW4gX2lzbmFuCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0lTTkFORikgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0lTTkFORikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfSVNOQU5GIDEKKyMgZGVmaW5lIGlzbmFuZiBfaXNuYW5mCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0lTTkFOTCkgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0lTTkFOTCkKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfSVNOQU5MIDEKKyMgZGVmaW5lIGlzbmFubCBfaXNuYW5sCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0xERVhQRikgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0xERVhQRikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfTERFWFBGIDEKKyMgZGVmaW5lIGxkZXhwZiBfbGRleHBmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0xERVhQTCkgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0xERVhQTCkKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfTERFWFBMIDEKKyMgZGVmaW5lIGxkZXhwbCBfbGRleHBsCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0xPRzEwRikgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0xPRzEwRikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfTE9HMTBGIDEKKyMgZGVmaW5lIGxvZzEwZiBfbG9nMTBmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0xPRzEwTCkgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0xPRzEwTCkKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfTE9HMTBMIDEKKyMgZGVmaW5lIGxvZzEwbCBfbG9nMTBsCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0xPR0YpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9MT0dGKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9MT0dGIDEKKyMgZGVmaW5lIGxvZ2YgX2xvZ2YKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fTE9HTCkgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0xPR0wpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX0xPR0wgMQorIyBkZWZpbmUgbG9nbCBfbG9nbAorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19NT0RGKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfTU9ERikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfTU9ERiAxCisjIGRlZmluZSBtb2RmIF9tb2RmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX01PREZGKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfTU9ERkYpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX01PREZGIDEKKyMgZGVmaW5lIG1vZGZmIF9tb2RmZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19NT0RGTCkgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX01PREZMKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9NT0RGTCAxCisjIGRlZmluZSBtb2RmbCBfbW9kZmwKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fUE9XRikgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX1BPV0YpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX1BPV0YgMQorIyBkZWZpbmUgcG93ZiBfcG93ZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19QT1dMKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfUE9XTCkKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfUE9XTCAxCisjIGRlZmluZSBwb3dsIF9wb3dsCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX1FGUENMQVNTKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfUUZQQ0xBU1MpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX1FGUENMQVNTIDEKKyMgZGVmaW5lIHFmcGNsYXNzIF9xZnBjbGFzcworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19TSU5DT1MpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9TSU5DT1MpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX1NJTkNPUyAxCisjIGRlZmluZSBzaW5jb3MgX3NpbmNvcworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19TSU5DT1NGKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfU0lOQ09TRikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfU0lOQ09TRiAxCisjIGRlZmluZSBzaW5jb3NmIF9zaW5jb3NmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX1NJTkNPU0wpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9TSU5DT1NMKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9TSU5DT1NMIDEKKyMgZGVmaW5lIHNpbmNvc2wgX3NpbmNvc2wKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fU0lORikgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX1NJTkYpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX1NJTkYgMQorIyBkZWZpbmUgc2luZiBfc2luZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19TSU5IRikgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX1NJTkhGKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9TSU5IRiAxCisjIGRlZmluZSBzaW5oZiBfc2luaGYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fU0lOSEwpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9TSU5ITCkKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfU0lOSEwgMQorIyBkZWZpbmUgc2luaGwgX3NpbmhsCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX1NJTkwpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9TSU5MKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9TSU5MIDEKKyMgZGVmaW5lIHNpbmwgX3NpbmwKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fU1FSVEYpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9TUVJURikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfU1FSVEYgMQorIyBkZWZpbmUgc3FydGYgX3NxcnRmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX1NRUlRMKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfU1FSVEwpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX1NRUlRMIDEKKyMgZGVmaW5lIHNxcnRsIF9zcXJ0bAorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19TVFJUT0YpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9TVFJUT0YpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX1NUUlRPRiAxCisjIGRlZmluZSBzdHJ0b2YgX3N0cnRvZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19TVFJUT0xEKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfU1RSVE9MRCkKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfU1RSVE9MRCAxCisjIGRlZmluZSBzdHJ0b2xkIF9zdHJ0b2xkCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX1RBTkYpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9UQU5GKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9UQU5GIDEKKyMgZGVmaW5lIHRhbmYgX3RhbmYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fVEFOSEYpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9UQU5IRikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfVEFOSEYgMQorIyBkZWZpbmUgdGFuaGYgX3RhbmhmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX1RBTkhMKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfVEFOSEwpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX1RBTkhMIDEKKyMgZGVmaW5lIHRhbmhsIF90YW5obAorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19UQU5MKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfVEFOTCkKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfVEFOTCAxCisjIGRlZmluZSB0YW5sIF90YW5sCisjZW5kaWYKKworI2VuZGlmIC8vIF9HTElCQ1hYX0NYWF9DT05GSUdfSApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2JpdHMvYysraW8uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaXRzL2MrK2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZjYTUzYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaXRzL2MrK2lvLmgKQEAgLTAsMCArMSw0OSBAQAorLy8gVW5kZXJseWluZyBpbyBsaWJyYXJ5IGRldGFpbHMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYysraW8uaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisvLyBjX2lvX3N0ZGlvLmggLSBEZWZpbmVzIGZvciB1c2luZyAiQyIgc3RkaW8uaAorCisjaWZuZGVmIF9HTElCQ1hYX0NYWF9JT19ICisjZGVmaW5lIF9HTElCQ1hYX0NYWF9JT19IIDEKKworI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGJpdHMvZ3Roci5oPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIHR5cGVkZWYgX19ndGhyZWFkX211dGV4X3QgX19jX2xvY2s7CisKKyAgLy8gZm9yIGJhc2ljX2ZpbGUuaAorICB0eXBlZGVmIEZJTEUgX19jX2ZpbGU7CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYml0cy9jKytsb2NhbGUuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaXRzL2MrK2xvY2FsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MmVmNTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYml0cy9jKytsb2NhbGUuaApAQCAtMCwwICsxLDkxIEBACisvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGMrK2xvY2FsZS5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyMi44ICBTdGFuZGFyZCBsb2NhbGUgY2F0ZWdvcmllcy4KKy8vCisKKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisKKyNpZm5kZWYgX0dMSUJDWFhfQ1hYX0xPQ0FMRV9ICisjZGVmaW5lIF9HTElCQ1hYX0NYWF9MT0NBTEVfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGNsb2NhbGU+CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKworI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKworICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBkb3VibGUgYW5kIGxvbmcgZG91YmxlIHRvIHN0cmluZyBhbmQKKyAgLy8gcmV0dXJuIGxlbmd0aCBvZiBzdHJpbmcuICBJZiB2c25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlCisgIC8vIGZhbGwgYmFjayB0byB0aGUgdW5zYWZlIHZzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzCisgIC8vIGFuZCBzaG91bGQgYmUgYXZvaWRlZC4KKyAgaW5saW5lIGludAorICBfX2NvbnZlcnRfZnJvbV92KGNvbnN0IF9fY19sb2NhbGUmLCBjaGFyKiBfX291dCwgCisJCSAgIGNvbnN0IGludCBfX3NpemUgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpLAorCQkgICBjb25zdCBjaGFyKiBfX2ZtdCwgLi4uKQorICB7CisgICAgY2hhciogX19vbGQgPSBzdGQ6OnNldGxvY2FsZShMQ19OVU1FUklDLCBOVUxMKTsKKyAgICBjaGFyKiBfX3NhdiA9IE5VTEw7CisgICAgaWYgKF9fYnVpbHRpbl9zdHJjbXAoX19vbGQsICJDIikpCisgICAgICB7CisJY29uc3Qgc2l6ZV90IF9fbGVuID0gX19idWlsdGluX3N0cmxlbihfX29sZCkgKyAxOworCV9fc2F2ID0gbmV3IGNoYXJbX19sZW5dOworCV9fYnVpbHRpbl9tZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xlbik7CisJc3RkOjpzZXRsb2NhbGUoTENfTlVNRVJJQywgIkMiKTsKKyAgICAgIH0KKworICAgIF9fYnVpbHRpbl92YV9saXN0IF9fYXJnczsKKyAgICBfX2J1aWx0aW5fdmFfc3RhcnQoX19hcmdzLCBfX2ZtdCk7CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfQzk5CisgICAgY29uc3QgaW50IF9fcmV0ID0gX19idWlsdGluX3ZzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19hcmdzKTsKKyNlbHNlCisgICAgY29uc3QgaW50IF9fcmV0ID0gX19idWlsdGluX3ZzcHJpbnRmKF9fb3V0LCBfX2ZtdCwgX19hcmdzKTsKKyNlbmRpZgorCisgICAgX19idWlsdGluX3ZhX2VuZChfX2FyZ3MpOworCisgICAgaWYgKF9fc2F2KQorICAgICAgeworCXN0ZDo6c2V0bG9jYWxlKExDX05VTUVSSUMsIF9fc2F2KTsKKwlkZWxldGUgW10gX19zYXY7CisgICAgICB9CisgICAgcmV0dXJuIF9fcmV0OworICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYml0cy9jcHVfZGVmaW5lcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2JpdHMvY3B1X2RlZmluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWY5N2UxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2JpdHMvY3B1X2RlZmluZXMuaApAQCAtMCwwICsxLDMzIEBACisvLyBTcGVjaWZpYyBkZWZpbml0aW9ucyBmb3IgZ2VuZXJpYyBwbGF0Zm9ybXMgIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgY3B1X2RlZmluZXMuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0NQVV9ERUZJTkVTCisjZGVmaW5lIF9HTElCQ1hYX0NQVV9ERUZJTkVTIDEKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYml0cy9jdHlwZV9iYXNlLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYml0cy9jdHlwZV9iYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYxZjE1NwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaXRzL2N0eXBlX2Jhc2UuaApAQCAtMCwwICsxLDYxIEBACisvLyBMb2NhbGUgc3VwcG9ydCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyMi4xICBMb2NhbGVzCisvLworICAKKy8qKiBAZmlsZSBjdHlwZV9iYXNlLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworLy8gSW5mb3JtYXRpb24gYXMgZ2xlYW5lZCBmcm9tIC91c3IvaW5jbHVkZS9jdHlwZS5oCisgIAorX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvLy8gQGJyaWVmICBCYXNlIGNsYXNzIGZvciBjdHlwZS4KKyAgc3RydWN0IGN0eXBlX2Jhc2UKKyAgeworICAgIC8vIE5vbi1zdGFuZGFyZCB0eXBlZGVmcy4KKyAgICB0eXBlZGVmIGNvbnN0IGludCogCQlfX3RvX3R5cGU7CisKKyAgICAvLyBOQjogT2Zmc2V0cyBpbnRvIGN0eXBlPGNoYXI+OjpfTV90YWJsZSBmb3JjZSBhIHBhcnRpY3VsYXIgc2l6ZQorICAgIC8vIG9uIHRoZSBtYXNrIHR5cGUuIEJlY2F1c2Ugb2YgdGhpcywgd2UgZG9uJ3QgdXNlIGFuIGVudW0uCisgICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAJbWFzazsgICAKKyAgICBzdGF0aWMgY29uc3QgbWFzayB1cHBlciAgICAJPSBfSVN1cHBlcjsKKyAgICBzdGF0aWMgY29uc3QgbWFzayBsb3dlciAJPSBfSVNsb3dlcjsKKyAgICBzdGF0aWMgY29uc3QgbWFzayBhbHBoYSAJPSBfSVNhbHBoYTsKKyAgICBzdGF0aWMgY29uc3QgbWFzayBkaWdpdCAJPSBfSVNkaWdpdDsKKyAgICBzdGF0aWMgY29uc3QgbWFzayB4ZGlnaXQgCT0gX0lTeGRpZ2l0OworICAgIHN0YXRpYyBjb25zdCBtYXNrIHNwYWNlIAk9IF9JU3NwYWNlOworICAgIHN0YXRpYyBjb25zdCBtYXNrIHByaW50IAk9IF9JU3ByaW50OworICAgIHN0YXRpYyBjb25zdCBtYXNrIGdyYXBoIAk9IF9JU2FscGhhIHwgX0lTZGlnaXQgfCBfSVNwdW5jdDsKKyAgICBzdGF0aWMgY29uc3QgbWFzayBjbnRybCAJPSBfSVNjbnRybDsKKyAgICBzdGF0aWMgY29uc3QgbWFzayBwdW5jdCAJPSBfSVNwdW5jdDsKKyAgICBzdGF0aWMgY29uc3QgbWFzayBhbG51bSAJPSBfSVNhbHBoYSB8IF9JU2RpZ2l0OworICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYml0cy9jdHlwZV9pbmxpbmUuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaXRzL2N0eXBlX2lubGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZTgyMjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYml0cy9jdHlwZV9pbmxpbmUuaApAQCAtMCwwICsxLDczIEBACisvLyBMb2NhbGUgc3VwcG9ydCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDIsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGN0eXBlX2lubGluZS5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyMi4xICBMb2NhbGVzCisvLworICAKKy8vIGN0eXBlIGJpdHMgdG8gYmUgaW5saW5lZCBnbyBoZXJlLiBOb24taW5saW5hYmxlIChpZSB2aXJ0dWFsIGRvXyopCisvLyBmdW5jdGlvbnMgZ28gaW4gY3R5cGUuY2MKKyAgCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIGJvb2wKKyAgY3R5cGU8Y2hhcj46OgorICBpcyhtYXNrIF9fbSwgY2hhciBfX2MpIGNvbnN0CisgIHsgcmV0dXJuIF9NX3RhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldICYgX19tOyB9CisKKyAgY29uc3QgY2hhcioKKyAgY3R5cGU8Y2hhcj46OgorICBpcyhjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoLCBtYXNrKiBfX3ZlYykgY29uc3QKKyAgeworICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCkKKyAgICAgICpfX3ZlYysrID0gX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KyspXTsKKyAgICByZXR1cm4gX19oaWdoOworICB9CisKKyAgY29uc3QgY2hhcioKKyAgY3R5cGU8Y2hhcj46OgorICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdAorICB7CisgICAgd2hpbGUgKF9fbG93IDwgX19oaWdoIAorCSAgICYmICEoX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KV0gJiBfX20pKQorICAgICAgKytfX2xvdzsKKyAgICByZXR1cm4gX19sb3c7CisgIH0KKworICBjb25zdCBjaGFyKgorICBjdHlwZTxjaGFyPjo6CisgIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdAorICB7CisgICAgd2hpbGUgKF9fbG93IDwgX19oaWdoIAorCSAgICYmIChfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3cpXSAmIF9fbSkgIT0gMCkKKyAgICAgICsrX19sb3c7CisgICAgcmV0dXJuIF9fbG93OworICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaXRzL2N0eXBlX25vbmlubGluZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2JpdHMvY3R5cGVfbm9uaW5saW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZjNDdhOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaXRzL2N0eXBlX25vbmlubGluZS5oCkBAIC0wLDAgKzEsMTkwIEBACisvLyBMb2NhbGUgc3VwcG9ydCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsCisvLyAyMDA2LCAyMDA3LCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgY3R5cGVfbm9uaW5saW5lLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDIyLjEgIExvY2FsZXMKKy8vCisgIAorLy8gSW5mb3JtYXRpb24gYXMgZ2xlYW5lZCBmcm9tIC91c3IvaW5jbHVkZS9jdHlwZS5oCisKKyNpZiBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUKKyAgY29uc3QgY3R5cGVfYmFzZTo6bWFzayoKKyAgY3R5cGU8Y2hhcj46OmNsYXNzaWNfdGFibGUoKSB0aHJvdygpCisgIHsgcmV0dXJuIF9TX2dldF9jX2xvY2FsZSgpLT5fX2N0eXBlX2I7IH0KKyNlbHNlCisgIGNvbnN0IGN0eXBlX2Jhc2U6Om1hc2sqCisgIGN0eXBlPGNoYXI+OjpjbGFzc2ljX3RhYmxlKCkgdGhyb3coKQorICB7CisgICAgY29uc3QgY3R5cGVfYmFzZTo6bWFzayogX19yZXQ7CisgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQ1RZUEUsIE5VTEwpOworICAgIGNoYXIqIF9fc2F2ID0gTlVMTDsKKyAgICBpZiAoX19idWlsdGluX3N0cmNtcChfX29sZCwgIkMiKSkKKyAgICAgIHsKKwljb25zdCBzaXplX3QgX19sZW4gPSBfX2J1aWx0aW5fc3RybGVuKF9fb2xkKSArIDE7CisJX19zYXYgPSBuZXcgY2hhcltfX2xlbl07CisJX19idWlsdGluX21lbWNweShfX3NhdiwgX19vbGQsIF9fbGVuKTsKKwlzZXRsb2NhbGUoTENfQ1RZUEUsICJDIik7CisgICAgICB9CisjaWYgX19HTElCQ19fID4gMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID4gMikKKyAgICBfX3JldCA9ICpfX2N0eXBlX2JfbG9jKCk7CisjZWxzZQorICAgIF9fcmV0ID0gX19jdHlwZV9iOworI2VuZGlmCisgICAgaWYgKF9fc2F2KQorICAgICAgeworCXNldGxvY2FsZShMQ19DVFlQRSwgX19zYXYpOworCWRlbGV0ZSBbXSBfX3NhdjsKKyAgICAgIH0KKyAgICByZXR1cm4gX19yZXQ7CisgIH0KKyNlbmRpZgorCisjaWYgX0dMSUJDWFhfQ19MT0NBTEVfR05VCisgIGN0eXBlPGNoYXI+OjpjdHlwZShfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgbWFzayogX190YWJsZSwgYm9vbCBfX2RlbCwgCisJCSAgICAgc2l6ZV90IF9fcmVmcykgCisgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfY3R5cGUoX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKSksIAorICBfTV9kZWwoX190YWJsZSAhPSAwICYmIF9fZGVsKSwgCisgIF9NX3RvdXBwZXIoX01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfdG91cHBlciksICAKKyAgX01fdG9sb3dlcihfTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b2xvd2VyKSwgCisgIF9NX3RhYmxlKF9fdGFibGUgPyBfX3RhYmxlIDogX01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfYiksIAorICBfTV93aWRlbl9vaygwKSwgX01fbmFycm93X29rKDApIAorICB7CisgICAgX19idWlsdGluX21lbXNldChfTV93aWRlbiwgMCwgc2l6ZW9mKF9NX3dpZGVuKSk7CisgICAgX19idWlsdGluX21lbXNldChfTV9uYXJyb3csIDAsIHNpemVvZihfTV9uYXJyb3cpKTsKKyAgfQorI2Vsc2UKKyAgY3R5cGU8Y2hhcj46OmN0eXBlKF9fY19sb2NhbGUsIGNvbnN0IG1hc2sqIF9fdGFibGUsIGJvb2wgX19kZWwsIAorCQkgICAgIHNpemVfdCBfX3JlZnMpIAorICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX2N0eXBlKF9TX2dldF9jX2xvY2FsZSgpKSwgCisgIF9NX2RlbChfX3RhYmxlICE9IDAgJiYgX19kZWwpLCBfTV93aWRlbl9vaygwKSwgX01fbmFycm93X29rKDApCisgIHsKKyAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19DVFlQRSwgTlVMTCk7CisgICAgY2hhciogX19zYXYgPSBOVUxMOworICAgIGlmIChfX2J1aWx0aW5fc3RyY21wKF9fb2xkLCAiQyIpKQorICAgICAgeyAgICAKKwljb25zdCBzaXplX3QgX19sZW4gPSBfX2J1aWx0aW5fc3RybGVuKF9fb2xkKSArIDE7CisJX19zYXYgPSBuZXcgY2hhcltfX2xlbl07CisJX19idWlsdGluX21lbWNweShfX3NhdiwgX19vbGQsIF9fbGVuKTsgICAgCisJc2V0bG9jYWxlKExDX0NUWVBFLCAiQyIpOworICAgICAgfQorI2lmIF9fR0xJQkNfXyA+IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+IDIpCisgICAgX01fdG91cHBlciA9ICpfX2N0eXBlX3RvdXBwZXJfbG9jKCk7CisgICAgX01fdG9sb3dlciA9ICpfX2N0eXBlX3RvbG93ZXJfbG9jKCk7CisgICAgX01fdGFibGUgPSBfX3RhYmxlID8gX190YWJsZSA6ICpfX2N0eXBlX2JfbG9jKCk7CisjZWxzZQorICAgIF9NX3RvdXBwZXIgPSBfX2N0eXBlX3RvdXBwZXI7CisgICAgX01fdG9sb3dlciA9IF9fY3R5cGVfdG9sb3dlcjsKKyAgICBfTV90YWJsZSA9IF9fdGFibGUgPyBfX3RhYmxlIDogX19jdHlwZV9iOworI2VuZGlmCisgICAgaWYgKF9fc2F2KQorICAgICAgeworCXNldGxvY2FsZShMQ19DVFlQRSwgX19zYXYpOworCWRlbGV0ZSBbXSBfX3NhdjsKKyAgICAgIH0KKyAgICBfX2J1aWx0aW5fbWVtc2V0KF9NX3dpZGVuLCAwLCBzaXplb2YoX01fd2lkZW4pKTsKKyAgICBfX2J1aWx0aW5fbWVtc2V0KF9NX25hcnJvdywgMCwgc2l6ZW9mKF9NX25hcnJvdykpOworICB9CisjZW5kaWYKKworI2lmIF9HTElCQ1hYX0NfTE9DQUxFX0dOVQorICBjdHlwZTxjaGFyPjo6Y3R5cGUoY29uc3QgbWFzayogX190YWJsZSwgYm9vbCBfX2RlbCwgc2l6ZV90IF9fcmVmcykgCisgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfY3R5cGUoX1NfZ2V0X2NfbG9jYWxlKCkpLCAKKyAgX01fZGVsKF9fdGFibGUgIT0gMCAmJiBfX2RlbCksCisgIF9NX3RvdXBwZXIoX01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfdG91cHBlciksICAKKyAgX01fdG9sb3dlcihfTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b2xvd2VyKSwgCisgIF9NX3RhYmxlKF9fdGFibGUgPyBfX3RhYmxlIDogX01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfYiksIAorICBfTV93aWRlbl9vaygwKSwgX01fbmFycm93X29rKDApIAorICB7CisgICAgX19idWlsdGluX21lbXNldChfTV93aWRlbiwgMCwgc2l6ZW9mKF9NX3dpZGVuKSk7CisgICAgX19idWlsdGluX21lbXNldChfTV9uYXJyb3csIDAsIHNpemVvZihfTV9uYXJyb3cpKTsKKyAgfQorI2Vsc2UKKyAgY3R5cGU8Y2hhcj46OmN0eXBlKGNvbnN0IG1hc2sqIF9fdGFibGUsIGJvb2wgX19kZWwsIHNpemVfdCBfX3JlZnMpCisgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfY3R5cGUoX1NfZ2V0X2NfbG9jYWxlKCkpLCAKKyAgX01fZGVsKF9fdGFibGUgIT0gMCAmJiBfX2RlbCksIF9NX3dpZGVuX29rKDApLCBfTV9uYXJyb3dfb2soMCkKKyAgeworICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0NUWVBFLCBOVUxMKTsKKyAgICBjaGFyKiBfX3NhdiA9IE5VTEw7CisgICAgaWYgKF9fYnVpbHRpbl9zdHJjbXAoX19vbGQsICJDIikpCisgICAgICB7CisJY29uc3Qgc2l6ZV90IF9fbGVuID0gX19idWlsdGluX3N0cmxlbihfX29sZCkgKyAxOworCV9fc2F2ID0gbmV3IGNoYXJbX19sZW5dOworCV9fYnVpbHRpbl9tZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xlbik7CisJc2V0bG9jYWxlKExDX0NUWVBFLCAiQyIpOworICAgICAgfQorI2lmIF9fR0xJQkNfXyA+IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+IDIpCisgICAgX01fdG91cHBlciA9ICpfX2N0eXBlX3RvdXBwZXJfbG9jKCk7CisgICAgX01fdG9sb3dlciA9ICpfX2N0eXBlX3RvbG93ZXJfbG9jKCk7CisgICAgX01fdGFibGUgPSBfX3RhYmxlID8gX190YWJsZSA6ICpfX2N0eXBlX2JfbG9jKCk7CisjZWxzZQorICAgIF9NX3RvdXBwZXIgPSBfX2N0eXBlX3RvdXBwZXI7CisgICAgX01fdG9sb3dlciA9IF9fY3R5cGVfdG9sb3dlcjsKKyAgICBfTV90YWJsZSA9IF9fdGFibGUgPyBfX3RhYmxlIDogX19jdHlwZV9iOworI2VuZGlmCisgICAgaWYgKF9fc2F2KQorICAgICAgeworCXNldGxvY2FsZShMQ19DVFlQRSwgX19zYXYpOworCWRlbGV0ZSBbXSBfX3NhdjsKKyAgICAgIH0KKyAgICBfX2J1aWx0aW5fbWVtc2V0KF9NX3dpZGVuLCAwLCBzaXplb2YoX01fd2lkZW4pKTsKKyAgICBfX2J1aWx0aW5fbWVtc2V0KF9NX25hcnJvdywgMCwgc2l6ZW9mKF9NX25hcnJvdykpOworICB9CisjZW5kaWYKKworICBjaGFyCisgIGN0eXBlPGNoYXI+Ojpkb190b3VwcGVyKGNoYXIgX19jKSBjb25zdAorICB7IHJldHVybiBfTV90b3VwcGVyW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldOyB9CisKKyAgY29uc3QgY2hhcioKKyAgY3R5cGU8Y2hhcj46OmRvX3RvdXBwZXIoY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QKKyAgeworICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCkKKyAgICAgIHsKKwkqX19sb3cgPSBfTV90b3VwcGVyW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpfX2xvdyldOworCSsrX19sb3c7CisgICAgICB9CisgICAgcmV0dXJuIF9faGlnaDsKKyAgfQorCisgIGNoYXIKKyAgY3R5cGU8Y2hhcj46OmRvX3RvbG93ZXIoY2hhciBfX2MpIGNvbnN0CisgIHsgcmV0dXJuIF9NX3RvbG93ZXJbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKV07IH0KKworICBjb25zdCBjaGFyKiAKKyAgY3R5cGU8Y2hhcj46OmRvX3RvbG93ZXIoY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QKKyAgeworICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCkKKyAgICAgIHsKKwkqX19sb3cgPSBfTV90b2xvd2VyW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpfX2xvdyldOworCSsrX19sb3c7CisgICAgICB9CisgICAgcmV0dXJuIF9faGlnaDsKKyAgfQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2JpdHMvY3h4YWJpX3R3ZWFrcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2JpdHMvY3h4YWJpX3R3ZWFrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZmM1ODgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYml0cy9jeHhhYmlfdHdlYWtzLmgKQEAgLTAsMCArMSw4MSBAQAorLy8gQ29udHJvbCB2YXJpb3VzIHRhcmdldCBzcGVjaWZpYyBBQkkgdHdlYWtzLiAgQVJNIHZlcnNpb24uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgY3h4YWJpX3R3ZWFrcy5oCisgKiAgVGhlIGhlYWRlciBwcm92aWRlcyBhbiBDUFUtdmFyaWFibGUgaW50ZXJmYWNlIHRvIHRoZSBDKysgQUJJLgorICovCisKKyNpZm5kZWYgX0NYWEFCSV9UV0VBS1NfSAorI2RlZmluZSBfQ1hYQUJJX1RXRUFLU19IIDEKKworI2lmZGVmIF9fY3BsdXNwbHVzCituYW1lc3BhY2UgX19jeHhhYml2MQoreworICBleHRlcm4gIkMiIAorICB7CisjZW5kaWYKKworI2lmZGVmIF9fQVJNX0VBQklfXworICAvLyBUaGUgQVJNIEVBQkkgdXNlcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IG9mIGEgMzItYml0CisgIC8vIGd1YXJkIHZhcmlhYmxlLiAgKi8KKyNkZWZpbmUgX0dMSUJDWFhfR1VBUkRfVEVTVCh4KSAoKCooeCkgJiAxKSAhPSAwKQorI2RlZmluZSBfR0xJQkNYWF9HVUFSRF9TRVQoeCkgKih4KSA9IDEKKyNkZWZpbmUgX0dMSUJDWFhfR1VBUkRfQklUIDEKKyNkZWZpbmUgX0dMSUJDWFhfR1VBUkRfUEVORElOR19CSVQgX19ndWFyZF90ZXN0X2JpdCAoMSwgMSkKKyNkZWZpbmUgX0dMSUJDWFhfR1VBUkRfV0FJVElOR19CSVQgX19ndWFyZF90ZXN0X2JpdCAoMiwgMSkKKyAgdHlwZWRlZiBpbnQgX19ndWFyZDsKKworICAvLyBXZSBhbHNvIHdhbnQgdGhlIGVsZW1lbnQgc2l6ZSBpbiBhcnJheSBjb29raWVzLgorI2RlZmluZSBfR0xJQkNYWF9FTFRTSVpFX0lOX0NPT0tJRSAxCisgIAorICAvLyBfX2N4YV92ZWNfY3RvciBzaG91bGQgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgYXJyYXkuCisgIHR5cGVkZWYgdm9pZCAqIF9fY3hhX3ZlY19jdG9yX3JldHVybl90eXBlOworI2RlZmluZSBfR0xJQkNYWF9DWEFfVkVDX0NUT1JfUkVUVVJOKHgpIHJldHVybiB4CisgIC8vIENvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMgcmV0dXJuIHRoZSAidGhpcyIgcG9pbnRlci4KKyAgdHlwZWRlZiB2b2lkICogX19jeGFfY2R0b3JfcmV0dXJuX3R5cGU7CisKKyNlbHNlIC8vIF9fQVJNX0VBQklfXworCisgIC8vIFRoZSBnZW5lcmljIEFCSSB1c2VzIHRoZSBmaXJzdCBieXRlIG9mIGEgNjQtYml0IGd1YXJkIHZhcmlhYmxlLgorI2RlZmluZSBfR0xJQkNYWF9HVUFSRF9URVNUKHgpICgqKGNoYXIgKikgKHgpICE9IDApCisjZGVmaW5lIF9HTElCQ1hYX0dVQVJEX1NFVCh4KSAqKGNoYXIgKikgKHgpID0gMQorI2RlZmluZSBfR0xJQkNYWF9HVUFSRF9CSVQgX19ndWFyZF90ZXN0X2JpdCAoMCwgMSkKKyNkZWZpbmUgX0dMSUJDWFhfR1VBUkRfUEVORElOR19CSVQgX19ndWFyZF90ZXN0X2JpdCAoMSwgMSkKKyNkZWZpbmUgX0dMSUJDWFhfR1VBUkRfV0FJVElOR19CSVQgX19ndWFyZF90ZXN0X2JpdCAoMiwgMSkKKyAgX19leHRlbnNpb25fXyB0eXBlZGVmIGludCBfX2d1YXJkIF9fYXR0cmlidXRlX18oKG1vZGUgKF9fRElfXykpKTsKKworICAvLyBfX2N4YV92ZWNfY3RvciBoYXMgdm9pZCByZXR1cm4gdHlwZS4KKyAgdHlwZWRlZiB2b2lkIF9fY3hhX3ZlY19jdG9yX3JldHVybl90eXBlOworI2RlZmluZSBfR0xJQkNYWF9DWEFfVkVDX0NUT1JfUkVUVVJOKHgpIHJldHVybgorICAvLyBDb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzIGRvIG5vdCByZXR1cm4gYSB2YWx1ZS4KKyAgdHlwZWRlZiB2b2lkIF9fY3hhX2NkdG9yX3JldHVybl90eXBlOworCisjZW5kaWYgLy8hX19BUk1fRUFCSV9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICB9Cit9IC8vIG5hbWVzcGFjZSBfX2N4eGFiaXYxCisjZW5kaWYKKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2JpdHMvZXJyb3JfY29uc3RhbnRzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYml0cy9lcnJvcl9jb25zdGFudHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWMwMzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2JpdHMvZXJyb3JfY29uc3RhbnRzLmgKQEAgLTAsMCArMSwxNzUgQEAKKy8vIFNwZWNpZmljIGRlZmluaXRpb25zIGZvciBnZW5lcmljIHBsYXRmb3JtcyAgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBlcnJvcl9jb25zdGFudHMuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0VSUk9SX0NPTlNUQU5UUworI2RlZmluZSBfR0xJQkNYWF9FUlJPUl9DT05TVEFOVFMgMQorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxjZXJybm8+CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgZW51bSBjbGFzcyBlcnJjCisgICAgeworICAgICAgYWRkcmVzc19mYW1pbHlfbm90X3N1cHBvcnRlZCA9IAkJRUFGTk9TVVBQT1JULAorICAgICAgYWRkcmVzc19pbl91c2UgPSAJCQkJRUFERFJJTlVTRSwKKyAgICAgIGFkZHJlc3Nfbm90X2F2YWlsYWJsZSA9IAkJCUVBRERSTk9UQVZBSUwsCisgICAgICBhbHJlYWR5X2Nvbm5lY3RlZCA9IAkJCUVJU0NPTk4sCisgICAgICBhcmd1bWVudF9saXN0X3Rvb19sb25nID0gCQkJRTJCSUcsCisgICAgICBhcmd1bWVudF9vdXRfb2ZfZG9tYWluID0gCQkJRURPTSwKKyAgICAgIGJhZF9hZGRyZXNzID0gCQkJCUVGQVVMVCwKKyAgICAgIGJhZF9maWxlX2Rlc2NyaXB0b3IgPSAJCQlFQkFERiwKKworI2lmZGVmIF9HTElCQ1hYX0hBVkVfRUJBRE1TRworICAgICAgYmFkX21lc3NhZ2UgPSAJCQkJRUJBRE1TRywKKyNlbmRpZgorCisgICAgICBicm9rZW5fcGlwZSA9IAkJCQlFUElQRSwKKyAgICAgIGNvbm5lY3Rpb25fYWJvcnRlZCA9IAkJCUVDT05OQUJPUlRFRCwKKyAgICAgIGNvbm5lY3Rpb25fYWxyZWFkeV9pbl9wcm9ncmVzcyA9IAkJRUFMUkVBRFksCisgICAgICBjb25uZWN0aW9uX3JlZnVzZWQgPSAJCQlFQ09OTlJFRlVTRUQsCisgICAgICBjb25uZWN0aW9uX3Jlc2V0ID0gCQkJRUNPTk5SRVNFVCwKKyAgICAgIGNyb3NzX2RldmljZV9saW5rID0gCQkJRVhERVYsCisgICAgICBkZXN0aW5hdGlvbl9hZGRyZXNzX3JlcXVpcmVkID0gCQlFREVTVEFERFJSRVEsCisgICAgICBkZXZpY2Vfb3JfcmVzb3VyY2VfYnVzeSA9IAkJRUJVU1ksCisgICAgICBkaXJlY3Rvcnlfbm90X2VtcHR5ID0gCQkJRU5PVEVNUFRZLAorICAgICAgZXhlY3V0YWJsZV9mb3JtYXRfZXJyb3IgPSAJCUVOT0VYRUMsCisgICAgICBmaWxlX2V4aXN0cyA9IAkgICAgICAgCQkJRUVYSVNULAorICAgICAgZmlsZV90b29fbGFyZ2UgPSAJCQkJRUZCSUcsCisgICAgICBmaWxlbmFtZV90b29fbG9uZyA9IAkJCUVOQU1FVE9PTE9ORywKKyAgICAgIGZ1bmN0aW9uX25vdF9zdXBwb3J0ZWQgPSAJCQlFTk9TWVMsCisgICAgICBob3N0X3VucmVhY2hhYmxlID0gCQkJRUhPU1RVTlJFQUNILAorCisjaWZkZWYgX0dMSUJDWFhfSEFWRV9FSURSTQorICAgICAgaWRlbnRpZmllcl9yZW1vdmVkID0gCQkJRUlEUk0sCisjZW5kaWYKKworICAgICAgaWxsZWdhbF9ieXRlX3NlcXVlbmNlID0gCQkJRUlMU0VRLAorICAgICAgaW5hcHByb3ByaWF0ZV9pb19jb250cm9sX29wZXJhdGlvbiA9IAlFTk9UVFksCisgICAgICBpbnRlcnJ1cHRlZCA9IAkJCQlFSU5UUiwKKyAgICAgIGludmFsaWRfYXJndW1lbnQgPSAJCQlFSU5WQUwsCisgICAgICBpbnZhbGlkX3NlZWsgPSAJCQkJRVNQSVBFLAorICAgICAgaW9fZXJyb3IgPSAJCQkJRUlPLAorICAgICAgaXNfYV9kaXJlY3RvcnkgPSAJCQkJRUlTRElSLAorICAgICAgbWVzc2FnZV9zaXplID0gCQkJCUVNU0dTSVpFLAorICAgICAgbmV0d29ya19kb3duID0gCQkJCUVORVRET1dOLAorICAgICAgbmV0d29ya19yZXNldCA9IAkJCQlFTkVUUkVTRVQsCisgICAgICBuZXR3b3JrX3VucmVhY2hhYmxlID0gCQkJRU5FVFVOUkVBQ0gsCisgICAgICBub19idWZmZXJfc3BhY2UgPSAJCQlFTk9CVUZTLAorICAgICAgbm9fY2hpbGRfcHJvY2VzcyA9IAkJCUVDSElMRCwKKworI2lmZGVmIF9HTElCQ1hYX0hBVkVfRU5PTElOSworICAgICAgbm9fbGluayA9IAkJCQlFTk9MSU5LLAorI2VuZGlmCisKKyAgICAgIG5vX2xvY2tfYXZhaWxhYmxlID0gCQkJRU5PTENLLAorCisjaWZkZWYgX0dMSUJDWFhfSEFWRV9FTk9EQVRBCisgICAgICBub19tZXNzYWdlX2F2YWlsYWJsZSA9IAkJCUVOT0RBVEEsIAorI2VuZGlmCisKKyAgICAgIG5vX21lc3NhZ2UgPSAJCQkJRU5PTVNHLCAKKyAgICAgIG5vX3Byb3RvY29sX29wdGlvbiA9IAkJCUVOT1BST1RPT1BULAorICAgICAgbm9fc3BhY2Vfb25fZGV2aWNlID0gCQkJRU5PU1BDLAorCisjaWZkZWYgX0dMSUJDWFhfSEFWRV9FTk9TUgorICAgICAgbm9fc3RyZWFtX3Jlc291cmNlcyA9IAkJCUVOT1NSLAorI2VuZGlmCisKKyAgICAgIG5vX3N1Y2hfZGV2aWNlX29yX2FkZHJlc3MgPSAJCUVOWElPLAorICAgICAgbm9fc3VjaF9kZXZpY2UgPSAJCQkJRU5PREVWLAorICAgICAgbm9fc3VjaF9maWxlX29yX2RpcmVjdG9yeSA9IAkJRU5PRU5ULAorICAgICAgbm9fc3VjaF9wcm9jZXNzID0gCQkJRVNSQ0gsCisgICAgICBub3RfYV9kaXJlY3RvcnkgPSAJCQlFTk9URElSLAorICAgICAgbm90X2Ffc29ja2V0ID0gCQkJCUVOT1RTT0NLLAorCisjaWZkZWYgX0dMSUJDWFhfSEFWRV9FTk9TVFIKKyAgICAgIG5vdF9hX3N0cmVhbSA9IAkJCQlFTk9TVFIsCisjZW5kaWYKKworICAgICAgbm90X2Nvbm5lY3RlZCA9IAkJCQlFTk9UQ09OTiwKKyAgICAgIG5vdF9lbm91Z2hfbWVtb3J5ID0gCQkJRU5PTUVNLAorCisjaWZkZWYgX0dMSUJDWFhfSEFWRV9FTk9UU1VQCisgICAgICBub3Rfc3VwcG9ydGVkID0gCQkJCUVOT1RTVVAsCisjZW5kaWYKKworI2lmZGVmIF9HTElCQ1hYX0hBVkVfRUNBTkNFTEVECisgICAgICBvcGVyYXRpb25fY2FuY2VsZWQgPSAJCQlFQ0FOQ0VMRUQsCisjZW5kaWYKKworICAgICAgb3BlcmF0aW9uX2luX3Byb2dyZXNzID0gCQkJRUlOUFJPR1JFU1MsCisgICAgICBvcGVyYXRpb25fbm90X3Blcm1pdHRlZCA9IAkJRVBFUk0sCisgICAgICBvcGVyYXRpb25fbm90X3N1cHBvcnRlZCA9IAkJRU9QTk9UU1VQUCwKKyAgICAgIG9wZXJhdGlvbl93b3VsZF9ibG9jayA9IAkJCUVXT1VMREJMT0NLLAorCisjaWZkZWYgX0dMSUJDWFhfSEFWRV9FT1dORVJERUFECisgICAgICBvd25lcl9kZWFkID0gCQkJCUVPV05FUkRFQUQsCisjZW5kaWYKKworICAgICAgcGVybWlzc2lvbl9kZW5pZWQgPSAJCQlFQUNDRVMsCisKKyNpZmRlZiBfR0xJQkNYWF9IQVZFX0VQUk9UTworICAgICAgcHJvdG9jb2xfZXJyb3IgPSAJCQkJRVBST1RPLAorI2VuZGlmCisKKyAgICAgIHByb3RvY29sX25vdF9zdXBwb3J0ZWQgPSAJCQlFUFJPVE9OT1NVUFBPUlQsCisgICAgICByZWFkX29ubHlfZmlsZV9zeXN0ZW0gPSAJCQlFUk9GUywKKyAgICAgIHJlc291cmNlX2RlYWRsb2NrX3dvdWxkX29jY3VyID0gCQlFREVBRExLLAorICAgICAgcmVzb3VyY2VfdW5hdmFpbGFibGVfdHJ5X2FnYWluID0gCQlFQUdBSU4sCisgICAgICByZXN1bHRfb3V0X29mX3JhbmdlID0gCQkJRVJBTkdFLAorCisjaWZkZWYgX0dMSUJDWFhfSEFWRV9FTk9UUkVDT1ZFUkFCTEUKKyAgICAgIHN0YXRlX25vdF9yZWNvdmVyYWJsZSA9IAkJCUVOT1RSRUNPVkVSQUJMRSwKKyNlbmRpZgorCisjaWZkZWYgX0dMSUJDWFhfSEFWRV9FVElNRQorICAgICAgc3RyZWFtX3RpbWVvdXQgPSAJCQkJRVRJTUUsCisjZW5kaWYKKworI2lmZGVmIF9HTElCQ1hYX0hBVkVfRVRYVEJTWQorICAgICAgdGV4dF9maWxlX2J1c3kgPSAJCQkJRVRYVEJTWSwKKyNlbmRpZgorCisgICAgICB0aW1lZF9vdXQgPSAJCQkJRVRJTUVET1VULAorICAgICAgdG9vX21hbnlfZmlsZXNfb3Blbl9pbl9zeXN0ZW0gPSAJCUVORklMRSwKKyAgICAgIHRvb19tYW55X2ZpbGVzX29wZW4gPSAJCQlFTUZJTEUsCisgICAgICB0b29fbWFueV9saW5rcyA9IAkJCQlFTUxJTkssCisgICAgICB0b29fbWFueV9zeW1ib2xpY19saW5rX2xldmVscyA9IAkJRUxPT1AsCisKKyNpZmRlZiBfR0xJQkNYWF9IQVZFX0VPVkVSRkxPVworICAgICAgdmFsdWVfdG9vX2xhcmdlID0gCQkJRU9WRVJGTE9XLAorI2VuZGlmCisKKyAgICAgIHdyb25nX3Byb3RvY29sX3R5cGUgPSAJCQlFUFJPVE9UWVBFCisgICAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaXRzL2V4dGMrKy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2JpdHMvZXh0YysrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNlNTMzOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaXRzL2V4dGMrKy5oCkBAIC0wLDAgKzEsNzEgQEAKKy8vIEMrKyBpbmNsdWRlcyB1c2VkIGZvciBwcmVjb21waWxpbmcgZXh0ZW5zaW9ucyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGV4dGMrKy5oCisgKiAgVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBmaWxlIGZvciBhIHByZWNvbXBpbGVkIGhlYWRlci4KKyAqLworCisjaWZuZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisjaW5jbHVkZSA8Yml0cy9zdGR0cjFjKysuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8ZXh0L2FsZ29yaXRobT4KKyNpbmNsdWRlIDxleHQvYXJyYXlfYWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8ZXh0L2F0b21pY2l0eS5oPgorI2luY2x1ZGUgPGV4dC9iaXRtYXBfYWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8ZXh0L2Nhc3QuaD4KKyNpbmNsdWRlIDxleHQvY29uY3VycmVuY2UuaD4KKyNpbmNsdWRlIDxleHQvZGVidWdfYWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8ZXh0L2V4dHB0cl9hbGxvY2F0b3IuaD4KKyNpbmNsdWRlIDxleHQvZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDxleHQvaXRlcmF0b3I+CisjaW5jbHVkZSA8ZXh0L21hbGxvY19hbGxvY2F0b3IuaD4KKyNpbmNsdWRlIDxleHQvbWVtb3J5PgorI2luY2x1ZGUgPGV4dC9tdF9hbGxvY2F0b3IuaD4KKyNpbmNsdWRlIDxleHQvbmV3X2FsbG9jYXRvci5oPgorI2luY2x1ZGUgPGV4dC9udW1lcmljPgorI2luY2x1ZGUgPGV4dC9wb2RfY2hhcl90cmFpdHMuaD4KKyNpbmNsdWRlIDxleHQvcG9pbnRlci5oPgorI2luY2x1ZGUgPGV4dC9wb29sX2FsbG9jYXRvci5oPgorI2luY2x1ZGUgPGV4dC9yYl90cmVlPgorI2luY2x1ZGUgPGV4dC9yb3BlPgorI2luY2x1ZGUgPGV4dC9zbGlzdD4KKyNpbmNsdWRlIDxleHQvc3RkaW9fZmlsZWJ1Zi5oPgorI2luY2x1ZGUgPGV4dC9zdGRpb19zeW5jX2ZpbGVidWYuaD4KKyNpbmNsdWRlIDxleHQvdGhyb3dfYWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8ZXh0L3R5cGVsaXN0Lmg+CisjaW5jbHVkZSA8ZXh0L3R5cGVfdHJhaXRzLmg+CisjaW5jbHVkZSA8ZXh0L3ZzdHJpbmcuaD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvcHJpb3JpdHlfcXVldWUuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9leGNlcHRpb24uaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9oYXNoX3BvbGljeS5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2xpc3RfdXBkYXRlX3BvbGljeS5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvdHJpZV9wb2xpY3kuaHBwPgorCisjaWZkZWYgX0dMSUJDWFhfSEFWRV9JQ09OVgorICNpbmNsdWRlIDxleHQvY29kZWN2dF9zcGVjaWFsaXphdGlvbnMuaD4KKyAjaW5jbHVkZSA8ZXh0L2VuY19maWxlYnVmLmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaXRzL2d0aHItZGVmYXVsdC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2JpdHMvZ3Roci1kZWZhdWx0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE1M2E5YgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaXRzL2d0aHItZGVmYXVsdC5oCkBAIC0wLDAgKzEsODY4IEBACisvKiBUaHJlYWRzIGNvbXBhdGliaWxpdHkgcm91dGluZXMgZm9yIGxpYmdjYzIgYW5kIGxpYm9iamMuICAqLworLyogQ29tcGlsZSB0aGlzIG9uZSB3aXRoIGdjYy4gICovCisvKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsCisgICAyMDA4LCAyMDA5LCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1VuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCithIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9HTElCQ1hYX0dDQ19HVEhSX1BPU0lYX0gKKyNkZWZpbmUgX0dMSUJDWFhfR0NDX0dUSFJfUE9TSVhfSAorCisvKiBQT1NJWCB0aHJlYWRzIHNwZWNpZmljIGRlZmluaXRpb25zLgorICAgRWFzeSwgc2luY2UgdGhlIGludGVyZmFjZSBpcyBqdXN0IG9uZS10by1vbmUgbWFwcGluZy4gICovCisKKyNkZWZpbmUgX19HVEhSRUFEUyAxCisjZGVmaW5lIF9fR1RIUkVBRFNfQ1hYMFggMQorCisvKiBTb21lIGltcGxlbWVudGF0aW9ucyBvZiA8cHRocmVhZC5oPiByZXF1aXJlIHRoaXMgdG8gYmUgZGVmaW5lZC4gICovCisjaWYgIWRlZmluZWQoX1JFRU5UUkFOVCkgJiYgZGVmaW5lZChfX29zZl9fKQorI2RlZmluZSBfUkVFTlRSQU5UIDEKKyNlbmRpZgorCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCit0eXBlZGVmIHB0aHJlYWRfdCBfX2d0aHJlYWRfdDsKK3R5cGVkZWYgcHRocmVhZF9rZXlfdCBfX2d0aHJlYWRfa2V5X3Q7Cit0eXBlZGVmIHB0aHJlYWRfb25jZV90IF9fZ3RocmVhZF9vbmNlX3Q7Cit0eXBlZGVmIHB0aHJlYWRfbXV0ZXhfdCBfX2d0aHJlYWRfbXV0ZXhfdDsKK3R5cGVkZWYgcHRocmVhZF9tdXRleF90IF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdDsKK3R5cGVkZWYgcHRocmVhZF9jb25kX3QgX19ndGhyZWFkX2NvbmRfdDsKK3R5cGVkZWYgc3RydWN0IHRpbWVzcGVjIF9fZ3RocmVhZF90aW1lX3Q7CisKKy8qIFBPU0lYIGxpa2UgY29uZGl0aW9uYWwgdmFyaWFibGVzIGFyZSBzdXBwb3J0ZWQuICBQbGVhc2UgbG9vayBhdCBjb21tZW50cworICAgaW4gZ3Roci5oIGZvciBkZXRhaWxzLiAqLworI2RlZmluZSBfX0dUSFJFQURfSEFTX0NPTkQJMQorCisjZGVmaW5lIF9fR1RIUkVBRF9NVVRFWF9JTklUIFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIKKyNkZWZpbmUgX19HVEhSRUFEX09OQ0VfSU5JVCBQVEhSRUFEX09OQ0VfSU5JVAorI2lmIGRlZmluZWQoUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVIpCisjZGVmaW5lIF9fR1RIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVCBQVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUSUFMSVpFUgorI2VsaWYgZGVmaW5lZChQVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUSUFMSVpFUl9OUCkKKyNkZWZpbmUgX19HVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUIFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSX05QCisjZWxzZQorI2RlZmluZSBfX0dUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRfRlVOQ1RJT04gX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF9pbml0X2Z1bmN0aW9uCisjZW5kaWYKKyNkZWZpbmUgX19HVEhSRUFEX0NPTkRfSU5JVCBQVEhSRUFEX0NPTkRfSU5JVElBTElaRVIKKyNkZWZpbmUgX19HVEhSRUFEX1RJTUVfSU5JVCB7MCwwfQorCisjaWYgX19HWFhfV0VBS19fICYmIF9HTElCQ1hYX0dUSFJFQURfVVNFX1dFQUsKKyMgaWZuZGVmIF9fZ3RocndfcHJhZ21hCisjICBkZWZpbmUgX19ndGhyd19wcmFnbWEocHJhZ21hKQorIyBlbmRpZgorIyBkZWZpbmUgX19ndGhydzIobmFtZSxuYW1lMix0eXBlKSBcCisgIHN0YXRpYyBfX3R5cGVvZih0eXBlKSBuYW1lIF9fYXR0cmlidXRlX18gKChfX3dlYWtyZWZfXygjbmFtZTIpKSk7IFwKKyAgX19ndGhyd19wcmFnbWEod2VhayB0eXBlKQorIyBkZWZpbmUgX19ndGhyd18obmFtZSkgX19ndGhyd18gIyMgbmFtZQorI2Vsc2UKKyMgZGVmaW5lIF9fZ3RocncyKG5hbWUsbmFtZTIsdHlwZSkKKyMgZGVmaW5lIF9fZ3RocndfKG5hbWUpIG5hbWUKKyNlbmRpZgorCisvKiBUeXBpY2FsbHksIF9fZ3RocndfZm9vIGlzIGEgd2VhayByZWZlcmVuY2UgdG8gc3ltYm9sIGZvby4gICovCisjZGVmaW5lIF9fZ3RocncobmFtZSkgX19ndGhydzIoX19ndGhyd18gIyMgbmFtZSxuYW1lLG5hbWUpCisKKy8qIE9uIFRydTY0LCAvdXNyL2luY2x1ZGUvcHRocmVhZC5oIHVzZXMgI3ByYWdtYSBleHRlcm5fcHJlZml4ICJfXyIgdG8KKyAgIG1hcCBhIHN1YnNldCBvZiB0aGUgUE9TSVggcHRocmVhZCBBUEkgdG8gbWFuZ2xlZCB2ZXJzaW9ucyBvZiB0aGVpcgorICAgbmFtZXMuICAqLworI2lmIGRlZmluZWQoX19vc2ZfXykgJiYgZGVmaW5lZChfUFRIUkVBRF9VU0VfTUFOR0xFRF9OQU1FU18pCisjZGVmaW5lIF9fZ3RocnczKG5hbWUpIF9fZ3RocncyKF9fZ3RocndfICMjIG5hbWUsIF9fICMjIG5hbWUsIG5hbWUpCitfX2d0aHJ3MyhwdGhyZWFkX29uY2UpCitfX2d0aHJ3MyhwdGhyZWFkX2dldHNwZWNpZmljKQorX19ndGhydzMocHRocmVhZF9zZXRzcGVjaWZpYykKKworX19ndGhydzMocHRocmVhZF9jcmVhdGUpCitfX2d0aHJ3MyhwdGhyZWFkX2pvaW4pCitfX2d0aHJ3MyhwdGhyZWFkX2RldGFjaCkKK19fZ3RocnczKHB0aHJlYWRfZXF1YWwpCitfX2d0aHJ3MyhwdGhyZWFkX3NlbGYpCitfX2d0aHJ3MyhwdGhyZWFkX2NhbmNlbCkKK19fZ3RocnczKHNjaGVkX3lpZWxkKQorCitfX2d0aHJ3MyhwdGhyZWFkX211dGV4X2xvY2spCitfX2d0aHJ3MyhwdGhyZWFkX211dGV4X3RyeWxvY2spCisjaWZkZWYgX1BPU0lYX1RJTUVPVVRTCisjaWYgX1BPU0lYX1RJTUVPVVRTID49IDAKK19fZ3RocnczKHB0aHJlYWRfbXV0ZXhfdGltZWRsb2NrKQorI2VuZGlmCisjZW5kaWYgLyogX1BPU0lYX1RJTUVPVVRTICovCitfX2d0aHJ3MyhwdGhyZWFkX211dGV4X3VubG9jaykKK19fZ3RocnczKHB0aHJlYWRfbXV0ZXhfaW5pdCkKK19fZ3RocnczKHB0aHJlYWRfbXV0ZXhfZGVzdHJveSkKKworX19ndGhydzMocHRocmVhZF9jb25kX2Jyb2FkY2FzdCkKK19fZ3RocnczKHB0aHJlYWRfY29uZF9zaWduYWwpCitfX2d0aHJ3MyhwdGhyZWFkX2NvbmRfd2FpdCkKK19fZ3RocnczKHB0aHJlYWRfY29uZF90aW1lZHdhaXQpCitfX2d0aHJ3MyhwdGhyZWFkX2NvbmRfZGVzdHJveSkKKyNlbHNlCitfX2d0aHJ3KHB0aHJlYWRfb25jZSkKK19fZ3RocncocHRocmVhZF9nZXRzcGVjaWZpYykKK19fZ3RocncocHRocmVhZF9zZXRzcGVjaWZpYykKKworX19ndGhydyhwdGhyZWFkX2NyZWF0ZSkKK19fZ3RocncocHRocmVhZF9qb2luKQorX19ndGhydyhwdGhyZWFkX2VxdWFsKQorX19ndGhydyhwdGhyZWFkX3NlbGYpCitfX2d0aHJ3KHB0aHJlYWRfZGV0YWNoKQorX19ndGhydyhwdGhyZWFkX2NhbmNlbCkKK19fZ3Rocncoc2NoZWRfeWllbGQpCisKK19fZ3RocncocHRocmVhZF9tdXRleF9sb2NrKQorX19ndGhydyhwdGhyZWFkX211dGV4X3RyeWxvY2spCisjaWZkZWYgX1BPU0lYX1RJTUVPVVRTCisjaWYgX1BPU0lYX1RJTUVPVVRTID49IDAKK19fZ3RocncocHRocmVhZF9tdXRleF90aW1lZGxvY2spCisjZW5kaWYKKyNlbmRpZiAvKiBfUE9TSVhfVElNRU9VVFMgKi8KK19fZ3RocncocHRocmVhZF9tdXRleF91bmxvY2spCitfX2d0aHJ3KHB0aHJlYWRfbXV0ZXhfaW5pdCkKK19fZ3RocncocHRocmVhZF9tdXRleF9kZXN0cm95KQorCitfX2d0aHJ3KHB0aHJlYWRfY29uZF9icm9hZGNhc3QpCitfX2d0aHJ3KHB0aHJlYWRfY29uZF9zaWduYWwpCitfX2d0aHJ3KHB0aHJlYWRfY29uZF93YWl0KQorX19ndGhydyhwdGhyZWFkX2NvbmRfdGltZWR3YWl0KQorX19ndGhydyhwdGhyZWFkX2NvbmRfZGVzdHJveSkKKyNlbmRpZgorCitfX2d0aHJ3KHB0aHJlYWRfa2V5X2NyZWF0ZSkKK19fZ3RocncocHRocmVhZF9rZXlfZGVsZXRlKQorX19ndGhydyhwdGhyZWFkX211dGV4YXR0cl9pbml0KQorX19ndGhydyhwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKQorX19ndGhydyhwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KQorCisKKyNpZiBkZWZpbmVkKF9MSUJPQkpDKSB8fCBkZWZpbmVkKF9MSUJPQkpDX1dFQUspCisvKiBPYmplY3RpdmUtQy4gICovCisjaWYgZGVmaW5lZChfX29zZl9fKSAmJiBkZWZpbmVkKF9QVEhSRUFEX1VTRV9NQU5HTEVEX05BTUVTXykKK19fZ3RocnczKHB0aHJlYWRfY29uZF9pbml0KQorX19ndGhydzMocHRocmVhZF9leGl0KQorI2Vsc2UKK19fZ3RocncocHRocmVhZF9jb25kX2luaXQpCitfX2d0aHJ3KHB0aHJlYWRfZXhpdCkKKyNlbmRpZiAvKiBfX29zZl9fICYmIF9QVEhSRUFEX1VTRV9NQU5HTEVEX05BTUVTXyAqLworI2lmZGVmIF9QT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HCisjaWZkZWYgX1BPU0lYX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HCitfX2d0aHJ3KHNjaGVkX2dldF9wcmlvcml0eV9tYXgpCitfX2d0aHJ3KHNjaGVkX2dldF9wcmlvcml0eV9taW4pCisjZW5kaWYgLyogX1BPU0lYX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HICovCisjZW5kaWYgLyogX1BPU0lYX1BSSU9SSVRZX1NDSEVEVUxJTkcgKi8KK19fZ3RocncocHRocmVhZF9hdHRyX2Rlc3Ryb3kpCitfX2d0aHJ3KHB0aHJlYWRfYXR0cl9pbml0KQorX19ndGhydyhwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUpCisjaWZkZWYgX1BPU0lYX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HCitfX2d0aHJ3KHB0aHJlYWRfZ2V0c2NoZWRwYXJhbSkKK19fZ3RocncocHRocmVhZF9zZXRzY2hlZHBhcmFtKQorI2VuZGlmIC8qIF9QT1NJWF9USFJFQURfUFJJT1JJVFlfU0NIRURVTElORyAqLworI2VuZGlmIC8qIF9MSUJPQkpDIHx8IF9MSUJPQkpDX1dFQUsgKi8KKworI2lmIF9fR1hYX1dFQUtfXyAmJiBfR0xJQkNYWF9HVEhSRUFEX1VTRV9XRUFLCisKKy8qIE9uIFNvbGFyaXMgMi42IHVwIHRvIDksIHRoZSBsaWJjIGV4cG9zZXMgYSBQT1NJWCB0aHJlYWRzIGludGVyZmFjZSBldmVuIGlmCisgICAtcHRocmVhZHMgaXMgbm90IHNwZWNpZmllZC4gIFRoZSBmdW5jdGlvbnMgYXJlIGR1bW1pZXMgYW5kIG1vc3QgcmV0dXJuIGFuCisgICBlcnJvciB2YWx1ZS4gIEhvd2V2ZXIgcHRocmVhZF9vbmNlIHJldHVybnMgMCB3aXRob3V0IGludm9raW5nIHRoZSByb3V0aW5lCisgICBpdCBpcyBwYXNzZWQgc28gd2UgY2Fubm90IHByZXRlbmQgdGhhdCB0aGUgaW50ZXJmYWNlIGlzIGFjdGl2ZSBpZiAtcHRocmVhZHMKKyAgIGlzIG5vdCBzcGVjaWZpZWQuICBPbiBTb2xhcmlzIDIuNS4xLCB0aGUgaW50ZXJmYWNlIGlzIG5vdCBleHBvc2VkIGF0IGFsbCBzbworICAgd2UgbmVlZCB0byBwbGF5IHRoZSB1c3VhbCBnYW1lIHdpdGggd2VhayBzeW1ib2xzLiAgT24gU29sYXJpcyAxMCBhbmQgdXAsIGEKKyAgIHdvcmtpbmcgaW50ZXJmYWNlIGlzIGFsd2F5cyBleHBvc2VkLiAgT24gRnJlZUJTRCA2IGFuZCBsYXRlciwgbGliYyBhbHNvCisgICBleHBvc2VzIGEgZHVtbXkgUE9TSVggdGhyZWFkcyBpbnRlcmZhY2UsIHNpbWlsYXIgdG8gd2hhdCBTb2xhcmlzIDIuNiB1cAorICAgdG8gOSBkb2VzLiAgRnJlZUJTRCA+PSA3MDAwMTQgZXZlbiBwcm92aWRlcyBhIHB0aHJlYWRfY2FuY2VsIHN0dWIgaW4gbGliYywKKyAgIHdoaWNoIG1lYW5zIHRoZSBhbHRlcm5hdGUgX19ndGhyZWFkX2FjdGl2ZV9wIGJlbG93IGNhbm5vdCBiZSB1c2VkIHRoZXJlLiAgKi8KKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IChkZWZpbmVkKF9fc3VuKSAmJiBkZWZpbmVkKF9fc3ZyNF9fKSkKKworc3RhdGljIHZvbGF0aWxlIGludCBfX2d0aHJlYWRfYWN0aXZlID0gLTE7CisKK3N0YXRpYyB2b2lkCitfX2d0aHJlYWRfdHJpZ2dlciAodm9pZCkKK3sKKyAgX19ndGhyZWFkX2FjdGl2ZSA9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfYWN0aXZlX3AgKHZvaWQpCit7CisgIHN0YXRpYyBwdGhyZWFkX211dGV4X3QgX19ndGhyZWFkX2FjdGl2ZV9tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisgIHN0YXRpYyBwdGhyZWFkX29uY2VfdCBfX2d0aHJlYWRfYWN0aXZlX29uY2UgPSBQVEhSRUFEX09OQ0VfSU5JVDsKKworICAvKiBBdm9pZCByZWFkaW5nIF9fZ3RocmVhZF9hY3RpdmUgdHdpY2Ugb24gdGhlIG1haW4gY29kZSBwYXRoLiAgKi8KKyAgaW50IF9fZ3RocmVhZF9hY3RpdmVfbGF0ZXN0X3ZhbHVlID0gX19ndGhyZWFkX2FjdGl2ZTsKKworICAvKiBUaGlzIHRlc3QgaXMgbm90IHByb3RlY3RlZCB0byBhdm9pZCB0YWtpbmcgYSBsb2NrIG9uIHRoZSBtYWluIGNvZGUKKyAgICAgcGF0aCBzbyBldmVyeSB1cGRhdGUgb2YgX19ndGhyZWFkX2FjdGl2ZSBpbiBhIHRocmVhZGVkIHByb2dyYW0gbXVzdAorICAgICBiZSBhdG9taWMgd2l0aCByZWdhcmQgdG8gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdC4gICovCisgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX2d0aHJlYWRfYWN0aXZlX2xhdGVzdF92YWx1ZSA8IDAsIDApKQorICAgIHsKKyAgICAgIGlmIChfX2d0aHJ3XyhwdGhyZWFkX29uY2UpKQorCXsKKwkgIC8qIElmIHRoaXMgcmVhbGx5IGlzIGEgdGhyZWFkZWQgcHJvZ3JhbSwgdGhlbiB3ZSBtdXN0IGVuc3VyZSB0aGF0CisJICAgICBfX2d0aHJlYWRfYWN0aXZlIGhhcyBiZWVuIHNldCB0byAxIGJlZm9yZSBleGl0aW5nIHRoaXMgYmxvY2suICAqLworCSAgX19ndGhyd18ocHRocmVhZF9tdXRleF9sb2NrKSAoJl9fZ3RocmVhZF9hY3RpdmVfbXV0ZXgpOworCSAgX19ndGhyd18ocHRocmVhZF9vbmNlKSAoJl9fZ3RocmVhZF9hY3RpdmVfb25jZSwgX19ndGhyZWFkX3RyaWdnZXIpOworCSAgX19ndGhyd18ocHRocmVhZF9tdXRleF91bmxvY2spICgmX19ndGhyZWFkX2FjdGl2ZV9tdXRleCk7CisJfQorCisgICAgICAvKiBNYWtlIHN1cmUgd2UnbGwgbmV2ZXIgZW50ZXIgdGhpcyBibG9jayBhZ2Fpbi4gICovCisgICAgICBpZiAoX19ndGhyZWFkX2FjdGl2ZSA8IDApCisJX19ndGhyZWFkX2FjdGl2ZSA9IDA7CisKKyAgICAgIF9fZ3RocmVhZF9hY3RpdmVfbGF0ZXN0X3ZhbHVlID0gX19ndGhyZWFkX2FjdGl2ZTsKKyAgICB9CisKKyAgcmV0dXJuIF9fZ3RocmVhZF9hY3RpdmVfbGF0ZXN0X3ZhbHVlICE9IDA7Cit9CisKKyNlbHNlIC8qIG5laXRoZXIgRnJlZUJTRCBub3IgU29sYXJpcyAqLworCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX2FjdGl2ZV9wICh2b2lkKQoreworICBzdGF0aWMgdm9pZCAqY29uc3QgX19ndGhyZWFkX2FjdGl2ZV9wdHIKKyAgICA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikgJl9fZ3RocndfKHB0aHJlYWRfY2FuY2VsKTsKKyAgcmV0dXJuIF9fZ3RocmVhZF9hY3RpdmVfcHRyICE9IDA7Cit9CisKKyNlbmRpZiAvKiBGcmVlQlNEIG9yIFNvbGFyaXMgKi8KKworI2Vsc2UgLyogbm90IF9fR1hYX1dFQUtfXyAqLworCisvKiBTaW1pbGFyIHRvIFNvbGFyaXMsIEhQLVVYIDExIGZvciBQQS1SSVNDIHByb3ZpZGVzIHN0dWJzIGZvciBwdGhyZWFkCisgICBjYWxscyBpbiBzaGFyZWQgZmxhdm9ycyBvZiB0aGUgSFAtVVggQyBsaWJyYXJ5LiAgTW9zdCBvZiB0aGUgc3R1YnMKKyAgIGhhdmUgbm8gZnVuY3Rpb25hbGl0eS4gIFRoZSBkZXRhaWxzIGFyZSBkZXNjcmliZWQgaW4gdGhlICJsaWJjIGN1bXVsYXRpdmUKKyAgIHBhdGNoIiBmb3IgZWFjaCBzdWJ2ZXJzaW9uIG9mIEhQLVVYIDExLiAgVGhlcmUgYXJlIHR3byBzcGVjaWFsIGludGVyZmFjZXMKKyAgIHByb3ZpZGVkIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIGFwcGxpY2F0aW9uIGlzIGxpbmtlZCB0byBhIHNoYXJlZCBwdGhyZWFkCisgICBsaWJyYXJ5IG9yIG5vdC4gIEhvd2V2ZXIsIHRoZXNlIGludGVyZmFjZXMgYXJlbid0IGF2YWlsYWJsZSBpbiBlYXJseQorICAgbGlicHRocmVhZCBsaWJyYXJpZXMuICBXZSBhbHNvIG5lZWQgYSB0ZXN0IHRoYXQgd29ya3MgZm9yIGFyY2hpdmUKKyAgIGxpYnJhcmllcy4gIFdlIGNhbid0IHVzZSBwdGhyZWFkX29uY2UgYXMgc29tZSBsaWJjIHZlcnNpb25zIGNhbGwgdGhlCisgICBpbml0IGZ1bmN0aW9uLiAgV2UgYWxzbyBjYW4ndCB1c2UgcHRocmVhZF9jcmVhdGUgb3IgcHRocmVhZF9hdHRyX2luaXQKKyAgIGFzIHRoZXNlIGNyZWF0ZSBhIHRocmVhZCBhbmQgdGhlcmVieSBwcmV2ZW50IGNoYW5naW5nIHRoZSBkZWZhdWx0IHN0YWNrCisgICBzaXplLiAgVGhlIGZ1bmN0aW9uIHB0aHJlYWRfZGVmYXVsdF9zdGFja3NpemVfbnAgaXMgYXZhaWxhYmxlIGluIGJvdGgKKyAgIHRoZSBhcmNoaXZlIGFuZCBzaGFyZWQgdmVyc2lvbnMgb2YgbGlicHRocmVhZC4gICBJdCBjYW4gYmUgdXNlZCB0bworICAgZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IHB0aHJlYWQgc3RhY2sgc2l6ZS4gIFRoZXJlIGlzIGEgc3R1YiBpbiBzb21lCisgICBzaGFyZWQgbGliYyB2ZXJzaW9ucyB3aGljaCByZXR1cm5zIGEgemVybyBzaXplIGlmIHB0aHJlYWRzIGFyZSBub3QKKyAgIGFjdGl2ZS4gIFdlIHByb3ZpZGUgYW4gZXF1aXZhbGVudCBzdHViIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSBsaWJjCisgICBkb2Vzbid0IHByb3ZpZGUgb25lLiAgKi8KKworI2lmIGRlZmluZWQoX19ocHBhX18pICYmIGRlZmluZWQoX19ocHV4X18pCisKK3N0YXRpYyB2b2xhdGlsZSBpbnQgX19ndGhyZWFkX2FjdGl2ZSA9IC0xOworCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX2FjdGl2ZV9wICh2b2lkKQoreworICAvKiBBdm9pZCByZWFkaW5nIF9fZ3RocmVhZF9hY3RpdmUgdHdpY2Ugb24gdGhlIG1haW4gY29kZSBwYXRoLiAgKi8KKyAgaW50IF9fZ3RocmVhZF9hY3RpdmVfbGF0ZXN0X3ZhbHVlID0gX19ndGhyZWFkX2FjdGl2ZTsKKyAgc2l6ZV90IF9fczsKKworICBpZiAoX19idWlsdGluX2V4cGVjdCAoX19ndGhyZWFkX2FjdGl2ZV9sYXRlc3RfdmFsdWUgPCAwLCAwKSkKKyAgICB7CisgICAgICBwdGhyZWFkX2RlZmF1bHRfc3RhY2tzaXplX25wICgwLCAmX19zKTsKKyAgICAgIF9fZ3RocmVhZF9hY3RpdmUgPSBfX3MgPyAxIDogMDsKKyAgICAgIF9fZ3RocmVhZF9hY3RpdmVfbGF0ZXN0X3ZhbHVlID0gX19ndGhyZWFkX2FjdGl2ZTsKKyAgICB9CisKKyAgcmV0dXJuIF9fZ3RocmVhZF9hY3RpdmVfbGF0ZXN0X3ZhbHVlICE9IDA7Cit9CisKKyNlbHNlIC8qIG5vdCBocHBhLWhwdXggKi8KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9hY3RpdmVfcCAodm9pZCkKK3sKKyAgcmV0dXJuIDE7Cit9CisKKyNlbmRpZiAvKiBocHBhLWhwdXggKi8KKworI2VuZGlmIC8qIF9fR1hYX1dFQUtfXyAqLworCisjaWZkZWYgX0xJQk9CSkMKKworLyogVGhpcyBpcyB0aGUgY29uZmlnLmggZmlsZSBpbiBsaWJvYmpjLyAqLworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaWZkZWYgSEFWRV9TQ0hFRF9ICisjIGluY2x1ZGUgPHNjaGVkLmg+CisjZW5kaWYKKworLyogS2V5IHN0cnVjdHVyZSBmb3IgbWFpbnRhaW5pbmcgdGhyZWFkIHNwZWNpZmljIHN0b3JhZ2UgKi8KK3N0YXRpYyBwdGhyZWFkX2tleV90IF9vYmpjX3RocmVhZF9zdG9yYWdlOworc3RhdGljIHB0aHJlYWRfYXR0cl90IF9vYmpjX3RocmVhZF9hdHRyaWJzOworCisvKiBUaHJlYWQgbG9jYWwgc3RvcmFnZSBmb3IgYSBzaW5nbGUgdGhyZWFkICovCitzdGF0aWMgdm9pZCAqdGhyZWFkX2xvY2FsX3N0b3JhZ2UgPSBOVUxMOworCisvKiBCYWNrZW5kIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAqLworCisvKiBJbml0aWFsaXplIHRoZSB0aHJlYWRzIHN1YnN5c3RlbS4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfaW5pdF90aHJlYWRfc3lzdGVtICh2b2lkKQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHsKKyAgICAgIC8qIEluaXRpYWxpemUgdGhlIHRocmVhZCBzdG9yYWdlIGtleS4gICovCisgICAgICBpZiAoX19ndGhyd18ocHRocmVhZF9rZXlfY3JlYXRlKSAoJl9vYmpjX3RocmVhZF9zdG9yYWdlLCBOVUxMKSA9PSAwKQorCXsKKwkgIC8qIFRoZSBub3JtYWwgZGVmYXVsdCBkZXRhY2ggc3RhdGUgZm9yIHRocmVhZHMgaXMKKwkgICAqIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFIHdoaWNoIGNhdXNlcyB0aHJlYWRzIHRvIG5vdCBkaWUKKwkgICAqIHdoZW4geW91IHRoaW5rIHRoZXkgc2hvdWxkLiAgKi8KKwkgIGlmIChfX2d0aHJ3XyhwdGhyZWFkX2F0dHJfaW5pdCkgKCZfb2JqY190aHJlYWRfYXR0cmlicykgPT0gMAorCSAgICAgICYmIF9fZ3RocndfKHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSkgKCZfb2JqY190aHJlYWRfYXR0cmlicywKKwkJCQkJICAgICAgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQpID09IDApCisJICAgIHJldHVybiAwOworCX0KKyAgICB9CisKKyAgcmV0dXJuIC0xOworfQorCisvKiBDbG9zZSB0aGUgdGhyZWFkcyBzdWJzeXN0ZW0uICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX2Nsb3NlX3RocmVhZF9zeXN0ZW0gKHZvaWQpCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkKKyAgICAgICYmIF9fZ3RocndfKHB0aHJlYWRfa2V5X2RlbGV0ZSkgKF9vYmpjX3RocmVhZF9zdG9yYWdlKSA9PSAwCisgICAgICAmJiBfX2d0aHJ3XyhwdGhyZWFkX2F0dHJfZGVzdHJveSkgKCZfb2JqY190aHJlYWRfYXR0cmlicykgPT0gMCkKKyAgICByZXR1cm4gMDsKKworICByZXR1cm4gLTE7Cit9CisKKy8qIEJhY2tlbmQgdGhyZWFkIGZ1bmN0aW9ucyAqLworCisvKiBDcmVhdGUgYSBuZXcgdGhyZWFkIG9mIGV4ZWN1dGlvbi4gICovCitzdGF0aWMgaW5saW5lIG9iamNfdGhyZWFkX3QKK19fZ3RocmVhZF9vYmpjX3RocmVhZF9kZXRhY2ggKHZvaWQgKCpmdW5jKSh2b2lkICopLCB2b2lkICphcmcpCit7CisgIG9iamNfdGhyZWFkX3QgdGhyZWFkX2lkOworICBwdGhyZWFkX3QgbmV3X3RocmVhZF9oYW5kbGU7CisKKyAgaWYgKCFfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgaWYgKCEoX19ndGhyd18ocHRocmVhZF9jcmVhdGUpICgmbmV3X3RocmVhZF9oYW5kbGUsIE5VTEwsICh2b2lkICopIGZ1bmMsIGFyZykpKQorICAgIHRocmVhZF9pZCA9IChvYmpjX3RocmVhZF90KSBuZXdfdGhyZWFkX2hhbmRsZTsKKyAgZWxzZQorICAgIHRocmVhZF9pZCA9IE5VTEw7CisKKyAgcmV0dXJuIHRocmVhZF9pZDsKK30KKworLyogU2V0IHRoZSBjdXJyZW50IHRocmVhZCdzIHByaW9yaXR5LiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY190aHJlYWRfc2V0X3ByaW9yaXR5IChpbnQgcHJpb3JpdHkpCit7CisgIGlmICghX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHJldHVybiAtMTsKKyAgZWxzZQorICAgIHsKKyNpZmRlZiBfUE9TSVhfUFJJT1JJVFlfU0NIRURVTElORworI2lmZGVmIF9QT1NJWF9USFJFQURfUFJJT1JJVFlfU0NIRURVTElORworICAgICAgcHRocmVhZF90IHRocmVhZF9pZCA9IF9fZ3RocndfKHB0aHJlYWRfc2VsZikgKCk7CisgICAgICBpbnQgcG9saWN5OworICAgICAgc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtczsKKyAgICAgIGludCBwcmlvcml0eV9taW4sIHByaW9yaXR5X21heDsKKworICAgICAgaWYgKF9fZ3RocndfKHB0aHJlYWRfZ2V0c2NoZWRwYXJhbSkgKHRocmVhZF9pZCwgJnBvbGljeSwgJnBhcmFtcykgPT0gMCkKKwl7CisJICBpZiAoKHByaW9yaXR5X21heCA9IF9fZ3RocndfKHNjaGVkX2dldF9wcmlvcml0eV9tYXgpIChwb2xpY3kpKSA9PSAtMSkKKwkgICAgcmV0dXJuIC0xOworCisJICBpZiAoKHByaW9yaXR5X21pbiA9IF9fZ3RocndfKHNjaGVkX2dldF9wcmlvcml0eV9taW4pIChwb2xpY3kpKSA9PSAtMSkKKwkgICAgcmV0dXJuIC0xOworCisJICBpZiAocHJpb3JpdHkgPiBwcmlvcml0eV9tYXgpCisJICAgIHByaW9yaXR5ID0gcHJpb3JpdHlfbWF4OworCSAgZWxzZSBpZiAocHJpb3JpdHkgPCBwcmlvcml0eV9taW4pCisJICAgIHByaW9yaXR5ID0gcHJpb3JpdHlfbWluOworCSAgcGFyYW1zLnNjaGVkX3ByaW9yaXR5ID0gcHJpb3JpdHk7CisKKwkgIC8qCisJICAgKiBUaGUgc29sYXJpcyA3IGFuZCBzZXZlcmFsIG90aGVyIG1hbiBwYWdlcyBpbmNvcnJlY3RseSBzdGF0ZSB0aGF0CisJICAgKiB0aGlzIHNob3VsZCBiZSBhIHBvaW50ZXIgdG8gcG9saWN5IGJ1dCBwdGhyZWFkLmggaXMgdW5pdmVyc2FsbHkKKwkgICAqIGF0IG9kZHMgd2l0aCB0aGlzLgorCSAgICovCisJICBpZiAoX19ndGhyd18ocHRocmVhZF9zZXRzY2hlZHBhcmFtKSAodGhyZWFkX2lkLCBwb2xpY3ksICZwYXJhbXMpID09IDApCisJICAgIHJldHVybiAwOworCX0KKyNlbmRpZiAvKiBfUE9TSVhfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcgKi8KKyNlbmRpZiAvKiBfUE9TSVhfUFJJT1JJVFlfU0NIRURVTElORyAqLworICAgICAgcmV0dXJuIC0xOworICAgIH0KK30KKworLyogUmV0dXJuIHRoZSBjdXJyZW50IHRocmVhZCdzIHByaW9yaXR5LiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY190aHJlYWRfZ2V0X3ByaW9yaXR5ICh2b2lkKQoreworI2lmZGVmIF9QT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HCisjaWZkZWYgX1BPU0lYX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HCisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgeworICAgICAgaW50IHBvbGljeTsKKyAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbXM7CisKKyAgICAgIGlmIChfX2d0aHJ3XyhwdGhyZWFkX2dldHNjaGVkcGFyYW0pIChfX2d0aHJ3XyhwdGhyZWFkX3NlbGYpICgpLCAmcG9saWN5LCAmcGFyYW1zKSA9PSAwKQorCXJldHVybiBwYXJhbXMuc2NoZWRfcHJpb3JpdHk7CisgICAgICBlbHNlCisJcmV0dXJuIC0xOworICAgIH0KKyAgZWxzZQorI2VuZGlmIC8qIF9QT1NJWF9USFJFQURfUFJJT1JJVFlfU0NIRURVTElORyAqLworI2VuZGlmIC8qIF9QT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HICovCisgICAgcmV0dXJuIE9CSkNfVEhSRUFEX0lOVEVSQUNUSVZFX1BSSU9SSVRZOworfQorCisvKiBZaWVsZCBvdXIgcHJvY2VzcyB0aW1lIHRvIGFub3RoZXIgdGhyZWFkLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorX19ndGhyZWFkX29iamNfdGhyZWFkX3lpZWxkICh2b2lkKQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIF9fZ3RocndfKHNjaGVkX3lpZWxkKSAoKTsKK30KKworLyogVGVybWluYXRlIHRoZSBjdXJyZW50IHRocmVhZC4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfdGhyZWFkX2V4aXQgKHZvaWQpCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgLyogZXhpdCB0aGUgdGhyZWFkICovCisgICAgX19ndGhyd18ocHRocmVhZF9leGl0KSAoJl9fb2JqY190aHJlYWRfZXhpdF9zdGF0dXMpOworCisgIC8qIEZhaWxlZCBpZiB3ZSByZWFjaGVkIGhlcmUgKi8KKyAgcmV0dXJuIC0xOworfQorCisvKiBSZXR1cm5zIGFuIGludGVnZXIgdmFsdWUgd2hpY2ggdW5pcXVlbHkgZGVzY3JpYmVzIGEgdGhyZWFkLiAgKi8KK3N0YXRpYyBpbmxpbmUgb2JqY190aHJlYWRfdAorX19ndGhyZWFkX29iamNfdGhyZWFkX2lkICh2b2lkKQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHJldHVybiAob2JqY190aHJlYWRfdCkgX19ndGhyd18ocHRocmVhZF9zZWxmKSAoKTsKKyAgZWxzZQorICAgIHJldHVybiAob2JqY190aHJlYWRfdCkgMTsKK30KKworLyogU2V0cyB0aGUgdGhyZWFkJ3MgbG9jYWwgc3RvcmFnZSBwb2ludGVyLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY190aHJlYWRfc2V0X2RhdGEgKHZvaWQgKnZhbHVlKQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX3NldHNwZWNpZmljKSAoX29iamNfdGhyZWFkX3N0b3JhZ2UsIHZhbHVlKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIHRocmVhZF9sb2NhbF9zdG9yYWdlID0gdmFsdWU7CisgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKKy8qIFJldHVybnMgdGhlIHRocmVhZCdzIGxvY2FsIHN0b3JhZ2UgcG9pbnRlci4gICovCitzdGF0aWMgaW5saW5lIHZvaWQgKgorX19ndGhyZWFkX29iamNfdGhyZWFkX2dldF9kYXRhICh2b2lkKQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX2dldHNwZWNpZmljKSAoX29iamNfdGhyZWFkX3N0b3JhZ2UpOworICBlbHNlCisgICAgcmV0dXJuIHRocmVhZF9sb2NhbF9zdG9yYWdlOworfQorCisvKiBCYWNrZW5kIG11dGV4IGZ1bmN0aW9ucyAqLworCisvKiBBbGxvY2F0ZSBhIG11dGV4LiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY19tdXRleF9hbGxvY2F0ZSAob2JqY19tdXRleF90IG11dGV4KQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHsKKyAgICAgIG11dGV4LT5iYWNrZW5kID0gb2JqY19tYWxsb2MgKHNpemVvZiAocHRocmVhZF9tdXRleF90KSk7CisKKyAgICAgIGlmIChfX2d0aHJ3XyhwdGhyZWFkX211dGV4X2luaXQpICgocHRocmVhZF9tdXRleF90ICopIG11dGV4LT5iYWNrZW5kLCBOVUxMKSkKKwl7CisJICBvYmpjX2ZyZWUgKG11dGV4LT5iYWNrZW5kKTsKKwkgIG11dGV4LT5iYWNrZW5kID0gTlVMTDsKKwkgIHJldHVybiAtMTsKKwl9CisgICAgfQorCisgIHJldHVybiAwOworfQorCisvKiBEZWFsbG9jYXRlIGEgbXV0ZXguICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX211dGV4X2RlYWxsb2NhdGUgKG9iamNfbXV0ZXhfdCBtdXRleCkKK3sKKyAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKKyAgICB7CisgICAgICBpbnQgY291bnQ7CisKKyAgICAgIC8qCisgICAgICAgKiBQb3NpeCBUaHJlYWRzIHNwZWNpZmljYWxseSByZXF1aXJlIHRoYXQgdGhlIHRocmVhZCBiZSB1bmxvY2tlZAorICAgICAgICogZm9yIF9fZ3RocndfKHB0aHJlYWRfbXV0ZXhfZGVzdHJveSkgdG8gd29yay4KKyAgICAgICAqLworCisgICAgICBkbworCXsKKwkgIGNvdW50ID0gX19ndGhyd18ocHRocmVhZF9tdXRleF91bmxvY2spICgocHRocmVhZF9tdXRleF90ICopIG11dGV4LT5iYWNrZW5kKTsKKwkgIGlmIChjb3VudCA8IDApCisJICAgIHJldHVybiAtMTsKKwl9CisgICAgICB3aGlsZSAoY291bnQpOworCisgICAgICBpZiAoX19ndGhyd18ocHRocmVhZF9tdXRleF9kZXN0cm95KSAoKHB0aHJlYWRfbXV0ZXhfdCAqKSBtdXRleC0+YmFja2VuZCkpCisJcmV0dXJuIC0xOworCisgICAgICBvYmpjX2ZyZWUgKG11dGV4LT5iYWNrZW5kKTsKKyAgICAgIG11dGV4LT5iYWNrZW5kID0gTlVMTDsKKyAgICB9CisgIHJldHVybiAwOworfQorCisvKiBHcmFiIGEgbG9jayBvbiBhIG11dGV4LiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY19tdXRleF9sb2NrIChvYmpjX211dGV4X3QgbXV0ZXgpCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkKKyAgICAgICYmIF9fZ3RocndfKHB0aHJlYWRfbXV0ZXhfbG9jaykgKChwdGhyZWFkX211dGV4X3QgKikgbXV0ZXgtPmJhY2tlbmQpICE9IDApCisgICAgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICByZXR1cm4gMDsKK30KKworLyogVHJ5IHRvIGdyYWIgYSBsb2NrIG9uIGEgbXV0ZXguICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX211dGV4X3RyeWxvY2sgKG9iamNfbXV0ZXhfdCBtdXRleCkKK3sKKyAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKQorICAgICAgJiYgX19ndGhyd18ocHRocmVhZF9tdXRleF90cnlsb2NrKSAoKHB0aHJlYWRfbXV0ZXhfdCAqKSBtdXRleC0+YmFja2VuZCkgIT0gMCkKKyAgICB7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIHJldHVybiAwOworfQorCisvKiBVbmxvY2sgdGhlIG11dGV4ICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfbXV0ZXhfdW5sb2NrIChvYmpjX211dGV4X3QgbXV0ZXgpCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkKKyAgICAgICYmIF9fZ3RocndfKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKSAoKHB0aHJlYWRfbXV0ZXhfdCAqKSBtdXRleC0+YmFja2VuZCkgIT0gMCkKKyAgICB7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIHJldHVybiAwOworfQorCisvKiBCYWNrZW5kIGNvbmRpdGlvbiBtdXRleCBmdW5jdGlvbnMgKi8KKworLyogQWxsb2NhdGUgYSBjb25kaXRpb24uICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX2NvbmRpdGlvbl9hbGxvY2F0ZSAob2JqY19jb25kaXRpb25fdCBjb25kaXRpb24pCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgeworICAgICAgY29uZGl0aW9uLT5iYWNrZW5kID0gb2JqY19tYWxsb2MgKHNpemVvZiAocHRocmVhZF9jb25kX3QpKTsKKworICAgICAgaWYgKF9fZ3RocndfKHB0aHJlYWRfY29uZF9pbml0KSAoKHB0aHJlYWRfY29uZF90ICopIGNvbmRpdGlvbi0+YmFja2VuZCwgTlVMTCkpCisJeworCSAgb2JqY19mcmVlIChjb25kaXRpb24tPmJhY2tlbmQpOworCSAgY29uZGl0aW9uLT5iYWNrZW5kID0gTlVMTDsKKwkgIHJldHVybiAtMTsKKwl9CisgICAgfQorCisgIHJldHVybiAwOworfQorCisvKiBEZWFsbG9jYXRlIGEgY29uZGl0aW9uLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY19jb25kaXRpb25fZGVhbGxvY2F0ZSAob2JqY19jb25kaXRpb25fdCBjb25kaXRpb24pCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgeworICAgICAgaWYgKF9fZ3RocndfKHB0aHJlYWRfY29uZF9kZXN0cm95KSAoKHB0aHJlYWRfY29uZF90ICopIGNvbmRpdGlvbi0+YmFja2VuZCkpCisJcmV0dXJuIC0xOworCisgICAgICBvYmpjX2ZyZWUgKGNvbmRpdGlvbi0+YmFja2VuZCk7CisgICAgICBjb25kaXRpb24tPmJhY2tlbmQgPSBOVUxMOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIFdhaXQgb24gdGhlIGNvbmRpdGlvbiAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX2NvbmRpdGlvbl93YWl0IChvYmpjX2NvbmRpdGlvbl90IGNvbmRpdGlvbiwgb2JqY19tdXRleF90IG11dGV4KQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX2NvbmRfd2FpdCkgKChwdGhyZWFkX2NvbmRfdCAqKSBjb25kaXRpb24tPmJhY2tlbmQsCisJCQkgICAgICAocHRocmVhZF9tdXRleF90ICopIG11dGV4LT5iYWNrZW5kKTsKKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCisvKiBXYWtlIHVwIGFsbCB0aHJlYWRzIHdhaXRpbmcgb24gdGhpcyBjb25kaXRpb24uICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX2NvbmRpdGlvbl9icm9hZGNhc3QgKG9iamNfY29uZGl0aW9uX3QgY29uZGl0aW9uKQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KSAoKHB0aHJlYWRfY29uZF90ICopIGNvbmRpdGlvbi0+YmFja2VuZCk7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworLyogV2FrZSB1cCBvbmUgdGhyZWFkIHdhaXRpbmcgb24gdGhpcyBjb25kaXRpb24uICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX2NvbmRpdGlvbl9zaWduYWwgKG9iamNfY29uZGl0aW9uX3QgY29uZGl0aW9uKQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX2NvbmRfc2lnbmFsKSAoKHB0aHJlYWRfY29uZF90ICopIGNvbmRpdGlvbi0+YmFja2VuZCk7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworI2Vsc2UgLyogX0xJQk9CSkMgKi8KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9jcmVhdGUgKF9fZ3RocmVhZF90ICpfX3RocmVhZGlkLCB2b2lkICooKl9fZnVuYykgKHZvaWQqKSwKKwkJICB2b2lkICpfX2FyZ3MpCit7CisgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX2NyZWF0ZSkgKF9fdGhyZWFkaWQsIE5VTEwsIF9fZnVuYywgX19hcmdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9qb2luIChfX2d0aHJlYWRfdCBfX3RocmVhZGlkLCB2b2lkICoqX192YWx1ZV9wdHIpCit7CisgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX2pvaW4pIChfX3RocmVhZGlkLCBfX3ZhbHVlX3B0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfZGV0YWNoIChfX2d0aHJlYWRfdCBfX3RocmVhZGlkKQoreworICByZXR1cm4gX19ndGhyd18ocHRocmVhZF9kZXRhY2gpIChfX3RocmVhZGlkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9lcXVhbCAoX19ndGhyZWFkX3QgX190MSwgX19ndGhyZWFkX3QgX190MikKK3sKKyAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfZXF1YWwpIChfX3QxLCBfX3QyKTsKK30KKworc3RhdGljIGlubGluZSBfX2d0aHJlYWRfdAorX19ndGhyZWFkX3NlbGYgKHZvaWQpCit7CisgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX3NlbGYpICgpOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX3lpZWxkICh2b2lkKQoreworICByZXR1cm4gX19ndGhyd18oc2NoZWRfeWllbGQpICgpOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29uY2UgKF9fZ3RocmVhZF9vbmNlX3QgKl9fb25jZSwgdm9pZCAoKl9fZnVuYykgKHZvaWQpKQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX29uY2UpIChfX29uY2UsIF9fZnVuYyk7CisgIGVsc2UKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfa2V5X2NyZWF0ZSAoX19ndGhyZWFkX2tleV90ICpfX2tleSwgdm9pZCAoKl9fZHRvcikgKHZvaWQgKikpCit7CisgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX2tleV9jcmVhdGUpIChfX2tleSwgX19kdG9yKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9rZXlfZGVsZXRlIChfX2d0aHJlYWRfa2V5X3QgX19rZXkpCit7CisgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX2tleV9kZWxldGUpIChfX2tleSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitfX2d0aHJlYWRfZ2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBfX2tleSkKK3sKKyAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfZ2V0c3BlY2lmaWMpIChfX2tleSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfc2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBfX2tleSwgY29uc3Qgdm9pZCAqX19wdHIpCit7CisgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX3NldHNwZWNpZmljKSAoX19rZXksIF9fcHRyKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9tdXRleF9kZXN0cm95IChfX2d0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkKK3sKKyAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKKyAgICByZXR1cm4gX19ndGhyd18ocHRocmVhZF9tdXRleF9kZXN0cm95KSAoX19tdXRleCk7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9tdXRleF9sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkKK3sKKyAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKKyAgICByZXR1cm4gX19ndGhyd18ocHRocmVhZF9tdXRleF9sb2NrKSAoX19tdXRleCk7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9tdXRleF90cnlsb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkKK3sKKyAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKKyAgICByZXR1cm4gX19ndGhyd18ocHRocmVhZF9tdXRleF90cnlsb2NrKSAoX19tdXRleCk7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworI2lmZGVmIF9QT1NJWF9USU1FT1VUUworI2lmIF9QT1NJWF9USU1FT1VUUyA+PSAwCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX211dGV4X3RpbWVkbG9jayAoX19ndGhyZWFkX211dGV4X3QgKl9fbXV0ZXgsCisJCQkgICBjb25zdCBfX2d0aHJlYWRfdGltZV90ICpfX2Fic190aW1lb3V0KQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX211dGV4X3RpbWVkbG9jaykgKF9fbXV0ZXgsIF9fYWJzX3RpbWVvdXQpOworICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX211dGV4X3VubG9jayAoX19ndGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKSAoX19tdXRleCk7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworI2lmbmRlZiBQVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUSUFMSVpFUl9OUAorc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfaW5pdF9mdW5jdGlvbiAoX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90ICpfX211dGV4KQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHsKKyAgICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3QgX19hdHRyOworICAgICAgaW50IF9fcjsKKworICAgICAgX19yID0gX19ndGhyd18ocHRocmVhZF9tdXRleGF0dHJfaW5pdCkgKCZfX2F0dHIpOworICAgICAgaWYgKCFfX3IpCisJX19yID0gX19ndGhyd18ocHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSkgKCZfX2F0dHIsCisJCQkJCQkgICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSk7CisgICAgICBpZiAoIV9fcikKKwlfX3IgPSBfX2d0aHJ3XyhwdGhyZWFkX211dGV4X2luaXQpIChfX211dGV4LCAmX19hdHRyKTsKKyAgICAgIGlmICghX19yKQorCV9fciA9IF9fZ3RocndfKHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kpICgmX19hdHRyKTsKKyAgICAgIHJldHVybiBfX3I7CisgICAgfQorICByZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF9sb2NrIChfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3QgKl9fbXV0ZXgpCit7CisgIHJldHVybiBfX2d0aHJlYWRfbXV0ZXhfbG9jayAoX19tdXRleCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3RyeWxvY2sgKF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdCAqX19tdXRleCkKK3sKKyAgcmV0dXJuIF9fZ3RocmVhZF9tdXRleF90cnlsb2NrIChfX211dGV4KTsKK30KKworI2lmZGVmIF9QT1NJWF9USU1FT1VUUworI2lmIF9QT1NJWF9USU1FT1VUUyA+PSAwCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90aW1lZGxvY2sgKF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdCAqX19tdXRleCwKKwkJCQkgICAgIGNvbnN0IF9fZ3RocmVhZF90aW1lX3QgKl9fYWJzX3RpbWVvdXQpCit7CisgIHJldHVybiBfX2d0aHJlYWRfbXV0ZXhfdGltZWRsb2NrIChfX211dGV4LCBfX2Fic190aW1lb3V0KTsKK30KKyNlbmRpZgorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3VubG9jayAoX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90ICpfX211dGV4KQoreworICByZXR1cm4gX19ndGhyZWFkX211dGV4X3VubG9jayAoX19tdXRleCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfY29uZF9icm9hZGNhc3QgKF9fZ3RocmVhZF9jb25kX3QgKl9fY29uZCkKK3sKKyAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfY29uZF9icm9hZGNhc3QpIChfX2NvbmQpOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX2NvbmRfc2lnbmFsIChfX2d0aHJlYWRfY29uZF90ICpfX2NvbmQpCit7CisgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX2NvbmRfc2lnbmFsKSAoX19jb25kKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9jb25kX3dhaXQgKF9fZ3RocmVhZF9jb25kX3QgKl9fY29uZCwgX19ndGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpCit7CisgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX2NvbmRfd2FpdCkgKF9fY29uZCwgX19tdXRleCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfY29uZF90aW1lZHdhaXQgKF9fZ3RocmVhZF9jb25kX3QgKl9fY29uZCwgX19ndGhyZWFkX211dGV4X3QgKl9fbXV0ZXgsCisJCQkgIGNvbnN0IF9fZ3RocmVhZF90aW1lX3QgKl9fYWJzX3RpbWVvdXQpCit7CisgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX2NvbmRfdGltZWR3YWl0KSAoX19jb25kLCBfX211dGV4LCBfX2Fic190aW1lb3V0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9jb25kX3dhaXRfcmVjdXJzaXZlIChfX2d0aHJlYWRfY29uZF90ICpfX2NvbmQsCisJCQkgICAgICAgX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90ICpfX211dGV4KQoreworICByZXR1cm4gX19ndGhyZWFkX2NvbmRfd2FpdCAoX19jb25kLCBfX211dGV4KTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9jb25kX3RpbWVkd2FpdF9yZWN1cnNpdmUgKF9fZ3RocmVhZF9jb25kX3QgKl9fY29uZCwKKwkJCQkgICAgX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90ICpfX211dGV4LAorCQkJCSAgICBjb25zdCBfX2d0aHJlYWRfdGltZV90ICpfX2Fic190aW1lb3V0KQoreworICByZXR1cm4gX19ndGhyZWFkX2NvbmRfdGltZWR3YWl0IChfX2NvbmQsIF9fbXV0ZXgsIF9fYWJzX3RpbWVvdXQpOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX2NvbmRfZGVzdHJveSAoX19ndGhyZWFkX2NvbmRfdCogX19jb25kKQoreworICByZXR1cm4gX19ndGhyd18ocHRocmVhZF9jb25kX2Rlc3Ryb3kpIChfX2NvbmQpOworfQorCisjZW5kaWYgLyogX0xJQk9CSkMgKi8KKworI2VuZGlmIC8qICEgX0dMSUJDWFhfR0NDX0dUSFJfUE9TSVhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2JpdHMvZ3Roci1wb3NpeC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2JpdHMvZ3Roci1wb3NpeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNTNhOWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYml0cy9ndGhyLXBvc2l4LmgKQEAgLTAsMCArMSw4NjggQEAKKy8qIFRocmVhZHMgY29tcGF0aWJpbGl0eSByb3V0aW5lcyBmb3IgbGliZ2NjMiBhbmQgbGlib2JqYy4gICovCisvKiBDb21waWxlIHRoaXMgb25lIHdpdGggZ2NjLiAgKi8KKy8qIENvcHlyaWdodCAoQykgMTk5NywgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywKKyAgIDIwMDgsIDIwMDksIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCitwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCiszLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKK2EgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CitzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX0dMSUJDWFhfR0NDX0dUSFJfUE9TSVhfSAorI2RlZmluZSBfR0xJQkNYWF9HQ0NfR1RIUl9QT1NJWF9ICisKKy8qIFBPU0lYIHRocmVhZHMgc3BlY2lmaWMgZGVmaW5pdGlvbnMuCisgICBFYXN5LCBzaW5jZSB0aGUgaW50ZXJmYWNlIGlzIGp1c3Qgb25lLXRvLW9uZSBtYXBwaW5nLiAgKi8KKworI2RlZmluZSBfX0dUSFJFQURTIDEKKyNkZWZpbmUgX19HVEhSRUFEU19DWFgwWCAxCisKKy8qIFNvbWUgaW1wbGVtZW50YXRpb25zIG9mIDxwdGhyZWFkLmg+IHJlcXVpcmUgdGhpcyB0byBiZSBkZWZpbmVkLiAgKi8KKyNpZiAhZGVmaW5lZChfUkVFTlRSQU5UKSAmJiBkZWZpbmVkKF9fb3NmX18pCisjZGVmaW5lIF9SRUVOVFJBTlQgMQorI2VuZGlmCisKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK3R5cGVkZWYgcHRocmVhZF90IF9fZ3RocmVhZF90OwordHlwZWRlZiBwdGhyZWFkX2tleV90IF9fZ3RocmVhZF9rZXlfdDsKK3R5cGVkZWYgcHRocmVhZF9vbmNlX3QgX19ndGhyZWFkX29uY2VfdDsKK3R5cGVkZWYgcHRocmVhZF9tdXRleF90IF9fZ3RocmVhZF9tdXRleF90OwordHlwZWRlZiBwdGhyZWFkX211dGV4X3QgX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90OwordHlwZWRlZiBwdGhyZWFkX2NvbmRfdCBfX2d0aHJlYWRfY29uZF90OwordHlwZWRlZiBzdHJ1Y3QgdGltZXNwZWMgX19ndGhyZWFkX3RpbWVfdDsKKworLyogUE9TSVggbGlrZSBjb25kaXRpb25hbCB2YXJpYWJsZXMgYXJlIHN1cHBvcnRlZC4gIFBsZWFzZSBsb29rIGF0IGNvbW1lbnRzCisgICBpbiBndGhyLmggZm9yIGRldGFpbHMuICovCisjZGVmaW5lIF9fR1RIUkVBRF9IQVNfQ09ORAkxCisKKyNkZWZpbmUgX19HVEhSRUFEX01VVEVYX0lOSVQgUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUgorI2RlZmluZSBfX0dUSFJFQURfT05DRV9JTklUIFBUSFJFQURfT05DRV9JTklUCisjaWYgZGVmaW5lZChQVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUSUFMSVpFUikKKyNkZWZpbmUgX19HVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUIFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSCisjZWxpZiBkZWZpbmVkKFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSX05QKQorI2RlZmluZSBfX0dUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVQgUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVJfTlAKKyNlbHNlCisjZGVmaW5lIF9fR1RIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVF9GVU5DVElPTiBfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X2luaXRfZnVuY3Rpb24KKyNlbmRpZgorI2RlZmluZSBfX0dUSFJFQURfQ09ORF9JTklUIFBUSFJFQURfQ09ORF9JTklUSUFMSVpFUgorI2RlZmluZSBfX0dUSFJFQURfVElNRV9JTklUIHswLDB9CisKKyNpZiBfX0dYWF9XRUFLX18gJiYgX0dMSUJDWFhfR1RIUkVBRF9VU0VfV0VBSworIyBpZm5kZWYgX19ndGhyd19wcmFnbWEKKyMgIGRlZmluZSBfX2d0aHJ3X3ByYWdtYShwcmFnbWEpCisjIGVuZGlmCisjIGRlZmluZSBfX2d0aHJ3MihuYW1lLG5hbWUyLHR5cGUpIFwKKyAgc3RhdGljIF9fdHlwZW9mKHR5cGUpIG5hbWUgX19hdHRyaWJ1dGVfXyAoKF9fd2Vha3JlZl9fKCNuYW1lMikpKTsgXAorICBfX2d0aHJ3X3ByYWdtYSh3ZWFrIHR5cGUpCisjIGRlZmluZSBfX2d0aHJ3XyhuYW1lKSBfX2d0aHJ3XyAjIyBuYW1lCisjZWxzZQorIyBkZWZpbmUgX19ndGhydzIobmFtZSxuYW1lMix0eXBlKQorIyBkZWZpbmUgX19ndGhyd18obmFtZSkgbmFtZQorI2VuZGlmCisKKy8qIFR5cGljYWxseSwgX19ndGhyd19mb28gaXMgYSB3ZWFrIHJlZmVyZW5jZSB0byBzeW1ib2wgZm9vLiAgKi8KKyNkZWZpbmUgX19ndGhydyhuYW1lKSBfX2d0aHJ3MihfX2d0aHJ3XyAjIyBuYW1lLG5hbWUsbmFtZSkKKworLyogT24gVHJ1NjQsIC91c3IvaW5jbHVkZS9wdGhyZWFkLmggdXNlcyAjcHJhZ21hIGV4dGVybl9wcmVmaXggIl9fIiB0bworICAgbWFwIGEgc3Vic2V0IG9mIHRoZSBQT1NJWCBwdGhyZWFkIEFQSSB0byBtYW5nbGVkIHZlcnNpb25zIG9mIHRoZWlyCisgICBuYW1lcy4gICovCisjaWYgZGVmaW5lZChfX29zZl9fKSAmJiBkZWZpbmVkKF9QVEhSRUFEX1VTRV9NQU5HTEVEX05BTUVTXykKKyNkZWZpbmUgX19ndGhydzMobmFtZSkgX19ndGhydzIoX19ndGhyd18gIyMgbmFtZSwgX18gIyMgbmFtZSwgbmFtZSkKK19fZ3RocnczKHB0aHJlYWRfb25jZSkKK19fZ3RocnczKHB0aHJlYWRfZ2V0c3BlY2lmaWMpCitfX2d0aHJ3MyhwdGhyZWFkX3NldHNwZWNpZmljKQorCitfX2d0aHJ3MyhwdGhyZWFkX2NyZWF0ZSkKK19fZ3RocnczKHB0aHJlYWRfam9pbikKK19fZ3RocnczKHB0aHJlYWRfZGV0YWNoKQorX19ndGhydzMocHRocmVhZF9lcXVhbCkKK19fZ3RocnczKHB0aHJlYWRfc2VsZikKK19fZ3RocnczKHB0aHJlYWRfY2FuY2VsKQorX19ndGhydzMoc2NoZWRfeWllbGQpCisKK19fZ3RocnczKHB0aHJlYWRfbXV0ZXhfbG9jaykKK19fZ3RocnczKHB0aHJlYWRfbXV0ZXhfdHJ5bG9jaykKKyNpZmRlZiBfUE9TSVhfVElNRU9VVFMKKyNpZiBfUE9TSVhfVElNRU9VVFMgPj0gMAorX19ndGhydzMocHRocmVhZF9tdXRleF90aW1lZGxvY2spCisjZW5kaWYKKyNlbmRpZiAvKiBfUE9TSVhfVElNRU9VVFMgKi8KK19fZ3RocnczKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKQorX19ndGhydzMocHRocmVhZF9tdXRleF9pbml0KQorX19ndGhydzMocHRocmVhZF9tdXRleF9kZXN0cm95KQorCitfX2d0aHJ3MyhwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KQorX19ndGhydzMocHRocmVhZF9jb25kX3NpZ25hbCkKK19fZ3RocnczKHB0aHJlYWRfY29uZF93YWl0KQorX19ndGhydzMocHRocmVhZF9jb25kX3RpbWVkd2FpdCkKK19fZ3RocnczKHB0aHJlYWRfY29uZF9kZXN0cm95KQorI2Vsc2UKK19fZ3RocncocHRocmVhZF9vbmNlKQorX19ndGhydyhwdGhyZWFkX2dldHNwZWNpZmljKQorX19ndGhydyhwdGhyZWFkX3NldHNwZWNpZmljKQorCitfX2d0aHJ3KHB0aHJlYWRfY3JlYXRlKQorX19ndGhydyhwdGhyZWFkX2pvaW4pCitfX2d0aHJ3KHB0aHJlYWRfZXF1YWwpCitfX2d0aHJ3KHB0aHJlYWRfc2VsZikKK19fZ3RocncocHRocmVhZF9kZXRhY2gpCitfX2d0aHJ3KHB0aHJlYWRfY2FuY2VsKQorX19ndGhydyhzY2hlZF95aWVsZCkKKworX19ndGhydyhwdGhyZWFkX211dGV4X2xvY2spCitfX2d0aHJ3KHB0aHJlYWRfbXV0ZXhfdHJ5bG9jaykKKyNpZmRlZiBfUE9TSVhfVElNRU9VVFMKKyNpZiBfUE9TSVhfVElNRU9VVFMgPj0gMAorX19ndGhydyhwdGhyZWFkX211dGV4X3RpbWVkbG9jaykKKyNlbmRpZgorI2VuZGlmIC8qIF9QT1NJWF9USU1FT1VUUyAqLworX19ndGhydyhwdGhyZWFkX211dGV4X3VubG9jaykKK19fZ3RocncocHRocmVhZF9tdXRleF9pbml0KQorX19ndGhydyhwdGhyZWFkX211dGV4X2Rlc3Ryb3kpCisKK19fZ3RocncocHRocmVhZF9jb25kX2Jyb2FkY2FzdCkKK19fZ3RocncocHRocmVhZF9jb25kX3NpZ25hbCkKK19fZ3RocncocHRocmVhZF9jb25kX3dhaXQpCitfX2d0aHJ3KHB0aHJlYWRfY29uZF90aW1lZHdhaXQpCitfX2d0aHJ3KHB0aHJlYWRfY29uZF9kZXN0cm95KQorI2VuZGlmCisKK19fZ3RocncocHRocmVhZF9rZXlfY3JlYXRlKQorX19ndGhydyhwdGhyZWFkX2tleV9kZWxldGUpCitfX2d0aHJ3KHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQpCitfX2d0aHJ3KHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUpCitfX2d0aHJ3KHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kpCisKKworI2lmIGRlZmluZWQoX0xJQk9CSkMpIHx8IGRlZmluZWQoX0xJQk9CSkNfV0VBSykKKy8qIE9iamVjdGl2ZS1DLiAgKi8KKyNpZiBkZWZpbmVkKF9fb3NmX18pICYmIGRlZmluZWQoX1BUSFJFQURfVVNFX01BTkdMRURfTkFNRVNfKQorX19ndGhydzMocHRocmVhZF9jb25kX2luaXQpCitfX2d0aHJ3MyhwdGhyZWFkX2V4aXQpCisjZWxzZQorX19ndGhydyhwdGhyZWFkX2NvbmRfaW5pdCkKK19fZ3RocncocHRocmVhZF9leGl0KQorI2VuZGlmIC8qIF9fb3NmX18gJiYgX1BUSFJFQURfVVNFX01BTkdMRURfTkFNRVNfICovCisjaWZkZWYgX1BPU0lYX1BSSU9SSVRZX1NDSEVEVUxJTkcKKyNpZmRlZiBfUE9TSVhfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcKK19fZ3Rocncoc2NoZWRfZ2V0X3ByaW9yaXR5X21heCkKK19fZ3Rocncoc2NoZWRfZ2V0X3ByaW9yaXR5X21pbikKKyNlbmRpZiAvKiBfUE9TSVhfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcgKi8KKyNlbmRpZiAvKiBfUE9TSVhfUFJJT1JJVFlfU0NIRURVTElORyAqLworX19ndGhydyhwdGhyZWFkX2F0dHJfZGVzdHJveSkKK19fZ3RocncocHRocmVhZF9hdHRyX2luaXQpCitfX2d0aHJ3KHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSkKKyNpZmRlZiBfUE9TSVhfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcKK19fZ3RocncocHRocmVhZF9nZXRzY2hlZHBhcmFtKQorX19ndGhydyhwdGhyZWFkX3NldHNjaGVkcGFyYW0pCisjZW5kaWYgLyogX1BPU0lYX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HICovCisjZW5kaWYgLyogX0xJQk9CSkMgfHwgX0xJQk9CSkNfV0VBSyAqLworCisjaWYgX19HWFhfV0VBS19fICYmIF9HTElCQ1hYX0dUSFJFQURfVVNFX1dFQUsKKworLyogT24gU29sYXJpcyAyLjYgdXAgdG8gOSwgdGhlIGxpYmMgZXhwb3NlcyBhIFBPU0lYIHRocmVhZHMgaW50ZXJmYWNlIGV2ZW4gaWYKKyAgIC1wdGhyZWFkcyBpcyBub3Qgc3BlY2lmaWVkLiAgVGhlIGZ1bmN0aW9ucyBhcmUgZHVtbWllcyBhbmQgbW9zdCByZXR1cm4gYW4KKyAgIGVycm9yIHZhbHVlLiAgSG93ZXZlciBwdGhyZWFkX29uY2UgcmV0dXJucyAwIHdpdGhvdXQgaW52b2tpbmcgdGhlIHJvdXRpbmUKKyAgIGl0IGlzIHBhc3NlZCBzbyB3ZSBjYW5ub3QgcHJldGVuZCB0aGF0IHRoZSBpbnRlcmZhY2UgaXMgYWN0aXZlIGlmIC1wdGhyZWFkcworICAgaXMgbm90IHNwZWNpZmllZC4gIE9uIFNvbGFyaXMgMi41LjEsIHRoZSBpbnRlcmZhY2UgaXMgbm90IGV4cG9zZWQgYXQgYWxsIHNvCisgICB3ZSBuZWVkIHRvIHBsYXkgdGhlIHVzdWFsIGdhbWUgd2l0aCB3ZWFrIHN5bWJvbHMuICBPbiBTb2xhcmlzIDEwIGFuZCB1cCwgYQorICAgd29ya2luZyBpbnRlcmZhY2UgaXMgYWx3YXlzIGV4cG9zZWQuICBPbiBGcmVlQlNEIDYgYW5kIGxhdGVyLCBsaWJjIGFsc28KKyAgIGV4cG9zZXMgYSBkdW1teSBQT1NJWCB0aHJlYWRzIGludGVyZmFjZSwgc2ltaWxhciB0byB3aGF0IFNvbGFyaXMgMi42IHVwCisgICB0byA5IGRvZXMuICBGcmVlQlNEID49IDcwMDAxNCBldmVuIHByb3ZpZGVzIGEgcHRocmVhZF9jYW5jZWwgc3R1YiBpbiBsaWJjLAorICAgd2hpY2ggbWVhbnMgdGhlIGFsdGVybmF0ZSBfX2d0aHJlYWRfYWN0aXZlX3AgYmVsb3cgY2Fubm90IGJlIHVzZWQgdGhlcmUuICAqLworCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgKGRlZmluZWQoX19zdW4pICYmIGRlZmluZWQoX19zdnI0X18pKQorCitzdGF0aWMgdm9sYXRpbGUgaW50IF9fZ3RocmVhZF9hY3RpdmUgPSAtMTsKKworc3RhdGljIHZvaWQKK19fZ3RocmVhZF90cmlnZ2VyICh2b2lkKQoreworICBfX2d0aHJlYWRfYWN0aXZlID0gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9hY3RpdmVfcCAodm9pZCkKK3sKKyAgc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBfX2d0aHJlYWRfYWN0aXZlX211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKyAgc3RhdGljIHB0aHJlYWRfb25jZV90IF9fZ3RocmVhZF9hY3RpdmVfb25jZSA9IFBUSFJFQURfT05DRV9JTklUOworCisgIC8qIEF2b2lkIHJlYWRpbmcgX19ndGhyZWFkX2FjdGl2ZSB0d2ljZSBvbiB0aGUgbWFpbiBjb2RlIHBhdGguICAqLworICBpbnQgX19ndGhyZWFkX2FjdGl2ZV9sYXRlc3RfdmFsdWUgPSBfX2d0aHJlYWRfYWN0aXZlOworCisgIC8qIFRoaXMgdGVzdCBpcyBub3QgcHJvdGVjdGVkIHRvIGF2b2lkIHRha2luZyBhIGxvY2sgb24gdGhlIG1haW4gY29kZQorICAgICBwYXRoIHNvIGV2ZXJ5IHVwZGF0ZSBvZiBfX2d0aHJlYWRfYWN0aXZlIGluIGEgdGhyZWFkZWQgcHJvZ3JhbSBtdXN0CisgICAgIGJlIGF0b21pYyB3aXRoIHJlZ2FyZCB0byB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0LiAgKi8KKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKF9fZ3RocmVhZF9hY3RpdmVfbGF0ZXN0X3ZhbHVlIDwgMCwgMCkpCisgICAgeworICAgICAgaWYgKF9fZ3RocndfKHB0aHJlYWRfb25jZSkpCisJeworCSAgLyogSWYgdGhpcyByZWFsbHkgaXMgYSB0aHJlYWRlZCBwcm9ncmFtLCB0aGVuIHdlIG11c3QgZW5zdXJlIHRoYXQKKwkgICAgIF9fZ3RocmVhZF9hY3RpdmUgaGFzIGJlZW4gc2V0IHRvIDEgYmVmb3JlIGV4aXRpbmcgdGhpcyBibG9jay4gICovCisJICBfX2d0aHJ3XyhwdGhyZWFkX211dGV4X2xvY2spICgmX19ndGhyZWFkX2FjdGl2ZV9tdXRleCk7CisJICBfX2d0aHJ3XyhwdGhyZWFkX29uY2UpICgmX19ndGhyZWFkX2FjdGl2ZV9vbmNlLCBfX2d0aHJlYWRfdHJpZ2dlcik7CisJICBfX2d0aHJ3XyhwdGhyZWFkX211dGV4X3VubG9jaykgKCZfX2d0aHJlYWRfYWN0aXZlX211dGV4KTsKKwl9CisKKyAgICAgIC8qIE1ha2Ugc3VyZSB3ZSdsbCBuZXZlciBlbnRlciB0aGlzIGJsb2NrIGFnYWluLiAgKi8KKyAgICAgIGlmIChfX2d0aHJlYWRfYWN0aXZlIDwgMCkKKwlfX2d0aHJlYWRfYWN0aXZlID0gMDsKKworICAgICAgX19ndGhyZWFkX2FjdGl2ZV9sYXRlc3RfdmFsdWUgPSBfX2d0aHJlYWRfYWN0aXZlOworICAgIH0KKworICByZXR1cm4gX19ndGhyZWFkX2FjdGl2ZV9sYXRlc3RfdmFsdWUgIT0gMDsKK30KKworI2Vsc2UgLyogbmVpdGhlciBGcmVlQlNEIG5vciBTb2xhcmlzICovCisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfYWN0aXZlX3AgKHZvaWQpCit7CisgIHN0YXRpYyB2b2lkICpjb25zdCBfX2d0aHJlYWRfYWN0aXZlX3B0cgorICAgID0gX19leHRlbnNpb25fXyAodm9pZCAqKSAmX19ndGhyd18ocHRocmVhZF9jYW5jZWwpOworICByZXR1cm4gX19ndGhyZWFkX2FjdGl2ZV9wdHIgIT0gMDsKK30KKworI2VuZGlmIC8qIEZyZWVCU0Qgb3IgU29sYXJpcyAqLworCisjZWxzZSAvKiBub3QgX19HWFhfV0VBS19fICovCisKKy8qIFNpbWlsYXIgdG8gU29sYXJpcywgSFAtVVggMTEgZm9yIFBBLVJJU0MgcHJvdmlkZXMgc3R1YnMgZm9yIHB0aHJlYWQKKyAgIGNhbGxzIGluIHNoYXJlZCBmbGF2b3JzIG9mIHRoZSBIUC1VWCBDIGxpYnJhcnkuICBNb3N0IG9mIHRoZSBzdHVicworICAgaGF2ZSBubyBmdW5jdGlvbmFsaXR5LiAgVGhlIGRldGFpbHMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgImxpYmMgY3VtdWxhdGl2ZQorICAgcGF0Y2giIGZvciBlYWNoIHN1YnZlcnNpb24gb2YgSFAtVVggMTEuICBUaGVyZSBhcmUgdHdvIHNwZWNpYWwgaW50ZXJmYWNlcworICAgcHJvdmlkZWQgZm9yIGNoZWNraW5nIHdoZXRoZXIgYW4gYXBwbGljYXRpb24gaXMgbGlua2VkIHRvIGEgc2hhcmVkIHB0aHJlYWQKKyAgIGxpYnJhcnkgb3Igbm90LiAgSG93ZXZlciwgdGhlc2UgaW50ZXJmYWNlcyBhcmVuJ3QgYXZhaWxhYmxlIGluIGVhcmx5CisgICBsaWJwdGhyZWFkIGxpYnJhcmllcy4gIFdlIGFsc28gbmVlZCBhIHRlc3QgdGhhdCB3b3JrcyBmb3IgYXJjaGl2ZQorICAgbGlicmFyaWVzLiAgV2UgY2FuJ3QgdXNlIHB0aHJlYWRfb25jZSBhcyBzb21lIGxpYmMgdmVyc2lvbnMgY2FsbCB0aGUKKyAgIGluaXQgZnVuY3Rpb24uICBXZSBhbHNvIGNhbid0IHVzZSBwdGhyZWFkX2NyZWF0ZSBvciBwdGhyZWFkX2F0dHJfaW5pdAorICAgYXMgdGhlc2UgY3JlYXRlIGEgdGhyZWFkIGFuZCB0aGVyZWJ5IHByZXZlbnQgY2hhbmdpbmcgdGhlIGRlZmF1bHQgc3RhY2sKKyAgIHNpemUuICBUaGUgZnVuY3Rpb24gcHRocmVhZF9kZWZhdWx0X3N0YWNrc2l6ZV9ucCBpcyBhdmFpbGFibGUgaW4gYm90aAorICAgdGhlIGFyY2hpdmUgYW5kIHNoYXJlZCB2ZXJzaW9ucyBvZiBsaWJwdGhyZWFkLiAgIEl0IGNhbiBiZSB1c2VkIHRvCisgICBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgcHRocmVhZCBzdGFjayBzaXplLiAgVGhlcmUgaXMgYSBzdHViIGluIHNvbWUKKyAgIHNoYXJlZCBsaWJjIHZlcnNpb25zIHdoaWNoIHJldHVybnMgYSB6ZXJvIHNpemUgaWYgcHRocmVhZHMgYXJlIG5vdAorICAgYWN0aXZlLiAgV2UgcHJvdmlkZSBhbiBlcXVpdmFsZW50IHN0dWIgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIGxpYmMKKyAgIGRvZXNuJ3QgcHJvdmlkZSBvbmUuICAqLworCisjaWYgZGVmaW5lZChfX2hwcGFfXykgJiYgZGVmaW5lZChfX2hwdXhfXykKKworc3RhdGljIHZvbGF0aWxlIGludCBfX2d0aHJlYWRfYWN0aXZlID0gLTE7CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfYWN0aXZlX3AgKHZvaWQpCit7CisgIC8qIEF2b2lkIHJlYWRpbmcgX19ndGhyZWFkX2FjdGl2ZSB0d2ljZSBvbiB0aGUgbWFpbiBjb2RlIHBhdGguICAqLworICBpbnQgX19ndGhyZWFkX2FjdGl2ZV9sYXRlc3RfdmFsdWUgPSBfX2d0aHJlYWRfYWN0aXZlOworICBzaXplX3QgX19zOworCisgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX2d0aHJlYWRfYWN0aXZlX2xhdGVzdF92YWx1ZSA8IDAsIDApKQorICAgIHsKKyAgICAgIHB0aHJlYWRfZGVmYXVsdF9zdGFja3NpemVfbnAgKDAsICZfX3MpOworICAgICAgX19ndGhyZWFkX2FjdGl2ZSA9IF9fcyA/IDEgOiAwOworICAgICAgX19ndGhyZWFkX2FjdGl2ZV9sYXRlc3RfdmFsdWUgPSBfX2d0aHJlYWRfYWN0aXZlOworICAgIH0KKworICByZXR1cm4gX19ndGhyZWFkX2FjdGl2ZV9sYXRlc3RfdmFsdWUgIT0gMDsKK30KKworI2Vsc2UgLyogbm90IGhwcGEtaHB1eCAqLworCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX2FjdGl2ZV9wICh2b2lkKQoreworICByZXR1cm4gMTsKK30KKworI2VuZGlmIC8qIGhwcGEtaHB1eCAqLworCisjZW5kaWYgLyogX19HWFhfV0VBS19fICovCisKKyNpZmRlZiBfTElCT0JKQworCisvKiBUaGlzIGlzIHRoZSBjb25maWcuaCBmaWxlIGluIGxpYm9iamMvICovCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpZmRlZiBIQVZFX1NDSEVEX0gKKyMgaW5jbHVkZSA8c2NoZWQuaD4KKyNlbmRpZgorCisvKiBLZXkgc3RydWN0dXJlIGZvciBtYWludGFpbmluZyB0aHJlYWQgc3BlY2lmaWMgc3RvcmFnZSAqLworc3RhdGljIHB0aHJlYWRfa2V5X3QgX29iamNfdGhyZWFkX3N0b3JhZ2U7CitzdGF0aWMgcHRocmVhZF9hdHRyX3QgX29iamNfdGhyZWFkX2F0dHJpYnM7CisKKy8qIFRocmVhZCBsb2NhbCBzdG9yYWdlIGZvciBhIHNpbmdsZSB0aHJlYWQgKi8KK3N0YXRpYyB2b2lkICp0aHJlYWRfbG9jYWxfc3RvcmFnZSA9IE5VTEw7CisKKy8qIEJhY2tlbmQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICovCisKKy8qIEluaXRpYWxpemUgdGhlIHRocmVhZHMgc3Vic3lzdGVtLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY19pbml0X3RocmVhZF9zeXN0ZW0gKHZvaWQpCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgeworICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgdGhyZWFkIHN0b3JhZ2Uga2V5LiAgKi8KKyAgICAgIGlmIChfX2d0aHJ3XyhwdGhyZWFkX2tleV9jcmVhdGUpICgmX29iamNfdGhyZWFkX3N0b3JhZ2UsIE5VTEwpID09IDApCisJeworCSAgLyogVGhlIG5vcm1hbCBkZWZhdWx0IGRldGFjaCBzdGF0ZSBmb3IgdGhyZWFkcyBpcworCSAgICogUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUgd2hpY2ggY2F1c2VzIHRocmVhZHMgdG8gbm90IGRpZQorCSAgICogd2hlbiB5b3UgdGhpbmsgdGhleSBzaG91bGQuICAqLworCSAgaWYgKF9fZ3RocndfKHB0aHJlYWRfYXR0cl9pbml0KSAoJl9vYmpjX3RocmVhZF9hdHRyaWJzKSA9PSAwCisJICAgICAgJiYgX19ndGhyd18ocHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKSAoJl9vYmpjX3RocmVhZF9hdHRyaWJzLAorCQkJCQkgICAgICBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRCkgPT0gMCkKKwkgICAgcmV0dXJuIDA7CisJfQorICAgIH0KKworICByZXR1cm4gLTE7Cit9CisKKy8qIENsb3NlIHRoZSB0aHJlYWRzIHN1YnN5c3RlbS4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfY2xvc2VfdGhyZWFkX3N5c3RlbSAodm9pZCkKK3sKKyAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKQorICAgICAgJiYgX19ndGhyd18ocHRocmVhZF9rZXlfZGVsZXRlKSAoX29iamNfdGhyZWFkX3N0b3JhZ2UpID09IDAKKyAgICAgICYmIF9fZ3RocndfKHB0aHJlYWRfYXR0cl9kZXN0cm95KSAoJl9vYmpjX3RocmVhZF9hdHRyaWJzKSA9PSAwKQorICAgIHJldHVybiAwOworCisgIHJldHVybiAtMTsKK30KKworLyogQmFja2VuZCB0aHJlYWQgZnVuY3Rpb25zICovCisKKy8qIENyZWF0ZSBhIG5ldyB0aHJlYWQgb2YgZXhlY3V0aW9uLiAgKi8KK3N0YXRpYyBpbmxpbmUgb2JqY190aHJlYWRfdAorX19ndGhyZWFkX29iamNfdGhyZWFkX2RldGFjaCAodm9pZCAoKmZ1bmMpKHZvaWQgKiksIHZvaWQgKmFyZykKK3sKKyAgb2JqY190aHJlYWRfdCB0aHJlYWRfaWQ7CisgIHB0aHJlYWRfdCBuZXdfdGhyZWFkX2hhbmRsZTsKKworICBpZiAoIV9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKKyAgICByZXR1cm4gTlVMTDsKKworICBpZiAoIShfX2d0aHJ3XyhwdGhyZWFkX2NyZWF0ZSkgKCZuZXdfdGhyZWFkX2hhbmRsZSwgTlVMTCwgKHZvaWQgKikgZnVuYywgYXJnKSkpCisgICAgdGhyZWFkX2lkID0gKG9iamNfdGhyZWFkX3QpIG5ld190aHJlYWRfaGFuZGxlOworICBlbHNlCisgICAgdGhyZWFkX2lkID0gTlVMTDsKKworICByZXR1cm4gdGhyZWFkX2lkOworfQorCisvKiBTZXQgdGhlIGN1cnJlbnQgdGhyZWFkJ3MgcHJpb3JpdHkuICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX3RocmVhZF9zZXRfcHJpb3JpdHkgKGludCBwcmlvcml0eSkKK3sKKyAgaWYgKCFfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgcmV0dXJuIC0xOworICBlbHNlCisgICAgeworI2lmZGVmIF9QT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HCisjaWZkZWYgX1BPU0lYX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HCisgICAgICBwdGhyZWFkX3QgdGhyZWFkX2lkID0gX19ndGhyd18ocHRocmVhZF9zZWxmKSAoKTsKKyAgICAgIGludCBwb2xpY3k7CisgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW1zOworICAgICAgaW50IHByaW9yaXR5X21pbiwgcHJpb3JpdHlfbWF4OworCisgICAgICBpZiAoX19ndGhyd18ocHRocmVhZF9nZXRzY2hlZHBhcmFtKSAodGhyZWFkX2lkLCAmcG9saWN5LCAmcGFyYW1zKSA9PSAwKQorCXsKKwkgIGlmICgocHJpb3JpdHlfbWF4ID0gX19ndGhyd18oc2NoZWRfZ2V0X3ByaW9yaXR5X21heCkgKHBvbGljeSkpID09IC0xKQorCSAgICByZXR1cm4gLTE7CisKKwkgIGlmICgocHJpb3JpdHlfbWluID0gX19ndGhyd18oc2NoZWRfZ2V0X3ByaW9yaXR5X21pbikgKHBvbGljeSkpID09IC0xKQorCSAgICByZXR1cm4gLTE7CisKKwkgIGlmIChwcmlvcml0eSA+IHByaW9yaXR5X21heCkKKwkgICAgcHJpb3JpdHkgPSBwcmlvcml0eV9tYXg7CisJICBlbHNlIGlmIChwcmlvcml0eSA8IHByaW9yaXR5X21pbikKKwkgICAgcHJpb3JpdHkgPSBwcmlvcml0eV9taW47CisJICBwYXJhbXMuc2NoZWRfcHJpb3JpdHkgPSBwcmlvcml0eTsKKworCSAgLyoKKwkgICAqIFRoZSBzb2xhcmlzIDcgYW5kIHNldmVyYWwgb3RoZXIgbWFuIHBhZ2VzIGluY29ycmVjdGx5IHN0YXRlIHRoYXQKKwkgICAqIHRoaXMgc2hvdWxkIGJlIGEgcG9pbnRlciB0byBwb2xpY3kgYnV0IHB0aHJlYWQuaCBpcyB1bml2ZXJzYWxseQorCSAgICogYXQgb2RkcyB3aXRoIHRoaXMuCisJICAgKi8KKwkgIGlmIChfX2d0aHJ3XyhwdGhyZWFkX3NldHNjaGVkcGFyYW0pICh0aHJlYWRfaWQsIHBvbGljeSwgJnBhcmFtcykgPT0gMCkKKwkgICAgcmV0dXJuIDA7CisJfQorI2VuZGlmIC8qIF9QT1NJWF9USFJFQURfUFJJT1JJVFlfU0NIRURVTElORyAqLworI2VuZGlmIC8qIF9QT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HICovCisgICAgICByZXR1cm4gLTE7CisgICAgfQorfQorCisvKiBSZXR1cm4gdGhlIGN1cnJlbnQgdGhyZWFkJ3MgcHJpb3JpdHkuICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX3RocmVhZF9nZXRfcHJpb3JpdHkgKHZvaWQpCit7CisjaWZkZWYgX1BPU0lYX1BSSU9SSVRZX1NDSEVEVUxJTkcKKyNpZmRlZiBfUE9TSVhfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcKKyAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKKyAgICB7CisgICAgICBpbnQgcG9saWN5OworICAgICAgc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtczsKKworICAgICAgaWYgKF9fZ3RocndfKHB0aHJlYWRfZ2V0c2NoZWRwYXJhbSkgKF9fZ3RocndfKHB0aHJlYWRfc2VsZikgKCksICZwb2xpY3ksICZwYXJhbXMpID09IDApCisJcmV0dXJuIHBhcmFtcy5zY2hlZF9wcmlvcml0eTsKKyAgICAgIGVsc2UKKwlyZXR1cm4gLTE7CisgICAgfQorICBlbHNlCisjZW5kaWYgLyogX1BPU0lYX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HICovCisjZW5kaWYgLyogX1BPU0lYX1BSSU9SSVRZX1NDSEVEVUxJTkcgKi8KKyAgICByZXR1cm4gT0JKQ19USFJFQURfSU5URVJBQ1RJVkVfUFJJT1JJVFk7Cit9CisKKy8qIFlpZWxkIG91ciBwcm9jZXNzIHRpbWUgdG8gYW5vdGhlciB0aHJlYWQuICAqLworc3RhdGljIGlubGluZSB2b2lkCitfX2d0aHJlYWRfb2JqY190aHJlYWRfeWllbGQgKHZvaWQpCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgX19ndGhyd18oc2NoZWRfeWllbGQpICgpOworfQorCisvKiBUZXJtaW5hdGUgdGhlIGN1cnJlbnQgdGhyZWFkLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY190aHJlYWRfZXhpdCAodm9pZCkKK3sKKyAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKKyAgICAvKiBleGl0IHRoZSB0aHJlYWQgKi8KKyAgICBfX2d0aHJ3XyhwdGhyZWFkX2V4aXQpICgmX19vYmpjX3RocmVhZF9leGl0X3N0YXR1cyk7CisKKyAgLyogRmFpbGVkIGlmIHdlIHJlYWNoZWQgaGVyZSAqLworICByZXR1cm4gLTE7Cit9CisKKy8qIFJldHVybnMgYW4gaW50ZWdlciB2YWx1ZSB3aGljaCB1bmlxdWVseSBkZXNjcmliZXMgYSB0aHJlYWQuICAqLworc3RhdGljIGlubGluZSBvYmpjX3RocmVhZF90CitfX2d0aHJlYWRfb2JqY190aHJlYWRfaWQgKHZvaWQpCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgcmV0dXJuIChvYmpjX3RocmVhZF90KSBfX2d0aHJ3XyhwdGhyZWFkX3NlbGYpICgpOworICBlbHNlCisgICAgcmV0dXJuIChvYmpjX3RocmVhZF90KSAxOworfQorCisvKiBTZXRzIHRoZSB0aHJlYWQncyBsb2NhbCBzdG9yYWdlIHBvaW50ZXIuICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX3RocmVhZF9zZXRfZGF0YSAodm9pZCAqdmFsdWUpCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfc2V0c3BlY2lmaWMpIChfb2JqY190aHJlYWRfc3RvcmFnZSwgdmFsdWUpOworICBlbHNlCisgICAgeworICAgICAgdGhyZWFkX2xvY2FsX3N0b3JhZ2UgPSB2YWx1ZTsKKyAgICAgIHJldHVybiAwOworICAgIH0KK30KKworLyogUmV0dXJucyB0aGUgdGhyZWFkJ3MgbG9jYWwgc3RvcmFnZSBwb2ludGVyLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitfX2d0aHJlYWRfb2JqY190aHJlYWRfZ2V0X2RhdGEgKHZvaWQpCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfZ2V0c3BlY2lmaWMpIChfb2JqY190aHJlYWRfc3RvcmFnZSk7CisgIGVsc2UKKyAgICByZXR1cm4gdGhyZWFkX2xvY2FsX3N0b3JhZ2U7Cit9CisKKy8qIEJhY2tlbmQgbXV0ZXggZnVuY3Rpb25zICovCisKKy8qIEFsbG9jYXRlIGEgbXV0ZXguICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX211dGV4X2FsbG9jYXRlIChvYmpjX211dGV4X3QgbXV0ZXgpCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgeworICAgICAgbXV0ZXgtPmJhY2tlbmQgPSBvYmpjX21hbGxvYyAoc2l6ZW9mIChwdGhyZWFkX211dGV4X3QpKTsKKworICAgICAgaWYgKF9fZ3RocndfKHB0aHJlYWRfbXV0ZXhfaW5pdCkgKChwdGhyZWFkX211dGV4X3QgKikgbXV0ZXgtPmJhY2tlbmQsIE5VTEwpKQorCXsKKwkgIG9iamNfZnJlZSAobXV0ZXgtPmJhY2tlbmQpOworCSAgbXV0ZXgtPmJhY2tlbmQgPSBOVUxMOworCSAgcmV0dXJuIC0xOworCX0KKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIERlYWxsb2NhdGUgYSBtdXRleC4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfbXV0ZXhfZGVhbGxvY2F0ZSAob2JqY19tdXRleF90IG11dGV4KQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHsKKyAgICAgIGludCBjb3VudDsKKworICAgICAgLyoKKyAgICAgICAqIFBvc2l4IFRocmVhZHMgc3BlY2lmaWNhbGx5IHJlcXVpcmUgdGhhdCB0aGUgdGhyZWFkIGJlIHVubG9ja2VkCisgICAgICAgKiBmb3IgX19ndGhyd18ocHRocmVhZF9tdXRleF9kZXN0cm95KSB0byB3b3JrLgorICAgICAgICovCisKKyAgICAgIGRvCisJeworCSAgY291bnQgPSBfX2d0aHJ3XyhwdGhyZWFkX211dGV4X3VubG9jaykgKChwdGhyZWFkX211dGV4X3QgKikgbXV0ZXgtPmJhY2tlbmQpOworCSAgaWYgKGNvdW50IDwgMCkKKwkgICAgcmV0dXJuIC0xOworCX0KKyAgICAgIHdoaWxlIChjb3VudCk7CisKKyAgICAgIGlmIChfX2d0aHJ3XyhwdGhyZWFkX211dGV4X2Rlc3Ryb3kpICgocHRocmVhZF9tdXRleF90ICopIG11dGV4LT5iYWNrZW5kKSkKKwlyZXR1cm4gLTE7CisKKyAgICAgIG9iamNfZnJlZSAobXV0ZXgtPmJhY2tlbmQpOworICAgICAgbXV0ZXgtPmJhY2tlbmQgPSBOVUxMOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIEdyYWIgYSBsb2NrIG9uIGEgbXV0ZXguICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX211dGV4X2xvY2sgKG9iamNfbXV0ZXhfdCBtdXRleCkKK3sKKyAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKQorICAgICAgJiYgX19ndGhyd18ocHRocmVhZF9tdXRleF9sb2NrKSAoKHB0aHJlYWRfbXV0ZXhfdCAqKSBtdXRleC0+YmFja2VuZCkgIT0gMCkKKyAgICB7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIHJldHVybiAwOworfQorCisvKiBUcnkgdG8gZ3JhYiBhIGxvY2sgb24gYSBtdXRleC4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfbXV0ZXhfdHJ5bG9jayAob2JqY19tdXRleF90IG11dGV4KQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpCisgICAgICAmJiBfX2d0aHJ3XyhwdGhyZWFkX211dGV4X3RyeWxvY2spICgocHRocmVhZF9tdXRleF90ICopIG11dGV4LT5iYWNrZW5kKSAhPSAwKQorICAgIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIFVubG9jayB0aGUgbXV0ZXggKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY19tdXRleF91bmxvY2sgKG9iamNfbXV0ZXhfdCBtdXRleCkKK3sKKyAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKQorICAgICAgJiYgX19ndGhyd18ocHRocmVhZF9tdXRleF91bmxvY2spICgocHRocmVhZF9tdXRleF90ICopIG11dGV4LT5iYWNrZW5kKSAhPSAwKQorICAgIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIEJhY2tlbmQgY29uZGl0aW9uIG11dGV4IGZ1bmN0aW9ucyAqLworCisvKiBBbGxvY2F0ZSBhIGNvbmRpdGlvbi4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfY29uZGl0aW9uX2FsbG9jYXRlIChvYmpjX2NvbmRpdGlvbl90IGNvbmRpdGlvbikKK3sKKyAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKKyAgICB7CisgICAgICBjb25kaXRpb24tPmJhY2tlbmQgPSBvYmpjX21hbGxvYyAoc2l6ZW9mIChwdGhyZWFkX2NvbmRfdCkpOworCisgICAgICBpZiAoX19ndGhyd18ocHRocmVhZF9jb25kX2luaXQpICgocHRocmVhZF9jb25kX3QgKikgY29uZGl0aW9uLT5iYWNrZW5kLCBOVUxMKSkKKwl7CisJICBvYmpjX2ZyZWUgKGNvbmRpdGlvbi0+YmFja2VuZCk7CisJICBjb25kaXRpb24tPmJhY2tlbmQgPSBOVUxMOworCSAgcmV0dXJuIC0xOworCX0KKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIERlYWxsb2NhdGUgYSBjb25kaXRpb24uICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX2NvbmRpdGlvbl9kZWFsbG9jYXRlIChvYmpjX2NvbmRpdGlvbl90IGNvbmRpdGlvbikKK3sKKyAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKKyAgICB7CisgICAgICBpZiAoX19ndGhyd18ocHRocmVhZF9jb25kX2Rlc3Ryb3kpICgocHRocmVhZF9jb25kX3QgKikgY29uZGl0aW9uLT5iYWNrZW5kKSkKKwlyZXR1cm4gLTE7CisKKyAgICAgIG9iamNfZnJlZSAoY29uZGl0aW9uLT5iYWNrZW5kKTsKKyAgICAgIGNvbmRpdGlvbi0+YmFja2VuZCA9IE5VTEw7CisgICAgfQorICByZXR1cm4gMDsKK30KKworLyogV2FpdCBvbiB0aGUgY29uZGl0aW9uICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfY29uZGl0aW9uX3dhaXQgKG9iamNfY29uZGl0aW9uX3QgY29uZGl0aW9uLCBvYmpjX211dGV4X3QgbXV0ZXgpCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfY29uZF93YWl0KSAoKHB0aHJlYWRfY29uZF90ICopIGNvbmRpdGlvbi0+YmFja2VuZCwKKwkJCSAgICAgIChwdGhyZWFkX211dGV4X3QgKikgbXV0ZXgtPmJhY2tlbmQpOworICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKKy8qIFdha2UgdXAgYWxsIHRocmVhZHMgd2FpdGluZyBvbiB0aGlzIGNvbmRpdGlvbi4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfY29uZGl0aW9uX2Jyb2FkY2FzdCAob2JqY19jb25kaXRpb25fdCBjb25kaXRpb24pCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfY29uZF9icm9hZGNhc3QpICgocHRocmVhZF9jb25kX3QgKikgY29uZGl0aW9uLT5iYWNrZW5kKTsKKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCisvKiBXYWtlIHVwIG9uZSB0aHJlYWQgd2FpdGluZyBvbiB0aGlzIGNvbmRpdGlvbi4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfY29uZGl0aW9uX3NpZ25hbCAob2JqY19jb25kaXRpb25fdCBjb25kaXRpb24pCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfY29uZF9zaWduYWwpICgocHRocmVhZF9jb25kX3QgKikgY29uZGl0aW9uLT5iYWNrZW5kKTsKKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCisjZWxzZSAvKiBfTElCT0JKQyAqLworCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX2NyZWF0ZSAoX19ndGhyZWFkX3QgKl9fdGhyZWFkaWQsIHZvaWQgKigqX19mdW5jKSAodm9pZCopLAorCQkgIHZvaWQgKl9fYXJncykKK3sKKyAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfY3JlYXRlKSAoX190aHJlYWRpZCwgTlVMTCwgX19mdW5jLCBfX2FyZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX2pvaW4gKF9fZ3RocmVhZF90IF9fdGhyZWFkaWQsIHZvaWQgKipfX3ZhbHVlX3B0cikKK3sKKyAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfam9pbikgKF9fdGhyZWFkaWQsIF9fdmFsdWVfcHRyKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9kZXRhY2ggKF9fZ3RocmVhZF90IF9fdGhyZWFkaWQpCit7CisgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX2RldGFjaCkgKF9fdGhyZWFkaWQpOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX2VxdWFsIChfX2d0aHJlYWRfdCBfX3QxLCBfX2d0aHJlYWRfdCBfX3QyKQoreworICByZXR1cm4gX19ndGhyd18ocHRocmVhZF9lcXVhbCkgKF9fdDEsIF9fdDIpOworfQorCitzdGF0aWMgaW5saW5lIF9fZ3RocmVhZF90CitfX2d0aHJlYWRfc2VsZiAodm9pZCkKK3sKKyAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfc2VsZikgKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfeWllbGQgKHZvaWQpCit7CisgIHJldHVybiBfX2d0aHJ3XyhzY2hlZF95aWVsZCkgKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb25jZSAoX19ndGhyZWFkX29uY2VfdCAqX19vbmNlLCB2b2lkICgqX19mdW5jKSAodm9pZCkpCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfb25jZSkgKF9fb25jZSwgX19mdW5jKTsKKyAgZWxzZQorICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9rZXlfY3JlYXRlIChfX2d0aHJlYWRfa2V5X3QgKl9fa2V5LCB2b2lkICgqX19kdG9yKSAodm9pZCAqKSkKK3sKKyAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfa2V5X2NyZWF0ZSkgKF9fa2V5LCBfX2R0b3IpOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX2tleV9kZWxldGUgKF9fZ3RocmVhZF9rZXlfdCBfX2tleSkKK3sKKyAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfa2V5X2RlbGV0ZSkgKF9fa2V5KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICoKK19fZ3RocmVhZF9nZXRzcGVjaWZpYyAoX19ndGhyZWFkX2tleV90IF9fa2V5KQoreworICByZXR1cm4gX19ndGhyd18ocHRocmVhZF9nZXRzcGVjaWZpYykgKF9fa2V5KTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9zZXRzcGVjaWZpYyAoX19ndGhyZWFkX2tleV90IF9fa2V5LCBjb25zdCB2b2lkICpfX3B0cikKK3sKKyAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfc2V0c3BlY2lmaWMpIChfX2tleSwgX19wdHIpOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX211dGV4X2Rlc3Ryb3kgKF9fZ3RocmVhZF9tdXRleF90ICpfX211dGV4KQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX211dGV4X2Rlc3Ryb3kpIChfX211dGV4KTsKKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX211dGV4X2xvY2sgKF9fZ3RocmVhZF9tdXRleF90ICpfX211dGV4KQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX211dGV4X2xvY2spIChfX211dGV4KTsKKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX211dGV4X3RyeWxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICpfX211dGV4KQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX211dGV4X3RyeWxvY2spIChfX211dGV4KTsKKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCisjaWZkZWYgX1BPU0lYX1RJTUVPVVRTCisjaWYgX1BPU0lYX1RJTUVPVVRTID49IDAKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfbXV0ZXhfdGltZWRsb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCwKKwkJCSAgIGNvbnN0IF9fZ3RocmVhZF90aW1lX3QgKl9fYWJzX3RpbWVvdXQpCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfbXV0ZXhfdGltZWRsb2NrKSAoX19tdXRleCwgX19hYnNfdGltZW91dCk7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkKK3sKKyAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKKyAgICByZXR1cm4gX19ndGhyd18ocHRocmVhZF9tdXRleF91bmxvY2spIChfX211dGV4KTsKKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCisjaWZuZGVmIFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSX05QCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF9pbml0X2Z1bmN0aW9uIChfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3QgKl9fbXV0ZXgpCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgeworICAgICAgcHRocmVhZF9tdXRleGF0dHJfdCBfX2F0dHI7CisgICAgICBpbnQgX19yOworCisgICAgICBfX3IgPSBfX2d0aHJ3XyhwdGhyZWFkX211dGV4YXR0cl9pbml0KSAoJl9fYXR0cik7CisgICAgICBpZiAoIV9fcikKKwlfX3IgPSBfX2d0aHJ3XyhwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKSAoJl9fYXR0ciwKKwkJCQkJCSAgIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFKTsKKyAgICAgIGlmICghX19yKQorCV9fciA9IF9fZ3RocndfKHB0aHJlYWRfbXV0ZXhfaW5pdCkgKF9fbXV0ZXgsICZfX2F0dHIpOworICAgICAgaWYgKCFfX3IpCisJX19yID0gX19ndGhyd18ocHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSkgKCZfX2F0dHIpOworICAgICAgcmV0dXJuIF9fcjsKKyAgICB9CisgIHJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X2xvY2sgKF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdCAqX19tdXRleCkKK3sKKyAgcmV0dXJuIF9fZ3RocmVhZF9tdXRleF9sb2NrIChfX211dGV4KTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdHJ5bG9jayAoX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90ICpfX211dGV4KQoreworICByZXR1cm4gX19ndGhyZWFkX211dGV4X3RyeWxvY2sgKF9fbXV0ZXgpOworfQorCisjaWZkZWYgX1BPU0lYX1RJTUVPVVRTCisjaWYgX1BPU0lYX1RJTUVPVVRTID49IDAKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3RpbWVkbG9jayAoX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90ICpfX211dGV4LAorCQkJCSAgICAgY29uc3QgX19ndGhyZWFkX3RpbWVfdCAqX19hYnNfdGltZW91dCkKK3sKKyAgcmV0dXJuIF9fZ3RocmVhZF9tdXRleF90aW1lZGxvY2sgKF9fbXV0ZXgsIF9fYWJzX3RpbWVvdXQpOworfQorI2VuZGlmCisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3QgKl9fbXV0ZXgpCit7CisgIHJldHVybiBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrIChfX211dGV4KTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9jb25kX2Jyb2FkY2FzdCAoX19ndGhyZWFkX2NvbmRfdCAqX19jb25kKQoreworICByZXR1cm4gX19ndGhyd18ocHRocmVhZF9jb25kX2Jyb2FkY2FzdCkgKF9fY29uZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfY29uZF9zaWduYWwgKF9fZ3RocmVhZF9jb25kX3QgKl9fY29uZCkKK3sKKyAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfY29uZF9zaWduYWwpIChfX2NvbmQpOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX2NvbmRfd2FpdCAoX19ndGhyZWFkX2NvbmRfdCAqX19jb25kLCBfX2d0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkKK3sKKyAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfY29uZF93YWl0KSAoX19jb25kLCBfX211dGV4KTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9jb25kX3RpbWVkd2FpdCAoX19ndGhyZWFkX2NvbmRfdCAqX19jb25kLCBfX2d0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCwKKwkJCSAgY29uc3QgX19ndGhyZWFkX3RpbWVfdCAqX19hYnNfdGltZW91dCkKK3sKKyAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfY29uZF90aW1lZHdhaXQpIChfX2NvbmQsIF9fbXV0ZXgsIF9fYWJzX3RpbWVvdXQpOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX2NvbmRfd2FpdF9yZWN1cnNpdmUgKF9fZ3RocmVhZF9jb25kX3QgKl9fY29uZCwKKwkJCSAgICAgICBfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3QgKl9fbXV0ZXgpCit7CisgIHJldHVybiBfX2d0aHJlYWRfY29uZF93YWl0IChfX2NvbmQsIF9fbXV0ZXgpOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX2NvbmRfdGltZWR3YWl0X3JlY3Vyc2l2ZSAoX19ndGhyZWFkX2NvbmRfdCAqX19jb25kLAorCQkJCSAgICBfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3QgKl9fbXV0ZXgsCisJCQkJICAgIGNvbnN0IF9fZ3RocmVhZF90aW1lX3QgKl9fYWJzX3RpbWVvdXQpCit7CisgIHJldHVybiBfX2d0aHJlYWRfY29uZF90aW1lZHdhaXQgKF9fY29uZCwgX19tdXRleCwgX19hYnNfdGltZW91dCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfY29uZF9kZXN0cm95IChfX2d0aHJlYWRfY29uZF90KiBfX2NvbmQpCit7CisgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX2NvbmRfZGVzdHJveSkgKF9fY29uZCk7Cit9CisKKyNlbmRpZiAvKiBfTElCT0JKQyAqLworCisjZW5kaWYgLyogISBfR0xJQkNYWF9HQ0NfR1RIUl9QT1NJWF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYml0cy9ndGhyLXNpbmdsZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2JpdHMvZ3Roci1zaW5nbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTI2ODhmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2JpdHMvZ3Roci1zaW5nbGUuaApAQCAtMCwwICsxLDI5MiBAQAorLyogVGhyZWFkcyBjb21wYXRpYmlsaXR5IHJvdXRpbmVzIGZvciBsaWJnY2MyIGFuZCBsaWJvYmpjLiAgKi8KKy8qIENvbXBpbGUgdGhpcyBvbmUgd2l0aCBnY2MuICAqLworLyogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk5LCAyMDAwLCAyMDA0LCAyMDA4LCAyMDA5CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKK3Blcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKzMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKK3NlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9HQ0NfR1RIUl9TSU5HTEVfSAorI2RlZmluZSBfR0xJQkNYWF9HQ0NfR1RIUl9TSU5HTEVfSAorCisvKiBKdXN0IHByb3ZpZGUgY29tcGF0aWJpbGl0eSBmb3IgbXV0ZXggaGFuZGxpbmcuICAqLworCit0eXBlZGVmIGludCBfX2d0aHJlYWRfa2V5X3Q7Cit0eXBlZGVmIGludCBfX2d0aHJlYWRfb25jZV90OwordHlwZWRlZiBpbnQgX19ndGhyZWFkX211dGV4X3Q7Cit0eXBlZGVmIGludCBfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3Q7CisKKyNkZWZpbmUgX19HVEhSRUFEX09OQ0VfSU5JVCAwCisjZGVmaW5lIF9fR1RIUkVBRF9NVVRFWF9JTklUIDAKKyNkZWZpbmUgX19HVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUIDAKKworI2RlZmluZSBfR0xJQkNYWF9VTlVTRUQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkKKworI2lmZGVmIF9MSUJPQkpDCisKKy8qIFRocmVhZCBsb2NhbCBzdG9yYWdlIGZvciBhIHNpbmdsZSB0aHJlYWQgKi8KK3N0YXRpYyB2b2lkICp0aHJlYWRfbG9jYWxfc3RvcmFnZSA9IE5VTEw7CisKKy8qIEJhY2tlbmQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICovCisKKy8qIEluaXRpYWxpemUgdGhlIHRocmVhZHMgc3Vic3lzdGVtLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY19pbml0X3RocmVhZF9zeXN0ZW0gKHZvaWQpCit7CisgIC8qIE5vIHRocmVhZCBzdXBwb3J0IGF2YWlsYWJsZSAqLworICByZXR1cm4gLTE7Cit9CisKKy8qIENsb3NlIHRoZSB0aHJlYWRzIHN1YnN5c3RlbS4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfY2xvc2VfdGhyZWFkX3N5c3RlbSAodm9pZCkKK3sKKyAgLyogTm8gdGhyZWFkIHN1cHBvcnQgYXZhaWxhYmxlICovCisgIHJldHVybiAtMTsKK30KKworLyogQmFja2VuZCB0aHJlYWQgZnVuY3Rpb25zICovCisKKy8qIENyZWF0ZSBhIG5ldyB0aHJlYWQgb2YgZXhlY3V0aW9uLiAgKi8KK3N0YXRpYyBpbmxpbmUgb2JqY190aHJlYWRfdAorX19ndGhyZWFkX29iamNfdGhyZWFkX2RldGFjaCAodm9pZCAoKiBmdW5jKSh2b2lkICopLCB2b2lkICogYXJnIF9HTElCQ1hYX1VOVVNFRCkKK3sKKyAgLyogTm8gdGhyZWFkIHN1cHBvcnQgYXZhaWxhYmxlICovCisgIHJldHVybiBOVUxMOworfQorCisvKiBTZXQgdGhlIGN1cnJlbnQgdGhyZWFkJ3MgcHJpb3JpdHkuICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX3RocmVhZF9zZXRfcHJpb3JpdHkgKGludCBwcmlvcml0eSBfR0xJQkNYWF9VTlVTRUQpCit7CisgIC8qIE5vIHRocmVhZCBzdXBwb3J0IGF2YWlsYWJsZSAqLworICByZXR1cm4gLTE7Cit9CisKKy8qIFJldHVybiB0aGUgY3VycmVudCB0aHJlYWQncyBwcmlvcml0eS4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfdGhyZWFkX2dldF9wcmlvcml0eSAodm9pZCkKK3sKKyAgcmV0dXJuIE9CSkNfVEhSRUFEX0lOVEVSQUNUSVZFX1BSSU9SSVRZOworfQorCisvKiBZaWVsZCBvdXIgcHJvY2VzcyB0aW1lIHRvIGFub3RoZXIgdGhyZWFkLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorX19ndGhyZWFkX29iamNfdGhyZWFkX3lpZWxkICh2b2lkKQoreworICByZXR1cm47Cit9CisKKy8qIFRlcm1pbmF0ZSB0aGUgY3VycmVudCB0aHJlYWQuICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX3RocmVhZF9leGl0ICh2b2lkKQoreworICAvKiBObyB0aHJlYWQgc3VwcG9ydCBhdmFpbGFibGUgKi8KKyAgLyogU2hvdWxkIHdlIHJlYWxseSBleGl0IHRoZSBwcm9ncmFtICovCisgIC8qIGV4aXQgKCZfX29iamNfdGhyZWFkX2V4aXRfc3RhdHVzKTsgKi8KKyAgcmV0dXJuIC0xOworfQorCisvKiBSZXR1cm5zIGFuIGludGVnZXIgdmFsdWUgd2hpY2ggdW5pcXVlbHkgZGVzY3JpYmVzIGEgdGhyZWFkLiAgKi8KK3N0YXRpYyBpbmxpbmUgb2JqY190aHJlYWRfdAorX19ndGhyZWFkX29iamNfdGhyZWFkX2lkICh2b2lkKQoreworICAvKiBObyB0aHJlYWQgc3VwcG9ydCwgdXNlIDEuICAqLworICByZXR1cm4gKG9iamNfdGhyZWFkX3QpIDE7Cit9CisKKy8qIFNldHMgdGhlIHRocmVhZCdzIGxvY2FsIHN0b3JhZ2UgcG9pbnRlci4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfdGhyZWFkX3NldF9kYXRhICh2b2lkICp2YWx1ZSkKK3sKKyAgdGhyZWFkX2xvY2FsX3N0b3JhZ2UgPSB2YWx1ZTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIFJldHVybnMgdGhlIHRocmVhZCdzIGxvY2FsIHN0b3JhZ2UgcG9pbnRlci4gICovCitzdGF0aWMgaW5saW5lIHZvaWQgKgorX19ndGhyZWFkX29iamNfdGhyZWFkX2dldF9kYXRhICh2b2lkKQoreworICByZXR1cm4gdGhyZWFkX2xvY2FsX3N0b3JhZ2U7Cit9CisKKy8qIEJhY2tlbmQgbXV0ZXggZnVuY3Rpb25zICovCisKKy8qIEFsbG9jYXRlIGEgbXV0ZXguICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX211dGV4X2FsbG9jYXRlIChvYmpjX211dGV4X3QgbXV0ZXggX0dMSUJDWFhfVU5VU0VEKQoreworICByZXR1cm4gMDsKK30KKworLyogRGVhbGxvY2F0ZSBhIG11dGV4LiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY19tdXRleF9kZWFsbG9jYXRlIChvYmpjX211dGV4X3QgbXV0ZXggX0dMSUJDWFhfVU5VU0VEKQoreworICByZXR1cm4gMDsKK30KKworLyogR3JhYiBhIGxvY2sgb24gYSBtdXRleC4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfbXV0ZXhfbG9jayAob2JqY19tdXRleF90IG11dGV4IF9HTElCQ1hYX1VOVVNFRCkKK3sKKyAgLyogVGhlcmUgY2FuIG9ubHkgYmUgb25lIHRocmVhZCwgc28gd2UgYWx3YXlzIGdldCB0aGUgbG9jayAqLworICByZXR1cm4gMDsKK30KKworLyogVHJ5IHRvIGdyYWIgYSBsb2NrIG9uIGEgbXV0ZXguICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX211dGV4X3RyeWxvY2sgKG9iamNfbXV0ZXhfdCBtdXRleCBfR0xJQkNYWF9VTlVTRUQpCit7CisgIC8qIFRoZXJlIGNhbiBvbmx5IGJlIG9uZSB0aHJlYWQsIHNvIHdlIGFsd2F5cyBnZXQgdGhlIGxvY2sgKi8KKyAgcmV0dXJuIDA7Cit9CisKKy8qIFVubG9jayB0aGUgbXV0ZXggKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY19tdXRleF91bmxvY2sgKG9iamNfbXV0ZXhfdCBtdXRleCBfR0xJQkNYWF9VTlVTRUQpCit7CisgIHJldHVybiAwOworfQorCisvKiBCYWNrZW5kIGNvbmRpdGlvbiBtdXRleCBmdW5jdGlvbnMgKi8KKworLyogQWxsb2NhdGUgYSBjb25kaXRpb24uICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX2NvbmRpdGlvbl9hbGxvY2F0ZSAob2JqY19jb25kaXRpb25fdCBjb25kaXRpb24gX0dMSUJDWFhfVU5VU0VEKQoreworICByZXR1cm4gMDsKK30KKworLyogRGVhbGxvY2F0ZSBhIGNvbmRpdGlvbi4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfY29uZGl0aW9uX2RlYWxsb2NhdGUgKG9iamNfY29uZGl0aW9uX3QgY29uZGl0aW9uIF9HTElCQ1hYX1VOVVNFRCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKKy8qIFdhaXQgb24gdGhlIGNvbmRpdGlvbiAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX2NvbmRpdGlvbl93YWl0IChvYmpjX2NvbmRpdGlvbl90IGNvbmRpdGlvbiBfR0xJQkNYWF9VTlVTRUQsCisJCQkgICAgICAgb2JqY19tdXRleF90IG11dGV4IF9HTElCQ1hYX1VOVVNFRCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKKy8qIFdha2UgdXAgYWxsIHRocmVhZHMgd2FpdGluZyBvbiB0aGlzIGNvbmRpdGlvbi4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfY29uZGl0aW9uX2Jyb2FkY2FzdCAob2JqY19jb25kaXRpb25fdCBjb25kaXRpb24gX0dMSUJDWFhfVU5VU0VEKQoreworICByZXR1cm4gMDsKK30KKworLyogV2FrZSB1cCBvbmUgdGhyZWFkIHdhaXRpbmcgb24gdGhpcyBjb25kaXRpb24uICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX2NvbmRpdGlvbl9zaWduYWwgKG9iamNfY29uZGl0aW9uX3QgY29uZGl0aW9uIF9HTElCQ1hYX1VOVVNFRCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKKyNlbHNlIC8qIF9MSUJPQkpDICovCisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfYWN0aXZlX3AgKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29uY2UgKF9fZ3RocmVhZF9vbmNlX3QgKl9fb25jZSBfR0xJQkNYWF9VTlVTRUQsIHZvaWQgKCpfX2Z1bmMpICh2b2lkKSBfR0xJQkNYWF9VTlVTRUQpCit7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBfR0xJQkNYWF9VTlVTRUQKK19fZ3RocmVhZF9rZXlfY3JlYXRlIChfX2d0aHJlYWRfa2V5X3QgKl9fa2V5IF9HTElCQ1hYX1VOVVNFRCwgdm9pZCAoKl9fZnVuYykgKHZvaWQgKikgX0dMSUJDWFhfVU5VU0VEKQoreworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfR0xJQkNYWF9VTlVTRUQKK19fZ3RocmVhZF9rZXlfZGVsZXRlIChfX2d0aHJlYWRfa2V5X3QgX19rZXkgX0dMSUJDWFhfVU5VU0VEKQoreworICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkICoKK19fZ3RocmVhZF9nZXRzcGVjaWZpYyAoX19ndGhyZWFkX2tleV90IF9fa2V5IF9HTElCQ1hYX1VOVVNFRCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfc2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBfX2tleSBfR0xJQkNYWF9VTlVTRUQsIGNvbnN0IHZvaWQgKl9fdiBfR0xJQkNYWF9VTlVTRUQpCit7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX211dGV4X2Rlc3Ryb3kgKF9fZ3RocmVhZF9tdXRleF90ICpfX211dGV4IF9HTElCQ1hYX1VOVVNFRCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfbXV0ZXhfbG9jayAoX19ndGhyZWFkX211dGV4X3QgKl9fbXV0ZXggX0dMSUJDWFhfVU5VU0VEKQoreworICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9tdXRleF90cnlsb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCBfR0xJQkNYWF9VTlVTRUQpCit7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX211dGV4X3VubG9jayAoX19ndGhyZWFkX211dGV4X3QgKl9fbXV0ZXggX0dMSUJDWFhfVU5VU0VEKQoreworICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfbG9jayAoX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90ICpfX211dGV4KQoreworICByZXR1cm4gX19ndGhyZWFkX211dGV4X2xvY2sgKF9fbXV0ZXgpOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90cnlsb2NrIChfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3QgKl9fbXV0ZXgpCit7CisgIHJldHVybiBfX2d0aHJlYWRfbXV0ZXhfdHJ5bG9jayAoX19tdXRleCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3VubG9jayAoX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90ICpfX211dGV4KQoreworICByZXR1cm4gX19ndGhyZWFkX211dGV4X3VubG9jayAoX19tdXRleCk7Cit9CisKKyNlbmRpZiAvKiBfTElCT0JKQyAqLworCisjdW5kZWYgX0dMSUJDWFhfVU5VU0VECisKKyNlbmRpZiAvKiAhIF9HTElCQ1hYX0dDQ19HVEhSX1NJTkdMRV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYml0cy9ndGhyLXRwZi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2JpdHMvZ3Roci10cGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjE5NGU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2JpdHMvZ3Roci10cGYuaApAQCAtMCwwICsxLDIyOSBAQAorLyogVGhyZWFkcyBjb21wYXRpYmlsaXR5IHJvdXRpbmVzIGZvciBsaWJnY2MyIGFuZCBsaWJvYmpjLgorICAgQ29tcGlsZSB0aGlzIG9uZSB3aXRoIGdjYy4KKyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKK3Blcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKzMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKK3NlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogVFBGIG5lZWRzIGl0cyBvd24gdmVyc2lvbiBvZiBndGhyLSouaCBiZWNhdXNlIFRQRiBhbHdheXMgbGlua3MgdG8KKyAgIHRoZSB0aHJlYWQgbGlicmFyeS4gIEhvd2V2ZXIsIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIHdlIHN0aWxsIGRvIG5vdAorICAgd2FudCB0byBpc3N1ZSB0aHJlYWQgYXBpIGNhbGxzIHVubGVzcyBhIGNoZWNrIGlzIG1hZGUgdG8gc2VlIHRoYXQgd2UKKyAgIGFyZSBydW5uaW5nIGFzIGEgdGhyZWFkLiAgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9HQ0NfR1RIUl9UUEZfSAorI2RlZmluZSBfR0xJQkNYWF9HQ0NfR1RIUl9UUEZfSAorCisvKiBQT1NJWCB0aHJlYWRzIHNwZWNpZmljIGRlZmluaXRpb25zLgorICAgRWFzeSwgc2luY2UgdGhlIGludGVyZmFjZSBpcyBqdXN0IG9uZS10by1vbmUgbWFwcGluZy4gICovCisKKyNkZWZpbmUgX19HVEhSRUFEUyAxCisKKy8qIFNvbWUgaW1wbGVtZW50YXRpb25zIG9mIDxwdGhyZWFkLmg+IHJlcXVpcmUgdGhpcyB0byBiZSBkZWZpbmVkLiAgKi8KKyNpZm5kZWYgX1JFRU5UUkFOVAorI2RlZmluZSBfUkVFTlRSQU5UIDEKKyNlbmRpZgorCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCit0eXBlZGVmIHB0aHJlYWRfa2V5X3QgX19ndGhyZWFkX2tleV90OwordHlwZWRlZiBwdGhyZWFkX29uY2VfdCBfX2d0aHJlYWRfb25jZV90OwordHlwZWRlZiBwdGhyZWFkX211dGV4X3QgX19ndGhyZWFkX211dGV4X3Q7Cit0eXBlZGVmIHB0aHJlYWRfbXV0ZXhfdCBfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3Q7CisKKyNpZiBkZWZpbmVkKFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSKQorI2RlZmluZSBfX0dUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVQgUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVIKKyNlbGlmIGRlZmluZWQoUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVJfTlApCisjZGVmaW5lIF9fR1RIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVCBQVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUSUFMSVpFUl9OUAorI2VuZGlmCisKKyNkZWZpbmUgX19HVEhSRUFEX01VVEVYX0lOSVQgUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUgorI2RlZmluZSBfX0dUSFJFQURfT05DRV9JTklUIFBUSFJFQURfT05DRV9JTklUCisjZGVmaW5lIF9fR1RIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVF9GVU5DVElPTiBfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X2luaXRfZnVuY3Rpb24KKworI2RlZmluZSBOT1RBVEhSRUFEICAgMDAKKyNkZWZpbmUgRUNCQkFTRVBUUiAodW5zaWduZWQgbG9uZyBpbnQpICoodW5zaWduZWQgaW50ICopMHgwMDAwMDUxNHUKKyNkZWZpbmUgRUNCUEcyUFRSICBFQ0JCQVNFUFRSICsgMHgxMDAwCisjZGVmaW5lIENFMlRIUkNQVFIgKigodW5zaWduZWQgY2hhciAqKShFQ0JQRzJQVFIgKyAxNikpCisjZGVmaW5lIF9fdHBmX3B0aHJlYWRfYWN0aXZlKCkgKENFMlRIUkNQVFIgIT0gTk9UQVRIUkVBRCkKKworI2lmIF9fR1hYX1dFQUtfXyAmJiBfR0xJQkNYWF9HVEhSRUFEX1VTRV9XRUFLCisjIGRlZmluZSBfX2d0aHJ3KG5hbWUpIFwKKyAgc3RhdGljIF9fdHlwZW9mKG5hbWUpIF9fZ3RocndfICMjIG5hbWUgX19hdHRyaWJ1dGVfXyAoKF9fd2Vha3JlZl9fKCNuYW1lKSkpOworIyBkZWZpbmUgX19ndGhyd18obmFtZSkgX19ndGhyd18gIyMgbmFtZQorI2Vsc2UKKyMgZGVmaW5lIF9fZ3RocncobmFtZSkKKyMgZGVmaW5lIF9fZ3RocndfKG5hbWUpIG5hbWUKKyNlbmRpZgorCitfX2d0aHJ3KHB0aHJlYWRfb25jZSkKK19fZ3RocncocHRocmVhZF9rZXlfY3JlYXRlKQorX19ndGhydyhwdGhyZWFkX2tleV9kZWxldGUpCitfX2d0aHJ3KHB0aHJlYWRfZ2V0c3BlY2lmaWMpCitfX2d0aHJ3KHB0aHJlYWRfc2V0c3BlY2lmaWMpCitfX2d0aHJ3KHB0aHJlYWRfY3JlYXRlKQorCitfX2d0aHJ3KHB0aHJlYWRfbXV0ZXhfbG9jaykKK19fZ3RocncocHRocmVhZF9tdXRleF90cnlsb2NrKQorX19ndGhydyhwdGhyZWFkX211dGV4X3VubG9jaykKK19fZ3RocncocHRocmVhZF9tdXRleGF0dHJfaW5pdCkKK19fZ3RocncocHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSkKK19fZ3RocncocHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSkKK19fZ3RocncocHRocmVhZF9tdXRleF9pbml0KQorX19ndGhydyhwdGhyZWFkX211dGV4X2Rlc3Ryb3kpCisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfYWN0aXZlX3AgKHZvaWQpCit7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29uY2UgKF9fZ3RocmVhZF9vbmNlX3QgKl9fb25jZSwgdm9pZCAoKl9fZnVuYykgKHZvaWQpKQoreworICBpZiAoX190cGZfcHRocmVhZF9hY3RpdmUgKCkpCisgICAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfb25jZSkgKF9fb25jZSwgX19mdW5jKTsKKyAgZWxzZQorICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9rZXlfY3JlYXRlIChfX2d0aHJlYWRfa2V5X3QgKl9fa2V5LCB2b2lkICgqX19kdG9yKSAodm9pZCAqKSkKK3sKKyAgaWYgKF9fdHBmX3B0aHJlYWRfYWN0aXZlICgpKQorICAgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX2tleV9jcmVhdGUpIChfX2tleSwgX19kdG9yKTsKKyAgZWxzZQorICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9rZXlfZGVsZXRlIChfX2d0aHJlYWRfa2V5X3QgX19rZXkpCit7CisgIGlmIChfX3RwZl9wdGhyZWFkX2FjdGl2ZSAoKSkKKyAgICByZXR1cm4gX19ndGhyd18ocHRocmVhZF9rZXlfZGVsZXRlKSAoX19rZXkpOworICBlbHNlCisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKgorX19ndGhyZWFkX2dldHNwZWNpZmljIChfX2d0aHJlYWRfa2V5X3QgX19rZXkpCit7CisgIGlmIChfX3RwZl9wdGhyZWFkX2FjdGl2ZSAoKSkKKyAgICByZXR1cm4gX19ndGhyd18ocHRocmVhZF9nZXRzcGVjaWZpYykgKF9fa2V5KTsKKyAgZWxzZQorICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX3NldHNwZWNpZmljIChfX2d0aHJlYWRfa2V5X3QgX19rZXksIGNvbnN0IHZvaWQgKl9fcHRyKQoreworICBpZiAoX190cGZfcHRocmVhZF9hY3RpdmUgKCkpCisgICAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfc2V0c3BlY2lmaWMpIChfX2tleSwgX19wdHIpOworICBlbHNlCisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX211dGV4X2Rlc3Ryb3kgKF9fZ3RocmVhZF9tdXRleF90ICpfX211dGV4KQoreworICBpZiAoX190cGZfcHRocmVhZF9hY3RpdmUgKCkpCisgICAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfbXV0ZXhfZGVzdHJveSkgKF9fbXV0ZXgpOworICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfbXV0ZXhfbG9jayAoX19ndGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpCit7CisgIGlmIChfX3RwZl9wdGhyZWFkX2FjdGl2ZSAoKSkKKyAgICByZXR1cm4gX19ndGhyd18ocHRocmVhZF9tdXRleF9sb2NrKSAoX19tdXRleCk7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9tdXRleF90cnlsb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkKK3sKKyAgaWYgKF9fdHBmX3B0aHJlYWRfYWN0aXZlICgpKQorICAgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX211dGV4X3RyeWxvY2spIChfX211dGV4KTsKKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX211dGV4X3VubG9jayAoX19ndGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpCit7CisgIGlmIChfX3RwZl9wdGhyZWFkX2FjdGl2ZSAoKSkKKyAgICByZXR1cm4gX19ndGhyd18ocHRocmVhZF9tdXRleF91bmxvY2spIChfX211dGV4KTsKKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF9sb2NrIChfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3QgKl9fbXV0ZXgpCit7CisgIGlmIChfX3RwZl9wdGhyZWFkX2FjdGl2ZSAoKSkKKyAgICByZXR1cm4gX19ndGhyZWFkX211dGV4X2xvY2sgKF9fbXV0ZXgpOworICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3RyeWxvY2sgKF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdCAqX19tdXRleCkKK3sKKyAgaWYgKF9fdHBmX3B0aHJlYWRfYWN0aXZlICgpKQorICAgIHJldHVybiBfX2d0aHJlYWRfbXV0ZXhfdHJ5bG9jayAoX19tdXRleCk7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3QgKl9fbXV0ZXgpCit7CisgIGlmIChfX3RwZl9wdGhyZWFkX2FjdGl2ZSAoKSkKKyAgICByZXR1cm4gX19ndGhyZWFkX211dGV4X3VubG9jayAoX19tdXRleCk7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfaW5pdF9mdW5jdGlvbiAoX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90ICpfX211dGV4KQoreworICBpZiAoX190cGZfcHRocmVhZF9hY3RpdmUgKCkpCisgICAgeworICAgICAgcHRocmVhZF9tdXRleGF0dHJfdCBfX2F0dHI7CisgICAgICBpbnQgX19yOworCisgICAgICBfX3IgPSBfX2d0aHJ3XyhwdGhyZWFkX211dGV4YXR0cl9pbml0KSAoJl9fYXR0cik7CisgICAgICBpZiAoIV9fcikKKwlfX3IgPSBfX2d0aHJ3XyhwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKSAoJl9fYXR0ciwKKwkJCQkJCSAgIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFKTsKKyAgICAgIGlmICghX19yKQorCV9fciA9IF9fZ3RocndfKHB0aHJlYWRfbXV0ZXhfaW5pdCkgKF9fbXV0ZXgsICZfX2F0dHIpOworICAgICAgaWYgKCFfX3IpCisJX19yID0gX19ndGhyd18ocHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSkgKCZfX2F0dHIpOworICAgICAgcmV0dXJuIF9fcjsKKyAgICB9CisgIHJldHVybiAwOworfQorCisKKyNlbmRpZiAvKiAhIF9HTElCQ1hYX0dDQ19HVEhSX1RQRl9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYml0cy9ndGhyLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYml0cy9ndGhyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ2NmMxMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaXRzL2d0aHIuaApAQCAtMCwwICsxLDE3MyBAQAorLyogVGhyZWFkcyBjb21wYXRpYmlsaXR5IHJvdXRpbmVzIGZvciBsaWJnY2MyLiAgKi8KKy8qIENvbXBpbGUgdGhpcyBvbmUgd2l0aCBnY2MuICAqLworLyogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAyMDA0LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1VuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCithIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9HTElCQ1hYX0dDQ19HVEhSX0gKKyNkZWZpbmUgX0dMSUJDWFhfR0NDX0dUSFJfSAorCisjaWZuZGVmIF9HTElCQ1hYX0hJREVfRVhQT1JUUworI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGRlZmF1bHQpCisjZW5kaWYKKworLyogSWYgdGhpcyBmaWxlIGlzIGNvbXBpbGVkIHdpdGggdGhyZWFkcyBzdXBwb3J0LCBpdCBtdXN0CisgICAgICAgI2RlZmluZSBfX0dUSFJFQURTIDEKKyAgIHRvIGluZGljYXRlIHRoYXQgdGhyZWFkcyBzdXBwb3J0IGlzIHByZXNlbnQuICBBbHNvIGl0IGhhcyBkZWZpbmUKKyAgIGZ1bmN0aW9uCisgICAgIGludCBfX2d0aHJlYWRfYWN0aXZlX3AgKCkKKyAgIHRoYXQgcmV0dXJucyAxIGlmIHRocmVhZCBzeXN0ZW0gaXMgYWN0aXZlLCAwIGlmIG5vdC4KKworICAgVGhlIHRocmVhZHMgaW50ZXJmYWNlIG11c3QgZGVmaW5lIHRoZSBmb2xsb3dpbmcgdHlwZXM6CisgICAgIF9fZ3RocmVhZF9rZXlfdAorICAgICBfX2d0aHJlYWRfb25jZV90CisgICAgIF9fZ3RocmVhZF9tdXRleF90CisgICAgIF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdAorCisgICBUaGUgdGhyZWFkcyBpbnRlcmZhY2UgbXVzdCBkZWZpbmUgdGhlIGZvbGxvd2luZyBtYWNyb3M6CisKKyAgICAgX19HVEhSRUFEX09OQ0VfSU5JVAorICAgICAJCXRvIGluaXRpYWxpemUgX19ndGhyZWFkX29uY2VfdAorICAgICBfX0dUSFJFQURfTVVURVhfSU5JVAorICAgICAJCXRvIGluaXRpYWxpemUgX19ndGhyZWFkX211dGV4X3QgdG8gZ2V0IGEgZmFzdAorCQlub24tcmVjdXJzaXZlIG11dGV4LgorICAgICBfX0dUSFJFQURfTVVURVhfSU5JVF9GVU5DVElPTgorICAgICAJCXNvbWUgc3lzdGVtcyBjYW4ndCBpbml0aWFsaXplIGEgbXV0ZXggd2l0aG91dCBhCisJCWZ1bmN0aW9uIGNhbGwuICBPbiBzdWNoIHN5c3RlbXMsIGRlZmluZSB0aGlzIHRvIGEKKwkJZnVuY3Rpb24gd2hpY2ggbG9va3MgbGlrZSB0aGlzOgorCQkgIHZvaWQgX19HVEhSRUFEX01VVEVYX0lOSVRfRlVOQ1RJT04gKF9fZ3RocmVhZF9tdXRleF90ICopCisJCURvbid0IGRlZmluZSBfX0dUSFJFQURfTVVURVhfSU5JVCBpbiB0aGlzIGNhc2UKKyAgICAgX19HVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUCisgICAgIF9fR1RIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVF9GVU5DVElPTgorICAgICAJCWFzIGFib3ZlLCBidXQgZm9yIGEgcmVjdXJzaXZlIG11dGV4LgorCisgICBUaGUgdGhyZWFkcyBpbnRlcmZhY2UgbXVzdCBkZWZpbmUgdGhlIGZvbGxvd2luZyBzdGF0aWMgZnVuY3Rpb25zOgorCisgICAgIGludCBfX2d0aHJlYWRfb25jZSAoX19ndGhyZWFkX29uY2VfdCAqb25jZSwgdm9pZCAoKmZ1bmMpICgpKQorCisgICAgIGludCBfX2d0aHJlYWRfa2V5X2NyZWF0ZSAoX19ndGhyZWFkX2tleV90ICprZXlwLCB2b2lkICgqZHRvcikgKHZvaWQgKikpCisgICAgIGludCBfX2d0aHJlYWRfa2V5X2RlbGV0ZSAoX19ndGhyZWFkX2tleV90IGtleSkKKworICAgICB2b2lkICpfX2d0aHJlYWRfZ2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBrZXkpCisgICAgIGludCBfX2d0aHJlYWRfc2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBrZXksIGNvbnN0IHZvaWQgKnB0cikKKworICAgICBpbnQgX19ndGhyZWFkX211dGV4X2Rlc3Ryb3kgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCk7CisKKyAgICAgaW50IF9fZ3RocmVhZF9tdXRleF9sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpOworICAgICBpbnQgX19ndGhyZWFkX211dGV4X3RyeWxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCk7CisgICAgIGludCBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpOworCisgICAgIGludCBfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X2xvY2sgKF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdCAqbXV0ZXgpOworICAgICBpbnQgX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90cnlsb2NrIChfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3QgKm11dGV4KTsKKyAgICAgaW50IF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3QgKm11dGV4KTsKKworICAgVGhlIGZvbGxvd2luZyBhcmUgc3VwcG9ydGVkIGluIFBPU0lYIHRocmVhZHMgb25seS4gVGhleSBhcmUgcmVxdWlyZWQgdG8KKyAgIGZpeCBhIGRlYWRsb2NrIGluIHN0YXRpYyBpbml0aWFsaXphdGlvbiBpbnNpZGUgbGlic3VwYysrLiBUaGUgaGVhZGVyIGZpbGUKKyAgIGd0aHItcG9zaXguaCBkZWZpbmVzIGEgc3ltYm9sIF9fR1RIUkVBRF9IQVNfQ09ORCB0byBzaWduaWZ5IHRoYXQgdGhlc2UgZXh0cmEKKyAgIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQuCisKKyAgIFR5cGVzOgorICAgICBfX2d0aHJlYWRfY29uZF90CisKKyAgIE1hY3JvczoKKyAgICAgX19HVEhSRUFEX0NPTkRfSU5JVAorICAgICBfX0dUSFJFQURfQ09ORF9JTklUX0ZVTkNUSU9OCisKKyAgIEludGVyZmFjZToKKyAgICAgaW50IF9fZ3RocmVhZF9jb25kX2Jyb2FkY2FzdCAoX19ndGhyZWFkX2NvbmRfdCAqY29uZCk7CisgICAgIGludCBfX2d0aHJlYWRfY29uZF93YWl0IChfX2d0aHJlYWRfY29uZF90ICpjb25kLCBfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpOworICAgICBpbnQgX19ndGhyZWFkX2NvbmRfd2FpdF9yZWN1cnNpdmUgKF9fZ3RocmVhZF9jb25kX3QgKmNvbmQsCisJCQkJCV9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdCAqbXV0ZXgpOworCisgICBBbGwgZnVuY3Rpb25zIHJldHVybmluZyBpbnQgc2hvdWxkIHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgdGhlIGVycm9yCisgICBudW1iZXIuICBJZiB0aGUgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQsIC0xIGlzIHJldHVybmVkLgorCisgICBJZiB0aGUgZm9sbG93aW5nIGFyZSBhbHNvIGRlZmluZWQsIHlvdSBzaG91bGQKKyAgICAgI2RlZmluZSBfX0dUSFJFQURTX0NYWDBYIDEKKyAgIHRvIGVuYWJsZSB0aGUgYysrMHggdGhyZWFkIGxpYnJhcnkuCisKKyAgIFR5cGVzOgorICAgICBfX2d0aHJlYWRfdAorICAgICBfX2d0aHJlYWRfdGltZV90CisKKyAgIEludGVyZmFjZToKKyAgICAgaW50IF9fZ3RocmVhZF9jcmVhdGUgKF9fZ3RocmVhZF90ICp0aHJlYWQsIHZvaWQgKigqZnVuYykgKHZvaWQqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZ3MpOworICAgICBpbnQgX19ndGhyZWFkX2pvaW4gKF9fZ3RocmVhZF90IHRocmVhZCwgdm9pZCAqKnZhbHVlX3B0cik7CisgICAgIGludCBfX2d0aHJlYWRfZGV0YWNoIChfX2d0aHJlYWRfdCB0aHJlYWQpOworICAgICBpbnQgX19ndGhyZWFkX2VxdWFsIChfX2d0aHJlYWRfdCB0MSwgX19ndGhyZWFkX3QgdDIpOworICAgICBfX2d0aHJlYWRfdCBfX2d0aHJlYWRfc2VsZiAodm9pZCk7CisgICAgIGludCBfX2d0aHJlYWRfeWllbGQgKHZvaWQpOworCisgICAgIGludCBfX2d0aHJlYWRfbXV0ZXhfdGltZWRsb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZ3RocmVhZF90aW1lX3QgKmFic190aW1lb3V0KTsKKyAgICAgaW50IF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdGltZWRsb2NrIChfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3QgKm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2d0aHJlYWRfdGltZV90ICphYnNfdGltZSk7CisKKyAgICAgaW50IF9fZ3RocmVhZF9jb25kX3NpZ25hbCAoX19ndGhyZWFkX2NvbmRfdCAqY29uZCk7CisgICAgIGludCBfX2d0aHJlYWRfY29uZF90aW1lZHdhaXQgKF9fZ3RocmVhZF9jb25kX3QgKmNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3RocmVhZF9tdXRleF90ICptdXRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19ndGhyZWFkX3RpbWVfdCAqYWJzX3RpbWVvdXQpOworICAgICBpbnQgX19ndGhyZWFkX2NvbmRfdGltZWR3YWl0X3JlY3Vyc2l2ZSAoX19ndGhyZWFkX2NvbmRfdCAqY29uZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdCAqbXV0ZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2d0aHJlYWRfdGltZV90ICphYnNfdGltZSkKKworICAgQ3VycmVudGx5IHN1cHBvcnRlZCB0aHJlYWRzIHBhY2thZ2VzIGFyZQorICAgICBUUEYgdGhyZWFkcyB3aXRoIC1EX190cGZfXworICAgICBQT1NJWC9Vbml4OTggdGhyZWFkcyB3aXRoIC1EX1BUSFJFQURTCisgICAgIFBPU0lYL1VuaXg5NSB0aHJlYWRzIHdpdGggLURfUFRIUkVBRFM5NQorICAgICBEQ0UgdGhyZWFkcyB3aXRoIC1EX0RDRV9USFJFQURTCisgICAgIFNvbGFyaXMvVUkgdGhyZWFkcyB3aXRoIC1EX1NPTEFSSVNfVEhSRUFEUworCisqLworCisvKiBDaGVjayBmaXJzdCBmb3IgdGhyZWFkIHNwZWNpZmljIGRlZmluZXMuICAqLworI2lmIGRlZmluZWQgKF9HTElCQ1hYX19fdHBmX0dMSUJDWFhfX18pCisjaW5jbHVkZSA8Yml0cy9ndGhyLXRwZi5oPgorI2VsaWYgX0dMSUJDWFhfX1BUSFJFQURTCisjaW5jbHVkZSA8Yml0cy9ndGhyLXBvc2l4Lmg+CisjZWxpZiBfR0xJQkNYWF9fUFRIUkVBRFM5NQorI2luY2x1ZGUgPGJpdHMvZ3Roci1wb3NpeDk1Lmg+CisjZWxpZiBfR0xJQkNYWF9fRENFX1RIUkVBRFMKKyNpbmNsdWRlIDxiaXRzL2d0aHItZGNlLmg+CisjZWxpZiBfR0xJQkNYWF9fU09MQVJJU19USFJFQURTCisjaW5jbHVkZSA8Yml0cy9ndGhyLXNvbGFyaXMuaD4KKworLyogSW5jbHVkZSBHVEhSRUFEX0ZJTEUgaWYgb25lIGlzIGRlZmluZWQuICAqLworI2VsaWYgZGVmaW5lZChfR0xJQkNYWF9IQVZFX0dUSFJfREVGQVVMVCkKKyNpZiBfX0dYWF9XRUFLX18KKyNpZm5kZWYgX0dMSUJDWFhfR1RIUkVBRF9VU0VfV0VBSworI2RlZmluZSBfR0xJQkNYWF9HVEhSRUFEX1VTRV9XRUFLIDEKKyNlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8Yml0cy9ndGhyLWRlZmF1bHQuaD4KKworLyogRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZCBkZWZpbml0aW9ucy4gICovCisjZWxzZQorI2luY2x1ZGUgPGJpdHMvZ3Roci1zaW5nbGUuaD4KKyNlbmRpZgorCisjaWZuZGVmIF9HTElCQ1hYX0hJREVfRVhQT1JUUworI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwb3AKKyNlbmRpZgorCisjZW5kaWYgLyogISBfR0xJQkNYWF9HQ0NfR1RIUl9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYml0cy9tZXNzYWdlc19tZW1iZXJzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYml0cy9tZXNzYWdlc19tZW1iZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE0OTk1MAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaXRzL21lc3NhZ2VzX21lbWJlcnMuaApAQCAtMCwwICsxLDkwIEBACisvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIGdlbmVyaWMgdmVyc2lvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBtZXNzYWdlc19tZW1iZXJzLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIHZpcnR1YWwgZnVuY3Rpb25zCisvLworCisvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8vIE5vbi12aXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoc2l6ZV90IF9fcmVmcykKKyAgICAgOiBmYWNldChfX3JlZnMpCisgICAgIHsgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19nZXRfY19sb2NhbGUoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoX19jX2xvY2FsZSwgY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMpIAorICAgICA6IGZhY2V0KF9fcmVmcykKKyAgICAgeyBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9TX2dldF9jX2xvY2FsZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cgCisgICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywgCisJCQkgICBjb25zdCBjaGFyKikgY29uc3QKKyAgICB7IHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOyB9CisKKyAgLy8gVmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgbWVzc2FnZXM8X0NoYXJUPjo6fm1lc3NhZ2VzKCkKKyAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cgCisgICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdAorICAgIHsgcmV0dXJuIDA7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6c3RyaW5nX3R5cGUgIAorICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgCisJCQkgICAgIGNvbnN0IHN0cmluZ190eXBlJiBfX2RmYXVsdCkgY29uc3QKKyAgICB7IHJldHVybiBfX2RmYXVsdDsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICB2b2lkICAgIAorICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2Nsb3NlKGNhdGFsb2cpIGNvbnN0IAorICAgIHsgfQorCisgICAvLyBtZXNzYWdlc19ieW5hbWUKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgbWVzc2FnZXNfYnluYW1lPF9DaGFyVD46Om1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCisgICAgIDogbWVzc2FnZXM8X0NoYXJUPihfX3JlZnMpIAorICAgICB7IAorCWlmIChfX2J1aWx0aW5fc3RyY21wKF9fcywgIkMiKSAhPSAwCisJICAgICYmIF9fYnVpbHRpbl9zdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorCSAgeworCSAgICB0aGlzLT5fU19kZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKwkgICAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3MpOyAKKwkgIH0KKyAgICAgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYml0cy9vc19kZWZpbmVzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYml0cy9vc19kZWZpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM0MmIzYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaXRzL29zX2RlZmluZXMuaApAQCAtMCwwICsxLDQxIEBACisvLyBTcGVjaWZpYyBkZWZpbml0aW9ucyBmb3IgR05VL0xpbnV4ICAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIG9zX2RlZmluZXMuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX09TX0RFRklORVMKKyNkZWZpbmUgX0dMSUJDWFhfT1NfREVGSU5FUyAxCisKKy8vIFN5c3RlbS1zcGVjaWZpYyAjZGVmaW5lLCB0eXBlZGVmcywgY29ycmVjdGlvbnMsIGV0YywgZ28gaGVyZS4gIFRoaXMKKy8vIGZpbGUgd2lsbCBjb21lIGJlZm9yZSBhbGwgb3RoZXJzLgorCisvLyBUaGlzIGtlZXBzIGlzYW51bSwgZXQgYWwgZnJvbSBiZWluZyBwcm9wYWdhdGVkIGFzIG1hY3Jvcy4KKyNkZWZpbmUgX19OT19DVFlQRSAxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaXRzL3N0ZGMrKy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2JpdHMvc3RkYysrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE5YzkzOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaXRzL3N0ZGMrKy5oCkBAIC0wLDAgKzEsMTE1IEBACisvLyBDKysgaW5jbHVkZXMgdXNlZCBmb3IgcHJlY29tcGlsaW5nIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHN0ZGMrKy5oCisgKiAgVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBmaWxlIGZvciBhIHByZWNvbXBpbGVkIGhlYWRlci4KKyAqLworCisvLyAxNy40LjEuMiBIZWFkZXJzCisKKy8vIEMKKyNpZm5kZWYgX0dMSUJDWFhfTk9fQVNTRVJUCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNlbmRpZgorI2luY2x1ZGUgPGNjdHlwZT4KKyNpbmNsdWRlIDxjZXJybm8+CisjaW5jbHVkZSA8Y2Zsb2F0PgorI2luY2x1ZGUgPGNpc282NDY+CisjaW5jbHVkZSA8Y2xpbWl0cz4KKyNpbmNsdWRlIDxjbG9jYWxlPgorI2luY2x1ZGUgPGNtYXRoPgorI2luY2x1ZGUgPGNzZXRqbXA+CisjaW5jbHVkZSA8Y3NpZ25hbD4KKyNpbmNsdWRlIDxjc3RkYXJnPgorI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDxjdGltZT4KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisjaW5jbHVkZSA8Y2NvbXBsZXg+CisjaW5jbHVkZSA8Y2ZlbnY+CisjaW5jbHVkZSA8Y2ludHR5cGVzPgorI2luY2x1ZGUgPGNzdGRib29sPgorI2luY2x1ZGUgPGNzdGRpbnQ+CisjaW5jbHVkZSA8Y3RnbWF0aD4KKyNpbmNsdWRlIDxjd2NoYXI+CisjaW5jbHVkZSA8Y3djdHlwZT4KKyNlbmRpZgorCisvLyBDKysKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Yml0c2V0PgorI2luY2x1ZGUgPGNvbXBsZXg+CisjaW5jbHVkZSA8ZGVxdWU+CisjaW5jbHVkZSA8ZXhjZXB0aW9uPgorI2luY2x1ZGUgPGZzdHJlYW0+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDxpb21hbmlwPgorI2luY2x1ZGUgPGlvcz4KKyNpbmNsdWRlIDxpb3Nmd2Q+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8aXN0cmVhbT4KKyNpbmNsdWRlIDxpdGVyYXRvcj4KKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8bGlzdD4KKyNpbmNsdWRlIDxsb2NhbGU+CisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxuZXc+CisjaW5jbHVkZSA8bnVtZXJpYz4KKyNpbmNsdWRlIDxvc3RyZWFtPgorI2luY2x1ZGUgPHF1ZXVlPgorI2luY2x1ZGUgPHNldD4KKyNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPHN0YWNrPgorI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KKyNpbmNsdWRlIDxzdHJlYW1idWY+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHR5cGVpbmZvPgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8dmFsYXJyYXk+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyNpbmNsdWRlIDxhcnJheT4KKyNpbmNsdWRlIDxhdG9taWM+CisjaW5jbHVkZSA8Y2hyb25vPgorI2luY2x1ZGUgPGNvbmRpdGlvbl92YXJpYWJsZT4KKyNpbmNsdWRlIDxmb3J3YXJkX2xpc3Q+CisjaW5jbHVkZSA8ZnV0dXJlPgorI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisjaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8cmFuZG9tPgorI2luY2x1ZGUgPHJhdGlvPgorI2luY2x1ZGUgPHJlZ2V4PgorI2luY2x1ZGUgPHN5c3RlbV9lcnJvcj4KKyNpbmNsdWRlIDx0aHJlYWQ+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYml0cy9zdGR0cjFjKysuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9iaXRzL3N0ZHRyMWMrKy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZDljYjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYml0cy9zdGR0cjFjKysuaApAQCAtMCwwICsxLDUzIEBACisvLyBDKysgaW5jbHVkZXMgdXNlZCBmb3IgcHJlY29tcGlsaW5nIFRSMSAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHN0ZHRyMWMrKy5oCisgKiAgVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBmaWxlIGZvciBhIHByZWNvbXBpbGVkIGhlYWRlci4KKyAqLworCisjaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KKworI2luY2x1ZGUgPHRyMS9hcnJheT4KKyNpbmNsdWRlIDx0cjEvY2N0eXBlPgorI2luY2x1ZGUgPHRyMS9jZmVudj4KKyNpbmNsdWRlIDx0cjEvY2Zsb2F0PgorI2luY2x1ZGUgPHRyMS9jaW50dHlwZXM+CisjaW5jbHVkZSA8dHIxL2NsaW1pdHM+CisjaW5jbHVkZSA8dHIxL2NtYXRoPgorI2luY2x1ZGUgPHRyMS9jb21wbGV4PgorI2luY2x1ZGUgPHRyMS9jc3RkYXJnPgorI2luY2x1ZGUgPHRyMS9jc3RkYm9vbD4KKyNpbmNsdWRlIDx0cjEvY3N0ZGludD4KKyNpbmNsdWRlIDx0cjEvY3N0ZGlvPgorI2luY2x1ZGUgPHRyMS9jc3RkbGliPgorI2luY2x1ZGUgPHRyMS9jdGdtYXRoPgorI2luY2x1ZGUgPHRyMS9jdGltZT4KKyNpbmNsdWRlIDx0cjEvY3djaGFyPgorI2luY2x1ZGUgPHRyMS9jd2N0eXBlPgorI2luY2x1ZGUgPHRyMS9mdW5jdGlvbmFsPgorI2luY2x1ZGUgPHRyMS9yYW5kb20+CisjaW5jbHVkZSA8dHIxL3R1cGxlPgorI2luY2x1ZGUgPHRyMS91bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUgPHRyMS91bm9yZGVyZWRfc2V0PgorI2luY2x1ZGUgPHRyMS91dGlsaXR5PgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2JpdHMvdGltZV9tZW1iZXJzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYml0cy90aW1lX21lbWJlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDZmYWY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2JpdHMvdGltZV9tZW1iZXJzLmgKQEAgLTAsMCArMSw5MCBAQAorLy8gc3RkOjp0aW1lX2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgZ2VuZXJpYyB2ZXJzaW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRpbWVfbWVtYmVycy5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQgZnVuY3Rpb25zCisvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgZnVuY3Rpb25zCisvLworCisvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzKSAKKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCkKKyAgICB7IAorICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBfU19nZXRfY19uYW1lKCk7CisgICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyAKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY2FjaGVfdHlwZSogX19jYWNoZSwgc2l6ZV90IF9fcmVmcykgCisgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKF9fY2FjaGUpCisgICAgeyAKKyAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbmFtZSgpOworICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsgCisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLCAKKwkJCQkgICAgIHNpemVfdCBfX3JlZnMpIAorICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKQorICAgIHsKKyAgICAgIGlmIChfX2J1aWx0aW5fc3RyY21wKF9fcywgX1NfZ2V0X2NfbmFtZSgpKSAhPSAwKQorCXsKKwkgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fYnVpbHRpbl9zdHJsZW4oX19zKSArIDE7CisJICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsKKwkgIF9fYnVpbHRpbl9tZW1jcHkoX190bXAsIF9fcywgX19sZW4pOworCSAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKKwl9CisgICAgICBlbHNlCisJX01fbmFtZV90aW1lcHVuY3QgPSBfU19nZXRfY19uYW1lKCk7CisKKyAgICAgIF9fdHJ5CisJeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOyB9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBpZiAoX01fbmFtZV90aW1lcHVuY3QgIT0gX1NfZ2V0X2NfbmFtZSgpKQorCSAgICBkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+Ojp+X190aW1lcHVuY3QoKQorICAgIHsgCisgICAgICBpZiAoX01fbmFtZV90aW1lcHVuY3QgIT0gX1NfZ2V0X2NfbmFtZSgpKQorCWRlbGV0ZSBbXSBfTV9uYW1lX3RpbWVwdW5jdDsKKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV90aW1lcHVuY3QpOyAKKyAgICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYXJyYXkgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2FycmF5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNzRjODgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2FycmF5CkBAIC0wLDAgKzEsNjAgQEAKKy8vIDxhcnJheT4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL2FycmF5CisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0FSUkFZCisjZGVmaW5lIF9HTElCQ1hYX0FSUkFZIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaWZuZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisjIGluY2x1ZGUgPGJpdHMvYysrMHhfd2FybmluZy5oPgorI2Vsc2UKKworI2lmIGRlZmluZWQoX0dMSUJDWFhfSU5DTFVERV9BU19UUjEpCisjICBlcnJvciBDKysweCBoZWFkZXIgY2Fubm90IGJlIGluY2x1ZGVkIGZyb20gVFIxIGhlYWRlcgorI2VuZGlmCisKKyNpbmNsdWRlIDxiaXRzL3N0bF9hbGdvYmFzZS5oPgorCisjaWYgZGVmaW5lZChfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYKQorIyAgaW5jbHVkZSA8dHIxX2ltcGwvYXJyYXk+CisjZWxzZQorIyAgZGVmaW5lIF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgKKyMgIGRlZmluZSBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxCisjICBkZWZpbmUgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9UUjEKKyMgIGRlZmluZSBfR0xJQkNYWF9UUjEKKyMgIGluY2x1ZGUgPHRyMV9pbXBsL2FycmF5PgorIyAgdW5kZWYgX0dMSUJDWFhfVFIxCisjICB1bmRlZiBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorIyAgdW5kZWYgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMQorIyAgdW5kZWYgX0dMSUJDWFhfSU5DTFVERV9BU19DWFgwWAorI2VuZGlmCisKKyNlbmRpZiAvLyBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworCisjZW5kaWYgLy8gX0dMSUJDWFhfQVJSQVkKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYXRvbWljIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9hdG9taWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc3ZmQwYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYXRvbWljCkBAIC0wLDAgKzEsODIyIEBACisvLyAtKi0gQysrIC0qLSBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYXRvbWljCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisvLyBCYXNlZCBvbiAiQysrIEF0b21pYyBUeXBlcyBhbmQgT3BlcmF0aW9ucyIgYnkgSGFucyBCb2VobSBhbmQgTGF3cmVuY2UgQ3Jvd2wuCisvLyBodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA3L24yNDI3Lmh0bWwKKworI2lmbmRlZiBfR0xJQkNYWF9BVE9NSUMKKyNkZWZpbmUgX0dMSUJDWFhfQVRPTUlDIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaWZuZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisjIGluY2x1ZGUgPGJpdHMvYysrMHhfd2FybmluZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxiaXRzL2F0b21pY19iYXNlLmg+CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgYXRvbWljcworICAgKiBAeworICAgKi8KKworICAvLy8ga2lsbF9kZXBlbmRlbmN5CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAga2lsbF9kZXBlbmRlbmN5KF9UcCBfX3kpCisgICAgeworICAgICAgX1RwIHJldChfX3kpOworICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgaW5saW5lIG1lbW9yeV9vcmRlcgorICBfX2NhbGN1bGF0ZV9tZW1vcnlfb3JkZXIobWVtb3J5X29yZGVyIF9fbSkKKyAgeworICAgIGNvbnN0IGJvb2wgX19jb25kMSA9IF9fbSA9PSBtZW1vcnlfb3JkZXJfcmVsZWFzZTsKKyAgICBjb25zdCBib29sIF9fY29uZDIgPSBfX20gPT0gbWVtb3J5X29yZGVyX2FjcV9yZWw7CisgICAgbWVtb3J5X29yZGVyIF9fbW8xKF9fY29uZDEgPyBtZW1vcnlfb3JkZXJfcmVsYXhlZCA6IF9fbSk7CisgICAgbWVtb3J5X29yZGVyIF9fbW8yKF9fY29uZDIgPyBtZW1vcnlfb3JkZXJfYWNxdWlyZSA6IF9fbW8xKTsKKyAgICByZXR1cm4gX19tbzI7CisgIH0KKworICAvLworICAvLyBUaHJlZSBuZXN0ZWQgbmFtZXNwYWNlcyBmb3IgYXRvbWljIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCisgIC8vCisgIC8vIFRoZSBuZXN0ZWQgbmFtZXNwYWNlIGlubGluZWQgaW50byBzdGQ6OiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSB2YWx1ZQorICAvLyBvZiB0aGUgX0dMSUJDWFhfQVRPTUlDX1BST1BFUlRZIG1hY3JvIGFuZCB0aGUgcmVzdWx0aW5nCisgIC8vIEFUT01JQ18qX0xPQ0tfRlJFRSBtYWNyb3MuIFNlZSBmaWxlIGF0b21pY19iYXNlLmguCisgIC8vCisgIC8vIDAgPT0gX19hdG9taWMwID09IE5ldmVyIGxvY2stZnJlZQorICAvLyAxID09IF9fYXRvbWljMSA9PSBCZXN0IGF2YWlsYWJsZSwgc29tZXRpbWVzIGxvY2stZnJlZQorICAvLyAyID09IF9fYXRvbWljMiA9PSBBbHdheXMgbG9jay1mcmVlCisjaW5jbHVkZSA8Yml0cy9hdG9taWNfMC5oPgorI2luY2x1ZGUgPGJpdHMvYXRvbWljXzIuaD4KKworICAvLy8gYXRvbWljCisgIC8vLyAyOS40LjMsIEdlbmVyaWMgYXRvbWljIHR5cGUsIHByaW1hcnkgY2xhc3MgdGVtcGxhdGUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgYXRvbWljCisgICAgeworICAgIHByaXZhdGU6CisgICAgICBfVHAgX01faTsKKworICAgIHB1YmxpYzoKKyAgICAgIGF0b21pYygpID0gZGVmYXVsdDsKKyAgICAgIH5hdG9taWMoKSA9IGRlZmF1bHQ7CisgICAgICBhdG9taWMoY29uc3QgYXRvbWljJikgPSBkZWxldGU7CisgICAgICBhdG9taWMmIG9wZXJhdG9yPShjb25zdCBhdG9taWMmKSB2b2xhdGlsZSA9IGRlbGV0ZTsKKworICAgICAgYXRvbWljKF9UcCBfX2kpIDogX01faShfX2kpIHsgfQorCisgICAgICBvcGVyYXRvciBfVHAoKSBjb25zdDsKKworICAgICAgX1RwCisgICAgICBvcGVyYXRvcj0oX1RwIF9faSkgeyBzdG9yZShfX2kpOyByZXR1cm4gX19pOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIGlzX2xvY2tfZnJlZSgpIGNvbnN0IHZvbGF0aWxlOworCisgICAgICB2b2lkCisgICAgICBzdG9yZShfVHAsIG1lbW9yeV9vcmRlciA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSB2b2xhdGlsZTsKKworICAgICAgX1RwCisgICAgICBsb2FkKG1lbW9yeV9vcmRlciA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBjb25zdCB2b2xhdGlsZTsKKworICAgICAgX1RwCisgICAgICBleGNoYW5nZShfVHAgX19pLCBtZW1vcnlfb3JkZXIgPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgdm9sYXRpbGU7CisKKyAgICAgIGJvb2wKKyAgICAgIGNvbXBhcmVfZXhjaGFuZ2Vfd2VhayhfVHAmLCBfVHAsIG1lbW9yeV9vcmRlciwgbWVtb3J5X29yZGVyKSB2b2xhdGlsZTsKKworICAgICAgYm9vbAorICAgICAgY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoX1RwJiwgX1RwLCBtZW1vcnlfb3JkZXIsIG1lbW9yeV9vcmRlcikgdm9sYXRpbGU7CisKKyAgICAgIGJvb2wKKyAgICAgIGNvbXBhcmVfZXhjaGFuZ2Vfd2VhayhfVHAmLCBfVHAsCisJCQkgICAgbWVtb3J5X29yZGVyID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIHZvbGF0aWxlOworCisgICAgICBib29sCisgICAgICBjb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhfVHAmLCBfVHAsCisJCQkgICAgICBtZW1vcnlfb3JkZXIgPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgdm9sYXRpbGU7CisgICAgfTsKKworCisgIC8vLyBQYXJ0aWFsIHNwZWNpYWxpemF0aW9uIGZvciBwb2ludGVyIHR5cGVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGF0b21pYzxfVHAqPiA6IGF0b21pY19hZGRyZXNzCisgICAgeworICAgICAgYXRvbWljKCkgPSBkZWZhdWx0OworICAgICAgfmF0b21pYygpID0gZGVmYXVsdDsKKyAgICAgIGF0b21pYyhjb25zdCBhdG9taWMmKSA9IGRlbGV0ZTsKKyAgICAgIGF0b21pYyYgb3BlcmF0b3I9KGNvbnN0IGF0b21pYyYpIHZvbGF0aWxlID0gZGVsZXRlOworCisgICAgICBhdG9taWMoX1RwKiBfX3YpIDogYXRvbWljX2FkZHJlc3MoX192KSB7IH0KKworICAgICAgdm9pZAorICAgICAgc3RvcmUoX1RwKiBfX3YsIG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyAgICAgIHsgYXRvbWljX2FkZHJlc3M6OnN0b3JlKF9fdiwgX19tKTsgfQorCisgICAgICBfVHAqCisgICAgICBsb2FkKG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcCo+KGF0b21pY19hZGRyZXNzOjpsb2FkKF9fbSkpOyB9CisKKyAgICAgIF9UcCoKKyAgICAgIGV4Y2hhbmdlKF9UcCogX192LCBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHAqPihhdG9taWNfYWRkcmVzczo6ZXhjaGFuZ2UoX192LCBfX20pKTsgfQorCisgICAgICBib29sCisgICAgICBjb21wYXJlX2V4Y2hhbmdlX3dlYWsoX1RwKiYsIF9UcCosIG1lbW9yeV9vcmRlciwgbWVtb3J5X29yZGVyKTsKKworICAgICAgYm9vbAorICAgICAgY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoX1RwKiYsIF9UcCosIG1lbW9yeV9vcmRlciwgbWVtb3J5X29yZGVyKTsKKworICAgICAgYm9vbAorICAgICAgY29tcGFyZV9leGNoYW5nZV93ZWFrKF9UcComLCBfVHAqLCBtZW1vcnlfb3JkZXIgPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7CisKKyAgICAgIGJvb2wKKyAgICAgIGNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKF9UcComLCBfVHAqLCBtZW1vcnlfb3JkZXIgPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7CisKKyAgICAgIF9UcCoKKyAgICAgIGZldGNoX2FkZChwdHJkaWZmX3QsIG1lbW9yeV9vcmRlciA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KTsKKworICAgICAgX1RwKgorICAgICAgZmV0Y2hfc3ViKHB0cmRpZmZfdCwgbWVtb3J5X29yZGVyID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpOworCisgICAgICBvcGVyYXRvciBfVHAqKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGxvYWQoKTsgfQorCisgICAgICBfVHAqCisgICAgICBvcGVyYXRvcj0oX1RwKiBfX3YpCisgICAgICB7CisJc3RvcmUoX192KTsKKwlyZXR1cm4gX192OworICAgICAgfQorCisgICAgICBfVHAqCisgICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gZmV0Y2hfYWRkKDEpOyB9CisKKyAgICAgIF9UcCoKKyAgICAgIG9wZXJhdG9yLS0oaW50KSB7IHJldHVybiBmZXRjaF9zdWIoMSk7IH0KKworICAgICAgX1RwKgorICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuIGZldGNoX2FkZCgxKSArIDE7IH0KKworICAgICAgX1RwKgorICAgICAgb3BlcmF0b3ItLSgpIHsgcmV0dXJuIGZldGNoX3N1YigxKSAtIDE7IH0KKworICAgICAgX1RwKgorICAgICAgb3BlcmF0b3IrPShwdHJkaWZmX3QgX19kKQorICAgICAgeyByZXR1cm4gZmV0Y2hfYWRkKF9fZCkgKyBfX2Q7IH0KKworICAgICAgX1RwKgorICAgICAgb3BlcmF0b3ItPShwdHJkaWZmX3QgX19kKQorICAgICAgeyByZXR1cm4gZmV0Y2hfc3ViKF9fZCkgLSBfX2Q7IH0KKyAgICB9OworCisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciB2b2lkKgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGF0b21pYzx2b2lkKj4gOiBwdWJsaWMgYXRvbWljX2FkZHJlc3MKKyAgICB7CisgICAgICB0eXBlZGVmIHZvaWQqIAkJCV9faW50ZWdyYWxfdHlwZTsKKyAgICAgIHR5cGVkZWYgYXRvbWljX2FkZHJlc3MgCQlfX2Jhc2VfdHlwZTsKKworICAgICAgYXRvbWljKCkgPSBkZWZhdWx0OworICAgICAgfmF0b21pYygpID0gZGVmYXVsdDsKKyAgICAgIGF0b21pYyhjb25zdCBhdG9taWMmKSA9IGRlbGV0ZTsKKyAgICAgIGF0b21pYyYgb3BlcmF0b3I9KGNvbnN0IGF0b21pYyYpIHZvbGF0aWxlID0gZGVsZXRlOworCisgICAgICBhdG9taWMoX19pbnRlZ3JhbF90eXBlIF9faSkgOiBfX2Jhc2VfdHlwZShfX2kpIHsgfQorCisgICAgICB1c2luZyBfX2Jhc2VfdHlwZTo6b3BlcmF0b3IgX19pbnRlZ3JhbF90eXBlOworICAgICAgdXNpbmcgX19iYXNlX3R5cGU6Om9wZXJhdG9yPTsKKyAgICB9OworCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBmb3IgYm9vbC4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBhdG9taWM8Ym9vbD4gOiBwdWJsaWMgYXRvbWljX2Jvb2wKKyAgICB7CisgICAgICB0eXBlZGVmIGJvb2wgCQkJX19pbnRlZ3JhbF90eXBlOworICAgICAgdHlwZWRlZiBhdG9taWNfYm9vbCAJCV9fYmFzZV90eXBlOworCisgICAgICBhdG9taWMoKSA9IGRlZmF1bHQ7CisgICAgICB+YXRvbWljKCkgPSBkZWZhdWx0OworICAgICAgYXRvbWljKGNvbnN0IGF0b21pYyYpID0gZGVsZXRlOworICAgICAgYXRvbWljJiBvcGVyYXRvcj0oY29uc3QgYXRvbWljJikgdm9sYXRpbGUgPSBkZWxldGU7CisKKyAgICAgIGF0b21pYyhfX2ludGVncmFsX3R5cGUgX19pKSA6IF9fYmFzZV90eXBlKF9faSkgeyB9CisKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlOjpvcGVyYXRvciBfX2ludGVncmFsX3R5cGU7CisgICAgICB1c2luZyBfX2Jhc2VfdHlwZTo6b3BlcmF0b3I9OworICAgIH07CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciBjaGFyLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGF0b21pYzxjaGFyPiA6IHB1YmxpYyBhdG9taWNfY2hhcgorICAgIHsKKyAgICAgIHR5cGVkZWYgY2hhciAJCQlfX2ludGVncmFsX3R5cGU7CisgICAgICB0eXBlZGVmIGF0b21pY19jaGFyIAkJX19iYXNlX3R5cGU7CisKKyAgICAgIGF0b21pYygpID0gZGVmYXVsdDsKKyAgICAgIH5hdG9taWMoKSA9IGRlZmF1bHQ7CisgICAgICBhdG9taWMoY29uc3QgYXRvbWljJikgPSBkZWxldGU7CisgICAgICBhdG9taWMmIG9wZXJhdG9yPShjb25zdCBhdG9taWMmKSB2b2xhdGlsZSA9IGRlbGV0ZTsKKworICAgICAgYXRvbWljKF9faW50ZWdyYWxfdHlwZSBfX2kpIDogX19iYXNlX3R5cGUoX19pKSB7IH0KKworICAgICAgdXNpbmcgX19iYXNlX3R5cGU6Om9wZXJhdG9yIF9faW50ZWdyYWxfdHlwZTsKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlOjpvcGVyYXRvcj07CisgICAgfTsKKworICAvLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb24gZm9yIHNpZ25lZCBjaGFyLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGF0b21pYzxzaWduZWQgY2hhcj4gOiBwdWJsaWMgYXRvbWljX3NjaGFyCisgICAgeworICAgICAgdHlwZWRlZiBzaWduZWQgY2hhciAJCV9faW50ZWdyYWxfdHlwZTsKKyAgICAgIHR5cGVkZWYgYXRvbWljX3NjaGFyIAkJX19iYXNlX3R5cGU7CisKKyAgICAgIGF0b21pYygpID0gZGVmYXVsdDsKKyAgICAgIH5hdG9taWMoKSA9IGRlZmF1bHQ7CisgICAgICBhdG9taWMoY29uc3QgYXRvbWljJikgPSBkZWxldGU7CisgICAgICBhdG9taWMmIG9wZXJhdG9yPShjb25zdCBhdG9taWMmKSB2b2xhdGlsZSA9IGRlbGV0ZTsKKworICAgICAgYXRvbWljKF9faW50ZWdyYWxfdHlwZSBfX2kpIDogX19iYXNlX3R5cGUoX19pKSB7IH0KKworICAgICAgdXNpbmcgX19iYXNlX3R5cGU6Om9wZXJhdG9yIF9faW50ZWdyYWxfdHlwZTsKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlOjpvcGVyYXRvcj07CisgICAgfTsKKworICAvLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb24gZm9yIHVuc2lnbmVkIGNoYXIuCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgYXRvbWljPHVuc2lnbmVkIGNoYXI+IDogcHVibGljIGF0b21pY191Y2hhcgorICAgIHsKKyAgICAgIHR5cGVkZWYgdW5zaWduZWQgY2hhciAJCV9faW50ZWdyYWxfdHlwZTsKKyAgICAgIHR5cGVkZWYgYXRvbWljX3VjaGFyIAkJX19iYXNlX3R5cGU7CisKKyAgICAgIGF0b21pYygpID0gZGVmYXVsdDsKKyAgICAgIH5hdG9taWMoKSA9IGRlZmF1bHQ7CisgICAgICBhdG9taWMoY29uc3QgYXRvbWljJikgPSBkZWxldGU7CisgICAgICBhdG9taWMmIG9wZXJhdG9yPShjb25zdCBhdG9taWMmKSB2b2xhdGlsZSA9IGRlbGV0ZTsKKworICAgICAgYXRvbWljKF9faW50ZWdyYWxfdHlwZSBfX2kpIDogX19iYXNlX3R5cGUoX19pKSB7IH0KKworICAgICAgdXNpbmcgX19iYXNlX3R5cGU6Om9wZXJhdG9yIF9faW50ZWdyYWxfdHlwZTsKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlOjpvcGVyYXRvcj07CisgICAgfTsKKworICAvLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb24gZm9yIHNob3J0LgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGF0b21pYzxzaG9ydD4gOiBwdWJsaWMgYXRvbWljX3Nob3J0CisgICAgeworICAgICAgdHlwZWRlZiBzaG9ydCAJCQlfX2ludGVncmFsX3R5cGU7CisgICAgICB0eXBlZGVmIGF0b21pY19zaG9ydCAJCV9fYmFzZV90eXBlOworCisgICAgICBhdG9taWMoKSA9IGRlZmF1bHQ7CisgICAgICB+YXRvbWljKCkgPSBkZWZhdWx0OworICAgICAgYXRvbWljKGNvbnN0IGF0b21pYyYpID0gZGVsZXRlOworICAgICAgYXRvbWljJiBvcGVyYXRvcj0oY29uc3QgYXRvbWljJikgdm9sYXRpbGUgPSBkZWxldGU7CisKKyAgICAgIGF0b21pYyhfX2ludGVncmFsX3R5cGUgX19pKSA6IF9fYmFzZV90eXBlKF9faSkgeyB9CisKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlOjpvcGVyYXRvciBfX2ludGVncmFsX3R5cGU7CisgICAgICB1c2luZyBfX2Jhc2VfdHlwZTo6b3BlcmF0b3I9OworICAgIH07CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciB1bnNpZ25lZCBzaG9ydC4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBhdG9taWM8dW5zaWduZWQgc2hvcnQ+IDogcHVibGljIGF0b21pY191c2hvcnQKKyAgICB7CisgICAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IAkgICAgICAJX19pbnRlZ3JhbF90eXBlOworICAgICAgdHlwZWRlZiBhdG9taWNfdXNob3J0IAkJX19iYXNlX3R5cGU7CisKKyAgICAgIGF0b21pYygpID0gZGVmYXVsdDsKKyAgICAgIH5hdG9taWMoKSA9IGRlZmF1bHQ7CisgICAgICBhdG9taWMoY29uc3QgYXRvbWljJikgPSBkZWxldGU7CisgICAgICBhdG9taWMmIG9wZXJhdG9yPShjb25zdCBhdG9taWMmKSB2b2xhdGlsZSA9IGRlbGV0ZTsKKworICAgICAgYXRvbWljKF9faW50ZWdyYWxfdHlwZSBfX2kpIDogX19iYXNlX3R5cGUoX19pKSB7IH0KKworICAgICAgdXNpbmcgX19iYXNlX3R5cGU6Om9wZXJhdG9yIF9faW50ZWdyYWxfdHlwZTsKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlOjpvcGVyYXRvcj07CisgICAgfTsKKworICAvLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb24gZm9yIGludC4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBhdG9taWM8aW50PiA6IGF0b21pY19pbnQKKyAgICB7CisgICAgICB0eXBlZGVmIGludCAJCQlfX2ludGVncmFsX3R5cGU7CisgICAgICB0eXBlZGVmIGF0b21pY19pbnQgCQlfX2Jhc2VfdHlwZTsKKworICAgICAgYXRvbWljKCkgPSBkZWZhdWx0OworICAgICAgfmF0b21pYygpID0gZGVmYXVsdDsKKyAgICAgIGF0b21pYyhjb25zdCBhdG9taWMmKSA9IGRlbGV0ZTsKKyAgICAgIGF0b21pYyYgb3BlcmF0b3I9KGNvbnN0IGF0b21pYyYpIHZvbGF0aWxlID0gZGVsZXRlOworCisgICAgICBhdG9taWMoX19pbnRlZ3JhbF90eXBlIF9faSkgOiBfX2Jhc2VfdHlwZShfX2kpIHsgfQorCisgICAgICB1c2luZyBfX2Jhc2VfdHlwZTo6b3BlcmF0b3IgX19pbnRlZ3JhbF90eXBlOworICAgICAgdXNpbmcgX19iYXNlX3R5cGU6Om9wZXJhdG9yPTsKKyAgICB9OworCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBmb3IgdW5zaWduZWQgaW50LgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGF0b21pYzx1bnNpZ25lZCBpbnQ+IDogcHVibGljIGF0b21pY191aW50CisgICAgeworICAgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQJCV9faW50ZWdyYWxfdHlwZTsKKyAgICAgIHR5cGVkZWYgYXRvbWljX3VpbnQgCQlfX2Jhc2VfdHlwZTsKKworICAgICAgYXRvbWljKCkgPSBkZWZhdWx0OworICAgICAgfmF0b21pYygpID0gZGVmYXVsdDsKKyAgICAgIGF0b21pYyhjb25zdCBhdG9taWMmKSA9IGRlbGV0ZTsKKyAgICAgIGF0b21pYyYgb3BlcmF0b3I9KGNvbnN0IGF0b21pYyYpIHZvbGF0aWxlID0gZGVsZXRlOworCisgICAgICBhdG9taWMoX19pbnRlZ3JhbF90eXBlIF9faSkgOiBfX2Jhc2VfdHlwZShfX2kpIHsgfQorCisgICAgICB1c2luZyBfX2Jhc2VfdHlwZTo6b3BlcmF0b3IgX19pbnRlZ3JhbF90eXBlOworICAgICAgdXNpbmcgX19iYXNlX3R5cGU6Om9wZXJhdG9yPTsKKyAgICB9OworCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBmb3IgbG9uZy4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBhdG9taWM8bG9uZz4gOiBwdWJsaWMgYXRvbWljX2xvbmcKKyAgICB7CisgICAgICB0eXBlZGVmIGxvbmcgCQkJX19pbnRlZ3JhbF90eXBlOworICAgICAgdHlwZWRlZiBhdG9taWNfbG9uZyAJCV9fYmFzZV90eXBlOworCisgICAgICBhdG9taWMoKSA9IGRlZmF1bHQ7CisgICAgICB+YXRvbWljKCkgPSBkZWZhdWx0OworICAgICAgYXRvbWljKGNvbnN0IGF0b21pYyYpID0gZGVsZXRlOworICAgICAgYXRvbWljJiBvcGVyYXRvcj0oY29uc3QgYXRvbWljJikgdm9sYXRpbGUgPSBkZWxldGU7CisKKyAgICAgIGF0b21pYyhfX2ludGVncmFsX3R5cGUgX19pKSA6IF9fYmFzZV90eXBlKF9faSkgeyB9CisKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlOjpvcGVyYXRvciBfX2ludGVncmFsX3R5cGU7CisgICAgICB1c2luZyBfX2Jhc2VfdHlwZTo6b3BlcmF0b3I9OworICAgIH07CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciB1bnNpZ25lZCBsb25nLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGF0b21pYzx1bnNpZ25lZCBsb25nPiA6IHB1YmxpYyBhdG9taWNfdWxvbmcKKyAgICB7CisgICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgCQlfX2ludGVncmFsX3R5cGU7CisgICAgICB0eXBlZGVmIGF0b21pY191bG9uZyAJCV9fYmFzZV90eXBlOworCisgICAgICBhdG9taWMoKSA9IGRlZmF1bHQ7CisgICAgICB+YXRvbWljKCkgPSBkZWZhdWx0OworICAgICAgYXRvbWljKGNvbnN0IGF0b21pYyYpID0gZGVsZXRlOworICAgICAgYXRvbWljJiBvcGVyYXRvcj0oY29uc3QgYXRvbWljJikgdm9sYXRpbGUgPSBkZWxldGU7CisKKyAgICAgIGF0b21pYyhfX2ludGVncmFsX3R5cGUgX19pKSA6IF9fYmFzZV90eXBlKF9faSkgeyB9CisKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlOjpvcGVyYXRvciBfX2ludGVncmFsX3R5cGU7CisgICAgICB1c2luZyBfX2Jhc2VfdHlwZTo6b3BlcmF0b3I9OworICAgIH07CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciBsb25nIGxvbmcuCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgYXRvbWljPGxvbmcgbG9uZz4gOiBwdWJsaWMgYXRvbWljX2xsb25nCisgICAgeworICAgICAgdHlwZWRlZiBsb25nIGxvbmcgCQlfX2ludGVncmFsX3R5cGU7CisgICAgICB0eXBlZGVmIGF0b21pY19sbG9uZyAJCV9fYmFzZV90eXBlOworCisgICAgICBhdG9taWMoKSA9IGRlZmF1bHQ7CisgICAgICB+YXRvbWljKCkgPSBkZWZhdWx0OworICAgICAgYXRvbWljKGNvbnN0IGF0b21pYyYpID0gZGVsZXRlOworICAgICAgYXRvbWljJiBvcGVyYXRvcj0oY29uc3QgYXRvbWljJikgdm9sYXRpbGUgPSBkZWxldGU7CisKKyAgICAgIGF0b21pYyhfX2ludGVncmFsX3R5cGUgX19pKSA6IF9fYmFzZV90eXBlKF9faSkgeyB9CisKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlOjpvcGVyYXRvciBfX2ludGVncmFsX3R5cGU7CisgICAgICB1c2luZyBfX2Jhc2VfdHlwZTo6b3BlcmF0b3I9OworICAgIH07CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciB1bnNpZ25lZCBsb25nIGxvbmcuCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgYXRvbWljPHVuc2lnbmVkIGxvbmcgbG9uZz4gOiBwdWJsaWMgYXRvbWljX3VsbG9uZworICAgIHsKKyAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nICAgICAgIAlfX2ludGVncmFsX3R5cGU7CisgICAgICB0eXBlZGVmIGF0b21pY191bGxvbmcgCQlfX2Jhc2VfdHlwZTsKKworICAgICAgYXRvbWljKCkgPSBkZWZhdWx0OworICAgICAgfmF0b21pYygpID0gZGVmYXVsdDsKKyAgICAgIGF0b21pYyhjb25zdCBhdG9taWMmKSA9IGRlbGV0ZTsKKyAgICAgIGF0b21pYyYgb3BlcmF0b3I9KGNvbnN0IGF0b21pYyYpIHZvbGF0aWxlID0gZGVsZXRlOworCisgICAgICBhdG9taWMoX19pbnRlZ3JhbF90eXBlIF9faSkgOiBfX2Jhc2VfdHlwZShfX2kpIHsgfQorCisgICAgICB1c2luZyBfX2Jhc2VfdHlwZTo6b3BlcmF0b3IgX19pbnRlZ3JhbF90eXBlOworICAgICAgdXNpbmcgX19iYXNlX3R5cGU6Om9wZXJhdG9yPTsKKyAgICB9OworCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBmb3Igd2NoYXJfdC4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBhdG9taWM8d2NoYXJfdD4gOiBwdWJsaWMgYXRvbWljX3djaGFyX3QKKyAgICB7CisgICAgICB0eXBlZGVmIHdjaGFyX3QgCQkJX19pbnRlZ3JhbF90eXBlOworICAgICAgdHlwZWRlZiBhdG9taWNfd2NoYXJfdCAJCV9fYmFzZV90eXBlOworCisgICAgICBhdG9taWMoKSA9IGRlZmF1bHQ7CisgICAgICB+YXRvbWljKCkgPSBkZWZhdWx0OworICAgICAgYXRvbWljKGNvbnN0IGF0b21pYyYpID0gZGVsZXRlOworICAgICAgYXRvbWljJiBvcGVyYXRvcj0oY29uc3QgYXRvbWljJikgdm9sYXRpbGUgPSBkZWxldGU7CisKKyAgICAgIGF0b21pYyhfX2ludGVncmFsX3R5cGUgX19pKSA6IF9fYmFzZV90eXBlKF9faSkgeyB9CisKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlOjpvcGVyYXRvciBfX2ludGVncmFsX3R5cGU7CisgICAgICB1c2luZyBfX2Jhc2VfdHlwZTo6b3BlcmF0b3I9OworICAgIH07CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciBjaGFyMTZfdC4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBhdG9taWM8Y2hhcjE2X3Q+IDogcHVibGljIGF0b21pY19jaGFyMTZfdAorICAgIHsKKyAgICAgIHR5cGVkZWYgY2hhcjE2X3QgCQkJX19pbnRlZ3JhbF90eXBlOworICAgICAgdHlwZWRlZiBhdG9taWNfY2hhcjE2X3QgCQlfX2Jhc2VfdHlwZTsKKworICAgICAgYXRvbWljKCkgPSBkZWZhdWx0OworICAgICAgfmF0b21pYygpID0gZGVmYXVsdDsKKyAgICAgIGF0b21pYyhjb25zdCBhdG9taWMmKSA9IGRlbGV0ZTsKKyAgICAgIGF0b21pYyYgb3BlcmF0b3I9KGNvbnN0IGF0b21pYyYpIHZvbGF0aWxlID0gZGVsZXRlOworCisgICAgICBhdG9taWMoX19pbnRlZ3JhbF90eXBlIF9faSkgOiBfX2Jhc2VfdHlwZShfX2kpIHsgfQorCisgICAgICB1c2luZyBfX2Jhc2VfdHlwZTo6b3BlcmF0b3IgX19pbnRlZ3JhbF90eXBlOworICAgICAgdXNpbmcgX19iYXNlX3R5cGU6Om9wZXJhdG9yPTsKKyAgICB9OworCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBmb3IgY2hhcjMyX3QuCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgYXRvbWljPGNoYXIzMl90PiA6IHB1YmxpYyBhdG9taWNfY2hhcjMyX3QKKyAgICB7CisgICAgICB0eXBlZGVmIGNoYXIzMl90IAkJCV9faW50ZWdyYWxfdHlwZTsKKyAgICAgIHR5cGVkZWYgYXRvbWljX2NoYXIzMl90IAkJX19iYXNlX3R5cGU7CisKKyAgICAgIGF0b21pYygpID0gZGVmYXVsdDsKKyAgICAgIH5hdG9taWMoKSA9IGRlZmF1bHQ7CisgICAgICBhdG9taWMoY29uc3QgYXRvbWljJikgPSBkZWxldGU7CisgICAgICBhdG9taWMmIG9wZXJhdG9yPShjb25zdCBhdG9taWMmKSB2b2xhdGlsZSA9IGRlbGV0ZTsKKworICAgICAgYXRvbWljKF9faW50ZWdyYWxfdHlwZSBfX2kpIDogX19iYXNlX3R5cGUoX19pKSB7IH0KKworICAgICAgdXNpbmcgX19iYXNlX3R5cGU6Om9wZXJhdG9yIF9faW50ZWdyYWxfdHlwZTsKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlOjpvcGVyYXRvcj07CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgYm9vbAorICAgIGF0b21pYzxfVHAqPjo6Y29tcGFyZV9leGNoYW5nZV93ZWFrKF9UcComIF9fciwgX1RwKiBfX3YsIG1lbW9yeV9vcmRlciBfX20xLAorCQkJCQltZW1vcnlfb3JkZXIgX19tMikKKyAgICB7CisgICAgICB2b2lkKiogX192ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmX19yKTsKKyAgICAgIHZvaWQqIF9fdnYgPSBzdGF0aWNfY2FzdDx2b2lkKj4oX192KTsKKyAgICAgIHJldHVybiBhdG9taWNfYWRkcmVzczo6Y29tcGFyZV9leGNoYW5nZV93ZWFrKCpfX3ZyLCBfX3Z2LCBfX20xLCBfX20yKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGJvb2wKKyAgICBhdG9taWM8X1RwKj46OmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKF9UcComIF9fciwgX1RwKiBfX3YsCisJCQkJCSAgbWVtb3J5X29yZGVyIF9fbTEsCisJCQkJCSAgbWVtb3J5X29yZGVyIF9fbTIpCisgICAgeworICAgICAgdm9pZCoqIF9fdnIgPSByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJl9fcik7CisgICAgICB2b2lkKiBfX3Z2ID0gc3RhdGljX2Nhc3Q8dm9pZCo+KF9fdik7CisgICAgICByZXR1cm4gYXRvbWljX2FkZHJlc3M6OmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKCpfX3ZyLCBfX3Z2LCBfX20xLCBfX20yKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGJvb2wKKyAgICBhdG9taWM8X1RwKj46OmNvbXBhcmVfZXhjaGFuZ2Vfd2VhayhfVHAqJiBfX3IsIF9UcCogX192LAorCQkJCQltZW1vcnlfb3JkZXIgX19tKQorICAgIHsKKyAgICAgIHJldHVybiBjb21wYXJlX2V4Y2hhbmdlX3dlYWsoX19yLCBfX3YsIF9fbSwKKwkJCQkgICBfX2NhbGN1bGF0ZV9tZW1vcnlfb3JkZXIoX19tKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBib29sCisgICAgYXRvbWljPF9UcCo+Ojpjb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhfVHAqJiBfX3IsIF9UcCogX192LAorCQkJCQltZW1vcnlfb3JkZXIgX19tKQorICAgIHsKKyAgICAgIHJldHVybiBjb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhfX3IsIF9fdiwgX19tLAorCQkJCSAgICAgX19jYWxjdWxhdGVfbWVtb3J5X29yZGVyKF9fbSkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwKgorICAgIGF0b21pYzxfVHAqPjo6ZmV0Y2hfYWRkKHB0cmRpZmZfdCBfX2QsIG1lbW9yeV9vcmRlciBfX20pCisgICAgeworICAgICAgdm9pZCogX19wID0gYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdCh0aGlzLCBzaXplb2YoX1RwKSAqIF9fZCwgX19tKTsKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxfVHAqPihfX3ApOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwKgorICAgIGF0b21pYzxfVHAqPjo6ZmV0Y2hfc3ViKHB0cmRpZmZfdCBfX2QsIG1lbW9yeV9vcmRlciBfX20pCisgICAgeworICAgICAgdm9pZCogX19wID0gYXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdCh0aGlzLCBzaXplb2YoX1RwKSAqIF9fZCwgX19tKTsKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxfVHAqPihfX3ApOworICAgIH0KKworICAvLyBDb252ZW5pZW5jZSBmdW5jdGlvbiBkZWZpbml0aW9ucywgYXRvbWljX2ZsYWcuCisgIGlubGluZSBib29sCisgIGF0b21pY19mbGFnX3Rlc3RfYW5kX3NldF9leHBsaWNpdChhdG9taWNfZmxhZyogX19hLCBtZW1vcnlfb3JkZXIgX19tKQorICB7IHJldHVybiBfX2EtPnRlc3RfYW5kX3NldChfX20pOyB9CisKKyAgaW5saW5lIHZvaWQKKyAgYXRvbWljX2ZsYWdfY2xlYXJfZXhwbGljaXQoYXRvbWljX2ZsYWcqIF9fYSwgbWVtb3J5X29yZGVyIF9fbSkKKyAgeyByZXR1cm4gX19hLT5jbGVhcihfX20pOyB9CisKKworICAvLyBDb252ZW5pZW5jZSBmdW5jdGlvbiBkZWZpbml0aW9ucywgYXRvbWljX2FkZHJlc3MuCisgIGlubGluZSBib29sCisgIGF0b21pY19pc19sb2NrX2ZyZWUoY29uc3QgYXRvbWljX2FkZHJlc3MqIF9fYSkKKyAgeyByZXR1cm4gX19hLT5pc19sb2NrX2ZyZWUoKTsgfQorCisgIGlubGluZSB2b2lkCisgIGF0b21pY19zdG9yZShhdG9taWNfYWRkcmVzcyogX19hLCB2b2lkKiBfX3YpCisgIHsgX19hLT5zdG9yZShfX3YpOyB9CisKKyAgaW5saW5lIHZvaWQKKyAgYXRvbWljX3N0b3JlX2V4cGxpY2l0KGF0b21pY19hZGRyZXNzKiBfX2EsIHZvaWQqIF9fdiwgbWVtb3J5X29yZGVyIF9fbSkKKyAgeyBfX2EtPnN0b3JlKF9fdiwgX19tKTsgfQorCisgIGlubGluZSB2b2lkKgorICBhdG9taWNfbG9hZChjb25zdCBhdG9taWNfYWRkcmVzcyogX19hKQorICB7IHJldHVybiBfX2EtPmxvYWQoKTsgfQorCisgIGlubGluZSB2b2lkKgorICBhdG9taWNfbG9hZF9leHBsaWNpdChjb25zdCBhdG9taWNfYWRkcmVzcyogX19hLCBtZW1vcnlfb3JkZXIgX19tKQorICB7IHJldHVybiBfX2EtPmxvYWQoX19tKTsgfQorCisgIGlubGluZSB2b2lkKgorICBhdG9taWNfZXhjaGFuZ2UoYXRvbWljX2FkZHJlc3MqIF9fYSwgdm9pZCogX192KQorICB7IHJldHVybiBfX2EtPmV4Y2hhbmdlKF9fdik7IH0KKworICBpbmxpbmUgdm9pZCoKKyAgYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KGF0b21pY19hZGRyZXNzKiBfX2EsIHZvaWQqIF9fdiwgbWVtb3J5X29yZGVyIF9fbSkKKyAgeyByZXR1cm4gX19hLT5leGNoYW5nZShfX3YsIF9fbSk7IH0KKworICBpbmxpbmUgYm9vbAorICBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrKGF0b21pY19hZGRyZXNzKiBfX2EsIHZvaWQqKiBfX3YxLCB2b2lkKiBfX3YyKQorICB7CisgICAgcmV0dXJuIF9fYS0+Y29tcGFyZV9leGNoYW5nZV93ZWFrKCpfX3YxLCBfX3YyLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCwKKwkJCQkgICAgICBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7CisgIH0KKworICBpbmxpbmUgYm9vbAorICBhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoYXRvbWljX2FkZHJlc3MqIF9fYSwKKwkJCSAgICAgICB2b2lkKiogX192MSwgdm9pZCogX192MikKKyAgeworICAgIHJldHVybiBfX2EtPmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKCpfX3YxLCBfX3YyLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCwKKwkJCQkgICAgICBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7CisgIH0KKworICBpbmxpbmUgYm9vbAorICBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0KGF0b21pY19hZGRyZXNzKiBfX2EsCisJCQkJCXZvaWQqKiBfX3YxLCB2b2lkKiBfX3YyLAorCQkJCQltZW1vcnlfb3JkZXIgX19tMSwgbWVtb3J5X29yZGVyIF9fbTIpCisgIHsgcmV0dXJuIF9fYS0+Y29tcGFyZV9leGNoYW5nZV93ZWFrKCpfX3YxLCBfX3YyLCBfX20xLCBfX20yKTsgfQorCisgIGlubGluZSBib29sCisgIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdChhdG9taWNfYWRkcmVzcyogX19hLAorCQkJCQkgIHZvaWQqKiBfX3YxLCB2b2lkKiBfX3YyLAorCQkJCQkgIG1lbW9yeV9vcmRlciBfX20xLCBtZW1vcnlfb3JkZXIgX19tMikKKyAgeyByZXR1cm4gX19hLT5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZygqX192MSwgX192MiwgX19tMSwgX19tMik7IH0KKworICBpbmxpbmUgdm9pZCoKKyAgYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdChhdG9taWNfYWRkcmVzcyogX19hLCBwdHJkaWZmX3QgX19kLAorCQkJICAgIG1lbW9yeV9vcmRlciBfX20pCisgIHsgcmV0dXJuIF9fYS0+ZmV0Y2hfYWRkKF9fZCwgX19tKTsgfQorCisgIGlubGluZSB2b2lkKgorICBhdG9taWNfZmV0Y2hfYWRkKGF0b21pY19hZGRyZXNzKiBfX2EsIHB0cmRpZmZfdCBfX2QpCisgIHsgcmV0dXJuIF9fYS0+ZmV0Y2hfYWRkKF9fZCk7IH0KKworICBpbmxpbmUgdm9pZCoKKyAgYXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdChhdG9taWNfYWRkcmVzcyogX19hLCBwdHJkaWZmX3QgX19kLAorCQkJICAgIG1lbW9yeV9vcmRlciBfX20pCisgIHsgcmV0dXJuIF9fYS0+ZmV0Y2hfc3ViKF9fZCwgX19tKTsgfQorCisgIGlubGluZSB2b2lkKgorICBhdG9taWNfZmV0Y2hfc3ViKGF0b21pY19hZGRyZXNzKiBfX2EsIHB0cmRpZmZfdCBfX2QpCisgIHsgcmV0dXJuIF9fYS0+ZmV0Y2hfc3ViKF9fZCk7IH0KKworCisgIC8vIENvbnZlbmllbmNlIGZ1bmN0aW9uIGRlZmluaXRpb25zLCBhdG9taWNfYm9vbC4KKyAgaW5saW5lIGJvb2wKKyAgYXRvbWljX2lzX2xvY2tfZnJlZShjb25zdCBhdG9taWNfYm9vbCogX19hKQorICB7IHJldHVybiBfX2EtPmlzX2xvY2tfZnJlZSgpOyB9CisKKyAgaW5saW5lIHZvaWQKKyAgYXRvbWljX3N0b3JlKGF0b21pY19ib29sKiBfX2EsIGJvb2wgX19pKQorICB7IF9fYS0+c3RvcmUoX19pKTsgfQorCisgIGlubGluZSB2b2lkCisgIGF0b21pY19zdG9yZV9leHBsaWNpdChhdG9taWNfYm9vbCogX19hLCBib29sIF9faSwgbWVtb3J5X29yZGVyIF9fbSkKKyAgeyBfX2EtPnN0b3JlKF9faSwgX19tKTsgfQorCisgIGlubGluZSBib29sCisgIGF0b21pY19sb2FkKGNvbnN0IGF0b21pY19ib29sKiBfX2EpCisgIHsgcmV0dXJuIF9fYS0+bG9hZCgpOyB9CisKKyAgaW5saW5lIGJvb2wKKyAgYXRvbWljX2xvYWRfZXhwbGljaXQoY29uc3QgYXRvbWljX2Jvb2wqIF9fYSwgbWVtb3J5X29yZGVyIF9fbSkKKyAgeyByZXR1cm4gX19hLT5sb2FkKF9fbSk7IH0KKworICBpbmxpbmUgYm9vbAorICBhdG9taWNfZXhjaGFuZ2UoYXRvbWljX2Jvb2wqIF9fYSwgYm9vbCBfX2kpCisgIHsgcmV0dXJuIF9fYS0+ZXhjaGFuZ2UoX19pKTsgfQorCisgIGlubGluZSBib29sCisgIGF0b21pY19leGNoYW5nZV9leHBsaWNpdChhdG9taWNfYm9vbCogX19hLCBib29sIF9faSwgbWVtb3J5X29yZGVyIF9fbSkKKyAgeyByZXR1cm4gX19hLT5leGNoYW5nZShfX2ksIF9fbSk7IH0KKworICBpbmxpbmUgYm9vbAorICBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrKGF0b21pY19ib29sKiBfX2EsIGJvb2wqIF9faTEsIGJvb2wgX19pMikKKyAgeworICAgIHJldHVybiBfX2EtPmNvbXBhcmVfZXhjaGFuZ2Vfd2VhaygqX19pMSwgX19pMiwgbWVtb3J5X29yZGVyX3NlcV9jc3QsCisJCQkJICAgICAgbWVtb3J5X29yZGVyX3NlcV9jc3QpOworICB9CisKKyAgaW5saW5lIGJvb2wKKyAgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKGF0b21pY19ib29sKiBfX2EsIGJvb2wqIF9faTEsIGJvb2wgX19pMikKKyAgeworICAgIHJldHVybiBfX2EtPmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKCpfX2kxLCBfX2kyLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCwKKwkJCQkJbWVtb3J5X29yZGVyX3NlcV9jc3QpOworICB9CisKKyAgaW5saW5lIGJvb2wKKyAgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdChhdG9taWNfYm9vbCogX19hLCBib29sKiBfX2kxLAorCQkJCQlib29sIF9faTIsIG1lbW9yeV9vcmRlciBfX20xLAorCQkJCQltZW1vcnlfb3JkZXIgX19tMikKKyAgeyByZXR1cm4gX19hLT5jb21wYXJlX2V4Y2hhbmdlX3dlYWsoKl9faTEsIF9faTIsIF9fbTEsIF9fbTIpOyB9CisKKyAgaW5saW5lIGJvb2wKKyAgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KGF0b21pY19ib29sKiBfX2EsCisJCQkJCSAgYm9vbCogX19pMSwgYm9vbCBfX2kyLAorCQkJCQkgIG1lbW9yeV9vcmRlciBfX20xLCBtZW1vcnlfb3JkZXIgX19tMikKKyAgeyByZXR1cm4gX19hLT5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZygqX19pMSwgX19pMiwgX19tMSwgX19tMik7IH0KKworCisKKyAgLy8gRnJlZSBzdGFuZGluZyBmdW5jdGlvbnMuIFRlbXBsYXRlIGFyZ3VtZW50IHNob3VsZCBiZSBjb25zdHJpY3RlZAorICAvLyB0byBpbnRlcmdyYWwgdHlwZXMgYXMgc3BlY2lmaWVkIGluIHRoZSBzdGFuZGFyZC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lUcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIGF0b21pY19zdG9yZV9leHBsaWNpdChfX2F0b21pY19iYXNlPF9JVHA+KiBfX2EsIF9JVHAgX19pLCBtZW1vcnlfb3JkZXIgX19tKQorICAgIHsgX19hLT5zdG9yZShfX2ksIF9fbSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBfSVRwCisgICAgYXRvbWljX2xvYWRfZXhwbGljaXQoY29uc3QgX19hdG9taWNfYmFzZTxfSVRwPiogX19hLCBtZW1vcnlfb3JkZXIgX19tKQorICAgIHsgcmV0dXJuIF9fYS0+bG9hZChfX20pOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lUcD4KKyAgICBpbmxpbmUgX0lUcAorICAgIGF0b21pY19leGNoYW5nZV9leHBsaWNpdChfX2F0b21pY19iYXNlPF9JVHA+KiBfX2EsIF9JVHAgX19pLAorCQkJICAgICBtZW1vcnlfb3JkZXIgX19tKQorICAgIHsgcmV0dXJuIF9fYS0+ZXhjaGFuZ2UoX19pLCBfX20pOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lUcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQoX19hdG9taWNfYmFzZTxfSVRwPiogX19hLAorCQkJCQkgIF9JVHAqIF9faTEsIF9JVHAgX19pMiwKKwkJCQkJICBtZW1vcnlfb3JkZXIgX19tMSwgbWVtb3J5X29yZGVyIF9fbTIpCisgICAgeyByZXR1cm4gX19hLT5jb21wYXJlX2V4Y2hhbmdlX3dlYWsoKl9faTEsIF9faTIsIF9fbTEsIF9fbTIpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lUcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdChfX2F0b21pY19iYXNlPF9JVHA+KiBfX2EsCisJCQkJCSAgICBfSVRwKiBfX2kxLCBfSVRwIF9faTIsCisJCQkJCSAgICBtZW1vcnlfb3JkZXIgX19tMSwKKwkJCQkJICAgIG1lbW9yeV9vcmRlciBfX20yKQorICAgIHsgcmV0dXJuIF9fYS0+Y29tcGFyZV9leGNoYW5nZV9zdHJvbmcoKl9faTEsIF9faTIsIF9fbTEsIF9fbTIpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lUcD4KKyAgICBpbmxpbmUgX0lUcAorICAgIGF0b21pY19mZXRjaF9hZGRfZXhwbGljaXQoX19hdG9taWNfYmFzZTxfSVRwPiogX19hLCBfSVRwIF9faSwKKwkJCSAgICAgIG1lbW9yeV9vcmRlciBfX20pCisgICAgeyByZXR1cm4gX19hLT5mZXRjaF9hZGQoX19pLCBfX20pOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lUcD4KKyAgICBpbmxpbmUgX0lUcAorICAgIGF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQoX19hdG9taWNfYmFzZTxfSVRwPiogX19hLCBfSVRwIF9faSwKKwkJCSAgICAgIG1lbW9yeV9vcmRlciBfX20pCisgICAgeyByZXR1cm4gX19hLT5mZXRjaF9zdWIoX19pLCBfX20pOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lUcD4KKyAgICBpbmxpbmUgX0lUcAorICAgIGF0b21pY19mZXRjaF9hbmRfZXhwbGljaXQoX19hdG9taWNfYmFzZTxfSVRwPiogX19hLCBfSVRwIF9faSwKKwkJCSAgICAgIG1lbW9yeV9vcmRlciBfX20pCisgICAgeyByZXR1cm4gX19hLT5mZXRjaF9hbmQoX19pLCBfX20pOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lUcD4KKyAgICBpbmxpbmUgX0lUcAorICAgIGF0b21pY19mZXRjaF9vcl9leHBsaWNpdChfX2F0b21pY19iYXNlPF9JVHA+KiBfX2EsIF9JVHAgX19pLAorCQkJICAgICBtZW1vcnlfb3JkZXIgX19tKQorICAgIHsgcmV0dXJuIF9fYS0+ZmV0Y2hfb3IoX19pLCBfX20pOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lUcD4KKyAgICBpbmxpbmUgX0lUcAorICAgIGF0b21pY19mZXRjaF94b3JfZXhwbGljaXQoX19hdG9taWNfYmFzZTxfSVRwPiogX19hLCBfSVRwIF9faSwKKwkJCSAgICAgIG1lbW9yeV9vcmRlciBfX20pCisgICAgeyByZXR1cm4gX19hLT5mZXRjaF94b3IoX19pLCBfX20pOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lUcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIGF0b21pY19pc19sb2NrX2ZyZWUoY29uc3QgX19hdG9taWNfYmFzZTxfSVRwPiogX19hKQorICAgIHsgcmV0dXJuIF9fYS0+aXNfbG9ja19mcmVlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSB2b2lkCisgICAgYXRvbWljX3N0b3JlKF9fYXRvbWljX2Jhc2U8X0lUcD4qIF9fYSwgX0lUcCBfX2kpCisgICAgeyBhdG9taWNfc3RvcmVfZXhwbGljaXQoX19hLCBfX2ksIG1lbW9yeV9vcmRlcl9zZXFfY3N0KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JVHA+CisgICAgaW5saW5lIF9JVHAKKyAgICBhdG9taWNfbG9hZChjb25zdCBfX2F0b21pY19iYXNlPF9JVHA+KiBfX2EpCisgICAgeyByZXR1cm4gYXRvbWljX2xvYWRfZXhwbGljaXQoX19hLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBfSVRwCisgICAgYXRvbWljX2V4Y2hhbmdlKF9fYXRvbWljX2Jhc2U8X0lUcD4qIF9fYSwgX0lUcCBfX2kpCisgICAgeyByZXR1cm4gYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KF9fYSwgX19pLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBib29sCisgICAgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2VhayhfX2F0b21pY19iYXNlPF9JVHA+KiBfX2EsCisJCQkJIF9JVHAqIF9faTEsIF9JVHAgX19pMikKKyAgICB7CisgICAgICByZXR1cm4gYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdChfX2EsIF9faTEsIF9faTIsCisJCQkJCQkgICBtZW1vcnlfb3JkZXJfc2VxX2NzdCwKKwkJCQkJCSAgIG1lbW9yeV9vcmRlcl9zZXFfY3N0KTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lUcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhfX2F0b21pY19iYXNlPF9JVHA+KiBfX2EsCisJCQkJICAgX0lUcCogX19pMSwgX0lUcCBfX2kyKQorICAgIHsKKyAgICAgIHJldHVybiBhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQoX19hLCBfX2kxLCBfX2kyLAorCQkJCQkJICAgICBtZW1vcnlfb3JkZXJfc2VxX2NzdCwKKwkJCQkJCSAgICAgbWVtb3J5X29yZGVyX3NlcV9jc3QpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBfSVRwCisgICAgYXRvbWljX2ZldGNoX2FkZChfX2F0b21pY19iYXNlPF9JVHA+KiBfX2EsIF9JVHAgX19pKQorICAgIHsgcmV0dXJuIGF0b21pY19mZXRjaF9hZGRfZXhwbGljaXQoX19hLCBfX2ksIG1lbW9yeV9vcmRlcl9zZXFfY3N0KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JVHA+CisgICAgaW5saW5lIF9JVHAKKyAgICBhdG9taWNfZmV0Y2hfc3ViKF9fYXRvbWljX2Jhc2U8X0lUcD4qIF9fYSwgX0lUcCBfX2kpCisgICAgeyByZXR1cm4gYXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdChfX2EsIF9faSwgbWVtb3J5X29yZGVyX3NlcV9jc3QpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lUcD4KKyAgICBpbmxpbmUgX0lUcAorICAgIGF0b21pY19mZXRjaF9hbmQoX19hdG9taWNfYmFzZTxfSVRwPiogX19hLCBfSVRwIF9faSkKKyAgICB7IHJldHVybiBhdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0KF9fYSwgX19pLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBfSVRwCisgICAgYXRvbWljX2ZldGNoX29yKF9fYXRvbWljX2Jhc2U8X0lUcD4qIF9fYSwgX0lUcCBfX2kpCisgICAgeyByZXR1cm4gYXRvbWljX2ZldGNoX29yX2V4cGxpY2l0KF9fYSwgX19pLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBfSVRwCisgICAgYXRvbWljX2ZldGNoX3hvcihfX2F0b21pY19iYXNlPF9JVHA+KiBfX2EsIF9JVHAgX19pKQorICAgIHsgcmV0dXJuIGF0b21pY19mZXRjaF94b3JfZXhwbGljaXQoX19hLCBfX2ksIG1lbW9yeV9vcmRlcl9zZXFfY3N0KTsgfQorCisgIC8vIEB9IGdyb3VwIGF0b21pY3MKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYmFja3dhcmQvYXV0b19wdHIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYmFja3dhcmQvYXV0b19wdHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjBiYWQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iYWNrd2FyZC9hdXRvX3B0ci5oCkBAIC0wLDAgKzEsMjkyIEBACisvLyBhdXRvX3B0ciBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJhY2t3YXJkL2F1dG9fcHRyLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfQkFDS1dBUkRfQVVUT19QVFJfSAorI2RlZmluZSBfQkFDS1dBUkRfQVVUT19QVFJfSCAxCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgLyoqCisgICAqICBBIHdyYXBwZXIgY2xhc3MgdG8gcHJvdmlkZSBhdXRvX3B0ciB3aXRoIHJlZmVyZW5jZSBzZW1hbnRpY3MuCisgICAqICBGb3IgZXhhbXBsZSwgYW4gYXV0b19wdHIgY2FuIGJlIGFzc2lnbmVkIChvciBjb25zdHJ1Y3RlZCBmcm9tKQorICAgKiAgdGhlIHJlc3VsdCBvZiBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYW4gYXV0b19wdHIgYnkgdmFsdWUuCisgICAqCisgICAqICBBbGwgdGhlIGF1dG9fcHRyX3JlZiBzdHVmZiBzaG91bGQgaGFwcGVuIGJlaGluZCB0aGUgc2NlbmVzLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICBzdHJ1Y3QgYXV0b19wdHJfcmVmCisgICAgeworICAgICAgX1RwMSogX01fcHRyOworICAgICAgCisgICAgICBleHBsaWNpdAorICAgICAgYXV0b19wdHJfcmVmKF9UcDEqIF9fcCk6IF9NX3B0cihfX3ApIHsgfQorICAgIH0gX0dMSUJDWFhfREVQUkVDQVRFRF9BVFRSOworCisKKyAgLyoqCisgICAqICBAYnJpZWYgIEEgc2ltcGxlIHNtYXJ0IHBvaW50ZXIgcHJvdmlkaW5nIHN0cmljdCBvd25lcnNoaXAgc2VtYW50aWNzLgorICAgKgorICAgKiAgVGhlIFN0YW5kYXJkIHNheXM6CisgICAqICA8cHJlPgorICAgKiAgQW4gQGMgYXV0b19wdHIgb3ducyB0aGUgb2JqZWN0IGl0IGhvbGRzIGEgcG9pbnRlciB0by4gIENvcHlpbmcKKyAgICogIGFuIEBjIGF1dG9fcHRyIGNvcGllcyB0aGUgcG9pbnRlciBhbmQgdHJhbnNmZXJzIG93bmVyc2hpcCB0byB0aGUKKyAgICogIGRlc3RpbmF0aW9uLiAgSWYgbW9yZSB0aGFuIG9uZSBAYyBhdXRvX3B0ciBvd25zIHRoZSBzYW1lIG9iamVjdAorICAgKiAgYXQgdGhlIHNhbWUgdGltZSB0aGUgYmVoYXZpb3Igb2YgdGhlIHByb2dyYW0gaXMgdW5kZWZpbmVkLgorICAgKgorICAgKiAgVGhlIHVzZXMgb2YgQGMgYXV0b19wdHIgaW5jbHVkZSBwcm92aWRpbmcgdGVtcG9yYXJ5CisgICAqICBleGNlcHRpb24tc2FmZXR5IGZvciBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5LCBwYXNzaW5nCisgICAqICBvd25lcnNoaXAgb2YgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSB0byBhIGZ1bmN0aW9uLCBhbmQKKyAgICogIHJldHVybmluZyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5IGZyb20gYSBmdW5jdGlvbi4gIEBjCisgICAqICBhdXRvX3B0ciBkb2VzIG5vdCBtZWV0IHRoZSBDb3B5Q29uc3RydWN0aWJsZSBhbmQgQXNzaWduYWJsZQorICAgKiAgcmVxdWlyZW1lbnRzIGZvciBTdGFuZGFyZCBMaWJyYXJ5IDxhCisgICAqICBocmVmPSJ0YWJsZXMuaHRtbCM2NSI+Y29udGFpbmVyPC9hPiBlbGVtZW50cyBhbmQgdGh1cworICAgKiAgaW5zdGFudGlhdGluZyBhIFN0YW5kYXJkIExpYnJhcnkgY29udGFpbmVyIHdpdGggYW4gQGMgYXV0b19wdHIKKyAgICogIHJlc3VsdHMgaW4gdW5kZWZpbmVkIGJlaGF2aW9yLgorICAgKiAgPC9wcmU+CisgICAqICBRdW90ZWQgZnJvbSBbMjAuNC41XS8zLgorICAgKgorICAgKiAgR29vZCBleGFtcGxlcyBvZiB3aGF0IGNhbiBhbmQgY2Fubm90IGJlIGRvbmUgd2l0aCBhdXRvX3B0ciBjYW4KKyAgICogIGJlIGZvdW5kIGluIHRoZSBsaWJzdGRjKysgdGVzdHN1aXRlLgorICAgKgorICAgKiAgX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgKiAgMTI3LiAgYXV0b19wdHI8PiBjb252ZXJzaW9uIGlzc3VlcworICAgKiAgVGhlc2UgcmVzb2x1dGlvbnMgaGF2ZSBhbGwgYmVlbiBpbmNvcnBvcmF0ZWQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgYXV0b19wdHIKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIF9UcCogX01fcHRyOworICAgICAgCisgICAgcHVibGljOgorICAgICAgLy8vIFRoZSBwb2ludGVkLXRvIHR5cGUuCisgICAgICB0eXBlZGVmIF9UcCBlbGVtZW50X3R5cGU7CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQW4gJWF1dG9fcHRyIGlzIHVzdWFsbHkgY29uc3RydWN0ZWQgZnJvbSBhIHJhdyBwb2ludGVyLgorICAgICAgICogIEBwYXJhbSAgcCAgQSBwb2ludGVyIChkZWZhdWx0cyB0byBOVUxMKS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBvYmplY3Qgbm93IEBlIG93bnMgdGhlIG9iamVjdCBwb2ludGVkIHRvIGJ5IEBhIHAuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBhdXRvX3B0cihlbGVtZW50X3R5cGUqIF9fcCA9IDApIHRocm93KCkgOiBfTV9wdHIoX19wKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBbiAlYXV0b19wdHIgY2FuIGJlIGNvbnN0cnVjdGVkIGZyb20gYW5vdGhlciAlYXV0b19wdHIuCisgICAgICAgKiAgQHBhcmFtICBhICBBbm90aGVyICVhdXRvX3B0ciBvZiB0aGUgc2FtZSB0eXBlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIG9iamVjdCBub3cgQGUgb3ducyB0aGUgb2JqZWN0IHByZXZpb3VzbHkgb3duZWQgYnkgQGEgYSwKKyAgICAgICAqICB3aGljaCBoYXMgZ2l2ZW4gdXAgb3duZXJzaGlwLgorICAgICAgICovCisgICAgICBhdXRvX3B0cihhdXRvX3B0ciYgX19hKSB0aHJvdygpIDogX01fcHRyKF9fYS5yZWxlYXNlKCkpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFuICVhdXRvX3B0ciBjYW4gYmUgY29uc3RydWN0ZWQgZnJvbSBhbm90aGVyICVhdXRvX3B0ci4KKyAgICAgICAqICBAcGFyYW0gIGEgIEFub3RoZXIgJWF1dG9fcHRyIG9mIGEgZGlmZmVyZW50IGJ1dCByZWxhdGVkIHR5cGUuCisgICAgICAgKgorICAgICAgICogIEEgcG9pbnRlci10by1UcDEgbXVzdCBiZSBjb252ZXJ0aWJsZSB0byBhCisgICAgICAgKiAgcG9pbnRlci10by1UcC9lbGVtZW50X3R5cGUuCisgICAgICAgKgorICAgICAgICogIFRoaXMgb2JqZWN0IG5vdyBAZSBvd25zIHRoZSBvYmplY3QgcHJldmlvdXNseSBvd25lZCBieSBAYSBhLAorICAgICAgICogIHdoaWNoIGhhcyBnaXZlbiB1cCBvd25lcnNoaXAuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIGF1dG9fcHRyKGF1dG9fcHRyPF9UcDE+JiBfX2EpIHRocm93KCkgOiBfTV9wdHIoX19hLnJlbGVhc2UoKSkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJWF1dG9fcHRyIGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBhICBBbm90aGVyICVhdXRvX3B0ciBvZiB0aGUgc2FtZSB0eXBlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIG9iamVjdCBub3cgQGUgb3ducyB0aGUgb2JqZWN0IHByZXZpb3VzbHkgb3duZWQgYnkgQGEgYSwKKyAgICAgICAqICB3aGljaCBoYXMgZ2l2ZW4gdXAgb3duZXJzaGlwLiAgVGhlIG9iamVjdCB0aGF0IHRoaXMgb25lIEBlCisgICAgICAgKiAgdXNlZCB0byBvd24gYW5kIHRyYWNrIGhhcyBiZWVuIGRlbGV0ZWQuCisgICAgICAgKi8KKyAgICAgIGF1dG9fcHRyJgorICAgICAgb3BlcmF0b3I9KGF1dG9fcHRyJiBfX2EpIHRocm93KCkKKyAgICAgIHsKKwlyZXNldChfX2EucmVsZWFzZSgpKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJWF1dG9fcHRyIGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBhICBBbm90aGVyICVhdXRvX3B0ciBvZiBhIGRpZmZlcmVudCBidXQgcmVsYXRlZCB0eXBlLgorICAgICAgICoKKyAgICAgICAqICBBIHBvaW50ZXItdG8tVHAxIG11c3QgYmUgY29udmVydGlibGUgdG8gYSBwb2ludGVyLXRvLVRwL2VsZW1lbnRfdHlwZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBvYmplY3Qgbm93IEBlIG93bnMgdGhlIG9iamVjdCBwcmV2aW91c2x5IG93bmVkIGJ5IEBhIGEsCisgICAgICAgKiAgd2hpY2ggaGFzIGdpdmVuIHVwIG93bmVyc2hpcC4gIFRoZSBvYmplY3QgdGhhdCB0aGlzIG9uZSBAZQorICAgICAgICogIHVzZWQgdG8gb3duIGFuZCB0cmFjayBoYXMgYmVlbiBkZWxldGVkLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorICAgICAgICBhdXRvX3B0ciYKKyAgICAgICAgb3BlcmF0b3I9KGF1dG9fcHRyPF9UcDE+JiBfX2EpIHRocm93KCkKKyAgICAgICAgeworCSAgcmVzZXQoX19hLnJlbGVhc2UoKSk7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICAvKioKKyAgICAgICAqICBXaGVuIHRoZSAlYXV0b19wdHIgZ29lcyBvdXQgb2Ygc2NvcGUsIHRoZSBvYmplY3QgaXQgb3ducyBpcworICAgICAgICogIGRlbGV0ZWQuICBJZiBpdCBubyBsb25nZXIgb3ducyBhbnl0aGluZyAoaS5lLiwgQGMgZ2V0KCkgaXMKKyAgICAgICAqICBAYyBOVUxMKSwgdGhlbiB0aGlzIGhhcyBubyBlZmZlY3QuCisgICAgICAgKgorICAgICAgICogIFRoZSBDKysgc3RhbmRhcmQgc2F5cyB0aGVyZSBpcyBzdXBwb3NlZCB0byBiZSBhbiBlbXB0eSB0aHJvdworICAgICAgICogIHNwZWNpZmljYXRpb24gaGVyZSwgYnV0IG9taXR0aW5nIGl0IGlzIHN0YW5kYXJkIGNvbmZvcm1pbmcuICBJdHMKKyAgICAgICAqICBwcmVzZW5jZSBjYW4gYmUgZGV0ZWN0ZWQgb25seSBpZiBfVHA6On5fVHAoKSB0aHJvd3MsIGJ1dCB0aGlzIGlzCisgICAgICAgKiAgcHJvaGliaXRlZC4gIFsxNy40LjMuNl0vMgorICAgICAgICovCisgICAgICB+YXV0b19wdHIoKSB7IGRlbGV0ZSBfTV9wdHI7IH0KKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTbWFydCBwb2ludGVyIGRlcmVmZXJlbmNpbmcuCisgICAgICAgKgorICAgICAgICogIElmIHRoaXMgJWF1dG9fcHRyIG5vIGxvbmdlciBvd25zIGFueXRoaW5nLCB0aGVuIHRoaXMKKyAgICAgICAqICBvcGVyYXRpb24gd2lsbCBjcmFzaC4gIChGb3IgYSBzbWFydCBwb2ludGVyLCA8ZW0+bm8gbG9uZ2VyIG93bnMKKyAgICAgICAqICBhbnl0aGluZzwvZW0+IGlzIHRoZSBzYW1lIGFzIGJlaW5nIGEgbnVsbCBwb2ludGVyLCBhbmQgeW91IGtub3cKKyAgICAgICAqICB3aGF0IGhhcHBlbnMgd2hlbiB5b3UgZGVyZWZlcmVuY2Ugb25lIG9mIHRob3NlLi4uKQorICAgICAgICovCisgICAgICBlbGVtZW50X3R5cGUmCisgICAgICBvcGVyYXRvciooKSBjb25zdCB0aHJvdygpIAorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChfTV9wdHIgIT0gMCk7CisJcmV0dXJuICpfTV9wdHI7IAorICAgICAgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNtYXJ0IHBvaW50ZXIgZGVyZWZlcmVuY2luZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyByZXR1cm5zIHRoZSBwb2ludGVyIGl0c2VsZiwgd2hpY2ggdGhlIGxhbmd1YWdlIHRoZW4gd2lsbAorICAgICAgICogIGF1dG9tYXRpY2FsbHkgY2F1c2UgdG8gYmUgZGVyZWZlcmVuY2VkLgorICAgICAgICovCisgICAgICBlbGVtZW50X3R5cGUqCisgICAgICBvcGVyYXRvci0+KCkgY29uc3QgdGhyb3coKSAKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fcHRyICE9IDApOworCXJldHVybiBfTV9wdHI7IAorICAgICAgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEJ5cGFzc2luZyB0aGUgc21hcnQgcG9pbnRlci4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgcmF3IHBvaW50ZXIgYmVpbmcgbWFuYWdlZC4KKyAgICAgICAqCisgICAgICAgKiAgWW91IGNhbiBnZXQgYSBjb3B5IG9mIHRoZSBwb2ludGVyIHRoYXQgdGhpcyBvYmplY3Qgb3ducywgZm9yCisgICAgICAgKiAgc2l0dWF0aW9ucyBzdWNoIGFzIHBhc3NpbmcgdG8gYSBmdW5jdGlvbiB3aGljaCBvbmx5IGFjY2VwdHMKKyAgICAgICAqICBhIHJhdyBwb2ludGVyLgorICAgICAgICoKKyAgICAgICAqICBAbm90ZSAgVGhpcyAlYXV0b19wdHIgc3RpbGwgb3ducyB0aGUgbWVtb3J5LgorICAgICAgICovCisgICAgICBlbGVtZW50X3R5cGUqCisgICAgICBnZXQoKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuIF9NX3B0cjsgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEJ5cGFzc2luZyB0aGUgc21hcnQgcG9pbnRlci4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgcmF3IHBvaW50ZXIgYmVpbmcgbWFuYWdlZC4KKyAgICAgICAqCisgICAgICAgKiAgWW91IGNhbiBnZXQgYSBjb3B5IG9mIHRoZSBwb2ludGVyIHRoYXQgdGhpcyBvYmplY3Qgb3ducywgZm9yCisgICAgICAgKiAgc2l0dWF0aW9ucyBzdWNoIGFzIHBhc3NpbmcgdG8gYSBmdW5jdGlvbiB3aGljaCBvbmx5IGFjY2VwdHMKKyAgICAgICAqICBhIHJhdyBwb2ludGVyLgorICAgICAgICoKKyAgICAgICAqICBAbm90ZSAgVGhpcyAlYXV0b19wdHIgbm8gbG9uZ2VyIG93bnMgdGhlIG1lbW9yeS4gIFdoZW4gdGhpcyBvYmplY3QKKyAgICAgICAqICBnb2VzIG91dCBvZiBzY29wZSwgbm90aGluZyB3aWxsIGhhcHBlbi4KKyAgICAgICAqLworICAgICAgZWxlbWVudF90eXBlKgorICAgICAgcmVsZWFzZSgpIHRocm93KCkKKyAgICAgIHsKKwllbGVtZW50X3R5cGUqIF9fdG1wID0gX01fcHRyOworCV9NX3B0ciA9IDA7CisJcmV0dXJuIF9fdG1wOworICAgICAgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZvcmNpYmx5IGRlbGV0ZXMgdGhlIG1hbmFnZWQgb2JqZWN0LgorICAgICAgICogIEBwYXJhbSAgcCAgQSBwb2ludGVyIChkZWZhdWx0cyB0byBOVUxMKS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBvYmplY3Qgbm93IEBlIG93bnMgdGhlIG9iamVjdCBwb2ludGVkIHRvIGJ5IEBhIHAuICBUaGUKKyAgICAgICAqICBwcmV2aW91cyBvYmplY3QgaGFzIGJlZW4gZGVsZXRlZC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzZXQoZWxlbWVudF90eXBlKiBfX3AgPSAwKSB0aHJvdygpCisgICAgICB7CisJaWYgKF9fcCAhPSBfTV9wdHIpCisJICB7CisJICAgIGRlbGV0ZSBfTV9wdHI7CisJICAgIF9NX3B0ciA9IF9fcDsKKwkgIH0KKyAgICAgIH0KKyAgICAgIAorICAgICAgLyoqIAorICAgICAgICogIEBicmllZiAgQXV0b21hdGljIGNvbnZlcnNpb25zCisgICAgICAgKgorICAgICAgICogIFRoZXNlIG9wZXJhdGlvbnMgY29udmVydCBhbiAlYXV0b19wdHIgaW50byBhbmQgZnJvbSBhbiBhdXRvX3B0cl9yZWYKKyAgICAgICAqICBhdXRvbWF0aWNhbGx5IGFzIG5lZWRlZC4gIFRoaXMgYWxsb3dzIGNvbnN0cnVjdHMgc3VjaCBhcworICAgICAgICogIEBjb2RlCisgICAgICAgKiAgICBhdXRvX3B0cjxEZXJpdmVkPiAgZnVuY19yZXR1cm5pbmdfYXV0b19wdHIoLi4uLi4pOworICAgICAgICogICAgLi4uCisgICAgICAgKiAgICBhdXRvX3B0cjxCYXNlPiBwdHIgPSBmdW5jX3JldHVybmluZ19hdXRvX3B0ciguLi4uLik7CisgICAgICAgKiAgQGVuZGNvZGUKKyAgICAgICAqLworICAgICAgYXV0b19wdHIoYXV0b19wdHJfcmVmPGVsZW1lbnRfdHlwZT4gX19yZWYpIHRocm93KCkKKyAgICAgIDogX01fcHRyKF9fcmVmLl9NX3B0cikgeyB9CisgICAgICAKKyAgICAgIGF1dG9fcHRyJgorICAgICAgb3BlcmF0b3I9KGF1dG9fcHRyX3JlZjxlbGVtZW50X3R5cGU+IF9fcmVmKSB0aHJvdygpCisgICAgICB7CisJaWYgKF9fcmVmLl9NX3B0ciAhPSB0aGlzLT5nZXQoKSkKKwkgIHsKKwkgICAgZGVsZXRlIF9NX3B0cjsKKwkgICAgX01fcHRyID0gX19yZWYuX01fcHRyOworCSAgfQorCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyAgICAgIAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgb3BlcmF0b3IgYXV0b19wdHJfcmVmPF9UcDE+KCkgdGhyb3coKQorICAgICAgICB7IHJldHVybiBhdXRvX3B0cl9yZWY8X1RwMT4odGhpcy0+cmVsZWFzZSgpKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorICAgICAgICBvcGVyYXRvciBhdXRvX3B0cjxfVHAxPigpIHRocm93KCkKKyAgICAgICAgeyByZXR1cm4gYXV0b19wdHI8X1RwMT4odGhpcy0+cmVsZWFzZSgpKTsgfQorICAgIH0gX0dMSUJDWFhfREVQUkVDQVRFRF9BVFRSOworCisgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgLy8gNTQxLiBzaGFyZWRfcHRyIHRlbXBsYXRlIGFzc2lnbm1lbnQgYW5kIHZvaWQKKyAgdGVtcGxhdGU8PgorICAgIGNsYXNzIGF1dG9fcHRyPHZvaWQ+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdm9pZCBlbGVtZW50X3R5cGU7CisgICAgfSBfR0xJQkNYWF9ERVBSRUNBVEVEX0FUVFI7CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmIC8qIF9CQUNLV0FSRF9BVVRPX1BUUl9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JhY2t3YXJkL2JhY2t3YXJkX3dhcm5pbmcuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYmFja3dhcmQvYmFja3dhcmRfd2FybmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZGY1MjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JhY2t3YXJkL2JhY2t3YXJkX3dhcm5pbmcuaApAQCAtMCwwICsxLDU2IEBACisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyNpZm5kZWYgX0JBQ0tXQVJEX0JBQ0tXQVJEX1dBUk5JTkdfSAorI2RlZmluZSBfQkFDS1dBUkRfQkFDS1dBUkRfV0FSTklOR19IIDEKKworI2lmZGVmIF9fREVQUkVDQVRFRAorI3dhcm5pbmcgXAorICBUaGlzIGZpbGUgaW5jbHVkZXMgYXQgbGVhc3Qgb25lIGRlcHJlY2F0ZWQgb3IgYW50aXF1YXRlZCBoZWFkZXIgd2hpY2ggXAorICBtYXkgYmUgcmVtb3ZlZCB3aXRob3V0IGZ1cnRoZXIgbm90aWNlIGF0IGEgZnV0dXJlIGRhdGUuIFBsZWFzZSB1c2UgYSBcCisgIG5vbi1kZXByZWNhdGVkIGludGVyZmFjZSB3aXRoIGVxdWl2YWxlbnQgZnVuY3Rpb25hbGl0eSBpbnN0ZWFkLiBGb3IgYSBcCisgIGxpc3Rpbmcgb2YgcmVwbGFjZW1lbnQgaGVhZGVycyBhbmQgaW50ZXJmYWNlcywgY29uc3VsdCB0aGUgZmlsZSBcCisgIGJhY2t3YXJkX3dhcm5pbmcuaC4gVG8gZGlzYWJsZSB0aGlzIHdhcm5pbmcgdXNlIC1Xbm8tZGVwcmVjYXRlZC4KKworLyoKKyAgQSBsaXN0IG9mIHZhbGlkIHJlcGxhY2VtZW50cyBpcyBhcyBmb2xsb3dzOgorCisgIFVzZToJCQkJCUluc3RlYWQgb2Y6CisgIDxzc3RyZWFtPiwgYmFzaWNfc3RyaW5nYnVmCSAgIAk8c3Ryc3RyZWFtPiwgc3Ryc3RyZWFtYnVmCisgIDxzc3RyZWFtPiwgYmFzaWNfaXN0cmluZ3N0cmVhbQk8c3Ryc3RyZWFtPiwgaXN0cnN0cmVhbQorICA8c3N0cmVhbT4sIGJhc2ljX29zdHJpbmdzdHJlYW0JPHN0cnN0cmVhbT4sIG9zdHJzdHJlYW0KKyAgPHNzdHJlYW0+LCBiYXNpY19zdHJpbmdzdHJlYW0JCTxzdHJzdHJlYW0+LCBzdHJzdHJlYW0KKyAgPHVub3JkZXJlZF9zZXQ+LCB1bm9yZGVyZWRfc2V0ICAgICAJPGV4dC9oYXNoX3NldD4sIGhhc2hfc2V0CisgIDx1bm9yZGVyZWRfc2V0PiwgdW5vcmRlcmVkX211bHRpc2V0CTxleHQvaGFzaF9zZXQ+LCBoYXNoX211bHRpc2V0CisgIDx1bm9yZGVyZWRfbWFwPiwgdW5vcmRlcmVkX21hcAk8ZXh0L2hhc2hfbWFwPiwgaGFzaF9tYXAKKyAgPHVub3JkZXJlZF9tYXA+LCB1bm9yZGVyZWRfbXVsdGltYXAJPGV4dC9oYXNoX21hcD4sIGhhc2hfbXVsdGltYXAKKyAgPGZ1bmN0aW9uYWw+LCBiaW5kCQkJPGZ1bmN0aW9uYWw+LCBiaW5kZXIxc3QKKyAgPGZ1bmN0aW9uYWw+LCBiaW5kCQkJPGZ1bmN0aW9uYWw+LCBiaW5kZXIybmQKKyAgPGZ1bmN0aW9uYWw+LCBiaW5kCQkJPGZ1bmN0aW9uYWw+LCBiaW5kMXN0CisgIDxmdW5jdGlvbmFsPiwgYmluZAkJCTxmdW5jdGlvbmFsPiwgYmluZDJuZAorICA8bWVtb3J5PiwgdW5pcXVlX3B0ciAgICAgICAJCTxtZW1vcnk+LCBhdXRvX3B0cgorKi8KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iYWNrd2FyZC9iaW5kZXJzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JhY2t3YXJkL2JpbmRlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjVlYjhhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iYWNrd2FyZC9iaW5kZXJzLmgKQEAgLTAsMCArMSwxNjkgQEAKKy8vIEZ1bmN0b3IgaW1wbGVtZW50YXRpb25zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OAorICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGJhY2t3YXJkL2JpbmRlcnMuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWZuZGVmIF9CQUNLV0FSRF9CSU5ERVJTX0gKKyNkZWZpbmUgX0JBQ0tXQVJEX0JJTkRFUlNfSCAxCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgLy8gMjAuMy42IGJpbmRlcnMKKyAgLyoqIEBkZWZncm91cCBiaW5kZXJzIEJpbmRlciBDbGFzc2VzCisgICAqIEBpbmdyb3VwIGZ1bmN0b3JzCisgICAqCisgICAqICBCaW5kZXJzIHR1cm4gZnVuY3Rpb25zL2Z1bmN0b3JzIHdpdGggdHdvIGFyZ3VtZW50cyBpbnRvIGZ1bmN0b3JzCisgICAqICB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50LCBzdG9yaW5nIGFuIGFyZ3VtZW50IHRvIGJlIGFwcGxpZWQgbGF0ZXIuCisgICAqICBGb3IgZXhhbXBsZSwgYSB2YXJpYWJsZSBAYyBCIG9mIHR5cGUgQGMgYmluZGVyMXN0IGlzIGNvbnN0cnVjdGVkCisgICAqICBmcm9tIGEgZnVuY3RvciBAYyBmIGFuZCBhbiBhcmd1bWVudCBAYyB4LiBMYXRlciwgQidzIEBjCisgICAqICBvcGVyYXRvcigpIGlzIGNhbGxlZCB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50IEBjIHkuIFRoZSByZXR1cm4KKyAgICogIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiBAYyBmKHgseSkuIEBjIEIgY2FuIGJlIEBhIGNhbGxlZCB3aXRoCisgICAqICB2YXJpb3VzIGFyZ3VtZW50cyAoeTEsIHkyLCAuLi4pIGFuZCB3aWxsIGluIHR1cm4gY2FsbCBAYworICAgKiAgZih4LHkxKSwgQGMgZih4LHkyKSwgLi4uCisgICAqCisgICAqICBUaGUgZnVuY3Rpb24gQGMgYmluZDFzdCBpcyBwcm92aWRlZCB0byBzYXZlIHNvbWUgdHlwaW5nLiBJdCB0YWtlcyB0aGUKKyAgICogIGZ1bmN0aW9uIGFuZCBhbiBhcmd1bWVudCBhcyBwYXJhbWV0ZXJzLCBhbmQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZgorICAgKiAgQGMgYmluZGVyMXN0LgorICAgKgorICAgKiAgVGhlIHR5cGUgQGMgYmluZGVyMm5kIGFuZCBpdHMgY3JlYXRvciBmdW5jdGlvbiBAYyBiaW5kMm5kIGRvIHRoZSBzYW1lCisgICAqICB0aGluZywgYnV0IHRoZSBzdG9yZWQgYXJndW1lbnQgaXMgcGFzc2VkIGFzIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGluc3RlYWQKKyAgICogIG9mIHRoZSBmaXJzdCwgZS5nLiwgQGMgYmluZDJuZChzdGQ6Om1pbnVzPGZsb2F0PiwxLjMpIHdpbGwgY3JlYXRlIGEKKyAgICogIGZ1bmN0b3Igd2hvc2UgQGMgb3BlcmF0b3IoKSBhY2NlcHRzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLCBzdWJ0cmFjdHMKKyAgICogIDEuMyBmcm9tIGl0LCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LiAoSWYgQGMgYmluZDFzdCBoYWQgYmVlbiB1c2VkLAorICAgKiAgdGhlIGZ1bmN0b3Igd291bGQgcGVyZm9ybSA8ZW0+MS4zIC0geDwvZW0+IGluc3RlYWQuCisgICAqCisgICAqICBDcmVhdG9yLXdyYXBwZXIgZnVuY3Rpb25zIGxpa2UgQGMgYmluZDFzdCBhcmUgaW50ZW5kZWQgdG8gYmUgdXNlZCBpbgorICAgKiAgY2FsbGluZyBhbGdvcml0aG1zLiBUaGVpciByZXR1cm4gdmFsdWVzIHdpbGwgYmUgdGVtcG9yYXJ5IG9iamVjdHMuCisgICAqICAoVGhlIGdvYWwgaXMgdG8gbm90IHJlcXVpcmUgeW91IHRvIHR5cGUgbmFtZXMgbGlrZQorICAgKiAgQGMgc3RkOjpiaW5kZXIxc3Q8c3RkOjpwbHVzPGludD4+IGZvciBkZWNsYXJpbmcgYSB2YXJpYWJsZSB0byBob2xkIHRoZQorICAgKiAgcmV0dXJuIHZhbHVlIGZyb20gQGMgYmluZDFzdChzdGQ6OnBsdXM8aW50Piw1KS4KKyAgICoKKyAgICogIFRoZXNlIGJlY29tZSBtb3JlIHVzZWZ1bCB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIGNvbXBvc2l0aW9uIGZ1bmN0aW9ucy4KKyAgICoKKyAgICogIEB7CisgICAqLworICAvLy8gT25lIG9mIHRoZSBAbGluayBiaW5kZXJzIGJpbmRlciBmdW5jdG9yc0BlbmRsaW5rLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3BlcmF0aW9uPgorICAgIGNsYXNzIGJpbmRlcjFzdAorICAgIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlLAorCQkJICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPgorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfT3BlcmF0aW9uIG9wOworICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSB2YWx1ZTsKKworICAgIHB1YmxpYzoKKyAgICAgIGJpbmRlcjFzdChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCisJCWNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feSkKKyAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7IH0KKworICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIG9wKHZhbHVlLCBfX3gpOyB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDEwOS4gIE1pc3NpbmcgYmluZGVycyBmb3Igbm9uLWNvbnN0IHNlcXVlbmNlIGVsZW1lbnRzCisgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQorICAgICAgb3BlcmF0b3IoKSh0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gb3AodmFsdWUsIF9feCk7IH0KKyAgICB9IF9HTElCQ1hYX0RFUFJFQ0FURURfQVRUUjsKKworICAvLy8gT25lIG9mIHRoZSBAbGluayBiaW5kZXJzIGJpbmRlciBmdW5jdG9yc0BlbmRsaW5rLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3BlcmF0aW9uLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJpbmRlcjFzdDxfT3BlcmF0aW9uPgorICAgIGJpbmQxc3QoY29uc3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIF9BcmcxX3R5cGU7CisgICAgICByZXR1cm4gYmluZGVyMXN0PF9PcGVyYXRpb24+KF9fZm4sIF9BcmcxX3R5cGUoX194KSk7CisgICAgfQorCisgIC8vLyBPbmUgb2YgdGhlIEBsaW5rIGJpbmRlcnMgYmluZGVyIGZ1bmN0b3JzQGVuZGxpbmsuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9PcGVyYXRpb24+CisgICAgY2xhc3MgYmluZGVyMm5kCisgICAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKKwkJCSAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgX09wZXJhdGlvbiBvcDsKKyAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIHZhbHVlOworCisgICAgcHVibGljOgorICAgICAgYmluZGVyMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9feCwKKwkJY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkKKyAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7IH0KKworICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gb3AoX194LCB2YWx1ZSk7IH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMTA5LiAgTWlzc2luZyBiaW5kZXJzIGZvciBub24tY29uc3Qgc2VxdWVuY2UgZWxlbWVudHMKKyAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCisgICAgICBvcGVyYXRvcigpKHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIG9wKF9feCwgdmFsdWUpOyB9CisgICAgfSBfR0xJQkNYWF9ERVBSRUNBVEVEX0FUVFI7CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgYmluZGVycyBiaW5kZXIgZnVuY3RvcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX09wZXJhdGlvbiwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBiaW5kZXIybmQ8X09wZXJhdGlvbj4KKyAgICBiaW5kMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9fZm4sIGNvbnN0IF9UcCYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgX0FyZzJfdHlwZTsKKyAgICAgIHJldHVybiBiaW5kZXIybmQ8X09wZXJhdGlvbj4oX19mbiwgX0FyZzJfdHlwZShfX3gpKTsKKyAgICB9IAorICAvKiogQH0gICovCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmIC8qIF9CQUNLV0FSRF9CSU5ERVJTX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYmFja3dhcmQvaGFzaF9mdW4uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYmFja3dhcmQvaGFzaF9mdW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2IxNGExCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iYWNrd2FyZC9oYXNoX2Z1bi5oCkBAIC0wLDAgKzEsMTY4IEBACisvLyAnc3RydWN0IGhhc2gnIGZyb20gU0dJIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5Ni0xOTk4CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKi8KKworLyoqIEBmaWxlIGJhY2t3YXJkL2hhc2hfZnVuLmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeSAocG9zc2libHkKKyAqICBjb250YWluaW5nIGV4dGVuc2lvbnMgZnJvbSB0aGUgSFAvU0dJIFNUTCBzdWJzZXQpLgorICovCisKKyNpZm5kZWYgX0JBQ0tXQVJEX0hBU0hfRlVOX0gKKyNkZWZpbmUgX0JBQ0tXQVJEX0hBU0hfRlVOX0ggMQorCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKworICB1c2luZyBzdGQ6OnNpemVfdDsKKworICB0ZW1wbGF0ZTxjbGFzcyBfS2V5PgorICAgIHN0cnVjdCBoYXNoIHsgfTsKKworICBpbmxpbmUgc2l6ZV90CisgIF9fc3RsX2hhc2hfc3RyaW5nKGNvbnN0IGNoYXIqIF9fcykKKyAgeworICAgIHVuc2lnbmVkIGxvbmcgX19oID0gMDsKKyAgICBmb3IgKCA7ICpfX3M7ICsrX19zKQorICAgICAgX19oID0gNSAqIF9faCArICpfX3M7CisgICAgcmV0dXJuIHNpemVfdChfX2gpOworICB9CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBoYXNoPGNoYXIqPgorICAgIHsKKyAgICAgIHNpemVfdAorICAgICAgb3BlcmF0b3IoKShjb25zdCBjaGFyKiBfX3MpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3N0bF9oYXNoX3N0cmluZyhfX3MpOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGhhc2g8Y29uc3QgY2hhcio+CisgICAgeworICAgICAgc2l6ZV90CisgICAgICBvcGVyYXRvcigpKGNvbnN0IGNoYXIqIF9fcykgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fc3RsX2hhc2hfc3RyaW5nKF9fcyk7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgaGFzaDxjaGFyPgorICAgIHsgCisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoY2hhciBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3g7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgaGFzaDx1bnNpZ25lZCBjaGFyPgorICAgIHsgCisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkodW5zaWduZWQgY2hhciBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3g7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgaGFzaDxzaWduZWQgY2hhcj4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkodW5zaWduZWQgY2hhciBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3g7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgaGFzaDxzaG9ydD4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoc2hvcnQgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX194OyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGhhc2g8dW5zaWduZWQgc2hvcnQ+CisgICAgeworICAgICAgc2l6ZV90CisgICAgICBvcGVyYXRvcigpKHVuc2lnbmVkIHNob3J0IF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feDsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBoYXNoPGludD4KKyAgICB7IAorICAgICAgc2l6ZV90IAorICAgICAgb3BlcmF0b3IoKShpbnQgX194KSBjb25zdCAKKyAgICAgIHsgcmV0dXJuIF9feDsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBoYXNoPHVuc2lnbmVkIGludD4KKyAgICB7IAorICAgICAgc2l6ZV90CisgICAgICBvcGVyYXRvcigpKHVuc2lnbmVkIGludCBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3g7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgaGFzaDxsb25nPgorICAgIHsKKyAgICAgIHNpemVfdAorICAgICAgb3BlcmF0b3IoKShsb25nIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feDsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBoYXNoPHVuc2lnbmVkIGxvbmc+CisgICAgeworICAgICAgc2l6ZV90CisgICAgICBvcGVyYXRvcigpKHVuc2lnbmVkIGxvbmcgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX194OyB9CisgICAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYmFja3dhcmQvaGFzaF9tYXAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JhY2t3YXJkL2hhc2hfbWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxM2VjNDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JhY2t3YXJkL2hhc2hfbWFwCkBAIC0wLDAgKzEsNTkxIEBACisvLyBIYXNoaW5nIG1hcCBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqLworCisvKiogQGZpbGUgYmFja3dhcmQvaGFzaF9tYXAKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeSAocG9zc2libHkKKyAqICBjb250YWluaW5nIGV4dGVuc2lvbnMgZnJvbSB0aGUgSFAvU0dJIFNUTCBzdWJzZXQpLgorICovCisKKyNpZm5kZWYgX0JBQ0tXQVJEX0hBU0hfTUFQCisjZGVmaW5lIF9CQUNLV0FSRF9IQVNIX01BUCAxCisKKyNpbmNsdWRlICJiYWNrd2FyZF93YXJuaW5nLmgiCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxiYWNrd2FyZC9oYXNodGFibGUuaD4KKyNpbmNsdWRlIDxiaXRzL2NvbmNlcHRfY2hlY2suaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKworICB1c2luZyBzdGQ6OmVxdWFsX3RvOworICB1c2luZyBzdGQ6OmFsbG9jYXRvcjsKKyAgdXNpbmcgc3RkOjpwYWlyOworICB1c2luZyBzdGQ6Ol9TZWxlY3Qxc3Q7CisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIFNHSSBleHRlbnNpb24uCisgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICAqICBAZG9jdG9kbworICAgKi8KKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaEZuID0gaGFzaDxfS2V5PiwKKwkgICBjbGFzcyBfRXF1YWxLZXkgPSBlcXVhbF90bzxfS2V5PiwgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPF9UcD4gPgorICAgIGNsYXNzIGhhc2hfbWFwCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIGhhc2h0YWJsZTxwYWlyPGNvbnN0IF9LZXksIF9UcD4sX0tleSwgX0hhc2hGbiwKKwkJCV9TZWxlY3Qxc3Q8cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4sCisJCQlfRXF1YWxLZXksIF9BbGxvYz4gX0h0OworCisgICAgICBfSHQgX01faHQ7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6a2V5X3R5cGUga2V5X3R5cGU7CisgICAgICB0eXBlZGVmIF9UcCBkYXRhX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcCBtYXBwZWRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6aGFzaGVyIGhhc2hlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjprZXlfZXF1YWwga2V5X2VxdWFsOworICAgICAgCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6c2l6ZV90eXBlIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnBvaW50ZXIgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOworICAgICAgCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgICAKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIAorICAgICAgaGFzaGVyCisgICAgICBoYXNoX2Z1bmN0KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0Lmhhc2hfZnVuY3QoKTsgfQorCisgICAgICBrZXlfZXF1YWwKKyAgICAgIGtleV9lcSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5rZXlfZXEoKTsgfQorCisgICAgICBhbGxvY2F0b3JfdHlwZQorICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5nZXRfYWxsb2NhdG9yKCk7IH0KKworICAgICAgaGFzaF9tYXAoKQorICAgICAgOiBfTV9odCgxMDAsIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KKyAgCisgICAgICBleHBsaWNpdAorICAgICAgaGFzaF9tYXAoc2l6ZV90eXBlIF9fbikKKyAgICAgIDogX01faHQoX19uLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CisKKyAgICAgIGhhc2hfbWFwKHNpemVfdHlwZSBfX24sIGNvbnN0IGhhc2hlciYgX19oZikKKyAgICAgIDogX01faHQoX19uLCBfX2hmLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KKworICAgICAgaGFzaF9tYXAoc2l6ZV90eXBlIF9fbiwgY29uc3QgaGFzaGVyJiBfX2hmLCBjb25zdCBrZXlfZXF1YWwmIF9fZXFsLAorCSAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX01faHQoX19uLCBfX2hmLCBfX2VxbCwgX19hKSB7fQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgaGFzaF9tYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wpCisJOiBfTV9odCgxMDAsIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19sKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgaGFzaF9tYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24pCisJOiBfTV9odChfX24sIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19sKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgaGFzaF9tYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24sCisJCSBjb25zdCBoYXNoZXImIF9faGYpCisJOiBfTV9odChfX24sIF9faGYsIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgICB7IF9NX2h0Lmluc2VydF91bmlxdWUoX19mLCBfX2wpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBoYXNoX21hcChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbiwKKwkJIGNvbnN0IGhhc2hlciYgX19oZiwgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCwKKwkJIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX01faHQoX19uLCBfX2hmLCBfX2VxbCwgX19hKQorICAgICAgICB7IF9NX2h0Lmluc2VydF91bmlxdWUoX19mLCBfX2wpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5zaXplKCk7IH0KKyAgICAgIAorICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5tYXhfc2l6ZSgpOyB9CisgICAgICAKKyAgICAgIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVtcHR5KCk7IH0KKyAgCisgICAgICB2b2lkCisgICAgICBzd2FwKGhhc2hfbWFwJiBfX2hzKQorICAgICAgeyBfTV9odC5zd2FwKF9faHMuX01faHQpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9LMSwgY2xhc3MgX1QxLCBjbGFzcyBfSEYsIGNsYXNzIF9FcUssIGNsYXNzIF9BbD4KKyAgICAgICAgZnJpZW5kIGJvb2wKKyAgICAgICAgb3BlcmF0b3I9PSAoY29uc3QgaGFzaF9tYXA8X0sxLCBfVDEsIF9IRiwgX0VxSywgX0FsPiYsCisJCSAgICBjb25zdCBoYXNoX21hcDxfSzEsIF9UMSwgX0hGLCBfRXFLLCBfQWw+Jik7CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpCisgICAgICB7IHJldHVybiBfTV9odC5iZWdpbigpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKQorICAgICAgeyByZXR1cm4gX01faHQuZW5kKCk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmJlZ2luKCk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5lbmQoKTsgfQorCisgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPgorICAgICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQorICAgICAgeyByZXR1cm4gX01faHQuaW5zZXJ0X3VuaXF1ZShfX29iaik7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sKQorICAgICAgICB7IF9NX2h0Lmluc2VydF91bmlxdWUoX19mLCBfX2wpOyB9CisKKyAgICAgIHBhaXI8aXRlcmF0b3IsIGJvb2w+CisgICAgICBpbnNlcnRfbm9yZXNpemUoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCisgICAgICB7IHJldHVybiBfTV9odC5pbnNlcnRfdW5pcXVlX25vcmVzaXplKF9fb2JqKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rZXkpCisgICAgICB7IHJldHVybiBfTV9odC5maW5kKF9fa2V5KTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5maW5kKF9fa2V5KTsgfQorCisgICAgICBfVHAmCisgICAgICBvcGVyYXRvcltdKGNvbnN0IGtleV90eXBlJiBfX2tleSkKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmZpbmRfb3JfaW5zZXJ0KHZhbHVlX3R5cGUoX19rZXksIF9UcCgpKSkuc2Vjb25kOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgY291bnQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuY291bnQoX19rZXkpOyB9CisKKyAgICAgIHBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQorICAgICAgeyByZXR1cm4gX01faHQuZXF1YWxfcmFuZ2UoX19rZXkpOyB9CisKKyAgICAgIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZXF1YWxfcmFuZ2UoX19rZXkpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQorICAgICAge3JldHVybiBfTV9odC5lcmFzZShfX2tleSk7IH0KKworICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19pdCkKKyAgICAgIHsgX01faHQuZXJhc2UoX19pdCk7IH0KKworICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19mLCBpdGVyYXRvciBfX2wpCisgICAgICB7IF9NX2h0LmVyYXNlKF9fZiwgX19sKTsgfQorCisgICAgICB2b2lkCisgICAgICBjbGVhcigpCisgICAgICB7IF9NX2h0LmNsZWFyKCk7IH0KKworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX2hpbnQpCisgICAgICB7IF9NX2h0LnJlc2l6ZShfX2hpbnQpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgYnVja2V0X2NvdW50KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmJ1Y2tldF9jb3VudCgpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X2J1Y2tldF9jb3VudCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5tYXhfYnVja2V0X2NvdW50KCk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBlbGVtc19pbl9idWNrZXQoc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVsZW1zX2luX2J1Y2tldChfX24pOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoRm4sIGNsYXNzIF9FcWxLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgaGFzaF9tYXA8X0tleSwgX1RwLCBfSGFzaEZuLCBfRXFsS2V5LCBfQWxsb2M+JiBfX2htMSwKKwkgICAgICAgY29uc3QgaGFzaF9tYXA8X0tleSwgX1RwLCBfSGFzaEZuLCBfRXFsS2V5LCBfQWxsb2M+JiBfX2htMikKKyAgICB7IHJldHVybiBfX2htMS5fTV9odCA9PSBfX2htMi5fTV9odDsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2hGbiwgY2xhc3MgX0VxbEtleSwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBoYXNoX21hcDxfS2V5LCBfVHAsIF9IYXNoRm4sIF9FcWxLZXksIF9BbGxvYz4mIF9faG0xLAorCSAgICAgICBjb25zdCBoYXNoX21hcDxfS2V5LCBfVHAsIF9IYXNoRm4sIF9FcWxLZXksIF9BbGxvYz4mIF9faG0yKQorICAgIHsgcmV0dXJuICEoX19obTEgPT0gX19obTIpOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaEZuLCBjbGFzcyBfRXFsS2V5LCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKGhhc2hfbWFwPF9LZXksIF9UcCwgX0hhc2hGbiwgX0VxbEtleSwgX0FsbG9jPiYgX19obTEsCisJIGhhc2hfbWFwPF9LZXksIF9UcCwgX0hhc2hGbiwgX0VxbEtleSwgX0FsbG9jPiYgX19obTIpCisgICAgeyBfX2htMS5zd2FwKF9faG0yKTsgfQorCisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIFNHSSBleHRlbnNpb24uCisgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICAqICBAZG9jdG9kbworICAgKi8KKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLAorCSAgIGNsYXNzIF9IYXNoRm4gPSBoYXNoPF9LZXk+LAorCSAgIGNsYXNzIF9FcXVhbEtleSA9IGVxdWFsX3RvPF9LZXk+LAorCSAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfVHA+ID4KKyAgICBjbGFzcyBoYXNoX211bHRpbWFwCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlcyhfS2V5LCBfU0dJQXNzaWduYWJsZUNvbmNlcHQpCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX1RwLCBfU0dJQXNzaWduYWJsZUNvbmNlcHQpCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMzKF9IYXNoRm4sIHNpemVfdCwgX0tleSwgX1VuYXJ5RnVuY3Rpb25Db25jZXB0KQorICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzMyhfRXF1YWxLZXksIF9LZXksIF9LZXksIF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0KQorCQorICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIGhhc2h0YWJsZTxwYWlyPGNvbnN0IF9LZXksIF9UcD4sIF9LZXksIF9IYXNoRm4sCisJCQlfU2VsZWN0MXN0PHBhaXI8Y29uc3QgX0tleSwgX1RwPiA+LCBfRXF1YWxLZXksIF9BbGxvYz4KKyAgICAgICAgICBfSHQ7CisKKyAgICAgIF9IdCBfTV9odDsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjprZXlfdHlwZSBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RwIGRhdGFfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RwIG1hcHBlZF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpoYXNoZXIgaGFzaGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmtleV9lcXVhbCBrZXlfZXF1YWw7CisgICAgICAKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpzaXplX3R5cGUgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6cG9pbnRlciBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpyZWZlcmVuY2UgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CisgICAgICAKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjppdGVyYXRvciBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICAgIAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOworICAgICAgCisgICAgICBoYXNoZXIKKyAgICAgIGhhc2hfZnVuY3QoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuaGFzaF9mdW5jdCgpOyB9CisKKyAgICAgIGtleV9lcXVhbAorICAgICAga2V5X2VxKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmtleV9lcSgpOyB9CisKKyAgICAgIGFsbG9jYXRvcl90eXBlCisgICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmdldF9hbGxvY2F0b3IoKTsgfQorCisgICAgICBoYXNoX211bHRpbWFwKCkKKyAgICAgIDogX01faHQoMTAwLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBoYXNoX211bHRpbWFwKHNpemVfdHlwZSBfX24pCisgICAgICA6IF9NX2h0KF9fbiwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQorCisgICAgICBoYXNoX211bHRpbWFwKHNpemVfdHlwZSBfX24sIGNvbnN0IGhhc2hlciYgX19oZikKKyAgICAgIDogX01faHQoX19uLCBfX2hmLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KKworICAgICAgaGFzaF9tdWx0aW1hcChzaXplX3R5cGUgX19uLCBjb25zdCBoYXNoZXImIF9faGYsIGNvbnN0IGtleV9lcXVhbCYgX19lcWwsCisJCSAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX01faHQoX19uLCBfX2hmLCBfX2VxbCwgX19hKSB7fQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgaGFzaF9tdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCkKKwk6IF9NX2h0KDEwMCwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgICB7IF9NX2h0Lmluc2VydF9lcXVhbChfX2YsIF9fbCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGhhc2hfbXVsdGltYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24pCisJOiBfTV9odChfX24sIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfZXF1YWwoX19mLCBfX2wpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBoYXNoX211bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19uLAorCQkgICAgICBjb25zdCBoYXNoZXImIF9faGYpCisJOiBfTV9odChfX24sIF9faGYsIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgICB7IF9NX2h0Lmluc2VydF9lcXVhbChfX2YsIF9fbCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGhhc2hfbXVsdGltYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24sCisJCSAgICAgIGNvbnN0IGhhc2hlciYgX19oZiwgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCwKKwkJICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfTV9odChfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICAgIHsgX01faHQuaW5zZXJ0X2VxdWFsKF9fZiwgX19sKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIHNpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuc2l6ZSgpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQubWF4X3NpemUoKTsgfQorCisgICAgICBib29sCisgICAgICBlbXB0eSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5lbXB0eSgpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoaGFzaF9tdWx0aW1hcCYgX19ocykKKyAgICAgIHsgX01faHQuc3dhcChfX2hzLl9NX2h0KTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0hGLCBjbGFzcyBfRXFLLCBjbGFzcyBfQWw+CisgICAgICAgIGZyaWVuZCBib29sCisgICAgICAgIG9wZXJhdG9yPT0oY29uc3QgaGFzaF9tdWx0aW1hcDxfSzEsIF9UMSwgX0hGLCBfRXFLLCBfQWw+JiwKKwkJICAgY29uc3QgaGFzaF9tdWx0aW1hcDxfSzEsIF9UMSwgX0hGLCBfRXFLLCBfQWw+Jik7CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpCisgICAgICB7IHJldHVybiBfTV9odC5iZWdpbigpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKQorICAgICAgeyByZXR1cm4gX01faHQuZW5kKCk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmJlZ2luKCk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5lbmQoKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQorICAgICAgeyByZXR1cm4gX01faHQuaW5zZXJ0X2VxdWFsKF9fb2JqKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wpCisgICAgICAgIHsgX01faHQuaW5zZXJ0X2VxdWFsKF9fZixfX2wpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnRfbm9yZXNpemUoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCisgICAgICB7IHJldHVybiBfTV9odC5pbnNlcnRfZXF1YWxfbm9yZXNpemUoX19vYmopOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2tleSkKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmZpbmQoX19rZXkpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmZpbmQoX19rZXkpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgY291bnQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuY291bnQoX19rZXkpOyB9CisKKyAgICAgIHBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQorICAgICAgeyByZXR1cm4gX01faHQuZXF1YWxfcmFuZ2UoX19rZXkpOyB9CisKKyAgICAgIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZXF1YWxfcmFuZ2UoX19rZXkpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQorICAgICAgeyByZXR1cm4gX01faHQuZXJhc2UoX19rZXkpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9faXQpCisgICAgICB7IF9NX2h0LmVyYXNlKF9faXQpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZiwgaXRlcmF0b3IgX19sKQorICAgICAgeyBfTV9odC5lcmFzZShfX2YsIF9fbCk7IH0KKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKQorICAgICAgeyBfTV9odC5jbGVhcigpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19oaW50KQorICAgICAgeyBfTV9odC5yZXNpemUoX19oaW50KTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGJ1Y2tldF9jb3VudCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5idWNrZXRfY291bnQoKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9idWNrZXRfY291bnQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQubWF4X2J1Y2tldF9jb3VudCgpOyB9CisgICAgICAKKyAgICAgIHNpemVfdHlwZQorICAgICAgZWxlbXNfaW5fYnVja2V0KHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5lbGVtc19pbl9idWNrZXQoX19uKTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSEYsIGNsYXNzIF9FcUtleSwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBoYXNoX211bHRpbWFwPF9LZXksIF9UcCwgX0hGLCBfRXFLZXksIF9BbGxvYz4mIF9faG0xLAorCSAgICAgICBjb25zdCBoYXNoX211bHRpbWFwPF9LZXksIF9UcCwgX0hGLCBfRXFLZXksIF9BbGxvYz4mIF9faG0yKQorICAgIHsgcmV0dXJuIF9faG0xLl9NX2h0ID09IF9faG0yLl9NX2h0OyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSEYsIGNsYXNzIF9FcUtleSwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBoYXNoX211bHRpbWFwPF9LZXksIF9UcCwgX0hGLCBfRXFLZXksIF9BbGxvYz4mIF9faG0xLAorCSAgICAgICBjb25zdCBoYXNoX211bHRpbWFwPF9LZXksIF9UcCwgX0hGLCBfRXFLZXksIF9BbGxvYz4mIF9faG0yKQorICAgIHsgcmV0dXJuICEoX19obTEgPT0gX19obTIpOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaEZuLCBjbGFzcyBfRXFsS2V5LCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKGhhc2hfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaEZuLCBfRXFsS2V5LCBfQWxsb2M+JiBfX2htMSwKKwkgaGFzaF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoRm4sIF9FcWxLZXksIF9BbGxvYz4mIF9faG0yKQorICAgIHsgX19obTEuc3dhcChfX2htMik7IH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8vIFNwZWNpYWxpemF0aW9uIG9mIGluc2VydF9pdGVyYXRvciBzbyB0aGF0IGl0IHdpbGwgd29yayBmb3IgaGFzaF9tYXAKKyAgLy8gYW5kIGhhc2hfbXVsdGltYXAuCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2hGbiwgIGNsYXNzIF9FcUtleSwgY2xhc3MgX0FsbG9jPgorICAgIGNsYXNzIGluc2VydF9pdGVyYXRvcjxfX2dudV9jeHg6Omhhc2hfbWFwPF9LZXksIF9UcCwgX0hhc2hGbiwgCisJCQkJCSAgICAgIF9FcUtleSwgX0FsbG9jPiA+CisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpoYXNoX21hcDxfS2V5LCBfVHAsIF9IYXNoRm4sIF9FcUtleSwgX0FsbG9jPgorICAgICAgICBfQ29udGFpbmVyOworICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfQ29udGFpbmVyICAgICAgICAgIGNvbnRhaW5lcl90eXBlOworICAgICAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OworICAgICAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgCisgICAgICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KQorICAgICAgOiBjb250YWluZXIoJl9feCkge30KKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IpCisgICAgICA6IGNvbnRhaW5lcigmX194KSB7fQorCisgICAgICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCisgICAgICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkKKyAgICAgIHsKKwljb250YWluZXItPmluc2VydChfX3ZhbHVlKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yKigpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorCisgICAgICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCisgICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaEZuLCAgY2xhc3MgX0VxS2V5LCBjbGFzcyBfQWxsb2M+CisgICAgY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yPF9fZ251X2N4eDo6aGFzaF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoRm4sCisJCQkJCQkgICBfRXFLZXksIF9BbGxvYz4gPgorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6aGFzaF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoRm4sIF9FcUtleSwgX0FsbG9jPgorICAgICAgICBfQ29udGFpbmVyOworICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOworICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgaXRlcjsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWluZXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkKKyAgICAgIDogY29udGFpbmVyKCZfX3gpIHt9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yKQorICAgICAgOiBjb250YWluZXIoJl9feCkge30KKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpCisgICAgICB7CisJY29udGFpbmVyLT5pbnNlcnQoX192YWx1ZSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCisgICAgICBvcGVyYXRvciooKQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorCisgICAgICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisgICAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYmFja3dhcmQvaGFzaF9zZXQgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JhY2t3YXJkL2hhc2hfc2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMmFkZTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JhY2t3YXJkL2hhc2hfc2V0CkBAIC0wLDAgKzEsNTU5IEBACisvLyBIYXNoaW5nIHNldCBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqLworCisvKiogQGZpbGUgYmFja3dhcmQvaGFzaF9zZXQKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeSAocG9zc2libHkKKyAqICBjb250YWluaW5nIGV4dGVuc2lvbnMgZnJvbSB0aGUgSFAvU0dJIFNUTCBzdWJzZXQpLgorICovCisKKyNpZm5kZWYgX0JBQ0tXQVJEX0hBU0hfU0VUCisjZGVmaW5lIF9CQUNLV0FSRF9IQVNIX1NFVCAxCisKKyNpbmNsdWRlICJiYWNrd2FyZF93YXJuaW5nLmgiCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxiYWNrd2FyZC9oYXNodGFibGUuaD4KKyNpbmNsdWRlIDxiaXRzL2NvbmNlcHRfY2hlY2suaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKworICB1c2luZyBzdGQ6OmVxdWFsX3RvOworICB1c2luZyBzdGQ6OmFsbG9jYXRvcjsKKyAgdXNpbmcgc3RkOjpwYWlyOworICB1c2luZyBzdGQ6Ol9JZGVudGl0eTsKKworICAvKioKKyAgICogIFRoaXMgaXMgYW4gU0dJIGV4dGVuc2lvbi4KKyAgICogIEBpbmdyb3VwIFNHSWV4dGVuc2lvbnMKKyAgICogIEBkb2N0b2RvCisgICAqLworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoRmNuICA9IGhhc2g8X1ZhbHVlPiwKKwkgICBjbGFzcyBfRXF1YWxLZXkgPSBlcXVhbF90bzxfVmFsdWU+LAorCSAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfVmFsdWU+ID4KKyAgICBjbGFzcyBoYXNoX3NldAorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX1ZhbHVlLCBfU0dJQXNzaWduYWJsZUNvbmNlcHQpCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMzKF9IYXNoRmNuLCBzaXplX3QsIF9WYWx1ZSwgX1VuYXJ5RnVuY3Rpb25Db25jZXB0KQorICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzMyhfRXF1YWxLZXksIF9WYWx1ZSwgX1ZhbHVlLCBfQmluYXJ5UHJlZGljYXRlQ29uY2VwdCkKKworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIGhhc2h0YWJsZTxfVmFsdWUsIF9WYWx1ZSwgX0hhc2hGY24sIF9JZGVudGl0eTxfVmFsdWU+LAorCQkJX0VxdWFsS2V5LCBfQWxsb2M+IF9IdDsKKyAgICAgIF9IdCBfTV9odDsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjprZXlfdHlwZSBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6aGFzaGVyIGhhc2hlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjprZXlfZXF1YWwga2V5X2VxdWFsOworICAgICAgCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6c2l6ZV90eXBlIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnBvaW50ZXIgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOworICAgICAgCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgICAKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIAorICAgICAgaGFzaGVyCisgICAgICBoYXNoX2Z1bmN0KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0Lmhhc2hfZnVuY3QoKTsgfQorCisgICAgICBrZXlfZXF1YWwKKyAgICAgIGtleV9lcSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5rZXlfZXEoKTsgfQorCisgICAgICBhbGxvY2F0b3JfdHlwZQorICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5nZXRfYWxsb2NhdG9yKCk7IH0KKworICAgICAgaGFzaF9zZXQoKQorICAgICAgOiBfTV9odCgxMDAsIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KKworICAgICAgZXhwbGljaXQKKyAgICAgIGhhc2hfc2V0KHNpemVfdHlwZSBfX24pCisgICAgICA6IF9NX2h0KF9fbiwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQorCisgICAgICBoYXNoX3NldChzaXplX3R5cGUgX19uLCBjb25zdCBoYXNoZXImIF9faGYpCisgICAgICA6IF9NX2h0KF9fbiwgX19oZiwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CisKKyAgICAgIGhhc2hfc2V0KHNpemVfdHlwZSBfX24sIGNvbnN0IGhhc2hlciYgX19oZiwgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCwKKwkgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9NX2h0KF9fbiwgX19oZiwgX19lcWwsIF9fYSkge30KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGhhc2hfc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sKQorCTogX01faHQoMTAwLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCisgICAgICAgIHsgX01faHQuaW5zZXJ0X3VuaXF1ZShfX2YsIF9fbCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGhhc2hfc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19uKQorCTogX01faHQoX19uLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCisgICAgICAgIHsgX01faHQuaW5zZXJ0X3VuaXF1ZShfX2YsIF9fbCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGhhc2hfc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19uLAorCQkgY29uc3QgaGFzaGVyJiBfX2hmKQorCTogX01faHQoX19uLCBfX2hmLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19sKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgaGFzaF9zZXQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24sCisJCSBjb25zdCBoYXNoZXImIF9faGYsIGNvbnN0IGtleV9lcXVhbCYgX19lcWwsCisJCSBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKwk6IF9NX2h0KF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19sKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIHNpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuc2l6ZSgpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQubWF4X3NpemUoKTsgfQorICAgICAgCisgICAgICBib29sCisgICAgICBlbXB0eSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5lbXB0eSgpOyB9CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoaGFzaF9zZXQmIF9faHMpCisgICAgICB7IF9NX2h0LnN3YXAoX19ocy5fTV9odCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0hGLCBjbGFzcyBfRXFLLCBjbGFzcyBfQWw+CisgICAgICAgIGZyaWVuZCBib29sCisgICAgICAgIG9wZXJhdG9yPT0oY29uc3QgaGFzaF9zZXQ8X1ZhbCwgX0hGLCBfRXFLLCBfQWw+JiwKKwkJICAgY29uc3QgaGFzaF9zZXQ8X1ZhbCwgX0hGLCBfRXFLLCBfQWw+Jik7CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5iZWdpbigpOyB9CisgICAgICAKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZW5kKCk7IH0KKworICAgICAgcGFpcjxpdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICAgIHsKKwlwYWlyPHR5cGVuYW1lIF9IdDo6aXRlcmF0b3IsIGJvb2w+IF9fcCA9IF9NX2h0Lmluc2VydF91bmlxdWUoX19vYmopOworCXJldHVybiBwYWlyPGl0ZXJhdG9yLGJvb2w+KF9fcC5maXJzdCwgX19wLnNlY29uZCk7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19sKTsgfQorCisgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPgorICAgICAgaW5zZXJ0X25vcmVzaXplKGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQorICAgICAgeworCXBhaXI8dHlwZW5hbWUgX0h0OjppdGVyYXRvciwgYm9vbD4gX19wCisJICA9IF9NX2h0Lmluc2VydF91bmlxdWVfbm9yZXNpemUoX19vYmopOworCXJldHVybiBwYWlyPGl0ZXJhdG9yLCBib29sPihfX3AuZmlyc3QsIF9fcC5zZWNvbmQpOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5maW5kKF9fa2V5KTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmNvdW50KF9fa2V5KTsgfQorCisgICAgICBwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVxdWFsX3JhbmdlKF9fa2V5KTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX2tleSkKKyAgICAgIHtyZXR1cm4gX01faHQuZXJhc2UoX19rZXkpOyB9CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9faXQpCisgICAgICB7IF9NX2h0LmVyYXNlKF9faXQpOyB9CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZiwgaXRlcmF0b3IgX19sKQorICAgICAgeyBfTV9odC5lcmFzZShfX2YsIF9fbCk7IH0KKyAgICAgIAorICAgICAgdm9pZAorICAgICAgY2xlYXIoKQorICAgICAgeyBfTV9odC5jbGVhcigpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19oaW50KQorICAgICAgeyBfTV9odC5yZXNpemUoX19oaW50KTsgfQorICAgICAgCisgICAgICBzaXplX3R5cGUKKyAgICAgIGJ1Y2tldF9jb3VudCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5idWNrZXRfY291bnQoKTsgfQorICAgICAgCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9idWNrZXRfY291bnQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQubWF4X2J1Y2tldF9jb3VudCgpOyB9CisgICAgICAKKyAgICAgIHNpemVfdHlwZQorICAgICAgZWxlbXNfaW5fYnVja2V0KHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5lbGVtc19pbl9idWNrZXQoX19uKTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfSGFzaEZjbiwgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGhhc2hfc2V0PF9WYWx1ZSwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczEsCisJICAgICAgIGNvbnN0IGhhc2hfc2V0PF9WYWx1ZSwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczIpCisgICAgeyByZXR1cm4gX19oczEuX01faHQgPT0gX19oczIuX01faHQ7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgaGFzaF9zZXQ8X1ZhbHVlLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMSwKKwkgICAgICAgY29uc3QgaGFzaF9zZXQ8X1ZhbHVlLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMikKKyAgICB7IHJldHVybiAhKF9faHMxID09IF9faHMyKTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoaGFzaF9zZXQ8X1ZhbCwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczEsCisJIGhhc2hfc2V0PF9WYWwsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMyKQorICAgIHsgX19oczEuc3dhcChfX2hzMik7IH0KKworCisgIC8qKgorICAgKiAgVGhpcyBpcyBhbiBTR0kgZXh0ZW5zaW9uLgorICAgKiAgQGluZ3JvdXAgU0dJZXh0ZW5zaW9ucworICAgKiAgQGRvY3RvZG8KKyAgICovCisgIHRlbXBsYXRlPGNsYXNzIF9WYWx1ZSwKKwkgICBjbGFzcyBfSGFzaEZjbiA9IGhhc2g8X1ZhbHVlPiwKKwkgICBjbGFzcyBfRXF1YWxLZXkgPSBlcXVhbF90bzxfVmFsdWU+LAorCSAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfVmFsdWU+ID4KKyAgICBjbGFzcyBoYXNoX211bHRpc2V0CisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlcyhfVmFsdWUsIF9TR0lBc3NpZ25hYmxlQ29uY2VwdCkKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlczMoX0hhc2hGY24sIHNpemVfdCwgX1ZhbHVlLCBfVW5hcnlGdW5jdGlvbkNvbmNlcHQpCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMzKF9FcXVhbEtleSwgX1ZhbHVlLCBfVmFsdWUsIF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0KQorCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgaGFzaHRhYmxlPF9WYWx1ZSwgX1ZhbHVlLCBfSGFzaEZjbiwgX0lkZW50aXR5PF9WYWx1ZT4sCisJCQlfRXF1YWxLZXksIF9BbGxvYz4gX0h0OworICAgICAgX0h0IF9NX2h0OworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmtleV90eXBlIGtleV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpoYXNoZXIgaGFzaGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmtleV9lcXVhbCBrZXlfZXF1YWw7CisgICAgICAKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpzaXplX3R5cGUgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cG9pbnRlciBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpyZWZlcmVuY2UgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICAgIAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOworICAgICAgCisgICAgICBoYXNoZXIKKyAgICAgIGhhc2hfZnVuY3QoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuaGFzaF9mdW5jdCgpOyB9CisgICAgICAKKyAgICAgIGtleV9lcXVhbAorICAgICAga2V5X2VxKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmtleV9lcSgpOyB9CisgICAgICAKKyAgICAgIGFsbG9jYXRvcl90eXBlCisgICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmdldF9hbGxvY2F0b3IoKTsgfQorCisgICAgICBoYXNoX211bHRpc2V0KCkKKyAgICAgIDogX01faHQoMTAwLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBoYXNoX211bHRpc2V0KHNpemVfdHlwZSBfX24pCisgICAgICA6IF9NX2h0KF9fbiwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQorCisgICAgICBoYXNoX211bHRpc2V0KHNpemVfdHlwZSBfX24sIGNvbnN0IGhhc2hlciYgX19oZikKKyAgICAgIDogX01faHQoX19uLCBfX2hmLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KKyAgICAgIAorICAgICAgaGFzaF9tdWx0aXNldChzaXplX3R5cGUgX19uLCBjb25zdCBoYXNoZXImIF9faGYsIGNvbnN0IGtleV9lcXVhbCYgX19lcWwsCisJCSAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX01faHQoX19uLCBfX2hmLCBfX2VxbCwgX19hKSB7fQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgaGFzaF9tdWx0aXNldChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCkKKwk6IF9NX2h0KDEwMCwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgICB7IF9NX2h0Lmluc2VydF9lcXVhbChfX2YsIF9fbCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGhhc2hfbXVsdGlzZXQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24pCisJOiBfTV9odChfX24sIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfZXF1YWwoX19mLCBfX2wpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBoYXNoX211bHRpc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19uLAorCQkgICAgICBjb25zdCBoYXNoZXImIF9faGYpCisJOiBfTV9odChfX24sIF9faGYsIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgICB7IF9NX2h0Lmluc2VydF9lcXVhbChfX2YsIF9fbCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGhhc2hfbXVsdGlzZXQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24sCisJCSAgICAgIGNvbnN0IGhhc2hlciYgX19oZiwgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCwKKwkJICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfTV9odChfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICAgIHsgX01faHQuaW5zZXJ0X2VxdWFsKF9fZiwgX19sKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIHNpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuc2l6ZSgpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQubWF4X3NpemUoKTsgfQorCisgICAgICBib29sCisgICAgICBlbXB0eSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5lbXB0eSgpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoaGFzaF9tdWx0aXNldCYgaHMpCisgICAgICB7IF9NX2h0LnN3YXAoaHMuX01faHQpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9IRiwgY2xhc3MgX0VxSywgY2xhc3MgX0FsPgorICAgICAgICBmcmllbmQgYm9vbAorICAgICAgICBvcGVyYXRvcj09KGNvbnN0IGhhc2hfbXVsdGlzZXQ8X1ZhbCwgX0hGLCBfRXFLLCBfQWw+JiwKKwkJICAgY29uc3QgaGFzaF9tdWx0aXNldDxfVmFsLCBfSEYsIF9FcUssIF9BbD4mKTsKKworICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmJlZ2luKCk7IH0KKyAgICAgIAorICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5lbmQoKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQorICAgICAgeyByZXR1cm4gX01faHQuaW5zZXJ0X2VxdWFsKF9fb2JqKTsgfQorICAKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfZXF1YWwoX19mLF9fbCk7IH0KKyAgCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0X25vcmVzaXplKGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQorICAgICAgeyByZXR1cm4gX01faHQuaW5zZXJ0X2VxdWFsX25vcmVzaXplKF9fb2JqKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5maW5kKF9fa2V5KTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmNvdW50KF9fa2V5KTsgfQorCisgICAgICBwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVxdWFsX3JhbmdlKF9fa2V5KTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX2tleSkKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVyYXNlKF9fa2V5KTsgfQorICAKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9faXQpCisgICAgICB7IF9NX2h0LmVyYXNlKF9faXQpOyB9CisgIAorICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19mLCBpdGVyYXRvciBfX2wpCisgICAgICB7IF9NX2h0LmVyYXNlKF9fZiwgX19sKTsgfQorICAKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCkKKyAgICAgIHsgX01faHQuY2xlYXIoKTsgfQorCisgICAgICB2b2lkCisgICAgICByZXNpemUoc2l6ZV90eXBlIF9faGludCkKKyAgICAgIHsgX01faHQucmVzaXplKF9faGludCk7IH0KKyAgCisgICAgICBzaXplX3R5cGUKKyAgICAgIGJ1Y2tldF9jb3VudCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5idWNrZXRfY291bnQoKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9idWNrZXRfY291bnQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQubWF4X2J1Y2tldF9jb3VudCgpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgZWxlbXNfaW5fYnVja2V0KHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5lbGVtc19pbl9idWNrZXQoX19uKTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBoYXNoX211bHRpc2V0PF9WYWwsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMxLAorCSAgICAgICBjb25zdCBoYXNoX211bHRpc2V0PF9WYWwsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMyKQorICAgIHsgcmV0dXJuIF9faHMxLl9NX2h0ID09IF9faHMyLl9NX2h0OyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBoYXNoX211bHRpc2V0PF9WYWwsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMxLAorCSAgICAgICBjb25zdCBoYXNoX211bHRpc2V0PF9WYWwsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMyKQorICAgIHsgcmV0dXJuICEoX19oczEgPT0gX19oczIpOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChoYXNoX211bHRpc2V0PF9WYWwsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMxLAorCSBoYXNoX211bHRpc2V0PF9WYWwsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMyKQorICAgIHsgX19oczEuc3dhcChfX2hzMik7IH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8vIFNwZWNpYWxpemF0aW9uIG9mIGluc2VydF9pdGVyYXRvciBzbyB0aGF0IGl0IHdpbGwgd29yayBmb3IgaGFzaF9zZXQKKyAgLy8gYW5kIGhhc2hfbXVsdGlzZXQuCisgIHRlbXBsYXRlPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgorICAgIGNsYXNzIGluc2VydF9pdGVyYXRvcjxfX2dudV9jeHg6Omhhc2hfc2V0PF9WYWx1ZSwgX0hhc2hGY24sCisJCQkJCSAgICAgIF9FcXVhbEtleSwgX0FsbG9jPiA+CisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpoYXNoX3NldDxfVmFsdWUsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4KKyAgICAgICAgX0NvbnRhaW5lcjsKKyAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWluZXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkKKyAgICAgIDogY29udGFpbmVyKCZfX3gpIHt9CisgICAgICAKKyAgICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yKQorICAgICAgOiBjb250YWluZXIoJl9feCkge30KKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpCisgICAgICB7CisJY29udGFpbmVyLT5pbnNlcnQoX192YWx1ZSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCisgICAgICBvcGVyYXRvciooKQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKyAgICAgIAorICAgICAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorICAgICAgCisgICAgICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBjbGFzcyBpbnNlcnRfaXRlcmF0b3I8X19nbnVfY3h4OjpoYXNoX211bHRpc2V0PF9WYWx1ZSwgX0hhc2hGY24sCisJCQkJCQkgICBfRXF1YWxLZXksIF9BbGxvYz4gPgorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6aGFzaF9tdWx0aXNldDxfVmFsdWUsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4KKyAgICAgICAgX0NvbnRhaW5lcjsKKyAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsKKyAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5cGU7CisgICAgICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICAKKyAgICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpCisgICAgICA6IGNvbnRhaW5lcigmX194KSB7fQorICAgICAgCisgICAgICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvcikKKyAgICAgIDogY29udGFpbmVyKCZfX3gpIHt9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKQorICAgICAgeworCWNvbnRhaW5lci0+aW5zZXJ0KF9fdmFsdWUpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgorICAgICAgb3BlcmF0b3IqKCkKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgorICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CisgICAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYmFja3dhcmQvaGFzaHRhYmxlLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JhY2t3YXJkL2hhc2h0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YzFkOTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JhY2t3YXJkL2hhc2h0YWJsZS5oCkBAIC0wLDAgKzEsMTE0NiBAQAorLy8gSGFzaHRhYmxlIGltcGxlbWVudGF0aW9uIHVzZWQgYnkgY29udGFpbmVycyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5NworICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICovCisKKy8qKiBAZmlsZSBiYWNrd2FyZC9oYXNodGFibGUuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IChwb3NzaWJseQorICogIGNvbnRhaW5pbmcgZXh0ZW5zaW9ucyBmcm9tIHRoZSBIUC9TR0kgU1RMIHN1YnNldCkuCisgKi8KKworI2lmbmRlZiBfQkFDS1dBUkRfSEFTSFRBQkxFX0gKKyNkZWZpbmUgX0JBQ0tXQVJEX0hBU0hUQUJMRV9IIDEKKworLy8gSGFzaHRhYmxlIGNsYXNzLCB1c2VkIHRvIGltcGxlbWVudCB0aGUgaGFzaGVkIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMKKy8vIGhhc2hfc2V0LCBoYXNoX21hcCwgaGFzaF9tdWx0aXNldCwgYW5kIGhhc2hfbXVsdGltYXAuCisKKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGJpdHMvc3RsX2Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8YmFja3dhcmQvaGFzaF9mdW4uaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKworICB1c2luZyBzdGQ6OnNpemVfdDsKKyAgdXNpbmcgc3RkOjpwdHJkaWZmX3Q7CisgIHVzaW5nIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWc7CisgIHVzaW5nIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnOworICB1c2luZyBzdGQ6Ol9Db25zdHJ1Y3Q7CisgIHVzaW5nIHN0ZDo6X0Rlc3Ryb3k7CisgIHVzaW5nIHN0ZDo6ZGlzdGFuY2U7CisgIHVzaW5nIHN0ZDo6dmVjdG9yOworICB1c2luZyBzdGQ6OnBhaXI7CisgIHVzaW5nIHN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsPgorICAgIHN0cnVjdCBfSGFzaHRhYmxlX25vZGUKKyAgICB7CisgICAgICBfSGFzaHRhYmxlX25vZGUqIF9NX25leHQ7CisgICAgICBfVmFsIF9NX3ZhbDsKKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXh0cmFjdEtleSwgCisJICAgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxfVmFsPiA+CisgICAgY2xhc3MgaGFzaHRhYmxlOworCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IYXNoRmNuLAorCSAgIGNsYXNzIF9FeHRyYWN0S2V5LCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBzdHJ1Y3QgX0hhc2h0YWJsZV9pdGVyYXRvcjsKKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSGFzaEZjbiwKKwkgICBjbGFzcyBfRXh0cmFjdEtleSwgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+CisgICAgc3RydWN0IF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3I7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hhc2hGY24sCisJICAgY2xhc3MgX0V4dHJhY3RLZXksIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgorICAgIHN0cnVjdCBfSGFzaHRhYmxlX2l0ZXJhdG9yCisgICAgeworICAgICAgdHlwZWRlZiBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hhc2hGY24sIF9FeHRyYWN0S2V5LCBfRXF1YWxLZXksIF9BbGxvYz4KKyAgICAgICAgX0hhc2h0YWJsZTsKKyAgICAgIHR5cGVkZWYgX0hhc2h0YWJsZV9pdGVyYXRvcjxfVmFsLCBfS2V5LCBfSGFzaEZjbiwKKwkJCQkgIF9FeHRyYWN0S2V5LCBfRXF1YWxLZXksIF9BbGxvYz4KKyAgICAgICAgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3I8X1ZhbCwgX0tleSwgX0hhc2hGY24sCisJCQkJCV9FeHRyYWN0S2V5LCBfRXF1YWxLZXksIF9BbGxvYz4KKyAgICAgICAgY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIF9IYXNodGFibGVfbm9kZTxfVmFsPiBfTm9kZTsKKyAgICAgIHR5cGVkZWYgZm9yd2FyZF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisgICAgICB0eXBlZGVmIF9WYWwgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1ZhbCYgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBfVmFsKiBwb2ludGVyOworICAgICAgCisgICAgICBfTm9kZSogX01fY3VyOworICAgICAgX0hhc2h0YWJsZSogX01faHQ7CisKKyAgICAgIF9IYXNodGFibGVfaXRlcmF0b3IoX05vZGUqIF9fbiwgX0hhc2h0YWJsZSogX190YWIpCisgICAgICA6IF9NX2N1cihfX24pLCBfTV9odChfX3RhYikgeyB9CisKKyAgICAgIF9IYXNodGFibGVfaXRlcmF0b3IoKSB7IH0KKworICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fY3VyLT5fTV92YWw7IH0KKworICAgICAgcG9pbnRlcgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CisgICAgICB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQorCisgICAgICBpdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoKTsKKworICAgICAgaXRlcmF0b3IKKyAgICAgIG9wZXJhdG9yKysoaW50KTsKKworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgX19pdCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2N1ciA9PSBfX2l0Ll9NX2N1cjsgfQorCisgICAgICBib29sCisgICAgICBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBfX2l0KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fY3VyICE9IF9faXQuX01fY3VyOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSGFzaEZjbiwKKwkgICBjbGFzcyBfRXh0cmFjdEtleSwgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+CisgICAgc3RydWN0IF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3IKKyAgICB7CisgICAgICB0eXBlZGVmIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSGFzaEZjbiwgX0V4dHJhY3RLZXksIF9FcXVhbEtleSwgX0FsbG9jPgorICAgICAgICBfSGFzaHRhYmxlOworICAgICAgdHlwZWRlZiBfSGFzaHRhYmxlX2l0ZXJhdG9yPF9WYWwsX0tleSxfSGFzaEZjbiwKKwkJCQkgIF9FeHRyYWN0S2V5LF9FcXVhbEtleSxfQWxsb2M+CisgICAgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yPF9WYWwsIF9LZXksIF9IYXNoRmNuLAorCQkJCQlfRXh0cmFjdEtleSwgX0VxdWFsS2V5LCBfQWxsb2M+CisgICAgICAgIGNvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfSGFzaHRhYmxlX25vZGU8X1ZhbD4gX05vZGU7CisKKyAgICAgIHR5cGVkZWYgZm9yd2FyZF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisgICAgICB0eXBlZGVmIF9WYWwgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1ZhbCYgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBjb25zdCBfVmFsKiBwb2ludGVyOworICAgICAgCisgICAgICBjb25zdCBfTm9kZSogX01fY3VyOworICAgICAgY29uc3QgX0hhc2h0YWJsZSogX01faHQ7CisKKyAgICAgIF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3IoY29uc3QgX05vZGUqIF9fbiwgY29uc3QgX0hhc2h0YWJsZSogX190YWIpCisgICAgICA6IF9NX2N1cihfX24pLCBfTV9odChfX3RhYikgeyB9CisKKyAgICAgIF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3IoKSB7IH0KKworICAgICAgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcihjb25zdCBpdGVyYXRvciYgX19pdCkKKyAgICAgIDogX01fY3VyKF9faXQuX01fY3VyKSwgX01faHQoX19pdC5fTV9odCkgeyB9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2N1ci0+X01fdmFsOyB9CisKKyAgICAgIHBvaW50ZXIKKyAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcisrKCk7CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBvcGVyYXRvcisrKGludCk7CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIF9faXQpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9jdXIgPT0gX19pdC5fTV9jdXI7IH0KKworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCBjb25zdF9pdGVyYXRvciYgX19pdCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2N1ciAhPSBfX2l0Ll9NX2N1cjsgfQorICAgIH07CisKKyAgLy8gTm90ZTogYXNzdW1lcyBsb25nIGlzIGF0IGxlYXN0IDMyIGJpdHMuCisgIGVudW0geyBfU19udW1fcHJpbWVzID0gMjkgfTsKKworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBfX3N0bF9wcmltZV9saXN0W19TX251bV9wcmltZXNdID0KKyAgICB7CisgICAgICA1dWwsICAgICAgICAgIDUzdWwsICAgICAgICAgOTd1bCwgICAgICAgICAxOTN1bCwgICAgICAgMzg5dWwsCisgICAgICA3Njl1bCwgICAgICAgIDE1NDN1bCwgICAgICAgMzA3OXVsLCAgICAgICA2MTUxdWwsICAgICAgMTIyODl1bCwKKyAgICAgIDI0NTkzdWwsICAgICAgNDkxNTd1bCwgICAgICA5ODMxN3VsLCAgICAgIDE5NjYxM3VsLCAgICAzOTMyNDF1bCwKKyAgICAgIDc4NjQzM3VsLCAgICAgMTU3Mjg2OXVsLCAgICAzMTQ1NzM5dWwsICAgIDYyOTE0Njl1bCwgICAxMjU4MjkxN3VsLAorICAgICAgMjUxNjU4NDN1bCwgICA1MDMzMTY1M3VsLCAgIDEwMDY2MzMxOXVsLCAgMjAxMzI2NjExdWwsIDQwMjY1MzE4OXVsLAorICAgICAgODA1MzA2NDU3dWwsICAxNjEwNjEyNzQxdWwsIDMyMjEyMjU0NzN1bCwgNDI5NDk2NzI5MXVsCisgICAgfTsKKworICBpbmxpbmUgdW5zaWduZWQgbG9uZworICBfX3N0bF9uZXh0X3ByaW1lKHVuc2lnbmVkIGxvbmcgX19uKQorICB7CisgICAgY29uc3QgdW5zaWduZWQgbG9uZyogX19maXJzdCA9IF9fc3RsX3ByaW1lX2xpc3Q7CisgICAgY29uc3QgdW5zaWduZWQgbG9uZyogX19sYXN0ID0gX19zdGxfcHJpbWVfbGlzdCArIChpbnQpX1NfbnVtX3ByaW1lczsKKyAgICBjb25zdCB1bnNpZ25lZCBsb25nKiBwb3MgPSBzdGQ6Omxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKKyAgICByZXR1cm4gcG9zID09IF9fbGFzdCA/ICooX19sYXN0IC0gMSkgOiAqcG9zOworICB9CisKKyAgLy8gRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBvcGVyYXRvcj09LiAgCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LAorCSAgIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KKyAgICBjbGFzcyBoYXNodGFibGU7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsCisJICAgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgorICAgIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPiYgX19odDEsCisJICAgICAgIGNvbnN0IGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPiYgX19odDIpOworCisgIC8vIEhhc2h0YWJsZXMgaGFuZGxlIGFsbG9jYXRvcnMgYSBiaXQgZGlmZmVyZW50bHkgdGhhbiBvdGhlcgorICAvLyBjb250YWluZXJzIGRvLiAgSWYgd2UncmUgdXNpbmcgc3RhbmRhcmQtY29uZm9ybWluZyBhbGxvY2F0b3JzLCB0aGVuCisgIC8vIGEgaGFzaHRhYmxlIHVuY29uZGl0aW9uYWxseSBoYXMgYSBtZW1iZXIgdmFyaWFibGUgdG8gaG9sZCBpdHMKKyAgLy8gYWxsb2NhdG9yLCBldmVuIGlmIGl0IHNvIGhhcHBlbnMgdGhhdCBhbGwgaW5zdGFuY2VzIG9mIHRoZQorICAvLyBhbGxvY2F0b3IgdHlwZSBhcmUgaWRlbnRpY2FsLiAgVGhpcyBpcyBiZWNhdXNlLCBmb3IgaGFzaHRhYmxlcywKKyAgLy8gdGhpcyBleHRyYSBzdG9yYWdlIGlzIG5lZ2xpZ2libGUuICBBZGRpdGlvbmFsbHksIGEgYmFzZSBjbGFzcworICAvLyB3b3VsZG4ndCBzZXJ2ZSBhbnkgb3RoZXIgcHVycG9zZXM7IGl0IHdvdWxkbid0LCBmb3IgZXhhbXBsZSwKKyAgLy8gc2ltcGxpZnkgdGhlIGV4Y2VwdGlvbi1oYW5kbGluZyBjb2RlLiAgCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IYXNoRmNuLAorCSAgIGNsYXNzIF9FeHRyYWN0S2V5LCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBjbGFzcyBoYXNodGFibGUKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfS2V5IGtleV90eXBlOworICAgICAgdHlwZWRlZiBfVmFsIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9IYXNoRmNuIGhhc2hlcjsKKyAgICAgIHR5cGVkZWYgX0VxdWFsS2V5IGtleV9lcXVhbDsKKworICAgICAgdHlwZWRlZiBzaXplX3QgICAgICAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHB0cmRpZmZfdCAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSogICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSYgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIGhhc2hlcgorICAgICAgaGFzaF9mdW5jdCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oYXNoOyB9CisKKyAgICAgIGtleV9lcXVhbAorICAgICAga2V5X2VxKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2VxdWFsczsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX0hhc2h0YWJsZV9ub2RlPF9WYWw+IF9Ob2RlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDx2YWx1ZV90eXBlPjo6b3RoZXIgYWxsb2NhdG9yX3R5cGU7CisgICAgICBhbGxvY2F0b3JfdHlwZQorICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvcjsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8X05vZGU+OjpvdGhlciBfTm9kZV9BbGxvYzsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8X05vZGUqPjo6b3RoZXIgX05vZGVwdHJfQWxsb2M7CisgICAgICB0eXBlZGVmIHZlY3RvcjxfTm9kZSosIF9Ob2RlcHRyX0FsbG9jPiBfVmVjdG9yX3R5cGU7CisKKyAgICAgIF9Ob2RlX0FsbG9jIF9NX25vZGVfYWxsb2NhdG9yOworCisgICAgICBfTm9kZSoKKyAgICAgIF9NX2dldF9ub2RlKCkKKyAgICAgIHsgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3B1dF9ub2RlKF9Ob2RlKiBfX3ApCisgICAgICB7IF9NX25vZGVfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCAxKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIGhhc2hlciAgICAgICAgICAgICAgICBfTV9oYXNoOworICAgICAga2V5X2VxdWFsICAgICAgICAgICAgIF9NX2VxdWFsczsKKyAgICAgIF9FeHRyYWN0S2V5ICAgICAgICAgICBfTV9nZXRfa2V5OworICAgICAgX1ZlY3Rvcl90eXBlICAgICAgICAgIF9NX2J1Y2tldHM7CisgICAgICBzaXplX3R5cGUgICAgICAgICAgICAgX01fbnVtX2VsZW1lbnRzOworICAgICAgCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfSGFzaHRhYmxlX2l0ZXJhdG9yPF9WYWwsIF9LZXksIF9IYXNoRmNuLCBfRXh0cmFjdEtleSwKKwkJCQkgIF9FcXVhbEtleSwgX0FsbG9jPgorICAgICAgICBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcjxfVmFsLCBfS2V5LCBfSGFzaEZjbiwgX0V4dHJhY3RLZXksCisJCQkJCV9FcXVhbEtleSwgX0FsbG9jPgorICAgICAgICBjb25zdF9pdGVyYXRvcjsKKworICAgICAgZnJpZW5kIHN0cnVjdAorICAgICAgX0hhc2h0YWJsZV9pdGVyYXRvcjxfVmFsLCBfS2V5LCBfSGFzaEZjbiwgX0V4dHJhY3RLZXksIF9FcXVhbEtleSwgX0FsbG9jPjsKKworICAgICAgZnJpZW5kIHN0cnVjdAorICAgICAgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcjxfVmFsLCBfS2V5LCBfSGFzaEZjbiwgX0V4dHJhY3RLZXksCisJCQkJX0VxdWFsS2V5LCBfQWxsb2M+OworCisgICAgcHVibGljOgorICAgICAgaGFzaHRhYmxlKHNpemVfdHlwZSBfX24sIGNvbnN0IF9IYXNoRmNuJiBfX2hmLAorCQljb25zdCBfRXF1YWxLZXkmIF9fZXFsLCBjb25zdCBfRXh0cmFjdEtleSYgX19leHQsCisJCWNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfTV9ub2RlX2FsbG9jYXRvcihfX2EpLCBfTV9oYXNoKF9faGYpLCBfTV9lcXVhbHMoX19lcWwpLAorCV9NX2dldF9rZXkoX19leHQpLCBfTV9idWNrZXRzKF9fYSksIF9NX251bV9lbGVtZW50cygwKQorICAgICAgeyBfTV9pbml0aWFsaXplX2J1Y2tldHMoX19uKTsgfQorCisgICAgICBoYXNodGFibGUoc2l6ZV90eXBlIF9fbiwgY29uc3QgX0hhc2hGY24mIF9faGYsCisJCWNvbnN0IF9FcXVhbEtleSYgX19lcWwsCisJCWNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfTV9ub2RlX2FsbG9jYXRvcihfX2EpLCBfTV9oYXNoKF9faGYpLCBfTV9lcXVhbHMoX19lcWwpLAorCV9NX2dldF9rZXkoX0V4dHJhY3RLZXkoKSksIF9NX2J1Y2tldHMoX19hKSwgX01fbnVtX2VsZW1lbnRzKDApCisgICAgICB7IF9NX2luaXRpYWxpemVfYnVja2V0cyhfX24pOyB9CisKKyAgICAgIGhhc2h0YWJsZShjb25zdCBoYXNodGFibGUmIF9faHQpCisgICAgICA6IF9NX25vZGVfYWxsb2NhdG9yKF9faHQuZ2V0X2FsbG9jYXRvcigpKSwgX01faGFzaChfX2h0Ll9NX2hhc2gpLAorICAgICAgX01fZXF1YWxzKF9faHQuX01fZXF1YWxzKSwgX01fZ2V0X2tleShfX2h0Ll9NX2dldF9rZXkpLAorICAgICAgX01fYnVja2V0cyhfX2h0LmdldF9hbGxvY2F0b3IoKSksIF9NX251bV9lbGVtZW50cygwKQorICAgICAgeyBfTV9jb3B5X2Zyb20oX19odCk7IH0KKworICAgICAgaGFzaHRhYmxlJgorICAgICAgb3BlcmF0b3I9IChjb25zdCBoYXNodGFibGUmIF9faHQpCisgICAgICB7CisJaWYgKCZfX2h0ICE9IHRoaXMpCisJICB7CisJICAgIGNsZWFyKCk7CisJICAgIF9NX2hhc2ggPSBfX2h0Ll9NX2hhc2g7CisJICAgIF9NX2VxdWFscyA9IF9faHQuX01fZXF1YWxzOworCSAgICBfTV9nZXRfa2V5ID0gX19odC5fTV9nZXRfa2V5OworCSAgICBfTV9jb3B5X2Zyb20oX19odCk7CisJICB9CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB+aGFzaHRhYmxlKCkKKyAgICAgIHsgY2xlYXIoKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIHNpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fbnVtX2VsZW1lbnRzOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQorCisgICAgICBib29sCisgICAgICBlbXB0eSgpIGNvbnN0CisgICAgICB7IHJldHVybiBzaXplKCkgPT0gMDsgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKGhhc2h0YWJsZSYgX19odCkKKyAgICAgIHsKKwlzdGQ6OnN3YXAoX01faGFzaCwgX19odC5fTV9oYXNoKTsKKwlzdGQ6OnN3YXAoX01fZXF1YWxzLCBfX2h0Ll9NX2VxdWFscyk7CisJc3RkOjpzd2FwKF9NX2dldF9rZXksIF9faHQuX01fZ2V0X2tleSk7CisJX01fYnVja2V0cy5zd2FwKF9faHQuX01fYnVja2V0cyk7CisJc3RkOjpzd2FwKF9NX251bV9lbGVtZW50cywgX19odC5fTV9udW1fZWxlbWVudHMpOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKQorICAgICAgeworCWZvciAoc2l6ZV90eXBlIF9fbiA9IDA7IF9fbiA8IF9NX2J1Y2tldHMuc2l6ZSgpOyArK19fbikKKwkgIGlmIChfTV9idWNrZXRzW19fbl0pCisJICAgIHJldHVybiBpdGVyYXRvcihfTV9idWNrZXRzW19fbl0sIHRoaXMpOworCXJldHVybiBlbmQoKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpCisgICAgICB7IHJldHVybiBpdGVyYXRvcigwLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdAorICAgICAgeworCWZvciAoc2l6ZV90eXBlIF9fbiA9IDA7IF9fbiA8IF9NX2J1Y2tldHMuc2l6ZSgpOyArK19fbikKKwkgIGlmIChfTV9idWNrZXRzW19fbl0pCisJICAgIHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9idWNrZXRzW19fbl0sIHRoaXMpOworCXJldHVybiBlbmQoKTsKKyAgICAgIH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcigwLCB0aGlzKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfVmwsIGNsYXNzIF9LeSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwKKwkJY2xhc3MgX0FsPgorICAgICAgICBmcmllbmQgYm9vbAorICAgICAgICBvcGVyYXRvcj09KGNvbnN0IGhhc2h0YWJsZTxfVmwsIF9LeSwgX0hGLCBfRXgsIF9FcSwgX0FsPiYsCisJCSAgIGNvbnN0IGhhc2h0YWJsZTxfVmwsIF9LeSwgX0hGLCBfRXgsIF9FcSwgX0FsPiYpOworCisgICAgcHVibGljOgorICAgICAgc2l6ZV90eXBlCisgICAgICBidWNrZXRfY291bnQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fYnVja2V0cy5zaXplKCk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfYnVja2V0X2NvdW50KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fc3RsX3ByaW1lX2xpc3RbKGludClfU19udW1fcHJpbWVzIC0gMV07IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBlbGVtc19pbl9idWNrZXQoc2l6ZV90eXBlIF9fYnVja2V0KSBjb25zdAorICAgICAgeworCXNpemVfdHlwZSBfX3Jlc3VsdCA9IDA7CisJZm9yIChfTm9kZSogX19uID0gX01fYnVja2V0c1tfX2J1Y2tldF07IF9fbjsgX19uID0gX19uLT5fTV9uZXh0KQorCSAgX19yZXN1bHQgKz0gMTsKKwlyZXR1cm4gX19yZXN1bHQ7CisgICAgICB9CisKKyAgICAgIHBhaXI8aXRlcmF0b3IsIGJvb2w+CisgICAgICBpbnNlcnRfdW5pcXVlKGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQorICAgICAgeworCXJlc2l6ZShfTV9udW1fZWxlbWVudHMgKyAxKTsKKwlyZXR1cm4gaW5zZXJ0X3VuaXF1ZV9ub3Jlc2l6ZShfX29iaik7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnRfZXF1YWwoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCisgICAgICB7CisJcmVzaXplKF9NX251bV9lbGVtZW50cyArIDEpOworCXJldHVybiBpbnNlcnRfZXF1YWxfbm9yZXNpemUoX19vYmopOworICAgICAgfQorCisgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPgorICAgICAgaW5zZXJ0X3VuaXF1ZV9ub3Jlc2l6ZShjb25zdCB2YWx1ZV90eXBlJiBfX29iaik7CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnRfZXF1YWxfbm9yZXNpemUoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopOworCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnRfdW5pcXVlKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sKQorICAgICAgICB7IGluc2VydF91bmlxdWUoX19mLCBfX2wsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19mKSk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0X2VxdWFsKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sKQorICAgICAgICB7IGluc2VydF9lcXVhbChfX2YsIF9fbCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2YpKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnRfdW5pcXVlKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLAorCQkgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCisgICAgICAgIHsKKwkgIGZvciAoIDsgX19mICE9IF9fbDsgKytfX2YpCisJICAgIGluc2VydF91bmlxdWUoKl9fZik7CisJfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnRfZXF1YWwoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsCisJCSAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQorICAgICAgICB7CisJICBmb3IgKCA7IF9fZiAhPSBfX2w7ICsrX19mKQorCSAgICBpbnNlcnRfZXF1YWwoKl9fZik7CisJfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydF91bmlxdWUoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX19sLAorCQkgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKKyAgICAgICAgeworCSAgc2l6ZV90eXBlIF9fbiA9IGRpc3RhbmNlKF9fZiwgX19sKTsKKwkgIHJlc2l6ZShfTV9udW1fZWxlbWVudHMgKyBfX24pOworCSAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2YpCisJICAgIGluc2VydF91bmlxdWVfbm9yZXNpemUoKl9fZik7CisJfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydF9lcXVhbChfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX2wsCisJCSAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCisgICAgICAgIHsKKwkgIHNpemVfdHlwZSBfX24gPSBkaXN0YW5jZShfX2YsIF9fbCk7CisJICByZXNpemUoX01fbnVtX2VsZW1lbnRzICsgX19uKTsKKwkgIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19mKQorCSAgICBpbnNlcnRfZXF1YWxfbm9yZXNpemUoKl9fZik7CisJfQorCisgICAgICByZWZlcmVuY2UKKyAgICAgIGZpbmRfb3JfaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKTsKKworICAgICAgaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQorICAgICAgeworCXNpemVfdHlwZSBfX24gPSBfTV9ia3RfbnVtX2tleShfX2tleSk7CisJX05vZGUqIF9fZmlyc3Q7CisJZm9yIChfX2ZpcnN0ID0gX01fYnVja2V0c1tfX25dOworCSAgICAgX19maXJzdCAmJiAhX01fZXF1YWxzKF9NX2dldF9rZXkoX19maXJzdC0+X01fdmFsKSwgX19rZXkpOworCSAgICAgX19maXJzdCA9IF9fZmlyc3QtPl9NX25leHQpCisJICB7IH0KKwlyZXR1cm4gaXRlcmF0b3IoX19maXJzdCwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKKyAgICAgIHsKKwlzaXplX3R5cGUgX19uID0gX01fYmt0X251bV9rZXkoX19rZXkpOworCWNvbnN0IF9Ob2RlKiBfX2ZpcnN0OworCWZvciAoX19maXJzdCA9IF9NX2J1Y2tldHNbX19uXTsKKwkgICAgIF9fZmlyc3QgJiYgIV9NX2VxdWFscyhfTV9nZXRfa2V5KF9fZmlyc3QtPl9NX3ZhbCksIF9fa2V5KTsKKwkgICAgIF9fZmlyc3QgPSBfX2ZpcnN0LT5fTV9uZXh0KQorCSAgeyB9CisJcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9fZmlyc3QsIHRoaXMpOworICAgICAgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKKyAgICAgIHsKKwljb25zdCBzaXplX3R5cGUgX19uID0gX01fYmt0X251bV9rZXkoX19rZXkpOworCXNpemVfdHlwZSBfX3Jlc3VsdCA9IDA7CisJCisJZm9yIChjb25zdCBfTm9kZSogX19jdXIgPSBfTV9idWNrZXRzW19fbl07IF9fY3VyOworCSAgICAgX19jdXIgPSBfX2N1ci0+X01fbmV4dCkKKwkgIGlmIChfTV9lcXVhbHMoX01fZ2V0X2tleShfX2N1ci0+X01fdmFsKSwgX19rZXkpKQorCSAgICArK19fcmVzdWx0OworCXJldHVybiBfX3Jlc3VsdDsKKyAgICAgIH0KKworICAgICAgcGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rZXkpOworCisgICAgICBwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3Q7CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KTsKKyAgICAgIAorICAgICAgdm9pZAorICAgICAgZXJhc2UoY29uc3QgaXRlcmF0b3ImIF9faXQpOworCisgICAgICB2b2lkCisgICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpOworCisgICAgICB2b2lkCisgICAgICBlcmFzZShjb25zdCBjb25zdF9pdGVyYXRvciYgX19pdCk7CisKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QsIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdCk7CisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19udW1fZWxlbWVudHNfaGludCk7CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgc2l6ZV90eXBlCisgICAgICBfTV9uZXh0X3NpemUoc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fc3RsX25leHRfcHJpbWUoX19uKTsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9pbml0aWFsaXplX2J1Y2tldHMoc2l6ZV90eXBlIF9fbikKKyAgICAgIHsKKwljb25zdCBzaXplX3R5cGUgX19uX2J1Y2tldHMgPSBfTV9uZXh0X3NpemUoX19uKTsKKwlfTV9idWNrZXRzLnJlc2VydmUoX19uX2J1Y2tldHMpOworCV9NX2J1Y2tldHMuaW5zZXJ0KF9NX2J1Y2tldHMuZW5kKCksIF9fbl9idWNrZXRzLCAoX05vZGUqKSAwKTsKKwlfTV9udW1fZWxlbWVudHMgPSAwOworICAgICAgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIF9NX2JrdF9udW1fa2V5KGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2JrdF9udW1fa2V5KF9fa2V5LCBfTV9idWNrZXRzLnNpemUoKSk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBfTV9ia3RfbnVtKGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fYmt0X251bV9rZXkoX01fZ2V0X2tleShfX29iaikpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgX01fYmt0X251bV9rZXkoY29uc3Qga2V5X3R5cGUmIF9fa2V5LCBzaXplX3QgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faGFzaChfX2tleSkgJSBfX247IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBfTV9ia3RfbnVtKGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqLCBzaXplX3QgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fYmt0X251bV9rZXkoX01fZ2V0X2tleShfX29iaiksIF9fbik7IH0KKworICAgICAgX05vZGUqCisgICAgICBfTV9uZXdfbm9kZShjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICAgIHsKKwlfTm9kZSogX19uID0gX01fZ2V0X25vZGUoKTsKKwlfX24tPl9NX25leHQgPSAwOworCV9fdHJ5CisJICB7CisJICAgIHRoaXMtPmdldF9hbGxvY2F0b3IoKS5jb25zdHJ1Y3QoJl9fbi0+X01fdmFsLCBfX29iaik7CisJICAgIHJldHVybiBfX247CisJICB9CisJX19jYXRjaCguLi4pCisJICB7CisJICAgIF9NX3B1dF9ub2RlKF9fbik7CisJICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgfQorICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9kZWxldGVfbm9kZShfTm9kZSogX19uKQorICAgICAgeworCXRoaXMtPmdldF9hbGxvY2F0b3IoKS5kZXN0cm95KCZfX24tPl9NX3ZhbCk7CisJX01fcHV0X25vZGUoX19uKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgdm9pZAorICAgICAgX01fZXJhc2VfYnVja2V0KGNvbnN0IHNpemVfdHlwZSBfX24sIF9Ob2RlKiBfX2ZpcnN0LCBfTm9kZSogX19sYXN0KTsKKworICAgICAgdm9pZAorICAgICAgX01fZXJhc2VfYnVja2V0KGNvbnN0IHNpemVfdHlwZSBfX24sIF9Ob2RlKiBfX2xhc3QpOworCisgICAgICB2b2lkCisgICAgICBfTV9jb3B5X2Zyb20oY29uc3QgaGFzaHRhYmxlJiBfX2h0KTsKKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4SywgY2xhc3MgX0VxSywKKwkgICAgY2xhc3MgX0FsbD4KKyAgICBfSGFzaHRhYmxlX2l0ZXJhdG9yPF9WYWwsIF9LZXksIF9IRiwgX0V4SywgX0VxSywgX0FsbD4mCisgICAgX0hhc2h0YWJsZV9pdGVyYXRvcjxfVmFsLCBfS2V5LCBfSEYsIF9FeEssIF9FcUssIF9BbGw+OjoKKyAgICBvcGVyYXRvcisrKCkKKyAgICB7CisgICAgICBjb25zdCBfTm9kZSogX19vbGQgPSBfTV9jdXI7CisgICAgICBfTV9jdXIgPSBfTV9jdXItPl9NX25leHQ7CisgICAgICBpZiAoIV9NX2N1cikKKwl7CisJICBzaXplX3R5cGUgX19idWNrZXQgPSBfTV9odC0+X01fYmt0X251bShfX29sZC0+X01fdmFsKTsKKwkgIHdoaWxlICghX01fY3VyICYmICsrX19idWNrZXQgPCBfTV9odC0+X01fYnVja2V0cy5zaXplKCkpCisJICAgIF9NX2N1ciA9IF9NX2h0LT5fTV9idWNrZXRzW19fYnVja2V0XTsKKwl9CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4SywgY2xhc3MgX0VxSywKKwkgICAgY2xhc3MgX0FsbD4KKyAgICBpbmxpbmUgX0hhc2h0YWJsZV9pdGVyYXRvcjxfVmFsLCBfS2V5LCBfSEYsIF9FeEssIF9FcUssIF9BbGw+CisgICAgX0hhc2h0YWJsZV9pdGVyYXRvcjxfVmFsLCBfS2V5LCBfSEYsIF9FeEssIF9FcUssIF9BbGw+OjoKKyAgICBvcGVyYXRvcisrKGludCkKKyAgICB7CisgICAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOworICAgICAgKysqdGhpczsKKyAgICAgIHJldHVybiBfX3RtcDsKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXhLLCBjbGFzcyBfRXFLLAorCSAgICBjbGFzcyBfQWxsPgorICAgIF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3I8X1ZhbCwgX0tleSwgX0hGLCBfRXhLLCBfRXFLLCBfQWxsPiYKKyAgICBfSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yPF9WYWwsIF9LZXksIF9IRiwgX0V4SywgX0VxSywgX0FsbD46OgorICAgIG9wZXJhdG9yKysoKQorICAgIHsKKyAgICAgIGNvbnN0IF9Ob2RlKiBfX29sZCA9IF9NX2N1cjsKKyAgICAgIF9NX2N1ciA9IF9NX2N1ci0+X01fbmV4dDsKKyAgICAgIGlmICghX01fY3VyKQorCXsKKwkgIHNpemVfdHlwZSBfX2J1Y2tldCA9IF9NX2h0LT5fTV9ia3RfbnVtKF9fb2xkLT5fTV92YWwpOworCSAgd2hpbGUgKCFfTV9jdXIgJiYgKytfX2J1Y2tldCA8IF9NX2h0LT5fTV9idWNrZXRzLnNpemUoKSkKKwkgICAgX01fY3VyID0gX01faHQtPl9NX2J1Y2tldHNbX19idWNrZXRdOworCX0KKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXhLLCBjbGFzcyBfRXFLLAorCSAgICBjbGFzcyBfQWxsPgorICAgIGlubGluZSBfSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yPF9WYWwsIF9LZXksIF9IRiwgX0V4SywgX0VxSywgX0FsbD4KKyAgICBfSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yPF9WYWwsIF9LZXksIF9IRiwgX0V4SywgX0VxSywgX0FsbD46OgorICAgIG9wZXJhdG9yKysoaW50KQorICAgIHsKKyAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CisgICAgICArKyp0aGlzOworICAgICAgcmV0dXJuIF9fdG1wOworICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgorICAgIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPiYgX19odDEsCisJICAgICAgIGNvbnN0IGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPiYgX19odDIpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46Ol9Ob2RlIF9Ob2RlOworCisgICAgICBpZiAoX19odDEuX01fYnVja2V0cy5zaXplKCkgIT0gX19odDIuX01fYnVja2V0cy5zaXplKCkpCisJcmV0dXJuIGZhbHNlOworCisgICAgICBmb3IgKHNpemVfdCBfX24gPSAwOyBfX24gPCBfX2h0MS5fTV9idWNrZXRzLnNpemUoKTsgKytfX24pCisJeworCSAgX05vZGUqIF9fY3VyMSA9IF9faHQxLl9NX2J1Y2tldHNbX19uXTsKKwkgIF9Ob2RlKiBfX2N1cjIgPSBfX2h0Mi5fTV9idWNrZXRzW19fbl07CisJICAvLyBDaGVjayBzYW1lIGxlbmd0aCBvZiBsaXN0cworCSAgZm9yICg7IF9fY3VyMSAmJiBfX2N1cjI7CisJICAgICAgIF9fY3VyMSA9IF9fY3VyMS0+X01fbmV4dCwgX19jdXIyID0gX19jdXIyLT5fTV9uZXh0KQorCSAgICB7IH0gCisJICBpZiAoX19jdXIxIHx8IF9fY3VyMikKKwkgICAgcmV0dXJuIGZhbHNlOworCSAgLy8gTm93IGNoZWNrIG9uZSdzIGVsZW1lbnRzIGFyZSBpbiB0aGUgb3RoZXIKKwkgIGZvciAoX19jdXIxID0gX19odDEuX01fYnVja2V0c1tfX25dIDsgX19jdXIxOworCSAgICAgICBfX2N1cjEgPSBfX2N1cjEtPl9NX25leHQpCisJICAgIHsKKwkgICAgICBib29sIF9mb3VuZF9fY3VyMSA9IGZhbHNlOworCSAgICAgIGZvciAoX19jdXIyID0gX19odDIuX01fYnVja2V0c1tfX25dOworCQkgICBfX2N1cjI7IF9fY3VyMiA9IF9fY3VyMi0+X01fbmV4dCkKKwkJeworCQkgIGlmIChfX2N1cjEtPl9NX3ZhbCA9PSBfX2N1cjItPl9NX3ZhbCkKKwkJICAgIHsKKwkJICAgICAgX2ZvdW5kX19jdXIxID0gdHJ1ZTsKKwkJICAgICAgYnJlYWs7CisJCSAgICB9CisJCX0KKwkgICAgICBpZiAoIV9mb3VuZF9fY3VyMSkKKwkJcmV0dXJuIGZhbHNlOworCSAgICB9CisJfQorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPiYgX19odDEsCisJICAgICAgIGNvbnN0IGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPiYgX19odDIpCisgICAgeyByZXR1cm4gIShfX2h0MSA9PSBfX2h0Mik7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeHRyYWN0LCBjbGFzcyBfRXFLZXksCisJICAgIGNsYXNzIF9BbGw+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeHRyYWN0LCBfRXFLZXksIF9BbGw+JiBfX2h0MSwKKwkgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4dHJhY3QsIF9FcUtleSwgX0FsbD4mIF9faHQyKQorICAgIHsgX19odDEuc3dhcChfX2h0Mik7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgorICAgIHBhaXI8dHlwZW5hbWUgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjppdGVyYXRvciwgYm9vbD4KKyAgICBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46OgorICAgIGluc2VydF91bmlxdWVfbm9yZXNpemUoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCisgICAgeworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbiA9IF9NX2JrdF9udW0oX19vYmopOworICAgICAgX05vZGUqIF9fZmlyc3QgPSBfTV9idWNrZXRzW19fbl07CisgICAgICAKKyAgICAgIGZvciAoX05vZGUqIF9fY3VyID0gX19maXJzdDsgX19jdXI7IF9fY3VyID0gX19jdXItPl9NX25leHQpCisJaWYgKF9NX2VxdWFscyhfTV9nZXRfa2V5KF9fY3VyLT5fTV92YWwpLCBfTV9nZXRfa2V5KF9fb2JqKSkpCisJICByZXR1cm4gcGFpcjxpdGVyYXRvciwgYm9vbD4oaXRlcmF0b3IoX19jdXIsIHRoaXMpLCBmYWxzZSk7CisgICAgICAKKyAgICAgIF9Ob2RlKiBfX3RtcCA9IF9NX25ld19ub2RlKF9fb2JqKTsKKyAgICAgIF9fdG1wLT5fTV9uZXh0ID0gX19maXJzdDsKKyAgICAgIF9NX2J1Y2tldHNbX19uXSA9IF9fdG1wOworICAgICAgKytfTV9udW1fZWxlbWVudHM7CisgICAgICByZXR1cm4gcGFpcjxpdGVyYXRvciwgYm9vbD4oaXRlcmF0b3IoX190bXAsIHRoaXMpLCB0cnVlKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KKyAgICB0eXBlbmFtZSBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46Oml0ZXJhdG9yCisgICAgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjoKKyAgICBpbnNlcnRfZXF1YWxfbm9yZXNpemUoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCisgICAgeworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbiA9IF9NX2JrdF9udW0oX19vYmopOworICAgICAgX05vZGUqIF9fZmlyc3QgPSBfTV9idWNrZXRzW19fbl07CisgICAgICAKKyAgICAgIGZvciAoX05vZGUqIF9fY3VyID0gX19maXJzdDsgX19jdXI7IF9fY3VyID0gX19jdXItPl9NX25leHQpCisJaWYgKF9NX2VxdWFscyhfTV9nZXRfa2V5KF9fY3VyLT5fTV92YWwpLCBfTV9nZXRfa2V5KF9fb2JqKSkpCisJICB7CisJICAgIF9Ob2RlKiBfX3RtcCA9IF9NX25ld19ub2RlKF9fb2JqKTsKKwkgICAgX190bXAtPl9NX25leHQgPSBfX2N1ci0+X01fbmV4dDsKKwkgICAgX19jdXItPl9NX25leHQgPSBfX3RtcDsKKwkgICAgKytfTV9udW1fZWxlbWVudHM7CisJICAgIHJldHVybiBpdGVyYXRvcihfX3RtcCwgdGhpcyk7CisJICB9CisKKyAgICAgIF9Ob2RlKiBfX3RtcCA9IF9NX25ld19ub2RlKF9fb2JqKTsKKyAgICAgIF9fdG1wLT5fTV9uZXh0ID0gX19maXJzdDsKKyAgICAgIF9NX2J1Y2tldHNbX19uXSA9IF9fdG1wOworICAgICAgKytfTV9udW1fZWxlbWVudHM7CisgICAgICByZXR1cm4gaXRlcmF0b3IoX190bXAsIHRoaXMpOworICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgorICAgIHR5cGVuYW1lIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6cmVmZXJlbmNlCisgICAgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjoKKyAgICBmaW5kX29yX2luc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICB7CisgICAgICByZXNpemUoX01fbnVtX2VsZW1lbnRzICsgMSk7CisKKyAgICAgIHNpemVfdHlwZSBfX24gPSBfTV9ia3RfbnVtKF9fb2JqKTsKKyAgICAgIF9Ob2RlKiBfX2ZpcnN0ID0gX01fYnVja2V0c1tfX25dOworICAgICAgCisgICAgICBmb3IgKF9Ob2RlKiBfX2N1ciA9IF9fZmlyc3Q7IF9fY3VyOyBfX2N1ciA9IF9fY3VyLT5fTV9uZXh0KQorCWlmIChfTV9lcXVhbHMoX01fZ2V0X2tleShfX2N1ci0+X01fdmFsKSwgX01fZ2V0X2tleShfX29iaikpKQorCSAgcmV0dXJuIF9fY3VyLT5fTV92YWw7CisgICAgICAKKyAgICAgIF9Ob2RlKiBfX3RtcCA9IF9NX25ld19ub2RlKF9fb2JqKTsKKyAgICAgIF9fdG1wLT5fTV9uZXh0ID0gX19maXJzdDsKKyAgICAgIF9NX2J1Y2tldHNbX19uXSA9IF9fdG1wOworICAgICAgKytfTV9udW1fZWxlbWVudHM7CisgICAgICByZXR1cm4gX190bXAtPl9NX3ZhbDsKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KKyAgICBwYWlyPHR5cGVuYW1lIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6aXRlcmF0b3IsCisJIHR5cGVuYW1lIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6aXRlcmF0b3I+CisgICAgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjoKKyAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rZXkpCisgICAgeworICAgICAgdHlwZWRlZiBwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4gX1BpaTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX24gPSBfTV9ia3RfbnVtX2tleShfX2tleSk7CisKKyAgICAgIGZvciAoX05vZGUqIF9fZmlyc3QgPSBfTV9idWNrZXRzW19fbl07IF9fZmlyc3Q7CisJICAgX19maXJzdCA9IF9fZmlyc3QtPl9NX25leHQpCisJaWYgKF9NX2VxdWFscyhfTV9nZXRfa2V5KF9fZmlyc3QtPl9NX3ZhbCksIF9fa2V5KSkKKwkgIHsKKwkgICAgZm9yIChfTm9kZSogX19jdXIgPSBfX2ZpcnN0LT5fTV9uZXh0OyBfX2N1cjsKKwkJIF9fY3VyID0gX19jdXItPl9NX25leHQpCisJICAgICAgaWYgKCFfTV9lcXVhbHMoX01fZ2V0X2tleShfX2N1ci0+X01fdmFsKSwgX19rZXkpKQorCQlyZXR1cm4gX1BpaShpdGVyYXRvcihfX2ZpcnN0LCB0aGlzKSwgaXRlcmF0b3IoX19jdXIsIHRoaXMpKTsKKwkgICAgZm9yIChzaXplX3R5cGUgX19tID0gX19uICsgMTsgX19tIDwgX01fYnVja2V0cy5zaXplKCk7ICsrX19tKQorCSAgICAgIGlmIChfTV9idWNrZXRzW19fbV0pCisJCXJldHVybiBfUGlpKGl0ZXJhdG9yKF9fZmlyc3QsIHRoaXMpLAorCQkJICAgIGl0ZXJhdG9yKF9NX2J1Y2tldHNbX19tXSwgdGhpcykpOworCSAgICByZXR1cm4gX1BpaShpdGVyYXRvcihfX2ZpcnN0LCB0aGlzKSwgZW5kKCkpOworCSAgfQorICAgICAgcmV0dXJuIF9QaWkoZW5kKCksIGVuZCgpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KKyAgICBwYWlyPHR5cGVuYW1lIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6Y29uc3RfaXRlcmF0b3IsCisJIHR5cGVuYW1lIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6Y29uc3RfaXRlcmF0b3I+CisgICAgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjoKKyAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgeworICAgICAgdHlwZWRlZiBwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4gX1BpaTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX24gPSBfTV9ia3RfbnVtX2tleShfX2tleSk7CisKKyAgICAgIGZvciAoY29uc3QgX05vZGUqIF9fZmlyc3QgPSBfTV9idWNrZXRzW19fbl07IF9fZmlyc3Q7CisJICAgX19maXJzdCA9IF9fZmlyc3QtPl9NX25leHQpCisJeworCSAgaWYgKF9NX2VxdWFscyhfTV9nZXRfa2V5KF9fZmlyc3QtPl9NX3ZhbCksIF9fa2V5KSkKKwkgICAgeworCSAgICAgIGZvciAoY29uc3QgX05vZGUqIF9fY3VyID0gX19maXJzdC0+X01fbmV4dDsgX19jdXI7CisJCSAgIF9fY3VyID0gX19jdXItPl9NX25leHQpCisJCWlmICghX01fZXF1YWxzKF9NX2dldF9rZXkoX19jdXItPl9NX3ZhbCksIF9fa2V5KSkKKwkJICByZXR1cm4gX1BpaShjb25zdF9pdGVyYXRvcihfX2ZpcnN0LCB0aGlzKSwKKwkJCSAgICAgIGNvbnN0X2l0ZXJhdG9yKF9fY3VyLCB0aGlzKSk7CisJICAgICAgZm9yIChzaXplX3R5cGUgX19tID0gX19uICsgMTsgX19tIDwgX01fYnVja2V0cy5zaXplKCk7ICsrX19tKQorCQlpZiAoX01fYnVja2V0c1tfX21dKQorCQkgIHJldHVybiBfUGlpKGNvbnN0X2l0ZXJhdG9yKF9fZmlyc3QsIHRoaXMpLAorCQkJICAgICAgY29uc3RfaXRlcmF0b3IoX01fYnVja2V0c1tfX21dLCB0aGlzKSk7CisJICAgICAgcmV0dXJuIF9QaWkoY29uc3RfaXRlcmF0b3IoX19maXJzdCwgdGhpcyksIGVuZCgpKTsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiBfUGlpKGVuZCgpLCBlbmQoKSk7CisgICAgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+CisgICAgdHlwZW5hbWUgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjpzaXplX3R5cGUKKyAgICBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46OgorICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX2tleSkKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19uID0gX01fYmt0X251bV9rZXkoX19rZXkpOworICAgICAgX05vZGUqIF9fZmlyc3QgPSBfTV9idWNrZXRzW19fbl07CisgICAgICBfTm9kZSogX19zYXZlZF9zbG90ID0gMDsKKyAgICAgIHNpemVfdHlwZSBfX2VyYXNlZCA9IDA7CisKKyAgICAgIGlmIChfX2ZpcnN0KQorCXsKKwkgIF9Ob2RlKiBfX2N1ciA9IF9fZmlyc3Q7CisJICBfTm9kZSogX19uZXh0ID0gX19jdXItPl9NX25leHQ7CisJICB3aGlsZSAoX19uZXh0KQorCSAgICB7CisJICAgICAgaWYgKF9NX2VxdWFscyhfTV9nZXRfa2V5KF9fbmV4dC0+X01fdmFsKSwgX19rZXkpKQorCQl7CisJCSAgaWYgKCZfTV9nZXRfa2V5KF9fbmV4dC0+X01fdmFsKSAhPSAmX19rZXkpCisJCSAgICB7CisJCSAgICAgIF9fY3VyLT5fTV9uZXh0ID0gX19uZXh0LT5fTV9uZXh0OworCQkgICAgICBfTV9kZWxldGVfbm9kZShfX25leHQpOworCQkgICAgICBfX25leHQgPSBfX2N1ci0+X01fbmV4dDsKKwkJICAgICAgKytfX2VyYXNlZDsKKwkJICAgICAgLS1fTV9udW1fZWxlbWVudHM7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBfX3NhdmVkX3Nsb3QgPSBfX2N1cjsKKwkJICAgICAgX19jdXIgPSBfX25leHQ7CisJCSAgICAgIF9fbmV4dCA9IF9fY3VyLT5fTV9uZXh0OworCQkgICAgfQorCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgX19jdXIgPSBfX25leHQ7CisJCSAgX19uZXh0ID0gX19jdXItPl9NX25leHQ7CisJCX0KKwkgICAgfQorCSAgaWYgKF9NX2VxdWFscyhfTV9nZXRfa2V5KF9fZmlyc3QtPl9NX3ZhbCksIF9fa2V5KSkKKwkgICAgeworCSAgICAgIF9NX2J1Y2tldHNbX19uXSA9IF9fZmlyc3QtPl9NX25leHQ7CisJICAgICAgX01fZGVsZXRlX25vZGUoX19maXJzdCk7CisJICAgICAgKytfX2VyYXNlZDsKKwkgICAgICAtLV9NX251bV9lbGVtZW50czsKKwkgICAgfQorCSAgaWYgKF9fc2F2ZWRfc2xvdCkKKwkgICAgeworCSAgICAgIF9fbmV4dCA9IF9fc2F2ZWRfc2xvdC0+X01fbmV4dDsKKwkgICAgICBfX3NhdmVkX3Nsb3QtPl9NX25leHQgPSBfX25leHQtPl9NX25leHQ7CisJICAgICAgX01fZGVsZXRlX25vZGUoX19uZXh0KTsKKwkgICAgICArK19fZXJhc2VkOworCSAgICAgIC0tX01fbnVtX2VsZW1lbnRzOworCSAgICB9CisJfQorICAgICAgcmV0dXJuIF9fZXJhc2VkOworICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgorICAgIHZvaWQgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjoKKyAgICBlcmFzZShjb25zdCBpdGVyYXRvciYgX19pdCkKKyAgICB7CisgICAgICBfTm9kZSogX19wID0gX19pdC5fTV9jdXI7CisgICAgICBpZiAoX19wKQorCXsKKwkgIGNvbnN0IHNpemVfdHlwZSBfX24gPSBfTV9ia3RfbnVtKF9fcC0+X01fdmFsKTsKKwkgIF9Ob2RlKiBfX2N1ciA9IF9NX2J1Y2tldHNbX19uXTsKKwkgIAorCSAgaWYgKF9fY3VyID09IF9fcCkKKwkgICAgeworCSAgICAgIF9NX2J1Y2tldHNbX19uXSA9IF9fY3VyLT5fTV9uZXh0OworCSAgICAgIF9NX2RlbGV0ZV9ub2RlKF9fY3VyKTsKKwkgICAgICAtLV9NX251bV9lbGVtZW50czsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgX05vZGUqIF9fbmV4dCA9IF9fY3VyLT5fTV9uZXh0OworCSAgICAgIHdoaWxlIChfX25leHQpCisJCXsKKwkJICBpZiAoX19uZXh0ID09IF9fcCkKKwkJICAgIHsKKwkJICAgICAgX19jdXItPl9NX25leHQgPSBfX25leHQtPl9NX25leHQ7CisJCSAgICAgIF9NX2RlbGV0ZV9ub2RlKF9fbmV4dCk7CisJCSAgICAgIC0tX01fbnVtX2VsZW1lbnRzOworCQkgICAgICBicmVhazsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIF9fY3VyID0gX19uZXh0OworCQkgICAgICBfX25leHQgPSBfX2N1ci0+X01fbmV4dDsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgorICAgIHZvaWQKKyAgICBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46OgorICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICBzaXplX3R5cGUgX19mX2J1Y2tldCA9IF9fZmlyc3QuX01fY3VyID8gX01fYmt0X251bShfX2ZpcnN0Ll9NX2N1ci0+X01fdmFsKQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX01fYnVja2V0cy5zaXplKCk7CisKKyAgICAgIHNpemVfdHlwZSBfX2xfYnVja2V0ID0gX19sYXN0Ll9NX2N1ciA/IF9NX2JrdF9udW0oX19sYXN0Ll9NX2N1ci0+X01fdmFsKQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfTV9idWNrZXRzLnNpemUoKTsKKworICAgICAgaWYgKF9fZmlyc3QuX01fY3VyID09IF9fbGFzdC5fTV9jdXIpCisJcmV0dXJuOworICAgICAgZWxzZSBpZiAoX19mX2J1Y2tldCA9PSBfX2xfYnVja2V0KQorCV9NX2VyYXNlX2J1Y2tldChfX2ZfYnVja2V0LCBfX2ZpcnN0Ll9NX2N1ciwgX19sYXN0Ll9NX2N1cik7CisgICAgICBlbHNlCisJeworCSAgX01fZXJhc2VfYnVja2V0KF9fZl9idWNrZXQsIF9fZmlyc3QuX01fY3VyLCAwKTsKKwkgIGZvciAoc2l6ZV90eXBlIF9fbiA9IF9fZl9idWNrZXQgKyAxOyBfX24gPCBfX2xfYnVja2V0OyArK19fbikKKwkgICAgX01fZXJhc2VfYnVja2V0KF9fbiwgMCk7CisJICBpZiAoX19sX2J1Y2tldCAhPSBfTV9idWNrZXRzLnNpemUoKSkKKwkgICAgX01fZXJhc2VfYnVja2V0KF9fbF9idWNrZXQsIF9fbGFzdC5fTV9jdXIpOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KKyAgICBpbmxpbmUgdm9pZAorICAgIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6CisgICAgZXJhc2UoY29uc3RfaXRlcmF0b3IgX19maXJzdCwgY29uc3RfaXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIGVyYXNlKGl0ZXJhdG9yKGNvbnN0X2Nhc3Q8X05vZGUqPihfX2ZpcnN0Ll9NX2N1ciksCisJCSAgICAgY29uc3RfY2FzdDxoYXNodGFibGUqPihfX2ZpcnN0Ll9NX2h0KSksCisJICAgIGl0ZXJhdG9yKGNvbnN0X2Nhc3Q8X05vZGUqPihfX2xhc3QuX01fY3VyKSwKKwkJICAgICBjb25zdF9jYXN0PGhhc2h0YWJsZSo+KF9fbGFzdC5fTV9odCkpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KKyAgICBpbmxpbmUgdm9pZAorICAgIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6CisgICAgZXJhc2UoY29uc3QgY29uc3RfaXRlcmF0b3ImIF9faXQpCisgICAgeyBlcmFzZShpdGVyYXRvcihjb25zdF9jYXN0PF9Ob2RlKj4oX19pdC5fTV9jdXIpLAorCQkgICAgIGNvbnN0X2Nhc3Q8aGFzaHRhYmxlKj4oX19pdC5fTV9odCkpKTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+CisgICAgdm9pZAorICAgIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6CisgICAgcmVzaXplKHNpemVfdHlwZSBfX251bV9lbGVtZW50c19oaW50KQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9uID0gX01fYnVja2V0cy5zaXplKCk7CisgICAgICBpZiAoX19udW1fZWxlbWVudHNfaGludCA+IF9fb2xkX24pCisJeworCSAgY29uc3Qgc2l6ZV90eXBlIF9fbiA9IF9NX25leHRfc2l6ZShfX251bV9lbGVtZW50c19oaW50KTsKKwkgIGlmIChfX24gPiBfX29sZF9uKQorCSAgICB7CisJICAgICAgX1ZlY3Rvcl90eXBlIF9fdG1wKF9fbiwgKF9Ob2RlKikoMCksIF9NX2J1Y2tldHMuZ2V0X2FsbG9jYXRvcigpKTsKKwkgICAgICBfX3RyeQorCQl7CisJCSAgZm9yIChzaXplX3R5cGUgX19idWNrZXQgPSAwOyBfX2J1Y2tldCA8IF9fb2xkX247ICsrX19idWNrZXQpCisJCSAgICB7CisJCSAgICAgIF9Ob2RlKiBfX2ZpcnN0ID0gX01fYnVja2V0c1tfX2J1Y2tldF07CisJCSAgICAgIHdoaWxlIChfX2ZpcnN0KQorCQkJeworCQkJICBzaXplX3R5cGUgX19uZXdfYnVja2V0ID0gX01fYmt0X251bShfX2ZpcnN0LT5fTV92YWwsCisJCQkJCQkJICAgICAgX19uKTsKKwkJCSAgX01fYnVja2V0c1tfX2J1Y2tldF0gPSBfX2ZpcnN0LT5fTV9uZXh0OworCQkJICBfX2ZpcnN0LT5fTV9uZXh0ID0gX190bXBbX19uZXdfYnVja2V0XTsKKwkJCSAgX190bXBbX19uZXdfYnVja2V0XSA9IF9fZmlyc3Q7CisJCQkgIF9fZmlyc3QgPSBfTV9idWNrZXRzW19fYnVja2V0XTsKKwkJCX0KKwkJICAgIH0KKwkJICBfTV9idWNrZXRzLnN3YXAoX190bXApOworCQl9CisJICAgICAgX19jYXRjaCguLi4pCisJCXsKKwkJICBmb3IgKHNpemVfdHlwZSBfX2J1Y2tldCA9IDA7IF9fYnVja2V0IDwgX190bXAuc2l6ZSgpOworCQkgICAgICAgKytfX2J1Y2tldCkKKwkJICAgIHsKKwkJICAgICAgd2hpbGUgKF9fdG1wW19fYnVja2V0XSkKKwkJCXsKKwkJCSAgX05vZGUqIF9fbmV4dCA9IF9fdG1wW19fYnVja2V0XS0+X01fbmV4dDsKKwkJCSAgX01fZGVsZXRlX25vZGUoX190bXBbX19idWNrZXRdKTsKKwkJCSAgX190bXBbX19idWNrZXRdID0gX19uZXh0OworCQkJfQorCQkgICAgfQorCQkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCQl9CisJICAgIH0KKwl9CisgICAgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+CisgICAgdm9pZAorICAgIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6CisgICAgX01fZXJhc2VfYnVja2V0KGNvbnN0IHNpemVfdHlwZSBfX24sIF9Ob2RlKiBfX2ZpcnN0LCBfTm9kZSogX19sYXN0KQorICAgIHsKKyAgICAgIF9Ob2RlKiBfX2N1ciA9IF9NX2J1Y2tldHNbX19uXTsKKyAgICAgIGlmIChfX2N1ciA9PSBfX2ZpcnN0KQorCV9NX2VyYXNlX2J1Y2tldChfX24sIF9fbGFzdCk7CisgICAgICBlbHNlCisJeworCSAgX05vZGUqIF9fbmV4dDsKKwkgIGZvciAoX19uZXh0ID0gX19jdXItPl9NX25leHQ7CisJICAgICAgIF9fbmV4dCAhPSBfX2ZpcnN0OworCSAgICAgICBfX2N1ciA9IF9fbmV4dCwgX19uZXh0ID0gX19jdXItPl9NX25leHQpCisJICAgIDsKKwkgIHdoaWxlIChfX25leHQgIT0gX19sYXN0KQorCSAgICB7CisJICAgICAgX19jdXItPl9NX25leHQgPSBfX25leHQtPl9NX25leHQ7CisJICAgICAgX01fZGVsZXRlX25vZGUoX19uZXh0KTsKKwkgICAgICBfX25leHQgPSBfX2N1ci0+X01fbmV4dDsKKwkgICAgICAtLV9NX251bV9lbGVtZW50czsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KKyAgICB2b2lkCisgICAgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjoKKyAgICBfTV9lcmFzZV9idWNrZXQoY29uc3Qgc2l6ZV90eXBlIF9fbiwgX05vZGUqIF9fbGFzdCkKKyAgICB7CisgICAgICBfTm9kZSogX19jdXIgPSBfTV9idWNrZXRzW19fbl07CisgICAgICB3aGlsZSAoX19jdXIgIT0gX19sYXN0KQorCXsKKwkgIF9Ob2RlKiBfX25leHQgPSBfX2N1ci0+X01fbmV4dDsKKwkgIF9NX2RlbGV0ZV9ub2RlKF9fY3VyKTsKKwkgIF9fY3VyID0gX19uZXh0OworCSAgX01fYnVja2V0c1tfX25dID0gX19jdXI7CisJICAtLV9NX251bV9lbGVtZW50czsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+CisgICAgdm9pZAorICAgIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6CisgICAgY2xlYXIoKQorICAgIHsKKyAgICAgIGlmIChfTV9udW1fZWxlbWVudHMgPT0gMCkKKwlyZXR1cm47CisKKyAgICAgIGZvciAoc2l6ZV90eXBlIF9faSA9IDA7IF9faSA8IF9NX2J1Y2tldHMuc2l6ZSgpOyArK19faSkKKwl7CisJICBfTm9kZSogX19jdXIgPSBfTV9idWNrZXRzW19faV07CisJICB3aGlsZSAoX19jdXIgIT0gMCkKKwkgICAgeworCSAgICAgIF9Ob2RlKiBfX25leHQgPSBfX2N1ci0+X01fbmV4dDsKKwkgICAgICBfTV9kZWxldGVfbm9kZShfX2N1cik7CisJICAgICAgX19jdXIgPSBfX25leHQ7CisJICAgIH0KKwkgIF9NX2J1Y2tldHNbX19pXSA9IDA7CisJfQorICAgICAgX01fbnVtX2VsZW1lbnRzID0gMDsKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KKyAgICB2b2lkCisgICAgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjoKKyAgICBfTV9jb3B5X2Zyb20oY29uc3QgaGFzaHRhYmxlJiBfX2h0KQorICAgIHsKKyAgICAgIF9NX2J1Y2tldHMuY2xlYXIoKTsKKyAgICAgIF9NX2J1Y2tldHMucmVzZXJ2ZShfX2h0Ll9NX2J1Y2tldHMuc2l6ZSgpKTsKKyAgICAgIF9NX2J1Y2tldHMuaW5zZXJ0KF9NX2J1Y2tldHMuZW5kKCksIF9faHQuX01fYnVja2V0cy5zaXplKCksIChfTm9kZSopIDApOworICAgICAgX190cnkKKwl7CisJICBmb3IgKHNpemVfdHlwZSBfX2kgPSAwOyBfX2kgPCBfX2h0Ll9NX2J1Y2tldHMuc2l6ZSgpOyArK19faSkgeworCSAgICBjb25zdCBfTm9kZSogX19jdXIgPSBfX2h0Ll9NX2J1Y2tldHNbX19pXTsKKwkgICAgaWYgKF9fY3VyKQorCSAgICAgIHsKKwkJX05vZGUqIF9fbG9jYWxfY29weSA9IF9NX25ld19ub2RlKF9fY3VyLT5fTV92YWwpOworCQlfTV9idWNrZXRzW19faV0gPSBfX2xvY2FsX2NvcHk7CisJCQorCQlmb3IgKF9Ob2RlKiBfX25leHQgPSBfX2N1ci0+X01fbmV4dDsKKwkJICAgICBfX25leHQ7CisJCSAgICAgX19jdXIgPSBfX25leHQsIF9fbmV4dCA9IF9fY3VyLT5fTV9uZXh0KQorCQkgIHsKKwkJICAgIF9fbG9jYWxfY29weS0+X01fbmV4dCA9IF9NX25ld19ub2RlKF9fbmV4dC0+X01fdmFsKTsKKwkJICAgIF9fbG9jYWxfY29weSA9IF9fbG9jYWxfY29weS0+X01fbmV4dDsKKwkJICB9CisJICAgICAgfQorCSAgfQorCSAgX01fbnVtX2VsZW1lbnRzID0gX19odC5fTV9udW1fZWxlbWVudHM7CisJfQorICAgICAgX19jYXRjaCguLi4pCisJeworCSAgY2xlYXIoKTsKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JhY2t3YXJkL3N0cnN0cmVhbSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYmFja3dhcmQvc3Ryc3RyZWFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMjFiYTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JhY2t3YXJkL3N0cnN0cmVhbQpAQCAtMCwwICsxLDE3NyBAQAorLy8gQmFja3dhcmQtY29tcGF0IHN1cHBvcnQgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDA0LCAyMDA1LCAyMDA5LCAyMDEwCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk4CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvLyBXQVJOSU5HOiBUaGUgY2xhc3NlcyBkZWZpbmVkIGluIHRoaXMgaGVhZGVyIGFyZSBERVBSRUNBVEVELiAgVGhpcworLy8gaGVhZGVyIGlzIGRlZmluZWQgaW4gc2VjdGlvbiBELjcuMSBvZiB0aGUgQysrIHN0YW5kYXJkLCBhbmQgaXQKKy8vIE1BWSBCRSBSRU1PVkVEIGluIGEgZnV0dXJlIHN0YW5kYXJkIHJldmlzaW9uLiAgT25lIHNob3VsZCB1c2UgdGhlCisvLyBoZWFkZXIgPHNzdHJlYW0+IGluc3RlYWQuCisKKyNpZm5kZWYgX0JBQ0tXQVJEX1NUUlNUUkVBTQorI2RlZmluZSBfQkFDS1dBUkRfU1RSU1RSRUFNCisKKyNpbmNsdWRlICJiYWNrd2FyZF93YXJuaW5nLmgiCisjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPGlvcz4KKyNpbmNsdWRlIDxpc3RyZWFtPgorI2luY2x1ZGUgPG9zdHJlYW0+CisjaW5jbHVkZSA8c3RyaW5nPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8vIENsYXNzIHN0cnN0cmVhbWJ1ZiwgYSBzdHJlYW1idWYgY2xhc3MgdGhhdCBtYW5hZ2VzIGFuIGFycmF5IG9mIGNoYXIuCisgIC8vIE5vdGUgdGhhdCB0aGlzIGNsYXNzIGlzIG5vdCBhIHRlbXBsYXRlLgorICBjbGFzcyBzdHJzdHJlYW1idWYgOiBwdWJsaWMgYmFzaWNfc3RyZWFtYnVmPGNoYXIsIGNoYXJfdHJhaXRzPGNoYXI+ID4KKyAgeworICBwdWJsaWM6CisgICAgLy8gVHlwZXMuCisgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxjaGFyPiAgICAgICAgICAgICAgX1RyYWl0czsKKyAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyLCBfVHJhaXRzPiBfQmFzZTsKKworICBwdWJsaWM6CisgICAgLy8gQ29uc3RydWN0b3IsIGRlc3RydWN0b3IKKyAgICBleHBsaWNpdCBzdHJzdHJlYW1idWYoc3RyZWFtc2l6ZSBfX2luaXRpYWxfY2FwYWNpdHkgPSAwKTsKKyAgICBzdHJzdHJlYW1idWYodm9pZCogKCpfX2FsbG9jKShzaXplX3QpLCB2b2lkICgqX19mcmVlKSh2b2lkKikpOworCisgICAgc3Ryc3RyZWFtYnVmKGNoYXIqIF9fZ2V0LCBzdHJlYW1zaXplIF9fbiwgY2hhciogX19wdXQgPSAwKSB0aHJvdyAoKTsKKyAgICBzdHJzdHJlYW1idWYoc2lnbmVkIGNoYXIqIF9fZ2V0LCBzdHJlYW1zaXplIF9fbiwgc2lnbmVkIGNoYXIqIF9fcHV0ID0gMCkgdGhyb3cgKCk7CisgICAgc3Ryc3RyZWFtYnVmKHVuc2lnbmVkIGNoYXIqIF9fZ2V0LCBzdHJlYW1zaXplIF9fbiwgdW5zaWduZWQgY2hhciogX19wdXQ9MCkgdGhyb3cgKCk7CisKKyAgICBzdHJzdHJlYW1idWYoY29uc3QgY2hhciogX19nZXQsIHN0cmVhbXNpemUgX19uKSB0aHJvdyAoKTsKKyAgICBzdHJzdHJlYW1idWYoY29uc3Qgc2lnbmVkIGNoYXIqIF9fZ2V0LCBzdHJlYW1zaXplIF9fbikgdGhyb3cgKCk7CisgICAgc3Ryc3RyZWFtYnVmKGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZ2V0LCBzdHJlYW1zaXplIF9fbikgdGhyb3cgKCk7CisKKyAgICB2aXJ0dWFsIH5zdHJzdHJlYW1idWYoKTsKKworICBwdWJsaWM6CisgICAgdm9pZCBmcmVlemUoYm9vbCA9IHRydWUpIHRocm93ICgpOworICAgIGNoYXIqIHN0cigpIHRocm93ICgpOworICAgIF9HTElCQ1hYX1BVUkUgaW50IHBjb3VudCgpIGNvbnN0IHRocm93ICgpOworCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIGludF90eXBlIG92ZXJmbG93KGludF90eXBlIF9fYyAgPSBfVHJhaXRzOjplb2YoKSk7CisgICAgdmlydHVhbCBpbnRfdHlwZSBwYmFja2ZhaWwoaW50X3R5cGUgX19jID0gX1RyYWl0czo6ZW9mKCkpOworICAgIHZpcnR1YWwgaW50X3R5cGUgdW5kZXJmbG93KCk7CisgICAgdmlydHVhbCBfQmFzZSogc2V0YnVmKGNoYXIqIF9fYnVmLCBzdHJlYW1zaXplIF9fbik7CisgICAgdmlydHVhbCBwb3NfdHlwZSBzZWVrb2ZmKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2RpciwKKwkJCSAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZQorCQkJICAgICA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpOworICAgIHZpcnR1YWwgcG9zX3R5cGUgc2Vla3Bvcyhwb3NfdHlwZSBfX3BvcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZQorCQkJICAgICA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpOworCisgIHByaXZhdGU6CisgICAgc3Ryc3RyZWFtYnVmJgorICAgIG9wZXJhdG9yPShjb25zdCBzdHJzdHJlYW1idWYmKTsKKworICAgIHN0cnN0cmVhbWJ1Zihjb25zdCBzdHJzdHJlYW1idWYmKTsKKworICAgIC8vIER5bmFtaWMgYWxsb2NhdGlvbiwgcG9zc2libHkgdXNpbmcgX01fYWxsb2NfZnVuIGFuZCBfTV9mcmVlX2Z1bi4KKyAgICBjaGFyKiBfTV9hbGxvYyhzaXplX3QpOworICAgIHZvaWQgIF9NX2ZyZWUoY2hhciopOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHVzZWQgaW4gY29uc3RydWN0b3JzLgorICAgIHZvaWQgX01fc2V0dXAoY2hhciogX19nZXQsIGNoYXIqIF9fcHV0LCBzdHJlYW1zaXplIF9fbikgdGhyb3cgKCk7CisKKyAgcHJpdmF0ZToKKyAgICAvLyBEYXRhIG1lbWJlcnMuCisgICAgdm9pZCogKCpfTV9hbGxvY19mdW4pKHNpemVfdCk7CisgICAgdm9pZCAgKCpfTV9mcmVlX2Z1bikodm9pZCopOworCisgICAgYm9vbCBfTV9keW5hbWljICA6IDE7CisgICAgYm9vbCBfTV9mcm96ZW4gICA6IDE7CisgICAgYm9vbCBfTV9jb25zdGFudCA6IDE7CisgIH07CisKKyAgLy8gQ2xhc3MgaXN0cnN0cmVhbSwgYW4gaXN0cmVhbSB0aGF0IG1hbmFnZXMgYSBzdHJzdHJlYW1idWYuCisgIGNsYXNzIGlzdHJzdHJlYW0gOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxjaGFyPgorICB7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBpc3Ryc3RyZWFtKGNoYXIqKTsKKyAgICBleHBsaWNpdCBpc3Ryc3RyZWFtKGNvbnN0IGNoYXIqKTsKKyAgICBpc3Ryc3RyZWFtKGNoYXIqICwgc3RyZWFtc2l6ZSk7CisgICAgaXN0cnN0cmVhbShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CisgICAgdmlydHVhbCB+aXN0cnN0cmVhbSgpOworCisgICAgX0dMSUJDWFhfQ09OU1Qgc3Ryc3RyZWFtYnVmKiByZGJ1ZigpIGNvbnN0IHRocm93ICgpOworICAgIGNoYXIqIHN0cigpIHRocm93ICgpOworCisgIHByaXZhdGU6CisgICAgc3Ryc3RyZWFtYnVmIF9NX2J1ZjsKKyAgfTsKKworICAvLyBDbGFzcyBvc3Ryc3RyZWFtCisgIGNsYXNzIG9zdHJzdHJlYW0gOiBwdWJsaWMgYmFzaWNfb3N0cmVhbTxjaGFyPgorICB7CisgIHB1YmxpYzoKKyAgICBvc3Ryc3RyZWFtKCk7CisgICAgb3N0cnN0cmVhbShjaGFyKiwgaW50LCBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6b3V0KTsKKyAgICB2aXJ0dWFsIH5vc3Ryc3RyZWFtKCk7CisKKyAgICBfR0xJQkNYWF9DT05TVCBzdHJzdHJlYW1idWYqIHJkYnVmKCkgY29uc3QgdGhyb3cgKCk7CisgICAgdm9pZCBmcmVlemUoYm9vbCA9IHRydWUpIHRocm93KCk7CisgICAgY2hhciogc3RyKCkgdGhyb3cgKCk7CisgICAgX0dMSUJDWFhfUFVSRSBpbnQgcGNvdW50KCkgY29uc3QgdGhyb3cgKCk7CisKKyAgcHJpdmF0ZToKKyAgICBzdHJzdHJlYW1idWYgX01fYnVmOworICB9OworCisgIC8vIENsYXNzIHN0cnN0cmVhbQorICBjbGFzcyBzdHJzdHJlYW0gOiBwdWJsaWMgYmFzaWNfaW9zdHJlYW08Y2hhcj4KKyAgeworICBwdWJsaWM6CisgICAgdHlwZWRlZiBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl90eXBlOworICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8Y2hhcj46OmludF90eXBlIGludF90eXBlOworICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8Y2hhcj46OnBvc190eXBlIHBvc190eXBlOworICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8Y2hhcj46Om9mZl90eXBlIG9mZl90eXBlOworCisgICAgc3Ryc3RyZWFtKCk7CisgICAgc3Ryc3RyZWFtKGNoYXIqLCBpbnQsIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpOworICAgIHZpcnR1YWwgfnN0cnN0cmVhbSgpOworCisgICAgX0dMSUJDWFhfQ09OU1Qgc3Ryc3RyZWFtYnVmKiByZGJ1ZigpIGNvbnN0IHRocm93ICgpOworICAgIHZvaWQgZnJlZXplKGJvb2wgPSB0cnVlKSB0aHJvdyAoKTsKKyAgICBfR0xJQkNYWF9QVVJFIGludCBwY291bnQoKSBjb25zdCB0aHJvdyAoKTsKKyAgICBjaGFyKiBzdHIoKSB0aHJvdyAoKTsKKworICBwcml2YXRlOgorICAgIHN0cnN0cmVhbWJ1ZiBfTV9idWY7CisgIH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvYWxnb3JpdGhtZndkLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvYWxnb3JpdGhtZndkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JkN2Y2ZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9hbGdvcml0aG1md2QuaApAQCAtMCwwICsxLDgwMyBAQAorLy8gPGFsZ29yaXRobT4gZGVjbGFyYXRpb25zICAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvYWxnb3JpdGhtZndkLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9BTEdPUklUSE1GV0RfSAorI2RlZmluZSBfR0xJQkNYWF9BTEdPUklUSE1GV0RfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfcGFpci5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8qCisgICAgYWRqYWNlbnRfZmluZAorICAgIGFsbF9vZiAoQysrMHgpCisgICAgYW55X29mIChDKysweCkKKyAgICBiaW5hcnlfc2VhcmNoCisgICAgY29weQorICAgIGNvcHlfYmFja3dhcmQKKyAgICBjb3B5X2lmIChDKysweCkKKyAgICBjb3B5X24gKEMrKzB4KQorICAgIGNvdW50CisgICAgY291bnRfaWYKKyAgICBlcXVhbAorICAgIGVxdWFsX3JhbmdlCisgICAgZmlsbAorICAgIGZpbGxfbgorICAgIGZpbmQKKyAgICBmaW5kX2VuZAorICAgIGZpbmRfZmlyc3Rfb2YKKyAgICBmaW5kX2lmCisgICAgZmluZF9pZl9ub3QgKEMrKzB4KQorICAgIGZvcl9lYWNoCisgICAgZ2VuZXJhdGUKKyAgICBnZW5lcmF0ZV9uCisgICAgaW5jbHVkZXMKKyAgICBpbnBsYWNlX21lcmdlCisgICAgaXNfaGVhcCAoQysrMHgpCisgICAgaXNfaGVhcF91bnRpbCAoQysrMHgpCisgICAgaXNfcGFydGl0aW9uZWQgKEMrKzB4KQorICAgIGlzX3NvcnRlZCAoQysrMHgpCisgICAgaXNfc29ydGVkX3VudGlsIChDKysweCkKKyAgICBpdGVyX3N3YXAKKyAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZQorICAgIGxvd2VyX2JvdW5kCisgICAgbWFrZV9oZWFwCisgICAgbWF4CisgICAgbWF4X2VsZW1lbnQKKyAgICBtZXJnZQorICAgIG1pbgorICAgIG1pbl9lbGVtZW50CisgICAgbWlubWF4IChDKysweCkKKyAgICBtaW5tYXhfZWxlbWVudCAoQysrMHgpCisgICAgbWlzbWF0Y2gKKyAgICBuZXh0X3Blcm11dGF0aW9uCisgICAgbm9uZV9vZiAoQysrMHgpCisgICAgbnRoX2VsZW1lbnQKKyAgICBwYXJ0aWFsX3NvcnQKKyAgICBwYXJ0aWFsX3NvcnRfY29weQorICAgIHBhcnRpdGlvbgorICAgIHBhcnRpdGlvbl9jb3B5IChDKysweCkKKyAgICBwYXJ0aXRpb25fcG9pbnQgKEMrKzB4KQorICAgIHBvcF9oZWFwCisgICAgcHJldl9wZXJtdXRhdGlvbgorICAgIHB1c2hfaGVhcAorICAgIHJhbmRvbV9zaHVmZmxlCisgICAgcmVtb3ZlCisgICAgcmVtb3ZlX2NvcHkKKyAgICByZW1vdmVfY29weV9pZgorICAgIHJlbW92ZV9pZgorICAgIHJlcGxhY2UKKyAgICByZXBsYWNlX2NvcHkKKyAgICByZXBsYWNlX2NvcHlfaWYKKyAgICByZXBsYWNlX2lmCisgICAgcmV2ZXJzZQorICAgIHJldmVyc2VfY29weQorICAgIHJvdGF0ZQorICAgIHJvdGF0ZV9jb3B5CisgICAgc2VhcmNoCisgICAgc2VhcmNoX24KKyAgICBzZXRfZGlmZmVyZW5jZQorICAgIHNldF9pbnRlcnNlY3Rpb24KKyAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UKKyAgICBzZXRfdW5pb24KKyAgICBzaHVmZmxlIChDKysweCkKKyAgICBzb3J0CisgICAgc29ydF9oZWFwCisgICAgc3RhYmxlX3BhcnRpdGlvbgorICAgIHN0YWJsZV9zb3J0CisgICAgc3dhcAorICAgIHN3YXBfcmFuZ2VzCisgICAgdHJhbnNmb3JtCisgICAgdW5pcXVlCisgICAgdW5pcXVlX2NvcHkKKyAgICB1cHBlcl9ib3VuZAorICAqLworCisgIC8qKgorICAgKiBAZGVmZ3JvdXAgYWxnb3JpdGhtcyBBbGdvcml0aG1zCisgICAqCisgICAqIENvbXBvbmVudHMgZm9yIHBlcmZvcm1pbmcgYWxnb3JpdGhtaWMgb3BlcmF0aW9ucy4gSW5jbHVkZXMKKyAgICogbm9uLW1vZGlmeWluZyBzZXF1ZW5jZSwgbW9kaWZ5aW5nIChtdXRhdGluZykgc2VxdWVuY2UsIHNvcnRpbmcsCisgICAqIHNlYXJjaGluZywgbWVyZ2UsIHBhcnRpdGlvbiwgaGVhcCwgc2V0LCBtaW5pbWEsIG1heGltYSwgYW5kCisgICAqIHBlcm11dGF0aW9uIG9wZXJhdGlvbnMuCisgICAqLworCisgIC8qKgorICAgKiBAZGVmZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcyBNdXRhdGluZworICAgKiBAaW5ncm91cCBhbGdvcml0aG1zCisgICAqLworCisgIC8qKgorICAgKiBAZGVmZ3JvdXAgbm9uX211dGF0aW5nX2FsZ29yaXRobXMgTm9uLU11dGF0aW5nCisgICAqIEBpbmdyb3VwIGFsZ29yaXRobXMKKyAgICovCisKKyAgLyoqCisgICAqIEBkZWZncm91cCBzb3J0aW5nX2FsZ29yaXRobXMgU29ydGluZworICAgKiBAaW5ncm91cCBhbGdvcml0aG1zCisgICAqLworCisgIC8qKgorICAgKiBAZGVmZ3JvdXAgc2V0X2FsZ29yaXRobXMgU2V0IE9wZXJhdGlvbgorICAgKiBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICoKKyAgICogVGhlc2UgYWxnb3JpdGhtcyBhcmUgY29tbW9uIHNldCBvcGVyYXRpb25zIHBlcmZvcm1lZCBvbiBzZXF1ZW5jZXMKKyAgICogdGhhdCBhcmUgYWxyZWFkeSBzb3J0ZWQuIFRoZSBudW1iZXIgb2YgY29tcGFyaXNvbnMgd2lsbCBiZQorICAgKiBsaW5lYXIuCisgICAqLworCisgIC8qKgorICAgKiBAZGVmZ3JvdXAgYmluYXJ5X3NlYXJjaF9hbGdvcml0aG1zIEJpbmFyeSBTZWFyY2gKKyAgICogQGluZ3JvdXAgc29ydGluZ19hbGdvcml0aG1zCisgICAqCisgICAqIFRoZXNlIGFsZ29yaXRobXMgYXJlIHZhcmlhdGlvbnMgb2YgYSBjbGFzc2ljIGJpbmFyeSBzZWFyY2gsIGFuZAorICAgKiBhbGwgYXNzdW1lIHRoYXQgdGhlIHNlcXVlbmNlIGJlaW5nIHNlYXJjaGVkIGlzIGFscmVhZHkgc29ydGVkLgorICAgKiAKKyAgICogVGhlIG51bWJlciBvZiBjb21wYXJpc29ucyB3aWxsIGJlIGxvZ2FyaXRobWljIChhbmQgYXMgZmV3IGFzCisgICAqIHBvc3NpYmxlKS4gIFRoZSBudW1iZXIgb2Ygc3RlcHMgdGhyb3VnaCB0aGUgc2VxdWVuY2Ugd2lsbCBiZQorICAgKiBsb2dhcml0aG1pYyBmb3IgcmFuZG9tLWFjY2VzcyBpdGVyYXRvcnMgKGUuZy4sIHBvaW50ZXJzKSwgYW5kCisgICAqIGxpbmVhciBvdGhlcndpc2UuCisgICAqIAorICAgKiBUaGUgTFdHIGhhcyBwYXNzZWQgRGVmZWN0IFJlcG9ydCAyNzAsIHdoaWNoIG5vdGVzOiA8ZW0+VGhlCisgICAqIHByb3Bvc2VkIHJlc29sdXRpb24gcmVpbnRlcnByZXRzIGJpbmFyeSBzZWFyY2guIEluc3RlYWQgb2YKKyAgICogdGhpbmtpbmcgYWJvdXQgc2VhcmNoaW5nIGZvciBhIHZhbHVlIGluIGEgc29ydGVkIHJhbmdlLCB3ZSB2aWV3CisgICAqIHRoYXQgYXMgYW4gaW1wb3J0YW50IHNwZWNpYWwgY2FzZSBvZiBhIG1vcmUgZ2VuZXJhbCBhbGdvcml0aG06CisgICAqIHNlYXJjaGluZyBmb3IgdGhlIHBhcnRpdGlvbiBwb2ludCBpbiBhIHBhcnRpdGlvbmVkIHJhbmdlLiAgV2UKKyAgICogYWxzbyBhZGQgYSBndWFyYW50ZWUgdGhhdCB0aGUgb2xkIHdvcmRpbmcgZGlkIG5vdDogd2UgZW5zdXJlIHRoYXQKKyAgICogdGhlIHVwcGVyIGJvdW5kIGlzIG5vIGVhcmxpZXIgdGhhbiB0aGUgbG93ZXIgYm91bmQsIHRoYXQgdGhlIHBhaXIKKyAgICogcmV0dXJuZWQgYnkgZXF1YWxfcmFuZ2UgaXMgYSB2YWxpZCByYW5nZSwgYW5kIHRoYXQgdGhlIGZpcnN0IHBhcnQKKyAgICogb2YgdGhhdCBwYWlyIGlzIHRoZSBsb3dlciBib3VuZC48L2VtPgorICAgKgorICAgKiBUaGUgYWN0dWFsIGVmZmVjdCBvZiB0aGUgZmlyc3Qgc2VudGVuY2UgaXMgdGhhdCBhIGNvbXBhcmlzb24KKyAgICogZnVuY3RvciBwYXNzZWQgYnkgdGhlIHVzZXIgZG9lc24ndCBuZWNlc3NhcmlseSBuZWVkIHRvIGluZHVjZSBhCisgICAqIHN0cmljdCB3ZWFrIG9yZGVyaW5nIHJlbGF0aW9uLiAgUmF0aGVyLCBpdCBwYXJ0aXRpb25zIHRoZSByYW5nZS4KKyAgICovCisKKyAgLy8gYWRqYWNlbnRfZmluZAorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGJvb2wKKyAgICBhbGxfb2YoX0lJdGVyLCBfSUl0ZXIsIF9QcmVkaWNhdGUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBib29sCisgICAgYW55X29mKF9JSXRlciwgX0lJdGVyLCBfUHJlZGljYXRlKTsKKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlciwgdHlwZW5hbWUgX1RwPgorICAgIGJvb2wgCisgICAgYmluYXJ5X3NlYXJjaChfRkl0ZXIsIF9GSXRlciwgY29uc3QgX1RwJik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGJvb2wgCisgICAgYmluYXJ5X3NlYXJjaChfRkl0ZXIsIF9GSXRlciwgY29uc3QgX1RwJiwgX0NvbXBhcmUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX09JdGVyPgorICAgIF9PSXRlciAKKyAgICBjb3B5KF9JSXRlciwgX0lJdGVyLCBfT0l0ZXIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CSXRlcjEsIHR5cGVuYW1lIF9CSXRlcjI+CisgICAgX0JJdGVyMgorICAgIGNvcHlfYmFja3dhcmQoX0JJdGVyMSwgX0JJdGVyMSwgX0JJdGVyMik7CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9PSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBfT0l0ZXIKKyAgICBjb3B5X2lmKF9JSXRlciwgX0lJdGVyLCBfT0l0ZXIsIF9QcmVkaWNhdGUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9PSXRlcj4KKyAgICBfT0l0ZXIKKyAgICBjb3B5X24oX0lJdGVyLCBfU2l6ZSwgX09JdGVyKTsKKyNlbmRpZgorCisgIC8vIGNvdW50CisgIC8vIGNvdW50X2lmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfVHA+CisgICAgcGFpcjxfRkl0ZXIsIF9GSXRlcj4KKyAgICBlcXVhbF9yYW5nZShfRkl0ZXIsIF9GSXRlciwgY29uc3QgX1RwJik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHBhaXI8X0ZJdGVyLCBfRkl0ZXI+CisgICAgZXF1YWxfcmFuZ2UoX0ZJdGVyLCBfRkl0ZXIsIGNvbnN0IF9UcCYsIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9UcD4KKyAgICB2b2lkIAorICAgIGZpbGwoX0ZJdGVyLCBfRkl0ZXIsIGNvbnN0IF9UcCYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9PSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KKyAgICBfT0l0ZXIKKyAgICBmaWxsX24oX09JdGVyLCBfU2l6ZSwgY29uc3QgX1RwJik7CisKKyAgLy8gZmluZAorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcjEsIHR5cGVuYW1lIF9GSXRlcjI+CisgICAgX0ZJdGVyMQorICAgIGZpbmRfZW5kKF9GSXRlcjEsIF9GSXRlcjEsIF9GSXRlcjIsIF9GSXRlcjIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcjEsIHR5cGVuYW1lIF9GSXRlcjIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgX0ZJdGVyMQorICAgIGZpbmRfZW5kKF9GSXRlcjEsIF9GSXRlcjEsIF9GSXRlcjIsIF9GSXRlcjIsIF9CaW5hcnlQcmVkaWNhdGUpOworCisgIC8vIGZpbmRfZmlyc3Rfb2YKKyAgLy8gZmluZF9pZgorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIF9JSXRlcgorICAgIGZpbmRfaWZfbm90KF9JSXRlciwgX0lJdGVyLCBfUHJlZGljYXRlKTsKKyNlbmRpZgorCisgIC8vIGZvcl9lYWNoCisgIC8vIGdlbmVyYXRlCisgIC8vIGdlbmVyYXRlX24KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyPgorICAgIGJvb2wgCisgICAgaW5jbHVkZXMoX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX0lJdGVyMik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgYm9vbCAKKyAgICBpbmNsdWRlcyhfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfSUl0ZXIyLCBfQ29tcGFyZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJdGVyPgorICAgIHZvaWQgCisgICAgaW5wbGFjZV9tZXJnZShfQkl0ZXIsIF9CSXRlciwgX0JJdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQkl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQgCisgICAgaW5wbGFjZV9tZXJnZShfQkl0ZXIsIF9CSXRlciwgX0JJdGVyLCBfQ29tcGFyZSk7CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyPgorICAgIGJvb2wgCisgICAgaXNfaGVhcChfUkFJdGVyLCBfUkFJdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBib29sIAorICAgIGlzX2hlYXAoX1JBSXRlciwgX1JBSXRlciwgX0NvbXBhcmUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXI+CisgICAgX1JBSXRlciAKKyAgICBpc19oZWFwX3VudGlsKF9SQUl0ZXIsIF9SQUl0ZXIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9SQUl0ZXIgCisgICAgaXNfaGVhcF91bnRpbChfUkFJdGVyLCBfUkFJdGVyLCBfQ29tcGFyZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGJvb2wKKyAgICBpc19wYXJ0aXRpb25lZChfSUl0ZXIsIF9JSXRlciwgX1ByZWRpY2F0ZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyPgorICAgIGJvb2wgCisgICAgaXNfc29ydGVkKF9GSXRlciwgX0ZJdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGJvb2wgCisgICAgaXNfc29ydGVkKF9GSXRlciwgX0ZJdGVyLCBfQ29tcGFyZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyPgorICAgIF9GSXRlciAKKyAgICBpc19zb3J0ZWRfdW50aWwoX0ZJdGVyLCBfRkl0ZXIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX0ZJdGVyIAorICAgIGlzX3NvcnRlZF91bnRpbChfRkl0ZXIsIF9GSXRlciwgX0NvbXBhcmUpOworI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyMSwgdHlwZW5hbWUgX0ZJdGVyMj4KKyAgICB2b2lkIAorICAgIGl0ZXJfc3dhcChfRkl0ZXIxLCBfRkl0ZXIyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9UcD4KKyAgICBfRkl0ZXIgCisgICAgbG93ZXJfYm91bmQoX0ZJdGVyLCBfRkl0ZXIsIGNvbnN0IF9UcCYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfRkl0ZXIgCisgICAgbG93ZXJfYm91bmQoX0ZJdGVyLCBfRkl0ZXIsIGNvbnN0IF9UcCYsIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyPgorICAgIHZvaWQgCisgICAgbWFrZV9oZWFwKF9SQUl0ZXIsIF9SQUl0ZXIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQgCisgICAgbWFrZV9oZWFwKF9SQUl0ZXIsIF9SQUl0ZXIsIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IAorICAgIGNvbnN0IF9UcCYgCisgICAgbWF4KGNvbnN0IF9UcCYsIGNvbnN0IF9UcCYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgY29uc3QgX1RwJiAKKyAgICBtYXgoY29uc3QgX1RwJiwgY29uc3QgX1RwJiwgX0NvbXBhcmUpOworCisgIC8vIG1heF9lbGVtZW50CisgIC8vIG1lcmdlCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiAKKyAgICBjb25zdCBfVHAmIAorICAgIG1pbihjb25zdCBfVHAmLCBjb25zdCBfVHAmKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGNvbnN0IF9UcCYgCisgICAgbWluKGNvbnN0IF9UcCYsIGNvbnN0IF9UcCYsIF9Db21wYXJlKTsKKworICAvLyBtaW5fZWxlbWVudAorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHBhaXI8Y29uc3QgX1RwJiwgY29uc3QgX1RwJj4gCisgICAgbWlubWF4KGNvbnN0IF9UcCYsIGNvbnN0IF9UcCYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgcGFpcjxjb25zdCBfVHAmLCBjb25zdCBfVHAmPgorICAgIG1pbm1heChjb25zdCBfVHAmLCBjb25zdCBfVHAmLCBfQ29tcGFyZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyPgorICAgIHBhaXI8X0ZJdGVyLCBfRkl0ZXI+CisgICAgbWlubWF4X2VsZW1lbnQoX0ZJdGVyLCBfRkl0ZXIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgcGFpcjxfRkl0ZXIsIF9GSXRlcj4KKyAgICBtaW5tYXhfZWxlbWVudChfRkl0ZXIsIF9GSXRlciwgX0NvbXBhcmUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBtaW4oaW5pdGlhbGl6ZXJfbGlzdDxfVHA+KTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9UcAorICAgIG1pbihpbml0aWFsaXplcl9saXN0PF9UcD4sIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgbWF4KGluaXRpYWxpemVyX2xpc3Q8X1RwPik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfVHAKKyAgICBtYXgoaW5pdGlhbGl6ZXJfbGlzdDxfVHA+LCBfQ29tcGFyZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHBhaXI8X1RwLCBfVHA+CisgICAgbWlubWF4KGluaXRpYWxpemVyX2xpc3Q8X1RwPik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBwYWlyPF9UcCwgX1RwPgorICAgIG1pbm1heChpbml0aWFsaXplcl9saXN0PF9UcD4sIF9Db21wYXJlKTsKKyNlbmRpZgorCisgIC8vIG1pc21hdGNoCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJdGVyPgorICAgIGJvb2wgCisgICAgbmV4dF9wZXJtdXRhdGlvbihfQkl0ZXIsIF9CSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBib29sIAorICAgIG5leHRfcGVybXV0YXRpb24oX0JJdGVyLCBfQkl0ZXIsIF9Db21wYXJlKTsKKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBib29sCisgICAgbm9uZV9vZihfSUl0ZXIsIF9JSXRlciwgX1ByZWRpY2F0ZSk7CisjZW5kaWYKKworICAvLyBudGhfZWxlbWVudAorICAvLyBwYXJ0aWFsX3NvcnQKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9SQUl0ZXI+CisgICAgX1JBSXRlcgorICAgIHBhcnRpYWxfc29ydF9jb3B5KF9JSXRlciwgX0lJdGVyLCBfUkFJdGVyLCBfUkFJdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9SQUl0ZXIKKyAgICBwYXJ0aWFsX3NvcnRfY29weShfSUl0ZXIsIF9JSXRlciwgX1JBSXRlciwgX1JBSXRlciwgX0NvbXBhcmUpOworCisgIC8vIHBhcnRpdGlvbgorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfT0l0ZXIxLAorCSAgIHR5cGVuYW1lIF9PSXRlcjIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgcGFpcjxfT0l0ZXIxLCBfT0l0ZXIyPgorICAgIHBhcnRpdGlvbl9jb3B5KF9JSXRlciwgX0lJdGVyLCBfT0l0ZXIxLCBfT0l0ZXIyLCBfUHJlZGljYXRlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgX0ZJdGVyCisgICAgcGFydGl0aW9uX3BvaW50KF9GSXRlciwgX0ZJdGVyLCBfUHJlZGljYXRlKTsKKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXI+CisgICAgdm9pZCAKKyAgICBwb3BfaGVhcChfUkFJdGVyLCBfUkFJdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB2b2lkIAorICAgIHBvcF9oZWFwKF9SQUl0ZXIsIF9SQUl0ZXIsIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQkl0ZXI+CisgICAgYm9vbCAKKyAgICBwcmV2X3Blcm11dGF0aW9uKF9CSXRlciwgX0JJdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQkl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGJvb2wgCisgICAgcHJldl9wZXJtdXRhdGlvbihfQkl0ZXIsIF9CSXRlciwgX0NvbXBhcmUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXI+CisgICAgdm9pZCAKKyAgICBwdXNoX2hlYXAoX1JBSXRlciwgX1JBSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZCAKKyAgICBwdXNoX2hlYXAoX1JBSXRlciwgX1JBSXRlciwgX0NvbXBhcmUpOworCisgIC8vIHJhbmRvbV9zaHVmZmxlCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfVHA+CisgICAgX0ZJdGVyIAorICAgIHJlbW92ZShfRkl0ZXIsIF9GSXRlciwgY29uc3QgX1RwJik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIF9GSXRlciAKKyAgICByZW1vdmVfaWYoX0ZJdGVyLCBfRkl0ZXIsIF9QcmVkaWNhdGUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX09JdGVyLCB0eXBlbmFtZSBfVHA+CisgICAgX09JdGVyIAorICAgIHJlbW92ZV9jb3B5KF9JSXRlciwgX0lJdGVyLCBfT0l0ZXIsIGNvbnN0IF9UcCYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX09JdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIF9PSXRlciAKKyAgICByZW1vdmVfY29weV9pZihfSUl0ZXIsIF9JSXRlciwgX09JdGVyLCBfUHJlZGljYXRlKTsKKworICAvLyByZXBsYWNlCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfT0l0ZXIsIHR5cGVuYW1lIF9UcD4KKyAgICBfT0l0ZXIgCisgICAgcmVwbGFjZV9jb3B5KF9JSXRlciwgX0lJdGVyLCBfT0l0ZXIsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyLCB0eXBlbmFtZSBfT0l0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9UcD4KKyAgICBfT0l0ZXIgCisgICAgcmVwbGFjZV9jb3B5X2lmKF9JdGVyLCBfSXRlciwgX09JdGVyLCBfUHJlZGljYXRlLCBjb25zdCBfVHAmKTsKKworICAvLyByZXBsYWNlX2lmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJdGVyPgorICAgIHZvaWQgCisgICAgcmV2ZXJzZShfQkl0ZXIsIF9CSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJdGVyLCB0eXBlbmFtZSBfT0l0ZXI+CisgICAgX09JdGVyIAorICAgIHJldmVyc2VfY29weShfQkl0ZXIsIF9CSXRlciwgX09JdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXI+CisgICAgdm9pZCAKKyAgICByb3RhdGUoX0ZJdGVyLCBfRkl0ZXIsIF9GSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfT0l0ZXI+CisgICAgX09JdGVyIAorICAgIHJvdGF0ZV9jb3B5KF9GSXRlciwgX0ZJdGVyLCBfRkl0ZXIsIF9PSXRlcik7CisKKyAgLy8gc2VhcmNoCisgIC8vIHNlYXJjaF9uCisgIC8vIHNldF9kaWZmZXJlbmNlCisgIC8vIHNldF9pbnRlcnNlY3Rpb24KKyAgLy8gc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlCisgIC8vIHNldF91bmlvbgorCisjaWYgZGVmaW5lZChfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXykgJiYgZGVmaW5lZChfR0xJQkNYWF9VU0VfQzk5X1NURElOVF9UUjEpCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9VR2VuZXJhdG9yPgorICAgIHZvaWQKKyAgICBzaHVmZmxlKF9SQUl0ZXIsIF9SQUl0ZXIsIF9VR2VuZXJhdG9yJik7CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyPgorICAgIHZvaWQgCisgICAgc29ydF9oZWFwKF9SQUl0ZXIsIF9SQUl0ZXIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQgCisgICAgc29ydF9oZWFwKF9SQUl0ZXIsIF9SQUl0ZXIsIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQkl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgX0JJdGVyIAorICAgIHN0YWJsZV9wYXJ0aXRpb24oX0JJdGVyLCBfQkl0ZXIsIF9QcmVkaWNhdGUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gCisgICAgdm9pZCAKKyAgICBzd2FwKF9UcCYsIF9UcCYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgc2l6ZV90IF9ObT4KKyAgICB2b2lkCisgICAgc3dhcChfVHAgKCYpW19ObV0sIF9UcCAoJilbX05tXSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyMSwgdHlwZW5hbWUgX0ZJdGVyMj4KKyAgICBfRkl0ZXIyIAorICAgIHN3YXBfcmFuZ2VzKF9GSXRlcjEsIF9GSXRlcjEsIF9GSXRlcjIpOworCisgIC8vIHRyYW5zZm9ybQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcj4KKyAgICBfRkl0ZXIgCisgICAgdW5pcXVlKF9GSXRlciwgX0ZJdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgX0ZJdGVyIAorICAgIHVuaXF1ZShfRkl0ZXIsIF9GSXRlciwgX0JpbmFyeVByZWRpY2F0ZSk7CisKKyAgLy8gdW5pcXVlX2NvcHkKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9UcD4KKyAgICBfRkl0ZXIgCisgICAgdXBwZXJfYm91bmQoX0ZJdGVyLCBfRkl0ZXIsIGNvbnN0IF9UcCYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfRkl0ZXIgCisgICAgdXBwZXJfYm91bmQoX0ZJdGVyLCBfRkl0ZXIsIGNvbnN0IF9UcCYsIF9Db21wYXJlKTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCitfR0xJQkNYWF9CRUdJTl9ORVNURURfTkFNRVNQQUNFKHN0ZCwgX0dMSUJDWFhfU1REX1ApCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyPgorICAgIF9GSXRlciAKKyAgICBhZGphY2VudF9maW5kKF9GSXRlciwgX0ZJdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgX0ZJdGVyIAorICAgIGFkamFjZW50X2ZpbmQoX0ZJdGVyLCBfRkl0ZXIsIF9CaW5hcnlQcmVkaWNhdGUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1RwPgorICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBjb3VudChfSUl0ZXIsIF9JSXRlciwgY29uc3QgX1RwJik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBjb3VudF9pZihfSUl0ZXIsIF9JSXRlciwgX1ByZWRpY2F0ZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMj4KKyAgICBib29sIAorICAgIGVxdWFsKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgYm9vbCAKKyAgICBlcXVhbChfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfQmluYXJ5UHJlZGljYXRlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9UcD4KKyAgICBfSUl0ZXIgCisgICAgZmluZChfSUl0ZXIsIF9JSXRlciwgY29uc3QgX1RwJik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyMSwgdHlwZW5hbWUgX0ZJdGVyMj4KKyAgICBfRkl0ZXIxCisgICAgZmluZF9maXJzdF9vZihfRkl0ZXIxLCBfRkl0ZXIxLCBfRkl0ZXIyLCBfRkl0ZXIyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIxLCB0eXBlbmFtZSBfRkl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgorICAgIF9GSXRlcjEKKyAgICBmaW5kX2ZpcnN0X29mKF9GSXRlcjEsIF9GSXRlcjEsIF9GSXRlcjIsIF9GSXRlcjIsIF9CaW5hcnlQcmVkaWNhdGUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBfSUl0ZXIKKyAgICBmaW5kX2lmKF9JSXRlciwgX0lJdGVyLCBfUHJlZGljYXRlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9GdW5jdD4KKyAgICBfRnVuY3QgCisgICAgZm9yX2VhY2goX0lJdGVyLCBfSUl0ZXIsIF9GdW5jdCk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfR2VuZXJhdG9yPgorICAgIHZvaWQgCisgICAgZ2VuZXJhdGUoX0ZJdGVyLCBfRkl0ZXIsIF9HZW5lcmF0b3IpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9PSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9HZW5lcmF0b3I+CisgICAgX09JdGVyCisgICAgZ2VuZXJhdGVfbihfT0l0ZXIsIF9TaXplLCBfR2VuZXJhdG9yKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyPgorICAgIGJvb2wgCisgICAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX0lJdGVyMik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgYm9vbCAKKyAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfSUl0ZXIyLCBfQ29tcGFyZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyPgorICAgIF9GSXRlciAKKyAgICBtYXhfZWxlbWVudChfRkl0ZXIsIF9GSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfRkl0ZXIgCisgICAgbWF4X2VsZW1lbnQoX0ZJdGVyLCBfRkl0ZXIsIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfT0l0ZXI+CisgICAgX09JdGVyIAorICAgIG1lcmdlKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9JSXRlcjIsIF9PSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwgdHlwZW5hbWUgX09JdGVyLCAKKwkgICB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfT0l0ZXIgCisgICAgbWVyZ2UoX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX0lJdGVyMiwgX09JdGVyLCBfQ29tcGFyZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyPgorICAgIF9GSXRlciAKKyAgICBtaW5fZWxlbWVudChfRkl0ZXIsIF9GSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfRkl0ZXIgCisgICAgbWluX2VsZW1lbnQoX0ZJdGVyLCBfRkl0ZXIsIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyPgorICAgIHBhaXI8X0lJdGVyMSwgX0lJdGVyMj4KKyAgICBtaXNtYXRjaChfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgorICAgIHBhaXI8X0lJdGVyMSwgX0lJdGVyMj4KKyAgICBtaXNtYXRjaChfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfQmluYXJ5UHJlZGljYXRlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyPgorICAgIHZvaWQgCisgICAgbnRoX2VsZW1lbnQoX1JBSXRlciwgX1JBSXRlciwgX1JBSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZCAKKyAgICBudGhfZWxlbWVudChfUkFJdGVyLCBfUkFJdGVyLCBfUkFJdGVyLCBfQ29tcGFyZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcj4KKyAgICB2b2lkIAorICAgIHBhcnRpYWxfc29ydChfUkFJdGVyLCBfUkFJdGVyLCBfUkFJdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB2b2lkIAorICAgIHBhcnRpYWxfc29ydChfUkFJdGVyLCBfUkFJdGVyLCBfUkFJdGVyLCBfQ29tcGFyZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIF9CSXRlciAKKyAgICBwYXJ0aXRpb24oX0JJdGVyLCBfQkl0ZXIsIF9QcmVkaWNhdGUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXI+CisgICAgdm9pZCAKKyAgICByYW5kb21fc2h1ZmZsZShfUkFJdGVyLCBfUkFJdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfR2VuZXJhdG9yPgorICAgIHZvaWQgCisgICAgcmFuZG9tX3NodWZmbGUoX1JBSXRlciwgX1JBSXRlciwKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworCQkgICBfR2VuZXJhdG9yJiYpOworI2Vsc2UKKwkJICAgX0dlbmVyYXRvciYpOworI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfVHA+CisgICAgdm9pZCAKKyAgICByZXBsYWNlKF9GSXRlciwgX0ZJdGVyLCBjb25zdCBfVHAmLCBjb25zdCBfVHAmKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9UcD4KKyAgICB2b2lkIAorICAgIHJlcGxhY2VfaWYoX0ZJdGVyLCBfRkl0ZXIsIF9QcmVkaWNhdGUsIGNvbnN0IF9UcCYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcjEsIHR5cGVuYW1lIF9GSXRlcjI+CisgICAgX0ZJdGVyMSAKKyAgICBzZWFyY2goX0ZJdGVyMSwgX0ZJdGVyMSwgX0ZJdGVyMiwgX0ZJdGVyMik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyMSwgdHlwZW5hbWUgX0ZJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KKyAgICBfRkl0ZXIxIAorICAgIHNlYXJjaChfRkl0ZXIxLCBfRkl0ZXIxLCBfRkl0ZXIyLCBfRkl0ZXIyLCBfQmluYXJ5UHJlZGljYXRlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CisgICAgX0ZJdGVyIAorICAgIHNlYXJjaF9uKF9GSXRlciwgX0ZJdGVyLCBfU2l6ZSwgY29uc3QgX1RwJik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwLCAKKwkgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgorICAgIF9GSXRlciAKKyAgICBzZWFyY2hfbihfRkl0ZXIsIF9GSXRlciwgX1NpemUsIGNvbnN0IF9UcCYsIF9CaW5hcnlQcmVkaWNhdGUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9PSXRlcj4KKyAgICBfT0l0ZXIgCisgICAgc2V0X2RpZmZlcmVuY2UoX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX0lJdGVyMiwgX09JdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfT0l0ZXIsIAorCSAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9PSXRlciAKKyAgICBzZXRfZGlmZmVyZW5jZShfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfSUl0ZXIyLCBfT0l0ZXIsIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfT0l0ZXI+CisgICAgX09JdGVyIAorICAgIHNldF9pbnRlcnNlY3Rpb24oX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX0lJdGVyMiwgX09JdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfT0l0ZXIsCisJICAgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX09JdGVyIAorICAgIHNldF9pbnRlcnNlY3Rpb24oX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX0lJdGVyMiwgX09JdGVyLCBfQ29tcGFyZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwgdHlwZW5hbWUgX09JdGVyPgorICAgIF9PSXRlcgorICAgIHNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfSUl0ZXIyLCBfT0l0ZXIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9PSXRlciwgCisJICAgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX09JdGVyCisgICAgc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9JSXRlcjIsIAorCQkJICAgICBfT0l0ZXIsIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfT0l0ZXI+CisgICAgX09JdGVyIAorICAgIHNldF91bmlvbihfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfSUl0ZXIyLCBfT0l0ZXIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9PSXRlciwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfT0l0ZXIgCisgICAgc2V0X3VuaW9uKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9JSXRlcjIsIF9PSXRlciwgX0NvbXBhcmUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXI+CisgICAgdm9pZCAKKyAgICBzb3J0KF9SQUl0ZXIsIF9SQUl0ZXIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQgCisgICAgc29ydChfUkFJdGVyLCBfUkFJdGVyLCBfQ29tcGFyZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcj4KKyAgICB2b2lkIAorICAgIHN0YWJsZV9zb3J0KF9SQUl0ZXIsIF9SQUl0ZXIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQgCisgICAgc3RhYmxlX3NvcnQoX1JBSXRlciwgX1JBSXRlciwgX0NvbXBhcmUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX09JdGVyLCB0eXBlbmFtZSBfVW5hcnlPcGVyYXRpb24+CisgICAgX09JdGVyIAorICAgIHRyYW5zZm9ybShfSUl0ZXIsIF9JSXRlciwgX09JdGVyLCBfVW5hcnlPcGVyYXRpb24pOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9PSXRlciwgCisJICAgdHlwZW5hbWUgX0JpbmFyeU9wZXJhdGlvbj4KKyAgICBfT0l0ZXIgCisgICAgdHJhbnNmb3JtKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9PSXRlciwgX0JpbmFyeU9wZXJhdGlvbik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfT0l0ZXI+CisgICAgX09JdGVyIAorICAgIHVuaXF1ZV9jb3B5KF9JSXRlciwgX0lJdGVyLCBfT0l0ZXIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX09JdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgorICAgIF9PSXRlciAKKyAgICB1bmlxdWVfY29weShfSUl0ZXIsIF9JSXRlciwgX09JdGVyLCBfQmluYXJ5UHJlZGljYXRlKTsKKworX0dMSUJDWFhfRU5EX05FU1RFRF9OQU1FU1BBQ0UKKworI2lmZGVmIF9HTElCQ1hYX05BTUVTUEFDRV9BU1NPQ0lBVElPTl9QQVJBTExFTAorIyBpbmNsdWRlIDxwYXJhbGxlbC9hbGdvcml0aG1md2QuaD4KKyNlbmRpZgorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2FsbG9jYXRvci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2FsbG9jYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZjQ4ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvYWxsb2NhdG9yLmgKQEAgLTAsMCArMSwyMDYgQEAKKy8vIEFsbG9jYXRvcnMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBhbGxvY2F0b3IuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWZuZGVmIF9BTExPQ0FUT1JfSAorI2RlZmluZSBfQUxMT0NBVE9SX0ggMQorCisvLyBEZWZpbmUgdGhlIGJhc2UgY2xhc3MgdG8gc3RkOjphbGxvY2F0b3IuCisjaW5jbHVkZSA8Yml0cy9jKythbGxvY2F0b3IuaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvKioKKyAgICogQGRlZmdyb3VwIGFsbG9jYXRvcnMgQWxsb2NhdG9ycworICAgKiBAaW5ncm91cCBtZW1vcnkKKyAgICoKKyAgICogQ2xhc3NlcyBlbmNhcHN1bGF0aW5nIG1lbW9yeSBvcGVyYXRpb25zLgorICAgKi8KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgYWxsb2NhdG9yOworCisgIC8vLyBhbGxvY2F0b3I8dm9pZD4gc3BlY2lhbGl6YXRpb24uCisgIHRlbXBsYXRlPD4KKyAgICBjbGFzcyBhbGxvY2F0b3I8dm9pZD4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBzaXplX3QgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHB0cmRpZmZfdCAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdm9pZCogICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgdmFsdWVfdHlwZTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgc3RydWN0IHJlYmluZAorICAgICAgICB7IHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOyB9OworICAgIH07CisKKyAgLyoqCisgICAqIEBicmllZiAgVGhlIEBhIHN0YW5kYXJkIGFsbG9jYXRvciwgYXMgcGVyIFsyMC40XS4KKyAgICogQGluZ3JvdXAgYWxsb2NhdG9ycworICAgKgorICAgKiAgRnVydGhlciBkZXRhaWxzOgorICAgKiAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL21hbnVhbC9iazAxcHQwNGNoMTEuaHRtbAorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIGFsbG9jYXRvcjogcHVibGljIF9fZ2xpYmN4eF9iYXNlX2FsbG9jYXRvcjxfVHA+CisgICAgeworICAgcHVibGljOgorICAgICAgdHlwZWRlZiBzaXplX3QgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgcHRyZGlmZl90ICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcCogICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiBfVHAmICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIF9UcCAgICAgICAgdmFsdWVfdHlwZTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgc3RydWN0IHJlYmluZAorICAgICAgICB7IHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOyB9OworCisgICAgICBhbGxvY2F0b3IoKSB0aHJvdygpIHsgfQorCisgICAgICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJiBfX2EpIHRocm93KCkKKyAgICAgIDogX19nbGliY3h4X2Jhc2VfYWxsb2NhdG9yPF9UcD4oX19hKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAxPiYpIHRocm93KCkgeyB9CisKKyAgICAgIH5hbGxvY2F0b3IoKSB0aHJvdygpIHsgfQorCisgICAgICAvLyBJbmhlcml0IGV2ZXJ5dGhpbmcgZWxzZS4KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKKyAgICB7IHJldHVybiB0cnVlOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1RwPiYsIGNvbnN0IGFsbG9jYXRvcjxfVHA+JikKKyAgICB7IHJldHVybiB0cnVlOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQorICAgIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBhbGxvY2F0b3I8X1RwPiYsIGNvbnN0IGFsbG9jYXRvcjxfVHA+JikKKyAgICB7IHJldHVybiBmYWxzZTsgfQorCisgIC8vIEluaGliaXQgaW1wbGljaXQgaW5zdGFudGlhdGlvbnMgZm9yIHJlcXVpcmVkIGluc3RhbnRpYXRpb25zLAorICAvLyB3aGljaCBhcmUgZGVmaW5lZCB2aWEgZXhwbGljaXQgaW5zdGFudGlhdGlvbnMgZWxzZXdoZXJlLgorICAvLyBOQjogVGhpcyBzeW50YXggaXMgYSBHTlUgZXh0ZW5zaW9uLgorI2lmIF9HTElCQ1hYX0VYVEVSTl9URU1QTEFURQorICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxsb2NhdG9yPGNoYXI+OworICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxsb2NhdG9yPHdjaGFyX3Q+OworI2VuZGlmCisKKyAgLy8gVW5kZWZpbmUuCisjdW5kZWYgX19nbGliY3h4X2Jhc2VfYWxsb2NhdG9yCisKKyAgLy8gVG8gaW1wbGVtZW50IE9wdGlvbiAzIG9mIERSIDQzMS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jLCBib29sID0gX19pc19lbXB0eShfQWxsb2MpPgorICAgIHN0cnVjdCBfX2FsbG9jX3N3YXAKKyAgICB7IHN0YXRpYyB2b2lkIF9TX2RvX2l0KF9BbGxvYyYsIF9BbGxvYyYpIHsgfSB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKyAgICBzdHJ1Y3QgX19hbGxvY19zd2FwPF9BbGxvYywgZmFsc2U+CisgICAgeworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIF9TX2RvX2l0KF9BbGxvYyYgX19vbmUsIF9BbGxvYyYgX190d28pCisgICAgICB7CisJLy8gUHJlY29uZGl0aW9uOiBzd2FwcGFibGUgYWxsb2NhdG9ycy4KKwlpZiAoX19vbmUgIT0gX190d28pCisJICBzd2FwKF9fb25lLCBfX3R3byk7CisgICAgICB9CisgICAgfTsKKworICAvLyBPcHRpbWl6ZSBmb3Igc3RhdGVsZXNzIGFsbG9jYXRvcnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYywgYm9vbCA9IF9faXNfZW1wdHkoX0FsbG9jKT4KKyAgICBzdHJ1Y3QgX19hbGxvY19uZXEKKyAgICB7CisgICAgICBzdGF0aWMgYm9vbAorICAgICAgX1NfZG9faXQoY29uc3QgX0FsbG9jJiwgY29uc3QgX0FsbG9jJikKKyAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgc3RydWN0IF9fYWxsb2NfbmVxPF9BbGxvYywgZmFsc2U+CisgICAgeworICAgICAgc3RhdGljIGJvb2wKKyAgICAgIF9TX2RvX2l0KGNvbnN0IF9BbGxvYyYgX19vbmUsIGNvbnN0IF9BbGxvYyYgX190d28pCisgICAgICB7IHJldHVybiBfX29uZSAhPSBfX3R3bzsgfQorICAgIH07CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgLy8gQSB2ZXJ5IGJhc2ljIGltcGxlbWVudGF0aW9uIGZvciBub3cuICBJbiBnZW5lcmFsIHdlIGhhdmUgdG8gd2FpdCBmb3IKKyAgIC8vIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlIGluZnJhc3RydWN0dXJlIGRlc2NyaWJlZCBpbiBOMjk4MzogIHdlIHNob3VsZAorICAgLy8gdHJ5IHdoZW4gZWl0aGVyIFQgaGFzIGEgbW92ZSBjb25zdHJ1Y3RvciB3aGljaCBjYW5ub3QgdGhyb3cgb3IgVCBpcworICAgLy8gQ29weUNvbnRydWN0aWJsZS4KKyAgIC8vIE5COiBUaGlzIGNvZGUgZG9lc24ndCBwcm9wZXJseSBiZWxvbmcgaGVyZSwgd2Ugc2hvdWxkIGZpbmQgYSBtb3JlCisgICAvLyBzdWl0ZWQgcGxhY2UgY29tbW9uIHRvIHN0ZDo6dmVjdG9yIGFuZCBzdGQ6OmRlcXVlLgorICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLAorCSAgICBib29sID0gX19oYXNfdHJpdmlhbF9jb3B5KHR5cGVuYW1lIF9UcDo6dmFsdWVfdHlwZSk+CisgICAgIHN0cnVjdCBfX3Nocmlua190b19maXQKKyAgICAgeyBzdGF0aWMgdm9pZCBfU19kb19pdChfVHAmKSB7IH0gfTsKKworICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICBzdHJ1Y3QgX19zaHJpbmtfdG9fZml0PF9UcCwgdHJ1ZT4KKyAgICAgeworICAgICAgIHN0YXRpYyB2b2lkCisgICAgICAgX1NfZG9faXQoX1RwJiBfX3YpCisgICAgICAgeworCSBfX3RyeQorCSAgIHsgX1RwKF9fdikuc3dhcChfX3YpOyB9CisJIF9fY2F0Y2goLi4uKSB7IH0KKyAgICAgICB9CisgICAgIH07CisjZW5kaWYKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9hdG9taWNfMC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2F0b21pY18wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE0NmY3NgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9hdG9taWNfMC5oCkBAIC0wLDAgKzEsNDU3IEBACisvLyAtKi0gQysrIC0qLSBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvYXRvbWljXzAuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0FUT01JQ18wX0gKKyNkZWZpbmUgX0dMSUJDWFhfQVRPTUlDXzBfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworLy8gX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvLyAwID09IF9fYXRvbWljMCA9PSBOZXZlciBsb2NrLWZyZWUKK25hbWVzcGFjZSBfX2F0b21pYzAKK3sKKyAgc3RydWN0IGF0b21pY19mbGFnOworCisgIC8vIEltcGxlbWVudGF0aW9uIHNwZWNpZmljIGRlZmluZXMuCisjZGVmaW5lIF9BVE9NSUNfTE9BRF8oX19hLCBfX3gpCQkJCQkJICAgXAorICAoe19fdHlwZW9mX18gX0FUT01JQ19NRU1CRVJfKiBfX3AgPSAmX0FUT01JQ19NRU1CRVJfOwkgICAJCSAgIFwKKyAgICBfX2F0b21pY19mbGFnX2Jhc2UqIF9fZyA9IF9fYXRvbWljX2ZsYWdfZm9yX2FkZHJlc3MoX19wKTsJICAJICAgXAorICAgIF9fYXRvbWljX2ZsYWdfd2FpdF9leHBsaWNpdChfX2csIF9feCk7CQkJCSAgIFwKKyAgICBfX3R5cGVvZl9fIF9BVE9NSUNfTUVNQkVSXyBfX3IgPSAqX19wOwkJCQkgICBcCisgICAgYXRvbWljX2ZsYWdfY2xlYXJfZXhwbGljaXQoX19nLCBfX3gpOwkJICAgICAgIAkJICAgXAorICAgIF9fcjsgfSkKKworI2RlZmluZSBfQVRPTUlDX1NUT1JFXyhfX2EsIF9fbiwgX194KQkJCQkJICAgXAorICAoe19fdHlwZW9mX18gX0FUT01JQ19NRU1CRVJfKiBfX3AgPSAmX0FUT01JQ19NRU1CRVJfOwkgICAJCSAgIFwKKyAgICBfX3R5cGVvZl9fKF9fbikgX193ID0gKF9fbik7CQkJICAgICAgIAkJICAgXAorICAgIF9fYXRvbWljX2ZsYWdfYmFzZSogX19nID0gX19hdG9taWNfZmxhZ19mb3JfYWRkcmVzcyhfX3ApOwkgIAkgICBcCisgICAgX19hdG9taWNfZmxhZ193YWl0X2V4cGxpY2l0KF9fZywgX194KTsJCQkJICAgXAorICAgICpfX3AgPSBfX3c7CQkJCQkJCQkgICBcCisgICAgYXRvbWljX2ZsYWdfY2xlYXJfZXhwbGljaXQoX19nLCBfX3gpOwkJICAgICAgIAkJICAgXAorICAgIF9fdzsgfSkKKworI2RlZmluZSBfQVRPTUlDX01PRElGWV8oX19hLCBfX28sIF9fbiwgX194KQkJCQkgICBcCisgICh7X190eXBlb2ZfXyBfQVRPTUlDX01FTUJFUl8qIF9fcCA9ICZfQVRPTUlDX01FTUJFUl87CSAgIAkJICAgXAorICAgIF9fdHlwZW9mX18oX19uKSBfX3cgPSAoX19uKTsJCQkgICAgICAgCQkgICBcCisgICAgX19hdG9taWNfZmxhZ19iYXNlKiBfX2cgPSBfX2F0b21pY19mbGFnX2Zvcl9hZGRyZXNzKF9fcCk7CSAgCSAgIFwKKyAgICBfX2F0b21pY19mbGFnX3dhaXRfZXhwbGljaXQoX19nLCBfX3gpOwkJCQkgICBcCisgICAgX190eXBlb2ZfXyBfQVRPTUlDX01FTUJFUl8gX19yID0gKl9fcDsJCQkJICAgXAorICAgICpfX3AgX19vIF9fdzsJCQkJCSAgICAgICAJCSAgIFwKKyAgICBhdG9taWNfZmxhZ19jbGVhcl9leHBsaWNpdChfX2csIF9feCk7CQkgICAgICAgCQkgICBcCisgICAgX19yOyB9KQorCisjZGVmaW5lIF9BVE9NSUNfQ01QRVhDSE5HXyhfX2EsIF9fZSwgX19uLCBfX3gpCQkJCSAgIFwKKyAgKHtfX3R5cGVvZl9fIF9BVE9NSUNfTUVNQkVSXyogX19wID0gJl9BVE9NSUNfTUVNQkVSXzsJICAgCQkgICBcCisgICAgX190eXBlb2ZfXyhfX2UpIF9fcSA9IChfX2UpOwkJCSAgICAgICAJCSAgIFwKKyAgICBfX3R5cGVvZl9fKF9fbikgX193ID0gKF9fbik7CQkJICAgICAgIAkJICAgXAorICAgIGJvb2wgX19yOwkJCQkJCSAgICAgICAJCSAgIFwKKyAgICBfX2F0b21pY19mbGFnX2Jhc2UqIF9fZyA9IF9fYXRvbWljX2ZsYWdfZm9yX2FkZHJlc3MoX19wKTsJICAgCSAgIFwKKyAgICBfX2F0b21pY19mbGFnX3dhaXRfZXhwbGljaXQoX19nLCBfX3gpOwkJCQkgICBcCisgICAgX190eXBlb2ZfXyBfQVRPTUlDX01FTUJFUl8gX190X18gPSAqX19wOwkJICAgICAgIAkJICAgXAorICAgIGlmIChfX3RfXyA9PSAqX19xKSB7ICpfX3AgPSBfX3c7IF9fciA9IHRydWU7IH0JCQkgICBcCisgICAgZWxzZSB7ICpfX3EgPSBfX3RfXzsgX19yID0gZmFsc2U7IH0JCSAgICAgICAJCQkgICBcCisgICAgYXRvbWljX2ZsYWdfY2xlYXJfZXhwbGljaXQoX19nLCBfX3gpOwkJICAgICAgIAkJICAgXAorICAgIF9fcjsgfSkKKworICAvLy8gYXRvbWljX2ZsYWcKKyAgc3RydWN0IGF0b21pY19mbGFnIDogcHVibGljIF9fYXRvbWljX2ZsYWdfYmFzZQorICB7CisgICAgYXRvbWljX2ZsYWcoKSA9IGRlZmF1bHQ7CisgICAgfmF0b21pY19mbGFnKCkgPSBkZWZhdWx0OworICAgIGF0b21pY19mbGFnKGNvbnN0IGF0b21pY19mbGFnJikgPSBkZWxldGU7CisgICAgYXRvbWljX2ZsYWcmIG9wZXJhdG9yPShjb25zdCBhdG9taWNfZmxhZyYpIHZvbGF0aWxlID0gZGVsZXRlOworCisgICAgLy8gQ29udmVyc2lvbiB0byBBVE9NSUNfRkxBR19JTklULgorICAgIGF0b21pY19mbGFnKGJvb2wgX19pKTogX19hdG9taWNfZmxhZ19iYXNlKHsgX19pIH0pIHsgfQorCisgICAgYm9vbAorICAgIHRlc3RfYW5kX3NldChtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpOworCisgICAgdm9pZAorICAgIGNsZWFyKG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7CisgIH07CisKKyAgLy8vIDI5LjQuMiwgYWRkcmVzcyB0eXBlcworICBzdHJ1Y3QgYXRvbWljX2FkZHJlc3MKKyAgeworICBwcml2YXRlOgorICAgIHZvaWQqIF9NX2k7CisKKyAgcHVibGljOgorICAgIGF0b21pY19hZGRyZXNzKCkgPSBkZWZhdWx0OworICAgIH5hdG9taWNfYWRkcmVzcygpID0gZGVmYXVsdDsKKyAgICBhdG9taWNfYWRkcmVzcyhjb25zdCBhdG9taWNfYWRkcmVzcyYpID0gZGVsZXRlOworICAgIGF0b21pY19hZGRyZXNzJiBvcGVyYXRvcj0oY29uc3QgYXRvbWljX2FkZHJlc3MmKSB2b2xhdGlsZSA9IGRlbGV0ZTsKKworICAgIGF0b21pY19hZGRyZXNzKHZvaWQqIF9fdikgeyBfTV9pID0gX192OyB9CisKKyAgICBib29sCisgICAgaXNfbG9ja19mcmVlKCkgY29uc3QKKyAgICB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdm9pZAorICAgIHN0b3JlKHZvaWQqIF9fdiwgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9hc3NlcnQoX19tICE9IG1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKKyAgICAgIF9fZ2xpYmN4eF9hc3NlcnQoX19tICE9IG1lbW9yeV9vcmRlcl9hY3FfcmVsKTsKKyAgICAgIF9fZ2xpYmN4eF9hc3NlcnQoX19tICE9IG1lbW9yeV9vcmRlcl9jb25zdW1lKTsKKyAgICAgIF9BVE9NSUNfU1RPUkVfKHRoaXMsIF9fdiwgX19tKTsKKyAgICB9CisKKyAgICB2b2lkKgorICAgIGxvYWQobWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBjb25zdAorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9hc3NlcnQoX19tICE9IG1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKyAgICAgIF9fZ2xpYmN4eF9hc3NlcnQoX19tICE9IG1lbW9yeV9vcmRlcl9hY3FfcmVsKTsKKyAgICAgIHJldHVybiBfQVRPTUlDX0xPQURfKHRoaXMsIF9fbSk7CisgICAgfQorCisgICAgdm9pZCoKKyAgICBleGNoYW5nZSh2b2lkKiBfX3YsIG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyAgICB7IHJldHVybiBfQVRPTUlDX01PRElGWV8odGhpcywgPSwgX192LCBfX20pOyB9CisKKyAgICBib29sCisgICAgY29tcGFyZV9leGNoYW5nZV93ZWFrKHZvaWQqJiBfX3YxLCB2b2lkKiBfX3YyLCBtZW1vcnlfb3JkZXIgX19tMSwKKwkJCSAgbWVtb3J5X29yZGVyIF9fbTIpCisgICAgeworICAgICAgX19nbGliY3h4X2Fzc2VydChfX20yICE9IG1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKyAgICAgIF9fZ2xpYmN4eF9hc3NlcnQoX19tMiAhPSBtZW1vcnlfb3JkZXJfYWNxX3JlbCk7CisgICAgICBfX2dsaWJjeHhfYXNzZXJ0KF9fbTIgPD0gX19tMSk7CisgICAgICByZXR1cm4gX0FUT01JQ19DTVBFWENITkdfKHRoaXMsICZfX3YxLCBfX3YyLCBfX20xKTsKKyAgICB9CisKKyAgICBib29sCisgICAgY29tcGFyZV9leGNoYW5nZV93ZWFrKHZvaWQqJiBfX3YxLCB2b2lkKiBfX3YyLAorCQkJICBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpCisgICAgeworICAgICAgcmV0dXJuIGNvbXBhcmVfZXhjaGFuZ2Vfd2VhayhfX3YxLCBfX3YyLCBfX20sCisJCQkJICAgX19jYWxjdWxhdGVfbWVtb3J5X29yZGVyKF9fbSkpOworICAgIH0KKworICAgIGJvb2wKKyAgICBjb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyh2b2lkKiYgX192MSwgdm9pZCogX192MiwgbWVtb3J5X29yZGVyIF9fbTEsCisJCQkgICAgbWVtb3J5X29yZGVyIF9fbTIpCisgICAgeworICAgICAgX19nbGliY3h4X2Fzc2VydChfX20yICE9IG1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKyAgICAgIF9fZ2xpYmN4eF9hc3NlcnQoX19tMiAhPSBtZW1vcnlfb3JkZXJfYWNxX3JlbCk7CisgICAgICBfX2dsaWJjeHhfYXNzZXJ0KF9fbTIgPD0gX19tMSk7CisgICAgICByZXR1cm4gX0FUT01JQ19DTVBFWENITkdfKHRoaXMsICZfX3YxLCBfX3YyLCBfX20xKTsKKyAgICB9CisKKyAgICBib29sCisgICAgY29tcGFyZV9leGNoYW5nZV9zdHJvbmcodm9pZComIF9fdjEsIHZvaWQqIF9fdjIsCisJCQkgIG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyAgICB7CisgICAgICByZXR1cm4gY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoX192MSwgX192MiwgX19tLAorCQkJCSAgICAgX19jYWxjdWxhdGVfbWVtb3J5X29yZGVyKF9fbSkpOworICAgIH0KKworICAgIHZvaWQqCisgICAgZmV0Y2hfYWRkKHB0cmRpZmZfdCBfX2QsIG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyAgICB7CisgICAgICB2b2lkKiogX19wID0gJihfTV9pKTsKKyAgICAgIF9fYXRvbWljX2ZsYWdfYmFzZSogX19nID0gX19hdG9taWNfZmxhZ19mb3JfYWRkcmVzcyhfX3ApOworICAgICAgX19hdG9taWNfZmxhZ193YWl0X2V4cGxpY2l0KF9fZywgX19tKTsKKyAgICAgIHZvaWQqIF9fciA9ICpfX3A7CisgICAgICAqX19wID0gKHZvaWQqKSgoY2hhciopKCpfX3ApICsgX19kKTsKKyAgICAgIGF0b21pY19mbGFnX2NsZWFyX2V4cGxpY2l0KF9fZywgX19tKTsKKyAgICAgIHJldHVybiBfX3I7CisgICAgfQorCisgICAgdm9pZCoKKyAgICBmZXRjaF9zdWIocHRyZGlmZl90IF9fZCwgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorICAgIHsKKyAgICAgIHZvaWQqKiBfX3AgPSAmKF9NX2kpOworICAgICAgX19hdG9taWNfZmxhZ19iYXNlKiBfX2cgPSBfX2F0b21pY19mbGFnX2Zvcl9hZGRyZXNzKF9fcCk7CisgICAgICBfX2F0b21pY19mbGFnX3dhaXRfZXhwbGljaXQoX19nLCBfX20pOworICAgICAgdm9pZCogX19yID0gKl9fcDsKKyAgICAgICpfX3AgPSAodm9pZCopKChjaGFyKikoKl9fcCkgLSBfX2QpOworICAgICAgYXRvbWljX2ZsYWdfY2xlYXJfZXhwbGljaXQoX19nLCBfX20pOworICAgICAgcmV0dXJuIF9fcjsKKyAgICB9CisKKyAgICBvcGVyYXRvciB2b2lkKigpIGNvbnN0CisgICAgeyByZXR1cm4gbG9hZCgpOyB9CisKKyAgICB2b2lkKgorICAgIG9wZXJhdG9yPSh2b2lkKiBfX3YpCisgICAgeworICAgICAgc3RvcmUoX192KTsKKyAgICAgIHJldHVybiBfX3Y7CisgICAgfQorCisgICAgdm9pZCoKKyAgICBvcGVyYXRvcis9KHB0cmRpZmZfdCBfX2QpCisgICAgeyByZXR1cm4gZmV0Y2hfYWRkKF9fZCkgKyBfX2Q7IH0KKworICAgIHZvaWQqCisgICAgb3BlcmF0b3ItPShwdHJkaWZmX3QgX19kKQorICAgIHsgcmV0dXJuIGZldGNoX3N1YihfX2QpIC0gX19kOyB9CisgIH07CisKKworICAvLyAyOS4zLjEgYXRvbWljIGludGVncmFsIHR5cGVzCisgIC8vIEZvciBlYWNoIG9mIHRoZSBpbnRlZ3JhbCB0eXBlcywgZGVmaW5lIGF0b21pY19baW50ZWdyYWwgdHlwZV0gc3RydWN0CisgIC8vCisgIC8vIGF0b21pY19ib29sICAgICBib29sCisgIC8vIGF0b21pY19jaGFyICAgICBjaGFyCisgIC8vIGF0b21pY19zY2hhciAgICBzaWduZWQgY2hhcgorICAvLyBhdG9taWNfdWNoYXIgICAgdW5zaWduZWQgY2hhcgorICAvLyBhdG9taWNfc2hvcnQgICAgc2hvcnQKKyAgLy8gYXRvbWljX3VzaG9ydCAgIHVuc2lnbmVkIHNob3J0CisgIC8vIGF0b21pY19pbnQgICAgICBpbnQKKyAgLy8gYXRvbWljX3VpbnQgICAgIHVuc2lnbmVkIGludAorICAvLyBhdG9taWNfbG9uZyAgICAgbG9uZworICAvLyBhdG9taWNfdWxvbmcgICAgdW5zaWduZWQgbG9uZworICAvLyBhdG9taWNfbGxvbmcgICAgbG9uZyBsb25nCisgIC8vIGF0b21pY191bGxvbmcgICB1bnNpZ25lZCBsb25nIGxvbmcKKyAgLy8gYXRvbWljX2NoYXIxNl90IGNoYXIxNl90CisgIC8vIGF0b21pY19jaGFyMzJfdCBjaGFyMzJfdAorICAvLyBhdG9taWNfd2NoYXJfdCAgd2NoYXJfdAorCisgIC8vIEJhc2UgdHlwZS4KKyAgLy8gTkI6IEFzc3VtaW5nIF9JVHAgaXMgYW4gaW50ZWdyYWwgc2NhbGFyIHR5cGUgdGhhdCBpcyAxLCAyLCA0LCBvciA4IGJ5dGVzLAorICAvLyBzaW5jZSB0aGF0IGlzIHdoYXQgR0NDIGJ1aWx0LWluIGZ1bmN0aW9ucyBmb3IgYXRvbWljIG1lbW9yeSBhY2Nlc3Mgd29yayBvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lUcD4KKyAgICBzdHJ1Y3QgX19hdG9taWNfYmFzZQorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBfSVRwIAlfX2ludGVncmFsX3R5cGU7CisKKyAgICAgIF9faW50ZWdyYWxfdHlwZSAJX01faTsKKworICAgIHB1YmxpYzoKKyAgICAgIF9fYXRvbWljX2Jhc2UoKSA9IGRlZmF1bHQ7CisgICAgICB+X19hdG9taWNfYmFzZSgpID0gZGVmYXVsdDsKKyAgICAgIF9fYXRvbWljX2Jhc2UoY29uc3QgX19hdG9taWNfYmFzZSYpID0gZGVsZXRlOworICAgICAgX19hdG9taWNfYmFzZSYgb3BlcmF0b3I9KGNvbnN0IF9fYXRvbWljX2Jhc2UmKSB2b2xhdGlsZSA9IGRlbGV0ZTsKKworICAgICAgLy8gUmVxdWlyZXMgX19pbnRlZ3JhbF90eXBlIGNvbnZlcnRpYmxlIHRvIF9NX2Jhc2UuX01faS4KKyAgICAgIF9fYXRvbWljX2Jhc2UoX19pbnRlZ3JhbF90eXBlIF9faSkgeyBfTV9pID0gX19pOyB9CisKKyAgICAgIG9wZXJhdG9yIF9faW50ZWdyYWxfdHlwZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBsb2FkKCk7IH0KKworICAgICAgX19pbnRlZ3JhbF90eXBlCisgICAgICBvcGVyYXRvcj0oX19pbnRlZ3JhbF90eXBlIF9faSkKKyAgICAgIHsKKwlzdG9yZShfX2kpOworCXJldHVybiBfX2k7CisgICAgICB9CisKKyAgICAgIF9faW50ZWdyYWxfdHlwZQorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7IHJldHVybiBmZXRjaF9hZGQoMSk7IH0KKworICAgICAgX19pbnRlZ3JhbF90eXBlCisgICAgICBvcGVyYXRvci0tKGludCkKKyAgICAgIHsgcmV0dXJuIGZldGNoX3N1YigxKTsgfQorCisgICAgICBfX2ludGVncmFsX3R5cGUKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeyByZXR1cm4gZmV0Y2hfYWRkKDEpICsgMTsgfQorCisgICAgICBfX2ludGVncmFsX3R5cGUKKyAgICAgIG9wZXJhdG9yLS0oKQorICAgICAgeyByZXR1cm4gZmV0Y2hfc3ViKDEpIC0gMTsgfQorCisgICAgICBfX2ludGVncmFsX3R5cGUKKyAgICAgIG9wZXJhdG9yKz0oX19pbnRlZ3JhbF90eXBlIF9faSkKKyAgICAgIHsgcmV0dXJuIGZldGNoX2FkZChfX2kpICsgX19pOyB9CisKKyAgICAgIF9faW50ZWdyYWxfdHlwZQorICAgICAgb3BlcmF0b3ItPShfX2ludGVncmFsX3R5cGUgX19pKQorICAgICAgeyByZXR1cm4gZmV0Y2hfc3ViKF9faSkgLSBfX2k7IH0KKworICAgICAgX19pbnRlZ3JhbF90eXBlCisgICAgICBvcGVyYXRvciY9KF9faW50ZWdyYWxfdHlwZSBfX2kpCisgICAgICB7IHJldHVybiBmZXRjaF9hbmQoX19pKSAmIF9faTsgfQorCisgICAgICBfX2ludGVncmFsX3R5cGUKKyAgICAgIG9wZXJhdG9yfD0oX19pbnRlZ3JhbF90eXBlIF9faSkKKyAgICAgIHsgcmV0dXJuIGZldGNoX29yKF9faSkgfCBfX2k7IH0KKworICAgICAgX19pbnRlZ3JhbF90eXBlCisgICAgICBvcGVyYXRvcl49KF9faW50ZWdyYWxfdHlwZSBfX2kpCisgICAgICB7IHJldHVybiBmZXRjaF94b3IoX19pKSBeIF9faTsgfQorCisgICAgICBib29sCisgICAgICBpc19sb2NrX2ZyZWUoKSBjb25zdAorICAgICAgeyByZXR1cm4gZmFsc2U7IH0KKworICAgICAgdm9pZAorICAgICAgc3RvcmUoX19pbnRlZ3JhbF90eXBlIF9faSwgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorICAgICAgeworCV9fZ2xpYmN4eF9hc3NlcnQoX19tICE9IG1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKKwlfX2dsaWJjeHhfYXNzZXJ0KF9fbSAhPSBtZW1vcnlfb3JkZXJfYWNxX3JlbCk7CisJX19nbGliY3h4X2Fzc2VydChfX20gIT0gbWVtb3J5X29yZGVyX2NvbnN1bWUpOworCV9BVE9NSUNfU1RPUkVfKHRoaXMsIF9faSwgX19tKTsKKyAgICAgIH0KKworICAgICAgX19pbnRlZ3JhbF90eXBlCisgICAgICBsb2FkKG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgY29uc3QKKyAgICAgIHsKKwlfX2dsaWJjeHhfYXNzZXJ0KF9fbSAhPSBtZW1vcnlfb3JkZXJfcmVsZWFzZSk7CisJX19nbGliY3h4X2Fzc2VydChfX20gIT0gbWVtb3J5X29yZGVyX2FjcV9yZWwpOworCXJldHVybiBfQVRPTUlDX0xPQURfKHRoaXMsIF9fbSk7CisgICAgICB9CisKKyAgICAgIF9faW50ZWdyYWxfdHlwZQorICAgICAgZXhjaGFuZ2UoX19pbnRlZ3JhbF90eXBlIF9faSwgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorICAgICAgeyByZXR1cm4gX0FUT01JQ19NT0RJRllfKHRoaXMsID0sIF9faSwgX19tKTsgfQorCisgICAgICBib29sCisgICAgICBjb21wYXJlX2V4Y2hhbmdlX3dlYWsoX19pbnRlZ3JhbF90eXBlJiBfX2kxLCBfX2ludGVncmFsX3R5cGUgX19pMiwKKwkJCSAgICBtZW1vcnlfb3JkZXIgX19tMSwgbWVtb3J5X29yZGVyIF9fbTIpCisgICAgICB7CisJX19nbGliY3h4X2Fzc2VydChfX20yICE9IG1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKwlfX2dsaWJjeHhfYXNzZXJ0KF9fbTIgIT0gbWVtb3J5X29yZGVyX2FjcV9yZWwpOworCV9fZ2xpYmN4eF9hc3NlcnQoX19tMiA8PSBfX20xKTsKKwlyZXR1cm4gX0FUT01JQ19DTVBFWENITkdfKHRoaXMsICZfX2kxLCBfX2kyLCBfX20xKTsKKyAgICAgIH0KKworICAgICAgYm9vbAorICAgICAgY29tcGFyZV9leGNoYW5nZV93ZWFrKF9faW50ZWdyYWxfdHlwZSYgX19pMSwgX19pbnRlZ3JhbF90eXBlIF9faTIsCisJCQkgICAgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorICAgICAgeworCXJldHVybiBjb21wYXJlX2V4Y2hhbmdlX3dlYWsoX19pMSwgX19pMiwgX19tLAorCQkJCSAgICAgX19jYWxjdWxhdGVfbWVtb3J5X29yZGVyKF9fbSkpOworICAgICAgfQorCisgICAgICBib29sCisgICAgICBjb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhfX2ludGVncmFsX3R5cGUmIF9faTEsIF9faW50ZWdyYWxfdHlwZSBfX2kyLAorCQkJICAgICAgbWVtb3J5X29yZGVyIF9fbTEsIG1lbW9yeV9vcmRlciBfX20yKQorICAgICAgeworCV9fZ2xpYmN4eF9hc3NlcnQoX19tMiAhPSBtZW1vcnlfb3JkZXJfcmVsZWFzZSk7CisJX19nbGliY3h4X2Fzc2VydChfX20yICE9IG1lbW9yeV9vcmRlcl9hY3FfcmVsKTsKKwlfX2dsaWJjeHhfYXNzZXJ0KF9fbTIgPD0gX19tMSk7CisJcmV0dXJuIF9BVE9NSUNfQ01QRVhDSE5HXyh0aGlzLCAmX19pMSwgX19pMiwgX19tMSk7CisgICAgICB9CisKKyAgICAgIGJvb2wKKyAgICAgIGNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKF9faW50ZWdyYWxfdHlwZSYgX19pMSwgX19pbnRlZ3JhbF90eXBlIF9faTIsCisJCQkgICAgICBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpCisgICAgICB7CisJcmV0dXJuIGNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKF9faTEsIF9faTIsIF9fbSwKKwkJCQkgICAgICAgX19jYWxjdWxhdGVfbWVtb3J5X29yZGVyKF9fbSkpOworICAgICAgfQorCisgICAgICBfX2ludGVncmFsX3R5cGUKKyAgICAgIGZldGNoX2FkZChfX2ludGVncmFsX3R5cGUgX19pLCBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpCisgICAgICB7IHJldHVybiBfQVRPTUlDX01PRElGWV8odGhpcywgKz0sIF9faSwgX19tKTsgfQorCisgICAgICBfX2ludGVncmFsX3R5cGUKKyAgICAgIGZldGNoX3N1YihfX2ludGVncmFsX3R5cGUgX19pLCBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpCisgICAgICB7IHJldHVybiBfQVRPTUlDX01PRElGWV8odGhpcywgLT0sIF9faSwgX19tKTsgfQorCisgICAgICBfX2ludGVncmFsX3R5cGUKKyAgICAgIGZldGNoX2FuZChfX2ludGVncmFsX3R5cGUgX19pLCBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpCisgICAgICB7IHJldHVybiBfQVRPTUlDX01PRElGWV8odGhpcywgJj0sIF9faSwgX19tKTsgfQorCisgICAgICBfX2ludGVncmFsX3R5cGUKKyAgICAgIGZldGNoX29yKF9faW50ZWdyYWxfdHlwZSBfX2ksIG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyAgICAgIHsgcmV0dXJuIF9BVE9NSUNfTU9ESUZZXyh0aGlzLCB8PSwgX19pLCBfX20pOyB9CisKKyAgICAgIF9faW50ZWdyYWxfdHlwZQorICAgICAgZmV0Y2hfeG9yKF9faW50ZWdyYWxfdHlwZSBfX2ksIG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyAgICAgIHsgcmV0dXJuIF9BVE9NSUNfTU9ESUZZXyh0aGlzLCBePSwgX19pLCBfX20pOyB9CisgICAgfTsKKworCisgIC8vLyBhdG9taWNfYm9vbAorICAvLyBOQjogTm8gb3BlcmF0b3JzIG9yIGZldGNoLW9wZXJhdGlvbnMgZm9yIHRoaXMgdHlwZS4KKyAgc3RydWN0IGF0b21pY19ib29sCisgIHsKKyAgcHJpdmF0ZToKKyAgICBfX2F0b21pY19iYXNlPGJvb2w+CV9NX2Jhc2U7CisKKyAgcHVibGljOgorICAgIGF0b21pY19ib29sKCkgPSBkZWZhdWx0OworICAgIH5hdG9taWNfYm9vbCgpID0gZGVmYXVsdDsKKyAgICBhdG9taWNfYm9vbChjb25zdCBhdG9taWNfYm9vbCYpID0gZGVsZXRlOworICAgIGF0b21pY19ib29sJiBvcGVyYXRvcj0oY29uc3QgYXRvbWljX2Jvb2wmKSB2b2xhdGlsZSA9IGRlbGV0ZTsKKworICAgIGF0b21pY19ib29sKGJvb2wgX19pKSA6IF9NX2Jhc2UoX19pKSB7IH0KKworICAgIGJvb2wKKyAgICBvcGVyYXRvcj0oYm9vbCBfX2kpCisgICAgeyByZXR1cm4gX01fYmFzZS5vcGVyYXRvcj0oX19pKTsgfQorCisgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeyByZXR1cm4gX01fYmFzZS5sb2FkKCk7IH0KKworICAgIGJvb2wKKyAgICBpc19sb2NrX2ZyZWUoKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX2Jhc2UuaXNfbG9ja19mcmVlKCk7IH0KKworICAgIHZvaWQKKyAgICBzdG9yZShib29sIF9faSwgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorICAgIHsgX01fYmFzZS5zdG9yZShfX2ksIF9fbSk7IH0KKworICAgIGJvb2wKKyAgICBsb2FkKG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgY29uc3QKKyAgICB7IHJldHVybiBfTV9iYXNlLmxvYWQoX19tKTsgfQorCisgICAgYm9vbAorICAgIGV4Y2hhbmdlKGJvb2wgX19pLCBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpCisgICAgeyByZXR1cm4gX01fYmFzZS5leGNoYW5nZShfX2ksIF9fbSk7IH0KKworICAgIGJvb2wKKyAgICBjb21wYXJlX2V4Y2hhbmdlX3dlYWsoYm9vbCYgX19pMSwgYm9vbCBfX2kyLCBtZW1vcnlfb3JkZXIgX19tMSwKKwkJCSAgbWVtb3J5X29yZGVyIF9fbTIpCisgICAgeyByZXR1cm4gX01fYmFzZS5jb21wYXJlX2V4Y2hhbmdlX3dlYWsoX19pMSwgX19pMiwgX19tMSwgX19tMik7IH0KKworICAgIGJvb2wKKyAgICBjb21wYXJlX2V4Y2hhbmdlX3dlYWsoYm9vbCYgX19pMSwgYm9vbCBfX2kyLAorCQkJICBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpCisgICAgeyByZXR1cm4gX01fYmFzZS5jb21wYXJlX2V4Y2hhbmdlX3dlYWsoX19pMSwgX19pMiwgX19tKTsgfQorCisgICAgYm9vbAorICAgIGNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKGJvb2wmIF9faTEsIGJvb2wgX19pMiwgbWVtb3J5X29yZGVyIF9fbTEsCisJCQkgICAgbWVtb3J5X29yZGVyIF9fbTIpCisgICAgeyByZXR1cm4gX01fYmFzZS5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhfX2kxLCBfX2kyLCBfX20xLCBfX20yKTsgfQorCisKKyAgICBib29sCisgICAgY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoYm9vbCYgX19pMSwgYm9vbCBfX2kyLAorCQkJICAgIG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyAgICB7IHJldHVybiBfTV9iYXNlLmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKF9faTEsIF9faTIsIF9fbSk7IH0KKyAgfTsKKworI3VuZGVmIF9BVE9NSUNfTE9BRF8KKyN1bmRlZiBfQVRPTUlDX1NUT1JFXworI3VuZGVmIF9BVE9NSUNfTU9ESUZZXworI3VuZGVmIF9BVE9NSUNfQ01QRVhDSE5HXworfSAvLyBuYW1lc3BhY2UgX19hdG9taWMwCisKKy8vIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvYXRvbWljXzIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9hdG9taWNfMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNmMwZDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvYXRvbWljXzIuaApAQCAtMCwwICsxLDQ1MiBAQAorLy8gLSotIEMrKyAtKi0gaGVhZGVyLgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL2F0b21pY18yLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9BVE9NSUNfMl9ICisjZGVmaW5lIF9HTElCQ1hYX0FUT01JQ18yX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKy8vIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKy8vIDIgPT0gX19hdG9taWMyID09IEFsd2F5cyBsb2NrLWZyZWUKKy8vIEFzc3VtZWQ6CisvLyBfR0xJQkNYWF9BVE9NSUNfQlVJTFRJTlNfMQorLy8gX0dMSUJDWFhfQVRPTUlDX0JVSUxUSU5TXzIKKy8vIF9HTElCQ1hYX0FUT01JQ19CVUlMVElOU180CisvLyBfR0xJQkNYWF9BVE9NSUNfQlVJTFRJTlNfOAorbmFtZXNwYWNlIF9fYXRvbWljMgoreworICAvLy8gYXRvbWljX2ZsYWcKKyAgc3RydWN0IGF0b21pY19mbGFnIDogcHVibGljIF9fYXRvbWljX2ZsYWdfYmFzZQorICB7CisgICAgYXRvbWljX2ZsYWcoKSA9IGRlZmF1bHQ7CisgICAgfmF0b21pY19mbGFnKCkgPSBkZWZhdWx0OworICAgIGF0b21pY19mbGFnKGNvbnN0IGF0b21pY19mbGFnJikgPSBkZWxldGU7CisgICAgYXRvbWljX2ZsYWcmIG9wZXJhdG9yPShjb25zdCBhdG9taWNfZmxhZyYpIHZvbGF0aWxlID0gZGVsZXRlOworCisgICAgLy8gQ29udmVyc2lvbiB0byBBVE9NSUNfRkxBR19JTklULgorICAgIGF0b21pY19mbGFnKGJvb2wgX19pKTogX19hdG9taWNfZmxhZ19iYXNlKHsgX19pIH0pIHsgfQorCisgICAgYm9vbAorICAgIHRlc3RfYW5kX3NldChtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpCisgICAgeworICAgICAgLy8gUmVkdW5kYW50IHN5bmNocm9uaXplIGlmIGJ1aWx0LWluIGZvciBsb2NrIGlzIGEgZnVsbCBiYXJyaWVyLgorICAgICAgaWYgKF9fbSAhPSBtZW1vcnlfb3JkZXJfYWNxdWlyZSAmJiBfX20gIT0gbWVtb3J5X29yZGVyX2FjcV9yZWwpCisJX19zeW5jX3N5bmNocm9uaXplKCk7CisgICAgICByZXR1cm4gX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0KCZfTV9pLCAxKTsKKyAgICB9CisKKyAgICB2b2lkCisgICAgY2xlYXIobWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9hc3NlcnQoX19tICE9IG1lbW9yeV9vcmRlcl9jb25zdW1lKTsKKyAgICAgIF9fZ2xpYmN4eF9hc3NlcnQoX19tICE9IG1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKKyAgICAgIF9fZ2xpYmN4eF9hc3NlcnQoX19tICE9IG1lbW9yeV9vcmRlcl9hY3FfcmVsKTsKKworICAgICAgX19zeW5jX2xvY2tfcmVsZWFzZSgmX01faSk7CisgICAgICBpZiAoX19tICE9IG1lbW9yeV9vcmRlcl9hY3F1aXJlICYmIF9fbSAhPSBtZW1vcnlfb3JkZXJfYWNxX3JlbCkKKwlfX3N5bmNfc3luY2hyb25pemUoKTsKKyAgICB9CisgIH07CisKKworICAvLy8gMjkuNC4yLCBhZGRyZXNzIHR5cGVzCisgIHN0cnVjdCBhdG9taWNfYWRkcmVzcworICB7CisgIHByaXZhdGU6CisgICAgdm9pZCogX01faTsKKworICBwdWJsaWM6CisgICAgYXRvbWljX2FkZHJlc3MoKSA9IGRlZmF1bHQ7CisgICAgfmF0b21pY19hZGRyZXNzKCkgPSBkZWZhdWx0OworICAgIGF0b21pY19hZGRyZXNzKGNvbnN0IGF0b21pY19hZGRyZXNzJikgPSBkZWxldGU7CisgICAgYXRvbWljX2FkZHJlc3MmIG9wZXJhdG9yPShjb25zdCBhdG9taWNfYWRkcmVzcyYpIHZvbGF0aWxlID0gZGVsZXRlOworCisgICAgYXRvbWljX2FkZHJlc3Modm9pZCogX192KSB7IF9NX2kgPSBfX3Y7IH0KKworICAgIGJvb2wKKyAgICBpc19sb2NrX2ZyZWUoKSBjb25zdAorICAgIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZvaWQKKyAgICBzdG9yZSh2b2lkKiBfX3YsIG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyAgICB7CisgICAgICBfX2dsaWJjeHhfYXNzZXJ0KF9fbSAhPSBtZW1vcnlfb3JkZXJfYWNxdWlyZSk7CisgICAgICBfX2dsaWJjeHhfYXNzZXJ0KF9fbSAhPSBtZW1vcnlfb3JkZXJfYWNxX3JlbCk7CisgICAgICBfX2dsaWJjeHhfYXNzZXJ0KF9fbSAhPSBtZW1vcnlfb3JkZXJfY29uc3VtZSk7CisKKyAgICAgIGlmIChfX20gPT0gbWVtb3J5X29yZGVyX3JlbGF4ZWQpCisJX01faSA9IF9fdjsKKyAgICAgIGVsc2UKKwl7CisJICAvLyB3cml0ZV9tZW1fYmFycmllcigpOworCSAgX01faSA9IF9fdjsKKwkgIGlmIChfX20gPT0gbWVtb3J5X29yZGVyX3NlcV9jc3QpCisJICAgIF9fc3luY19zeW5jaHJvbml6ZSgpOworCX0KKyAgICB9CisKKyAgICB2b2lkKgorICAgIGxvYWQobWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBjb25zdAorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9hc3NlcnQoX19tICE9IG1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKyAgICAgIF9fZ2xpYmN4eF9hc3NlcnQoX19tICE9IG1lbW9yeV9vcmRlcl9hY3FfcmVsKTsKKworICAgICAgX19zeW5jX3N5bmNocm9uaXplKCk7CisgICAgICB2b2lkKiBfX3JldCA9IF9NX2k7CisgICAgICBfX3N5bmNfc3luY2hyb25pemUoKTsKKyAgICAgIHJldHVybiBfX3JldDsKKyAgICB9CisKKyAgICB2b2lkKgorICAgIGV4Y2hhbmdlKHZvaWQqIF9fdiwgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorICAgIHsKKyAgICAgIC8vIFhYWCBidWlsdC1pbiBhc3N1bWVzIG1lbW9yeV9vcmRlcl9hY3F1aXJlLgorICAgICAgcmV0dXJuIF9fc3luY19sb2NrX3Rlc3RfYW5kX3NldCgmX01faSwgX192KTsKKyAgICB9CisKKyAgICBib29sCisgICAgY29tcGFyZV9leGNoYW5nZV93ZWFrKHZvaWQqJiBfX3YxLCB2b2lkKiBfX3YyLCBtZW1vcnlfb3JkZXIgX19tMSwKKwkJCSAgbWVtb3J5X29yZGVyIF9fbTIpCisgICAgeyByZXR1cm4gY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoX192MSwgX192MiwgX19tMSwgX19tMik7IH0KKworICAgIGJvb2wKKyAgICBjb21wYXJlX2V4Y2hhbmdlX3dlYWsodm9pZComIF9fdjEsIHZvaWQqIF9fdjIsCisJCQkgIG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyAgICB7CisgICAgICByZXR1cm4gY29tcGFyZV9leGNoYW5nZV93ZWFrKF9fdjEsIF9fdjIsIF9fbSwKKwkJCQkgICBfX2NhbGN1bGF0ZV9tZW1vcnlfb3JkZXIoX19tKSk7CisgICAgfQorCisgICAgYm9vbAorICAgIGNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHZvaWQqJiBfX3YxLCB2b2lkKiBfX3YyLCBtZW1vcnlfb3JkZXIgX19tMSwKKwkJCSAgICBtZW1vcnlfb3JkZXIgX19tMikKKyAgICB7CisgICAgICBfX2dsaWJjeHhfYXNzZXJ0KF9fbTIgIT0gbWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAgICAgX19nbGliY3h4X2Fzc2VydChfX20yICE9IG1lbW9yeV9vcmRlcl9hY3FfcmVsKTsKKyAgICAgIF9fZ2xpYmN4eF9hc3NlcnQoX19tMiA8PSBfX20xKTsKKworICAgICAgdm9pZCogX192MW8gPSBfX3YxOworICAgICAgdm9pZCogX192MW4gPSBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXAoJl9NX2ksIF9fdjFvLCBfX3YyKTsKKworICAgICAgLy8gQXNzdW1lIGV4dHJhIHN0b3JlcyAob2Ygc2FtZSB2YWx1ZSkgYWxsb3dlZCBpbiB0cnVlIGNhc2UuCisgICAgICBfX3YxID0gX192MW47CisgICAgICByZXR1cm4gX192MW8gPT0gX192MW47CisgICAgfQorCisgICAgYm9vbAorICAgIGNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHZvaWQqJiBfX3YxLCB2b2lkKiBfX3YyLAorCQkJICBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpCisgICAgeworICAgICAgcmV0dXJuIGNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKF9fdjEsIF9fdjIsIF9fbSwKKwkJCQkgICAgIF9fY2FsY3VsYXRlX21lbW9yeV9vcmRlcihfX20pKTsKKyAgICB9CisKKyAgICB2b2lkKgorICAgIGZldGNoX2FkZChwdHJkaWZmX3QgX19kLCBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpCisgICAgeyByZXR1cm4gX19zeW5jX2ZldGNoX2FuZF9hZGQoJl9NX2ksIF9fZCk7IH0KKworICAgIHZvaWQqCisgICAgZmV0Y2hfc3ViKHB0cmRpZmZfdCBfX2QsIG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyAgICB7IHJldHVybiBfX3N5bmNfZmV0Y2hfYW5kX3N1YigmX01faSwgX19kKTsgfQorCisgICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdAorICAgIHsgcmV0dXJuIGxvYWQoKTsgfQorCisgICAgdm9pZCoKKyAgICBvcGVyYXRvcj0odm9pZCogX192KQorICAgIHsKKyAgICAgIHN0b3JlKF9fdik7CisgICAgICByZXR1cm4gX192OworICAgIH0KKworICAgIHZvaWQqCisgICAgb3BlcmF0b3IrPShwdHJkaWZmX3QgX19kKQorICAgIHsgcmV0dXJuIF9fc3luY19hZGRfYW5kX2ZldGNoKCZfTV9pLCBfX2QpOyB9CisKKyAgICB2b2lkKgorICAgIG9wZXJhdG9yLT0ocHRyZGlmZl90IF9fZCkKKyAgICB7IHJldHVybiBfX3N5bmNfc3ViX2FuZF9mZXRjaCgmX01faSwgX19kKTsgfQorICB9OworCisgIC8vIDI5LjMuMSBhdG9taWMgaW50ZWdyYWwgdHlwZXMKKyAgLy8gRm9yIGVhY2ggb2YgdGhlIGludGVncmFsIHR5cGVzLCBkZWZpbmUgYXRvbWljX1tpbnRlZ3JhbCB0eXBlXSBzdHJ1Y3QKKyAgLy8KKyAgLy8gYXRvbWljX2Jvb2wgICAgIGJvb2wKKyAgLy8gYXRvbWljX2NoYXIgICAgIGNoYXIKKyAgLy8gYXRvbWljX3NjaGFyICAgIHNpZ25lZCBjaGFyCisgIC8vIGF0b21pY191Y2hhciAgICB1bnNpZ25lZCBjaGFyCisgIC8vIGF0b21pY19zaG9ydCAgICBzaG9ydAorICAvLyBhdG9taWNfdXNob3J0ICAgdW5zaWduZWQgc2hvcnQKKyAgLy8gYXRvbWljX2ludCAgICAgIGludAorICAvLyBhdG9taWNfdWludCAgICAgdW5zaWduZWQgaW50CisgIC8vIGF0b21pY19sb25nICAgICBsb25nCisgIC8vIGF0b21pY191bG9uZyAgICB1bnNpZ25lZCBsb25nCisgIC8vIGF0b21pY19sbG9uZyAgICBsb25nIGxvbmcKKyAgLy8gYXRvbWljX3VsbG9uZyAgIHVuc2lnbmVkIGxvbmcgbG9uZworICAvLyBhdG9taWNfY2hhcjE2X3QgY2hhcjE2X3QKKyAgLy8gYXRvbWljX2NoYXIzMl90IGNoYXIzMl90CisgIC8vIGF0b21pY193Y2hhcl90ICB3Y2hhcl90CisKKyAgLy8gQmFzZSB0eXBlLgorICAvLyBOQjogQXNzdW1pbmcgX0lUcCBpcyBhbiBpbnRlZ3JhbCBzY2FsYXIgdHlwZSB0aGF0IGlzIDEsIDIsIDQsIG9yIDggYnl0ZXMsCisgIC8vIHNpbmNlIHRoYXQgaXMgd2hhdCBHQ0MgYnVpbHQtaW4gZnVuY3Rpb25zIGZvciBhdG9taWMgbWVtb3J5IGFjY2VzcyB3b3JrIG9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIHN0cnVjdCBfX2F0b21pY19iYXNlCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIF9JVHAgCV9faW50ZWdyYWxfdHlwZTsKKworICAgICAgX19pbnRlZ3JhbF90eXBlIAlfTV9pOworCisgICAgcHVibGljOgorICAgICAgX19hdG9taWNfYmFzZSgpID0gZGVmYXVsdDsKKyAgICAgIH5fX2F0b21pY19iYXNlKCkgPSBkZWZhdWx0OworICAgICAgX19hdG9taWNfYmFzZShjb25zdCBfX2F0b21pY19iYXNlJikgPSBkZWxldGU7CisgICAgICBfX2F0b21pY19iYXNlJiBvcGVyYXRvcj0oY29uc3QgX19hdG9taWNfYmFzZSYpIHZvbGF0aWxlID0gZGVsZXRlOworCisgICAgICAvLyBSZXF1aXJlcyBfX2ludGVncmFsX3R5cGUgY29udmVydGlibGUgdG8gX01fYmFzZS5fTV9pLgorICAgICAgX19hdG9taWNfYmFzZShfX2ludGVncmFsX3R5cGUgX19pKSB7IF9NX2kgPSBfX2k7IH0KKworICAgICAgb3BlcmF0b3IgX19pbnRlZ3JhbF90eXBlKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGxvYWQoKTsgfQorCisgICAgICBfX2ludGVncmFsX3R5cGUKKyAgICAgIG9wZXJhdG9yPShfX2ludGVncmFsX3R5cGUgX19pKQorICAgICAgeworCXN0b3JlKF9faSk7CisJcmV0dXJuIF9faTsKKyAgICAgIH0KKworICAgICAgX19pbnRlZ3JhbF90eXBlCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsgcmV0dXJuIGZldGNoX2FkZCgxKTsgfQorCisgICAgICBfX2ludGVncmFsX3R5cGUKKyAgICAgIG9wZXJhdG9yLS0oaW50KQorICAgICAgeyByZXR1cm4gZmV0Y2hfc3ViKDEpOyB9CisKKyAgICAgIF9faW50ZWdyYWxfdHlwZQorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7IHJldHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaCgmX01faSwgMSk7IH0KKworICAgICAgX19pbnRlZ3JhbF90eXBlCisgICAgICBvcGVyYXRvci0tKCkKKyAgICAgIHsgcmV0dXJuIF9fc3luY19zdWJfYW5kX2ZldGNoKCZfTV9pLCAxKTsgfQorCisgICAgICBfX2ludGVncmFsX3R5cGUKKyAgICAgIG9wZXJhdG9yKz0oX19pbnRlZ3JhbF90eXBlIF9faSkKKyAgICAgIHsgcmV0dXJuIF9fc3luY19hZGRfYW5kX2ZldGNoKCZfTV9pLCBfX2kpOyB9CisKKyAgICAgIF9faW50ZWdyYWxfdHlwZQorICAgICAgb3BlcmF0b3ItPShfX2ludGVncmFsX3R5cGUgX19pKQorICAgICAgeyByZXR1cm4gX19zeW5jX3N1Yl9hbmRfZmV0Y2goJl9NX2ksIF9faSk7IH0KKworICAgICAgX19pbnRlZ3JhbF90eXBlCisgICAgICBvcGVyYXRvciY9KF9faW50ZWdyYWxfdHlwZSBfX2kpCisgICAgICB7IHJldHVybiBfX3N5bmNfYW5kX2FuZF9mZXRjaCgmX01faSwgX19pKTsgfQorCisgICAgICBfX2ludGVncmFsX3R5cGUKKyAgICAgIG9wZXJhdG9yfD0oX19pbnRlZ3JhbF90eXBlIF9faSkKKyAgICAgIHsgcmV0dXJuIF9fc3luY19vcl9hbmRfZmV0Y2goJl9NX2ksIF9faSk7IH0KKworICAgICAgX19pbnRlZ3JhbF90eXBlCisgICAgICBvcGVyYXRvcl49KF9faW50ZWdyYWxfdHlwZSBfX2kpCisgICAgICB7IHJldHVybiBfX3N5bmNfeG9yX2FuZF9mZXRjaCgmX01faSwgX19pKTsgfQorCisgICAgICBib29sCisgICAgICBpc19sb2NrX2ZyZWUoKSBjb25zdAorICAgICAgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICB2b2lkCisgICAgICBzdG9yZShfX2ludGVncmFsX3R5cGUgX19pLCBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpCisgICAgICB7CisJX19nbGliY3h4X2Fzc2VydChfX20gIT0gbWVtb3J5X29yZGVyX2FjcXVpcmUpOworCV9fZ2xpYmN4eF9hc3NlcnQoX19tICE9IG1lbW9yeV9vcmRlcl9hY3FfcmVsKTsKKwlfX2dsaWJjeHhfYXNzZXJ0KF9fbSAhPSBtZW1vcnlfb3JkZXJfY29uc3VtZSk7CisKKwlpZiAoX19tID09IG1lbW9yeV9vcmRlcl9yZWxheGVkKQorCSAgX01faSA9IF9faTsKKwllbHNlCisJICB7CisJICAgIC8vIHdyaXRlX21lbV9iYXJyaWVyKCk7CisJICAgIF9NX2kgPSBfX2k7CisJICAgIGlmIChfX20gPT0gbWVtb3J5X29yZGVyX3NlcV9jc3QpCisJICAgICAgX19zeW5jX3N5bmNocm9uaXplKCk7CisJICB9CisgICAgICB9CisKKyAgICAgIF9faW50ZWdyYWxfdHlwZQorICAgICAgbG9hZChtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIGNvbnN0IAorICAgICAgeworCV9fZ2xpYmN4eF9hc3NlcnQoX19tICE9IG1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKwlfX2dsaWJjeHhfYXNzZXJ0KF9fbSAhPSBtZW1vcnlfb3JkZXJfYWNxX3JlbCk7CisKKwlfX3N5bmNfc3luY2hyb25pemUoKTsKKwlfX2ludGVncmFsX3R5cGUgX19yZXQgPSBfTV9pOworCV9fc3luY19zeW5jaHJvbml6ZSgpOworCXJldHVybiBfX3JldDsKKyAgICAgIH0KKworICAgICAgX19pbnRlZ3JhbF90eXBlCisgICAgICBleGNoYW5nZShfX2ludGVncmFsX3R5cGUgX19pLCBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpCisgICAgICB7CisJLy8gWFhYIGJ1aWx0LWluIGFzc3VtZXMgbWVtb3J5X29yZGVyX2FjcXVpcmUuCisJcmV0dXJuIF9fc3luY19sb2NrX3Rlc3RfYW5kX3NldCgmX01faSwgX19pKTsKKyAgICAgIH0KKworICAgICAgYm9vbAorICAgICAgY29tcGFyZV9leGNoYW5nZV93ZWFrKF9faW50ZWdyYWxfdHlwZSYgX19pMSwgX19pbnRlZ3JhbF90eXBlIF9faTIsCisJCQkgICAgbWVtb3J5X29yZGVyIF9fbTEsIG1lbW9yeV9vcmRlciBfX20yKQorICAgICAgeyByZXR1cm4gY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoX19pMSwgX19pMiwgX19tMSwgX19tMik7IH0KKworICAgICAgYm9vbAorICAgICAgY29tcGFyZV9leGNoYW5nZV93ZWFrKF9faW50ZWdyYWxfdHlwZSYgX19pMSwgX19pbnRlZ3JhbF90eXBlIF9faTIsCisJCQkgICAgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorICAgICAgeworCXJldHVybiBjb21wYXJlX2V4Y2hhbmdlX3dlYWsoX19pMSwgX19pMiwgX19tLAorCQkJCSAgICAgX19jYWxjdWxhdGVfbWVtb3J5X29yZGVyKF9fbSkpOworICAgICAgfQorCisgICAgICBib29sCisgICAgICBjb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhfX2ludGVncmFsX3R5cGUmIF9faTEsIF9faW50ZWdyYWxfdHlwZSBfX2kyLAorCQkJICAgICAgbWVtb3J5X29yZGVyIF9fbTEsIG1lbW9yeV9vcmRlciBfX20yKSAKKyAgICAgIHsKKwlfX2dsaWJjeHhfYXNzZXJ0KF9fbTIgIT0gbWVtb3J5X29yZGVyX3JlbGVhc2UpOworCV9fZ2xpYmN4eF9hc3NlcnQoX19tMiAhPSBtZW1vcnlfb3JkZXJfYWNxX3JlbCk7CisJX19nbGliY3h4X2Fzc2VydChfX20yIDw9IF9fbTEpOworCisJX19pbnRlZ3JhbF90eXBlIF9faTFvID0gX19pMTsKKwlfX2ludGVncmFsX3R5cGUgX19pMW4gPSBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXAoJl9NX2ksIF9faTFvLCBfX2kyKTsKKworCS8vIEFzc3VtZSBleHRyYSBzdG9yZXMgKG9mIHNhbWUgdmFsdWUpIGFsbG93ZWQgaW4gdHJ1ZSBjYXNlLgorCV9faTEgPSBfX2kxbjsKKwlyZXR1cm4gX19pMW8gPT0gX19pMW47CisgICAgICB9CisKKyAgICAgIGJvb2wKKyAgICAgIGNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKF9faW50ZWdyYWxfdHlwZSYgX19pMSwgX19pbnRlZ3JhbF90eXBlIF9faTIsCisJCQkgICAgICBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpCisgICAgICB7CisJcmV0dXJuIGNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKF9faTEsIF9faTIsIF9fbSwKKwkJCQkgICAgICAgX19jYWxjdWxhdGVfbWVtb3J5X29yZGVyKF9fbSkpOworICAgICAgfQorCisgICAgICBfX2ludGVncmFsX3R5cGUKKyAgICAgIGZldGNoX2FkZChfX2ludGVncmFsX3R5cGUgX19pLAorCQltZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpCisgICAgICB7IHJldHVybiBfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmX01faSwgX19pKTsgfQorCisgICAgICBfX2ludGVncmFsX3R5cGUKKyAgICAgIGZldGNoX3N1YihfX2ludGVncmFsX3R5cGUgX19pLAorCQltZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIAorICAgICAgeyByZXR1cm4gX19zeW5jX2ZldGNoX2FuZF9zdWIoJl9NX2ksIF9faSk7IH0KKworICAgICAgX19pbnRlZ3JhbF90eXBlCisgICAgICBmZXRjaF9hbmQoX19pbnRlZ3JhbF90eXBlIF9faSwKKwkJbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSAKKyAgICAgIHsgcmV0dXJuIF9fc3luY19mZXRjaF9hbmRfYW5kKCZfTV9pLCBfX2kpOyB9CisKKyAgICAgIF9faW50ZWdyYWxfdHlwZQorICAgICAgZmV0Y2hfb3IoX19pbnRlZ3JhbF90eXBlIF9faSwKKwkgICAgICAgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSAKKyAgICAgIHsgcmV0dXJuIF9fc3luY19mZXRjaF9hbmRfb3IoJl9NX2ksIF9faSk7IH0KKworICAgICAgX19pbnRlZ3JhbF90eXBlCisgICAgICBmZXRjaF94b3IoX19pbnRlZ3JhbF90eXBlIF9faSwKKwkJbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorICAgICAgeyByZXR1cm4gX19zeW5jX2ZldGNoX2FuZF94b3IoJl9NX2ksIF9faSk7IH0KKyAgICB9OworCisKKyAgLy8vIGF0b21pY19ib29sCisgIC8vIE5COiBObyBvcGVyYXRvcnMgb3IgZmV0Y2gtb3BlcmF0aW9ucyBmb3IgdGhpcyB0eXBlLgorICBzdHJ1Y3QgYXRvbWljX2Jvb2wKKyAgeworICBwcml2YXRlOgorICAgIF9fYXRvbWljX2Jhc2U8Ym9vbD4JX01fYmFzZTsKKworICBwdWJsaWM6CisgICAgYXRvbWljX2Jvb2woKSA9IGRlZmF1bHQ7CisgICAgfmF0b21pY19ib29sKCkgPSBkZWZhdWx0OworICAgIGF0b21pY19ib29sKGNvbnN0IGF0b21pY19ib29sJikgPSBkZWxldGU7CisgICAgYXRvbWljX2Jvb2wmIG9wZXJhdG9yPShjb25zdCBhdG9taWNfYm9vbCYpIHZvbGF0aWxlID0gZGVsZXRlOworCisgICAgYXRvbWljX2Jvb2woYm9vbCBfX2kpIDogX01fYmFzZShfX2kpIHsgfQorCisgICAgYm9vbAorICAgIG9wZXJhdG9yPShib29sIF9faSkKKyAgICB7IHJldHVybiBfTV9iYXNlLm9wZXJhdG9yPShfX2kpOyB9CisKKyAgICBvcGVyYXRvciBib29sKCkgY29uc3QgCisgICAgeyByZXR1cm4gX01fYmFzZS5sb2FkKCk7IH0KKworICAgIGJvb2wKKyAgICBpc19sb2NrX2ZyZWUoKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX2Jhc2UuaXNfbG9ja19mcmVlKCk7IH0KKworICAgIHZvaWQKKyAgICBzdG9yZShib29sIF9faSwgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorICAgIHsgX01fYmFzZS5zdG9yZShfX2ksIF9fbSk7IH0KKworICAgIGJvb2wKKyAgICBsb2FkKG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgY29uc3QKKyAgICB7IHJldHVybiBfTV9iYXNlLmxvYWQoX19tKTsgfQorCisgICAgYm9vbAorICAgIGV4Y2hhbmdlKGJvb2wgX19pLCBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpCisgICAgeyByZXR1cm4gX01fYmFzZS5leGNoYW5nZShfX2ksIF9fbSk7IH0KKworICAgIGJvb2wKKyAgICBjb21wYXJlX2V4Y2hhbmdlX3dlYWsoYm9vbCYgX19pMSwgYm9vbCBfX2kyLCBtZW1vcnlfb3JkZXIgX19tMSwKKwkJCSAgbWVtb3J5X29yZGVyIF9fbTIpCisgICAgeyByZXR1cm4gX01fYmFzZS5jb21wYXJlX2V4Y2hhbmdlX3dlYWsoX19pMSwgX19pMiwgX19tMSwgX19tMik7IH0KKworICAgIGJvb2wKKyAgICBjb21wYXJlX2V4Y2hhbmdlX3dlYWsoYm9vbCYgX19pMSwgYm9vbCBfX2kyLAorCQkJICBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpCisgICAgeyByZXR1cm4gX01fYmFzZS5jb21wYXJlX2V4Y2hhbmdlX3dlYWsoX19pMSwgX19pMiwgX19tKTsgfQorCisgICAgYm9vbAorICAgIGNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKGJvb2wmIF9faTEsIGJvb2wgX19pMiwgbWVtb3J5X29yZGVyIF9fbTEsCisJCQkgICAgbWVtb3J5X29yZGVyIF9fbTIpCisgICAgeyByZXR1cm4gX01fYmFzZS5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhfX2kxLCBfX2kyLCBfX20xLCBfX20yKTsgfQorCisKKyAgICBib29sCisgICAgY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoYm9vbCYgX19pMSwgYm9vbCBfX2kyLAorCQkJICAgIG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyAgICB7IHJldHVybiBfTV9iYXNlLmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKF9faTEsIF9faTIsIF9fbSk7IH0KKyAgfTsKK30gLy8gbmFtZXNwYWNlIF9fYXRvbWljMgorCisvLyBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2F0b21pY19iYXNlLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvYXRvbWljX2Jhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTQ2OTlmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2F0b21pY19iYXNlLmgKQEAgLTAsMCArMSwyMjQgQEAKKy8vIC0qLSBDKysgLSotIGNvbXBhdGliaWxpdHkgaGVhZGVyLgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvYXRvbWljX2Jhc2UuaAorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPiAvLyBYWFggbmVlZCB0byBkZWZpbmUgYm9vbCB3L28gc3RkYm9vbC5oIGluIHRyMS9jc3RkYm9vbAorCisjaWZuZGVmIF9HTElCQ1hYX0FUT01JQ19CQVNFX0gKKyNkZWZpbmUgX0dMSUJDWFhfQVRPTUlDX0JBU0VfSCAxCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCitfR0xJQkNYWF9CRUdJTl9FWFRFUk5fQworCisgIC8qKgorICAgKiBAZGVmZ3JvdXAgYXRvbWljcyBBdG9taWNzCisgICAqCisgICAqIENvbXBvbmVudHMgZm9yIHBlcmZvcm1pbmcgYXRvbWljIG9wZXJhdGlvbnMuCisgICAqIEB7CisgICAqLworCisgIC8vLyBFbnVtZXJhdGlvbiBmb3IgbWVtb3J5X29yZGVyCisgIHR5cGVkZWYgZW51bSBtZW1vcnlfb3JkZXIKKyAgICB7CisgICAgICBtZW1vcnlfb3JkZXJfcmVsYXhlZCwKKyAgICAgIG1lbW9yeV9vcmRlcl9jb25zdW1lLAorICAgICAgbWVtb3J5X29yZGVyX2FjcXVpcmUsCisgICAgICBtZW1vcnlfb3JkZXJfcmVsZWFzZSwKKyAgICAgIG1lbW9yeV9vcmRlcl9hY3FfcmVsLAorICAgICAgbWVtb3J5X29yZGVyX3NlcV9jc3QKKyAgICB9IG1lbW9yeV9vcmRlcjsKKworICAvLyBCYXNlIGZvciBhdG9taWNfZmxhZy4KKyAgdHlwZWRlZiBzdHJ1Y3QgX19hdG9taWNfZmxhZ19iYXNlCisgIHsKKyAgICBib29sIF9NX2k7CisgIH0gX19hdG9taWNfZmxhZ19iYXNlOworCisjZGVmaW5lIEFUT01JQ19GTEFHX0lOSVQgeyBmYWxzZSB9CisKKyAgLy8vIDI5LjIgTG9jay1mcmVlIFByb3BlcnR5CisjaWYgZGVmaW5lZChfR0xJQkNYWF9BVE9NSUNfQlVJTFRJTlNfMSkgJiYgZGVmaW5lZChfR0xJQkNYWF9BVE9NSUNfQlVJTFRJTlNfMikgXAorICAmJiBkZWZpbmVkKF9HTElCQ1hYX0FUT01JQ19CVUlMVElOU180KSAmJiBkZWZpbmVkKF9HTElCQ1hYX0FUT01JQ19CVUlMVElOU184KQorIyBkZWZpbmUgX0dMSUJDWFhfQVRPTUlDX1BST1BFUlRZIDIKKyMgZGVmaW5lIF9HTElCQ1hYX0FUT01JQ19OQU1FU1BBQ0UgX19hdG9taWMyCisjZWxpZiBkZWZpbmVkKF9HTElCQ1hYX0FUT01JQ19CVUlMVElOU18xKQorIyBkZWZpbmUgX0dMSUJDWFhfQVRPTUlDX1BST1BFUlRZIDEKKyMgZGVmaW5lIF9HTElCQ1hYX0FUT01JQ19OQU1FU1BBQ0UgX19hdG9taWMxCisjZWxzZQorIyBkZWZpbmUgX0dMSUJDWFhfQVRPTUlDX1BST1BFUlRZIDAKKyMgZGVmaW5lIF9HTElCQ1hYX0FUT01JQ19OQU1FU1BBQ0UgX19hdG9taWMwCisjZW5kaWYKKworI2RlZmluZSBBVE9NSUNfSU5URUdSQUxfTE9DS19GUkVFIF9HTElCQ1hYX0FUT01JQ19QUk9QRVJUWQorI2RlZmluZSBBVE9NSUNfQUREUkVTU19MT0NLX0ZSRUUgX0dMSUJDWFhfQVRPTUlDX1BST1BFUlRZCisKKyAgLy8gU3dpdGNoIGF0b21pYyBpbnRlZ3JhbCBiYXNlIHR5cGVzIGJhc2VkIG9uIEMgb3IgQysrLiAgSW4KKyAgLy8gYWRkaXRpb24sIGZvciAiQyIgb25seSBwcm92aWRlIHR5cGUtZ2VuZXJpYyBtYWNyb3MgZm9yIGF0b21pYworICAvLyBvcGVyYXRpb25zLiAoQXMgQysrIGFjY29tcGxpc2hlcyB0aGUgc2FtZSB0aGluZyB3aXRoIHNldHMgb2YKKyAgLy8gb3ZlcmxvYWRlZCBmdW5jdGlvbnMuCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgaW5saW5lIG5hbWVzcGFjZSBfR0xJQkNYWF9BVE9NSUNfTkFNRVNQQUNFIHsgfQorIyBpbmNsdWRlIDxiaXRzL2F0b21pY2Z3ZF9jeHguaD4KKyNlbHNlCisjIGluY2x1ZGUgPGJpdHMvYXRvbWljZndkX2MuaD4KKyNlbmRpZgorCisgIC8vIFR5cGVkZWZzIGZvciBvdGhlciBhdG9taWMgaW50ZWdyYWwgdHlwZXMuCisgIHR5cGVkZWYgYXRvbWljX3NjaGFyIAkJYXRvbWljX2ludF9sZWFzdDhfdDsKKyAgdHlwZWRlZiBhdG9taWNfdWNoYXIgCQlhdG9taWNfdWludF9sZWFzdDhfdDsKKyAgdHlwZWRlZiBhdG9taWNfc2hvcnQgCQlhdG9taWNfaW50X2xlYXN0MTZfdDsKKyAgdHlwZWRlZiBhdG9taWNfdXNob3J0IAlhdG9taWNfdWludF9sZWFzdDE2X3Q7CisgIHR5cGVkZWYgYXRvbWljX2ludCAJCWF0b21pY19pbnRfbGVhc3QzMl90OworICB0eXBlZGVmIGF0b21pY191aW50IAkJYXRvbWljX3VpbnRfbGVhc3QzMl90OworICB0eXBlZGVmIGF0b21pY19sbG9uZyAJCWF0b21pY19pbnRfbGVhc3Q2NF90OworICB0eXBlZGVmIGF0b21pY191bGxvbmcgCWF0b21pY191aW50X2xlYXN0NjRfdDsKKworICB0eXBlZGVmIGF0b21pY19zY2hhciAJCWF0b21pY19pbnRfZmFzdDhfdDsKKyAgdHlwZWRlZiBhdG9taWNfdWNoYXIgCQlhdG9taWNfdWludF9mYXN0OF90OworICB0eXBlZGVmIGF0b21pY19zaG9ydCAJCWF0b21pY19pbnRfZmFzdDE2X3Q7CisgIHR5cGVkZWYgYXRvbWljX3VzaG9ydCAJYXRvbWljX3VpbnRfZmFzdDE2X3Q7CisgIHR5cGVkZWYgYXRvbWljX2ludCAJCWF0b21pY19pbnRfZmFzdDMyX3Q7CisgIHR5cGVkZWYgYXRvbWljX3VpbnQgCQlhdG9taWNfdWludF9mYXN0MzJfdDsKKyAgdHlwZWRlZiBhdG9taWNfbGxvbmcgCQlhdG9taWNfaW50X2Zhc3Q2NF90OworICB0eXBlZGVmIGF0b21pY191bGxvbmcgCWF0b21pY191aW50X2Zhc3Q2NF90OworCisgIHR5cGVkZWYgYXRvbWljX2xvbmcgCQlhdG9taWNfaW50cHRyX3Q7CisgIHR5cGVkZWYgYXRvbWljX3Vsb25nIAkJYXRvbWljX3VpbnRwdHJfdDsKKworICB0eXBlZGVmIGF0b21pY19sb25nIAkJYXRvbWljX3NzaXplX3Q7CisgIHR5cGVkZWYgYXRvbWljX3Vsb25nIAkJYXRvbWljX3NpemVfdDsKKworICB0eXBlZGVmIGF0b21pY19sbG9uZyAJCWF0b21pY19pbnRtYXhfdDsKKyAgdHlwZWRlZiBhdG9taWNfdWxsb25nIAlhdG9taWNfdWludG1heF90OworCisgIHR5cGVkZWYgYXRvbWljX2xvbmcgCQlhdG9taWNfcHRyZGlmZl90OworCisgIC8vIEFjY2Vzc29yIGZ1bmN0aW9ucyBmb3IgYmFzZSBhdG9taWNfZmxhZyB0eXBlLgorICBib29sCisgIGF0b21pY19mbGFnX3Rlc3RfYW5kX3NldF9leHBsaWNpdChfX2F0b21pY19mbGFnX2Jhc2UqLCBtZW1vcnlfb3JkZXIpCisgIF9HTElCQ1hYX05PVEhST1c7CisKKyAgaW5saW5lIGJvb2wKKyAgYXRvbWljX2ZsYWdfdGVzdF9hbmRfc2V0KF9fYXRvbWljX2ZsYWdfYmFzZSogX19hKQorICB7IHJldHVybiBhdG9taWNfZmxhZ190ZXN0X2FuZF9zZXRfZXhwbGljaXQoX19hLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7IH0KKworICB2b2lkCisgIGF0b21pY19mbGFnX2NsZWFyX2V4cGxpY2l0KF9fYXRvbWljX2ZsYWdfYmFzZSosIG1lbW9yeV9vcmRlcikKKyAgX0dMSUJDWFhfTk9USFJPVzsKKworICBpbmxpbmUgdm9pZAorICBhdG9taWNfZmxhZ19jbGVhcihfX2F0b21pY19mbGFnX2Jhc2UqIF9fYSkKKyAgeyBhdG9taWNfZmxhZ19jbGVhcl9leHBsaWNpdChfX2EsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KTsgfQorCisgIHZvaWQKKyAgX19hdG9taWNfZmxhZ193YWl0X2V4cGxpY2l0KF9fYXRvbWljX2ZsYWdfYmFzZSosIG1lbW9yeV9vcmRlcikKKyAgX0dMSUJDWFhfTk9USFJPVzsKKworICBfR0xJQkNYWF9DT05TVCBfX2F0b21pY19mbGFnX2Jhc2UqCisgIF9fYXRvbWljX2ZsYWdfZm9yX2FkZHJlc3MoY29uc3Qgdm9pZCogX196KSBfR0xJQkNYWF9OT1RIUk9XOworCisgIC8vIEltcGxlbWVudGF0aW9uIHNwZWNpZmljIGRlZmluZXMuCisjZGVmaW5lIF9BVE9NSUNfTE9BRF8oX19hLCBfX3gpCQkJCQkJXAorICAoe19fdHlwZW9mX18gX0FUT01JQ19NRU1CRVJfKiBfX3AgPSAmX0FUT01JQ19NRU1CRVJfOwkJCVwKKyAgICBhdG9taWNfZmxhZyogX19nID0gX19hdG9taWNfZmxhZ19mb3JfYWRkcmVzcyhfX3ApOyAJCQlcCisgICAgX19hdG9taWNfZmxhZ193YWl0X2V4cGxpY2l0KF9fZywgX194KTsJCQkJXAorICAgIF9fdHlwZW9mX18gX0FUT01JQ19NRU1CRVJfIF9fciA9ICpfX3A7CQkJCVwKKyAgICBhdG9taWNfZmxhZ19jbGVhcl9leHBsaWNpdChfX2csIF9feCk7CQkgICAgICAgCQlcCisgICAgX19yOyB9KQorCisjZGVmaW5lIF9BVE9NSUNfU1RPUkVfKF9fYSwgX19tLCBfX3gpCQkJCQlcCisgICh7X190eXBlb2ZfXyBfQVRPTUlDX01FTUJFUl8qIF9fcCA9ICZfQVRPTUlDX01FTUJFUl87CQkJXAorICAgIF9fdHlwZW9mX18oX19tKSBfX3YgPSAoX19tKTsJCQkgICAgICAgCQlcCisgICAgYXRvbWljX2ZsYWcqIF9fZyA9IF9fYXRvbWljX2ZsYWdfZm9yX2FkZHJlc3MoX19wKTsgCQkJXAorICAgIF9fYXRvbWljX2ZsYWdfd2FpdF9leHBsaWNpdChfX2csIF9feCk7CQkJCVwKKyAgICAqX19wID0gX192OwkJCQkJCQkJXAorICAgIGF0b21pY19mbGFnX2NsZWFyX2V4cGxpY2l0KF9fZywgX194KTsJCSAgICAgICAJCVwKKyAgICBfX3Y7IH0pCisKKyNkZWZpbmUgX0FUT01JQ19NT0RJRllfKF9fYSwgX19vLCBfX20sIF9feCkJCQkJXAorICAoe19fdHlwZW9mX18gX0FUT01JQ19NRU1CRVJfKiBfX3AgPSAmX0FUT01JQ19NRU1CRVJfOwkJCVwKKyAgICBfX3R5cGVvZl9fKF9fbSkgX192ID0gKF9fbSk7CQkJICAgICAgIAkJXAorICAgIGF0b21pY19mbGFnKiBfX2cgPSBfX2F0b21pY19mbGFnX2Zvcl9hZGRyZXNzKF9fcCk7IAkJCVwKKyAgICBfX2F0b21pY19mbGFnX3dhaXRfZXhwbGljaXQoX19nLCBfX3gpOwkJCQlcCisgICAgX190eXBlb2ZfXyBfQVRPTUlDX01FTUJFUl8gX19yID0gKl9fcDsJCQkJXAorICAgICpfX3AgX19vIF9fdjsJCQkJCSAgICAgICAJCVwKKyAgICBhdG9taWNfZmxhZ19jbGVhcl9leHBsaWNpdChfX2csIF9feCk7CQkgICAgICAgCQlcCisgICAgX19yOyB9KQorCisjZGVmaW5lIF9BVE9NSUNfQ01QRVhDSE5HXyhfX2EsIF9fZSwgX19tLCBfX3gpCQkJCVwKKyAgKHtfX3R5cGVvZl9fIF9BVE9NSUNfTUVNQkVSXyogX19wID0gJl9BVE9NSUNfTUVNQkVSXzsJCQlcCisgICAgX190eXBlb2ZfXyhfX2UpIF9fcSA9IChfX2UpOwkJCSAgICAgICAJCVwKKyAgICBfX3R5cGVvZl9fKF9fbSkgX192ID0gKF9fbSk7CQkJICAgICAgIAkJXAorICAgIGJvb2wgX19yOwkJCQkJCSAgICAgICAJCVwKKyAgICBhdG9taWNfZmxhZyogX19nID0gX19hdG9taWNfZmxhZ19mb3JfYWRkcmVzcyhfX3ApOyAJCQlcCisgICAgX19hdG9taWNfZmxhZ193YWl0X2V4cGxpY2l0KF9fZywgX194KTsJCQkJXAorICAgIF9fdHlwZW9mX18gX0FUT01JQ19NRU1CRVJfIF9fdF9fID0gKl9fcDsJCSAgICAgICAJCVwKKyAgICBpZiAoX190X18gPT0gKl9fcSkgeyAqX19wID0gX192OyBfX3IgPSB0cnVlOyB9CQkJXAorICAgIGVsc2UgeyAqX19xID0gX190X187IF9fciA9IGZhbHNlOyB9CQkgICAgICAgCQkJXAorICAgIGF0b21pY19mbGFnX2NsZWFyX2V4cGxpY2l0KF9fZywgX194KTsJCSAgICAgICAJCVwKKyAgICBfX3I7IH0pCisKKyAgLy8gQH0gZ3JvdXAgYXRvbWljcworCitfR0xJQkNYWF9FTkRfRVhURVJOX0MKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworLy8gSW5qZWN0IGludG8gZ2xvYmFsIG5hbWVzcGFjZS4KKyNpZmRlZiBfX2NwbHVzcGx1cworCisjaW5jbHVkZSA8YXRvbWljPgorCit1c2luZyBzdGQ6Om1lbW9yeV9vcmRlcjsKK3VzaW5nIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQ7Cit1c2luZyBzdGQ6Om1lbW9yeV9vcmRlcl9jb25zdW1lOwordXNpbmcgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZTsKK3VzaW5nIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2U7Cit1c2luZyBzdGQ6Om1lbW9yeV9vcmRlcl9hY3FfcmVsOwordXNpbmcgc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ZsYWc7Cit1c2luZyBzdGQ6OmF0b21pY19ib29sOwordXNpbmcgc3RkOjphdG9taWNfY2hhcjsKK3VzaW5nIHN0ZDo6YXRvbWljX3NjaGFyOwordXNpbmcgc3RkOjphdG9taWNfdWNoYXI7Cit1c2luZyBzdGQ6OmF0b21pY19zaG9ydDsKK3VzaW5nIHN0ZDo6YXRvbWljX3VzaG9ydDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ludDsKK3VzaW5nIHN0ZDo6YXRvbWljX3VpbnQ7Cit1c2luZyBzdGQ6OmF0b21pY19sb25nOwordXNpbmcgc3RkOjphdG9taWNfdWxvbmc7Cit1c2luZyBzdGQ6OmF0b21pY19sbG9uZzsKK3VzaW5nIHN0ZDo6YXRvbWljX3VsbG9uZzsKK3VzaW5nIHN0ZDo6YXRvbWljX3djaGFyX3Q7Cit1c2luZyBzdGQ6OmF0b21pY19jaGFyMTZfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2NoYXIzMl90OwordXNpbmcgc3RkOjphdG9taWNfYWRkcmVzczsKK3VzaW5nIHN0ZDo6YXRvbWljOworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2F0b21pY2Z3ZF9jLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvYXRvbWljZndkX2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODQxODQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2F0b21pY2Z3ZF9jLmgKQEAgLTAsMCArMSwxNzQgQEAKKy8vIC0qLSBDKysgLSotIGhlYWRlci4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy9hdG9taWNmd2RfYy5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKy8vICJDIiBvbmx5IGJpdHMuCisKKyNkZWZpbmUgX0FUT01JQ19NRU1CRVJfICgoX19hKS0+X01faSkKKworICAvLyBQT0QgYmFzZSBjbGFzc2VzIGZvciBhdG9taWMgaW50Z3JhbCB0eXBlcy4KKyAgc3RydWN0IF9fYXRvbWljX2Jvb2xfYmFzZQorICB7CisgICAgYm9vbCBfTV9pOworICB9OworCisgIHN0cnVjdCBfX2F0b21pY19jaGFyX2Jhc2UKKyAgeworICAgIGNoYXIgX01faTsKKyAgfTsKKworICBzdHJ1Y3QgX19hdG9taWNfc2NoYXJfYmFzZQorICB7CisgICAgc2lnbmVkIGNoYXIgX01faTsKKyAgfTsKKworICBzdHJ1Y3QgX19hdG9taWNfdWNoYXJfYmFzZQorICB7CisgICAgdW5zaWduZWQgY2hhciBfTV9pOworICB9OworCisgIHN0cnVjdCBfX2F0b21pY19zaG9ydF9iYXNlCisgIHsKKyAgICBzaG9ydCBfTV9pOworICB9OworCisgIHN0cnVjdCBfX2F0b21pY191c2hvcnRfYmFzZQorICB7CisgICAgdW5zaWduZWQgc2hvcnQgX01faTsKKyAgfTsKKworICBzdHJ1Y3QgX19hdG9taWNfaW50X2Jhc2UKKyAgeworICAgIGludCBfTV9pOworICB9OworCisgIHN0cnVjdCBfX2F0b21pY191aW50X2Jhc2UKKyAgeworICAgIHVuc2lnbmVkIGludCBfTV9pOworICB9OworCisgIHN0cnVjdCBfX2F0b21pY19sb25nX2Jhc2UKKyAgeworICAgIGxvbmcgX01faTsKKyAgfTsKKworICBzdHJ1Y3QgX19hdG9taWNfdWxvbmdfYmFzZQorICB7CisgICAgdW5zaWduZWQgbG9uZyBfTV9pOworICB9OworCisgIHN0cnVjdCBfX2F0b21pY19sbG9uZ19iYXNlCisgIHsKKyAgICBsb25nIGxvbmcgX01faTsKKyAgfTsKKworICBzdHJ1Y3QgX19hdG9taWNfdWxsb25nX2Jhc2UKKyAgeworICAgIHVuc2lnbmVkIGxvbmcgbG9uZwlfTV9pOworICB9OworCisgIHN0cnVjdCBfX2F0b21pY193Y2hhcl90X2Jhc2UKKyAgeworICAgIHdjaGFyX3QgX01faTsKKyAgfTsKKworICB0eXBlZGVmIHN0cnVjdCBfX2F0b21pY19mbGFnX2Jhc2UgCQlhdG9taWNfZmxhZzsKKyAgdHlwZWRlZiBzdHJ1Y3QgX19hdG9taWNfYWRkcmVzc19iYXNlIAkJYXRvbWljX2FkZHJlc3M7CisgIHR5cGVkZWYgc3RydWN0IF9fYXRvbWljX2Jvb2xfYmFzZQkJYXRvbWljX2Jvb2w7CisgIHR5cGVkZWYgc3RydWN0IF9fYXRvbWljX2NoYXJfYmFzZSAJCWF0b21pY19jaGFyOworICB0eXBlZGVmIHN0cnVjdCBfX2F0b21pY19zY2hhcl9iYXNlIAkJYXRvbWljX3NjaGFyOworICB0eXBlZGVmIHN0cnVjdCBfX2F0b21pY191Y2hhcl9iYXNlIAkJYXRvbWljX3VjaGFyOworICB0eXBlZGVmIHN0cnVjdCBfX2F0b21pY19zaG9ydF9iYXNlIAkJYXRvbWljX3Nob3J0OworICB0eXBlZGVmIHN0cnVjdCBfX2F0b21pY191c2hvcnRfYmFzZSAJCWF0b21pY191c2hvcnQ7CisgIHR5cGVkZWYgc3RydWN0IF9fYXRvbWljX2ludF9iYXNlIAkJYXRvbWljX2ludDsKKyAgdHlwZWRlZiBzdHJ1Y3QgX19hdG9taWNfdWludF9iYXNlIAkJYXRvbWljX3VpbnQ7CisgIHR5cGVkZWYgc3RydWN0IF9fYXRvbWljX2xvbmdfYmFzZSAJCWF0b21pY19sb25nOworICB0eXBlZGVmIHN0cnVjdCBfX2F0b21pY191bG9uZ19iYXNlIAkJYXRvbWljX3Vsb25nOworICB0eXBlZGVmIHN0cnVjdCBfX2F0b21pY19sbG9uZ19iYXNlIAkJYXRvbWljX2xsb25nOworICB0eXBlZGVmIHN0cnVjdCBfX2F0b21pY191bGxvbmdfYmFzZSAJCWF0b21pY191bGxvbmc7CisgIHR5cGVkZWYgc3RydWN0IF9fYXRvbWljX3djaGFyX3RfYmFzZSAJCWF0b21pY193Y2hhcl90OworICB0eXBlZGVmIHN0cnVjdCBfX2F0b21pY19zaG9ydF9iYXNlIAkJYXRvbWljX2NoYXIxNl90OworICB0eXBlZGVmIHN0cnVjdCBfX2F0b21pY19pbnRfYmFzZSAJCWF0b21pY19jaGFyMzJfdDsKKworI2RlZmluZSBhdG9taWNfaXNfbG9ja19mcmVlKF9fYSkJCQkJCVwKKyAgZmFsc2UKKworI2RlZmluZSBhdG9taWNfbG9hZF9leHBsaWNpdChfX2EsIF9feCkJCQkJCVwKKyAgX0FUT01JQ19MT0FEXyhfX2EsIF9feCkKKworI2RlZmluZSBhdG9taWNfbG9hZChfX2EpCQkJCQkJXAorICBhdG9taWNfbG9hZF9leHBsaWNpdChfX2EsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorCisjZGVmaW5lIGF0b21pY19zdG9yZV9leHBsaWNpdChfX2EsIF9fbSwgX194KQkJCQlcCisgIF9BVE9NSUNfU1RPUkVfKF9fYSwgX19tLCBfX3gpCisKKyNkZWZpbmUgYXRvbWljX3N0b3JlKF9fYSwgX19tKQkJCQkJCVwKKyAgYXRvbWljX3N0b3JlX2V4cGxpY2l0KF9fYSwgX19tLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKworI2RlZmluZSBhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQoX19hLCBfX20sIF9feCkJCQkJXAorICBfQVRPTUlDX01PRElGWV8oX19hLCA9LCBfX20sIF9feCkKKworI2RlZmluZSBhdG9taWNfZXhjaGFuZ2UoX19hLCBfX20pCQkJCQlcCisgIGF0b21pY19leGNoYW5nZV9leHBsaWNpdChfX2EsIF9fbSwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisKKyNkZWZpbmUgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfZXhwbGljaXQoX19hLCBfX2UsIF9fbSwgX194LCBfX3kpCVwKKyAgX0FUT01JQ19DTVBFWENITkdfKF9fYSwgX19lLCBfX20sIF9feCkKKworI2RlZmluZSBhdG9taWNfY29tcGFyZV9leGNoYW5nZShfX2EsIF9fZSwgX19tKQkJCQlcCisgIF9BVE9NSUNfQ01QRVhDSE5HXyhfX2EsIF9fZSwgX19tLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKworI2RlZmluZSBhdG9taWNfZmV0Y2hfYWRkX2V4cGxpY2l0KF9fYSwgX19tLCBfX3gpCQkJXAorICBfQVRPTUlDX01PRElGWV8oX19hLCArPSwgX19tLCBfX3gpCisKKyNkZWZpbmUgYXRvbWljX2ZldGNoX2FkZChfX2EsIF9fbSkJCQkJCVwKKyAgYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdChfX2EsIF9fbSwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisKKyNkZWZpbmUgYXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdChfX2EsIF9fbSwgX194KQkJCVwKKyAgX0FUT01JQ19NT0RJRllfKF9fYSwgLT0sIF9fbSwgX194KQorCisjZGVmaW5lIGF0b21pY19mZXRjaF9zdWIoX19hLCBfX20pCQkJCQlcCisgIGF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQoX19hLCBfX20sIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorCisjZGVmaW5lIGF0b21pY19mZXRjaF9hbmRfZXhwbGljaXQoX19hLCBfX20sIF9feCkJCQlcCisgIF9BVE9NSUNfTU9ESUZZXyhfX2EsICY9LCBfX20sIF9feCkKKworI2RlZmluZSBhdG9taWNfZmV0Y2hfYW5kKF9fYSwgX19tKQkJCQkJXAorICBhdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0KF9fYSwgX19tLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKworI2RlZmluZSBhdG9taWNfZmV0Y2hfb3JfZXhwbGljaXQoX19hLCBfX20sIF9feCkgCQkJXAorICBfQVRPTUlDX01PRElGWV8oX19hLCB8PSwgX19tLCBfX3gpCisKKyNkZWZpbmUgYXRvbWljX2ZldGNoX29yKF9fYSwgX19tKQkJCQkJXAorICBhdG9taWNfZmV0Y2hfb3JfZXhwbGljaXQoX19hLCBfX20sIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorCisjZGVmaW5lIGF0b21pY19mZXRjaF94b3JfZXhwbGljaXQoX19hLCBfX20sIF9feCkJCQlcCisgIF9BVE9NSUNfTU9ESUZZXyhfX2EsIF49LCBfX20sIF9feCkKKworI2RlZmluZSBhdG9taWNfZmV0Y2hfeG9yKF9fYSwgX19tKQkJCQkJXAorICBhdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0KF9fYSwgX19tLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9hdG9taWNmd2RfY3h4LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvYXRvbWljZndkX2N4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZjI1ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvYXRvbWljZndkX2N4eC5oCkBAIC0wLDAgKzEsMTE3IEBACisvLyAtKi0gQysrIC0qLSBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvYXRvbWljZndkX2N4eC5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKy8vICJDKysiIG9ubHkgYml0cy4KKworI2RlZmluZSBfQVRPTUlDX01FTUJFUl8gX01faQorCitfR0xJQkNYWF9FTkRfRVhURVJOX0MKKworICBuYW1lc3BhY2UgX19hdG9taWMwCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHA+CisgICAgICBzdHJ1Y3QgX19hdG9taWNfYmFzZTsKKworICAgIHN0cnVjdCBhdG9taWNfZmxhZzsKKyAgICBzdHJ1Y3QgYXRvbWljX2FkZHJlc3M7CisgICAgc3RydWN0IGF0b21pY19ib29sOworICB9IAorCisgIG5hbWVzcGFjZSBfX2F0b21pYzIKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUcD4KKyAgICAgIHN0cnVjdCBfX2F0b21pY19iYXNlOworCisgICAgc3RydWN0IGF0b21pY19mbGFnOworICAgIHN0cnVjdCBhdG9taWNfYWRkcmVzczsKKyAgICBzdHJ1Y3QgYXRvbWljX2Jvb2w7CisgIH0gCisKKyAgbmFtZXNwYWNlIF9fYXRvbWljMQorICB7CisgICAgdXNpbmcgX19hdG9taWMyOjphdG9taWNfZmxhZzsKKyAgICB1c2luZyBfX2F0b21pYzI6OmF0b21pY19ib29sOworICAgIHVzaW5nIF9fYXRvbWljMDo6YXRvbWljX2FkZHJlc3M7CisgICAgdXNpbmcgX19hdG9taWMwOjpfX2F0b21pY19iYXNlOworICB9IAorCisgIC8qKgorICAgKiBAYWRkdG9ncm91cCBhdG9taWNzCisgICAqIEB7CisgICAqLworCisgIC8vLyBhdG9taWNfY2hhcgorICB0eXBlZGVmIF9fYXRvbWljX2Jhc2U8Y2hhcj4gIAkgICAgICAgCQlhdG9taWNfY2hhcjsKKworICAvLy8gYXRvbWljX3NjaGFyCisgIHR5cGVkZWYgX19hdG9taWNfYmFzZTxzaWduZWQgY2hhcj4gICAgICAgICAJYXRvbWljX3NjaGFyOworCisgIC8vLyBhdG9taWNfdWNoYXIKKyAgdHlwZWRlZiBfX2F0b21pY19iYXNlPHVuc2lnbmVkIGNoYXI+ICAJYXRvbWljX3VjaGFyOworCisgIC8vLyBhdG9taWNfc2hvcnQKKyAgdHlwZWRlZiBfX2F0b21pY19iYXNlPHNob3J0PiAgCQlhdG9taWNfc2hvcnQ7CisKKyAgLy8vIGF0b21pY191c2hvcnQKKyAgdHlwZWRlZiBfX2F0b21pY19iYXNlPHVuc2lnbmVkIHNob3J0PiAgCWF0b21pY191c2hvcnQ7CisKKyAgLy8vIGF0b21pY19pbnQKKyAgdHlwZWRlZiBfX2F0b21pY19iYXNlPGludD4gIAkgICAgICAgCQlhdG9taWNfaW50OworCisgIC8vLyBhdG9taWNfdWludAorICB0eXBlZGVmIF9fYXRvbWljX2Jhc2U8dW5zaWduZWQgaW50PiAgICAgICAgCWF0b21pY191aW50OworCisgIC8vLyBhdG9taWNfbG9uZworICB0eXBlZGVmIF9fYXRvbWljX2Jhc2U8bG9uZz4gIAkgICAgICAgCQlhdG9taWNfbG9uZzsKKworICAvLy8gYXRvbWljX3Vsb25nCisgIHR5cGVkZWYgX19hdG9taWNfYmFzZTx1bnNpZ25lZCBsb25nPiAgCWF0b21pY191bG9uZzsKKworICAvLy8gYXRvbWljX2xsb25nCisgIHR5cGVkZWYgX19hdG9taWNfYmFzZTxsb25nIGxvbmc+ICAJCWF0b21pY19sbG9uZzsKKworICAvLy8gYXRvbWljX3VsbG9uZworICB0eXBlZGVmIF9fYXRvbWljX2Jhc2U8dW5zaWduZWQgbG9uZyBsb25nPiAJYXRvbWljX3VsbG9uZzsKKworICAvLy8gYXRvbWljX3djaGFyX3QKKyAgdHlwZWRlZiBfX2F0b21pY19iYXNlPHdjaGFyX3Q+ICAJCWF0b21pY193Y2hhcl90OworCisgIC8vLyBhdG9taWNfY2hhcjE2X3QKKyAgdHlwZWRlZiBfX2F0b21pY19iYXNlPGNoYXIxNl90PiAgCQlhdG9taWNfY2hhcjE2X3Q7CisKKyAgLy8vIGF0b21pY19jaGFyMzJfdAorICB0eXBlZGVmIF9fYXRvbWljX2Jhc2U8Y2hhcjMyX3Q+ICAJCWF0b21pY19jaGFyMzJfdDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGF0b21pYzsKKworICAvLyBAfSBncm91cCBhdG9taWNzCisKK19HTElCQ1hYX0JFR0lOX0VYVEVSTl9DCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvYmFzaWNfaW9zLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvYmFzaWNfaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEwNjMxNgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9iYXNpY19pb3MuaApAQCAtMCwwICsxLDQ3NCBAQAorLy8gSW9zdHJlYW1zIGJhc2UgY2xhc3NlcyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsCisvLyAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYmFzaWNfaW9zLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfQkFTSUNfSU9TX0gKKyNkZWZpbmUgX0JBU0lDX0lPU19IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9sb2NhbGVmd2QuaD4KKyNpbmNsdWRlIDxiaXRzL2xvY2FsZV9jbGFzc2VzLmg+CisjaW5jbHVkZSA8Yml0cy9sb2NhbGVfZmFjZXRzLmg+CisjaW5jbHVkZSA8Yml0cy9zdHJlYW1idWZfaXRlcmF0b3IuaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CisgICAgaW5saW5lIGNvbnN0IF9GYWNldCYKKyAgICBfX2NoZWNrX2ZhY2V0KGNvbnN0IF9GYWNldCogX19mKQorICAgIHsKKyAgICAgIGlmICghX19mKQorCV9fdGhyb3dfYmFkX2Nhc3QoKTsKKyAgICAgIHJldHVybiAqX19mOworICAgIH0KKworICAvLyAyNy40LjUgIFRlbXBsYXRlIGNsYXNzIGJhc2ljX2lvcworICAvKioKKyAgICogIEBicmllZiAgVmlydHVhbCBiYXNlIGNsYXNzIGZvciBhbGwgc3RyZWFtIGNsYXNzZXMuCisgICAqICBAaW5ncm91cCBpbworICAgKgorICAgKiAgTW9zdCBvZiB0aGUgbWVtYmVyIGZ1bmN0aW9ucyBjYWxsZWQgZGlzcGF0Y2hlZCBvbiBzdHJlYW0gb2JqZWN0cworICAgKiAgKGUuZy4sIEBjIHN0ZDo6Y291dC5mb28oYmFyKTspIGFyZSBjb25zb2xpZGF0ZWQgaW4gdGhpcyBjbGFzcy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGNsYXNzIGJhc2ljX2lvcyA6IHB1YmxpYyBpb3NfYmFzZQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvL0B7CisgICAgICAvKioKKyAgICAgICAqICBUaGVzZSBhcmUgc3RhbmRhcmQgdHlwZXMuICBUaGV5IHBlcm1pdCBhIHN0YW5kYXJkaXplZCB3YXkgb2YKKyAgICAgICAqICByZWZlcnJpbmcgdG8gbmFtZXMgb2YgKG9yIG5hbWVzIGRlcGVuZGFudCBvbikgdGhlIHRlbXBsYXRlCisgICAgICAgKiAgcGFyYW1ldGVycywgd2hpY2ggYXJlIHNwZWNpZmljIHRvIHRoZSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICovCisgICAgICB0eXBlZGVmIF9DaGFyVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgICAgICAgICAgICAgaW50X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlICAgICAgICAgICAgIHBvc190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSAgICAgICAgICAgICBvZmZfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RyYWl0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU7CisgICAgICAvL0B9CisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIFRoZXNlIGFyZSBub24tc3RhbmRhcmQgdHlwZXMuCisgICAgICAqLworICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlX3R5cGU7CisgICAgICB0eXBlZGVmIG51bV9wdXQ8X0NoYXJULCBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gPgorCQkJCQkJICAgICBfX251bV9wdXRfdHlwZTsKKyAgICAgIHR5cGVkZWYgbnVtX2dldDxfQ2hhclQsIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiA+CisJCQkJCQkgICAgIF9fbnVtX2dldF90eXBlOworICAgICAgLy9AfQorCisgICAgICAvLyBEYXRhIG1lbWJlcnM6CisgICAgcHJvdGVjdGVkOgorICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiAgICAgICAgICAgICAgICBfTV90aWU7CisgICAgICBtdXRhYmxlIGNoYXJfdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2ZpbGw7CisgICAgICBtdXRhYmxlIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2ZpbGxfaW5pdDsKKyAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiAgICAgICAgICAgICAgX01fc3RyZWFtYnVmOworCisgICAgICAvLyBDYWNoZWQgdXNlX2ZhY2V0PGN0eXBlPiwgd2hpY2ggaXMgYmFzZWQgb24gdGhlIGN1cnJlbnQgbG9jYWxlIGluZm8uCisgICAgICBjb25zdCBfX2N0eXBlX3R5cGUqICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2N0eXBlOworICAgICAgLy8gRm9yIG9zdHJlYW0uCisgICAgICBjb25zdCBfX251bV9wdXRfdHlwZSogICAgICAgICAgICAgICAgICAgICAgICAgIF9NX251bV9wdXQ7CisgICAgICAvLyBGb3IgaXN0cmVhbS4KKyAgICAgIGNvbnN0IF9fbnVtX2dldF90eXBlKiAgICAgICAgICAgICAgICAgICAgICAgICAgX01fbnVtX2dldDsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgVGhlIHF1aWNrLWFuZC1lYXN5IHN0YXR1cyBjaGVjay4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBhbGxvd3MgeW91IHRvIHdyaXRlIGNvbnN0cnVjdHMgc3VjaCBhcworICAgICAgICogIDxjb2RlPmlmICghYV9zdHJlYW0pIC4uLjwvY29kZT4gYW5kIDxjb2RlPndoaWxlIChhX3N0cmVhbSkgLi4uPC9jb2RlPgorICAgICAgKi8KKyAgICAgIG9wZXJhdG9yIHZvaWQqKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmZhaWwoKSA/IDAgOiBjb25zdF9jYXN0PGJhc2ljX2lvcyo+KHRoaXMpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yISgpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5mYWlsKCk7IH0KKyAgICAgIC8vQH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm5zIHRoZSBlcnJvciBzdGF0ZSBvZiB0aGUgc3RyZWFtIGJ1ZmZlci4KKyAgICAgICAqICBAcmV0dXJuICBBIGJpdCBwYXR0ZXJuICh3ZWxsLCBpc24ndCBldmVyeXRoaW5nPykKKyAgICAgICAqCisgICAgICAgKiAgU2VlIHN0ZDo6aW9zX2Jhc2U6Omlvc3RhdGUgZm9yIHRoZSBwb3NzaWJsZSBiaXQgdmFsdWVzLiAgTW9zdAorICAgICAgICogIHVzZXJzIHdpbGwgY2FsbCBvbmUgb2YgdGhlIGludGVycHJldGluZyB3cmFwcGVycywgZS5nLiwgZ29vZCgpLgorICAgICAgKi8KKyAgICAgIGlvc3RhdGUKKyAgICAgIHJkc3RhdGUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fc3RyZWFtYnVmX3N0YXRlOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgW1JlXXNldHMgdGhlIGVycm9yIHN0YXRlLgorICAgICAgICogIEBwYXJhbSAgc3RhdGUgIFRoZSBuZXcgc3RhdGUgZmxhZyhzKSB0byBzZXQuCisgICAgICAgKgorICAgICAgICogIFNlZSBzdGQ6Omlvc19iYXNlOjppb3N0YXRlIGZvciB0aGUgcG9zc2libGUgYml0IHZhbHVlcy4gIE1vc3QKKyAgICAgICAqICB1c2VycyB3aWxsIG5vdCBuZWVkIHRvIHBhc3MgYW4gYXJndW1lbnQuCisgICAgICAqLworICAgICAgdm9pZAorICAgICAgY2xlYXIoaW9zdGF0ZSBfX3N0YXRlID0gZ29vZGJpdCk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU2V0cyBhZGRpdGlvbmFsIGZsYWdzIGluIHRoZSBlcnJvciBzdGF0ZS4KKyAgICAgICAqICBAcGFyYW0gIHN0YXRlICBUaGUgYWRkaXRpb25hbCBzdGF0ZSBmbGFnKHMpIHRvIHNldC4KKyAgICAgICAqCisgICAgICAgKiAgU2VlIHN0ZDo6aW9zX2Jhc2U6Omlvc3RhdGUgZm9yIHRoZSBwb3NzaWJsZSBiaXQgdmFsdWVzLgorICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHNldHN0YXRlKGlvc3RhdGUgX19zdGF0ZSkKKyAgICAgIHsgdGhpcy0+Y2xlYXIodGhpcy0+cmRzdGF0ZSgpIHwgX19zdGF0ZSk7IH0KKworICAgICAgLy8gRmxpcCB0aGUgaW50ZXJuYWwgc3RhdGUgb24gZm9yIHRoZSBwcm9wZXIgc3RhdGUgYml0cywgdGhlbiByZQorICAgICAgLy8gdGhyb3dzIHRoZSBwcm9wYWdhdGVkIGV4Y2VwdGlvbiBpZiBiaXQgYWxzbyBzZXQgaW4KKyAgICAgIC8vIGV4Y2VwdGlvbnMoKS4KKyAgICAgIHZvaWQKKyAgICAgIF9NX3NldHN0YXRlKGlvc3RhdGUgX19zdGF0ZSkKKyAgICAgIHsKKwkvLyAyNy42LjEuMi4xIENvbW1vbiByZXF1aXJlbWVudHMuCisJLy8gVHVybiB0aGlzIG9uIHdpdGhvdXQgY2F1c2luZyBhbiBpb3M6OmZhaWx1cmUgdG8gYmUgdGhyb3duLgorCV9NX3N0cmVhbWJ1Zl9zdGF0ZSB8PSBfX3N0YXRlOworCWlmICh0aGlzLT5leGNlcHRpb25zKCkgJiBfX3N0YXRlKQorCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmFzdCBlcnJvciBjaGVja2luZy4KKyAgICAgICAqICBAcmV0dXJuICBUcnVlIGlmIG5vIGVycm9yIGZsYWdzIGFyZSBzZXQuCisgICAgICAgKgorICAgICAgICogIEEgd3JhcHBlciBhcm91bmQgcmRzdGF0ZS4KKyAgICAgICovCisgICAgICBib29sCisgICAgICBnb29kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPnJkc3RhdGUoKSA9PSAwOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmFzdCBlcnJvciBjaGVja2luZy4KKyAgICAgICAqICBAcmV0dXJuICBUcnVlIGlmIHRoZSBlb2ZiaXQgaXMgc2V0LgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgb3RoZXIgaW9zdGF0ZSBmbGFncyBtYXkgYWxzbyBiZSBzZXQuCisgICAgICAqLworICAgICAgYm9vbAorICAgICAgZW9mKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiBlb2ZiaXQpICE9IDA7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGYXN0IGVycm9yIGNoZWNraW5nLgorICAgICAgICogIEByZXR1cm4gIFRydWUgaWYgZWl0aGVyIHRoZSBiYWRiaXQgb3IgdGhlIGZhaWxiaXQgaXMgc2V0LgorICAgICAgICoKKyAgICAgICAqICBDaGVja2luZyB0aGUgYmFkYml0IGluIGZhaWwoKSBpcyBoaXN0b3JpY2FsIHByYWN0aWNlLgorICAgICAgICogIE5vdGUgdGhhdCBvdGhlciBpb3N0YXRlIGZsYWdzIG1heSBhbHNvIGJlIHNldC4KKyAgICAgICovCisgICAgICBib29sCisgICAgICBmYWlsKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiAoYmFkYml0IHwgZmFpbGJpdCkpICE9IDA7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGYXN0IGVycm9yIGNoZWNraW5nLgorICAgICAgICogIEByZXR1cm4gIFRydWUgaWYgdGhlIGJhZGJpdCBpcyBzZXQuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhhdCBvdGhlciBpb3N0YXRlIGZsYWdzIG1heSBhbHNvIGJlIHNldC4KKyAgICAgICovCisgICAgICBib29sCisgICAgICBiYWQoKSBjb25zdAorICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIGJhZGJpdCkgIT0gMDsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFRocm93aW5nIGV4Y2VwdGlvbnMgb24gZXJyb3JzLgorICAgICAgICogIEByZXR1cm4gIFRoZSBjdXJyZW50IGV4Y2VwdGlvbnMgbWFzay4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBjaGFuZ2VzIG5vdGhpbmcgaW4gdGhlIHN0cmVhbS4gIFNlZSB0aGUgb25lLWFyZ3VtZW50IHZlcnNpb24KKyAgICAgICAqICBvZiBleGNlcHRpb25zKGlvc3RhdGUpIGZvciB0aGUgbWVhbmluZyBvZiB0aGUgcmV0dXJuIHZhbHVlLgorICAgICAgKi8KKyAgICAgIGlvc3RhdGUKKyAgICAgIGV4Y2VwdGlvbnMoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZXhjZXB0aW9uOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgVGhyb3dpbmcgZXhjZXB0aW9ucyBvbiBlcnJvcnMuCisgICAgICAgKiAgQHBhcmFtICBleGNlcHQgIFRoZSBuZXcgZXhjZXB0aW9ucyBtYXNrLgorICAgICAgICoKKyAgICAgICAqICBCeSBkZWZhdWx0LCBlcnJvciBmbGFncyBhcmUgc2V0IHNpbGVudGx5LiAgWW91IGNhbiBzZXQgYW4KKyAgICAgICAqICBleGNlcHRpb25zIG1hc2sgZm9yIGVhY2ggc3RyZWFtOyBpZiBhIGJpdCBpbiB0aGUgbWFzayBiZWNvbWVzIHNldAorICAgICAgICogIGluIHRoZSBlcnJvciBmbGFncywgdGhlbiBhbiBleGNlcHRpb24gb2YgdHlwZQorICAgICAgICogIHN0ZDo6aW9zX2Jhc2U6OmZhaWx1cmUgaXMgdGhyb3duLgorICAgICAgICoKKyAgICAgICAqICBJZiB0aGUgZXJyb3IgZmxhZyBpcyBhbHJlYWR5IHNldCB3aGVuIHRoZSBleGNlcHRpb25zIG1hc2sgaXMKKyAgICAgICAqICBhZGRlZCwgdGhlIGV4Y2VwdGlvbiBpcyBpbW1lZGlhdGVseSB0aHJvd24uICBUcnkgcnVubmluZyB0aGUKKyAgICAgICAqICBmb2xsb3dpbmcgdW5kZXIgR0NDIDMuMSBvciBsYXRlcjoKKyAgICAgICAqICBAY29kZQorICAgICAgICogICNpbmNsdWRlIDxpb3N0cmVhbT4KKyAgICAgICAqICAjaW5jbHVkZSA8ZnN0cmVhbT4KKyAgICAgICAqICAjaW5jbHVkZSA8ZXhjZXB0aW9uPgorICAgICAgICoKKyAgICAgICAqICBpbnQgbWFpbigpCisgICAgICAgKiAgeworICAgICAgICogICAgICBzdGQ6OnNldF90ZXJtaW5hdGUgKF9fZ251X2N4eDo6X192ZXJib3NlX3Rlcm1pbmF0ZV9oYW5kbGVyKTsKKyAgICAgICAqCisgICAgICAgKiAgICAgIHN0ZDo6aWZzdHJlYW0gZiAoIi9ldGMvbW90ZCIpOworICAgICAgICoKKyAgICAgICAqICAgICAgc3RkOjpjZXJyIDw8ICJTZXR0aW5nIGJhZGJpdFxuIjsKKyAgICAgICAqICAgICAgZi5zZXRzdGF0ZSAoc3RkOjppb3NfYmFzZTo6YmFkYml0KTsKKyAgICAgICAqCisgICAgICAgKiAgICAgIHN0ZDo6Y2VyciA8PCAiU2V0dGluZyBleGNlcHRpb24gbWFza1xuIjsKKyAgICAgICAqICAgICAgZi5leGNlcHRpb25zIChzdGQ6Omlvc19iYXNlOjpiYWRiaXQpOworICAgICAgICogIH0KKyAgICAgICAqICBAZW5kY29kZQorICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGV4Y2VwdGlvbnMoaW9zdGF0ZSBfX2V4Y2VwdCkKKyAgICAgIHsKKyAgICAgICAgX01fZXhjZXB0aW9uID0gX19leGNlcHQ7CisgICAgICAgIHRoaXMtPmNsZWFyKF9NX3N0cmVhbWJ1Zl9zdGF0ZSk7CisgICAgICB9CisKKyAgICAgIC8vIENvbnN0cnVjdG9yL2Rlc3RydWN0b3I6CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdG9yIHBlcmZvcm1zIGluaXRpYWxpemF0aW9uLgorICAgICAgICoKKyAgICAgICAqICBUaGUgcGFyYW1ldGVyIGlzIHBhc3NlZCBieSBkZXJpdmVkIHN0cmVhbXMuCisgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGJhc2ljX2lvcyhiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKKyAgICAgIDogaW9zX2Jhc2UoKSwgX01fdGllKDApLCBfTV9maWxsKCksIF9NX2ZpbGxfaW5pdChmYWxzZSksIF9NX3N0cmVhbWJ1ZigwKSwKKwlfTV9jdHlwZSgwKSwgX01fbnVtX3B1dCgwKSwgX01fbnVtX2dldCgwKQorICAgICAgeyB0aGlzLT5pbml0KF9fc2IpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRW1wdHkuCisgICAgICAgKgorICAgICAgICogIFRoZSBkZXN0cnVjdG9yIGRvZXMgbm90aGluZy4gIE1vcmUgc3BlY2lmaWNhbGx5LCBpdCBkb2VzIG5vdAorICAgICAgICogIGRlc3Ryb3kgdGhlIHN0cmVhbWJ1ZiBoZWxkIGJ5IHJkYnVmKCkuCisgICAgICAqLworICAgICAgdmlydHVhbAorICAgICAgfmJhc2ljX2lvcygpIHsgfQorCisgICAgICAvLyBNZW1iZXJzOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGZXRjaGVzIHRoZSBjdXJyZW50IEBlIHRpZWQgc3RyZWFtLgorICAgICAgICogIEByZXR1cm4gIEEgcG9pbnRlciB0byB0aGUgdGllZCBzdHJlYW0sIG9yIE5VTEwgaWYgdGhlIHN0cmVhbSBpcworICAgICAgICogICAgICAgICAgIG5vdCB0aWVkLgorICAgICAgICoKKyAgICAgICAqICBBIHN0cmVhbSBtYXkgYmUgQGUgdGllZCAob3Igc3luY2hyb25pemVkKSB0byBhIHNlY29uZCBvdXRwdXQKKyAgICAgICAqICBzdHJlYW0uICBXaGVuIHRoaXMgc3RyZWFtIHBlcmZvcm1zIGFueSBJL08sIHRoZSB0aWVkIHN0cmVhbSBpcworICAgICAgICogIGZpcnN0IGZsdXNoZWQuICBGb3IgZXhhbXBsZSwgQGMgc3RkOjpjaW4gaXMgdGllZCB0byBAYyBzdGQ6OmNvdXQuCisgICAgICAqLworICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KgorICAgICAgdGllKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3RpZTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFRpZXMgdGhpcyBzdHJlYW0gdG8gYW4gb3V0cHV0IHN0cmVhbS4KKyAgICAgICAqICBAcGFyYW0gIHRpZXN0ciAgVGhlIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiAgQHJldHVybiAgVGhlIHByZXZpb3VzbHkgdGllZCBvdXRwdXQgc3RyZWFtLCBvciBOVUxMIGlmIHRoZSBzdHJlYW0KKyAgICAgICAqICAgICAgICAgICB3YXMgbm90IHRpZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgc2V0cyB1cCBhIG5ldyB0aWU7IHNlZSB0aWUoKSBmb3IgbW9yZS4KKyAgICAgICovCisgICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qCisgICAgICB0aWUoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfX3RpZXN0cikKKyAgICAgIHsKKyAgICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfX29sZCA9IF9NX3RpZTsKKyAgICAgICAgX01fdGllID0gX190aWVzdHI7CisgICAgICAgIHJldHVybiBfX29sZDsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBY2Nlc3NpbmcgdGhlIHVuZGVybHlpbmcgYnVmZmVyLgorICAgICAgICogIEByZXR1cm4gIFRoZSBjdXJyZW50IHN0cmVhbSBidWZmZXIuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZG9lcyBub3QgY2hhbmdlIHRoZSBzdGF0ZSBvZiB0aGUgc3RyZWFtLgorICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgorICAgICAgcmRidWYoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fc3RyZWFtYnVmOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ2hhbmdpbmcgdGhlIHVuZGVybHlpbmcgYnVmZmVyLgorICAgICAgICogIEBwYXJhbSAgc2IgIFRoZSBuZXcgc3RyZWFtIGJ1ZmZlci4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgcHJldmlvdXMgc3RyZWFtIGJ1ZmZlci4KKyAgICAgICAqCisgICAgICAgKiAgQXNzb2NpYXRlcyBhIG5ldyBidWZmZXIgd2l0aCB0aGUgY3VycmVudCBzdHJlYW0sIGFuZCBjbGVhcnMgdGhlCisgICAgICAgKiAgZXJyb3Igc3RhdGUuCisgICAgICAgKgorICAgICAgICogIER1ZSB0byBoaXN0b3JpY2FsIGFjY2lkZW50cyB3aGljaCB0aGUgTFdHIHJlZnVzZXMgdG8gY29ycmVjdCwgdGhlCisgICAgICAgKiAgSS9PIGxpYnJhcnkgc3VmZmVycyBmcm9tIGEgZGVzaWduIGVycm9yOiAgdGhpcyBmdW5jdGlvbiBpcyBoaWRkZW4KKyAgICAgICAqICBpbiBkZXJpdmVkIGNsYXNzZXMgYnkgb3ZlcnJpZGVzIG9mIHRoZSB6ZXJvLWFyZ3VtZW50IEBjIHJkYnVmKCksCisgICAgICAgKiAgd2hpY2ggaXMgbm9uLXZpcnR1YWwgZm9yIGh5c3RlcmljYWwgcmFpc2lucy4gIEFzIGEgcmVzdWx0LCB5b3UKKyAgICAgICAqICBtdXN0IHVzZSBleHBsaWNpdCBxdWFsaWZpY2F0aW9ucyB0byBhY2Nlc3MgdGhpcyBmdW5jdGlvbiB2aWEgYW55CisgICAgICAgKiAgZGVyaXZlZCBjbGFzcy4gIEZvciBleGFtcGxlOgorICAgICAgICoKKyAgICAgICAqICBAY29kZQorICAgICAgICogIHN0ZDo6ZnN0cmVhbSAgICAgZm9vOyAgICAgICAgIC8vIG9yIHNvbWUgb3RoZXIgZGVyaXZlZCB0eXBlCisgICAgICAgKiAgc3RkOjpzdHJlYW1idWYqICBwID0gLi4uLi47CisgICAgICAgKgorICAgICAgICogIGZvby5pb3M6OnJkYnVmKHApOyAgICAgICAgICAgIC8vIGlvcyA9PSBiYXNpY19pb3M8Y2hhcj4KKyAgICAgICAqICBAZW5kY29kZQorICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgorICAgICAgcmRidWYoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvcGllcyBmaWVsZHMgb2YgX19yaHMgaW50byB0aGlzLgorICAgICAgICogIEBwYXJhbSAgX19yaHMgIFRoZSBzb3VyY2UgdmFsdWVzIGZvciB0aGUgY29waWVzLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiAgQWxsIGZpZWxkcyBvZiBfX3JocyBhcmUgY29waWVkIGludG8gdGhpcyBvYmplY3QgZXhjZXB0IHRoYXQgcmRidWYoKQorICAgICAgICogIGFuZCByZHN0YXRlKCkgcmVtYWluIHVuY2hhbmdlZC4gIEFsbCB2YWx1ZXMgaW4gdGhlIHB3b3JkIGFuZCBpd29yZAorICAgICAgICogIGFycmF5cyBhcmUgY29waWVkLiAgQmVmb3JlIGNvcHlpbmcsIGVhY2ggY2FsbGJhY2sgaXMgaW52b2tlZCB3aXRoCisgICAgICAgKiAgZXJhc2VfZXZlbnQuICBBZnRlciBjb3B5aW5nLCBlYWNoIChuZXcpIGNhbGxiYWNrIGlzIGludm9rZWQgd2l0aAorICAgICAgICogIGNvcHlmbXRfZXZlbnQuICBUaGUgZmluYWwgc3RlcCBpcyB0byBjb3B5IGV4Y2VwdGlvbnMoKS4KKyAgICAgICovCisgICAgICBiYXNpY19pb3MmCisgICAgICBjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19yaHMpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHJpZXZlcyB0aGUgQGEgZW1wdHkgY2hhcmFjdGVyLgorICAgICAgICogIEByZXR1cm4gIFRoZSBjdXJyZW50IGZpbGwgY2hhcmFjdGVyLgorICAgICAgICoKKyAgICAgICAqICBJdCBkZWZhdWx0cyB0byBhIHNwYWNlICgnICcpIGluIHRoZSBjdXJyZW50IGxvY2FsZS4KKyAgICAgICovCisgICAgICBjaGFyX3R5cGUKKyAgICAgIGZpbGwoKSBjb25zdAorICAgICAgeworCWlmICghX01fZmlsbF9pbml0KQorCSAgeworCSAgICBfTV9maWxsID0gdGhpcy0+d2lkZW4oJyAnKTsKKwkgICAgX01fZmlsbF9pbml0ID0gdHJ1ZTsKKwkgIH0KKwlyZXR1cm4gX01fZmlsbDsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTZXRzIGEgbmV3IEBhIGVtcHR5IGNoYXJhY3Rlci4KKyAgICAgICAqICBAcGFyYW0gIGNoICBUaGUgbmV3IGNoYXJhY3Rlci4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgcHJldmlvdXMgZmlsbCBjaGFyYWN0ZXIuCisgICAgICAgKgorICAgICAgICogIFRoZSBmaWxsIGNoYXJhY3RlciBpcyB1c2VkIHRvIGZpbGwgb3V0IHNwYWNlIHdoZW4gUCsgY2hhcmFjdGVycworICAgICAgICogIGhhdmUgYmVlbiByZXF1ZXN0ZWQgKGUuZy4sIHZpYSBzZXR3KSwgUSBjaGFyYWN0ZXJzIGFyZSBhY3R1YWxseQorICAgICAgICogIHVzZWQsIGFuZCBRPFAuICBJdCBkZWZhdWx0cyB0byBhIHNwYWNlICgnICcpIGluIHRoZSBjdXJyZW50IGxvY2FsZS4KKyAgICAgICovCisgICAgICBjaGFyX3R5cGUKKyAgICAgIGZpbGwoY2hhcl90eXBlIF9fY2gpCisgICAgICB7CisJY2hhcl90eXBlIF9fb2xkID0gdGhpcy0+ZmlsbCgpOworCV9NX2ZpbGwgPSBfX2NoOworCXJldHVybiBfX29sZDsKKyAgICAgIH0KKworICAgICAgLy8gTG9jYWxlczoKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTW92ZXMgdG8gYSBuZXcgbG9jYWxlLgorICAgICAgICogIEBwYXJhbSAgbG9jICBUaGUgbmV3IGxvY2FsZS4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgcHJldmlvdXMgbG9jYWxlLgorICAgICAgICoKKyAgICAgICAqICBDYWxscyBAYyBpb3NfYmFzZTo6aW1idWUobG9jKSwgYW5kIGlmIGEgc3RyZWFtIGJ1ZmZlciBpcyBhc3NvY2lhdGVkCisgICAgICAgKiAgd2l0aCB0aGlzIHN0cmVhbSwgY2FsbHMgdGhhdCBidWZmZXIncyBAYyBwdWJpbWJ1ZShsb2MpLgorICAgICAgICoKKyAgICAgICAqICBBZGRpdGlvbmFsIGwxMG4gbm90ZXMgYXJlIGF0CisgICAgICAgKiAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL21hbnVhbC9sb2NhbGl6YXRpb24uaHRtbAorICAgICAgKi8KKyAgICAgIGxvY2FsZQorICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU3F1ZWV6ZXMgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gIGMgIFRoZSBjaGFyYWN0ZXIgdG8gbmFycm93LgorICAgICAgICogIEBwYXJhbSAgZGZhdWx0ICBUaGUgY2hhcmFjdGVyIHRvIG5hcnJvdy4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgbmFycm93ZWQgY2hhcmFjdGVyLgorICAgICAgICoKKyAgICAgICAqICBNYXBzIGEgY2hhcmFjdGVyIG9mIEBjIGNoYXJfdHlwZSB0byBhIGNoYXJhY3RlciBvZiBAYyBjaGFyLAorICAgICAgICogIGlmIHBvc3NpYmxlLgorICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIHRoZSByZXN1bHQgb2YKKyAgICAgICAqICBAY29kZQorICAgICAgICogICAgc3RkOjp1c2VfZmFjZXQ8Y3R5cGU8Y2hhcl90eXBlPiA+KGdldGxvYygpKS5uYXJyb3coYyxkZmF1bHQpCisgICAgICAgKiAgQGVuZGNvZGUKKyAgICAgICAqCisgICAgICAgKiAgQWRkaXRpb25hbCBsMTBuIG5vdGVzIGFyZSBhdAorICAgICAgICogIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2xpYnN0ZGMrKy9tYW51YWwvbG9jYWxpemF0aW9uLmh0bWwKKyAgICAgICovCisgICAgICBjaGFyCisgICAgICBuYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fY2hlY2tfZmFjZXQoX01fY3R5cGUpLm5hcnJvdyhfX2MsIF9fZGZhdWx0KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFdpZGVucyBjaGFyYWN0ZXJzLgorICAgICAgICogIEBwYXJhbSAgYyAgVGhlIGNoYXJhY3RlciB0byB3aWRlbi4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgd2lkZW5lZCBjaGFyYWN0ZXIuCisgICAgICAgKgorICAgICAgICogIE1hcHMgYSBjaGFyYWN0ZXIgb2YgQGMgY2hhciB0byBhIGNoYXJhY3RlciBvZiBAYyBjaGFyX3R5cGUuCisgICAgICAgKgorICAgICAgICogIFJldHVybnMgdGhlIHJlc3VsdCBvZgorICAgICAgICogIEBjb2RlCisgICAgICAgKiAgICBzdGQ6OnVzZV9mYWNldDxjdHlwZTxjaGFyX3R5cGU+ID4oZ2V0bG9jKCkpLndpZGVuKGMpCisgICAgICAgKiAgQGVuZGNvZGUKKyAgICAgICAqCisgICAgICAgKiAgQWRkaXRpb25hbCBsMTBuIG5vdGVzIGFyZSBhdAorICAgICAgICogIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2xpYnN0ZGMrKy9tYW51YWwvbG9jYWxpemF0aW9uLmh0bWwKKyAgICAgICovCisgICAgICBjaGFyX3R5cGUKKyAgICAgIHdpZGVuKGNoYXIgX19jKSBjb25zdAorICAgICAgeyByZXR1cm4gX19jaGVja19mYWNldChfTV9jdHlwZSkud2lkZW4oX19jKTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgLy8gMjcuNC41LjEgIGJhc2ljX2lvcyBjb25zdHJ1Y3RvcnMKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRW1wdHkuCisgICAgICAgKgorICAgICAgICogIFRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yIGRvZXMgbm90aGluZyBhbmQgaXMgbm90IG5vcm1hbGx5CisgICAgICAgKiAgYWNjZXNzaWJsZSB0byB1c2Vycy4KKyAgICAgICovCisgICAgICBiYXNpY19pb3MoKQorICAgICAgOiBpb3NfYmFzZSgpLCBfTV90aWUoMCksIF9NX2ZpbGwoY2hhcl90eXBlKCkpLCBfTV9maWxsX2luaXQoZmFsc2UpLCAKKwlfTV9zdHJlYW1idWYoMCksIF9NX2N0eXBlKDApLCBfTV9udW1fcHV0KDApLCBfTV9udW1fZ2V0KDApCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBbGwgc2V0dXAgaXMgcGVyZm9ybWVkIGhlcmUuCisgICAgICAgKgorICAgICAgICogIFRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIHB1YmxpYyBjb25zdHJ1Y3Rvci4gIEl0IGlzIG5vdCB2aXJ0dWFsIGFuZAorICAgICAgICogIGNhbm5vdCBiZSByZWRlZmluZWQuCisgICAgICAqLworICAgICAgdm9pZAorICAgICAgaW5pdChiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYik7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2NhY2hlX2xvY2FsZShjb25zdCBsb2NhbGUmIF9fbG9jKTsKKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNpZm5kZWYgX0dMSUJDWFhfRVhQT1JUX1RFTVBMQVRFCisjaW5jbHVkZSA8Yml0cy9iYXNpY19pb3MudGNjPgorI2VuZGlmCisKKyNlbmRpZiAvKiBfQkFTSUNfSU9TX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9iYXNpY19pb3MudGNjIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2Jhc2ljX2lvcy50Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBkYzY3ZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9iYXNpY19pb3MudGNjCkBAIC0wLDAgKzEsMTg3IEBACisvLyBiYXNpY19pb3MgbWVtYmVyIGZ1bmN0aW9ucyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsCisvLyAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYmFzaWNfaW9zLnRjYworICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWZuZGVmIF9CQVNJQ19JT1NfVENDCisjZGVmaW5lIF9CQVNJQ19JT1NfVENDIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICB2b2lkCisgICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmNsZWFyKGlvc3RhdGUgX19zdGF0ZSkKKyAgICB7CisgICAgICBpZiAodGhpcy0+cmRidWYoKSkKKwlfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3N0YXRlOworICAgICAgZWxzZQorCSAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZSB8IGJhZGJpdDsKKyAgICAgIGlmICh0aGlzLT5leGNlcHRpb25zKCkgJiB0aGlzLT5yZHN0YXRlKCkpCisJX190aHJvd19pb3NfZmFpbHVyZShfX04oImJhc2ljX2lvczo6Y2xlYXIiKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKKyAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6cmRidWYoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCisgICAgeworICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fc3RyZWFtYnVmOworICAgICAgX01fc3RyZWFtYnVmID0gX19zYjsKKyAgICAgIHRoaXMtPmNsZWFyKCk7CisgICAgICByZXR1cm4gX19vbGQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYKKyAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6Y29weWZtdChjb25zdCBiYXNpY19pb3MmIF9fcmhzKQorICAgIHsKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDI5Mi4gZWZmZWN0cyBvZiBhLmNvcHlmbXQgKGEpCisgICAgICBpZiAodGhpcyAhPSAmX19yaHMpCisJeworCSAgLy8gUGVyIDI3LjEuMSwgZG8gbm90IGNhbGwgaW1idWUsIHlldCBtdXN0IHRyYXNoIGFsbCBjYWNoZXMKKwkgIC8vIGFzc29jaWF0ZWQgd2l0aCBpbWJ1ZSgpCisKKwkgIC8vIEFsbG9jIGFueSBuZXcgd29yZCBhcnJheSBmaXJzdCwgc28gaWYgaXQgZmFpbHMgd2UgaGF2ZSAicm9sbGJhY2siLgorCSAgX1dvcmRzKiBfX3dvcmRzID0gKF9fcmhzLl9NX3dvcmRfc2l6ZSA8PSBfU19sb2NhbF93b3JkX3NpemUpID8KKwkgICAgICAgICAgICAgICAgICAgICBfTV9sb2NhbF93b3JkIDogbmV3IF9Xb3Jkc1tfX3Jocy5fTV93b3JkX3NpemVdOworCisJICAvLyBCdW1wIHJlZnMgYmVmb3JlIGRvaW5nIGNhbGxiYWNrcywgZm9yIHNhZmV0eS4KKwkgIF9DYWxsYmFja19saXN0KiBfX2NiID0gX19yaHMuX01fY2FsbGJhY2tzOworCSAgaWYgKF9fY2IpCisJICAgIF9fY2ItPl9NX2FkZF9yZWZlcmVuY2UoKTsKKwkgIF9NX2NhbGxfY2FsbGJhY2tzKGVyYXNlX2V2ZW50KTsKKwkgIGlmIChfTV93b3JkICE9IF9NX2xvY2FsX3dvcmQpCisJICAgIHsKKwkgICAgICBkZWxldGUgW10gX01fd29yZDsKKwkgICAgICBfTV93b3JkID0gMDsKKwkgICAgfQorCSAgX01fZGlzcG9zZV9jYWxsYmFja3MoKTsKKworCSAgLy8gTkI6IERvbid0IHdhbnQgYW55IGFkZGVkIGR1cmluZyBhYm92ZS4KKwkgIF9NX2NhbGxiYWNrcyA9IF9fY2I7CisJICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCBfX3Jocy5fTV93b3JkX3NpemU7ICsrX19pKQorCSAgICBfX3dvcmRzW19faV0gPSBfX3Jocy5fTV93b3JkW19faV07CisJICBfTV93b3JkID0gX193b3JkczsKKwkgIF9NX3dvcmRfc2l6ZSA9IF9fcmhzLl9NX3dvcmRfc2l6ZTsKKworCSAgdGhpcy0+ZmxhZ3MoX19yaHMuZmxhZ3MoKSk7CisJICB0aGlzLT53aWR0aChfX3Jocy53aWR0aCgpKTsKKwkgIHRoaXMtPnByZWNpc2lvbihfX3Jocy5wcmVjaXNpb24oKSk7CisJICB0aGlzLT50aWUoX19yaHMudGllKCkpOworCSAgdGhpcy0+ZmlsbChfX3Jocy5maWxsKCkpOworCSAgX01faW9zX2xvY2FsZSA9IF9fcmhzLmdldGxvYygpOworCSAgX01fY2FjaGVfbG9jYWxlKF9NX2lvc19sb2NhbGUpOworCisJICBfTV9jYWxsX2NhbGxiYWNrcyhjb3B5Zm10X2V2ZW50KTsKKworCSAgLy8gVGhlIG5leHQgaXMgcmVxdWlyZWQgdG8gYmUgdGhlIGxhc3QgYXNzaWdubWVudC4KKwkgIHRoaXMtPmV4Y2VwdGlvbnMoX19yaHMuZXhjZXB0aW9ucygpKTsKKwl9CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIC8vIExvY2FsZXM6CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBsb2NhbGUKKyAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6aW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykKKyAgICB7CisgICAgICBsb2NhbGUgX19vbGQodGhpcy0+Z2V0bG9jKCkpOworICAgICAgaW9zX2Jhc2U6OmltYnVlKF9fbG9jKTsKKyAgICAgIF9NX2NhY2hlX2xvY2FsZShfX2xvYyk7CisgICAgICBpZiAodGhpcy0+cmRidWYoKSAhPSAwKQorCXRoaXMtPnJkYnVmKCktPnB1YmltYnVlKF9fbG9jKTsKKyAgICAgIHJldHVybiBfX29sZDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHZvaWQKKyAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6aW5pdChiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKKyAgICB7CisgICAgICAvLyBOQjogVGhpcyBtYXkgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIG9iamVjdC4KKyAgICAgIGlvc19iYXNlOjpfTV9pbml0KCk7CisKKyAgICAgIC8vIENhY2hlIGxvY2FsZSBkYXRhIGFuZCBzcGVjaWZpYyBmYWNldHMgdXNlZCBieSBpb3N0cmVhbXMuCisgICAgICBfTV9jYWNoZV9sb2NhbGUoX01faW9zX2xvY2FsZSk7CisKKyAgICAgIC8vIE5COiBUaGUgMjcuNC40LjEgUG9zdGNvbmRpdGlvbnMgVGFibGUgc3BlY2lmaWVzIHJlcXVpcmVtZW50cworICAgICAgLy8gYWZ0ZXIgYmFzaWNfaW9zOjppbml0KCkgaGFzIGJlZW4gY2FsbGVkLiBBcyBwYXJ0IG9mIHRoaXMsCisgICAgICAvLyBmaWxsKCkgbXVzdCByZXR1cm4gd2lkZW4oJyAnKSBhbnkgdGltZSBhZnRlciBpbml0KCkgaGFzIGJlZW4KKyAgICAgIC8vIGNhbGxlZCwgd2hpY2ggbmVlZHMgYW4gaW1idWVkIGN0eXBlIGZhY2V0IG9mIGNoYXJfdHlwZSB0bworICAgICAgLy8gcmV0dXJuIHdpdGhvdXQgdGhyb3dpbmcgYW4gZXhjZXB0aW9uLiBVbmZvcnR1bmF0ZWx5LAorICAgICAgLy8gY3R5cGU8Y2hhcl90eXBlPiBpcyBub3QgbmVjZXNzYXJpbHkgYSByZXF1aXJlZCBmYWNldCwgc28KKyAgICAgIC8vIHN0cmVhbXMgd2l0aCBjaGFyX3R5cGUgIT0gW2NoYXIsIHdjaGFyX3RdIHdpbGwgbm90IGhhdmUgaXQgYnkKKyAgICAgIC8vIGRlZmF1bHQuIEJlY2F1c2Ugb2YgdGhpcywgdGhlIGNvcnJlY3QgdmFsdWUgZm9yIF9NX2ZpbGwgaXMKKyAgICAgIC8vIGNvbnN0cnVjdGVkIG9uIHRoZSBmaXJzdCBjYWxsIG9mIGZpbGwoKS4gVGhhdCB3YXksCisgICAgICAvLyB1bmZvcm1hdHRlZCBpbnB1dCBhbmQgb3V0cHV0IHdpdGggbm9uLXJlcXVpcmVkIGJhc2ljX2lvcworICAgICAgLy8gaW5zdGFudGlhdGlvbnMgaXMgcG9zc2libGUgZXZlbiB3aXRob3V0IGltYnVpbmcgdGhlIGV4cGVjdGVkCisgICAgICAvLyBjdHlwZTxjaGFyX3R5cGU+IGZhY2V0LgorICAgICAgX01fZmlsbCA9IF9DaGFyVCgpOworICAgICAgX01fZmlsbF9pbml0ID0gZmFsc2U7CisKKyAgICAgIF9NX3RpZSA9IDA7CisgICAgICBfTV9leGNlcHRpb24gPSBnb29kYml0OworICAgICAgX01fc3RyZWFtYnVmID0gX19zYjsKKyAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc2IgPyBnb29kYml0IDogYmFkYml0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdm9pZAorICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpfTV9jYWNoZV9sb2NhbGUoY29uc3QgbG9jYWxlJiBfX2xvYykKKyAgICB7CisgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChoYXNfZmFjZXQ8X19jdHlwZV90eXBlPihfX2xvYyksIHRydWUpKQorCV9NX2N0eXBlID0gJnVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9fbG9jKTsKKyAgICAgIGVsc2UKKwlfTV9jdHlwZSA9IDA7CisKKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KGhhc19mYWNldDxfX251bV9wdXRfdHlwZT4oX19sb2MpLCB0cnVlKSkKKwlfTV9udW1fcHV0ID0gJnVzZV9mYWNldDxfX251bV9wdXRfdHlwZT4oX19sb2MpOworICAgICAgZWxzZQorCV9NX251bV9wdXQgPSAwOworCisgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChoYXNfZmFjZXQ8X19udW1fZ2V0X3R5cGU+KF9fbG9jKSwgdHJ1ZSkpCisJX01fbnVtX2dldCA9ICZ1c2VfZmFjZXQ8X19udW1fZ2V0X3R5cGU+KF9fbG9jKTsKKyAgICAgIGVsc2UKKwlfTV9udW1fZ2V0ID0gMDsKKyAgICB9CisKKyAgLy8gSW5oaWJpdCBpbXBsaWNpdCBpbnN0YW50aWF0aW9ucyBmb3IgcmVxdWlyZWQgaW5zdGFudGlhdGlvbnMsCisgIC8vIHdoaWNoIGFyZSBkZWZpbmVkIHZpYSBleHBsaWNpdCBpbnN0YW50aWF0aW9ucyBlbHNld2hlcmUuCisgIC8vIE5COiAgVGhpcyBzeW50YXggaXMgYSBHTlUgZXh0ZW5zaW9uLgorI2lmIF9HTElCQ1hYX0VYVEVSTl9URU1QTEFURQorICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaW9zPGNoYXI+OworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lvczx3Y2hhcl90PjsKKyNlbmRpZgorI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvYmFzaWNfc3RyaW5nLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvYmFzaWNfc3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZkOTk4OQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9iYXNpY19zdHJpbmcuaApAQCAtMCwwICsxLDI5MzYgQEAKKy8vIENvbXBvbmVudHMgZm9yIG1hbmlwdWxhdGluZyBzZXF1ZW5jZXMgb2YgY2hhcmFjdGVycyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsCisvLyAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYmFzaWNfc3RyaW5nLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDIxIFN0cmluZ3MgbGlicmFyeQorLy8KKworI2lmbmRlZiBfQkFTSUNfU1RSSU5HX0gKKyNkZWZpbmUgX0JBU0lDX1NUUklOR19IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8ZXh0L2F0b21pY2l0eS5oPgorI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisjaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvKioKKyAgICogIEBjbGFzcyBiYXNpY19zdHJpbmcgYmFzaWNfc3RyaW5nLmggPHN0cmluZz4KKyAgICogIEBicmllZiAgTWFuYWdpbmcgc2VxdWVuY2VzIG9mIGNoYXJhY3RlcnMgYW5kIGNoYXJhY3Rlci1saWtlIG9iamVjdHMuCisgICAqCisgICAqICBAaW5ncm91cCBzdHJpbmdzCisgICAqICBAaW5ncm91cCBzZXF1ZW5jZXMKKyAgICoKKyAgICogIE1lZXRzIHRoZSByZXF1aXJlbWVudHMgb2YgYSA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2NSI+Y29udGFpbmVyPC9hPiwgYQorICAgKiAgPGEgaHJlZj0idGFibGVzLmh0bWwjNjYiPnJldmVyc2libGUgY29udGFpbmVyPC9hPiwgYW5kIGEKKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sIzY3Ij5zZXF1ZW5jZTwvYT4uICBPZiB0aGUKKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sIzY4Ij5vcHRpb25hbCBzZXF1ZW5jZSByZXF1aXJlbWVudHM8L2E+LCBvbmx5CisgICAqICBAYyBwdXNoX2JhY2ssIEBjIGF0LCBhbmQgQGMgJWFycmF5IGFjY2VzcyBhcmUgc3VwcG9ydGVkLgorICAgKgorICAgKiAgQGRvY3RvZG8KKyAgICoKKyAgICoKKyAgICogIERvY3VtZW50YXRpb24/ICBXaGF0J3MgdGhhdD8KKyAgICogIE5hdGhhbiBNeWVycyA8bmNtQGNhbnRyaXAub3JnPi4KKyAgICoKKyAgICogIEEgc3RyaW5nIGxvb2tzIGxpa2UgdGhpczoKKyAgICoKKyAgICogIEBjb2RlCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtfUmVwXQorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9sZW5ndGgKKyAgICogICBbYmFzaWNfc3RyaW5nPGNoYXJfdHlwZT5dICAgICAgICAgICAgX01fY2FwYWNpdHkKKyAgICogICBfTV9kYXRhcGx1cyAgICAgICAgICAgICAgICAgICAgICAgICAgX01fcmVmY291bnQKKyAgICogICBfTV9wIC0tLS0tLS0tLS0tLS0tLS0+ICAgICAgICAgICAgICAgdW5uYW1lZCBhcnJheSBvZiBjaGFyX3R5cGUKKyAgICogIEBlbmRjb2RlCisgICAqCisgICAqICBXaGVyZSB0aGUgX01fcCBwb2ludHMgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLCBhbmQKKyAgICogIHlvdSBjYXN0IGl0IHRvIGEgcG9pbnRlci10by1fUmVwIGFuZCBzdWJ0cmFjdCAxIHRvIGdldCBhCisgICAqICBwb2ludGVyIHRvIHRoZSBoZWFkZXIuCisgICAqCisgICAqICBUaGlzIGFwcHJvYWNoIGhhcyB0aGUgZW5vcm1vdXMgYWR2YW50YWdlIHRoYXQgYSBzdHJpbmcgb2JqZWN0CisgICAqICByZXF1aXJlcyBvbmx5IG9uZSBhbGxvY2F0aW9uLiAgQWxsIHRoZSB1Z2xpbmVzcyBpcyBjb25maW5lZAorICAgKiAgd2l0aGluIGEgc2luZ2xlICVwYWlyIG9mIGlubGluZSBmdW5jdGlvbnMsIHdoaWNoIGVhY2ggY29tcGlsZSB0bworICAgKiAgYSBzaW5nbGUgQGEgYWRkIGluc3RydWN0aW9uOiBfUmVwOjpfTV9kYXRhKCksIGFuZAorICAgKiAgc3RyaW5nOjpfTV9yZXAoKTsgYW5kIHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uIHdoaWNoIGdldHMgYQorICAgKiAgYmxvY2sgb2YgcmF3IGJ5dGVzIGFuZCB3aXRoIHJvb20gZW5vdWdoIGFuZCBjb25zdHJ1Y3RzIGEgX1JlcAorICAgKiAgb2JqZWN0IGF0IHRoZSBmcm9udC4KKyAgICoKKyAgICogIFRoZSByZWFzb24geW91IHdhbnQgX01fZGF0YSBwb2ludGluZyB0byB0aGUgY2hhcmFjdGVyICVhcnJheSBhbmQKKyAgICogIG5vdCB0aGUgX1JlcCBpcyBzbyB0aGF0IHRoZSBkZWJ1Z2dlciBjYW4gc2VlIHRoZSBzdHJpbmcKKyAgICogIGNvbnRlbnRzLiAoUHJvYmFibHkgd2Ugc2hvdWxkIGFkZCBhIG5vbi1pbmxpbmUgbWVtYmVyIHRvIGdldAorICAgKiAgdGhlIF9SZXAgZm9yIHRoZSBkZWJ1Z2dlciB0byB1c2UsIHNvIHVzZXJzIGNhbiBjaGVjayB0aGUgYWN0dWFsCisgICAqICBzdHJpbmcgbGVuZ3RoLikKKyAgICoKKyAgICogIE5vdGUgdGhhdCB0aGUgX1JlcCBvYmplY3QgaXMgYSBQT0Qgc28gdGhhdCB5b3UgY2FuIGhhdmUgYQorICAgKiAgc3RhdGljIDxlbT5lbXB0eSBzdHJpbmc8L2VtPiBfUmVwIG9iamVjdCBhbHJlYWR5IEBhIGNvbnN0cnVjdGVkIGJlZm9yZQorICAgKiAgc3RhdGljIGNvbnN0cnVjdG9ycyBoYXZlIHJ1bi4gIFRoZSByZWZlcmVuY2UtY291bnQgZW5jb2RpbmcgaXMKKyAgICogIGNob3NlbiBzbyB0aGF0IGEgMCBpbmRpY2F0ZXMgb25lIHJlZmVyZW5jZSwgc28geW91IG5ldmVyIHRyeSB0bworICAgKiAgZGVzdHJveSB0aGUgZW1wdHktc3RyaW5nIF9SZXAgb2JqZWN0LgorICAgKgorICAgKiAgQWxsIGJ1dCB0aGUgbGFzdCBwYXJhZ3JhcGggaXMgY29uc2lkZXJlZCBwcmV0dHkgY29udmVudGlvbmFsCisgICAqICBmb3IgYSBDKysgc3RyaW5nIGltcGxlbWVudGF0aW9uLgorICAqLworICAvLyAyMS4zICBUZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmcKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgY2xhc3MgYmFzaWNfc3RyaW5nCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxfQ2hhclQ+OjpvdGhlciBfQ2hhclRfYWxsb2NfdHlwZTsKKworICAgICAgLy8gVHlwZXM6CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfVHJhaXRzCQkJCQkgICAgdHJhaXRzX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZQkJICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9BbGxvYwkJCQkJICAgIGFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQ2hhclRfYWxsb2NfdHlwZTo6c2l6ZV90eXBlCSAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9DaGFyVF9hbGxvY190eXBlOjpkaWZmZXJlbmNlX3R5cGUgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9DaGFyVF9hbGxvY190eXBlOjpyZWZlcmVuY2UJICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0NoYXJUX2FsbG9jX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSAgIGNvbnN0X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0NoYXJUX2FsbG9jX3R5cGU6OnBvaW50ZXIJICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9DaGFyVF9hbGxvY190eXBlOjpjb25zdF9wb2ludGVyCSAgICBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPHBvaW50ZXIsIGJhc2ljX3N0cmluZz4gIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIGJhc2ljX3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+CWNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4JCSAgICByZXZlcnNlX2l0ZXJhdG9yOworCisgICAgcHJpdmF0ZToKKyAgICAgIC8vIF9SZXA6IHN0cmluZyByZXByZXNlbnRhdGlvbgorICAgICAgLy8gICBJbnZhcmlhbnRzOgorICAgICAgLy8gICAxLiBTdHJpbmcgcmVhbGx5IGNvbnRhaW5zIF9NX2xlbmd0aCArIDEgY2hhcmFjdGVyczogZHVlIHRvIDIxLjMuNAorICAgICAgLy8gICAgICBtdXN0IGJlIGtlcHQgbnVsbC10ZXJtaW5hdGVkLgorICAgICAgLy8gICAyLiBfTV9jYXBhY2l0eSA+PSBfTV9sZW5ndGgKKyAgICAgIC8vICAgICAgQWxsb2NhdGVkIG1lbW9yeSBpcyBhbHdheXMgKF9NX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKS4KKyAgICAgIC8vICAgMy4gX01fcmVmY291bnQgaGFzIHRocmVlIHN0YXRlczoKKyAgICAgIC8vICAgICAgLTE6IGxlYWtlZCwgb25lIHJlZmVyZW5jZSwgbm8gcmVmLWNvcGllcyBhbGxvd2VkLCBub24tY29uc3QuCisgICAgICAvLyAgICAgICAwOiBvbmUgcmVmZXJlbmNlLCBub24tY29uc3QuCisgICAgICAvLyAgICAgbj4wOiBuICsgMSByZWZlcmVuY2VzLCBvcGVyYXRpb25zIHJlcXVpcmUgYSBsb2NrLCBjb25zdC4KKyAgICAgIC8vICAgNC4gQWxsIGZpZWxkcz09MCBpcyBhbiBlbXB0eSBzdHJpbmcsIGdpdmVuIHRoZSBleHRyYSBzdG9yYWdlCisgICAgICAvLyAgICAgIGJleW9uZC10aGUtZW5kIGZvciBhIG51bGwgdGVybWluYXRvcjsgdGh1cywgdGhlIHNoYXJlZAorICAgICAgLy8gICAgICBlbXB0eSBzdHJpbmcgcmVwcmVzZW50YXRpb24gbmVlZHMgbm8gY29uc3RydWN0b3IuCisKKyAgICAgIHN0cnVjdCBfUmVwX2Jhc2UKKyAgICAgIHsKKwlzaXplX3R5cGUJCV9NX2xlbmd0aDsKKwlzaXplX3R5cGUJCV9NX2NhcGFjaXR5OworCV9BdG9taWNfd29yZAkJX01fcmVmY291bnQ7CisgICAgICB9OworCisgICAgICBzdHJ1Y3QgX1JlcCA6IF9SZXBfYmFzZQorICAgICAgeworCS8vIFR5cGVzOgorCXR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8Y2hhcj46Om90aGVyIF9SYXdfYnl0ZXNfYWxsb2M7CisKKwkvLyAoUHVibGljKSBEYXRhIG1lbWJlcnM6CisKKwkvLyBUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5kaXZpZHVhbCBjaGFyX3R5cGUgZWxlbWVudHMgb2YgYW4KKwkvLyBpbmRpdmlkdWFsIHN0cmluZyBpcyBkZXRlcm1pbmVkIGJ5IF9TX21heF9zaXplLiBUaGlzIGlzIHRoZQorCS8vIHZhbHVlIHRoYXQgd2lsbCBiZSByZXR1cm5lZCBieSBtYXhfc2l6ZSgpLiAgKFdoZXJlYXMgbnBvcworCS8vIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGUgYWxsb2NhdG9yIGNhbiBhbGxvY2F0ZS4pCisJLy8gSWYgb25lIHdhcyB0byBkaXZ2eSB1cCB0aGUgdGhlb3JldGljYWwgbGFyZ2VzdCBzaXplIHN0cmluZywKKwkvLyB3aXRoIGEgdGVybWluYXRpbmcgY2hhcmFjdGVyIGFuZCBtIF9DaGFyVCBlbGVtZW50cywgaXQnZAorCS8vIGxvb2sgbGlrZSB0aGlzOgorCS8vIG5wb3MgPSBzaXplb2YoX1JlcCkgKyAobSAqIHNpemVvZihfQ2hhclQpKSArIHNpemVvZihfQ2hhclQpCisJLy8gU29sdmluZyBmb3IgbToKKwkvLyBtID0gKChucG9zIC0gc2l6ZW9mKF9SZXApKS9zaXplb2YoQ2hhclQpKSAtIDEKKwkvLyBJbiBhZGRpdGlvbiwgdGhpcyBpbXBsZW1lbnRhdGlvbiBxdWFydGVycyB0aGlzIGFtb3VudC4KKwlzdGF0aWMgY29uc3Qgc2l6ZV90eXBlCV9TX21heF9zaXplOworCXN0YXRpYyBjb25zdCBfQ2hhclQJX1NfdGVybWluYWw7CisKKwkvLyBUaGUgZm9sbG93aW5nIHN0b3JhZ2UgaXMgaW5pdCdkIHRvIDAgYnkgdGhlIGxpbmtlciwgcmVzdWx0aW5nCisgICAgICAgIC8vIChjYXJlZnVsbHkpIGluIGFuIGVtcHR5IHN0cmluZyB3aXRoIG9uZSByZWZlcmVuY2UuCisgICAgICAgIHN0YXRpYyBzaXplX3R5cGUgX1NfZW1wdHlfcmVwX3N0b3JhZ2VbXTsKKworICAgICAgICBzdGF0aWMgX1JlcCYKKyAgICAgICAgX1NfZW1wdHlfcmVwKCkKKyAgICAgICAgeyAKKwkgIC8vIE5COiBNaWxkIGhhY2sgdG8gYXZvaWQgc3RyaWN0LWFsaWFzaW5nIHdhcm5pbmdzLiAgTm90ZSB0aGF0CisJICAvLyBfU19lbXB0eV9yZXBfc3RvcmFnZSBpcyBuZXZlciBtb2RpZmllZCBhbmQgdGhlIHB1bm5pbmcgc2hvdWxkCisJICAvLyBiZSByZWFzb25hYmx5IHNhZmUgaW4gdGhpcyBjYXNlLgorCSAgdm9pZCogX19wID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJl9TX2VtcHR5X3JlcF9zdG9yYWdlKTsKKwkgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxfUmVwKj4oX19wKTsKKwl9CisKKyAgICAgICAgYm9vbAorCV9NX2lzX2xlYWtlZCgpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX3JlZmNvdW50IDwgMDsgfQorCisgICAgICAgIGJvb2wKKwlfTV9pc19zaGFyZWQoKSBjb25zdAorICAgICAgICB7IHJldHVybiB0aGlzLT5fTV9yZWZjb3VudCA+IDA7IH0KKworICAgICAgICB2b2lkCisJX01fc2V0X2xlYWtlZCgpCisgICAgICAgIHsgdGhpcy0+X01fcmVmY291bnQgPSAtMTsgfQorCisgICAgICAgIHZvaWQKKwlfTV9zZXRfc2hhcmFibGUoKQorICAgICAgICB7IHRoaXMtPl9NX3JlZmNvdW50ID0gMDsgfQorCisJdm9pZAorCV9NX3NldF9sZW5ndGhfYW5kX3NoYXJhYmxlKHNpemVfdHlwZSBfX24pCisJeworI2lmbmRlZiBfR0xJQkNYWF9GVUxMWV9EWU5BTUlDX1NUUklORworCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QodGhpcyAhPSAmX1NfZW1wdHlfcmVwKCksIGZhbHNlKSkKKyNlbmRpZgorCSAgICB7CisJICAgICAgdGhpcy0+X01fc2V0X3NoYXJhYmxlKCk7ICAvLyBPbmUgcmVmZXJlbmNlLgorCSAgICAgIHRoaXMtPl9NX2xlbmd0aCA9IF9fbjsKKwkgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKHRoaXMtPl9NX3JlZmRhdGEoKVtfX25dLCBfU190ZXJtaW5hbCk7CisJICAgICAgLy8gZ3Jyci4gKHBlciAyMS4zLjQpCisJICAgICAgLy8gWW91IGNhbm5vdCBsZWF2ZSB0aG9zZSBMV0cgcGVvcGxlIGFsb25lIGZvciBhIHNlY29uZC4KKwkgICAgfQorCX0KKworCV9DaGFyVCoKKwlfTV9yZWZkYXRhKCkgdGhyb3coKQorCXsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8X0NoYXJUKj4odGhpcyArIDEpOyB9CisKKwlfQ2hhclQqCisJX01fZ3JhYihjb25zdCBfQWxsb2MmIF9fYWxsb2MxLCBjb25zdCBfQWxsb2MmIF9fYWxsb2MyKQorCXsKKwkgIHJldHVybiAoIV9NX2lzX2xlYWtlZCgpICYmIF9fYWxsb2MxID09IF9fYWxsb2MyKQorCSAgICAgICAgICA/IF9NX3JlZmNvcHkoKSA6IF9NX2Nsb25lKF9fYWxsb2MxKTsKKwl9CisKKwkvLyBDcmVhdGUgJiBEZXN0cm95CisJc3RhdGljIF9SZXAqCisJX1NfY3JlYXRlKHNpemVfdHlwZSwgc2l6ZV90eXBlLCBjb25zdCBfQWxsb2MmKTsKKworCXZvaWQKKwlfTV9kaXNwb3NlKGNvbnN0IF9BbGxvYyYgX19hKQorCXsKKyNpZm5kZWYgX0dMSUJDWFhfRlVMTFlfRFlOQU1JQ19TVFJJTkcKKwkgIGlmIChfX2J1aWx0aW5fZXhwZWN0KHRoaXMgIT0gJl9TX2VtcHR5X3JlcCgpLCBmYWxzZSkpCisjZW5kaWYKKwkgICAgaWYgKF9fZ251X2N4eDo6X19leGNoYW5nZV9hbmRfYWRkX2Rpc3BhdGNoKCZ0aGlzLT5fTV9yZWZjb3VudCwKKwkJCQkJCSAgICAgICAtMSkgPD0gMCkKKwkgICAgICBfTV9kZXN0cm95KF9fYSk7CisJfSAgLy8gWFhYIE1UCisKKwl2b2lkCisJX01fZGVzdHJveShjb25zdCBfQWxsb2MmKSB0aHJvdygpOworCisJX0NoYXJUKgorCV9NX3JlZmNvcHkoKSB0aHJvdygpCisJeworI2lmbmRlZiBfR0xJQkNYWF9GVUxMWV9EWU5BTUlDX1NUUklORworCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QodGhpcyAhPSAmX1NfZW1wdHlfcmVwKCksIGZhbHNlKSkKKyNlbmRpZgorICAgICAgICAgICAgX19nbnVfY3h4OjpfX2F0b21pY19hZGRfZGlzcGF0Y2goJnRoaXMtPl9NX3JlZmNvdW50LCAxKTsKKwkgIHJldHVybiBfTV9yZWZkYXRhKCk7CisJfSAgLy8gWFhYIE1UCisKKwlfQ2hhclQqCisJX01fY2xvbmUoY29uc3QgX0FsbG9jJiwgc2l6ZV90eXBlIF9fcmVzID0gMCk7CisgICAgICB9OworCisgICAgICAvLyBVc2UgZW1wdHktYmFzZSBvcHRpbWl6YXRpb246IGh0dHA6Ly93d3cuY2FudHJpcC5vcmcvZW1wdHlvcHQuaHRtbAorICAgICAgc3RydWN0IF9BbGxvY19oaWRlciA6IF9BbGxvYworICAgICAgeworCV9BbGxvY19oaWRlcihfQ2hhclQqIF9fZGF0LCBjb25zdCBfQWxsb2MmIF9fYSkKKwk6IF9BbGxvYyhfX2EpLCBfTV9wKF9fZGF0KSB7IH0KKworCV9DaGFyVCogX01fcDsgLy8gVGhlIGFjdHVhbCBkYXRhLgorICAgICAgfTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vIERhdGEgTWVtYmVycyAocHVibGljKToKKyAgICAgIC8vIE5COiBUaGlzIGlzIGFuIHVuc2lnbmVkIHR5cGUsIGFuZCB0aHVzIHJlcHJlc2VudHMgdGhlIG1heGltdW0KKyAgICAgIC8vIHNpemUgdGhhdCB0aGUgYWxsb2NhdG9yIGNhbiBob2xkLgorICAgICAgLy8vICBWYWx1ZSByZXR1cm5lZCBieSB2YXJpb3VzIG1lbWJlciBmdW5jdGlvbnMgd2hlbiB0aGV5IGZhaWwuCisgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlCW5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0xKTsKKworICAgIHByaXZhdGU6CisgICAgICAvLyBEYXRhIE1lbWJlcnMgKHByaXZhdGUpOgorICAgICAgbXV0YWJsZSBfQWxsb2NfaGlkZXIJX01fZGF0YXBsdXM7CisKKyAgICAgIF9DaGFyVCoKKyAgICAgIF9NX2RhdGEoKSBjb25zdAorICAgICAgeyByZXR1cm4gIF9NX2RhdGFwbHVzLl9NX3A7IH0KKworICAgICAgX0NoYXJUKgorICAgICAgX01fZGF0YShfQ2hhclQqIF9fcCkKKyAgICAgIHsgcmV0dXJuIChfTV9kYXRhcGx1cy5fTV9wID0gX19wKTsgfQorCisgICAgICBfUmVwKgorICAgICAgX01fcmVwKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICYoKHJlaW50ZXJwcmV0X2Nhc3Q8X1JlcCo+IChfTV9kYXRhKCkpKVstMV0pOyB9CisKKyAgICAgIC8vIEZvciB0aGUgaW50ZXJuYWwgdXNlIHdlIGhhdmUgZnVuY3Rpb25zIHNpbWlsYXIgdG8gYGJlZ2luJy9gZW5kJworICAgICAgLy8gYnV0IHRoZXkgZG8gbm90IGNhbGwgX01fbGVhay4KKyAgICAgIGl0ZXJhdG9yCisgICAgICBfTV9pYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgX01faWVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2xlYWsoKSAgICAvLyBmb3IgdXNlIGluIGJlZ2luKCkgJiBub24tY29uc3Qgb3BbXQorICAgICAgeworCWlmICghX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQorCSAgX01fbGVha19oYXJkKCk7CisgICAgICB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgX01fY2hlY2soc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBjaGFyKiBfX3MpIGNvbnN0CisgICAgICB7CisJaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQorCSAgX190aHJvd19vdXRfb2ZfcmFuZ2UoX19OKF9fcykpOworCXJldHVybiBfX3BvczsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01fY2hlY2tfbGVuZ3RoKHNpemVfdHlwZSBfX24xLCBzaXplX3R5cGUgX19uMiwgY29uc3QgY2hhciogX19zKSBjb25zdAorICAgICAgeworCWlmICh0aGlzLT5tYXhfc2l6ZSgpIC0gKHRoaXMtPnNpemUoKSAtIF9fbjEpIDwgX19uMikKKwkgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKF9fTihfX3MpKTsKKyAgICAgIH0KKworICAgICAgLy8gTkI6IF9NX2xpbWl0IGRvZXNuJ3QgY2hlY2sgZm9yIGEgYmFkIF9fcG9zIHZhbHVlLgorICAgICAgc2l6ZV90eXBlCisgICAgICBfTV9saW1pdChzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX29mZikgY29uc3QKKyAgICAgIHsKKwljb25zdCBib29sIF9fdGVzdG9mZiA9ICBfX29mZiA8IHRoaXMtPnNpemUoKSAtIF9fcG9zOworCXJldHVybiBfX3Rlc3RvZmYgPyBfX29mZiA6IHRoaXMtPnNpemUoKSAtIF9fcG9zOworICAgICAgfQorCisgICAgICAvLyBUcnVlIGlmIF9SZXAgYW5kIHNvdXJjZSBkbyBub3Qgb3ZlcmxhcC4KKyAgICAgIGJvb2wKKyAgICAgIF9NX2Rpc2p1bmN0KGNvbnN0IF9DaGFyVCogX19zKSBjb25zdAorICAgICAgeworCXJldHVybiAobGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgpKQorCQl8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpLCBfX3MpKTsKKyAgICAgIH0KKworICAgICAgLy8gV2hlbiBfX24gPSAxIHdheSBmYXN0ZXIgdGhhbiB0aGUgZ2VuZXJhbCBtdWx0aWNoYXIKKyAgICAgIC8vIHRyYWl0c190eXBlOjpjb3B5L21vdmUvYXNzaWduLgorICAgICAgc3RhdGljIHZvaWQKKyAgICAgIF9NX2NvcHkoX0NoYXJUKiBfX2QsIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQorICAgICAgeworCWlmIChfX24gPT0gMSkKKwkgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fZCwgKl9fcyk7CisJZWxzZQorCSAgdHJhaXRzX3R5cGU6OmNvcHkoX19kLCBfX3MsIF9fbik7CisgICAgICB9CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfTV9tb3ZlKF9DaGFyVCogX19kLCBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKKyAgICAgIHsKKwlpZiAoX19uID09IDEpCisJICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX2QsICpfX3MpOworCWVsc2UKKwkgIHRyYWl0c190eXBlOjptb3ZlKF9fZCwgX19zLCBfX24pOwkgIAorICAgICAgfQorCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX01fYXNzaWduKF9DaGFyVCogX19kLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQorICAgICAgeworCWlmIChfX24gPT0gMSkKKwkgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fZCwgX19jKTsKKwllbHNlCisJICB0cmFpdHNfdHlwZTo6YXNzaWduKF9fZCwgX19uLCBfX2MpOwkgIAorICAgICAgfQorCisgICAgICAvLyBfU19jb3B5X2NoYXJzIGlzIGEgc2VwYXJhdGUgdGVtcGxhdGUgdG8gcGVybWl0IHNwZWNpYWxpemF0aW9uCisgICAgICAvLyB0byBvcHRpbWl6ZSBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIHBvaW50ZXJzIGFzIGl0ZXJhdG9ycy4KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JdGVyYXRvcj4KKyAgICAgICAgc3RhdGljIHZvaWQKKyAgICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0l0ZXJhdG9yIF9fazEsIF9JdGVyYXRvciBfX2syKQorICAgICAgICB7CisJICBmb3IgKDsgX19rMSAhPSBfX2syOyArK19fazEsICsrX19wKQorCSAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3AsICpfX2sxKTsgLy8gVGhlc2UgdHlwZXMgYXJlIG9mZi4KKwl9CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBpdGVyYXRvciBfX2sxLCBpdGVyYXRvciBfX2syKQorICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQorCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgY29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikKKyAgICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7IH0KKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9DaGFyVCogX19rMSwgX0NoYXJUKiBfX2syKQorICAgICAgeyBfTV9jb3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBjb25zdCBfQ2hhclQqIF9fazEsIGNvbnN0IF9DaGFyVCogX19rMikKKyAgICAgIHsgX01fY29weShfX3AsIF9fazEsIF9fazIgLSBfX2sxKTsgfQorCisgICAgICBzdGF0aWMgaW50CisgICAgICBfU19jb21wYXJlKHNpemVfdHlwZSBfX24xLCBzaXplX3R5cGUgX19uMikKKyAgICAgIHsKKwljb25zdCBkaWZmZXJlbmNlX3R5cGUgX19kID0gZGlmZmVyZW5jZV90eXBlKF9fbjEgLSBfX24yKTsKKworCWlmIChfX2QgPiBfX2dudV9jeHg6Ol9fbnVtZXJpY190cmFpdHM8aW50Pjo6X19tYXgpCisJICByZXR1cm4gX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPGludD46Ol9fbWF4OworCWVsc2UgaWYgKF9fZCA8IF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxpbnQ+OjpfX21pbikKKwkgIHJldHVybiBfX2dudV9jeHg6Ol9fbnVtZXJpY190cmFpdHM8aW50Pjo6X19taW47CisJZWxzZQorCSAgcmV0dXJuIGludChfX2QpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXplX3R5cGUgX19sZW4yKTsKKworICAgICAgdm9pZAorICAgICAgX01fbGVha19oYXJkKCk7CisKKyAgICAgIHN0YXRpYyBfUmVwJgorICAgICAgX1NfZW1wdHlfcmVwKCkKKyAgICAgIHsgcmV0dXJuIF9SZXA6Ol9TX2VtcHR5X3JlcCgpOyB9CisKKyAgICBwdWJsaWM6CisgICAgICAvLyBDb25zdHJ1Y3QvY29weS9kZXN0cm95OgorICAgICAgLy8gTkI6IFdlIG92ZXJsb2FkIGN0b3JzIGluIHNvbWUgY2FzZXMgaW5zdGVhZCBvZiB1c2luZyBkZWZhdWx0CisgICAgICAvLyBhcmd1bWVudHMsIHBlciAxNy40LjQuNCBwYXJhLiAyIGl0ZW0gMi4KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBEZWZhdWx0IGNvbnN0cnVjdG9yIGNyZWF0ZXMgYW4gZW1wdHkgc3RyaW5nLgorICAgICAgICovCisgICAgICBiYXNpY19zdHJpbmcoKQorI2lmbmRlZiBfR0xJQkNYWF9GVUxMWV9EWU5BTUlDX1NUUklORworICAgICAgOiBfTV9kYXRhcGx1cyhfU19lbXB0eV9yZXAoKS5fTV9yZWZkYXRhKCksIF9BbGxvYygpKSB7IH0KKyNlbHNlCisgICAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChzaXplX3R5cGUoKSwgX0NoYXJUKCksIF9BbGxvYygpKSwgX0FsbG9jKCkpeyB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3QgYW4gZW1wdHkgc3RyaW5nIHVzaW5nIGFsbG9jYXRvciBAYSBhLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxvYyYgX19hKTsKKworICAgICAgLy8gTkI6IHBlciBMV0cgaXNzdWUgNDIsIHNlbWFudGljcyBkaWZmZXJlbnQgZnJvbSBJUzoKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0IHN0cmluZyB3aXRoIGNvcHkgb2YgdmFsdWUgb2YgQGEgc3RyLgorICAgICAgICogIEBwYXJhbSAgc3RyICBTb3VyY2Ugc3RyaW5nLgorICAgICAgICovCisgICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdCBzdHJpbmcgYXMgY29weSBvZiBhIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gIHN0ciAgU291cmNlIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gIHBvcyAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIHRvIGNvcHkgZnJvbS4KKyAgICAgICAqICBAcGFyYW0gIG4gIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGNvcHkgKGRlZmF1bHQgcmVtYWluZGVyKS4KKyAgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKKwkJICAgc2l6ZV90eXBlIF9fbiA9IG5wb3MpOworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3Qgc3RyaW5nIGFzIGNvcHkgb2YgYSBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtICBzdHIgIFNvdXJjZSBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtICBwb3MgIEluZGV4IG9mIGZpcnN0IGNoYXJhY3RlciB0byBjb3B5IGZyb20uCisgICAgICAgKiAgQHBhcmFtICBuICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byBjb3B5LgorICAgICAgICogIEBwYXJhbSAgYSAgQWxsb2NhdG9yIHRvIHVzZS4KKyAgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKKwkJICAgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2EpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdCBzdHJpbmcgaW5pdGlhbGl6ZWQgYnkgYSBjaGFyYWN0ZXIgJWFycmF5LgorICAgICAgICogIEBwYXJhbSAgcyAgU291cmNlIGNoYXJhY3RlciAlYXJyYXkuCisgICAgICAgKiAgQHBhcmFtICBuICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byBjb3B5LgorICAgICAgICogIEBwYXJhbSAgYSAgQWxsb2NhdG9yIHRvIHVzZSAoZGVmYXVsdCBpcyBkZWZhdWx0IGFsbG9jYXRvcikuCisgICAgICAgKgorICAgICAgICogIE5COiBAYSBzIG11c3QgaGF2ZSBhdCBsZWFzdCBAYSBuIGNoYXJhY3RlcnMsICZhcG9zO1xcMCZhcG9zOworICAgICAgICogIGhhcyBubyBzcGVjaWFsIG1lYW5pbmcuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwKKwkJICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdCBzdHJpbmcgYXMgY29weSBvZiBhIEMgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSAgcyAgU291cmNlIEMgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSAgYSAgQWxsb2NhdG9yIHRvIHVzZSAoZGVmYXVsdCBpcyBkZWZhdWx0IGFsbG9jYXRvcikuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdCBzdHJpbmcgYXMgbXVsdGlwbGUgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gIG4gIE51bWJlciBvZiBjaGFyYWN0ZXJzLgorICAgICAgICogIEBwYXJhbSAgYyAgQ2hhcmFjdGVyIHRvIHVzZS4KKyAgICAgICAqICBAcGFyYW0gIGEgIEFsbG9jYXRvciB0byB1c2UgKGRlZmF1bHQgaXMgZGVmYXVsdCBhbGxvY2F0b3IpLgorICAgICAgICovCisgICAgICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBNb3ZlIGNvbnN0cnVjdCBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtICBzdHIgIFNvdXJjZSBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIFRoZSBuZXdseS1jcmVhdGVkIHN0cmluZyBjb250YWlucyB0aGUgZXhhY3QgY29udGVudHMgb2YgQGEgc3RyLgorICAgICAgICogIEBhIHN0ciBpcyBhIHZhbGlkLCBidXQgdW5zcGVjaWZpZWQgc3RyaW5nLgorICAgICAgICoqLworICAgICAgYmFzaWNfc3RyaW5nKGJhc2ljX3N0cmluZyYmIF9fc3RyKQorICAgICAgOiBfTV9kYXRhcGx1cyhfX3N0ci5fTV9kYXRhcGx1cykKKyAgICAgIHsKKyNpZm5kZWYgX0dMSUJDWFhfRlVMTFlfRFlOQU1JQ19TVFJJTkcJCisJX19zdHIuX01fZGF0YShfU19lbXB0eV9yZXAoKS5fTV9yZWZkYXRhKCkpOworI2Vsc2UKKwlfX3N0ci5fTV9kYXRhKF9TX2NvbnN0cnVjdChzaXplX3R5cGUoKSwgX0NoYXJUKCksIGdldF9hbGxvY2F0b3IoKSkpOworI2VuZGlmCisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0IHN0cmluZyBmcm9tIGFuIGluaXRpYWxpemVyICVsaXN0LgorICAgICAgICogIEBwYXJhbSAgbCAgc3RkOjppbml0aWFsaXplcl9saXN0IG9mIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtICBhICBBbGxvY2F0b3IgdG8gdXNlIChkZWZhdWx0IGlzIGRlZmF1bHQgYWxsb2NhdG9yKS4KKyAgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nKGluaXRpYWxpemVyX2xpc3Q8X0NoYXJUPiBfX2wsIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOworI2VuZGlmIC8vIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0IHN0cmluZyBhcyBjb3B5IG9mIGEgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtICBiZWcgIFN0YXJ0IG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSAgZW5kICBFbmQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtICBhICBBbGxvY2F0b3IgdG8gdXNlIChkZWZhdWx0IGlzIGRlZmF1bHQgYWxsb2NhdG9yKS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19lbmQsCisJCSAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRGVzdHJveSB0aGUgc3RyaW5nIGluc3RhbmNlLgorICAgICAgICovCisgICAgICB+YmFzaWNfc3RyaW5nKCkKKyAgICAgIHsgX01fcmVwKCktPl9NX2Rpc3Bvc2UodGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFzc2lnbiB0aGUgdmFsdWUgb2YgQGEgc3RyIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSAgc3RyICBTb3VyY2Ugc3RyaW5nLgorICAgICAgICovCisgICAgICBiYXNpY19zdHJpbmcmCisgICAgICBvcGVyYXRvcj0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgCisgICAgICB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zdHIpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29weSBjb250ZW50cyBvZiBAYSBzIGludG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtICBzICBTb3VyY2UgbnVsbC10ZXJtaW5hdGVkIHN0cmluZy4KKyAgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9DaGFyVCogX19zKSAKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU2V0IHZhbHVlIHRvIHN0cmluZyBvZiBsZW5ndGggMS4KKyAgICAgICAqICBAcGFyYW0gIGMgIFNvdXJjZSBjaGFyYWN0ZXIuCisgICAgICAgKgorICAgICAgICogIEFzc2lnbmluZyB0byBhIGNoYXJhY3RlciBtYWtlcyB0aGlzIHN0cmluZyBsZW5ndGggMSBhbmQKKyAgICAgICAqICAoKnRoaXMpWzBdID09IEBhIGMuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKSAKKyAgICAgIHsgCisJdGhpcy0+YXNzaWduKDEsIF9fYyk7IAorCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE1vdmUgYXNzaWduIHRoZSB2YWx1ZSBvZiBAYSBzdHIgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtICBzdHIgIFNvdXJjZSBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIFRoZSBjb250ZW50cyBvZiBAYSBzdHIgYXJlIG1vdmVkIGludG8gdGhpcyBzdHJpbmcgKHdpdGhvdXQgY29weWluZykuCisgICAgICAgKiAgQGEgc3RyIGlzIGEgdmFsaWQsIGJ1dCB1bnNwZWNpZmllZCBzdHJpbmcuCisgICAgICAgKiovCisgICAgICBiYXNpY19zdHJpbmcmCisgICAgICBvcGVyYXRvcj0oYmFzaWNfc3RyaW5nJiYgX19zdHIpCisgICAgICB7CisJLy8gTkI6IERSIDEyMDQuCisJdGhpcy0+c3dhcChfX3N0cik7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNldCB2YWx1ZSB0byBzdHJpbmcgY29uc3RydWN0ZWQgZnJvbSBpbml0aWFsaXplciAlbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIGwgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdC4KKyAgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8X0NoYXJUPiBfX2wpCisgICAgICB7CisJdGhpcy0+YXNzaWduKF9fbC5iZWdpbigpLCBfX2wuc2l6ZSgpKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisjZW5kaWYgLy8gX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKworICAgICAgLy8gSXRlcmF0b3JzOgorICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBpbgorICAgICAgICogIHRoZSAlc3RyaW5nLiAgVW5zaGFyZXMgdGhlIHN0cmluZy4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkKKyAgICAgIHsKKwlfTV9sZWFrKCk7CisJcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgZmlyc3QKKyAgICAgICAqICBjaGFyYWN0ZXIgaW4gdGhlICVzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9kYXRhKCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIG9uZSBwYXN0IHRoZSBsYXN0CisgICAgICAgKiAgY2hhcmFjdGVyIGluIHRoZSAlc3RyaW5nLiAgVW5zaGFyZXMgdGhlIHN0cmluZy4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpCisgICAgICB7CisJX01fbGVhaygpOworCXJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgb25lIHBhc3QgdGhlCisgICAgICAgKiAgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlICVzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBsYXN0CisgICAgICAgKiAgY2hhcmFjdGVyIGluIHRoZSAlc3RyaW5nLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gcmV2ZXJzZSBlbGVtZW50CisgICAgICAgKiAgb3JkZXIuICBVbnNoYXJlcyB0aGUgc3RyaW5nLgorICAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMKKyAgICAgICAqICB0byB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlICVzdHJpbmcuICBJdGVyYXRpb24gaXMgZG9uZSBpbgorICAgICAgICogIHJldmVyc2UgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+ZW5kKCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gb25lIGJlZm9yZSB0aGUKKyAgICAgICAqICBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlICVzdHJpbmcuICBJdGVyYXRpb24gaXMgZG9uZSBpbiByZXZlcnNlCisgICAgICAgKiAgZWxlbWVudCBvcmRlci4gIFVuc2hhcmVzIHRoZSBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cworICAgICAgICogIHRvIG9uZSBiZWZvcmUgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgJXN0cmluZy4gIEl0ZXJhdGlvbgorICAgICAgICogIGlzIGRvbmUgaW4gcmV2ZXJzZSBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGZpcnN0CisgICAgICAgKiAgY2hhcmFjdGVyIGluIHRoZSAlc3RyaW5nLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHRoaXMtPl9NX2RhdGEoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIG9uZSBwYXN0IHRoZQorICAgICAgICogIGxhc3QgY2hhcmFjdGVyIGluIHRoZSAlc3RyaW5nLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlzLT5fTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzCisgICAgICAgKiAgdG8gdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSAlc3RyaW5nLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4KKyAgICAgICAqICByZXZlcnNlIGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMKKyAgICAgICAqICB0byBvbmUgYmVmb3JlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlICVzdHJpbmcuICBJdGVyYXRpb24KKyAgICAgICAqICBpcyBkb25lIGluIHJldmVyc2UgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQorI2VuZGlmCisKKyAgICBwdWJsaWM6CisgICAgICAvLyBDYXBhY2l0eToKKyAgICAgIC8vLyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZywgbm90IGluY2x1ZGluZyBhbnkKKyAgICAgIC8vLyAgbnVsbC10ZXJtaW5hdGlvbi4KKyAgICAgIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9CisKKyAgICAgIC8vLyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZywgbm90IGluY2x1ZGluZyBhbnkKKyAgICAgIC8vLyAgbnVsbC10ZXJtaW5hdGlvbi4KKyAgICAgIHNpemVfdHlwZQorICAgICAgbGVuZ3RoKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KKworICAgICAgLy8vICBSZXR1cm5zIHRoZSBzaXplKCkgb2YgdGhlIGxhcmdlc3QgcG9zc2libGUgJXN0cmluZy4KKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX1JlcDo6X1NfbWF4X3NpemU7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXNpemVzIHRoZSAlc3RyaW5nIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtICBuICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0aGUgJXN0cmluZyBzaG91bGQgY29udGFpbi4KKyAgICAgICAqICBAcGFyYW0gIGMgIENoYXJhY3RlciB0byBmaWxsIGFueSBuZXcgZWxlbWVudHMuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCAlcmVzaXplIHRoZSAlc3RyaW5nIHRvIHRoZSBzcGVjaWZpZWQKKyAgICAgICAqICBudW1iZXIgb2YgY2hhcmFjdGVycy4gIElmIHRoZSBudW1iZXIgaXMgc21hbGxlciB0aGFuIHRoZQorICAgICAgICogICVzdHJpbmcncyBjdXJyZW50IHNpemUgdGhlICVzdHJpbmcgaXMgdHJ1bmNhdGVkLCBvdGhlcndpc2UKKyAgICAgICAqICB0aGUgJXN0cmluZyBpcyBleHRlbmRlZCBhbmQgbmV3IGVsZW1lbnRzIGFyZSAlc2V0IHRvIEBhIGMuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXNpemVzIHRoZSAlc3RyaW5nIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtICBuICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0aGUgJXN0cmluZyBzaG91bGQgY29udGFpbi4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIHJlc2l6ZSB0aGUgJXN0cmluZyB0byB0aGUgc3BlY2lmaWVkIGxlbmd0aC4gIElmCisgICAgICAgKiAgdGhlIG5ldyBzaXplIGlzIHNtYWxsZXIgdGhhbiB0aGUgJXN0cmluZydzIGN1cnJlbnQgc2l6ZSB0aGUgJXN0cmluZworICAgICAgICogIGlzIHRydW5jYXRlZCwgb3RoZXJ3aXNlIHRoZSAlc3RyaW5nIGlzIGV4dGVuZGVkIGFuZCBuZXcgY2hhcmFjdGVycworICAgICAgICogIGFyZSBkZWZhdWx0LWNvbnN0cnVjdGVkLiAgRm9yIGJhc2ljIHR5cGVzIHN1Y2ggYXMgY2hhciwgdGhpcyBtZWFucworICAgICAgICogIHNldHRpbmcgdGhlbSB0byAwLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNpemUoc2l6ZV90eXBlIF9fbikKKyAgICAgIHsgdGhpcy0+cmVzaXplKF9fbiwgX0NoYXJUKCkpOyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgLy8vICBBIG5vbi1iaW5kaW5nIHJlcXVlc3QgdG8gcmVkdWNlIGNhcGFjaXR5KCkgdG8gc2l6ZSgpLgorICAgICAgdm9pZAorICAgICAgc2hyaW5rX3RvX2ZpdCgpCisgICAgICB7CisJX190cnkKKwkgIHsgcmVzZXJ2ZSgwKTsgfQorCV9fY2F0Y2goLi4uKQorCSAgeyB9CisgICAgICB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCB0aGUgJXN0cmluZyBjYW4gaG9sZAorICAgICAgICogIGJlZm9yZSBuZWVkaW5nIHRvIGFsbG9jYXRlIG1vcmUgbWVtb3J5LgorICAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGNhcGFjaXR5KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9jYXBhY2l0eTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEF0dGVtcHQgdG8gcHJlYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3Igc3BlY2lmaWVkIG51bWJlciBvZgorICAgICAgICogICAgICAgICAgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gIHJlc19hcmcgIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlcXVpcmVkLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIEBhIHJlc19hcmcgZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIHJlc2VydmUgZW5vdWdoIG1lbW9yeSBmb3IgdGhlCisgICAgICAgKiAgJXN0cmluZyB0byBob2xkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMuICBJZiB0aGUKKyAgICAgICAqICBudW1iZXIgcmVxdWVzdGVkIGlzIG1vcmUgdGhhbiBtYXhfc2l6ZSgpLCBsZW5ndGhfZXJyb3IgaXMKKyAgICAgICAqICB0aHJvd24uCisgICAgICAgKgorICAgICAgICogIFRoZSBhZHZhbnRhZ2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyB0aGF0IGlmIG9wdGltYWwgY29kZSBpcyBhCisgICAgICAgKiAgbmVjZXNzaXR5IGFuZCB0aGUgdXNlciBjYW4gZGV0ZXJtaW5lIHRoZSBzdHJpbmcgbGVuZ3RoIHRoYXQgd2lsbCBiZQorICAgICAgICogIHJlcXVpcmVkLCB0aGUgdXNlciBjYW4gcmVzZXJ2ZSB0aGUgbWVtb3J5IGluICVhZHZhbmNlLCBhbmQgdGh1cworICAgICAgICogIHByZXZlbnQgYSBwb3NzaWJsZSByZWFsbG9jYXRpb24gb2YgbWVtb3J5IGFuZCBjb3B5aW5nIG9mICVzdHJpbmcKKyAgICAgICAqICBkYXRhLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNlcnZlKHNpemVfdHlwZSBfX3Jlc19hcmcgPSAwKTsKKworICAgICAgLyoqCisgICAgICAgKiAgRXJhc2VzIHRoZSBzdHJpbmcsIG1ha2luZyBpdCBlbXB0eS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgY2xlYXIoKQorICAgICAgeyBfTV9tdXRhdGUoMCwgdGhpcy0+c2l6ZSgpLCAwKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIHRydWUgaWYgdGhlICVzdHJpbmcgaXMgZW1wdHkuICBFcXVpdmFsZW50IHRvIAorICAgICAgICogIDxjb2RlPip0aGlzID09ICIiPC9jb2RlPi4KKyAgICAgICAqLworICAgICAgYm9vbAorICAgICAgZW1wdHkoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+c2l6ZSgpID09IDA7IH0KKworICAgICAgLy8gRWxlbWVudCBhY2Nlc3M6CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFN1YnNjcmlwdCBhY2Nlc3MgdG8gdGhlIGRhdGEgY29udGFpbmVkIGluIHRoZSAlc3RyaW5nLgorICAgICAgICogIEBwYXJhbSAgcG9zICBUaGUgaW5kZXggb2YgdGhlIGNoYXJhY3RlciB0byBhY2Nlc3MuCisgICAgICAgKiAgQHJldHVybiAgUmVhZC1vbmx5IChjb25zdGFudCkgcmVmZXJlbmNlIHRvIHRoZSBjaGFyYWN0ZXIuCisgICAgICAgKgorICAgICAgICogIFRoaXMgb3BlcmF0b3IgYWxsb3dzIGZvciBlYXN5LCBhcnJheS1zdHlsZSwgZGF0YSBhY2Nlc3MuCisgICAgICAgKiAgTm90ZSB0aGF0IGRhdGEgYWNjZXNzIHdpdGggdGhpcyBvcGVyYXRvciBpcyB1bmNoZWNrZWQgYW5kCisgICAgICAgKiAgb3V0X29mX3JhbmdlIGxvb2t1cHMgYXJlIG5vdCBkZWZpbmVkLiAoRm9yIGNoZWNrZWQgbG9va3VwcworICAgICAgICogIHNlZSBhdCgpLikKKyAgICAgICAqLworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdIChzaXplX3R5cGUgX19wb3MpIGNvbnN0CisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9fcG9zIDw9IHNpemUoKSk7CisJcmV0dXJuIF9NX2RhdGEoKVtfX3Bvc107CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU3Vic2NyaXB0IGFjY2VzcyB0byB0aGUgZGF0YSBjb250YWluZWQgaW4gdGhlICVzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtICBwb3MgIFRoZSBpbmRleCBvZiB0aGUgY2hhcmFjdGVyIHRvIGFjY2Vzcy4KKyAgICAgICAqICBAcmV0dXJuICBSZWFkL3dyaXRlIHJlZmVyZW5jZSB0byB0aGUgY2hhcmFjdGVyLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIG9wZXJhdG9yIGFsbG93cyBmb3IgZWFzeSwgYXJyYXktc3R5bGUsIGRhdGEgYWNjZXNzLgorICAgICAgICogIE5vdGUgdGhhdCBkYXRhIGFjY2VzcyB3aXRoIHRoaXMgb3BlcmF0b3IgaXMgdW5jaGVja2VkIGFuZAorICAgICAgICogIG91dF9vZl9yYW5nZSBsb29rdXBzIGFyZSBub3QgZGVmaW5lZC4gKEZvciBjaGVja2VkIGxvb2t1cHMKKyAgICAgICAqICBzZWUgYXQoKS4pICBVbnNoYXJlcyB0aGUgc3RyaW5nLgorICAgICAgICovCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fcG9zKQorICAgICAgeworICAgICAgICAvLyBhbGxvdyBwb3MgPT0gc2l6ZSgpIGFzIHYzIGV4dGVuc2lvbjoKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoX19wb3MgPD0gc2l6ZSgpKTsKKyAgICAgICAgLy8gYnV0IGJlIHN0cmljdCBpbiBwZWRhbnRpYyBtb2RlOgorCV9HTElCQ1hYX0RFQlVHX1BFREFTU0VSVChfX3BvcyA8IHNpemUoKSk7CisJX01fbGVhaygpOworCXJldHVybiBfTV9kYXRhKClbX19wb3NdOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgZGF0YSBjb250YWluZWQgaW4gdGhlICVzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIG4gVGhlIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgdG8gYWNjZXNzLgorICAgICAgICogIEByZXR1cm4gIFJlYWQtb25seSAoY29uc3QpIHJlZmVyZW5jZSB0byB0aGUgY2hhcmFjdGVyLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgIElmIEBhIG4gaXMgYW4gaW52YWxpZCBpbmRleC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBmb3Igc2FmZXIgZGF0YSBhY2Nlc3MuICBUaGUgcGFyYW1ldGVyIGlzCisgICAgICAgKiAgZmlyc3QgY2hlY2tlZCB0aGF0IGl0IGlzIGluIHRoZSByYW5nZSBvZiB0aGUgc3RyaW5nLiAgVGhlIGZ1bmN0aW9uCisgICAgICAgKiAgdGhyb3dzIG91dF9vZl9yYW5nZSBpZiB0aGUgY2hlY2sgZmFpbHMuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsKKwlpZiAoX19uID49IHRoaXMtPnNpemUoKSkKKwkgIF9fdGhyb3dfb3V0X29mX3JhbmdlKF9fTigiYmFzaWNfc3RyaW5nOjphdCIpKTsKKwlyZXR1cm4gX01fZGF0YSgpW19fbl07CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgJXN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gbiBUaGUgaW5kZXggb2YgdGhlIGNoYXJhY3RlciB0byBhY2Nlc3MuCisgICAgICAgKiAgQHJldHVybiAgUmVhZC93cml0ZSByZWZlcmVuY2UgdG8gdGhlIGNoYXJhY3Rlci4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBuIGlzIGFuIGludmFsaWQgaW5kZXguCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgZm9yIHNhZmVyIGRhdGEgYWNjZXNzLiAgVGhlIHBhcmFtZXRlciBpcworICAgICAgICogIGZpcnN0IGNoZWNrZWQgdGhhdCBpdCBpcyBpbiB0aGUgcmFuZ2Ugb2YgdGhlIHN0cmluZy4gIFRoZSBmdW5jdGlvbgorICAgICAgICogIHRocm93cyBvdXRfb2ZfcmFuZ2UgaWYgdGhlIGNoZWNrIGZhaWxzLiAgU3VjY2VzcyByZXN1bHRzIGluCisgICAgICAgKiAgdW5zaGFyaW5nIHRoZSBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIHJlZmVyZW5jZQorICAgICAgYXQoc2l6ZV90eXBlIF9fbikKKyAgICAgIHsKKwlpZiAoX19uID49IHNpemUoKSkKKwkgIF9fdGhyb3dfb3V0X29mX3JhbmdlKF9fTigiYmFzaWNfc3RyaW5nOjphdCIpKTsKKwlfTV9sZWFrKCk7CisJcmV0dXJuIF9NX2RhdGEoKVtfX25dOworICAgICAgfQorCisgICAgICAvLyBNb2RpZmllcnM6CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFwcGVuZCBhIHN0cmluZyB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gc3RyICBUaGUgc3RyaW5nIHRvIGFwcGVuZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIG9wZXJhdG9yKz0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3N0cik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBcHBlbmQgYSBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gcyAgVGhlIEMgc3RyaW5nIHRvIGFwcGVuZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIG9wZXJhdG9yKz0oY29uc3QgX0NoYXJUKiBfX3MpCisgICAgICB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFwcGVuZCBhIGNoYXJhY3Rlci4KKyAgICAgICAqICBAcGFyYW0gYyAgVGhlIGNoYXJhY3RlciB0byBhcHBlbmQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICovCisgICAgICBiYXNpY19zdHJpbmcmCisgICAgICBvcGVyYXRvcis9KF9DaGFyVCBfX2MpCisgICAgICB7IAorCXRoaXMtPnB1c2hfYmFjayhfX2MpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFwcGVuZCBhbiBpbml0aWFsaXplcl9saXN0IG9mIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtIGwgIFRoZSBpbml0aWFsaXplcl9saXN0IG9mIGNoYXJhY3RlcnMgdG8gYmUgYXBwZW5kZWQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICovCisgICAgICBiYXNpY19zdHJpbmcmCisgICAgICBvcGVyYXRvcis9KGluaXRpYWxpemVyX2xpc3Q8X0NoYXJUPiBfX2wpCisgICAgICB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19sLmJlZ2luKCksIF9fbC5zaXplKCkpOyB9CisjZW5kaWYgLy8gX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBcHBlbmQgYSBzdHJpbmcgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIHN0ciAgVGhlIHN0cmluZyB0byBhcHBlbmQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICovCisgICAgICBiYXNpY19zdHJpbmcmCisgICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXBwZW5kIGEgc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBzdHIgIFRoZSBzdHJpbmcgdG8gYXBwZW5kLgorICAgICAgICogIEBwYXJhbSBwb3MgIEluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2Ygc3RyIHRvIGFwcGVuZC4KKyAgICAgICAqICBAcGFyYW0gbiAgVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGFwcGVuZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSBpZiBAYSBwb3MgaXMgbm90IGEgdmFsaWQgaW5kZXguCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gYXBwZW5kcyBAYSBuIGNoYXJhY3RlcnMgZnJvbSBAYSBzdHIgc3RhcnRpbmcgYXQgQGEgcG9zCisgICAgICAgKiAgdG8gdGhpcyBzdHJpbmcuICBJZiBAYSBuIGlzIGlzIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlCisgICAgICAgKiAgY2hhcmFjdGVycyBpbiBAYSBzdHIsIHRoZSByZW1haW5kZXIgb2YgQGEgc3RyIGlzIGFwcGVuZGVkLgorICAgICAgICovCisgICAgICBiYXNpY19zdHJpbmcmCisgICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBcHBlbmQgYSBDIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gcyAgVGhlIEMgc3RyaW5nIHRvIGFwcGVuZC4KKyAgICAgICAqICBAcGFyYW0gbiAgVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGFwcGVuZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbik7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXBwZW5kIGEgQyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIHMgIFRoZSBDIHN0cmluZyB0byBhcHBlbmQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICovCisgICAgICBiYXNpY19zdHJpbmcmCisgICAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MpCisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfX3MpOworCXJldHVybiB0aGlzLT5hcHBlbmQoX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFwcGVuZCBtdWx0aXBsZSBjaGFyYWN0ZXJzLgorICAgICAgICogIEBwYXJhbSBuICBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gYXBwZW5kLgorICAgICAgICogIEBwYXJhbSBjICBUaGUgY2hhcmFjdGVyIHRvIHVzZS4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIEFwcGVuZHMgbiBjb3BpZXMgb2YgYyB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgYXBwZW5kKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOworCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXBwZW5kIGFuIGluaXRpYWxpemVyX2xpc3Qgb2YgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gbCAgVGhlIGluaXRpYWxpemVyX2xpc3Qgb2YgY2hhcmFjdGVycyB0byBhcHBlbmQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICovCisgICAgICBiYXNpY19zdHJpbmcmCisgICAgICBhcHBlbmQoaW5pdGlhbGl6ZXJfbGlzdDxfQ2hhclQ+IF9fbCkKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX2wuYmVnaW4oKSwgX19sLnNpemUoKSk7IH0KKyNlbmRpZiAvLyBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFwcGVuZCBhIHJhbmdlIG9mIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtIGZpcnN0ICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgZmlyc3QgY2hhcmFjdGVyIHRvIGFwcGVuZC4KKyAgICAgICAqICBAcGFyYW0gbGFzdCAgSXRlcmF0b3IgbWFya2luZyB0aGUgZW5kIG9mIHRoZSByYW5nZS4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIEFwcGVuZHMgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW2ZpcnN0LGxhc3QpIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgICBhcHBlbmQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXBwZW5kIGEgc2luZ2xlIGNoYXJhY3Rlci4KKyAgICAgICAqICBAcGFyYW0gYyAgQ2hhcmFjdGVyIHRvIGFwcGVuZC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcHVzaF9iYWNrKF9DaGFyVCBfX2MpCisgICAgICB7IAorCWNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IDEgKyB0aGlzLT5zaXplKCk7CisJaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCisJICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKKwl0cmFpdHNfdHlwZTo6YXNzaWduKF9NX2RhdGEoKVt0aGlzLT5zaXplKCldLCBfX2MpOworCV9NX3JlcCgpLT5fTV9zZXRfbGVuZ3RoX2FuZF9zaGFyYWJsZShfX2xlbik7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU2V0IHZhbHVlIHRvIGNvbnRlbnRzIG9mIGFub3RoZXIgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSAgc3RyICBTb3VyY2Ugc3RyaW5nIHRvIHVzZS4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNldCB2YWx1ZSB0byBjb250ZW50cyBvZiBhbm90aGVyIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gIHN0ciAgU291cmNlIHN0cmluZyB0byB1c2UuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhpcyBzdHJpbmcgdG8gdGhlIGV4YWN0IGNvbnRlbnRzIG9mIEBhIHN0ci4KKyAgICAgICAqICBAYSBzdHIgaXMgYSB2YWxpZCwgYnV0IHVuc3BlY2lmaWVkIHN0cmluZy4KKyAgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgYXNzaWduKGJhc2ljX3N0cmluZyYmIF9fc3RyKQorICAgICAgeworCXRoaXMtPnN3YXAoX19zdHIpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyNlbmRpZiAvLyBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNldCB2YWx1ZSB0byBhIHN1YnN0cmluZyBvZiBhIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gc3RyICBUaGUgc3RyaW5nIHRvIHVzZS4KKyAgICAgICAqICBAcGFyYW0gcG9zICBJbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHN0ci4KKyAgICAgICAqICBAcGFyYW0gbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gdXNlLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlIGlmIEBhIHBvcyBpcyBub3QgYSB2YWxpZCBpbmRleC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoaXMgc3RyaW5nIHRvIHRoZSBzdWJzdHJpbmcgb2YgQGEgc3RyIGNvbnNpc3RpbmcKKyAgICAgICAqICBvZiBAYSBuIGNoYXJhY3RlcnMgYXQgQGEgcG9zLiAgSWYgQGEgbiBpcyBpcyBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyCisgICAgICAgKiAgb2YgYXZhaWxhYmxlIGNoYXJhY3RlcnMgaW4gQGEgc3RyLCB0aGUgcmVtYWluZGVyIG9mIEBhIHN0ciBpcyB1c2VkLgorICAgICAgICovCisgICAgICBiYXNpY19zdHJpbmcmCisgICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQorICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fc3RyLl9NX2RhdGEoKQorCQkJICAgICsgX19zdHIuX01fY2hlY2soX19wb3MsICJiYXNpY19zdHJpbmc6OmFzc2lnbiIpLAorCQkJICAgIF9fc3RyLl9NX2xpbWl0KF9fcG9zLCBfX24pKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNldCB2YWx1ZSB0byBhIEMgc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBzICBUaGUgQyBzdHJpbmcgdG8gdXNlLgorICAgICAgICogIEBwYXJhbSBuICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byB1c2UuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHZhbHVlIG9mIHRoaXMgc3RyaW5nIHRvIHRoZSBmaXJzdCBAYSBuCisgICAgICAgKiAgY2hhcmFjdGVycyBvZiBAYSBzLiAgSWYgQGEgbiBpcyBpcyBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mCisgICAgICAgKiAgYXZhaWxhYmxlIGNoYXJhY3RlcnMgaW4gQGEgcywgdGhlIHJlbWFpbmRlciBvZiBAYSBzIGlzIHVzZWQuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIGFzc2lnbihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbik7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU2V0IHZhbHVlIHRvIGNvbnRlbnRzIG9mIGEgQyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIHMgIFRoZSBDIHN0cmluZyB0byB1c2UuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHZhbHVlIG9mIHRoaXMgc3RyaW5nIHRvIHRoZSB2YWx1ZSBvZiBAYSBzLgorICAgICAgICogIFRoZSBkYXRhIGlzIGNvcGllZCwgc28gdGhlcmUgaXMgbm8gZGVwZW5kZW5jZSBvbiBAYSBzIG9uY2UgdGhlCisgICAgICAgKiAgZnVuY3Rpb24gcmV0dXJucy4KKyAgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgYXNzaWduKGNvbnN0IF9DaGFyVCogX19zKQorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmcoX19zKTsKKwlyZXR1cm4gdGhpcy0+YXNzaWduKF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTZXQgdmFsdWUgdG8gbXVsdGlwbGUgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gbiAgTGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBjICBUaGUgY2hhcmFjdGVyIHRvIHVzZS4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgdmFsdWUgb2YgdGhpcyBzdHJpbmcgdG8gQGEgbiBjb3BpZXMgb2YKKyAgICAgICAqICBjaGFyYWN0ZXIgQGEgYy4KKyAgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCisgICAgICB7IHJldHVybiBfTV9yZXBsYWNlX2F1eChzaXplX3R5cGUoMCksIHRoaXMtPnNpemUoKSwgX19uLCBfX2MpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU2V0IHZhbHVlIHRvIGEgcmFuZ2Ugb2YgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gZmlyc3QgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIHRoZSBmaXJzdCBjaGFyYWN0ZXIgdG8gYXBwZW5kLgorICAgICAgICogIEBwYXJhbSBsYXN0ICBJdGVyYXRvciBtYXJraW5nIHRoZSBlbmQgb2YgdGhlIHJhbmdlLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiAgU2V0cyB2YWx1ZSBvZiBzdHJpbmcgdG8gY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW2ZpcnN0LGxhc3QpLgorICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBiYXNpY19zdHJpbmcmCisgICAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19maXJzdCwgX19sYXN0KTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU2V0IHZhbHVlIHRvIGFuIGluaXRpYWxpemVyX2xpc3Qgb2YgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gbCAgVGhlIGluaXRpYWxpemVyX2xpc3Qgb2YgY2hhcmFjdGVycyB0byBhc3NpZ24uCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICovCisgICAgICBiYXNpY19zdHJpbmcmCisgICAgICBhc3NpZ24oaW5pdGlhbGl6ZXJfbGlzdDxfQ2hhclQ+IF9fbCkKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX2wuYmVnaW4oKSwgX19sLnNpemUoKSk7IH0KKyNlbmRpZiAvLyBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydCBtdWx0aXBsZSBjaGFyYWN0ZXJzLgorICAgICAgICogIEBwYXJhbSBwICBJdGVyYXRvciByZWZlcmVuY2luZyBsb2NhdGlvbiBpbiBzdHJpbmcgdG8gaW5zZXJ0IGF0LgorICAgICAgICogIEBwYXJhbSBuICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byBpbnNlcnQKKyAgICAgICAqICBAcGFyYW0gYyAgVGhlIGNoYXJhY3RlciB0byBpbnNlcnQuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKgorICAgICAgICogIEluc2VydHMgQGEgbiBjb3BpZXMgb2YgY2hhcmFjdGVyIEBhIGMgc3RhcnRpbmcgYXQgdGhlIHBvc2l0aW9uCisgICAgICAgKiAgcmVmZXJlbmNlZCBieSBpdGVyYXRvciBAYSBwLiAgSWYgYWRkaW5nIGNoYXJhY3RlcnMgY2F1c2VzIHRoZSBsZW5ndGgKKyAgICAgICAqICB0byBleGNlZWQgbWF4X3NpemUoKSwgbGVuZ3RoX2Vycm9yIGlzIHRocm93bi4gIFRoZSB2YWx1ZSBvZiB0aGUKKyAgICAgICAqICBzdHJpbmcgZG9lc24ndCBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCisgICAgICB7CXRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fbiwgX19jKTsgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnQgYSByYW5nZSBvZiBjaGFyYWN0ZXJzLgorICAgICAgICogIEBwYXJhbSBwICBJdGVyYXRvciByZWZlcmVuY2luZyBsb2NhdGlvbiBpbiBzdHJpbmcgdG8gaW5zZXJ0IGF0LgorICAgICAgICogIEBwYXJhbSBiZWcgIFN0YXJ0IG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBlbmQgIEVuZCBvZiByYW5nZS4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgSW5zZXJ0cyBjaGFyYWN0ZXJzIGluIHJhbmdlIFtiZWcsZW5kKS4gIElmIGFkZGluZyBjaGFyYWN0ZXJzIGNhdXNlcworICAgICAgICogIHRoZSBsZW5ndGggdG8gZXhjZWVkIG1heF9zaXplKCksIGxlbmd0aF9lcnJvciBpcyB0aHJvd24uICBUaGUgdmFsdWUKKyAgICAgICAqICBvZiB0aGUgc3RyaW5nIGRvZXNuJ3QgY2hhbmdlIGlmIGFuIGVycm9yIGlzIHRocm93bi4KKyAgICAgICovCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19lbmQpCisgICAgICAgIHsgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19iZWcsIF9fZW5kKTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW5zZXJ0IGFuIGluaXRpYWxpemVyX2xpc3Qgb2YgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gcCAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgbG9jYXRpb24gaW4gc3RyaW5nIHRvIGluc2VydCBhdC4KKyAgICAgICAqICBAcGFyYW0gbCAgVGhlIGluaXRpYWxpemVyX2xpc3Qgb2YgY2hhcmFjdGVycyB0byBpbnNlcnQuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIGluaXRpYWxpemVyX2xpc3Q8X0NoYXJUPiBfX2wpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfUEVEQVNTRVJUKF9fcCA+PSBfTV9pYmVnaW4oKSAmJiBfX3AgPD0gX01faWVuZCgpKTsKKwl0aGlzLT5pbnNlcnQoX19wIC0gX01faWJlZ2luKCksIF9fbC5iZWdpbigpLCBfX2wuc2l6ZSgpKTsKKyAgICAgIH0KKyNlbmRpZiAvLyBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydCB2YWx1ZSBvZiBhIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gcG9zMSAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgbG9jYXRpb24gaW4gc3RyaW5nIHRvIGluc2VydCBhdC4KKyAgICAgICAqICBAcGFyYW0gc3RyICBUaGUgc3RyaW5nIHRvIGluc2VydC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKgorICAgICAgICogIEluc2VydHMgdmFsdWUgb2YgQGEgc3RyIHN0YXJ0aW5nIGF0IEBhIHBvczEuICBJZiBhZGRpbmcgY2hhcmFjdGVycworICAgICAgICogIGNhdXNlcyB0aGUgbGVuZ3RoIHRvIGV4Y2VlZCBtYXhfc2l6ZSgpLCBsZW5ndGhfZXJyb3IgaXMgdGhyb3duLiAgVGhlCisgICAgICAgKiAgdmFsdWUgb2YgdGhlIHN0cmluZyBkb2Vzbid0IGNoYW5nZSBpZiBhbiBlcnJvciBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCisgICAgICB7IHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MxLCBfX3N0ciwgc2l6ZV90eXBlKDApLCBfX3N0ci5zaXplKCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW5zZXJ0IGEgc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBwb3MxICBJdGVyYXRvciByZWZlcmVuY2luZyBsb2NhdGlvbiBpbiBzdHJpbmcgdG8gaW5zZXJ0IGF0LgorICAgICAgICogIEBwYXJhbSBzdHIgIFRoZSBzdHJpbmcgdG8gaW5zZXJ0LgorICAgICAgICogIEBwYXJhbSBwb3MyICBTdGFydCBvZiBjaGFyYWN0ZXJzIGluIHN0ciB0byBpbnNlcnQuCisgICAgICAgKiAgQHBhcmFtIG4gIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGluc2VydC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgQGEgcG9zMSA+IHNpemUoKSBvcgorICAgICAgICogIEBhIHBvczIgPiBAYSBzdHIuc2l6ZSgpLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBhdCBAYSBwb3MxLCBpbnNlcnQgQGEgbiBjaGFyYWN0ZXIgb2YgQGEgc3RyIGJlZ2lubmluZyB3aXRoCisgICAgICAgKiAgQGEgcG9zMi4gIElmIGFkZGluZyBjaGFyYWN0ZXJzIGNhdXNlcyB0aGUgbGVuZ3RoIHRvIGV4Y2VlZAorICAgICAgICogIG1heF9zaXplKCksIGxlbmd0aF9lcnJvciBpcyB0aHJvd24uICBJZiBAYSBwb3MxIGlzIGJleW9uZCB0aGUgZW5kIG9mCisgICAgICAgKiAgdGhpcyBzdHJpbmcgb3IgQGEgcG9zMiBpcyBiZXlvbmQgdGhlIGVuZCBvZiBAYSBzdHIsIG91dF9vZl9yYW5nZSBpcworICAgICAgICogIHRocm93bi4gIFRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nIGRvZXNuJ3QgY2hhbmdlIGlmIGFuIGVycm9yIGlzCisgICAgICAgKiAgdGhyb3duLgorICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAorCSAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbikKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmluc2VydChfX3BvczEsIF9fc3RyLl9NX2RhdGEoKQorCQkJICAgICsgX19zdHIuX01fY2hlY2soX19wb3MyLCAiYmFzaWNfc3RyaW5nOjppbnNlcnQiKSwKKwkJCSAgICBfX3N0ci5fTV9saW1pdChfX3BvczIsIF9fbikpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW5zZXJ0IGEgQyBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIHBvcyAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgbG9jYXRpb24gaW4gc3RyaW5nIHRvIGluc2VydCBhdC4KKyAgICAgICAqICBAcGFyYW0gcyAgVGhlIEMgc3RyaW5nIHRvIGluc2VydC4KKyAgICAgICAqICBAcGFyYW0gbiAgVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGluc2VydC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgQGEgcG9zIGlzIGJleW9uZCB0aGUgZW5kIG9mIHRoaXMKKyAgICAgICAqICBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIEluc2VydHMgdGhlIGZpcnN0IEBhIG4gY2hhcmFjdGVycyBvZiBAYSBzIHN0YXJ0aW5nIGF0IEBhIHBvcy4gIElmCisgICAgICAgKiAgYWRkaW5nIGNoYXJhY3RlcnMgY2F1c2VzIHRoZSBsZW5ndGggdG8gZXhjZWVkIG1heF9zaXplKCksCisgICAgICAgKiAgbGVuZ3RoX2Vycm9yIGlzIHRocm93bi4gIElmIEBhIHBvcyBpcyBiZXlvbmQgZW5kKCksIG91dF9vZl9yYW5nZSBpcworICAgICAgICogIHRocm93bi4gIFRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nIGRvZXNuJ3QgY2hhbmdlIGlmIGFuIGVycm9yIGlzCisgICAgICAgKiAgdGhyb3duLgorICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnQgYSBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gcG9zICBJdGVyYXRvciByZWZlcmVuY2luZyBsb2NhdGlvbiBpbiBzdHJpbmcgdG8gaW5zZXJ0IGF0LgorICAgICAgICogIEBwYXJhbSBzICBUaGUgQyBzdHJpbmcgdG8gaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBwb3MgaXMgYmV5b25kIHRoZSBlbmQgb2YgdGhpcworICAgICAgICogIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiAgSW5zZXJ0cyB0aGUgZmlyc3QgQGEgbiBjaGFyYWN0ZXJzIG9mIEBhIHMgc3RhcnRpbmcgYXQgQGEgcG9zLiAgSWYKKyAgICAgICAqICBhZGRpbmcgY2hhcmFjdGVycyBjYXVzZXMgdGhlIGxlbmd0aCB0byBleGNlZWQgbWF4X3NpemUoKSwKKyAgICAgICAqICBsZW5ndGhfZXJyb3IgaXMgdGhyb3duLiAgSWYgQGEgcG9zIGlzIGJleW9uZCBlbmQoKSwgb3V0X29mX3JhbmdlIGlzCisgICAgICAgKiAgdGhyb3duLiAgVGhlIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndCBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMKKyAgICAgICAqICB0aHJvd24uCisgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MpCisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfX3MpOworCXJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnQgbXVsdGlwbGUgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gcG9zICBJbmRleCBpbiBzdHJpbmcgdG8gaW5zZXJ0IGF0LgorICAgICAgICogIEBwYXJhbSBuICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byBpbnNlcnQKKyAgICAgICAqICBAcGFyYW0gYyAgVGhlIGNoYXJhY3RlciB0byBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIG5ldyBsZW5ndGggZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgIElmIEBhIHBvcyBpcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGlzCisgICAgICAgKiAgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBJbnNlcnRzIEBhIG4gY29waWVzIG9mIGNoYXJhY3RlciBAYSBjIHN0YXJ0aW5nIGF0IGluZGV4IEBhIHBvcy4gIElmCisgICAgICAgKiAgYWRkaW5nIGNoYXJhY3RlcnMgY2F1c2VzIHRoZSBsZW5ndGggdG8gZXhjZWVkIG1heF9zaXplKCksCisgICAgICAgKiAgbGVuZ3RoX2Vycm9yIGlzIHRocm93bi4gIElmIEBhIHBvcyA+IGxlbmd0aCgpLCBvdXRfb2ZfcmFuZ2UgaXMKKyAgICAgICAqICB0aHJvd24uICBUaGUgdmFsdWUgb2YgdGhlIHN0cmluZyBkb2Vzbid0IGNoYW5nZSBpZiBhbiBlcnJvciBpcworICAgICAgICogIHRocm93bi4KKyAgICAgICovCisgICAgICBiYXNpY19zdHJpbmcmCisgICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQorICAgICAgeyByZXR1cm4gX01fcmVwbGFjZV9hdXgoX01fY2hlY2soX19wb3MsICJiYXNpY19zdHJpbmc6Omluc2VydCIpLAorCQkJICAgICAgc2l6ZV90eXBlKDApLCBfX24sIF9fYyk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnQgb25lIGNoYXJhY3Rlci4KKyAgICAgICAqICBAcGFyYW0gcCAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgcG9zaXRpb24gaW4gc3RyaW5nIHRvIGluc2VydCBhdC4KKyAgICAgICAqICBAcGFyYW0gYyAgVGhlIGNoYXJhY3RlciB0byBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgbmV3bHkgaW5zZXJ0ZWQgY2hhci4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgSW5zZXJ0cyBjaGFyYWN0ZXIgQGEgYyBhdCBwb3NpdGlvbiByZWZlcmVuY2VkIGJ5IEBhIHAuICBJZiBhZGRpbmcKKyAgICAgICAqICBjaGFyYWN0ZXIgY2F1c2VzIHRoZSBsZW5ndGggdG8gZXhjZWVkIG1heF9zaXplKCksIGxlbmd0aF9lcnJvciBpcworICAgICAgICogIHRocm93bi4gIElmIEBhIHAgaXMgYmV5b25kIGVuZCBvZiBzdHJpbmcsIG91dF9vZl9yYW5nZSBpcyB0aHJvd24uCisgICAgICAgKiAgVGhlIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndCBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBfQ2hhclQgX19jKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1BFREFTU0VSVChfX3AgPj0gX01faWJlZ2luKCkgJiYgX19wIDw9IF9NX2llbmQoKSk7CisJY29uc3Qgc2l6ZV90eXBlIF9fcG9zID0gX19wIC0gX01faWJlZ2luKCk7CisJX01fcmVwbGFjZV9hdXgoX19wb3MsIHNpemVfdHlwZSgwKSwgc2l6ZV90eXBlKDEpLCBfX2MpOworCV9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CisJcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSArIF9fcG9zKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZW1vdmUgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gcG9zICBJbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXIgdG8gcmVtb3ZlIChkZWZhdWx0IDApLgorICAgICAgICogIEBwYXJhbSBuICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byByZW1vdmUgKGRlZmF1bHQgcmVtYWluZGVyKS4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgQGEgcG9zIGlzIGJleW9uZCB0aGUgZW5kIG9mIHRoaXMKKyAgICAgICAqICBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgQGEgbiBjaGFyYWN0ZXJzIGZyb20gdGhpcyBzdHJpbmcgc3RhcnRpbmcgYXQgQGEgcG9zLiAgVGhlCisgICAgICAgKiAgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgaXMgcmVkdWNlZCBieSBAYSBuLiAgSWYgdGhlcmUgYXJlIDwgQGEgbgorICAgICAgICogIGNoYXJhY3RlcnMgdG8gcmVtb3ZlLCB0aGUgcmVtYWluZGVyIG9mIHRoZSBzdHJpbmcgaXMgdHJ1bmNhdGVkLiAgSWYKKyAgICAgICAqICBAYSBwIGlzIGJleW9uZCBlbmQgb2Ygc3RyaW5nLCBvdXRfb2ZfcmFuZ2UgaXMgdGhyb3duLiAgVGhlIHZhbHVlIG9mCisgICAgICAgKiAgdGhlIHN0cmluZyBkb2Vzbid0IGNoYW5nZSBpZiBhbiBlcnJvciBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgZXJhc2Uoc2l6ZV90eXBlIF9fcG9zID0gMCwgc2l6ZV90eXBlIF9fbiA9IG5wb3MpCisgICAgICB7IAorCV9NX211dGF0ZShfTV9jaGVjayhfX3BvcywgImJhc2ljX3N0cmluZzo6ZXJhc2UiKSwKKwkJICBfTV9saW1pdChfX3BvcywgX19uKSwgc2l6ZV90eXBlKDApKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVtb3ZlIG9uZSBjaGFyYWN0ZXIuCisgICAgICAgKiAgQHBhcmFtIHBvc2l0aW9uICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgY2hhcmFjdGVyIHRvIHJlbW92ZS4KKyAgICAgICAqICBAcmV0dXJuICBpdGVyYXRvciByZWZlcmVuY2luZyBzYW1lIGxvY2F0aW9uIGFmdGVyIHJlbW92YWwuCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgdGhlIGNoYXJhY3RlciBhdCBAYSBwb3NpdGlvbiBmcm9tIHRoaXMgc3RyaW5nLiBUaGUgdmFsdWUKKyAgICAgICAqICBvZiB0aGUgc3RyaW5nIGRvZXNuJ3QgY2hhbmdlIGlmIGFuIGVycm9yIGlzIHRocm93bi4KKyAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19QRURBU1NFUlQoX19wb3NpdGlvbiA+PSBfTV9pYmVnaW4oKQorCQkJCSAmJiBfX3Bvc2l0aW9uIDwgX01faWVuZCgpKTsKKwljb25zdCBzaXplX3R5cGUgX19wb3MgPSBfX3Bvc2l0aW9uIC0gX01faWJlZ2luKCk7CisJX01fbXV0YXRlKF9fcG9zLCBzaXplX3R5cGUoMSksIHNpemVfdHlwZSgwKSk7CisJX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKKwlyZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgX19wb3MpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZSBhIHJhbmdlIG9mIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtIGZpcnN0ICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgZmlyc3QgY2hhcmFjdGVyIHRvIHJlbW92ZS4KKyAgICAgICAqICBAcGFyYW0gbGFzdCAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgdGhlIGVuZCBvZiB0aGUgcmFuZ2UuCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgbG9jYXRpb24gb2YgZmlyc3QgYWZ0ZXIgcmVtb3ZhbC4KKyAgICAgICAqCisgICAgICAgKiAgUmVtb3ZlcyB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW2ZpcnN0LGxhc3QpIGZyb20gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgVGhlIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndCBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpOworIAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXBsYWNlIGNoYXJhY3RlcnMgd2l0aCB2YWx1ZSBmcm9tIGFub3RoZXIgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBwb3MgIEluZGV4IG9mIGZpcnN0IGNoYXJhY3RlciB0byByZXBsYWNlLgorICAgICAgICogIEBwYXJhbSBuICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byBiZSByZXBsYWNlZC4KKyAgICAgICAqICBAcGFyYW0gc3RyICBTdHJpbmcgdG8gaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBwb3MgaXMgYmV5b25kIHRoZSBlbmQgb2YgdGhpcworICAgICAgICogIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgUmVtb3ZlcyB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW3Bvcyxwb3MrbikgZnJvbSB0aGlzIHN0cmluZy4KKyAgICAgICAqICBJbiBwbGFjZSwgdGhlIHZhbHVlIG9mIEBhIHN0ciBpcyBpbnNlcnRlZC4gIElmIEBhIHBvcyBpcyBiZXlvbmQgZW5kCisgICAgICAgKiAgb2Ygc3RyaW5nLCBvdXRfb2ZfcmFuZ2UgaXMgdGhyb3duLiAgSWYgdGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0CisgICAgICAgKiAgZXhjZWVkcyBtYXhfc2l6ZSgpLCBsZW5ndGhfZXJyb3IgaXMgdGhyb3duLiAgVGhlIHZhbHVlIG9mIHRoZSBzdHJpbmcKKyAgICAgICAqICBkb2Vzbid0IGNoYW5nZSBpZiBhbiBlcnJvciBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCisgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBfX24sIF9fc3RyLl9NX2RhdGEoKSwgX19zdHIuc2l6ZSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlcGxhY2UgY2hhcmFjdGVycyB3aXRoIHZhbHVlIGZyb20gYW5vdGhlciBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIHBvczEgIEluZGV4IG9mIGZpcnN0IGNoYXJhY3RlciB0byByZXBsYWNlLgorICAgICAgICogIEBwYXJhbSBuMSAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gYmUgcmVwbGFjZWQuCisgICAgICAgKiAgQHBhcmFtIHN0ciAgU3RyaW5nIHRvIGluc2VydC4KKyAgICAgICAqICBAcGFyYW0gcG9zMiAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIG9mIHN0ciB0byB1c2UuCisgICAgICAgKiAgQHBhcmFtIG4yICBOdW1iZXIgb2YgY2hhcmFjdGVycyBmcm9tIHN0ciB0byB1c2UuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgIElmIEBhIHBvczEgPiBzaXplKCkgb3IgQGEgcG9zMiA+CisgICAgICAgKiAgc3RyLnNpemUoKS4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgUmVtb3ZlcyB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW3BvczEscG9zMSArIG4pIGZyb20gdGhpcworICAgICAgICogIHN0cmluZy4gIEluIHBsYWNlLCB0aGUgdmFsdWUgb2YgQGEgc3RyIGlzIGluc2VydGVkLiAgSWYgQGEgcG9zIGlzCisgICAgICAgKiAgYmV5b25kIGVuZCBvZiBzdHJpbmcsIG91dF9vZl9yYW5nZSBpcyB0aHJvd24uICBJZiB0aGUgbGVuZ3RoIG9mIHRoZQorICAgICAgICogIHJlc3VsdCBleGNlZWRzIG1heF9zaXplKCksIGxlbmd0aF9lcnJvciBpcyB0aHJvd24uICBUaGUgdmFsdWUgb2YgdGhlCisgICAgICAgKiAgc3RyaW5nIGRvZXNuJ3QgY2hhbmdlIGlmIGFuIGVycm9yIGlzIHRocm93bi4KKyAgICAgICovCisgICAgICBiYXNpY19zdHJpbmcmCisgICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAorCSAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKQorICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvczEsIF9fbjEsIF9fc3RyLl9NX2RhdGEoKQorCQkJICAgICArIF9fc3RyLl9NX2NoZWNrKF9fcG9zMiwgImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpLAorCQkJICAgICBfX3N0ci5fTV9saW1pdChfX3BvczIsIF9fbjIpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlcGxhY2UgY2hhcmFjdGVycyB3aXRoIHZhbHVlIG9mIGEgQyBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIHBvcyAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIG4xICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byBiZSByZXBsYWNlZC4KKyAgICAgICAqICBAcGFyYW0gcyAgQyBzdHJpbmcgdG8gaW5zZXJ0LgorICAgICAgICogIEBwYXJhbSBuMiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgZnJvbSBAYSBzIHRvIHVzZS4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgQGEgcG9zMSA+IHNpemUoKS4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgUmVtb3ZlcyB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW3Bvcyxwb3MgKyBuMSkgZnJvbSB0aGlzIHN0cmluZy4KKyAgICAgICAqICBJbiBwbGFjZSwgdGhlIGZpcnN0IEBhIG4yIGNoYXJhY3RlcnMgb2YgQGEgcyBhcmUgaW5zZXJ0ZWQsIG9yIGFsbAorICAgICAgICogIG9mIEBhIHMgaWYgQGEgbjIgaXMgdG9vIGxhcmdlLiAgSWYgQGEgcG9zIGlzIGJleW9uZCBlbmQgb2Ygc3RyaW5nLAorICAgICAgICogIG91dF9vZl9yYW5nZSBpcyB0aHJvd24uICBJZiB0aGUgbGVuZ3RoIG9mIHJlc3VsdCBleGNlZWRzIG1heF9zaXplKCksCisgICAgICAgKiAgbGVuZ3RoX2Vycm9yIGlzIHRocm93bi4gIFRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nIGRvZXNuJ3QgY2hhbmdlIGlmCisgICAgICAgKiAgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCisJICAgICAgc2l6ZV90eXBlIF9fbjIpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlcGxhY2UgY2hhcmFjdGVycyB3aXRoIHZhbHVlIG9mIGEgQyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIHBvcyAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIG4xICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byBiZSByZXBsYWNlZC4KKyAgICAgICAqICBAcGFyYW0gcyAgQyBzdHJpbmcgdG8gaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBwb3MgPiBzaXplKCkuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFtwb3MscG9zICsgbjEpIGZyb20gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgSW4gcGxhY2UsIHRoZSBjaGFyYWN0ZXJzIG9mIEBhIHMgYXJlIGluc2VydGVkLiAgSWYgQGEgcG9zIGlzIGJleW9uZAorICAgICAgICogIGVuZCBvZiBzdHJpbmcsIG91dF9vZl9yYW5nZSBpcyB0aHJvd24uICBJZiB0aGUgbGVuZ3RoIG9mIHJlc3VsdAorICAgICAgICogIGV4Y2VlZHMgbWF4X3NpemUoKSwgbGVuZ3RoX2Vycm9yIGlzIHRocm93bi4gIFRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nCisgICAgICAgKiAgZG9lc24ndCBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpCisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfX3MpOworCXJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBfX24xLCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVwbGFjZSBjaGFyYWN0ZXJzIHdpdGggbXVsdGlwbGUgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gcG9zICBJbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXIgdG8gcmVwbGFjZS4KKyAgICAgICAqICBAcGFyYW0gbjEgIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlcGxhY2VkLgorICAgICAgICogIEBwYXJhbSBuMiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gaW5zZXJ0LgorICAgICAgICogIEBwYXJhbSBjICBDaGFyYWN0ZXIgdG8gaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBwb3MgPiBzaXplKCkuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFtwb3MscG9zICsgbjEpIGZyb20gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgSW4gcGxhY2UsIEBhIG4yIGNvcGllcyBvZiBAYSBjIGFyZSBpbnNlcnRlZC4gIElmIEBhIHBvcyBpcyBiZXlvbmQKKyAgICAgICAqICBlbmQgb2Ygc3RyaW5nLCBvdXRfb2ZfcmFuZ2UgaXMgdGhyb3duLiAgSWYgdGhlIGxlbmd0aCBvZiByZXN1bHQKKyAgICAgICAqICBleGNlZWRzIG1heF9zaXplKCksIGxlbmd0aF9lcnJvciBpcyB0aHJvd24uICBUaGUgdmFsdWUgb2YgdGhlIHN0cmluZworICAgICAgICogIGRvZXNuJ3QgY2hhbmdlIGlmIGFuIGVycm9yIGlzIHRocm93bi4KKyAgICAgICovCisgICAgICBiYXNpY19zdHJpbmcmCisgICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQorICAgICAgeyByZXR1cm4gX01fcmVwbGFjZV9hdXgoX01fY2hlY2soX19wb3MsICJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKSwKKwkJCSAgICAgIF9NX2xpbWl0KF9fcG9zLCBfX24xKSwgX19uMiwgX19jKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlcGxhY2UgcmFuZ2Ugb2YgY2hhcmFjdGVycyB3aXRoIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gaTEgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIHN0YXJ0IG9mIHJhbmdlIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIGkyICBJdGVyYXRvciByZWZlcmVuY2luZyBlbmQgb2YgcmFuZ2UgdG8gcmVwbGFjZS4KKyAgICAgICAqICBAcGFyYW0gc3RyICBTdHJpbmcgdmFsdWUgdG8gaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgUmVtb3ZlcyB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW2kxLGkyKS4gIEluIHBsYWNlLCB0aGUgdmFsdWUgb2YKKyAgICAgICAqICBAYSBzdHIgaXMgaW5zZXJ0ZWQuICBJZiB0aGUgbGVuZ3RoIG9mIHJlc3VsdCBleGNlZWRzIG1heF9zaXplKCksCisgICAgICAgKiAgbGVuZ3RoX2Vycm9yIGlzIHRocm93bi4gIFRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nIGRvZXNuJ3QgY2hhbmdlIGlmCisgICAgICAgKiAgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKKyAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zdHIuX01fZGF0YSgpLCBfX3N0ci5zaXplKCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVwbGFjZSByYW5nZSBvZiBjaGFyYWN0ZXJzIHdpdGggQyBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIGkxICBJdGVyYXRvciByZWZlcmVuY2luZyBzdGFydCBvZiByYW5nZSB0byByZXBsYWNlLgorICAgICAgICogIEBwYXJhbSBpMiAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgZW5kIG9mIHJhbmdlIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIHMgIEMgc3RyaW5nIHZhbHVlIHRvIGluc2VydC4KKyAgICAgICAqICBAcGFyYW0gbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgZnJvbSBzIHRvIGluc2VydC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFtpMSxpMikuICBJbiBwbGFjZSwgdGhlIGZpcnN0IEBhCisgICAgICAgKiAgbiBjaGFyYWN0ZXJzIG9mIEBhIHMgYXJlIGluc2VydGVkLiAgSWYgdGhlIGxlbmd0aCBvZiByZXN1bHQgZXhjZWVkcworICAgICAgICogIG1heF9zaXplKCksIGxlbmd0aF9lcnJvciBpcyB0aHJvd24uICBUaGUgdmFsdWUgb2YgdGhlIHN0cmluZyBkb2Vzbid0CisgICAgICAgKiAgY2hhbmdlIGlmIGFuIGVycm9yIGlzIHRocm93bi4KKyAgICAgICovCisgICAgICBiYXNpY19zdHJpbmcmCisgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1BFREFTU0VSVChfTV9pYmVnaW4oKSA8PSBfX2kxICYmIF9faTEgPD0gX19pMgorCQkJCSAmJiBfX2kyIDw9IF9NX2llbmQoKSk7CisJcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwgX19zLCBfX24pOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlcGxhY2UgcmFuZ2Ugb2YgY2hhcmFjdGVycyB3aXRoIEMgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBpMSAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgc3RhcnQgb2YgcmFuZ2UgdG8gcmVwbGFjZS4KKyAgICAgICAqICBAcGFyYW0gaTIgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIGVuZCBvZiByYW5nZSB0byByZXBsYWNlLgorICAgICAgICogIEBwYXJhbSBzICBDIHN0cmluZyB2YWx1ZSB0byBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIG5ldyBsZW5ndGggZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICoKKyAgICAgICAqICBSZW1vdmVzIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbaTEsaTIpLiAgSW4gcGxhY2UsIHRoZQorICAgICAgICogIGNoYXJhY3RlcnMgb2YgQGEgcyBhcmUgaW5zZXJ0ZWQuICBJZiB0aGUgbGVuZ3RoIG9mIHJlc3VsdCBleGNlZWRzCisgICAgICAgKiAgbWF4X3NpemUoKSwgbGVuZ3RoX2Vycm9yIGlzIHRocm93bi4gIFRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nIGRvZXNuJ3QKKyAgICAgICAqICBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgX0NoYXJUKiBfX3MpCisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfX3MpOworCXJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXBsYWNlIHJhbmdlIG9mIGNoYXJhY3RlcnMgd2l0aCBtdWx0aXBsZSBjaGFyYWN0ZXJzCisgICAgICAgKiAgQHBhcmFtIGkxICBJdGVyYXRvciByZWZlcmVuY2luZyBzdGFydCBvZiByYW5nZSB0byByZXBsYWNlLgorICAgICAgICogIEBwYXJhbSBpMiAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgZW5kIG9mIHJhbmdlIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIG4gIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGluc2VydC4KKyAgICAgICAqICBAcGFyYW0gYyAgQ2hhcmFjdGVyIHRvIGluc2VydC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFtpMSxpMikuICBJbiBwbGFjZSwgQGEgbiBjb3BpZXMKKyAgICAgICAqICBvZiBAYSBjIGFyZSBpbnNlcnRlZC4gIElmIHRoZSBsZW5ndGggb2YgcmVzdWx0IGV4Y2VlZHMgbWF4X3NpemUoKSwKKyAgICAgICAqICBsZW5ndGhfZXJyb3IgaXMgdGhyb3duLiAgVGhlIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndCBjaGFuZ2UgaWYKKyAgICAgICAqICBhbiBlcnJvciBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1BFREFTU0VSVChfTV9pYmVnaW4oKSA8PSBfX2kxICYmIF9faTEgPD0gX19pMgorCQkJCSAmJiBfX2kyIDw9IF9NX2llbmQoKSk7CisJcmV0dXJuIF9NX3JlcGxhY2VfYXV4KF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsIF9fbiwgX19jKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXBsYWNlIHJhbmdlIG9mIGNoYXJhY3RlcnMgd2l0aCByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gaTEgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIHN0YXJ0IG9mIHJhbmdlIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIGkyICBJdGVyYXRvciByZWZlcmVuY2luZyBlbmQgb2YgcmFuZ2UgdG8gcmVwbGFjZS4KKyAgICAgICAqICBAcGFyYW0gazEgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIHN0YXJ0IG9mIHJhbmdlIHRvIGluc2VydC4KKyAgICAgICAqICBAcGFyYW0gazIgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIGVuZCBvZiByYW5nZSB0byBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIG5ldyBsZW5ndGggZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICoKKyAgICAgICAqICBSZW1vdmVzIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbaTEsaTIpLiAgSW4gcGxhY2UsIGNoYXJhY3RlcnMKKyAgICAgICAqICBpbiB0aGUgcmFuZ2UgW2sxLGsyKSBhcmUgaW5zZXJ0ZWQuICBJZiB0aGUgbGVuZ3RoIG9mIHJlc3VsdCBleGNlZWRzCisgICAgICAgKiAgbWF4X3NpemUoKSwgbGVuZ3RoX2Vycm9yIGlzIHRocm93bi4gIFRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nIGRvZXNuJ3QKKyAgICAgICAqICBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBiYXNpY19zdHJpbmcmCisgICAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKKwkJX0lucHV0SXRlcmF0b3IgX19rMSwgX0lucHV0SXRlcmF0b3IgX19rMikKKyAgICAgICAgeworCSAgX0dMSUJDWFhfREVCVUdfUEVEQVNTRVJUKF9NX2liZWdpbigpIDw9IF9faTEgJiYgX19pMSA8PSBfX2kyCisJCQkJICAgJiYgX19pMiA8PSBfTV9pZW5kKCkpOworCSAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fazEsIF9fazIpOworCSAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Ol9faXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9fdHlwZSBfSW50ZWdyYWw7CisJICByZXR1cm4gX01fcmVwbGFjZV9kaXNwYXRjaChfX2kxLCBfX2kyLCBfX2sxLCBfX2syLCBfSW50ZWdyYWwoKSk7CisJfQorCisgICAgICAvLyBTcGVjaWFsaXphdGlvbnMgZm9yIHRoZSBjb21tb24gY2FzZSBvZiBwb2ludGVyIGFuZCBpdGVyYXRvcjoKKyAgICAgIC8vIHVzZWZ1bCB0byBhdm9pZCB0aGUgb3ZlcmhlYWQgb2YgdGVtcG9yYXJ5IGJ1ZmZlcmluZyBpbiBfTV9yZXBsYWNlLgorICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfQ2hhclQqIF9fazEsIF9DaGFyVCogX19rMikKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19QRURBU1NFUlQoX01faWJlZ2luKCkgPD0gX19pMSAmJiBfX2kxIDw9IF9faTIKKwkJCQkgJiYgX19pMiA8PSBfTV9pZW5kKCkpOworCV9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2sxLCBfX2syKTsKKwlyZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLAorCQkJICAgICBfX2sxLCBfX2syIC0gX19rMSk7CisgICAgICB9CisKKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKKwkgICAgICBjb25zdCBfQ2hhclQqIF9fazEsIGNvbnN0IF9DaGFyVCogX19rMikKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19QRURBU1NFUlQoX01faWJlZ2luKCkgPD0gX19pMSAmJiBfX2kxIDw9IF9faTIKKwkJCQkgJiYgX19pMiA8PSBfTV9pZW5kKCkpOworCV9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2sxLCBfX2syKTsKKwlyZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLAorCQkJICAgICBfX2sxLCBfX2syIC0gX19rMSk7CisgICAgICB9CisKKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgaXRlcmF0b3IgX19rMSwgaXRlcmF0b3IgX19rMikKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19QRURBU1NFUlQoX01faWJlZ2luKCkgPD0gX19pMSAmJiBfX2kxIDw9IF9faTIKKwkJCQkgJiYgX19pMiA8PSBfTV9pZW5kKCkpOworCV9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2sxLCBfX2syKTsKKwlyZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLAorCQkJICAgICBfX2sxLmJhc2UoKSwgX19rMiAtIF9fazEpOworICAgICAgfQorCisgICAgICBiYXNpY19zdHJpbmcmCisgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsCisJICAgICAgY29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19QRURBU1NFUlQoX01faWJlZ2luKCkgPD0gX19pMSAmJiBfX2kxIDw9IF9faTIKKwkJCQkgJiYgX19pMiA8PSBfTV9pZW5kKCkpOworCV9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2sxLCBfX2syKTsKKwlyZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLAorCQkJICAgICBfX2sxLmJhc2UoKSwgX19rMiAtIF9fazEpOworICAgICAgfQorICAgICAgCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVwbGFjZSByYW5nZSBvZiBjaGFyYWN0ZXJzIHdpdGggaW5pdGlhbGl6ZXJfbGlzdC4KKyAgICAgICAqICBAcGFyYW0gaTEgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIHN0YXJ0IG9mIHJhbmdlIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIGkyICBJdGVyYXRvciByZWZlcmVuY2luZyBlbmQgb2YgcmFuZ2UgdG8gcmVwbGFjZS4KKyAgICAgICAqICBAcGFyYW0gbCAgVGhlIGluaXRpYWxpemVyX2xpc3Qgb2YgY2hhcmFjdGVycyB0byBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIG5ldyBsZW5ndGggZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICoKKyAgICAgICAqICBSZW1vdmVzIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbaTEsaTIpLiAgSW4gcGxhY2UsIGNoYXJhY3RlcnMKKyAgICAgICAqICBpbiB0aGUgcmFuZ2UgW2sxLGsyKSBhcmUgaW5zZXJ0ZWQuICBJZiB0aGUgbGVuZ3RoIG9mIHJlc3VsdCBleGNlZWRzCisgICAgICAgKiAgbWF4X3NpemUoKSwgbGVuZ3RoX2Vycm9yIGlzIHRocm93bi4gIFRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nIGRvZXNuJ3QKKyAgICAgICAqICBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLAorCQkJICAgIGluaXRpYWxpemVyX2xpc3Q8X0NoYXJUPiBfX2wpCisgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOyB9CisjZW5kaWYgLy8gX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKworICAgIHByaXZhdGU6CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW50ZWdlcj4KKwliYXNpY19zdHJpbmcmCisJX01fcmVwbGFjZV9kaXNwYXRjaChpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW50ZWdlciBfX24sCisJCQkgICAgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQorICAgICAgICB7IHJldHVybiBfTV9yZXBsYWNlX2F1eChfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLCBfX24sIF9fdmFsKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKwliYXNpY19zdHJpbmcmCisJX01fcmVwbGFjZV9kaXNwYXRjaChpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyYXRvciBfX2sxLAorCQkJICAgIF9JbnB1dEl0ZXJhdG9yIF9fazIsIF9fZmFsc2VfdHlwZSk7CisKKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIF9NX3JlcGxhY2VfYXV4KHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBzaXplX3R5cGUgX19uMiwKKwkJICAgICBfQ2hhclQgX19jKTsKKworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgX01fcmVwbGFjZV9zYWZlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKKwkJICAgICAgc2l6ZV90eXBlIF9fbjIpOworCisgICAgICAvLyBfU19jb25zdHJ1Y3RfYXV4IGlzIHVzZWQgdG8gaW1wbGVtZW50IHRoZSAyMS4zLjEgcGFyYSAxNSB3aGljaAorICAgICAgLy8gcmVxdWlyZXMgc3BlY2lhbCBiZWhhdmlvdXIgaWYgX0luSXRlciBpcyBhbiBpbnRlZ3JhbCB0eXBlCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyYXRvcj4KKyAgICAgICAgc3RhdGljIF9DaGFyVCoKKyAgICAgICAgX1NfY29uc3RydWN0X2F1eChfSW5JdGVyYXRvciBfX2JlZywgX0luSXRlcmF0b3IgX19lbmQsCisJCQkgY29uc3QgX0FsbG9jJiBfX2EsIF9fZmFsc2VfdHlwZSkKKwl7CisgICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0luSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSBfVGFnOworICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EsIF9UYWcoKSk7CisJfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA0MzguIEFtYmlndWl0eSBpbiB0aGUgImRvIHRoZSByaWdodCB0aGluZyIgY2xhdXNlCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW50ZWdlcj4KKyAgICAgICAgc3RhdGljIF9DaGFyVCoKKyAgICAgICAgX1NfY29uc3RydWN0X2F1eChfSW50ZWdlciBfX2JlZywgX0ludGVnZXIgX19lbmQsCisJCQkgY29uc3QgX0FsbG9jJiBfX2EsIF9fdHJ1ZV90eXBlKQorICAgICAgICB7IHJldHVybiBfU19jb25zdHJ1Y3RfYXV4XzIoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2JlZyksCisJCQkJICAgIF9fZW5kLCBfX2EpOyB9CisKKyAgICAgIHN0YXRpYyBfQ2hhclQqCisgICAgICBfU19jb25zdHJ1Y3RfYXV4XzIoc2l6ZV90eXBlIF9fcmVxLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKKyAgICAgIHsgcmV0dXJuIF9TX2NvbnN0cnVjdChfX3JlcSwgX19jLCBfX2EpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXJhdG9yPgorICAgICAgICBzdGF0aWMgX0NoYXJUKgorICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlcmF0b3IgX19iZWcsIF9Jbkl0ZXJhdG9yIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKKwl7CisJICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6X19pc19pbnRlZ2VyPF9Jbkl0ZXJhdG9yPjo6X190eXBlIF9JbnRlZ3JhbDsKKwkgIHJldHVybiBfU19jb25zdHJ1Y3RfYXV4KF9fYmVnLCBfX2VuZCwgX19hLCBfSW50ZWdyYWwoKSk7CisgICAgICAgIH0KKworICAgICAgLy8gRm9yIElucHV0IEl0ZXJhdG9ycywgdXNlZCBpbiBpc3RyZWFtYnVmX2l0ZXJhdG9ycywgZXRjLgorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcmF0b3I+CisgICAgICAgIHN0YXRpYyBfQ2hhclQqCisgICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlcmF0b3IgX19iZWcsIF9Jbkl0ZXJhdG9yIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKKwkJICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKKworICAgICAgLy8gRm9yIGZvcndhcmRfaXRlcmF0b3JzIHVwIHRvIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JzLCB1c2VkIGZvcgorICAgICAgLy8gc3RyaW5nOjppdGVyYXRvciwgX0NoYXJUKiwgZXRjLgorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Z3ZEl0ZXJhdG9yPgorICAgICAgICBzdGF0aWMgX0NoYXJUKgorICAgICAgICBfU19jb25zdHJ1Y3QoX0Z3ZEl0ZXJhdG9yIF9fYmVnLCBfRndkSXRlcmF0b3IgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAorCQkgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKKworICAgICAgc3RhdGljIF9DaGFyVCoKKyAgICAgIF9TX2NvbnN0cnVjdChzaXplX3R5cGUgX19yZXEsIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKTsKKworICAgIHB1YmxpYzoKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb3B5IHN1YnN0cmluZyBpbnRvIEMgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBzICBDIHN0cmluZyB0byBjb3B5IHZhbHVlIGludG8uCisgICAgICAgKiAgQHBhcmFtIG4gIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGNvcHkuCisgICAgICAgKiAgQHBhcmFtIHBvcyAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIHRvIGNvcHkuCisgICAgICAgKiAgQHJldHVybiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgYWN0dWFsbHkgY29waWVkCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgcG9zID4gc2l6ZSgpLgorICAgICAgICoKKyAgICAgICAqICBDb3BpZXMgdXAgdG8gQGEgbiBjaGFyYWN0ZXJzIHN0YXJ0aW5nIGF0IEBhIHBvcyBpbnRvIHRoZSBDIHN0cmluZyBAYQorICAgICAgICogIHMuICBJZiBAYSBwb3MgaXMgJWdyZWF0ZXIgdGhhbiBzaXplKCksIG91dF9vZl9yYW5nZSBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTd2FwIGNvbnRlbnRzIHdpdGggYW5vdGhlciBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIHMgIFN0cmluZyB0byBzd2FwIHdpdGguCisgICAgICAgKgorICAgICAgICogIEV4Y2hhbmdlcyB0aGUgY29udGVudHMgb2YgdGhpcyBzdHJpbmcgd2l0aCB0aGF0IG9mIEBhIHMgaW4gY29uc3RhbnQKKyAgICAgICAqICB0aW1lLgorICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoYmFzaWNfc3RyaW5nJiBfX3MpOworCisgICAgICAvLyBTdHJpbmcgb3BlcmF0aW9uczoKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIGNvbnN0IHBvaW50ZXIgdG8gbnVsbC10ZXJtaW5hdGVkIGNvbnRlbnRzLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGlzIGEgaGFuZGxlIHRvIGludGVybmFsIGRhdGEuICBEbyBub3QgbW9kaWZ5IG9yIGRpcmUgdGhpbmdzIG1heQorICAgICAgICogIGhhcHBlbi4KKyAgICAgICovCisgICAgICBjb25zdCBfQ2hhclQqCisgICAgICBjX3N0cigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9kYXRhKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gY29uc3QgcG9pbnRlciB0byBjb250ZW50cy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyBhIGhhbmRsZSB0byBpbnRlcm5hbCBkYXRhLiAgRG8gbm90IG1vZGlmeSBvciBkaXJlIHRoaW5ncyBtYXkKKyAgICAgICAqICBoYXBwZW4uCisgICAgICAqLworICAgICAgY29uc3QgX0NoYXJUKgorICAgICAgZGF0YSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9kYXRhKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gY29weSBvZiBhbGxvY2F0b3IgdXNlZCB0byBjb25zdHJ1Y3QgdGhpcyBzdHJpbmcuCisgICAgICAqLworICAgICAgYWxsb2NhdG9yX3R5cGUKKyAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZGF0YXBsdXM7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIHBvc2l0aW9uIG9mIGEgQyBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIHMgIEMgc3RyaW5nIHRvIGxvY2F0ZS4KKyAgICAgICAqICBAcGFyYW0gcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGZyb20uCisgICAgICAgKiAgQHBhcmFtIG4gIE51bWJlciBvZiBjaGFyYWN0ZXJzIGZyb20gQGEgcyB0byBzZWFyY2ggZm9yLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIHN0YXJ0IG9mIGZpcnN0IG9jY3VycmVuY2UuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGZyb20gQGEgcG9zLCBzZWFyY2hlcyBmb3J3YXJkIGZvciB0aGUgZmlyc3QgQGEgbiBjaGFyYWN0ZXJzCisgICAgICAgKiAgaW4gQGEgcyB3aXRoaW4gdGhpcyBzdHJpbmcuICBJZiBmb3VuZCwgcmV0dXJucyB0aGUgaW5kZXggd2hlcmUgaXQKKyAgICAgICAqICBiZWdpbnMuICBJZiBub3QgZm91bmQsIHJldHVybnMgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBwb3NpdGlvbiBvZiBhIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gc3RyICBTdHJpbmcgdG8gbG9jYXRlLgorICAgICAgICogIEBwYXJhbSBwb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggZnJvbSAoZGVmYXVsdCAwKS4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBzdGFydCBvZiBmaXJzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIHBvcywgc2VhcmNoZXMgZm9yd2FyZCBmb3IgdmFsdWUgb2YgQGEgc3RyIHdpdGhpbgorICAgICAgICogIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0IGJlZ2lucy4gIElmIG5vdAorICAgICAgICogIGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIHBvc2l0aW9uIG9mIGEgQyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIHMgIEMgc3RyaW5nIHRvIGxvY2F0ZS4KKyAgICAgICAqICBAcGFyYW0gcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGZyb20gKGRlZmF1bHQgMCkuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2Ygc3RhcnQgb2YgZmlyc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBwb3MsIHNlYXJjaGVzIGZvcndhcmQgZm9yIHRoZSB2YWx1ZSBvZiBAYSBzIHdpdGhpbgorICAgICAgICogIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0IGJlZ2lucy4gIElmIG5vdAorICAgICAgICogIGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmcoX19zKTsKKwlyZXR1cm4gdGhpcy0+ZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIuCisgICAgICAgKiAgQHBhcmFtIGMgIENoYXJhY3RlciB0byBsb2NhdGUuCisgICAgICAgKiAgQHBhcmFtIHBvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBmcm9tIChkZWZhdWx0IDApLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGZpcnN0IG9jY3VycmVuY2UuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGZyb20gQGEgcG9zLCBzZWFyY2hlcyBmb3J3YXJkIGZvciBAYSBjIHdpdGhpbiB0aGlzIHN0cmluZy4KKyAgICAgICAqICBJZiBmb3VuZCwgcmV0dXJucyB0aGUgaW5kZXggd2hlcmUgaXQgd2FzIGZvdW5kLiAgSWYgbm90IGZvdW5kLAorICAgICAgICogIHJldHVybnMgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBsYXN0IHBvc2l0aW9uIG9mIGEgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBzdHIgIFN0cmluZyB0byBsb2NhdGUuCisgICAgICAgKiAgQHBhcmFtIHBvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBiYWNrIGZyb20gKGRlZmF1bHQgZW5kKS4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBzdGFydCBvZiBsYXN0IG9jY3VycmVuY2UuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGZyb20gQGEgcG9zLCBzZWFyY2hlcyBiYWNrd2FyZCBmb3IgdmFsdWUgb2YgQGEgc3RyIHdpdGhpbgorICAgICAgICogIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0IGJlZ2lucy4gIElmIG5vdAorICAgICAgICogIGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICByZmluZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgbGFzdCBwb3NpdGlvbiBvZiBhIEMgc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBzICBDIHN0cmluZyB0byBsb2NhdGUuCisgICAgICAgKiAgQHBhcmFtIHBvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBiYWNrIGZyb20uCisgICAgICAgKiAgQHBhcmFtIG4gIE51bWJlciBvZiBjaGFyYWN0ZXJzIGZyb20gcyB0byBzZWFyY2ggZm9yLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIHN0YXJ0IG9mIGxhc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBwb3MsIHNlYXJjaGVzIGJhY2t3YXJkIGZvciB0aGUgZmlyc3QgQGEgbgorICAgICAgICogIGNoYXJhY3RlcnMgaW4gQGEgcyB3aXRoaW4gdGhpcyBzdHJpbmcuICBJZiBmb3VuZCwgcmV0dXJucyB0aGUgaW5kZXgKKyAgICAgICAqICB3aGVyZSBpdCBiZWdpbnMuICBJZiBub3QgZm91bmQsIHJldHVybnMgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgbGFzdCBwb3NpdGlvbiBvZiBhIEMgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBzICBDIHN0cmluZyB0byBsb2NhdGUuCisgICAgICAgKiAgQHBhcmFtIHBvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHN0YXJ0IHNlYXJjaCBhdCAoZGVmYXVsdCBlbmQpLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIHN0YXJ0IG9mICBsYXN0IG9jY3VycmVuY2UuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGZyb20gQGEgcG9zLCBzZWFyY2hlcyBiYWNrd2FyZCBmb3IgdGhlIHZhbHVlIG9mIEBhIHMgd2l0aGluCisgICAgICAgKiAgdGhpcyBzdHJpbmcuICBJZiBmb3VuZCwgcmV0dXJucyB0aGUgaW5kZXggd2hlcmUgaXQgYmVnaW5zLiAgSWYgbm90CisgICAgICAgKiAgZm91bmQsIHJldHVybnMgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmcoX19zKTsKKwlyZXR1cm4gdGhpcy0+cmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIGxhc3QgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIuCisgICAgICAgKiAgQHBhcmFtIGMgIENoYXJhY3RlciB0byBsb2NhdGUuCisgICAgICAgKiAgQHBhcmFtIHBvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBiYWNrIGZyb20gKGRlZmF1bHQgZW5kKS4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBsYXN0IG9jY3VycmVuY2UuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGZyb20gQGEgcG9zLCBzZWFyY2hlcyBiYWNrd2FyZCBmb3IgQGEgYyB3aXRoaW4gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0IHdhcyBmb3VuZC4gIElmIG5vdCBmb3VuZCwKKyAgICAgICAqICByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIHBvc2l0aW9uIG9mIGEgY2hhcmFjdGVyIG9mIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gc3RyICBTdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGxvY2F0ZS4KKyAgICAgICAqICBAcGFyYW0gcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGZyb20gKGRlZmF1bHQgMCkuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2YgZmlyc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBwb3MsIHNlYXJjaGVzIGZvcndhcmQgZm9yIG9uZSBvZiB0aGUgY2hhcmFjdGVycyBvZgorICAgICAgICogIEBhIHN0ciB3aXRoaW4gdGhpcyBzdHJpbmcuICBJZiBmb3VuZCwgcmV0dXJucyB0aGUgaW5kZXggd2hlcmUgaXQgd2FzCisgICAgICAgKiAgZm91bmQuICBJZiBub3QgZm91bmQsIHJldHVybnMgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIgb2YgQyBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIHMgIFN0cmluZyBjb250YWluaW5nIGNoYXJhY3RlcnMgdG8gbG9jYXRlLgorICAgICAgICogIEBwYXJhbSBwb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggZnJvbS4KKyAgICAgICAqICBAcGFyYW0gbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgZnJvbSBzIHRvIHNlYXJjaCBmb3IuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2YgZmlyc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBwb3MsIHNlYXJjaGVzIGZvcndhcmQgZm9yIG9uZSBvZiB0aGUgZmlyc3QgQGEgbgorICAgICAgICogIGNoYXJhY3RlcnMgb2YgQGEgcyB3aXRoaW4gdGhpcyBzdHJpbmcuICBJZiBmb3VuZCwgcmV0dXJucyB0aGUgaW5kZXgKKyAgICAgICAqICB3aGVyZSBpdCB3YXMgZm91bmQuICBJZiBub3QgZm91bmQsIHJldHVybnMgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBwb3NpdGlvbiBvZiBhIGNoYXJhY3RlciBvZiBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gcyAgU3RyaW5nIGNvbnRhaW5pbmcgY2hhcmFjdGVycyB0byBsb2NhdGUuCisgICAgICAgKiAgQHBhcmFtIHBvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBmcm9tIChkZWZhdWx0IDApLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGZpcnN0IG9jY3VycmVuY2UuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGZyb20gQGEgcG9zLCBzZWFyY2hlcyBmb3J3YXJkIGZvciBvbmUgb2YgdGhlIGNoYXJhY3RlcnMgb2YKKyAgICAgICAqICBAYSBzIHdpdGhpbiB0aGlzIHN0cmluZy4gIElmIGZvdW5kLCByZXR1cm5zIHRoZSBpbmRleCB3aGVyZSBpdCB3YXMKKyAgICAgICAqICBmb3VuZC4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBucG9zLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKKyAgICAgIHsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nKF9fcyk7CisJcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIHBvc2l0aW9uIG9mIGEgY2hhcmFjdGVyLgorICAgICAgICogIEBwYXJhbSBjICBDaGFyYWN0ZXIgdG8gbG9jYXRlLgorICAgICAgICogIEBwYXJhbSBwb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggZnJvbSAoZGVmYXVsdCAwKS4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBmaXJzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIHBvcywgc2VhcmNoZXMgZm9yd2FyZCBmb3IgdGhlIGNoYXJhY3RlciBAYSBjIHdpdGhpbgorICAgICAgICogIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0IHdhcyBmb3VuZC4gIElmCisgICAgICAgKiAgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAgKgorICAgICAgICogIE5vdGU6IGVxdWl2YWxlbnQgdG8gZmluZChjLCBwb3MpLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgZmluZF9maXJzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX2MsIF9fcG9zKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgbGFzdCBwb3NpdGlvbiBvZiBhIGNoYXJhY3RlciBvZiBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIHN0ciAgU3RyaW5nIGNvbnRhaW5pbmcgY2hhcmFjdGVycyB0byBsb2NhdGUuCisgICAgICAgKiAgQHBhcmFtIHBvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBiYWNrIGZyb20gKGRlZmF1bHQgZW5kKS4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBsYXN0IG9jY3VycmVuY2UuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGZyb20gQGEgcG9zLCBzZWFyY2hlcyBiYWNrd2FyZCBmb3Igb25lIG9mIHRoZSBjaGFyYWN0ZXJzIG9mCisgICAgICAgKiAgQGEgc3RyIHdpdGhpbiB0aGlzIHN0cmluZy4gIElmIGZvdW5kLCByZXR1cm5zIHRoZSBpbmRleCB3aGVyZSBpdCB3YXMKKyAgICAgICAqICBmb3VuZC4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBucG9zLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgZmluZF9sYXN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgbGFzdCBwb3NpdGlvbiBvZiBhIGNoYXJhY3RlciBvZiBDIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gcyAgQyBzdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGxvY2F0ZS4KKyAgICAgICAqICBAcGFyYW0gcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGJhY2sgZnJvbS4KKyAgICAgICAqICBAcGFyYW0gbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgZnJvbSBzIHRvIHNlYXJjaCBmb3IuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2YgbGFzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIHBvcywgc2VhcmNoZXMgYmFja3dhcmQgZm9yIG9uZSBvZiB0aGUgZmlyc3QgQGEgbgorICAgICAgICogIGNoYXJhY3RlcnMgb2YgQGEgcyB3aXRoaW4gdGhpcyBzdHJpbmcuICBJZiBmb3VuZCwgcmV0dXJucyB0aGUgaW5kZXgKKyAgICAgICAqICB3aGVyZSBpdCB3YXMgZm91bmQuICBJZiBub3QgZm91bmQsIHJldHVybnMgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIGxhc3QgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIgb2YgQyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIHMgIEMgc3RyaW5nIGNvbnRhaW5pbmcgY2hhcmFjdGVycyB0byBsb2NhdGUuCisgICAgICAgKiAgQHBhcmFtIHBvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBiYWNrIGZyb20gKGRlZmF1bHQgZW5kKS4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBsYXN0IG9jY3VycmVuY2UuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGZyb20gQGEgcG9zLCBzZWFyY2hlcyBiYWNrd2FyZCBmb3Igb25lIG9mIHRoZSBjaGFyYWN0ZXJzIG9mCisgICAgICAgKiAgQGEgcyB3aXRoaW4gdGhpcyBzdHJpbmcuICBJZiBmb3VuZCwgcmV0dXJucyB0aGUgaW5kZXggd2hlcmUgaXQgd2FzCisgICAgICAgKiAgZm91bmQuICBJZiBub3QgZm91bmQsIHJldHVybnMgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKKyAgICAgIHsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nKF9fcyk7CisJcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgbGFzdCBwb3NpdGlvbiBvZiBhIGNoYXJhY3Rlci4KKyAgICAgICAqICBAcGFyYW0gYyAgQ2hhcmFjdGVyIHRvIGxvY2F0ZS4KKyAgICAgICAqICBAcGFyYW0gcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGJhY2sgZnJvbSAoZGVmYXVsdCBlbmQpLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGxhc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBwb3MsIHNlYXJjaGVzIGJhY2t3YXJkIGZvciBAYSBjIHdpdGhpbiB0aGlzIHN0cmluZy4KKyAgICAgICAqICBJZiBmb3VuZCwgcmV0dXJucyB0aGUgaW5kZXggd2hlcmUgaXQgd2FzIGZvdW5kLiAgSWYgbm90IGZvdW5kLAorICAgICAgICogIHJldHVybnMgbnBvcy4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZTogZXF1aXZhbGVudCB0byByZmluZChjLCBwb3MpLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgZmluZF9sYXN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX2MsIF9fcG9zKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIgbm90IGluIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gc3RyICBTdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGF2b2lkLgorICAgICAgICogIEBwYXJhbSBwb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggZnJvbSAoZGVmYXVsdCAwKS4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBmaXJzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIHBvcywgc2VhcmNoZXMgZm9yd2FyZCBmb3IgYSBjaGFyYWN0ZXIgbm90IGNvbnRhaW5lZAorICAgICAgICogIGluIEBhIHN0ciB3aXRoaW4gdGhpcyBzdHJpbmcuICBJZiBmb3VuZCwgcmV0dXJucyB0aGUgaW5kZXggd2hlcmUgaXQKKyAgICAgICAqICB3YXMgZm91bmQuICBJZiBub3QgZm91bmQsIHJldHVybnMgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBwb3NpdGlvbiBvZiBhIGNoYXJhY3RlciBub3QgaW4gQyBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIHMgIEMgc3RyaW5nIGNvbnRhaW5pbmcgY2hhcmFjdGVycyB0byBhdm9pZC4KKyAgICAgICAqICBAcGFyYW0gcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGZyb20uCisgICAgICAgKiAgQHBhcmFtIG4gIE51bWJlciBvZiBjaGFyYWN0ZXJzIGZyb20gcyB0byBjb25zaWRlci4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBmaXJzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIHBvcywgc2VhcmNoZXMgZm9yd2FyZCBmb3IgYSBjaGFyYWN0ZXIgbm90IGNvbnRhaW5lZAorICAgICAgICogIGluIHRoZSBmaXJzdCBAYSBuIGNoYXJhY3RlcnMgb2YgQGEgcyB3aXRoaW4gdGhpcyBzdHJpbmcuICBJZiBmb3VuZCwKKyAgICAgICAqICByZXR1cm5zIHRoZSBpbmRleCB3aGVyZSBpdCB3YXMgZm91bmQuICBJZiBub3QgZm91bmQsIHJldHVybnMgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsCisJCQlzaXplX3R5cGUgX19uKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIHBvc2l0aW9uIG9mIGEgY2hhcmFjdGVyIG5vdCBpbiBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gcyAgQyBzdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGF2b2lkLgorICAgICAgICogIEBwYXJhbSBwb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggZnJvbSAoZGVmYXVsdCAwKS4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBmaXJzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIHBvcywgc2VhcmNoZXMgZm9yd2FyZCBmb3IgYSBjaGFyYWN0ZXIgbm90IGNvbnRhaW5lZAorICAgICAgICogIGluIEBhIHMgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0CisgICAgICAgKiAgd2FzIGZvdW5kLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKKyAgICAgIHsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nKF9fcyk7CisJcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBwb3NpdGlvbiBvZiBhIGRpZmZlcmVudCBjaGFyYWN0ZXIuCisgICAgICAgKiAgQHBhcmFtIGMgIENoYXJhY3RlciB0byBhdm9pZC4KKyAgICAgICAqICBAcGFyYW0gcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGZyb20gKGRlZmF1bHQgMCkuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2YgZmlyc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBwb3MsIHNlYXJjaGVzIGZvcndhcmQgZm9yIGEgY2hhcmFjdGVyIG90aGVyIHRoYW4gQGEgYworICAgICAgICogIHdpdGhpbiB0aGlzIHN0cmluZy4gIElmIGZvdW5kLCByZXR1cm5zIHRoZSBpbmRleCB3aGVyZSBpdCB3YXMgZm91bmQuCisgICAgICAgKiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIGxhc3QgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIgbm90IGluIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gc3RyICBTdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGF2b2lkLgorICAgICAgICogIEBwYXJhbSBwb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggYmFjayBmcm9tIChkZWZhdWx0IGVuZCkuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2YgbGFzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIHBvcywgc2VhcmNoZXMgYmFja3dhcmQgZm9yIGEgY2hhcmFjdGVyIG5vdAorICAgICAgICogIGNvbnRhaW5lZCBpbiBAYSBzdHIgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4CisgICAgICAgKiAgd2hlcmUgaXQgd2FzIGZvdW5kLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIGxhc3QgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIgbm90IGluIEMgc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBzICBDIHN0cmluZyBjb250YWluaW5nIGNoYXJhY3RlcnMgdG8gYXZvaWQuCisgICAgICAgKiAgQHBhcmFtIHBvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBiYWNrIGZyb20uCisgICAgICAgKiAgQHBhcmFtIG4gIE51bWJlciBvZiBjaGFyYWN0ZXJzIGZyb20gcyB0byBjb25zaWRlci4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBsYXN0IG9jY3VycmVuY2UuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGZyb20gQGEgcG9zLCBzZWFyY2hlcyBiYWNrd2FyZCBmb3IgYSBjaGFyYWN0ZXIgbm90CisgICAgICAgKiAgY29udGFpbmVkIGluIHRoZSBmaXJzdCBAYSBuIGNoYXJhY3RlcnMgb2YgQGEgcyB3aXRoaW4gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0IHdhcyBmb3VuZC4gIElmIG5vdCBmb3VuZCwKKyAgICAgICAqICByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsCisJCSAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBsYXN0IHBvc2l0aW9uIG9mIGEgY2hhcmFjdGVyIG5vdCBpbiBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gcyAgQyBzdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGF2b2lkLgorICAgICAgICogIEBwYXJhbSBwb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggYmFjayBmcm9tIChkZWZhdWx0IGVuZCkuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2YgbGFzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIHBvcywgc2VhcmNoZXMgYmFja3dhcmQgZm9yIGEgY2hhcmFjdGVyIG5vdAorICAgICAgICogIGNvbnRhaW5lZCBpbiBAYSBzIHdpdGhpbiB0aGlzIHN0cmluZy4gIElmIGZvdW5kLCByZXR1cm5zIHRoZSBpbmRleAorICAgICAgICogIHdoZXJlIGl0IHdhcyBmb3VuZC4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBucG9zLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKKyAgICAgIHsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nKF9fcyk7CisJcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIGxhc3QgcG9zaXRpb24gb2YgYSBkaWZmZXJlbnQgY2hhcmFjdGVyLgorICAgICAgICogIEBwYXJhbSBjICBDaGFyYWN0ZXIgdG8gYXZvaWQuCisgICAgICAgKiAgQHBhcmFtIHBvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBiYWNrIGZyb20gKGRlZmF1bHQgZW5kKS4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBsYXN0IG9jY3VycmVuY2UuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGZyb20gQGEgcG9zLCBzZWFyY2hlcyBiYWNrd2FyZCBmb3IgYSBjaGFyYWN0ZXIgb3RoZXIgdGhhbgorICAgICAgICogIEBhIGMgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0IHdhcworICAgICAgICogIGZvdW5kLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEdldCBhIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gcG9zICBJbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXIgKGRlZmF1bHQgMCkuCisgICAgICAgKiAgQHBhcmFtIG4gIE51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHN1YnN0cmluZyAoZGVmYXVsdCByZW1haW5kZXIpLgorICAgICAgICogIEByZXR1cm4gIFRoZSBuZXcgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgIElmIHBvcyA+IHNpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgQ29uc3RydWN0IGFuZCByZXR1cm4gYSBuZXcgc3RyaW5nIHVzaW5nIHRoZSBAYSBuIGNoYXJhY3RlcnMgc3RhcnRpbmcKKyAgICAgICAqICBhdCBAYSBwb3MuICBJZiB0aGUgc3RyaW5nIGlzIHRvbyBzaG9ydCwgdXNlIHRoZSByZW1haW5kZXIgb2YgdGhlCisgICAgICAgKiAgY2hhcmFjdGVycy4gIElmIEBhIHBvcyBpcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBvdXRfb2ZfcmFuZ2UKKyAgICAgICAqICBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nCisgICAgICBzdWJzdHIoc2l6ZV90eXBlIF9fcG9zID0gMCwgc2l6ZV90eXBlIF9fbiA9IG5wb3MpIGNvbnN0CisgICAgICB7IHJldHVybiBiYXNpY19zdHJpbmcoKnRoaXMsCisJCQkgICAgX01fY2hlY2soX19wb3MsICJiYXNpY19zdHJpbmc6OnN1YnN0ciIpLCBfX24pOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29tcGFyZSB0byBhIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gc3RyICBTdHJpbmcgdG8gY29tcGFyZSBhZ2FpbnN0LgorICAgICAgICogIEByZXR1cm4gIEludGVnZXIgPCAwLCAwLCBvciA+IDAuCisgICAgICAgKgorICAgICAgICogIFJldHVybnMgYW4gaW50ZWdlciA8IDAgaWYgdGhpcyBzdHJpbmcgaXMgb3JkZXJlZCBiZWZvcmUgQGEgc3RyLCAwIGlmCisgICAgICAgKiAgdGhlaXIgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBvciA+IDAgaWYgdGhpcyBzdHJpbmcgaXMgb3JkZXJlZCBhZnRlcgorICAgICAgICogIEBhIHN0ci4gIERldGVybWluZXMgdGhlIGVmZmVjdGl2ZSBsZW5ndGggcmxlbiBvZiB0aGUgc3RyaW5ncyB0bworICAgICAgICogIGNvbXBhcmUgYXMgdGhlIHNtYWxsZXN0IG9mIHNpemUoKSBhbmQgc3RyLnNpemUoKS4gIFRoZSBmdW5jdGlvbgorICAgICAgICogIHRoZW4gY29tcGFyZXMgdGhlIHR3byBzdHJpbmdzIGJ5IGNhbGxpbmcgdHJhaXRzOjpjb21wYXJlKGRhdGEoKSwKKyAgICAgICAqICBzdHIuZGF0YSgpLHJsZW4pLiAgSWYgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiBpcyBub256ZXJvIHJldHVybnMKKyAgICAgICAqICBpdCwgb3RoZXJ3aXNlIHRoZSBzaG9ydGVyIG9uZSBpcyBvcmRlcmVkIGZpcnN0LgorICAgICAgKi8KKyAgICAgIGludAorICAgICAgY29tcGFyZShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAorICAgICAgeworCWNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CisJY29uc3Qgc2l6ZV90eXBlIF9fb3NpemUgPSBfX3N0ci5zaXplKCk7CisJY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gc3RkOjptaW4oX19zaXplLCBfX29zaXplKTsKKworCWludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fc3RyLmRhdGEoKSwgX19sZW4pOworCWlmICghX19yKQorCSAgX19yID0gX1NfY29tcGFyZShfX3NpemUsIF9fb3NpemUpOworCXJldHVybiBfX3I7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29tcGFyZSBzdWJzdHJpbmcgdG8gYSBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIHBvcyAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIG9mIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBzdHIgIFN0cmluZyB0byBjb21wYXJlIGFnYWluc3QuCisgICAgICAgKiAgQHJldHVybiAgSW50ZWdlciA8IDAsIDAsIG9yID4gMC4KKyAgICAgICAqCisgICAgICAgKiAgRm9ybSB0aGUgc3Vic3RyaW5nIG9mIHRoaXMgc3RyaW5nIGZyb20gdGhlIEBhIG4gY2hhcmFjdGVycyBzdGFydGluZworICAgICAgICogIGF0IEBhIHBvcy4gIFJldHVybnMgYW4gaW50ZWdlciA8IDAgaWYgdGhlIHN1YnN0cmluZyBpcyBvcmRlcmVkCisgICAgICAgKiAgYmVmb3JlIEBhIHN0ciwgMCBpZiB0aGVpciB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIG9yID4gMCBpZiB0aGUKKyAgICAgICAqICBzdWJzdHJpbmcgaXMgb3JkZXJlZCBhZnRlciBAYSBzdHIuICBEZXRlcm1pbmVzIHRoZSBlZmZlY3RpdmUgbGVuZ3RoCisgICAgICAgKiAgcmxlbiBvZiB0aGUgc3RyaW5ncyB0byBjb21wYXJlIGFzIHRoZSBzbWFsbGVzdCBvZiB0aGUgbGVuZ3RoIG9mIHRoZQorICAgICAgICogIHN1YnN0cmluZyBhbmQgQGEgc3RyLnNpemUoKS4gIFRoZSBmdW5jdGlvbiB0aGVuIGNvbXBhcmVzIHRoZSB0d28KKyAgICAgICAqICBzdHJpbmdzIGJ5IGNhbGxpbmcgdHJhaXRzOjpjb21wYXJlKHN1YnN0cmluZy5kYXRhKCksc3RyLmRhdGEoKSxybGVuKS4KKyAgICAgICAqICBJZiB0aGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIGlzIG5vbnplcm8gcmV0dXJucyBpdCwgb3RoZXJ3aXNlIHRoZQorICAgICAgICogIHNob3J0ZXIgb25lIGlzIG9yZGVyZWQgZmlyc3QuCisgICAgICAqLworICAgICAgaW50CisgICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29tcGFyZSBzdWJzdHJpbmcgdG8gYSBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIHBvczEgIEluZGV4IG9mIGZpcnN0IGNoYXJhY3RlciBvZiBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIG4xICBOdW1iZXIgb2YgY2hhcmFjdGVycyBpbiBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIHN0ciAgU3RyaW5nIHRvIGNvbXBhcmUgYWdhaW5zdC4KKyAgICAgICAqICBAcGFyYW0gcG9zMiAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIG9mIHN1YnN0cmluZyBvZiBzdHIuCisgICAgICAgKiAgQHBhcmFtIG4yICBOdW1iZXIgb2YgY2hhcmFjdGVycyBpbiBzdWJzdHJpbmcgb2Ygc3RyLgorICAgICAgICogIEByZXR1cm4gIEludGVnZXIgPCAwLCAwLCBvciA+IDAuCisgICAgICAgKgorICAgICAgICogIEZvcm0gdGhlIHN1YnN0cmluZyBvZiB0aGlzIHN0cmluZyBmcm9tIHRoZSBAYSBuMSBjaGFyYWN0ZXJzIHN0YXJ0aW5nCisgICAgICAgKiAgYXQgQGEgcG9zMS4gIEZvcm0gdGhlIHN1YnN0cmluZyBvZiBAYSBzdHIgZnJvbSB0aGUgQGEgbjIgY2hhcmFjdGVycworICAgICAgICogIHN0YXJ0aW5nIGF0IEBhIHBvczIuICBSZXR1cm5zIGFuIGludGVnZXIgPCAwIGlmIHRoaXMgc3Vic3RyaW5nIGlzCisgICAgICAgKiAgb3JkZXJlZCBiZWZvcmUgdGhlIHN1YnN0cmluZyBvZiBAYSBzdHIsIDAgaWYgdGhlaXIgdmFsdWVzIGFyZQorICAgICAgICogIGVxdWl2YWxlbnQsIG9yID4gMCBpZiB0aGlzIHN1YnN0cmluZyBpcyBvcmRlcmVkIGFmdGVyIHRoZSBzdWJzdHJpbmcKKyAgICAgICAqICBvZiBAYSBzdHIuICBEZXRlcm1pbmVzIHRoZSBlZmZlY3RpdmUgbGVuZ3RoIHJsZW4gb2YgdGhlIHN0cmluZ3MKKyAgICAgICAqICB0byBjb21wYXJlIGFzIHRoZSBzbWFsbGVzdCBvZiB0aGUgbGVuZ3RocyBvZiB0aGUgc3Vic3RyaW5ncy4gIFRoZQorICAgICAgICogIGZ1bmN0aW9uIHRoZW4gY29tcGFyZXMgdGhlIHR3byBzdHJpbmdzIGJ5IGNhbGxpbmcKKyAgICAgICAqICB0cmFpdHM6OmNvbXBhcmUoc3Vic3RyaW5nLmRhdGEoKSxzdHIuc3Vic3RyKHBvczIsbjIpLmRhdGEoKSxybGVuKS4KKyAgICAgICAqICBJZiB0aGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIGlzIG5vbnplcm8gcmV0dXJucyBpdCwgb3RoZXJ3aXNlIHRoZQorICAgICAgICogIHNob3J0ZXIgb25lIGlzIG9yZGVyZWQgZmlyc3QuCisgICAgICAqLworICAgICAgaW50CisgICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAorCSAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb21wYXJlIHRvIGEgQyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIHMgIEMgc3RyaW5nIHRvIGNvbXBhcmUgYWdhaW5zdC4KKyAgICAgICAqICBAcmV0dXJuICBJbnRlZ2VyIDwgMCwgMCwgb3IgPiAwLgorICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIGFuIGludGVnZXIgPCAwIGlmIHRoaXMgc3RyaW5nIGlzIG9yZGVyZWQgYmVmb3JlIEBhIHMsIDAgaWYKKyAgICAgICAqICB0aGVpciB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIG9yID4gMCBpZiB0aGlzIHN0cmluZyBpcyBvcmRlcmVkIGFmdGVyCisgICAgICAgKiAgQGEgcy4gIERldGVybWluZXMgdGhlIGVmZmVjdGl2ZSBsZW5ndGggcmxlbiBvZiB0aGUgc3RyaW5ncyB0bworICAgICAgICogIGNvbXBhcmUgYXMgdGhlIHNtYWxsZXN0IG9mIHNpemUoKSBhbmQgdGhlIGxlbmd0aCBvZiBhIHN0cmluZworICAgICAgICogIGNvbnN0cnVjdGVkIGZyb20gQGEgcy4gIFRoZSBmdW5jdGlvbiB0aGVuIGNvbXBhcmVzIHRoZSB0d28gc3RyaW5ncworICAgICAgICogIGJ5IGNhbGxpbmcgdHJhaXRzOjpjb21wYXJlKGRhdGEoKSxzLHJsZW4pLiAgSWYgdGhlIHJlc3VsdCBvZiB0aGUKKyAgICAgICAqICBjb21wYXJpc29uIGlzIG5vbnplcm8gcmV0dXJucyBpdCwgb3RoZXJ3aXNlIHRoZSBzaG9ydGVyIG9uZSBpcworICAgICAgICogIG9yZGVyZWQgZmlyc3QuCisgICAgICAqLworICAgICAgaW50CisgICAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNSBTdHJpbmc6OmNvbXBhcmUgc3BlY2lmaWNhdGlvbiBxdWVzdGlvbmFibGUKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29tcGFyZSBzdWJzdHJpbmcgdG8gYSBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gcG9zICBJbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXIgb2Ygc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBuMSAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBzICBDIHN0cmluZyB0byBjb21wYXJlIGFnYWluc3QuCisgICAgICAgKiAgQHJldHVybiAgSW50ZWdlciA8IDAsIDAsIG9yID4gMC4KKyAgICAgICAqCisgICAgICAgKiAgRm9ybSB0aGUgc3Vic3RyaW5nIG9mIHRoaXMgc3RyaW5nIGZyb20gdGhlIEBhIG4xIGNoYXJhY3RlcnMgc3RhcnRpbmcKKyAgICAgICAqICBhdCBAYSBwb3MuICBSZXR1cm5zIGFuIGludGVnZXIgPCAwIGlmIHRoZSBzdWJzdHJpbmcgaXMgb3JkZXJlZAorICAgICAgICogIGJlZm9yZSBAYSBzLCAwIGlmIHRoZWlyIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgb3IgPiAwIGlmIHRoZQorICAgICAgICogIHN1YnN0cmluZyBpcyBvcmRlcmVkIGFmdGVyIEBhIHMuICBEZXRlcm1pbmVzIHRoZSBlZmZlY3RpdmUgbGVuZ3RoCisgICAgICAgKiAgcmxlbiBvZiB0aGUgc3RyaW5ncyB0byBjb21wYXJlIGFzIHRoZSBzbWFsbGVzdCBvZiB0aGUgbGVuZ3RoIG9mIHRoZSAKKyAgICAgICAqICBzdWJzdHJpbmcgYW5kIHRoZSBsZW5ndGggb2YgYSBzdHJpbmcgY29uc3RydWN0ZWQgZnJvbSBAYSBzLiAgVGhlCisgICAgICAgKiAgZnVuY3Rpb24gdGhlbiBjb21wYXJlcyB0aGUgdHdvIHN0cmluZyBieSBjYWxsaW5nCisgICAgICAgKiAgdHJhaXRzOjpjb21wYXJlKHN1YnN0cmluZy5kYXRhKCkscyxybGVuKS4gIElmIHRoZSByZXN1bHQgb2YgdGhlCisgICAgICAgKiAgY29tcGFyaXNvbiBpcyBub256ZXJvIHJldHVybnMgaXQsIG90aGVyd2lzZSB0aGUgc2hvcnRlciBvbmUgaXMKKyAgICAgICAqICBvcmRlcmVkIGZpcnN0LgorICAgICAgKi8KKyAgICAgIGludAorICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29tcGFyZSBzdWJzdHJpbmcgYWdhaW5zdCBhIGNoYXJhY3RlciAlYXJyYXkuCisgICAgICAgKiAgQHBhcmFtIHBvczEgIEluZGV4IG9mIGZpcnN0IGNoYXJhY3RlciBvZiBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIG4xICBOdW1iZXIgb2YgY2hhcmFjdGVycyBpbiBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIHMgIGNoYXJhY3RlciAlYXJyYXkgdG8gY29tcGFyZSBhZ2FpbnN0LgorICAgICAgICogIEBwYXJhbSBuMiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgb2Ygcy4KKyAgICAgICAqICBAcmV0dXJuICBJbnRlZ2VyIDwgMCwgMCwgb3IgPiAwLgorICAgICAgICoKKyAgICAgICAqICBGb3JtIHRoZSBzdWJzdHJpbmcgb2YgdGhpcyBzdHJpbmcgZnJvbSB0aGUgQGEgbjEgY2hhcmFjdGVycyBzdGFydGluZworICAgICAgICogIGF0IEBhIHBvczEuICBGb3JtIGEgc3RyaW5nIGZyb20gdGhlIGZpcnN0IEBhIG4yIGNoYXJhY3RlcnMgb2YgQGEgcy4KKyAgICAgICAqICBSZXR1cm5zIGFuIGludGVnZXIgPCAwIGlmIHRoaXMgc3Vic3RyaW5nIGlzIG9yZGVyZWQgYmVmb3JlIHRoZSBzdHJpbmcKKyAgICAgICAqICBmcm9tIEBhIHMsIDAgaWYgdGhlaXIgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBvciA+IDAgaWYgdGhpcyBzdWJzdHJpbmcKKyAgICAgICAqICBpcyBvcmRlcmVkIGFmdGVyIHRoZSBzdHJpbmcgZnJvbSBAYSBzLiAgIERldGVybWluZXMgdGhlIGVmZmVjdGl2ZQorICAgICAgICogIGxlbmd0aCBybGVuIG9mIHRoZSBzdHJpbmdzIHRvIGNvbXBhcmUgYXMgdGhlIHNtYWxsZXN0IG9mIHRoZSBsZW5ndGgKKyAgICAgICAqICBvZiB0aGUgc3Vic3RyaW5nIGFuZCBAYSBuMi4gIFRoZSBmdW5jdGlvbiB0aGVuIGNvbXBhcmVzIHRoZSB0d28KKyAgICAgICAqICBzdHJpbmdzIGJ5IGNhbGxpbmcgdHJhaXRzOjpjb21wYXJlKHN1YnN0cmluZy5kYXRhKCkscyxybGVuKS4gIElmIHRoZQorICAgICAgICogIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiBpcyBub256ZXJvIHJldHVybnMgaXQsIG90aGVyd2lzZSB0aGUgc2hvcnRlcgorICAgICAgICogIG9uZSBpcyBvcmRlcmVkIGZpcnN0LgorICAgICAgICoKKyAgICAgICAqICBOQjogcyBtdXN0IGhhdmUgYXQgbGVhc3QgbjIgY2hhcmFjdGVycywgJmFwb3M7XFwwJmFwb3M7IGhhcworICAgICAgICogIG5vIHNwZWNpYWwgbWVhbmluZy4KKyAgICAgICovCisgICAgICBpbnQKKyAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCisJICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0OworICB9OworCisgIC8vIG9wZXJhdG9yKworICAvKioKKyAgICogIEBicmllZiAgQ29uY2F0ZW5hdGUgdHdvIHN0cmluZ3MuCisgICAqICBAcGFyYW0gbGhzICBGaXJzdCBzdHJpbmcuCisgICAqICBAcGFyYW0gcmhzICBMYXN0IHN0cmluZy4KKyAgICogIEByZXR1cm4gIE5ldyBzdHJpbmcgd2l0aCB2YWx1ZSBvZiBAYSBsaHMgZm9sbG93ZWQgYnkgQGEgcmhzLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgorICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKKyAgICB7CisgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKKyAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CisgICAgICByZXR1cm4gX19zdHI7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBDb25jYXRlbmF0ZSBDIHN0cmluZyBhbmQgc3RyaW5nLgorICAgKiAgQHBhcmFtIGxocyAgRmlyc3Qgc3RyaW5nLgorICAgKiAgQHBhcmFtIHJocyAgTGFzdCBzdHJpbmcuCisgICAqICBAcmV0dXJuICBOZXcgc3RyaW5nIHdpdGggdmFsdWUgb2YgQGEgbGhzIGZvbGxvd2VkIGJ5IEBhIHJocy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CisgICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsCisJICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcmhzKTsKKworICAvKioKKyAgICogIEBicmllZiAgQ29uY2F0ZW5hdGUgY2hhcmFjdGVyIGFuZCBzdHJpbmcuCisgICAqICBAcGFyYW0gbGhzICBGaXJzdCBzdHJpbmcuCisgICAqICBAcGFyYW0gcmhzICBMYXN0IHN0cmluZy4KKyAgICogIEByZXR1cm4gIE5ldyBzdHJpbmcgd2l0aCBAYSBsaHMgZm9sbG93ZWQgYnkgQGEgcmhzLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4KKyAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpOworCisgIC8qKgorICAgKiAgQGJyaWVmICBDb25jYXRlbmF0ZSBzdHJpbmcgYW5kIEMgc3RyaW5nLgorICAgKiAgQHBhcmFtIGxocyAgRmlyc3Qgc3RyaW5nLgorICAgKiAgQHBhcmFtIHJocyAgTGFzdCBzdHJpbmcuCisgICAqICBAcmV0dXJuICBOZXcgc3RyaW5nIHdpdGggQGEgbGhzIGZvbGxvd2VkIGJ5IEBhIHJocy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CisgICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKKyAgICB7CisgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKKyAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CisgICAgICByZXR1cm4gX19zdHI7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBDb25jYXRlbmF0ZSBzdHJpbmcgYW5kIGNoYXJhY3Rlci4KKyAgICogIEBwYXJhbSBsaHMgIEZpcnN0IHN0cmluZy4KKyAgICogIEBwYXJhbSByaHMgIExhc3Qgc3RyaW5nLgorICAgKiAgQHJldHVybiAgTmV3IHN0cmluZyB3aXRoIEBhIGxocyBmb2xsb3dlZCBieSBAYSByaHMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgorICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywgX0NoYXJUIF9fcmhzKQorICAgIHsKKyAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPglfX3N0cmluZ190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUJCV9fc2l6ZV90eXBlOworICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cihfX2xocyk7CisgICAgICBfX3N0ci5hcHBlbmQoX19zaXplX3R5cGUoMSksIF9fcmhzKTsKKyAgICAgIHJldHVybiBfX3N0cjsKKyAgICB9CisKKyAgLy8gb3BlcmF0b3IgPT0KKyAgLyoqCisgICAqICBAYnJpZWYgIFRlc3QgZXF1aXZhbGVuY2Ugb2YgdHdvIHN0cmluZ3MuCisgICAqICBAcGFyYW0gbGhzICBGaXJzdCBzdHJpbmcuCisgICAqICBAcGFyYW0gcmhzICBTZWNvbmQgc3RyaW5nLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBAYSBsaHMuY29tcGFyZShAYSByaHMpID09IDAuICBGYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCisJICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgaW5saW5lCisgICAgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2NoYXI8X0NoYXJUPjo6X192YWx1ZSwgYm9vbD46Ol9fdHlwZQorICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVD4mIF9fbGhzLAorCSAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJUPiYgX19yaHMpCisgICAgeyByZXR1cm4gKF9fbGhzLnNpemUoKSA9PSBfX3Jocy5zaXplKCkKKwkgICAgICAmJiAhc3RkOjpjaGFyX3RyYWl0czxfQ2hhclQ+Ojpjb21wYXJlKF9fbGhzLmRhdGEoKSwgX19yaHMuZGF0YSgpLAorCQkJCQkJICAgIF9fbGhzLnNpemUoKSkpOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFRlc3QgZXF1aXZhbGVuY2Ugb2YgQyBzdHJpbmcgYW5kIHN0cmluZy4KKyAgICogIEBwYXJhbSBsaHMgIEMgc3RyaW5nLgorICAgKiAgQHBhcmFtIHJocyAgU3RyaW5nLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBAYSByaHMuY29tcGFyZShAYSBsaHMpID09IDAuICBGYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX0NoYXJUKiBfX2xocywKKwkgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPT0gMDsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGVxdWl2YWxlbmNlIG9mIHN0cmluZyBhbmQgQyBzdHJpbmcuCisgICAqICBAcGFyYW0gbGhzICBTdHJpbmcuCisgICAqICBAcGFyYW0gcmhzICBDIHN0cmluZy4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgbGhzLmNvbXBhcmUoQGEgcmhzKSA9PSAwLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0KKworICAvLyBvcGVyYXRvciAhPQorICAvKioKKyAgICogIEBicmllZiAgVGVzdCBkaWZmZXJlbmNlIG9mIHR3byBzdHJpbmdzLgorICAgKiAgQHBhcmFtIGxocyAgRmlyc3Qgc3RyaW5nLgorICAgKiAgQHBhcmFtIHJocyAgU2Vjb25kIHN0cmluZy4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgbGhzLmNvbXBhcmUoQGEgcmhzKSAhPSAwLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGRpZmZlcmVuY2Ugb2YgQyBzdHJpbmcgYW5kIHN0cmluZy4KKyAgICogIEBwYXJhbSBsaHMgIEMgc3RyaW5nLgorICAgKiAgQHBhcmFtIHJocyAgU3RyaW5nLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBAYSByaHMuY29tcGFyZShAYSBsaHMpICE9IDAuICBGYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX0NoYXJUKiBfX2xocywKKwkgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7IH0KKworICAvKioKKyAgICogIEBicmllZiAgVGVzdCBkaWZmZXJlbmNlIG9mIHN0cmluZyBhbmQgQyBzdHJpbmcuCisgICAqICBAcGFyYW0gbGhzICBTdHJpbmcuCisgICAqICBAcGFyYW0gcmhzICBDIHN0cmluZy4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgbGhzLmNvbXBhcmUoQGEgcmhzKSAhPSAwLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQorICAgIHsgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOyB9CisKKyAgLy8gb3BlcmF0b3IgPAorICAvKioKKyAgICogIEBicmllZiAgVGVzdCBpZiBzdHJpbmcgcHJlY2VkZXMgc3RyaW5nLgorICAgKiAgQHBhcmFtIGxocyAgRmlyc3Qgc3RyaW5nLgorICAgKiAgQHBhcmFtIHJocyAgU2Vjb25kIHN0cmluZy4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgbGhzIHByZWNlZGVzIEBhIHJocy4gIEZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwgMDsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGlmIHN0cmluZyBwcmVjZWRlcyBDIHN0cmluZy4KKyAgICogIEBwYXJhbSBsaHMgIFN0cmluZy4KKyAgICogIEBwYXJhbSByaHMgIEMgc3RyaW5nLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBAYSBsaHMgcHJlY2VkZXMgQGEgcmhzLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCisJICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KKworICAvKioKKyAgICogIEBicmllZiAgVGVzdCBpZiBDIHN0cmluZyBwcmVjZWRlcyBzdHJpbmcuCisgICAqICBAcGFyYW0gbGhzICBDIHN0cmluZy4KKyAgICogIEBwYXJhbSByaHMgIFN0cmluZy4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgbGhzIHByZWNlZGVzIEBhIHJocy4gIEZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IF9DaGFyVCogX19saHMsCisJICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPiAwOyB9CisKKyAgLy8gb3BlcmF0b3IgPgorICAvKioKKyAgICogIEBicmllZiAgVGVzdCBpZiBzdHJpbmcgZm9sbG93cyBzdHJpbmcuCisgICAqICBAcGFyYW0gbGhzICBGaXJzdCBzdHJpbmcuCisgICAqICBAcGFyYW0gcmhzICBTZWNvbmQgc3RyaW5nLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBAYSBsaHMgZm9sbG93cyBAYSByaHMuICBGYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+IDA7IH0KKworICAvKioKKyAgICogIEBicmllZiAgVGVzdCBpZiBzdHJpbmcgZm9sbG93cyBDIHN0cmluZy4KKyAgICogIEBwYXJhbSBsaHMgIFN0cmluZy4KKyAgICogIEBwYXJhbSByaHMgIEMgc3RyaW5nLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBAYSBsaHMgZm9sbG93cyBAYSByaHMuICBGYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGlmIEMgc3RyaW5nIGZvbGxvd3Mgc3RyaW5nLgorICAgKiAgQHBhcmFtIGxocyAgQyBzdHJpbmcuCisgICAqICBAcGFyYW0gcmhzICBTdHJpbmcuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIEBhIGxocyBmb2xsb3dzIEBhIHJocy4gIEZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IF9DaGFyVCogX19saHMsCisJICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPCAwOyB9CisKKyAgLy8gb3BlcmF0b3IgPD0KKyAgLyoqCisgICAqICBAYnJpZWYgIFRlc3QgaWYgc3RyaW5nIGRvZXNuJ3QgZm9sbG93IHN0cmluZy4KKyAgICogIEBwYXJhbSBsaHMgIEZpcnN0IHN0cmluZy4KKyAgICogIEBwYXJhbSByaHMgIFNlY29uZCBzdHJpbmcuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIEBhIGxocyBkb2Vzbid0IGZvbGxvdyBAYSByaHMuICBGYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCisJICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KKworICAvKioKKyAgICogIEBicmllZiAgVGVzdCBpZiBzdHJpbmcgZG9lc24ndCBmb2xsb3cgQyBzdHJpbmcuCisgICAqICBAcGFyYW0gbGhzICBTdHJpbmcuCisgICAqICBAcGFyYW0gcmhzICBDIHN0cmluZy4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgbGhzIGRvZXNuJ3QgZm9sbG93IEBhIHJocy4gIEZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFRlc3QgaWYgQyBzdHJpbmcgZG9lc24ndCBmb2xsb3cgc3RyaW5nLgorICAgKiAgQHBhcmFtIGxocyAgQyBzdHJpbmcuCisgICAqICBAcGFyYW0gcmhzICBTdHJpbmcuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIEBhIGxocyBkb2Vzbid0IGZvbGxvdyBAYSByaHMuICBGYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgX0NoYXJUKiBfX2xocywKKwkgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPj0gMDsgfQorCisgIC8vIG9wZXJhdG9yID49CisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGlmIHN0cmluZyBkb2Vzbid0IHByZWNlZGUgc3RyaW5nLgorICAgKiAgQHBhcmFtIGxocyAgRmlyc3Qgc3RyaW5nLgorICAgKiAgQHBhcmFtIHJocyAgU2Vjb25kIHN0cmluZy4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgbGhzIGRvZXNuJ3QgcHJlY2VkZSBAYSByaHMuICBGYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCisJICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0KKworICAvKioKKyAgICogIEBicmllZiAgVGVzdCBpZiBzdHJpbmcgZG9lc24ndCBwcmVjZWRlIEMgc3RyaW5nLgorICAgKiAgQHBhcmFtIGxocyAgU3RyaW5nLgorICAgKiAgQHBhcmFtIHJocyAgQyBzdHJpbmcuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIEBhIGxocyBkb2Vzbid0IHByZWNlZGUgQGEgcmhzLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0KKworICAvKioKKyAgICogIEBicmllZiAgVGVzdCBpZiBDIHN0cmluZyBkb2Vzbid0IHByZWNlZGUgc3RyaW5nLgorICAgKiAgQHBhcmFtIGxocyAgQyBzdHJpbmcuCisgICAqICBAcGFyYW0gcmhzICBTdHJpbmcuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIEBhIGxocyBkb2Vzbid0IHByZWNlZGUgQGEgcmhzLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IF9DaGFyVCogX19saHMsCisJICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA8PSAwOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFN3YXAgY29udGVudHMgb2YgdHdvIHN0cmluZ3MuCisgICAqICBAcGFyYW0gbGhzICBGaXJzdCBzdHJpbmcuCisgICAqICBAcGFyYW0gcmhzICBTZWNvbmQgc3RyaW5nLgorICAgKgorICAgKiAgRXhjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBAYSBsaHMgYW5kIEBhIHJocyBpbiBjb25zdGFudCB0aW1lLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAorCSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFJlYWQgc3RyZWFtIGludG8gYSBzdHJpbmcuCisgICAqICBAcGFyYW0gaXMgIElucHV0IHN0cmVhbS4KKyAgICogIEBwYXJhbSBzdHIgIEJ1ZmZlciB0byBzdG9yZSBpbnRvLgorICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoZSBpbnB1dCBzdHJlYW0uCisgICAqCisgICAqICBTdG9yZXMgY2hhcmFjdGVycyBmcm9tIEBhIGlzIGludG8gQGEgc3RyIHVudGlsIHdoaXRlc3BhY2UgaXMgZm91bmQsIHRoZQorICAgKiAgZW5kIG9mIHRoZSBzdHJlYW0gaXMgZW5jb3VudGVyZWQsIG9yIHN0ci5tYXhfc2l6ZSgpIGlzIHJlYWNoZWQuICBJZgorICAgKiAgaXMud2lkdGgoKSBpcyBub24temVybywgdGhhdCBpcyB0aGUgbGltaXQgb24gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzCisgICAqICBzdG9yZWQgaW50byBAYSBzdHIuICBBbnkgcHJldmlvdXMgY29udGVudHMgb2YgQGEgc3RyIGFyZSBlcmFzZWQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKKworICB0ZW1wbGF0ZTw+CisgICAgYmFzaWNfaXN0cmVhbTxjaGFyPiYKKyAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhcj4mIF9faXMsIGJhc2ljX3N0cmluZzxjaGFyPiYgX19zdHIpOworCisgIC8qKgorICAgKiAgQGJyaWVmICBXcml0ZSBzdHJpbmcgdG8gYSBzdHJlYW0uCisgICAqICBAcGFyYW0gb3MgIE91dHB1dCBzdHJlYW0uCisgICAqICBAcGFyYW0gc3RyICBTdHJpbmcgdG8gd3JpdGUgb3V0LgorICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoZSBvdXRwdXQgc3RyZWFtLgorICAgKgorICAgKiAgT3V0cHV0IGNoYXJhY3RlcnMgb2YgQGEgc3RyIGludG8gb3MgZm9sbG93aW5nIHRoZSBzYW1lIHJ1bGVzIGFzIGZvcgorICAgKiAgd3JpdGluZyBhIEMgc3RyaW5nLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpCisgICAgeworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNTg2LiBzdHJpbmcgaW5zZXJ0ZXIgbm90IGEgZm9ybWF0dGVkIGZ1bmN0aW9uCisgICAgICByZXR1cm4gX19vc3RyZWFtX2luc2VydChfX29zLCBfX3N0ci5kYXRhKCksIF9fc3RyLnNpemUoKSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBSZWFkIGEgbGluZSBmcm9tIHN0cmVhbSBpbnRvIGEgc3RyaW5nLgorICAgKiAgQHBhcmFtIGlzICBJbnB1dCBzdHJlYW0uCisgICAqICBAcGFyYW0gc3RyICBCdWZmZXIgdG8gc3RvcmUgaW50by4KKyAgICogIEBwYXJhbSBkZWxpbSAgQ2hhcmFjdGVyIG1hcmtpbmcgZW5kIG9mIGxpbmUuCisgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhlIGlucHV0IHN0cmVhbS4KKyAgICoKKyAgICogIFN0b3JlcyBjaGFyYWN0ZXJzIGZyb20gQGEgaXMgaW50byBAYSBzdHIgdW50aWwgQGEgZGVsaW0gaXMgZm91bmQsIHRoZQorICAgKiAgZW5kIG9mIHRoZSBzdHJlYW0gaXMgZW5jb3VudGVyZWQsIG9yIHN0ci5tYXhfc2l6ZSgpIGlzIHJlYWNoZWQuICBJZgorICAgKiAgaXMud2lkdGgoKSBpcyBub24temVybywgdGhhdCBpcyB0aGUgbGltaXQgb24gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzCisgICAqICBzdG9yZWQgaW50byBAYSBzdHIuICBBbnkgcHJldmlvdXMgY29udGVudHMgb2YgQGEgc3RyIGFyZSBlcmFzZWQuICBJZiBAYQorICAgKiAgZGVsaW0gd2FzIGVuY291bnRlcmVkLCBpdCBpcyBleHRyYWN0ZWQgYnV0IG5vdCBzdG9yZWQgaW50byBAYSBzdHIuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSk7CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFJlYWQgYSBsaW5lIGZyb20gc3RyZWFtIGludG8gYSBzdHJpbmcuCisgICAqICBAcGFyYW0gaXMgIElucHV0IHN0cmVhbS4KKyAgICogIEBwYXJhbSBzdHIgIEJ1ZmZlciB0byBzdG9yZSBpbnRvLgorICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoZSBpbnB1dCBzdHJlYW0uCisgICAqCisgICAqICBTdG9yZXMgY2hhcmFjdGVycyBmcm9tIGlzIGludG8gQGEgc3RyIHVudGlsICZhcG9zO1xuJmFwb3M7IGlzCisgICAqICBmb3VuZCwgdGhlIGVuZCBvZiB0aGUgc3RyZWFtIGlzIGVuY291bnRlcmVkLCBvciBzdHIubWF4X3NpemUoKQorICAgKiAgaXMgcmVhY2hlZC4gIElmIGlzLndpZHRoKCkgaXMgbm9uLXplcm8sIHRoYXQgaXMgdGhlIGxpbWl0IG9uIHRoZQorICAgKiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgc3RvcmVkIGludG8gQGEgc3RyLiAgQW55IHByZXZpb3VzIGNvbnRlbnRzCisgICAqICBvZiBAYSBzdHIgYXJlIGVyYXNlZC4gIElmIGVuZCBvZiBsaW5lIHdhcyBlbmNvdW50ZXJlZCwgaXQgaXMKKyAgICogIGV4dHJhY3RlZCBidXQgbm90IHN0b3JlZCBpbnRvIEBhIHN0ci4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKQorICAgIHsgcmV0dXJuIGdldGxpbmUoX19pcywgX19zdHIsIF9faXMud2lkZW4oJ1xuJykpOyB9CisKKyAgdGVtcGxhdGU8PgorICAgIGJhc2ljX2lzdHJlYW08Y2hhcj4mCisgICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPGNoYXI+JiBfX2luLCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fc3RyLAorCSAgICBjaGFyIF9fZGVsaW0pOworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgdGVtcGxhdGU8PgorICAgIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mCisgICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JiBfX2luLCBiYXNpY19zdHJpbmc8d2NoYXJfdD4mIF9fc3RyLAorCSAgICB3Y2hhcl90IF9fZGVsaW0pOworI2VuZGlmICAKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjaWYgKGRlZmluZWQoX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18pICYmIGRlZmluZWQoX0dMSUJDWFhfVVNFX0M5OSkgXAorICAgICAmJiAhZGVmaW5lZChfR0xJQkNYWF9IQVZFX0JST0tFTl9WU1dQUklOVEYpKQorCisjaW5jbHVkZSA8ZXh0L3N0cmluZ19jb252ZXJzaW9ucy5oPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8vIDIxLjQgTnVtZXJpYyBDb252ZXJzaW9ucyBbc3RyaW5nLmNvbnZlcnNpb25zXS4KKyAgaW5saW5lIGludAorICBzdG9pKGNvbnN0IHN0cmluZyYgX19zdHIsIHNpemVfdCogX19pZHggPSAwLCBpbnQgX19iYXNlID0gMTApCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X19zdG9hPGxvbmcsIGludD4oJnN0ZDo6c3RydG9sLCAic3RvaSIsIF9fc3RyLmNfc3RyKCksCisJCQkJCV9faWR4LCBfX2Jhc2UpOyB9CisKKyAgaW5saW5lIGxvbmcKKyAgc3RvbChjb25zdCBzdHJpbmcmIF9fc3RyLCBzaXplX3QqIF9faWR4ID0gMCwgaW50IF9fYmFzZSA9IDEwKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fc3RvYSgmc3RkOjpzdHJ0b2wsICJzdG9sIiwgX19zdHIuY19zdHIoKSwKKwkJCSAgICAgX19pZHgsIF9fYmFzZSk7IH0KKworICBpbmxpbmUgdW5zaWduZWQgbG9uZworICBzdG91bChjb25zdCBzdHJpbmcmIF9fc3RyLCBzaXplX3QqIF9faWR4ID0gMCwgaW50IF9fYmFzZSA9IDEwKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fc3RvYSgmc3RkOjpzdHJ0b3VsLCAic3RvdWwiLCBfX3N0ci5jX3N0cigpLAorCQkJICAgICBfX2lkeCwgX19iYXNlKTsgfQorCisgIGlubGluZSBsb25nIGxvbmcKKyAgc3RvbGwoY29uc3Qgc3RyaW5nJiBfX3N0ciwgc2l6ZV90KiBfX2lkeCA9IDAsIGludCBfX2Jhc2UgPSAxMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2EoJnN0ZDo6c3RydG9sbCwgInN0b2xsIiwgX19zdHIuY19zdHIoKSwKKwkJCSAgICAgX19pZHgsIF9fYmFzZSk7IH0KKworICBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nCisgIHN0b3VsbChjb25zdCBzdHJpbmcmIF9fc3RyLCBzaXplX3QqIF9faWR4ID0gMCwgaW50IF9fYmFzZSA9IDEwKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fc3RvYSgmc3RkOjpzdHJ0b3VsbCwgInN0b3VsbCIsIF9fc3RyLmNfc3RyKCksCisJCQkgICAgIF9faWR4LCBfX2Jhc2UpOyB9CisKKyAgLy8gTkI6IHN0cnRvZiB2cyBzdHJ0b2QuCisgIGlubGluZSBmbG9hdAorICBzdG9mKGNvbnN0IHN0cmluZyYgX19zdHIsIHNpemVfdCogX19pZHggPSAwKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fc3RvYSgmc3RkOjpzdHJ0b2YsICJzdG9mIiwgX19zdHIuY19zdHIoKSwgX19pZHgpOyB9CisKKyAgaW5saW5lIGRvdWJsZQorICBzdG9kKGNvbnN0IHN0cmluZyYgX19zdHIsIHNpemVfdCogX19pZHggPSAwKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fc3RvYSgmc3RkOjpzdHJ0b2QsICJzdG9kIiwgX19zdHIuY19zdHIoKSwgX19pZHgpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIHN0b2xkKGNvbnN0IHN0cmluZyYgX19zdHIsIHNpemVfdCogX19pZHggPSAwKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fc3RvYSgmc3RkOjpzdHJ0b2xkLCAic3RvbGQiLCBfX3N0ci5jX3N0cigpLCBfX2lkeCk7IH0KKworICAvLyBOQjogKHYpc25wcmludGYgdnMgc3ByaW50Zi4KKworICAvLyBEUiAxMjYxLgorICBpbmxpbmUgc3RyaW5nCisgIHRvX3N0cmluZyhpbnQgX192YWwpCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X190b194c3RyaW5nPHN0cmluZz4oJnN0ZDo6dnNucHJpbnRmLCA0ICogc2l6ZW9mKGludCksCisJCQkJCSAgICIlZCIsIF9fdmFsKTsgfQorCisgIGlubGluZSBzdHJpbmcKKyAgdG9fc3RyaW5nKHVuc2lnbmVkIF9fdmFsKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fdG9feHN0cmluZzxzdHJpbmc+KCZzdGQ6OnZzbnByaW50ZiwKKwkJCQkJICAgNCAqIHNpemVvZih1bnNpZ25lZCksCisJCQkJCSAgICIldSIsIF9fdmFsKTsgfQorCisgIGlubGluZSBzdHJpbmcKKyAgdG9fc3RyaW5nKGxvbmcgX192YWwpCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X190b194c3RyaW5nPHN0cmluZz4oJnN0ZDo6dnNucHJpbnRmLCA0ICogc2l6ZW9mKGxvbmcpLAorCQkJCQkgICAiJWxkIiwgX192YWwpOyB9CisKKyAgaW5saW5lIHN0cmluZworICB0b19zdHJpbmcodW5zaWduZWQgbG9uZyBfX3ZhbCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8c3RyaW5nPigmc3RkOjp2c25wcmludGYsCisJCQkJCSAgIDQgKiBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCQkJCSAgICIlbHUiLCBfX3ZhbCk7IH0KKworICBpbmxpbmUgc3RyaW5nCisgIHRvX3N0cmluZyhsb25nIGxvbmcgX192YWwpCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X190b194c3RyaW5nPHN0cmluZz4oJnN0ZDo6dnNucHJpbnRmLAorCQkJCQkgICA0ICogc2l6ZW9mKGxvbmcgbG9uZyksCisJCQkJCSAgICIlbGxkIiwgX192YWwpOyB9CisKKyAgaW5saW5lIHN0cmluZworICB0b19zdHJpbmcodW5zaWduZWQgbG9uZyBsb25nIF9fdmFsKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fdG9feHN0cmluZzxzdHJpbmc+KCZzdGQ6OnZzbnByaW50ZiwKKwkJCQkJICAgNCAqIHNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpLAorCQkJCQkgICAiJWxsdSIsIF9fdmFsKTsgfQorCisgIGlubGluZSBzdHJpbmcKKyAgdG9fc3RyaW5nKGZsb2F0IF9fdmFsKQorICB7CisgICAgY29uc3QgaW50IF9fbiA9IAorICAgICAgX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPGZsb2F0Pjo6X19tYXhfZXhwb25lbnQxMCArIDIwOworICAgIHJldHVybiBfX2dudV9jeHg6Ol9fdG9feHN0cmluZzxzdHJpbmc+KCZzdGQ6OnZzbnByaW50ZiwgX19uLAorCQkJCQkgICAiJWYiLCBfX3ZhbCk7CisgIH0KKworICBpbmxpbmUgc3RyaW5nCisgIHRvX3N0cmluZyhkb3VibGUgX192YWwpCisgIHsKKyAgICBjb25zdCBpbnQgX19uID0gCisgICAgICBfX2dudV9jeHg6Ol9fbnVtZXJpY190cmFpdHM8ZG91YmxlPjo6X19tYXhfZXhwb25lbnQxMCArIDIwOworICAgIHJldHVybiBfX2dudV9jeHg6Ol9fdG9feHN0cmluZzxzdHJpbmc+KCZzdGQ6OnZzbnByaW50ZiwgX19uLAorCQkJCQkgICAiJWYiLCBfX3ZhbCk7CisgIH0KKworICBpbmxpbmUgc3RyaW5nCisgIHRvX3N0cmluZyhsb25nIGRvdWJsZSBfX3ZhbCkKKyAgeworICAgIGNvbnN0IGludCBfX24gPSAKKyAgICAgIF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxsb25nIGRvdWJsZT46Ol9fbWF4X2V4cG9uZW50MTAgKyAyMDsKKyAgICByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8c3RyaW5nPigmc3RkOjp2c25wcmludGYsIF9fbiwKKwkJCQkJICAgIiVMZiIsIF9fdmFsKTsKKyAgfQorCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgaW5saW5lIGludCAKKyAgc3RvaShjb25zdCB3c3RyaW5nJiBfX3N0ciwgc2l6ZV90KiBfX2lkeCA9IDAsIGludCBfX2Jhc2UgPSAxMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2E8bG9uZywgaW50Pigmc3RkOjp3Y3N0b2wsICJzdG9pIiwgX19zdHIuY19zdHIoKSwKKwkJCQkJX19pZHgsIF9fYmFzZSk7IH0KKworICBpbmxpbmUgbG9uZyAKKyAgc3RvbChjb25zdCB3c3RyaW5nJiBfX3N0ciwgc2l6ZV90KiBfX2lkeCA9IDAsIGludCBfX2Jhc2UgPSAxMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2EoJnN0ZDo6d2NzdG9sLCAic3RvbCIsIF9fc3RyLmNfc3RyKCksCisJCQkgICAgIF9faWR4LCBfX2Jhc2UpOyB9CisKKyAgaW5saW5lIHVuc2lnbmVkIGxvbmcKKyAgc3RvdWwoY29uc3Qgd3N0cmluZyYgX19zdHIsIHNpemVfdCogX19pZHggPSAwLCBpbnQgX19iYXNlID0gMTApCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X19zdG9hKCZzdGQ6Ondjc3RvdWwsICJzdG91bCIsIF9fc3RyLmNfc3RyKCksCisJCQkgICAgIF9faWR4LCBfX2Jhc2UpOyB9CisKKyAgaW5saW5lIGxvbmcgbG9uZworICBzdG9sbChjb25zdCB3c3RyaW5nJiBfX3N0ciwgc2l6ZV90KiBfX2lkeCA9IDAsIGludCBfX2Jhc2UgPSAxMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2EoJnN0ZDo6d2NzdG9sbCwgInN0b2xsIiwgX19zdHIuY19zdHIoKSwKKwkJCSAgICAgX19pZHgsIF9fYmFzZSk7IH0KKworICBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nCisgIHN0b3VsbChjb25zdCB3c3RyaW5nJiBfX3N0ciwgc2l6ZV90KiBfX2lkeCA9IDAsIGludCBfX2Jhc2UgPSAxMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2EoJnN0ZDo6d2NzdG91bGwsICJzdG91bGwiLCBfX3N0ci5jX3N0cigpLAorCQkJICAgICBfX2lkeCwgX19iYXNlKTsgfQorCisgIC8vIE5COiB3Y3N0b2YgdnMgd2NzdG9kLgorICBpbmxpbmUgZmxvYXQKKyAgc3RvZihjb25zdCB3c3RyaW5nJiBfX3N0ciwgc2l6ZV90KiBfX2lkeCA9IDApCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X19zdG9hKCZzdGQ6Ondjc3RvZiwgInN0b2YiLCBfX3N0ci5jX3N0cigpLCBfX2lkeCk7IH0KKworICBpbmxpbmUgZG91YmxlCisgIHN0b2QoY29uc3Qgd3N0cmluZyYgX19zdHIsIHNpemVfdCogX19pZHggPSAwKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fc3RvYSgmc3RkOjp3Y3N0b2QsICJzdG9kIiwgX19zdHIuY19zdHIoKSwgX19pZHgpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIHN0b2xkKGNvbnN0IHdzdHJpbmcmIF9fc3RyLCBzaXplX3QqIF9faWR4ID0gMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2EoJnN0ZDo6d2NzdG9sZCwgInN0b2xkIiwgX19zdHIuY19zdHIoKSwgX19pZHgpOyB9CisKKyAgLy8gRFIgMTI2MS4KKyAgaW5saW5lIHdzdHJpbmcKKyAgdG9fd3N0cmluZyhpbnQgX192YWwpCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X190b194c3RyaW5nPHdzdHJpbmc+KCZzdGQ6OnZzd3ByaW50ZiwgNCAqIHNpemVvZihpbnQpLAorCQkJCQkgICAgTCIlZCIsIF9fdmFsKTsgfQorCisgIGlubGluZSB3c3RyaW5nCisgIHRvX3dzdHJpbmcodW5zaWduZWQgX192YWwpCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X190b194c3RyaW5nPHdzdHJpbmc+KCZzdGQ6OnZzd3ByaW50ZiwKKwkJCQkJICAgIDQgKiBzaXplb2YodW5zaWduZWQpLAorCQkJCQkgICAgTCIldSIsIF9fdmFsKTsgfQorCisgIGlubGluZSB3c3RyaW5nCisgIHRvX3dzdHJpbmcobG9uZyBfX3ZhbCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8d3N0cmluZz4oJnN0ZDo6dnN3cHJpbnRmLCA0ICogc2l6ZW9mKGxvbmcpLAorCQkJCQkgICAgTCIlbGQiLCBfX3ZhbCk7IH0KKworICBpbmxpbmUgd3N0cmluZworICB0b193c3RyaW5nKHVuc2lnbmVkIGxvbmcgX192YWwpCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X190b194c3RyaW5nPHdzdHJpbmc+KCZzdGQ6OnZzd3ByaW50ZiwKKwkJCQkJICAgIDQgKiBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCQkJCSAgICBMIiVsdSIsIF9fdmFsKTsgfQorCisgIGlubGluZSB3c3RyaW5nCisgIHRvX3dzdHJpbmcobG9uZyBsb25nIF9fdmFsKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fdG9feHN0cmluZzx3c3RyaW5nPigmc3RkOjp2c3dwcmludGYsCisJCQkJCSAgICA0ICogc2l6ZW9mKGxvbmcgbG9uZyksCisJCQkJCSAgICBMIiVsbGQiLCBfX3ZhbCk7IH0KKworICBpbmxpbmUgd3N0cmluZworICB0b193c3RyaW5nKHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZhbCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8d3N0cmluZz4oJnN0ZDo6dnN3cHJpbnRmLAorCQkJCQkgICAgNCAqIHNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpLAorCQkJCQkgICAgTCIlbGx1IiwgX192YWwpOyB9CisKKyAgaW5saW5lIHdzdHJpbmcKKyAgdG9fd3N0cmluZyhmbG9hdCBfX3ZhbCkKKyAgeworICAgIGNvbnN0IGludCBfX24gPQorICAgICAgX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPGZsb2F0Pjo6X19tYXhfZXhwb25lbnQxMCArIDIwOworICAgIHJldHVybiBfX2dudV9jeHg6Ol9fdG9feHN0cmluZzx3c3RyaW5nPigmc3RkOjp2c3dwcmludGYsIF9fbiwKKwkJCQkJICAgIEwiJWYiLCBfX3ZhbCk7CisgIH0KKworICBpbmxpbmUgd3N0cmluZworICB0b193c3RyaW5nKGRvdWJsZSBfX3ZhbCkKKyAgeworICAgIGNvbnN0IGludCBfX24gPQorICAgICAgX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPGRvdWJsZT46Ol9fbWF4X2V4cG9uZW50MTAgKyAyMDsKKyAgICByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8d3N0cmluZz4oJnN0ZDo6dnN3cHJpbnRmLCBfX24sCisJCQkJCSAgICBMIiVmIiwgX192YWwpOworICB9CisKKyAgaW5saW5lIHdzdHJpbmcKKyAgdG9fd3N0cmluZyhsb25nIGRvdWJsZSBfX3ZhbCkKKyAgeworICAgIGNvbnN0IGludCBfX24gPQorICAgICAgX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPGxvbmcgZG91YmxlPjo6X19tYXhfZXhwb25lbnQxMCArIDIwOworICAgIHJldHVybiBfX2dudV9jeHg6Ol9fdG9feHN0cmluZzx3c3RyaW5nPigmc3RkOjp2c3dwcmludGYsIF9fbiwKKwkJCQkJICAgIEwiJUxmIiwgX192YWwpOworICB9CisjZW5kaWYKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYgLyogX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18gJiYgX0dMSUJDWFhfVVNFX0M5OSAuLi4gKi8KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisKKyNpbmNsdWRlIDxiaXRzL2Z1bmN0aW9uYWxfaGFzaC5oPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8vIERSIDExODIuCisKKyNpZm5kZWYgX0dMSUJDWFhfQ09NUEFUSUJJTElUWV9DWFgwWAorICAvLy8gc3RkOjpoYXNoIHNwZWNpYWxpemF0aW9uIGZvciBzdHJpbmcuCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgaGFzaDxzdHJpbmc+CisgICAgOiBwdWJsaWMgc3RkOjp1bmFyeV9mdW5jdGlvbjxzdHJpbmcsIHNpemVfdD4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoY29uc3Qgc3RyaW5nJiBfX3MpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGQ6Ol9GbnZfaGFzaDo6aGFzaChfX3MuZGF0YSgpLCBfX3MubGVuZ3RoKCkpOyB9CisgICAgfTsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIC8vLyBzdGQ6Omhhc2ggc3BlY2lhbGl6YXRpb24gZm9yIHdzdHJpbmcuCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgaGFzaDx3c3RyaW5nPgorICAgIDogcHVibGljIHN0ZDo6dW5hcnlfZnVuY3Rpb248d3N0cmluZywgc2l6ZV90PgorICAgIHsKKyAgICAgIHNpemVfdAorICAgICAgb3BlcmF0b3IoKShjb25zdCB3c3RyaW5nJiBfX3MpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGQ6Ol9GbnZfaGFzaDo6aGFzaChfX3MuZGF0YSgpLAorCQkJCSAgICBfX3MubGVuZ3RoKCkgKiBzaXplb2Yod2NoYXJfdCkpOyB9CisgICAgfTsKKyNlbmRpZgorI2VuZGlmIC8qIF9HTElCQ1hYX0NPTVBBVElCSUxJVFlfQ1hYMFggKi8KKworI2lmZGVmIF9HTElCQ1hYX1VTRV9DOTlfU1RESU5UX1RSMQorICAvLy8gc3RkOjpoYXNoIHNwZWNpYWxpemF0aW9uIGZvciB1MTZzdHJpbmcuCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgaGFzaDx1MTZzdHJpbmc+CisgICAgOiBwdWJsaWMgc3RkOjp1bmFyeV9mdW5jdGlvbjx1MTZzdHJpbmcsIHNpemVfdD4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgdTE2c3RyaW5nJiBfX3MpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGQ6Ol9GbnZfaGFzaDo6aGFzaChfX3MuZGF0YSgpLAorCQkJCSAgICBfX3MubGVuZ3RoKCkgKiBzaXplb2YoY2hhcjE2X3QpKTsgfQorICAgIH07CisKKyAgLy8vIHN0ZDo6aGFzaCBzcGVjaWFsaXphdGlvbiBmb3IgdTMyc3RyaW5nLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGhhc2g8dTMyc3RyaW5nPgorICAgIDogcHVibGljIHN0ZDo6dW5hcnlfZnVuY3Rpb248dTMyc3RyaW5nLCBzaXplX3Q+CisgICAgeworICAgICAgc2l6ZV90CisgICAgICBvcGVyYXRvcigpKGNvbnN0IHUzMnN0cmluZyYgX19zKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpfRm52X2hhc2g6Omhhc2goX19zLmRhdGEoKSwKKwkJCQkgICAgX19zLmxlbmd0aCgpICogc2l6ZW9mKGNoYXIzMl90KSk7IH0KKyAgICB9OworI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmIC8qIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fICovCisKKyNlbmRpZiAvKiBfQkFTSUNfU1RSSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9iYXNpY19zdHJpbmcudGNjIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2Jhc2ljX3N0cmluZy50Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ1MGE0NwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9iYXNpY19zdHJpbmcudGNjCkBAIC0wLDAgKzEsMTE2NiBAQAorLy8gQ29tcG9uZW50cyBmb3IgbWFuaXB1bGF0aW5nIHNlcXVlbmNlcyBvZiBjaGFyYWN0ZXJzIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwKKy8vIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiYXNpY19zdHJpbmcudGNjCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyMSAgU3RyaW5ncyBsaWJyYXJ5CisvLworCisvLyBXcml0dGVuIGJ5IEphc29uIE1lcnJpbGwgYmFzZWQgdXBvbiB0aGUgc3BlY2lmaWNhdGlvbiBieSBUYWthbm9yaSBBZGFjaGkKKy8vIGluIEFOU0kgWDNKMTYvOTQtMDAxM1IyLiAgUmV3cml0dGVuIGJ5IE5hdGhhbiBNeWVycyB0byBJU08tMTQ4ODIuCisKKyNpZm5kZWYgX0JBU0lDX1NUUklOR19UQ0MKKyNkZWZpbmUgX0JBU0lDX1NUUklOR19UQ0MgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxjeHhhYmktZm9yY2VkLmg+CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgX1JlcDo6X1NfbWF4X3NpemUgPSAoKChucG9zIC0gc2l6ZW9mKF9SZXBfYmFzZSkpL3NpemVvZihfQ2hhclQpKSAtIDEpIC8gNDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBjb25zdCBfQ2hhclQKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBfUmVwOjpfU190ZXJtaW5hbCA9IF9DaGFyVCgpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Om5wb3M7CisKKyAgLy8gTGlua2VyIHNldHMgX1NfZW1wdHlfcmVwX3N0b3JhZ2UgdG8gYWxsIDBzIChvbmUgcmVmZXJlbmNlLCBlbXB0eSBzdHJpbmcpCisgIC8vIGF0IHN0YXRpYyBpbml0IHRpbWUgKGJlZm9yZSBzdGF0aWMgY3RvcnMgYXJlIHJ1bikuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6Ol9TX2VtcHR5X3JlcF9zdG9yYWdlWworICAgIChzaXplb2YoX1JlcF9iYXNlKSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAxKSAvCisgICAgICBzaXplb2Yoc2l6ZV90eXBlKV07CisKKyAgLy8gTkI6IFRoaXMgaXMgdGhlIHNwZWNpYWwgY2FzZSBmb3IgSW5wdXQgSXRlcmF0b3JzLCB1c2VkIGluCisgIC8vIGlzdHJlYW1idWZfaXRlcmF0b3JzLCBldGMuCisgIC8vIElucHV0IEl0ZXJhdG9ycyBoYXZlIGEgY29zdCBzdHJ1Y3R1cmUgdmVyeSBkaWZmZXJlbnQgZnJvbQorICAvLyBwb2ludGVycywgY2FsbGluZyBmb3IgYSBkaWZmZXJlbnQgY29kaW5nIHN0eWxlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyYXRvcj4KKyAgICAgIF9DaGFyVCoKKyAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXJhdG9yIF9fYmVnLCBfSW5JdGVyYXRvciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCisJCSAgIGlucHV0X2l0ZXJhdG9yX3RhZykKKyAgICAgIHsKKyNpZm5kZWYgX0dMSUJDWFhfRlVMTFlfRFlOQU1JQ19TVFJJTkcKKwlpZiAoX19iZWcgPT0gX19lbmQgJiYgX19hID09IF9BbGxvYygpKQorCSAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmRhdGEoKTsKKyNlbmRpZgorCS8vIEF2b2lkIHJlYWxsb2NhdGlvbiBmb3IgY29tbW9uIGNhc2UuCisJX0NoYXJUIF9fYnVmWzEyOF07CisJc2l6ZV90eXBlIF9fbGVuID0gMDsKKwl3aGlsZSAoX19iZWcgIT0gX19lbmQgJiYgX19sZW4gPCBzaXplb2YoX19idWYpIC8gc2l6ZW9mKF9DaGFyVCkpCisJICB7CisJICAgIF9fYnVmW19fbGVuKytdID0gKl9fYmVnOworCSAgICArK19fYmVnOworCSAgfQorCV9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiwgc2l6ZV90eXBlKDApLCBfX2EpOworCV9NX2NvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9fYnVmLCBfX2xlbik7CisJX190cnkKKwkgIHsKKwkgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kKQorCSAgICAgIHsKKwkJaWYgKF9fbGVuID09IF9fci0+X01fY2FwYWNpdHkpCisJCSAgeworCQkgICAgLy8gQWxsb2NhdGUgbW9yZSBzcGFjZS4KKwkJICAgIF9SZXAqIF9fYW5vdGhlciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiArIDEsIF9fbGVuLCBfX2EpOworCQkgICAgX01fY29weShfX2Fub3RoZXItPl9NX3JlZmRhdGEoKSwgX19yLT5fTV9yZWZkYXRhKCksIF9fbGVuKTsKKwkJICAgIF9fci0+X01fZGVzdHJveShfX2EpOworCQkgICAgX19yID0gX19hbm90aGVyOworCQkgIH0KKwkJX19yLT5fTV9yZWZkYXRhKClbX19sZW4rK10gPSAqX19iZWc7CisJCSsrX19iZWc7CisJICAgICAgfQorCSAgfQorCV9fY2F0Y2goLi4uKQorCSAgeworCSAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKKwkgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICB9CisJX19yLT5fTV9zZXRfbGVuZ3RoX2FuZF9zaGFyYWJsZShfX2xlbik7CisJcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfSW5JdGVyYXRvcj4KKyAgICAgIF9DaGFyVCoKKyAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXJhdG9yIF9fYmVnLCBfSW5JdGVyYXRvciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCisJCSAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQorICAgICAgeworI2lmbmRlZiBfR0xJQkNYWF9GVUxMWV9EWU5BTUlDX1NUUklORworCWlmIChfX2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCisJICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmZGF0YSgpOworI2VuZGlmCisJLy8gTkI6IE5vdCByZXF1aXJlZCwgYnV0IGNvbnNpZGVyZWQgYmVzdCBwcmFjdGljZS4KKwlpZiAoX19nbnVfY3h4OjpfX2lzX251bGxfcG9pbnRlcihfX2JlZykgJiYgX19iZWcgIT0gX19lbmQpCisJICBfX3Rocm93X2xvZ2ljX2Vycm9yKF9fTigiYmFzaWNfc3RyaW5nOjpfU19jb25zdHJ1Y3QgTlVMTCBub3QgdmFsaWQiKSk7CisKKwljb25zdCBzaXplX3R5cGUgX19kbmV3ID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihzdGQ6OmRpc3RhbmNlKF9fYmVnLAorCQkJCQkJCQkgICAgICBfX2VuZCkpOworCS8vIENoZWNrIGZvciBvdXRfb2ZfcmFuZ2UgYW5kIGxlbmd0aF9lcnJvciBleGNlcHRpb25zLgorCV9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2RuZXcsIHNpemVfdHlwZSgwKSwgX19hKTsKKwlfX3RyeQorCSAgeyBfU19jb3B5X2NoYXJzKF9fci0+X01fcmVmZGF0YSgpLCBfX2JlZywgX19lbmQpOyB9CisJX19jYXRjaCguLi4pCisJICB7CisJICAgIF9fci0+X01fZGVzdHJveShfX2EpOworCSAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgIH0KKwlfX3ItPl9NX3NldF9sZW5ndGhfYW5kX3NoYXJhYmxlKF9fZG5ldyk7CisJcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIF9DaGFyVCoKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCisgICAgeworI2lmbmRlZiBfR0xJQkNYWF9GVUxMWV9EWU5BTUlDX1NUUklORworICAgICAgaWYgKF9fbiA9PSAwICYmIF9fYSA9PSBfQWxsb2MoKSkKKwlyZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmZGF0YSgpOworI2VuZGlmCisgICAgICAvLyBDaGVjayBmb3Igb3V0X29mX3JhbmdlIGFuZCBsZW5ndGhfZXJyb3IgZXhjZXB0aW9ucy4KKyAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX24sIHNpemVfdHlwZSgwKSwgX19hKTsKKyAgICAgIGlmIChfX24pCisJX01fYXNzaWduKF9fci0+X01fcmVmZGF0YSgpLCBfX24sIF9fYyk7CisKKyAgICAgIF9fci0+X01fc2V0X2xlbmd0aF9hbmRfc2hhcmFibGUoX19uKTsKKyAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCisgICAgOiBfTV9kYXRhcGx1cyhfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihfQWxsb2MoX19zdHIuZ2V0X2FsbG9jYXRvcigpKSwKKwkJCQkJICBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpLAorCQkgIF9fc3RyLmdldF9hbGxvY2F0b3IoKSkKKyAgICB7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBiYXNpY19zdHJpbmcoY29uc3QgX0FsbG9jJiBfX2EpCisgICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlKCksIF9DaGFyVCgpLCBfX2EpLCBfX2EpCisgICAgeyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKKyAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3N0ci5fTV9kYXRhKCkKKwkJCSAgICAgICArIF9fc3RyLl9NX2NoZWNrKF9fcG9zLAorCQkJCQkJImJhc2ljX3N0cmluZzo6YmFzaWNfc3RyaW5nIiksCisJCQkgICAgICAgX19zdHIuX01fZGF0YSgpICsgX19zdHIuX01fbGltaXQoX19wb3MsIF9fbikKKwkJCSAgICAgICArIF9fcG9zLCBfQWxsb2MoKSksIF9BbGxvYygpKQorICAgIHsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCisJCSBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkKKyAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3N0ci5fTV9kYXRhKCkKKwkJCSAgICAgICArIF9fc3RyLl9NX2NoZWNrKF9fcG9zLAorCQkJCQkJImJhc2ljX3N0cmluZzo6YmFzaWNfc3RyaW5nIiksCisJCQkgICAgICAgX19zdHIuX01fZGF0YSgpICsgX19zdHIuX01fbGltaXQoX19wb3MsIF9fbikKKwkJCSAgICAgICArIF9fcG9zLCBfX2EpLCBfX2EpCisgICAgeyB9CisKKyAgLy8gVEJEOiBEUEcgYW5ub3RhdGUKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkKKyAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3MsIF9fcyArIF9fbiwgX19hKSwgX19hKQorICAgIHsgfQorCisgIC8vIFRCRDogRFBHIGFubm90YXRlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EpCisgICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zLCBfX3MgPyBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykgOgorCQkJICAgICAgIF9fcyArIG5wb3MsIF9fYSksIF9fYSkKKyAgICB7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCisgICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19uLCBfX2MsIF9fYSksIF9fYSkKKyAgICB7IH0KKworICAvLyBUQkQ6IERQRyBhbm5vdGF0ZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKKyAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9fYSksIF9fYSkKKyAgICB7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIGJhc2ljX3N0cmluZyhpbml0aWFsaXplcl9saXN0PF9DaGFyVD4gX19sLCBjb25zdCBfQWxsb2MmIF9fYSkKKyAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX2wuYmVnaW4oKSwgX19sLmVuZCgpLCBfX2EpLCBfX2EpCisgICAgeyB9CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQorICAgIHsKKyAgICAgIGlmIChfTV9yZXAoKSAhPSBfX3N0ci5fTV9yZXAoKSkKKwl7CisJICAvLyBYWFggTVQKKwkgIGNvbnN0IGFsbG9jYXRvcl90eXBlIF9fYSA9IHRoaXMtPmdldF9hbGxvY2F0b3IoKTsKKwkgIF9DaGFyVCogX190bXAgPSBfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihfX2EsIF9fc3RyLmdldF9hbGxvY2F0b3IoKSk7CisJICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOworCSAgX01fZGF0YShfX3RtcCk7CisJfQorICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIGFzc2lnbihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKKyAgICB7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nX2xlbihfX3MsIF9fbik7CisgICAgICBfTV9jaGVja19sZW5ndGgodGhpcy0+c2l6ZSgpLCBfX24sICJiYXNpY19zdHJpbmc6OmFzc2lnbiIpOworICAgICAgaWYgKF9NX2Rpc2p1bmN0KF9fcykgfHwgX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpKQorCXJldHVybiBfTV9yZXBsYWNlX3NhZmUoc2l6ZV90eXBlKDApLCB0aGlzLT5zaXplKCksIF9fcywgX19uKTsKKyAgICAgIGVsc2UKKwl7CisJICAvLyBXb3JrIGluLXBsYWNlLgorCSAgY29uc3Qgc2l6ZV90eXBlIF9fcG9zID0gX19zIC0gX01fZGF0YSgpOworCSAgaWYgKF9fcG9zID49IF9fbikKKwkgICAgX01fY29weShfTV9kYXRhKCksIF9fcywgX19uKTsKKwkgIGVsc2UgaWYgKF9fcG9zKQorCSAgICBfTV9tb3ZlKF9NX2RhdGEoKSwgX19zLCBfX24pOworCSAgX01fcmVwKCktPl9NX3NldF9sZW5ndGhfYW5kX3NoYXJhYmxlKF9fbik7CisJICByZXR1cm4gKnRoaXM7CisJfQorICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKKyAgICB7CisgICAgICBpZiAoX19uKQorCXsKKwkgIF9NX2NoZWNrX2xlbmd0aChzaXplX3R5cGUoMCksIF9fbiwgImJhc2ljX3N0cmluZzo6YXBwZW5kIik7CSAgCisJICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7CisJICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpIHx8IF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSkKKwkgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CisJICBfTV9hc3NpZ24oX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpLCBfX24sIF9fYyk7CisJICBfTV9yZXAoKS0+X01fc2V0X2xlbmd0aF9hbmRfc2hhcmFibGUoX19sZW4pOworCX0KKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZ19sZW4oX19zLCBfX24pOworICAgICAgaWYgKF9fbikKKwl7CisJICBfTV9jaGVja19sZW5ndGgoc2l6ZV90eXBlKDApLCBfX24sICJiYXNpY19zdHJpbmc6OmFwcGVuZCIpOworCSAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOworCSAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCisJICAgIHsKKwkgICAgICBpZiAoX01fZGlzanVuY3QoX19zKSkKKwkJdGhpcy0+cmVzZXJ2ZShfX2xlbik7CisJICAgICAgZWxzZQorCQl7CisJCSAgY29uc3Qgc2l6ZV90eXBlIF9fb2ZmID0gX19zIC0gX01fZGF0YSgpOworCQkgIHRoaXMtPnJlc2VydmUoX19sZW4pOworCQkgIF9fcyA9IF9NX2RhdGEoKSArIF9fb2ZmOworCQl9CisJICAgIH0KKwkgIF9NX2NvcHkoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpLCBfX3MsIF9fbik7CisJICBfTV9yZXAoKS0+X01fc2V0X2xlbmd0aF9hbmRfc2hhcmFibGUoX19sZW4pOworCX0KKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gX19zdHIuc2l6ZSgpOworICAgICAgaWYgKF9fc2l6ZSkKKwl7CisJICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX3NpemUgKyB0aGlzLT5zaXplKCk7CisJICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpIHx8IF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSkKKwkgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CisJICBfTV9jb3B5KF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSwgX19zdHIuX01fZGF0YSgpLCBfX3NpemUpOworCSAgX01fcmVwKCktPl9NX3NldF9sZW5ndGhfYW5kX3NoYXJhYmxlKF9fbGVuKTsKKwl9CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfSAgICAKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgX19zdHIuX01fY2hlY2soX19wb3MsICJiYXNpY19zdHJpbmc6OmFwcGVuZCIpOworICAgICAgX19uID0gX19zdHIuX01fbGltaXQoX19wb3MsIF9fbik7CisgICAgICBpZiAoX19uKQorCXsKKwkgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRoaXMtPnNpemUoKTsKKwkgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkgfHwgX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpKQorCSAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKKwkgIF9NX2NvcHkoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpLCBfX3N0ci5fTV9kYXRhKCkgKyBfX3BvcywgX19uKTsKKwkgIF9NX3JlcCgpLT5fTV9zZXRfbGVuZ3RoX2FuZF9zaGFyYWJsZShfX2xlbik7CSAgCisJfQorICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCisgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKKyAgICAgeworICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmdfbGVuKF9fcywgX19uKTsKKyAgICAgICBfTV9jaGVjayhfX3BvcywgImJhc2ljX3N0cmluZzo6aW5zZXJ0Iik7CisgICAgICAgX01fY2hlY2tfbGVuZ3RoKHNpemVfdHlwZSgwKSwgX19uLCAiYmFzaWNfc3RyaW5nOjppbnNlcnQiKTsKKyAgICAgICBpZiAoX01fZGlzanVuY3QoX19zKSB8fCBfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCisgICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9fcG9zLCBzaXplX3R5cGUoMCksIF9fcywgX19uKTsKKyAgICAgICBlbHNlCisgICAgICAgICB7CisgICAgICAgICAgIC8vIFdvcmsgaW4tcGxhY2UuCisgICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29mZiA9IF9fcyAtIF9NX2RhdGEoKTsKKyAgICAgICAgICAgX01fbXV0YXRlKF9fcG9zLCAwLCBfX24pOworICAgICAgICAgICBfX3MgPSBfTV9kYXRhKCkgKyBfX29mZjsKKyAgICAgICAgICAgX0NoYXJUKiBfX3AgPSBfTV9kYXRhKCkgKyBfX3BvczsKKyAgICAgICAgICAgaWYgKF9fcyAgKyBfX24gPD0gX19wKQorICAgICAgICAgICAgIF9NX2NvcHkoX19wLCBfX3MsIF9fbik7CisgICAgICAgICAgIGVsc2UgaWYgKF9fcyA+PSBfX3ApCisgICAgICAgICAgICAgX01fY29weShfX3AsIF9fcyArIF9fbiwgX19uKTsKKyAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgIHsKKwkgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmxlZnQgPSBfX3AgLSBfX3M7CisgICAgICAgICAgICAgICBfTV9jb3B5KF9fcCwgX19zLCBfX25sZWZ0KTsKKyAgICAgICAgICAgICAgIF9NX2NvcHkoX19wICsgX19ubGVmdCwgX19wICsgX19uLCBfX24gLSBfX25sZWZ0KTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgIH0KKyAgICAgfQorCisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6aXRlcmF0b3IKKyAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgeworICAgICAgIF9HTElCQ1hYX0RFQlVHX1BFREFTU0VSVChfX2ZpcnN0ID49IF9NX2liZWdpbigpICYmIF9fZmlyc3QgPD0gX19sYXN0CisJCQkJJiYgX19sYXN0IDw9IF9NX2llbmQoKSk7CisKKyAgICAgICAvLyBOQjogVGhpcyBpc24ndCBqdXN0IGFuIG9wdGltaXphdGlvbiAoYmFpbCBvdXQgZWFybHkgd2hlbgorICAgICAgIC8vIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8sIHJlYWxseSksIGl0J3MgYWxzbyBhIGNvcnJlY3RuZXNzCisgICAgICAgLy8gaXNzdWUgdnMgTVQsIHNlZSBsaWJzdGRjKysvNDA1MTguCisgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IF9fbGFzdCAtIF9fZmlyc3Q7CisgICAgICAgaWYgKF9fc2l6ZSkKKwkgeworCSAgIGNvbnN0IHNpemVfdHlwZSBfX3BvcyA9IF9fZmlyc3QgLSBfTV9pYmVnaW4oKTsKKwkgICBfTV9tdXRhdGUoX19wb3MsIF9fc2l6ZSwgc2l6ZV90eXBlKDApKTsKKwkgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOworCSAgIHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyBfX3Bvcyk7CisJIH0KKyAgICAgICBlbHNlCisJIHJldHVybiBfX2ZpcnN0OworICAgICB9CisKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgorICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKKwkgICAgIHNpemVfdHlwZSBfX24yKQorICAgICB7CisgICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZ19sZW4oX19zLCBfX24yKTsKKyAgICAgICBfTV9jaGVjayhfX3BvcywgImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOworICAgICAgIF9fbjEgPSBfTV9saW1pdChfX3BvcywgX19uMSk7CisgICAgICAgX01fY2hlY2tfbGVuZ3RoKF9fbjEsIF9fbjIsICJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKKyAgICAgICBib29sIF9fbGVmdDsKKyAgICAgICBpZiAoX01fZGlzanVuY3QoX19zKSB8fCBfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCisgICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9fcG9zLCBfX24xLCBfX3MsIF9fbjIpOworICAgICAgIGVsc2UgaWYgKChfX2xlZnQgPSBfX3MgKyBfX24yIDw9IF9NX2RhdGEoKSArIF9fcG9zKQorCQl8fCBfTV9kYXRhKCkgKyBfX3BvcyArIF9fbjEgPD0gX19zKQorCSB7CisJICAgLy8gV29yayBpbi1wbGFjZTogbm9uLW92ZXJsYXBwaW5nIGNhc2UuCisJICAgc2l6ZV90eXBlIF9fb2ZmID0gX19zIC0gX01fZGF0YSgpOworCSAgIF9fbGVmdCA/IF9fb2ZmIDogKF9fb2ZmICs9IF9fbjIgLSBfX24xKTsKKwkgICBfTV9tdXRhdGUoX19wb3MsIF9fbjEsIF9fbjIpOworCSAgIF9NX2NvcHkoX01fZGF0YSgpICsgX19wb3MsIF9NX2RhdGEoKSArIF9fb2ZmLCBfX24yKTsKKwkgICByZXR1cm4gKnRoaXM7CisJIH0KKyAgICAgICBlbHNlCisJIHsKKwkgICAvLyBUb2RvOiBvdmVybGFwcGluZyBjYXNlLgorCSAgIGNvbnN0IGJhc2ljX3N0cmluZyBfX3RtcChfX3MsIF9fbjIpOworCSAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX19wb3MsIF9fbjEsIF9fdG1wLl9NX2RhdGEoKSwgX19uMik7CisJIH0KKyAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKKyAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYgX19hKSB0aHJvdyAoKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSBzaXplb2YoX1JlcF9iYXNlKSArCisJICAgICAgICAgICAgICAgICAgICAgICAodGhpcy0+X01fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpOworICAgICAgX1Jhd19ieXRlc19hbGxvYyhfX2EpLmRlYWxsb2NhdGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcyksIF9fc2l6ZSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBfTV9sZWFrX2hhcmQoKQorICAgIHsKKyNpZm5kZWYgX0dMSUJDWFhfRlVMTFlfRFlOQU1JQ19TVFJJTkcKKyAgICAgIGlmIChfTV9yZXAoKSA9PSAmX1NfZW1wdHlfcmVwKCkpCisJcmV0dXJuOworI2VuZGlmCisgICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpKQorCV9NX211dGF0ZSgwLCAwLCAwKTsKKyAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXplX3R5cGUgX19sZW4yKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gdGhpcy0+c2l6ZSgpOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3X3NpemUgPSBfX29sZF9zaXplICsgX19sZW4yIC0gX19sZW4xOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9faG93X211Y2ggPSBfX29sZF9zaXplIC0gX19wb3MgLSBfX2xlbjE7CisKKyAgICAgIGlmIChfX25ld19zaXplID4gdGhpcy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCisJeworCSAgLy8gTXVzdCByZWFsbG9jYXRlLgorCSAgY29uc3QgYWxsb2NhdG9yX3R5cGUgX19hID0gZ2V0X2FsbG9jYXRvcigpOworCSAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbmV3X3NpemUsIHRoaXMtPmNhcGFjaXR5KCksIF9fYSk7CisKKwkgIGlmIChfX3BvcykKKwkgICAgX01fY29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fZGF0YSgpLCBfX3Bvcyk7CisJICBpZiAoX19ob3dfbXVjaCkKKwkgICAgX01fY29weShfX3ItPl9NX3JlZmRhdGEoKSArIF9fcG9zICsgX19sZW4yLAorCQkgICAgX01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjEsIF9faG93X211Y2gpOworCisJICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOworCSAgX01fZGF0YShfX3ItPl9NX3JlZmRhdGEoKSk7CisJfQorICAgICAgZWxzZSBpZiAoX19ob3dfbXVjaCAmJiBfX2xlbjEgIT0gX19sZW4yKQorCXsKKwkgIC8vIFdvcmsgaW4tcGxhY2UuCisJICBfTV9tb3ZlKF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4yLAorCQkgIF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4xLCBfX2hvd19tdWNoKTsKKwl9CisgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlbmd0aF9hbmRfc2hhcmFibGUoX19uZXdfc2l6ZSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICByZXNlcnZlKHNpemVfdHlwZSBfX3JlcykKKyAgICB7CisgICAgICBpZiAoX19yZXMgIT0gdGhpcy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCisgICAgICAgIHsKKwkgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBzaHJpbmsgYmVsb3cgdGhlIGN1cnJlbnQgc2l6ZQorCSAgaWYgKF9fcmVzIDwgdGhpcy0+c2l6ZSgpKQorCSAgICBfX3JlcyA9IHRoaXMtPnNpemUoKTsKKwkgIGNvbnN0IGFsbG9jYXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKKwkgIF9DaGFyVCogX190bXAgPSBfTV9yZXAoKS0+X01fY2xvbmUoX19hLCBfX3JlcyAtIHRoaXMtPnNpemUoKSk7CisJICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOworCSAgX01fZGF0YShfX3RtcCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIHN3YXAoYmFzaWNfc3RyaW5nJiBfX3MpCisgICAgeworICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKKwlfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CisgICAgICBpZiAoX19zLl9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKKwlfX3MuX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOworICAgICAgaWYgKHRoaXMtPmdldF9hbGxvY2F0b3IoKSA9PSBfX3MuZ2V0X2FsbG9jYXRvcigpKQorCXsKKwkgIF9DaGFyVCogX190bXAgPSBfTV9kYXRhKCk7CisJICBfTV9kYXRhKF9fcy5fTV9kYXRhKCkpOworCSAgX19zLl9NX2RhdGEoX190bXApOworCX0KKyAgICAgIC8vIFRoZSBjb2RlIGJlbG93IGNhbiB1c3VhbGx5IGJlIG9wdGltaXplZCBhd2F5LgorICAgICAgZWxzZQorCXsKKwkgIGNvbnN0IGJhc2ljX3N0cmluZyBfX3RtcDEoX01faWJlZ2luKCksIF9NX2llbmQoKSwKKwkJCQkgICAgX19zLmdldF9hbGxvY2F0b3IoKSk7CisJICBjb25zdCBiYXNpY19zdHJpbmcgX190bXAyKF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSwKKwkJCQkgICAgdGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsKKwkgICp0aGlzID0gX190bXAyOworCSAgX19zID0gX190bXAxOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcCoKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKKyAgICBfU19jcmVhdGUoc2l6ZV90eXBlIF9fY2FwYWNpdHksIHNpemVfdHlwZSBfX29sZF9jYXBhY2l0eSwKKwkgICAgICBjb25zdCBfQWxsb2MmIF9fYWxsb2MpCisgICAgeworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gODMuICBTdHJpbmc6Om5wb3MgdnMuIHN0cmluZzo6bWF4X3NpemUoKQorICAgICAgaWYgKF9fY2FwYWNpdHkgPiBfU19tYXhfc2l6ZSkKKwlfX3Rocm93X2xlbmd0aF9lcnJvcihfX04oImJhc2ljX3N0cmluZzo6X1NfY3JlYXRlIikpOworCisgICAgICAvLyBUaGUgc3RhbmRhcmQgcGxhY2VzIG5vIHJlc3RyaWN0aW9uIG9uIGFsbG9jYXRpbmcgbW9yZSBtZW1vcnkKKyAgICAgIC8vIHRoYW4gaXMgc3RyaWN0bHkgbmVlZGVkIHdpdGhpbiB0aGlzIGxheWVyIGF0IHRoZSBtb21lbnQgb3IgYXMKKyAgICAgIC8vIHJlcXVlc3RlZCBieSBhbiBleHBsaWNpdCBhcHBsaWNhdGlvbiBjYWxsIHRvIHJlc2VydmUoKS4KKworICAgICAgLy8gTWFueSBtYWxsb2MgaW1wbGVtZW50YXRpb25zIHBlcmZvcm0gcXVpdGUgcG9vcmx5IHdoZW4gYW4KKyAgICAgIC8vIGFwcGxpY2F0aW9uIGF0dGVtcHRzIHRvIGFsbG9jYXRlIG1lbW9yeSBpbiBhIHN0ZXB3aXNlIGZhc2hpb24KKyAgICAgIC8vIGdyb3dpbmcgZWFjaCBhbGxvY2F0aW9uIHNpemUgYnkgb25seSAxIGNoYXIuICBBZGRpdGlvbmFsbHksCisgICAgICAvLyBpdCBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8gYWxsb2NhdGUgbGVzcyBsaW5lYXIgbWVtb3J5IHRoYW4gdGhlCisgICAgICAvLyBuYXR1cmFsIGJsb2NraW5nIHNpemUgb2YgdGhlIG1hbGxvYyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgIC8vIFVuZm9ydHVuYXRlbHksIHdlIHdvdWxkIG5lZWQgYSBzb21ld2hhdCBsb3ctbGV2ZWwgY2FsY3VsYXRpb24KKyAgICAgIC8vIHdpdGggdHVuZWQgcGFyYW1ldGVycyB0byBnZXQgdGhpcyBwZXJmZWN0IGZvciBhbnkgcGFydGljdWxhcgorICAgICAgLy8gbWFsbG9jIGltcGxlbWVudGF0aW9uLiAgRm9ydHVuYXRlbHksIGdlbmVyYWxpemF0aW9ucyBhYm91dAorICAgICAgLy8gY29tbW9uIGZlYXR1cmVzIHNlZW4gYW1vbmcgaW1wbGVtZW50YXRpb25zIHNlZW1zIHRvIHN1ZmZpY2UuCisKKyAgICAgIC8vIF9fcGFnZXNpemUgbmVlZCBub3QgbWF0Y2ggdGhlIGFjdHVhbCBWTSBwYWdlIHNpemUgZm9yIGdvb2QKKyAgICAgIC8vIHJlc3VsdHMgaW4gcHJhY3RpY2UsIHRodXMgd2UgcGljayBhIGNvbW1vbiB2YWx1ZSBvbiB0aGUgbG93CisgICAgICAvLyBzaWRlLiAgX19tYWxsb2NfaGVhZGVyX3NpemUgaXMgYW4gZXN0aW1hdGUgb2YgdGhlIGFtb3VudCBvZgorICAgICAgLy8gb3ZlcmhlYWQgcGVyIG1lbW9yeSBhbGxvY2F0aW9uIChpbiBwcmFjdGljZSBzZWVuIE4gKiBzaXplb2YKKyAgICAgIC8vICh2b2lkKikgd2hlcmUgTiBpcyAwLCAyIG9yIDQpLiAgQWNjb3JkaW5nIHRvIGZvbGtsb3JlLAorICAgICAgLy8gcGlja2luZyB0aGlzIHZhbHVlIG9uIHRoZSBoaWdoIHNpZGUgaXMgYmV0dGVyIHRoYW4KKyAgICAgIC8vIGxvdy1iYWxsaW5nIGl0IChlc3BlY2lhbGx5IHdoZW4gdGhpcyBhbGdvcml0aG0gaXMgdXNlZCB3aXRoCisgICAgICAvLyBtYWxsb2MgaW1wbGVtZW50YXRpb25zIHRoYXQgYWxsb2NhdGUgbWVtb3J5IGJsb2NrcyByb3VuZGVkIHVwCisgICAgICAvLyB0byBhIHNpemUgd2hpY2ggaXMgYSBwb3dlciBvZiAyKS4KKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VzaXplID0gNDA5NjsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2Yodm9pZCopOworCisgICAgICAvLyBUaGUgYmVsb3cgaW1wbGVtZW50cyBhbiBleHBvbmVudGlhbCBncm93dGggcG9saWN5LCBuZWNlc3NhcnkgdG8KKyAgICAgIC8vIG1lZXQgYW1vcnRpemVkIGxpbmVhciB0aW1lIHJlcXVpcmVtZW50cyBvZiB0aGUgbGlicmFyeTogc2VlCisgICAgICAvLyBodHRwOi8vZ2NjLmdudS5vcmcvbWwvbGlic3RkYysrLzIwMDEtMDcvbXNnMDAwODUuaHRtbC4KKyAgICAgIC8vIEl0J3MgYWN0aXZlIGZvciBhbGxvY2F0aW9ucyByZXF1aXJpbmcgYW4gYW1vdW50IG9mIG1lbW9yeSBhYm92ZQorICAgICAgLy8gc3lzdGVtIHBhZ2VzaXplLiBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZQorICAgICAgLy8gc3RhbmRhcmQ6IGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9saWJzdGRjKysvMjAwMS0wNy9tc2cwMDEzMC5odG1sCisgICAgICBpZiAoX19jYXBhY2l0eSA+IF9fb2xkX2NhcGFjaXR5ICYmIF9fY2FwYWNpdHkgPCAyICogX19vbGRfY2FwYWNpdHkpCisJX19jYXBhY2l0eSA9IDIgKiBfX29sZF9jYXBhY2l0eTsKKworICAgICAgLy8gTkI6IE5lZWQgYW4gYXJyYXkgb2YgY2hhcl90eXBlW19fY2FwYWNpdHldLCBwbHVzIGEgdGVybWluYXRpbmcKKyAgICAgIC8vIG51bGwgY2hhcl90eXBlKCkgZWxlbWVudCwgcGx1cyBlbm91Z2ggZm9yIHRoZSBfUmVwIGRhdGEgc3RydWN0dXJlLgorICAgICAgLy8gV2hldy4gU2VlbWluZ2x5IHNvIG5lZWR5LCB5ZXQgc28gZWxlbWVudGFsLgorICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IChfX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKSArIHNpemVvZihfUmVwKTsKKworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fYWRqX3NpemUgPSBfX3NpemUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZTsKKyAgICAgIGlmIChfX2Fkal9zaXplID4gX19wYWdlc2l6ZSAmJiBfX2NhcGFjaXR5ID4gX19vbGRfY2FwYWNpdHkpCisJeworCSAgY29uc3Qgc2l6ZV90eXBlIF9fZXh0cmEgPSBfX3BhZ2VzaXplIC0gX19hZGpfc2l6ZSAlIF9fcGFnZXNpemU7CisJICBfX2NhcGFjaXR5ICs9IF9fZXh0cmEgLyBzaXplb2YoX0NoYXJUKTsKKwkgIC8vIE5ldmVyIGFsbG9jYXRlIGEgc3RyaW5nIGJpZ2dlciB0aGFuIF9TX21heF9zaXplLgorCSAgaWYgKF9fY2FwYWNpdHkgPiBfU19tYXhfc2l6ZSkKKwkgICAgX19jYXBhY2l0eSA9IF9TX21heF9zaXplOworCSAgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOworCX0KKworICAgICAgLy8gTkI6IE1pZ2h0IHRocm93LCBidXQgbm8gd29ycmllcyBhYm91dCBhIGxlYWssIG1hdGU6IF9SZXAoKQorICAgICAgLy8gZG9lcyBub3QgdGhyb3cuCisgICAgICB2b2lkKiBfX3BsYWNlID0gX1Jhd19ieXRlc19hbGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShfX3NpemUpOworICAgICAgX1JlcCAqX19wID0gbmV3IChfX3BsYWNlKSBfUmVwOworICAgICAgX19wLT5fTV9jYXBhY2l0eSA9IF9fY2FwYWNpdHk7CisgICAgICAvLyBBQkkgY29tcGF0aWJpbGl0eSAtIDMuNC54IHNldCBpbiBfU19jcmVhdGUgYm90aAorICAgICAgLy8gX01fcmVmY291bnQgYW5kIF9NX2xlbmd0aC4gIEFsbCBjYWxsZXJzIG9mIF9TX2NyZWF0ZQorICAgICAgLy8gaW4gYmFzaWNfc3RyaW5nLnRjYyB0aGVuIHNldCBqdXN0IF9NX2xlbmd0aC4KKyAgICAgIC8vIEluIDQuMC54IGFuZCBsYXRlciBib3RoIF9NX3JlZmNvdW50IGFuZCBfTV9sZW5ndGgKKyAgICAgIC8vIGFyZSBpbml0aWFsaXplZCBpbiB0aGUgY2FsbGVycywgdW5mb3J0dW5hdGVseSB3ZSBjYW4KKyAgICAgIC8vIGhhdmUgMy40LnggY29tcGlsZWQgY29kZSB3aXRoIF9TX2NyZWF0ZSBjYWxsZXJzIGlubGluZWQKKyAgICAgIC8vIGNhbGxpbmcgNC4wLngrIF9TX2NyZWF0ZS4KKyAgICAgIF9fcC0+X01fc2V0X3NoYXJhYmxlKCk7CisgICAgICByZXR1cm4gX19wOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBfQ2hhclQqCisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CisgICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiBfX2FsbG9jLCBzaXplX3R5cGUgX19yZXMpCisgICAgeworICAgICAgLy8gUmVxdWVzdGVkIGNhcGFjaXR5IG9mIHRoZSBjbG9uZS4KKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3JlcXVlc3RlZF9jYXAgPSB0aGlzLT5fTV9sZW5ndGggKyBfX3JlczsKKyAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX3JlcXVlc3RlZF9jYXAsIHRoaXMtPl9NX2NhcGFjaXR5LAorCQkJCSAgX19hbGxvYyk7CisgICAgICBpZiAodGhpcy0+X01fbGVuZ3RoKQorCV9NX2NvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX3JlZmRhdGEoKSwgdGhpcy0+X01fbGVuZ3RoKTsKKworICAgICAgX19yLT5fTV9zZXRfbGVuZ3RoX2FuZF9zaGFyYWJsZSh0aGlzLT5fTV9sZW5ndGgpOworICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgcmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCisgICAgeworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKKyAgICAgIF9NX2NoZWNrX2xlbmd0aChfX3NpemUsIF9fbiwgImJhc2ljX3N0cmluZzo6cmVzaXplIik7CisgICAgICBpZiAoX19zaXplIDwgX19uKQorCXRoaXMtPmFwcGVuZChfX24gLSBfX3NpemUsIF9fYyk7CisgICAgICBlbHNlIGlmIChfX24gPCBfX3NpemUpCisJdGhpcy0+ZXJhc2UoX19uKTsKKyAgICAgIC8vIGVsc2Ugbm90aGluZyAoaW4gcGFydGljdWxhciwgYXZvaWQgY2FsbGluZyBfTV9tdXRhdGUoKSB1bm5lY2Vzc2FyaWx5LikKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgorICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgICBfTV9yZXBsYWNlX2Rpc3BhdGNoKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9JbnB1dEl0ZXJhdG9yIF9fazEsCisJCQkgIF9JbnB1dEl0ZXJhdG9yIF9fazIsIF9fZmFsc2VfdHlwZSkKKyAgICAgIHsKKwljb25zdCBiYXNpY19zdHJpbmcgX19zKF9fazEsIF9fazIpOworCWNvbnN0IHNpemVfdHlwZSBfX24xID0gX19pMiAtIF9faTE7CisJX01fY2hlY2tfbGVuZ3RoKF9fbjEsIF9fcy5zaXplKCksICJiYXNpY19zdHJpbmc6Ol9NX3JlcGxhY2VfZGlzcGF0Y2giKTsKKwlyZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19uMSwgX19zLl9NX2RhdGEoKSwKKwkJCSAgICAgICBfX3Muc2l6ZSgpKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIF9NX3JlcGxhY2VfYXV4KHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBzaXplX3R5cGUgX19uMiwKKwkJICAgX0NoYXJUIF9fYykKKyAgICB7CisgICAgICBfTV9jaGVja19sZW5ndGgoX19uMSwgX19uMiwgImJhc2ljX3N0cmluZzo6X01fcmVwbGFjZV9hdXgiKTsKKyAgICAgIF9NX211dGF0ZShfX3BvczEsIF9fbjEsIF9fbjIpOworICAgICAgaWYgKF9fbjIpCisJX01fYXNzaWduKF9NX2RhdGEoKSArIF9fcG9zMSwgX19uMiwgX19jKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBfTV9yZXBsYWNlX3NhZmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAorCQkgICAgc2l6ZV90eXBlIF9fbjIpCisgICAgeworICAgICAgX01fbXV0YXRlKF9fcG9zMSwgX19uMSwgX19uMik7CisgICAgICBpZiAoX19uMikKKwlfTV9jb3B5KF9NX2RhdGEoKSArIF9fcG9zMSwgX19zLCBfX24yKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgorICAgIG9wZXJhdG9yKyhjb25zdCBfQ2hhclQqIF9fbGhzLAorCSAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmcoX19saHMpOworICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZQkgIF9fc2l6ZV90eXBlOworICAgICAgY29uc3QgX19zaXplX3R5cGUgX19sZW4gPSBfVHJhaXRzOjpsZW5ndGgoX19saHMpOworICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsKKyAgICAgIF9fc3RyLnJlc2VydmUoX19sZW4gKyBfX3Jocy5zaXplKCkpOworICAgICAgX19zdHIuYXBwZW5kKF9fbGhzLCBfX2xlbik7CisgICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOworICAgICAgcmV0dXJuIF9fc3RyOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CisgICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCisgICAgeworICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZQkgIF9fc2l6ZV90eXBlOworICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsKKyAgICAgIGNvbnN0IF9fc2l6ZV90eXBlIF9fbGVuID0gX19yaHMuc2l6ZSgpOworICAgICAgX19zdHIucmVzZXJ2ZShfX2xlbiArIDEpOworICAgICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90eXBlKDEpLCBfX2xocyk7CisgICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOworICAgICAgcmV0dXJuIF9fc3RyOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CisgICAgeworICAgICAgX01fY2hlY2soX19wb3MsICJiYXNpY19zdHJpbmc6OmNvcHkiKTsKKyAgICAgIF9fbiA9IF9NX2xpbWl0KF9fcG9zLCBfX24pOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZ19sZW4oX19zLCBfX24pOworICAgICAgaWYgKF9fbikKKwlfTV9jb3B5KF9fcywgX01fZGF0YSgpICsgX19wb3MsIF9fbik7CisgICAgICAvLyAyMS4zLjUuNyBwYXIgMzogZG8gbm90IGFwcGVuZCBudWxsLiAgKGdvb2QuKQorICAgICAgcmV0dXJuIF9fbjsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmdfbGVuKF9fcywgX19uKTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CisgICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKKworICAgICAgaWYgKF9fbiA9PSAwKQorCXJldHVybiBfX3BvcyA8PSBfX3NpemUgPyBfX3BvcyA6IG5wb3M7CisKKyAgICAgIGlmIChfX24gPD0gX19zaXplKQorCXsKKwkgIGZvciAoOyBfX3BvcyA8PSBfX3NpemUgLSBfX247ICsrX19wb3MpCisJICAgIGlmICh0cmFpdHNfdHlwZTo6ZXEoX19kYXRhW19fcG9zXSwgX19zWzBdKQorCQkmJiB0cmFpdHNfdHlwZTo6Y29tcGFyZShfX2RhdGEgKyBfX3BvcyArIDEsCisJCQkJCV9fcyArIDEsIF9fbiAtIDEpID09IDApCisJICAgICAgcmV0dXJuIF9fcG9zOworCX0KKyAgICAgIHJldHVybiBucG9zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKKyAgICB7CisgICAgICBzaXplX3R5cGUgX19yZXQgPSBucG9zOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKKyAgICAgIGlmIChfX3BvcyA8IF9fc2l6ZSkKKwl7CisJICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKKwkgIGNvbnN0IHNpemVfdHlwZSBfX24gPSBfX3NpemUgLSBfX3BvczsKKwkgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5cGU6OmZpbmQoX19kYXRhICsgX19wb3MsIF9fbiwgX19jKTsKKwkgIGlmIChfX3ApCisJICAgIF9fcmV0ID0gX19wIC0gX19kYXRhOworCX0KKyAgICAgIHJldHVybiBfX3JldDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nX2xlbihfX3MsIF9fbik7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOworICAgICAgaWYgKF9fbiA8PSBfX3NpemUpCisJeworCSAgX19wb3MgPSBzdGQ6Om1pbihzaXplX3R5cGUoX19zaXplIC0gX19uKSwgX19wb3MpOworCSAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CisJICBkbworCSAgICB7CisJICAgICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9fcG9zLCBfX3MsIF9fbikgPT0gMCkKKwkJcmV0dXJuIF9fcG9zOworCSAgICB9CisJICB3aGlsZSAoX19wb3MtLSA+IDApOworCX0KKyAgICAgIHJldHVybiBucG9zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CisgICAgeworICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKKyAgICAgIGlmIChfX3NpemUpCisJeworCSAgaWYgKC0tX19zaXplID4gX19wb3MpCisJICAgIF9fc2l6ZSA9IF9fcG9zOworCSAgZm9yICgrK19fc2l6ZTsgX19zaXplLS0gPiAwOyApCisJICAgIGlmICh0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19fc2l6ZV0sIF9fYykpCisJICAgICAgcmV0dXJuIF9fc2l6ZTsKKwl9CisgICAgICByZXR1cm4gbnBvczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmdfbGVuKF9fcywgX19uKTsKKyAgICAgIGZvciAoOyBfX24gJiYgX19wb3MgPCB0aGlzLT5zaXplKCk7ICsrX19wb3MpCisJeworCSAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fcG9zXSk7CisJICBpZiAoX19wKQorCSAgICByZXR1cm4gX19wb3M7CisJfQorICAgICAgcmV0dXJuIG5wb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmdfbGVuKF9fcywgX19uKTsKKyAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CisgICAgICBpZiAoX19zaXplICYmIF9fbikKKwl7CisJICBpZiAoLS1fX3NpemUgPiBfX3BvcykKKwkgICAgX19zaXplID0gX19wb3M7CisJICBkbworCSAgICB7CisJICAgICAgaWYgKHRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpCisJCXJldHVybiBfX3NpemU7CisJICAgIH0KKwkgIHdoaWxlIChfX3NpemUtLSAhPSAwKTsKKwl9CisgICAgICByZXR1cm4gbnBvczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nX2xlbihfX3MsIF9fbik7CisgICAgICBmb3IgKDsgX19wb3MgPCB0aGlzLT5zaXplKCk7ICsrX19wb3MpCisJaWYgKCF0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fcG9zXSkpCisJICByZXR1cm4gX19wb3M7CisgICAgICByZXR1cm4gbnBvczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAorICAgIHsKKyAgICAgIGZvciAoOyBfX3BvcyA8IHRoaXMtPnNpemUoKTsgKytfX3BvcykKKwlpZiAoIXRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX19wb3NdLCBfX2MpKQorCSAgcmV0dXJuIF9fcG9zOworICAgICAgcmV0dXJuIG5wb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nX2xlbihfX3MsIF9fbik7CisgICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOworICAgICAgaWYgKF9fc2l6ZSkKKwl7CisJICBpZiAoLS1fX3NpemUgPiBfX3BvcykKKwkgICAgX19zaXplID0gX19wb3M7CisJICBkbworCSAgICB7CisJICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQorCQlyZXR1cm4gX19zaXplOworCSAgICB9CisJICB3aGlsZSAoX19zaXplLS0pOworCX0KKyAgICAgIHJldHVybiBucG9zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKKyAgICB7CisgICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOworICAgICAgaWYgKF9fc2l6ZSkKKwl7CisJICBpZiAoLS1fX3NpemUgPiBfX3BvcykKKwkgICAgX19zaXplID0gX19wb3M7CisJICBkbworCSAgICB7CisJICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19fc2l6ZV0sIF9fYykpCisJCXJldHVybiBfX3NpemU7CisJICAgIH0KKwkgIHdoaWxlIChfX3NpemUtLSk7CisJfQorICAgICAgcmV0dXJuIG5wb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGludAorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAorICAgIHsKKyAgICAgIF9NX2NoZWNrKF9fcG9zLCAiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CisgICAgICBfX24gPSBfTV9saW1pdChfX3BvcywgX19uKTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gc3RkOjptaW4oX19uLCBfX29zaXplKTsKKyAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zdHIuZGF0YSgpLCBfX2xlbik7CisgICAgICBpZiAoIV9fcikKKwlfX3IgPSBfU19jb21wYXJlKF9fbiwgX19vc2l6ZSk7CisgICAgICByZXR1cm4gX19yOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbnQKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAorCSAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMikgY29uc3QKKyAgICB7CisgICAgICBfTV9jaGVjayhfX3BvczEsICJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKKyAgICAgIF9fc3RyLl9NX2NoZWNrKF9fcG9zMiwgImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOworICAgICAgX19uMSA9IF9NX2xpbWl0KF9fcG9zMSwgX19uMSk7CisgICAgICBfX24yID0gX19zdHIuX01fbGltaXQoX19wb3MyLCBfX24yKTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IHN0ZDo6bWluKF9fbjEsIF9fbjIpOworICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zMSwKKwkJCQkgICAgIF9fc3RyLmRhdGEoKSArIF9fcG9zMiwgX19sZW4pOworICAgICAgaWYgKCFfX3IpCisJX19yID0gX1NfY29tcGFyZShfX24xLCBfX24yKTsKKyAgICAgIHJldHVybiBfX3I7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGludAorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CisgICAgeworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfX3MpOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29zaXplID0gdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gc3RkOjptaW4oX19zaXplLCBfX29zaXplKTsKKyAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fcywgX19sZW4pOworICAgICAgaWYgKCFfX3IpCisJX19yID0gX1NfY29tcGFyZShfX3NpemUsIF9fb3NpemUpOworICAgICAgcmV0dXJuIF9fcjsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW50CisgICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CisgICAgeworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfX3MpOworICAgICAgX01fY2hlY2soX19wb3MsICJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKKyAgICAgIF9fbjEgPSBfTV9saW1pdChfX3BvcywgX19uMSk7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19vc2l6ZSA9IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IHN0ZDo6bWluKF9fbjEsIF9fb3NpemUpOworICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsKKyAgICAgIGlmICghX19yKQorCV9fciA9IF9TX2NvbXBhcmUoX19uMSwgX19vc2l6ZSk7CisgICAgICByZXR1cm4gX19yOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbnQKKyAgICBiYXNpY19zdHJpbmcgPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKKwkgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CisgICAgeworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZ19sZW4oX19zLCBfX24yKTsKKyAgICAgIF9NX2NoZWNrKF9fcG9zLCAiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CisgICAgICBfX24xID0gX01fbGltaXQoX19wb3MsIF9fbjEpOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gc3RkOjptaW4oX19uMSwgX19uMik7CisgICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fcywgX19sZW4pOworICAgICAgaWYgKCFfX3IpCisJX19yID0gX1NfY29tcGFyZShfX24xLCBfX24yKTsKKyAgICAgIHJldHVybiBfX3I7CisgICAgfQorCisgIC8vIDIxLjMuNy45IGJhc2ljX3N0cmluZzo6Z2V0bGluZSBhbmQgb3BlcmF0b3JzCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKKwkgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpCisgICAgeworICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4JCV9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CV9fc3RyaW5nX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICAgICAgIF9faW9zX2Jhc2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZQkJX19pbnRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlCQlfX3NpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPgkJCQlfX2N0eXBlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fY3R5cGVfdHlwZTo6Y3R5cGVfYmFzZSAgICAgICAgIF9fY3R5cGVfYmFzZTsKKworICAgICAgX19zaXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOworICAgICAgdHlwZW5hbWUgX19pb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IF9faW9zX2Jhc2U6Omdvb2RiaXQ7CisgICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CisgICAgICBpZiAoX19jZXJiKQorCXsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICAvLyBBdm9pZCByZWFsbG9jYXRpb24gZm9yIGNvbW1vbiBjYXNlLgorCSAgICAgIF9fc3RyLmVyYXNlKCk7CisJICAgICAgX0NoYXJUIF9fYnVmWzEyOF07CisJICAgICAgX19zaXplX3R5cGUgX19sZW4gPSAwOwkgICAgICAKKwkgICAgICBjb25zdCBzdHJlYW1zaXplIF9fdyA9IF9faW4ud2lkdGgoKTsKKwkgICAgICBjb25zdCBfX3NpemVfdHlwZSBfX24gPSBfX3cgPiAwID8gc3RhdGljX2Nhc3Q8X19zaXplX3R5cGU+KF9fdykKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX3N0ci5tYXhfc2l6ZSgpOworCSAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdCA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOworCSAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKKwkgICAgICBfX2ludF90eXBlIF9fYyA9IF9faW4ucmRidWYoKS0+c2dldGMoKTsKKworCSAgICAgIHdoaWxlIChfX2V4dHJhY3RlZCA8IF9fbgorCQkgICAgICYmICFfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQorCQkgICAgICYmICFfX2N0LmlzKF9fY3R5cGVfYmFzZTo6c3BhY2UsCisJCQkJIF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpKSkKKwkJeworCQkgIGlmIChfX2xlbiA9PSBzaXplb2YoX19idWYpIC8gc2l6ZW9mKF9DaGFyVCkpCisJCSAgICB7CisJCSAgICAgIF9fc3RyLmFwcGVuZChfX2J1Ziwgc2l6ZW9mKF9fYnVmKSAvIHNpemVvZihfQ2hhclQpKTsKKwkJICAgICAgX19sZW4gPSAwOworCQkgICAgfQorCQkgIF9fYnVmW19fbGVuKytdID0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYyk7CisJCSAgKytfX2V4dHJhY3RlZDsKKwkJICBfX2MgPSBfX2luLnJkYnVmKCktPnNuZXh0YygpOworCQl9CisJICAgICAgX19zdHIuYXBwZW5kKF9fYnVmLCBfX2xlbik7CisKKwkgICAgICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCisJCV9fZXJyIHw9IF9faW9zX2Jhc2U6OmVvZmJpdDsKKwkgICAgICBfX2luLndpZHRoKDApOworCSAgICB9CisJICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgIHsKKwkgICAgICBfX2luLl9NX3NldHN0YXRlKF9faW9zX2Jhc2U6OmJhZGJpdCk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7CisJICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCSAgICAgIC8vIDkxLiBEZXNjcmlwdGlvbiBvZiBvcGVyYXRvcj4+IGFuZCBnZXRsaW5lKCkgZm9yIHN0cmluZzw+CisJICAgICAgLy8gbWlnaHQgY2F1c2UgZW5kbGVzcyBsb29wCisJICAgICAgX19pbi5fTV9zZXRzdGF0ZShfX2lvc19iYXNlOjpiYWRiaXQpOworCSAgICB9CisJfQorICAgICAgLy8gMjExLiAgb3BlcmF0b3I+Pihpc3RyZWFtJiwgc3RyaW5nJikgZG9lc24ndCBzZXQgZmFpbGJpdAorICAgICAgaWYgKCFfX2V4dHJhY3RlZCkKKwlfX2VyciB8PSBfX2lvc19iYXNlOjpmYWlsYml0OworICAgICAgaWYgKF9fZXJyKQorCV9faW4uc2V0c3RhdGUoX19lcnIpOworICAgICAgcmV0dXJuIF9faW47CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKKwkgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsIF9DaGFyVCBfX2RlbGltKQorICAgIHsKKyAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CQlfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPglfX3N0cmluZ190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgICAgICBfX2lvc19iYXNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUJCV9faW50X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZQkJX19zaXplX3R5cGU7CisKKyAgICAgIF9fc2l6ZV90eXBlIF9fZXh0cmFjdGVkID0gMDsKKyAgICAgIGNvbnN0IF9fc2l6ZV90eXBlIF9fbiA9IF9fc3RyLm1heF9zaXplKCk7CisgICAgICB0eXBlbmFtZSBfX2lvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gX19pb3NfYmFzZTo6Z29vZGJpdDsKKyAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIHRydWUpOworICAgICAgaWYgKF9fY2VyYikKKwl7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgX19zdHIuZXJhc2UoKTsKKwkgICAgICBjb25zdCBfX2ludF90eXBlIF9faWRlbGltID0gX1RyYWl0czo6dG9faW50X3R5cGUoX19kZWxpbSk7CisJICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOworCSAgICAgIF9faW50X3R5cGUgX19jID0gX19pbi5yZGJ1ZigpLT5zZ2V0YygpOworCisJICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19uCisJCSAgICAgJiYgIV9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCisJCSAgICAgJiYgIV9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pKQorCQl7CisJCSAgX19zdHIgKz0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYyk7CisJCSAgKytfX2V4dHJhY3RlZDsKKwkJICBfX2MgPSBfX2luLnJkYnVmKCktPnNuZXh0YygpOworCQl9CisKKwkgICAgICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCisJCV9fZXJyIHw9IF9faW9zX2Jhc2U6OmVvZmJpdDsKKwkgICAgICBlbHNlIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKSkKKwkJeworCQkgICsrX19leHRyYWN0ZWQ7CQkgIAorCQkgIF9faW4ucmRidWYoKS0+c2J1bXBjKCk7CisJCX0KKwkgICAgICBlbHNlCisJCV9fZXJyIHw9IF9faW9zX2Jhc2U6OmZhaWxiaXQ7CisJICAgIH0KKwkgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwkgICAgeworCSAgICAgIF9faW4uX01fc2V0c3RhdGUoX19pb3NfYmFzZTo6YmFkYml0KTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsKKwkgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJICAgICAgLy8gOTEuIERlc2NyaXB0aW9uIG9mIG9wZXJhdG9yPj4gYW5kIGdldGxpbmUoKSBmb3Igc3RyaW5nPD4KKwkgICAgICAvLyBtaWdodCBjYXVzZSBlbmRsZXNzIGxvb3AKKwkgICAgICBfX2luLl9NX3NldHN0YXRlKF9faW9zX2Jhc2U6OmJhZGJpdCk7CisJICAgIH0KKwl9CisgICAgICBpZiAoIV9fZXh0cmFjdGVkKQorCV9fZXJyIHw9IF9faW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgICBpZiAoX19lcnIpCisJX19pbi5zZXRzdGF0ZShfX2Vycik7CisgICAgICByZXR1cm4gX19pbjsKKyAgICB9CisKKyAgLy8gSW5oaWJpdCBpbXBsaWNpdCBpbnN0YW50aWF0aW9ucyBmb3IgcmVxdWlyZWQgaW5zdGFudGlhdGlvbnMsCisgIC8vIHdoaWNoIGFyZSBkZWZpbmVkIHZpYSBleHBsaWNpdCBpbnN0YW50aWF0aW9ucyBlbHNld2hlcmUuCisgIC8vIE5COiBUaGlzIHN5bnRheCBpcyBhIEdOVSBleHRlbnNpb24uCisjaWYgX0dMSUJDWFhfRVhURVJOX1RFTVBMQVRFID4gMAorICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyaW5nPGNoYXI+OworICBleHRlcm4gdGVtcGxhdGUKKyAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgorICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYpOworICBleHRlcm4gdGVtcGxhdGUKKyAgICBiYXNpY19vc3RyZWFtPGNoYXI+JgorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyPiYsIGNvbnN0IHN0cmluZyYpOworICBleHRlcm4gdGVtcGxhdGUKKyAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgorICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYsIGNoYXIpOworICBleHRlcm4gdGVtcGxhdGUKKyAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgorICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYpOworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmluZzx3Y2hhcl90PjsKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYKKyAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mLCB3c3RyaW5nJik7CisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGJhc2ljX29zdHJlYW08d2NoYXJfdD4mCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPHdjaGFyX3Q+JiwgY29uc3Qgd3N0cmluZyYpOworICBleHRlcm4gdGVtcGxhdGUKKyAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgorICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYsIHdzdHJpbmcmLCB3Y2hhcl90KTsKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYKKyAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mLCB3c3RyaW5nJik7CisjZW5kaWYKKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2Jvb3N0X2NvbmNlcHRfY2hlY2suaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9ib29zdF9jb25jZXB0X2NoZWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU0ZmNmMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9ib29zdF9jb25jZXB0X2NoZWNrLmgKQEAgLTAsMCArMSw3ODcgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyAoQykgQ29weXJpZ2h0IEplcmVteSBTaWVrIDIwMDAuIFBlcm1pc3Npb24gdG8gY29weSwgdXNlLCBtb2RpZnksCisvLyBzZWxsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgaXMgZ3JhbnRlZCBwcm92aWRlZCB0aGlzCisvLyBjb3B5cmlnaHQgbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcy4gVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZAorLy8gImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eSwgYW5kIHdpdGggbm8gY2xhaW0gYXMKKy8vIHRvIGl0cyBzdWl0YWJpbGl0eSBmb3IgYW55IHB1cnBvc2UuCisvLworCisvKiogQGZpbGUgYm9vc3RfY29uY2VwdF9jaGVjay5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKy8vIEdDQyBOb3RlOiAgYmFzZWQgb24gdmVyc2lvbiAxLjEyLjAgb2YgdGhlIEJvb3N0IGxpYnJhcnkuCisKKyNpZm5kZWYgX0JPT1NUX0NPTkNFUFRfQ0hFQ0tfSAorI2RlZmluZSBfQk9PU1RfQ09OQ0VQVF9DSEVDS19IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Y3N0ZGRlZj4gICAgICAgICAgICAgICAgLy8gZm9yIHB0cmRpZmZfdCwgdXNlZCBuZXh0CisjaW5jbHVkZSA8Yml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oPiAgICAvLyBmb3IgdHJhaXRzIGFuZCB0YWdzCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisKKyNkZWZpbmUgX0lzVW51c2VkIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKKworLy8gV2hlbiB0aGUgQy1DIGNvZGUgaXMgaW4gdXNlLCB3ZSB3b3VsZCBsaWtlIHRoaXMgZnVuY3Rpb24gdG8gZG8gYXMgbGl0dGxlCisvLyBhcyBwb3NzaWJsZSBhdCBydW50aW1lLCB1c2UgYXMgZmV3IHJlc291cmNlcyBhcyBwb3NzaWJsZSwgYW5kIGhvcGVmdWxseQorLy8gYmUgZWxpZGVkIG91dCBvZiBleGlzdGVuY2UuLi4gaG1tbS4KK3RlbXBsYXRlIDxjbGFzcyBfQ29uY2VwdD4KK2lubGluZSB2b2lkIF9fZnVuY3Rpb25fcmVxdWlyZXMoKQoreworICB2b2lkIChfQ29uY2VwdDo6Kl9feCkoKSBfSXNVbnVzZWQgPSAmX0NvbmNlcHQ6Ol9fY29uc3RyYWludHM7Cit9CisKKy8vIE5vIGRlZmluaXRpb246IGlmIHRoaXMgaXMgcmVmZXJlbmNlZCwgdGhlcmUncyBhIHByb2JsZW0gd2l0aAorLy8gdGhlIGluc3RhbnRpYXRpbmcgdHlwZSBub3QgYmVpbmcgb25lIG9mIHRoZSByZXF1aXJlZCBpbnRlZ2VyIHR5cGVzLgorLy8gVW5mb3J0dW5hdGVseSwgdGhpcyByZXN1bHRzIGluIGEgbGluay10aW1lIGVycm9yLCBub3QgYSBjb21waWxlLXRpbWUgZXJyb3IuCit2b2lkIF9fZXJyb3JfdHlwZV9tdXN0X2JlX2FuX2ludGVnZXJfdHlwZSgpOwordm9pZCBfX2Vycm9yX3R5cGVfbXVzdF9iZV9hbl91bnNpZ25lZF9pbnRlZ2VyX3R5cGUoKTsKK3ZvaWQgX19lcnJvcl90eXBlX211c3RfYmVfYV9zaWduZWRfaW50ZWdlcl90eXBlKCk7CisKKy8vID8/PyBTaG91bGQgdGhlICJjb25jZXB0X2NoZWNraW5nKiIgc3RydWN0cyBiZWdpbiB3aXRoIG1vcmUgdGhhbiBfID8KKyNkZWZpbmUgX0dMSUJDWFhfQ0xBU1NfUkVRVUlSRVMoX3R5cGVfdmFyLCBfbnMsIF9jb25jZXB0KSBcCisgIHR5cGVkZWYgdm9pZCAoX25zOjpfY29uY2VwdCA8X3R5cGVfdmFyPjo6KiBfZnVuYyMjX3R5cGVfdmFyIyNfY29uY2VwdCkoKTsgXAorICB0ZW1wbGF0ZSA8X2Z1bmMjI190eXBlX3ZhciMjX2NvbmNlcHQgX1RwMT4gXAorICBzdHJ1Y3QgX2NvbmNlcHRfY2hlY2tpbmcjI190eXBlX3ZhciMjX2NvbmNlcHQgeyB9OyBcCisgIHR5cGVkZWYgX2NvbmNlcHRfY2hlY2tpbmcjI190eXBlX3ZhciMjX2NvbmNlcHQ8IFwKKyAgICAmX25zOjpfY29uY2VwdCA8X3R5cGVfdmFyPjo6X19jb25zdHJhaW50cz4gXAorICAgIF9jb25jZXB0X2NoZWNraW5nX3R5cGVkZWYjI190eXBlX3ZhciMjX2NvbmNlcHQKKworI2RlZmluZSBfR0xJQkNYWF9DTEFTU19SRVFVSVJFUzIoX3R5cGVfdmFyMSwgX3R5cGVfdmFyMiwgX25zLCBfY29uY2VwdCkgXAorICB0eXBlZGVmIHZvaWQgKF9uczo6X2NvbmNlcHQgPF90eXBlX3ZhcjEsX3R5cGVfdmFyMj46OiogX2Z1bmMjI190eXBlX3ZhcjEjI190eXBlX3ZhcjIjI19jb25jZXB0KSgpOyBcCisgIHRlbXBsYXRlIDxfZnVuYyMjX3R5cGVfdmFyMSMjX3R5cGVfdmFyMiMjX2NvbmNlcHQgX1RwMT4gXAorICBzdHJ1Y3QgX2NvbmNlcHRfY2hlY2tpbmcjI190eXBlX3ZhcjEjI190eXBlX3ZhcjIjI19jb25jZXB0IHsgfTsgXAorICB0eXBlZGVmIF9jb25jZXB0X2NoZWNraW5nIyNfdHlwZV92YXIxIyNfdHlwZV92YXIyIyNfY29uY2VwdDwgXAorICAgICZfbnM6Ol9jb25jZXB0IDxfdHlwZV92YXIxLF90eXBlX3ZhcjI+OjpfX2NvbnN0cmFpbnRzPiBcCisgICAgX2NvbmNlcHRfY2hlY2tpbmdfdHlwZWRlZiMjX3R5cGVfdmFyMSMjX3R5cGVfdmFyMiMjX2NvbmNlcHQKKworI2RlZmluZSBfR0xJQkNYWF9DTEFTU19SRVFVSVJFUzMoX3R5cGVfdmFyMSwgX3R5cGVfdmFyMiwgX3R5cGVfdmFyMywgX25zLCBfY29uY2VwdCkgXAorICB0eXBlZGVmIHZvaWQgKF9uczo6X2NvbmNlcHQgPF90eXBlX3ZhcjEsX3R5cGVfdmFyMixfdHlwZV92YXIzPjo6KiBfZnVuYyMjX3R5cGVfdmFyMSMjX3R5cGVfdmFyMiMjX3R5cGVfdmFyMyMjX2NvbmNlcHQpKCk7IFwKKyAgdGVtcGxhdGUgPF9mdW5jIyNfdHlwZV92YXIxIyNfdHlwZV92YXIyIyNfdHlwZV92YXIzIyNfY29uY2VwdCBfVHAxPiBcCisgIHN0cnVjdCBfY29uY2VwdF9jaGVja2luZyMjX3R5cGVfdmFyMSMjX3R5cGVfdmFyMiMjX3R5cGVfdmFyMyMjX2NvbmNlcHQgeyB9OyBcCisgIHR5cGVkZWYgX2NvbmNlcHRfY2hlY2tpbmcjI190eXBlX3ZhcjEjI190eXBlX3ZhcjIjI190eXBlX3ZhcjMjI19jb25jZXB0PCBcCisgICAgJl9uczo6X2NvbmNlcHQgPF90eXBlX3ZhcjEsX3R5cGVfdmFyMixfdHlwZV92YXIzPjo6X19jb25zdHJhaW50cz4gIFwKKyAgX2NvbmNlcHRfY2hlY2tpbmdfdHlwZWRlZiMjX3R5cGVfdmFyMSMjX3R5cGVfdmFyMiMjX3R5cGVfdmFyMyMjX2NvbmNlcHQKKworI2RlZmluZSBfR0xJQkNYWF9DTEFTU19SRVFVSVJFUzQoX3R5cGVfdmFyMSwgX3R5cGVfdmFyMiwgX3R5cGVfdmFyMywgX3R5cGVfdmFyNCwgX25zLCBfY29uY2VwdCkgXAorICB0eXBlZGVmIHZvaWQgKF9uczo6X2NvbmNlcHQgPF90eXBlX3ZhcjEsX3R5cGVfdmFyMixfdHlwZV92YXIzLF90eXBlX3ZhcjQ+OjoqIF9mdW5jIyNfdHlwZV92YXIxIyNfdHlwZV92YXIyIyNfdHlwZV92YXIzIyNfdHlwZV92YXI0IyNfY29uY2VwdCkoKTsgXAorICB0ZW1wbGF0ZSA8X2Z1bmMjI190eXBlX3ZhcjEjI190eXBlX3ZhcjIjI190eXBlX3ZhcjMjI190eXBlX3ZhcjQjI19jb25jZXB0IF9UcDE+IFwKKyAgc3RydWN0IF9jb25jZXB0X2NoZWNraW5nIyNfdHlwZV92YXIxIyNfdHlwZV92YXIyIyNfdHlwZV92YXIzIyNfdHlwZV92YXI0IyNfY29uY2VwdCB7IH07IFwKKyAgdHlwZWRlZiBfY29uY2VwdF9jaGVja2luZyMjX3R5cGVfdmFyMSMjX3R5cGVfdmFyMiMjX3R5cGVfdmFyMyMjX3R5cGVfdmFyNCMjX2NvbmNlcHQ8IFwKKyAgJl9uczo6X2NvbmNlcHQgPF90eXBlX3ZhcjEsX3R5cGVfdmFyMixfdHlwZV92YXIzLF90eXBlX3ZhcjQ+OjpfX2NvbnN0cmFpbnRzPiBcCisgICAgX2NvbmNlcHRfY2hlY2tpbmdfdHlwZWRlZiMjX3R5cGVfdmFyMSMjX3R5cGVfdmFyMiMjX3R5cGVfdmFyMyMjX3R5cGVfdmFyNCMjX2NvbmNlcHQKKworCit0ZW1wbGF0ZSA8Y2xhc3MgX1RwMSwgY2xhc3MgX1RwMj4KK3N0cnVjdCBfQXV4X3JlcXVpcmVfc2FtZSB7IH07CisKK3RlbXBsYXRlIDxjbGFzcyBfVHA+CitzdHJ1Y3QgX0F1eF9yZXF1aXJlX3NhbWU8X1RwLF9UcD4geyB0eXBlZGVmIF9UcCBfVHlwZTsgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMSwgY2xhc3MgX1RwMj4KKyAgc3RydWN0IF9TYW1lVHlwZUNvbmNlcHQKKyAgeworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0F1eF9yZXF1aXJlX3NhbWU8X1RwMSwgX1RwMj46Ol9UeXBlIF9SZXF1aXJlZDsKKyAgICB9CisgIH07CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgc3RydWN0IF9JbnRlZ2VyQ29uY2VwdCB7CisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX19lcnJvcl90eXBlX211c3RfYmVfYW5faW50ZWdlcl90eXBlKCk7CisgICAgfQorICB9OworICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgX0ludGVnZXJDb25jZXB0PHNob3J0PiB7IHZvaWQgX19jb25zdHJhaW50cygpIHt9IH07CisgIHRlbXBsYXRlIDw+IHN0cnVjdCBfSW50ZWdlckNvbmNlcHQ8dW5zaWduZWQgc2hvcnQ+IHsgdm9pZCBfX2NvbnN0cmFpbnRzKCl7fSB9OworICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgX0ludGVnZXJDb25jZXB0PGludD4geyB2b2lkIF9fY29uc3RyYWludHMoKSB7fSB9OworICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgX0ludGVnZXJDb25jZXB0PHVuc2lnbmVkIGludD4geyB2b2lkIF9fY29uc3RyYWludHMoKSB7fSB9OworICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgX0ludGVnZXJDb25jZXB0PGxvbmc+IHsgdm9pZCBfX2NvbnN0cmFpbnRzKCkge30gfTsKKyAgdGVtcGxhdGUgPD4gc3RydWN0IF9JbnRlZ2VyQ29uY2VwdDx1bnNpZ25lZCBsb25nPiB7IHZvaWQgX19jb25zdHJhaW50cygpIHt9IH07CisgIHRlbXBsYXRlIDw+IHN0cnVjdCBfSW50ZWdlckNvbmNlcHQ8bG9uZyBsb25nPiB7IHZvaWQgX19jb25zdHJhaW50cygpIHt9IH07CisgIHRlbXBsYXRlIDw+IHN0cnVjdCBfSW50ZWdlckNvbmNlcHQ8dW5zaWduZWQgbG9uZyBsb25nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB2b2lkIF9fY29uc3RyYWludHMoKSB7fSB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfVHA+CisgIHN0cnVjdCBfU2lnbmVkSW50ZWdlckNvbmNlcHQgeworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9fZXJyb3JfdHlwZV9tdXN0X2JlX2Ffc2lnbmVkX2ludGVnZXJfdHlwZSgpOworICAgIH0KKyAgfTsKKyAgdGVtcGxhdGUgPD4gc3RydWN0IF9TaWduZWRJbnRlZ2VyQ29uY2VwdDxzaG9ydD4geyB2b2lkIF9fY29uc3RyYWludHMoKSB7fSB9OworICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgX1NpZ25lZEludGVnZXJDb25jZXB0PGludD4geyB2b2lkIF9fY29uc3RyYWludHMoKSB7fSB9OworICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgX1NpZ25lZEludGVnZXJDb25jZXB0PGxvbmc+IHsgdm9pZCBfX2NvbnN0cmFpbnRzKCkge30gfTsKKyAgdGVtcGxhdGUgPD4gc3RydWN0IF9TaWduZWRJbnRlZ2VyQ29uY2VwdDxsb25nIGxvbmc+IHsgdm9pZCBfX2NvbnN0cmFpbnRzKCl7fX07CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgc3RydWN0IF9VbnNpZ25lZEludGVnZXJDb25jZXB0IHsKKyAgICB2b2lkIF9fY29uc3RyYWludHMoKSB7CisgICAgICBfX2Vycm9yX3R5cGVfbXVzdF9iZV9hbl91bnNpZ25lZF9pbnRlZ2VyX3R5cGUoKTsKKyAgICB9CisgIH07CisgIHRlbXBsYXRlIDw+IHN0cnVjdCBfVW5zaWduZWRJbnRlZ2VyQ29uY2VwdDx1bnNpZ25lZCBzaG9ydD4KKyAgICB7IHZvaWQgX19jb25zdHJhaW50cygpIHt9IH07CisgIHRlbXBsYXRlIDw+IHN0cnVjdCBfVW5zaWduZWRJbnRlZ2VyQ29uY2VwdDx1bnNpZ25lZCBpbnQ+CisgICAgeyB2b2lkIF9fY29uc3RyYWludHMoKSB7fSB9OworICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgX1Vuc2lnbmVkSW50ZWdlckNvbmNlcHQ8dW5zaWduZWQgbG9uZz4KKyAgICB7IHZvaWQgX19jb25zdHJhaW50cygpIHt9IH07CisgIHRlbXBsYXRlIDw+IHN0cnVjdCBfVW5zaWduZWRJbnRlZ2VyQ29uY2VwdDx1bnNpZ25lZCBsb25nIGxvbmc+CisgICAgeyB2b2lkIF9fY29uc3RyYWludHMoKSB7fSB9OworCisgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIC8vIEJhc2ljIENvbmNlcHRzCisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgc3RydWN0IF9EZWZhdWx0Q29uc3RydWN0aWJsZUNvbmNlcHQKKyAgeworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9UcCBfX2EgX0lzVW51c2VkOyAgICAgICAgICAgICAgICAvLyByZXF1aXJlIGRlZmF1bHQgY29uc3RydWN0b3IKKyAgICB9CisgIH07CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgc3RydWN0IF9Bc3NpZ25hYmxlQ29uY2VwdAorICB7CisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX19hID0gX19hOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgYXNzaWdubWVudCBvcGVyYXRvcgorICAgICAgX19jb25zdF9jb25zdHJhaW50cyhfX2EpOworICAgIH0KKyAgICB2b2lkIF9fY29uc3RfY29uc3RyYWludHMoY29uc3QgX1RwJiBfX2IpIHsKKyAgICAgIF9fYSA9IF9fYjsgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgcmVxdWlyZWQgZm9yIGFyZ3VtZW50IHRvIGFzc2lnbm1lbnQKKyAgICB9CisgICAgX1RwIF9fYTsKKyAgICAvLyBwb3NzaWJseSBzaG91bGQgYmUgIlRwKiBhOyIgYW5kIHRoZW4gZGVyZWZlcmVuY2UgImEiIGluIGNvbnN0cmFpbnQKKyAgICAvLyBmdW5jdGlvbnM/ICBwcmVzZW50IHdheSB3b3VsZCByZXF1aXJlIGEgZGVmYXVsdCBjdG9yLCBpIHRoaW5rLi4uCisgIH07CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgc3RydWN0IF9Db3B5Q29uc3RydWN0aWJsZUNvbmNlcHQKKyAgeworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9UcCBfX2EoX19iKTsgICAgICAgICAgICAgICAgICAgICAvLyByZXF1aXJlIGNvcHkgY29uc3RydWN0b3IKKyAgICAgIF9UcCogX19wdHIgX0lzVW51c2VkID0gJl9fYTsgICAgICAvLyByZXF1aXJlIGFkZHJlc3Mgb2Ygb3BlcmF0b3IKKyAgICAgIF9fY29uc3RfY29uc3RyYWludHMoX19hKTsKKyAgICB9CisgICAgdm9pZCBfX2NvbnN0X2NvbnN0cmFpbnRzKGNvbnN0IF9UcCYgX19hKSB7CisgICAgICBfVHAgX19jIF9Jc1VudXNlZChfX2EpOyAgICAgICAgICAgLy8gcmVxdWlyZSBjb25zdCBjb3B5IGNvbnN0cnVjdG9yCisgICAgICBjb25zdCBfVHAqIF9fcHRyIF9Jc1VudXNlZCA9ICZfX2E7IC8vIHJlcXVpcmUgY29uc3QgYWRkcmVzcyBvZiBvcGVyYXRvcgorICAgIH0KKyAgICBfVHAgX19iOworICB9OworCisgIC8vIFRoZSBTR0kgU1RMIHZlcnNpb24gb2YgQXNzaWduYWJsZSByZXF1aXJlcyBjb3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0KKyAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgc3RydWN0IF9TR0lBc3NpZ25hYmxlQ29uY2VwdAorICB7CisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX1RwIF9fYiBfSXNVbnVzZWQoX19hKTsKKyAgICAgIF9fYSA9IF9fYTsgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXF1aXJlIGFzc2lnbm1lbnQgb3BlcmF0b3IKKyAgICAgIF9fY29uc3RfY29uc3RyYWludHMoX19hKTsKKyAgICB9CisgICAgdm9pZCBfX2NvbnN0X2NvbnN0cmFpbnRzKGNvbnN0IF9UcCYgX19iKSB7CisgICAgICBfVHAgX19jIF9Jc1VudXNlZChfX2IpOworICAgICAgX19hID0gX19iOyAgICAgICAgICAgICAgLy8gY29uc3QgcmVxdWlyZWQgZm9yIGFyZ3VtZW50IHRvIGFzc2lnbm1lbnQKKyAgICB9CisgICAgX1RwIF9fYTsKKyAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0Zyb20sIGNsYXNzIF9Ubz4KKyAgc3RydWN0IF9Db252ZXJ0aWJsZUNvbmNlcHQKKyAgeworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9UbyBfX3kgX0lzVW51c2VkID0gX194OworICAgIH0KKyAgICBfRnJvbSBfX3g7CisgIH07CisKKyAgLy8gVGhlIEMrKyBzdGFuZGFyZCByZXF1aXJlbWVudHMgZm9yIG1hbnkgY29uY2VwdHMgdGFsayBhYm91dCByZXR1cm4KKyAgLy8gdHlwZXMgdGhhdCBtdXN0IGJlICJjb252ZXJ0aWJsZSB0byBib29sIi4gIFRoZSBwcm9ibGVtIHdpdGggdGhpcworICAvLyByZXF1aXJlbWVudCBpcyB0aGF0IGl0IGxlYXZlcyB0aGUgZG9vciBvcGVuIGZvciBldmlsIHByb3hpZXMgdGhhdAorICAvLyBkZWZpbmUgdGhpbmdzIGxpa2Ugb3BlcmF0b3J8fCB3aXRoIHN0cmFuZ2UgcmV0dXJuIHR5cGVzLiAgVHdvCisgIC8vIHBvc3NpYmxlIHNvbHV0aW9ucyBhcmU6CisgIC8vIDEpIHJlcXVpcmUgdGhlIHJldHVybiB0eXBlIHRvIGJlIGV4YWN0bHkgYm9vbAorICAvLyAyKSBzdGF5IHdpdGggY29udmVydGlibGUgdG8gYm9vbCwgYW5kIGFsc28KKyAgLy8gICAgc3BlY2lmeSBzdHVmZiBhYm91dCBhbGwgdGhlIGxvZ2ljYWwgb3BlcmF0b3JzLgorICAvLyBGb3Igbm93IHdlIGp1c3QgdGVzdCBmb3IgY29udmVydGlibGUgdG8gYm9vbC4KKyAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgdm9pZCBfX2F1eF9yZXF1aXJlX2Jvb2xlYW5fZXhwcihjb25zdCBfVHAmIF9fdCkgeworICAgIGJvb2wgX194IF9Jc1VudXNlZCA9IF9fdDsKKyAgfQorCisvLyBGSVhNRQorICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorICBzdHJ1Y3QgX0VxdWFsaXR5Q29tcGFyYWJsZUNvbmNlcHQKKyAgeworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9fYXV4X3JlcXVpcmVfYm9vbGVhbl9leHByKF9fYSA9PSBfX2IpOworICAgIH0KKyAgICBfVHAgX19hLCBfX2I7CisgIH07CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgc3RydWN0IF9MZXNzVGhhbkNvbXBhcmFibGVDb25jZXB0CisgIHsKKyAgICB2b2lkIF9fY29uc3RyYWludHMoKSB7CisgICAgICBfX2F1eF9yZXF1aXJlX2Jvb2xlYW5fZXhwcihfX2EgPCBfX2IpOworICAgIH0KKyAgICBfVHAgX19hLCBfX2I7CisgIH07CisKKyAgLy8gVGhpcyBpcyBlcXVpdmFsZW50IHRvIFNHSSBTVEwncyBMZXNzVGhhbkNvbXBhcmFibGUuCisgIHRlbXBsYXRlIDxjbGFzcyBfVHA+CisgIHN0cnVjdCBfQ29tcGFyYWJsZUNvbmNlcHQKKyAgeworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9fYXV4X3JlcXVpcmVfYm9vbGVhbl9leHByKF9fYSA8IF9fYik7CisgICAgICBfX2F1eF9yZXF1aXJlX2Jvb2xlYW5fZXhwcihfX2EgPiBfX2IpOworICAgICAgX19hdXhfcmVxdWlyZV9ib29sZWFuX2V4cHIoX19hIDw9IF9fYik7CisgICAgICBfX2F1eF9yZXF1aXJlX2Jvb2xlYW5fZXhwcihfX2EgPj0gX19iKTsKKyAgICB9CisgICAgX1RwIF9fYSwgX19iOworICB9OworCisjZGVmaW5lIF9HTElCQ1hYX0RFRklORV9CSU5BUllfUFJFRElDQVRFX09QX0NPTlNUUkFJTlQoX09QLF9OQU1FKSBcCisgIHRlbXBsYXRlIDxjbGFzcyBfRmlyc3QsIGNsYXNzIF9TZWNvbmQ+IFwKKyAgc3RydWN0IF9OQU1FIHsgXAorICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsgKHZvaWQpX19jb25zdHJhaW50c18oKTsgfSBcCisgICAgYm9vbCBfX2NvbnN0cmFpbnRzXygpIHsgIFwKKyAgICAgIHJldHVybiAgX19hIF9PUCBfX2I7IFwKKyAgICB9IFwKKyAgICBfRmlyc3QgX19hOyBcCisgICAgX1NlY29uZCBfX2I7IFwKKyAgfQorCisjZGVmaW5lIF9HTElCQ1hYX0RFRklORV9CSU5BUllfT1BFUkFUT1JfQ09OU1RSQUlOVChfT1AsX05BTUUpIFwKKyAgdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9GaXJzdCwgY2xhc3MgX1NlY29uZD4gXAorICBzdHJ1Y3QgX05BTUUgeyBcCisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeyAodm9pZClfX2NvbnN0cmFpbnRzXygpOyB9IFwKKyAgICBfUmV0IF9fY29uc3RyYWludHNfKCkgeyAgXAorICAgICAgcmV0dXJuIF9fYSBfT1AgX19iOyBcCisgICAgfSBcCisgICAgX0ZpcnN0IF9fYTsgXAorICAgIF9TZWNvbmQgX19iOyBcCisgIH0KKworICBfR0xJQkNYWF9ERUZJTkVfQklOQVJZX1BSRURJQ0FURV9PUF9DT05TVFJBSU5UKD09LCBfRXF1YWxPcENvbmNlcHQpOworICBfR0xJQkNYWF9ERUZJTkVfQklOQVJZX1BSRURJQ0FURV9PUF9DT05TVFJBSU5UKCE9LCBfTm90RXF1YWxPcENvbmNlcHQpOworICBfR0xJQkNYWF9ERUZJTkVfQklOQVJZX1BSRURJQ0FURV9PUF9DT05TVFJBSU5UKDwsIF9MZXNzVGhhbk9wQ29uY2VwdCk7CisgIF9HTElCQ1hYX0RFRklORV9CSU5BUllfUFJFRElDQVRFX09QX0NPTlNUUkFJTlQoPD0sIF9MZXNzRXF1YWxPcENvbmNlcHQpOworICBfR0xJQkNYWF9ERUZJTkVfQklOQVJZX1BSRURJQ0FURV9PUF9DT05TVFJBSU5UKD4sIF9HcmVhdGVyVGhhbk9wQ29uY2VwdCk7CisgIF9HTElCQ1hYX0RFRklORV9CSU5BUllfUFJFRElDQVRFX09QX0NPTlNUUkFJTlQoPj0sIF9HcmVhdGVyRXF1YWxPcENvbmNlcHQpOworCisgIF9HTElCQ1hYX0RFRklORV9CSU5BUllfT1BFUkFUT1JfQ09OU1RSQUlOVCgrLCBfUGx1c09wQ29uY2VwdCk7CisgIF9HTElCQ1hYX0RFRklORV9CSU5BUllfT1BFUkFUT1JfQ09OU1RSQUlOVCgqLCBfVGltZXNPcENvbmNlcHQpOworICBfR0xJQkNYWF9ERUZJTkVfQklOQVJZX09QRVJBVE9SX0NPTlNUUkFJTlQoLywgX0RpdmlkZU9wQ29uY2VwdCk7CisgIF9HTElCQ1hYX0RFRklORV9CSU5BUllfT1BFUkFUT1JfQ09OU1RSQUlOVCgtLCBfU3VidHJhY3RPcENvbmNlcHQpOworICBfR0xJQkNYWF9ERUZJTkVfQklOQVJZX09QRVJBVE9SX0NPTlNUUkFJTlQoJSwgX01vZE9wQ29uY2VwdCk7CisKKyN1bmRlZiBfR0xJQkNYWF9ERUZJTkVfQklOQVJZX1BSRURJQ0FURV9PUF9DT05TVFJBSU5UCisjdW5kZWYgX0dMSUJDWFhfREVGSU5FX0JJTkFSWV9PUEVSQVRPUl9DT05TVFJBSU5UCisKKyAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgLy8gRnVuY3Rpb24gT2JqZWN0IENvbmNlcHRzCisKKyAgdGVtcGxhdGUgPGNsYXNzIF9GdW5jLCBjbGFzcyBfUmV0dXJuPgorICBzdHJ1Y3QgX0dlbmVyYXRvckNvbmNlcHQKKyAgeworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIGNvbnN0IF9SZXR1cm4mIF9fciBfSXNVbnVzZWQgPSBfX2YoKTsvLyByZXF1aXJlIG9wZXJhdG9yKCkgbWVtYmVyIGZ1bmN0aW9uCisgICAgfQorICAgIF9GdW5jIF9fZjsKKyAgfTsKKworCisgIHRlbXBsYXRlIDxjbGFzcyBfRnVuYz4KKyAgc3RydWN0IF9HZW5lcmF0b3JDb25jZXB0PF9GdW5jLHZvaWQ+CisgIHsKKyAgICB2b2lkIF9fY29uc3RyYWludHMoKSB7CisgICAgICBfX2YoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZSBvcGVyYXRvcigpIG1lbWJlciBmdW5jdGlvbgorICAgIH0KKyAgICBfRnVuYyBfX2Y7CisgIH07CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9GdW5jLCBjbGFzcyBfUmV0dXJuLCBjbGFzcyBfQXJnPgorICBzdHJ1Y3QgX1VuYXJ5RnVuY3Rpb25Db25jZXB0CisgIHsKKyAgICB2b2lkIF9fY29uc3RyYWludHMoKSB7CisgICAgICBfX3IgPSBfX2YoX19hcmcpOyAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgb3BlcmF0b3IoKQorICAgIH0KKyAgICBfRnVuYyBfX2Y7CisgICAgX0FyZyBfX2FyZzsKKyAgICBfUmV0dXJuIF9fcjsKKyAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0Z1bmMsIGNsYXNzIF9Bcmc+CisgIHN0cnVjdCBfVW5hcnlGdW5jdGlvbkNvbmNlcHQ8X0Z1bmMsIHZvaWQsIF9Bcmc+IHsKKyAgICB2b2lkIF9fY29uc3RyYWludHMoKSB7CisgICAgICBfX2YoX19hcmcpOyAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZSBvcGVyYXRvcigpCisgICAgfQorICAgIF9GdW5jIF9fZjsKKyAgICBfQXJnIF9fYXJnOworICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfRnVuYywgY2xhc3MgX1JldHVybiwgY2xhc3MgX0ZpcnN0LCBjbGFzcyBfU2Vjb25kPgorICBzdHJ1Y3QgX0JpbmFyeUZ1bmN0aW9uQ29uY2VwdAorICB7CisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX19yID0gX19mKF9fZmlyc3QsIF9fc2Vjb25kKTsgICAgIC8vIHJlcXVpcmUgb3BlcmF0b3IoKQorICAgIH0KKyAgICBfRnVuYyBfX2Y7CisgICAgX0ZpcnN0IF9fZmlyc3Q7CisgICAgX1NlY29uZCBfX3NlY29uZDsKKyAgICBfUmV0dXJuIF9fcjsKKyAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0Z1bmMsIGNsYXNzIF9GaXJzdCwgY2xhc3MgX1NlY29uZD4KKyAgc3RydWN0IF9CaW5hcnlGdW5jdGlvbkNvbmNlcHQ8X0Z1bmMsIHZvaWQsIF9GaXJzdCwgX1NlY29uZD4KKyAgeworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9fZihfX2ZpcnN0LCBfX3NlY29uZCk7ICAgICAgICAgICAvLyByZXF1aXJlIG9wZXJhdG9yKCkKKyAgICB9CisgICAgX0Z1bmMgX19mOworICAgIF9GaXJzdCBfX2ZpcnN0OworICAgIF9TZWNvbmQgX19zZWNvbmQ7CisgIH07CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9GdW5jLCBjbGFzcyBfQXJnPgorICBzdHJ1Y3QgX1VuYXJ5UHJlZGljYXRlQ29uY2VwdAorICB7CisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX19hdXhfcmVxdWlyZV9ib29sZWFuX2V4cHIoX19mKF9fYXJnKSk7IC8vIHJlcXVpcmUgb3AoKSByZXR1cm5pbmcgYm9vbAorICAgIH0KKyAgICBfRnVuYyBfX2Y7CisgICAgX0FyZyBfX2FyZzsKKyAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0Z1bmMsIGNsYXNzIF9GaXJzdCwgY2xhc3MgX1NlY29uZD4KKyAgc3RydWN0IF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0CisgIHsKKyAgICB2b2lkIF9fY29uc3RyYWludHMoKSB7CisgICAgICBfX2F1eF9yZXF1aXJlX2Jvb2xlYW5fZXhwcihfX2YoX19hLCBfX2IpKTsgLy8gcmVxdWlyZSBvcCgpIHJldHVybmluZyBib29sCisgICAgfQorICAgIF9GdW5jIF9fZjsKKyAgICBfRmlyc3QgX19hOworICAgIF9TZWNvbmQgX19iOworICB9OworCisgIC8vIHVzZSB0aGlzIHdoZW4gZnVuY3RvciBpcyB1c2VkIGluc2lkZSBhIGNvbnRhaW5lciBjbGFzcyBsaWtlIHN0ZDo6c2V0CisgIHRlbXBsYXRlIDxjbGFzcyBfRnVuYywgY2xhc3MgX0ZpcnN0LCBjbGFzcyBfU2Vjb25kPgorICBzdHJ1Y3QgX0NvbnN0X0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQgeworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9fY29uc3RfY29uc3RyYWludHMoX19mKTsKKyAgICB9CisgICAgdm9pZCBfX2NvbnN0X2NvbnN0cmFpbnRzKGNvbnN0IF9GdW5jJiBfX2Z1bikgeworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczxfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfRnVuYywgX0ZpcnN0LCBfU2Vjb25kPiA+KCk7CisgICAgICAvLyBvcGVyYXRvcigpIG11c3QgYmUgYSBjb25zdCBtZW1iZXIgZnVuY3Rpb24KKyAgICAgIF9fYXV4X3JlcXVpcmVfYm9vbGVhbl9leHByKF9fZnVuKF9fYSwgX19iKSk7CisgICAgfQorICAgIF9GdW5jIF9fZjsKKyAgICBfRmlyc3QgX19hOworICAgIF9TZWNvbmQgX19iOworICB9OworCisgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIC8vIEl0ZXJhdG9yIENvbmNlcHRzCisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgc3RydWN0IF9Ucml2aWFsSXRlcmF0b3JDb25jZXB0CisgIHsKKyAgICB2b2lkIF9fY29uc3RyYWludHMoKSB7CisvLyAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPCBfRGVmYXVsdENvbnN0cnVjdGlibGVDb25jZXB0PF9UcD4gPigpOworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX0Fzc2lnbmFibGVDb25jZXB0PF9UcD4gPigpOworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX0VxdWFsaXR5Q29tcGFyYWJsZUNvbmNlcHQ8X1RwPiA+KCk7CisvLyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1RwPjo6dmFsdWVfdHlwZSBfVjsKKyAgICAgICh2b2lkKSpfX2k7ICAgICAgICAgICAgICAgICAgICAgICAvLyByZXF1aXJlIGRlcmVmZXJlbmNlIG9wZXJhdG9yCisgICAgfQorICAgIF9UcCBfX2k7CisgIH07CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgc3RydWN0IF9NdXRhYmxlX1RyaXZpYWxJdGVyYXRvckNvbmNlcHQKKyAgeworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8IF9Ucml2aWFsSXRlcmF0b3JDb25jZXB0PF9UcD4gPigpOworICAgICAgKl9faSA9ICpfX2o7ICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgZGVyZWZlcmVuY2UgYW5kIGFzc2lnbm1lbnQKKyAgICB9CisgICAgX1RwIF9faSwgX19qOworICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfVHA+CisgIHN0cnVjdCBfSW5wdXRJdGVyYXRvckNvbmNlcHQKKyAgeworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8IF9Ucml2aWFsSXRlcmF0b3JDb25jZXB0PF9UcD4gPigpOworICAgICAgLy8gcmVxdWlyZSBpdGVyYXRvcl90cmFpdHMgdHlwZWRlZidzCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9UcD46OmRpZmZlcmVuY2VfdHlwZSBfRGlmZjsKKy8vICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX1NpZ25lZEludGVnZXJDb25jZXB0PF9EaWZmPiA+KCk7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9UcD46OnJlZmVyZW5jZSBfUmVmOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfVHA+Ojpwb2ludGVyIF9QdDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1RwPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0NhdDsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8IF9Db252ZXJ0aWJsZUNvbmNlcHQ8CisgICAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9UcD46Oml0ZXJhdG9yX2NhdGVnb3J5LAorICAgICAgICBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZz4gPigpOworICAgICAgKytfX2k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgcHJlaW5jcmVtZW50IG9wZXJhdG9yCisgICAgICBfX2krKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZSBwb3N0aW5jcmVtZW50IG9wZXJhdG9yCisgICAgfQorICAgIF9UcCBfX2k7CisgIH07CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1ZhbHVlVD4KKyAgc3RydWN0IF9PdXRwdXRJdGVyYXRvckNvbmNlcHQKKyAgeworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8IF9Bc3NpZ25hYmxlQ29uY2VwdDxfVHA+ID4oKTsKKyAgICAgICsrX19pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXF1aXJlIHByZWluY3JlbWVudCBvcGVyYXRvcgorICAgICAgX19pKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgcG9zdGluY3JlbWVudCBvcGVyYXRvcgorICAgICAgKl9faSsrID0gX190OyAgICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgcG9zdGluY3JlbWVudCBhbmQgYXNzaWdubWVudAorICAgIH0KKyAgICBfVHAgX19pOworICAgIF9WYWx1ZVQgX190OworICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfVHA+CisgIHN0cnVjdCBfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdAorICB7CisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX0lucHV0SXRlcmF0b3JDb25jZXB0PF9UcD4gPigpOworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX0RlZmF1bHRDb25zdHJ1Y3RpYmxlQ29uY2VwdDxfVHA+ID4oKTsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8IF9Db252ZXJ0aWJsZUNvbmNlcHQ8CisgICAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9UcD46Oml0ZXJhdG9yX2NhdGVnb3J5LAorICAgICAgICBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnPiA+KCk7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9UcD46OnJlZmVyZW5jZSBfUmVmOworICAgICAgX1JlZiBfX3IgX0lzVW51c2VkID0gKl9faTsKKyAgICB9CisgICAgX1RwIF9faTsKKyAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorICBzdHJ1Y3QgX011dGFibGVfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdAorICB7CisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X1RwPiA+KCk7CisgICAgICAqX19pKysgPSAqX19pOyAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZSBwb3N0aW5jcmVtZW50IGFuZCBhc3NpZ25tZW50CisgICAgfQorICAgIF9UcCBfX2k7CisgIH07CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgc3RydWN0IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3JDb25jZXB0CisgIHsKKyAgICB2b2lkIF9fY29uc3RyYWludHMoKSB7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPCBfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfVHA+ID4oKTsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8IF9Db252ZXJ0aWJsZUNvbmNlcHQ8CisgICAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9UcD46Oml0ZXJhdG9yX2NhdGVnb3J5LAorICAgICAgICBzdGQ6OmJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnPiA+KCk7CisgICAgICAtLV9faTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZSBwcmVkZWNyZW1lbnQgb3BlcmF0b3IKKyAgICAgIF9faS0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXF1aXJlIHBvc3RkZWNyZW1lbnQgb3BlcmF0b3IKKyAgICB9CisgICAgX1RwIF9faTsKKyAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorICBzdHJ1Y3QgX011dGFibGVfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdAorICB7CisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX0JpZGlyZWN0aW9uYWxJdGVyYXRvckNvbmNlcHQ8X1RwPiA+KCk7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPCBfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9UcD4gPigpOworICAgICAgKl9faS0tID0gKl9faTsgICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgcG9zdGRlY3JlbWVudCBhbmQgYXNzaWdubWVudAorICAgIH0KKyAgICBfVHAgX19pOworICB9OworCisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgc3RydWN0IF9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQKKyAgeworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3JDb25jZXB0PF9UcD4gPigpOworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX0NvbXBhcmFibGVDb25jZXB0PF9UcD4gPigpOworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX0NvbnZlcnRpYmxlQ29uY2VwdDwKKyAgICAgICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1RwPjo6aXRlcmF0b3JfY2F0ZWdvcnksCisgICAgICAgIHN0ZDo6cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWc+ID4oKTsKKyAgICAgIC8vID8/PyBXZSBkb24ndCB1c2UgX1JlZiwgYXJlIHdlIGp1c3QgY2hlY2tpbmcgZm9yICJyZWZlcmVuY2VhYmlsaXR5Ij8KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1RwPjo6cmVmZXJlbmNlIF9SZWY7CisKKyAgICAgIF9faSArPSBfX247ICAgICAgICAgICAgICAgICAgICAgICAvLyByZXF1aXJlIGFzc2lnbm1lbnQgYWRkaXRpb24gb3BlcmF0b3IKKyAgICAgIF9faSA9IF9faSArIF9fbjsgX19pID0gX19uICsgX19pOyAvLyByZXF1aXJlIGFkZGl0aW9uIHdpdGggZGlmZmVyZW5jZSB0eXBlCisgICAgICBfX2kgLT0gX19uOyAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZSBhc3NpZ25tZW50IHN1YnRyYWN0aW9uIG9wCisgICAgICBfX2kgPSBfX2kgLSBfX247ICAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZSBzdWJ0cmFjdGlvbiB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBkaWZmZXJlbmNlIHR5cGUKKyAgICAgIF9fbiA9IF9faSAtIF9fajsgICAgICAgICAgICAgICAgICAvLyByZXF1aXJlIGRpZmZlcmVuY2Ugb3BlcmF0b3IKKyAgICAgICh2b2lkKV9faVtfX25dOyAgICAgICAgICAgICAgICAgICAvLyByZXF1aXJlIGVsZW1lbnQgYWNjZXNzIG9wZXJhdG9yCisgICAgfQorICAgIF9UcCBfX2EsIF9fYjsKKyAgICBfVHAgX19pLCBfX2o7CisgICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1RwPjo6ZGlmZmVyZW5jZV90eXBlIF9fbjsKKyAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorICBzdHJ1Y3QgX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0CisgIHsKKyAgICB2b2lkIF9fY29uc3RyYWludHMoKSB7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPCBfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PF9UcD4gPigpOworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX011dGFibGVfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdDxfVHA+ID4oKTsKKyAgICAgIF9faVtfX25dID0gKl9faTsgICAgICAgICAgICAgICAgICAvLyByZXF1aXJlIGVsZW1lbnQgYWNjZXNzIGFuZCBhc3NpZ25tZW50CisgICAgfQorICAgIF9UcCBfX2k7CisgICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1RwPjo6ZGlmZmVyZW5jZV90eXBlIF9fbjsKKyAgfTsKKworICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAvLyBDb250YWluZXIgQ29uY2VwdHMKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KKyAgc3RydWN0IF9Db250YWluZXJDb25jZXB0CisgIHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUgX1ZhbHVlX3R5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfQ29udGFpbmVyOjpkaWZmZXJlbmNlX3R5cGUgX0RpZmZlcmVuY2VfdHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9Db250YWluZXI6OnNpemVfdHlwZSBfU2l6ZV90eXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9Db25zdF9yZWZlcmVuY2U7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9wb2ludGVyIF9Db25zdF9wb2ludGVyOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfaXRlcmF0b3IgX0NvbnN0X2l0ZXJhdG9yOworCisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX0lucHV0SXRlcmF0b3JDb25jZXB0PF9Db25zdF9pdGVyYXRvcj4gPigpOworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX0Fzc2lnbmFibGVDb25jZXB0PF9Db250YWluZXI+ID4oKTsKKyAgICAgIGNvbnN0IF9Db250YWluZXIgX19jOworICAgICAgX19pID0gX19jLmJlZ2luKCk7CisgICAgICBfX2kgPSBfX2MuZW5kKCk7CisgICAgICBfX24gPSBfX2Muc2l6ZSgpOworICAgICAgX19uID0gX19jLm1heF9zaXplKCk7CisgICAgICBfX2IgPSBfX2MuZW1wdHkoKTsKKyAgICB9CisgICAgYm9vbCBfX2I7CisgICAgX0NvbnN0X2l0ZXJhdG9yIF9faTsKKyAgICBfU2l6ZV90eXBlIF9fbjsKKyAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KKyAgc3RydWN0IF9NdXRhYmxlX0NvbnRhaW5lckNvbmNlcHQKKyAgeworICAgIHR5cGVkZWYgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSBfVmFsdWVfdHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9Db250YWluZXI6OnJlZmVyZW5jZSBfUmVmZXJlbmNlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX0l0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX0NvbnRhaW5lcjo6cG9pbnRlciBfUG9pbnRlcjsKKworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8IF9Db250YWluZXJDb25jZXB0PF9Db250YWluZXI+ID4oKTsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8IF9Bc3NpZ25hYmxlQ29uY2VwdDxfVmFsdWVfdHlwZT4gPigpOworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JdGVyYXRvcj4gPigpOworCisgICAgICBfX2kgPSBfX2MuYmVnaW4oKTsKKyAgICAgIF9faSA9IF9fYy5lbmQoKTsKKyAgICAgIF9fYy5zd2FwKF9fYzIpOworICAgIH0KKyAgICBfSXRlcmF0b3IgX19pOworICAgIF9Db250YWluZXIgX19jLCBfX2MyOworICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZENvbnRhaW5lcj4KKyAgc3RydWN0IF9Gb3J3YXJkQ29udGFpbmVyQ29uY2VwdAorICB7CisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX0NvbnRhaW5lckNvbmNlcHQ8X0ZvcndhcmRDb250YWluZXI+ID4oKTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0ZvcndhcmRDb250YWluZXI6OmNvbnN0X2l0ZXJhdG9yIF9Db25zdF9pdGVyYXRvcjsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8IF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Db25zdF9pdGVyYXRvcj4gPigpOworICAgIH0KKyAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRDb250YWluZXI+CisgIHN0cnVjdCBfTXV0YWJsZV9Gb3J3YXJkQ29udGFpbmVyQ29uY2VwdAorICB7CisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX0ZvcndhcmRDb250YWluZXJDb25jZXB0PF9Gb3J3YXJkQ29udGFpbmVyPiA+KCk7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPCBfTXV0YWJsZV9Db250YWluZXJDb25jZXB0PF9Gb3J3YXJkQ29udGFpbmVyPiA+KCk7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Gb3J3YXJkQ29udGFpbmVyOjppdGVyYXRvciBfSXRlcmF0b3I7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPCBfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9JdGVyYXRvcj4gPigpOworICAgIH0KKyAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1JldmVyc2libGVDb250YWluZXI+CisgIHN0cnVjdCBfUmV2ZXJzaWJsZUNvbnRhaW5lckNvbmNlcHQKKyAgeworICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JldmVyc2libGVDb250YWluZXI6OmNvbnN0X2l0ZXJhdG9yIF9Db25zdF9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXZlcnNpYmxlQ29udGFpbmVyOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICBfQ29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKKworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8IF9Gb3J3YXJkQ29udGFpbmVyQ29uY2VwdDxfUmV2ZXJzaWJsZUNvbnRhaW5lcj4gPigpOworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX0JpZGlyZWN0aW9uYWxJdGVyYXRvckNvbmNlcHQ8X0NvbnN0X2l0ZXJhdG9yPiA+KCk7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPAorICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdDxfQ29uc3RfcmV2ZXJzZV9pdGVyYXRvcj4gPigpOworCisgICAgICBjb25zdCBfUmV2ZXJzaWJsZUNvbnRhaW5lciBfX2M7CisgICAgICBfQ29uc3RfcmV2ZXJzZV9pdGVyYXRvciBfX2kgPSBfX2MucmJlZ2luKCk7CisgICAgICBfX2kgPSBfX2MucmVuZCgpOworICAgIH0KKyAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1JldmVyc2libGVDb250YWluZXI+CisgIHN0cnVjdCBfTXV0YWJsZV9SZXZlcnNpYmxlQ29udGFpbmVyQ29uY2VwdAorICB7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmV2ZXJzaWJsZUNvbnRhaW5lcjo6aXRlcmF0b3IgX0l0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JldmVyc2libGVDb250YWluZXI6OnJldmVyc2VfaXRlcmF0b3IgX1JldmVyc2VfaXRlcmF0b3I7CisKKyAgICB2b2lkIF9fY29uc3RyYWludHMoKSB7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPF9SZXZlcnNpYmxlQ29udGFpbmVyQ29uY2VwdDxfUmV2ZXJzaWJsZUNvbnRhaW5lcj4gPigpOworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwKKyAgICAgICAgX011dGFibGVfRm9yd2FyZENvbnRhaW5lckNvbmNlcHQ8X1JldmVyc2libGVDb250YWluZXI+ID4oKTsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8X011dGFibGVfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdDxfSXRlcmF0b3I+ID4oKTsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8CisgICAgICAgIF9NdXRhYmxlX0JpZGlyZWN0aW9uYWxJdGVyYXRvckNvbmNlcHQ8X1JldmVyc2VfaXRlcmF0b3I+ID4oKTsKKworICAgICAgX1JldmVyc2VfaXRlcmF0b3IgX19pID0gX19jLnJiZWdpbigpOworICAgICAgX19pID0gX19jLnJlbmQoKTsKKyAgICB9CisgICAgX1JldmVyc2libGVDb250YWluZXIgX19jOworICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzQ29udGFpbmVyPgorICBzdHJ1Y3QgX1JhbmRvbUFjY2Vzc0NvbnRhaW5lckNvbmNlcHQKKyAgeworICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0NvbnRhaW5lcjo6c2l6ZV90eXBlIF9TaXplX3R5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX0NvbnN0X3JlZmVyZW5jZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NDb250YWluZXI6OmNvbnN0X2l0ZXJhdG9yIF9Db25zdF9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NDb250YWluZXI6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIF9Db25zdF9yZXZlcnNlX2l0ZXJhdG9yOworCisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwKKyAgICAgICAgX1JldmVyc2libGVDb250YWluZXJDb25jZXB0PF9SYW5kb21BY2Nlc3NDb250YWluZXI+ID4oKTsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8IF9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8X0NvbnN0X2l0ZXJhdG9yPiA+KCk7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPAorICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PF9Db25zdF9yZXZlcnNlX2l0ZXJhdG9yPiA+KCk7CisKKyAgICAgIGNvbnN0IF9SYW5kb21BY2Nlc3NDb250YWluZXIgX19jOworICAgICAgX0NvbnN0X3JlZmVyZW5jZSBfX3IgX0lzVW51c2VkID0gX19jW19fbl07CisgICAgfQorICAgIF9TaXplX3R5cGUgX19uOworICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzQ29udGFpbmVyPgorICBzdHJ1Y3QgX011dGFibGVfUmFuZG9tQWNjZXNzQ29udGFpbmVyQ29uY2VwdAorICB7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzQ29udGFpbmVyOjpzaXplX3R5cGUgX1NpemVfdHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NDb250YWluZXI6OnJlZmVyZW5jZSBfUmVmZXJlbmNlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0NvbnRhaW5lcjo6aXRlcmF0b3IgX0l0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0NvbnRhaW5lcjo6cmV2ZXJzZV9pdGVyYXRvciBfUmV2ZXJzZV9pdGVyYXRvcjsKKworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8CisgICAgICAgIF9SYW5kb21BY2Nlc3NDb250YWluZXJDb25jZXB0PF9SYW5kb21BY2Nlc3NDb250YWluZXI+ID4oKTsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8CisgICAgICAgIF9NdXRhYmxlX1JldmVyc2libGVDb250YWluZXJDb25jZXB0PF9SYW5kb21BY2Nlc3NDb250YWluZXI+ID4oKTsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8IF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yQ29uY2VwdDxfSXRlcmF0b3I+ID4oKTsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8CisgICAgICAgIF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yQ29uY2VwdDxfUmV2ZXJzZV9pdGVyYXRvcj4gPigpOworCisgICAgICBfUmVmZXJlbmNlIF9fciBfSXNVbnVzZWQgPSBfX2NbX19pXTsKKyAgICB9CisgICAgX1NpemVfdHlwZSBfX2k7CisgICAgX1JhbmRvbUFjY2Vzc0NvbnRhaW5lciBfX2M7CisgIH07CisKKyAgLy8gQSBTZXF1ZW5jZSBpcyBpbmhlcmVudGx5IG11dGFibGUKKyAgdGVtcGxhdGUgPGNsYXNzIF9TZXF1ZW5jZT4KKyAgc3RydWN0IF9TZXF1ZW5jZUNvbmNlcHQKKyAgeworICAgIHR5cGVkZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjpyZWZlcmVuY2UgX1JlZmVyZW5jZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6Y29uc3RfcmVmZXJlbmNlIF9Db25zdF9yZWZlcmVuY2U7CisKKyAgICB2b2lkIF9fY29uc3RyYWludHMoKSB7CisgICAgICAvLyBNYXR0IEF1c3Rlcm4ncyBib29rIHB1dHMgRGVmYXVsdENvbnN0cnVjdGlibGUgaGVyZSwgdGhlIEMrKworICAgICAgLy8gc3RhbmRhcmQgcGxhY2VzIGl0IGluIENvbnRhaW5lcgorICAgICAgLy8gICAgZnVuY3Rpb25fcmVxdWlyZXM8IERlZmF1bHRDb25zdHJ1Y3RpYmxlPFNlcXVlbmNlPiA+KCk7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPCBfTXV0YWJsZV9Gb3J3YXJkQ29udGFpbmVyQ29uY2VwdDxfU2VxdWVuY2U+ID4oKTsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8IF9EZWZhdWx0Q29uc3RydWN0aWJsZUNvbmNlcHQ8X1NlcXVlbmNlPiA+KCk7CisKKyAgICAgIF9TZXF1ZW5jZQorCV9fYyBfSXNVbnVzZWQoX19uLCBfX3QpLAorICAgICAgICBfX2MyIF9Jc1VudXNlZChfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBfX2MuaW5zZXJ0KF9fcCwgX190KTsKKyAgICAgIF9fYy5pbnNlcnQoX19wLCBfX24sIF9fdCk7CisgICAgICBfX2MuaW5zZXJ0KF9fcCwgX19maXJzdCwgX19sYXN0KTsKKworICAgICAgX19jLmVyYXNlKF9fcCk7CisgICAgICBfX2MuZXJhc2UoX19wLCBfX3EpOworCisgICAgICBfUmVmZXJlbmNlIF9fciBfSXNVbnVzZWQgPSBfX2MuZnJvbnQoKTsKKworICAgICAgX19jb25zdF9jb25zdHJhaW50cyhfX2MpOworICAgIH0KKyAgICB2b2lkIF9fY29uc3RfY29uc3RyYWludHMoY29uc3QgX1NlcXVlbmNlJiBfX2MpIHsKKyAgICAgIF9Db25zdF9yZWZlcmVuY2UgX19yIF9Jc1VudXNlZCA9IF9fYy5mcm9udCgpOworICAgIH0KKyAgICB0eXBlbmFtZSBfU2VxdWVuY2U6OnZhbHVlX3R5cGUgX190OworICAgIHR5cGVuYW1lIF9TZXF1ZW5jZTo6c2l6ZV90eXBlIF9fbjsKKyAgICB0eXBlbmFtZSBfU2VxdWVuY2U6OnZhbHVlX3R5cGUgKl9fZmlyc3QsICpfX2xhc3Q7CisgICAgdHlwZW5hbWUgX1NlcXVlbmNlOjppdGVyYXRvciBfX3AsIF9fcTsKKyAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0Zyb250SW5zZXJ0aW9uU2VxdWVuY2U+CisgIHN0cnVjdCBfRnJvbnRJbnNlcnRpb25TZXF1ZW5jZUNvbmNlcHQKKyAgeworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8IF9TZXF1ZW5jZUNvbmNlcHQ8X0Zyb250SW5zZXJ0aW9uU2VxdWVuY2U+ID4oKTsKKworICAgICAgX19jLnB1c2hfZnJvbnQoX190KTsKKyAgICAgIF9fYy5wb3BfZnJvbnQoKTsKKyAgICB9CisgICAgX0Zyb250SW5zZXJ0aW9uU2VxdWVuY2UgX19jOworICAgIHR5cGVuYW1lIF9Gcm9udEluc2VydGlvblNlcXVlbmNlOjp2YWx1ZV90eXBlIF9fdDsKKyAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0JhY2tJbnNlcnRpb25TZXF1ZW5jZT4KKyAgc3RydWN0IF9CYWNrSW5zZXJ0aW9uU2VxdWVuY2VDb25jZXB0CisgIHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYWNrSW5zZXJ0aW9uU2VxdWVuY2U6OnJlZmVyZW5jZSBfUmVmZXJlbmNlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX0JhY2tJbnNlcnRpb25TZXF1ZW5jZTo6Y29uc3RfcmVmZXJlbmNlIF9Db25zdF9yZWZlcmVuY2U7CisKKyAgICB2b2lkIF9fY29uc3RyYWludHMoKSB7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPCBfU2VxdWVuY2VDb25jZXB0PF9CYWNrSW5zZXJ0aW9uU2VxdWVuY2U+ID4oKTsKKworICAgICAgX19jLnB1c2hfYmFjayhfX3QpOworICAgICAgX19jLnBvcF9iYWNrKCk7CisgICAgICBfUmVmZXJlbmNlIF9fciBfSXNVbnVzZWQgPSBfX2MuYmFjaygpOworICAgIH0KKyAgICB2b2lkIF9fY29uc3RfY29uc3RyYWludHMoY29uc3QgX0JhY2tJbnNlcnRpb25TZXF1ZW5jZSYgX19jKSB7CisgICAgICBfQ29uc3RfcmVmZXJlbmNlIF9fciBfSXNVbnVzZWQgPSBfX2MuYmFjaygpOworICAgIH07CisgICAgX0JhY2tJbnNlcnRpb25TZXF1ZW5jZSBfX2M7CisgICAgdHlwZW5hbWUgX0JhY2tJbnNlcnRpb25TZXF1ZW5jZTo6dmFsdWVfdHlwZSBfX3Q7CisgIH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI3VuZGVmIF9Jc1VudXNlZAorCisjZW5kaWYgLy8gX0dMSUJDWFhfQk9PU1RfQ09OQ0VQVF9DSEVDSworCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9jKysweF93YXJuaW5nLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvYysrMHhfd2FybmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOTI2YTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvYysrMHhfd2FybmluZy5oCkBAIC0wLDAgKzEsMzYgQEAKKy8vIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYysrMHhfd2FybmluZy5oCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjaWZuZGVmIF9DWFgwWF9XQVJOSU5HX0gKKyNkZWZpbmUgX0NYWDBYX1dBUk5JTkdfSCAxCisKKyNpZm5kZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyNlcnJvciBUaGlzIGZpbGUgcmVxdWlyZXMgY29tcGlsZXIgYW5kIGxpYnJhcnkgc3VwcG9ydCBmb3IgdGhlIHVwY29taW5nIFwKK0lTTyBDKysgc3RhbmRhcmQsIEMrKzB4LiBUaGlzIHN1cHBvcnQgaXMgY3VycmVudGx5IGV4cGVyaW1lbnRhbCwgYW5kIG11c3QgYmUgXAorZW5hYmxlZCB3aXRoIHRoZSAtc3RkPWMrKzB4IG9yIC1zdGQ9Z251KysweCBjb21waWxlciBvcHRpb25zLgorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2NoYXJfdHJhaXRzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvY2hhcl90cmFpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTJlNzVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2NoYXJfdHJhaXRzLmgKQEAgLTAsMCArMSw1NzUgQEAKKy8vIENoYXJhY3RlciBUcmFpdHMgZm9yIHVzZSBieSBzdGFuZGFyZCBzdHJpbmcgYW5kIGlvc3RyZWFtIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwKKy8vIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBjaGFyX3RyYWl0cy5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyMSAgU3RyaW5ncyBsaWJyYXJ5CisvLworCisjaWZuZGVmIF9DSEFSX1RSQUlUU19ICisjZGVmaW5lIF9DSEFSX1RSQUlUU19IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9zdGxfYWxnb2Jhc2UuaD4gIC8vIHN0ZDo6Y29weSwgc3RkOjpmaWxsX24KKyNpbmNsdWRlIDxiaXRzL3Bvc3R5cGVzLmg+ICAgICAgLy8gRm9yIHN0cmVhbXBvcworI2luY2x1ZGUgPGN3Y2hhcj4gICAgICAgICAgICAgICAvLyBGb3IgV0VPRiwgd21lbW1vdmUsIHdtZW1zZXQsIGV0Yy4KKworI2lmbmRlZiBfR0xJQkNYWF9TVERJT19NQUNST1MKKyMgaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgLy8gRm9yIEVPRgorIyBkZWZpbmUgX0NIQVJfVFJBSVRTX0VPRiBFT0YKKyNlbHNlCisjIGRlZmluZSBfQ0hBUl9UUkFJVFNfRU9GICgtMSkKKyNlbmRpZgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorCisgIC8qKgorICAgKiAgQGJyaWVmICBNYXBwaW5nIGZyb20gY2hhcmFjdGVyIHR5cGUgdG8gYXNzb2NpYXRlZCB0eXBlcy4KKyAgICoKKyAgICogIEBub3RlIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIHRoZSBnZW5lcmljIHZlcnNpb24KKyAgICogIG9mIGNoYXJfdHJhaXRzLiAgSXQgZGVmaW5lcyBpbnRfdHlwZSwgb2ZmX3R5cGUsIHBvc190eXBlLCBhbmQKKyAgICogIHN0YXRlX3R5cGUuICBCeSBkZWZhdWx0IHRoZXNlIGFyZSB1bnNpZ25lZCBsb25nLCBzdHJlYW1vZmYsCisgICAqICBzdHJlYW1wb3MsIGFuZCBtYnN0YXRlX3QuICBVc2VycyB3aG8gbmVlZCBhIGRpZmZlcmVudCBzZXQgb2YKKyAgICogIHR5cGVzLCBidXQgd2hvIGRvbid0IG5lZWQgdG8gY2hhbmdlIHRoZSBkZWZpbml0aW9ucyBvZiBhbnkgZnVuY3Rpb24KKyAgICogIGRlZmluZWQgaW4gY2hhcl90cmFpdHMsIGNhbiBzcGVjaWFsaXplIF9fZ251X2N4eDo6X0NoYXJfdHlwZXMKKyAgICogIHdoaWxlIGxlYXZpbmcgX19nbnVfY3h4OjpjaGFyX3RyYWl0cyBhbG9uZS4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIHN0cnVjdCBfQ2hhcl90eXBlcworICAgIHsKKyAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgIGludF90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OnN0cmVhbXBvcyAgcG9zX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6c3RyZWFtb2ZmICBvZmZfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjptYnN0YXRlX3QgIHN0YXRlX3R5cGU7CisgICAgfTsKKworCisgIC8qKgorICAgKiAgQGJyaWVmICBCYXNlIGNsYXNzIHVzZWQgdG8gaW1wbGVtZW50IHN0ZDo6Y2hhcl90cmFpdHMuCisgICAqCisgICAqICBAbm90ZSBGb3IgYW55IGdpdmVuIGFjdHVhbCBjaGFyYWN0ZXIgdHlwZSwgdGhpcyBkZWZpbml0aW9uIGlzCisgICAqICBwcm9iYWJseSB3cm9uZy4gIChNb3N0IG9mIHRoZSBtZW1iZXIgZnVuY3Rpb25zIGFyZSBsaWtlbHkgdG8gYmUKKyAgICogIHJpZ2h0LCBidXQgdGhlIGludF90eXBlIGFuZCBzdGF0ZV90eXBlIHR5cGVkZWZzLCBhbmQgdGhlIGVvZigpCisgICAqICBtZW1iZXIgZnVuY3Rpb24sIGFyZSBsaWtlbHkgdG8gYmUgd3JvbmcuKSAgVGhlIHJlYXNvbiB0aGlzIGNsYXNzCisgICAqICBleGlzdHMgaXMgc28gdXNlcnMgY2FuIHNwZWNpYWxpemUgaXQuICBDbGFzc2VzIGluIG5hbWVzcGFjZSBzdGQKKyAgICogIG1heSBub3QgYmUgc3BlY2lhbGl6ZWQgZm9yIGZ1bmRhbWVudGFsIHR5cGVzLCBidXQgY2xhc3NlcyBpbgorICAgKiAgbmFtZXNwYWNlIF9fZ251X2N4eCBtYXkgYmUuCisgICAqCisgICAqICBTZWUgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL21hbnVhbC9iazAxcHQwNWNoMTNzMDMuaHRtbAorICAgKiAgZm9yIGFkdmljZSBvbiBob3cgdG8gbWFrZSB1c2Ugb2YgdGhpcyBjbGFzcyBmb3IgQGEgdW51c3VhbCBjaGFyYWN0ZXIKKyAgICogIHR5cGVzLiBBbHNvLCBjaGVjayBvdXQgaW5jbHVkZS9leHQvcG9kX2NoYXJfdHJhaXRzLmguICAKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBzdHJ1Y3QgY2hhcl90cmFpdHMKKyAgICB7CisgICAgICB0eXBlZGVmIF9DaGFyVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0NoYXJfdHlwZXM8X0NoYXJUPjo6aW50X3R5cGUgICAgaW50X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9DaGFyX3R5cGVzPF9DaGFyVD46OnBvc190eXBlICAgIHBvc190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQ2hhcl90eXBlczxfQ2hhclQ+OjpvZmZfdHlwZSAgICBvZmZfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0NoYXJfdHlwZXM8X0NoYXJUPjo6c3RhdGVfdHlwZSAgc3RhdGVfdHlwZTsKKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKKyAgICAgIHsgX19jMSA9IF9fYzI7IH0KKworICAgICAgc3RhdGljIGJvb2wKKyAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQorICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CisKKyAgICAgIHN0YXRpYyBib29sCisgICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKKyAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CisKKyAgICAgIHN0YXRpYyBpbnQKKyAgICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHN0ZDo6c2l6ZV90IF9fbik7CisKKyAgICAgIHN0YXRpYyBzdGQ6OnNpemVfdAorICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKTsKKworICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0ZDo6c2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpOworCisgICAgICBzdGF0aWMgY2hhcl90eXBlKgorICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc3RkOjpzaXplX3QgX19uKTsKKworICAgICAgc3RhdGljIGNoYXJfdHlwZSoKKyAgICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHN0ZDo6c2l6ZV90IF9fbik7CisKKyAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCisgICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHN0ZDo6c2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSk7CisKKyAgICAgIHN0YXRpYyBjaGFyX3R5cGUKKyAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlPihfX2MpOyB9CisKKyAgICAgIHN0YXRpYyBpbnRfdHlwZQorICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oX19jKTsgfQorCisgICAgICBzdGF0aWMgYm9vbAorICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQorICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CisKKyAgICAgIHN0YXRpYyBpbnRfdHlwZQorICAgICAgZW9mKCkKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPihfQ0hBUl9UUkFJVFNfRU9GKTsgfQorCisgICAgICBzdGF0aWMgaW50X3R5cGUKKyAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYykKKyAgICAgIHsgcmV0dXJuICFlcV9pbnRfdHlwZShfX2MsIGVvZigpKSA/IF9fYyA6IHRvX2ludF90eXBlKGNoYXJfdHlwZSgpKTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGludAorICAgIGNoYXJfdHJhaXRzPF9DaGFyVD46OgorICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHN0ZDo6c2l6ZV90IF9fbikKKyAgICB7CisgICAgICBmb3IgKHN0ZDo6c2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbjsgKytfX2kpCisJaWYgKGx0KF9fczFbX19pXSwgX19zMltfX2ldKSkKKwkgIHJldHVybiAtMTsKKwllbHNlIGlmIChsdChfX3MyW19faV0sIF9fczFbX19pXSkpCisJICByZXR1cm4gMTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgc3RkOjpzaXplX3QKKyAgICBjaGFyX3RyYWl0czxfQ2hhclQ+OjoKKyAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3ApCisgICAgeworICAgICAgc3RkOjpzaXplX3QgX19pID0gMDsKKyAgICAgIHdoaWxlICghZXEoX19wW19faV0sIGNoYXJfdHlwZSgpKSkKKyAgICAgICAgKytfX2k7CisgICAgICByZXR1cm4gX19pOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgY29uc3QgdHlwZW5hbWUgY2hhcl90cmFpdHM8X0NoYXJUPjo6Y2hhcl90eXBlKgorICAgIGNoYXJfdHJhaXRzPF9DaGFyVD46OgorICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0ZDo6c2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCisgICAgeworICAgICAgZm9yIChzdGQ6OnNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX247ICsrX19pKQorICAgICAgICBpZiAoZXEoX19zW19faV0sIF9fYSkpCisgICAgICAgICAgcmV0dXJuIF9fcyArIF9faTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgdHlwZW5hbWUgY2hhcl90cmFpdHM8X0NoYXJUPjo6Y2hhcl90eXBlKgorICAgIGNoYXJfdHJhaXRzPF9DaGFyVD46OgorICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHN0ZDo6c2l6ZV90IF9fbikKKyAgICB7CisgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX21lbW1vdmUoX19zMSwgX19zMiwKKwkJCQkJCSAgICBfX24gKiBzaXplb2YoY2hhcl90eXBlKSkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgdHlwZW5hbWUgY2hhcl90cmFpdHM8X0NoYXJUPjo6Y2hhcl90eXBlKgorICAgIGNoYXJfdHJhaXRzPF9DaGFyVD46OgorICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHN0ZDo6c2l6ZV90IF9fbikKKyAgICB7CisgICAgICAvLyBOQjogSW5saW5lIHN0ZDo6Y29weSBzbyBubyByZWN1cnNpdmUgZGVwZW5kZW5jaWVzLgorICAgICAgc3RkOjpjb3B5KF9fczIsIF9fczIgKyBfX24sIF9fczEpOworICAgICAgcmV0dXJuIF9fczE7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICB0eXBlbmFtZSBjaGFyX3RyYWl0czxfQ2hhclQ+OjpjaGFyX3R5cGUqCisgICAgY2hhcl90cmFpdHM8X0NoYXJUPjo6CisgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBzdGQ6OnNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCisgICAgeworICAgICAgLy8gTkI6IElubGluZSBzdGQ6OmZpbGxfbiBzbyBubyByZWN1cnNpdmUgZGVwZW5kZW5jaWVzLgorICAgICAgc3RkOjpmaWxsX24oX19zLCBfX24sIF9fYSk7CisgICAgICByZXR1cm4gX19zOworICAgIH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8vIDIxLjEKKyAgLyoqCisgICAqICBAYnJpZWYgIEJhc2lzIGZvciBleHBsaWNpdCB0cmFpdHMgc3BlY2lhbGl6YXRpb25zLgorICAgKgorICAgKiAgQG5vdGUgIEZvciBhbnkgZ2l2ZW4gYWN0dWFsIGNoYXJhY3RlciB0eXBlLCB0aGlzIGRlZmluaXRpb24gaXMKKyAgICogIHByb2JhYmx5IHdyb25nLiAgU2luY2UgdGhpcyBpcyBqdXN0IGEgdGhpbiB3cmFwcGVyIGFyb3VuZAorICAgKiAgX19nbnVfY3h4OjpjaGFyX3RyYWl0cywgaXQgaXMgcG9zc2libGUgdG8gYWNoaWV2ZSBhIG1vcmUKKyAgICogIGFwcHJvcHJpYXRlIGRlZmluaXRpb24gYnkgc3BlY2lhbGl6aW5nIF9fZ251X2N4eDo6Y2hhcl90cmFpdHMuCisgICAqCisgICAqICBTZWUgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL21hbnVhbC9iazAxcHQwNWNoMTNzMDMuaHRtbAorICAgKiAgZm9yIGFkdmljZSBvbiBob3cgdG8gbWFrZSB1c2Ugb2YgdGhpcyBjbGFzcyBmb3IgQGEgdW51c3VhbCBjaGFyYWN0ZXIKKyAgICogIHR5cGVzLiBBbHNvLCBjaGVjayBvdXQgaW5jbHVkZS9leHQvcG9kX2NoYXJfdHJhaXRzLmguCisgICovCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KKyAgICBzdHJ1Y3QgY2hhcl90cmFpdHMgOiBwdWJsaWMgX19nbnVfY3h4OjpjaGFyX3RyYWl0czxfQ2hhclQ+CisgICAgeyB9OworCisKKyAgLy8vIDIxLjEuMy4xICBjaGFyX3RyYWl0cyBzcGVjaWFsaXphdGlvbnMKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPgorICAgIHsKKyAgICAgIHR5cGVkZWYgY2hhciAgICAgICAgICAgICAgY2hhcl90eXBlOworICAgICAgdHlwZWRlZiBpbnQgICAgICAgICAgICAgICBpbnRfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RyZWFtcG9zICAgICAgICAgcG9zX3R5cGU7CisgICAgICB0eXBlZGVmIHN0cmVhbW9mZiAgICAgICAgIG9mZl90eXBlOworICAgICAgdHlwZWRlZiBtYnN0YXRlX3QgICAgICAgICBzdGF0ZV90eXBlOworCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQorICAgICAgeyBfX2MxID0gX19jMjsgfQorCisgICAgICBzdGF0aWMgYm9vbAorICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCisgICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KKworICAgICAgc3RhdGljIGJvb2wKKyAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQorICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KKworICAgICAgc3RhdGljIGludAorICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKKyAgICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9tZW1jbXAoX19zMSwgX19zMiwgX19uKTsgfQorCisgICAgICBzdGF0aWMgc2l6ZV90CisgICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpCisgICAgICB7IHJldHVybiBfX2J1aWx0aW5fc3RybGVuKF9fcyk7IH0KKworICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcl90eXBlKj4oX19idWlsdGluX21lbWNocihfX3MsIF9fYSwgX19uKSk7IH0KKworICAgICAgc3RhdGljIGNoYXJfdHlwZSoKKyAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihfX2J1aWx0aW5fbWVtbW92ZShfX3MxLCBfX3MyLCBfX24pKTsgfQorCisgICAgICBzdGF0aWMgY2hhcl90eXBlKgorICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KF9fYnVpbHRpbl9tZW1jcHkoX19zMSwgX19zMiwgX19uKSk7IH0KKworICAgICAgc3RhdGljIGNoYXJfdHlwZSoKKyAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KF9fYnVpbHRpbl9tZW1zZXQoX19zLCBfX2EsIF9fbikpOyB9CisKKyAgICAgIHN0YXRpYyBjaGFyX3R5cGUKKyAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlPihfX2MpOyB9CisKKyAgICAgIC8vIFRvIGtlZXAgYm90aCB0aGUgYnl0ZSAweGZmIGFuZCB0aGUgZW9mIHN5bWJvbCAweGZmZmZmZmZmCisgICAgICAvLyBmcm9tIGVuZGluZyB1cCBhcyAweGZmZmZmZmZmLgorICAgICAgc3RhdGljIGludF90eXBlCisgICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpKTsgfQorCisgICAgICBzdGF0aWMgYm9vbAorICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQorICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CisKKyAgICAgIHN0YXRpYyBpbnRfdHlwZQorICAgICAgZW9mKCkKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPihfQ0hBUl9UUkFJVFNfRU9GKTsgfQorCisgICAgICBzdGF0aWMgaW50X3R5cGUKKyAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYykKKyAgICAgIHsgcmV0dXJuIChfX2MgPT0gZW9mKCkpID8gMCA6IF9fYzsgfQorICB9OworCisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICAvLy8gMjEuMS4zLjIgIGNoYXJfdHJhaXRzIHNwZWNpYWxpemF0aW9ucworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGNoYXJfdHJhaXRzPHdjaGFyX3Q+CisgICAgeworICAgICAgdHlwZWRlZiB3Y2hhcl90ICAgICAgICAgICBjaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIHdpbnRfdCAgICAgICAgICAgIGludF90eXBlOworICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgICAgICAgICBvZmZfdHlwZTsKKyAgICAgIHR5cGVkZWYgd3N0cmVhbXBvcyAgICAgICAgcG9zX3R5cGU7CisgICAgICB0eXBlZGVmIG1ic3RhdGVfdCAgICAgICAgIHN0YXRlX3R5cGU7CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCisgICAgICB7IF9fYzEgPSBfX2MyOyB9CisKKyAgICAgIHN0YXRpYyBib29sCisgICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKKyAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQorCisgICAgICBzdGF0aWMgYm9vbAorICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCisgICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQorCisgICAgICBzdGF0aWMgaW50CisgICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQorICAgICAgeyByZXR1cm4gd21lbWNtcChfX3MxLCBfX3MyLCBfX24pOyB9CisKKyAgICAgIHN0YXRpYyBzaXplX3QKKyAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKKyAgICAgIHsgcmV0dXJuIHdjc2xlbihfX3MpOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCisgICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKKyAgICAgIHsgcmV0dXJuIHdtZW1jaHIoX19zLCBfX2EsIF9fbik7IH0KKworICAgICAgc3RhdGljIGNoYXJfdHlwZSoKKyAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCisgICAgICB7IHJldHVybiB3bWVtbW92ZShfX3MxLCBfX3MyLCBfX24pOyB9CisKKyAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCisgICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQorICAgICAgeyByZXR1cm4gd21lbWNweShfX3MxLCBfX3MyLCBfX24pOyB9CisKKyAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCisgICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCisgICAgICB7IHJldHVybiB3bWVtc2V0KF9fcywgX19hLCBfX24pOyB9CisKKyAgICAgIHN0YXRpYyBjaGFyX3R5cGUKKyAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQorICAgICAgeyByZXR1cm4gY2hhcl90eXBlKF9fYyk7IH0KKworICAgICAgc3RhdGljIGludF90eXBlCisgICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykKKyAgICAgIHsgcmV0dXJuIGludF90eXBlKF9fYyk7IH0KKworICAgICAgc3RhdGljIGJvb2wKKyAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikKKyAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQorCisgICAgICBzdGF0aWMgaW50X3R5cGUKKyAgICAgIGVvZigpCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oV0VPRik7IH0KKworICAgICAgc3RhdGljIGludF90eXBlCisgICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpCisgICAgICB7IHJldHVybiBlcV9pbnRfdHlwZShfX2MsIGVvZigpKSA/IDAgOiBfX2M7IH0KKyAgfTsKKyNlbmRpZiAvL19HTElCQ1hYX1VTRV9XQ0hBUl9UCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2lmIChkZWZpbmVkKF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fKSBcCisgICAgICYmIGRlZmluZWQoX0dMSUJDWFhfVVNFX0M5OV9TVERJTlRfVFIxKSkKKworI2luY2x1ZGUgPGNzdGRpbnQ+CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyMTZfdD4KKyAgICB7CisgICAgICB0eXBlZGVmIGNoYXIxNl90ICAgICAgICAgIGNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgdWludF9sZWFzdDE2X3QgICAgaW50X3R5cGU7CisgICAgICB0eXBlZGVmIHN0cmVhbW9mZiAgICAgICAgIG9mZl90eXBlOworICAgICAgdHlwZWRlZiB1MTZzdHJlYW1wb3MgICAgICBwb3NfdHlwZTsKKyAgICAgIHR5cGVkZWYgbWJzdGF0ZV90ICAgICAgICAgc3RhdGVfdHlwZTsKKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKKyAgICAgIHsgX19jMSA9IF9fYzI7IH0KKworICAgICAgc3RhdGljIGJvb2wKKyAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQorICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CisKKyAgICAgIHN0YXRpYyBib29sCisgICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKKyAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CisKKyAgICAgIHN0YXRpYyBpbnQKKyAgICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCisgICAgICB7CisJZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSkKKwkgIGlmIChsdChfX3MxW19faV0sIF9fczJbX19pXSkpCisJICAgIHJldHVybiAtMTsKKwkgIGVsc2UgaWYgKGx0KF9fczJbX19pXSwgX19zMVtfX2ldKSkKKwkgICAgcmV0dXJuIDE7CisJcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIHN0YXRpYyBzaXplX3QKKyAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKKyAgICAgIHsKKwlzaXplX3QgX19pID0gMDsKKwl3aGlsZSAoIWVxKF9fc1tfX2ldLCBjaGFyX3R5cGUoKSkpCisJICArK19faTsKKwlyZXR1cm4gX19pOworICAgICAgfQorCisgICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgorICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCisgICAgICB7CisJZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSkKKwkgIGlmIChlcShfX3NbX19pXSwgX19hKSkKKwkgICAgcmV0dXJuIF9fcyArIF9faTsKKwlyZXR1cm4gMDsKKyAgICAgIH0KKworICAgICAgc3RhdGljIGNoYXJfdHlwZSoKKyAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCisgICAgICB7CisJcmV0dXJuIChzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPgorCQkoX19idWlsdGluX21lbW1vdmUoX19zMSwgX19zMiwgX19uICogc2l6ZW9mKGNoYXJfdHlwZSkpKSk7CisgICAgICB9CisKKyAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCisgICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQorICAgICAgeworCXJldHVybiAoc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4KKwkJKF9fYnVpbHRpbl9tZW1jcHkoX19zMSwgX19zMiwgX19uICogc2l6ZW9mKGNoYXJfdHlwZSkpKSk7CisgICAgICB9CisKKyAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCisgICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCisgICAgICB7CisJZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSkKKwkgIGFzc2lnbihfX3NbX19pXSwgX19hKTsKKwlyZXR1cm4gX19zOworICAgICAgfQorCisgICAgICBzdGF0aWMgY2hhcl90eXBlCisgICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykKKyAgICAgIHsgcmV0dXJuIGNoYXJfdHlwZShfX2MpOyB9CisKKyAgICAgIHN0YXRpYyBpbnRfdHlwZQorICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpCisgICAgICB7IHJldHVybiBpbnRfdHlwZShfX2MpOyB9CisKKyAgICAgIHN0YXRpYyBib29sCisgICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIpCisgICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KKworICAgICAgc3RhdGljIGludF90eXBlCisgICAgICBlb2YoKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KC0xKTsgfQorCisgICAgICBzdGF0aWMgaW50X3R5cGUKKyAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYykKKyAgICAgIHsgcmV0dXJuIGVxX2ludF90eXBlKF9fYywgZW9mKCkpID8gMCA6IF9fYzsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyMzJfdD4KKyAgICB7CisgICAgICB0eXBlZGVmIGNoYXIzMl90ICAgICAgICAgIGNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgdWludF9sZWFzdDMyX3QgICAgaW50X3R5cGU7CisgICAgICB0eXBlZGVmIHN0cmVhbW9mZiAgICAgICAgIG9mZl90eXBlOworICAgICAgdHlwZWRlZiB1MzJzdHJlYW1wb3MgICAgICBwb3NfdHlwZTsKKyAgICAgIHR5cGVkZWYgbWJzdGF0ZV90ICAgICAgICAgc3RhdGVfdHlwZTsKKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKKyAgICAgIHsgX19jMSA9IF9fYzI7IH0KKworICAgICAgc3RhdGljIGJvb2wKKyAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQorICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CisKKyAgICAgIHN0YXRpYyBib29sCisgICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKKyAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CisKKyAgICAgIHN0YXRpYyBpbnQKKyAgICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCisgICAgICB7CisJZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSkKKwkgIGlmIChsdChfX3MxW19faV0sIF9fczJbX19pXSkpCisJICAgIHJldHVybiAtMTsKKwkgIGVsc2UgaWYgKGx0KF9fczJbX19pXSwgX19zMVtfX2ldKSkKKwkgICAgcmV0dXJuIDE7CisJcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIHN0YXRpYyBzaXplX3QKKyAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKKyAgICAgIHsKKwlzaXplX3QgX19pID0gMDsKKwl3aGlsZSAoIWVxKF9fc1tfX2ldLCBjaGFyX3R5cGUoKSkpCisJICArK19faTsKKwlyZXR1cm4gX19pOworICAgICAgfQorCisgICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgorICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCisgICAgICB7CisJZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSkKKwkgIGlmIChlcShfX3NbX19pXSwgX19hKSkKKwkgICAgcmV0dXJuIF9fcyArIF9faTsKKwlyZXR1cm4gMDsKKyAgICAgIH0KKworICAgICAgc3RhdGljIGNoYXJfdHlwZSoKKyAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCisgICAgICB7CisJcmV0dXJuIChzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPgorCQkoX19idWlsdGluX21lbW1vdmUoX19zMSwgX19zMiwgX19uICogc2l6ZW9mKGNoYXJfdHlwZSkpKSk7CisgICAgICB9CisKKyAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCisgICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQorICAgICAgeyAKKwlyZXR1cm4gKHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+CisJCShfX2J1aWx0aW5fbWVtY3B5KF9fczEsIF9fczIsIF9fbiAqIHNpemVvZihjaGFyX3R5cGUpKSkpOworICAgICAgfQorCisgICAgICBzdGF0aWMgY2hhcl90eXBlKgorICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQorICAgICAgeworCWZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbjsgKytfX2kpCisJICBhc3NpZ24oX19zW19faV0sIF9fYSk7CisJcmV0dXJuIF9fczsKKyAgICAgIH0KKworICAgICAgc3RhdGljIGNoYXJfdHlwZQorICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpCisgICAgICB7IHJldHVybiBjaGFyX3R5cGUoX19jKTsgfQorCisgICAgICBzdGF0aWMgaW50X3R5cGUKKyAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKQorICAgICAgeyByZXR1cm4gaW50X3R5cGUoX19jKTsgfQorCisgICAgICBzdGF0aWMgYm9vbAorICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQorICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CisKKyAgICAgIHN0YXRpYyBpbnRfdHlwZQorICAgICAgZW9mKCkKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigtMSk7IH0KKworICAgICAgc3RhdGljIGludF90eXBlCisgICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpCisgICAgICB7IHJldHVybiBlcV9pbnRfdHlwZShfX2MsIGVvZigpKSA/IDAgOiBfX2M7IH0KKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZiAKKworI3VuZGVmIF9DSEFSX1RSQUlUU19FT0YKKworI2VuZGlmIC8vIF9DSEFSX1RSQUlUU19ICmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvY21hdGgudGNjIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2NtYXRoLnRjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjRjODUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2NtYXRoLnRjYwpAQCAtMCwwICsxLDU1IEBACisvLyAtKi0gQysrIC0qLSBDIG1hdGggbGlicmFyeS4KKworLy8gQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBUaGlzIGZpbGUgd2FzIHdyaXR0ZW4gYnkgR2FicmllbCBEb3MgUmVpcyA8Z2RyQGNvZGVzb3VyY2VyeS5jb20+CisKKy8qKiBAZmlsZSBjbWF0aC50Y2MKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgZmlsZS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0NNQVRIX1RDQworI2RlZmluZSBfR0xJQkNYWF9DTUFUSF9UQ0MgMQorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgX19jbWF0aF9wb3dlcihfVHAgX194LCB1bnNpZ25lZCBpbnQgX19uKQorICAgIHsKKyAgICAgIF9UcCBfX3kgPSBfX24gJSAyID8gX194IDogX1RwKDEpOworCisgICAgICB3aGlsZSAoX19uID4+PSAxKQorICAgICAgICB7CisgICAgICAgICAgX194ID0gX194ICogX194OworICAgICAgICAgIGlmIChfX24gJSAyKQorICAgICAgICAgICAgX195ID0gX195ICogX194OworICAgICAgICB9CisKKyAgICAgIHJldHVybiBfX3k7CisgICAgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2NvZGVjdnQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9jb2RlY3Z0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThjYTNhZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9jb2RlY3Z0LmgKQEAgLTAsMCArMSw1MDQgQEAKKy8vIExvY2FsZSBzdXBwb3J0IChjb2RlY3Z0KSAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsCisvLyAyMDA5LCAyMDEwICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy9jb2RlY3Z0LmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS41IFRlbXBsYXRlIGNsYXNzIGNvZGVjdnQKKy8vCisKKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisKKyNpZm5kZWYgX0NPREVDVlRfSAorI2RlZmluZSBfQ09ERUNWVF9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8vLyBFbXB0eSBiYXNlIGNsYXNzIGZvciBjb2RlY3Z0IGZhY2V0IFsyMi4yLjEuNV0uCisgIGNsYXNzIGNvZGVjdnRfYmFzZQorICB7CisgIHB1YmxpYzoKKyAgICBlbnVtIHJlc3VsdAorICAgIHsKKyAgICAgIG9rLAorICAgICAgcGFydGlhbCwKKyAgICAgIGVycm9yLAorICAgICAgbm9jb252CisgICAgfTsKKyAgfTsKKworICAvKioKKyAgICogIEBicmllZiAgQ29tbW9uIGJhc2UgZm9yIGNvZGVjdnQgZnVuY3Rpb25zLgorICAgKgorICAgKiAgVGhpcyB0ZW1wbGF0ZSBjbGFzcyBwcm92aWRlcyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIHB1YmxpYyBmdW5jdGlvbnMKKyAgICogIHRoYXQgZm9yd2FyZCB0byB0aGUgcHJvdGVjdGVkIHZpcnR1YWwgZnVuY3Rpb25zLgorICAgKgorICAgKiAgVGhpcyB0ZW1wbGF0ZSBhbHNvIHByb3ZpZGVzIGFic3RyYWN0IHN0dWJzIGZvciB0aGUgcHJvdGVjdGVkIHZpcnR1YWwKKyAgICogIGZ1bmN0aW9ucy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgorICAgIGNsYXNzIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlCisgICAgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGNvZGVjdnRfYmFzZQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlczoKKyAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQJcmVzdWx0OworICAgICAgdHlwZWRlZiBfSW50ZXJuVAkJCWludGVybl90eXBlOworICAgICAgdHlwZWRlZiBfRXh0ZXJuVAkJCWV4dGVybl90eXBlOworICAgICAgdHlwZWRlZiBfU3RhdGVUCQkJc3RhdGVfdHlwZTsKKworICAgICAgLy8gMjIuMi4xLjUuMSBjb2RlY3Z0IG1lbWJlcnMKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29udmVydCBmcm9tIGludGVybmFsIHRvIGV4dGVybmFsIGNoYXJhY3RlciBzZXQuCisgICAgICAgKgorICAgICAgICogIENvbnZlcnRzIGlucHV0IHN0cmluZyBvZiBpbnRlcm5fdHlwZSB0byBvdXRwdXQgc3RyaW5nIG9mCisgICAgICAgKiAgZXh0ZXJuX3R5cGUuICBUaGlzIGlzIGFuYWxvZ291cyB0byB3Y3NydG9tYnMuICBJdCBkb2VzIHRoaXMgYnkKKyAgICAgICAqICBjYWxsaW5nIGNvZGVjdnQ6OmRvX291dC4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gY2hhcmFjdGVyIHNldHMgYXJlIGRldGVybWluZWQgYnkgdGhlCisgICAgICAgKiAgZmFjZXQncyBsb2NhbGUsIGludGVybmFsIGFuZCBleHRlcm5hbCB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGNoYXJhY3RlcnMgaW4gW2Zyb20sZnJvbV9lbmQpIGFyZSBjb252ZXJ0ZWQgYW5kIHdyaXR0ZW4gdG8KKyAgICAgICAqICBbdG8sdG9fZW5kKS4gIGZyb21fbmV4dCBhbmQgdG9fbmV4dCBhcmUgc2V0IHRvIHBvaW50IHRvIHRoZQorICAgICAgICogIGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIGxhc3Qgc3VjY2Vzc2Z1bGx5IGNvbnZlcnRlZCBjaGFyYWN0ZXIsCisgICAgICAgKiAgcmVzcGVjdGl2ZWx5LiAgSWYgdGhlIHJlc3VsdCBuZWVkZWQgbm8gY29udmVyc2lvbiwgZnJvbV9uZXh0IGFuZAorICAgICAgICogIHRvX25leHQgYXJlIG5vdCBhZmZlY3RlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIEBhIHN0YXRlIGFyZ3VtZW50IHNob3VsZCBiZSBpbml0aWFsaXplZCBpZiB0aGUgaW5wdXQgaXMgYXQgdGhlCisgICAgICAgKiAgYmVnaW5uaW5nIGFuZCBjYXJyaWVkIGZyb20gYSBwcmV2aW91cyBjYWxsIGlmIGNvbnRpbnVpbmcKKyAgICAgICAqICBjb252ZXJzaW9uLiAgVGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMgYWJvdXQgaG93IEBhIHN0YXRlIGlzIHVzZWQuCisgICAgICAgKgorICAgICAgICogIFRoZSByZXN1bHQgcmV0dXJuZWQgaXMgYSBtZW1iZXIgb2YgY29kZWN2dF9iYXNlOjpyZXN1bHQuICBJZgorICAgICAgICogIGFsbCB0aGUgaW5wdXQgaXMgY29udmVydGVkLCByZXR1cm5zIGNvZGVjdnRfYmFzZTo6b2suICBJZiBubworICAgICAgICogIGNvbnZlcnNpb24gaXMgbmVjZXNzYXJ5LCByZXR1cm5zIGNvZGVjdnRfYmFzZTo6bm9jb252LiAgSWYKKyAgICAgICAqICB0aGUgaW5wdXQgZW5kcyBlYXJseSBvciB0aGVyZSBpcyBpbnN1ZmZpY2llbnQgc3BhY2UgaW4gdGhlCisgICAgICAgKiAgb3V0cHV0LCByZXR1cm5zIGNvZGVjdnRfYmFzZTo6cGFydGlhbC4gIE90aGVyd2lzZSB0aGUKKyAgICAgICAqICBjb252ZXJzaW9uIGZhaWxlZCBhbmQgY29kZWN2dF9iYXNlOjplcnJvciBpcyByZXR1cm5lZC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBzdGF0ZSAgUGVyc2lzdGVudCBjb252ZXJzaW9uIHN0YXRlIGRhdGEuCisgICAgICAgKiAgQHBhcmFtICBmcm9tICBTdGFydCBvZiBpbnB1dC4KKyAgICAgICAqICBAcGFyYW0gIGZyb21fZW5kICBFbmQgb2YgaW5wdXQuCisgICAgICAgKiAgQHBhcmFtICBmcm9tX25leHQgIFJldHVybnMgc3RhcnQgb2YgdW5jb252ZXJ0ZWQgZGF0YS4KKyAgICAgICAqICBAcGFyYW0gIHRvICBTdGFydCBvZiBvdXRwdXQgYnVmZmVyLgorICAgICAgICogIEBwYXJhbSAgdG9fZW5kICBFbmQgb2Ygb3V0cHV0IGJ1ZmZlci4KKyAgICAgICAqICBAcGFyYW0gIHRvX25leHQgIFJldHVybnMgc3RhcnQgb2YgdW51c2VkIG91dHB1dCBhcmVhLgorICAgICAgICogIEByZXR1cm4gIGNvZGVjdnRfYmFzZTo6cmVzdWx0LgorICAgICAgKi8KKyAgICAgIHJlc3VsdAorICAgICAgb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCisJICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKwkgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCisJICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gdGhpcy0+ZG9fb3V0KF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25leHQsCisJCQkgICAgX190bywgX190b19lbmQsIF9fdG9fbmV4dCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVzZXQgY29udmVyc2lvbiBzdGF0ZS4KKyAgICAgICAqCisgICAgICAgKiAgV3JpdGVzIGNoYXJhY3RlcnMgdG8gb3V0cHV0IHRoYXQgd291bGQgcmVzdG9yZSBAYSBzdGF0ZSB0byBpbml0aWFsCisgICAgICAgKiAgY29uZGl0aW9ucy4gIFRoZSBpZGVhIGlzIHRoYXQgaWYgYSBwYXJ0aWFsIGNvbnZlcnNpb24gb2NjdXJzLCB0aGVuCisgICAgICAgKiAgdGhlIGNvbnZlcnRpbmcgdGhlIGNoYXJhY3RlcnMgd3JpdHRlbiBieSB0aGlzIGZ1bmN0aW9uIHdvdWxkIGxlYXZlCisgICAgICAgKiAgdGhlIHN0YXRlIGluIGluaXRpYWwgY29uZGl0aW9ucywgcmF0aGVyIHRoYW4gcGFydGlhbCBjb252ZXJzaW9uCisgICAgICAgKiAgc3RhdGUuICBJdCBkb2VzIHRoaXMgYnkgY2FsbGluZyBjb2RlY3Z0Ojpkb191bnNoaWZ0KCkuCisgICAgICAgKgorICAgICAgICogIEZvciBleGFtcGxlLCBpZiA0IGV4dGVybmFsIGNoYXJhY3RlcnMgYWx3YXlzIGNvbnZlcnRlZCB0byAxIGludGVybmFsCisgICAgICAgKiAgY2hhcmFjdGVyLCBhbmQgaW5wdXQgdG8gaW4oKSBoYWQgNiBleHRlcm5hbCBjaGFyYWN0ZXJzIHdpdGggc3RhdGUKKyAgICAgICAqICBzYXZlZCwgdGhpcyBmdW5jdGlvbiB3b3VsZCB3cml0ZSB0d28gY2hhcmFjdGVycyB0byB0aGUgb3V0cHV0IGFuZAorICAgICAgICogIHNldCB0aGUgc3RhdGUgdG8gaW5pdGlhbGl6ZWQgY29uZGl0aW9ucy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gY2hhcmFjdGVyIHNldHMgYXJlIGRldGVybWluZWQgYnkgdGhlCisgICAgICAgKiAgZmFjZXQncyBsb2NhbGUsIGludGVybmFsIGFuZCBleHRlcm5hbCB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIHJlc3VsdCByZXR1cm5lZCBpcyBhIG1lbWJlciBvZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdC4gIElmIHRoZQorICAgICAgICogIHN0YXRlIGNvdWxkIGJlIHJlc2V0IGFuZCBkYXRhIHdyaXR0ZW4sIHJldHVybnMgY29kZWN2dF9iYXNlOjpvay4gIElmCisgICAgICAgKiAgbm8gY29udmVyc2lvbiBpcyBuZWNlc3NhcnksIHJldHVybnMgY29kZWN2dF9iYXNlOjpub2NvbnYuICBJZiB0aGUKKyAgICAgICAqICBvdXRwdXQgaGFzIGluc3VmZmljaWVudCBzcGFjZSwgcmV0dXJucyBjb2RlY3Z0X2Jhc2U6OnBhcnRpYWwuCisgICAgICAgKiAgT3RoZXJ3aXNlIHRoZSByZXNldCBmYWlsZWQgYW5kIGNvZGVjdnRfYmFzZTo6ZXJyb3IgaXMgcmV0dXJuZWQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgc3RhdGUgIFBlcnNpc3RlbnQgY29udmVyc2lvbiBzdGF0ZSBkYXRhLgorICAgICAgICogIEBwYXJhbSAgdG8gIFN0YXJ0IG9mIG91dHB1dCBidWZmZXIuCisgICAgICAgKiAgQHBhcmFtICB0b19lbmQgIEVuZCBvZiBvdXRwdXQgYnVmZmVyLgorICAgICAgICogIEBwYXJhbSAgdG9fbmV4dCAgUmV0dXJucyBzdGFydCBvZiB1bnVzZWQgb3V0cHV0IGFyZWEuCisgICAgICAgKiAgQHJldHVybiAgY29kZWN2dF9iYXNlOjpyZXN1bHQuCisgICAgICAqLworICAgICAgcmVzdWx0CisgICAgICB1bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCisJICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb191bnNoaWZ0KF9fc3RhdGUsIF9fdG8sX190b19lbmQsX190b19uZXh0KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnZlcnQgZnJvbSBleHRlcm5hbCB0byBpbnRlcm5hbCBjaGFyYWN0ZXIgc2V0LgorICAgICAgICoKKyAgICAgICAqICBDb252ZXJ0cyBpbnB1dCBzdHJpbmcgb2YgZXh0ZXJuX3R5cGUgdG8gb3V0cHV0IHN0cmluZyBvZgorICAgICAgICogIGludGVybl90eXBlLiAgVGhpcyBpcyBhbmFsb2dvdXMgdG8gbWJzcnRvd2NzLiAgSXQgZG9lcyB0aGlzIGJ5CisgICAgICAgKiAgY2FsbGluZyBjb2RlY3Z0Ojpkb19pbi4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gY2hhcmFjdGVyIHNldHMgYXJlIGRldGVybWluZWQgYnkgdGhlCisgICAgICAgKiAgZmFjZXQncyBsb2NhbGUsIGludGVybmFsIGFuZCBleHRlcm5hbCB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGNoYXJhY3RlcnMgaW4gW2Zyb20sZnJvbV9lbmQpIGFyZSBjb252ZXJ0ZWQgYW5kIHdyaXR0ZW4gdG8KKyAgICAgICAqICBbdG8sdG9fZW5kKS4gIGZyb21fbmV4dCBhbmQgdG9fbmV4dCBhcmUgc2V0IHRvIHBvaW50IHRvIHRoZQorICAgICAgICogIGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIGxhc3Qgc3VjY2Vzc2Z1bGx5IGNvbnZlcnRlZCBjaGFyYWN0ZXIsCisgICAgICAgKiAgcmVzcGVjdGl2ZWx5LiAgSWYgdGhlIHJlc3VsdCBuZWVkZWQgbm8gY29udmVyc2lvbiwgZnJvbV9uZXh0IGFuZAorICAgICAgICogIHRvX25leHQgYXJlIG5vdCBhZmZlY3RlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIEBhIHN0YXRlIGFyZ3VtZW50IHNob3VsZCBiZSBpbml0aWFsaXplZCBpZiB0aGUgaW5wdXQgaXMgYXQgdGhlCisgICAgICAgKiAgYmVnaW5uaW5nIGFuZCBjYXJyaWVkIGZyb20gYSBwcmV2aW91cyBjYWxsIGlmIGNvbnRpbnVpbmcKKyAgICAgICAqICBjb252ZXJzaW9uLiAgVGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMgYWJvdXQgaG93IEBhIHN0YXRlIGlzIHVzZWQuCisgICAgICAgKgorICAgICAgICogIFRoZSByZXN1bHQgcmV0dXJuZWQgaXMgYSBtZW1iZXIgb2YgY29kZWN2dF9iYXNlOjpyZXN1bHQuICBJZgorICAgICAgICogIGFsbCB0aGUgaW5wdXQgaXMgY29udmVydGVkLCByZXR1cm5zIGNvZGVjdnRfYmFzZTo6b2suICBJZiBubworICAgICAgICogIGNvbnZlcnNpb24gaXMgbmVjZXNzYXJ5LCByZXR1cm5zIGNvZGVjdnRfYmFzZTo6bm9jb252LiAgSWYKKyAgICAgICAqICB0aGUgaW5wdXQgZW5kcyBlYXJseSBvciB0aGVyZSBpcyBpbnN1ZmZpY2llbnQgc3BhY2UgaW4gdGhlCisgICAgICAgKiAgb3V0cHV0LCByZXR1cm5zIGNvZGVjdnRfYmFzZTo6cGFydGlhbC4gIE90aGVyd2lzZSB0aGUKKyAgICAgICAqICBjb252ZXJzaW9uIGZhaWxlZCBhbmQgY29kZWN2dF9iYXNlOjplcnJvciBpcyByZXR1cm5lZC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBzdGF0ZSAgUGVyc2lzdGVudCBjb252ZXJzaW9uIHN0YXRlIGRhdGEuCisgICAgICAgKiAgQHBhcmFtICBmcm9tICBTdGFydCBvZiBpbnB1dC4KKyAgICAgICAqICBAcGFyYW0gIGZyb21fZW5kICBFbmQgb2YgaW5wdXQuCisgICAgICAgKiAgQHBhcmFtICBmcm9tX25leHQgIFJldHVybnMgc3RhcnQgb2YgdW5jb252ZXJ0ZWQgZGF0YS4KKyAgICAgICAqICBAcGFyYW0gIHRvICBTdGFydCBvZiBvdXRwdXQgYnVmZmVyLgorICAgICAgICogIEBwYXJhbSAgdG9fZW5kICBFbmQgb2Ygb3V0cHV0IGJ1ZmZlci4KKyAgICAgICAqICBAcGFyYW0gIHRvX25leHQgIFJldHVybnMgc3RhcnQgb2YgdW51c2VkIG91dHB1dCBhcmVhLgorICAgICAgICogIEByZXR1cm4gIGNvZGVjdnRfYmFzZTo6cmVzdWx0LgorICAgICAgKi8KKyAgICAgIHJlc3VsdAorICAgICAgaW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKKwkgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCisJIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCisJIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAorICAgICAgeworCXJldHVybiB0aGlzLT5kb19pbihfX3N0YXRlLCBfX2Zyb20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LAorCQkJICAgX190bywgX190b19lbmQsIF9fdG9fbmV4dCk7CisgICAgICB9CisKKyAgICAgIGludAorICAgICAgZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCisgICAgICB7IHJldHVybiB0aGlzLT5kb19lbmNvZGluZygpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIGFsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpCisgICAgICB7IHJldHVybiB0aGlzLT5kb19hbHdheXNfbm9jb252KCk7IH0KKworICAgICAgaW50CisgICAgICBsZW5ndGgoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKKwkgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbGVuZ3RoKF9fc3RhdGUsIF9fZnJvbSwgX19lbmQsIF9fbWF4KTsgfQorCisgICAgICBpbnQKKyAgICAgIG1heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCisgICAgICB7IHJldHVybiB0aGlzLT5kb19tYXhfbGVuZ3RoKCk7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIGV4cGxpY2l0CisgICAgICBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZShzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CisKKyAgICAgIHZpcnR1YWwKKyAgICAgIH5fX2NvZGVjdnRfYWJzdHJhY3RfYmFzZSgpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnZlcnQgZnJvbSBpbnRlcm5hbCB0byBleHRlcm5hbCBjaGFyYWN0ZXIgc2V0LgorICAgICAgICoKKyAgICAgICAqICBDb252ZXJ0cyBpbnB1dCBzdHJpbmcgb2YgaW50ZXJuX3R5cGUgdG8gb3V0cHV0IHN0cmluZyBvZgorICAgICAgICogIGV4dGVybl90eXBlLiAgVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sgZm9yIGRlcml2ZWQgY2xhc3NlcyB0byBjaGFuZ2UKKyAgICAgICAqICB0aGUgdmFsdWUgcmV0dXJuZWQuICBAc2VlIG91dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIHJlc3VsdAorICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCisJICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKwkgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCisJICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOworCisgICAgICB2aXJ0dWFsIHJlc3VsdAorICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKKwkJIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsKKworICAgICAgdmlydHVhbCByZXN1bHQKKyAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCisJICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorCSAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAorCSAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOworCisgICAgICB2aXJ0dWFsIGludAorICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpID0gMDsKKworICAgICAgdmlydHVhbCBib29sCisgICAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKSA9IDA7CisKKyAgICAgIHZpcnR1YWwgaW50CisgICAgICBkb19sZW5ndGgoc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCisJCWNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdCA9IDA7CisKKyAgICAgIHZpcnR1YWwgaW50CisgICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKSA9IDA7CisgICAgfTsKKworCisKKyAgLyoqCisgICAqICBAYnJpZWYgIFByaW1hcnkgY2xhc3MgdGVtcGxhdGUgY29kZWN2dC4KKyAgICogIEBpbmdyb3VwIGxvY2FsZXMKKyAgICoKKyAgICogIE5COiBHZW5lcmljLCBtb3N0bHkgdXNlbGVzcyBpbXBsZW1lbnRhdGlvbi4KKyAgICoKKyAgKi8KKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KKyAgICBjbGFzcyBjb2RlY3Z0CisgICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlczoKKyAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQJcmVzdWx0OworICAgICAgdHlwZWRlZiBfSW50ZXJuVAkJCWludGVybl90eXBlOworICAgICAgdHlwZWRlZiBfRXh0ZXJuVAkJCWV4dGVybl90eXBlOworICAgICAgdHlwZWRlZiBfU3RhdGVUCQkJc3RhdGVfdHlwZTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgIF9fY19sb2NhbGUJCQlfTV9jX2xvY2FsZV9jb2RlY3Z0OworCisgICAgcHVibGljOgorICAgICAgc3RhdGljIGxvY2FsZTo6aWQJCQlpZDsKKworICAgICAgZXhwbGljaXQKKyAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApCisgICAgICA6IF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4gKF9fcmVmcykgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBjb2RlY3Z0KF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCk7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB2aXJ0dWFsCisgICAgICB+Y29kZWN2dCgpIHsgfQorCisgICAgICB2aXJ0dWFsIHJlc3VsdAorICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCisJICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKwkgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCisJICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CisKKyAgICAgIHZpcnR1YWwgcmVzdWx0CisgICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAorCQkgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CisKKyAgICAgIHZpcnR1YWwgcmVzdWx0CisgICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAorCSAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKwkgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKKwkgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OworCisgICAgICB2aXJ0dWFsIGludAorICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOworCisgICAgICB2aXJ0dWFsIGJvb2wKKyAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOworCisgICAgICB2aXJ0dWFsIGludAorICAgICAgZG9fbGVuZ3RoKHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAorCQljb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7CisKKyAgICAgIHZpcnR1YWwgaW50CisgICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KKyAgICBsb2NhbGU6OmlkIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPjo6aWQ7CisKKyAgLy8vIGNsYXNzIGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiBzcGVjaWFsaXphdGlvbi4KKyAgdGVtcGxhdGU8PgorICAgIGNsYXNzIGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PgorICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gVHlwZXM6CisgICAgICB0eXBlZGVmIGNoYXIJCQlpbnRlcm5fdHlwZTsKKyAgICAgIHR5cGVkZWYgY2hhcgkJCWV4dGVybl90eXBlOworICAgICAgdHlwZWRlZiBtYnN0YXRlX3QJCQlzdGF0ZV90eXBlOworCisgICAgcHJvdGVjdGVkOgorICAgICAgX19jX2xvY2FsZQkJCV9NX2NfbG9jYWxlX2NvZGVjdnQ7CisKKyAgICBwdWJsaWM6CisgICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKKworICAgICAgZXhwbGljaXQKKyAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApOworCisgICAgICBleHBsaWNpdAorICAgICAgY29kZWN2dChfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApOworCisgICAgcHJvdGVjdGVkOgorICAgICAgdmlydHVhbAorICAgICAgfmNvZGVjdnQoKTsKKworICAgICAgdmlydHVhbCByZXN1bHQKKyAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAorCSAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCisJICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAorCSAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OworCisgICAgICB2aXJ0dWFsIHJlc3VsdAorICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKKwkJIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OworCisgICAgICB2aXJ0dWFsIHJlc3VsdAorICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKKwkgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCisJICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCisJICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKKworICAgICAgdmlydHVhbCBpbnQKKyAgICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKKworICAgICAgdmlydHVhbCBib29sCisgICAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKKworICAgICAgdmlydHVhbCBpbnQKKyAgICAgIGRvX2xlbmd0aChzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKKwkJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OworCisgICAgICB2aXJ0dWFsIGludAorICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CisgIH07CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICAvLy8gY2xhc3MgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+IHNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTw+CisgICAgY2xhc3MgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+CisgICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlczoKKyAgICAgIHR5cGVkZWYgd2NoYXJfdAkJCWludGVybl90eXBlOworICAgICAgdHlwZWRlZiBjaGFyCQkJZXh0ZXJuX3R5cGU7CisgICAgICB0eXBlZGVmIG1ic3RhdGVfdAkJCXN0YXRlX3R5cGU7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfX2NfbG9jYWxlCQkJX01fY19sb2NhbGVfY29kZWN2dDsKKworICAgIHB1YmxpYzoKKyAgICAgIHN0YXRpYyBsb2NhbGU6OmlkCQkJaWQ7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKTsKKworICAgICAgZXhwbGljaXQKKyAgICAgIGNvZGVjdnQoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgIHZpcnR1YWwKKyAgICAgIH5jb2RlY3Z0KCk7CisKKyAgICAgIHZpcnR1YWwgcmVzdWx0CisgICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKKwkgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorCSAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKKwkgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKKworICAgICAgdmlydHVhbCByZXN1bHQKKyAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwKKwkJIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCisJCSBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CisKKyAgICAgIHZpcnR1YWwgcmVzdWx0CisgICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLAorCSAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsCisJICAgICBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorCSAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKKwkgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKKworICAgICAgdmlydHVhbAorICAgICAgaW50IGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKKworICAgICAgdmlydHVhbAorICAgICAgYm9vbCBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKKworICAgICAgdmlydHVhbAorICAgICAgaW50IGRvX2xlbmd0aChzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKKwkJICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdDsKKworICAgICAgdmlydHVhbCBpbnQKKyAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpOworICAgIH07CisjZW5kaWYgLy9fR0xJQkNYWF9VU0VfV0NIQVJfVAorCisgIC8vLyBjbGFzcyBjb2RlY3Z0X2J5bmFtZSBbMjIuMi4xLjZdLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CisgICAgY2xhc3MgY29kZWN2dF9ieW5hbWUgOiBwdWJsaWMgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIGV4cGxpY2l0CisgICAgICBjb2RlY3Z0X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQorICAgICAgOiBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4oX19yZWZzKQorICAgICAgeworCWlmIChfX2J1aWx0aW5fc3RyY21wKF9fcywgIkMiKSAhPSAwCisJICAgICYmIF9fYnVpbHRpbl9zdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorCSAgeworCSAgICB0aGlzLT5fU19kZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX2NvZGVjdnQpOworCSAgICB0aGlzLT5fU19jcmVhdGVfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY29kZWN2dCwgX19zKTsKKwkgIH0KKyAgICAgIH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIHZpcnR1YWwKKyAgICAgIH5jb2RlY3Z0X2J5bmFtZSgpIHsgfQorICAgIH07CisKKyAgLy8gSW5oaWJpdCBpbXBsaWNpdCBpbnN0YW50aWF0aW9ucyBmb3IgcmVxdWlyZWQgaW5zdGFudGlhdGlvbnMsCisgIC8vIHdoaWNoIGFyZSBkZWZpbmVkIHZpYSBleHBsaWNpdCBpbnN0YW50aWF0aW9ucyBlbHNld2hlcmUuCisgIC8vIE5COiBUaGlzIHN5bnRheCBpcyBhIEdOVSBleHRlbnNpb24uCisjaWYgX0dMSUJDWFhfRVhURVJOX1RFTVBMQVRFCisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2RlY3Z0X2J5bmFtZTxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+OworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGNvbnN0IGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiYKKyAgICB1c2VfZmFjZXQ8Y29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgYm9vbAorICAgIGhhc19mYWNldDxjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4gPihjb25zdCBsb2NhbGUmKTsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2RlY3Z0X2J5bmFtZTx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGNvbnN0IGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PiYKKyAgICB1c2VfZmFjZXQ8Y29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgYm9vbAorICAgIGhhc19mYWNldDxjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4gPihjb25zdCBsb2NhbGUmKTsKKyNlbmRpZgorI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmIC8vIF9DT0RFQ1ZUX0gKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9jb25jZXB0X2NoZWNrLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvY29uY2VwdF9jaGVjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNDVlMjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvY29uY2VwdF9jaGVjay5oCkBAIC0wLDAgKzEsODAgQEAKKy8vIENvbmNlcHQtY2hlY2tpbmcgY29udHJvbCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGNvbmNlcHRfY2hlY2suaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWZuZGVmIF9DT05DRVBUX0NIRUNLX0gKKyNkZWZpbmUgX0NPTkNFUFRfQ0hFQ0tfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisKKy8vIEFsbCBwbGFjZXMgaW4gbGlic3RkYysrLXYzIHdoZXJlIHRoZXNlIGFyZSB1c2VkLCBvciAvbWlnaHQvIGJlIHVzZWQsIG9yCisvLyBkb24ndCBuZWVkIHRvIGJlIHVzZWQsIG9yIHBlcmhhcHMgL3Nob3VsZC8gYmUgdXNlZCwgYXJlIGNvbW1lbnRlZCB3aXRoCisvLyAiY29uY2VwdCByZXF1aXJlbWVudHMiIChhbmQgbWF5YmUgc29tZSBtb3JlIHRleHQpLiAgU28gZ3JlcCBsaWtlIGNyYXp5CisvLyBpZiB5b3UncmUgbG9va2luZyBmb3IgYWRkaXRpb25hbCBwbGFjZXMgdG8gdXNlIHRoZXNlLgorCisvLyBDb25jZXB0LWNoZWNraW5nIGNvZGUgaXMgb2ZmIGJ5IGRlZmF1bHQgdW5sZXNzIHVzZXJzIHR1cm4gaXQgb24gdmlhCisvLyBjb25maWd1cmUgb3B0aW9ucyBvciBlZGl0aW5nIGMrK2NvbmZpZy5oLgorCisjaWZuZGVmIF9HTElCQ1hYX0NPTkNFUFRfQ0hFQ0tTCisKKyNkZWZpbmUgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKC4uLikKKyNkZWZpbmUgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzKF9hLF9iKQorI2RlZmluZSBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMyKF9hLF9iLF9jKQorI2RlZmluZSBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMzKF9hLF9iLF9jLF9kKQorI2RlZmluZSBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXM0KF9hLF9iLF9jLF9kLF9lKQorCisjZWxzZSAvLyB0aGUgY2hlY2tzIGFyZSBvbgorCisjaW5jbHVkZSA8Yml0cy9ib29zdF9jb25jZXB0X2NoZWNrLmg+CisKKy8vIE5vdGUgdGhhdCB0aGUgb2J2aW91cyBhbmQgZWxlZ2FudCBhcHByb2FjaCBvZgorLy8KKy8vI2RlZmluZSBnbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKEMpIGJvb3N0OjpmdW5jdGlvbl9yZXF1aXJlczwgYm9vc3Q6OkMgPigpCisvLworLy8gd29uJ3Qgd29yayBkdWUgdG8gY29uY2VwdCB0ZW1wbGF0ZXMgd2l0aCBtb3JlIHRoYW4gb25lIHBhcmFtZXRlciwgZS5nLiwKKy8vIEJpbmFyeVByZWRpY2F0ZUNvbmNlcHQuICBUaGUgcHJlcHJvY2Vzc29yIHRyaWVzIHRvIHNwbGl0IHRoaW5ncyB1cCBvbgorLy8gdGhlIGNvbW1hcyBpbiB0aGUgdGVtcGxhdGUgYXJndW1lbnQgbGlzdC4gIFdlIGNhbid0IHVzZSBhbiBpbm5lciBwYWlyIG9mCisvLyBwYXJlbnRoZXNpcyB0byBoaWRlIHRoZSBjb21tYXMsIGJlY2F1c2UgImJvb3N0OjooVGVtcDxGb28sQmFyPikiIGlzbid0CisvLyBhIHZhbGlkIGluc3RhbnRpYXRpb24gcGF0dGVybi4gIFRodXMsIHdlIHN0ZWFsIGEgZmVhdHVyZSBmcm9tIEM5OS4KKworI2RlZmluZSBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9fZ251X2N4eDo6X19mdW5jdGlvbl9yZXF1aXJlczwgX19nbnVfY3h4OjpfX1ZBX0FSR1NfXyA+KCk7CisjZGVmaW5lIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlcyhfYSxfQykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX0dMSUJDWFhfQ0xBU1NfUkVRVUlSRVMoX2EsIF9fZ251X2N4eCwgX0MpOworI2RlZmluZSBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMyKF9hLF9iLF9DKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9HTElCQ1hYX0NMQVNTX1JFUVVJUkVTMihfYSwgX2IsIF9fZ251X2N4eCwgX0MpOworI2RlZmluZSBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMzKF9hLF9iLF9jLF9DKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9HTElCQ1hYX0NMQVNTX1JFUVVJUkVTMyhfYSwgX2IsIF9jLCBfX2dudV9jeHgsIF9DKTsKKyNkZWZpbmUgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzNChfYSxfYixfYyxfZCxfQykgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfR0xJQkNYWF9DTEFTU19SRVFVSVJFUzQoX2EsIF9iLCBfYywgX2QsIF9fZ251X2N4eCwgX0MpOworCisjZW5kaWYgLy8gZW5hYmxlL2Rpc2FibGUKKworI2VuZGlmIC8vIF9HTElCQ1hYX0NPTkNFUFRfQ0hFQ0sKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9jcHBfdHlwZV90cmFpdHMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9jcHBfdHlwZV90cmFpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzVkOGU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2NwcF90eXBlX3RyYWl0cy5oCkBAIC0wLDAgKzEsNDQ3IEBACisvLyBUaGUgIC0qLSBDKysgLSotIHR5cGUgdHJhaXRzIGNsYXNzZXMgZm9yIGludGVybmFsIHVzZSBpbiBsaWJzdGRjKysKKworLy8gQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5LCAyMDEwCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgY3BwX3R5cGVfdHJhaXRzLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworLy8gV3JpdHRlbiBieSBHYWJyaWVsIERvcyBSZWlzIDxkb3NyZWlzQGNtbGEuZW5zLWNhY2hhbi5mcj4KKworI2lmbmRlZiBfQ1BQX1RZUEVfVFJBSVRTX0gKKyNkZWZpbmUgX0NQUF9UWVBFX1RSQUlUU19IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKworLy8KKy8vIFRoaXMgZmlsZSBwcm92aWRlcyBzb21lIGNvbXBpbGUtdGltZSBpbmZvcm1hdGlvbiBhYm91dCB2YXJpb3VzIHR5cGVzLgorLy8gVGhlc2UgcmVwcmVzZW50YXRpb25zIHdlcmUgZGVzaWduZWQsIG9uIHB1cnBvc2UsIHRvIGJlIGNvbnN0YW50LWV4cHJlc3Npb25zCisvLyBhbmQgbm90IHR5cGVzIGFzIGZvdW5kIGluIDxiaXRzL3R5cGVfdHJhaXRzLmg+LiAgSW4gcGFydGljdWxhciwgdGhleQorLy8gY2FuIGJlIHVzZWQgaW4gY29udHJvbCBzdHJ1Y3R1cmVzIGFuZCB0aGUgb3B0aW1pemVyIGhvcGVmdWxseSB3aWxsIGRvCisvLyB0aGUgb2J2aW91cyB0aGluZy4KKy8vCisvLyBXaHkgaW50ZWdyYWwgZXhwcmVzc2lvbnMsIGFuZCBub3QgZnVuY3Rpb25zIG5vciB0eXBlcz8KKy8vIEZpcnN0bHksIHRoZXNlIGNvbXBpbGUtdGltZSBlbnRpdGllcyBhcmUgdXNlZCBhcyB0ZW1wbGF0ZS1hcmd1bWVudHMKKy8vIHNvIGZ1bmN0aW9uIHJldHVybiB2YWx1ZXMgd29uJ3Qgd29yazogIFdlIG5lZWQgY29tcGlsZS10aW1lIGVudGl0aWVzLgorLy8gV2UncmUgbGVmdCB3aXRoIHR5cGVzIGFuZCBjb25zdGFudCAgaW50ZWdyYWwgZXhwcmVzc2lvbnMuCisvLyBTZWNvbmRseSwgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiBlYXNlIG9mIHVzZSwgdHlwZS1iYXNlZCBjb21waWxlLXRpbWUKKy8vIGluZm9ybWF0aW9uIGlzIC1ub3QtICp0aGF0KiBjb252ZW5pZW50LiAgT24gaGFzIHRvIHdyaXRlIGxvdHMgb2YKKy8vIG92ZXJsb2FkZWQgZnVuY3Rpb25zIGFuZCB0byBob3BlIHRoYXQgdGhlIGNvbXBpbGVyIHdpbGwgc2VsZWN0IHRoZSByaWdodAorLy8gb25lLiBBcyBhIG5ldCBlZmZlY3QsIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBpc24ndCB2ZXJ5IGNsZWFyIGF0IGZpcnN0CisvLyBnbGFuY2UuCisvLyBUaGlyZGx5LCBwYXJ0aWFsIG9yZGVyaW5nIGFuZCBvdmVybG9hZCByZXNvbHV0aW9uIChvZiBmdW5jdGlvbiB0ZW1wbGF0ZXMpCisvLyBpcyBoaWdobHkgY29zdGx5IGluIHRlcm1zIG9mIGNvbXBpbGVyLXJlc291cmNlLiAgSXQgaXMgYSBHb29kIFRoaW5nIHRvCisvLyBrZWVwIHRoZXNlIHJlc291cmNlIGNvbnN1bXB0aW9uIGFzIGxlYXN0IGFzIHBvc3NpYmxlLgorLy8KKy8vIFNlZSB2YWxhcnJheV9hcnJheS5oIGZvciBhIGNhc2UgdXNlLgorLy8KKy8vIC0tIEdhYnkgKGRvc3JlaXNAY21sYS5lbnMtY2FjaGFuLmZyKSAyMDAwLTAzLTA2LgorLy8KKy8vIFVwZGF0ZSAyMDA1OiB0eXBlcyBhcmUgYWxzbyBwcm92aWRlZCBhbmQgPGJpdHMvdHlwZV90cmFpdHMuaD4gaGFzIGJlZW4KKy8vIHJlbW92ZWQuCisvLworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9uIGhhY2ssIHNob3VsZCByZWFsbHkgaW5jbHVkZSB0aGlzIGZyb20gc29tZXdoZXJlLgorX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CisgICAgY2xhc3MgX19ub3JtYWxfaXRlcmF0b3I7CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICBzdHJ1Y3QgX190cnVlX3R5cGUgeyB9OworICBzdHJ1Y3QgX19mYWxzZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTxib29sPgorICAgIHN0cnVjdCBfX3RydXRoX3R5cGUKKyAgICB7IHR5cGVkZWYgX19mYWxzZV90eXBlIF9fdHlwZTsgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fdHJ1dGhfdHlwZTx0cnVlPgorICAgIHsgdHlwZWRlZiBfX3RydWVfdHlwZSBfX3R5cGU7IH07CisKKyAgLy8gTi5CLiBUaGUgY29udmVyc2lvbnMgdG8gYm9vbCBhcmUgbmVlZGVkIGR1ZSB0byB0aGUgaXNzdWUKKyAgLy8gZXhwbGFpbmVkIGluIGMrKy8xOTQwNC4KKyAgdGVtcGxhdGU8Y2xhc3MgX1NwLCBjbGFzcyBfVHA+CisgICAgc3RydWN0IF9fdHJhaXRvcgorICAgIHsKKyAgICAgIGVudW0geyBfX3ZhbHVlID0gYm9vbChfU3A6Ol9fdmFsdWUpIHx8IGJvb2woX1RwOjpfX3ZhbHVlKSB9OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3RydXRoX3R5cGU8X192YWx1ZT46Ol9fdHlwZSBfX3R5cGU7CisgICAgfTsKKworICAvLyBDb21wYXJlIGZvciBlcXVhbGl0eSBvZiB0eXBlcy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lPgorICAgIHN0cnVjdCBfX2FyZV9zYW1lCisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAwIH07CisgICAgICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfX3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fYXJlX3NhbWU8X1RwLCBfVHA+CisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CisgICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKKyAgICB9OworCisgIC8vIEhvbGRzIGlmIHRoZSB0ZW1wbGF0ZS1hcmd1bWVudCBpcyBhIHZvaWQgdHlwZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX3ZvaWQKKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDAgfTsKKyAgICAgIHR5cGVkZWYgX19mYWxzZV90eXBlIF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19pc192b2lkPHZvaWQ+CisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CisgICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKKyAgICB9OworCisgIC8vCisgIC8vIEludGVnZXIgdHlwZXMKKyAgLy8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX2ludGVnZXIKKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDAgfTsKKyAgICAgIHR5cGVkZWYgX19mYWxzZV90eXBlIF9fdHlwZTsKKyAgICB9OworCisgIC8vIFRoaXJ0ZWVuIHNwZWNpYWxpemF0aW9ucyAoeWVzIHRoZXJlIGFyZSBlbGV2ZW4gc3RhbmRhcmQgaW50ZWdlcgorICAvLyB0eXBlczsgPGVtPmxvbmcgbG9uZzwvZW0+IGFuZCA8ZW0+dW5zaWduZWQgbG9uZyBsb25nPC9lbT4gYXJlCisgIC8vIHN1cHBvcnRlZCBhcyBleHRlbnNpb25zKQorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9faXNfaW50ZWdlcjxib29sPgorICAgIHsKKyAgICAgIGVudW0geyBfX3ZhbHVlID0gMSB9OworICAgICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfX3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9faXNfaW50ZWdlcjxjaGFyPgorICAgIHsKKyAgICAgIGVudW0geyBfX3ZhbHVlID0gMSB9OworICAgICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfX3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9faXNfaW50ZWdlcjxzaWduZWQgY2hhcj4KKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKKyAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4KKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKKyAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOworICAgIH07CisKKyMgaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8d2NoYXJfdD4KKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKKyAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOworICAgIH07CisjIGVuZGlmCisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9faXNfaW50ZWdlcjxjaGFyMTZfdD4KKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKKyAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8Y2hhcjMyX3Q+CisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CisgICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKKyAgICB9OworI2VuZGlmCisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8c2hvcnQ+CisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CisgICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19pc19pbnRlZ2VyPHVuc2lnbmVkIHNob3J0PgorICAgIHsKKyAgICAgIGVudW0geyBfX3ZhbHVlID0gMSB9OworICAgICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfX3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9faXNfaW50ZWdlcjxpbnQ+CisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CisgICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19pc19pbnRlZ2VyPHVuc2lnbmVkIGludD4KKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKKyAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8bG9uZz4KKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKKyAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4KKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKKyAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8bG9uZyBsb25nPgorICAgIHsKKyAgICAgIGVudW0geyBfX3ZhbHVlID0gMSB9OworICAgICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfX3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9faXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nIGxvbmc+CisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CisgICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKKyAgICB9OworCisgIC8vCisgIC8vIEZsb2F0aW5nIHBvaW50IHR5cGVzCisgIC8vCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19mbG9hdGluZworICAgIHsKKyAgICAgIGVudW0geyBfX3ZhbHVlID0gMCB9OworICAgICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgLy8gdGhyZWUgc3BlY2lhbGl6YXRpb25zIChmbG9hdCwgZG91YmxlIGFuZCAnbG9uZyBkb3VibGUnKQorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9faXNfZmxvYXRpbmc8ZmxvYXQ+CisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CisgICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19pc19mbG9hdGluZzxkb3VibGU+CisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CisgICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19pc19mbG9hdGluZzxsb25nIGRvdWJsZT4KKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKKyAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgLy8KKyAgLy8gUG9pbnRlciB0eXBlcworICAvLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faXNfcG9pbnRlcgorICAgIHsKKyAgICAgIGVudW0geyBfX3ZhbHVlID0gMCB9OworICAgICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX3BvaW50ZXI8X1RwKj4KKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKKyAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgLy8KKyAgLy8gTm9ybWFsIGl0ZXJhdG9yIHR5cGUKKyAgLy8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX25vcm1hbF9pdGVyYXRvcgorICAgIHsKKyAgICAgIGVudW0geyBfX3ZhbHVlID0gMCB9OworICAgICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgorICAgIHN0cnVjdCBfX2lzX25vcm1hbF9pdGVyYXRvcjwgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsCisJCQkJCQkJICAgICAgX0NvbnRhaW5lcj4gPgorICAgIHsKKyAgICAgIGVudW0geyBfX3ZhbHVlID0gMSB9OworICAgICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfX3R5cGU7CisgICAgfTsKKworICAvLworICAvLyBBbiBhcml0aG1ldGljIHR5cGUgaXMgYW4gaW50ZWdlciB0eXBlIG9yIGEgZmxvYXRpbmcgcG9pbnQgdHlwZQorICAvLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faXNfYXJpdGhtZXRpYworICAgIDogcHVibGljIF9fdHJhaXRvcjxfX2lzX2ludGVnZXI8X1RwPiwgX19pc19mbG9hdGluZzxfVHA+ID4KKyAgICB7IH07CisKKyAgLy8KKyAgLy8gQSBmdW5kYW1lbnRhbCB0eXBlIGlzIGB2b2lkJyBvciBhbmQgYXJpdGhtZXRpYyB0eXBlCisgIC8vCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19mdW5kYW1lbnRhbAorICAgIDogcHVibGljIF9fdHJhaXRvcjxfX2lzX3ZvaWQ8X1RwPiwgX19pc19hcml0aG1ldGljPF9UcD4gPgorICAgIHsgfTsKKworICAvLworICAvLyBBIHNjYWxhciB0eXBlIGlzIGFuIGFyaXRobWV0aWMgdHlwZSBvciBhIHBvaW50ZXIgdHlwZQorICAvLyAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX3NjYWxhcgorICAgIDogcHVibGljIF9fdHJhaXRvcjxfX2lzX2FyaXRobWV0aWM8X1RwPiwgX19pc19wb2ludGVyPF9UcD4gPgorICAgIHsgfTsKKworICAvLworICAvLyBGb3IgdXNlIGluIHN0ZDo6Y29weSBhbmQgc3RkOjpmaW5kIG92ZXJsb2FkcyBmb3Igc3RyZWFtYnVmIGl0ZXJhdG9ycy4KKyAgLy8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX2NoYXIKKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDAgfTsKKyAgICAgIHR5cGVkZWYgX19mYWxzZV90eXBlIF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19pc19jaGFyPGNoYXI+CisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CisgICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKKyAgICB9OworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2NoYXI8d2NoYXJfdD4KKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKKyAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOworICAgIH07CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faXNfYnl0ZQorICAgIHsKKyAgICAgIGVudW0geyBfX3ZhbHVlID0gMCB9OworICAgICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2J5dGU8Y2hhcj4KKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKKyAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2J5dGU8c2lnbmVkIGNoYXI+CisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CisgICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19pc19ieXRlPHVuc2lnbmVkIGNoYXI+CisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CisgICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKKyAgICB9OworCisgIC8vCisgIC8vIE1vdmUgaXRlcmF0b3IgdHlwZQorICAvLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faXNfbW92ZV9pdGVyYXRvcgorICAgIHsKKyAgICAgIGVudW0geyBfX3ZhbHVlID0gMCB9OworICAgICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX190eXBlOworICAgIH07CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CisgICAgY2xhc3MgbW92ZV9pdGVyYXRvcjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CisgICAgc3RydWN0IF9faXNfbW92ZV9pdGVyYXRvcjwgbW92ZV9pdGVyYXRvcjxfSXRlcmF0b3I+ID4KKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKKyAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOworICAgIH07CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgX19pc19pdGVyYXRvcl9oZWxwZXIKKyAgICB7CisgICAgICB0eXBlZGVmIGNoYXIgX19vbmU7CisgICAgICB0eXBlZGVmIHN0cnVjdCB7IGNoYXIgX19hcnJbMl07IH0gX190d287CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICAgICAgc3RydWN0IF9XcmFwX3R5cGUKKwl7IH07CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICAgICAgc3RhdGljIF9fb25lIF9fdGVzdChfV3JhcF90eXBlPHR5cGVuYW1lIF9VcDo6aXRlcmF0b3JfY2F0ZWdvcnk+Kik7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICAgICAgc3RhdGljIF9fdHdvIF9fdGVzdCguLi4pOworCisgICAgcHVibGljOgorICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZSA9IChzaXplb2YoX190ZXN0PF9UcD4oMCkpID09IDEKKwkJCQkgICB8fCBfX2lzX3BvaW50ZXI8X1RwPjo6X192YWx1ZSk7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faXNfaXRlcmF0b3IKKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IF9faXNfaXRlcmF0b3JfaGVscGVyPF9UcD46Ol9fdmFsdWUgfTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190cnV0aF90eXBlPF9fdmFsdWU+OjpfX3R5cGUgX190eXBlOworICAgIH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmIC8vX0NQUF9UWVBFX1RSQUlUU19ICmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvZGVxdWUudGNjIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2RlcXVlLnRjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGUwNjdjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2RlcXVlLnRjYwpAQCAtMCwwICsxLDk4OSBAQAorLy8gRGVxdWUgaW1wbGVtZW50YXRpb24gKG91dCBvZiBsaW5lKSAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk3CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgZGVxdWUudGNjCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKyNpZm5kZWYgX0RFUVVFX1RDQworI2RlZmluZSBfREVRVUVfVENDIDEKKworX0dMSUJDWFhfQkVHSU5fTkVTVEVEX05BTUVTUEFDRShzdGQsIF9HTElCQ1hYX1NURF9EKQorCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBkZXF1ZTxfVHAsIF9BbGxvYz4mCisgICAgZGVxdWU8X1RwLCBfQWxsb2M+OjoKKyAgICBvcGVyYXRvcj0oY29uc3QgZGVxdWUmIF9feCkKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBzaXplKCk7CisgICAgICBpZiAoJl9feCAhPSB0aGlzKQorCXsKKwkgIGlmIChfX2xlbiA+PSBfX3guc2l6ZSgpKQorCSAgICBfTV9lcmFzZV9hdF9lbmQoc3RkOjpjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksCisJCQkJICAgICAgdGhpcy0+X01faW1wbC5fTV9zdGFydCkpOworCSAgZWxzZQorCSAgICB7CisJICAgICAgY29uc3RfaXRlcmF0b3IgX19taWQgPSBfX3guYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX2xlbik7CisJICAgICAgc3RkOjpjb3B5KF9feC5iZWdpbigpLCBfX21pZCwgdGhpcy0+X01faW1wbC5fTV9zdGFydCk7CisJICAgICAgaW5zZXJ0KHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLCBfX21pZCwgX194LmVuZCgpKTsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgIHZvaWQKKyAgICAgIGRlcXVlPF9UcCwgX0FsbG9jPjo6CisgICAgICBlbXBsYWNlX2Zyb250KF9BcmdzJiYuLi4gX19hcmdzKQorICAgICAgeworCWlmICh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX2N1ciAhPSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX2ZpcnN0KQorCSAgeworCSAgICB0aGlzLT5fTV9pbXBsLmNvbnN0cnVjdCh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX2N1ciAtIDEsCisJCQkJICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJICAgIC0tdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9jdXI7CisJICB9CisJZWxzZQorCSAgX01fcHVzaF9mcm9udF9hdXgoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgIHZvaWQKKyAgICAgIGRlcXVlPF9UcCwgX0FsbG9jPjo6CisgICAgICBlbXBsYWNlX2JhY2soX0FyZ3MmJi4uLiBfX2FyZ3MpCisgICAgICB7CisJaWYgKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX2N1cgorCSAgICAhPSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9sYXN0IC0gMSkKKwkgIHsKKwkgICAgdGhpcy0+X01faW1wbC5jb25zdHJ1Y3QodGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fY3VyLAorCQkJCSAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCSAgICArK3RoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX2N1cjsKKwkgIH0KKwllbHNlCisJICBfTV9wdXNoX2JhY2tfYXV4KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisgICAgICB9CisjZW5kaWYKKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgZGVxdWU8X1RwLCBfQWxsb2M+OjppdGVyYXRvcgorICAgIGRlcXVlPF9UcCwgX0FsbG9jPjo6CisgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICB7CisgICAgICBpZiAoX19wb3NpdGlvbi5fTV9jdXIgPT0gdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9jdXIpCisJeworCSAgcHVzaF9mcm9udChfX3gpOworCSAgcmV0dXJuIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQ7CisJfQorICAgICAgZWxzZSBpZiAoX19wb3NpdGlvbi5fTV9jdXIgPT0gdGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fY3VyKQorCXsKKwkgIHB1c2hfYmFjayhfX3gpOworCSAgaXRlcmF0b3IgX190bXAgPSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaDsKKwkgIC0tX190bXA7CisJICByZXR1cm4gX190bXA7CisJfQorICAgICAgZWxzZQorICAgICAgICByZXR1cm4gX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBfX3gpOworICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgdHlwZW5hbWUgZGVxdWU8X1RwLCBfQWxsb2M+OjppdGVyYXRvcgorICAgICAgZGVxdWU8X1RwLCBfQWxsb2M+OjoKKyAgICAgIGVtcGxhY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisgICAgICB7CisJaWYgKF9fcG9zaXRpb24uX01fY3VyID09IHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fY3VyKQorCSAgeworCSAgICBwdXNoX2Zyb250KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJICAgIHJldHVybiB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0OworCSAgfQorCWVsc2UgaWYgKF9fcG9zaXRpb24uX01fY3VyID09IHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX2N1cikKKwkgIHsKKwkgICAgcHVzaF9iYWNrKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJICAgIGl0ZXJhdG9yIF9fdG1wID0gdGhpcy0+X01faW1wbC5fTV9maW5pc2g7CisJICAgIC0tX190bXA7CisJICAgIHJldHVybiBfX3RtcDsKKwkgIH0KKwllbHNlCisJICByZXR1cm4gX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworICAgICAgfQorI2VuZGlmCisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHR5cGVuYW1lIGRlcXVlPF9UcCwgX0FsbG9jPjo6aXRlcmF0b3IKKyAgICBkZXF1ZTxfVHAsIF9BbGxvYz46OgorICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgeworICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19wb3NpdGlvbjsKKyAgICAgICsrX19uZXh0OworICAgICAgY29uc3QgZGlmZmVyZW5jZV90eXBlIF9faW5kZXggPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKKyAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9faW5kZXgpIDwgKHNpemUoKSA+PiAxKSkKKwl7CisJICBpZiAoX19wb3NpdGlvbiAhPSBiZWdpbigpKQorCSAgICBfR0xJQkNYWF9NT1ZFX0JBQ0tXQVJEMyhiZWdpbigpLCBfX3Bvc2l0aW9uLCBfX25leHQpOworCSAgcG9wX2Zyb250KCk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGlmIChfX25leHQgIT0gZW5kKCkpCisJICAgIF9HTElCQ1hYX01PVkUzKF9fbmV4dCwgZW5kKCksIF9fcG9zaXRpb24pOworCSAgcG9wX2JhY2soKTsKKwl9CisgICAgICByZXR1cm4gYmVnaW4oKSArIF9faW5kZXg7CisgICAgfQorCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBkZXF1ZTxfVHAsIF9BbGxvYz46Oml0ZXJhdG9yCisgICAgZGVxdWU8X1RwLCBfQWxsb2M+OjoKKyAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgaWYgKF9fZmlyc3QgPT0gYmVnaW4oKSAmJiBfX2xhc3QgPT0gZW5kKCkpCisJeworCSAgY2xlYXIoKTsKKwkgIHJldHVybiBlbmQoKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgY29uc3QgZGlmZmVyZW5jZV90eXBlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CisJICBjb25zdCBkaWZmZXJlbmNlX3R5cGUgX19lbGVtc19iZWZvcmUgPSBfX2ZpcnN0IC0gYmVnaW4oKTsKKwkgIGlmIChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fZWxlbXNfYmVmb3JlKSA8PSAoc2l6ZSgpIC0gX19uKSAvIDIpCisJICAgIHsKKwkgICAgICBpZiAoX19maXJzdCAhPSBiZWdpbigpKQorCQlfR0xJQkNYWF9NT1ZFX0JBQ0tXQVJEMyhiZWdpbigpLCBfX2ZpcnN0LCBfX2xhc3QpOworCSAgICAgIF9NX2VyYXNlX2F0X2JlZ2luKGJlZ2luKCkgKyBfX24pOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBpZiAoX19sYXN0ICE9IGVuZCgpKQorCQlfR0xJQkNYWF9NT1ZFMyhfX2xhc3QsIGVuZCgpLCBfX2ZpcnN0KTsKKwkgICAgICBfTV9lcmFzZV9hdF9lbmQoZW5kKCkgLSBfX24pOworCSAgICB9CisJICByZXR1cm4gYmVnaW4oKSArIF9fZWxlbXNfYmVmb3JlOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0FsbG9jPgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIGRlcXVlPF9UcCwgX0FsbG9jPjo6CisgICAgICBfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJICAgIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnKQorICAgICAgeworICAgICAgICBpdGVyYXRvciBfX2N1ciA9IGJlZ2luKCk7CisgICAgICAgIGZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2ZpcnN0KQorICAgICAgICAgICpfX2N1ciA9ICpfX2ZpcnN0OworICAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCisgICAgICAgICAgX01fZXJhc2VfYXRfZW5kKF9fY3VyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIGRlcXVlPF9UcCwgX0FsbG9jPjo6CisgICAgX01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICB7CisgICAgICBpZiAoX19wb3MuX01fY3VyID09IHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fY3VyKQorCXsKKwkgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9mcm9udChfX24pOworCSAgX190cnkKKwkgICAgeworCSAgICAgIHN0ZDo6X191bmluaXRpYWxpemVkX2ZpbGxfYShfX25ld19zdGFydCwgdGhpcy0+X01faW1wbC5fTV9zdGFydCwKKwkJCQkJICBfX3gsIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJICAgICAgdGhpcy0+X01faW1wbC5fTV9zdGFydCA9IF9fbmV3X3N0YXJ0OworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeworCSAgICAgIF9NX2Rlc3Ryb3lfbm9kZXMoX19uZXdfc3RhcnQuX01fbm9kZSwKKwkJCSAgICAgICB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX25vZGUpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJfQorICAgICAgZWxzZSBpZiAoX19wb3MuX01fY3VyID09IHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX2N1cikKKwl7CisJICBpdGVyYXRvciBfX25ld19maW5pc2ggPSBfTV9yZXNlcnZlX2VsZW1lbnRzX2F0X2JhY2soX19uKTsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9maWxsX2EodGhpcy0+X01faW1wbC5fTV9maW5pc2gsCisJCQkJCSAgX19uZXdfZmluaXNoLCBfX3gsCisJCQkJCSAgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwkgICAgICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsKKwkgICAgICBfTV9kZXN0cm95X25vZGVzKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX25vZGUgKyAxLAorCQkJICAgICAgIF9fbmV3X2ZpbmlzaC5fTV9ub2RlICsgMSk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwl9CisgICAgICBlbHNlCisgICAgICAgIF9NX2luc2VydF9hdXgoX19wb3MsIF9fbiwgX194KTsKKyAgICB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBkZXF1ZTxfVHAsIF9BbGxvYz46OgorICAgIF9NX2ZpbGxfaW5pdGlhbGl6ZShjb25zdCB2YWx1ZV90eXBlJiBfX3ZhbHVlKQorICAgIHsKKyAgICAgIF9NYXBfcG9pbnRlciBfX2N1cjsKKyAgICAgIF9fdHJ5CisgICAgICAgIHsKKyAgICAgICAgICBmb3IgKF9fY3VyID0gdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9ub2RlOworCSAgICAgICBfX2N1ciA8IHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX25vZGU7CisJICAgICAgICsrX19jdXIpCisgICAgICAgICAgICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9maWxsX2EoKl9fY3VyLCAqX19jdXIgKyBfU19idWZmZXJfc2l6ZSgpLAorCQkJCQlfX3ZhbHVlLCBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworICAgICAgICAgIHN0ZDo6X191bmluaXRpYWxpemVkX2ZpbGxfYSh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9maXJzdCwKKwkJCQkgICAgICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9jdXIsCisJCQkJICAgICAgX192YWx1ZSwgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKyAgICAgICAgfQorICAgICAgX19jYXRjaCguLi4pCisgICAgICAgIHsKKyAgICAgICAgICBzdGQ6Ol9EZXN0cm95KHRoaXMtPl9NX2ltcGwuX01fc3RhcnQsIGl0ZXJhdG9yKCpfX2N1ciwgX19jdXIpLAorCQkJX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKyAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAgICAgICAgfQorICAgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgZGVxdWU8X1RwLCBfQWxsb2M+OjoKKyAgICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZykKKyAgICAgIHsKKyAgICAgICAgdGhpcy0+X01faW5pdGlhbGl6ZV9tYXAoMCk7CisgICAgICAgIF9fdHJ5CisgICAgICAgICAgeworICAgICAgICAgICAgZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCisgICAgICAgICAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CisgICAgICAgICAgfQorICAgICAgICBfX2NhdGNoKC4uLikKKyAgICAgICAgICB7CisgICAgICAgICAgICBjbGVhcigpOworICAgICAgICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgICAgICAgICAgfQorICAgICAgfQorCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIGRlcXVlPF9UcCwgX0FsbG9jPjo6CisgICAgICBfTV9yYW5nZV9pbml0aWFsaXplKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcpCisgICAgICB7CisgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX24gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICAgIHRoaXMtPl9NX2luaXRpYWxpemVfbWFwKF9fbik7CisKKyAgICAgICAgX01hcF9wb2ludGVyIF9fY3VyX25vZGU7CisgICAgICAgIF9fdHJ5CisgICAgICAgICAgeworICAgICAgICAgICAgZm9yIChfX2N1cl9ub2RlID0gdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9ub2RlOworICAgICAgICAgICAgICAgICBfX2N1cl9ub2RlIDwgdGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fbm9kZTsKKyAgICAgICAgICAgICAgICAgKytfX2N1cl9ub2RlKQorCSAgICAgIHsKKwkJX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7CisJCXN0ZDo6YWR2YW5jZShfX21pZCwgX1NfYnVmZmVyX3NpemUoKSk7CisJCXN0ZDo6X191bmluaXRpYWxpemVkX2NvcHlfYShfX2ZpcnN0LCBfX21pZCwgKl9fY3VyX25vZGUsCisJCQkJCSAgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCQlfX2ZpcnN0ID0gX19taWQ7CisJICAgICAgfQorICAgICAgICAgICAgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfY29weV9hKF9fZmlyc3QsIF9fbGFzdCwKKwkJCQkJdGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fZmlyc3QsCisJCQkJCV9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisgICAgICAgICAgfQorICAgICAgICBfX2NhdGNoKC4uLikKKyAgICAgICAgICB7CisgICAgICAgICAgICBzdGQ6Ol9EZXN0cm95KHRoaXMtPl9NX2ltcGwuX01fc3RhcnQsCisJCQkgIGl0ZXJhdG9yKCpfX2N1cl9ub2RlLCBfX2N1cl9ub2RlKSwKKwkJCSAgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKyAgICAgICAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworICAgICAgICAgIH0KKyAgICAgIH0KKworICAvLyBDYWxsZWQgb25seSBpZiBfTV9pbXBsLl9NX2ZpbmlzaC5fTV9jdXIgPT0gX01faW1wbC5fTV9maW5pc2guX01fbGFzdCAtIDEuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICB2b2lkCisgICAgICBkZXF1ZTxfVHAsIF9BbGxvYz46OgorICAgICAgX01fcHVzaF9iYWNrX2F1eChfQXJncyYmLi4uIF9fYXJncykKKyNlbHNlCisgICAgICB2b2lkCisgICAgICBkZXF1ZTxfVHAsIF9BbGxvYz46OgorICAgICAgX01fcHVzaF9iYWNrX2F1eChjb25zdCB2YWx1ZV90eXBlJiBfX3QpCisjZW5kaWYKKyAgICAgIHsKKwlfTV9yZXNlcnZlX21hcF9hdF9iYWNrKCk7CisJKih0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9ub2RlICsgMSkgPSB0aGlzLT5fTV9hbGxvY2F0ZV9ub2RlKCk7CisJX190cnkKKwkgIHsKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworCSAgICB0aGlzLT5fTV9pbXBsLmNvbnN0cnVjdCh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9jdXIsCisJCQkJICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisjZWxzZQorCSAgICB0aGlzLT5fTV9pbXBsLmNvbnN0cnVjdCh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9jdXIsIF9fdCk7CisjZW5kaWYKKwkgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fc2V0X25vZGUodGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fbm9kZQorCQkJCQkJKyAxKTsKKwkgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fY3VyID0gdGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fZmlyc3Q7CisJICB9CisJX19jYXRjaCguLi4pCisJICB7CisJICAgIF9NX2RlYWxsb2NhdGVfbm9kZSgqKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX25vZGUgKyAxKSk7CisJICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgfQorICAgICAgfQorCisgIC8vIENhbGxlZCBvbmx5IGlmIF9NX2ltcGwuX01fc3RhcnQuX01fY3VyID09IF9NX2ltcGwuX01fc3RhcnQuX01fZmlyc3QuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICB2b2lkCisgICAgICBkZXF1ZTxfVHAsIF9BbGxvYz46OgorICAgICAgX01fcHVzaF9mcm9udF9hdXgoX0FyZ3MmJi4uLiBfX2FyZ3MpCisjZWxzZQorICAgICAgdm9pZAorICAgICAgZGVxdWU8X1RwLCBfQWxsb2M+OjoKKyAgICAgIF9NX3B1c2hfZnJvbnRfYXV4KGNvbnN0IHZhbHVlX3R5cGUmIF9fdCkKKyNlbmRpZgorICAgICAgeworCV9NX3Jlc2VydmVfbWFwX2F0X2Zyb250KCk7CisJKih0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX25vZGUgLSAxKSA9IHRoaXMtPl9NX2FsbG9jYXRlX25vZGUoKTsKKwlfX3RyeQorCSAgeworCSAgICB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX3NldF9ub2RlKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fbm9kZQorCQkJCQkgICAgICAgLSAxKTsKKwkgICAgdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9jdXIgPSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX2xhc3QgLSAxOworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisJICAgIHRoaXMtPl9NX2ltcGwuY29uc3RydWN0KHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fY3VyLAorCQkJCSAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworI2Vsc2UKKwkgICAgdGhpcy0+X01faW1wbC5jb25zdHJ1Y3QodGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9jdXIsIF9fdCk7CisjZW5kaWYKKwkgIH0KKwlfX2NhdGNoKC4uLikKKwkgIHsKKwkgICAgKyt0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0OworCSAgICBfTV9kZWFsbG9jYXRlX25vZGUoKih0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX25vZGUgLSAxKSk7CisJICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgfQorICAgICAgfQorCisgIC8vIENhbGxlZCBvbmx5IGlmIF9NX2ltcGwuX01fZmluaXNoLl9NX2N1ciA9PSBfTV9pbXBsLl9NX2ZpbmlzaC5fTV9maXJzdC4KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQgZGVxdWU8X1RwLCBfQWxsb2M+OjoKKyAgICBfTV9wb3BfYmFja19hdXgoKQorICAgIHsKKyAgICAgIF9NX2RlYWxsb2NhdGVfbm9kZSh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9maXJzdCk7CisgICAgICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9zZXRfbm9kZSh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9ub2RlIC0gMSk7CisgICAgICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9jdXIgPSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9sYXN0IC0gMTsKKyAgICAgIHRoaXMtPl9NX2ltcGwuZGVzdHJveSh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9jdXIpOworICAgIH0KKworICAvLyBDYWxsZWQgb25seSBpZiBfTV9pbXBsLl9NX3N0YXJ0Ll9NX2N1ciA9PSBfTV9pbXBsLl9NX3N0YXJ0Ll9NX2xhc3QgLSAxLgorICAvLyBOb3RlIHRoYXQgaWYgdGhlIGRlcXVlIGhhcyBhdCBsZWFzdCBvbmUgZWxlbWVudCAoYSBwcmVjb25kaXRpb24gZm9yIHRoaXMKKyAgLy8gbWVtYmVyIGZ1bmN0aW9uKSwgYW5kIGlmCisgIC8vICAgX01faW1wbC5fTV9zdGFydC5fTV9jdXIgPT0gX01faW1wbC5fTV9zdGFydC5fTV9sYXN0LAorICAvLyB0aGVuIHRoZSBkZXF1ZSBtdXN0IGhhdmUgYXQgbGVhc3QgdHdvIG5vZGVzLgorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZCBkZXF1ZTxfVHAsIF9BbGxvYz46OgorICAgIF9NX3BvcF9mcm9udF9hdXgoKQorICAgIHsKKyAgICAgIHRoaXMtPl9NX2ltcGwuZGVzdHJveSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX2N1cik7CisgICAgICBfTV9kZWFsbG9jYXRlX25vZGUodGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9maXJzdCk7CisgICAgICB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX3NldF9ub2RlKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fbm9kZSArIDEpOworICAgICAgdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9jdXIgPSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX2ZpcnN0OworICAgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgZGVxdWU8X1RwLCBfQWxsb2M+OjoKKyAgICAgIF9NX3JhbmdlX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppbnB1dF9pdGVyYXRvcl90YWcpCisgICAgICB7IHN0ZDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIHN0ZDo6aW5zZXJ0ZXIoKnRoaXMsIF9fcG9zKSk7IH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgICB2b2lkCisgICAgICBkZXF1ZTxfVHAsIF9BbGxvYz46OgorICAgICAgX01fcmFuZ2VfaW5zZXJ0X2F1eChpdGVyYXRvciBfX3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZykKKyAgICAgIHsKKyAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbiA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKKyAgICAgICAgaWYgKF9fcG9zLl9NX2N1ciA9PSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX2N1cikKKwkgIHsKKwkgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQgPSBfTV9yZXNlcnZlX2VsZW1lbnRzX2F0X2Zyb250KF9fbik7CisJICAgIF9fdHJ5CisJICAgICAgeworCQlzdGQ6Ol9fdW5pbml0aWFsaXplZF9jb3B5X2EoX19maXJzdCwgX19sYXN0LCBfX25ld19zdGFydCwKKwkJCQkJICAgIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJCXRoaXMtPl9NX2ltcGwuX01fc3RhcnQgPSBfX25ld19zdGFydDsKKwkgICAgICB9CisJICAgIF9fY2F0Y2goLi4uKQorCSAgICAgIHsKKwkJX01fZGVzdHJveV9ub2RlcyhfX25ld19zdGFydC5fTV9ub2RlLAorCQkJCSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX25vZGUpOworCQlfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgICB9CisJICB9CisgICAgICAgIGVsc2UgaWYgKF9fcG9zLl9NX2N1ciA9PSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9jdXIpCisJICB7CisJICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfYmFjayhfX24pOworCSAgICBfX3RyeQorCSAgICAgIHsKKwkJc3RkOjpfX3VuaW5pdGlhbGl6ZWRfY29weV9hKF9fZmlyc3QsIF9fbGFzdCwKKwkJCQkJICAgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkJCQkgICAgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwkJdGhpcy0+X01faW1wbC5fTV9maW5pc2ggPSBfX25ld19maW5pc2g7CisJICAgICAgfQorCSAgICBfX2NhdGNoKC4uLikKKwkgICAgICB7CisJCV9NX2Rlc3Ryb3lfbm9kZXModGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fbm9kZSArIDEsCisJCQkJIF9fbmV3X2ZpbmlzaC5fTV9ub2RlICsgMSk7CisJCV9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICAgIH0KKwkgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIF9NX2luc2VydF9hdXgoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgdHlwZW5hbWUgZGVxdWU8X1RwLCBfQWxsb2M+OjppdGVyYXRvcgorICAgICAgZGVxdWU8X1RwLCBfQWxsb2M+OjoKKyAgICAgIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3MsIF9BcmdzJiYuLi4gX19hcmdzKQorICAgICAgeworCXZhbHVlX3R5cGUgX194X2NvcHkoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsgLy8gWFhYIGNvcHkKKyNlbHNlCisgICAgdHlwZW5hbWUgZGVxdWU8X1RwLCBfQWxsb2M+OjppdGVyYXRvcgorICAgICAgZGVxdWU8X1RwLCBfQWxsb2M+OjoKKyAgICAgIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3MsIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsKKwl2YWx1ZV90eXBlIF9feF9jb3B5ID0gX194OyAvLyBYWFggY29weQorI2VuZGlmCisJZGlmZmVyZW5jZV90eXBlIF9faW5kZXggPSBfX3BvcyAtIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQ7CisJaWYgKHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19pbmRleCkgPCBzaXplKCkgLyAyKQorCSAgeworCSAgICBwdXNoX2Zyb250KF9HTElCQ1hYX01PVkUoZnJvbnQoKSkpOworCSAgICBpdGVyYXRvciBfX2Zyb250MSA9IHRoaXMtPl9NX2ltcGwuX01fc3RhcnQ7CisJICAgICsrX19mcm9udDE7CisJICAgIGl0ZXJhdG9yIF9fZnJvbnQyID0gX19mcm9udDE7CisJICAgICsrX19mcm9udDI7CisJICAgIF9fcG9zID0gdGhpcy0+X01faW1wbC5fTV9zdGFydCArIF9faW5kZXg7CisJICAgIGl0ZXJhdG9yIF9fcG9zMSA9IF9fcG9zOworCSAgICArK19fcG9zMTsKKwkgICAgX0dMSUJDWFhfTU9WRTMoX19mcm9udDIsIF9fcG9zMSwgX19mcm9udDEpOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgcHVzaF9iYWNrKF9HTElCQ1hYX01PVkUoYmFjaygpKSk7CisJICAgIGl0ZXJhdG9yIF9fYmFjazEgPSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaDsKKwkgICAgLS1fX2JhY2sxOworCSAgICBpdGVyYXRvciBfX2JhY2syID0gX19iYWNrMTsKKwkgICAgLS1fX2JhY2syOworCSAgICBfX3BvcyA9IHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgKyBfX2luZGV4OworCSAgICBfR0xJQkNYWF9NT1ZFX0JBQ0tXQVJEMyhfX3BvcywgX19iYWNrMiwgX19iYWNrMSk7CisJICB9CisJKl9fcG9zID0gX0dMSUJDWFhfTU9WRShfX3hfY29weSk7CisJcmV0dXJuIF9fcG9zOworICAgICAgfQorCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgZGVxdWU8X1RwLCBfQWxsb2M+OjoKKyAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgeworICAgICAgY29uc3QgZGlmZmVyZW5jZV90eXBlIF9fZWxlbXNfYmVmb3JlID0gX19wb3MgLSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0OworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuZ3RoID0gdGhpcy0+c2l6ZSgpOworICAgICAgdmFsdWVfdHlwZSBfX3hfY29weSA9IF9feDsKKyAgICAgIGlmIChfX2VsZW1zX2JlZm9yZSA8IGRpZmZlcmVuY2VfdHlwZShfX2xlbmd0aCAvIDIpKQorCXsKKwkgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9mcm9udChfX24pOworCSAgaXRlcmF0b3IgX19vbGRfc3RhcnQgPSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0OworCSAgX19wb3MgPSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0ICsgX19lbGVtc19iZWZvcmU7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgaWYgKF9fZWxlbXNfYmVmb3JlID49IGRpZmZlcmVuY2VfdHlwZShfX24pKQorCQl7CisJCSAgaXRlcmF0b3IgX19zdGFydF9uID0gKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQKKwkJCQkJKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CisJCSAgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfbW92ZV9hKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQsCisJCQkJCSAgICAgIF9fc3RhcnRfbiwgX19uZXdfc3RhcnQsCisJCQkJCSAgICAgIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJCSAgdGhpcy0+X01faW1wbC5fTV9zdGFydCA9IF9fbmV3X3N0YXJ0OworCQkgIF9HTElCQ1hYX01PVkUzKF9fc3RhcnRfbiwgX19wb3MsIF9fb2xkX3N0YXJ0KTsKKwkJICBzdGQ6OmZpbGwoX19wb3MgLSBkaWZmZXJlbmNlX3R5cGUoX19uKSwgX19wb3MsIF9feF9jb3B5KTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIHN0ZDo6X191bmluaXRpYWxpemVkX21vdmVfZmlsbCh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LAorCQkJCQkJIF9fcG9zLCBfX25ld19zdGFydCwKKwkJCQkJCSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LAorCQkJCQkJIF9feF9jb3B5LAorCQkJCQkJIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJCSAgdGhpcy0+X01faW1wbC5fTV9zdGFydCA9IF9fbmV3X3N0YXJ0OworCQkgIHN0ZDo6ZmlsbChfX29sZF9zdGFydCwgX19wb3MsIF9feF9jb3B5KTsKKwkJfQorCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeworCSAgICAgIF9NX2Rlc3Ryb3lfbm9kZXMoX19uZXdfc3RhcnQuX01fbm9kZSwKKwkJCSAgICAgICB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX25vZGUpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfYmFjayhfX24pOworCSAgaXRlcmF0b3IgX19vbGRfZmluaXNoID0gdGhpcy0+X01faW1wbC5fTV9maW5pc2g7CisJICBjb25zdCBkaWZmZXJlbmNlX3R5cGUgX19lbGVtc19hZnRlciA9CisJICAgIGRpZmZlcmVuY2VfdHlwZShfX2xlbmd0aCkgLSBfX2VsZW1zX2JlZm9yZTsKKwkgIF9fcG9zID0gdGhpcy0+X01faW1wbC5fTV9maW5pc2ggLSBfX2VsZW1zX2FmdGVyOworCSAgX190cnkKKwkgICAgeworCSAgICAgIGlmIChfX2VsZW1zX2FmdGVyID4gZGlmZmVyZW5jZV90eXBlKF9fbikpCisJCXsKKwkJICBpdGVyYXRvciBfX2ZpbmlzaF9uID0gKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoCisJCQkJCSAtIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKKwkJICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9tb3ZlX2EoX19maW5pc2hfbiwKKwkJCQkJICAgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2gsCisJCQkJCSAgICAgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkJCQkgICAgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCQkgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoID0gX19uZXdfZmluaXNoOworCQkgIF9HTElCQ1hYX01PVkVfQkFDS1dBUkQzKF9fcG9zLCBfX2ZpbmlzaF9uLCBfX29sZF9maW5pc2gpOworCQkgIHN0ZDo6ZmlsbChfX3BvcywgX19wb3MgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSwgX194X2NvcHkpOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9tb3ZlKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkJCQkJIF9fcG9zICsgZGlmZmVyZW5jZV90eXBlKF9fbiksCisJCQkJCQkgX194X2NvcHksIF9fcG9zLAorCQkJCQkJIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkJCQkJIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJCSAgdGhpcy0+X01faW1wbC5fTV9maW5pc2ggPSBfX25ld19maW5pc2g7CisJCSAgc3RkOjpmaWxsKF9fcG9zLCBfX29sZF9maW5pc2gsIF9feF9jb3B5KTsKKwkJfQorCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeworCSAgICAgIF9NX2Rlc3Ryb3lfbm9kZXModGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fbm9kZSArIDEsCisJCQkgICAgICAgX19uZXdfZmluaXNoLl9NX25vZGUgKyAxKTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgZGVxdWU8X1RwLCBfQWxsb2M+OjoKKyAgICAgIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3MsCisgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24pCisgICAgICB7CisgICAgICAgIGNvbnN0IGRpZmZlcmVuY2VfdHlwZSBfX2VsZW1zYmVmb3JlID0gX19wb3MgLSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0OworICAgICAgICBjb25zdCBzaXplX3R5cGUgX19sZW5ndGggPSBzaXplKCk7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fZWxlbXNiZWZvcmUpIDwgX19sZW5ndGggLyAyKQorCSAgeworCSAgICBpdGVyYXRvciBfX25ld19zdGFydCA9IF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfZnJvbnQoX19uKTsKKwkgICAgaXRlcmF0b3IgX19vbGRfc3RhcnQgPSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0OworCSAgICBfX3BvcyA9IHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgKyBfX2VsZW1zYmVmb3JlOworCSAgICBfX3RyeQorCSAgICAgIHsKKwkJaWYgKF9fZWxlbXNiZWZvcmUgPj0gZGlmZmVyZW5jZV90eXBlKF9fbikpCisJCSAgeworCQkgICAgaXRlcmF0b3IgX19zdGFydF9uID0gKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQKKwkJCQkJICArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKKwkJICAgIHN0ZDo6X191bmluaXRpYWxpemVkX21vdmVfYSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LAorCQkJCQkJX19zdGFydF9uLCBfX25ld19zdGFydCwKKwkJCQkJCV9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJCSAgICB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CisJCSAgICBfR0xJQkNYWF9NT1ZFMyhfX3N0YXJ0X24sIF9fcG9zLCBfX29sZF9zdGFydCk7CisJCSAgICBzdGQ6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3BvcyAtIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKKwkJICB9CisJCWVsc2UKKwkJICB7CisJCSAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKKwkJICAgIHN0ZDo6YWR2YW5jZShfX21pZCwgZGlmZmVyZW5jZV90eXBlKF9fbikgLSBfX2VsZW1zYmVmb3JlKTsKKwkJICAgIHN0ZDo6X191bmluaXRpYWxpemVkX21vdmVfY29weSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LAorCQkJCQkJICAgX19wb3MsIF9fZmlyc3QsIF9fbWlkLAorCQkJCQkJICAgX19uZXdfc3RhcnQsCisJCQkJCQkgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCQkgICAgdGhpcy0+X01faW1wbC5fTV9zdGFydCA9IF9fbmV3X3N0YXJ0OworCQkgICAgc3RkOjpjb3B5KF9fbWlkLCBfX2xhc3QsIF9fb2xkX3N0YXJ0KTsKKwkJICB9CisJICAgICAgfQorCSAgICBfX2NhdGNoKC4uLikKKwkgICAgICB7CisJCV9NX2Rlc3Ryb3lfbm9kZXMoX19uZXdfc3RhcnQuX01fbm9kZSwKKwkJCQkgdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9ub2RlKTsKKwkJX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgICAgfQorCSAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBpdGVyYXRvciBfX25ld19maW5pc2ggPSBfTV9yZXNlcnZlX2VsZW1lbnRzX2F0X2JhY2soX19uKTsKKyAgICAgICAgICBpdGVyYXRvciBfX29sZF9maW5pc2ggPSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaDsKKyAgICAgICAgICBjb25zdCBkaWZmZXJlbmNlX3R5cGUgX19lbGVtc2FmdGVyID0KKyAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZShfX2xlbmd0aCkgLSBfX2VsZW1zYmVmb3JlOworICAgICAgICAgIF9fcG9zID0gdGhpcy0+X01faW1wbC5fTV9maW5pc2ggLSBfX2VsZW1zYWZ0ZXI7CisgICAgICAgICAgX190cnkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKF9fZWxlbXNhZnRlciA+IGRpZmZlcmVuY2VfdHlwZShfX24pKQorCQl7CisJCSAgaXRlcmF0b3IgX19maW5pc2hfbiA9ICh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaAorCQkJCQkgLSBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CisJCSAgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfbW92ZV9hKF9fZmluaXNoX24sCisJCQkJCSAgICAgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkJCQkgICAgICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJCQkJICAgICAgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwkJICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKKwkJICBfR0xJQkNYWF9NT1ZFX0JBQ0tXQVJEMyhfX3BvcywgX19maW5pc2hfbiwgX19vbGRfZmluaXNoKTsKKwkJICBzdGQ6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Bvcyk7CisJCX0KKyAgICAgICAgICAgICAgZWxzZQorCQl7CisJCSAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7CisJCSAgc3RkOjphZHZhbmNlKF9fbWlkLCBfX2VsZW1zYWZ0ZXIpOworCQkgIHN0ZDo6X191bmluaXRpYWxpemVkX2NvcHlfbW92ZShfX21pZCwgX19sYXN0LCBfX3BvcywKKwkJCQkJCSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJCQkJCSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJCQkJCSBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCQkgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoID0gX19uZXdfZmluaXNoOworCQkgIHN0ZDo6Y29weShfX2ZpcnN0LCBfX21pZCwgX19wb3MpOworCQl9CisgICAgICAgICAgICB9CisgICAgICAgICAgX19jYXRjaCguLi4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9NX2Rlc3Ryb3lfbm9kZXModGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fbm9kZSArIDEsCisJCQkgICAgICAgX19uZXdfZmluaXNoLl9NX25vZGUgKyAxKTsKKyAgICAgICAgICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgIHZvaWQKKyAgICAgZGVxdWU8X1RwLCBfQWxsb2M+OjoKKyAgICAgX01fZGVzdHJveV9kYXRhX2F1eChpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCisgICAgIHsKKyAgICAgICBmb3IgKF9NYXBfcG9pbnRlciBfX25vZGUgPSBfX2ZpcnN0Ll9NX25vZGUgKyAxOworCSAgICBfX25vZGUgPCBfX2xhc3QuX01fbm9kZTsgKytfX25vZGUpCisJIHN0ZDo6X0Rlc3Ryb3koKl9fbm9kZSwgKl9fbm9kZSArIF9TX2J1ZmZlcl9zaXplKCksCisJCSAgICAgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCisgICAgICAgaWYgKF9fZmlyc3QuX01fbm9kZSAhPSBfX2xhc3QuX01fbm9kZSkKKwkgeworCSAgIHN0ZDo6X0Rlc3Ryb3koX19maXJzdC5fTV9jdXIsIF9fZmlyc3QuX01fbGFzdCwKKwkJCSBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCSAgIHN0ZDo6X0Rlc3Ryb3koX19sYXN0Ll9NX2ZpcnN0LCBfX2xhc3QuX01fY3VyLAorCQkJIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJIH0KKyAgICAgICBlbHNlCisJIHN0ZDo6X0Rlc3Ryb3koX19maXJzdC5fTV9jdXIsIF9fbGFzdC5fTV9jdXIsCisJCSAgICAgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworICAgICB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBkZXF1ZTxfVHAsIF9BbGxvYz46OgorICAgIF9NX25ld19lbGVtZW50c19hdF9mcm9udChzaXplX3R5cGUgX19uZXdfZWxlbXMpCisgICAgeworICAgICAgaWYgKHRoaXMtPm1heF9zaXplKCkgLSB0aGlzLT5zaXplKCkgPCBfX25ld19lbGVtcykKKwlfX3Rocm93X2xlbmd0aF9lcnJvcihfX04oImRlcXVlOjpfTV9uZXdfZWxlbWVudHNfYXRfZnJvbnQiKSk7CisKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld19ub2RlcyA9ICgoX19uZXdfZWxlbXMgKyBfU19idWZmZXJfc2l6ZSgpIC0gMSkKKwkJCQkgICAgIC8gX1NfYnVmZmVyX3NpemUoKSk7CisgICAgICBfTV9yZXNlcnZlX21hcF9hdF9mcm9udChfX25ld19ub2Rlcyk7CisgICAgICBzaXplX3R5cGUgX19pOworICAgICAgX190cnkKKyAgICAgICAgeworICAgICAgICAgIGZvciAoX19pID0gMTsgX19pIDw9IF9fbmV3X25vZGVzOyArK19faSkKKyAgICAgICAgICAgICoodGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9ub2RlIC0gX19pKSA9IHRoaXMtPl9NX2FsbG9jYXRlX25vZGUoKTsKKyAgICAgICAgfQorICAgICAgX19jYXRjaCguLi4pCisgICAgICAgIHsKKyAgICAgICAgICBmb3IgKHNpemVfdHlwZSBfX2ogPSAxOyBfX2ogPCBfX2k7ICsrX19qKQorICAgICAgICAgICAgX01fZGVhbGxvY2F0ZV9ub2RlKCoodGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9ub2RlIC0gX19qKSk7CisgICAgICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgICAgICAgIH0KKyAgICB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBkZXF1ZTxfVHAsIF9BbGxvYz46OgorICAgIF9NX25ld19lbGVtZW50c19hdF9iYWNrKHNpemVfdHlwZSBfX25ld19lbGVtcykKKyAgICB7CisgICAgICBpZiAodGhpcy0+bWF4X3NpemUoKSAtIHRoaXMtPnNpemUoKSA8IF9fbmV3X2VsZW1zKQorCV9fdGhyb3dfbGVuZ3RoX2Vycm9yKF9fTigiZGVxdWU6Ol9NX25ld19lbGVtZW50c19hdF9iYWNrIikpOworCisgICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdfbm9kZXMgPSAoKF9fbmV3X2VsZW1zICsgX1NfYnVmZmVyX3NpemUoKSAtIDEpCisJCQkJICAgICAvIF9TX2J1ZmZlcl9zaXplKCkpOworICAgICAgX01fcmVzZXJ2ZV9tYXBfYXRfYmFjayhfX25ld19ub2Rlcyk7CisgICAgICBzaXplX3R5cGUgX19pOworICAgICAgX190cnkKKyAgICAgICAgeworICAgICAgICAgIGZvciAoX19pID0gMTsgX19pIDw9IF9fbmV3X25vZGVzOyArK19faSkKKyAgICAgICAgICAgICoodGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fbm9kZSArIF9faSkgPSB0aGlzLT5fTV9hbGxvY2F0ZV9ub2RlKCk7CisgICAgICAgIH0KKyAgICAgIF9fY2F0Y2goLi4uKQorICAgICAgICB7CisgICAgICAgICAgZm9yIChzaXplX3R5cGUgX19qID0gMTsgX19qIDwgX19pOyArK19faikKKyAgICAgICAgICAgIF9NX2RlYWxsb2NhdGVfbm9kZSgqKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX25vZGUgKyBfX2opKTsKKyAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAgICAgICAgfQorICAgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIGRlcXVlPF9UcCwgX0FsbG9jPjo6CisgICAgX01fcmVhbGxvY2F0ZV9tYXAoc2l6ZV90eXBlIF9fbm9kZXNfdG9fYWRkLCBib29sIF9fYWRkX2F0X2Zyb250KQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9udW1fbm9kZXMKKwk9IHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX25vZGUgLSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX25vZGUgKyAxOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3X251bV9ub2RlcyA9IF9fb2xkX251bV9ub2RlcyArIF9fbm9kZXNfdG9fYWRkOworCisgICAgICBfTWFwX3BvaW50ZXIgX19uZXdfbnN0YXJ0OworICAgICAgaWYgKHRoaXMtPl9NX2ltcGwuX01fbWFwX3NpemUgPiAyICogX19uZXdfbnVtX25vZGVzKQorCXsKKwkgIF9fbmV3X25zdGFydCA9IHRoaXMtPl9NX2ltcGwuX01fbWFwICsgKHRoaXMtPl9NX2ltcGwuX01fbWFwX3NpemUKKwkJCQkJIC0gX19uZXdfbnVtX25vZGVzKSAvIDIKKwkgICAgICAgICAgICAgICAgICsgKF9fYWRkX2F0X2Zyb250ID8gX19ub2Rlc190b19hZGQgOiAwKTsKKwkgIGlmIChfX25ld19uc3RhcnQgPCB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX25vZGUpCisJICAgIHN0ZDo6Y29weSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX25vZGUsCisJCSAgICAgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX25vZGUgKyAxLAorCQkgICAgICBfX25ld19uc3RhcnQpOworCSAgZWxzZQorCSAgICBzdGQ6OmNvcHlfYmFja3dhcmQodGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9ub2RlLAorCQkJICAgICAgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX25vZGUgKyAxLAorCQkJICAgICAgIF9fbmV3X25zdGFydCArIF9fb2xkX251bV9ub2Rlcyk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHNpemVfdHlwZSBfX25ld19tYXBfc2l6ZSA9IHRoaXMtPl9NX2ltcGwuX01fbWFwX3NpemUKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3RkOjptYXgodGhpcy0+X01faW1wbC5fTV9tYXBfc2l6ZSwKKwkJCQkJCV9fbm9kZXNfdG9fYWRkKSArIDI7CisKKwkgIF9NYXBfcG9pbnRlciBfX25ld19tYXAgPSB0aGlzLT5fTV9hbGxvY2F0ZV9tYXAoX19uZXdfbWFwX3NpemUpOworCSAgX19uZXdfbnN0YXJ0ID0gX19uZXdfbWFwICsgKF9fbmV3X21hcF9zaXplIC0gX19uZXdfbnVtX25vZGVzKSAvIDIKKwkgICAgICAgICAgICAgICAgICsgKF9fYWRkX2F0X2Zyb250ID8gX19ub2Rlc190b19hZGQgOiAwKTsKKwkgIHN0ZDo6Y29weSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX25vZGUsCisJCSAgICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9ub2RlICsgMSwKKwkJICAgIF9fbmV3X25zdGFydCk7CisJICBfTV9kZWFsbG9jYXRlX21hcCh0aGlzLT5fTV9pbXBsLl9NX21hcCwgdGhpcy0+X01faW1wbC5fTV9tYXBfc2l6ZSk7CisKKwkgIHRoaXMtPl9NX2ltcGwuX01fbWFwID0gX19uZXdfbWFwOworCSAgdGhpcy0+X01faW1wbC5fTV9tYXBfc2l6ZSA9IF9fbmV3X21hcF9zaXplOworCX0KKworICAgICAgdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9zZXRfbm9kZShfX25ld19uc3RhcnQpOworICAgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fc2V0X25vZGUoX19uZXdfbnN0YXJ0ICsgX19vbGRfbnVtX25vZGVzIC0gMSk7CisgICAgfQorCisgIC8vIE92ZXJsb2FkIGZvciBkZXF1ZTo6aXRlcmF0b3JzLCBleHBsb2l0aW5nIHRoZSAic2VnbWVudGVkLWl0ZXJhdG9yCisgIC8vIG9wdGltaXphdGlvbiIuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICB2b2lkCisgICAgZmlsbChjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPiYgX19maXJzdCwKKwkgY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4mIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj46Ol9TZWxmIF9TZWxmOworCisgICAgICBmb3IgKHR5cGVuYW1lIF9TZWxmOjpfTWFwX3BvaW50ZXIgX19ub2RlID0gX19maXJzdC5fTV9ub2RlICsgMTsKKyAgICAgICAgICAgX19ub2RlIDwgX19sYXN0Ll9NX25vZGU7ICsrX19ub2RlKQorCXN0ZDo6ZmlsbCgqX19ub2RlLCAqX19ub2RlICsgX1NlbGY6Ol9TX2J1ZmZlcl9zaXplKCksIF9fdmFsdWUpOworCisgICAgICBpZiAoX19maXJzdC5fTV9ub2RlICE9IF9fbGFzdC5fTV9ub2RlKQorCXsKKwkgIHN0ZDo6ZmlsbChfX2ZpcnN0Ll9NX2N1ciwgX19maXJzdC5fTV9sYXN0LCBfX3ZhbHVlKTsKKwkgIHN0ZDo6ZmlsbChfX2xhc3QuX01fZmlyc3QsIF9fbGFzdC5fTV9jdXIsIF9fdmFsdWUpOworCX0KKyAgICAgIGVsc2UKKwlzdGQ6OmZpbGwoX19maXJzdC5fTV9jdXIsIF9fbGFzdC5fTV9jdXIsIF9fdmFsdWUpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4KKyAgICBjb3B5KF9EZXF1ZV9pdGVyYXRvcjxfVHAsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCo+IF9fZmlyc3QsCisJIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCo+IF9fbGFzdCwKKwkgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4gX19yZXN1bHQpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPjo6X1NlbGYgX1NlbGY7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TZWxmOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworCisgICAgICBkaWZmZXJlbmNlX3R5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OworICAgICAgd2hpbGUgKF9fbGVuID4gMCkKKwl7CisJICBjb25zdCBkaWZmZXJlbmNlX3R5cGUgX19jbGVuCisJICAgID0gc3RkOjptaW4oX19sZW4sIHN0ZDo6bWluKF9fZmlyc3QuX01fbGFzdCAtIF9fZmlyc3QuX01fY3VyLAorCQkJCSAgICAgICBfX3Jlc3VsdC5fTV9sYXN0IC0gX19yZXN1bHQuX01fY3VyKSk7CisJICBzdGQ6OmNvcHkoX19maXJzdC5fTV9jdXIsIF9fZmlyc3QuX01fY3VyICsgX19jbGVuLCBfX3Jlc3VsdC5fTV9jdXIpOworCSAgX19maXJzdCArPSBfX2NsZW47CisJICBfX3Jlc3VsdCArPSBfX2NsZW47CisJICBfX2xlbiAtPSBfX2NsZW47CisJfQorICAgICAgcmV0dXJuIF9fcmVzdWx0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4KKyAgICBjb3B5X2JhY2t3YXJkKF9EZXF1ZV9pdGVyYXRvcjxfVHAsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCo+IF9fZmlyc3QsCisJCSAgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgY29uc3QgX1RwJiwgY29uc3QgX1RwKj4gX19sYXN0LAorCQkgIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+IF9fcmVzdWx0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj46Ol9TZWxmIF9TZWxmOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfU2VsZjo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKKworICAgICAgZGlmZmVyZW5jZV90eXBlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKKyAgICAgIHdoaWxlIChfX2xlbiA+IDApCisJeworCSAgZGlmZmVyZW5jZV90eXBlIF9fbGxlbiA9IF9fbGFzdC5fTV9jdXIgLSBfX2xhc3QuX01fZmlyc3Q7CisJICBfVHAqIF9fbGVuZCA9IF9fbGFzdC5fTV9jdXI7CisKKwkgIGRpZmZlcmVuY2VfdHlwZSBfX3JsZW4gPSBfX3Jlc3VsdC5fTV9jdXIgLSBfX3Jlc3VsdC5fTV9maXJzdDsKKwkgIF9UcCogX19yZW5kID0gX19yZXN1bHQuX01fY3VyOworCisJICBpZiAoIV9fbGxlbikKKwkgICAgeworCSAgICAgIF9fbGxlbiA9IF9TZWxmOjpfU19idWZmZXJfc2l6ZSgpOworCSAgICAgIF9fbGVuZCA9ICooX19sYXN0Ll9NX25vZGUgLSAxKSArIF9fbGxlbjsKKwkgICAgfQorCSAgaWYgKCFfX3JsZW4pCisJICAgIHsKKwkgICAgICBfX3JsZW4gPSBfU2VsZjo6X1NfYnVmZmVyX3NpemUoKTsKKwkgICAgICBfX3JlbmQgPSAqKF9fcmVzdWx0Ll9NX25vZGUgLSAxKSArIF9fcmxlbjsKKwkgICAgfQorCisJICBjb25zdCBkaWZmZXJlbmNlX3R5cGUgX19jbGVuID0gc3RkOjptaW4oX19sZW4sCisJCQkJCQkgIHN0ZDo6bWluKF9fbGxlbiwgX19ybGVuKSk7CisJICBzdGQ6OmNvcHlfYmFja3dhcmQoX19sZW5kIC0gX19jbGVuLCBfX2xlbmQsIF9fcmVuZCk7CisJICBfX2xhc3QgLT0gX19jbGVuOworCSAgX19yZXN1bHQgLT0gX19jbGVuOworCSAgX19sZW4gLT0gX19jbGVuOworCX0KKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4KKyAgICBtb3ZlKF9EZXF1ZV9pdGVyYXRvcjxfVHAsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCo+IF9fZmlyc3QsCisJIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCo+IF9fbGFzdCwKKwkgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4gX19yZXN1bHQpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPjo6X1NlbGYgX1NlbGY7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TZWxmOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworCisgICAgICBkaWZmZXJlbmNlX3R5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OworICAgICAgd2hpbGUgKF9fbGVuID4gMCkKKwl7CisJICBjb25zdCBkaWZmZXJlbmNlX3R5cGUgX19jbGVuCisJICAgID0gc3RkOjptaW4oX19sZW4sIHN0ZDo6bWluKF9fZmlyc3QuX01fbGFzdCAtIF9fZmlyc3QuX01fY3VyLAorCQkJCSAgICAgICBfX3Jlc3VsdC5fTV9sYXN0IC0gX19yZXN1bHQuX01fY3VyKSk7CisJICBzdGQ6Om1vdmUoX19maXJzdC5fTV9jdXIsIF9fZmlyc3QuX01fY3VyICsgX19jbGVuLCBfX3Jlc3VsdC5fTV9jdXIpOworCSAgX19maXJzdCArPSBfX2NsZW47CisJICBfX3Jlc3VsdCArPSBfX2NsZW47CisJICBfX2xlbiAtPSBfX2NsZW47CisJfQorICAgICAgcmV0dXJuIF9fcmVzdWx0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4KKyAgICBtb3ZlX2JhY2t3YXJkKF9EZXF1ZV9pdGVyYXRvcjxfVHAsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCo+IF9fZmlyc3QsCisJCSAgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgY29uc3QgX1RwJiwgY29uc3QgX1RwKj4gX19sYXN0LAorCQkgIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+IF9fcmVzdWx0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj46Ol9TZWxmIF9TZWxmOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfU2VsZjo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKKworICAgICAgZGlmZmVyZW5jZV90eXBlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKKyAgICAgIHdoaWxlIChfX2xlbiA+IDApCisJeworCSAgZGlmZmVyZW5jZV90eXBlIF9fbGxlbiA9IF9fbGFzdC5fTV9jdXIgLSBfX2xhc3QuX01fZmlyc3Q7CisJICBfVHAqIF9fbGVuZCA9IF9fbGFzdC5fTV9jdXI7CisKKwkgIGRpZmZlcmVuY2VfdHlwZSBfX3JsZW4gPSBfX3Jlc3VsdC5fTV9jdXIgLSBfX3Jlc3VsdC5fTV9maXJzdDsKKwkgIF9UcCogX19yZW5kID0gX19yZXN1bHQuX01fY3VyOworCisJICBpZiAoIV9fbGxlbikKKwkgICAgeworCSAgICAgIF9fbGxlbiA9IF9TZWxmOjpfU19idWZmZXJfc2l6ZSgpOworCSAgICAgIF9fbGVuZCA9ICooX19sYXN0Ll9NX25vZGUgLSAxKSArIF9fbGxlbjsKKwkgICAgfQorCSAgaWYgKCFfX3JsZW4pCisJICAgIHsKKwkgICAgICBfX3JsZW4gPSBfU2VsZjo6X1NfYnVmZmVyX3NpemUoKTsKKwkgICAgICBfX3JlbmQgPSAqKF9fcmVzdWx0Ll9NX25vZGUgLSAxKSArIF9fcmxlbjsKKwkgICAgfQorCisJICBjb25zdCBkaWZmZXJlbmNlX3R5cGUgX19jbGVuID0gc3RkOjptaW4oX19sZW4sCisJCQkJCQkgIHN0ZDo6bWluKF9fbGxlbiwgX19ybGVuKSk7CisJICBzdGQ6Om1vdmVfYmFja3dhcmQoX19sZW5kIC0gX19jbGVuLCBfX2xlbmQsIF9fcmVuZCk7CisJICBfX2xhc3QgLT0gX19jbGVuOworCSAgX19yZXN1bHQgLT0gX19jbGVuOworCSAgX19sZW4gLT0gX19jbGVuOworCX0KKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisjZW5kaWYKKworX0dMSUJDWFhfRU5EX05FU1RFRF9OQU1FU1BBQ0UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvZm9yd2FyZF9saXN0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvZm9yd2FyZF9saXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E4ODJiOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9mb3J3YXJkX2xpc3QuaApAQCAtMCwwICsxLDEyOTIgQEAKKy8vIDxmb3J3YXJkX2xpc3QuaD4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBmb3J3YXJkX2xpc3QuaAorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfRk9SV0FSRF9MSVNUX0gKKyNkZWZpbmUgX0ZPUldBUkRfTElTVF9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgLyoqCisgICAqICBAYnJpZWYgIEEgaGVscGVyIGJhc2ljIG5vZGUgY2xhc3MgZm9yICVmb3J3YXJkX2xpc3QuCisgICAqICAgICAgICAgIFRoaXMgaXMganVzdCBhIGxpbmtlZCBsaXN0IHdpdGggbm90aGluZyBpbnNpZGUgaXQuCisgICAqICAgICAgICAgIFRoZXJlIGFyZSBwdXJlbHkgbGlzdCBzaHVmZmxpbmcgdXRpbGl0eSBtZXRob2RzIGhlcmUuCisgICAqLworICBzdHJ1Y3QgX0Z3ZF9saXN0X25vZGVfYmFzZQorICB7CisgICAgX0Z3ZF9saXN0X25vZGVfYmFzZSgpIDogX01fbmV4dCgwKSB7IH0KKworICAgIF9Gd2RfbGlzdF9ub2RlX2Jhc2UqIF9NX25leHQ7CisKKyAgICBzdGF0aWMgdm9pZAorICAgIHN3YXAoX0Z3ZF9saXN0X25vZGVfYmFzZSYgX194LCBfRndkX2xpc3Rfbm9kZV9iYXNlJiBfX3kpCisgICAgeyBzdGQ6OnN3YXAoX194Ll9NX25leHQsIF9feS5fTV9uZXh0KTsgfQorCisgICAgX0Z3ZF9saXN0X25vZGVfYmFzZSoKKyAgICBfTV90cmFuc2Zlcl9hZnRlcihfRndkX2xpc3Rfbm9kZV9iYXNlKiBfX2JlZ2luKQorICAgIHsKKyAgICAgIF9Gd2RfbGlzdF9ub2RlX2Jhc2UqIF9fZW5kID0gX19iZWdpbjsKKyAgICAgIHdoaWxlIChfX2VuZCAmJiBfX2VuZC0+X01fbmV4dCkKKwlfX2VuZCA9IF9fZW5kLT5fTV9uZXh0OworICAgICAgcmV0dXJuIF9NX3RyYW5zZmVyX2FmdGVyKF9fYmVnaW4sIF9fZW5kKTsKKyAgICB9CisKKyAgICBfRndkX2xpc3Rfbm9kZV9iYXNlKgorICAgIF9NX3RyYW5zZmVyX2FmdGVyKF9Gd2RfbGlzdF9ub2RlX2Jhc2UqIF9fYmVnaW4sCisJCSAgICAgIF9Gd2RfbGlzdF9ub2RlX2Jhc2UqIF9fZW5kKQorICAgIHsKKyAgICAgIF9Gd2RfbGlzdF9ub2RlX2Jhc2UqIF9fa2VlcCA9IF9fYmVnaW4tPl9NX25leHQ7CisgICAgICBpZiAoX19lbmQpCisJeworCSAgX19iZWdpbi0+X01fbmV4dCA9IF9fZW5kLT5fTV9uZXh0OworCSAgX19lbmQtPl9NX25leHQgPSBfTV9uZXh0OworCX0KKyAgICAgIGVsc2UKKwlfX2JlZ2luLT5fTV9uZXh0ID0gMDsKKyAgICAgIF9NX25leHQgPSBfX2tlZXA7CisgICAgICByZXR1cm4gX19lbmQ7CisgICAgfQorCisgICAgdm9pZAorICAgIF9NX3JldmVyc2VfYWZ0ZXIoKQorICAgIHsKKyAgICAgIF9Gd2RfbGlzdF9ub2RlX2Jhc2UqIF9fdGFpbCA9IF9NX25leHQ7CisgICAgICBpZiAoIV9fdGFpbCkKKwlyZXR1cm47CisgICAgICB3aGlsZSAoX0Z3ZF9saXN0X25vZGVfYmFzZSogX190ZW1wID0gX190YWlsLT5fTV9uZXh0KQorCXsKKwkgIF9Gd2RfbGlzdF9ub2RlX2Jhc2UqIF9fa2VlcCA9IF9NX25leHQ7CisJICBfTV9uZXh0ID0gX190ZW1wOworCSAgX190YWlsLT5fTV9uZXh0ID0gX190ZW1wLT5fTV9uZXh0OworCSAgX01fbmV4dC0+X01fbmV4dCA9IF9fa2VlcDsKKwl9CisgICAgfQorICB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBBIGhlbHBlciBub2RlIGNsYXNzIGZvciAlZm9yd2FyZF9saXN0LgorICAgKiAgICAgICAgICBUaGlzIGlzIGp1c3QgYSBsaW5rZWQgbGlzdCB3aXRoIGEgZGF0YSB2YWx1ZSBpbiBlYWNoIG5vZGUuCisgICAqICAgICAgICAgIFRoZXJlIGlzIGEgc29ydGluZyB1dGlsaXR5IG1ldGhvZC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX0Z3ZF9saXN0X25vZGUKKyAgICA6IHB1YmxpYyBfRndkX2xpc3Rfbm9kZV9iYXNlCisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIF9Gd2RfbGlzdF9ub2RlKF9BcmdzJiYuLi4gX19hcmdzKQorICAgICAgICA6IF9Gd2RfbGlzdF9ub2RlX2Jhc2UoKSwgCisgICAgICAgICAgX01fdmFsdWUoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKSB7IH0KKworICAgICAgX1RwIF9NX3ZhbHVlOworICAgIH07CisKKyAgLyoqCisgICAqICAgQGJyaWVmIEEgZm9yd2FyZF9saXN0OjppdGVyYXRvci4KKyAgICogCisgICAqICAgQWxsIHRoZSBmdW5jdGlvbnMgYXJlIG9wIG92ZXJsb2Fkcy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX0Z3ZF9saXN0X2l0ZXJhdG9yCisgICAgeworICAgICAgdHlwZWRlZiBfRndkX2xpc3RfaXRlcmF0b3I8X1RwPiAgICAgICAgICAgIF9TZWxmOworICAgICAgdHlwZWRlZiBfRndkX2xpc3Rfbm9kZTxfVHA+ICAgICAgICAgICAgICAgIF9Ob2RlOworCisgICAgICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RwKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiBfVHAmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgcHRyZGlmZl90ICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcgICAgICAgICAgaXRlcmF0b3JfY2F0ZWdvcnk7CisKKyAgICAgIF9Gd2RfbGlzdF9pdGVyYXRvcigpCisgICAgICA6IF9NX25vZGUoKSB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIF9Gd2RfbGlzdF9pdGVyYXRvcihfRndkX2xpc3Rfbm9kZV9iYXNlKiBfX24pIAorICAgICAgOiBfTV9ub2RlKF9fbikgeyB9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9Ob2RlKj4odGhpcy0+X01fbm9kZSktPl9NX3ZhbHVlOyB9CisKKyAgICAgIHBvaW50ZXIKKyAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAgeyByZXR1cm4gJnN0YXRpY19jYXN0PF9Ob2RlKj4odGhpcy0+X01fbm9kZSktPl9NX3ZhbHVlOyB9CisKKyAgICAgIF9TZWxmJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7CisgICAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9uZXh0OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIF9TZWxmCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsKKyAgICAgICAgX1NlbGYgX190bXAoKnRoaXMpOworICAgICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fbmV4dDsKKyAgICAgICAgcmV0dXJuIF9fdG1wOworICAgICAgfQorCisgICAgICBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IF9TZWxmJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9ub2RlID09IF9feC5fTV9ub2RlOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yIT0oY29uc3QgX1NlbGYmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX25vZGUgIT0gX194Ll9NX25vZGU7IH0KKworICAgICAgX1NlbGYKKyAgICAgIF9NX25leHQoKSBjb25zdAorICAgICAgeworICAgICAgICBpZiAoX01fbm9kZSkKKyAgICAgICAgICByZXR1cm4gX0Z3ZF9saXN0X2l0ZXJhdG9yKF9NX25vZGUtPl9NX25leHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuIF9Gd2RfbGlzdF9pdGVyYXRvcigwKTsKKyAgICAgIH0KKworICAgICAgX0Z3ZF9saXN0X25vZGVfYmFzZSogX01fbm9kZTsKKyAgICB9OworCisgIC8qKgorICAgKiAgIEBicmllZiBBIGZvcndhcmRfbGlzdDo6Y29uc3RfaXRlcmF0b3IuCisgICAqIAorICAgKiAgIEFsbCB0aGUgZnVuY3Rpb25zIGFyZSBvcCBvdmVybG9hZHMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9Gd2RfbGlzdF9jb25zdF9pdGVyYXRvcgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0Z3ZF9saXN0X2NvbnN0X2l0ZXJhdG9yPF9UcD4gICAgICBfU2VsZjsKKyAgICAgIHR5cGVkZWYgY29uc3QgX0Z3ZF9saXN0X25vZGU8X1RwPiAgICAgICAgICBfTm9kZTsKKyAgICAgIHR5cGVkZWYgX0Z3ZF9saXN0X2l0ZXJhdG9yPF9UcD4gICAgICAgICAgICBpdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIGNvbnN0IF9UcCogICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OworCisgICAgICBfRndkX2xpc3RfY29uc3RfaXRlcmF0b3IoKQorICAgICAgOiBfTV9ub2RlKCkgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfRndkX2xpc3RfY29uc3RfaXRlcmF0b3IoY29uc3QgX0Z3ZF9saXN0X25vZGVfYmFzZSogX19uKSAKKyAgICAgIDogX01fbm9kZShfX24pIHsgfQorCisgICAgICBfRndkX2xpc3RfY29uc3RfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9faXRlcikKKyAgICAgIDogX01fbm9kZShfX2l0ZXIuX01fbm9kZSkgeyB9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9Ob2RlKj4odGhpcy0+X01fbm9kZSktPl9NX3ZhbHVlOyB9CisKKyAgICAgIHBvaW50ZXIKKyAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAgeyByZXR1cm4gJnN0YXRpY19jYXN0PF9Ob2RlKj4odGhpcy0+X01fbm9kZSktPl9NX3ZhbHVlOyB9CisKKyAgICAgIF9TZWxmJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7CisgICAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9uZXh0OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIF9TZWxmCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsKKyAgICAgICAgX1NlbGYgX190bXAoKnRoaXMpOworICAgICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fbmV4dDsKKyAgICAgICAgcmV0dXJuIF9fdG1wOworICAgICAgfQorCisgICAgICBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IF9TZWxmJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9ub2RlID09IF9feC5fTV9ub2RlOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yIT0oY29uc3QgX1NlbGYmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX25vZGUgIT0gX194Ll9NX25vZGU7IH0KKworICAgICAgX1NlbGYKKyAgICAgIF9NX25leHQoKSBjb25zdAorICAgICAgeworICAgICAgICBpZiAodGhpcy0+X01fbm9kZSkKKyAgICAgICAgICByZXR1cm4gX0Z3ZF9saXN0X2NvbnN0X2l0ZXJhdG9yKF9NX25vZGUtPl9NX25leHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuIF9Gd2RfbGlzdF9jb25zdF9pdGVyYXRvcigwKTsKKyAgICAgIH0KKworICAgICAgY29uc3QgX0Z3ZF9saXN0X25vZGVfYmFzZSogX01fbm9kZTsKKyAgICB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBGb3J3YXJkIGxpc3QgaXRlcmF0b3IgZXF1YWxpdHkgY29tcGFyaXNvbi4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX0Z3ZF9saXN0X2l0ZXJhdG9yPF9UcD4mIF9feCwKKyAgICAgICAgICAgICAgIGNvbnN0IF9Gd2RfbGlzdF9jb25zdF9pdGVyYXRvcjxfVHA+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7IH0KKworICAvKioKKyAgICogIEBicmllZiAgRm9yd2FyZCBsaXN0IGl0ZXJhdG9yIGluZXF1YWxpdHkgY29tcGFyaXNvbi4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX0Z3ZF9saXN0X2l0ZXJhdG9yPF9UcD4mIF9feCwKKyAgICAgICAgICAgICAgIGNvbnN0IF9Gd2RfbGlzdF9jb25zdF9pdGVyYXRvcjxfVHA+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX25vZGUgIT0gX195Ll9NX25vZGU7IH0KKworICAvKioKKyAgICogIEBicmllZiAgQmFzZSBjbGFzcyBmb3IgJWZvcndhcmRfbGlzdC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHN0cnVjdCBfRndkX2xpc3RfYmFzZQorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPF9UcD46Om90aGVyIF9UcF9hbGxvY190eXBlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgCisgICAgICAgIHJlYmluZDxfRndkX2xpc3Rfbm9kZTxfVHA+Pjo6b3RoZXIgX05vZGVfYWxsb2NfdHlwZTsKKworICAgICAgc3RydWN0IF9Gd2RfbGlzdF9pbXBsIAorICAgICAgOiBwdWJsaWMgX05vZGVfYWxsb2NfdHlwZQorICAgICAgeworICAgICAgICBfRndkX2xpc3Rfbm9kZV9iYXNlIF9NX2hlYWQ7CisKKyAgICAgICAgX0Z3ZF9saXN0X2ltcGwoKQorICAgICAgICA6IF9Ob2RlX2FsbG9jX3R5cGUoKSwgX01faGVhZCgpCisgICAgICAgIHsgfQorCisgICAgICAgIF9Gd2RfbGlzdF9pbXBsKGNvbnN0IF9Ob2RlX2FsbG9jX3R5cGUmIF9fYSkKKyAgICAgICAgOiBfTm9kZV9hbGxvY190eXBlKF9fYSksIF9NX2hlYWQoKQorICAgICAgICB7IH0KKyAgICAgIH07CisKKyAgICAgIF9Gd2RfbGlzdF9pbXBsIF9NX2ltcGw7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9Gd2RfbGlzdF9pdGVyYXRvcjxfVHA+ICAgICAgICAgICAgICAgICBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX0Z3ZF9saXN0X2NvbnN0X2l0ZXJhdG9yPF9UcD4gICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfRndkX2xpc3Rfbm9kZTxfVHA+ICAgICAgICAgICAgICAgICAgICAgX05vZGU7CisKKyAgICAgIF9Ob2RlX2FsbG9jX3R5cGUmCisgICAgICBfTV9nZXRfTm9kZV9hbGxvY2F0b3IoKQorICAgICAgeyByZXR1cm4gKnN0YXRpY19jYXN0PF9Ob2RlX2FsbG9jX3R5cGUqPigmdGhpcy0+X01faW1wbCk7IH0KKworICAgICAgY29uc3QgX05vZGVfYWxsb2NfdHlwZSYKKyAgICAgIF9NX2dldF9Ob2RlX2FsbG9jYXRvcigpIGNvbnN0CisgICAgICB7IHJldHVybiAqc3RhdGljX2Nhc3Q8Y29uc3QgX05vZGVfYWxsb2NfdHlwZSo+KCZ0aGlzLT5fTV9pbXBsKTsgfQorCisgICAgICBfRndkX2xpc3RfYmFzZSgpCisgICAgICA6IF9NX2ltcGwoKQorICAgICAgeyB0aGlzLT5fTV9pbXBsLl9NX2hlYWQuX01fbmV4dCA9IDA7IH0KKworICAgICAgX0Z3ZF9saXN0X2Jhc2UoY29uc3QgX0FsbG9jJiBfX2EpCisgICAgICA6IF9NX2ltcGwoX19hKQorICAgICAgeyB0aGlzLT5fTV9pbXBsLl9NX2hlYWQuX01fbmV4dCA9IDA7IH0KKworICAgICAgX0Z3ZF9saXN0X2Jhc2UoY29uc3QgX0Z3ZF9saXN0X2Jhc2UmIF9fbHN0LCBjb25zdCBfQWxsb2MmIF9fYSk7CisKKyAgICAgIF9Gd2RfbGlzdF9iYXNlKF9Gd2RfbGlzdF9iYXNlJiYgX19sc3QsIGNvbnN0IF9BbGxvYyYgX19hKQorICAgICAgOiBfTV9pbXBsKF9fYSkKKyAgICAgIHsgX0Z3ZF9saXN0X25vZGVfYmFzZTo6c3dhcCh0aGlzLT5fTV9pbXBsLl9NX2hlYWQsCisJCQkJICBfX2xzdC5fTV9pbXBsLl9NX2hlYWQpOyB9CisKKyAgICAgIF9Gd2RfbGlzdF9iYXNlKF9Gd2RfbGlzdF9iYXNlJiYgX19sc3QpCisgICAgICA6IF9NX2ltcGwoX19sc3QuX01fZ2V0X05vZGVfYWxsb2NhdG9yKCkpCisgICAgICB7IF9Gd2RfbGlzdF9ub2RlX2Jhc2U6OnN3YXAodGhpcy0+X01faW1wbC5fTV9oZWFkLAorCQkJCSAgX19sc3QuX01faW1wbC5fTV9oZWFkKTsgfQorCisgICAgICB+X0Z3ZF9saXN0X2Jhc2UoKQorICAgICAgeyBfTV9lcmFzZV9hZnRlcigmX01faW1wbC5fTV9oZWFkLCAwKTsgfQorCisgICAgcHJvdGVjdGVkOgorCisgICAgICBfTm9kZSoKKyAgICAgIF9NX2dldF9ub2RlKCkKKyAgICAgIHsgcmV0dXJuIF9NX2dldF9Ob2RlX2FsbG9jYXRvcigpLmFsbG9jYXRlKDEpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICBfTm9kZSoKKyAgICAgICAgX01fY3JlYXRlX25vZGUoX0FyZ3MmJi4uLiBfX2FyZ3MpCisgICAgICAgIHsKKyAgICAgICAgICBfTm9kZSogX19ub2RlID0gdGhpcy0+X01fZ2V0X25vZGUoKTsKKyAgICAgICAgICBfX3RyeQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfTV9nZXRfTm9kZV9hbGxvY2F0b3IoKS5jb25zdHJ1Y3QoX19ub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisgICAgICAgICAgICAgIF9fbm9kZS0+X01fbmV4dCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgX19jYXRjaCguLi4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHRoaXMtPl9NX3B1dF9ub2RlKF9fbm9kZSk7CisgICAgICAgICAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworICAgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBfX25vZGU7CisgICAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIF9Gd2RfbGlzdF9ub2RlX2Jhc2UqCisgICAgICAgIF9NX2luc2VydF9hZnRlcihjb25zdF9pdGVyYXRvciBfX3BvcywgX0FyZ3MmJi4uLiBfX2FyZ3MpOworCisgICAgICB2b2lkCisgICAgICBfTV9wdXRfbm9kZShfTm9kZSogX19wKQorICAgICAgeyBfTV9nZXRfTm9kZV9hbGxvY2F0b3IoKS5kZWFsbG9jYXRlKF9fcCwgMSk7IH0KKworICAgICAgdm9pZAorICAgICAgX01fZXJhc2VfYWZ0ZXIoX0Z3ZF9saXN0X25vZGVfYmFzZSogX19wb3MpOworCisgICAgICB2b2lkCisgICAgICBfTV9lcmFzZV9hZnRlcihfRndkX2xpc3Rfbm9kZV9iYXNlKiBfX3BvcywgCisgICAgICAgICAgICAgICAgICAgICBfRndkX2xpc3Rfbm9kZV9iYXNlKiBfX2xhc3QpOworICAgIH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgQSBzdGFuZGFyZCBjb250YWluZXIgd2l0aCBsaW5lYXIgdGltZSBhY2Nlc3MgdG8gZWxlbWVudHMsCisgICAqICBhbmQgZml4ZWQgdGltZSBpbnNlcnRpb24vZGVsZXRpb24gYXQgYW55IHBvaW50IGluIHRoZSBzZXF1ZW5jZS4KKyAgICoKKyAgICogIEBpbmdyb3VwIHNlcXVlbmNlcworICAgKgorICAgKiAgTWVldHMgdGhlIHJlcXVpcmVtZW50cyBvZiBhIDxhIGhyZWY9InRhYmxlcy5odG1sIzY1Ij5jb250YWluZXI8L2E+LCBhCisgICAqICA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2NyI+c2VxdWVuY2U8L2E+LCBpbmNsdWRpbmcgdGhlCisgICAqICA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2OCI+b3B0aW9uYWwgc2VxdWVuY2UgcmVxdWlyZW1lbnRzPC9hPiB3aXRoIHRoZQorICAgKiAgJWV4Y2VwdGlvbiBvZiBAYyBhdCBhbmQgQGMgb3BlcmF0b3JbXS4KKyAgICoKKyAgICogIFRoaXMgaXMgYSBAZSBzaW5nbHkgQGUgbGlua2VkICVsaXN0LiAgVHJhdmVyc2FsIHVwIHRoZQorICAgKiAgJWxpc3QgcmVxdWlyZXMgbGluZWFyIHRpbWUsIGJ1dCBhZGRpbmcgYW5kIHJlbW92aW5nIGVsZW1lbnRzIChvcgorICAgKiAgQGUgbm9kZXMpIGlzIGRvbmUgaW4gY29uc3RhbnQgdGltZSwgcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGUKKyAgICogIGNoYW5nZSB0YWtlcyBwbGFjZS4gIFVubGlrZSBzdGQ6OnZlY3RvciBhbmQgc3RkOjpkZXF1ZSwKKyAgICogIHJhbmRvbS1hY2Nlc3MgaXRlcmF0b3JzIGFyZSBub3QgcHJvdmlkZWQsIHNvIHN1YnNjcmlwdGluZyAoIEBjCisgICAqICBbXSApIGFjY2VzcyBpcyBub3QgYWxsb3dlZC4gIEZvciBhbGdvcml0aG1zIHdoaWNoIG9ubHkgbmVlZAorICAgKiAgc2VxdWVudGlhbCBhY2Nlc3MsIHRoaXMgbGFjayBtYWtlcyBubyBkaWZmZXJlbmNlLgorICAgKgorICAgKiAgQWxzbyB1bmxpa2UgdGhlIG90aGVyIHN0YW5kYXJkIGNvbnRhaW5lcnMsIHN0ZDo6Zm9yd2FyZF9saXN0IHByb3ZpZGVzCisgICAqICBzcGVjaWFsaXplZCBhbGdvcml0aG1zICV1bmlxdWUgdG8gbGlua2VkIGxpc3RzLCBzdWNoIGFzCisgICAqICBzcGxpY2luZywgc29ydGluZywgYW5kIGluLXBsYWNlIHJldmVyc2FsLgorICAgKgorICAgKiAgQSBjb3VwbGUgcG9pbnRzIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBmb3J3YXJkX2xpc3Q8VHA+OgorICAgKgorICAgKiAgRmlyc3QsIHdlIG5ldmVyIGFjdHVhbGx5IGFsbG9jYXRlIGEgVHAsIHdlIGFsbG9jYXRlCisgICAqICBGd2RfbGlzdF9ub2RlPFRwPidzIGFuZCB0cnVzdCBbMjAuMS41XS80IHRvIERUUlQuICBUaGlzIGlzIHRvIGVuc3VyZQorICAgKiAgdGhhdCBhZnRlciBlbGVtZW50cyBmcm9tICVmb3J3YXJkX2xpc3Q8WCxBbGxvYzE+IGFyZSBzcGxpY2VkIGludG8KKyAgICogICVmb3J3YXJkX2xpc3Q8WCxBbGxvYzI+LCBkZXN0cm95aW5nIHRoZSBtZW1vcnkgb2YgdGhlIHNlY29uZCAlbGlzdCBpcyBhCisgICAqICB2YWxpZCBvcGVyYXRpb24sIGkuZS4sIEFsbG9jMSBnaXZldGggYW5kIEFsbG9jMiB0YWtldGggYXdheS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9UcD4gPgorICAgIGNsYXNzIGZvcndhcmRfbGlzdCA6IHByaXZhdGUgX0Z3ZF9saXN0X2Jhc2U8X1RwLCBfQWxsb2M+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIF9Gd2RfbGlzdF9iYXNlPF9UcCwgX0FsbG9jPiAgICAgICAgICAgICAgICAgIF9CYXNlOworICAgICAgdHlwZWRlZiBfRndkX2xpc3Rfbm9kZTxfVHA+ICAgICAgICAgICAgICAgICAgICAgICAgICBfTm9kZTsKKyAgICAgIHR5cGVkZWYgX0Z3ZF9saXN0X25vZGVfYmFzZSAgICAgICAgICAgICAgICAgICAgICAgICAgX05vZGVfYmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Ol9UcF9hbGxvY190eXBlICAgICAgICAgICAgICAgX1RwX2FsbG9jX3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICAvLyB0eXBlczoKKyAgICAgIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RwX2FsbG9jX3R5cGU6OnBvaW50ZXIgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RwX2FsbG9jX3R5cGU6OmNvbnN0X3BvaW50ZXIgICAgICAgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RwX2FsbG9jX3R5cGU6OnJlZmVyZW5jZSAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHBfYWxsb2NfdHlwZTo6Y29uc3RfcmVmZXJlbmNlICAgICBjb25zdF9yZWZlcmVuY2U7CisgCisgICAgICB0eXBlZGVmIF9Gd2RfbGlzdF9pdGVyYXRvcjxfVHA+ICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfRndkX2xpc3RfY29uc3RfaXRlcmF0b3I8X1RwPiAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OnB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIF9BbGxvYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRvcl90eXBlOworCisgICAgICAvLyAyMy4yLjMuMSBjb25zdHJ1Y3QvY29weS9kZXN0cm95OgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENyZWF0ZXMgYSAlZm9yd2FyZF9saXN0IHdpdGggbm8gZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBhbCAgQW4gYWxsb2NhdG9yIG9iamVjdC4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGZvcndhcmRfbGlzdChjb25zdCBfQWxsb2MmIF9fYWwgPSBfQWxsb2MoKSkKKyAgICAgIDogX0Jhc2UoX19hbCkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvcHkgY29uc3RydWN0b3Igd2l0aCBhbGxvY2F0b3IgYXJndW1lbnQuCisgICAgICAgKiAgQHBhcmFtICBsaXN0ICBJbnB1dCBsaXN0IHRvIGNvcHkuCisgICAgICAgKiAgQHBhcmFtICBhbCAgICBBbiBhbGxvY2F0b3Igb2JqZWN0LgorICAgICAgICovCisgICAgICBmb3J3YXJkX2xpc3QoY29uc3QgZm9yd2FyZF9saXN0JiBfX2xpc3QsIGNvbnN0IF9BbGxvYyYgX19hbCkKKyAgICAgIDogX0Jhc2UoX19saXN0LCBfX2FsKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTW92ZSBjb25zdHJ1Y3RvciB3aXRoIGFsbG9jYXRvciBhcmd1bWVudC4KKyAgICAgICAqICBAcGFyYW0gIGxpc3QgIElucHV0IGxpc3QgdG8gbW92ZS4KKyAgICAgICAqICBAcGFyYW0gIGFsICAgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKi8KKyAgICAgIGZvcndhcmRfbGlzdChmb3J3YXJkX2xpc3QmJiBfX2xpc3QsIGNvbnN0IF9BbGxvYyYgX19hbCkKKyAgICAgIDogX0Jhc2Uoc3RkOjpmb3J3YXJkPF9CYXNlPihfX2xpc3QpLCBfX2FsKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ3JlYXRlcyBhICVmb3J3YXJkX2xpc3Qgd2l0aCBkZWZhdWx0IGNvbnN0cnVjdGVkIGVsZW1lbnRzLgorICAgICAgICogIEBwYXJhbSAgbiAgVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBpbml0aWFsbHkgY3JlYXRlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGNvbnN0cnVjdG9yIGNyZWF0ZXMgdGhlICVmb3J3YXJkX2xpc3Qgd2l0aCBAYSBuIGRlZmF1bHQKKyAgICAgICAqICBjb25zdHJ1Y3RlZCBlbGVtZW50cy4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGZvcndhcmRfbGlzdChzaXplX3R5cGUgX19uKQorICAgICAgOiBfQmFzZSgpCisgICAgICB7IF9NX2RlZmF1bHRfaW5pdGlhbGl6ZShfX24pOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ3JlYXRlcyBhICVmb3J3YXJkX2xpc3Qgd2l0aCBjb3BpZXMgb2YgYW4gZXhlbXBsYXIgZWxlbWVudC4KKyAgICAgICAqICBAcGFyYW0gIG4gICAgICBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGluaXRpYWxseSBjcmVhdGUuCisgICAgICAgKiAgQHBhcmFtICB2YWx1ZSAgQW4gZWxlbWVudCB0byBjb3B5LgorICAgICAgICogIEBwYXJhbSAgYWwgICAgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKgorICAgICAgICogIFRoaXMgY29uc3RydWN0b3IgZmlsbHMgdGhlICVmb3J3YXJkX2xpc3Qgd2l0aCBAYSBuIGNvcGllcyBvZiBAYQorICAgICAgICogIHZhbHVlLgorICAgICAgICovCisgICAgICBmb3J3YXJkX2xpc3Qoc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BbGxvYyYgX19hbCA9IF9BbGxvYygpKQorICAgICAgOiBfQmFzZShfX2FsKQorICAgICAgeyBfTV9maWxsX2luaXRpYWxpemUoX19uLCBfX3ZhbHVlKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEJ1aWxkcyBhICVmb3J3YXJkX2xpc3QgZnJvbSBhIHJhbmdlLgorICAgICAgICogIEBwYXJhbSAgZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgbGFzdCAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgYWwgICAgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKgorICAgICAgICogIENyZWF0ZSBhICVmb3J3YXJkX2xpc3QgY29uc2lzdGluZyBvZiBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGZyb20KKyAgICAgICAqICBbQGEgZmlyc3QsQGEgbGFzdCkuICBUaGlzIGlzIGxpbmVhciBpbiBOICh3aGVyZSBOIGlzCisgICAgICAgKiAgZGlzdGFuY2UoQGEgZmlyc3QsQGEgbGFzdCkpLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgZm9yd2FyZF9saXN0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BbGxvYyYgX19hbCA9IF9BbGxvYygpKQorICAgICAgICA6IF9CYXNlKF9fYWwpCisgICAgICAgIHsKKyAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIGl0J3MgYW4gaW50ZWdyYWwgdHlwZS4gIElmIHNvLCBpdCdzIG5vdCBhbiBpdGVyYXRvci4KKyAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6X19pc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X190eXBlIF9JbnRlZ3JhbDsKKyAgICAgICAgICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOworICAgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgVGhlICVmb3J3YXJkX2xpc3QgY29weSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqICBAcGFyYW0gIGxpc3QgIEEgJWZvcndhcmRfbGlzdCBvZiBpZGVudGljYWwgZWxlbWVudCBhbmQgYWxsb2NhdG9yCisgICAgICAgKiAgICAgICAgICAgICAgICB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIG5ld2x5LWNyZWF0ZWQgJWZvcndhcmRfbGlzdCB1c2VzIGEgY29weSBvZiB0aGUgYWxsb2NhdGlvbgorICAgICAgICogIG9iamVjdCB1c2VkIGJ5IEBhIGxpc3QuCisgICAgICAgKi8KKyAgICAgIGZvcndhcmRfbGlzdChjb25zdCBmb3J3YXJkX2xpc3QmIF9fbGlzdCkKKyAgICAgIDogX0Jhc2UoX19saXN0Ll9NX2dldF9Ob2RlX2FsbG9jYXRvcigpKQorICAgICAgeyBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9fbGlzdC5iZWdpbigpLCBfX2xpc3QuZW5kKCksIF9fZmFsc2VfdHlwZSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFRoZSAlZm9yd2FyZF9saXN0IG1vdmUgY29uc3RydWN0b3IuCisgICAgICAgKiAgQHBhcmFtICBsaXN0ICBBICVmb3J3YXJkX2xpc3Qgb2YgaWRlbnRpY2FsIGVsZW1lbnQgYW5kIGFsbG9jYXRvcgorICAgICAgICogICAgICAgICAgICAgICAgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoZSBuZXdseS1jcmVhdGVkICVmb3J3YXJkX2xpc3QgY29udGFpbnMgdGhlIGV4YWN0IGNvbnRlbnRzIG9mIEBhCisgICAgICAgKiAgZm9yd2FyZF9saXN0LiBUaGUgY29udGVudHMgb2YgQGEgbGlzdCBhcmUgYSB2YWxpZCwgYnV0IHVuc3BlY2lmaWVkCisgICAgICAgKiAgJWZvcndhcmRfbGlzdC4KKyAgICAgICAqLworICAgICAgZm9yd2FyZF9saXN0KGZvcndhcmRfbGlzdCYmIF9fbGlzdCkKKyAgICAgIDogX0Jhc2Uoc3RkOjpmb3J3YXJkPF9CYXNlPihfX2xpc3QpKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBCdWlsZHMgYSAlZm9yd2FyZF9saXN0IGZyb20gYW4gaW5pdGlhbGl6ZXJfbGlzdAorICAgICAgICogIEBwYXJhbSAgaWwgIEFuIGluaXRpYWxpemVyX2xpc3Qgb2YgdmFsdWVfdHlwZS4KKyAgICAgICAqICBAcGFyYW0gIGFsICBBbiBhbGxvY2F0b3Igb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqICBDcmVhdGUgYSAlZm9yd2FyZF9saXN0IGNvbnNpc3Rpbmcgb2YgY29waWVzIG9mIHRoZSBlbGVtZW50cworICAgICAgICogIGluIHRoZSBpbml0aWFsaXplcl9saXN0IEBhIGlsLiAgVGhpcyBpcyBsaW5lYXIgaW4gaWwuc2l6ZSgpLgorICAgICAgICovCisgICAgICBmb3J3YXJkX2xpc3Qoc3RkOjppbml0aWFsaXplcl9saXN0PF9UcD4gX19pbCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9fYWwgPSBfQWxsb2MoKSkKKyAgICAgIDogX0Jhc2UoX19hbCkKKyAgICAgIHsgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfX2lsLmJlZ2luKCksIF9faWwuZW5kKCksIF9fZmFsc2VfdHlwZSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFRoZSBmb3J3YXJkX2xpc3QgZHRvci4KKyAgICAgICAqLworICAgICAgfmZvcndhcmRfbGlzdCgpCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBUaGUgJWZvcndhcmRfbGlzdCBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgbGlzdCAgQSAlZm9yd2FyZF9saXN0IG9mIGlkZW50aWNhbCBlbGVtZW50IGFuZCBhbGxvY2F0b3IKKyAgICAgICAqICAgICAgICAgICAgICAgIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBBbGwgdGhlIGVsZW1lbnRzIG9mIEBhIGxpc3QgYXJlIGNvcGllZCwgYnV0IHVubGlrZSB0aGUgY29weQorICAgICAgICogIGNvbnN0cnVjdG9yLCB0aGUgYWxsb2NhdG9yIG9iamVjdCBpcyBub3QgY29waWVkLgorICAgICAgICovCisgICAgICBmb3J3YXJkX2xpc3QmCisgICAgICBvcGVyYXRvcj0oY29uc3QgZm9yd2FyZF9saXN0JiBfX2xpc3QpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFRoZSAlZm9yd2FyZF9saXN0IG1vdmUgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIGxpc3QgIEEgJWZvcndhcmRfbGlzdCBvZiBpZGVudGljYWwgZWxlbWVudCBhbmQgYWxsb2NhdG9yCisgICAgICAgKiAgICAgICAgICAgICAgICB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGNvbnRlbnRzIG9mIEBhIGxpc3QgYXJlIG1vdmVkIGludG8gdGhpcyAlZm9yd2FyZF9saXN0CisgICAgICAgKiAgKHdpdGhvdXQgY29weWluZykuIEBhIGxpc3QgaXMgYSB2YWxpZCwgYnV0IHVuc3BlY2lmaWVkCisgICAgICAgKiAgJWZvcndhcmRfbGlzdAorICAgICAgICovCisgICAgICBmb3J3YXJkX2xpc3QmCisgICAgICBvcGVyYXRvcj0oZm9yd2FyZF9saXN0JiYgX19saXN0KQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorCS8vIE5COiBEUiA2NzUuCisJdGhpcy0+Y2xlYXIoKTsKKwl0aGlzLT5zd2FwKF9fbGlzdCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFRoZSAlZm9yd2FyZF9saXN0IGluaXRpYWxpemVyIGxpc3QgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIGlsICBBbiBpbml0aWFsaXplcl9saXN0IG9mIHZhbHVlX3R5cGUuCisgICAgICAgKgorICAgICAgICogIFJlcGxhY2UgdGhlIGNvbnRlbnRzIG9mIHRoZSAlZm9yd2FyZF9saXN0IHdpdGggY29waWVzIG9mIHRoZQorICAgICAgICogIGVsZW1lbnRzIGluIHRoZSBpbml0aWFsaXplcl9saXN0IEBhIGlsLiAgVGhpcyBpcyBsaW5lYXIgaW4KKyAgICAgICAqICBpbC5zaXplKCkuCisgICAgICAgKi8KKyAgICAgIGZvcndhcmRfbGlzdCYKKyAgICAgIG9wZXJhdG9yPShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X1RwPiBfX2lsKQorICAgICAgeworICAgICAgICBhc3NpZ24oX19pbCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBc3NpZ25zIGEgcmFuZ2UgdG8gYSAlZm9yd2FyZF9saXN0LgorICAgICAgICogIEBwYXJhbSAgZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgbGFzdCAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGZpbGxzIGEgJWZvcndhcmRfbGlzdCB3aXRoIGNvcGllcyBvZiB0aGUgZWxlbWVudHMKKyAgICAgICAqICBpbiB0aGUgcmFuZ2UgW0BhIGZpcnN0LEBhIGxhc3QpLgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgdGhlIGFzc2lnbm1lbnQgY29tcGxldGVseSBjaGFuZ2VzIHRoZSAlZm9yd2FyZF9saXN0IGFuZAorICAgICAgICogIHRoYXQgdGhlIHJlc3VsdGluZyAlZm9yd2FyZF9saXN0J3Mgc2l6ZSBpcyB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyCisgICAgICAgKiAgb2YgZWxlbWVudHMgYXNzaWduZWQuICBPbGQgZGF0YSBtYXkgYmUgbG9zdC4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeworICAgICAgICAgIGNsZWFyKCk7CisgICAgICAgICAgaW5zZXJ0X2FmdGVyKGNiZWZvcmVfYmVnaW4oKSwgX19maXJzdCwgX19sYXN0KTsKKyAgICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFzc2lnbnMgYSBnaXZlbiB2YWx1ZSB0byBhICVmb3J3YXJkX2xpc3QuCisgICAgICAgKiAgQHBhcmFtICBuICBOdW1iZXIgb2YgZWxlbWVudHMgdG8gYmUgYXNzaWduZWQuCisgICAgICAgKiAgQHBhcmFtICB2YWwgIFZhbHVlIHRvIGJlIGFzc2lnbmVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGZpbGxzIGEgJWZvcndhcmRfbGlzdCB3aXRoIEBhIG4gY29waWVzIG9mIHRoZSBnaXZlbgorICAgICAgICogIHZhbHVlLiAgTm90ZSB0aGF0IHRoZSBhc3NpZ25tZW50IGNvbXBsZXRlbHkgY2hhbmdlcyB0aGUKKyAgICAgICAqICAlZm9yd2FyZF9saXN0IGFuZCB0aGF0IHRoZSByZXN1bHRpbmcgJWZvcndhcmRfbGlzdCdzIHNpemUgaXMgdGhlCisgICAgICAgKiAgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGFzc2lnbmVkLiAgT2xkIGRhdGEgbWF5IGJlIGxvc3QuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGFzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKQorICAgICAgeworICAgICAgICBjbGVhcigpOworICAgICAgICBpbnNlcnRfYWZ0ZXIoY2JlZm9yZV9iZWdpbigpLCBfX24sIF9fdmFsKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBc3NpZ25zIGFuIGluaXRpYWxpemVyX2xpc3QgdG8gYSAlZm9yd2FyZF9saXN0LgorICAgICAgICogIEBwYXJhbSAgaWwgIEFuIGluaXRpYWxpemVyX2xpc3Qgb2YgdmFsdWVfdHlwZS4KKyAgICAgICAqCisgICAgICAgKiAgUmVwbGFjZSB0aGUgY29udGVudHMgb2YgdGhlICVmb3J3YXJkX2xpc3Qgd2l0aCBjb3BpZXMgb2YgdGhlCisgICAgICAgKiAgZWxlbWVudHMgaW4gdGhlIGluaXRpYWxpemVyX2xpc3QgQGEgaWwuICBUaGlzIGlzIGxpbmVhciBpbgorICAgICAgICogIGlsLnNpemUoKS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgYXNzaWduKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfVHA+IF9faWwpCisgICAgICB7CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIGluc2VydF9hZnRlcihjYmVmb3JlX2JlZ2luKCksIF9faWwpOworICAgICAgfQorCisgICAgICAvLy8gR2V0IGEgY29weSBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gb2JqZWN0LgorICAgICAgYWxsb2NhdG9yX3R5cGUKKyAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01fZ2V0X05vZGVfYWxsb2NhdG9yKCk7IH0KKworICAgICAgLy8gMjMuMi4zLjIgaXRlcmF0b3JzOgorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSBpdGVyYXRvciB0aGF0IHBvaW50cyBiZWZvcmUgdGhlIGZpcnN0IGVsZW1lbnQKKyAgICAgICAqICBpbiB0aGUgJWZvcndhcmRfbGlzdC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIG9yZGluYXJ5IGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWZvcmVfYmVnaW4oKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoJnRoaXMtPl9NX2ltcGwuX01faGVhZCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIGJlZm9yZSB0aGUKKyAgICAgICAqICBmaXJzdCBlbGVtZW50IGluIHRoZSAlZm9yd2FyZF9saXN0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gb3JkaW5hcnkKKyAgICAgICAqICBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVmb3JlX2JlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKCZ0aGlzLT5fTV9pbXBsLl9NX2hlYWQpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBmaXJzdCBlbGVtZW50CisgICAgICAgKiAgaW4gdGhlICVmb3J3YXJkX2xpc3QuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBvcmRpbmFyeSBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IodGhpcy0+X01faW1wbC5fTV9oZWFkLl9NX25leHQpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgZmlyc3QKKyAgICAgICAqICBlbGVtZW50IGluIHRoZSAlZm9yd2FyZF9saXN0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gb3JkaW5hcnkKKyAgICAgICAqICBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcy0+X01faW1wbC5fTV9oZWFkLl9NX25leHQpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIG9uZSBwYXN0IHRoZSBsYXN0CisgICAgICAgKiAgZWxlbWVudCBpbiB0aGUgJWZvcndhcmRfbGlzdC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIG9yZGluYXJ5CisgICAgICAgKiAgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpCisgICAgICB7IHJldHVybiBpdGVyYXRvcigwKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IGl0ZXJhdG9yIHRoYXQgcG9pbnRzIG9uZSBwYXN0IHRoZSBsYXN0CisgICAgICAgKiAgZWxlbWVudCBpbiB0aGUgJWZvcndhcmRfbGlzdC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIG9yZGluYXJ5CisgICAgICAgKiAgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcigwKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlCisgICAgICAgKiAgZmlyc3QgZWxlbWVudCBpbiB0aGUgJWZvcndhcmRfbGlzdC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIG9yZGluYXJ5CisgICAgICAgKiAgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlzLT5fTV9pbXBsLl9NX2hlYWQuX01fbmV4dCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIGJlZm9yZSB0aGUKKyAgICAgICAqICBmaXJzdCBlbGVtZW50IGluIHRoZSAlZm9yd2FyZF9saXN0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gb3JkaW5hcnkKKyAgICAgICAqICBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZm9yZV9iZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcigmdGhpcy0+X01faW1wbC5fTV9oZWFkKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgb25lIHBhc3QKKyAgICAgICAqICB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSAlZm9yd2FyZF9saXN0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4KKyAgICAgICAqICBvcmRpbmFyeSBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcigwKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIHRydWUgaWYgdGhlICVmb3J3YXJkX2xpc3QgaXMgZW1wdHkuICAoVGh1cyBiZWdpbigpIHdvdWxkCisgICAgICAgKiAgZXF1YWwgZW5kKCkuKQorICAgICAgICovCisgICAgICBib29sCisgICAgICBlbXB0eSgpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5fTV9pbXBsLl9NX2hlYWQuX01fbmV4dCA9PSAwOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgdGhlIGxhcmdlc3QgcG9zc2libGUgc2l6ZSBvZiAlZm9yd2FyZF9saXN0LgorICAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2dldF9Ob2RlX2FsbG9jYXRvcigpLm1heF9zaXplKCk7IH0KKworICAgICAgLy8gMjMuMi4zLjMgZWxlbWVudCBhY2Nlc3M6CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIHJlZmVyZW5jZSB0byB0aGUgZGF0YSBhdCB0aGUgZmlyc3QKKyAgICAgICAqICBlbGVtZW50IG9mIHRoZSAlZm9yd2FyZF9saXN0LgorICAgICAgICovCisgICAgICByZWZlcmVuY2UKKyAgICAgIGZyb250KCkKKyAgICAgIHsKKyAgICAgICAgX05vZGUqIF9fZnJvbnQgPSBzdGF0aWNfY2FzdDxfTm9kZSo+KHRoaXMtPl9NX2ltcGwuX01faGVhZC5fTV9uZXh0KTsKKyAgICAgICAgcmV0dXJuIF9fZnJvbnQtPl9NX3ZhbHVlOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmVmZXJlbmNlIHRvIHRoZSBkYXRhIGF0IHRoZSBmaXJzdAorICAgICAgICogIGVsZW1lbnQgb2YgdGhlICVmb3J3YXJkX2xpc3QuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgZnJvbnQoKSBjb25zdAorICAgICAgeworICAgICAgICBfTm9kZSogX19mcm9udCA9IHN0YXRpY19jYXN0PF9Ob2RlKj4odGhpcy0+X01faW1wbC5fTV9oZWFkLl9NX25leHQpOworICAgICAgICByZXR1cm4gX19mcm9udC0+X01fdmFsdWU7CisgICAgICB9CisKKyAgICAgIC8vIDIzLjIuMy40IG1vZGnvrIFlcnM6CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0cyBvYmplY3QgaW4gJWZvcndhcmRfbGlzdCBhdCB0aGUgZnJvbnQgb2YgdGhlCisgICAgICAgKiAgICAgICAgICBsaXN0LgorICAgICAgICogIEBwYXJhbSAgYXJncyAgQXJndW1lbnRzLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgaW5zZXJ0IGFuIG9iamVjdCBvZiB0eXBlIFRwIGNvbnN0cnVjdGVkCisgICAgICAgKiAgd2l0aCBUcChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pIGF0IHRoZSBmcm9udCBvZiB0aGUgbGlzdAorICAgICAgICogIER1ZSB0byB0aGUgbmF0dXJlIG9mIGEgJWZvcndhcmRfbGlzdCB0aGlzIG9wZXJhdGlvbiBjYW4KKyAgICAgICAqICBiZSBkb25lIGluIGNvbnN0YW50IHRpbWUsIGFuZCBkb2VzIG5vdCBpbnZhbGlkYXRlIGl0ZXJhdG9ycworICAgICAgICogIGFuZCByZWZlcmVuY2VzLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgdm9pZAorICAgICAgICBlbXBsYWNlX2Zyb250KF9BcmdzJiYuLi4gX19hcmdzKQorICAgICAgICB7IHRoaXMtPl9NX2luc2VydF9hZnRlcihjYmVmb3JlX2JlZ2luKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBZGQgZGF0YSB0byB0aGUgZnJvbnQgb2YgdGhlICVmb3J3YXJkX2xpc3QuCisgICAgICAgKiAgQHBhcmFtICB2YWwgIERhdGEgdG8gYmUgYWRkZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgaXMgYSB0eXBpY2FsIHN0YWNrIG9wZXJhdGlvbi4gIFRoZSBmdW5jdGlvbiBjcmVhdGVzIGFuCisgICAgICAgKiAgZWxlbWVudCBhdCB0aGUgZnJvbnQgb2YgdGhlICVmb3J3YXJkX2xpc3QgYW5kIGFzc2lnbnMgdGhlIGdpdmVuCisgICAgICAgKiAgZGF0YSB0byBpdC4gIER1ZSB0byB0aGUgbmF0dXJlIG9mIGEgJWZvcndhcmRfbGlzdCB0aGlzIG9wZXJhdGlvbgorICAgICAgICogIGNhbiBiZSBkb25lIGluIGNvbnN0YW50IHRpbWUsIGFuZCBkb2VzIG5vdCBpbnZhbGlkYXRlIGl0ZXJhdG9ycworICAgICAgICogIGFuZCByZWZlcmVuY2VzLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwdXNoX2Zyb250KGNvbnN0IF9UcCYgX192YWwpCisgICAgICB7IHRoaXMtPl9NX2luc2VydF9hZnRlcihjYmVmb3JlX2JlZ2luKCksIF9fdmFsKTsgfQorCisgICAgICAvKioKKyAgICAgICAqCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfZnJvbnQoX1RwJiYgX192YWwpCisgICAgICB7IHRoaXMtPl9NX2luc2VydF9hZnRlcihjYmVmb3JlX2JlZ2luKCksIHN0ZDo6bW92ZShfX3ZhbCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVtb3ZlcyBmaXJzdCBlbGVtZW50LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGlzIGEgdHlwaWNhbCBzdGFjayBvcGVyYXRpb24uICBJdCBzaHJpbmtzIHRoZSAlZm9yd2FyZF9saXN0CisgICAgICAgKiAgYnkgb25lLiAgRHVlIHRvIHRoZSBuYXR1cmUgb2YgYSAlZm9yd2FyZF9saXN0IHRoaXMgb3BlcmF0aW9uIGNhbgorICAgICAgICogIGJlIGRvbmUgaW4gY29uc3RhbnQgdGltZSwgYW5kIG9ubHkgaW52YWxpZGF0ZXMgaXRlcmF0b3JzL3JlZmVyZW5jZXMKKyAgICAgICAqICB0byB0aGUgZWxlbWVudCBiZWluZyByZW1vdmVkLgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgbm8gZGF0YSBpcyByZXR1cm5lZCwgYW5kIGlmIHRoZSBmaXJzdCBlbGVtZW50J3MgZGF0YQorICAgICAgICogIGlzIG5lZWRlZCwgaXQgc2hvdWxkIGJlIHJldHJpZXZlZCBiZWZvcmUgcG9wX2Zyb250KCkgaXMKKyAgICAgICAqICBjYWxsZWQuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHBvcF9mcm9udCgpCisgICAgICB7IHRoaXMtPl9NX2VyYXNlX2FmdGVyKCZ0aGlzLT5fTV9pbXBsLl9NX2hlYWQpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0cyBvYmplY3QgaW4gJWZvcndhcmRfbGlzdCBhZnRlciB0aGUgc3BlY2lmaWVkCisgICAgICAgKiAgICAgICAgICBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIHBvcyAgQSBjb25zdF9pdGVyYXRvciBpbnRvIHRoZSAlZm9yd2FyZF9saXN0LgorICAgICAgICogIEBwYXJhbSAgYXJncyAgQXJndW1lbnRzLgorICAgICAgICogIEByZXR1cm4gIEFuIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBpbnNlcnRlZCBkYXRhLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgaW5zZXJ0IGFuIG9iamVjdCBvZiB0eXBlIFQgY29uc3RydWN0ZWQKKyAgICAgICAqICB3aXRoIFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSBhZnRlciB0aGUgc3BlY2lmaWVkCisgICAgICAgKiAgbG9jYXRpb24uICBEdWUgdG8gdGhlIG5hdHVyZSBvZiBhICVmb3J3YXJkX2xpc3QgdGhpcyBvcGVyYXRpb24gY2FuCisgICAgICAgKiAgYmUgZG9uZSBpbiBjb25zdGFudCB0aW1lLCBhbmQgZG9lcyBub3QgaW52YWxpZGF0ZSBpdGVyYXRvcnMKKyAgICAgICAqICBhbmQgcmVmZXJlbmNlcy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIGl0ZXJhdG9yCisgICAgICAgIGVtcGxhY2VfYWZ0ZXIoY29uc3RfaXRlcmF0b3IgX19wb3MsIF9BcmdzJiYuLi4gX19hcmdzKQorICAgICAgICB7IHJldHVybiBpdGVyYXRvcih0aGlzLT5fTV9pbnNlcnRfYWZ0ZXIoX19wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydHMgZ2l2ZW4gdmFsdWUgaW50byAlZm9yd2FyZF9saXN0IGFmdGVyIHNwZWNpZmllZAorICAgICAgICogICAgICAgICAgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBwb3MgIEFuIGl0ZXJhdG9yIGludG8gdGhlICVmb3J3YXJkX2xpc3QuCisgICAgICAgKiAgQHBhcmFtICB2YWwgIERhdGEgdG8gYmUgaW5zZXJ0ZWQuCisgICAgICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGluc2VydGVkIGRhdGEuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBpbnNlcnQgYSBjb3B5IG9mIHRoZSBnaXZlbiB2YWx1ZSBhZnRlcgorICAgICAgICogIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uICBEdWUgdG8gdGhlIG5hdHVyZSBvZiBhICVmb3J3YXJkX2xpc3QgdGhpcworICAgICAgICogIG9wZXJhdGlvbiBjYW4gYmUgZG9uZSBpbiBjb25zdGFudCB0aW1lLCBhbmQgZG9lcyBub3QKKyAgICAgICAqICBpbnZhbGlkYXRlIGl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcy4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydF9hZnRlcihjb25zdF9pdGVyYXRvciBfX3BvcywgY29uc3QgX1RwJiBfX3ZhbCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMtPl9NX2luc2VydF9hZnRlcihfX3BvcywgX192YWwpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnRfYWZ0ZXIoY29uc3RfaXRlcmF0b3IgX19wb3MsIF9UcCYmIF9fdmFsKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IodGhpcy0+X01faW5zZXJ0X2FmdGVyKF9fcG9zLCBzdGQ6Om1vdmUoX192YWwpKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnRzIGEgbnVtYmVyIG9mIGNvcGllcyBvZiBnaXZlbiBkYXRhIGludG8gdGhlCisgICAgICAgKiAgICAgICAgICAlZm9yd2FyZF9saXN0LgorICAgICAgICogIEBwYXJhbSAgcG9zICBBbiBpdGVyYXRvciBpbnRvIHRoZSAlZm9yd2FyZF9saXN0LgorICAgICAgICogIEBwYXJhbSAgbiAgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIGJlIGluc2VydGVkLgorICAgICAgICogIEBwYXJhbSAgdmFsICBEYXRhIHRvIGJlIGluc2VydGVkLgorICAgICAgICogIEByZXR1cm4gIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBsYXN0IGluc2VydGVkIGNvcHkgb2YKKyAgICAgICAqICAgICAgICAgICBAYSB2YWwgb3IgQGEgcG9zIGlmIEBhIG4gPT0gMC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGluc2VydCBhIHNwZWNpZmllZCBudW1iZXIgb2YgY29waWVzIG9mIHRoZQorICAgICAgICogIGdpdmVuIGRhdGEgYWZ0ZXIgdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBieSBAYSBwb3MuCisgICAgICAgKgorICAgICAgICogIFRoaXMgb3BlcmF0aW9uIGlzIGxpbmVhciBpbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluc2VydGVkIGFuZAorICAgICAgICogIGRvZXMgbm90IGludmFsaWRhdGUgaXRlcmF0b3JzIGFuZCByZWZlcmVuY2VzLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0X2FmdGVyKGNvbnN0X2l0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnRzIGEgcmFuZ2UgaW50byB0aGUgJWZvcndhcmRfbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIHBvc2l0aW9uICBBbiBpdGVyYXRvciBpbnRvIHRoZSAlZm9yd2FyZF9saXN0LgorICAgICAgICogIEBwYXJhbSAgZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgbGFzdCAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEByZXR1cm4gIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBsYXN0IGluc2VydGVkIGVsZW1lbnQgb3IKKyAgICAgICAqICAgICAgICAgICBAYSBwb3MgaWYgQGEgZmlyc3QgPT0gQGEgbGFzdC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGluc2VydCBjb3BpZXMgb2YgdGhlIGRhdGEgaW4gdGhlIHJhbmdlIFtAYQorICAgICAgICogIGZpcnN0LEBhIGxhc3QpIGludG8gdGhlICVmb3J3YXJkX2xpc3QgYWZ0ZXIgdGhlIGxvY2F0aW9uIHNwZWNpZmllZAorICAgICAgICogIGJ5IEBhIHBvcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBvcGVyYXRpb24gaXMgbGluZWFyIGluIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW5zZXJ0ZWQgYW5kCisgICAgICAgKiAgZG9lcyBub3QgaW52YWxpZGF0ZSBpdGVyYXRvcnMgYW5kIHJlZmVyZW5jZXMuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBpdGVyYXRvcgorICAgICAgICBpbnNlcnRfYWZ0ZXIoY29uc3RfaXRlcmF0b3IgX19wb3MsCisgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydHMgdGhlIGNvbnRlbnRzIG9mIGFuIGluaXRpYWxpemVyX2xpc3QgaW50bworICAgICAgICogICAgICAgICAgJWZvcndhcmRfbGlzdCBhZnRlciB0aGUgc3BlY2lmaWVkIGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgcG9zICBBbiBpdGVyYXRvciBpbnRvIHRoZSAlZm9yd2FyZF9saXN0LgorICAgICAgICogIEBwYXJhbSAgaWwgIEFuIGluaXRpYWxpemVyX2xpc3Qgb2YgdmFsdWVfdHlwZS4KKyAgICAgICAqICBAcmV0dXJuICBBbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgbGFzdCBpbnNlcnRlZCBlbGVtZW50CisgICAgICAgKiAgICAgICAgICAgb3IgQGEgcG9zIGlmIEBhIGlsIGlzIGVtcHR5LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgaW5zZXJ0IGNvcGllcyBvZiB0aGUgZGF0YSBpbiB0aGUKKyAgICAgICAqICBpbml0aWFsaXplcl9saXN0IEBhIGlsIGludG8gdGhlICVmb3J3YXJkX2xpc3QgYmVmb3JlIHRoZSBsb2NhdGlvbgorICAgICAgICogIHNwZWNpZmllZCBieSBAYSBwb3MuCisgICAgICAgKgorICAgICAgICogIFRoaXMgb3BlcmF0aW9uIGlzIGxpbmVhciBpbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluc2VydGVkIGFuZAorICAgICAgICogIGRvZXMgbm90IGludmFsaWRhdGUgaXRlcmF0b3JzIGFuZCByZWZlcmVuY2VzLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0X2FmdGVyKGNvbnN0X2l0ZXJhdG9yIF9fcG9zLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X1RwPiBfX2lsKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZW1vdmVzIHRoZSBlbGVtZW50IHBvaW50ZWQgdG8gYnkgdGhlIGl0ZXJhdG9yIGZvbGxvd2luZworICAgICAgICogICAgICAgICAgQGMgcG9zLgorICAgICAgICogIEBwYXJhbSAgcG9zICBJdGVyYXRvciBwb2ludGluZyBiZWZvcmUgZWxlbWVudCB0byBiZSBlcmFzZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBlcmFzZSB0aGUgZWxlbWVudCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kCisgICAgICAgKiAgdGh1cyBzaG9ydGVuIHRoZSAlZm9yd2FyZF9saXN0IGJ5IG9uZS4KKyAgICAgICAqCisgICAgICAgKiAgRHVlIHRvIHRoZSBuYXR1cmUgb2YgYSAlZm9yd2FyZF9saXN0IHRoaXMgb3BlcmF0aW9uIGNhbiBiZSBkb25lCisgICAgICAgKiAgaW4gY29uc3RhbnQgdGltZSwgYW5kIG9ubHkgaW52YWxpZGF0ZXMgaXRlcmF0b3JzL3JlZmVyZW5jZXMgdG8KKyAgICAgICAqICB0aGUgZWxlbWVudCBiZWluZyByZW1vdmVkLiAgVGhlIHVzZXIgaXMgYWxzbyBjYXV0aW9uZWQgdGhhdAorICAgICAgICogIHRoaXMgZnVuY3Rpb24gb25seSBlcmFzZXMgdGhlIGVsZW1lbnQsIGFuZCB0aGF0IGlmIHRoZSBlbGVtZW50CisgICAgICAgKiAgaXMgaXRzZWxmIGEgcG9pbnRlciwgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkIGluCisgICAgICAgKiAgYW55IHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlX2FmdGVyKGNvbnN0X2l0ZXJhdG9yIF9fcG9zKQorICAgICAgeyB0aGlzLT5fTV9lcmFzZV9hZnRlcihjb25zdF9jYXN0PF9Ob2RlX2Jhc2UqPihfX3Bvcy5fTV9ub2RlKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZW1vdmUgYSByYW5nZSBvZiBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gIHBvcyAgSXRlcmF0b3IgcG9pbnRpbmcgYmVmb3JlIHRoZSBmaXJzdCBlbGVtZW50IHRvIGJlCisgICAgICAgKiAgICAgICAgICAgICAgIGVyYXNlZC4KKyAgICAgICAqICBAcGFyYW0gIGxhc3QgIEl0ZXJhdG9yIHBvaW50aW5nIHRvIG9uZSBwYXN0IHRoZSBsYXN0IGVsZW1lbnQgdG8gYmUKKyAgICAgICAqICAgICAgICAgICAgICAgIGVyYXNlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGVyYXNlIHRoZSBlbGVtZW50cyBpbiB0aGUgcmFuZ2UgQGEKKyAgICAgICAqICAocG9zLGxhc3QpIGFuZCBzaG9ydGVuIHRoZSAlZm9yd2FyZF9saXN0IGFjY29yZGluZ2x5LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIG9wZXJhdGlvbiBpcyBsaW5lYXIgdGltZSBpbiB0aGUgc2l6ZSBvZiB0aGUgcmFuZ2UgYW5kIG9ubHkKKyAgICAgICAqICBpbnZhbGlkYXRlcyBpdGVyYXRvcnMvcmVmZXJlbmNlcyB0byB0aGUgZWxlbWVudCBiZWluZyByZW1vdmVkLgorICAgICAgICogIFRoZSB1c2VyIGlzIGFsc28gY2F1dGlvbmVkIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUKKyAgICAgICAqICBlbGVtZW50cywgYW5kIHRoYXQgaWYgdGhlIGVsZW1lbnRzIHRoZW1zZWx2ZXMgYXJlIHBvaW50ZXJzLCB0aGUKKyAgICAgICAqICBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZCBpbiBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIKKyAgICAgICAqICBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBlcmFzZV9hZnRlcihjb25zdF9pdGVyYXRvciBfX3BvcywgY29uc3RfaXRlcmF0b3IgX19sYXN0KQorICAgICAgeyB0aGlzLT5fTV9lcmFzZV9hZnRlcihjb25zdF9jYXN0PF9Ob2RlX2Jhc2UqPihfX3Bvcy5fTV9ub2RlKSwKKwkJCSAgICAgY29uc3RfY2FzdDxfTm9kZV9iYXNlKj4oX19sYXN0Ll9NX25vZGUpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFN3YXBzIGRhdGEgd2l0aCBhbm90aGVyICVmb3J3YXJkX2xpc3QuCisgICAgICAgKiAgQHBhcmFtICBsaXN0ICBBICVmb3J3YXJkX2xpc3Qgb2YgdGhlIHNhbWUgZWxlbWVudCBhbmQgYWxsb2NhdG9yCisgICAgICAgKiAgICAgICAgICAgICAgICB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBleGNoYW5nZXMgdGhlIGVsZW1lbnRzIGJldHdlZW4gdHdvIGxpc3RzIGluIGNvbnN0YW50CisgICAgICAgKiAgdGltZS4gIE5vdGUgdGhhdCB0aGUgZ2xvYmFsIHN0ZDo6c3dhcCgpIGZ1bmN0aW9uIGlzCisgICAgICAgKiAgc3BlY2lhbGl6ZWQgc3VjaCB0aGF0IHN0ZDo6c3dhcChsMSxsMikgd2lsbCBmZWVkIHRvIHRoaXMKKyAgICAgICAqICBmdW5jdGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgc3dhcChmb3J3YXJkX2xpc3QmIF9fbGlzdCkKKyAgICAgIHsgX05vZGVfYmFzZTo6c3dhcCh0aGlzLT5fTV9pbXBsLl9NX2hlYWQsIF9fbGlzdC5fTV9pbXBsLl9NX2hlYWQpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBSZXNpemVzIHRoZSAlZm9yd2FyZF9saXN0IHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mCisgICAgICAgKiAgICAgICAgIGVsZW1lbnRzLgorICAgICAgICogIEBwYXJhbSBzeiBOdW1iZXIgb2YgZWxlbWVudHMgdGhlICVmb3J3YXJkX2xpc3Qgc2hvdWxkIGNvbnRhaW4uCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCAlcmVzaXplIHRoZSAlZm9yd2FyZF9saXN0IHRvIHRoZSBzcGVjaWZpZWQKKyAgICAgICAqICBudW1iZXIgb2YgZWxlbWVudHMuICBJZiB0aGUgbnVtYmVyIGlzIHNtYWxsZXIgdGhhbiB0aGUKKyAgICAgICAqICAlZm9yd2FyZF9saXN0J3MgY3VycmVudCBzaXplIHRoZSAlZm9yd2FyZF9saXN0IGlzIHRydW5jYXRlZCwKKyAgICAgICAqICBvdGhlcndpc2UgdGhlICVmb3J3YXJkX2xpc3QgaXMgZXh0ZW5kZWQgYW5kIHRoZSBuZXcgZWxlbWVudHMKKyAgICAgICAqICBhcmUgZGVmYXVsdCBjb25zdHJ1Y3RlZC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX3N6KTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFJlc2l6ZXMgdGhlICVmb3J3YXJkX2xpc3QgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YKKyAgICAgICAqICAgICAgICAgZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtIHN6IE51bWJlciBvZiBlbGVtZW50cyB0aGUgJWZvcndhcmRfbGlzdCBzaG91bGQgY29udGFpbi4KKyAgICAgICAqICBAcGFyYW0gdmFsIERhdGEgd2l0aCB3aGljaCBuZXcgZWxlbWVudHMgc2hvdWxkIGJlIHBvcHVsYXRlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsICVyZXNpemUgdGhlICVmb3J3YXJkX2xpc3QgdG8gdGhlIHNwZWNpZmllZAorICAgICAgICogIG51bWJlciBvZiBlbGVtZW50cy4gIElmIHRoZSBudW1iZXIgaXMgc21hbGxlciB0aGFuIHRoZQorICAgICAgICogICVmb3J3YXJkX2xpc3QncyBjdXJyZW50IHNpemUgdGhlICVmb3J3YXJkX2xpc3QgaXMgdHJ1bmNhdGVkLAorICAgICAgICogIG90aGVyd2lzZSB0aGUgJWZvcndhcmRfbGlzdCBpcyBleHRlbmRlZCBhbmQgbmV3IGVsZW1lbnRzIGFyZQorICAgICAgICogIHBvcHVsYXRlZCB3aXRoIGdpdmVuIGRhdGEuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19zeiwgdmFsdWVfdHlwZSBfX3ZhbCk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRXJhc2VzIGFsbCB0aGUgZWxlbWVudHMuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzCisgICAgICAgKiAgdGhlIGVsZW1lbnRzLCBhbmQgdGhhdCBpZiB0aGUgZWxlbWVudHMgdGhlbXNlbHZlcyBhcmUKKyAgICAgICAqICBwb2ludGVycywgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkIGluIGFueSB3YXkuCisgICAgICAgKiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgY2xlYXIoKQorICAgICAgeyB0aGlzLT5fTV9lcmFzZV9hZnRlcigmdGhpcy0+X01faW1wbC5fTV9oZWFkLCAwKTsgfQorCisgICAgICAvLyAyMy4yLjMuNSBmb3J3YXJkX2xpc3Qgb3BlcmF0aW9uczoKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnQgY29udGVudHMgb2YgYW5vdGhlciAlZm9yd2FyZF9saXN0LgorICAgICAgICogIEBwYXJhbSAgcG9zICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgZWxlbWVudCB0byBpbnNlcnQgYWZ0ZXIuCisgICAgICAgKiAgQHBhcmFtICBsaXN0ICBTb3VyY2UgbGlzdC4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGVsZW1lbnRzIG9mIEBhIGxpc3QgYXJlIGluc2VydGVkIGluIGNvbnN0YW50IHRpbWUgYWZ0ZXIKKyAgICAgICAqICB0aGUgZWxlbWVudCByZWZlcmVuY2VkIGJ5IEBhIHBvcy4gIEBhIGxpc3QgYmVjb21lcyBhbiBlbXB0eQorICAgICAgICogIGxpc3QuCisgICAgICAgKgorICAgICAgICogIFJlcXVpcmVzIHRoaXMgIT0gQGEgeC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgc3BsaWNlX2FmdGVyKGNvbnN0X2l0ZXJhdG9yIF9fcG9zLCBmb3J3YXJkX2xpc3QmJiBfX2xpc3QpCisgICAgICB7CisJaWYgKCFfX2xpc3QuZW1wdHkoKSkKKwkgIF9NX3NwbGljZV9hZnRlcihfX3Bvcywgc3RkOjptb3ZlKF9fbGlzdCkpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydCBlbGVtZW50IGZyb20gYW5vdGhlciAlZm9yd2FyZF9saXN0LgorICAgICAgICogIEBwYXJhbSAgcG9zICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgZWxlbWVudCB0byBpbnNlcnQgYWZ0ZXIuCisgICAgICAgKiAgQHBhcmFtICBsaXN0ICBTb3VyY2UgbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIGkgICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgZWxlbWVudCBiZWZvcmUgdGhlIGVsZW1lbnQKKyAgICAgICAqICAgICAgICAgICAgICB0byBtb3ZlLgorICAgICAgICoKKyAgICAgICAqICBSZW1vdmVzIHRoZSBlbGVtZW50IGluIGxpc3QgQGEgbGlzdCByZWZlcmVuY2VkIGJ5IEBhIGkgYW5kCisgICAgICAgKiAgaW5zZXJ0cyBpdCBpbnRvIHRoZSBjdXJyZW50IGxpc3QgYWZ0ZXIgQGEgcG9zLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBzcGxpY2VfYWZ0ZXIoY29uc3RfaXRlcmF0b3IgX19wb3MsIGZvcndhcmRfbGlzdCYmIF9fbGlzdCwKKyAgICAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvciBfX2kpCisgICAgICB7CisJY29uc3RfaXRlcmF0b3IgX19qID0gX19pOworCSsrX19qOworCWlmIChfX3BvcyA9PSBfX2kgfHwgX19wb3MgPT0gX19qKQorCSAgcmV0dXJuOworCisJc3BsaWNlX2FmdGVyKF9fcG9zLCBzdGQ6Om1vdmUoX19saXN0KSwgX19pLCBfX2opOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydCByYW5nZSBmcm9tIGFub3RoZXIgJWZvcndhcmRfbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIHBvcyAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgdGhlIGVsZW1lbnQgdG8gaW5zZXJ0IGFmdGVyLgorICAgICAgICogIEBwYXJhbSAgbGlzdCAgU291cmNlIGxpc3QuCisgICAgICAgKiAgQHBhcmFtICBiZWZvcmUgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIGJlZm9yZSB0aGUgc3RhcnQgb2YgcmFuZ2UKKyAgICAgICAqICAgICAgICAgICAgICAgICAgaW4gbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIGxhc3QgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIHRoZSBlbmQgb2YgcmFuZ2UgaW4gbGlzdC4KKyAgICAgICAqCisgICAgICAgKiAgUmVtb3ZlcyBlbGVtZW50cyBpbiB0aGUgcmFuZ2UgKGJlZm9yZSxsYXN0KSBhbmQgaW5zZXJ0cyB0aGVtCisgICAgICAgKiAgYWZ0ZXIgQGEgcG9zIGluIGNvbnN0YW50IHRpbWUuCisgICAgICAgKgorICAgICAgICogIFVuZGVmaW5lZCBpZiBAYSBwb3MgaXMgaW4gKGJlZm9yZSxsYXN0KS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgc3BsaWNlX2FmdGVyKGNvbnN0X2l0ZXJhdG9yIF9fcG9zLCBmb3J3YXJkX2xpc3QmJiBfX2xpc3QsCisgICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3IgX19iZWZvcmUsIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdCk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVtb3ZlIGFsbCBlbGVtZW50cyBlcXVhbCB0byB2YWx1ZS4KKyAgICAgICAqICBAcGFyYW0gIHZhbCAgVGhlIHZhbHVlIHRvIHJlbW92ZS4KKyAgICAgICAqCisgICAgICAgKiAgUmVtb3ZlcyBldmVyeSBlbGVtZW50IGluIHRoZSBsaXN0IGVxdWFsIHRvIEBhIHZhbHVlLgorICAgICAgICogIFJlbWFpbmluZyBlbGVtZW50cyBzdGF5IGluIGxpc3Qgb3JkZXIuICBOb3RlIHRoYXQgdGhpcworICAgICAgICogIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50cywgYW5kIHRoYXQgaWYgdGhlIGVsZW1lbnRzCisgICAgICAgKiAgdGhlbXNlbHZlcyBhcmUgcG9pbnRlcnMsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QKKyAgICAgICAqICB0b3VjaGVkIGluIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzCisgICAgICAgKiAgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlbW92ZShjb25zdCBfVHAmIF9fdmFsKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZW1vdmUgYWxsIGVsZW1lbnRzIHNhdGlzZnlpbmcgYSBwcmVkaWNhdGUuCisgICAgICAgKiAgQHBhcmFtICBwcmVkICBVbmFyeSBwcmVkaWNhdGUgZnVuY3Rpb24gb3Igb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqICBSZW1vdmVzIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIGxpc3QgZm9yIHdoaWNoIHRoZSBwcmVkaWNhdGUKKyAgICAgICAqICByZXR1cm5zIHRydWUuICBSZW1haW5pbmcgZWxlbWVudHMgc3RheSBpbiBsaXN0IG9yZGVyLiAgTm90ZQorICAgICAgICogIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudHMsIGFuZCB0aGF0IGlmIHRoZQorICAgICAgICogIGVsZW1lbnRzIHRoZW1zZWx2ZXMgYXJlIHBvaW50ZXJzLCB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMKKyAgICAgICAqICBub3QgdG91Y2hlZCBpbiBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncworICAgICAgICogIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUHJlZD4KKyAgICAgICAgdm9pZAorICAgICAgICByZW1vdmVfaWYoX1ByZWQgX19wcmVkKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZW1vdmUgY29uc2VjdXRpdmUgZHVwbGljYXRlIGVsZW1lbnRzLgorICAgICAgICoKKyAgICAgICAqICBGb3IgZWFjaCBjb25zZWN1dGl2ZSBzZXQgb2YgZWxlbWVudHMgd2l0aCB0aGUgc2FtZSB2YWx1ZSwKKyAgICAgICAqICByZW1vdmUgYWxsIGJ1dCB0aGUgZmlyc3Qgb25lLiAgUmVtYWluaW5nIGVsZW1lbnRzIHN0YXkgaW4KKyAgICAgICAqICBsaXN0IG9yZGVyLiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gb25seSBlcmFzZXMgdGhlCisgICAgICAgKiAgZWxlbWVudHMsIGFuZCB0aGF0IGlmIHRoZSBlbGVtZW50cyB0aGVtc2VsdmVzIGFyZSBwb2ludGVycywKKyAgICAgICAqICB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQgaW4gYW55IHdheS4gIE1hbmFnaW5nCisgICAgICAgKiAgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgdW5pcXVlKCkKKyAgICAgIHsgdGhpcy0+dW5pcXVlKHN0ZDo6ZXF1YWxfdG88X1RwPigpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZSBjb25zZWN1dGl2ZSBlbGVtZW50cyBzYXRpc2Z5aW5nIGEgcHJlZGljYXRlLgorICAgICAgICogIEBwYXJhbSAgYmluYXJ5X3ByZWQgIEJpbmFyeSBwcmVkaWNhdGUgZnVuY3Rpb24gb3Igb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqICBGb3IgZWFjaCBjb25zZWN1dGl2ZSBzZXQgb2YgZWxlbWVudHMgW2ZpcnN0LGxhc3QpIHRoYXQKKyAgICAgICAqICBzYXRpc2Z5IHByZWRpY2F0ZShmaXJzdCxpKSB3aGVyZSBpIGlzIGFuIGl0ZXJhdG9yIGluCisgICAgICAgKiAgW2ZpcnN0LGxhc3QpLCByZW1vdmUgYWxsIGJ1dCB0aGUgZmlyc3Qgb25lLiAgUmVtYWluaW5nCisgICAgICAgKiAgZWxlbWVudHMgc3RheSBpbiBsaXN0IG9yZGVyLiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gb25seQorICAgICAgICogIGVyYXNlcyB0aGUgZWxlbWVudHMsIGFuZCB0aGF0IGlmIHRoZSBlbGVtZW50cyB0aGVtc2VsdmVzIGFyZQorICAgICAgICogIHBvaW50ZXJzLCB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQgaW4gYW55IHdheS4KKyAgICAgICAqICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmluUHJlZD4KKyAgICAgICAgdm9pZAorICAgICAgICB1bmlxdWUoX0JpblByZWQgX19iaW5hcnlfcHJlZCk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTWVyZ2Ugc29ydGVkIGxpc3RzLgorICAgICAgICogIEBwYXJhbSAgbGlzdCAgU29ydGVkIGxpc3QgdG8gbWVyZ2UuCisgICAgICAgKgorICAgICAgICogIEFzc3VtZXMgdGhhdCBib3RoIEBhIGxpc3QgYW5kIHRoaXMgbGlzdCBhcmUgc29ydGVkIGFjY29yZGluZyB0bworICAgICAgICogIG9wZXJhdG9yPCgpLiAgTWVyZ2VzIGVsZW1lbnRzIG9mIEBhIGxpc3QgaW50byB0aGlzIGxpc3QgaW4KKyAgICAgICAqICBzb3J0ZWQgb3JkZXIsIGxlYXZpbmcgQGEgbGlzdCBlbXB0eSB3aGVuIGNvbXBsZXRlLiAgRWxlbWVudHMgaW4KKyAgICAgICAqICB0aGlzIGxpc3QgcHJlY2VkZSBlbGVtZW50cyBpbiBAYSBsaXN0IHRoYXQgYXJlIGVxdWFsLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBtZXJnZShmb3J3YXJkX2xpc3QmJiBfX2xpc3QpCisgICAgICB7IHRoaXMtPm1lcmdlKHN0ZDo6bW92ZShfX2xpc3QpLCBzdGQ6Omxlc3M8X1RwPigpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE1lcmdlIHNvcnRlZCBsaXN0cyBhY2NvcmRpbmcgdG8gY29tcGFyaXNvbiBmdW5jdGlvbi4KKyAgICAgICAqICBAcGFyYW0gIGxpc3QgIFNvcnRlZCBsaXN0IHRvIG1lcmdlLgorICAgICAgICogIEBwYXJhbSAgY29tcCBDb21wYXJpc29uIGZ1bmN0aW9uIGRlZmluaW5nIHNvcnQgb3JkZXIuCisgICAgICAgKgorICAgICAgICogIEFzc3VtZXMgdGhhdCBib3RoIEBhIGxpc3QgYW5kIHRoaXMgbGlzdCBhcmUgc29ydGVkIGFjY29yZGluZyB0bworICAgICAgICogIGNvbXAuICBNZXJnZXMgZWxlbWVudHMgb2YgQGEgbGlzdCBpbnRvIHRoaXMgbGlzdAorICAgICAgICogIGluIHNvcnRlZCBvcmRlciwgbGVhdmluZyBAYSBsaXN0IGVtcHR5IHdoZW4gY29tcGxldGUuICBFbGVtZW50cworICAgICAgICogIGluIHRoaXMgbGlzdCBwcmVjZWRlIGVsZW1lbnRzIGluIEBhIGxpc3QgdGhhdCBhcmUgZXF1aXZhbGVudAorICAgICAgICogIGFjY29yZGluZyB0byBjb21wKCkuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Db21wPgorICAgICAgICB2b2lkCisgICAgICAgIG1lcmdlKGZvcndhcmRfbGlzdCYmIF9fbGlzdCwgX0NvbXAgX19jb21wKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTb3J0IHRoZSBlbGVtZW50cyBvZiB0aGUgbGlzdC4KKyAgICAgICAqCisgICAgICAgKiAgU29ydHMgdGhlIGVsZW1lbnRzIG9mIHRoaXMgbGlzdCBpbiBObG9nTiB0aW1lLiAgRXF1aXZhbGVudAorICAgICAgICogIGVsZW1lbnRzIHJlbWFpbiBpbiBsaXN0IG9yZGVyLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBzb3J0KCkKKyAgICAgIHsgdGhpcy0+c29ydChzdGQ6Omxlc3M8X1RwPigpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNvcnQgdGhlIGZvcndhcmRfbGlzdCB1c2luZyBhIGNvbXBhcmlzb24gZnVuY3Rpb24uCisgICAgICAgKgorICAgICAgICogIFNvcnRzIHRoZSBlbGVtZW50cyBvZiB0aGlzIGxpc3QgaW4gTmxvZ04gdGltZS4gIEVxdWl2YWxlbnQKKyAgICAgICAqICBlbGVtZW50cyByZW1haW4gaW4gbGlzdCBvcmRlci4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbXA+CisgICAgICAgIHZvaWQKKyAgICAgICAgc29ydChfQ29tcCBfX2NvbXApOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldmVyc2UgdGhlIGVsZW1lbnRzIGluIGxpc3QuCisgICAgICAgKgorICAgICAgICogIFJldmVyc2UgdGhlIG9yZGVyIG9mIGVsZW1lbnRzIGluIHRoZSBsaXN0IGluIGxpbmVhciB0aW1lLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXZlcnNlKCkKKyAgICAgIHsgdGhpcy0+X01faW1wbC5fTV9oZWFkLl9NX3JldmVyc2VfYWZ0ZXIoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlZ2VyPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsIF9fdHJ1ZV90eXBlKQorICAgICAgICB7IF9NX2ZpbGxfaW5pdGlhbGl6ZShzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fbiksIF9feCk7IH0KKworICAgICAgLy8gQ2FsbGVkIGJ5IHRoZSByYW5nZSBjb25zdHJ1Y3RvciB0byBpbXBsZW1lbnQgWzIzLjEuMV0vOQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKTsKKworICAgICAgLy8gQ2FsbGVkIGJ5IGZvcndhcmRfbGlzdChuLHYsYSksIGFuZCB0aGUgcmFuZ2UgY29uc3RydWN0b3Igd2hlbiBpdAorICAgICAgLy8gdHVybnMgb3V0IHRvIGJlIHRoZSBzYW1lIHRoaW5nLgorICAgICAgdm9pZAorICAgICAgX01fZmlsbF9pbml0aWFsaXplKHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsdWUpOworCisgICAgICAvLyBDYWxsZWQgYnkgc3BsaWNlX2FmdGVyIGFuZCBpbnNlcnRfYWZ0ZXIuCisgICAgICBpdGVyYXRvcgorICAgICAgX01fc3BsaWNlX2FmdGVyKGNvbnN0X2l0ZXJhdG9yIF9fcG9zLCBmb3J3YXJkX2xpc3QmJiBfX2xpc3QpOworCisgICAgICAvLyBDYWxsZWQgYnkgZm9yd2FyZF9saXN0KG4pLgorICAgICAgdm9pZAorICAgICAgX01fZGVmYXVsdF9pbml0aWFsaXplKHNpemVfdHlwZSBfX24pOworCisgICAgICAvLyBDYWxsZWQgYnkgcmVzaXplKHN6KS4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2RlZmF1bHRfaW5zZXJ0X2FmdGVyKGNvbnN0X2l0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uKTsKKyAgICB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBGb3J3YXJkIGxpc3QgZXF1YWxpdHkgY29tcGFyaXNvbi4KKyAgICogIEBwYXJhbSAgbHggIEEgJWZvcndhcmRfbGlzdAorICAgKiAgQHBhcmFtICBseSAgQSAlZm9yd2FyZF9saXN0IG9mIHRoZSBzYW1lIHR5cGUgYXMgQGEgbHguCisgICAqICBAcmV0dXJuICBUcnVlIGlmZiB0aGUgc2l6ZSBhbmQgZWxlbWVudHMgb2YgdGhlIGZvcndhcmQgbGlzdHMgYXJlIGVxdWFsLgorICAgKgorICAgKiAgVGhpcyBpcyBhbiBlcXVpdmFsZW5jZSByZWxhdGlvbi4gIEl0IGlzIGxpbmVhciBpbiB0aGUgc2l6ZSBvZiB0aGUKKyAgICogIGZvcndhcmQgbGlzdHMuICBEZXF1ZXMgYXJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudCBpZiBjb3JyZXNwb25kaW5nCisgICAqICBlbGVtZW50cyBjb21wYXJlIGVxdWFsLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiYgX19seCwKKyAgICAgICAgICAgICAgIGNvbnN0IGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4mIF9fbHkpOworCisgIC8qKgorICAgKiAgQGJyaWVmICBGb3J3YXJkIGxpc3Qgb3JkZXJpbmcgcmVsYXRpb24uCisgICAqICBAcGFyYW0gIGx4ICBBICVmb3J3YXJkX2xpc3QuCisgICAqICBAcGFyYW0gIGx5ICBBICVmb3J3YXJkX2xpc3Qgb2YgdGhlIHNhbWUgdHlwZSBhcyBAYSBseC4KKyAgICogIEByZXR1cm4gIFRydWUgaWZmIEBhIGx4IGlzIGxleGljb2dyYXBoaWNhbGx5IGxlc3MgdGhhbiBAYSBseS4KKyAgICoKKyAgICogIFRoaXMgaXMgYSB0b3RhbCBvcmRlcmluZyByZWxhdGlvbi4gIEl0IGlzIGxpbmVhciBpbiB0aGUgc2l6ZSBvZiB0aGUKKyAgICogIGZvcndhcmQgbGlzdHMuICBUaGUgZWxlbWVudHMgbXVzdCBiZSBjb21wYXJhYmxlIHdpdGggQGMgPC4KKyAgICoKKyAgICogIFNlZSBzdGQ6OmxleGljb2dyYXBoaWNhbF9jb21wYXJlKCkgZm9yIGhvdyB0aGUgZGV0ZXJtaW5hdGlvbiBpcyBtYWRlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiYgX19seCwKKyAgICAgICAgICAgICAgY29uc3QgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiYgX19seSkKKyAgICB7IHJldHVybiBzdGQ6OmxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9fbHguY2JlZ2luKCksIF9fbHguY2VuZCgpLAorCQkJCQkgIF9fbHkuY2JlZ2luKCksIF9fbHkuY2VuZCgpKTsgfQorCisgIC8vLyBCYXNlZCBvbiBvcGVyYXRvcj09CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+JiBfX2x4LAorICAgICAgICAgICAgICAgY29uc3QgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiYgX19seSkKKyAgICB7IHJldHVybiAhKF9fbHggPT0gX19seSk7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I8CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4mIF9fbHgsCisgICAgICAgICAgICAgIGNvbnN0IGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4mIF9fbHkpCisgICAgeyByZXR1cm4gKF9fbHkgPCBfX2x4KTsgfQorCisgIC8vLyBCYXNlZCBvbiBvcGVyYXRvcjwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4mIF9fbHgsCisgICAgICAgICAgICAgICBjb25zdCBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+JiBfX2x5KQorICAgIHsgcmV0dXJuICEoX19seCA8IF9fbHkpOyB9CisKKyAgLy8vIEJhc2VkIG9uIG9wZXJhdG9yPAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiYgX19seCwKKyAgICAgICAgICAgICAgIGNvbnN0IGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4mIF9fbHkpCisgICAgeyByZXR1cm4gIShfX2x5IDwgX19seCk7IH0KKworICAvLy8gU2VlIHN0ZDo6Zm9yd2FyZF9saXN0Ojpzd2FwKCkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+JiBfX2x4LAorCSBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+JiBfX2x5KQorICAgIHsgX19seC5zd2FwKF9fbHkpOyB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UgLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYgLy8gX0ZPUldBUkRfTElTVF9ICmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvZm9yd2FyZF9saXN0LnRjYyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9mb3J3YXJkX2xpc3QudGNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNzE5YTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvZm9yd2FyZF9saXN0LnRjYwpAQCAtMCwwICsxLDQ4NCBAQAorLy8gPGZvcndhcmRfbGlzdC50Y2M+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZm9yd2FyZF9saXN0LnRjYworICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfRk9SV0FSRF9MSVNUX1RDQworI2RlZmluZSBfRk9SV0FSRF9MSVNUX1RDQyAxCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgX0Z3ZF9saXN0X2Jhc2U8X1RwLCBfQWxsb2M+OjoKKyAgICBfRndkX2xpc3RfYmFzZShjb25zdCBfRndkX2xpc3RfYmFzZSYgX19sc3QsIGNvbnN0IF9BbGxvYyYgX19hKQorICAgIDogX01faW1wbChfX2EpCisgICAgeworICAgICAgdGhpcy0+X01faW1wbC5fTV9oZWFkLl9NX25leHQgPSAwOworICAgICAgX0Z3ZF9saXN0X25vZGVfYmFzZSogX190byA9ICZ0aGlzLT5fTV9pbXBsLl9NX2hlYWQ7CisgICAgICBfTm9kZSogX19jdXJyID0gc3RhdGljX2Nhc3Q8X05vZGUqPihfX2xzdC5fTV9pbXBsLl9NX2hlYWQuX01fbmV4dCk7CisKKyAgICAgIHdoaWxlIChfX2N1cnIpCisgICAgICAgIHsKKyAgICAgICAgICBfX3RvLT5fTV9uZXh0ID0gX01fY3JlYXRlX25vZGUoX19jdXJyLT5fTV92YWx1ZSk7CisgICAgICAgICAgX190byA9IF9fdG8tPl9NX25leHQ7CisgICAgICAgICAgX19jdXJyID0gc3RhdGljX2Nhc3Q8X05vZGUqPihfX2N1cnItPl9NX25leHQpOworICAgICAgICB9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgX0Z3ZF9saXN0X25vZGVfYmFzZSoKKyAgICAgIF9Gd2RfbGlzdF9iYXNlPF9UcCwgX0FsbG9jPjo6CisgICAgICBfTV9pbnNlcnRfYWZ0ZXIoY29uc3RfaXRlcmF0b3IgX19wb3MsIF9BcmdzJiYuLi4gX19hcmdzKQorICAgICAgeworICAgICAgICBfRndkX2xpc3Rfbm9kZV9iYXNlKiBfX3RvCisJICA9IGNvbnN0X2Nhc3Q8X0Z3ZF9saXN0X25vZGVfYmFzZSo+KF9fcG9zLl9NX25vZGUpOworCV9Ob2RlKiBfX3RoaW5nID0gX01fY3JlYXRlX25vZGUoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKyAgICAgICAgX190aGluZy0+X01fbmV4dCA9IF9fdG8tPl9NX25leHQ7CisgICAgICAgIF9fdG8tPl9NX25leHQgPSBfX3RoaW5nOworICAgICAgICByZXR1cm4gX190by0+X01fbmV4dDsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgX0Z3ZF9saXN0X2Jhc2U8X1RwLCBfQWxsb2M+OjoKKyAgICBfTV9lcmFzZV9hZnRlcihfRndkX2xpc3Rfbm9kZV9iYXNlKiBfX3BvcykKKyAgICB7CisgICAgICBfTm9kZSogX19jdXJyID0gc3RhdGljX2Nhc3Q8X05vZGUqPihfX3Bvcy0+X01fbmV4dCk7CisgICAgICBfX3Bvcy0+X01fbmV4dCA9IF9fY3Vyci0+X01fbmV4dDsKKyAgICAgIF9NX2dldF9Ob2RlX2FsbG9jYXRvcigpLmRlc3Ryb3koX19jdXJyKTsKKyAgICAgIF9NX3B1dF9ub2RlKF9fY3Vycik7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBfRndkX2xpc3RfYmFzZTxfVHAsIF9BbGxvYz46OgorICAgIF9NX2VyYXNlX2FmdGVyKF9Gd2RfbGlzdF9ub2RlX2Jhc2UqIF9fcG9zLCAKKyAgICAgICAgICAgICAgICAgICBfRndkX2xpc3Rfbm9kZV9iYXNlKiBfX2xhc3QpCisgICAgeworICAgICAgX05vZGUqIF9fY3VyciA9IHN0YXRpY19jYXN0PF9Ob2RlKj4oX19wb3MtPl9NX25leHQpOworICAgICAgd2hpbGUgKF9fY3VyciAhPSBfX2xhc3QpCisgICAgICAgIHsKKyAgICAgICAgICBfTm9kZSogX190ZW1wID0gX19jdXJyOworICAgICAgICAgIF9fY3VyciA9IHN0YXRpY19jYXN0PF9Ob2RlKj4oX19jdXJyLT5fTV9uZXh0KTsKKyAgICAgICAgICBfTV9nZXRfTm9kZV9hbGxvY2F0b3IoKS5kZXN0cm95KF9fdGVtcCk7CisgICAgICAgICAgX01fcHV0X25vZGUoX190ZW1wKTsKKyAgICAgICAgfQorICAgICAgX19wb3MtPl9NX25leHQgPSBfX2xhc3Q7CisgICAgfQorICAKKyAgLy8gQ2FsbGVkIGJ5IHRoZSByYW5nZSBjb25zdHJ1Y3RvciB0byBpbXBsZW1lbnQgWzIzLjEuMV0vOQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz46OgorICAgICAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKKyAgICAgIHsKKyAgICAgICAgX05vZGVfYmFzZSogX190byA9ICZ0aGlzLT5fTV9pbXBsLl9NX2hlYWQ7CisgICAgICAgIGZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIF9fdG8tPl9NX25leHQgPSB0aGlzLT5fTV9jcmVhdGVfbm9kZSgqX19maXJzdCk7CisgICAgICAgICAgICBfX3RvID0gX190by0+X01fbmV4dDsKKyAgICAgICAgICB9CisgICAgICB9CisKKyAgLy8gQ2FsbGVkIGJ5IGZvcndhcmRfbGlzdChuLHYsYSksIGFuZCB0aGUgcmFuZ2UgY29uc3RydWN0b3IKKyAgLy8gd2hlbiBpdCB0dXJucyBvdXQgdG8gYmUgdGhlIHNhbWUgdGhpbmcuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICBfTV9maWxsX2luaXRpYWxpemUoc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX192YWx1ZSkKKyAgICB7CisgICAgICBfTm9kZV9iYXNlKiBfX3RvID0gJnRoaXMtPl9NX2ltcGwuX01faGVhZDsKKyAgICAgIGZvciAoOyBfX247IC0tX19uKQorICAgICAgICB7CisgICAgICAgICAgX190by0+X01fbmV4dCA9IHRoaXMtPl9NX2NyZWF0ZV9ub2RlKF9fdmFsdWUpOworICAgICAgICAgIF9fdG8gPSBfX3RvLT5fTV9uZXh0OworICAgICAgICB9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICBfTV9kZWZhdWx0X2luaXRpYWxpemUoc2l6ZV90eXBlIF9fbikKKyAgICB7CisgICAgICBfTm9kZV9iYXNlKiBfX3RvID0gJnRoaXMtPl9NX2ltcGwuX01faGVhZDsKKyAgICAgIGZvciAoOyBfX247IC0tX19uKQorICAgICAgICB7CisgICAgICAgICAgX190by0+X01fbmV4dCA9IHRoaXMtPl9NX2NyZWF0ZV9ub2RlKCk7CisgICAgICAgICAgX190byA9IF9fdG8tPl9NX25leHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiYKKyAgICBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICBvcGVyYXRvcj0oY29uc3QgZm9yd2FyZF9saXN0JiBfX2xpc3QpCisgICAgeworICAgICAgaWYgKCZfX2xpc3QgIT0gdGhpcykKKyAgICAgICAgeworICAgICAgICAgIGl0ZXJhdG9yIF9fcHJldjEgPSBiZWZvcmVfYmVnaW4oKTsKKyAgICAgICAgICBpdGVyYXRvciBfX2N1cnIxID0gYmVnaW4oKTsKKyAgICAgICAgICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CisgICAgICAgICAgY29uc3RfaXRlcmF0b3IgX19maXJzdDIgPSBfX2xpc3QuY2JlZ2luKCk7CisgICAgICAgICAgY29uc3RfaXRlcmF0b3IgX19sYXN0MiA9IF9fbGlzdC5jZW5kKCk7CisgICAgICAgICAgd2hpbGUgKF9fY3VycjEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAqX19jdXJyMSA9ICpfX2ZpcnN0MjsKKyAgICAgICAgICAgICAgKytfX3ByZXYxOworICAgICAgICAgICAgICArK19fY3VycjE7CisgICAgICAgICAgICAgICsrX19maXJzdDI7CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCisgICAgICAgICAgICBlcmFzZV9hZnRlcihfX3ByZXYxLCBfX2xhc3QxKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBpbnNlcnRfYWZ0ZXIoX19wcmV2MSwgX19maXJzdDIsIF9fbGFzdDIpOworICAgICAgICB9CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICBfTV9kZWZhdWx0X2luc2VydF9hZnRlcihjb25zdF9pdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbikKKyAgICB7CisgICAgICBjb25zdF9pdGVyYXRvciBfX3NhdmVkX3BvcyA9IF9fcG9zOworICAgICAgX190cnkKKwl7CisJICBmb3IgKDsgX19uOyAtLV9fbikKKwkgICAgX19wb3MgPSBlbXBsYWNlX2FmdGVyKF9fcG9zKTsKKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBlcmFzZV9hZnRlcihfX3NhdmVkX3BvcywgKytfX3Bvcyk7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICByZXNpemUoc2l6ZV90eXBlIF9fc3opCisgICAgeworICAgICAgaXRlcmF0b3IgX19rID0gYmVmb3JlX2JlZ2luKCk7CisKKyAgICAgIHNpemVfdHlwZSBfX2xlbiA9IDA7CisgICAgICB3aGlsZSAoX19rLl9NX25leHQoKSAhPSBlbmQoKSAmJiBfX2xlbiA8IF9fc3opCisgICAgICAgIHsKKyAgICAgICAgICArK19fazsKKyAgICAgICAgICArK19fbGVuOworICAgICAgICB9CisgICAgICBpZiAoX19sZW4gPT0gX19zeikKKyAgICAgICAgZXJhc2VfYWZ0ZXIoX19rLCBlbmQoKSk7CisgICAgICBlbHNlCisJX01fZGVmYXVsdF9pbnNlcnRfYWZ0ZXIoX19rLCBfX3N6IC0gX19sZW4pOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPjo6CisgICAgcmVzaXplKHNpemVfdHlwZSBfX3N6LCB2YWx1ZV90eXBlIF9fdmFsKQorICAgIHsKKyAgICAgIGl0ZXJhdG9yIF9fayA9IGJlZm9yZV9iZWdpbigpOworCisgICAgICBzaXplX3R5cGUgX19sZW4gPSAwOworICAgICAgd2hpbGUgKF9fay5fTV9uZXh0KCkgIT0gZW5kKCkgJiYgX19sZW4gPCBfX3N6KQorICAgICAgICB7CisgICAgICAgICAgKytfX2s7CisgICAgICAgICAgKytfX2xlbjsKKyAgICAgICAgfQorICAgICAgaWYgKF9fbGVuID09IF9fc3opCisgICAgICAgIGVyYXNlX2FmdGVyKF9faywgZW5kKCkpOworICAgICAgZWxzZQorICAgICAgICBpbnNlcnRfYWZ0ZXIoX19rLCBfX3N6IC0gX19sZW4sIF9fdmFsKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPjo6aXRlcmF0b3IKKyAgICBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICBfTV9zcGxpY2VfYWZ0ZXIoY29uc3RfaXRlcmF0b3IgX19wb3MsIGZvcndhcmRfbGlzdCYmIF9fbGlzdCkKKyAgICB7CisgICAgICBfTm9kZV9iYXNlKiBfX3RtcCA9IGNvbnN0X2Nhc3Q8X05vZGVfYmFzZSo+KF9fcG9zLl9NX25vZGUpOworICAgICAgaXRlcmF0b3IgX19iZWZvcmUgPSBfX2xpc3QuYmVmb3JlX2JlZ2luKCk7CisgICAgICByZXR1cm4gaXRlcmF0b3IoX190bXAtPl9NX3RyYW5zZmVyX2FmdGVyKF9fYmVmb3JlLl9NX25vZGUpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz46OgorICAgIHNwbGljZV9hZnRlcihjb25zdF9pdGVyYXRvciBfX3BvcywgZm9yd2FyZF9saXN0JiYsCisgICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fYmVmb3JlLCBjb25zdF9pdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgX05vZGVfYmFzZSogX190bXAgPSBjb25zdF9jYXN0PF9Ob2RlX2Jhc2UqPihfX3Bvcy5fTV9ub2RlKTsKKyAgICAgIF9fdG1wLT5fTV90cmFuc2Zlcl9hZnRlcihjb25zdF9jYXN0PF9Ob2RlX2Jhc2UqPihfX2JlZm9yZS5fTV9ub2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9jYXN0PF9Ob2RlX2Jhc2UqPihfX2xhc3QuX01fbm9kZSkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+OjppdGVyYXRvcgorICAgIGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz46OgorICAgIGluc2VydF9hZnRlcihjb25zdF9pdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkKKyAgICB7CisgICAgICBpZiAoX19uKQorCXsKKwkgIGZvcndhcmRfbGlzdCBfX3RtcChfX24sIF9fdmFsLCB0aGlzLT5fTV9nZXRfTm9kZV9hbGxvY2F0b3IoKSk7CisJICByZXR1cm4gX01fc3BsaWNlX2FmdGVyKF9fcG9zLCBzdGQ6Om1vdmUoX190bXApKTsKKwl9CisgICAgICBlbHNlCisJcmV0dXJuIGl0ZXJhdG9yKGNvbnN0X2Nhc3Q8X05vZGVfYmFzZSo+KF9fcG9zLl9NX25vZGUpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICB0eXBlbmFtZSBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+OjppdGVyYXRvcgorICAgICAgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPjo6CisgICAgICBpbnNlcnRfYWZ0ZXIoY29uc3RfaXRlcmF0b3IgX19wb3MsCisJCSAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwlmb3J3YXJkX2xpc3QgX190bXAoX19maXJzdCwgX19sYXN0LCB0aGlzLT5fTV9nZXRfTm9kZV9hbGxvY2F0b3IoKSk7CisJaWYgKCFfX3RtcC5lbXB0eSgpKQorCSAgcmV0dXJuIF9NX3NwbGljZV9hZnRlcihfX3Bvcywgc3RkOjptb3ZlKF9fdG1wKSk7CisJZWxzZQorCSAgcmV0dXJuIGl0ZXJhdG9yKGNvbnN0X2Nhc3Q8X05vZGVfYmFzZSo+KF9fcG9zLl9NX25vZGUpKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+OjppdGVyYXRvcgorICAgIGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz46OgorICAgIGluc2VydF9hZnRlcihjb25zdF9pdGVyYXRvciBfX3Bvcywgc3RkOjppbml0aWFsaXplcl9saXN0PF9UcD4gX19pbCkKKyAgICB7CisgICAgICBpZiAoX19pbC5zaXplKCkpCisJeworCSAgZm9yd2FyZF9saXN0IF9fdG1wKF9faWwsIHRoaXMtPl9NX2dldF9Ob2RlX2FsbG9jYXRvcigpKTsKKwkgIHJldHVybiBfTV9zcGxpY2VfYWZ0ZXIoX19wb3MsIHN0ZDo6bW92ZShfX3RtcCkpOworCX0KKyAgICAgIGVsc2UKKwlyZXR1cm4gaXRlcmF0b3IoY29uc3RfY2FzdDxfTm9kZV9iYXNlKj4oX19wb3MuX01fbm9kZSkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPjo6CisgICAgcmVtb3ZlKGNvbnN0IF9UcCYgX192YWwpCisgICAgeworICAgICAgX05vZGUqIF9fY3VyciA9IHN0YXRpY19jYXN0PF9Ob2RlKj4oJnRoaXMtPl9NX2ltcGwuX01faGVhZCk7CisgICAgICB3aGlsZSAoX05vZGUqIF9fdGVtcCA9IHN0YXRpY19jYXN0PF9Ob2RlKj4oX19jdXJyLT5fTV9uZXh0KSkKKyAgICAgICAgeworICAgICAgICAgIGlmIChfX3RlbXAtPl9NX3ZhbHVlID09IF9fdmFsKQorICAgICAgICAgICAgdGhpcy0+X01fZXJhc2VfYWZ0ZXIoX19jdXJyKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBfX2N1cnIgPSBzdGF0aWNfY2FzdDxfTm9kZSo+KF9fY3Vyci0+X01fbmV4dCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ByZWQ+CisgICAgICB2b2lkCisgICAgICBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICAgIHJlbW92ZV9pZihfUHJlZCBfX3ByZWQpCisgICAgICB7CisJX05vZGUqIF9fY3VyciA9IHN0YXRpY19jYXN0PF9Ob2RlKj4oJnRoaXMtPl9NX2ltcGwuX01faGVhZCk7CisgICAgICAgIHdoaWxlIChfTm9kZSogX190ZW1wID0gc3RhdGljX2Nhc3Q8X05vZGUqPihfX2N1cnItPl9NX25leHQpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChfX3ByZWQoX190ZW1wLT5fTV92YWx1ZSkpCisgICAgICAgICAgICAgIHRoaXMtPl9NX2VyYXNlX2FmdGVyKF9fY3Vycik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIF9fY3VyciA9IHN0YXRpY19jYXN0PF9Ob2RlKj4oX19jdXJyLT5fTV9uZXh0KTsKKyAgICAgICAgICB9CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpblByZWQ+CisgICAgICB2b2lkCisgICAgICBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICAgIHVuaXF1ZShfQmluUHJlZCBfX2JpbmFyeV9wcmVkKQorICAgICAgeworICAgICAgICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKKyAgICAgICAgaXRlcmF0b3IgX19sYXN0ID0gZW5kKCk7CisgICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CisgICAgICAgIHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3QpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCisgICAgICAgICAgICBlcmFzZV9hZnRlcihfX2ZpcnN0KTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBfX2ZpcnN0ID0gX19uZXh0OworICAgICAgICAgIF9fbmV4dCA9IF9fZmlyc3Q7CisgICAgICAgIH0KKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29tcD4KKyAgICAgIHZvaWQKKyAgICAgIGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz46OgorICAgICAgbWVyZ2UoZm9yd2FyZF9saXN0JiYgX19saXN0LCBfQ29tcCBfX2NvbXApCisgICAgICB7CisgICAgICAgIF9Ob2RlX2Jhc2UqIF9fbm9kZSA9ICZ0aGlzLT5fTV9pbXBsLl9NX2hlYWQ7CisgICAgICAgIHdoaWxlIChfX25vZGUtPl9NX25leHQgJiYgX19saXN0Ll9NX2ltcGwuX01faGVhZC5fTV9uZXh0KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChfX2NvbXAoc3RhdGljX2Nhc3Q8X05vZGUqPgorICAgICAgICAgICAgICAgICAgICAgICAoX19saXN0Ll9NX2ltcGwuX01faGVhZC5fTV9uZXh0KS0+X01fdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PF9Ob2RlKj4KKyAgICAgICAgICAgICAgICAgICAgICAgKF9fbm9kZS0+X01fbmV4dCktPl9NX3ZhbHVlKSkKKyAgICAgICAgICAgICAgX19ub2RlLT5fTV90cmFuc2Zlcl9hZnRlcigmX19saXN0Ll9NX2ltcGwuX01faGVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xpc3QuX01faW1wbC5fTV9oZWFkLl9NX25leHQpOworICAgICAgICAgICAgX19ub2RlID0gX19ub2RlLT5fTV9uZXh0OworICAgICAgICAgIH0KKyAgICAgICAgaWYgKF9fbGlzdC5fTV9pbXBsLl9NX2hlYWQuX01fbmV4dCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBfX25vZGUtPl9NX25leHQgPSBfX2xpc3QuX01faW1wbC5fTV9oZWFkLl9NX25leHQ7CisgICAgICAgICAgICBfX2xpc3QuX01faW1wbC5fTV9oZWFkLl9NX25leHQgPSAwOworICAgICAgICAgIH0KKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+JiBfX2x4LAorICAgICAgICAgICAgICAgY29uc3QgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiYgX19seSkKKyAgICB7CisgICAgICAvLyAgV2UgZG9uJ3QgaGF2ZSBzaXplKCkgc28gd2UgbmVlZCB0byB3YWxrIHRocm91Z2ggYm90aCBsaXN0cworICAgICAgLy8gIG1ha2luZyBzdXJlIGJvdGggaXRlcmF0b3JzIGFyZSB2YWxpZC4KKyAgICAgIGF1dG8gX19peCA9IF9fbHguY2JlZ2luKCk7CisgICAgICBhdXRvIF9faXkgPSBfX2x5LmNiZWdpbigpOworICAgICAgd2hpbGUgKF9faXggIT0gX19seC5jZW5kKCkgJiYgX19peSAhPSBfX2x5LmNlbmQoKSkKKyAgICAgICAgeworICAgICAgICAgIGlmICgqX19peCAhPSAqX19peSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICArK19faXg7CisgICAgICAgICAgKytfX2l5OworICAgICAgICB9CisgICAgICBpZiAoX19peCA9PSBfX2x4LmNlbmQoKSAmJiBfX2l5ID09IF9fbHkuY2VuZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29tcD4KKyAgICAgIHZvaWQKKyAgICAgIGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz46OgorICAgICAgc29ydChfQ29tcCBfX2NvbXApCisgICAgICB7CisgICAgICAgIC8vIElmIGBuZXh0JyBpcyAwLCByZXR1cm4gaW1tZWRpYXRlbHkuCisgICAgICAgIF9Ob2RlKiBfX2xpc3QgPSBzdGF0aWNfY2FzdDxfTm9kZSo+KHRoaXMtPl9NX2ltcGwuX01faGVhZC5fTV9uZXh0KTsKKyAgICAgICAgaWYgKCFfX2xpc3QpCisgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHVuc2lnbmVkIGxvbmcgX19pbnNpemUgPSAxOworCisgICAgICAgIHdoaWxlICgxKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIF9Ob2RlKiBfX3AgPSBfX2xpc3Q7CisgICAgICAgICAgICBfX2xpc3QgPSAwOworICAgICAgICAgICAgX05vZGUqIF9fdGFpbCA9IDA7CisKKyAgICAgICAgICAgIC8vIENvdW50IG51bWJlciBvZiBtZXJnZXMgd2UgZG8gaW4gdGhpcyBwYXNzLgorICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBfX25tZXJnZXMgPSAwOworCisgICAgICAgICAgICB3aGlsZSAoX19wKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKytfX25tZXJnZXM7CisgICAgICAgICAgICAgICAgLy8gVGhlcmUgZXhpc3RzIGEgbWVyZ2UgdG8gYmUgZG9uZS4KKyAgICAgICAgICAgICAgICAvLyBTdGVwIGBpbnNpemUnIHBsYWNlcyBhbG9uZyBmcm9tIHAuCisgICAgICAgICAgICAgICAgX05vZGUqIF9fcSA9IF9fcDsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fcHNpemUgPSAwOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9uZyBfX2kgPSAwOyBfX2kgPCBfX2luc2l6ZTsgKytfX2kpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICsrX19wc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgX19xID0gc3RhdGljX2Nhc3Q8X05vZGUqPihfX3EtPl9NX25leHQpOworICAgICAgICAgICAgICAgICAgICBpZiAoIV9fcSkKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIElmIHEgaGFzbid0IGZhbGxlbiBvZmYgZW5kLCB3ZSBoYXZlIHR3byBsaXN0cyB0byBtZXJnZS4KKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fcXNpemUgPSBfX2luc2l6ZTsKKworICAgICAgICAgICAgICAgIC8vIE5vdyB3ZSBoYXZlIHR3byBsaXN0czsgbWVyZ2UgdGhlbS4KKyAgICAgICAgICAgICAgICB3aGlsZSAoX19wc2l6ZSA+IDAgfHwgKF9fcXNpemUgPiAwICYmIF9fcSkpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIERlY2lkZSB3aGV0aGVyIG5leHQgbm9kZSBvZiBtZXJnZSBjb21lcyBmcm9tIHAgb3IgcS4KKyAgICAgICAgICAgICAgICAgICAgX05vZGUqIF9fZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKF9fcHNpemUgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwIGlzIGVtcHR5OyBlIG11c3QgY29tZSBmcm9tIHEuCisgICAgICAgICAgICAgICAgICAgICAgICBfX2UgPSBfX3E7CisgICAgICAgICAgICAgICAgICAgICAgICBfX3EgPSBzdGF0aWNfY2FzdDxfTm9kZSo+KF9fcS0+X01fbmV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAtLV9fcXNpemU7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX3FzaXplID09IDAgfHwgIV9fcSkKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBxIGlzIGVtcHR5OyBlIG11c3QgY29tZSBmcm9tIHAuCisgICAgICAgICAgICAgICAgICAgICAgICBfX2UgPSBfX3A7CisgICAgICAgICAgICAgICAgICAgICAgICBfX3AgPSBzdGF0aWNfY2FzdDxfTm9kZSo+KF9fcC0+X01fbmV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAtLV9fcHNpemU7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX2NvbXAoX19wLT5fTV92YWx1ZSwgX19xLT5fTV92YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyc3Qgbm9kZSBvZiBwIGlzIGxvd2VyOyBlIG11c3QgY29tZSBmcm9tIHAuCisgICAgICAgICAgICAgICAgICAgICAgICBfX2UgPSBfX3A7CisgICAgICAgICAgICAgICAgICAgICAgICBfX3AgPSBzdGF0aWNfY2FzdDxfTm9kZSo+KF9fcC0+X01fbmV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAtLV9fcHNpemU7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyc3Qgbm9kZSBvZiBxIGlzIGxvd2VyOyBlIG11c3QgY29tZSBmcm9tIHEuCisgICAgICAgICAgICAgICAgICAgICAgICBfX2UgPSBfX3E7CisgICAgICAgICAgICAgICAgICAgICAgICBfX3EgPSBzdGF0aWNfY2FzdDxfTm9kZSo+KF9fcS0+X01fbmV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAtLV9fcXNpemU7CisgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgbmV4dCBub2RlIHRvIHRoZSBtZXJnZWQgbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKF9fdGFpbCkKKyAgICAgICAgICAgICAgICAgICAgICBfX3RhaWwtPl9NX25leHQgPSBfX2U7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICBfX2xpc3QgPSBfX2U7CisgICAgICAgICAgICAgICAgICAgIF9fdGFpbCA9IF9fZTsKKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIE5vdyBwIGhhcyBzdGVwcGVkIGBpbnNpemUnIHBsYWNlcyBhbG9uZywgYW5kIHEgaGFzIHRvby4KKyAgICAgICAgICAgICAgICBfX3AgPSBfX3E7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF9fdGFpbC0+X01fbmV4dCA9IDA7CisKKyAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgZG9uZSBvbmx5IG9uZSBtZXJnZSwgd2UncmUgZmluaXNoZWQuCisgICAgICAgICAgICAvLyBBbGxvdyBmb3Igbm1lcmdlcyA9PSAwLCB0aGUgZW1wdHkgbGlzdCBjYXNlLgorICAgICAgICAgICAgaWYgKF9fbm1lcmdlcyA8PSAxKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGhpcy0+X01faW1wbC5fTV9oZWFkLl9NX25leHQgPSBfX2xpc3Q7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE90aGVyd2lzZSByZXBlYXQsIG1lcmdpbmcgbGlzdHMgdHdpY2UgdGhlIHNpemUuCisgICAgICAgICAgICBfX2luc2l6ZSAqPSAyOworICAgICAgICAgIH0KKyAgICAgIH0KKyAKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UgLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYgLyogX0ZPUldBUkRfTElTVF9UQ0MgKi8KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2ZzdHJlYW0udGNjIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2ZzdHJlYW0udGNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZjdmOGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvZnN0cmVhbS50Y2MKQEAgLTAsMCArMSw5MjYgQEAKKy8vIEZpbGUgYmFzZWQgc3RyZWFtcyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsCisvLyAyMDA3LCAyMDA4LCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZnN0cmVhbS50Y2MKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDI3LjggIEZpbGUtYmFzZWQgc3RyZWFtcworLy8KKworI2lmbmRlZiBfRlNUUkVBTV9UQ0MKKyNkZWZpbmUgX0ZTVFJFQU1fVENDIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Y3h4YWJpLWZvcmNlZC5oPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICB2b2lkCisgICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBfTV9hbGxvY2F0ZV9pbnRlcm5hbF9idWZmZXIoKQorICAgIHsKKyAgICAgIC8vIEFsbG9jYXRlIGludGVybmFsIGJ1ZmZlciBvbmx5IGlmIG9uZSBkb2Vzbid0IGFscmVhZHkgZXhpc3QKKyAgICAgIC8vIChlaXRoZXIgYWxsb2NhdGVkIG9yIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIHZpYSBzZXRidWYpLgorICAgICAgaWYgKCFfTV9idWZfYWxsb2NhdGVkICYmICFfTV9idWYpCisJeworCSAgX01fYnVmID0gbmV3IGNoYXJfdHlwZVtfTV9idWZfc2l6ZV07CisJICBfTV9idWZfYWxsb2NhdGVkID0gdHJ1ZTsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICB2b2lkCisgICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBfTV9kZXN0cm95X2ludGVybmFsX2J1ZmZlcigpIHRocm93KCkKKyAgICB7CisgICAgICBpZiAoX01fYnVmX2FsbG9jYXRlZCkKKwl7CisJICBkZWxldGUgW10gX01fYnVmOworCSAgX01fYnVmID0gTlVMTDsKKwkgIF9NX2J1Zl9hbGxvY2F0ZWQgPSBmYWxzZTsKKwl9CisgICAgICBkZWxldGUgW10gX01fZXh0X2J1ZjsKKyAgICAgIF9NX2V4dF9idWYgPSBOVUxMOworICAgICAgX01fZXh0X2J1Zl9zaXplID0gMDsKKyAgICAgIF9NX2V4dF9uZXh0ID0gTlVMTDsKKyAgICAgIF9NX2V4dF9lbmQgPSBOVUxMOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBiYXNpY19maWxlYnVmKCkgOiBfX3N0cmVhbWJ1Zl90eXBlKCksIF9NX2xvY2soKSwgX01fZmlsZSgmX01fbG9jayksCisgICAgX01fbW9kZShpb3NfYmFzZTo6b3Blbm1vZGUoMCkpLCBfTV9zdGF0ZV9iZWcoKSwgX01fc3RhdGVfY3VyKCksCisgICAgX01fc3RhdGVfbGFzdCgpLCBfTV9idWYoTlVMTCksIF9NX2J1Zl9zaXplKEJVRlNJWiksCisgICAgX01fYnVmX2FsbG9jYXRlZChmYWxzZSksIF9NX3JlYWRpbmcoZmFsc2UpLCBfTV93cml0aW5nKGZhbHNlKSwgX01fcGJhY2soKSwgCisgICAgX01fcGJhY2tfY3VyX3NhdmUoMCksIF9NX3BiYWNrX2VuZF9zYXZlKDApLCBfTV9wYmFja19pbml0KGZhbHNlKSwKKyAgICBfTV9jb2RlY3Z0KDApLCBfTV9leHRfYnVmKDApLCBfTV9leHRfYnVmX3NpemUoMCksIF9NX2V4dF9uZXh0KDApLAorICAgIF9NX2V4dF9lbmQoMCkKKyAgICB7CisgICAgICBpZiAoaGFzX2ZhY2V0PF9fY29kZWN2dF90eXBlPih0aGlzLT5fTV9idWZfbG9jYWxlKSkKKwlfTV9jb2RlY3Z0ID0gJnVzZV9mYWNldDxfX2NvZGVjdnRfdHlwZT4odGhpcy0+X01fYnVmX2xvY2FsZSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICB0eXBlbmFtZSBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Ol9fZmlsZWJ1Zl90eXBlKgorICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CisgICAgb3Blbihjb25zdCBjaGFyKiBfX3MsIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUpCisgICAgeworICAgICAgX19maWxlYnVmX3R5cGUgKl9fcmV0ID0gTlVMTDsKKyAgICAgIGlmICghdGhpcy0+aXNfb3BlbigpKQorCXsKKwkgIF9NX2ZpbGUub3BlbihfX3MsIF9fbW9kZSk7CisJICBpZiAodGhpcy0+aXNfb3BlbigpKQorCSAgICB7CisJICAgICAgX01fYWxsb2NhdGVfaW50ZXJuYWxfYnVmZmVyKCk7CisJICAgICAgX01fbW9kZSA9IF9fbW9kZTsKKworCSAgICAgIC8vIFNldHVwIGluaXRpYWwgYnVmZmVyIHRvICd1bmNvbW1pdHRlZCcgbW9kZS4KKwkgICAgICBfTV9yZWFkaW5nID0gZmFsc2U7CisJICAgICAgX01fd3JpdGluZyA9IGZhbHNlOworCSAgICAgIF9NX3NldF9idWZmZXIoLTEpOworCisJICAgICAgLy8gUmVzZXQgdG8gaW5pdGlhbCBzdGF0ZS4KKwkgICAgICBfTV9zdGF0ZV9sYXN0ID0gX01fc3RhdGVfY3VyID0gX01fc3RhdGVfYmVnOworCisJICAgICAgLy8gMjcuOC4xLjMsNAorCSAgICAgIGlmICgoX19tb2RlICYgaW9zX2Jhc2U6OmF0ZSkKKwkJICAmJiB0aGlzLT5zZWVrb2ZmKDAsIGlvc19iYXNlOjplbmQsIF9fbW9kZSkKKwkJICA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQorCQl0aGlzLT5jbG9zZSgpOworCSAgICAgIGVsc2UKKwkJX19yZXQgPSB0aGlzOworCSAgICB9CisJfQorICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdHlwZW5hbWUgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfX2ZpbGVidWZfdHlwZSoKKyAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIGNsb3NlKCkKKyAgICB7CisgICAgICBpZiAoIXRoaXMtPmlzX29wZW4oKSkKKwlyZXR1cm4gTlVMTDsKKworICAgICAgYm9vbCBfX3Rlc3RmYWlsID0gZmFsc2U7CisgICAgICB7CisJLy8gTkI6IERvIHRoaXMgaGVyZSBzbyB0aGF0IHJlLW9wZW5lZCBmaWxlYnVmcyB3aWxsIGJlIGNvb2wuLi4KKwlzdHJ1Y3QgX19jbG9zZV9zZW50cnkKKwl7CisJICBiYXNpY19maWxlYnVmICpfX2ZiOworCSAgX19jbG9zZV9zZW50cnkgKGJhc2ljX2ZpbGVidWYgKl9fZmJpKTogX19mYihfX2ZiaSkgeyB9CisJICB+X19jbG9zZV9zZW50cnkgKCkKKwkgIHsKKwkgICAgX19mYi0+X01fbW9kZSA9IGlvc19iYXNlOjpvcGVubW9kZSgwKTsKKwkgICAgX19mYi0+X01fcGJhY2tfaW5pdCA9IGZhbHNlOworCSAgICBfX2ZiLT5fTV9kZXN0cm95X2ludGVybmFsX2J1ZmZlcigpOworCSAgICBfX2ZiLT5fTV9yZWFkaW5nID0gZmFsc2U7CisJICAgIF9fZmItPl9NX3dyaXRpbmcgPSBmYWxzZTsKKwkgICAgX19mYi0+X01fc2V0X2J1ZmZlcigtMSk7CisJICAgIF9fZmItPl9NX3N0YXRlX2xhc3QgPSBfX2ZiLT5fTV9zdGF0ZV9jdXIgPSBfX2ZiLT5fTV9zdGF0ZV9iZWc7CisJICB9CisJfSBfX2NzICh0aGlzKTsKKworCV9fdHJ5CisJICB7CisJICAgIGlmICghX01fdGVybWluYXRlX291dHB1dCgpKQorCSAgICAgIF9fdGVzdGZhaWwgPSB0cnVlOworCSAgfQorCV9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwkgIHsKKwkgICAgX01fZmlsZS5jbG9zZSgpOworCSAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgIH0KKwlfX2NhdGNoKC4uLikKKwkgIHsgX190ZXN0ZmFpbCA9IHRydWU7IH0KKyAgICAgIH0KKworICAgICAgaWYgKCFfTV9maWxlLmNsb3NlKCkpCisJX190ZXN0ZmFpbCA9IHRydWU7CisKKyAgICAgIGlmIChfX3Rlc3RmYWlsKQorCXJldHVybiBOVUxMOworICAgICAgZWxzZQorCXJldHVybiB0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RyZWFtc2l6ZQorICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CisgICAgc2hvd21hbnljKCkKKyAgICB7CisgICAgICBzdHJlYW1zaXplIF9fcmV0ID0gLTE7CisgICAgICBjb25zdCBib29sIF9fdGVzdGluID0gX01fbW9kZSAmIGlvc19iYXNlOjppbjsKKyAgICAgIGlmIChfX3Rlc3RpbiAmJiB0aGlzLT5pc19vcGVuKCkpCisJeworCSAgLy8gRm9yIGEgc3RhdGVmdWwgZW5jb2RpbmcgKC0xKSB0aGUgcGVuZGluZyBzZXF1ZW5jZSBtaWdodCBiZSBqdXN0CisJICAvLyBzaGlmdCBhbmQgdW5zaGlmdCBwcmVmaXhlcyB3aXRoIG5vIGFjdHVhbCBjaGFyYWN0ZXIuCisJICBfX3JldCA9IHRoaXMtPmVncHRyKCkgLSB0aGlzLT5ncHRyKCk7CisKKyNpZiBfR0xJQkNYWF9IQVZFX0RPU19CQVNFRF9GSUxFU1lTVEVNCisJICAvLyBBYm91dCB0aGlzIHdvcmthcm91bmQsIHNlZSBsaWJzdGRjKysvMjA4MDYuCisJICBjb25zdCBib29sIF9fdGVzdGJpbmFyeSA9IF9NX21vZGUgJiBpb3NfYmFzZTo6YmluYXJ5OworCSAgaWYgKF9fY2hlY2tfZmFjZXQoX01fY29kZWN2dCkuZW5jb2RpbmcoKSA+PSAwCisJICAgICAgJiYgX190ZXN0YmluYXJ5KQorI2Vsc2UKKwkgIGlmIChfX2NoZWNrX2ZhY2V0KF9NX2NvZGVjdnQpLmVuY29kaW5nKCkgPj0gMCkKKyNlbmRpZgorCSAgICBfX3JldCArPSBfTV9maWxlLnNob3dtYW55YygpIC8gX01fY29kZWN2dC0+bWF4X2xlbmd0aCgpOworCX0KKyAgICAgIHJldHVybiBfX3JldDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKKyAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIHVuZGVyZmxvdygpCisgICAgeworICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CisgICAgICBjb25zdCBib29sIF9fdGVzdGluID0gX01fbW9kZSAmIGlvc19iYXNlOjppbjsKKyAgICAgIGlmIChfX3Rlc3RpbiAmJiAhX01fd3JpdGluZykKKwl7CisJICAvLyBDaGVjayBmb3IgcGJhY2sgbWFkbmVzcywgYW5kIGlmIHNvIHN3aXRjaCBiYWNrIHRvIHRoZQorCSAgLy8gbm9ybWFsIGJ1ZmZlcnMgYW5kIGpldCBvdXR0YSBoZXJlIGJlZm9yZSBleHBlbnNpdmUKKwkgIC8vIGZpbGVvcHMgaGFwcGVuLi4uCisJICBfTV9kZXN0cm95X3BiYWNrKCk7CisKKwkgIGlmICh0aGlzLT5ncHRyKCkgPCB0aGlzLT5lZ3B0cigpKQorCSAgICByZXR1cm4gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCp0aGlzLT5ncHRyKCkpOworCisJICAvLyBHZXQgYW5kIGNvbnZlcnQgaW5wdXQgc2VxdWVuY2UuCisJICBjb25zdCBzaXplX3QgX19idWZsZW4gPSBfTV9idWZfc2l6ZSA+IDEgPyBfTV9idWZfc2l6ZSAtIDEgOiAxOworCisJICAvLyBXaWxsIGJlIHNldCB0byB0cnVlIGlmIDo6cmVhZCgpIHJldHVybnMgMCBpbmRpY2F0aW5nIEVPRi4KKwkgIGJvb2wgX19nb3RfZW9mID0gZmFsc2U7CisJICAvLyBOdW1iZXIgb2YgaW50ZXJuYWwgY2hhcmFjdGVycyBwcm9kdWNlZC4KKwkgIHN0cmVhbXNpemUgX19pbGVuID0gMDsKKwkgIGNvZGVjdnRfYmFzZTo6cmVzdWx0IF9fciA9IGNvZGVjdnRfYmFzZTo6b2s7CisJICBpZiAoX19jaGVja19mYWNldChfTV9jb2RlY3Z0KS5hbHdheXNfbm9jb252KCkpCisJICAgIHsKKwkgICAgICBfX2lsZW4gPSBfTV9maWxlLnhzZ2V0bihyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzLT5lYmFjaygpKSwKKwkJCQkgICAgICBfX2J1Zmxlbik7CisJICAgICAgaWYgKF9faWxlbiA9PSAwKQorCQlfX2dvdF9lb2YgPSB0cnVlOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKyAgICAgICAgICAgICAgLy8gV29yc3QtY2FzZSBudW1iZXIgb2YgZXh0ZXJuYWwgYnl0ZXMuCisJICAgICAgLy8gWFhYIE5vdCBkb25lIGVuY29kaW5nKCkgPT0gLTEuCisJICAgICAgY29uc3QgaW50IF9fZW5jID0gX01fY29kZWN2dC0+ZW5jb2RpbmcoKTsKKwkgICAgICBzdHJlYW1zaXplIF9fYmxlbjsgLy8gTWluaW11bSBidWZmZXIgc2l6ZS4KKwkgICAgICBzdHJlYW1zaXplIF9fcmxlbjsgLy8gTnVtYmVyIG9mIGNoYXJzIHRvIHJlYWQuCisJICAgICAgaWYgKF9fZW5jID4gMCkKKwkJX19ibGVuID0gX19ybGVuID0gX19idWZsZW4gKiBfX2VuYzsKKwkgICAgICBlbHNlCisJCXsKKwkJICBfX2JsZW4gPSBfX2J1ZmxlbiArIF9NX2NvZGVjdnQtPm1heF9sZW5ndGgoKSAtIDE7CisJCSAgX19ybGVuID0gX19idWZsZW47CisJCX0KKwkgICAgICBjb25zdCBzdHJlYW1zaXplIF9fcmVtYWluZGVyID0gX01fZXh0X2VuZCAtIF9NX2V4dF9uZXh0OworCSAgICAgIF9fcmxlbiA9IF9fcmxlbiA+IF9fcmVtYWluZGVyID8gX19ybGVuIC0gX19yZW1haW5kZXIgOiAwOworCisJICAgICAgLy8gQW4gaW1idWUgaW4gJ3JlYWQnIG1vZGUgaW1wbGllcyBmaXJzdCBjb252ZXJ0aW5nIHRoZSBleHRlcm5hbAorCSAgICAgIC8vIGNoYXJzIGFscmVhZHkgcHJlc2VudC4KKwkgICAgICBpZiAoX01fcmVhZGluZyAmJiB0aGlzLT5lZ3B0cigpID09IHRoaXMtPmViYWNrKCkgJiYgX19yZW1haW5kZXIpCisJCV9fcmxlbiA9IDA7CisKKwkgICAgICAvLyBBbGxvY2F0ZSBidWZmZXIgaWYgbmVjZXNzYXJ5IGFuZCBtb3ZlIHVuY29udmVydGVkCisJICAgICAgLy8gYnl0ZXMgdG8gZnJvbnQuCisJICAgICAgaWYgKF9NX2V4dF9idWZfc2l6ZSA8IF9fYmxlbikKKwkJeworCQkgIGNoYXIqIF9fYnVmID0gbmV3IGNoYXJbX19ibGVuXTsKKwkJICBpZiAoX19yZW1haW5kZXIpCisJCSAgICBfX2J1aWx0aW5fbWVtY3B5KF9fYnVmLCBfTV9leHRfbmV4dCwgX19yZW1haW5kZXIpOworCisJCSAgZGVsZXRlIFtdIF9NX2V4dF9idWY7CisJCSAgX01fZXh0X2J1ZiA9IF9fYnVmOworCQkgIF9NX2V4dF9idWZfc2l6ZSA9IF9fYmxlbjsKKwkJfQorCSAgICAgIGVsc2UgaWYgKF9fcmVtYWluZGVyKQorCQlfX2J1aWx0aW5fbWVtbW92ZShfTV9leHRfYnVmLCBfTV9leHRfbmV4dCwgX19yZW1haW5kZXIpOworCisJICAgICAgX01fZXh0X25leHQgPSBfTV9leHRfYnVmOworCSAgICAgIF9NX2V4dF9lbmQgPSBfTV9leHRfYnVmICsgX19yZW1haW5kZXI7CisJICAgICAgX01fc3RhdGVfbGFzdCA9IF9NX3N0YXRlX2N1cjsKKworCSAgICAgIGRvCisJCXsKKwkJICBpZiAoX19ybGVuID4gMCkKKwkJICAgIHsKKwkJICAgICAgLy8gU2FuaXR5IGNoZWNrIQorCQkgICAgICAvLyBUaGlzIG1heSBmYWlsIGlmIHRoZSByZXR1cm4gdmFsdWUgb2YKKwkJICAgICAgLy8gY29kZWN2dDo6bWF4X2xlbmd0aCgpIGlzIGJvZ3VzLgorCQkgICAgICBpZiAoX01fZXh0X2VuZCAtIF9NX2V4dF9idWYgKyBfX3JsZW4gPiBfTV9leHRfYnVmX3NpemUpCisJCQl7CisJCQkgIF9fdGhyb3dfaW9zX2ZhaWx1cmUoX19OKCJiYXNpY19maWxlYnVmOjp1bmRlcmZsb3cgIgorCQkJCQkgICAgICAiY29kZWN2dDo6bWF4X2xlbmd0aCgpICIKKwkJCQkJICAgICAgImlzIG5vdCB2YWxpZCIpKTsKKwkJCX0KKwkJICAgICAgc3RyZWFtc2l6ZSBfX2VsZW4gPSBfTV9maWxlLnhzZ2V0bihfTV9leHRfZW5kLCBfX3JsZW4pOworCQkgICAgICBpZiAoX19lbGVuID09IDApCisJCQlfX2dvdF9lb2YgPSB0cnVlOworCQkgICAgICBlbHNlIGlmIChfX2VsZW4gPT0gLTEpCisJCQlicmVhazsKKwkJICAgICAgX01fZXh0X2VuZCArPSBfX2VsZW47CisJCSAgICB9CisKKwkJICBjaGFyX3R5cGUqIF9faWVuZCA9IHRoaXMtPmViYWNrKCk7CisJCSAgaWYgKF9NX2V4dF9uZXh0IDwgX01fZXh0X2VuZCkKKwkJICAgIF9fciA9IF9NX2NvZGVjdnQtPmluKF9NX3N0YXRlX2N1ciwgX01fZXh0X25leHQsCisJCQkJCSBfTV9leHRfZW5kLCBfTV9leHRfbmV4dCwKKwkJCQkJIHRoaXMtPmViYWNrKCksCisJCQkJCSB0aGlzLT5lYmFjaygpICsgX19idWZsZW4sIF9faWVuZCk7CisJCSAgaWYgKF9fciA9PSBjb2RlY3Z0X2Jhc2U6Om5vY29udikKKwkJICAgIHsKKwkJICAgICAgc2l6ZV90IF9fYXZhaWwgPSBfTV9leHRfZW5kIC0gX01fZXh0X2J1ZjsKKwkJICAgICAgX19pbGVuID0gc3RkOjptaW4oX19hdmFpbCwgX19idWZsZW4pOworCQkgICAgICB0cmFpdHNfdHlwZTo6Y29weSh0aGlzLT5lYmFjaygpLAorCQkJCQlyZWludGVycHJldF9jYXN0PGNoYXJfdHlwZSo+CisJCQkJCShfTV9leHRfYnVmKSwgX19pbGVuKTsKKwkJICAgICAgX01fZXh0X25leHQgPSBfTV9leHRfYnVmICsgX19pbGVuOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIF9faWxlbiA9IF9faWVuZCAtIHRoaXMtPmViYWNrKCk7CisKKwkJICAvLyBfTV9jb2RlY3Z0LT5pbiBtYXkgcmV0dXJuIGVycm9yIHdoaWxlIF9faWxlbiA+IDA6IHRoaXMgaXMKKwkJICAvLyBvaywgYW5kIGFjdHVhbGx5IG9jY3VycyBpbiBjYXNlIG9mIG1peGVkIGVuY29kaW5ncyAoZS5nLiwKKwkJICAvLyBYTUwgZmlsZXMpLgorCQkgIGlmIChfX3IgPT0gY29kZWN2dF9iYXNlOjplcnJvcikKKwkJICAgIGJyZWFrOworCisJCSAgX19ybGVuID0gMTsKKwkJfQorCSAgICAgIHdoaWxlIChfX2lsZW4gPT0gMCAmJiAhX19nb3RfZW9mKTsKKwkgICAgfQorCisJICBpZiAoX19pbGVuID4gMCkKKwkgICAgeworCSAgICAgIF9NX3NldF9idWZmZXIoX19pbGVuKTsKKwkgICAgICBfTV9yZWFkaW5nID0gdHJ1ZTsKKwkgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqdGhpcy0+Z3B0cigpKTsKKwkgICAgfQorCSAgZWxzZSBpZiAoX19nb3RfZW9mKQorCSAgICB7CisJICAgICAgLy8gSWYgdGhlIGFjdHVhbCBlbmQgb2YgZmlsZSBpcyByZWFjaGVkLCBzZXQgJ3VuY29tbWl0dGVkJworCSAgICAgIC8vIG1vZGUsIHRodXMgYWxsb3dpbmcgYW4gaW1tZWRpYXRlIHdyaXRlIHdpdGhvdXQgYW4KKwkgICAgICAvLyBpbnRlcnZlbmluZyBzZWVrLgorCSAgICAgIF9NX3NldF9idWZmZXIoLTEpOworCSAgICAgIF9NX3JlYWRpbmcgPSBmYWxzZTsKKwkgICAgICAvLyBIb3dldmVyLCByZWFjaGluZyBpdCB3aGlsZSBsb29waW5nIG9uIHBhcnRpYWwgbWVhbnMgdGhhdAorCSAgICAgIC8vIHRoZSBmaWxlIGhhcyBnb3QgYW4gaW5jb21wbGV0ZSBjaGFyYWN0ZXIuCisJICAgICAgaWYgKF9fciA9PSBjb2RlY3Z0X2Jhc2U6OnBhcnRpYWwpCisJCV9fdGhyb3dfaW9zX2ZhaWx1cmUoX19OKCJiYXNpY19maWxlYnVmOjp1bmRlcmZsb3cgIgorCQkJCSAgICAiaW5jb21wbGV0ZSBjaGFyYWN0ZXIgaW4gZmlsZSIpKTsKKwkgICAgfQorCSAgZWxzZSBpZiAoX19yID09IGNvZGVjdnRfYmFzZTo6ZXJyb3IpCisJICAgIF9fdGhyb3dfaW9zX2ZhaWx1cmUoX19OKCJiYXNpY19maWxlYnVmOjp1bmRlcmZsb3cgIgorCQkJCSJpbnZhbGlkIGJ5dGUgc2VxdWVuY2UgaW4gZmlsZSIpKTsKKwkgIGVsc2UKKwkgICAgX190aHJvd19pb3NfZmFpbHVyZShfX04oImJhc2ljX2ZpbGVidWY6OnVuZGVyZmxvdyAiCisJCQkJImVycm9yIHJlYWRpbmcgdGhlIGZpbGUiKSk7CisJfQorICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdHlwZW5hbWUgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQorICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CisgICAgcGJhY2tmYWlsKGludF90eXBlIF9faSkKKyAgICB7CisgICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKKyAgICAgIGNvbnN0IGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6OmluOworICAgICAgaWYgKF9fdGVzdGluICYmICFfTV93cml0aW5nKQorCXsKKwkgIC8vIFJlbWVtYmVyIHdoZXRoZXIgdGhlIHBiYWNrIGJ1ZmZlciBpcyBhY3RpdmUsIG90aGVyd2lzZSBiZWxvdworCSAgLy8gd2UgbWF5IHRyeSB0byBzdG9yZSBpbiBpdCBhIHNlY29uZCBjaGFyIChsaWJzdGRjKysvOTc2MSkuCisJICBjb25zdCBib29sIF9fdGVzdHBiID0gX01fcGJhY2tfaW5pdDsKKwkgIGNvbnN0IGJvb2wgX190ZXN0ZW9mID0gdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9faSwgX19yZXQpOworCSAgaW50X3R5cGUgX190bXA7CisJICBpZiAodGhpcy0+ZWJhY2soKSA8IHRoaXMtPmdwdHIoKSkKKwkgICAgeworCSAgICAgIHRoaXMtPmdidW1wKC0xKTsKKwkgICAgICBfX3RtcCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqdGhpcy0+Z3B0cigpKTsKKwkgICAgfQorCSAgZWxzZSBpZiAodGhpcy0+c2Vla29mZigtMSwgaW9zX2Jhc2U6OmN1cikgIT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKKwkgICAgeworCSAgICAgIF9fdG1wID0gdGhpcy0+dW5kZXJmbG93KCk7CisJICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3RtcCwgX19yZXQpKQorCQlyZXR1cm4gX19yZXQ7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8vIEF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciwgbmVlZCB0byBtYWtlIGEKKwkgICAgICAvLyBwdXRiYWNrIHBvc2l0aW9uIGF2YWlsYWJsZS4gIEJ1dCB0aGUgc2VlayBtYXkgZmFpbAorCSAgICAgIC8vIChmLmkuLCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgZmlsZSwgc2VlCisJICAgICAgLy8gbGlic3RkYysrLzk0MzkpIGFuZCBpbiB0aGF0IGNhc2Ugd2UgcmV0dXJuCisJICAgICAgLy8gdHJhaXRzX3R5cGU6OmVvZigpLgorCSAgICAgIHJldHVybiBfX3JldDsKKwkgICAgfQorCisJICAvLyBUcnkgdG8gcHV0IGJhY2sgX19pIGludG8gaW5wdXQgc2VxdWVuY2UgaW4gb25lIG9mIHRocmVlIHdheXMuCisJICAvLyBPcmRlciB0aGVzZSB0ZXN0cyBkb25lIGluIGlzIHVuc3BlY2lmaWVkIGJ5IHRoZSBzdGFuZGFyZC4KKwkgIGlmICghX190ZXN0ZW9mICYmIHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2ksIF9fdG1wKSkKKwkgICAgX19yZXQgPSBfX2k7CisJICBlbHNlIGlmIChfX3Rlc3Rlb2YpCisJICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6Om5vdF9lb2YoX19pKTsKKwkgIGVsc2UgaWYgKCFfX3Rlc3RwYikKKwkgICAgeworCSAgICAgIF9NX2NyZWF0ZV9wYmFjaygpOworCSAgICAgIF9NX3JlYWRpbmcgPSB0cnVlOworCSAgICAgICp0aGlzLT5ncHRyKCkgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9faSk7CisJICAgICAgX19yZXQgPSBfX2k7CisJICAgIH0KKwl9CisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICB0eXBlbmFtZSBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCisgICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBvdmVyZmxvdyhpbnRfdHlwZSBfX2MpCisgICAgeworICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CisgICAgICBjb25zdCBib29sIF9fdGVzdGVvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fcmV0KTsKKyAgICAgIGNvbnN0IGJvb2wgX190ZXN0b3V0ID0gX01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CisgICAgICBpZiAoX190ZXN0b3V0ICYmICFfTV9yZWFkaW5nKQorCXsKKwkgIGlmICh0aGlzLT5wYmFzZSgpIDwgdGhpcy0+cHB0cigpKQorCSAgICB7CisJICAgICAgLy8gSWYgYXBwcm9wcmlhdGUsIGFwcGVuZCB0aGUgb3ZlcmZsb3cgY2hhci4KKwkgICAgICBpZiAoIV9fdGVzdGVvZikKKwkJeworCQkgICp0aGlzLT5wcHRyKCkgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CisJCSAgdGhpcy0+cGJ1bXAoMSk7CisJCX0KKworCSAgICAgIC8vIENvbnZlcnQgcGVuZGluZyBzZXF1ZW5jZSB0byBleHRlcm5hbCByZXByZXNlbnRhdGlvbiwKKwkgICAgICAvLyBhbmQgb3V0cHV0LgorCSAgICAgIGlmIChfTV9jb252ZXJ0X3RvX2V4dGVybmFsKHRoaXMtPnBiYXNlKCksCisJCQkJCSB0aGlzLT5wcHRyKCkgLSB0aGlzLT5wYmFzZSgpKSkKKwkJeworCQkgIF9NX3NldF9idWZmZXIoMCk7CisJCSAgX19yZXQgPSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2MpOworCQl9CisJICAgIH0KKwkgIGVsc2UgaWYgKF9NX2J1Zl9zaXplID4gMSkKKwkgICAgeworCSAgICAgIC8vIE92ZXJmbG93IGluICd1bmNvbW1pdHRlZCcgbW9kZTogc2V0IF9NX3dyaXRpbmcsIHNldAorCSAgICAgIC8vIHRoZSBidWZmZXIgdG8gdGhlIGluaXRpYWwgJ3dyaXRlJyBtb2RlLCBhbmQgcHV0IF9fYworCSAgICAgIC8vIGludG8gdGhlIGJ1ZmZlci4KKwkgICAgICBfTV9zZXRfYnVmZmVyKDApOworCSAgICAgIF9NX3dyaXRpbmcgPSB0cnVlOworCSAgICAgIGlmICghX190ZXN0ZW9mKQorCQl7CisJCSAgKnRoaXMtPnBwdHIoKSA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKKwkJICB0aGlzLT5wYnVtcCgxKTsKKwkJfQorCSAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6Om5vdF9lb2YoX19jKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgLy8gVW5idWZmZXJlZC4KKwkgICAgICBjaGFyX3R5cGUgX19jb252ID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOworCSAgICAgIGlmIChfX3Rlc3Rlb2YgfHwgX01fY29udmVydF90b19leHRlcm5hbCgmX19jb252LCAxKSkKKwkJeworCQkgIF9NX3dyaXRpbmcgPSB0cnVlOworCQkgIF9fcmV0ID0gdHJhaXRzX3R5cGU6Om5vdF9lb2YoX19jKTsKKwkJfQorCSAgICB9CisJfQorICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgYm9vbAorICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CisgICAgX01fY29udmVydF90b19leHRlcm5hbChfQ2hhclQqIF9faWJ1Ziwgc3RyZWFtc2l6ZSBfX2lsZW4pCisgICAgeworICAgICAgLy8gU2l6ZXMgb2YgZXh0ZXJuYWwgYW5kIHBlbmRpbmcgb3V0cHV0LgorICAgICAgc3RyZWFtc2l6ZSBfX2VsZW47CisgICAgICBzdHJlYW1zaXplIF9fcGxlbjsKKyAgICAgIGlmIChfX2NoZWNrX2ZhY2V0KF9NX2NvZGVjdnQpLmFsd2F5c19ub2NvbnYoKSkKKwl7CisJICBfX2VsZW4gPSBfTV9maWxlLnhzcHV0bihyZWludGVycHJldF9jYXN0PGNoYXIqPihfX2lidWYpLCBfX2lsZW4pOworCSAgX19wbGVuID0gX19pbGVuOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvLyBXb3JzdC1jYXNlIG51bWJlciBvZiBleHRlcm5hbCBieXRlcyBuZWVkZWQuCisJICAvLyBYWFggTm90IGRvbmUgZW5jb2RpbmcoKSA9PSAtMS4KKwkgIHN0cmVhbXNpemUgX19ibGVuID0gX19pbGVuICogX01fY29kZWN2dC0+bWF4X2xlbmd0aCgpOworCSAgY2hhciogX19idWYgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX2JsZW4pKTsKKworCSAgY2hhciogX19iZW5kOworCSAgY29uc3QgY2hhcl90eXBlKiBfX2llbmQ7CisJICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCBfX3I7CisJICBfX3IgPSBfTV9jb2RlY3Z0LT5vdXQoX01fc3RhdGVfY3VyLCBfX2lidWYsIF9faWJ1ZiArIF9faWxlbiwKKwkJCQlfX2llbmQsIF9fYnVmLCBfX2J1ZiArIF9fYmxlbiwgX19iZW5kKTsKKworCSAgaWYgKF9fciA9PSBjb2RlY3Z0X2Jhc2U6Om9rIHx8IF9fciA9PSBjb2RlY3Z0X2Jhc2U6OnBhcnRpYWwpCisJICAgIF9fYmxlbiA9IF9fYmVuZCAtIF9fYnVmOworCSAgZWxzZSBpZiAoX19yID09IGNvZGVjdnRfYmFzZTo6bm9jb252KQorCSAgICB7CisJICAgICAgLy8gU2FtZSBhcyB0aGUgYWx3YXlzX25vY29udiBjYXNlIGFib3ZlLgorCSAgICAgIF9fYnVmID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19pYnVmKTsKKwkgICAgICBfX2JsZW4gPSBfX2lsZW47CisJICAgIH0KKwkgIGVsc2UKKwkgICAgX190aHJvd19pb3NfZmFpbHVyZShfX04oImJhc2ljX2ZpbGVidWY6Ol9NX2NvbnZlcnRfdG9fZXh0ZXJuYWwgIgorCQkJCSAgICAiY29udmVyc2lvbiBlcnJvciIpKTsKKyAgCisJICBfX2VsZW4gPSBfTV9maWxlLnhzcHV0bihfX2J1ZiwgX19ibGVuKTsKKwkgIF9fcGxlbiA9IF9fYmxlbjsKKworCSAgLy8gVHJ5IG9uY2UgbW9yZSBmb3IgcGFydGlhbCBjb252ZXJzaW9ucy4KKwkgIGlmIChfX3IgPT0gY29kZWN2dF9iYXNlOjpwYXJ0aWFsICYmIF9fZWxlbiA9PSBfX3BsZW4pCisJICAgIHsKKwkgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faXJlc3VtZSA9IF9faWVuZDsKKwkgICAgICBzdHJlYW1zaXplIF9fcmxlbiA9IHRoaXMtPnBwdHIoKSAtIF9faWVuZDsKKwkgICAgICBfX3IgPSBfTV9jb2RlY3Z0LT5vdXQoX01fc3RhdGVfY3VyLCBfX2lyZXN1bWUsCisJCQkJICAgIF9faXJlc3VtZSArIF9fcmxlbiwgX19pZW5kLCBfX2J1ZiwKKwkJCQkgICAgX19idWYgKyBfX2JsZW4sIF9fYmVuZCk7CisJICAgICAgaWYgKF9fciAhPSBjb2RlY3Z0X2Jhc2U6OmVycm9yKQorCQl7CisJCSAgX19ybGVuID0gX19iZW5kIC0gX19idWY7CisJCSAgX19lbGVuID0gX01fZmlsZS54c3B1dG4oX19idWYsIF9fcmxlbik7CisJCSAgX19wbGVuID0gX19ybGVuOworCQl9CisJICAgICAgZWxzZQorCQlfX3Rocm93X2lvc19mYWlsdXJlKF9fTigiYmFzaWNfZmlsZWJ1Zjo6X01fY29udmVydF90b19leHRlcm5hbCAiCisJCQkJCSJjb252ZXJzaW9uIGVycm9yIikpOworCSAgICB9CisJfQorICAgICAgcmV0dXJuIF9fZWxlbiA9PSBfX3BsZW47CisgICAgfQorCisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgIHN0cmVhbXNpemUKKyAgICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICAgeHNnZXRuKF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikKKyAgICAgeworICAgICAgIC8vIENsZWFyIG91dCBwYmFjayBidWZmZXIgYmVmb3JlIGdvaW5nIG9uIHRvIHRoZSByZWFsIGRlYWwuLi4KKyAgICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKKyAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkKKwkgeworCSAgIGlmIChfX24gPiAwICYmIHRoaXMtPmdwdHIoKSA9PSB0aGlzLT5lYmFjaygpKQorCSAgICAgeworCSAgICAgICAqX19zKysgPSAqdGhpcy0+Z3B0cigpOworCSAgICAgICB0aGlzLT5nYnVtcCgxKTsKKwkgICAgICAgX19yZXQgPSAxOworCSAgICAgICAtLV9fbjsKKwkgICAgIH0KKwkgICBfTV9kZXN0cm95X3BiYWNrKCk7CisJIH0KKyAgICAgICAKKyAgICAgICAvLyBPcHRpbWl6YXRpb24gaW4gdGhlIGFsd2F5c19ub2NvbnYoKSBjYXNlLCB0byBiZSBnZW5lcmFsaXplZCBpbiB0aGUKKyAgICAgICAvLyBmdXR1cmU6IHdoZW4gX19uID4gX19idWZsZW4gd2UgcmVhZCBkaXJlY3RseSBpbnN0ZWFkIG9mIHVzaW5nIHRoZQorICAgICAgIC8vIGJ1ZmZlciByZXBlYXRlZGx5LgorICAgICAgIGNvbnN0IGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6OmluOworICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19idWZsZW4gPSBfTV9idWZfc2l6ZSA+IDEgPyBfTV9idWZfc2l6ZSAtIDEgOiAxOworCisgICAgICAgaWYgKF9fbiA+IF9fYnVmbGVuICYmIF9fY2hlY2tfZmFjZXQoX01fY29kZWN2dCkuYWx3YXlzX25vY29udigpCisJICAgJiYgX190ZXN0aW4gJiYgIV9NX3dyaXRpbmcpCisJIHsKKwkgICAvLyBGaXJzdCwgY29weSB0aGUgY2hhcnMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBidWZmZXIuCisJICAgY29uc3Qgc3RyZWFtc2l6ZSBfX2F2YWlsID0gdGhpcy0+ZWdwdHIoKSAtIHRoaXMtPmdwdHIoKTsKKwkgICBpZiAoX19hdmFpbCAhPSAwKQorCSAgICAgeworCSAgICAgICBpZiAoX19hdmFpbCA9PSAxKQorCQkgKl9fcyA9ICp0aGlzLT5ncHRyKCk7CisJICAgICAgIGVsc2UKKwkJIHRyYWl0c190eXBlOjpjb3B5KF9fcywgdGhpcy0+Z3B0cigpLCBfX2F2YWlsKTsKKwkgICAgICAgX19zICs9IF9fYXZhaWw7CisJICAgICAgIHRoaXMtPmdidW1wKF9fYXZhaWwpOworCSAgICAgICBfX3JldCArPSBfX2F2YWlsOworCSAgICAgICBfX24gLT0gX19hdmFpbDsKKwkgICAgIH0KKworCSAgIC8vIE5lZWQgdG8gbG9vcCBpbiBjYXNlIG9mIHNob3J0IHJlYWRzIChyZWxhdGl2ZWx5IGNvbW1vbgorCSAgIC8vIHdpdGggcGlwZXMpLgorCSAgIHN0cmVhbXNpemUgX19sZW47CisJICAgZm9yICg7OykKKwkgICAgIHsKKwkgICAgICAgX19sZW4gPSBfTV9maWxlLnhzZ2V0bihyZWludGVycHJldF9jYXN0PGNoYXIqPihfX3MpLAorCQkJCSAgICAgIF9fbik7CisJICAgICAgIGlmIChfX2xlbiA9PSAtMSkKKwkJIF9fdGhyb3dfaW9zX2ZhaWx1cmUoX19OKCJiYXNpY19maWxlYnVmOjp4c2dldG4gIgorCQkJCQkgImVycm9yIHJlYWRpbmcgdGhlIGZpbGUiKSk7CisJICAgICAgIGlmIChfX2xlbiA9PSAwKQorCQkgYnJlYWs7CisKKwkgICAgICAgX19uIC09IF9fbGVuOworCSAgICAgICBfX3JldCArPSBfX2xlbjsKKwkgICAgICAgaWYgKF9fbiA9PSAwKQorCQkgYnJlYWs7CisKKwkgICAgICAgX19zICs9IF9fbGVuOworCSAgICAgfQorCisJICAgaWYgKF9fbiA9PSAwKQorCSAgICAgeworCSAgICAgICBfTV9zZXRfYnVmZmVyKDApOworCSAgICAgICBfTV9yZWFkaW5nID0gdHJ1ZTsKKwkgICAgIH0KKwkgICBlbHNlIGlmIChfX2xlbiA9PSAwKQorCSAgICAgeworCSAgICAgICAvLyBJZiBlbmQgb2YgZmlsZSBpcyByZWFjaGVkLCBzZXQgJ3VuY29tbWl0dGVkJworCSAgICAgICAvLyBtb2RlLCB0aHVzIGFsbG93aW5nIGFuIGltbWVkaWF0ZSB3cml0ZSB3aXRob3V0CisJICAgICAgIC8vIGFuIGludGVydmVuaW5nIHNlZWsuCisJICAgICAgIF9NX3NldF9idWZmZXIoLTEpOworCSAgICAgICBfTV9yZWFkaW5nID0gZmFsc2U7CisJICAgICB9CisJIH0KKyAgICAgICBlbHNlCisJIF9fcmV0ICs9IF9fc3RyZWFtYnVmX3R5cGU6OnhzZ2V0bihfX3MsIF9fbik7CisKKyAgICAgICByZXR1cm4gX19yZXQ7CisgICAgIH0KKworICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgICBzdHJlYW1zaXplCisgICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CisgICAgIHhzcHV0bihjb25zdCBfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pCisgICAgIHsKKyAgICAgICAvLyBPcHRpbWl6YXRpb24gaW4gdGhlIGFsd2F5c19ub2NvbnYoKSBjYXNlLCB0byBiZSBnZW5lcmFsaXplZCBpbiB0aGUKKyAgICAgICAvLyBmdXR1cmU6IHdoZW4gX19uIGlzIHN1ZmZpY2llbnRseSBsYXJnZSB3ZSB3cml0ZSBkaXJlY3RseSBpbnN0ZWFkIG9mCisgICAgICAgLy8gdXNpbmcgdGhlIGJ1ZmZlci4KKyAgICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKKyAgICAgICBjb25zdCBib29sIF9fdGVzdG91dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OworICAgICAgIGlmIChfX2NoZWNrX2ZhY2V0KF9NX2NvZGVjdnQpLmFsd2F5c19ub2NvbnYoKQorCSAgICYmIF9fdGVzdG91dCAmJiAhX01fcmVhZGluZykKKwl7CisJICAvLyBNZWFzdXJlbWVudCB3b3VsZCByZXZlYWwgdGhlIGJlc3QgY2hvaWNlLgorCSAgY29uc3Qgc3RyZWFtc2l6ZSBfX2NodW5rID0gMXVsIDw8IDEwOworCSAgc3RyZWFtc2l6ZSBfX2J1ZmF2YWlsID0gdGhpcy0+ZXBwdHIoKSAtIHRoaXMtPnBwdHIoKTsKKworCSAgLy8gRG9uJ3QgbWlzdGFrZSAndW5jb21taXR0ZWQnIG1vZGUgYnVmZmVyZWQgd2l0aCB1bmJ1ZmZlcmVkLgorCSAgaWYgKCFfTV93cml0aW5nICYmIF9NX2J1Zl9zaXplID4gMSkKKwkgICAgX19idWZhdmFpbCA9IF9NX2J1Zl9zaXplIC0gMTsKKworCSAgY29uc3Qgc3RyZWFtc2l6ZSBfX2xpbWl0ID0gc3RkOjptaW4oX19jaHVuaywgX19idWZhdmFpbCk7CisJICBpZiAoX19uID49IF9fbGltaXQpCisJICAgIHsKKwkgICAgICBjb25zdCBzdHJlYW1zaXplIF9fYnVmZmlsbCA9IHRoaXMtPnBwdHIoKSAtIHRoaXMtPnBiYXNlKCk7CisJICAgICAgY29uc3QgY2hhciogX19idWYgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih0aGlzLT5wYmFzZSgpKTsKKwkgICAgICBfX3JldCA9IF9NX2ZpbGUueHNwdXRuXzIoX19idWYsIF9fYnVmZmlsbCwKKwkJCQkgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSwKKwkJCQkgICAgICAgX19uKTsKKwkgICAgICBpZiAoX19yZXQgPT0gX19idWZmaWxsICsgX19uKQorCQl7CisJCSAgX01fc2V0X2J1ZmZlcigwKTsKKwkJICBfTV93cml0aW5nID0gdHJ1ZTsKKwkJfQorCSAgICAgIGlmIChfX3JldCA+IF9fYnVmZmlsbCkKKwkJX19yZXQgLT0gX19idWZmaWxsOworCSAgICAgIGVsc2UKKwkJX19yZXQgPSAwOworCSAgICB9CisJICBlbHNlCisJICAgIF9fcmV0ID0gX19zdHJlYW1idWZfdHlwZTo6eHNwdXRuKF9fcywgX19uKTsKKwl9CisgICAgICAgZWxzZQorCSBfX3JldCA9IF9fc3RyZWFtYnVmX3R5cGU6OnhzcHV0bihfX3MsIF9fbik7CisgICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdHlwZW5hbWUgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfX3N0cmVhbWJ1Zl90eXBlKgorICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CisgICAgc2V0YnVmKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKKyAgICB7CisgICAgICBpZiAoIXRoaXMtPmlzX29wZW4oKSkKKwl7CisJICBpZiAoX19zID09IDAgJiYgX19uID09IDApCisJICAgIF9NX2J1Zl9zaXplID0gMTsKKwkgIGVsc2UgaWYgKF9fcyAmJiBfX24gPiAwKQorCSAgICB7CisJICAgICAgLy8gVGhpcyBpcyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGJlaGF2aW9yLCBhbmQgYXNzdW1lcyB0aGF0CisJICAgICAgLy8gYW4gZXh0ZXJuYWwgY2hhcl90eXBlIGFycmF5IG9mIGxlbmd0aCBfX24gZXhpc3RzIGFuZCBoYXMKKwkgICAgICAvLyBiZWVuIHByZS1hbGxvY2F0ZWQuIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCB0aGluZ3Mgd2lsbAorCSAgICAgIC8vIHF1aWNrbHkgYmxvdyB1cC4gV2hlbiBfX24gPiAxLCBfX24gLSAxIHBvc2l0aW9ucyB3aWxsIGJlCisJICAgICAgLy8gdXNlZCBmb3IgdGhlIGdldCBhcmVhLCBfX24gLSAxIGZvciB0aGUgcHV0IGFyZWEgYW5kIDEKKwkgICAgICAvLyBwb3NpdGlvbiB0byBob3N0IHRoZSBvdmVyZmxvdyBjaGFyIG9mIGEgZnVsbCBwdXQgYXJlYS4KKwkgICAgICAvLyBXaGVuIF9fbiA9PSAxLCAxIHBvc2l0aW9uIHdpbGwgYmUgdXNlZCBmb3IgdGhlIGdldCBhcmVhCisJICAgICAgLy8gYW5kIDAgZm9yIHRoZSBwdXQgYXJlYSwgYXMgaW4gdGhlIHVuYnVmZmVyZWQgY2FzZSBhYm92ZS4KKwkgICAgICBfTV9idWYgPSBfX3M7CisJICAgICAgX01fYnVmX3NpemUgPSBfX247CisJICAgIH0KKwl9CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKworICAvLyBBY2NvcmRpbmcgdG8gMjcuOC4xLjQgcDExIC0gMTMsIHNlZWtvZmYgc2hvdWxkIGlnbm9yZSB0aGUgbGFzdAorICAvLyBhcmd1bWVudCAob2YgdHlwZSBvcGVubW9kZSkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICB0eXBlbmFtZSBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlCisgICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBzZWVrb2ZmKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwgaW9zX2Jhc2U6Om9wZW5tb2RlKQorICAgIHsKKyAgICAgIGludCBfX3dpZHRoID0gMDsKKyAgICAgIGlmIChfTV9jb2RlY3Z0KQorCV9fd2lkdGggPSBfTV9jb2RlY3Z0LT5lbmNvZGluZygpOworICAgICAgaWYgKF9fd2lkdGggPCAwKQorCV9fd2lkdGggPSAwOworCisgICAgICBwb3NfdHlwZSBfX3JldCA9ICBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOworICAgICAgY29uc3QgYm9vbCBfX3Rlc3RmYWlsID0gX19vZmYgIT0gMCAmJiBfX3dpZHRoIDw9IDA7CisgICAgICBpZiAodGhpcy0+aXNfb3BlbigpICYmICFfX3Rlc3RmYWlsKQorCXsKKwkgIC8vIERpdGNoIGFueSBwYmFjayBidWZmZXJzIHRvIGF2b2lkIGNvbmZ1c2lvbi4KKwkgIF9NX2Rlc3Ryb3lfcGJhY2soKTsKKworCSAgLy8gQ29ycmVjdCBzdGF0ZSBhdCBkZXN0aW5hdGlvbi4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIGNvcnJlY3QKKwkgIC8vIHN0YXRlIGZvciB0aGUgY3VycmVudCBwb3NpdGlvbiBkdXJpbmcgb3V0cHV0LCBiZWNhdXNlCisJICAvLyBjb2RlY3Z0Ojp1bnNoaWZ0KCkgcmV0dXJucyB0aGUgc3RhdGUgdG8gdGhlIGluaXRpYWwgc3RhdGUuCisJICAvLyBUaGlzIGlzIGFsc28gdGhlIGNvcnJlY3Qgc3RhdGUgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBiZWNhdXNlCisJICAvLyBhbiB1bnNoaWZ0IHNlcXVlbmNlIHNob3VsZCBoYXZlIGJlZW4gd3JpdHRlbiBhdCB0aGUgZW5kLgorCSAgX19zdGF0ZV90eXBlIF9fc3RhdGUgPSBfTV9zdGF0ZV9iZWc7CisJICBvZmZfdHlwZSBfX2NvbXB1dGVkX29mZiA9IF9fb2ZmICogX193aWR0aDsKKwkgIGlmIChfTV9yZWFkaW5nICYmIF9fd2F5ID09IGlvc19iYXNlOjpjdXIpCisJICAgIHsKKwkgICAgICBpZiAoX01fY29kZWN2dC0+YWx3YXlzX25vY29udigpKQorCQlfX2NvbXB1dGVkX29mZiArPSB0aGlzLT5ncHRyKCkgLSB0aGlzLT5lZ3B0cigpOworCSAgICAgIGVsc2UKKwkJeworCQkgIC8vIENhbGN1bGF0ZSBvZmZzZXQgZnJvbSBfTV9leHRfYnVmIHRoYXQgY29ycmVzcG9uZHMKKwkJICAvLyB0byBncHRyKCkuIE5vdGU6IHVzZXMgX01fc3RhdGVfbGFzdCwgd2hpY2gKKwkJICAvLyBjb3JyZXNwb25kcyB0byBlYmFjaygpLgorCQkgIGNvbnN0IGludCBfX2dwdHJfb2ZmID0KKwkJICAgIF9NX2NvZGVjdnQtPmxlbmd0aChfTV9zdGF0ZV9sYXN0LCBfTV9leHRfYnVmLCBfTV9leHRfbmV4dCwKKwkJCQkgICAgICAgdGhpcy0+Z3B0cigpIC0gdGhpcy0+ZWJhY2soKSk7CisJCSAgX19jb21wdXRlZF9vZmYgKz0gX01fZXh0X2J1ZiArIF9fZ3B0cl9vZmYgLSBfTV9leHRfZW5kOworCisJCSAgLy8gX01fc3RhdGVfbGFzdCBpcyBtb2RpZmllZCBieSBjb2RlY3Z0OjpsZW5ndGgoKSBzbworCQkgIC8vIGl0IG5vdyBjb3JyZXNwb25kcyB0byBncHRyKCkuCisJCSAgX19zdGF0ZSA9IF9NX3N0YXRlX2xhc3Q7CisJCX0KKwkgICAgfQorCSAgX19yZXQgPSBfTV9zZWVrKF9fY29tcHV0ZWRfb2ZmLCBfX3dheSwgX19zdGF0ZSk7CisJfQorICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgIC8vIDE3MS4gU3RyYW5nZSBzZWVrcG9zKCkgc2VtYW50aWNzIGR1ZSB0byBqb2ludCBwb3NpdGlvbgorICAvLyBBY2NvcmRpbmcgdG8gdGhlIHJlc29sdXRpb24gb2YgRFIgMTcxLCBzZWVrcG9zIHNob3VsZCBpZ25vcmUgdGhlIGxhc3QKKyAgLy8gYXJndW1lbnQgKG9mIHR5cGUgb3Blbm1vZGUpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdHlwZW5hbWUgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQorICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CisgICAgc2Vla3Bvcyhwb3NfdHlwZSBfX3BvcywgaW9zX2Jhc2U6Om9wZW5tb2RlKQorICAgIHsKKyAgICAgIHBvc190eXBlIF9fcmV0ID0gIHBvc190eXBlKG9mZl90eXBlKC0xKSk7CisgICAgICBpZiAodGhpcy0+aXNfb3BlbigpKQorCXsKKwkgIC8vIERpdGNoIGFueSBwYmFjayBidWZmZXJzIHRvIGF2b2lkIGNvbmZ1c2lvbi4KKwkgIF9NX2Rlc3Ryb3lfcGJhY2soKTsKKwkgIF9fcmV0ID0gX01fc2VlayhvZmZfdHlwZShfX3BvcyksIGlvc19iYXNlOjpiZWcsIF9fcG9zLnN0YXRlKCkpOworCX0KKyAgICAgIHJldHVybiBfX3JldDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5cGUKKyAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIF9NX3NlZWsob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LCBfX3N0YXRlX3R5cGUgX19zdGF0ZSkKKyAgICB7CisgICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKG9mZl90eXBlKC0xKSk7CisgICAgICBpZiAoX01fdGVybWluYXRlX291dHB1dCgpKQorCXsKKwkgIC8vIFJldHVybnMgcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSBpbiBjYXNlIG9mIGZhaWx1cmUuCisJICBfX3JldCA9IHBvc190eXBlKF9NX2ZpbGUuc2Vla29mZihfX29mZiwgX193YXkpKTsKKwkgIGlmIChfX3JldCAhPSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQorCSAgICB7CisJICAgICAgX01fcmVhZGluZyA9IGZhbHNlOworCSAgICAgIF9NX3dyaXRpbmcgPSBmYWxzZTsKKwkgICAgICBfTV9leHRfbmV4dCA9IF9NX2V4dF9lbmQgPSBfTV9leHRfYnVmOworCSAgICAgIF9NX3NldF9idWZmZXIoLTEpOworCSAgICAgIF9NX3N0YXRlX2N1ciA9IF9fc3RhdGU7CisJICAgICAgX19yZXQuc3RhdGUoX01fc3RhdGVfY3VyKTsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiBfX3JldDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJvb2wKKyAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIF9NX3Rlcm1pbmF0ZV9vdXRwdXQoKQorICAgIHsKKyAgICAgIC8vIFBhcnQgb25lOiB1cGRhdGUgdGhlIG91dHB1dCBzZXF1ZW5jZS4KKyAgICAgIGJvb2wgX190ZXN0dmFsaWQgPSB0cnVlOworICAgICAgaWYgKHRoaXMtPnBiYXNlKCkgPCB0aGlzLT5wcHRyKCkpCisJeworCSAgY29uc3QgaW50X3R5cGUgX190bXAgPSB0aGlzLT5vdmVyZmxvdygpOworCSAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3RtcCwgdHJhaXRzX3R5cGU6OmVvZigpKSkKKwkgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKKwl9CisKKyAgICAgIC8vIFBhcnQgdHdvOiBvdXRwdXQgdW5zaGlmdCBzZXF1ZW5jZS4KKyAgICAgIGlmIChfTV93cml0aW5nICYmICFfX2NoZWNrX2ZhY2V0KF9NX2NvZGVjdnQpLmFsd2F5c19ub2NvbnYoKQorCSAgJiYgX190ZXN0dmFsaWQpCisJeworCSAgLy8gTm90ZTogdGhpcyB2YWx1ZSBpcyBhcmJpdHJhcnksIHNpbmNlIHRoZXJlIGlzIG5vIHdheSB0bworCSAgLy8gZ2V0IHRoZSBsZW5ndGggb2YgdGhlIHVuc2hpZnQgc2VxdWVuY2UgZnJvbSBjb2RlY3Z0LAorCSAgLy8gd2l0aG91dCBjYWxsaW5nIHVuc2hpZnQuCisJICBjb25zdCBzaXplX3QgX19ibGVuID0gMTI4OworCSAgY2hhciBfX2J1ZltfX2JsZW5dOworCSAgY29kZWN2dF9iYXNlOjpyZXN1bHQgX19yOworCSAgc3RyZWFtc2l6ZSBfX2lsZW4gPSAwOworCisJICBkbworCSAgICB7CisJICAgICAgY2hhciogX19uZXh0OworCSAgICAgIF9fciA9IF9NX2NvZGVjdnQtPnVuc2hpZnQoX01fc3RhdGVfY3VyLCBfX2J1ZiwKKwkJCQkJX19idWYgKyBfX2JsZW4sIF9fbmV4dCk7CisJICAgICAgaWYgKF9fciA9PSBjb2RlY3Z0X2Jhc2U6OmVycm9yKQorCQlfX3Rlc3R2YWxpZCA9IGZhbHNlOworCSAgICAgIGVsc2UgaWYgKF9fciA9PSBjb2RlY3Z0X2Jhc2U6Om9rIHx8CisJCSAgICAgICBfX3IgPT0gY29kZWN2dF9iYXNlOjpwYXJ0aWFsKQorCQl7CisJCSAgX19pbGVuID0gX19uZXh0IC0gX19idWY7CisJCSAgaWYgKF9faWxlbiA+IDApCisJCSAgICB7CisJCSAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19lbGVuID0gX01fZmlsZS54c3B1dG4oX19idWYsIF9faWxlbik7CisJCSAgICAgIGlmIChfX2VsZW4gIT0gX19pbGVuKQorCQkJX190ZXN0dmFsaWQgPSBmYWxzZTsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICB3aGlsZSAoX19yID09IGNvZGVjdnRfYmFzZTo6cGFydGlhbCAmJiBfX2lsZW4gPiAwICYmIF9fdGVzdHZhbGlkKTsKKworCSAgaWYgKF9fdGVzdHZhbGlkKQorCSAgICB7CisJICAgICAgLy8gVGhpcyBzZWNvbmQgY2FsbCB0byBvdmVyZmxvdygpIGlzIHJlcXVpcmVkIGJ5IHRoZSBzdGFuZGFyZCwKKwkgICAgICAvLyBidXQgaXQncyBub3QgY2xlYXIgd2h5IGl0J3MgbmVlZGVkLCBzaW5jZSB0aGUgb3V0cHV0IGJ1ZmZlcgorCSAgICAgIC8vIHNob3VsZCBiZSBlbXB0eSBieSB0aGlzIHBvaW50IChpdCBzaG91bGQgaGF2ZSBiZWVuIGVtcHRpZWQKKwkgICAgICAvLyBpbiB0aGUgZmlyc3QgY2FsbCB0byBvdmVyZmxvdygpKS4KKwkgICAgICBjb25zdCBpbnRfdHlwZSBfX3RtcCA9IHRoaXMtPm92ZXJmbG93KCk7CisJICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3RtcCwgdHJhaXRzX3R5cGU6OmVvZigpKSkKKwkJX190ZXN0dmFsaWQgPSBmYWxzZTsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiBfX3Rlc3R2YWxpZDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGludAorICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CisgICAgc3luYygpCisgICAgeworICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGludGVybmFsIGJ1ZmZlciByZXN5bmNzIGl0cyBpZGVhIG9mCisgICAgICAvLyB0aGUgZmlsZSBwb3NpdGlvbiB3aXRoIHRoZSBleHRlcm5hbCBmaWxlLgorICAgICAgaW50IF9fcmV0ID0gMDsKKyAgICAgIGlmICh0aGlzLT5wYmFzZSgpIDwgdGhpcy0+cHB0cigpKQorCXsKKwkgIGNvbnN0IGludF90eXBlIF9fdG1wID0gdGhpcy0+b3ZlcmZsb3coKTsKKwkgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX190bXAsIHRyYWl0c190eXBlOjplb2YoKSkpCisJICAgIF9fcmV0ID0gLTE7CisJfQorICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdm9pZAorICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CisgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykKKyAgICB7CisgICAgICBib29sIF9fdGVzdHZhbGlkID0gdHJ1ZTsKKworICAgICAgY29uc3QgX19jb2RlY3Z0X3R5cGUqIF9NX2NvZGVjdnRfdG1wID0gMDsKKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KGhhc19mYWNldDxfX2NvZGVjdnRfdHlwZT4oX19sb2MpLCB0cnVlKSkKKwlfTV9jb2RlY3Z0X3RtcCA9ICZ1c2VfZmFjZXQ8X19jb2RlY3Z0X3R5cGU+KF9fbG9jKTsKKworICAgICAgaWYgKHRoaXMtPmlzX29wZW4oKSkKKwl7CisJICAvLyBlbmNvZGluZygpID09IC0xIGlzIG9rIG9ubHkgYXQgdGhlIGJlZ2lubmluZy4KKwkgIGlmICgoX01fcmVhZGluZyB8fCBfTV93cml0aW5nKQorCSAgICAgICYmIF9fY2hlY2tfZmFjZXQoX01fY29kZWN2dCkuZW5jb2RpbmcoKSA9PSAtMSkKKwkgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGlmIChfTV9yZWFkaW5nKQorCQl7CisJCSAgaWYgKF9fY2hlY2tfZmFjZXQoX01fY29kZWN2dCkuYWx3YXlzX25vY29udigpKQorCQkgICAgeworCQkgICAgICBpZiAoX01fY29kZWN2dF90bXAKKwkJCSAgJiYgIV9fY2hlY2tfZmFjZXQoX01fY29kZWN2dF90bXApLmFsd2F5c19ub2NvbnYoKSkKKwkJCV9fdGVzdHZhbGlkID0gdGhpcy0+c2Vla29mZigwLCBpb3NfYmFzZTo6Y3VyLCBfTV9tb2RlKQorCQkJICAgICAgICAgICAgICAhPSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgLy8gRXh0ZXJuYWwgcG9zaXRpb24gY29ycmVzcG9uZGluZyB0byBncHRyKCkuCisJCSAgICAgIF9NX2V4dF9uZXh0ID0gX01fZXh0X2J1ZgorCQkJKyBfTV9jb2RlY3Z0LT5sZW5ndGgoX01fc3RhdGVfbGFzdCwgX01fZXh0X2J1ZiwgX01fZXh0X25leHQsCisJCQkJCSAgICAgdGhpcy0+Z3B0cigpIC0gdGhpcy0+ZWJhY2soKSk7CisJCSAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19yZW1haW5kZXIgPSBfTV9leHRfZW5kIC0gX01fZXh0X25leHQ7CisJCSAgICAgIGlmIChfX3JlbWFpbmRlcikKKwkJCV9fYnVpbHRpbl9tZW1tb3ZlKF9NX2V4dF9idWYsIF9NX2V4dF9uZXh0LCBfX3JlbWFpbmRlcik7CisKKwkJICAgICAgX01fZXh0X25leHQgPSBfTV9leHRfYnVmOworCQkgICAgICBfTV9leHRfZW5kID0gX01fZXh0X2J1ZiArIF9fcmVtYWluZGVyOworCQkgICAgICBfTV9zZXRfYnVmZmVyKC0xKTsKKwkJICAgICAgX01fc3RhdGVfbGFzdCA9IF9NX3N0YXRlX2N1ciA9IF9NX3N0YXRlX2JlZzsKKwkJICAgIH0KKwkJfQorCSAgICAgIGVsc2UgaWYgKF9NX3dyaXRpbmcgJiYgKF9fdGVzdHZhbGlkID0gX01fdGVybWluYXRlX291dHB1dCgpKSkKKwkJX01fc2V0X2J1ZmZlcigtMSk7CisJICAgIH0KKwl9CisKKyAgICAgIGlmIChfX3Rlc3R2YWxpZCkKKwlfTV9jb2RlY3Z0ID0gX01fY29kZWN2dF90bXA7CisgICAgICBlbHNlCisJX01fY29kZWN2dCA9IDA7CisgICAgfQorCisgIC8vIEluaGliaXQgaW1wbGljaXQgaW5zdGFudGlhdGlvbnMgZm9yIHJlcXVpcmVkIGluc3RhbnRpYXRpb25zLAorICAvLyB3aGljaCBhcmUgZGVmaW5lZCB2aWEgZXhwbGljaXQgaW5zdGFudGlhdGlvbnMgZWxzZXdoZXJlLgorICAvLyBOQjogIFRoaXMgc3ludGF4IGlzIGEgR05VIGV4dGVuc2lvbi4KKyNpZiBfR0xJQkNYWF9FWFRFUk5fVEVNUExBVEUKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2ZpbGVidWY8Y2hhcj47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pZnN0cmVhbTxjaGFyPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX29mc3RyZWFtPGNoYXI+OworICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfZnN0cmVhbTxjaGFyPjsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19maWxlYnVmPHdjaGFyX3Q+OworICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaWZzdHJlYW08d2NoYXJfdD47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vZnN0cmVhbTx3Y2hhcl90PjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD47CisjZW5kaWYKKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2Z1bmN0ZXhjZXB0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvZnVuY3RleGNlcHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjJlOWZjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2Z1bmN0ZXhjZXB0LmgKQEAgLTAsMCArMSwxMDAgQEAKKy8vIEZ1bmN0aW9uLUJhc2VkIEV4Y2VwdGlvbiBTdXBwb3J0IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwNCwgMjAwNSwgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZnVuY3RleGNlcHQuaAorICogIFRoaXMgaGVhZGVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIC1mbm8tZXhjZXB0aW9ucy4KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMTkuMSAgRXhjZXB0aW9uIGNsYXNzZXMKKy8vCisKKyNpZm5kZWYgX0ZVTkNURVhDRVBUX0gKKyNkZWZpbmUgX0ZVTkNURVhDRVBUX0ggMQorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxleGNlcHRpb25fZGVmaW5lcy5oPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8vIEhlbHBlciBmb3IgZXhjZXB0aW9uIG9iamVjdHMgaW4gPGV4Y2VwdD4KKyAgdm9pZAorICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCkgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSk7CisKKyAgLy8gSGVscGVyIGZvciBleGNlcHRpb24gb2JqZWN0cyBpbiA8bmV3PgorICB2b2lkCisgIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpOworCisgIC8vIEhlbHBlciBmb3IgZXhjZXB0aW9uIG9iamVjdHMgaW4gPHR5cGVpbmZvPgorICB2b2lkCisgIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCkgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSk7CisKKyAgdm9pZAorICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCkgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSk7CisKKyAgLy8gSGVscGVycyBmb3IgZXhjZXB0aW9uIG9iamVjdHMgaW4gPHN0ZGV4Y2VwdD4KKyAgdm9pZAorICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqKSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKKworICB2b2lkCisgIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqKSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKKworICB2b2lkCisgIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKikgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSk7CisKKyAgdm9pZAorICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKikgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSk7CisKKyAgdm9pZAorICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKikgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSk7CisKKyAgdm9pZAorICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciopIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpOworCisgIHZvaWQKKyAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKikgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSk7CisKKyAgdm9pZAorICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqKSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKKworICB2b2lkCisgIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqKSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKKworICAvLyBIZWxwZXJzIGZvciBleGNlcHRpb24gb2JqZWN0cyBpbiA8aW9zPgorICB2b2lkCisgIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciopIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpOworCisgIHZvaWQKKyAgX190aHJvd19zeXN0ZW1fZXJyb3IoaW50KSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKKworICB2b2lkCisgIF9fdGhyb3dfZnV0dXJlX2Vycm9yKGludCkgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSk7CisKKyAgLy8gSGVscGVycyBmb3IgZXhjZXB0aW9uIG9iamVjdHMgaW4gPGZ1bmN0aW9uYWw+CisgIHZvaWQKKyAgX190aHJvd19iYWRfZnVuY3Rpb25fY2FsbCgpIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpOworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2Z1bmN0aW9uYWxfaGFzaC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2Z1bmN0aW9uYWxfaGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhYTA1YWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvZnVuY3Rpb25hbF9oYXNoLmgKQEAgLTAsMCArMSwyMTQgQEAKKy8vIGZ1bmN0aW9uYWxfaGFzaC5oIGhlYWRlciAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvZnVuY3Rpb25hbF9oYXNoLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfRlVOQ1RJT05BTF9IQVNIX0gKKyNkZWZpbmUgX0ZVTkNUSU9OQUxfSEFTSF9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxiaXRzL3N0bF9mdW5jdGlvbi5oPgorCituYW1lc3BhY2Ugc3RkCit7CisgIC8qKiBAZGVmZ3JvdXAgaGFzaGVzIEhhc2hlcworICAgKiAgQGluZ3JvdXAgZnVuY3RvcnMKKyAgICoKKyAgICogICBIYXNoaW5nIGZ1bmN0b3JzIHRha2luZyBhIHZhcmlhYmxlIHR5cGUgYW5kIHJldHVybmluZyBhIEBjIHN0ZDo6c2l6ZV90LgorICAgKgorICAgKiAgQHsKKyAgICovCisKKyAgLy8vIFByaW1hcnkgY2xhc3MgdGVtcGxhdGUgaGFzaC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBoYXNoIDogcHVibGljIHN0ZDo6dW5hcnlfZnVuY3Rpb248X1RwLCBzaXplX3Q+CisgICAgeworICAgICAgc2l6ZV90CisgICAgICBvcGVyYXRvcigpKF9UcCBfX3ZhbCkgY29uc3Q7CisgICAgfTsKKworICAvLy8gUGFydGlhbCBzcGVjaWFsaXphdGlvbnMgZm9yIHBvaW50ZXIgdHlwZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaGFzaDxfVHAqPiA6IHB1YmxpYyBzdGQ6OnVuYXJ5X2Z1bmN0aW9uPF9UcCosIHNpemVfdD4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0CisgICAgICB7IHJldHVybiByZWludGVycHJldF9jYXN0PHNpemVfdD4oX19wKTsgfQorICAgIH07CisKKyAgLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb25zIGZvciBpbnRlZ2VyIHR5cGVzLgorI2RlZmluZSBfQ3h4X2hhc2h0YWJsZV9kZWZpbmVfdHJpdmlhbF9oYXNoKF9UcCkgCVwKKyAgdGVtcGxhdGU8PgkJCQkJCVwKKyAgICBpbmxpbmUgc2l6ZV90CQkJCQlcCisgICAgaGFzaDxfVHA+OjpvcGVyYXRvcigpKF9UcCBfX3ZhbCkgY29uc3QJCVwKKyAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fdmFsKTsgfQorCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBmb3IgYm9vbC4KKyAgX0N4eF9oYXNodGFibGVfZGVmaW5lX3RyaXZpYWxfaGFzaChib29sKTsKKworICAvLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb24gZm9yIGNoYXIuCisgIF9DeHhfaGFzaHRhYmxlX2RlZmluZV90cml2aWFsX2hhc2goY2hhcik7CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciBzaWduZWQgY2hhci4KKyAgX0N4eF9oYXNodGFibGVfZGVmaW5lX3RyaXZpYWxfaGFzaChzaWduZWQgY2hhcik7CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciB1bnNpZ25lZCBjaGFyLgorICBfQ3h4X2hhc2h0YWJsZV9kZWZpbmVfdHJpdmlhbF9oYXNoKHVuc2lnbmVkIGNoYXIpOworCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBmb3Igd2NoYXJfdC4KKyAgX0N4eF9oYXNodGFibGVfZGVmaW5lX3RyaXZpYWxfaGFzaCh3Y2hhcl90KTsKKworICAvLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb24gZm9yIGNoYXIxNl90LgorICBfQ3h4X2hhc2h0YWJsZV9kZWZpbmVfdHJpdmlhbF9oYXNoKGNoYXIxNl90KTsKKworICAvLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb24gZm9yIGNoYXIzMl90LgorICBfQ3h4X2hhc2h0YWJsZV9kZWZpbmVfdHJpdmlhbF9oYXNoKGNoYXIzMl90KTsKKworICAvLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb24gZm9yIHNob3J0LgorICBfQ3h4X2hhc2h0YWJsZV9kZWZpbmVfdHJpdmlhbF9oYXNoKHNob3J0KTsKKworICAvLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb24gZm9yIGludC4KKyAgX0N4eF9oYXNodGFibGVfZGVmaW5lX3RyaXZpYWxfaGFzaChpbnQpOworCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBmb3IgbG9uZy4KKyAgX0N4eF9oYXNodGFibGVfZGVmaW5lX3RyaXZpYWxfaGFzaChsb25nKTsKKworICAvLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb24gZm9yIGxvbmcgbG9uZy4KKyAgX0N4eF9oYXNodGFibGVfZGVmaW5lX3RyaXZpYWxfaGFzaChsb25nIGxvbmcpOworCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBmb3IgdW5zaWduZWQgc2hvcnQuCisgIF9DeHhfaGFzaHRhYmxlX2RlZmluZV90cml2aWFsX2hhc2godW5zaWduZWQgc2hvcnQpOworCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBmb3IgdW5zaWduZWQgaW50LgorICBfQ3h4X2hhc2h0YWJsZV9kZWZpbmVfdHJpdmlhbF9oYXNoKHVuc2lnbmVkIGludCk7CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciB1bnNpZ25lZCBsb25nLgorICBfQ3h4X2hhc2h0YWJsZV9kZWZpbmVfdHJpdmlhbF9oYXNoKHVuc2lnbmVkIGxvbmcpOworCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBmb3IgdW5zaWduZWQgbG9uZyBsb25nLgorICBfQ3h4X2hhc2h0YWJsZV9kZWZpbmVfdHJpdmlhbF9oYXNoKHVuc2lnbmVkIGxvbmcgbG9uZyk7CisKKyN1bmRlZiBfQ3h4X2hhc2h0YWJsZV9kZWZpbmVfdHJpdmlhbF9oYXNoCisKKyAgLy8gRm93bGVyIC8gTm9sbCAvIFZvIChGTlYpIEhhc2ggKHR5cGUgRk5WLTFhKQorCisgIC8vIER1bW15IGdlbmVyaWMgaW1wbGVtZW50YXRpb24gKGZvciBzaXplb2Yoc2l6ZV90KSAhPSA0LCA4KS4KKyAgdGVtcGxhdGU8c2l6ZV90PgorICAgIHN0cnVjdCBfRm52X2hhc2hfYmFzZQorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RhdGljIHNpemVfdAorICAgICAgICBoYXNoKGNvbnN0IF9UcCogX19wdHIsIHNpemVfdCBfX2NsZW5ndGgsIHNpemVfdCBfX2hhc2ggPSAwKQorICAgICAgICB7CisJICBjb25zdCBjaGFyKiBfX2NwdHIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihfX3B0cik7CisJICBmb3IgKDsgX19jbGVuZ3RoOyAtLV9fY2xlbmd0aCkKKwkgICAgX19oYXNoID0gKF9faGFzaCAqIDEzMSkgKyAqX19jcHRyKys7CisJICByZXR1cm4gX19oYXNoOworCX0KKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX0Zudl9oYXNoX2Jhc2U8ND4KKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIHN0YXRpYyBzaXplX3QKKyAgICAgICAgaGFzaChjb25zdCBfVHAqIF9fcHRyLCBzaXplX3QgX19jbGVuZ3RoLAorCSAgICAgc2l6ZV90IF9faGFzaCA9IHN0YXRpY19jYXN0PHNpemVfdD4oMjE2NjEzNjI2MVVMKSkKKyAgICAgICAgeworCSAgY29uc3QgY2hhciogX19jcHRyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oX19wdHIpOworCSAgZm9yICg7IF9fY2xlbmd0aDsgLS1fX2NsZW5ndGgpCisJICAgIHsKKwkgICAgICBfX2hhc2ggXj0gc3RhdGljX2Nhc3Q8c2l6ZV90PigqX19jcHRyKyspOworCSAgICAgIF9faGFzaCAqPSBzdGF0aWNfY2FzdDxzaXplX3Q+KDE2Nzc3NjE5VUwpOworCSAgICB9CisJICByZXR1cm4gX19oYXNoOworCX0KKyAgICB9OworICAKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfRm52X2hhc2hfYmFzZTw4PgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RhdGljIHNpemVfdAorICAgICAgICBoYXNoKGNvbnN0IF9UcCogX19wdHIsIHNpemVfdCBfX2NsZW5ndGgsCisJICAgICBzaXplX3QgX19oYXNoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PigxNDY5NTk4MTAzOTM0NjY1NjAzN1VMTCkpCisgICAgICAgIHsKKwkgIGNvbnN0IGNoYXIqIF9fY3B0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcHRyKTsKKwkgIGZvciAoOyBfX2NsZW5ndGg7IC0tX19jbGVuZ3RoKQorCSAgICB7CisJICAgICAgX19oYXNoIF49IHN0YXRpY19jYXN0PHNpemVfdD4oKl9fY3B0cisrKTsKKwkgICAgICBfX2hhc2ggKj0gc3RhdGljX2Nhc3Q8c2l6ZV90PigxMDk5NTExNjI4MjExVUxMKTsKKwkgICAgfQorCSAgcmV0dXJuIF9faGFzaDsKKwl9CisgICAgfTsKKworICAgIHN0cnVjdCBfRm52X2hhc2gKKyAgICA6IHB1YmxpYyBfRm52X2hhc2hfYmFzZTxzaXplb2Yoc2l6ZV90KT4KKyAgICB7CisgICAgICB1c2luZyBfRm52X2hhc2hfYmFzZTxzaXplb2Yoc2l6ZV90KT46Omhhc2g7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RhdGljIHNpemVfdAorICAgICAgICBoYXNoKGNvbnN0IF9UcCYgX192YWwpCisgICAgICAgIHsgcmV0dXJuIGhhc2goJl9fdmFsLCBzaXplb2YoX192YWwpKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIHN0YXRpYyBzaXplX3QKKyAgICAgICAgX19oYXNoX2NvbWJpbmUoY29uc3QgX1RwJiBfX3ZhbCwgc2l6ZV90IF9faGFzaCkKKyAgICAgICAgeyByZXR1cm4gaGFzaCgmX192YWwsIHNpemVvZihfX3ZhbCksIF9faGFzaCk7IH0KKyAgICB9OworCisgIC8vLyBTcGVjaWFsaXphdGlvbiBmb3IgZmxvYXQuCisgIHRlbXBsYXRlPD4KKyAgICBpbmxpbmUgc2l6ZV90CisgICAgaGFzaDxmbG9hdD46Om9wZXJhdG9yKCkoZmxvYXQgX192YWwpIGNvbnN0CisgICAgeworICAgICAgLy8gMCBhbmQgLTAgYm90aCBoYXNoIHRvIHplcm8uCisgICAgICByZXR1cm4gX192YWwgIT0gMC4wZiA/IHN0ZDo6X0Zudl9oYXNoOjpoYXNoKF9fdmFsKSA6IDA7CisgICAgfQorCisgIC8vLyBTcGVjaWFsaXphdGlvbiBmb3IgZG91YmxlLgorICB0ZW1wbGF0ZTw+CisgICAgaW5saW5lIHNpemVfdAorICAgIGhhc2g8ZG91YmxlPjo6b3BlcmF0b3IoKShkb3VibGUgX192YWwpIGNvbnN0CisgICAgeworICAgICAgLy8gMCBhbmQgLTAgYm90aCBoYXNoIHRvIHplcm8uCisgICAgICByZXR1cm4gX192YWwgIT0gMC4wID8gc3RkOjpfRm52X2hhc2g6Omhhc2goX192YWwpIDogMDsKKyAgICB9CisKKyAgLy8vIFNwZWNpYWxpemF0aW9uIGZvciBsb25nIGRvdWJsZS4KKyAgdGVtcGxhdGU8PgorICAgIF9HTElCQ1hYX1BVUkUgc2l6ZV90CisgICAgaGFzaDxsb25nIGRvdWJsZT46Om9wZXJhdG9yKCkobG9uZyBkb3VibGUgX192YWwpIGNvbnN0OworCisgIC8vIEB9IGdyb3VwIGhhc2hlcworfQorCisjZW5kaWYgLy8gX0ZVTkNUSU9OQUxfSEFTSF9ICmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvZ3NsaWNlLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvZ3NsaWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjliYTQ2YQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9nc2xpY2UuaApAQCAtMCwwICsxLDE4MiBAQAorLy8gVGhlIHRlbXBsYXRlIGFuZCBpbmxpbmVzIGZvciB0aGUgLSotIEMrKyAtKi0gZ3NsaWNlIGNsYXNzLgorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBnc2xpY2UuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisvLyBXcml0dGVuIGJ5IEdhYnJpZWwgRG9zIFJlaXMgPEdhYnJpZWwuRG9zLVJlaXNARFBUTWF0aHMuRU5TLUNhY2hhbi5Gcj4KKworI2lmbmRlZiBfR1NMSUNFX0gKKyNkZWZpbmUgX0dTTElDRV9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8qKgorICAgKiBAYWRkdG9ncm91cCBudW1lcmljX2FycmF5cworICAgKiBAeworICAgKi8KKworICAvKioKKyAgICogIEBicmllZiAgQ2xhc3MgZGVmaW5pbmcgbXVsdGktZGltZW5zaW9uYWwgc3Vic2V0IG9mIGFuIGFycmF5LgorICAgKgorICAgKiAgVGhlIHNsaWNlIGNsYXNzIHJlcHJlc2VudHMgYSBtdWx0aS1kaW1lbnNpb25hbCBzdWJzZXQgb2YgYW4gYXJyYXksCisgICAqICBzcGVjaWZpZWQgYnkgdGhyZWUgcGFyYW1ldGVyIHNldHM6IHN0YXJ0IG9mZnNldCwgc2l6ZSBhcnJheSwgYW5kIHN0cmlkZQorICAgKiAgYXJyYXkuICBUaGUgc3RhcnQgb2Zmc2V0IGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgYXJyYXkKKyAgICogIHRoYXQgaXMgcGFydCBvZiB0aGUgc3Vic2V0LiAgVGhlIHNpemUgYW5kIHN0cmlkZSBhcnJheSBkZXNjcmliZSBlYWNoCisgICAqICBkaW1lbnNpb24gb2YgdGhlIHNsaWNlLiAgU2l6ZSBpcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoYXQKKyAgICogIGRpbWVuc2lvbiwgYW5kIHN0cmlkZSBpcyB0aGUgZGlzdGFuY2UgaW4gdGhlIGFycmF5IGJldHdlZW4gc3VjY2Vzc2l2ZQorICAgKiAgZWxlbWVudHMgaW4gdGhhdCBkaW1lbnNpb24uICBFYWNoIGRpbWVuc2lvbidzIHNpemUgYW5kIHN0cmlkZSBpcyB0YWtlbgorICAgKiAgdG8gYmVnaW4gYXQgYW4gYXJyYXkgZWxlbWVudCBkZXNjcmliZWQgYnkgdGhlIHByZXZpb3VzIGRpbWVuc2lvbi4gIFRoZQorICAgKiAgc2l6ZSBhcnJheSBhbmQgc3RyaWRlIGFycmF5IG11c3QgYmUgdGhlIHNhbWUgc2l6ZS4KKyAgICoKKyAgICogIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBvZmZzZXQ9PTMsIHN0cmlkZVswXT09MTEsIHNpemVbMV09PTMsCisgICAqICBzdHJpZGVbMV09PTMsIHRoZW4gc2xpY2VbMCwwXT09YXJyYXlbM10sIHNsaWNlWzAsMV09PWFycmF5WzZdLAorICAgKiAgc2xpY2VbMCwyXT09YXJyYXlbOV0sIHNsaWNlWzEsMF09PWFycmF5WzE0XSwgc2xpY2VbMSwxXT09YXJyYXlbMTddLAorICAgKiAgc2xpY2VbMSwyXT09YXJyYXlbMjBdLgorICAgKi8KKyAgY2xhc3MgZ3NsaWNlCisgIHsKKyAgcHVibGljOgorICAgIC8vLyAgQ29uc3RydWN0IGFuIGVtcHR5IHNsaWNlLgorICAgIGdzbGljZSgpOworCisgICAgLyoqCisgICAgICogIEBicmllZiAgQ29uc3RydWN0IGEgc2xpY2UuCisgICAgICoKKyAgICAgKiAgQ29uc3RydWN0cyBhIHNsaWNlIHdpdGggYXMgbWFueSBkaW1lbnNpb25zIGFzIHRoZSBsZW5ndGggb2YgdGhlIEBhIGwKKyAgICAgKiAgYW5kIEBhIHMgYXJyYXlzLgorICAgICAqCisgICAgICogIEBwYXJhbSAgbyAgT2Zmc2V0IGluIGFycmF5IG9mIGZpcnN0IGVsZW1lbnQuCisgICAgICogIEBwYXJhbSAgbCAgQXJyYXkgb2YgZGltZW5zaW9uIGxlbmd0aHMuCisgICAgICogIEBwYXJhbSAgcyAgQXJyYXkgb2YgZGltZW5zaW9uIHN0cmlkZXMgYmV0d2VlbiBhcnJheSBlbGVtZW50cy4KKyAgICAgKi8KKyAgICBnc2xpY2Uoc2l6ZV90LCBjb25zdCB2YWxhcnJheTxzaXplX3Q+JiwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYpOworCisgICAgLy8gWFhYOiB0aGUgSVMgc2F5cyB0aGUgY29weS1jdG9yIGFuZCBjb3B5LWFzc2lnbm1lbnQgb3BlcmF0b3JzIGFyZQorICAgIC8vICAgICAgc3ludGhlc2l6ZWQgYnkgdGhlIGNvbXBpbGVyIGJ1dCB0aGV5IGFyZSBqdXN0IHVuc3VpdGFibGUKKyAgICAvLyAgICAgIGZvciBhIHJlZi1jb3VudGVkIHNlbWFudGljCisgICAgLy8vICBDb3B5IGNvbnN0cnVjdG9yLgorICAgIGdzbGljZShjb25zdCBnc2xpY2UmKTsKKworICAgIC8vLyAgRGVzdHJ1Y3Rvci4KKyAgICB+Z3NsaWNlKCk7CisKKyAgICAvLyBYWFg6IFNlZSB0aGUgbm90ZSBhYm92ZS4KKyAgICAvLy8gIEFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgZ3NsaWNlJiBvcGVyYXRvcj0oY29uc3QgZ3NsaWNlJik7CisKKyAgICAvLy8gIFJldHVybiBhcnJheSBvZmZzZXQgb2YgZmlyc3Qgc2xpY2UgZWxlbWVudC4KKyAgICBzaXplX3QgICAgICAgICAgIHN0YXJ0KCkgY29uc3Q7CisKKyAgICAvLy8gIFJldHVybiBhcnJheSBvZiBzaXplcyBvZiBzbGljZSBkaW1lbnNpb25zLgorICAgIHZhbGFycmF5PHNpemVfdD4gc2l6ZSgpIGNvbnN0OworICAgIAorICAgIC8vLyAgUmV0dXJuIGFycmF5IG9mIGFycmF5IHN0cmlkZXMgZm9yIGVhY2ggZGltZW5zaW9uLgorICAgIHZhbGFycmF5PHNpemVfdD4gc3RyaWRlKCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBzdHJ1Y3QgX0luZGV4ZXIKKyAgICB7CisgICAgICBzaXplX3QgX01fY291bnQ7CisgICAgICBzaXplX3QgX01fc3RhcnQ7CisgICAgICB2YWxhcnJheTxzaXplX3Q+IF9NX3NpemU7CisgICAgICB2YWxhcnJheTxzaXplX3Q+IF9NX3N0cmlkZTsKKyAgICAgIHZhbGFycmF5PHNpemVfdD4gX01faW5kZXg7IC8vIExpbmVhciBhcnJheSBvZiByZWZlcmVuY2VkIGluZGljZXMKKworICAgICAgX0luZGV4ZXIoKQorICAgICAgOiBfTV9jb3VudCgxKSwgX01fc3RhcnQoMCksIF9NX3NpemUoKSwgX01fc3RyaWRlKCksIF9NX2luZGV4KCkge30KKworICAgICAgX0luZGV4ZXIoc2l6ZV90LCBjb25zdCB2YWxhcnJheTxzaXplX3Q+JiwKKwkgICAgICAgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYpOworCisgICAgICB2b2lkCisgICAgICBfTV9pbmNyZW1lbnRfdXNlKCkKKyAgICAgIHsgKytfTV9jb3VudDsgfQorICAgICAgCisgICAgICBzaXplX3QKKyAgICAgIF9NX2RlY3JlbWVudF91c2UoKQorICAgICAgeyByZXR1cm4gLS1fTV9jb3VudDsgfQorICAgIH07CisKKyAgICBfSW5kZXhlciogX01faW5kZXg7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGZyaWVuZCBjbGFzcyB2YWxhcnJheTsKKyAgfTsKKworICBpbmxpbmUgc2l6ZV90CisgIGdzbGljZTo6c3RhcnQoKSBjb25zdAorICB7IHJldHVybiBfTV9pbmRleCA/IF9NX2luZGV4LT5fTV9zdGFydCA6IDA7IH0KKworICBpbmxpbmUgdmFsYXJyYXk8c2l6ZV90PgorICBnc2xpY2U6OnNpemUoKSBjb25zdAorICB7IHJldHVybiBfTV9pbmRleCA/IF9NX2luZGV4LT5fTV9zaXplIDogdmFsYXJyYXk8c2l6ZV90PigpOyB9CisKKyAgaW5saW5lIHZhbGFycmF5PHNpemVfdD4KKyAgZ3NsaWNlOjpzdHJpZGUoKSBjb25zdAorICB7IHJldHVybiBfTV9pbmRleCA/IF9NX2luZGV4LT5fTV9zdHJpZGUgOiB2YWxhcnJheTxzaXplX3Q+KCk7IH0KKworICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgIC8vIDU0My4gdmFsYXJyYXkgc2xpY2UgZGVmYXVsdCBjb25zdHJ1Y3RvcgorICBpbmxpbmUKKyAgZ3NsaWNlOjpnc2xpY2UoKQorICA6IF9NX2luZGV4KG5ldyBnc2xpY2U6Ol9JbmRleGVyKCkpIHt9CisKKyAgaW5saW5lCisgIGdzbGljZTo6Z3NsaWNlKHNpemVfdCBfX28sIGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9fbCwKKwkJIGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9fcykKKyAgOiBfTV9pbmRleChuZXcgZ3NsaWNlOjpfSW5kZXhlcihfX28sIF9fbCwgX19zKSkge30KKworICBpbmxpbmUKKyAgZ3NsaWNlOjpnc2xpY2UoY29uc3QgZ3NsaWNlJiBfX2cpCisgIDogX01faW5kZXgoX19nLl9NX2luZGV4KQorICB7IGlmIChfTV9pbmRleCkgX01faW5kZXgtPl9NX2luY3JlbWVudF91c2UoKTsgfQorCisgIGlubGluZQorICBnc2xpY2U6On5nc2xpY2UoKQorICB7CisgICAgaWYgKF9NX2luZGV4ICYmIF9NX2luZGV4LT5fTV9kZWNyZW1lbnRfdXNlKCkgPT0gMCkKKyAgICAgIGRlbGV0ZSBfTV9pbmRleDsKKyAgfQorCisgIGlubGluZSBnc2xpY2UmCisgIGdzbGljZTo6b3BlcmF0b3I9KGNvbnN0IGdzbGljZSYgX19nKQorICB7CisgICAgaWYgKF9fZy5fTV9pbmRleCkKKyAgICAgIF9fZy5fTV9pbmRleC0+X01faW5jcmVtZW50X3VzZSgpOworICAgIGlmIChfTV9pbmRleCAmJiBfTV9pbmRleC0+X01fZGVjcmVtZW50X3VzZSgpID09IDApCisgICAgICBkZWxldGUgX01faW5kZXg7CisgICAgX01faW5kZXggPSBfX2cuX01faW5kZXg7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgLy8gQH0gZ3JvdXAgbnVtZXJpY19hcnJheXMKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYgLyogX0dTTElDRV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvZ3NsaWNlX2FycmF5LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvZ3NsaWNlX2FycmF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ1YTVhOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9nc2xpY2VfYXJyYXkuaApAQCAtMCwwICsxLDIxNiBAQAorLy8gVGhlIHRlbXBsYXRlIGFuZCBpbmxpbmVzIGZvciB0aGUgLSotIEMrKyAtKi0gZ3NsaWNlX2FycmF5IGNsYXNzLgorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDQsIDIwMDUsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBnc2xpY2VfYXJyYXkuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisvLyBXcml0dGVuIGJ5IEdhYnJpZWwgRG9zIFJlaXMgPEdhYnJpZWwuRG9zLVJlaXNARFBUTWF0aHMuRU5TLUNhY2hhbi5Gcj4KKworI2lmbmRlZiBfR1NMSUNFX0FSUkFZX0gKKyNkZWZpbmUgX0dTTElDRV9BUlJBWV9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8qKgorICAgKiBAYWRkdG9ncm91cCBudW1lcmljX2FycmF5cworICAgKiBAeworICAgKi8KKworICAvKioKKyAgICogIEBicmllZiAgUmVmZXJlbmNlIHRvIG11bHRpLWRpbWVuc2lvbmFsIHN1YnNldCBvZiBhbiBhcnJheS4KKyAgICoKKyAgICogIEEgZ3NsaWNlX2FycmF5IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBhY3R1YWwgZWxlbWVudHMgb2YgYW4gYXJyYXkKKyAgICogIHNwZWNpZmllZCBieSBhIGdzbGljZS4gIFRoZSB3YXkgdG8gZ2V0IGEgZ3NsaWNlX2FycmF5IGlzIHRvIGNhbGwKKyAgICogIG9wZXJhdG9yW10oZ3NsaWNlKSBvbiBhIHZhbGFycmF5LiAgVGhlIHJldHVybmVkIGdzbGljZV9hcnJheSB0aGVuCisgICAqICBwZXJtaXRzIGNhcnJ5aW5nIG9wZXJhdGlvbnMgb3V0IG9uIHRoZSByZWZlcmVuY2VkIHN1YnNldCBvZiBlbGVtZW50cyBpbgorICAgKiAgdGhlIG9yaWdpbmFsIHZhbGFycmF5LiAgRm9yIGV4YW1wbGUsIG9wZXJhdG9yKz0odmFsYXJyYXkpIHdpbGwgYWRkCisgICAqICB2YWx1ZXMgdG8gdGhlIHN1YnNldCBvZiBlbGVtZW50cyBpbiB0aGUgdW5kZXJseWluZyB2YWxhcnJheSB0aGlzCisgICAqICBnc2xpY2VfYXJyYXkgcmVmZXJzIHRvLgorICAgKgorICAgKiAgQHBhcmFtICBUcCAgRWxlbWVudCB0eXBlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIGdzbGljZV9hcnJheQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOworCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyNTMuIHZhbGFycmF5IGhlbHBlciBmdW5jdGlvbnMgYXJlIGFsbW9zdCBlbnRpcmVseSB1c2VsZXNzCisKKyAgICAgIC8vLyAgQ29weSBjb25zdHJ1Y3Rvci4gIEJvdGggc2xpY2VzIHJlZmVyIHRvIHRoZSBzYW1lIHVuZGVybHlpbmcgYXJyYXkuCisgICAgICBnc2xpY2VfYXJyYXkoY29uc3QgZ3NsaWNlX2FycmF5Jik7CisKKyAgICAgIC8vLyAgQXNzaWdubWVudCBvcGVyYXRvci4gIEFzc2lnbnMgc2xpY2UgZWxlbWVudHMgdG8gY29ycmVzcG9uZGluZworICAgICAgLy8vICBlbGVtZW50cyBvZiBAYSBhLgorICAgICAgZ3NsaWNlX2FycmF5JiBvcGVyYXRvcj0oY29uc3QgZ3NsaWNlX2FycmF5Jik7CisKKyAgICAgIC8vLyAgQXNzaWduIHNsaWNlIGVsZW1lbnRzIHRvIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdi4KKyAgICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgTXVsdGlwbHkgc2xpY2UgZWxlbWVudHMgYnkgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvcio9KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgRGl2aWRlIHNsaWNlIGVsZW1lbnRzIGJ5IGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdi4KKyAgICAgIHZvaWQgb3BlcmF0b3IvPShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIE1vZHVsbyBzbGljZSBlbGVtZW50cyBieSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYuCisgICAgICB2b2lkIG9wZXJhdG9yJT0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBBZGQgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2IHRvIHNsaWNlIGVsZW1lbnRzLgorICAgICAgdm9pZCBvcGVyYXRvcis9KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgU3VidHJhY3QgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2IGZyb20gc2xpY2UgZWxlbWVudHMuCisgICAgICB2b2lkIG9wZXJhdG9yLT0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBMb2dpY2FsIHhvciBzbGljZSBlbGVtZW50cyB3aXRoIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdi4KKyAgICAgIHZvaWQgb3BlcmF0b3JePShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIExvZ2ljYWwgYW5kIHNsaWNlIGVsZW1lbnRzIHdpdGggY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvciY9KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgTG9naWNhbCBvciBzbGljZSBlbGVtZW50cyB3aXRoIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdi4KKyAgICAgIHZvaWQgb3BlcmF0b3J8PShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIExlZnQgc2hpZnQgc2xpY2UgZWxlbWVudHMgYnkgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvcjw8PShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIFJpZ2h0IHNoaWZ0IHNsaWNlIGVsZW1lbnRzIGJ5IGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdi4KKyAgICAgIHZvaWQgb3BlcmF0b3I+Pj0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBBc3NpZ24gYWxsIHNsaWNlIGVsZW1lbnRzIHRvIEBhIHQuCisgICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBfVHAmKSBjb25zdDsKKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKyAgICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKyAgICAgICAgdm9pZCBvcGVyYXRvcio9KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgICAgIHZvaWQgb3BlcmF0b3IvPShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yJT0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKyAgICAgICAgdm9pZCBvcGVyYXRvcis9KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgICAgIHZvaWQgb3BlcmF0b3ItPShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yXj0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKyAgICAgICAgdm9pZCBvcGVyYXRvciY9KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgICAgIHZvaWQgb3BlcmF0b3J8PShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yPDw9KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgICAgIHZvaWQgb3BlcmF0b3I+Pj0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgIF9BcnJheTxfVHA+ICAgIF9NX2FycmF5OworICAgICAgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX01faW5kZXg7CisKKyAgICAgIGZyaWVuZCBjbGFzcyB2YWxhcnJheTxfVHA+OworCisgICAgICBnc2xpY2VfYXJyYXkoX0FycmF5PF9UcD4sIGNvbnN0IHZhbGFycmF5PHNpemVfdD4mKTsKKworICAgICAgLy8gbm90IGltcGxlbWVudGVkCisgICAgICBnc2xpY2VfYXJyYXkoKTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUKKyAgICBnc2xpY2VfYXJyYXk8X1RwPjo6Z3NsaWNlX2FycmF5KF9BcnJheTxfVHA+IF9fYSwKKwkJCQkgICAgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX19pKQorICAgIDogX01fYXJyYXkoX19hKSwgX01faW5kZXgoX19pKSB7fQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUKKyAgICBnc2xpY2VfYXJyYXk8X1RwPjo6Z3NsaWNlX2FycmF5KGNvbnN0IGdzbGljZV9hcnJheTxfVHA+JiBfX2EpCisgICAgOiBfTV9hcnJheShfX2EuX01fYXJyYXkpLCBfTV9pbmRleChfX2EuX01faW5kZXgpIHt9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBnc2xpY2VfYXJyYXk8X1RwPiYKKyAgICBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IGdzbGljZV9hcnJheTxfVHA+JiBfX2EpCisgICAgeworICAgICAgc3RkOjpfX3ZhbGFycmF5X2NvcHkoX0FycmF5PF9UcD4oX19hLl9NX2FycmF5KSwKKwkJCSAgIF9BcnJheTxzaXplX3Q+KF9fYS5fTV9pbmRleCksIF9NX2luZGV4LnNpemUoKSwKKwkJCSAgIF9NX2FycmF5LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCkpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IF9UcCYgX190KSBjb25zdAorICAgIHsKKyAgICAgIHN0ZDo6X192YWxhcnJheV9maWxsKF9NX2FycmF5LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCksCisJCQkgICBfTV9pbmRleC5zaXplKCksIF9fdCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvcj0oY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdAorICAgIHsKKyAgICAgIHN0ZDo6X192YWxhcnJheV9jb3B5KF9BcnJheTxfVHA+KF9fdiksIF9fdi5zaXplKCksCisJCQkgICBfTV9hcnJheSwgX0FycmF5PHNpemVfdD4oX01faW5kZXgpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgICBpbmxpbmUgdm9pZAorICAgICAgZ3NsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yPShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UpIGNvbnN0CisgICAgICB7CisJc3RkOjpfX3ZhbGFycmF5X2NvcHkgKF9fZSwgX01faW5kZXguc2l6ZSgpLCBfTV9hcnJheSwKKwkJCSAgICAgIF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSk7CisgICAgICB9CisKKyN1bmRlZiBfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SCisjZGVmaW5lIF9ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoX09wLCBfTmFtZSkJCQkJXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CQkJCQkJXAorICAgIGlubGluZSB2b2lkCQkJCQkJCQlcCisgICAgZ3NsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yIF9PcCMjPShjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIGNvbnN0CVwKKyAgICB7CQkJCQkJCQkJXAorICAgICAgX0FycmF5X2F1Z21lbnRlZF8jI19OYW1lKF9NX2FycmF5LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCksCVwKKwkJCSAgICAgICBfQXJyYXk8X1RwPihfX3YpLCBfX3Yuc2l6ZSgpKTsJCVwKKyAgICB9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CQkJCSAgICAgICAgICAgICAgICBcCisgICAgICBpbmxpbmUgdm9pZAkJCQkJCQlcCisgICAgICBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgX09wIyM9IChjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UpIGNvbnN0XAorICAgICAgewkJCQkJCQkJCVwKKwlfQXJyYXlfYXVnbWVudGVkXyMjX05hbWUoX01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSwgX19lLFwKKwkJCQkgX01faW5kZXguc2l6ZSgpKTsJCQlcCisgICAgICB9CisKK19ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoKiwgX19tdWx0aXBsaWVzKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUigvLCBfX2RpdmlkZXMpCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKCUsIF9fbW9kdWx1cykKK19ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoKywgX19wbHVzKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUigtLCBfX21pbnVzKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUiheLCBfX2JpdHdpc2VfeG9yKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUigmLCBfX2JpdHdpc2VfYW5kKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUih8LCBfX2JpdHdpc2Vfb3IpCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKDw8LCBfX3NoaWZ0X2xlZnQpCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKD4+LCBfX3NoaWZ0X3JpZ2h0KQorCisjdW5kZWYgX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUgorCisgIC8vIEB9IGdyb3VwIG51bWVyaWNfYXJyYXlzCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmIC8qIF9HU0xJQ0VfQVJSQVlfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2hhc2h0YWJsZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2hhc2h0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YWNlYjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvaGFzaHRhYmxlLmgKQEAgLTAsMCArMSwxMTk0IEBACisvLyBoYXNodGFibGUuaCBoZWFkZXIgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL2hhc2h0YWJsZS5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKyNpZm5kZWYgX0hBU0hUQUJMRV9ICisjZGVmaW5lIF9IQVNIVEFCTEVfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvaGFzaHRhYmxlX3BvbGljeS5oPgorCituYW1lc3BhY2Ugc3RkCit7CisgIC8vIENsYXNzIHRlbXBsYXRlIF9IYXNodGFibGUsIGNsYXNzIGRlZmluaXRpb24uCisgIAorICAvLyBNZWFuaW5nIG9mIGNsYXNzIHRlbXBsYXRlIF9IYXNodGFibGUncyB0ZW1wbGF0ZSBwYXJhbWV0ZXJzCisgIAorICAvLyBfS2V5IGFuZCBfVmFsdWU6IGFyYml0cmFyeSBDb3B5Q29uc3RydWN0aWJsZSB0eXBlcy4KKyAgCisgIC8vIF9BbGxvY2F0b3I6IGFuIGFsbG9jYXRvciB0eXBlIChbbGliLmFsbG9jYXRvci5yZXF1aXJlbWVudHNdKSB3aG9zZQorICAvLyB2YWx1ZSB0eXBlIGlzIFZhbHVlLiAgQXMgYSBjb25mb3JtaW5nIGV4dGVuc2lvbiwgd2UgYWxsb3cgZm9yCisgIC8vIHZhbHVlIHR5cGUgIT0gVmFsdWUuCisKKyAgLy8gX0V4dHJhY3RLZXk6IGZ1bmN0aW9uIG9iamVjdCB0aGF0IHRha2VzIGEgb2JqZWN0IG9mIHR5cGUgVmFsdWUKKyAgLy8gYW5kIHJldHVybnMgYSB2YWx1ZSBvZiB0eXBlIF9LZXkuCisgIAorICAvLyBfRXF1YWw6IGZ1bmN0aW9uIG9iamVjdCB0aGF0IHRha2VzIHR3byBvYmplY3RzIG9mIHR5cGUgayBhbmQgcmV0dXJucworICAvLyBhIGJvb2wtbGlrZSB2YWx1ZSB0aGF0IGlzIHRydWUgaWYgdGhlIHR3byBvYmplY3RzIGFyZSBjb25zaWRlcmVkIGVxdWFsLgorICAKKyAgLy8gX0gxOiB0aGUgaGFzaCBmdW5jdGlvbi4gIEEgdW5hcnkgZnVuY3Rpb24gb2JqZWN0IHdpdGggYXJndW1lbnQgdHlwZQorICAvLyBLZXkgYW5kIHJlc3VsdCB0eXBlIHNpemVfdC4gIFJldHVybiB2YWx1ZXMgc2hvdWxkIGJlIGRpc3RyaWJ1dGVkCisgIC8vIG92ZXIgdGhlIGVudGlyZSByYW5nZSBbMCwgbnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6Om1heCgpXS4KKyAgCisgIC8vIF9IMjogdGhlIHJhbmdlLWhhc2hpbmcgZnVuY3Rpb24gKGluIHRoZSB0ZXJtaW5vbG9neSBvZiBUYXZvcmkgYW5kCisgIC8vIERyZWl6aW4pLiAgQSBiaW5hcnkgZnVuY3Rpb24gb2JqZWN0IHdob3NlIGFyZ3VtZW50IHR5cGVzIGFuZCByZXN1bHQKKyAgLy8gdHlwZSBhcmUgYWxsIHNpemVfdC4gIEdpdmVuIGFyZ3VtZW50cyByIGFuZCBOLCB0aGUgcmV0dXJuIHZhbHVlIGlzCisgIC8vIGluIHRoZSByYW5nZSBbMCwgTikuCisgIAorICAvLyBfSGFzaDogdGhlIHJhbmdlZCBoYXNoIGZ1bmN0aW9uIChUYXZvcmkgYW5kIERyZWl6aW4pLiBBIGJpbmFyeSBmdW5jdGlvbgorICAvLyB3aG9zZSBhcmd1bWVudCB0eXBlcyBhcmUgX0tleSBhbmQgc2l6ZV90IGFuZCB3aG9zZSByZXN1bHQgdHlwZSBpcworICAvLyBzaXplX3QuICBHaXZlbiBhcmd1bWVudHMgayBhbmQgTiwgdGhlIHJldHVybiB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2UKKyAgLy8gWzAsIE4pLiAgRGVmYXVsdDogaGFzaChrLCBOKSA9IGgyKGgxKGspLCBOKS4gIElmIF9IYXNoIGlzIGFueXRoaW5nIG90aGVyCisgIC8vIHRoYW4gdGhlIGRlZmF1bHQsIF9IMSBhbmQgX0gyIGFyZSBpZ25vcmVkLgorICAKKyAgLy8gX1JlaGFzaFBvbGljeTogUG9saWN5IGNsYXNzIHdpdGggdGhyZWUgbWVtYmVycywgYWxsIG9mIHdoaWNoIGdvdmVybgorICAvLyB0aGUgYnVja2V0IGNvdW50LiBfTV9uZXh0X2JrdChuKSByZXR1cm5zIGEgYnVja2V0IGNvdW50IG5vIHNtYWxsZXIKKyAgLy8gdGhhbiBuLiAgX01fYmt0X2Zvcl9lbGVtZW50cyhuKSByZXR1cm5zIGEgYnVja2V0IGNvdW50IGFwcHJvcHJpYXRlCisgIC8vIGZvciBhbiBlbGVtZW50IGNvdW50IG9mIG4uICBfTV9uZWVkX3JlaGFzaChuX2JrdCwgbl9lbHQsIG5faW5zKQorICAvLyBkZXRlcm1pbmVzIHdoZXRoZXIsIGlmIHRoZSBjdXJyZW50IGJ1Y2tldCBjb3VudCBpcyBuX2JrdCBhbmQgdGhlCisgIC8vIGN1cnJlbnQgZWxlbWVudCBjb3VudCBpcyBuX2VsdCwgd2UgbmVlZCB0byBpbmNyZWFzZSB0aGUgYnVja2V0CisgIC8vIGNvdW50LiAgSWYgc28sIHJldHVybnMgbWFrZV9wYWlyKHRydWUsIG4pLCB3aGVyZSBuIGlzIHRoZSBuZXcKKyAgLy8gYnVja2V0IGNvdW50LiAgSWYgbm90LCByZXR1cm5zIG1ha2VfcGFpcihmYWxzZSwgPGFueXRoaW5nPikuCisgIAorICAvLyA/Pz8gUmlnaHQgbm93IGl0IGlzIGhhcmQtd2lyZWQgdGhhdCB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgbmV2ZXIKKyAgLy8gc2hyaW5rcy4gIFNob3VsZCB3ZSBhbGxvdyBfUmVoYXNoUG9saWN5IHRvIGNoYW5nZSB0aGF0PworICAKKyAgLy8gX19jYWNoZV9oYXNoX2NvZGU6IGJvb2wuICB0cnVlIGlmIHdlIHN0b3JlIHRoZSB2YWx1ZSBvZiB0aGUgaGFzaAorICAvLyBmdW5jdGlvbiBhbG9uZyB3aXRoIHRoZSB2YWx1ZS4gIFRoaXMgaXMgYSB0aW1lLXNwYWNlIHRyYWRlb2ZmLgorICAvLyBTdG9yaW5nIGl0IG1heSBpbXByb3ZlIGxvb2t1cCBzcGVlZCBieSByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIHRpbWVzCisgIC8vIHdlIG5lZWQgdG8gY2FsbCB0aGUgRXF1YWwgZnVuY3Rpb24uCisgIAorICAvLyBfX2NvbnN0YW50X2l0ZXJhdG9yczogYm9vbC4gIHRydWUgaWYgaXRlcmF0b3IgYW5kIGNvbnN0X2l0ZXJhdG9yIGFyZQorICAvLyBib3RoIGNvbnN0YW50IGl0ZXJhdG9yIHR5cGVzLiAgVGhpcyBpcyB0cnVlIGZvciB1bm9yZGVyZWRfc2V0IGFuZAorICAvLyB1bm9yZGVyZWRfbXVsdGlzZXQsIGZhbHNlIGZvciB1bm9yZGVyZWRfbWFwIGFuZCB1bm9yZGVyZWRfbXVsdGltYXAuCisgIAorICAvLyBfX3VuaXF1ZV9rZXlzOiBib29sLiAgdHJ1ZSBpZiB0aGUgcmV0dXJuIHZhbHVlIG9mIF9IYXNodGFibGU6OmNvdW50KGspCisgIC8vIGlzIGFsd2F5cyBhdCBtb3N0IG9uZSwgZmFsc2UgaWYgaXQgbWF5IGJlIGFuIGFyYml0cmFyeSBudW1iZXIuICBUaGlzCisgIC8vIHRydWUgZm9yIHVub3JkZXJlZF9zZXQgYW5kIHVub3JkZXJlZF9tYXAsIGZhbHNlIGZvciB1bm9yZGVyZWRfbXVsdGlzZXQKKyAgLy8gYW5kIHVub3JkZXJlZF9tdWx0aW1hcC4KKyAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgdHlwZW5hbWUgX0FsbG9jYXRvciwKKwkgICB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgCisJICAgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2FjaGVfaGFzaF9jb2RlLAorCSAgIGJvb2wgX19jb25zdGFudF9pdGVyYXRvcnMsCisJICAgYm9vbCBfX3VuaXF1ZV9rZXlzPgorICAgIGNsYXNzIF9IYXNodGFibGUKKyAgICA6IHB1YmxpYyBfX2RldGFpbDo6X1JlaGFzaF9iYXNlPF9SZWhhc2hQb2xpY3ksCisJCQkJICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLAorCQkJCQkgICAgICAgX0V4dHJhY3RLZXksCisJCQkJCSAgICAgICBfRXF1YWwsIF9IMSwgX0gyLCBfSGFzaCwKKwkJCQkJICAgICAgIF9SZWhhc2hQb2xpY3ksCisJCQkJCSAgICAgICBfX2NhY2hlX2hhc2hfY29kZSwKKwkJCQkJICAgICAgIF9fY29uc3RhbnRfaXRlcmF0b3JzLAorCQkJCQkgICAgICAgX191bmlxdWVfa2V5cz4gPiwKKyAgICAgIHB1YmxpYyBfX2RldGFpbDo6X0hhc2hfY29kZV9iYXNlPF9LZXksIF9WYWx1ZSwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCQkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfX2NhY2hlX2hhc2hfY29kZT4sCisgICAgICBwdWJsaWMgX19kZXRhaWw6Ol9NYXBfYmFzZTxfS2V5LCBfVmFsdWUsIF9FeHRyYWN0S2V5LCBfX3VuaXF1ZV9rZXlzLAorCQkJCSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwKKwkJCQkJICAgIF9FeHRyYWN0S2V5LAorCQkJCQkgICAgX0VxdWFsLCBfSDEsIF9IMiwgX0hhc2gsCisJCQkJCSAgICBfUmVoYXNoUG9saWN5LAorCQkJCQkgICAgX19jYWNoZV9oYXNoX2NvZGUsCisJCQkJCSAgICBfX2NvbnN0YW50X2l0ZXJhdG9ycywKKwkJCQkJICAgIF9fdW5pcXVlX2tleXM+ID4sCisgICAgICBwdWJsaWMgX19kZXRhaWw6Ol9FcXVhbGl0eV9iYXNlPF9FeHRyYWN0S2V5LCBfX3VuaXF1ZV9rZXlzLAorCQkJCSAgICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLAorCQkJCQkJIF9FeHRyYWN0S2V5LAorCQkJCQkJIF9FcXVhbCwgX0gxLCBfSDIsIF9IYXNoLAorCQkJCQkJIF9SZWhhc2hQb2xpY3ksCisJCQkJCQkgX19jYWNoZV9oYXNoX2NvZGUsCisJCQkJCQkgX19jb25zdGFudF9pdGVyYXRvcnMsCisJCQkJCQkgX191bmlxdWVfa2V5cz4gPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9BbGxvY2F0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIF9WYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0tleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0VxdWFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfZXF1YWw7CisgICAgICAvLyBtYXBwZWRfdHlwZSwgaWYgcHJlc2VudCwgY29tZXMgZnJvbSBfTWFwX2Jhc2UuCisgICAgICAvLyBoYXNoZXIsIGlmIHByZXNlbnQsIGNvbWVzIGZyb20gX0hhc2hfY29kZV9iYXNlLgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjpwb2ludGVyICAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OmNvbnN0X3BvaW50ZXIgICAgICAgICAgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYXRvcjo6cmVmZXJlbmNlICAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OmNvbnN0X3JlZmVyZW5jZSAgICAgICAgY29uc3RfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIHN0ZDo6c2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OnB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgX19kZXRhaWw6Ol9Ob2RlX2l0ZXJhdG9yPHZhbHVlX3R5cGUsIF9fY29uc3RhbnRfaXRlcmF0b3JzLAorCQkJCSAgICAgICBfX2NhY2hlX2hhc2hfY29kZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX19kZXRhaWw6Ol9Ob2RlX2NvbnN0X2l0ZXJhdG9yPHZhbHVlX3R5cGUsCisJCQkJCSAgICAgX19jb25zdGFudF9pdGVyYXRvcnMsCisJCQkJCSAgICAgX19jYWNoZV9oYXNoX2NvZGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfbG9jYWxfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgX19kZXRhaWw6Ol9IYXNodGFibGVfaXRlcmF0b3I8dmFsdWVfdHlwZSwgX19jb25zdGFudF9pdGVyYXRvcnMsCisJCQkJCSAgICBfX2NhY2hlX2hhc2hfY29kZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX19kZXRhaWw6Ol9IYXNodGFibGVfY29uc3RfaXRlcmF0b3I8dmFsdWVfdHlwZSwKKwkJCQkJCSAgX19jb25zdGFudF9pdGVyYXRvcnMsCisJCQkJCQkgIF9fY2FjaGVfaGFzaF9jb2RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5MiwgdHlwZW5hbWUgX1ZhbHVlMiwgdHlwZW5hbWUgX0V4MiwgYm9vbCBfX3VuaXF1ZTIsCisJICAgICAgIHR5cGVuYW1lIF9IYXNodGFibGUyPgorICAgICAgICBmcmllbmQgc3RydWN0IF9fZGV0YWlsOjpfTWFwX2Jhc2U7CisKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBfX2RldGFpbDo6X0hhc2hfbm9kZTxfVmFsdWUsIF9fY2FjaGVfaGFzaF9jb2RlPiBfTm9kZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPF9Ob2RlPjo6b3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX05vZGVfYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxfTm9kZSo+OjpvdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQnVja2V0X2FsbG9jYXRvcl90eXBlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxfVmFsdWU+OjpvdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVfYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIF9Ob2RlX2FsbG9jYXRvcl90eXBlICAgX01fbm9kZV9hbGxvY2F0b3I7CisgICAgICBfTm9kZSoqICAgICAgICAgICAgICAgIF9NX2J1Y2tldHM7CisgICAgICBzaXplX3R5cGUgICAgICAgICAgICAgIF9NX2J1Y2tldF9jb3VudDsKKyAgICAgIHNpemVfdHlwZSAgICAgICAgICAgICAgX01fZWxlbWVudF9jb3VudDsKKyAgICAgIF9SZWhhc2hQb2xpY3kgICAgICAgICAgX01fcmVoYXNoX3BvbGljeTsKKyAgICAgIAorICAgICAgX05vZGUqCisgICAgICBfTV9hbGxvY2F0ZV9ub2RlKGNvbnN0IHZhbHVlX3R5cGUmIF9fdik7CisgIAorICAgICAgdm9pZAorICAgICAgX01fZGVhbGxvY2F0ZV9ub2RlKF9Ob2RlKiBfX24pOworICAKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RlYWxsb2NhdGVfbm9kZXMoX05vZGUqKiwgc2l6ZV90eXBlKTsKKworICAgICAgX05vZGUqKgorICAgICAgX01fYWxsb2NhdGVfYnVja2V0cyhzaXplX3R5cGUgX19uKTsKKyAgCisgICAgICB2b2lkCisgICAgICBfTV9kZWFsbG9jYXRlX2J1Y2tldHMoX05vZGUqKiwgc2l6ZV90eXBlIF9fbik7CisKKyAgICBwdWJsaWM6CQkJICAgIAorICAgICAgLy8gQ29uc3RydWN0b3IsIGRlc3RydWN0b3IsIGFzc2lnbm1lbnQsIHN3YXAKKyAgICAgIF9IYXNodGFibGUoc2l6ZV90eXBlIF9fYnVja2V0X2hpbnQsCisJCSBjb25zdCBfSDEmLCBjb25zdCBfSDImLCBjb25zdCBfSGFzaCYsCisJCSBjb25zdCBfRXF1YWwmLCBjb25zdCBfRXh0cmFjdEtleSYsCisJCSBjb25zdCBhbGxvY2F0b3JfdHlwZSYpOworICAKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBfSGFzaHRhYmxlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJICAgc2l6ZV90eXBlIF9fYnVja2V0X2hpbnQsCisJCSAgIGNvbnN0IF9IMSYsIGNvbnN0IF9IMiYsIGNvbnN0IF9IYXNoJiwgCisJCSAgIGNvbnN0IF9FcXVhbCYsIGNvbnN0IF9FeHRyYWN0S2V5JiwKKwkJICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmKTsKKyAgCisgICAgICBfSGFzaHRhYmxlKGNvbnN0IF9IYXNodGFibGUmKTsKKworICAgICAgX0hhc2h0YWJsZShfSGFzaHRhYmxlJiYpOworICAgICAgCisgICAgICBfSGFzaHRhYmxlJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9IYXNodGFibGUmKTsKKworICAgICAgfl9IYXNodGFibGUoKTsKKworICAgICAgdm9pZCBzd2FwKF9IYXNodGFibGUmKTsKKworICAgICAgLy8gQmFzaWMgY29udGFpbmVyIG9wZXJhdGlvbnMKKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpCisgICAgICB7CisJaXRlcmF0b3IgX19pKF9NX2J1Y2tldHMpOworCWlmICghX19pLl9NX2N1cl9ub2RlKQorCSAgX19pLl9NX2luY3JfYnVja2V0KCk7CisJcmV0dXJuIF9faTsKKyAgICAgIH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QKKyAgICAgIHsKKwljb25zdF9pdGVyYXRvciBfX2koX01fYnVja2V0cyk7CisJaWYgKCFfX2kuX01fY3VyX25vZGUpCisJICBfX2kuX01faW5jcl9idWNrZXQoKTsKKwlyZXR1cm4gX19pOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9NX2J1Y2tldHMgKyBfTV9idWNrZXRfY291bnQpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX01fYnVja2V0cyArIF9NX2J1Y2tldF9jb3VudCk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNiZWdpbigpIGNvbnN0CisgICAgICB7CisJY29uc3RfaXRlcmF0b3IgX19pKF9NX2J1Y2tldHMpOworCWlmICghX19pLl9NX2N1cl9ub2RlKQorCSAgX19pLl9NX2luY3JfYnVja2V0KCk7CisJcmV0dXJuIF9faTsKKyAgICAgIH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX01fYnVja2V0cyArIF9NX2J1Y2tldF9jb3VudCk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2VsZW1lbnRfY291bnQ7IH0KKyAgCisgICAgICBib29sCisgICAgICBlbXB0eSgpIGNvbnN0CisgICAgICB7IHJldHVybiBzaXplKCkgPT0gMDsgfQorCisgICAgICBhbGxvY2F0b3JfdHlwZQorICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0CisgICAgICB7IHJldHVybiBhbGxvY2F0b3JfdHlwZShfTV9ub2RlX2FsbG9jYXRvcik7IH0KKworICAgICAgX1ZhbHVlX2FsbG9jYXRvcl90eXBlCisgICAgICBfTV9nZXRfVmFsdWVfYWxsb2NhdG9yKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9WYWx1ZV9hbGxvY2F0b3JfdHlwZShfTV9ub2RlX2FsbG9jYXRvcik7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvci5tYXhfc2l6ZSgpOyB9CisKKyAgICAgIC8vIE9ic2VydmVycworICAgICAga2V5X2VxdWFsCisgICAgICBrZXlfZXEoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01fZXE7IH0KKworICAgICAgLy8gaGFzaF9mdW5jdGlvbiwgaWYgcHJlc2VudCwgY29tZXMgZnJvbSBfSGFzaF9jb2RlX2Jhc2UuCisKKyAgICAgIC8vIEJ1Y2tldCBvcGVyYXRpb25zCisgICAgICBzaXplX3R5cGUKKyAgICAgIGJ1Y2tldF9jb3VudCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9idWNrZXRfY291bnQ7IH0KKyAgCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9idWNrZXRfY291bnQoKSBjb25zdAorICAgICAgeyByZXR1cm4gbWF4X3NpemUoKTsgfQorICAKKyAgICAgIHNpemVfdHlwZQorICAgICAgYnVja2V0X3NpemUoc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0ZDo6ZGlzdGFuY2UoYmVnaW4oX19uKSwgZW5kKF9fbikpOyB9CisgIAorICAgICAgc2l6ZV90eXBlCisgICAgICBidWNrZXQoY29uc3Qga2V5X3R5cGUmIF9faykgY29uc3QKKyAgICAgIHsgCisJcmV0dXJuIHRoaXMtPl9NX2J1Y2tldF9pbmRleChfX2ssIHRoaXMtPl9NX2hhc2hfY29kZShfX2spLAorCQkJCSAgICAgYnVja2V0X2NvdW50KCkpOworICAgICAgfQorCisgICAgICBsb2NhbF9pdGVyYXRvcgorICAgICAgYmVnaW4oc2l6ZV90eXBlIF9fbikKKyAgICAgIHsgcmV0dXJuIGxvY2FsX2l0ZXJhdG9yKF9NX2J1Y2tldHNbX19uXSk7IH0KKworICAgICAgbG9jYWxfaXRlcmF0b3IKKyAgICAgIGVuZChzaXplX3R5cGUpCisgICAgICB7IHJldHVybiBsb2NhbF9pdGVyYXRvcigwKTsgfQorCisgICAgICBjb25zdF9sb2NhbF9pdGVyYXRvcgorICAgICAgYmVnaW4oc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2xvY2FsX2l0ZXJhdG9yKF9NX2J1Y2tldHNbX19uXSk7IH0KKworICAgICAgY29uc3RfbG9jYWxfaXRlcmF0b3IKKyAgICAgIGVuZChzaXplX3R5cGUpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9sb2NhbF9pdGVyYXRvcigwKTsgfQorCisgICAgICAvLyBEUiA2OTEuCisgICAgICBjb25zdF9sb2NhbF9pdGVyYXRvcgorICAgICAgY2JlZ2luKHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9sb2NhbF9pdGVyYXRvcihfTV9idWNrZXRzW19fbl0pOyB9CisKKyAgICAgIGNvbnN0X2xvY2FsX2l0ZXJhdG9yCisgICAgICBjZW5kKHNpemVfdHlwZSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2xvY2FsX2l0ZXJhdG9yKDApOyB9CisKKyAgICAgIGZsb2F0CisgICAgICBsb2FkX2ZhY3RvcigpIGNvbnN0CisgICAgICB7IAorCXJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oc2l6ZSgpKSAvIHN0YXRpY19jYXN0PGZsb2F0PihidWNrZXRfY291bnQoKSk7CisgICAgICB9CisKKyAgICAgIC8vIG1heF9sb2FkX2ZhY3RvciwgaWYgcHJlc2VudCwgY29tZXMgZnJvbSBfUmVoYXNoX2Jhc2UuCisKKyAgICAgIC8vIEdlbmVyYWxpemF0aW9uIG9mIG1heF9sb2FkX2ZhY3Rvci4gIEV4dGVuc2lvbiwgbm90IGZvdW5kIGluIFRSMS4gIE9ubHkKKyAgICAgIC8vIHVzZWZ1bCBpZiBfUmVoYXNoUG9saWN5IGlzIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBkZWZhdWx0LgorICAgICAgY29uc3QgX1JlaGFzaFBvbGljeSYKKyAgICAgIF9fcmVoYXNoX3BvbGljeSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9yZWhhc2hfcG9saWN5OyB9CisgICAgICAKKyAgICAgIHZvaWQgCisgICAgICBfX3JlaGFzaF9wb2xpY3koY29uc3QgX1JlaGFzaFBvbGljeSYpOworCisgICAgICAvLyBMb29rdXAuCisgICAgICBpdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rKTsKKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9faykgY29uc3Q7CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgY291bnQoY29uc3Qga2V5X3R5cGUmIF9faykgY29uc3Q7CisKKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rKTsKKworICAgICAgc3RkOjpwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2spIGNvbnN0OworCisgICAgcHJpdmF0ZToJCQkvLyBGaW5kLCBpbnNlcnQgYW5kIGVyYXNlIGhlbHBlciBmdW5jdGlvbnMKKyAgICAgIC8vID8/PyBUaGlzIGRpc3BhdGNoaW5nIGlzIGEgd29ya2Fyb3VuZCBmb3IgdGhlIGZhY3QgdGhhdCB3ZSBkb24ndAorICAgICAgLy8gaGF2ZSBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uIG9mIG1lbWJlciB0ZW1wbGF0ZXM7IGl0IHdvdWxkIGJlCisgICAgICAvLyBiZXR0ZXIgdG8ganVzdCBzcGVjaWFsaXplIGluc2VydCBvbiBfX3VuaXF1ZV9rZXlzLiAgVGhlcmUgbWF5IGJlIGEKKyAgICAgIC8vIGNsZWFuZXIgd29ya2Fyb3VuZC4KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX3VuaXF1ZV9rZXlzLAorCQkJCQlzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+LAorCQkJCQlpdGVyYXRvcj46OnR5cGUKKyAgICAgICAgX0luc2VydF9SZXR1cm5fVHlwZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fdW5pcXVlX2tleXMsCisJCQkJCXN0ZDo6X1NlbGVjdDFzdDxfSW5zZXJ0X1JldHVybl9UeXBlPiwKKwkJCQkJc3RkOjpfSWRlbnRpdHk8X0luc2VydF9SZXR1cm5fVHlwZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjo6dHlwZQorICAgICAgICBfSW5zZXJ0X0NvbnZfVHlwZTsKKworICAgICAgX05vZGUqCisgICAgICBfTV9maW5kX25vZGUoX05vZGUqLCBjb25zdCBrZXlfdHlwZSYsCisJCSAgIHR5cGVuYW1lIF9IYXNodGFibGU6Ol9IYXNoX2NvZGVfdHlwZSkgY29uc3Q7CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBfTV9pbnNlcnRfYnVja2V0KGNvbnN0IHZhbHVlX3R5cGUmLCBzaXplX3R5cGUsCisJCSAgICAgICB0eXBlbmFtZSBfSGFzaHRhYmxlOjpfSGFzaF9jb2RlX3R5cGUpOworCisgICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+CisgICAgICBfTV9pbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYsIHN0ZDo6dHJ1ZV90eXBlKTsKKworICAgICAgaXRlcmF0b3IKKyAgICAgIF9NX2luc2VydChjb25zdCB2YWx1ZV90eXBlJiwgc3RkOjpmYWxzZV90eXBlKTsKKworICAgICAgdm9pZAorICAgICAgX01fZXJhc2Vfbm9kZShfTm9kZSosIF9Ob2RlKiopOworCisgICAgcHVibGljOgkJCQkKKyAgICAgIC8vIEluc2VydCBhbmQgZXJhc2UKKyAgICAgIF9JbnNlcnRfUmV0dXJuX1R5cGUKKyAgICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3YpIAorICAgICAgeyByZXR1cm4gX01faW5zZXJ0KF9fdiwgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxib29sLAorCQkJIF9fdW5pcXVlX2tleXM+KCkpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3RfaXRlcmF0b3IsIGNvbnN0IHZhbHVlX3R5cGUmIF9fdikKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9JbnNlcnRfQ29udl9UeXBlKCkodGhpcy0+aW5zZXJ0KF9fdikpKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KTsKKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeyB0aGlzLT5pbnNlcnQoX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yKTsKKworICAgICAgc2l6ZV90eXBlCisgICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYpOworCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoY29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yKTsKKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKTsKKworICAgICAgLy8gU2V0IG51bWJlciBvZiBidWNrZXRzIHRvIGJlIGFwcHJvcHJpYXRlIGZvciBjb250YWluZXIgb2YgbiBlbGVtZW50LgorICAgICAgdm9pZCByZWhhc2goc2l6ZV90eXBlIF9fbik7CisKKyAgICAgIC8vIERSIDExODkuCisgICAgICAvLyByZXNlcnZlLCBpZiBwcmVzZW50LCBjb21lcyBmcm9tIF9SZWhhc2hfYmFzZS4KKworICAgIHByaXZhdGU6CisgICAgICAvLyBVbmNvbmRpdGlvbmFsbHkgY2hhbmdlIHNpemUgb2YgYnVja2V0IGFycmF5IHRvIG4uCisgICAgICB2b2lkIF9NX3JlaGFzaChzaXplX3R5cGUgX19uKTsKKyAgICB9OworCisKKyAgLy8gRGVmaW5pdGlvbnMgb2YgY2xhc3MgdGVtcGxhdGUgX0hhc2h0YWJsZSdzIG91dC1vZi1saW5lIG1lbWJlciBmdW5jdGlvbnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LAorCQkJX19jaGMsIF9fY2l0LCBfX3VrPjo6X05vZGUqCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgX01fYWxsb2NhdGVfbm9kZShjb25zdCB2YWx1ZV90eXBlJiBfX3YpCisgICAgeworICAgICAgX05vZGUqIF9fbiA9IF9NX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOworICAgICAgX190cnkKKwl7CisJICBfTV9ub2RlX2FsbG9jYXRvci5jb25zdHJ1Y3QoX19uLCBfX3YpOworCSAgX19uLT5fTV9uZXh0ID0gMDsKKwkgIHJldHVybiBfX247CisJfQorICAgICAgX19jYXRjaCguLi4pCisJeworCSAgX01fbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX24sIDEpOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB2b2lkCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgX01fZGVhbGxvY2F0ZV9ub2RlKF9Ob2RlKiBfX24pCisgICAgeworICAgICAgX01fbm9kZV9hbGxvY2F0b3IuZGVzdHJveShfX24pOworICAgICAgX01fbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX24sIDEpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB2b2lkCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgX01fZGVhbGxvY2F0ZV9ub2RlcyhfTm9kZSoqIF9fYXJyYXksIHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgZm9yIChzaXplX3R5cGUgX19pID0gMDsgX19pIDwgX19uOyArK19faSkKKwl7CisJICBfTm9kZSogX19wID0gX19hcnJheVtfX2ldOworCSAgd2hpbGUgKF9fcCkKKwkgICAgeworCSAgICAgIF9Ob2RlKiBfX3RtcCA9IF9fcDsKKwkgICAgICBfX3AgPSBfX3AtPl9NX25leHQ7CisJICAgICAgX01fZGVhbGxvY2F0ZV9ub2RlKF9fdG1wKTsKKwkgICAgfQorCSAgX19hcnJheVtfX2ldID0gMDsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LAorCQkJX19jaGMsIF9fY2l0LCBfX3VrPjo6X05vZGUqKgorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIF9NX2FsbG9jYXRlX2J1Y2tldHMoc2l6ZV90eXBlIF9fbikKKyAgICB7CisgICAgICBfQnVja2V0X2FsbG9jYXRvcl90eXBlIF9fYWxsb2MoX01fbm9kZV9hbGxvY2F0b3IpOworCisgICAgICAvLyBXZSBhbGxvY2F0ZSBvbmUgZXh0cmEgYnVja2V0IHRvIGhvbGQgYSBzZW50aW5lbCwgYW4gYXJiaXRyYXJ5CisgICAgICAvLyBub24tbnVsbCBwb2ludGVyLiAgSXRlcmF0b3IgaW5jcmVtZW50IHJlbGllcyBvbiB0aGlzLgorICAgICAgX05vZGUqKiBfX3AgPSBfX2FsbG9jLmFsbG9jYXRlKF9fbiArIDEpOworICAgICAgc3RkOjpmaWxsKF9fcCwgX19wICsgX19uLCAoX05vZGUqKSAwKTsKKyAgICAgIF9fcFtfX25dID0gcmVpbnRlcnByZXRfY2FzdDxfTm9kZSo+KDB4MTAwMCk7CisgICAgICByZXR1cm4gX19wOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB2b2lkCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgX01fZGVhbGxvY2F0ZV9idWNrZXRzKF9Ob2RlKiogX19wLCBzaXplX3R5cGUgX19uKQorICAgIHsKKyAgICAgIF9CdWNrZXRfYWxsb2NhdG9yX3R5cGUgX19hbGxvYyhfTV9ub2RlX2FsbG9jYXRvcik7CisgICAgICBfX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKyAxKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCAKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgX0hhc2h0YWJsZShzaXplX3R5cGUgX19idWNrZXRfaGludCwKKwkgICAgICAgY29uc3QgX0gxJiBfX2gxLCBjb25zdCBfSDImIF9faDIsIGNvbnN0IF9IYXNoJiBfX2gsCisJICAgICAgIGNvbnN0IF9FcXVhbCYgX19lcSwgY29uc3QgX0V4dHJhY3RLZXkmIF9fZXhrLAorCSAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQorICAgIDogX19kZXRhaWw6Ol9SZWhhc2hfYmFzZTxfUmVoYXNoUG9saWN5LCBfSGFzaHRhYmxlPigpLAorICAgICAgX19kZXRhaWw6Ol9IYXNoX2NvZGVfYmFzZTxfS2V5LCBfVmFsdWUsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJCQkJX0gxLCBfSDIsIF9IYXNoLCBfX2NoYz4oX19leGssIF9fZXEsCisJCQkJCQkJX19oMSwgX19oMiwgX19oKSwKKyAgICAgIF9fZGV0YWlsOjpfTWFwX2Jhc2U8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwgX191aywgX0hhc2h0YWJsZT4oKSwKKyAgICAgIF9NX25vZGVfYWxsb2NhdG9yKF9fYSksCisgICAgICBfTV9idWNrZXRfY291bnQoMCksCisgICAgICBfTV9lbGVtZW50X2NvdW50KDApLAorICAgICAgX01fcmVoYXNoX3BvbGljeSgpCisgICAgeworICAgICAgX01fYnVja2V0X2NvdW50ID0gX01fcmVoYXNoX3BvbGljeS5fTV9uZXh0X2JrdChfX2J1Y2tldF9oaW50KTsKKyAgICAgIF9NX2J1Y2tldHMgPSBfTV9hbGxvY2F0ZV9idWNrZXRzKF9NX2J1Y2tldF9jb3VudCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJCSBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgICAgX0hhc2h0YWJsZShfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwKKwkJIHNpemVfdHlwZSBfX2J1Y2tldF9oaW50LAorCQkgY29uc3QgX0gxJiBfX2gxLCBjb25zdCBfSDImIF9faDIsIGNvbnN0IF9IYXNoJiBfX2gsCisJCSBjb25zdCBfRXF1YWwmIF9fZXEsIGNvbnN0IF9FeHRyYWN0S2V5JiBfX2V4aywKKwkJIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCisgICAgICA6IF9fZGV0YWlsOjpfUmVoYXNoX2Jhc2U8X1JlaGFzaFBvbGljeSwgX0hhc2h0YWJsZT4oKSwKKwlfX2RldGFpbDo6X0hhc2hfY29kZV9iYXNlPF9LZXksIF9WYWx1ZSwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCQkgIF9IMSwgX0gyLCBfSGFzaCwgX19jaGM+KF9fZXhrLCBfX2VxLAorCQkJCQkJCSAgX19oMSwgX19oMiwgX19oKSwKKwlfX2RldGFpbDo6X01hcF9iYXNlPF9LZXksIF9WYWx1ZSwgX0V4dHJhY3RLZXksIF9fdWssIF9IYXNodGFibGU+KCksCisJX01fbm9kZV9hbGxvY2F0b3IoX19hKSwKKwlfTV9idWNrZXRfY291bnQoMCksCisJX01fZWxlbWVudF9jb3VudCgwKSwKKwlfTV9yZWhhc2hfcG9saWN5KCkKKyAgICAgIHsKKwlfTV9idWNrZXRfY291bnQgPSBzdGQ6Om1heChfTV9yZWhhc2hfcG9saWN5Ll9NX25leHRfYmt0KF9fYnVja2V0X2hpbnQpLAorCQkJCSAgIF9NX3JlaGFzaF9wb2xpY3kuCisJCQkJICAgX01fYmt0X2Zvcl9lbGVtZW50cyhfX2RldGFpbDo6CisJCQkJCQkgICAgICAgX19kaXN0YW5jZV9mdyhfX2YsCisJCQkJCQkJCSAgICAgX19sKSkpOworCV9NX2J1Y2tldHMgPSBfTV9hbGxvY2F0ZV9idWNrZXRzKF9NX2J1Y2tldF9jb3VudCk7CisJX190cnkKKwkgIHsKKwkgICAgZm9yICg7IF9fZiAhPSBfX2w7ICsrX19mKQorCSAgICAgIHRoaXMtPmluc2VydCgqX19mKTsKKwkgIH0KKwlfX2NhdGNoKC4uLikKKwkgIHsKKwkgICAgY2xlYXIoKTsKKwkgICAgX01fZGVhbGxvY2F0ZV9idWNrZXRzKF9NX2J1Y2tldHMsIF9NX2J1Y2tldF9jb3VudCk7CisJICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgfQorICAgICAgfQorICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCAKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgX0hhc2h0YWJsZShjb25zdCBfSGFzaHRhYmxlJiBfX2h0KQorICAgIDogX19kZXRhaWw6Ol9SZWhhc2hfYmFzZTxfUmVoYXNoUG9saWN5LCBfSGFzaHRhYmxlPihfX2h0KSwKKyAgICAgIF9fZGV0YWlsOjpfSGFzaF9jb2RlX2Jhc2U8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJCV9IMSwgX0gyLCBfSGFzaCwgX19jaGM+KF9faHQpLAorICAgICAgX19kZXRhaWw6Ol9NYXBfYmFzZTxfS2V5LCBfVmFsdWUsIF9FeHRyYWN0S2V5LCBfX3VrLCBfSGFzaHRhYmxlPihfX2h0KSwKKyAgICAgIF9NX25vZGVfYWxsb2NhdG9yKF9faHQuX01fbm9kZV9hbGxvY2F0b3IpLAorICAgICAgX01fYnVja2V0X2NvdW50KF9faHQuX01fYnVja2V0X2NvdW50KSwKKyAgICAgIF9NX2VsZW1lbnRfY291bnQoX19odC5fTV9lbGVtZW50X2NvdW50KSwKKyAgICAgIF9NX3JlaGFzaF9wb2xpY3koX19odC5fTV9yZWhhc2hfcG9saWN5KQorICAgIHsKKyAgICAgIF9NX2J1Y2tldHMgPSBfTV9hbGxvY2F0ZV9idWNrZXRzKF9NX2J1Y2tldF9jb3VudCk7CisgICAgICBfX3RyeQorCXsKKwkgIGZvciAoc2l6ZV90eXBlIF9faSA9IDA7IF9faSA8IF9faHQuX01fYnVja2V0X2NvdW50OyArK19faSkKKwkgICAgeworCSAgICAgIF9Ob2RlKiBfX24gPSBfX2h0Ll9NX2J1Y2tldHNbX19pXTsKKwkgICAgICBfTm9kZSoqIF9fdGFpbCA9IF9NX2J1Y2tldHMgKyBfX2k7CisJICAgICAgd2hpbGUgKF9fbikKKwkJeworCQkgICpfX3RhaWwgPSBfTV9hbGxvY2F0ZV9ub2RlKF9fbi0+X01fdik7CisJCSAgdGhpcy0+X01fY29weV9jb2RlKCpfX3RhaWwsIF9fbik7CisJCSAgX190YWlsID0gJigoKl9fdGFpbCktPl9NX25leHQpOworCQkgIF9fbiA9IF9fbi0+X01fbmV4dDsKKwkJfQorCSAgICB9CisJfQorICAgICAgX19jYXRjaCguLi4pCisJeworCSAgY2xlYXIoKTsKKwkgIF9NX2RlYWxsb2NhdGVfYnVja2V0cyhfTV9idWNrZXRzLCBfTV9idWNrZXRfY291bnQpOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICBfSGFzaHRhYmxlKF9IYXNodGFibGUmJiBfX2h0KQorICAgIDogX19kZXRhaWw6Ol9SZWhhc2hfYmFzZTxfUmVoYXNoUG9saWN5LCBfSGFzaHRhYmxlPihfX2h0KSwKKyAgICAgIF9fZGV0YWlsOjpfSGFzaF9jb2RlX2Jhc2U8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJCV9IMSwgX0gyLCBfSGFzaCwgX19jaGM+KF9faHQpLAorICAgICAgX19kZXRhaWw6Ol9NYXBfYmFzZTxfS2V5LCBfVmFsdWUsIF9FeHRyYWN0S2V5LCBfX3VrLCBfSGFzaHRhYmxlPihfX2h0KSwKKyAgICAgIF9NX25vZGVfYWxsb2NhdG9yKF9faHQuX01fbm9kZV9hbGxvY2F0b3IpLAorICAgICAgX01fYnVja2V0X2NvdW50KF9faHQuX01fYnVja2V0X2NvdW50KSwKKyAgICAgIF9NX2VsZW1lbnRfY291bnQoX19odC5fTV9lbGVtZW50X2NvdW50KSwKKyAgICAgIF9NX3JlaGFzaF9wb2xpY3koX19odC5fTV9yZWhhc2hfcG9saWN5KSwKKyAgICAgIF9NX2J1Y2tldHMoX19odC5fTV9idWNrZXRzKQorICAgIHsKKyAgICAgIHNpemVfdHlwZSBfX25fYmt0ID0gX19odC5fTV9yZWhhc2hfcG9saWN5Ll9NX25leHRfYmt0KDApOworICAgICAgX19odC5fTV9idWNrZXRzID0gX19odC5fTV9hbGxvY2F0ZV9idWNrZXRzKF9fbl9ia3QpOworICAgICAgX19odC5fTV9idWNrZXRfY291bnQgPSBfX25fYmt0OworICAgICAgX19odC5fTV9lbGVtZW50X2NvdW50ID0gMDsKKyAgICAgIF9faHQuX01fcmVoYXNoX3BvbGljeSA9IF9SZWhhc2hQb2xpY3koKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCAKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPiYKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICBvcGVyYXRvcj0oY29uc3QgX0hhc2h0YWJsZSYgX19odCkKKyAgICB7CisgICAgICBfSGFzaHRhYmxlIF9fdG1wKF9faHQpOworICAgICAgdGhpcy0+c3dhcChfX3RtcCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIH5fSGFzaHRhYmxlKCkKKyAgICB7CisgICAgICBjbGVhcigpOworICAgICAgX01fZGVhbGxvY2F0ZV9idWNrZXRzKF9NX2J1Y2tldHMsIF9NX2J1Y2tldF9jb3VudCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIHZvaWQKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICBzd2FwKF9IYXNodGFibGUmIF9feCkKKyAgICB7CisgICAgICAvLyBUaGUgb25seSBiYXNlIGNsYXNzIHdpdGggbWVtYmVyIHZhcmlhYmxlcyBpcyBoYXNoX2NvZGVfYmFzZS4gIFdlCisgICAgICAvLyBkZWZpbmUgX0hhc2hfY29kZV9iYXNlOjpfTV9zd2FwIGJlY2F1c2UgZGlmZmVyZW50IHNwZWNpYWxpemF0aW9ucworICAgICAgLy8gaGF2ZSBkaWZmZXJlbnQgbWVtYmVycy4KKyAgICAgIF9fZGV0YWlsOjpfSGFzaF9jb2RlX2Jhc2U8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCV9IMSwgX0gyLCBfSGFzaCwgX19jaGM+OjpfTV9zd2FwKF9feCk7CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDQzMS4gU3dhcHBpbmcgY29udGFpbmVycyB3aXRoIHVuZXF1YWwgYWxsb2NhdG9ycy4KKyAgICAgIHN0ZDo6X19hbGxvY19zd2FwPF9Ob2RlX2FsbG9jYXRvcl90eXBlPjo6X1NfZG9faXQoX01fbm9kZV9hbGxvY2F0b3IsCisJCQkJCQkJX194Ll9NX25vZGVfYWxsb2NhdG9yKTsKKworICAgICAgc3RkOjpzd2FwKF9NX3JlaGFzaF9wb2xpY3ksIF9feC5fTV9yZWhhc2hfcG9saWN5KTsKKyAgICAgIHN0ZDo6c3dhcChfTV9idWNrZXRzLCBfX3guX01fYnVja2V0cyk7CisgICAgICBzdGQ6OnN3YXAoX01fYnVja2V0X2NvdW50LCBfX3guX01fYnVja2V0X2NvdW50KTsKKyAgICAgIHN0ZDo6c3dhcChfTV9lbGVtZW50X2NvdW50LCBfX3guX01fZWxlbWVudF9jb3VudCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIHZvaWQKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICBfX3JlaGFzaF9wb2xpY3koY29uc3QgX1JlaGFzaFBvbGljeSYgX19wb2wpCisgICAgeworICAgICAgX01fcmVoYXNoX3BvbGljeSA9IF9fcG9sOworICAgICAgc2l6ZV90eXBlIF9fbl9ia3QgPSBfX3BvbC5fTV9ia3RfZm9yX2VsZW1lbnRzKF9NX2VsZW1lbnRfY291bnQpOworICAgICAgaWYgKF9fbl9ia3QgPiBfTV9idWNrZXRfY291bnQpCisJX01fcmVoYXNoKF9fbl9ia3QpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCV9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCV9fY2hjLCBfX2NpdCwgX191az46Oml0ZXJhdG9yCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rKQorICAgIHsKKyAgICAgIHR5cGVuYW1lIF9IYXNodGFibGU6Ol9IYXNoX2NvZGVfdHlwZSBfX2NvZGUgPSB0aGlzLT5fTV9oYXNoX2NvZGUoX19rKTsKKyAgICAgIHN0ZDo6c2l6ZV90IF9fbiA9IHRoaXMtPl9NX2J1Y2tldF9pbmRleChfX2ssIF9fY29kZSwgX01fYnVja2V0X2NvdW50KTsKKyAgICAgIF9Ob2RlKiBfX3AgPSBfTV9maW5kX25vZGUoX01fYnVja2V0c1tfX25dLCBfX2ssIF9fY29kZSk7CisgICAgICByZXR1cm4gX19wID8gaXRlcmF0b3IoX19wLCBfTV9idWNrZXRzICsgX19uKSA6IHRoaXMtPmVuZCgpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCV9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCV9fY2hjLCBfX2NpdCwgX191az46OmNvbnN0X2l0ZXJhdG9yCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rKSBjb25zdAorICAgIHsKKyAgICAgIHR5cGVuYW1lIF9IYXNodGFibGU6Ol9IYXNoX2NvZGVfdHlwZSBfX2NvZGUgPSB0aGlzLT5fTV9oYXNoX2NvZGUoX19rKTsKKyAgICAgIHN0ZDo6c2l6ZV90IF9fbiA9IHRoaXMtPl9NX2J1Y2tldF9pbmRleChfX2ssIF9fY29kZSwgX01fYnVja2V0X2NvdW50KTsKKyAgICAgIF9Ob2RlKiBfX3AgPSBfTV9maW5kX25vZGUoX01fYnVja2V0c1tfX25dLCBfX2ssIF9fY29kZSk7CisgICAgICByZXR1cm4gX19wID8gY29uc3RfaXRlcmF0b3IoX19wLCBfTV9idWNrZXRzICsgX19uKSA6IHRoaXMtPmVuZCgpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCV9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCV9fY2hjLCBfX2NpdCwgX191az46OnNpemVfdHlwZQorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX2spIGNvbnN0CisgICAgeworICAgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTo6X0hhc2hfY29kZV90eXBlIF9fY29kZSA9IHRoaXMtPl9NX2hhc2hfY29kZShfX2spOworICAgICAgc3RkOjpzaXplX3QgX19uID0gdGhpcy0+X01fYnVja2V0X2luZGV4KF9faywgX19jb2RlLCBfTV9idWNrZXRfY291bnQpOworICAgICAgc3RkOjpzaXplX3QgX19yZXN1bHQgPSAwOworICAgICAgZm9yIChfTm9kZSogX19wID0gX01fYnVja2V0c1tfX25dOyBfX3A7IF9fcCA9IF9fcC0+X01fbmV4dCkKKwlpZiAodGhpcy0+X01fY29tcGFyZShfX2ssIF9fY29kZSwgX19wKSkKKwkgICsrX19yZXN1bHQ7CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIHN0ZDo6cGFpcjx0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwKKwkJCQkgIF9FeHRyYWN0S2V5LCBfRXF1YWwsIF9IMSwKKwkJCQkgIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksCisJCQkJICBfX2NoYywgX19jaXQsIF9fdWs+OjppdGVyYXRvciwKKwkgICAgICB0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwKKwkJCQkgIF9FeHRyYWN0S2V5LCBfRXF1YWwsIF9IMSwKKwkJCQkgIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksCisJCQkJICBfX2NoYywgX19jaXQsIF9fdWs+OjppdGVyYXRvcj4KKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rKQorICAgIHsKKyAgICAgIHR5cGVuYW1lIF9IYXNodGFibGU6Ol9IYXNoX2NvZGVfdHlwZSBfX2NvZGUgPSB0aGlzLT5fTV9oYXNoX2NvZGUoX19rKTsKKyAgICAgIHN0ZDo6c2l6ZV90IF9fbiA9IHRoaXMtPl9NX2J1Y2tldF9pbmRleChfX2ssIF9fY29kZSwgX01fYnVja2V0X2NvdW50KTsKKyAgICAgIF9Ob2RlKiogX19oZWFkID0gX01fYnVja2V0cyArIF9fbjsKKyAgICAgIF9Ob2RlKiBfX3AgPSBfTV9maW5kX25vZGUoKl9faGVhZCwgX19rLCBfX2NvZGUpOworICAgICAgCisgICAgICBpZiAoX19wKQorCXsKKwkgIF9Ob2RlKiBfX3AxID0gX19wLT5fTV9uZXh0OworCSAgZm9yICg7IF9fcDE7IF9fcDEgPSBfX3AxLT5fTV9uZXh0KQorCSAgICBpZiAoIXRoaXMtPl9NX2NvbXBhcmUoX19rLCBfX2NvZGUsIF9fcDEpKQorCSAgICAgIGJyZWFrOworCisJICBpdGVyYXRvciBfX2ZpcnN0KF9fcCwgX19oZWFkKTsKKwkgIGl0ZXJhdG9yIF9fbGFzdChfX3AxLCBfX2hlYWQpOworCSAgaWYgKCFfX3AxKQorCSAgICBfX2xhc3QuX01faW5jcl9idWNrZXQoKTsKKwkgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihfX2ZpcnN0LCBfX2xhc3QpOworCX0KKyAgICAgIGVsc2UKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIodGhpcy0+ZW5kKCksIHRoaXMtPmVuZCgpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCAKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgc3RkOjpwYWlyPHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLAorCQkJCSAgX0V4dHJhY3RLZXksIF9FcXVhbCwgX0gxLAorCQkJCSAgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCQkgIF9fY2hjLCBfX2NpdCwgX191az46OmNvbnN0X2l0ZXJhdG9yLAorCSAgICAgIHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLAorCQkJCSAgX0V4dHJhY3RLZXksIF9FcXVhbCwgX0gxLAorCQkJCSAgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCQkgIF9fY2hjLCBfX2NpdCwgX191az46OmNvbnN0X2l0ZXJhdG9yPgorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2spIGNvbnN0CisgICAgeworICAgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTo6X0hhc2hfY29kZV90eXBlIF9fY29kZSA9IHRoaXMtPl9NX2hhc2hfY29kZShfX2spOworICAgICAgc3RkOjpzaXplX3QgX19uID0gdGhpcy0+X01fYnVja2V0X2luZGV4KF9faywgX19jb2RlLCBfTV9idWNrZXRfY291bnQpOworICAgICAgX05vZGUqKiBfX2hlYWQgPSBfTV9idWNrZXRzICsgX19uOworICAgICAgX05vZGUqIF9fcCA9IF9NX2ZpbmRfbm9kZSgqX19oZWFkLCBfX2ssIF9fY29kZSk7CisKKyAgICAgIGlmIChfX3ApCisJeworCSAgX05vZGUqIF9fcDEgPSBfX3AtPl9NX25leHQ7CisJICBmb3IgKDsgX19wMTsgX19wMSA9IF9fcDEtPl9NX25leHQpCisJICAgIGlmICghdGhpcy0+X01fY29tcGFyZShfX2ssIF9fY29kZSwgX19wMSkpCisJICAgICAgYnJlYWs7CisKKwkgIGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QoX19wLCBfX2hlYWQpOworCSAgY29uc3RfaXRlcmF0b3IgX19sYXN0KF9fcDEsIF9faGVhZCk7CisJICBpZiAoIV9fcDEpCisJICAgIF9fbGFzdC5fTV9pbmNyX2J1Y2tldCgpOworCSAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKF9fZmlyc3QsIF9fbGFzdCk7CisJfQorICAgICAgZWxzZQorCXJldHVybiBzdGQ6Om1ha2VfcGFpcih0aGlzLT5lbmQoKSwgdGhpcy0+ZW5kKCkpOworICAgIH0KKworICAvLyBGaW5kIHRoZSBub2RlIHdob3NlIGtleSBjb21wYXJlcyBlcXVhbCB0byBrLCBiZWdpbm5pbmcgdGhlIHNlYXJjaAorICAvLyBhdCBwICh1c3VhbGx5IHRoZSBoZWFkIG9mIGEgYnVja2V0KS4gIFJldHVybiBuaWwgaWYgbm8gbm9kZSBpcyBmb3VuZC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCAKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LAorCQkJX0VxdWFsLCBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksCisJCQlfX2NoYywgX19jaXQsIF9fdWs+OjpfTm9kZSogCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgX01fZmluZF9ub2RlKF9Ob2RlKiBfX3AsIGNvbnN0IGtleV90eXBlJiBfX2ssCisJCXR5cGVuYW1lIF9IYXNodGFibGU6Ol9IYXNoX2NvZGVfdHlwZSBfX2NvZGUpIGNvbnN0CisgICAgeworICAgICAgZm9yICg7IF9fcDsgX19wID0gX19wLT5fTV9uZXh0KQorCWlmICh0aGlzLT5fTV9jb21wYXJlKF9faywgX19jb2RlLCBfX3ApKQorCSAgcmV0dXJuIF9fcDsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgLy8gSW5zZXJ0IHYgaW4gYnVja2V0IG4gKGFzc3VtZXMgbm8gZWxlbWVudCB3aXRoIGl0cyBrZXkgYWxyZWFkeSBwcmVzZW50KS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCAKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJCQlfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksCisJCQlfX2NoYywgX19jaXQsIF9fdWs+OjppdGVyYXRvcgorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIF9NX2luc2VydF9idWNrZXQoY29uc3QgdmFsdWVfdHlwZSYgX192LCBzaXplX3R5cGUgX19uLAorCQkgICAgIHR5cGVuYW1lIF9IYXNodGFibGU6Ol9IYXNoX2NvZGVfdHlwZSBfX2NvZGUpCisgICAgeworICAgICAgc3RkOjpwYWlyPGJvb2wsIHN0ZDo6c2l6ZV90PiBfX2RvX3JlaGFzaAorCT0gX01fcmVoYXNoX3BvbGljeS5fTV9uZWVkX3JlaGFzaChfTV9idWNrZXRfY291bnQsCisJCQkJCSAgX01fZWxlbWVudF9jb3VudCwgMSk7CisKKyAgICAgIC8vIEFsbG9jYXRlIHRoZSBuZXcgbm9kZSBiZWZvcmUgZG9pbmcgdGhlIHJlaGFzaCBzbyB0aGF0IHdlIGRvbid0CisgICAgICAvLyBkbyBhIHJlaGFzaCBpZiB0aGUgYWxsb2NhdGlvbiB0aHJvd3MuCisgICAgICBfTm9kZSogX19uZXdfbm9kZSA9IF9NX2FsbG9jYXRlX25vZGUoX192KTsKKworICAgICAgX190cnkKKwl7CisJICBpZiAoX19kb19yZWhhc2guZmlyc3QpCisJICAgIHsKKwkgICAgICBjb25zdCBrZXlfdHlwZSYgX19rID0gdGhpcy0+X01fZXh0cmFjdChfX3YpOworCSAgICAgIF9fbiA9IHRoaXMtPl9NX2J1Y2tldF9pbmRleChfX2ssIF9fY29kZSwgX19kb19yZWhhc2guc2Vjb25kKTsKKwkgICAgICBfTV9yZWhhc2goX19kb19yZWhhc2guc2Vjb25kKTsKKwkgICAgfQorCisJICBfX25ld19ub2RlLT5fTV9uZXh0ID0gX01fYnVja2V0c1tfX25dOworCSAgdGhpcy0+X01fc3RvcmVfY29kZShfX25ld19ub2RlLCBfX2NvZGUpOworCSAgX01fYnVja2V0c1tfX25dID0gX19uZXdfbm9kZTsKKwkgICsrX01fZWxlbWVudF9jb3VudDsKKwkgIHJldHVybiBpdGVyYXRvcihfX25ld19ub2RlLCBfTV9idWNrZXRzICsgX19uKTsKKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBfTV9kZWFsbG9jYXRlX25vZGUoX19uZXdfbm9kZSk7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgfQorCisgIC8vIEluc2VydCB2IGlmIG5vIGVsZW1lbnQgd2l0aCBpdHMga2V5IGlzIGFscmVhZHkgcHJlc2VudC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCAKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgc3RkOjpwYWlyPHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLAorCQkJCSAgX0V4dHJhY3RLZXksIF9FcXVhbCwgX0gxLAorCQkJCSAgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCQkgIF9fY2hjLCBfX2NpdCwgX191az46Oml0ZXJhdG9yLCBib29sPgorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIF9NX2luc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3YsIHN0ZDo6dHJ1ZV90eXBlKQorICAgIHsKKyAgICAgIGNvbnN0IGtleV90eXBlJiBfX2sgPSB0aGlzLT5fTV9leHRyYWN0KF9fdik7CisgICAgICB0eXBlbmFtZSBfSGFzaHRhYmxlOjpfSGFzaF9jb2RlX3R5cGUgX19jb2RlID0gdGhpcy0+X01faGFzaF9jb2RlKF9fayk7CisgICAgICBzaXplX3R5cGUgX19uID0gdGhpcy0+X01fYnVja2V0X2luZGV4KF9faywgX19jb2RlLCBfTV9idWNrZXRfY291bnQpOworCisgICAgICBpZiAoX05vZGUqIF9fcCA9IF9NX2ZpbmRfbm9kZShfTV9idWNrZXRzW19fbl0sIF9faywgX19jb2RlKSkKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoaXRlcmF0b3IoX19wLCBfTV9idWNrZXRzICsgX19uKSwgZmFsc2UpOworICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKF9NX2luc2VydF9idWNrZXQoX192LCBfX24sIF9fY29kZSksIHRydWUpOworICAgIH0KKworICAvLyBJbnNlcnQgdiB1bmNvbmRpdGlvbmFsbHkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LAorCQkJX19jaGMsIF9fY2l0LCBfX3VrPjo6aXRlcmF0b3IKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICBfTV9pbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX192LCBzdGQ6OmZhbHNlX3R5cGUpCisgICAgeworICAgICAgc3RkOjpwYWlyPGJvb2wsIHN0ZDo6c2l6ZV90PiBfX2RvX3JlaGFzaAorCT0gX01fcmVoYXNoX3BvbGljeS5fTV9uZWVkX3JlaGFzaChfTV9idWNrZXRfY291bnQsCisJCQkJCSAgX01fZWxlbWVudF9jb3VudCwgMSk7CisgICAgICBpZiAoX19kb19yZWhhc2guZmlyc3QpCisJX01fcmVoYXNoKF9fZG9fcmVoYXNoLnNlY29uZCk7CisgCisgICAgICBjb25zdCBrZXlfdHlwZSYgX19rID0gdGhpcy0+X01fZXh0cmFjdChfX3YpOworICAgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTo6X0hhc2hfY29kZV90eXBlIF9fY29kZSA9IHRoaXMtPl9NX2hhc2hfY29kZShfX2spOworICAgICAgc2l6ZV90eXBlIF9fbiA9IHRoaXMtPl9NX2J1Y2tldF9pbmRleChfX2ssIF9fY29kZSwgX01fYnVja2V0X2NvdW50KTsKKworICAgICAgLy8gRmlyc3QgZmluZCB0aGUgbm9kZSwgYXZvaWQgbGVha2luZyBuZXdfbm9kZSBpZiBjb21wYXJlIHRocm93cy4KKyAgICAgIF9Ob2RlKiBfX3ByZXYgPSBfTV9maW5kX25vZGUoX01fYnVja2V0c1tfX25dLCBfX2ssIF9fY29kZSk7CisgICAgICBfTm9kZSogX19uZXdfbm9kZSA9IF9NX2FsbG9jYXRlX25vZGUoX192KTsKKworICAgICAgaWYgKF9fcHJldikKKwl7CisJICBfX25ld19ub2RlLT5fTV9uZXh0ID0gX19wcmV2LT5fTV9uZXh0OworCSAgX19wcmV2LT5fTV9uZXh0ID0gX19uZXdfbm9kZTsKKwl9CisgICAgICBlbHNlCisJeworCSAgX19uZXdfbm9kZS0+X01fbmV4dCA9IF9NX2J1Y2tldHNbX19uXTsKKwkgIF9NX2J1Y2tldHNbX19uXSA9IF9fbmV3X25vZGU7CisJfQorICAgICAgdGhpcy0+X01fc3RvcmVfY29kZShfX25ld19ub2RlLCBfX2NvZGUpOworCisgICAgICArK19NX2VsZW1lbnRfY291bnQ7CisgICAgICByZXR1cm4gaXRlcmF0b3IoX19uZXdfbm9kZSwgX01fYnVja2V0cyArIF9fbik7CisgICAgfQorCisgIC8vIEZvciBlcmFzZShpdGVyYXRvcikgYW5kIGVyYXNlKGNvbnN0X2l0ZXJhdG9yKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCAKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgdm9pZAorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIF9NX2VyYXNlX25vZGUoX05vZGUqIF9fcCwgX05vZGUqKiBfX2IpCisgICAgeworICAgICAgX05vZGUqIF9fY3VyID0gKl9fYjsKKyAgICAgIGlmIChfX2N1ciA9PSBfX3ApCisJKl9fYiA9IF9fY3VyLT5fTV9uZXh0OworICAgICAgZWxzZQorCXsKKwkgIF9Ob2RlKiBfX25leHQgPSBfX2N1ci0+X01fbmV4dDsKKwkgIHdoaWxlIChfX25leHQgIT0gX19wKQorCSAgICB7CisJICAgICAgX19jdXIgPSBfX25leHQ7CisJICAgICAgX19uZXh0ID0gX19jdXItPl9NX25leHQ7CisJICAgIH0KKwkgIF9fY3VyLT5fTV9uZXh0ID0gX19uZXh0LT5fTV9uZXh0OworCX0KKworICAgICAgX01fZGVhbGxvY2F0ZV9ub2RlKF9fcCk7CisgICAgICAtLV9NX2VsZW1lbnRfY291bnQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgdm9pZCAKKyAgICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICAgIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICB7CisJc2l6ZV90eXBlIF9fbl9lbHQgPSBfX2RldGFpbDo6X19kaXN0YW5jZV9mdyhfX2ZpcnN0LCBfX2xhc3QpOworCXN0ZDo6cGFpcjxib29sLCBzdGQ6OnNpemVfdD4gX19kb19yZWhhc2gKKwkgID0gX01fcmVoYXNoX3BvbGljeS5fTV9uZWVkX3JlaGFzaChfTV9idWNrZXRfY291bnQsCisJCQkJCSAgICBfTV9lbGVtZW50X2NvdW50LCBfX25fZWx0KTsKKwlpZiAoX19kb19yZWhhc2guZmlyc3QpCisJICBfTV9yZWhhc2goX19kb19yZWhhc2guc2Vjb25kKTsKKworCWZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQorCSAgdGhpcy0+aW5zZXJ0KCpfX2ZpcnN0KTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCV9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCV9fY2hjLCBfX2NpdCwgX191az46Oml0ZXJhdG9yCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgZXJhc2UoY29uc3RfaXRlcmF0b3IgX19pdCkKKyAgICB7CisgICAgICBpdGVyYXRvciBfX3Jlc3VsdChfX2l0Ll9NX2N1cl9ub2RlLCBfX2l0Ll9NX2N1cl9idWNrZXQpOworICAgICAgKytfX3Jlc3VsdDsKKyAgICAgIF9NX2VyYXNlX25vZGUoX19pdC5fTV9jdXJfbm9kZSwgX19pdC5fTV9jdXJfYnVja2V0KTsKKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCAKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJCQlfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksCisJCQlfX2NoYywgX19jaXQsIF9fdWs+OjpzaXplX3R5cGUKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX19rKQorICAgIHsKKyAgICAgIHR5cGVuYW1lIF9IYXNodGFibGU6Ol9IYXNoX2NvZGVfdHlwZSBfX2NvZGUgPSB0aGlzLT5fTV9oYXNoX2NvZGUoX19rKTsKKyAgICAgIHN0ZDo6c2l6ZV90IF9fbiA9IHRoaXMtPl9NX2J1Y2tldF9pbmRleChfX2ssIF9fY29kZSwgX01fYnVja2V0X2NvdW50KTsKKyAgICAgIHNpemVfdHlwZSBfX3Jlc3VsdCA9IDA7CisgICAgICAKKyAgICAgIF9Ob2RlKiogX19zbG90ID0gX01fYnVja2V0cyArIF9fbjsKKyAgICAgIHdoaWxlICgqX19zbG90ICYmICF0aGlzLT5fTV9jb21wYXJlKF9faywgX19jb2RlLCAqX19zbG90KSkKKwlfX3Nsb3QgPSAmKCgqX19zbG90KS0+X01fbmV4dCk7CisKKyAgICAgIF9Ob2RlKiogX19zYXZlZF9zbG90ID0gMDsKKyAgICAgIHdoaWxlICgqX19zbG90ICYmIHRoaXMtPl9NX2NvbXBhcmUoX19rLCBfX2NvZGUsICpfX3Nsb3QpKQorCXsKKwkgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkgIC8vIDUyNi4gSXMgaXQgdW5kZWZpbmVkIGlmIGEgZnVuY3Rpb24gaW4gdGhlIHN0YW5kYXJkIGNoYW5nZXMKKwkgIC8vIGluIHBhcmFtZXRlcnM/CisJICBpZiAoJnRoaXMtPl9NX2V4dHJhY3QoKCpfX3Nsb3QpLT5fTV92KSAhPSAmX19rKQorCSAgICB7CisgICAgICAgICAgICAgIF9Ob2RlKiBfX3AgPSAqX19zbG90OworICAgICAgICAgICAgICAqX19zbG90ID0gX19wLT5fTV9uZXh0OworCSAgICAgIF9NX2RlYWxsb2NhdGVfbm9kZShfX3ApOworCSAgICAgIC0tX01fZWxlbWVudF9jb3VudDsKKwkgICAgICArK19fcmVzdWx0OworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBfX3NhdmVkX3Nsb3QgPSBfX3Nsb3Q7CisJICAgICAgX19zbG90ID0gJigoKl9fc2xvdCktPl9NX25leHQpOworCSAgICB9CisJfQorCisgICAgICBpZiAoX19zYXZlZF9zbG90KQorCXsKKwkgIF9Ob2RlKiBfX3AgPSAqX19zYXZlZF9zbG90OworCSAgKl9fc2F2ZWRfc2xvdCA9IF9fcC0+X01fbmV4dDsKKwkgIF9NX2RlYWxsb2NhdGVfbm9kZShfX3ApOworCSAgLS1fTV9lbGVtZW50X2NvdW50OworCSAgKytfX3Jlc3VsdDsKKwl9CisKKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisKKyAgLy8gPz8/IFRoaXMgY291bGQgYmUgb3B0aW1pemVkIGJ5IHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlIGJ1Y2tldAorICAvLyBzdHJ1Y3R1cmUsIGJ1dCBpdCdzIG5vdCBjbGVhciB0aGF0IGl0J3Mgd29ydGggZG9pbmcuICBJdCBwcm9iYWJseQorICAvLyB3b3VsZG4ndCBldmVuIGJlIGFuIG9wdGltaXphdGlvbiB1bmxlc3MgdGhlIGxvYWQgZmFjdG9yIGlzIGxhcmdlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCV9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCV9fY2hjLCBfX2NpdCwgX191az46Oml0ZXJhdG9yCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgZXJhc2UoY29uc3RfaXRlcmF0b3IgX19maXJzdCwgY29uc3RfaXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwlfX2ZpcnN0ID0gdGhpcy0+ZXJhc2UoX19maXJzdCk7CisgICAgICByZXR1cm4gaXRlcmF0b3IoX19sYXN0Ll9NX2N1cl9ub2RlLCBfX2xhc3QuX01fY3VyX2J1Y2tldCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIHZvaWQKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICBjbGVhcigpCisgICAgeworICAgICAgX01fZGVhbGxvY2F0ZV9ub2RlcyhfTV9idWNrZXRzLCBfTV9idWNrZXRfY291bnQpOworICAgICAgX01fZWxlbWVudF9jb3VudCA9IDA7CisgICAgfQorIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB2b2lkCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgcmVoYXNoKHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgX01fcmVoYXNoKHN0ZDo6bWF4KF9NX3JlaGFzaF9wb2xpY3kuX01fbmV4dF9ia3QoX19uKSwKKwkJCSBfTV9yZWhhc2hfcG9saWN5Ll9NX2JrdF9mb3JfZWxlbWVudHMoX01fZWxlbWVudF9jb3VudAorCQkJCQkJCSAgICAgICsgMSkpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCAKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgdm9pZAorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIF9NX3JlaGFzaChzaXplX3R5cGUgX19uKQorICAgIHsKKyAgICAgIF9Ob2RlKiogX19uZXdfYXJyYXkgPSBfTV9hbGxvY2F0ZV9idWNrZXRzKF9fbik7CisgICAgICBfX3RyeQorCXsKKwkgIGZvciAoc2l6ZV90eXBlIF9faSA9IDA7IF9faSA8IF9NX2J1Y2tldF9jb3VudDsgKytfX2kpCisJICAgIHdoaWxlIChfTm9kZSogX19wID0gX01fYnVja2V0c1tfX2ldKQorCSAgICAgIHsKKwkJc3RkOjpzaXplX3QgX19uZXdfaW5kZXggPSB0aGlzLT5fTV9idWNrZXRfaW5kZXgoX19wLCBfX24pOworCQlfTV9idWNrZXRzW19faV0gPSBfX3AtPl9NX25leHQ7CisJCV9fcC0+X01fbmV4dCA9IF9fbmV3X2FycmF5W19fbmV3X2luZGV4XTsKKwkJX19uZXdfYXJyYXlbX19uZXdfaW5kZXhdID0gX19wOworCSAgICAgIH0KKwkgIF9NX2RlYWxsb2NhdGVfYnVja2V0cyhfTV9idWNrZXRzLCBfTV9idWNrZXRfY291bnQpOworCSAgX01fYnVja2V0X2NvdW50ID0gX19uOworCSAgX01fYnVja2V0cyA9IF9fbmV3X2FycmF5OworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIC8vIEEgZmFpbHVyZSBoZXJlIG1lYW5zIHRoYXQgYSBoYXNoIGZ1bmN0aW9uIHRocmV3IGFuIGV4Y2VwdGlvbi4KKwkgIC8vIFdlIGNhbid0IHJlc3RvcmUgdGhlIHByZXZpb3VzIHN0YXRlIHdpdGhvdXQgY2FsbGluZyB0aGUgaGFzaAorCSAgLy8gZnVuY3Rpb24gYWdhaW4sIHNvIHRoZSBvbmx5IHNlbnNpYmxlIHJlY292ZXJ5IGlzIHRvIGRlbGV0ZQorCSAgLy8gZXZlcnl0aGluZy4KKwkgIF9NX2RlYWxsb2NhdGVfbm9kZXMoX19uZXdfYXJyYXksIF9fbik7CisJICBfTV9kZWFsbG9jYXRlX2J1Y2tldHMoX19uZXdfYXJyYXksIF9fbik7CisJICBfTV9kZWFsbG9jYXRlX25vZGVzKF9NX2J1Y2tldHMsIF9NX2J1Y2tldF9jb3VudCk7CisJICBfTV9lbGVtZW50X2NvdW50ID0gMDsKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICB9Cit9CisKKyNlbmRpZiAvLyBfSEFTSFRBQkxFX0gKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9oYXNodGFibGVfcG9saWN5LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvaGFzaHRhYmxlX3BvbGljeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNmE4ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvaGFzaHRhYmxlX3BvbGljeS5oCkBAIC0wLDAgKzEsOTU5IEBACisvLyBJbnRlcm5hbCBwb2xpY3kgaGVhZGVyIGZvciB1bm9yZGVyZWRfc2V0IGFuZCB1bm9yZGVyZWRfbWFwIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy9oYXNodGFibGVfcG9saWN5LmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfSEFTSFRBQkxFX1BPTElDWV9ICisjZGVmaW5lIF9IQVNIVEFCTEVfUE9MSUNZX0ggMQorCituYW1lc3BhY2Ugc3RkCit7CituYW1lc3BhY2UgX19kZXRhaWwKK3sKKyAgLy8gSGVscGVyIGZ1bmN0aW9uOiByZXR1cm4gZGlzdGFuY2UoZmlyc3QsIGxhc3QpIGZvciBmb3J3YXJkCisgIC8vIGl0ZXJhdG9ycywgb3IgMCBmb3IgaW5wdXQgaXRlcmF0b3JzLgorICB0ZW1wbGF0ZTxjbGFzcyBfSXRlcmF0b3I+CisgICAgaW5saW5lIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorICAgIF9fZGlzdGFuY2VfZncoX0l0ZXJhdG9yIF9fZmlyc3QsIF9JdGVyYXRvciBfX2xhc3QsCisJCSAgc3RkOjppbnB1dF9pdGVyYXRvcl90YWcpCisgICAgeyByZXR1cm4gMDsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9JdGVyYXRvcj4KKyAgICBpbmxpbmUgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCisgICAgX19kaXN0YW5jZV9mdyhfSXRlcmF0b3IgX19maXJzdCwgX0l0ZXJhdG9yIF9fbGFzdCwKKwkJICBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnKQorICAgIHsgcmV0dXJuIHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9JdGVyYXRvcj4KKyAgICBpbmxpbmUgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCisgICAgX19kaXN0YW5jZV9mdyhfSXRlcmF0b3IgX19maXJzdCwgX0l0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9UYWc7CisgICAgICByZXR1cm4gX19kaXN0YW5jZV9mdyhfX2ZpcnN0LCBfX2xhc3QsIF9UYWcoKSk7CisgICAgfQorCisgIC8vIEF1eGlsaWFyeSB0eXBlcyB1c2VkIGZvciBhbGwgaW5zdGFudGlhdGlvbnMgb2YgX0hhc2h0YWJsZTogbm9kZXMKKyAgLy8gYW5kIGl0ZXJhdG9ycy4KKyAgCisgIC8vIE5vZGVzLCB1c2VkIHRvIHdyYXAgZWxlbWVudHMgc3RvcmVkIGluIHRoZSBoYXNoIHRhYmxlLiAgQSBwb2xpY3kKKyAgLy8gdGVtcGxhdGUgcGFyYW1ldGVyIG9mIGNsYXNzIHRlbXBsYXRlIF9IYXNodGFibGUgY29udHJvbHMgd2hldGhlcgorICAvLyBub2RlcyBhbHNvIHN0b3JlIGEgaGFzaCBjb2RlLiBJbiBzb21lIGNhc2VzIChlLmcuIHN0cmluZ3MpIHRoaXMKKyAgLy8gbWF5IGJlIGEgcGVyZm9ybWFuY2Ugd2luLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIGJvb2wgX19jYWNoZV9oYXNoX2NvZGU+CisgICAgc3RydWN0IF9IYXNoX25vZGU7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlPgorICAgIHN0cnVjdCBfSGFzaF9ub2RlPF9WYWx1ZSwgdHJ1ZT4KKyAgICB7CisgICAgICBfVmFsdWUgICAgICAgX01fdjsKKyAgICAgIHN0ZDo6c2l6ZV90ICBfTV9oYXNoX2NvZGU7CisgICAgICBfSGFzaF9ub2RlKiAgX01fbmV4dDsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIF9IYXNoX25vZGUoX0FyZ3MmJi4uLiBfX2FyZ3MpCisJOiBfTV92KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiksCisJICBfTV9oYXNoX2NvZGUoKSwgX01fbmV4dCgpIHsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlPgorICAgIHN0cnVjdCBfSGFzaF9ub2RlPF9WYWx1ZSwgZmFsc2U+CisgICAgeworICAgICAgX1ZhbHVlICAgICAgIF9NX3Y7CisgICAgICBfSGFzaF9ub2RlKiAgX01fbmV4dDsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIF9IYXNoX25vZGUoX0FyZ3MmJi4uLiBfX2FyZ3MpCisJOiBfTV92KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiksCisJICBfTV9uZXh0KCkgeyB9CisgICAgfTsKKworICAvLyBMb2NhbCBpdGVyYXRvcnMsIHVzZWQgdG8gaXRlcmF0ZSB3aXRoaW4gYSBidWNrZXQgYnV0IG5vdCBiZXR3ZWVuCisgIC8vIGJ1Y2tldHMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZSwgYm9vbCBfX2NhY2hlPgorICAgIHN0cnVjdCBfTm9kZV9pdGVyYXRvcl9iYXNlCisgICAgeworICAgICAgX05vZGVfaXRlcmF0b3JfYmFzZShfSGFzaF9ub2RlPF9WYWx1ZSwgX19jYWNoZT4qIF9fcCkKKyAgICAgIDogX01fY3VyKF9fcCkgeyB9CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIF9NX2luY3IoKQorICAgICAgeyBfTV9jdXIgPSBfTV9jdXItPl9NX25leHQ7IH0KKworICAgICAgX0hhc2hfbm9kZTxfVmFsdWUsIF9fY2FjaGU+KiAgX01fY3VyOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCBib29sIF9fY2FjaGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9Ob2RlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBfX2NhY2hlPiYgX194LAorCSAgICAgICBjb25zdCBfTm9kZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4mIF9feSkKKyAgICB7IHJldHVybiBfX3guX01fY3VyID09IF9feS5fTV9jdXI7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIGJvb2wgX19jYWNoZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX05vZGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+JiBfX3gsCisJICAgICAgIGNvbnN0IF9Ob2RlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBfX2NhY2hlPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5fTV9jdXIgIT0gX195Ll9NX2N1cjsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZSwgYm9vbCBfX2NvbnN0YW50X2l0ZXJhdG9ycywgYm9vbCBfX2NhY2hlPgorICAgIHN0cnVjdCBfTm9kZV9pdGVyYXRvcgorICAgIDogcHVibGljIF9Ob2RlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBfX2NhY2hlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1ZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fY29uc3RhbnRfaXRlcmF0b3JzLAorCQkJCQljb25zdCBfVmFsdWUqLCBfVmFsdWUqPjo6dHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8X19jb25zdGFudF9pdGVyYXRvcnMsCisJCQkJCWNvbnN0IF9WYWx1ZSYsIF9WYWx1ZSY+Ojp0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBzdGQ6OnB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyAgICAgICAgICAgICAgICBpdGVyYXRvcl9jYXRlZ29yeTsKKworICAgICAgX05vZGVfaXRlcmF0b3IoKQorICAgICAgOiBfTm9kZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4oMCkgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfTm9kZV9pdGVyYXRvcihfSGFzaF9ub2RlPF9WYWx1ZSwgX19jYWNoZT4qIF9fcCkKKyAgICAgIDogX05vZGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+KF9fcCkgeyB9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2N1ci0+X01fdjsgfQorICAKKyAgICAgIHBvaW50ZXIKKyAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAgeyByZXR1cm4gJnRoaXMtPl9NX2N1ci0+X01fdjsgfQorCisgICAgICBfTm9kZV9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeyAKKwl0aGlzLT5fTV9pbmNyKCk7CisJcmV0dXJuICp0aGlzOyAKKyAgICAgIH0KKyAgCisgICAgICBfTm9kZV9pdGVyYXRvcgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7IAorCV9Ob2RlX2l0ZXJhdG9yIF9fdG1wKCp0aGlzKTsKKwl0aGlzLT5fTV9pbmNyKCk7CisJcmV0dXJuIF9fdG1wOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCBib29sIF9fY29uc3RhbnRfaXRlcmF0b3JzLCBib29sIF9fY2FjaGU+CisgICAgc3RydWN0IF9Ob2RlX2NvbnN0X2l0ZXJhdG9yCisgICAgOiBwdWJsaWMgX05vZGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+CisgICAgeworICAgICAgdHlwZWRlZiBfVmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIGNvbnN0IF9WYWx1ZSogICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1ZhbHVlJiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHN0ZDo6cHRyZGlmZl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnICAgICAgICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OworCisgICAgICBfTm9kZV9jb25zdF9pdGVyYXRvcigpCisgICAgICA6IF9Ob2RlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBfX2NhY2hlPigwKSB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIF9Ob2RlX2NvbnN0X2l0ZXJhdG9yKF9IYXNoX25vZGU8X1ZhbHVlLCBfX2NhY2hlPiogX19wKQorICAgICAgOiBfTm9kZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4oX19wKSB7IH0KKworICAgICAgX05vZGVfY29uc3RfaXRlcmF0b3IoY29uc3QgX05vZGVfaXRlcmF0b3I8X1ZhbHVlLCBfX2NvbnN0YW50X2l0ZXJhdG9ycywKKwkJCSAgIF9fY2FjaGU+JiBfX3gpCisgICAgICA6IF9Ob2RlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBfX2NhY2hlPihfX3guX01fY3VyKSB7IH0KKworICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01fY3VyLT5fTV92OyB9CisgIAorICAgICAgcG9pbnRlcgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CisgICAgICB7IHJldHVybiAmdGhpcy0+X01fY3VyLT5fTV92OyB9CisKKyAgICAgIF9Ob2RlX2NvbnN0X2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7IAorCXRoaXMtPl9NX2luY3IoKTsKKwlyZXR1cm4gKnRoaXM7IAorICAgICAgfQorICAKKyAgICAgIF9Ob2RlX2NvbnN0X2l0ZXJhdG9yCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsgCisJX05vZGVfY29uc3RfaXRlcmF0b3IgX190bXAoKnRoaXMpOworCXRoaXMtPl9NX2luY3IoKTsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIGJvb2wgX19jYWNoZT4KKyAgICBzdHJ1Y3QgX0hhc2h0YWJsZV9pdGVyYXRvcl9iYXNlCisgICAgeworICAgICAgX0hhc2h0YWJsZV9pdGVyYXRvcl9iYXNlKF9IYXNoX25vZGU8X1ZhbHVlLCBfX2NhY2hlPiogX19ub2RlLAorCQkJICAgICAgIF9IYXNoX25vZGU8X1ZhbHVlLCBfX2NhY2hlPioqIF9fYnVja2V0KQorICAgICAgOiBfTV9jdXJfbm9kZShfX25vZGUpLCBfTV9jdXJfYnVja2V0KF9fYnVja2V0KSB7IH0KKworICAgICAgdm9pZAorICAgICAgX01faW5jcigpCisgICAgICB7CisJX01fY3VyX25vZGUgPSBfTV9jdXJfbm9kZS0+X01fbmV4dDsKKwlpZiAoIV9NX2N1cl9ub2RlKQorCSAgX01faW5jcl9idWNrZXQoKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01faW5jcl9idWNrZXQoKTsKKworICAgICAgX0hhc2hfbm9kZTxfVmFsdWUsIF9fY2FjaGU+KiAgIF9NX2N1cl9ub2RlOworICAgICAgX0hhc2hfbm9kZTxfVmFsdWUsIF9fY2FjaGU+KiogIF9NX2N1cl9idWNrZXQ7CisgICAgfTsKKworICAvLyBHbG9iYWwgaXRlcmF0b3JzLCB1c2VkIGZvciBhcmJpdHJhcnkgaXRlcmF0aW9uIHdpdGhpbiBhIGhhc2gKKyAgLy8gdGFibGUuICBMYXJnZXIgYW5kIG1vcmUgZXhwZW5zaXZlIHRoYW4gbG9jYWwgaXRlcmF0b3JzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIGJvb2wgX19jYWNoZT4KKyAgICB2b2lkCisgICAgX0hhc2h0YWJsZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT46OgorICAgIF9NX2luY3JfYnVja2V0KCkKKyAgICB7CisgICAgICArK19NX2N1cl9idWNrZXQ7CisKKyAgICAgIC8vIFRoaXMgbG9vcCByZXF1aXJlcyB0aGUgYnVja2V0IGFycmF5IHRvIGhhdmUgYSBub24tbnVsbCBzZW50aW5lbC4KKyAgICAgIHdoaWxlICghKl9NX2N1cl9idWNrZXQpCisJKytfTV9jdXJfYnVja2V0OworICAgICAgX01fY3VyX25vZGUgPSAqX01fY3VyX2J1Y2tldDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCBib29sIF9fY2FjaGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9IYXNodGFibGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+JiBfX3gsCisJICAgICAgIGNvbnN0IF9IYXNodGFibGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX2N1cl9ub2RlID09IF9feS5fTV9jdXJfbm9kZTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZSwgYm9vbCBfX2NhY2hlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBfSGFzaHRhYmxlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBfX2NhY2hlPiYgX194LAorCSAgICAgICBjb25zdCBfSGFzaHRhYmxlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBfX2NhY2hlPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5fTV9jdXJfbm9kZSAhPSBfX3kuX01fY3VyX25vZGU7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIGJvb2wgX19jb25zdGFudF9pdGVyYXRvcnMsIGJvb2wgX19jYWNoZT4KKyAgICBzdHJ1Y3QgX0hhc2h0YWJsZV9pdGVyYXRvcgorICAgIDogcHVibGljIF9IYXNodGFibGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+CisgICAgeworICAgICAgdHlwZWRlZiBfVmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8X19jb25zdGFudF9pdGVyYXRvcnMsCisJCQkJCWNvbnN0IF9WYWx1ZSosIF9WYWx1ZSo+Ojp0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2NvbnN0YW50X2l0ZXJhdG9ycywKKwkJCQkJY29uc3QgX1ZhbHVlJiwgX1ZhbHVlJj46OnR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHN0ZDo6cHRyZGlmZl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnICAgICAgICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OworCisgICAgICBfSGFzaHRhYmxlX2l0ZXJhdG9yKCkKKyAgICAgIDogX0hhc2h0YWJsZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4oMCwgMCkgeyB9CisKKyAgICAgIF9IYXNodGFibGVfaXRlcmF0b3IoX0hhc2hfbm9kZTxfVmFsdWUsIF9fY2FjaGU+KiBfX3AsCisJCQkgIF9IYXNoX25vZGU8X1ZhbHVlLCBfX2NhY2hlPioqIF9fYikKKyAgICAgIDogX0hhc2h0YWJsZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4oX19wLCBfX2IpIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgX0hhc2h0YWJsZV9pdGVyYXRvcihfSGFzaF9ub2RlPF9WYWx1ZSwgX19jYWNoZT4qKiBfX2IpCisgICAgICA6IF9IYXNodGFibGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+KCpfX2IsIF9fYikgeyB9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2N1cl9ub2RlLT5fTV92OyB9CisgIAorICAgICAgcG9pbnRlcgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CisgICAgICB7IHJldHVybiAmdGhpcy0+X01fY3VyX25vZGUtPl9NX3Y7IH0KKworICAgICAgX0hhc2h0YWJsZV9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeyAKKwl0aGlzLT5fTV9pbmNyKCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorICAKKyAgICAgIF9IYXNodGFibGVfaXRlcmF0b3IKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeyAKKwlfSGFzaHRhYmxlX2l0ZXJhdG9yIF9fdG1wKCp0aGlzKTsKKwl0aGlzLT5fTV9pbmNyKCk7CisJcmV0dXJuIF9fdG1wOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCBib29sIF9fY29uc3RhbnRfaXRlcmF0b3JzLCBib29sIF9fY2FjaGU+CisgICAgc3RydWN0IF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3IKKyAgICA6IHB1YmxpYyBfSGFzaHRhYmxlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBfX2NhY2hlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1ZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBjb25zdCBfVmFsdWUqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIGNvbnN0IF9WYWx1ZSYgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBzdGQ6OnB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyAgICAgICAgICAgICAgICBpdGVyYXRvcl9jYXRlZ29yeTsKKworICAgICAgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcigpCisgICAgICA6IF9IYXNodGFibGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+KDAsIDApIHsgfQorCisgICAgICBfSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yKF9IYXNoX25vZGU8X1ZhbHVlLCBfX2NhY2hlPiogX19wLAorCQkJCV9IYXNoX25vZGU8X1ZhbHVlLCBfX2NhY2hlPioqIF9fYikKKyAgICAgIDogX0hhc2h0YWJsZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4oX19wLCBfX2IpIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcihfSGFzaF9ub2RlPF9WYWx1ZSwgX19jYWNoZT4qKiBfX2IpCisgICAgICA6IF9IYXNodGFibGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+KCpfX2IsIF9fYikgeyB9CisKKyAgICAgIF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3IoY29uc3QgX0hhc2h0YWJsZV9pdGVyYXRvcjxfVmFsdWUsCisJCQkJX19jb25zdGFudF9pdGVyYXRvcnMsIF9fY2FjaGU+JiBfX3gpCisgICAgICA6IF9IYXNodGFibGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+KF9feC5fTV9jdXJfbm9kZSwKKwkJCQkJCSAgX194Ll9NX2N1cl9idWNrZXQpIHsgfQorCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5fTV9jdXJfbm9kZS0+X01fdjsgfQorICAKKyAgICAgIHBvaW50ZXIKKyAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAgeyByZXR1cm4gJnRoaXMtPl9NX2N1cl9ub2RlLT5fTV92OyB9CisKKyAgICAgIF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcisrKCkKKyAgICAgIHsgCisJdGhpcy0+X01faW5jcigpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyAgCisgICAgICBfSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsgCisJX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvciBfX3RtcCgqdGhpcyk7CisJdGhpcy0+X01faW5jcigpOworCXJldHVybiBfX3RtcDsKKyAgICAgIH0KKyAgICB9OworCisKKyAgLy8gTWFueSBvZiBjbGFzcyB0ZW1wbGF0ZSBfSGFzaHRhYmxlJ3MgdGVtcGxhdGUgcGFyYW1ldGVycyBhcmUgcG9saWN5CisgIC8vIGNsYXNzZXMuICBUaGVzZSBhcmUgZGVmYXVsdHMgZm9yIHRoZSBwb2xpY2llcy4KKworICAvLyBEZWZhdWx0IHJhbmdlIGhhc2hpbmcgZnVuY3Rpb246IHVzZSBkaXZpc2lvbiB0byBmb2xkIGEgbGFyZ2UgbnVtYmVyCisgIC8vIGludG8gdGhlIHJhbmdlIFswLCBOKS4KKyAgc3RydWN0IF9Nb2RfcmFuZ2VfaGFzaGluZworICB7CisgICAgdHlwZWRlZiBzdGQ6OnNpemVfdCBmaXJzdF9hcmd1bWVudF90eXBlOworICAgIHR5cGVkZWYgc3RkOjpzaXplX3Qgc2Vjb25kX2FyZ3VtZW50X3R5cGU7CisgICAgdHlwZWRlZiBzdGQ6OnNpemVfdCByZXN1bHRfdHlwZTsKKworICAgIHJlc3VsdF90eXBlCisgICAgb3BlcmF0b3IoKShmaXJzdF9hcmd1bWVudF90eXBlIF9fbnVtLCBzZWNvbmRfYXJndW1lbnRfdHlwZSBfX2RlbikgY29uc3QKKyAgICB7IHJldHVybiBfX251bSAlIF9fZGVuOyB9CisgIH07CisKKyAgLy8gRGVmYXVsdCByYW5nZWQgaGFzaCBmdW5jdGlvbiBILiAgSW4gcHJpbmNpcGxlIGl0IHNob3VsZCBiZSBhCisgIC8vIGZ1bmN0aW9uIG9iamVjdCBjb21wb3NlZCBmcm9tIG9iamVjdHMgb2YgdHlwZSBIMSBhbmQgSDIgc3VjaCB0aGF0CisgIC8vIGgoaywgTikgPSBoMihoMShrKSwgTiksIGJ1dCB0aGF0IHdvdWxkIG1lYW4gbWFraW5nIGV4dHJhIGNvcGllcyBvZgorICAvLyBoMSBhbmQgaDIuICBTbyBpbnN0ZWFkIHdlJ2xsIGp1c3QgdXNlIGEgdGFnIHRvIHRlbGwgY2xhc3MgdGVtcGxhdGUKKyAgLy8gaGFzaHRhYmxlIHRvIGRvIHRoYXQgY29tcG9zaXRpb24uCisgIHN0cnVjdCBfRGVmYXVsdF9yYW5nZWRfaGFzaCB7IH07CisKKyAgLy8gRGVmYXVsdCB2YWx1ZSBmb3IgcmVoYXNoIHBvbGljeS4gIEJ1Y2tldCBzaXplIGlzICh1c3VhbGx5KSB0aGUKKyAgLy8gc21hbGxlc3QgcHJpbWUgdGhhdCBrZWVwcyB0aGUgbG9hZCBmYWN0b3Igc21hbGwgZW5vdWdoLgorICBzdHJ1Y3QgX1ByaW1lX3JlaGFzaF9wb2xpY3kKKyAgeworICAgIF9QcmltZV9yZWhhc2hfcG9saWN5KGZsb2F0IF9feiA9IDEuMCkKKyAgICA6IF9NX21heF9sb2FkX2ZhY3RvcihfX3opLCBfTV9ncm93dGhfZmFjdG9yKDIuZiksIF9NX25leHRfcmVzaXplKDApIHsgfQorCisgICAgZmxvYXQKKyAgICBtYXhfbG9hZF9mYWN0b3IoKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX21heF9sb2FkX2ZhY3RvcjsgfSAgICAgIAorCisgICAgLy8gUmV0dXJuIGEgYnVja2V0IHNpemUgbm8gc21hbGxlciB0aGFuIG4uCisgICAgc3RkOjpzaXplX3QKKyAgICBfTV9uZXh0X2JrdChzdGQ6OnNpemVfdCBfX24pIGNvbnN0OworICAgIAorICAgIC8vIFJldHVybiBhIGJ1Y2tldCBjb3VudCBhcHByb3ByaWF0ZSBmb3IgbiBlbGVtZW50cworICAgIHN0ZDo6c2l6ZV90CisgICAgX01fYmt0X2Zvcl9lbGVtZW50cyhzdGQ6OnNpemVfdCBfX24pIGNvbnN0OworICAgIAorICAgIC8vIF9fbl9ia3QgaXMgY3VycmVudCBidWNrZXQgY291bnQsIF9fbl9lbHQgaXMgY3VycmVudCBlbGVtZW50IGNvdW50LAorICAgIC8vIGFuZCBfX25faW5zIGlzIG51bWJlciBvZiBlbGVtZW50cyB0byBiZSBpbnNlcnRlZC4gIERvIHdlIG5lZWQgdG8KKyAgICAvLyBpbmNyZWFzZSBidWNrZXQgY291bnQ/ICBJZiBzbywgcmV0dXJuIG1ha2VfcGFpcih0cnVlLCBuKSwgd2hlcmUgbgorICAgIC8vIGlzIHRoZSBuZXcgYnVja2V0IGNvdW50LiAgSWYgbm90LCByZXR1cm4gbWFrZV9wYWlyKGZhbHNlLCAwKS4KKyAgICBzdGQ6OnBhaXI8Ym9vbCwgc3RkOjpzaXplX3Q+CisgICAgX01fbmVlZF9yZWhhc2goc3RkOjpzaXplX3QgX19uX2JrdCwgc3RkOjpzaXplX3QgX19uX2VsdCwKKwkJICAgc3RkOjpzaXplX3QgX19uX2lucykgY29uc3Q7CisKKyAgICBlbnVtIHsgX1Nfbl9wcmltZXMgPSBzaXplb2YodW5zaWduZWQgbG9uZykgIT0gOCA/IDI1NiA6IDI1NiArIDQ4IH07CisKKyAgICBmbG9hdCAgICAgICAgICAgICAgICBfTV9tYXhfbG9hZF9mYWN0b3I7CisgICAgZmxvYXQgICAgICAgICAgICAgICAgX01fZ3Jvd3RoX2ZhY3RvcjsKKyAgICBtdXRhYmxlIHN0ZDo6c2l6ZV90ICBfTV9uZXh0X3Jlc2l6ZTsKKyAgfTsKKworICBleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBfX3ByaW1lX2xpc3RbXTsKKworICAvLyBYWFggVGhpcyBpcyBhIGhhY2suICBUaGVyZSdzIG5vIGdvb2QgcmVhc29uIGZvciBhbnkgb2YKKyAgLy8gX1ByaW1lX3JlaGFzaF9wb2xpY3kncyBtZW1iZXIgZnVuY3Rpb25zIHRvIGJlIGlubGluZS4gIAorCisgIC8vIFJldHVybiBhIHByaW1lIG5vIHNtYWxsZXIgdGhhbiBuLgorICBpbmxpbmUgc3RkOjpzaXplX3QKKyAgX1ByaW1lX3JlaGFzaF9wb2xpY3k6OgorICBfTV9uZXh0X2JrdChzdGQ6OnNpemVfdCBfX24pIGNvbnN0CisgIHsKKyAgICBjb25zdCB1bnNpZ25lZCBsb25nKiBfX3AgPSBzdGQ6Omxvd2VyX2JvdW5kKF9fcHJpbWVfbGlzdCwgX19wcmltZV9saXN0CisJCQkJCQkrIF9TX25fcHJpbWVzLCBfX24pOworICAgIF9NX25leHRfcmVzaXplID0gCisgICAgICBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oX19idWlsdGluX2NlaWwoKl9fcCAqIF9NX21heF9sb2FkX2ZhY3RvcikpOworICAgIHJldHVybiAqX19wOworICB9CisKKyAgLy8gUmV0dXJuIHRoZSBzbWFsbGVzdCBwcmltZSBwIHN1Y2ggdGhhdCBhbHBoYSBwID49IG4sIHdoZXJlIGFscGhhCisgIC8vIGlzIHRoZSBsb2FkIGZhY3Rvci4KKyAgaW5saW5lIHN0ZDo6c2l6ZV90CisgIF9QcmltZV9yZWhhc2hfcG9saWN5OjoKKyAgX01fYmt0X2Zvcl9lbGVtZW50cyhzdGQ6OnNpemVfdCBfX24pIGNvbnN0CisgIHsKKyAgICBjb25zdCBmbG9hdCBfX21pbl9ia3RzID0gX19uIC8gX01fbWF4X2xvYWRfZmFjdG9yOworICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcqIF9fcCA9IHN0ZDo6bG93ZXJfYm91bmQoX19wcmltZV9saXN0LCBfX3ByaW1lX2xpc3QKKwkJCQkJCSsgX1Nfbl9wcmltZXMsIF9fbWluX2JrdHMpOworICAgIF9NX25leHRfcmVzaXplID0KKyAgICAgIHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PihfX2J1aWx0aW5fY2VpbCgqX19wICogX01fbWF4X2xvYWRfZmFjdG9yKSk7CisgICAgcmV0dXJuICpfX3A7CisgIH0KKworICAvLyBGaW5kcyB0aGUgc21hbGxlc3QgcHJpbWUgcCBzdWNoIHRoYXQgYWxwaGEgcCA+IF9fbl9lbHQgKyBfX25faW5zLgorICAvLyBJZiBwID4gX19uX2JrdCwgcmV0dXJuIG1ha2VfcGFpcih0cnVlLCBwKTsgb3RoZXJ3aXNlIHJldHVybgorICAvLyBtYWtlX3BhaXIoZmFsc2UsIDApLiAgSW4gcHJpbmNpcGxlIHRoaXMgaXNuJ3QgdmVyeSBkaWZmZXJlbnQgZnJvbSAKKyAgLy8gX01fYmt0X2Zvcl9lbGVtZW50cy4KKworICAvLyBUaGUgb25seSB0cmlja3kgcGFydCBpcyB0aGF0IHdlJ3JlIGNhY2hpbmcgdGhlIGVsZW1lbnQgY291bnQgYXQKKyAgLy8gd2hpY2ggd2UgbmVlZCB0byByZWhhc2gsIHNvIHdlIGRvbid0IGhhdmUgdG8gZG8gYSBmbG9hdGluZy1wb2ludAorICAvLyBtdWx0aXBseSBmb3IgZXZlcnkgaW5zZXJ0aW9uLgorCisgIGlubGluZSBzdGQ6OnBhaXI8Ym9vbCwgc3RkOjpzaXplX3Q+CisgIF9QcmltZV9yZWhhc2hfcG9saWN5OjoKKyAgX01fbmVlZF9yZWhhc2goc3RkOjpzaXplX3QgX19uX2JrdCwgc3RkOjpzaXplX3QgX19uX2VsdCwKKwkJIHN0ZDo6c2l6ZV90IF9fbl9pbnMpIGNvbnN0CisgIHsKKyAgICBpZiAoX19uX2VsdCArIF9fbl9pbnMgPiBfTV9uZXh0X3Jlc2l6ZSkKKyAgICAgIHsKKwlmbG9hdCBfX21pbl9ia3RzID0gKChmbG9hdChfX25faW5zKSArIGZsb2F0KF9fbl9lbHQpKQorCQkJICAgIC8gX01fbWF4X2xvYWRfZmFjdG9yKTsKKwlpZiAoX19taW5fYmt0cyA+IF9fbl9ia3QpCisJICB7CisJICAgIF9fbWluX2JrdHMgPSBzdGQ6Om1heChfX21pbl9ia3RzLCBfTV9ncm93dGhfZmFjdG9yICogX19uX2JrdCk7CisJICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcqIF9fcCA9CisJICAgICAgc3RkOjpsb3dlcl9ib3VuZChfX3ByaW1lX2xpc3QsIF9fcHJpbWVfbGlzdCArIF9TX25fcHJpbWVzLAorCQkJICAgICAgIF9fbWluX2JrdHMpOworCSAgICBfTV9uZXh0X3Jlc2l6ZSA9IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PgorCSAgICAgIChfX2J1aWx0aW5fY2VpbCgqX19wICogX01fbWF4X2xvYWRfZmFjdG9yKSk7CisJICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcih0cnVlLCAqX19wKTsKKwkgIH0KKwllbHNlIAorCSAgeworCSAgICBfTV9uZXh0X3Jlc2l6ZSA9IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PgorCSAgICAgIChfX2J1aWx0aW5fY2VpbChfX25fYmt0ICogX01fbWF4X2xvYWRfZmFjdG9yKSk7CisJICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihmYWxzZSwgMCk7CisJICB9CisgICAgICB9CisgICAgZWxzZQorICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGZhbHNlLCAwKTsKKyAgfQorCisgIC8vIEJhc2UgY2xhc3NlcyBmb3Igc3RkOjpfSGFzaHRhYmxlLiAgV2UgZGVmaW5lIHRoZXNlIGJhc2UgY2xhc3NlcworICAvLyBiZWNhdXNlIGluIHNvbWUgY2FzZXMgd2Ugd2FudCB0byBkbyBkaWZmZXJlbnQgdGhpbmdzIGRlcGVuZGluZworICAvLyBvbiB0aGUgdmFsdWUgb2YgYSBwb2xpY3kgY2xhc3MuICBJbiBzb21lIGNhc2VzIHRoZSBwb2xpY3kgY2xhc3MKKyAgLy8gYWZmZWN0cyB3aGljaCBtZW1iZXIgZnVuY3Rpb25zIGFuZCBuZXN0ZWQgdHlwZWRlZnMgYXJlIGRlZmluZWQ7CisgIC8vIHdlIGhhbmRsZSB0aGF0IGJ5IHNwZWNpYWxpemluZyBiYXNlIGNsYXNzIHRlbXBsYXRlcy4gIFNldmVyYWwgb2YKKyAgLy8gdGhlIGJhc2UgY2xhc3MgdGVtcGxhdGVzIG5lZWQgdG8gYWNjZXNzIG90aGVyIG1lbWJlcnMgb2YgY2xhc3MKKyAgLy8gdGVtcGxhdGUgX0hhc2h0YWJsZSwgc28gd2UgdXNlIHRoZSAiY3VyaW91c2x5IHJlY3VycmluZyB0ZW1wbGF0ZQorICAvLyBwYXR0ZXJuIiBmb3IgdGhlbS4KKworICAvLyBjbGFzcyB0ZW1wbGF0ZSBfTWFwX2Jhc2UuICBJZiB0aGUgaGFzaHRhYmxlIGhhcyBhIHZhbHVlIHR5cGUgb2YKKyAgLy8gdGhlIGZvcm0gcGFpcjxUMSwgVDI+IGFuZCBhIGtleSBleHRyYWN0aW9uIHBvbGljeSB0aGF0IHJldHVybnMgdGhlCisgIC8vIGZpcnN0IHBhcnQgb2YgdGhlIHBhaXIsIHRoZSBoYXNodGFibGUgZ2V0cyBhIG1hcHBlZF90eXBlIHR5cGVkZWYuCisgIC8vIElmIGl0IHNhdGlzZmllcyB0aG9zZSBjcml0ZXJpYSBhbmQgYWxzbyBoYXMgdW5pcXVlIGtleXMsIHRoZW4gaXQKKyAgLy8gYWxzbyBnZXRzIGFuIG9wZXJhdG9yW10uICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCB0eXBlbmFtZSBfRXgsIGJvb2wgX191bmlxdWUsCisJICAgdHlwZW5hbWUgX0hhc2h0YWJsZT4KKyAgICBzdHJ1Y3QgX01hcF9iYXNlIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfUGFpciwgdHlwZW5hbWUgX0hhc2h0YWJsZT4KKyAgICBzdHJ1Y3QgX01hcF9iYXNlPF9LZXksIF9QYWlyLCBzdGQ6Ol9TZWxlY3Qxc3Q8X1BhaXI+LCBmYWxzZSwgX0hhc2h0YWJsZT4KKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSBtYXBwZWRfdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9QYWlyLCB0eXBlbmFtZSBfSGFzaHRhYmxlPgorICAgIHN0cnVjdCBfTWFwX2Jhc2U8X0tleSwgX1BhaXIsIHN0ZDo6X1NlbGVjdDFzdDxfUGFpcj4sIHRydWUsIF9IYXNodGFibGU+CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUgbWFwcGVkX3R5cGU7CisKKyAgICAgIG1hcHBlZF90eXBlJgorICAgICAgb3BlcmF0b3JbXShjb25zdCBfS2V5JiBfX2spOworCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUiA3NjEuIHVub3JkZXJlZF9tYXAgbmVlZHMgYW4gYXQoKSBtZW1iZXIgZnVuY3Rpb24uCisgICAgICBtYXBwZWRfdHlwZSYKKyAgICAgIGF0KGNvbnN0IF9LZXkmIF9fayk7CisKKyAgICAgIGNvbnN0IG1hcHBlZF90eXBlJgorICAgICAgYXQoY29uc3QgX0tleSYgX19rKSBjb25zdDsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9QYWlyLCB0eXBlbmFtZSBfSGFzaHRhYmxlPgorICAgIHR5cGVuYW1lIF9NYXBfYmFzZTxfS2V5LCBfUGFpciwgc3RkOjpfU2VsZWN0MXN0PF9QYWlyPiwKKwkJICAgICAgIHRydWUsIF9IYXNodGFibGU+OjptYXBwZWRfdHlwZSYKKyAgICBfTWFwX2Jhc2U8X0tleSwgX1BhaXIsIHN0ZDo6X1NlbGVjdDFzdDxfUGFpcj4sIHRydWUsIF9IYXNodGFibGU+OjoKKyAgICBvcGVyYXRvcltdKGNvbnN0IF9LZXkmIF9faykKKyAgICB7CisgICAgICBfSGFzaHRhYmxlKiBfX2ggPSBzdGF0aWNfY2FzdDxfSGFzaHRhYmxlKj4odGhpcyk7CisgICAgICB0eXBlbmFtZSBfSGFzaHRhYmxlOjpfSGFzaF9jb2RlX3R5cGUgX19jb2RlID0gX19oLT5fTV9oYXNoX2NvZGUoX19rKTsKKyAgICAgIHN0ZDo6c2l6ZV90IF9fbiA9IF9faC0+X01fYnVja2V0X2luZGV4KF9faywgX19jb2RlLAorCQkJCQkgICAgIF9faC0+X01fYnVja2V0X2NvdW50KTsKKworICAgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTo6X05vZGUqIF9fcCA9CisJX19oLT5fTV9maW5kX25vZGUoX19oLT5fTV9idWNrZXRzW19fbl0sIF9faywgX19jb2RlKTsKKyAgICAgIGlmICghX19wKQorCXJldHVybiBfX2gtPl9NX2luc2VydF9idWNrZXQoc3RkOjptYWtlX3BhaXIoX19rLCBtYXBwZWRfdHlwZSgpKSwKKwkJCQkgICAgIF9fbiwgX19jb2RlKS0+c2Vjb25kOworICAgICAgcmV0dXJuIChfX3AtPl9NX3YpLnNlY29uZDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1BhaXIsIHR5cGVuYW1lIF9IYXNodGFibGU+CisgICAgdHlwZW5hbWUgX01hcF9iYXNlPF9LZXksIF9QYWlyLCBzdGQ6Ol9TZWxlY3Qxc3Q8X1BhaXI+LAorCQkgICAgICAgdHJ1ZSwgX0hhc2h0YWJsZT46Om1hcHBlZF90eXBlJgorICAgIF9NYXBfYmFzZTxfS2V5LCBfUGFpciwgc3RkOjpfU2VsZWN0MXN0PF9QYWlyPiwgdHJ1ZSwgX0hhc2h0YWJsZT46OgorICAgIGF0KGNvbnN0IF9LZXkmIF9faykKKyAgICB7CisgICAgICBfSGFzaHRhYmxlKiBfX2ggPSBzdGF0aWNfY2FzdDxfSGFzaHRhYmxlKj4odGhpcyk7CisgICAgICB0eXBlbmFtZSBfSGFzaHRhYmxlOjpfSGFzaF9jb2RlX3R5cGUgX19jb2RlID0gX19oLT5fTV9oYXNoX2NvZGUoX19rKTsKKyAgICAgIHN0ZDo6c2l6ZV90IF9fbiA9IF9faC0+X01fYnVja2V0X2luZGV4KF9faywgX19jb2RlLAorCQkJCQkgICAgIF9faC0+X01fYnVja2V0X2NvdW50KTsKKworICAgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTo6X05vZGUqIF9fcCA9CisJX19oLT5fTV9maW5kX25vZGUoX19oLT5fTV9idWNrZXRzW19fbl0sIF9faywgX19jb2RlKTsKKyAgICAgIGlmICghX19wKQorCV9fdGhyb3dfb3V0X29mX3JhbmdlKF9fTigiX01hcF9iYXNlOjphdCIpKTsKKyAgICAgIHJldHVybiAoX19wLT5fTV92KS5zZWNvbmQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9QYWlyLCB0eXBlbmFtZSBfSGFzaHRhYmxlPgorICAgIGNvbnN0IHR5cGVuYW1lIF9NYXBfYmFzZTxfS2V5LCBfUGFpciwgc3RkOjpfU2VsZWN0MXN0PF9QYWlyPiwKKwkJCSAgICAgdHJ1ZSwgX0hhc2h0YWJsZT46Om1hcHBlZF90eXBlJgorICAgIF9NYXBfYmFzZTxfS2V5LCBfUGFpciwgc3RkOjpfU2VsZWN0MXN0PF9QYWlyPiwgdHJ1ZSwgX0hhc2h0YWJsZT46OgorICAgIGF0KGNvbnN0IF9LZXkmIF9faykgY29uc3QKKyAgICB7CisgICAgICBjb25zdCBfSGFzaHRhYmxlKiBfX2ggPSBzdGF0aWNfY2FzdDxjb25zdCBfSGFzaHRhYmxlKj4odGhpcyk7CisgICAgICB0eXBlbmFtZSBfSGFzaHRhYmxlOjpfSGFzaF9jb2RlX3R5cGUgX19jb2RlID0gX19oLT5fTV9oYXNoX2NvZGUoX19rKTsKKyAgICAgIHN0ZDo6c2l6ZV90IF9fbiA9IF9faC0+X01fYnVja2V0X2luZGV4KF9faywgX19jb2RlLAorCQkJCQkgICAgIF9faC0+X01fYnVja2V0X2NvdW50KTsKKworICAgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTo6X05vZGUqIF9fcCA9CisJX19oLT5fTV9maW5kX25vZGUoX19oLT5fTV9idWNrZXRzW19fbl0sIF9faywgX19jb2RlKTsKKyAgICAgIGlmICghX19wKQorCV9fdGhyb3dfb3V0X29mX3JhbmdlKF9fTigiX01hcF9iYXNlOjphdCIpKTsKKyAgICAgIHJldHVybiAoX19wLT5fTV92KS5zZWNvbmQ7CisgICAgfQorCisgIC8vIGNsYXNzIHRlbXBsYXRlIF9SZWhhc2hfYmFzZS4gIEdpdmUgaGFzaHRhYmxlIHRoZSBtYXhfbG9hZF9mYWN0b3IKKyAgLy8gZnVuY3Rpb25zIGFuZCByZXNlcnZlIGlmZiB0aGUgcmVoYXNoIHBvbGljeSBpcyBfUHJpbWVfcmVoYXNoX3BvbGljeS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlaGFzaFBvbGljeSwgdHlwZW5hbWUgX0hhc2h0YWJsZT4KKyAgICBzdHJ1Y3QgX1JlaGFzaF9iYXNlIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSGFzaHRhYmxlPgorICAgIHN0cnVjdCBfUmVoYXNoX2Jhc2U8X1ByaW1lX3JlaGFzaF9wb2xpY3ksIF9IYXNodGFibGU+CisgICAgeworICAgICAgZmxvYXQKKyAgICAgIG1heF9sb2FkX2ZhY3RvcigpIGNvbnN0CisgICAgICB7CisJY29uc3QgX0hhc2h0YWJsZSogX190aGlzID0gc3RhdGljX2Nhc3Q8Y29uc3QgX0hhc2h0YWJsZSo+KHRoaXMpOworCXJldHVybiBfX3RoaXMtPl9fcmVoYXNoX3BvbGljeSgpLm1heF9sb2FkX2ZhY3RvcigpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBtYXhfbG9hZF9mYWN0b3IoZmxvYXQgX196KQorICAgICAgeworCV9IYXNodGFibGUqIF9fdGhpcyA9IHN0YXRpY19jYXN0PF9IYXNodGFibGUqPih0aGlzKTsKKwlfX3RoaXMtPl9fcmVoYXNoX3BvbGljeShfUHJpbWVfcmVoYXNoX3BvbGljeShfX3opKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgcmVzZXJ2ZShzdGQ6OnNpemVfdCBfX24pCisgICAgICB7CisJX0hhc2h0YWJsZSogX190aGlzID0gc3RhdGljX2Nhc3Q8X0hhc2h0YWJsZSo+KHRoaXMpOworCV9fdGhpcy0+cmVoYXNoKF9fYnVpbHRpbl9jZWlsKF9fbiAvIG1heF9sb2FkX2ZhY3RvcigpKSk7CisgICAgICB9CisgICAgfTsKKworICAvLyBDbGFzcyB0ZW1wbGF0ZSBfSGFzaF9jb2RlX2Jhc2UuICBFbmNhcHN1bGF0ZXMgdHdvIHBvbGljeSBpc3N1ZXMgdGhhdAorICAvLyBhcmVuJ3QgcXVpdGUgb3J0aG9nb25hbC4KKyAgLy8gICAoMSkgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB1c2luZyBhIHJhbmdlZCBoYXNoIGZ1bmN0aW9uIGFuZCB1c2luZworICAvLyAgICAgICB0aGUgY29tYmluYXRpb24gb2YgYSBoYXNoIGZ1bmN0aW9uIGFuZCBhIHJhbmdlLWhhc2hpbmcgZnVuY3Rpb24uCisgIC8vICAgICAgIEluIHRoZSBmb3JtZXIgY2FzZSB3ZSBkb24ndCBoYXZlIHN1Y2ggdGhpbmdzIGFzIGhhc2ggY29kZXMsIHNvCisgIC8vICAgICAgIHdlIGhhdmUgYSBkdW1teSB0eXBlIGFzIHBsYWNlaG9sZGVyLgorICAvLyAgICgyKSBXaGV0aGVyIG9yIG5vdCB3ZSBjYWNoZSBoYXNoIGNvZGVzLiAgQ2FjaGluZyBoYXNoIGNvZGVzIGlzCisgIC8vICAgICAgIG1lYW5pbmdsZXNzIGlmIHdlIGhhdmUgYSByYW5nZWQgaGFzaCBmdW5jdGlvbi4KKyAgLy8gV2UgYWxzbyBwdXQgdGhlIGtleSBleHRyYWN0aW9uIGFuZCBlcXVhbGl0eSBjb21wYXJpc29uIGZ1bmN0aW9uIAorICAvLyBvYmplY3RzIGhlcmUsIGZvciBjb252ZW5pZW5jZS4KKyAgCisgIC8vIFByaW1hcnkgdGVtcGxhdGU6IHVudXNlZCBleGNlcHQgYXMgYSBob29rIGZvciBzcGVjaWFsaXphdGlvbnMuICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLAorCSAgIGJvb2wgX19jYWNoZV9oYXNoX2NvZGU+CisgICAgc3RydWN0IF9IYXNoX2NvZGVfYmFzZTsKKworICAvLyBTcGVjaWFsaXphdGlvbjogcmFuZ2VkIGhhc2ggZnVuY3Rpb24sIG5vIGNhY2hpbmcgaGFzaCBjb2Rlcy4gIEgxCisgIC8vIGFuZCBIMiBhcmUgcHJvdmlkZWQgYnV0IGlnbm9yZWQuICBXZSBkZWZpbmUgYSBkdW1teSBoYXNoIGNvZGUgdHlwZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoPgorICAgIHN0cnVjdCBfSGFzaF9jb2RlX2Jhc2U8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwgX0VxdWFsLCBfSDEsIF9IMiwKKwkJCSAgIF9IYXNoLCBmYWxzZT4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgX0hhc2hfY29kZV9iYXNlKGNvbnN0IF9FeHRyYWN0S2V5JiBfX2V4LCBjb25zdCBfRXF1YWwmIF9fZXEsCisJCSAgICAgIGNvbnN0IF9IMSYsIGNvbnN0IF9IMiYsIGNvbnN0IF9IYXNoJiBfX2gpCisgICAgICA6IF9NX2V4dHJhY3QoX19leCksIF9NX2VxKF9fZXEpLCBfTV9yYW5nZWRfaGFzaChfX2gpIHsgfQorCisgICAgICB0eXBlZGVmIHZvaWQqIF9IYXNoX2NvZGVfdHlwZTsKKyAgCisgICAgICBfSGFzaF9jb2RlX3R5cGUKKyAgICAgIF9NX2hhc2hfY29kZShjb25zdCBfS2V5JiBfX2tleSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIDA7IH0KKyAgCisgICAgICBzdGQ6OnNpemVfdAorICAgICAgX01fYnVja2V0X2luZGV4KGNvbnN0IF9LZXkmIF9faywgX0hhc2hfY29kZV90eXBlLAorCQkgICAgICBzdGQ6OnNpemVfdCBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9yYW5nZWRfaGFzaChfX2ssIF9fbik7IH0KKworICAgICAgc3RkOjpzaXplX3QKKyAgICAgIF9NX2J1Y2tldF9pbmRleChjb25zdCBfSGFzaF9ub2RlPF9WYWx1ZSwgZmFsc2U+KiBfX3AsCisJCSAgICAgIHN0ZDo6c2l6ZV90IF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3JhbmdlZF9oYXNoKF9NX2V4dHJhY3QoX19wLT5fTV92KSwgX19uKTsgfQorICAKKyAgICAgIGJvb2wKKyAgICAgIF9NX2NvbXBhcmUoY29uc3QgX0tleSYgX19rLCBfSGFzaF9jb2RlX3R5cGUsCisJCSBfSGFzaF9ub2RlPF9WYWx1ZSwgZmFsc2U+KiBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9lcShfX2ssIF9NX2V4dHJhY3QoX19uLT5fTV92KSk7IH0KKworICAgICAgdm9pZAorICAgICAgX01fc3RvcmVfY29kZShfSGFzaF9ub2RlPF9WYWx1ZSwgZmFsc2U+KiwgX0hhc2hfY29kZV90eXBlKSBjb25zdAorICAgICAgeyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2NvcHlfY29kZShfSGFzaF9ub2RlPF9WYWx1ZSwgZmFsc2U+KiwKKwkJICAgY29uc3QgX0hhc2hfbm9kZTxfVmFsdWUsIGZhbHNlPiopIGNvbnN0CisgICAgICB7IH0KKyAgICAgIAorICAgICAgdm9pZAorICAgICAgX01fc3dhcChfSGFzaF9jb2RlX2Jhc2UmIF9feCkKKyAgICAgIHsKKwlzdGQ6OnN3YXAoX01fZXh0cmFjdCwgX194Ll9NX2V4dHJhY3QpOworCXN0ZDo6c3dhcChfTV9lcSwgX194Ll9NX2VxKTsKKwlzdGQ6OnN3YXAoX01fcmFuZ2VkX2hhc2gsIF9feC5fTV9yYW5nZWRfaGFzaCk7CisgICAgICB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfRXh0cmFjdEtleSAgX01fZXh0cmFjdDsKKyAgICAgIF9FcXVhbCAgICAgICBfTV9lcTsKKyAgICAgIF9IYXNoICAgICAgICBfTV9yYW5nZWRfaGFzaDsKKyAgICB9OworCisKKyAgLy8gTm8gc3BlY2lhbGl6YXRpb24gZm9yIHJhbmdlZCBoYXNoIGZ1bmN0aW9uIHdoaWxlIGNhY2hpbmcgaGFzaCBjb2Rlcy4KKyAgLy8gVGhhdCBjb21iaW5hdGlvbiBpcyBtZWFuaW5nbGVzcywgYW5kIHRyeWluZyB0byBkbyBpdCBpcyBhbiBlcnJvci4KKyAgCisgIAorICAvLyBTcGVjaWFsaXphdGlvbjogcmFuZ2VkIGhhc2ggZnVuY3Rpb24sIGNhY2hlIGhhc2ggY29kZXMuICBUaGlzCisgIC8vIGNvbWJpbmF0aW9uIGlzIG1lYW5pbmdsZXNzLCBzbyB3ZSBwcm92aWRlIG9ubHkgYSBkZWNsYXJhdGlvbgorICAvLyBhbmQgbm8gZGVmaW5pdGlvbi4gIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2g+CisgICAgc3RydWN0IF9IYXNoX2NvZGVfYmFzZTxfS2V5LCBfVmFsdWUsIF9FeHRyYWN0S2V5LCBfRXF1YWwsIF9IMSwgX0gyLAorCQkJICAgX0hhc2gsIHRydWU+OworCisgIC8vIFNwZWNpYWxpemF0aW9uOiBoYXNoIGZ1bmN0aW9uIGFuZCByYW5nZS1oYXNoaW5nIGZ1bmN0aW9uLCBubworICAvLyBjYWNoaW5nIG9mIGhhc2ggY29kZXMuICBIIGlzIHByb3ZpZGVkIGJ1dCBpZ25vcmVkLiAgUHJvdmlkZXMKKyAgLy8gdHlwZWRlZiBhbmQgYWNjZXNzb3IgcmVxdWlyZWQgYnkgVFIxLiAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyPgorICAgIHN0cnVjdCBfSGFzaF9jb2RlX2Jhc2U8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwgX0VxdWFsLCBfSDEsIF9IMiwKKwkJCSAgIF9EZWZhdWx0X3JhbmdlZF9oYXNoLCBmYWxzZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9IMSBoYXNoZXI7CisKKyAgICAgIGhhc2hlcgorICAgICAgaGFzaF9mdW5jdGlvbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oMTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgX0hhc2hfY29kZV9iYXNlKGNvbnN0IF9FeHRyYWN0S2V5JiBfX2V4LCBjb25zdCBfRXF1YWwmIF9fZXEsCisJCSAgICAgIGNvbnN0IF9IMSYgX19oMSwgY29uc3QgX0gyJiBfX2gyLAorCQkgICAgICBjb25zdCBfRGVmYXVsdF9yYW5nZWRfaGFzaCYpCisgICAgICA6IF9NX2V4dHJhY3QoX19leCksIF9NX2VxKF9fZXEpLCBfTV9oMShfX2gxKSwgX01faDIoX19oMikgeyB9CisKKyAgICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgX0hhc2hfY29kZV90eXBlOworCisgICAgICBfSGFzaF9jb2RlX3R5cGUKKyAgICAgIF9NX2hhc2hfY29kZShjb25zdCBfS2V5JiBfX2spIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oMShfX2spOyB9CisgICAgICAKKyAgICAgIHN0ZDo6c2l6ZV90CisgICAgICBfTV9idWNrZXRfaW5kZXgoY29uc3QgX0tleSYsIF9IYXNoX2NvZGVfdHlwZSBfX2MsCisJCSAgICAgIHN0ZDo6c2l6ZV90IF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2gyKF9fYywgX19uKTsgfQorCisgICAgICBzdGQ6OnNpemVfdAorICAgICAgX01fYnVja2V0X2luZGV4KGNvbnN0IF9IYXNoX25vZGU8X1ZhbHVlLCBmYWxzZT4qIF9fcCwKKwkJICAgICAgc3RkOjpzaXplX3QgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faDIoX01faDEoX01fZXh0cmFjdChfX3AtPl9NX3YpKSwgX19uKTsgfQorCisgICAgICBib29sCisgICAgICBfTV9jb21wYXJlKGNvbnN0IF9LZXkmIF9faywgX0hhc2hfY29kZV90eXBlLAorCQkgX0hhc2hfbm9kZTxfVmFsdWUsIGZhbHNlPiogX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZXEoX19rLCBfTV9leHRyYWN0KF9fbi0+X01fdikpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3N0b3JlX2NvZGUoX0hhc2hfbm9kZTxfVmFsdWUsIGZhbHNlPiosIF9IYXNoX2NvZGVfdHlwZSkgY29uc3QKKyAgICAgIHsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9jb3B5X2NvZGUoX0hhc2hfbm9kZTxfVmFsdWUsIGZhbHNlPiosCisJCSAgIGNvbnN0IF9IYXNoX25vZGU8X1ZhbHVlLCBmYWxzZT4qKSBjb25zdAorICAgICAgeyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3N3YXAoX0hhc2hfY29kZV9iYXNlJiBfX3gpCisgICAgICB7CisJc3RkOjpzd2FwKF9NX2V4dHJhY3QsIF9feC5fTV9leHRyYWN0KTsKKwlzdGQ6OnN3YXAoX01fZXEsIF9feC5fTV9lcSk7CisJc3RkOjpzd2FwKF9NX2gxLCBfX3guX01faDEpOworCXN0ZDo6c3dhcChfTV9oMiwgX194Ll9NX2gyKTsKKyAgICAgIH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIF9FeHRyYWN0S2V5ICBfTV9leHRyYWN0OworICAgICAgX0VxdWFsICAgICAgIF9NX2VxOworICAgICAgX0gxICAgICAgICAgIF9NX2gxOworICAgICAgX0gyICAgICAgICAgIF9NX2gyOworICAgIH07CisKKyAgLy8gU3BlY2lhbGl6YXRpb246IGhhc2ggZnVuY3Rpb24gYW5kIHJhbmdlLWhhc2hpbmcgZnVuY3Rpb24sIAorICAvLyBjYWNoaW5nIGhhc2ggY29kZXMuICBIIGlzIHByb3ZpZGVkIGJ1dCBpZ25vcmVkLiAgUHJvdmlkZXMKKyAgLy8gdHlwZWRlZiBhbmQgYWNjZXNzb3IgcmVxdWlyZWQgYnkgVFIxLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMj4KKyAgICBzdHJ1Y3QgX0hhc2hfY29kZV9iYXNlPF9LZXksIF9WYWx1ZSwgX0V4dHJhY3RLZXksIF9FcXVhbCwgX0gxLCBfSDIsCisJCQkgICBfRGVmYXVsdF9yYW5nZWRfaGFzaCwgdHJ1ZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9IMSBoYXNoZXI7CisgICAgICAKKyAgICAgIGhhc2hlcgorICAgICAgaGFzaF9mdW5jdGlvbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oMTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgX0hhc2hfY29kZV9iYXNlKGNvbnN0IF9FeHRyYWN0S2V5JiBfX2V4LCBjb25zdCBfRXF1YWwmIF9fZXEsCisJCSAgICAgIGNvbnN0IF9IMSYgX19oMSwgY29uc3QgX0gyJiBfX2gyLAorCQkgICAgICBjb25zdCBfRGVmYXVsdF9yYW5nZWRfaGFzaCYpCisgICAgICA6IF9NX2V4dHJhY3QoX19leCksIF9NX2VxKF9fZXEpLCBfTV9oMShfX2gxKSwgX01faDIoX19oMikgeyB9CisKKyAgICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgX0hhc2hfY29kZV90eXBlOworICAKKyAgICAgIF9IYXNoX2NvZGVfdHlwZQorICAgICAgX01faGFzaF9jb2RlKGNvbnN0IF9LZXkmIF9faykgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2gxKF9fayk7IH0KKyAgCisgICAgICBzdGQ6OnNpemVfdAorICAgICAgX01fYnVja2V0X2luZGV4KGNvbnN0IF9LZXkmLCBfSGFzaF9jb2RlX3R5cGUgX19jLAorCQkgICAgICBzdGQ6OnNpemVfdCBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oMihfX2MsIF9fbik7IH0KKworICAgICAgc3RkOjpzaXplX3QKKyAgICAgIF9NX2J1Y2tldF9pbmRleChjb25zdCBfSGFzaF9ub2RlPF9WYWx1ZSwgdHJ1ZT4qIF9fcCwKKwkJICAgICAgc3RkOjpzaXplX3QgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faDIoX19wLT5fTV9oYXNoX2NvZGUsIF9fbik7IH0KKworICAgICAgYm9vbAorICAgICAgX01fY29tcGFyZShjb25zdCBfS2V5JiBfX2ssIF9IYXNoX2NvZGVfdHlwZSBfX2MsCisJCSBfSGFzaF9ub2RlPF9WYWx1ZSwgdHJ1ZT4qIF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fYyA9PSBfX24tPl9NX2hhc2hfY29kZSAmJiBfTV9lcShfX2ssIF9NX2V4dHJhY3QoX19uLT5fTV92KSk7IH0KKworICAgICAgdm9pZAorICAgICAgX01fc3RvcmVfY29kZShfSGFzaF9ub2RlPF9WYWx1ZSwgdHJ1ZT4qIF9fbiwgX0hhc2hfY29kZV90eXBlIF9fYykgY29uc3QKKyAgICAgIHsgX19uLT5fTV9oYXNoX2NvZGUgPSBfX2M7IH0KKworICAgICAgdm9pZAorICAgICAgX01fY29weV9jb2RlKF9IYXNoX25vZGU8X1ZhbHVlLCB0cnVlPiogX190bywKKwkJICAgY29uc3QgX0hhc2hfbm9kZTxfVmFsdWUsIHRydWU+KiBfX2Zyb20pIGNvbnN0CisgICAgICB7IF9fdG8tPl9NX2hhc2hfY29kZSA9IF9fZnJvbS0+X01faGFzaF9jb2RlOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3N3YXAoX0hhc2hfY29kZV9iYXNlJiBfX3gpCisgICAgICB7CisJc3RkOjpzd2FwKF9NX2V4dHJhY3QsIF9feC5fTV9leHRyYWN0KTsKKwlzdGQ6OnN3YXAoX01fZXEsIF9feC5fTV9lcSk7CisJc3RkOjpzd2FwKF9NX2gxLCBfX3guX01faDEpOworCXN0ZDo6c3dhcChfTV9oMiwgX194Ll9NX2gyKTsKKyAgICAgIH0KKyAgICAgIAorICAgIHByb3RlY3RlZDoKKyAgICAgIF9FeHRyYWN0S2V5ICBfTV9leHRyYWN0OworICAgICAgX0VxdWFsICAgICAgIF9NX2VxOworICAgICAgX0gxICAgICAgICAgIF9NX2gxOworICAgICAgX0gyICAgICAgICAgIF9NX2gyOworICAgIH07CisKKworICAvLyBDbGFzcyB0ZW1wbGF0ZSBfRXF1YWxpdHlfYmFzZS4gIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyBlcXVhbGl0eQorICAvLyBjb21wYXJpc29uIGZvciB1bm9yZGVyZWQgY29udGFpbmVycywgcGVyIE4zMDY4LCBieSBKb2huIExha29zIGFuZAorICAvLyBQYWJsbyBIYWxwZXJuLiAgQWxnb3JpdGhtaWNhbGx5LCB3ZSBmb2xsb3cgY2xvc2VseSB0aGUgcmVmZXJlbmNlCisgIC8vIGltcGxlbWVudGF0aW9ucyB0aGVyZWluLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRXh0cmFjdEtleSwgYm9vbCBfX3VuaXF1ZV9rZXlzLAorCSAgIHR5cGVuYW1lIF9IYXNodGFibGU+CisgICAgc3RydWN0IF9FcXVhbGl0eV9iYXNlOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfSGFzaHRhYmxlPgorICAgIHN0cnVjdCBfRXF1YWxpdHlfYmFzZTxfRXh0cmFjdEtleSwgdHJ1ZSwgX0hhc2h0YWJsZT4KKyAgICB7CisgICAgICBib29sIF9NX2VxdWFsKGNvbnN0IF9IYXNodGFibGUmKSBjb25zdDsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfSGFzaHRhYmxlPgorICAgIGJvb2wKKyAgICBfRXF1YWxpdHlfYmFzZTxfRXh0cmFjdEtleSwgdHJ1ZSwgX0hhc2h0YWJsZT46OgorICAgIF9NX2VxdWFsKGNvbnN0IF9IYXNodGFibGUmIF9fb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgY29uc3QgX0hhc2h0YWJsZSogX190aGlzID0gc3RhdGljX2Nhc3Q8Y29uc3QgX0hhc2h0YWJsZSo+KHRoaXMpOworCisgICAgICBpZiAoX190aGlzLT5zaXplKCkgIT0gX19vdGhlci5zaXplKCkpCisJcmV0dXJuIGZhbHNlOworCisgICAgICBmb3IgKGF1dG8gX19pdHggPSBfX3RoaXMtPmJlZ2luKCk7IF9faXR4ICE9IF9fdGhpcy0+ZW5kKCk7ICsrX19pdHgpCisJeworCSAgY29uc3QgYXV0byBfX2l0eSA9IF9fb3RoZXIuZmluZChfRXh0cmFjdEtleSgpKCpfX2l0eCkpOworCSAgaWYgKF9faXR5ID09IF9fb3RoZXIuZW5kKCkgfHwgKl9faXR5ICE9ICpfX2l0eCkKKwkgICAgcmV0dXJuIGZhbHNlOworCX0KKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0hhc2h0YWJsZT4KKyAgICBzdHJ1Y3QgX0VxdWFsaXR5X2Jhc2U8X0V4dHJhY3RLZXksIGZhbHNlLCBfSGFzaHRhYmxlPgorICAgIHsKKyAgICAgIGJvb2wgX01fZXF1YWwoY29uc3QgX0hhc2h0YWJsZSYpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VaXRlcmF0b3I+CisgICAgICAgIHN0YXRpYyBib29sCisgICAgICAgIF9TX2lzX3Blcm11dGF0aW9uKF9VaXRlcmF0b3IsIF9VaXRlcmF0b3IsIF9VaXRlcmF0b3IpOworICAgIH07CisKKyAgLy8gU2VlIHN0ZDo6aXNfcGVybXV0YXRpb24gaW4gTjMwNjguCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfSGFzaHRhYmxlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VaXRlcmF0b3I+CisgICAgICBib29sCisgICAgICBfRXF1YWxpdHlfYmFzZTxfRXh0cmFjdEtleSwgZmFsc2UsIF9IYXNodGFibGU+OjoKKyAgICAgIF9TX2lzX3Blcm11dGF0aW9uKF9VaXRlcmF0b3IgX19maXJzdDEsIF9VaXRlcmF0b3IgX19sYXN0MSwKKwkJCV9VaXRlcmF0b3IgX19maXJzdDIpCisgICAgICB7CisJZm9yICg7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCisJICBpZiAoISgqX19maXJzdDEgPT0gKl9fZmlyc3QyKSkKKwkgICAgYnJlYWs7CisKKwlpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKKwkgIHJldHVybiB0cnVlOworCisJX1VpdGVyYXRvciBfX2xhc3QyID0gX19maXJzdDI7CisJc3RkOjphZHZhbmNlKF9fbGFzdDIsIHN0ZDo6ZGlzdGFuY2UoX19maXJzdDEsIF9fbGFzdDEpKTsKKworCWZvciAoX1VpdGVyYXRvciBfX2l0MSA9IF9fZmlyc3QxOyBfX2l0MSAhPSBfX2xhc3QxOyArK19faXQxKQorCSAgeworCSAgICBfVWl0ZXJhdG9yIF9fdG1wID0gIF9fZmlyc3QxOworCSAgICB3aGlsZSAoX190bXAgIT0gX19pdDEgJiYgISgqX190bXAgPT0gKl9faXQxKSkKKwkgICAgICArK19fdG1wOworCisJICAgIC8vIFdlJ3ZlIHNlZW4gdGhpcyBvbmUgYmVmb3JlLgorCSAgICBpZiAoX190bXAgIT0gX19pdDEpCisJICAgICAgY29udGludWU7CisKKwkgICAgc3RkOjpwdHJkaWZmX3QgX19uMiA9IDA7CisJICAgIGZvciAoX190bXAgPSBfX2ZpcnN0MjsgX190bXAgIT0gX19sYXN0MjsgKytfX3RtcCkKKwkgICAgICBpZiAoKl9fdG1wID09ICpfX2l0MSkKKwkJKytfX24yOworCisJICAgIGlmICghX19uMikKKwkgICAgICByZXR1cm4gZmFsc2U7CisKKwkgICAgc3RkOjpwdHJkaWZmX3QgX19uMSA9IDA7CisJICAgIGZvciAoX190bXAgPSBfX2l0MTsgX190bXAgIT0gX19sYXN0MTsgKytfX3RtcCkKKwkgICAgICBpZiAoKl9fdG1wID09ICpfX2l0MSkKKwkJKytfX24xOworCisJICAgIGlmIChfX24xICE9IF9fbjIpCisJICAgICAgcmV0dXJuIGZhbHNlOworCSAgfQorCXJldHVybiB0cnVlOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfSGFzaHRhYmxlPgorICAgIGJvb2wKKyAgICBfRXF1YWxpdHlfYmFzZTxfRXh0cmFjdEtleSwgZmFsc2UsIF9IYXNodGFibGU+OjoKKyAgICBfTV9lcXVhbChjb25zdCBfSGFzaHRhYmxlJiBfX290aGVyKSBjb25zdAorICAgIHsKKyAgICAgIGNvbnN0IF9IYXNodGFibGUqIF9fdGhpcyA9IHN0YXRpY19jYXN0PGNvbnN0IF9IYXNodGFibGUqPih0aGlzKTsKKworICAgICAgaWYgKF9fdGhpcy0+c2l6ZSgpICE9IF9fb3RoZXIuc2l6ZSgpKQorCXJldHVybiBmYWxzZTsKKworICAgICAgZm9yIChhdXRvIF9faXR4ID0gX190aGlzLT5iZWdpbigpOyBfX2l0eCAhPSBfX3RoaXMtPmVuZCgpOykKKwl7CisJICBjb25zdCBhdXRvIF9feHJhbmdlID0gX190aGlzLT5lcXVhbF9yYW5nZShfRXh0cmFjdEtleSgpKCpfX2l0eCkpOworCSAgY29uc3QgYXV0byBfX3lyYW5nZSA9IF9fb3RoZXIuZXF1YWxfcmFuZ2UoX0V4dHJhY3RLZXkoKSgqX19pdHgpKTsKKworCSAgaWYgKHN0ZDo6ZGlzdGFuY2UoX194cmFuZ2UuZmlyc3QsIF9feHJhbmdlLnNlY29uZCkKKwkgICAgICAhPSBzdGQ6OmRpc3RhbmNlKF9feXJhbmdlLmZpcnN0LCBfX3lyYW5nZS5zZWNvbmQpKQorCSAgICByZXR1cm4gZmFsc2U7CisKKwkgIGlmICghX1NfaXNfcGVybXV0YXRpb24oX194cmFuZ2UuZmlyc3QsCisJCQkJIF9feHJhbmdlLnNlY29uZCwKKwkJCQkgX195cmFuZ2UuZmlyc3QpKQorCSAgICByZXR1cm4gZmFsc2U7CisKKwkgIF9faXR4ID0gX194cmFuZ2Uuc2Vjb25kOworCX0KKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30gLy8gbmFtZXNwYWNlIF9fZGV0YWlsCit9CisKKyNlbmRpZiAvLyBfSEFTSFRBQkxFX1BPTElDWV9ICmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvaW5kaXJlY3RfYXJyYXkuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9pbmRpcmVjdF9hcnJheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MjAzOTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvaW5kaXJlY3RfYXJyYXkuaApAQCAtMCwwICsxLDIxMCBAQAorLy8gVGhlIHRlbXBsYXRlIGFuZCBpbmxpbmVzIGZvciB0aGUgLSotIEMrKyAtKi0gaW5kaXJlY3RfYXJyYXkgY2xhc3MuCisKKy8vIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwNCwgMjAwNSwgMjAwOQorLy8gIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmRpcmVjdF9hcnJheS5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKy8vIFdyaXR0ZW4gYnkgR2FicmllbCBEb3MgUmVpcyA8R2FicmllbC5Eb3MtUmVpc0BEUFRNYXRocy5FTlMtQ2FjaGFuLkZyPgorCisjaWZuZGVmIF9JTkRJUkVDVF9BUlJBWV9ICisjZGVmaW5lIF9JTkRJUkVDVF9BUlJBWV9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8qKgorICAgKiBAYWRkdG9ncm91cCBudW1lcmljX2FycmF5cworICAgKiBAeworICAgKi8KKworICAvKioKKyAgICogIEBicmllZiAgUmVmZXJlbmNlIHRvIGFyYml0cmFyeSBzdWJzZXQgb2YgYW4gYXJyYXkuCisgICAqCisgICAqICBBbiBpbmRpcmVjdF9hcnJheSBpcyBhIHJlZmVyZW5jZSB0byB0aGUgYWN0dWFsIGVsZW1lbnRzIG9mIGFuIGFycmF5CisgICAqICBzcGVjaWZpZWQgYnkgYW4gb3JkZXJlZCBhcnJheSBvZiBpbmRpY2VzLiAgVGhlIHdheSB0byBnZXQgYW4KKyAgICogIGluZGlyZWN0X2FycmF5IGlzIHRvIGNhbGwgb3BlcmF0b3JbXSh2YWxhcnJheTxzaXplX3Q+KSBvbiBhIHZhbGFycmF5LgorICAgKiAgVGhlIHJldHVybmVkIGluZGlyZWN0X2FycmF5IHRoZW4gcGVybWl0cyBjYXJyeWluZyBvcGVyYXRpb25zIG91dCBvbiB0aGUKKyAgICogIHJlZmVyZW5jZWQgc3Vic2V0IG9mIGVsZW1lbnRzIGluIHRoZSBvcmlnaW5hbCB2YWxhcnJheS4KKyAgICoKKyAgICogIEZvciBleGFtcGxlLCBpZiBhbiBpbmRpcmVjdF9hcnJheSBpcyBvYnRhaW5lZCB1c2luZyB0aGUgYXJyYXkgKDQsMiwwKSBhcworICAgKiAgYW4gYXJndW1lbnQsIGFuZCB0aGVuIGFzc2lnbmVkIHRvIGFuIGFycmF5IGNvbnRhaW5pbmcgKDEsMiwzKSwgdGhlbiB0aGUKKyAgICogIHVuZGVybHlpbmcgYXJyYXkgd2lsbCBoYXZlIGFycmF5WzBdPT0zLCBhcnJheVsyXT09MiwgYW5kIGFycmF5WzRdPT0xLgorICAgKgorICAgKiAgQHBhcmFtICBUcCAgRWxlbWVudCB0eXBlLgorICAgKi8KKyAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgICBjbGFzcyBpbmRpcmVjdF9hcnJheQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOworCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyNTMuIHZhbGFycmF5IGhlbHBlciBmdW5jdGlvbnMgYXJlIGFsbW9zdCBlbnRpcmVseSB1c2VsZXNzCisKKyAgICAgIC8vLyAgQ29weSBjb25zdHJ1Y3Rvci4gIEJvdGggc2xpY2VzIHJlZmVyIHRvIHRoZSBzYW1lIHVuZGVybHlpbmcgYXJyYXkuCisgICAgICBpbmRpcmVjdF9hcnJheShjb25zdCBpbmRpcmVjdF9hcnJheSYpOworCisgICAgICAvLy8gIEFzc2lnbm1lbnQgb3BlcmF0b3IuICBBc3NpZ25zIGVsZW1lbnRzIHRvIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMKKyAgICAgIC8vLyAgb2YgQGEgYS4KKyAgICAgIGluZGlyZWN0X2FycmF5JiBvcGVyYXRvcj0oY29uc3QgaW5kaXJlY3RfYXJyYXkmKTsKKworICAgICAgLy8vICBBc3NpZ24gc2xpY2UgZWxlbWVudHMgdG8gY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBNdWx0aXBseSBzbGljZSBlbGVtZW50cyBieSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYuCisgICAgICB2b2lkIG9wZXJhdG9yKj0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBEaXZpZGUgc2xpY2UgZWxlbWVudHMgYnkgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvci89KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgTW9kdWxvIHNsaWNlIGVsZW1lbnRzIGJ5IGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdi4KKyAgICAgIHZvaWQgb3BlcmF0b3IlPShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIEFkZCBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYgdG8gc2xpY2UgZWxlbWVudHMuCisgICAgICB2b2lkIG9wZXJhdG9yKz0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBTdWJ0cmFjdCBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYgZnJvbSBzbGljZSBlbGVtZW50cy4KKyAgICAgIHZvaWQgb3BlcmF0b3ItPShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIExvZ2ljYWwgeG9yIHNsaWNlIGVsZW1lbnRzIHdpdGggY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvcl49KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgTG9naWNhbCBhbmQgc2xpY2UgZWxlbWVudHMgd2l0aCBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYuCisgICAgICB2b2lkIG9wZXJhdG9yJj0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBMb2dpY2FsIG9yIHNsaWNlIGVsZW1lbnRzIHdpdGggY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvcnw9KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgTGVmdCBzaGlmdCBzbGljZSBlbGVtZW50cyBieSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYuCisgICAgICB2b2lkIG9wZXJhdG9yPDw9KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgUmlnaHQgc2hpZnQgc2xpY2UgZWxlbWVudHMgYnkgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvcj4+PShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIEFzc2lnbiBhbGwgc2xpY2UgZWxlbWVudHMgdG8gQGEgdC4KKyAgICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBfVHAmKSBjb25zdDsKKyAgICAgIC8vICAgIH5pbmRpcmVjdF9hcnJheSgpOworCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKyAgICAgIHZvaWQgb3BlcmF0b3IqPShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgdm9pZCBvcGVyYXRvci89KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgICB2b2lkIG9wZXJhdG9yJT0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKyAgICAgIHZvaWQgb3BlcmF0b3IrPShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgdm9pZCBvcGVyYXRvci09KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgICB2b2lkIG9wZXJhdG9yXj0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKyAgICAgIHZvaWQgb3BlcmF0b3ImPShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgdm9pZCBvcGVyYXRvcnw9KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgICB2b2lkIG9wZXJhdG9yPDw9KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgICB2b2lkIG9wZXJhdG9yPj49KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAvLy8gIENvcHkgY29uc3RydWN0b3IuICBCb3RoIHNsaWNlcyByZWZlciB0byB0aGUgc2FtZSB1bmRlcmx5aW5nIGFycmF5LgorICAgICAgaW5kaXJlY3RfYXJyYXkoX0FycmF5PF9UcD4sIHNpemVfdCwgX0FycmF5PHNpemVfdD4pOworCisgICAgICBmcmllbmQgY2xhc3MgdmFsYXJyYXk8X1RwPjsKKyAgICAgIGZyaWVuZCBjbGFzcyBnc2xpY2VfYXJyYXk8X1RwPjsKKworICAgICAgY29uc3Qgc2l6ZV90CSBfTV9zejsKKyAgICAgIGNvbnN0IF9BcnJheTxzaXplX3Q+IF9NX2luZGV4OworICAgICAgY29uc3QgX0FycmF5PF9UcD4JIF9NX2FycmF5OworCisgICAgICAvLyBub3QgaW1wbGVtZW50ZWQKKyAgICAgIGluZGlyZWN0X2FycmF5KCk7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lCisgICAgaW5kaXJlY3RfYXJyYXk8X1RwPjo6aW5kaXJlY3RfYXJyYXkoY29uc3QgaW5kaXJlY3RfYXJyYXk8X1RwPiYgX19hKQorICAgIDogX01fc3ooX19hLl9NX3N6KSwgX01faW5kZXgoX19hLl9NX2luZGV4KSwgX01fYXJyYXkoX19hLl9NX2FycmF5KSB7fQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUKKyAgICBpbmRpcmVjdF9hcnJheTxfVHA+OjppbmRpcmVjdF9hcnJheShfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX3MsCisJCQkJCV9BcnJheTxzaXplX3Q+IF9faSkKKyAgICA6IF9NX3N6KF9fcyksIF9NX2luZGV4KF9faSksIF9NX2FycmF5KF9fYSkge30KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGluZGlyZWN0X2FycmF5PF9UcD4mCisgICAgaW5kaXJlY3RfYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IGluZGlyZWN0X2FycmF5PF9UcD4mIF9fYSkKKyAgICB7CisgICAgICBzdGQ6Ol9fdmFsYXJyYXlfY29weShfX2EuX01fYXJyYXksIF9NX3N6LCBfX2EuX01faW5kZXgsIF9NX2FycmF5LAorCQkJICAgX01faW5kZXgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVyYXRvcj0oY29uc3QgX1RwJiBfX3QpIGNvbnN0CisgICAgeyBzdGQ6Ol9fdmFsYXJyYXlfZmlsbChfTV9hcnJheSwgX01faW5kZXgsIF9NX3N6LCBfX3QpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgaW5kaXJlY3RfYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QKKyAgICB7IHN0ZDo6X192YWxhcnJheV9jb3B5KF9BcnJheTxfVHA+KF9fdiksIF9NX3N6LCBfTV9hcnJheSwgX01faW5kZXgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgICBpbmxpbmUgdm9pZAorICAgICAgaW5kaXJlY3RfYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSkgY29uc3QKKyAgICAgIHsgc3RkOjpfX3ZhbGFycmF5X2NvcHkoX19lLCBfTV9zeiwgX01fYXJyYXksIF9NX2luZGV4KTsgfQorCisjdW5kZWYgX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUgorI2RlZmluZSBfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKF9PcCwgX05hbWUpCQkJCVwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgkJCQkJCVwKKyAgICBpbmxpbmUgdm9pZAkJCQkJCQkJXAorICAgIGluZGlyZWN0X2FycmF5PF9UcD46Om9wZXJhdG9yIF9PcCMjPShjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIGNvbnN0XAorICAgIHsJCQkJCQkJCQlcCisgICAgICBfQXJyYXlfYXVnbWVudGVkXyMjX05hbWUoX01fYXJyYXksIF9NX2luZGV4LCBfQXJyYXk8X1RwPihfX3YpLCBfTV9zeik7IFwKKyAgICB9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CQkJCSAgICAgICAgICAgICAgICBcCisgICAgICBpbmxpbmUgdm9pZAkJCQkJCQlcCisgICAgICBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVyYXRvciBfT3AjIz0oY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0XAorICAgICAgewkJCQkJCQkJCVwKKwlfQXJyYXlfYXVnbWVudGVkXyMjX05hbWUoX01fYXJyYXksIF9NX2luZGV4LCBfX2UsIF9NX3N6KTsJXAorICAgICAgfQorCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKCosIF9fbXVsdGlwbGllcykKK19ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoLywgX19kaXZpZGVzKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUiglLCBfX21vZHVsdXMpCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKCssIF9fcGx1cykKK19ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoLSwgX19taW51cykKK19ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoXiwgX19iaXR3aXNlX3hvcikKK19ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoJiwgX19iaXR3aXNlX2FuZCkKK19ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IofCwgX19iaXR3aXNlX29yKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUig8PCwgX19zaGlmdF9sZWZ0KQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUig+PiwgX19zaGlmdF9yaWdodCkKKworI3VuZGVmIF9ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IKKworICAvLyBAfSBncm91cCBudW1lcmljX2FycmF5cworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZiAvKiBfSU5ESVJFQ1RfQVJSQVlfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2lvc19iYXNlLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvaW9zX2Jhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWMzZDY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2lvc19iYXNlLmgKQEAgLTAsMCArMSw5NzcgQEAKKy8vIElvc3RyZWFtcyBiYXNlIGNsYXNzZXMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LAorLy8gMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGlvc19iYXNlLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDI3LjQgIElvc3RyZWFtcyBiYXNlIGNsYXNzZXMKKy8vCisKKyNpZm5kZWYgX0lPU19CQVNFX0gKKyNkZWZpbmUgX0lPU19CQVNFX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxleHQvYXRvbWljaXR5Lmg+CisjaW5jbHVkZSA8Yml0cy9sb2NhbGVmd2QuaD4KKyNpbmNsdWRlIDxiaXRzL2xvY2FsZV9jbGFzc2VzLmg+CisKKyNpZm5kZWYgX0dMSUJDWFhfU1RESU9fTUFDUk9TCisjIGluY2x1ZGUgPGNzdGRpbz4gICAvLyBGb3IgU0VFS19DVVIsIFNFRUtfRU5ECisjIGRlZmluZSBfSU9TX0JBU0VfU0VFS19DVVIgU0VFS19DVVIKKyMgZGVmaW5lIF9JT1NfQkFTRV9TRUVLX0VORCBTRUVLX0VORAorI2Vsc2UKKyMgZGVmaW5lIF9JT1NfQkFTRV9TRUVLX0NVUiAxCisjIGRlZmluZSBfSU9TX0JBU0VfU0VFS19FTkQgMgorI2VuZGlmCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgLy8gVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBvZiBiaXRtYXNrIHR5cGVzIGFyZSBlbnVtcywgbm90IGludHMsCisgIC8vIGFzIHBlcm1pdHRlZCAoYnV0IG5vdCByZXF1aXJlZCkgaW4gdGhlIHN0YW5kYXJkLCBpbiBvcmRlciB0byBwcm92aWRlCisgIC8vIGJldHRlciB0eXBlIHNhZmV0eSBpbiBpb3N0cmVhbSBjYWxscy4gIEEgc2lkZSBlZmZlY3QgaXMgdGhhdAorICAvLyBleHByZXNzaW9ucyBpbnZvbHZpbmcgdGhlbSBhcmUgbm8gbG9uZ2VyIGNvbXBpbGUtdGltZSBjb25zdGFudHMuCisgIGVudW0gX0lvc19GbXRmbGFncyAKKyAgICB7IAorICAgICAgX1NfYm9vbGFscGhhIAk9IDFMIDw8IDAsCisgICAgICBfU19kZWMgCQk9IDFMIDw8IDEsCisgICAgICBfU19maXhlZCAJCT0gMUwgPDwgMiwKKyAgICAgIF9TX2hleCAJCT0gMUwgPDwgMywKKyAgICAgIF9TX2ludGVybmFsIAk9IDFMIDw8IDQsCisgICAgICBfU19sZWZ0IAkJPSAxTCA8PCA1LAorICAgICAgX1Nfb2N0IAkJPSAxTCA8PCA2LAorICAgICAgX1NfcmlnaHQgCQk9IDFMIDw8IDcsCisgICAgICBfU19zY2llbnRpZmljIAk9IDFMIDw8IDgsCisgICAgICBfU19zaG93YmFzZSAJPSAxTCA8PCA5LAorICAgICAgX1Nfc2hvd3BvaW50IAk9IDFMIDw8IDEwLAorICAgICAgX1Nfc2hvd3BvcyAJPSAxTCA8PCAxMSwKKyAgICAgIF9TX3NraXB3cyAJPSAxTCA8PCAxMiwKKyAgICAgIF9TX3VuaXRidWYgCT0gMUwgPDwgMTMsCisgICAgICBfU191cHBlcmNhc2UgCT0gMUwgPDwgMTQsCisgICAgICBfU19hZGp1c3RmaWVsZCAJPSBfU19sZWZ0IHwgX1NfcmlnaHQgfCBfU19pbnRlcm5hbCwKKyAgICAgIF9TX2Jhc2VmaWVsZCAJPSBfU19kZWMgfCBfU19vY3QgfCBfU19oZXgsCisgICAgICBfU19mbG9hdGZpZWxkIAk9IF9TX3NjaWVudGlmaWMgfCBfU19maXhlZCwKKyAgICAgIF9TX2lvc19mbXRmbGFnc19lbmQgPSAxTCA8PCAxNiAKKyAgICB9OworCisgIGlubGluZSBfSW9zX0ZtdGZsYWdzCisgIG9wZXJhdG9yJihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCisgIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQorCisgIGlubGluZSBfSW9zX0ZtdGZsYWdzCisgIG9wZXJhdG9yfChfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCisgIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQorCisgIGlubGluZSBfSW9zX0ZtdGZsYWdzCisgIG9wZXJhdG9yXihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCisgIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQorCisgIGlubGluZSBfSW9zX0ZtdGZsYWdzJgorICBvcGVyYXRvcnw9KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCisgIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQorCisgIGlubGluZSBfSW9zX0ZtdGZsYWdzJgorICBvcGVyYXRvciY9KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCisgIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQorCisgIGlubGluZSBfSW9zX0ZtdGZsYWdzJgorICBvcGVyYXRvcl49KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCisgIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQorCisgIGlubGluZSBfSW9zX0ZtdGZsYWdzCisgIG9wZXJhdG9yfihfSW9zX0ZtdGZsYWdzIF9fYSkKKyAgeyByZXR1cm4gX0lvc19GbXRmbGFncyh+c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsgfQorCisKKyAgZW51bSBfSW9zX09wZW5tb2RlIAorICAgIHsgCisgICAgICBfU19hcHAgCQk9IDFMIDw8IDAsCisgICAgICBfU19hdGUgCQk9IDFMIDw8IDEsCisgICAgICBfU19iaW4gCQk9IDFMIDw8IDIsCisgICAgICBfU19pbiAJCT0gMUwgPDwgMywKKyAgICAgIF9TX291dCAJCT0gMUwgPDwgNCwKKyAgICAgIF9TX3RydW5jIAkJPSAxTCA8PCA1LAorICAgICAgX1NfaW9zX29wZW5tb2RlX2VuZCA9IDFMIDw8IDE2IAorICAgIH07CisKKyAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKKyAgb3BlcmF0b3ImKF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKKyAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CisKKyAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKKyAgb3BlcmF0b3J8KF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKKyAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CisKKyAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKKyAgb3BlcmF0b3JeKF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKKyAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CisKKyAgaW5saW5lIF9Jb3NfT3Blbm1vZGUmCisgIG9wZXJhdG9yfD0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKKyAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9CisKKyAgaW5saW5lIF9Jb3NfT3Blbm1vZGUmCisgIG9wZXJhdG9yJj0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKKyAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CisKKyAgaW5saW5lIF9Jb3NfT3Blbm1vZGUmCisgIG9wZXJhdG9yXj0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKKyAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CisKKyAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKKyAgb3BlcmF0b3J+KF9Jb3NfT3Blbm1vZGUgX19hKQorICB7IHJldHVybiBfSW9zX09wZW5tb2RlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CisKKworICBlbnVtIF9Jb3NfSW9zdGF0ZQorICAgIHsgCisgICAgICBfU19nb29kYml0IAkJPSAwLAorICAgICAgX1NfYmFkYml0IAkJPSAxTCA8PCAwLAorICAgICAgX1NfZW9mYml0IAkJPSAxTCA8PCAxLAorICAgICAgX1NfZmFpbGJpdAkJPSAxTCA8PCAyLAorICAgICAgX1NfaW9zX2lvc3RhdGVfZW5kID0gMUwgPDwgMTYgCisgICAgfTsKKworICBpbmxpbmUgX0lvc19Jb3N0YXRlCisgIG9wZXJhdG9yJihfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUgX19iKQorICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQorCisgIGlubGluZSBfSW9zX0lvc3RhdGUKKyAgb3BlcmF0b3J8KF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCisgIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CisKKyAgaW5saW5lIF9Jb3NfSW9zdGF0ZQorICBvcGVyYXRvcl4oX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKKyAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KKworICBpbmxpbmUgX0lvc19Jb3N0YXRlJgorICBvcGVyYXRvcnw9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQorICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KKworICBpbmxpbmUgX0lvc19Jb3N0YXRlJgorICBvcGVyYXRvciY9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQorICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0KKworICBpbmxpbmUgX0lvc19Jb3N0YXRlJgorICBvcGVyYXRvcl49KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQorICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KKworICBpbmxpbmUgX0lvc19Jb3N0YXRlCisgIG9wZXJhdG9yfihfSW9zX0lvc3RhdGUgX19hKQorICB7IHJldHVybiBfSW9zX0lvc3RhdGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KKworICBlbnVtIF9Jb3NfU2Vla2RpciAKKyAgICB7IAorICAgICAgX1NfYmVnID0gMCwKKyAgICAgIF9TX2N1ciA9IF9JT1NfQkFTRV9TRUVLX0NVUiwKKyAgICAgIF9TX2VuZCA9IF9JT1NfQkFTRV9TRUVLX0VORCwKKyAgICAgIF9TX2lvc19zZWVrZGlyX2VuZCA9IDFMIDw8IDE2IAorICAgIH07CisKKyAgLy8gMjcuNC4yICBDbGFzcyBpb3NfYmFzZQorICAvKioKKyAgICogIEBicmllZiAgVGhlIGJhc2Ugb2YgdGhlIEkvTyBjbGFzcyBoaWVyYXJjaHkuCisgICAqICBAaW5ncm91cCBpbworICAgKgorICAgKiAgVGhpcyBjbGFzcyBkZWZpbmVzIGV2ZXJ5dGhpbmcgdGhhdCBjYW4gYmUgZGVmaW5lZCBhYm91dCBJL08gdGhhdCBkb2VzCisgICAqICBub3QgZGVwZW5kIG9uIHRoZSB0eXBlIG9mIGNoYXJhY3RlcnMgYmVpbmcgaW5wdXQgb3Igb3V0cHV0LiAgTW9zdAorICAgKiAgcGVvcGxlIHdpbGwgb25seSBzZWUgQGMgaW9zX2Jhc2Ugd2hlbiB0aGV5IG5lZWQgdG8gc3BlY2lmeSB0aGUgZnVsbAorICAgKiAgbmFtZSBvZiB0aGUgdmFyaW91cyBJL08gZmxhZ3MgKGUuZy4sIHRoZSBvcGVubW9kZXMpLgorICAqLworICBjbGFzcyBpb3NfYmFzZQorICB7CisgIHB1YmxpYzoKKworICAgIC8qKiAKKyAgICAgKiAgQGJyaWVmIFRoZXNlIGFyZSB0aHJvd24gdG8gaW5kaWNhdGUgcHJvYmxlbXMgd2l0aCBpby4KKyAgICAgKiAgQGluZ3JvdXAgZXhjZXB0aW9ucworICAgICAqCisgICAgICogIDI3LjQuMi4xLjEgIENsYXNzIGlvc19iYXNlOjpmYWlsdXJlCisgICAgICovCisgICAgY2xhc3MgZmFpbHVyZSA6IHB1YmxpYyBleGNlcHRpb24KKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNDguICBVc2Ugb2Ygbm9uLWV4aXN0ZW50IGV4Y2VwdGlvbiBjb25zdHJ1Y3RvcgorICAgICAgZXhwbGljaXQKKyAgICAgIGZhaWx1cmUoY29uc3Qgc3RyaW5nJiBfX3N0cikgdGhyb3coKTsKKworICAgICAgLy8gVGhpcyBkZWNsYXJhdGlvbiBpcyBub3QgdXNlbGVzczoKKyAgICAgIC8vIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy00LjMuMi9nY2MvVmFndWUtTGlua2FnZS5odG1sCisgICAgICB2aXJ0dWFsCisgICAgICB+ZmFpbHVyZSgpIHRocm93KCk7CisKKyAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKKyAgICAgIHdoYXQoKSBjb25zdCB0aHJvdygpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHN0cmluZyBfTV9tc2c7CisgICAgfTsKKworICAgIC8vIDI3LjQuMi4xLjIgIFR5cGUgaW9zX2Jhc2U6OmZtdGZsYWdzCisgICAgLyoqCisgICAgICogIEBicmllZiBUaGlzIGlzIGEgYml0bWFzayB0eXBlLgorICAgICAqCisgICAgICogIEBjIEBhIF9Jb3NfRm10ZmxhZ3MgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZCwgYnV0IGl0IGlzIHZhbGlkIHRvCisgICAgICogIHBlcmZvcm0gYml0d2lzZSBvcGVyYXRpb25zIG9uIHRoZXNlIHZhbHVlcyBhbmQgZXhwZWN0IHRoZSBSaWdodAorICAgICAqICBUaGluZyB0byBoYXBwZW4uICBEZWZpbmVkIG9iamVjdHMgb2YgdHlwZSBmbXRmbGFncyBhcmU6CisgICAgICogIC0gYm9vbGFscGhhCisgICAgICogIC0gZGVjCisgICAgICogIC0gZml4ZWQKKyAgICAgKiAgLSBoZXgKKyAgICAgKiAgLSBpbnRlcm5hbAorICAgICAqICAtIGxlZnQKKyAgICAgKiAgLSBvY3QKKyAgICAgKiAgLSByaWdodAorICAgICAqICAtIHNjaWVudGlmaWMKKyAgICAgKiAgLSBzaG93YmFzZQorICAgICAqICAtIHNob3dwb2ludAorICAgICAqICAtIHNob3dwb3MKKyAgICAgKiAgLSBza2lwd3MKKyAgICAgKiAgLSB1bml0YnVmCisgICAgICogIC0gdXBwZXJjYXNlCisgICAgICogIC0gYWRqdXN0ZmllbGQKKyAgICAgKiAgLSBiYXNlZmllbGQKKyAgICAgKiAgLSBmbG9hdGZpZWxkCisgICAgKi8KKyAgICB0eXBlZGVmIF9Jb3NfRm10ZmxhZ3MgZm10ZmxhZ3M7CisKKyAgICAvLy8gSW5zZXJ0L2V4dHJhY3QgQGMgYm9vbCBpbiBhbHBoYWJldGljIHJhdGhlciB0aGFuIG51bWVyaWMgZm9ybWF0LgorICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBib29sYWxwaGEgPSAgIF9TX2Jvb2xhbHBoYTsKKworICAgIC8vLyBDb252ZXJ0cyBpbnRlZ2VyIGlucHV0IG9yIGdlbmVyYXRlcyBpbnRlZ2VyIG91dHB1dCBpbiBkZWNpbWFsIGJhc2UuCisgICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGRlYyA9ICAgICAgICAgX1NfZGVjOworCisgICAgLy8vIEdlbmVyYXRlIGZsb2F0aW5nLXBvaW50IG91dHB1dCBpbiBmaXhlZC1wb2ludCBub3RhdGlvbi4KKyAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZml4ZWQgPSAgICAgICBfU19maXhlZDsKKworICAgIC8vLyBDb252ZXJ0cyBpbnRlZ2VyIGlucHV0IG9yIGdlbmVyYXRlcyBpbnRlZ2VyIG91dHB1dCBpbiBoZXhhZGVjaW1hbCBiYXNlLgorICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBoZXggPSAgICAgICAgIF9TX2hleDsKKworICAgIC8vLyBBZGRzIGZpbGwgY2hhcmFjdGVycyBhdCBhIGRlc2lnbmF0ZWQgaW50ZXJuYWwgcG9pbnQgaW4gY2VydGFpbgorICAgIC8vLyBnZW5lcmF0ZWQgb3V0cHV0LCBvciBpZGVudGljYWwgdG8gQGMgcmlnaHQgaWYgbm8gc3VjaCBwb2ludCBpcworICAgIC8vLyBkZXNpZ25hdGVkLgorICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBpbnRlcm5hbCA9ICAgIF9TX2ludGVybmFsOworCisgICAgLy8vIEFkZHMgZmlsbCBjaGFyYWN0ZXJzIG9uIHRoZSByaWdodCAoZmluYWwgcG9zaXRpb25zKSBvZiBjZXJ0YWluCisgICAgLy8vIGdlbmVyYXRlZCBvdXRwdXQuICAoSS5lLiwgdGhlIHRoaW5nIHlvdSBwcmludCBpcyBmbHVzaCBsZWZ0LikKKyAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgbGVmdCA9ICAgICAgICBfU19sZWZ0OworCisgICAgLy8vIENvbnZlcnRzIGludGVnZXIgaW5wdXQgb3IgZ2VuZXJhdGVzIGludGVnZXIgb3V0cHV0IGluIG9jdGFsIGJhc2UuCisgICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIG9jdCA9ICAgICAgICAgX1Nfb2N0OworCisgICAgLy8vIEFkZHMgZmlsbCBjaGFyYWN0ZXJzIG9uIHRoZSBsZWZ0IChpbml0aWFsIHBvc2l0aW9ucykgb2YgY2VydGFpbgorICAgIC8vLyBnZW5lcmF0ZWQgb3V0cHV0LiAgKEkuZS4sIHRoZSB0aGluZyB5b3UgcHJpbnQgaXMgZmx1c2ggcmlnaHQuKQorICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyByaWdodCA9ICAgICAgIF9TX3JpZ2h0OworCisgICAgLy8vIEdlbmVyYXRlcyBmbG9hdGluZy1wb2ludCBvdXRwdXQgaW4gc2NpZW50aWZpYyBub3RhdGlvbi4KKyAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2NpZW50aWZpYyA9ICBfU19zY2llbnRpZmljOworCisgICAgLy8vIEdlbmVyYXRlcyBhIHByZWZpeCBpbmRpY2F0aW5nIHRoZSBudW1lcmljIGJhc2Ugb2YgZ2VuZXJhdGVkIGludGVnZXIKKyAgICAvLy8gb3V0cHV0LgorICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93YmFzZSA9ICAgIF9TX3Nob3diYXNlOworCisgICAgLy8vIEdlbmVyYXRlcyBhIGRlY2ltYWwtcG9pbnQgY2hhcmFjdGVyIHVuY29uZGl0aW9uYWxseSBpbiBnZW5lcmF0ZWQKKyAgICAvLy8gZmxvYXRpbmctcG9pbnQgb3V0cHV0LgorICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93cG9pbnQgPSAgIF9TX3Nob3dwb2ludDsKKworICAgIC8vLyBHZW5lcmF0ZXMgYSArIHNpZ24gaW4gbm9uLW5lZ2F0aXZlIGdlbmVyYXRlZCBudW1lcmljIG91dHB1dC4KKyAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd3BvcyA9ICAgICBfU19zaG93cG9zOworCisgICAgLy8vIFNraXBzIGxlYWRpbmcgd2hpdGUgc3BhY2UgYmVmb3JlIGNlcnRhaW4gaW5wdXQgb3BlcmF0aW9ucy4KKyAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2tpcHdzID0gICAgICBfU19za2lwd3M7CisKKyAgICAvLy8gRmx1c2hlcyBvdXRwdXQgYWZ0ZXIgZWFjaCBvdXRwdXQgb3BlcmF0aW9uLgorICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1bml0YnVmID0gICAgIF9TX3VuaXRidWY7CisKKyAgICAvLy8gUmVwbGFjZXMgY2VydGFpbiBsb3dlcmNhc2UgbGV0dGVycyB3aXRoIHRoZWlyIHVwcGVyY2FzZSBlcXVpdmFsZW50cworICAgIC8vLyBpbiBnZW5lcmF0ZWQgb3V0cHV0LgorICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1cHBlcmNhc2UgPSAgIF9TX3VwcGVyY2FzZTsKKworICAgIC8vLyBBIG1hc2sgb2YgbGVmdHxyaWdodHxpbnRlcm5hbC4gIFVzZWZ1bCBmb3IgdGhlIDItYXJnIGZvcm0gb2YgQGMgc2V0Zi4KKyAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYWRqdXN0ZmllbGQgPSBfU19hZGp1c3RmaWVsZDsKKworICAgIC8vLyBBIG1hc2sgb2YgZGVjfG9jdHxoZXguICBVc2VmdWwgZm9yIHRoZSAyLWFyZyBmb3JtIG9mIEBjIHNldGYuCisgICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGJhc2VmaWVsZCA9ICAgX1NfYmFzZWZpZWxkOworCisgICAgLy8vIEEgbWFzayBvZiBzY2llbnRpZmljfGZpeGVkLiAgVXNlZnVsIGZvciB0aGUgMi1hcmcgZm9ybSBvZiBAYyBzZXRmLgorICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBmbG9hdGZpZWxkID0gIF9TX2Zsb2F0ZmllbGQ7CisKKyAgICAvLyAyNy40LjIuMS4zICBUeXBlIGlvc19iYXNlOjppb3N0YXRlCisgICAgLyoqCisgICAgICogIEBicmllZiBUaGlzIGlzIGEgYml0bWFzayB0eXBlLgorICAgICAqCisgICAgICogIEBjIEBhIF9Jb3NfSW9zdGF0ZSBpcyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkLCBidXQgaXQgaXMgdmFsaWQgdG8KKyAgICAgKiAgcGVyZm9ybSBiaXR3aXNlIG9wZXJhdGlvbnMgb24gdGhlc2UgdmFsdWVzIGFuZCBleHBlY3QgdGhlIFJpZ2h0CisgICAgICogIFRoaW5nIHRvIGhhcHBlbi4gIERlZmluZWQgb2JqZWN0cyBvZiB0eXBlIGlvc3RhdGUgYXJlOgorICAgICAqICAtIGJhZGJpdAorICAgICAqICAtIGVvZmJpdAorICAgICAqICAtIGZhaWxiaXQKKyAgICAgKiAgLSBnb29kYml0CisgICAgKi8KKyAgICB0eXBlZGVmIF9Jb3NfSW9zdGF0ZSBpb3N0YXRlOworCisgICAgLy8vIEluZGljYXRlcyBhIGxvc3Mgb2YgaW50ZWdyaXR5IGluIGFuIGlucHV0IG9yIG91dHB1dCBzZXF1ZW5jZSAoc3VjaAorICAgIC8vLyBhcyBhbiBpcnJlY292ZXJhYmxlIHJlYWQgZXJyb3IgZnJvbSBhIGZpbGUpLgorICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGJhZGJpdCA9CV9TX2JhZGJpdDsKKworICAgIC8vLyBJbmRpY2F0ZXMgdGhhdCBhbiBpbnB1dCBvcGVyYXRpb24gcmVhY2hlZCB0aGUgZW5kIG9mIGFuIGlucHV0IHNlcXVlbmNlLgorICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGVvZmJpdCA9CV9TX2VvZmJpdDsKKworICAgIC8vLyBJbmRpY2F0ZXMgdGhhdCBhbiBpbnB1dCBvcGVyYXRpb24gZmFpbGVkIHRvIHJlYWQgdGhlIGV4cGVjdGVkCisgICAgLy8vIGNoYXJhY3RlcnMsIG9yIHRoYXQgYW4gb3V0cHV0IG9wZXJhdGlvbiBmYWlsZWQgdG8gZ2VuZXJhdGUgdGhlCisgICAgLy8vIGRlc2lyZWQgY2hhcmFjdGVycy4KKyAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBmYWlsYml0ID0JX1NfZmFpbGJpdDsKKworICAgIC8vLyBJbmRpY2F0ZXMgYWxsIGlzIHdlbGwuCisgICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZ29vZGJpdCA9CV9TX2dvb2RiaXQ7CisKKyAgICAvLyAyNy40LjIuMS40ICBUeXBlIGlvc19iYXNlOjpvcGVubW9kZQorICAgIC8qKgorICAgICAqICBAYnJpZWYgVGhpcyBpcyBhIGJpdG1hc2sgdHlwZS4KKyAgICAgKgorICAgICAqICBAYyBAYSBfSW9zX09wZW5tb2RlIGlzIGltcGxlbWVudGF0aW9uLWRlZmluZWQsIGJ1dCBpdCBpcyB2YWxpZCB0bworICAgICAqICBwZXJmb3JtIGJpdHdpc2Ugb3BlcmF0aW9ucyBvbiB0aGVzZSB2YWx1ZXMgYW5kIGV4cGVjdCB0aGUgUmlnaHQKKyAgICAgKiAgVGhpbmcgdG8gaGFwcGVuLiAgRGVmaW5lZCBvYmplY3RzIG9mIHR5cGUgb3Blbm1vZGUgYXJlOgorICAgICAqICAtIGFwcAorICAgICAqICAtIGF0ZQorICAgICAqICAtIGJpbmFyeQorICAgICAqICAtIGluCisgICAgICogIC0gb3V0CisgICAgICogIC0gdHJ1bmMKKyAgICAqLworICAgIHR5cGVkZWYgX0lvc19PcGVubW9kZSBvcGVubW9kZTsKKworICAgIC8vLyBTZWVrIHRvIGVuZCBiZWZvcmUgZWFjaCB3cml0ZS4KKyAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYXBwID0JCV9TX2FwcDsKKworICAgIC8vLyBPcGVuIGFuZCBzZWVrIHRvIGVuZCBpbW1lZGlhdGVseSBhZnRlciBvcGVuaW5nLgorICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBhdGUgPQkJX1NfYXRlOworCisgICAgLy8vIFBlcmZvcm0gaW5wdXQgYW5kIG91dHB1dCBpbiBiaW5hcnkgbW9kZSAoYXMgb3Bwb3NlZCB0byB0ZXh0IG1vZGUpLgorICAgIC8vLyBUaGlzIGlzIHByb2JhYmx5IG5vdCB3aGF0IHlvdSB0aGluayBpdCBpczsgc2VlCisgICAgLy8vIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2xpYnN0ZGMrKy9tYW51YWwvYmswMXB0MTFjaDI3czAyLmh0bWwKKyAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYmluYXJ5ID0JX1NfYmluOworCisgICAgLy8vIE9wZW4gZm9yIGlucHV0LiAgRGVmYXVsdCBmb3IgQGMgaWZzdHJlYW0gYW5kIGZzdHJlYW0uCisgICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGluID0JCV9TX2luOworCisgICAgLy8vIE9wZW4gZm9yIG91dHB1dC4gIERlZmF1bHQgZm9yIEBjIG9mc3RyZWFtIGFuZCBmc3RyZWFtLgorICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBvdXQgPQkJX1Nfb3V0OworCisgICAgLy8vIE9wZW4gZm9yIGlucHV0LiAgRGVmYXVsdCBmb3IgQGMgb2ZzdHJlYW0uCisgICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIHRydW5jID0JX1NfdHJ1bmM7CisKKyAgICAvLyAyNy40LjIuMS41ICBUeXBlIGlvc19iYXNlOjpzZWVrZGlyCisgICAgLyoqCisgICAgICogIEBicmllZiBUaGlzIGlzIGFuIGVudW1lcmF0ZWQgdHlwZS4KKyAgICAgKgorICAgICAqICBAYyBAYSBfSW9zX1NlZWtkaXIgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZC4gIERlZmluZWQgdmFsdWVzCisgICAgICogIG9mIHR5cGUgc2Vla2RpciBhcmU6CisgICAgICogIC0gYmVnCisgICAgICogIC0gY3VyLCBlcXVpdmFsZW50IHRvIEBjIFNFRUtfQ1VSIGluIHRoZSBDIHN0YW5kYXJkIGxpYnJhcnkuCisgICAgICogIC0gZW5kLCBlcXVpdmFsZW50IHRvIEBjIFNFRUtfRU5EIGluIHRoZSBDIHN0YW5kYXJkIGxpYnJhcnkuCisgICAgKi8KKyAgICB0eXBlZGVmIF9Jb3NfU2Vla2RpciBzZWVrZGlyOworCisgICAgLy8vIFJlcXVlc3QgYSBzZWVrIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmVhbS4KKyAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBiZWcgPQkJX1NfYmVnOworCisgICAgLy8vIFJlcXVlc3QgYSBzZWVrIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uIHdpdGhpbiB0aGUgc2VxdWVuY2UuCisgICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgY3VyID0JCV9TX2N1cjsKKworICAgIC8vLyBSZXF1ZXN0IGEgc2VlayByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBlbmQgb2YgdGhlIHNlcXVlbmNlLgorICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGVuZCA9CQlfU19lbmQ7CisKKyAgICAvLyBBbm5leCBELjYKKyAgICB0eXBlZGVmIGludCBpb19zdGF0ZTsKKyAgICB0eXBlZGVmIGludCBvcGVuX21vZGU7CisgICAgdHlwZWRlZiBpbnQgc2Vla19kaXI7CisKKyAgICB0eXBlZGVmIHN0ZDo6c3RyZWFtcG9zIHN0cmVhbXBvczsKKyAgICB0eXBlZGVmIHN0ZDo6c3RyZWFtb2ZmIHN0cmVhbW9mZjsKKworICAgIC8vIENhbGxiYWNrczsKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBUaGUgc2V0IG9mIGV2ZW50cyB0aGF0IG1heSBiZSBwYXNzZWQgdG8gYW4gZXZlbnQgY2FsbGJhY2suCisgICAgICoKKyAgICAgKiAgZXJhc2VfZXZlbnQgaXMgdXNlZCBkdXJpbmcgfmlvcygpIGFuZCBjb3B5Zm10KCkuICBpbWJ1ZV9ldmVudCBpcyB1c2VkCisgICAgICogIGR1cmluZyBpbWJ1ZSgpLiAgY29weWZtdF9ldmVudCBpcyB1c2VkIGR1cmluZyBjb3B5Zm10KCkuCisgICAgKi8KKyAgICBlbnVtIGV2ZW50CisgICAgeworICAgICAgZXJhc2VfZXZlbnQsCisgICAgICBpbWJ1ZV9ldmVudCwKKyAgICAgIGNvcHlmbXRfZXZlbnQKKyAgICB9OworCisgICAgLyoqCisgICAgICogIEBicmllZiAgVGhlIHR5cGUgb2YgYW4gZXZlbnQgY2FsbGJhY2sgZnVuY3Rpb24uCisgICAgICogIEBwYXJhbSAgZXZlbnQgIE9uZSBvZiB0aGUgbWVtYmVycyBvZiB0aGUgZXZlbnQgZW51bS4KKyAgICAgKiAgQHBhcmFtICBpb3NfYmFzZSAgUmVmZXJlbmNlIHRvIHRoZSBpb3NfYmFzZSBvYmplY3QuCisgICAgICogIEBwYXJhbSAgaW50ICBUaGUgaW50ZWdlciBwcm92aWRlZCB3aGVuIHRoZSBjYWxsYmFjayB3YXMgcmVnaXN0ZXJlZC4KKyAgICAgKgorICAgICAqICBFdmVudCBjYWxsYmFja3MgYXJlIHVzZXIgZGVmaW5lZCBmdW5jdGlvbnMgdGhhdCBnZXQgY2FsbGVkIGR1cmluZworICAgICAqICBzZXZlcmFsIGlvc19iYXNlIGFuZCBiYXNpY19pb3MgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgaW1idWUoKSwKKyAgICAgKiAgY29weWZtdCgpLCBhbmQgfmlvcygpLgorICAgICovCisgICAgdHlwZWRlZiB2b2lkICgqZXZlbnRfY2FsbGJhY2spIChldmVudCwgaW9zX2Jhc2UmLCBpbnQpOworCisgICAgLyoqCisgICAgICogIEBicmllZiAgQWRkIHRoZSBjYWxsYmFjayBfX2ZuIHdpdGggcGFyYW1ldGVyIF9faW5kZXguCisgICAgICogIEBwYXJhbSAgX19mbiAgVGhlIGZ1bmN0aW9uIHRvIGFkZC4KKyAgICAgKiAgQHBhcmFtICBfX2luZGV4ICBUaGUgaW50ZWdlciB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbiB3aGVuIGludm9rZWQuCisgICAgICoKKyAgICAgKiAgUmVnaXN0ZXJzIGEgZnVuY3Rpb24gYXMgYW4gZXZlbnQgY2FsbGJhY2sgd2l0aCBhbiBpbnRlZ2VyIHBhcmFtZXRlciB0bworICAgICAqICBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIHdoZW4gaW52b2tlZC4gIE11bHRpcGxlIGNvcGllcyBvZiB0aGUKKyAgICAgKiAgZnVuY3Rpb24gYXJlIGFsbG93ZWQuICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgY2FsbGJhY2tzLCB0aGV5IGFyZQorICAgICAqICBpbnZva2VkIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgcmVnaXN0ZXJlZC4KKyAgICAqLworICAgIHZvaWQKKyAgICByZWdpc3Rlcl9jYWxsYmFjayhldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19pbmRleCk7CisKKyAgcHJvdGVjdGVkOgorICAgIHN0cmVhbXNpemUJCV9NX3ByZWNpc2lvbjsKKyAgICBzdHJlYW1zaXplCQlfTV93aWR0aDsKKyAgICBmbXRmbGFncwkJX01fZmxhZ3M7CisgICAgaW9zdGF0ZQkJX01fZXhjZXB0aW9uOworICAgIGlvc3RhdGUJCV9NX3N0cmVhbWJ1Zl9zdGF0ZTsKKworICAgIC8vIDI3LjQuMi42ICBNZW1iZXJzIGZvciBjYWxsYmFja3MKKyAgICAvLyAyNy40LjIuNiAgaW9zX2Jhc2UgY2FsbGJhY2tzCisgICAgc3RydWN0IF9DYWxsYmFja19saXN0CisgICAgeworICAgICAgLy8gRGF0YSBNZW1iZXJzCisgICAgICBfQ2FsbGJhY2tfbGlzdCoJCV9NX25leHQ7CisgICAgICBpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sJX01fZm47CisgICAgICBpbnQJCQlfTV9pbmRleDsKKyAgICAgIF9BdG9taWNfd29yZAkJX01fcmVmY291bnQ7ICAvLyAwIG1lYW5zIG9uZSByZWZlcmVuY2UuCisKKyAgICAgIF9DYWxsYmFja19saXN0KGlvc19iYXNlOjpldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19pbmRleCwKKwkJICAgICBfQ2FsbGJhY2tfbGlzdCogX19jYikKKyAgICAgIDogX01fbmV4dChfX2NiKSwgX01fZm4oX19mbiksIF9NX2luZGV4KF9faW5kZXgpLCBfTV9yZWZjb3VudCgwKSB7IH0KKworICAgICAgdm9pZAorICAgICAgX01fYWRkX3JlZmVyZW5jZSgpIHsgX19nbnVfY3h4OjpfX2F0b21pY19hZGRfZGlzcGF0Y2goJl9NX3JlZmNvdW50LCAxKTsgfQorCisgICAgICAvLyAwID0+IE9LIHRvIGRlbGV0ZS4KKyAgICAgIGludAorICAgICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIAorICAgICAgeyByZXR1cm4gX19nbnVfY3h4OjpfX2V4Y2hhbmdlX2FuZF9hZGRfZGlzcGF0Y2goJl9NX3JlZmNvdW50LCAtMSk7IH0KKyAgICB9OworCisgICAgIF9DYWxsYmFja19saXN0KglfTV9jYWxsYmFja3M7CisKKyAgICB2b2lkCisgICAgX01fY2FsbF9jYWxsYmFja3MoZXZlbnQgX19ldikgdGhyb3coKTsKKworICAgIHZvaWQKKyAgICBfTV9kaXNwb3NlX2NhbGxiYWNrcyh2b2lkKSB0aHJvdygpOworCisgICAgLy8gMjcuNC4yLjUgIE1lbWJlcnMgZm9yIGl3b3JkL3B3b3JkIHN0b3JhZ2UKKyAgICBzdHJ1Y3QgX1dvcmRzCisgICAgeworICAgICAgdm9pZCoJX01fcHdvcmQ7CisgICAgICBsb25nCV9NX2l3b3JkOworICAgICAgX1dvcmRzKCkgOiBfTV9wd29yZCgwKSwgX01faXdvcmQoMCkgeyB9CisgICAgfTsKKworICAgIC8vIE9ubHkgZm9yIGZhaWxlZCBpd29yZC9wd29yZCBjYWxscy4KKyAgICBfV29yZHMJCV9NX3dvcmRfemVybzsKKworICAgIC8vIEd1YXJhbnRlZWQgc3RvcmFnZS4KKyAgICAvLyBUaGUgZmlyc3QgNSBpd29yZCBhbmQgcHdvcmQgc2xvdHMgYXJlIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UuCisgICAgZW51bSB7IF9TX2xvY2FsX3dvcmRfc2l6ZSA9IDggfTsKKyAgICBfV29yZHMJCV9NX2xvY2FsX3dvcmRbX1NfbG9jYWxfd29yZF9zaXplXTsKKworICAgIC8vIEFsbG9jYXRlZCBzdG9yYWdlLgorICAgIGludAkJCV9NX3dvcmRfc2l6ZTsKKyAgICBfV29yZHMqCQlfTV93b3JkOworCisgICAgX1dvcmRzJgorICAgIF9NX2dyb3dfd29yZHMoaW50IF9faW5kZXgsIGJvb2wgX19pd29yZCk7CisKKyAgICAvLyBNZW1iZXJzIGZvciBsb2NhbGUgYW5kIGxvY2FsZSBjYWNoaW5nLgorICAgIGxvY2FsZQkJX01faW9zX2xvY2FsZTsKKworICAgIHZvaWQKKyAgICBfTV9pbml0KCkgdGhyb3coKTsKKworICBwdWJsaWM6CisKKyAgICAvLyAyNy40LjIuMS42ICBDbGFzcyBpb3NfYmFzZTo6SW5pdAorICAgIC8vIFVzZWQgdG8gaW5pdGlhbGl6ZSBzdGFuZGFyZCBzdHJlYW1zLiBJbiB0aGVvcnksIGcrKyBjb3VsZCB1c2UKKyAgICAvLyAtZmluaXQtcHJpb3JpdHkgdG8gb3JkZXIgdGhpcyBzdHVmZiBjb3JyZWN0bHkgd2l0aG91dCBnb2luZworICAgIC8vIHRocm91Z2ggdGhlc2UgbWFjaGluYXRpb25zLgorICAgIGNsYXNzIEluaXQKKyAgICB7CisgICAgICBmcmllbmQgY2xhc3MgaW9zX2Jhc2U7CisgICAgcHVibGljOgorICAgICAgSW5pdCgpOworICAgICAgfkluaXQoKTsKKworICAgIHByaXZhdGU6CisgICAgICBzdGF0aWMgX0F0b21pY193b3JkCV9TX3JlZmNvdW50OworICAgICAgc3RhdGljIGJvb2wJCV9TX3N5bmNlZF93aXRoX3N0ZGlvOworICAgIH07CisKKyAgICAvLyBbMjcuNC4yLjJdIGZtdGZsYWdzIHN0YXRlIGZ1bmN0aW9ucworICAgIC8qKgorICAgICAqICBAYnJpZWYgIEFjY2VzcyB0byBmb3JtYXQgZmxhZ3MuCisgICAgICogIEByZXR1cm4gIFRoZSBmb3JtYXQgY29udHJvbCBmbGFncyBmb3IgYm90aCBpbnB1dCBhbmQgb3V0cHV0LgorICAgICovCisgICAgZm10ZmxhZ3MKKyAgICBmbGFncygpIGNvbnN0CisgICAgeyByZXR1cm4gX01fZmxhZ3M7IH0KKworICAgIC8qKgorICAgICAqICBAYnJpZWYgIFNldHRpbmcgbmV3IGZvcm1hdCBmbGFncyBhbGwgYXQgb25jZS4KKyAgICAgKiAgQHBhcmFtICBmbXRmbCAgVGhlIG5ldyBmbGFncyB0byBzZXQuCisgICAgICogIEByZXR1cm4gIFRoZSBwcmV2aW91cyBmb3JtYXQgY29udHJvbCBmbGFncy4KKyAgICAgKgorICAgICAqICBUaGlzIGZ1bmN0aW9uIG92ZXJ3cml0ZXMgYWxsIHRoZSBmb3JtYXQgZmxhZ3Mgd2l0aCBAYSBmbXRmbC4KKyAgICAqLworICAgIGZtdGZsYWdzCisgICAgZmxhZ3MoZm10ZmxhZ3MgX19mbXRmbCkKKyAgICB7CisgICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOworICAgICAgX01fZmxhZ3MgPSBfX2ZtdGZsOworICAgICAgcmV0dXJuIF9fb2xkOworICAgIH0KKworICAgIC8qKgorICAgICAqICBAYnJpZWYgIFNldHRpbmcgbmV3IGZvcm1hdCBmbGFncy4KKyAgICAgKiAgQHBhcmFtICBmbXRmbCAgQWRkaXRpb25hbCBmbGFncyB0byBzZXQuCisgICAgICogIEByZXR1cm4gIFRoZSBwcmV2aW91cyBmb3JtYXQgY29udHJvbCBmbGFncy4KKyAgICAgKgorICAgICAqICBUaGlzIGZ1bmN0aW9uIHNldHMgYWRkaXRpb25hbCBmbGFncyBpbiBmb3JtYXQgY29udHJvbC4gIEZsYWdzIHRoYXQKKyAgICAgKiAgd2VyZSBwcmV2aW91c2x5IHNldCByZW1haW4gc2V0LgorICAgICovCisgICAgZm10ZmxhZ3MKKyAgICBzZXRmKGZtdGZsYWdzIF9fZm10ZmwpCisgICAgeworICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKKyAgICAgIF9NX2ZsYWdzIHw9IF9fZm10Zmw7CisgICAgICByZXR1cm4gX19vbGQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogIEBicmllZiAgU2V0dGluZyBuZXcgZm9ybWF0IGZsYWdzLgorICAgICAqICBAcGFyYW0gIGZtdGZsICBBZGRpdGlvbmFsIGZsYWdzIHRvIHNldC4KKyAgICAgKiAgQHBhcmFtICBtYXNrICBUaGUgZmxhZ3MgbWFzayBmb3IgQGEgZm10ZmwuCisgICAgICogIEByZXR1cm4gIFRoZSBwcmV2aW91cyBmb3JtYXQgY29udHJvbCBmbGFncy4KKyAgICAgKgorICAgICAqICBUaGlzIGZ1bmN0aW9uIGNsZWFycyBAYSBtYXNrIGluIHRoZSBmb3JtYXQgZmxhZ3MsIHRoZW4gc2V0cworICAgICAqICBAYSBmbXRmbCBAYyAmIEBhIG1hc2suICBBbiBleGFtcGxlIG1hc2sgaXMgQGMgaW9zX2Jhc2U6OmFkanVzdGZpZWxkLgorICAgICovCisgICAgZm10ZmxhZ3MKKyAgICBzZXRmKGZtdGZsYWdzIF9fZm10ZmwsIGZtdGZsYWdzIF9fbWFzaykKKyAgICB7CisgICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOworICAgICAgX01fZmxhZ3MgJj0gfl9fbWFzazsKKyAgICAgIF9NX2ZsYWdzIHw9IChfX2ZtdGZsICYgX19tYXNrKTsKKyAgICAgIHJldHVybiBfX29sZDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBDbGVhcmluZyBmb3JtYXQgZmxhZ3MuCisgICAgICogIEBwYXJhbSAgbWFzayAgVGhlIGZsYWdzIHRvIHVuc2V0LgorICAgICAqCisgICAgICogIFRoaXMgZnVuY3Rpb24gY2xlYXJzIEBhIG1hc2sgaW4gdGhlIGZvcm1hdCBmbGFncy4KKyAgICAqLworICAgIHZvaWQKKyAgICB1bnNldGYoZm10ZmxhZ3MgX19tYXNrKQorICAgIHsgX01fZmxhZ3MgJj0gfl9fbWFzazsgfQorCisgICAgLyoqCisgICAgICogIEBicmllZiAgRmxhZ3MgYWNjZXNzLgorICAgICAqICBAcmV0dXJuICBUaGUgcHJlY2lzaW9uIHRvIGdlbmVyYXRlIG9uIGNlcnRhaW4gb3V0cHV0IG9wZXJhdGlvbnMuCisgICAgICoKKyAgICAgKiAgQmUgY2FyZWZ1bCBpZiB5b3UgdHJ5IHRvIGdpdmUgYSBkZWZpbml0aW9uIG9mIEBhIHByZWNpc2lvbiBoZXJlOyBzZWUKKyAgICAgKiAgRFIgMTg5LgorICAgICovCisgICAgc3RyZWFtc2l6ZQorICAgIHByZWNpc2lvbigpIGNvbnN0CisgICAgeyByZXR1cm4gX01fcHJlY2lzaW9uOyB9CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBDaGFuZ2luZyBmbGFncy4KKyAgICAgKiAgQHBhcmFtICBwcmVjICBUaGUgbmV3IHByZWNpc2lvbiB2YWx1ZS4KKyAgICAgKiAgQHJldHVybiAgVGhlIHByZXZpb3VzIHZhbHVlIG9mIHByZWNpc2lvbigpLgorICAgICovCisgICAgc3RyZWFtc2l6ZQorICAgIHByZWNpc2lvbihzdHJlYW1zaXplIF9fcHJlYykKKyAgICB7CisgICAgICBzdHJlYW1zaXplIF9fb2xkID0gX01fcHJlY2lzaW9uOworICAgICAgX01fcHJlY2lzaW9uID0gX19wcmVjOworICAgICAgcmV0dXJuIF9fb2xkOworICAgIH0KKworICAgIC8qKgorICAgICAqICBAYnJpZWYgIEZsYWdzIGFjY2Vzcy4KKyAgICAgKiAgQHJldHVybiAgVGhlIG1pbmltdW0gZmllbGQgd2lkdGggdG8gZ2VuZXJhdGUgb24gb3V0cHV0IG9wZXJhdGlvbnMuCisgICAgICoKKyAgICAgKiAgPGVtPk1pbmltdW0gZmllbGQgd2lkdGg8L2VtPiByZWZlcnMgdG8gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzLgorICAgICovCisgICAgc3RyZWFtc2l6ZQorICAgIHdpZHRoKCkgY29uc3QKKyAgICB7IHJldHVybiBfTV93aWR0aDsgfQorCisgICAgLyoqCisgICAgICogIEBicmllZiAgQ2hhbmdpbmcgZmxhZ3MuCisgICAgICogIEBwYXJhbSAgd2lkZSAgVGhlIG5ldyB3aWR0aCB2YWx1ZS4KKyAgICAgKiAgQHJldHVybiAgVGhlIHByZXZpb3VzIHZhbHVlIG9mIHdpZHRoKCkuCisgICAgKi8KKyAgICBzdHJlYW1zaXplCisgICAgd2lkdGgoc3RyZWFtc2l6ZSBfX3dpZGUpCisgICAgeworICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9IF9NX3dpZHRoOworICAgICAgX01fd2lkdGggPSBfX3dpZGU7CisgICAgICByZXR1cm4gX19vbGQ7CisgICAgfQorCisgICAgLy8gWzI3LjQuMi40XSBpb3NfYmFzZSBzdGF0aWMgbWVtYmVycworICAgIC8qKgorICAgICAqICBAYnJpZWYgIEludGVyYWN0aW9uIHdpdGggdGhlIHN0YW5kYXJkIEMgSS9PIG9iamVjdHMuCisgICAgICogIEBwYXJhbSAgc3luYyAgV2hldGhlciB0byBzeW5jaHJvbml6ZSBvciBub3QuCisgICAgICogIEByZXR1cm4gIFRydWUgaWYgdGhlIHN0YW5kYXJkIHN0cmVhbXMgd2VyZSBwcmV2aW91c2x5IHN5bmNocm9uaXplZC4KKyAgICAgKgorICAgICAqICBUaGUgc3luY2hyb25pemF0aW9uIHJlZmVycmVkIHRvIGlzIEBlIG9ubHkgdGhhdCBiZXR3ZWVuIHRoZSBzdGFuZGFyZAorICAgICAqICBDIGZhY2lsaXRpZXMgKGUuZy4sIHN0ZG91dCkgYW5kIHRoZSBzdGFuZGFyZCBDKysgb2JqZWN0cyAoZS5nLiwKKyAgICAgKiAgY291dCkuICBVc2VyLWRlY2xhcmVkIHN0cmVhbXMgYXJlIHVuYWZmZWN0ZWQuICBTZWUKKyAgICAgKiAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL21hbnVhbC9iazAxcHQxMWNoMjhzMDIuaHRtbAorICAgICovCisgICAgc3RhdGljIGJvb2wKKyAgICBzeW5jX3dpdGhfc3RkaW8oYm9vbCBfX3N5bmMgPSB0cnVlKTsKKworICAgIC8vIFsyNy40LjIuM10gaW9zX2Jhc2UgbG9jYWxlIGZ1bmN0aW9ucworICAgIC8qKgorICAgICAqICBAYnJpZWYgIFNldHRpbmcgYSBuZXcgbG9jYWxlLgorICAgICAqICBAcGFyYW0gIGxvYyAgVGhlIG5ldyBsb2NhbGUuCisgICAgICogIEByZXR1cm4gIFRoZSBwcmV2aW91cyBsb2NhbGUuCisgICAgICoKKyAgICAgKiAgU2V0cyB0aGUgbmV3IGxvY2FsZSBmb3IgdGhpcyBzdHJlYW0sIGFuZCB0aGVuIGludm9rZXMgZWFjaCBjYWxsYmFjaworICAgICAqICB3aXRoIGltYnVlX2V2ZW50LgorICAgICovCisgICAgbG9jYWxlCisgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKTsKKworICAgIC8qKgorICAgICAqICBAYnJpZWYgIExvY2FsZSBhY2Nlc3MKKyAgICAgKiAgQHJldHVybiAgQSBjb3B5IG9mIHRoZSBjdXJyZW50IGxvY2FsZS4KKyAgICAgKgorICAgICAqICBJZiBAYyBpbWJ1ZShsb2MpIGhhcyBwcmV2aW91c2x5IGJlZW4gY2FsbGVkLCB0aGVuIHRoaXMgZnVuY3Rpb24KKyAgICAgKiAgcmV0dXJucyBAYyBsb2MuICBPdGhlcndpc2UsIGl0IHJldHVybnMgYSBjb3B5IG9mIEBjIHN0ZDo6bG9jYWxlKCksCisgICAgICogIHRoZSBnbG9iYWwgQysrIGxvY2FsZS4KKyAgICAqLworICAgIGxvY2FsZQorICAgIGdldGxvYygpIGNvbnN0CisgICAgeyByZXR1cm4gX01faW9zX2xvY2FsZTsgfQorCisgICAgLyoqCisgICAgICogIEBicmllZiAgTG9jYWxlIGFjY2VzcworICAgICAqICBAcmV0dXJuICBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBsb2NhbGUuCisgICAgICoKKyAgICAgKiAgTGlrZSBnZXRsb2MgYWJvdmUsIGJ1dCByZXR1cm5zIGEgcmVmZXJlbmNlIGluc3RlYWQgb2YKKyAgICAgKiAgZ2VuZXJhdGluZyBhIGNvcHkuCisgICAgKi8KKyAgICBjb25zdCBsb2NhbGUmCisgICAgX01fZ2V0bG9jKCkgY29uc3QKKyAgICB7IHJldHVybiBfTV9pb3NfbG9jYWxlOyB9CisKKyAgICAvLyBbMjcuNC4yLjVdIGlvc19iYXNlIHN0b3JhZ2UgZnVuY3Rpb25zCisgICAgLyoqCisgICAgICogIEBicmllZiAgQWNjZXNzIHRvIHVuaXF1ZSBpbmRpY2VzLgorICAgICAqICBAcmV0dXJuICBBbiBpbnRlZ2VyIGRpZmZlcmVudCBmcm9tIGFsbCBwcmV2aW91cyBjYWxscy4KKyAgICAgKgorICAgICAqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSB1bmlxdWUgaW50ZWdlciBldmVyeSB0aW1lIGl0IGlzIGNhbGxlZC4gIEl0CisgICAgICogIGNhbiBiZSB1c2VkIGZvciBhbnkgcHVycG9zZSwgYnV0IGlzIHByaW1hcmlseSBpbnRlbmRlZCB0byBiZSBhIHVuaXF1ZQorICAgICAqICBpbmRleCBmb3IgdGhlIGl3b3JkIGFuZCBwd29yZCBmdW5jdGlvbnMuICBUaGUgZXhwZWN0YXRpb24gaXMgdGhhdCBhbgorICAgICAqICBhcHBsaWNhdGlvbiBjYWxscyB4YWxsb2MgaW4gb3JkZXIgdG8gb2J0YWluIGFuIGluZGV4IGluIHRoZSBpd29yZCBhbmQKKyAgICAgKiAgcHdvcmQgYXJyYXlzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aG91dCBmZWFyIG9mIGNvbmZsaWN0LgorICAgICAqCisgICAgICogIFRoZSBpbXBsZW1lbnRhdGlvbiBtYWludGFpbnMgYSBzdGF0aWMgdmFyaWFibGUgdGhhdCBpcyBpbmNyZW1lbnRlZCBhbmQKKyAgICAgKiAgcmV0dXJuZWQgb24gZWFjaCBpbnZvY2F0aW9uLiAgeGFsbG9jIGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIGFuIGluZGV4CisgICAgICogIHRoYXQgaXMgc2FmZSB0byB1c2UgaW4gdGhlIGl3b3JkIGFuZCBwd29yZCBhcnJheXMuCisgICAgKi8KKyAgICBzdGF0aWMgaW50CisgICAgeGFsbG9jKCkgdGhyb3coKTsKKworICAgIC8qKgorICAgICAqICBAYnJpZWYgIEFjY2VzcyB0byBpbnRlZ2VyIGFycmF5LgorICAgICAqICBAcGFyYW0gIF9faXggIEluZGV4IGludG8gdGhlIGFycmF5LgorICAgICAqICBAcmV0dXJuICBBIHJlZmVyZW5jZSB0byBhbiBpbnRlZ2VyIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5kZXguCisgICAgICoKKyAgICAgKiAgVGhlIGl3b3JkIGZ1bmN0aW9uIHByb3ZpZGVzIGFjY2VzcyB0byBhbiBhcnJheSBvZiBpbnRlZ2VycyB0aGF0IGNhbiBiZQorICAgICAqICB1c2VkIGZvciBhbnkgcHVycG9zZS4gIFRoZSBhcnJheSBncm93cyBhcyByZXF1aXJlZCB0byBob2xkIHRoZQorICAgICAqICBzdXBwbGllZCBpbmRleC4gIEFsbCBpbnRlZ2VycyBpbiB0aGUgYXJyYXkgYXJlIGluaXRpYWxpemVkIHRvIDAuCisgICAgICoKKyAgICAgKiAgVGhlIGltcGxlbWVudGF0aW9uIHJlc2VydmVzIHNldmVyYWwgaW5kaWNlcy4gIFlvdSBzaG91bGQgdXNlIHhhbGxvYyB0bworICAgICAqICBvYnRhaW4gYW4gaW5kZXggdGhhdCBpcyBzYWZlIHRvIHVzZS4gIEFsc28gbm90ZSB0aGF0IHNpbmNlIHRoZSBhcnJheQorICAgICAqICBjYW4gZ3JvdyBkeW5hbWljYWxseSwgaXQgaXMgbm90IHNhZmUgdG8gaG9sZCBvbnRvIHRoZSByZWZlcmVuY2UuCisgICAgKi8KKyAgICBsb25nJgorICAgIGl3b3JkKGludCBfX2l4KQorICAgIHsKKyAgICAgIF9Xb3JkcyYgX193b3JkID0gKF9faXggPCBfTV93b3JkX3NpemUpCisJCQk/IF9NX3dvcmRbX19peF0gOiBfTV9ncm93X3dvcmRzKF9faXgsIHRydWUpOworICAgICAgcmV0dXJuIF9fd29yZC5fTV9pd29yZDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBBY2Nlc3MgdG8gdm9pZCBwb2ludGVyIGFycmF5LgorICAgICAqICBAcGFyYW0gIF9faXggIEluZGV4IGludG8gdGhlIGFycmF5LgorICAgICAqICBAcmV0dXJuICBBIHJlZmVyZW5jZSB0byBhIHZvaWQqIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5kZXguCisgICAgICoKKyAgICAgKiAgVGhlIHB3b3JkIGZ1bmN0aW9uIHByb3ZpZGVzIGFjY2VzcyB0byBhbiBhcnJheSBvZiBwb2ludGVycyB0aGF0IGNhbiBiZQorICAgICAqICB1c2VkIGZvciBhbnkgcHVycG9zZS4gIFRoZSBhcnJheSBncm93cyBhcyByZXF1aXJlZCB0byBob2xkIHRoZQorICAgICAqICBzdXBwbGllZCBpbmRleC4gIEFsbCBwb2ludGVycyBpbiB0aGUgYXJyYXkgYXJlIGluaXRpYWxpemVkIHRvIDAuCisgICAgICoKKyAgICAgKiAgVGhlIGltcGxlbWVudGF0aW9uIHJlc2VydmVzIHNldmVyYWwgaW5kaWNlcy4gIFlvdSBzaG91bGQgdXNlIHhhbGxvYyB0bworICAgICAqICBvYnRhaW4gYW4gaW5kZXggdGhhdCBpcyBzYWZlIHRvIHVzZS4gIEFsc28gbm90ZSB0aGF0IHNpbmNlIHRoZSBhcnJheQorICAgICAqICBjYW4gZ3JvdyBkeW5hbWljYWxseSwgaXQgaXMgbm90IHNhZmUgdG8gaG9sZCBvbnRvIHRoZSByZWZlcmVuY2UuCisgICAgKi8KKyAgICB2b2lkKiYKKyAgICBwd29yZChpbnQgX19peCkKKyAgICB7CisgICAgICBfV29yZHMmIF9fd29yZCA9IChfX2l4IDwgX01fd29yZF9zaXplKQorCQkJPyBfTV93b3JkW19faXhdIDogX01fZ3Jvd193b3JkcyhfX2l4LCBmYWxzZSk7CisgICAgICByZXR1cm4gX193b3JkLl9NX3B3b3JkOworICAgIH0KKworICAgIC8vIERlc3RydWN0b3IKKyAgICAvKioKKyAgICAgKiAgSW52b2tlcyBlYWNoIGNhbGxiYWNrIHdpdGggZXJhc2VfZXZlbnQuICBEZXN0cm95cyBsb2NhbCBzdG9yYWdlLgorICAgICAqCisgICAgICogIE5vdGUgdGhhdCB0aGUgaW9zX2Jhc2Ugb2JqZWN0IGZvciB0aGUgc3RhbmRhcmQgc3RyZWFtcyBuZXZlciBnZXRzCisgICAgICogIGRlc3Ryb3llZC4gIEFzIGEgcmVzdWx0LCBhbnkgY2FsbGJhY2tzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgc3RhbmRhcmQKKyAgICAgKiAgc3RyZWFtcyB3aWxsIG5vdCBnZXQgaW52b2tlZCB3aXRoIGVyYXNlX2V2ZW50ICh1bmxlc3MgY29weWZtdCBpcworICAgICAqICB1c2VkKS4KKyAgICAqLworICAgIHZpcnR1YWwgfmlvc19iYXNlKCk7CisKKyAgcHJvdGVjdGVkOgorICAgIGlvc19iYXNlKCkgdGhyb3cgKCk7CisKKyAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAvLyA1MC4gIENvcHkgY29uc3RydWN0b3IgYW5kIGFzc2lnbm1lbnQgb3BlcmF0b3Igb2YgaW9zX2Jhc2UKKyAgcHJpdmF0ZToKKyAgICBpb3NfYmFzZShjb25zdCBpb3NfYmFzZSYpOworCisgICAgaW9zX2Jhc2UmCisgICAgb3BlcmF0b3I9KGNvbnN0IGlvc19iYXNlJik7CisgIH07CisKKyAgLy8gWzI3LjQuNS4xXSBmbXRmbGFncyBtYW5pcHVsYXRvcnMKKyAgLy8vIENhbGxzIGJhc2Uuc2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhhKS4KKyAgaW5saW5lIGlvc19iYXNlJgorICBib29sYWxwaGEoaW9zX2Jhc2UmIF9fYmFzZSkKKyAgeworICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpib29sYWxwaGEpOworICAgIHJldHVybiBfX2Jhc2U7CisgIH0KKworICAvLy8gQ2FsbHMgYmFzZS51bnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSkuCisgIGlubGluZSBpb3NfYmFzZSYKKyAgbm9ib29sYWxwaGEoaW9zX2Jhc2UmIF9fYmFzZSkKKyAgeworICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7CisgICAgcmV0dXJuIF9fYmFzZTsKKyAgfQorCisgIC8vLyBDYWxscyBiYXNlLnNldGYoaW9zX2Jhc2U6OnNob3diYXNlKS4KKyAgaW5saW5lIGlvc19iYXNlJgorICBzaG93YmFzZShpb3NfYmFzZSYgX19iYXNlKQorICB7CisgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3diYXNlKTsKKyAgICByZXR1cm4gX19iYXNlOworICB9CisKKyAgLy8vIENhbGxzIGJhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93YmFzZSkuCisgIGlubGluZSBpb3NfYmFzZSYKKyAgbm9zaG93YmFzZShpb3NfYmFzZSYgX19iYXNlKQorICB7CisgICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOworICAgIHJldHVybiBfX2Jhc2U7CisgIH0KKworICAvLy8gQ2FsbHMgYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpLgorICBpbmxpbmUgaW9zX2Jhc2UmCisgIHNob3dwb2ludChpb3NfYmFzZSYgX19iYXNlKQorICB7CisgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb2ludCk7CisgICAgcmV0dXJuIF9fYmFzZTsKKyAgfQorCisgIC8vLyBDYWxscyBiYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KS4KKyAgaW5saW5lIGlvc19iYXNlJgorICBub3Nob3dwb2ludChpb3NfYmFzZSYgX19iYXNlKQorICB7CisgICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKKyAgICByZXR1cm4gX19iYXNlOworICB9CisKKyAgLy8vIENhbGxzIGJhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3BvcykuCisgIGlubGluZSBpb3NfYmFzZSYKKyAgc2hvd3Bvcyhpb3NfYmFzZSYgX19iYXNlKQorICB7CisgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpOworICAgIHJldHVybiBfX2Jhc2U7CisgIH0KKworICAvLy8gQ2FsbHMgYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpLgorICBpbmxpbmUgaW9zX2Jhc2UmCisgIG5vc2hvd3Bvcyhpb3NfYmFzZSYgX19iYXNlKQorICB7CisgICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7CisgICAgcmV0dXJuIF9fYmFzZTsKKyAgfQorCisgIC8vLyBDYWxscyBiYXNlLnNldGYoaW9zX2Jhc2U6OnNraXB3cykuCisgIGlubGluZSBpb3NfYmFzZSYKKyAgc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCisgIHsKKyAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2tpcHdzKTsKKyAgICByZXR1cm4gX19iYXNlOworICB9CisKKyAgLy8vIENhbGxzIGJhc2UudW5zZXRmKGlvc19iYXNlOjpza2lwd3MpLgorICBpbmxpbmUgaW9zX2Jhc2UmCisgIG5vc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCisgIHsKKyAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpza2lwd3MpOworICAgIHJldHVybiBfX2Jhc2U7CisgIH0KKworICAvLy8gQ2FsbHMgYmFzZS5zZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpLgorICBpbmxpbmUgaW9zX2Jhc2UmCisgIHVwcGVyY2FzZShpb3NfYmFzZSYgX19iYXNlKQorICB7CisgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CisgICAgcmV0dXJuIF9fYmFzZTsKKyAgfQorCisgIC8vLyBDYWxscyBiYXNlLnVuc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKS4KKyAgaW5saW5lIGlvc19iYXNlJgorICBub3VwcGVyY2FzZShpb3NfYmFzZSYgX19iYXNlKQorICB7CisgICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsKKyAgICByZXR1cm4gX19iYXNlOworICB9CisKKyAgLy8vIENhbGxzIGJhc2Uuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1ZikuCisgIGlubGluZSBpb3NfYmFzZSYKKyAgdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQorICB7CisgICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsKKyAgICAgcmV0dXJuIF9fYmFzZTsKKyAgfQorCisgIC8vLyBDYWxscyBiYXNlLnVuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1ZikuCisgIGlubGluZSBpb3NfYmFzZSYKKyAgbm91bml0YnVmKGlvc19iYXNlJiBfX2Jhc2UpCisgIHsKKyAgICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CisgICAgIHJldHVybiBfX2Jhc2U7CisgIH0KKworICAvLyBbMjcuNC41LjJdIGFkanVzdGZpZWxkIG1hbmlwdWxhdG9ycworICAvLy8gQ2FsbHMgYmFzZS5zZXRmKGlvc19iYXNlOjppbnRlcm5hbCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKS4KKyAgaW5saW5lIGlvc19iYXNlJgorICBpbnRlcm5hbChpb3NfYmFzZSYgX19iYXNlKQorICB7CisgICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjppbnRlcm5hbCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKKyAgICAgcmV0dXJuIF9fYmFzZTsKKyAgfQorCisgIC8vLyBDYWxscyBiYXNlLnNldGYoaW9zX2Jhc2U6OmxlZnQsIGlvc19iYXNlOjphZGp1c3RmaWVsZCkuCisgIGlubGluZSBpb3NfYmFzZSYKKyAgbGVmdChpb3NfYmFzZSYgX19iYXNlKQorICB7CisgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmxlZnQsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CisgICAgcmV0dXJuIF9fYmFzZTsKKyAgfQorCisgIC8vLyBDYWxscyBiYXNlLnNldGYoaW9zX2Jhc2U6OnJpZ2h0LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpLgorICBpbmxpbmUgaW9zX2Jhc2UmCisgIHJpZ2h0KGlvc19iYXNlJiBfX2Jhc2UpCisgIHsKKyAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6cmlnaHQsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CisgICAgcmV0dXJuIF9fYmFzZTsKKyAgfQorCisgIC8vIFsyNy40LjUuM10gYmFzZWZpZWxkIG1hbmlwdWxhdG9ycworICAvLy8gQ2FsbHMgYmFzZS5zZXRmKGlvc19iYXNlOjpkZWMsIGlvc19iYXNlOjpiYXNlZmllbGQpLgorICBpbmxpbmUgaW9zX2Jhc2UmCisgIGRlYyhpb3NfYmFzZSYgX19iYXNlKQorICB7CisgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmRlYywgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CisgICAgcmV0dXJuIF9fYmFzZTsKKyAgfQorCisgIC8vLyBDYWxscyBiYXNlLnNldGYoaW9zX2Jhc2U6OmhleCwgaW9zX2Jhc2U6OmJhc2VmaWVsZCkuCisgIGlubGluZSBpb3NfYmFzZSYKKyAgaGV4KGlvc19iYXNlJiBfX2Jhc2UpCisgIHsKKyAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aGV4LCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKKyAgICByZXR1cm4gX19iYXNlOworICB9CisKKyAgLy8vIENhbGxzIGJhc2Uuc2V0Zihpb3NfYmFzZTo6b2N0LCBpb3NfYmFzZTo6YmFzZWZpZWxkKS4KKyAgaW5saW5lIGlvc19iYXNlJgorICBvY3QoaW9zX2Jhc2UmIF9fYmFzZSkKKyAgeworICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpvY3QsIGlvc19iYXNlOjpiYXNlZmllbGQpOworICAgIHJldHVybiBfX2Jhc2U7CisgIH0KKworICAvLyBbMjcuNC41LjRdIGZsb2F0ZmllbGQgbWFuaXB1bGF0b3JzCisgIC8vLyBDYWxscyBiYXNlLnNldGYoaW9zX2Jhc2U6OmZpeGVkLCBpb3NfYmFzZTo6ZmxvYXRmaWVsZCkuCisgIGlubGluZSBpb3NfYmFzZSYKKyAgZml4ZWQoaW9zX2Jhc2UmIF9fYmFzZSkKKyAgeworICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpmaXhlZCwgaW9zX2Jhc2U6OmZsb2F0ZmllbGQpOworICAgIHJldHVybiBfX2Jhc2U7CisgIH0KKworICAvLy8gQ2FsbHMgYmFzZS5zZXRmKGlvc19iYXNlOjpzY2llbnRpZmljLCBpb3NfYmFzZTo6ZmxvYXRmaWVsZCkuCisgIGlubGluZSBpb3NfYmFzZSYKKyAgc2NpZW50aWZpYyhpb3NfYmFzZSYgX19iYXNlKQorICB7CisgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNjaWVudGlmaWMsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsKKyAgICByZXR1cm4gX19iYXNlOworICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI3VuZGVmIF9JT1NfQkFTRV9TRUVLX0NVUgorI3VuZGVmIF9JT1NfQkFTRV9TRUVLX0VORAorCisjZW5kaWYgLyogX0lPU19CQVNFX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2lzdHJlYW0udGNjIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2lzdHJlYW0udGNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMDVmNzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvaXN0cmVhbS50Y2MKQEAgLTAsMCArMSwxMDcyIEBACisvLyBpc3RyZWFtIGNsYXNzZXMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LAorLy8gMjAwNiwgMjAwNywgMjAwOCwgMjAwOQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGlzdHJlYW0udGNjCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyNy42LjEgIElucHV0IHN0cmVhbXMKKy8vCisKKyNpZm5kZWYgX0lTVFJFQU1fVENDCisjZGVmaW5lIF9JU1RSRUFNX1RDQyAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGN4eGFiaS1mb3JjZWQuaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnk6OgorICAgIHNlbnRyeShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIGJvb2wgX19ub3NraXApIDogX01fb2soZmFsc2UpCisgICAgeworICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6Z29vZGJpdDsKKyAgICAgIGlmIChfX2luLmdvb2QoKSkKKwl7CisJICBpZiAoX19pbi50aWUoKSkKKwkgICAgX19pbi50aWUoKS0+Zmx1c2goKTsKKwkgIGlmICghX19ub3NraXAgJiYgYm9vbChfX2luLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2tpcHdzKSkKKwkgICAgeworCSAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CisJICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKKwkgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CisKKwkgICAgICBjb25zdCBfX2N0eXBlX3R5cGUmIF9fY3QgPSBfX2NoZWNrX2ZhY2V0KF9faW4uX01fY3R5cGUpOworCSAgICAgIHdoaWxlICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCisJCSAgICAgJiYgX19jdC5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgCisJCQkJdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKSkKKwkJX19jID0gX19zYi0+c25leHRjKCk7CisKKwkgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJICAgICAgLy8gMTk1LiBTaG91bGQgYmFzaWNfaXN0cmVhbTo6c2VudHJ5J3MgY29uc3RydWN0b3IgZXZlcgorCSAgICAgIC8vIHNldCBlb2ZiaXQ/CisJICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKKwkJX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKKwkgICAgfQorCX0KKworICAgICAgaWYgKF9faW4uZ29vZCgpICYmIF9fZXJyID09IGlvc19iYXNlOjpnb29kYml0KQorCV9NX29rID0gdHJ1ZTsKKyAgICAgIGVsc2UKKwl7CisJICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKwkgIF9faW4uc2V0c3RhdGUoX19lcnIpOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CisgICAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgorICAgICAgX01fZXh0cmFjdChfVmFsdWVUJiBfX3YpCisgICAgICB7CisJc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOworCWlmIChfX2NlcmIpCisJICB7CisJICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisJICAgIF9fdHJ5CisJICAgICAgeworCQljb25zdCBfX251bV9nZXRfdHlwZSYgX19uZyA9IF9fY2hlY2tfZmFjZXQodGhpcy0+X01fbnVtX2dldCk7CisJCV9fbmcuZ2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fdik7CisJICAgICAgfQorCSAgICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgICAgeworCQl0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKKwkJX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgICAgfQorCSAgICBfX2NhdGNoKC4uLikKKwkgICAgICB7IHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOyB9CisJICAgIGlmIChfX2VycikKKwkgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CisJICB9CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBvcGVyYXRvcj4+KHNob3J0JiBfX24pCisgICAgeworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMTE4LiBiYXNpY19pc3RyZWFtIHVzZXMgbm9uZXhpc3RlbnQgbnVtX2dldCBtZW1iZXIgZnVuY3Rpb25zLgorICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOworICAgICAgaWYgKF9fY2VyYikKKwl7CisJICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpnb29kYml0OworCSAgX190cnkKKwkgICAgeworCSAgICAgIGxvbmcgX19sOworCSAgICAgIGNvbnN0IF9fbnVtX2dldF90eXBlJiBfX25nID0gX19jaGVja19mYWNldCh0aGlzLT5fTV9udW1fZ2V0KTsKKwkgICAgICBfX25nLmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX2wpOworCisJICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCSAgICAgIC8vIDY5Ni4gaXN0cmVhbTo6b3BlcmF0b3I+PihpbnQmKSBicm9rZW4uCisJICAgICAgaWYgKF9fbCA8IF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxzaG9ydD46Ol9fbWluKQorCQl7CisJCSAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJCSAgX19uID0gX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPHNob3J0Pjo6X19taW47CisJCX0KKwkgICAgICBlbHNlIGlmIChfX2wgPiBfX2dudV9jeHg6Ol9fbnVtZXJpY190cmFpdHM8c2hvcnQ+OjpfX21heCkKKwkJeworCQkgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworCQkgIF9fbiA9IF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxzaG9ydD46Ol9fbWF4OworCQl9CisJICAgICAgZWxzZQorCQlfX24gPSBzaG9ydChfX2wpOworCSAgICB9CisJICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgIHsKKwkgICAgICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7IH0KKwkgIGlmIChfX2VycikKKwkgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOworCX0KKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIG9wZXJhdG9yPj4oaW50JiBfX24pCisgICAgeworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMTE4LiBiYXNpY19pc3RyZWFtIHVzZXMgbm9uZXhpc3RlbnQgbnVtX2dldCBtZW1iZXIgZnVuY3Rpb25zLgorICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOworICAgICAgaWYgKF9fY2VyYikKKwl7CisJICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpnb29kYml0OworCSAgX190cnkKKwkgICAgeworCSAgICAgIGxvbmcgX19sOworCSAgICAgIGNvbnN0IF9fbnVtX2dldF90eXBlJiBfX25nID0gX19jaGVja19mYWNldCh0aGlzLT5fTV9udW1fZ2V0KTsKKwkgICAgICBfX25nLmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX2wpOworCisJICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCSAgICAgIC8vIDY5Ni4gaXN0cmVhbTo6b3BlcmF0b3I+PihpbnQmKSBicm9rZW4uCisJICAgICAgaWYgKF9fbCA8IF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxpbnQ+OjpfX21pbikKKwkJeworCQkgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworCQkgIF9fbiA9IF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxpbnQ+OjpfX21pbjsKKwkJfQorCSAgICAgIGVsc2UgaWYgKF9fbCA+IF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxpbnQ+OjpfX21heCkKKwkJeworCQkgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwkgICAgICAKKwkJICBfX24gPSBfX2dudV9jeHg6Ol9fbnVtZXJpY190cmFpdHM8aW50Pjo6X19tYXg7CisJCX0KKwkgICAgICBlbHNlCisJCV9fbiA9IGludChfX2wpOworCSAgICB9CisJICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgIHsKKwkgICAgICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7IH0KKwkgIGlmIChfX2VycikKKwkgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOworCX0KKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIG9wZXJhdG9yPj4oX19zdHJlYW1idWZfdHlwZSogX19zYm91dCkKKyAgICB7CisgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpnb29kYml0OworICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOworICAgICAgaWYgKF9fY2VyYiAmJiBfX3Nib3V0KQorCXsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICBib29sIF9faW5lb2Y7CisJICAgICAgaWYgKCFfX2NvcHlfc3RyZWFtYnVmc19lb2YodGhpcy0+cmRidWYoKSwgX19zYm91dCwgX19pbmVvZikpCisJCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworCSAgICAgIGlmIChfX2luZW9mKQorCQlfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OworCSAgICB9CisJICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgIHsKKwkgICAgICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7IHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsgfQorCX0KKyAgICAgIGVsc2UgaWYgKCFfX3Nib3V0KQorCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICAgaWYgKF9fZXJyKQorCXRoaXMtPnNldHN0YXRlKF9fZXJyKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIGdldCh2b2lkKQorICAgIHsKKyAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOworICAgICAgaW50X3R5cGUgX19jID0gX19lb2Y7CisgICAgICBfTV9nY291bnQgPSAwOworICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6Z29vZGJpdDsKKyAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOworICAgICAgaWYgKF9fY2VyYikKKwl7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgX19jID0gdGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7CisJICAgICAgLy8gMjcuNi4xLjEgcGFyYWdyYXBoIDMKKwkgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKKwkJX01fZ2NvdW50ID0gMTsKKwkgICAgICBlbHNlCisJCV9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CisJICAgIH0KKwkgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwkgICAgeworCSAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeyB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsgfQorCX0KKyAgICAgIGlmICghX01fZ2NvdW50KQorCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICAgaWYgKF9fZXJyKQorCXRoaXMtPnNldHN0YXRlKF9fZXJyKTsKKyAgICAgIHJldHVybiBfX2M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBnZXQoY2hhcl90eXBlJiBfX2MpCisgICAgeworICAgICAgX01fZ2NvdW50ID0gMDsKKyAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisgICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKKyAgICAgIGlmIChfX2NlcmIpCisJeworCSAgX190cnkKKwkgICAgeworCSAgICAgIGNvbnN0IGludF90eXBlIF9fY2IgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsKKwkgICAgICAvLyAyNy42LjEuMSBwYXJhZ3JhcGggMworCSAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fY2IsIHRyYWl0c190eXBlOjplb2YoKSkpCisJCXsKKwkJICBfTV9nY291bnQgPSAxOworCQkgIF9fYyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jYik7CisJCX0KKwkgICAgICBlbHNlCisJCV9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CisJICAgIH0KKwkgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwkgICAgeworCSAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeyB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsgfQorCX0KKyAgICAgIGlmICghX01fZ2NvdW50KQorCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICAgaWYgKF9fZXJyKQorCXRoaXMtPnNldHN0YXRlKF9fZXJyKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQorICAgIHsKKyAgICAgIF9NX2djb3VudCA9IDA7CisgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpnb29kYml0OworICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CisgICAgICBpZiAoX19jZXJiKQorCXsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsKKwkgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKKwkgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKKwkgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOworCisJICAgICAgd2hpbGUgKF9NX2djb3VudCArIDEgPCBfX24KKwkJICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCisJCSAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKSkKKwkJeworCQkgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKKwkJICArK19NX2djb3VudDsKKwkJICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKKwkJfQorCSAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCisJCV9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CisJICAgIH0KKwkgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwkgICAgeworCSAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeyB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsgfQorCX0KKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDI0My4gZ2V0IGFuZCBnZXRsaW5lIHdoZW4gc2VudHJ5IHJlcG9ydHMgZmFpbHVyZS4KKyAgICAgIGlmIChfX24gPiAwKQorCSpfX3MgPSBjaGFyX3R5cGUoKTsKKyAgICAgIGlmICghX01fZ2NvdW50KQorCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICAgaWYgKF9fZXJyKQorCXRoaXMtPnNldHN0YXRlKF9fZXJyKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5cGUgX19kZWxpbSkKKyAgICB7CisgICAgICBfTV9nY291bnQgPSAwOworICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6Z29vZGJpdDsKKyAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOworICAgICAgaWYgKF9fY2VyYikKKwl7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CisJICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CisJICAgICAgX19zdHJlYW1idWZfdHlwZSogX190aGlzX3NiID0gdGhpcy0+cmRidWYoKTsKKwkgICAgICBpbnRfdHlwZSBfX2MgPSBfX3RoaXNfc2ItPnNnZXRjKCk7CisJICAgICAgY2hhcl90eXBlIF9fYzIgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CisKKwkgICAgICB3aGlsZSAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQorCQkgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSkKKwkJICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fc2Iuc3B1dGMoX19jMiksIF9fZW9mKSkKKwkJeworCQkgICsrX01fZ2NvdW50OworCQkgIF9fYyA9IF9fdGhpc19zYi0+c25leHRjKCk7CisJCSAgX19jMiA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKKwkJfQorCSAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCisJCV9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CisJICAgIH0KKwkgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwkgICAgeworCSAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeyB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsgfQorCX0KKyAgICAgIGlmICghX01fZ2NvdW50KQorCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICAgaWYgKF9fZXJyKQorCXRoaXMtPnNldHN0YXRlKF9fZXJyKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSkKKyAgICB7CisgICAgICBfTV9nY291bnQgPSAwOworICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6Z29vZGJpdDsKKyAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOworICAgICAgaWYgKF9fY2VyYikKKyAgICAgICAgeworICAgICAgICAgIF9fdHJ5CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOworICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKKyAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CisgICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CisKKyAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCArIDEgPCBfX24KKyAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKKyAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOworICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CisgICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCisgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBfX3NiLT5zYnVtcGMoKTsKKyAgICAgICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisJICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgIHsKKwkgICAgICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorICAgICAgICAgIF9fY2F0Y2goLi4uKQorICAgICAgICAgICAgeyB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsgfQorICAgICAgICB9CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyNDMuIGdldCBhbmQgZ2V0bGluZSB3aGVuIHNlbnRyeSByZXBvcnRzIGZhaWx1cmUuCisgICAgICBpZiAoX19uID4gMCkKKwkqX19zID0gY2hhcl90eXBlKCk7CisgICAgICBpZiAoIV9NX2djb3VudCkKKyAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgICBpZiAoX19lcnIpCisgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgLy8gV2UgcHJvdmlkZSB0aHJlZSBvdmVybG9hZHMsIHNpbmNlIHRoZSBmaXJzdCB0d28gYXJlIG11Y2ggc2ltcGxlcgorICAvLyB0aGFuIHRoZSBnZW5lcmFsIGNhc2UuIEFsc28sIHRoZSBsYXR0ZXIgdHdvIGNhbiB0aHVzIGFkb3B0IHRoZQorICAvLyBzYW1lICJiYXRjaHkiIHN0cmF0ZWd5IHVzZWQgYnkgZ2V0bGluZSBhYm92ZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIGlnbm9yZSh2b2lkKQorICAgIHsKKyAgICAgIF9NX2djb3VudCA9IDA7CisgICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKKyAgICAgIGlmIChfX2NlcmIpCisJeworCSAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6Z29vZGJpdDsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKKwkgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKKworCSAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19zYi0+c2J1bXBjKCksIF9fZW9mKSkKKwkJX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKKwkgICAgICBlbHNlCisJCV9NX2djb3VudCA9IDE7CisJICAgIH0KKwkgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwkgICAgeworCSAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeyB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsgfQorCSAgaWYgKF9fZXJyKQorCSAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CisJfQorICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CisgICAgaWdub3JlKHN0cmVhbXNpemUgX19uKQorICAgIHsKKyAgICAgIF9NX2djb3VudCA9IDA7CisgICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKKyAgICAgIGlmIChfX2NlcmIgJiYgX19uID4gMCkKKyAgICAgICAgeworICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisgICAgICAgICAgX190cnkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CisgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOworICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOworCisJICAgICAgLy8gTi5CLiBPbiBMRlMtZW5hYmxlZCBwbGF0Zm9ybXMgc3RyZWFtc2l6ZSBpcyBzdGlsbCAzMiBiaXRzCisJICAgICAgLy8gd2lkZTogaWYgd2Ugd2FudCB0byBpbXBsZW1lbnQgdGhlIHN0YW5kYXJkIG1hbmRhdGVkIGJlaGF2aW9yCisJICAgICAgLy8gZm9yIG4gPT0gbWF4KCkgKHNlZSAyNy42LjEuMy8yNCkgd2UgYXJlIGF0IHJpc2sgb2Ygc2lnbmVkCisJICAgICAgLy8gaW50ZWdlciBvdmVyZmxvdzogdGh1cyB0aGVzZSBjb250b3J0aW9ucy4gQWxzbyBub3RlIHRoYXQsCisJICAgICAgLy8gYnkgZGVmaW5pdGlvbiwgd2hlbiBtb3JlIHRoYW4gMkcgY2hhcnMgYXJlIGFjdHVhbGx5IGlnbm9yZWQsCisJICAgICAgLy8gX01fZ2NvdW50ICh0aGUgcmV0dXJuIHZhbHVlIG9mIGdjb3VudCwgdGhhdCBpcykgY2Fubm90IGJlCisJICAgICAgLy8gcmVhbGx5IGNvcnJlY3QsIGJlaW5nIHVuYXZvaWRhYmx5IHRvbyBzbWFsbC4KKwkgICAgICBib29sIF9fbGFyZ2VfaWdub3JlID0gZmFsc2U7CisJICAgICAgd2hpbGUgKHRydWUpCisJCXsKKwkJICB3aGlsZSAoX01fZ2NvdW50IDwgX19uCisJCQkgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKKwkJICAgIHsKKwkJICAgICAgKytfTV9nY291bnQ7CisJCSAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOworCQkgICAgfQorCQkgIGlmIChfX24gPT0gX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPHN0cmVhbXNpemU+OjpfX21heAorCQkgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQorCQkgICAgeworCQkgICAgICBfTV9nY291bnQgPQorCQkJX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPHN0cmVhbXNpemU+OjpfX21pbjsKKwkJICAgICAgX19sYXJnZV9pZ25vcmUgPSB0cnVlOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIGJyZWFrOworCQl9CisKKwkgICAgICBpZiAoX19sYXJnZV9pZ25vcmUpCisJCV9NX2djb3VudCA9IF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxzdHJlYW1zaXplPjo6X19tYXg7CisKKwkgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQorICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CisgICAgICAgICAgICB9CisJICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgIHsKKwkgICAgICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorICAgICAgICAgIF9fY2F0Y2goLi4uKQorICAgICAgICAgICAgeyB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsgfQorICAgICAgICAgIGlmIChfX2VycikKKyAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKKyAgICAgICAgfQorICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CisgICAgaWdub3JlKHN0cmVhbXNpemUgX19uLCBpbnRfdHlwZSBfX2RlbGltKQorICAgIHsKKyAgICAgIF9NX2djb3VudCA9IDA7CisgICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKKyAgICAgIGlmIChfX2NlcmIgJiYgX19uID4gMCkKKyAgICAgICAgeworICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisgICAgICAgICAgX190cnkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CisgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOworICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOworCisJICAgICAgLy8gU2VlIGNvbW1lbnQgYWJvdmUuCisJICAgICAgYm9vbCBfX2xhcmdlX2lnbm9yZSA9IGZhbHNlOworCSAgICAgIHdoaWxlICh0cnVlKQorCQl7CisJCSAgd2hpbGUgKF9NX2djb3VudCA8IF9fbgorCQkJICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKKwkJCSAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19kZWxpbSkpCisJCSAgICB7CisJCSAgICAgICsrX01fZ2NvdW50OworCQkgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKKwkJICAgIH0KKwkJICBpZiAoX19uID09IF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxzdHJlYW1zaXplPjo6X19tYXgKKwkJICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQorCQkgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19kZWxpbSkpCisJCSAgICB7CisJCSAgICAgIF9NX2djb3VudCA9CisJCQlfX2dudV9jeHg6Ol9fbnVtZXJpY190cmFpdHM8c3RyZWFtc2l6ZT46Ol9fbWluOworCQkgICAgICBfX2xhcmdlX2lnbm9yZSA9IHRydWU7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgYnJlYWs7CisJCX0KKworCSAgICAgIGlmIChfX2xhcmdlX2lnbm9yZSkKKwkJX01fZ2NvdW50ID0gX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPHN0cmVhbXNpemU+OjpfX21heDsKKworICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQorICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CisJICAgICAgZWxzZSBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19kZWxpbSkpCisJCXsKKwkJICBpZiAoX01fZ2NvdW50CisJCSAgICAgIDwgX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPHN0cmVhbXNpemU+OjpfX21heCkKKwkJICAgICsrX01fZ2NvdW50OworCQkgIF9fc2ItPnNidW1wYygpOworCQl9CisgICAgICAgICAgICB9CisJICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgIHsKKwkgICAgICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorICAgICAgICAgIF9fY2F0Y2goLi4uKQorICAgICAgICAgICAgeyB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsgfQorICAgICAgICAgIGlmIChfX2VycikKKyAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKKyAgICAgICAgfQorICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CisgICAgcGVlayh2b2lkKQorICAgIHsKKyAgICAgIGludF90eXBlIF9fYyA9IHRyYWl0c190eXBlOjplb2YoKTsKKyAgICAgIF9NX2djb3VudCA9IDA7CisgICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKKyAgICAgIGlmIChfX2NlcmIpCisJeworCSAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6Z29vZGJpdDsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0YygpOworCSAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQorCQlfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OworCSAgICB9CisJICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgIHsKKwkgICAgICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7IH0KKwkgIGlmIChfX2VycikKKwkgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOworCX0KKyAgICAgIHJldHVybiBfX2M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKKyAgICB7CisgICAgICBfTV9nY291bnQgPSAwOworICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CisgICAgICBpZiAoX19jZXJiKQorCXsKKwkgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgX01fZ2NvdW50ID0gdGhpcy0+cmRidWYoKS0+c2dldG4oX19zLCBfX24pOworCSAgICAgIGlmIChfTV9nY291bnQgIT0gX19uKQorCQlfX2VyciB8PSAoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsKKwkgICAgfQorCSAgX19jYXRjaChfX2N4eGFiaXYxOjpfX2ZvcmNlZF91bndpbmQmKQorCSAgICB7CisJICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7IHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOyB9CisJICBpZiAoX19lcnIpCisJICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKKwl9CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdHJlYW1zaXplCisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICByZWFkc29tZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCisgICAgeworICAgICAgX01fZ2NvdW50ID0gMDsKKyAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOworICAgICAgaWYgKF9fY2VyYikKKwl7CisJICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpnb29kYml0OworCSAgX190cnkKKwkgICAgeworCSAgICAgIC8vIENhbm5vdCBjb21wYXJlIGludF90eXBlIHdpdGggc3RyZWFtc2l6ZSBnZW5lcmljYWxseS4KKwkgICAgICBjb25zdCBzdHJlYW1zaXplIF9fbnVtID0gdGhpcy0+cmRidWYoKS0+aW5fYXZhaWwoKTsKKwkgICAgICBpZiAoX19udW0gPiAwKQorCQlfTV9nY291bnQgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0bihfX3MsIHN0ZDo6bWluKF9fbnVtLCBfX24pKTsKKwkgICAgICBlbHNlIGlmIChfX251bSA9PSAtMSkKKwkJX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKKwkgICAgfQorCSAgX19jYXRjaChfX2N4eGFiaXYxOjpfX2ZvcmNlZF91bndpbmQmKQorCSAgICB7CisJICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7IHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOyB9CisJICBpZiAoX19lcnIpCisJICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKKwl9CisgICAgICByZXR1cm4gX01fZ2NvdW50OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CisgICAgcHV0YmFjayhjaGFyX3R5cGUgX19jKQorICAgIHsKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDYwLiBXaGF0IGlzIGEgZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uPworICAgICAgX01fZ2NvdW50ID0gMDsKKyAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOworICAgICAgaWYgKF9fY2VyYikKKwl7CisJICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpnb29kYml0OworCSAgX190cnkKKwkgICAgeworCSAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOworCSAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOworCSAgICAgIGlmICghX19zYgorCQkgIHx8IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3NiLT5zcHV0YmFja2MoX19jKSwgX19lb2YpKQorCQlfX2VyciB8PSBpb3NfYmFzZTo6YmFkYml0OworCSAgICB9CisJICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgIHsKKwkgICAgICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7IH0KKwkgIGlmIChfX2VycikKKwkgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOworCX0KKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIHVuZ2V0KHZvaWQpCisgICAgeworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNjAuIFdoYXQgaXMgYSBmb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24/CisgICAgICBfTV9nY291bnQgPSAwOworICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CisgICAgICBpZiAoX19jZXJiKQorCXsKKwkgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CisJICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CisJICAgICAgaWYgKCFfX3NiCisJCSAgfHwgdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fc2ItPnN1bmdldGMoKSwgX19lb2YpKQorCQlfX2VyciB8PSBpb3NfYmFzZTo6YmFkYml0OworCSAgICB9CisJICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgIHsKKwkgICAgICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7IH0KKwkgIGlmIChfX2VycikKKwkgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOworCX0KKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGludAorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CisgICAgc3luYyh2b2lkKQorICAgIHsKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSNjAuICBEbyBub3QgY2hhbmdlIF9NX2djb3VudC4KKyAgICAgIGludCBfX3JldCA9IC0xOworICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CisgICAgICBpZiAoX19jZXJiKQorCXsKKwkgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CisJICAgICAgaWYgKF9fc2IpCisJCXsKKwkJICBpZiAoX19zYi0+cHVic3luYygpID09IC0xKQorCQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmJhZGJpdDsKKwkJICBlbHNlCisJCSAgICBfX3JldCA9IDA7CisJCX0KKwkgICAgfQorCSAgX19jYXRjaChfX2N4eGFiaXYxOjpfX2ZvcmNlZF91bndpbmQmKQorCSAgICB7CisJICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7IHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOyB9CisJICBpZiAoX19lcnIpCisJICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKKwl9CisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICB0eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlCisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICB0ZWxsZyh2b2lkKQorICAgIHsKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSNjAuICBEbyBub3QgY2hhbmdlIF9NX2djb3VudC4KKyAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOworICAgICAgX190cnkKKwl7CisJICBpZiAoIXRoaXMtPmZhaWwoKSkKKwkgICAgX19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsCisJCQkJCSAgICAgIGlvc19iYXNlOjppbik7CisJfQorICAgICAgX19jYXRjaChfX2N4eGFiaXYxOjpfX2ZvcmNlZF91bndpbmQmKQorCXsKKwkgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgICAgX19jYXRjaCguLi4pCisJeyB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsgfQorICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CisgICAgc2Vla2cocG9zX3R5cGUgX19wb3MpCisgICAgeworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gRFI2MC4gIERvIG5vdCBjaGFuZ2UgX01fZ2NvdW50LgorICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6Z29vZGJpdDsKKyAgICAgIF9fdHJ5CisJeworCSAgaWYgKCF0aGlzLT5mYWlsKCkpCisJICAgIHsKKwkgICAgICAvLyAxMzYuICBzZWVrcCwgc2Vla2cgc2V0dGluZyB3cm9uZyBzdHJlYW1zPworCSAgICAgIGNvbnN0IHBvc190eXBlIF9fcCA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtwb3MoX19wb3MsCisJCQkJCQkJICAgICBpb3NfYmFzZTo6aW4pOworCSAgICAgIAorCSAgICAgIC8vIDEyOS4gIE5lZWQgZXJyb3IgaW5kaWNhdGlvbiBmcm9tIHNlZWtwKCkgYW5kIHNlZWtnKCkKKwkgICAgICBpZiAoX19wID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCisJCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworCSAgICB9CisJfQorICAgICAgX19jYXRjaChfX2N4eGFiaXYxOjpfX2ZvcmNlZF91bndpbmQmKQorCXsKKwkgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgICAgX19jYXRjaCguLi4pCisJeyB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsgfQorICAgICAgaWYgKF9fZXJyKQorCXRoaXMtPnNldHN0YXRlKF9fZXJyKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIHNlZWtnKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2RpcikKKyAgICB7CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUjYwLiAgRG8gbm90IGNoYW5nZSBfTV9nY291bnQuCisgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpnb29kYml0OworICAgICAgX190cnkKKwl7CisJICBpZiAoIXRoaXMtPmZhaWwoKSkKKwkgICAgeworCSAgICAgIC8vIDEzNi4gIHNlZWtwLCBzZWVrZyBzZXR0aW5nIHdyb25nIHN0cmVhbXM/CisJICAgICAgY29uc3QgcG9zX3R5cGUgX19wID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZihfX29mZiwgX19kaXIsCisJCQkJCQkJICAgICBpb3NfYmFzZTo6aW4pOworCSAgICAgIAorCSAgICAgIC8vIDEyOS4gIE5lZWQgZXJyb3IgaW5kaWNhdGlvbiBmcm9tIHNlZWtwKCkgYW5kIHNlZWtnKCkKKwkgICAgICBpZiAoX19wID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCisJCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworCSAgICB9CisJfQorICAgICAgX19jYXRjaChfX2N4eGFiaXYxOjpfX2ZvcmNlZF91bndpbmQmKQorCXsKKwkgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgICAgX19jYXRjaCguLi4pCisJeyB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsgfQorICAgICAgaWYgKF9fZXJyKQorCXRoaXMtPnNldHN0YXRlKF9fZXJyKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgLy8gMjcuNi4xLjIuMyBDaGFyYWN0ZXIgZXh0cmFjdGlvbiB0ZW1wbGF0ZXMKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpCisgICAgeworICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4JCV9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgICAgICAgICBfX2ludF90eXBlOworCisgICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CisgICAgICBpZiAoX19jZXJiKQorCXsKKwkgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2NiID0gX19pbi5yZGJ1ZigpLT5zYnVtcGMoKTsKKwkgICAgICBpZiAoIV9UcmFpdHM6OmVxX2ludF90eXBlKF9fY2IsIF9UcmFpdHM6OmVvZigpKSkKKwkJX19jID0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fY2IpOworCSAgICAgIGVsc2UKKwkJX19lcnIgfD0gKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CisJICAgIH0KKwkgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwkgICAgeworCSAgICAgIF9faW4uX01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7IF9faW4uX01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7IH0KKwkgIGlmIChfX2VycikKKwkgICAgX19pbi5zZXRzdGF0ZShfX2Vycik7CisJfQorICAgICAgcmV0dXJuIF9faW47CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCogX19zKQorICAgIHsKKyAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CQlfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gICAgICAgICAgX19zdHJlYW1idWZfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUJCWludF90eXBlOworICAgICAgdHlwZWRlZiBfQ2hhclQJCQkJCWNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPgkJCQlfX2N0eXBlX3R5cGU7CisKKyAgICAgIHN0cmVhbXNpemUgX19leHRyYWN0ZWQgPSAwOworICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6Z29vZGJpdDsKKyAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKKyAgICAgIGlmIChfX2NlcmIpCisJeworCSAgX190cnkKKwkgICAgeworCSAgICAgIC8vIEZpZ3VyZSBvdXQgaG93IG1hbnkgY2hhcmFjdGVycyB0byBleHRyYWN0LgorCSAgICAgIHN0cmVhbXNpemUgX19udW0gPSBfX2luLndpZHRoKCk7CisJICAgICAgaWYgKF9fbnVtIDw9IDApCisJCV9fbnVtID0gX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPHN0cmVhbXNpemU+OjpfX21heDsKKworCSAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdCA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOworCisJICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKKwkgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOworCSAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CisKKwkgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPCBfX251bSAtIDEKKwkJICAgICAmJiAhX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKKwkJICAgICAmJiAhX19jdC5pcyhjdHlwZV9iYXNlOjpzcGFjZSwKKwkJCQkgX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYykpKQorCQl7CisJCSAgKl9fcysrID0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYyk7CisJCSAgKytfX2V4dHJhY3RlZDsKKwkJICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKKwkJfQorCSAgICAgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKKwkJX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKKworCSAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkgICAgICAvLyA2OC4gIEV4dHJhY3RvcnMgZm9yIGNoYXIqIHNob3VsZCBzdG9yZSBudWxsIGF0IGVuZAorCSAgICAgICpfX3MgPSBjaGFyX3R5cGUoKTsKKwkgICAgICBfX2luLndpZHRoKDApOworCSAgICB9CisJICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgIHsKKwkgICAgICBfX2luLl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeyBfX2luLl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOyB9CisJfQorICAgICAgaWYgKCFfX2V4dHJhY3RlZCkKKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgIGlmIChfX2VycikKKwlfX2luLnNldHN0YXRlKF9fZXJyKTsKKyAgICAgIHJldHVybiBfX2luOworICAgIH0KKworICAvLyAyNy42LjEuNCBTdGFuZGFyZCBiYXNpY19pc3RyZWFtIG1hbmlwdWxhdG9ycworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIHdzKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbikKKyAgICB7CisgICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPgkJX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+ICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZQkJX19pbnRfdHlwZTsKKyAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPgkJCQlfX2N0eXBlX3R5cGU7CisKKyAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdCA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOworICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOworICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKKyAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKKworICAgICAgd2hpbGUgKCFfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQorCSAgICAgJiYgX19jdC5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYykpKQorCV9fYyA9IF9fc2ItPnNuZXh0YygpOworCisgICAgICAgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQorCSBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOworICAgICAgcmV0dXJuIF9faW47CisgICAgfQorCisgIC8vIEluaGliaXQgaW1wbGljaXQgaW5zdGFudGlhdGlvbnMgZm9yIHJlcXVpcmVkIGluc3RhbnRpYXRpb25zLAorICAvLyB3aGljaCBhcmUgZGVmaW5lZCB2aWEgZXhwbGljaXQgaW5zdGFudGlhdGlvbnMgZWxzZXdoZXJlLgorICAvLyBOQjogIFRoaXMgc3ludGF4IGlzIGEgR05VIGV4dGVuc2lvbi4KKyNpZiBfR0xJQkNYWF9FWFRFUk5fVEVNUExBVEUKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lzdHJlYW08Y2hhcj47CisgIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiB3cyhpc3RyZWFtJik7CisgIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBjaGFyJik7CisgIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBjaGFyKik7CisgIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCB1bnNpZ25lZCBjaGFyJik7CisgIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBzaWduZWQgY2hhciYpOworICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgdW5zaWduZWQgY2hhciopOworICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgc2lnbmVkIGNoYXIqKTsKKworICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgaXN0cmVhbTo6X01fZXh0cmFjdCh1bnNpZ25lZCBzaG9ydCYpOworICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgaXN0cmVhbTo6X01fZXh0cmFjdCh1bnNpZ25lZCBpbnQmKTsgIAorICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgaXN0cmVhbTo6X01fZXh0cmFjdChsb25nJik7CisgIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBpc3RyZWFtOjpfTV9leHRyYWN0KHVuc2lnbmVkIGxvbmcmKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIGlzdHJlYW06Ol9NX2V4dHJhY3QoYm9vbCYpOworI2lmZGVmIF9HTElCQ1hYX1VTRV9MT05HX0xPTkcKKyAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIGlzdHJlYW06Ol9NX2V4dHJhY3QobG9uZyBsb25nJik7CisgIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBpc3RyZWFtOjpfTV9leHRyYWN0KHVuc2lnbmVkIGxvbmcgbG9uZyYpOworI2VuZGlmCisgIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBpc3RyZWFtOjpfTV9leHRyYWN0KGZsb2F0Jik7CisgIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBpc3RyZWFtOjpfTV9leHRyYWN0KGRvdWJsZSYpOworICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgaXN0cmVhbTo6X01fZXh0cmFjdChsb25nIGRvdWJsZSYpOworICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgaXN0cmVhbTo6X01fZXh0cmFjdCh2b2lkKiYpOworCisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pb3N0cmVhbTxjaGFyPjsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+OworICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIHdzKHdpc3RyZWFtJik7CisgIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgb3BlcmF0b3I+Pih3aXN0cmVhbSYsIHdjaGFyX3QmKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFtJiwgd2NoYXJfdCopOworCisgIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgd2lzdHJlYW06Ol9NX2V4dHJhY3QodW5zaWduZWQgc2hvcnQmKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiB3aXN0cmVhbTo6X01fZXh0cmFjdCh1bnNpZ25lZCBpbnQmKTsgIAorICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIHdpc3RyZWFtOjpfTV9leHRyYWN0KGxvbmcmKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiB3aXN0cmVhbTo6X01fZXh0cmFjdCh1bnNpZ25lZCBsb25nJik7CisgIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgd2lzdHJlYW06Ol9NX2V4dHJhY3QoYm9vbCYpOworI2lmZGVmIF9HTElCQ1hYX1VTRV9MT05HX0xPTkcKKyAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiB3aXN0cmVhbTo6X01fZXh0cmFjdChsb25nIGxvbmcmKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiB3aXN0cmVhbTo6X01fZXh0cmFjdCh1bnNpZ25lZCBsb25nIGxvbmcmKTsKKyNlbmRpZgorICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIHdpc3RyZWFtOjpfTV9leHRyYWN0KGZsb2F0Jik7CisgIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgd2lzdHJlYW06Ol9NX2V4dHJhY3QoZG91YmxlJik7CisgIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgd2lzdHJlYW06Ol9NX2V4dHJhY3QobG9uZyBkb3VibGUmKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiB3aXN0cmVhbTo6X01fZXh0cmFjdCh2b2lkKiYpOworCisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pb3N0cmVhbTx3Y2hhcl90PjsKKyNlbmRpZgorI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvbGlzdC50Y2MgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvbGlzdC50Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1OTIzOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9saXN0LnRjYwpAQCAtMCwwICsxLDQxNiBAQAorLy8gTGlzdCBpbXBsZW1lbnRhdGlvbiAob3V0IG9mIGxpbmUpIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5NworICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGxpc3QudGNjCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKyNpZm5kZWYgX0xJU1RfVENDCisjZGVmaW5lIF9MSVNUX1RDQyAxCisKK19HTElCQ1hYX0JFR0lOX05FU1RFRF9OQU1FU1BBQ0Uoc3RkLCBfR0xJQkNYWF9TVERfRCkKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgX0xpc3RfYmFzZTxfVHAsIF9BbGxvYz46OgorICAgIF9NX2NsZWFyKCkKKyAgICB7CisgICAgICB0eXBlZGVmIF9MaXN0X25vZGU8X1RwPiAgX05vZGU7CisgICAgICBfTm9kZSogX19jdXIgPSBzdGF0aWNfY2FzdDxfTm9kZSo+KHRoaXMtPl9NX2ltcGwuX01fbm9kZS5fTV9uZXh0KTsKKyAgICAgIHdoaWxlIChfX2N1ciAhPSAmdGhpcy0+X01faW1wbC5fTV9ub2RlKQorCXsKKwkgIF9Ob2RlKiBfX3RtcCA9IF9fY3VyOworCSAgX19jdXIgPSBzdGF0aWNfY2FzdDxfTm9kZSo+KF9fY3VyLT5fTV9uZXh0KTsKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworCSAgX01fZ2V0X05vZGVfYWxsb2NhdG9yKCkuZGVzdHJveShfX3RtcCk7CisjZWxzZQorCSAgX01fZ2V0X1RwX2FsbG9jYXRvcigpLmRlc3Ryb3koJl9fdG1wLT5fTV9kYXRhKTsKKyNlbmRpZgorCSAgX01fcHV0X25vZGUoX190bXApOworCX0KKyAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgIHR5cGVuYW1lIGxpc3Q8X1RwLCBfQWxsb2M+OjppdGVyYXRvcgorICAgICAgbGlzdDxfVHAsIF9BbGxvYz46OgorICAgICAgZW1wbGFjZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBfQXJncyYmLi4uIF9fYXJncykKKyAgICAgIHsKKwlfTm9kZSogX190bXAgPSBfTV9jcmVhdGVfbm9kZShzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCV9fdG1wLT5fTV9ob29rKF9fcG9zaXRpb24uX01fbm9kZSk7CisJcmV0dXJuIGl0ZXJhdG9yKF9fdG1wKTsKKyAgICAgIH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHR5cGVuYW1lIGxpc3Q8X1RwLCBfQWxsb2M+OjppdGVyYXRvcgorICAgIGxpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgIHsKKyAgICAgIF9Ob2RlKiBfX3RtcCA9IF9NX2NyZWF0ZV9ub2RlKF9feCk7CisgICAgICBfX3RtcC0+X01faG9vayhfX3Bvc2l0aW9uLl9NX25vZGUpOworICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9fdG1wKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgbGlzdDxfVHAsIF9BbGxvYz46Oml0ZXJhdG9yCisgICAgbGlzdDxfVHAsIF9BbGxvYz46OgorICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgeworICAgICAgaXRlcmF0b3IgX19yZXQgPSBpdGVyYXRvcihfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX25leHQpOworICAgICAgX01fZXJhc2UoX19wb3NpdGlvbik7CisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBsaXN0PF9UcCwgX0FsbG9jPjo6CisgICAgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCB2YWx1ZV90eXBlIF9feCkKKyAgICB7CisgICAgICBpdGVyYXRvciBfX2kgPSBiZWdpbigpOworICAgICAgc2l6ZV90eXBlIF9fbGVuID0gMDsKKyAgICAgIGZvciAoOyBfX2kgIT0gZW5kKCkgJiYgX19sZW4gPCBfX25ld19zaXplOyArK19faSwgKytfX2xlbikKKyAgICAgICAgOworICAgICAgaWYgKF9fbGVuID09IF9fbmV3X3NpemUpCisgICAgICAgIGVyYXNlKF9faSwgZW5kKCkpOworICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gX19pID09IGVuZCgpCisgICAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIF9fbGVuLCBfX3gpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBsaXN0PF9UcCwgX0FsbG9jPiYKKyAgICBsaXN0PF9UcCwgX0FsbG9jPjo6CisgICAgb3BlcmF0b3I9KGNvbnN0IGxpc3QmIF9feCkKKyAgICB7CisgICAgICBpZiAodGhpcyAhPSAmX194KQorCXsKKwkgIGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKKwkgIGl0ZXJhdG9yIF9fbGFzdDEgPSBlbmQoKTsKKwkgIGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QyID0gX194LmJlZ2luKCk7CisJICBjb25zdF9pdGVyYXRvciBfX2xhc3QyID0gX194LmVuZCgpOworCSAgZm9yICg7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKKwkgICAgICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKKwkgICAgKl9fZmlyc3QxID0gKl9fZmlyc3QyOworCSAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCisJICAgIGVyYXNlKF9fZmlyc3QxLCBfX2xhc3QxKTsKKwkgIGVsc2UKKwkgICAgaW5zZXJ0KF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKKwl9CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBsaXN0PF9UcCwgX0FsbG9jPjo6CisgICAgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX192YWwpCisgICAgeworICAgICAgaXRlcmF0b3IgX19pID0gYmVnaW4oKTsKKyAgICAgIGZvciAoOyBfX2kgIT0gZW5kKCkgJiYgX19uID4gMDsgKytfX2ksIC0tX19uKQorICAgICAgICAqX19pID0gX192YWw7CisgICAgICBpZiAoX19uID4gMCkKKyAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX24sIF9fdmFsKTsKKyAgICAgIGVsc2UKKyAgICAgICAgZXJhc2UoX19pLCBlbmQoKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIGxpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0MiwgX0lucHV0SXRlcmF0b3IgX19sYXN0MiwKKwkJCSBfX2ZhbHNlX3R5cGUpCisgICAgICB7CisgICAgICAgIGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKKyAgICAgICAgaXRlcmF0b3IgX19sYXN0MSA9IGVuZCgpOworICAgICAgICBmb3IgKDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOworCSAgICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKKyAgICAgICAgICAqX19maXJzdDEgPSAqX19maXJzdDI7CisgICAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQorICAgICAgICAgIGVyYXNlKF9fZmlyc3QxLCBfX2xhc3QxKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGluc2VydChfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIGxpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICByZW1vdmUoY29uc3QgdmFsdWVfdHlwZSYgX192YWx1ZSkKKyAgICB7CisgICAgICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKKyAgICAgIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOworICAgICAgaXRlcmF0b3IgX19leHRyYSA9IF9fbGFzdDsKKyAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwl7CisJICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OworCSAgKytfX25leHQ7CisJICBpZiAoKl9fZmlyc3QgPT0gX192YWx1ZSkKKwkgICAgeworCSAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkgICAgICAvLyA1MjYuIElzIGl0IHVuZGVmaW5lZCBpZiBhIGZ1bmN0aW9uIGluIHRoZSBzdGFuZGFyZCBjaGFuZ2VzCisJICAgICAgLy8gaW4gcGFyYW1ldGVycz8KKwkgICAgICBpZiAoJipfX2ZpcnN0ICE9ICZfX3ZhbHVlKQorCQlfTV9lcmFzZShfX2ZpcnN0KTsKKwkgICAgICBlbHNlCisJCV9fZXh0cmEgPSBfX2ZpcnN0OworCSAgICB9CisJICBfX2ZpcnN0ID0gX19uZXh0OworCX0KKyAgICAgIGlmIChfX2V4dHJhICE9IF9fbGFzdCkKKwlfTV9lcmFzZShfX2V4dHJhKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIGxpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICB1bmlxdWUoKQorICAgIHsKKyAgICAgIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOworICAgICAgaXRlcmF0b3IgX19sYXN0ID0gZW5kKCk7CisgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCisJcmV0dXJuOworICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKKyAgICAgIHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3QpCisJeworCSAgaWYgKCpfX2ZpcnN0ID09ICpfX25leHQpCisJICAgIF9NX2VyYXNlKF9fbmV4dCk7CisJICBlbHNlCisJICAgIF9fZmlyc3QgPSBfX25leHQ7CisJICBfX25leHQgPSBfX2ZpcnN0OworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIGxpc3Q8X1RwLCBfQWxsb2M+OjoKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgIG1lcmdlKGxpc3QmJiBfX3gpCisjZWxzZQorICAgIG1lcmdlKGxpc3QmIF9feCkKKyNlbmRpZgorICAgIHsKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDMwMC4gbGlzdDo6bWVyZ2UoKSBzcGVjaWZpY2F0aW9uIGluY29tcGxldGUKKyAgICAgIGlmICh0aGlzICE9ICZfX3gpCisJeworCSAgX01fY2hlY2tfZXF1YWxfYWxsb2NhdG9ycyhfX3gpOyAKKworCSAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigpOworCSAgaXRlcmF0b3IgX19sYXN0MSA9IGVuZCgpOworCSAgaXRlcmF0b3IgX19maXJzdDIgPSBfX3guYmVnaW4oKTsKKwkgIGl0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CisJICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQorCSAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQorCSAgICAgIHsKKwkJaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDI7CisJCV9NX3RyYW5zZmVyKF9fZmlyc3QxLCBfX2ZpcnN0MiwgKytfX25leHQpOworCQlfX2ZpcnN0MiA9IF9fbmV4dDsKKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICArK19fZmlyc3QxOworCSAgaWYgKF9fZmlyc3QyICE9IF9fbGFzdDIpCisJICAgIF9NX3RyYW5zZmVyKF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfU3RyaWN0V2Vha09yZGVyaW5nPgorICAgICAgdm9pZAorICAgICAgbGlzdDxfVHAsIF9BbGxvYz46OgorI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBtZXJnZShsaXN0JiYgX194LCBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkKKyNlbHNlCisgICAgICBtZXJnZShsaXN0JiBfX3gsIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQorI2VuZGlmCisgICAgICB7CisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDMwMC4gbGlzdDo6bWVyZ2UoKSBzcGVjaWZpY2F0aW9uIGluY29tcGxldGUKKwlpZiAodGhpcyAhPSAmX194KQorCSAgeworCSAgICBfTV9jaGVja19lcXVhbF9hbGxvY2F0b3JzKF9feCk7CisKKwkgICAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigpOworCSAgICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CisJICAgIGl0ZXJhdG9yIF9fZmlyc3QyID0gX194LmJlZ2luKCk7CisJICAgIGl0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CisJICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCisJICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCisJCXsKKwkJICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0MjsKKwkJICBfTV90cmFuc2ZlcihfX2ZpcnN0MSwgX19maXJzdDIsICsrX19uZXh0KTsKKwkJICBfX2ZpcnN0MiA9IF9fbmV4dDsKKwkJfQorCSAgICAgIGVsc2UKKwkJKytfX2ZpcnN0MTsKKwkgICAgaWYgKF9fZmlyc3QyICE9IF9fbGFzdDIpCisJICAgICAgX01fdHJhbnNmZXIoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOworCSAgfQorICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBsaXN0PF9UcCwgX0FsbG9jPjo6CisgICAgc29ydCgpCisgICAgeworICAgICAgLy8gRG8gbm90aGluZyBpZiB0aGUgbGlzdCBoYXMgbGVuZ3RoIDAgb3IgMS4KKyAgICAgIGlmICh0aGlzLT5fTV9pbXBsLl9NX25vZGUuX01fbmV4dCAhPSAmdGhpcy0+X01faW1wbC5fTV9ub2RlCisJICAmJiB0aGlzLT5fTV9pbXBsLl9NX25vZGUuX01fbmV4dC0+X01fbmV4dCAhPSAmdGhpcy0+X01faW1wbC5fTV9ub2RlKQorICAgICAgeworICAgICAgICBsaXN0IF9fY2Fycnk7CisgICAgICAgIGxpc3QgX190bXBbNjRdOworICAgICAgICBsaXN0ICogX19maWxsID0gJl9fdG1wWzBdOworICAgICAgICBsaXN0ICogX19jb3VudGVyOworCisgICAgICAgIGRvCisJICB7CisJICAgIF9fY2Fycnkuc3BsaWNlKF9fY2FycnkuYmVnaW4oKSwgKnRoaXMsIGJlZ2luKCkpOworCisJICAgIGZvcihfX2NvdW50ZXIgPSAmX190bXBbMF07CisJCV9fY291bnRlciAhPSBfX2ZpbGwgJiYgIV9fY291bnRlci0+ZW1wdHkoKTsKKwkJKytfX2NvdW50ZXIpCisJICAgICAgeworCQlfX2NvdW50ZXItPm1lcmdlKF9fY2FycnkpOworCQlfX2NhcnJ5LnN3YXAoKl9fY291bnRlcik7CisJICAgICAgfQorCSAgICBfX2NhcnJ5LnN3YXAoKl9fY291bnRlcik7CisJICAgIGlmIChfX2NvdW50ZXIgPT0gX19maWxsKQorCSAgICAgICsrX19maWxsOworCSAgfQorCXdoaWxlICggIWVtcHR5KCkgKTsKKworICAgICAgICBmb3IgKF9fY291bnRlciA9ICZfX3RtcFsxXTsgX19jb3VudGVyICE9IF9fZmlsbDsgKytfX2NvdW50ZXIpCisgICAgICAgICAgX19jb3VudGVyLT5tZXJnZSgqKF9fY291bnRlciAtIDEpKTsKKyAgICAgICAgc3dhcCggKihfX2ZpbGwgLSAxKSApOworICAgICAgfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICAgIHZvaWQKKyAgICAgIGxpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICAgIHJlbW92ZV9pZihfUHJlZGljYXRlIF9fcHJlZCkKKyAgICAgIHsKKyAgICAgICAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CisgICAgICAgIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOworICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCisJICB7CisJICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CisJICAgICsrX19uZXh0OworCSAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKKwkgICAgICBfTV9lcmFzZShfX2ZpcnN0KTsKKwkgICAgX19maXJzdCA9IF9fbmV4dDsKKwkgIH0KKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KKyAgICAgIHZvaWQKKyAgICAgIGxpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICAgIHVuaXF1ZShfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCisgICAgICB7CisgICAgICAgIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOworICAgICAgICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKKyAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCSAgcmV0dXJuOworICAgICAgICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OworICAgICAgICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KQorCSAgeworCSAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCisJICAgICAgX01fZXJhc2UoX19uZXh0KTsKKwkgICAgZWxzZQorCSAgICAgIF9fZmlyc3QgPSBfX25leHQ7CisJICAgIF9fbmV4dCA9IF9fZmlyc3Q7CisJICB9CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9TdHJpY3RXZWFrT3JkZXJpbmc+CisgICAgICB2b2lkCisgICAgICBsaXN0PF9UcCwgX0FsbG9jPjo6CisgICAgICBzb3J0KF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQorICAgICAgeworCS8vIERvIG5vdGhpbmcgaWYgdGhlIGxpc3QgaGFzIGxlbmd0aCAwIG9yIDEuCisJaWYgKHRoaXMtPl9NX2ltcGwuX01fbm9kZS5fTV9uZXh0ICE9ICZ0aGlzLT5fTV9pbXBsLl9NX25vZGUKKwkgICAgJiYgdGhpcy0+X01faW1wbC5fTV9ub2RlLl9NX25leHQtPl9NX25leHQgIT0gJnRoaXMtPl9NX2ltcGwuX01fbm9kZSkKKwkgIHsKKwkgICAgbGlzdCBfX2NhcnJ5OworCSAgICBsaXN0IF9fdG1wWzY0XTsKKwkgICAgbGlzdCAqIF9fZmlsbCA9ICZfX3RtcFswXTsKKwkgICAgbGlzdCAqIF9fY291bnRlcjsKKworCSAgICBkbworCSAgICAgIHsKKwkJX19jYXJyeS5zcGxpY2UoX19jYXJyeS5iZWdpbigpLCAqdGhpcywgYmVnaW4oKSk7CisKKwkJZm9yKF9fY291bnRlciA9ICZfX3RtcFswXTsKKwkJICAgIF9fY291bnRlciAhPSBfX2ZpbGwgJiYgIV9fY291bnRlci0+ZW1wdHkoKTsKKwkJICAgICsrX19jb3VudGVyKQorCQkgIHsKKwkJICAgIF9fY291bnRlci0+bWVyZ2UoX19jYXJyeSwgX19jb21wKTsKKwkJICAgIF9fY2Fycnkuc3dhcCgqX19jb3VudGVyKTsKKwkJICB9CisJCV9fY2Fycnkuc3dhcCgqX19jb3VudGVyKTsKKwkJaWYgKF9fY291bnRlciA9PSBfX2ZpbGwpCisJCSAgKytfX2ZpbGw7CisJICAgICAgfQorCSAgICB3aGlsZSAoICFlbXB0eSgpICk7CisKKwkgICAgZm9yIChfX2NvdW50ZXIgPSAmX190bXBbMV07IF9fY291bnRlciAhPSBfX2ZpbGw7ICsrX19jb3VudGVyKQorCSAgICAgIF9fY291bnRlci0+bWVyZ2UoKihfX2NvdW50ZXIgLSAxKSwgX19jb21wKTsKKwkgICAgc3dhcCgqKF9fZmlsbCAtIDEpKTsKKwkgIH0KKyAgICAgIH0KKworX0dMSUJDWFhfRU5EX05FU1RFRF9OQU1FU1BBQ0UKKworI2VuZGlmIC8qIF9MSVNUX1RDQyAqLworCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvbG9jYWxlX2NsYXNzZXMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9sb2NhbGVfY2xhc3Nlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0N2U3NjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvbG9jYWxlX2NsYXNzZXMuaApAQCAtMCwwICsxLDgxOCBAQAorLy8gTG9jYWxlIHN1cHBvcnQgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LAorLy8gMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGxvY2FsZV9jbGFzc2VzLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDIyLjEgIExvY2FsZXMKKy8vCisKKyNpZm5kZWYgX0xPQ0FMRV9DTEFTU0VTX0gKKyNkZWZpbmUgX0xPQ0FMRV9DTEFTU0VTX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2xvY2FsZWZ3ZC5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxleHQvYXRvbWljaXR5Lmg+CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgLy8gMjIuMS4xIENsYXNzIGxvY2FsZQorICAvKioKKyAgICogIEBicmllZiAgQ29udGFpbmVyIGNsYXNzIGZvciBsb2NhbGl6YXRpb24gZnVuY3Rpb25hbGl0eS4KKyAgICogIEBpbmdyb3VwIGxvY2FsZXMKKyAgICoKKyAgICogIFRoZSBsb2NhbGUgY2xhc3MgaXMgZmlyc3QgYSBjbGFzcyB3cmFwcGVyIGZvciBDIGxpYnJhcnkgbG9jYWxlcy4gIEl0IGlzCisgICAqICBhbHNvIGFuIGV4dGVuc2libGUgY29udGFpbmVyIGZvciB1c2VyLWRlZmluZWQgbG9jYWxpemF0aW9uLiAgQSBsb2NhbGUgaXMKKyAgICogIGEgY29sbGVjdGlvbiBvZiBmYWNldHMgdGhhdCBpbXBsZW1lbnQgdmFyaW91cyBsb2NhbGl6YXRpb24gZmVhdHVyZXMgc3VjaAorICAgKiAgYXMgbW9uZXksIHRpbWUsIGFuZCBudW1iZXIgcHJpbnRpbmcuCisgICAqCisgICAqICBDb25zdHJ1Y3RpbmcgQysrIGxvY2FsZXMgZG9lcyBub3QgY2hhbmdlIHRoZSBDIGxpYnJhcnkgbG9jYWxlLgorICAgKgorICAgKiAgVGhpcyBsaWJyYXJ5IHN1cHBvcnRzIGVmZmljaWVudCBjb25zdHJ1Y3Rpb24gYW5kIGNvcHlpbmcgb2YgbG9jYWxlcworICAgKiAgdGhyb3VnaCBhIHJlZmVyZW5jZSBjb3VudGluZyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbG9jYWxlIGNsYXNzLgorICAqLworICBjbGFzcyBsb2NhbGUKKyAgeworICBwdWJsaWM6CisgICAgLy8gVHlwZXM6CisgICAgLy8vIERlZmluaXRpb24gb2YgbG9jYWxlOjpjYXRlZ29yeS4KKyAgICB0eXBlZGVmIGludAljYXRlZ29yeTsKKworICAgIC8vIEZvcndhcmQgZGVjbHMgYW5kIGZyaWVuZHM6CisgICAgY2xhc3MgZmFjZXQ7CisgICAgY2xhc3MgaWQ7CisgICAgY2xhc3MgX0ltcGw7CisKKyAgICBmcmllbmQgY2xhc3MgZmFjZXQ7CisgICAgZnJpZW5kIGNsYXNzIF9JbXBsOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgorICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdygpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgorICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKKyAgICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DYWNoZT4KKyAgICAgIGZyaWVuZCBzdHJ1Y3QgX191c2VfY2FjaGU7CisKKyAgICAvL0B7CisgICAgLyoqCisgICAgICogIEBicmllZiAgQ2F0ZWdvcnkgdmFsdWVzLgorICAgICAqCisgICAgICogIFRoZSBzdGFuZGFyZCBjYXRlZ29yeSB2YWx1ZXMgYXJlIG5vbmUsIGN0eXBlLCBudW1lcmljLCBjb2xsYXRlLCB0aW1lLAorICAgICAqICBtb25ldGFyeSwgYW5kIG1lc3NhZ2VzLiAgVGhleSBmb3JtIGEgYml0bWFzayB0aGF0IHN1cHBvcnRzIHVuaW9uIGFuZAorICAgICAqICBpbnRlcnNlY3Rpb24uICBUaGUgY2F0ZWdvcnkgYWxsIGlzIHRoZSB1bmlvbiBvZiB0aGVzZSB2YWx1ZXMuCisgICAgICoKKyAgICAgKiAgTkI6IE9yZGVyIG11c3QgbWF0Y2ggX1NfZmFjZXRfY2F0ZWdvcmllcyBkZWZpbml0aW9uIGluIGxvY2FsZS5jYworICAgICovCisgICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG5vbmUJCT0gMDsKKyAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgY3R5cGUJCT0gMUwgPDwgMDsKKyAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbnVtZXJpYwk9IDFMIDw8IDE7CisgICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGNvbGxhdGUJPSAxTCA8PCAyOworICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSB0aW1lCQk9IDFMIDw8IDM7CisgICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG1vbmV0YXJ5CT0gMUwgPDwgNDsKKyAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbWVzc2FnZXMJPSAxTCA8PCA1OworICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBhbGwJCT0gKGN0eXBlIHwgbnVtZXJpYyB8IGNvbGxhdGUgfAorCQkJCQkgICB0aW1lICB8IG1vbmV0YXJ5IHwgbWVzc2FnZXMpOworICAgIC8vQH0KKworICAgIC8vIENvbnN0cnVjdC9jb3B5L2Rlc3Ryb3k6CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICAgICAqCisgICAgICogIENvbnN0cnVjdHMgYSBjb3B5IG9mIHRoZSBnbG9iYWwgbG9jYWxlLiAgSWYgbm8gbG9jYWxlIGhhcyBiZWVuCisgICAgICogIGV4cGxpY2l0bHkgc2V0LCB0aGlzIGlzIHRoZSBDIGxvY2FsZS4KKyAgICAqLworICAgIGxvY2FsZSgpIHRocm93KCk7CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBDb3B5IGNvbnN0cnVjdG9yLgorICAgICAqCisgICAgICogIENvbnN0cnVjdHMgYSBjb3B5IG9mIEBhIG90aGVyLgorICAgICAqCisgICAgICogIEBwYXJhbSAgb3RoZXIgIFRoZSBsb2NhbGUgdG8gY29weS4KKyAgICAqLworICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIHRocm93KCk7CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBOYW1lZCBsb2NhbGUgY29uc3RydWN0b3IuCisgICAgICoKKyAgICAgKiAgQ29uc3RydWN0cyBhIGNvcHkgb2YgdGhlIG5hbWVkIEMgbGlicmFyeSBsb2NhbGUuCisgICAgICoKKyAgICAgKiAgQHBhcmFtICBzICBOYW1lIG9mIHRoZSBsb2NhbGUgdG8gY29uc3RydWN0LgorICAgICAqICBAdGhyb3cgIHN0ZDo6cnVudGltZV9lcnJvciBpZiBzIGlzIG51bGwgb3IgYW4gdW5kZWZpbmVkIGxvY2FsZS4KKyAgICAqLworICAgIGV4cGxpY2l0CisgICAgbG9jYWxlKGNvbnN0IGNoYXIqIF9fcyk7CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3QgbG9jYWxlIHdpdGggZmFjZXRzIGZyb20gYW5vdGhlciBsb2NhbGUuCisgICAgICoKKyAgICAgKiAgQ29uc3RydWN0cyBhIGNvcHkgb2YgdGhlIGxvY2FsZSBAYSBiYXNlLiAgVGhlIGZhY2V0cyBzcGVjaWZpZWQgYnkgQGEKKyAgICAgKiAgY2F0IGFyZSByZXBsYWNlZCB3aXRoIHRob3NlIGZyb20gdGhlIGxvY2FsZSBuYW1lZCBieSBAYSBzLiAgSWYgYmFzZSBpcworICAgICAqICBuYW1lZCwgdGhpcyBsb2NhbGUgaW5zdGFuY2Ugd2lsbCBhbHNvIGJlIG5hbWVkLgorICAgICAqCisgICAgICogIEBwYXJhbSAgYmFzZSAgVGhlIGxvY2FsZSB0byBjb3B5LgorICAgICAqICBAcGFyYW0gIHMgIE5hbWUgb2YgdGhlIGxvY2FsZSB0byB1c2UgZmFjZXRzIGZyb20uCisgICAgICogIEBwYXJhbSAgY2F0ICBTZXQgb2YgY2F0ZWdvcmllcyBkZWZpbmluZyB0aGUgZmFjZXRzIHRvIHVzZSBmcm9tIHMuCisgICAgICogIEB0aHJvdyAgc3RkOjpydW50aW1lX2Vycm9yIGlmIHMgaXMgbnVsbCBvciBhbiB1bmRlZmluZWQgbG9jYWxlLgorICAgICovCisgICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBjaGFyKiBfX3MsIGNhdGVnb3J5IF9fY2F0KTsKKworICAgIC8qKgorICAgICAqICBAYnJpZWYgIENvbnN0cnVjdCBsb2NhbGUgd2l0aCBmYWNldHMgZnJvbSBhbm90aGVyIGxvY2FsZS4KKyAgICAgKgorICAgICAqICBDb25zdHJ1Y3RzIGEgY29weSBvZiB0aGUgbG9jYWxlIEBhIGJhc2UuICBUaGUgZmFjZXRzIHNwZWNpZmllZCBieSBAYQorICAgICAqICBjYXQgYXJlIHJlcGxhY2VkIHdpdGggdGhvc2UgZnJvbSB0aGUgbG9jYWxlIEBhIGFkZC4gIElmIEBhIGJhc2UgYW5kIEBhCisgICAgICogIGFkZCBhcmUgbmFtZWQsIHRoaXMgbG9jYWxlIGluc3RhbmNlIHdpbGwgYWxzbyBiZSBuYW1lZC4KKyAgICAgKgorICAgICAqICBAcGFyYW0gIGJhc2UgIFRoZSBsb2NhbGUgdG8gY29weS4KKyAgICAgKiAgQHBhcmFtICBhZGQgIFRoZSBsb2NhbGUgdG8gdXNlIGZhY2V0cyBmcm9tLgorICAgICAqICBAcGFyYW0gIGNhdCAgU2V0IG9mIGNhdGVnb3JpZXMgZGVmaW5pbmcgdGhlIGZhY2V0cyB0byB1c2UgZnJvbSBhZGQuCisgICAgKi8KKyAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGxvY2FsZSYgX19hZGQsIGNhdGVnb3J5IF9fY2F0KTsKKworICAgIC8qKgorICAgICAqICBAYnJpZWYgIENvbnN0cnVjdCBsb2NhbGUgd2l0aCBhbm90aGVyIGZhY2V0LgorICAgICAqCisgICAgICogIENvbnN0cnVjdHMgYSBjb3B5IG9mIHRoZSBsb2NhbGUgQGEgb3RoZXIuICBUaGUgZmFjZXQgQGYgaXMgYWRkZWQgdG8KKyAgICAgKiAgQG90aGVyLCByZXBsYWNpbmcgYW4gZXhpc3RpbmcgZmFjZXQgb2YgdHlwZSBGYWNldCBpZiB0aGVyZSBpcyBvbmUuICBJZgorICAgICAqICBAZiBpcyBudWxsLCB0aGlzIGxvY2FsZSBpcyBhIGNvcHkgb2YgQGEgb3RoZXIuCisgICAgICoKKyAgICAgKiAgQHBhcmFtICBvdGhlciAgVGhlIGxvY2FsZSB0byBjb3B5LgorICAgICAqICBAcGFyYW0gIGYgIFRoZSBmYWNldCB0byBhZGQgaW4uCisgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CisgICAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFjZXQqIF9fZik7CisKKyAgICAvLy8gTG9jYWxlIGRlc3RydWN0b3IuCisgICAgfmxvY2FsZSgpIHRocm93KCk7CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBBc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAqCisgICAgICogIFNldCB0aGlzIGxvY2FsZSB0byBiZSBhIGNvcHkgb2YgQGEgb3RoZXIuCisgICAgICoKKyAgICAgKiAgQHBhcmFtICBvdGhlciAgVGhlIGxvY2FsZSB0byBjb3B5LgorICAgICAqICBAcmV0dXJuICBBIHJlZmVyZW5jZSB0byB0aGlzIGxvY2FsZS4KKyAgICAqLworICAgIGNvbnN0IGxvY2FsZSYKKyAgICBvcGVyYXRvcj0oY29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpOworCisgICAgLyoqCisgICAgICogIEBicmllZiAgQ29uc3RydWN0IGxvY2FsZSB3aXRoIGFub3RoZXIgZmFjZXQuCisgICAgICoKKyAgICAgKiAgQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhIG5ldyBjb3B5IG9mIHRoaXMgbG9jYWxlLiAgQWRkcyBvciByZXBsYWNlcyBhbgorICAgICAqICBleGlzdGluZyBmYWNldCBvZiB0eXBlIEZhY2V0IGZyb20gdGhlIGxvY2FsZSBAYSBvdGhlciBpbnRvIHRoZSBuZXcKKyAgICAgKiAgbG9jYWxlLgorICAgICAqCisgICAgICogIEBwYXJhbSAgRmFjZXQgIFRoZSBmYWNldCB0eXBlIHRvIGNvcHkgZnJvbSBvdGhlcgorICAgICAqICBAcGFyYW0gIG90aGVyICBUaGUgbG9jYWxlIHRvIGNvcHkgZnJvbS4KKyAgICAgKiAgQHJldHVybiAgTmV3bHkgY29uc3RydWN0ZWQgbG9jYWxlLgorICAgICAqICBAdGhyb3cgIHN0ZDo6cnVudGltZV9lcnJvciBpZiBvdGhlciBoYXMgbm8gZmFjZXQgb2YgdHlwZSBGYWNldC4KKyAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KKyAgICAgIGxvY2FsZQorICAgICAgY29tYmluZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0OworCisgICAgLy8gTG9jYWxlIG9wZXJhdGlvbnM6CisgICAgLyoqCisgICAgICogIEBicmllZiAgUmV0dXJuIGxvY2FsZSBuYW1lLgorICAgICAqICBAcmV0dXJuICBMb2NhbGUgbmFtZSBvciAiKiIgaWYgdW5uYW1lZC4KKyAgICAqLworICAgIHN0cmluZworICAgIG5hbWUoKSBjb25zdDsKKworICAgIC8qKgorICAgICAqICBAYnJpZWYgIExvY2FsZSBlcXVhbGl0eS4KKyAgICAgKgorICAgICAqICBAcGFyYW0gIG90aGVyICBUaGUgbG9jYWxlIHRvIGNvbXBhcmUgYWdhaW5zdC4KKyAgICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBvdGhlciBhbmQgdGhpcyByZWZlciB0byB0aGUgc2FtZSBsb2NhbGUgaW5zdGFuY2UsIGFyZQorICAgICAqCQkgY29waWVzLCBvciBoYXZlIHRoZSBzYW1lIG5hbWUuICBGYWxzZSBvdGhlcndpc2UuCisgICAgKi8KKyAgICBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0IHRocm93KCk7CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBMb2NhbGUgaW5lcXVhbGl0eS4KKyAgICAgKgorICAgICAqICBAcGFyYW0gIG90aGVyICBUaGUgbG9jYWxlIHRvIGNvbXBhcmUgYWdhaW5zdC4KKyAgICAgKiAgQHJldHVybiAgISAoKnRoaXMgPT0gb3RoZXIpCisgICAgKi8KKyAgICBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0IHRocm93KCkKKyAgICB7IHJldHVybiAhKHRoaXMtPm9wZXJhdG9yPT0oX19vdGhlcikpOyB9CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBDb21wYXJlIHR3byBzdHJpbmdzIGFjY29yZGluZyB0byBjb2xsYXRlLgorICAgICAqCisgICAgICogIFRlbXBsYXRlIG9wZXJhdG9yIHRvIGNvbXBhcmUgdHdvIHN0cmluZ3MgdXNpbmcgdGhlIGNvbXBhcmUgZnVuY3Rpb24gb2YKKyAgICAgKiAgdGhlIGNvbGxhdGUgZmFjZXQgaW4gdGhpcyBsb2NhbGUuICBPbmUgdXNlIGlzIHRvIHByb3ZpZGUgdGhlIGxvY2FsZSB0bworICAgICAqICB0aGUgc29ydCBmdW5jdGlvbi4gIEZvciBleGFtcGxlLCBhIHZlY3RvciB2IG9mIHN0cmluZ3MgY291bGQgYmUgc29ydGVkCisgICAgICogIGFjY29yZGluZyB0byBsb2NhbGUgbG9jIGJ5IGRvaW5nOgorICAgICAqICBAY29kZQorICAgICAqICBzdGQ6OnNvcnQodi5iZWdpbigpLCB2LmVuZCgpLCBsb2MpOworICAgICAqICBAZW5kY29kZQorICAgICAqCisgICAgICogIEBwYXJhbSAgczEgIEZpcnN0IHN0cmluZyB0byBjb21wYXJlLgorICAgICAqICBAcGFyYW0gIHMyICBTZWNvbmQgc3RyaW5nIHRvIGNvbXBhcmUuCisgICAgICogIEByZXR1cm4gIFRydWUgaWYgY29sbGF0ZTxDaGFyPiBmYWNldCBjb21wYXJlcyBzMSA8IHMyLCBlbHNlIGZhbHNlLgorICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MxLAorCQkgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBjb25zdDsKKworICAgIC8vIEdsb2JhbCBsb2NhbGUgb2JqZWN0czoKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBTZXQgZ2xvYmFsIGxvY2FsZQorICAgICAqCisgICAgICogIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgZ2xvYmFsIGxvY2FsZSB0byB0aGUgYXJndW1lbnQgYW5kIHJldHVybnMgYQorICAgICAqICBjb3B5IG9mIHRoZSBwcmV2aW91cyBnbG9iYWwgbG9jYWxlLiAgSWYgdGhlIGFyZ3VtZW50IGhhcyBhIG5hbWUsIGl0CisgICAgICogIHdpbGwgYWxzbyBjYWxsIHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgbG9jLm5hbWUoKSkuCisgICAgICoKKyAgICAgKiAgQHBhcmFtICBsb2NhbGUgIFRoZSBuZXcgbG9jYWxlIHRvIG1ha2UgZ2xvYmFsLgorICAgICAqICBAcmV0dXJuICBDb3B5IG9mIHRoZSBvbGQgZ2xvYmFsIGxvY2FsZS4KKyAgICAqLworICAgIHN0YXRpYyBsb2NhbGUKKyAgICBnbG9iYWwoY29uc3QgbG9jYWxlJik7CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBSZXR1cm4gcmVmZXJlbmNlIHRvIHRoZSBDIGxvY2FsZS4KKyAgICAqLworICAgIHN0YXRpYyBjb25zdCBsb2NhbGUmCisgICAgY2xhc3NpYygpOworCisgIHByaXZhdGU6CisgICAgLy8gVGhlIChzaGFyZWQpIGltcGxlbWVudGF0aW9uCisgICAgX0ltcGwqCQlfTV9pbXBsOworCisgICAgLy8gVGhlICJDIiByZWZlcmVuY2UgbG9jYWxlCisgICAgc3RhdGljIF9JbXBsKiAgICAgICBfU19jbGFzc2ljOworCisgICAgLy8gQ3VycmVudCBnbG9iYWwgbG9jYWxlCisgICAgc3RhdGljIF9JbXBsKglfU19nbG9iYWw7CisKKyAgICAvLyBOYW1lcyBvZiB1bmRlcmx5aW5nIGxvY2FsZSBjYXRlZ29yaWVzLgorICAgIC8vIE5COiBsb2NhbGU6Omdsb2JhbCgpIGhhcyB0byBrbm93IGhvdyB0byBtb2RpZnkgYWxsIHRoZQorICAgIC8vIHVuZGVybHlpbmcgY2F0ZWdvcmllcywgbm90IGp1c3QgdGhlIG9uZXMgcmVxdWlyZWQgYnkgdGhlIEMrKworICAgIC8vIHN0YW5kYXJkLgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCogY29uc3QgX1NfY2F0ZWdvcmllczsKKworICAgIC8vIE51bWJlciBvZiBzdGFuZGFyZCBjYXRlZ29yaWVzLiBGb3IgQysrLCB0aGVzZSBjYXRlZ29yaWVzIGFyZQorICAgIC8vIGNvbGxhdGUsIGN0eXBlLCBtb25ldGFyeSwgbnVtZXJpYywgdGltZSwgYW5kIG1lc3NhZ2VzLiBUaGVzZQorICAgIC8vIGRpcmVjdGx5IGNvcnJlc3BvbmQgdG8gSVNPIEM5OSBtYWNyb3MgTENfQ09MTEFURSwgTENfQ1RZUEUsCisgICAgLy8gTENfTU9ORVRBUlksIExDX05VTUVSSUMsIGFuZCBMQ19USU1FLiBJbiBhZGRpdGlvbiwgUE9TSVggKElFRUUKKyAgICAvLyAxMDAzLjEtMjAwMSkgc3BlY2lmaWVzIExDX01FU1NBR0VTLgorICAgIC8vIEluIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZCBjYXRlZ29yaWVzLCB0aGUgdW5kZXJseWluZworICAgIC8vIG9wZXJhdGluZyBzeXN0ZW0gaXMgYWxsb3dlZCB0byBkZWZpbmUgZXh0cmEgTENfKgorICAgIC8vIG1hY3Jvcy4gRm9yIEdOVSBzeXN0ZW1zLCB0aGUgZm9sbG93aW5nIGFyZSBhbHNvIHZhbGlkOgorICAgIC8vIExDX1BBUEVSLCBMQ19OQU1FLCBMQ19BRERSRVNTLCBMQ19URUxFUEhPTkUsIExDX01FQVNVUkVNRU5ULAorICAgIC8vIGFuZCBMQ19JREVOVElGSUNBVElPTi4KKyAgICBlbnVtIHsgX1NfY2F0ZWdvcmllc19zaXplID0gNiArIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIH07CisKKyNpZmRlZiBfX0dUSFJFQURTCisgICAgc3RhdGljIF9fZ3RocmVhZF9vbmNlX3QgX1Nfb25jZTsKKyNlbmRpZgorCisgICAgZXhwbGljaXQKKyAgICBsb2NhbGUoX0ltcGwqKSB0aHJvdygpOworCisgICAgc3RhdGljIHZvaWQKKyAgICBfU19pbml0aWFsaXplKCk7CisKKyAgICBzdGF0aWMgdm9pZAorICAgIF9TX2luaXRpYWxpemVfb25jZSgpIHRocm93KCk7CisKKyAgICBzdGF0aWMgY2F0ZWdvcnkKKyAgICBfU19ub3JtYWxpemVfY2F0ZWdvcnkoY2F0ZWdvcnkpOworCisgICAgdm9pZAorICAgIF9NX2NvYWxlc2NlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBsb2NhbGUmIF9fYWRkLCBjYXRlZ29yeSBfX2NhdCk7CisgIH07CisKKworICAvLyAyMi4xLjEuMS4yICBDbGFzcyBsb2NhbGU6OmZhY2V0CisgIC8qKgorICAgKiAgQGJyaWVmICBMb2NhbGl6YXRpb24gZnVuY3Rpb25hbGl0eSBiYXNlIGNsYXNzLgorICAgKiAgQGluZ3JvdXAgbG9jYWxlcworICAgKgorICAgKiAgVGhlIGZhY2V0IGNsYXNzIGlzIHRoZSBiYXNlIGNsYXNzIGZvciBhIGxvY2FsaXphdGlvbiBmZWF0dXJlLCBzdWNoIGFzCisgICAqICBtb25leSwgdGltZSwgYW5kIG51bWJlciBwcmludGluZy4gIEl0IHByb3ZpZGVzIGNvbW1vbiBzdXBwb3J0IGZvciBmYWNldHMKKyAgICogIGFuZCByZWZlcmVuY2UgbWFuYWdlbWVudC4KKyAgICoKKyAgICogIEZhY2V0cyBtYXkgbm90IGJlIGNvcGllZCBvciBhc3NpZ25lZC4KKyAgKi8KKyAgY2xhc3MgbG9jYWxlOjpmYWNldAorICB7CisgIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKKyAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsKKworICAgIG11dGFibGUgX0F0b21pY193b3JkCQlfTV9yZWZjb3VudDsKKworICAgIC8vIENvbnRhaW5zIGRhdGEgZnJvbSB0aGUgdW5kZXJseWluZyAiQyIgbGlicmFyeSBmb3IgdGhlIGNsYXNzaWMgbG9jYWxlLgorICAgIHN0YXRpYyBfX2NfbG9jYWxlICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlOworCisgICAgLy8gU3RyaW5nIGxpdGVyYWwgZm9yIHRoZSBuYW1lIG9mIHRoZSBjbGFzc2ljIGxvY2FsZS4KKyAgICBzdGF0aWMgY29uc3QgY2hhcgkJCV9TX2NfbmFtZVsyXTsKKworI2lmZGVmIF9fR1RIUkVBRFMKKyAgICBzdGF0aWMgX19ndGhyZWFkX29uY2VfdAkJX1Nfb25jZTsKKyNlbmRpZgorCisgICAgc3RhdGljIHZvaWQKKyAgICBfU19pbml0aWFsaXplX29uY2UoKTsKKworICBwcm90ZWN0ZWQ6CisgICAgLyoqCisgICAgICogIEBicmllZiAgRmFjZXQgY29uc3RydWN0b3IuCisgICAgICoKKyAgICAgKiAgVGhpcyBpcyB0aGUgY29uc3RydWN0b3IgcHJvdmlkZWQgYnkgdGhlIHN0YW5kYXJkLiAgSWYgcmVmcyBpcyAwLCB0aGUKKyAgICAgKiAgZmFjZXQgaXMgZGVzdHJveWVkIHdoZW4gdGhlIGxhc3QgcmVmZXJlbmNpbmcgbG9jYWxlIGlzIGRlc3Ryb3llZC4KKyAgICAgKiAgT3RoZXJ3aXNlIHRoZSBmYWNldCB3aWxsIG5ldmVyIGJlIGRlc3Ryb3llZC4KKyAgICAgKgorICAgICAqICBAcGFyYW0gcmVmcyAgVGhlIGluaXRpYWwgdmFsdWUgZm9yIHJlZmVyZW5jZSBjb3VudC4KKyAgICAqLworICAgIGV4cGxpY2l0CisgICAgZmFjZXQoc2l6ZV90IF9fcmVmcyA9IDApIHRocm93KCkgOiBfTV9yZWZjb3VudChfX3JlZnMgPyAxIDogMCkKKyAgICB7IH0KKworICAgIC8vLyBGYWNldCBkZXN0cnVjdG9yLgorICAgIHZpcnR1YWwKKyAgICB+ZmFjZXQoKTsKKworICAgIHN0YXRpYyB2b2lkCisgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorCQkgICAgICAgX19jX2xvY2FsZSBfX29sZCA9IDApOworCisgICAgc3RhdGljIF9fY19sb2NhbGUKKyAgICBfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpIHRocm93KCk7CisKKyAgICBzdGF0aWMgdm9pZAorICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKTsKKworICAgIHN0YXRpYyBfX2NfbG9jYWxlCisgICAgX1NfbGNfY3R5cGVfY19sb2NhbGUoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcyk7CisKKyAgICAvLyBSZXR1cm5zIGRhdGEgZnJvbSB0aGUgdW5kZXJseWluZyAiQyIgbGlicmFyeSBkYXRhIGZvciB0aGUKKyAgICAvLyBjbGFzc2ljIGxvY2FsZS4KKyAgICBzdGF0aWMgX19jX2xvY2FsZQorICAgIF9TX2dldF9jX2xvY2FsZSgpOworCisgICAgX0dMSUJDWFhfQ09OU1Qgc3RhdGljIGNvbnN0IGNoYXIqCisgICAgX1NfZ2V0X2NfbmFtZSgpIHRocm93KCk7CisKKyAgcHJpdmF0ZToKKyAgICB2b2lkCisgICAgX01fYWRkX3JlZmVyZW5jZSgpIGNvbnN0IHRocm93KCkKKyAgICB7IF9fZ251X2N4eDo6X19hdG9taWNfYWRkX2Rpc3BhdGNoKCZfTV9yZWZjb3VudCwgMSk7IH0KKworICAgIHZvaWQKKyAgICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgY29uc3QgdGhyb3coKQorICAgIHsKKyAgICAgIGlmIChfX2dudV9jeHg6Ol9fZXhjaGFuZ2VfYW5kX2FkZF9kaXNwYXRjaCgmX01fcmVmY291bnQsIC0xKSA9PSAxKQorCXsKKwkgIF9fdHJ5CisJICAgIHsgZGVsZXRlIHRoaXM7IH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7IH0KKwl9CisgICAgfQorCisgICAgZmFjZXQoY29uc3QgZmFjZXQmKTsgIC8vIE5vdCBkZWZpbmVkLgorCisgICAgZmFjZXQmCisgICAgb3BlcmF0b3I9KGNvbnN0IGZhY2V0Jik7ICAvLyBOb3QgZGVmaW5lZC4KKyAgfTsKKworCisgIC8vIDIyLjEuMS4xLjMgQ2xhc3MgbG9jYWxlOjppZAorICAvKioKKyAgICogIEBicmllZiAgRmFjZXQgSUQgY2xhc3MuCisgICAqICBAaW5ncm91cCBsb2NhbGVzCisgICAqCisgICAqICBUaGUgSUQgY2xhc3MgcHJvdmlkZXMgZmFjZXRzIHdpdGggYW4gaW5kZXggdXNlZCB0byBpZGVudGlmeSB0aGVtLgorICAgKiAgRXZlcnkgZmFjZXQgY2xhc3MgbXVzdCBkZWZpbmUgYSBwdWJsaWMgc3RhdGljIG1lbWJlciBsb2NhbGU6OmlkLCBvciBiZQorICAgKiAgZGVyaXZlZCBmcm9tIGEgZmFjZXQgdGhhdCBwcm92aWRlcyB0aGlzIG1lbWJlciwgb3RoZXJ3aXNlIHRoZSBmYWNldAorICAgKiAgY2Fubm90IGJlIHVzZWQgaW4gYSBsb2NhbGUuICBUaGUgbG9jYWxlOjppZCBlbnN1cmVzIHRoYXQgZWFjaCBjbGFzcworICAgKiAgdHlwZSBnZXRzIGEgdW5pcXVlIGlkZW50aWZpZXIuCisgICovCisgIGNsYXNzIGxvY2FsZTo6aWQKKyAgeworICBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CisgICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6X0ltcGw7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CisgICAgICBmcmllbmQgY29uc3QgX0ZhY2V0JgorICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgorICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdygpOworCisgICAgLy8gTkI6IFRoZXJlIGlzIG5vIGFjY2Vzc29yIGZvciBfTV9pbmRleCBiZWNhdXNlIGl0IG1heSBiZSB1c2VkCisgICAgLy8gYmVmb3JlIHRoZSBjb25zdHJ1Y3RvciBpcyBydW47IHRoZSBlZmZlY3Qgb2YgY2FsbGluZyBhIG1lbWJlcgorICAgIC8vIGZ1bmN0aW9uIChldmVuIGFuIGlubGluZSkgd291bGQgYmUgdW5kZWZpbmVkLgorICAgIG11dGFibGUgc2l6ZV90CQlfTV9pbmRleDsKKworICAgIC8vIExhc3QgaWQgbnVtYmVyIGFzc2lnbmVkLgorICAgIHN0YXRpYyBfQXRvbWljX3dvcmQJCV9TX3JlZmNvdW50OworCisgICAgdm9pZAorICAgIG9wZXJhdG9yPShjb25zdCBpZCYpOyAgLy8gTm90IGRlZmluZWQuCisKKyAgICBpZChjb25zdCBpZCYpOyAgLy8gTm90IGRlZmluZWQuCisKKyAgcHVibGljOgorICAgIC8vIE5COiBUaGlzIGNsYXNzIGlzIGFsd2F5cyBhIHN0YXRpYyBkYXRhIG1lbWJlciwgYW5kIHRodXMgY2FuIGJlCisgICAgLy8gY291bnRlZCBvbiB0byBiZSB6ZXJvLWluaXRpYWxpemVkLgorICAgIC8vLyBDb25zdHJ1Y3Rvci4KKyAgICBpZCgpIHsgfQorCisgICAgc2l6ZV90CisgICAgX01faWQoKSBjb25zdCB0aHJvdygpOworICB9OworCisKKyAgLy8gSW1wbGVtZW50YXRpb24gb2JqZWN0IGZvciBsb2NhbGUuCisgIGNsYXNzIGxvY2FsZTo6X0ltcGwKKyAgeworICBwdWJsaWM6CisgICAgLy8gRnJpZW5kcy4KKyAgICBmcmllbmQgY2xhc3MgbG9jYWxlOworICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6OmZhY2V0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgorICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdygpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgorICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKKyAgICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DYWNoZT4KKyAgICAgIGZyaWVuZCBzdHJ1Y3QgX191c2VfY2FjaGU7CisKKyAgcHJpdmF0ZToKKyAgICAvLyBEYXRhIE1lbWJlcnMuCisgICAgX0F0b21pY193b3JkCQkJX01fcmVmY291bnQ7CisgICAgY29uc3QgZmFjZXQqKgkJCV9NX2ZhY2V0czsKKyAgICBzaXplX3QJCQkJX01fZmFjZXRzX3NpemU7CisgICAgY29uc3QgZmFjZXQqKgkJCV9NX2NhY2hlczsKKyAgICBjaGFyKioJCQkJX01fbmFtZXM7CisgICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0CV9TX2lkX2N0eXBlW107CisgICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0CV9TX2lkX251bWVyaWNbXTsKKyAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QJX1NfaWRfY29sbGF0ZVtdOworICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdAlfU19pZF90aW1lW107CisgICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0CV9TX2lkX21vbmV0YXJ5W107CisgICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0CV9TX2lkX21lc3NhZ2VzW107CisgICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0KiBjb25zdCBfU19mYWNldF9jYXRlZ29yaWVzW107CisKKyAgICB2b2lkCisgICAgX01fYWRkX3JlZmVyZW5jZSgpIHRocm93KCkKKyAgICB7IF9fZ251X2N4eDo6X19hdG9taWNfYWRkX2Rpc3BhdGNoKCZfTV9yZWZjb3VudCwgMSk7IH0KKworICAgIHZvaWQKKyAgICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgdGhyb3coKQorICAgIHsKKyAgICAgIGlmIChfX2dudV9jeHg6Ol9fZXhjaGFuZ2VfYW5kX2FkZF9kaXNwYXRjaCgmX01fcmVmY291bnQsIC0xKSA9PSAxKQorCXsKKwkgIF9fdHJ5CisJICAgIHsgZGVsZXRlIHRoaXM7IH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7IH0KKwl9CisgICAgfQorCisgICAgX0ltcGwoY29uc3QgX0ltcGwmLCBzaXplX3QpOworICAgIF9JbXBsKGNvbnN0IGNoYXIqLCBzaXplX3QpOworICAgIF9JbXBsKHNpemVfdCkgdGhyb3coKTsKKworICAgfl9JbXBsKCkgdGhyb3coKTsKKworICAgIF9JbXBsKGNvbnN0IF9JbXBsJik7ICAvLyBOb3QgZGVmaW5lZC4KKworICAgIHZvaWQKKyAgICBvcGVyYXRvcj0oY29uc3QgX0ltcGwmKTsgIC8vIE5vdCBkZWZpbmVkLgorCisgICAgYm9vbAorICAgIF9NX2NoZWNrX3NhbWVfbmFtZSgpCisgICAgeworICAgICAgYm9vbCBfX3JldCA9IHRydWU7CisgICAgICBpZiAoX01fbmFtZXNbMV0pCisJLy8gV2UgbXVzdCBhY3R1YWxseSBjb21wYXJlIGFsbCB0aGUgX01fbmFtZXM6IGNhbiBiZSBhbGwgZXF1YWwhCisJZm9yIChzaXplX3QgX19pID0gMDsgX19yZXQgJiYgX19pIDwgX1NfY2F0ZWdvcmllc19zaXplIC0gMTsgKytfX2kpCisJICBfX3JldCA9IF9fYnVpbHRpbl9zdHJjbXAoX01fbmFtZXNbX19pXSwgX01fbmFtZXNbX19pICsgMV0pID09IDA7CisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisgICAgdm9pZAorICAgIF9NX3JlcGxhY2VfY2F0ZWdvcmllcyhjb25zdCBfSW1wbCosIGNhdGVnb3J5KTsKKworICAgIHZvaWQKKyAgICBfTV9yZXBsYWNlX2NhdGVnb3J5KGNvbnN0IF9JbXBsKiwgY29uc3QgbG9jYWxlOjppZCogY29uc3QqKTsKKworICAgIHZvaWQKKyAgICBfTV9yZXBsYWNlX2ZhY2V0KGNvbnN0IF9JbXBsKiwgY29uc3QgbG9jYWxlOjppZCopOworCisgICAgdm9pZAorICAgIF9NX2luc3RhbGxfZmFjZXQoY29uc3QgbG9jYWxlOjppZCosIGNvbnN0IGZhY2V0Kik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CisgICAgICB2b2lkCisgICAgICBfTV9pbml0X2ZhY2V0KF9GYWNldCogX19mYWNldCkKKyAgICAgIHsgX01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwgX19mYWNldCk7IH0KKworICAgIHZvaWQKKyAgICBfTV9pbnN0YWxsX2NhY2hlKGNvbnN0IGZhY2V0Kiwgc2l6ZV90KTsKKyAgfTsKKworCisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGZvciB0aGUgcHJlc2VuY2Ugb2YgYSBmYWNldC4KKyAgICoKKyAgICogIGhhc19mYWNldCB0ZXN0cyB0aGUgbG9jYWxlIGFyZ3VtZW50IGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIGZhY2V0IHR5cGUKKyAgICogIHByb3ZpZGVkIGFzIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIuICBGYWNldHMgZGVyaXZlZCBmcm9tIHRoZSBmYWNldAorICAgKiAgcGFyYW1ldGVyIHdpbGwgYWxzbyByZXR1cm4gdHJ1ZS4KKyAgICoKKyAgICogIEBwYXJhbSAgRmFjZXQgIFRoZSBmYWNldCB0eXBlIHRvIHRlc3QgdGhlIHByZXNlbmNlIG9mLgorICAgKiAgQHBhcmFtICBsb2NhbGUgIFRoZSBsb2NhbGUgdG8gdGVzdC4KKyAgICogIEByZXR1cm4gIHRydWUgaWYgbG9jYWxlIGNvbnRhaW5zIGEgZmFjZXQgb2YgdHlwZSBGYWNldCwgZWxzZSBmYWxzZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgorICAgIGJvb2wKKyAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKTsKKworICAvKioKKyAgICogIEBicmllZiAgUmV0dXJuIGEgZmFjZXQuCisgICAqCisgICAqICB1c2VfZmFjZXQgbG9va3MgZm9yIGFuZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIGEgZmFjZXQgb2YgdHlwZSBGYWNldAorICAgKiAgd2hlcmUgRmFjZXQgaXMgdGhlIHRlbXBsYXRlIHBhcmFtZXRlci4gIElmIGhhc19mYWNldChsb2NhbGUpIGlzIHRydWUsCisgICAqICB0aGVyZSBpcyBhIHN1aXRhYmxlIGZhY2V0IHRvIHJldHVybi4gIEl0IHRocm93cyBzdGQ6OmJhZF9jYXN0IGlmIHRoZQorICAgKiAgbG9jYWxlIGRvZXNuJ3QgY29udGFpbiBhIGZhY2V0IG9mIHR5cGUgRmFjZXQuCisgICAqCisgICAqICBAcGFyYW0gIEZhY2V0ICBUaGUgZmFjZXQgdHlwZSB0byBhY2Nlc3MuCisgICAqICBAcGFyYW0gIGxvY2FsZSAgVGhlIGxvY2FsZSB0byB1c2UuCisgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gZmFjZXQgb2YgdHlwZSBGYWNldC4KKyAgICogIEB0aHJvdyAgc3RkOjpiYWRfY2FzdCBpZiBsb2NhbGUgZG9lc24ndCBjb250YWluIGEgZmFjZXQgb2YgdHlwZSBGYWNldC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgorICAgIGNvbnN0IF9GYWNldCYKKyAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYyk7CisKKworICAvKioKKyAgICogIEBicmllZiAgRmFjZXQgZm9yIGxvY2FsaXplZCBzdHJpbmcgY29tcGFyaXNvbi4KKyAgICoKKyAgICogIFRoaXMgZmFjZXQgZW5jYXBzdWxhdGVzIHRoZSBjb2RlIHRvIGNvbXBhcmUgc3RyaW5ncyBpbiBhIGxvY2FsaXplZAorICAgKiAgbWFubmVyLgorICAgKgorICAgKiAgVGhlIGNvbGxhdGUgdGVtcGxhdGUgdXNlcyBwcm90ZWN0ZWQgdmlydHVhbCBmdW5jdGlvbnMgdG8gcHJvdmlkZQorICAgKiAgdGhlIGFjdHVhbCByZXN1bHRzLiAgVGhlIHB1YmxpYyBhY2Nlc3NvcnMgZm9yd2FyZCB0aGUgY2FsbCB0bworICAgKiAgdGhlIHZpcnR1YWwgZnVuY3Rpb25zLiAgVGhlc2UgdmlydHVhbCBmdW5jdGlvbnMgYXJlIGhvb2tzIGZvcgorICAgKiAgZGV2ZWxvcGVycyB0byBpbXBsZW1lbnQgdGhlIGJlaGF2aW9yIHRoZXkgcmVxdWlyZSBmcm9tIHRoZQorICAgKiAgY29sbGF0ZSBmYWNldC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGNsYXNzIGNvbGxhdGUgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlczoKKyAgICAgIC8vQHsKKyAgICAgIC8vLyBQdWJsaWMgdHlwZWRlZnMKKyAgICAgIHR5cGVkZWYgX0NoYXJUCQkJY2hhcl90eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPglzdHJpbmdfdHlwZTsKKyAgICAgIC8vQH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIC8vIFVuZGVybHlpbmcgIkMiIGxpYnJhcnkgbG9jYWxlIGluZm9ybWF0aW9uIHNhdmVkIGZyb20KKyAgICAgIC8vIGluaXRpYWxpemF0aW9uLCBuZWVkZWQgYnkgY29sbGF0ZV9ieW5hbWUgYXMgd2VsbC4KKyAgICAgIF9fY19sb2NhbGUJCQlfTV9jX2xvY2FsZV9jb2xsYXRlOworCisgICAgcHVibGljOgorICAgICAgLy8vIE51bXB1bmN0IGZhY2V0IGlkLgorICAgICAgc3RhdGljIGxvY2FsZTo6aWQJCQlpZDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3RvciBwZXJmb3JtcyBpbml0aWFsaXphdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyB0aGUgY29uc3RydWN0b3IgcHJvdmlkZWQgYnkgdGhlIHN0YW5kYXJkLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gcmVmcyAgUGFzc2VkIHRvIHRoZSBiYXNlIGZhY2V0IGNsYXNzLgorICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBjb2xsYXRlKHNpemVfdCBfX3JlZnMgPSAwKQorICAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9jb2xsYXRlKF9TX2dldF9jX2xvY2FsZSgpKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW50ZXJuYWwgY29uc3RydWN0b3IuIE5vdCBmb3IgZ2VuZXJhbCB1c2UuCisgICAgICAgKgorICAgICAgICogIFRoaXMgaXMgYSBjb25zdHJ1Y3RvciBmb3IgdXNlIGJ5IHRoZSBsaWJyYXJ5IGl0c2VsZiB0byBzZXQgdXAgbmV3CisgICAgICAgKiAgbG9jYWxlcy4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIGNsb2MgIFRoZSBDIGxvY2FsZS4KKyAgICAgICAqICBAcGFyYW0gcmVmcyAgUGFzc2VkIHRvIHRoZSBiYXNlIGZhY2V0IGNsYXNzLgorICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBjb2xsYXRlKF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCkKKyAgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfY29sbGF0ZShfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29tcGFyZSB0d28gc3RyaW5ncy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBjb21wYXJlcyB0d28gc3RyaW5ncyBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IGJ5IGNhbGxpbmcKKyAgICAgICAqICBjb2xsYXRlOjpkb19jb21wYXJlKCkuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBsbzEgIFN0YXJ0IG9mIHN0cmluZyAxLgorICAgICAgICogIEBwYXJhbSBoaTEgIEVuZCBvZiBzdHJpbmcgMS4KKyAgICAgICAqICBAcGFyYW0gbG8yICBTdGFydCBvZiBzdHJpbmcgMi4KKyAgICAgICAqICBAcGFyYW0gaGkyICBFbmQgb2Ygc3RyaW5nIDIuCisgICAgICAgKiAgQHJldHVybiAgMSBpZiBzdHJpbmcxID4gc3RyaW5nMiwgLTEgaWYgc3RyaW5nMSA8IHN0cmluZzIsIGVsc2UgMC4KKyAgICAgICovCisgICAgICBpbnQKKyAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKKwkgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fY29tcGFyZShfX2xvMSwgX19oaTEsIF9fbG8yLCBfX2hpMik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBUcmFuc2Zvcm0gc3RyaW5nIHRvIGNvbXBhcmFibGUgZm9ybS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBpcyBhIHdyYXBwZXIgZm9yIHN0cnhmcm0gZnVuY3Rpb25hbGl0eS4gIEl0IHRha2VzIHRoZQorICAgICAgICogIGlucHV0IHN0cmluZyBhbmQgcmV0dXJucyBhIG1vZGlmaWVkIHN0cmluZyB0aGF0IGNhbiBiZSBkaXJlY3RseQorICAgICAgICogIGNvbXBhcmVkIHRvIG90aGVyIHRyYW5zZm9ybWVkIHN0cmluZ3MuICBJbiB0aGUgQyBsb2NhbGUsIHRoaXMKKyAgICAgICAqICBmdW5jdGlvbiBqdXN0IHJldHVybnMgYSBjb3B5IG9mIHRoZSBpbnB1dCBzdHJpbmcuICBJbiBzb21lIG90aGVyCisgICAgICAgKiAgbG9jYWxlcywgaXQgbWF5IHJlcGxhY2UgdHdvIGNoYXJzIHdpdGggb25lLCBjaGFuZ2UgYSBjaGFyIGZvcgorICAgICAgICogIGFub3RoZXIsIGV0Yy4gIEl0IGRvZXMgc28gYnkgcmV0dXJuaW5nIGNvbGxhdGU6OmRvX3RyYW5zZm9ybSgpLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gbG8gIFN0YXJ0IG9mIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gaGkgIEVuZCBvZiBzdHJpbmcuCisgICAgICAgKiAgQHJldHVybiAgVHJhbnNmb3JtZWQgc3RyaW5nX3R5cGUuCisgICAgICAqLworICAgICAgc3RyaW5nX3R5cGUKKyAgICAgIHRyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RyYW5zZm9ybShfX2xvLCBfX2hpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBoYXNoIG9mIGEgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGNvbXB1dGVzIGFuZCByZXR1cm5zIGEgaGFzaCBvbiB0aGUgaW5wdXQgc3RyaW5nLiAgSXQKKyAgICAgICAqICBkb2VzIHNvIGJ5IHJldHVybmluZyBjb2xsYXRlOjpkb19oYXNoKCkuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBsbyAgU3RhcnQgb2Ygc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBoaSAgRW5kIG9mIHN0cmluZy4KKyAgICAgICAqICBAcmV0dXJuICBIYXNoIHZhbHVlLgorICAgICAgKi8KKyAgICAgIGxvbmcKKyAgICAgIGhhc2goY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19oYXNoKF9fbG8sIF9faGkpOyB9CisKKyAgICAgIC8vIFVzZWQgdG8gYWJzdHJhY3Qgb3V0IF9DaGFyVCBiaXRzIGluIHZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucywgYmVsb3cuCisgICAgICBpbnQKKyAgICAgIF9NX2NvbXBhcmUoY29uc3QgX0NoYXJUKiwgY29uc3QgX0NoYXJUKikgY29uc3QgdGhyb3coKTsKKworICAgICAgc2l6ZV90CisgICAgICBfTV90cmFuc2Zvcm0oX0NoYXJUKiwgY29uc3QgX0NoYXJUKiwgc2l6ZV90KSBjb25zdCB0aHJvdygpOworCisgIHByb3RlY3RlZDoKKyAgICAgIC8vLyBEZXN0cnVjdG9yLgorICAgICAgdmlydHVhbAorICAgICAgfmNvbGxhdGUoKQorICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX2NvbGxhdGUpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29tcGFyZSB0d28gc3RyaW5ncy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sgZm9yIGRlcml2ZWQgY2xhc3NlcyB0byBjaGFuZ2UgdGhlIHZhbHVlCisgICAgICAgKiAgcmV0dXJuZWQuICBAc2VlIGNvbXBhcmUoKS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIGxvMSAgU3RhcnQgb2Ygc3RyaW5nIDEuCisgICAgICAgKiAgQHBhcmFtIGhpMSAgRW5kIG9mIHN0cmluZyAxLgorICAgICAgICogIEBwYXJhbSBsbzIgIFN0YXJ0IG9mIHN0cmluZyAyLgorICAgICAgICogIEBwYXJhbSBoaTIgIEVuZCBvZiBzdHJpbmcgMi4KKyAgICAgICAqICBAcmV0dXJuICAxIGlmIHN0cmluZzEgPiBzdHJpbmcyLCAtMSBpZiBzdHJpbmcxIDwgc3RyaW5nMiwgZWxzZSAwLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgaW50CisgICAgICBkb19jb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNvbnN0IF9DaGFyVCogX19oaTEsCisJCSBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBUcmFuc2Zvcm0gc3RyaW5nIHRvIGNvbXBhcmFibGUgZm9ybS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sgZm9yIGRlcml2ZWQgY2xhc3NlcyB0byBjaGFuZ2UgdGhlIHZhbHVlCisgICAgICAgKiAgcmV0dXJuZWQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBsbzEgIFN0YXJ0IG9mIHN0cmluZyAxLgorICAgICAgICogIEBwYXJhbSBoaTEgIEVuZCBvZiBzdHJpbmcgMS4KKyAgICAgICAqICBAcGFyYW0gbG8yICBTdGFydCBvZiBzdHJpbmcgMi4KKyAgICAgICAqICBAcGFyYW0gaGkyICBFbmQgb2Ygc3RyaW5nIDIuCisgICAgICAgKiAgQHJldHVybiAgMSBpZiBzdHJpbmcxID4gc3RyaW5nMiwgLTEgaWYgc3RyaW5nMSA8IHN0cmluZzIsIGVsc2UgMC4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCisgICAgICBkb190cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBoYXNoIG9mIGEgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGNvbXB1dGVzIGFuZCByZXR1cm5zIGEgaGFzaCBvbiB0aGUgaW5wdXQgc3RyaW5nLiAgVGhpcworICAgICAgICogIGZ1bmN0aW9uIGlzIGEgaG9vayBmb3IgZGVyaXZlZCBjbGFzc2VzIHRvIGNoYW5nZSB0aGUgdmFsdWUgcmV0dXJuZWQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBsbyAgU3RhcnQgb2Ygc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBoaSAgRW5kIG9mIHN0cmluZy4KKyAgICAgICAqICBAcmV0dXJuICBIYXNoIHZhbHVlLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgbG9uZworICAgICAgZG9faGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3Q7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgbG9jYWxlOjppZCBjb2xsYXRlPF9DaGFyVD46OmlkOworCisgIC8vIFNwZWNpYWxpemF0aW9ucy4KKyAgdGVtcGxhdGU8PgorICAgIGludAorICAgIGNvbGxhdGU8Y2hhcj46Ol9NX2NvbXBhcmUoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKSBjb25zdCB0aHJvdygpOworCisgIHRlbXBsYXRlPD4KKyAgICBzaXplX3QKKyAgICBjb2xsYXRlPGNoYXI+OjpfTV90cmFuc2Zvcm0oY2hhciosIGNvbnN0IGNoYXIqLCBzaXplX3QpIGNvbnN0IHRocm93KCk7CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICB0ZW1wbGF0ZTw+CisgICAgaW50CisgICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fY29tcGFyZShjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopIGNvbnN0IHRocm93KCk7CisKKyAgdGVtcGxhdGU8PgorICAgIHNpemVfdAorICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX3RyYW5zZm9ybSh3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCosIHNpemVfdCkgY29uc3QgdGhyb3coKTsKKyNlbmRpZgorCisgIC8vLyBjbGFzcyBjb2xsYXRlX2J5bmFtZSBbMjIuMi40LjJdLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgY2xhc3MgY29sbGF0ZV9ieW5hbWUgOiBwdWJsaWMgY29sbGF0ZTxfQ2hhclQ+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vQHsKKyAgICAgIC8vLyBQdWJsaWMgdHlwZWRlZnMKKyAgICAgIHR5cGVkZWYgX0NoYXJUICAgICAgICAgICAgICAgY2hhcl90eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKKyAgICAgIC8vQH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIGNvbGxhdGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCisgICAgICA6IGNvbGxhdGU8X0NoYXJUPihfX3JlZnMpCisgICAgICB7CisJaWYgKF9fYnVpbHRpbl9zdHJjbXAoX19zLCAiQyIpICE9IDAKKwkgICAgJiYgX19idWlsdGluX3N0cmNtcChfX3MsICJQT1NJWCIpICE9IDApCisJICB7CisJICAgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY29sbGF0ZSk7CisJICAgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jb2xsYXRlLCBfX3MpOworCSAgfQorICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgdmlydHVhbAorICAgICAgfmNvbGxhdGVfYnluYW1lKCkgeyB9CisgICAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjaWZuZGVmIF9HTElCQ1hYX0VYUE9SVF9URU1QTEFURQorIyBpbmNsdWRlIDxiaXRzL2xvY2FsZV9jbGFzc2VzLnRjYz4KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9sb2NhbGVfY2xhc3Nlcy50Y2MgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvbG9jYWxlX2NsYXNzZXMudGNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkY2YyMDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvbG9jYWxlX2NsYXNzZXMudGNjCkBAIC0wLDAgKzEsMjcxIEBACisvLyBMb2NhbGUgc3VwcG9ydCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGxvY2FsZV9jbGFzc2VzLnRjYworICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjIuMSAgTG9jYWxlcworLy8KKworI2lmbmRlZiBfTE9DQUxFX0NMQVNTRVNfVENDCisjZGVmaW5lIF9MT0NBTEVfQ0xBU1NFU19UQ0MgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgorICAgIGxvY2FsZTo6CisgICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpCisgICAgeworICAgICAgX01faW1wbCA9IG5ldyBfSW1wbCgqX19vdGhlci5fTV9pbXBsLCAxKTsKKworICAgICAgX190cnkKKwl7IF9NX2ltcGwtPl9NX2luc3RhbGxfZmFjZXQoJl9GYWNldDo6aWQsIF9fZik7IH0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIF9NX2ltcGwtPl9NX3JlbW92ZV9yZWZlcmVuY2UoKTsKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICAgIGRlbGV0ZSBbXSBfTV9pbXBsLT5fTV9uYW1lc1swXTsKKyAgICAgIF9NX2ltcGwtPl9NX25hbWVzWzBdID0gMDsgICAvLyBVbm5hbWVkLgorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CisgICAgbG9jYWxlCisgICAgbG9jYWxlOjoKKyAgICBjb21iaW5lKGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3QKKyAgICB7CisgICAgICBfSW1wbCogX190bXAgPSBuZXcgX0ltcGwoKl9NX2ltcGwsIDEpOworICAgICAgX190cnkKKwl7CisJICBfX3RtcC0+X01fcmVwbGFjZV9mYWNldChfX290aGVyLl9NX2ltcGwsICZfRmFjZXQ6OmlkKTsKKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBfX3RtcC0+X01fcmVtb3ZlX3JlZmVyZW5jZSgpOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgICAgcmV0dXJuIGxvY2FsZShfX3RtcCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGJvb2wKKyAgICBsb2NhbGU6OgorICAgIG9wZXJhdG9yKCkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKKwkgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMikgY29uc3QKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6Y29sbGF0ZTxfQ2hhclQ+IF9fY29sbGF0ZV90eXBlOworICAgICAgY29uc3QgX19jb2xsYXRlX3R5cGUmIF9fY29sbGF0ZSA9IHVzZV9mYWNldDxfX2NvbGxhdGVfdHlwZT4oKnRoaXMpOworICAgICAgcmV0dXJuIChfX2NvbGxhdGUuY29tcGFyZShfX3MxLmRhdGEoKSwgX19zMS5kYXRhKCkgKyBfX3MxLmxlbmd0aCgpLAorCQkJCV9fczIuZGF0YSgpLCBfX3MyLmRhdGEoKSArIF9fczIubGVuZ3RoKCkpIDwgMCk7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgorICAgIGJvb2wKKyAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdCBfX2kgPSBfRmFjZXQ6OmlkLl9NX2lkKCk7CisgICAgICBjb25zdCBsb2NhbGU6OmZhY2V0KiogX19mYWNldHMgPSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHM7CisgICAgICByZXR1cm4gKF9faSA8IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0c19zaXplCisjaWZkZWYgX19HWFhfUlRUSQorCSAgICAgICYmIGR5bmFtaWNfY2FzdDxjb25zdCBfRmFjZXQqPihfX2ZhY2V0c1tfX2ldKSk7CisjZWxzZQorICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxjb25zdCBfRmFjZXQqPihfX2ZhY2V0c1tfX2ldKSk7CisjZW5kaWYKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgorICAgIGNvbnN0IF9GYWNldCYKKyAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykKKyAgICB7CisgICAgICBjb25zdCBzaXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9pZCgpOworICAgICAgY29uc3QgbG9jYWxlOjpmYWNldCoqIF9fZmFjZXRzID0gX19sb2MuX01faW1wbC0+X01fZmFjZXRzOworICAgICAgaWYgKF9faSA+PSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHNfc2l6ZSB8fCAhX19mYWNldHNbX19pXSkKKyAgICAgICAgX190aHJvd19iYWRfY2FzdCgpOworI2lmZGVmIF9fR1hYX1JUVEkKKyAgICAgIHJldHVybiBkeW5hbWljX2Nhc3Q8Y29uc3QgX0ZhY2V0Jj4oKl9fZmFjZXRzW19faV0pOworI2Vsc2UKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBfRmFjZXQmPigqX19mYWNldHNbX19pXSk7CisjZW5kaWYKKyAgICB9CisKKworICAvLyBHZW5lcmljIHZlcnNpb24gZG9lcyBub3RoaW5nLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgaW50CisgICAgY29sbGF0ZTxfQ2hhclQ+OjpfTV9jb21wYXJlKGNvbnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCopIGNvbnN0IHRocm93ICgpCisgICAgeyByZXR1cm4gMDsgfQorCisgIC8vIEdlbmVyaWMgdmVyc2lvbiBkb2VzIG5vdGhpbmcuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBzaXplX3QKKyAgICBjb2xsYXRlPF9DaGFyVD46Ol9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBfQ2hhclQqLCBzaXplX3QpIGNvbnN0IHRocm93ICgpCisgICAgeyByZXR1cm4gMDsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBpbnQKKyAgICBjb2xsYXRlPF9DaGFyVD46OgorICAgIGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKKwkgICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3QKKyAgICB7CisgICAgICAvLyBzdHJjb2xsIGFzc3VtZXMgemVyby10ZXJtaW5hdGVkIHN0cmluZ3Mgc28gd2UgbWFrZSBhIGNvcHkKKyAgICAgIC8vIGFuZCB0aGVuIHB1dCBhIHplcm8gYXQgdGhlIGVuZC4KKyAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9fb25lKF9fbG8xLCBfX2hpMSk7CisgICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3R3byhfX2xvMiwgX19oaTIpOworCisgICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IF9fb25lLmNfc3RyKCk7CisgICAgICBjb25zdCBfQ2hhclQqIF9fcGVuZCA9IF9fb25lLmRhdGEoKSArIF9fb25lLmxlbmd0aCgpOworICAgICAgY29uc3QgX0NoYXJUKiBfX3EgPSBfX3R3by5jX3N0cigpOworICAgICAgY29uc3QgX0NoYXJUKiBfX3FlbmQgPSBfX3R3by5kYXRhKCkgKyBfX3R3by5sZW5ndGgoKTsKKworICAgICAgLy8gc3RyY29sbCBzdG9wcyB3aGVuIGl0IHNlZXMgYSBudWwgY2hhcmFjdGVyIHNvIHdlIGJyZWFrCisgICAgICAvLyB0aGUgc3RyaW5ncyBpbnRvIHplcm8tdGVybWluYXRlZCBzdWJzdHJpbmdzIGFuZCBwYXNzIHRob3NlCisgICAgICAvLyB0byBzdHJjb2xsLgorICAgICAgZm9yICg7OykKKwl7CisJICBjb25zdCBpbnQgX19yZXMgPSBfTV9jb21wYXJlKF9fcCwgX19xKTsKKwkgIGlmIChfX3JlcykKKwkgICAgcmV0dXJuIF9fcmVzOworCisJICBfX3AgKz0gY2hhcl90cmFpdHM8X0NoYXJUPjo6bGVuZ3RoKF9fcCk7CisJICBfX3EgKz0gY2hhcl90cmFpdHM8X0NoYXJUPjo6bGVuZ3RoKF9fcSk7CisJICBpZiAoX19wID09IF9fcGVuZCAmJiBfX3EgPT0gX19xZW5kKQorCSAgICByZXR1cm4gMDsKKwkgIGVsc2UgaWYgKF9fcCA9PSBfX3BlbmQpCisJICAgIHJldHVybiAtMTsKKwkgIGVsc2UgaWYgKF9fcSA9PSBfX3FlbmQpCisJICAgIHJldHVybiAxOworCisJICBfX3ArKzsKKwkgIF9fcSsrOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIHR5cGVuYW1lIGNvbGxhdGU8X0NoYXJUPjo6c3RyaW5nX3R5cGUKKyAgICBjb2xsYXRlPF9DaGFyVD46OgorICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKKyAgICB7CisgICAgICBzdHJpbmdfdHlwZSBfX3JldDsKKworICAgICAgLy8gc3RyeGZybSBhc3N1bWVzIHplcm8tdGVybWluYXRlZCBzdHJpbmdzIHNvIHdlIG1ha2UgYSBjb3B5CisgICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3N0cihfX2xvLCBfX2hpKTsKKworICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSBfX3N0ci5jX3N0cigpOworICAgICAgY29uc3QgX0NoYXJUKiBfX3BlbmQgPSBfX3N0ci5kYXRhKCkgKyBfX3N0ci5sZW5ndGgoKTsKKworICAgICAgc2l6ZV90IF9fbGVuID0gKF9faGkgLSBfX2xvKSAqIDI7CisKKyAgICAgIF9DaGFyVCogX19jID0gbmV3IF9DaGFyVFtfX2xlbl07CisKKyAgICAgIF9fdHJ5CisJeworCSAgLy8gc3RyeGZybSBzdG9wcyB3aGVuIGl0IHNlZXMgYSBudWwgY2hhcmFjdGVyIHNvIHdlIGJyZWFrCisJICAvLyB0aGUgc3RyaW5nIGludG8gemVyby10ZXJtaW5hdGVkIHN1YnN0cmluZ3MgYW5kIHBhc3MgdGhvc2UKKwkgIC8vIHRvIHN0cnhmcm0uCisJICBmb3IgKDs7KQorCSAgICB7CisJICAgICAgLy8gRmlyc3QgdHJ5IGEgYnVmZmVyIHBlcmhhcHMgYmlnIGVub3VnaC4KKwkgICAgICBzaXplX3QgX19yZXMgPSBfTV90cmFuc2Zvcm0oX19jLCBfX3AsIF9fbGVuKTsKKwkgICAgICAvLyBJZiB0aGUgYnVmZmVyIHdhcyBub3QgbGFyZ2UgZW5vdWdoLCB0cnkgYWdhaW4gd2l0aCB0aGUKKwkgICAgICAvLyBjb3JyZWN0IHNpemUuCisJICAgICAgaWYgKF9fcmVzID49IF9fbGVuKQorCQl7CisJCSAgX19sZW4gPSBfX3JlcyArIDE7CisJCSAgZGVsZXRlIFtdIF9fYywgX19jID0gMDsKKwkJICBfX2MgPSBuZXcgX0NoYXJUW19fbGVuXTsKKwkJICBfX3JlcyA9IF9NX3RyYW5zZm9ybShfX2MsIF9fcCwgX19sZW4pOworCQl9CisKKwkgICAgICBfX3JldC5hcHBlbmQoX19jLCBfX3Jlcyk7CisJICAgICAgX19wICs9IGNoYXJfdHJhaXRzPF9DaGFyVD46Omxlbmd0aChfX3ApOworCSAgICAgIGlmIChfX3AgPT0gX19wZW5kKQorCQlicmVhazsKKworCSAgICAgIF9fcCsrOworCSAgICAgIF9fcmV0LnB1c2hfYmFjayhfQ2hhclQoKSk7CisJICAgIH0KKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBkZWxldGUgW10gX19jOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorCisgICAgICBkZWxldGUgW10gX19jOworCisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBsb25nCisgICAgY29sbGF0ZTxfQ2hhclQ+OjoKKyAgICBkb19oYXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgX192YWwgPSAwOworICAgICAgZm9yICg7IF9fbG8gPCBfX2hpOyArK19fbG8pCisJX192YWwgPQorCSAgKl9fbG8gKyAoKF9fdmFsIDw8IDcpCisJCSAgIHwgKF9fdmFsID4+IChfX2dudV9jeHg6Ol9fbnVtZXJpY190cmFpdHM8dW5zaWduZWQgbG9uZz46OgorCQkJCV9fZGlnaXRzIC0gNykpKTsKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxsb25nPihfX3ZhbCk7CisgICAgfQorCisgIC8vIEluaGliaXQgaW1wbGljaXQgaW5zdGFudGlhdGlvbnMgZm9yIHJlcXVpcmVkIGluc3RhbnRpYXRpb25zLAorICAvLyB3aGljaCBhcmUgZGVmaW5lZCB2aWEgZXhwbGljaXQgaW5zdGFudGlhdGlvbnMgZWxzZXdoZXJlLgorICAvLyBOQjogVGhpcyBzeW50YXggaXMgYSBHTlUgZXh0ZW5zaW9uLgorI2lmIF9HTElCQ1hYX0VYVEVSTl9URU1QTEFURQorICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZTxjaGFyPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvbGxhdGVfYnluYW1lPGNoYXI+OworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGNvbnN0IGNvbGxhdGU8Y2hhcj4mCisgICAgdXNlX2ZhY2V0PGNvbGxhdGU8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBib29sCisgICAgaGFzX2ZhY2V0PGNvbGxhdGU8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlPHdjaGFyX3Q+OworICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZV9ieW5hbWU8d2NoYXJfdD47CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgY29uc3QgY29sbGF0ZTx3Y2hhcl90PiYKKyAgICB1c2VfZmFjZXQ8Y29sbGF0ZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGJvb2wKKyAgICBoYXNfZmFjZXQ8Y29sbGF0ZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOworI2VuZGlmCisjZW5kaWYKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9sb2NhbGVfZmFjZXRzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvbG9jYWxlX2ZhY2V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMThmN2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvbG9jYWxlX2ZhY2V0cy5oCkBAIC0wLDAgKzEsMjYwNCBAQAorLy8gTG9jYWxlIHN1cHBvcnQgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LAorLy8gMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGxvY2FsZV9mYWNldHMuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjIuMSAgTG9jYWxlcworLy8KKworI2lmbmRlZiBfTE9DQUxFX0ZBQ0VUU19ICisjZGVmaW5lIF9MT0NBTEVfRkFDRVRTX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxjd2N0eXBlPgkvLyBGb3Igd2N0eXBlX3QKKyNpbmNsdWRlIDxjY3R5cGU+CisjaW5jbHVkZSA8Yml0cy9jdHlwZV9iYXNlLmg+CQorI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNsdWRlIDxiaXRzL2lvc19iYXNlLmg+ICAvLyBGb3IgaW9zX2Jhc2UsIGlvc19iYXNlOjppb3N0YXRlCisjaW5jbHVkZSA8c3RyZWFtYnVmPgorI2luY2x1ZGUgPGJpdHMvY3BwX3R5cGVfdHJhaXRzLmg+CisjaW5jbHVkZSA8ZXh0L3R5cGVfdHJhaXRzLmg+CisjaW5jbHVkZSA8ZXh0L251bWVyaWNfdHJhaXRzLmg+CisjaW5jbHVkZSA8Yml0cy9zdHJlYW1idWZfaXRlcmF0b3IuaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvLyBOQjogRG9uJ3QgaW5zdGFudGlhdGUgcmVxdWlyZWQgd2NoYXJfdCBmYWNldHMgaWYgbm8gd2NoYXJfdCBzdXBwb3J0LgorI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisjIGRlZmluZSAgX0dMSUJDWFhfTlVNX0ZBQ0VUUyAyOAorI2Vsc2UKKyMgZGVmaW5lICBfR0xJQkNYWF9OVU1fRkFDRVRTIDE0CisjZW5kaWYKKworICAvLyBDb252ZXJ0IHN0cmluZyB0byBudW1lcmljIHZhbHVlIG9mIHR5cGUgX1RwIGFuZCBzdG9yZSByZXN1bHRzLgorICAvLyBOQjogVGhpcyBpcyBzcGVjaWFsaXplZCBmb3IgYWxsIHJlcXVpcmVkIHR5cGVzLCB0aGVyZSBpcyBubworICAvLyBnZW5lcmljIGRlZmluaXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICB2b2lkCisgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciosIF9UcCYsIGlvc19iYXNlOjppb3N0YXRlJiwKKwkJICAgY29uc3QgX19jX2xvY2FsZSYpIHRocm93KCk7CisKKyAgLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb25zIGZvciByZXF1aXJlZCB0eXBlcy4KKyAgdGVtcGxhdGU8PgorICAgIHZvaWQKKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiwgZmxvYXQmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsCisJCSAgIGNvbnN0IF9fY19sb2NhbGUmKSB0aHJvdygpOworCisgIHRlbXBsYXRlPD4KKyAgICB2b2lkCisgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciosIGRvdWJsZSYsIGlvc19iYXNlOjppb3N0YXRlJiwKKwkJICAgY29uc3QgX19jX2xvY2FsZSYpIHRocm93KCk7CisKKyAgdGVtcGxhdGU8PgorICAgIHZvaWQKKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiwgbG9uZyBkb3VibGUmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsCisJCSAgIGNvbnN0IF9fY19sb2NhbGUmKSB0aHJvdygpOworCisgIC8vIE5COiBfX3BhZCBpcyBhIHN0cnVjdCwgcmF0aGVyIHRoYW4gYSBmdW5jdGlvbiwgc28gaXQgY2FuIGJlCisgIC8vIHBhcnRpYWxseS1zcGVjaWFsaXplZC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0cnVjdCBfX3BhZAorICAgIHsKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfU19wYWQoaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIF9DaGFyVCogX19uZXdzLAorCSAgICAgY29uc3QgX0NoYXJUKiBfX29sZHMsIHN0cmVhbXNpemUgX19uZXdsZW4sIHN0cmVhbXNpemUgX19vbGRsZW4pOworICAgIH07CisKKyAgLy8gVXNlZCBieSBib3RoIG51bWVyaWMgYW5kIG1vbmV0YXJ5IGZhY2V0cy4KKyAgLy8gSW5zZXJ0cyAiZ3JvdXAgc2VwYXJhdG9yIiBjaGFyYWN0ZXJzIGludG8gYW4gYXJyYXkgb2YgY2hhcmFjdGVycy4KKyAgLy8gSXQncyByZWN1cnNpdmUsIG9uZSBpdGVyYXRpb24gcGVyIGdyb3VwLiAgSXQgbW92ZXMgdGhlIGNoYXJhY3RlcnMKKyAgLy8gaW4gdGhlIGJ1ZmZlciB0aGlzIHdheTogInh4eHgxMjM0NSIgLT4gIjEyLDM0NXh4eCIuICBDYWxsIHRoaXMKKyAgLy8gb25seSB3aXRoIF9fZ3NpemUgIT0gMC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIF9DaGFyVCoKKyAgICBfX2FkZF9ncm91cGluZyhfQ2hhclQqIF9fcywgX0NoYXJUIF9fc2VwLAorCQkgICBjb25zdCBjaGFyKiBfX2diZWcsIHNpemVfdCBfX2dzaXplLAorCQkgICBjb25zdCBfQ2hhclQqIF9fZmlyc3QsIGNvbnN0IF9DaGFyVCogX19sYXN0KTsKKworICAvLyBUaGlzIHRlbXBsYXRlIHBlcm1pdHMgc3BlY2lhbGl6aW5nIGZhY2V0IG91dHB1dCBjb2RlIGZvcgorICAvLyBvc3RyZWFtYnVmX2l0ZXJhdG9yLiAgRm9yIG9zdHJlYW1idWZfaXRlcmF0b3IsIHNwdXRuIGlzCisgIC8vIHNpZ25pZmljYW50bHkgbW9yZSBlZmZpY2llbnQgdGhhbiBpbmNyZW1lbnRpbmcgaXRlcmF0b3JzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgaW5saW5lCisgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+CisgICAgX193cml0ZShvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gX19zLCBjb25zdCBfQ2hhclQqIF9fd3MsIGludCBfX2xlbikKKyAgICB7CisgICAgICBfX3MuX01fcHV0KF9fd3MsIF9fbGVuKTsKKyAgICAgIHJldHVybiBfX3M7CisgICAgfQorCisgIC8vIFRoaXMgaXMgdGhlIHVuc3BlY2lhbGl6ZWQgZm9ybSBvZiB0aGUgdGVtcGxhdGUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CisgICAgaW5saW5lCisgICAgX091dEl0ZXIKKyAgICBfX3dyaXRlKF9PdXRJdGVyIF9fcywgY29uc3QgX0NoYXJUKiBfX3dzLCBpbnQgX19sZW4pCisgICAgeworICAgICAgZm9yIChpbnQgX19qID0gMDsgX19qIDwgX19sZW47IF9faisrLCArK19fcykKKwkqX19zID0gX193c1tfX2pdOworICAgICAgcmV0dXJuIF9fczsKKyAgICB9CisKKworICAvLyAyMi4yLjEuMSAgVGVtcGxhdGUgY2xhc3MgY3R5cGUKKyAgLy8gSW5jbHVkZSBob3N0IGFuZCBjb25maWd1cmF0aW9uIHNwZWNpZmljIGN0eXBlIGVudW1zIGZvciBjdHlwZV9iYXNlLgorCisgIC8qKgorICAgKiAgQGJyaWVmICBDb21tb24gYmFzZSBmb3IgY3R5cGUgZmFjZXQKKyAgICoKKyAgICogIFRoaXMgdGVtcGxhdGUgY2xhc3MgcHJvdmlkZXMgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBwdWJsaWMgZnVuY3Rpb25zCisgICAqICB0aGF0IGZvcndhcmQgdG8gdGhlIHByb3RlY3RlZCB2aXJ0dWFsIGZ1bmN0aW9ucy4KKyAgICoKKyAgICogIFRoaXMgdGVtcGxhdGUgYWxzbyBwcm92aWRlcyBhYnN0cmFjdCBzdHVicyBmb3IgdGhlIHByb3RlY3RlZCB2aXJ0dWFsCisgICAqICBmdW5jdGlvbnMuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBjbGFzcyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2UgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGN0eXBlX2Jhc2UKKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gVHlwZXM6CisgICAgICAvLy8gVHlwZWRlZiBmb3IgdGhlIHRlbXBsYXRlIHBhcmFtZXRlcgorICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFRlc3QgY2hhcl90eXBlIGNsYXNzaWZpY2F0aW9uLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGZpbmRzIGEgbWFzayBNIGZvciBAYSBjIGFuZCBjb21wYXJlcyBpdCB0byBtYXNrIEBhIG0uCisgICAgICAgKiAgSXQgZG9lcyBzbyBieSByZXR1cm5pbmcgdGhlIHZhbHVlIG9mIGN0eXBlPGNoYXJfdHlwZT46OmRvX2lzKCkuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBjICBUaGUgY2hhcl90eXBlIHRvIGNvbXBhcmUgdGhlIG1hc2sgb2YuCisgICAgICAgKiAgQHBhcmFtIG0gIFRoZSBtYXNrIHRvIGNvbXBhcmUgYWdhaW5zdC4KKyAgICAgICAqICBAcmV0dXJuICAoTSAmIG0pICE9IDAuCisgICAgICAqLworICAgICAgYm9vbAorICAgICAgaXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19pcyhfX20sIF9fYyk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gYSBtYXNrIGFycmF5LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBtYXNrIGZvciBlYWNoIGNoYXJfdHlwZSBpbiB0aGUgcmFuZ2UgW2xvLGhpKQorICAgICAgICogIGFuZCBzdWNjZXNzaXZlbHkgd3JpdGVzIGl0IHRvIHZlYy4gIHZlYyBtdXN0IGhhdmUgYXMgbWFueSBlbGVtZW50cworICAgICAgICogIGFzIHRoZSBjaGFyIGFycmF5LiAgSXQgZG9lcyBzbyBieSByZXR1cm5pbmcgdGhlIHZhbHVlIG9mCisgICAgICAgKiAgY3R5cGU8Y2hhcl90eXBlPjo6ZG9faXMoKS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIGxvICBQb2ludGVyIHRvIHN0YXJ0IG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBoaSAgUG9pbnRlciB0byBlbmQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIHZlYyAgUG9pbnRlciB0byBhbiBhcnJheSBvZiBtYXNrIHN0b3JhZ2UuCisgICAgICAgKiAgQHJldHVybiAgQGEgaGkuCisgICAgICAqLworICAgICAgY29uc3QgY2hhcl90eXBlKgorICAgICAgaXMoY29uc3QgY2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5cGUgKl9faGksIG1hc2sgKl9fdmVjKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9faXMoX19sbywgX19oaSwgX192ZWMpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBjaGFyX3R5cGUgbWF0Y2hpbmcgYSBtYXNrCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgZm9yIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBjaGFyX3R5cGUgYyBpbgorICAgICAgICogIFtsbyxoaSkgZm9yIHdoaWNoIGlzKG0sYykgaXMgdHJ1ZS4gIEl0IGRvZXMgc28gYnkgcmV0dXJuaW5nCisgICAgICAgKiAgY3R5cGU8Y2hhcl90eXBlPjo6ZG9fc2Nhbl9pcygpLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gbSAgVGhlIG1hc2sgdG8gY29tcGFyZSBhZ2FpbnN0LgorICAgICAgICogIEBwYXJhbSBsbyAgUG9pbnRlciB0byBzdGFydCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gaGkgIFBvaW50ZXIgdG8gZW5kIG9mIHJhbmdlLgorICAgICAgICogIEByZXR1cm4gIFBvaW50ZXIgdG8gbWF0Y2hpbmcgY2hhcl90eXBlIGlmIGZvdW5kLCBlbHNlIEBhIGhpLgorICAgICAgKi8KKyAgICAgIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9pcyhfX20sIF9fbG8sIF9faGkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBjaGFyX3R5cGUgbm90IG1hdGNoaW5nIGEgbWFzaworICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIGZvciBhbmQgcmV0dXJucyB0aGUgZmlyc3QgY2hhcl90eXBlIGMgaW4KKyAgICAgICAqICBbbG8saGkpIGZvciB3aGljaCBpcyhtLGMpIGlzIGZhbHNlLiAgSXQgZG9lcyBzbyBieSByZXR1cm5pbmcKKyAgICAgICAqICBjdHlwZTxjaGFyX3R5cGU+Ojpkb19zY2FuX25vdCgpLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gbSAgVGhlIG1hc2sgdG8gY29tcGFyZSBhZ2FpbnN0LgorICAgICAgICogIEBwYXJhbSBsbyAgUG9pbnRlciB0byBmaXJzdCBjaGFyIGluIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBoaSAgUG9pbnRlciB0byBlbmQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHJldHVybiAgUG9pbnRlciB0byBub24tbWF0Y2hpbmcgY2hhciBpZiBmb3VuZCwgZWxzZSBAYSBoaS4KKyAgICAgICovCisgICAgICBjb25zdCBjaGFyX3R5cGUqCisgICAgICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19zY2FuX25vdChfX20sIF9fbG8sIF9faGkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29udmVydCB0byB1cHBlcmNhc2UuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gY29udmVydHMgdGhlIGFyZ3VtZW50IHRvIHVwcGVyY2FzZSBpZiBwb3NzaWJsZS4KKyAgICAgICAqICBJZiBub3QgcG9zc2libGUgKGZvciBleGFtcGxlLCAnMicpLCByZXR1cm5zIHRoZSBhcmd1bWVudC4gIEl0IGRvZXMKKyAgICAgICAqICBzbyBieSByZXR1cm5pbmcgY3R5cGU8Y2hhcl90eXBlPjo6ZG9fdG91cHBlcigpLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gYyAgVGhlIGNoYXJfdHlwZSB0byBjb252ZXJ0LgorICAgICAgICogIEByZXR1cm4gIFRoZSB1cHBlcmNhc2UgY2hhcl90eXBlIGlmIGNvbnZlcnRpYmxlLCBlbHNlIEBhIGMuCisgICAgICAqLworICAgICAgY2hhcl90eXBlCisgICAgICB0b3VwcGVyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb190b3VwcGVyKF9fYyk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb252ZXJ0IGFycmF5IHRvIHVwcGVyY2FzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBlYWNoIGNoYXJfdHlwZSBpbiB0aGUgcmFuZ2UgW2xvLGhpKSB0bworICAgICAgICogIHVwcGVyY2FzZSBpZiBwb3NzaWJsZS4gIE90aGVyIGVsZW1lbnRzIHJlbWFpbiB1bnRvdWNoZWQuICBJdCBkb2VzIHNvCisgICAgICAgKiAgYnkgcmV0dXJuaW5nIGN0eXBlPGNoYXJfdHlwZT46OiBkb190b3VwcGVyKGxvLCBoaSkuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBsbyAgUG9pbnRlciB0byBzdGFydCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gaGkgIFBvaW50ZXIgdG8gZW5kIG9mIHJhbmdlLgorICAgICAgICogIEByZXR1cm4gIEBhIGhpLgorICAgICAgKi8KKyAgICAgIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIHRvdXBwZXIoY2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb190b3VwcGVyKF9fbG8sIF9faGkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29udmVydCB0byBsb3dlcmNhc2UuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gY29udmVydHMgdGhlIGFyZ3VtZW50IHRvIGxvd2VyY2FzZSBpZiBwb3NzaWJsZS4gIElmCisgICAgICAgKiAgbm90IHBvc3NpYmxlIChmb3IgZXhhbXBsZSwgJzInKSwgcmV0dXJucyB0aGUgYXJndW1lbnQuICBJdCBkb2VzIHNvCisgICAgICAgKiAgYnkgcmV0dXJuaW5nIGN0eXBlPGNoYXJfdHlwZT46OmRvX3RvbG93ZXIoYykuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBjICBUaGUgY2hhcl90eXBlIHRvIGNvbnZlcnQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIGxvd2VyY2FzZSBjaGFyX3R5cGUgaWYgY29udmVydGlibGUsIGVsc2UgQGEgYy4KKyAgICAgICovCisgICAgICBjaGFyX3R5cGUKKyAgICAgIHRvbG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19jKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnZlcnQgYXJyYXkgdG8gbG93ZXJjYXNlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIGVhY2ggY2hhcl90eXBlIGluIHRoZSByYW5nZSBbbG8saGkpIHRvCisgICAgICAgKiAgbG93ZXJjYXNlIGlmIHBvc3NpYmxlLiAgT3RoZXIgZWxlbWVudHMgcmVtYWluIHVudG91Y2hlZC4gIEl0IGRvZXMgc28KKyAgICAgICAqICBieSByZXR1cm5pbmcgY3R5cGU8Y2hhcl90eXBlPjo6IGRvX3RvbG93ZXIobG8sIGhpKS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIGxvICBQb2ludGVyIHRvIHN0YXJ0IG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBoaSAgUG9pbnRlciB0byBlbmQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHJldHVybiAgQGEgaGkuCisgICAgICAqLworICAgICAgY29uc3QgY2hhcl90eXBlKgorICAgICAgdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19sbywgX19oaSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBXaWRlbiBjaGFyIHRvIGNoYXJfdHlwZQorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBjaGFyIGFyZ3VtZW50IHRvIGNoYXJfdHlwZSB1c2luZyB0aGUKKyAgICAgICAqICBzaW1wbGVzdCByZWFzb25hYmxlIHRyYW5zZm9ybWF0aW9uLiAgSXQgZG9lcyBzbyBieSByZXR1cm5pbmcKKyAgICAgICAqICBjdHlwZTxjaGFyX3R5cGU+Ojpkb193aWRlbihjKS4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZTogdGhpcyBpcyBub3Qgd2hhdCB5b3Ugd2FudCBmb3IgY29kZXBhZ2UgY29udmVyc2lvbnMuICBTZWUKKyAgICAgICAqICBjb2RlY3Z0IGZvciB0aGF0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gYyAgVGhlIGNoYXIgdG8gY29udmVydC4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgY29udmVydGVkIGNoYXJfdHlwZS4KKyAgICAgICovCisgICAgICBjaGFyX3R5cGUKKyAgICAgIHdpZGVuKGNoYXIgX19jKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19jKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFdpZGVuIGFycmF5IHRvIGNoYXJfdHlwZQorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIGVhY2ggY2hhciBpbiB0aGUgaW5wdXQgdG8gY2hhcl90eXBlIHVzaW5nIHRoZQorICAgICAgICogIHNpbXBsZXN0IHJlYXNvbmFibGUgdHJhbnNmb3JtYXRpb24uICBJdCBkb2VzIHNvIGJ5IHJldHVybmluZworICAgICAgICogIGN0eXBlPGNoYXJfdHlwZT46OmRvX3dpZGVuKGMpLgorICAgICAgICoKKyAgICAgICAqICBOb3RlOiB0aGlzIGlzIG5vdCB3aGF0IHlvdSB3YW50IGZvciBjb2RlcGFnZSBjb252ZXJzaW9ucy4gIFNlZQorICAgICAgICogIGNvZGVjdnQgZm9yIHRoYXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBsbyAgUG9pbnRlciB0byBzdGFydCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gaGkgIFBvaW50ZXIgdG8gZW5kIG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSB0byAgUG9pbnRlciB0byB0aGUgZGVzdGluYXRpb24gYXJyYXkuCisgICAgICAgKiAgQHJldHVybiAgQGEgaGkuCisgICAgICAqLworICAgICAgY29uc3QgY2hhcioKKyAgICAgIHdpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX190bykgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9fbG8sIF9faGksIF9fdG8pOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTmFycm93IGNoYXJfdHlwZSB0byBjaGFyCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gY29udmVydHMgdGhlIGNoYXJfdHlwZSB0byBjaGFyIHVzaW5nIHRoZSBzaW1wbGVzdAorICAgICAgICogIHJlYXNvbmFibGUgdHJhbnNmb3JtYXRpb24uICBJZiB0aGUgY29udmVyc2lvbiBmYWlscywgZGZhdWx0IGlzCisgICAgICAgKiAgcmV0dXJuZWQgaW5zdGVhZC4gIEl0IGRvZXMgc28gYnkgcmV0dXJuaW5nCisgICAgICAgKiAgY3R5cGU8Y2hhcl90eXBlPjo6ZG9fbmFycm93KGMpLgorICAgICAgICoKKyAgICAgICAqICBOb3RlOiB0aGlzIGlzIG5vdCB3aGF0IHlvdSB3YW50IGZvciBjb2RlcGFnZSBjb252ZXJzaW9ucy4gIFNlZQorICAgICAgICogIGNvZGVjdnQgZm9yIHRoYXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBjICBUaGUgY2hhcl90eXBlIHRvIGNvbnZlcnQuCisgICAgICAgKiAgQHBhcmFtIGRmYXVsdCAgQ2hhciB0byByZXR1cm4gaWYgY29udmVyc2lvbiBmYWlscy4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgY29udmVydGVkIGNoYXIuCisgICAgICAqLworICAgICAgY2hhcgorICAgICAgbmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19uYXJyb3coX19jLCBfX2RmYXVsdCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBOYXJyb3cgYXJyYXkgdG8gY2hhciBhcnJheQorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIGVhY2ggY2hhcl90eXBlIGluIHRoZSBpbnB1dCB0byBjaGFyIHVzaW5nIHRoZQorICAgICAgICogIHNpbXBsZXN0IHJlYXNvbmFibGUgdHJhbnNmb3JtYXRpb24gYW5kIHdyaXRlcyB0aGUgcmVzdWx0cyB0byB0aGUKKyAgICAgICAqICBkZXN0aW5hdGlvbiBhcnJheS4gIEZvciBhbnkgY2hhcl90eXBlIGluIHRoZSBpbnB1dCB0aGF0IGNhbm5vdCBiZQorICAgICAgICogIGNvbnZlcnRlZCwgQGEgZGZhdWx0IGlzIHVzZWQgaW5zdGVhZC4gIEl0IGRvZXMgc28gYnkgcmV0dXJuaW5nCisgICAgICAgKiAgY3R5cGU8Y2hhcl90eXBlPjo6ZG9fbmFycm93KGxvLCBoaSwgZGZhdWx0LCB0bykuCisgICAgICAgKgorICAgICAgICogIE5vdGU6IHRoaXMgaXMgbm90IHdoYXQgeW91IHdhbnQgZm9yIGNvZGVwYWdlIGNvbnZlcnNpb25zLiAgU2VlCisgICAgICAgKiAgY29kZWN2dCBmb3IgdGhhdC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIGxvICBQb2ludGVyIHRvIHN0YXJ0IG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBoaSAgUG9pbnRlciB0byBlbmQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIGRmYXVsdCAgQ2hhciB0byB1c2UgaWYgY29udmVyc2lvbiBmYWlscy4KKyAgICAgICAqICBAcGFyYW0gdG8gIFBvaW50ZXIgdG8gdGhlIGRlc3RpbmF0aW9uIGFycmF5LgorICAgICAgICogIEByZXR1cm4gIEBhIGhpLgorICAgICAgKi8KKyAgICAgIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIG5hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKKwkgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyICpfX3RvKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fbG8sIF9faGksIF9fZGZhdWx0LCBfX3RvKTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgZXhwbGljaXQKKyAgICAgIF9fY3R5cGVfYWJzdHJhY3RfYmFzZShzaXplX3QgX19yZWZzID0gMCk6IGZhY2V0KF9fcmVmcykgeyB9CisKKyAgICAgIHZpcnR1YWwKKyAgICAgIH5fX2N0eXBlX2Fic3RyYWN0X2Jhc2UoKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBUZXN0IGNoYXJfdHlwZSBjbGFzc2lmaWNhdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBmaW5kcyBhIG1hc2sgTSBmb3IgQGEgYyBhbmQgY29tcGFyZXMgaXQgdG8gbWFzayBAYSBtLgorICAgICAgICoKKyAgICAgICAqICBkb19pcygpIGlzIGEgaG9vayBmb3IgYSBkZXJpdmVkIGZhY2V0IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YKKyAgICAgICAqICBjbGFzc2lmeWluZy4gIGRvX2lzKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IgdGhlCisgICAgICAgKiAgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIGMgIFRoZSBjaGFyX3R5cGUgdG8gZmluZCB0aGUgbWFzayBvZi4KKyAgICAgICAqICBAcGFyYW0gbSAgVGhlIG1hc2sgdG8gY29tcGFyZSBhZ2FpbnN0LgorICAgICAgICogIEByZXR1cm4gIChNICYgbSkgIT0gMC4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGJvb2wKKyAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdCA9IDA7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIGEgbWFzayBhcnJheS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBmaW5kcyB0aGUgbWFzayBmb3IgZWFjaCBjaGFyX3R5cGUgaW4gdGhlIHJhbmdlIFtsbyxoaSkKKyAgICAgICAqICBhbmQgc3VjY2Vzc2l2ZWx5IHdyaXRlcyBpdCB0byB2ZWMuICB2ZWMgbXVzdCBoYXZlIGFzIG1hbnkgZWxlbWVudHMKKyAgICAgICAqICBhcyB0aGUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIGRvX2lzKCkgaXMgYSBob29rIGZvciBhIGRlcml2ZWQgZmFjZXQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZgorICAgICAgICogIGNsYXNzaWZ5aW5nLiAgZG9faXMoKSBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGZvciB0aGUKKyAgICAgICAqICBzYW1lIGlucHV0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gbG8gIFBvaW50ZXIgdG8gc3RhcnQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIGhpICBQb2ludGVyIHRvIGVuZCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gdmVjICBQb2ludGVyIHRvIGFuIGFycmF5IG9mIG1hc2sgc3RvcmFnZS4KKyAgICAgICAqICBAcmV0dXJuICBAYSBoaS4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAorCSAgICBtYXNrKiBfX3ZlYykgY29uc3QgPSAwOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgY2hhcl90eXBlIG1hdGNoaW5nIG1hc2sKKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBzZWFyY2hlcyBmb3IgYW5kIHJldHVybnMgdGhlIGZpcnN0IGNoYXJfdHlwZSBjIGluCisgICAgICAgKiAgW2xvLGhpKSBmb3Igd2hpY2ggaXMobSxjKSBpcyB0cnVlLgorICAgICAgICoKKyAgICAgICAqICBkb19zY2FuX2lzKCkgaXMgYSBob29rIGZvciBhIGRlcml2ZWQgZmFjZXQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZgorICAgICAgICogIG1hdGNoIHNlYXJjaGluZy4gIGRvX2lzKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IgdGhlCisgICAgICAgKiAgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIG0gIFRoZSBtYXNrIHRvIGNvbXBhcmUgYWdhaW5zdC4KKyAgICAgICAqICBAcGFyYW0gbG8gIFBvaW50ZXIgdG8gc3RhcnQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIGhpICBQb2ludGVyIHRvIGVuZCBvZiByYW5nZS4KKyAgICAgICAqICBAcmV0dXJuICBQb2ludGVyIHRvIGEgbWF0Y2hpbmcgY2hhcl90eXBlIGlmIGZvdW5kLCBlbHNlIEBhIGhpLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgorICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAorCQkgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBjaGFyX3R5cGUgbm90IG1hdGNoaW5nIG1hc2sKKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBzZWFyY2hlcyBmb3IgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBmaXJzdAorICAgICAgICogIGNoYXJfdHlwZSBjIG9mIFtsbyxoaSkgZm9yIHdoaWNoIGlzKG0sYykgaXMgZmFsc2UuCisgICAgICAgKgorICAgICAgICogIGRvX3NjYW5faXMoKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgKiAgbWF0Y2ggc2VhcmNoaW5nLiAgZG9faXMoKSBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGZvciB0aGUKKyAgICAgICAqICBzYW1lIGlucHV0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gbSAgVGhlIG1hc2sgdG8gY29tcGFyZSBhZ2FpbnN0LgorICAgICAgICogIEBwYXJhbSBsbyAgUG9pbnRlciB0byBzdGFydCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gaGkgIFBvaW50ZXIgdG8gZW5kIG9mIHJhbmdlLgorICAgICAgICogIEByZXR1cm4gIFBvaW50ZXIgdG8gYSBub24tbWF0Y2hpbmcgY2hhcl90eXBlIGlmIGZvdW5kLCBlbHNlIEBhIGhpLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgorICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKKwkJICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb252ZXJ0IHRvIHVwcGVyY2FzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBjaGFyX3R5cGUgYXJndW1lbnQgdG8gdXBwZXJjYXNlCisgICAgICAgKiAgaWYgcG9zc2libGUuICBJZiBub3QgcG9zc2libGUgKGZvciBleGFtcGxlLCAnMicpLCByZXR1cm5zIHRoZQorICAgICAgICogIGFyZ3VtZW50LgorICAgICAgICoKKyAgICAgICAqICBkb190b3VwcGVyKCkgaXMgYSBob29rIGZvciBhIGRlcml2ZWQgZmFjZXQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZgorICAgICAgICogIHVwcGVyY2FzaW5nLiAgZG9fdG91cHBlcigpIG11c3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZSByZXN1bHQgZm9yCisgICAgICAgKiAgdGhlIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBjICBUaGUgY2hhcl90eXBlIHRvIGNvbnZlcnQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIHVwcGVyY2FzZSBjaGFyX3R5cGUgaWYgY29udmVydGlibGUsIGVsc2UgQGEgYy4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNoYXJfdHlwZQorICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0ID0gMDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb252ZXJ0IGFycmF5IHRvIHVwcGVyY2FzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGNvbnZlcnRzIGVhY2ggY2hhcl90eXBlIGluIHRoZSByYW5nZSBbbG8saGkpCisgICAgICAgKiAgdG8gdXBwZXJjYXNlIGlmIHBvc3NpYmxlLiAgT3RoZXIgZWxlbWVudHMgcmVtYWluIHVudG91Y2hlZC4KKyAgICAgICAqCisgICAgICAgKiAgZG9fdG91cHBlcigpIGlzIGEgaG9vayBmb3IgYSBkZXJpdmVkIGZhY2V0IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YKKyAgICAgICAqICB1cHBlcmNhc2luZy4gIGRvX3RvdXBwZXIoKSBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGZvcgorICAgICAgICogIHRoZSBzYW1lIGlucHV0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gbG8gIFBvaW50ZXIgdG8gc3RhcnQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIGhpICBQb2ludGVyIHRvIGVuZCBvZiByYW5nZS4KKyAgICAgICAqICBAcmV0dXJuICBAYSBoaS4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb252ZXJ0IHRvIGxvd2VyY2FzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBhcmd1bWVudCB0byBsb3dlcmNhc2UgaWYKKyAgICAgICAqICBwb3NzaWJsZS4gIElmIG5vdCBwb3NzaWJsZSAoZm9yIGV4YW1wbGUsICcyJyksIHJldHVybnMgdGhlIGFyZ3VtZW50LgorICAgICAgICoKKyAgICAgICAqICBkb190b2xvd2VyKCkgaXMgYSBob29rIGZvciBhIGRlcml2ZWQgZmFjZXQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZgorICAgICAgICogIGxvd2VyY2FzaW5nLiAgZG9fdG9sb3dlcigpIG11c3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZSByZXN1bHQgZm9yCisgICAgICAgKiAgdGhlIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBjICBUaGUgY2hhcl90eXBlIHRvIGNvbnZlcnQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIGxvd2VyY2FzZSBjaGFyX3R5cGUgaWYgY29udmVydGlibGUsIGVsc2UgQGEgYy4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNoYXJfdHlwZQorICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0ID0gMDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb252ZXJ0IGFycmF5IHRvIGxvd2VyY2FzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGNvbnZlcnRzIGVhY2ggY2hhcl90eXBlIGluIHRoZSByYW5nZSBbbG8saGkpCisgICAgICAgKiAgdG8gbG93ZXJjYXNlIGlmIHBvc3NpYmxlLiAgT3RoZXIgZWxlbWVudHMgcmVtYWluIHVudG91Y2hlZC4KKyAgICAgICAqCisgICAgICAgKiAgZG9fdG9sb3dlcigpIGlzIGEgaG9vayBmb3IgYSBkZXJpdmVkIGZhY2V0IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YKKyAgICAgICAqICBsb3dlcmNhc2luZy4gIGRvX3RvbG93ZXIoKSBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGZvcgorICAgICAgICogIHRoZSBzYW1lIGlucHV0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gbG8gIFBvaW50ZXIgdG8gc3RhcnQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIGhpICBQb2ludGVyIHRvIGVuZCBvZiByYW5nZS4KKyAgICAgICAqICBAcmV0dXJuICBAYSBoaS4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBXaWRlbiBjaGFyCisgICAgICAgKgorICAgICAgICogIFRoaXMgdmlydHVhbCBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgY2hhciB0byBjaGFyX3R5cGUgdXNpbmcgdGhlCisgICAgICAgKiAgc2ltcGxlc3QgcmVhc29uYWJsZSB0cmFuc2Zvcm1hdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgZG9fd2lkZW4oKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgKiAgd2lkZW5pbmcuICBkb193aWRlbigpIG11c3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZSByZXN1bHQgZm9yIHRoZQorICAgICAgICogIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIE5vdGU6IHRoaXMgaXMgbm90IHdoYXQgeW91IHdhbnQgZm9yIGNvZGVwYWdlIGNvbnZlcnNpb25zLiAgU2VlCisgICAgICAgKiAgY29kZWN2dCBmb3IgdGhhdC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIGMgIFRoZSBjaGFyIHRvIGNvbnZlcnQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIGNvbnZlcnRlZCBjaGFyX3R5cGUKKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNoYXJfdHlwZQorICAgICAgZG9fd2lkZW4oY2hhcikgY29uc3QgPSAwOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFdpZGVuIGNoYXIgYXJyYXkKKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBlYWNoIGNoYXIgaW4gdGhlIGlucHV0IHRvIGNoYXJfdHlwZSB1c2luZyB0aGUKKyAgICAgICAqICBzaW1wbGVzdCByZWFzb25hYmxlIHRyYW5zZm9ybWF0aW9uLgorICAgICAgICoKKyAgICAgICAqICBkb193aWRlbigpIGlzIGEgaG9vayBmb3IgYSBkZXJpdmVkIGZhY2V0IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YKKyAgICAgICAqICB3aWRlbmluZy4gIGRvX3dpZGVuKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IgdGhlCisgICAgICAgKiAgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZTogdGhpcyBpcyBub3Qgd2hhdCB5b3Ugd2FudCBmb3IgY29kZXBhZ2UgY29udmVyc2lvbnMuICBTZWUKKyAgICAgICAqICBjb2RlY3Z0IGZvciB0aGF0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gbG8gIFBvaW50ZXIgdG8gc3RhcnQgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIGhpICBQb2ludGVyIHRvIGVuZCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gdG8gIFBvaW50ZXIgdG8gdGhlIGRlc3RpbmF0aW9uIGFycmF5LgorICAgICAgICogIEByZXR1cm4gIEBhIGhpLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKKyAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksCisJICAgICAgIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdCA9IDA7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTmFycm93IGNoYXJfdHlwZSB0byBjaGFyCisgICAgICAgKgorICAgICAgICogIFRoaXMgdmlydHVhbCBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgYXJndW1lbnQgdG8gY2hhciB1c2luZyB0aGUKKyAgICAgICAqICBzaW1wbGVzdCByZWFzb25hYmxlIHRyYW5zZm9ybWF0aW9uLiAgSWYgdGhlIGNvbnZlcnNpb24gZmFpbHMsIGRmYXVsdAorICAgICAgICogIGlzIHJldHVybmVkIGluc3RlYWQuCisgICAgICAgKgorICAgICAgICogIGRvX25hcnJvdygpIGlzIGEgaG9vayBmb3IgYSBkZXJpdmVkIGZhY2V0IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YKKyAgICAgICAqICBuYXJyb3dpbmcuICBkb19uYXJyb3coKSBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGZvciB0aGUKKyAgICAgICAqICBzYW1lIGlucHV0LgorICAgICAgICoKKyAgICAgICAqICBOb3RlOiB0aGlzIGlzIG5vdCB3aGF0IHlvdSB3YW50IGZvciBjb2RlcGFnZSBjb252ZXJzaW9ucy4gIFNlZQorICAgICAgICogIGNvZGVjdnQgZm9yIHRoYXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBjICBUaGUgY2hhcl90eXBlIHRvIGNvbnZlcnQuCisgICAgICAgKiAgQHBhcmFtIGRmYXVsdCAgQ2hhciB0byByZXR1cm4gaWYgY29udmVyc2lvbiBmYWlscy4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgY29udmVydGVkIGNoYXIuCisgICAgICAqLworICAgICAgdmlydHVhbCBjaGFyCisgICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdCA9IDA7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTmFycm93IGNoYXJfdHlwZSBhcnJheSB0byBjaGFyCisgICAgICAgKgorICAgICAgICogIFRoaXMgdmlydHVhbCBmdW5jdGlvbiBjb252ZXJ0cyBlYWNoIGNoYXJfdHlwZSBpbiB0aGUgcmFuZ2UgW2xvLGhpKSB0bworICAgICAgICogIGNoYXIgdXNpbmcgdGhlIHNpbXBsZXN0IHJlYXNvbmFibGUgdHJhbnNmb3JtYXRpb24gYW5kIHdyaXRlcyB0aGUKKyAgICAgICAqICByZXN1bHRzIHRvIHRoZSBkZXN0aW5hdGlvbiBhcnJheS4gIEZvciBhbnkgZWxlbWVudCBpbiB0aGUgaW5wdXQgdGhhdAorICAgICAgICogIGNhbm5vdCBiZSBjb252ZXJ0ZWQsIEBhIGRmYXVsdCBpcyB1c2VkIGluc3RlYWQuCisgICAgICAgKgorICAgICAgICogIGRvX25hcnJvdygpIGlzIGEgaG9vayBmb3IgYSBkZXJpdmVkIGZhY2V0IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YKKyAgICAgICAqICBuYXJyb3dpbmcuICBkb19uYXJyb3coKSBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGZvciB0aGUKKyAgICAgICAqICBzYW1lIGlucHV0LgorICAgICAgICoKKyAgICAgICAqICBOb3RlOiB0aGlzIGlzIG5vdCB3aGF0IHlvdSB3YW50IGZvciBjb2RlcGFnZSBjb252ZXJzaW9ucy4gIFNlZQorICAgICAgICogIGNvZGVjdnQgZm9yIHRoYXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBsbyAgUG9pbnRlciB0byBzdGFydCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gaGkgIFBvaW50ZXIgdG8gZW5kIG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBkZmF1bHQgIENoYXIgdG8gdXNlIGlmIGNvbnZlcnNpb24gZmFpbHMuCisgICAgICAgKiAgQHBhcmFtIHRvICBQb2ludGVyIHRvIHRoZSBkZXN0aW5hdGlvbiBhcnJheS4KKyAgICAgICAqICBAcmV0dXJuICBAYSBoaS4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIGRvX25hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKKwkJY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdCA9IDA7CisgICAgfTsKKworICAvKioKKyAgICogIEBicmllZiAgUHJpbWFyeSBjbGFzcyB0ZW1wbGF0ZSBjdHlwZSBmYWNldC4KKyAgICogIEBpbmdyb3VwIGxvY2FsZXMKKyAgICoKKyAgICogIFRoaXMgdGVtcGxhdGUgY2xhc3MgZGVmaW5lcyBjbGFzc2lmaWNhdGlvbiBhbmQgY29udmVyc2lvbiBmdW5jdGlvbnMgZm9yCisgICAqICBjaGFyYWN0ZXIgc2V0cy4gIEl0IHdyYXBzIGNjdHlwZSBmdW5jdGlvbmFsaXR5LiAgQ3R5cGUgZ2V0cyB1c2VkIGJ5CisgICAqICBzdHJlYW1zIGZvciBtYW55IEkvTyBvcGVyYXRpb25zLgorICAgKgorICAgKiAgVGhpcyB0ZW1wbGF0ZSBwcm92aWRlcyB0aGUgcHJvdGVjdGVkIHZpcnR1YWwgZnVuY3Rpb25zIHRoZSBkZXZlbG9wZXIKKyAgICogIHdpbGwgaGF2ZSB0byByZXBsYWNlIGluIGEgZGVyaXZlZCBjbGFzcyBvciBzcGVjaWFsaXphdGlvbiB0byBtYWtlIGEKKyAgICogIHdvcmtpbmcgZmFjZXQuICBUaGUgcHVibGljIGZ1bmN0aW9ucyB0aGF0IGFjY2VzcyB0aGVtIGFyZSBkZWZpbmVkIGluCisgICAqICBfX2N0eXBlX2Fic3RyYWN0X2Jhc2UsIHRvIGFsbG93IGZvciBpbXBsZW1lbnRhdGlvbiBmbGV4aWJpbGl0eS4gIFNlZQorICAgKiAgY3R5cGU8d2NoYXJfdD4gZm9yIGFuIGV4YW1wbGUuICBUaGUgZnVuY3Rpb25zIGFyZSBkb2N1bWVudGVkIGluCisgICAqICBfX2N0eXBlX2Fic3RyYWN0X2Jhc2UuCisgICAqCisgICAqICBOb3RlOiBpbXBsZW1lbnRhdGlvbnMgYXJlIHByb3ZpZGVkIGZvciBhbGwgdGhlIHByb3RlY3RlZCB2aXJ0dWFsCisgICAqICBmdW5jdGlvbnMsIGJ1dCB3aWxsIGxpa2VseSBub3QgYmUgdXNlZnVsLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgY2xhc3MgY3R5cGUgOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gVHlwZXM6CisgICAgICB0eXBlZGVmIF9DaGFyVAkJCWNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19jdHlwZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD46Om1hc2sgbWFzazsKKworICAgICAgLy8vIFRoZSBmYWNldCBpZCBmb3IgY3R5cGU8Y2hhcl90eXBlPgorICAgICAgc3RhdGljIGxvY2FsZTo6aWQJCQlpZDsKKworICAgICAgZXhwbGljaXQKKyAgICAgIGN0eXBlKHNpemVfdCBfX3JlZnMgPSAwKSA6IF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxfQ2hhclQ+KF9fcmVmcykgeyB9CisKKyAgIHByb3RlY3RlZDoKKyAgICAgIHZpcnR1YWwKKyAgICAgIH5jdHlwZSgpOworCisgICAgICB2aXJ0dWFsIGJvb2wKKyAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKKworICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCisgICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OworCisgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKKworICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCisgICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAorCQkgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CisKKyAgICAgIHZpcnR1YWwgY2hhcl90eXBlCisgICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSBfX2MpIGNvbnN0OworCisgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OworCisgICAgICB2aXJ0dWFsIGNoYXJfdHlwZQorICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUgX19jKSBjb25zdDsKKworICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCisgICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKKworICAgICAgdmlydHVhbCBjaGFyX3R5cGUKKyAgICAgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdDsKKworICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgorICAgICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX2Rlc3QpIGNvbnN0OworCisgICAgICB2aXJ0dWFsIGNoYXIKKyAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0OworCisgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIGRvX25hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKKwkJY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBsb2NhbGU6OmlkIGN0eXBlPF9DaGFyVD46OmlkOworCisgIC8qKgorICAgKiAgQGJyaWVmICBUaGUgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb24uCisgICAqICBAaW5ncm91cCBsb2NhbGVzCisgICAqCisgICAqICBUaGlzIGNsYXNzIGRlZmluZXMgY2xhc3NpZmljYXRpb24gYW5kIGNvbnZlcnNpb24gZnVuY3Rpb25zIGZvcgorICAgKiAgdGhlIGNoYXIgdHlwZS4gIEl0IGdldHMgdXNlZCBieSBjaGFyIHN0cmVhbXMgZm9yIG1hbnkgSS9PCisgICAqICBvcGVyYXRpb25zLiAgVGhlIGNoYXIgc3BlY2lhbGl6YXRpb24gcHJvdmlkZXMgYSBudW1iZXIgb2YKKyAgICogIG9wdGltaXphdGlvbnMgYXMgd2VsbC4KKyAgKi8KKyAgdGVtcGxhdGU8PgorICAgIGNsYXNzIGN0eXBlPGNoYXI+IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBjdHlwZV9iYXNlCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIFR5cGVzOgorICAgICAgLy8vIFR5cGVkZWYgZm9yIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgY2hhci4KKyAgICAgIHR5cGVkZWYgY2hhcgkJY2hhcl90eXBlOworCisgICAgcHJvdGVjdGVkOgorICAgICAgLy8gRGF0YSBNZW1iZXJzOgorICAgICAgX19jX2xvY2FsZQkJX01fY19sb2NhbGVfY3R5cGU7CisgICAgICBib29sCQkJX01fZGVsOworICAgICAgX190b190eXBlCQkJX01fdG91cHBlcjsKKyAgICAgIF9fdG9fdHlwZQkJCV9NX3RvbG93ZXI7CisgICAgICBjb25zdCBtYXNrKgkJX01fdGFibGU7CisgICAgICBtdXRhYmxlIGNoYXIJCV9NX3dpZGVuX29rOworICAgICAgbXV0YWJsZSBjaGFyCQlfTV93aWRlblsxICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oLTEpXTsKKyAgICAgIG11dGFibGUgY2hhcgkJX01fbmFycm93WzEgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigtMSldOworICAgICAgbXV0YWJsZSBjaGFyCQlfTV9uYXJyb3dfb2s7CS8vIDAgdW5pbml0aWFsaXplZCwgMSBpbml0LAorCQkJCQkJLy8gMiBtZW1jcHkgY2FuJ3QgYmUgdXNlZAorCisgICAgcHVibGljOgorICAgICAgLy8vIFRoZSBmYWNldCBpZCBmb3IgY3R5cGU8Y2hhcj4KKyAgICAgIHN0YXRpYyBsb2NhbGU6OmlkICAgICAgICBpZDsKKyAgICAgIC8vLyBUaGUgc2l6ZSBvZiB0aGUgbWFzayB0YWJsZS4gIEl0IGlzIFNDSEFSX01BWCArIDEuCisgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90ICAgICAgdGFibGVfc2l6ZSA9IDEgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigtMSk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0b3IgcGVyZm9ybXMgaW5pdGlhbGl6YXRpb24uCisgICAgICAgKgorICAgICAgICogIFRoaXMgaXMgdGhlIGNvbnN0cnVjdG9yIHByb3ZpZGVkIGJ5IHRoZSBzdGFuZGFyZC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIHRhYmxlIElmIG5vbi16ZXJvLCB0YWJsZSBpcyB1c2VkIGFzIHRoZSBwZXItY2hhciBtYXNrLgorICAgICAgICogICAgICAgICAgICAgICBFbHNlIGNsYXNzaWNfdGFibGUoKSBpcyB1c2VkLgorICAgICAgICogIEBwYXJhbSBkZWwgICBJZiB0cnVlLCBwYXNzZXMgb3duZXJzaGlwIG9mIHRhYmxlIHRvIHRoaXMgZmFjZXQuCisgICAgICAgKiAgQHBhcmFtIHJlZnMgIFBhc3NlZCB0byB0aGUgYmFzZSBmYWNldCBjbGFzcy4KKyAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgY3R5cGUoY29uc3QgbWFzayogX190YWJsZSA9IDAsIGJvb2wgX19kZWwgPSBmYWxzZSwgc2l6ZV90IF9fcmVmcyA9IDApOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdG9yIHBlcmZvcm1zIHN0YXRpYyBpbml0aWFsaXphdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBjb25zdHJ1Y3RvciBpcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgaW5pdGlhbCBDIGxvY2FsZSBmYWNldC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIGNsb2MgIEhhbmRsZSB0byBDIGxvY2FsZSBkYXRhLgorICAgICAgICogIEBwYXJhbSB0YWJsZSBJZiBub24temVybywgdGFibGUgaXMgdXNlZCBhcyB0aGUgcGVyLWNoYXIgbWFzay4KKyAgICAgICAqICBAcGFyYW0gZGVsICAgSWYgdHJ1ZSwgcGFzc2VzIG93bmVyc2hpcCBvZiB0YWJsZSB0byB0aGlzIGZhY2V0LgorICAgICAgICogIEBwYXJhbSByZWZzICBQYXNzZWQgdG8gdGhlIGJhc2UgZmFjZXQgY2xhc3MuCisgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGN0eXBlKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBtYXNrKiBfX3RhYmxlID0gMCwgYm9vbCBfX2RlbCA9IGZhbHNlLAorCSAgICBzaXplX3QgX19yZWZzID0gMCk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgVGVzdCBjaGFyIGNsYXNzaWZpY2F0aW9uLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGNvbXBhcmVzIHRoZSBtYXNrIHRhYmxlW2NdIHRvIEBhIG0uCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBjICBUaGUgY2hhciB0byBjb21wYXJlIHRoZSBtYXNrIG9mLgorICAgICAgICogIEBwYXJhbSBtICBUaGUgbWFzayB0byBjb21wYXJlIGFnYWluc3QuCisgICAgICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBtICYgdGFibGVbY10gaXMgdHJ1ZSwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgKi8KKyAgICAgIGlubGluZSBib29sCisgICAgICBpcyhtYXNrIF9fbSwgY2hhciBfX2MpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBhIG1hc2sgYXJyYXkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIG1hc2sgZm9yIGVhY2ggY2hhciBpbiB0aGUgcmFuZ2UgW2xvLCBoaSkgYW5kCisgICAgICAgKiAgc3VjY2Vzc2l2ZWx5IHdyaXRlcyBpdCB0byB2ZWMuICB2ZWMgbXVzdCBoYXZlIGFzIG1hbnkgZWxlbWVudHMgYXMKKyAgICAgICAqICB0aGUgY2hhciBhcnJheS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIGxvICBQb2ludGVyIHRvIHN0YXJ0IG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBoaSAgUG9pbnRlciB0byBlbmQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIHZlYyAgUG9pbnRlciB0byBhbiBhcnJheSBvZiBtYXNrIHN0b3JhZ2UuCisgICAgICAgKiAgQHJldHVybiAgQGEgaGkuCisgICAgICAqLworICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCisgICAgICBpcyhjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBjaGFyIG1hdGNoaW5nIGEgbWFzaworICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIGZvciBhbmQgcmV0dXJucyB0aGUgZmlyc3QgY2hhciBpbiBbbG8saGkpIGZvcgorICAgICAgICogIHdoaWNoIGlzKG0sY2hhcikgaXMgdHJ1ZS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIG0gIFRoZSBtYXNrIHRvIGNvbXBhcmUgYWdhaW5zdC4KKyAgICAgICAqICBAcGFyYW0gbG8gIFBvaW50ZXIgdG8gc3RhcnQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIGhpICBQb2ludGVyIHRvIGVuZCBvZiByYW5nZS4KKyAgICAgICAqICBAcmV0dXJuICBQb2ludGVyIHRvIGEgbWF0Y2hpbmcgY2hhciBpZiBmb3VuZCwgZWxzZSBAYSBoaS4KKyAgICAgICovCisgICAgICBpbmxpbmUgY29uc3QgY2hhcioKKyAgICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgY2hhciBub3QgbWF0Y2hpbmcgYSBtYXNrCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgZm9yIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgY2hhcgorICAgICAgICogIGluIFtsbyxoaSkgZm9yIHdoaWNoIGlzKG0sY2hhcikgaXMgZmFsc2UuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBtICBUaGUgbWFzayB0byBjb21wYXJlIGFnYWluc3QuCisgICAgICAgKiAgQHBhcmFtIGxvICBQb2ludGVyIHRvIHN0YXJ0IG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBoaSAgUG9pbnRlciB0byBlbmQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHJldHVybiAgUG9pbnRlciB0byBhIG5vbi1tYXRjaGluZyBjaGFyIGlmIGZvdW5kLCBlbHNlIEBhIGhpLgorICAgICAgKi8KKyAgICAgIGlubGluZSBjb25zdCBjaGFyKgorICAgICAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnZlcnQgdG8gdXBwZXJjYXNlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBjaGFyIGFyZ3VtZW50IHRvIHVwcGVyY2FzZSBpZiBwb3NzaWJsZS4KKyAgICAgICAqICBJZiBub3QgcG9zc2libGUgKGZvciBleGFtcGxlLCAnMicpLCByZXR1cm5zIHRoZSBhcmd1bWVudC4KKyAgICAgICAqCisgICAgICAgKiAgdG91cHBlcigpIGFjdHMgYXMgaWYgaXQgcmV0dXJucyBjdHlwZTxjaGFyPjo6ZG9fdG91cHBlcihjKS4KKyAgICAgICAqICBkb190b3VwcGVyKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IgdGhlIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBjICBUaGUgY2hhciB0byBjb252ZXJ0LgorICAgICAgICogIEByZXR1cm4gIFRoZSB1cHBlcmNhc2UgY2hhciBpZiBjb252ZXJ0aWJsZSwgZWxzZSBAYSBjLgorICAgICAgKi8KKyAgICAgIGNoYXJfdHlwZQorICAgICAgdG91cHBlcihjaGFyX3R5cGUgX19jKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2MpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29udmVydCBhcnJheSB0byB1cHBlcmNhc2UuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gY29udmVydHMgZWFjaCBjaGFyIGluIHRoZSByYW5nZSBbbG8saGkpIHRvIHVwcGVyY2FzZQorICAgICAgICogIGlmIHBvc3NpYmxlLiAgT3RoZXIgY2hhcnMgcmVtYWluIHVudG91Y2hlZC4KKyAgICAgICAqCisgICAgICAgKiAgdG91cHBlcigpIGFjdHMgYXMgaWYgaXQgcmV0dXJucyBjdHlwZTxjaGFyPjo6IGRvX3RvdXBwZXIobG8sIGhpKS4KKyAgICAgICAqICBkb190b3VwcGVyKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IgdGhlIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBsbyAgUG9pbnRlciB0byBmaXJzdCBjaGFyIGluIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBoaSAgUG9pbnRlciB0byBlbmQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHJldHVybiAgQGEgaGkuCisgICAgICAqLworICAgICAgY29uc3QgY2hhcl90eXBlKgorICAgICAgdG91cHBlcihjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBwZXIoX19sbywgX19oaSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb252ZXJ0IHRvIGxvd2VyY2FzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgY2hhciBhcmd1bWVudCB0byBsb3dlcmNhc2UgaWYgcG9zc2libGUuCisgICAgICAgKiAgSWYgbm90IHBvc3NpYmxlIChmb3IgZXhhbXBsZSwgJzInKSwgcmV0dXJucyB0aGUgYXJndW1lbnQuCisgICAgICAgKgorICAgICAgICogIHRvbG93ZXIoKSBhY3RzIGFzIGlmIGl0IHJldHVybnMgY3R5cGU8Y2hhcj46OmRvX3RvbG93ZXIoYykuCisgICAgICAgKiAgZG9fdG9sb3dlcigpIG11c3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZSByZXN1bHQgZm9yIHRoZSBzYW1lIGlucHV0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gYyAgVGhlIGNoYXIgdG8gY29udmVydC4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgbG93ZXJjYXNlIGNoYXIgaWYgY29udmVydGlibGUsIGVsc2UgQGEgYy4KKyAgICAgICovCisgICAgICBjaGFyX3R5cGUKKyAgICAgIHRvbG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19jKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnZlcnQgYXJyYXkgdG8gbG93ZXJjYXNlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIGVhY2ggY2hhciBpbiB0aGUgcmFuZ2UgW2xvLGhpKSB0byBsb3dlcmNhc2UKKyAgICAgICAqICBpZiBwb3NzaWJsZS4gIE90aGVyIGNoYXJzIHJlbWFpbiB1bnRvdWNoZWQuCisgICAgICAgKgorICAgICAgICogIHRvbG93ZXIoKSBhY3RzIGFzIGlmIGl0IHJldHVybnMgY3R5cGU8Y2hhcj46OiBkb190b2xvd2VyKGxvLCBoaSkuCisgICAgICAgKiAgZG9fdG9sb3dlcigpIG11c3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZSByZXN1bHQgZm9yIHRoZSBzYW1lIGlucHV0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gbG8gIFBvaW50ZXIgdG8gZmlyc3QgY2hhciBpbiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gaGkgIFBvaW50ZXIgdG8gZW5kIG9mIHJhbmdlLgorICAgICAgICogIEByZXR1cm4gIEBhIGhpLgorICAgICAgKi8KKyAgICAgIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIHRvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb190b2xvd2VyKF9fbG8sIF9faGkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgV2lkZW4gY2hhcgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBjaGFyIHRvIGNoYXJfdHlwZSB1c2luZyB0aGUgc2ltcGxlc3QKKyAgICAgICAqICByZWFzb25hYmxlIHRyYW5zZm9ybWF0aW9uLiAgRm9yIGFuIHVuZGVyaXZlZCBjdHlwZTxjaGFyPiBmYWNldCwgdGhlCisgICAgICAgKiAgYXJndW1lbnQgd2lsbCBiZSByZXR1cm5lZCB1bmNoYW5nZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd29ya3MgYXMgaWYgaXQgcmV0dXJucyBjdHlwZTxjaGFyPjo6ZG9fd2lkZW4oYykuCisgICAgICAgKiAgZG9fd2lkZW4oKSBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGZvciB0aGUgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZTogdGhpcyBpcyBub3Qgd2hhdCB5b3Ugd2FudCBmb3IgY29kZXBhZ2UgY29udmVyc2lvbnMuICBTZWUKKyAgICAgICAqICBjb2RlY3Z0IGZvciB0aGF0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gYyAgVGhlIGNoYXIgdG8gY29udmVydC4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgY29udmVydGVkIGNoYXJhY3Rlci4KKyAgICAgICovCisgICAgICBjaGFyX3R5cGUKKyAgICAgIHdpZGVuKGNoYXIgX19jKSBjb25zdAorICAgICAgeworCWlmIChfTV93aWRlbl9vaykKKwkgIHJldHVybiBfTV93aWRlbltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpXTsKKwl0aGlzLT5fTV93aWRlbl9pbml0KCk7CisJcmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9fYyk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgV2lkZW4gY2hhciBhcnJheQorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIGVhY2ggY2hhciBpbiB0aGUgaW5wdXQgdG8gY2hhciB1c2luZyB0aGUKKyAgICAgICAqICBzaW1wbGVzdCByZWFzb25hYmxlIHRyYW5zZm9ybWF0aW9uLiAgRm9yIGFuIHVuZGVyaXZlZCBjdHlwZTxjaGFyPgorICAgICAgICogIGZhY2V0LCB0aGUgYXJndW1lbnQgd2lsbCBiZSBjb3BpZWQgdW5jaGFuZ2VkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdvcmtzIGFzIGlmIGl0IHJldHVybnMgY3R5cGU8Y2hhcj46OmRvX3dpZGVuKGMpLgorICAgICAgICogIGRvX3dpZGVuKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IgdGhlIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIE5vdGU6IHRoaXMgaXMgbm90IHdoYXQgeW91IHdhbnQgZm9yIGNvZGVwYWdlIGNvbnZlcnNpb25zLiAgU2VlCisgICAgICAgKiAgY29kZWN2dCBmb3IgdGhhdC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIGxvICBQb2ludGVyIHRvIGZpcnN0IGNoYXIgaW4gcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIGhpICBQb2ludGVyIHRvIGVuZCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gdG8gIFBvaW50ZXIgdG8gdGhlIGRlc3RpbmF0aW9uIGFycmF5LgorICAgICAgICogIEByZXR1cm4gIEBhIGhpLgorICAgICAgKi8KKyAgICAgIGNvbnN0IGNoYXIqCisgICAgICB3aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fdG8pIGNvbnN0CisgICAgICB7CisJaWYgKF9NX3dpZGVuX29rID09IDEpCisJICB7CisJICAgIF9fYnVpbHRpbl9tZW1jcHkoX190bywgX19sbywgX19oaSAtIF9fbG8pOworCSAgICByZXR1cm4gX19oaTsKKwkgIH0KKwlpZiAoIV9NX3dpZGVuX29rKQorCSAgX01fd2lkZW5faW5pdCgpOworCXJldHVybiB0aGlzLT5kb193aWRlbihfX2xvLCBfX2hpLCBfX3RvKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBOYXJyb3cgY2hhcgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBjaGFyIHRvIGNoYXIgdXNpbmcgdGhlIHNpbXBsZXN0CisgICAgICAgKiAgcmVhc29uYWJsZSB0cmFuc2Zvcm1hdGlvbi4gIElmIHRoZSBjb252ZXJzaW9uIGZhaWxzLCBkZmF1bHQgaXMKKyAgICAgICAqICByZXR1cm5lZCBpbnN0ZWFkLiAgRm9yIGFuIHVuZGVyaXZlZCBjdHlwZTxjaGFyPiBmYWNldCwgQGEgYworICAgICAgICogIHdpbGwgYmUgcmV0dXJuZWQgdW5jaGFuZ2VkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdvcmtzIGFzIGlmIGl0IHJldHVybnMgY3R5cGU8Y2hhcj46OmRvX25hcnJvdyhjKS4KKyAgICAgICAqICBkb19uYXJyb3coKSBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGZvciB0aGUgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZTogdGhpcyBpcyBub3Qgd2hhdCB5b3Ugd2FudCBmb3IgY29kZXBhZ2UgY29udmVyc2lvbnMuICBTZWUKKyAgICAgICAqICBjb2RlY3Z0IGZvciB0aGF0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gYyAgVGhlIGNoYXIgdG8gY29udmVydC4KKyAgICAgICAqICBAcGFyYW0gZGZhdWx0ICBDaGFyIHRvIHJldHVybiBpZiBjb252ZXJzaW9uIGZhaWxzLgorICAgICAgICogIEByZXR1cm4gIFRoZSBjb252ZXJ0ZWQgY2hhcmFjdGVyLgorICAgICAgKi8KKyAgICAgIGNoYXIKKyAgICAgIG5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdAorICAgICAgeworCWlmIChfTV9uYXJyb3dbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKV0pCisJICByZXR1cm4gX01fbmFycm93W3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldOworCWNvbnN0IGNoYXIgX190ID0gZG9fbmFycm93KF9fYywgX19kZmF1bHQpOworCWlmIChfX3QgIT0gX19kZmF1bHQpCisJICBfTV9uYXJyb3dbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKV0gPSBfX3Q7CisJcmV0dXJuIF9fdDsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBOYXJyb3cgY2hhciBhcnJheQorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIGVhY2ggY2hhciBpbiB0aGUgaW5wdXQgdG8gY2hhciB1c2luZyB0aGUKKyAgICAgICAqICBzaW1wbGVzdCByZWFzb25hYmxlIHRyYW5zZm9ybWF0aW9uIGFuZCB3cml0ZXMgdGhlIHJlc3VsdHMgdG8gdGhlCisgICAgICAgKiAgZGVzdGluYXRpb24gYXJyYXkuICBGb3IgYW55IGNoYXIgaW4gdGhlIGlucHV0IHRoYXQgY2Fubm90IGJlCisgICAgICAgKiAgY29udmVydGVkLCBAYSBkZmF1bHQgaXMgdXNlZCBpbnN0ZWFkLiAgRm9yIGFuIHVuZGVyaXZlZCBjdHlwZTxjaGFyPgorICAgICAgICogIGZhY2V0LCB0aGUgYXJndW1lbnQgd2lsbCBiZSBjb3BpZWQgdW5jaGFuZ2VkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdvcmtzIGFzIGlmIGl0IHJldHVybnMgY3R5cGU8Y2hhcj46OmRvX25hcnJvdyhsbywgaGksCisgICAgICAgKiAgZGZhdWx0LCB0bykuICBkb19uYXJyb3coKSBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGZvciB0aGUKKyAgICAgICAqICBzYW1lIGlucHV0LgorICAgICAgICoKKyAgICAgICAqICBOb3RlOiB0aGlzIGlzIG5vdCB3aGF0IHlvdSB3YW50IGZvciBjb2RlcGFnZSBjb252ZXJzaW9ucy4gIFNlZQorICAgICAgICogIGNvZGVjdnQgZm9yIHRoYXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBsbyAgUG9pbnRlciB0byBzdGFydCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gaGkgIFBvaW50ZXIgdG8gZW5kIG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBkZmF1bHQgIENoYXIgdG8gdXNlIGlmIGNvbnZlcnNpb24gZmFpbHMuCisgICAgICAgKiAgQHBhcmFtIHRvICBQb2ludGVyIHRvIHRoZSBkZXN0aW5hdGlvbiBhcnJheS4KKyAgICAgICAqICBAcmV0dXJuICBAYSBoaS4KKyAgICAgICovCisgICAgICBjb25zdCBjaGFyX3R5cGUqCisgICAgICBuYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCisJICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyICpfX3RvKSBjb25zdAorICAgICAgeworCWlmIChfX2J1aWx0aW5fZXhwZWN0KF9NX25hcnJvd19vayA9PSAxLCB0cnVlKSkKKwkgIHsKKwkgICAgX19idWlsdGluX21lbWNweShfX3RvLCBfX2xvLCBfX2hpIC0gX19sbyk7CisJICAgIHJldHVybiBfX2hpOworCSAgfQorCWlmICghX01fbmFycm93X29rKQorCSAgX01fbmFycm93X2luaXQoKTsKKwlyZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fbG8sIF9faGksIF9fZGZhdWx0LCBfX3RvKTsKKyAgICAgIH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gRFIgNjk1LiBjdHlwZTxjaGFyPjo6Y2xhc3NpY190YWJsZSgpIG5vdCBhY2Nlc3NpYmxlLgorICAgICAgLy8vIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBtYXNrIHRhYmxlIHByb3ZpZGVkIHRvIHRoZSBjb25zdHJ1Y3Rvciwgb3IKKyAgICAgIC8vLyB0aGUgZGVmYXVsdCBmcm9tIGNsYXNzaWNfdGFibGUoKSBpZiBub25lIHdhcyBwcm92aWRlZC4KKyAgICAgIGNvbnN0IG1hc2sqCisgICAgICB0YWJsZSgpIGNvbnN0IHRocm93KCkKKyAgICAgIHsgcmV0dXJuIF9NX3RhYmxlOyB9CisKKyAgICAgIC8vLyBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgQyBsb2NhbGUgbWFzayB0YWJsZS4KKyAgICAgIHN0YXRpYyBjb25zdCBtYXNrKgorICAgICAgY2xhc3NpY190YWJsZSgpIHRocm93KCk7CisgICAgcHJvdGVjdGVkOgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIERlc3RydWN0b3IuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZGVsZXRlcyB0YWJsZSgpIGlmIEBhIGRlbCB3YXMgdHJ1ZSBpbiB0aGUKKyAgICAgICAqICBjb25zdHJ1Y3Rvci4KKyAgICAgICovCisgICAgICB2aXJ0dWFsCisgICAgICB+Y3R5cGUoKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb252ZXJ0IHRvIHVwcGVyY2FzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBjaGFyIGFyZ3VtZW50IHRvIHVwcGVyY2FzZSBpZgorICAgICAgICogIHBvc3NpYmxlLiAgSWYgbm90IHBvc3NpYmxlIChmb3IgZXhhbXBsZSwgJzInKSwgcmV0dXJucyB0aGUgYXJndW1lbnQuCisgICAgICAgKgorICAgICAgICogIGRvX3RvdXBwZXIoKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgKiAgdXBwZXJjYXNpbmcuICBkb190b3VwcGVyKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IKKyAgICAgICAqICB0aGUgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIGMgIFRoZSBjaGFyIHRvIGNvbnZlcnQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIHVwcGVyY2FzZSBjaGFyIGlmIGNvbnZlcnRpYmxlLCBlbHNlIEBhIGMuCisgICAgICAqLworICAgICAgdmlydHVhbCBjaGFyX3R5cGUKKyAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb252ZXJ0IGFycmF5IHRvIHVwcGVyY2FzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGNvbnZlcnRzIGVhY2ggY2hhciBpbiB0aGUgcmFuZ2UgW2xvLGhpKSB0bworICAgICAgICogIHVwcGVyY2FzZSBpZiBwb3NzaWJsZS4gIE90aGVyIGNoYXJzIHJlbWFpbiB1bnRvdWNoZWQuCisgICAgICAgKgorICAgICAgICogIGRvX3RvdXBwZXIoKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgKiAgdXBwZXJjYXNpbmcuICBkb190b3VwcGVyKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IKKyAgICAgICAqICB0aGUgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIGxvICBQb2ludGVyIHRvIHN0YXJ0IG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBoaSAgUG9pbnRlciB0byBlbmQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHJldHVybiAgQGEgaGkuCisgICAgICAqLworICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCisgICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb252ZXJ0IHRvIGxvd2VyY2FzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBjaGFyIGFyZ3VtZW50IHRvIGxvd2VyY2FzZSBpZgorICAgICAgICogIHBvc3NpYmxlLiAgSWYgbm90IHBvc3NpYmxlIChmb3IgZXhhbXBsZSwgJzInKSwgcmV0dXJucyB0aGUgYXJndW1lbnQuCisgICAgICAgKgorICAgICAgICogIGRvX3RvbG93ZXIoKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgKiAgbG93ZXJjYXNpbmcuICBkb190b2xvd2VyKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IKKyAgICAgICAqICB0aGUgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIGMgIFRoZSBjaGFyIHRvIGNvbnZlcnQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIGxvd2VyY2FzZSBjaGFyIGlmIGNvbnZlcnRpYmxlLCBlbHNlIEBhIGMuCisgICAgICAqLworICAgICAgdmlydHVhbCBjaGFyX3R5cGUKKyAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb252ZXJ0IGFycmF5IHRvIGxvd2VyY2FzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGNvbnZlcnRzIGVhY2ggY2hhciBpbiB0aGUgcmFuZ2UgW2xvLGhpKSB0bworICAgICAgICogIGxvd2VyY2FzZSBpZiBwb3NzaWJsZS4gIE90aGVyIGNoYXJzIHJlbWFpbiB1bnRvdWNoZWQuCisgICAgICAgKgorICAgICAgICogIGRvX3RvbG93ZXIoKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgKiAgbG93ZXJjYXNpbmcuICBkb190b2xvd2VyKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IKKyAgICAgICAqICB0aGUgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIGxvICBQb2ludGVyIHRvIGZpcnN0IGNoYXIgaW4gcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIGhpICBQb2ludGVyIHRvIGVuZCBvZiByYW5nZS4KKyAgICAgICAqICBAcmV0dXJuICBAYSBoaS4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFdpZGVuIGNoYXIKKyAgICAgICAqCisgICAgICAgKiAgVGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBjaGFyIHRvIGNoYXIgdXNpbmcgdGhlIHNpbXBsZXN0CisgICAgICAgKiAgcmVhc29uYWJsZSB0cmFuc2Zvcm1hdGlvbi4gIEZvciBhbiB1bmRlcml2ZWQgY3R5cGU8Y2hhcj4gZmFjZXQsIHRoZQorICAgICAgICogIGFyZ3VtZW50IHdpbGwgYmUgcmV0dXJuZWQgdW5jaGFuZ2VkLgorICAgICAgICoKKyAgICAgICAqICBkb193aWRlbigpIGlzIGEgaG9vayBmb3IgYSBkZXJpdmVkIGZhY2V0IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YKKyAgICAgICAqICB3aWRlbmluZy4gIGRvX3dpZGVuKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IgdGhlCisgICAgICAgKiAgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZTogdGhpcyBpcyBub3Qgd2hhdCB5b3Ugd2FudCBmb3IgY29kZXBhZ2UgY29udmVyc2lvbnMuICBTZWUKKyAgICAgICAqICBjb2RlY3Z0IGZvciB0aGF0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gYyAgVGhlIGNoYXIgdG8gY29udmVydC4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgY29udmVydGVkIGNoYXJhY3Rlci4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNoYXJfdHlwZQorICAgICAgZG9fd2lkZW4oY2hhciBfX2MpIGNvbnN0CisgICAgICB7IHJldHVybiBfX2M7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBXaWRlbiBjaGFyIGFycmF5CisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gY29udmVydHMgZWFjaCBjaGFyIGluIHRoZSByYW5nZSBbbG8saGkpIHRvIGNoYXIgdXNpbmcKKyAgICAgICAqICB0aGUgc2ltcGxlc3QgcmVhc29uYWJsZSB0cmFuc2Zvcm1hdGlvbi4gIEZvciBhbiB1bmRlcml2ZWQKKyAgICAgICAqICBjdHlwZTxjaGFyPiBmYWNldCwgdGhlIGFyZ3VtZW50IHdpbGwgYmUgY29waWVkIHVuY2hhbmdlZC4KKyAgICAgICAqCisgICAgICAgKiAgZG9fd2lkZW4oKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgKiAgd2lkZW5pbmcuICBkb193aWRlbigpIG11c3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZSByZXN1bHQgZm9yIHRoZQorICAgICAgICogIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIE5vdGU6IHRoaXMgaXMgbm90IHdoYXQgeW91IHdhbnQgZm9yIGNvZGVwYWdlIGNvbnZlcnNpb25zLiAgU2VlCisgICAgICAgKiAgY29kZWN2dCBmb3IgdGhhdC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIGxvICBQb2ludGVyIHRvIHN0YXJ0IG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBoaSAgUG9pbnRlciB0byBlbmQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIHRvICBQb2ludGVyIHRvIHRoZSBkZXN0aW5hdGlvbiBhcnJheS4KKyAgICAgICAqICBAcmV0dXJuICBAYSBoaS4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCisgICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3QKKyAgICAgIHsKKwlfX2J1aWx0aW5fbWVtY3B5KF9fZGVzdCwgX19sbywgX19oaSAtIF9fbG8pOworCXJldHVybiBfX2hpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE5hcnJvdyBjaGFyCisgICAgICAgKgorICAgICAgICogIFRoaXMgdmlydHVhbCBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgY2hhciB0byBjaGFyIHVzaW5nIHRoZSBzaW1wbGVzdAorICAgICAgICogIHJlYXNvbmFibGUgdHJhbnNmb3JtYXRpb24uICBJZiB0aGUgY29udmVyc2lvbiBmYWlscywgZGZhdWx0IGlzCisgICAgICAgKiAgcmV0dXJuZWQgaW5zdGVhZC4gIEZvciBhbiB1bmRlcml2ZWQgY3R5cGU8Y2hhcj4gZmFjZXQsIEBhIGMgd2lsbCBiZQorICAgICAgICogIHJldHVybmVkIHVuY2hhbmdlZC4KKyAgICAgICAqCisgICAgICAgKiAgZG9fbmFycm93KCkgaXMgYSBob29rIGZvciBhIGRlcml2ZWQgZmFjZXQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZgorICAgICAgICogIG5hcnJvd2luZy4gIGRvX25hcnJvdygpIG11c3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZSByZXN1bHQgZm9yIHRoZQorICAgICAgICogIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIE5vdGU6IHRoaXMgaXMgbm90IHdoYXQgeW91IHdhbnQgZm9yIGNvZGVwYWdlIGNvbnZlcnNpb25zLiAgU2VlCisgICAgICAgKiAgY29kZWN2dCBmb3IgdGhhdC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIGMgIFRoZSBjaGFyIHRvIGNvbnZlcnQuCisgICAgICAgKiAgQHBhcmFtIGRmYXVsdCAgQ2hhciB0byByZXR1cm4gaWYgY29udmVyc2lvbiBmYWlscy4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgY29udmVydGVkIGNoYXIuCisgICAgICAqLworICAgICAgdmlydHVhbCBjaGFyCisgICAgICBkb19uYXJyb3coY2hhcl90eXBlIF9fYywgY2hhcikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fYzsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE5hcnJvdyBjaGFyIGFycmF5IHRvIGNoYXIgYXJyYXkKKyAgICAgICAqCisgICAgICAgKiAgVGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGNvbnZlcnRzIGVhY2ggY2hhciBpbiB0aGUgcmFuZ2UgW2xvLGhpKSB0bworICAgICAgICogIGNoYXIgdXNpbmcgdGhlIHNpbXBsZXN0IHJlYXNvbmFibGUgdHJhbnNmb3JtYXRpb24gYW5kIHdyaXRlcyB0aGUKKyAgICAgICAqICByZXN1bHRzIHRvIHRoZSBkZXN0aW5hdGlvbiBhcnJheS4gIEZvciBhbnkgY2hhciBpbiB0aGUgaW5wdXQgdGhhdAorICAgICAgICogIGNhbm5vdCBiZSBjb252ZXJ0ZWQsIEBhIGRmYXVsdCBpcyB1c2VkIGluc3RlYWQuICBGb3IgYW4gdW5kZXJpdmVkCisgICAgICAgKiAgY3R5cGU8Y2hhcj4gZmFjZXQsIHRoZSBhcmd1bWVudCB3aWxsIGJlIGNvcGllZCB1bmNoYW5nZWQuCisgICAgICAgKgorICAgICAgICogIGRvX25hcnJvdygpIGlzIGEgaG9vayBmb3IgYSBkZXJpdmVkIGZhY2V0IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YKKyAgICAgICAqICBuYXJyb3dpbmcuICBkb19uYXJyb3coKSBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGZvciB0aGUKKyAgICAgICAqICBzYW1lIGlucHV0LgorICAgICAgICoKKyAgICAgICAqICBOb3RlOiB0aGlzIGlzIG5vdCB3aGF0IHlvdSB3YW50IGZvciBjb2RlcGFnZSBjb252ZXJzaW9ucy4gIFNlZQorICAgICAgICogIGNvZGVjdnQgZm9yIHRoYXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBsbyAgUG9pbnRlciB0byBzdGFydCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gaGkgIFBvaW50ZXIgdG8gZW5kIG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBkZmF1bHQgIENoYXIgdG8gdXNlIGlmIGNvbnZlcnNpb24gZmFpbHMuCisgICAgICAgKiAgQHBhcmFtIHRvICBQb2ludGVyIHRvIHRoZSBkZXN0aW5hdGlvbiBhcnJheS4KKyAgICAgICAqICBAcmV0dXJuICBAYSBoaS4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIGRvX25hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKKwkJY2hhciwgY2hhciogX19kZXN0KSBjb25zdAorICAgICAgeworCV9fYnVpbHRpbl9tZW1jcHkoX19kZXN0LCBfX2xvLCBfX2hpIC0gX19sbyk7CisJcmV0dXJuIF9faGk7CisgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgdm9pZCBfTV9uYXJyb3dfaW5pdCgpIGNvbnN0OworICAgICAgdm9pZCBfTV93aWRlbl9pbml0KCkgY29uc3Q7CisgICAgfTsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIC8qKgorICAgKiAgQGJyaWVmICBUaGUgY3R5cGU8d2NoYXJfdD4gc3BlY2lhbGl6YXRpb24uCisgICAqICBAaW5ncm91cCBsb2NhbGVzCisgICAqCisgICAqICBUaGlzIGNsYXNzIGRlZmluZXMgY2xhc3NpZmljYXRpb24gYW5kIGNvbnZlcnNpb24gZnVuY3Rpb25zIGZvciB0aGUKKyAgICogIHdjaGFyX3QgdHlwZS4gIEl0IGdldHMgdXNlZCBieSB3Y2hhcl90IHN0cmVhbXMgZm9yIG1hbnkgSS9PIG9wZXJhdGlvbnMuCisgICAqICBUaGUgd2NoYXJfdCBzcGVjaWFsaXphdGlvbiBwcm92aWRlcyBhIG51bWJlciBvZiBvcHRpbWl6YXRpb25zIGFzIHdlbGwuCisgICAqCisgICAqICBjdHlwZTx3Y2hhcl90PiBpbmhlcml0cyBpdHMgcHVibGljIG1ldGhvZHMgZnJvbQorICAgKiAgX19jdHlwZV9hYnN0cmFjdF9iYXNlPHdjaGFyX3Q+LgorICAqLworICB0ZW1wbGF0ZTw+CisgICAgY2xhc3MgY3R5cGU8d2NoYXJfdD4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPHdjaGFyX3Q+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIFR5cGVzOgorICAgICAgLy8vIFR5cGVkZWYgZm9yIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgd2NoYXJfdC4KKyAgICAgIHR5cGVkZWYgd2NoYXJfdAkJY2hhcl90eXBlOworICAgICAgdHlwZWRlZiB3Y3R5cGVfdAkJX193bWFza190eXBlOworCisgICAgcHJvdGVjdGVkOgorICAgICAgX19jX2xvY2FsZQkJX01fY19sb2NhbGVfY3R5cGU7CisKKyAgICAgIC8vIFByZS1jb21wdXRlZCBuYXJyb3dlZCBhbmQgd2lkZW5lZCBjaGFycy4KKyAgICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgX01fbmFycm93X29rOworICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgICBfTV9uYXJyb3dbMTI4XTsKKyAgICAgIHdpbnRfdCAgICAgICAgICAgICAgICAgICAgX01fd2lkZW5bMSArIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KC0xKV07CisKKyAgICAgIC8vIFByZS1jb21wdXRlZCBlbGVtZW50cyBmb3IgZG9faXMuCisgICAgICBtYXNrICAgICAgICAgICAgICAgICAgICAgIF9NX2JpdFsxNl07CisgICAgICBfX3dtYXNrX3R5cGUgICAgICAgICAgICAgIF9NX3dtYXNrWzE2XTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vIERhdGEgTWVtYmVyczoKKyAgICAgIC8vLyBUaGUgZmFjZXQgaWQgZm9yIGN0eXBlPHdjaGFyX3Q+CisgICAgICBzdGF0aWMgbG9jYWxlOjppZAkJaWQ7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0b3IgcGVyZm9ybXMgaW5pdGlhbGl6YXRpb24uCisgICAgICAgKgorICAgICAgICogIFRoaXMgaXMgdGhlIGNvbnN0cnVjdG9yIHByb3ZpZGVkIGJ5IHRoZSBzdGFuZGFyZC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIHJlZnMgIFBhc3NlZCB0byB0aGUgYmFzZSBmYWNldCBjbGFzcy4KKyAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgY3R5cGUoc2l6ZV90IF9fcmVmcyA9IDApOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdG9yIHBlcmZvcm1zIHN0YXRpYyBpbml0aWFsaXphdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBjb25zdHJ1Y3RvciBpcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgaW5pdGlhbCBDIGxvY2FsZSBmYWNldC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIGNsb2MgIEhhbmRsZSB0byBDIGxvY2FsZSBkYXRhLgorICAgICAgICogIEBwYXJhbSByZWZzICBQYXNzZWQgdG8gdGhlIGJhc2UgZmFjZXQgY2xhc3MuCisgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGN0eXBlKF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCk7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfX3dtYXNrX3R5cGUKKyAgICAgIF9NX2NvbnZlcnRfdG9fd21hc2soY29uc3QgbWFzayBfX20pIGNvbnN0IHRocm93KCk7CisKKyAgICAgIC8vLyBEZXN0cnVjdG9yCisgICAgICB2aXJ0dWFsCisgICAgICB+Y3R5cGUoKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBUZXN0IHdjaGFyX3QgY2xhc3NpZmljYXRpb24uCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZmluZHMgYSBtYXNrIE0gZm9yIEBhIGMgYW5kIGNvbXBhcmVzIGl0IHRvIG1hc2sgQGEgbS4KKyAgICAgICAqCisgICAgICAgKiAgZG9faXMoKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgKiAgY2xhc3NpZnlpbmcuICBkb19pcygpIG11c3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZSByZXN1bHQgZm9yIHRoZQorICAgICAgICogIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBjICBUaGUgd2NoYXJfdCB0byBmaW5kIHRoZSBtYXNrIG9mLgorICAgICAgICogIEBwYXJhbSBtICBUaGUgbWFzayB0byBjb21wYXJlIGFnYWluc3QuCisgICAgICAgKiAgQHJldHVybiAgKE0gJiBtKSAhPSAwLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgYm9vbAorICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBhIG1hc2sgYXJyYXkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIG1hc2sgZm9yIGVhY2ggd2NoYXJfdCBpbiB0aGUgcmFuZ2UgW2xvLGhpKQorICAgICAgICogIGFuZCBzdWNjZXNzaXZlbHkgd3JpdGVzIGl0IHRvIHZlYy4gIHZlYyBtdXN0IGhhdmUgYXMgbWFueSBlbGVtZW50cworICAgICAgICogIGFzIHRoZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgZG9faXMoKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgKiAgY2xhc3NpZnlpbmcuICBkb19pcygpIG11c3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZSByZXN1bHQgZm9yIHRoZQorICAgICAgICogIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBsbyAgUG9pbnRlciB0byBzdGFydCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gaGkgIFBvaW50ZXIgdG8gZW5kIG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSB2ZWMgIFBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgbWFzayBzdG9yYWdlLgorICAgICAgICogIEByZXR1cm4gIEBhIGhpLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgorICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIHdjaGFyX3QgbWF0Y2hpbmcgbWFzaworICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIGZvciBhbmQgcmV0dXJucyB0aGUgZmlyc3Qgd2NoYXJfdCBjIGluCisgICAgICAgKiAgW2xvLGhpKSBmb3Igd2hpY2ggaXMobSxjKSBpcyB0cnVlLgorICAgICAgICoKKyAgICAgICAqICBkb19zY2FuX2lzKCkgaXMgYSBob29rIGZvciBhIGRlcml2ZWQgZmFjZXQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZgorICAgICAgICogIG1hdGNoIHNlYXJjaGluZy4gIGRvX2lzKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IgdGhlCisgICAgICAgKiAgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIG0gIFRoZSBtYXNrIHRvIGNvbXBhcmUgYWdhaW5zdC4KKyAgICAgICAqICBAcGFyYW0gbG8gIFBvaW50ZXIgdG8gc3RhcnQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIGhpICBQb2ludGVyIHRvIGVuZCBvZiByYW5nZS4KKyAgICAgICAqICBAcmV0dXJuICBQb2ludGVyIHRvIGEgbWF0Y2hpbmcgd2NoYXJfdCBpZiBmb3VuZCwgZWxzZSBAYSBoaS4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIHdjaGFyX3Qgbm90IG1hdGNoaW5nIG1hc2sKKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBzZWFyY2hlcyBmb3IgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBmaXJzdAorICAgICAgICogIHdjaGFyX3QgYyBvZiBbbG8saGkpIGZvciB3aGljaCBpcyhtLGMpIGlzIGZhbHNlLgorICAgICAgICoKKyAgICAgICAqICBkb19zY2FuX2lzKCkgaXMgYSBob29rIGZvciBhIGRlcml2ZWQgZmFjZXQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZgorICAgICAgICogIG1hdGNoIHNlYXJjaGluZy4gIGRvX2lzKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IgdGhlCisgICAgICAgKiAgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIG0gIFRoZSBtYXNrIHRvIGNvbXBhcmUgYWdhaW5zdC4KKyAgICAgICAqICBAcGFyYW0gbG8gIFBvaW50ZXIgdG8gc3RhcnQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIGhpICBQb2ludGVyIHRvIGVuZCBvZiByYW5nZS4KKyAgICAgICAqICBAcmV0dXJuICBQb2ludGVyIHRvIGEgbm9uLW1hdGNoaW5nIHdjaGFyX3QgaWYgZm91bmQsIGVsc2UgQGEgaGkuCisgICAgICAqLworICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCisgICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAorCQkgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29udmVydCB0byB1cHBlcmNhc2UuCisgICAgICAgKgorICAgICAgICogIFRoaXMgdmlydHVhbCBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgd2NoYXJfdCBhcmd1bWVudCB0byB1cHBlcmNhc2UgaWYKKyAgICAgICAqICBwb3NzaWJsZS4gIElmIG5vdCBwb3NzaWJsZSAoZm9yIGV4YW1wbGUsICcyJyksIHJldHVybnMgdGhlIGFyZ3VtZW50LgorICAgICAgICoKKyAgICAgICAqICBkb190b3VwcGVyKCkgaXMgYSBob29rIGZvciBhIGRlcml2ZWQgZmFjZXQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZgorICAgICAgICogIHVwcGVyY2FzaW5nLiAgZG9fdG91cHBlcigpIG11c3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZSByZXN1bHQgZm9yCisgICAgICAgKiAgdGhlIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBjICBUaGUgd2NoYXJfdCB0byBjb252ZXJ0LgorICAgICAgICogIEByZXR1cm4gIFRoZSB1cHBlcmNhc2Ugd2NoYXJfdCBpZiBjb252ZXJ0aWJsZSwgZWxzZSBAYSBjLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgY2hhcl90eXBlCisgICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSkgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29udmVydCBhcnJheSB0byB1cHBlcmNhc2UuCisgICAgICAgKgorICAgICAgICogIFRoaXMgdmlydHVhbCBmdW5jdGlvbiBjb252ZXJ0cyBlYWNoIHdjaGFyX3QgaW4gdGhlIHJhbmdlIFtsbyxoaSkgdG8KKyAgICAgICAqICB1cHBlcmNhc2UgaWYgcG9zc2libGUuICBPdGhlciBlbGVtZW50cyByZW1haW4gdW50b3VjaGVkLgorICAgICAgICoKKyAgICAgICAqICBkb190b3VwcGVyKCkgaXMgYSBob29rIGZvciBhIGRlcml2ZWQgZmFjZXQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZgorICAgICAgICogIHVwcGVyY2FzaW5nLiAgZG9fdG91cHBlcigpIG11c3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZSByZXN1bHQgZm9yCisgICAgICAgKiAgdGhlIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBsbyAgUG9pbnRlciB0byBzdGFydCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gaGkgIFBvaW50ZXIgdG8gZW5kIG9mIHJhbmdlLgorICAgICAgICogIEByZXR1cm4gIEBhIGhpLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgorICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29udmVydCB0byBsb3dlcmNhc2UuCisgICAgICAgKgorICAgICAgICogIFRoaXMgdmlydHVhbCBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgYXJndW1lbnQgdG8gbG93ZXJjYXNlIGlmCisgICAgICAgKiAgcG9zc2libGUuICBJZiBub3QgcG9zc2libGUgKGZvciBleGFtcGxlLCAnMicpLCByZXR1cm5zIHRoZSBhcmd1bWVudC4KKyAgICAgICAqCisgICAgICAgKiAgZG9fdG9sb3dlcigpIGlzIGEgaG9vayBmb3IgYSBkZXJpdmVkIGZhY2V0IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YKKyAgICAgICAqICBsb3dlcmNhc2luZy4gIGRvX3RvbG93ZXIoKSBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGZvcgorICAgICAgICogIHRoZSBzYW1lIGlucHV0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gYyAgVGhlIHdjaGFyX3QgdG8gY29udmVydC4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgbG93ZXJjYXNlIHdjaGFyX3QgaWYgY29udmVydGlibGUsIGVsc2UgQGEgYy4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNoYXJfdHlwZQorICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnZlcnQgYXJyYXkgdG8gbG93ZXJjYXNlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIHZpcnR1YWwgZnVuY3Rpb24gY29udmVydHMgZWFjaCB3Y2hhcl90IGluIHRoZSByYW5nZSBbbG8saGkpIHRvCisgICAgICAgKiAgbG93ZXJjYXNlIGlmIHBvc3NpYmxlLiAgT3RoZXIgZWxlbWVudHMgcmVtYWluIHVudG91Y2hlZC4KKyAgICAgICAqCisgICAgICAgKiAgZG9fdG9sb3dlcigpIGlzIGEgaG9vayBmb3IgYSBkZXJpdmVkIGZhY2V0IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YKKyAgICAgICAqICBsb3dlcmNhc2luZy4gIGRvX3RvbG93ZXIoKSBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGZvcgorICAgICAgICogIHRoZSBzYW1lIGlucHV0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gbG8gIFBvaW50ZXIgdG8gc3RhcnQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIGhpICBQb2ludGVyIHRvIGVuZCBvZiByYW5nZS4KKyAgICAgICAqICBAcmV0dXJuICBAYSBoaS4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFdpZGVuIGNoYXIgdG8gd2NoYXJfdAorICAgICAgICoKKyAgICAgICAqICBUaGlzIHZpcnR1YWwgZnVuY3Rpb24gY29udmVydHMgdGhlIGNoYXIgdG8gd2NoYXJfdCB1c2luZyB0aGUKKyAgICAgICAqICBzaW1wbGVzdCByZWFzb25hYmxlIHRyYW5zZm9ybWF0aW9uLiAgRm9yIGFuIHVuZGVyaXZlZCBjdHlwZTx3Y2hhcl90PgorICAgICAgICogIGZhY2V0LCB0aGUgYXJndW1lbnQgd2lsbCBiZSBjYXN0IHRvIHdjaGFyX3QuCisgICAgICAgKgorICAgICAgICogIGRvX3dpZGVuKCkgaXMgYSBob29rIGZvciBhIGRlcml2ZWQgZmFjZXQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZgorICAgICAgICogIHdpZGVuaW5nLiAgZG9fd2lkZW4oKSBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGZvciB0aGUKKyAgICAgICAqICBzYW1lIGlucHV0LgorICAgICAgICoKKyAgICAgICAqICBOb3RlOiB0aGlzIGlzIG5vdCB3aGF0IHlvdSB3YW50IGZvciBjb2RlcGFnZSBjb252ZXJzaW9ucy4gIFNlZQorICAgICAgICogIGNvZGVjdnQgZm9yIHRoYXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBjICBUaGUgY2hhciB0byBjb252ZXJ0LgorICAgICAgICogIEByZXR1cm4gIFRoZSBjb252ZXJ0ZWQgd2NoYXJfdC4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNoYXJfdHlwZQorICAgICAgZG9fd2lkZW4oY2hhcikgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgV2lkZW4gY2hhciBhcnJheSB0byB3Y2hhcl90IGFycmF5CisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gY29udmVydHMgZWFjaCBjaGFyIGluIHRoZSBpbnB1dCB0byB3Y2hhcl90IHVzaW5nIHRoZQorICAgICAgICogIHNpbXBsZXN0IHJlYXNvbmFibGUgdHJhbnNmb3JtYXRpb24uICBGb3IgYW4gdW5kZXJpdmVkIGN0eXBlPHdjaGFyX3Q+CisgICAgICAgKiAgZmFjZXQsIHRoZSBhcmd1bWVudCB3aWxsIGJlIGNvcGllZCwgY2FzdGluZyBlYWNoIGVsZW1lbnQgdG8gd2NoYXJfdC4KKyAgICAgICAqCisgICAgICAgKiAgZG9fd2lkZW4oKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgKiAgd2lkZW5pbmcuICBkb193aWRlbigpIG11c3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZSByZXN1bHQgZm9yIHRoZQorICAgICAgICogIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIE5vdGU6IHRoaXMgaXMgbm90IHdoYXQgeW91IHdhbnQgZm9yIGNvZGVwYWdlIGNvbnZlcnNpb25zLiAgU2VlCisgICAgICAgKiAgY29kZWN2dCBmb3IgdGhhdC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIGxvICBQb2ludGVyIHRvIHN0YXJ0IHJhbmdlLgorICAgICAgICogIEBwYXJhbSBoaSAgUG9pbnRlciB0byBlbmQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIHRvICBQb2ludGVyIHRvIHRoZSBkZXN0aW5hdGlvbiBhcnJheS4KKyAgICAgICAqICBAcmV0dXJuICBAYSBoaS4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCisgICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTmFycm93IHdjaGFyX3QgdG8gY2hhcgorICAgICAgICoKKyAgICAgICAqICBUaGlzIHZpcnR1YWwgZnVuY3Rpb24gY29udmVydHMgdGhlIGFyZ3VtZW50IHRvIGNoYXIgdXNpbmcKKyAgICAgICAqICB0aGUgc2ltcGxlc3QgcmVhc29uYWJsZSB0cmFuc2Zvcm1hdGlvbi4gIElmIHRoZSBjb252ZXJzaW9uCisgICAgICAgKiAgZmFpbHMsIGRmYXVsdCBpcyByZXR1cm5lZCBpbnN0ZWFkLiAgRm9yIGFuIHVuZGVyaXZlZAorICAgICAgICogIGN0eXBlPHdjaGFyX3Q+IGZhY2V0LCBAYSBjIHdpbGwgYmUgY2FzdCB0byBjaGFyIGFuZAorICAgICAgICogIHJldHVybmVkLgorICAgICAgICoKKyAgICAgICAqICBkb19uYXJyb3coKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlCisgICAgICAgKiAgYmVoYXZpb3Igb2YgbmFycm93aW5nLiAgZG9fbmFycm93KCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZQorICAgICAgICogIHNhbWUgcmVzdWx0IGZvciB0aGUgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZTogdGhpcyBpcyBub3Qgd2hhdCB5b3Ugd2FudCBmb3IgY29kZXBhZ2UgY29udmVyc2lvbnMuICBTZWUKKyAgICAgICAqICBjb2RlY3Z0IGZvciB0aGF0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gYyAgVGhlIHdjaGFyX3QgdG8gY29udmVydC4KKyAgICAgICAqICBAcGFyYW0gZGZhdWx0ICBDaGFyIHRvIHJldHVybiBpZiBjb252ZXJzaW9uIGZhaWxzLgorICAgICAgICogIEByZXR1cm4gIFRoZSBjb252ZXJ0ZWQgY2hhci4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNoYXIKKyAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE5hcnJvdyB3Y2hhcl90IGFycmF5IHRvIGNoYXIgYXJyYXkKKyAgICAgICAqCisgICAgICAgKiAgVGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGNvbnZlcnRzIGVhY2ggd2NoYXJfdCBpbiB0aGUgcmFuZ2UgW2xvLGhpKSB0bworICAgICAgICogIGNoYXIgdXNpbmcgdGhlIHNpbXBsZXN0IHJlYXNvbmFibGUgdHJhbnNmb3JtYXRpb24gYW5kIHdyaXRlcyB0aGUKKyAgICAgICAqICByZXN1bHRzIHRvIHRoZSBkZXN0aW5hdGlvbiBhcnJheS4gIEZvciBhbnkgd2NoYXJfdCBpbiB0aGUgaW5wdXQgdGhhdAorICAgICAgICogIGNhbm5vdCBiZSBjb252ZXJ0ZWQsIEBhIGRmYXVsdCBpcyB1c2VkIGluc3RlYWQuICBGb3IgYW4gdW5kZXJpdmVkCisgICAgICAgKiAgY3R5cGU8d2NoYXJfdD4gZmFjZXQsIHRoZSBhcmd1bWVudCB3aWxsIGJlIGNvcGllZCwgY2FzdGluZyBlYWNoCisgICAgICAgKiAgZWxlbWVudCB0byBjaGFyLgorICAgICAgICoKKyAgICAgICAqICBkb19uYXJyb3coKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgKiAgbmFycm93aW5nLiAgZG9fbmFycm93KCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IgdGhlCisgICAgICAgKiAgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZTogdGhpcyBpcyBub3Qgd2hhdCB5b3Ugd2FudCBmb3IgY29kZXBhZ2UgY29udmVyc2lvbnMuICBTZWUKKyAgICAgICAqICBjb2RlY3Z0IGZvciB0aGF0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gbG8gIFBvaW50ZXIgdG8gc3RhcnQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIGhpICBQb2ludGVyIHRvIGVuZCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gZGZhdWx0ICBDaGFyIHRvIHVzZSBpZiBjb252ZXJzaW9uIGZhaWxzLgorICAgICAgICogIEBwYXJhbSB0byAgUG9pbnRlciB0byB0aGUgZGVzdGluYXRpb24gYXJyYXkuCisgICAgICAgKiAgQHJldHVybiAgQGEgaGkuCisgICAgICAqLworICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCisgICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCisJCWNoYXIgX19kZmF1bHQsIGNoYXIqIF9fZGVzdCkgY29uc3Q7CisKKyAgICAgIC8vIEZvciB1c2UgYXQgY29uc3RydWN0aW9uIHRpbWUgb25seS4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2luaXRpYWxpemVfY3R5cGUoKSB0aHJvdygpOworICAgIH07CisjZW5kaWYgLy9fR0xJQkNYWF9VU0VfV0NIQVJfVAorCisgIC8vLyBjbGFzcyBjdHlwZV9ieW5hbWUgWzIyLjIuMS4yXS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGNsYXNzIGN0eXBlX2J5bmFtZSA6IHB1YmxpYyBjdHlwZTxfQ2hhclQ+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY3R5cGU8X0NoYXJUPjo6bWFzayAgbWFzazsKKworICAgICAgZXhwbGljaXQKKyAgICAgIGN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgIHZpcnR1YWwKKyAgICAgIH5jdHlwZV9ieW5hbWUoKSB7IH07CisgICAgfTsKKworICAvLy8gMjIuMi4xLjQgIENsYXNzIGN0eXBlX2J5bmFtZSBzcGVjaWFsaXphdGlvbnMuCisgIHRlbXBsYXRlPD4KKyAgICBjbGFzcyBjdHlwZV9ieW5hbWU8Y2hhcj4gOiBwdWJsaWMgY3R5cGU8Y2hhcj4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgZXhwbGljaXQKKyAgICAgIGN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgIHZpcnR1YWwKKyAgICAgIH5jdHlwZV9ieW5hbWUoKTsKKyAgICB9OworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgdGVtcGxhdGU8PgorICAgIGNsYXNzIGN0eXBlX2J5bmFtZTx3Y2hhcl90PiA6IHB1YmxpYyBjdHlwZTx3Y2hhcl90PgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICBleHBsaWNpdAorICAgICAgY3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApOworCisgICAgcHJvdGVjdGVkOgorICAgICAgdmlydHVhbAorICAgICAgfmN0eXBlX2J5bmFtZSgpOworICAgIH07CisjZW5kaWYKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisvLyBJbmNsdWRlIGhvc3QgYW5kIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWMgY3R5cGUgaW5saW5lcy4KKyNpbmNsdWRlIDxiaXRzL2N0eXBlX2lubGluZS5oPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8vIDIyLjIuMiAgVGhlIG51bWVyaWMgY2F0ZWdvcnkuCisgIGNsYXNzIF9fbnVtX2Jhc2UKKyAgeworICBwdWJsaWM6CisgICAgLy8gTkI6IENvZGUgZGVwZW5kcyBvbiB0aGUgb3JkZXIgb2YgX1NfYXRvbXNfb3V0IGVsZW1lbnRzLgorICAgIC8vIEJlbG93IGFyZSB0aGUgaW5kaWNlcyBpbnRvIF9TX2F0b21zX291dC4KKyAgICBlbnVtCisgICAgICB7CisgICAgICAgIF9TX29taW51cywKKyAgICAgICAgX1Nfb3BsdXMsCisgICAgICAgIF9TX294LAorICAgICAgICBfU19vWCwKKyAgICAgICAgX1Nfb2RpZ2l0cywKKyAgICAgICAgX1Nfb2RpZ2l0c19lbmQgPSBfU19vZGlnaXRzICsgMTYsCisgICAgICAgIF9TX291ZGlnaXRzID0gX1Nfb2RpZ2l0c19lbmQsCisgICAgICAgIF9TX291ZGlnaXRzX2VuZCA9IF9TX291ZGlnaXRzICsgMTYsCisgICAgICAgIF9TX29lID0gX1Nfb2RpZ2l0cyArIDE0LCAgLy8gRm9yIHNjaWVudGlmaWMgbm90YXRpb24sICdlJworICAgICAgICBfU19vRSA9IF9TX291ZGlnaXRzICsgMTQsIC8vIEZvciBzY2llbnRpZmljIG5vdGF0aW9uLCAnRScKKwlfU19vZW5kID0gX1Nfb3VkaWdpdHNfZW5kCisgICAgICB9OworCisgICAgLy8gQSBsaXN0IG9mIHZhbGlkIG51bWVyaWMgbGl0ZXJhbHMgZm9yIG91dHB1dC4gIFRoaXMgYXJyYXkKKyAgICAvLyBjb250YWlucyBjaGFycyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRocm91Z2ggdGhlIGN1cnJlbnQgbG9jYWxlJ3MKKyAgICAvLyBjdHlwZTxfQ2hhclQ+LndpZGVuKCkgYW5kIHRoZW4gdXNlZCB0byByZW5kZXIgbnVtYmVycy4KKyAgICAvLyBGb3IgdGhlIHN0YW5kYXJkICJDIiBsb2NhbGUsIHRoaXMgaXMKKyAgICAvLyAiLSt4WDAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5QUJDREVGIi4KKyAgICBzdGF0aWMgY29uc3QgY2hhciogX1NfYXRvbXNfb3V0OworCisgICAgLy8gU3RyaW5nIGxpdGVyYWwgb2YgYWNjZXB0YWJsZSAobmFycm93KSBpbnB1dCwgZm9yIG51bV9nZXQuCisgICAgLy8gIi0reFgwMTIzNDU2Nzg5YWJjZGVmQUJDREVGIgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBfU19hdG9tc19pbjsKKworICAgIGVudW0KKyAgICB7CisgICAgICBfU19pbWludXMsCisgICAgICBfU19pcGx1cywKKyAgICAgIF9TX2l4LAorICAgICAgX1NfaVgsCisgICAgICBfU19pemVybywKKyAgICAgIF9TX2llID0gX1NfaXplcm8gKyAxNCwKKyAgICAgIF9TX2lFID0gX1NfaXplcm8gKyAyMCwKKyAgICAgIF9TX2llbmQgPSAyNgorICAgIH07CisKKyAgICAvLyBudW1fcHV0CisgICAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgc2NhbmYgZm9ybWF0IGZvciBmbG9hdGluZyBwb2ludCB0eXBlcy4KKyAgICBzdGF0aWMgdm9pZAorICAgIF9TX2Zvcm1hdF9mbG9hdChjb25zdCBpb3NfYmFzZSYgX19pbywgY2hhciogX19mcHRyLCBjaGFyIF9fbW9kKSB0aHJvdygpOworICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBzdHJ1Y3QgX19udW1wdW5jdF9jYWNoZSA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CisgICAgeworICAgICAgY29uc3QgY2hhcioJCQlfTV9ncm91cGluZzsKKyAgICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9ncm91cGluZ19zaXplOworICAgICAgYm9vbAkJCQlfTV91c2VfZ3JvdXBpbmc7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fdHJ1ZW5hbWU7CisgICAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fdHJ1ZW5hbWVfc2l6ZTsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9mYWxzZW5hbWU7CisgICAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZmFsc2VuYW1lX3NpemU7CisgICAgICBfQ2hhclQJCQkJX01fZGVjaW1hbF9wb2ludDsKKyAgICAgIF9DaGFyVAkJCQlfTV90aG91c2FuZHNfc2VwOworCisgICAgICAvLyBBIGxpc3Qgb2YgdmFsaWQgbnVtZXJpYyBsaXRlcmFscyBmb3Igb3V0cHV0OiBpbiB0aGUgc3RhbmRhcmQKKyAgICAgIC8vICJDIiBsb2NhbGUsIHRoaXMgaXMgIi0reFgwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OUFCQ0RFRiIuCisgICAgICAvLyBUaGlzIGFycmF5IGNvbnRhaW5zIHRoZSBjaGFycyBhZnRlciBoYXZpbmcgYmVlbiBwYXNzZWQKKyAgICAgIC8vIHRocm91Z2ggdGhlIGN1cnJlbnQgbG9jYWxlJ3MgY3R5cGU8X0NoYXJUPi53aWRlbigpLgorICAgICAgX0NoYXJUCQkJCV9NX2F0b21zX291dFtfX251bV9iYXNlOjpfU19vZW5kXTsKKworICAgICAgLy8gQSBsaXN0IG9mIHZhbGlkIG51bWVyaWMgbGl0ZXJhbHMgZm9yIGlucHV0OiBpbiB0aGUgc3RhbmRhcmQKKyAgICAgIC8vICJDIiBsb2NhbGUsIHRoaXMgaXMgIi0reFgwMTIzNDU2Nzg5YWJjZGVmQUJDREVGIgorICAgICAgLy8gVGhpcyBhcnJheSBjb250YWlucyB0aGUgY2hhcnMgYWZ0ZXIgaGF2aW5nIGJlZW4gcGFzc2VkCisgICAgICAvLyB0aHJvdWdoIHRoZSBjdXJyZW50IGxvY2FsZSdzIGN0eXBlPF9DaGFyVD4ud2lkZW4oKS4KKyAgICAgIF9DaGFyVAkJCQlfTV9hdG9tc19pbltfX251bV9iYXNlOjpfU19pZW5kXTsKKworICAgICAgYm9vbAkJCQlfTV9hbGxvY2F0ZWQ7CisKKyAgICAgIF9fbnVtcHVuY3RfY2FjaGUoc2l6ZV90IF9fcmVmcyA9IDApIDogZmFjZXQoX19yZWZzKSwKKyAgICAgIF9NX2dyb3VwaW5nKE5VTEwpLCBfTV9ncm91cGluZ19zaXplKDApLCBfTV91c2VfZ3JvdXBpbmcoZmFsc2UpLAorICAgICAgX01fdHJ1ZW5hbWUoTlVMTCksIF9NX3RydWVuYW1lX3NpemUoMCksIF9NX2ZhbHNlbmFtZShOVUxMKSwKKyAgICAgIF9NX2ZhbHNlbmFtZV9zaXplKDApLCBfTV9kZWNpbWFsX3BvaW50KF9DaGFyVCgpKSwKKyAgICAgIF9NX3Rob3VzYW5kc19zZXAoX0NoYXJUKCkpLCBfTV9hbGxvY2F0ZWQoZmFsc2UpCisgICAgICB7IH0KKworICAgICAgfl9fbnVtcHVuY3RfY2FjaGUoKTsKKworICAgICAgdm9pZAorICAgICAgX01fY2FjaGUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CisKKyAgICBwcml2YXRlOgorICAgICAgX19udW1wdW5jdF9jYWNoZSYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfX251bXB1bmN0X2NhY2hlJik7CisgICAgICAKKyAgICAgIGV4cGxpY2l0CisgICAgICBfX251bXB1bmN0X2NhY2hlKGNvbnN0IF9fbnVtcHVuY3RfY2FjaGUmKTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBfX251bXB1bmN0X2NhY2hlPF9DaGFyVD46On5fX251bXB1bmN0X2NhY2hlKCkKKyAgICB7CisgICAgICBpZiAoX01fYWxsb2NhdGVkKQorCXsKKwkgIGRlbGV0ZSBbXSBfTV9ncm91cGluZzsKKwkgIGRlbGV0ZSBbXSBfTV90cnVlbmFtZTsKKwkgIGRlbGV0ZSBbXSBfTV9mYWxzZW5hbWU7CisJfQorICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgUHJpbWFyeSBjbGFzcyB0ZW1wbGF0ZSBudW1wdW5jdC4KKyAgICogIEBpbmdyb3VwIGxvY2FsZXMKKyAgICoKKyAgICogIFRoaXMgZmFjZXQgc3RvcmVzIHNldmVyYWwgcGllY2VzIG9mIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gcHJpbnRpbmcgYW5kCisgICAqICBzY2FubmluZyBudW1iZXJzLCBzdWNoIGFzIHRoZSBkZWNpbWFsIHBvaW50IGNoYXJhY3Rlci4gIEl0IHRha2VzIGEKKyAgICogIHRlbXBsYXRlIHBhcmFtZXRlciBzcGVjaWZ5aW5nIHRoZSBjaGFyIHR5cGUuICBUaGUgbnVtcHVuY3QgZmFjZXQgaXMKKyAgICogIHVzZWQgYnkgc3RyZWFtcyBmb3IgbWFueSBJL08gb3BlcmF0aW9ucyBpbnZvbHZpbmcgbnVtYmVycy4KKyAgICoKKyAgICogIFRoZSBudW1wdW5jdCB0ZW1wbGF0ZSB1c2VzIHByb3RlY3RlZCB2aXJ0dWFsIGZ1bmN0aW9ucyB0byBwcm92aWRlIHRoZQorICAgKiAgYWN0dWFsIHJlc3VsdHMuICBUaGUgcHVibGljIGFjY2Vzc29ycyBmb3J3YXJkIHRoZSBjYWxsIHRvIHRoZSB2aXJ0dWFsCisgICAqICBmdW5jdGlvbnMuICBUaGVzZSB2aXJ0dWFsIGZ1bmN0aW9ucyBhcmUgaG9va3MgZm9yIGRldmVsb3BlcnMgdG8KKyAgICogIGltcGxlbWVudCB0aGUgYmVoYXZpb3IgdGhleSByZXF1aXJlIGZyb20gYSBudW1wdW5jdCBmYWNldC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGNsYXNzIG51bXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gVHlwZXM6CisgICAgICAvL0B7CisgICAgICAvLy8gUHVibGljIHR5cGVkZWZzCisgICAgICB0eXBlZGVmIF9DaGFyVAkJCWNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4Jc3RyaW5nX3R5cGU7CisgICAgICAvL0B9CisgICAgICB0eXBlZGVmIF9fbnVtcHVuY3RfY2FjaGU8X0NoYXJUPiAgX19jYWNoZV90eXBlOworCisgICAgcHJvdGVjdGVkOgorICAgICAgX19jYWNoZV90eXBlKgkJCV9NX2RhdGE7CisKKyAgICBwdWJsaWM6CisgICAgICAvLy8gTnVtcHVuY3QgZmFjZXQgaWQuCisgICAgICBzdGF0aWMgbG9jYWxlOjppZAkJCWlkOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE51bXB1bmN0IGNvbnN0cnVjdG9yLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIHJlZnMgIFJlZmNvdW50IHRvIHBhc3MgdG8gdGhlIGJhc2UgY2xhc3MuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBudW1wdW5jdChzaXplX3QgX19yZWZzID0gMCkgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpCisgICAgICB7IF9NX2luaXRpYWxpemVfbnVtcHVuY3QoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEludGVybmFsIGNvbnN0cnVjdG9yLiAgTm90IGZvciBnZW5lcmFsIHVzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyBhIGNvbnN0cnVjdG9yIGZvciB1c2UgYnkgdGhlIGxpYnJhcnkgaXRzZWxmIHRvIHNldCB1cCB0aGUKKyAgICAgICAqICBwcmVkZWZpbmVkIGxvY2FsZSBmYWNldHMuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgY2FjaGUgIF9fbnVtcHVuY3RfY2FjaGUgb2JqZWN0LgorICAgICAgICogIEBwYXJhbSAgcmVmcyAgUmVmY291bnQgdG8gcGFzcyB0byB0aGUgYmFzZSBjbGFzcy4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIG51bXB1bmN0KF9fY2FjaGVfdHlwZSogX19jYWNoZSwgc2l6ZV90IF9fcmVmcyA9IDApCisgICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoX19jYWNoZSkKKyAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW50ZXJuYWwgY29uc3RydWN0b3IuICBOb3QgZm9yIGdlbmVyYWwgdXNlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGlzIGEgY29uc3RydWN0b3IgZm9yIHVzZSBieSB0aGUgbGlicmFyeSBpdHNlbGYgdG8gc2V0IHVwIG5ldworICAgICAgICogIGxvY2FsZXMuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgY2xvYyAgVGhlIEMgbG9jYWxlLgorICAgICAgICogIEBwYXJhbSAgcmVmcyAgUmVmY291bnQgdG8gcGFzcyB0byB0aGUgYmFzZSBjbGFzcy4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIG51bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCkKKyAgICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKQorICAgICAgeyBfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY2xvYyk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gZGVjaW1hbCBwb2ludCBjaGFyYWN0ZXIuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGNoYXJfdHlwZSB0byB1c2UgYXMgYSBkZWNpbWFsIHBvaW50LiAgSXQKKyAgICAgICAqICBkb2VzIHNvIGJ5IHJldHVybmluZyByZXR1cm5pbmcKKyAgICAgICAqICBudW1wdW5jdDxjaGFyX3R5cGU+Ojpkb19kZWNpbWFsX3BvaW50KCkuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gIEBhIGNoYXJfdHlwZSByZXByZXNlbnRpbmcgYSBkZWNpbWFsIHBvaW50LgorICAgICAgKi8KKyAgICAgIGNoYXJfdHlwZQorICAgICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19kZWNpbWFsX3BvaW50KCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gdGhvdXNhbmRzIHNlcGFyYXRvciBjaGFyYWN0ZXIuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGNoYXJfdHlwZSB0byB1c2UgYXMgYSB0aG91c2FuZHMKKyAgICAgICAqICBzZXBhcmF0b3IuICBJdCBkb2VzIHNvIGJ5IHJldHVybmluZyByZXR1cm5pbmcKKyAgICAgICAqICBudW1wdW5jdDxjaGFyX3R5cGU+Ojpkb190aG91c2FuZHNfc2VwKCkuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gIGNoYXJfdHlwZSByZXByZXNlbnRpbmcgYSB0aG91c2FuZHMgc2VwYXJhdG9yLgorICAgICAgKi8KKyAgICAgIGNoYXJfdHlwZQorICAgICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gZ3JvdXBpbmcgc3BlY2lmaWNhdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGluZyBncm91cGluZ3MgZm9yIHRoZQorICAgICAgICogIGludGVnZXIgcGFydCBvZiBhIG51bWJlci4gIEdyb3VwaW5ncyBpbmRpY2F0ZSB3aGVyZSB0aG91c2FuZHMKKyAgICAgICAqICBzZXBhcmF0b3JzIHNob3VsZCBiZSBpbnNlcnRlZCBpbiB0aGUgaW50ZWdlciBwYXJ0IG9mIGEgbnVtYmVyLgorICAgICAgICoKKyAgICAgICAqICBFYWNoIGNoYXIgaW4gdGhlIHJldHVybiBzdHJpbmcgaXMgaW50ZXJwcmV0IGFzIGFuIGludGVnZXIKKyAgICAgICAqICByYXRoZXIgdGhhbiBhIGNoYXJhY3Rlci4gIFRoZXNlIG51bWJlcnMgcmVwcmVzZW50IHRoZSBudW1iZXIKKyAgICAgICAqICBvZiBkaWdpdHMgaW4gYSBncm91cC4gIFRoZSBmaXJzdCBjaGFyIGluIHRoZSBzdHJpbmcKKyAgICAgICAqICByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgZGlnaXRzIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudAorICAgICAgICogIGdyb3VwLiAgSWYgYSBjaGFyIGlzIG5lZ2F0aXZlLCBpdCBpbmRpY2F0ZXMgYW4gdW5saW1pdGVkCisgICAgICAgKiAgbnVtYmVyIG9mIGRpZ2l0cyBmb3IgdGhlIGdyb3VwLiAgSWYgbW9yZSBjaGFycyBmcm9tIHRoZQorICAgICAgICogIHN0cmluZyBhcmUgcmVxdWlyZWQgdG8gZ3JvdXAgYSBudW1iZXIsIHRoZSBsYXN0IGNoYXIgaXMgdXNlZAorICAgICAgICogIHJlcGVhdGVkbHkuCisgICAgICAgKgorICAgICAgICogIEZvciBleGFtcGxlLCBpZiB0aGUgZ3JvdXBpbmcoKSByZXR1cm5zICJcMDAzXDAwMiIgYW5kIGlzCisgICAgICAgKiAgYXBwbGllZCB0byB0aGUgbnVtYmVyIDEyMzQ1Njc4OSwgdGhpcyBjb3JyZXNwb25kcyB0bworICAgICAgICogIDEyLDM0LDU2LDc4OS4gIE5vdGUgdGhhdCBpZiB0aGUgc3RyaW5nIHdhcyAiMzIiLCB0aGlzIHdvdWxkCisgICAgICAgKiAgcHV0IG1vcmUgdGhhbiA1MCBkaWdpdHMgaW50byB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgZ3JvdXAgaWYKKyAgICAgICAqICB0aGUgY2hhcmFjdGVyIHNldCBpcyBBU0NJSS4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIHN0cmluZyBpcyByZXR1cm5lZCBieSBjYWxsaW5nCisgICAgICAgKiAgbnVtcHVuY3Q8Y2hhcl90eXBlPjo6ZG9fZ3JvdXBpbmcoKS4KKyAgICAgICAqCisgICAgICAgKiAgQHJldHVybiAgc3RyaW5nIHJlcHJlc2VudGluZyBncm91cGluZyBzcGVjaWZpY2F0aW9uLgorICAgICAgKi8KKyAgICAgIHN0cmluZworICAgICAgZ3JvdXBpbmcoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ3JvdXBpbmcoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYm9vbCB0cnVlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJpbmdfdHlwZSBjb250YWluaW5nIHRoZSB0ZXh0CisgICAgICAgKiAgcmVwcmVzZW50YXRpb24gZm9yIHRydWUgYm9vbCB2YXJpYWJsZXMuICBJdCBkb2VzIHNvIGJ5IGNhbGxpbmcKKyAgICAgICAqICBudW1wdW5jdDxjaGFyX3R5cGU+Ojpkb190cnVlbmFtZSgpLgorICAgICAgICoKKyAgICAgICAqICBAcmV0dXJuICBzdHJpbmdfdHlwZSByZXByZXNlbnRpbmcgcHJpbnRlZCBmb3JtIG9mIHRydWUuCisgICAgICAqLworICAgICAgc3RyaW5nX3R5cGUKKyAgICAgIHRydWVuYW1lKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RydWVuYW1lKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGJvb2wgZmFsc2UuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmluZ190eXBlIGNvbnRhaW5pbmcgdGhlIHRleHQKKyAgICAgICAqICByZXByZXNlbnRhdGlvbiBmb3IgZmFsc2UgYm9vbCB2YXJpYWJsZXMuICBJdCBkb2VzIHNvIGJ5IGNhbGxpbmcKKyAgICAgICAqICBudW1wdW5jdDxjaGFyX3R5cGU+Ojpkb19mYWxzZW5hbWUoKS4KKyAgICAgICAqCisgICAgICAgKiAgQHJldHVybiAgc3RyaW5nX3R5cGUgcmVwcmVzZW50aW5nIHByaW50ZWQgZm9ybSBvZiBmYWxzZS4KKyAgICAgICovCisgICAgICBzdHJpbmdfdHlwZQorICAgICAgZmFsc2VuYW1lKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2ZhbHNlbmFtZSgpOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvLy8gRGVzdHJ1Y3Rvci4KKyAgICAgIHZpcnR1YWwKKyAgICAgIH5udW1wdW5jdCgpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBkZWNpbWFsIHBvaW50IGNoYXJhY3Rlci4KKyAgICAgICAqCisgICAgICAgKiAgUmV0dXJucyBhIGNoYXJfdHlwZSB0byB1c2UgYXMgYSBkZWNpbWFsIHBvaW50LiAgVGhpcyBmdW5jdGlvbiBpcyBhCisgICAgICAgKiAgaG9vayBmb3IgZGVyaXZlZCBjbGFzc2VzIHRvIGNoYW5nZSB0aGUgdmFsdWUgcmV0dXJuZWQuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gIEBhIGNoYXJfdHlwZSByZXByZXNlbnRpbmcgYSBkZWNpbWFsIHBvaW50LgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgY2hhcl90eXBlCisgICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQ7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gdGhvdXNhbmRzIHNlcGFyYXRvciBjaGFyYWN0ZXIuCisgICAgICAgKgorICAgICAgICogIFJldHVybnMgYSBjaGFyX3R5cGUgdG8gdXNlIGFzIGEgdGhvdXNhbmRzIHNlcGFyYXRvci4gIFRoaXMgZnVuY3Rpb24KKyAgICAgICAqICBpcyBhIGhvb2sgZm9yIGRlcml2ZWQgY2xhc3NlcyB0byBjaGFuZ2UgdGhlIHZhbHVlIHJldHVybmVkLgorICAgICAgICoKKyAgICAgICAqICBAcmV0dXJuICBAYSBjaGFyX3R5cGUgcmVwcmVzZW50aW5nIGEgdGhvdXNhbmRzIHNlcGFyYXRvci4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNoYXJfdHlwZQorICAgICAgZG9fdGhvdXNhbmRzX3NlcCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIGdyb3VwaW5nIHNwZWNpZmljYXRpb24uCisgICAgICAgKgorICAgICAgICogIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGdyb3VwaW5ncyBmb3IgdGhlIGludGVnZXIgcGFydCBvZiBhCisgICAgICAgKiAgbnVtYmVyLiAgVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sgZm9yIGRlcml2ZWQgY2xhc3NlcyB0byBjaGFuZ2UgdGhlCisgICAgICAgKiAgdmFsdWUgcmV0dXJuZWQuICBAc2VlIGdyb3VwaW5nKCkgZm9yIGRldGFpbHMuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gIFN0cmluZyByZXByZXNlbnRpbmcgZ3JvdXBpbmcgc3BlY2lmaWNhdGlvbi4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIHN0cmluZworICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZGF0YS0+X01fZ3JvdXBpbmc7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGJvb2wgdHJ1ZS4KKyAgICAgICAqCisgICAgICAgKiAgUmV0dXJucyBhIHN0cmluZ190eXBlIGNvbnRhaW5pbmcgdGhlIHRleHQgcmVwcmVzZW50YXRpb24gZm9yIHRydWUKKyAgICAgICAqICBib29sIHZhcmlhYmxlcy4gIFRoaXMgZnVuY3Rpb24gaXMgYSBob29rIGZvciBkZXJpdmVkIGNsYXNzZXMgdG8KKyAgICAgICAqICBjaGFuZ2UgdGhlIHZhbHVlIHJldHVybmVkLgorICAgICAgICoKKyAgICAgICAqICBAcmV0dXJuICBzdHJpbmdfdHlwZSByZXByZXNlbnRpbmcgcHJpbnRlZCBmb3JtIG9mIHRydWUuCisgICAgICAqLworICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQorICAgICAgZG9fdHJ1ZW5hbWUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZGF0YS0+X01fdHJ1ZW5hbWU7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGJvb2wgZmFsc2UuCisgICAgICAgKgorICAgICAgICogIFJldHVybnMgYSBzdHJpbmdfdHlwZSBjb250YWluaW5nIHRoZSB0ZXh0IHJlcHJlc2VudGF0aW9uIGZvciBmYWxzZQorICAgICAgICogIGJvb2wgdmFyaWFibGVzLiAgVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sgZm9yIGRlcml2ZWQgY2xhc3NlcyB0bworICAgICAgICogIGNoYW5nZSB0aGUgdmFsdWUgcmV0dXJuZWQuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gIHN0cmluZ190eXBlIHJlcHJlc2VudGluZyBwcmludGVkIGZvcm0gb2YgZmFsc2UuCisgICAgICAqLworICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQorICAgICAgZG9fZmFsc2VuYW1lKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZTsgfQorCisgICAgICAvLyBGb3IgdXNlIGF0IGNvbnN0cnVjdGlvbiB0aW1lIG9ubHkuCisgICAgICB2b2lkCisgICAgICBfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0gTlVMTCk7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgbG9jYWxlOjppZCBudW1wdW5jdDxfQ2hhclQ+OjppZDsKKworICB0ZW1wbGF0ZTw+CisgICAgbnVtcHVuY3Q8Y2hhcj46On5udW1wdW5jdCgpOworCisgIHRlbXBsYXRlPD4KKyAgICB2b2lkCisgICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgdGVtcGxhdGU8PgorICAgIG51bXB1bmN0PHdjaGFyX3Q+Ojp+bnVtcHVuY3QoKTsKKworICB0ZW1wbGF0ZTw+CisgICAgdm9pZAorICAgIG51bXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKKyNlbmRpZgorCisgIC8vLyBjbGFzcyBudW1wdW5jdF9ieW5hbWUgWzIyLjIuMy4yXS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGNsYXNzIG51bXB1bmN0X2J5bmFtZSA6IHB1YmxpYyBudW1wdW5jdDxfQ2hhclQ+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0NoYXJUCQkJY2hhcl90eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPglzdHJpbmdfdHlwZTsKKworICAgICAgZXhwbGljaXQKKyAgICAgIG51bXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQorICAgICAgOiBudW1wdW5jdDxfQ2hhclQ+KF9fcmVmcykKKyAgICAgIHsKKwlpZiAoX19idWlsdGluX3N0cmNtcChfX3MsICJDIikgIT0gMAorCSAgICAmJiBfX2J1aWx0aW5fc3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKKwkgIHsKKwkgICAgX19jX2xvY2FsZSBfX3RtcDsKKwkgICAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKF9fdG1wLCBfX3MpOworCSAgICB0aGlzLT5fTV9pbml0aWFsaXplX251bXB1bmN0KF9fdG1wKTsKKwkgICAgdGhpcy0+X1NfZGVzdHJveV9jX2xvY2FsZShfX3RtcCk7CisJICB9CisgICAgICB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB2aXJ0dWFsCisgICAgICB+bnVtcHVuY3RfYnluYW1lKCkgeyB9CisgICAgfTsKKworX0dMSUJDWFhfQkVHSU5fTERCTF9OQU1FU1BBQ0UKKworICAvKioKKyAgICogIEBicmllZiAgUHJpbWFyeSBjbGFzcyB0ZW1wbGF0ZSBudW1fZ2V0LgorICAgKiAgQGluZ3JvdXAgbG9jYWxlcworICAgKgorICAgKiAgVGhpcyBmYWNldCBlbmNhcHN1bGF0ZXMgdGhlIGNvZGUgdG8gcGFyc2UgYW5kIHJldHVybiBhIG51bWJlcgorICAgKiAgZnJvbSBhIHN0cmluZy4gIEl0IGlzIHVzZWQgYnkgdGhlIGlzdHJlYW0gbnVtZXJpYyBleHRyYWN0aW9uCisgICAqICBvcGVyYXRvcnMuCisgICAqCisgICAqICBUaGUgbnVtX2dldCB0ZW1wbGF0ZSB1c2VzIHByb3RlY3RlZCB2aXJ0dWFsIGZ1bmN0aW9ucyB0byBwcm92aWRlIHRoZQorICAgKiAgYWN0dWFsIHJlc3VsdHMuICBUaGUgcHVibGljIGFjY2Vzc29ycyBmb3J3YXJkIHRoZSBjYWxsIHRvIHRoZSB2aXJ0dWFsCisgICAqICBmdW5jdGlvbnMuICBUaGVzZSB2aXJ0dWFsIGZ1bmN0aW9ucyBhcmUgaG9va3MgZm9yIGRldmVsb3BlcnMgdG8KKyAgICogIGltcGxlbWVudCB0aGUgYmVoYXZpb3IgdGhleSByZXF1aXJlIGZyb20gdGhlIG51bV9nZXQgZmFjZXQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KKyAgICBjbGFzcyBudW1fZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gVHlwZXM6CisgICAgICAvL0B7CisgICAgICAvLy8gUHVibGljIHR5cGVkZWZzCisgICAgICB0eXBlZGVmIF9DaGFyVAkJCWNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0luSXRlcgkJCWl0ZXJfdHlwZTsKKyAgICAgIC8vQH0KKworICAgICAgLy8vIE51bXB1bmN0IGZhY2V0IGlkLgorICAgICAgc3RhdGljIGxvY2FsZTo6aWQJCQlpZDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3RvciBwZXJmb3JtcyBpbml0aWFsaXphdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyB0aGUgY29uc3RydWN0b3IgcHJvdmlkZWQgYnkgdGhlIHN0YW5kYXJkLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gcmVmcyAgUGFzc2VkIHRvIHRoZSBiYXNlIGZhY2V0IGNsYXNzLgorICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBudW1fZ2V0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGZhY2V0KF9fcmVmcykgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTnVtZXJpYyBwYXJzaW5nLgorICAgICAgICoKKyAgICAgICAqICBQYXJzZXMgdGhlIGlucHV0IHN0cmVhbSBpbnRvIHRoZSBib29sIEBhIHYuICBJdCBkb2VzIHNvIGJ5IGNhbGxpbmcKKyAgICAgICAqICBudW1fZ2V0Ojpkb19nZXQoKS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgaW9zX2Jhc2U6OmJvb2xhbHBoYSBpcyBzZXQsIGF0dGVtcHRzIHRvIHJlYWQKKyAgICAgICAqICBjdHlwZTxDaGFyVD46OnRydWVuYW1lKCkgb3IgY3R5cGU8Q2hhclQ+OjpmYWxzZW5hbWUoKS4gIFNldHMKKyAgICAgICAqICBAYSB2IHRvIHRydWUgb3IgZmFsc2UgaWYgc3VjY2Vzc2Z1bC4gIFNldHMgZXJyIHRvCisgICAgICAgKiAgaW9zX2Jhc2U6OmZhaWxiaXQgaWYgcmVhZGluZyB0aGUgc3RyaW5nIGZhaWxzLiAgU2V0cyBlcnIgdG8KKyAgICAgICAqICBpb3NfYmFzZTo6ZW9mYml0IGlmIHRoZSBzdHJlYW0gaXMgZW1wdGllZC4KKyAgICAgICAqCisgICAgICAgKiAgSWYgaW9zX2Jhc2U6OmJvb2xhbHBoYSBpcyBub3Qgc2V0LCBwcm9jZWVkcyBhcyB3aXRoIHJlYWRpbmcgYSBsb25nLAorICAgICAgICogIGV4Y2VwdCBpZiB0aGUgdmFsdWUgaXMgMSwgc2V0cyBAYSB2IHRvIHRydWUsIGlmIHRoZSB2YWx1ZSBpcyAwLCBzZXRzCisgICAgICAgKiAgQGEgdiB0byBmYWxzZSwgYW5kIG90aGVyd2lzZSBzZXQgZXJyIHRvIGlvc19iYXNlOjpmYWlsYml0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIGluICBTdGFydCBvZiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiAgQHBhcmFtICBlbmQgIEVuZCBvZiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiAgQHBhcmFtICBpbyAgU291cmNlIG9mIGxvY2FsZSBhbmQgZmxhZ3MuCisgICAgICAgKiAgQHBhcmFtICBlcnIgIEVycm9yIGZsYWdzIHRvIHNldC4KKyAgICAgICAqICBAcGFyYW0gIHYgIFZhbHVlIHRvIGZvcm1hdCBhbmQgaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIGFmdGVyIHJlYWRpbmcuCisgICAgICAqLworICAgICAgaXRlcl90eXBlCisgICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBOdW1lcmljIHBhcnNpbmcuCisgICAgICAgKgorICAgICAgICogIFBhcnNlcyB0aGUgaW5wdXQgc3RyZWFtIGludG8gdGhlIGludGVncmFsIHZhcmlhYmxlIEBhIHYuICBJdCBkb2VzIHNvCisgICAgICAgKiAgYnkgY2FsbGluZyBudW1fZ2V0Ojpkb19nZXQoKS4KKyAgICAgICAqCisgICAgICAgKiAgUGFyc2luZyBpcyBhZmZlY3RlZCBieSB0aGUgZmxhZyBzZXR0aW5ncyBpbiBAYSBpby4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGJhc2ljIHBhcnNlIGlzIGFmZmVjdGVkIGJ5IHRoZSB2YWx1ZSBvZiBpby5mbGFncygpICYKKyAgICAgICAqICBpb3NfYmFzZTo6YmFzZWZpZWxkLiAgSWYgZXF1YWwgdG8gaW9zX2Jhc2U6Om9jdCwgcGFyc2VzIGxpa2UgdGhlCisgICAgICAgKiAgc2NhbmYgJW8gc3BlY2lmaWVyLiAgRWxzZSBpZiBlcXVhbCB0byBpb3NfYmFzZTo6aGV4LCBwYXJzZXMgbGlrZSAlWAorICAgICAgICogIHNwZWNpZmllci4gIEVsc2UgaWYgYmFzZWZpZWxkIGVxdWFsIHRvIDAsIHBhcnNlcyBsaWtlIHRoZSAlaQorICAgICAgICogIHNwZWNpZmllci4gIE90aGVyd2lzZSwgcGFyc2VzIGxpa2UgJWQgZm9yIHNpZ25lZCBhbmQgJXUgZm9yIHVuc2lnbmVkCisgICAgICAgKiAgdHlwZXMuICBUaGUgbWF0Y2hpbmcgdHlwZSBsZW5ndGggbW9kaWZpZXIgaXMgYWxzbyB1c2VkLgorICAgICAgICoKKyAgICAgICAqICBEaWdpdCBncm91cGluZyBpcyBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gbnVtcHVuY3Q6Omdyb3VwaW5nKCkgYW5kCisgICAgICAgKiAgbnVtcHVuY3Q6OnRob3VzYW5kc19zZXAoKS4gIElmIHRoZSBwYXR0ZXJuIG9mIGRpZ2l0IGdyb3VwcyBpc24ndAorICAgICAgICogIGNvbnNpc3RlbnQsIHNldHMgZXJyIHRvIGlvc19iYXNlOjpmYWlsYml0LgorICAgICAgICoKKyAgICAgICAqICBJZiBwYXJzaW5nIHRoZSBzdHJpbmcgeWllbGRzIGEgdmFsaWQgdmFsdWUgZm9yIEBhIHYsIEBhIHYgaXMgc2V0LgorICAgICAgICogIE90aGVyd2lzZSwgc2V0cyBlcnIgdG8gaW9zX2Jhc2U6OmZhaWxiaXQgYW5kIGxlYXZlcyBAYSB2IHVuYWx0ZXJlZC4KKyAgICAgICAqICBTZXRzIGVyciB0byBpb3NfYmFzZTo6ZW9mYml0IGlmIHRoZSBzdHJlYW0gaXMgZW1wdGllZC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBpbiAgU3RhcnQgb2YgaW5wdXQgc3RyZWFtLgorICAgICAgICogIEBwYXJhbSAgZW5kICBFbmQgb2YgaW5wdXQgc3RyZWFtLgorICAgICAgICogIEBwYXJhbSAgaW8gIFNvdXJjZSBvZiBsb2NhbGUgYW5kIGZsYWdzLgorICAgICAgICogIEBwYXJhbSAgZXJyICBFcnJvciBmbGFncyB0byBzZXQuCisgICAgICAgKiAgQHBhcmFtICB2ICBWYWx1ZSB0byBmb3JtYXQgYW5kIGluc2VydC4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciBhZnRlciByZWFkaW5nLgorICAgICAgKi8KKyAgICAgIGl0ZXJfdHlwZQorICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorCSAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nJiBfX3YpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CisKKyAgICAgIGl0ZXJfdHlwZQorICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorCSAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQorCisgICAgICBpdGVyX3R5cGUKKyAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKKwkgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3YpICAgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KKworICAgICAgaXRlcl90eXBlCisgICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcmIF9fdikgIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfTE9OR19MT05HCisgICAgICBpdGVyX3R5cGUKKyAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKKwkgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBsb25nJiBfX3YpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CisKKyAgICAgIGl0ZXJfdHlwZQorICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorCSAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nIGxvbmcmIF9fdikgIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CisjZW5kaWYKKyAgICAgIC8vQH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBOdW1lcmljIHBhcnNpbmcuCisgICAgICAgKgorICAgICAgICogIFBhcnNlcyB0aGUgaW5wdXQgc3RyZWFtIGludG8gdGhlIGludGVncmFsIHZhcmlhYmxlIEBhIHYuICBJdCBkb2VzIHNvCisgICAgICAgKiAgYnkgY2FsbGluZyBudW1fZ2V0Ojpkb19nZXQoKS4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGlucHV0IGNoYXJhY3RlcnMgYXJlIHBhcnNlZCBsaWtlIHRoZSBzY2FuZiAlZyBzcGVjaWZpZXIuICBUaGUKKyAgICAgICAqICBtYXRjaGluZyB0eXBlIGxlbmd0aCBtb2RpZmllciBpcyBhbHNvIHVzZWQuCisgICAgICAgKgorICAgICAgICogIFRoZSBkZWNpbWFsIHBvaW50IGNoYXJhY3RlciB1c2VkIGlzIG51bXB1bmN0OjpkZWNpbWFsX3BvaW50KCkuCisgICAgICAgKiAgRGlnaXQgZ3JvdXBpbmcgaXMgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIG51bXB1bmN0Ojpncm91cGluZygpIGFuZAorICAgICAgICogIG51bXB1bmN0Ojp0aG91c2FuZHNfc2VwKCkuICBJZiB0aGUgcGF0dGVybiBvZiBkaWdpdCBncm91cHMgaXNuJ3QKKyAgICAgICAqICBjb25zaXN0ZW50LCBzZXRzIGVyciB0byBpb3NfYmFzZTo6ZmFpbGJpdC4KKyAgICAgICAqCisgICAgICAgKiAgSWYgcGFyc2luZyB0aGUgc3RyaW5nIHlpZWxkcyBhIHZhbGlkIHZhbHVlIGZvciBAYSB2LCBAYSB2IGlzIHNldC4KKyAgICAgICAqICBPdGhlcndpc2UsIHNldHMgZXJyIHRvIGlvc19iYXNlOjpmYWlsYml0IGFuZCBsZWF2ZXMgQGEgdiB1bmFsdGVyZWQuCisgICAgICAgKiAgU2V0cyBlcnIgdG8gaW9zX2Jhc2U6OmVvZmJpdCBpZiB0aGUgc3RyZWFtIGlzIGVtcHRpZWQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgaW4gIFN0YXJ0IG9mIGlucHV0IHN0cmVhbS4KKyAgICAgICAqICBAcGFyYW0gIGVuZCAgRW5kIG9mIGlucHV0IHN0cmVhbS4KKyAgICAgICAqICBAcGFyYW0gIGlvICBTb3VyY2Ugb2YgbG9jYWxlIGFuZCBmbGFncy4KKyAgICAgICAqICBAcGFyYW0gIGVyciAgRXJyb3IgZmxhZ3MgdG8gc2V0LgorICAgICAgICogIEBwYXJhbSAgdiAgVmFsdWUgdG8gZm9ybWF0IGFuZCBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgYWZ0ZXIgcmVhZGluZy4KKyAgICAgICovCisgICAgICBpdGVyX3R5cGUKKyAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKKwkgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxvYXQmIF9fdikgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KKworICAgICAgaXRlcl90eXBlCisgICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRvdWJsZSYgX192KSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQorCisgICAgICBpdGVyX3R5cGUKKyAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKKwkgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdikgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KKyAgICAgIC8vQH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBOdW1lcmljIHBhcnNpbmcuCisgICAgICAgKgorICAgICAgICogIFBhcnNlcyB0aGUgaW5wdXQgc3RyZWFtIGludG8gdGhlIHBvaW50ZXIgdmFyaWFibGUgQGEgdi4gIEl0IGRvZXMgc28KKyAgICAgICAqICBieSBjYWxsaW5nIG51bV9nZXQ6OmRvX2dldCgpLgorICAgICAgICoKKyAgICAgICAqICBUaGUgaW5wdXQgY2hhcmFjdGVycyBhcmUgcGFyc2VkIGxpa2UgdGhlIHNjYW5mICVwIHNwZWNpZmllci4KKyAgICAgICAqCisgICAgICAgKiAgRGlnaXQgZ3JvdXBpbmcgaXMgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIG51bXB1bmN0Ojpncm91cGluZygpIGFuZAorICAgICAgICogIG51bXB1bmN0Ojp0aG91c2FuZHNfc2VwKCkuICBJZiB0aGUgcGF0dGVybiBvZiBkaWdpdCBncm91cHMgaXNuJ3QKKyAgICAgICAqICBjb25zaXN0ZW50LCBzZXRzIGVyciB0byBpb3NfYmFzZTo6ZmFpbGJpdC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZSB0aGF0IHRoZSBkaWdpdCBncm91cGluZyBlZmZlY3QgZm9yIHBvaW50ZXJzIGlzIGEgYml0IGFtYmlndW91cworICAgICAgICogIGluIHRoZSBzdGFuZGFyZCBhbmQgc2hvdWxkbid0IGJlIHJlbGllZCBvbi4gIFNlZSBEUiAzNDQuCisgICAgICAgKgorICAgICAgICogIElmIHBhcnNpbmcgdGhlIHN0cmluZyB5aWVsZHMgYSB2YWxpZCB2YWx1ZSBmb3IgQGEgdiwgQGEgdiBpcyBzZXQuCisgICAgICAgKiAgT3RoZXJ3aXNlLCBzZXRzIGVyciB0byBpb3NfYmFzZTo6ZmFpbGJpdCBhbmQgbGVhdmVzIEBhIHYgdW5hbHRlcmVkLgorICAgICAgICogIFNldHMgZXJyIHRvIGlvc19iYXNlOjplb2ZiaXQgaWYgdGhlIHN0cmVhbSBpcyBlbXB0aWVkLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIGluICBTdGFydCBvZiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiAgQHBhcmFtICBlbmQgIEVuZCBvZiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiAgQHBhcmFtICBpbyAgU291cmNlIG9mIGxvY2FsZSBhbmQgZmxhZ3MuCisgICAgICAgKiAgQHBhcmFtICBlcnIgIEVycm9yIGZsYWdzIHRvIHNldC4KKyAgICAgICAqICBAcGFyYW0gIHYgIFZhbHVlIHRvIGZvcm1hdCBhbmQgaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIGFmdGVyIHJlYWRpbmcuCisgICAgICAqLworICAgICAgaXRlcl90eXBlCisgICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHZvaWQqJiBfX3YpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvLy8gRGVzdHJ1Y3Rvci4KKyAgICAgIHZpcnR1YWwgfm51bV9nZXQoKSB7IH0KKworICAgICAgaXRlcl90eXBlCisgICAgICBfTV9leHRyYWN0X2Zsb2F0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwKKwkJICAgICAgIHN0cmluZyYpIGNvbnN0OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgorICAgICAgICBpdGVyX3R5cGUKKyAgICAgICAgX01fZXh0cmFjdF9pbnQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLAorCQkgICAgICAgX1ZhbHVlVCYpIGNvbnN0OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQyPgorICAgICAgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2NoYXI8X0NoYXJUMj46Ol9fdmFsdWUsIGludD46Ol9fdHlwZQorICAgICAgICBfTV9maW5kKGNvbnN0IF9DaGFyVDIqLCBzaXplX3QgX19sZW4sIF9DaGFyVDIgX19jKSBjb25zdAorICAgICAgICB7CisJICBpbnQgX19yZXQgPSAtMTsKKwkgIGlmIChfX2xlbiA8PSAxMCkKKwkgICAgeworCSAgICAgIGlmIChfX2MgPj0gX0NoYXJUMignMCcpICYmIF9fYyA8IF9DaGFyVDIoX0NoYXJUMignMCcpICsgX19sZW4pKQorCQlfX3JldCA9IF9fYyAtIF9DaGFyVDIoJzAnKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgaWYgKF9fYyA+PSBfQ2hhclQyKCcwJykgJiYgX19jIDw9IF9DaGFyVDIoJzknKSkKKwkJX19yZXQgPSBfX2MgLSBfQ2hhclQyKCcwJyk7CisJICAgICAgZWxzZSBpZiAoX19jID49IF9DaGFyVDIoJ2EnKSAmJiBfX2MgPD0gX0NoYXJUMignZicpKQorCQlfX3JldCA9IDEwICsgKF9fYyAtIF9DaGFyVDIoJ2EnKSk7CisJICAgICAgZWxzZSBpZiAoX19jID49IF9DaGFyVDIoJ0EnKSAmJiBfX2MgPD0gX0NoYXJUMignRicpKQorCQlfX3JldCA9IDEwICsgKF9fYyAtIF9DaGFyVDIoJ0EnKSk7CisJICAgIH0KKwkgIHJldHVybiBfX3JldDsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVDI+CisgICAgICB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPCFfX2lzX2NoYXI8X0NoYXJUMj46Ol9fdmFsdWUsIAorCQkJCSAgICAgIGludD46Ol9fdHlwZQorICAgICAgICBfTV9maW5kKGNvbnN0IF9DaGFyVDIqIF9femVybywgc2l6ZV90IF9fbGVuLCBfQ2hhclQyIF9fYykgY29uc3QKKyAgICAgICAgeworCSAgaW50IF9fcmV0ID0gLTE7CisJICBjb25zdCBjaGFyX3R5cGUqIF9fcSA9IGNoYXJfdHJhaXRzPF9DaGFyVDI+OjpmaW5kKF9femVybywgX19sZW4sIF9fYyk7CisJICBpZiAoX19xKQorCSAgICB7CisJICAgICAgX19yZXQgPSBfX3EgLSBfX3plcm87CisJICAgICAgaWYgKF9fcmV0ID4gMTUpCisJCV9fcmV0IC09IDY7CisJICAgIH0KKwkgIHJldHVybiBfX3JldDsKKwl9CisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTnVtZXJpYyBwYXJzaW5nLgorICAgICAgICoKKyAgICAgICAqICBQYXJzZXMgdGhlIGlucHV0IHN0cmVhbSBpbnRvIHRoZSB2YXJpYWJsZSBAYSB2LiAgVGhpcyBmdW5jdGlvbiBpcyBhCisgICAgICAgKiAgaG9vayBmb3IgZGVyaXZlZCBjbGFzc2VzIHRvIGNoYW5nZSB0aGUgdmFsdWUgcmV0dXJuZWQuICBAc2VlIGdldCgpCisgICAgICAgKiAgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBpbiAgU3RhcnQgb2YgaW5wdXQgc3RyZWFtLgorICAgICAgICogIEBwYXJhbSAgZW5kICBFbmQgb2YgaW5wdXQgc3RyZWFtLgorICAgICAgICogIEBwYXJhbSAgaW8gIFNvdXJjZSBvZiBsb2NhbGUgYW5kIGZsYWdzLgorICAgICAgICogIEBwYXJhbSAgZXJyICBFcnJvciBmbGFncyB0byBzZXQuCisgICAgICAgKiAgQHBhcmFtICB2ICBWYWx1ZSB0byBmb3JtYXQgYW5kIGluc2VydC4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciBhZnRlciByZWFkaW5nLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBib29sJikgY29uc3Q7CisKKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorCSAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nJiBfX3YpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CisKKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorCSAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQorCisgICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQorICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKKwkgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CisKKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorCSAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nJiBfX3YpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfTE9OR19MT05HCisgICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQorICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKKwkgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBsb25nJiBfX3YpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CQorCisgICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQorICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKKwkgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyBsb25nJiBfX3YpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CisjZW5kaWYKKworICAgICAgdmlydHVhbCBpdGVyX3R5cGUKKyAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisJICAgICBmbG9hdCYpIGNvbnN0OworCisgICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQorICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKwkgICAgIGRvdWJsZSYpIGNvbnN0OworCisgICAgICAvLyBYWFggR0xJQkNYWF9BQkkgRGVwcmVjYXRlZAorI2lmIGRlZmluZWQgX0dMSUJDWFhfTE9OR19ET1VCTEVfQ09NUEFUICYmIGRlZmluZWQgX19MT05HX0RPVUJMRV8xMjhfXworICAgICAgdmlydHVhbCBpdGVyX3R5cGUKKyAgICAgIF9fZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKwkgICAgICAgZG91YmxlJikgY29uc3Q7CisjZWxzZQorICAgICAgdmlydHVhbCBpdGVyX3R5cGUKKyAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisJICAgICBsb25nIGRvdWJsZSYpIGNvbnN0OworI2VuZGlmCisKKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorCSAgICAgdm9pZComKSBjb25zdDsKKworICAgICAgLy8gWFhYIEdMSUJDWFhfQUJJIERlcHJlY2F0ZWQKKyNpZiBkZWZpbmVkIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVCAmJiBkZWZpbmVkIF9fTE9OR19ET1VCTEVfMTI4X18KKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorCSAgICAgbG9uZyBkb3VibGUmKSBjb25zdDsKKyNlbmRpZgorICAgICAgLy9AfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgorICAgIGxvY2FsZTo6aWQgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjppZDsKKworCisgIC8qKgorICAgKiAgQGJyaWVmICBQcmltYXJ5IGNsYXNzIHRlbXBsYXRlIG51bV9wdXQuCisgICAqICBAaW5ncm91cCBsb2NhbGVzCisgICAqCisgICAqICBUaGlzIGZhY2V0IGVuY2Fwc3VsYXRlcyB0aGUgY29kZSB0byBjb252ZXJ0IGEgbnVtYmVyIHRvIGEgc3RyaW5nLiAgSXQgaXMKKyAgICogIHVzZWQgYnkgdGhlIG9zdHJlYW0gbnVtZXJpYyBpbnNlcnRpb24gb3BlcmF0b3JzLgorICAgKgorICAgKiAgVGhlIG51bV9wdXQgdGVtcGxhdGUgdXNlcyBwcm90ZWN0ZWQgdmlydHVhbCBmdW5jdGlvbnMgdG8gcHJvdmlkZSB0aGUKKyAgICogIGFjdHVhbCByZXN1bHRzLiAgVGhlIHB1YmxpYyBhY2Nlc3NvcnMgZm9yd2FyZCB0aGUgY2FsbCB0byB0aGUgdmlydHVhbAorICAgKiAgZnVuY3Rpb25zLiAgVGhlc2UgdmlydHVhbCBmdW5jdGlvbnMgYXJlIGhvb2tzIGZvciBkZXZlbG9wZXJzIHRvCisgICAqICBpbXBsZW1lbnQgdGhlIGJlaGF2aW9yIHRoZXkgcmVxdWlyZSBmcm9tIHRoZSBudW1fcHV0IGZhY2V0LgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgorICAgIGNsYXNzIG51bV9wdXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlczoKKyAgICAgIC8vQHsKKyAgICAgIC8vLyBQdWJsaWMgdHlwZWRlZnMKKyAgICAgIHR5cGVkZWYgX0NoYXJUCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIF9PdXRJdGVyCQlpdGVyX3R5cGU7CisgICAgICAvL0B9CisKKyAgICAgIC8vLyBOdW1wdW5jdCBmYWNldCBpZC4KKyAgICAgIHN0YXRpYyBsb2NhbGU6OmlkCQlpZDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3RvciBwZXJmb3JtcyBpbml0aWFsaXphdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyB0aGUgY29uc3RydWN0b3IgcHJvdmlkZWQgYnkgdGhlIHN0YW5kYXJkLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gcmVmcyAgUGFzc2VkIHRvIHRoZSBiYXNlIGZhY2V0IGNsYXNzLgorICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBudW1fcHV0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGZhY2V0KF9fcmVmcykgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTnVtZXJpYyBmb3JtYXR0aW5nLgorICAgICAgICoKKyAgICAgICAqICBGb3JtYXRzIHRoZSBib29sZWFuIEBhIHYgYW5kIGluc2VydHMgaXQgaW50byBhIHN0cmVhbS4gIEl0IGRvZXMgc28KKyAgICAgICAqICBieSBjYWxsaW5nIG51bV9wdXQ6OmRvX3B1dCgpLgorICAgICAgICoKKyAgICAgICAqICBJZiBpb3NfYmFzZTo6Ym9vbGFscGhhIGlzIHNldCwgd3JpdGVzIGN0eXBlPENoYXJUPjo6dHJ1ZW5hbWUoKSBvcgorICAgICAgICogIGN0eXBlPENoYXJUPjo6ZmFsc2VuYW1lKCkuICBPdGhlcndpc2UgZm9ybWF0cyBAYSB2IGFzIGFuIGludC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBzICBTdHJlYW0gdG8gd3JpdGUgdG8uCisgICAgICAgKiAgQHBhcmFtICBpbyAgU291cmNlIG9mIGxvY2FsZSBhbmQgZmxhZ3MuCisgICAgICAgKiAgQHBhcmFtICBmaWxsICBDaGFyX3R5cGUgdG8gdXNlIGZvciBmaWxsaW5nLgorICAgICAgICogIEBwYXJhbSAgdiAgVmFsdWUgdG8gZm9ybWF0IGFuZCBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgYWZ0ZXIgd3JpdGluZy4KKyAgICAgICovCisgICAgICBpdGVyX3R5cGUKKyAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTnVtZXJpYyBmb3JtYXR0aW5nLgorICAgICAgICoKKyAgICAgICAqICBGb3JtYXRzIHRoZSBpbnRlZ3JhbCB2YWx1ZSBAYSB2IGFuZCBpbnNlcnRzIGl0IGludG8gYQorICAgICAgICogIHN0cmVhbS4gIEl0IGRvZXMgc28gYnkgY2FsbGluZyBudW1fcHV0Ojpkb19wdXQoKS4KKyAgICAgICAqCisgICAgICAgKiAgRm9ybWF0dGluZyBpcyBhZmZlY3RlZCBieSB0aGUgZmxhZyBzZXR0aW5ncyBpbiBAYSBpby4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGJhc2ljIGZvcm1hdCBpcyBhZmZlY3RlZCBieSB0aGUgdmFsdWUgb2YgaW8uZmxhZ3MoKSAmCisgICAgICAgKiAgaW9zX2Jhc2U6OmJhc2VmaWVsZC4gIElmIGVxdWFsIHRvIGlvc19iYXNlOjpvY3QsIGZvcm1hdHMgbGlrZSB0aGUKKyAgICAgICAqICBwcmludGYgJW8gc3BlY2lmaWVyLiAgRWxzZSBpZiBlcXVhbCB0byBpb3NfYmFzZTo6aGV4LCBmb3JtYXRzIGxpa2UKKyAgICAgICAqICAleCBvciAlWCB3aXRoIGlvc19iYXNlOjp1cHBlcmNhc2UgdW5zZXQgb3Igc2V0IHJlc3BlY3RpdmVseS4KKyAgICAgICAqICBPdGhlcndpc2UsIGZvcm1hdHMgbGlrZSAlZCwgJWxkLCAlbGxkIGZvciBzaWduZWQgYW5kICV1LCAlbHUsICVsbHUKKyAgICAgICAqICBmb3IgdW5zaWduZWQgdmFsdWVzLiAgTm90ZSB0aGF0IGlmIGJvdGggb2N0IGFuZCBoZXggYXJlIHNldCwgbmVpdGhlcgorICAgICAgICogIHdpbGwgdGFrZSBlZmZlY3QuCisgICAgICAgKgorICAgICAgICogIElmIGlvc19iYXNlOjpzaG93cG9zIGlzIHNldCwgJysnIGlzIG91dHB1dCBiZWZvcmUgcG9zaXRpdmUgdmFsdWVzLgorICAgICAgICogIElmIGlvc19iYXNlOjpzaG93YmFzZSBpcyBzZXQsICcwJyBwcmVjZWRlcyBvY3RhbCB2YWx1ZXMgKGV4Y2VwdCAwKQorICAgICAgICogIGFuZCAnMFt4WF0nIHByZWNlZGVzIGhleCB2YWx1ZXMuCisgICAgICAgKgorICAgICAgICogIFRob3VzYW5kcyBzZXBhcmF0b3JzIGFyZSBpbnNlcnRlZCBhY2NvcmRpbmcgdG8gbnVtcHVuY3Q6Omdyb3VwaW5nKCkKKyAgICAgICAqICBhbmQgbnVtcHVuY3Q6OnRob3VzYW5kc19zZXAoKS4gIFRoZSBkZWNpbWFsIHBvaW50IGNoYXJhY3RlciB1c2VkIGlzCisgICAgICAgKiAgbnVtcHVuY3Q6OmRlY2ltYWxfcG9pbnQoKS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgaW8ud2lkdGgoKSBpcyBub24temVybywgZW5vdWdoIEBhIGZpbGwgY2hhcmFjdGVycyBhcmUgaW5zZXJ0ZWQgdG8KKyAgICAgICAqICBtYWtlIHRoZSByZXN1bHQgYXQgbGVhc3QgdGhhdCB3aWRlLiAgSWYKKyAgICAgICAqICAoaW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVsZCkgPT0gaW9zX2Jhc2U6OmxlZnQsIHJlc3VsdCBpcworICAgICAgICogIHBhZGRlZCBhdCB0aGUgZW5kLiAgSWYgaW9zX2Jhc2U6OmludGVybmFsLCB0aGVuIHBhZGRpbmcgb2NjdXJzCisgICAgICAgKiAgaW1tZWRpYXRlbHkgYWZ0ZXIgZWl0aGVyIGEgJysnIG9yICctJyBvciBhZnRlciAnMHgnIG9yICcwWCcuCisgICAgICAgKiAgT3RoZXJ3aXNlLCBwYWRkaW5nIG9jY3VycyBhdCB0aGUgYmVnaW5uaW5nLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIHMgIFN0cmVhbSB0byB3cml0ZSB0by4KKyAgICAgICAqICBAcGFyYW0gIGlvICBTb3VyY2Ugb2YgbG9jYWxlIGFuZCBmbGFncy4KKyAgICAgICAqICBAcGFyYW0gIGZpbGwgIENoYXJfdHlwZSB0byB1c2UgZm9yIGZpbGxpbmcuCisgICAgICAgKiAgQHBhcmFtICB2ICBWYWx1ZSB0byBmb3JtYXQgYW5kIGluc2VydC4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciBhZnRlciB3cml0aW5nLgorICAgICAgKi8KKyAgICAgIGl0ZXJfdHlwZQorICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KKworICAgICAgaXRlcl90eXBlCisgICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKKwkgIHVuc2lnbmVkIGxvbmcgX192KSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KKworI2lmZGVmIF9HTElCQ1hYX1VTRV9MT05HX0xPTkcKKyAgICAgIGl0ZXJfdHlwZQorICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQorCisgICAgICBpdGVyX3R5cGUKKyAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAorCSAgdW5zaWduZWQgbG9uZyBsb25nIF9fdikgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CisjZW5kaWYKKyAgICAgIC8vQH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBOdW1lcmljIGZvcm1hdHRpbmcuCisgICAgICAgKgorICAgICAgICogIEZvcm1hdHMgdGhlIGZsb2F0aW5nIHBvaW50IHZhbHVlIEBhIHYgYW5kIGluc2VydHMgaXQgaW50byBhIHN0cmVhbS4KKyAgICAgICAqICBJdCBkb2VzIHNvIGJ5IGNhbGxpbmcgbnVtX3B1dDo6ZG9fcHV0KCkuCisgICAgICAgKgorICAgICAgICogIEZvcm1hdHRpbmcgaXMgYWZmZWN0ZWQgYnkgdGhlIGZsYWcgc2V0dGluZ3MgaW4gQGEgaW8uCisgICAgICAgKgorICAgICAgICogIFRoZSBiYXNpYyBmb3JtYXQgaXMgYWZmZWN0ZWQgYnkgdGhlIHZhbHVlIG9mIGlvLmZsYWdzKCkgJgorICAgICAgICogIGlvc19iYXNlOjpmbG9hdGZpZWxkLiAgSWYgZXF1YWwgdG8gaW9zX2Jhc2U6OmZpeGVkLCBmb3JtYXRzIGxpa2UgdGhlCisgICAgICAgKiAgcHJpbnRmICVmIHNwZWNpZmllci4gIEVsc2UgaWYgZXF1YWwgdG8gaW9zX2Jhc2U6OnNjaWVudGlmaWMsIGZvcm1hdHMKKyAgICAgICAqICBsaWtlICVlIG9yICVFIHdpdGggaW9zX2Jhc2U6OnVwcGVyY2FzZSB1bnNldCBvciBzZXQgcmVzcGVjdGl2ZWx5LgorICAgICAgICogIE90aGVyd2lzZSwgZm9ybWF0cyBsaWtlICVnIG9yICVHIGRlcGVuZGluZyBvbiB1cHBlcmNhc2UuICBOb3RlIHRoYXQKKyAgICAgICAqICBpZiBib3RoIGZpeGVkIGFuZCBzY2llbnRpZmljIGFyZSBzZXQsIHRoZSBlZmZlY3Qgd2lsbCBhbHNvIGJlIGxpa2UKKyAgICAgICAqICAlZyBvciAlRy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIG91dHB1dCBwcmVjaXNpb24gaXMgZ2l2ZW4gYnkgaW8ucHJlY2lzaW9uKCkuICBUaGlzIHByZWNpc2lvbiBpcworICAgICAgICogIGNhcHBlZCBhdCBudW1lcmljX2xpbWl0czo6ZGlnaXRzMTAgKyAyIChkaWZmZXJlbnQgZm9yIGRvdWJsZSBhbmQKKyAgICAgICAqICBsb25nIGRvdWJsZSkuICBUaGUgZGVmYXVsdCBwcmVjaXNpb24gaXMgNi4KKyAgICAgICAqCisgICAgICAgKiAgSWYgaW9zX2Jhc2U6OnNob3dwb3MgaXMgc2V0LCAnKycgaXMgb3V0cHV0IGJlZm9yZSBwb3NpdGl2ZSB2YWx1ZXMuCisgICAgICAgKiAgSWYgaW9zX2Jhc2U6OnNob3dwb2ludCBpcyBzZXQsIGEgZGVjaW1hbCBwb2ludCB3aWxsIGFsd2F5cyBiZQorICAgICAgICogIG91dHB1dC4KKyAgICAgICAqCisgICAgICAgKiAgVGhvdXNhbmRzIHNlcGFyYXRvcnMgYXJlIGluc2VydGVkIGFjY29yZGluZyB0byBudW1wdW5jdDo6Z3JvdXBpbmcoKQorICAgICAgICogIGFuZCBudW1wdW5jdDo6dGhvdXNhbmRzX3NlcCgpLiAgVGhlIGRlY2ltYWwgcG9pbnQgY2hhcmFjdGVyIHVzZWQgaXMKKyAgICAgICAqICBudW1wdW5jdDo6ZGVjaW1hbF9wb2ludCgpLgorICAgICAgICoKKyAgICAgICAqICBJZiBpby53aWR0aCgpIGlzIG5vbi16ZXJvLCBlbm91Z2ggQGEgZmlsbCBjaGFyYWN0ZXJzIGFyZSBpbnNlcnRlZCB0bworICAgICAgICogIG1ha2UgdGhlIHJlc3VsdCBhdCBsZWFzdCB0aGF0IHdpZGUuICBJZgorICAgICAgICogIChpby5mbGFncygpICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKSA9PSBpb3NfYmFzZTo6bGVmdCwgcmVzdWx0IGlzCisgICAgICAgKiAgcGFkZGVkIGF0IHRoZSBlbmQuICBJZiBpb3NfYmFzZTo6aW50ZXJuYWwsIHRoZW4gcGFkZGluZyBvY2N1cnMKKyAgICAgICAqICBpbW1lZGlhdGVseSBhZnRlciBlaXRoZXIgYSAnKycgb3IgJy0nIG9yIGFmdGVyICcweCcgb3IgJzBYJy4KKyAgICAgICAqICBPdGhlcndpc2UsIHBhZGRpbmcgb2NjdXJzIGF0IHRoZSBiZWdpbm5pbmcuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgcyAgU3RyZWFtIHRvIHdyaXRlIHRvLgorICAgICAgICogIEBwYXJhbSAgaW8gIFNvdXJjZSBvZiBsb2NhbGUgYW5kIGZsYWdzLgorICAgICAgICogIEBwYXJhbSAgZmlsbCAgQ2hhcl90eXBlIHRvIHVzZSBmb3IgZmlsbGluZy4KKyAgICAgICAqICBAcGFyYW0gIHYgIFZhbHVlIHRvIGZvcm1hdCBhbmQgaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIGFmdGVyIHdyaXRpbmcuCisgICAgICAqLworICAgICAgaXRlcl90eXBlCisgICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CisKKyAgICAgIGl0ZXJfdHlwZQorICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCisJICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQorICAgICAgLy9AfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE51bWVyaWMgZm9ybWF0dGluZy4KKyAgICAgICAqCisgICAgICAgKiAgRm9ybWF0cyB0aGUgcG9pbnRlciB2YWx1ZSBAYSB2IGFuZCBpbnNlcnRzIGl0IGludG8gYSBzdHJlYW0uICBJdAorICAgICAgICogIGRvZXMgc28gYnkgY2FsbGluZyBudW1fcHV0Ojpkb19wdXQoKS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBmb3JtYXRzIEBhIHYgYXMgYW4gdW5zaWduZWQgbG9uZyB3aXRoIGlvc19iYXNlOjpoZXgKKyAgICAgICAqICBhbmQgaW9zX2Jhc2U6OnNob3diYXNlIHNldC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBzICBTdHJlYW0gdG8gd3JpdGUgdG8uCisgICAgICAgKiAgQHBhcmFtICBpbyAgU291cmNlIG9mIGxvY2FsZSBhbmQgZmxhZ3MuCisgICAgICAgKiAgQHBhcmFtICBmaWxsICBDaGFyX3R5cGUgdG8gdXNlIGZvciBmaWxsaW5nLgorICAgICAgICogIEBwYXJhbSAgdiAgVmFsdWUgdG8gZm9ybWF0IGFuZCBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgYWZ0ZXIgd3JpdGluZy4KKyAgICAgICovCisgICAgICBpdGVyX3R5cGUKKyAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAorCSAgY29uc3Qgdm9pZCogX192KSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CisgICAgICAgIGl0ZXJfdHlwZQorICAgICAgICBfTV9pbnNlcnRfZmxvYXQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKKwkJCWNoYXIgX19tb2QsIF9WYWx1ZVQgX192KSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgX01fZ3JvdXBfZmxvYXQoY29uc3QgY2hhciogX19ncm91cGluZywgc2l6ZV90IF9fZ3JvdXBpbmdfc2l6ZSwKKwkJICAgICBjaGFyX3R5cGUgX19zZXAsIGNvbnN0IGNoYXJfdHlwZSogX19wLCBjaGFyX3R5cGUqIF9fbmV3LAorCQkgICAgIGNoYXJfdHlwZSogX19jcywgaW50JiBfX2xlbikgY29uc3Q7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CisgICAgICAgIGl0ZXJfdHlwZQorICAgICAgICBfTV9pbnNlcnRfaW50KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCisJCSAgICAgIF9WYWx1ZVQgX192KSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgX01fZ3JvdXBfaW50KGNvbnN0IGNoYXIqIF9fZ3JvdXBpbmcsIHNpemVfdCBfX2dyb3VwaW5nX3NpemUsCisJCSAgIGNoYXJfdHlwZSBfX3NlcCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSogX19uZXcsCisJCSAgIGNoYXJfdHlwZSogX19jcywgaW50JiBfX2xlbikgY29uc3Q7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3BhZChjaGFyX3R5cGUgX19maWxsLCBzdHJlYW1zaXplIF9fdywgaW9zX2Jhc2UmIF9faW8sCisJICAgICBjaGFyX3R5cGUqIF9fbmV3LCBjb25zdCBjaGFyX3R5cGUqIF9fY3MsIGludCYgX19sZW4pIGNvbnN0OworCisgICAgICAvLy8gRGVzdHJ1Y3Rvci4KKyAgICAgIHZpcnR1YWwKKyAgICAgIH5udW1fcHV0KCkgeyB9OworCisgICAgICAvL0B7CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE51bWVyaWMgZm9ybWF0dGluZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlc2UgZnVuY3Rpb25zIGRvIHRoZSB3b3JrIG9mIGZvcm1hdHRpbmcgbnVtZXJpYyB2YWx1ZXMgYW5kCisgICAgICAgKiAgaW5zZXJ0aW5nIHRoZW0gaW50byBhIHN0cmVhbS4gVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sgZm9yIGRlcml2ZWQKKyAgICAgICAqICBjbGFzc2VzIHRvIGNoYW5nZSB0aGUgdmFsdWUgcmV0dXJuZWQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgcyAgU3RyZWFtIHRvIHdyaXRlIHRvLgorICAgICAgICogIEBwYXJhbSAgaW8gIFNvdXJjZSBvZiBsb2NhbGUgYW5kIGZsYWdzLgorICAgICAgICogIEBwYXJhbSAgZmlsbCAgQ2hhcl90eXBlIHRvIHVzZSBmb3IgZmlsbGluZy4KKyAgICAgICAqICBAcGFyYW0gIHYgIFZhbHVlIHRvIGZvcm1hdCBhbmQgaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIGFmdGVyIHdyaXRpbmcuCisgICAgICAqLworICAgICAgdmlydHVhbCBpdGVyX3R5cGUKKyAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0OworCisgICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQorICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2luc2VydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fdik7IH0JCisKKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCisJICAgICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2luc2VydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fdik7IH0KKworI2lmZGVmIF9HTElCQ1hYX1VTRV9MT05HX0xPTkcKKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCisJICAgICBsb25nIGxvbmcgX192KSBjb25zdAorICAgICAgeyByZXR1cm4gX01faW5zZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgX192KTsgfQorCisgICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQorICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAorCSAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2luc2VydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fdik7IH0KKyNlbmRpZgorCisgICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQorICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25zdDsKKworICAgICAgLy8gWFhYIEdMSUJDWFhfQUJJIERlcHJlY2F0ZWQKKyNpZiBkZWZpbmVkIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVCAmJiBkZWZpbmVkIF9fTE9OR19ET1VCTEVfMTI4X18KKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBfX2RvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3Q7CisjZWxzZQorICAgICAgdmlydHVhbCBpdGVyX3R5cGUKKyAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX192KSBjb25zdDsKKyNlbmRpZgorCisgICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQorICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB2b2lkKiBfX3YpIGNvbnN0OworCisgICAgICAvLyBYWFggR0xJQkNYWF9BQkkgRGVwcmVjYXRlZAorI2lmIGRlZmluZWQgX0dMSUJDWFhfTE9OR19ET1VCTEVfQ09NUEFUICYmIGRlZmluZWQgX19MT05HX0RPVUJMRV8xMjhfXworICAgICAgdmlydHVhbCBpdGVyX3R5cGUKKyAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX192KSBjb25zdDsKKyNlbmRpZgorICAgICAgLy9AfQorICAgIH07CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CisgICAgbG9jYWxlOjppZCBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjppZDsKKworX0dMSUJDWFhfRU5EX0xEQkxfTkFNRVNQQUNFCisKKyAgLy8gU3ViY2xhdXNlIGNvbnZlbmllbmNlIGludGVyZmFjZXMsIGlubGluZXMuCisgIC8vIE5COiBUaGVzZSBhcmUgaW5saW5lIGJlY2F1c2UsIHdoZW4gdXNlZCBpbiBhIGxvb3AsIHNvbWUgY29tcGlsZXJzCisgIC8vIGNhbiBob2lzdCB0aGUgYm9keSBvdXQgb2YgdGhlIGxvb3A7IHRoZW4gaXQncyBqdXN0IGFzIGZhc3QgYXMgdGhlCisgIC8vIEMgaXMqKCkgZnVuY3Rpb24uCisKKyAgLy8vIENvbnZlbmllbmNlIGludGVyZmFjZSB0byBjdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGlubGluZSBib29sCisgICAgaXNzcGFjZShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQorICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOyB9CisKKyAgLy8vIENvbnZlbmllbmNlIGludGVyZmFjZSB0byBjdHlwZS5pcyhjdHlwZV9iYXNlOjpwcmludCwgX19jKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGlubGluZSBib29sCisgICAgaXNwcmludChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQorICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnByaW50LCBfX2MpOyB9CisKKyAgLy8vIENvbnZlbmllbmNlIGludGVyZmFjZSB0byBjdHlwZS5pcyhjdHlwZV9iYXNlOjpjbnRybCwgX19jKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGlubGluZSBib29sCisgICAgaXNjbnRybChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQorICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmNudHJsLCBfX2MpOyB9CisKKyAgLy8vIENvbnZlbmllbmNlIGludGVyZmFjZSB0byBjdHlwZS5pcyhjdHlwZV9iYXNlOjp1cHBlciwgX19jKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGlubGluZSBib29sCisgICAgaXN1cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQorICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnVwcGVyLCBfX2MpOyB9CisKKyAgLy8vIENvbnZlbmllbmNlIGludGVyZmFjZSB0byBjdHlwZS5pcyhjdHlwZV9iYXNlOjpsb3dlciwgX19jKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGlubGluZSBib29sIAorICAgIGlzbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKKyAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpsb3dlciwgX19jKTsgfQorCisgIC8vLyBDb252ZW5pZW5jZSBpbnRlcmZhY2UgdG8gY3R5cGUuaXMoY3R5cGVfYmFzZTo6YWxwaGEsIF9fYykuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBpbmxpbmUgYm9vbAorICAgIGlzYWxwaGEoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKKyAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbHBoYSwgX19jKTsgfQorCisgIC8vLyBDb252ZW5pZW5jZSBpbnRlcmZhY2UgdG8gY3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYykuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBpbmxpbmUgYm9vbAorICAgIGlzZGlnaXQoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKKyAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKTsgfQorCisgIC8vLyBDb252ZW5pZW5jZSBpbnRlcmZhY2UgdG8gY3R5cGUuaXMoY3R5cGVfYmFzZTo6cHVuY3QsIF9fYykuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBpbmxpbmUgYm9vbAorICAgIGlzcHVuY3QoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKKyAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpwdW5jdCwgX19jKTsgfQorCisgIC8vLyBDb252ZW5pZW5jZSBpbnRlcmZhY2UgdG8gY3R5cGUuaXMoY3R5cGVfYmFzZTo6eGRpZ2l0LCBfX2MpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgaW5saW5lIGJvb2wKKyAgICBpc3hkaWdpdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQorICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnhkaWdpdCwgX19jKTsgfQorCisgIC8vLyBDb252ZW5pZW5jZSBpbnRlcmZhY2UgdG8gY3R5cGUuaXMoY3R5cGVfYmFzZTo6YWxudW0sIF9fYykuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBpbmxpbmUgYm9vbAorICAgIGlzYWxudW0oX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKKyAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbG51bSwgX19jKTsgfQorCisgIC8vLyBDb252ZW5pZW5jZSBpbnRlcmZhY2UgdG8gY3R5cGUuaXMoY3R5cGVfYmFzZTo6Z3JhcGgsIF9fYykuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBpbmxpbmUgYm9vbAorICAgIGlzZ3JhcGgoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKKyAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpncmFwaCwgX19jKTsgfQorCisgIC8vLyBDb252ZW5pZW5jZSBpbnRlcmZhY2UgdG8gY3R5cGUudG91cHBlcihfX2MpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgaW5saW5lIF9DaGFyVAorICAgIHRvdXBwZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKKyAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS50b3VwcGVyKF9fYyk7IH0KKworICAvLy8gQ29udmVuaWVuY2UgaW50ZXJmYWNlIHRvIGN0eXBlLnRvbG93ZXIoX19jKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGlubGluZSBfQ2hhclQKKyAgICB0b2xvd2VyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCisgICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG9sb3dlcihfX2MpOyB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2lmbmRlZiBfR0xJQkNYWF9FWFBPUlRfVEVNUExBVEUKKyMgaW5jbHVkZSA8Yml0cy9sb2NhbGVfZmFjZXRzLnRjYz4KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjA4ZTJjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL2xvY2FsZV9mYWNldHMudGNjCkBAIC0wLDAgKzEsMTM2MCBAQAorLy8gTG9jYWxlIHN1cHBvcnQgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LAorLy8gMjAwNiwgMjAwNywgMjAwOCwgMjAwOQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGxvY2FsZV9mYWNldHMudGNjCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKyNpZm5kZWYgX0xPQ0FMRV9GQUNFVFNfVENDCisjZGVmaW5lIF9MT0NBTEVfRkFDRVRTX1RDQyAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvLyBSb3V0aW5lIHRvIGFjY2VzcyBhIGNhY2hlIGZvciB0aGUgZmFjZXQuICBJZiB0aGUgY2FjaGUgZGlkbid0CisgIC8vIGV4aXN0IGJlZm9yZSwgaXQgZ2V0cyBjb25zdHJ1Y3RlZCBvbiB0aGUgZmx5LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CisgICAgc3RydWN0IF9fdXNlX2NhY2hlCisgICAgeworICAgICAgY29uc3QgX0ZhY2V0KgorICAgICAgb3BlcmF0b3IoKSAoY29uc3QgbG9jYWxlJiBfX2xvYykgY29uc3Q7CisgICAgfTsKKworICAvLyBTcGVjaWFsaXphdGlvbnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBzdHJ1Y3QgX191c2VfY2FjaGU8X19udW1wdW5jdF9jYWNoZTxfQ2hhclQ+ID4KKyAgICB7CisgICAgICBjb25zdCBfX251bXB1bmN0X2NhY2hlPF9DaGFyVD4qCisgICAgICBvcGVyYXRvcigpIChjb25zdCBsb2NhbGUmIF9fbG9jKSBjb25zdAorICAgICAgeworCWNvbnN0IHNpemVfdCBfX2kgPSBudW1wdW5jdDxfQ2hhclQ+OjppZC5fTV9pZCgpOworCWNvbnN0IGxvY2FsZTo6ZmFjZXQqKiBfX2NhY2hlcyA9IF9fbG9jLl9NX2ltcGwtPl9NX2NhY2hlczsKKwlpZiAoIV9fY2FjaGVzW19faV0pCisJICB7CisJICAgIF9fbnVtcHVuY3RfY2FjaGU8X0NoYXJUPiogX190bXAgPSBOVUxMOworCSAgICBfX3RyeQorCSAgICAgIHsKKwkJX190bXAgPSBuZXcgX19udW1wdW5jdF9jYWNoZTxfQ2hhclQ+OworCQlfX3RtcC0+X01fY2FjaGUoX19sb2MpOworCSAgICAgIH0KKwkgICAgX19jYXRjaCguLi4pCisJICAgICAgeworCQlkZWxldGUgX190bXA7CisJCV9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICAgIH0KKwkgICAgX19sb2MuX01faW1wbC0+X01faW5zdGFsbF9jYWNoZShfX3RtcCwgX19pKTsKKwkgIH0KKwlyZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgX19udW1wdW5jdF9jYWNoZTxfQ2hhclQ+Kj4oX19jYWNoZXNbX19pXSk7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgdm9pZAorICAgIF9fbnVtcHVuY3RfY2FjaGU8X0NoYXJUPjo6X01fY2FjaGUoY29uc3QgbG9jYWxlJiBfX2xvYykKKyAgICB7CisgICAgICBfTV9hbGxvY2F0ZWQgPSB0cnVlOworCisgICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CisKKyAgICAgIGNoYXIqIF9fZ3JvdXBpbmcgPSAwOworICAgICAgX0NoYXJUKiBfX3RydWVuYW1lID0gMDsKKyAgICAgIF9DaGFyVCogX19mYWxzZW5hbWUgPSAwOworICAgICAgX190cnkKKwl7CisJICBfTV9ncm91cGluZ19zaXplID0gX19ucC5ncm91cGluZygpLnNpemUoKTsKKwkgIF9fZ3JvdXBpbmcgPSBuZXcgY2hhcltfTV9ncm91cGluZ19zaXplXTsKKwkgIF9fbnAuZ3JvdXBpbmcoKS5jb3B5KF9fZ3JvdXBpbmcsIF9NX2dyb3VwaW5nX3NpemUpOworCSAgX01fZ3JvdXBpbmcgPSBfX2dyb3VwaW5nOworCSAgX01fdXNlX2dyb3VwaW5nID0gKF9NX2dyb3VwaW5nX3NpemUKKwkJCSAgICAgJiYgc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KF9NX2dyb3VwaW5nWzBdKSA+IDAKKwkJCSAgICAgJiYgKF9NX2dyb3VwaW5nWzBdCisJCQkJICE9IF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxjaGFyPjo6X19tYXgpKTsKKworCSAgX01fdHJ1ZW5hbWVfc2l6ZSA9IF9fbnAudHJ1ZW5hbWUoKS5zaXplKCk7CisJICBfX3RydWVuYW1lID0gbmV3IF9DaGFyVFtfTV90cnVlbmFtZV9zaXplXTsKKwkgIF9fbnAudHJ1ZW5hbWUoKS5jb3B5KF9fdHJ1ZW5hbWUsIF9NX3RydWVuYW1lX3NpemUpOworCSAgX01fdHJ1ZW5hbWUgPSBfX3RydWVuYW1lOworCisJICBfTV9mYWxzZW5hbWVfc2l6ZSA9IF9fbnAuZmFsc2VuYW1lKCkuc2l6ZSgpOworCSAgX19mYWxzZW5hbWUgPSBuZXcgX0NoYXJUW19NX2ZhbHNlbmFtZV9zaXplXTsKKwkgIF9fbnAuZmFsc2VuYW1lKCkuY29weShfX2ZhbHNlbmFtZSwgX01fZmFsc2VuYW1lX3NpemUpOworCSAgX01fZmFsc2VuYW1lID0gX19mYWxzZW5hbWU7CisKKwkgIF9NX2RlY2ltYWxfcG9pbnQgPSBfX25wLmRlY2ltYWxfcG9pbnQoKTsKKwkgIF9NX3Rob3VzYW5kc19zZXAgPSBfX25wLnRob3VzYW5kc19zZXAoKTsKKworCSAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdCA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOworCSAgX19jdC53aWRlbihfX251bV9iYXNlOjpfU19hdG9tc19vdXQsCisJCSAgICAgX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0CisJCSAgICAgKyBfX251bV9iYXNlOjpfU19vZW5kLCBfTV9hdG9tc19vdXQpOworCSAgX19jdC53aWRlbihfX251bV9iYXNlOjpfU19hdG9tc19pbiwKKwkJICAgICBfX251bV9iYXNlOjpfU19hdG9tc19pbgorCQkgICAgICsgX19udW1fYmFzZTo6X1NfaWVuZCwgX01fYXRvbXNfaW4pOworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIGRlbGV0ZSBbXSBfX2dyb3VwaW5nOworCSAgZGVsZXRlIFtdIF9fdHJ1ZW5hbWU7CisJICBkZWxldGUgW10gX19mYWxzZW5hbWU7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgfQorCisgIC8vIFVzZWQgYnkgYm90aCBudW1lcmljIGFuZCBtb25ldGFyeSBmYWNldHMuCisgIC8vIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBfX2dyb3VwaW5nX3RtcCBzdHJpbmcgY29uc3RydWN0ZWQgaW4KKyAgLy8gbW9uZXlfZ2V0IG9yIG51bV9nZXQgbWF0Y2hlcyB0aGUgY2Fub25pY2FsIGdyb3VwaW5nIGZvciBhIGdpdmVuCisgIC8vIGxvY2FsZS4KKyAgLy8gX19ncm91cGluZ190bXAgaXMgcGFyc2VkIEwgdG8gUgorICAvLyAxLDIyMiw0NDQgPT0gX19ncm91cGluZ190bXAgb2YgIlwxXDNcMyIKKyAgLy8gX19ncm91cGluZyBpcyBwYXJzZWQgUiB0byBMCisgIC8vIDEsMjIyLDQ0NCA9PSBfX2dyb3VwaW5nIG9mICJcMyIgPT0gIlwzXDNcMyIKKyAgX0dMSUJDWFhfUFVSRSBib29sCisgIF9fdmVyaWZ5X2dyb3VwaW5nKGNvbnN0IGNoYXIqIF9fZ3JvdXBpbmcsIHNpemVfdCBfX2dyb3VwaW5nX3NpemUsCisJCSAgICBjb25zdCBzdHJpbmcmIF9fZ3JvdXBpbmdfdG1wKSB0aHJvdyAoKTsKKworX0dMSUJDWFhfQkVHSU5fTERCTF9OQU1FU1BBQ0UKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CisgICAgX0luSXRlcgorICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CisgICAgX01fZXh0cmFjdF9mbG9hdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKKwkJICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZyYgX194dHJjKSBjb25zdAorICAgIHsKKyAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPgkJCV9fdHJhaXRzX3R5cGU7CisgICAgICB0eXBlZGVmIF9fbnVtcHVuY3RfY2FjaGU8X0NoYXJUPiAgICAgICAgICAgICAgICAgIF9fY2FjaGVfdHlwZTsKKyAgICAgIF9fdXNlX2NhY2hlPF9fY2FjaGVfdHlwZT4gX191YzsKKyAgICAgIGNvbnN0IGxvY2FsZSYgX19sb2MgPSBfX2lvLl9NX2dldGxvYygpOworICAgICAgY29uc3QgX19jYWNoZV90eXBlKiBfX2xjID0gX191YyhfX2xvYyk7CisgICAgICBjb25zdCBfQ2hhclQqIF9fbGl0ID0gX19sYy0+X01fYXRvbXNfaW47CisgICAgICBjaGFyX3R5cGUgX19jID0gY2hhcl90eXBlKCk7CisKKyAgICAgIC8vIFRydWUgaWYgX19iZWcgYmVjb21lcyBlcXVhbCB0byBfX2VuZC4KKyAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19iZWcgPT0gX19lbmQ7CisKKyAgICAgIC8vIEZpcnN0IGNoZWNrIGZvciBzaWduLgorICAgICAgaWYgKCFfX3Rlc3Rlb2YpCisJeworCSAgX19jID0gKl9fYmVnOworCSAgY29uc3QgYm9vbCBfX3BsdXMgPSBfX2MgPT0gX19saXRbX19udW1fYmFzZTo6X1NfaXBsdXNdOworCSAgaWYgKChfX3BsdXMgfHwgX19jID09IF9fbGl0W19fbnVtX2Jhc2U6Ol9TX2ltaW51c10pCisJICAgICAgJiYgIShfX2xjLT5fTV91c2VfZ3JvdXBpbmcgJiYgX19jID09IF9fbGMtPl9NX3Rob3VzYW5kc19zZXApCisJICAgICAgJiYgIShfX2MgPT0gX19sYy0+X01fZGVjaW1hbF9wb2ludCkpCisJICAgIHsKKwkgICAgICBfX3h0cmMgKz0gX19wbHVzID8gJysnIDogJy0nOworCSAgICAgIGlmICgrK19fYmVnICE9IF9fZW5kKQorCQlfX2MgPSAqX19iZWc7CisJICAgICAgZWxzZQorCQlfX3Rlc3Rlb2YgPSB0cnVlOworCSAgICB9CisJfQorCisgICAgICAvLyBOZXh0LCBsb29rIGZvciBsZWFkaW5nIHplcm9zLgorICAgICAgYm9vbCBfX2ZvdW5kX21hbnRpc3NhID0gZmFsc2U7CisgICAgICBpbnQgX19zZXBfcG9zID0gMDsKKyAgICAgIHdoaWxlICghX190ZXN0ZW9mKQorCXsKKwkgIGlmICgoX19sYy0+X01fdXNlX2dyb3VwaW5nICYmIF9fYyA9PSBfX2xjLT5fTV90aG91c2FuZHNfc2VwKQorCSAgICAgIHx8IF9fYyA9PSBfX2xjLT5fTV9kZWNpbWFsX3BvaW50KQorCSAgICBicmVhazsKKwkgIGVsc2UgaWYgKF9fYyA9PSBfX2xpdFtfX251bV9iYXNlOjpfU19pemVyb10pCisJICAgIHsKKwkgICAgICBpZiAoIV9fZm91bmRfbWFudGlzc2EpCisJCXsKKwkJICBfX3h0cmMgKz0gJzAnOworCQkgIF9fZm91bmRfbWFudGlzc2EgPSB0cnVlOworCQl9CisJICAgICAgKytfX3NlcF9wb3M7CisKKwkgICAgICBpZiAoKytfX2JlZyAhPSBfX2VuZCkKKwkJX19jID0gKl9fYmVnOworCSAgICAgIGVsc2UKKwkJX190ZXN0ZW9mID0gdHJ1ZTsKKwkgICAgfQorCSAgZWxzZQorCSAgICBicmVhazsKKwl9CisKKyAgICAgIC8vIE9ubHkgbmVlZCBhY2NlcHRhYmxlIGRpZ2l0cyBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4KKyAgICAgIGJvb2wgX19mb3VuZF9kZWMgPSBmYWxzZTsKKyAgICAgIGJvb2wgX19mb3VuZF9zY2kgPSBmYWxzZTsKKyAgICAgIHN0cmluZyBfX2ZvdW5kX2dyb3VwaW5nOworICAgICAgaWYgKF9fbGMtPl9NX3VzZV9ncm91cGluZykKKwlfX2ZvdW5kX2dyb3VwaW5nLnJlc2VydmUoMzIpOworICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2xpdF96ZXJvID0gX19saXQgKyBfX251bV9iYXNlOjpfU19pemVybzsKKworICAgICAgaWYgKCFfX2xjLT5fTV9hbGxvY2F0ZWQpCisJLy8gIkMiIGxvY2FsZQorCXdoaWxlICghX190ZXN0ZW9mKQorCSAgeworCSAgICBjb25zdCBpbnQgX19kaWdpdCA9IF9NX2ZpbmQoX19saXRfemVybywgMTAsIF9fYyk7CisJICAgIGlmIChfX2RpZ2l0ICE9IC0xKQorCSAgICAgIHsKKwkJX194dHJjICs9ICcwJyArIF9fZGlnaXQ7CisJCV9fZm91bmRfbWFudGlzc2EgPSB0cnVlOworCSAgICAgIH0KKwkgICAgZWxzZSBpZiAoX19jID09IF9fbGMtPl9NX2RlY2ltYWxfcG9pbnQKKwkJICAgICAmJiAhX19mb3VuZF9kZWMgJiYgIV9fZm91bmRfc2NpKQorCSAgICAgIHsKKwkJX194dHJjICs9ICcuJzsKKwkJX19mb3VuZF9kZWMgPSB0cnVlOworCSAgICAgIH0KKwkgICAgZWxzZSBpZiAoKF9fYyA9PSBfX2xpdFtfX251bV9iYXNlOjpfU19pZV0gCisJCSAgICAgIHx8IF9fYyA9PSBfX2xpdFtfX251bV9iYXNlOjpfU19pRV0pCisJCSAgICAgJiYgIV9fZm91bmRfc2NpICYmIF9fZm91bmRfbWFudGlzc2EpCisJICAgICAgeworCQkvLyBTY2llbnRpZmljIG5vdGF0aW9uLgorCQlfX3h0cmMgKz0gJ2UnOworCQlfX2ZvdW5kX3NjaSA9IHRydWU7CisJCQorCQkvLyBSZW1vdmUgb3B0aW9uYWwgcGx1cyBvciBtaW51cyBzaWduLCBpZiB0aGV5IGV4aXN0LgorCQlpZiAoKytfX2JlZyAhPSBfX2VuZCkKKwkJICB7CisJCSAgICBfX2MgPSAqX19iZWc7CisJCSAgICBjb25zdCBib29sIF9fcGx1cyA9IF9fYyA9PSBfX2xpdFtfX251bV9iYXNlOjpfU19pcGx1c107CisJCSAgICBpZiAoX19wbHVzIHx8IF9fYyA9PSBfX2xpdFtfX251bV9iYXNlOjpfU19pbWludXNdKQorCQkgICAgICBfX3h0cmMgKz0gX19wbHVzID8gJysnIDogJy0nOworCQkgICAgZWxzZQorCQkgICAgICBjb250aW51ZTsKKwkJICB9CisJCWVsc2UKKwkJICB7CisJCSAgICBfX3Rlc3Rlb2YgPSB0cnVlOworCQkgICAgYnJlYWs7CisJCSAgfQorCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIGJyZWFrOworCisJICAgIGlmICgrK19fYmVnICE9IF9fZW5kKQorCSAgICAgIF9fYyA9ICpfX2JlZzsKKwkgICAgZWxzZQorCSAgICAgIF9fdGVzdGVvZiA9IHRydWU7CisJICB9CisgICAgICBlbHNlCisJd2hpbGUgKCFfX3Rlc3Rlb2YpCisJICB7CisJICAgIC8vIEFjY29yZGluZyB0byAyMi4yLjIuMS4yLCBwOC05LCBmaXJzdCBsb29rIGZvciB0aG91c2FuZHNfc2VwCisJICAgIC8vIGFuZCBkZWNpbWFsX3BvaW50LgorCSAgICBpZiAoX19sYy0+X01fdXNlX2dyb3VwaW5nICYmIF9fYyA9PSBfX2xjLT5fTV90aG91c2FuZHNfc2VwKQorCSAgICAgIHsKKwkJaWYgKCFfX2ZvdW5kX2RlYyAmJiAhX19mb3VuZF9zY2kpCisJCSAgeworCQkgICAgLy8gTkI6IFRob3VzYW5kcyBzZXBhcmF0b3IgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHN0cmluZworCQkgICAgLy8gaXMgYSBuby1ubywgYXMgaXMgdHdvIGNvbnNlY3V0aXZlIHRob3VzYW5kcyBzZXBhcmF0b3JzLgorCQkgICAgaWYgKF9fc2VwX3BvcykKKwkJICAgICAgeworCQkJX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOworCQkJX19zZXBfcG9zID0gMDsKKwkJICAgICAgfQorCQkgICAgZWxzZQorCQkgICAgICB7CisJCQkvLyBOQjogX19jb252ZXJ0X3RvX3Ygd2lsbCBub3QgYXNzaWduIF9fdiBhbmQgd2lsbAorCQkJLy8gc2V0IHRoZSBmYWlsYml0LgorCQkJX194dHJjLmNsZWFyKCk7CisJCQlicmVhazsKKwkJICAgICAgfQorCQkgIH0KKwkJZWxzZQorCQkgIGJyZWFrOworCSAgICAgIH0KKwkgICAgZWxzZSBpZiAoX19jID09IF9fbGMtPl9NX2RlY2ltYWxfcG9pbnQpCisJICAgICAgeworCQlpZiAoIV9fZm91bmRfZGVjICYmICFfX2ZvdW5kX3NjaSkKKwkJICB7CisJCSAgICAvLyBJZiBubyBncm91cGluZyBjaGFycyBhcmUgc2Vlbiwgbm8gZ3JvdXBpbmcgY2hlY2sKKwkJICAgIC8vIGlzIGFwcGxpZWQuIFRoZXJlZm9yZSBfX2ZvdW5kX2dyb3VwaW5nIGlzIGFkanVzdGVkCisJCSAgICAvLyBvbmx5IGlmIGRlY2ltYWxfcG9pbnQgY29tZXMgYWZ0ZXIgc29tZSB0aG91c2FuZHNfc2VwLgorCQkgICAgaWYgKF9fZm91bmRfZ3JvdXBpbmcuc2l6ZSgpKQorCQkgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CisJCSAgICBfX3h0cmMgKz0gJy4nOworCQkgICAgX19mb3VuZF9kZWMgPSB0cnVlOworCQkgIH0KKwkJZWxzZQorCQkgIGJyZWFrOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJY29uc3QgY2hhcl90eXBlKiBfX3EgPQorCQkgIF9fdHJhaXRzX3R5cGU6OmZpbmQoX19saXRfemVybywgMTAsIF9fYyk7CisJCWlmIChfX3EpCisJCSAgeworCQkgICAgX194dHJjICs9ICcwJyArIChfX3EgLSBfX2xpdF96ZXJvKTsKKwkJICAgIF9fZm91bmRfbWFudGlzc2EgPSB0cnVlOworCQkgICAgKytfX3NlcF9wb3M7CisJCSAgfQorCQllbHNlIGlmICgoX19jID09IF9fbGl0W19fbnVtX2Jhc2U6Ol9TX2llXSAKKwkJCSAgfHwgX19jID09IF9fbGl0W19fbnVtX2Jhc2U6Ol9TX2lFXSkKKwkJCSAmJiAhX19mb3VuZF9zY2kgJiYgX19mb3VuZF9tYW50aXNzYSkKKwkJICB7CisJCSAgICAvLyBTY2llbnRpZmljIG5vdGF0aW9uLgorCQkgICAgaWYgKF9fZm91bmRfZ3JvdXBpbmcuc2l6ZSgpICYmICFfX2ZvdW5kX2RlYykKKwkJICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOworCQkgICAgX194dHJjICs9ICdlJzsKKwkJICAgIF9fZm91bmRfc2NpID0gdHJ1ZTsKKwkJICAgIAorCQkgICAgLy8gUmVtb3ZlIG9wdGlvbmFsIHBsdXMgb3IgbWludXMgc2lnbiwgaWYgdGhleSBleGlzdC4KKwkJICAgIGlmICgrK19fYmVnICE9IF9fZW5kKQorCQkgICAgICB7CisJCQlfX2MgPSAqX19iZWc7CisJCQljb25zdCBib29sIF9fcGx1cyA9IF9fYyA9PSBfX2xpdFtfX251bV9iYXNlOjpfU19pcGx1c107CisJCQlpZiAoKF9fcGx1cyB8fCBfX2MgPT0gX19saXRbX19udW1fYmFzZTo6X1NfaW1pbnVzXSkKKwkJCSAgICAmJiAhKF9fbGMtPl9NX3VzZV9ncm91cGluZworCQkJCSAmJiBfX2MgPT0gX19sYy0+X01fdGhvdXNhbmRzX3NlcCkKKwkJCSAgICAmJiAhKF9fYyA9PSBfX2xjLT5fTV9kZWNpbWFsX3BvaW50KSkKKwkJICAgICAgX194dHJjICs9IF9fcGx1cyA/ICcrJyA6ICctJzsKKwkJCWVsc2UKKwkJCSAgY29udGludWU7CisJCSAgICAgIH0KKwkJICAgIGVsc2UKKwkJICAgICAgeworCQkJX190ZXN0ZW9mID0gdHJ1ZTsKKwkJCWJyZWFrOworCQkgICAgICB9CisJCSAgfQorCQllbHNlCisJCSAgYnJlYWs7CisJICAgICAgfQorCSAgICAKKwkgICAgaWYgKCsrX19iZWcgIT0gX19lbmQpCisJICAgICAgX19jID0gKl9fYmVnOworCSAgICBlbHNlCisJICAgICAgX190ZXN0ZW9mID0gdHJ1ZTsKKwkgIH0KKworICAgICAgLy8gRGlnaXQgZ3JvdXBpbmcgaXMgY2hlY2tlZC4gSWYgZ3JvdXBpbmcgYW5kIGZvdW5kX2dyb3VwaW5nIGRvbid0CisgICAgICAvLyBtYXRjaCwgdGhlbiBnZXQgdmVyeSB2ZXJ5IHVwc2V0LCBhbmQgc2V0IGZhaWxiaXQuCisgICAgICBpZiAoX19mb3VuZF9ncm91cGluZy5zaXplKCkpCisgICAgICAgIHsKKyAgICAgICAgICAvLyBBZGQgdGhlIGVuZGluZyBncm91cGluZyBpZiBhIGRlY2ltYWwgb3IgJ2UnLydFJyB3YXNuJ3QgZm91bmQuCisJICBpZiAoIV9fZm91bmRfZGVjICYmICFfX2ZvdW5kX3NjaSkKKwkgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOworCisgICAgICAgICAgaWYgKCFzdGQ6Ol9fdmVyaWZ5X2dyb3VwaW5nKF9fbGMtPl9NX2dyb3VwaW5nLCAKKwkJCQkgICAgICBfX2xjLT5fTV9ncm91cGluZ19zaXplLAorCQkJCSAgICAgIF9fZm91bmRfZ3JvdXBpbmcpKQorCSAgICBfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0OworICAgICAgICB9CisKKyAgICAgIHJldHVybiBfX2JlZzsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CisgICAgICBfSW5JdGVyCisgICAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgorICAgICAgX01fZXh0cmFjdF9pbnQoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJCSAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBfVmFsdWVUJiBfX3YpIGNvbnN0CisgICAgICB7CisgICAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPgkJCSAgICAgX190cmFpdHNfdHlwZTsKKwl1c2luZyBfX2dudV9jeHg6Ol9fYWRkX3Vuc2lnbmVkOworCXR5cGVkZWYgdHlwZW5hbWUgX19hZGRfdW5zaWduZWQ8X1ZhbHVlVD46Ol9fdHlwZSBfX3Vuc2lnbmVkX3R5cGU7CisJdHlwZWRlZiBfX251bXB1bmN0X2NhY2hlPF9DaGFyVD4gICAgICAgICAgICAgICAgICAgICBfX2NhY2hlX3R5cGU7CisJX191c2VfY2FjaGU8X19jYWNoZV90eXBlPiBfX3VjOworCWNvbnN0IGxvY2FsZSYgX19sb2MgPSBfX2lvLl9NX2dldGxvYygpOworCWNvbnN0IF9fY2FjaGVfdHlwZSogX19sYyA9IF9fdWMoX19sb2MpOworCWNvbnN0IF9DaGFyVCogX19saXQgPSBfX2xjLT5fTV9hdG9tc19pbjsKKwljaGFyX3R5cGUgX19jID0gY2hhcl90eXBlKCk7CisKKwkvLyBOQjogSWZmIF9fYmFzZWZpZWxkID09IDAsIF9fYmFzZSBjYW4gY2hhbmdlIGJhc2VkIG9uIGNvbnRlbnRzLgorCWNvbnN0IGlvc19iYXNlOjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKKwljb25zdCBib29sIF9fb2N0ID0gX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6Om9jdDsKKwlpbnQgX19iYXNlID0gX19vY3QgPyA4IDogKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpoZXggPyAxNiA6IDEwKTsKKworCS8vIFRydWUgaWYgX19iZWcgYmVjb21lcyBlcXVhbCB0byBfX2VuZC4KKwlib29sIF9fdGVzdGVvZiA9IF9fYmVnID09IF9fZW5kOworCisJLy8gRmlyc3QgY2hlY2sgZm9yIHNpZ24uCisJYm9vbCBfX25lZ2F0aXZlID0gZmFsc2U7CisJaWYgKCFfX3Rlc3Rlb2YpCisJICB7CisJICAgIF9fYyA9ICpfX2JlZzsKKwkgICAgX19uZWdhdGl2ZSA9IF9fYyA9PSBfX2xpdFtfX251bV9iYXNlOjpfU19pbWludXNdOworCSAgICBpZiAoKF9fbmVnYXRpdmUgfHwgX19jID09IF9fbGl0W19fbnVtX2Jhc2U6Ol9TX2lwbHVzXSkKKwkJJiYgIShfX2xjLT5fTV91c2VfZ3JvdXBpbmcgJiYgX19jID09IF9fbGMtPl9NX3Rob3VzYW5kc19zZXApCisJCSYmICEoX19jID09IF9fbGMtPl9NX2RlY2ltYWxfcG9pbnQpKQorCSAgICAgIHsKKwkJaWYgKCsrX19iZWcgIT0gX19lbmQpCisJCSAgX19jID0gKl9fYmVnOworCQllbHNlCisJCSAgX190ZXN0ZW9mID0gdHJ1ZTsKKwkgICAgICB9CisJICB9CisKKwkvLyBOZXh0LCBsb29rIGZvciBsZWFkaW5nIHplcm9zIGFuZCBjaGVjayByZXF1aXJlZCBkaWdpdHMKKwkvLyBmb3IgYmFzZSBmb3JtYXRzLgorCWJvb2wgX19mb3VuZF96ZXJvID0gZmFsc2U7CisJaW50IF9fc2VwX3BvcyA9IDA7CisJd2hpbGUgKCFfX3Rlc3Rlb2YpCisJICB7CisJICAgIGlmICgoX19sYy0+X01fdXNlX2dyb3VwaW5nICYmIF9fYyA9PSBfX2xjLT5fTV90aG91c2FuZHNfc2VwKQorCQl8fCBfX2MgPT0gX19sYy0+X01fZGVjaW1hbF9wb2ludCkKKwkgICAgICBicmVhazsKKwkgICAgZWxzZSBpZiAoX19jID09IF9fbGl0W19fbnVtX2Jhc2U6Ol9TX2l6ZXJvXSAKKwkJICAgICAmJiAoIV9fZm91bmRfemVybyB8fCBfX2Jhc2UgPT0gMTApKQorCSAgICAgIHsKKwkJX19mb3VuZF96ZXJvID0gdHJ1ZTsKKwkJKytfX3NlcF9wb3M7CisJCWlmIChfX2Jhc2VmaWVsZCA9PSAwKQorCQkgIF9fYmFzZSA9IDg7CisJCWlmIChfX2Jhc2UgPT0gOCkKKwkJICBfX3NlcF9wb3MgPSAwOworCSAgICAgIH0KKwkgICAgZWxzZSBpZiAoX19mb3VuZF96ZXJvCisJCSAgICAgJiYgKF9fYyA9PSBfX2xpdFtfX251bV9iYXNlOjpfU19peF0KKwkJCSB8fCBfX2MgPT0gX19saXRbX19udW1fYmFzZTo6X1NfaVhdKSkKKwkgICAgICB7CisJCWlmIChfX2Jhc2VmaWVsZCA9PSAwKQorCQkgIF9fYmFzZSA9IDE2OworCQlpZiAoX19iYXNlID09IDE2KQorCQkgIHsKKwkJICAgIF9fZm91bmRfemVybyA9IGZhbHNlOworCQkgICAgX19zZXBfcG9zID0gMDsKKwkJICB9CisJCWVsc2UKKwkJICBicmVhazsKKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICBicmVhazsKKworCSAgICBpZiAoKytfX2JlZyAhPSBfX2VuZCkKKwkgICAgICB7CisJCV9fYyA9ICpfX2JlZzsKKwkJaWYgKCFfX2ZvdW5kX3plcm8pCisJCSAgYnJlYWs7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgX190ZXN0ZW9mID0gdHJ1ZTsKKwkgIH0KKwkKKwkvLyBBdCB0aGlzIHBvaW50LCBiYXNlIGlzIGRldGVybWluZWQuIElmIG5vdCBoZXgsIG9ubHkgYWxsb3cKKwkvLyBiYXNlIGRpZ2l0cyBhcyB2YWxpZCBpbnB1dC4KKwljb25zdCBzaXplX3QgX19sZW4gPSAoX19iYXNlID09IDE2ID8gX19udW1fYmFzZTo6X1NfaWVuZAorCQkJICAgICAgLSBfX251bV9iYXNlOjpfU19pemVybyA6IF9fYmFzZSk7CisKKwkvLyBFeHRyYWN0LgorCXN0cmluZyBfX2ZvdW5kX2dyb3VwaW5nOworCWlmIChfX2xjLT5fTV91c2VfZ3JvdXBpbmcpCisJICBfX2ZvdW5kX2dyb3VwaW5nLnJlc2VydmUoMzIpOworCWJvb2wgX190ZXN0ZmFpbCA9IGZhbHNlOworCWJvb2wgX190ZXN0b3ZlcmZsb3cgPSBmYWxzZTsKKwljb25zdCBfX3Vuc2lnbmVkX3R5cGUgX19tYXggPQorCSAgKF9fbmVnYXRpdmUgJiYgX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPF9WYWx1ZVQ+OjpfX2lzX3NpZ25lZCkKKwkgID8gLV9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxfVmFsdWVUPjo6X19taW4KKwkgIDogX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPF9WYWx1ZVQ+OjpfX21heDsKKwljb25zdCBfX3Vuc2lnbmVkX3R5cGUgX19zbWF4ID0gX19tYXggLyBfX2Jhc2U7CisJX191bnNpZ25lZF90eXBlIF9fcmVzdWx0ID0gMDsKKwlpbnQgX19kaWdpdCA9IDA7CisJY29uc3QgY2hhcl90eXBlKiBfX2xpdF96ZXJvID0gX19saXQgKyBfX251bV9iYXNlOjpfU19pemVybzsKKworCWlmICghX19sYy0+X01fYWxsb2NhdGVkKQorCSAgLy8gIkMiIGxvY2FsZQorCSAgd2hpbGUgKCFfX3Rlc3Rlb2YpCisJICAgIHsKKwkgICAgICBfX2RpZ2l0ID0gX01fZmluZChfX2xpdF96ZXJvLCBfX2xlbiwgX19jKTsKKwkgICAgICBpZiAoX19kaWdpdCA9PSAtMSkKKwkJYnJlYWs7CisJICAgICAgCisJICAgICAgaWYgKF9fcmVzdWx0ID4gX19zbWF4KQorCQlfX3Rlc3RvdmVyZmxvdyA9IHRydWU7CisJICAgICAgZWxzZQorCQl7CisJCSAgX19yZXN1bHQgKj0gX19iYXNlOworCQkgIF9fdGVzdG92ZXJmbG93IHw9IF9fcmVzdWx0ID4gX19tYXggLSBfX2RpZ2l0OworCQkgIF9fcmVzdWx0ICs9IF9fZGlnaXQ7CisJCSAgKytfX3NlcF9wb3M7CisJCX0KKwkgICAgICAKKwkgICAgICBpZiAoKytfX2JlZyAhPSBfX2VuZCkKKwkJX19jID0gKl9fYmVnOworCSAgICAgIGVsc2UKKwkJX190ZXN0ZW9mID0gdHJ1ZTsKKwkgICAgfQorCWVsc2UKKwkgIHdoaWxlICghX190ZXN0ZW9mKQorCSAgICB7CisJICAgICAgLy8gQWNjb3JkaW5nIHRvIDIyLjIuMi4xLjIsIHA4LTksIGZpcnN0IGxvb2sgZm9yIHRob3VzYW5kc19zZXAKKwkgICAgICAvLyBhbmQgZGVjaW1hbF9wb2ludC4KKwkgICAgICBpZiAoX19sYy0+X01fdXNlX2dyb3VwaW5nICYmIF9fYyA9PSBfX2xjLT5fTV90aG91c2FuZHNfc2VwKQorCQl7CisJCSAgLy8gTkI6IFRob3VzYW5kcyBzZXBhcmF0b3IgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHN0cmluZworCQkgIC8vIGlzIGEgbm8tbm8sIGFzIGlzIHR3byBjb25zZWN1dGl2ZSB0aG91c2FuZHMgc2VwYXJhdG9ycy4KKwkJICBpZiAoX19zZXBfcG9zKQorCQkgICAgeworCQkgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CisJCSAgICAgIF9fc2VwX3BvcyA9IDA7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBfX3Rlc3RmYWlsID0gdHJ1ZTsKKwkJICAgICAgYnJlYWs7CisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlIGlmIChfX2MgPT0gX19sYy0+X01fZGVjaW1hbF9wb2ludCkKKwkJYnJlYWs7CisJICAgICAgZWxzZQorCQl7CisJCSAgY29uc3QgY2hhcl90eXBlKiBfX3EgPQorCQkgICAgX190cmFpdHNfdHlwZTo6ZmluZChfX2xpdF96ZXJvLCBfX2xlbiwgX19jKTsKKwkJICBpZiAoIV9fcSkKKwkJICAgIGJyZWFrOworCQkgIAorCQkgIF9fZGlnaXQgPSBfX3EgLSBfX2xpdF96ZXJvOworCQkgIGlmIChfX2RpZ2l0ID4gMTUpCisJCSAgICBfX2RpZ2l0IC09IDY7CisJCSAgaWYgKF9fcmVzdWx0ID4gX19zbWF4KQorCQkgICAgX190ZXN0b3ZlcmZsb3cgPSB0cnVlOworCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgX19yZXN1bHQgKj0gX19iYXNlOworCQkgICAgICBfX3Rlc3RvdmVyZmxvdyB8PSBfX3Jlc3VsdCA+IF9fbWF4IC0gX19kaWdpdDsKKwkJICAgICAgX19yZXN1bHQgKz0gX19kaWdpdDsKKwkJICAgICAgKytfX3NlcF9wb3M7CisJCSAgICB9CisJCX0KKwkgICAgICAKKwkgICAgICBpZiAoKytfX2JlZyAhPSBfX2VuZCkKKwkJX19jID0gKl9fYmVnOworCSAgICAgIGVsc2UKKwkJX190ZXN0ZW9mID0gdHJ1ZTsKKwkgICAgfQorCQorCS8vIERpZ2l0IGdyb3VwaW5nIGlzIGNoZWNrZWQuIElmIGdyb3VwaW5nIGFuZCBmb3VuZF9ncm91cGluZyBkb24ndAorCS8vIG1hdGNoLCB0aGVuIGdldCB2ZXJ5IHZlcnkgdXBzZXQsIGFuZCBzZXQgZmFpbGJpdC4KKwlpZiAoX19mb3VuZF9ncm91cGluZy5zaXplKCkpCisJICB7CisJICAgIC8vIEFkZCB0aGUgZW5kaW5nIGdyb3VwaW5nLgorCSAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CisKKwkgICAgaWYgKCFzdGQ6Ol9fdmVyaWZ5X2dyb3VwaW5nKF9fbGMtPl9NX2dyb3VwaW5nLAorCQkJCQlfX2xjLT5fTV9ncm91cGluZ19zaXplLAorCQkJCQlfX2ZvdW5kX2dyb3VwaW5nKSkKKwkgICAgICBfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0OworCSAgfQorCisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDIzLiBOdW1fZ2V0IG92ZXJmbG93IHJlc3VsdC4KKwlpZiAoKCFfX3NlcF9wb3MgJiYgIV9fZm91bmRfemVybyAmJiAhX19mb3VuZF9ncm91cGluZy5zaXplKCkpCisJICAgIHx8IF9fdGVzdGZhaWwpCisJICB7CisJICAgIF9fdiA9IDA7CisJICAgIF9fZXJyID0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJICB9CisJZWxzZSBpZiAoX190ZXN0b3ZlcmZsb3cpCisJICB7CisJICAgIGlmIChfX25lZ2F0aXZlCisJCSYmIF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxfVmFsdWVUPjo6X19pc19zaWduZWQpCisJICAgICAgX192ID0gX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPF9WYWx1ZVQ+OjpfX21pbjsKKwkgICAgZWxzZQorCSAgICAgIF9fdiA9IF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxfVmFsdWVUPjo6X19tYXg7CisJICAgIF9fZXJyID0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJICB9CisJZWxzZQorCSAgX192ID0gX19uZWdhdGl2ZSA/IC1fX3Jlc3VsdCA6IF9fcmVzdWx0OworCisJaWYgKF9fdGVzdGVvZikKKwkgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CisJcmV0dXJuIF9fYmVnOworICAgICAgfQorCisgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgLy8gMTcuICBCYWQgYm9vbCBwYXJzaW5nCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KKyAgICBfSW5JdGVyCisgICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKKyAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QKKyAgICB7CisgICAgICBpZiAoIShfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSkKKyAgICAgICAgeworCSAgLy8gUGFyc2UgYm9vbCB2YWx1ZXMgYXMgbG9uZy4KKyAgICAgICAgICAvLyBOQjogV2UgY2FuJ3QganVzdCBjYWxsIGRvX2dldChsb25nKSBoZXJlLCBhcyBpdCBtaWdodAorICAgICAgICAgIC8vIHJlZmVyIHRvIGEgZGVyaXZlZCBjbGFzcy4KKwkgIGxvbmcgX19sID0gLTE7CisgICAgICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX2wpOworCSAgaWYgKF9fbCA9PSAwIHx8IF9fbCA9PSAxKQorCSAgICBfX3YgPSBib29sKF9fbCk7CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJICAgICAgLy8gMjMuIE51bV9nZXQgb3ZlcmZsb3cgcmVzdWx0LgorCSAgICAgIF9fdiA9IHRydWU7CisJICAgICAgX19lcnIgPSBpb3NfYmFzZTo6ZmFpbGJpdDsKKwkgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCisJCV9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CisJICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisJICAvLyBQYXJzZSBib29sIHZhbHVlcyBhcyBhbHBoYW51bWVyaWMuCisJICB0eXBlZGVmIF9fbnVtcHVuY3RfY2FjaGU8X0NoYXJUPiAgX19jYWNoZV90eXBlOworCSAgX191c2VfY2FjaGU8X19jYWNoZV90eXBlPiBfX3VjOworCSAgY29uc3QgbG9jYWxlJiBfX2xvYyA9IF9faW8uX01fZ2V0bG9jKCk7CisJICBjb25zdCBfX2NhY2hlX3R5cGUqIF9fbGMgPSBfX3VjKF9fbG9jKTsKKworCSAgYm9vbCBfX3Rlc3RmID0gdHJ1ZTsKKwkgIGJvb2wgX190ZXN0dCA9IHRydWU7CisJICBib29sIF9fZG9uZWYgPSBfX2xjLT5fTV9mYWxzZW5hbWVfc2l6ZSA9PSAwOworCSAgYm9vbCBfX2RvbmV0ID0gX19sYy0+X01fdHJ1ZW5hbWVfc2l6ZSA9PSAwOworCSAgYm9vbCBfX3Rlc3Rlb2YgPSBmYWxzZTsKKwkgIHNpemVfdCBfX24gPSAwOworCSAgd2hpbGUgKCFfX2RvbmVmIHx8ICFfX2RvbmV0KQorCSAgICB7CisJICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQorCQl7CisJCSAgX190ZXN0ZW9mID0gdHJ1ZTsKKwkJICBicmVhazsKKwkJfQorCisJICAgICAgY29uc3QgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKKworCSAgICAgIGlmICghX19kb25lZikKKwkJX190ZXN0ZiA9IF9fYyA9PSBfX2xjLT5fTV9mYWxzZW5hbWVbX19uXTsKKworCSAgICAgIGlmICghX190ZXN0ZiAmJiBfX2RvbmV0KQorCQlicmVhazsKKworCSAgICAgIGlmICghX19kb25ldCkKKwkJX190ZXN0dCA9IF9fYyA9PSBfX2xjLT5fTV90cnVlbmFtZVtfX25dOworCisJICAgICAgaWYgKCFfX3Rlc3R0ICYmIF9fZG9uZWYpCisJCWJyZWFrOworCisJICAgICAgaWYgKCFfX3Rlc3R0ICYmICFfX3Rlc3RmKQorCQlicmVhazsKKworCSAgICAgICsrX19uOworCSAgICAgICsrX19iZWc7CisKKwkgICAgICBfX2RvbmVmID0gIV9fdGVzdGYgfHwgX19uID49IF9fbGMtPl9NX2ZhbHNlbmFtZV9zaXplOworCSAgICAgIF9fZG9uZXQgPSAhX190ZXN0dCB8fCBfX24gPj0gX19sYy0+X01fdHJ1ZW5hbWVfc2l6ZTsKKwkgICAgfQorCSAgaWYgKF9fdGVzdGYgJiYgX19uID09IF9fbGMtPl9NX2ZhbHNlbmFtZV9zaXplICYmIF9fbikKKwkgICAgeworCSAgICAgIF9fdiA9IGZhbHNlOworCSAgICAgIGlmIChfX3Rlc3R0ICYmIF9fbiA9PSBfX2xjLT5fTV90cnVlbmFtZV9zaXplKQorCQlfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0OworCSAgICAgIGVsc2UKKwkJX19lcnIgPSBfX3Rlc3Rlb2YgPyBpb3NfYmFzZTo6ZW9mYml0IDogaW9zX2Jhc2U6Omdvb2RiaXQ7CisJICAgIH0KKwkgIGVsc2UgaWYgKF9fdGVzdHQgJiYgX19uID09IF9fbGMtPl9NX3RydWVuYW1lX3NpemUgJiYgX19uKQorCSAgICB7CisJICAgICAgX192ID0gdHJ1ZTsKKwkgICAgICBfX2VyciA9IF9fdGVzdGVvZiA/IGlvc19iYXNlOjplb2ZiaXQgOiBpb3NfYmFzZTo6Z29vZGJpdDsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCSAgICAgIC8vIDIzLiBOdW1fZ2V0IG92ZXJmbG93IHJlc3VsdC4KKwkgICAgICBfX3YgPSBmYWxzZTsKKwkgICAgICBfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0OworCSAgICAgIGlmIChfX3Rlc3Rlb2YpCisJCV9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CisJICAgIH0KKwl9CisgICAgICByZXR1cm4gX19iZWc7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KKyAgICBfSW5JdGVyCisgICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKKyAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorCSAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxvYXQmIF9fdikgY29uc3QKKyAgICB7CisgICAgICBzdHJpbmcgX194dHJjOworICAgICAgX194dHJjLnJlc2VydmUoMzIpOworICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYyk7CisgICAgICBzdGQ6Ol9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19nZXRfY19sb2NhbGUoKSk7CisgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCisJX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKKyAgICAgIHJldHVybiBfX2JlZzsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgorICAgIF9Jbkl0ZXIKKyAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgorICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZG91YmxlJiBfX3YpIGNvbnN0CisgICAgeworICAgICAgc3RyaW5nIF9feHRyYzsKKyAgICAgIF9feHRyYy5yZXNlcnZlKDMyKTsKKyAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMpOworICAgICAgc3RkOjpfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfZ2V0X2NfbG9jYWxlKCkpOworICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQorCV9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CisgICAgICByZXR1cm4gX19iZWc7CisgICAgfQorCisjaWYgZGVmaW5lZCBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQgJiYgZGVmaW5lZCBfX0xPTkdfRE9VQkxFXzEyOF9fCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KKyAgICBfSW5JdGVyCisgICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKKyAgICBfX2RvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRvdWJsZSYgX192KSBjb25zdAorICAgIHsKKyAgICAgIHN0cmluZyBfX3h0cmM7CisgICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7CisgICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfZmxvYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjKTsKKyAgICAgIHN0ZDo6X19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2dldF9jX2xvY2FsZSgpKTsKKyAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKKwlfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OworICAgICAgcmV0dXJuIF9fYmVnOworICAgIH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KKyAgICBfSW5JdGVyCisgICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKKyAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0CisgICAgeworICAgICAgc3RyaW5nIF9feHRyYzsKKyAgICAgIF9feHRyYy5yZXNlcnZlKDMyKTsKKyAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMpOworICAgICAgc3RkOjpfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfZ2V0X2NfbG9jYWxlKCkpOworICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQorCV9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CisgICAgICByZXR1cm4gX19iZWc7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KKyAgICBfSW5JdGVyCisgICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKKyAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHZvaWQqJiBfX3YpIGNvbnN0CisgICAgeworICAgICAgLy8gUHJlcGFyZSBmb3IgaGV4IGZvcm1hdHRlZCBpbnB1dC4KKyAgICAgIHR5cGVkZWYgaW9zX2Jhc2U6OmZtdGZsYWdzICAgICAgICBmbXRmbGFnczsKKyAgICAgIGNvbnN0IGZtdGZsYWdzIF9fZm10ID0gX19pby5mbGFncygpOworICAgICAgX19pby5mbGFncygoX19mbXQgJiB+aW9zX2Jhc2U6OmJhc2VmaWVsZCkgfCBpb3NfYmFzZTo6aGV4KTsKKworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fY29uZGl0aW9uYWxfdHlwZTwoc2l6ZW9mKHZvaWQqKQorCQkJCQkgICAgIDw9IHNpemVvZih1bnNpZ25lZCBsb25nKSksCisJdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nPjo6X190eXBlIF9VSW50UHRyVHlwZTsgICAgICAgCisKKyAgICAgIF9VSW50UHRyVHlwZSBfX3VsOworICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3VsKTsKKworICAgICAgLy8gUmVzZXQgZnJvbSBoZXggZm9ybWF0dGVkIGlucHV0LgorICAgICAgX19pby5mbGFncyhfX2ZtdCk7CisKKyAgICAgIF9fdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KF9fdWwpOworICAgICAgcmV0dXJuIF9fYmVnOworICAgIH0KKworICAvLyBGb3IgdXNlIGJ5IGludGVnZXIgYW5kIGZsb2F0aW5nLXBvaW50IHR5cGVzIGFmdGVyIHRoZXkgaGF2ZSBiZWVuCisgIC8vIGNvbnZlcnRlZCBpbnRvIGEgY2hhcl90eXBlIHN0cmluZy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KKyAgICB2b2lkCisgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CisgICAgX01fcGFkKF9DaGFyVCBfX2ZpbGwsIHN0cmVhbXNpemUgX193LCBpb3NfYmFzZSYgX19pbywKKwkgICBfQ2hhclQqIF9fbmV3LCBjb25zdCBfQ2hhclQqIF9fY3MsIGludCYgX19sZW4pIGNvbnN0CisgICAgeworICAgICAgLy8gWzIyLjIuMi4yLjJdIFN0YWdlIDMuCisgICAgICAvLyBJZiBuZWNlc3NhcnksIHBhZC4KKyAgICAgIF9fcGFkPF9DaGFyVCwgY2hhcl90cmFpdHM8X0NoYXJUPiA+OjpfU19wYWQoX19pbywgX19maWxsLCBfX25ldywKKwkJCQkJCSAgX19jcywgX193LCBfX2xlbik7CisgICAgICBfX2xlbiA9IHN0YXRpY19jYXN0PGludD4oX193KTsKKyAgICB9CisKK19HTElCQ1hYX0VORF9MREJMX05BTUVTUEFDRQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1ZhbHVlVD4KKyAgICBpbnQKKyAgICBfX2ludF90b19jaGFyKF9DaGFyVCogX19idWZlbmQsIF9WYWx1ZVQgX192LCBjb25zdCBfQ2hhclQqIF9fbGl0LAorCQkgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzLCBib29sIF9fZGVjKQorICAgIHsKKyAgICAgIF9DaGFyVCogX19idWYgPSBfX2J1ZmVuZDsKKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fZGVjLCB0cnVlKSkKKwl7CisJICAvLyBEZWNpbWFsLgorCSAgZG8KKwkgICAgeworCSAgICAgICotLV9fYnVmID0gX19saXRbKF9fdiAlIDEwKSArIF9fbnVtX2Jhc2U6Ol9TX29kaWdpdHNdOworCSAgICAgIF9fdiAvPSAxMDsKKwkgICAgfQorCSAgd2hpbGUgKF9fdiAhPSAwKTsKKwl9CisgICAgICBlbHNlIGlmICgoX19mbGFncyAmIGlvc19iYXNlOjpiYXNlZmllbGQpID09IGlvc19iYXNlOjpvY3QpCisJeworCSAgLy8gT2N0YWwuCisJICBkbworCSAgICB7CisJICAgICAgKi0tX19idWYgPSBfX2xpdFsoX192ICYgMHg3KSArIF9fbnVtX2Jhc2U6Ol9TX29kaWdpdHNdOworCSAgICAgIF9fdiA+Pj0gMzsKKwkgICAgfQorCSAgd2hpbGUgKF9fdiAhPSAwKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgLy8gSGV4LgorCSAgY29uc3QgYm9vbCBfX3VwcGVyY2FzZSA9IF9fZmxhZ3MgJiBpb3NfYmFzZTo6dXBwZXJjYXNlOworCSAgY29uc3QgaW50IF9fY2FzZV9vZmZzZXQgPSBfX3VwcGVyY2FzZSA/IF9fbnVtX2Jhc2U6Ol9TX291ZGlnaXRzCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19udW1fYmFzZTo6X1Nfb2RpZ2l0czsKKwkgIGRvCisJICAgIHsKKwkgICAgICAqLS1fX2J1ZiA9IF9fbGl0WyhfX3YgJiAweGYpICsgX19jYXNlX29mZnNldF07CisJICAgICAgX192ID4+PSA0OworCSAgICB9CisJICB3aGlsZSAoX192ICE9IDApOworCX0KKyAgICAgIHJldHVybiBfX2J1ZmVuZCAtIF9fYnVmOworICAgIH0KKworX0dMSUJDWFhfQkVHSU5fTERCTF9OQU1FU1BBQ0UKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgorICAgIHZvaWQKKyAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKKyAgICBfTV9ncm91cF9pbnQoY29uc3QgY2hhciogX19ncm91cGluZywgc2l6ZV90IF9fZ3JvdXBpbmdfc2l6ZSwgX0NoYXJUIF9fc2VwLAorCQkgaW9zX2Jhc2UmLCBfQ2hhclQqIF9fbmV3LCBfQ2hhclQqIF9fY3MsIGludCYgX19sZW4pIGNvbnN0CisgICAgeworICAgICAgX0NoYXJUKiBfX3AgPSBzdGQ6Ol9fYWRkX2dyb3VwaW5nKF9fbmV3LCBfX3NlcCwgX19ncm91cGluZywKKwkJCQkJX19ncm91cGluZ19zaXplLCBfX2NzLCBfX2NzICsgX19sZW4pOworICAgICAgX19sZW4gPSBfX3AgLSBfX25ldzsKKyAgICB9CisgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CisgICAgICBfT3V0SXRlcgorICAgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CisgICAgICBfTV9pbnNlcnRfaW50KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsCisJCSAgICBfVmFsdWVUIF9fdikgY29uc3QKKyAgICAgIHsKKwl1c2luZyBfX2dudV9jeHg6Ol9fYWRkX3Vuc2lnbmVkOworCXR5cGVkZWYgdHlwZW5hbWUgX19hZGRfdW5zaWduZWQ8X1ZhbHVlVD46Ol9fdHlwZSBfX3Vuc2lnbmVkX3R5cGU7CisJdHlwZWRlZiBfX251bXB1bmN0X2NhY2hlPF9DaGFyVD4JICAgICAgICAgICAgIF9fY2FjaGVfdHlwZTsKKwlfX3VzZV9jYWNoZTxfX2NhY2hlX3R5cGU+IF9fdWM7CisJY29uc3QgbG9jYWxlJiBfX2xvYyA9IF9faW8uX01fZ2V0bG9jKCk7CisJY29uc3QgX19jYWNoZV90eXBlKiBfX2xjID0gX191YyhfX2xvYyk7CisJY29uc3QgX0NoYXJUKiBfX2xpdCA9IF9fbGMtPl9NX2F0b21zX291dDsKKwljb25zdCBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faW8uZmxhZ3MoKTsKKworCS8vIExvbmcgZW5vdWdoIHRvIGhvbGQgaGV4LCBkZWMsIGFuZCBvY3RhbCByZXByZXNlbnRhdGlvbnMuCisJY29uc3QgaW50IF9faWxlbiA9IDUgKiBzaXplb2YoX1ZhbHVlVCk7CisJX0NoYXJUKiBfX2NzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQorCQkJCQkJCSAgICAgKiBfX2lsZW4pKTsKKworCS8vIFsyMi4yLjIuMi4yXSBTdGFnZSAxLCBudW1lcmljIGNvbnZlcnNpb24gdG8gY2hhcmFjdGVyLgorCS8vIFJlc3VsdCBpcyByZXR1cm5lZCByaWdodC1qdXN0aWZpZWQgaW4gdGhlIGJ1ZmZlci4KKwljb25zdCBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19iYXNlZmllbGQgPSBfX2ZsYWdzICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKKwljb25zdCBib29sIF9fZGVjID0gKF9fYmFzZWZpZWxkICE9IGlvc19iYXNlOjpvY3QKKwkJCSAgICAmJiBfX2Jhc2VmaWVsZCAhPSBpb3NfYmFzZTo6aGV4KTsKKwljb25zdCBfX3Vuc2lnbmVkX3R5cGUgX191ID0gKChfX3YgPiAwIHx8ICFfX2RlYykKKwkJCQkgICAgID8gX191bnNpZ25lZF90eXBlKF9fdikKKwkJCQkgICAgIDogLV9fdW5zaWduZWRfdHlwZShfX3YpKTsKKyAJaW50IF9fbGVuID0gX19pbnRfdG9fY2hhcihfX2NzICsgX19pbGVuLCBfX3UsIF9fbGl0LCBfX2ZsYWdzLCBfX2RlYyk7CisJX19jcyArPSBfX2lsZW4gLSBfX2xlbjsKKworCS8vIEFkZCBncm91cGluZywgaWYgbmVjZXNzYXJ5LgorCWlmIChfX2xjLT5fTV91c2VfZ3JvdXBpbmcpCisJICB7CisJICAgIC8vIEdyb3VwaW5nIGNhbiBhZGQgKGFsbW9zdCkgYXMgbWFueSBzZXBhcmF0b3JzIGFzIHRoZSBudW1iZXIKKwkgICAgLy8gb2YgZGlnaXRzICsgc3BhY2UgaXMgcmVzZXJ2ZWQgZm9yIG51bWVyaWMgYmFzZSBvciBzaWduLgorCSAgICBfQ2hhclQqIF9fY3MyID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQorCQkJCQkJCQkgICogKF9fbGVuICsgMSkKKwkJCQkJCQkJICAqIDIpKTsKKwkgICAgX01fZ3JvdXBfaW50KF9fbGMtPl9NX2dyb3VwaW5nLCBfX2xjLT5fTV9ncm91cGluZ19zaXplLAorCQkJIF9fbGMtPl9NX3Rob3VzYW5kc19zZXAsIF9faW8sIF9fY3MyICsgMiwgX19jcywgX19sZW4pOworCSAgICBfX2NzID0gX19jczIgKyAyOworCSAgfQorCisJLy8gQ29tcGxldGUgU3RhZ2UgMSwgcHJlcGVuZCBudW1lcmljIGJhc2Ugb3Igc2lnbi4KKwlpZiAoX19idWlsdGluX2V4cGVjdChfX2RlYywgdHJ1ZSkpCisJICB7CisJICAgIC8vIERlY2ltYWwuCisJICAgIGlmIChfX3YgPj0gMCkKKwkgICAgICB7CisJCWlmIChib29sKF9fZmxhZ3MgJiBpb3NfYmFzZTo6c2hvd3BvcykKKwkJICAgICYmIF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxfVmFsdWVUPjo6X19pc19zaWduZWQpCisJCSAgKi0tX19jcyA9IF9fbGl0W19fbnVtX2Jhc2U6Ol9TX29wbHVzXSwgKytfX2xlbjsKKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICAqLS1fX2NzID0gX19saXRbX19udW1fYmFzZTo6X1Nfb21pbnVzXSwgKytfX2xlbjsKKwkgIH0KKwllbHNlIGlmIChib29sKF9fZmxhZ3MgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpICYmIF9fdikKKwkgIHsKKwkgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpvY3QpCisJICAgICAgKi0tX19jcyA9IF9fbGl0W19fbnVtX2Jhc2U6Ol9TX29kaWdpdHNdLCArK19fbGVuOworCSAgICBlbHNlCisJICAgICAgeworCQkvLyAneCcgb3IgJ1gnCisJCWNvbnN0IGJvb2wgX191cHBlcmNhc2UgPSBfX2ZsYWdzICYgaW9zX2Jhc2U6OnVwcGVyY2FzZTsKKwkJKi0tX19jcyA9IF9fbGl0W19fbnVtX2Jhc2U6Ol9TX294ICsgX191cHBlcmNhc2VdOworCQkvLyAnMCcKKwkJKi0tX19jcyA9IF9fbGl0W19fbnVtX2Jhc2U6Ol9TX29kaWdpdHNdOworCQlfX2xlbiArPSAyOworCSAgICAgIH0KKwkgIH0KKworCS8vIFBhZC4KKwljb25zdCBzdHJlYW1zaXplIF9fdyA9IF9faW8ud2lkdGgoKTsKKwlpZiAoX193ID4gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19sZW4pKQorCSAgeworCSAgICBfQ2hhclQqIF9fY3MzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQorCQkJCQkJCQkgICogX193KSk7CisJICAgIF9NX3BhZChfX2ZpbGwsIF9fdywgX19pbywgX19jczMsIF9fY3MsIF9fbGVuKTsKKwkgICAgX19jcyA9IF9fY3MzOworCSAgfQorCV9faW8ud2lkdGgoMCk7CisKKwkvLyBbMjIuMi4yLjIuMl0gU3RhZ2UgNC4KKwkvLyBXcml0ZSByZXN1bHRpbmcsIGZ1bGx5LWZvcm1hdHRlZCBzdHJpbmcgdG8gb3V0cHV0IGl0ZXJhdG9yLgorCXJldHVybiBzdGQ6Ol9fd3JpdGUoX19zLCBfX2NzLCBfX2xlbik7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KKyAgICB2b2lkCisgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CisgICAgX01fZ3JvdXBfZmxvYXQoY29uc3QgY2hhciogX19ncm91cGluZywgc2l6ZV90IF9fZ3JvdXBpbmdfc2l6ZSwKKwkJICAgX0NoYXJUIF9fc2VwLCBjb25zdCBfQ2hhclQqIF9fcCwgX0NoYXJUKiBfX25ldywKKwkJICAgX0NoYXJUKiBfX2NzLCBpbnQmIF9fbGVuKSBjb25zdAorICAgIHsKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDI4Mi4gV2hhdCB0eXBlcyBkb2VzIG51bXB1bmN0IGdyb3VwaW5nIHJlZmVyIHRvPworICAgICAgLy8gQWRkIGdyb3VwaW5nLCBpZiBuZWNlc3NhcnkuCisgICAgICBjb25zdCBpbnQgX19kZWNsZW4gPSBfX3AgPyBfX3AgLSBfX2NzIDogX19sZW47CisgICAgICBfQ2hhclQqIF9fcDIgPSBzdGQ6Ol9fYWRkX2dyb3VwaW5nKF9fbmV3LCBfX3NlcCwgX19ncm91cGluZywKKwkJCQkJIF9fZ3JvdXBpbmdfc2l6ZSwKKwkJCQkJIF9fY3MsIF9fY3MgKyBfX2RlY2xlbik7CisKKyAgICAgIC8vIFRhY2sgb24gZGVjaW1hbCBwYXJ0LgorICAgICAgaW50IF9fbmV3bGVuID0gX19wMiAtIF9fbmV3OworICAgICAgaWYgKF9fcCkKKwl7CisJICBjaGFyX3RyYWl0czxfQ2hhclQ+Ojpjb3B5KF9fcDIsIF9fcCwgX19sZW4gLSBfX2RlY2xlbik7CisJICBfX25ld2xlbiArPSBfX2xlbiAtIF9fZGVjbGVuOworCX0KKyAgICAgIF9fbGVuID0gX19uZXdsZW47CisgICAgfQorCisgIC8vIFRoZSBmb2xsb3dpbmcgY29kZSB1c2VzIHZzbnByaW50ZiAob3IgdnNwcmludGYoKSwgd2hlbgorICAvLyBfR0xJQkNYWF9VU0VfQzk5IGlzIG5vdCBkZWZpbmVkKSB0byBjb252ZXJ0IGZsb2F0aW5nIHBvaW50IHZhbHVlcworICAvLyBmb3IgaW5zZXJ0aW9uIGludG8gYSBzdHJlYW0uICBBbiBvcHRpbWl6YXRpb24gd291bGQgYmUgdG8gcmVwbGFjZQorICAvLyB0aGVtIHdpdGggY29kZSB0aGF0IHdvcmtzIGRpcmVjdGx5IG9uIGEgd2lkZSBidWZmZXIgYW5kIHRoZW4gdXNlCisgIC8vIF9fcGFkIHRvIGRvIHRoZSBwYWRkaW5nLiAgSXQgd291bGQgYmUgZ29vZCB0byByZXBsYWNlIHRoZW0gYW55d2F5CisgIC8vIHRvIGdhaW4gYmFjayB0aGUgZWZmaWNpZW5jeSB0aGF0IEMrKyBwcm92aWRlcyBieSBrbm93aW5nIHVwIGZyb250CisgIC8vIHRoZSB0eXBlIG9mIHRoZSB2YWx1ZXMgdG8gaW5zZXJ0LiAgQWxzbywgc3ByaW50ZiBpcyBkYW5nZXJvdXMKKyAgLy8gc2luY2UgbWF5IGxlYWQgdG8gYWNjaWRlbnRhbCBidWZmZXIgb3ZlcnJ1bnMuICBUaGlzCisgIC8vIGltcGxlbWVudGF0aW9uIGZvbGxvd3MgdGhlIEMrKyBzdGFuZGFyZCBmYWlybHkgZGlyZWN0bHkgYXMKKyAgLy8gb3V0bGluZWQgaW4gMjIuMi4yLjIgW2xpYi5sb2NhbGUubnVtLnB1dF0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgorICAgICAgX091dEl0ZXIKKyAgICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgorICAgICAgX01faW5zZXJ0X2Zsb2F0KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIgX19tb2QsCisJCSAgICAgICBfVmFsdWVUIF9fdikgY29uc3QKKyAgICAgIHsKKwl0eXBlZGVmIF9fbnVtcHVuY3RfY2FjaGU8X0NoYXJUPiAgICAgICAgICAgICAgICBfX2NhY2hlX3R5cGU7CisJX191c2VfY2FjaGU8X19jYWNoZV90eXBlPiBfX3VjOworCWNvbnN0IGxvY2FsZSYgX19sb2MgPSBfX2lvLl9NX2dldGxvYygpOworCWNvbnN0IF9fY2FjaGVfdHlwZSogX19sYyA9IF9fdWMoX19sb2MpOworCisJLy8gVXNlIGRlZmF1bHQgcHJlY2lzaW9uIGlmIG91dCBvZiByYW5nZS4KKwljb25zdCBzdHJlYW1zaXplIF9fcHJlYyA9IF9faW8ucHJlY2lzaW9uKCkgPCAwID8gNiA6IF9faW8ucHJlY2lzaW9uKCk7CisKKwljb25zdCBpbnQgX19tYXhfZGlnaXRzID0KKwkgIF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxfVmFsdWVUPjo6X19kaWdpdHMxMDsKKworCS8vIFsyMi4yLjIuMi4yXSBTdGFnZSAxLCBudW1lcmljIGNvbnZlcnNpb24gdG8gY2hhcmFjdGVyLgorCWludCBfX2xlbjsKKwkvLyBMb25nIGVub3VnaCBmb3IgdGhlIG1heCBmb3JtYXQgc3BlYy4KKwljaGFyIF9fZmJ1ZlsxNl07CisJX19udW1fYmFzZTo6X1NfZm9ybWF0X2Zsb2F0KF9faW8sIF9fZmJ1ZiwgX19tb2QpOworCisjaWZkZWYgX0dMSUJDWFhfVVNFX0M5OQorCS8vIEZpcnN0IHRyeSBhIGJ1ZmZlciBwZXJoYXBzIGJpZyBlbm91Z2ggKG1vc3QgcHJvYmFibHkgc3VmZmljaWVudAorCS8vIGZvciBub24taW9zX2Jhc2U6OmZpeGVkIG91dHB1dHMpCisJaW50IF9fY3Nfc2l6ZSA9IF9fbWF4X2RpZ2l0cyAqIDM7CisJY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOworCV9fbGVuID0gc3RkOjpfX2NvbnZlcnRfZnJvbV92KF9TX2dldF9jX2xvY2FsZSgpLCBfX2NzLCBfX2NzX3NpemUsCisJCQkJICAgICAgX19mYnVmLCBfX3ByZWMsIF9fdik7CisKKwkvLyBJZiB0aGUgYnVmZmVyIHdhcyBub3QgbGFyZ2UgZW5vdWdoLCB0cnkgYWdhaW4gd2l0aCB0aGUgY29ycmVjdCBzaXplLgorCWlmIChfX2xlbiA+PSBfX2NzX3NpemUpCisJICB7CisJICAgIF9fY3Nfc2l6ZSA9IF9fbGVuICsgMTsKKwkgICAgX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOworCSAgICBfX2xlbiA9IHN0ZDo6X19jb252ZXJ0X2Zyb21fdihfU19nZXRfY19sb2NhbGUoKSwgX19jcywgX19jc19zaXplLAorCQkJCQkgIF9fZmJ1ZiwgX19wcmVjLCBfX3YpOworCSAgfQorI2Vsc2UKKwkvLyBDb25zaWRlciB0aGUgcG9zc2liaWxpdHkgb2YgbG9uZyBpb3NfYmFzZTo6Zml4ZWQgb3V0cHV0cworCWNvbnN0IGJvb2wgX19maXhlZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpmaXhlZDsKKwljb25zdCBpbnQgX19tYXhfZXhwID0KKwkgIF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxfVmFsdWVUPjo6X19tYXhfZXhwb25lbnQxMDsKKworCS8vIFRoZSBzaXplIG9mIHRoZSBvdXRwdXQgc3RyaW5nIGlzIGNvbXB1dGVkIGFzIGZvbGxvd3MuCisJLy8gaW9zX2Jhc2U6OmZpeGVkIG91dHB1dHMgbWF5IG5lZWQgdXAgdG8gX19tYXhfZXhwICsgMSBjaGFycworCS8vIGZvciB0aGUgaW50ZWdlciBwYXJ0ICsgX19wcmVjIGNoYXJzIGZvciB0aGUgZnJhY3Rpb25hbCBwYXJ0CisJLy8gKyAzIGNoYXJzIGZvciBzaWduLCBkZWNpbWFsIHBvaW50LCAnXDAnLiBPbiB0aGUgb3RoZXIgaGFuZCwKKwkvLyBmb3Igbm9uLWZpeGVkIG91dHB1dHMgX19tYXhfZGlnaXRzICogMiArIF9fcHJlYyBjaGFycyBhcmUKKwkvLyBsYXJnZWx5IHN1ZmZpY2llbnQuCisJY29uc3QgaW50IF9fY3Nfc2l6ZSA9IF9fZml4ZWQgPyBfX21heF9leHAgKyBfX3ByZWMgKyA0CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21heF9kaWdpdHMgKiAyICsgX19wcmVjOworCWNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKKwlfX2xlbiA9IHN0ZDo6X19jb252ZXJ0X2Zyb21fdihfU19nZXRfY19sb2NhbGUoKSwgX19jcywgMCwgX19mYnVmLCAKKwkJCQkgICAgICBfX3ByZWMsIF9fdik7CisjZW5kaWYKKworCS8vIFsyMi4yLjIuMi4yXSBTdGFnZSAyLCBjb252ZXJ0IHRvIGNoYXJfdHlwZSwgdXNpbmcgY29ycmVjdAorCS8vIG51bXB1bmN0LmRlY2ltYWxfcG9pbnQoKSB2YWx1ZXMgZm9yICcuJyBhbmQgYWRkaW5nIGdyb3VwaW5nLgorCWNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKKwkKKwlfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCisJCQkJCQkJICAgICAqIF9fbGVuKSk7CisJX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9fd3MpOworCQorCS8vIFJlcGxhY2UgZGVjaW1hbCBwb2ludC4KKwlfQ2hhclQqIF9fd3AgPSAwOworCWNvbnN0IGNoYXIqIF9fcCA9IGNoYXJfdHJhaXRzPGNoYXI+OjpmaW5kKF9fY3MsIF9fbGVuLCAnLicpOworCWlmIChfX3ApCisJICB7CisJICAgIF9fd3AgPSBfX3dzICsgKF9fcCAtIF9fY3MpOworCSAgICAqX193cCA9IF9fbGMtPl9NX2RlY2ltYWxfcG9pbnQ7CisJICB9CisJCisJLy8gQWRkIGdyb3VwaW5nLCBpZiBuZWNlc3NhcnkuCisJLy8gTi5CLiBNYWtlIHN1cmUgdG8gbm90IGdyb3VwIHRoaW5ncyBsaWtlIDJlMjAsIGkuZS4sIG5vIGRlY2ltYWwKKwkvLyBwb2ludCwgc2NpZW50aWZpYyBub3RhdGlvbi4KKwlpZiAoX19sYy0+X01fdXNlX2dyb3VwaW5nCisJICAgICYmIChfX3dwIHx8IF9fbGVuIDwgMyB8fCAoX19jc1sxXSA8PSAnOScgJiYgX19jc1syXSA8PSAnOScKKwkJCQkgICAgICAmJiBfX2NzWzFdID49ICcwJyAmJiBfX2NzWzJdID49ICcwJykpKQorCSAgeworCSAgICAvLyBHcm91cGluZyBjYW4gYWRkIChhbG1vc3QpIGFzIG1hbnkgc2VwYXJhdG9ycyBhcyB0aGUKKwkgICAgLy8gbnVtYmVyIG9mIGRpZ2l0cywgYnV0IG5vIG1vcmUuCisJICAgIF9DaGFyVCogX193czIgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCisJCQkJCQkJCSAgKiBfX2xlbiAqIDIpKTsKKwkgICAgCisJICAgIHN0cmVhbXNpemUgX19vZmYgPSAwOworCSAgICBpZiAoX19jc1swXSA9PSAnLScgfHwgX19jc1swXSA9PSAnKycpCisJICAgICAgeworCQlfX29mZiA9IDE7CisJCV9fd3MyWzBdID0gX193c1swXTsKKwkJX19sZW4gLT0gMTsKKwkgICAgICB9CisJICAgIAorCSAgICBfTV9ncm91cF9mbG9hdChfX2xjLT5fTV9ncm91cGluZywgX19sYy0+X01fZ3JvdXBpbmdfc2l6ZSwKKwkJCSAgIF9fbGMtPl9NX3Rob3VzYW5kc19zZXAsIF9fd3AsIF9fd3MyICsgX19vZmYsCisJCQkgICBfX3dzICsgX19vZmYsIF9fbGVuKTsKKwkgICAgX19sZW4gKz0gX19vZmY7CisJICAgIAorCSAgICBfX3dzID0gX193czI7CisJICB9CisKKwkvLyBQYWQuCisJY29uc3Qgc3RyZWFtc2l6ZSBfX3cgPSBfX2lvLndpZHRoKCk7CisJaWYgKF9fdyA+IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbGVuKSkKKwkgIHsKKwkgICAgX0NoYXJUKiBfX3dzMyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKKwkJCQkJCQkJICAqIF9fdykpOworCSAgICBfTV9wYWQoX19maWxsLCBfX3csIF9faW8sIF9fd3MzLCBfX3dzLCBfX2xlbik7CisJICAgIF9fd3MgPSBfX3dzMzsKKwkgIH0KKwlfX2lvLndpZHRoKDApOworCQorCS8vIFsyMi4yLjIuMi4yXSBTdGFnZSA0LgorCS8vIFdyaXRlIHJlc3VsdGluZywgZnVsbHktZm9ybWF0dGVkIHN0cmluZyB0byBvdXRwdXQgaXRlcmF0b3IuCisJcmV0dXJuIHN0ZDo6X193cml0ZShfX3MsIF9fd3MsIF9fbGVuKTsKKyAgICAgIH0KKyAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CisgICAgX091dEl0ZXIKKyAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKKyAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192KSBjb25zdAorICAgIHsKKyAgICAgIGNvbnN0IGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOworICAgICAgaWYgKChfX2ZsYWdzICYgaW9zX2Jhc2U6OmJvb2xhbHBoYSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IGxvbmcgX19sID0gX192OworICAgICAgICAgIF9fcyA9IF9NX2luc2VydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fbCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworCSAgdHlwZWRlZiBfX251bXB1bmN0X2NhY2hlPF9DaGFyVD4gICAgICAgICAgICAgIF9fY2FjaGVfdHlwZTsKKwkgIF9fdXNlX2NhY2hlPF9fY2FjaGVfdHlwZT4gX191YzsKKwkgIGNvbnN0IGxvY2FsZSYgX19sb2MgPSBfX2lvLl9NX2dldGxvYygpOworCSAgY29uc3QgX19jYWNoZV90eXBlKiBfX2xjID0gX191YyhfX2xvYyk7CisKKwkgIGNvbnN0IF9DaGFyVCogX19uYW1lID0gX192ID8gX19sYy0+X01fdHJ1ZW5hbWUKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19sYy0+X01fZmFsc2VuYW1lOworCSAgaW50IF9fbGVuID0gX192ID8gX19sYy0+X01fdHJ1ZW5hbWVfc2l6ZQorCSAgICAgICAgICAgICAgICAgIDogX19sYy0+X01fZmFsc2VuYW1lX3NpemU7CisKKwkgIGNvbnN0IHN0cmVhbXNpemUgX193ID0gX19pby53aWR0aCgpOworCSAgaWYgKF9fdyA+IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbGVuKSkKKwkgICAgeworCSAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19wbGVuID0gX193IC0gX19sZW47CisJICAgICAgX0NoYXJUKiBfX3BzCisJCT0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQorCQkJCQkJCSogX19wbGVuKSk7CisKKwkgICAgICBjaGFyX3RyYWl0czxfQ2hhclQ+Ojphc3NpZ24oX19wcywgX19wbGVuLCBfX2ZpbGwpOworCSAgICAgIF9faW8ud2lkdGgoMCk7CisKKwkgICAgICBpZiAoKF9fZmxhZ3MgJiBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpID09IGlvc19iYXNlOjpsZWZ0KQorCQl7CisJCSAgX19zID0gc3RkOjpfX3dyaXRlKF9fcywgX19uYW1lLCBfX2xlbik7CisJCSAgX19zID0gc3RkOjpfX3dyaXRlKF9fcywgX19wcywgX19wbGVuKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIF9fcyA9IHN0ZDo6X193cml0ZShfX3MsIF9fcHMsIF9fcGxlbik7CisJCSAgX19zID0gc3RkOjpfX3dyaXRlKF9fcywgX19uYW1lLCBfX2xlbik7CisJCX0KKwkgICAgICByZXR1cm4gX19zOworCSAgICB9CisJICBfX2lvLndpZHRoKDApOworCSAgX19zID0gc3RkOjpfX3dyaXRlKF9fcywgX19uYW1lLCBfX2xlbik7CisJfQorICAgICAgcmV0dXJuIF9fczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KKyAgICBfT3V0SXRlcgorICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgorICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3QKKyAgICB7IHJldHVybiBfTV9pbnNlcnRfZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIGNoYXIoKSwgX192KTsgfQorCisjaWYgZGVmaW5lZCBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQgJiYgZGVmaW5lZCBfX0xPTkdfRE9VQkxFXzEyOF9fCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CisgICAgX091dEl0ZXIKKyAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKKyAgICBfX2RvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3QKKyAgICB7IHJldHVybiBfTV9pbnNlcnRfZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIGNoYXIoKSwgX192KTsgfQorI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KKyAgICBfT3V0SXRlcgorICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgorICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKKwkgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CisgICAgeyByZXR1cm4gX01faW5zZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCAnTCcsIF9fdik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgorICAgIF9PdXRJdGVyCisgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CisgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAorICAgICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0CisgICAgeworICAgICAgY29uc3QgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lvLmZsYWdzKCk7CisgICAgICBjb25zdCBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB+KGlvc19iYXNlOjpiYXNlZmllbGQKKwkJCQkJIHwgaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CisgICAgICBfX2lvLmZsYWdzKChfX2ZsYWdzICYgX19mbXQpIHwgKGlvc19iYXNlOjpoZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2UpKTsKKworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fY29uZGl0aW9uYWxfdHlwZTwoc2l6ZW9mKGNvbnN0IHZvaWQqKQorCQkJCQkgICAgIDw9IHNpemVvZih1bnNpZ25lZCBsb25nKSksCisJdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nPjo6X190eXBlIF9VSW50UHRyVHlwZTsgICAgICAgCisKKyAgICAgIF9fcyA9IF9NX2luc2VydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsCisJCQkgIHJlaW50ZXJwcmV0X2Nhc3Q8X1VJbnRQdHJUeXBlPihfX3YpKTsKKyAgICAgIF9faW8uZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19zOworICAgIH0KKworX0dMSUJDWFhfRU5EX0xEQkxfTkFNRVNQQUNFCisKKyAgLy8gQ29uc3RydWN0IGNvcnJlY3RseSBwYWRkZWQgc3RyaW5nLCBhcyBwZXIgMjIuMi4yLjIuMgorICAvLyBBc3N1bWVzCisgIC8vIF9fbmV3bGVuID4gX19vbGRsZW4KKyAgLy8gX19uZXdzIGlzIGFsbG9jYXRlZCBmb3IgX19uZXdsZW4gc2l6ZQorCisgIC8vIE5COiBPZiB0aGUgdHdvIHBhcmFtZXRlcnMsIF9DaGFyVCBjYW4gYmUgZGVkdWNlZCBmcm9tIHRoZQorICAvLyBmdW5jdGlvbiBhcmd1bWVudHMuIFRoZSBvdGhlciAoX1RyYWl0cykgaGFzIHRvIGJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdm9pZAorICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BhZChpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwKKwkJCQkgICBfQ2hhclQqIF9fbmV3cywgY29uc3QgX0NoYXJUKiBfX29sZHMsCisJCQkJICAgc3RyZWFtc2l6ZSBfX25ld2xlbiwgc3RyZWFtc2l6ZSBfX29sZGxlbikKKyAgICB7CisgICAgICBjb25zdCBzaXplX3QgX19wbGVuID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihfX25ld2xlbiAtIF9fb2xkbGVuKTsKKyAgICAgIGNvbnN0IGlvc19iYXNlOjpmbXRmbGFncyBfX2FkanVzdCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsKKworICAgICAgLy8gUGFkZGluZyBsYXN0LgorICAgICAgaWYgKF9fYWRqdXN0ID09IGlvc19iYXNlOjpsZWZ0KQorCXsKKwkgIF9UcmFpdHM6OmNvcHkoX19uZXdzLCBfX29sZHMsIF9fb2xkbGVuKTsKKwkgIF9UcmFpdHM6OmFzc2lnbihfX25ld3MgKyBfX29sZGxlbiwgX19wbGVuLCBfX2ZpbGwpOworCSAgcmV0dXJuOworCX0KKworICAgICAgc2l6ZV90IF9fbW9kID0gMDsKKyAgICAgIGlmIChfX2FkanVzdCA9PSBpb3NfYmFzZTo6aW50ZXJuYWwpCisJeworCSAgLy8gUGFkIGFmdGVyIHRoZSBzaWduLCBpZiB0aGVyZSBpcyBvbmUuCisJICAvLyBQYWQgYWZ0ZXIgMFt4WF0sIGlmIHRoZXJlIGlzIG9uZS4KKwkgIC8vIFdobyBjYW1lIHVwIHdpdGggdGhlc2UgcnVsZXMsIGFueXdheT8gSmVlemUuCisgICAgICAgICAgY29uc3QgbG9jYWxlJiBfX2xvYyA9IF9faW8uX01fZ2V0bG9jKCk7CisJICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CisKKwkgIGlmIChfX2N0eXBlLndpZGVuKCctJykgPT0gX19vbGRzWzBdCisJICAgICAgfHwgX19jdHlwZS53aWRlbignKycpID09IF9fb2xkc1swXSkKKwkgICAgeworCSAgICAgIF9fbmV3c1swXSA9IF9fb2xkc1swXTsKKwkgICAgICBfX21vZCA9IDE7CisJICAgICAgKytfX25ld3M7CisJICAgIH0KKwkgIGVsc2UgaWYgKF9fY3R5cGUud2lkZW4oJzAnKSA9PSBfX29sZHNbMF0KKwkJICAgJiYgX19vbGRsZW4gPiAxCisJCSAgICYmIChfX2N0eXBlLndpZGVuKCd4JykgPT0gX19vbGRzWzFdCisJCSAgICAgICB8fCBfX2N0eXBlLndpZGVuKCdYJykgPT0gX19vbGRzWzFdKSkKKwkgICAgeworCSAgICAgIF9fbmV3c1swXSA9IF9fb2xkc1swXTsKKwkgICAgICBfX25ld3NbMV0gPSBfX29sZHNbMV07CisJICAgICAgX19tb2QgPSAyOworCSAgICAgIF9fbmV3cyArPSAyOworCSAgICB9CisJICAvLyBlbHNlIFBhZGRpbmcgZmlyc3QuCisJfQorICAgICAgX1RyYWl0czo6YXNzaWduKF9fbmV3cywgX19wbGVuLCBfX2ZpbGwpOworICAgICAgX1RyYWl0czo6Y29weShfX25ld3MgKyBfX3BsZW4sIF9fb2xkcyArIF9fbW9kLCBfX29sZGxlbiAtIF9fbW9kKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIF9DaGFyVCoKKyAgICBfX2FkZF9ncm91cGluZyhfQ2hhclQqIF9fcywgX0NoYXJUIF9fc2VwLAorCQkgICBjb25zdCBjaGFyKiBfX2diZWcsIHNpemVfdCBfX2dzaXplLAorCQkgICBjb25zdCBfQ2hhclQqIF9fZmlyc3QsIGNvbnN0IF9DaGFyVCogX19sYXN0KQorICAgIHsKKyAgICAgIHNpemVfdCBfX2lkeCA9IDA7CisgICAgICBzaXplX3QgX19jdHIgPSAwOworCisgICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9fZ2JlZ1tfX2lkeF0KKwkgICAgICYmIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPihfX2diZWdbX19pZHhdKSA+IDAKKwkgICAgICYmIF9fZ2JlZ1tfX2lkeF0gIT0gX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPGNoYXI+OjpfX21heCkKKwl7CisJICBfX2xhc3QgLT0gX19nYmVnW19faWR4XTsKKwkgIF9faWR4IDwgX19nc2l6ZSAtIDEgPyArK19faWR4IDogKytfX2N0cjsKKwl9CisKKyAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwkqX19zKysgPSAqX19maXJzdCsrOworCisgICAgICB3aGlsZSAoX19jdHItLSkKKwl7CisJICAqX19zKysgPSBfX3NlcDsJICAKKwkgIGZvciAoY2hhciBfX2kgPSBfX2diZWdbX19pZHhdOyBfX2kgPiAwOyAtLV9faSkKKwkgICAgKl9fcysrID0gKl9fZmlyc3QrKzsKKwl9CisKKyAgICAgIHdoaWxlIChfX2lkeC0tKQorCXsKKwkgICpfX3MrKyA9IF9fc2VwOwkgIAorCSAgZm9yIChjaGFyIF9faSA9IF9fZ2JlZ1tfX2lkeF07IF9faSA+IDA7IC0tX19pKQorCSAgICAqX19zKysgPSAqX19maXJzdCsrOworCX0KKworICAgICAgcmV0dXJuIF9fczsKKyAgICB9CisKKyAgLy8gSW5oaWJpdCBpbXBsaWNpdCBpbnN0YW50aWF0aW9ucyBmb3IgcmVxdWlyZWQgaW5zdGFudGlhdGlvbnMsCisgIC8vIHdoaWNoIGFyZSBkZWZpbmVkIHZpYSBleHBsaWNpdCBpbnN0YW50aWF0aW9ucyBlbHNld2hlcmUuCisgIC8vIE5COiBUaGlzIHN5bnRheCBpcyBhIEdOVSBleHRlbnNpb24uCisjaWYgX0dMSUJDWFhfRVhURVJOX1RFTVBMQVRFCisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdDxjaGFyPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0X2J5bmFtZTxjaGFyPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9HTElCQ1hYX0xEQkxfTkFNRVNQQUNFIG51bV9nZXQ8Y2hhcj47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfR0xJQkNYWF9MREJMX05BTUVTUEFDRSBudW1fcHV0PGNoYXI+OworICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY3R5cGVfYnluYW1lPGNoYXI+OworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGNvbnN0IGN0eXBlPGNoYXI+JgorICAgIHVzZV9mYWNldDxjdHlwZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGNvbnN0IG51bXB1bmN0PGNoYXI+JgorICAgIHVzZV9mYWNldDxudW1wdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGNvbnN0IG51bV9wdXQ8Y2hhcj4mCisgICAgdXNlX2ZhY2V0PG51bV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBjb25zdCBudW1fZ2V0PGNoYXI+JgorICAgIHVzZV9mYWNldDxudW1fZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgYm9vbAorICAgIGhhc19mYWNldDxjdHlwZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGJvb2wKKyAgICBoYXNfZmFjZXQ8bnVtcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBib29sCisgICAgaGFzX2ZhY2V0PG51bV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBib29sCisgICAgaGFzX2ZhY2V0PG51bV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdDx3Y2hhcl90PjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0X2J5bmFtZTx3Y2hhcl90PjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9HTElCQ1hYX0xEQkxfTkFNRVNQQUNFIG51bV9nZXQ8d2NoYXJfdD47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfR0xJQkNYWF9MREJMX05BTUVTUEFDRSBudW1fcHV0PHdjaGFyX3Q+OworICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY3R5cGVfYnluYW1lPHdjaGFyX3Q+OworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGNvbnN0IGN0eXBlPHdjaGFyX3Q+JgorICAgIHVzZV9mYWNldDxjdHlwZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGNvbnN0IG51bXB1bmN0PHdjaGFyX3Q+JgorICAgIHVzZV9mYWNldDxudW1wdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGNvbnN0IG51bV9wdXQ8d2NoYXJfdD4mCisgICAgdXNlX2ZhY2V0PG51bV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBjb25zdCBudW1fZ2V0PHdjaGFyX3Q+JgorICAgIHVzZV9mYWNldDxudW1fZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CisKKyBleHRlcm4gdGVtcGxhdGUKKyAgICBib29sCisgICAgaGFzX2ZhY2V0PGN0eXBlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgYm9vbAorICAgIGhhc19mYWNldDxudW1wdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGJvb2wKKyAgICBoYXNfZmFjZXQ8bnVtX3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGJvb2wKKyAgICBoYXNfZmFjZXQ8bnVtX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOworI2VuZGlmCisjZW5kaWYKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9sb2NhbGVfZmFjZXRzX25vbmlvLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvbG9jYWxlX2ZhY2V0c19ub25pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNWUwYWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvbG9jYWxlX2ZhY2V0c19ub25pby5oCkBAIC0wLDAgKzEsMTkzMyBAQAorLy8gTG9jYWxlIHN1cHBvcnQgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBsb2NhbGVfZmFjZXRzX25vbmlvLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDIyLjEgIExvY2FsZXMKKy8vCisKKyNpZm5kZWYgX0xPQ0FMRV9GQUNFVFNfTk9OSU9fSAorI2RlZmluZSBfTE9DQUxFX0ZBQ0VUU19OT05JT19IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Y3RpbWU+CS8vIEZvciBzdHJ1Y3QgdG0KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvKioKKyAgICogIEBicmllZiAgVGltZSBmb3JtYXQgb3JkZXJpbmcgZGF0YS4KKyAgICogIEBpbmdyb3VwIGxvY2FsZXMKKyAgICoKKyAgICogIFRoaXMgY2xhc3MgcHJvdmlkZXMgYW4gZW51bSByZXByZXNlbnRpbmcgZGlmZmVyZW50IG9yZGVyaW5ncyBvZgorICAgKiAgdGltZTogZGF5LCBtb250aCwgYW5kIHllYXIuCisgICovCisgIGNsYXNzIHRpbWVfYmFzZQorICB7CisgIHB1YmxpYzoKKyAgICBlbnVtIGRhdGVvcmRlciB7IG5vX29yZGVyLCBkbXksIG1keSwgeW1kLCB5ZG0gfTsKKyAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgc3RydWN0IF9fdGltZXB1bmN0X2NhY2hlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQKKyAgICB7CisgICAgICAvLyBMaXN0IG9mIGFsbCBrbm93biB0aW1lem9uZXMsIHdpdGggR01UIGZpcnN0LgorICAgICAgc3RhdGljIGNvbnN0IF9DaGFyVCoJCV9TX3RpbWV6b25lc1sxNF07CisKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9kYXRlX2Zvcm1hdDsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9kYXRlX2VyYV9mb3JtYXQ7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fdGltZV9mb3JtYXQ7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fdGltZV9lcmFfZm9ybWF0OworICAgICAgY29uc3QgX0NoYXJUKgkJCV9NX2RhdGVfdGltZV9mb3JtYXQ7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fZGF0ZV90aW1lX2VyYV9mb3JtYXQ7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fYW07CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fcG07CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fYW1fcG1fZm9ybWF0OworCisgICAgICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorICAgICAgY29uc3QgX0NoYXJUKgkJCV9NX2RheTE7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fZGF5MjsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9kYXkzOworICAgICAgY29uc3QgX0NoYXJUKgkJCV9NX2RheTQ7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fZGF5NTsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9kYXk2OworICAgICAgY29uc3QgX0NoYXJUKgkJCV9NX2RheTc7CisKKyAgICAgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fYWRheTE7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fYWRheTI7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fYWRheTM7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fYWRheTQ7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fYWRheTU7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fYWRheTY7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fYWRheTc7CisKKyAgICAgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fbW9udGgwMTsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9tb250aDAyOworICAgICAgY29uc3QgX0NoYXJUKgkJCV9NX21vbnRoMDM7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fbW9udGgwNDsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9tb250aDA1OworICAgICAgY29uc3QgX0NoYXJUKgkJCV9NX21vbnRoMDY7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fbW9udGgwNzsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9tb250aDA4OworICAgICAgY29uc3QgX0NoYXJUKgkJCV9NX21vbnRoMDk7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fbW9udGgxMDsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9tb250aDExOworICAgICAgY29uc3QgX0NoYXJUKgkJCV9NX21vbnRoMTI7CisKKyAgICAgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9hbW9udGgwMTsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9hbW9udGgwMjsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9hbW9udGgwMzsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9hbW9udGgwNDsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9hbW9udGgwNTsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9hbW9udGgwNjsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9hbW9udGgwNzsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9hbW9udGgwODsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9hbW9udGgwOTsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9hbW9udGgxMDsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9hbW9udGgxMTsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9hbW9udGgxMjsKKworICAgICAgYm9vbAkJCQlfTV9hbGxvY2F0ZWQ7CisKKyAgICAgIF9fdGltZXB1bmN0X2NhY2hlKHNpemVfdCBfX3JlZnMgPSAwKSA6IGZhY2V0KF9fcmVmcyksCisgICAgICBfTV9kYXRlX2Zvcm1hdChOVUxMKSwgX01fZGF0ZV9lcmFfZm9ybWF0KE5VTEwpLCBfTV90aW1lX2Zvcm1hdChOVUxMKSwKKyAgICAgIF9NX3RpbWVfZXJhX2Zvcm1hdChOVUxMKSwgX01fZGF0ZV90aW1lX2Zvcm1hdChOVUxMKSwKKyAgICAgIF9NX2RhdGVfdGltZV9lcmFfZm9ybWF0KE5VTEwpLCBfTV9hbShOVUxMKSwgX01fcG0oTlVMTCksCisgICAgICBfTV9hbV9wbV9mb3JtYXQoTlVMTCksIF9NX2RheTEoTlVMTCksIF9NX2RheTIoTlVMTCksIF9NX2RheTMoTlVMTCksCisgICAgICBfTV9kYXk0KE5VTEwpLCBfTV9kYXk1KE5VTEwpLCBfTV9kYXk2KE5VTEwpLCBfTV9kYXk3KE5VTEwpLAorICAgICAgX01fYWRheTEoTlVMTCksIF9NX2FkYXkyKE5VTEwpLCBfTV9hZGF5MyhOVUxMKSwgX01fYWRheTQoTlVMTCksCisgICAgICBfTV9hZGF5NShOVUxMKSwgX01fYWRheTYoTlVMTCksIF9NX2FkYXk3KE5VTEwpLCBfTV9tb250aDAxKE5VTEwpLAorICAgICAgX01fbW9udGgwMihOVUxMKSwgX01fbW9udGgwMyhOVUxMKSwgX01fbW9udGgwNChOVUxMKSwgX01fbW9udGgwNShOVUxMKSwKKyAgICAgIF9NX21vbnRoMDYoTlVMTCksIF9NX21vbnRoMDcoTlVMTCksIF9NX21vbnRoMDgoTlVMTCksIF9NX21vbnRoMDkoTlVMTCksCisgICAgICBfTV9tb250aDEwKE5VTEwpLCBfTV9tb250aDExKE5VTEwpLCBfTV9tb250aDEyKE5VTEwpLCBfTV9hbW9udGgwMShOVUxMKSwKKyAgICAgIF9NX2Ftb250aDAyKE5VTEwpLCBfTV9hbW9udGgwMyhOVUxMKSwgX01fYW1vbnRoMDQoTlVMTCksCisgICAgICBfTV9hbW9udGgwNShOVUxMKSwgX01fYW1vbnRoMDYoTlVMTCksIF9NX2Ftb250aDA3KE5VTEwpLAorICAgICAgX01fYW1vbnRoMDgoTlVMTCksIF9NX2Ftb250aDA5KE5VTEwpLCBfTV9hbW9udGgxMChOVUxMKSwKKyAgICAgIF9NX2Ftb250aDExKE5VTEwpLCBfTV9hbW9udGgxMihOVUxMKSwgX01fYWxsb2NhdGVkKGZhbHNlKQorICAgICAgeyB9CisKKyAgICAgIH5fX3RpbWVwdW5jdF9jYWNoZSgpOworCisgICAgICB2b2lkCisgICAgICBfTV9jYWNoZShjb25zdCBsb2NhbGUmIF9fbG9jKTsKKworICAgIHByaXZhdGU6CisgICAgICBfX3RpbWVwdW5jdF9jYWNoZSYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfX3RpbWVwdW5jdF9jYWNoZSYpOworICAgICAgCisgICAgICBleHBsaWNpdAorICAgICAgX190aW1lcHVuY3RfY2FjaGUoY29uc3QgX190aW1lcHVuY3RfY2FjaGUmKTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBfX3RpbWVwdW5jdF9jYWNoZTxfQ2hhclQ+Ojp+X190aW1lcHVuY3RfY2FjaGUoKQorICAgIHsKKyAgICAgIGlmIChfTV9hbGxvY2F0ZWQpCisJeworCSAgLy8gVW51c2VkLgorCX0KKyAgICB9CisKKyAgLy8gU3BlY2lhbGl6YXRpb25zLgorICB0ZW1wbGF0ZTw+CisgICAgY29uc3QgY2hhcioKKyAgICBfX3RpbWVwdW5jdF9jYWNoZTxjaGFyPjo6X1NfdGltZXpvbmVzWzE0XTsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIHRlbXBsYXRlPD4KKyAgICBjb25zdCB3Y2hhcl90KgorICAgIF9fdGltZXB1bmN0X2NhY2hlPHdjaGFyX3Q+OjpfU190aW1lem9uZXNbMTRdOworI2VuZGlmCisKKyAgLy8gR2VuZXJpYy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGNvbnN0IF9DaGFyVCogX190aW1lcHVuY3RfY2FjaGU8X0NoYXJUPjo6X1NfdGltZXpvbmVzWzE0XTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgY2xhc3MgX190aW1lcHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlczoKKyAgICAgIHR5cGVkZWYgX0NoYXJUCQkJX19jaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+CV9fc3RyaW5nX3R5cGU7CisgICAgICB0eXBlZGVmIF9fdGltZXB1bmN0X2NhY2hlPF9DaGFyVD4JX19jYWNoZV90eXBlOworCisgICAgcHJvdGVjdGVkOgorICAgICAgX19jYWNoZV90eXBlKgkJCV9NX2RhdGE7CisgICAgICBfX2NfbG9jYWxlCQkJX01fY19sb2NhbGVfdGltZXB1bmN0OworICAgICAgY29uc3QgY2hhcioJCQlfTV9uYW1lX3RpbWVwdW5jdDsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vLyBOdW1wdW5jdCBmYWNldCBpZC4KKyAgICAgIHN0YXRpYyBsb2NhbGU6OmlkCQkJaWQ7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzID0gMCk7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfX3RpbWVwdW5jdChfX2NhY2hlX3R5cGUqIF9fY2FjaGUsIHNpemVfdCBfX3JlZnMgPSAwKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnRlcm5hbCBjb25zdHJ1Y3Rvci4gTm90IGZvciBnZW5lcmFsIHVzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyBhIGNvbnN0cnVjdG9yIGZvciB1c2UgYnkgdGhlIGxpYnJhcnkgaXRzZWxmIHRvIHNldCB1cCBuZXcKKyAgICAgICAqICBsb2NhbGVzLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gY2xvYyAgVGhlIEMgbG9jYWxlLgorICAgICAgICogIEBwYXJhbSBzICBUaGUgbmFtZSBvZiBhIGxvY2FsZS4KKyAgICAgICAqICBAcGFyYW0gcmVmcyAgUGFzc2VkIHRvIHRoZSBiYXNlIGZhY2V0IGNsYXNzLgorICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCk7CisKKyAgICAgIC8vIEZJWE1FOiBmb3IgZXJyb3IgY2hlY2tpbmcgcHVycG9zZXMgX01fcHV0IHNob3VsZCByZXR1cm4gdGhlIHJldHVybgorICAgICAgLy8gdmFsdWUgb2Ygc3RyZnRpbWUvd2NzZnRpbWUuCisgICAgICB2b2lkCisgICAgICBfTV9wdXQoX0NoYXJUKiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3QgX0NoYXJUKiBfX2Zvcm1hdCwKKwkgICAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdCB0aHJvdyAoKTsKKworICAgICAgdm9pZAorICAgICAgX01fZGF0ZV9mb3JtYXRzKGNvbnN0IF9DaGFyVCoqIF9fZGF0ZSkgY29uc3QKKyAgICAgIHsKKwkvLyBBbHdheXMgaGF2ZSBkZWZhdWx0IGZpcnN0LgorCV9fZGF0ZVswXSA9IF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0OworCV9fZGF0ZVsxXSA9IF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdDsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01fdGltZV9mb3JtYXRzKGNvbnN0IF9DaGFyVCoqIF9fdGltZSkgY29uc3QKKyAgICAgIHsKKwkvLyBBbHdheXMgaGF2ZSBkZWZhdWx0IGZpcnN0LgorCV9fdGltZVswXSA9IF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0OworCV9fdGltZVsxXSA9IF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdDsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01fZGF0ZV90aW1lX2Zvcm1hdHMoY29uc3QgX0NoYXJUKiogX19kdCkgY29uc3QKKyAgICAgIHsKKwkvLyBBbHdheXMgaGF2ZSBkZWZhdWx0IGZpcnN0LgorCV9fZHRbMF0gPSBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0OworCV9fZHRbMV0gPSBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdDsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01fYW1fcG1fZm9ybWF0KGNvbnN0IF9DaGFyVCogX19hbXBtKSBjb25zdAorICAgICAgeyBfX2FtcG0gPSBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQ7IH0KKworICAgICAgdm9pZAorICAgICAgX01fYW1fcG0oY29uc3QgX0NoYXJUKiogX19hbXBtKSBjb25zdAorICAgICAgeworCV9fYW1wbVswXSA9IF9NX2RhdGEtPl9NX2FtOworCV9fYW1wbVsxXSA9IF9NX2RhdGEtPl9NX3BtOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9kYXlzKGNvbnN0IF9DaGFyVCoqIF9fZGF5cykgY29uc3QKKyAgICAgIHsKKwlfX2RheXNbMF0gPSBfTV9kYXRhLT5fTV9kYXkxOworCV9fZGF5c1sxXSA9IF9NX2RhdGEtPl9NX2RheTI7CisJX19kYXlzWzJdID0gX01fZGF0YS0+X01fZGF5MzsKKwlfX2RheXNbM10gPSBfTV9kYXRhLT5fTV9kYXk0OworCV9fZGF5c1s0XSA9IF9NX2RhdGEtPl9NX2RheTU7CisJX19kYXlzWzVdID0gX01fZGF0YS0+X01fZGF5NjsKKwlfX2RheXNbNl0gPSBfTV9kYXRhLT5fTV9kYXk3OworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9kYXlzX2FiYnJldmlhdGVkKGNvbnN0IF9DaGFyVCoqIF9fZGF5cykgY29uc3QKKyAgICAgIHsKKwlfX2RheXNbMF0gPSBfTV9kYXRhLT5fTV9hZGF5MTsKKwlfX2RheXNbMV0gPSBfTV9kYXRhLT5fTV9hZGF5MjsKKwlfX2RheXNbMl0gPSBfTV9kYXRhLT5fTV9hZGF5MzsKKwlfX2RheXNbM10gPSBfTV9kYXRhLT5fTV9hZGF5NDsKKwlfX2RheXNbNF0gPSBfTV9kYXRhLT5fTV9hZGF5NTsKKwlfX2RheXNbNV0gPSBfTV9kYXRhLT5fTV9hZGF5NjsKKwlfX2RheXNbNl0gPSBfTV9kYXRhLT5fTV9hZGF5NzsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01fbW9udGhzKGNvbnN0IF9DaGFyVCoqIF9fbW9udGhzKSBjb25zdAorICAgICAgeworCV9fbW9udGhzWzBdID0gX01fZGF0YS0+X01fbW9udGgwMTsKKwlfX21vbnRoc1sxXSA9IF9NX2RhdGEtPl9NX21vbnRoMDI7CisJX19tb250aHNbMl0gPSBfTV9kYXRhLT5fTV9tb250aDAzOworCV9fbW9udGhzWzNdID0gX01fZGF0YS0+X01fbW9udGgwNDsKKwlfX21vbnRoc1s0XSA9IF9NX2RhdGEtPl9NX21vbnRoMDU7CisJX19tb250aHNbNV0gPSBfTV9kYXRhLT5fTV9tb250aDA2OworCV9fbW9udGhzWzZdID0gX01fZGF0YS0+X01fbW9udGgwNzsKKwlfX21vbnRoc1s3XSA9IF9NX2RhdGEtPl9NX21vbnRoMDg7CisJX19tb250aHNbOF0gPSBfTV9kYXRhLT5fTV9tb250aDA5OworCV9fbW9udGhzWzldID0gX01fZGF0YS0+X01fbW9udGgxMDsKKwlfX21vbnRoc1sxMF0gPSBfTV9kYXRhLT5fTV9tb250aDExOworCV9fbW9udGhzWzExXSA9IF9NX2RhdGEtPl9NX21vbnRoMTI7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX21vbnRoc19hYmJyZXZpYXRlZChjb25zdCBfQ2hhclQqKiBfX21vbnRocykgY29uc3QKKyAgICAgIHsKKwlfX21vbnRoc1swXSA9IF9NX2RhdGEtPl9NX2Ftb250aDAxOworCV9fbW9udGhzWzFdID0gX01fZGF0YS0+X01fYW1vbnRoMDI7CisJX19tb250aHNbMl0gPSBfTV9kYXRhLT5fTV9hbW9udGgwMzsKKwlfX21vbnRoc1szXSA9IF9NX2RhdGEtPl9NX2Ftb250aDA0OworCV9fbW9udGhzWzRdID0gX01fZGF0YS0+X01fYW1vbnRoMDU7CisJX19tb250aHNbNV0gPSBfTV9kYXRhLT5fTV9hbW9udGgwNjsKKwlfX21vbnRoc1s2XSA9IF9NX2RhdGEtPl9NX2Ftb250aDA3OworCV9fbW9udGhzWzddID0gX01fZGF0YS0+X01fYW1vbnRoMDg7CisJX19tb250aHNbOF0gPSBfTV9kYXRhLT5fTV9hbW9udGgwOTsKKwlfX21vbnRoc1s5XSA9IF9NX2RhdGEtPl9NX2Ftb250aDEwOworCV9fbW9udGhzWzEwXSA9IF9NX2RhdGEtPl9NX2Ftb250aDExOworCV9fbW9udGhzWzExXSA9IF9NX2RhdGEtPl9NX2Ftb250aDEyOworICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgdmlydHVhbAorICAgICAgfl9fdGltZXB1bmN0KCk7CisKKyAgICAgIC8vIEZvciB1c2UgYXQgY29uc3RydWN0aW9uIHRpbWUgb25seS4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0gTlVMTCk7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgbG9jYWxlOjppZCBfX3RpbWVwdW5jdDxfQ2hhclQ+OjppZDsKKworICAvLyBTcGVjaWFsaXphdGlvbnMuCisgIHRlbXBsYXRlPD4KKyAgICB2b2lkCisgICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKKworICB0ZW1wbGF0ZTw+CisgICAgdm9pZAorICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfTV9wdXQoY2hhciosIHNpemVfdCwgY29uc3QgY2hhciosIGNvbnN0IHRtKikgY29uc3QgdGhyb3cgKCk7CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICB0ZW1wbGF0ZTw+CisgICAgdm9pZAorICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CisKKyAgdGVtcGxhdGU8PgorICAgIHZvaWQKKyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6X01fcHV0KHdjaGFyX3QqLCBzaXplX3QsIGNvbnN0IHdjaGFyX3QqLAorCQkJCSBjb25zdCB0bSopIGNvbnN0IHRocm93ICgpOworI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworICAvLyBJbmNsdWRlIGhvc3QgYW5kIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWMgdGltZXB1bmN0IGZ1bmN0aW9ucy4KKyAgI2luY2x1ZGUgPGJpdHMvdGltZV9tZW1iZXJzLmg+CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgLyoqCisgICAqICBAYnJpZWYgIFByaW1hcnkgY2xhc3MgdGVtcGxhdGUgdGltZV9nZXQuCisgICAqICBAaW5ncm91cCBsb2NhbGVzCisgICAqCisgICAqICBUaGlzIGZhY2V0IGVuY2Fwc3VsYXRlcyB0aGUgY29kZSB0byBwYXJzZSBhbmQgcmV0dXJuIGEgZGF0ZSBvcgorICAgKiAgdGltZSBmcm9tIGEgc3RyaW5nLiAgSXQgaXMgdXNlZCBieSB0aGUgaXN0cmVhbSBudW1lcmljCisgICAqICBleHRyYWN0aW9uIG9wZXJhdG9ycy4KKyAgICoKKyAgICogIFRoZSB0aW1lX2dldCB0ZW1wbGF0ZSB1c2VzIHByb3RlY3RlZCB2aXJ0dWFsIGZ1bmN0aW9ucyB0byBwcm92aWRlIHRoZQorICAgKiAgYWN0dWFsIHJlc3VsdHMuICBUaGUgcHVibGljIGFjY2Vzc29ycyBmb3J3YXJkIHRoZSBjYWxsIHRvIHRoZSB2aXJ0dWFsCisgICAqICBmdW5jdGlvbnMuICBUaGVzZSB2aXJ0dWFsIGZ1bmN0aW9ucyBhcmUgaG9va3MgZm9yIGRldmVsb3BlcnMgdG8KKyAgICogIGltcGxlbWVudCB0aGUgYmVoYXZpb3IgdGhleSByZXF1aXJlIGZyb20gdGhlIHRpbWVfZ2V0IGZhY2V0LgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CisgICAgY2xhc3MgdGltZV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIHRpbWVfYmFzZQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlczoKKyAgICAgIC8vQHsKKyAgICAgIC8vLyBQdWJsaWMgdHlwZWRlZnMKKyAgICAgIHR5cGVkZWYgX0NoYXJUCQkJY2hhcl90eXBlOworICAgICAgdHlwZWRlZiBfSW5JdGVyCQkJaXRlcl90eXBlOworICAgICAgLy9AfQorICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPglfX3N0cmluZ190eXBlOworCisgICAgICAvLy8gTnVtcHVuY3QgZmFjZXQgaWQuCisgICAgICBzdGF0aWMgbG9jYWxlOjppZAkJCWlkOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdG9yIHBlcmZvcm1zIGluaXRpYWxpemF0aW9uLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGlzIHRoZSBjb25zdHJ1Y3RvciBwcm92aWRlZCBieSB0aGUgc3RhbmRhcmQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSByZWZzICBQYXNzZWQgdG8gdGhlIGJhc2UgZmFjZXQgY2xhc3MuCisgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIHRpbWVfZ2V0KHNpemVfdCBfX3JlZnMgPSAwKQorICAgICAgOiBmYWNldCAoX19yZWZzKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gcHJlZmVycmVkIG9yZGVyIG9mIG1vbnRoLCBkYXksIGFuZCB5ZWFyLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gZW51bSBmcm9tIHRpbWViYXNlOjpkYXRlb3JkZXIgZ2l2aW5nIHRoZQorICAgICAgICogIHByZWZlcnJlZCBvcmRlcmluZyBpZiB0aGUgZm9ybWF0IEBhIHggZ2l2ZW4gdG8gdGltZV9wdXQ6OnB1dCgpIG9ubHkKKyAgICAgICAqICB1c2VzIG1vbnRoLCBkYXksIGFuZCB5ZWFyLiAgSWYgdGhlIGZvcm1hdCBAYSB4IGZvciB0aGUgYXNzb2NpYXRlZAorICAgICAgICogIGxvY2FsZSB1c2VzIG90aGVyIGZpZWxkcywgdGhpcyBmdW5jdGlvbiByZXR1cm5zCisgICAgICAgKiAgdGltZWJhc2U6OmRhdGVvcmRlcjo6bm9vcmRlci4KKyAgICAgICAqCisgICAgICAgKiAgTk9URTogVGhlIGxpYnJhcnkgYWx3YXlzIHJldHVybnMgbm9vcmRlciBhdCB0aGUgbW9tZW50LgorICAgICAgICoKKyAgICAgICAqICBAcmV0dXJuICBBIG1lbWJlciBvZiB0aW1lYmFzZTo6ZGF0ZW9yZGVyLgorICAgICAgKi8KKyAgICAgIGRhdGVvcmRlcgorICAgICAgZGF0ZV9vcmRlcigpICBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZGF0ZV9vcmRlcigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUGFyc2UgaW5wdXQgdGltZSBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcGFyc2VzIGEgdGltZSBhY2NvcmRpbmcgdG8gdGhlIGZvcm1hdCBAYSB4IGFuZCBwdXRzIHRoZQorICAgICAgICogIHJlc3VsdHMgaW50byBhIHVzZXItc3VwcGxpZWQgc3RydWN0IHRtLiAgVGhlIHJlc3VsdCBpcyByZXR1cm5lZCBieQorICAgICAgICogIGNhbGxpbmcgdGltZV9nZXQ6OmRvX2dldF90aW1lKCkuCisgICAgICAgKgorICAgICAgICogIElmIHRoZXJlIGlzIGEgdmFsaWQgdGltZSBzdHJpbmcgYWNjb3JkaW5nIHRvIGZvcm1hdCBAYSB4LCBAYSB0bSB3aWxsCisgICAgICAgKiAgYmUgZmlsbGVkIGluIGFjY29yZGluZ2x5IGFuZCB0aGUgcmV0dXJuZWQgaXRlcmF0b3Igd2lsbCBwb2ludCB0byB0aGUKKyAgICAgICAqICBmaXJzdCBjaGFyYWN0ZXIgYmV5b25kIHRoZSB0aW1lIHN0cmluZy4gIElmIGFuIGVycm9yIG9jY3VycyBiZWZvcmUKKyAgICAgICAqICB0aGUgZW5kLCBlcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQuICBJZiBwYXJzaW5nIHJlYWRzIGFsbCB0aGUKKyAgICAgICAqICBjaGFyYWN0ZXJzLCBlcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBiZWcgIFN0YXJ0IG9mIHN0cmluZyB0byBwYXJzZS4KKyAgICAgICAqICBAcGFyYW0gIGVuZCAgRW5kIG9mIHN0cmluZyB0byBwYXJzZS4KKyAgICAgICAqICBAcGFyYW0gIGlvICBTb3VyY2Ugb2YgdGhlIGxvY2FsZS4KKyAgICAgICAqICBAcGFyYW0gIGVyciAgRXJyb3IgZmxhZ3MgdG8gc2V0LgorICAgICAgICogIEBwYXJhbSAgdG0gIFBvaW50ZXIgdG8gc3RydWN0IHRtIHRvIGZpbGwgaW4uCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgdG8gZmlyc3QgY2hhciBiZXlvbmQgdGltZSBzdHJpbmcuCisgICAgICAqLworICAgICAgaXRlcl90eXBlCisgICAgICBnZXRfdGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pICBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X3RpbWUoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBQYXJzZSBpbnB1dCBkYXRlIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBwYXJzZXMgYSBkYXRlIGFjY29yZGluZyB0byB0aGUgZm9ybWF0IEBhIFggYW5kIHB1dHMgdGhlCisgICAgICAgKiAgcmVzdWx0cyBpbnRvIGEgdXNlci1zdXBwbGllZCBzdHJ1Y3QgdG0uICBUaGUgcmVzdWx0IGlzIHJldHVybmVkIGJ5CisgICAgICAgKiAgY2FsbGluZyB0aW1lX2dldDo6ZG9fZ2V0X2RhdGUoKS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgdGhlcmUgaXMgYSB2YWxpZCBkYXRlIHN0cmluZyBhY2NvcmRpbmcgdG8gZm9ybWF0IEBhIFgsIEBhIHRtIHdpbGwKKyAgICAgICAqICBiZSBmaWxsZWQgaW4gYWNjb3JkaW5nbHkgYW5kIHRoZSByZXR1cm5lZCBpdGVyYXRvciB3aWxsIHBvaW50IHRvIHRoZQorICAgICAgICogIGZpcnN0IGNoYXJhY3RlciBiZXlvbmQgdGhlIGRhdGUgc3RyaW5nLiAgSWYgYW4gZXJyb3Igb2NjdXJzIGJlZm9yZQorICAgICAgICogIHRoZSBlbmQsIGVyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdC4gIElmIHBhcnNpbmcgcmVhZHMgYWxsIHRoZQorICAgICAgICogIGNoYXJhY3RlcnMsIGVyciB8PSBpb3NfYmFzZTo6ZW9mYml0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIGJlZyAgU3RhcnQgb2Ygc3RyaW5nIHRvIHBhcnNlLgorICAgICAgICogIEBwYXJhbSAgZW5kICBFbmQgb2Ygc3RyaW5nIHRvIHBhcnNlLgorICAgICAgICogIEBwYXJhbSAgaW8gIFNvdXJjZSBvZiB0aGUgbG9jYWxlLgorICAgICAgICogIEBwYXJhbSAgZXJyICBFcnJvciBmbGFncyB0byBzZXQuCisgICAgICAgKiAgQHBhcmFtICB0bSAgUG9pbnRlciB0byBzdHJ1Y3QgdG0gdG8gZmlsbCBpbi4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciB0byBmaXJzdCBjaGFyIGJleW9uZCBkYXRlIHN0cmluZy4KKyAgICAgICovCisgICAgICBpdGVyX3R5cGUKKyAgICAgIGdldF9kYXRlKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKKwkgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfZGF0ZShfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFBhcnNlIGlucHV0IHdlZWtkYXkgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHBhcnNlcyBhIHdlZWtkYXkgbmFtZSBhbmQgcHV0cyB0aGUgcmVzdWx0cyBpbnRvIGEKKyAgICAgICAqICB1c2VyLXN1cHBsaWVkIHN0cnVjdCB0bS4gIFRoZSByZXN1bHQgaXMgcmV0dXJuZWQgYnkgY2FsbGluZworICAgICAgICogIHRpbWVfZ2V0Ojpkb19nZXRfd2Vla2RheSgpLgorICAgICAgICoKKyAgICAgICAqICBQYXJzaW5nIHN0YXJ0cyBieSBwYXJzaW5nIGFuIGFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZS4gIElmIGEgdmFsaWQKKyAgICAgICAqICBhYmJyZXZpYXRpb24gaXMgZm9sbG93ZWQgYnkgYSBjaGFyYWN0ZXIgdGhhdCB3b3VsZCBsZWFkIHRvIHRoZSBmdWxsCisgICAgICAgKiAgd2Vla2RheSBuYW1lLCBwYXJzaW5nIGNvbnRpbnVlcyB1bnRpbCB0aGUgZnVsbCBuYW1lIGlzIGZvdW5kIG9yIGFuCisgICAgICAgKiAgZXJyb3Igb2NjdXJzLiAgT3RoZXJ3aXNlIHBhcnNpbmcgZmluaXNoZXMgYXQgdGhlIGVuZCBvZiB0aGUKKyAgICAgICAqICBhYmJyZXZpYXRlZCBuYW1lLgorICAgICAgICoKKyAgICAgICAqICBJZiBhbiBlcnJvciBvY2N1cnMgYmVmb3JlIHRoZSBlbmQsIGVyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdC4gIElmCisgICAgICAgKiAgcGFyc2luZyByZWFkcyBhbGwgdGhlIGNoYXJhY3RlcnMsIGVyciB8PSBpb3NfYmFzZTo6ZW9mYml0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIGJlZyAgU3RhcnQgb2Ygc3RyaW5nIHRvIHBhcnNlLgorICAgICAgICogIEBwYXJhbSAgZW5kICBFbmQgb2Ygc3RyaW5nIHRvIHBhcnNlLgorICAgICAgICogIEBwYXJhbSAgaW8gIFNvdXJjZSBvZiB0aGUgbG9jYWxlLgorICAgICAgICogIEBwYXJhbSAgZXJyICBFcnJvciBmbGFncyB0byBzZXQuCisgICAgICAgKiAgQHBhcmFtICB0bSAgUG9pbnRlciB0byBzdHJ1Y3QgdG0gdG8gZmlsbCBpbi4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciB0byBmaXJzdCBjaGFyIGJleW9uZCB3ZWVrZGF5IG5hbWUuCisgICAgICAqLworICAgICAgaXRlcl90eXBlCisgICAgICBnZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJCSAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF93ZWVrZGF5KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUGFyc2UgaW5wdXQgbW9udGggc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHBhcnNlcyBhIG1vbnRoIG5hbWUgYW5kIHB1dHMgdGhlIHJlc3VsdHMgaW50byBhCisgICAgICAgKiAgdXNlci1zdXBwbGllZCBzdHJ1Y3QgdG0uICBUaGUgcmVzdWx0IGlzIHJldHVybmVkIGJ5IGNhbGxpbmcKKyAgICAgICAqICB0aW1lX2dldDo6ZG9fZ2V0X21vbnRobmFtZSgpLgorICAgICAgICoKKyAgICAgICAqICBQYXJzaW5nIHN0YXJ0cyBieSBwYXJzaW5nIGFuIGFiYnJldmlhdGVkIG1vbnRoIG5hbWUuICBJZiBhIHZhbGlkCisgICAgICAgKiAgYWJicmV2aWF0aW9uIGlzIGZvbGxvd2VkIGJ5IGEgY2hhcmFjdGVyIHRoYXQgd291bGQgbGVhZCB0byB0aGUgZnVsbAorICAgICAgICogIG1vbnRoIG5hbWUsIHBhcnNpbmcgY29udGludWVzIHVudGlsIHRoZSBmdWxsIG5hbWUgaXMgZm91bmQgb3IgYW4KKyAgICAgICAqICBlcnJvciBvY2N1cnMuICBPdGhlcndpc2UgcGFyc2luZyBmaW5pc2hlcyBhdCB0aGUgZW5kIG9mIHRoZQorICAgICAgICogIGFiYnJldmlhdGVkIG5hbWUuCisgICAgICAgKgorICAgICAgICogIElmIGFuIGVycm9yIG9jY3VycyBiZWZvcmUgdGhlIGVuZCwgZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0LiAgSWYKKyAgICAgICAqICBwYXJzaW5nIHJlYWRzIGFsbCB0aGUgY2hhcmFjdGVycywgZXJyIHw9CisgICAgICAgKiAgaW9zX2Jhc2U6OmVvZmJpdC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBiZWcgIFN0YXJ0IG9mIHN0cmluZyB0byBwYXJzZS4KKyAgICAgICAqICBAcGFyYW0gIGVuZCAgRW5kIG9mIHN0cmluZyB0byBwYXJzZS4KKyAgICAgICAqICBAcGFyYW0gIGlvICBTb3VyY2Ugb2YgdGhlIGxvY2FsZS4KKyAgICAgICAqICBAcGFyYW0gIGVyciAgRXJyb3IgZmxhZ3MgdG8gc2V0LgorICAgICAgICogIEBwYXJhbSAgdG0gIFBvaW50ZXIgdG8gc3RydWN0IHRtIHRvIGZpbGwgaW4uCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgdG8gZmlyc3QgY2hhciBiZXlvbmQgbW9udGggbmFtZS4KKyAgICAgICovCisgICAgICBpdGVyX3R5cGUKKyAgICAgIGdldF9tb250aG5hbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorCQkgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF9tb250aG5hbWUoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBQYXJzZSBpbnB1dCB5ZWFyIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZWFkcyB1cCB0byA0IGNoYXJhY3RlcnMgdG8gcGFyc2UgYSB5ZWFyIHN0cmluZyBhbmQKKyAgICAgICAqICBwdXRzIHRoZSByZXN1bHRzIGludG8gYSB1c2VyLXN1cHBsaWVkIHN0cnVjdCB0bS4gIFRoZSByZXN1bHQgaXMKKyAgICAgICAqICByZXR1cm5lZCBieSBjYWxsaW5nIHRpbWVfZ2V0Ojpkb19nZXRfeWVhcigpLgorICAgICAgICoKKyAgICAgICAqICA0IGNvbnNlY3V0aXZlIGRpZ2l0cyBhcmUgaW50ZXJwcmV0ZWQgYXMgYSBmdWxsIHllYXIuICBJZiB0aGVyZSBhcmUKKyAgICAgICAqICBleGFjdGx5IDIgY29uc2VjdXRpdmUgZGlnaXRzLCB0aGUgbGlicmFyeSBpbnRlcnByZXRzIHRoaXMgYXMgdGhlCisgICAgICAgKiAgbnVtYmVyIG9mIHllYXJzIHNpbmNlIDE5MDAuCisgICAgICAgKgorICAgICAgICogIElmIGFuIGVycm9yIG9jY3VycyBiZWZvcmUgdGhlIGVuZCwgZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0LiAgSWYKKyAgICAgICAqICBwYXJzaW5nIHJlYWRzIGFsbCB0aGUgY2hhcmFjdGVycywgZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgYmVnICBTdGFydCBvZiBzdHJpbmcgdG8gcGFyc2UuCisgICAgICAgKiAgQHBhcmFtICBlbmQgIEVuZCBvZiBzdHJpbmcgdG8gcGFyc2UuCisgICAgICAgKiAgQHBhcmFtICBpbyAgU291cmNlIG9mIHRoZSBsb2NhbGUuCisgICAgICAgKiAgQHBhcmFtICBlcnIgIEVycm9yIGZsYWdzIHRvIHNldC4KKyAgICAgICAqICBAcGFyYW0gIHRtICBQb2ludGVyIHRvIHN0cnVjdCB0bSB0byBmaWxsIGluLgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIHRvIGZpcnN0IGNoYXIgYmV5b25kIHllYXIuCisgICAgICAqLworICAgICAgaXRlcl90eXBlCisgICAgICBnZXRfeWVhcihpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfeWVhcihfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgLy8vIERlc3RydWN0b3IuCisgICAgICB2aXJ0dWFsCisgICAgICB+dGltZV9nZXQoKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gcHJlZmVycmVkIG9yZGVyIG9mIG1vbnRoLCBkYXksIGFuZCB5ZWFyLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gZW51bSBmcm9tIHRpbWViYXNlOjpkYXRlb3JkZXIgZ2l2aW5nIHRoZQorICAgICAgICogIHByZWZlcnJlZCBvcmRlcmluZyBpZiB0aGUgZm9ybWF0IEBhIHggZ2l2ZW4gdG8gdGltZV9wdXQ6OnB1dCgpIG9ubHkKKyAgICAgICAqICB1c2VzIG1vbnRoLCBkYXksIGFuZCB5ZWFyLiAgVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sgZm9yIGRlcml2ZWQKKyAgICAgICAqICBjbGFzc2VzIHRvIGNoYW5nZSB0aGUgdmFsdWUgcmV0dXJuZWQuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gIEEgbWVtYmVyIG9mIHRpbWViYXNlOjpkYXRlb3JkZXIuCisgICAgICAqLworICAgICAgdmlydHVhbCBkYXRlb3JkZXIKKyAgICAgIGRvX2RhdGVfb3JkZXIoKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBQYXJzZSBpbnB1dCB0aW1lIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBwYXJzZXMgYSB0aW1lIGFjY29yZGluZyB0byB0aGUgZm9ybWF0IEBhIHggYW5kIHB1dHMgdGhlCisgICAgICAgKiAgcmVzdWx0cyBpbnRvIGEgdXNlci1zdXBwbGllZCBzdHJ1Y3QgdG0uICBUaGlzIGZ1bmN0aW9uIGlzIGEgaG9vayBmb3IKKyAgICAgICAqICBkZXJpdmVkIGNsYXNzZXMgdG8gY2hhbmdlIHRoZSB2YWx1ZSByZXR1cm5lZC4gIEBzZWUgZ2V0X3RpbWUoKSBmb3IKKyAgICAgICAqICBkZXRhaWxzLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIGJlZyAgU3RhcnQgb2Ygc3RyaW5nIHRvIHBhcnNlLgorICAgICAgICogIEBwYXJhbSAgZW5kICBFbmQgb2Ygc3RyaW5nIHRvIHBhcnNlLgorICAgICAgICogIEBwYXJhbSAgaW8gIFNvdXJjZSBvZiB0aGUgbG9jYWxlLgorICAgICAgICogIEBwYXJhbSAgZXJyICBFcnJvciBmbGFncyB0byBzZXQuCisgICAgICAgKiAgQHBhcmFtICB0bSAgUG9pbnRlciB0byBzdHJ1Y3QgdG0gdG8gZmlsbCBpbi4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciB0byBmaXJzdCBjaGFyIGJleW9uZCB0aW1lIHN0cmluZy4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQorICAgICAgZG9fZ2V0X3RpbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorCQkgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFBhcnNlIGlucHV0IGRhdGUgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHBhcnNlcyBhIGRhdGUgYWNjb3JkaW5nIHRvIHRoZSBmb3JtYXQgQGEgWCBhbmQgcHV0cyB0aGUKKyAgICAgICAqICByZXN1bHRzIGludG8gYSB1c2VyLXN1cHBsaWVkIHN0cnVjdCB0bS4gIFRoaXMgZnVuY3Rpb24gaXMgYSBob29rIGZvcgorICAgICAgICogIGRlcml2ZWQgY2xhc3NlcyB0byBjaGFuZ2UgdGhlIHZhbHVlIHJldHVybmVkLiAgQHNlZSBnZXRfZGF0ZSgpIGZvcgorICAgICAgICogIGRldGFpbHMuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgYmVnICBTdGFydCBvZiBzdHJpbmcgdG8gcGFyc2UuCisgICAgICAgKiAgQHBhcmFtICBlbmQgIEVuZCBvZiBzdHJpbmcgdG8gcGFyc2UuCisgICAgICAgKiAgQHBhcmFtICBpbyAgU291cmNlIG9mIHRoZSBsb2NhbGUuCisgICAgICAgKiAgQHBhcmFtICBlcnIgIEVycm9yIGZsYWdzIHRvIHNldC4KKyAgICAgICAqICBAcGFyYW0gIHRtICBQb2ludGVyIHRvIHN0cnVjdCB0bSB0byBmaWxsIGluLgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIHRvIGZpcnN0IGNoYXIgYmV5b25kIGRhdGUgc3RyaW5nLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19nZXRfZGF0ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJCSAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUGFyc2UgaW5wdXQgd2Vla2RheSBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcGFyc2VzIGEgd2Vla2RheSBuYW1lIGFuZCBwdXRzIHRoZSByZXN1bHRzIGludG8gYQorICAgICAgICogIHVzZXItc3VwcGxpZWQgc3RydWN0IHRtLiAgVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sgZm9yIGRlcml2ZWQKKyAgICAgICAqICBjbGFzc2VzIHRvIGNoYW5nZSB0aGUgdmFsdWUgcmV0dXJuZWQuICBAc2VlIGdldF93ZWVrZGF5KCkgZm9yCisgICAgICAgKiAgZGV0YWlscy4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBiZWcgIFN0YXJ0IG9mIHN0cmluZyB0byBwYXJzZS4KKyAgICAgICAqICBAcGFyYW0gIGVuZCAgRW5kIG9mIHN0cmluZyB0byBwYXJzZS4KKyAgICAgICAqICBAcGFyYW0gIGlvICBTb3VyY2Ugb2YgdGhlIGxvY2FsZS4KKyAgICAgICAqICBAcGFyYW0gIGVyciAgRXJyb3IgZmxhZ3MgdG8gc2V0LgorICAgICAgICogIEBwYXJhbSAgdG0gIFBvaW50ZXIgdG8gc3RydWN0IHRtIHRvIGZpbGwgaW4uCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgdG8gZmlyc3QgY2hhciBiZXlvbmQgd2Vla2RheSBuYW1lLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19nZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmLAorCQkgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFBhcnNlIGlucHV0IG1vbnRoIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBwYXJzZXMgYSBtb250aCBuYW1lIGFuZCBwdXRzIHRoZSByZXN1bHRzIGludG8gYQorICAgICAgICogIHVzZXItc3VwcGxpZWQgc3RydWN0IHRtLiAgVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sgZm9yIGRlcml2ZWQKKyAgICAgICAqICBjbGFzc2VzIHRvIGNoYW5nZSB0aGUgdmFsdWUgcmV0dXJuZWQuICBAc2VlIGdldF9tb250aG5hbWUoKSBmb3IKKyAgICAgICAqICBkZXRhaWxzLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIGJlZyAgU3RhcnQgb2Ygc3RyaW5nIHRvIHBhcnNlLgorICAgICAgICogIEBwYXJhbSAgZW5kICBFbmQgb2Ygc3RyaW5nIHRvIHBhcnNlLgorICAgICAgICogIEBwYXJhbSAgaW8gIFNvdXJjZSBvZiB0aGUgbG9jYWxlLgorICAgICAgICogIEBwYXJhbSAgZXJyICBFcnJvciBmbGFncyB0byBzZXQuCisgICAgICAgKiAgQHBhcmFtICB0bSAgUG9pbnRlciB0byBzdHJ1Y3QgdG0gdG8gZmlsbCBpbi4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciB0byBmaXJzdCBjaGFyIGJleW9uZCBtb250aCBuYW1lLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYsCisJCSAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBQYXJzZSBpbnB1dCB5ZWFyIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZWFkcyB1cCB0byA0IGNoYXJhY3RlcnMgdG8gcGFyc2UgYSB5ZWFyIHN0cmluZyBhbmQKKyAgICAgICAqICBwdXRzIHRoZSByZXN1bHRzIGludG8gYSB1c2VyLXN1cHBsaWVkIHN0cnVjdCB0bS4gIFRoaXMgZnVuY3Rpb24gaXMgYQorICAgICAgICogIGhvb2sgZm9yIGRlcml2ZWQgY2xhc3NlcyB0byBjaGFuZ2UgdGhlIHZhbHVlIHJldHVybmVkLiAgQHNlZQorICAgICAgICogIGdldF95ZWFyKCkgZm9yIGRldGFpbHMuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgYmVnICBTdGFydCBvZiBzdHJpbmcgdG8gcGFyc2UuCisgICAgICAgKiAgQHBhcmFtICBlbmQgIEVuZCBvZiBzdHJpbmcgdG8gcGFyc2UuCisgICAgICAgKiAgQHBhcmFtICBpbyAgU291cmNlIG9mIHRoZSBsb2NhbGUuCisgICAgICAgKiAgQHBhcmFtICBlcnIgIEVycm9yIGZsYWdzIHRvIHNldC4KKyAgICAgICAqICBAcGFyYW0gIHRtICBQb2ludGVyIHRvIHN0cnVjdCB0bSB0byBmaWxsIGluLgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIHRvIGZpcnN0IGNoYXIgYmV5b25kIHllYXIuCisgICAgICAqLworICAgICAgdmlydHVhbCBpdGVyX3R5cGUKKyAgICAgIGRvX2dldF95ZWFyKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKKwkJICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKKworICAgICAgLy8gRXh0cmFjdCBudW1lcmljIGNvbXBvbmVudCBvZiBsZW5ndGggX19sZW4uCisgICAgICBpdGVyX3R5cGUKKyAgICAgIF9NX2V4dHJhY3RfbnVtKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpbnQmIF9fbWVtYmVyLAorCQkgICAgIGludCBfX21pbiwgaW50IF9fbWF4LCBzaXplX3QgX19sZW4sCisJCSAgICAgaW9zX2Jhc2UmIF9faW8sIGlvc19iYXNlOjppb3N0YXRlJiBfX2VycikgY29uc3Q7CisKKyAgICAgIC8vIEV4dHJhY3QgYW55IHVuaXF1ZSBhcnJheSBvZiBzdHJpbmcgbGl0ZXJhbHMgaW4gYSBjb25zdCBfQ2hhclQqIGFycmF5LgorICAgICAgaXRlcl90eXBlCisgICAgICBfTV9leHRyYWN0X25hbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGludCYgX19tZW1iZXIsCisJCSAgICAgIGNvbnN0IF9DaGFyVCoqIF9fbmFtZXMsIHNpemVfdCBfX2luZGV4bGVuLAorCQkgICAgICBpb3NfYmFzZSYgX19pbywgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdDsKKworICAgICAgLy8gRXh0cmFjdCBkYXkgb3IgbW9udGggbmFtZSBpbiBhIGNvbnN0IF9DaGFyVCogYXJyYXkuCisgICAgICBpdGVyX3R5cGUKKyAgICAgIF9NX2V4dHJhY3Rfd2RheV9vcl9tb250aChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW50JiBfX21lbWJlciwKKwkJCSAgICAgICBjb25zdCBfQ2hhclQqKiBfX25hbWVzLCBzaXplX3QgX19pbmRleGxlbiwKKwkJCSAgICAgICBpb3NfYmFzZSYgX19pbywgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdDsKKworICAgICAgLy8gRXh0cmFjdCBvbiBhIGNvbXBvbmVudC1ieS1jb21wb25lbnQgYmFzaXMsIHZpYSBfX2Zvcm1hdCBhcmd1bWVudC4KKyAgICAgIGl0ZXJfdHlwZQorICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKKwkJCSAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtLAorCQkJICAgIGNvbnN0IF9DaGFyVCogX19mb3JtYXQpIGNvbnN0OworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgorICAgIGxvY2FsZTo6aWQgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CisKKyAgLy8vIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZSBbMjIuMi41LjJdLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CisgICAgY2xhc3MgdGltZV9nZXRfYnluYW1lIDogcHVibGljIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gVHlwZXM6CisgICAgICB0eXBlZGVmIF9DaGFyVAkJCWNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0luSXRlcgkJCWl0ZXJfdHlwZTsKKworICAgICAgZXhwbGljaXQKKyAgICAgIHRpbWVfZ2V0X2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApCisgICAgICA6IHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj4oX19yZWZzKSB7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIHZpcnR1YWwKKyAgICAgIH50aW1lX2dldF9ieW5hbWUoKSB7IH0KKyAgICB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBQcmltYXJ5IGNsYXNzIHRlbXBsYXRlIHRpbWVfcHV0LgorICAgKiAgQGluZ3JvdXAgbG9jYWxlcworICAgKgorICAgKiAgVGhpcyBmYWNldCBlbmNhcHN1bGF0ZXMgdGhlIGNvZGUgdG8gZm9ybWF0IGFuZCBvdXRwdXQgZGF0ZXMgYW5kIHRpbWVzCisgICAqICBhY2NvcmRpbmcgdG8gZm9ybWF0cyB1c2VkIGJ5IHN0cmZ0aW1lKCkuCisgICAqCisgICAqICBUaGUgdGltZV9wdXQgdGVtcGxhdGUgdXNlcyBwcm90ZWN0ZWQgdmlydHVhbCBmdW5jdGlvbnMgdG8gcHJvdmlkZSB0aGUKKyAgICogIGFjdHVhbCByZXN1bHRzLiAgVGhlIHB1YmxpYyBhY2Nlc3NvcnMgZm9yd2FyZCB0aGUgY2FsbCB0byB0aGUgdmlydHVhbAorICAgKiAgZnVuY3Rpb25zLiAgVGhlc2UgdmlydHVhbCBmdW5jdGlvbnMgYXJlIGhvb2tzIGZvciBkZXZlbG9wZXJzIHRvCisgICAqICBpbXBsZW1lbnQgdGhlIGJlaGF2aW9yIHRoZXkgcmVxdWlyZSBmcm9tIHRoZSB0aW1lX3B1dCBmYWNldC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KKyAgICBjbGFzcyB0aW1lX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIFR5cGVzOgorICAgICAgLy9AeworICAgICAgLy8vIFB1YmxpYyB0eXBlZGVmcworICAgICAgdHlwZWRlZiBfQ2hhclQJCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIF9PdXRJdGVyCQkJaXRlcl90eXBlOworICAgICAgLy9AfQorCisgICAgICAvLy8gTnVtcHVuY3QgZmFjZXQgaWQuCisgICAgICBzdGF0aWMgbG9jYWxlOjppZAkJCWlkOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdG9yIHBlcmZvcm1zIGluaXRpYWxpemF0aW9uLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGlzIHRoZSBjb25zdHJ1Y3RvciBwcm92aWRlZCBieSB0aGUgc3RhbmRhcmQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSByZWZzICBQYXNzZWQgdG8gdGhlIGJhc2UgZmFjZXQgY2xhc3MuCisgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIHRpbWVfcHV0KHNpemVfdCBfX3JlZnMgPSAwKQorICAgICAgOiBmYWNldChfX3JlZnMpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZvcm1hdCBhbmQgb3V0cHV0IGEgdGltZSBvciBkYXRlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGZvcm1hdHMgdGhlIGRhdGEgaW4gc3RydWN0IHRtIGFjY29yZGluZyB0byB0aGUKKyAgICAgICAqICBwcm92aWRlZCBmb3JtYXQgc3RyaW5nLiAgVGhlIGZvcm1hdCBzdHJpbmcgaXMgaW50ZXJwcmV0ZWQgYXMgYnkKKyAgICAgICAqICBzdHJmdGltZSgpLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIHMgIFRoZSBzdHJlYW0gdG8gd3JpdGUgdG8uCisgICAgICAgKiAgQHBhcmFtICBpbyAgU291cmNlIG9mIGxvY2FsZS4KKyAgICAgICAqICBAcGFyYW0gIGZpbGwgIGNoYXJfdHlwZSB0byB1c2UgZm9yIHBhZGRpbmcuCisgICAgICAgKiAgQHBhcmFtICB0bSAgU3RydWN0IHRtIHdpdGggZGF0ZSBhbmQgdGltZSBpbmZvIHRvIGZvcm1hdC4KKyAgICAgICAqICBAcGFyYW0gIGJlZyAgU3RhcnQgb2YgZm9ybWF0IHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gIGVuZCAgRW5kIG9mIGZvcm1hdCBzdHJpbmcuCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgYWZ0ZXIgd3JpdGluZy4KKyAgICAgICAqLworICAgICAgaXRlcl90eXBlCisgICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHRtKiBfX3RtLAorCSAgY29uc3QgX0NoYXJUKiBfX2JlZywgY29uc3QgX0NoYXJUKiBfX2VuZCkgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRm9ybWF0IGFuZCBvdXRwdXQgYSB0aW1lIG9yIGRhdGUuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZm9ybWF0cyB0aGUgZGF0YSBpbiBzdHJ1Y3QgdG0gYWNjb3JkaW5nIHRvIHRoZQorICAgICAgICogIHByb3ZpZGVkIGZvcm1hdCBjaGFyIGFuZCBvcHRpb25hbCBtb2RpZmllci4gIFRoZSBmb3JtYXQgYW5kIG1vZGlmaWVyCisgICAgICAgKiAgYXJlIGludGVycHJldGVkIGFzIGJ5IHN0cmZ0aW1lKCkuICBJdCBkb2VzIHNvIGJ5IHJldHVybmluZworICAgICAgICogIHRpbWVfcHV0Ojpkb19wdXQoKS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBzICBUaGUgc3RyZWFtIHRvIHdyaXRlIHRvLgorICAgICAgICogIEBwYXJhbSAgaW8gIFNvdXJjZSBvZiBsb2NhbGUuCisgICAgICAgKiAgQHBhcmFtICBmaWxsICBjaGFyX3R5cGUgdG8gdXNlIGZvciBwYWRkaW5nLgorICAgICAgICogIEBwYXJhbSAgdG0gIFN0cnVjdCB0bSB3aXRoIGRhdGUgYW5kIHRpbWUgaW5mbyB0byBmb3JtYXQuCisgICAgICAgKiAgQHBhcmFtICBmb3JtYXQgIEZvcm1hdCBjaGFyLgorICAgICAgICogIEBwYXJhbSAgbW9kICBPcHRpb25hbCBtb2RpZmllciBjaGFyLgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIGFmdGVyIHdyaXRpbmcuCisgICAgICAgKi8KKyAgICAgIGl0ZXJfdHlwZQorICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAorCSAgY29uc3QgdG0qIF9fdG0sIGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2QgPSAwKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbywgX19maWxsLCBfX3RtLCBfX2Zvcm1hdCwgX19tb2QpOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvLy8gRGVzdHJ1Y3Rvci4KKyAgICAgIHZpcnR1YWwKKyAgICAgIH50aW1lX3B1dCgpCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGb3JtYXQgYW5kIG91dHB1dCBhIHRpbWUgb3IgZGF0ZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBmb3JtYXRzIHRoZSBkYXRhIGluIHN0cnVjdCB0bSBhY2NvcmRpbmcgdG8gdGhlCisgICAgICAgKiAgcHJvdmlkZWQgZm9ybWF0IGNoYXIgYW5kIG9wdGlvbmFsIG1vZGlmaWVyLiAgVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sKKyAgICAgICAqICBmb3IgZGVyaXZlZCBjbGFzc2VzIHRvIGNoYW5nZSB0aGUgdmFsdWUgcmV0dXJuZWQuICBAc2VlIHB1dCgpIGZvcgorICAgICAgICogIG1vcmUgZGV0YWlscy4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBzICBUaGUgc3RyZWFtIHRvIHdyaXRlIHRvLgorICAgICAgICogIEBwYXJhbSAgaW8gIFNvdXJjZSBvZiBsb2NhbGUuCisgICAgICAgKiAgQHBhcmFtICBmaWxsICBjaGFyX3R5cGUgdG8gdXNlIGZvciBwYWRkaW5nLgorICAgICAgICogIEBwYXJhbSAgdG0gIFN0cnVjdCB0bSB3aXRoIGRhdGUgYW5kIHRpbWUgaW5mbyB0byBmb3JtYXQuCisgICAgICAgKiAgQHBhcmFtICBmb3JtYXQgIEZvcm1hdCBjaGFyLgorICAgICAgICogIEBwYXJhbSAgbW9kICBPcHRpb25hbCBtb2RpZmllciBjaGFyLgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIGFmdGVyIHdyaXRpbmcuCisgICAgICAgKi8KKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHRtKiBfX3RtLAorCSAgICAgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZCkgY29uc3Q7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgorICAgIGxvY2FsZTo6aWQgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOworCisgIC8vLyBjbGFzcyB0aW1lX3B1dF9ieW5hbWUgWzIyLjIuNS40XS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KKyAgICBjbGFzcyB0aW1lX3B1dF9ieW5hbWUgOiBwdWJsaWMgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gVHlwZXM6CisgICAgICB0eXBlZGVmIF9DaGFyVAkJCWNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgX091dEl0ZXIJCQlpdGVyX3R5cGU7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICB0aW1lX3B1dF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKQorICAgICAgOiB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPihfX3JlZnMpCisgICAgICB7IH07CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB2aXJ0dWFsCisgICAgICB+dGltZV9wdXRfYnluYW1lKCkgeyB9CisgICAgfTsKKworCisgIC8qKgorICAgKiAgQGJyaWVmICBNb25leSBmb3JtYXQgb3JkZXJpbmcgZGF0YS4KKyAgICogIEBpbmdyb3VwIGxvY2FsZXMKKyAgICoKKyAgICogIFRoaXMgY2xhc3MgY29udGFpbnMgYW4gb3JkZXJlZCBhcnJheSBvZiA0IGZpZWxkcyB0byByZXByZXNlbnQgdGhlCisgICAqICBwYXR0ZXJuIGZvciBmb3JtYXR0aW5nIGEgbW9uZXkgYW1vdW50LiAgRWFjaCBmaWVsZCBtYXkgY29udGFpbiBvbmUgZW50cnkKKyAgICogIGZyb20gdGhlIHBhcnQgZW51bS4gIHN5bWJvbCwgc2lnbiwgYW5kIHZhbHVlIG11c3QgYmUgcHJlc2VudCBhbmQgdGhlCisgICAqICByZW1haW5pbmcgZmllbGQgbXVzdCBjb250YWluIGVpdGhlciBub25lIG9yIHNwYWNlLiAgQHNlZQorICAgKiAgbW9uZXlwdW5jdDo6cG9zX2Zvcm1hdCgpIGFuZCBtb25leXB1bmN0OjpuZWdfZm9ybWF0KCkgZm9yIGRldGFpbHMgb2YgaG93CisgICAqICB0aGVzZSBmaWVsZHMgYXJlIGludGVycHJldGVkLgorICAqLworICBjbGFzcyBtb25leV9iYXNlCisgIHsKKyAgcHVibGljOgorICAgIGVudW0gcGFydCB7IG5vbmUsIHNwYWNlLCBzeW1ib2wsIHNpZ24sIHZhbHVlIH07CisgICAgc3RydWN0IHBhdHRlcm4geyBjaGFyIGZpZWxkWzRdOyB9OworCisgICAgc3RhdGljIGNvbnN0IHBhdHRlcm4gX1NfZGVmYXVsdF9wYXR0ZXJuOworCisgICAgZW51bQorICAgIHsKKyAgICAgIF9TX21pbnVzLAorICAgICAgX1NfemVybywKKyAgICAgIF9TX2VuZCA9IDExCisgICAgfTsKKworICAgIC8vIFN0cmluZyBsaXRlcmFsIG9mIGFjY2VwdGFibGUgKG5hcnJvdykgaW5wdXQvb3V0cHV0LCBmb3IKKyAgICAvLyBtb25leV9nZXQvbW9uZXlfcHV0LiAiLTAxMjM0NTY3ODkiCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIF9TX2F0b21zOworCisgICAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6CisgICAgLy8gc3BhY2Ugbm9uZSBzeW1ib2wgc2lnbiB2YWx1ZQorICAgIF9HTElCQ1hYX0NPTlNUIHN0YXRpYyBwYXR0ZXJuCisgICAgX1NfY29uc3RydWN0X3BhdHRlcm4oY2hhciBfX3ByZWNlZGVzLCBjaGFyIF9fc3BhY2UsIGNoYXIgX19wb3NuKSB0aHJvdyAoKTsKKyAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CisgICAgc3RydWN0IF9fbW9uZXlwdW5jdF9jYWNoZSA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CisgICAgeworICAgICAgY29uc3QgY2hhcioJCQlfTV9ncm91cGluZzsKKyAgICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9ncm91cGluZ19zaXplOworICAgICAgYm9vbAkJCQlfTV91c2VfZ3JvdXBpbmc7CisgICAgICBfQ2hhclQJCQkJX01fZGVjaW1hbF9wb2ludDsKKyAgICAgIF9DaGFyVAkJCQlfTV90aG91c2FuZHNfc2VwOworICAgICAgY29uc3QgX0NoYXJUKgkJCV9NX2N1cnJfc3ltYm9sOworICAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2N1cnJfc3ltYm9sX3NpemU7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fcG9zaXRpdmVfc2lnbjsKKyAgICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9wb3NpdGl2ZV9zaWduX3NpemU7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fbmVnYXRpdmVfc2lnbjsKKyAgICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9uZWdhdGl2ZV9zaWduX3NpemU7CisgICAgICBpbnQJCQkJX01fZnJhY19kaWdpdHM7CisgICAgICBtb25leV9iYXNlOjpwYXR0ZXJuCQlfTV9wb3NfZm9ybWF0OworICAgICAgbW9uZXlfYmFzZTo6cGF0dGVybgkgICAgICAgIF9NX25lZ19mb3JtYXQ7CisKKyAgICAgIC8vIEEgbGlzdCBvZiB2YWxpZCBudW1lcmljIGxpdGVyYWxzIGZvciBpbnB1dCBhbmQgb3V0cHV0OiBpbiB0aGUgc3RhbmRhcmQKKyAgICAgIC8vICJDIiBsb2NhbGUsIHRoaXMgaXMgIi0wMTIzNDU2Nzg5Ii4gVGhpcyBhcnJheSBjb250YWlucyB0aGUgY2hhcnMgYWZ0ZXIKKyAgICAgIC8vIGhhdmluZyBiZWVuIHBhc3NlZCB0aHJvdWdoIHRoZSBjdXJyZW50IGxvY2FsZSdzIGN0eXBlPF9DaGFyVD4ud2lkZW4oKS4KKyAgICAgIF9DaGFyVAkJCQlfTV9hdG9tc1ttb25leV9iYXNlOjpfU19lbmRdOworCisgICAgICBib29sCQkJCV9NX2FsbG9jYXRlZDsKKworICAgICAgX19tb25leXB1bmN0X2NhY2hlKHNpemVfdCBfX3JlZnMgPSAwKSA6IGZhY2V0KF9fcmVmcyksCisgICAgICBfTV9ncm91cGluZyhOVUxMKSwgX01fZ3JvdXBpbmdfc2l6ZSgwKSwgX01fdXNlX2dyb3VwaW5nKGZhbHNlKSwKKyAgICAgIF9NX2RlY2ltYWxfcG9pbnQoX0NoYXJUKCkpLCBfTV90aG91c2FuZHNfc2VwKF9DaGFyVCgpKSwKKyAgICAgIF9NX2N1cnJfc3ltYm9sKE5VTEwpLCBfTV9jdXJyX3N5bWJvbF9zaXplKDApLAorICAgICAgX01fcG9zaXRpdmVfc2lnbihOVUxMKSwgX01fcG9zaXRpdmVfc2lnbl9zaXplKDApLAorICAgICAgX01fbmVnYXRpdmVfc2lnbihOVUxMKSwgX01fbmVnYXRpdmVfc2lnbl9zaXplKDApLAorICAgICAgX01fZnJhY19kaWdpdHMoMCksCisgICAgICBfTV9wb3NfZm9ybWF0KG1vbmV5X2Jhc2U6OnBhdHRlcm4oKSksCisgICAgICBfTV9uZWdfZm9ybWF0KG1vbmV5X2Jhc2U6OnBhdHRlcm4oKSksIF9NX2FsbG9jYXRlZChmYWxzZSkKKyAgICAgIHsgfQorCisgICAgICB+X19tb25leXB1bmN0X2NhY2hlKCk7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2NhY2hlKGNvbnN0IGxvY2FsZSYgX19sb2MpOworCisgICAgcHJpdmF0ZToKKyAgICAgIF9fbW9uZXlwdW5jdF9jYWNoZSYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfX21vbmV5cHVuY3RfY2FjaGUmKTsKKyAgICAgIAorICAgICAgZXhwbGljaXQKKyAgICAgIF9fbW9uZXlwdW5jdF9jYWNoZShjb25zdCBfX21vbmV5cHVuY3RfY2FjaGUmKTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KKyAgICBfX21vbmV5cHVuY3RfY2FjaGU8X0NoYXJULCBfSW50bD46On5fX21vbmV5cHVuY3RfY2FjaGUoKQorICAgIHsKKyAgICAgIGlmIChfTV9hbGxvY2F0ZWQpCisJeworCSAgZGVsZXRlIFtdIF9NX2dyb3VwaW5nOworCSAgZGVsZXRlIFtdIF9NX2N1cnJfc3ltYm9sOworCSAgZGVsZXRlIFtdIF9NX3Bvc2l0aXZlX3NpZ247CisJICBkZWxldGUgW10gX01fbmVnYXRpdmVfc2lnbjsKKwl9CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBQcmltYXJ5IGNsYXNzIHRlbXBsYXRlIG1vbmV5cHVuY3QuCisgICAqICBAaW5ncm91cCBsb2NhbGVzCisgICAqCisgICAqICBUaGlzIGZhY2V0IGVuY2Fwc3VsYXRlcyB0aGUgcHVuY3R1YXRpb24sIGdyb3VwaW5nIGFuZCBvdGhlciBmb3JtYXR0aW5nCisgICAqICBmZWF0dXJlcyBvZiBtb25leSBhbW91bnQgc3RyaW5nIHJlcHJlc2VudGF0aW9ucy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgorICAgIGNsYXNzIG1vbmV5cHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIG1vbmV5X2Jhc2UKKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gVHlwZXM6CisgICAgICAvL0B7CisgICAgICAvLy8gUHVibGljIHR5cGVkZWZzCisgICAgICB0eXBlZGVmIF9DaGFyVAkJCWNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4Jc3RyaW5nX3R5cGU7CisgICAgICAvL0B9CisgICAgICB0eXBlZGVmIF9fbW9uZXlwdW5jdF9jYWNoZTxfQ2hhclQsIF9JbnRsPiAgICAgX19jYWNoZV90eXBlOworCisgICAgcHJpdmF0ZToKKyAgICAgIF9fY2FjaGVfdHlwZSoJCQlfTV9kYXRhOworCisgICAgcHVibGljOgorICAgICAgLy8vIFRoaXMgdmFsdWUgaXMgcHJvdmlkZWQgYnkgdGhlIHN0YW5kYXJkLCBidXQgbm8gcmVhc29uIGZvciBpdHMKKyAgICAgIC8vLyBleGlzdGVuY2UuCisgICAgICBzdGF0aWMgY29uc3QgYm9vbAkJCWludGwgPSBfSW50bDsKKyAgICAgIC8vLyBOdW1wdW5jdCBmYWNldCBpZC4KKyAgICAgIHN0YXRpYyBsb2NhbGU6OmlkCQkJaWQ7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0b3IgcGVyZm9ybXMgaW5pdGlhbGl6YXRpb24uCisgICAgICAgKgorICAgICAgICogIFRoaXMgaXMgdGhlIGNvbnN0cnVjdG9yIHByb3ZpZGVkIGJ5IHRoZSBzdGFuZGFyZC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIHJlZnMgIFBhc3NlZCB0byB0aGUgYmFzZSBmYWNldCBjbGFzcy4KKyAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgbW9uZXlwdW5jdChzaXplX3QgX19yZWZzID0gMCkgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpCisgICAgICB7IF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0b3IgcGVyZm9ybXMgaW5pdGlhbGl6YXRpb24uCisgICAgICAgKgorICAgICAgICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29uc3RydWN0b3IuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBjYWNoZSAgQ2FjaGUgZm9yIG9wdGltaXphdGlvbi4KKyAgICAgICAqICBAcGFyYW0gcmVmcyAgUGFzc2VkIHRvIHRoZSBiYXNlIGZhY2V0IGNsYXNzLgorICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBtb25leXB1bmN0KF9fY2FjaGVfdHlwZSogX19jYWNoZSwgc2l6ZV90IF9fcmVmcyA9IDApCisgICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoX19jYWNoZSkKKyAgICAgIHsgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnRlcm5hbCBjb25zdHJ1Y3Rvci4gTm90IGZvciBnZW5lcmFsIHVzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyBhIGNvbnN0cnVjdG9yIGZvciB1c2UgYnkgdGhlIGxpYnJhcnkgaXRzZWxmIHRvIHNldCB1cCBuZXcKKyAgICAgICAqICBsb2NhbGVzLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gY2xvYyAgVGhlIEMgbG9jYWxlLgorICAgICAgICogIEBwYXJhbSBzICBUaGUgbmFtZSBvZiBhIGxvY2FsZS4KKyAgICAgICAqICBAcGFyYW0gcmVmcyAgUGFzc2VkIHRvIHRoZSBiYXNlIGZhY2V0IGNsYXNzLgorICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBtb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQorICAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpCisgICAgICB7IF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2Nsb2MsIF9fcyk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gZGVjaW1hbCBwb2ludCBjaGFyYWN0ZXIuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGNoYXJfdHlwZSB0byB1c2UgYXMgYSBkZWNpbWFsIHBvaW50LiAgSXQKKyAgICAgICAqICBkb2VzIHNvIGJ5IHJldHVybmluZyByZXR1cm5pbmcKKyAgICAgICAqICBtb25leXB1bmN0PGNoYXJfdHlwZT46OmRvX2RlY2ltYWxfcG9pbnQoKS4KKyAgICAgICAqCisgICAgICAgKiAgQHJldHVybiAgQGEgY2hhcl90eXBlIHJlcHJlc2VudGluZyBhIGRlY2ltYWwgcG9pbnQuCisgICAgICAqLworICAgICAgY2hhcl90eXBlCisgICAgICBkZWNpbWFsX3BvaW50KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxfcG9pbnQoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiB0aG91c2FuZHMgc2VwYXJhdG9yIGNoYXJhY3Rlci4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgY2hhcl90eXBlIHRvIHVzZSBhcyBhIHRob3VzYW5kcworICAgICAgICogIHNlcGFyYXRvci4gIEl0IGRvZXMgc28gYnkgcmV0dXJuaW5nIHJldHVybmluZworICAgICAgICogIG1vbmV5cHVuY3Q8Y2hhcl90eXBlPjo6ZG9fdGhvdXNhbmRzX3NlcCgpLgorICAgICAgICoKKyAgICAgICAqICBAcmV0dXJuICBjaGFyX3R5cGUgcmVwcmVzZW50aW5nIGEgdGhvdXNhbmRzIHNlcGFyYXRvci4KKyAgICAgICovCisgICAgICBjaGFyX3R5cGUKKyAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdGhvdXNhbmRzX3NlcCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIGdyb3VwaW5nIHNwZWNpZmljYXRpb24uCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRpbmcgZ3JvdXBpbmdzIGZvciB0aGUKKyAgICAgICAqICBpbnRlZ2VyIHBhcnQgb2YgYW4gYW1vdW50LiAgR3JvdXBpbmdzIGluZGljYXRlIHdoZXJlIHRob3VzYW5kcworICAgICAgICogIHNlcGFyYXRvcnMgc2hvdWxkIGJlIGluc2VydGVkLgorICAgICAgICoKKyAgICAgICAqICBFYWNoIGNoYXIgaW4gdGhlIHJldHVybiBzdHJpbmcgaXMgaW50ZXJwcmV0IGFzIGFuIGludGVnZXIgcmF0aGVyCisgICAgICAgKiAgdGhhbiBhIGNoYXJhY3Rlci4gIFRoZXNlIG51bWJlcnMgcmVwcmVzZW50IHRoZSBudW1iZXIgb2YgZGlnaXRzIGluIGEKKyAgICAgICAqICBncm91cC4gIFRoZSBmaXJzdCBjaGFyIGluIHRoZSBzdHJpbmcgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGRpZ2l0cworICAgICAgICogIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBncm91cC4gIElmIGEgY2hhciBpcyBuZWdhdGl2ZSwgaXQgaW5kaWNhdGVzCisgICAgICAgKiAgYW4gdW5saW1pdGVkIG51bWJlciBvZiBkaWdpdHMgZm9yIHRoZSBncm91cC4gIElmIG1vcmUgY2hhcnMgZnJvbSB0aGUKKyAgICAgICAqICBzdHJpbmcgYXJlIHJlcXVpcmVkIHRvIGdyb3VwIGEgbnVtYmVyLCB0aGUgbGFzdCBjaGFyIGlzIHVzZWQKKyAgICAgICAqICByZXBlYXRlZGx5LgorICAgICAgICoKKyAgICAgICAqICBGb3IgZXhhbXBsZSwgaWYgdGhlIGdyb3VwaW5nKCkgcmV0dXJucyA8Y29kZT5cMDAzXDAwMjwvY29kZT4KKyAgICAgICAqICBhbmQgaXMgYXBwbGllZCB0byB0aGUgbnVtYmVyIDEyMzQ1Njc4OSwgdGhpcyBjb3JyZXNwb25kcyB0bworICAgICAgICogIDEyLDM0LDU2LDc4OS4gIE5vdGUgdGhhdCBpZiB0aGUgc3RyaW5nIHdhcyA8Y29kZT4zMjwvY29kZT4sIHRoaXMgd291bGQKKyAgICAgICAqICBwdXQgbW9yZSB0aGFuIDUwIGRpZ2l0cyBpbnRvIHRoZSBsZWFzdCBzaWduaWZpY2FudCBncm91cCBpZgorICAgICAgICogIHRoZSBjaGFyYWN0ZXIgc2V0IGlzIEFTQ0lJLgorICAgICAgICoKKyAgICAgICAqICBUaGUgc3RyaW5nIGlzIHJldHVybmVkIGJ5IGNhbGxpbmcKKyAgICAgICAqICBtb25leXB1bmN0PGNoYXJfdHlwZT46OmRvX2dyb3VwaW5nKCkuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gIHN0cmluZyByZXByZXNlbnRpbmcgZ3JvdXBpbmcgc3BlY2lmaWNhdGlvbi4KKyAgICAgICovCisgICAgICBzdHJpbmcKKyAgICAgIGdyb3VwaW5nKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gY3VycmVuY3kgc3ltYm9sIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nX3R5cGUgdG8gdXNlIGFzIGEgY3VycmVuY3kgc3ltYm9sLiAgSXQKKyAgICAgICAqICBkb2VzIHNvIGJ5IHJldHVybmluZyByZXR1cm5pbmcKKyAgICAgICAqICBtb25leXB1bmN0PGNoYXJfdHlwZT46OmRvX2N1cnJfc3ltYm9sKCkuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gIEBhIHN0cmluZ190eXBlIHJlcHJlc2VudGluZyBhIGN1cnJlbmN5IHN5bWJvbC4KKyAgICAgICovCisgICAgICBzdHJpbmdfdHlwZQorICAgICAgY3Vycl9zeW1ib2woKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fY3Vycl9zeW1ib2woKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBwb3NpdGl2ZSBzaWduIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nX3R5cGUgdG8gdXNlIGFzIGEgc2lnbiBmb3IgcG9zaXRpdmUKKyAgICAgICAqICBhbW91bnRzLiAgSXQgZG9lcyBzbyBieSByZXR1cm5pbmcgcmV0dXJuaW5nCisgICAgICAgKiAgbW9uZXlwdW5jdDxjaGFyX3R5cGU+Ojpkb19wb3NpdGl2ZV9zaWduKCkuCisgICAgICAgKgorICAgICAgICogIElmIHRoZSByZXR1cm4gdmFsdWUgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBjaGFyYWN0ZXIsIHRoZSBmaXJzdAorICAgICAgICogIGNoYXJhY3RlciBhcHBlYXJzIGluIHRoZSBwb3NpdGlvbiBpbmRpY2F0ZWQgYnkgcG9zX2Zvcm1hdCgpIGFuZCB0aGUKKyAgICAgICAqICByZW1haW5kZXIgYXBwZWFyIGF0IHRoZSBlbmQgb2YgdGhlIGZvcm1hdHRlZCBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gIEBhIHN0cmluZ190eXBlIHJlcHJlc2VudGluZyBhIHBvc2l0aXZlIHNpZ24uCisgICAgICAqLworICAgICAgc3RyaW5nX3R5cGUKKyAgICAgIHBvc2l0aXZlX3NpZ24oKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcG9zaXRpdmVfc2lnbigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIG5lZ2F0aXZlIHNpZ24gc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJpbmdfdHlwZSB0byB1c2UgYXMgYSBzaWduIGZvciBuZWdhdGl2ZQorICAgICAgICogIGFtb3VudHMuICBJdCBkb2VzIHNvIGJ5IHJldHVybmluZyByZXR1cm5pbmcKKyAgICAgICAqICBtb25leXB1bmN0PGNoYXJfdHlwZT46OmRvX25lZ2F0aXZlX3NpZ24oKS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgdGhlIHJldHVybiB2YWx1ZSBjb250YWlucyBtb3JlIHRoYW4gb25lIGNoYXJhY3RlciwgdGhlIGZpcnN0CisgICAgICAgKiAgY2hhcmFjdGVyIGFwcGVhcnMgaW4gdGhlIHBvc2l0aW9uIGluZGljYXRlZCBieSBuZWdfZm9ybWF0KCkgYW5kIHRoZQorICAgICAgICogIHJlbWFpbmRlciBhcHBlYXIgYXQgdGhlIGVuZCBvZiB0aGUgZm9ybWF0dGVkIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiAgQHJldHVybiAgQGEgc3RyaW5nX3R5cGUgcmVwcmVzZW50aW5nIGEgbmVnYXRpdmUgc2lnbi4KKyAgICAgICovCisgICAgICBzdHJpbmdfdHlwZQorICAgICAgbmVnYXRpdmVfc2lnbigpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19uZWdhdGl2ZV9zaWduKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gbnVtYmVyIG9mIGRpZ2l0cyBpbiBmcmFjdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBleGFjdCBudW1iZXIgb2YgZGlnaXRzIHRoYXQgbWFrZSB1cCB0aGUKKyAgICAgICAqICBmcmFjdGlvbmFsIHBhcnQgb2YgYSBtb25leSBhbW91bnQuICBJdCBkb2VzIHNvIGJ5IHJldHVybmluZworICAgICAgICogIHJldHVybmluZyBtb25leXB1bmN0PGNoYXJfdHlwZT46OmRvX2ZyYWNfZGlnaXRzKCkuCisgICAgICAgKgorICAgICAgICogIFRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgYSBtb25leSBhbW91bnQgaXMgb3B0aW9uYWwuICBCdXQgaWYgaXQgaXMKKyAgICAgICAqICBwcmVzZW50LCB0aGVyZSBtdXN0IGJlIGZyYWNfZGlnaXRzKCkgZGlnaXRzLgorICAgICAgICoKKyAgICAgICAqICBAcmV0dXJuICBOdW1iZXIgb2YgZGlnaXRzIGluIGFtb3VudCBmcmFjdGlvbi4KKyAgICAgICovCisgICAgICBpbnQKKyAgICAgIGZyYWNfZGlnaXRzKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2ZyYWNfZGlnaXRzKCk7IH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gcGF0dGVybiBmb3IgbW9uZXkgdmFsdWVzLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBwYXR0ZXJuIGRlc2NyaWJpbmcgdGhlIGZvcm1hdHRpbmcgb2YgYQorICAgICAgICogIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIHZhbHVlZCBtb25leSBhbW91bnQuICBJdCBkb2VzIHNvIGJ5IHJldHVybmluZworICAgICAgICogIHJldHVybmluZyBtb25leXB1bmN0PGNoYXJfdHlwZT46OmRvX3Bvc19mb3JtYXQoKSBvcgorICAgICAgICogIG1vbmV5cHVuY3Q8Y2hhcl90eXBlPjo6ZG9fbmVnX2Zvcm1hdCgpLgorICAgICAgICoKKyAgICAgICAqICBUaGUgcGF0dGVybiBoYXMgNCBmaWVsZHMgZGVzY3JpYmluZyB0aGUgb3JkZXJpbmcgb2Ygc3ltYm9sLCBzaWduLAorICAgICAgICogIHZhbHVlLCBhbmQgbm9uZSBvciBzcGFjZS4gIFRoZXJlIG11c3QgYmUgb25lIG9mIGVhY2ggaW4gdGhlIHBhdHRlcm4uCisgICAgICAgKiAgVGhlIG5vbmUgYW5kIHNwYWNlIGVudW1zIG1heSBub3QgYXBwZWFyIGluIHRoZSBmaXJzdCBmaWVsZCBhbmQgc3BhY2UKKyAgICAgICAqICBtYXkgbm90IGFwcGVhciBpbiB0aGUgZmluYWwgZmllbGQuCisgICAgICAgKgorICAgICAgICogIFRoZSBwYXJ0cyBvZiBhIG1vbmV5IHN0cmluZyBtdXN0IGFwcGVhciBpbiB0aGUgb3JkZXIgaW5kaWNhdGVkIGJ5CisgICAgICAgKiAgdGhlIGZpZWxkcyBvZiB0aGUgcGF0dGVybi4gIFRoZSBzeW1ib2wgZmllbGQgaW5kaWNhdGVzIHRoYXQgdGhlCisgICAgICAgKiAgdmFsdWUgb2YgY3Vycl9zeW1ib2woKSBtYXkgYmUgcHJlc2VudC4gIFRoZSBzaWduIGZpZWxkIGluZGljYXRlcworICAgICAgICogIHRoYXQgdGhlIHZhbHVlIG9mIHBvc2l0aXZlX3NpZ24oKSBvciBuZWdhdGl2ZV9zaWduKCkgbXVzdCBiZQorICAgICAgICogIHByZXNlbnQuICBUaGUgdmFsdWUgZmllbGQgaW5kaWNhdGVzIHRoYXQgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZQorICAgICAgICogIG1vbmV5IGFtb3VudCBpcyBwcmVzZW50LiAgbm9uZSBpbmRpY2F0ZXMgMCBvciBtb3JlIHdoaXRlc3BhY2UKKyAgICAgICAqICBjaGFyYWN0ZXJzLCBleGNlcHQgYXQgdGhlIGVuZCwgd2hlcmUgaXQgcGVybWl0cyBubyB3aGl0ZXNwYWNlLgorICAgICAgICogIHNwYWNlIGluZGljYXRlcyB0aGF0IDEgb3IgbW9yZSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgbXVzdCBiZQorICAgICAgICogIHByZXNlbnQuCisgICAgICAgKgorICAgICAgICogIEZvciBleGFtcGxlLCBmb3IgdGhlIFVTIGxvY2FsZSBhbmQgcG9zX2Zvcm1hdCgpIHBhdHRlcm4KKyAgICAgICAqICB7c3ltYm9sLHNpZ24sdmFsdWUsbm9uZX0sIGN1cnJfc3ltYm9sKCkgPT0gJmFwb3M7JCZhcG9zOworICAgICAgICogIHBvc2l0aXZlX3NpZ24oKSA9PSAmYXBvczsrJmFwb3M7LCBhbmQgdmFsdWUgMTAuMDEsIGFuZAorICAgICAgICogIG9wdGlvbnMgc2V0IHRvIGZvcmNlIHRoZSBzeW1ib2wsIHRoZSBjb3JyZXNwb25kaW5nIHN0cmluZyBpcworICAgICAgICogIDxjb2RlPiQrMTAuMDE8L2NvZGU+LgorICAgICAgICoKKyAgICAgICAqICBAcmV0dXJuICBQYXR0ZXJuIGZvciBtb25leSB2YWx1ZXMuCisgICAgICAqLworICAgICAgcGF0dGVybgorICAgICAgcG9zX2Zvcm1hdCgpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19wb3NfZm9ybWF0KCk7IH0KKworICAgICAgcGF0dGVybgorICAgICAgbmVnX2Zvcm1hdCgpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19uZWdfZm9ybWF0KCk7IH0KKyAgICAgIC8vQH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIC8vLyBEZXN0cnVjdG9yLgorICAgICAgdmlydHVhbAorICAgICAgfm1vbmV5cHVuY3QoKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gZGVjaW1hbCBwb2ludCBjaGFyYWN0ZXIuCisgICAgICAgKgorICAgICAgICogIFJldHVybnMgYSBjaGFyX3R5cGUgdG8gdXNlIGFzIGEgZGVjaW1hbCBwb2ludC4gIFRoaXMgZnVuY3Rpb24gaXMgYQorICAgICAgICogIGhvb2sgZm9yIGRlcml2ZWQgY2xhc3NlcyB0byBjaGFuZ2UgdGhlIHZhbHVlIHJldHVybmVkLgorICAgICAgICoKKyAgICAgICAqICBAcmV0dXJuICBAYSBjaGFyX3R5cGUgcmVwcmVzZW50aW5nIGEgZGVjaW1hbCBwb2ludC4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNoYXJfdHlwZQorICAgICAgZG9fZGVjaW1hbF9wb2ludCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50OyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIHRob3VzYW5kcyBzZXBhcmF0b3IgY2hhcmFjdGVyLgorICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIGEgY2hhcl90eXBlIHRvIHVzZSBhcyBhIHRob3VzYW5kcyBzZXBhcmF0b3IuICBUaGlzIGZ1bmN0aW9uCisgICAgICAgKiAgaXMgYSBob29rIGZvciBkZXJpdmVkIGNsYXNzZXMgdG8gY2hhbmdlIHRoZSB2YWx1ZSByZXR1cm5lZC4KKyAgICAgICAqCisgICAgICAgKiAgQHJldHVybiAgQGEgY2hhcl90eXBlIHJlcHJlc2VudGluZyBhIHRob3VzYW5kcyBzZXBhcmF0b3IuCisgICAgICAqLworICAgICAgdmlydHVhbCBjaGFyX3R5cGUKKyAgICAgIGRvX3Rob3VzYW5kc19zZXAoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcDsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBncm91cGluZyBzcGVjaWZpY2F0aW9uLgorICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGluZyBncm91cGluZ3MgZm9yIHRoZSBpbnRlZ2VyIHBhcnQgb2YgYQorICAgICAgICogIG51bWJlci4gIFRoaXMgZnVuY3Rpb24gaXMgYSBob29rIGZvciBkZXJpdmVkIGNsYXNzZXMgdG8gY2hhbmdlIHRoZQorICAgICAgICogIHZhbHVlIHJldHVybmVkLiAgQHNlZSBncm91cGluZygpIGZvciBkZXRhaWxzLgorICAgICAgICoKKyAgICAgICAqICBAcmV0dXJuICBTdHJpbmcgcmVwcmVzZW50aW5nIGdyb3VwaW5nIHNwZWNpZmljYXRpb24uCisgICAgICAqLworICAgICAgdmlydHVhbCBzdHJpbmcKKyAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2RhdGEtPl9NX2dyb3VwaW5nOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIGN1cnJlbmN5IHN5bWJvbCBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmluZ190eXBlIHRvIHVzZSBhcyBhIGN1cnJlbmN5IHN5bWJvbC4KKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGlzIGEgaG9vayBmb3IgZGVyaXZlZCBjbGFzc2VzIHRvIGNoYW5nZSB0aGUgdmFsdWUKKyAgICAgICAqICByZXR1cm5lZC4gIEBzZWUgY3Vycl9zeW1ib2woKSBmb3IgZGV0YWlscy4KKyAgICAgICAqCisgICAgICAgKiAgQHJldHVybiAgQGEgc3RyaW5nX3R5cGUgcmVwcmVzZW50aW5nIGEgY3VycmVuY3kgc3ltYm9sLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKKyAgICAgIGRvX2N1cnJfc3ltYm9sKCkgICBjb25zdAorICAgICAgeyByZXR1cm4gX01fZGF0YS0+X01fY3Vycl9zeW1ib2w7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gcG9zaXRpdmUgc2lnbiBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmluZ190eXBlIHRvIHVzZSBhcyBhIHNpZ24gZm9yIHBvc2l0aXZlCisgICAgICAgKiAgYW1vdW50cy4gIFRoaXMgZnVuY3Rpb24gaXMgYSBob29rIGZvciBkZXJpdmVkIGNsYXNzZXMgdG8gY2hhbmdlIHRoZQorICAgICAgICogIHZhbHVlIHJldHVybmVkLiAgQHNlZSBwb3NpdGl2ZV9zaWduKCkgZm9yIGRldGFpbHMuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gIEBhIHN0cmluZ190eXBlIHJlcHJlc2VudGluZyBhIHBvc2l0aXZlIHNpZ24uCisgICAgICAqLworICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQorICAgICAgZG9fcG9zaXRpdmVfc2lnbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIG5lZ2F0aXZlIHNpZ24gc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJpbmdfdHlwZSB0byB1c2UgYXMgYSBzaWduIGZvciBuZWdhdGl2ZQorICAgICAgICogIGFtb3VudHMuICBUaGlzIGZ1bmN0aW9uIGlzIGEgaG9vayBmb3IgZGVyaXZlZCBjbGFzc2VzIHRvIGNoYW5nZSB0aGUKKyAgICAgICAqICB2YWx1ZSByZXR1cm5lZC4gIEBzZWUgbmVnYXRpdmVfc2lnbigpIGZvciBkZXRhaWxzLgorICAgICAgICoKKyAgICAgICAqICBAcmV0dXJuICBAYSBzdHJpbmdfdHlwZSByZXByZXNlbnRpbmcgYSBuZWdhdGl2ZSBzaWduLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKKyAgICAgIGRvX25lZ2F0aXZlX3NpZ24oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbjsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBudW1iZXIgb2YgZGlnaXRzIGluIGZyYWN0aW9uLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGV4YWN0IG51bWJlciBvZiBkaWdpdHMgdGhhdCBtYWtlIHVwIHRoZQorICAgICAgICogIGZyYWN0aW9uYWwgcGFydCBvZiBhIG1vbmV5IGFtb3VudC4gIFRoaXMgZnVuY3Rpb24gaXMgYSBob29rIGZvcgorICAgICAgICogIGRlcml2ZWQgY2xhc3NlcyB0byBjaGFuZ2UgdGhlIHZhbHVlIHJldHVybmVkLiAgQHNlZSBmcmFjX2RpZ2l0cygpCisgICAgICAgKiAgZm9yIGRldGFpbHMuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gIE51bWJlciBvZiBkaWdpdHMgaW4gYW1vdW50IGZyYWN0aW9uLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgaW50CisgICAgICBkb19mcmFjX2RpZ2l0cygpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0czsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBwYXR0ZXJuIGZvciBtb25leSB2YWx1ZXMuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBhdHRlcm4gZGVzY3JpYmluZyB0aGUgZm9ybWF0dGluZyBvZiBhCisgICAgICAgKiAgcG9zaXRpdmUgdmFsdWVkIG1vbmV5IGFtb3VudC4gIFRoaXMgZnVuY3Rpb24gaXMgYSBob29rIGZvciBkZXJpdmVkCisgICAgICAgKiAgY2xhc3NlcyB0byBjaGFuZ2UgdGhlIHZhbHVlIHJldHVybmVkLiAgQHNlZSBwb3NfZm9ybWF0KCkgZm9yCisgICAgICAgKiAgZGV0YWlscy4KKyAgICAgICAqCisgICAgICAgKiAgQHJldHVybiAgUGF0dGVybiBmb3IgbW9uZXkgdmFsdWVzLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgcGF0dGVybgorICAgICAgZG9fcG9zX2Zvcm1hdCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0OyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIHBhdHRlcm4gZm9yIG1vbmV5IHZhbHVlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcGF0dGVybiBkZXNjcmliaW5nIHRoZSBmb3JtYXR0aW5nIG9mIGEKKyAgICAgICAqICBuZWdhdGl2ZSB2YWx1ZWQgbW9uZXkgYW1vdW50LiAgVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sgZm9yIGRlcml2ZWQKKyAgICAgICAqICBjbGFzc2VzIHRvIGNoYW5nZSB0aGUgdmFsdWUgcmV0dXJuZWQuICBAc2VlIG5lZ19mb3JtYXQoKSBmb3IKKyAgICAgICAqICBkZXRhaWxzLgorICAgICAgICoKKyAgICAgICAqICBAcmV0dXJuICBQYXR0ZXJuIGZvciBtb25leSB2YWx1ZXMuCisgICAgICAqLworICAgICAgdmlydHVhbCBwYXR0ZXJuCisgICAgICBkb19uZWdfZm9ybWF0KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQ7IH0KKworICAgICAgLy8gRm9yIHVzZSBhdCBjb25zdHJ1Y3Rpb24gdGltZSBvbmx5LgorICAgICAgIHZvaWQKKyAgICAgICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBOVUxMLAorCQkJCWNvbnN0IGNoYXIqIF9fbmFtZSA9IE5VTEwpOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgorICAgIGxvY2FsZTo6aWQgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6aWQ7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgorICAgIGNvbnN0IGJvb2wgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6aW50bDsKKworICB0ZW1wbGF0ZTw+CisgICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6fm1vbmV5cHVuY3QoKTsKKworICB0ZW1wbGF0ZTw+CisgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCk7CisKKyAgdGVtcGxhdGU8PgorICAgIHZvaWQKKyAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwgY29uc3QgY2hhciopOworCisgIHRlbXBsYXRlPD4KKyAgICB2b2lkCisgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlLCBjb25zdCBjaGFyKik7CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICB0ZW1wbGF0ZTw+CisgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjo6fm1vbmV5cHVuY3QoKTsKKworICB0ZW1wbGF0ZTw+CisgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT46On5tb25leXB1bmN0KCk7CisKKyAgdGVtcGxhdGU8PgorICAgIHZvaWQKKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwKKwkJCQkJCQljb25zdCBjaGFyKik7CisKKyAgdGVtcGxhdGU8PgorICAgIHZvaWQKKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsCisJCQkJCQkJIGNvbnN0IGNoYXIqKTsKKyNlbmRpZgorCisgIC8vLyBjbGFzcyBtb25leXB1bmN0X2J5bmFtZSBbMjIuMi42LjRdLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CisgICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWUgOiBwdWJsaWMgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9DaGFyVAkJCWNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4Jc3RyaW5nX3R5cGU7CisKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGludGwgPSBfSW50bDsKKworICAgICAgZXhwbGljaXQKKyAgICAgIG1vbmV5cHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCisgICAgICA6IG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD4oX19yZWZzKQorICAgICAgeworCWlmIChfX2J1aWx0aW5fc3RyY21wKF9fcywgIkMiKSAhPSAwCisJICAgICYmIF9fYnVpbHRpbl9zdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorCSAgeworCSAgICBfX2NfbG9jYWxlIF9fdG1wOworCSAgICB0aGlzLT5fU19jcmVhdGVfY19sb2NhbGUoX190bXAsIF9fcyk7CisJICAgIHRoaXMtPl9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX3RtcCk7CisJICAgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2NhbGUoX190bXApOworCSAgfQorICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgdmlydHVhbAorICAgICAgfm1vbmV5cHVuY3RfYnluYW1lKCkgeyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CisgICAgY29uc3QgYm9vbCBtb25leXB1bmN0X2J5bmFtZTxfQ2hhclQsIF9JbnRsPjo6aW50bDsKKworX0dMSUJDWFhfQkVHSU5fTERCTF9OQU1FU1BBQ0UKKworICAvKioKKyAgICogIEBicmllZiAgUHJpbWFyeSBjbGFzcyB0ZW1wbGF0ZSBtb25leV9nZXQuCisgICAqICBAaW5ncm91cCBsb2NhbGVzCisgICAqCisgICAqICBUaGlzIGZhY2V0IGVuY2Fwc3VsYXRlcyB0aGUgY29kZSB0byBwYXJzZSBhbmQgcmV0dXJuIGEgbW9uZXRhcnkKKyAgICogIGFtb3VudCBmcm9tIGEgc3RyaW5nLgorICAgKgorICAgKiAgVGhlIG1vbmV5X2dldCB0ZW1wbGF0ZSB1c2VzIHByb3RlY3RlZCB2aXJ0dWFsIGZ1bmN0aW9ucyB0bworICAgKiAgcHJvdmlkZSB0aGUgYWN0dWFsIHJlc3VsdHMuICBUaGUgcHVibGljIGFjY2Vzc29ycyBmb3J3YXJkIHRoZQorICAgKiAgY2FsbCB0byB0aGUgdmlydHVhbCBmdW5jdGlvbnMuICBUaGVzZSB2aXJ0dWFsIGZ1bmN0aW9ucyBhcmUKKyAgICogIGhvb2tzIGZvciBkZXZlbG9wZXJzIHRvIGltcGxlbWVudCB0aGUgYmVoYXZpb3IgdGhleSByZXF1aXJlIGZyb20KKyAgICogIHRoZSBtb25leV9nZXQgZmFjZXQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KKyAgICBjbGFzcyBtb25leV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlczoKKyAgICAgIC8vQHsKKyAgICAgIC8vLyBQdWJsaWMgdHlwZWRlZnMKKyAgICAgIHR5cGVkZWYgX0NoYXJUCQkJY2hhcl90eXBlOworICAgICAgdHlwZWRlZiBfSW5JdGVyCQkJaXRlcl90eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPglzdHJpbmdfdHlwZTsKKyAgICAgIC8vQH0KKworICAgICAgLy8vIE51bXB1bmN0IGZhY2V0IGlkLgorICAgICAgc3RhdGljIGxvY2FsZTo6aWQJCQlpZDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3RvciBwZXJmb3JtcyBpbml0aWFsaXphdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyB0aGUgY29uc3RydWN0b3IgcHJvdmlkZWQgYnkgdGhlIHN0YW5kYXJkLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gcmVmcyAgUGFzc2VkIHRvIHRoZSBiYXNlIGZhY2V0IGNsYXNzLgorICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBtb25leV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDogZmFjZXQoX19yZWZzKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZWFkIGFuZCBwYXJzZSBhIG1vbmV0YXJ5IHZhbHVlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHJlYWRzIGNoYXJhY3RlcnMgZnJvbSBAYSBzLCBpbnRlcnByZXRzIHRoZW0gYXMgYQorICAgICAgICogIG1vbmV0YXJ5IHZhbHVlIGFjY29yZGluZyB0byBtb25leXB1bmN0IGFuZCBjdHlwZSBmYWNldHMgcmV0cmlldmVkCisgICAgICAgKiAgZnJvbSBpby5nZXRsb2MoKSwgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBpbiBAYSB1bml0cyBhcyBhbiBpbnRlZ3JhbAorICAgICAgICogIHZhbHVlIG1vbmV5cHVuY3Q6OmZyYWNfZGlnaXRzKCkgKiB0aGUgYWN0dWFsIGFtb3VudC4gIEZvciBleGFtcGxlLAorICAgICAgICogIHRoZSBzdHJpbmcgJDEwLjAxIGluIGEgVVMgbG9jYWxlIHdvdWxkIHN0b3JlIDEwMDEgaW4gQGEgdW5pdHMuCisgICAgICAgKgorICAgICAgICogIEFueSBjaGFyYWN0ZXJzIG5vdCBwYXJ0IG9mIGEgdmFsaWQgbW9uZXkgYW1vdW50IGFyZSBub3QgY29uc3VtZWQuCisgICAgICAgKgorICAgICAgICogIElmIGEgbW9uZXkgdmFsdWUgY2Fubm90IGJlIHBhcnNlZCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0sIHNldHMKKyAgICAgICAqICBlcnI9KGVycnxpby5mYWlsYml0KS4gIElmIHRoZSBzdHJlYW0gaXMgY29uc3VtZWQgYmVmb3JlIGZpbmlzaGluZworICAgICAgICogIHBhcnNpbmcsICBzZXRzIGVycj0oZXJyfGlvLmZhaWxiaXR8aW8uZW9mYml0KS4gIEBhIHVuaXRzIGlzCisgICAgICAgKiAgdW5jaGFuZ2VkIGlmIHBhcnNpbmcgZmFpbHMuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd29ya3MgYnkgcmV0dXJuaW5nIHRoZSByZXN1bHQgb2YgZG9fZ2V0KCkuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgcyAgU3RhcnQgb2YgY2hhcmFjdGVycyB0byBwYXJzZS4KKyAgICAgICAqICBAcGFyYW0gIGVuZCAgRW5kIG9mIGNoYXJhY3RlcnMgdG8gcGFyc2UuCisgICAgICAgKiAgQHBhcmFtICBpbnRsICBQYXJhbWV0ZXIgdG8gdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8Q2hhclQsaW50bD4gPi4KKyAgICAgICAqICBAcGFyYW0gIGlvICBTb3VyY2Ugb2YgZmFjZXRzIGFuZCBpbyBzdGF0ZS4KKyAgICAgICAqICBAcGFyYW0gIGVyciAgRXJyb3IgZmllbGQgdG8gc2V0IGlmIHBhcnNpbmcgZmFpbHMuCisgICAgICAgKiAgQHBhcmFtICB1bml0cyAgUGxhY2UgdG8gc3RvcmUgcmVzdWx0IG9mIHBhcnNpbmcuCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgZmlyc3QgY2hhcmFjdGVyIGJleW9uZCB2YWxpZCBtb25leQorICAgICAgICoJICAgYW1vdW50LgorICAgICAgICovCisgICAgICBpdGVyX3R5cGUKKyAgICAgIGdldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKKwkgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19zLCBfX2VuZCwgX19pbnRsLCBfX2lvLCBfX2VyciwgX191bml0cyk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZWFkIGFuZCBwYXJzZSBhIG1vbmV0YXJ5IHZhbHVlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHJlYWRzIGNoYXJhY3RlcnMgZnJvbSBAYSBzLCBpbnRlcnByZXRzIHRoZW0gYXMKKyAgICAgICAqICBhIG1vbmV0YXJ5IHZhbHVlIGFjY29yZGluZyB0byBtb25leXB1bmN0IGFuZCBjdHlwZSBmYWNldHMKKyAgICAgICAqICByZXRyaWV2ZWQgZnJvbSBpby5nZXRsb2MoKSwgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBpbiBAYQorICAgICAgICogIGRpZ2l0cy4gIEZvciBleGFtcGxlLCB0aGUgc3RyaW5nICQxMC4wMSBpbiBhIFVTIGxvY2FsZSB3b3VsZAorICAgICAgICogIHN0b3JlIDxjb2RlPjEwMDE8L2NvZGU+IGluIEBhIGRpZ2l0cy4KKyAgICAgICAqCisgICAgICAgKiAgQW55IGNoYXJhY3RlcnMgbm90IHBhcnQgb2YgYSB2YWxpZCBtb25leSBhbW91bnQgYXJlIG5vdCBjb25zdW1lZC4KKyAgICAgICAqCisgICAgICAgKiAgSWYgYSBtb25leSB2YWx1ZSBjYW5ub3QgYmUgcGFyc2VkIGZyb20gdGhlIGlucHV0IHN0cmVhbSwgc2V0cworICAgICAgICogIGVycj0oZXJyfGlvLmZhaWxiaXQpLiAgSWYgdGhlIHN0cmVhbSBpcyBjb25zdW1lZCBiZWZvcmUgZmluaXNoaW5nCisgICAgICAgKiAgcGFyc2luZywgIHNldHMgZXJyPShlcnJ8aW8uZmFpbGJpdHxpby5lb2ZiaXQpLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdvcmtzIGJ5IHJldHVybmluZyB0aGUgcmVzdWx0IG9mIGRvX2dldCgpLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIHMgIFN0YXJ0IG9mIGNoYXJhY3RlcnMgdG8gcGFyc2UuCisgICAgICAgKiAgQHBhcmFtICBlbmQgIEVuZCBvZiBjaGFyYWN0ZXJzIHRvIHBhcnNlLgorICAgICAgICogIEBwYXJhbSAgaW50bCAgUGFyYW1ldGVyIHRvIHVzZV9mYWNldDxtb25leXB1bmN0PENoYXJULGludGw+ID4uCisgICAgICAgKiAgQHBhcmFtICBpbyAgU291cmNlIG9mIGZhY2V0cyBhbmQgaW8gc3RhdGUuCisgICAgICAgKiAgQHBhcmFtICBlcnIgIEVycm9yIGZpZWxkIHRvIHNldCBpZiBwYXJzaW5nIGZhaWxzLgorICAgICAgICogIEBwYXJhbSAgZGlnaXRzICBQbGFjZSB0byBzdG9yZSByZXN1bHQgb2YgcGFyc2luZy4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciByZWZlcmVuY2luZyBmaXJzdCBjaGFyYWN0ZXIgYmV5b25kIHZhbGlkIG1vbmV5CisgICAgICAgKgkgICBhbW91bnQuCisgICAgICAgKi8KKyAgICAgIGl0ZXJfdHlwZQorICAgICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAorCSAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19zLCBfX2VuZCwgX19pbnRsLCBfX2lvLCBfX2VyciwgX19kaWdpdHMpOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvLy8gRGVzdHJ1Y3Rvci4KKyAgICAgIHZpcnR1YWwKKyAgICAgIH5tb25leV9nZXQoKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZWFkIGFuZCBwYXJzZSBhIG1vbmV0YXJ5IHZhbHVlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHJlYWRzIGFuZCBwYXJzZXMgY2hhcmFjdGVycyByZXByZXNlbnRpbmcgYSBtb25ldGFyeQorICAgICAgICogIHZhbHVlLiAgVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sgZm9yIGRlcml2ZWQgY2xhc3NlcyB0byBjaGFuZ2UgdGhlCisgICAgICAgKiAgdmFsdWUgcmV0dXJuZWQuICBAc2VlIGdldCgpIGZvciBkZXRhaWxzLgorICAgICAgICovCisgICAgICAvLyBYWFggR0xJQkNYWF9BQkkgRGVwcmVjYXRlZAorI2lmIGRlZmluZWQgX0dMSUJDWFhfTE9OR19ET1VCTEVfQ09NUEFUICYmIGRlZmluZWQgX19MT05HX0RPVUJMRV8xMjhfXworICAgICAgdmlydHVhbCBpdGVyX3R5cGUKKyAgICAgIF9fZG9fZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAorCSAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRvdWJsZSYgX191bml0cykgY29uc3Q7CisjZWxzZQorICAgICAgdmlydHVhbCBpdGVyX3R5cGUKKyAgICAgIGRvX2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKKwkgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0OworI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVhZCBhbmQgcGFyc2UgYSBtb25ldGFyeSB2YWx1ZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZWFkcyBhbmQgcGFyc2VzIGNoYXJhY3RlcnMgcmVwcmVzZW50aW5nIGEgbW9uZXRhcnkKKyAgICAgICAqICB2YWx1ZS4gIFRoaXMgZnVuY3Rpb24gaXMgYSBob29rIGZvciBkZXJpdmVkIGNsYXNzZXMgdG8gY2hhbmdlIHRoZQorICAgICAgICogIHZhbHVlIHJldHVybmVkLiAgQHNlZSBnZXQoKSBmb3IgZGV0YWlscy4KKyAgICAgICAqLworICAgICAgdmlydHVhbCBpdGVyX3R5cGUKKyAgICAgIGRvX2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKKwkgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdDsKKworICAgICAgLy8gWFhYIEdMSUJDWFhfQUJJIERlcHJlY2F0ZWQKKyNpZiBkZWZpbmVkIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVCAmJiBkZWZpbmVkIF9fTE9OR19ET1VCTEVfMTI4X18KKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19nZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCisJICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBjb25zdDsKKyNlbmRpZgorCisgICAgICB0ZW1wbGF0ZTxib29sIF9JbnRsPgorICAgICAgICBpdGVyX3R5cGUKKyAgICAgICAgX01fZXh0cmFjdChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorCQkgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZyYgX19kaWdpdHMpIGNvbnN0OyAgICAgCisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CisgICAgbG9jYWxlOjppZCBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFByaW1hcnkgY2xhc3MgdGVtcGxhdGUgbW9uZXlfcHV0LgorICAgKiAgQGluZ3JvdXAgbG9jYWxlcworICAgKgorICAgKiAgVGhpcyBmYWNldCBlbmNhcHN1bGF0ZXMgdGhlIGNvZGUgdG8gZm9ybWF0IGFuZCBvdXRwdXQgYSBtb25ldGFyeQorICAgKiAgYW1vdW50LgorICAgKgorICAgKiAgVGhlIG1vbmV5X3B1dCB0ZW1wbGF0ZSB1c2VzIHByb3RlY3RlZCB2aXJ0dWFsIGZ1bmN0aW9ucyB0bworICAgKiAgcHJvdmlkZSB0aGUgYWN0dWFsIHJlc3VsdHMuICBUaGUgcHVibGljIGFjY2Vzc29ycyBmb3J3YXJkIHRoZQorICAgKiAgY2FsbCB0byB0aGUgdmlydHVhbCBmdW5jdGlvbnMuICBUaGVzZSB2aXJ0dWFsIGZ1bmN0aW9ucyBhcmUKKyAgICogIGhvb2tzIGZvciBkZXZlbG9wZXJzIHRvIGltcGxlbWVudCB0aGUgYmVoYXZpb3IgdGhleSByZXF1aXJlIGZyb20KKyAgICogIHRoZSBtb25leV9wdXQgZmFjZXQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CisgICAgY2xhc3MgbW9uZXlfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy9AeworICAgICAgLy8vIFB1YmxpYyB0eXBlZGVmcworICAgICAgdHlwZWRlZiBfQ2hhclQJCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIF9PdXRJdGVyCQkJaXRlcl90eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPglzdHJpbmdfdHlwZTsKKyAgICAgIC8vQH0KKworICAgICAgLy8vIE51bXB1bmN0IGZhY2V0IGlkLgorICAgICAgc3RhdGljIGxvY2FsZTo6aWQJCQlpZDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3RvciBwZXJmb3JtcyBpbml0aWFsaXphdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyB0aGUgY29uc3RydWN0b3IgcHJvdmlkZWQgYnkgdGhlIHN0YW5kYXJkLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gcmVmcyAgUGFzc2VkIHRvIHRoZSBiYXNlIGZhY2V0IGNsYXNzLgorICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBtb25leV9wdXQoc2l6ZV90IF9fcmVmcyA9IDApIDogZmFjZXQoX19yZWZzKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGb3JtYXQgYW5kIG91dHB1dCBhIG1vbmV0YXJ5IHZhbHVlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGZvcm1hdHMgQGEgdW5pdHMgYXMgYSBtb25ldGFyeSB2YWx1ZSBhY2NvcmRpbmcgdG8KKyAgICAgICAqICBtb25leXB1bmN0IGFuZCBjdHlwZSBmYWNldHMgcmV0cmlldmVkIGZyb20gaW8uZ2V0bG9jKCksIGFuZCB3cml0ZXMKKyAgICAgICAqICB0aGUgcmVzdWx0aW5nIGNoYXJhY3RlcnMgdG8gQGEgcy4gIEZvciBleGFtcGxlLCB0aGUgdmFsdWUgMTAwMSBpbiBhCisgICAgICAgKiAgVVMgbG9jYWxlIHdvdWxkIHdyaXRlIDxjb2RlPiQxMC4wMTwvY29kZT4gdG8gQGEgcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3b3JrcyBieSByZXR1cm5pbmcgdGhlIHJlc3VsdCBvZiBkb19wdXQoKS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBzICBUaGUgc3RyZWFtIHRvIHdyaXRlIHRvLgorICAgICAgICogIEBwYXJhbSAgaW50bCAgUGFyYW1ldGVyIHRvIHVzZV9mYWNldDxtb25leXB1bmN0PENoYXJULGludGw+ID4uCisgICAgICAgKiAgQHBhcmFtICBpbyAgU291cmNlIG9mIGZhY2V0cyBhbmQgaW8gc3RhdGUuCisgICAgICAgKiAgQHBhcmFtICBmaWxsICBjaGFyX3R5cGUgdG8gdXNlIGZvciBwYWRkaW5nLgorICAgICAgICogIEBwYXJhbSAgdW5pdHMgIFBsYWNlIHRvIHN0b3JlIHJlc3VsdCBvZiBwYXJzaW5nLgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIGFmdGVyIHdyaXRpbmcuCisgICAgICAgKi8KKyAgICAgIGl0ZXJfdHlwZQorICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKKwkgIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2ludGwsIF9faW8sIF9fZmlsbCwgX191bml0cyk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGb3JtYXQgYW5kIG91dHB1dCBhIG1vbmV0YXJ5IHZhbHVlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGZvcm1hdHMgQGEgZGlnaXRzIGFzIGEgbW9uZXRhcnkgdmFsdWUKKyAgICAgICAqICBhY2NvcmRpbmcgdG8gbW9uZXlwdW5jdCBhbmQgY3R5cGUgZmFjZXRzIHJldHJpZXZlZCBmcm9tCisgICAgICAgKiAgaW8uZ2V0bG9jKCksIGFuZCB3cml0ZXMgdGhlIHJlc3VsdGluZyBjaGFyYWN0ZXJzIHRvIEBhIHMuCisgICAgICAgKiAgRm9yIGV4YW1wbGUsIHRoZSBzdHJpbmcgPGNvZGU+MTAwMTwvY29kZT4gaW4gYSBVUyBsb2NhbGUKKyAgICAgICAqICB3b3VsZCB3cml0ZSA8Y29kZT4kMTAuMDE8L2NvZGU+IHRvIEBhIHMuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd29ya3MgYnkgcmV0dXJuaW5nIHRoZSByZXN1bHQgb2YgZG9fcHV0KCkuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgcyAgVGhlIHN0cmVhbSB0byB3cml0ZSB0by4KKyAgICAgICAqICBAcGFyYW0gIGludGwgIFBhcmFtZXRlciB0byB1c2VfZmFjZXQ8bW9uZXlwdW5jdDxDaGFyVCxpbnRsPiA+LgorICAgICAgICogIEBwYXJhbSAgaW8gIFNvdXJjZSBvZiBmYWNldHMgYW5kIGlvIHN0YXRlLgorICAgICAgICogIEBwYXJhbSAgZmlsbCAgY2hhcl90eXBlIHRvIHVzZSBmb3IgcGFkZGluZy4KKyAgICAgICAqICBAcGFyYW0gIHVuaXRzICBQbGFjZSB0byBzdG9yZSByZXN1bHQgb2YgcGFyc2luZy4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciBhZnRlciB3cml0aW5nLgorICAgICAgICovCisgICAgICBpdGVyX3R5cGUKKyAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCisJICBjaGFyX3R5cGUgX19maWxsLCBjb25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2ludGwsIF9faW8sIF9fZmlsbCwgX19kaWdpdHMpOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvLy8gRGVzdHJ1Y3Rvci4KKyAgICAgIHZpcnR1YWwKKyAgICAgIH5tb25leV9wdXQoKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGb3JtYXQgYW5kIG91dHB1dCBhIG1vbmV0YXJ5IHZhbHVlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGZvcm1hdHMgQGEgdW5pdHMgYXMgYSBtb25ldGFyeSB2YWx1ZSBhY2NvcmRpbmcgdG8KKyAgICAgICAqICBtb25leXB1bmN0IGFuZCBjdHlwZSBmYWNldHMgcmV0cmlldmVkIGZyb20gaW8uZ2V0bG9jKCksIGFuZCB3cml0ZXMKKyAgICAgICAqICB0aGUgcmVzdWx0aW5nIGNoYXJhY3RlcnMgdG8gQGEgcy4gIEZvciBleGFtcGxlLCB0aGUgdmFsdWUgMTAwMSBpbiBhCisgICAgICAgKiAgVVMgbG9jYWxlIHdvdWxkIHdyaXRlIDxjb2RlPiQxMC4wMTwvY29kZT4gdG8gQGEgcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sgZm9yIGRlcml2ZWQgY2xhc3NlcyB0byBjaGFuZ2UgdGhlIHZhbHVlCisgICAgICAgKiAgcmV0dXJuZWQuICBAc2VlIHB1dCgpLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIHMgIFRoZSBzdHJlYW0gdG8gd3JpdGUgdG8uCisgICAgICAgKiAgQHBhcmFtICBpbnRsICBQYXJhbWV0ZXIgdG8gdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8Q2hhclQsaW50bD4gPi4KKyAgICAgICAqICBAcGFyYW0gIGlvICBTb3VyY2Ugb2YgZmFjZXRzIGFuZCBpbyBzdGF0ZS4KKyAgICAgICAqICBAcGFyYW0gIGZpbGwgIGNoYXJfdHlwZSB0byB1c2UgZm9yIHBhZGRpbmcuCisgICAgICAgKiAgQHBhcmFtICB1bml0cyAgUGxhY2UgdG8gc3RvcmUgcmVzdWx0IG9mIHBhcnNpbmcuCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgYWZ0ZXIgd3JpdGluZy4KKyAgICAgICAqLworICAgICAgLy8gWFhYIEdMSUJDWFhfQUJJIERlcHJlY2F0ZWQKKyNpZiBkZWZpbmVkIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVCAmJiBkZWZpbmVkIF9fTE9OR19ET1VCTEVfMTI4X18KKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBfX2RvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCisJICAgICAgIGRvdWJsZSBfX3VuaXRzKSBjb25zdDsKKyNlbHNlCisgICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQorICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKKwkgICAgIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0OworI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRm9ybWF0IGFuZCBvdXRwdXQgYSBtb25ldGFyeSB2YWx1ZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBmb3JtYXRzIEBhIGRpZ2l0cyBhcyBhIG1vbmV0YXJ5IHZhbHVlCisgICAgICAgKiAgYWNjb3JkaW5nIHRvIG1vbmV5cHVuY3QgYW5kIGN0eXBlIGZhY2V0cyByZXRyaWV2ZWQgZnJvbQorICAgICAgICogIGlvLmdldGxvYygpLCBhbmQgd3JpdGVzIHRoZSByZXN1bHRpbmcgY2hhcmFjdGVycyB0byBAYSBzLgorICAgICAgICogIEZvciBleGFtcGxlLCB0aGUgc3RyaW5nIDxjb2RlPjEwMDE8L2NvZGU+IGluIGEgVVMgbG9jYWxlCisgICAgICAgKiAgd291bGQgd3JpdGUgPGNvZGU+JDEwLjAxPC9jb2RlPiB0byBAYSBzLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGlzIGEgaG9vayBmb3IgZGVyaXZlZCBjbGFzc2VzIHRvIGNoYW5nZSB0aGUgdmFsdWUKKyAgICAgICAqICByZXR1cm5lZC4gIEBzZWUgcHV0KCkuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgcyAgVGhlIHN0cmVhbSB0byB3cml0ZSB0by4KKyAgICAgICAqICBAcGFyYW0gIGludGwgIFBhcmFtZXRlciB0byB1c2VfZmFjZXQ8bW9uZXlwdW5jdDxDaGFyVCxpbnRsPiA+LgorICAgICAgICogIEBwYXJhbSAgaW8gIFNvdXJjZSBvZiBmYWNldHMgYW5kIGlvIHN0YXRlLgorICAgICAgICogIEBwYXJhbSAgZmlsbCAgY2hhcl90eXBlIHRvIHVzZSBmb3IgcGFkZGluZy4KKyAgICAgICAqICBAcGFyYW0gIHVuaXRzICBQbGFjZSB0byBzdG9yZSByZXN1bHQgb2YgcGFyc2luZy4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciBhZnRlciB3cml0aW5nLgorICAgICAgICovCisgICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQorICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKKwkgICAgIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3Q7CisKKyAgICAgIC8vIFhYWCBHTElCQ1hYX0FCSSBEZXByZWNhdGVkCisjaWYgZGVmaW5lZCBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQgJiYgZGVmaW5lZCBfX0xPTkdfRE9VQkxFXzEyOF9fCisgICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQorICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKKwkgICAgIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0OworI2VuZGlmCisKKyAgICAgIHRlbXBsYXRlPGJvb2wgX0ludGw+CisgICAgICAgIGl0ZXJfdHlwZQorICAgICAgICBfTV9pbnNlcnQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCisJCSAgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdDsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CisgICAgbG9jYWxlOjppZCBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOworCitfR0xJQkNYWF9FTkRfTERCTF9OQU1FU1BBQ0UKKworICAvKioKKyAgICogIEBicmllZiAgTWVzc2FnZXMgZmFjZXQgYmFzZSBjbGFzcyBwcm92aWRpbmcgY2F0YWxvZyB0eXBlZGVmLgorICAgKiAgQGluZ3JvdXAgbG9jYWxlcworICAgKi8KKyAgc3RydWN0IG1lc3NhZ2VzX2Jhc2UKKyAgeworICAgIHR5cGVkZWYgaW50IGNhdGFsb2c7CisgIH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFByaW1hcnkgY2xhc3MgdGVtcGxhdGUgbWVzc2FnZXMuCisgICAqICBAaW5ncm91cCBsb2NhbGVzCisgICAqCisgICAqICBUaGlzIGZhY2V0IGVuY2Fwc3VsYXRlcyB0aGUgY29kZSB0byByZXRyaWV2ZSBtZXNzYWdlcyBmcm9tCisgICAqICBtZXNzYWdlIGNhdGFsb2dzLiAgVGhlIG9ubHkgdGhpbmcgZGVmaW5lZCBieSB0aGUgc3RhbmRhcmQgZm9yIHRoaXMgZmFjZXQKKyAgICogIGlzIHRoZSBpbnRlcmZhY2UuICBBbGwgdW5kZXJseWluZyBmdW5jdGlvbmFsaXR5IGlzCisgICAqICBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkLgorICAgKgorICAgKiAgVGhpcyBsaWJyYXJ5IGN1cnJlbnRseSBpbXBsZW1lbnRzIDMgdmVyc2lvbnMgb2YgdGhlIG1lc3NhZ2UgZmFjZXQuICBUaGUKKyAgICogIGZpcnN0IHZlcnNpb24gKGdudSkgaXMgYSB3cmFwcGVyIGFyb3VuZCBnZXR0ZXh0LCBwcm92aWRlZCBieSBsaWJpbnRsLgorICAgKiAgVGhlIHNlY29uZCB2ZXJzaW9uIChpZWVlKSBpcyBhIHdyYXBwZXIgYXJvdW5kIGNhdGdldHMuICBUaGUgZmluYWwKKyAgICogIHZlcnNpb24gKGRlZmF1bHQpIGRvZXMgbm8gYWN0dWFsIHRyYW5zbGF0aW9uLiAgVGhlc2UgaW1wbGVtZW50YXRpb25zIGFyZQorICAgKiAgb25seSBwcm92aWRlZCBmb3IgY2hhciBhbmQgd2NoYXJfdCBpbnN0YW50aWF0aW9ucy4KKyAgICoKKyAgICogIFRoZSBtZXNzYWdlcyB0ZW1wbGF0ZSB1c2VzIHByb3RlY3RlZCB2aXJ0dWFsIGZ1bmN0aW9ucyB0bworICAgKiAgcHJvdmlkZSB0aGUgYWN0dWFsIHJlc3VsdHMuICBUaGUgcHVibGljIGFjY2Vzc29ycyBmb3J3YXJkIHRoZQorICAgKiAgY2FsbCB0byB0aGUgdmlydHVhbCBmdW5jdGlvbnMuICBUaGVzZSB2aXJ0dWFsIGZ1bmN0aW9ucyBhcmUKKyAgICogIGhvb2tzIGZvciBkZXZlbG9wZXJzIHRvIGltcGxlbWVudCB0aGUgYmVoYXZpb3IgdGhleSByZXF1aXJlIGZyb20KKyAgICogIHRoZSBtZXNzYWdlcyBmYWNldC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGNsYXNzIG1lc3NhZ2VzIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtZXNzYWdlc19iYXNlCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIFR5cGVzOgorICAgICAgLy9AeworICAgICAgLy8vIFB1YmxpYyB0eXBlZGVmcworICAgICAgdHlwZWRlZiBfQ2hhclQJCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+CXN0cmluZ190eXBlOworICAgICAgLy9AfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgLy8gVW5kZXJseWluZyAiQyIgbGlicmFyeSBsb2NhbGUgaW5mb3JtYXRpb24gc2F2ZWQgZnJvbQorICAgICAgLy8gaW5pdGlhbGl6YXRpb24sIG5lZWRlZCBieSBtZXNzYWdlc19ieW5hbWUgYXMgd2VsbC4KKyAgICAgIF9fY19sb2NhbGUJCQlfTV9jX2xvY2FsZV9tZXNzYWdlczsKKyAgICAgIGNvbnN0IGNoYXIqCQkJX01fbmFtZV9tZXNzYWdlczsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vLyBOdW1wdW5jdCBmYWNldCBpZC4KKyAgICAgIHN0YXRpYyBsb2NhbGU6OmlkCQkJaWQ7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0b3IgcGVyZm9ybXMgaW5pdGlhbGl6YXRpb24uCisgICAgICAgKgorICAgICAgICogIFRoaXMgaXMgdGhlIGNvbnN0cnVjdG9yIHByb3ZpZGVkIGJ5IHRoZSBzdGFuZGFyZC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIHJlZnMgIFBhc3NlZCB0byB0aGUgYmFzZSBmYWNldCBjbGFzcy4KKyAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgbWVzc2FnZXMoc2l6ZV90IF9fcmVmcyA9IDApOworCisgICAgICAvLyBOb24tc3RhbmRhcmQuCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEludGVybmFsIGNvbnN0cnVjdG9yLiAgTm90IGZvciBnZW5lcmFsIHVzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyBhIGNvbnN0cnVjdG9yIGZvciB1c2UgYnkgdGhlIGxpYnJhcnkgaXRzZWxmIHRvIHNldCB1cCBuZXcKKyAgICAgICAqICBsb2NhbGVzLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIGNsb2MgIFRoZSBDIGxvY2FsZS4KKyAgICAgICAqICBAcGFyYW0gIHMgIFRoZSBuYW1lIG9mIGEgbG9jYWxlLgorICAgICAgICogIEBwYXJhbSAgcmVmcyAgUmVmY291bnQgdG8gcGFzcyB0byB0aGUgYmFzZSBjbGFzcy4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIG1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKTsKKworICAgICAgLyoKKyAgICAgICAqICBAYnJpZWYgIE9wZW4gYSBtZXNzYWdlIGNhdGFsb2cuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gb3BlbnMgYW5kIHJldHVybnMgYSBoYW5kbGUgdG8gYSBtZXNzYWdlIGNhdGFsb2cgYnkKKyAgICAgICAqICByZXR1cm5pbmcgZG9fb3BlbihzLCBsb2MpLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIHMgIFRoZSBjYXRhbG9nIHRvIG9wZW4uCisgICAgICAgKiAgQHBhcmFtICBsb2MgIExvY2FsZSB0byB1c2UgZm9yIGNoYXJhY3RlciBzZXQgY29udmVyc2lvbnMuCisgICAgICAgKiAgQHJldHVybiAgSGFuZGxlIHRvIHRoZSBjYXRhbG9nIG9yIHZhbHVlIDwgMCBpZiBvcGVuIGZhaWxzLgorICAgICAgKi8KKyAgICAgIGNhdGFsb2cKKyAgICAgIG9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOyB9CisKKyAgICAgIC8vIE5vbi1zdGFuZGFyZCBhbmQgdW5vcnRob2RveCwgeWV0IGVmZmVjdGl2ZS4KKyAgICAgIC8qCisgICAgICAgKiAgQGJyaWVmICBPcGVuIGEgbWVzc2FnZSBjYXRhbG9nLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIG5vbi1zdGFuZGFyZCBmdW5jdGlvbiBvcGVucyBhbmQgcmV0dXJucyBhIGhhbmRsZSB0byBhIG1lc3NhZ2UKKyAgICAgICAqICBjYXRhbG9nIGJ5IHJldHVybmluZyBkb19vcGVuKHMsIGxvYykuICBUaGUgdGhpcmQgYXJndW1lbnQgcHJvdmlkZXMgYQorICAgICAgICogIG1lc3NhZ2UgY2F0YWxvZyByb290IGRpcmVjdG9yeSBmb3IgZ251IGdldHRleHQgYW5kIGlzIGlnbm9yZWQKKyAgICAgICAqICBvdGhlcndpc2UuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgcyAgVGhlIGNhdGFsb2cgdG8gb3Blbi4KKyAgICAgICAqICBAcGFyYW0gIGxvYyAgTG9jYWxlIHRvIHVzZSBmb3IgY2hhcmFjdGVyIHNldCBjb252ZXJzaW9ucy4KKyAgICAgICAqICBAcGFyYW0gIGRpciAgTWVzc2FnZSBjYXRhbG9nIHJvb3QgZGlyZWN0b3J5LgorICAgICAgICogIEByZXR1cm4gIEhhbmRsZSB0byB0aGUgY2F0YWxvZyBvciB2YWx1ZSA8IDAgaWYgb3BlbiBmYWlscy4KKyAgICAgICovCisgICAgICBjYXRhbG9nCisgICAgICBvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYsIGNvbnN0IGxvY2FsZSYsIGNvbnN0IGNoYXIqKSBjb25zdDsKKworICAgICAgLyoKKyAgICAgICAqICBAYnJpZWYgIExvb2sgdXAgYSBzdHJpbmcgaW4gYSBtZXNzYWdlIGNhdGFsb2cuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIGFuZCByZXR1cm5zIGEgbWVzc2FnZSBmcm9tIGEgY2F0YWxvZyBieQorICAgICAgICogIHJldHVybmluZyBkb19nZXQoYywgc2V0LCBtc2dpZCwgcykuCisgICAgICAgKgorICAgICAgICogIEZvciBnbnUsIEBhIHNldCBhbmQgQGEgbXNnaWQgYXJlIGlnbm9yZWQuICBSZXR1cm5zIGdldHRleHQocykuCisgICAgICAgKiAgRm9yIGRlZmF1bHQsIHJldHVybnMgcy4gRm9yIGllZWUsIHJldHVybnMgY2F0Z2V0cyhjLHNldCxtc2dpZCxzKS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBjICBUaGUgY2F0YWxvZyB0byBhY2Nlc3MuCisgICAgICAgKiAgQHBhcmFtICBzZXQgIEltcGxlbWVudGF0aW9uLWRlZmluZWQuCisgICAgICAgKiAgQHBhcmFtICBtc2dpZCAgSW1wbGVtZW50YXRpb24tZGVmaW5lZC4KKyAgICAgICAqICBAcGFyYW0gIHMgIERlZmF1bHQgcmV0dXJuIHZhbHVlIGlmIHJldHJpZXZhbCBmYWlscy4KKyAgICAgICAqICBAcmV0dXJuICBSZXRyaWV2ZWQgbWVzc2FnZSBvciBAYSBzIGlmIGdldCBmYWlscy4KKyAgICAgICovCisgICAgICBzdHJpbmdfdHlwZQorICAgICAgZ2V0KGNhdGFsb2cgX19jLCBpbnQgX19zZXQsIGludCBfX21zZ2lkLCBjb25zdCBzdHJpbmdfdHlwZSYgX19zKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9fYywgX19zZXQsIF9fbXNnaWQsIF9fcyk7IH0KKworICAgICAgLyoKKyAgICAgICAqICBAYnJpZWYgIENsb3NlIGEgbWVzc2FnZSBjYXRhbG9nLgorICAgICAgICoKKyAgICAgICAqICBDbG9zZXMgY2F0YWxvZyBAYSBjIGJ5IGNhbGxpbmcgZG9fY2xvc2UoYykuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgYyAgVGhlIGNhdGFsb2cgdG8gY2xvc2UuCisgICAgICAqLworICAgICAgdm9pZAorICAgICAgY2xvc2UoY2F0YWxvZyBfX2MpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19jbG9zZShfX2MpOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvLy8gRGVzdHJ1Y3Rvci4KKyAgICAgIHZpcnR1YWwKKyAgICAgIH5tZXNzYWdlcygpOworCisgICAgICAvKgorICAgICAgICogIEBicmllZiAgT3BlbiBhIG1lc3NhZ2UgY2F0YWxvZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBvcGVucyBhbmQgcmV0dXJucyBhIGhhbmRsZSB0byBhIG1lc3NhZ2UgY2F0YWxvZyBpbiBhbgorICAgICAgICogIGltcGxlbWVudGF0aW9uLWRlZmluZWQgbWFubmVyLiAgVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sgZm9yIGRlcml2ZWQKKyAgICAgICAqICBjbGFzc2VzIHRvIGNoYW5nZSB0aGUgdmFsdWUgcmV0dXJuZWQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgcyAgVGhlIGNhdGFsb2cgdG8gb3Blbi4KKyAgICAgICAqICBAcGFyYW0gIGxvYyAgTG9jYWxlIHRvIHVzZSBmb3IgY2hhcmFjdGVyIHNldCBjb252ZXJzaW9ucy4KKyAgICAgICAqICBAcmV0dXJuICBIYW5kbGUgdG8gdGhlIG9wZW5lZCBjYXRhbG9nLCB2YWx1ZSA8IDAgaWYgb3BlbiBmYWlsZWQuCisgICAgICAqLworICAgICAgdmlydHVhbCBjYXRhbG9nCisgICAgICBkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYsIGNvbnN0IGxvY2FsZSYpIGNvbnN0OworCisgICAgICAvKgorICAgICAgICogIEBicmllZiAgTG9vayB1cCBhIHN0cmluZyBpbiBhIG1lc3NhZ2UgY2F0YWxvZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgYW5kIHJldHVybnMgYSBtZXNzYWdlIGZyb20gYSBjYXRhbG9nIGluIGFuCisgICAgICAgKiAgaW1wbGVtZW50YXRpb24tZGVmaW5lZCBtYW5uZXIuICBUaGlzIGZ1bmN0aW9uIGlzIGEgaG9vayBmb3IgZGVyaXZlZAorICAgICAgICogIGNsYXNzZXMgdG8gY2hhbmdlIHRoZSB2YWx1ZSByZXR1cm5lZC4KKyAgICAgICAqCisgICAgICAgKiAgRm9yIGdudSwgQGEgc2V0IGFuZCBAYSBtc2dpZCBhcmUgaWdub3JlZC4gIFJldHVybnMgZ2V0dGV4dChzKS4KKyAgICAgICAqICBGb3IgZGVmYXVsdCwgcmV0dXJucyBzLiBGb3IgaWVlZSwgcmV0dXJucyBjYXRnZXRzKGMsc2V0LG1zZ2lkLHMpLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIGMgIFRoZSBjYXRhbG9nIHRvIGFjY2Vzcy4KKyAgICAgICAqICBAcGFyYW0gIHNldCAgSW1wbGVtZW50YXRpb24tZGVmaW5lZC4KKyAgICAgICAqICBAcGFyYW0gIG1zZ2lkICBJbXBsZW1lbnRhdGlvbi1kZWZpbmVkLgorICAgICAgICogIEBwYXJhbSAgcyAgRGVmYXVsdCByZXR1cm4gdmFsdWUgaWYgcmV0cmlldmFsIGZhaWxzLgorICAgICAgICogIEByZXR1cm4gIFJldHJpZXZlZCBtZXNzYWdlIG9yIEBhIHMgaWYgZ2V0IGZhaWxzLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKKyAgICAgIGRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGZhdWx0KSBjb25zdDsKKworICAgICAgLyoKKyAgICAgICAqICBAYnJpZWYgIENsb3NlIGEgbWVzc2FnZSBjYXRhbG9nLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIGMgIFRoZSBjYXRhbG9nIHRvIGNsb3NlLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgdm9pZAorICAgICAgZG9fY2xvc2UoY2F0YWxvZykgY29uc3Q7CisKKyAgICAgIC8vIFJldHVybnMgYSBsb2NhbGUgYW5kIGNvZGVzZXQtY29udmVydGVkIHN0cmluZywgZ2l2ZW4gYSBjaGFyKiBtZXNzYWdlLgorICAgICAgY2hhcioKKyAgICAgIF9NX2NvbnZlcnRfdG9fY2hhcihjb25zdCBzdHJpbmdfdHlwZSYgX19tc2cpIGNvbnN0CisgICAgICB7CisJLy8gWFhYCisJcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19tc2cuY19zdHIoKSkpOworICAgICAgfQorCisgICAgICAvLyBSZXR1cm5zIGEgbG9jYWxlIGFuZCBjb2Rlc2V0LWNvbnZlcnRlZCBzdHJpbmcsIGdpdmVuIGEgY2hhciogbWVzc2FnZS4KKyAgICAgIHN0cmluZ190eXBlCisgICAgICBfTV9jb252ZXJ0X2Zyb21fY2hhcihjaGFyKikgY29uc3QKKyAgICAgIHsKKyNpZiAwCisJLy8gTGVuZ3RoIG9mIG1lc3NhZ2Ugc3RyaW5nIHdpdGhvdXQgdGVybWluYXRpbmcgbnVsbC4KKwlzaXplX3QgX19sZW4gPSBjaGFyX3RyYWl0czxjaGFyPjo6bGVuZ3RoKF9fbXNnKSAtIDE7CisKKwkvLyAiZXZlcnlib2R5IGNhbiBlYXNpbHkgY29udmVydCB0aGUgc3RyaW5nIHVzaW5nCisJLy8gbWJzcnRvd2NzL3djc3J0b21icyBvciB3aXRoIGljb252KCkiCisKKwkvLyBDb252ZXJ0IGNoYXIqIHRvIF9DaGFyVCBpbiBsb2NhbGUgdXNlZCB0byBvcGVuIGNhdGFsb2cuCisJLy8gWFhYIG5lZWQgYWRkaXRpb25hbCB0ZW1wbGF0ZSBwYXJhbWV0ZXIgb24gbWVzc2FnZXMgY2xhc3MgZm9yIHRoaXMuLgorCS8vIHR5cGVkZWYgdHlwZW5hbWUgY29kZWN2dDxjaGFyLCBfQ2hhclQsIF9TdGF0ZVQ+IF9fY29kZWN2dF90eXBlOworCXR5cGVkZWYgdHlwZW5hbWUgY29kZWN2dDxjaGFyLCBfQ2hhclQsIG1ic3RhdGVfdD4gX19jb2RlY3Z0X3R5cGU7CisKKwlfX2NvZGVjdnRfdHlwZTo6c3RhdGVfdHlwZSBfX3N0YXRlOworCS8vIFhYWCBtYXkgbmVlZCB0byBpbml0aWFsaXplIHN0YXRlLgorCS8vaW5pdGlhbGl6ZV9zdGF0ZShfX3N0YXRlLl9NX2luaXQoKSk7CisKKwljaGFyKiBfX2Zyb21fbmV4dDsKKwkvLyBYWFggd2hhdCBzaXplIGZvciB0aGlzIHN0cmluZz8KKwlfQ2hhclQqIF9fdG8gPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKF9fbGVuICsgMSkpOworCWNvbnN0IF9fY29kZWN2dF90eXBlJiBfX2N2dCA9IHVzZV9mYWNldDxfX2NvZGVjdnRfdHlwZT4oX01fbG9jYWxlX2NvbnYpOworCV9fY3Z0Lm91dChfX3N0YXRlLCBfX21zZywgX19tc2cgKyBfX2xlbiwgX19mcm9tX25leHQsCisJCSAgX190bywgX190byArIF9fbGVuICsgMSwgX190b19uZXh0KTsKKwlyZXR1cm4gc3RyaW5nX3R5cGUoX190byk7CisjZW5kaWYKKyNpZiAwCisJdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKKwkvLyBjb25zdCBfX2N0eXBlX3R5cGUmIF9fY3Z0ID0gdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX01fbG9jYWxlX21zZyk7CisJY29uc3QgX19jdHlwZV90eXBlJiBfX2N2dCA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KGxvY2FsZSgpKTsKKwkvLyBYWFggQWdhaW4sIHByb3BlciBsZW5ndGggb2YgY29udmVydGVkIHN0cmluZyBhbiBpc3N1ZSBoZXJlLgorCS8vIEZvciBub3csIGFzc3VtZSB0aGUgY29udmVydGVkIGxlbmd0aCBpcyBub3QgbGFyZ2VyLgorCV9DaGFyVCogX19kZXN0ID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShfX2xlbiArIDEpKTsKKwlfX2N2dC53aWRlbihfX21zZywgX19tc2cgKyBfX2xlbiwgX19kZXN0KTsKKwlyZXR1cm4gYmFzaWNfc3RyaW5nPF9DaGFyVD4oX19kZXN0KTsKKyNlbmRpZgorCXJldHVybiBzdHJpbmdfdHlwZSgpOworICAgICAgfQorICAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBsb2NhbGU6OmlkIG1lc3NhZ2VzPF9DaGFyVD46OmlkOworCisgIC8vLyBTcGVjaWFsaXphdGlvbnMgZm9yIHJlcXVpcmVkIGluc3RhbnRpYXRpb25zLgorICB0ZW1wbGF0ZTw+CisgICAgc3RyaW5nCisgICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nJikgY29uc3Q7CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICB0ZW1wbGF0ZTw+CisgICAgd3N0cmluZworICAgIG1lc3NhZ2VzPHdjaGFyX3Q+Ojpkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHdzdHJpbmcmKSBjb25zdDsKKyNlbmRpZgorCisgICAvLy8gY2xhc3MgbWVzc2FnZXNfYnluYW1lIFsyMi4yLjcuMl0uCisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgY2xhc3MgbWVzc2FnZXNfYnluYW1lIDogcHVibGljIG1lc3NhZ2VzPF9DaGFyVD4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfQ2hhclQJCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+CXN0cmluZ190eXBlOworCisgICAgICBleHBsaWNpdAorICAgICAgbWVzc2FnZXNfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApOworCisgICAgcHJvdGVjdGVkOgorICAgICAgdmlydHVhbAorICAgICAgfm1lc3NhZ2VzX2J5bmFtZSgpCisgICAgICB7IH0KKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKy8vIEluY2x1ZGUgaG9zdCBhbmQgY29uZmlndXJhdGlvbiBzcGVjaWZpYyBtZXNzYWdlcyBmdW5jdGlvbnMuCisjaW5jbHVkZSA8Yml0cy9tZXNzYWdlc19tZW1iZXJzLmg+CisKKy8vIDIyLjIuMS41ICBUZW1wbGF0ZSBjbGFzcyBjb2RlY3Z0CisjaW5jbHVkZSA8Yml0cy9jb2RlY3Z0Lmg+CisKKyNpZm5kZWYgX0dMSUJDWFhfRVhQT1JUX1RFTVBMQVRFCisjIGluY2x1ZGUgPGJpdHMvbG9jYWxlX2ZhY2V0c19ub25pby50Y2M+CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvbG9jYWxlX2ZhY2V0c19ub25pby50Y2MgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvbG9jYWxlX2ZhY2V0c19ub25pby50Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhhOTEzOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9sb2NhbGVfZmFjZXRzX25vbmlvLnRjYwpAQCAtMCwwICsxLDEzNzAgQEAKKy8vIExvY2FsZSBzdXBwb3J0IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgbG9jYWxlX2ZhY2V0c19ub25pby50Y2MKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfTE9DQUxFX0ZBQ0VUU19OT05JT19UQ0MKKyNkZWZpbmUgX0xPQ0FMRV9GQUNFVFNfTk9OSU9fVENDIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KKyAgICBzdHJ1Y3QgX191c2VfY2FjaGU8X19tb25leXB1bmN0X2NhY2hlPF9DaGFyVCwgX0ludGw+ID4KKyAgICB7CisgICAgICBjb25zdCBfX21vbmV5cHVuY3RfY2FjaGU8X0NoYXJULCBfSW50bD4qCisgICAgICBvcGVyYXRvcigpIChjb25zdCBsb2NhbGUmIF9fbG9jKSBjb25zdAorICAgICAgeworCWNvbnN0IHNpemVfdCBfX2kgPSBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+OjppZC5fTV9pZCgpOworCWNvbnN0IGxvY2FsZTo6ZmFjZXQqKiBfX2NhY2hlcyA9IF9fbG9jLl9NX2ltcGwtPl9NX2NhY2hlczsKKwlpZiAoIV9fY2FjaGVzW19faV0pCisJICB7CisJICAgIF9fbW9uZXlwdW5jdF9jYWNoZTxfQ2hhclQsIF9JbnRsPiogX190bXAgPSBOVUxMOworCSAgICBfX3RyeQorCSAgICAgIHsKKwkJX190bXAgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPF9DaGFyVCwgX0ludGw+OworCQlfX3RtcC0+X01fY2FjaGUoX19sb2MpOworCSAgICAgIH0KKwkgICAgX19jYXRjaCguLi4pCisJICAgICAgeworCQlkZWxldGUgX190bXA7CisJCV9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICAgIH0KKwkgICAgX19sb2MuX01faW1wbC0+X01faW5zdGFsbF9jYWNoZShfX3RtcCwgX19pKTsKKwkgIH0KKwlyZXR1cm4gc3RhdGljX2Nhc3Q8CisJICBjb25zdCBfX21vbmV5cHVuY3RfY2FjaGU8X0NoYXJULCBfSW50bD4qPihfX2NhY2hlc1tfX2ldKTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KKyAgICB2b2lkCisgICAgX19tb25leXB1bmN0X2NhY2hlPF9DaGFyVCwgX0ludGw+OjpfTV9jYWNoZShjb25zdCBsb2NhbGUmIF9fbG9jKQorICAgIHsKKyAgICAgIF9NX2FsbG9jYXRlZCA9IHRydWU7CisKKyAgICAgIGNvbnN0IG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD4mIF9fbXAgPQorCXVzZV9mYWNldDxtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+ID4oX19sb2MpOworCisgICAgICBfTV9kZWNpbWFsX3BvaW50ID0gX19tcC5kZWNpbWFsX3BvaW50KCk7CisgICAgICBfTV90aG91c2FuZHNfc2VwID0gX19tcC50aG91c2FuZHNfc2VwKCk7CisgICAgICBfTV9mcmFjX2RpZ2l0cyA9IF9fbXAuZnJhY19kaWdpdHMoKTsKKworICAgICAgY2hhciogX19ncm91cGluZyA9IDA7CisgICAgICBfQ2hhclQqIF9fY3Vycl9zeW1ib2wgPSAwOworICAgICAgX0NoYXJUKiBfX3Bvc2l0aXZlX3NpZ24gPSAwOworICAgICAgX0NoYXJUKiBfX25lZ2F0aXZlX3NpZ24gPSAwOyAgICAgCisgICAgICBfX3RyeQorCXsKKwkgIF9NX2dyb3VwaW5nX3NpemUgPSBfX21wLmdyb3VwaW5nKCkuc2l6ZSgpOworCSAgX19ncm91cGluZyA9IG5ldyBjaGFyW19NX2dyb3VwaW5nX3NpemVdOworCSAgX19tcC5ncm91cGluZygpLmNvcHkoX19ncm91cGluZywgX01fZ3JvdXBpbmdfc2l6ZSk7CisJICBfTV9ncm91cGluZyA9IF9fZ3JvdXBpbmc7CisJICBfTV91c2VfZ3JvdXBpbmcgPSAoX01fZ3JvdXBpbmdfc2l6ZQorCQkJICAgICAmJiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oX01fZ3JvdXBpbmdbMF0pID4gMAorCQkJICAgICAmJiAoX01fZ3JvdXBpbmdbMF0KKwkJCQkgIT0gX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPGNoYXI+OjpfX21heCkpOworCisJICBfTV9jdXJyX3N5bWJvbF9zaXplID0gX19tcC5jdXJyX3N5bWJvbCgpLnNpemUoKTsKKwkgIF9fY3Vycl9zeW1ib2wgPSBuZXcgX0NoYXJUW19NX2N1cnJfc3ltYm9sX3NpemVdOworCSAgX19tcC5jdXJyX3N5bWJvbCgpLmNvcHkoX19jdXJyX3N5bWJvbCwgX01fY3Vycl9zeW1ib2xfc2l6ZSk7CisJICBfTV9jdXJyX3N5bWJvbCA9IF9fY3Vycl9zeW1ib2w7CisKKwkgIF9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IF9fbXAucG9zaXRpdmVfc2lnbigpLnNpemUoKTsKKwkgIF9fcG9zaXRpdmVfc2lnbiA9IG5ldyBfQ2hhclRbX01fcG9zaXRpdmVfc2lnbl9zaXplXTsKKwkgIF9fbXAucG9zaXRpdmVfc2lnbigpLmNvcHkoX19wb3NpdGl2ZV9zaWduLCBfTV9wb3NpdGl2ZV9zaWduX3NpemUpOworCSAgX01fcG9zaXRpdmVfc2lnbiA9IF9fcG9zaXRpdmVfc2lnbjsKKworCSAgX01fbmVnYXRpdmVfc2lnbl9zaXplID0gX19tcC5uZWdhdGl2ZV9zaWduKCkuc2l6ZSgpOworCSAgX19uZWdhdGl2ZV9zaWduID0gbmV3IF9DaGFyVFtfTV9uZWdhdGl2ZV9zaWduX3NpemVdOworCSAgX19tcC5uZWdhdGl2ZV9zaWduKCkuY29weShfX25lZ2F0aXZlX3NpZ24sIF9NX25lZ2F0aXZlX3NpZ25fc2l6ZSk7CisJICBfTV9uZWdhdGl2ZV9zaWduID0gX19uZWdhdGl2ZV9zaWduOworCisJICBfTV9wb3NfZm9ybWF0ID0gX19tcC5wb3NfZm9ybWF0KCk7CisJICBfTV9uZWdfZm9ybWF0ID0gX19tcC5uZWdfZm9ybWF0KCk7CisKKwkgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3QgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKKwkgIF9fY3Qud2lkZW4obW9uZXlfYmFzZTo6X1NfYXRvbXMsCisJCSAgICAgbW9uZXlfYmFzZTo6X1NfYXRvbXMgKyBtb25leV9iYXNlOjpfU19lbmQsIF9NX2F0b21zKTsKKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBkZWxldGUgW10gX19ncm91cGluZzsKKwkgIGRlbGV0ZSBbXSBfX2N1cnJfc3ltYm9sOworCSAgZGVsZXRlIFtdIF9fcG9zaXRpdmVfc2lnbjsKKwkgIGRlbGV0ZSBbXSBfX25lZ2F0aXZlX3NpZ247CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgfQorCitfR0xJQkNYWF9CRUdJTl9MREJMX05BTUVTUEFDRQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KKyAgICB0ZW1wbGF0ZTxib29sIF9JbnRsPgorICAgICAgX0luSXRlcgorICAgICAgbW9uZXlfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgorICAgICAgX01fZXh0cmFjdChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJCSBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZyYgX191bml0cykgY29uc3QKKyAgICAgIHsKKwl0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4JCQkgIF9fdHJhaXRzX3R5cGU7CisJdHlwZWRlZiB0eXBlbmFtZSBzdHJpbmdfdHlwZTo6c2l6ZV90eXBlCSAgICAgICAgICBzaXplX3R5cGU7CQorCXR5cGVkZWYgbW9uZXlfYmFzZTo6cGFydAkJCSAgcGFydDsKKwl0eXBlZGVmIF9fbW9uZXlwdW5jdF9jYWNoZTxfQ2hhclQsIF9JbnRsPiAgICAgICAgIF9fY2FjaGVfdHlwZTsKKwkKKwljb25zdCBsb2NhbGUmIF9fbG9jID0gX19pby5fTV9nZXRsb2MoKTsKKwljb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CisKKwlfX3VzZV9jYWNoZTxfX2NhY2hlX3R5cGU+IF9fdWM7CisJY29uc3QgX19jYWNoZV90eXBlKiBfX2xjID0gX191YyhfX2xvYyk7CisJY29uc3QgY2hhcl90eXBlKiBfX2xpdCA9IF9fbGMtPl9NX2F0b21zOworCisJLy8gRGVkdWNlZCBzaWduLgorCWJvb2wgX19uZWdhdGl2ZSA9IGZhbHNlOworCS8vIFNpZ24gc2l6ZS4KKwlzaXplX3R5cGUgX19zaWduX3NpemUgPSAwOworCS8vIFRydWUgaWYgc2lnbiBpcyBtYW5kYXRvcnkuCisJY29uc3QgYm9vbCBfX21hbmRhdG9yeV9zaWduID0gKF9fbGMtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZQorCQkJCSAgICAgICAmJiBfX2xjLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUpOworCS8vIFN0cmluZyBvZiBncm91cGluZyBpbmZvIGZyb20gdGhvdXNhbmRzX3NlcCBwbHVja2VkIGZyb20gX191bml0cy4KKwlzdHJpbmcgX19ncm91cGluZ190bXA7CisJaWYgKF9fbGMtPl9NX3VzZV9ncm91cGluZykKKwkgIF9fZ3JvdXBpbmdfdG1wLnJlc2VydmUoMzIpOworCS8vIExhc3QgcG9zaXRpb24gYmVmb3JlIHRoZSBkZWNpbWFsIHBvaW50LgorCWludCBfX2xhc3RfcG9zID0gMDsKKwkvLyBTZXBhcmF0b3IgcG9zaXRpb25zLCB0aGVuLCBwb3NzaWJseSwgZnJhY3Rpb25hbCBkaWdpdHMuCisJaW50IF9fbiA9IDA7CisJLy8gSWYgaW5wdXQgaXRlcmF0b3IgaXMgaW4gYSB2YWxpZCBzdGF0ZS4KKwlib29sIF9fdGVzdHZhbGlkID0gdHJ1ZTsKKwkvLyBGbGFnIG1hcmtpbmcgd2hlbiBhIGRlY2ltYWwgcG9pbnQgaXMgZm91bmQuCisJYm9vbCBfX3Rlc3RkZWNmb3VuZCA9IGZhbHNlOworCisJLy8gVGhlIHRlbnRhdGl2ZSByZXR1cm5lZCBzdHJpbmcgaXMgc3RvcmVkIGhlcmUuCisJc3RyaW5nIF9fcmVzOworCV9fcmVzLnJlc2VydmUoMzIpOworCisJY29uc3QgY2hhcl90eXBlKiBfX2xpdF96ZXJvID0gX19saXQgKyBtb25leV9iYXNlOjpfU196ZXJvOworCWNvbnN0IG1vbmV5X2Jhc2U6OnBhdHRlcm4gX19wID0gX19sYy0+X01fbmVnX2Zvcm1hdDsKKwlmb3IgKGludCBfX2kgPSAwOyBfX2kgPCA0ICYmIF9fdGVzdHZhbGlkOyArK19faSkKKwkgIHsKKwkgICAgY29uc3QgcGFydCBfX3doaWNoID0gc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkW19faV0pOworCSAgICBzd2l0Y2ggKF9fd2hpY2gpCisJICAgICAgeworCSAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgorCQkvLyBBY2NvcmRpbmcgdG8gMjIuMi42LjEuMiwgcDIsIHN5bWJvbCBpcyByZXF1aXJlZAorCQkvLyBpZiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKSwgb3RoZXJ3aXNlCisJCS8vIGlzIG9wdGlvbmFsIGFuZCBjb25zdW1lZCBvbmx5IGlmIG90aGVyIGNoYXJhY3RlcnMKKwkJLy8gYXJlIG5lZWRlZCB0byBjb21wbGV0ZSB0aGUgZm9ybWF0LgorCQlpZiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlIHx8IF9fc2lnbl9zaXplID4gMQorCQkgICAgfHwgX19pID09IDAKKwkJICAgIHx8IChfX2kgPT0gMSAmJiAoX19tYW5kYXRvcnlfc2lnbgorCQkJCSAgICAgfHwgKHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFswXSkKKwkJCQkJID09IG1vbmV5X2Jhc2U6OnNpZ24pCisJCQkJICAgICB8fCAoc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkWzJdKQorCQkJCQkgPT0gbW9uZXlfYmFzZTo6c3BhY2UpKSkKKwkJICAgIHx8IChfX2kgPT0gMiAmJiAoKHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFszXSkKKwkJCQkgICAgICA9PSBtb25leV9iYXNlOjp2YWx1ZSkKKwkJCQkgICAgIHx8IChfX21hbmRhdG9yeV9zaWduCisJCQkJCSAmJiAoc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkWzNdKQorCQkJCQkgICAgID09IG1vbmV5X2Jhc2U6OnNpZ24pKSkpKQorCQkgIHsKKwkJICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fbGMtPl9NX2N1cnJfc3ltYm9sX3NpemU7CisJCSAgICBzaXplX3R5cGUgX19qID0gMDsKKwkJICAgIGZvciAoOyBfX2JlZyAhPSBfX2VuZCAmJiBfX2ogPCBfX2xlbgorCQkJICAgJiYgKl9fYmVnID09IF9fbGMtPl9NX2N1cnJfc3ltYm9sW19fal07CisJCQkgKytfX2JlZywgKytfX2opOworCQkgICAgaWYgKF9faiAhPSBfX2xlbgorCQkJJiYgKF9faiB8fCBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpKQorCQkgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOworCQkgIH0KKwkJYnJlYWs7CisJICAgICAgY2FzZSBtb25leV9iYXNlOjpzaWduOgorCQkvLyBTaWduIG1pZ2h0IG5vdCBleGlzdCwgb3IgYmUgbW9yZSB0aGFuIG9uZSBjaGFyYWN0ZXIgbG9uZy4KKwkJaWYgKF9fbGMtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSAmJiBfX2JlZyAhPSBfX2VuZAorCQkgICAgJiYgKl9fYmVnID09IF9fbGMtPl9NX3Bvc2l0aXZlX3NpZ25bMF0pCisJCSAgeworCQkgICAgX19zaWduX3NpemUgPSBfX2xjLT5fTV9wb3NpdGl2ZV9zaWduX3NpemU7CisJCSAgICArK19fYmVnOworCQkgIH0KKwkJZWxzZSBpZiAoX19sYy0+X01fbmVnYXRpdmVfc2lnbl9zaXplICYmIF9fYmVnICE9IF9fZW5kCisJCQkgJiYgKl9fYmVnID09IF9fbGMtPl9NX25lZ2F0aXZlX3NpZ25bMF0pCisJCSAgeworCQkgICAgX19uZWdhdGl2ZSA9IHRydWU7CisJCSAgICBfX3NpZ25fc2l6ZSA9IF9fbGMtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZTsKKwkJICAgICsrX19iZWc7CisJCSAgfQorCQllbHNlIGlmIChfX2xjLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUKKwkJCSAmJiAhX19sYy0+X01fbmVnYXRpdmVfc2lnbl9zaXplKQorCQkgIC8vICIuLi4gaWYgbm8gc2lnbiBpcyBkZXRlY3RlZCwgdGhlIHJlc3VsdCBpcyBnaXZlbiB0aGUgc2lnbgorCQkgIC8vIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHNvdXJjZSBvZiB0aGUgZW1wdHkgc3RyaW5nIgorCQkgIF9fbmVnYXRpdmUgPSB0cnVlOworCQllbHNlIGlmIChfX21hbmRhdG9yeV9zaWduKQorCQkgIF9fdGVzdHZhbGlkID0gZmFsc2U7CisJCWJyZWFrOworCSAgICAgIGNhc2UgbW9uZXlfYmFzZTo6dmFsdWU6CisJCS8vIEV4dHJhY3QgZGlnaXRzLCByZW1vdmUgYW5kIHN0YXNoIGF3YXkgdGhlCisJCS8vIGdyb3VwaW5nIG9mIGZvdW5kIHRob3VzYW5kcyBzZXBhcmF0b3JzLgorCQlmb3IgKDsgX19iZWcgIT0gX19lbmQ7ICsrX19iZWcpCisJCSAgeworCQkgICAgY29uc3QgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKKwkJICAgIGNvbnN0IGNoYXJfdHlwZSogX19xID0gX190cmFpdHNfdHlwZTo6ZmluZChfX2xpdF96ZXJvLCAKKwkJCQkJCQkgICAgICAgMTAsIF9fYyk7CisJCSAgICBpZiAoX19xICE9IDApCisJCSAgICAgIHsKKwkJCV9fcmVzICs9IG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19fcSAtIF9fbGl0XTsKKwkJCSsrX19uOworCQkgICAgICB9CisJCSAgICBlbHNlIGlmIChfX2MgPT0gX19sYy0+X01fZGVjaW1hbF9wb2ludCAKKwkJCSAgICAgJiYgIV9fdGVzdGRlY2ZvdW5kKQorCQkgICAgICB7CisJCQlpZiAoX19sYy0+X01fZnJhY19kaWdpdHMgPD0gMCkKKwkJCSAgYnJlYWs7CisKKwkJCV9fbGFzdF9wb3MgPSBfX247CisJCQlfX24gPSAwOworCQkJX190ZXN0ZGVjZm91bmQgPSB0cnVlOworCQkgICAgICB9CisJCSAgICBlbHNlIGlmIChfX2xjLT5fTV91c2VfZ3JvdXBpbmcKKwkJCSAgICAgJiYgX19jID09IF9fbGMtPl9NX3Rob3VzYW5kc19zZXAKKwkJCSAgICAgJiYgIV9fdGVzdGRlY2ZvdW5kKQorCQkgICAgICB7CisJCQlpZiAoX19uKQorCQkJICB7CisJCQkgICAgLy8gTWFyayBwb3NpdGlvbiBmb3IgbGF0ZXIgYW5hbHlzaXMuCisJCQkgICAgX19ncm91cGluZ190bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19uKTsKKwkJCSAgICBfX24gPSAwOworCQkJICB9CisJCQllbHNlCisJCQkgIHsKKwkJCSAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOworCQkJICAgIGJyZWFrOworCQkJICB9CisJCSAgICAgIH0KKwkJICAgIGVsc2UKKwkJICAgICAgYnJlYWs7CisJCSAgfQorCQlpZiAoX19yZXMuZW1wdHkoKSkKKwkJICBfX3Rlc3R2YWxpZCA9IGZhbHNlOworCQlicmVhazsKKwkgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNwYWNlOgorCQkvLyBBdCBsZWFzdCBvbmUgc3BhY2UgaXMgcmVxdWlyZWQuCisJCWlmIChfX2JlZyAhPSBfX2VuZCAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCAqX19iZWcpKQorCQkgICsrX19iZWc7CisJCWVsc2UKKwkJICBfX3Rlc3R2YWxpZCA9IGZhbHNlOworCSAgICAgIGNhc2UgbW9uZXlfYmFzZTo6bm9uZToKKwkJLy8gT25seSBpZiBub3QgYXQgdGhlIGVuZCBvZiB0aGUgcGF0dGVybi4KKwkJaWYgKF9faSAhPSAzKQorCQkgIGZvciAoOyBfX2JlZyAhPSBfX2VuZAorCQkJICYmIF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsICpfX2JlZyk7ICsrX19iZWcpOworCQlicmVhazsKKwkgICAgICB9CisJICB9CisKKwkvLyBOZWVkIHRvIGdldCB0aGUgcmVzdCBvZiB0aGUgc2lnbiBjaGFyYWN0ZXJzLCBpZiB0aGV5IGV4aXN0LgorCWlmIChfX3NpZ25fc2l6ZSA+IDEgJiYgX190ZXN0dmFsaWQpCisJICB7CisJICAgIGNvbnN0IGNoYXJfdHlwZSogX19zaWduID0gX19uZWdhdGl2ZSA/IF9fbGMtPl9NX25lZ2F0aXZlX3NpZ24KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19sYy0+X01fcG9zaXRpdmVfc2lnbjsKKwkgICAgc2l6ZV90eXBlIF9faSA9IDE7CisJICAgIGZvciAoOyBfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBfX3NpZ25fc2l6ZQorCQkgICAmJiAqX19iZWcgPT0gX19zaWduW19faV07ICsrX19iZWcsICsrX19pKTsKKwkgICAgCisJICAgIGlmIChfX2kgIT0gX19zaWduX3NpemUpCisJICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKKwkgIH0KKworCWlmIChfX3Rlc3R2YWxpZCkKKwkgIHsKKwkgICAgLy8gU3RyaXAgbGVhZGluZyB6ZXJvcy4KKwkgICAgaWYgKF9fcmVzLnNpemUoKSA+IDEpCisJICAgICAgeworCQljb25zdCBzaXplX3R5cGUgX19maXJzdCA9IF9fcmVzLmZpbmRfZmlyc3Rfbm90X29mKCcwJyk7CisJCWNvbnN0IGJvb2wgX19vbmx5X3plcm9zID0gX19maXJzdCA9PSBzdHJpbmc6Om5wb3M7CisJCWlmIChfX2ZpcnN0KQorCQkgIF9fcmVzLmVyYXNlKDAsIF9fb25seV96ZXJvcyA/IF9fcmVzLnNpemUoKSAtIDEgOiBfX2ZpcnN0KTsKKwkgICAgICB9CisKKwkgICAgLy8gMjIuMi42LjEuMiwgcDQKKwkgICAgaWYgKF9fbmVnYXRpdmUgJiYgX19yZXNbMF0gIT0gJzAnKQorCSAgICAgIF9fcmVzLmluc2VydChfX3Jlcy5iZWdpbigpLCAnLScpOworCSAgICAKKwkgICAgLy8gVGVzdCBmb3IgZ3JvdXBpbmcgZmlkZWxpdHkuCisJICAgIGlmIChfX2dyb3VwaW5nX3RtcC5zaXplKCkpCisJICAgICAgeworCQkvLyBBZGQgdGhlIGVuZGluZyBncm91cGluZy4KKwkJX19ncm91cGluZ190bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX190ZXN0ZGVjZm91bmQgPyBfX2xhc3RfcG9zCisJCQkJCQkgICAgICAgICAgICAgICAgICAgOiBfX24pOworCQlpZiAoIXN0ZDo6X192ZXJpZnlfZ3JvdXBpbmcoX19sYy0+X01fZ3JvdXBpbmcsCisJCQkJCSAgICBfX2xjLT5fTV9ncm91cGluZ19zaXplLAorCQkJCQkgICAgX19ncm91cGluZ190bXApKQorCQkgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworCSAgICAgIH0KKwkgICAgCisJICAgIC8vIElmZiBub3QgZW5vdWdoIGRpZ2l0cyB3ZXJlIHN1cHBsaWVkIGFmdGVyIHRoZSBkZWNpbWFsLXBvaW50LgorCSAgICBpZiAoX190ZXN0ZGVjZm91bmQgJiYgX19uICE9IF9fbGMtPl9NX2ZyYWNfZGlnaXRzKQorCSAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CisJICB9CisKKwkvLyBJZmYgdmFsaWQgc2VxdWVuY2UgaXMgbm90IHJlY29nbml6ZWQuCisJaWYgKCFfX3Rlc3R2YWxpZCkKKwkgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworCWVsc2UKKwkgIF9fdW5pdHMuc3dhcChfX3Jlcyk7CisJCisJLy8gSWZmIG5vIG1vcmUgY2hhcmFjdGVycyBhcmUgYXZhaWxhYmxlLgorCWlmIChfX2JlZyA9PSBfX2VuZCkKKwkgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CisJcmV0dXJuIF9fYmVnOworICAgICAgfQorCisjaWYgZGVmaW5lZCBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQgJiYgZGVmaW5lZCBfX0xPTkdfRE9VQkxFXzEyOF9fCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KKyAgICBfSW5JdGVyCisgICAgbW9uZXlfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgorICAgIF9fZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCisJICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRvdWJsZSYgX191bml0cykgY29uc3QKKyAgICB7CisgICAgICBzdHJpbmcgX19zdHI7CisgICAgICBfX2JlZyA9IF9faW50bCA/IF9NX2V4dHJhY3Q8dHJ1ZT4oX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX19zdHIpCisgICAgICAgICAgICAgICAgICAgICA6IF9NX2V4dHJhY3Q8ZmFsc2U+KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fc3RyKTsKKyAgICAgIHN0ZDo6X19jb252ZXJ0X3RvX3YoX19zdHIuY19zdHIoKSwgX191bml0cywgX19lcnIsIF9TX2dldF9jX2xvY2FsZSgpKTsKKyAgICAgIHJldHVybiBfX2JlZzsKKyAgICB9CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CisgICAgX0luSXRlcgorICAgIG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKKyAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKKwkgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBjb25zdAorICAgIHsKKyAgICAgIHN0cmluZyBfX3N0cjsKKyAgICAgIF9fYmVnID0gX19pbnRsID8gX01fZXh0cmFjdDx0cnVlPihfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3N0cikKKwkgICAgICAgICAgICAgOiBfTV9leHRyYWN0PGZhbHNlPihfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3N0cik7CisgICAgICBzdGQ6Ol9fY29udmVydF90b192KF9fc3RyLmNfc3RyKCksIF9fdW5pdHMsIF9fZXJyLCBfU19nZXRfY19sb2NhbGUoKSk7CisgICAgICByZXR1cm4gX19iZWc7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KKyAgICBfSW5JdGVyCisgICAgbW9uZXlfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgorICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAorCSAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RyaW5nOjpzaXplX3R5cGUgICAgICAgICAgICAgICAgICBzaXplX3R5cGU7CisKKyAgICAgIGNvbnN0IGxvY2FsZSYgX19sb2MgPSBfX2lvLl9NX2dldGxvYygpOworICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOworCisgICAgICBzdHJpbmcgX19zdHI7CisgICAgICBfX2JlZyA9IF9faW50bCA/IF9NX2V4dHJhY3Q8dHJ1ZT4oX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX19zdHIpCisJICAgICAgICAgICAgIDogX01fZXh0cmFjdDxmYWxzZT4oX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX19zdHIpOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19zdHIuc2l6ZSgpOworICAgICAgaWYgKF9fbGVuKQorCXsKKwkgIF9fZGlnaXRzLnJlc2l6ZShfX2xlbik7CisJICBfX2N0eXBlLndpZGVuKF9fc3RyLmRhdGEoKSwgX19zdHIuZGF0YSgpICsgX19sZW4sICZfX2RpZ2l0c1swXSk7CisJfQorICAgICAgcmV0dXJuIF9fYmVnOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgorICAgIHRlbXBsYXRlPGJvb2wgX0ludGw+CisgICAgICBfT3V0SXRlcgorICAgICAgbW9uZXlfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKKyAgICAgIF9NX2luc2VydChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKKwkJY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgc3RyaW5nX3R5cGU6OnNpemVfdHlwZQkgICAgICAgICAgc2l6ZV90eXBlOworCXR5cGVkZWYgbW9uZXlfYmFzZTo6cGFydCAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydDsKKwl0eXBlZGVmIF9fbW9uZXlwdW5jdF9jYWNoZTxfQ2hhclQsIF9JbnRsPiAgICAgICAgIF9fY2FjaGVfdHlwZTsKKyAgICAgIAorCWNvbnN0IGxvY2FsZSYgX19sb2MgPSBfX2lvLl9NX2dldGxvYygpOworCWNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKKworCV9fdXNlX2NhY2hlPF9fY2FjaGVfdHlwZT4gX191YzsKKwljb25zdCBfX2NhY2hlX3R5cGUqIF9fbGMgPSBfX3VjKF9fbG9jKTsKKwljb25zdCBjaGFyX3R5cGUqIF9fbGl0ID0gX19sYy0+X01fYXRvbXM7CisKKwkvLyBEZXRlcm1pbmUgaWYgbmVnYXRpdmUgb3IgcG9zaXRpdmUgZm9ybWF0cyBhcmUgdG8gYmUgdXNlZCwgYW5kCisJLy8gZGlzY2FyZCBsZWFkaW5nIG5lZ2F0aXZlX3NpZ24gaWYgaXQgaXMgcHJlc2VudC4KKwljb25zdCBjaGFyX3R5cGUqIF9fYmVnID0gX19kaWdpdHMuZGF0YSgpOworCisJbW9uZXlfYmFzZTo6cGF0dGVybiBfX3A7CisJY29uc3QgY2hhcl90eXBlKiBfX3NpZ247CisJc2l6ZV90eXBlIF9fc2lnbl9zaXplOworCWlmICghKCpfX2JlZyA9PSBfX2xpdFttb25leV9iYXNlOjpfU19taW51c10pKQorCSAgeworCSAgICBfX3AgPSBfX2xjLT5fTV9wb3NfZm9ybWF0OworCSAgICBfX3NpZ24gPSBfX2xjLT5fTV9wb3NpdGl2ZV9zaWduOworCSAgICBfX3NpZ25fc2l6ZSA9IF9fbGMtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZTsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIF9fcCA9IF9fbGMtPl9NX25lZ19mb3JtYXQ7CisJICAgIF9fc2lnbiA9IF9fbGMtPl9NX25lZ2F0aXZlX3NpZ247CisJICAgIF9fc2lnbl9zaXplID0gX19sYy0+X01fbmVnYXRpdmVfc2lnbl9zaXplOworCSAgICBpZiAoX19kaWdpdHMuc2l6ZSgpKQorCSAgICAgICsrX19iZWc7CisJICB9CisgICAgICAgCisJLy8gTG9vayBmb3IgdmFsaWQgbnVtYmVycyBpbiB0aGUgY3R5cGUgZmFjZXQgd2l0aGluIGlucHV0IGRpZ2l0cy4KKwlzaXplX3R5cGUgX19sZW4gPSBfX2N0eXBlLnNjYW5fbm90KGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2JlZywKKwkJCQkJICAgX19iZWcgKyBfX2RpZ2l0cy5zaXplKCkpIC0gX19iZWc7CisJaWYgKF9fbGVuKQorCSAgeworCSAgICAvLyBBc3N1bWUgdmFsaWQgaW5wdXQsIGFuZCBhdHRlbXB0IHRvIGZvcm1hdC4KKwkgICAgLy8gQnJlYWsgZG93biBpbnB1dCBudW1iZXJzIGludG8gYmFzZSBjb21wb25lbnRzLCBhcyBmb2xsb3dzOgorCSAgICAvLyAgIGZpbmFsX3ZhbHVlID0gZ3JvdXBlZCB1bml0cyArIChkZWNpbWFsIHBvaW50KSArIChkaWdpdHMpCisJICAgIHN0cmluZ190eXBlIF9fdmFsdWU7CisJICAgIF9fdmFsdWUucmVzZXJ2ZSgyICogX19sZW4pOworCisJICAgIC8vIEFkZCB0aG91c2FuZHMgc2VwYXJhdG9ycyB0byBub24tZGVjaW1hbCBkaWdpdHMsIHBlcgorCSAgICAvLyBncm91cGluZyBydWxlcy4KKwkgICAgbG9uZyBfX3BhZGRlYyA9IF9fbGVuIC0gX19sYy0+X01fZnJhY19kaWdpdHM7CisJICAgIGlmIChfX3BhZGRlYyA+IDApCisgIAkgICAgICB7CisJCWlmIChfX2xjLT5fTV9mcmFjX2RpZ2l0cyA8IDApCisJCSAgX19wYWRkZWMgPSBfX2xlbjsKKyAgCQlpZiAoX19sYy0+X01fZ3JvdXBpbmdfc2l6ZSkKKyAgCQkgIHsKKwkJICAgIF9fdmFsdWUuYXNzaWduKDIgKiBfX3BhZGRlYywgY2hhcl90eXBlKCkpOworIAkJICAgIF9DaGFyVCogX192ZW5kID0gCisJCSAgICAgIHN0ZDo6X19hZGRfZ3JvdXBpbmcoJl9fdmFsdWVbMF0sIF9fbGMtPl9NX3Rob3VzYW5kc19zZXAsCisJCQkJCSAgX19sYy0+X01fZ3JvdXBpbmcsCisJCQkJCSAgX19sYy0+X01fZ3JvdXBpbmdfc2l6ZSwKKwkJCQkJICBfX2JlZywgX19iZWcgKyBfX3BhZGRlYyk7CisJCSAgICBfX3ZhbHVlLmVyYXNlKF9fdmVuZCAtICZfX3ZhbHVlWzBdKTsKKyAgCQkgIH0KKyAgCQllbHNlCisJCSAgX192YWx1ZS5hc3NpZ24oX19iZWcsIF9fcGFkZGVjKTsKKwkgICAgICB9CisKKwkgICAgLy8gRGVhbCB3aXRoIGRlY2ltYWwgcG9pbnQsIGRlY2ltYWwgZGlnaXRzLgorCSAgICBpZiAoX19sYy0+X01fZnJhY19kaWdpdHMgPiAwKQorCSAgICAgIHsKKwkJX192YWx1ZSArPSBfX2xjLT5fTV9kZWNpbWFsX3BvaW50OworCQlpZiAoX19wYWRkZWMgPj0gMCkKKwkJICBfX3ZhbHVlLmFwcGVuZChfX2JlZyArIF9fcGFkZGVjLCBfX2xjLT5fTV9mcmFjX2RpZ2l0cyk7CisJCWVsc2UKKwkJICB7CisJCSAgICAvLyBIYXZlIHRvIHBhZCB6ZXJvcyBpbiB0aGUgZGVjaW1hbCBwb3NpdGlvbi4KKwkJICAgIF9fdmFsdWUuYXBwZW5kKC1fX3BhZGRlYywgX19saXRbbW9uZXlfYmFzZTo6X1NfemVyb10pOworCQkgICAgX192YWx1ZS5hcHBlbmQoX19iZWcsIF9fbGVuKTsKKwkJICB9CisgIAkgICAgICB9CisgIAorCSAgICAvLyBDYWxjdWxhdGUgbGVuZ3RoIG9mIHJlc3VsdGluZyBzdHJpbmcuCisJICAgIGNvbnN0IGlvc19iYXNlOjpmbXRmbGFncyBfX2YgPSBfX2lvLmZsYWdzKCkgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsKKwkgICAgX19sZW4gPSBfX3ZhbHVlLnNpemUoKSArIF9fc2lnbl9zaXplOworCSAgICBfX2xlbiArPSAoKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkKKwkJICAgICAgPyBfX2xjLT5fTV9jdXJyX3N5bWJvbF9zaXplIDogMCk7CisKKwkgICAgc3RyaW5nX3R5cGUgX19yZXM7CisJICAgIF9fcmVzLnJlc2VydmUoMiAqIF9fbGVuKTsKKwkgICAgCisJICAgIGNvbnN0IHNpemVfdHlwZSBfX3dpZHRoID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2lvLndpZHRoKCkpOyAgCisJICAgIGNvbnN0IGJvb2wgX190ZXN0aXBhZCA9IChfX2YgPT0gaW9zX2Jhc2U6OmludGVybmFsCisJCQkJICAgICAmJiBfX2xlbiA8IF9fd2lkdGgpOworCSAgICAvLyBGaXQgZm9ybWF0dGVkIGRpZ2l0cyBpbnRvIHRoZSByZXF1aXJlZCBwYXR0ZXJuLgorCSAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCA0OyArK19faSkKKwkgICAgICB7CisJCWNvbnN0IHBhcnQgX193aGljaCA9IHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFtfX2ldKTsKKwkJc3dpdGNoIChfX3doaWNoKQorCQkgIHsKKwkJICBjYXNlIG1vbmV5X2Jhc2U6OnN5bWJvbDoKKwkJICAgIGlmIChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpCisJCSAgICAgIF9fcmVzLmFwcGVuZChfX2xjLT5fTV9jdXJyX3N5bWJvbCwKKwkJCQkgICBfX2xjLT5fTV9jdXJyX3N5bWJvbF9zaXplKTsKKwkJICAgIGJyZWFrOworCQkgIGNhc2UgbW9uZXlfYmFzZTo6c2lnbjoKKwkJICAgIC8vIFNpZ24gbWlnaHQgbm90IGV4aXN0LCBvciBiZSBtb3JlIHRoYW4gb25lCisJCSAgICAvLyBjaGFyYWN0ZXIgbG9uZy4gSW4gdGhhdCBjYXNlLCBhZGQgaW4gdGhlIHJlc3QKKwkJICAgIC8vIGJlbG93LgorCQkgICAgaWYgKF9fc2lnbl9zaXplKQorCQkgICAgICBfX3JlcyArPSBfX3NpZ25bMF07CisJCSAgICBicmVhazsKKwkJICBjYXNlIG1vbmV5X2Jhc2U6OnZhbHVlOgorCQkgICAgX19yZXMgKz0gX192YWx1ZTsKKwkJICAgIGJyZWFrOworCQkgIGNhc2UgbW9uZXlfYmFzZTo6c3BhY2U6CisJCSAgICAvLyBBdCBsZWFzdCBvbmUgc3BhY2UgaXMgcmVxdWlyZWQsIGJ1dCBpZiBpbnRlcm5hbAorCQkgICAgLy8gZm9ybWF0dGluZyBpcyByZXF1aXJlZCwgYW4gYXJiaXRyYXJ5IG51bWJlciBvZgorCQkgICAgLy8gZmlsbCBzcGFjZXMgd2lsbCBiZSBuZWNlc3NhcnkuCisJCSAgICBpZiAoX190ZXN0aXBhZCkKKwkJICAgICAgX19yZXMuYXBwZW5kKF9fd2lkdGggLSBfX2xlbiwgX19maWxsKTsKKwkJICAgIGVsc2UKKwkJICAgICAgX19yZXMgKz0gX19maWxsOworCQkgICAgYnJlYWs7CisJCSAgY2FzZSBtb25leV9iYXNlOjpub25lOgorCQkgICAgaWYgKF9fdGVzdGlwYWQpCisJCSAgICAgIF9fcmVzLmFwcGVuZChfX3dpZHRoIC0gX19sZW4sIF9fZmlsbCk7CisJCSAgICBicmVhazsKKwkJICB9CisJICAgICAgfQorCSAgICAKKwkgICAgLy8gU3BlY2lhbCBjYXNlIG9mIG11bHRpLXBhcnQgc2lnbiBwYXJ0cy4KKwkgICAgaWYgKF9fc2lnbl9zaXplID4gMSkKKwkgICAgICBfX3Jlcy5hcHBlbmQoX19zaWduICsgMSwgX19zaWduX3NpemUgLSAxKTsKKwkgICAgCisJICAgIC8vIFBhZCwgaWYgc3RpbGwgbmVjZXNzYXJ5LgorCSAgICBfX2xlbiA9IF9fcmVzLnNpemUoKTsKKwkgICAgaWYgKF9fd2lkdGggPiBfX2xlbikKKwkgICAgICB7CisJCWlmIChfX2YgPT0gaW9zX2Jhc2U6OmxlZnQpCisJCSAgLy8gQWZ0ZXIuCisJCSAgX19yZXMuYXBwZW5kKF9fd2lkdGggLSBfX2xlbiwgX19maWxsKTsKKwkJZWxzZQorCQkgIC8vIEJlZm9yZS4KKwkJICBfX3Jlcy5pbnNlcnQoMCwgX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOworCQlfX2xlbiA9IF9fd2lkdGg7CisJICAgICAgfQorCSAgICAKKwkgICAgLy8gV3JpdGUgcmVzdWx0aW5nLCBmdWxseS1mb3JtYXR0ZWQgc3RyaW5nIHRvIG91dHB1dCBpdGVyYXRvci4KKwkgICAgX19zID0gc3RkOjpfX3dyaXRlKF9fcywgX19yZXMuZGF0YSgpLCBfX2xlbik7CisJICB9CisJX19pby53aWR0aCgwKTsKKwlyZXR1cm4gX19zOyAgICAKKyAgICAgIH0KKworI2lmIGRlZmluZWQgX0dMSUJDWFhfTE9OR19ET1VCTEVfQ09NUEFUICYmIGRlZmluZWQgX19MT05HX0RPVUJMRV8xMjhfXworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgorICAgIF9PdXRJdGVyCisgICAgbW9uZXlfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKKyAgICBfX2RvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCisJICAgICBkb3VibGUgX191bml0cykgY29uc3QKKyAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2ludGwsIF9faW8sIF9fZmlsbCwgKGxvbmcgZG91YmxlKSBfX3VuaXRzKTsgfQorI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KKyAgICBfT3V0SXRlcgorICAgIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CisgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKKwkgICBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdAorICAgIHsKKyAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CisgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CisjaWZkZWYgX0dMSUJDWFhfVVNFX0M5OQorICAgICAgLy8gRmlyc3QgdHJ5IGEgYnVmZmVyIHBlcmhhcHMgYmlnIGVub3VnaC4KKyAgICAgIGludCBfX2NzX3NpemUgPSA2NDsKKyAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDMyOC4gQmFkIHNwcmludGYgZm9ybWF0IG1vZGlmaWVyIGluIG1vbmV5X3B1dDw+Ojpkb19wdXQoKQorICAgICAgaW50IF9fbGVuID0gc3RkOjpfX2NvbnZlcnRfZnJvbV92KF9TX2dldF9jX2xvY2FsZSgpLCBfX2NzLCBfX2NzX3NpemUsCisJCQkJCSIlLipMZiIsIDAsIF9fdW5pdHMpOworICAgICAgLy8gSWYgdGhlIGJ1ZmZlciB3YXMgbm90IGxhcmdlIGVub3VnaCwgdHJ5IGFnYWluIHdpdGggdGhlIGNvcnJlY3Qgc2l6ZS4KKyAgICAgIGlmIChfX2xlbiA+PSBfX2NzX3NpemUpCisJeworCSAgX19jc19zaXplID0gX19sZW4gKyAxOworCSAgX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOworCSAgX19sZW4gPSBzdGQ6Ol9fY29udmVydF9mcm9tX3YoX1NfZ2V0X2NfbG9jYWxlKCksIF9fY3MsIF9fY3Nfc2l6ZSwKKwkJCQkJIiUuKkxmIiwgMCwgX191bml0cyk7CisJfQorI2Vsc2UKKyAgICAgIC8vIG1heF9leHBvbmVudDEwICsgMSBmb3IgdGhlIGludGVnZXIgcGFydCwgKyAyIGZvciBzaWduIGFuZCAnXDAnLgorICAgICAgY29uc3QgaW50IF9fY3Nfc2l6ZSA9CisJX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPGxvbmcgZG91YmxlPjo6X19tYXhfZXhwb25lbnQxMCArIDM7CisgICAgICBjaGFyKiBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CisgICAgICBpbnQgX19sZW4gPSBzdGQ6Ol9fY29udmVydF9mcm9tX3YoX1NfZ2V0X2NfbG9jYWxlKCksIF9fY3MsIDAsICIlLipMZiIsIAorCQkJCQkwLCBfX3VuaXRzKTsKKyNlbmRpZgorICAgICAgc3RyaW5nX3R5cGUgX19kaWdpdHMoX19sZW4sIGNoYXJfdHlwZSgpKTsKKyAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVuLCAmX19kaWdpdHNbMF0pOworICAgICAgcmV0dXJuIF9faW50bCA/IF9NX2luc2VydDx0cnVlPihfX3MsIF9faW8sIF9fZmlsbCwgX19kaWdpdHMpCisJICAgICAgICAgICAgOiBfTV9pbnNlcnQ8ZmFsc2U+KF9fcywgX19pbywgX19maWxsLCBfX2RpZ2l0cyk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CisgICAgX091dEl0ZXIKKyAgICBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgorICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCisJICAgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAorICAgIHsgcmV0dXJuIF9faW50bCA/IF9NX2luc2VydDx0cnVlPihfX3MsIF9faW8sIF9fZmlsbCwgX19kaWdpdHMpCisJICAgICAgICAgICAgOiBfTV9pbnNlcnQ8ZmFsc2U+KF9fcywgX19pbywgX19maWxsLCBfX2RpZ2l0cyk7IH0KKworX0dMSUJDWFhfRU5EX0xEQkxfTkFNRVNQQUNFCisKKyAgLy8gTkI6IE5vdCBlc3BlY2lhbGx5IHVzZWZ1bC4gV2l0aG91dCBhbiBpb3NfYmFzZSBvYmplY3Qgb3Igc29tZQorICAvLyBraW5kIG9mIGxvY2FsZSByZWZlcmVuY2UsIHdlIGFyZSBsZWZ0IGNsYXdpbmcgYXQgdGhlIGFpciB3aGVyZQorICAvLyB0aGUgc2lkZSBvZiB0aGUgbW91bnRhaW4gdXNlZCB0byBiZS4uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CisgICAgdGltZV9iYXNlOjpkYXRlb3JkZXIKKyAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+Ojpkb19kYXRlX29yZGVyKCkgY29uc3QKKyAgICB7IHJldHVybiB0aW1lX2Jhc2U6Om5vX29yZGVyOyB9CisKKyAgLy8gRXhwYW5kIGEgc3RyZnRpbWUgZm9ybWF0IHN0cmluZyBhbmQgcGFyc2UgaXQuICBFLmcuLCBkb19nZXRfZGF0ZSgpIG1heQorICAvLyBwYXNzICVtLyVkLyVZID0+IGV4dHJhY3RlZCBjaGFyYWN0ZXJzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CisgICAgX0luSXRlcgorICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgorICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJCQkgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0sCisJCQkgIGNvbnN0IF9DaGFyVCogX19mb3JtYXQpIGNvbnN0CisgICAgeworICAgICAgY29uc3QgbG9jYWxlJiBfX2xvYyA9IF9faW8uX01fZ2V0bG9jKCk7CisgICAgICBjb25zdCBfX3RpbWVwdW5jdDxfQ2hhclQ+JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CisgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CisgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBjaGFyX3RyYWl0czxfQ2hhclQ+OjpsZW5ndGgoX19mb3JtYXQpOworCisgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX3RtcGVyciA9IGlvc19iYXNlOjpnb29kYml0OworICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19iZWcgIT0gX19lbmQgJiYgX19pIDwgX19sZW4gJiYgIV9fdG1wZXJyOyArK19faSkKKwl7CisJICBpZiAoX19jdHlwZS5uYXJyb3coX19mb3JtYXRbX19pXSwgMCkgPT0gJyUnKQorCSAgICB7CisJICAgICAgLy8gVmVyaWZ5IHZhbGlkIGZvcm1hdHRpbmcgY29kZSwgYXR0ZW1wdCB0byBleHRyYWN0LgorCSAgICAgIGNoYXIgX19jID0gX19jdHlwZS5uYXJyb3coX19mb3JtYXRbKytfX2ldLCAwKTsKKwkgICAgICBpbnQgX19tZW0gPSAwOworCSAgICAgIGlmIChfX2MgPT0gJ0UnIHx8IF9fYyA9PSAnTycpCisJCV9fYyA9IF9fY3R5cGUubmFycm93KF9fZm9ybWF0WysrX19pXSwgMCk7CisJICAgICAgc3dpdGNoIChfX2MpCisJCXsKKwkJICBjb25zdCBjaGFyKiBfX2NzOworCQkgIF9DaGFyVCBfX3djc1sxMF07CisJCWNhc2UgJ2EnOgorCQkgIC8vIEFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZSBbdG1fd2RheV0KKwkJICBjb25zdCBjaGFyX3R5cGUqICBfX2RheXMxWzddOworCQkgIF9fdHAuX01fZGF5c19hYmJyZXZpYXRlZChfX2RheXMxKTsKKwkJICBfX2JlZyA9IF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG0tPnRtX3dkYXksIF9fZGF5czEsCisJCQkJCSAgNywgX19pbywgX190bXBlcnIpOworCQkgIGJyZWFrOworCQljYXNlICdBJzoKKwkJICAvLyBXZWVrZGF5IG5hbWUgW3RtX3dkYXldLgorCQkgIGNvbnN0IGNoYXJfdHlwZSogIF9fZGF5czJbN107CisJCSAgX190cC5fTV9kYXlzKF9fZGF5czIpOworCQkgIF9fYmVnID0gX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fd2RheSwgX19kYXlzMiwKKwkJCQkJICA3LCBfX2lvLCBfX3RtcGVycik7CisJCSAgYnJlYWs7CisJCWNhc2UgJ2gnOgorCQljYXNlICdiJzoKKwkJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lIFt0bV9tb25dCisJCSAgY29uc3QgY2hhcl90eXBlKiAgX19tb250aHMxWzEyXTsKKwkJICBfX3RwLl9NX21vbnRoc19hYmJyZXZpYXRlZChfX21vbnRoczEpOworCQkgIF9fYmVnID0gX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbW9uLCAKKwkJCQkJICBfX21vbnRoczEsIDEyLCBfX2lvLCBfX3RtcGVycik7CisJCSAgYnJlYWs7CisJCWNhc2UgJ0InOgorCQkgIC8vIE1vbnRoIG5hbWUgW3RtX21vbl0uCisJCSAgY29uc3QgY2hhcl90eXBlKiAgX19tb250aHMyWzEyXTsKKwkJICBfX3RwLl9NX21vbnRocyhfX21vbnRoczIpOworCQkgIF9fYmVnID0gX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbW9uLCAKKwkJCQkJICBfX21vbnRoczIsIDEyLCBfX2lvLCBfX3RtcGVycik7CisJCSAgYnJlYWs7CisJCWNhc2UgJ2MnOgorCQkgIC8vIERlZmF1bHQgdGltZSBhbmQgZGF0ZSByZXByZXNlbnRhdGlvbi4KKwkJICBjb25zdCBjaGFyX3R5cGUqICBfX2R0WzJdOworCQkgIF9fdHAuX01fZGF0ZV90aW1lX2Zvcm1hdHMoX19kdCk7CisJCSAgX19iZWcgPSBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX3RtcGVyciwgCisJCQkJCQlfX3RtLCBfX2R0WzBdKTsKKwkJICBicmVhazsKKwkJY2FzZSAnZCc6CisJCSAgLy8gRGF5IFswMSwgMzFdLiBbdG1fbWRheV0KKwkJICBfX2JlZyA9IF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbWRheSwgMSwgMzEsIDIsCisJCQkJCSBfX2lvLCBfX3RtcGVycik7CisJCSAgYnJlYWs7CisJCWNhc2UgJ2UnOgorCQkgIC8vIERheSBbMSwgMzFdLCB3aXRoIHNpbmdsZSBkaWdpdHMgcHJlY2VkZWQgYnkKKwkJICAvLyBzcGFjZS4gW3RtX21kYXldCisJCSAgaWYgKF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsICpfX2JlZykpCisJCSAgICBfX2JlZyA9IF9NX2V4dHJhY3RfbnVtKCsrX19iZWcsIF9fZW5kLCBfX3RtLT50bV9tZGF5LCAxLCA5LAorCQkJCQkgICAxLCBfX2lvLCBfX3RtcGVycik7CisJCSAgZWxzZQorCQkgICAgX19iZWcgPSBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX21kYXksIDEwLCAzMSwKKwkJCQkJICAgMiwgX19pbywgX190bXBlcnIpOworCQkgIGJyZWFrOworCQljYXNlICdEJzoKKwkJICAvLyBFcXVpdmFsZW50IHRvICVtLyVkLyV5Llt0bV9tb24sIHRtX21kYXksIHRtX3llYXJdCisJCSAgX19jcyA9ICIlbS8lZC8leSI7CisJCSAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgOSwgX193Y3MpOworCQkgIF9fYmVnID0gX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX190bXBlcnIsIAorCQkJCQkJX190bSwgX193Y3MpOworCQkgIGJyZWFrOworCQljYXNlICdIJzoKKwkJICAvLyBIb3VyIFswMCwgMjNdLiBbdG1faG91cl0KKwkJICBfX2JlZyA9IF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1faG91ciwgMCwgMjMsIDIsCisJCQkJCSBfX2lvLCBfX3RtcGVycik7CisJCSAgYnJlYWs7CisJCWNhc2UgJ0knOgorCQkgIC8vIEhvdXIgWzAxLCAxMl0uIFt0bV9ob3VyXQorCQkgIF9fYmVnID0gX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9ob3VyLCAxLCAxMiwgMiwKKwkJCQkJIF9faW8sIF9fdG1wZXJyKTsKKwkJICBicmVhazsKKwkJY2FzZSAnbSc6CisJCSAgLy8gTW9udGggWzAxLCAxMl0uIFt0bV9tb25dCisJCSAgX19iZWcgPSBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fbWVtLCAxLCAxMiwgMiwgCisJCQkJCSBfX2lvLCBfX3RtcGVycik7CisJCSAgaWYgKCFfX3RtcGVycikKKwkJICAgIF9fdG0tPnRtX21vbiA9IF9fbWVtIC0gMTsKKwkJICBicmVhazsKKwkJY2FzZSAnTSc6CisJCSAgLy8gTWludXRlIFswMCwgNTldLiBbdG1fbWluXQorCQkgIF9fYmVnID0gX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9taW4sIDAsIDU5LCAyLAorCQkJCQkgX19pbywgX190bXBlcnIpOworCQkgIGJyZWFrOworCQljYXNlICduJzoKKwkJICBpZiAoX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKSA9PSAnXG4nKQorCQkgICAgKytfX2JlZzsKKwkJICBlbHNlCisJCSAgICBfX3RtcGVyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKwkJICBicmVhazsKKwkJY2FzZSAnUic6CisJCSAgLy8gRXF1aXZhbGVudCB0byAoJUg6JU0pLgorCQkgIF9fY3MgPSAiJUg6JU0iOworCQkgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDYsIF9fd2NzKTsKKwkJICBfX2JlZyA9IF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fdG1wZXJyLCAKKwkJCQkJCV9fdG0sIF9fd2NzKTsKKwkJICBicmVhazsKKwkJY2FzZSAnUyc6CisJCSAgLy8gU2Vjb25kcy4gW3RtX3NlY10KKwkJICAvLyBbMDAsIDYwXSBpbiBDOTkgKG9uZSBsZWFwLXNlY29uZCksIFswMCwgNjFdIGluIEM4OS4KKyNpZmRlZiBfR0xJQkNYWF9VU0VfQzk5CisJCSAgX19iZWcgPSBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX3NlYywgMCwgNjAsIDIsCisjZWxzZQorCQkgIF9fYmVnID0gX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9zZWMsIDAsIDYxLCAyLAorI2VuZGlmCisJCQkJCSBfX2lvLCBfX3RtcGVycik7CisJCSAgYnJlYWs7CisJCWNhc2UgJ3QnOgorCQkgIGlmIChfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApID09ICdcdCcpCisJCSAgICArK19fYmVnOworCQkgIGVsc2UKKwkJICAgIF9fdG1wZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworCQkgIGJyZWFrOworCQljYXNlICdUJzoKKwkJICAvLyBFcXVpdmFsZW50IHRvICglSDolTTolUykuCisJCSAgX19jcyA9ICIlSDolTTolUyI7CisJCSAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgOSwgX193Y3MpOworCQkgIF9fYmVnID0gX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX190bXBlcnIsIAorCQkJCQkJX190bSwgX193Y3MpOworCQkgIGJyZWFrOworCQljYXNlICd4JzoKKwkJICAvLyBMb2NhbGUncyBkYXRlLgorCQkgIGNvbnN0IGNoYXJfdHlwZSogIF9fZGF0ZXNbMl07CisJCSAgX190cC5fTV9kYXRlX2Zvcm1hdHMoX19kYXRlcyk7CisJCSAgX19iZWcgPSBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX3RtcGVyciwgCisJCQkJCQlfX3RtLCBfX2RhdGVzWzBdKTsKKwkJICBicmVhazsKKwkJY2FzZSAnWCc6CisJCSAgLy8gTG9jYWxlJ3MgdGltZS4KKwkJICBjb25zdCBjaGFyX3R5cGUqICBfX3RpbWVzWzJdOworCQkgIF9fdHAuX01fdGltZV9mb3JtYXRzKF9fdGltZXMpOworCQkgIF9fYmVnID0gX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX190bXBlcnIsIAorCQkJCQkJX190bSwgX190aW1lc1swXSk7CisJCSAgYnJlYWs7CisJCWNhc2UgJ3knOgorCQljYXNlICdDJzogLy8gQzk5CisJCSAgLy8gVHdvIGRpZ2l0IHllYXIuCisJCWNhc2UgJ1knOgorCQkgIC8vIFllYXIgWzE5MDApLgorCQkgIC8vIE5COiBXZSBwYXJzZSBlaXRoZXIgdHdvIGRpZ2l0cywgaW1wbGljaXRseSB5ZWFycyBzaW5jZQorCQkgIC8vIDE5MDAsIG9yIDQgZGlnaXRzLCBmdWxsIHllYXIuICBJbiBib3RoIGNhc2VzIHdlIGNhbiAKKwkJICAvLyByZWNvbnN0cnVjdCBbdG1feWVhcl0uICBTZWUgYWxzbyBsaWJzdGRjKysvMjY3MDEuCisJCSAgX19iZWcgPSBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fbWVtLCAwLCA5OTk5LCA0LAorCQkJCQkgX19pbywgX190bXBlcnIpOworCQkgIGlmICghX190bXBlcnIpCisJCSAgICBfX3RtLT50bV95ZWFyID0gX19tZW0gPCAwID8gX19tZW0gKyAxMDAgOiBfX21lbSAtIDE5MDA7CisJCSAgYnJlYWs7CisJCWNhc2UgJ1onOgorCQkgIC8vIFRpbWV6b25lIGluZm8uCisJCSAgaWYgKF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6dXBwZXIsICpfX2JlZykpCisJCSAgICB7CisJCSAgICAgIGludCBfX3RtcDsKKwkJICAgICAgX19iZWcgPSBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtcCwKKwkJCQkgICAgICAgX190aW1lcHVuY3RfY2FjaGU8X0NoYXJUPjo6X1NfdGltZXpvbmVzLAorCQkJCQkgICAgICAxNCwgX19pbywgX190bXBlcnIpOworCisJCSAgICAgIC8vIEdNVCByZXF1aXJlcyBzcGVjaWFsIGVmZm9ydC4KKwkJICAgICAgaWYgKF9fYmVnICE9IF9fZW5kICYmICFfX3RtcGVyciAmJiBfX3RtcCA9PSAwCisJCQkgICYmICgqX19iZWcgPT0gX19jdHlwZS53aWRlbignLScpCisJCQkgICAgICB8fCAqX19iZWcgPT0gX19jdHlwZS53aWRlbignKycpKSkKKwkJCXsKKwkJCSAgX19iZWcgPSBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG1wLCAwLCAyMywgMiwKKwkJCQkJCSBfX2lvLCBfX3RtcGVycik7CisJCQkgIF9fYmVnID0gX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtcCwgMCwgNTksIDIsCisJCQkJCQkgX19pbywgX190bXBlcnIpOworCQkJfQorCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIF9fdG1wZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworCQkgIGJyZWFrOworCQlkZWZhdWx0OgorCQkgIC8vIE5vdCByZWNvZ25pemVkLgorCQkgIF9fdG1wZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworCQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8vIFZlcmlmeSBmb3JtYXQgYW5kIGlucHV0IG1hdGNoLCBleHRyYWN0IGFuZCBkaXNjYXJkLgorCSAgICAgIGlmIChfX2Zvcm1hdFtfX2ldID09ICpfX2JlZykKKwkJKytfX2JlZzsKKwkgICAgICBlbHNlCisJCV9fdG1wZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworCSAgICB9CisJfQorCisgICAgICBpZiAoX190bXBlcnIpCisJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgIAorICAgICAgcmV0dXJuIF9fYmVnOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CisgICAgX0luSXRlcgorICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgorICAgIF9NX2V4dHJhY3RfbnVtKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpbnQmIF9fbWVtYmVyLAorCQkgICBpbnQgX19taW4sIGludCBfX21heCwgc2l6ZV90IF9fbGVuLAorCQkgICBpb3NfYmFzZSYgX19pbywgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdAorICAgIHsKKyAgICAgIGNvbnN0IGxvY2FsZSYgX19sb2MgPSBfX2lvLl9NX2dldGxvYygpOworICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOworCisgICAgICAvLyBBcy1pcyB3b3JrcyBmb3IgX19sZW4gPSAxLCAyLCA0LCB0aGUgdmFsdWVzIGFjdHVhbGx5IHVzZWQuCisgICAgICBpbnQgX19tdWx0ID0gX19sZW4gPT0gMiA/IDEwIDogKF9fbGVuID09IDQgPyAxMDAwIDogMSk7CisKKyAgICAgICsrX19taW47CisgICAgICBzaXplX3QgX19pID0gMDsKKyAgICAgIGludCBfX3ZhbHVlID0gMDsKKyAgICAgIGZvciAoOyBfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBfX2xlbjsgKytfX2JlZywgKytfX2kpCisJeworCSAgY29uc3QgY2hhciBfX2MgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcsICcqJyk7CisJICBpZiAoX19jID49ICcwJyAmJiBfX2MgPD0gJzknKQorCSAgICB7CisJICAgICAgX192YWx1ZSA9IF9fdmFsdWUgKiAxMCArIChfX2MgLSAnMCcpOworCSAgICAgIGNvbnN0IGludCBfX3ZhbHVlYyA9IF9fdmFsdWUgKiBfX211bHQ7CisJICAgICAgaWYgKF9fdmFsdWVjID4gX19tYXggfHwgX192YWx1ZWMgKyBfX211bHQgPCBfX21pbikKKwkJYnJlYWs7CisJICAgICAgX19tdWx0IC89IDEwOworCSAgICB9CisJICBlbHNlCisJICAgIGJyZWFrOworCX0KKyAgICAgIGlmIChfX2kgPT0gX19sZW4pCisJX19tZW1iZXIgPSBfX3ZhbHVlOworICAgICAgLy8gU3BlY2lhbCBlbmNvZGluZyBmb3IgZG9fZ2V0X3llYXIsICd5JywgYW5kICdZJyBhYm92ZS4KKyAgICAgIGVsc2UgaWYgKF9fbGVuID09IDQgJiYgX19pID09IDIpCisJX19tZW1iZXIgPSBfX3ZhbHVlIC0gMTAwOworICAgICAgZWxzZQorCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworCisgICAgICByZXR1cm4gX19iZWc7CisgICAgfQorCisgIC8vIEFzc3VtcHRpb25zOgorICAvLyBBbGwgZWxlbWVudHMgaW4gX19uYW1lcyBhcmUgdW5pcXVlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CisgICAgX0luSXRlcgorICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgorICAgIF9NX2V4dHJhY3RfbmFtZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW50JiBfX21lbWJlciwKKwkJICAgIGNvbnN0IF9DaGFyVCoqIF9fbmFtZXMsIHNpemVfdCBfX2luZGV4bGVuLAorCQkgICAgaW9zX2Jhc2UmIF9faW8sIGlvc19iYXNlOjppb3N0YXRlJiBfX2VycikgY29uc3QKKyAgICB7CisgICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4JCV9fdHJhaXRzX3R5cGU7CisgICAgICBjb25zdCBsb2NhbGUmIF9fbG9jID0gX19pby5fTV9nZXRsb2MoKTsKKyAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKKworICAgICAgaW50KiBfX21hdGNoZXMgPSBzdGF0aWNfY2FzdDxpbnQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihpbnQpCisJCQkJCQkJICAqIF9faW5kZXhsZW4pKTsKKyAgICAgIHNpemVfdCBfX25tYXRjaGVzID0gMDsKKyAgICAgIHNpemVfdCBfX3BvcyA9IDA7CisgICAgICBib29sIF9fdGVzdHZhbGlkID0gdHJ1ZTsKKyAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lOworCisgICAgICAvLyBMb29rIGZvciBpbml0aWFsIG1hdGNoZXMuCisgICAgICAvLyBOQjogU29tZSBvZiB0aGUgbG9jYWxlIGRhdGEgaXMgaW4gdGhlIGZvcm0gb2YgYWxsIGxvd2VyY2FzZQorICAgICAgLy8gbmFtZXMsIGFuZCBzb21lIGlzIGluIHRoZSBmb3JtIG9mIGluaXRpYWxseS1jYXBpdGFsaXplZAorICAgICAgLy8gbmFtZXMuIExvb2sgZm9yIGJvdGguCisgICAgICBpZiAoX19iZWcgIT0gX19lbmQpCisJeworCSAgY29uc3QgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKKwkgIGZvciAoc2l6ZV90IF9faTEgPSAwOyBfX2kxIDwgX19pbmRleGxlbjsgKytfX2kxKQorCSAgICBpZiAoX19jID09IF9fbmFtZXNbX19pMV1bMF0KKwkJfHwgX19jID09IF9fY3R5cGUudG91cHBlcihfX25hbWVzW19faTFdWzBdKSkKKwkgICAgICBfX21hdGNoZXNbX19ubWF0Y2hlcysrXSA9IF9faTE7CisJfQorCisgICAgICB3aGlsZSAoX19ubWF0Y2hlcyA+IDEpCisJeworCSAgLy8gRmluZCBzbWFsbGVzdCBtYXRjaGluZyBzdHJpbmcuCisJICBzaXplX3QgX19taW5sZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lc1tfX21hdGNoZXNbMF1dKTsKKwkgIGZvciAoc2l6ZV90IF9faTIgPSAxOyBfX2kyIDwgX19ubWF0Y2hlczsgKytfX2kyKQorCSAgICBfX21pbmxlbiA9IHN0ZDo6bWluKF9fbWlubGVuLAorCQkJICAgICAgX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZXNbX19tYXRjaGVzW19faTJdXSkpOworCSAgKytfX2JlZywgKytfX3BvczsKKwkgIGlmIChfX3BvcyA8IF9fbWlubGVuICYmIF9fYmVnICE9IF9fZW5kKQorCSAgICBmb3IgKHNpemVfdCBfX2kzID0gMDsgX19pMyA8IF9fbm1hdGNoZXM7KQorCSAgICAgIHsKKwkJX19uYW1lID0gX19uYW1lc1tfX21hdGNoZXNbX19pM11dOworCQlpZiAoIShfX25hbWVbX19wb3NdID09ICpfX2JlZykpCisJCSAgX19tYXRjaGVzW19faTNdID0gX19tYXRjaGVzWy0tX19ubWF0Y2hlc107CisJCWVsc2UKKwkJICArK19faTM7CisJICAgICAgfQorCSAgZWxzZQorCSAgICBicmVhazsKKwl9CisKKyAgICAgIGlmIChfX25tYXRjaGVzID09IDEpCisJeworCSAgLy8gTWFrZSBzdXJlIGZvdW5kIG5hbWUgaXMgY29tcGxldGVseSBleHRyYWN0ZWQuCisJICArK19fYmVnLCArK19fcG9zOworCSAgX19uYW1lID0gX19uYW1lc1tfX21hdGNoZXNbMF1dOworCSAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZSk7CisJICB3aGlsZSAoX19wb3MgPCBfX2xlbiAmJiBfX2JlZyAhPSBfX2VuZCAmJiBfX25hbWVbX19wb3NdID09ICpfX2JlZykKKwkgICAgKytfX2JlZywgKytfX3BvczsKKworCSAgaWYgKF9fbGVuID09IF9fcG9zKQorCSAgICBfX21lbWJlciA9IF9fbWF0Y2hlc1swXTsKKwkgIGVsc2UKKwkgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKKwl9CisgICAgICBlbHNlCisJX190ZXN0dmFsaWQgPSBmYWxzZTsKKyAgICAgIGlmICghX190ZXN0dmFsaWQpCisJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisKKyAgICAgIHJldHVybiBfX2JlZzsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgorICAgIF9Jbkl0ZXIKKyAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKKyAgICBfTV9leHRyYWN0X3dkYXlfb3JfbW9udGgoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGludCYgX19tZW1iZXIsCisJCQkgICAgIGNvbnN0IF9DaGFyVCoqIF9fbmFtZXMsIHNpemVfdCBfX2luZGV4bGVuLAorCQkJICAgICBpb3NfYmFzZSYgX19pbywgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdAorICAgIHsKKyAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPgkJX190cmFpdHNfdHlwZTsKKyAgICAgIGNvbnN0IGxvY2FsZSYgX19sb2MgPSBfX2lvLl9NX2dldGxvYygpOworICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOworCisgICAgICBpbnQqIF9fbWF0Y2hlcyA9IHN0YXRpY19jYXN0PGludCo+KF9fYnVpbHRpbl9hbGxvY2EoMiAqIHNpemVvZihpbnQpCisJCQkJCQkJICAqIF9faW5kZXhsZW4pKTsKKyAgICAgIHNpemVfdCBfX25tYXRjaGVzID0gMDsKKyAgICAgIHNpemVfdCogX19tYXRjaGVzX2xlbmd0aHMgPSAwOworICAgICAgc2l6ZV90IF9fcG9zID0gMDsKKworICAgICAgaWYgKF9fYmVnICE9IF9fZW5kKQorCXsKKwkgIGNvbnN0IGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CisJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCAyICogX19pbmRleGxlbjsgKytfX2kpCisJICAgIGlmIChfX2MgPT0gX19uYW1lc1tfX2ldWzBdCisJCXx8IF9fYyA9PSBfX2N0eXBlLnRvdXBwZXIoX19uYW1lc1tfX2ldWzBdKSkKKwkgICAgICBfX21hdGNoZXNbX19ubWF0Y2hlcysrXSA9IF9faTsKKwl9CisKKyAgICAgIGlmIChfX25tYXRjaGVzKQorCXsKKwkgICsrX19iZWcsICsrX19wb3M7CisKKwkgIF9fbWF0Y2hlc19sZW5ndGhzCisJICAgID0gc3RhdGljX2Nhc3Q8c2l6ZV90Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2Yoc2l6ZV90KQorCQkJCQkJICAgICogX19ubWF0Y2hlcykpOworCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19ubWF0Y2hlczsgKytfX2kpCisJICAgIF9fbWF0Y2hlc19sZW5ndGhzW19faV0KKwkgICAgICA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX25hbWVzW19fbWF0Y2hlc1tfX2ldXSk7CisJfQorCisgICAgICBmb3IgKDsgX19iZWcgIT0gX19lbmQ7ICsrX19iZWcsICsrX19wb3MpCisJeworCSAgc2l6ZV90IF9fbnNraXBwZWQgPSAwOworCSAgY29uc3QgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbm1hdGNoZXM7KQorCSAgICB7CisJICAgICAgY29uc3QgY2hhcl90eXBlKiBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hlc1tfX2ldXTsKKwkgICAgICBpZiAoX19wb3MgPj0gX19tYXRjaGVzX2xlbmd0aHNbX19pXSkKKwkJKytfX25za2lwcGVkLCArK19faTsKKwkgICAgICBlbHNlIGlmICghKF9fbmFtZVtfX3Bvc10gPT0gX19jKSkKKwkJeworCQkgIC0tX19ubWF0Y2hlczsKKwkJICBfX21hdGNoZXNbX19pXSA9IF9fbWF0Y2hlc1tfX25tYXRjaGVzXTsKKwkJICBfX21hdGNoZXNfbGVuZ3Roc1tfX2ldID0gX19tYXRjaGVzX2xlbmd0aHNbX19ubWF0Y2hlc107CisJCX0KKwkgICAgICBlbHNlCisJCSsrX19pOworCSAgICB9CisJICBpZiAoX19uc2tpcHBlZCA9PSBfX25tYXRjaGVzKQorCSAgICBicmVhazsKKwl9CisKKyAgICAgIGlmICgoX19ubWF0Y2hlcyA9PSAxICYmIF9fbWF0Y2hlc19sZW5ndGhzWzBdID09IF9fcG9zKQorCSAgfHwgKF9fbm1hdGNoZXMgPT0gMiAmJiAoX19tYXRjaGVzX2xlbmd0aHNbMF0gPT0gX19wb3MKKwkJCQkgIHx8IF9fbWF0Y2hlc19sZW5ndGhzWzFdID09IF9fcG9zKSkpCisJX19tZW1iZXIgPSAoX19tYXRjaGVzWzBdID49IF9faW5kZXhsZW4KKwkJICAgID8gX19tYXRjaGVzWzBdIC0gX19pbmRleGxlbiA6IF9fbWF0Y2hlc1swXSk7CisgICAgICBlbHNlCisJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisKKyAgICAgIHJldHVybiBfX2JlZzsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgorICAgIF9Jbkl0ZXIKKyAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKKyAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJCWlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CisgICAgeworICAgICAgY29uc3QgbG9jYWxlJiBfX2xvYyA9IF9faW8uX01fZ2V0bG9jKCk7CisgICAgICBjb25zdCBfX3RpbWVwdW5jdDxfQ2hhclQ+JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CisgICAgICBjb25zdCBjaGFyX3R5cGUqICBfX3RpbWVzWzJdOworICAgICAgX190cC5fTV90aW1lX2Zvcm1hdHMoX190aW1lcyk7CisgICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCAKKwkJCQkgICAgX190bSwgX190aW1lc1swXSk7CisgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCisJX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKKyAgICAgIHJldHVybiBfX2JlZzsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgorICAgIF9Jbkl0ZXIKKyAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKKyAgICBkb19nZXRfZGF0ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJCWlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CisgICAgeworICAgICAgY29uc3QgbG9jYWxlJiBfX2xvYyA9IF9faW8uX01fZ2V0bG9jKCk7CisgICAgICBjb25zdCBfX3RpbWVwdW5jdDxfQ2hhclQ+JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CisgICAgICBjb25zdCBjaGFyX3R5cGUqICBfX2RhdGVzWzJdOworICAgICAgX190cC5fTV9kYXRlX2Zvcm1hdHMoX19kYXRlcyk7CisgICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCAKKwkJCQkgICAgX190bSwgX19kYXRlc1swXSk7CisgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCisJX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKKyAgICAgIHJldHVybiBfX2JlZzsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgorICAgIF9Jbkl0ZXIKKyAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKKyAgICBkb19nZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJCSAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CisgICAgeworICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+CQlfX3RyYWl0c190eXBlOworICAgICAgY29uc3QgbG9jYWxlJiBfX2xvYyA9IF9faW8uX01fZ2V0bG9jKCk7CisgICAgICBjb25zdCBfX3RpbWVwdW5jdDxfQ2hhclQ+JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CisgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CisgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5c1sxNF07CisgICAgICBfX3RwLl9NX2RheXNfYWJicmV2aWF0ZWQoX19kYXlzKTsKKyAgICAgIF9fdHAuX01fZGF5cyhfX2RheXMgKyA3KTsKKyAgICAgIGludCBfX3RtcHdkYXk7CisgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX3RtcGVyciA9IGlvc19iYXNlOjpnb29kYml0OworCisgICAgICBfX2JlZyA9IF9NX2V4dHJhY3Rfd2RheV9vcl9tb250aChfX2JlZywgX19lbmQsIF9fdG1wd2RheSwgX19kYXlzLCA3LAorCQkJCSAgICAgICBfX2lvLCBfX3RtcGVycik7CisgICAgICBpZiAoIV9fdG1wZXJyKQorCV9fdG0tPnRtX3dkYXkgPSBfX3RtcHdkYXk7CisgICAgICBlbHNlCisJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisKKyAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKKwlfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OworICAgICAgcmV0dXJuIF9fYmVnOworICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgorICAgIF9Jbkl0ZXIKKyAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKKyAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLAorICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2UmIF9faW8sIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CisgICAgeworICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+CQlfX3RyYWl0c190eXBlOworICAgICAgY29uc3QgbG9jYWxlJiBfX2xvYyA9IF9faW8uX01fZ2V0bG9jKCk7CisgICAgICBjb25zdCBfX3RpbWVwdW5jdDxfQ2hhclQ+JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CisgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CisgICAgICBjb25zdCBjaGFyX3R5cGUqICBfX21vbnRoc1syNF07CisgICAgICBfX3RwLl9NX21vbnRoc19hYmJyZXZpYXRlZChfX21vbnRocyk7CisgICAgICBfX3RwLl9NX21vbnRocyhfX21vbnRocyArIDEyKTsKKyAgICAgIGludCBfX3RtcG1vbjsKKyAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fdG1wZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisKKyAgICAgIF9fYmVnID0gX01fZXh0cmFjdF93ZGF5X29yX21vbnRoKF9fYmVnLCBfX2VuZCwgX190bXBtb24sIF9fbW9udGhzLCAxMiwKKwkJCQkgICAgICAgX19pbywgX190bXBlcnIpOworICAgICAgaWYgKCFfX3RtcGVycikKKwlfX3RtLT50bV9tb24gPSBfX3RtcG1vbjsKKyAgICAgIGVsc2UKKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKworICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQorCV9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CisgICAgICByZXR1cm4gX19iZWc7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KKyAgICBfSW5JdGVyCisgICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CisgICAgZG9fZ2V0X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorCQlpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAorICAgIHsKKyAgICAgIGNvbnN0IGxvY2FsZSYgX19sb2MgPSBfX2lvLl9NX2dldGxvYygpOworICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOworICAgICAgaW50IF9fdG1weWVhcjsKKyAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fdG1wZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisKKyAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtcHllYXIsIDAsIDk5OTksIDQsCisJCQkgICAgIF9faW8sIF9fdG1wZXJyKTsKKyAgICAgIGlmICghX190bXBlcnIpCisJX190bS0+dG1feWVhciA9IF9fdG1weWVhciA8IDAgPyBfX3RtcHllYXIgKyAxMDAgOiBfX3RtcHllYXIgLSAxOTAwOworICAgICAgZWxzZQorCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworCisgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCisJX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKKyAgICAgIHJldHVybiBfX2JlZzsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KKyAgICBfT3V0SXRlcgorICAgIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKKyAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHRtKiBfX3RtLAorCWNvbnN0IF9DaGFyVCogX19iZWcsIGNvbnN0IF9DaGFyVCogX19lbmQpIGNvbnN0CisgICAgeworICAgICAgY29uc3QgbG9jYWxlJiBfX2xvYyA9IF9faW8uX01fZ2V0bG9jKCk7CisgICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CisgICAgICBmb3IgKDsgX19iZWcgIT0gX19lbmQ7ICsrX19iZWcpCisJaWYgKF9fY3R5cGUubmFycm93KCpfX2JlZywgMCkgIT0gJyUnKQorCSAgeworCSAgICAqX19zID0gKl9fYmVnOworCSAgICArK19fczsKKwkgIH0KKwllbHNlIGlmICgrK19fYmVnICE9IF9fZW5kKQorCSAgeworCSAgICBjaGFyIF9fZm9ybWF0OworCSAgICBjaGFyIF9fbW9kID0gMDsKKwkgICAgY29uc3QgY2hhciBfX2MgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApOworCSAgICBpZiAoX19jICE9ICdFJyAmJiBfX2MgIT0gJ08nKQorCSAgICAgIF9fZm9ybWF0ID0gX19jOworCSAgICBlbHNlIGlmICgrK19fYmVnICE9IF9fZW5kKQorCSAgICAgIHsKKwkJX19tb2QgPSBfX2M7CisJCV9fZm9ybWF0ID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICBicmVhazsKKwkgICAgX19zID0gdGhpcy0+ZG9fcHV0KF9fcywgX19pbywgX19maWxsLCBfX3RtLCBfX2Zvcm1hdCwgX19tb2QpOworCSAgfQorCWVsc2UKKwkgIGJyZWFrOworICAgICAgcmV0dXJuIF9fczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KKyAgICBfT3V0SXRlcgorICAgIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKKyAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSwgY29uc3QgdG0qIF9fdG0sCisJICAgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZCkgY29uc3QKKyAgICB7CisgICAgICBjb25zdCBsb2NhbGUmIF9fbG9jID0gX19pby5fTV9nZXRsb2MoKTsKKyAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKKyAgICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKKworICAgICAgLy8gTkI6IFRoaXMgc2l6ZSBpcyBhcmJpdHJhcnkuIFNob3VsZCB0aGlzIGJlIGEgZGF0YSBtZW1iZXIsCisgICAgICAvLyBpbml0aWFsaXplZCBhdCBjb25zdHJ1Y3Rpb24/CisgICAgICBjb25zdCBzaXplX3QgX19tYXhsZW4gPSAxMjg7CisgICAgICBjaGFyX3R5cGUgX19yZXNbX19tYXhsZW5dOworCisgICAgICAvLyBOQjogSW4gSUVFIDEwMDMuMS0yMDB4LCBhbmQgcGVyaGFwcyBvdGhlciBsb2NhbGUgbW9kZWxzLCBpdAorICAgICAgLy8gaXMgcG9zc2libGUgdGhhdCB0aGUgZm9ybWF0IGNoYXJhY3RlciB3aWxsIGJlIGxvbmdlciB0aGFuIG9uZQorICAgICAgLy8gY2hhcmFjdGVyLiBQb3NzaWJpbGl0aWVzIGluY2x1ZGUgJ0UnIG9yICdPJyBmb2xsb3dlZCBieSBhCisgICAgICAvLyBmb3JtYXQgY2hhcmFjdGVyOiBpZiBfX21vZCBpcyBub3QgdGhlIGRlZmF1bHQgYXJndW1lbnQsIGFzc3VtZQorICAgICAgLy8gaXQncyBhIHZhbGlkIG1vZGlmaWVyLgorICAgICAgY2hhcl90eXBlIF9fZm10WzRdOworICAgICAgX19mbXRbMF0gPSBfX2N0eXBlLndpZGVuKCclJyk7CisgICAgICBpZiAoIV9fbW9kKQorCXsKKwkgIF9fZm10WzFdID0gX19mb3JtYXQ7CisJICBfX2ZtdFsyXSA9IGNoYXJfdHlwZSgpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBfX2ZtdFsxXSA9IF9fbW9kOworCSAgX19mbXRbMl0gPSBfX2Zvcm1hdDsKKwkgIF9fZm10WzNdID0gY2hhcl90eXBlKCk7CisJfQorCisgICAgICBfX3RwLl9NX3B1dChfX3JlcywgX19tYXhsZW4sIF9fZm10LCBfX3RtKTsKKworICAgICAgLy8gV3JpdGUgcmVzdWx0aW5nLCBmdWxseS1mb3JtYXR0ZWQgc3RyaW5nIHRvIG91dHB1dCBpdGVyYXRvci4KKyAgICAgIHJldHVybiBzdGQ6Ol9fd3JpdGUoX19zLCBfX3JlcywgY2hhcl90cmFpdHM8Y2hhcl90eXBlPjo6bGVuZ3RoKF9fcmVzKSk7CisgICAgfQorCisKKyAgLy8gSW5oaWJpdCBpbXBsaWNpdCBpbnN0YW50aWF0aW9ucyBmb3IgcmVxdWlyZWQgaW5zdGFudGlhdGlvbnMsCisgIC8vIHdoaWNoIGFyZSBkZWZpbmVkIHZpYSBleHBsaWNpdCBpbnN0YW50aWF0aW9ucyBlbHNld2hlcmUuCisgIC8vIE5COiBUaGlzIHN5bnRheCBpcyBhIEdOVSBleHRlbnNpb24uCisjaWYgX0dMSUJDWFhfRVhURVJOX1RFTVBMQVRFCisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTxjaGFyLCBmYWxzZT47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTxjaGFyLCB0cnVlPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9HTElCQ1hYX0xEQkxfTkFNRVNQQUNFIG1vbmV5X2dldDxjaGFyPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9HTElCQ1hYX0xEQkxfTkFNRVNQQUNFIG1vbmV5X3B1dDxjaGFyPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9fdGltZXB1bmN0PGNoYXI+OworICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXQ8Y2hhcj47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dF9ieW5hbWU8Y2hhcj47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldDxjaGFyPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTxjaGFyPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2VzPGNoYXI+OworICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXNfYnluYW1lPGNoYXI+OworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGNvbnN0IG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT4mCisgICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBjb25zdCBtb25leXB1bmN0PGNoYXIsIGZhbHNlPiYKKyAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDxjaGFyLCBmYWxzZT4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBjb25zdCBtb25leV9wdXQ8Y2hhcj4mCisgICAgdXNlX2ZhY2V0PG1vbmV5X3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGNvbnN0IG1vbmV5X2dldDxjaGFyPiYKKyAgICB1c2VfZmFjZXQ8bW9uZXlfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgY29uc3QgX190aW1lcHVuY3Q8Y2hhcj4mCisgICAgdXNlX2ZhY2V0PF9fdGltZXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgY29uc3QgdGltZV9wdXQ8Y2hhcj4mCisgICAgdXNlX2ZhY2V0PHRpbWVfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgY29uc3QgdGltZV9nZXQ8Y2hhcj4mCisgICAgdXNlX2ZhY2V0PHRpbWVfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgY29uc3QgbWVzc2FnZXM8Y2hhcj4mCisgICAgdXNlX2ZhY2V0PG1lc3NhZ2VzPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgYm9vbAorICAgIGhhc19mYWNldDxtb25leXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgYm9vbAorICAgIGhhc19mYWNldDxtb25leV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBib29sCisgICAgaGFzX2ZhY2V0PG1vbmV5X2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGJvb2wKKyAgICBoYXNfZmFjZXQ8X190aW1lcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBib29sCisgICAgaGFzX2ZhY2V0PHRpbWVfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgYm9vbAorICAgIGhhc19mYWNldDx0aW1lX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGJvb2wKKyAgICBoYXNfZmFjZXQ8bWVzc2FnZXM8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTx3Y2hhcl90LCBmYWxzZT47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTx3Y2hhcl90LCB0cnVlPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9HTElCQ1hYX0xEQkxfTkFNRVNQQUNFIG1vbmV5X2dldDx3Y2hhcl90PjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9HTElCQ1hYX0xEQkxfTkFNRVNQQUNFIG1vbmV5X3B1dDx3Y2hhcl90PjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9fdGltZXB1bmN0PHdjaGFyX3Q+OworICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXQ8d2NoYXJfdD47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dF9ieW5hbWU8d2NoYXJfdD47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldDx3Y2hhcl90PjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTx3Y2hhcl90PjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2VzPHdjaGFyX3Q+OworICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXNfYnluYW1lPHdjaGFyX3Q+OworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGNvbnN0IG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT4mCisgICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBjb25zdCBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPiYKKyAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBjb25zdCBtb25leV9wdXQ8d2NoYXJfdD4mCisgICAgdXNlX2ZhY2V0PG1vbmV5X3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGNvbnN0IG1vbmV5X2dldDx3Y2hhcl90PiYKKyAgICB1c2VfZmFjZXQ8bW9uZXlfZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgY29uc3QgX190aW1lcHVuY3Q8d2NoYXJfdD4mCisgICAgdXNlX2ZhY2V0PF9fdGltZXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgY29uc3QgdGltZV9wdXQ8d2NoYXJfdD4mCisgICAgdXNlX2ZhY2V0PHRpbWVfcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgY29uc3QgdGltZV9nZXQ8d2NoYXJfdD4mCisgICAgdXNlX2ZhY2V0PHRpbWVfZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgY29uc3QgbWVzc2FnZXM8d2NoYXJfdD4mCisgICAgdXNlX2ZhY2V0PG1lc3NhZ2VzPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgYm9vbAorICAgIGhhc19mYWNldDxtb25leXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgYm9vbAorICAgIGhhc19mYWNldDxtb25leV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBib29sCisgICAgaGFzX2ZhY2V0PG1vbmV5X2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGJvb2wKKyAgICBoYXNfZmFjZXQ8X190aW1lcHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBib29sCisgICAgaGFzX2ZhY2V0PHRpbWVfcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgYm9vbAorICAgIGhhc19mYWNldDx0aW1lX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGJvb2wKKyAgICBoYXNfZmFjZXQ8bWVzc2FnZXM8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKKyNlbmRpZgorI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvbG9jYWxlZndkLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvbG9jYWxlZndkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgxZTM5YgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9sb2NhbGVmd2QuaApAQCAtMCwwICsxLDE4OSBAQAorLy8gTG9jYWxlIHN1cHBvcnQgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LAorLy8gMjAwNiwgMjAwNywgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGxvY2FsZWZ3ZC5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyMi4xICBMb2NhbGVzCisvLworCisjaWZuZGVmIF9MT0NBTEVfRldEX0gKKyNkZWZpbmUgX0xPQ0FMRV9GV0RfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGUuaD4gIC8vIERlZmluZXMgX19jX2xvY2FsZSwgY29uZmlnLXNwZWNpZmljIGluY2x1ZGUKKyNpbmNsdWRlIDxpb3Nmd2Q+ICAgICAgICAgICAgLy8gRm9yIG9zdHJlYW1idWZfaXRlcmF0b3IsIGlzdHJlYW1idWZfaXRlcmF0b3IKKyNpbmNsdWRlIDxjY3R5cGU+CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgLyoqIAorICAgKiAgQGRlZmdyb3VwIGxvY2FsZXMgTG9jYWxlcworICAgKgorICAgKiAgQ2xhc3NlcyBhbmQgZnVuY3Rpb25zIGZvciBpbnRlcm5hdGlvbmFsaXphdGlvbiBhbmQgbG9jYWxpemF0aW9uLgorICAgKi8KKworICAvLyAyMi4xLjEgTG9jYWxlCisgIGNsYXNzIGxvY2FsZTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CisgICAgYm9vbAorICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdygpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KKyAgICBjb25zdCBfRmFjZXQmCisgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOworCisgIC8vIDIyLjEuMyBDb252ZW5pZW5jZSBpbnRlcmZhY2VzCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBib29sCisgICAgaXNzcGFjZShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBib29sCisgICAgaXNwcmludChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBib29sCisgICAgaXNjbnRybChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBib29sCisgICAgaXN1cHBlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBib29sCisgICAgaXNsb3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBib29sCisgICAgaXNhbHBoYShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBib29sCisgICAgaXNkaWdpdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBib29sCisgICAgaXNwdW5jdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBib29sCisgICAgaXN4ZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgYm9vbAorICAgIGlzYWxudW0oX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgYm9vbAorICAgIGlzZ3JhcGgoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgX0NoYXJUCisgICAgdG91cHBlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBfQ2hhclQKKyAgICB0b2xvd2VyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CisKKyAgLy8gMjIuMi4xIGFuZCAyMi4yLjEuMyBjdHlwZQorICBjbGFzcyBjdHlwZV9iYXNlOworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgY2xhc3MgY3R5cGU7CisgIHRlbXBsYXRlPD4gY2xhc3MgY3R5cGU8Y2hhcj47CisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgdGVtcGxhdGU8PiBjbGFzcyBjdHlwZTx3Y2hhcl90PjsKKyNlbmRpZgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgY2xhc3MgY3R5cGVfYnluYW1lOworICAvLyBOQjogU3BlY2lhbGl6ZWQgZm9yIGNoYXIgYW5kIHdjaGFyX3QgaW4gbG9jYWxlX2ZhY2V0cy5oLgorCisgIGNsYXNzIGNvZGVjdnRfYmFzZTsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgorICAgIGNsYXNzIGNvZGVjdnQ7CisgIHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+OworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OworI2VuZGlmCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KKyAgICBjbGFzcyBjb2RlY3Z0X2J5bmFtZTsKKworICAvLyAyMi4yLjIgYW5kIDIyLjIuMyBudW1lcmljCitfR0xJQkNYWF9CRUdJTl9MREJMX05BTUVTUEFDRQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgorICAgIGNsYXNzIG51bV9nZXQ7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgorICAgIGNsYXNzIG51bV9wdXQ7CitfR0xJQkNYWF9FTkRfTERCTF9OQU1FU1BBQ0UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcyBudW1wdW5jdDsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcyBudW1wdW5jdF9ieW5hbWU7CisKKyAgLy8gMjIuMi40IGNvbGxhdGlvbgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgY2xhc3MgY29sbGF0ZTsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcworICAgIGNvbGxhdGVfYnluYW1lOworCisgIC8vIDIyLjIuNSBkYXRlIGFuZCB0aW1lCisgIGNsYXNzIHRpbWVfYmFzZTsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CisgICAgY2xhc3MgdGltZV9nZXQ7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9ICBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgorICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CisgICAgY2xhc3MgdGltZV9wdXQ7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgorICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTsKKworICAvLyAyMi4yLjYgbW9uZXkKKyAgY2xhc3MgbW9uZXlfYmFzZTsKK19HTElCQ1hYX0JFR0lOX0xEQkxfTkFNRVNQQUNFCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9ICBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgorICAgIGNsYXNzIG1vbmV5X2dldDsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CisgICAgY2xhc3MgbW9uZXlfcHV0OworX0dMSUJDWFhfRU5EX0xEQkxfTkFNRVNQQUNFCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bCA9IGZhbHNlPgorICAgIGNsYXNzIG1vbmV5cHVuY3Q7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bCA9IGZhbHNlPgorICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lOworCisgIC8vIDIyLjIuNyBtZXNzYWdlIHJldHJpZXZhbAorICBjbGFzcyBtZXNzYWdlc19iYXNlOworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgY2xhc3MgbWVzc2FnZXM7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWU7CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvbWFza19hcnJheS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL21hc2tfYXJyYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTE1ZGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL21hc2tfYXJyYXkuaApAQCAtMCwwICsxLDIwNiBAQAorLy8gVGhlIHRlbXBsYXRlIGFuZCBpbmxpbmVzIGZvciB0aGUgLSotIEMrKyAtKi0gbWFza19hcnJheSBjbGFzcy4KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDA0LCAyMDA1LCAyMDA5CisvLyAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIG1hc2tfYXJyYXkuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisvLyBXcml0dGVuIGJ5IEdhYnJpZWwgRG9zIFJlaXMgPEdhYnJpZWwuRG9zLVJlaXNARFBUTWF0aHMuRU5TLUNhY2hhbi5Gcj4KKworI2lmbmRlZiBfTUFTS19BUlJBWV9ICisjZGVmaW5lIF9NQVNLX0FSUkFZX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIG51bWVyaWNfYXJyYXlzCisgICAqIEB7CisgICAqLworCisgIC8qKgorICAgKiAgQGJyaWVmICBSZWZlcmVuY2UgdG8gc2VsZWN0ZWQgc3Vic2V0IG9mIGFuIGFycmF5LgorICAgKgorICAgKiAgQSBtYXNrX2FycmF5IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBhY3R1YWwgZWxlbWVudHMgb2YgYW4gYXJyYXkgc3BlY2lmaWVkCisgICAqICBieSBhIGJpdG1hc2sgaW4gdGhlIGZvcm0gb2YgYW4gYXJyYXkgb2YgYm9vbC4gIFRoZSB3YXkgdG8gZ2V0IGEKKyAgICogIG1hc2tfYXJyYXkgaXMgdG8gY2FsbCBvcGVyYXRvcltdKHZhbGFycmF5PGJvb2w+KSBvbiBhIHZhbGFycmF5LiAgVGhlCisgICAqICByZXR1cm5lZCBtYXNrX2FycmF5IHRoZW4gcGVybWl0cyBjYXJyeWluZyBvcGVyYXRpb25zIG91dCBvbiB0aGUKKyAgICogIHJlZmVyZW5jZWQgc3Vic2V0IG9mIGVsZW1lbnRzIGluIHRoZSBvcmlnaW5hbCB2YWxhcnJheS4KKyAgICoKKyAgICogIEZvciBleGFtcGxlLCBpZiBhIG1hc2tfYXJyYXkgaXMgb2J0YWluZWQgdXNpbmcgdGhlIGFycmF5IChmYWxzZSwgdHJ1ZSwKKyAgICogIGZhbHNlLCB0cnVlKSBhcyBhbiBhcmd1bWVudCwgdGhlIG1hc2sgYXJyYXkgaGFzIHR3byBlbGVtZW50cyByZWZlcnJpbmcKKyAgICogIHRvIGFycmF5WzFdIGFuZCBhcnJheVszXSBpbiB0aGUgdW5kZXJseWluZyBhcnJheS4KKyAgICoKKyAgICogIEBwYXJhbSAgVHAgIEVsZW1lbnQgdHlwZS4KKyAgICovCisgIHRlbXBsYXRlIDxjbGFzcyBfVHA+CisgICAgY2xhc3MgbWFza19hcnJheQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOworCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyNTMuIHZhbGFycmF5IGhlbHBlciBmdW5jdGlvbnMgYXJlIGFsbW9zdCBlbnRpcmVseSB1c2VsZXNzCisKKyAgICAgIC8vLyAgQ29weSBjb25zdHJ1Y3Rvci4gIEJvdGggc2xpY2VzIHJlZmVyIHRvIHRoZSBzYW1lIHVuZGVybHlpbmcgYXJyYXkuCisgICAgICBtYXNrX2FycmF5IChjb25zdCBtYXNrX2FycmF5Jik7CisgICAgICAKKyAgICAgIC8vLyAgQXNzaWdubWVudCBvcGVyYXRvci4gIEFzc2lnbnMgZWxlbWVudHMgdG8gY29ycmVzcG9uZGluZyBlbGVtZW50cworICAgICAgLy8vICBvZiBAYSBhLgorICAgICAgbWFza19hcnJheSYgb3BlcmF0b3I9KGNvbnN0IG1hc2tfYXJyYXkmKTsKKworICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBNdWx0aXBseSBzbGljZSBlbGVtZW50cyBieSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYuCisgICAgICB2b2lkIG9wZXJhdG9yKj0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBEaXZpZGUgc2xpY2UgZWxlbWVudHMgYnkgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvci89KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgTW9kdWxvIHNsaWNlIGVsZW1lbnRzIGJ5IGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdi4KKyAgICAgIHZvaWQgb3BlcmF0b3IlPShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIEFkZCBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYgdG8gc2xpY2UgZWxlbWVudHMuCisgICAgICB2b2lkIG9wZXJhdG9yKz0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBTdWJ0cmFjdCBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYgZnJvbSBzbGljZSBlbGVtZW50cy4KKyAgICAgIHZvaWQgb3BlcmF0b3ItPShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIExvZ2ljYWwgeG9yIHNsaWNlIGVsZW1lbnRzIHdpdGggY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvcl49KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgTG9naWNhbCBhbmQgc2xpY2UgZWxlbWVudHMgd2l0aCBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYuCisgICAgICB2b2lkIG9wZXJhdG9yJj0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBMb2dpY2FsIG9yIHNsaWNlIGVsZW1lbnRzIHdpdGggY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvcnw9KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgTGVmdCBzaGlmdCBzbGljZSBlbGVtZW50cyBieSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYuCisgICAgICB2b2lkIG9wZXJhdG9yPDw9KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgUmlnaHQgc2hpZnQgc2xpY2UgZWxlbWVudHMgYnkgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvcj4+PShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIEFzc2lnbiBhbGwgc2xpY2UgZWxlbWVudHMgdG8gQGEgdC4KKyAgICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9UcCYpIGNvbnN0OworCisgICAgICAgIC8vICAgICAgICB+bWFza19hcnJheSAoKTsKKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKyAgICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yKj0oY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yLz0oY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yJT0oY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yKz0oY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yLT0oY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yXj0oY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yJj0oY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yfD0oY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yPDw9KGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKyAgICAgICAgdm9pZCBvcGVyYXRvcj4+PShjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICBtYXNrX2FycmF5KF9BcnJheTxfVHA+LCBzaXplX3QsIF9BcnJheTxib29sPik7CisgICAgICBmcmllbmQgY2xhc3MgdmFsYXJyYXk8X1RwPjsKKworICAgICAgY29uc3Qgc2l6ZV90ICAgICAgIF9NX3N6OworICAgICAgY29uc3QgX0FycmF5PGJvb2w+IF9NX21hc2s7CisgICAgICBjb25zdCBfQXJyYXk8X1RwPiAgX01fYXJyYXk7CisKKyAgICAgIC8vIG5vdCBpbXBsZW1lbnRlZAorICAgICAgbWFza19hcnJheSgpOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBtYXNrX2FycmF5PF9UcD46Om1hc2tfYXJyYXkoY29uc3QgbWFza19hcnJheTxfVHA+JiBhKQorICAgIDogX01fc3ooYS5fTV9zeiksIF9NX21hc2soYS5fTV9tYXNrKSwgX01fYXJyYXkoYS5fTV9hcnJheSkge30KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lCisgICAgbWFza19hcnJheTxfVHA+OjptYXNrX2FycmF5KF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fcywgX0FycmF5PGJvb2w+IF9fbSkKKyAgICA6IF9NX3N6KF9fcyksIF9NX21hc2soX19tKSwgX01fYXJyYXkoX19hKSB7fQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgbWFza19hcnJheTxfVHA+JgorICAgIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IG1hc2tfYXJyYXk8X1RwPiYgX19hKQorICAgIHsKKyAgICAgIHN0ZDo6X192YWxhcnJheV9jb3B5KF9fYS5fTV9hcnJheSwgX19hLl9NX21hc2ssCisJCQkgICBfTV9zeiwgX01fYXJyYXksIF9NX21hc2spOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBtYXNrX2FycmF5PF9UcD46Om9wZXJhdG9yPShjb25zdCBfVHAmIF9fdCkgY29uc3QKKyAgICB7IHN0ZDo6X192YWxhcnJheV9maWxsKF9NX2FycmF5LCBfTV9zeiwgX01fbWFzaywgX190KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QKKyAgICB7IHN0ZDo6X192YWxhcnJheV9jb3B5KF9BcnJheTxfVHA+KF9fdiksIF9fdi5zaXplKCksIF9NX2FycmF5LCBfTV9tYXNrKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICB0ZW1wbGF0ZTxjbGFzcyBfRXg+CisgICAgICBpbmxpbmUgdm9pZAorICAgICAgbWFza19hcnJheTxfVHA+OjpvcGVyYXRvcj0oY29uc3QgX0V4cHI8X0V4LCBfVHA+JiBfX2UpIGNvbnN0CisgICAgICB7IHN0ZDo6X192YWxhcnJheV9jb3B5KF9fZSwgX19lLnNpemUoKSwgX01fYXJyYXksIF9NX21hc2spOyB9CisKKyN1bmRlZiBfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SCisjZGVmaW5lIF9ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoX09wLCBfTmFtZSkJCQkJXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CQkJCQkJXAorICAgIGlubGluZSB2b2lkCQkJCQkJCQlcCisgICAgbWFza19hcnJheTxfVHA+OjpvcGVyYXRvciBfT3AjIz0oY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdAlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIF9BcnJheV9hdWdtZW50ZWRfIyNfTmFtZShfTV9hcnJheSwgX01fbWFzaywJCQlcCisJCQkgICAgICAgX0FycmF5PF9UcD4oX192KSwgX192LnNpemUoKSk7CQlcCisgICAgfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgkJCSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlubGluZSB2b2lkCQkJCQkJCVwKKyAgICAgIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgX09wIyM9KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSkgY29uc3RcCisgICAgICB7CQkJCQkJCQkJXAorCV9BcnJheV9hdWdtZW50ZWRfIyNfTmFtZShfTV9hcnJheSwgX01fbWFzaywgX19lLCBfX2Uuc2l6ZSgpKTsgICBcCisgICAgICB9CisKK19ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoKiwgX19tdWx0aXBsaWVzKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUigvLCBfX2RpdmlkZXMpCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKCUsIF9fbW9kdWx1cykKK19ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoKywgX19wbHVzKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUigtLCBfX21pbnVzKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUiheLCBfX2JpdHdpc2VfeG9yKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUigmLCBfX2JpdHdpc2VfYW5kKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUih8LCBfX2JpdHdpc2Vfb3IpCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKDw8LCBfX3NoaWZ0X2xlZnQpCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKD4+LCBfX3NoaWZ0X3JpZ2h0KQorCisjdW5kZWYgX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUgorCisgIC8vIEB9IGdyb3VwIG51bWVyaWNfYXJyYXlzCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmIC8qIF9NQVNLX0FSUkFZX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9tb3ZlLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvbW92ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMTFiM2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvbW92ZS5oCkBAIC0wLDAgKzEsMTI4IEBACisvLyBNb3ZlLCBmb3J3YXJkIGFuZCBpZGVudGl0eSBmb3IgQysrMHggKyBzd2FwIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgbW92ZS5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKyNpZm5kZWYgX01PVkVfSAorI2RlZmluZSBfTU9WRV9IIDEKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxiaXRzL2NvbmNlcHRfY2hlY2suaD4KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+IC8vIEJyaW5ncyBpbiBzdGQ6OmRlY2x2YWwgdG9vLgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8vLyBpZGVudGl0eQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlkZW50aXR5CisgICAgeworICAgICAgdHlwZWRlZiBfVHAgdHlwZTsKKyAgICB9OworCisgIC8vLyBmb3J3YXJkIChhcyBwZXIgTjI4MzUpCisgIC8vLyBGb3J3YXJkIGx2YWx1ZXMgYXMgcnZhbHVlcy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBlbmFibGVfaWY8IWlzX2x2YWx1ZV9yZWZlcmVuY2U8X1RwPjo6dmFsdWUsIF9UcCYmPjo6dHlwZQorICAgIGZvcndhcmQodHlwZW5hbWUgc3RkOjppZGVudGl0eTxfVHA+Ojp0eXBlJiBfX3QpCisgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwJiY+KF9fdCk7IH0KKworICAvLy8gRm9yd2FyZCBydmFsdWVzIGFzIHJ2YWx1ZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgZW5hYmxlX2lmPCFpc19sdmFsdWVfcmVmZXJlbmNlPF9UcD46OnZhbHVlLCBfVHAmJj46OnR5cGUKKyAgICBmb3J3YXJkKHR5cGVuYW1lIHN0ZDo6aWRlbnRpdHk8X1RwPjo6dHlwZSYmIF9fdCkKKyAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHAmJj4oX190KTsgfQorCisgIC8vIEZvcndhcmQgbHZhbHVlcyBhcyBsdmFsdWVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIGVuYWJsZV9pZjxpc19sdmFsdWVfcmVmZXJlbmNlPF9UcD46OnZhbHVlLCBfVHA+Ojp0eXBlCisgICAgZm9yd2FyZCh0eXBlbmFtZSBzdGQ6OmlkZW50aXR5PF9UcD46OnR5cGUgX190KQorICAgIHsgcmV0dXJuIF9fdDsgfQorCisgIC8vIFByZXZlbnQgZm9yd2FyZGluZyBydmFsdWVzIGFzIGNvbnN0IGx2YWx1ZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgZW5hYmxlX2lmPGlzX2x2YWx1ZV9yZWZlcmVuY2U8X1RwPjo6dmFsdWUsIF9UcD46OnR5cGUKKyAgICBmb3J3YXJkKHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxfVHA+Ojp0eXBlJiYgX190KSA9IGRlbGV0ZTsKKworICAvKioKKyAgICogIEBicmllZiBNb3ZlIGEgdmFsdWUuCisgICAqICBAaW5ncm91cCBtdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fdCAgQSB0aGluZyBvZiBhcmJpdHJhcnkgdHlwZS4KKyAgICogIEByZXR1cm4gU2FtZSwgbW92ZWQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPF9UcD46OnR5cGUmJgorICAgIG1vdmUoX1RwJiYgX190KQorICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxfVHA+Ojp0eXBlJiY+KF9fdCk7IH0KKworICAvLy8gZGVjbHZhbCwgZnJvbSB0eXBlX3RyYWl0cy4KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZGVmaW5lIF9HTElCQ1hYX01PVkUoX1RwKSBzdGQ6Om1vdmUoX1RwKQorI2RlZmluZSBfR0xJQkNYWF9GT1JXQVJEKF9UcCwgX192YWwpIHN0ZDo6Zm9yd2FyZDxfVHA+KF9fdmFsKQorI2Vsc2UKKyNkZWZpbmUgX0dMSUJDWFhfTU9WRShfVHApIChfVHApCisjZGVmaW5lIF9HTElCQ1hYX0ZPUldBUkQoX1RwLCBfX3ZhbCkgKF9fdmFsKQorI2VuZGlmCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgLyoqCisgICAqICBAYnJpZWYgU3dhcHMgdHdvIHZhbHVlcy4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19hICBBIHRoaW5nIG9mIGFyYml0cmFyeSB0eXBlLgorICAgKiAgQHBhcmFtICBfX2IgIEFub3RoZXIgdGhpbmcgb2YgYXJiaXRyYXJ5IHR5cGUuCisgICAqICBAcmV0dXJuICAgTm90aGluZy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChfVHAmIF9fYSwgX1RwJiBfX2IpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfU0dJQXNzaWduYWJsZUNvbmNlcHQ8X1RwPikKKworICAgICAgX1RwIF9fdG1wID0gX0dMSUJDWFhfTU9WRShfX2EpOworICAgICAgX19hID0gX0dMSUJDWFhfTU9WRShfX2IpOworICAgICAgX19iID0gX0dMSUJDWFhfTU9WRShfX3RtcCk7CisgICAgfQorCisgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgLy8gRFIgODA5LiBzdGQ6OnN3YXAgc2hvdWxkIGJlIG92ZXJsb2FkZWQgZm9yIGFycmF5IHR5cGVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHNpemVfdCBfTm0+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKF9UcCAoJl9fYSlbX05tXSwgX1RwICgmX19iKVtfTm1dKQorICAgIHsKKyAgICAgIGZvciAoc2l6ZV90IF9fbiA9IDA7IF9fbiA8IF9ObTsgKytfX24pCisJc3dhcChfX2FbX19uXSwgX19iW19fbl0pOworICAgIH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYgLyogX01PVkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL29zdHJlYW0udGNjIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL29zdHJlYW0udGNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNDcyMTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvb3N0cmVhbS50Y2MKQEAgLTAsMCArMSw0MDcgQEAKKy8vIG9zdHJlYW0gY2xhc3NlcyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsCisvLyAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgb3N0cmVhbS50Y2MKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDI3LjYuMiAgT3V0cHV0IHN0cmVhbXMKKy8vCisKKyNpZm5kZWYgX09TVFJFQU1fVENDCisjZGVmaW5lIF9PU1RSRUFNX1RDQyAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGN4eGFiaS1mb3JjZWQuaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnk6OgorICAgIHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCisgICAgOiBfTV9vayhmYWxzZSksIF9NX29zKF9fb3MpCisgICAgeworICAgICAgLy8gWFhYIE1UCisgICAgICBpZiAoX19vcy50aWUoKSAmJiBfX29zLmdvb2QoKSkKKwlfX29zLnRpZSgpLT5mbHVzaCgpOworCisgICAgICBpZiAoX19vcy5nb29kKCkpCisJX01fb2sgPSB0cnVlOworICAgICAgZWxzZQorCV9fb3Muc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KKyAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CisgICAgICBfTV9pbnNlcnQoX1ZhbHVlVCBfX3YpCisgICAgICB7CisJc2VudHJ5IF9fY2VyYigqdGhpcyk7CisJaWYgKF9fY2VyYikKKwkgIHsKKwkgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6Z29vZGJpdDsKKwkgICAgX190cnkKKwkgICAgICB7CisJCWNvbnN0IF9fbnVtX3B1dF90eXBlJiBfX25wID0gX19jaGVja19mYWNldCh0aGlzLT5fTV9udW1fcHV0KTsKKwkJaWYgKF9fbnAucHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX3YpLmZhaWxlZCgpKQorCQkgIF9fZXJyIHw9IGlvc19iYXNlOjpiYWRiaXQ7CisJICAgICAgfQorCSAgICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgICAgeworCQl0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsJCQorCQlfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgICB9CisJICAgIF9fY2F0Y2goLi4uKQorCSAgICAgIHsgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7IH0KKwkgICAgaWYgKF9fZXJyKQorCSAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKKwkgIH0KKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIG9wZXJhdG9yPDwoc2hvcnQgX19uKQorICAgIHsKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDExNy4gYmFzaWNfb3N0cmVhbSB1c2VzIG5vbmV4aXN0ZW50IG51bV9wdXQgbWVtYmVyIGZ1bmN0aW9ucy4KKyAgICAgIGNvbnN0IGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOworICAgICAgaWYgKF9fZm10ID09IGlvc19iYXNlOjpvY3QgfHwgX19mbXQgPT0gaW9zX2Jhc2U6OmhleCkKKwlyZXR1cm4gX01faW5zZXJ0KHN0YXRpY19jYXN0PGxvbmc+KHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfX24pKSk7CisgICAgICBlbHNlCisJcmV0dXJuIF9NX2luc2VydChzdGF0aWNfY2FzdDxsb25nPihfX24pKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIG9wZXJhdG9yPDwoaW50IF9fbikKKyAgICB7CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAxMTcuIGJhc2ljX29zdHJlYW0gdXNlcyBub25leGlzdGVudCBudW1fcHV0IG1lbWJlciBmdW5jdGlvbnMuCisgICAgICBjb25zdCBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKKyAgICAgIGlmIChfX2ZtdCA9PSBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ID09IGlvc19iYXNlOjpoZXgpCisJcmV0dXJuIF9NX2luc2VydChzdGF0aWNfY2FzdDxsb25nPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fbikpKTsKKyAgICAgIGVsc2UKKwlyZXR1cm4gX01faW5zZXJ0KHN0YXRpY19jYXN0PGxvbmc+KF9fbikpOworICAgIH0KKyAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBvcGVyYXRvcjw8KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbikKKyAgICB7CisgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpnb29kYml0OworICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CisgICAgICBpZiAoX19jZXJiICYmIF9fc2JpbikKKwl7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgaWYgKCFfX2NvcHlfc3RyZWFtYnVmcyhfX3NiaW4sIHRoaXMtPnJkYnVmKCkpKQorCQlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKwkgICAgfQorCSAgX19jYXRjaChfX2N4eGFiaXYxOjpfX2ZvcmNlZF91bndpbmQmKQorCSAgICB7CisJICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CQkKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOyB9CisJfQorICAgICAgZWxzZSBpZiAoIV9fc2JpbikKKwlfX2VyciB8PSBpb3NfYmFzZTo6YmFkYml0OworICAgICAgaWYgKF9fZXJyKQorCXRoaXMtPnNldHN0YXRlKF9fZXJyKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIHB1dChjaGFyX3R5cGUgX19jKQorICAgIHsKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSIDYwLiBXaGF0IGlzIGEgZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uPworICAgICAgLy8gYmFzaWNfb3N0cmVhbTo6cHV0KGNoYXJfdHlwZSkgaXMgYW4gdW5mb3JtYXR0ZWQgb3V0cHV0IGZ1bmN0aW9uLgorICAgICAgLy8gRFIgNjMuIEV4Y2VwdGlvbi1oYW5kbGluZyBwb2xpY3kgZm9yIHVuZm9ybWF0dGVkIG91dHB1dC4KKyAgICAgIC8vIFVuZm9ybWF0dGVkIG91dHB1dCBmdW5jdGlvbnMgc2hvdWxkIGNhdGNoIGV4Y2VwdGlvbnMgdGhyb3duCisgICAgICAvLyBmcm9tIHN0cmVhbWJ1ZiBtZW1iZXJzLgorICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CisgICAgICBpZiAoX19jZXJiKQorCXsKKwkgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgY29uc3QgaW50X3R5cGUgX19wdXQgPSB0aGlzLT5yZGJ1ZigpLT5zcHV0YyhfX2MpOworCSAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19wdXQsIHRyYWl0c190eXBlOjplb2YoKSkpCisJCV9fZXJyIHw9IGlvc19iYXNlOjpiYWRiaXQ7CisJICAgIH0KKwkgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwkgICAgeworCSAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwkJCisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7IHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOyB9CisJICBpZiAoX19lcnIpCisJICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKKwl9CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICB3cml0ZShjb25zdCBfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pCisgICAgeworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gRFIgNjAuIFdoYXQgaXMgYSBmb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24/CisgICAgICAvLyBiYXNpY19vc3RyZWFtOjp3cml0ZShjb25zdCBjaGFyX3R5cGUqLCBzdHJlYW1zaXplKSBpcyBhbgorICAgICAgLy8gdW5mb3JtYXR0ZWQgb3V0cHV0IGZ1bmN0aW9uLgorICAgICAgLy8gRFIgNjMuIEV4Y2VwdGlvbi1oYW5kbGluZyBwb2xpY3kgZm9yIHVuZm9ybWF0dGVkIG91dHB1dC4KKyAgICAgIC8vIFVuZm9ybWF0dGVkIG91dHB1dCBmdW5jdGlvbnMgc2hvdWxkIGNhdGNoIGV4Y2VwdGlvbnMgdGhyb3duCisgICAgICAvLyBmcm9tIHN0cmVhbWJ1ZiBtZW1iZXJzLgorICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CisgICAgICBpZiAoX19jZXJiKQorCXsKKwkgIF9fdHJ5CisJICAgIHsgX01fd3JpdGUoX19zLCBfX24pOyB9CisJICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgIHsKKwkgICAgICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsJCQorCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeyB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsgfQorCX0KKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIGZsdXNoKCkKKyAgICB7CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUiA2MC4gV2hhdCBpcyBhIGZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbj8KKyAgICAgIC8vIGJhc2ljX29zdHJlYW06OmZsdXNoKCkgaXMgKm5vdCogYW4gdW5mb3JtYXR0ZWQgb3V0cHV0IGZ1bmN0aW9uLgorICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6Z29vZGJpdDsKKyAgICAgIF9fdHJ5CisJeworCSAgaWYgKHRoaXMtPnJkYnVmKCkgJiYgdGhpcy0+cmRidWYoKS0+cHVic3luYygpID09IC0xKQorCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6YmFkYml0OworCX0KKyAgICAgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwl7CisJICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsJCQorCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgICAgX19jYXRjaCguLi4pCisJeyB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsgfQorICAgICAgaWYgKF9fZXJyKQorCXRoaXMtPnNldHN0YXRlKF9fZXJyKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHR5cGVuYW1lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5cGUKKyAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIHRlbGxwKCkKKyAgICB7CisgICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsKKyAgICAgIF9fdHJ5CisJeworCSAgaWYgKCF0aGlzLT5mYWlsKCkpCisJICAgIF9fcmV0ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZigwLCBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFzZTo6b3V0KTsKKwl9CisgICAgICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJeworCSAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CQkKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7IH0KKyAgICAgIHJldHVybiBfX3JldDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIHNlZWtwKHBvc190eXBlIF9fcG9zKQorICAgIHsKKyAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisgICAgICBfX3RyeQorCXsKKwkgIGlmICghdGhpcy0+ZmFpbCgpKQorCSAgICB7CisJICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCSAgICAgIC8vIDEzNi4gIHNlZWtwLCBzZWVrZyBzZXR0aW5nIHdyb25nIHN0cmVhbXM/CisJICAgICAgY29uc3QgcG9zX3R5cGUgX19wID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla3BvcyhfX3BvcywKKwkJCQkJCQkgICAgIGlvc19iYXNlOjpvdXQpOworCisJICAgICAgLy8gMTI5LiBOZWVkIGVycm9yIGluZGljYXRpb24gZnJvbSBzZWVrcCgpIGFuZCBzZWVrZygpCisJICAgICAgaWYgKF9fcCA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQorCQlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKwkgICAgfQorCX0KKyAgICAgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwl7CisJICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsJCQorCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgICAgX19jYXRjaCguLi4pCisJeyB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsgfQorICAgICAgaWYgKF9fZXJyKQorCXRoaXMtPnNldHN0YXRlKF9fZXJyKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIHNlZWtwKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2RpcikKKyAgICB7CisgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpnb29kYml0OworICAgICAgX190cnkKKwl7CisJICBpZiAoIXRoaXMtPmZhaWwoKSkKKwkgICAgeworCSAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkgICAgICAvLyAxMzYuICBzZWVrcCwgc2Vla2cgc2V0dGluZyB3cm9uZyBzdHJlYW1zPworCSAgICAgIGNvbnN0IHBvc190eXBlIF9fcCA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYsIF9fZGlyLAorCQkJCQkJCSAgICAgaW9zX2Jhc2U6Om91dCk7CisKKwkgICAgICAvLyAxMjkuIE5lZWQgZXJyb3IgaW5kaWNhdGlvbiBmcm9tIHNlZWtwKCkgYW5kIHNlZWtnKCkKKwkgICAgICBpZiAoX19wID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCisJCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworCSAgICB9CisJfQorICAgICAgX19jYXRjaChfX2N4eGFiaXYxOjpfX2ZvcmNlZF91bndpbmQmKQorCXsKKwkgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwkJCisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7IHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOyB9CisgICAgICBpZiAoX19lcnIpCisJdGhpcy0+c2V0c3RhdGUoX19lcnIpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKQorICAgIHsKKyAgICAgIGlmICghX19zKQorCV9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOworICAgICAgZWxzZQorCXsKKwkgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkgIC8vIDE2Ny4gIEltcHJvcGVyIHVzZSBvZiB0cmFpdHNfdHlwZTo6bGVuZ3RoKCkKKwkgIGNvbnN0IHNpemVfdCBfX2NsZW4gPSBjaGFyX3RyYWl0czxjaGFyPjo6bGVuZ3RoKF9fcyk7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgc3RydWN0IF9fcHRyX2d1YXJkCisJICAgICAgeworCQlfQ2hhclQgKl9fcDsKKwkJX19wdHJfZ3VhcmQgKF9DaGFyVCAqX19pcCk6IF9fcChfX2lwKSB7IH0KKwkJfl9fcHRyX2d1YXJkKCkgeyBkZWxldGVbXSBfX3A7IH0KKwkJX0NoYXJUKiBfX2dldCgpIHsgcmV0dXJuIF9fcDsgfQorCSAgICAgIH0gX19wZyAobmV3IF9DaGFyVFtfX2NsZW5dKTsKKworCSAgICAgIF9DaGFyVCAqX193cyA9IF9fcGcuX19nZXQoKTsKKwkgICAgICBmb3IgKHNpemVfdCAgX19pID0gMDsgX19pIDwgX19jbGVuOyArK19faSkKKwkJX193c1tfX2ldID0gX19vdXQud2lkZW4oX19zW19faV0pOworCSAgICAgIF9fb3N0cmVhbV9pbnNlcnQoX19vdXQsIF9fd3MsIF9fY2xlbik7CisJICAgIH0KKwkgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwkgICAgeworCSAgICAgIF9fb3V0Ll9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeyBfX291dC5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsgfQorCX0KKyAgICAgIHJldHVybiBfX291dDsKKyAgICB9CisKKyAgLy8gSW5oaWJpdCBpbXBsaWNpdCBpbnN0YW50aWF0aW9ucyBmb3IgcmVxdWlyZWQgaW5zdGFudGlhdGlvbnMsCisgIC8vIHdoaWNoIGFyZSBkZWZpbmVkIHZpYSBleHBsaWNpdCBpbnN0YW50aWF0aW9ucyBlbHNld2hlcmUuCisgIC8vIE5COiAgVGhpcyBzeW50YXggaXMgYSBHTlUgZXh0ZW5zaW9uLgorI2lmIF9HTElCQ1hYX0VYVEVSTl9URU1QTEFURQorICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmVhbTxjaGFyPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIGVuZGwob3N0cmVhbSYpOworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgZW5kcyhvc3RyZWFtJik7CisgIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBmbHVzaChvc3RyZWFtJik7CisgIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjaGFyKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIHVuc2lnbmVkIGNoYXIpOworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgc2lnbmVkIGNoYXIpOworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3QgY2hhciopOworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3QgdW5zaWduZWQgY2hhciopOworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3Qgc2lnbmVkIGNoYXIqKTsKKworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3N0cmVhbTo6X01faW5zZXJ0KGxvbmcpOworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3N0cmVhbTo6X01faW5zZXJ0KHVuc2lnbmVkIGxvbmcpOworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3N0cmVhbTo6X01faW5zZXJ0KGJvb2wpOworI2lmZGVmIF9HTElCQ1hYX1VTRV9MT05HX0xPTkcKKyAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9zdHJlYW06Ol9NX2luc2VydChsb25nIGxvbmcpOworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3N0cmVhbTo6X01faW5zZXJ0KHVuc2lnbmVkIGxvbmcgbG9uZyk7CisjZW5kaWYKKyAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9zdHJlYW06Ol9NX2luc2VydChkb3VibGUpOworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3N0cmVhbTo6X01faW5zZXJ0KGxvbmcgZG91YmxlKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9zdHJlYW06Ol9NX2luc2VydChjb25zdCB2b2lkKik7CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmVhbTx3Y2hhcl90PjsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBlbmRsKHdvc3RyZWFtJik7CisgIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgZW5kcyh3b3N0cmVhbSYpOworICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIGZsdXNoKHdvc3RyZWFtJik7CisgIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIHdjaGFyX3QpOworICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBjaGFyKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY29uc3Qgd2NoYXJfdCopOworICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBjb25zdCBjaGFyKik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiB3b3N0cmVhbTo6X01faW5zZXJ0KGxvbmcpOworICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIHdvc3RyZWFtOjpfTV9pbnNlcnQodW5zaWduZWQgbG9uZyk7CisgIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgd29zdHJlYW06Ol9NX2luc2VydChib29sKTsKKyNpZmRlZiBfR0xJQkNYWF9VU0VfTE9OR19MT05HCisgIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgd29zdHJlYW06Ol9NX2luc2VydChsb25nIGxvbmcpOworICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIHdvc3RyZWFtOjpfTV9pbnNlcnQodW5zaWduZWQgbG9uZyBsb25nKTsKKyNlbmRpZgorICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIHdvc3RyZWFtOjpfTV9pbnNlcnQoZG91YmxlKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiB3b3N0cmVhbTo6X01faW5zZXJ0KGxvbmcgZG91YmxlKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiB3b3N0cmVhbTo6X01faW5zZXJ0KGNvbnN0IHZvaWQqKTsKKyNlbmRpZgorI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvb3N0cmVhbV9pbnNlcnQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9vc3RyZWFtX2luc2VydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMDE3ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvb3N0cmVhbV9pbnNlcnQuaApAQCAtMCwwICsxLDEyNyBAQAorLy8gSGVscGVycyBmb3Igb3N0cmVhbSBpbnNlcnRlcnMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBvc3RyZWFtX2luc2VydC5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKyNpZm5kZWYgX09TVFJFQU1fSU5TRVJUX0gKKyNkZWZpbmUgX09TVFJFQU1fSU5TRVJUX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxpb3Nmd2Q+CisjaW5jbHVkZSA8Y3h4YWJpLWZvcmNlZC5oPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fb3N0cmVhbV93cml0ZShiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LAorCQkgICAgY29uc3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQorICAgIHsKKyAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICAgICAgIF9fb3N0cmVhbV90eXBlOyAgICAgIAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX3B1dCA9IF9fb3V0LnJkYnVmKCktPnNwdXRuKF9fcywgX19uKTsKKyAgICAgIGlmIChfX3B1dCAhPSBfX24pCisJX19vdXQuc2V0c3RhdGUoX19pb3NfYmFzZTo6YmFkYml0KTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGlubGluZSB2b2lkCisgICAgX19vc3RyZWFtX2ZpbGwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgc3RyZWFtc2l6ZSBfX24pCisgICAgeworICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gICAgICAgX19vc3RyZWFtX3R5cGU7ICAgICAgCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCBfQ2hhclQgX19jID0gX19vdXQuZmlsbCgpOworICAgICAgZm9yICg7IF9fbiA+IDA7IC0tX19uKQorCXsKKwkgIGNvbnN0IHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIF9fcHV0ID0gX19vdXQucmRidWYoKS0+c3B1dGMoX19jKTsKKwkgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX3B1dCwgX1RyYWl0czo6ZW9mKCkpKQorCSAgICB7CisJICAgICAgX19vdXQuc2V0c3RhdGUoX19pb3NfYmFzZTo6YmFkYml0KTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBfX29zdHJlYW1faW5zZXJ0KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsCisJCSAgICAgY29uc3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQorICAgIHsKKyAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICAgICAgIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOworICAgICAgaWYgKF9fY2VyYikKKwl7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOworCSAgICAgIGlmIChfX3cgPiBfX24pCisJCXsKKwkJICBjb25zdCBib29sIF9fbGVmdCA9ICgoX19vdXQuZmxhZ3MoKQorCQkJCQkmIF9faW9zX2Jhc2U6OmFkanVzdGZpZWxkKQorCQkJCSAgICAgICA9PSBfX2lvc19iYXNlOjpsZWZ0KTsKKwkJICBpZiAoIV9fbGVmdCkKKwkJICAgIF9fb3N0cmVhbV9maWxsKF9fb3V0LCBfX3cgLSBfX24pOworCQkgIGlmIChfX291dC5nb29kKCkpCisJCSAgICBfX29zdHJlYW1fd3JpdGUoX19vdXQsIF9fcywgX19uKTsKKwkJICBpZiAoX19sZWZ0ICYmIF9fb3V0Lmdvb2QoKSkKKwkJICAgIF9fb3N0cmVhbV9maWxsKF9fb3V0LCBfX3cgLSBfX24pOworCQl9CisJICAgICAgZWxzZQorCQlfX29zdHJlYW1fd3JpdGUoX19vdXQsIF9fcywgX19uKTsKKwkgICAgICBfX291dC53aWR0aCgwKTsKKwkgICAgfQorCSAgX19jYXRjaChfX2N4eGFiaXYxOjpfX2ZvcmNlZF91bndpbmQmKQorCSAgICB7CisJICAgICAgX19vdXQuX01fc2V0c3RhdGUoX19pb3NfYmFzZTo6YmFkYml0KTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsgX19vdXQuX01fc2V0c3RhdGUoX19pb3NfYmFzZTo6YmFkYml0KTsgfQorCX0KKyAgICAgIHJldHVybiBfX291dDsKKyAgICB9CisKKyAgLy8gSW5oaWJpdCBpbXBsaWNpdCBpbnN0YW50aWF0aW9ucyBmb3IgcmVxdWlyZWQgaW5zdGFudGlhdGlvbnMsCisgIC8vIHdoaWNoIGFyZSBkZWZpbmVkIHZpYSBleHBsaWNpdCBpbnN0YW50aWF0aW9ucyBlbHNld2hlcmUuCisgIC8vIE5COiAgVGhpcyBzeW50YXggaXMgYSBHTlUgZXh0ZW5zaW9uLgorI2lmIF9HTElCQ1hYX0VYVEVSTl9URU1QTEFURQorICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgX19vc3RyZWFtX2luc2VydChvc3RyZWFtJiwgY29uc3QgY2hhciosIHN0cmVhbXNpemUpOworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBfX29zdHJlYW1faW5zZXJ0KHdvc3RyZWFtJiwgY29uc3Qgd2NoYXJfdCosCisJCQkJCSAgICAgc3RyZWFtc2l6ZSk7CisjZW5kaWYKKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZiAvKiBfT1NUUkVBTV9JTlNFUlRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3Bvc3R5cGVzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvcG9zdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDY2ZDliCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3Bvc3R5cGVzLmgKQEAgLTAsMCArMSwyNDEgQEAKKy8vIFBvc2l0aW9uIHR5cGVzIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwKKy8vIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBwb3N0eXBlcy5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyNy40LjEgLSBUeXBlcworLy8gSVNPIEMrKyAxNDg4MjogMjcuNC4zIC0gVGVtcGxhdGUgY2xhc3MgZnBvcworLy8KKworI2lmbmRlZiBfR0xJQkNYWF9QT1NUWVBFU19ICisjZGVmaW5lIF9HTElCQ1hYX1BPU1RZUEVTX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxjd2NoYXI+IC8vIEZvciBtYnN0YXRlX3QKKworLy8gWFhYIElmIDxzdGRpbnQuaD4gaXMgcmVhbGx5IG5lZWRlZCwgbWFrZSBzdXJlIHRvIGRlZmluZSB0aGUgbWFjcm9zCisvLyBiZWZvcmUgaW5jbHVkaW5nIGl0LCBpbiBvcmRlciBub3QgdG8gYnJlYWsgPHRyMS9jc3RkaW50PiAoYW5kIDxjc3RkaW50PgorLy8gaW4gQysrMHgpLiAgUmVjb25zaWRlciBhbGwgdGhpcyBhcyBzb29uIGFzIHBvc3NpYmxlLi4uCisjaWYgKGRlZmluZWQoX0dMSUJDWFhfSEFWRV9JTlQ2NF9UKSAmJiAhZGVmaW5lZChfR0xJQkNYWF9IQVZFX0lOVDY0X1RfTE9ORykgXAorICAgICAmJiAhZGVmaW5lZChfR0xJQkNYWF9IQVZFX0lOVDY0X1RfTE9OR19MT05HKSkKKworI2lmbmRlZiBfX1NURENfTElNSVRfTUFDUk9TCisjIGRlZmluZSBfVU5ERUZfX1NURENfTElNSVRfTUFDUk9TCisjIGRlZmluZSBfX1NURENfTElNSVRfTUFDUk9TCisjZW5kaWYKKyNpZm5kZWYgX19TVERDX0NPTlNUQU5UX01BQ1JPUworIyBkZWZpbmUgX1VOREVGX19TVERDX0NPTlNUQU5UX01BQ1JPUworIyBkZWZpbmUgX19TVERDX0NPTlNUQU5UX01BQ1JPUworI2VuZGlmCisjaW5jbHVkZSA8c3RkaW50Lmg+IC8vIEZvciBpbnQ2NF90CisjaWZkZWYgX1VOREVGX19TVERDX0xJTUlUX01BQ1JPUworIyB1bmRlZiBfX1NURENfTElNSVRfTUFDUk9TCisjIHVuZGVmIF9VTkRFRl9fU1REQ19MSU1JVF9NQUNST1MKKyNlbmRpZgorI2lmZGVmIF9VTkRFRl9fU1REQ19DT05TVEFOVF9NQUNST1MKKyMgdW5kZWYgX19TVERDX0NPTlNUQU5UX01BQ1JPUworIyB1bmRlZiBfVU5ERUZfX1NURENfQ09OU1RBTlRfTUFDUk9TCisjZW5kaWYKKworI2VuZGlmCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgLy8gVGhlIHR5cGVzIHN0cmVhbW9mZiwgc3RyZWFtcG9zIGFuZCB3c3RyZWFtcG9zIGFuZCB0aGUgY2xhc3MKKyAgLy8gdGVtcGxhdGUgZnBvczw+IGFyZSBkZXNjcmliZWQgaW4gY2xhdXNlcyAyMS4xLjIsIDIxLjEuMywgMjcuMS4yLAorICAvLyAyNy4yLCAyNy40LjEsIDI3LjQuMyBhbmQgRC42LiBEZXNwaXRlIGFsbCB0aGlzIHZlcmJpYWdlLCB0aGUKKyAgLy8gYmVoYXZpb3VyIG9mIHRoZXNlIHR5cGVzIGlzIG1vc3RseSBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIG9yCisgIC8vIHVuc3BlY2lmaWVkLiBUaGUgYmVoYXZpb3VyIGluIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgYXMgbm90ZWQKKyAgLy8gYmVsb3cuCisKKyAgLyoqCisgICAqICBAYnJpZWYgIFR5cGUgdXNlZCBieSBmcG9zLCBjaGFyX3RyYWl0czxjaGFyPiwgYW5kIGNoYXJfdHJhaXRzPHdjaGFyX3Q+LgorICAgKgorICAgKiAgSW4gY2xhdXNlcyAyMS4xLjMuMSBhbmQgMjcuNC4xIHN0cmVhbW9mZiBpcyBkZXNjcmliZWQgYXMgYW4KKyAgICogIGltcGxlbWVudGF0aW9uIGRlZmluZWQgdHlwZS4KKyAgICogIE5vdGU6IEluIHZlcnNpb25zIG9mIEdDQyB1cCB0byBhbmQgaW5jbHVkaW5nIEdDQyAzLjMsIHN0cmVhbW9mZgorICAgKiAgd2FzIHR5cGVkZWYgbG9uZy4KKyAgKi8gIAorI2lmZGVmIF9HTElCQ1hYX0hBVkVfSU5UNjRfVF9MT05HCisgIHR5cGVkZWYgbG9uZyAgICAgICAgICBzdHJlYW1vZmY7CisjZWxpZiBkZWZpbmVkKF9HTElCQ1hYX0hBVkVfSU5UNjRfVF9MT05HX0xPTkcpCisgIHR5cGVkZWYgbG9uZyBsb25nICAgICBzdHJlYW1vZmY7CisjZWxpZiBkZWZpbmVkKF9HTElCQ1hYX0hBVkVfSU5UNjRfVCkgCisgIHR5cGVkZWYgaW50NjRfdCAgICAgICBzdHJlYW1vZmY7CisjZWxzZQorICB0eXBlZGVmIGxvbmcgbG9uZyAgICAgc3RyZWFtb2ZmOworI2VuZGlmCisKKyAgLy8vIEludGVncmFsIHR5cGUgZm9yIEkvTyBvcGVyYXRpb24gY291bnRzIGFuZCBidWZmZXIgc2l6ZXMuCisgIHR5cGVkZWYgcHRyZGlmZl90CXN0cmVhbXNpemU7IC8vIFNpZ25lZCBpbnRlZ3JhbCB0eXBlCisKKyAgLyoqCisgICAqICBAYnJpZWYgIENsYXNzIHJlcHJlc2VudGluZyBzdHJlYW0gcG9zaXRpb25zLgorICAgKgorICAgKiAgVGhlIHN0YW5kYXJkIHBsYWNlcyBubyByZXF1aXJlbWVudHMgdXBvbiB0aGUgdGVtcGxhdGUgcGFyYW1ldGVyIFN0YXRlVC4KKyAgICogIEluIHRoaXMgaW1wbGVtZW50YXRpb24gU3RhdGVUIG11c3QgYmUgRGVmYXVsdENvbnN0cnVjdGlibGUsCisgICAqICBDb3B5Q29uc3RydWN0aWJsZSBhbmQgQXNzaWduYWJsZS4gIFRoZSBzdGFuZGFyZCBvbmx5IHJlcXVpcmVzIHRoYXQgZnBvcworICAgKiAgc2hvdWxkIGNvbnRhaW4gYSBtZW1iZXIgb2YgdHlwZSBTdGF0ZVQuIEluIHRoaXMgaW1wbGVtZW50YXRpb24gaXQgYWxzbworICAgKiAgY29udGFpbnMgYW4gb2Zmc2V0IHN0b3JlZCBhcyBhIHNpZ25lZCBpbnRlZ2VyLgorICAgKgorICAgKiAgQHBhcmFtICBTdGF0ZVQgIFR5cGUgcGFzc2VkIHRvIGFuZCByZXR1cm5lZCBmcm9tIHN0YXRlKCkuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RhdGVUPgorICAgIGNsYXNzIGZwb3MKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHN0cmVhbW9mZgkgICAgICAgICAgICAgICAgX01fb2ZmOworICAgICAgX1N0YXRlVAkJCV9NX3N0YXRlOworCisgICAgcHVibGljOgorICAgICAgLy8gVGhlIHN0YW5kYXJkIGRvZXNuJ3QgcmVxdWlyZSB0aGF0IGZwb3Mgb2JqZWN0cyBjYW4gYmUgZGVmYXVsdAorICAgICAgLy8gY29uc3RydWN0ZWQuIFRoaXMgaW1wbGVtZW50YXRpb24gcHJvdmlkZXMgYSBkZWZhdWx0CisgICAgICAvLyBjb25zdHJ1Y3RvciB0aGF0IGluaXRpYWxpemVzIHRoZSBvZmZzZXQgdG8gMCBhbmQgZGVmYXVsdAorICAgICAgLy8gY29uc3RydWN0cyB0aGUgc3RhdGUuCisgICAgICBmcG9zKCkKKyAgICAgIDogX01fb2ZmKDApLCBfTV9zdGF0ZSgpIHsgfQorCisgICAgICAvLyBUaGUgc3RhbmRhcmQgcmVxdWlyZXMgdGhhdCBmcG9zIG9iamVjdHMgY2FuIGJlIGNvbnN0cnVjdGVkCisgICAgICAvLyBmcm9tIHN0cmVhbW9mZiBvYmplY3RzIHVzaW5nIHRoZSBjb25zdHJ1Y3RvciBzeW50YXgsIGFuZAorICAgICAgLy8gZmFpbHMgdG8gZ2l2ZSBhbnkgbWVhbmluZ2Z1bCBzZW1hbnRpY3MuIEluIHRoaXMKKyAgICAgIC8vIGltcGxlbWVudGF0aW9uIGltcGxpY2l0IGNvbnZlcnNpb24gaXMgYWxzbyBhbGxvd2VkLCBhbmQgdGhpcworICAgICAgLy8gY29uc3RydWN0b3Igc3RvcmVzIHRoZSBzdHJlYW1vZmYgYXMgdGhlIG9mZnNldCBhbmQgZGVmYXVsdAorICAgICAgLy8gY29uc3RydWN0cyB0aGUgc3RhdGUuCisgICAgICAvLy8gQ29uc3RydWN0IHBvc2l0aW9uIGZyb20gb2Zmc2V0LgorICAgICAgZnBvcyhzdHJlYW1vZmYgX19vZmYpCisgICAgICA6IF9NX29mZihfX29mZiksIF9NX3N0YXRlKCkgeyB9CisKKyAgICAgIC8vLyBDb252ZXJ0IHRvIHN0cmVhbW9mZi4KKyAgICAgIG9wZXJhdG9yIHN0cmVhbW9mZigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsgfQorCisgICAgICAvLy8gUmVtZW1iZXIgdGhlIHZhbHVlIG9mIEBhIHN0LgorICAgICAgdm9pZAorICAgICAgc3RhdGUoX1N0YXRlVCBfX3N0KQorICAgICAgeyBfTV9zdGF0ZSA9IF9fc3Q7IH0KKworICAgICAgLy8vIFJldHVybiB0aGUgbGFzdCBzZXQgdmFsdWUgb2YgQGEgc3QuCisgICAgICBfU3RhdGVUCisgICAgICBzdGF0ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9zdGF0ZTsgfQorCisgICAgICAvLyBUaGUgc3RhbmRhcmQgcmVxdWlyZXMgdGhhdCB0aGlzIG9wZXJhdG9yIG11c3QgYmUgZGVmaW5lZCwgYnV0CisgICAgICAvLyBnaXZlcyBubyBzZW1hbnRpY3MuIEluIHRoaXMgaW1wbGVtZW50YXRpb24gaXQganVzdCBhZGRzIGl0cworICAgICAgLy8gYXJndW1lbnQgdG8gdGhlIHN0b3JlZCBvZmZzZXQgYW5kIHJldHVybnMgKnRoaXMuCisgICAgICAvLy8gQWRkIG9mZnNldCB0byB0aGlzIHBvc2l0aW9uLgorICAgICAgZnBvcyYKKyAgICAgIG9wZXJhdG9yKz0oc3RyZWFtb2ZmIF9fb2ZmKQorICAgICAgeworCV9NX29mZiArPSBfX29mZjsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8vIFRoZSBzdGFuZGFyZCByZXF1aXJlcyB0aGF0IHRoaXMgb3BlcmF0b3IgbXVzdCBiZSBkZWZpbmVkLCBidXQKKyAgICAgIC8vIGdpdmVzIG5vIHNlbWFudGljcy4gSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBpdCBqdXN0IHN1YnRyYWN0cworICAgICAgLy8gaXRzIGFyZ3VtZW50IGZyb20gdGhlIHN0b3JlZCBvZmZzZXQgYW5kIHJldHVybnMgKnRoaXMuCisgICAgICAvLy8gU3VidHJhY3Qgb2Zmc2V0IGZyb20gdGhpcyBwb3NpdGlvbi4KKyAgICAgIGZwb3MmCisgICAgICBvcGVyYXRvci09KHN0cmVhbW9mZiBfX29mZikKKyAgICAgIHsKKwlfTV9vZmYgLT0gX19vZmY7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvLyBUaGUgc3RhbmRhcmQgcmVxdWlyZXMgdGhhdCB0aGlzIG9wZXJhdG9yIG11c3QgYmUgZGVmaW5lZCwgYnV0CisgICAgICAvLyBkZWZpbmVzIGl0cyBzZW1hbnRpY3Mgb25seSBpbiB0ZXJtcyBvZiBvcGVyYXRvci0uIEluIHRoaXMKKyAgICAgIC8vIGltcGxlbWVudGF0aW9uIGl0IGNvbnN0cnVjdHMgYSBjb3B5IG9mICp0aGlzLCBhZGRzIHRoZQorICAgICAgLy8gYXJndW1lbnQgdG8gdGhhdCBjb3B5IHVzaW5nIG9wZXJhdG9yKz0gYW5kIHRoZW4gcmV0dXJucyB0aGUKKyAgICAgIC8vIGNvcHkuCisgICAgICAvLy8gQWRkIHBvc2l0aW9uIGFuZCBvZmZzZXQuCisgICAgICBmcG9zCisgICAgICBvcGVyYXRvcisoc3RyZWFtb2ZmIF9fb2ZmKSBjb25zdAorICAgICAgeworCWZwb3MgX19wb3MoKnRoaXMpOworCV9fcG9zICs9IF9fb2ZmOworCXJldHVybiBfX3BvczsKKyAgICAgIH0KKworICAgICAgLy8gVGhlIHN0YW5kYXJkIHJlcXVpcmVzIHRoYXQgdGhpcyBvcGVyYXRvciBtdXN0IGJlIGRlZmluZWQsIGJ1dAorICAgICAgLy8gZGVmaW5lcyBpdHMgc2VtYW50aWNzIG9ubHkgaW4gdGVybXMgb2Ygb3BlcmF0b3IrLiBJbiB0aGlzCisgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBpdCBjb25zdHJ1Y3RzIGEgY29weSBvZiAqdGhpcywgc3VidHJhY3RzIHRoZQorICAgICAgLy8gYXJndW1lbnQgZnJvbSB0aGF0IGNvcHkgdXNpbmcgb3BlcmF0b3ItPSBhbmQgdGhlbiByZXR1cm5zIHRoZQorICAgICAgLy8gY29weS4KKyAgICAgIC8vLyBTdWJ0cmFjdCBvZmZzZXQgZnJvbSBwb3NpdGlvbi4KKyAgICAgIGZwb3MKKyAgICAgIG9wZXJhdG9yLShzdHJlYW1vZmYgX19vZmYpIGNvbnN0CisgICAgICB7CisJZnBvcyBfX3BvcygqdGhpcyk7CisJX19wb3MgLT0gX19vZmY7CisJcmV0dXJuIF9fcG9zOworICAgICAgfQorCisgICAgICAvLyBUaGUgc3RhbmRhcmQgcmVxdWlyZXMgdGhhdCB0aGlzIG9wZXJhdG9yIG11c3QgYmUgZGVmaW5lZCwgYnV0CisgICAgICAvLyBkZWZpbmVzIGl0cyBzZW1hbnRpY3Mgb25seSBpbiB0ZXJtcyBvZiBvcGVyYXRvcisuIEluIHRoaXMKKyAgICAgIC8vIGltcGxlbWVudGF0aW9uIGl0IHJldHVybnMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgb2Zmc2V0CisgICAgICAvLyBzdG9yZWQgaW4gKnRoaXMgYW5kIGluIHRoZSBhcmd1bWVudC4KKyAgICAgIC8vLyBTdWJ0cmFjdCBwb3NpdGlvbiB0byByZXR1cm4gb2Zmc2V0LgorICAgICAgc3RyZWFtb2ZmCisgICAgICBvcGVyYXRvci0oY29uc3QgZnBvcyYgX19vdGhlcikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX29mZiAtIF9fb3RoZXIuX01fb2ZmOyB9CisgICAgfTsKKworICAvLyBUaGUgc3RhbmRhcmQgb25seSByZXF1aXJlcyB0aGF0IG9wZXJhdG9yPT0gbXVzdCBiZSBhbgorICAvLyBlcXVpdmFsZW5jZSByZWxhdGlvbi4gSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiB0d28gZnBvczxTdGF0ZVQ+CisgIC8vIG9iamVjdHMgYmVsb25nIHRvIHRoZSBzYW1lIGVxdWl2YWxlbmNlIGNsYXNzIGlmIHRoZSBjb250YWluZWQKKyAgLy8gb2Zmc2V0cyBjb21wYXJlIGVxdWFsLgorICAvLy8gVGVzdCBpZiBlcXVpdmFsZW50IHRvIGFub3RoZXIgcG9zaXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TdGF0ZVQ+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGZwb3M8X1N0YXRlVD4mIF9fbGhzLCBjb25zdCBmcG9zPF9TdGF0ZVQ+JiBfX3JocykKKyAgICB7IHJldHVybiBzdHJlYW1vZmYoX19saHMpID09IHN0cmVhbW9mZihfX3Jocyk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RhdGVUPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBmcG9zPF9TdGF0ZVQ+JiBfX2xocywgY29uc3QgZnBvczxfU3RhdGVUPiYgX19yaHMpCisgICAgeyByZXR1cm4gc3RyZWFtb2ZmKF9fbGhzKSAhPSBzdHJlYW1vZmYoX19yaHMpOyB9CisKKyAgLy8gQ2xhdXNlcyAyMS4xLjMuMSBhbmQgMjEuMS4zLjIgZGVzY3JpYmUgc3RyZWFtcG9zIGFuZCB3c3RyZWFtcG9zCisgIC8vIGFzIGltcGxlbWVudGF0aW9uIGRlZmluZWQgdHlwZXMsIGJ1dCBjbGF1c2UgMjcuMiByZXF1aXJlcyB0aGF0CisgIC8vIHRoZXkgbXVzdCBib3RoIGJlIHR5cGVkZWZzIGZvciBmcG9zPG1ic3RhdGVfdD4KKyAgLy8vIEZpbGUgcG9zaXRpb24gZm9yIGNoYXIgc3RyZWFtcy4KKyAgdHlwZWRlZiBmcG9zPG1ic3RhdGVfdD4gc3RyZWFtcG9zOworICAvLy8gRmlsZSBwb3NpdGlvbiBmb3Igd2NoYXJfdCBzdHJlYW1zLgorICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiB3c3RyZWFtcG9zOworCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgLy8vIEZpbGUgcG9zaXRpb24gZm9yIGNoYXIxNl90IHN0cmVhbXMuCisgIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHUxNnN0cmVhbXBvczsKKyAgLy8vIEZpbGUgcG9zaXRpb24gZm9yIGNoYXIzMl90IHN0cmVhbXMuCisgIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHUzMnN0cmVhbXBvczsKKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3JhbmRvbS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3JhbmRvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMjFhMTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvcmFuZG9tLmgKQEAgLTAsMCArMSw1MzQyIEBACisvLyByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKgorICogQGZpbGUgYml0cy9yYW5kb20uaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaW5jbHVkZSA8dmVjdG9yPgorCituYW1lc3BhY2Ugc3RkCit7CisgIC8vIFsyNi40XSBSYW5kb20gbnVtYmVyIGdlbmVyYXRpb24KKworICAvKioKKyAgICogQGRlZmdyb3VwIHJhbmRvbSBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyAgICogQGluZ3JvdXAgbnVtZXJpY3MKKyAgICoKKyAgICogQSBmYWNpbGl0eSBmb3IgZ2VuZXJhdGluZyByYW5kb20gbnVtYmVycyBvbiBzZWxlY3RlZCBkaXN0cmlidXRpb25zLgorICAgKiBAeworICAgKi8KKworICAvKioKKyAgICogQGJyaWVmIEEgZnVuY3Rpb24gdGVtcGxhdGUgZm9yIGNvbnZlcnRpbmcgdGhlIG91dHB1dCBvZiBhIChpbnRlZ3JhbCkKKyAgICogdW5pZm9ybSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB0byBhIGZsb2F0bmcgcG9pbnQgcmVzdWx0IGluIHRoZSByYW5nZQorICAgKiBbMC0xKS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgc2l6ZV90IF9fYml0cywKKwkgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICBfUmVhbFR5cGUKKyAgICBnZW5lcmF0ZV9jYW5vbmljYWwoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fZyk7CisKKyAgLyoKKyAgICogSW1wbGVtZW50YXRpb24tc3BhY2UgZGV0YWlscy4KKyAgICovCisgIG5hbWVzcGFjZSBfX2RldGFpbAorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLCBzaXplX3QgX193LAorCSAgICAgYm9vbCA9IF9fdyA8IHN0YXRpY19jYXN0PHNpemVfdD4KKwkJCSAgKHN0ZDo6bnVtZXJpY19saW1pdHM8X1VJbnRUeXBlPjo6ZGlnaXRzKT4KKyAgICAgIHN0cnVjdCBfU2hpZnQKKyAgICAgIHsgc3RhdGljIGNvbnN0IF9VSW50VHlwZSBfX3ZhbHVlID0gMDsgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwgc2l6ZV90IF9fdz4KKyAgICAgIHN0cnVjdCBfU2hpZnQ8X1VJbnRUeXBlLCBfX3csIHRydWU+CisgICAgICB7IHN0YXRpYyBjb25zdCBfVUludFR5cGUgX192YWx1ZSA9IF9VSW50VHlwZSgxKSA8PCBfX3c7IH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIF9UcCBfX20sIF9UcCBfX2EsIF9UcCBfX2MsIGJvb2w+CisgICAgICBzdHJ1Y3QgX01vZDsKKworICAgIC8vIERpc3BhdGNoIGJhc2VkIG9uIG1vZHVsdXMgdmFsdWUgdG8gcHJldmVudCBkaXZpZGUtYnktemVybyBjb21waWxlLXRpbWUKKyAgICAvLyBlcnJvcnMgd2hlbiBtID09IDAuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfVHAgX19tLCBfVHAgX19hID0gMSwgX1RwIF9fYyA9IDA+CisgICAgICBpbmxpbmUgX1RwCisgICAgICBfX21vZChfVHAgX194KQorICAgICAgeyByZXR1cm4gX01vZDxfVHAsIF9fbSwgX19hLCBfX2MsIF9fbSA9PSAwPjo6X19jYWxjKF9feCk7IH0KKworICAgIC8qCisgICAgICogQW4gYWRhcHRvciBjbGFzcyBmb3IgY29udmVydGluZyB0aGUgb3V0cHV0IG9mIGFueSBHZW5lcmF0b3IgaW50bworICAgICAqIHRoZSBpbnB1dCBmb3IgYSBzcGVjaWZpYyBEaXN0cmlidXRpb24uCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0VuZ2luZSwgdHlwZW5hbWUgX0RJbnB1dFR5cGU+CisgICAgICBzdHJ1Y3QgX0FkYXB0b3IKKyAgICAgIHsKKworICAgICAgcHVibGljOgorCV9BZGFwdG9yKF9FbmdpbmUmIF9fZykKKwk6IF9NX2coX19nKSB7IH0KKworCV9ESW5wdXRUeXBlCisJbWluKCkgY29uc3QKKwl7IHJldHVybiBfRElucHV0VHlwZSgwKTsgfQorCisJX0RJbnB1dFR5cGUKKwltYXgoKSBjb25zdAorCXsgcmV0dXJuIF9ESW5wdXRUeXBlKDEpOyB9CisKKwkvKgorCSAqIENvbnZlcnRzIGEgdmFsdWUgZ2VuZXJhdGVkIGJ5IHRoZSBhZGFwdGVkIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisJICogaW50byBhIHZhbHVlIGluIHRoZSBpbnB1dCBkb21haW4gZm9yIHRoZSBkZXBlbmRlbnQgcmFuZG9tIG51bWJlcgorCSAqIGRpc3RyaWJ1dGlvbi4KKwkgKi8KKwlfRElucHV0VHlwZQorCW9wZXJhdG9yKCkoKQorCXsKKwkgIHJldHVybiBzdGQ6OmdlbmVyYXRlX2Nhbm9uaWNhbDxfRElucHV0VHlwZSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpudW1lcmljX2xpbWl0czxfRElucHV0VHlwZT46OmRpZ2l0cywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0VuZ2luZT4oX01fZyk7CisJfQorCisgICAgICBwcml2YXRlOgorCV9FbmdpbmUmIF9NX2c7CisgICAgICB9OworICB9IC8vIG5hbWVzcGFjZSBfX2RldGFpbAorCisgIC8qKgorICAgKiBAYWRkdG9ncm91cCByYW5kb21fZ2VuZXJhdG9ycyBSYW5kb20gTnVtYmVyIEdlbmVyYXRvcnMKKyAgICogQGluZ3JvdXAgcmFuZG9tCisgICAqCisgICAqIFRoZXNlIGNsYXNzZXMgZGVmaW5lIG9iamVjdHMgd2hpY2ggcHJvdmlkZSByYW5kb20gb3IgcHNldWRvcmFuZG9tCisgICAqIG51bWJlcnMsIGVpdGhlciBmcm9tIGEgZGlzY3JldGUgb3IgYSBjb250aW51b3VzIGludGVydmFsLiAgVGhlCisgICAqIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIHN1cHBsaWVkIGFzIGEgcGFydCBvZiB0aGlzIGxpYnJhcnkgYXJlCisgICAqIGFsbCB1bmlmb3JtIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9ycyB3aGljaCBwcm92aWRlIGEgc2VxdWVuY2Ugb2YKKyAgICogcmFuZG9tIG51bWJlciB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQgb3ZlciB0aGVpciByYW5nZS4KKyAgICoKKyAgICogQSBudW1iZXIgZ2VuZXJhdG9yIGlzIGEgZnVuY3Rpb24gb2JqZWN0IHdpdGggYW4gb3BlcmF0b3IoKSB0aGF0CisgICAqIHRha2VzIHplcm8gYXJndW1lbnRzIGFuZCByZXR1cm5zIGEgbnVtYmVyLgorICAgKgorICAgKiBBIGNvbXBsaWFudCByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBtdXN0IHNhdGlzZnkgdGhlIGZvbGxvd2luZworICAgKiByZXF1aXJlbWVudHMuICA8dGFibGUgYm9yZGVyPTEgY2VsbHBhZGRpbmc9MTAgY2VsbHNwYWNpbmc9MD4KKyAgICogPGNhcHRpb24gYWxpZ249dG9wPlJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIFJlcXVpcmVtZW50czwvY2FwdGlvbj4KKyAgICogPHRyPjx0ZD5UbyBiZSBkb2N1bWVudGVkLjwvdGQ+PC90cj4gPC90YWJsZT4KKyAgICoKKyAgICogQHsKKyAgICovCisKKyAgLyoqCisgICAqIEBicmllZiBBIG1vZGVsIG9mIGEgbGluZWFyIGNvbmdydWVudGlhbCByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAgICoKKyAgICogQSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB0aGF0IHByb2R1Y2VzIHBzZXVkb3JhbmRvbSBudW1iZXJzIHZpYQorICAgKiBsaW5lYXIgZnVuY3Rpb246CisgICAqIEBmWworICAgKiAgICAgeF97aSsxfVxsZWZ0YXJyb3coYXhfe2l9ICsgYykgXGJtb2QgbSAKKyAgICogQGZdCisgICAqCisgICAqIFRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgQHAgX1VJbnRUeXBlIG11c3QgYmUgYW4gdW5zaWduZWQgaW50ZWdyYWwgdHlwZQorICAgKiBsYXJnZSBlbm91Z2ggdG8gc3RvcmUgdmFsdWVzIHVwIHRvIChfX20tMSkuIElmIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIKKyAgICogQHAgX19tIGlzIDAsIHRoZSBtb2R1bHVzIEBwIF9fbSB1c2VkIGlzCisgICAqIHN0ZDo6bnVtZXJpY19saW1pdHM8X1VJbnRUeXBlPjo6bWF4KCkgcGx1cyAxLiBPdGhlcndpc2UsIHRoZSB0ZW1wbGF0ZQorICAgKiBwYXJhbWV0ZXJzIEBwIF9fYSBhbmQgQHAgX19jIG11c3QgYmUgbGVzcyB0aGFuIEBwIF9fbS4KKyAgICoKKyAgICogVGhlIHNpemUgb2YgdGhlIHN0YXRlIGlzIEBmJDFAZiQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIF9VSW50VHlwZSBfX2EsIF9VSW50VHlwZSBfX2MsIF9VSW50VHlwZSBfX20+CisgICAgY2xhc3MgbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmUKKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdW5zaWduZWQ8X1VJbnRUeXBlPjo6dmFsdWUsICJ0ZW1wbGF0ZSBhcmd1bWVudCAiCisJCSAgICAic3Vic3RpdHV0aW5nIF9VSW50VHlwZSBub3QgYW4gdW5zaWduZWQgaW50ZWdyYWwgdHlwZSIpOworICAgICAgc3RhdGljX2Fzc2VydChfX20gPT0gMHUgfHwgKF9fYSA8IF9fbSAmJiBfX2MgPCBfX20pLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IHN1YnN0aXR1dGluZyBfX20gb3V0IG9mIGJvdW5kcyIpOworCisgICAgcHVibGljOgorICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSBnZW5lcmF0ZWQgcmFuZG9tIHZhbHVlLiAqLworICAgICAgdHlwZWRlZiBfVUludFR5cGUgcmVzdWx0X3R5cGU7CisKKyAgICAgIC8qKiBUaGUgbXVsdGlwbGllci4gKi8KKyAgICAgIHN0YXRpYyBjb25zdCByZXN1bHRfdHlwZSBtdWx0aXBsaWVyICAgPSBfX2E7CisgICAgICAvKiogQW4gaW5jcmVtZW50LiAqLworICAgICAgc3RhdGljIGNvbnN0IHJlc3VsdF90eXBlIGluY3JlbWVudCAgICA9IF9fYzsKKyAgICAgIC8qKiBUaGUgbW9kdWx1cy4gKi8KKyAgICAgIHN0YXRpYyBjb25zdCByZXN1bHRfdHlwZSBtb2R1bHVzICAgICAgPSBfX207CisgICAgICBzdGF0aWMgY29uc3QgcmVzdWx0X3R5cGUgZGVmYXVsdF9zZWVkID0gMXU7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnN0cnVjdHMgYSAlbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmUgcmFuZG9tIG51bWJlcgorICAgICAgICogICAgICAgIGdlbmVyYXRvciBlbmdpbmUgd2l0aCBzZWVkIEBwIF9fcy4gIFRoZSBkZWZhdWx0IHNlZWQgdmFsdWUKKyAgICAgICAqICAgICAgICBpcyAxLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX3MgVGhlIGluaXRpYWwgc2VlZCB2YWx1ZS4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lKHJlc3VsdF90eXBlIF9fcyA9IGRlZmF1bHRfc2VlZCkKKyAgICAgIHsgc2VlZChfX3MpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnN0cnVjdHMgYSAlbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmUgcmFuZG9tIG51bWJlcgorICAgICAgICogICAgICAgIGdlbmVyYXRvciBlbmdpbmUgc2VlZGVkIGZyb20gdGhlIHNlZWQgc2VxdWVuY2UgQHAgX19xLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX3EgdGhlIHNlZWQgc2VxdWVuY2UuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Tc2VxLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfc2FtZTxfU3NlcSwgbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmU+Ojp2YWx1ZT4KKwkgICAgICAgOjp0eXBlPgorICAgICAgICBleHBsaWNpdAorICAgICAgICBsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2luZShfU3NlcSYgX19xKQorICAgICAgICB7IHNlZWQoX19xKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXNlZWRzIHRoZSAlbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgICAqICAgICAgICBlbmdpbmUgc2VxdWVuY2UgdG8gdGhlIHNlZWQgQHAgX19zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX3MgVGhlIG5ldyBzZWVkLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBzZWVkKHJlc3VsdF90eXBlIF9fcyA9IGRlZmF1bHRfc2VlZCk7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlc2VlZHMgdGhlICVsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2luZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgICAgICogICAgICAgIGVuZ2luZQorICAgICAgICogc2VxdWVuY2UgdXNpbmcgdmFsdWVzIGZyb20gdGhlIHNlZWQgc2VxdWVuY2UgQHAgX19xLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX3EgdGhlIHNlZWQgc2VxdWVuY2UuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Tc2VxPgorICAgICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2NsYXNzPF9Tc2VxPjo6dmFsdWU+Ojp0eXBlCisgICAgICAgIHNlZWQoX1NzZXEmIF9fcSk7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdldHMgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIHZhbHVlIGluIHRoZSBvdXRwdXQgcmFuZ2UuCisgICAgICAgKgorICAgICAgICogVGhlIG1pbmltdW0gZGVwZW5kcyBvbiB0aGUgQHAgX19jIHBhcmFtZXRlcjogaWYgaXQgaXMgemVybywgdGhlCisgICAgICAgKiBtaW5pbXVtIGdlbmVyYXRlZCBtdXN0IGJlID4gMCwgb3RoZXJ3aXNlIDAgaXMgYWxsb3dlZC4KKyAgICAgICAqCisgICAgICAgKiBAdG9kbyBUaGlzIHNob3VsZCBiZSBjb25zdGV4cHIuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX19jID09IDB1ID8gMXUgOiAwdTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIHRoZSBsYXJnZXN0IHBvc3NpYmxlIHZhbHVlIGluIHRoZSBvdXRwdXQgcmFuZ2UuCisgICAgICAgKgorICAgICAgICogQHRvZG8gVGhpcyBzaG91bGQgYmUgY29uc3RleHByLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fbSAtIDF1OyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIERpc2NhcmQgYSBzZXF1ZW5jZSBvZiByYW5kb20gbnVtYmVycy4KKyAgICAgICAqCisgICAgICAgKiBAdG9kbyBMb29rIGZvciBhIGZhc3RlciB3YXkgdG8gZG8gZGlzY2FyZC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgZGlzY2FyZCh1bnNpZ25lZCBsb25nIGxvbmcgX196KQorICAgICAgeworCWZvciAoOyBfX3ogIT0gMFVMTDsgLS1fX3opCisJICAoKnRoaXMpKCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdldHMgdGhlIG5leHQgcmFuZG9tIG51bWJlciBpbiB0aGUgc2VxdWVuY2UuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBvcGVyYXRvcigpKCkKKyAgICAgIHsKKwlfTV94ID0gX19kZXRhaWw6Ol9fbW9kPF9VSW50VHlwZSwgX19tLCBfX2EsIF9fYz4oX01feCk7CisJcmV0dXJuIF9NX3g7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbXBhcmVzIHR3byBsaW5lYXIgY29uZ3J1ZW50aWFsIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgICAgKiBvYmplY3RzIG9mIHRoZSBzYW1lIHR5cGUgZm9yIGVxdWFsaXR5LgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2xocyBBIGxpbmVhciBjb25ncnVlbnRpYWwgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb2JqZWN0LgorICAgICAgICogQHBhcmFtIF9fcmhzIEFub3RoZXIgbGluZWFyIGNvbmdydWVudGlhbCByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgICAgICogICAgICAgICAgICAgIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBpbmZpbml0ZSBzZXF1ZW5jZXMgb2YgZ2VuZXJhdGVkIHZhbHVlcworICAgICAgICogICAgICAgICAgd291bGQgYmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmUmIF9fbGhzLAorCQkgY29uc3QgbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmUmIF9fcmhzKQorICAgICAgeyByZXR1cm4gX19saHMuX01feCA9PSBfX3Jocy5fTV94OyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFdyaXRlcyB0aGUgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RhdGUgeChpKSBvZiB4IHRvCisgICAgICAgKiAgICAgICAgQHAgX19vcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyAgVGhlIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX19sY3IgQSAlIGxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICAgICAgICogQHJldHVybnMgX19vcy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlMSwgX1VJbnRUeXBlMSBfX2ExLCBfVUludFR5cGUxIF9fYzEsCisJICAgICAgIF9VSW50VHlwZTEgX19tMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiwKKwkJICAgY29uc3Qgc3RkOjpsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2luZTxfVUludFR5cGUxLAorCQkgICBfX2ExLCBfX2MxLCBfX20xPiYpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgZW5naW5lIGJ5IHJlYWRpbmcgaXRzIHRleHR1YWwKKyAgICAgICAqICAgICAgICByZXByZXNlbnRhdGlvbiBmcm9tIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogVGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gbXVzdCBoYXZlIGJlZW4gcHJldmlvdXNseSB3cml0dGVuIHVzaW5nCisgICAgICAgKiBhbiBvdXRwdXQgc3RyZWFtIHdob3NlIGltYnVlZCBsb2NhbGUgYW5kIHdob3NlIHR5cGUncyB0ZW1wbGF0ZQorICAgICAgICogc3BlY2lhbGl6YXRpb24gYXJndW1lbnRzIF9DaGFyVCBhbmQgX1RyYWl0cyB3ZXJlIHRoZSBzYW1lIGFzIHRob3NlCisgICAgICAgKiBvZiBAcCBfX2lzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2lzICBUaGUgaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9fbGNyIEEgJSBsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2luZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAgICAgICAqIEByZXR1cm5zIF9faXMuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZTEsIF9VSW50VHlwZTEgX19hMSwgX1VJbnRUeXBlMSBfX2MxLAorCSAgICAgICBfVUludFR5cGUxIF9fbTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYsCisJCSAgIHN0ZDo6bGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmU8X1VJbnRUeXBlMSwgX19hMSwKKwkJICAgX19jMSwgX19tMT4mKTsKKworICAgIHByaXZhdGU6CisgICAgICBfVUludFR5cGUgX01feDsKKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgQ29tcGFyZXMgdHdvIGxpbmVhciBjb25ncnVlbnRpYWwgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICogb2JqZWN0cyBvZiB0aGUgc2FtZSB0eXBlIGZvciBpbmVxdWFsaXR5LgorICAgKgorICAgKiBAcGFyYW0gX19saHMgQSBsaW5lYXIgY29uZ3J1ZW50aWFsIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9iamVjdC4KKyAgICogQHBhcmFtIF9fcmhzIEFub3RoZXIgbGluZWFyIGNvbmdydWVudGlhbCByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgKiAgICAgICAgICAgICAgb2JqZWN0LgorICAgKgorICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBpbmZpbml0ZSBzZXF1ZW5jZXMgb2YgZ2VuZXJhdGVkIHZhbHVlcworICAgKiAgICAgICAgICB3b3VsZCBiZSBkaWZmZXJlbnQsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwgX1VJbnRUeXBlIF9fYSwgX1VJbnRUeXBlIF9fYywgX1VJbnRUeXBlIF9fbT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc3RkOjpsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2luZTxfVUludFR5cGUsIF9fYSwKKwkgICAgICAgX19jLCBfX20+JiBfX2xocywKKwkgICAgICAgY29uc3Qgc3RkOjpsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2luZTxfVUludFR5cGUsIF9fYSwKKwkgICAgICAgX19jLCBfX20+JiBfX3JocykKKyAgICB7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQorCisKKyAgLyoqCisgICAqIEEgZ2VuZXJhbGl6ZWQgZmVlZGJhY2sgc2hpZnQgcmVnaXN0ZXIgZGlzY3JldGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgICAqCisgICAqIFRoaXMgYWxnb3JpdGhtIGF2b2lkcyBtdWx0aXBsaWNhdGlvbiBhbmQgZGl2aXNpb24gYW5kIGlzIGRlc2lnbmVkIHRvIGJlCisgICAqIGZyaWVuZGx5IHRvIGEgcGlwZWxpbmVkIGFyY2hpdGVjdHVyZS4gIElmIHRoZSBwYXJhbWV0ZXJzIGFyZSBjaG9zZW4KKyAgICogY29ycmVjdGx5LCB0aGlzIGdlbmVyYXRvciB3aWxsIHByb2R1Y2UgbnVtYmVycyB3aXRoIGEgdmVyeSBsb25nIHBlcmlvZCBhbmQKKyAgICogZmFpcmx5IGdvb2QgYXBwYXJlbnQgZW50cm9weSwgYWx0aG91Z2ggc3RpbGwgbm90IGNyeXB0b2dyYXBoaWNhbGx5IHN0cm9uZy4KKyAgICoKKyAgICogVGhlIGJlc3Qgd2F5IHRvIHVzZSB0aGlzIGdlbmVyYXRvciBpcyB3aXRoIHRoZSBwcmVkZWZpbmVkIG10MTk5MzcgY2xhc3MuCisgICAqCisgICAqIFRoaXMgYWxnb3JpdGhtIHdhcyBvcmlnaW5hbGx5IGludmVudGVkIGJ5IE1ha290byBNYXRzdW1vdG8gYW5kCisgICAqIFRha3VqaSBOaXNoaW11cmEuCisgICAqCisgICAqIEB2YXIgd29yZF9zaXplICAgVGhlIG51bWJlciBvZiBiaXRzIGluIGVhY2ggZWxlbWVudCBvZiB0aGUgc3RhdGUgdmVjdG9yLgorICAgKiBAdmFyIHN0YXRlX3NpemUgIFRoZSBkZWdyZWUgb2YgcmVjdXJzaW9uLgorICAgKiBAdmFyIHNoaWZ0X3NpemUgIFRoZSBwZXJpb2QgcGFyYW1ldGVyLgorICAgKiBAdmFyIG1hc2tfYml0cyAgIFRoZSBzZXBhcmF0aW9uIHBvaW50IGJpdCBpbmRleC4KKyAgICogQHZhciBwYXJhbWV0ZXJfYSBUaGUgbGFzdCByb3cgb2YgdGhlIHR3aXN0IG1hdHJpeC4KKyAgICogQHZhciBvdXRwdXRfdSAgICBUaGUgZmlyc3QgcmlnaHQtc2hpZnQgdGVtcGVyaW5nIG1hdHJpeCBwYXJhbWV0ZXIuCisgICAqIEB2YXIgb3V0cHV0X3MgICAgVGhlIGZpcnN0IGxlZnQtc2hpZnQgdGVtcGVyaW5nIG1hdHJpeCBwYXJhbWV0ZXIuCisgICAqIEB2YXIgb3V0cHV0X2IgICAgVGhlIGZpcnN0IGxlZnQtc2hpZnQgdGVtcGVyaW5nIG1hdHJpeCBtYXNrLgorICAgKiBAdmFyIG91dHB1dF90ICAgIFRoZSBzZWNvbmQgbGVmdC1zaGlmdCB0ZW1wZXJpbmcgbWF0cml4IHBhcmFtZXRlci4KKyAgICogQHZhciBvdXRwdXRfYyAgICBUaGUgc2Vjb25kIGxlZnQtc2hpZnQgdGVtcGVyaW5nIG1hdHJpeCBtYXNrLgorICAgKiBAdmFyIG91dHB1dF9sICAgIFRoZSBzZWNvbmQgcmlnaHQtc2hpZnQgdGVtcGVyaW5nIG1hdHJpeCBwYXJhbWV0ZXIuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIHNpemVfdCBfX3csCisJICAgc2l6ZV90IF9fbiwgc2l6ZV90IF9fbSwgc2l6ZV90IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBzaXplX3QgX191LCBfVUludFR5cGUgX19kLCBzaXplX3QgX19zLAorCSAgIF9VSW50VHlwZSBfX2IsIHNpemVfdCBfX3QsCisJICAgX1VJbnRUeXBlIF9fYywgc2l6ZV90IF9fbCwgX1VJbnRUeXBlIF9fZj4KKyAgICBjbGFzcyBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZQorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc191bnNpZ25lZDxfVUludFR5cGU+Ojp2YWx1ZSwgInRlbXBsYXRlIGFyZ3VtZW50ICIKKwkJICAgICJzdWJzdGl0dXRpbmcgX1VJbnRUeXBlIG5vdCBhbiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KDF1IDw9IF9fbSAmJiBfX20gPD0gX19uLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IHN1YnN0aXR1dGluZyBfX20gb3V0IG9mIGJvdW5kcyIpOworICAgICAgc3RhdGljX2Fzc2VydChfX3IgPD0gX193LCAidGVtcGxhdGUgYXJndW1lbnQgc3Vic3RpdHV0aW5nICIKKwkJICAgICJfX3Igb3V0IG9mIGJvdW5kIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9fdSA8PSBfX3csICJ0ZW1wbGF0ZSBhcmd1bWVudCBzdWJzdGl0dXRpbmcgIgorCQkgICAgIl9fdSBvdXQgb2YgYm91bmQiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoX19zIDw9IF9fdywgInRlbXBsYXRlIGFyZ3VtZW50IHN1YnN0aXR1dGluZyAiCisJCSAgICAiX19zIG91dCBvZiBib3VuZCIpOworICAgICAgc3RhdGljX2Fzc2VydChfX3QgPD0gX193LCAidGVtcGxhdGUgYXJndW1lbnQgc3Vic3RpdHV0aW5nICIKKwkJICAgICJfX3Qgb3V0IG9mIGJvdW5kIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9fbCA8PSBfX3csICJ0ZW1wbGF0ZSBhcmd1bWVudCBzdWJzdGl0dXRpbmcgIgorCQkgICAgIl9fbCBvdXQgb2YgYm91bmQiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoX193IDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1VJbnRUeXBlPjo6ZGlnaXRzLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IHN1YnN0aXR1dGluZyBfX3cgb3V0IG9mIGJvdW5kIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9fYSA8PSAoX19kZXRhaWw6Ol9TaGlmdDxfVUludFR5cGUsIF9fdz46Ol9fdmFsdWUgLSAxKSwKKwkJICAgICJ0ZW1wbGF0ZSBhcmd1bWVudCBzdWJzdGl0dXRpbmcgX19hIG91dCBvZiBib3VuZCIpOworICAgICAgc3RhdGljX2Fzc2VydChfX2IgPD0gKF9fZGV0YWlsOjpfU2hpZnQ8X1VJbnRUeXBlLCBfX3c+OjpfX3ZhbHVlIC0gMSksCisJCSAgICAidGVtcGxhdGUgYXJndW1lbnQgc3Vic3RpdHV0aW5nIF9fYiBvdXQgb2YgYm91bmQiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoX19jIDw9IChfX2RldGFpbDo6X1NoaWZ0PF9VSW50VHlwZSwgX193Pjo6X192YWx1ZSAtIDEpLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IHN1YnN0aXR1dGluZyBfX2Mgb3V0IG9mIGJvdW5kIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9fZCA8PSAoX19kZXRhaWw6Ol9TaGlmdDxfVUludFR5cGUsIF9fdz46Ol9fdmFsdWUgLSAxKSwKKwkJICAgICJ0ZW1wbGF0ZSBhcmd1bWVudCBzdWJzdGl0dXRpbmcgX19kIG91dCBvZiBib3VuZCIpOworICAgICAgc3RhdGljX2Fzc2VydChfX2YgPD0gKF9fZGV0YWlsOjpfU2hpZnQ8X1VJbnRUeXBlLCBfX3c+OjpfX3ZhbHVlIC0gMSksCisJCSAgICAidGVtcGxhdGUgYXJndW1lbnQgc3Vic3RpdHV0aW5nIF9fZiBvdXQgb2YgYm91bmQiKTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgZ2VuZXJhdGVkIHJhbmRvbSB2YWx1ZS4gKi8KKyAgICAgIHR5cGVkZWYgX1VJbnRUeXBlIHJlc3VsdF90eXBlOworCisgICAgICAvLyBwYXJhbWV0ZXIgdmFsdWVzCisgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90ICAgICAgd29yZF9zaXplICAgICAgICAgICAgICAgICA9IF9fdzsKKyAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgICAgICBzdGF0ZV9zaXplICAgICAgICAgICAgICAgID0gX19uOworICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCAgICAgIHNoaWZ0X3NpemUgICAgICAgICAgICAgICAgPSBfX207CisgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90ICAgICAgbWFza19iaXRzICAgICAgICAgICAgICAgICA9IF9fcjsKKyAgICAgIHN0YXRpYyBjb25zdCByZXN1bHRfdHlwZSB4b3JfbWFzayAgICAgICAgICAgICAgICAgID0gX19hOworICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCAgICAgIHRlbXBlcmluZ191ICAgICAgICAgICAgICAgPSBfX3U7CisgICAgICBzdGF0aWMgY29uc3QgcmVzdWx0X3R5cGUgdGVtcGVyaW5nX2QgICAgICAgICAgICAgICA9IF9fZDsKKyAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgICAgICB0ZW1wZXJpbmdfcyAgICAgICAgICAgICAgID0gX19zOworICAgICAgc3RhdGljIGNvbnN0IHJlc3VsdF90eXBlIHRlbXBlcmluZ19iICAgICAgICAgICAgICAgPSBfX2I7CisgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90ICAgICAgdGVtcGVyaW5nX3QgICAgICAgICAgICAgICA9IF9fdDsKKyAgICAgIHN0YXRpYyBjb25zdCByZXN1bHRfdHlwZSB0ZW1wZXJpbmdfYyAgICAgICAgICAgICAgID0gX19jOworICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCAgICAgIHRlbXBlcmluZ19sICAgICAgICAgICAgICAgPSBfX2w7CisgICAgICBzdGF0aWMgY29uc3QgcmVzdWx0X3R5cGUgaW5pdGlhbGl6YXRpb25fbXVsdGlwbGllciA9IF9fZjsKKyAgICAgIHN0YXRpYyBjb25zdCByZXN1bHRfdHlwZSBkZWZhdWx0X3NlZWQgPSA1NDg5dTsKKworICAgICAgLy8gY29uc3RydWN0b3JzIGFuZCBtZW1iZXIgZnVuY3Rpb24KKyAgICAgIGV4cGxpY2l0CisgICAgICBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZShyZXN1bHRfdHlwZSBfX3NkID0gZGVmYXVsdF9zZWVkKQorICAgICAgeyBzZWVkKF9fc2QpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnN0cnVjdHMgYSAlbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgICAqICAgICAgICBlbmdpbmUgc2VlZGVkIGZyb20gdGhlIHNlZWQgc2VxdWVuY2UgQHAgX19xLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX3EgdGhlIHNlZWQgc2VxdWVuY2UuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Tc2VxLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisgICAgICAgIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3NhbWU8X1NzZXEsIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPjo6dmFsdWU+CisJICAgICAgIDo6dHlwZT4KKyAgICAgICAgZXhwbGljaXQKKyAgICAgICAgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmUoX1NzZXEmIF9fcSkKKyAgICAgICAgeyBzZWVkKF9fcSk7IH0KKworICAgICAgdm9pZAorICAgICAgc2VlZChyZXN1bHRfdHlwZSBfX3NkID0gZGVmYXVsdF9zZWVkKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1NzZXE+CisJdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19jbGFzczxfU3NlcT46OnZhbHVlPjo6dHlwZQorICAgICAgICBzZWVkKF9Tc2VxJiBfX3EpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSB2YWx1ZSBpbiB0aGUgb3V0cHV0IHJhbmdlLgorICAgICAgICoKKyAgICAgICAqIEB0b2RvIFRoaXMgc2hvdWxkIGJlIGNvbnN0ZXhwci4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpIGNvbnN0CisgICAgICB7IHJldHVybiAwOyB9OworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIHRoZSBsYXJnZXN0IHBvc3NpYmxlIHZhbHVlIGluIHRoZSBvdXRwdXQgcmFuZ2UuCisgICAgICAgKgorICAgICAgICogQHRvZG8gVGhpcyBzaG91bGQgYmUgY29uc3RleHByLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fZGV0YWlsOjpfU2hpZnQ8X1VJbnRUeXBlLCBfX3c+OjpfX3ZhbHVlIC0gMTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBEaXNjYXJkIGEgc2VxdWVuY2Ugb2YgcmFuZG9tIG51bWJlcnMuCisgICAgICAgKgorICAgICAgICogQHRvZG8gTG9vayBmb3IgYSBmYXN0ZXIgd2F5IHRvIGRvIGRpc2NhcmQuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGRpc2NhcmQodW5zaWduZWQgbG9uZyBsb25nIF9feikKKyAgICAgIHsKKwlmb3IgKDsgX196ICE9IDBVTEw7IC0tX196KQorCSAgKCp0aGlzKSgpOworICAgICAgfQorCisgICAgICByZXN1bHRfdHlwZQorICAgICAgb3BlcmF0b3IoKSgpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb21wYXJlcyB0d28gJSBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgICAgICogICAgICAgIG9iamVjdHMgb2YgdGhlIHNhbWUgdHlwZSBmb3IgZXF1YWxpdHkuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fbGhzIEEgJSBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgICAgICogICAgICAgICAgICAgIG9iamVjdC4KKyAgICAgICAqIEBwYXJhbSBfX3JocyBBbm90aGVyICUgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmUgcmFuZG9tIG51bWJlcgorICAgICAgICogICAgICAgICAgICAgIGdlbmVyYXRvciBvYmplY3QuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgaW5maW5pdGUgc2VxdWVuY2VzIG9mIGdlbmVyYXRlZCB2YWx1ZXMKKyAgICAgICAqICAgICAgICAgIHdvdWxkIGJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuCisgICAgICAgKi8KKyAgICAgIGZyaWVuZCBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lJiBfX2xocywKKwkJIGNvbnN0IG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lJiBfX3JocykKKyAgICAgIHsgcmV0dXJuIHN0ZDo6ZXF1YWwoX19saHMuX01feCwgX19saHMuX01feCArIHN0YXRlX3NpemUsIF9fcmhzLl9NX3gpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEluc2VydHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSAlIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lCisgICAgICAgKiAgICAgICAgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtCisgICAgICAgKiAgICAgICAgQHAgX19vcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgICAgKiAgICAgICAgICAgICBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlMSwKKwkgICAgICAgc2l6ZV90IF9fdzEsIHNpemVfdCBfX24xLAorCSAgICAgICBzaXplX3QgX19tMSwgc2l6ZV90IF9fcjEsCisJICAgICAgIF9VSW50VHlwZTEgX19hMSwgc2l6ZV90IF9fdTEsCisJICAgICAgIF9VSW50VHlwZTEgX19kMSwgc2l6ZV90IF9fczEsCisJICAgICAgIF9VSW50VHlwZTEgX19iMSwgc2l6ZV90IF9fdDEsCisJICAgICAgIF9VSW50VHlwZTEgX19jMSwgc2l6ZV90IF9fbDEsIF9VSW50VHlwZTEgX19mMSwKKwkgICAgICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiwKKwkJICAgY29uc3Qgc3RkOjptZXJzZW5uZV90d2lzdGVyX2VuZ2luZTxfVUludFR5cGUxLCBfX3cxLCBfX24xLAorCQkgICBfX20xLCBfX3IxLCBfX2ExLCBfX3UxLCBfX2QxLCBfX3MxLCBfX2IxLCBfX3QxLCBfX2MxLAorCQkgICBfX2wxLCBfX2YxPiYpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBFeHRyYWN0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhICUgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmUKKyAgICAgICAqICAgICAgICByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUgQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbQorICAgICAgICogICAgICAgIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgICAgKiAgICAgICAgICAgICBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggZXh0cmFjdGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlMSwKKwkgICAgICAgc2l6ZV90IF9fdzEsIHNpemVfdCBfX24xLAorCSAgICAgICBzaXplX3QgX19tMSwgc2l6ZV90IF9fcjEsCisJICAgICAgIF9VSW50VHlwZTEgX19hMSwgc2l6ZV90IF9fdTEsCisJICAgICAgIF9VSW50VHlwZTEgX19kMSwgc2l6ZV90IF9fczEsCisJICAgICAgIF9VSW50VHlwZTEgX19iMSwgc2l6ZV90IF9fdDEsCisJICAgICAgIF9VSW50VHlwZTEgX19jMSwgc2l6ZV90IF9fbDEsIF9VSW50VHlwZTEgX19mMSwKKwkgICAgICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiwKKwkJICAgc3RkOjptZXJzZW5uZV90d2lzdGVyX2VuZ2luZTxfVUludFR5cGUxLCBfX3cxLCBfX24xLCBfX20xLAorCQkgICBfX3IxLCBfX2ExLCBfX3UxLCBfX2QxLCBfX3MxLCBfX2IxLCBfX3QxLCBfX2MxLAorCQkgICBfX2wxLCBfX2YxPiYpOworCisgICAgcHJpdmF0ZToKKyAgICAgIF9VSW50VHlwZSBfTV94W3N0YXRlX3NpemVdOworICAgICAgc2l6ZV90ICAgIF9NX3A7CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIENvbXBhcmVzIHR3byAlIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAqICAgICAgICBvYmplY3RzIG9mIHRoZSBzYW1lIHR5cGUgZm9yIGluZXF1YWxpdHkuCisgICAqCisgICAqIEBwYXJhbSBfX2xocyBBICUgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICogICAgICAgICAgICAgIG9iamVjdC4KKyAgICogQHBhcmFtIF9fcmhzIEFub3RoZXIgJSBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZSByYW5kb20gbnVtYmVyCisgICAqICAgICAgICAgICAgICBnZW5lcmF0b3Igb2JqZWN0LgorICAgKgorICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBpbmZpbml0ZSBzZXF1ZW5jZXMgb2YgZ2VuZXJhdGVkIHZhbHVlcworICAgKiAgICAgICAgICB3b3VsZCBiZSBkaWZmZXJlbnQsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwgc2l6ZV90IF9fdywKKwkgICBzaXplX3QgX19uLCBzaXplX3QgX19tLCBzaXplX3QgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIHNpemVfdCBfX3UsIF9VSW50VHlwZSBfX2QsIHNpemVfdCBfX3MsCisJICAgX1VJbnRUeXBlIF9fYiwgc2l6ZV90IF9fdCwKKwkgICBfVUludFR5cGUgX19jLCBzaXplX3QgX19sLCBfVUludFR5cGUgX19mPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBzdGQ6Om1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwKKwkgICAgICAgX19yLCBfX2EsIF9fdSwgX19kLCBfX3MsIF9fYiwgX190LCBfX2MsIF9fbCwgX19mPiYgX19saHMsCisJICAgICAgIGNvbnN0IHN0ZDo6bWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLAorCSAgICAgICBfX3IsIF9fYSwgX191LCBfX2QsIF9fcywgX19iLCBfX3QsIF9fYywgX19sLCBfX2Y+JiBfX3JocykKKyAgICB7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQorCisKKyAgLyoqCisgICAqIEBicmllZiBUaGUgTWFyc2FnbGlhLVphbWFuIGdlbmVyYXRvci4KKyAgICoKKyAgICogVGhpcyBpcyBhIG1vZGVsIG9mIGEgR2VuZXJhbGl6ZWQgRmlib25hY2NpIGRpc2NyZXRlIHJhbmRvbSBudW1iZXIKKyAgICogZ2VuZXJhdG9yLCBzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgdGhlIFNXQyBnZW5lcmF0b3IuCisgICAqCisgICAqIEEgZGlzY3JldGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgdGhhdCBwcm9kdWNlcyBwc2V1ZG9yYW5kb20KKyAgICogbnVtYmVycyB1c2luZzoKKyAgICogQGZbCisgICAqICAgICB4X3tpfVxsZWZ0YXJyb3coeF97aSAtIHN9IC0geF97aSAtIHJ9IC0gY2Fycnlfe2ktMX0pIFxibW9kIG0gCisgICAqIEBmXQorICAgKgorICAgKiBUaGUgc2l6ZSBvZiB0aGUgc3RhdGUgaXMgQGYkckBmJAorICAgKiBhbmQgdGhlIG1heGltdW0gcGVyaW9kIG9mIHRoZSBnZW5lcmF0b3IgaXMgQGYkKG1eciAtIG1ecyAtIDEpQGYkLgorICAgKgorICAgKiBAdmFyIF9NX3ggICAgIFRoZSBzdGF0ZSBvZiB0aGUgZ2VuZXJhdG9yLiAgVGhpcyBpcyBhIHJpbmcgYnVmZmVyLgorICAgKiBAdmFyIF9NX2NhcnJ5IFRoZSBjYXJyeS4KKyAgICogQHZhciBfTV9wICAgICBDdXJyZW50IGluZGV4IG9mIHgoaSAtIHIpLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLCBzaXplX3QgX193LCBzaXplX3QgX19zLCBzaXplX3QgX19yPgorICAgIGNsYXNzIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Vuc2lnbmVkPF9VSW50VHlwZT46OnZhbHVlLCAidGVtcGxhdGUgYXJndW1lbnQgIgorCQkgICAgInN1YnN0aXR1dGluZyBfVUludFR5cGUgbm90IGFuIHVuc2lnbmVkIGludGVncmFsIHR5cGUiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoMHUgPCBfX3MgJiYgX19zIDwgX19yLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IHN1YnN0aXR1dGluZyBfX3Mgb3V0IG9mIGJvdW5kcyIpOworICAgICAgc3RhdGljX2Fzc2VydCgwdSA8IF9fdyAmJiBfX3cgPD0gc3RkOjpudW1lcmljX2xpbWl0czxfVUludFR5cGU+OjpkaWdpdHMsCisJCSAgICAidGVtcGxhdGUgYXJndW1lbnQgc3Vic3RpdHV0aW5nIF9fdyBvdXQgb2YgYm91bmRzIik7CisKKyAgICBwdWJsaWM6CisgICAgICAvKiogVGhlIHR5cGUgb2YgdGhlIGdlbmVyYXRlZCByYW5kb20gdmFsdWUuICovCisgICAgICB0eXBlZGVmIF9VSW50VHlwZSByZXN1bHRfdHlwZTsKKworICAgICAgLy8gcGFyYW1ldGVyIHZhbHVlcworICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCAgICAgIHdvcmRfc2l6ZSAgICA9IF9fdzsKKyAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgICAgICBzaG9ydF9sYWcgICAgPSBfX3M7CisgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90ICAgICAgbG9uZ19sYWcgICAgID0gX19yOworICAgICAgc3RhdGljIGNvbnN0IHJlc3VsdF90eXBlIGRlZmF1bHRfc2VlZCA9IDE5NzgwNTAzdTsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29uc3RydWN0cyBhbiBleHBsaWNpdGx5IHNlZWRlZCAlIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lCisgICAgICAgKiAgICAgICAgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZShyZXN1bHRfdHlwZSBfX3NkID0gZGVmYXVsdF9zZWVkKQorICAgICAgeyBzZWVkKF9fc2QpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnN0cnVjdHMgYSAlc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmUgcmFuZG9tIG51bWJlciBlbmdpbmUKKyAgICAgICAqICAgICAgICBzZWVkZWQgZnJvbSB0aGUgc2VlZCBzZXF1ZW5jZSBAcCBfX3EuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fcSB0aGUgc2VlZCBzZXF1ZW5jZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1NzZXEsIHR5cGVuYW1lID0gdHlwZW5hbWUKKyAgICAgICAgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfc2FtZTxfU3NlcSwgc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmU+Ojp2YWx1ZT4KKwkgICAgICAgOjp0eXBlPgorICAgICAgICBleHBsaWNpdAorICAgICAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZShfU3NlcSYgX19xKQorICAgICAgICB7IHNlZWQoX19xKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBTZWVkcyB0aGUgaW5pdGlhbCBzdGF0ZSBAZiR4XzBAZiQgb2YgdGhlIHJhbmRvbSBudW1iZXIKKyAgICAgICAqICAgICAgICBnZW5lcmF0b3IuCisgICAgICAgKgorICAgICAgICogTjE2ODhbNC4xOV0gbW9kaWZpZXMgdGhpcyBhcyBmb2xsb3dzLiAgSWYgQHAgX192YWx1ZSA9PSAwLAorICAgICAgICogc2V0cyB2YWx1ZSB0byAxOTc4MDUwMy4gIEluIGFueSBjYXNlLCB3aXRoIGEgbGluZWFyCisgICAgICAgKiBjb25ncnVlbnRpYWwgZ2VuZXJhdG9yIGxjZyhpKSBoYXZpbmcgcGFyYW1ldGVycyBAZiQgbV97bGNnfSA9CisgICAgICAgKiAyMTQ3NDgzNTYzLCBhX3tsY2d9ID0gNDAwMTQsIGNfe2xjZ30gPSAwLCBhbmQgbGNnKDApID0gdmFsdWUKKyAgICAgICAqIEBmJCwgc2V0cyBAZiQgeF97LXJ9IFxkb3RzIHhfey0xfSBAZiQgdG8gQGYkIGxjZygxKSBcYm1vZCBtCisgICAgICAgKiBcZG90cyBsY2cocikgXGJtb2QgbSBAZiQgcmVzcGVjdGl2ZWx5LiAgSWYgQGYkIHhfey0xfSA9IDAgQGYkCisgICAgICAgKiBzZXQgY2FycnkgdG8gMSwgb3RoZXJ3aXNlIHNldHMgY2FycnkgdG8gMC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgc2VlZChyZXN1bHRfdHlwZSBfX3NkID0gZGVmYXVsdF9zZWVkKTsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgU2VlZHMgdGhlIGluaXRpYWwgc3RhdGUgQGYkeF8wQGYkIG9mIHRoZQorICAgICAgICogJSBzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1NzZXE+CisJdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19jbGFzczxfU3NlcT46OnZhbHVlPjo6dHlwZQorICAgICAgICBzZWVkKF9Tc2VxJiBfX3EpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIHRoZSBpbmNsdXNpdmUgbWluaW11bSB2YWx1ZSBvZiB0aGUgcmFuZ2Ugb2YgcmFuZG9tCisgICAgICAgKiBpbnRlZ2VycyByZXR1cm5lZCBieSB0aGlzIGdlbmVyYXRvci4KKyAgICAgICAqCisgICAgICAgKiBAdG9kbyBUaGlzIHNob3VsZCBiZSBjb25zdGV4cHIuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gMDsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIHRoZSBpbmNsdXNpdmUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgcmFuZ2Ugb2YgcmFuZG9tCisgICAgICAgKiBpbnRlZ2VycyByZXR1cm5lZCBieSB0aGlzIGdlbmVyYXRvci4KKyAgICAgICAqCisgICAgICAgKiBAdG9kbyBUaGlzIHNob3VsZCBiZSBjb25zdGV4cHIuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gX19kZXRhaWw6Ol9TaGlmdDxfVUludFR5cGUsIF9fdz46Ol9fdmFsdWUgLSAxOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIERpc2NhcmQgYSBzZXF1ZW5jZSBvZiByYW5kb20gbnVtYmVycy4KKyAgICAgICAqCisgICAgICAgKiBAdG9kbyBMb29rIGZvciBhIGZhc3RlciB3YXkgdG8gZG8gZGlzY2FyZC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgZGlzY2FyZCh1bnNpZ25lZCBsb25nIGxvbmcgX196KQorICAgICAgeworCWZvciAoOyBfX3ogIT0gMFVMTDsgLS1fX3opCisJICAoKnRoaXMpKCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdldHMgdGhlIG5leHQgcmFuZG9tIG51bWJlciBpbiB0aGUgc2VxdWVuY2UuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBvcGVyYXRvcigpKCk7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbXBhcmVzIHR3byAlIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lIHJhbmRvbSBudW1iZXIKKyAgICAgICAqICAgICAgICBnZW5lcmF0b3Igb2JqZWN0cyBvZiB0aGUgc2FtZSB0eXBlIGZvciBlcXVhbGl0eS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19saHMgQSAlIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgICAgKiAgICAgICAgICAgICAgb2JqZWN0LgorICAgICAgICogQHBhcmFtIF9fcmhzIEFub3RoZXIgJSBzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZSByYW5kb20gbnVtYmVyCisgICAgICAgKiAgICAgICAgICAgICAgZ2VuZXJhdG9yIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBpbmZpbml0ZSBzZXF1ZW5jZXMgb2YgZ2VuZXJhdGVkIHZhbHVlcworICAgICAgICogICAgICAgICAgd291bGQgYmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICovCisgICAgICBmcmllbmQgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZSYgX19saHMsCisJCSBjb25zdCBzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZSYgX19yaHMpCisgICAgICB7IHJldHVybiBzdGQ6OmVxdWFsKF9fbGhzLl9NX3gsIF9fbGhzLl9NX3ggKyBsb25nX2xhZywgX19yaHMuX01feCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgSW5zZXJ0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhICUgc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmUKKyAgICAgICAqICAgICAgICByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUgQHAgX194IGludG8gdGhlIG91dHB1dCBzdHJlYW0KKyAgICAgICAqICAgICAgICBAcCBfX29zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICUgc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgICAqICAgICAgICAgICAgIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgb3V0cHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggaW5zZXJ0ZWQgb3IgaW4KKyAgICAgICAqIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUxLCBzaXplX3QgX193MSwgc2l6ZV90IF9fczEsIHNpemVfdCBfX3IxLAorCSAgICAgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisJZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorCW9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mLAorCQkgICBjb25zdCBzdGQ6OnN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lPF9VSW50VHlwZTEsIF9fdzEsCisJCSAgIF9fczEsIF9fcjE+Jik7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEV4dHJhY3RzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgJSBzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZQorICAgICAgICogICAgICAgIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZSBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtCisgICAgICAgKiAgICAgICAgQHAgX19pcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICUgc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgICAqICAgICAgICAgICAgIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4KKyAgICAgICAqIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUxLCBzaXplX3QgX193MSwgc2l6ZV90IF9fczEsIHNpemVfdCBfX3IxLAorCSAgICAgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisJZnJpZW5kIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorCW9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mLAorCQkgICBzdGQ6OnN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lPF9VSW50VHlwZTEsIF9fdzEsCisJCSAgIF9fczEsIF9fcjE+Jik7CisKKyAgICBwcml2YXRlOgorICAgICAgX1VJbnRUeXBlICBfTV94W2xvbmdfbGFnXTsKKyAgICAgIF9VSW50VHlwZSAgX01fY2Fycnk7CisgICAgICBzaXplX3QgICAgIF9NX3A7CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIENvbXBhcmVzIHR3byAlIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lIHJhbmRvbSBudW1iZXIKKyAgICogICAgICAgIGdlbmVyYXRvciBvYmplY3RzIG9mIHRoZSBzYW1lIHR5cGUgZm9yIGluZXF1YWxpdHkuCisgICAqCisgICAqIEBwYXJhbSBfX2xocyBBICUgc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICogICAgICAgICAgICAgIG9iamVjdC4KKyAgICogQHBhcmFtIF9fcmhzIEFub3RoZXIgJSBzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZSByYW5kb20gbnVtYmVyCisgICAqICAgICAgICAgICAgICBnZW5lcmF0b3Igb2JqZWN0LgorICAgKgorICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBpbmZpbml0ZSBzZXF1ZW5jZXMgb2YgZ2VuZXJhdGVkIHZhbHVlcworICAgKiAgICAgICAgICB3b3VsZCBiZSBkaWZmZXJlbnQsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwgc2l6ZV90IF9fdywgc2l6ZV90IF9fcywgc2l6ZV90IF9fcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc3RkOjpzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZTxfVUludFR5cGUsIF9fdywKKwkgICAgICAgX19zLCBfX3I+JiBfX2xocywKKwkgICAgICAgY29uc3Qgc3RkOjpzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZTxfVUludFR5cGUsIF9fdywKKwkgICAgICAgX19zLCBfX3I+JiBfX3JocykKKyAgICB7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQorCisKKyAgLyoqCisgICAqIFByb2R1Y2VzIHJhbmRvbSBudW1iZXJzIGZyb20gc29tZSBiYXNlIGVuZ2luZSBieSBkaXNjYXJkaW5nIGJsb2NrcyBvZgorICAgKiBkYXRhLgorICAgKgorICAgKiAwIDw9IEBwIF9fciA8PSBAcCBfX3AKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21OdW1iZXJFbmdpbmUsIHNpemVfdCBfX3AsIHNpemVfdCBfX3I+CisgICAgY2xhc3MgZGlzY2FyZF9ibG9ja19lbmdpbmUKKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KDEgPD0gX19yICYmIF9fciA8PSBfX3AsCisJCSAgICAidGVtcGxhdGUgYXJndW1lbnQgc3Vic3RpdHV0aW5nIF9fciBvdXQgb2YgYm91bmRzIik7CisKKyAgICBwdWJsaWM6CisgICAgICAvKiogVGhlIHR5cGUgb2YgdGhlIGdlbmVyYXRlZCByYW5kb20gdmFsdWUuICovCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9SYW5kb21OdW1iZXJFbmdpbmU6OnJlc3VsdF90eXBlIHJlc3VsdF90eXBlOworCisgICAgICAvLyBwYXJhbWV0ZXIgdmFsdWVzCisgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGJsb2NrX3NpemUgPSBfX3A7CisgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHVzZWRfYmxvY2sgPSBfX3I7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnN0cnVjdHMgYSBkZWZhdWx0ICVkaXNjYXJkX2Jsb2NrX2VuZ2luZSBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogVGhlIHVuZGVybHlpbmcgZW5naW5lIGlzIGRlZmF1bHQgY29uc3RydWN0ZWQgYXMgd2VsbC4KKyAgICAgICAqLworICAgICAgZGlzY2FyZF9ibG9ja19lbmdpbmUoKQorICAgICAgOiBfTV9iKCksIF9NX24oMCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvcHkgY29uc3RydWN0cyBhICVkaXNjYXJkX2Jsb2NrX2VuZ2luZSBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQ29waWVzIGFuIGV4aXN0aW5nIGJhc2UgY2xhc3MgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgICAgICAgKiBAcGFyYW0gcm5nIEFuIGV4aXN0aW5nIChiYXNlIGNsYXNzKSBlbmdpbmUgb2JqZWN0LgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgZGlzY2FyZF9ibG9ja19lbmdpbmUoY29uc3QgX1JhbmRvbU51bWJlckVuZ2luZSYgX19ybmUpCisgICAgICA6IF9NX2IoX19ybmUpLCBfTV9uKDApIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBNb3ZlIGNvbnN0cnVjdHMgYSAlZGlzY2FyZF9ibG9ja19lbmdpbmUgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIENvcGllcyBhbiBleGlzdGluZyBiYXNlIGNsYXNzIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICAgICAgICogQHBhcmFtIHJuZyBBbiBleGlzdGluZyAoYmFzZSBjbGFzcykgZW5naW5lIG9iamVjdC4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGRpc2NhcmRfYmxvY2tfZW5naW5lKF9SYW5kb21OdW1iZXJFbmdpbmUmJiBfX3JuZSkKKyAgICAgIDogX01fYihzdGQ6Om1vdmUoX19ybmUpKSwgX01fbigwKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgU2VlZCBjb25zdHJ1Y3RzIGEgJWRpc2NhcmRfYmxvY2tfZW5naW5lIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBDb25zdHJ1Y3RzIHRoZSB1bmRlcmx5aW5nIGdlbmVyYXRvciBlbmdpbmUgc2VlZGVkIHdpdGggQHAgX19zLgorICAgICAgICogQHBhcmFtIF9fcyBBIHNlZWQgdmFsdWUgZm9yIHRoZSBiYXNlIGNsYXNzIGVuZ2luZS4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGRpc2NhcmRfYmxvY2tfZW5naW5lKHJlc3VsdF90eXBlIF9fcykKKyAgICAgIDogX01fYihfX3MpLCBfTV9uKDApIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZW5lcmF0b3IgY29uc3RydWN0IGEgJWRpc2NhcmRfYmxvY2tfZW5naW5lIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19xIEEgc2VlZCBzZXF1ZW5jZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1NzZXEsIHR5cGVuYW1lID0gdHlwZW5hbWUKKwlzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19zYW1lPF9Tc2VxLCBkaXNjYXJkX2Jsb2NrX2VuZ2luZT46OnZhbHVlCisJCSAgICAgICAmJiAhc3RkOjppc19zYW1lPF9Tc2VxLCBfUmFuZG9tTnVtYmVyRW5naW5lPjo6dmFsdWU+CisJICAgICAgIDo6dHlwZT4KKyAgICAgICAgZXhwbGljaXQKKyAgICAgICAgZGlzY2FyZF9ibG9ja19lbmdpbmUoX1NzZXEmIF9fcSkKKwk6IF9NX2IoX19xKSwgX01fbigwKQorICAgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmVzZWVkcyB0aGUgJWRpc2NhcmRfYmxvY2tfZW5naW5lIG9iamVjdCB3aXRoIHRoZSBkZWZhdWx0CisgICAgICAgKiAgICAgICAgc2VlZCBmb3IgdGhlIHVuZGVybHlpbmcgYmFzZSBjbGFzcyBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBzZWVkKCkKKyAgICAgIHsKKwlfTV9iLnNlZWQoKTsKKwlfTV9uID0gMDsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmVzZWVkcyB0aGUgJWRpc2NhcmRfYmxvY2tfZW5naW5lIG9iamVjdCB3aXRoIHRoZSBkZWZhdWx0CisgICAgICAgKiAgICAgICAgc2VlZCBmb3IgdGhlIHVuZGVybHlpbmcgYmFzZSBjbGFzcyBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBzZWVkKHJlc3VsdF90eXBlIF9fcykKKyAgICAgIHsKKwlfTV9iLnNlZWQoX19zKTsKKwlfTV9uID0gMDsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmVzZWVkcyB0aGUgJWRpc2NhcmRfYmxvY2tfZW5naW5lIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBzZWVkCisgICAgICAgKiAgICAgICAgc2VxdWVuY2UuCisgICAgICAgKiBAcGFyYW0gX19xIEEgc2VlZCBnZW5lcmF0b3IgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Tc2VxPgorICAgICAgICB2b2lkCisgICAgICAgIHNlZWQoX1NzZXEmIF9fcSkKKyAgICAgICAgeworCSAgX01fYi5zZWVkKF9fcSk7CisJICBfTV9uID0gMDsKKwl9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdldHMgYSBjb25zdCByZWZlcmVuY2UgdG8gdGhlIHVuZGVybHlpbmcgZ2VuZXJhdG9yIGVuZ2luZQorICAgICAgICogICAgICAgIG9iamVjdC4KKyAgICAgICAqLworICAgICAgY29uc3QgX1JhbmRvbU51bWJlckVuZ2luZSYKKyAgICAgIGJhc2UoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fYjsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIHRoZSBtaW5pbXVtIHZhbHVlIGluIHRoZSBnZW5lcmF0ZWQgcmFuZG9tIG51bWJlciByYW5nZS4KKyAgICAgICAqCisgICAgICAgKiBAdG9kbyBUaGlzIHNob3VsZCBiZSBjb25zdGV4cHIuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fYi5taW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIHRoZSBtYXhpbXVtIHZhbHVlIGluIHRoZSBnZW5lcmF0ZWQgcmFuZG9tIG51bWJlciByYW5nZS4KKyAgICAgICAqCisgICAgICAgKiBAdG9kbyBUaGlzIHNob3VsZCBiZSBjb25zdGV4cHIuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fYi5tYXgoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBEaXNjYXJkIGEgc2VxdWVuY2Ugb2YgcmFuZG9tIG51bWJlcnMuCisgICAgICAgKgorICAgICAgICogQHRvZG8gTG9vayBmb3IgYSBmYXN0ZXIgd2F5IHRvIGRvIGRpc2NhcmQuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGRpc2NhcmQodW5zaWduZWQgbG9uZyBsb25nIF9feikKKyAgICAgIHsKKwlmb3IgKDsgX196ICE9IDBVTEw7IC0tX196KQorCSAgKCp0aGlzKSgpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIHRoZSBuZXh0IHZhbHVlIGluIHRoZSBnZW5lcmF0ZWQgcmFuZG9tIG51bWJlciBzZXF1ZW5jZS4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG9wZXJhdG9yKCkoKTsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29tcGFyZXMgdHdvICVkaXNjYXJkX2Jsb2NrX2VuZ2luZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgICAgICogICAgICAgIG9iamVjdHMgb2YgdGhlIHNhbWUgdHlwZSBmb3IgZXF1YWxpdHkuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fbGhzIEEgJWRpc2NhcmRfYmxvY2tfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9iamVjdC4KKyAgICAgICAqIEBwYXJhbSBfX3JocyBBbm90aGVyICVkaXNjYXJkX2Jsb2NrX2VuZ2luZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgICAgICogICAgICAgICAgICAgIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBpbmZpbml0ZSBzZXF1ZW5jZXMgb2YgZ2VuZXJhdGVkIHZhbHVlcworICAgICAgICogICAgICAgICAgd291bGQgYmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgZGlzY2FyZF9ibG9ja19lbmdpbmUmIF9fbGhzLAorCQkgY29uc3QgZGlzY2FyZF9ibG9ja19lbmdpbmUmIF9fcmhzKQorICAgICAgeyByZXR1cm4gX19saHMuX01fYiA9PSBfX3Jocy5fTV9iICYmIF9fbGhzLl9NX24gPT0gX19yaHMuX01fbjsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBJbnNlcnRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgJWRpc2NhcmRfYmxvY2tfZW5naW5lIHJhbmRvbQorICAgICAgICogICAgICAgIG51bWJlciBnZW5lcmF0b3IgZW5naW5lIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtCisgICAgICAgKiAgICAgICAgQHAgX19vcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlZGlzY2FyZF9ibG9ja19lbmdpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21OdW1iZXJFbmdpbmUxLCBzaXplX3QgX19wMSwgc2l6ZV90IF9fcjEsCisJICAgICAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYsCisJCSAgIGNvbnN0IHN0ZDo6ZGlzY2FyZF9ibG9ja19lbmdpbmU8X1JhbmRvbU51bWJlckVuZ2luZTEsCisJCSAgIF9fcDEsIF9fcjE+Jik7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEV4dHJhY3RzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgJSBzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZQorICAgICAgICogICAgICAgIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZSBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtCisgICAgICAgKiAgICAgICAgQHAgX19pcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVkaXNjYXJkX2Jsb2NrX2VuZ2luZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggZXh0cmFjdGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbU51bWJlckVuZ2luZTEsIHNpemVfdCBfX3AxLCBzaXplX3QgX19yMSwKKwkgICAgICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiwKKwkJICAgc3RkOjpkaXNjYXJkX2Jsb2NrX2VuZ2luZTxfUmFuZG9tTnVtYmVyRW5naW5lMSwKKwkJICAgX19wMSwgX19yMT4mKTsKKworICAgIHByaXZhdGU6CisgICAgICBfUmFuZG9tTnVtYmVyRW5naW5lIF9NX2I7CisgICAgICBzaXplX3QgX01fbjsKKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgQ29tcGFyZXMgdHdvICVkaXNjYXJkX2Jsb2NrX2VuZ2luZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgKiAgICAgICAgb2JqZWN0cyBvZiB0aGUgc2FtZSB0eXBlIGZvciBpbmVxdWFsaXR5LgorICAgKgorICAgKiBAcGFyYW0gX19saHMgQSAlZGlzY2FyZF9ibG9ja19lbmdpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb2JqZWN0LgorICAgKiBAcGFyYW0gX19yaHMgQW5vdGhlciAlZGlzY2FyZF9ibG9ja19lbmdpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICogICAgICAgICAgICAgIG9iamVjdC4KKyAgICoKKyAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgaW5maW5pdGUgc2VxdWVuY2VzIG9mIGdlbmVyYXRlZCB2YWx1ZXMKKyAgICogICAgICAgICAgd291bGQgYmUgZGlmZmVyZW50LCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tTnVtYmVyRW5naW5lLCBzaXplX3QgX19wLCBzaXplX3QgX19yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBzdGQ6OmRpc2NhcmRfYmxvY2tfZW5naW5lPF9SYW5kb21OdW1iZXJFbmdpbmUsIF9fcCwKKwkgICAgICAgX19yPiYgX19saHMsCisJICAgICAgIGNvbnN0IHN0ZDo6ZGlzY2FyZF9ibG9ja19lbmdpbmU8X1JhbmRvbU51bWJlckVuZ2luZSwgX19wLAorCSAgICAgICBfX3I+JiBfX3JocykKKyAgICB7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQorCisKKyAgLyoqCisgICAqIFByb2R1Y2VzIHJhbmRvbSBudW1iZXJzIGJ5IGNvbWJpbmluZyByYW5kb20gbnVtYmVycyBmcm9tIHNvbWUgYmFzZQorICAgKiBlbmdpbmUgdG8gcHJvZHVjZSByYW5kb20gbnVtYmVycyB3aXRoIGEgc3BlY2lmaWVzIG51bWJlciBvZiBiaXRzIEBwIF9fdy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21OdW1iZXJFbmdpbmUsIHNpemVfdCBfX3csIHR5cGVuYW1lIF9VSW50VHlwZT4KKyAgICBjbGFzcyBpbmRlcGVuZGVudF9iaXRzX2VuZ2luZQorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc191bnNpZ25lZDxfVUludFR5cGU+Ojp2YWx1ZSwgInRlbXBsYXRlIGFyZ3VtZW50ICIKKwkJICAgICJzdWJzdGl0dXRpbmcgX1VJbnRUeXBlIG5vdCBhbiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KDB1IDwgX193ICYmIF9fdyA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPF9VSW50VHlwZT46OmRpZ2l0cywKKwkJICAgICJ0ZW1wbGF0ZSBhcmd1bWVudCBzdWJzdGl0dXRpbmcgX193IG91dCBvZiBib3VuZHMiKTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgZ2VuZXJhdGVkIHJhbmRvbSB2YWx1ZS4gKi8KKyAgICAgIHR5cGVkZWYgX1VJbnRUeXBlIHJlc3VsdF90eXBlOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb25zdHJ1Y3RzIGEgZGVmYXVsdCAlaW5kZXBlbmRlbnRfYml0c19lbmdpbmUgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIFRoZSB1bmRlcmx5aW5nIGVuZ2luZSBpcyBkZWZhdWx0IGNvbnN0cnVjdGVkIGFzIHdlbGwuCisgICAgICAgKi8KKyAgICAgIGluZGVwZW5kZW50X2JpdHNfZW5naW5lKCkKKyAgICAgIDogX01fYigpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb3B5IGNvbnN0cnVjdHMgYSAlaW5kZXBlbmRlbnRfYml0c19lbmdpbmUgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIENvcGllcyBhbiBleGlzdGluZyBiYXNlIGNsYXNzIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICAgICAgICogQHBhcmFtIHJuZyBBbiBleGlzdGluZyAoYmFzZSBjbGFzcykgZW5naW5lIG9iamVjdC4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGluZGVwZW5kZW50X2JpdHNfZW5naW5lKGNvbnN0IF9SYW5kb21OdW1iZXJFbmdpbmUmIF9fcm5lKQorICAgICAgOiBfTV9iKF9fcm5lKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgTW92ZSBjb25zdHJ1Y3RzIGEgJWluZGVwZW5kZW50X2JpdHNfZW5naW5lIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBDb3BpZXMgYW4gZXhpc3RpbmcgYmFzZSBjbGFzcyByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAgICAgICAqIEBwYXJhbSBybmcgQW4gZXhpc3RpbmcgKGJhc2UgY2xhc3MpIGVuZ2luZSBvYmplY3QuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBpbmRlcGVuZGVudF9iaXRzX2VuZ2luZShfUmFuZG9tTnVtYmVyRW5naW5lJiYgX19ybmUpCisgICAgICA6IF9NX2Ioc3RkOjptb3ZlKF9fcm5lKSkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFNlZWQgY29uc3RydWN0cyBhICVpbmRlcGVuZGVudF9iaXRzX2VuZ2luZSBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQ29uc3RydWN0cyB0aGUgdW5kZXJseWluZyBnZW5lcmF0b3IgZW5naW5lIHNlZWRlZCB3aXRoIEBwIF9fcy4KKyAgICAgICAqIEBwYXJhbSBfX3MgQSBzZWVkIHZhbHVlIGZvciB0aGUgYmFzZSBjbGFzcyBlbmdpbmUuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBpbmRlcGVuZGVudF9iaXRzX2VuZ2luZShyZXN1bHRfdHlwZSBfX3MpCisgICAgICA6IF9NX2IoX19zKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2VuZXJhdG9yIGNvbnN0cnVjdCBhICVpbmRlcGVuZGVudF9iaXRzX2VuZ2luZSBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fcSBBIHNlZWQgc2VxdWVuY2UuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Tc2VxLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfc2FtZTxfU3NlcSwgaW5kZXBlbmRlbnRfYml0c19lbmdpbmU+Ojp2YWx1ZQorCQkgICAgICAgJiYgIXN0ZDo6aXNfc2FtZTxfU3NlcSwgX1JhbmRvbU51bWJlckVuZ2luZT46OnZhbHVlPgorICAgICAgICAgICAgICAgOjp0eXBlPgorICAgICAgICBleHBsaWNpdAorICAgICAgICBpbmRlcGVuZGVudF9iaXRzX2VuZ2luZShfU3NlcSYgX19xKQorICAgICAgICA6IF9NX2IoX19xKQorICAgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmVzZWVkcyB0aGUgJWluZGVwZW5kZW50X2JpdHNfZW5naW5lIG9iamVjdCB3aXRoIHRoZSBkZWZhdWx0CisgICAgICAgKiAgICAgICAgc2VlZCBmb3IgdGhlIHVuZGVybHlpbmcgYmFzZSBjbGFzcyBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBzZWVkKCkKKyAgICAgIHsgX01fYi5zZWVkKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmVzZWVkcyB0aGUgJWluZGVwZW5kZW50X2JpdHNfZW5naW5lIG9iamVjdCB3aXRoIHRoZSBkZWZhdWx0CisgICAgICAgKiAgICAgICAgc2VlZCBmb3IgdGhlIHVuZGVybHlpbmcgYmFzZSBjbGFzcyBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBzZWVkKHJlc3VsdF90eXBlIF9fcykKKyAgICAgIHsgX01fYi5zZWVkKF9fcyk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmVzZWVkcyB0aGUgJWluZGVwZW5kZW50X2JpdHNfZW5naW5lIG9iamVjdCB3aXRoIHRoZSBnaXZlbgorICAgICAgICogICAgICAgIHNlZWQgc2VxdWVuY2UuCisgICAgICAgKiBAcGFyYW0gX19xIEEgc2VlZCBnZW5lcmF0b3IgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Tc2VxPgorICAgICAgICB2b2lkCisgICAgICAgIHNlZWQoX1NzZXEmIF9fcSkKKyAgICAgICAgeyBfTV9iLnNlZWQoX19xKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIGEgY29uc3QgcmVmZXJlbmNlIHRvIHRoZSB1bmRlcmx5aW5nIGdlbmVyYXRvciBlbmdpbmUKKyAgICAgICAqICAgICAgICBvYmplY3QuCisgICAgICAgKi8KKyAgICAgIGNvbnN0IF9SYW5kb21OdW1iZXJFbmdpbmUmCisgICAgICBiYXNlKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2I7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyB0aGUgbWluaW11bSB2YWx1ZSBpbiB0aGUgZ2VuZXJhdGVkIHJhbmRvbSBudW1iZXIgcmFuZ2UuCisgICAgICAgKgorICAgICAgICogQHRvZG8gVGhpcyBzaG91bGQgYmUgY29uc3RleHByLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWluKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIDBVOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdldHMgdGhlIG1heGltdW0gdmFsdWUgaW4gdGhlIGdlbmVyYXRlZCByYW5kb20gbnVtYmVyIHJhbmdlLgorICAgICAgICoKKyAgICAgICAqIEB0b2RvIFRoaXMgc2hvdWxkIGJlIGNvbnN0ZXhwci4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1heCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfX2RldGFpbDo6X1NoaWZ0PF9VSW50VHlwZSwgX193Pjo6X192YWx1ZSAtIDE7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgRGlzY2FyZCBhIHNlcXVlbmNlIG9mIHJhbmRvbSBudW1iZXJzLgorICAgICAgICoKKyAgICAgICAqIEB0b2RvIExvb2sgZm9yIGEgZmFzdGVyIHdheSB0byBkbyBkaXNjYXJkLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBkaXNjYXJkKHVuc2lnbmVkIGxvbmcgbG9uZyBfX3opCisgICAgICB7CisJZm9yICg7IF9feiAhPSAwVUxMOyAtLV9feikKKwkgICgqdGhpcykoKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyB0aGUgbmV4dCB2YWx1ZSBpbiB0aGUgZ2VuZXJhdGVkIHJhbmRvbSBudW1iZXIgc2VxdWVuY2UuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBvcGVyYXRvcigpKCk7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbXBhcmVzIHR3byAlaW5kZXBlbmRlbnRfYml0c19lbmdpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgICAqIG9iamVjdHMgb2YgdGhlIHNhbWUgdHlwZSBmb3IgZXF1YWxpdHkuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fbGhzIEEgJWluZGVwZW5kZW50X2JpdHNfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgICAgKiAgICAgICAgICAgICAgb2JqZWN0LgorICAgICAgICogQHBhcmFtIF9fcmhzIEFub3RoZXIgJWluZGVwZW5kZW50X2JpdHNfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgICAgKiAgICAgICAgICAgICAgb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGluZmluaXRlIHNlcXVlbmNlcyBvZiBnZW5lcmF0ZWQgdmFsdWVzCisgICAgICAgKiAgICAgICAgICB3b3VsZCBiZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgICovCisgICAgICBmcmllbmQgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBpbmRlcGVuZGVudF9iaXRzX2VuZ2luZSYgX19saHMsCisJCSBjb25zdCBpbmRlcGVuZGVudF9iaXRzX2VuZ2luZSYgX19yaHMpCisgICAgICB7IHJldHVybiBfX2xocy5fTV9iID09IF9fcmhzLl9NX2I7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgRXh0cmFjdHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSAlIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lCisgICAgICAgKiAgICAgICAgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0KKyAgICAgICAqICAgICAgICBAcCBfX2lzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2lzIEFuIGlucHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJWluZGVwZW5kZW50X2JpdHNfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgICAgKiAgICAgICAgICAgICBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggZXh0cmFjdGVkIG9yIGluCisgICAgICAgKiAgICAgICAgICBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCQkgICBzdGQ6OmluZGVwZW5kZW50X2JpdHNfZW5naW5lPF9SYW5kb21OdW1iZXJFbmdpbmUsCisJCSAgIF9fdywgX1VJbnRUeXBlPiYgX194KQorCXsKKwkgIF9faXMgPj4gX194Ll9NX2I7CisJICByZXR1cm4gX19pczsKKwl9CisKKyAgICBwcml2YXRlOgorICAgICAgX1JhbmRvbU51bWJlckVuZ2luZSBfTV9iOworICAgIH07CisKKyAgLyoqCisgICAqIEBicmllZiBDb21wYXJlcyB0d28gJWluZGVwZW5kZW50X2JpdHNfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAqIG9iamVjdHMgb2YgdGhlIHNhbWUgdHlwZSBmb3IgaW5lcXVhbGl0eS4KKyAgICoKKyAgICogQHBhcmFtIF9fbGhzIEEgJWluZGVwZW5kZW50X2JpdHNfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAqICAgICAgICAgICAgICBvYmplY3QuCisgICAqIEBwYXJhbSBfX3JocyBBbm90aGVyICVpbmRlcGVuZGVudF9iaXRzX2VuZ2luZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgKiAgICAgICAgICAgICAgb2JqZWN0LgorICAgKgorICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBpbmZpbml0ZSBzZXF1ZW5jZXMgb2YgZ2VuZXJhdGVkIHZhbHVlcworICAgKiAgICAgICAgICB3b3VsZCBiZSBkaWZmZXJlbnQsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21OdW1iZXJFbmdpbmUsIHNpemVfdCBfX3csIHR5cGVuYW1lIF9VSW50VHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc3RkOjppbmRlcGVuZGVudF9iaXRzX2VuZ2luZTxfUmFuZG9tTnVtYmVyRW5naW5lLCBfX3csCisJICAgICAgIF9VSW50VHlwZT4mIF9fbGhzLAorCSAgICAgICBjb25zdCBzdGQ6OmluZGVwZW5kZW50X2JpdHNfZW5naW5lPF9SYW5kb21OdW1iZXJFbmdpbmUsIF9fdywKKwkgICAgICAgX1VJbnRUeXBlPiYgX19yaHMpCisgICAgeyByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7IH0KKworICAvKioKKyAgICogQGJyaWVmIEluc2VydHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSAlaW5kZXBlbmRlbnRfYml0c19lbmdpbmUgcmFuZG9tCisgICAqICAgICAgICBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZSBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgKgorICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgKiBAcGFyYW0gX194ICBBICVpbmRlcGVuZGVudF9iaXRzX2VuZ2luZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUuCisgICAqCisgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgKiAgICAgICAgICBhbiBlcnJvciBzdGF0ZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21OdW1iZXJFbmdpbmUsIHNpemVfdCBfX3csIHR5cGVuYW1lIF9VSW50VHlwZSwKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3Qgc3RkOjppbmRlcGVuZGVudF9iaXRzX2VuZ2luZTxfUmFuZG9tTnVtYmVyRW5naW5lLAorCSAgICAgICBfX3csIF9VSW50VHlwZT4mIF9feCkKKyAgICB7CisgICAgICBfX29zIDw8IF9feC5iYXNlKCk7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2R1Y2VzIHJhbmRvbSBudW1iZXJzIGJ5IGNvbWJpbmluZyByYW5kb20gbnVtYmVycyBmcm9tIHNvbWUKKyAgICogYmFzZSBlbmdpbmUgdG8gcHJvZHVjZSByYW5kb20gbnVtYmVycyB3aXRoIGEgc3BlY2lmaWVzIG51bWJlciBvZiBiaXRzCisgICAqIEBwIF9fdy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21OdW1iZXJFbmdpbmUsIHNpemVfdCBfX2s+CisgICAgY2xhc3Mgc2h1ZmZsZV9vcmRlcl9lbmdpbmUKKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KDF1IDw9IF9faywgInRlbXBsYXRlIGFyZ3VtZW50IHN1YnN0aXR1dGluZyAiCisJCSAgICAiX19rIG91dCBvZiBib3VuZCIpOworCisgICAgcHVibGljOgorICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSBnZW5lcmF0ZWQgcmFuZG9tIHZhbHVlLiAqLworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmFuZG9tTnVtYmVyRW5naW5lOjpyZXN1bHRfdHlwZSByZXN1bHRfdHlwZTsKKworICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCB0YWJsZV9zaXplID0gX19rOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb25zdHJ1Y3RzIGEgZGVmYXVsdCAlc2h1ZmZsZV9vcmRlcl9lbmdpbmUgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIFRoZSB1bmRlcmx5aW5nIGVuZ2luZSBpcyBkZWZhdWx0IGNvbnN0cnVjdGVkIGFzIHdlbGwuCisgICAgICAgKi8KKyAgICAgIHNodWZmbGVfb3JkZXJfZW5naW5lKCkKKyAgICAgIDogX01fYigpCisgICAgICB7IF9NX2luaXRpYWxpemUoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb3B5IGNvbnN0cnVjdHMgYSAlc2h1ZmZsZV9vcmRlcl9lbmdpbmUgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIENvcGllcyBhbiBleGlzdGluZyBiYXNlIGNsYXNzIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICAgICAgICogQHBhcmFtIHJuZyBBbiBleGlzdGluZyAoYmFzZSBjbGFzcykgZW5naW5lIG9iamVjdC4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIHNodWZmbGVfb3JkZXJfZW5naW5lKGNvbnN0IF9SYW5kb21OdW1iZXJFbmdpbmUmIF9fcm5lKQorICAgICAgOiBfTV9iKF9fcm5lKQorICAgICAgeyBfTV9pbml0aWFsaXplKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgTW92ZSBjb25zdHJ1Y3RzIGEgJXNodWZmbGVfb3JkZXJfZW5naW5lIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBDb3BpZXMgYW4gZXhpc3RpbmcgYmFzZSBjbGFzcyByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAgICAgICAqIEBwYXJhbSBybmcgQW4gZXhpc3RpbmcgKGJhc2UgY2xhc3MpIGVuZ2luZSBvYmplY3QuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBzaHVmZmxlX29yZGVyX2VuZ2luZShfUmFuZG9tTnVtYmVyRW5naW5lJiYgX19ybmUpCisgICAgICA6IF9NX2Ioc3RkOjptb3ZlKF9fcm5lKSkKKyAgICAgIHsgX01faW5pdGlhbGl6ZSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFNlZWQgY29uc3RydWN0cyBhICVzaHVmZmxlX29yZGVyX2VuZ2luZSBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQ29uc3RydWN0cyB0aGUgdW5kZXJseWluZyBnZW5lcmF0b3IgZW5naW5lIHNlZWRlZCB3aXRoIEBwIF9fcy4KKyAgICAgICAqIEBwYXJhbSBfX3MgQSBzZWVkIHZhbHVlIGZvciB0aGUgYmFzZSBjbGFzcyBlbmdpbmUuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBzaHVmZmxlX29yZGVyX2VuZ2luZShyZXN1bHRfdHlwZSBfX3MpCisgICAgICA6IF9NX2IoX19zKQorICAgICAgeyBfTV9pbml0aWFsaXplKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2VuZXJhdG9yIGNvbnN0cnVjdCBhICVzaHVmZmxlX29yZGVyX2VuZ2luZSBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fcSBBIHNlZWQgc2VxdWVuY2UuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Tc2VxLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfc2FtZTxfU3NlcSwgc2h1ZmZsZV9vcmRlcl9lbmdpbmU+Ojp2YWx1ZQorCQkgICAgICAgJiYgIXN0ZDo6aXNfc2FtZTxfU3NlcSwgX1JhbmRvbU51bWJlckVuZ2luZT46OnZhbHVlPgorCSAgICAgICA6OnR5cGU+CisgICAgICAgIGV4cGxpY2l0CisgICAgICAgIHNodWZmbGVfb3JkZXJfZW5naW5lKF9Tc2VxJiBfX3EpCisgICAgICAgIDogX01fYihfX3EpCisgICAgICAgIHsgX01faW5pdGlhbGl6ZSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlc2VlZHMgdGhlICVzaHVmZmxlX29yZGVyX2VuZ2luZSBvYmplY3Qgd2l0aCB0aGUgZGVmYXVsdCBzZWVkCisgICAgICAgICAgICAgICAgZm9yIHRoZSB1bmRlcmx5aW5nIGJhc2UgY2xhc3MgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgc2VlZCgpCisgICAgICB7CisJX01fYi5zZWVkKCk7CisJX01faW5pdGlhbGl6ZSgpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXNlZWRzIHRoZSAlc2h1ZmZsZV9vcmRlcl9lbmdpbmUgb2JqZWN0IHdpdGggdGhlIGRlZmF1bHQgc2VlZAorICAgICAgICogICAgICAgIGZvciB0aGUgdW5kZXJseWluZyBiYXNlIGNsYXNzIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHNlZWQocmVzdWx0X3R5cGUgX19zKQorICAgICAgeworCV9NX2Iuc2VlZChfX3MpOworCV9NX2luaXRpYWxpemUoKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmVzZWVkcyB0aGUgJXNodWZmbGVfb3JkZXJfZW5naW5lIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBzZWVkCisgICAgICAgKiAgICAgICAgc2VxdWVuY2UuCisgICAgICAgKiBAcGFyYW0gX19xIEEgc2VlZCBnZW5lcmF0b3IgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Tc2VxPgorICAgICAgICB2b2lkCisgICAgICAgIHNlZWQoX1NzZXEmIF9fcSkKKyAgICAgICAgeworCSAgX01fYi5zZWVkKF9fcSk7CisJICBfTV9pbml0aWFsaXplKCk7CisJfQorCisgICAgICAvKioKKyAgICAgICAqIEdldHMgYSBjb25zdCByZWZlcmVuY2UgdG8gdGhlIHVuZGVybHlpbmcgZ2VuZXJhdG9yIGVuZ2luZSBvYmplY3QuCisgICAgICAgKi8KKyAgICAgIGNvbnN0IF9SYW5kb21OdW1iZXJFbmdpbmUmCisgICAgICBiYXNlKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2I7IH0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIHRoZSBtaW5pbXVtIHZhbHVlIGluIHRoZSBnZW5lcmF0ZWQgcmFuZG9tIG51bWJlciByYW5nZS4KKyAgICAgICAqCisgICAgICAgKiBAdG9kbyBUaGlzIHNob3VsZCBiZSBjb25zdGV4cHIuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fYi5taW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEdldHMgdGhlIG1heGltdW0gdmFsdWUgaW4gdGhlIGdlbmVyYXRlZCByYW5kb20gbnVtYmVyIHJhbmdlLgorICAgICAgICoKKyAgICAgICAqIEB0b2RvIFRoaXMgc2hvdWxkIGJlIGNvbnN0ZXhwci4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1heCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9iLm1heCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogRGlzY2FyZCBhIHNlcXVlbmNlIG9mIHJhbmRvbSBudW1iZXJzLgorICAgICAgICoKKyAgICAgICAqIEB0b2RvIExvb2sgZm9yIGEgZmFzdGVyIHdheSB0byBkbyBkaXNjYXJkLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBkaXNjYXJkKHVuc2lnbmVkIGxvbmcgbG9uZyBfX3opCisgICAgICB7CisJZm9yICg7IF9feiAhPSAwVUxMOyAtLV9feikKKwkgICgqdGhpcykoKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIHRoZSBuZXh0IHZhbHVlIGluIHRoZSBnZW5lcmF0ZWQgcmFuZG9tIG51bWJlciBzZXF1ZW5jZS4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG9wZXJhdG9yKCkoKTsKKworICAgICAgLyoqCisgICAgICAgKiBDb21wYXJlcyB0d28gJXNodWZmbGVfb3JkZXJfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9iamVjdHMKKyAgICAgICAqIG9mIHRoZSBzYW1lIHR5cGUgZm9yIGVxdWFsaXR5LgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2xocyBBICVzaHVmZmxlX29yZGVyX2VuZ2luZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBvYmplY3QuCisgICAgICAgKiBAcGFyYW0gX19yaHMgQW5vdGhlciAlc2h1ZmZsZV9vcmRlcl9lbmdpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgICAqICAgICAgICAgICAgICBvYmplY3QuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgaW5maW5pdGUgc2VxdWVuY2VzIG9mIGdlbmVyYXRlZCB2YWx1ZXMKKyAgICAgICAqICAgICAgICAgIHdvdWxkIGJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuCisgICAgICAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3Qgc2h1ZmZsZV9vcmRlcl9lbmdpbmUmIF9fbGhzLAorCQkgY29uc3Qgc2h1ZmZsZV9vcmRlcl9lbmdpbmUmIF9fcmhzKQorICAgICAgeyByZXR1cm4gX19saHMuX01fYiA9PSBfX3Jocy5fTV9iOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEluc2VydHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSAlc2h1ZmZsZV9vcmRlcl9lbmdpbmUgcmFuZG9tCisgICAgICAgKiAgICAgICAgbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUgQHAgX194IGludG8gdGhlIG91dHB1dCBzdHJlYW0KKwlAcCBfX29zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVzaHVmZmxlX29yZGVyX2VuZ2luZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbU51bWJlckVuZ2luZTEsIHNpemVfdCBfX2sxLAorCSAgICAgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisJZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorCW9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mLAorCQkgICBjb25zdCBzdGQ6OnNodWZmbGVfb3JkZXJfZW5naW5lPF9SYW5kb21OdW1iZXJFbmdpbmUxLAorCQkgICBfX2sxPiYpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBFeHRyYWN0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhICUgc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmUKKyAgICAgICAqICAgICAgICByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUgQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbQorICAgICAgICogICAgICAgIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlc2h1ZmZsZV9vcmRlcl9lbmdpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBpbnB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGV4dHJhY3RlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21OdW1iZXJFbmdpbmUxLCBzaXplX3QgX19rMSwKKwkgICAgICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiwKKwkJICAgc3RkOjpzaHVmZmxlX29yZGVyX2VuZ2luZTxfUmFuZG9tTnVtYmVyRW5naW5lMSwgX19rMT4mKTsKKworICAgIHByaXZhdGU6CisgICAgICB2b2lkIF9NX2luaXRpYWxpemUoKQorICAgICAgeworCWZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fazsgKytfX2kpCisJICBfTV92W19faV0gPSBfTV9iKCk7CisJX01feSA9IF9NX2IoKTsKKyAgICAgIH0KKworICAgICAgX1JhbmRvbU51bWJlckVuZ2luZSBfTV9iOworICAgICAgcmVzdWx0X3R5cGUgX01fdltfX2tdOworICAgICAgcmVzdWx0X3R5cGUgX01feTsKKyAgICB9OworCisgIC8qKgorICAgKiBDb21wYXJlcyB0d28gJXNodWZmbGVfb3JkZXJfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9iamVjdHMKKyAgICogb2YgdGhlIHNhbWUgdHlwZSBmb3IgaW5lcXVhbGl0eS4KKyAgICoKKyAgICogQHBhcmFtIF9fbGhzIEEgJXNodWZmbGVfb3JkZXJfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9iamVjdC4KKyAgICogQHBhcmFtIF9fcmhzIEFub3RoZXIgJXNodWZmbGVfb3JkZXJfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAqICAgICAgICAgICAgICBvYmplY3QuCisgICAqCisgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGluZmluaXRlIHNlcXVlbmNlcyBvZiBnZW5lcmF0ZWQgdmFsdWVzCisgICAqICAgICAgICAgIHdvdWxkIGJlIGRpZmZlcmVudCwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbU51bWJlckVuZ2luZSwgc2l6ZV90IF9faz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc3RkOjpzaHVmZmxlX29yZGVyX2VuZ2luZTxfUmFuZG9tTnVtYmVyRW5naW5lLAorCSAgICAgICBfX2s+JiBfX2xocywKKwkgICAgICAgY29uc3Qgc3RkOjpzaHVmZmxlX29yZGVyX2VuZ2luZTxfUmFuZG9tTnVtYmVyRW5naW5lLAorCSAgICAgICBfX2s+JiBfX3JocykKKyAgICB7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQorCisKKyAgLyoqCisgICAqIFRoZSBjbGFzc2ljIE1pbmltdW0gU3RhbmRhcmQgcmFuZDAgb2YgTGV3aXMsIEdvb2RtYW4sIGFuZCBNaWxsZXIuCisgICAqLworICB0eXBlZGVmIGxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lPHVpbnRfZmFzdDMyX3QsIDE2ODA3VUwsIDBVTCwgMjE0NzQ4MzY0N1VMPgorICBtaW5zdGRfcmFuZDA7CisKKyAgLyoqCisgICAqIEFuIGFsdGVybmF0aXZlIExDUiAoTGVobWVyIEdlbmVyYXRvciBmdW5jdGlvbikuCisgICAqLworICB0eXBlZGVmIGxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lPHVpbnRfZmFzdDMyX3QsIDQ4MjcxVUwsIDBVTCwgMjE0NzQ4MzY0N1VMPgorICBtaW5zdGRfcmFuZDsKKworICAvKioKKyAgICogVGhlIGNsYXNzaWMgTWVyc2VubmUgVHdpc3Rlci4KKyAgICoKKyAgICogUmVmZXJlbmNlOgorICAgKiBNLiBNYXRzdW1vdG8gYW5kIFQuIE5pc2hpbXVyYSwgTWVyc2VubmUgVHdpc3RlcjogQSA2MjMtRGltZW5zaW9uYWxseQorICAgKiBFcXVpZGlzdHJpYnV0ZWQgVW5pZm9ybSBQc2V1ZG8tUmFuZG9tIE51bWJlciBHZW5lcmF0b3IsIEFDTSBUcmFuc2FjdGlvbnMKKyAgICogb24gTW9kZWxpbmcgYW5kIENvbXB1dGVyIFNpbXVsYXRpb24sIFZvbC4gOCwgTm8uIDEsIEphbnVhcnkgMTk5OCwgcHAgMy0zMC4KKyAgICovCisgIHR5cGVkZWYgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8CisgICAgdWludF9mYXN0MzJfdCwKKyAgICAzMiwgNjI0LCAzOTcsIDMxLAorICAgIDB4OTkwOGIwZGZVTCwgMTEsCisgICAgMHhmZmZmZmZmZlVMLCA3LAorICAgIDB4OWQyYzU2ODBVTCwgMTUsCisgICAgMHhlZmM2MDAwMFVMLCAxOCwgMTgxMjQzMzI1M1VMPiBtdDE5OTM3OworCisgIC8qKgorICAgKiBBbiBhbHRlcm5hdGl2ZSBNZXJzZW5uZSBUd2lzdGVyLgorICAgKi8KKyAgdHlwZWRlZiBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZTwKKyAgICB1aW50X2Zhc3Q2NF90LAorICAgIDY0LCAzMTIsIDE1NiwgMzEsCisgICAgMHhiNTAyNmY1YWE5NjYxOWU5VUxMLCAyOSwKKyAgICAweDU1NTU1NTU1NTU1NTU1NTVVTEwsIDE3LAorICAgIDB4NzFkNjdmZmZlZGE2MDAwMFVMTCwgMzcsCisgICAgMHhmZmY3ZWVlMDAwMDAwMDAwVUxMLCA0MywKKyAgICA2MzY0MTM2MjIzODQ2NzkzMDA1VUxMPiBtdDE5OTM3XzY0OworCisgIHR5cGVkZWYgc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmU8dWludF9mYXN0MzJfdCwgMjQsIDEwLCAyND4KKyAgICByYW5sdXgyNF9iYXNlOworCisgIHR5cGVkZWYgc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmU8dWludF9mYXN0NjRfdCwgNDgsIDUsIDEyPgorICAgIHJhbmx1eDQ4X2Jhc2U7CisKKyAgdHlwZWRlZiBkaXNjYXJkX2Jsb2NrX2VuZ2luZTxyYW5sdXgyNF9iYXNlLCAyMjMsIDIzPiByYW5sdXgyNDsKKworICB0eXBlZGVmIGRpc2NhcmRfYmxvY2tfZW5naW5lPHJhbmx1eDQ4X2Jhc2UsIDM4OSwgMTE+IHJhbmx1eDQ4OworCisgIHR5cGVkZWYgc2h1ZmZsZV9vcmRlcl9lbmdpbmU8bWluc3RkX3JhbmQwLCAyNTY+IGtudXRoX2I7CisKKyAgdHlwZWRlZiBtaW5zdGRfcmFuZDAgZGVmYXVsdF9yYW5kb21fZW5naW5lOworCisgIC8qKgorICAgKiBBIHN0YW5kYXJkIGludGVyZmFjZSB0byBhIHBsYXRmb3JtLXNwZWNpZmljIG5vbi1kZXRlcm1pbmlzdGljCisgICAqIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIChpZiBhbnkgYXJlIGF2YWlsYWJsZSkuCisgICAqLworICBjbGFzcyByYW5kb21fZGV2aWNlCisgIHsKKyAgcHVibGljOgorICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgZ2VuZXJhdGVkIHJhbmRvbSB2YWx1ZS4gKi8KKyAgICB0eXBlZGVmIHVuc2lnbmVkIGludCByZXN1bHRfdHlwZTsKKworICAgIC8vIGNvbnN0cnVjdG9ycywgZGVzdHJ1Y3RvcnMgYW5kIG1lbWJlciBmdW5jdGlvbnMKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9SQU5ET01fVFIxCisKKyAgICBleHBsaWNpdAorICAgIHJhbmRvbV9kZXZpY2UoY29uc3Qgc3RkOjpzdHJpbmcmIF9fdG9rZW4gPSAiL2Rldi91cmFuZG9tIikKKyAgICB7CisgICAgICBpZiAoKF9fdG9rZW4gIT0gIi9kZXYvdXJhbmRvbSIgJiYgX190b2tlbiAhPSAiL2Rldi9yYW5kb20iKQorCSAgfHwgIShfTV9maWxlID0gc3RkOjpmb3BlbihfX3Rva2VuLmNfc3RyKCksICJyYiIpKSkKKwlzdGQ6Ol9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oInJhbmRvbV9kZXZpY2U6OiIKKwkJCQkgICAgICAgInJhbmRvbV9kZXZpY2UoY29uc3Qgc3RkOjpzdHJpbmcmKSIpKTsKKyAgICB9CisKKyAgICB+cmFuZG9tX2RldmljZSgpCisgICAgeyBzdGQ6OmZjbG9zZShfTV9maWxlKTsgfQorCisjZWxzZQorCisgICAgZXhwbGljaXQKKyAgICByYW5kb21fZGV2aWNlKGNvbnN0IHN0ZDo6c3RyaW5nJiBfX3Rva2VuID0gIm10MTk5MzciKQorICAgIDogX01fbXQoX01fc3RydG91bChfX3Rva2VuKSkgeyB9CisKKyAgcHJpdmF0ZToKKyAgICBzdGF0aWMgdW5zaWduZWQgbG9uZworICAgIF9NX3N0cnRvdWwoY29uc3Qgc3RkOjpzdHJpbmcmIF9fc3RyKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgX19yZXQgPSA1NDg5VUw7CisgICAgICBpZiAoX19zdHIgIT0gIm10MTk5MzciKQorCXsKKwkgIGNvbnN0IGNoYXIqIF9fbnB0ciA9IF9fc3RyLmNfc3RyKCk7CisJICBjaGFyKiBfX2VuZHB0cjsKKwkgIF9fcmV0ID0gc3RkOjpzdHJ0b3VsKF9fbnB0ciwgJl9fZW5kcHRyLCAwKTsKKwkgIGlmICgqX19ucHRyID09ICdcMCcgfHwgKl9fZW5kcHRyICE9ICdcMCcpCisJICAgIHN0ZDo6X190aHJvd19ydW50aW1lX2Vycm9yKF9fTigicmFuZG9tX2RldmljZTo6X01fc3RydG91bCIKKwkJCQkJICAgIihjb25zdCBzdGQ6OnN0cmluZyYpIikpOworCX0KKyAgICAgIHJldHVybiBfX3JldDsKKyAgICB9CisKKyAgcHVibGljOgorCisjZW5kaWYKKworICAgIHJlc3VsdF90eXBlCisgICAgbWluKCkgY29uc3QKKyAgICB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHJlc3VsdF90eXBlPjo6bWluKCk7IH0KKworICAgIHJlc3VsdF90eXBlCisgICAgbWF4KCkgY29uc3QKKyAgICB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHJlc3VsdF90eXBlPjo6bWF4KCk7IH0KKworICAgIGRvdWJsZQorICAgIGVudHJvcHkoKSBjb25zdAorICAgIHsgcmV0dXJuIDAuMDsgfQorCisgICAgcmVzdWx0X3R5cGUKKyAgICBvcGVyYXRvcigpKCkKKyAgICB7CisjaWZkZWYgX0dMSUJDWFhfVVNFX1JBTkRPTV9UUjEKKyAgICAgIHJlc3VsdF90eXBlIF9fcmV0OworICAgICAgc3RkOjpmcmVhZChyZWludGVycHJldF9jYXN0PHZvaWQqPigmX19yZXQpLCBzaXplb2YocmVzdWx0X3R5cGUpLAorCQkgMSwgX01fZmlsZSk7CisgICAgICByZXR1cm4gX19yZXQ7CisjZWxzZQorICAgICAgcmV0dXJuIF9NX210KCk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBObyBjb3B5IGZ1bmN0aW9ucy4KKyAgICByYW5kb21fZGV2aWNlKGNvbnN0IHJhbmRvbV9kZXZpY2UmKSA9IGRlbGV0ZTsKKyAgICB2b2lkIG9wZXJhdG9yPShjb25zdCByYW5kb21fZGV2aWNlJikgPSBkZWxldGU7CisKKyAgcHJpdmF0ZToKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9SQU5ET01fVFIxCisgICAgRklMRSogICAgICAgIF9NX2ZpbGU7CisjZWxzZQorICAgIG10MTk5MzcgICAgICBfTV9tdDsKKyNlbmRpZgorICB9OworCisgIC8qIEB9ICovIC8vIGdyb3VwIHJhbmRvbV9nZW5lcmF0b3JzCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIHJhbmRvbV9kaXN0cmlidXRpb25zIFJhbmRvbSBOdW1iZXIgRGlzdHJpYnV0aW9ucworICAgKiBAaW5ncm91cCByYW5kb20KKyAgICogQHsKKyAgICovCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIHJhbmRvbV9kaXN0cmlidXRpb25zX3VuaWZvcm0gVW5pZm9ybQorICAgKiBAaW5ncm91cCByYW5kb21fZGlzdHJpYnV0aW9ucworICAgKiBAeworICAgKi8KKworICAvKioKKyAgICogQGJyaWVmIFVuaWZvcm0gZGlzY3JldGUgZGlzdHJpYnV0aW9uIGZvciByYW5kb20gbnVtYmVycy4KKyAgICogQSBkaXNjcmV0ZSByYW5kb20gZGlzdHJpYnV0aW9uIG9uIHRoZSByYW5nZSBAZiRbbWluLCBtYXhdQGYkIHdpdGggZXF1YWwKKyAgICogcHJvYmFiaWxpdHkgdGhyb3VnaG91dCB0aGUgcmFuZ2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSA9IGludD4KKyAgICBjbGFzcyB1bmlmb3JtX2ludF9kaXN0cmlidXRpb24KKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfaW50ZWdyYWw8X0ludFR5cGU+Ojp2YWx1ZSwKKwkJICAgICJ0ZW1wbGF0ZSBhcmd1bWVudCBub3QgYW4gaW50ZWdyYWwgdHlwZSIpOworCisgICAgcHVibGljOgorICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSByYW5nZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLworICAgICAgdHlwZWRlZiBfSW50VHlwZSByZXN1bHRfdHlwZTsKKyAgICAgIC8qKiBQYXJhbWV0ZXIgdHlwZS4gKi8KKyAgICAgIHN0cnVjdCBwYXJhbV90eXBlCisgICAgICB7CisJdHlwZWRlZiB1bmlmb3JtX2ludF9kaXN0cmlidXRpb248X0ludFR5cGU+IGRpc3RyaWJ1dGlvbl90eXBlOworCisJZXhwbGljaXQKKwlwYXJhbV90eXBlKF9JbnRUeXBlIF9fYSA9IDAsCisJCSAgIF9JbnRUeXBlIF9fYiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8X0ludFR5cGU+OjptYXgoKSkKKwk6IF9NX2EoX19hKSwgX01fYihfX2IpCisJeworCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9NX2EgPD0gX01fYik7CisJfQorCisJcmVzdWx0X3R5cGUKKwlhKCkgY29uc3QKKwl7IHJldHVybiBfTV9hOyB9CisKKwlyZXN1bHRfdHlwZQorCWIoKSBjb25zdAorCXsgcmV0dXJuIF9NX2I7IH0KKworCWZyaWVuZCBib29sCisJb3BlcmF0b3I9PShjb25zdCBwYXJhbV90eXBlJiBfX3AxLCBjb25zdCBwYXJhbV90eXBlJiBfX3AyKQorCXsgcmV0dXJuIF9fcDEuX01fYSA9PSBfX3AyLl9NX2EgJiYgX19wMS5fTV9iID09IF9fcDIuX01fYjsgfQorCisgICAgICBwcml2YXRlOgorCV9JbnRUeXBlIF9NX2E7CisJX0ludFR5cGUgX01fYjsKKyAgICAgIH07CisKKyAgICBwdWJsaWM6CisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb25zdHJ1Y3RzIGEgdW5pZm9ybSBkaXN0cmlidXRpb24gb2JqZWN0LgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgdW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uKF9JbnRUeXBlIF9fYSA9IDAsCisJCQkgICBfSW50VHlwZSBfX2IgPSBzdGQ6Om51bWVyaWNfbGltaXRzPF9JbnRUeXBlPjo6bWF4KCkpCisgICAgICA6IF9NX3BhcmFtKF9fYSwgX19iKQorICAgICAgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICB1bmlmb3JtX2ludF9kaXN0cmlidXRpb24oY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgOiBfTV9wYXJhbShfX3ApCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmVzZXRzIHRoZSBkaXN0cmlidXRpb24gc3RhdGUuCisgICAgICAgKgorICAgICAgICogRG9lcyBub3RoaW5nIGZvciB0aGUgdW5pZm9ybSBpbnRlZ2VyIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzZXQoKSB7IH0KKworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIGEoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0uYSgpOyB9CisKKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBiKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtLmIoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHBhcmFtX3R5cGUKKyAgICAgIHBhcmFtKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFNldHMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIEBwYXJhbSBfX3BhcmFtIFRoZSBuZXcgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwYXJhbShjb25zdCBwYXJhbV90eXBlJiBfX3BhcmFtKQorICAgICAgeyBfTV9wYXJhbSA9IF9fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgaW5jbHVzaXZlIGxvd2VyIGJvdW5kIG9mIHRoZSBkaXN0cmlidXRpb24gcmFuZ2UuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+YSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGluY2x1c2l2ZSB1cHBlciBib3VuZCBvZiB0aGUgZGlzdHJpYnV0aW9uIHJhbmdlLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmIoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZW5lcmF0aW5nIGZ1bmN0aW9ucy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisgICAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yKCkoX191cm5nLCB0aGlzLT5wYXJhbSgpKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKTsKKworICAgICAgcGFyYW1fdHlwZSBfTV9wYXJhbTsKKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIHVuaWZvcm0gaW50ZWdlciBkaXN0cmlidXRpb25zIGhhdmUKKyAgICogICAgICAgIHRoZSBzYW1lIHBhcmFtZXRlcnMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3Qgc3RkOjp1bmlmb3JtX2ludF9kaXN0cmlidXRpb248X0ludFR5cGU+JiBfX2QxLAorCSAgICAgICBjb25zdCBzdGQ6OnVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT4mIF9fZDIpCisgICAgeyByZXR1cm4gX19kMS5wYXJhbSgpID09IF9fZDIucGFyYW0oKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIHVuaWZvcm0gaW50ZWdlciBkaXN0cmlidXRpb25zIGhhdmUKKyAgICogICAgICAgIGRpZmZlcmVudCBwYXJhbWV0ZXJzLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHN0ZDo6dW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiYgX19kMSwKKwkgICAgICAgY29uc3Qgc3RkOjp1bmlmb3JtX2ludF9kaXN0cmlidXRpb248X0ludFR5cGU+JiBfX2QyKQorICAgIHsgcmV0dXJuICEoX19kMSA9PSBfX2QyKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgSW5zZXJ0cyBhICV1bmlmb3JtX2ludF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlcgorICAgKiAgICAgICAgZGlzdHJpYnV0aW9uIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIG9zLgorICAgKgorICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgKiBAcGFyYW0gX194ICBBICV1bmlmb3JtX2ludF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAqCisgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYsCisJICAgICAgIGNvbnN0IHN0ZDo6dW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiYpOworCisgIC8qKgorICAgKiBAYnJpZWYgRXh0cmFjdHMgYSAldW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAqIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICoKKyAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgKiBAcGFyYW0gX194ICBBICV1bmlmb3JtX2ludF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lLgorICAgKgorICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvciBzdGF0ZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYsCisJICAgICAgIHN0ZDo6dW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiYpOworCisKKyAgLyoqCisgICAqIEBicmllZiBVbmlmb3JtIGNvbnRpbnVvdXMgZGlzdHJpYnV0aW9uIGZvciByYW5kb20gbnVtYmVycy4KKyAgICoKKyAgICogQSBjb250aW51b3VzIHJhbmRvbSBkaXN0cmlidXRpb24gb24gdGhlIHJhbmdlIFttaW4sIG1heCkgd2l0aCBlcXVhbAorICAgKiBwcm9iYWJpbGl0eSB0aHJvdWdob3V0IHRoZSByYW5nZS4gIFRoZSBVUk5HIHNob3VsZCBiZSByZWFsLXZhbHVlZCBhbmQKKyAgICogZGVsaXZlciBudW1iZXIgaW4gdGhlIHJhbmdlIFswLCAxKS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSA9IGRvdWJsZT4KKyAgICBjbGFzcyB1bmlmb3JtX3JlYWxfZGlzdHJpYnV0aW9uCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PF9SZWFsVHlwZT46OnZhbHVlLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IG5vdCBhIGZsb2F0aW5nIHBvaW50IHR5cGUiKTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KKyAgICAgIHR5cGVkZWYgX1JlYWxUeXBlIHJlc3VsdF90eXBlOworICAgICAgLyoqIFBhcmFtZXRlciB0eXBlLiAqLworICAgICAgc3RydWN0IHBhcmFtX3R5cGUKKyAgICAgIHsKKwl0eXBlZGVmIHVuaWZvcm1fcmVhbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiBkaXN0cmlidXRpb25fdHlwZTsKKworCWV4cGxpY2l0CisJcGFyYW1fdHlwZShfUmVhbFR5cGUgX19hID0gX1JlYWxUeXBlKDApLAorCQkgICBfUmVhbFR5cGUgX19iID0gX1JlYWxUeXBlKDEpKQorCTogX01fYShfX2EpLCBfTV9iKF9fYikKKwl7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fYSA8PSBfTV9iKTsKKwl9CisKKwlyZXN1bHRfdHlwZQorCWEoKSBjb25zdAorCXsgcmV0dXJuIF9NX2E7IH0KKworCXJlc3VsdF90eXBlCisJYigpIGNvbnN0CisJeyByZXR1cm4gX01fYjsgfQorCisJZnJpZW5kIGJvb2wKKwlvcGVyYXRvcj09KGNvbnN0IHBhcmFtX3R5cGUmIF9fcDEsIGNvbnN0IHBhcmFtX3R5cGUmIF9fcDIpCisJeyByZXR1cm4gX19wMS5fTV9hID09IF9fcDIuX01fYSAmJiBfX3AxLl9NX2IgPT0gX19wMi5fTV9iOyB9CisKKyAgICAgIHByaXZhdGU6CisJX1JlYWxUeXBlIF9NX2E7CisJX1JlYWxUeXBlIF9NX2I7CisgICAgICB9OworCisgICAgcHVibGljOgorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29uc3RydWN0cyBhIHVuaWZvcm1fcmVhbF9kaXN0cmlidXRpb24gb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX21pbiBbSU5dICBUaGUgbG93ZXIgYm91bmQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIEBwYXJhbSBfX21heCBbSU5dICBUaGUgdXBwZXIgYm91bmQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIHVuaWZvcm1fcmVhbF9kaXN0cmlidXRpb24oX1JlYWxUeXBlIF9fYSA9IF9SZWFsVHlwZSgwKSwKKwkJCQlfUmVhbFR5cGUgX19iID0gX1JlYWxUeXBlKDEpKQorICAgICAgOiBfTV9wYXJhbShfX2EsIF9fYikKKyAgICAgIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgdW5pZm9ybV9yZWFsX2Rpc3RyaWJ1dGlvbihjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICA6IF9NX3BhcmFtKF9fcCkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXNldHMgdGhlIGRpc3RyaWJ1dGlvbiBzdGF0ZS4KKyAgICAgICAqCisgICAgICAgKiBEb2VzIG5vdGhpbmcgZm9yIHRoZSB1bmlmb3JtIHJlYWwgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNldCgpIHsgfQorCisgICAgICByZXN1bHRfdHlwZQorICAgICAgYSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5hKCk7IH0KKworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIGIoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0uYigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcGFyYW1fdHlwZQorICAgICAgcGFyYW0oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgU2V0cyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogQHBhcmFtIF9fcGFyYW0gVGhlIG5ldyBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHBhcmFtKGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7IF9NX3BhcmFtID0gX19wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBpbmNsdXNpdmUgbG93ZXIgYm91bmQgb2YgdGhlIGRpc3RyaWJ1dGlvbiByYW5nZS4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5hKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgaW5jbHVzaXZlIHVwcGVyIGJvdW5kIG9mIHRoZSBkaXN0cmlidXRpb24gcmFuZ2UuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+YigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdlbmVyYXRpbmcgZnVuY3Rpb25zLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKyAgICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3IoKShfX3VybmcsIHRoaXMtPnBhcmFtKCkpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisJeworCSAgX19kZXRhaWw6Ol9BZGFwdG9yPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCByZXN1bHRfdHlwZT4KKwkgICAgX19hdXJuZyhfX3VybmcpOworCSAgcmV0dXJuIChfX2F1cm5nKCkgKiAoX19wLmIoKSAtIF9fcC5hKCkpKSArIF9fcC5hKCk7CisJfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHBhcmFtX3R5cGUgX01fcGFyYW07CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byB1bmlmb3JtIHJlYWwgZGlzdHJpYnV0aW9ucyBoYXZlCisgICAqICAgICAgICB0aGUgc2FtZSBwYXJhbWV0ZXJzLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IHN0ZDo6dW5pZm9ybV9yZWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT4mIF9fZDEsCisJICAgICAgIGNvbnN0IHN0ZDo6dW5pZm9ybV9yZWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT4mIF9fZDIpCisgICAgeyByZXR1cm4gX19kMS5wYXJhbSgpID09IF9fZDIucGFyYW0oKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIHVuaWZvcm0gcmVhbCBkaXN0cmlidXRpb25zIGhhdmUKKyAgICogICAgICAgIGRpZmZlcmVudCBwYXJhbWV0ZXJzLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHN0ZDo6dW5pZm9ybV9yZWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT4mIF9fZDEsCisJICAgICAgIGNvbnN0IHN0ZDo6dW5pZm9ybV9yZWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT4mIF9fZDIpCisgICAgeyByZXR1cm4gIShfX2QxID09IF9fZDIpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBJbnNlcnRzIGEgJXVuaWZvcm1fcmVhbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlcgorICAgKiAgICAgICAgZGlzdHJpYnV0aW9uIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIF9fb3MuCisgICAqCisgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAqIEBwYXJhbSBfX3ggIEEgJXVuaWZvcm1fcmVhbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAqCisgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgKiAgICAgICAgICBhbiBlcnJvciBzdGF0ZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mLAorCSAgICAgICBjb25zdCBzdGQ6OnVuaWZvcm1fcmVhbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYpOworCisgIC8qKgorICAgKiBAYnJpZWYgRXh0cmFjdHMgYSAldW5pZm9ybV9yZWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgKiBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAqCisgICAqIEBwYXJhbSBfX2lzIEFuIGlucHV0IHN0cmVhbS4KKyAgICogQHBhcmFtIF9feCAgQSAldW5pZm9ybV9yZWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUuCisgICAqCisgICAqIEByZXR1cm5zIFRoZSBpbnB1dCBzdHJlYW0gd2l0aCBAcCBfX3ggZXh0cmFjdGVkIG9yIGluIGFuIGVycm9yIHN0YXRlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYsCisJICAgICAgIHN0ZDo6dW5pZm9ybV9yZWFsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+Jik7CisKKyAgLyogQH0gKi8gLy8gZ3JvdXAgcmFuZG9tX2Rpc3RyaWJ1dGlvbnNfdW5pZm9ybQorCisgIC8qKgorICAgKiBAYWRkdG9ncm91cCByYW5kb21fZGlzdHJpYnV0aW9uc19ub3JtYWwgTm9ybWFsCisgICAqIEBpbmdyb3VwIHJhbmRvbV9kaXN0cmlidXRpb25zCisgICAqIEB7CisgICAqLworCisgIC8qKgorICAgKiBAYnJpZWYgQSBub3JtYWwgY29udGludW91cyBkaXN0cmlidXRpb24gZm9yIHJhbmRvbSBudW1iZXJzLgorICAgKgorICAgKiBUaGUgZm9ybXVsYSBmb3IgdGhlIG5vcm1hbCBwcm9iYWJpbGl0eSBkZW5zaXR5IGZ1bmN0aW9uIGlzCisgICAqIEBmWworICAgKiAgICAgcCh4fFxtdSxcc2lnbWEpID0gXGZyYWN7MX17XHNpZ21hIFxzcXJ0ezIgXHBpfX0KKyAgICogICAgICAgICAgICBlXnstIFxmcmFje3t4IC0gXG11fV4gezJ9fXsyIFxzaWdtYSBeIHsyfX0gfSAKKyAgICogQGZdCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUgPSBkb3VibGU+CisgICAgY2xhc3Mgbm9ybWFsX2Rpc3RyaWJ1dGlvbgorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19mbG9hdGluZ19wb2ludDxfUmVhbFR5cGU+Ojp2YWx1ZSwKKwkJICAgICJ0ZW1wbGF0ZSBhcmd1bWVudCBub3QgYSBmbG9hdGluZyBwb2ludCB0eXBlIik7CisKKyAgICBwdWJsaWM6CisgICAgICAvKiogVGhlIHR5cGUgb2YgdGhlIHJhbmdlIG9mIHRoZSBkaXN0cmlidXRpb24uICovCisgICAgICB0eXBlZGVmIF9SZWFsVHlwZSByZXN1bHRfdHlwZTsKKyAgICAgIC8qKiBQYXJhbWV0ZXIgdHlwZS4gKi8KKyAgICAgIHN0cnVjdCBwYXJhbV90eXBlCisgICAgICB7CisJdHlwZWRlZiBub3JtYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4gZGlzdHJpYnV0aW9uX3R5cGU7CisKKwlleHBsaWNpdAorCXBhcmFtX3R5cGUoX1JlYWxUeXBlIF9fbWVhbiA9IF9SZWFsVHlwZSgwKSwKKwkJICAgX1JlYWxUeXBlIF9fc3RkZGV2ID0gX1JlYWxUeXBlKDEpKQorCTogX01fbWVhbihfX21lYW4pLCBfTV9zdGRkZXYoX19zdGRkZXYpCisJeworCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9NX3N0ZGRldiA+IF9SZWFsVHlwZSgwKSk7CisJfQorCisJX1JlYWxUeXBlCisJbWVhbigpIGNvbnN0CisJeyByZXR1cm4gX01fbWVhbjsgfQorCisJX1JlYWxUeXBlCisJc3RkZGV2KCkgY29uc3QKKwl7IHJldHVybiBfTV9zdGRkZXY7IH0KKworCWZyaWVuZCBib29sCisJb3BlcmF0b3I9PShjb25zdCBwYXJhbV90eXBlJiBfX3AxLCBjb25zdCBwYXJhbV90eXBlJiBfX3AyKQorCXsgcmV0dXJuIChfX3AxLl9NX21lYW4gPT0gX19wMi5fTV9tZWFuCisJCSAgJiYgX19wMS5fTV9zdGRkZXYgPT0gX19wMi5fTV9zdGRkZXYpOyB9CisKKyAgICAgIHByaXZhdGU6CisJX1JlYWxUeXBlIF9NX21lYW47CisJX1JlYWxUeXBlIF9NX3N0ZGRldjsKKyAgICAgIH07CisKKyAgICBwdWJsaWM6CisgICAgICAvKioKKyAgICAgICAqIENvbnN0cnVjdHMgYSBub3JtYWwgZGlzdHJpYnV0aW9uIHdpdGggcGFyYW1ldGVycyBAZiRtZWFuQGYkIGFuZAorICAgICAgICogc3RhbmRhcmQgZGV2aWF0aW9uLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgbm9ybWFsX2Rpc3RyaWJ1dGlvbihyZXN1bHRfdHlwZSBfX21lYW4gPSByZXN1bHRfdHlwZSgwKSwKKwkJCSAgcmVzdWx0X3R5cGUgX19zdGRkZXYgPSByZXN1bHRfdHlwZSgxKSkKKyAgICAgIDogX01fcGFyYW0oX19tZWFuLCBfX3N0ZGRldiksIF9NX3NhdmVkX2F2YWlsYWJsZShmYWxzZSkKKyAgICAgIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgbm9ybWFsX2Rpc3RyaWJ1dGlvbihjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICA6IF9NX3BhcmFtKF9fcCksIF9NX3NhdmVkX2F2YWlsYWJsZShmYWxzZSkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXNldHMgdGhlIGRpc3RyaWJ1dGlvbiBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzZXQoKQorICAgICAgeyBfTV9zYXZlZF9hdmFpbGFibGUgPSBmYWxzZTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBtZWFuIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIF9SZWFsVHlwZQorICAgICAgbWVhbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5tZWFuKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIF9SZWFsVHlwZQorICAgICAgc3RkZGV2KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtLnN0ZGRldigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcGFyYW1fdHlwZQorICAgICAgcGFyYW0oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgU2V0cyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogQHBhcmFtIF9fcGFyYW0gVGhlIG5ldyBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHBhcmFtKGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7IF9NX3BhcmFtID0gX19wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBncmVhdGVzdCBsb3dlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWluKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8cmVzdWx0X3R5cGU+OjptaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBsZWFzdCB1cHBlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8cmVzdWx0X3R5cGU+OjptYXgoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZW5lcmF0aW5nIGZ1bmN0aW9ucy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisJeyByZXR1cm4gdGhpcy0+b3BlcmF0b3IoKShfX3VybmcsIHRoaXMtPnBhcmFtKCkpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gbm9ybWFsIGRpc3RyaWJ1dGlvbnMgaGF2ZQorICAgICAgICogICAgICAgIHRoZSBzYW1lIHBhcmFtZXRlcnMgYW5kIHRoZSBzZXF1ZW5jZXMgdGhhdCB3b3VsZAorICAgICAgICogICAgICAgIGJlIGdlbmVyYXRlZCBhcmUgZXF1YWwuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTE+CisJZnJpZW5kIGJvb2wKKyAgICAgICAgb3BlcmF0b3I9PShjb25zdCBzdGQ6Om5vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mIF9fZDEsCisJCSAgIGNvbnN0IHN0ZDo6bm9ybWFsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGUxPiYgX19kMik7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEluc2VydHMgYSAlbm9ybWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAgICogQHAgX194IGludG8gdGhlIG91dHB1dCBzdHJlYW0gQHAgX19vcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlbm9ybWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgb3V0cHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggaW5zZXJ0ZWQgb3IgaW4KKyAgICAgICAqIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUxLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisJZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorCW9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mLAorCQkgICBjb25zdCBzdGQ6Om5vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mKTsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgRXh0cmFjdHMgYSAlbm9ybWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAgICogQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbSBAcCBfX2lzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2lzIEFuIGlucHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJW5vcm1hbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBpbnB1dCBzdHJlYW0gd2l0aCBAcCBfX3ggZXh0cmFjdGVkIG9yIGluIGFuIGVycm9yCisgICAgICAgKiAgICAgICAgICBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiwKKwkJICAgc3RkOjpub3JtYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+Jik7CisKKyAgICBwcml2YXRlOgorICAgICAgcGFyYW1fdHlwZSAgX01fcGFyYW07CisgICAgICByZXN1bHRfdHlwZSBfTV9zYXZlZDsKKyAgICAgIGJvb2wgICAgICAgIF9NX3NhdmVkX2F2YWlsYWJsZTsKKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIG5vcm1hbCBkaXN0cmlidXRpb25zIGFyZSBkaWZmZXJlbnQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHN0ZDo6bm9ybWFsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QxLAorCSAgICAgICBjb25zdCBzdGQ6Om5vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX19kMikKKyAgICB7IHJldHVybiAhKF9fZDEgPT0gX19kMik7IH0KKworCisgIC8qKgorICAgKiBAYnJpZWYgQSBsb2dub3JtYWxfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgKgorICAgKiBUaGUgZm9ybXVsYSBmb3IgdGhlIG5vcm1hbCBwcm9iYWJpbGl0eSBtYXNzIGZ1bmN0aW9uIGlzCisgICAqIEBmWworICAgKiAgICAgcCh4fG0scykgPSBcZnJhY3sxfXtzeFxzcXJ0ezJccGl9fQorICAgKiAgICAgICAgICAgICAgICBcZXhwey1cZnJhY3soXGxue3h9IC0gbSleMn17MnNeMn19IAorICAgKiBAZl0KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSA9IGRvdWJsZT4KKyAgICBjbGFzcyBsb2dub3JtYWxfZGlzdHJpYnV0aW9uCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PF9SZWFsVHlwZT46OnZhbHVlLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IG5vdCBhIGZsb2F0aW5nIHBvaW50IHR5cGUiKTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KKyAgICAgIHR5cGVkZWYgX1JlYWxUeXBlIHJlc3VsdF90eXBlOworICAgICAgLyoqIFBhcmFtZXRlciB0eXBlLiAqLworICAgICAgc3RydWN0IHBhcmFtX3R5cGUKKyAgICAgIHsKKwl0eXBlZGVmIGxvZ25vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiBkaXN0cmlidXRpb25fdHlwZTsKKworCWV4cGxpY2l0CisJcGFyYW1fdHlwZShfUmVhbFR5cGUgX19tID0gX1JlYWxUeXBlKDApLAorCQkgICBfUmVhbFR5cGUgX19zID0gX1JlYWxUeXBlKDEpKQorCTogX01fbShfX20pLCBfTV9zKF9fcykKKwl7IH0KKworCV9SZWFsVHlwZQorCW0oKSBjb25zdAorCXsgcmV0dXJuIF9NX207IH0KKworCV9SZWFsVHlwZQorCXMoKSBjb25zdAorCXsgcmV0dXJuIF9NX3M7IH0KKworCWZyaWVuZCBib29sCisJb3BlcmF0b3I9PShjb25zdCBwYXJhbV90eXBlJiBfX3AxLCBjb25zdCBwYXJhbV90eXBlJiBfX3AyKQorCXsgcmV0dXJuIF9fcDEuX01fbSA9PSBfX3AyLl9NX20gJiYgX19wMS5fTV9zID09IF9fcDIuX01fczsgfQorCisgICAgICBwcml2YXRlOgorCV9SZWFsVHlwZSBfTV9tOworCV9SZWFsVHlwZSBfTV9zOworICAgICAgfTsKKworICAgICAgZXhwbGljaXQKKyAgICAgIGxvZ25vcm1hbF9kaXN0cmlidXRpb24oX1JlYWxUeXBlIF9fbSA9IF9SZWFsVHlwZSgwKSwKKwkJCSAgICAgX1JlYWxUeXBlIF9fcyA9IF9SZWFsVHlwZSgxKSkKKyAgICAgIDogX01fcGFyYW0oX19tLCBfX3MpLCBfTV9uZCgpCisgICAgICB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIGxvZ25vcm1hbF9kaXN0cmlidXRpb24oY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgOiBfTV9wYXJhbShfX3ApLCBfTV9uZCgpCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBSZXNldHMgdGhlIGRpc3RyaWJ1dGlvbiBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzZXQoKQorICAgICAgeyBfTV9uZC5yZXNldCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICoKKyAgICAgICAqLworICAgICAgX1JlYWxUeXBlCisgICAgICBtKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtLm0oKTsgfQorCisgICAgICBfUmVhbFR5cGUKKyAgICAgIHMoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0ucygpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcGFyYW1fdHlwZQorICAgICAgcGFyYW0oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgU2V0cyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogQHBhcmFtIF9fcGFyYW0gVGhlIG5ldyBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHBhcmFtKGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7IF9NX3BhcmFtID0gX19wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBncmVhdGVzdCBsb3dlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWluKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHJlc3VsdF90eXBlKDApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGxlYXN0IHVwcGVyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1heCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdlbmVyYXRpbmcgZnVuY3Rpb25zLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKwl7IHJldHVybiB0aGlzLT5vcGVyYXRvcigpKF9fdXJuZywgdGhpcy0+cGFyYW0oKSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgICAgeyByZXR1cm4gc3RkOjpleHAoX19wLnMoKSAqIF9NX25kKF9fdXJuZykgKyBfX3AubSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gbG9nbm9ybWFsIGRpc3RyaWJ1dGlvbnMgaGF2ZQorICAgICAgICogICAgICAgIHRoZSBzYW1lIHBhcmFtZXRlcnMgYW5kIHRoZSBzZXF1ZW5jZXMgdGhhdCB3b3VsZAorICAgICAgICogICAgICAgIGJlIGdlbmVyYXRlZCBhcmUgZXF1YWwuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTE+CisgICAgICAgIGZyaWVuZCBib29sCisgICAgICAgIG9wZXJhdG9yPT0oY29uc3Qgc3RkOjpsb2dub3JtYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+JiBfX2QxLAorCQkgICBjb25zdCBzdGQ6OmxvZ25vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mIF9fZDIpCisgICAgICAgIHsgcmV0dXJuIChfX2QxLnBhcmFtKCkgPT0gX19kMi5wYXJhbSgpCisJCSAgJiYgX19kMS5fTV9uZCA9PSBfX2QyLl9NX25kKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBJbnNlcnRzIGEgJWxvZ25vcm1hbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIF9fb3MuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fb3MgQW4gb3V0cHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJWxvZ25vcm1hbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiwKKwkJICAgY29uc3Qgc3RkOjpsb2dub3JtYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+Jik7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEV4dHJhY3RzIGEgJWxvZ25vcm1hbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194IEEgJWxvZ25vcm1hbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlcgorICAgICAgICogICAgICAgICAgICBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBpbnB1dCBzdHJlYW0gd2l0aCBAcCBfX3ggZXh0cmFjdGVkIG9yIGluIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUxLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisJZnJpZW5kIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorCW9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mLAorCQkgICBzdGQ6OmxvZ25vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mKTsKKworICAgIHByaXZhdGU6CisgICAgICBwYXJhbV90eXBlIF9NX3BhcmFtOworCisgICAgICBzdGQ6Om5vcm1hbF9kaXN0cmlidXRpb248cmVzdWx0X3R5cGU+IF9NX25kOworICAgIH07CisKKyAgLyoqCisgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gbG9nbm9ybWFsIGRpc3RyaWJ1dGlvbnMgYXJlIGRpZmZlcmVudC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc3RkOjpsb2dub3JtYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDEsCisJICAgICAgIGNvbnN0IHN0ZDo6bG9nbm9ybWFsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QyKQorICAgIHsgcmV0dXJuICEoX19kMSA9PSBfX2QyKTsgfQorCisKKyAgLyoqCisgICAqIEBicmllZiBBIGdhbW1hIGNvbnRpbnVvdXMgZGlzdHJpYnV0aW9uIGZvciByYW5kb20gbnVtYmVycy4KKyAgICoKKyAgICogVGhlIGZvcm11bGEgZm9yIHRoZSBnYW1tYSBwcm9iYWJpbGl0eSBkZW5zaXR5IGZ1bmN0aW9uIGlzOgorICAgKiBAZlsKKyAgICogICAgIHAoeHxcYWxwaGEsXGJldGEpID0gXGZyYWN7MX17XGJldGFcR2FtbWEoXGFscGhhKX0KKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgKHgvXGJldGEpXntcYWxwaGEgLSAxfSBlXnsteC9cYmV0YX0gCisgICAqIEBmXQorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlID0gZG91YmxlPgorICAgIGNsYXNzIGdhbW1hX2Rpc3RyaWJ1dGlvbgorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19mbG9hdGluZ19wb2ludDxfUmVhbFR5cGU+Ojp2YWx1ZSwKKwkJICAgICJ0ZW1wbGF0ZSBhcmd1bWVudCBub3QgYSBmbG9hdGluZyBwb2ludCB0eXBlIik7CisKKyAgICBwdWJsaWM6CisgICAgICAvKiogVGhlIHR5cGUgb2YgdGhlIHJhbmdlIG9mIHRoZSBkaXN0cmlidXRpb24uICovCisgICAgICB0eXBlZGVmIF9SZWFsVHlwZSByZXN1bHRfdHlwZTsKKyAgICAgIC8qKiBQYXJhbWV0ZXIgdHlwZS4gKi8KKyAgICAgIHN0cnVjdCBwYXJhbV90eXBlCisgICAgICB7CisJdHlwZWRlZiBnYW1tYV9kaXN0cmlidXRpb248X1JlYWxUeXBlPiBkaXN0cmlidXRpb25fdHlwZTsKKwlmcmllbmQgY2xhc3MgZ2FtbWFfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT47CisKKwlleHBsaWNpdAorCXBhcmFtX3R5cGUoX1JlYWxUeXBlIF9fYWxwaGFfdmFsID0gX1JlYWxUeXBlKDEpLAorCQkgICBfUmVhbFR5cGUgX19iZXRhX3ZhbCA9IF9SZWFsVHlwZSgxKSkKKwk6IF9NX2FscGhhKF9fYWxwaGFfdmFsKSwgX01fYmV0YShfX2JldGFfdmFsKQorCXsKKwkgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChfTV9hbHBoYSA+IF9SZWFsVHlwZSgwKSk7CisJICBfTV9pbml0aWFsaXplKCk7CisJfQorCisJX1JlYWxUeXBlCisJYWxwaGEoKSBjb25zdAorCXsgcmV0dXJuIF9NX2FscGhhOyB9CisKKwlfUmVhbFR5cGUKKwliZXRhKCkgY29uc3QKKwl7IHJldHVybiBfTV9iZXRhOyB9CisKKwlmcmllbmQgYm9vbAorCW9wZXJhdG9yPT0oY29uc3QgcGFyYW1fdHlwZSYgX19wMSwgY29uc3QgcGFyYW1fdHlwZSYgX19wMikKKwl7IHJldHVybiAoX19wMS5fTV9hbHBoYSA9PSBfX3AyLl9NX2FscGhhCisJCSAgJiYgX19wMS5fTV9iZXRhID09IF9fcDIuX01fYmV0YSk7IH0KKworICAgICAgcHJpdmF0ZToKKwl2b2lkCisJX01faW5pdGlhbGl6ZSgpOworCisJX1JlYWxUeXBlIF9NX2FscGhhOworCV9SZWFsVHlwZSBfTV9iZXRhOworCisJX1JlYWxUeXBlIF9NX21hbHBoYSwgX01fYTI7CisgICAgICB9OworCisgICAgcHVibGljOgorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29uc3RydWN0cyBhIGdhbW1hIGRpc3RyaWJ1dGlvbiB3aXRoIHBhcmFtZXRlcnMKKyAgICAgICAqIEBmJFxhbHBoYUBmJCBhbmQgQGYkXGJldGFAZiQuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBnYW1tYV9kaXN0cmlidXRpb24oX1JlYWxUeXBlIF9fYWxwaGFfdmFsID0gX1JlYWxUeXBlKDEpLAorCQkJIF9SZWFsVHlwZSBfX2JldGFfdmFsID0gX1JlYWxUeXBlKDEpKQorICAgICAgOiBfTV9wYXJhbShfX2FscGhhX3ZhbCwgX19iZXRhX3ZhbCksIF9NX25kKCkKKyAgICAgIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgZ2FtbWFfZGlzdHJpYnV0aW9uKGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgIDogX01fcGFyYW0oX19wKSwgX01fbmQoKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlc2V0cyB0aGUgZGlzdHJpYnV0aW9uIHN0YXRlLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNldCgpCisgICAgICB7IF9NX25kLnJlc2V0KCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgQGYkXGFscGhhQGYkIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIF9SZWFsVHlwZQorICAgICAgYWxwaGEoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0uYWxwaGEoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBAZiRcYmV0YUBmJCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBfUmVhbFR5cGUKKyAgICAgIGJldGEoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0uYmV0YSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcGFyYW1fdHlwZQorICAgICAgcGFyYW0oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgU2V0cyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogQHBhcmFtIF9fcGFyYW0gVGhlIG5ldyBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHBhcmFtKGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7IF9NX3BhcmFtID0gX19wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBncmVhdGVzdCBsb3dlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWluKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHJlc3VsdF90eXBlKDApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGxlYXN0IHVwcGVyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1heCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdlbmVyYXRpbmcgZnVuY3Rpb25zLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKwl7IHJldHVybiB0aGlzLT5vcGVyYXRvcigpKF9fdXJuZywgdGhpcy0+cGFyYW0oKSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCk7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byBnYW1tYSBkaXN0cmlidXRpb25zIGhhdmUgdGhlIHNhbWUKKyAgICAgICAqICAgICAgICBwYXJhbWV0ZXJzIGFuZCB0aGUgc2VxdWVuY2VzIHRoYXQgd291bGQgYmUgZ2VuZXJhdGVkCisgICAgICAgKiAgICAgICAgYXJlIGVxdWFsLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUxPgorICAgICAgICBmcmllbmQgYm9vbAorICAgICAgICBvcGVyYXRvcj09KGNvbnN0IHN0ZDo6Z2FtbWFfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+JiBfX2QxLAorCQkgICBjb25zdCBzdGQ6OmdhbW1hX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGUxPiYgX19kMikKKyAgICAgICAgeyByZXR1cm4gKF9fZDEucGFyYW0oKSA9PSBfX2QyLnBhcmFtKCkKKwkJICAmJiBfX2QxLl9NX25kID09IF9fZDIuX01fbmQpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEluc2VydHMgYSAlZ2FtbWFfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVnYW1tYV9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiwKKwkJICAgY29uc3Qgc3RkOjpnYW1tYV9kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mKTsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgRXh0cmFjdHMgYSAlZ2FtbWFfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlZ2FtbWFfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiwKKwkJICAgc3RkOjpnYW1tYV9kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mKTsKKworICAgIHByaXZhdGU6CisgICAgICBwYXJhbV90eXBlIF9NX3BhcmFtOworCisgICAgICBzdGQ6Om5vcm1hbF9kaXN0cmlidXRpb248cmVzdWx0X3R5cGU+IF9NX25kOworICAgIH07CisKKyAgLyoqCisgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gZ2FtbWEgZGlzdHJpYnV0aW9ucyBhcmUgZGlmZmVyZW50LgorICAgKi8KKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgICBvcGVyYXRvciE9KGNvbnN0IHN0ZDo6Z2FtbWFfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDEsCisJCWNvbnN0IHN0ZDo6Z2FtbWFfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDIpCisgICAgeyByZXR1cm4gIShfX2QxID09IF9fZDIpOyB9CisKKworICAvKioKKyAgICogQGJyaWVmIEEgY2hpX3NxdWFyZWRfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgKgorICAgKiBUaGUgZm9ybXVsYSBmb3IgdGhlIG5vcm1hbCBwcm9iYWJpbGl0eSBtYXNzIGZ1bmN0aW9uIGlzCisgICAqIEBmJHAoeHxuKSA9IFxmcmFje3heeyhuLzIpIC0gMX1lXnsteC8yfX17XEdhbW1hKG4vMikgMl57bi8yfX1AZiQKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSA9IGRvdWJsZT4KKyAgICBjbGFzcyBjaGlfc3F1YXJlZF9kaXN0cmlidXRpb24KKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8X1JlYWxUeXBlPjo6dmFsdWUsCisJCSAgICAidGVtcGxhdGUgYXJndW1lbnQgbm90IGEgZmxvYXRpbmcgcG9pbnQgdHlwZSIpOworCisgICAgcHVibGljOgorICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSByYW5nZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLworICAgICAgdHlwZWRlZiBfUmVhbFR5cGUgcmVzdWx0X3R5cGU7CisgICAgICAvKiogUGFyYW1ldGVyIHR5cGUuICovCisgICAgICBzdHJ1Y3QgcGFyYW1fdHlwZQorICAgICAgeworCXR5cGVkZWYgY2hpX3NxdWFyZWRfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4gZGlzdHJpYnV0aW9uX3R5cGU7CisKKwlleHBsaWNpdAorCXBhcmFtX3R5cGUoX1JlYWxUeXBlIF9fbiA9IF9SZWFsVHlwZSgxKSkKKwk6IF9NX24oX19uKQorCXsgfQorCisJX1JlYWxUeXBlCisJbigpIGNvbnN0CisJeyByZXR1cm4gX01fbjsgfQorCisJZnJpZW5kIGJvb2wKKwlvcGVyYXRvcj09KGNvbnN0IHBhcmFtX3R5cGUmIF9fcDEsIGNvbnN0IHBhcmFtX3R5cGUmIF9fcDIpCisJeyByZXR1cm4gX19wMS5fTV9uID09IF9fcDIuX01fbjsgfQorCisgICAgICBwcml2YXRlOgorCV9SZWFsVHlwZSBfTV9uOworICAgICAgfTsKKworICAgICAgZXhwbGljaXQKKyAgICAgIGNoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlvbihfUmVhbFR5cGUgX19uID0gX1JlYWxUeXBlKDEpKQorICAgICAgOiBfTV9wYXJhbShfX24pLCBfTV9nZChfX24gLyAyKQorICAgICAgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBjaGlfc3F1YXJlZF9kaXN0cmlidXRpb24oY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgOiBfTV9wYXJhbShfX3ApLCBfTV9nZChfX3AubigpIC8gMikKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXNldHMgdGhlIGRpc3RyaWJ1dGlvbiBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzZXQoKQorICAgICAgeyBfTV9nZC5yZXNldCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICoKKyAgICAgICAqLworICAgICAgX1JlYWxUeXBlCisgICAgICBuKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtLm4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHBhcmFtX3R5cGUKKyAgICAgIHBhcmFtKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFNldHMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIEBwYXJhbSBfX3BhcmFtIFRoZSBuZXcgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwYXJhbShjb25zdCBwYXJhbV90eXBlJiBfX3BhcmFtKQorICAgICAgeyBfTV9wYXJhbSA9IF9fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgZ3JlYXRlc3QgbG93ZXIgYm91bmQgdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpIGNvbnN0CisgICAgICB7IHJldHVybiByZXN1bHRfdHlwZSgwKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBsZWFzdCB1cHBlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8cmVzdWx0X3R5cGU+OjptYXgoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZW5lcmF0aW5nIGZ1bmN0aW9ucy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisJeyByZXR1cm4gMiAqIF9NX2dkKF9fdXJuZyk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgICAgeworCSAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OmdhbW1hX2Rpc3RyaWJ1dGlvbjxyZXN1bHRfdHlwZT46OnBhcmFtX3R5cGUKKwkgICAgcGFyYW1fdHlwZTsKKwkgIHJldHVybiAyICogX01fZ2QoX191cm5nLCBwYXJhbV90eXBlKF9fcC5uKCkgLyAyKSk7CisJfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gQ2hpLXNxdWFyZWQgZGlzdHJpYnV0aW9ucyBoYXZlCisgICAgICAgKiAgICAgICAgdGhlIHNhbWUgcGFyYW1ldGVycyBhbmQgdGhlIHNlcXVlbmNlcyB0aGF0IHdvdWxkIGJlCisgICAgICAgKiAgICAgICAgZ2VuZXJhdGVkIGFyZSBlcXVhbC4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMT4KKyAgICAgICAgZnJpZW5kIGJvb2wKKyAgICAgICAgb3BlcmF0b3I9PShjb25zdCBzdGQ6OmNoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGUxPiYgX19kMSwKKwkJICAgY29uc3Qgc3RkOjpjaGlfc3F1YXJlZF9kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mIF9fZDIpCisgICAgICAgIHsgcmV0dXJuIF9fZDEucGFyYW0oKSA9PSBfX2QyLnBhcmFtKCkgJiYgX19kMS5fTV9nZCA9PSBfX2QyLl9NX2dkOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEluc2VydHMgYSAlY2hpX3NxdWFyZWRfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVjaGlfc3F1YXJlZF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiwKKwkJICAgY29uc3Qgc3RkOjpjaGlfc3F1YXJlZF9kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mKTsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgRXh0cmFjdHMgYSAlY2hpX3NxdWFyZWRfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCBBICVjaGlfc3F1YXJlZF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlcgorICAgICAgICogICAgICAgICAgICBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBpbnB1dCBzdHJlYW0gd2l0aCBAcCBfX3ggZXh0cmFjdGVkIG9yIGluIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUxLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisJZnJpZW5kIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorCW9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mLAorCQkgICBzdGQ6OmNoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGUxPiYpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHBhcmFtX3R5cGUgX01fcGFyYW07CisKKyAgICAgIHN0ZDo6Z2FtbWFfZGlzdHJpYnV0aW9uPHJlc3VsdF90eXBlPiBfTV9nZDsKKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIENoaS1zcXVhcmVkIGRpc3RyaWJ1dGlvbnMgYXJlIGRpZmZlcmVudC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc3RkOjpjaGlfc3F1YXJlZF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX19kMSwKKwkgICAgICAgY29uc3Qgc3RkOjpjaGlfc3F1YXJlZF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX19kMikKKyAgICB7IHJldHVybiAhKF9fZDEgPT0gX19kMik7IH0KKworCisgIC8qKgorICAgKiBAYnJpZWYgQSBjYXVjaHlfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgKgorICAgKiBUaGUgZm9ybXVsYSBmb3IgdGhlIG5vcm1hbCBwcm9iYWJpbGl0eSBtYXNzIGZ1bmN0aW9uIGlzCisgICAqIEBmJHAoeHxhLGIpID0gKFxwaSBiICgxICsgKFxmcmFje3gtYX17Yn0pXjIpKV57LTF9QGYkCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUgPSBkb3VibGU+CisgICAgY2xhc3MgY2F1Y2h5X2Rpc3RyaWJ1dGlvbgorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19mbG9hdGluZ19wb2ludDxfUmVhbFR5cGU+Ojp2YWx1ZSwKKwkJICAgICJ0ZW1wbGF0ZSBhcmd1bWVudCBub3QgYSBmbG9hdGluZyBwb2ludCB0eXBlIik7CisKKyAgICBwdWJsaWM6CisgICAgICAvKiogVGhlIHR5cGUgb2YgdGhlIHJhbmdlIG9mIHRoZSBkaXN0cmlidXRpb24uICovCisgICAgICB0eXBlZGVmIF9SZWFsVHlwZSByZXN1bHRfdHlwZTsKKyAgICAgIC8qKiBQYXJhbWV0ZXIgdHlwZS4gKi8KKyAgICAgIHN0cnVjdCBwYXJhbV90eXBlCisgICAgICB7CisJdHlwZWRlZiBjYXVjaHlfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4gZGlzdHJpYnV0aW9uX3R5cGU7CisKKwlleHBsaWNpdAorCXBhcmFtX3R5cGUoX1JlYWxUeXBlIF9fYSA9IF9SZWFsVHlwZSgwKSwKKwkJICAgX1JlYWxUeXBlIF9fYiA9IF9SZWFsVHlwZSgxKSkKKwk6IF9NX2EoX19hKSwgX01fYihfX2IpCisJeyB9CisKKwlfUmVhbFR5cGUKKwlhKCkgY29uc3QKKwl7IHJldHVybiBfTV9hOyB9CisKKwlfUmVhbFR5cGUKKwliKCkgY29uc3QKKwl7IHJldHVybiBfTV9iOyB9CisKKwlmcmllbmQgYm9vbAorCW9wZXJhdG9yPT0oY29uc3QgcGFyYW1fdHlwZSYgX19wMSwgY29uc3QgcGFyYW1fdHlwZSYgX19wMikKKwl7IHJldHVybiBfX3AxLl9NX2EgPT0gX19wMi5fTV9hICYmIF9fcDEuX01fYiA9PSBfX3AyLl9NX2I7IH0KKworICAgICAgcHJpdmF0ZToKKwlfUmVhbFR5cGUgX01fYTsKKwlfUmVhbFR5cGUgX01fYjsKKyAgICAgIH07CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBjYXVjaHlfZGlzdHJpYnV0aW9uKF9SZWFsVHlwZSBfX2EgPSBfUmVhbFR5cGUoMCksCisJCQkgIF9SZWFsVHlwZSBfX2IgPSBfUmVhbFR5cGUoMSkpCisgICAgICA6IF9NX3BhcmFtKF9fYSwgX19iKQorICAgICAgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBjYXVjaHlfZGlzdHJpYnV0aW9uKGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgIDogX01fcGFyYW0oX19wKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlc2V0cyB0aGUgZGlzdHJpYnV0aW9uIHN0YXRlLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNldCgpCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKgorICAgICAgICovCisgICAgICBfUmVhbFR5cGUKKyAgICAgIGEoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0uYSgpOyB9CisKKyAgICAgIF9SZWFsVHlwZQorICAgICAgYigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5iKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBwYXJhbV90eXBlCisgICAgICBwYXJhbSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBTZXRzIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBAcGFyYW0gX19wYXJhbSBUaGUgbmV3IHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcGFyYW0oY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsgX01fcGFyYW0gPSBfX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGdyZWF0ZXN0IGxvd2VyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1pbigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGxlYXN0IHVwcGVyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1heCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdlbmVyYXRpbmcgZnVuY3Rpb25zLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKwl7IHJldHVybiB0aGlzLT5vcGVyYXRvcigpKF9fdXJuZywgdGhpcy0+cGFyYW0oKSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCk7CisKKyAgICBwcml2YXRlOgorICAgICAgcGFyYW1fdHlwZSBfTV9wYXJhbTsKKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIENhdWNoeSBkaXN0cmlidXRpb25zIGhhdmUKKyAgICogICAgICAgIHRoZSBzYW1lIHBhcmFtZXRlcnMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IHN0ZDo6Y2F1Y2h5X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QxLAorCSAgICAgICBjb25zdCBzdGQ6OmNhdWNoeV9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX19kMikKKyAgICB7IHJldHVybiBfX2QxLnBhcmFtKCkgPT0gX19kMi5wYXJhbSgpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gQ2F1Y2h5IGRpc3RyaWJ1dGlvbnMgaGF2ZQorICAgKiAgICAgICAgZGlmZmVyZW50IHBhcmFtZXRlcnMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHN0ZDo6Y2F1Y2h5X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QxLAorCSAgICAgICBjb25zdCBzdGQ6OmNhdWNoeV9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX19kMikKKyAgICB7IHJldHVybiAhKF9fZDEgPT0gX19kMik7IH0KKworICAvKioKKyAgICogQGJyaWVmIEluc2VydHMgYSAlY2F1Y2h5X2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgKiBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgKgorICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgKiBAcGFyYW0gX194ICBBICVjYXVjaHlfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgKgorICAgKiBAcmV0dXJucyBUaGUgb3V0cHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggaW5zZXJ0ZWQgb3IgaW4KKyAgICogYW4gZXJyb3Igc3RhdGUuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiwKKwkgICAgICAgY29uc3Qgc3RkOjpjYXVjaHlfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mKTsKKworICAvKioKKyAgICogQGJyaWVmIEV4dHJhY3RzIGEgJWNhdWNoeV9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICogQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbSBAcCBfX2lzLgorICAgKgorICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAqIEBwYXJhbSBfX3ggQSAlY2F1Y2h5X2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyCisgICAqICAgICAgICAgICAgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICoKKyAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4gYW4gZXJyb3Igc3RhdGUuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiwKKwkgICAgICAgc3RkOjpjYXVjaHlfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgQSBmaXNoZXJfZl9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAqCisgICAqIFRoZSBmb3JtdWxhIGZvciB0aGUgbm9ybWFsIHByb2JhYmlsaXR5IG1hc3MgZnVuY3Rpb24gaXMKKyAgICogQGZbCisgICAqICAgICBwKHh8bSxuKSA9IFxmcmFje1xHYW1tYSgobStuKS8yKX17XEdhbW1hKG0vMilcR2FtbWEobi8yKX0KKyAgICogICAgICAgICAgICAgICAgKFxmcmFje219e259KV57bS8yfSB4XnsobS8yKS0xfQorICAgKiAgICAgICAgICAgICAgICAoMSArIFxmcmFje214fXtufSleey0obStuKS8yfSAKKyAgICogQGZdCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUgPSBkb3VibGU+CisgICAgY2xhc3MgZmlzaGVyX2ZfZGlzdHJpYnV0aW9uCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PF9SZWFsVHlwZT46OnZhbHVlLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IG5vdCBhIGZsb2F0aW5nIHBvaW50IHR5cGUiKTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KKyAgICAgIHR5cGVkZWYgX1JlYWxUeXBlIHJlc3VsdF90eXBlOworICAgICAgLyoqIFBhcmFtZXRlciB0eXBlLiAqLworICAgICAgc3RydWN0IHBhcmFtX3R5cGUKKyAgICAgIHsKKwl0eXBlZGVmIGZpc2hlcl9mX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+IGRpc3RyaWJ1dGlvbl90eXBlOworCisJZXhwbGljaXQKKwlwYXJhbV90eXBlKF9SZWFsVHlwZSBfX20gPSBfUmVhbFR5cGUoMSksCisJCSAgIF9SZWFsVHlwZSBfX24gPSBfUmVhbFR5cGUoMSkpCisJOiBfTV9tKF9fbSksIF9NX24oX19uKQorCXsgfQorCisJX1JlYWxUeXBlCisJbSgpIGNvbnN0CisJeyByZXR1cm4gX01fbTsgfQorCisJX1JlYWxUeXBlCisJbigpIGNvbnN0CisJeyByZXR1cm4gX01fbjsgfQorCisJZnJpZW5kIGJvb2wKKwlvcGVyYXRvcj09KGNvbnN0IHBhcmFtX3R5cGUmIF9fcDEsIGNvbnN0IHBhcmFtX3R5cGUmIF9fcDIpCisJeyByZXR1cm4gX19wMS5fTV9tID09IF9fcDIuX01fbSAmJiBfX3AxLl9NX24gPT0gX19wMi5fTV9uOyB9CisKKyAgICAgIHByaXZhdGU6CisJX1JlYWxUeXBlIF9NX207CisJX1JlYWxUeXBlIF9NX247CisgICAgICB9OworCisgICAgICBleHBsaWNpdAorICAgICAgZmlzaGVyX2ZfZGlzdHJpYnV0aW9uKF9SZWFsVHlwZSBfX20gPSBfUmVhbFR5cGUoMSksCisJCQkgICAgX1JlYWxUeXBlIF9fbiA9IF9SZWFsVHlwZSgxKSkKKyAgICAgIDogX01fcGFyYW0oX19tLCBfX24pLCBfTV9nZF94KF9fbSAvIDIpLCBfTV9nZF95KF9fbiAvIDIpCisgICAgICB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIGZpc2hlcl9mX2Rpc3RyaWJ1dGlvbihjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICA6IF9NX3BhcmFtKF9fcCksIF9NX2dkX3goX19wLm0oKSAvIDIpLCBfTV9nZF95KF9fcC5uKCkgLyAyKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlc2V0cyB0aGUgZGlzdHJpYnV0aW9uIHN0YXRlLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNldCgpCisgICAgICB7CisJX01fZ2RfeC5yZXNldCgpOworCV9NX2dkX3kucmVzZXQoKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKgorICAgICAgICovCisgICAgICBfUmVhbFR5cGUKKyAgICAgIG0oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0ubSgpOyB9CisKKyAgICAgIF9SZWFsVHlwZQorICAgICAgbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5uKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBwYXJhbV90eXBlCisgICAgICBwYXJhbSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBTZXRzIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBAcGFyYW0gX19wYXJhbSBUaGUgbmV3IHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcGFyYW0oY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsgX01fcGFyYW0gPSBfX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGdyZWF0ZXN0IGxvd2VyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gcmVzdWx0X3R5cGUoMCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgbGVhc3QgdXBwZXIgYm91bmQgdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1heCgpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHJlc3VsdF90eXBlPjo6bWF4KCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2VuZXJhdGluZyBmdW5jdGlvbnMuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorCXsgcmV0dXJuIChfTV9nZF94KF9fdXJuZykgKiBuKCkpIC8gKF9NX2dkX3koX191cm5nKSAqIG0oKSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgICAgeworCSAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OmdhbW1hX2Rpc3RyaWJ1dGlvbjxyZXN1bHRfdHlwZT46OnBhcmFtX3R5cGUKKwkgICAgcGFyYW1fdHlwZTsKKwkgIHJldHVybiAoKF9NX2dkX3goX191cm5nLCBwYXJhbV90eXBlKF9fcC5tKCkgLyAyKSkgKiBuKCkpCisJCSAgLyAoX01fZ2RfeShfX3VybmcsIHBhcmFtX3R5cGUoX19wLm4oKSAvIDIpKSAqIG0oKSkpOworCX0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIEZpc2hlciBmIGRpc3RyaWJ1dGlvbnMgaGF2ZQorICAgICAgICogICAgICAgIHRoZSBzYW1lIHBhcmFtZXRlcnMgYW5kIHRoZSBzZXF1ZW5jZXMgdGhhdCB3b3VsZAorICAgICAgICogICAgICAgIGJlIGdlbmVyYXRlZCBhcmUgZXF1YWwuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTE+CisgICAgICAgIGZyaWVuZCBib29sCisgICAgICAgIG9wZXJhdG9yPT0oY29uc3Qgc3RkOjpmaXNoZXJfZl9kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mIF9fZDEsCisJCSAgIGNvbnN0IHN0ZDo6ZmlzaGVyX2ZfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+JiBfX2QyKQorICAgICAgICB7IHJldHVybiAoX19kMS5wYXJhbSgpID09IF9fZDIucGFyYW0oKQorCQkgICYmIF9fZDEuX01fZ2RfeCA9PSBfX2QyLl9NX2dkX3gKKwkJICAmJiBfX2QxLl9NX2dkX3kgPT0gX19kMi5fTV9nZF95KTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBJbnNlcnRzIGEgJWZpc2hlcl9mX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAgICogQHAgX194IGludG8gdGhlIG91dHB1dCBzdHJlYW0gQHAgX19vcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlZmlzaGVyX2ZfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYsCisJCSAgIGNvbnN0IHN0ZDo6ZmlzaGVyX2ZfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+Jik7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEV4dHJhY3RzIGEgJWZpc2hlcl9mX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAgICogQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbSBAcCBfX2lzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2lzIEFuIGlucHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggQSAlZmlzaGVyX2ZfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIKKyAgICAgICAqICAgICAgICAgICAgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiwKKwkJICAgc3RkOjpmaXNoZXJfZl9kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mKTsKKworICAgIHByaXZhdGU6CisgICAgICBwYXJhbV90eXBlIF9NX3BhcmFtOworCisgICAgICBzdGQ6OmdhbW1hX2Rpc3RyaWJ1dGlvbjxyZXN1bHRfdHlwZT4gX01fZ2RfeCwgX01fZ2RfeTsKKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIEZpc2hlciBmIGRpc3RyaWJ1dGlvbnMgYXJlIGRpZmVyZW50LgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBzdGQ6OmZpc2hlcl9mX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QxLAorCSAgICAgICBjb25zdCBzdGQ6OmZpc2hlcl9mX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QyKQorICAgIHsgcmV0dXJuICEoX19kMSA9PSBfX2QyKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgQSBzdHVkZW50X3RfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgKgorICAgKiBUaGUgZm9ybXVsYSBmb3IgdGhlIG5vcm1hbCBwcm9iYWJpbGl0eSBtYXNzIGZ1bmN0aW9uIGlzOgorICAgKiBAZlsKKyAgICogICAgIHAoeHxuKSA9IFxmcmFjezF9e1xzcXJ0KG5ccGkpfSBcZnJhY3tcR2FtbWEoKG4rMSkvMil9e1xHYW1tYShuLzIpfQorICAgKiAgICAgICAgICAgICAgKDEgKyBcZnJhY3t4XjJ9e259KSBeey0obisxKS8yfSAKKyAgICogQGZdCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUgPSBkb3VibGU+CisgICAgY2xhc3Mgc3R1ZGVudF90X2Rpc3RyaWJ1dGlvbgorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19mbG9hdGluZ19wb2ludDxfUmVhbFR5cGU+Ojp2YWx1ZSwKKwkJICAgICJ0ZW1wbGF0ZSBhcmd1bWVudCBub3QgYSBmbG9hdGluZyBwb2ludCB0eXBlIik7CisKKyAgICBwdWJsaWM6CisgICAgICAvKiogVGhlIHR5cGUgb2YgdGhlIHJhbmdlIG9mIHRoZSBkaXN0cmlidXRpb24uICovCisgICAgICB0eXBlZGVmIF9SZWFsVHlwZSByZXN1bHRfdHlwZTsKKyAgICAgIC8qKiBQYXJhbWV0ZXIgdHlwZS4gKi8KKyAgICAgIHN0cnVjdCBwYXJhbV90eXBlCisgICAgICB7CisJdHlwZWRlZiBzdHVkZW50X3RfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4gZGlzdHJpYnV0aW9uX3R5cGU7CisKKwlleHBsaWNpdAorCXBhcmFtX3R5cGUoX1JlYWxUeXBlIF9fbiA9IF9SZWFsVHlwZSgxKSkKKwk6IF9NX24oX19uKQorCXsgfQorCisJX1JlYWxUeXBlCisJbigpIGNvbnN0CisJeyByZXR1cm4gX01fbjsgfQorCisJZnJpZW5kIGJvb2wKKwlvcGVyYXRvcj09KGNvbnN0IHBhcmFtX3R5cGUmIF9fcDEsIGNvbnN0IHBhcmFtX3R5cGUmIF9fcDIpCisJeyByZXR1cm4gX19wMS5fTV9uID09IF9fcDIuX01fbjsgfQorCisgICAgICBwcml2YXRlOgorCV9SZWFsVHlwZSBfTV9uOworICAgICAgfTsKKworICAgICAgZXhwbGljaXQKKyAgICAgIHN0dWRlbnRfdF9kaXN0cmlidXRpb24oX1JlYWxUeXBlIF9fbiA9IF9SZWFsVHlwZSgxKSkKKyAgICAgIDogX01fcGFyYW0oX19uKSwgX01fbmQoKSwgX01fZ2QoX19uIC8gMiwgMikKKyAgICAgIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgc3R1ZGVudF90X2Rpc3RyaWJ1dGlvbihjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICA6IF9NX3BhcmFtKF9fcCksIF9NX25kKCksIF9NX2dkKF9fcC5uKCkgLyAyLCAyKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlc2V0cyB0aGUgZGlzdHJpYnV0aW9uIHN0YXRlLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNldCgpCisgICAgICB7CisJX01fbmQucmVzZXQoKTsKKwlfTV9nZC5yZXNldCgpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqCisgICAgICAgKi8KKyAgICAgIF9SZWFsVHlwZQorICAgICAgbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5uKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBwYXJhbV90eXBlCisgICAgICBwYXJhbSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBTZXRzIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBAcGFyYW0gX19wYXJhbSBUaGUgbmV3IHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcGFyYW0oY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsgX01fcGFyYW0gPSBfX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGdyZWF0ZXN0IGxvd2VyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1pbigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGxlYXN0IHVwcGVyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1heCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdlbmVyYXRpbmcgZnVuY3Rpb25zLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorICAgICAgICBvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisgICAgICAgIHsgcmV0dXJuIF9NX25kKF9fdXJuZykgKiBzdGQ6OnNxcnQobigpIC8gX01fZ2QoX191cm5nKSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgICAgeworCSAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OmdhbW1hX2Rpc3RyaWJ1dGlvbjxyZXN1bHRfdHlwZT46OnBhcmFtX3R5cGUKKwkgICAgcGFyYW1fdHlwZTsKKwkKKwkgIGNvbnN0IHJlc3VsdF90eXBlIF9fZyA9IF9NX2dkKF9fdXJuZywgcGFyYW1fdHlwZShfX3AubigpIC8gMiwgMikpOworCSAgcmV0dXJuIF9NX25kKF9fdXJuZykgKiBzdGQ6OnNxcnQoX19wLm4oKSAvIF9fZyk7CisgICAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIFN0dWRlbnQgdCBkaXN0cmlidXRpb25zIGhhdmUKKyAgICAgICAqICAgICAgICB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFuZCB0aGUgc2VxdWVuY2VzIHRoYXQgd291bGQKKyAgICAgICAqICAgICAgICBiZSBnZW5lcmF0ZWQgYXJlIGVxdWFsLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUxPgorICAgICAgICBmcmllbmQgYm9vbAorICAgICAgICBvcGVyYXRvcj09KGNvbnN0IHN0ZDo6c3R1ZGVudF90X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGUxPiYgX19kMSwKKwkJICAgY29uc3Qgc3RkOjpzdHVkZW50X3RfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+JiBfX2QyKQorICAgICAgICB7IHJldHVybiAoX19kMS5wYXJhbSgpID09IF9fZDIucGFyYW0oKQorCQkgICYmIF9fZDEuX01fbmQgPT0gX19kMi5fTV9uZCAmJiBfX2QxLl9NX2dkID09IF9fZDIuX01fZ2QpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEluc2VydHMgYSAlc3R1ZGVudF90X2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAgICogQHAgX194IGludG8gdGhlIG91dHB1dCBzdHJlYW0gQHAgX19vcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlc3R1ZGVudF90X2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgb3V0cHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggaW5zZXJ0ZWQgb3IgaW4KKyAgICAgICAqIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUxLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisJZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorCW9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mLAorCQkgICBjb25zdCBzdGQ6OnN0dWRlbnRfdF9kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mKTsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgRXh0cmFjdHMgYSAlc3R1ZGVudF90X2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAgICogQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbSBAcCBfX2lzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2lzIEFuIGlucHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggQSAlc3R1ZGVudF90X2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyCisgICAgICAgKiAgICAgICAgICAgIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4gYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYsCisJCSAgIHN0ZDo6c3R1ZGVudF90X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGUxPiYpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHBhcmFtX3R5cGUgX01fcGFyYW07CisKKyAgICAgIHN0ZDo6bm9ybWFsX2Rpc3RyaWJ1dGlvbjxyZXN1bHRfdHlwZT4gX01fbmQ7CisgICAgICBzdGQ6OmdhbW1hX2Rpc3RyaWJ1dGlvbjxyZXN1bHRfdHlwZT4gX01fZ2Q7CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byBTdHVkZW50IHQgZGlzdHJpYnV0aW9ucyBhcmUgZGlmZmVyZW50LgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBzdGQ6OnN0dWRlbnRfdF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX19kMSwKKwkgICAgICAgY29uc3Qgc3RkOjpzdHVkZW50X3RfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDIpCisgICAgeyByZXR1cm4gIShfX2QxID09IF9fZDIpOyB9CisKKworICAvKiBAfSAqLyAvLyBncm91cCByYW5kb21fZGlzdHJpYnV0aW9uc19ub3JtYWwKKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgcmFuZG9tX2Rpc3RyaWJ1dGlvbnNfYmVybm91bGxpIEJlcm5vdWxsaQorICAgKiBAaW5ncm91cCByYW5kb21fZGlzdHJpYnV0aW9ucworICAgKiBAeworICAgKi8KKworICAvKioKKyAgICogQGJyaWVmIEEgQmVybm91bGxpIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgKgorICAgKiBHZW5lcmF0ZXMgYSBzZXF1ZW5jZSBvZiB0cnVlIGFuZCBmYWxzZSB2YWx1ZXMgd2l0aCBsaWtlbGlob29kIEBmJHBAZiQKKyAgICogdGhhdCB0cnVlIHdpbGwgY29tZSB1cCBhbmQgQGYkKDEgLSBwKUBmJCB0aGF0IGZhbHNlIHdpbGwgYXBwZWFyLgorICAgKi8KKyAgY2xhc3MgYmVybm91bGxpX2Rpc3RyaWJ1dGlvbgorICB7CisgIHB1YmxpYzoKKyAgICAvKiogVGhlIHR5cGUgb2YgdGhlIHJhbmdlIG9mIHRoZSBkaXN0cmlidXRpb24uICovCisgICAgdHlwZWRlZiBib29sIHJlc3VsdF90eXBlOworICAgIC8qKiBQYXJhbWV0ZXIgdHlwZS4gKi8KKyAgICBzdHJ1Y3QgcGFyYW1fdHlwZQorICAgIHsKKyAgICAgIHR5cGVkZWYgYmVybm91bGxpX2Rpc3RyaWJ1dGlvbiBkaXN0cmlidXRpb25fdHlwZTsKKworICAgICAgZXhwbGljaXQKKyAgICAgIHBhcmFtX3R5cGUoZG91YmxlIF9fcCA9IDAuNSkKKyAgICAgIDogX01fcChfX3ApCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKChfTV9wID49IDAuMCkgJiYgKF9NX3AgPD0gMS4wKSk7CisgICAgICB9CisKKyAgICAgIGRvdWJsZQorICAgICAgcCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wOyB9CisKKyAgICAgIGZyaWVuZCBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IHBhcmFtX3R5cGUmIF9fcDEsIGNvbnN0IHBhcmFtX3R5cGUmIF9fcDIpCisgICAgICB7IHJldHVybiBfX3AxLl9NX3AgPT0gX19wMi5fTV9wOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgZG91YmxlIF9NX3A7CisgICAgfTsKKworICBwdWJsaWM6CisgICAgLyoqCisgICAgICogQGJyaWVmIENvbnN0cnVjdHMgYSBCZXJub3VsbGkgZGlzdHJpYnV0aW9uIHdpdGggbGlrZWxpaG9vZCBAcCBwLgorICAgICAqCisgICAgICogQHBhcmFtIF9fcCAgW0lOXSAgVGhlIGxpa2VsaWhvb2Qgb2YgYSB0cnVlIHJlc3VsdCBiZWluZyByZXR1cm5lZC4KKyAgICAgKiAgICAgICAgICAgICAgICAgICBNdXN0IGJlIGluIHRoZSBpbnRlcnZhbCBAZiRbMCwgMV1AZiQuCisgICAgICovCisgICAgZXhwbGljaXQKKyAgICBiZXJub3VsbGlfZGlzdHJpYnV0aW9uKGRvdWJsZSBfX3AgPSAwLjUpCisgICAgOiBfTV9wYXJhbShfX3ApCisgICAgeyB9CisKKyAgICBleHBsaWNpdAorICAgIGJlcm5vdWxsaV9kaXN0cmlidXRpb24oY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgIDogX01fcGFyYW0oX19wKQorICAgIHsgfQorCisgICAgLyoqCisgICAgICogQGJyaWVmIFJlc2V0cyB0aGUgZGlzdHJpYnV0aW9uIHN0YXRlLgorICAgICAqCisgICAgICogRG9lcyBub3RoaW5nIGZvciBhIEJlcm5vdWxsaSBkaXN0cmlidXRpb24uCisgICAgICovCisgICAgdm9pZAorICAgIHJlc2V0KCkgeyB9CisKKyAgICAvKioKKyAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgQHAgcCBwYXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgKi8KKyAgICBkb3VibGUKKyAgICBwKCkgY29uc3QKKyAgICB7IHJldHVybiBfTV9wYXJhbS5wKCk7IH0KKworICAgIC8qKgorICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICovCisgICAgcGFyYW1fdHlwZQorICAgIHBhcmFtKCkgY29uc3QKKyAgICB7IHJldHVybiBfTV9wYXJhbTsgfQorCisgICAgLyoqCisgICAgICogQGJyaWVmIFNldHMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgKiBAcGFyYW0gX19wYXJhbSBUaGUgbmV3IHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgKi8KKyAgICB2b2lkCisgICAgcGFyYW0oY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICB7IF9NX3BhcmFtID0gX19wYXJhbTsgfQorCisgICAgLyoqCisgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGdyZWF0ZXN0IGxvd2VyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICovCisgICAgcmVzdWx0X3R5cGUKKyAgICBtaW4oKSBjb25zdAorICAgIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8cmVzdWx0X3R5cGU+OjptaW4oKTsgfQorCisgICAgLyoqCisgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGxlYXN0IHVwcGVyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICovCisgICAgcmVzdWx0X3R5cGUKKyAgICBtYXgoKSBjb25zdAorICAgIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8cmVzdWx0X3R5cGU+OjptYXgoKTsgfQorCisgICAgLyoqCisgICAgICogQGJyaWVmIEdlbmVyYXRpbmcgZnVuY3Rpb25zLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKyAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yKCkoX191cm5nLCB0aGlzLT5wYXJhbSgpKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICByZXN1bHRfdHlwZQorICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgeworCV9fZGV0YWlsOjpfQWRhcHRvcjxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciwgZG91YmxlPgorCSAgX19hdXJuZyhfX3VybmcpOworCWlmICgoX19hdXJuZygpIC0gX19hdXJuZy5taW4oKSkKKwkgICAgIDwgX19wLnAoKSAqIChfX2F1cm5nLm1heCgpIC0gX19hdXJuZy5taW4oKSkpCisJICByZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7CisgICAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBwYXJhbV90eXBlIF9NX3BhcmFtOworICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIEJlcm5vdWxsaSBkaXN0cmlidXRpb25zIGhhdmUKKyAgICogICAgICAgIHRoZSBzYW1lIHBhcmFtZXRlcnMuCisgICAqLworICBpbmxpbmUgYm9vbAorICBvcGVyYXRvcj09KGNvbnN0IHN0ZDo6YmVybm91bGxpX2Rpc3RyaWJ1dGlvbiYgX19kMSwKKwkgICAgIGNvbnN0IHN0ZDo6YmVybm91bGxpX2Rpc3RyaWJ1dGlvbiYgX19kMikKKyAgeyByZXR1cm4gX19kMS5wYXJhbSgpID09IF9fZDIucGFyYW0oKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIEJlcm5vdWxsaSBkaXN0cmlidXRpb25zIGhhdmUKKyAgICogICAgICAgIGRpZmZlcmVudCBwYXJhbWV0ZXJzLgorICAgKi8KKyAgaW5saW5lIGJvb2wKKyAgb3BlcmF0b3IhPShjb25zdCBzdGQ6OmJlcm5vdWxsaV9kaXN0cmlidXRpb24mIF9fZDEsCisJICAgICBjb25zdCBzdGQ6OmJlcm5vdWxsaV9kaXN0cmlidXRpb24mIF9fZDIpCisgIHsgcmV0dXJuICEoX19kMSA9PSBfX2QyKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgSW5zZXJ0cyBhICViZXJub3VsbGlfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAqIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIF9fb3MuCisgICAqCisgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAqIEBwYXJhbSBfX3ggIEEgJWJlcm5vdWxsaV9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAqCisgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiwKKwkgICAgICAgY29uc3Qgc3RkOjpiZXJub3VsbGlfZGlzdHJpYnV0aW9uJik7CisKKyAgLyoqCisgICAqIEBicmllZiBFeHRyYWN0cyBhICViZXJub3VsbGlfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAqIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICoKKyAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgKiBAcGFyYW0gX194ICBBICViZXJub3VsbGlfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICoKKyAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4gYW4gZXJyb3Igc3RhdGUuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgc3RkOjpiZXJub3VsbGlfZGlzdHJpYnV0aW9uJiBfX3gpCisgICAgeworICAgICAgZG91YmxlIF9fcDsKKyAgICAgIF9faXMgPj4gX19wOworICAgICAgX194LnBhcmFtKGJlcm5vdWxsaV9kaXN0cmlidXRpb246OnBhcmFtX3R5cGUoX19wKSk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICAvKioKKyAgICogQGJyaWVmIEEgZGlzY3JldGUgYmlub21pYWwgcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAqCisgICAqIFRoZSBmb3JtdWxhIGZvciB0aGUgYmlub21pYWwgcHJvYmFiaWxpdHkgZGVuc2l0eSBmdW5jdGlvbiBpcworICAgKiBAZiRwKGl8dCxwKSA9IFxiaW5vbXtufXtpfSBwXmkgKDEgLSBwKV57dCAtIGl9QGYkIHdoZXJlIEBmJHRAZiQKKyAgICogYW5kIEBmJHBAZiQgYXJlIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSA9IGludD4KKyAgICBjbGFzcyBiaW5vbWlhbF9kaXN0cmlidXRpb24KKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfaW50ZWdyYWw8X0ludFR5cGU+Ojp2YWx1ZSwKKwkJICAgICJ0ZW1wbGF0ZSBhcmd1bWVudCBub3QgYW4gaW50ZWdyYWwgdHlwZSIpOworCisgICAgcHVibGljOgorICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSByYW5nZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLworICAgICAgdHlwZWRlZiBfSW50VHlwZSByZXN1bHRfdHlwZTsKKyAgICAgIC8qKiBQYXJhbWV0ZXIgdHlwZS4gKi8KKyAgICAgIHN0cnVjdCBwYXJhbV90eXBlCisgICAgICB7CisJdHlwZWRlZiBiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGU+IGRpc3RyaWJ1dGlvbl90eXBlOworCWZyaWVuZCBjbGFzcyBiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGU+OworCisJZXhwbGljaXQKKwlwYXJhbV90eXBlKF9JbnRUeXBlIF9fdCA9IF9JbnRUeXBlKDEpLCBkb3VibGUgX19wID0gMC41KQorCTogX01fdChfX3QpLCBfTV9wKF9fcCkKKwl7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoKF9NX3QgPj0gX0ludFR5cGUoMCkpCisJCQkJJiYgKF9NX3AgPj0gMC4wKQorCQkJCSYmIChfTV9wIDw9IDEuMCkpOworCSAgX01faW5pdGlhbGl6ZSgpOworCX0KKworCV9JbnRUeXBlCisJdCgpIGNvbnN0CisJeyByZXR1cm4gX01fdDsgfQorCisJZG91YmxlCisJcCgpIGNvbnN0CisJeyByZXR1cm4gX01fcDsgfQorCisJZnJpZW5kIGJvb2wKKwlvcGVyYXRvcj09KGNvbnN0IHBhcmFtX3R5cGUmIF9fcDEsIGNvbnN0IHBhcmFtX3R5cGUmIF9fcDIpCisJeyByZXR1cm4gX19wMS5fTV90ID09IF9fcDIuX01fdCAmJiBfX3AxLl9NX3AgPT0gX19wMi5fTV9wOyB9CisKKyAgICAgIHByaXZhdGU6CisJdm9pZAorCV9NX2luaXRpYWxpemUoKTsKKworCV9JbnRUeXBlIF9NX3Q7CisJZG91YmxlIF9NX3A7CisKKwlkb3VibGUgX01fcTsKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisJZG91YmxlIF9NX2QxLCBfTV9kMiwgX01fczEsIF9NX3MyLCBfTV9jLAorCSAgICAgICBfTV9hMSwgX01fYTEyMywgX01fcywgX01fbGYsIF9NX2xwMXA7CisjZW5kaWYKKwlib29sICAgX01fZWFzeTsKKyAgICAgIH07CisKKyAgICAgIC8vIGNvbnN0cnVjdG9ycyBhbmQgbWVtYmVyIGZ1bmN0aW9uCisgICAgICBleHBsaWNpdAorICAgICAgYmlub21pYWxfZGlzdHJpYnV0aW9uKF9JbnRUeXBlIF9fdCA9IF9JbnRUeXBlKDEpLAorCQkJICAgIGRvdWJsZSBfX3AgPSAwLjUpCisgICAgICA6IF9NX3BhcmFtKF9fdCwgX19wKSwgX01fbmQoKQorICAgICAgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBiaW5vbWlhbF9kaXN0cmlidXRpb24oY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgOiBfTV9wYXJhbShfX3ApLCBfTV9uZCgpCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmVzZXRzIHRoZSBkaXN0cmlidXRpb24gc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkKKyAgICAgIHsgX01fbmQucmVzZXQoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBkaXN0cmlidXRpb24gQHAgdCBwYXJhbWV0ZXIuCisgICAgICAgKi8KKyAgICAgIF9JbnRUeXBlCisgICAgICB0KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtLnQoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBkaXN0cmlidXRpb24gQHAgcCBwYXJhbWV0ZXIuCisgICAgICAgKi8KKyAgICAgIGRvdWJsZQorICAgICAgcCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5wKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBwYXJhbV90eXBlCisgICAgICBwYXJhbSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBTZXRzIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBAcGFyYW0gX19wYXJhbSBUaGUgbmV3IHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcGFyYW0oY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsgX01fcGFyYW0gPSBfX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGdyZWF0ZXN0IGxvd2VyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gMDsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBsZWFzdCB1cHBlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtLnQoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZW5lcmF0aW5nIGZ1bmN0aW9ucy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisJeyByZXR1cm4gdGhpcy0+b3BlcmF0b3IoKShfX3VybmcsIHRoaXMtPnBhcmFtKCkpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gYmlub21pYWwgZGlzdHJpYnV0aW9ucyBoYXZlCisgICAgICAgKiAgICAgICAgdGhlIHNhbWUgcGFyYW1ldGVycyBhbmQgdGhlIHNlcXVlbmNlcyB0aGF0IHdvdWxkCisgICAgICAgKiAgICAgICAgYmUgZ2VuZXJhdGVkIGFyZSBlcXVhbC4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUxPgorCWZyaWVuZCBib29sCisgICAgICAgIG9wZXJhdG9yPT0oY29uc3Qgc3RkOjpiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGUxPiYgX19kMSwKKwkJICAgY29uc3Qgc3RkOjpiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGUxPiYgX19kMikKKyNpZmRlZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisJeyByZXR1cm4gX19kMS5wYXJhbSgpID09IF9fZDIucGFyYW0oKSAmJiBfX2QxLl9NX25kID09IF9fZDIuX01fbmQ7IH0KKyNlbHNlCisgICAgICAgIHsgcmV0dXJuIF9fZDEucGFyYW0oKSA9PSBfX2QyLnBhcmFtKCk7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBJbnNlcnRzIGEgJWJpbm9taWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAgICogQHAgX194IGludG8gdGhlIG91dHB1dCBzdHJlYW0gQHAgX19vcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlYmlub21pYWxfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlMSwKKwkgICAgICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiwKKwkJICAgY29uc3Qgc3RkOjpiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGUxPiYpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBFeHRyYWN0cyBhICViaW5vbWlhbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICViaW5vbWlhbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBpbnB1dCBzdHJlYW0gd2l0aCBAcCBfX3ggZXh0cmFjdGVkIG9yIGluIGFuIGVycm9yCisgICAgICAgKiAgICAgICAgICBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUxLAorCSAgICAgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisJZnJpZW5kIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorCW9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mLAorCQkgICBzdGQ6OmJpbm9taWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZTE+Jik7CisKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlfTV93YWl0aW5nKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsIF9JbnRUeXBlIF9fdCk7CisKKyAgICAgIHBhcmFtX3R5cGUgX01fcGFyYW07CisKKyAgICAgIC8vIE5COiBVbnVzZWQgd2hlbiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxIGlzIHVuZGVmaW5lZC4KKyAgICAgIHN0ZDo6bm9ybWFsX2Rpc3RyaWJ1dGlvbjxkb3VibGU+IF9NX25kOworICAgIH07CisKKyAgLyoqCisgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gYmlub21pYWwgZGlzdHJpYnV0aW9ucyBhcmUgZGlmZmVyZW50LgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHN0ZDo6Ymlub21pYWxfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiYgX19kMSwKKwkgICAgICAgY29uc3Qgc3RkOjpiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGU+JiBfX2QyKQorICAgIHsgcmV0dXJuICEoX19kMSA9PSBfX2QyKTsgfQorCisKKyAgLyoqCisgICAqIEBicmllZiBBIGRpc2NyZXRlIGdlb21ldHJpYyByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICoKKyAgICogVGhlIGZvcm11bGEgZm9yIHRoZSBnZW9tZXRyaWMgcHJvYmFiaWxpdHkgZGVuc2l0eSBmdW5jdGlvbiBpcworICAgKiBAZiRwKGl8cCkgPSAoMSAtIHApcF57aS0xfUBmJCB3aGVyZSBAZiRwQGYkIGlzIHRoZSBwYXJhbWV0ZXIgb2YgdGhlCisgICAqIGRpc3RyaWJ1dGlvbi4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlID0gaW50PgorICAgIGNsYXNzIGdlb21ldHJpY19kaXN0cmlidXRpb24KKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfaW50ZWdyYWw8X0ludFR5cGU+Ojp2YWx1ZSwKKwkJICAgICJ0ZW1wbGF0ZSBhcmd1bWVudCBub3QgYW4gaW50ZWdyYWwgdHlwZSIpOworCisgICAgcHVibGljOgorICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSByYW5nZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLworICAgICAgdHlwZWRlZiBfSW50VHlwZSAgcmVzdWx0X3R5cGU7CisgICAgICAvKiogUGFyYW1ldGVyIHR5cGUuICovCisgICAgICBzdHJ1Y3QgcGFyYW1fdHlwZQorICAgICAgeworCXR5cGVkZWYgZ2VvbWV0cmljX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT4gZGlzdHJpYnV0aW9uX3R5cGU7CisJZnJpZW5kIGNsYXNzIGdlb21ldHJpY19kaXN0cmlidXRpb248X0ludFR5cGU+OworCisJZXhwbGljaXQKKwlwYXJhbV90eXBlKGRvdWJsZSBfX3AgPSAwLjUpCisJOiBfTV9wKF9fcCkKKwl7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoKF9NX3AgPj0gMC4wKQorCQkJICAgICAmJiAoX01fcCA8PSAxLjApKTsKKwkgIF9NX2luaXRpYWxpemUoKTsKKwl9CisKKwlkb3VibGUKKwlwKCkgY29uc3QKKwl7IHJldHVybiBfTV9wOyB9CisKKwlmcmllbmQgYm9vbAorCW9wZXJhdG9yPT0oY29uc3QgcGFyYW1fdHlwZSYgX19wMSwgY29uc3QgcGFyYW1fdHlwZSYgX19wMikKKwl7IHJldHVybiBfX3AxLl9NX3AgPT0gX19wMi5fTV9wOyB9CisKKyAgICAgIHByaXZhdGU6CisJdm9pZAorCV9NX2luaXRpYWxpemUoKQorCXsgX01fbG9nX3AgPSBzdGQ6OmxvZyhfTV9wKTsgfQorCisJZG91YmxlIF9NX3A7CisKKwlkb3VibGUgX01fbG9nX3A7CisgICAgICB9OworCisgICAgICAvLyBjb25zdHJ1Y3RvcnMgYW5kIG1lbWJlciBmdW5jdGlvbgorICAgICAgZXhwbGljaXQKKyAgICAgIGdlb21ldHJpY19kaXN0cmlidXRpb24oZG91YmxlIF9fcCA9IDAuNSkKKyAgICAgIDogX01fcGFyYW0oX19wKQorICAgICAgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBnZW9tZXRyaWNfZGlzdHJpYnV0aW9uKGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgIDogX01fcGFyYW0oX19wKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlc2V0cyB0aGUgZGlzdHJpYnV0aW9uIHN0YXRlLgorICAgICAgICoKKyAgICAgICAqIERvZXMgbm90aGluZyBmb3IgdGhlIGdlb21ldHJpYyBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGRpc3RyaWJ1dGlvbiBwYXJhbWV0ZXIgQHAgcC4KKyAgICAgICAqLworICAgICAgZG91YmxlCisgICAgICBwKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtLnAoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHBhcmFtX3R5cGUKKyAgICAgIHBhcmFtKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFNldHMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIEBwYXJhbSBfX3BhcmFtIFRoZSBuZXcgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwYXJhbShjb25zdCBwYXJhbV90eXBlJiBfX3BhcmFtKQorICAgICAgeyBfTV9wYXJhbSA9IF9fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgZ3JlYXRlc3QgbG93ZXIgYm91bmQgdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpIGNvbnN0CisgICAgICB7IHJldHVybiAwOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGxlYXN0IHVwcGVyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1heCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdlbmVyYXRpbmcgZnVuY3Rpb25zLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKwl7IHJldHVybiB0aGlzLT5vcGVyYXRvcigpKF9fdXJuZywgdGhpcy0+cGFyYW0oKSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCk7CisKKyAgICBwcml2YXRlOgorICAgICAgcGFyYW1fdHlwZSBfTV9wYXJhbTsKKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIGdlb21ldHJpYyBkaXN0cmlidXRpb25zIGhhdmUKKyAgICogICAgICAgIHRoZSBzYW1lIHBhcmFtZXRlcnMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3Qgc3RkOjpnZW9tZXRyaWNfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiYgX19kMSwKKwkgICAgICAgY29uc3Qgc3RkOjpnZW9tZXRyaWNfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiYgX19kMikKKyAgICB7IHJldHVybiBfX2QxLnBhcmFtKCkgPT0gX19kMi5wYXJhbSgpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gZ2VvbWV0cmljIGRpc3RyaWJ1dGlvbnMgaGF2ZQorICAgKiAgICAgICAgZGlmZmVyZW50IHBhcmFtZXRlcnMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc3RkOjpnZW9tZXRyaWNfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiYgX19kMSwKKwkgICAgICAgY29uc3Qgc3RkOjpnZW9tZXRyaWNfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiYgX19kMikKKyAgICB7IHJldHVybiAhKF9fZDEgPT0gX19kMik7IH0KKworICAvKioKKyAgICogQGJyaWVmIEluc2VydHMgYSAlZ2VvbWV0cmljX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgKiBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgKgorICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgKiBAcGFyYW0gX194ICBBICVnZW9tZXRyaWNfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgKgorICAgKiBAcmV0dXJucyBUaGUgb3V0cHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggaW5zZXJ0ZWQgb3IgaW4KKyAgICogYW4gZXJyb3Igc3RhdGUuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYsCisJICAgICAgIGNvbnN0IHN0ZDo6Z2VvbWV0cmljX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT4mKTsKKworICAvKioKKyAgICogQGJyaWVmIEV4dHJhY3RzIGEgJWdlb21ldHJpY19kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICogQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbSBAcCBfX2lzLgorICAgKgorICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAqIEBwYXJhbSBfX3ggIEEgJWdlb21ldHJpY19kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lLgorICAgKgorICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvciBzdGF0ZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlLAorCSAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiwKKwkgICAgICAgc3RkOjpnZW9tZXRyaWNfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiYpOworCisKKyAgLyoqCisgICAqIEBicmllZiBBIG5lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICoKKyAgICogVGhlIGZvcm11bGEgZm9yIHRoZSBuZWdhdGl2ZSBiaW5vbWlhbCBwcm9iYWJpbGl0eSBtYXNzIGZ1bmN0aW9uIGlzCisgICAqIEBmJHAoaSkgPSBcYmlub217bn17aX0gcF5pICgxIC0gcClee3QgLSBpfUBmJCB3aGVyZSBAZiR0QGYkCisgICAqIGFuZCBAZiRwQGYkIGFyZSB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUgPSBpbnQ+CisgICAgY2xhc3MgbmVnYXRpdmVfYmlub21pYWxfZGlzdHJpYnV0aW9uCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ludGVncmFsPF9JbnRUeXBlPjo6dmFsdWUsCisJCSAgICAidGVtcGxhdGUgYXJndW1lbnQgbm90IGFuIGludGVncmFsIHR5cGUiKTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KKyAgICAgIHR5cGVkZWYgX0ludFR5cGUgcmVzdWx0X3R5cGU7CisgICAgICAvKiogUGFyYW1ldGVyIHR5cGUuICovCisgICAgICBzdHJ1Y3QgcGFyYW1fdHlwZQorICAgICAgeworCXR5cGVkZWYgbmVnYXRpdmVfYmlub21pYWxfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiBkaXN0cmlidXRpb25fdHlwZTsKKworCWV4cGxpY2l0CisJcGFyYW1fdHlwZShfSW50VHlwZSBfX2sgPSAxLCBkb3VibGUgX19wID0gMC41KQorCTogX01fayhfX2spLCBfTV9wKF9fcCkKKwl7IH0KKworCV9JbnRUeXBlCisJaygpIGNvbnN0CisJeyByZXR1cm4gX01fazsgfQorCisJZG91YmxlCisJcCgpIGNvbnN0CisJeyByZXR1cm4gX01fcDsgfQorCisJZnJpZW5kIGJvb2wKKwlvcGVyYXRvcj09KGNvbnN0IHBhcmFtX3R5cGUmIF9fcDEsIGNvbnN0IHBhcmFtX3R5cGUmIF9fcDIpCisJeyByZXR1cm4gX19wMS5fTV9rID09IF9fcDIuX01fayAmJiBfX3AxLl9NX3AgPT0gX19wMi5fTV9wOyB9CisKKyAgICAgIHByaXZhdGU6CisJX0ludFR5cGUgX01fazsKKwlkb3VibGUgX01fcDsKKyAgICAgIH07CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBuZWdhdGl2ZV9iaW5vbWlhbF9kaXN0cmlidXRpb24oX0ludFR5cGUgX19rID0gMSwgZG91YmxlIF9fcCA9IDAuNSkKKyAgICAgIDogX01fcGFyYW0oX19rLCBfX3ApLCBfTV9nZChfX2ssIF9fcCAvICgxLjAgLSBfX3ApKQorICAgICAgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBuZWdhdGl2ZV9iaW5vbWlhbF9kaXN0cmlidXRpb24oY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgOiBfTV9wYXJhbShfX3ApLCBfTV9nZChfX3AuaygpLCBfX3AucCgpIC8gKDEuMCAtIF9fcC5wKCkpKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlc2V0cyB0aGUgZGlzdHJpYnV0aW9uIHN0YXRlLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNldCgpCisgICAgICB7IF9NX2dkLnJlc2V0KCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJuIHRoZSBAZiRrQGYkIHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBfSW50VHlwZQorICAgICAgaygpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5rKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJuIHRoZSBAZiRwQGYkIHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBkb3VibGUKKyAgICAgIHAoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0ucCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcGFyYW1fdHlwZQorICAgICAgcGFyYW0oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgU2V0cyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogQHBhcmFtIF9fcGFyYW0gVGhlIG5ldyBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHBhcmFtKGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7IF9NX3BhcmFtID0gX19wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBncmVhdGVzdCBsb3dlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWluKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHJlc3VsdF90eXBlKDApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGxlYXN0IHVwcGVyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1heCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdlbmVyYXRpbmcgZnVuY3Rpb25zLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorICAgICAgICBvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKTsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIG5lZ2F0aXZlIGJpbm9taWFsIGRpc3RyaWJ1dGlvbnMgaGF2ZQorICAgICAgICogICAgICAgIHRoZSBzYW1lIHBhcmFtZXRlcnMgYW5kIHRoZSBzZXF1ZW5jZXMgdGhhdCB3b3VsZCBiZQorICAgICAgICogICAgICAgIGdlbmVyYXRlZCBhcmUgZXF1YWwuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlMT4KKyAgICAgICAgZnJpZW5kIGJvb2wKKyAgICAgICAgb3BlcmF0b3I9PShjb25zdCBzdGQ6Om5lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZTE+JiBfX2QxLAorCQkgICBjb25zdCBzdGQ6Om5lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZTE+JiBfX2QyKQorICAgICAgICB7IHJldHVybiBfX2QxLnBhcmFtKCkgPT0gX19kMi5wYXJhbSgpICYmIF9fZDEuX01fZ2QgPT0gX19kMi5fTV9nZDsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBJbnNlcnRzIGEgJW5lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20KKyAgICAgICAqICAgICAgICBudW1iZXIgZGlzdHJpYnV0aW9uIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIF9fb3MuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fb3MgQW4gb3V0cHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJW5lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyCisgICAgICAgKiAgICAgICAgICAgICBkaXN0cmlidXRpb24uCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiAgICAgICAgICBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUxLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisJZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorCW9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mLAorCQkgICBjb25zdCBzdGQ6Om5lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZTE+Jik7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEV4dHJhY3RzIGEgJW5lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyCisgICAgICAgKiAgICAgICAgZGlzdHJpYnV0aW9uIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194IEEgJW5lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyCisgICAgICAgKiAgICAgICAgICAgIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4gYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiwKKwkJICAgc3RkOjpuZWdhdGl2ZV9iaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGUxPiYpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHBhcmFtX3R5cGUgX01fcGFyYW07CisKKyAgICAgIHN0ZDo6Z2FtbWFfZGlzdHJpYnV0aW9uPGRvdWJsZT4gX01fZ2Q7CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byBuZWdhdGl2ZSBiaW5vbWlhbCBkaXN0cmlidXRpb25zIGFyZSBkaWZmZXJlbnQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc3RkOjpuZWdhdGl2ZV9iaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGU+JiBfX2QxLAorCSAgICAgICBjb25zdCBzdGQ6Om5lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT4mIF9fZDIpCisgICAgeyByZXR1cm4gIShfX2QxID09IF9fZDIpOyB9CisKKworICAvKiBAfSAqLyAvLyBncm91cCByYW5kb21fZGlzdHJpYnV0aW9uc19iZXJub3VsbGkKKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgcmFuZG9tX2Rpc3RyaWJ1dGlvbnNfcG9pc3NvbiBQb2lzc29uCisgICAqIEBpbmdyb3VwIHJhbmRvbV9kaXN0cmlidXRpb25zCisgICAqIEB7CisgICAqLworCisgIC8qKgorICAgKiBAYnJpZWYgQSBkaXNjcmV0ZSBQb2lzc29uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgKgorICAgKiBUaGUgZm9ybXVsYSBmb3IgdGhlIFBvaXNzb24gcHJvYmFiaWxpdHkgZGVuc2l0eSBmdW5jdGlvbiBpcworICAgKiBAZiRwKGl8XG11KSA9IFxmcmFje1xtdV5pfXtpIX0gZV57LVxtdX1AZiQgd2hlcmUgQGYkXG11QGYkIGlzIHRoZQorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlID0gaW50PgorICAgIGNsYXNzIHBvaXNzb25fZGlzdHJpYnV0aW9uCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ludGVncmFsPF9JbnRUeXBlPjo6dmFsdWUsCisJCSAgICAidGVtcGxhdGUgYXJndW1lbnQgbm90IGFuIGludGVncmFsIHR5cGUiKTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KKyAgICAgIHR5cGVkZWYgX0ludFR5cGUgIHJlc3VsdF90eXBlOworICAgICAgLyoqIFBhcmFtZXRlciB0eXBlLiAqLworICAgICAgc3RydWN0IHBhcmFtX3R5cGUKKyAgICAgIHsKKwl0eXBlZGVmIHBvaXNzb25fZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiBkaXN0cmlidXRpb25fdHlwZTsKKwlmcmllbmQgY2xhc3MgcG9pc3Nvbl9kaXN0cmlidXRpb248X0ludFR5cGU+OworCisJZXhwbGljaXQKKwlwYXJhbV90eXBlKGRvdWJsZSBfX21lYW4gPSAxLjApCisJOiBfTV9tZWFuKF9fbWVhbikKKwl7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fbWVhbiA+IDAuMCk7CisJICBfTV9pbml0aWFsaXplKCk7CisJfQorCisJZG91YmxlCisJbWVhbigpIGNvbnN0CisJeyByZXR1cm4gX01fbWVhbjsgfQorCisJZnJpZW5kIGJvb2wKKwlvcGVyYXRvcj09KGNvbnN0IHBhcmFtX3R5cGUmIF9fcDEsIGNvbnN0IHBhcmFtX3R5cGUmIF9fcDIpCisJeyByZXR1cm4gX19wMS5fTV9tZWFuID09IF9fcDIuX01fbWVhbjsgfQorCisgICAgICBwcml2YXRlOgorCS8vIEhvc3RzIGVpdGhlciBsb2cobWVhbikgb3IgdGhlIHRocmVzaG9sZCBvZiB0aGUgc2ltcGxlIG1ldGhvZC4KKwl2b2lkCisJX01faW5pdGlhbGl6ZSgpOworCisJZG91YmxlIF9NX21lYW47CisKKwlkb3VibGUgX01fbG1fdGhyOworI2lmIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEKKwlkb3VibGUgX01fbGZtLCBfTV9zbSwgX01fZCwgX01fc2N4LCBfTV8xY3gsIF9NX2MyYiwgX01fY2I7CisjZW5kaWYKKyAgICAgIH07CisKKyAgICAgIC8vIGNvbnN0cnVjdG9ycyBhbmQgbWVtYmVyIGZ1bmN0aW9uCisgICAgICBleHBsaWNpdAorICAgICAgcG9pc3Nvbl9kaXN0cmlidXRpb24oZG91YmxlIF9fbWVhbiA9IDEuMCkKKyAgICAgIDogX01fcGFyYW0oX19tZWFuKSwgX01fbmQoKQorICAgICAgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBwb2lzc29uX2Rpc3RyaWJ1dGlvbihjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICA6IF9NX3BhcmFtKF9fcCksIF9NX25kKCkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXNldHMgdGhlIGRpc3RyaWJ1dGlvbiBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzZXQoKQorICAgICAgeyBfTV9uZC5yZXNldCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGRpc3RyaWJ1dGlvbiBwYXJhbWV0ZXIgQHAgbWVhbi4KKyAgICAgICAqLworICAgICAgZG91YmxlCisgICAgICBtZWFuKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtLm1lYW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHBhcmFtX3R5cGUKKyAgICAgIHBhcmFtKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFNldHMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIEBwYXJhbSBfX3BhcmFtIFRoZSBuZXcgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwYXJhbShjb25zdCBwYXJhbV90eXBlJiBfX3BhcmFtKQorICAgICAgeyBfTV9wYXJhbSA9IF9fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgZ3JlYXRlc3QgbG93ZXIgYm91bmQgdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpIGNvbnN0CisgICAgICB7IHJldHVybiAwOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGxlYXN0IHVwcGVyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1heCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdlbmVyYXRpbmcgZnVuY3Rpb25zLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKwl7IHJldHVybiB0aGlzLT5vcGVyYXRvcigpKF9fdXJuZywgdGhpcy0+cGFyYW0oKSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCk7CisKKyAgICAgICAvKioKKwkqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gUG9pc3NvbiBkaXN0cmlidXRpb25zIGhhdmUgdGhlIHNhbWUKKwkqICAgICAgICBwYXJhbWV0ZXJzIGFuZCB0aGUgc2VxdWVuY2VzIHRoYXQgd291bGQgYmUgZ2VuZXJhdGVkCisJKiAgICAgICAgYXJlIGVxdWFsLgorCSovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZTE+CisgICAgICAgIGZyaWVuZCBib29sCisgICAgICAgIG9wZXJhdG9yPT0oY29uc3Qgc3RkOjpwb2lzc29uX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZTE+JiBfX2QxLAorCQkgICBjb25zdCBzdGQ6OnBvaXNzb25fZGlzdHJpYnV0aW9uPF9JbnRUeXBlMT4mIF9fZDIpCisjaWZkZWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorICAgICAgICB7IHJldHVybiBfX2QxLnBhcmFtKCkgPT0gX19kMi5wYXJhbSgpICYmIF9fZDEuX01fbmQgPT0gX19kMi5fTV9uZDsgfQorI2Vsc2UKKyAgICAgICAgeyByZXR1cm4gX19kMS5wYXJhbSgpID09IF9fZDIucGFyYW0oKTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEluc2VydHMgYSAlcG9pc3Nvbl9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIF9fb3MuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fb3MgQW4gb3V0cHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJXBvaXNzb25fZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiwKKwkJICAgY29uc3Qgc3RkOjpwb2lzc29uX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZTE+Jik7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEV4dHJhY3RzIGEgJXBvaXNzb25fZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlcG9pc3Nvbl9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBpbnB1dCBzdHJlYW0gd2l0aCBAcCBfX3ggZXh0cmFjdGVkIG9yIGluIGFuIGVycm9yCisgICAgICAgKiAgICAgICAgICBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUxLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisJZnJpZW5kIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorCW9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mLAorCQkgICBzdGQ6OnBvaXNzb25fZGlzdHJpYnV0aW9uPF9JbnRUeXBlMT4mKTsKKworICAgIHByaXZhdGU6CisgICAgICBwYXJhbV90eXBlIF9NX3BhcmFtOworCisgICAgICAvLyBOQjogVW51c2VkIHdoZW4gX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMSBpcyB1bmRlZmluZWQuCisgICAgICBzdGQ6Om5vcm1hbF9kaXN0cmlidXRpb248ZG91YmxlPiBfTV9uZDsKKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIFBvaXNzb24gZGlzdHJpYnV0aW9ucyBhcmUgZGlmZmVyZW50LgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHN0ZDo6cG9pc3Nvbl9kaXN0cmlidXRpb248X0ludFR5cGU+JiBfX2QxLAorCSAgICAgICBjb25zdCBzdGQ6OnBvaXNzb25fZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiYgX19kMikKKyAgICB7IHJldHVybiAhKF9fZDEgPT0gX19kMik7IH0KKworCisgIC8qKgorICAgKiBAYnJpZWYgQW4gZXhwb25lbnRpYWwgY29udGludW91cyBkaXN0cmlidXRpb24gZm9yIHJhbmRvbSBudW1iZXJzLgorICAgKgorICAgKiBUaGUgZm9ybXVsYSBmb3IgdGhlIGV4cG9uZW50aWFsIHByb2JhYmlsaXR5IGRlbnNpdHkgZnVuY3Rpb24gaXMKKyAgICogQGYkcCh4fFxsYW1iZGEpID0gXGxhbWJkYSBlXnstXGxhbWJkYSB4fUBmJC4KKyAgICoKKyAgICogPHRhYmxlIGJvcmRlcj0xIGNlbGxwYWRkaW5nPTEwIGNlbGxzcGFjaW5nPTA+CisgICAqIDxjYXB0aW9uIGFsaWduPXRvcD5EaXN0cmlidXRpb24gU3RhdGlzdGljczwvY2FwdGlvbj4KKyAgICogPHRyPjx0ZD5NZWFuPC90ZD48dGQ+QGYkXGZyYWN7MX17XGxhbWJkYX1AZiQ8L3RkPjwvdHI+CisgICAqIDx0cj48dGQ+TWVkaWFuPC90ZD48dGQ+QGYkXGZyYWN7XGxuIDJ9e1xsYW1iZGF9QGYkPC90ZD48L3RyPgorICAgKiA8dHI+PHRkPk1vZGU8L3RkPjx0ZD5AZiR6ZXJvQGYkPC90ZD48L3RyPgorICAgKiA8dHI+PHRkPlJhbmdlPC90ZD48dGQ+QGYkWzAsIFxpbmZ0eV1AZiQ8L3RkPjwvdHI+CisgICAqIDx0cj48dGQ+U3RhbmRhcmQgRGV2aWF0aW9uPC90ZD48dGQ+QGYkXGZyYWN7MX17XGxhbWJkYX1AZiQ8L3RkPjwvdHI+CisgICAqIDwvdGFibGU+CisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUgPSBkb3VibGU+CisgICAgY2xhc3MgZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PF9SZWFsVHlwZT46OnZhbHVlLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IG5vdCBhIGZsb2F0aW5nIHBvaW50IHR5cGUiKTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KKyAgICAgIHR5cGVkZWYgX1JlYWxUeXBlIHJlc3VsdF90eXBlOworICAgICAgLyoqIFBhcmFtZXRlciB0eXBlLiAqLworICAgICAgc3RydWN0IHBhcmFtX3R5cGUKKyAgICAgIHsKKwl0eXBlZGVmIGV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+IGRpc3RyaWJ1dGlvbl90eXBlOworCisJZXhwbGljaXQKKwlwYXJhbV90eXBlKF9SZWFsVHlwZSBfX2xhbWJkYSA9IF9SZWFsVHlwZSgxKSkKKwk6IF9NX2xhbWJkYShfX2xhbWJkYSkKKwl7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fbGFtYmRhID4gX1JlYWxUeXBlKDApKTsKKwl9CisKKwlfUmVhbFR5cGUKKwlsYW1iZGEoKSBjb25zdAorCXsgcmV0dXJuIF9NX2xhbWJkYTsgfQorCisJZnJpZW5kIGJvb2wKKwlvcGVyYXRvcj09KGNvbnN0IHBhcmFtX3R5cGUmIF9fcDEsIGNvbnN0IHBhcmFtX3R5cGUmIF9fcDIpCisJeyByZXR1cm4gX19wMS5fTV9sYW1iZGEgPT0gX19wMi5fTV9sYW1iZGE7IH0KKworICAgICAgcHJpdmF0ZToKKwlfUmVhbFR5cGUgX01fbGFtYmRhOworICAgICAgfTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnN0cnVjdHMgYW4gZXhwb25lbnRpYWwgZGlzdHJpYnV0aW9uIHdpdGggaW52ZXJzZSBzY2FsZQorICAgICAgICogICAgICAgIHBhcmFtZXRlciBAZiRcbGFtYmRhQGYkLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uKGNvbnN0IHJlc3VsdF90eXBlJiBfX2xhbWJkYSA9IHJlc3VsdF90eXBlKDEpKQorICAgICAgOiBfTV9wYXJhbShfX2xhbWJkYSkKKyAgICAgIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uKGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgIDogX01fcGFyYW0oX19wKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlc2V0cyB0aGUgZGlzdHJpYnV0aW9uIHN0YXRlLgorICAgICAgICoKKyAgICAgICAqIEhhcyBubyBlZmZlY3Qgb24gZXhwb25lbnRpYWwgZGlzdHJpYnV0aW9ucy4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzZXQoKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgaW52ZXJzZSBzY2FsZSBwYXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgX1JlYWxUeXBlCisgICAgICBsYW1iZGEoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0ubGFtYmRhKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBwYXJhbV90eXBlCisgICAgICBwYXJhbSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBTZXRzIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBAcGFyYW0gX19wYXJhbSBUaGUgbmV3IHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcGFyYW0oY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsgX01fcGFyYW0gPSBfX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGdyZWF0ZXN0IGxvd2VyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gcmVzdWx0X3R5cGUoMCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgbGVhc3QgdXBwZXIgYm91bmQgdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1heCgpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHJlc3VsdF90eXBlPjo6bWF4KCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2VuZXJhdGluZyBmdW5jdGlvbnMuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorICAgICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcigpKF9fdXJuZywgdGhpcy0+cGFyYW0oKSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7CisJICBfX2RldGFpbDo6X0FkYXB0b3I8X1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IsIHJlc3VsdF90eXBlPgorCSAgICBfX2F1cm5nKF9fdXJuZyk7CisJICByZXR1cm4gLXN0ZDo6bG9nKF9fYXVybmcoKSkgLyBfX3AubGFtYmRhKCk7CisJfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHBhcmFtX3R5cGUgX01fcGFyYW07CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byBleHBvbmVudGlhbCBkaXN0cmlidXRpb25zIGhhdmUgdGhlIHNhbWUKKyAgICogICAgICAgIHBhcmFtZXRlcnMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IHN0ZDo6ZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDEsCisJICAgICAgIGNvbnN0IHN0ZDo6ZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDIpCisgICAgeyByZXR1cm4gX19kMS5wYXJhbSgpID09IF9fZDIucGFyYW0oKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIGV4cG9uZW50aWFsIGRpc3RyaWJ1dGlvbnMgaGF2ZSBkaWZmZXJlbnQKKyAgICogICAgICAgIHBhcmFtZXRlcnMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHN0ZDo6ZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDEsCisJICAgICAgIGNvbnN0IHN0ZDo6ZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDIpCisgICAgeyByZXR1cm4gIShfX2QxID09IF9fZDIpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBJbnNlcnRzIGEgJWV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgKiBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgKgorICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgKiBAcGFyYW0gX194ICBBICVleHBvbmVudGlhbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAqCisgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mLAorCSAgICAgICBjb25zdCBzdGQ6OmV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+Jik7CisKKyAgLyoqCisgICAqIEBicmllZiBFeHRyYWN0cyBhICVleHBvbmVudGlhbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICogQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbSBAcCBfX2lzLgorICAgKgorICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAqIEBwYXJhbSBfX3ggQSAlZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIKKyAgICogICAgICAgICAgICBnZW5lcmF0b3IgZW5naW5lLgorICAgKgorICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvciBzdGF0ZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mLAorCSAgICAgICBzdGQ6OmV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+Jik7CisKKworICAvKioKKyAgICogQGJyaWVmIEEgd2VpYnVsbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAqCisgICAqIFRoZSBmb3JtdWxhIGZvciB0aGUgbm9ybWFsIHByb2JhYmlsaXR5IGRlbnNpdHkgZnVuY3Rpb24gaXM6CisgICAqIEBmWworICAgKiAgICAgcCh4fFxhbHBoYSxcYmV0YSkgPSBcZnJhY3tcYWxwaGF9e1xiZXRhfSAoXGZyYWN7eH17XGJldGF9KV57XGFscGhhLTF9CisgICAqICAgICAgICAgICAgICAgICAgICAgICAgIFxleHB7KC0oXGZyYWN7eH17XGJldGF9KV5cYWxwaGEpfSAKKyAgICogQGZdCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUgPSBkb3VibGU+CisgICAgY2xhc3Mgd2VpYnVsbF9kaXN0cmlidXRpb24KKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8X1JlYWxUeXBlPjo6dmFsdWUsCisJCSAgICAidGVtcGxhdGUgYXJndW1lbnQgbm90IGEgZmxvYXRpbmcgcG9pbnQgdHlwZSIpOworCisgICAgcHVibGljOgorICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSByYW5nZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLworICAgICAgdHlwZWRlZiBfUmVhbFR5cGUgcmVzdWx0X3R5cGU7CisgICAgICAvKiogUGFyYW1ldGVyIHR5cGUuICovCisgICAgICBzdHJ1Y3QgcGFyYW1fdHlwZQorICAgICAgeworCXR5cGVkZWYgd2VpYnVsbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiBkaXN0cmlidXRpb25fdHlwZTsKKworCWV4cGxpY2l0CisJcGFyYW1fdHlwZShfUmVhbFR5cGUgX19hID0gX1JlYWxUeXBlKDEpLAorCQkgICBfUmVhbFR5cGUgX19iID0gX1JlYWxUeXBlKDEpKQorCTogX01fYShfX2EpLCBfTV9iKF9fYikKKwl7IH0KKworCV9SZWFsVHlwZQorCWEoKSBjb25zdAorCXsgcmV0dXJuIF9NX2E7IH0KKworCV9SZWFsVHlwZQorCWIoKSBjb25zdAorCXsgcmV0dXJuIF9NX2I7IH0KKworCWZyaWVuZCBib29sCisJb3BlcmF0b3I9PShjb25zdCBwYXJhbV90eXBlJiBfX3AxLCBjb25zdCBwYXJhbV90eXBlJiBfX3AyKQorCXsgcmV0dXJuIF9fcDEuX01fYSA9PSBfX3AyLl9NX2EgJiYgX19wMS5fTV9iID09IF9fcDIuX01fYjsgfQorCisgICAgICBwcml2YXRlOgorCV9SZWFsVHlwZSBfTV9hOworCV9SZWFsVHlwZSBfTV9iOworICAgICAgfTsKKworICAgICAgZXhwbGljaXQKKyAgICAgIHdlaWJ1bGxfZGlzdHJpYnV0aW9uKF9SZWFsVHlwZSBfX2EgPSBfUmVhbFR5cGUoMSksCisJCQkgICBfUmVhbFR5cGUgX19iID0gX1JlYWxUeXBlKDEpKQorICAgICAgOiBfTV9wYXJhbShfX2EsIF9fYikKKyAgICAgIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgd2VpYnVsbF9kaXN0cmlidXRpb24oY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgOiBfTV9wYXJhbShfX3ApCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmVzZXRzIHRoZSBkaXN0cmlidXRpb24gc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm4gdGhlIEBmJGFAZiQgcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIF9SZWFsVHlwZQorICAgICAgYSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5hKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJuIHRoZSBAZiRiQGYkIHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBfUmVhbFR5cGUKKyAgICAgIGIoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0uYigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcGFyYW1fdHlwZQorICAgICAgcGFyYW0oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgU2V0cyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogQHBhcmFtIF9fcGFyYW0gVGhlIG5ldyBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHBhcmFtKGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7IF9NX3BhcmFtID0gX19wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBncmVhdGVzdCBsb3dlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWluKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHJlc3VsdF90eXBlKDApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGxlYXN0IHVwcGVyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1heCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdlbmVyYXRpbmcgZnVuY3Rpb25zLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKwl7IHJldHVybiB0aGlzLT5vcGVyYXRvcigpKF9fdXJuZywgdGhpcy0+cGFyYW0oKSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCk7CisKKyAgICBwcml2YXRlOgorICAgICAgcGFyYW1fdHlwZSBfTV9wYXJhbTsKKyAgICB9OworCisgICAvKioKKyAgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gV2VpYnVsbCBkaXN0cmlidXRpb25zIGhhdmUgdGhlIHNhbWUKKyAgICAqICAgICAgICBwYXJhbWV0ZXJzLgorICAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3Qgc3RkOjp3ZWlidWxsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QxLAorCSAgICAgICBjb25zdCBzdGQ6OndlaWJ1bGxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDIpCisgICAgeyByZXR1cm4gX19kMS5wYXJhbSgpID09IF9fZDIucGFyYW0oKTsgfQorCisgICAvKioKKyAgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gV2VpYnVsbCBkaXN0cmlidXRpb25zIGhhdmUgZGlmZmVyZW50CisgICAgKiAgICAgICAgcGFyYW1ldGVycy4KKyAgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHN0ZDo6d2VpYnVsbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX19kMSwKKwkgICAgICAgY29uc3Qgc3RkOjp3ZWlidWxsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QyKQorICAgIHsgcmV0dXJuICEoX19kMSA9PSBfX2QyKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgSW5zZXJ0cyBhICV3ZWlidWxsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgKiBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgKgorICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgKiBAcGFyYW0gX194ICBBICV3ZWlidWxsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICoKKyAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAqIGFuIGVycm9yIHN0YXRlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYsCisJICAgICAgIGNvbnN0IHN0ZDo6d2VpYnVsbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYpOworCisgIC8qKgorICAgKiBAYnJpZWYgRXh0cmFjdHMgYSAld2VpYnVsbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICogQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbSBAcCBfX2lzLgorICAgKgorICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAqIEBwYXJhbSBfX3ggQSAld2VpYnVsbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlcgorICAgKiAgICAgICAgICAgIGdlbmVyYXRvciBlbmdpbmUuCisgICAqCisgICAqIEByZXR1cm5zIFRoZSBpbnB1dCBzdHJlYW0gd2l0aCBAcCBfX3ggZXh0cmFjdGVkIG9yIGluIGFuIGVycm9yIHN0YXRlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYsCisJICAgICAgIHN0ZDo6d2VpYnVsbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYpOworCisKKyAgLyoqCisgICAqIEBicmllZiBBIGV4dHJlbWVfdmFsdWVfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgKgorICAgKiBUaGUgZm9ybXVsYSBmb3IgdGhlIG5vcm1hbCBwcm9iYWJpbGl0eSBtYXNzIGZ1bmN0aW9uIGlzCisgICAqIEBmWworICAgKiAgICAgcCh4fGEsYikgPSBcZnJhY3sxfXtifQorICAgKiAgICAgICAgICAgICAgICBcZXhwKCBcZnJhY3thLXh9e2J9IC0gXGV4cChcZnJhY3thLXh9e2J9KSkgCisgICAqIEBmXQorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlID0gZG91YmxlPgorICAgIGNsYXNzIGV4dHJlbWVfdmFsdWVfZGlzdHJpYnV0aW9uCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PF9SZWFsVHlwZT46OnZhbHVlLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IG5vdCBhIGZsb2F0aW5nIHBvaW50IHR5cGUiKTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KKyAgICAgIHR5cGVkZWYgX1JlYWxUeXBlIHJlc3VsdF90eXBlOworICAgICAgLyoqIFBhcmFtZXRlciB0eXBlLiAqLworICAgICAgc3RydWN0IHBhcmFtX3R5cGUKKyAgICAgIHsKKwl0eXBlZGVmIGV4dHJlbWVfdmFsdWVfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4gZGlzdHJpYnV0aW9uX3R5cGU7CisKKwlleHBsaWNpdAorCXBhcmFtX3R5cGUoX1JlYWxUeXBlIF9fYSA9IF9SZWFsVHlwZSgwKSwKKwkJICAgX1JlYWxUeXBlIF9fYiA9IF9SZWFsVHlwZSgxKSkKKwk6IF9NX2EoX19hKSwgX01fYihfX2IpCisJeyB9CisKKwlfUmVhbFR5cGUKKwlhKCkgY29uc3QKKwl7IHJldHVybiBfTV9hOyB9CisKKwlfUmVhbFR5cGUKKwliKCkgY29uc3QKKwl7IHJldHVybiBfTV9iOyB9CisKKwlmcmllbmQgYm9vbAorCW9wZXJhdG9yPT0oY29uc3QgcGFyYW1fdHlwZSYgX19wMSwgY29uc3QgcGFyYW1fdHlwZSYgX19wMikKKwl7IHJldHVybiBfX3AxLl9NX2EgPT0gX19wMi5fTV9hICYmIF9fcDEuX01fYiA9PSBfX3AyLl9NX2I7IH0KKworICAgICAgcHJpdmF0ZToKKwlfUmVhbFR5cGUgX01fYTsKKwlfUmVhbFR5cGUgX01fYjsKKyAgICAgIH07CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBleHRyZW1lX3ZhbHVlX2Rpc3RyaWJ1dGlvbihfUmVhbFR5cGUgX19hID0gX1JlYWxUeXBlKDApLAorCQkJCSBfUmVhbFR5cGUgX19iID0gX1JlYWxUeXBlKDEpKQorICAgICAgOiBfTV9wYXJhbShfX2EsIF9fYikKKyAgICAgIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgZXh0cmVtZV92YWx1ZV9kaXN0cmlidXRpb24oY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgOiBfTV9wYXJhbShfX3ApCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmVzZXRzIHRoZSBkaXN0cmlidXRpb24gc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm4gdGhlIEBmJGFAZiQgcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIF9SZWFsVHlwZQorICAgICAgYSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5hKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJuIHRoZSBAZiRiQGYkIHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBfUmVhbFR5cGUKKyAgICAgIGIoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0uYigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcGFyYW1fdHlwZQorICAgICAgcGFyYW0oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgU2V0cyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogQHBhcmFtIF9fcGFyYW0gVGhlIG5ldyBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHBhcmFtKGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7IF9NX3BhcmFtID0gX19wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBncmVhdGVzdCBsb3dlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWluKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8cmVzdWx0X3R5cGU+OjptaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBsZWFzdCB1cHBlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8cmVzdWx0X3R5cGU+OjptYXgoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZW5lcmF0aW5nIGZ1bmN0aW9ucy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisJeyByZXR1cm4gdGhpcy0+b3BlcmF0b3IoKShfX3VybmcsIHRoaXMtPnBhcmFtKCkpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApOworCisgICAgcHJpdmF0ZToKKyAgICAgIHBhcmFtX3R5cGUgX01fcGFyYW07CisgICAgfTsKKworICAvKioKKyAgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gZXh0cmVtZSB2YWx1ZSBkaXN0cmlidXRpb25zIGhhdmUgdGhlIHNhbWUKKyAgICAqICAgICAgICBwYXJhbWV0ZXJzLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBzdGQ6OmV4dHJlbWVfdmFsdWVfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDEsCisJICAgICAgIGNvbnN0IHN0ZDo6ZXh0cmVtZV92YWx1ZV9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX19kMikKKyAgICB7IHJldHVybiBfX2QxLnBhcmFtKCkgPT0gX19kMi5wYXJhbSgpOyB9CisKKyAgLyoqCisgICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIGV4dHJlbWUgdmFsdWUgZGlzdHJpYnV0aW9ucyBoYXZlIGRpZmZlcmVudAorICAgICogICAgICAgIHBhcmFtZXRlcnMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHN0ZDo6ZXh0cmVtZV92YWx1ZV9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX19kMSwKKwkgICAgICAgY29uc3Qgc3RkOjpleHRyZW1lX3ZhbHVlX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QyKQorICAgIHsgcmV0dXJuICEoX19kMSA9PSBfX2QyKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgSW5zZXJ0cyBhICVleHRyZW1lX3ZhbHVlX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgKiBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgKgorICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgKiBAcGFyYW0gX194ICBBICVleHRyZW1lX3ZhbHVlX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICoKKyAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAqIGFuIGVycm9yIHN0YXRlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYsCisJICAgICAgIGNvbnN0IHN0ZDo6ZXh0cmVtZV92YWx1ZV9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYpOworCisgIC8qKgorICAgKiBAYnJpZWYgRXh0cmFjdHMgYSAlZXh0cmVtZV92YWx1ZV9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlcgorICAgKiAgICAgICAgZGlzdHJpYnV0aW9uIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICoKKyAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgKiBAcGFyYW0gX194IEEgJWV4dHJlbWVfdmFsdWVfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIKKyAgICogICAgICAgICAgICBnZW5lcmF0b3IgZW5naW5lLgorICAgKgorICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvciBzdGF0ZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mLAorCSAgICAgICBzdGQ6OmV4dHJlbWVfdmFsdWVfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgQSBkaXNjcmV0ZV9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAqCisgICAqIFRoZSBmb3JtdWxhIGZvciB0aGUgZGlzY3JldGUgcHJvYmFiaWxpdHkgbWFzcyBmdW5jdGlvbiBpcworICAgKgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUgPSBpbnQ+CisgICAgY2xhc3MgZGlzY3JldGVfZGlzdHJpYnV0aW9uCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ludGVncmFsPF9JbnRUeXBlPjo6dmFsdWUsCisJCSAgICAidGVtcGxhdGUgYXJndW1lbnQgbm90IGFuIGludGVncmFsIHR5cGUiKTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KKyAgICAgIHR5cGVkZWYgX0ludFR5cGUgcmVzdWx0X3R5cGU7CisgICAgICAvKiogUGFyYW1ldGVyIHR5cGUuICovCisgICAgICBzdHJ1Y3QgcGFyYW1fdHlwZQorICAgICAgeworCXR5cGVkZWYgZGlzY3JldGVfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiBkaXN0cmlidXRpb25fdHlwZTsKKwlmcmllbmQgY2xhc3MgZGlzY3JldGVfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPjsKKworCXBhcmFtX3R5cGUoKQorCTogX01fcHJvYigpLCBfTV9jcCgpCisJeyBfTV9pbml0aWFsaXplKCk7IH0KKworCXRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorCSAgcGFyYW1fdHlwZShfSW5wdXRJdGVyYXRvciBfX3diZWdpbiwKKwkJICAgICBfSW5wdXRJdGVyYXRvciBfX3dlbmQpCisJICA6IF9NX3Byb2IoX193YmVnaW4sIF9fd2VuZCksIF9NX2NwKCkKKwkgIHsgX01faW5pdGlhbGl6ZSgpOyB9CisKKwlwYXJhbV90eXBlKGluaXRpYWxpemVyX2xpc3Q8ZG91YmxlPiBfX3dpbCkKKwk6IF9NX3Byb2IoX193aWwuYmVnaW4oKSwgX193aWwuZW5kKCkpLCBfTV9jcCgpCisJeyBfTV9pbml0aWFsaXplKCk7IH0KKworCXRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jPgorCSAgcGFyYW1fdHlwZShzaXplX3QgX19udywgZG91YmxlIF9feG1pbiwgZG91YmxlIF9feG1heCwKKwkJICAgICBfRnVuYyBfX2Z3KTsKKworCXN0ZDo6dmVjdG9yPGRvdWJsZT4KKwlwcm9iYWJpbGl0aWVzKCkgY29uc3QKKwl7IHJldHVybiBfTV9wcm9iOyB9CisKKwlmcmllbmQgYm9vbAorCW9wZXJhdG9yPT0oY29uc3QgcGFyYW1fdHlwZSYgX19wMSwgY29uc3QgcGFyYW1fdHlwZSYgX19wMikKKwl7IHJldHVybiBfX3AxLl9NX3Byb2IgPT0gX19wMi5fTV9wcm9iOyB9CisKKyAgICAgIHByaXZhdGU6CisJdm9pZAorCV9NX2luaXRpYWxpemUoKTsKKworCXN0ZDo6dmVjdG9yPGRvdWJsZT4gX01fcHJvYjsKKwlzdGQ6OnZlY3Rvcjxkb3VibGU+IF9NX2NwOworICAgICAgfTsKKworICAgICAgZGlzY3JldGVfZGlzdHJpYnV0aW9uKCkKKyAgICAgIDogX01fcGFyYW0oKQorICAgICAgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorCWRpc2NyZXRlX2Rpc3RyaWJ1dGlvbihfSW5wdXRJdGVyYXRvciBfX3diZWdpbiwKKwkJCSAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fd2VuZCkKKwk6IF9NX3BhcmFtKF9fd2JlZ2luLCBfX3dlbmQpCisJeyB9CisKKyAgICAgIGRpc2NyZXRlX2Rpc3RyaWJ1dGlvbihpbml0aWFsaXplcl9saXN0PGRvdWJsZT4gX193bCkKKyAgICAgIDogX01fcGFyYW0oX193bCkKKyAgICAgIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuYz4KKwlkaXNjcmV0ZV9kaXN0cmlidXRpb24oc2l6ZV90IF9fbncsIGRvdWJsZSBfX3htaW4sIGRvdWJsZSBfX3htYXgsCisJCQkgICAgICBfRnVuYyBfX2Z3KQorCTogX01fcGFyYW0oX19udywgX194bWluLCBfX3htYXgsIF9fZncpCisJeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBkaXNjcmV0ZV9kaXN0cmlidXRpb24oY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgOiBfTV9wYXJhbShfX3ApCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmVzZXRzIHRoZSBkaXN0cmlidXRpb24gc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBwcm9iYWJpbGl0aWVzIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHN0ZDo6dmVjdG9yPGRvdWJsZT4KKyAgICAgIHByb2JhYmlsaXRpZXMoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0ucHJvYmFiaWxpdGllcygpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcGFyYW1fdHlwZQorICAgICAgcGFyYW0oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgU2V0cyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogQHBhcmFtIF9fcGFyYW0gVGhlIG5ldyBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHBhcmFtKGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7IF9NX3BhcmFtID0gX19wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBncmVhdGVzdCBsb3dlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWluKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHJlc3VsdF90eXBlKDApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGxlYXN0IHVwcGVyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01fcGFyYW0uX01fcHJvYi5zaXplKCkgLSAxOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdlbmVyYXRpbmcgZnVuY3Rpb25zLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKwl7IHJldHVybiB0aGlzLT5vcGVyYXRvcigpKF9fdXJuZywgdGhpcy0+cGFyYW0oKSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCk7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEluc2VydHMgYSAlZGlzY3JldGVfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVkaXNjcmV0ZV9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUxLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisJZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorCW9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mLAorCQkgICBjb25zdCBzdGQ6OmRpc2NyZXRlX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZTE+Jik7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEV4dHJhY3RzIGEgJWRpc2NyZXRlX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAgICogQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbSBAcCBfX2lzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2lzIEFuIGlucHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggQSAlZGlzY3JldGVfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIKKyAgICAgICAqICAgICAgICAgICAgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvcgorICAgICAgICogICAgICAgICAgc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiwKKwkJICAgc3RkOjpkaXNjcmV0ZV9kaXN0cmlidXRpb248X0ludFR5cGUxPiYpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHBhcmFtX3R5cGUgX01fcGFyYW07CisgICAgfTsKKworICAvKioKKyAgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gZGlzY3JldGUgZGlzdHJpYnV0aW9ucyBoYXZlIHRoZSBzYW1lCisgICAgKiAgICAgICAgcGFyYW1ldGVycy4KKyAgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3Qgc3RkOjpkaXNjcmV0ZV9kaXN0cmlidXRpb248X0ludFR5cGU+JiBfX2QxLAorCSAgICAgICBjb25zdCBzdGQ6OmRpc2NyZXRlX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT4mIF9fZDIpCisgICAgeyByZXR1cm4gX19kMS5wYXJhbSgpID09IF9fZDIucGFyYW0oKTsgfQorCisgIC8qKgorICAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byBkaXNjcmV0ZSBkaXN0cmlidXRpb25zIGhhdmUgZGlmZmVyZW50CisgICAgKiAgICAgICAgcGFyYW1ldGVycy4KKyAgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc3RkOjpkaXNjcmV0ZV9kaXN0cmlidXRpb248X0ludFR5cGU+JiBfX2QxLAorCSAgICAgICBjb25zdCBzdGQ6OmRpc2NyZXRlX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT4mIF9fZDIpCisgICAgeyByZXR1cm4gIShfX2QxID09IF9fZDIpOyB9CisKKworICAvKioKKyAgICogQGJyaWVmIEEgcGllY2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICoKKyAgICogVGhlIGZvcm11bGEgZm9yIHRoZSBwaWVjZXdpc2UgY29uc3RhbnQgcHJvYmFiaWxpdHkgbWFzcyBmdW5jdGlvbiBpcworICAgKgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlID0gZG91YmxlPgorICAgIGNsYXNzIHBpZWNld2lzZV9jb25zdGFudF9kaXN0cmlidXRpb24KKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8X1JlYWxUeXBlPjo6dmFsdWUsCisJCSAgICAidGVtcGxhdGUgYXJndW1lbnQgbm90IGEgZmxvYXRpbmcgcG9pbnQgdHlwZSIpOworCisgICAgcHVibGljOgorICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSByYW5nZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLworICAgICAgdHlwZWRlZiBfUmVhbFR5cGUgcmVzdWx0X3R5cGU7CisgICAgICAvKiogUGFyYW1ldGVyIHR5cGUuICovCisgICAgICBzdHJ1Y3QgcGFyYW1fdHlwZQorICAgICAgeworCXR5cGVkZWYgcGllY2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+IGRpc3RyaWJ1dGlvbl90eXBlOworCWZyaWVuZCBjbGFzcyBwaWVjZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT47CisKKwlwYXJhbV90eXBlKCkKKwk6IF9NX2ludCgpLCBfTV9kZW4oKSwgX01fY3AoKQorCXsgX01faW5pdGlhbGl6ZSgpOyB9CisKKwl0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvckIsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yVz4KKwkgIHBhcmFtX3R5cGUoX0lucHV0SXRlcmF0b3JCIF9fYmZpcnN0LAorCQkgICAgIF9JbnB1dEl0ZXJhdG9yQiBfX2JlbmQsCisJCSAgICAgX0lucHV0SXRlcmF0b3JXIF9fd2JlZ2luKTsKKworCXRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jPgorCSAgcGFyYW1fdHlwZShpbml0aWFsaXplcl9saXN0PF9SZWFsVHlwZT4gX19iaSwgX0Z1bmMgX19mdyk7CisKKwl0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuYz4KKwkgIHBhcmFtX3R5cGUoc2l6ZV90IF9fbncsIF9SZWFsVHlwZSBfX3htaW4sIF9SZWFsVHlwZSBfX3htYXgsCisJCSAgICAgX0Z1bmMgX19mdyk7CisKKwlzdGQ6OnZlY3RvcjxfUmVhbFR5cGU+CisJaW50ZXJ2YWxzKCkgY29uc3QKKwl7IHJldHVybiBfTV9pbnQ7IH0KKworCXN0ZDo6dmVjdG9yPGRvdWJsZT4KKwlkZW5zaXRpZXMoKSBjb25zdAorCXsgcmV0dXJuIF9NX2RlbjsgfQorCisJZnJpZW5kIGJvb2wKKwlvcGVyYXRvcj09KGNvbnN0IHBhcmFtX3R5cGUmIF9fcDEsIGNvbnN0IHBhcmFtX3R5cGUmIF9fcDIpCisJeyByZXR1cm4gX19wMS5fTV9pbnQgPT0gX19wMi5fTV9pbnQgJiYgX19wMS5fTV9kZW4gPT0gX19wMi5fTV9kZW47IH0KKworICAgICAgcHJpdmF0ZToKKwl2b2lkCisJX01faW5pdGlhbGl6ZSgpOworCisJc3RkOjp2ZWN0b3I8X1JlYWxUeXBlPiBfTV9pbnQ7CisJc3RkOjp2ZWN0b3I8ZG91YmxlPiBfTV9kZW47CisJc3RkOjp2ZWN0b3I8ZG91YmxlPiBfTV9jcDsKKyAgICAgIH07CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBwaWVjZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uKCkKKyAgICAgIDogX01fcGFyYW0oKQorICAgICAgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yQiwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3JXPgorCXBpZWNld2lzZV9jb25zdGFudF9kaXN0cmlidXRpb24oX0lucHV0SXRlcmF0b3JCIF9fYmZpcnN0LAorCQkJCQlfSW5wdXRJdGVyYXRvckIgX19iZW5kLAorCQkJCQlfSW5wdXRJdGVyYXRvclcgX193YmVnaW4pCisJOiBfTV9wYXJhbShfX2JmaXJzdCwgX19iZW5kLCBfX3diZWdpbikKKwl7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmM+CisJcGllY2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1dGlvbihpbml0aWFsaXplcl9saXN0PF9SZWFsVHlwZT4gX19ibCwKKwkJCQkJX0Z1bmMgX19mdykKKwk6IF9NX3BhcmFtKF9fYmwsIF9fZncpCisJeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jPgorCXBpZWNld2lzZV9jb25zdGFudF9kaXN0cmlidXRpb24oc2l6ZV90IF9fbncsCisJCQkJCV9SZWFsVHlwZSBfX3htaW4sIF9SZWFsVHlwZSBfX3htYXgsCisJCQkJCV9GdW5jIF9fZncpCisJOiBfTV9wYXJhbShfX253LCBfX3htaW4sIF9feG1heCwgX19mdykKKwl7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIHBpZWNld2lzZV9jb25zdGFudF9kaXN0cmlidXRpb24oY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgOiBfTV9wYXJhbShfX3ApCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmVzZXRzIHRoZSBkaXN0cmlidXRpb24gc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIGEgdmVjdG9yIG9mIHRoZSBpbnRlcnZhbHMuCisgICAgICAgKi8KKyAgICAgIHN0ZDo6dmVjdG9yPF9SZWFsVHlwZT4KKyAgICAgIGludGVydmFscygpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5pbnRlcnZhbHMoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIGEgdmVjdG9yIG9mIHRoZSBwcm9iYWJpbGl0eSBkZW5zaXRpZXMuCisgICAgICAgKi8KKyAgICAgIHN0ZDo6dmVjdG9yPGRvdWJsZT4KKyAgICAgIGRlbnNpdGllcygpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5kZW5zaXRpZXMoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHBhcmFtX3R5cGUKKyAgICAgIHBhcmFtKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFNldHMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIEBwYXJhbSBfX3BhcmFtIFRoZSBuZXcgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwYXJhbShjb25zdCBwYXJhbV90eXBlJiBfX3BhcmFtKQorICAgICAgeyBfTV9wYXJhbSA9IF9fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgZ3JlYXRlc3QgbG93ZXIgYm91bmQgdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5fTV9wYXJhbS5fTV9pbnQuZnJvbnQoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBsZWFzdCB1cHBlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX3BhcmFtLl9NX2ludC5iYWNrKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2VuZXJhdGluZyBmdW5jdGlvbnMuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorCXsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yKCkoX191cm5nLCB0aGlzLT5wYXJhbSgpKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKTsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgSW5zZXJ0cyBhICVwaWVjZXdpc2VfY29uc3Rhbl9kaXN0cmlidXRpb24gcmFuZG9tCisgICAgICAgKiAgICAgICAgbnVtYmVyIGRpc3RyaWJ1dGlvbiBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVwaWVjZXdpc2VfY29uc3Rhbl9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlcgorICAgICAgICogICAgICAgICAgICAgZGlzdHJpYnV0aW9uLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYsCisJCSAgIGNvbnN0IHN0ZDo6cGllY2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGUxPiYpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBFeHRyYWN0cyBhICVwaWVjZXdpc2VfY29uc3Rhbl9kaXN0cmlidXRpb24gcmFuZG9tCisgICAgICAgKiAgICAgICAgbnVtYmVyIGRpc3RyaWJ1dGlvbiBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCBBICVwaWVjZXdpc2VfY29uc3Rhbl9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlcgorICAgICAgICogICAgICAgICAgICBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBpbnB1dCBzdHJlYW0gd2l0aCBAcCBfX3ggZXh0cmFjdGVkIG9yIGluIGFuIGVycm9yCisgICAgICAgKiAgICAgICAgICBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiwKKwkJICAgc3RkOjpwaWVjZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+Jik7CisKKyAgICBwcml2YXRlOgorICAgICAgcGFyYW1fdHlwZSBfTV9wYXJhbTsKKyAgICB9OworCisgIC8qKgorICAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byBwaWVjZXdpc2UgY29uc3RhbnQgZGlzdHJpYnV0aW9ucyBoYXZlIHRoZQorICAgICogICAgICAgIHNhbWUgcGFyYW1ldGVycy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3Qgc3RkOjpwaWVjZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDEsCisJICAgICAgIGNvbnN0IHN0ZDo6cGllY2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QyKQorICAgIHsgcmV0dXJuIF9fZDEucGFyYW0oKSA9PSBfX2QyLnBhcmFtKCk7IH0KKworICAvKioKKyAgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gcGllY2V3aXNlIGNvbnN0YW50IGRpc3RyaWJ1dGlvbnMgaGF2ZSAKKyAgICAqICAgICAgICBkaWZmZXJlbnQgcGFyYW1ldGVycy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc3RkOjpwaWVjZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDEsCisJICAgICAgIGNvbnN0IHN0ZDo6cGllY2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QyKQorICAgIHsgcmV0dXJuICEoX19kMSA9PSBfX2QyKTsgfQorCisKKyAgLyoqCisgICAqIEBicmllZiBBIHBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgKgorICAgKiBUaGUgZm9ybXVsYSBmb3IgdGhlIHBpZWNld2lzZSBsaW5lYXIgcHJvYmFiaWxpdHkgbWFzcyBmdW5jdGlvbiBpcworICAgKgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlID0gZG91YmxlPgorICAgIGNsYXNzIHBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PF9SZWFsVHlwZT46OnZhbHVlLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IG5vdCBhIGZsb2F0aW5nIHBvaW50IHR5cGUiKTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KKyAgICAgIHR5cGVkZWYgX1JlYWxUeXBlIHJlc3VsdF90eXBlOworICAgICAgLyoqIFBhcmFtZXRlciB0eXBlLiAqLworICAgICAgc3RydWN0IHBhcmFtX3R5cGUKKyAgICAgIHsKKwl0eXBlZGVmIHBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4gZGlzdHJpYnV0aW9uX3R5cGU7CisJZnJpZW5kIGNsYXNzIHBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT47CisKKwlwYXJhbV90eXBlKCkKKwk6IF9NX2ludCgpLCBfTV9kZW4oKSwgX01fY3AoKSwgX01fbSgpCisJeyBfTV9pbml0aWFsaXplKCk7IH0KKworCXRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yQiwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3JXPgorCSAgcGFyYW1fdHlwZShfSW5wdXRJdGVyYXRvckIgX19iZmlyc3QsCisJCSAgICAgX0lucHV0SXRlcmF0b3JCIF9fYmVuZCwKKwkJICAgICBfSW5wdXRJdGVyYXRvclcgX193YmVnaW4pOworCisJdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmM+CisJICBwYXJhbV90eXBlKGluaXRpYWxpemVyX2xpc3Q8X1JlYWxUeXBlPiBfX2JsLCBfRnVuYyBfX2Z3KTsKKworCXRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jPgorCSAgcGFyYW1fdHlwZShzaXplX3QgX19udywgX1JlYWxUeXBlIF9feG1pbiwgX1JlYWxUeXBlIF9feG1heCwKKwkJICAgICBfRnVuYyBfX2Z3KTsKKworCXN0ZDo6dmVjdG9yPF9SZWFsVHlwZT4KKwlpbnRlcnZhbHMoKSBjb25zdAorCXsgcmV0dXJuIF9NX2ludDsgfQorCisJc3RkOjp2ZWN0b3I8ZG91YmxlPgorCWRlbnNpdGllcygpIGNvbnN0CisJeyByZXR1cm4gX01fZGVuOyB9CisKKwlmcmllbmQgYm9vbAorCW9wZXJhdG9yPT0oY29uc3QgcGFyYW1fdHlwZSYgX19wMSwgY29uc3QgcGFyYW1fdHlwZSYgX19wMikKKwl7IHJldHVybiAoX19wMS5fTV9pbnQgPT0gX19wMi5fTV9pbnQKKwkJICAmJiBfX3AxLl9NX2RlbiA9PSBfX3AyLl9NX2Rlbik7IH0KKworICAgICAgcHJpdmF0ZToKKwl2b2lkCisJX01faW5pdGlhbGl6ZSgpOworCisJc3RkOjp2ZWN0b3I8X1JlYWxUeXBlPiBfTV9pbnQ7CisJc3RkOjp2ZWN0b3I8ZG91YmxlPiBfTV9kZW47CisJc3RkOjp2ZWN0b3I8ZG91YmxlPiBfTV9jcDsKKwlzdGQ6OnZlY3Rvcjxkb3VibGU+IF9NX207CisgICAgICB9OworCisgICAgICBleHBsaWNpdAorICAgICAgcGllY2V3aXNlX2xpbmVhcl9kaXN0cmlidXRpb24oKQorICAgICAgOiBfTV9wYXJhbSgpCisgICAgICB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3JCLCB0eXBlbmFtZSBfSW5wdXRJdGVyYXRvclc+CisJcGllY2V3aXNlX2xpbmVhcl9kaXN0cmlidXRpb24oX0lucHV0SXRlcmF0b3JCIF9fYmZpcnN0LAorCQkJCSAgICAgIF9JbnB1dEl0ZXJhdG9yQiBfX2JlbmQsCisJCQkJICAgICAgX0lucHV0SXRlcmF0b3JXIF9fd2JlZ2luKQorCTogX01fcGFyYW0oX19iZmlyc3QsIF9fYmVuZCwgX193YmVnaW4pCisJeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jPgorCXBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uKGluaXRpYWxpemVyX2xpc3Q8X1JlYWxUeXBlPiBfX2JsLAorCQkJCSAgICAgIF9GdW5jIF9fZncpCisJOiBfTV9wYXJhbShfX2JsLCBfX2Z3KQorCXsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuYz4KKwlwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbihzaXplX3QgX19udywKKwkJCQkgICAgICBfUmVhbFR5cGUgX194bWluLCBfUmVhbFR5cGUgX194bWF4LAorCQkJCSAgICAgIF9GdW5jIF9fZncpCisJOiBfTV9wYXJhbShfX253LCBfX3htaW4sIF9feG1heCwgX19mdykKKwl7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIHBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uKGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgIDogX01fcGFyYW0oX19wKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogUmVzZXRzIHRoZSBkaXN0cmlidXRpb24gc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm4gdGhlIGludGVydmFscyBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBzdGQ6OnZlY3RvcjxfUmVhbFR5cGU+CisgICAgICBpbnRlcnZhbHMoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0uaW50ZXJ2YWxzKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJuIGEgdmVjdG9yIG9mIHRoZSBwcm9iYWJpbGl0eSBkZW5zaXRpZXMgb2YgdGhlCisgICAgICAgKiAgICAgICAgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBzdGQ6OnZlY3Rvcjxkb3VibGU+CisgICAgICBkZW5zaXRpZXMoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0uZGVuc2l0aWVzKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBwYXJhbV90eXBlCisgICAgICBwYXJhbSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBTZXRzIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBAcGFyYW0gX19wYXJhbSBUaGUgbmV3IHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcGFyYW0oY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsgX01fcGFyYW0gPSBfX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGdyZWF0ZXN0IGxvd2VyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01fcGFyYW0uX01faW50LmZyb250KCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgbGVhc3QgdXBwZXIgYm91bmQgdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1heCgpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5fTV9wYXJhbS5fTV9pbnQuYmFjaygpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdlbmVyYXRpbmcgZnVuY3Rpb25zLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKwl7IHJldHVybiB0aGlzLT5vcGVyYXRvcigpKF9fdXJuZywgdGhpcy0+cGFyYW0oKSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCk7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEluc2VydHMgYSAlcGllY2V3aXNlX2xpbmVhcl9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlcgorICAgICAgICogICAgICAgIGRpc3RyaWJ1dGlvbiBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyCisgICAgICAgKiAgICAgICAgICAgICBkaXN0cmlidXRpb24uCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiAgICAgICAgICBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiwKKwkJICAgY29uc3Qgc3RkOjpwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGUxPiYpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBFeHRyYWN0cyBhICVwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyCisgICAgICAgKiAgICAgICAgZGlzdHJpYnV0aW9uIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyCisgICAgICAgKiAgICAgICAgICAgICBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBpbnB1dCBzdHJlYW0gd2l0aCBAcCBfX3ggZXh0cmFjdGVkIG9yIGluIGFuIGVycm9yCisgICAgICAgKiAgICAgICAgICBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiwKKwkJICAgc3RkOjpwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGUxPiYpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHBhcmFtX3R5cGUgX01fcGFyYW07CisgICAgfTsKKworICAvKioKKyAgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gcGllY2V3aXNlIGxpbmVhciBkaXN0cmlidXRpb25zIGhhdmUgdGhlCisgICAgKiAgICAgICAgc2FtZSBwYXJhbWV0ZXJzLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBzdGQ6OnBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDEsCisJICAgICAgIGNvbnN0IHN0ZDo6cGllY2V3aXNlX2xpbmVhcl9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX19kMikKKyAgICB7IHJldHVybiBfX2QxLnBhcmFtKCkgPT0gX19kMi5wYXJhbSgpOyB9CisKKyAgLyoqCisgICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIHBpZWNld2lzZSBsaW5lYXIgZGlzdHJpYnV0aW9ucyBoYXZlCisgICAgKiAgICAgICAgZGlmZmVyZW50IHBhcmFtZXRlcnMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHN0ZDo6cGllY2V3aXNlX2xpbmVhcl9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX19kMSwKKwkgICAgICAgY29uc3Qgc3RkOjpwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QyKQorICAgIHsgcmV0dXJuICEoX19kMSA9PSBfX2QyKTsgfQorCisKKyAgLyogQH0gKi8gLy8gZ3JvdXAgcmFuZG9tX2Rpc3RyaWJ1dGlvbnNfcG9pc3NvbgorCisgIC8qIEB9ICovIC8vIGdyb3VwIHJhbmRvbV9kaXN0cmlidXRpb25zCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIHJhbmRvbV91dGlsaXRpZXMgUmFuZG9tIE51bWJlciBVdGlsaXRpZXMKKyAgICogQGluZ3JvdXAgcmFuZG9tCisgICAqIEB7CisgICAqLworCisgIC8qKgorICAgKiBAYnJpZWYgVGhlIHNlZWRfc2VxIGNsYXNzIGdlbmVyYXRlcyBzZXF1ZW5jZXMgb2Ygc2VlZHMgZm9yIHJhbmRvbQorICAgKiAgICAgICAgbnVtYmVyIGdlbmVyYXRvcnMuCisgICAqLworICBjbGFzcyBzZWVkX3NlcQorICB7CisKKyAgcHVibGljOgorICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgc2VlZCB2YWxlcy4gKi8KKyAgICB0eXBlZGVmIHVpbnRfbGVhc3QzMl90IHJlc3VsdF90eXBlOworCisgICAgLyoqIERlZmF1bHQgY29uc3RydWN0b3IuICovCisgICAgc2VlZF9zZXEoKQorICAgIDogX01fdigpCisgICAgeyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZT4KKyAgICAgIHNlZWRfc2VxKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfSW50VHlwZT4gaWwpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICBzZWVkX3NlcShfSW5wdXRJdGVyYXRvciBfX2JlZ2luLCBfSW5wdXRJdGVyYXRvciBfX2VuZCk7CisKKyAgICAvLyBnZW5lcmF0aW5nIGZ1bmN0aW9ucworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIGdlbmVyYXRlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2JlZ2luLCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19lbmQpOworCisgICAgLy8gcHJvcGVydHkgZnVuY3Rpb25zCisgICAgc2l6ZV90IHNpemUoKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX3Yuc2l6ZSgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRwdXRJdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIHBhcmFtKE91dHB1dEl0ZXJhdG9yIF9fZGVzdCkgY29uc3QKKyAgICAgIHsgc3RkOjpjb3B5KF9NX3YuYmVnaW4oKSwgX01fdi5lbmQoKSwgX19kZXN0KTsgfQorCisgIHByaXZhdGU6CisgICAgLy8vCisgICAgc3RkOjp2ZWN0b3I8cmVzdWx0X3R5cGU+IF9NX3Y7CisgIH07CisKKyAgLyogQH0gKi8gLy8gZ3JvdXAgcmFuZG9tX3V0aWxpdGllcworCisgIC8qIEB9ICovIC8vIGdyb3VwIHJhbmRvbQorCit9CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9yYW5kb20udGNjIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3JhbmRvbS50Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNlMmFjNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9yYW5kb20udGNjCkBAIC0wLDAgKzEsMjc4NiBAQAorLy8gcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIChvdXQgb2YgbGluZSkgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL3JhbmRvbS50Y2MKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2luY2x1ZGUgPG51bWVyaWM+IC8vIHN0ZDo6YWNjdW11bGF0ZSBhbmQgc3RkOjpwYXJ0aWFsX3N1bQorCituYW1lc3BhY2Ugc3RkCit7CisgIC8qCisgICAqIChGdXJ0aGVyKSBpbXBsZW1lbnRhdGlvbi1zcGFjZSBkZXRhaWxzLgorICAgKi8KKyAgbmFtZXNwYWNlIF9fZGV0YWlsCisgIHsKKyAgICAvLyBHZW5lcmFsIGNhc2UgZm9yIHggPSAoYXggKyBjKSBtb2QgbSAtLSB1c2UgU2NocmFnZSdzIGFsZ29yaXRobSB0bworICAgIC8vIGF2b2lkIGludGVnZXIgb3ZlcmZsb3cuCisgICAgLy8KKyAgICAvLyBCZWNhdXNlIGEgYW5kIGMgYXJlIGNvbXBpbGUtdGltZSBpbnRlZ3JhbCBjb25zdGFudHMgdGhlIGNvbXBpbGVyCisgICAgLy8ga2luZGx5IGVsaWRlcyBhbnkgdW5yZWFjaGFibGUgcGF0aHMuCisgICAgLy8KKyAgICAvLyBQcmVjb25kaXRpb25zOiAgYSA+IDAsIG0gPiAwLgorICAgIC8vCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfVHAgX19tLCBfVHAgX19hLCBfVHAgX19jLCBib29sPgorICAgICAgc3RydWN0IF9Nb2QKKyAgICAgIHsKKwlzdGF0aWMgX1RwCisJX19jYWxjKF9UcCBfX3gpCisJeworCSAgaWYgKF9fYSA9PSAxKQorCSAgICBfX3ggJT0gX19tOworCSAgZWxzZQorCSAgICB7CisJICAgICAgc3RhdGljIGNvbnN0IF9UcCBfX3EgPSBfX20gLyBfX2E7CisJICAgICAgc3RhdGljIGNvbnN0IF9UcCBfX3IgPSBfX20gJSBfX2E7CisKKwkgICAgICBfVHAgX190MSA9IF9fYSAqIChfX3ggJSBfX3EpOworCSAgICAgIF9UcCBfX3QyID0gX19yICogKF9feCAvIF9fcSk7CisJICAgICAgaWYgKF9fdDEgPj0gX190MikKKwkJX194ID0gX190MSAtIF9fdDI7CisJICAgICAgZWxzZQorCQlfX3ggPSBfX20gLSBfX3QyICsgX190MTsKKwkgICAgfQorCisJICBpZiAoX19jICE9IDApCisJICAgIHsKKwkgICAgICBjb25zdCBfVHAgX19kID0gX19tIC0gX194OworCSAgICAgIGlmIChfX2QgPiBfX2MpCisJCV9feCArPSBfX2M7CisJICAgICAgZWxzZQorCQlfX3ggPSBfX2MgLSBfX2Q7CisJICAgIH0KKwkgIHJldHVybiBfX3g7CisJfQorICAgICAgfTsKKworICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgbSA9PSAwIC0tIHVzZSB1bnNpZ25lZCBpbnRlZ2VyIG92ZXJmbG93IGFzIG1vZHVsbworICAgIC8vIG9wZXJhdG9yLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX1RwIF9fbSwgX1RwIF9fYSwgX1RwIF9fYz4KKyAgICAgIHN0cnVjdCBfTW9kPF9UcCwgX19tLCBfX2EsIF9fYywgdHJ1ZT4KKyAgICAgIHsKKwlzdGF0aWMgX1RwCisJX19jYWxjKF9UcCBfX3gpCisJeyByZXR1cm4gX19hICogX194ICsgX19jOyB9CisgICAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwKKwkgICAgIHR5cGVuYW1lIF9VbmFyeU9wZXJhdGlvbj4KKyAgICAgIF9PdXRwdXRJdGVyYXRvcgorICAgICAgX190cmFuc2Zvcm0oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX1VuYXJ5T3BlcmF0aW9uIF9fdW5hcnlfb3ApCisgICAgICB7CisJZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCisJICAqX19yZXN1bHQgPSBfX3VuYXJ5X29wKCpfX2ZpcnN0KTsKKwlyZXR1cm4gX19yZXN1bHQ7CisgICAgICB9CisgIH0gLy8gbmFtZXNwYWNlIF9fZGV0YWlsCisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIF9VSW50VHlwZSBfX2EsIF9VSW50VHlwZSBfX2MsIF9VSW50VHlwZSBfX20+CisgICAgY29uc3QgX1VJbnRUeXBlCisgICAgbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmU8X1VJbnRUeXBlLCBfX2EsIF9fYywgX19tPjo6bXVsdGlwbGllcjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIF9VSW50VHlwZSBfX2EsIF9VSW50VHlwZSBfX2MsIF9VSW50VHlwZSBfX20+CisgICAgY29uc3QgX1VJbnRUeXBlCisgICAgbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmU8X1VJbnRUeXBlLCBfX2EsIF9fYywgX19tPjo6aW5jcmVtZW50OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwgX1VJbnRUeXBlIF9fYSwgX1VJbnRUeXBlIF9fYywgX1VJbnRUeXBlIF9fbT4KKyAgICBjb25zdCBfVUludFR5cGUKKyAgICBsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2luZTxfVUludFR5cGUsIF9fYSwgX19jLCBfX20+Ojptb2R1bHVzOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwgX1VJbnRUeXBlIF9fYSwgX1VJbnRUeXBlIF9fYywgX1VJbnRUeXBlIF9fbT4KKyAgICBjb25zdCBfVUludFR5cGUKKyAgICBsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2luZTxfVUludFR5cGUsIF9fYSwgX19jLCBfX20+OjpkZWZhdWx0X3NlZWQ7CisKKyAgLyoqCisgICAqIFNlZWRzIHRoZSBMQ1Igd2l0aCBpbnRlZ3JhbCB2YWx1ZSBAcCBfX3MsIGFkanVzdGVkIHNvIHRoYXQgdGhlCisgICAqIHJpbmcgaWRlbnRpdHkgaXMgbmV2ZXIgYSBtZW1iZXIgb2YgdGhlIGNvbnZlcmdlbmNlIHNldC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwgX1VJbnRUeXBlIF9fYSwgX1VJbnRUeXBlIF9fYywgX1VJbnRUeXBlIF9fbT4KKyAgICB2b2lkCisgICAgbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmU8X1VJbnRUeXBlLCBfX2EsIF9fYywgX19tPjo6CisgICAgc2VlZChyZXN1bHRfdHlwZSBfX3MpCisgICAgeworICAgICAgaWYgKChfX2RldGFpbDo6X19tb2Q8X1VJbnRUeXBlLCBfX20+KF9fYykgPT0gMCkKKwkgICYmIChfX2RldGFpbDo6X19tb2Q8X1VJbnRUeXBlLCBfX20+KF9fcykgPT0gMCkpCisJX01feCA9IDE7CisgICAgICBlbHNlCisJX01feCA9IF9fZGV0YWlsOjpfX21vZDxfVUludFR5cGUsIF9fbT4oX19zKTsKKyAgICB9CisKKyAgLyoqCisgICAqIFNlZWRzIHRoZSBMQ1IgZW5naW5lIHdpdGggYSB2YWx1ZSBnZW5lcmF0ZWQgYnkgQHAgX19xLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLCBfVUludFR5cGUgX19hLCBfVUludFR5cGUgX19jLCBfVUludFR5cGUgX19tPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Tc2VxPgorICAgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19jbGFzczxfU3NlcT46OnZhbHVlPjo6dHlwZQorICAgICAgbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmU8X1VJbnRUeXBlLCBfX2EsIF9fYywgX19tPjo6CisgICAgICBzZWVkKF9Tc2VxJiBfX3EpCisgICAgICB7CisJY29uc3QgX1VJbnRUeXBlIF9fazAgPSBfX20gPT0gMCA/IHN0ZDo6bnVtZXJpY19saW1pdHM8X1VJbnRUeXBlPjo6ZGlnaXRzCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN0ZDo6X19sZyhfX20pOworCWNvbnN0IF9VSW50VHlwZSBfX2sgPSAoX19rMCArIDMxKSAvIDMyOworCXVpbnRfbGVhc3QzMl90IF9fYXJyW19fayArIDNdOworCV9fcS5nZW5lcmF0ZShfX2FyciArIDAsIF9fYXJyICsgX19rICsgMyk7CisJX1VJbnRUeXBlIF9fZmFjdG9yID0gMXU7CisJX1VJbnRUeXBlIF9fc3VtID0gMHU7CisJZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19rOyArK19faikKKwkgIHsKKwkgICAgX19zdW0gKz0gX19hcnJbX19qICsgM10gKiBfX2ZhY3RvcjsKKwkgICAgX19mYWN0b3IgKj0gX19kZXRhaWw6Ol9TaGlmdDxfVUludFR5cGUsIDMyPjo6X192YWx1ZTsKKwkgIH0KKwlzZWVkKF9fc3VtKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIF9VSW50VHlwZSBfX2EsIF9VSW50VHlwZSBfX2MsIF9VSW50VHlwZSBfX20sCisJICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IGxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lPF9VSW50VHlwZSwKKwkJCQkJCV9fYSwgX19jLCBfX20+JiBfX2xjcikKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OmRlYyB8IF9faW9zX2Jhc2U6OmZpeGVkIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19vcy53aWRlbignICcpKTsKKworICAgICAgX19vcyA8PCBfX2xjci5fTV94OworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLCBfVUludFR5cGUgX19hLCBfVUludFR5cGUgX19jLCBfVUludFR5cGUgX19tLAorCSAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICBsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2luZTxfVUludFR5cGUsIF9fYSwgX19jLCBfX20+JiBfX2xjcikKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lzLmZsYWdzKCk7CisgICAgICBfX2lzLmZsYWdzKF9faW9zX2Jhc2U6OmRlYyk7CisKKyAgICAgIF9faXMgPj4gX19sY3IuX01feDsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwKKwkgICBzaXplX3QgX193LCBzaXplX3QgX19uLCBzaXplX3QgX19tLCBzaXplX3QgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIHNpemVfdCBfX3UsIF9VSW50VHlwZSBfX2QsIHNpemVfdCBfX3MsCisJICAgX1VJbnRUeXBlIF9fYiwgc2l6ZV90IF9fdCwgX1VJbnRUeXBlIF9fYywgc2l6ZV90IF9fbCwKKwkgICBfVUludFR5cGUgX19mPgorICAgIGNvbnN0IHNpemVfdAorICAgIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwgX19yLCBfX2EsIF9fdSwgX19kLAorCQkJICAgIF9fcywgX19iLCBfX3QsIF9fYywgX19sLCBfX2Y+Ojp3b3JkX3NpemU7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLAorCSAgIHNpemVfdCBfX3csIHNpemVfdCBfX24sIHNpemVfdCBfX20sIHNpemVfdCBfX3IsCisJICAgX1VJbnRUeXBlIF9fYSwgc2l6ZV90IF9fdSwgX1VJbnRUeXBlIF9fZCwgc2l6ZV90IF9fcywKKwkgICBfVUludFR5cGUgX19iLCBzaXplX3QgX190LCBfVUludFR5cGUgX19jLCBzaXplX3QgX19sLAorCSAgIF9VSW50VHlwZSBfX2Y+CisgICAgY29uc3Qgc2l6ZV90CisgICAgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLCBfX3IsIF9fYSwgX191LCBfX2QsCisJCQkgICAgX19zLCBfX2IsIF9fdCwgX19jLCBfX2wsIF9fZj46OnN0YXRlX3NpemU7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLAorCSAgIHNpemVfdCBfX3csIHNpemVfdCBfX24sIHNpemVfdCBfX20sIHNpemVfdCBfX3IsCisJICAgX1VJbnRUeXBlIF9fYSwgc2l6ZV90IF9fdSwgX1VJbnRUeXBlIF9fZCwgc2l6ZV90IF9fcywKKwkgICBfVUludFR5cGUgX19iLCBzaXplX3QgX190LCBfVUludFR5cGUgX19jLCBzaXplX3QgX19sLAorCSAgIF9VSW50VHlwZSBfX2Y+CisgICAgY29uc3Qgc2l6ZV90CisgICAgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLCBfX3IsIF9fYSwgX191LCBfX2QsCisJCQkgICAgX19zLCBfX2IsIF9fdCwgX19jLCBfX2wsIF9fZj46OnNoaWZ0X3NpemU7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLAorCSAgIHNpemVfdCBfX3csIHNpemVfdCBfX24sIHNpemVfdCBfX20sIHNpemVfdCBfX3IsCisJICAgX1VJbnRUeXBlIF9fYSwgc2l6ZV90IF9fdSwgX1VJbnRUeXBlIF9fZCwgc2l6ZV90IF9fcywKKwkgICBfVUludFR5cGUgX19iLCBzaXplX3QgX190LCBfVUludFR5cGUgX19jLCBzaXplX3QgX19sLAorCSAgIF9VSW50VHlwZSBfX2Y+CisgICAgY29uc3Qgc2l6ZV90CisgICAgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLCBfX3IsIF9fYSwgX191LCBfX2QsCisJCQkgICAgX19zLCBfX2IsIF9fdCwgX19jLCBfX2wsIF9fZj46Om1hc2tfYml0czsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsCisJICAgc2l6ZV90IF9fdywgc2l6ZV90IF9fbiwgc2l6ZV90IF9fbSwgc2l6ZV90IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBzaXplX3QgX191LCBfVUludFR5cGUgX19kLCBzaXplX3QgX19zLAorCSAgIF9VSW50VHlwZSBfX2IsIHNpemVfdCBfX3QsIF9VSW50VHlwZSBfX2MsIHNpemVfdCBfX2wsCisJICAgX1VJbnRUeXBlIF9fZj4KKyAgICBjb25zdCBfVUludFR5cGUKKyAgICBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZTxfVUludFR5cGUsIF9fdywgX19uLCBfX20sIF9fciwgX19hLCBfX3UsIF9fZCwKKwkJCSAgICBfX3MsIF9fYiwgX190LCBfX2MsIF9fbCwgX19mPjo6eG9yX21hc2s7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLAorCSAgIHNpemVfdCBfX3csIHNpemVfdCBfX24sIHNpemVfdCBfX20sIHNpemVfdCBfX3IsCisJICAgX1VJbnRUeXBlIF9fYSwgc2l6ZV90IF9fdSwgX1VJbnRUeXBlIF9fZCwgc2l6ZV90IF9fcywKKwkgICBfVUludFR5cGUgX19iLCBzaXplX3QgX190LCBfVUludFR5cGUgX19jLCBzaXplX3QgX19sLAorCSAgIF9VSW50VHlwZSBfX2Y+CisgICAgY29uc3Qgc2l6ZV90CisgICAgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLCBfX3IsIF9fYSwgX191LCBfX2QsCisJCQkgICAgX19zLCBfX2IsIF9fdCwgX19jLCBfX2wsIF9fZj46OnRlbXBlcmluZ191OworICAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwKKwkgICBzaXplX3QgX193LCBzaXplX3QgX19uLCBzaXplX3QgX19tLCBzaXplX3QgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIHNpemVfdCBfX3UsIF9VSW50VHlwZSBfX2QsIHNpemVfdCBfX3MsCisJICAgX1VJbnRUeXBlIF9fYiwgc2l6ZV90IF9fdCwgX1VJbnRUeXBlIF9fYywgc2l6ZV90IF9fbCwKKwkgICBfVUludFR5cGUgX19mPgorICAgIGNvbnN0IF9VSW50VHlwZQorICAgIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwgX19yLCBfX2EsIF9fdSwgX19kLAorCQkJICAgIF9fcywgX19iLCBfX3QsIF9fYywgX19sLCBfX2Y+Ojp0ZW1wZXJpbmdfZDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsCisJICAgc2l6ZV90IF9fdywgc2l6ZV90IF9fbiwgc2l6ZV90IF9fbSwgc2l6ZV90IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBzaXplX3QgX191LCBfVUludFR5cGUgX19kLCBzaXplX3QgX19zLAorCSAgIF9VSW50VHlwZSBfX2IsIHNpemVfdCBfX3QsIF9VSW50VHlwZSBfX2MsIHNpemVfdCBfX2wsCisJICAgX1VJbnRUeXBlIF9fZj4KKyAgICBjb25zdCBzaXplX3QKKyAgICBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZTxfVUludFR5cGUsIF9fdywgX19uLCBfX20sIF9fciwgX19hLCBfX3UsIF9fZCwKKwkJCSAgICBfX3MsIF9fYiwgX190LCBfX2MsIF9fbCwgX19mPjo6dGVtcGVyaW5nX3M7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLAorCSAgIHNpemVfdCBfX3csIHNpemVfdCBfX24sIHNpemVfdCBfX20sIHNpemVfdCBfX3IsCisJICAgX1VJbnRUeXBlIF9fYSwgc2l6ZV90IF9fdSwgX1VJbnRUeXBlIF9fZCwgc2l6ZV90IF9fcywKKwkgICBfVUludFR5cGUgX19iLCBzaXplX3QgX190LCBfVUludFR5cGUgX19jLCBzaXplX3QgX19sLAorCSAgIF9VSW50VHlwZSBfX2Y+CisgICAgY29uc3QgX1VJbnRUeXBlCisgICAgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLCBfX3IsIF9fYSwgX191LCBfX2QsCisJCQkgICAgX19zLCBfX2IsIF9fdCwgX19jLCBfX2wsIF9fZj46OnRlbXBlcmluZ19iOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwKKwkgICBzaXplX3QgX193LCBzaXplX3QgX19uLCBzaXplX3QgX19tLCBzaXplX3QgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIHNpemVfdCBfX3UsIF9VSW50VHlwZSBfX2QsIHNpemVfdCBfX3MsCisJICAgX1VJbnRUeXBlIF9fYiwgc2l6ZV90IF9fdCwgX1VJbnRUeXBlIF9fYywgc2l6ZV90IF9fbCwKKwkgICBfVUludFR5cGUgX19mPgorICAgIGNvbnN0IHNpemVfdAorICAgIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwgX19yLCBfX2EsIF9fdSwgX19kLAorCQkJICAgIF9fcywgX19iLCBfX3QsIF9fYywgX19sLCBfX2Y+Ojp0ZW1wZXJpbmdfdDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsCisJICAgc2l6ZV90IF9fdywgc2l6ZV90IF9fbiwgc2l6ZV90IF9fbSwgc2l6ZV90IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBzaXplX3QgX191LCBfVUludFR5cGUgX19kLCBzaXplX3QgX19zLAorCSAgIF9VSW50VHlwZSBfX2IsIHNpemVfdCBfX3QsIF9VSW50VHlwZSBfX2MsIHNpemVfdCBfX2wsCisJICAgX1VJbnRUeXBlIF9fZj4KKyAgICBjb25zdCBfVUludFR5cGUKKyAgICBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZTxfVUludFR5cGUsIF9fdywgX19uLCBfX20sIF9fciwgX19hLCBfX3UsIF9fZCwKKwkJCSAgICBfX3MsIF9fYiwgX190LCBfX2MsIF9fbCwgX19mPjo6dGVtcGVyaW5nX2M7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLAorCSAgIHNpemVfdCBfX3csIHNpemVfdCBfX24sIHNpemVfdCBfX20sIHNpemVfdCBfX3IsCisJICAgX1VJbnRUeXBlIF9fYSwgc2l6ZV90IF9fdSwgX1VJbnRUeXBlIF9fZCwgc2l6ZV90IF9fcywKKwkgICBfVUludFR5cGUgX19iLCBzaXplX3QgX190LCBfVUludFR5cGUgX19jLCBzaXplX3QgX19sLAorCSAgIF9VSW50VHlwZSBfX2Y+CisgICAgY29uc3Qgc2l6ZV90CisgICAgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLCBfX3IsIF9fYSwgX191LCBfX2QsCisJCQkgICAgX19zLCBfX2IsIF9fdCwgX19jLCBfX2wsIF9fZj46OnRlbXBlcmluZ19sOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwKKwkgICBzaXplX3QgX193LCBzaXplX3QgX19uLCBzaXplX3QgX19tLCBzaXplX3QgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIHNpemVfdCBfX3UsIF9VSW50VHlwZSBfX2QsIHNpemVfdCBfX3MsCisJICAgX1VJbnRUeXBlIF9fYiwgc2l6ZV90IF9fdCwgX1VJbnRUeXBlIF9fYywgc2l6ZV90IF9fbCwKKwkgICBfVUludFR5cGUgX19mPgorICAgIGNvbnN0IF9VSW50VHlwZQorICAgIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwgX19yLCBfX2EsIF9fdSwgX19kLAorCQkJICAgIF9fcywgX19iLCBfX3QsIF9fYywgX19sLCBfX2Y+OjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXphdGlvbl9tdWx0aXBsaWVyOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwKKwkgICBzaXplX3QgX193LCBzaXplX3QgX19uLCBzaXplX3QgX19tLCBzaXplX3QgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIHNpemVfdCBfX3UsIF9VSW50VHlwZSBfX2QsIHNpemVfdCBfX3MsCisJICAgX1VJbnRUeXBlIF9fYiwgc2l6ZV90IF9fdCwgX1VJbnRUeXBlIF9fYywgc2l6ZV90IF9fbCwKKwkgICBfVUludFR5cGUgX19mPgorICAgIGNvbnN0IF9VSW50VHlwZQorICAgIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwgX19yLCBfX2EsIF9fdSwgX19kLAorCQkJICAgIF9fcywgX19iLCBfX3QsIF9fYywgX19sLCBfX2Y+OjpkZWZhdWx0X3NlZWQ7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLAorCSAgIHNpemVfdCBfX3csIHNpemVfdCBfX24sIHNpemVfdCBfX20sIHNpemVfdCBfX3IsCisJICAgX1VJbnRUeXBlIF9fYSwgc2l6ZV90IF9fdSwgX1VJbnRUeXBlIF9fZCwgc2l6ZV90IF9fcywKKwkgICBfVUludFR5cGUgX19iLCBzaXplX3QgX190LCBfVUludFR5cGUgX19jLCBzaXplX3QgX19sLAorCSAgIF9VSW50VHlwZSBfX2Y+CisgICAgdm9pZAorICAgIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwgX19yLCBfX2EsIF9fdSwgX19kLAorCQkJICAgIF9fcywgX19iLCBfX3QsIF9fYywgX19sLCBfX2Y+OjoKKyAgICBzZWVkKHJlc3VsdF90eXBlIF9fc2QpCisgICAgeworICAgICAgX01feFswXSA9IF9fZGV0YWlsOjpfX21vZDxfVUludFR5cGUsCisJX19kZXRhaWw6Ol9TaGlmdDxfVUludFR5cGUsIF9fdz46Ol9fdmFsdWU+KF9fc2QpOworCisgICAgICBmb3IgKHNpemVfdCBfX2kgPSAxOyBfX2kgPCBzdGF0ZV9zaXplOyArK19faSkKKwl7CisJICBfVUludFR5cGUgX194ID0gX01feFtfX2kgLSAxXTsKKwkgIF9feCBePSBfX3ggPj4gKF9fdyAtIDIpOworCSAgX194ICo9IF9fZjsKKwkgIF9feCArPSBfX2RldGFpbDo6X19tb2Q8X1VJbnRUeXBlLCBfX24+KF9faSk7CisJICBfTV94W19faV0gPSBfX2RldGFpbDo6X19tb2Q8X1VJbnRUeXBlLAorCSAgICBfX2RldGFpbDo6X1NoaWZ0PF9VSW50VHlwZSwgX193Pjo6X192YWx1ZT4oX194KTsKKwl9CisgICAgICBfTV9wID0gc3RhdGVfc2l6ZTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLAorCSAgIHNpemVfdCBfX3csIHNpemVfdCBfX24sIHNpemVfdCBfX20sIHNpemVfdCBfX3IsCisJICAgX1VJbnRUeXBlIF9fYSwgc2l6ZV90IF9fdSwgX1VJbnRUeXBlIF9fZCwgc2l6ZV90IF9fcywKKwkgICBfVUludFR5cGUgX19iLCBzaXplX3QgX190LCBfVUludFR5cGUgX19jLCBzaXplX3QgX19sLAorCSAgIF9VSW50VHlwZSBfX2Y+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1NzZXE+CisgICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2NsYXNzPF9Tc2VxPjo6dmFsdWU+Ojp0eXBlCisgICAgICBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZTxfVUludFR5cGUsIF9fdywgX19uLCBfX20sIF9fciwgX19hLCBfX3UsIF9fZCwKKwkJCSAgICAgIF9fcywgX19iLCBfX3QsIF9fYywgX19sLCBfX2Y+OjoKKyAgICAgIHNlZWQoX1NzZXEmIF9fcSkKKyAgICAgIHsKKwljb25zdCBfVUludFR5cGUgX191cHBlcl9tYXNrID0gKH5fVUludFR5cGUoKSkgPDwgX19yOworCWNvbnN0IHNpemVfdCBfX2sgPSAoX193ICsgMzEpIC8gMzI7CisJdWludF9sZWFzdDMyX3QgX19hcnJbX19uICogX19rXTsKKwlfX3EuZ2VuZXJhdGUoX19hcnIgKyAwLCBfX2FyciArIF9fbiAqIF9fayk7CisKKwlib29sIF9femVybyA9IHRydWU7CisJZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgc3RhdGVfc2l6ZTsgKytfX2kpCisJICB7CisJICAgIF9VSW50VHlwZSBfX2ZhY3RvciA9IDF1OworCSAgICBfVUludFR5cGUgX19zdW0gPSAwdTsKKwkgICAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19rOyArK19faikKKwkgICAgICB7CisJCV9fc3VtICs9IF9fYXJyW19fayAqIF9faSArIF9fal0gKiBfX2ZhY3RvcjsKKwkJX19mYWN0b3IgKj0gX19kZXRhaWw6Ol9TaGlmdDxfVUludFR5cGUsIDMyPjo6X192YWx1ZTsKKwkgICAgICB9CisJICAgIF9NX3hbX19pXSA9IF9fZGV0YWlsOjpfX21vZDxfVUludFR5cGUsCisJICAgICAgX19kZXRhaWw6Ol9TaGlmdDxfVUludFR5cGUsIF9fdz46Ol9fdmFsdWU+KF9fc3VtKTsKKworCSAgICBpZiAoX196ZXJvKQorCSAgICAgIHsKKwkJaWYgKF9faSA9PSAwKQorCQkgIHsKKwkJICAgIGlmICgoX01feFswXSAmIF9fdXBwZXJfbWFzaykgIT0gMHUpCisJCSAgICAgIF9femVybyA9IGZhbHNlOworCQkgIH0KKwkJZWxzZSBpZiAoX01feFtfX2ldICE9IDB1KQorCQkgIF9femVybyA9IGZhbHNlOworCSAgICAgIH0KKwkgIH0KKyAgICAgICAgaWYgKF9femVybykKKyAgICAgICAgICBfTV94WzBdID0gX19kZXRhaWw6Ol9TaGlmdDxfVUludFR5cGUsIF9fdyAtIDE+OjpfX3ZhbHVlOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwgc2l6ZV90IF9fdywKKwkgICBzaXplX3QgX19uLCBzaXplX3QgX19tLCBzaXplX3QgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIHNpemVfdCBfX3UsIF9VSW50VHlwZSBfX2QsIHNpemVfdCBfX3MsCisJICAgX1VJbnRUeXBlIF9fYiwgc2l6ZV90IF9fdCwgX1VJbnRUeXBlIF9fYywgc2l6ZV90IF9fbCwKKwkgICBfVUludFR5cGUgX19mPgorICAgIHR5cGVuYW1lCisgICAgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLCBfX3IsIF9fYSwgX191LCBfX2QsCisJCQkgICAgX19zLCBfX2IsIF9fdCwgX19jLCBfX2wsIF9fZj46OnJlc3VsdF90eXBlCisgICAgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLCBfX3IsIF9fYSwgX191LCBfX2QsCisJCQkgICAgX19zLCBfX2IsIF9fdCwgX19jLCBfX2wsIF9fZj46OgorICAgIG9wZXJhdG9yKCkoKQorICAgIHsKKyAgICAgIC8vIFJlbG9hZCB0aGUgdmVjdG9yIC0gY29zdCBpcyBPKG4pIGFtb3J0aXplZCBvdmVyIG4gY2FsbHMuCisgICAgICBpZiAoX01fcCA+PSBzdGF0ZV9zaXplKQorCXsKKwkgIGNvbnN0IF9VSW50VHlwZSBfX3VwcGVyX21hc2sgPSAofl9VSW50VHlwZSgpKSA8PCBfX3I7CisJICBjb25zdCBfVUludFR5cGUgX19sb3dlcl9tYXNrID0gfl9fdXBwZXJfbWFzazsKKworCSAgZm9yIChzaXplX3QgX19rID0gMDsgX19rIDwgKF9fbiAtIF9fbSk7ICsrX19rKQorCSAgICB7CisJICAgICAgX1VJbnRUeXBlIF9feSA9ICgoX01feFtfX2tdICYgX191cHBlcl9tYXNrKQorCQkJICAgICAgIHwgKF9NX3hbX19rICsgMV0gJiBfX2xvd2VyX21hc2spKTsKKwkgICAgICBfTV94W19fa10gPSAoX01feFtfX2sgKyBfX21dIF4gKF9feSA+PiAxKQorCQkJICAgXiAoKF9feSAmIDB4MDEpID8gX19hIDogMCkpOworCSAgICB9CisKKwkgIGZvciAoc2l6ZV90IF9fayA9IChfX24gLSBfX20pOyBfX2sgPCAoX19uIC0gMSk7ICsrX19rKQorCSAgICB7CisJICAgICAgX1VJbnRUeXBlIF9feSA9ICgoX01feFtfX2tdICYgX191cHBlcl9tYXNrKQorCQkJICAgICAgIHwgKF9NX3hbX19rICsgMV0gJiBfX2xvd2VyX21hc2spKTsKKwkgICAgICBfTV94W19fa10gPSAoX01feFtfX2sgKyAoX19tIC0gX19uKV0gXiAoX195ID4+IDEpCisJCQkgICBeICgoX195ICYgMHgwMSkgPyBfX2EgOiAwKSk7CisJICAgIH0KKworCSAgX1VJbnRUeXBlIF9feSA9ICgoX01feFtfX24gLSAxXSAmIF9fdXBwZXJfbWFzaykKKwkJCSAgIHwgKF9NX3hbMF0gJiBfX2xvd2VyX21hc2spKTsKKwkgIF9NX3hbX19uIC0gMV0gPSAoX01feFtfX20gLSAxXSBeIChfX3kgPj4gMSkKKwkJCSAgIF4gKChfX3kgJiAweDAxKSA/IF9fYSA6IDApKTsKKwkgIF9NX3AgPSAwOworCX0KKworICAgICAgLy8gQ2FsY3VsYXRlIG8oeChpKSkuCisgICAgICByZXN1bHRfdHlwZSBfX3ogPSBfTV94W19NX3ArK107CisgICAgICBfX3ogXj0gKF9feiA+PiBfX3UpICYgX19kOworICAgICAgX196IF49IChfX3ogPDwgX19zKSAmIF9fYjsKKyAgICAgIF9feiBePSAoX196IDw8IF9fdCkgJiBfX2M7CisgICAgICBfX3ogXj0gKF9feiA+PiBfX2wpOworCisgICAgICByZXR1cm4gX196OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIHNpemVfdCBfX3csCisJICAgc2l6ZV90IF9fbiwgc2l6ZV90IF9fbSwgc2l6ZV90IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBzaXplX3QgX191LCBfVUludFR5cGUgX19kLCBzaXplX3QgX19zLAorCSAgIF9VSW50VHlwZSBfX2IsIHNpemVfdCBfX3QsIF9VSW50VHlwZSBfX2MsIHNpemVfdCBfX2wsCisJICAgX1VJbnRUeXBlIF9fZiwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwKKwkgICAgICAgX19yLCBfX2EsIF9fdSwgX19kLCBfX3MsIF9fYiwgX190LCBfX2MsIF9fbCwgX19mPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpmaXhlZCB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fc3BhY2UpOworCisgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX24gLSAxOyArK19faSkKKwlfX29zIDw8IF9feC5fTV94W19faV0gPDwgX19zcGFjZTsKKyAgICAgIF9fb3MgPDwgX194Ll9NX3hbX19uIC0gMV07CisKKyAgICAgIF9fb3MuZmxhZ3MoX19mbGFncyk7CisgICAgICBfX29zLmZpbGwoX19maWxsKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIHNpemVfdCBfX3csCisJICAgc2l6ZV90IF9fbiwgc2l6ZV90IF9fbSwgc2l6ZV90IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBzaXplX3QgX191LCBfVUludFR5cGUgX19kLCBzaXplX3QgX19zLAorCSAgIF9VSW50VHlwZSBfX2IsIHNpemVfdCBfX3QsIF9VSW50VHlwZSBfX2MsIHNpemVfdCBfX2wsCisJICAgX1VJbnRUeXBlIF9fZiwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwKKwkgICAgICAgX19yLCBfX2EsIF9fdSwgX19kLCBfX3MsIF9fYiwgX190LCBfX2MsIF9fbCwgX19mPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6c2tpcHdzKTsKKworICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSkKKwlfX2lzID4+IF9feC5fTV94W19faV07CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIHNpemVfdCBfX3csIHNpemVfdCBfX3MsIHNpemVfdCBfX3I+CisgICAgY29uc3Qgc2l6ZV90CisgICAgc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmU8X1VJbnRUeXBlLCBfX3csIF9fcywgX19yPjo6d29yZF9zaXplOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwgc2l6ZV90IF9fdywgc2l6ZV90IF9fcywgc2l6ZV90IF9fcj4KKyAgICBjb25zdCBzaXplX3QKKyAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZTxfVUludFR5cGUsIF9fdywgX19zLCBfX3I+OjpzaG9ydF9sYWc7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLCBzaXplX3QgX193LCBzaXplX3QgX19zLCBzaXplX3QgX19yPgorICAgIGNvbnN0IHNpemVfdAorICAgIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lPF9VSW50VHlwZSwgX193LCBfX3MsIF9fcj46OmxvbmdfbGFnOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwgc2l6ZV90IF9fdywgc2l6ZV90IF9fcywgc2l6ZV90IF9fcj4KKyAgICBjb25zdCBfVUludFR5cGUKKyAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZTxfVUludFR5cGUsIF9fdywgX19zLCBfX3I+OjpkZWZhdWx0X3NlZWQ7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLCBzaXplX3QgX193LCBzaXplX3QgX19zLCBzaXplX3QgX19yPgorICAgIHZvaWQKKyAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZTxfVUludFR5cGUsIF9fdywgX19zLCBfX3I+OjoKKyAgICBzZWVkKHJlc3VsdF90eXBlIF9fdmFsdWUpCisgICAgeworICAgICAgc3RkOjpsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2luZTxyZXN1bHRfdHlwZSwgNDAwMTR1LCAwdSwgMjE0NzQ4MzU2M3U+CisJX19sY2coX192YWx1ZSA9PSAwdSA/IGRlZmF1bHRfc2VlZCA6IF9fdmFsdWUpOworCisgICAgICBjb25zdCBzaXplX3QgX19uID0gKF9fdyArIDMxKSAvIDMyOworCisgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBsb25nX2xhZzsgKytfX2kpCisJeworCSAgX1VJbnRUeXBlIF9fc3VtID0gMHU7CisJICBfVUludFR5cGUgX19mYWN0b3IgPSAxdTsKKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbjsgKytfX2opCisJICAgIHsKKwkgICAgICBfX3N1bSArPSBfX2RldGFpbDo6X19tb2Q8dWludF9sZWFzdDMyX3QsCisJCSAgICAgICBfX2RldGFpbDo6X1NoaWZ0PHVpbnRfbGVhc3QzMl90LCAzMj46Ol9fdmFsdWU+CisJCQkgKF9fbGNnKCkpICogX19mYWN0b3I7CisJICAgICAgX19mYWN0b3IgKj0gX19kZXRhaWw6Ol9TaGlmdDxfVUludFR5cGUsIDMyPjo6X192YWx1ZTsKKwkgICAgfQorCSAgX01feFtfX2ldID0gX19kZXRhaWw6Ol9fbW9kPF9VSW50VHlwZSwKKwkgICAgX19kZXRhaWw6Ol9TaGlmdDxfVUludFR5cGUsIF9fdz46Ol9fdmFsdWU+KF9fc3VtKTsKKwl9CisgICAgICBfTV9jYXJyeSA9IChfTV94W2xvbmdfbGFnIC0gMV0gPT0gMCkgPyAxIDogMDsKKyAgICAgIF9NX3AgPSAwOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIHNpemVfdCBfX3csIHNpemVfdCBfX3MsIHNpemVfdCBfX3I+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1NzZXE+CisgICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2NsYXNzPF9Tc2VxPjo6dmFsdWU+Ojp0eXBlCisgICAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZTxfVUludFR5cGUsIF9fdywgX19zLCBfX3I+OjoKKyAgICAgIHNlZWQoX1NzZXEmIF9fcSkKKyAgICAgIHsKKwljb25zdCBzaXplX3QgX19rID0gKF9fdyArIDMxKSAvIDMyOworCXVpbnRfbGVhc3QzMl90IF9fYXJyW19fciAqIF9fa107CisJX19xLmdlbmVyYXRlKF9fYXJyICsgMCwgX19hcnIgKyBfX3IgKiBfX2spOworCisJZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbG9uZ19sYWc7ICsrX19pKQorCSAgeworCSAgICBfVUludFR5cGUgX19zdW0gPSAwdTsKKwkgICAgX1VJbnRUeXBlIF9fZmFjdG9yID0gMXU7CisJICAgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fazsgKytfX2opCisJICAgICAgeworCQlfX3N1bSArPSBfX2FycltfX2sgKiBfX2kgKyBfX2pdICogX19mYWN0b3I7CisJCV9fZmFjdG9yICo9IF9fZGV0YWlsOjpfU2hpZnQ8X1VJbnRUeXBlLCAzMj46Ol9fdmFsdWU7CisJICAgICAgfQorCSAgICBfTV94W19faV0gPSBfX2RldGFpbDo6X19tb2Q8X1VJbnRUeXBlLAorCSAgICAgIF9fZGV0YWlsOjpfU2hpZnQ8X1VJbnRUeXBlLCBfX3c+OjpfX3ZhbHVlPihfX3N1bSk7CisJICB9CisJX01fY2FycnkgPSAoX01feFtsb25nX2xhZyAtIDFdID09IDApID8gMSA6IDA7CisJX01fcCA9IDA7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLCBzaXplX3QgX193LCBzaXplX3QgX19zLCBzaXplX3QgX19yPgorICAgIHR5cGVuYW1lIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lPF9VSW50VHlwZSwgX193LCBfX3MsIF9fcj46OgorCSAgICAgcmVzdWx0X3R5cGUKKyAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZTxfVUludFR5cGUsIF9fdywgX19zLCBfX3I+OjoKKyAgICBvcGVyYXRvcigpKCkKKyAgICB7CisgICAgICAvLyBEZXJpdmUgc2hvcnQgbGFnIGluZGV4IGZyb20gY3VycmVudCBpbmRleC4KKyAgICAgIGxvbmcgX19wcyA9IF9NX3AgLSBzaG9ydF9sYWc7CisgICAgICBpZiAoX19wcyA8IDApCisJX19wcyArPSBsb25nX2xhZzsKKworICAgICAgLy8gQ2FsY3VsYXRlIG5ldyB4KGkpIHdpdGhvdXQgb3ZlcmZsb3cgb3IgZGl2aXNpb24uCisgICAgICAvLyBOQjogVGhhbmtzIHRvIHRoZSByZXF1aXJlbWVudHMgZm9yIF9VSW50VHlwZSwgX01feFtfTV9wXSArIF9NX2NhcnJ5CisgICAgICAvLyBjYW5ub3Qgb3ZlcmZsb3cuCisgICAgICBfVUludFR5cGUgX194aTsKKyAgICAgIGlmIChfTV94W19fcHNdID49IF9NX3hbX01fcF0gKyBfTV9jYXJyeSkKKwl7CisJICBfX3hpID0gX01feFtfX3BzXSAtIF9NX3hbX01fcF0gLSBfTV9jYXJyeTsKKwkgIF9NX2NhcnJ5ID0gMDsKKwl9CisgICAgICBlbHNlCisJeworCSAgX194aSA9IChfX2RldGFpbDo6X1NoaWZ0PF9VSW50VHlwZSwgX193Pjo6X192YWx1ZQorCQkgIC0gX01feFtfTV9wXSAtIF9NX2NhcnJ5ICsgX01feFtfX3BzXSk7CisJICBfTV9jYXJyeSA9IDE7CisJfQorICAgICAgX01feFtfTV9wXSA9IF9feGk7CisKKyAgICAgIC8vIEFkanVzdCBjdXJyZW50IGluZGV4IHRvIGxvb3AgYXJvdW5kIGluIHJpbmcgYnVmZmVyLgorICAgICAgaWYgKCsrX01fcCA+PSBsb25nX2xhZykKKwlfTV9wID0gMDsKKworICAgICAgcmV0dXJuIF9feGk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwgc2l6ZV90IF9fdywgc2l6ZV90IF9fcywgc2l6ZV90IF9fciwKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3Qgc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmU8X1VJbnRUeXBlLAorCQkJCQkJX193LCBfX3MsIF9fcj4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19zcGFjZSA9IF9fb3Mud2lkZW4oJyAnKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6Zml4ZWQgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX3NwYWNlKTsKKworICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19yOyArK19faSkKKwlfX29zIDw8IF9feC5fTV94W19faV0gPDwgX19zcGFjZTsKKyAgICAgIF9fb3MgPDwgX194Ll9NX2NhcnJ5OworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLCBzaXplX3QgX193LCBzaXplX3QgX19zLCBzaXplX3QgX19yLAorCSAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZTxfVUludFR5cGUsIF9fdywgX19zLCBfX3I+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX3I7ICsrX19pKQorCV9faXMgPj4gX194Ll9NX3hbX19pXTsKKyAgICAgIF9faXMgPj4gX194Ll9NX2NhcnJ5OworCisgICAgICBfX2lzLmZsYWdzKF9fZmxhZ3MpOworICAgICAgcmV0dXJuIF9faXM7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbU51bWJlckVuZ2luZSwgc2l6ZV90IF9fcCwgc2l6ZV90IF9fcj4KKyAgICBjb25zdCBzaXplX3QKKyAgICBkaXNjYXJkX2Jsb2NrX2VuZ2luZTxfUmFuZG9tTnVtYmVyRW5naW5lLCBfX3AsIF9fcj46OmJsb2NrX3NpemU7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbU51bWJlckVuZ2luZSwgc2l6ZV90IF9fcCwgc2l6ZV90IF9fcj4KKyAgICBjb25zdCBzaXplX3QKKyAgICBkaXNjYXJkX2Jsb2NrX2VuZ2luZTxfUmFuZG9tTnVtYmVyRW5naW5lLCBfX3AsIF9fcj46OnVzZWRfYmxvY2s7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbU51bWJlckVuZ2luZSwgc2l6ZV90IF9fcCwgc2l6ZV90IF9fcj4KKyAgICB0eXBlbmFtZSBkaXNjYXJkX2Jsb2NrX2VuZ2luZTxfUmFuZG9tTnVtYmVyRW5naW5lLAorCQkJICAgX19wLCBfX3I+OjpyZXN1bHRfdHlwZQorICAgIGRpc2NhcmRfYmxvY2tfZW5naW5lPF9SYW5kb21OdW1iZXJFbmdpbmUsIF9fcCwgX19yPjo6CisgICAgb3BlcmF0b3IoKSgpCisgICAgeworICAgICAgaWYgKF9NX24gPj0gdXNlZF9ibG9jaykKKwl7CisJICBfTV9iLmRpc2NhcmQoYmxvY2tfc2l6ZSAtIF9NX24pOworCSAgX01fbiA9IDA7CisJfQorICAgICAgKytfTV9uOworICAgICAgcmV0dXJuIF9NX2IoKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbU51bWJlckVuZ2luZSwgc2l6ZV90IF9fcCwgc2l6ZV90IF9fciwKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgZGlzY2FyZF9ibG9ja19lbmdpbmU8X1JhbmRvbU51bWJlckVuZ2luZSwKKwkgICAgICAgX19wLCBfX3I+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3QgX0NoYXJUIF9fc3BhY2UgPSBfX29zLndpZGVuKCcgJyk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OmRlYyB8IF9faW9zX2Jhc2U6OmZpeGVkIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19zcGFjZSk7CisKKyAgICAgIF9fb3MgPDwgX194LmJhc2UoKSA8PCBfX3NwYWNlIDw8IF9feC5fTV9uOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbU51bWJlckVuZ2luZSwgc2l6ZV90IF9fcCwgc2l6ZV90IF9fciwKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgZGlzY2FyZF9ibG9ja19lbmdpbmU8X1JhbmRvbU51bWJlckVuZ2luZSwgX19wLCBfX3I+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBfX2lzID4+IF9feC5fTV9iID4+IF9feC5fTV9uOworCisgICAgICBfX2lzLmZsYWdzKF9fZmxhZ3MpOworICAgICAgcmV0dXJuIF9faXM7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbU51bWJlckVuZ2luZSwgc2l6ZV90IF9fdywgdHlwZW5hbWUgX1VJbnRUeXBlPgorICAgIHR5cGVuYW1lIGluZGVwZW5kZW50X2JpdHNfZW5naW5lPF9SYW5kb21OdW1iZXJFbmdpbmUsIF9fdywgX1VJbnRUeXBlPjo6CisgICAgICByZXN1bHRfdHlwZQorICAgIGluZGVwZW5kZW50X2JpdHNfZW5naW5lPF9SYW5kb21OdW1iZXJFbmdpbmUsIF9fdywgX1VJbnRUeXBlPjo6CisgICAgb3BlcmF0b3IoKSgpCisgICAgeworICAgICAgY29uc3QgbG9uZyBkb3VibGUgX19yID0gc3RhdGljX2Nhc3Q8bG9uZyBkb3VibGU+KF9NX2IubWF4KCkpCisJCQkgICAgLSBzdGF0aWNfY2FzdDxsb25nIGRvdWJsZT4oX01fYi5taW4oKSkgKyAxLjBMOworICAgICAgY29uc3QgcmVzdWx0X3R5cGUgX19tID0gc3RkOjpsb2coX19yKSAvIHN0ZDo6bG9nKDIuMEwpOworICAgICAgcmVzdWx0X3R5cGUgX19uLCBfX24wLCBfX3kwLCBfX3kxLCBfX3MwLCBfX3MxOworICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgMjsgKytfX2kpCisJeworCSAgX19uID0gKF9fdyArIF9fbSAtIDEpIC8gX19tICsgX19pOworCSAgX19uMCA9IF9fbiAtIF9fdyAlIF9fbjsKKwkgIGNvbnN0IHJlc3VsdF90eXBlIF9fdzAgPSBfX3cgLyBfX247CisJICBjb25zdCByZXN1bHRfdHlwZSBfX3cxID0gX193MCArIDE7CisJICBfX3MwID0gcmVzdWx0X3R5cGUoMSkgPDwgX193MDsKKwkgIF9fczEgPSByZXN1bHRfdHlwZSgxKSA8PCBfX3cxOworCSAgX195MCA9IF9fczAgKiAoX19yIC8gX19zMCk7CisJICBfX3kxID0gX19zMSAqIChfX3IgLyBfX3MxKTsKKwkgIGlmIChfX3IgLSBfX3kwIDw9IF9feTAgLyBfX24pCisJICAgIGJyZWFrOworCX0KKworICAgICAgcmVzdWx0X3R5cGUgX19zdW0gPSAwOworICAgICAgZm9yIChzaXplX3QgX19rID0gMDsgX19rIDwgX19uMDsgKytfX2spCisJeworCSAgcmVzdWx0X3R5cGUgX191OworCSAgZG8KKwkgICAgX191ID0gX01fYigpIC0gX01fYi5taW4oKTsKKwkgIHdoaWxlIChfX3UgPj0gX195MCk7CisJICBfX3N1bSA9IF9fczAgKiBfX3N1bSArIF9fdSAlIF9fczA7CisJfQorICAgICAgZm9yIChzaXplX3QgX19rID0gX19uMDsgX19rIDwgX19uOyArK19faykKKwl7CisJICByZXN1bHRfdHlwZSBfX3U7CisJICBkbworCSAgICBfX3UgPSBfTV9iKCkgLSBfTV9iLm1pbigpOworCSAgd2hpbGUgKF9fdSA+PSBfX3kxKTsKKwkgIF9fc3VtID0gX19zMSAqIF9fc3VtICsgX191ICUgX19zMTsKKwl9CisgICAgICByZXR1cm4gX19zdW07CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbU51bWJlckVuZ2luZSwgc2l6ZV90IF9faz4KKyAgICBjb25zdCBzaXplX3QKKyAgICBzaHVmZmxlX29yZGVyX2VuZ2luZTxfUmFuZG9tTnVtYmVyRW5naW5lLCBfX2s+Ojp0YWJsZV9zaXplOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21OdW1iZXJFbmdpbmUsIHNpemVfdCBfX2s+CisgICAgdHlwZW5hbWUgc2h1ZmZsZV9vcmRlcl9lbmdpbmU8X1JhbmRvbU51bWJlckVuZ2luZSwgX19rPjo6cmVzdWx0X3R5cGUKKyAgICBzaHVmZmxlX29yZGVyX2VuZ2luZTxfUmFuZG9tTnVtYmVyRW5naW5lLCBfX2s+OjoKKyAgICBvcGVyYXRvcigpKCkKKyAgICB7CisgICAgICBzaXplX3QgX19qID0gX19rICogKChfTV95IC0gX01fYi5taW4oKSkKKwkJCSAgLyAoX01fYi5tYXgoKSAtIF9NX2IubWluKCkgKyAxLjBMKSk7CisgICAgICBfTV95ID0gX01fdltfX2pdOworICAgICAgX01fdltfX2pdID0gX01fYigpOworCisgICAgICByZXR1cm4gX01feTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbU51bWJlckVuZ2luZSwgc2l6ZV90IF9faywKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3Qgc2h1ZmZsZV9vcmRlcl9lbmdpbmU8X1JhbmRvbU51bWJlckVuZ2luZSwgX19rPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpmaXhlZCB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fc3BhY2UpOworCisgICAgICBfX29zIDw8IF9feC5iYXNlKCk7CisgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX2s7ICsrX19pKQorCV9fb3MgPDwgX19zcGFjZSA8PCBfX3guX01fdltfX2ldOworICAgICAgX19vcyA8PCBfX3NwYWNlIDw8IF9feC5fTV95OworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbU51bWJlckVuZ2luZSwgc2l6ZV90IF9faywKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgc2h1ZmZsZV9vcmRlcl9lbmdpbmU8X1JhbmRvbU51bWJlckVuZ2luZSwgX19rPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6c2tpcHdzKTsKKworICAgICAgX19pcyA+PiBfX3guX01fYjsKKyAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fazsgKytfX2kpCisJX19pcyA+PiBfX3guX01fdltfX2ldOworICAgICAgX19pcyA+PiBfX3guX01feTsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdHlwZW5hbWUgdW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPjo6cmVzdWx0X3R5cGUKKyAgICAgIHVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT46OgorICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsKKwkvLyBYWFggTXVzdCBiZSBmaXhlZCB0byB3b3JrIHdlbGwgZm9yICphcmJpdHJhcnkqIF9fdXJuZy5tYXgoKSwKKwkvLyBfX3VybmcubWluKCksIF9fcGFyYW0uYigpLCBfX3BhcmFtLmEoKS4gIEN1cnJlbnRseSB3b3JrcyBmaW5lIG9ubHkKKwkvLyBpbiB0aGUgbW9zdCBjb21tb24gY2FzZSBfX3VybmcubWF4KCkgLSBfX3VybmcubWluKCkgPj0KKwkvLyBfX3BhcmFtLmIoKSAtIF9fcGFyYW0uYSgpLCB3aXRoIF9fdXJuZy5tYXgoKSA+IF9fdXJuZy5taW4oKSA+PSAwLgorCXR5cGVkZWYgdHlwZW5hbWUgc3RkOjptYWtlX3Vuc2lnbmVkPHR5cGVuYW1lCisJICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjo6cmVzdWx0X3R5cGU+Ojp0eXBlIF9fdXJudHlwZTsKKwl0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6bWFrZV91bnNpZ25lZDxyZXN1bHRfdHlwZT46OnR5cGUgX191dHlwZTsKKwl0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8KHNpemVvZihfX3VybnR5cGUpID4gc2l6ZW9mKF9fdXR5cGUpKSwKKwkgIF9fdXJudHlwZSwgX191dHlwZT46OnR5cGUgX191Y3R5cGU7CisKKwlyZXN1bHRfdHlwZSBfX3JldDsKKworCWNvbnN0IF9fdXJudHlwZSBfX3Vybm1pbiA9IF9fdXJuZy5taW4oKTsKKwljb25zdCBfX3VybnR5cGUgX191cm5tYXggPSBfX3VybmcubWF4KCk7CisJY29uc3QgX191cm50eXBlIF9fdXJucmFuZ2UgPSBfX3Vybm1heCAtIF9fdXJubWluOworCWNvbnN0IF9fdWN0eXBlIF9fdXJhbmdlID0gX19wYXJhbS5iKCkgLSBfX3BhcmFtLmEoKTsKKwljb25zdCBfX3VjdHlwZSBfX3VkZW5vbSA9IChfX3VybnJhbmdlIDw9IF9fdXJhbmdlCisJCQkJICAgPyAxIDogX191cm5yYW5nZSAvIChfX3VyYW5nZSArIDEpKTsKKwlkbworCSAgX19yZXQgPSAoX191cm50eXBlKF9fdXJuZygpKSAtICBfX3Vybm1pbikgLyBfX3VkZW5vbTsKKwl3aGlsZSAoX19yZXQgPiBfX3BhcmFtLmIoKSAtIF9fcGFyYW0uYSgpKTsKKworCXJldHVybiBfX3JldCArIF9fcGFyYW0uYSgpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgdW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpzY2llbnRpZmljIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19zcGFjZSk7CisKKyAgICAgIF9fb3MgPDwgX194LmEoKSA8PCBfX3NwYWNlIDw8IF9feC5iKCk7CisKKyAgICAgIF9fb3MuZmxhZ3MoX19mbGFncyk7CisgICAgICBfX29zLmZpbGwoX19maWxsKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIHVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lzLmZsYWdzKCk7CisgICAgICBfX2lzLmZsYWdzKF9faW9zX2Jhc2U6OmRlYyB8IF9faW9zX2Jhc2U6OnNraXB3cyk7CisKKyAgICAgIF9JbnRUeXBlIF9fYSwgX19iOworICAgICAgX19pcyA+PiBfX2EgPj4gX19iOworICAgICAgX194LnBhcmFtKHR5cGVuYW1lIHVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT46OgorCQlwYXJhbV90eXBlKF9fYSwgX19iKSk7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCB1bmlmb3JtX3JlYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBzdGQ6OnN0cmVhbXNpemUgX19wcmVjaXNpb24gPSBfX29zLnByZWNpc2lvbigpOworICAgICAgY29uc3QgX0NoYXJUIF9fc3BhY2UgPSBfX29zLndpZGVuKCcgJyk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OnNjaWVudGlmaWMgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX3NwYWNlKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKHN0ZDo6bnVtZXJpY19saW1pdHM8X1JlYWxUeXBlPjo6bWF4X2RpZ2l0czEwKTsKKworICAgICAgX19vcyA8PCBfX3guYSgpIDw8IF9fc3BhY2UgPDwgX194LmIoKTsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgX19vcy5wcmVjaXNpb24oX19wcmVjaXNpb24pOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIHVuaWZvcm1fcmVhbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6c2tpcHdzKTsKKworICAgICAgX1JlYWxUeXBlIF9fYSwgX19iOworICAgICAgX19pcyA+PiBfX2EgPj4gX19iOworICAgICAgX194LnBhcmFtKHR5cGVuYW1lIHVuaWZvcm1fcmVhbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6CisJCXBhcmFtX3R5cGUoX19hLCBfX2IpKTsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBiZXJub3VsbGlfZGlzdHJpYnV0aW9uJiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3Qgc3RkOjpzdHJlYW1zaXplIF9fcHJlY2lzaW9uID0gX19vcy5wcmVjaXNpb24oKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6c2NpZW50aWZpYyB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fb3Mud2lkZW4oJyAnKSk7CisgICAgICBfX29zLnByZWNpc2lvbihzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heF9kaWdpdHMxMCk7CisKKyAgICAgIF9fb3MgPDwgX194LnAoKTsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgX19vcy5wcmVjaXNpb24oX19wcmVjaXNpb24pOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB0eXBlbmFtZSBnZW9tZXRyaWNfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPjo6cmVzdWx0X3R5cGUKKyAgICAgIGdlb21ldHJpY19kaXN0cmlidXRpb248X0ludFR5cGU+OjoKKyAgICAgIG9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJIGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7CisJLy8gQWJvdXQgdGhlIGVwc2lsb24gdGhpbmcgc2VlIHRoaXMgdGhyZWFkOgorCS8vIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDA2LTEwL21zZzAwOTcxLmh0bWwKKwljb25zdCBkb3VibGUgX19uYWYgPQorCSAgKDEgLSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmVwc2lsb24oKSkgLyAyOworCS8vIFRoZSBsYXJnZXN0IF9SZWFsVHlwZSBjb252ZXJ0aWJsZSB0byBfSW50VHlwZS4KKwljb25zdCBkb3VibGUgX190aHIgPQorCSAgc3RkOjpudW1lcmljX2xpbWl0czxfSW50VHlwZT46Om1heCgpICsgX19uYWY7CisJX19kZXRhaWw6Ol9BZGFwdG9yPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCBkb3VibGU+CisJICBfX2F1cm5nKF9fdXJuZyk7CisKKwlkb3VibGUgX19jYW5kOworCWRvCisJICBfX2NhbmQgPSBzdGQ6OmNlaWwoc3RkOjpsb2coX19hdXJuZygpKSAvIF9fcGFyYW0uX01fbG9nX3ApOworCXdoaWxlIChfX2NhbmQgPj0gX190aHIpOworCisJcmV0dXJuIHJlc3VsdF90eXBlKF9fY2FuZCArIF9fbmFmKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgZ2VvbWV0cmljX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBzdGQ6OnN0cmVhbXNpemUgX19wcmVjaXNpb24gPSBfX29zLnByZWNpc2lvbigpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpzY2llbnRpZmljIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19vcy53aWRlbignICcpKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4X2RpZ2l0czEwKTsKKworICAgICAgX19vcyA8PCBfX3gucCgpOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUsCisJICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIGdlb21ldHJpY19kaXN0cmlidXRpb248X0ludFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBkb3VibGUgX19wOworICAgICAgX19pcyA+PiBfX3A7CisgICAgICBfX3gucGFyYW0odHlwZW5hbWUgZ2VvbWV0cmljX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT46OnBhcmFtX3R5cGUoX19wKSk7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHR5cGVuYW1lIG5lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT46OnJlc3VsdF90eXBlCisgICAgICBuZWdhdGl2ZV9iaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGU+OjoKKyAgICAgIG9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKyAgICAgIHsKKwljb25zdCBkb3VibGUgX195ID0gX01fZ2QoX191cm5nKTsKKworCS8vIFhYWCBJcyB0aGUgY29uc3RydWN0b3IgdG9vIHNsb3c/CisJc3RkOjpwb2lzc29uX2Rpc3RyaWJ1dGlvbjxyZXN1bHRfdHlwZT4gX19wb2lzc29uKF9feSk7CisJcmV0dXJuIF9fcG9pc3NvbihfX3VybmcpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdHlwZW5hbWUgbmVnYXRpdmVfYmlub21pYWxfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPjo6cmVzdWx0X3R5cGUKKyAgICAgIG5lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT46OgorICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgc3RkOjpnYW1tYV9kaXN0cmlidXRpb248cmVzdWx0X3R5cGU+OjpwYXJhbV90eXBlCisJICBwYXJhbV90eXBlOworCQorCWNvbnN0IGRvdWJsZSBfX3kgPQorCSAgX01fZ2QoX191cm5nLCBwYXJhbV90eXBlKF9fcC5rKCksIF9fcC5wKCkgLyAoMS4wIC0gX19wLnAoKSkpKTsKKworCXN0ZDo6cG9pc3Nvbl9kaXN0cmlidXRpb248cmVzdWx0X3R5cGU+IF9fcG9pc3NvbihfX3kpOworCXJldHVybiBfX3BvaXNzb24oX191cm5nKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IG5lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBzdGQ6OnN0cmVhbXNpemUgX19wcmVjaXNpb24gPSBfX29zLnByZWNpc2lvbigpOworICAgICAgY29uc3QgX0NoYXJUIF9fc3BhY2UgPSBfX29zLndpZGVuKCcgJyk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OnNjaWVudGlmaWMgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX29zLndpZGVuKCcgJykpOworICAgICAgX19vcy5wcmVjaXNpb24oc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXhfZGlnaXRzMTApOworCisgICAgICBfX29zIDw8IF9feC5rKCkgPDwgX19zcGFjZSA8PCBfX3gucCgpCisJICAgPDwgX19zcGFjZSA8PCBfX3guX01fZ2Q7CisKKyAgICAgIF9fb3MuZmxhZ3MoX19mbGFncyk7CisgICAgICBfX29zLmZpbGwoX19maWxsKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKF9fcHJlY2lzaW9uKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIG5lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lzLmZsYWdzKCk7CisgICAgICBfX2lzLmZsYWdzKF9faW9zX2Jhc2U6OnNraXB3cyk7CisKKyAgICAgIF9JbnRUeXBlIF9fazsKKyAgICAgIGRvdWJsZSBfX3A7CisgICAgICBfX2lzID4+IF9fayA+PiBfX3AgPj4gX194Ll9NX2dkOworICAgICAgX194LnBhcmFtKHR5cGVuYW1lIG5lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT46OgorCQlwYXJhbV90eXBlKF9faywgX19wKSk7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZT4KKyAgICB2b2lkCisgICAgcG9pc3Nvbl9kaXN0cmlidXRpb248X0ludFR5cGU+OjpwYXJhbV90eXBlOjoKKyAgICBfTV9pbml0aWFsaXplKCkKKyAgICB7CisjaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorICAgICAgaWYgKF9NX21lYW4gPj0gMTIpCisJeworCSAgY29uc3QgZG91YmxlIF9fbSA9IHN0ZDo6Zmxvb3IoX01fbWVhbik7CisJICBfTV9sbV90aHIgPSBzdGQ6OmxvZyhfTV9tZWFuKTsKKwkgIF9NX2xmbSA9IHN0ZDo6bGdhbW1hKF9fbSArIDEpOworCSAgX01fc20gPSBzdGQ6OnNxcnQoX19tKTsKKworCSAgY29uc3QgZG91YmxlIF9fcGlfNCA9IDAuNzg1Mzk4MTYzMzk3NDQ4MzA5NjE1NjYwODQ1ODE5ODc1N0w7CisJICBjb25zdCBkb3VibGUgX19keCA9IHN0ZDo6c3FydCgyICogX19tICogc3RkOjpsb2coMzIgKiBfX20KKwkJCQkJCQkgICAgICAvIF9fcGlfNCkpOworCSAgX01fZCA9IHN0ZDo6cm91bmQoc3RkOjptYXgoNi4wLCBzdGQ6Om1pbihfX20sIF9fZHgpKSk7CisJICBjb25zdCBkb3VibGUgX19jeCA9IDIgKiBfX20gKyBfTV9kOworCSAgX01fc2N4ID0gc3RkOjpzcXJ0KF9fY3ggLyAyKTsKKwkgIF9NXzFjeCA9IDEgLyBfX2N4OworCisJICBfTV9jMmIgPSBzdGQ6OnNxcnQoX19waV80ICogX19jeCkgKiBzdGQ6OmV4cChfTV8xY3gpOworCSAgX01fY2IgPSAyICogX19jeCAqIHN0ZDo6ZXhwKC1fTV9kICogX01fMWN4ICogKDEgKyBfTV9kIC8gMikpCisJCS8gX01fZDsKKwl9CisgICAgICBlbHNlCisjZW5kaWYKKwlfTV9sbV90aHIgPSBzdGQ6OmV4cCgtX01fbWVhbik7CisgICAgICB9CisKKyAgLyoqCisgICAqIEEgcmVqZWN0aW9uIGFsZ29yaXRobSB3aGVuIG1lYW4gPj0gMTIgYW5kIGEgc2ltcGxlIG1ldGhvZCBiYXNlZAorICAgKiB1cG9uIHRoZSBtdWx0aXBsaWNhdGlvbiBvZiB1bmlmb3JtIHJhbmRvbSB2YXJpYXRlcyBvdGhlcndpc2UuCisgICAqIE5COiBUaGUgZm9ybWVyIGlzIGF2YWlsYWJsZSBvbmx5IGlmIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEKKyAgICogaXMgZGVmaW5lZC4KKyAgICoKKyAgICogUmVmZXJlbmNlOgorICAgKiBEZXZyb3llLCBMLiBOb24tVW5pZm9ybSBSYW5kb20gVmFyaWF0ZXMgR2VuZXJhdGlvbi4gU3ByaW5nZXItVmVybGFnLAorICAgKiBOZXcgWW9yaywgMTk4NiwgQ2guIFgsIFNlY3RzLiAzLjMgJiAzLjQgKCsgRXJyYXRhISkuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHR5cGVuYW1lIHBvaXNzb25fZGlzdHJpYnV0aW9uPF9JbnRUeXBlPjo6cmVzdWx0X3R5cGUKKyAgICAgIHBvaXNzb25fZGlzdHJpYnV0aW9uPF9JbnRUeXBlPjo6CisgICAgICBvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSBjb25zdCBwYXJhbV90eXBlJiBfX3BhcmFtKQorICAgICAgeworCV9fZGV0YWlsOjpfQWRhcHRvcjxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciwgZG91YmxlPgorCSAgX19hdXJuZyhfX3VybmcpOworI2lmIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEKKwlpZiAoX19wYXJhbS5tZWFuKCkgPj0gMTIpCisJICB7CisJICAgIGRvdWJsZSBfX3g7CisKKwkgICAgLy8gU2VlIGNvbW1lbnRzIGFib3ZlLi4uCisJICAgIGNvbnN0IGRvdWJsZSBfX25hZiA9CisJICAgICAgKDEgLSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmVwc2lsb24oKSkgLyAyOworCSAgICBjb25zdCBkb3VibGUgX190aHIgPQorCSAgICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8X0ludFR5cGU+OjptYXgoKSArIF9fbmFmOworCisJICAgIGNvbnN0IGRvdWJsZSBfX20gPSBzdGQ6OmZsb29yKF9fcGFyYW0ubWVhbigpKTsKKwkgICAgLy8gc3FydChwaSAvIDIpCisJICAgIGNvbnN0IGRvdWJsZSBfX3NwaV8yID0gMS4yNTMzMTQxMzczMTU1MDAyNTEyMDc4ODI2NDI0MDU1MjI2TDsKKwkgICAgY29uc3QgZG91YmxlIF9fYzEgPSBfX3BhcmFtLl9NX3NtICogX19zcGlfMjsKKwkgICAgY29uc3QgZG91YmxlIF9fYzIgPSBfX3BhcmFtLl9NX2MyYiArIF9fYzE7CisJICAgIGNvbnN0IGRvdWJsZSBfX2MzID0gX19jMiArIDE7CisJICAgIGNvbnN0IGRvdWJsZSBfX2M0ID0gX19jMyArIDE7CisJICAgIC8vIGVeKDEgLyA3OCkKKwkgICAgY29uc3QgZG91YmxlIF9fZTE3OCA9IDEuMDEyOTAzMDQ3OTMyMDAxODU4MzE4NTUxNDc3NzUxMjk4M0w7CisJICAgIGNvbnN0IGRvdWJsZSBfX2M1ID0gX19jNCArIF9fZTE3ODsKKwkgICAgY29uc3QgZG91YmxlIF9fYyA9IF9fcGFyYW0uX01fY2IgKyBfX2M1OworCSAgICBjb25zdCBkb3VibGUgX18yY3ggPSAyICogKDIgKiBfX20gKyBfX3BhcmFtLl9NX2QpOworCisJICAgIGJvb2wgX19yZWplY3QgPSB0cnVlOworCSAgICBkbworCSAgICAgIHsKKwkJY29uc3QgZG91YmxlIF9fdSA9IF9fYyAqIF9fYXVybmcoKTsKKwkJY29uc3QgZG91YmxlIF9fZSA9IC1zdGQ6OmxvZyhfX2F1cm5nKCkpOworCisJCWRvdWJsZSBfX3cgPSAwLjA7CisKKwkJaWYgKF9fdSA8PSBfX2MxKQorCQkgIHsKKwkJICAgIGNvbnN0IGRvdWJsZSBfX24gPSBfTV9uZChfX3VybmcpOworCQkgICAgY29uc3QgZG91YmxlIF9feSA9IC1zdGQ6OmFicyhfX24pICogX19wYXJhbS5fTV9zbSAtIDE7CisJCSAgICBfX3ggPSBzdGQ6OmZsb29yKF9feSk7CisJCSAgICBfX3cgPSAtX19uICogX19uIC8gMjsKKwkJICAgIGlmIChfX3ggPCAtX19tKQorCQkgICAgICBjb250aW51ZTsKKwkJICB9CisJCWVsc2UgaWYgKF9fdSA8PSBfX2MyKQorCQkgIHsKKwkJICAgIGNvbnN0IGRvdWJsZSBfX24gPSBfTV9uZChfX3VybmcpOworCQkgICAgY29uc3QgZG91YmxlIF9feSA9IDEgKyBzdGQ6OmFicyhfX24pICogX19wYXJhbS5fTV9zY3g7CisJCSAgICBfX3ggPSBzdGQ6OmNlaWwoX195KTsKKwkJICAgIF9fdyA9IF9feSAqICgyIC0gX195KSAqIF9fcGFyYW0uX01fMWN4OworCQkgICAgaWYgKF9feCA+IF9fcGFyYW0uX01fZCkKKwkJICAgICAgY29udGludWU7CisJCSAgfQorCQllbHNlIGlmIChfX3UgPD0gX19jMykKKwkJICAvLyBOQjogVGhpcyBjYXNlIG5vdCBpbiB0aGUgYm9vaywgbm9yIGluIHRoZSBFcnJhdGEsCisJCSAgLy8gYnV0IHNob3VsZCBiZSBvay4uLgorCQkgIF9feCA9IC0xOworCQllbHNlIGlmIChfX3UgPD0gX19jNCkKKwkJICBfX3ggPSAwOworCQllbHNlIGlmIChfX3UgPD0gX19jNSkKKwkJICBfX3ggPSAxOworCQllbHNlCisJCSAgeworCQkgICAgY29uc3QgZG91YmxlIF9fdiA9IC1zdGQ6OmxvZyhfX2F1cm5nKCkpOworCQkgICAgY29uc3QgZG91YmxlIF9feSA9IF9fcGFyYW0uX01fZAorCQkJCSAgICAgKyBfX3YgKiBfXzJjeCAvIF9fcGFyYW0uX01fZDsKKwkJICAgIF9feCA9IHN0ZDo6Y2VpbChfX3kpOworCQkgICAgX193ID0gLV9fcGFyYW0uX01fZCAqIF9fcGFyYW0uX01fMWN4ICogKDEgKyBfX3kgLyAyKTsKKwkJICB9CisKKwkJX19yZWplY3QgPSAoX193IC0gX19lIC0gX194ICogX19wYXJhbS5fTV9sbV90aHIKKwkJCSAgICA+IF9fcGFyYW0uX01fbGZtIC0gc3RkOjpsZ2FtbWEoX194ICsgX19tICsgMSkpOworCisJCV9fcmVqZWN0IHw9IF9feCArIF9fbSA+PSBfX3RocjsKKworCSAgICAgIH0gd2hpbGUgKF9fcmVqZWN0KTsKKworCSAgICByZXR1cm4gcmVzdWx0X3R5cGUoX194ICsgX19tICsgX19uYWYpOworCSAgfQorCWVsc2UKKyNlbmRpZgorCSAgeworCSAgICBfSW50VHlwZSAgICAgX194ID0gMDsKKwkgICAgZG91YmxlIF9fcHJvZCA9IDEuMDsKKworCSAgICBkbworCSAgICAgIHsKKwkJX19wcm9kICo9IF9fYXVybmcoKTsKKwkJX194ICs9IDE7CisJICAgICAgfQorCSAgICB3aGlsZSAoX19wcm9kID4gX19wYXJhbS5fTV9sbV90aHIpOworCisJICAgIHJldHVybiBfX3ggLSAxOworCSAgfQorICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlLAorCSAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBwb2lzc29uX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBzdGQ6OnN0cmVhbXNpemUgX19wcmVjaXNpb24gPSBfX29zLnByZWNpc2lvbigpOworICAgICAgY29uc3QgX0NoYXJUIF9fc3BhY2UgPSBfX29zLndpZGVuKCcgJyk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OnNjaWVudGlmaWMgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX3NwYWNlKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4X2RpZ2l0czEwKTsKKworICAgICAgX19vcyA8PCBfX3gubWVhbigpIDw8IF9fc3BhY2UgPDwgX194Ll9NX25kOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUsCisJICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIHBvaXNzb25fZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6c2tpcHdzKTsKKworICAgICAgZG91YmxlIF9fbWVhbjsKKyAgICAgIF9faXMgPj4gX19tZWFuID4+IF9feC5fTV9uZDsKKyAgICAgIF9feC5wYXJhbSh0eXBlbmFtZSBwb2lzc29uX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT46OnBhcmFtX3R5cGUoX19tZWFuKSk7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZT4KKyAgICB2b2lkCisgICAgYmlub21pYWxfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPjo6cGFyYW1fdHlwZTo6CisgICAgX01faW5pdGlhbGl6ZSgpCisgICAgeworICAgICAgY29uc3QgZG91YmxlIF9fcDEyID0gX01fcCA8PSAwLjUgPyBfTV9wIDogMS4wIC0gX01fcDsKKworICAgICAgX01fZWFzeSA9IHRydWU7CisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAgICBpZiAoX01fdCAqIF9fcDEyID49IDgpCisJeworCSAgX01fZWFzeSA9IGZhbHNlOworCSAgY29uc3QgZG91YmxlIF9fbnAgPSBzdGQ6OmZsb29yKF9NX3QgKiBfX3AxMik7CisJICBjb25zdCBkb3VibGUgX19wYSA9IF9fbnAgLyBfTV90OworCSAgY29uc3QgZG91YmxlIF9fMXAgPSAxIC0gX19wYTsKKworCSAgY29uc3QgZG91YmxlIF9fcGlfNCA9IDAuNzg1Mzk4MTYzMzk3NDQ4MzA5NjE1NjYwODQ1ODE5ODc1N0w7CisJICBjb25zdCBkb3VibGUgX19kMXggPQorCSAgICBzdGQ6OnNxcnQoX19ucCAqIF9fMXAgKiBzdGQ6OmxvZygzMiAqIF9fbnAKKwkJCQkJICAgICAvICg4MSAqIF9fcGlfNCAqIF9fMXApKSk7CisJICBfTV9kMSA9IHN0ZDo6cm91bmQoc3RkOjptYXgoMS4wLCBfX2QxeCkpOworCSAgY29uc3QgZG91YmxlIF9fZDJ4ID0KKwkgICAgc3RkOjpzcXJ0KF9fbnAgKiBfXzFwICogc3RkOjpsb2coMzIgKiBfTV90ICogX18xcAorCQkJCQkgICAgIC8gKF9fcGlfNCAqIF9fcGEpKSk7CisJICBfTV9kMiA9IHN0ZDo6cm91bmQoc3RkOjptYXgoMS4wLCBfX2QyeCkpOworCisJICAvLyBzcXJ0KHBpIC8gMikKKwkgIGNvbnN0IGRvdWJsZSBfX3NwaV8yID0gMS4yNTMzMTQxMzczMTU1MDAyNTEyMDc4ODI2NDI0MDU1MjI2TDsKKwkgIF9NX3MxID0gc3RkOjpzcXJ0KF9fbnAgKiBfXzFwKSAqICgxICsgX01fZDEgLyAoNCAqIF9fbnApKTsKKwkgIF9NX3MyID0gc3RkOjpzcXJ0KF9fbnAgKiBfXzFwKSAqICgxICsgX01fZDIgLyAoNCAqIF9NX3QgKiBfXzFwKSk7CisJICBfTV9jID0gMiAqIF9NX2QxIC8gX19ucDsKKwkgIF9NX2ExID0gc3RkOjpleHAoX01fYykgKiBfTV9zMSAqIF9fc3BpXzI7CisJICBjb25zdCBkb3VibGUgX19hMTIgPSBfTV9hMSArIF9NX3MyICogX19zcGlfMjsKKwkgIGNvbnN0IGRvdWJsZSBfX3MxcyA9IF9NX3MxICogX01fczE7CisJICBfTV9hMTIzID0gX19hMTIgKyAoc3RkOjpleHAoX01fZDEgLyAoX01fdCAqIF9fMXApKQorCQkJICAgICAqIDIgKiBfX3MxcyAvIF9NX2QxCisJCQkgICAgICogc3RkOjpleHAoLV9NX2QxICogX01fZDEgLyAoMiAqIF9fczFzKSkpOworCSAgY29uc3QgZG91YmxlIF9fczJzID0gX01fczIgKiBfTV9zMjsKKwkgIF9NX3MgPSAoX01fYTEyMyArIDIgKiBfX3MycyAvIF9NX2QyCisJCSAgKiBzdGQ6OmV4cCgtX01fZDIgKiBfTV9kMiAvICgyICogX19zMnMpKSk7CisJICBfTV9sZiA9IChzdGQ6OmxnYW1tYShfX25wICsgMSkKKwkJICAgKyBzdGQ6OmxnYW1tYShfTV90IC0gX19ucCArIDEpKTsKKwkgIF9NX2xwMXAgPSBzdGQ6OmxvZyhfX3BhIC8gX18xcCk7CisKKwkgIF9NX3EgPSAtc3RkOjpsb2coMSAtIChfX3AxMiAtIF9fcGEpIC8gX18xcCk7CisJfQorICAgICAgZWxzZQorI2VuZGlmCisJX01fcSA9IC1zdGQ6OmxvZygxIC0gX19wMTIpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHR5cGVuYW1lIGJpbm9taWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT46OnJlc3VsdF90eXBlCisgICAgICBiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGU+OjoKKyAgICAgIF9NX3dhaXRpbmcoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywgX0ludFR5cGUgX190KQorICAgICAgeworCV9JbnRUeXBlIF9feCA9IDA7CisJZG91YmxlIF9fc3VtID0gMC4wOworCV9fZGV0YWlsOjpfQWRhcHRvcjxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciwgZG91YmxlPgorCSAgX19hdXJuZyhfX3VybmcpOworCisJZG8KKwkgIHsKKwkgICAgY29uc3QgZG91YmxlIF9fZSA9IC1zdGQ6OmxvZyhfX2F1cm5nKCkpOworCSAgICBfX3N1bSArPSBfX2UgLyAoX190IC0gX194KTsKKwkgICAgX194ICs9IDE7CisJICB9CisJd2hpbGUgKF9fc3VtIDw9IF9NX3BhcmFtLl9NX3EpOworCisJcmV0dXJuIF9feCAtIDE7CisgICAgICB9CisKKyAgLyoqCisgICAqIEEgcmVqZWN0aW9uIGFsZ29yaXRobSB3aGVuIHQgKiBwID49IDggYW5kIGEgc2ltcGxlIHdhaXRpbmcgdGltZQorICAgKiBtZXRob2QgLSB0aGUgc2Vjb25kIGluIHRoZSByZWZlcmVuY2VkIGJvb2sgLSBvdGhlcndpc2UuCisgICAqIE5COiBUaGUgZm9ybWVyIGlzIGF2YWlsYWJsZSBvbmx5IGlmIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEKKyAgICogaXMgZGVmaW5lZC4KKyAgICoKKyAgICogUmVmZXJlbmNlOgorICAgKiBEZXZyb3llLCBMLiBOb24tVW5pZm9ybSBSYW5kb20gVmFyaWF0ZXMgR2VuZXJhdGlvbi4gU3ByaW5nZXItVmVybGFnLAorICAgKiBOZXcgWW9yaywgMTk4NiwgQ2guIFgsIFNlY3QuIDQgKCsgRXJyYXRhISkuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHR5cGVuYW1lIGJpbm9taWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT46OnJlc3VsdF90eXBlCisgICAgICBiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGU+OjoKKyAgICAgIG9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJIGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7CisJcmVzdWx0X3R5cGUgX19yZXQ7CisJY29uc3QgX0ludFR5cGUgX190ID0gX19wYXJhbS50KCk7CisJY29uc3QgZG91YmxlIF9fcCA9IF9fcGFyYW0ucCgpOworCWNvbnN0IGRvdWJsZSBfX3AxMiA9IF9fcCA8PSAwLjUgPyBfX3AgOiAxLjAgLSBfX3A7CisJX19kZXRhaWw6Ol9BZGFwdG9yPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCBkb3VibGU+CisJICBfX2F1cm5nKF9fdXJuZyk7CisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisJaWYgKCFfX3BhcmFtLl9NX2Vhc3kpCisJICB7CisJICAgIGRvdWJsZSBfX3g7CisKKwkgICAgLy8gU2VlIGNvbW1lbnRzIGFib3ZlLi4uCisJICAgIGNvbnN0IGRvdWJsZSBfX25hZiA9CisJICAgICAgKDEgLSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmVwc2lsb24oKSkgLyAyOworCSAgICBjb25zdCBkb3VibGUgX190aHIgPQorCSAgICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8X0ludFR5cGU+OjptYXgoKSArIF9fbmFmOworCisJICAgIGNvbnN0IGRvdWJsZSBfX25wID0gc3RkOjpmbG9vcihfX3QgKiBfX3AxMik7CisKKwkgICAgLy8gc3FydChwaSAvIDIpCisJICAgIGNvbnN0IGRvdWJsZSBfX3NwaV8yID0gMS4yNTMzMTQxMzczMTU1MDAyNTEyMDc4ODI2NDI0MDU1MjI2TDsKKwkgICAgY29uc3QgZG91YmxlIF9fYTEgPSBfX3BhcmFtLl9NX2ExOworCSAgICBjb25zdCBkb3VibGUgX19hMTIgPSBfX2ExICsgX19wYXJhbS5fTV9zMiAqIF9fc3BpXzI7CisJICAgIGNvbnN0IGRvdWJsZSBfX2ExMjMgPSBfX3BhcmFtLl9NX2ExMjM7CisJICAgIGNvbnN0IGRvdWJsZSBfX3MxcyA9IF9fcGFyYW0uX01fczEgKiBfX3BhcmFtLl9NX3MxOworCSAgICBjb25zdCBkb3VibGUgX19zMnMgPSBfX3BhcmFtLl9NX3MyICogX19wYXJhbS5fTV9zMjsKKworCSAgICBib29sIF9fcmVqZWN0OworCSAgICBkbworCSAgICAgIHsKKwkJY29uc3QgZG91YmxlIF9fdSA9IF9fcGFyYW0uX01fcyAqIF9fYXVybmcoKTsKKworCQlkb3VibGUgX192OworCisJCWlmIChfX3UgPD0gX19hMSkKKwkJICB7CisJCSAgICBjb25zdCBkb3VibGUgX19uID0gX01fbmQoX191cm5nKTsKKwkJICAgIGNvbnN0IGRvdWJsZSBfX3kgPSBfX3BhcmFtLl9NX3MxICogc3RkOjphYnMoX19uKTsKKwkJICAgIF9fcmVqZWN0ID0gX195ID49IF9fcGFyYW0uX01fZDE7CisJCSAgICBpZiAoIV9fcmVqZWN0KQorCQkgICAgICB7CisJCQljb25zdCBkb3VibGUgX19lID0gLXN0ZDo6bG9nKF9fYXVybmcoKSk7CisJCQlfX3ggPSBzdGQ6OmZsb29yKF9feSk7CisJCQlfX3YgPSAtX19lIC0gX19uICogX19uIC8gMiArIF9fcGFyYW0uX01fYzsKKwkJICAgICAgfQorCQkgIH0KKwkJZWxzZSBpZiAoX191IDw9IF9fYTEyKQorCQkgIHsKKwkJICAgIGNvbnN0IGRvdWJsZSBfX24gPSBfTV9uZChfX3VybmcpOworCQkgICAgY29uc3QgZG91YmxlIF9feSA9IF9fcGFyYW0uX01fczIgKiBzdGQ6OmFicyhfX24pOworCQkgICAgX19yZWplY3QgPSBfX3kgPj0gX19wYXJhbS5fTV9kMjsKKwkJICAgIGlmICghX19yZWplY3QpCisJCSAgICAgIHsKKwkJCWNvbnN0IGRvdWJsZSBfX2UgPSAtc3RkOjpsb2coX19hdXJuZygpKTsKKwkJCV9feCA9IHN0ZDo6Zmxvb3IoLV9feSk7CisJCQlfX3YgPSAtX19lIC0gX19uICogX19uIC8gMjsKKwkJICAgICAgfQorCQkgIH0KKwkJZWxzZSBpZiAoX191IDw9IF9fYTEyMykKKwkJICB7CisJCSAgICBjb25zdCBkb3VibGUgX19lMSA9IC1zdGQ6OmxvZyhfX2F1cm5nKCkpOworCQkgICAgY29uc3QgZG91YmxlIF9fZTIgPSAtc3RkOjpsb2coX19hdXJuZygpKTsKKworCQkgICAgY29uc3QgZG91YmxlIF9feSA9IF9fcGFyYW0uX01fZDEKKwkJCQkgICAgICsgMiAqIF9fczFzICogX19lMSAvIF9fcGFyYW0uX01fZDE7CisJCSAgICBfX3ggPSBzdGQ6OmZsb29yKF9feSk7CisJCSAgICBfX3YgPSAoLV9fZTIgKyBfX3BhcmFtLl9NX2QxICogKDEgLyAoX190IC0gX19ucCkKKwkJCQkJCSAgICAtX195IC8gKDIgKiBfX3MxcykpKTsKKwkJICAgIF9fcmVqZWN0ID0gZmFsc2U7CisJCSAgfQorCQllbHNlCisJCSAgeworCQkgICAgY29uc3QgZG91YmxlIF9fZTEgPSAtc3RkOjpsb2coX19hdXJuZygpKTsKKwkJICAgIGNvbnN0IGRvdWJsZSBfX2UyID0gLXN0ZDo6bG9nKF9fYXVybmcoKSk7CisKKwkJICAgIGNvbnN0IGRvdWJsZSBfX3kgPSBfX3BhcmFtLl9NX2QyCisJCQkJICAgICArIDIgKiBfX3MycyAqIF9fZTEgLyBfX3BhcmFtLl9NX2QyOworCQkgICAgX194ID0gc3RkOjpmbG9vcigtX195KTsKKwkJICAgIF9fdiA9IC1fX2UyIC0gX19wYXJhbS5fTV9kMiAqIF9feSAvICgyICogX19zMnMpOworCQkgICAgX19yZWplY3QgPSBmYWxzZTsKKwkJICB9CisKKwkJX19yZWplY3QgPSBfX3JlamVjdCB8fCBfX3ggPCAtX19ucCB8fCBfX3ggPiBfX3QgLSBfX25wOworCQlpZiAoIV9fcmVqZWN0KQorCQkgIHsKKwkJICAgIGNvbnN0IGRvdWJsZSBfX2xmeCA9CisJCSAgICAgIHN0ZDo6bGdhbW1hKF9fbnAgKyBfX3ggKyAxKQorCQkgICAgICArIHN0ZDo6bGdhbW1hKF9fdCAtIChfX25wICsgX194KSArIDEpOworCQkgICAgX19yZWplY3QgPSBfX3YgPiBfX3BhcmFtLl9NX2xmIC0gX19sZngKKwkJCSAgICAgKyBfX3ggKiBfX3BhcmFtLl9NX2xwMXA7CisJCSAgfQorCisJCV9fcmVqZWN0IHw9IF9feCArIF9fbnAgPj0gX190aHI7CisJICAgICAgfQorCSAgICB3aGlsZSAoX19yZWplY3QpOworCisJICAgIF9feCArPSBfX25wICsgX19uYWY7CisKKwkgICAgY29uc3QgX0ludFR5cGUgX196ID0gX01fd2FpdGluZyhfX3VybmcsIF9fdCAtIF9JbnRUeXBlKF9feCkpOworCSAgICBfX3JldCA9IF9JbnRUeXBlKF9feCkgKyBfX3o7CisJICB9CisJZWxzZQorI2VuZGlmCisJICBfX3JldCA9IF9NX3dhaXRpbmcoX191cm5nLCBfX3QpOworCisJaWYgKF9fcDEyICE9IF9fcCkKKwkgIF9fcmV0ID0gX190IC0gX19yZXQ7CisJcmV0dXJuIF9fcmV0OworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlLAorCSAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3Qgc3RkOjpzdHJlYW1zaXplIF9fcHJlY2lzaW9uID0gX19vcy5wcmVjaXNpb24oKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpzY2llbnRpZmljIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19zcGFjZSk7CisgICAgICBfX29zLnByZWNpc2lvbihzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heF9kaWdpdHMxMCk7CisKKyAgICAgIF9fb3MgPDwgX194LnQoKSA8PCBfX3NwYWNlIDw8IF9feC5wKCkKKwkgICA8PCBfX3NwYWNlIDw8IF9feC5fTV9uZDsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgX19vcy5wcmVjaXNpb24oX19wcmVjaXNpb24pOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlLAorCSAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICBiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBfSW50VHlwZSBfX3Q7CisgICAgICBkb3VibGUgX19wOworICAgICAgX19pcyA+PiBfX3QgPj4gX19wID4+IF9feC5fTV9uZDsKKyAgICAgIF9feC5wYXJhbSh0eXBlbmFtZSBiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGU+OjoKKwkJcGFyYW1fdHlwZShfX3QsIF9fcCkpOworCisgICAgICBfX2lzLmZsYWdzKF9fZmxhZ3MpOworICAgICAgcmV0dXJuIF9faXM7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBzdGQ6OnN0cmVhbXNpemUgX19wcmVjaXNpb24gPSBfX29zLnByZWNpc2lvbigpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpzY2llbnRpZmljIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19vcy53aWRlbignICcpKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKHN0ZDo6bnVtZXJpY19saW1pdHM8X1JlYWxUeXBlPjo6bWF4X2RpZ2l0czEwKTsKKworICAgICAgX19vcyA8PCBfX3gubGFtYmRhKCk7CisKKyAgICAgIF9fb3MuZmxhZ3MoX19mbGFncyk7CisgICAgICBfX29zLmZpbGwoX19maWxsKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKF9fcHJlY2lzaW9uKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICBleHBvbmVudGlhbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6c2tpcHdzKTsKKworICAgICAgX1JlYWxUeXBlIF9fbGFtYmRhOworICAgICAgX19pcyA+PiBfX2xhbWJkYTsKKyAgICAgIF9feC5wYXJhbSh0eXBlbmFtZSBleHBvbmVudGlhbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6CisJCXBhcmFtX3R5cGUoX19sYW1iZGEpKTsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIC8qKgorICAgKiBQb2xhciBtZXRob2QgZHVlIHRvIE1hcnNhZ2xpYS4KKyAgICoKKyAgICogRGV2cm95ZSwgTC4gTm9uLVVuaWZvcm0gUmFuZG9tIFZhcmlhdGVzIEdlbmVyYXRpb24uIFNwcmluZ2VyLVZlcmxhZywKKyAgICogTmV3IFlvcmssIDE5ODYsIENoLiBWLCBTZWN0LiA0LjQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB0eXBlbmFtZSBub3JtYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OnJlc3VsdF90eXBlCisgICAgICBub3JtYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsKKwlyZXN1bHRfdHlwZSBfX3JldDsKKwlfX2RldGFpbDo6X0FkYXB0b3I8X1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IsIHJlc3VsdF90eXBlPgorCSAgX19hdXJuZyhfX3VybmcpOworCisJaWYgKF9NX3NhdmVkX2F2YWlsYWJsZSkKKwkgIHsKKwkgICAgX01fc2F2ZWRfYXZhaWxhYmxlID0gZmFsc2U7CisJICAgIF9fcmV0ID0gX01fc2F2ZWQ7CisJICB9CisJZWxzZQorCSAgeworCSAgICByZXN1bHRfdHlwZSBfX3gsIF9feSwgX19yMjsKKwkgICAgZG8KKwkgICAgICB7CisJCV9feCA9IHJlc3VsdF90eXBlKDIuMCkgKiBfX2F1cm5nKCkgLSAxLjA7CisJCV9feSA9IHJlc3VsdF90eXBlKDIuMCkgKiBfX2F1cm5nKCkgLSAxLjA7CisJCV9fcjIgPSBfX3ggKiBfX3ggKyBfX3kgKiBfX3k7CisJICAgICAgfQorCSAgICB3aGlsZSAoX19yMiA+IDEuMCB8fCBfX3IyID09IDAuMCk7CisKKwkgICAgY29uc3QgcmVzdWx0X3R5cGUgX19tdWx0ID0gc3RkOjpzcXJ0KC0yICogc3RkOjpsb2coX19yMikgLyBfX3IyKTsKKwkgICAgX01fc2F2ZWQgPSBfX3ggKiBfX211bHQ7CisJICAgIF9NX3NhdmVkX2F2YWlsYWJsZSA9IHRydWU7CisJICAgIF9fcmV0ID0gX195ICogX19tdWx0OworCSAgfQorCisJX19yZXQgPSBfX3JldCAqIF9fcGFyYW0uc3RkZGV2KCkgKyBfX3BhcmFtLm1lYW4oKTsKKwlyZXR1cm4gX19yZXQ7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IHN0ZDo6bm9ybWFsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QxLAorCSAgICAgICBjb25zdCBzdGQ6Om5vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX19kMikKKyAgICB7CisgICAgICBpZiAoX19kMS5fTV9wYXJhbSA9PSBfX2QyLl9NX3BhcmFtCisJICAmJiBfX2QxLl9NX3NhdmVkX2F2YWlsYWJsZSA9PSBfX2QyLl9NX3NhdmVkX2F2YWlsYWJsZSkKKwl7CisJICBpZiAoX19kMS5fTV9zYXZlZF9hdmFpbGFibGUKKwkgICAgICAmJiBfX2QxLl9NX3NhdmVkID09IF9fZDIuX01fc2F2ZWQpCisJICAgIHJldHVybiB0cnVlOworCSAgZWxzZSBpZighX19kMS5fTV9zYXZlZF9hdmFpbGFibGUpCisJICAgIHJldHVybiB0cnVlOworCSAgZWxzZQorCSAgICByZXR1cm4gZmFsc2U7CisJfQorICAgICAgZWxzZQorCXJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3Qgbm9ybWFsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3Qgc3RkOjpzdHJlYW1zaXplIF9fcHJlY2lzaW9uID0gX19vcy5wcmVjaXNpb24oKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpzY2llbnRpZmljIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19zcGFjZSk7CisgICAgICBfX29zLnByZWNpc2lvbihzdGQ6Om51bWVyaWNfbGltaXRzPF9SZWFsVHlwZT46Om1heF9kaWdpdHMxMCk7CisKKyAgICAgIF9fb3MgPDwgX194Lm1lYW4oKSA8PCBfX3NwYWNlIDw8IF9feC5zdGRkZXYoKQorCSAgIDw8IF9fc3BhY2UgPDwgX194Ll9NX3NhdmVkX2F2YWlsYWJsZTsKKyAgICAgIGlmIChfX3guX01fc2F2ZWRfYXZhaWxhYmxlKQorCV9fb3MgPDwgX19zcGFjZSA8PCBfX3guX01fc2F2ZWQ7CisKKyAgICAgIF9fb3MuZmxhZ3MoX19mbGFncyk7CisgICAgICBfX29zLmZpbGwoX19maWxsKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKF9fcHJlY2lzaW9uKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICBub3JtYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lzLmZsYWdzKCk7CisgICAgICBfX2lzLmZsYWdzKF9faW9zX2Jhc2U6OmRlYyB8IF9faW9zX2Jhc2U6OnNraXB3cyk7CisKKyAgICAgIGRvdWJsZSBfX21lYW4sIF9fc3RkZGV2OworICAgICAgX19pcyA+PiBfX21lYW4gPj4gX19zdGRkZXYKKwkgICA+PiBfX3guX01fc2F2ZWRfYXZhaWxhYmxlOworICAgICAgaWYgKF9feC5fTV9zYXZlZF9hdmFpbGFibGUpCisJX19pcyA+PiBfX3guX01fc2F2ZWQ7CisgICAgICBfX3gucGFyYW0odHlwZW5hbWUgbm9ybWFsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKwkJcGFyYW1fdHlwZShfX21lYW4sIF9fc3RkZGV2KSk7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBsb2dub3JtYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBzdGQ6OnN0cmVhbXNpemUgX19wcmVjaXNpb24gPSBfX29zLnByZWNpc2lvbigpOworICAgICAgY29uc3QgX0NoYXJUIF9fc3BhY2UgPSBfX29zLndpZGVuKCcgJyk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OnNjaWVudGlmaWMgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX3NwYWNlKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKHN0ZDo6bnVtZXJpY19saW1pdHM8X1JlYWxUeXBlPjo6bWF4X2RpZ2l0czEwKTsKKworICAgICAgX19vcyA8PCBfX3gubSgpIDw8IF9fc3BhY2UgPDwgX194LnMoKQorCSAgIDw8IF9fc3BhY2UgPDwgX194Ll9NX25kOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgbG9nbm9ybWFsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBfUmVhbFR5cGUgX19tLCBfX3M7CisgICAgICBfX2lzID4+IF9fbSA+PiBfX3MgPj4gX194Ll9NX25kOworICAgICAgX194LnBhcmFtKHR5cGVuYW1lIGxvZ25vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6CisJCXBhcmFtX3R5cGUoX19tLCBfX3MpKTsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IGNoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3Qgc3RkOjpzdHJlYW1zaXplIF9fcHJlY2lzaW9uID0gX19vcy5wcmVjaXNpb24oKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpzY2llbnRpZmljIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19zcGFjZSk7CisgICAgICBfX29zLnByZWNpc2lvbihzdGQ6Om51bWVyaWNfbGltaXRzPF9SZWFsVHlwZT46Om1heF9kaWdpdHMxMCk7CisKKyAgICAgIF9fb3MgPDwgX194Lm4oKSA8PCBfX3NwYWNlIDw8IF9feC5fTV9nZDsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgX19vcy5wcmVjaXNpb24oX19wcmVjaXNpb24pOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIGNoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBfUmVhbFR5cGUgX19uOworICAgICAgX19pcyA+PiBfX24gPj4gX194Ll9NX2dkOworICAgICAgX194LnBhcmFtKHR5cGVuYW1lIGNoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKwkJcGFyYW1fdHlwZShfX24pKTsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHR5cGVuYW1lIGNhdWNoeV9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6cmVzdWx0X3R5cGUKKyAgICAgIGNhdWNoeV9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6CisgICAgICBvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICB7CisJX19kZXRhaWw6Ol9BZGFwdG9yPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCByZXN1bHRfdHlwZT4KKwkgIF9fYXVybmcoX191cm5nKTsKKwlfUmVhbFR5cGUgX191OworCWRvCisJICBfX3UgPSBfX2F1cm5nKCk7CisJd2hpbGUgKF9fdSA9PSAwLjUpOworCisJY29uc3QgX1JlYWxUeXBlIF9fcGkgPSAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2MjY0MzM4MzI3OTUwMjlMOworCXJldHVybiBfX3AuYSgpICsgX19wLmIoKSAqIHN0ZDo6dGFuKF9fcGkgKiBfX3UpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IGNhdWNoeV9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyZWFtc2l6ZSBfX3ByZWNpc2lvbiA9IF9fb3MucHJlY2lzaW9uKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19zcGFjZSA9IF9fb3Mud2lkZW4oJyAnKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6c2NpZW50aWZpYyB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fc3BhY2UpOworICAgICAgX19vcy5wcmVjaXNpb24oc3RkOjpudW1lcmljX2xpbWl0czxfUmVhbFR5cGU+OjptYXhfZGlnaXRzMTApOworCisgICAgICBfX29zIDw8IF9feC5hKCkgPDwgX19zcGFjZSA8PCBfX3guYigpOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgY2F1Y2h5X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBfUmVhbFR5cGUgX19hLCBfX2I7CisgICAgICBfX2lzID4+IF9fYSA+PiBfX2I7CisgICAgICBfX3gucGFyYW0odHlwZW5hbWUgY2F1Y2h5X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKwkJcGFyYW1fdHlwZShfX2EsIF9fYikpOworCisgICAgICBfX2lzLmZsYWdzKF9fZmxhZ3MpOworICAgICAgcmV0dXJuIF9faXM7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgZmlzaGVyX2ZfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBzdGQ6OnN0cmVhbXNpemUgX19wcmVjaXNpb24gPSBfX29zLnByZWNpc2lvbigpOworICAgICAgY29uc3QgX0NoYXJUIF9fc3BhY2UgPSBfX29zLndpZGVuKCcgJyk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OnNjaWVudGlmaWMgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX3NwYWNlKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKHN0ZDo6bnVtZXJpY19saW1pdHM8X1JlYWxUeXBlPjo6bWF4X2RpZ2l0czEwKTsKKworICAgICAgX19vcyA8PCBfX3gubSgpIDw8IF9fc3BhY2UgPDwgX194Lm4oKQorCSAgIDw8IF9fc3BhY2UgPDwgX194Ll9NX2dkX3ggPDwgX19zcGFjZSA8PCBfX3guX01fZ2RfeTsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgX19vcy5wcmVjaXNpb24oX19wcmVjaXNpb24pOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIGZpc2hlcl9mX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBfUmVhbFR5cGUgX19tLCBfX247CisgICAgICBfX2lzID4+IF9fbSA+PiBfX24gPj4gX194Ll9NX2dkX3ggPj4gX194Ll9NX2dkX3k7CisgICAgICBfX3gucGFyYW0odHlwZW5hbWUgZmlzaGVyX2ZfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorCQlwYXJhbV90eXBlKF9fbSwgX19uKSk7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBzdHVkZW50X3RfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBzdGQ6OnN0cmVhbXNpemUgX19wcmVjaXNpb24gPSBfX29zLnByZWNpc2lvbigpOworICAgICAgY29uc3QgX0NoYXJUIF9fc3BhY2UgPSBfX29zLndpZGVuKCcgJyk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OnNjaWVudGlmaWMgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX3NwYWNlKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKHN0ZDo6bnVtZXJpY19saW1pdHM8X1JlYWxUeXBlPjo6bWF4X2RpZ2l0czEwKTsKKworICAgICAgX19vcyA8PCBfX3gubigpIDw8IF9fc3BhY2UgPDwgX194Ll9NX25kIDw8IF9fc3BhY2UgPDwgX194Ll9NX2dkOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgc3R1ZGVudF90X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBfUmVhbFR5cGUgX19uOworICAgICAgX19pcyA+PiBfX24gPj4gX194Ll9NX25kID4+IF9feC5fTV9nZDsKKyAgICAgIF9feC5wYXJhbSh0eXBlbmFtZSBzdHVkZW50X3RfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OnBhcmFtX3R5cGUoX19uKSk7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdm9pZAorICAgIGdhbW1hX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjpwYXJhbV90eXBlOjoKKyAgICBfTV9pbml0aWFsaXplKCkKKyAgICB7CisgICAgICBfTV9tYWxwaGEgPSBfTV9hbHBoYSA8IDEuMCA/IF9NX2FscGhhICsgX1JlYWxUeXBlKDEuMCkgOiBfTV9hbHBoYTsKKworICAgICAgY29uc3QgX1JlYWxUeXBlIF9fYTEgPSBfTV9tYWxwaGEgLSBfUmVhbFR5cGUoMS4wKSAvIF9SZWFsVHlwZSgzLjApOworICAgICAgX01fYTIgPSBfUmVhbFR5cGUoMS4wKSAvIHN0ZDo6c3FydChfUmVhbFR5cGUoOS4wKSAqIF9fYTEpOworICAgIH0KKworICAvKioKKyAgICogTWFyc2FnbGlhLCBHLiBhbmQgVHNhbmcsIFcuIFcuCisgICAqICJBIFNpbXBsZSBNZXRob2QgZm9yIEdlbmVyYXRpbmcgR2FtbWEgVmFyaWFibGVzIgorICAgKiBBQ00gVHJhbnNhY3Rpb25zIG9uIE1hdGhlbWF0aWNhbCBTb2Z0d2FyZSwgMjYsIDMsIDM2My0zNzIsIDIwMDAuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB0eXBlbmFtZSBnYW1tYV9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6cmVzdWx0X3R5cGUKKyAgICAgIGdhbW1hX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKyAgICAgIG9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJIGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7CisJX19kZXRhaWw6Ol9BZGFwdG9yPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCByZXN1bHRfdHlwZT4KKwkgIF9fYXVybmcoX191cm5nKTsKKworCXJlc3VsdF90eXBlIF9fdSwgX192LCBfX247CisJY29uc3QgcmVzdWx0X3R5cGUgX19hMSA9IChfX3BhcmFtLl9NX21hbHBoYQorCQkJCSAgLSBfUmVhbFR5cGUoMS4wKSAvIF9SZWFsVHlwZSgzLjApKTsKKworCWRvCisJICB7CisJICAgIGRvCisJICAgICAgeworCQlfX24gPSBfTV9uZChfX3VybmcpOworCQlfX3YgPSByZXN1bHRfdHlwZSgxLjApICsgX19wYXJhbS5fTV9hMiAqIF9fbjsgCisJICAgICAgfQorCSAgICB3aGlsZSAoX192IDw9IDAuMCk7CisKKwkgICAgX192ID0gX192ICogX192ICogX192OworCSAgICBfX3UgPSBfX2F1cm5nKCk7CisJICB9CisJd2hpbGUgKF9fdSA+IHJlc3VsdF90eXBlKDEuMCkgLSAwLjMzMSAqIF9fbiAqIF9fbiAqIF9fbiAqIF9fbgorCSAgICAgICAmJiAoc3RkOjpsb2coX191KSA+ICgwLjUgKiBfX24gKiBfX24gKyBfX2ExCisJCQkJICAgICogKDEuMCAtIF9fdiArIHN0ZDo6bG9nKF9fdikpKSkpOworCisJaWYgKF9fcGFyYW0uYWxwaGEoKSA9PSBfX3BhcmFtLl9NX21hbHBoYSkKKwkgIHJldHVybiBfX2ExICogX192ICogX19wYXJhbS5iZXRhKCk7CisJZWxzZQorCSAgeworCSAgICBkbworCSAgICAgIF9fdSA9IF9fYXVybmcoKTsKKwkgICAgd2hpbGUgKF9fdSA9PSAwLjApOworCSAgICAKKwkgICAgcmV0dXJuIChzdGQ6OnBvdyhfX3UsIHJlc3VsdF90eXBlKDEuMCkgLyBfX3BhcmFtLmFscGhhKCkpCisJCSAgICAqIF9fYTEgKiBfX3YgKiBfX3BhcmFtLmJldGEoKSk7CisJICB9CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgZ2FtbWFfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBzdGQ6OnN0cmVhbXNpemUgX19wcmVjaXNpb24gPSBfX29zLnByZWNpc2lvbigpOworICAgICAgY29uc3QgX0NoYXJUIF9fc3BhY2UgPSBfX29zLndpZGVuKCcgJyk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OnNjaWVudGlmaWMgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX3NwYWNlKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKHN0ZDo6bnVtZXJpY19saW1pdHM8X1JlYWxUeXBlPjo6bWF4X2RpZ2l0czEwKTsKKworICAgICAgX19vcyA8PCBfX3guYWxwaGEoKSA8PCBfX3NwYWNlIDw8IF9feC5iZXRhKCkKKwkgICA8PCBfX3NwYWNlIDw8IF9feC5fTV9uZDsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgX19vcy5wcmVjaXNpb24oX19wcmVjaXNpb24pOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIGdhbW1hX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBfUmVhbFR5cGUgX19hbHBoYV92YWwsIF9fYmV0YV92YWw7CisgICAgICBfX2lzID4+IF9fYWxwaGFfdmFsID4+IF9fYmV0YV92YWwgPj4gX194Ll9NX25kOworICAgICAgX194LnBhcmFtKHR5cGVuYW1lIGdhbW1hX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKwkJcGFyYW1fdHlwZShfX2FscGhhX3ZhbCwgX19iZXRhX3ZhbCkpOworCisgICAgICBfX2lzLmZsYWdzKF9fZmxhZ3MpOworICAgICAgcmV0dXJuIF9faXM7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdHlwZW5hbWUgd2VpYnVsbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6cmVzdWx0X3R5cGUKKyAgICAgIHdlaWJ1bGxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgeworCV9fZGV0YWlsOjpfQWRhcHRvcjxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciwgcmVzdWx0X3R5cGU+CisJICBfX2F1cm5nKF9fdXJuZyk7CisJcmV0dXJuIF9fcC5iKCkgKiBzdGQ6OnBvdygtc3RkOjpsb2coX19hdXJuZygpKSwKKwkJCQkgIHJlc3VsdF90eXBlKDEpIC8gX19wLmEoKSk7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3Qgd2VpYnVsbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyZWFtc2l6ZSBfX3ByZWNpc2lvbiA9IF9fb3MucHJlY2lzaW9uKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19zcGFjZSA9IF9fb3Mud2lkZW4oJyAnKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6c2NpZW50aWZpYyB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fc3BhY2UpOworICAgICAgX19vcy5wcmVjaXNpb24oc3RkOjpudW1lcmljX2xpbWl0czxfUmVhbFR5cGU+OjptYXhfZGlnaXRzMTApOworCisgICAgICBfX29zIDw8IF9feC5hKCkgPDwgX19zcGFjZSA8PCBfX3guYigpOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgd2VpYnVsbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6c2tpcHdzKTsKKworICAgICAgX1JlYWxUeXBlIF9fYSwgX19iOworICAgICAgX19pcyA+PiBfX2EgPj4gX19iOworICAgICAgX194LnBhcmFtKHR5cGVuYW1lIHdlaWJ1bGxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorCQlwYXJhbV90eXBlKF9fYSwgX19iKSk7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB0eXBlbmFtZSBleHRyZW1lX3ZhbHVlX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjpyZXN1bHRfdHlwZQorICAgICAgZXh0cmVtZV92YWx1ZV9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6CisgICAgICBvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICB7CisJX19kZXRhaWw6Ol9BZGFwdG9yPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCByZXN1bHRfdHlwZT4KKwkgIF9fYXVybmcoX191cm5nKTsKKwlyZXR1cm4gX19wLmEoKSAtIF9fcC5iKCkgKiBzdGQ6OmxvZygtc3RkOjpsb2coX19hdXJuZygpKSk7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgZXh0cmVtZV92YWx1ZV9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyZWFtc2l6ZSBfX3ByZWNpc2lvbiA9IF9fb3MucHJlY2lzaW9uKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19zcGFjZSA9IF9fb3Mud2lkZW4oJyAnKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6c2NpZW50aWZpYyB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fc3BhY2UpOworICAgICAgX19vcy5wcmVjaXNpb24oc3RkOjpudW1lcmljX2xpbWl0czxfUmVhbFR5cGU+OjptYXhfZGlnaXRzMTApOworCisgICAgICBfX29zIDw8IF9feC5hKCkgPDwgX19zcGFjZSA8PCBfX3guYigpOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgZXh0cmVtZV92YWx1ZV9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6c2tpcHdzKTsKKworICAgICAgX1JlYWxUeXBlIF9fYSwgX19iOworICAgICAgX19pcyA+PiBfX2EgPj4gX19iOworICAgICAgX194LnBhcmFtKHR5cGVuYW1lIGV4dHJlbWVfdmFsdWVfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorCQlwYXJhbV90eXBlKF9fYSwgX19iKSk7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZT4KKyAgICB2b2lkCisgICAgZGlzY3JldGVfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPjo6cGFyYW1fdHlwZTo6CisgICAgX01faW5pdGlhbGl6ZSgpCisgICAgeworICAgICAgaWYgKF9NX3Byb2Iuc2l6ZSgpIDwgMikKKwl7CisJICBfTV9wcm9iLmNsZWFyKCk7CisJICBfTV9wcm9iLnB1c2hfYmFjaygxLjApOworCSAgcmV0dXJuOworCX0KKworICAgICAgY29uc3QgZG91YmxlIF9fc3VtID0gc3RkOjphY2N1bXVsYXRlKF9NX3Byb2IuYmVnaW4oKSwKKwkJCQkJICAgX01fcHJvYi5lbmQoKSwgMC4wKTsKKyAgICAgIC8vIE5vdyBub3JtYWxpemUgdGhlIHByb2JhYmlsaXRlcy4KKyAgICAgIF9fZGV0YWlsOjpfX3RyYW5zZm9ybShfTV9wcm9iLmJlZ2luKCksIF9NX3Byb2IuZW5kKCksIF9NX3Byb2IuYmVnaW4oKSwKKwkJCSAgc3RkOjpiaW5kMm5kKHN0ZDo6ZGl2aWRlczxkb3VibGU+KCksIF9fc3VtKSk7CisgICAgICAvLyBBY2N1bXVsYXRlIHBhcnRpYWwgc3Vtcy4KKyAgICAgIF9NX2NwLnJlc2VydmUoX01fcHJvYi5zaXplKCkpOworICAgICAgc3RkOjpwYXJ0aWFsX3N1bShfTV9wcm9iLmJlZ2luKCksIF9NX3Byb2IuZW5kKCksCisJCSAgICAgICBzdGQ6OmJhY2tfaW5zZXJ0ZXIoX01fY3ApKTsKKyAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGFzdCBjdW11bGF0aXZlIHByb2JhYmlsaXR5IGlzIG9uZS4KKyAgICAgIF9NX2NwW19NX2NwLnNpemUoKSAtIDFdID0gMS4wOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuYz4KKyAgICAgIGRpc2NyZXRlX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT46OnBhcmFtX3R5cGU6OgorICAgICAgcGFyYW1fdHlwZShzaXplX3QgX19udywgZG91YmxlIF9feG1pbiwgZG91YmxlIF9feG1heCwgX0Z1bmMgX19mdykKKyAgICAgIDogX01fcHJvYigpLCBfTV9jcCgpCisgICAgICB7CisJY29uc3Qgc2l6ZV90IF9fbiA9IF9fbncgPT0gMCA/IDEgOiBfX253OworCWNvbnN0IGRvdWJsZSBfX2RlbHRhID0gKF9feG1heCAtIF9feG1pbikgLyBfX247CisKKwlfTV9wcm9iLnJlc2VydmUoX19uKTsKKwlmb3IgKHNpemVfdCBfX2sgPSAwOyBfX2sgPCBfX253OyArK19faykKKwkgIF9NX3Byb2IucHVzaF9iYWNrKF9fZncoX194bWluICsgX19rICogX19kZWx0YSArIDAuNSAqIF9fZGVsdGEpKTsKKworCV9NX2luaXRpYWxpemUoKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHR5cGVuYW1lIGRpc2NyZXRlX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT46OnJlc3VsdF90eXBlCisgICAgICBkaXNjcmV0ZV9kaXN0cmlidXRpb248X0ludFR5cGU+OjoKKyAgICAgIG9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJIGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7CisJX19kZXRhaWw6Ol9BZGFwdG9yPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCBkb3VibGU+CisJICBfX2F1cm5nKF9fdXJuZyk7CisKKwljb25zdCBkb3VibGUgX19wID0gX19hdXJuZygpOworCWF1dG8gX19wb3MgPSBzdGQ6Omxvd2VyX2JvdW5kKF9fcGFyYW0uX01fY3AuYmVnaW4oKSwKKwkJCQkgICAgICBfX3BhcmFtLl9NX2NwLmVuZCgpLCBfX3ApOworCisJcmV0dXJuIF9fcG9zIC0gX19wYXJhbS5fTV9jcC5iZWdpbigpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgZGlzY3JldGVfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyZWFtc2l6ZSBfX3ByZWNpc2lvbiA9IF9fb3MucHJlY2lzaW9uKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19zcGFjZSA9IF9fb3Mud2lkZW4oJyAnKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6c2NpZW50aWZpYyB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fc3BhY2UpOworICAgICAgX19vcy5wcmVjaXNpb24oc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXhfZGlnaXRzMTApOworCisgICAgICBzdGQ6OnZlY3Rvcjxkb3VibGU+IF9fcHJvYiA9IF9feC5wcm9iYWJpbGl0aWVzKCk7CisgICAgICBfX29zIDw8IF9fcHJvYi5zaXplKCk7CisgICAgICBmb3IgKGF1dG8gX19kaXQgPSBfX3Byb2IuYmVnaW4oKTsgX19kaXQgIT0gX19wcm9iLmVuZCgpOyArK19fZGl0KQorCV9fb3MgPDwgX19zcGFjZSA8PCAqX19kaXQ7CisKKyAgICAgIF9fb3MuZmxhZ3MoX19mbGFncyk7CisgICAgICBfX29zLmZpbGwoX19maWxsKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKF9fcHJlY2lzaW9uKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIGRpc2NyZXRlX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lzLmZsYWdzKCk7CisgICAgICBfX2lzLmZsYWdzKF9faW9zX2Jhc2U6OmRlYyB8IF9faW9zX2Jhc2U6OnNraXB3cyk7CisKKyAgICAgIHNpemVfdCBfX247CisgICAgICBfX2lzID4+IF9fbjsKKworICAgICAgc3RkOjp2ZWN0b3I8ZG91YmxlPiBfX3Byb2JfdmVjOworICAgICAgX19wcm9iX3ZlYy5yZXNlcnZlKF9fbik7CisgICAgICBmb3IgKDsgX19uICE9IDA7IC0tX19uKQorCXsKKwkgIGRvdWJsZSBfX3Byb2I7CisJICBfX2lzID4+IF9fcHJvYjsKKwkgIF9fcHJvYl92ZWMucHVzaF9iYWNrKF9fcHJvYik7CisJfQorCisgICAgICBfX3gucGFyYW0odHlwZW5hbWUgZGlzY3JldGVfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPjo6CisJCXBhcmFtX3R5cGUoX19wcm9iX3ZlYy5iZWdpbigpLCBfX3Byb2JfdmVjLmVuZCgpKSk7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdm9pZAorICAgIHBpZWNld2lzZV9jb25zdGFudF9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6cGFyYW1fdHlwZTo6CisgICAgX01faW5pdGlhbGl6ZSgpCisgICAgeworICAgICAgaWYgKF9NX2ludC5zaXplKCkgPCAyKQorCXsKKwkgIF9NX2ludC5jbGVhcigpOworCSAgX01faW50LnJlc2VydmUoMik7CisJICBfTV9pbnQucHVzaF9iYWNrKF9SZWFsVHlwZSgwKSk7CisJICBfTV9pbnQucHVzaF9iYWNrKF9SZWFsVHlwZSgxKSk7CisKKwkgIF9NX2Rlbi5jbGVhcigpOworCSAgX01fZGVuLnB1c2hfYmFjaygxLjApOworCisJICByZXR1cm47CisJfQorCisgICAgICBjb25zdCBkb3VibGUgX19zdW0gPSBzdGQ6OmFjY3VtdWxhdGUoX01fZGVuLmJlZ2luKCksCisJCQkJCSAgIF9NX2Rlbi5lbmQoKSwgMC4wKTsKKworICAgICAgX19kZXRhaWw6Ol9fdHJhbnNmb3JtKF9NX2Rlbi5iZWdpbigpLCBfTV9kZW4uZW5kKCksIF9NX2Rlbi5iZWdpbigpLAorCQkJICAgIHN0ZDo6YmluZDJuZChzdGQ6OmRpdmlkZXM8ZG91YmxlPigpLCBfX3N1bSkpOworCisgICAgICBfTV9jcC5yZXNlcnZlKF9NX2Rlbi5zaXplKCkpOworICAgICAgc3RkOjpwYXJ0aWFsX3N1bShfTV9kZW4uYmVnaW4oKSwgX01fZGVuLmVuZCgpLAorCQkgICAgICAgc3RkOjpiYWNrX2luc2VydGVyKF9NX2NwKSk7CisKKyAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGFzdCBjdW11bGF0aXZlIHByb2JhYmlsaXR5IGlzIG9uZS4KKyAgICAgIF9NX2NwW19NX2NwLnNpemUoKSAtIDFdID0gMS4wOworCisgICAgICBmb3IgKHNpemVfdCBfX2sgPSAwOyBfX2sgPCBfTV9kZW4uc2l6ZSgpOyArK19faykKKwlfTV9kZW5bX19rXSAvPSBfTV9pbnRbX19rICsgMV0gLSBfTV9pbnRbX19rXTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yQiwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3JXPgorICAgICAgcGllY2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjpwYXJhbV90eXBlOjoKKyAgICAgIHBhcmFtX3R5cGUoX0lucHV0SXRlcmF0b3JCIF9fYmJlZ2luLAorCQkgX0lucHV0SXRlcmF0b3JCIF9fYmVuZCwKKwkJIF9JbnB1dEl0ZXJhdG9yVyBfX3diZWdpbikKKyAgICAgIDogX01faW50KCksIF9NX2RlbigpLCBfTV9jcCgpCisgICAgICB7CisJaWYgKF9fYmJlZ2luICE9IF9fYmVuZCkKKwkgIHsKKwkgICAgZm9yICg7OykKKwkgICAgICB7CisJCV9NX2ludC5wdXNoX2JhY2soKl9fYmJlZ2luKTsKKwkJKytfX2JiZWdpbjsKKwkJaWYgKF9fYmJlZ2luID09IF9fYmVuZCkKKwkJICBicmVhazsKKworCQlfTV9kZW4ucHVzaF9iYWNrKCpfX3diZWdpbik7CisJCSsrX193YmVnaW47CisJICAgICAgfQorCSAgfQorCisJX01faW5pdGlhbGl6ZSgpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuYz4KKyAgICAgIHBpZWNld2lzZV9jb25zdGFudF9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6cGFyYW1fdHlwZTo6CisgICAgICBwYXJhbV90eXBlKGluaXRpYWxpemVyX2xpc3Q8X1JlYWxUeXBlPiBfX2JsLCBfRnVuYyBfX2Z3KQorICAgICAgOiBfTV9pbnQoKSwgX01fZGVuKCksIF9NX2NwKCkKKyAgICAgIHsKKwlfTV9pbnQucmVzZXJ2ZShfX2JsLnNpemUoKSk7CisJZm9yIChhdXRvIF9fYml0ZXIgPSBfX2JsLmJlZ2luKCk7IF9fYml0ZXIgIT0gX19ibC5lbmQoKTsgKytfX2JpdGVyKQorCSAgX01faW50LnB1c2hfYmFjaygqX19iaXRlcik7CisKKwlfTV9kZW4ucmVzZXJ2ZShfTV9pbnQuc2l6ZSgpIC0gMSk7CisJZm9yIChzaXplX3QgX19rID0gMDsgX19rIDwgX01faW50LnNpemUoKSAtIDE7ICsrX19rKQorCSAgX01fZGVuLnB1c2hfYmFjayhfX2Z3KDAuNSAqIChfTV9pbnRbX19rICsgMV0gKyBfTV9pbnRbX19rXSkpKTsKKworCV9NX2luaXRpYWxpemUoKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmM+CisgICAgICBwaWVjZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OnBhcmFtX3R5cGU6OgorICAgICAgcGFyYW1fdHlwZShzaXplX3QgX19udywgX1JlYWxUeXBlIF9feG1pbiwgX1JlYWxUeXBlIF9feG1heCwgX0Z1bmMgX19mdykKKyAgICAgIDogX01faW50KCksIF9NX2RlbigpLCBfTV9jcCgpCisgICAgICB7CisJY29uc3Qgc2l6ZV90IF9fbiA9IF9fbncgPT0gMCA/IDEgOiBfX253OworCWNvbnN0IF9SZWFsVHlwZSBfX2RlbHRhID0gKF9feG1heCAtIF9feG1pbikgLyBfX247CisKKwlfTV9pbnQucmVzZXJ2ZShfX24gKyAxKTsKKwlmb3IgKHNpemVfdCBfX2sgPSAwOyBfX2sgPD0gX19udzsgKytfX2spCisJICBfTV9pbnQucHVzaF9iYWNrKF9feG1pbiArIF9fayAqIF9fZGVsdGEpOworCisJX01fZGVuLnJlc2VydmUoX19uKTsKKwlmb3IgKHNpemVfdCBfX2sgPSAwOyBfX2sgPCBfX253OyArK19faykKKwkgIF9NX2Rlbi5wdXNoX2JhY2soX19mdyhfTV9pbnRbX19rXSArIDAuNSAqIF9fZGVsdGEpKTsKKworCV9NX2luaXRpYWxpemUoKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB0eXBlbmFtZSBwaWVjZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OnJlc3VsdF90eXBlCisgICAgICBwaWVjZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsKKwlfX2RldGFpbDo6X0FkYXB0b3I8X1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IsIGRvdWJsZT4KKwkgIF9fYXVybmcoX191cm5nKTsKKworCWNvbnN0IGRvdWJsZSBfX3AgPSBfX2F1cm5nKCk7CisJYXV0byBfX3BvcyA9IHN0ZDo6bG93ZXJfYm91bmQoX19wYXJhbS5fTV9jcC5iZWdpbigpLAorCQkJCSAgICAgIF9fcGFyYW0uX01fY3AuZW5kKCksIF9fcCk7CisJY29uc3Qgc2l6ZV90IF9faSA9IF9fcG9zIC0gX19wYXJhbS5fTV9jcC5iZWdpbigpOworCisJY29uc3QgZG91YmxlIF9fcHJlZiA9IF9faSA+IDAgPyBfX3BhcmFtLl9NX2NwW19faSAtIDFdIDogMC4wOworCisJcmV0dXJuIF9fcGFyYW0uX01faW50W19faV0gKyAoX19wIC0gX19wcmVmKSAvIF9fcGFyYW0uX01fZGVuW19faV07CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgcGllY2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3Qgc3RkOjpzdHJlYW1zaXplIF9fcHJlY2lzaW9uID0gX19vcy5wcmVjaXNpb24oKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpzY2llbnRpZmljIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19zcGFjZSk7CisgICAgICBfX29zLnByZWNpc2lvbihzdGQ6Om51bWVyaWNfbGltaXRzPF9SZWFsVHlwZT46Om1heF9kaWdpdHMxMCk7CisKKyAgICAgIHN0ZDo6dmVjdG9yPF9SZWFsVHlwZT4gX19pbnQgPSBfX3guaW50ZXJ2YWxzKCk7CisgICAgICBfX29zIDw8IF9faW50LnNpemUoKSAtIDE7CisKKyAgICAgIGZvciAoYXV0byBfX3hpdCA9IF9faW50LmJlZ2luKCk7IF9feGl0ICE9IF9faW50LmVuZCgpOyArK19feGl0KQorCV9fb3MgPDwgX19zcGFjZSA8PCAqX194aXQ7CisKKyAgICAgIHN0ZDo6dmVjdG9yPGRvdWJsZT4gX19kZW4gPSBfX3guZGVuc2l0aWVzKCk7CisgICAgICBmb3IgKGF1dG8gX19kaXQgPSBfX2Rlbi5iZWdpbigpOyBfX2RpdCAhPSBfX2Rlbi5lbmQoKTsgKytfX2RpdCkKKwlfX29zIDw8IF9fc3BhY2UgPDwgKl9fZGl0OworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgcGllY2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBzaXplX3QgX19uOworICAgICAgX19pcyA+PiBfX247CisKKyAgICAgIHN0ZDo6dmVjdG9yPF9SZWFsVHlwZT4gX19pbnRfdmVjOworICAgICAgX19pbnRfdmVjLnJlc2VydmUoX19uICsgMSk7CisgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPD0gX19uOyArK19faSkKKwl7CisJICBfUmVhbFR5cGUgX19pbnQ7CisJICBfX2lzID4+IF9faW50OworCSAgX19pbnRfdmVjLnB1c2hfYmFjayhfX2ludCk7CisJfQorCisgICAgICBzdGQ6OnZlY3Rvcjxkb3VibGU+IF9fZGVuX3ZlYzsKKyAgICAgIF9fZGVuX3ZlYy5yZXNlcnZlKF9fbik7CisgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX247ICsrX19pKQorCXsKKwkgIGRvdWJsZSBfX2RlbjsKKwkgIF9faXMgPj4gX19kZW47CisJICBfX2Rlbl92ZWMucHVzaF9iYWNrKF9fZGVuKTsKKwl9CisKKyAgICAgIF9feC5wYXJhbSh0eXBlbmFtZSBwaWVjZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorCSAgcGFyYW1fdHlwZShfX2ludF92ZWMuYmVnaW4oKSwgX19pbnRfdmVjLmVuZCgpLCBfX2Rlbl92ZWMuYmVnaW4oKSkpOworCisgICAgICBfX2lzLmZsYWdzKF9fZmxhZ3MpOworICAgICAgcmV0dXJuIF9faXM7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHZvaWQKKyAgICBwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjpwYXJhbV90eXBlOjoKKyAgICBfTV9pbml0aWFsaXplKCkKKyAgICB7CisgICAgICBpZiAoX01faW50LnNpemUoKSA8IDIpCisJeworCSAgX01faW50LmNsZWFyKCk7CisJICBfTV9pbnQucmVzZXJ2ZSgyKTsKKwkgIF9NX2ludC5wdXNoX2JhY2soX1JlYWxUeXBlKDApKTsKKwkgIF9NX2ludC5wdXNoX2JhY2soX1JlYWxUeXBlKDEpKTsKKworCSAgX01fZGVuLmNsZWFyKCk7CisJICBfTV9kZW4ucmVzZXJ2ZSgyKTsKKwkgIF9NX2Rlbi5wdXNoX2JhY2soMS4wKTsKKwkgIF9NX2Rlbi5wdXNoX2JhY2soMS4wKTsKKworCSAgcmV0dXJuOworCX0KKworICAgICAgZG91YmxlIF9fc3VtID0gMC4wOworICAgICAgX01fY3AucmVzZXJ2ZShfTV9pbnQuc2l6ZSgpIC0gMSk7CisgICAgICBfTV9tLnJlc2VydmUoX01faW50LnNpemUoKSAtIDEpOworICAgICAgZm9yIChzaXplX3QgX19rID0gMDsgX19rIDwgX01faW50LnNpemUoKSAtIDE7ICsrX19rKQorCXsKKwkgIGNvbnN0IF9SZWFsVHlwZSBfX2RlbHRhID0gX01faW50W19fayArIDFdIC0gX01faW50W19fa107CisJICBfX3N1bSArPSAwLjUgKiAoX01fZGVuW19fayArIDFdICsgX01fZGVuW19fa10pICogX19kZWx0YTsKKwkgIF9NX2NwLnB1c2hfYmFjayhfX3N1bSk7CisJICBfTV9tLnB1c2hfYmFjaygoX01fZGVuW19fayArIDFdIC0gX01fZGVuW19fa10pIC8gX19kZWx0YSk7CisJfQorCisgICAgICAvLyAgTm93IG5vcm1hbGl6ZSB0aGUgZGVuc2l0aWVzLi4uCisgICAgICBfX2RldGFpbDo6X190cmFuc2Zvcm0oX01fZGVuLmJlZ2luKCksIF9NX2Rlbi5lbmQoKSwgX01fZGVuLmJlZ2luKCksCisJCQkgIHN0ZDo6YmluZDJuZChzdGQ6OmRpdmlkZXM8ZG91YmxlPigpLCBfX3N1bSkpOworICAgICAgLy8gIC4uLiBhbmQgcGFydGlhbCBzdW1zLi4uIAorICAgICAgX19kZXRhaWw6Ol9fdHJhbnNmb3JtKF9NX2NwLmJlZ2luKCksIF9NX2NwLmVuZCgpLCBfTV9jcC5iZWdpbigpLAorCQkJICAgIHN0ZDo6YmluZDJuZChzdGQ6OmRpdmlkZXM8ZG91YmxlPigpLCBfX3N1bSkpOworICAgICAgLy8gIC4uLiBhbmQgc2xvcGVzLgorICAgICAgX19kZXRhaWw6Ol9fdHJhbnNmb3JtKF9NX20uYmVnaW4oKSwgX01fbS5lbmQoKSwgX01fbS5iZWdpbigpLAorCQkJICAgIHN0ZDo6YmluZDJuZChzdGQ6OmRpdmlkZXM8ZG91YmxlPigpLCBfX3N1bSkpOworICAgICAgLy8gIE1ha2Ugc3VyZSB0aGUgbGFzdCBjdW11bGF0aXZlIHByb2JhYmxpbGl0eSBpcyBvbmUuCisgICAgICBfTV9jcFtfTV9jcC5zaXplKCkgLSAxXSA9IDEuMDsKKyAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvckIsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yVz4KKyAgICAgIHBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OnBhcmFtX3R5cGU6OgorICAgICAgcGFyYW1fdHlwZShfSW5wdXRJdGVyYXRvckIgX19iYmVnaW4sCisJCSBfSW5wdXRJdGVyYXRvckIgX19iZW5kLAorCQkgX0lucHV0SXRlcmF0b3JXIF9fd2JlZ2luKQorICAgICAgOiBfTV9pbnQoKSwgX01fZGVuKCksIF9NX2NwKCksIF9NX20oKQorICAgICAgeworCWZvciAoOyBfX2JiZWdpbiAhPSBfX2JlbmQ7ICsrX19iYmVnaW4sICsrX193YmVnaW4pCisJICB7CisJICAgIF9NX2ludC5wdXNoX2JhY2soKl9fYmJlZ2luKTsKKwkgICAgX01fZGVuLnB1c2hfYmFjaygqX193YmVnaW4pOworCSAgfQorCisJX01faW5pdGlhbGl6ZSgpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuYz4KKyAgICAgIHBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OnBhcmFtX3R5cGU6OgorICAgICAgcGFyYW1fdHlwZShpbml0aWFsaXplcl9saXN0PF9SZWFsVHlwZT4gX19ibCwgX0Z1bmMgX19mdykKKyAgICAgIDogX01faW50KCksIF9NX2RlbigpLCBfTV9jcCgpLCBfTV9tKCkKKyAgICAgIHsKKwlfTV9pbnQucmVzZXJ2ZShfX2JsLnNpemUoKSk7CisJX01fZGVuLnJlc2VydmUoX19ibC5zaXplKCkpOworCWZvciAoYXV0byBfX2JpdGVyID0gX19ibC5iZWdpbigpOyBfX2JpdGVyICE9IF9fYmwuZW5kKCk7ICsrX19iaXRlcikKKwkgIHsKKwkgICAgX01faW50LnB1c2hfYmFjaygqX19iaXRlcik7CisJICAgIF9NX2Rlbi5wdXNoX2JhY2soX19mdygqX19iaXRlcikpOworCSAgfQorCisJX01faW5pdGlhbGl6ZSgpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuYz4KKyAgICAgIHBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OnBhcmFtX3R5cGU6OgorICAgICAgcGFyYW1fdHlwZShzaXplX3QgX19udywgX1JlYWxUeXBlIF9feG1pbiwgX1JlYWxUeXBlIF9feG1heCwgX0Z1bmMgX19mdykKKyAgICAgIDogX01faW50KCksIF9NX2RlbigpLCBfTV9jcCgpLCBfTV9tKCkKKyAgICAgIHsKKwljb25zdCBzaXplX3QgX19uID0gX19udyA9PSAwID8gMSA6IF9fbnc7CisJY29uc3QgX1JlYWxUeXBlIF9fZGVsdGEgPSAoX194bWF4IC0gX194bWluKSAvIF9fbjsKKworCV9NX2ludC5yZXNlcnZlKF9fbiArIDEpOworCV9NX2Rlbi5yZXNlcnZlKF9fbiArIDEpOworCWZvciAoc2l6ZV90IF9fayA9IDA7IF9fayA8PSBfX253OyArK19faykKKwkgIHsKKwkgICAgX01faW50LnB1c2hfYmFjayhfX3htaW4gKyBfX2sgKiBfX2RlbHRhKTsKKwkgICAgX01fZGVuLnB1c2hfYmFjayhfX2Z3KF9NX2ludFtfX2tdICsgX19kZWx0YSkpOworCSAgfQorCisJX01faW5pdGlhbGl6ZSgpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHR5cGVuYW1lIHBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OnJlc3VsdF90eXBlCisgICAgICBwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKyAgICAgIG9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJIGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7CisJX19kZXRhaWw6Ol9BZGFwdG9yPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCBkb3VibGU+CisJICBfX2F1cm5nKF9fdXJuZyk7CisKKwljb25zdCBkb3VibGUgX19wID0gX19hdXJuZygpOworCWlmIChfX3BhcmFtLl9NX20uZW1wdHkoKSkKKwkgIHJldHVybiBfX3A7CisKKwlhdXRvIF9fcG9zID0gc3RkOjpsb3dlcl9ib3VuZChfX3BhcmFtLl9NX2NwLmJlZ2luKCksCisJCQkJICAgICAgX19wYXJhbS5fTV9jcC5lbmQoKSwgX19wKTsKKwljb25zdCBzaXplX3QgX19pID0gX19wb3MgLSBfX3BhcmFtLl9NX2NwLmJlZ2luKCk7CisKKwljb25zdCBkb3VibGUgX19wcmVmID0gX19pID4gMCA/IF9fcGFyYW0uX01fY3BbX19pIC0gMV0gOiAwLjA7CisKKwljb25zdCBkb3VibGUgX19hID0gMC41ICogX19wYXJhbS5fTV9tW19faV07CisJY29uc3QgZG91YmxlIF9fYiA9IF9fcGFyYW0uX01fZGVuW19faV07CisJY29uc3QgZG91YmxlIF9fY20gPSBfX3AgLSBfX3ByZWY7CisKKwlfUmVhbFR5cGUgX194ID0gX19wYXJhbS5fTV9pbnRbX19pXTsKKwlpZiAoX19hID09IDApCisJICBfX3ggKz0gX19jbSAvIF9fYjsKKwllbHNlCisJICB7CisJICAgIGNvbnN0IGRvdWJsZSBfX2QgPSBfX2IgKiBfX2IgKyA0LjAgKiBfX2EgKiBfX2NtOworCSAgICBfX3ggKz0gMC41ICogKHN0ZDo6c3FydChfX2QpIC0gX19iKSAvIF9fYTsKKyAgICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIF9feDsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3Qgc3RkOjpzdHJlYW1zaXplIF9fcHJlY2lzaW9uID0gX19vcy5wcmVjaXNpb24oKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpzY2llbnRpZmljIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19zcGFjZSk7CisgICAgICBfX29zLnByZWNpc2lvbihzdGQ6Om51bWVyaWNfbGltaXRzPF9SZWFsVHlwZT46Om1heF9kaWdpdHMxMCk7CisKKyAgICAgIHN0ZDo6dmVjdG9yPF9SZWFsVHlwZT4gX19pbnQgPSBfX3guaW50ZXJ2YWxzKCk7CisgICAgICBfX29zIDw8IF9faW50LnNpemUoKSAtIDE7CisKKyAgICAgIGZvciAoYXV0byBfX3hpdCA9IF9faW50LmJlZ2luKCk7IF9feGl0ICE9IF9faW50LmVuZCgpOyArK19feGl0KQorCV9fb3MgPDwgX19zcGFjZSA8PCAqX194aXQ7CisKKyAgICAgIHN0ZDo6dmVjdG9yPGRvdWJsZT4gX19kZW4gPSBfX3guZGVuc2l0aWVzKCk7CisgICAgICBmb3IgKGF1dG8gX19kaXQgPSBfX2Rlbi5iZWdpbigpOyBfX2RpdCAhPSBfX2Rlbi5lbmQoKTsgKytfX2RpdCkKKwlfX29zIDw8IF9fc3BhY2UgPDwgKl9fZGl0OworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgcGllY2V3aXNlX2xpbmVhcl9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6c2tpcHdzKTsKKworICAgICAgc2l6ZV90IF9fbjsKKyAgICAgIF9faXMgPj4gX19uOworCisgICAgICBzdGQ6OnZlY3RvcjxfUmVhbFR5cGU+IF9faW50X3ZlYzsKKyAgICAgIF9faW50X3ZlYy5yZXNlcnZlKF9fbiArIDEpOworICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDw9IF9fbjsgKytfX2kpCisJeworCSAgX1JlYWxUeXBlIF9faW50OworCSAgX19pcyA+PiBfX2ludDsKKwkgIF9faW50X3ZlYy5wdXNoX2JhY2soX19pbnQpOworCX0KKworICAgICAgc3RkOjp2ZWN0b3I8ZG91YmxlPiBfX2Rlbl92ZWM7CisgICAgICBfX2Rlbl92ZWMucmVzZXJ2ZShfX24gKyAxKTsKKyAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8PSBfX247ICsrX19pKQorCXsKKwkgIGRvdWJsZSBfX2RlbjsKKwkgIF9faXMgPj4gX19kZW47CisJICBfX2Rlbl92ZWMucHVzaF9iYWNrKF9fZGVuKTsKKwl9CisKKyAgICAgIF9feC5wYXJhbSh0eXBlbmFtZSBwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKwkgIHBhcmFtX3R5cGUoX19pbnRfdmVjLmJlZ2luKCksIF9faW50X3ZlYy5lbmQoKSwgX19kZW5fdmVjLmJlZ2luKCkpKTsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlPgorICAgIHNlZWRfc2VxOjpzZWVkX3NlcShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X0ludFR5cGU+IF9faWwpCisgICAgeworICAgICAgZm9yIChhdXRvIF9faXRlciA9IF9faWwuYmVnaW4oKTsgX19pdGVyICE9IF9faWwuZW5kKCk7ICsrX19pdGVyKQorCV9NX3YucHVzaF9iYWNrKF9fZGV0YWlsOjpfX21vZDxyZXN1bHRfdHlwZSwKKwkJICAgICAgIF9fZGV0YWlsOjpfU2hpZnQ8cmVzdWx0X3R5cGUsIDMyPjo6X192YWx1ZT4oKl9faXRlcikpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICBzZWVkX3NlcTo6c2VlZF9zZXEoX0lucHV0SXRlcmF0b3IgX19iZWdpbiwgX0lucHV0SXRlcmF0b3IgX19lbmQpCisgICAgeworICAgICAgZm9yIChfSW5wdXRJdGVyYXRvciBfX2l0ZXIgPSBfX2JlZ2luOyBfX2l0ZXIgIT0gX19lbmQ7ICsrX19pdGVyKQorCV9NX3YucHVzaF9iYWNrKF9fZGV0YWlsOjpfX21vZDxyZXN1bHRfdHlwZSwKKwkJICAgICAgIF9fZGV0YWlsOjpfU2hpZnQ8cmVzdWx0X3R5cGUsIDMyPjo6X192YWx1ZT4oKl9faXRlcikpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CisgICAgdm9pZAorICAgIHNlZWRfc2VxOjpnZW5lcmF0ZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19iZWdpbiwKKwkJICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2VuZCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisgICAgICAgIF9UeXBlOworCisgICAgICBpZiAoX19iZWdpbiA9PSBfX2VuZCkKKwlyZXR1cm47CisKKyAgICAgIHN0ZDo6ZmlsbChfX2JlZ2luLCBfX2VuZCwgX1R5cGUoMHg4YjhiOGI4YnUpKTsKKworICAgICAgY29uc3Qgc2l6ZV90IF9fbiA9IF9fZW5kIC0gX19iZWdpbjsKKyAgICAgIGNvbnN0IHNpemVfdCBfX3MgPSBfTV92LnNpemUoKTsKKyAgICAgIGNvbnN0IHNpemVfdCBfX3QgPSAoX19uID49IDYyMykgPyAxMQorCQkgICAgICAgOiAoX19uID49ICA2OCkgPyA3CisJCSAgICAgICA6IChfX24gPj0gIDM5KSA/IDUKKwkJICAgICAgIDogKF9fbiA+PSAgIDcpID8gMworCQkgICAgICAgOiAoX19uIC0gMSkgLyAyOworICAgICAgY29uc3Qgc2l6ZV90IF9fcCA9IChfX24gLSBfX3QpIC8gMjsKKyAgICAgIGNvbnN0IHNpemVfdCBfX3EgPSBfX3AgKyBfX3Q7CisgICAgICBjb25zdCBzaXplX3QgX19tID0gc3RkOjptYXgoX19zICsgMSwgX19uKTsKKworICAgICAgZm9yIChzaXplX3QgX19rID0gMDsgX19rIDwgX19tOyArK19faykKKwl7CisJICBfVHlwZSBfX2FyZyA9IChfX2JlZ2luW19fayAlIF9fbl0KKwkJCSBeIF9fYmVnaW5bKF9fayArIF9fcCkgJSBfX25dCisJCQkgXiBfX2JlZ2luWyhfX2sgLSAxKSAlIF9fbl0pOworCSAgX1R5cGUgX19yMSA9IF9fYXJnIF4gKF9fYXJnIDw8IDI3KTsKKwkgIF9fcjEgPSBfX2RldGFpbDo6X19tb2Q8X1R5cGUsIF9fZGV0YWlsOjpfU2hpZnQ8X1R5cGUsIDMyPjo6X192YWx1ZSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgMTY2NDUyNXUsIDB1PihfX3IxKTsKKwkgIF9UeXBlIF9fcjIgPSBfX3IxOworCSAgaWYgKF9fayA9PSAwKQorCSAgICBfX3IyICs9IF9fczsKKwkgIGVsc2UgaWYgKF9fayA8PSBfX3MpCisJICAgIF9fcjIgKz0gX19rICUgX19uICsgX01fdltfX2sgLSAxXTsKKwkgIGVsc2UKKwkgICAgX19yMiArPSBfX2sgJSBfX247CisJICBfX3IyID0gX19kZXRhaWw6Ol9fbW9kPF9UeXBlLAorCSAgICAgICAgICAgX19kZXRhaWw6Ol9TaGlmdDxfVHlwZSwgMzI+OjpfX3ZhbHVlPihfX3IyKTsKKwkgIF9fYmVnaW5bKF9fayArIF9fcCkgJSBfX25dICs9IF9fcjE7CisJICBfX2JlZ2luWyhfX2sgKyBfX3EpICUgX19uXSArPSBfX3IyOworCSAgX19iZWdpbltfX2sgJSBfX25dID0gX19yMjsKKwl9CisKKyAgICAgIGZvciAoc2l6ZV90IF9fayA9IF9fbTsgX19rIDwgX19tICsgX19uOyArK19faykKKwl7CisJICBfVHlwZSBfX2FyZyA9IChfX2JlZ2luW19fayAlIF9fbl0KKwkJCSArIF9fYmVnaW5bKF9fayArIF9fcCkgJSBfX25dCisJCQkgKyBfX2JlZ2luWyhfX2sgLSAxKSAlIF9fbl0pOworCSAgX1R5cGUgX19yMyA9IF9fYXJnIF4gKF9fYXJnIDw8IDI3KTsKKwkgIF9fcjMgPSBfX2RldGFpbDo6X19tb2Q8X1R5cGUsIF9fZGV0YWlsOjpfU2hpZnQ8X1R5cGUsIDMyPjo6X192YWx1ZSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgMTU2NjA4Mzk0MXUsIDB1PihfX3IzKTsKKwkgIF9UeXBlIF9fcjQgPSBfX3IzIC0gX19rICUgX19uOworCSAgX19yNCA9IF9fZGV0YWlsOjpfX21vZDxfVHlwZSwKKwkgICAgICAgICAgIF9fZGV0YWlsOjpfU2hpZnQ8X1R5cGUsIDMyPjo6X192YWx1ZT4oX19yNCk7CisJICBfX2JlZ2luWyhfX2sgKyBfX3ApICUgX19uXSBePSBfX3I0OworCSAgX19iZWdpblsoX19rICsgX19xKSAlIF9fbl0gXj0gX19yMzsKKwkgIF9fYmVnaW5bX19rICUgX19uXSA9IF9fcjQ7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHNpemVfdCBfX2JpdHMsCisJICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgX1JlYWxUeXBlCisgICAgZ2VuZXJhdGVfY2Fub25pY2FsKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisgICAgeworICAgICAgY29uc3Qgc2l6ZV90IF9fYgorCT0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGQ6Om51bWVyaWNfbGltaXRzPF9SZWFsVHlwZT46OmRpZ2l0cyksCisgICAgICAgICAgICAgICAgICAgX19iaXRzKTsKKyAgICAgIGNvbnN0IGxvbmcgZG91YmxlIF9fciA9IHN0YXRpY19jYXN0PGxvbmcgZG91YmxlPihfX3VybmcubWF4KCkpCisJCQkgICAgLSBzdGF0aWNfY2FzdDxsb25nIGRvdWJsZT4oX191cm5nLm1pbigpKSArIDEuMEw7CisgICAgICBjb25zdCBzaXplX3QgX19sb2cyciA9IHN0ZDo6bG9nKF9fcikgLyBzdGQ6OmxvZygyLjBMKTsKKyAgICAgIHNpemVfdCBfX2sgPSBzdGQ6Om1heDxzaXplX3Q+KDFVTCwgKF9fYiArIF9fbG9nMnIgLSAxVUwpIC8gX19sb2cycik7CisgICAgICBfUmVhbFR5cGUgX19zdW0gPSBfUmVhbFR5cGUoMCk7CisgICAgICBfUmVhbFR5cGUgX190bXAgPSBfUmVhbFR5cGUoMSk7CisgICAgICBmb3IgKDsgX19rICE9IDA7IC0tX19rKQorCXsKKwkgIF9fc3VtICs9IF9SZWFsVHlwZShfX3VybmcoKSAtIF9fdXJuZy5taW4oKSkgKiBfX3RtcDsKKwkgIF9fdG1wICo9IF9fcjsKKwl9CisgICAgICByZXR1cm4gX19zdW0gLyBfX3RtcDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc2hhcmVkX3B0ci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3NoYXJlZF9wdHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTE5NjAwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3NoYXJlZF9wdHIuaApAQCAtMCwwICsxLDQ3OCBAQAorLy8gc2hhcmVkX3B0ciBhbmQgd2Vha19wdHIgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIEdDQyBOb3RlOiBCYXNlZCBvbiBmaWxlcyBmcm9tIHZlcnNpb24gMS4zMi4wIG9mIHRoZSBCb29zdCBsaWJyYXJ5LgorCisvLyAgc2hhcmVkX2NvdW50LmhwcAorLy8gIENvcHlyaWdodCAoYykgMjAwMSwgMjAwMiwgMjAwMyBQZXRlciBEaW1vdiBhbmQgTXVsdGkgTWVkaWEgTHRkLgorCisvLyAgc2hhcmVkX3B0ci5ocHAKKy8vICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTkgR3JlZyBDb2x2aW4gYW5kIEJlbWFuIERhd2VzLgorLy8gIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMyBQZXRlciBEaW1vdgorCisvLyAgd2Vha19wdHIuaHBwCisvLyAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzIFBldGVyIERpbW92CisKKy8vICBlbmFibGVfc2hhcmVkX2Zyb21fdGhpcy5ocHAKKy8vICBDb3B5cmlnaHQgKEMpIDIwMDIgUGV0ZXIgRGltb3YKKworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCisvLyBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAorLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisvKiogQGZpbGUgYml0cy9zaGFyZWRfcHRyLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfU0hBUkVEX1BUUl9ICisjZGVmaW5lIF9TSEFSRURfUFRSX0ggMQorCisjaW5jbHVkZSA8Yml0cy9zaGFyZWRfcHRyX2Jhc2UuaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgcG9pbnRlcl9hYnN0cmFjdGlvbnMKKyAgICogQHsKKyAgICovCisKKyAgLy8vIDIuMi4zLjcgc2hhcmVkX3B0ciBJL08KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoLCB0eXBlbmFtZSBfVHIsIHR5cGVuYW1lIF9UcCwgX0xvY2tfcG9saWN5IF9McD4KKyAgICBpbmxpbmUgc3RkOjpiYXNpY19vc3RyZWFtPF9DaCwgX1RyPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2gsIF9Ucj4mIF9fb3MsCisJICAgICAgIGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAsIF9McD4mIF9fcCkKKyAgICB7CisgICAgICBfX29zIDw8IF9fcC5nZXQoKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICAvLy8gMi4yLjMuMTAgc2hhcmVkX3B0ciBnZXRfZGVsZXRlciAoZXhwZXJpbWVudGFsKQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRGVsLCB0eXBlbmFtZSBfVHAsIF9Mb2NrX3BvbGljeSBfTHA+CisgICAgaW5saW5lIF9EZWwqCisgICAgZ2V0X2RlbGV0ZXIoY29uc3QgX19zaGFyZWRfcHRyPF9UcCwgX0xwPiYgX19wKQorICAgIHsKKyNpZmRlZiBfX0dYWF9SVFRJCisgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8X0RlbCo+KF9fcC5fTV9nZXRfZGVsZXRlcih0eXBlaWQoX0RlbCkpKTsKKyNlbHNlCisgICAgICByZXR1cm4gMDsKKyNlbmRpZgorICAgIH0KKworCisgIC8qKgorICAgKiAgQGJyaWVmICBBIHNtYXJ0IHBvaW50ZXIgd2l0aCByZWZlcmVuY2UtY291bnRlZCBjb3B5IHNlbWFudGljcy4KKyAgICoKKyAgICogIFRoZSBvYmplY3QgcG9pbnRlZCB0byBpcyBkZWxldGVkIHdoZW4gdGhlIGxhc3Qgc2hhcmVkX3B0ciBwb2ludGluZyB0bworICAgKiAgaXQgaXMgZGVzdHJveWVkIG9yIHJlc2V0LgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3Mgc2hhcmVkX3B0ciA6IHB1YmxpYyBfX3NoYXJlZF9wdHI8X1RwPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdCBhbiBlbXB0eSAlc2hhcmVkX3B0ci4KKyAgICAgICAqICBAcG9zdCAgIHVzZV9jb3VudCgpPT0wICYmIGdldCgpPT0wCisgICAgICAgKi8KKyAgICAgIHNoYXJlZF9wdHIoKSA6IF9fc2hhcmVkX3B0cjxfVHA+KCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0IGEgJXNoYXJlZF9wdHIgdGhhdCBvd25zIHRoZSBwb2ludGVyIEBhIF9fcC4KKyAgICAgICAqICBAcGFyYW0gIF9fcCAgQSBwb2ludGVyIHRoYXQgaXMgY29udmVydGlibGUgdG8gZWxlbWVudF90eXBlKi4KKyAgICAgICAqICBAcG9zdCAgIHVzZV9jb3VudCgpID09IDEgJiYgZ2V0KCkgPT0gX19wCisgICAgICAgKiAgQHRocm93ICBzdGQ6OmJhZF9hbGxvYywgaW4gd2hpY2ggY2FzZSBAYyBkZWxldGUgQGEgX19wIGlzIGNhbGxlZC4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKwlleHBsaWNpdCBzaGFyZWRfcHRyKF9UcDEqIF9fcCkgOiBfX3NoYXJlZF9wdHI8X1RwPihfX3ApIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdCBhICVzaGFyZWRfcHRyIHRoYXQgb3ducyB0aGUgcG9pbnRlciBAYSBfX3AKKyAgICAgICAqICAgICAgICAgIGFuZCB0aGUgZGVsZXRlciBAYSBfX2QuCisgICAgICAgKiAgQHBhcmFtICBfX3AgIEEgcG9pbnRlci4KKyAgICAgICAqICBAcGFyYW0gIF9fZCAgQSBkZWxldGVyLgorICAgICAgICogIEBwb3N0ICAgdXNlX2NvdW50KCkgPT0gMSAmJiBnZXQoKSA9PSBfX3AKKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6YmFkX2FsbG9jLCBpbiB3aGljaCBjYXNlIEBhIF9fZChfX3ApIGlzIGNhbGxlZC4KKyAgICAgICAqCisgICAgICAgKiAgUmVxdWlyZW1lbnRzOiBfRGVsZXRlcidzIGNvcHkgY29uc3RydWN0b3IgYW5kIGRlc3RydWN0b3IgbXVzdAorICAgICAgICogIG5vdCB0aHJvdworICAgICAgICoKKyAgICAgICAqICBfX3NoYXJlZF9wdHIgd2lsbCByZWxlYXNlIF9fcCBieSBjYWxsaW5nIF9fZChfX3ApCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9EZWxldGVyPgorCXNoYXJlZF9wdHIoX1RwMSogX19wLCBfRGVsZXRlciBfX2QpIDogX19zaGFyZWRfcHRyPF9UcD4oX19wLCBfX2QpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdCBhICVzaGFyZWRfcHRyIHRoYXQgb3ducyB0aGUgcG9pbnRlciBAYSBfX3AKKyAgICAgICAqICAgICAgICAgIGFuZCB0aGUgZGVsZXRlciBAYSBfX2QuCisgICAgICAgKiAgQHBhcmFtICBfX3AgIEEgcG9pbnRlci4KKyAgICAgICAqICBAcGFyYW0gIF9fZCAgQSBkZWxldGVyLgorICAgICAgICogIEBwYXJhbSAgX19hICBBbiBhbGxvY2F0b3IuCisgICAgICAgKiAgQHBvc3QgICB1c2VfY291bnQoKSA9PSAxICYmIGdldCgpID09IF9fcAorICAgICAgICogIEB0aHJvdyAgc3RkOjpiYWRfYWxsb2MsIGluIHdoaWNoIGNhc2UgQGEgX19kKF9fcCkgaXMgY2FsbGVkLgorICAgICAgICoKKyAgICAgICAqICBSZXF1aXJlbWVudHM6IF9EZWxldGVyJ3MgY29weSBjb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3RvciBtdXN0CisgICAgICAgKiAgbm90IHRocm93IF9BbGxvYydzIGNvcHkgY29uc3RydWN0b3IgYW5kIGRlc3RydWN0b3IgbXVzdCBub3QKKyAgICAgICAqICB0aHJvdy4KKyAgICAgICAqCisgICAgICAgKiAgX19zaGFyZWRfcHRyIHdpbGwgcmVsZWFzZSBfX3AgYnkgY2FsbGluZyBfX2QoX19wKQorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfRGVsZXRlciwgdHlwZW5hbWUgX0FsbG9jPgorCXNoYXJlZF9wdHIoX1RwMSogX19wLCBfRGVsZXRlciBfX2QsIGNvbnN0IF9BbGxvYyYgX19hKQorCTogX19zaGFyZWRfcHRyPF9UcD4oX19wLCBfX2QsIF9fYSkgeyB9CisKKyAgICAgIC8vIEFsaWFzaW5nIGNvbnN0cnVjdG9yCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0cyBhICVzaGFyZWRfcHRyIGluc3RhbmNlIHRoYXQgc3RvcmVzIEBhIF9fcAorICAgICAgICogICAgICAgICAgYW5kIHNoYXJlcyBvd25lcnNoaXAgd2l0aCBAYSBfX3IuCisgICAgICAgKiAgQHBhcmFtICBfX3IgIEEgJXNoYXJlZF9wdHIuCisgICAgICAgKiAgQHBhcmFtICBfX3AgIEEgcG9pbnRlciB0aGF0IHdpbGwgcmVtYWluIHZhbGlkIHdoaWxlIEBhICpfX3IgaXMgdmFsaWQuCisgICAgICAgKiAgQHBvc3QgICBnZXQoKSA9PSBfX3AgJiYgdXNlX2NvdW50KCkgPT0gX19yLnVzZV9jb3VudCgpCisgICAgICAgKgorICAgICAgICogIFRoaXMgY2FuIGJlIHVzZWQgdG8gY29uc3RydWN0IGEgQGMgc2hhcmVkX3B0ciB0byBhIHN1Yi1vYmplY3QKKyAgICAgICAqICBvZiBhbiBvYmplY3QgbWFuYWdlZCBieSBhbiBleGlzdGluZyBAYyBzaGFyZWRfcHRyLgorICAgICAgICoKKyAgICAgICAqIEBjb2RlCisgICAgICAgKiBzaGFyZWRfcHRyPCBwYWlyPGludCxpbnQ+ID4gcGlpKG5ldyBwYWlyPGludCxpbnQ+KCkpOworICAgICAgICogc2hhcmVkX3B0cjxpbnQ+IHBpKHBpaSwgJnBpaS0+Zmlyc3QpOworICAgICAgICogYXNzZXJ0KHBpaS51c2VfY291bnQoKSA9PSAyKTsKKyAgICAgICAqIEBlbmRjb2RlCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisJc2hhcmVkX3B0cihjb25zdCBzaGFyZWRfcHRyPF9UcDE+JiBfX3IsIF9UcCogX19wKQorCTogX19zaGFyZWRfcHRyPF9UcD4oX19yLCBfX3ApIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIElmIEBhIF9fciBpcyBlbXB0eSwgY29uc3RydWN0cyBhbiBlbXB0eSAlc2hhcmVkX3B0cjsKKyAgICAgICAqICAgICAgICAgIG90aGVyd2lzZSBjb25zdHJ1Y3QgYSAlc2hhcmVkX3B0ciB0aGF0IHNoYXJlcyBvd25lcnNoaXAKKyAgICAgICAqICAgICAgICAgIHdpdGggQGEgX19yLgorICAgICAgICogIEBwYXJhbSAgX19yICBBICVzaGFyZWRfcHRyLgorICAgICAgICogIEBwb3N0ICAgZ2V0KCkgPT0gX19yLmdldCgpICYmIHVzZV9jb3VudCgpID09IF9fci51c2VfY291bnQoKQorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCXNoYXJlZF9wdHIoY29uc3Qgc2hhcmVkX3B0cjxfVHAxPiYgX19yKSA6IF9fc2hhcmVkX3B0cjxfVHA+KF9fcikgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTW92ZS1jb25zdHJ1Y3RzIGEgJXNoYXJlZF9wdHIgaW5zdGFuY2UgZnJvbSBAYSBfX3IuCisgICAgICAgKiAgQHBhcmFtICBfX3IgIEEgJXNoYXJlZF9wdHIgcnZhbHVlLgorICAgICAgICogIEBwb3N0ICAgKnRoaXMgY29udGFpbnMgdGhlIG9sZCB2YWx1ZSBvZiBAYSBfX3IsIEBhIF9fciBpcyBlbXB0eS4KKyAgICAgICAqLworICAgICAgc2hhcmVkX3B0cihzaGFyZWRfcHRyJiYgX19yKQorICAgICAgOiBfX3NoYXJlZF9wdHI8X1RwPihzdGQ6Om1vdmUoX19yKSkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTW92ZS1jb25zdHJ1Y3RzIGEgJXNoYXJlZF9wdHIgaW5zdGFuY2UgZnJvbSBAYSBfX3IuCisgICAgICAgKiAgQHBhcmFtICBfX3IgIEEgJXNoYXJlZF9wdHIgcnZhbHVlLgorICAgICAgICogIEBwb3N0ICAgKnRoaXMgY29udGFpbnMgdGhlIG9sZCB2YWx1ZSBvZiBAYSBfX3IsIEBhIF9fciBpcyBlbXB0eS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKwlzaGFyZWRfcHRyKHNoYXJlZF9wdHI8X1RwMT4mJiBfX3IpCisJOiBfX3NoYXJlZF9wdHI8X1RwPihzdGQ6Om1vdmUoX19yKSkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0cyBhICVzaGFyZWRfcHRyIHRoYXQgc2hhcmVzIG93bmVyc2hpcCB3aXRoIEBhIF9fcgorICAgICAgICogICAgICAgICAgYW5kIHN0b3JlcyBhIGNvcHkgb2YgdGhlIHBvaW50ZXIgc3RvcmVkIGluIEBhIF9fci4KKyAgICAgICAqICBAcGFyYW0gIF9fciAgQSB3ZWFrX3B0ci4KKyAgICAgICAqICBAcG9zdCAgIHVzZV9jb3VudCgpID09IF9fci51c2VfY291bnQoKQorICAgICAgICogIEB0aHJvdyAgYmFkX3dlYWtfcHRyIHdoZW4gX19yLmV4cGlyZWQoKSwKKyAgICAgICAqICAgICAgICAgIGluIHdoaWNoIGNhc2UgdGhlIGNvbnN0cnVjdG9yIGhhcyBubyBlZmZlY3QuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisJZXhwbGljaXQgc2hhcmVkX3B0cihjb25zdCB3ZWFrX3B0cjxfVHAxPiYgX19yKQorCTogX19zaGFyZWRfcHRyPF9UcD4oX19yKSB7IH0KKworI2lmIF9HTElCQ1hYX0RFUFJFQ0FURUQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisJc2hhcmVkX3B0cihzdGQ6OmF1dG9fcHRyPF9UcDE+JiYgX19yKQorCTogX19zaGFyZWRfcHRyPF9UcD4oc3RkOjptb3ZlKF9fcikpIHsgfQorI2VuZGlmCisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9EZWw+CisJc2hhcmVkX3B0cihzdGQ6OnVuaXF1ZV9wdHI8X1RwMSwgX0RlbD4mJiBfX3IpCisJOiBfX3NoYXJlZF9wdHI8X1RwPihzdGQ6Om1vdmUoX19yKSkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisJc2hhcmVkX3B0ciYKKwlvcGVyYXRvcj0oY29uc3Qgc2hhcmVkX3B0cjxfVHAxPiYgX19yKSAvLyBuZXZlciB0aHJvd3MKKwl7CisJICB0aGlzLT5fX3NoYXJlZF9wdHI8X1RwPjo6b3BlcmF0b3I9KF9fcik7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisjaWYgX0dMSUJDWFhfREVQUkVDQVRFRAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKwlzaGFyZWRfcHRyJgorCW9wZXJhdG9yPShzdGQ6OmF1dG9fcHRyPF9UcDE+JiYgX19yKQorCXsKKwkgIHRoaXMtPl9fc2hhcmVkX3B0cjxfVHA+OjpvcGVyYXRvcj0oc3RkOjptb3ZlKF9fcikpOworCSAgcmV0dXJuICp0aGlzOworCX0KKyNlbmRpZgorCisgICAgICBzaGFyZWRfcHRyJgorICAgICAgb3BlcmF0b3I9KHNoYXJlZF9wdHImJiBfX3IpCisgICAgICB7CisJdGhpcy0+X19zaGFyZWRfcHRyPF9UcD46Om9wZXJhdG9yPShzdGQ6Om1vdmUoX19yKSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfVHAxPgorCXNoYXJlZF9wdHImCisJb3BlcmF0b3I9KHNoYXJlZF9wdHI8X1RwMT4mJiBfX3IpCisJeworCSAgdGhpcy0+X19zaGFyZWRfcHRyPF9UcD46Om9wZXJhdG9yPShzdGQ6Om1vdmUoX19yKSk7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfRGVsPgorCXNoYXJlZF9wdHImCisJb3BlcmF0b3I9KHN0ZDo6dW5pcXVlX3B0cjxfVHAxLCBfRGVsPiYmIF9fcikKKwl7CisJICB0aGlzLT5fX3NoYXJlZF9wdHI8X1RwPjo6b3BlcmF0b3I9KHN0ZDo6bW92ZShfX3IpKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICBwcml2YXRlOgorICAgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBub24tc3RhbmRhcmQsIGl0IGlzIHVzZWQgYnkgYWxsb2NhdGVfc2hhcmVkLgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZS4uLiBfQXJncz4KKwlzaGFyZWRfcHRyKF9TcF9tYWtlX3NoYXJlZF90YWcgX190YWcsIF9BbGxvYyBfX2EsIF9BcmdzJiYuLi4gX19hcmdzKQorCTogX19zaGFyZWRfcHRyPF9UcD4oX190YWcsIF9fYSwgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKQorCXsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lLi4uIF9BcmdzPgorCWZyaWVuZCBzaGFyZWRfcHRyPF9UcDE+CisJYWxsb2NhdGVfc2hhcmVkKF9BbGxvYyBfX2EsIF9BcmdzJiYuLi4gX19hcmdzKTsKKyAgICB9OworCisgIC8vIDIwLjguMTMuMi43IHNoYXJlZF9wdHIgY29tcGFyaXNvbnMKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1RwMj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3Qgc2hhcmVkX3B0cjxfVHAxPiYgX19hLCBjb25zdCBzaGFyZWRfcHRyPF9UcDI+JiBfX2IpCisgICAgeyByZXR1cm4gX19hLmdldCgpID09IF9fYi5nZXQoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9UcDI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHNoYXJlZF9wdHI8X1RwMT4mIF9fYSwgY29uc3Qgc2hhcmVkX3B0cjxfVHAyPiYgX19iKQorICAgIHsgcmV0dXJuIF9fYS5nZXQoKSAhPSBfX2IuZ2V0KCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IHNoYXJlZF9wdHI8X1RwMT4mIF9fYSwgY29uc3Qgc2hhcmVkX3B0cjxfVHAyPiYgX19iKQorICAgIHsgcmV0dXJuIF9fYS5nZXQoKSA8IF9fYi5nZXQoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgbGVzczxzaGFyZWRfcHRyPF9UcD4+IDogcHVibGljIF9TcF9sZXNzPHNoYXJlZF9wdHI8X1RwPj4KKyAgICB7IH07CisKKyAgLy8gMjAuOC4xMy4yLjkgc2hhcmVkX3B0ciBzcGVjaWFsaXplZCBhbGdvcml0aG1zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHNoYXJlZF9wdHI8X1RwPiYgX19hLCBzaGFyZWRfcHRyPF9UcD4mIF9fYikKKyAgICB7IF9fYS5zd2FwKF9fYik7IH0KKworICAvLyAyMC44LjEzLjIuMTAgc2hhcmVkX3B0ciBjYXN0cy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxPgorICAgIGlubGluZSBzaGFyZWRfcHRyPF9UcD4KKyAgICBzdGF0aWNfcG9pbnRlcl9jYXN0KGNvbnN0IHNoYXJlZF9wdHI8X1RwMT4mIF9fcikKKyAgICB7IHJldHVybiBzaGFyZWRfcHRyPF9UcD4oX19yLCBzdGF0aWNfY2FzdDxfVHAqPihfX3IuZ2V0KCkpKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMT4KKyAgICBpbmxpbmUgc2hhcmVkX3B0cjxfVHA+CisgICAgY29uc3RfcG9pbnRlcl9jYXN0KGNvbnN0IHNoYXJlZF9wdHI8X1RwMT4mIF9fcikKKyAgICB7IHJldHVybiBzaGFyZWRfcHRyPF9UcD4oX19yLCBjb25zdF9jYXN0PF9UcCo+KF9fci5nZXQoKSkpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxPgorICAgIGlubGluZSBzaGFyZWRfcHRyPF9UcD4KKyAgICBkeW5hbWljX3BvaW50ZXJfY2FzdChjb25zdCBzaGFyZWRfcHRyPF9UcDE+JiBfX3IpCisgICAgeworICAgICAgaWYgKF9UcCogX19wID0gZHluYW1pY19jYXN0PF9UcCo+KF9fci5nZXQoKSkpCisJcmV0dXJuIHNoYXJlZF9wdHI8X1RwPihfX3IsIF9fcCk7CisgICAgICByZXR1cm4gc2hhcmVkX3B0cjxfVHA+KCk7CisgICAgfQorCisKKyAgLyoqCisgICAqICBAYnJpZWYgIEEgc21hcnQgcG9pbnRlciB3aXRoIHdlYWsgc2VtYW50aWNzLgorICAgKgorICAgKiAgV2l0aCBmb3J3YXJkaW5nIGNvbnN0cnVjdG9ycyBhbmQgYXNzaWdubWVudCBvcGVyYXRvcnMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3Mgd2Vha19wdHIgOiBwdWJsaWMgX193ZWFrX3B0cjxfVHA+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHdlYWtfcHRyKCkgOiBfX3dlYWtfcHRyPF9UcD4oKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKwl3ZWFrX3B0cihjb25zdCB3ZWFrX3B0cjxfVHAxPiYgX19yKQorCTogX193ZWFrX3B0cjxfVHA+KF9fcikgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisJd2Vha19wdHIoY29uc3Qgc2hhcmVkX3B0cjxfVHAxPiYgX19yKQorCTogX193ZWFrX3B0cjxfVHA+KF9fcikgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisJd2Vha19wdHImCisJb3BlcmF0b3I9KGNvbnN0IHdlYWtfcHRyPF9UcDE+JiBfX3IpIC8vIG5ldmVyIHRocm93cworCXsKKwkgIHRoaXMtPl9fd2Vha19wdHI8X1RwPjo6b3BlcmF0b3I9KF9fcik7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCXdlYWtfcHRyJgorCW9wZXJhdG9yPShjb25zdCBzaGFyZWRfcHRyPF9UcDE+JiBfX3IpIC8vIG5ldmVyIHRocm93cworCXsKKwkgIHRoaXMtPl9fd2Vha19wdHI8X1RwPjo6b3BlcmF0b3I9KF9fcik7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICBzaGFyZWRfcHRyPF9UcD4KKyAgICAgIGxvY2soKSBjb25zdCAvLyBuZXZlciB0aHJvd3MKKyAgICAgIHsKKyNpZmRlZiBfX0dUSFJFQURTCisJaWYgKHRoaXMtPmV4cGlyZWQoKSkKKwkgIHJldHVybiBzaGFyZWRfcHRyPF9UcD4oKTsKKworCV9fdHJ5CisJICB7CisJICAgIHJldHVybiBzaGFyZWRfcHRyPF9UcD4oKnRoaXMpOworCSAgfQorCV9fY2F0Y2goY29uc3QgYmFkX3dlYWtfcHRyJikKKwkgIHsKKwkgICAgcmV0dXJuIHNoYXJlZF9wdHI8X1RwPigpOworCSAgfQorI2Vsc2UKKwlyZXR1cm4gdGhpcy0+ZXhwaXJlZCgpID8gc2hhcmVkX3B0cjxfVHA+KCkgOiBzaGFyZWRfcHRyPF9UcD4oKnRoaXMpOworI2VuZGlmCisgICAgICB9CisgICAgfTsKKworICAvLyAyMC44LjEzLjMuNyB3ZWFrX3B0ciBzcGVjaWFsaXplZCBhbGdvcml0aG1zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHdlYWtfcHRyPF9UcD4mIF9fYSwgd2Vha19wdHI8X1RwPiYgX19iKQorICAgIHsgX19hLnN3YXAoX19iKTsgfQorCisKKyAgLy8vIFByaW1hcnkgdGVtcGxhdGUgb3duZXJfbGVzcworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IG93bmVyX2xlc3M7CisKKyAgLy8vIFBhcnRpYWwgc3BlY2lhbGl6YXRpb24gb2Ygb3duZXJfbGVzcyBmb3Igc2hhcmVkX3B0ci4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBvd25lcl9sZXNzPHNoYXJlZF9wdHI8X1RwPj4KKyAgICA6IHB1YmxpYyBfU3Bfb3duZXJfbGVzczxzaGFyZWRfcHRyPF9UcD4sIHdlYWtfcHRyPF9UcD4+CisgICAgeyB9OworCisgIC8vLyBQYXJ0aWFsIHNwZWNpYWxpemF0aW9uIG9mIG93bmVyX2xlc3MgZm9yIHdlYWtfcHRyLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IG93bmVyX2xlc3M8d2Vha19wdHI8X1RwPj4KKyAgICA6IHB1YmxpYyBfU3Bfb3duZXJfbGVzczx3ZWFrX3B0cjxfVHA+LCBzaGFyZWRfcHRyPF9UcD4+CisgICAgeyB9OworCisgIC8qKgorICAgKiAgQGJyaWVmIEJhc2UgY2xhc3MgYWxsb3dpbmcgdXNlIG9mIG1lbWJlciBmdW5jdGlvbiBzaGFyZWRfZnJvbV90aGlzLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIGVuYWJsZV9zaGFyZWRfZnJvbV90aGlzCisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIGVuYWJsZV9zaGFyZWRfZnJvbV90aGlzKCkgeyB9CisKKyAgICAgIGVuYWJsZV9zaGFyZWRfZnJvbV90aGlzKGNvbnN0IGVuYWJsZV9zaGFyZWRfZnJvbV90aGlzJikgeyB9CisKKyAgICAgIGVuYWJsZV9zaGFyZWRfZnJvbV90aGlzJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IGVuYWJsZV9zaGFyZWRfZnJvbV90aGlzJikKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIH5lbmFibGVfc2hhcmVkX2Zyb21fdGhpcygpIHsgfQorCisgICAgcHVibGljOgorICAgICAgc2hhcmVkX3B0cjxfVHA+CisgICAgICBzaGFyZWRfZnJvbV90aGlzKCkKKyAgICAgIHsgcmV0dXJuIHNoYXJlZF9wdHI8X1RwPih0aGlzLT5fTV93ZWFrX3RoaXMpOyB9CisKKyAgICAgIHNoYXJlZF9wdHI8Y29uc3QgX1RwPgorICAgICAgc2hhcmVkX2Zyb21fdGhpcygpIGNvbnN0CisgICAgICB7IHJldHVybiBzaGFyZWRfcHRyPGNvbnN0IF9UcD4odGhpcy0+X01fd2Vha190aGlzKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisJdm9pZAorCV9NX3dlYWtfYXNzaWduKF9UcDEqIF9fcCwgY29uc3QgX19zaGFyZWRfY291bnQ8PiYgX19uKSBjb25zdAorCXsgX01fd2Vha190aGlzLl9NX2Fzc2lnbihfX3AsIF9fbik7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKwlmcmllbmQgdm9pZAorCV9fZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXNfaGVscGVyKGNvbnN0IF9fc2hhcmVkX2NvdW50PD4mIF9fcG4sCisJCQkJCSBjb25zdCBlbmFibGVfc2hhcmVkX2Zyb21fdGhpcyogX19wZSwKKwkJCQkJIGNvbnN0IF9UcDEqIF9fcHgpCisJeworCSAgaWYgKF9fcGUgIT0gMCkKKwkgICAgX19wZS0+X01fd2Vha19hc3NpZ24oY29uc3RfY2FzdDxfVHAxKj4oX19weCksIF9fcG4pOworCX0KKworICAgICAgbXV0YWJsZSB3ZWFrX3B0cjxfVHA+ICBfTV93ZWFrX3RoaXM7CisgICAgfTsKKworICAvKioKKyAgICogIEBicmllZiAgQ3JlYXRlIGFuIG9iamVjdCB0aGF0IGlzIG93bmVkIGJ5IGEgc2hhcmVkX3B0ci4KKyAgICogIEBwYXJhbSAgX19hICAgICBBbiBhbGxvY2F0b3IuCisgICAqICBAcGFyYW0gIF9fYXJncyAgQXJndW1lbnRzIGZvciB0aGUgQGEgX1RwIG9iamVjdCdzIGNvbnN0cnVjdG9yLgorICAgKiAgQHJldHVybiBBIHNoYXJlZF9wdHIgdGhhdCBvd25zIHRoZSBuZXdseSBjcmVhdGVkIG9iamVjdC4KKyAgICogIEB0aHJvdyAgQW4gZXhjZXB0aW9uIHRocm93biBmcm9tIEBhIF9BbGxvYzo6YWxsb2NhdGUgb3IgZnJvbSB0aGUKKyAgICogICAgICAgICAgY29uc3RydWN0b3Igb2YgQGEgX1RwLgorICAgKgorICAgKiAgQSBjb3B5IG9mIEBhIF9fYSB3aWxsIGJlIHVzZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgc2hhcmVkX3B0cgorICAgKiAgYW5kIHRoZSBuZXcgb2JqZWN0LgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIGlubGluZSBzaGFyZWRfcHRyPF9UcD4KKyAgICBhbGxvY2F0ZV9zaGFyZWQoX0FsbG9jIF9fYSwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisgICAgeworICAgICAgcmV0dXJuIHNoYXJlZF9wdHI8X1RwPihfU3BfbWFrZV9zaGFyZWRfdGFnKCksIHN0ZDo6Zm9yd2FyZDxfQWxsb2M+KF9fYSksCisJCQkgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBDcmVhdGUgYW4gb2JqZWN0IHRoYXQgaXMgb3duZWQgYnkgYSBzaGFyZWRfcHRyLgorICAgKiAgQHBhcmFtICBfX2FyZ3MgIEFyZ3VtZW50cyBmb3IgdGhlIEBhIF9UcCBvYmplY3QncyBjb25zdHJ1Y3Rvci4KKyAgICogIEByZXR1cm4gQSBzaGFyZWRfcHRyIHRoYXQgb3ducyB0aGUgbmV3bHkgY3JlYXRlZCBvYmplY3QuCisgICAqICBAdGhyb3cgIHN0ZDo6YmFkX2FsbG9jLCBvciBhbiBleGNlcHRpb24gdGhyb3duIGZyb20gdGhlCisgICAqICAgICAgICAgIGNvbnN0cnVjdG9yIG9mIEBhIF9UcC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgaW5saW5lIHNoYXJlZF9wdHI8X1RwPgorICAgIG1ha2Vfc2hhcmVkKF9BcmdzJiYuLi4gX19hcmdzKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8X1RwPjo6dHlwZSBfVHBfbmM7CisgICAgICByZXR1cm4gYWxsb2NhdGVfc2hhcmVkPF9UcD4oc3RkOjphbGxvY2F0b3I8X1RwX25jPigpLAorCQkJCSAgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKyAgICB9CisKKyAgLy8gQH0gZ3JvdXAgcG9pbnRlcl9hYnN0cmFjdGlvbnMKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYgLy8gX1NIQVJFRF9QVFJfSApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3NoYXJlZF9wdHJfYmFzZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3NoYXJlZF9wdHJfYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OTlmMzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc2hhcmVkX3B0cl9iYXNlLmgKQEAgLTAsMCArMSwxMTM4IEBACisvLyBzaGFyZWRfcHRyIGFuZCB3ZWFrX3B0ciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBHQ0MgTm90ZTogQmFzZWQgb24gZmlsZXMgZnJvbSB2ZXJzaW9uIDEuMzIuMCBvZiB0aGUgQm9vc3QgbGlicmFyeS4KKworLy8gIHNoYXJlZF9jb3VudC5ocHAKKy8vICBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDIsIDIwMDMgUGV0ZXIgRGltb3YgYW5kIE11bHRpIE1lZGlhIEx0ZC4KKworLy8gIHNoYXJlZF9wdHIuaHBwCisvLyAgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5IEdyZWcgQ29sdmluIGFuZCBCZW1hbiBEYXdlcy4KKy8vICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMgUGV0ZXIgRGltb3YKKworLy8gIHdlYWtfcHRyLmhwcAorLy8gIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMyBQZXRlciBEaW1vdgorCisvLyAgZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMuaHBwCisvLyAgQ29weXJpZ2h0IChDKSAyMDAyIFBldGVyIERpbW92CisKKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQorLy8gYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKKy8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLyoqIEBmaWxlIGJpdHMvc2hhcmVkX3B0cl9iYXNlLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfU0hBUkVEX1BUUl9CQVNFX0gKKyNkZWZpbmUgX1NIQVJFRF9QVFJfQkFTRV9IIDEKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwID0gX19kZWZhdWx0X2xvY2tfcG9saWN5PgorICAgIGNsYXNzIF9fc2hhcmVkX3B0cjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIF9Mb2NrX3BvbGljeSBfTHAgPSBfX2RlZmF1bHRfbG9ja19wb2xpY3k+CisgICAgY2xhc3MgX193ZWFrX3B0cjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIF9Mb2NrX3BvbGljeSBfTHAgPSBfX2RlZmF1bHRfbG9ja19wb2xpY3k+CisgICAgY2xhc3MgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpczsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3Mgc2hhcmVkX3B0cjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3Mgd2Vha19wdHI7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBvd25lcl9sZXNzOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyBlbmFibGVfc2hhcmVkX2Zyb21fdGhpczsKKworICB0ZW1wbGF0ZTxfTG9ja19wb2xpY3kgX0xwID0gX19kZWZhdWx0X2xvY2tfcG9saWN5PgorICAgIGNsYXNzIF9fd2Vha19jb3VudDsKKworICB0ZW1wbGF0ZTxfTG9ja19wb2xpY3kgX0xwID0gX19kZWZhdWx0X2xvY2tfcG9saWN5PgorICAgIGNsYXNzIF9fc2hhcmVkX2NvdW50OworCisKKyAgLy8gQ291bnRlZCBwdHIgd2l0aCBubyBkZWxldGVyIG9yIGFsbG9jYXRvciBzdXBwb3J0CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9QdHIsIF9Mb2NrX3BvbGljeSBfTHA+CisgICAgY2xhc3MgX1NwX2NvdW50ZWRfcHRyIDogcHVibGljIF9TcF9jb3VudGVkX2Jhc2U8X0xwPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICBfU3BfY291bnRlZF9wdHIoX1B0ciBfX3ApCisgICAgICA6IF9NX3B0cihfX3ApIHsgfQorCisgICAgICB2aXJ0dWFsIHZvaWQKKyAgICAgIF9NX2Rpc3Bvc2UoKSAvLyBub3Rocm93CisgICAgICB7IGRlbGV0ZSBfTV9wdHI7IH0KKworICAgICAgdmlydHVhbCB2b2lkCisgICAgICBfTV9kZXN0cm95KCkgLy8gbm90aHJvdworICAgICAgeyBkZWxldGUgdGhpczsgfQorCisgICAgICB2aXJ0dWFsIHZvaWQqCisgICAgICBfTV9nZXRfZGVsZXRlcihjb25zdCBzdGQ6OnR5cGVfaW5mbyYgX190aSkKKyAgICAgIHsgcmV0dXJuIDA7IH0KKworICAgICAgX1NwX2NvdW50ZWRfcHRyKGNvbnN0IF9TcF9jb3VudGVkX3B0ciYpID0gZGVsZXRlOworICAgICAgX1NwX2NvdW50ZWRfcHRyJiBvcGVyYXRvcj0oY29uc3QgX1NwX2NvdW50ZWRfcHRyJikgPSBkZWxldGU7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfUHRyICAgICAgICAgICAgIF9NX3B0cjsgIC8vIGNvcHkgY29uc3RydWN0b3IgbXVzdCBub3QgdGhyb3cKKyAgICB9OworCisgIC8vIFN1cHBvcnQgZm9yIGN1c3RvbSBkZWxldGVyIGFuZC9vciBhbGxvY2F0b3IKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1B0ciwgdHlwZW5hbWUgX0RlbGV0ZXIsIHR5cGVuYW1lIF9BbGxvYywgX0xvY2tfcG9saWN5IF9McD4KKyAgICBjbGFzcyBfU3BfY291bnRlZF9kZWxldGVyIDogcHVibGljIF9TcF9jb3VudGVkX3B0cjxfUHRyLCBfTHA+CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlCisJICByZWJpbmQ8X1NwX2NvdW50ZWRfZGVsZXRlcj46Om90aGVyIF9NeV9hbGxvY190eXBlOworCisgICAgICAvLyBIZWxwZXIgY2xhc3MgdGhhdCBzdG9yZXMgdGhlIERlbGV0ZXIgYW5kIGFsc28gYWN0cyBhcyBhbiBhbGxvY2F0b3IuCisgICAgICAvLyBVc2VkIHRvIGRpc3Bvc2Ugb2YgdGhlIG93bmVkIHBvaW50ZXIgYW5kIHRoZSBpbnRlcm5hbCByZWZjb3VudAorICAgICAgLy8gUmVxdWlyZXMgdGhhdCBjb3BpZXMgb2YgX0FsbG9jIGNhbiBmcmVlIGVhY2ggb3RoZXIncyBtZW1vcnkuCisgICAgICBzdHJ1Y3QgX015X0RlbGV0ZXIKKyAgICAgIDogcHVibGljIF9NeV9hbGxvY190eXBlICAgIC8vIGNvcHkgY29uc3RydWN0b3IgbXVzdCBub3QgdGhyb3cKKyAgICAgIHsKKwlfRGVsZXRlciBfTV9kZWw7ICAgICAgICAgLy8gY29weSBjb25zdHJ1Y3RvciBtdXN0IG5vdCB0aHJvdworCV9NeV9EZWxldGVyKF9EZWxldGVyIF9fZCwgY29uc3QgX0FsbG9jJiBfX2EpCisJICA6IF9NeV9hbGxvY190eXBlKF9fYSksIF9NX2RlbChfX2QpIHsgfQorICAgICAgfTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgIHR5cGVkZWYgX1NwX2NvdW50ZWRfcHRyPF9QdHIsIF9McD4gX0Jhc2VfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vIF9fZChfX3ApIG11c3Qgbm90IHRocm93LgorICAgICAgX1NwX2NvdW50ZWRfZGVsZXRlcihfUHRyIF9fcCwgX0RlbGV0ZXIgX19kKQorICAgICAgOiBfQmFzZV90eXBlKF9fcCksIF9NX2RlbChfX2QsIF9BbGxvYygpKSB7IH0KKworICAgICAgLy8gX19kKF9fcCkgbXVzdCBub3QgdGhyb3cuCisgICAgICBfU3BfY291bnRlZF9kZWxldGVyKF9QdHIgX19wLCBfRGVsZXRlciBfX2QsIGNvbnN0IF9BbGxvYyYgX19hKQorICAgICAgOiBfQmFzZV90eXBlKF9fcCksIF9NX2RlbChfX2QsIF9fYSkgeyB9CisKKyAgICAgIHZpcnR1YWwgdm9pZAorICAgICAgX01fZGlzcG9zZSgpIC8vIG5vdGhyb3cKKyAgICAgIHsgX01fZGVsLl9NX2RlbChfQmFzZV90eXBlOjpfTV9wdHIpOyB9CisKKyAgICAgIHZpcnR1YWwgdm9pZAorICAgICAgX01fZGVzdHJveSgpIC8vIG5vdGhyb3cKKyAgICAgIHsKKwlfTXlfYWxsb2NfdHlwZSBfX2EoX01fZGVsKTsKKwl0aGlzLT5+X1NwX2NvdW50ZWRfZGVsZXRlcigpOworCV9fYS5kZWFsbG9jYXRlKHRoaXMsIDEpOworICAgICAgfQorCisgICAgICB2aXJ0dWFsIHZvaWQqCisgICAgICBfTV9nZXRfZGVsZXRlcihjb25zdCBzdGQ6OnR5cGVfaW5mbyYgX190aSkKKyAgICAgIHsKKyNpZmRlZiBfX0dYWF9SVFRJCisgICAgICAgIHJldHVybiBfX3RpID09IHR5cGVpZChfRGVsZXRlcikgPyAmX01fZGVsLl9NX2RlbCA6IDA7CisjZWxzZQorICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgorICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgX015X0RlbGV0ZXIgICAgICBfTV9kZWw7ICAvLyBjb3B5IGNvbnN0cnVjdG9yIG11c3Qgbm90IHRocm93CisgICAgfTsKKworICAvLyBoZWxwZXJzIGZvciBtYWtlX3NoYXJlZCAvIGFsbG9jYXRlX3NoYXJlZAorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX1NwX2Rlc3Ryb3lfaW5wbGFjZQorICAgIHsKKyAgICAgIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyBpZiAoX19wKSBfX3AtPn5fVHAoKTsgfQorICAgIH07CisKKyAgc3RydWN0IF9TcF9tYWtlX3NoYXJlZF90YWcgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGNsYXNzIF9TcF9jb3VudGVkX3B0cl9pbnBsYWNlCisgICAgOiBwdWJsaWMgX1NwX2NvdW50ZWRfZGVsZXRlcjxfVHAqLCBfU3BfZGVzdHJveV9pbnBsYWNlPF9UcD4sIF9BbGxvYywgX0xwPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1NwX2NvdW50ZWRfZGVsZXRlcjxfVHAqLCBfU3BfZGVzdHJveV9pbnBsYWNlPF9UcD4sIF9BbGxvYywgX0xwPgorCV9CYXNlX3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICBfU3BfY291bnRlZF9wdHJfaW5wbGFjZShfQWxsb2MgX19hKQorICAgICAgOiBfQmFzZV90eXBlKHN0YXRpY19jYXN0PF9UcCo+KDApLCBfU3BfZGVzdHJveV9pbnBsYWNlPF9UcD4oKSwgX19hKQorICAgICAgLCBfTV9zdG9yYWdlKCkKKyAgICAgIHsKKwl2b2lkKiBfX3AgPSAmX01fc3RvcmFnZTsKKwk6Om5ldyAoX19wKSBfVHAoKTsgIC8vIG1pZ2h0IHRocm93CisJX0Jhc2VfdHlwZTo6X0Jhc2VfdHlwZTo6X01fcHRyID0gc3RhdGljX2Nhc3Q8X1RwKj4oX19wKTsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJX1NwX2NvdW50ZWRfcHRyX2lucGxhY2UoX0FsbG9jIF9fYSwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisJOiBfQmFzZV90eXBlKHN0YXRpY19jYXN0PF9UcCo+KDApLCBfU3BfZGVzdHJveV9pbnBsYWNlPF9UcD4oKSwgX19hKQorCSwgX01fc3RvcmFnZSgpCisJeworCSAgdm9pZCogX19wID0gJl9NX3N0b3JhZ2U7CisJICA6Om5ldyAoX19wKSBfVHAoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsgIC8vIG1pZ2h0IHRocm93CisJICBfQmFzZV90eXBlOjpfQmFzZV90eXBlOjpfTV9wdHIgPSBzdGF0aWNfY2FzdDxfVHAqPihfX3ApOworCX0KKworICAgICAgLy8gT3ZlcnJpZGUgYmVjYXVzZSB0aGUgYWxsb2NhdG9yIG5lZWRzIHRvIGtub3cgdGhlIGR5bmFtaWMgdHlwZQorICAgICAgdmlydHVhbCB2b2lkCisgICAgICBfTV9kZXN0cm95KCkgLy8gbm90aHJvdworICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZQorCSAgICByZWJpbmQ8X1NwX2NvdW50ZWRfcHRyX2lucGxhY2U+OjpvdGhlciBfTXlfYWxsb2NfdHlwZTsKKwlfTXlfYWxsb2NfdHlwZSBfX2EoX0Jhc2VfdHlwZTo6X01fZGVsKTsKKwl0aGlzLT5+X1NwX2NvdW50ZWRfcHRyX2lucGxhY2UoKTsKKwlfX2EuZGVhbGxvY2F0ZSh0aGlzLCAxKTsKKyAgICAgIH0KKworICAgICAgLy8gU25lYWt5IHRyaWNrIHNvIF9fc2hhcmVkX3B0ciBjYW4gZ2V0IHRoZSBtYW5hZ2VkIHBvaW50ZXIKKyAgICAgIHZpcnR1YWwgdm9pZCoKKyAgICAgIF9NX2dldF9kZWxldGVyKGNvbnN0IHN0ZDo6dHlwZV9pbmZvJiBfX3RpKQorICAgICAgeworI2lmZGVmIF9fR1hYX1JUVEkKKwlyZXR1cm4gX190aSA9PSB0eXBlaWQoX1NwX21ha2Vfc2hhcmVkX3RhZykKKwkgICAgICAgPyBzdGF0aWNfY2FzdDx2b2lkKj4oJl9NX3N0b3JhZ2UpCisJICAgICAgIDogX0Jhc2VfdHlwZTo6X01fZ2V0X2RlbGV0ZXIoX190aSk7CisjZWxzZQorICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgorICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVuYW1lIGFsaWduZWRfc3RvcmFnZTxzaXplb2YoX1RwKSwgYWxpZ25tZW50X29mPF9UcD46OnZhbHVlPjo6dHlwZQorCV9NX3N0b3JhZ2U7CisgICAgfTsKKworICB0ZW1wbGF0ZTxfTG9ja19wb2xpY3kgX0xwPgorICAgIGNsYXNzIF9fc2hhcmVkX2NvdW50CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIF9fc2hhcmVkX2NvdW50KCkgOiBfTV9waSgwKSAvLyBub3Rocm93CisgICAgICB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1B0cj4KKwlfX3NoYXJlZF9jb3VudChfUHRyIF9fcCkgOiBfTV9waSgwKQorCXsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICBfTV9waSA9IG5ldyBfU3BfY291bnRlZF9wdHI8X1B0ciwgX0xwPihfX3ApOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeworCSAgICAgIGRlbGV0ZSBfX3A7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QdHIsIHR5cGVuYW1lIF9EZWxldGVyPgorCV9fc2hhcmVkX2NvdW50KF9QdHIgX19wLCBfRGVsZXRlciBfX2QpIDogX01fcGkoMCkKKwl7CisJICAvLyBUaGUgYWxsb2NhdG9yJ3MgdmFsdWVfdHlwZSBkb2Vzbid0IG1hdHRlciwgd2lsbCByZWJpbmQgaXQgYW55d2F5LgorCSAgdHlwZWRlZiBzdGQ6OmFsbG9jYXRvcjxpbnQ+IF9BbGxvYzsKKwkgIHR5cGVkZWYgX1NwX2NvdW50ZWRfZGVsZXRlcjxfUHRyLCBfRGVsZXRlciwgX0FsbG9jLCBfTHA+IF9TcF9jZF90eXBlOworCSAgdHlwZWRlZiBzdGQ6OmFsbG9jYXRvcjxfU3BfY2RfdHlwZT4gX0FsbG9jMjsKKwkgIF9BbGxvYzIgX19hMjsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICBfTV9waSA9IF9fYTIuYWxsb2NhdGUoMSk7CisJICAgICAgOjpuZXcoc3RhdGljX2Nhc3Q8dm9pZCo+KF9NX3BpKSkgX1NwX2NkX3R5cGUoX19wLCBfX2QpOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeworCSAgICAgIF9fZChfX3ApOyAvLyBDYWxsIF9EZWxldGVyIG9uIF9fcC4KKwkgICAgICBpZiAoX01fcGkpCisJCV9fYTIuZGVhbGxvY2F0ZShzdGF0aWNfY2FzdDxfU3BfY2RfdHlwZSo+KF9NX3BpKSwgMSk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QdHIsIHR5cGVuYW1lIF9EZWxldGVyLCB0eXBlbmFtZSBfQWxsb2M+CisJX19zaGFyZWRfY291bnQoX1B0ciBfX3AsIF9EZWxldGVyIF9fZCwgX0FsbG9jIF9fYSkgOiBfTV9waSgwKQorCXsKKwkgIHR5cGVkZWYgX1NwX2NvdW50ZWRfZGVsZXRlcjxfUHRyLCBfRGVsZXRlciwgX0FsbG9jLCBfTHA+IF9TcF9jZF90eXBlOworCSAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxfU3BfY2RfdHlwZT46Om90aGVyIF9BbGxvYzI7CisJICBfQWxsb2MyIF9fYTIoX19hKTsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICBfTV9waSA9IF9fYTIuYWxsb2NhdGUoMSk7CisJICAgICAgOjpuZXcoc3RhdGljX2Nhc3Q8dm9pZCo+KF9NX3BpKSkgX1NwX2NkX3R5cGUoX19wLCBfX2QsIF9fYSk7CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7CisJICAgICAgX19kKF9fcCk7IC8vIENhbGwgX0RlbGV0ZXIgb24gX19wLgorCSAgICAgIGlmIChfTV9waSkKKwkJX19hMi5kZWFsbG9jYXRlKHN0YXRpY19jYXN0PF9TcF9jZF90eXBlKj4oX01fcGkpLCAxKTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lLi4uIF9BcmdzPgorCV9fc2hhcmVkX2NvdW50KF9TcF9tYWtlX3NoYXJlZF90YWcsIF9UcCosIF9BbGxvYyBfX2EsIF9BcmdzJiYuLi4gX19hcmdzKQorCTogX01fcGkoMCkKKwl7CisJICB0eXBlZGVmIF9TcF9jb3VudGVkX3B0cl9pbnBsYWNlPF9UcCwgX0FsbG9jLCBfTHA+IF9TcF9jcF90eXBlOworCSAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxfU3BfY3BfdHlwZT46Om90aGVyIF9BbGxvYzI7CisJICBfQWxsb2MyIF9fYTIoX19hKTsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICBfTV9waSA9IF9fYTIuYWxsb2NhdGUoMSk7CisJICAgICAgOjpuZXcoc3RhdGljX2Nhc3Q8dm9pZCo+KF9NX3BpKSkgX1NwX2NwX3R5cGUoX19hLAorCQkgICAgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsKKwkgICAgICBpZiAoX01fcGkpCisJCV9fYTIuZGVhbGxvY2F0ZShzdGF0aWNfY2FzdDxfU3BfY3BfdHlwZSo+KF9NX3BpKSwgMSk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwl9CisKKyNpZiBfR0xJQkNYWF9ERVBSRUNBVEVECisgICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGF1dG9fcHRyPF9UcD4gdG8gcHJvdmlkZSB0aGUgc3Ryb25nIGd1YXJhbnRlZS4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKwlfX3NoYXJlZF9jb3VudChzdGQ6OmF1dG9fcHRyPF9UcD4mJiBfX3IpCisJOiBfTV9waShuZXcgX1NwX2NvdW50ZWRfcHRyPF9UcCosIF9McD4oX19yLmdldCgpKSkKKwl7IF9fci5yZWxlYXNlKCk7IH0KKyNlbmRpZgorCisgICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIHVuaXF1ZV9wdHI8X1RwLF9EZWw+IHRvIHByb3ZpZGUgdGhlIHN0cm9uZyBndWFyYW50ZWUuCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9EZWw+CisJX19zaGFyZWRfY291bnQoc3RkOjp1bmlxdWVfcHRyPF9UcCwgX0RlbD4mJiBfX3IpCisJOiBfTV9waShfU19jcmVhdGVfZnJvbV91cChzdGQ6Om1vdmUoX19yKSkpCisJeyBfX3IucmVsZWFzZSgpOyB9CisKKyAgICAgIC8vIFRocm93IGJhZF93ZWFrX3B0ciB3aGVuIF9fci5fTV9nZXRfdXNlX2NvdW50KCkgPT0gMC4KKyAgICAgIGV4cGxpY2l0IF9fc2hhcmVkX2NvdW50KGNvbnN0IF9fd2Vha19jb3VudDxfTHA+JiBfX3IpOworCisgICAgICB+X19zaGFyZWRfY291bnQoKSAvLyBub3Rocm93CisgICAgICB7CisJaWYgKF9NX3BpICE9IDApCisJICBfTV9waS0+X01fcmVsZWFzZSgpOworICAgICAgfQorCisgICAgICBfX3NoYXJlZF9jb3VudChjb25zdCBfX3NoYXJlZF9jb3VudCYgX19yKQorICAgICAgOiBfTV9waShfX3IuX01fcGkpIC8vIG5vdGhyb3cKKyAgICAgIHsKKwlpZiAoX01fcGkgIT0gMCkKKwkgIF9NX3BpLT5fTV9hZGRfcmVmX2NvcHkoKTsKKyAgICAgIH0KKworICAgICAgX19zaGFyZWRfY291bnQmCisgICAgICBvcGVyYXRvcj0oY29uc3QgX19zaGFyZWRfY291bnQmIF9fcikgLy8gbm90aHJvdworICAgICAgeworCV9TcF9jb3VudGVkX2Jhc2U8X0xwPiogX190bXAgPSBfX3IuX01fcGk7CisJaWYgKF9fdG1wICE9IF9NX3BpKQorCSAgeworCSAgICBpZiAoX190bXAgIT0gMCkKKwkgICAgICBfX3RtcC0+X01fYWRkX3JlZl9jb3B5KCk7CisJICAgIGlmIChfTV9waSAhPSAwKQorCSAgICAgIF9NX3BpLT5fTV9yZWxlYXNlKCk7CisJICAgIF9NX3BpID0gX190bXA7CisJICB9CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9zd2FwKF9fc2hhcmVkX2NvdW50JiBfX3IpIC8vIG5vdGhyb3cKKyAgICAgIHsKKwlfU3BfY291bnRlZF9iYXNlPF9McD4qIF9fdG1wID0gX19yLl9NX3BpOworCV9fci5fTV9waSA9IF9NX3BpOworCV9NX3BpID0gX190bXA7CisgICAgICB9CisKKyAgICAgIGxvbmcKKyAgICAgIF9NX2dldF91c2VfY291bnQoKSBjb25zdCAvLyBub3Rocm93CisgICAgICB7IHJldHVybiBfTV9waSAhPSAwID8gX01fcGktPl9NX2dldF91c2VfY291bnQoKSA6IDA7IH0KKworICAgICAgYm9vbAorICAgICAgX01fdW5pcXVlKCkgY29uc3QgLy8gbm90aHJvdworICAgICAgeyByZXR1cm4gdGhpcy0+X01fZ2V0X3VzZV9jb3VudCgpID09IDE7IH0KKworICAgICAgdm9pZCoKKyAgICAgIF9NX2dldF9kZWxldGVyKGNvbnN0IHN0ZDo6dHlwZV9pbmZvJiBfX3RpKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGkgPyBfTV9waS0+X01fZ2V0X2RlbGV0ZXIoX190aSkgOiAwOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIF9NX2xlc3MoY29uc3QgX19zaGFyZWRfY291bnQmIF9fcmhzKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpsZXNzPF9TcF9jb3VudGVkX2Jhc2U8X0xwPio+KCkodGhpcy0+X01fcGksIF9fcmhzLl9NX3BpKTsgfQorCisgICAgICBib29sCisgICAgICBfTV9sZXNzKGNvbnN0IF9fd2Vha19jb3VudDxfTHA+JiBfX3JocykgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0ZDo6bGVzczxfU3BfY291bnRlZF9iYXNlPF9McD4qPigpKHRoaXMtPl9NX3BpLCBfX3Jocy5fTV9waSk7IH0KKworICAgICAgLy8gRnJpZW5kIGZ1bmN0aW9uIGluamVjdGVkIGludG8gZW5jbG9zaW5nIG5hbWVzcGFjZSBhbmQgZm91bmQgYnkgQURMCisgICAgICBmcmllbmQgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgX19zaGFyZWRfY291bnQmIF9fYSwgY29uc3QgX19zaGFyZWRfY291bnQmIF9fYikKKyAgICAgIHsgcmV0dXJuIF9fYS5fTV9waSA9PSBfX2IuX01fcGk7IH0KKworICAgIHByaXZhdGU6CisgICAgICBmcmllbmQgY2xhc3MgX193ZWFrX2NvdW50PF9McD47CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0RlbD4KKwlzdGF0aWMgX1NwX2NvdW50ZWRfYmFzZTxfTHA+KgorCV9TX2NyZWF0ZV9mcm9tX3VwKHN0ZDo6dW5pcXVlX3B0cjxfVHAsIF9EZWw+JiYgX19yLAorCSAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfcmVmZXJlbmNlPF9EZWw+Ojp2YWx1ZT46OnR5cGUqID0gMCkKKwl7CisJICByZXR1cm4gbmV3IF9TcF9jb3VudGVkX2RlbGV0ZXI8X1RwKiwgX0RlbCwgc3RkOjphbGxvY2F0b3I8X1RwPiwKKwkgICAgX0xwPihfX3IuZ2V0KCksIF9fci5nZXRfZGVsZXRlcigpKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0RlbD4KKwlzdGF0aWMgX1NwX2NvdW50ZWRfYmFzZTxfTHA+KgorCV9TX2NyZWF0ZV9mcm9tX3VwKHN0ZDo6dW5pcXVlX3B0cjxfVHAsIF9EZWw+JiYgX19yLAorCSAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19yZWZlcmVuY2U8X0RlbD46OnZhbHVlPjo6dHlwZSogPSAwKQorCXsKKwkgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPF9EZWw+Ojp0eXBlIF9EZWwxOworCSAgdHlwZWRlZiBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPF9EZWwxPiBfRGVsMjsKKwkgIHJldHVybiBuZXcgX1NwX2NvdW50ZWRfZGVsZXRlcjxfVHAqLCBfRGVsMiwgc3RkOjphbGxvY2F0b3I8X1RwPiwKKwkgICAgX0xwPihfX3IuZ2V0KCksIHN0ZDo6cmVmKF9fci5nZXRfZGVsZXRlcigpKSk7CisJfQorCisgICAgICBfU3BfY291bnRlZF9iYXNlPF9McD4qICBfTV9waTsKKyAgICB9OworCisKKyAgdGVtcGxhdGU8X0xvY2tfcG9saWN5IF9McD4KKyAgICBjbGFzcyBfX3dlYWtfY291bnQKKyAgICB7CisgICAgcHVibGljOgorICAgICAgX193ZWFrX2NvdW50KCkgOiBfTV9waSgwKSAvLyBub3Rocm93CisgICAgICB7IH0KKworICAgICAgX193ZWFrX2NvdW50KGNvbnN0IF9fc2hhcmVkX2NvdW50PF9McD4mIF9fcikgOiBfTV9waShfX3IuX01fcGkpIC8vIG5vdGhyb3cKKyAgICAgIHsKKwlpZiAoX01fcGkgIT0gMCkKKwkgIF9NX3BpLT5fTV93ZWFrX2FkZF9yZWYoKTsKKyAgICAgIH0KKworICAgICAgX193ZWFrX2NvdW50KGNvbnN0IF9fd2Vha19jb3VudDxfTHA+JiBfX3IpIDogX01fcGkoX19yLl9NX3BpKSAvLyBub3Rocm93CisgICAgICB7CisJaWYgKF9NX3BpICE9IDApCisJICBfTV9waS0+X01fd2Vha19hZGRfcmVmKCk7CisgICAgICB9CisKKyAgICAgIH5fX3dlYWtfY291bnQoKSAvLyBub3Rocm93CisgICAgICB7CisJaWYgKF9NX3BpICE9IDApCisJICBfTV9waS0+X01fd2Vha19yZWxlYXNlKCk7CisgICAgICB9CisKKyAgICAgIF9fd2Vha19jb3VudDxfTHA+JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9fc2hhcmVkX2NvdW50PF9McD4mIF9fcikgLy8gbm90aHJvdworICAgICAgeworCV9TcF9jb3VudGVkX2Jhc2U8X0xwPiogX190bXAgPSBfX3IuX01fcGk7CisJaWYgKF9fdG1wICE9IDApCisJICBfX3RtcC0+X01fd2Vha19hZGRfcmVmKCk7CisJaWYgKF9NX3BpICE9IDApCisJICBfTV9waS0+X01fd2Vha19yZWxlYXNlKCk7CisJX01fcGkgPSBfX3RtcDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIF9fd2Vha19jb3VudDxfTHA+JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9fd2Vha19jb3VudDxfTHA+JiBfX3IpIC8vIG5vdGhyb3cKKyAgICAgIHsKKwlfU3BfY291bnRlZF9iYXNlPF9McD4qIF9fdG1wID0gX19yLl9NX3BpOworCWlmIChfX3RtcCAhPSAwKQorCSAgX190bXAtPl9NX3dlYWtfYWRkX3JlZigpOworCWlmIChfTV9waSAhPSAwKQorCSAgX01fcGktPl9NX3dlYWtfcmVsZWFzZSgpOworCV9NX3BpID0gX190bXA7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9zd2FwKF9fd2Vha19jb3VudDxfTHA+JiBfX3IpIC8vIG5vdGhyb3cKKyAgICAgIHsKKwlfU3BfY291bnRlZF9iYXNlPF9McD4qIF9fdG1wID0gX19yLl9NX3BpOworCV9fci5fTV9waSA9IF9NX3BpOworCV9NX3BpID0gX190bXA7CisgICAgICB9CisKKyAgICAgIGxvbmcKKyAgICAgIF9NX2dldF91c2VfY291bnQoKSBjb25zdCAvLyBub3Rocm93CisgICAgICB7IHJldHVybiBfTV9waSAhPSAwID8gX01fcGktPl9NX2dldF91c2VfY291bnQoKSA6IDA7IH0KKworICAgICAgYm9vbAorICAgICAgX01fbGVzcyhjb25zdCBfX3dlYWtfY291bnQmIF9fcmhzKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpsZXNzPF9TcF9jb3VudGVkX2Jhc2U8X0xwPio+KCkodGhpcy0+X01fcGksIF9fcmhzLl9NX3BpKTsgfQorCisgICAgICBib29sCisgICAgICBfTV9sZXNzKGNvbnN0IF9fc2hhcmVkX2NvdW50PF9McD4mIF9fcmhzKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpsZXNzPF9TcF9jb3VudGVkX2Jhc2U8X0xwPio+KCkodGhpcy0+X01fcGksIF9fcmhzLl9NX3BpKTsgfQorCisgICAgICAvLyBGcmllbmQgZnVuY3Rpb24gaW5qZWN0ZWQgaW50byBlbmNsb3NpbmcgbmFtZXNwYWNlIGFuZCBmb3VuZCBieSBBREwKKyAgICAgIGZyaWVuZCBpbmxpbmUgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBfX3dlYWtfY291bnQmIF9fYSwgY29uc3QgX193ZWFrX2NvdW50JiBfX2IpCisgICAgICB7IHJldHVybiBfX2EuX01fcGkgPT0gX19iLl9NX3BpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgZnJpZW5kIGNsYXNzIF9fc2hhcmVkX2NvdW50PF9McD47CisKKyAgICAgIF9TcF9jb3VudGVkX2Jhc2U8X0xwPiogIF9NX3BpOworICAgIH07CisKKyAgLy8gTm93IHRoYXQgX193ZWFrX2NvdW50IGlzIGRlZmluZWQgd2UgY2FuIGRlZmluZSB0aGlzIGNvbnN0cnVjdG9yOgorICB0ZW1wbGF0ZTxfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSBfX3NoYXJlZF9jb3VudDxfTHA+OjogX19zaGFyZWRfY291bnQoY29uc3QgX193ZWFrX2NvdW50PF9McD4mIF9fcikKKyAgICA6IF9NX3BpKF9fci5fTV9waSkKKyAgICB7CisgICAgICBpZiAoX01fcGkgIT0gMCkKKwlfTV9waS0+X01fYWRkX3JlZl9sb2NrKCk7CisgICAgICBlbHNlCisJX190aHJvd19iYWRfd2Vha19wdHIoKTsKKyAgICB9CisKKworICAvLyBTdXBwb3J0IGZvciBlbmFibGVfc2hhcmVkX2Zyb21fdGhpcy4KKworICAvLyBGcmllbmQgb2YgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpcy4KKyAgdGVtcGxhdGU8X0xvY2tfcG9saWN5IF9McCwgdHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1RwMj4KKyAgICB2b2lkCisgICAgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpc19oZWxwZXIoY29uc3QgX19zaGFyZWRfY291bnQ8X0xwPiYsCisJCQkJICAgICBjb25zdCBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzPF9UcDEsCisJCQkJICAgICBfTHA+KiwgY29uc3QgX1RwMiopOworCisgIC8vIEZyaWVuZCBvZiBlbmFibGVfc2hhcmVkX2Zyb21fdGhpcy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1RwMj4KKyAgICB2b2lkCisgICAgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpc19oZWxwZXIoY29uc3QgX19zaGFyZWRfY291bnQ8PiYsCisJCQkJICAgICBjb25zdCBlbmFibGVfc2hhcmVkX2Zyb21fdGhpczxfVHAxPiosCisJCQkJICAgICBjb25zdCBfVHAyKik7CisKKyAgdGVtcGxhdGU8X0xvY2tfcG9saWN5IF9McD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXNfaGVscGVyKGNvbnN0IF9fc2hhcmVkX2NvdW50PF9McD4mLCAuLi4pCisgICAgeyB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIF9Mb2NrX3BvbGljeSBfTHA+CisgICAgY2xhc3MgX19zaGFyZWRfcHRyCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1RwICAgZWxlbWVudF90eXBlOworCisgICAgICBfX3NoYXJlZF9wdHIoKSA6IF9NX3B0cigwKSwgX01fcmVmY291bnQoKSAvLyBuZXZlciB0aHJvd3MKKyAgICAgIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCWV4cGxpY2l0IF9fc2hhcmVkX3B0cihfVHAxKiBfX3ApIDogX01fcHRyKF9fcCksIF9NX3JlZmNvdW50KF9fcCkKKwl7CisJICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0NvbnZlcnRpYmxlQ29uY2VwdDxfVHAxKiwgX1RwKj4pCisJICAvLyBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0NvbXBsZXRlQ29uY2VwdDxfVHAxKj4pCisJICBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzX2hlbHBlcihfTV9yZWZjb3VudCwgX19wLCBfX3ApOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX0RlbGV0ZXI+CisJX19zaGFyZWRfcHRyKF9UcDEqIF9fcCwgX0RlbGV0ZXIgX19kKQorCTogX01fcHRyKF9fcCksIF9NX3JlZmNvdW50KF9fcCwgX19kKQorCXsKKwkgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQ29udmVydGlibGVDb25jZXB0PF9UcDEqLCBfVHAqPikKKwkgIC8vIFRPRE8gcmVxdWlyZXMgX0RlbGV0ZXIgQ29weUNvbnN0cnVjdGlibGUgYW5kIF9fZChfX3ApIHdlbGwtZm9ybWVkCisJICBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzX2hlbHBlcihfTV9yZWZjb3VudCwgX19wLCBfX3ApOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX0RlbGV0ZXIsIHR5cGVuYW1lIF9BbGxvYz4KKwlfX3NoYXJlZF9wdHIoX1RwMSogX19wLCBfRGVsZXRlciBfX2QsIGNvbnN0IF9BbGxvYyYgX19hKQorCTogX01fcHRyKF9fcCksIF9NX3JlZmNvdW50KF9fcCwgX19kLCBfX2EpCisJeworCSAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Db252ZXJ0aWJsZUNvbmNlcHQ8X1RwMSosIF9UcCo+KQorCSAgLy8gVE9ETyByZXF1aXJlcyBfRGVsZXRlciBDb3B5Q29uc3RydWN0aWJsZSBhbmQgX19kKF9fcCkgd2VsbC1mb3JtZWQKKwkgIF9fZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXNfaGVscGVyKF9NX3JlZmNvdW50LCBfX3AsIF9fcCk7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCV9fc2hhcmVkX3B0cihjb25zdCBfX3NoYXJlZF9wdHI8X1RwMSwgX0xwPiYgX19yLCBfVHAqIF9fcCkKKwk6IF9NX3B0cihfX3ApLCBfTV9yZWZjb3VudChfX3IuX01fcmVmY291bnQpIC8vIG5ldmVyIHRocm93cworCXsgfQorCisgICAgICAvLyAgZ2VuZXJhdGVkIGNvcHkgY29uc3RydWN0b3IsIGFzc2lnbm1lbnQsIGRlc3RydWN0b3IgYXJlIGZpbmUuCisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisJX19zaGFyZWRfcHRyKGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAxLCBfTHA+JiBfX3IpCisJOiBfTV9wdHIoX19yLl9NX3B0ciksIF9NX3JlZmNvdW50KF9fci5fTV9yZWZjb3VudCkgLy8gbmV2ZXIgdGhyb3dzCisJeyBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0NvbnZlcnRpYmxlQ29uY2VwdDxfVHAxKiwgX1RwKj4pIH0KKworICAgICAgX19zaGFyZWRfcHRyKF9fc2hhcmVkX3B0ciYmIF9fcikKKyAgICAgIDogX01fcHRyKF9fci5fTV9wdHIpLCBfTV9yZWZjb3VudCgpIC8vIG5ldmVyIHRocm93cworICAgICAgeworCV9NX3JlZmNvdW50Ll9NX3N3YXAoX19yLl9NX3JlZmNvdW50KTsKKwlfX3IuX01fcHRyID0gMDsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKwlfX3NoYXJlZF9wdHIoX19zaGFyZWRfcHRyPF9UcDEsIF9McD4mJiBfX3IpCisJOiBfTV9wdHIoX19yLl9NX3B0ciksIF9NX3JlZmNvdW50KCkgLy8gbmV2ZXIgdGhyb3dzCisJeworCSAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Db252ZXJ0aWJsZUNvbmNlcHQ8X1RwMSosIF9UcCo+KQorCSAgX01fcmVmY291bnQuX01fc3dhcChfX3IuX01fcmVmY291bnQpOworCSAgX19yLl9NX3B0ciA9IDA7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCWV4cGxpY2l0IF9fc2hhcmVkX3B0cihjb25zdCBfX3dlYWtfcHRyPF9UcDEsIF9McD4mIF9fcikKKwk6IF9NX3JlZmNvdW50KF9fci5fTV9yZWZjb3VudCkgLy8gbWF5IHRocm93CisJeworCSAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Db252ZXJ0aWJsZUNvbmNlcHQ8X1RwMSosIF9UcCo+KQorCisJICAvLyBJdCBpcyBub3cgc2FmZSB0byBjb3B5IF9fci5fTV9wdHIsIGFzCisJICAvLyBfTV9yZWZjb3VudChfX3IuX01fcmVmY291bnQpIGRpZCBub3QgdGhyb3cuCisJICBfTV9wdHIgPSBfX3IuX01fcHRyOworCX0KKworICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biB0aGlzIGNvbnN0cnVjdG9yIGhhcyBubyBlZmZlY3QuCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfRGVsPgorCV9fc2hhcmVkX3B0cihzdGQ6OnVuaXF1ZV9wdHI8X1RwMSwgX0RlbD4mJiBfX3IpCisJOiBfTV9wdHIoX19yLmdldCgpKSwgX01fcmVmY291bnQoKQorCXsKKwkgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQ29udmVydGlibGVDb25jZXB0PF9UcDEqLCBfVHAqPikKKwkgIF9UcDEqIF9fdG1wID0gX19yLmdldCgpOworCSAgX01fcmVmY291bnQgPSBfX3NoYXJlZF9jb3VudDxfTHA+KHN0ZDo6bW92ZShfX3IpKTsKKwkgIF9fZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXNfaGVscGVyKF9NX3JlZmNvdW50LCBfX3RtcCwgX190bXApOworCX0KKworI2lmIF9HTElCQ1hYX0RFUFJFQ0FURUQKKyAgICAgIC8vIFBvc3Rjb25kaXRpb246IHVzZV9jb3VudCgpID09IDEgYW5kIF9fci5nZXQoKSA9PSAwCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCV9fc2hhcmVkX3B0cihzdGQ6OmF1dG9fcHRyPF9UcDE+JiYgX19yKQorCTogX01fcHRyKF9fci5nZXQoKSksIF9NX3JlZmNvdW50KCkKKwl7CisJICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0NvbnZlcnRpYmxlQ29uY2VwdDxfVHAxKiwgX1RwKj4pCisJICAvLyBUT0RPIHJlcXVpcmVzIF9UcDEgaXMgY29tcGxldGUsIGRlbGV0ZSBfX3IucmVsZWFzZSgpIHdlbGwtZm9ybWVkCisJICBfVHAxKiBfX3RtcCA9IF9fci5nZXQoKTsKKwkgIF9NX3JlZmNvdW50ID0gX19zaGFyZWRfY291bnQ8X0xwPihzdGQ6Om1vdmUoX19yKSk7CisJICBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzX2hlbHBlcihfTV9yZWZjb3VudCwgX190bXAsIF9fdG1wKTsKKwl9CisjZW5kaWYKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKwlfX3NoYXJlZF9wdHImCisJb3BlcmF0b3I9KGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAxLCBfTHA+JiBfX3IpIC8vIG5ldmVyIHRocm93cworCXsKKwkgIF9NX3B0ciA9IF9fci5fTV9wdHI7CisJICBfTV9yZWZjb3VudCA9IF9fci5fTV9yZWZjb3VudDsgLy8gX19zaGFyZWRfY291bnQ6Om9wPSBkb2Vzbid0IHRocm93CisJICByZXR1cm4gKnRoaXM7CisJfQorCisjaWYgX0dMSUJDWFhfREVQUkVDQVRFRAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKwlfX3NoYXJlZF9wdHImCisJb3BlcmF0b3I9KHN0ZDo6YXV0b19wdHI8X1RwMT4mJiBfX3IpCisJeworCSAgX19zaGFyZWRfcHRyKHN0ZDo6bW92ZShfX3IpKS5zd2FwKCp0aGlzKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisjZW5kaWYKKworICAgICAgX19zaGFyZWRfcHRyJgorICAgICAgb3BlcmF0b3I9KF9fc2hhcmVkX3B0ciYmIF9fcikKKyAgICAgIHsKKwlfX3NoYXJlZF9wdHIoc3RkOjptb3ZlKF9fcikpLnN3YXAoKnRoaXMpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX1RwMT4KKwlfX3NoYXJlZF9wdHImCisJb3BlcmF0b3I9KF9fc2hhcmVkX3B0cjxfVHAxLCBfTHA+JiYgX19yKQorCXsKKwkgIF9fc2hhcmVkX3B0cihzdGQ6Om1vdmUoX19yKSkuc3dhcCgqdGhpcyk7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfRGVsPgorCV9fc2hhcmVkX3B0ciYKKwlvcGVyYXRvcj0oc3RkOjp1bmlxdWVfcHRyPF9UcDEsIF9EZWw+JiYgX19yKQorCXsKKwkgIF9fc2hhcmVkX3B0cihzdGQ6Om1vdmUoX19yKSkuc3dhcCgqdGhpcyk7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICB2b2lkCisgICAgICByZXNldCgpIC8vIG5ldmVyIHRocm93cworICAgICAgeyBfX3NoYXJlZF9wdHIoKS5zd2FwKCp0aGlzKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCXZvaWQKKwlyZXNldChfVHAxKiBfX3ApIC8vIF9UcDEgbXVzdCBiZSBjb21wbGV0ZS4KKwl7CisJICAvLyBDYXRjaCBzZWxmLXJlc2V0IGVycm9ycy4KKwkgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChfX3AgPT0gMCB8fCBfX3AgIT0gX01fcHRyKTsKKwkgIF9fc2hhcmVkX3B0cihfX3ApLnN3YXAoKnRoaXMpOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX0RlbGV0ZXI+CisJdm9pZAorCXJlc2V0KF9UcDEqIF9fcCwgX0RlbGV0ZXIgX19kKQorCXsgX19zaGFyZWRfcHRyKF9fcCwgX19kKS5zd2FwKCp0aGlzKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfRGVsZXRlciwgdHlwZW5hbWUgX0FsbG9jPgorCXZvaWQKKwlyZXNldChfVHAxKiBfX3AsIF9EZWxldGVyIF9fZCwgY29uc3QgX0FsbG9jJiBfX2EpCisJeyBfX3NoYXJlZF9wdHIoX19wLCBfX2QsIF9fYSkuc3dhcCgqdGhpcyk7IH0KKworICAgICAgLy8gQWxsb3cgY2xhc3MgaW5zdGFudGlhdGlvbiB3aGVuIF9UcCBpcyBbY3YtcXVhbF0gdm9pZC4KKyAgICAgIHR5cGVuYW1lIHN0ZDo6YWRkX2x2YWx1ZV9yZWZlcmVuY2U8X1RwPjo6dHlwZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QgLy8gbmV2ZXIgdGhyb3dzCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9NX3B0ciAhPSAwKTsKKwlyZXR1cm4gKl9NX3B0cjsKKyAgICAgIH0KKworICAgICAgX1RwKgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IC8vIG5ldmVyIHRocm93cworICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChfTV9wdHIgIT0gMCk7CisJcmV0dXJuIF9NX3B0cjsKKyAgICAgIH0KKworICAgICAgX1RwKgorICAgICAgZ2V0KCkgY29uc3QgLy8gbmV2ZXIgdGhyb3dzCisgICAgICB7IHJldHVybiBfTV9wdHI7IH0KKworICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IC8vIG5ldmVyIHRocm93cworICAgICAgeyByZXR1cm4gX01fcHRyID09IDAgPyBmYWxzZSA6IHRydWU7IH0KKworICAgICAgYm9vbAorICAgICAgdW5pcXVlKCkgY29uc3QgLy8gbmV2ZXIgdGhyb3dzCisgICAgICB7IHJldHVybiBfTV9yZWZjb3VudC5fTV91bmlxdWUoKTsgfQorCisgICAgICBsb25nCisgICAgICB1c2VfY291bnQoKSBjb25zdCAvLyBuZXZlciB0aHJvd3MKKyAgICAgIHsgcmV0dXJuIF9NX3JlZmNvdW50Ll9NX2dldF91c2VfY291bnQoKTsgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKF9fc2hhcmVkX3B0cjxfVHAsIF9McD4mIF9fb3RoZXIpIC8vIG5ldmVyIHRocm93cworICAgICAgeworCXN0ZDo6c3dhcChfTV9wdHIsIF9fb3RoZXIuX01fcHRyKTsKKwlfTV9yZWZjb3VudC5fTV9zd2FwKF9fb3RoZXIuX01fcmVmY291bnQpOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCWJvb2wKKwlvd25lcl9iZWZvcmUoX19zaGFyZWRfcHRyPF9UcDEsIF9McD4gY29uc3QmIF9fcmhzKSBjb25zdAorCXsgcmV0dXJuIF9NX3JlZmNvdW50Ll9NX2xlc3MoX19yaHMuX01fcmVmY291bnQpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisJYm9vbAorCW93bmVyX2JlZm9yZShfX3dlYWtfcHRyPF9UcDEsIF9McD4gY29uc3QmIF9fcmhzKSBjb25zdAorCXsgcmV0dXJuIF9NX3JlZmNvdW50Ll9NX2xlc3MoX19yaHMuX01fcmVmY291bnQpOyB9CisKKyNpZmRlZiBfX0dYWF9SVFRJCisgICAgcHJvdGVjdGVkOgorICAgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBub24tc3RhbmRhcmQsIGl0IGlzIHVzZWQgYnkgYWxsb2NhdGVfc2hhcmVkLgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZS4uLiBfQXJncz4KKwlfX3NoYXJlZF9wdHIoX1NwX21ha2Vfc2hhcmVkX3RhZyBfX3RhZywgX0FsbG9jIF9fYSwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisJOiBfTV9wdHIoKSwgX01fcmVmY291bnQoX190YWcsIChfVHAqKTAsIF9fYSwKKwkJCQlzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pCisJeworCSAgLy8gX01fcHRyIG5lZWRzIHRvIHBvaW50IHRvIHRoZSBuZXdseSBjb25zdHJ1Y3RlZCBvYmplY3QuCisJICAvLyBUaGlzIHJlbGllcyBvbiBfU3BfY291bnRlZF9wdHJfaW5wbGFjZTo6X01fZ2V0X2RlbGV0ZXIuCisJICB2b2lkKiBfX3AgPSBfTV9yZWZjb3VudC5fTV9nZXRfZGVsZXRlcih0eXBlaWQoX190YWcpKTsKKwkgIF9NX3B0ciA9IHN0YXRpY19jYXN0PF9UcCo+KF9fcCk7CisJICBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzX2hlbHBlcihfTV9yZWZjb3VudCwgX01fcHRyLCBfTV9wdHIpOworCX0KKyNlbHNlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgICAgIHN0cnVjdCBfRGVsZXRlcgorICAgICAgICB7CisgICAgICAgICAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19wdHIpCisgICAgICAgICAgeworICAgICAgICAgICAgX01fYWxsb2MuZGVzdHJveShfX3B0cik7CisgICAgICAgICAgICBfTV9hbGxvYy5kZWFsbG9jYXRlKF9fcHRyLCAxKTsKKyAgICAgICAgICB9CisgICAgICAgICAgX0FsbG9jIF9NX2FsbG9jOworICAgICAgICB9OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lLi4uIF9BcmdzPgorCV9fc2hhcmVkX3B0cihfU3BfbWFrZV9zaGFyZWRfdGFnIF9fdGFnLCBfQWxsb2MgX19hLCBfQXJncyYmLi4uIF9fYXJncykKKwk6IF9NX3B0cigpLCBfTV9yZWZjb3VudCgpCisgICAgICAgIHsKKwkgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3RoZXIgX0FsbG9jMjsKKyAgICAgICAgICBfRGVsZXRlcjxfQWxsb2MyPiBfX2RlbCA9IHsgX0FsbG9jMihfX2EpIH07CisgICAgICAgICAgX01fcHRyID0gX19kZWwuX01fYWxsb2MuYWxsb2NhdGUoMSk7CisJICBfX3RyeQorCSAgICB7CisgICAgICAgICAgICAgIF9fZGVsLl9NX2FsbG9jLmNvbnN0cnVjdChfTV9wdHIsIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7CisgICAgICAgICAgICAgIF9fZGVsLl9NX2FsbG9jLmRlYWxsb2NhdGUoX01fcHRyLCAxKTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorICAgICAgICAgIF9fc2hhcmVkX2NvdW50PF9McD4gX19jb3VudChfTV9wdHIsIF9fZGVsLCBfX2RlbC5fTV9hbGxvYyk7CisgICAgICAgICAgX01fcmVmY291bnQuX01fc3dhcChfX2NvdW50KTsKKwkgIF9fZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXNfaGVscGVyKF9NX3JlZmNvdW50LCBfTV9wdHIsIF9NX3B0cik7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCBfTG9ja19wb2xpY3kgX0xwMSwgdHlwZW5hbWUgX0FsbG9jLAorCSAgICAgICB0eXBlbmFtZS4uLiBfQXJncz4KKwlmcmllbmQgX19zaGFyZWRfcHRyPF9UcDEsIF9McDE+CisJX19hbGxvY2F0ZV9zaGFyZWQoX0FsbG9jIF9fYSwgX0FyZ3MmJi4uLiBfX2FyZ3MpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHZvaWQqCisgICAgICBfTV9nZXRfZGVsZXRlcihjb25zdCBzdGQ6OnR5cGVfaW5mbyYgX190aSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3JlZmNvdW50Ll9NX2dldF9kZWxldGVyKF9fdGkpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIF9Mb2NrX3BvbGljeSBfTHAxPiBmcmllbmQgY2xhc3MgX19zaGFyZWRfcHRyOworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgX0xvY2tfcG9saWN5IF9McDE+IGZyaWVuZCBjbGFzcyBfX3dlYWtfcHRyOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRGVsLCB0eXBlbmFtZSBfVHAxLCBfTG9ja19wb2xpY3kgX0xwMT4KKwlmcmllbmQgX0RlbCogZ2V0X2RlbGV0ZXIoY29uc3QgX19zaGFyZWRfcHRyPF9UcDEsIF9McDE+Jik7CisKKyAgICAgIF9UcCoJICAgCSAgIF9NX3B0cjsgICAgICAgICAvLyBDb250YWluZWQgcG9pbnRlci4KKyAgICAgIF9fc2hhcmVkX2NvdW50PF9McD4gIF9NX3JlZmNvdW50OyAgICAvLyBSZWZlcmVuY2UgY291bnRlci4KKyAgICB9OworCisKKyAgLy8gMjAuOC4xMy4yLjcgc2hhcmVkX3B0ciBjb21wYXJpc29ucworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBfX3NoYXJlZF9wdHI8X1RwMSwgX0xwPiYgX19hLAorCSAgICAgICBjb25zdCBfX3NoYXJlZF9wdHI8X1RwMiwgX0xwPiYgX19iKQorICAgIHsgcmV0dXJuIF9fYS5nZXQoKSA9PSBfX2IuZ2V0KCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBfX3NoYXJlZF9wdHI8X1RwMSwgX0xwPiYgX19hLAorCSAgICAgICBjb25zdCBfX3NoYXJlZF9wdHI8X1RwMiwgX0xwPiYgX19iKQorICAgIHsgcmV0dXJuIF9fYS5nZXQoKSAhPSBfX2IuZ2V0KCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAxLCBfTHA+JiBfX2EsCisJICAgICAgY29uc3QgX19zaGFyZWRfcHRyPF9UcDIsIF9McD4mIF9fYikKKyAgICB7IHJldHVybiBfX2EuZ2V0KCkgPCBfX2IuZ2V0KCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3A+CisgICAgc3RydWN0IF9TcF9sZXNzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfU3AsIF9TcCwgYm9vbD4KKyAgICB7CisgICAgICBib29sCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9TcCYgX19saHMsIGNvbnN0IF9TcCYgX19yaHMpIGNvbnN0CisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfU3A6OmVsZW1lbnRfdHlwZSBlbGVtZW50X3R5cGU7CisJcmV0dXJuIHN0ZDo6bGVzczxlbGVtZW50X3R5cGUqPigpKF9fbGhzLmdldCgpLCBfX3Jocy5nZXQoKSk7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIF9Mb2NrX3BvbGljeSBfTHA+CisgICAgc3RydWN0IGxlc3M8X19zaGFyZWRfcHRyPF9UcCwgX0xwPj4KKyAgICA6IHB1YmxpYyBfU3BfbGVzczxfX3NoYXJlZF9wdHI8X1RwLCBfTHA+PgorICAgIHsgfTsKKworICAvLyBYWFggTGVzc1RoYW5Db21wYXJhYmxlPF9UcD4gY29uY2VwdCBzaG91bGQgcHJvdmlkZSA+LCA+PSBhbmQgPD0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAsIF9McD4mIF9fYSwKKwkgICAgICBjb25zdCBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+JiBfX2IpCisgICAgeyByZXR1cm4gX19hLmdldCgpID4gX19iLmdldCgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+JiBfX2EsCisJICAgICAgIGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAsIF9McD4mIF9fYikKKyAgICB7IHJldHVybiBfX2EuZ2V0KCkgPj0gX19iLmdldCgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+JiBfX2EsCisJICAgICAgIGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAsIF9McD4mIF9fYikKKyAgICB7IHJldHVybiBfX2EuZ2V0KCkgPD0gX19iLmdldCgpOyB9CisKKyAgLy8gMi4yLjMuOCBzaGFyZWRfcHRyIHNwZWNpYWxpemVkIGFsZ29yaXRobXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX0xvY2tfcG9saWN5IF9McD4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoX19zaGFyZWRfcHRyPF9UcCwgX0xwPiYgX19hLCBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+JiBfX2IpCisgICAgeyBfX2Euc3dhcChfX2IpOyB9CisKKyAgLy8gMi4yLjMuOSBzaGFyZWRfcHRyIGNhc3RzCisKKyAgLy8gVGhlIHNlZW1pbmdseSBlcXVpdmFsZW50IGNvZGU6CisgIC8vIHNoYXJlZF9wdHI8X1RwLCBfTHA+KHN0YXRpY19jYXN0PF9UcCo+KF9fci5nZXQoKSkpCisgIC8vIHdpbGwgZXZlbnR1YWxseSByZXN1bHQgaW4gdW5kZWZpbmVkIGJlaGF2aW91ciwgYXR0ZW1wdGluZyB0bworICAvLyBkZWxldGUgdGhlIHNhbWUgb2JqZWN0IHR3aWNlLgorICAvLy8gc3RhdGljX3BvaW50ZXJfY2FzdAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDEsIF9Mb2NrX3BvbGljeSBfTHA+CisgICAgaW5saW5lIF9fc2hhcmVkX3B0cjxfVHAsIF9McD4KKyAgICBzdGF0aWNfcG9pbnRlcl9jYXN0KGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAxLCBfTHA+JiBfX3IpCisgICAgeyByZXR1cm4gX19zaGFyZWRfcHRyPF9UcCwgX0xwPihfX3IsIHN0YXRpY19jYXN0PF9UcCo+KF9fci5nZXQoKSkpOyB9CisKKyAgLy8gVGhlIHNlZW1pbmdseSBlcXVpdmFsZW50IGNvZGU6CisgIC8vIHNoYXJlZF9wdHI8X1RwLCBfTHA+KGNvbnN0X2Nhc3Q8X1RwKj4oX19yLmdldCgpKSkKKyAgLy8gd2lsbCBldmVudHVhbGx5IHJlc3VsdCBpbiB1bmRlZmluZWQgYmVoYXZpb3VyLCBhdHRlbXB0aW5nIHRvCisgIC8vIGRlbGV0ZSB0aGUgc2FtZSBvYmplY3QgdHdpY2UuCisgIC8vLyBjb25zdF9wb2ludGVyX2Nhc3QKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+CisgICAgY29uc3RfcG9pbnRlcl9jYXN0KGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAxLCBfTHA+JiBfX3IpCisgICAgeyByZXR1cm4gX19zaGFyZWRfcHRyPF9UcCwgX0xwPihfX3IsIGNvbnN0X2Nhc3Q8X1RwKj4oX19yLmdldCgpKSk7IH0KKworICAvLyBUaGUgc2VlbWluZ2x5IGVxdWl2YWxlbnQgY29kZToKKyAgLy8gc2hhcmVkX3B0cjxfVHAsIF9McD4oZHluYW1pY19jYXN0PF9UcCo+KF9fci5nZXQoKSkpCisgIC8vIHdpbGwgZXZlbnR1YWxseSByZXN1bHQgaW4gdW5kZWZpbmVkIGJlaGF2aW91ciwgYXR0ZW1wdGluZyB0bworICAvLyBkZWxldGUgdGhlIHNhbWUgb2JqZWN0IHR3aWNlLgorICAvLy8gZHluYW1pY19wb2ludGVyX2Nhc3QKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+CisgICAgZHluYW1pY19wb2ludGVyX2Nhc3QoY29uc3QgX19zaGFyZWRfcHRyPF9UcDEsIF9McD4mIF9fcikKKyAgICB7CisgICAgICBpZiAoX1RwKiBfX3AgPSBkeW5hbWljX2Nhc3Q8X1RwKj4oX19yLmdldCgpKSkKKwlyZXR1cm4gX19zaGFyZWRfcHRyPF9UcCwgX0xwPihfX3IsIF9fcCk7CisgICAgICByZXR1cm4gX19zaGFyZWRfcHRyPF9UcCwgX0xwPigpOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX0xvY2tfcG9saWN5IF9McD4KKyAgICBjbGFzcyBfX3dlYWtfcHRyCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1RwIGVsZW1lbnRfdHlwZTsKKworICAgICAgX193ZWFrX3B0cigpIDogX01fcHRyKDApLCBfTV9yZWZjb3VudCgpIC8vIG5ldmVyIHRocm93cworICAgICAgeyB9CisKKyAgICAgIC8vIEdlbmVyYXRlZCBjb3B5IGNvbnN0cnVjdG9yLCBhc3NpZ25tZW50LCBkZXN0cnVjdG9yIGFyZSBmaW5lLgorCisgICAgICAvLyBUaGUgIm9idmlvdXMiIGNvbnZlcnRpbmcgY29uc3RydWN0b3IgaW1wbGVtZW50YXRpb246CisgICAgICAvLworICAgICAgLy8gIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAvLyAgICBfX3dlYWtfcHRyKGNvbnN0IF9fd2Vha19wdHI8X1RwMSwgX0xwPiYgX19yKQorICAgICAgLy8gICAgOiBfTV9wdHIoX19yLl9NX3B0ciksIF9NX3JlZmNvdW50KF9fci5fTV9yZWZjb3VudCkgLy8gbmV2ZXIgdGhyb3dzCisgICAgICAvLyAgICB7IH0KKyAgICAgIC8vCisgICAgICAvLyBoYXMgYSBzZXJpb3VzIHByb2JsZW0uCisgICAgICAvLworICAgICAgLy8gIF9fci5fTV9wdHIgbWF5IGFscmVhZHkgaGF2ZSBiZWVuIGludmFsaWRhdGVkLiBUaGUgX01fcHRyKF9fci5fTV9wdHIpCisgICAgICAvLyAgY29udmVyc2lvbiBtYXkgcmVxdWlyZSBhY2Nlc3MgdG8gKl9fci5fTV9wdHIgKHZpcnR1YWwgaW5oZXJpdGFuY2UpLgorICAgICAgLy8KKyAgICAgIC8vIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhdm9pZCBzcHVyaW91cyBhY2Nlc3MgdmlvbGF0aW9ucyBzaW5jZQorICAgICAgLy8gaW4gbXVsdGl0aHJlYWRlZCBwcm9ncmFtcyBfX3IuX01fcHRyIG1heSBiZSBpbnZhbGlkYXRlZCBhdCBhbnkgcG9pbnQuCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCV9fd2Vha19wdHIoY29uc3QgX193ZWFrX3B0cjxfVHAxLCBfTHA+JiBfX3IpCisJOiBfTV9yZWZjb3VudChfX3IuX01fcmVmY291bnQpIC8vIG5ldmVyIHRocm93cworCXsKKwkgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQ29udmVydGlibGVDb25jZXB0PF9UcDEqLCBfVHAqPikKKwkgIF9NX3B0ciA9IF9fci5sb2NrKCkuZ2V0KCk7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCV9fd2Vha19wdHIoY29uc3QgX19zaGFyZWRfcHRyPF9UcDEsIF9McD4mIF9fcikKKwk6IF9NX3B0cihfX3IuX01fcHRyKSwgX01fcmVmY291bnQoX19yLl9NX3JlZmNvdW50KSAvLyBuZXZlciB0aHJvd3MKKwl7IF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQ29udmVydGlibGVDb25jZXB0PF9UcDEqLCBfVHAqPikgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCV9fd2Vha19wdHImCisJb3BlcmF0b3I9KGNvbnN0IF9fd2Vha19wdHI8X1RwMSwgX0xwPiYgX19yKSAvLyBuZXZlciB0aHJvd3MKKwl7CisJICBfTV9wdHIgPSBfX3IubG9jaygpLmdldCgpOworCSAgX01fcmVmY291bnQgPSBfX3IuX01fcmVmY291bnQ7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCV9fd2Vha19wdHImCisJb3BlcmF0b3I9KGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAxLCBfTHA+JiBfX3IpIC8vIG5ldmVyIHRocm93cworCXsKKwkgIF9NX3B0ciA9IF9fci5fTV9wdHI7CisJICBfTV9yZWZjb3VudCA9IF9fci5fTV9yZWZjb3VudDsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIF9fc2hhcmVkX3B0cjxfVHAsIF9McD4KKyAgICAgIGxvY2soKSBjb25zdCAvLyBuZXZlciB0aHJvd3MKKyAgICAgIHsKKyNpZmRlZiBfX0dUSFJFQURTCisJLy8gT3B0aW1pemF0aW9uOiBhdm9pZCB0aHJvdyBvdmVyaGVhZC4KKwlpZiAoZXhwaXJlZCgpKQorCSAgcmV0dXJuIF9fc2hhcmVkX3B0cjxlbGVtZW50X3R5cGUsIF9McD4oKTsKKworCV9fdHJ5CisJICB7CisJICAgIHJldHVybiBfX3NoYXJlZF9wdHI8ZWxlbWVudF90eXBlLCBfTHA+KCp0aGlzKTsKKwkgIH0KKwlfX2NhdGNoKGNvbnN0IGJhZF93ZWFrX3B0ciYpCisJICB7CisJICAgIC8vIFE6IEhvdyBjYW4gd2UgZ2V0IGhlcmU/CisJICAgIC8vIEE6IEFub3RoZXIgdGhyZWFkIG1heSBoYXZlIGludmFsaWRhdGVkIHIgYWZ0ZXIgdGhlCisJICAgIC8vICAgIHVzZV9jb3VudCB0ZXN0IGFib3ZlLgorCSAgICByZXR1cm4gX19zaGFyZWRfcHRyPGVsZW1lbnRfdHlwZSwgX0xwPigpOworCSAgfQorCisjZWxzZQorCS8vIE9wdGltaXphdGlvbjogYXZvaWQgdHJ5L2NhdGNoIG92ZXJoZWFkIHdoZW4gc2luZ2xlIHRocmVhZGVkLgorCXJldHVybiBleHBpcmVkKCkgPyBfX3NoYXJlZF9wdHI8ZWxlbWVudF90eXBlLCBfTHA+KCkKKwkJCSA6IF9fc2hhcmVkX3B0cjxlbGVtZW50X3R5cGUsIF9McD4oKnRoaXMpOworCisjZW5kaWYKKyAgICAgIH0gLy8gWFhYIE1UCisKKyAgICAgIGxvbmcKKyAgICAgIHVzZV9jb3VudCgpIGNvbnN0IC8vIG5ldmVyIHRocm93cworICAgICAgeyByZXR1cm4gX01fcmVmY291bnQuX01fZ2V0X3VzZV9jb3VudCgpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIGV4cGlyZWQoKSBjb25zdCAvLyBuZXZlciB0aHJvd3MKKyAgICAgIHsgcmV0dXJuIF9NX3JlZmNvdW50Ll9NX2dldF91c2VfY291bnQoKSA9PSAwOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisJYm9vbAorCW93bmVyX2JlZm9yZShjb25zdCBfX3NoYXJlZF9wdHI8X1RwMSwgX0xwPiYgX19yaHMpIGNvbnN0CisJeyByZXR1cm4gX01fcmVmY291bnQuX01fbGVzcyhfX3Jocy5fTV9yZWZjb3VudCk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKwlib29sCisJb3duZXJfYmVmb3JlKGNvbnN0IF9fd2Vha19wdHI8X1RwMSwgX0xwPiYgX19yaHMpIGNvbnN0CisJeyByZXR1cm4gX01fcmVmY291bnQuX01fbGVzcyhfX3Jocy5fTV9yZWZjb3VudCk7IH0KKworICAgICAgdm9pZAorICAgICAgcmVzZXQoKSAvLyBuZXZlciB0aHJvd3MKKyAgICAgIHsgX193ZWFrX3B0cigpLnN3YXAoKnRoaXMpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoX193ZWFrX3B0ciYgX19zKSAvLyBuZXZlciB0aHJvd3MKKyAgICAgIHsKKwlzdGQ6OnN3YXAoX01fcHRyLCBfX3MuX01fcHRyKTsKKwlfTV9yZWZjb3VudC5fTV9zd2FwKF9fcy5fTV9yZWZjb3VudCk7CisgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgLy8gVXNlZCBieSBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzLgorICAgICAgdm9pZAorICAgICAgX01fYXNzaWduKF9UcCogX19wdHIsIGNvbnN0IF9fc2hhcmVkX2NvdW50PF9McD4mIF9fcmVmY291bnQpCisgICAgICB7CisJX01fcHRyID0gX19wdHI7CisJX01fcmVmY291bnQgPSBfX3JlZmNvdW50OworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCBfTG9ja19wb2xpY3kgX0xwMT4gZnJpZW5kIGNsYXNzIF9fc2hhcmVkX3B0cjsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIF9Mb2NrX3BvbGljeSBfTHAxPiBmcmllbmQgY2xhc3MgX193ZWFrX3B0cjsKKyAgICAgIGZyaWVuZCBjbGFzcyBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzPF9UcCwgX0xwPjsKKyAgICAgIGZyaWVuZCBjbGFzcyBlbmFibGVfc2hhcmVkX2Zyb21fdGhpczxfVHA+OworCisgICAgICBfVHAqCSAJIF9NX3B0cjsgICAgICAgICAvLyBDb250YWluZWQgcG9pbnRlci4KKyAgICAgIF9fd2Vha19jb3VudDxfTHA+ICBfTV9yZWZjb3VudDsgICAgLy8gUmVmZXJlbmNlIGNvdW50ZXIuCisgICAgfTsKKworICAvLyAyMC44LjEzLjMuNyB3ZWFrX3B0ciBzcGVjaWFsaXplZCBhbGdvcml0aG1zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIF9Mb2NrX3BvbGljeSBfTHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKF9fd2Vha19wdHI8X1RwLCBfTHA+JiBfX2EsIF9fd2Vha19wdHI8X1RwLCBfTHA+JiBfX2IpCisgICAgeyBfX2Euc3dhcChfX2IpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxPgorICAgIHN0cnVjdCBfU3Bfb3duZXJfbGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLCBfVHAsIGJvb2w+CisgICAgeworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fbGhzLCBjb25zdCBfVHAmIF9fcmhzKSBjb25zdAorICAgICAgeyByZXR1cm4gX19saHMub3duZXJfYmVmb3JlKF9fcmhzKTsgfQorCisgICAgICBib29sCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19saHMsIGNvbnN0IF9UcDEmIF9fcmhzKSBjb25zdAorICAgICAgeyByZXR1cm4gX19saHMub3duZXJfYmVmb3JlKF9fcmhzKTsgfQorCisgICAgICBib29sCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9UcDEmIF9fbGhzLCBjb25zdCBfVHAmIF9fcmhzKSBjb25zdAorICAgICAgeyByZXR1cm4gX19saHMub3duZXJfYmVmb3JlKF9fcmhzKTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIHN0cnVjdCBvd25lcl9sZXNzPF9fc2hhcmVkX3B0cjxfVHAsIF9McD4+CisgICAgOiBwdWJsaWMgX1NwX293bmVyX2xlc3M8X19zaGFyZWRfcHRyPF9UcCwgX0xwPiwgX193ZWFrX3B0cjxfVHAsIF9McD4+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX0xvY2tfcG9saWN5IF9McD4KKyAgICBzdHJ1Y3Qgb3duZXJfbGVzczxfX3dlYWtfcHRyPF9UcCwgX0xwPj4KKyAgICA6IHB1YmxpYyBfU3Bfb3duZXJfbGVzczxfX3dlYWtfcHRyPF9UcCwgX0xwPiwgX19zaGFyZWRfcHRyPF9UcCwgX0xwPj4KKyAgICB7IH07CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIF9Mb2NrX3BvbGljeSBfTHA+CisgICAgY2xhc3MgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpcworICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzKCkgeyB9CisKKyAgICAgIF9fZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMoY29uc3QgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpcyYpIHsgfQorCisgICAgICBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9fZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMmKQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgfl9fZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMoKSB7IH0KKworICAgIHB1YmxpYzoKKyAgICAgIF9fc2hhcmVkX3B0cjxfVHAsIF9McD4KKyAgICAgIHNoYXJlZF9mcm9tX3RoaXMoKQorICAgICAgeyByZXR1cm4gX19zaGFyZWRfcHRyPF9UcCwgX0xwPih0aGlzLT5fTV93ZWFrX3RoaXMpOyB9CisKKyAgICAgIF9fc2hhcmVkX3B0cjxjb25zdCBfVHAsIF9McD4KKyAgICAgIHNoYXJlZF9mcm9tX3RoaXMoKSBjb25zdAorICAgICAgeyByZXR1cm4gX19zaGFyZWRfcHRyPGNvbnN0IF9UcCwgX0xwPih0aGlzLT5fTV93ZWFrX3RoaXMpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKwl2b2lkCisJX01fd2Vha19hc3NpZ24oX1RwMSogX19wLCBjb25zdCBfX3NoYXJlZF9jb3VudDxfTHA+JiBfX24pIGNvbnN0CisJeyBfTV93ZWFrX3RoaXMuX01fYXNzaWduKF9fcCwgX19uKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCWZyaWVuZCB2b2lkCisJX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpc19oZWxwZXIoY29uc3QgX19zaGFyZWRfY291bnQ8X0xwPiYgX19wbiwKKwkJCQkJIGNvbnN0IF9fZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMqIF9fcGUsCisJCQkJCSBjb25zdCBfVHAxKiBfX3B4KQorCXsKKwkgIGlmIChfX3BlICE9IDApCisJICAgIF9fcGUtPl9NX3dlYWtfYXNzaWduKGNvbnN0X2Nhc3Q8X1RwMSo+KF9fcHgpLCBfX3BuKTsKKwl9CisKKyAgICAgIG11dGFibGUgX193ZWFrX3B0cjxfVHAsIF9McD4gIF9NX3dlYWtfdGhpczsKKyAgICB9OworCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwLCB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIGlubGluZSBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+CisgICAgX19hbGxvY2F0ZV9zaGFyZWQoX0FsbG9jIF9fYSwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisgICAgeworICAgICAgcmV0dXJuIF9fc2hhcmVkX3B0cjxfVHAsIF9McD4oX1NwX21ha2Vfc2hhcmVkX3RhZygpLAorCSAgc3RkOjpmb3J3YXJkPF9BbGxvYz4oX19hKSwgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICBpbmxpbmUgX19zaGFyZWRfcHRyPF9UcCwgX0xwPgorICAgIF9fbWFrZV9zaGFyZWQoX0FyZ3MmJi4uLiBfX2FyZ3MpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxfVHA+Ojp0eXBlIF9UcF9uYzsKKyAgICAgIHJldHVybiBfX2FsbG9jYXRlX3NoYXJlZDxfVHAsIF9McD4oc3RkOjphbGxvY2F0b3I8X1RwX25jPigpLAorCQkJCQkgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKyAgICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmIC8vIF9TSEFSRURfUFRSX0JBU0VfSApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3NsaWNlX2FycmF5LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc2xpY2VfYXJyYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjZjNzY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3NsaWNlX2FycmF5LmgKQEAgLTAsMCArMSwyNzIgQEAKKy8vIFRoZSB0ZW1wbGF0ZSBhbmQgaW5saW5lcyBmb3IgdGhlIC0qLSBDKysgLSotIHNsaWNlX2FycmF5IGNsYXNzLgorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBzbGljZV9hcnJheS5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKy8vIFdyaXR0ZW4gYnkgR2FicmllbCBEb3MgUmVpcyA8R2FicmllbC5Eb3MtUmVpc0BEUFRNYXRocy5FTlMtQ2FjaGFuLkZyPgorCisjaWZuZGVmIF9TTElDRV9BUlJBWV9ICisjZGVmaW5lIF9TTElDRV9BUlJBWV9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8qKgorICAgKiBAYWRkdG9ncm91cCBudW1lcmljX2FycmF5cworICAgKiBAeworICAgKi8KKworICAvKioKKyAgICogIEBicmllZiAgQ2xhc3MgZGVmaW5pbmcgb25lLWRpbWVuc2lvbmFsIHN1YnNldCBvZiBhbiBhcnJheS4KKyAgICoKKyAgICogIFRoZSBzbGljZSBjbGFzcyByZXByZXNlbnRzIGEgb25lLWRpbWVuc2lvbmFsIHN1YnNldCBvZiBhbiBhcnJheSwKKyAgICogIHNwZWNpZmllZCBieSB0aHJlZSBwYXJhbWV0ZXJzOiBzdGFydCBvZmZzZXQsIHNpemUsIGFuZCBzdHJpZGUuICBUaGUKKyAgICogIHN0YXJ0IG9mZnNldCBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGFycmF5IHRoYXQgaXMgcGFydAorICAgKiAgb2YgdGhlIHN1YnNldC4gIFRoZSBzaXplIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHN1YnNldC4KKyAgICogIFN0cmlkZSBpcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiBlYWNoIHN1Y2Nlc3NpdmUgYXJyYXkgZWxlbWVudCB0byBpbmNsdWRlCisgICAqICBpbiB0aGUgc3Vic2V0LgorICAgKgorICAgKiAgRm9yIGV4YW1wbGUsIHdpdGggYW4gYXJyYXkgb2Ygc2l6ZSAxMCwgYW5kIGEgc2xpY2Ugd2l0aCBvZmZzZXQgMSwgc2l6ZSAzCisgICAqICBhbmQgc3RyaWRlIDIsIHRoZSBzdWJzZXQgY29uc2lzdHMgb2YgYXJyYXkgZWxlbWVudHMgMSwgMywgYW5kIDUuCisgICAqLworICBjbGFzcyBzbGljZQorICB7CisgIHB1YmxpYzoKKyAgICAvLy8gIENvbnN0cnVjdCBhbiBlbXB0eSBzbGljZS4KKyAgICBzbGljZSgpOworCisgICAgLyoqCisgICAgICogIEBicmllZiAgQ29uc3RydWN0IGEgc2xpY2UuCisgICAgICoKKyAgICAgKiAgQHBhcmFtICBvICBPZmZzZXQgaW4gYXJyYXkgb2YgZmlyc3QgZWxlbWVudC4KKyAgICAgKiAgQHBhcmFtICBkICBOdW1iZXIgb2YgZWxlbWVudHMgaW4gc2xpY2UuCisgICAgICogIEBwYXJhbSAgcyAgU3RyaWRlIGJldHdlZW4gYXJyYXkgZWxlbWVudHMuCisgICAgICovCisgICAgc2xpY2Uoc2l6ZV90LCBzaXplX3QsIHNpemVfdCk7CisKKyAgICAvLy8gIFJldHVybiBhcnJheSBvZmZzZXQgb2YgZmlyc3Qgc2xpY2UgZWxlbWVudC4KKyAgICBzaXplX3Qgc3RhcnQoKSBjb25zdDsKKyAgICAvLy8gIFJldHVybiBzaXplIG9mIHNsaWNlLgorICAgIHNpemVfdCBzaXplKCkgY29uc3Q7CisgICAgLy8vICBSZXR1cm4gYXJyYXkgc3RyaWRlIG9mIHNsaWNlLgorICAgIHNpemVfdCBzdHJpZGUoKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIHNpemVfdCBfTV9vZmY7ICAgICAgICAgICAgICAgICAgICAgIC8vIG9mZnNldAorICAgIHNpemVfdCBfTV9zejsJCQkvLyBzaXplCisgICAgc2l6ZV90IF9NX3N0OwkJCS8vIHN0cmlkZSB1bml0CisgIH07CisKKyAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAvLyA1NDMuIHZhbGFycmF5IHNsaWNlIGRlZmF1bHQgY29uc3RydWN0b3IKKyAgaW5saW5lCisgIHNsaWNlOjpzbGljZSgpIAorICA6IF9NX29mZigwKSwgX01fc3ooMCksIF9NX3N0KDApIHt9CisKKyAgaW5saW5lCisgIHNsaWNlOjpzbGljZShzaXplX3QgX19vLCBzaXplX3QgX19kLCBzaXplX3QgX19zKQorICA6IF9NX29mZihfX28pLCBfTV9zeihfX2QpLCBfTV9zdChfX3MpIHt9CisKKyAgaW5saW5lIHNpemVfdAorICBzbGljZTo6c3RhcnQoKSBjb25zdAorICB7IHJldHVybiBfTV9vZmY7IH0KKworICBpbmxpbmUgc2l6ZV90CisgIHNsaWNlOjpzaXplKCkgY29uc3QKKyAgeyByZXR1cm4gX01fc3o7IH0KKworICBpbmxpbmUgc2l6ZV90CisgIHNsaWNlOjpzdHJpZGUoKSBjb25zdAorICB7IHJldHVybiBfTV9zdDsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBSZWZlcmVuY2UgdG8gb25lLWRpbWVuc2lvbmFsIHN1YnNldCBvZiBhbiBhcnJheS4KKyAgICoKKyAgICogIEEgc2xpY2VfYXJyYXkgaXMgYSByZWZlcmVuY2UgdG8gdGhlIGFjdHVhbCBlbGVtZW50cyBvZiBhbiBhcnJheQorICAgKiAgc3BlY2lmaWVkIGJ5IGEgc2xpY2UuICBUaGUgd2F5IHRvIGdldCBhIHNsaWNlX2FycmF5IGlzIHRvIGNhbGwKKyAgICogIG9wZXJhdG9yW10oc2xpY2UpIG9uIGEgdmFsYXJyYXkuICBUaGUgcmV0dXJuZWQgc2xpY2VfYXJyYXkgdGhlbiBwZXJtaXRzCisgICAqICBjYXJyeWluZyBvcGVyYXRpb25zIG91dCBvbiB0aGUgcmVmZXJlbmNlZCBzdWJzZXQgb2YgZWxlbWVudHMgaW4gdGhlCisgICAqICBvcmlnaW5hbCB2YWxhcnJheS4gIEZvciBleGFtcGxlLCBvcGVyYXRvcis9KHZhbGFycmF5KSB3aWxsIGFkZCB2YWx1ZXMKKyAgICogIHRvIHRoZSBzdWJzZXQgb2YgZWxlbWVudHMgaW4gdGhlIHVuZGVybHlpbmcgdmFsYXJyYXkgdGhpcyBzbGljZV9hcnJheQorICAgKiAgcmVmZXJzIHRvLgorICAgKgorICAgKiAgQHBhcmFtICBUcCAgRWxlbWVudCB0eXBlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIHNsaWNlX2FycmF5CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDI1My4gdmFsYXJyYXkgaGVscGVyIGZ1bmN0aW9ucyBhcmUgYWxtb3N0IGVudGlyZWx5IHVzZWxlc3MKKworICAgICAgLy8vICBDb3B5IGNvbnN0cnVjdG9yLiAgQm90aCBzbGljZXMgcmVmZXIgdG8gdGhlIHNhbWUgdW5kZXJseWluZyBhcnJheS4KKyAgICAgIHNsaWNlX2FycmF5KGNvbnN0IHNsaWNlX2FycmF5Jik7CisKKyAgICAgIC8vLyAgQXNzaWdubWVudCBvcGVyYXRvci4gIEFzc2lnbnMgc2xpY2UgZWxlbWVudHMgdG8gY29ycmVzcG9uZGluZworICAgICAgLy8vICBlbGVtZW50cyBvZiBAYSBhLgorICAgICAgc2xpY2VfYXJyYXkmIG9wZXJhdG9yPShjb25zdCBzbGljZV9hcnJheSYpOworCisgICAgICAvLy8gIEFzc2lnbiBzbGljZSBlbGVtZW50cyB0byBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYuCisgICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIE11bHRpcGx5IHNsaWNlIGVsZW1lbnRzIGJ5IGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdi4KKyAgICAgIHZvaWQgb3BlcmF0b3IqPShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIERpdmlkZSBzbGljZSBlbGVtZW50cyBieSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYuCisgICAgICB2b2lkIG9wZXJhdG9yLz0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBNb2R1bG8gc2xpY2UgZWxlbWVudHMgYnkgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvciU9KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgQWRkIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdiB0byBzbGljZSBlbGVtZW50cy4KKyAgICAgIHZvaWQgb3BlcmF0b3IrPShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIFN1YnRyYWN0IGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdiBmcm9tIHNsaWNlIGVsZW1lbnRzLgorICAgICAgdm9pZCBvcGVyYXRvci09KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgTG9naWNhbCB4b3Igc2xpY2UgZWxlbWVudHMgd2l0aCBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYuCisgICAgICB2b2lkIG9wZXJhdG9yXj0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBMb2dpY2FsIGFuZCBzbGljZSBlbGVtZW50cyB3aXRoIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdi4KKyAgICAgIHZvaWQgb3BlcmF0b3ImPShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIExvZ2ljYWwgb3Igc2xpY2UgZWxlbWVudHMgd2l0aCBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYuCisgICAgICB2b2lkIG9wZXJhdG9yfD0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBMZWZ0IHNoaWZ0IHNsaWNlIGVsZW1lbnRzIGJ5IGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdi4KKyAgICAgIHZvaWQgb3BlcmF0b3I8PD0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBSaWdodCBzaGlmdCBzbGljZSBlbGVtZW50cyBieSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYuCisgICAgICB2b2lkIG9wZXJhdG9yPj49KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgQXNzaWduIGFsbCBzbGljZSBlbGVtZW50cyB0byBAYSB0LgorICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1RwICYpIGNvbnN0OworICAgICAgLy8gICAgICAgIH5zbGljZV9hcnJheSAoKTsKKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKyAgICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKwl2b2lkIG9wZXJhdG9yKj0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKwl2b2lkIG9wZXJhdG9yLz0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKwl2b2lkIG9wZXJhdG9yJT0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKwl2b2lkIG9wZXJhdG9yKz0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKwl2b2lkIG9wZXJhdG9yLT0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKwl2b2lkIG9wZXJhdG9yXj0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKwl2b2lkIG9wZXJhdG9yJj0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKwl2b2lkIG9wZXJhdG9yfD0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKwl2b2lkIG9wZXJhdG9yPDw9KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisJdm9pZCBvcGVyYXRvcj4+PShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgZnJpZW5kIGNsYXNzIHZhbGFycmF5PF9UcD47CisgICAgICBzbGljZV9hcnJheShfQXJyYXk8X1RwPiwgY29uc3Qgc2xpY2UmKTsKKworICAgICAgY29uc3Qgc2l6ZV90ICAgICAgX01fc3o7CisgICAgICBjb25zdCBzaXplX3QgICAgICBfTV9zdHJpZGU7CisgICAgICBjb25zdCBfQXJyYXk8X1RwPiBfTV9hcnJheTsKKworICAgICAgLy8gbm90IGltcGxlbWVudGVkCisgICAgICBzbGljZV9hcnJheSgpOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZQorICAgIHNsaWNlX2FycmF5PF9UcD46OnNsaWNlX2FycmF5KF9BcnJheTxfVHA+IF9fYSwgY29uc3Qgc2xpY2UmIF9fcykKKyAgICA6IF9NX3N6KF9fcy5zaXplKCkpLCBfTV9zdHJpZGUoX19zLnN0cmlkZSgpKSwKKyAgICAgIF9NX2FycmF5KF9fYS5iZWdpbigpICsgX19zLnN0YXJ0KCkpIHt9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZQorICAgIHNsaWNlX2FycmF5PF9UcD46OnNsaWNlX2FycmF5KGNvbnN0IHNsaWNlX2FycmF5PF9UcD4mIGEpCisgICAgOiBfTV9zeihhLl9NX3N6KSwgX01fc3RyaWRlKGEuX01fc3RyaWRlKSwgX01fYXJyYXkoYS5fTV9hcnJheSkge30KKworICAvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgIC8vICAgIGlubGluZSBzbGljZV9hcnJheTxfVHA+Ojp+c2xpY2VfYXJyYXkgKCkge30KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHNsaWNlX2FycmF5PF9UcD4mCisgICAgc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IHNsaWNlX2FycmF5PF9UcD4mIF9fYSkKKyAgICB7CisgICAgICBzdGQ6Ol9fdmFsYXJyYXlfY29weShfX2EuX01fYXJyYXksIF9fYS5fTV9zeiwgX19hLl9NX3N0cmlkZSwKKwkJCSAgIF9NX2FycmF5LCBfTV9zdHJpZGUpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvcj0oY29uc3QgX1RwJiBfX3QpIGNvbnN0CisgICAgeyBzdGQ6Ol9fdmFsYXJyYXlfZmlsbChfTV9hcnJheSwgX01fc3osIF9NX3N0cmlkZSwgX190KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIHNsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yPShjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIGNvbnN0CisgICAgeyBzdGQ6Ol9fdmFsYXJyYXlfY29weShfQXJyYXk8X1RwPihfX3YpLCBfTV9hcnJheSwgX01fc3osIF9NX3N0cmlkZSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgaW5saW5lIHZvaWQKKyAgICBzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvcj0oY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0CisgICAgeyBzdGQ6Ol9fdmFsYXJyYXlfY29weShfX2UsIF9NX3N6LCBfTV9hcnJheSwgX01fc3RyaWRlKTsgfQorCisjdW5kZWYgX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUgorI2RlZmluZSBfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKF9PcCxfTmFtZSkJCQkJXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CQkJCQkJXAorICAgIGlubGluZSB2b2lkCQkJCQkJCQlcCisgICAgc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgX09wIyM9KGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICBfQXJyYXlfYXVnbWVudGVkXyMjX05hbWUoX01fYXJyYXksIF9NX3N6LCBfTV9zdHJpZGUsIF9BcnJheTxfVHA+KF9fdikpO1wKKyAgICB9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CQkJCSAgICAgICAgICAgICAgICBcCisgICAgICBpbmxpbmUgdm9pZAkJCQkJCQlcCisgICAgICBzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciBfT3AjIz0oY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0XAorICAgICAgewkJCQkJCQkJCVwKKwkgIF9BcnJheV9hdWdtZW50ZWRfIyNfTmFtZShfTV9hcnJheSwgX01fc3RyaWRlLCBfX2UsIF9NX3N6KTsJXAorICAgICAgfQorCisKK19ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoKiwgX19tdWx0aXBsaWVzKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUigvLCBfX2RpdmlkZXMpCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKCUsIF9fbW9kdWx1cykKK19ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoKywgX19wbHVzKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUigtLCBfX21pbnVzKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUiheLCBfX2JpdHdpc2VfeG9yKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUigmLCBfX2JpdHdpc2VfYW5kKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUih8LCBfX2JpdHdpc2Vfb3IpCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKDw8LCBfX3NoaWZ0X2xlZnQpCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKD4+LCBfX3NoaWZ0X3JpZ2h0KQorCisjdW5kZWYgX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUgorCisgIC8vIEB9IGdyb3VwIG51bWVyaWNfYXJyYXlzCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmIC8qIF9TTElDRV9BUlJBWV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3N0cmVhbS50Y2MgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3N0cmVhbS50Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY5ZGI4ZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zc3RyZWFtLnRjYwpAQCAtMCwwICsxLDI3MyBAQAorLy8gU3RyaW5nIGJhc2VkIHN0cmVhbXMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LAorLy8gMjAwNiwgMjAwNywgMjAwOQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHNzdHJlYW0udGNjCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyNy43ICBTdHJpbmctYmFzZWQgc3RyZWFtcworLy8KKworI2lmbmRlZiBfU1NUUkVBTV9UQ0MKKyNkZWZpbmUgX1NTVFJFQU1fVENDIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjppbnRfdHlwZQorICAgIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIHBiYWNrZmFpbChpbnRfdHlwZSBfX2MpCisgICAgeworICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CisgICAgICBpZiAodGhpcy0+ZWJhY2soKSA8IHRoaXMtPmdwdHIoKSkKKwl7CisJICAvLyBUcnkgdG8gcHV0IGJhY2sgX19jIGludG8gaW5wdXQgc2VxdWVuY2UgaW4gb25lIG9mIHRocmVlIHdheXMuCisJICAvLyBPcmRlciB0aGVzZSB0ZXN0cyBkb25lIGluIGlzIHVuc3BlY2lmaWVkIGJ5IHRoZSBzdGFuZGFyZC4KKwkgIGNvbnN0IGJvb2wgX190ZXN0ZW9mID0gdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19yZXQpOworCSAgaWYgKCFfX3Rlc3Rlb2YpCisJICAgIHsKKwkgICAgICBjb25zdCBib29sIF9fdGVzdGVxID0gdHJhaXRzX3R5cGU6OmVxKHRyYWl0c190eXBlOjoKKwkJCQkJCSAgICB0b19jaGFyX3R5cGUoX19jKSwKKwkJCQkJCSAgICB0aGlzLT5ncHRyKClbLTFdKTsJICAKKwkgICAgICBjb25zdCBib29sIF9fdGVzdG91dCA9IHRoaXMtPl9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OworCSAgICAgIGlmIChfX3Rlc3RlcSB8fCBfX3Rlc3RvdXQpCisJCXsKKwkJICB0aGlzLT5nYnVtcCgtMSk7CisJCSAgaWYgKCFfX3Rlc3RlcSkKKwkJICAgICp0aGlzLT5ncHRyKCkgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CisJCSAgX19yZXQgPSBfX2M7CisJCX0KKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgdGhpcy0+Z2J1bXAoLTEpOworCSAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6Om5vdF9lb2YoX19jKTsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiBfX3JldDsKKyAgICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgorICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OmludF90eXBlCisgICAgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgb3ZlcmZsb3coaW50X3R5cGUgX19jKQorICAgIHsKKyAgICAgIGNvbnN0IGJvb2wgX190ZXN0b3V0ID0gdGhpcy0+X01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CisgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCghX190ZXN0b3V0LCBmYWxzZSkpCisJcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsKKworICAgICAgY29uc3QgYm9vbCBfX3Rlc3Rlb2YgPSB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCB0cmFpdHNfdHlwZTo6ZW9mKCkpOworICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX190ZXN0ZW9mLCBmYWxzZSkpCisJcmV0dXJuIHRyYWl0c190eXBlOjpub3RfZW9mKF9fYyk7CisKKyAgICAgIGNvbnN0IF9fc2l6ZV90eXBlIF9fY2FwYWNpdHkgPSBfTV9zdHJpbmcuY2FwYWNpdHkoKTsKKyAgICAgIGNvbnN0IF9fc2l6ZV90eXBlIF9fbWF4X3NpemUgPSBfTV9zdHJpbmcubWF4X3NpemUoKTsKKyAgICAgIGNvbnN0IGJvb2wgX190ZXN0cHV0ID0gdGhpcy0+cHB0cigpIDwgdGhpcy0+ZXBwdHIoKTsKKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KCFfX3Rlc3RwdXQgJiYgX19jYXBhY2l0eSA9PSBfX21heF9zaXplLCBmYWxzZSkpCisJcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsKKworICAgICAgLy8gVHJ5IHRvIGFwcGVuZCBfX2MgaW50byBvdXRwdXQgc2VxdWVuY2UgaW4gb25lIG9mIHR3byB3YXlzLgorICAgICAgLy8gT3JkZXIgdGhlc2UgdGVzdHMgZG9uZSBpbiBpcyB1bnNwZWNpZmllZCBieSB0aGUgc3RhbmRhcmQuCisgICAgICBjb25zdCBjaGFyX3R5cGUgX19jb252ID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOworICAgICAgaWYgKCFfX3Rlc3RwdXQpCisJeworCSAgLy8gTkI6IFN0YXJ0IG9zdHJpbmdzdHJlYW0gYnVmZmVycyBhdCA1MTIgY2hhcnMuICBUaGlzIGlzIGFuCisJICAvLyBleHBlcmltZW50YWwgdmFsdWUgKHByb25vdW5jZWQgImFyYml0cmFyeSIgaW4gc29tZSBvZiB0aGUKKwkgIC8vIGhpcHBlciBFbmdsaXNoLXNwZWFraW5nIGNvdW50cmllcyksIGFuZCBjYW4gYmUgY2hhbmdlZCB0bworCSAgLy8gc3VpdCBwYXJ0aWN1bGFyIG5lZWRzLgorCSAgLy8KKwkgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkgIC8vIDE2OS4gQmFkIGVmZmljaWVuY3kgb2Ygb3ZlcmZsb3coKSBtYW5kYXRlZAorCSAgLy8gNDMyLiBzdHJpbmdidWY6Om92ZXJmbG93KCkgbWFrZXMgb25seSBvbmUgd3JpdGUgcG9zaXRpb24KKwkgIC8vICAgICAgYXZhaWxhYmxlCisJICBjb25zdCBfX3NpemVfdHlwZSBfX29wdF9sZW4gPSBzdGQ6Om1heChfX3NpemVfdHlwZSgyICogX19jYXBhY2l0eSksCisJCQkJCQkgX19zaXplX3R5cGUoNTEyKSk7CisJICBjb25zdCBfX3NpemVfdHlwZSBfX2xlbiA9IHN0ZDo6bWluKF9fb3B0X2xlbiwgX19tYXhfc2l6ZSk7CisJICBfX3N0cmluZ190eXBlIF9fdG1wOworCSAgX190bXAucmVzZXJ2ZShfX2xlbik7CisJICBpZiAodGhpcy0+cGJhc2UoKSkKKwkgICAgX190bXAuYXNzaWduKHRoaXMtPnBiYXNlKCksIHRoaXMtPmVwcHRyKCkgLSB0aGlzLT5wYmFzZSgpKTsKKwkgIF9fdG1wLnB1c2hfYmFjayhfX2NvbnYpOworCSAgX01fc3RyaW5nLnN3YXAoX190bXApOworCSAgX01fc3luYyhjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9NX3N0cmluZy5kYXRhKCkpLAorCQkgIHRoaXMtPmdwdHIoKSAtIHRoaXMtPmViYWNrKCksIHRoaXMtPnBwdHIoKSAtIHRoaXMtPnBiYXNlKCkpOworCX0KKyAgICAgIGVsc2UKKwkqdGhpcy0+cHB0cigpID0gX19jb252OworICAgICAgdGhpcy0+cGJ1bXAoMSk7CisgICAgICByZXR1cm4gX19jOworICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CisgICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6aW50X3R5cGUKKyAgICBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICB1bmRlcmZsb3coKQorICAgIHsKKyAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOworICAgICAgY29uc3QgYm9vbCBfX3Rlc3RpbiA9IHRoaXMtPl9NX21vZGUgJiBpb3NfYmFzZTo6aW47CisgICAgICBpZiAoX190ZXN0aW4pCisJeworCSAgLy8gVXBkYXRlIGVncHRyKCkgdG8gbWF0Y2ggdGhlIGFjdHVhbCBzdHJpbmcgZW5kLgorCSAgX01fdXBkYXRlX2VncHRyKCk7CisKKwkgIGlmICh0aGlzLT5ncHRyKCkgPCB0aGlzLT5lZ3B0cigpKQorCSAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqdGhpcy0+Z3B0cigpKTsKKwl9CisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpwb3NfdHlwZQorICAgIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIHNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQorICAgIHsKKyAgICAgIHBvc190eXBlIF9fcmV0ID0gIHBvc190eXBlKG9mZl90eXBlKC0xKSk7CisgICAgICBib29sIF9fdGVzdGluID0gKGlvc19iYXNlOjppbiAmIHRoaXMtPl9NX21vZGUgJiBfX21vZGUpICE9IDA7CisgICAgICBib29sIF9fdGVzdG91dCA9IChpb3NfYmFzZTo6b3V0ICYgdGhpcy0+X01fbW9kZSAmIF9fbW9kZSkgIT0gMDsKKyAgICAgIGNvbnN0IGJvb2wgX190ZXN0Ym90aCA9IF9fdGVzdGluICYmIF9fdGVzdG91dCAmJiBfX3dheSAhPSBpb3NfYmFzZTo6Y3VyOworICAgICAgX190ZXN0aW4gJj0gIShfX21vZGUgJiBpb3NfYmFzZTo6b3V0KTsKKyAgICAgIF9fdGVzdG91dCAmPSAhKF9fbW9kZSAmIGlvc19iYXNlOjppbik7CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDQ1My4gYmFzaWNfc3RyaW5nYnVmOjpzZWVrb2ZmIG5lZWQgbm90IGFsd2F5cyBmYWlsIGZvciBhbiBlbXB0eSBzdHJlYW0uCisgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fYmVnID0gX190ZXN0aW4gPyB0aGlzLT5lYmFjaygpIDogdGhpcy0+cGJhc2UoKTsKKyAgICAgIGlmICgoX19iZWcgfHwgIV9fb2ZmKSAmJiAoX190ZXN0aW4gfHwgX190ZXN0b3V0IHx8IF9fdGVzdGJvdGgpKQorCXsKKwkgIF9NX3VwZGF0ZV9lZ3B0cigpOworCisJICBvZmZfdHlwZSBfX25ld29mZmkgPSBfX29mZjsKKwkgIG9mZl90eXBlIF9fbmV3b2ZmbyA9IF9fbmV3b2ZmaTsKKwkgIGlmIChfX3dheSA9PSBpb3NfYmFzZTo6Y3VyKQorCSAgICB7CisJICAgICAgX19uZXdvZmZpICs9IHRoaXMtPmdwdHIoKSAtIF9fYmVnOworCSAgICAgIF9fbmV3b2ZmbyArPSB0aGlzLT5wcHRyKCkgLSBfX2JlZzsKKwkgICAgfQorCSAgZWxzZSBpZiAoX193YXkgPT0gaW9zX2Jhc2U6OmVuZCkKKwkgICAgX19uZXdvZmZvID0gX19uZXdvZmZpICs9IHRoaXMtPmVncHRyKCkgLSBfX2JlZzsKKworCSAgaWYgKChfX3Rlc3RpbiB8fCBfX3Rlc3Rib3RoKQorCSAgICAgICYmIF9fbmV3b2ZmaSA+PSAwCisJICAgICAgJiYgdGhpcy0+ZWdwdHIoKSAtIF9fYmVnID49IF9fbmV3b2ZmaSkKKwkgICAgeworCSAgICAgIHRoaXMtPmdidW1wKChfX2JlZyArIF9fbmV3b2ZmaSkgLSB0aGlzLT5ncHRyKCkpOworCSAgICAgIF9fcmV0ID0gcG9zX3R5cGUoX19uZXdvZmZpKTsKKwkgICAgfQorCSAgaWYgKChfX3Rlc3RvdXQgfHwgX190ZXN0Ym90aCkKKwkgICAgICAmJiBfX25ld29mZm8gPj0gMAorCSAgICAgICYmIHRoaXMtPmVncHRyKCkgLSBfX2JlZyA+PSBfX25ld29mZm8pCisJICAgIHsKKwkgICAgICB0aGlzLT5wYnVtcCgoX19iZWcgKyBfX25ld29mZm8pIC0gdGhpcy0+cHB0cigpKTsKKwkgICAgICBfX3JldCA9IHBvc190eXBlKF9fbmV3b2Zmbyk7CisJICAgIH0KKwl9CisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpwb3NfdHlwZQorICAgIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIHNlZWtwb3MocG9zX3R5cGUgX19zcCwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSkKKyAgICB7CisgICAgICBwb3NfdHlwZSBfX3JldCA9ICBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOworICAgICAgY29uc3QgYm9vbCBfX3Rlc3RpbiA9IChpb3NfYmFzZTo6aW4gJiB0aGlzLT5fTV9tb2RlICYgX19tb2RlKSAhPSAwOworICAgICAgY29uc3QgYm9vbCBfX3Rlc3RvdXQgPSAoaW9zX2Jhc2U6Om91dCAmIHRoaXMtPl9NX21vZGUgJiBfX21vZGUpICE9IDA7CisKKyAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19iZWcgPSBfX3Rlc3RpbiA/IHRoaXMtPmViYWNrKCkgOiB0aGlzLT5wYmFzZSgpOworICAgICAgaWYgKChfX2JlZyB8fCAhb2ZmX3R5cGUoX19zcCkpICYmIChfX3Rlc3RpbiB8fCBfX3Rlc3RvdXQpKQorCXsKKwkgIF9NX3VwZGF0ZV9lZ3B0cigpOworCisJICBjb25zdCBvZmZfdHlwZSBfX3BvcyhfX3NwKTsKKwkgIGNvbnN0IGJvb2wgX190ZXN0cG9zID0gKDAgPD0gX19wb3MKKwkJCQkgICYmIF9fcG9zIDw9IHRoaXMtPmVncHRyKCkgLSBfX2JlZyk7CisJICBpZiAoX190ZXN0cG9zKQorCSAgICB7CisJICAgICAgaWYgKF9fdGVzdGluKQorCQl0aGlzLT5nYnVtcCgoX19iZWcgKyBfX3BvcykgLSB0aGlzLT5ncHRyKCkpOworCSAgICAgIGlmIChfX3Rlc3RvdXQpCisgICAgICAgICAgICAgICAgdGhpcy0+cGJ1bXAoKF9fYmVnICsgX19wb3MpIC0gdGhpcy0+cHB0cigpKTsKKwkgICAgICBfX3JldCA9IF9fc3A7CisJICAgIH0KKwl9CisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KKyAgICB2b2lkCisgICAgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgX01fc3luYyhjaGFyX3R5cGUqIF9fYmFzZSwgX19zaXplX3R5cGUgX19pLCBfX3NpemVfdHlwZSBfX28pCisgICAgeworICAgICAgY29uc3QgYm9vbCBfX3Rlc3RpbiA9IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47CisgICAgICBjb25zdCBib29sIF9fdGVzdG91dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OworICAgICAgY2hhcl90eXBlKiBfX2VuZGcgPSBfX2Jhc2UgKyBfTV9zdHJpbmcuc2l6ZSgpOworICAgICAgY2hhcl90eXBlKiBfX2VuZHAgPSBfX2Jhc2UgKyBfTV9zdHJpbmcuY2FwYWNpdHkoKTsKKworICAgICAgaWYgKF9fYmFzZSAhPSBfTV9zdHJpbmcuZGF0YSgpKQorCXsKKwkgIC8vIHNldGJ1ZjogX19pID09IHNpemUgb2YgYnVmZmVyIGFyZWEgKF9NX3N0cmluZy5zaXplKCkgPT0gMCkuCisJICBfX2VuZGcgKz0gX19pOworCSAgX19pID0gMDsKKwkgIF9fZW5kcCA9IF9fZW5kZzsKKwl9CisKKyAgICAgIGlmIChfX3Rlc3RpbikKKwl0aGlzLT5zZXRnKF9fYmFzZSwgX19iYXNlICsgX19pLCBfX2VuZGcpOworICAgICAgaWYgKF9fdGVzdG91dCkKKwl7CisJICB0aGlzLT5zZXRwKF9fYmFzZSwgX19lbmRwKTsKKwkgIHRoaXMtPnBidW1wKF9fbyk7CisJICAvLyBlZ3B0cigpIGFsd2F5cyB0cmFja3MgdGhlIHN0cmluZyBlbmQuICBXaGVuICFfX3Rlc3RpbiwKKwkgIC8vIGZvciB0aGUgY29ycmVjdCBmdW5jdGlvbmluZyBvZiB0aGUgc3RyZWFtYnVmIGlubGluZXMKKwkgIC8vIHRoZSBvdGhlciBnZXQgYXJlYSBwb2ludGVycyBhcmUgaWRlbnRpY2FsLgorCSAgaWYgKCFfX3Rlc3RpbikKKwkgICAgdGhpcy0+c2V0ZyhfX2VuZGcsIF9fZW5kZywgX19lbmRnKTsKKwl9CisgICAgfQorCisgIC8vIEluaGliaXQgaW1wbGljaXQgaW5zdGFudGlhdGlvbnMgZm9yIHJlcXVpcmVkIGluc3RhbnRpYXRpb25zLAorICAvLyB3aGljaCBhcmUgZGVmaW5lZCB2aWEgZXhwbGljaXQgaW5zdGFudGlhdGlvbnMgZWxzZXdoZXJlLgorICAvLyBOQjogIFRoaXMgc3ludGF4IGlzIGEgR05VIGV4dGVuc2lvbi4KKyNpZiBfR0xJQkNYWF9FWFRFUk5fVEVNUExBVEUKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmluZ2J1ZjxjaGFyPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW08Y2hhcj47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXI+OworICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyaW5nc3RyZWFtPGNoYXI+OworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmluZ2J1Zjx3Y2hhcl90PjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW08d2NoYXJfdD47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtPHdjaGFyX3Q+OworICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyaW5nc3RyZWFtPHdjaGFyX3Q+OworI2VuZGlmCisjZW5kaWYKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfYWxnby5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF9hbGdvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI0OTkxZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfYWxnby5oCkBAIC0wLDAgKzEsNjA4MiBAQAorLy8gQWxnb3JpdGhtIGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBzdGxfYWxnby5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKyNpZm5kZWYgX1NUTF9BTEdPX0gKKyNkZWZpbmUgX1NUTF9BTEdPX0ggMQorCisjaW5jbHVkZSA8Y3N0ZGxpYj4gICAgICAgICAgICAgLy8gZm9yIHJhbmQKKyNpbmNsdWRlIDxiaXRzL2FsZ29yaXRobWZ3ZC5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2hlYXAuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF90ZW1wYnVmLmg+ICAvLyBmb3IgX1RlbXBvcmFyeV9idWZmZXIKKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisjaW5jbHVkZSA8cmFuZG9tPiAvLyBmb3Igc3RkOjp1bmlmb3JtX2ludF9kaXN0cmlidXRpb24KKyNlbmRpZgorCisvLyBTZWUgY29uY2VwdF9jaGVjay5oIGZvciB0aGUgX19nbGliY3h4XypfcmVxdWlyZXMgbWFjcm9zLgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8vLyBTd2FwcyB0aGUgbWVkaWFuIHZhbHVlIG9mICpfX2EsICpfX2IgYW5kICpfX2MgdG8gKl9fYQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CisgICAgdm9pZAorICAgIF9fbW92ZV9tZWRpYW5fZmlyc3QoX0l0ZXJhdG9yIF9fYSwgX0l0ZXJhdG9yIF9fYiwgX0l0ZXJhdG9yIF9fYykKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbkNvbXBhcmFibGVDb25jZXB0PAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisKKyAgICAgIGlmICgqX19hIDwgKl9fYikKKwl7CisJICBpZiAoKl9fYiA8ICpfX2MpCisJICAgIHN0ZDo6aXRlcl9zd2FwKF9fYSwgX19iKTsKKwkgIGVsc2UgaWYgKCpfX2EgPCAqX19jKQorCSAgICBzdGQ6Oml0ZXJfc3dhcChfX2EsIF9fYyk7CisJfQorICAgICAgZWxzZSBpZiAoKl9fYSA8ICpfX2MpCisJcmV0dXJuOworICAgICAgZWxzZSBpZiAoKl9fYiA8ICpfX2MpCisJc3RkOjppdGVyX3N3YXAoX19hLCBfX2MpOworICAgICAgZWxzZQorCXN0ZDo6aXRlcl9zd2FwKF9fYSwgX19iKTsKKyAgICB9CisKKyAgLy8vIFN3YXBzIHRoZSBtZWRpYW4gdmFsdWUgb2YgKl9fYSwgKl9fYiBhbmQgKl9fYyB1bmRlciBfX2NvbXAgdG8gKl9fYQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQKKyAgICBfX21vdmVfbWVkaWFuX2ZpcnN0KF9JdGVyYXRvciBfX2EsIF9JdGVyYXRvciBfX2IsIF9JdGVyYXRvciBfX2MsCisJCQlfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5RnVuY3Rpb25Db25jZXB0PF9Db21wYXJlLCBib29sLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorCisgICAgICBpZiAoX19jb21wKCpfX2EsICpfX2IpKQorCXsKKwkgIGlmIChfX2NvbXAoKl9fYiwgKl9fYykpCisJICAgIHN0ZDo6aXRlcl9zd2FwKF9fYSwgX19iKTsKKwkgIGVsc2UgaWYgKF9fY29tcCgqX19hLCAqX19jKSkKKwkgICAgc3RkOjppdGVyX3N3YXAoX19hLCBfX2MpOworCX0KKyAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19hLCAqX19jKSkKKwlyZXR1cm47CisgICAgICBlbHNlIGlmIChfX2NvbXAoKl9fYiwgKl9fYykpCisJc3RkOjppdGVyX3N3YXAoX19hLCBfX2MpOworICAgICAgZWxzZQorCXN0ZDo6aXRlcl9zd2FwKF9fYSwgX19iKTsKKyAgICB9CisKKyAgLy8gZm9yX2VhY2gKKworICAvLy8gVGhpcyBpcyBhbiBvdmVybG9hZCB1c2VkIGJ5IGZpbmQoKSBmb3IgdGhlIElucHV0IEl0ZXJhdG9yIGNhc2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9JbnB1dEl0ZXJhdG9yCisgICAgX19maW5kKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkgICBjb25zdCBfVHAmIF9fdmFsLCBpbnB1dF9pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICEoKl9fZmlyc3QgPT0gX192YWwpKQorCSsrX19maXJzdDsKKyAgICAgIHJldHVybiBfX2ZpcnN0OworICAgIH0KKworICAvLy8gVGhpcyBpcyBhbiBvdmVybG9hZCB1c2VkIGJ5IGZpbmRfaWYoKSBmb3IgdGhlIElucHV0IEl0ZXJhdG9yIGNhc2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGlubGluZSBfSW5wdXRJdGVyYXRvcgorICAgIF9fZmluZF9pZihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGlucHV0X2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgIWJvb2woX19wcmVkKCpfX2ZpcnN0KSkpCisJKytfX2ZpcnN0OworICAgICAgcmV0dXJuIF9fZmlyc3Q7CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGFuIG92ZXJsb2FkIHVzZWQgYnkgZmluZCgpIGZvciB0aGUgUkFJIGNhc2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgorICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcgorICAgIF9fZmluZChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKKwkgICBjb25zdCBfVHAmIF9fdmFsLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCisJX190cmlwX2NvdW50ID0gKF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7CisKKyAgICAgIGZvciAoOyBfX3RyaXBfY291bnQgPiAwOyAtLV9fdHJpcF9jb3VudCkKKwl7CisJICBpZiAoKl9fZmlyc3QgPT0gX192YWwpCisJICAgIHJldHVybiBfX2ZpcnN0OworCSAgKytfX2ZpcnN0OworCisJICBpZiAoKl9fZmlyc3QgPT0gX192YWwpCisJICAgIHJldHVybiBfX2ZpcnN0OworCSAgKytfX2ZpcnN0OworCisJICBpZiAoKl9fZmlyc3QgPT0gX192YWwpCisJICAgIHJldHVybiBfX2ZpcnN0OworCSAgKytfX2ZpcnN0OworCisJICBpZiAoKl9fZmlyc3QgPT0gX192YWwpCisJICAgIHJldHVybiBfX2ZpcnN0OworCSAgKytfX2ZpcnN0OworCX0KKworICAgICAgc3dpdGNoIChfX2xhc3QgLSBfX2ZpcnN0KQorCXsKKwljYXNlIDM6CisJICBpZiAoKl9fZmlyc3QgPT0gX192YWwpCisJICAgIHJldHVybiBfX2ZpcnN0OworCSAgKytfX2ZpcnN0OworCWNhc2UgMjoKKwkgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkKKwkgICAgcmV0dXJuIF9fZmlyc3Q7CisJICArK19fZmlyc3Q7CisJY2FzZSAxOgorCSAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKQorCSAgICByZXR1cm4gX19maXJzdDsKKwkgICsrX19maXJzdDsKKwljYXNlIDA6CisJZGVmYXVsdDoKKwkgIHJldHVybiBfX2xhc3Q7CisJfQorICAgIH0KKworICAvLy8gVGhpcyBpcyBhbiBvdmVybG9hZCB1c2VkIGJ5IGZpbmRfaWYoKSBmb3IgdGhlIFJBSSBjYXNlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yCisgICAgX19maW5kX2lmKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAorCSAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCisJX190cmlwX2NvdW50ID0gKF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7CisKKyAgICAgIGZvciAoOyBfX3RyaXBfY291bnQgPiAwOyAtLV9fdHJpcF9jb3VudCkKKwl7CisJICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKKwkgICAgcmV0dXJuIF9fZmlyc3Q7CisJICArK19fZmlyc3Q7CisKKwkgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQorCSAgICByZXR1cm4gX19maXJzdDsKKwkgICsrX19maXJzdDsKKworCSAgaWYgKF9fcHJlZCgqX19maXJzdCkpCisJICAgIHJldHVybiBfX2ZpcnN0OworCSAgKytfX2ZpcnN0OworCisJICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKKwkgICAgcmV0dXJuIF9fZmlyc3Q7CisJICArK19fZmlyc3Q7CisJfQorCisgICAgICBzd2l0Y2ggKF9fbGFzdCAtIF9fZmlyc3QpCisJeworCWNhc2UgMzoKKwkgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQorCSAgICByZXR1cm4gX19maXJzdDsKKwkgICsrX19maXJzdDsKKwljYXNlIDI6CisJICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKKwkgICAgcmV0dXJuIF9fZmlyc3Q7CisJICArK19fZmlyc3Q7CisJY2FzZSAxOgorCSAgaWYgKF9fcHJlZCgqX19maXJzdCkpCisJICAgIHJldHVybiBfX2ZpcnN0OworCSAgKytfX2ZpcnN0OworCWNhc2UgMDoKKwlkZWZhdWx0OgorCSAgcmV0dXJuIF9fbGFzdDsKKwl9CisgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgLy8vIFRoaXMgaXMgYW4gb3ZlcmxvYWQgdXNlZCBieSBmaW5kX2lmX25vdCgpIGZvciB0aGUgSW5wdXQgSXRlcmF0b3IgY2FzZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgaW5saW5lIF9JbnB1dEl0ZXJhdG9yCisgICAgX19maW5kX2lmX25vdChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCSAgX1ByZWRpY2F0ZSBfX3ByZWQsIGlucHV0X2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgYm9vbChfX3ByZWQoKl9fZmlyc3QpKSkKKwkrK19fZmlyc3Q7CisgICAgICByZXR1cm4gX19maXJzdDsKKyAgICB9CisKKyAgLy8vIFRoaXMgaXMgYW4gb3ZlcmxvYWQgdXNlZCBieSBmaW5kX2lmX25vdCgpIGZvciB0aGUgUkFJIGNhc2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IKKyAgICBfX2ZpbmRfaWZfbm90KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAorCQkgIF9QcmVkaWNhdGUgX19wcmVkLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCisJX190cmlwX2NvdW50ID0gKF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7CisKKyAgICAgIGZvciAoOyBfX3RyaXBfY291bnQgPiAwOyAtLV9fdHJpcF9jb3VudCkKKwl7CisJICBpZiAoIWJvb2woX19wcmVkKCpfX2ZpcnN0KSkpCisJICAgIHJldHVybiBfX2ZpcnN0OworCSAgKytfX2ZpcnN0OworCisJICBpZiAoIWJvb2woX19wcmVkKCpfX2ZpcnN0KSkpCisJICAgIHJldHVybiBfX2ZpcnN0OworCSAgKytfX2ZpcnN0OworCisJICBpZiAoIWJvb2woX19wcmVkKCpfX2ZpcnN0KSkpCisJICAgIHJldHVybiBfX2ZpcnN0OworCSAgKytfX2ZpcnN0OworCisJICBpZiAoIWJvb2woX19wcmVkKCpfX2ZpcnN0KSkpCisJICAgIHJldHVybiBfX2ZpcnN0OworCSAgKytfX2ZpcnN0OworCX0KKworICAgICAgc3dpdGNoIChfX2xhc3QgLSBfX2ZpcnN0KQorCXsKKwljYXNlIDM6CisJICBpZiAoIWJvb2woX19wcmVkKCpfX2ZpcnN0KSkpCisJICAgIHJldHVybiBfX2ZpcnN0OworCSAgKytfX2ZpcnN0OworCWNhc2UgMjoKKwkgIGlmICghYm9vbChfX3ByZWQoKl9fZmlyc3QpKSkKKwkgICAgcmV0dXJuIF9fZmlyc3Q7CisJICArK19fZmlyc3Q7CisJY2FzZSAxOgorCSAgaWYgKCFib29sKF9fcHJlZCgqX19maXJzdCkpKQorCSAgICByZXR1cm4gX19maXJzdDsKKwkgICsrX19maXJzdDsKKwljYXNlIDA6CisJZGVmYXVsdDoKKwkgIHJldHVybiBfX2xhc3Q7CisJfQorICAgIH0KKyNlbmRpZgorCisgIC8vIHNldF9kaWZmZXJlbmNlCisgIC8vIHNldF9pbnRlcnNlY3Rpb24KKyAgLy8gc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlCisgIC8vIHNldF91bmlvbgorICAvLyBmb3JfZWFjaAorICAvLyBmaW5kCisgIC8vIGZpbmRfaWYKKyAgLy8gZmluZF9maXJzdF9vZgorICAvLyBhZGphY2VudF9maW5kCisgIC8vIGNvdW50CisgIC8vIGNvdW50X2lmCisgIC8vIHNlYXJjaAorCisgIC8qKgorICAgKiAgVGhpcyBpcyBhbiB1Z2xpZmllZAorICAgKiAgc2VhcmNoX24oX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwgX0ludGVnZXIsIGNvbnN0IF9UcCYpCisgICAqICBvdmVybG9hZGVkIGZvciBmb3J3YXJkIGl0ZXJhdG9ycy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1lIF9UcD4KKyAgICBfRm9yd2FyZEl0ZXJhdG9yCisgICAgX19zZWFyY2hfbihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCSAgICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsLAorCSAgICAgICBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIF9fZmlyc3QgPSBfR0xJQkNYWF9TVERfUDo6ZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKKyAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwl7CisJICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorCSAgICBfX24gPSBfX2NvdW50OworCSAgX0ZvcndhcmRJdGVyYXRvciBfX2kgPSBfX2ZpcnN0OworCSAgKytfX2k7CisJICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24gIT0gMSAmJiAqX19pID09IF9fdmFsKQorCSAgICB7CisJICAgICAgKytfX2k7CisJICAgICAgLS1fX247CisJICAgIH0KKwkgIGlmIChfX24gPT0gMSkKKwkgICAgcmV0dXJuIF9fZmlyc3Q7CisJICBpZiAoX19pID09IF9fbGFzdCkKKwkgICAgcmV0dXJuIF9fbGFzdDsKKwkgIF9fZmlyc3QgPSBfR0xJQkNYWF9TVERfUDo6ZmluZCgrK19faSwgX19sYXN0LCBfX3ZhbCk7CisJfQorICAgICAgcmV0dXJuIF9fbGFzdDsKKyAgICB9CisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIHVnbGlmaWVkCisgICAqICBzZWFyY2hfbihfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9yLCBfSW50ZWdlciwgY29uc3QgX1RwJikKKyAgICogIG92ZXJsb2FkZWQgZm9yIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1lIF9UcD4KKyAgICBfUmFuZG9tQWNjZXNzSXRlcgorICAgIF9fc2VhcmNoX24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAorCSAgICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsLCAKKwkgICAgICAgc3RkOjpyYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICAKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKKwlfRGlzdGFuY2VUeXBlOworCisgICAgICBfRGlzdGFuY2VUeXBlIF9fdGFpbFNpemUgPSBfX2xhc3QgLSBfX2ZpcnN0OworICAgICAgY29uc3QgX0Rpc3RhbmNlVHlwZSBfX3BhdHRTaXplID0gX19jb3VudDsKKworICAgICAgaWYgKF9fdGFpbFNpemUgPCBfX3BhdHRTaXplKQorICAgICAgICByZXR1cm4gX19sYXN0OworCisgICAgICBjb25zdCBfRGlzdGFuY2VUeXBlIF9fc2tpcE9mZnNldCA9IF9fcGF0dFNpemUgLSAxOworICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sb29rQWhlYWQgPSBfX2ZpcnN0ICsgX19za2lwT2Zmc2V0OworICAgICAgX190YWlsU2l6ZSAtPSBfX3BhdHRTaXplOworCisgICAgICB3aGlsZSAoMSkgLy8gdGhlIG1haW4gbG9vcC4uLgorCXsKKwkgIC8vIF9fbG9va0FoZWFkIGhlcmUgaXMgYWx3YXlzIHBvaW50aW5nIHRvIHRoZSBsYXN0IGVsZW1lbnQgb2YgbmV4dCAKKwkgIC8vIHBvc3NpYmxlIG1hdGNoLgorCSAgd2hpbGUgKCEoKl9fbG9va0FoZWFkID09IF9fdmFsKSkgLy8gdGhlIHNraXAgbG9vcC4uLgorCSAgICB7CisJICAgICAgaWYgKF9fdGFpbFNpemUgPCBfX3BhdHRTaXplKQorCQlyZXR1cm4gX19sYXN0OyAgLy8gRmFpbHVyZQorCSAgICAgIF9fbG9va0FoZWFkICs9IF9fcGF0dFNpemU7CisJICAgICAgX190YWlsU2l6ZSAtPSBfX3BhdHRTaXplOworCSAgICB9CisJICBfRGlzdGFuY2VUeXBlIF9fcmVtYWluZGVyID0gX19za2lwT2Zmc2V0OworCSAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2JhY2tUcmFjayA9IF9fbG9va0FoZWFkIC0gMTsgCisJICAgICAgICpfX2JhY2tUcmFjayA9PSBfX3ZhbDsgLS1fX2JhY2tUcmFjaykKKwkgICAgeworCSAgICAgIGlmICgtLV9fcmVtYWluZGVyID09IDApCisJCXJldHVybiAoX19sb29rQWhlYWQgLSBfX3NraXBPZmZzZXQpOyAvLyBTdWNjZXNzCisJICAgIH0KKwkgIGlmIChfX3JlbWFpbmRlciA+IF9fdGFpbFNpemUpCisJICAgIHJldHVybiBfX2xhc3Q7IC8vIEZhaWx1cmUKKwkgIF9fbG9va0FoZWFkICs9IF9fcmVtYWluZGVyOworCSAgX190YWlsU2l6ZSAtPSBfX3JlbWFpbmRlcjsKKwl9CisgICAgfQorCisgIC8vIHNlYXJjaF9uCisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIHVnbGlmaWVkCisgICAqICBzZWFyY2hfbihfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9yLCBfSW50ZWdlciwgY29uc3QgX1RwJiwKKyAgICoJICAgICAgIF9CaW5hcnlQcmVkaWNhdGUpCisgICAqICBvdmVybG9hZGVkIGZvciBmb3J3YXJkIGl0ZXJhdG9ycy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1lIF9UcCwKKyAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KKyAgICBfRm9yd2FyZEl0ZXJhdG9yCisgICAgX19zZWFyY2hfbihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCSAgICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsLAorCSAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFib29sKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkpCisgICAgICAgICsrX19maXJzdDsKKworICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQorCXsKKwkgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCisJICAgIF9fbiA9IF9fY291bnQ7CisJICBfRm9yd2FyZEl0ZXJhdG9yIF9faSA9IF9fZmlyc3Q7CisJICArK19faTsKKwkgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAxICYmIGJvb2woX19iaW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkpKQorCSAgICB7CisJICAgICAgKytfX2k7CisJICAgICAgLS1fX247CisJICAgIH0KKwkgIGlmIChfX24gPT0gMSkKKwkgICAgcmV0dXJuIF9fZmlyc3Q7CisJICBpZiAoX19pID09IF9fbGFzdCkKKwkgICAgcmV0dXJuIF9fbGFzdDsKKwkgIF9fZmlyc3QgPSArK19faTsKKwkgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdAorCQkgJiYgIWJvb2woX19iaW5hcnlfcHJlZCgqX19maXJzdCwgX192YWwpKSkKKwkgICAgKytfX2ZpcnN0OworCX0KKyAgICAgIHJldHVybiBfX2xhc3Q7CisgICAgfQorCisgIC8qKgorICAgKiAgVGhpcyBpcyBhbiB1Z2xpZmllZAorICAgKiAgc2VhcmNoX24oX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwgX0ludGVnZXIsIGNvbnN0IF9UcCYsCisgICAqCSAgICAgICBfQmluYXJ5UHJlZGljYXRlKQorICAgKiAgb3ZlcmxvYWRlZCBmb3IgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX1RwLAorCSAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgX1JhbmRvbUFjY2Vzc0l0ZXIKKyAgICBfX3NlYXJjaF9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKKwkgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3ZhbCwKKwkgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLCBzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZQorCV9EaXN0YW5jZVR5cGU7CisKKyAgICAgIF9EaXN0YW5jZVR5cGUgX190YWlsU2l6ZSA9IF9fbGFzdCAtIF9fZmlyc3Q7CisgICAgICBjb25zdCBfRGlzdGFuY2VUeXBlIF9fcGF0dFNpemUgPSBfX2NvdW50OworCisgICAgICBpZiAoX190YWlsU2l6ZSA8IF9fcGF0dFNpemUpCisgICAgICAgIHJldHVybiBfX2xhc3Q7CisKKyAgICAgIGNvbnN0IF9EaXN0YW5jZVR5cGUgX19za2lwT2Zmc2V0ID0gX19wYXR0U2l6ZSAtIDE7CisgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xvb2tBaGVhZCA9IF9fZmlyc3QgKyBfX3NraXBPZmZzZXQ7CisgICAgICBfX3RhaWxTaXplIC09IF9fcGF0dFNpemU7CisKKyAgICAgIHdoaWxlICgxKSAvLyB0aGUgbWFpbiBsb29wLi4uCisJeworCSAgLy8gX19sb29rQWhlYWQgaGVyZSBpcyBhbHdheXMgcG9pbnRpbmcgdG8gdGhlIGxhc3QgZWxlbWVudCBvZiBuZXh0IAorCSAgLy8gcG9zc2libGUgbWF0Y2guCisJICB3aGlsZSAoIWJvb2woX19iaW5hcnlfcHJlZCgqX19sb29rQWhlYWQsIF9fdmFsKSkpIC8vIHRoZSBza2lwIGxvb3AuLi4KKwkgICAgeworCSAgICAgIGlmIChfX3RhaWxTaXplIDwgX19wYXR0U2l6ZSkKKwkJcmV0dXJuIF9fbGFzdDsgIC8vIEZhaWx1cmUKKwkgICAgICBfX2xvb2tBaGVhZCArPSBfX3BhdHRTaXplOworCSAgICAgIF9fdGFpbFNpemUgLT0gX19wYXR0U2l6ZTsKKwkgICAgfQorCSAgX0Rpc3RhbmNlVHlwZSBfX3JlbWFpbmRlciA9IF9fc2tpcE9mZnNldDsKKwkgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19iYWNrVHJhY2sgPSBfX2xvb2tBaGVhZCAtIDE7IAorCSAgICAgICBfX2JpbmFyeV9wcmVkKCpfX2JhY2tUcmFjaywgX192YWwpOyAtLV9fYmFja1RyYWNrKQorCSAgICB7CisJICAgICAgaWYgKC0tX19yZW1haW5kZXIgPT0gMCkKKwkJcmV0dXJuIChfX2xvb2tBaGVhZCAtIF9fc2tpcE9mZnNldCk7IC8vIFN1Y2Nlc3MKKwkgICAgfQorCSAgaWYgKF9fcmVtYWluZGVyID4gX190YWlsU2l6ZSkKKwkgICAgcmV0dXJuIF9fbGFzdDsgLy8gRmFpbHVyZQorCSAgX19sb29rQWhlYWQgKz0gX19yZW1haW5kZXI7CisJICBfX3RhaWxTaXplIC09IF9fcmVtYWluZGVyOworCX0KKyAgICB9CisKKyAgLy8gZmluZF9lbmQgZm9yIGZvcndhcmQgaXRlcmF0b3JzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcjI+CisgICAgX0ZvcndhcmRJdGVyYXRvcjEKKyAgICBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcmF0b3IxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXJhdG9yMSBfX2xhc3QxLAorCSAgICAgICBfRm9yd2FyZEl0ZXJhdG9yMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyYXRvcjIgX19sYXN0MiwKKwkgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQorCXJldHVybiBfX2xhc3QxOworICAgICAgZWxzZQorCXsKKwkgIF9Gb3J3YXJkSXRlcmF0b3IxIF9fcmVzdWx0ID0gX19sYXN0MTsKKwkgIHdoaWxlICgxKQorCSAgICB7CisJICAgICAgX0ZvcndhcmRJdGVyYXRvcjEgX19uZXdfcmVzdWx0CisJCT0gX0dMSUJDWFhfU1REX1A6OnNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOworCSAgICAgIGlmIChfX25ld19yZXN1bHQgPT0gX19sYXN0MSkKKwkJcmV0dXJuIF9fcmVzdWx0OworCSAgICAgIGVsc2UKKwkJeworCQkgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0OworCQkgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OworCQkgICsrX19maXJzdDE7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IyLAorCSAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgX0ZvcndhcmRJdGVyYXRvcjEKKyAgICBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcmF0b3IxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXJhdG9yMSBfX2xhc3QxLAorCSAgICAgICBfRm9yd2FyZEl0ZXJhdG9yMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyYXRvcjIgX19sYXN0MiwKKwkgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnLAorCSAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKKyAgICB7CisgICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKKwlyZXR1cm4gX19sYXN0MTsKKyAgICAgIGVsc2UKKwl7CisJICBfRm9yd2FyZEl0ZXJhdG9yMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CisJICB3aGlsZSAoMSkKKwkgICAgeworCSAgICAgIF9Gb3J3YXJkSXRlcmF0b3IxIF9fbmV3X3Jlc3VsdAorCQk9IF9HTElCQ1hYX1NURF9QOjpzZWFyY2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLAorCQkJCQkgX19sYXN0MiwgX19jb21wKTsKKwkgICAgICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpCisJCXJldHVybiBfX3Jlc3VsdDsKKwkgICAgICBlbHNlCisJCXsKKwkJICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKKwkJICBfX2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKKwkJICArK19fZmlyc3QxOworCQl9CisJICAgIH0KKwl9CisgICAgfQorCisgIC8vIGZpbmRfZW5kIGZvciBiaWRpcmVjdGlvbmFsIGl0ZXJhdG9ycyAobXVjaCBmYXN0ZXIpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjI+CisgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjEKKyAgICBfX2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IxIF9fZmlyc3QxLAorCSAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMSBfX2xhc3QxLAorCSAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMiBfX2ZpcnN0MiwKKwkgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjIgX19sYXN0MiwKKwkgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpZGlyZWN0aW9uYWxJdGVyYXRvckNvbmNlcHQ8CisJCQkJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpZGlyZWN0aW9uYWxJdGVyYXRvckNvbmNlcHQ8CisJCQkJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMj4pCisKKyAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMT4gX1Jldkl0ZXJhdG9yMTsKKyAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMj4gX1Jldkl0ZXJhdG9yMjsKKworICAgICAgX1Jldkl0ZXJhdG9yMSBfX3JsYXN0MShfX2ZpcnN0MSk7CisgICAgICBfUmV2SXRlcmF0b3IyIF9fcmxhc3QyKF9fZmlyc3QyKTsKKyAgICAgIF9SZXZJdGVyYXRvcjEgX19ycmVzdWx0ID0gX0dMSUJDWFhfU1REX1A6OnNlYXJjaChfUmV2SXRlcmF0b3IxKF9fbGFzdDEpLAorCQkJCQkJICAgICAgIF9fcmxhc3QxLAorCQkJCQkJICAgICAgIF9SZXZJdGVyYXRvcjIoX19sYXN0MiksCisJCQkJCQkgICAgICAgX19ybGFzdDIpOworCisgICAgICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQorCXJldHVybiBfX2xhc3QxOworICAgICAgZWxzZQorCXsKKwkgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IxIF9fcmVzdWx0ID0gX19ycmVzdWx0LmJhc2UoKTsKKwkgIHN0ZDo6YWR2YW5jZShfX3Jlc3VsdCwgLXN0ZDo6ZGlzdGFuY2UoX19maXJzdDIsIF9fbGFzdDIpKTsKKwkgIHJldHVybiBfX3Jlc3VsdDsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMiwKKwkgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgorICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IxCisgICAgX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMSBfX2ZpcnN0MSwKKwkgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjEgX19sYXN0MSwKKwkgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjIgX19maXJzdDIsCisJICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IyIF9fbGFzdDIsCisJICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywKKwkgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IyPikKKworICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IxPiBfUmV2SXRlcmF0b3IxOworICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IyPiBfUmV2SXRlcmF0b3IyOworCisgICAgICBfUmV2SXRlcmF0b3IxIF9fcmxhc3QxKF9fZmlyc3QxKTsKKyAgICAgIF9SZXZJdGVyYXRvcjIgX19ybGFzdDIoX19maXJzdDIpOworICAgICAgX1Jldkl0ZXJhdG9yMSBfX3JyZXN1bHQgPSBzdGQ6OnNlYXJjaChfUmV2SXRlcmF0b3IxKF9fbGFzdDEpLCBfX3JsYXN0MSwKKwkJCQkJICAgIF9SZXZJdGVyYXRvcjIoX19sYXN0MiksIF9fcmxhc3QyLAorCQkJCQkgICAgX19jb21wKTsKKworICAgICAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKKwlyZXR1cm4gX19sYXN0MTsKKyAgICAgIGVsc2UKKwl7CisJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMSBfX3Jlc3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7CisJICBzdGQ6OmFkdmFuY2UoX19yZXN1bHQsIC1zdGQ6OmRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CisJICByZXR1cm4gX19yZXN1bHQ7CisJfQorICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgRmluZCBsYXN0IG1hdGNoaW5nIHN1YnNlcXVlbmNlIGluIGEgc2VxdWVuY2UuCisgICAqICBAaW5ncm91cCBub25fbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdDEgIFN0YXJ0IG9mIHJhbmdlIHRvIHNlYXJjaC4KKyAgICogIEBwYXJhbSAgbGFzdDEgICBFbmQgb2YgcmFuZ2UgdG8gc2VhcmNoLgorICAgKiAgQHBhcmFtICBmaXJzdDIgIFN0YXJ0IG9mIHNlcXVlbmNlIHRvIG1hdGNoLgorICAgKiAgQHBhcmFtICBsYXN0MiAgIEVuZCBvZiBzZXF1ZW5jZSB0byBtYXRjaC4KKyAgICogIEByZXR1cm4gICBUaGUgbGFzdCBpdGVyYXRvciBAYyBpIGluIHRoZSByYW5nZQorICAgKiAgQHAgW2ZpcnN0MSxsYXN0MS0obGFzdDItZmlyc3QyKSkgc3VjaCB0aGF0IEBjICooaStOKSA9PSBAcCAqKGZpcnN0MitOKQorICAgKiAgZm9yIGVhY2ggQGMgTiBpbiB0aGUgcmFuZ2UgQHAgWzAsbGFzdDItZmlyc3QyKSwgb3IgQHAgbGFzdDEgaWYgbm8KKyAgICogIHN1Y2ggaXRlcmF0b3IgZXhpc3RzLgorICAgKgorICAgKiAgU2VhcmNoZXMgdGhlIHJhbmdlIEBwIFtmaXJzdDEsbGFzdDEpIGZvciBhIHN1Yi1zZXF1ZW5jZSB0aGF0IGNvbXBhcmVzCisgICAqICBlcXVhbCB2YWx1ZS1ieS12YWx1ZSB3aXRoIHRoZSBzZXF1ZW5jZSBnaXZlbiBieSBAcCBbZmlyc3QyLGxhc3QyKSBhbmQKKyAgICogIHJldHVybnMgYW4gaXRlcmF0b3IgdG8gdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIHN1Yi1zZXF1ZW5jZSwgb3IKKyAgICogIEBwIGxhc3QxIGlmIHRoZSBzdWItc2VxdWVuY2UgaXMgbm90IGZvdW5kLiAgVGhlIHN1Yi1zZXF1ZW5jZSB3aWxsIGJlIHRoZQorICAgKiAgbGFzdCBzdWNoIHN1YnNlcXVlbmNlIGNvbnRhaW5lZCBpbiBbZmlyc3QsbGFzdDEpLgorICAgKgorICAgKiAgQmVjYXVzZSB0aGUgc3ViLXNlcXVlbmNlIG11c3QgbGllIGNvbXBsZXRlbHkgd2l0aGluIHRoZSByYW5nZQorICAgKiAgQHAgW2ZpcnN0MSxsYXN0MSkgaXQgbXVzdCBzdGFydCBhdCBhIHBvc2l0aW9uIGxlc3MgdGhhbgorICAgKiAgQHAgbGFzdDEtKGxhc3QyLWZpcnN0Mikgd2hlcmUgQHAgbGFzdDItZmlyc3QyIGlzIHRoZSBsZW5ndGggb2YgdGhlCisgICAqICBzdWItc2VxdWVuY2UuCisgICAqICBUaGlzIG1lYW5zIHRoYXQgdGhlIHJldHVybmVkIGl0ZXJhdG9yIEBjIGkgd2lsbCBiZSBpbiB0aGUgcmFuZ2UKKyAgICogIEBwIFtmaXJzdDEsbGFzdDEtKGxhc3QyLWZpcnN0MikpCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yMj4KKyAgICBpbmxpbmUgX0ZvcndhcmRJdGVyYXRvcjEKKyAgICBmaW5kX2VuZChfRm9yd2FyZEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyYXRvcjEgX19sYXN0MSwKKwkgICAgIF9Gb3J3YXJkSXRlcmF0b3IyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXJhdG9yMiBfX2xhc3QyKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcjE+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3IyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRXF1YWxPcENvbmNlcHQ8CisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yMT46OnZhbHVlX3R5cGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yMj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QxLCBfX2xhc3QxKTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MiwgX19sYXN0Mik7CisKKyAgICAgIHJldHVybiBzdGQ6Ol9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAorCQkJICAgICBzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAorCQkJICAgICBzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIEZpbmQgbGFzdCBtYXRjaGluZyBzdWJzZXF1ZW5jZSBpbiBhIHNlcXVlbmNlIHVzaW5nIGEgcHJlZGljYXRlLgorICAgKiAgQGluZ3JvdXAgbm9uX211dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QxICBTdGFydCBvZiByYW5nZSB0byBzZWFyY2guCisgICAqICBAcGFyYW0gIGxhc3QxICAgRW5kIG9mIHJhbmdlIHRvIHNlYXJjaC4KKyAgICogIEBwYXJhbSAgZmlyc3QyICBTdGFydCBvZiBzZXF1ZW5jZSB0byBtYXRjaC4KKyAgICogIEBwYXJhbSAgbGFzdDIgICBFbmQgb2Ygc2VxdWVuY2UgdG8gbWF0Y2guCisgICAqICBAcGFyYW0gIGNvbXAgICAgVGhlIHByZWRpY2F0ZSB0byB1c2UuCisgICAqICBAcmV0dXJuICAgVGhlIGxhc3QgaXRlcmF0b3IgQGMgaSBpbiB0aGUgcmFuZ2UKKyAgICogIEBwIFtmaXJzdDEsbGFzdDEtKGxhc3QyLWZpcnN0MikpIHN1Y2ggdGhhdCBAYyBwcmVkaWNhdGUoKihpK04pLCBAcAorICAgKiAgKGZpcnN0MitOKSkgaXMgdHJ1ZSBmb3IgZWFjaCBAYyBOIGluIHRoZSByYW5nZSBAcCBbMCxsYXN0Mi1maXJzdDIpLCBvcgorICAgKiAgQHAgbGFzdDEgaWYgbm8gc3VjaCBpdGVyYXRvciBleGlzdHMuCisgICAqCisgICAqICBTZWFyY2hlcyB0aGUgcmFuZ2UgQHAgW2ZpcnN0MSxsYXN0MSkgZm9yIGEgc3ViLXNlcXVlbmNlIHRoYXQgY29tcGFyZXMKKyAgICogIGVxdWFsIHZhbHVlLWJ5LXZhbHVlIHdpdGggdGhlIHNlcXVlbmNlIGdpdmVuIGJ5IEBwIFtmaXJzdDIsbGFzdDIpIHVzaW5nCisgICAqICBjb21wIGFzIGEgcHJlZGljYXRlIGFuZCByZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZQorICAgKiAgc3ViLXNlcXVlbmNlLCBvciBAcCBsYXN0MSBpZiB0aGUgc3ViLXNlcXVlbmNlIGlzIG5vdCBmb3VuZC4gIFRoZQorICAgKiAgc3ViLXNlcXVlbmNlIHdpbGwgYmUgdGhlIGxhc3Qgc3VjaCBzdWJzZXF1ZW5jZSBjb250YWluZWQgaW4KKyAgICogIFtmaXJzdCxsYXN0MSkuCisgICAqCisgICAqICBCZWNhdXNlIHRoZSBzdWItc2VxdWVuY2UgbXVzdCBsaWUgY29tcGxldGVseSB3aXRoaW4gdGhlIHJhbmdlCisgICAqICBAcCBbZmlyc3QxLGxhc3QxKSBpdCBtdXN0IHN0YXJ0IGF0IGEgcG9zaXRpb24gbGVzcyB0aGFuCisgICAqICBAcCBsYXN0MS0obGFzdDItZmlyc3QyKSB3aGVyZSBAcCBsYXN0Mi1maXJzdDIgaXMgdGhlIGxlbmd0aCBvZiB0aGUKKyAgICogIHN1Yi1zZXF1ZW5jZS4KKyAgICogIFRoaXMgbWVhbnMgdGhhdCB0aGUgcmV0dXJuZWQgaXRlcmF0b3IgQGMgaSB3aWxsIGJlIGluIHRoZSByYW5nZQorICAgKiAgQHAgW2ZpcnN0MSxsYXN0MS0obGFzdDItZmlyc3QyKSkKKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IyLAorCSAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgaW5saW5lIF9Gb3J3YXJkSXRlcmF0b3IxCisgICAgZmluZF9lbmQoX0ZvcndhcmRJdGVyYXRvcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcmF0b3IxIF9fbGFzdDEsCisJICAgICBfRm9yd2FyZEl0ZXJhdG9yMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyYXRvcjIgX19sYXN0MiwKKwkgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcjE+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3IyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQmluYXJ5UHJlZGljYXRlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcjE+Ojp2YWx1ZV90eXBlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcjI+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MSwgX19sYXN0MSk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdDIsIF9fbGFzdDIpOworCisgICAgICByZXR1cm4gc3RkOjpfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKKwkJCSAgICAgc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKKwkJCSAgICAgc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSwKKwkJCSAgICAgX19jb21wKTsKKyAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAvKioKKyAgICogIEBicmllZiAgQ2hlY2tzIHRoYXQgYSBwcmVkaWNhdGUgaXMgdHJ1ZSBmb3IgYWxsIHRoZSBlbGVtZW50cworICAgKiAgICAgICAgICBvZiBhIHNlcXVlbmNlLgorICAgKiAgQGluZ3JvdXAgbm9uX211dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgcHJlZCAgICBBIHByZWRpY2F0ZS4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgdGhlIGNoZWNrIGlzIHRydWUsIGZhbHNlIG90aGVyd2lzZS4KKyAgICoKKyAgICogIFJldHVybnMgdHJ1ZSBpZiBAcCBwcmVkIGlzIHRydWUgZm9yIGVhY2ggZWxlbWVudCBpbiB0aGUgcmFuZ2UKKyAgICogIEBwIFtmaXJzdCxsYXN0KSwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBhbGxfb2YoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCkKKyAgICB7IHJldHVybiBfX2xhc3QgPT0gc3RkOjpmaW5kX2lmX25vdChfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7IH0KKworICAvKioKKyAgICogIEBicmllZiAgQ2hlY2tzIHRoYXQgYSBwcmVkaWNhdGUgaXMgZmFsc2UgZm9yIGFsbCB0aGUgZWxlbWVudHMKKyAgICogICAgICAgICAgb2YgYSBzZXF1ZW5jZS4KKyAgICogIEBpbmdyb3VwIG5vbl9tdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGZpcnN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QgICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIHByZWQgICAgQSBwcmVkaWNhdGUuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIHRoZSBjaGVjayBpcyB0cnVlLCBmYWxzZSBvdGhlcndpc2UuCisgICAqCisgICAqICBSZXR1cm5zIHRydWUgaWYgQHAgcHJlZCBpcyBmYWxzZSBmb3IgZWFjaCBlbGVtZW50IGluIHRoZSByYW5nZQorICAgKiAgQHAgW2ZpcnN0LGxhc3QpLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG5vbmVfb2YoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCkKKyAgICB7IHJldHVybiBfX2xhc3QgPT0gX0dMSUJDWFhfU1REX1A6OmZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIENoZWNrcyB0aGF0IGEgcHJlZGljYXRlIGlzIGZhbHNlIGZvciBhdCBsZWFzdCBhbiBlbGVtZW50CisgICAqICAgICAgICAgIG9mIGEgc2VxdWVuY2UuCisgICAqICBAaW5ncm91cCBub25fbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0ICAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBwcmVkICAgIEEgcHJlZGljYXRlLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiB0aGUgY2hlY2sgaXMgdHJ1ZSwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKgorICAgKiAgUmV0dXJucyB0cnVlIGlmIGFuIGVsZW1lbnQgZXhpc3RzIGluIHRoZSByYW5nZSBAcCBbZmlyc3QsbGFzdCkgc3VjaCB0aGF0CisgICAqICBAcCBwcmVkIGlzIHRydWUsIGFuZCBmYWxzZSBvdGhlcndpc2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGlubGluZSBib29sCisgICAgYW55X29mKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCisgICAgeyByZXR1cm4gIXN0ZDo6bm9uZV9vZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7IH0KKworICAvKioKKyAgICogIEBicmllZiAgRmluZCB0aGUgZmlyc3QgZWxlbWVudCBpbiBhIHNlcXVlbmNlIGZvciB3aGljaCBhCisgICAqICAgICAgICAgIHByZWRpY2F0ZSBpcyBmYWxzZS4KKyAgICogIEBpbmdyb3VwIG5vbl9tdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGZpcnN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBwcmVkICAgQSBwcmVkaWNhdGUuCisgICAqICBAcmV0dXJuICAgVGhlIGZpcnN0IGl0ZXJhdG9yIEBjIGkgaW4gdGhlIHJhbmdlIEBwIFtmaXJzdCxsYXN0KQorICAgKiAgc3VjaCB0aGF0IEBwIHByZWQoKmkpIGlzIGZhbHNlLCBvciBAcCBsYXN0IGlmIG5vIHN1Y2ggaXRlcmF0b3IgZXhpc3RzLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBpbmxpbmUgX0lucHV0SXRlcmF0b3IKKyAgICBmaW5kX2lmX25vdChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCV9QcmVkaWNhdGUgX19wcmVkKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfVW5hcnlQcmVkaWNhdGVDb25jZXB0PF9QcmVkaWNhdGUsCisJICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKyAgICAgIHJldHVybiBzdGQ6Ol9fZmluZF9pZl9ub3QoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCisJCQkJc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIHRoZSBzZXF1ZW5jZSBpcyBwYXJ0aXRpb25lZC4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIHByZWQgICBBIHByZWRpY2F0ZS4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgdGhlIHJhbmdlIEBwIFtmaXJzdCxsYXN0KSBpcyBwYXJ0aW9uZWQgYnkgQHAgcHJlZCwKKyAgICogIGkuZS4gaWYgYWxsIGVsZW1lbnRzIHRoYXQgc2F0aXNmeSBAcCBwcmVkIGFwcGVhciBiZWZvcmUgdGhvc2UgdGhhdAorICAgKiAgZG8gbm90LgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIGlzX3BhcnRpdGlvbmVkKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJICAgX1ByZWRpY2F0ZSBfX3ByZWQpCisgICAgeworICAgICAgX19maXJzdCA9IHN0ZDo6ZmluZF9pZl9ub3QoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOworICAgICAgcmV0dXJuIHN0ZDo6bm9uZV9vZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBGaW5kIHRoZSBwYXJ0aXRpb24gcG9pbnQgb2YgYSBwYXJ0aXRpb25lZCByYW5nZS4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgICBBbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBwcmVkICAgIEEgcHJlZGljYXRlLgorICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgQHAgbWlkIHN1Y2ggdGhhdCBAcCBhbGxfb2YoZmlyc3QsIG1pZCwgcHJlZCkKKyAgICogICAgICAgICAgIGFuZCBAcCBub25lX29mKG1pZCwgbGFzdCwgcHJlZCkgYXJlIGJvdGggdHJ1ZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBfRm9yd2FyZEl0ZXJhdG9yCisgICAgcGFydGl0aW9uX3BvaW50KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJCSAgICBfUHJlZGljYXRlIF9fcHJlZCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9VbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X1ByZWRpY2F0ZSwKKwkgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorCisgICAgICAvLyBBIHNwZWNpZmljIGRlYnVnLW1vZGUgdGVzdCB3aWxsIGJlIG5lY2Vzc2FyeS4uLgorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKwlfRGlzdGFuY2VUeXBlOworCisgICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOworICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkZGxlOworCisgICAgICB3aGlsZSAoX19sZW4gPiAwKQorCXsKKwkgIF9faGFsZiA9IF9fbGVuID4+IDE7CisJICBfX21pZGRsZSA9IF9fZmlyc3Q7CisJICBzdGQ6OmFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CisJICBpZiAoX19wcmVkKCpfX21pZGRsZSkpCisJICAgIHsKKwkgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CisJICAgICAgKytfX2ZpcnN0OworCSAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOworCSAgICB9CisJICBlbHNlCisJICAgIF9fbGVuID0gX19oYWxmOworCX0KKyAgICAgIHJldHVybiBfX2ZpcnN0OworICAgIH0KKyNlbmRpZgorCisKKyAgLyoqCisgICAqICBAYnJpZWYgQ29weSBhIHNlcXVlbmNlLCByZW1vdmluZyBlbGVtZW50cyBvZiBhIGdpdmVuIHZhbHVlLgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0ICAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICByZXN1bHQgIEFuIG91dHB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgdmFsdWUgICBUaGUgdmFsdWUgdG8gYmUgcmVtb3ZlZC4KKyAgICogIEByZXR1cm4gICBBbiBpdGVyYXRvciBkZXNpZ25hdGluZyB0aGUgZW5kIG9mIHRoZSByZXN1bHRpbmcgc2VxdWVuY2UuCisgICAqCisgICAqICBDb3BpZXMgZWFjaCBlbGVtZW50IGluIHRoZSByYW5nZSBAcCBbZmlyc3QsbGFzdCkgbm90IGVxdWFsIHRvIEBwIHZhbHVlCisgICAqICB0byB0aGUgcmFuZ2UgYmVnaW5uaW5nIGF0IEBwIHJlc3VsdC4KKyAgICogIHJlbW92ZV9jb3B5KCkgaXMgc3RhYmxlLCBzbyB0aGUgcmVsYXRpdmUgb3JkZXIgb2YgZWxlbWVudHMgdGhhdCBhcmUKKyAgICogIGNvcGllZCBpcyB1bmNoYW5nZWQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICByZW1vdmVfY29weShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCV9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0VxdWFsT3BDb25jZXB0PAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlLCBfVHA+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIGZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQorCWlmICghKCpfX2ZpcnN0ID09IF9fdmFsdWUpKQorCSAgeworCSAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKKwkgICAgKytfX3Jlc3VsdDsKKwkgIH0KKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgQ29weSBhIHNlcXVlbmNlLCByZW1vdmluZyBlbGVtZW50cyBmb3Igd2hpY2ggYSBwcmVkaWNhdGUgaXMgdHJ1ZS4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgcmVzdWx0ICBBbiBvdXRwdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIHByZWQgICAgQSBwcmVkaWNhdGUuCisgICAqICBAcmV0dXJuICAgQW4gaXRlcmF0b3IgZGVzaWduYXRpbmcgdGhlIGVuZCBvZiB0aGUgcmVzdWx0aW5nIHNlcXVlbmNlLgorICAgKgorICAgKiAgQ29waWVzIGVhY2ggZWxlbWVudCBpbiB0aGUgcmFuZ2UgQHAgW2ZpcnN0LGxhc3QpIGZvciB3aGljaAorICAgKiAgQHAgcHJlZCByZXR1cm5zIGZhbHNlIHRvIHRoZSByYW5nZSBiZWdpbm5pbmcgYXQgQHAgcmVzdWx0LgorICAgKgorICAgKiAgcmVtb3ZlX2NvcHlfaWYoKSBpcyBzdGFibGUsIHNvIHRoZSByZWxhdGl2ZSBvcmRlciBvZiBlbGVtZW50cyB0aGF0IGFyZQorICAgKiAgY29waWVkIGlzIHVuY2hhbmdlZC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIF9PdXRwdXRJdGVyYXRvcgorICAgIHJlbW92ZV9jb3B5X2lmKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJICAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LCBfUHJlZGljYXRlIF9fcHJlZCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3IsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9VbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X1ByZWRpY2F0ZSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCisJaWYgKCFib29sKF9fcHJlZCgqX19maXJzdCkpKQorCSAgeworCSAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKKwkgICAgKytfX3Jlc3VsdDsKKwkgIH0KKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAvKioKKyAgICogIEBicmllZiBDb3B5IHRoZSBlbGVtZW50cyBvZiBhIHNlcXVlbmNlIGZvciB3aGljaCBhIHByZWRpY2F0ZSBpcyB0cnVlLgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0ICAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICByZXN1bHQgIEFuIG91dHB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgcHJlZCAgICBBIHByZWRpY2F0ZS4KKyAgICogIEByZXR1cm4gICBBbiBpdGVyYXRvciBkZXNpZ25hdGluZyB0aGUgZW5kIG9mIHRoZSByZXN1bHRpbmcgc2VxdWVuY2UuCisgICAqCisgICAqICBDb3BpZXMgZWFjaCBlbGVtZW50IGluIHRoZSByYW5nZSBAcCBbZmlyc3QsbGFzdCkgZm9yIHdoaWNoCisgICAqICBAcCBwcmVkIHJldHVybnMgdHJ1ZSB0byB0aGUgcmFuZ2UgYmVnaW5uaW5nIGF0IEBwIHJlc3VsdC4KKyAgICoKKyAgICogIGNvcHlfaWYoKSBpcyBzdGFibGUsIHNvIHRoZSByZWxhdGl2ZSBvcmRlciBvZiBlbGVtZW50cyB0aGF0IGFyZQorICAgKiAgY29waWVkIGlzIHVuY2hhbmdlZC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIF9PdXRwdXRJdGVyYXRvcgorICAgIGNvcHlfaWYoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCSAgICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIF9QcmVkaWNhdGUgX19wcmVkKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX1VuYXJ5UHJlZGljYXRlQ29uY2VwdDxfUHJlZGljYXRlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwlpZiAoX19wcmVkKCpfX2ZpcnN0KSkKKwkgIHsKKwkgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CisJICAgICsrX19yZXN1bHQ7CisJICB9CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3I+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgX19jb3B5X24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX1NpemUgX19uLAorCSAgICAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LCBpbnB1dF9pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgZm9yICg7IF9fbiA+IDA7IC0tX19uKQorCXsKKwkgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OworCSAgKytfX2ZpcnN0OworCSAgKytfX3Jlc3VsdDsKKwl9CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1NpemUsCisJICAgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPgorICAgIGlubGluZSBfT3V0cHV0SXRlcmF0b3IKKyAgICBfX2NvcHlfbihfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1NpemUgX19uLAorCSAgICAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKKyAgICB7IHJldHVybiBzdGQ6OmNvcHkoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19yZXN1bHQpOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgQ29waWVzIHRoZSByYW5nZSBbZmlyc3QsZmlyc3QrbikgaW50byBbcmVzdWx0LHJlc3VsdCtuKS4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBuICAgICAgVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBjb3B5LgorICAgKiAgQHBhcmFtICByZXN1bHQgQW4gb3V0cHV0IGl0ZXJhdG9yLgorICAgKiAgQHJldHVybiAgcmVzdWx0K24uCisgICAqCisgICAqICBUaGlzIGlubGluZSBmdW5jdGlvbiB3aWxsIGJvaWwgZG93biB0byBhIGNhbGwgdG8gQGMgbWVtbW92ZSB3aGVuZXZlcgorICAgKiAgcG9zc2libGUuICBGYWlsaW5nIHRoYXQsIGlmIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzIGFyZSBwYXNzZWQsIHRoZW4gdGhlCisgICAqICBsb29wIGNvdW50IHdpbGwgYmUga25vd24gKGFuZCB0aGVyZWZvcmUgYSBjYW5kaWRhdGUgZm9yIGNvbXBpbGVyCisgICAqICBvcHRpbWl6YXRpb25zIHN1Y2ggYXMgdW5yb2xsaW5nKS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3I+CisgICAgaW5saW5lIF9PdXRwdXRJdGVyYXRvcgorICAgIGNvcHlfbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfU2l6ZSBfX24sIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3IsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorCisgICAgICByZXR1cm4gc3RkOjpfX2NvcHlfbihfX2ZpcnN0LCBfX24sIF9fcmVzdWx0LAorCQkJICAgc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgQ29weSB0aGUgZWxlbWVudHMgb2YgYSBzZXF1ZW5jZSB0byBzZXBhcmF0ZSBvdXRwdXQgc2VxdWVuY2VzCisgICAqICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSB0cnV0aCB2YWx1ZSBvZiBhIHByZWRpY2F0ZS4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgb3V0X3RydWUgICBBbiBvdXRwdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIG91dF9mYWxzZSAgQW4gb3V0cHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBwcmVkICAgIEEgcHJlZGljYXRlLgorICAgKiAgQHJldHVybiAgIEEgcGFpciBkZXNpZ25hdGluZyB0aGUgZW5kcyBvZiB0aGUgcmVzdWx0aW5nIHNlcXVlbmNlcy4KKyAgICoKKyAgICogIENvcGllcyBlYWNoIGVsZW1lbnQgaW4gdGhlIHJhbmdlIEBwIFtmaXJzdCxsYXN0KSBmb3Igd2hpY2gKKyAgICogIEBwIHByZWQgcmV0dXJucyB0cnVlIHRvIHRoZSByYW5nZSBiZWdpbm5pbmcgYXQgQHAgb3V0X3RydWUKKyAgICogIGFuZCBlYWNoIGVsZW1lbnQgZm9yIHdoaWNoIEBwIHByZWQgcmV0dXJucyBmYWxzZSB0byBAcCBvdXRfZmFsc2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IxLAorCSAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvcjIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgcGFpcjxfT3V0cHV0SXRlcmF0b3IxLCBfT3V0cHV0SXRlcmF0b3IyPgorICAgIHBhcnRpdGlvbl9jb3B5KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJICAgX091dHB1dEl0ZXJhdG9yMSBfX291dF90cnVlLCBfT3V0cHV0SXRlcmF0b3IyIF9fb3V0X2ZhbHNlLAorCQkgICBfUHJlZGljYXRlIF9fcHJlZCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3IxLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvcjIsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9VbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X1ByZWRpY2F0ZSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKyAgICAgIAorICAgICAgZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCisJaWYgKF9fcHJlZCgqX19maXJzdCkpCisJICB7CisJICAgICpfX291dF90cnVlID0gKl9fZmlyc3Q7CisJICAgICsrX19vdXRfdHJ1ZTsKKwkgIH0KKwllbHNlCisJICB7CisJICAgICpfX291dF9mYWxzZSA9ICpfX2ZpcnN0OworCSAgICArK19fb3V0X2ZhbHNlOworCSAgfQorCisgICAgICByZXR1cm4gcGFpcjxfT3V0cHV0SXRlcmF0b3IxLCBfT3V0cHV0SXRlcmF0b3IyPihfX291dF90cnVlLCBfX291dF9mYWxzZSk7CisgICAgfQorI2VuZGlmCisKKyAgLyoqCisgICAqICBAYnJpZWYgUmVtb3ZlIGVsZW1lbnRzIGZyb20gYSBzZXF1ZW5jZS4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIHZhbHVlICBUaGUgdmFsdWUgdG8gYmUgcmVtb3ZlZC4KKyAgICogIEByZXR1cm4gICBBbiBpdGVyYXRvciBkZXNpZ25hdGluZyB0aGUgZW5kIG9mIHRoZSByZXN1bHRpbmcgc2VxdWVuY2UuCisgICAqCisgICAqICBBbGwgZWxlbWVudHMgZXF1YWwgdG8gQHAgdmFsdWUgYXJlIHJlbW92ZWQgZnJvbSB0aGUgcmFuZ2UKKyAgICogIEBwIFtmaXJzdCxsYXN0KS4KKyAgICoKKyAgICogIHJlbW92ZSgpIGlzIHN0YWJsZSwgc28gdGhlIHJlbGF0aXZlIG9yZGVyIG9mIGVsZW1lbnRzIHRoYXQgYXJlCisgICAqICBub3QgcmVtb3ZlZCBpcyB1bmNoYW5nZWQuCisgICAqCisgICAqICBFbGVtZW50cyBiZXR3ZWVuIHRoZSBlbmQgb2YgdGhlIHJlc3VsdGluZyBzZXF1ZW5jZSBhbmQgQHAgbGFzdAorICAgKiAgYXJlIHN0aWxsIHByZXNlbnQsIGJ1dCB0aGVpciB2YWx1ZSBpcyB1bnNwZWNpZmllZC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgorICAgIF9Gb3J3YXJkSXRlcmF0b3IKKyAgICByZW1vdmUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkgICBjb25zdCBfVHAmIF9fdmFsdWUpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgX0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0VxdWFsT3BDb25jZXB0PAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUsIF9UcD4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgX19maXJzdCA9IF9HTElCQ1hYX1NURF9QOjpmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZSk7CisgICAgICBpZihfX2ZpcnN0ID09IF9fbGFzdCkKKyAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fcmVzdWx0ID0gX19maXJzdDsKKyAgICAgICsrX19maXJzdDsKKyAgICAgIGZvcig7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCisgICAgICAgIGlmKCEoKl9fZmlyc3QgPT0gX192YWx1ZSkpCisgICAgICAgICAgeworICAgICAgICAgICAgKl9fcmVzdWx0ID0gX0dMSUJDWFhfTU9WRSgqX19maXJzdCk7CisgICAgICAgICAgICArK19fcmVzdWx0OworICAgICAgICAgIH0KKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgUmVtb3ZlIGVsZW1lbnRzIGZyb20gYSBzZXF1ZW5jZSB1c2luZyBhIHByZWRpY2F0ZS4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgcHJlZCAgIEEgcHJlZGljYXRlLgorICAgKiAgQHJldHVybiAgIEFuIGl0ZXJhdG9yIGRlc2lnbmF0aW5nIHRoZSBlbmQgb2YgdGhlIHJlc3VsdGluZyBzZXF1ZW5jZS4KKyAgICoKKyAgICogIEFsbCBlbGVtZW50cyBmb3Igd2hpY2ggQHAgcHJlZCByZXR1cm5zIHRydWUgYXJlIHJlbW92ZWQgZnJvbSB0aGUgcmFuZ2UKKyAgICogIEBwIFtmaXJzdCxsYXN0KS4KKyAgICoKKyAgICogIHJlbW92ZV9pZigpIGlzIHN0YWJsZSwgc28gdGhlIHJlbGF0aXZlIG9yZGVyIG9mIGVsZW1lbnRzIHRoYXQgYXJlCisgICAqICBub3QgcmVtb3ZlZCBpcyB1bmNoYW5nZWQuCisgICAqCisgICAqICBFbGVtZW50cyBiZXR3ZWVuIHRoZSBlbmQgb2YgdGhlIHJlc3VsdGluZyBzZXF1ZW5jZSBhbmQgQHAgbGFzdAorICAgKiAgYXJlIHN0aWxsIHByZXNlbnQsIGJ1dCB0aGVpciB2YWx1ZSBpcyB1bnNwZWNpZmllZC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBfRm9yd2FyZEl0ZXJhdG9yCisgICAgcmVtb3ZlX2lmKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgX0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX1VuYXJ5UHJlZGljYXRlQ29uY2VwdDxfUHJlZGljYXRlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIF9fZmlyc3QgPSBfR0xJQkNYWF9TVERfUDo6ZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7CisgICAgICBpZihfX2ZpcnN0ID09IF9fbGFzdCkKKyAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fcmVzdWx0ID0gX19maXJzdDsKKyAgICAgICsrX19maXJzdDsKKyAgICAgIGZvcig7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCisgICAgICAgIGlmKCFib29sKF9fcHJlZCgqX19maXJzdCkpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgICpfX3Jlc3VsdCA9IF9HTElCQ1hYX01PVkUoKl9fZmlyc3QpOworICAgICAgICAgICAgKytfX3Jlc3VsdDsKKyAgICAgICAgICB9CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIFJlbW92ZSBjb25zZWN1dGl2ZSBkdXBsaWNhdGUgdmFsdWVzIGZyb20gYSBzZXF1ZW5jZS4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEByZXR1cm4gIEFuIGl0ZXJhdG9yIGRlc2lnbmF0aW5nIHRoZSBlbmQgb2YgdGhlIHJlc3VsdGluZyBzZXF1ZW5jZS4KKyAgICoKKyAgICogIFJlbW92ZXMgYWxsIGJ1dCB0aGUgZmlyc3QgZWxlbWVudCBmcm9tIGVhY2ggZ3JvdXAgb2YgY29uc2VjdXRpdmUKKyAgICogIHZhbHVlcyB0aGF0IGNvbXBhcmUgZXF1YWwuCisgICAqICB1bmlxdWUoKSBpcyBzdGFibGUsIHNvIHRoZSByZWxhdGl2ZSBvcmRlciBvZiBlbGVtZW50cyB0aGF0IGFyZQorICAgKiAgbm90IHJlbW92ZWQgaXMgdW5jaGFuZ2VkLgorICAgKiAgRWxlbWVudHMgYmV0d2VlbiB0aGUgZW5kIG9mIHRoZSByZXN1bHRpbmcgc2VxdWVuY2UgYW5kIEBwIGxhc3QKKyAgICogIGFyZSBzdGlsbCBwcmVzZW50LCBidXQgdGhlaXIgdmFsdWUgaXMgdW5zcGVjaWZpZWQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgX0ZvcndhcmRJdGVyYXRvcgorICAgIHVuaXF1ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9FcXVhbGl0eUNvbXBhcmFibGVDb25jZXB0PAorCQkgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgLy8gU2tpcCB0aGUgYmVnaW5uaW5nLCBpZiBhbHJlYWR5IHVuaXF1ZS4KKyAgICAgIF9fZmlyc3QgPSBfR0xJQkNYWF9TVERfUDo6YWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3QpOworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCXJldHVybiBfX2xhc3Q7CisKKyAgICAgIC8vIERvIHRoZSByZWFsIGNvcHkgd29yay4KKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19kZXN0ID0gX19maXJzdDsKKyAgICAgICsrX19maXJzdDsKKyAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQorCWlmICghKCpfX2Rlc3QgPT0gKl9fZmlyc3QpKQorCSAgKisrX19kZXN0ID0gX0dMSUJDWFhfTU9WRSgqX19maXJzdCk7CisgICAgICByZXR1cm4gKytfX2Rlc3Q7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIFJlbW92ZSBjb25zZWN1dGl2ZSB2YWx1ZXMgZnJvbSBhIHNlcXVlbmNlIHVzaW5nIGEgcHJlZGljYXRlLgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgICAgICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0ICAgICAgICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBiaW5hcnlfcHJlZCAgQSBiaW5hcnkgcHJlZGljYXRlLgorICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgZGVzaWduYXRpbmcgdGhlIGVuZCBvZiB0aGUgcmVzdWx0aW5nIHNlcXVlbmNlLgorICAgKgorICAgKiAgUmVtb3ZlcyBhbGwgYnV0IHRoZSBmaXJzdCBlbGVtZW50IGZyb20gZWFjaCBncm91cCBvZiBjb25zZWN1dGl2ZQorICAgKiAgdmFsdWVzIGZvciB3aGljaCBAcCBiaW5hcnlfcHJlZCByZXR1cm5zIHRydWUuCisgICAqICB1bmlxdWUoKSBpcyBzdGFibGUsIHNvIHRoZSByZWxhdGl2ZSBvcmRlciBvZiBlbGVtZW50cyB0aGF0IGFyZQorICAgKiAgbm90IHJlbW92ZWQgaXMgdW5jaGFuZ2VkLgorICAgKiAgRWxlbWVudHMgYmV0d2VlbiB0aGUgZW5kIG9mIHRoZSByZXN1bHRpbmcgc2VxdWVuY2UgYW5kIEBwIGxhc3QKKyAgICogIGFyZSBzdGlsbCBwcmVzZW50LCBidXQgdGhlaXIgdmFsdWUgaXMgdW5zcGVjaWZpZWQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgX0ZvcndhcmRJdGVyYXRvcgorICAgIHVuaXF1ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgX0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X0JpbmFyeVByZWRpY2F0ZSwKKwkJdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAorCQl0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIC8vIFNraXAgdGhlIGJlZ2lubmluZywgaWYgYWxyZWFkeSB1bmlxdWUuCisgICAgICBfX2ZpcnN0ID0gX0dMSUJDWFhfU1REX1A6OmFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0LCBfX2JpbmFyeV9wcmVkKTsKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwlyZXR1cm4gX19sYXN0OworCisgICAgICAvLyBEbyB0aGUgcmVhbCBjb3B5IHdvcmsuCisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZGVzdCA9IF9fZmlyc3Q7CisgICAgICArK19fZmlyc3Q7CisgICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKKwlpZiAoIWJvb2woX19iaW5hcnlfcHJlZCgqX19kZXN0LCAqX19maXJzdCkpKQorCSAgKisrX19kZXN0ID0gX0dMSUJDWFhfTU9WRSgqX19maXJzdCk7CisgICAgICByZXR1cm4gKytfX2Rlc3Q7CisgICAgfQorCisgIC8qKgorICAgKiAgVGhpcyBpcyBhbiB1Z2xpZmllZCB1bmlxdWVfY29weShfSW5wdXRJdGVyYXRvciwgX0lucHV0SXRlcmF0b3IsCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyYXRvcikKKyAgICogIG92ZXJsb2FkZWQgZm9yIGZvcndhcmQgaXRlcmF0b3JzIGFuZCBvdXRwdXQgaXRlcmF0b3IgYXMgcmVzdWx0LgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3I+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgX191bmlxdWVfY29weShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQkgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwKKwkJICBmb3J3YXJkX2l0ZXJhdG9yX3RhZywgb3V0cHV0X2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cyAtLSB0YWtlbiBjYXJlIG9mIGluIGRpc3BhdGNoaW5nIGZ1bmN0aW9uCisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CisgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKKyAgICAgIHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3QpCisJaWYgKCEoKl9fZmlyc3QgPT0gKl9fbmV4dCkpCisJICB7CisJICAgIF9fZmlyc3QgPSBfX25leHQ7CisJICAgICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CisJICB9CisgICAgICByZXR1cm4gKytfX3Jlc3VsdDsKKyAgICB9CisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIHVnbGlmaWVkIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXJhdG9yLCBfSW5wdXRJdGVyYXRvciwKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXJhdG9yKQorICAgKiAgb3ZlcmxvYWRlZCBmb3IgaW5wdXQgaXRlcmF0b3JzIGFuZCBvdXRwdXQgaXRlcmF0b3IgYXMgcmVzdWx0LgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPgorICAgIF9PdXRwdXRJdGVyYXRvcgorICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwKKwkJICBpbnB1dF9pdGVyYXRvcl90YWcsIG91dHB1dF9pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMgLS0gdGFrZW4gY2FyZSBvZiBpbiBkaXNwYXRjaGluZyBmdW5jdGlvbgorICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CisgICAgICAqX19yZXN1bHQgPSBfX3ZhbHVlOworICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCisJaWYgKCEoX192YWx1ZSA9PSAqX19maXJzdCkpCisJICB7CisJICAgIF9fdmFsdWUgPSAqX19maXJzdDsKKwkgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOworCSAgfQorICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CisgICAgfQorCisgIC8qKgorICAgKiAgVGhpcyBpcyBhbiB1Z2xpZmllZCB1bmlxdWVfY29weShfSW5wdXRJdGVyYXRvciwgX0lucHV0SXRlcmF0b3IsCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyYXRvcikKKyAgICogIG92ZXJsb2FkZWQgZm9yIGlucHV0IGl0ZXJhdG9ycyBhbmQgZm9yd2FyZCBpdGVyYXRvciBhcyByZXN1bHQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgIF9Gb3J3YXJkSXRlcmF0b3IKKyAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJICBfRm9yd2FyZEl0ZXJhdG9yIF9fcmVzdWx0LAorCQkgIGlucHV0X2l0ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMgLS0gdGFrZW4gY2FyZSBvZiBpbiBkaXNwYXRjaGluZyBmdW5jdGlvbgorICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CisgICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKKwlpZiAoISgqX19yZXN1bHQgPT0gKl9fZmlyc3QpKQorCSAgKisrX19yZXN1bHQgPSAqX19maXJzdDsKKyAgICAgIHJldHVybiArK19fcmVzdWx0OworICAgIH0KKworICAvKioKKyAgICogIFRoaXMgaXMgYW4gdWdsaWZpZWQKKyAgICogIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXJhdG9yLCBfSW5wdXRJdGVyYXRvciwgX091dHB1dEl0ZXJhdG9yLAorICAgKiAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSkKKyAgICogIG92ZXJsb2FkZWQgZm9yIGZvcndhcmQgaXRlcmF0b3JzIGFuZCBvdXRwdXQgaXRlcmF0b3IgYXMgcmVzdWx0LgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsCisJICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KKyAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICBfX3VuaXF1ZV9jb3B5KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJCSAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LCBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsCisJCSAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIG91dHB1dF9pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMgLS0gaXRlcmF0b3JzIGFscmVhZHkgY2hlY2tlZAorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9CaW5hcnlQcmVkaWNhdGUsCisJICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUsCisJICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorCisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CisgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKKyAgICAgIHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3QpCisJaWYgKCFib29sKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKSkKKwkgIHsKKwkgICAgX19maXJzdCA9IF9fbmV4dDsKKwkgICAgKisrX19yZXN1bHQgPSAqX19maXJzdDsKKwkgIH0KKyAgICAgIHJldHVybiArK19fcmVzdWx0OworICAgIH0KKworICAvKioKKyAgICogIFRoaXMgaXMgYW4gdWdsaWZpZWQKKyAgICogIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXJhdG9yLCBfSW5wdXRJdGVyYXRvciwgX091dHB1dEl0ZXJhdG9yLAorICAgKiAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSkKKyAgICogIG92ZXJsb2FkZWQgZm9yIGlucHV0IGl0ZXJhdG9ycyBhbmQgb3V0cHV0IGl0ZXJhdG9yIGFzIHJlc3VsdC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgorICAgIF9PdXRwdXRJdGVyYXRvcgorICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAorCQkgIGlucHV0X2l0ZXJhdG9yX3RhZywgb3V0cHV0X2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cyAtLSBpdGVyYXRvcnMgYWxyZWFkeSBjaGVja2VkCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X0JpbmFyeVByZWRpY2F0ZSwKKwkgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGUsCisJICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKworICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CisgICAgICAqX19yZXN1bHQgPSBfX3ZhbHVlOworICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCisJaWYgKCFib29sKF9fYmluYXJ5X3ByZWQoX192YWx1ZSwgKl9fZmlyc3QpKSkKKwkgIHsKKwkgICAgX192YWx1ZSA9ICpfX2ZpcnN0OworCSAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CisJICB9CisgICAgICByZXR1cm4gKytfX3Jlc3VsdDsKKyAgICB9CisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIHVnbGlmaWVkCisgICAqICB1bmlxdWVfY29weShfSW5wdXRJdGVyYXRvciwgX0lucHV0SXRlcmF0b3IsIF9PdXRwdXRJdGVyYXRvciwKKyAgICogICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUpCisgICAqICBvdmVybG9hZGVkIGZvciBpbnB1dCBpdGVyYXRvcnMgYW5kIGZvcndhcmQgaXRlcmF0b3IgYXMgcmVzdWx0LgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgorICAgIF9Gb3J3YXJkSXRlcmF0b3IKKyAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJICBfRm9yd2FyZEl0ZXJhdG9yIF9fcmVzdWx0LCBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsCisJCSAgaW5wdXRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cyAtLSBpdGVyYXRvcnMgYWxyZWFkeSBjaGVja2VkCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X0JpbmFyeVByZWRpY2F0ZSwKKwkgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKKwkgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorCisgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKKyAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQorCWlmICghYm9vbChfX2JpbmFyeV9wcmVkKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSkKKwkgICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CisgICAgICByZXR1cm4gKytfX3Jlc3VsdDsKKyAgICB9CisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIHVnbGlmaWVkIHJldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yKQorICAgKiAgb3ZlcmxvYWRlZCBmb3IgYmlkaXJlY3Rpb25hbCBpdGVyYXRvcnMuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3I+CisgICAgdm9pZAorICAgIF9fcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19sYXN0LAorCSAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIHdoaWxlICh0cnVlKQorCWlmIChfX2ZpcnN0ID09IF9fbGFzdCB8fCBfX2ZpcnN0ID09IC0tX19sYXN0KQorCSAgcmV0dXJuOworCWVsc2UKKwkgIHsKKwkgICAgc3RkOjppdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKKwkgICAgKytfX2ZpcnN0OworCSAgfQorICAgIH0KKworICAvKioKKyAgICogIFRoaXMgaXMgYW4gdWdsaWZpZWQgcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IpCisgICAqICBvdmVybG9hZGVkIGZvciByYW5kb20gYWNjZXNzIGl0ZXJhdG9ycy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgorICAgIHZvaWQKKyAgICBfX3JldmVyc2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCisJICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCXJldHVybjsKKyAgICAgIC0tX19sYXN0OworICAgICAgd2hpbGUgKF9fZmlyc3QgPCBfX2xhc3QpCisJeworCSAgc3RkOjppdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKKwkgICsrX19maXJzdDsKKwkgIC0tX19sYXN0OworCX0KKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgUmV2ZXJzZSBhIHNlcXVlbmNlLgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgQSBiaWRpcmVjdGlvbmFsIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0ICAgQSBiaWRpcmVjdGlvbmFsIGl0ZXJhdG9yLgorICAgKiAgQHJldHVybiAgIHJldmVyc2UoKSByZXR1cm5zIG5vIHZhbHVlLgorICAgKgorICAgKiAgUmV2ZXJzZXMgdGhlIG9yZGVyIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgcmFuZ2UgQHAgW2ZpcnN0LGxhc3QpLAorICAgKiAgc28gdGhhdCB0aGUgZmlyc3QgZWxlbWVudCBiZWNvbWVzIHRoZSBsYXN0IGV0Yy4KKyAgICogIEZvciBldmVyeSBAYyBpIHN1Y2ggdGhhdCBAcCAwPD1pPD0obGFzdC1maXJzdCkvMiksIEBwIHJldmVyc2UoKQorICAgKiAgc3dhcHMgQHAgKihmaXJzdCtpKSBhbmQgQHAgKihsYXN0LShpKzEpKQorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPgorICAgIGlubGluZSB2b2lkCisgICAgcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICBzdGQ6Ol9fcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QsIHN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIENvcHkgYSBzZXF1ZW5jZSwgcmV2ZXJzaW5nIGl0cyBlbGVtZW50cy4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgICBBIGJpZGlyZWN0aW9uYWwgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QgICAgQSBiaWRpcmVjdGlvbmFsIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICByZXN1bHQgIEFuIG91dHB1dCBpdGVyYXRvci4KKyAgICogIEByZXR1cm4gIEFuIGl0ZXJhdG9yIGRlc2lnbmF0aW5nIHRoZSBlbmQgb2YgdGhlIHJlc3VsdGluZyBzZXF1ZW5jZS4KKyAgICoKKyAgICogIENvcGllcyB0aGUgZWxlbWVudHMgaW4gdGhlIHJhbmdlIEBwIFtmaXJzdCxsYXN0KSB0byB0aGUgcmFuZ2UKKyAgICogIEBwIFtyZXN1bHQscmVzdWx0KyhsYXN0LWZpcnN0KSkgc3VjaCB0aGF0IHRoZSBvcmRlciBvZiB0aGUKKyAgICogIGVsZW1lbnRzIGlzIHJldmVyc2VkLgorICAgKiAgRm9yIGV2ZXJ5IEBjIGkgc3VjaCB0aGF0IEBwIDA8PWk8PShsYXN0LWZpcnN0KSwgQHAgcmV2ZXJzZV9jb3B5KCkKKyAgICogIHBlcmZvcm1zIHRoZSBhc3NpZ25tZW50IEBwICoocmVzdWx0KyhsYXN0LWZpcnN0KS1pKSA9ICooZmlyc3QraSkuCisgICAqICBUaGUgcmFuZ2VzIEBwIFtmaXJzdCxsYXN0KSBhbmQgQHAgW3Jlc3VsdCxyZXN1bHQrKGxhc3QtZmlyc3QpKQorICAgKiAgbXVzdCBub3Qgb3ZlcmxhcC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPgorICAgIF9PdXRwdXRJdGVyYXRvcgorICAgIHJldmVyc2VfY29weShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19sYXN0LAorCQkgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpZGlyZWN0aW9uYWxJdGVyYXRvckNvbmNlcHQ8CisJCQkJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkJdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCisJeworCSAgLS1fX2xhc3Q7CisJICAqX19yZXN1bHQgPSAqX19sYXN0OworCSAgKytfX3Jlc3VsdDsKKwl9CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIC8qKgorICAgKiAgVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIHJvdGF0ZSBhbGdvcml0aG0gc3BlY2lhbGl6ZWQgb24gUkFJcy4KKyAgICogIEl0IHJldHVybnMgdGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIG9mIHR3byBpbnRlZ2VyIHZhbHVlcy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0V1Y2xpZGVhblJpbmdFbGVtZW50PgorICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudAorICAgIF9fZ2NkKF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX20sIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX24pCisgICAgeworICAgICAgd2hpbGUgKF9fbiAhPSAwKQorCXsKKwkgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX3QgPSBfX20gJSBfX247CisJICBfX20gPSBfX247CisJICBfX24gPSBfX3Q7CisJfQorICAgICAgcmV0dXJuIF9fbTsKKyAgICB9CisKKyAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSByb3RhdGUgYWxnb3JpdGhtLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgIHZvaWQKKyAgICBfX3JvdGF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCisJICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkZGxlLAorCSAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX2xhc3QgID09IF9fbWlkZGxlKQorCXJldHVybjsKKworICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0MiA9IF9fbWlkZGxlOworICAgICAgZG8KKwl7CisJICBzdGQ6Oml0ZXJfc3dhcChfX2ZpcnN0LCBfX2ZpcnN0Mik7CisJICArK19fZmlyc3Q7CisJICArK19fZmlyc3QyOworCSAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCisJICAgIF9fbWlkZGxlID0gX19maXJzdDI7CisJfQorICAgICAgd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCk7CisKKyAgICAgIF9fZmlyc3QyID0gX19taWRkbGU7CisKKyAgICAgIHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xhc3QpCisJeworCSAgc3RkOjppdGVyX3N3YXAoX19maXJzdCwgX19maXJzdDIpOworCSAgKytfX2ZpcnN0OworCSAgKytfX2ZpcnN0MjsKKwkgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQorCSAgICBfX21pZGRsZSA9IF9fZmlyc3QyOworCSAgZWxzZSBpZiAoX19maXJzdDIgPT0gX19sYXN0KQorCSAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOworCX0KKyAgICB9CisKKyAgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgcm90YXRlIGFsZ29yaXRobS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcj4KKyAgICB2b2lkCisgICAgX19yb3RhdGUoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2ZpcnN0LAorCSAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX21pZGRsZSwKKwkgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19sYXN0LAorCSAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3I+KQorCisgICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX2xhc3QgID09IF9fbWlkZGxlKQorCXJldHVybjsKKworICAgICAgc3RkOjpfX3JldmVyc2UoX19maXJzdCwgIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKKyAgICAgIHN0ZDo6X19yZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3QsICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CisKKyAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxlICYmIF9fbWlkZGxlICE9IF9fbGFzdCkKKwl7CisJICBzdGQ6Oml0ZXJfc3dhcChfX2ZpcnN0LCAtLV9fbGFzdCk7CisJICArK19fZmlyc3Q7CisJfQorCisgICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKKwlzdGQ6Ol9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOworICAgICAgZWxzZQorCXN0ZDo6X19yZXZlcnNlKF9fZmlyc3QsICBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgcm90YXRlIGFsZ29yaXRobS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgorICAgIHZvaWQKKyAgICBfX3JvdGF0ZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKKwkgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX21pZGRsZSwKKwkgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCisJICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4pCisKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbGFzdCAgPT0gX19taWRkbGUpCisJcmV0dXJuOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKwlfRGlzdGFuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTsKKworICAgICAgX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAgIC0gX19maXJzdDsKKyAgICAgIF9EaXN0YW5jZSBfX2sgPSBfX21pZGRsZSAtIF9fZmlyc3Q7CisKKyAgICAgIGlmIChfX2sgPT0gX19uIC0gX19rKQorCXsKKwkgIHN0ZDo6c3dhcF9yYW5nZXMoX19maXJzdCwgX19taWRkbGUsIF9fbWlkZGxlKTsKKwkgIHJldHVybjsKKwl9CisKKyAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3AgPSBfX2ZpcnN0OworCisgICAgICBmb3IgKDs7KQorCXsKKwkgIGlmIChfX2sgPCBfX24gLSBfX2spCisJICAgIHsKKwkgICAgICBpZiAoX19pc19wb2QoX1ZhbHVlVHlwZSkgJiYgX19rID09IDEpCisJCXsKKwkJICBfVmFsdWVUeXBlIF9fdCA9IF9HTElCQ1hYX01PVkUoKl9fcCk7CisJCSAgX0dMSUJDWFhfTU9WRTMoX19wICsgMSwgX19wICsgX19uLCBfX3ApOworCQkgICooX19wICsgX19uIC0gMSkgPSBfR0xJQkNYWF9NT1ZFKF9fdCk7CisJCSAgcmV0dXJuOworCQl9CisJICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcSA9IF9fcCArIF9fazsKKwkgICAgICBmb3IgKF9EaXN0YW5jZSBfX2kgPSAwOyBfX2kgPCBfX24gLSBfX2s7ICsrIF9faSkKKwkJeworCQkgIHN0ZDo6aXRlcl9zd2FwKF9fcCwgX19xKTsKKwkJICArK19fcDsKKwkJICArK19fcTsKKwkJfQorCSAgICAgIF9fbiAlPSBfX2s7CisJICAgICAgaWYgKF9fbiA9PSAwKQorCQlyZXR1cm47CisJICAgICAgc3RkOjpzd2FwKF9fbiwgX19rKTsKKwkgICAgICBfX2sgPSBfX24gLSBfX2s7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIF9fayA9IF9fbiAtIF9fazsKKwkgICAgICBpZiAoX19pc19wb2QoX1ZhbHVlVHlwZSkgJiYgX19rID09IDEpCisJCXsKKwkJICBfVmFsdWVUeXBlIF9fdCA9IF9HTElCQ1hYX01PVkUoKihfX3AgKyBfX24gLSAxKSk7CisJCSAgX0dMSUJDWFhfTU9WRV9CQUNLV0FSRDMoX19wLCBfX3AgKyBfX24gLSAxLCBfX3AgKyBfX24pOworCQkgICpfX3AgPSBfR0xJQkNYWF9NT1ZFKF9fdCk7CisJCSAgcmV0dXJuOworCQl9CisJICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcSA9IF9fcCArIF9fbjsKKwkgICAgICBfX3AgPSBfX3EgLSBfX2s7CisJICAgICAgZm9yIChfRGlzdGFuY2UgX19pID0gMDsgX19pIDwgX19uIC0gX19rOyArKyBfX2kpCisJCXsKKwkJICAtLV9fcDsKKwkJICAtLV9fcTsKKwkJICBzdGQ6Oml0ZXJfc3dhcChfX3AsIF9fcSk7CisJCX0KKwkgICAgICBfX24gJT0gX19rOworCSAgICAgIGlmIChfX24gPT0gMCkKKwkJcmV0dXJuOworCSAgICAgIHN0ZDo6c3dhcChfX24sIF9fayk7CisJICAgIH0KKwl9CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIFJvdGF0ZSB0aGUgZWxlbWVudHMgb2YgYSBzZXF1ZW5jZS4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIG1pZGRsZSAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0ICAgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEByZXR1cm4gIE5vdGhpbmcuCisgICAqCisgICAqICBSb3RhdGVzIHRoZSBlbGVtZW50cyBvZiB0aGUgcmFuZ2UgQHAgW2ZpcnN0LGxhc3QpIGJ5IEBwIChtaWRkbGUtZmlyc3QpCisgICAqICBwb3NpdGlvbnMgc28gdGhhdCB0aGUgZWxlbWVudCBhdCBAcCBtaWRkbGUgaXMgbW92ZWQgdG8gQHAgZmlyc3QsIHRoZQorICAgKiAgZWxlbWVudCBhdCBAcCBtaWRkbGUrMSBpcyBtb3ZlZCB0byBAZmlyc3QrMSBhbmQgc28gb24gZm9yIGVhY2ggZWxlbWVudAorICAgKiAgaW4gdGhlIHJhbmdlIEBwIFtmaXJzdCxsYXN0KS4KKyAgICoKKyAgICogIFRoaXMgZWZmZWN0aXZlbHkgc3dhcHMgdGhlIHJhbmdlcyBAcCBbZmlyc3QsbWlkZGxlKSBhbmQKKyAgICogIEBwIFttaWRkbGUsbGFzdCkuCisgICAqCisgICAqICBQZXJmb3JtcyBAcCAqKGZpcnN0KyhuKyhsYXN0LW1pZGRsZSkpJShsYXN0LWZpcnN0KSk9KihmaXJzdCtuKSBmb3IKKyAgICogIGVhY2ggQHAgbiBpbiB0aGUgcmFuZ2UgQHAgWzAsbGFzdC1maXJzdCkuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgaW5saW5lIHZvaWQKKyAgICByb3RhdGUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkZGxlLAorCSAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbWlkZGxlKTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX21pZGRsZSwgX19sYXN0KTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5CisJX0l0ZXJUeXBlOworICAgICAgc3RkOjpfX3JvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfSXRlclR5cGUoKSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIENvcHkgYSBzZXF1ZW5jZSwgcm90YXRpbmcgaXRzIGVsZW1lbnRzLgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbWlkZGxlICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QgICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICByZXN1bHQgIEFuIG91dHB1dCBpdGVyYXRvci4KKyAgICogIEByZXR1cm4gICBBbiBpdGVyYXRvciBkZXNpZ25hdGluZyB0aGUgZW5kIG9mIHRoZSByZXN1bHRpbmcgc2VxdWVuY2UuCisgICAqCisgICAqICBDb3BpZXMgdGhlIGVsZW1lbnRzIG9mIHRoZSByYW5nZSBAcCBbZmlyc3QsbGFzdCkgdG8gdGhlIHJhbmdlCisgICAqICBiZWdpbm5pbmcgYXQgQHJlc3VsdCwgcm90YXRpbmcgdGhlIGNvcGllZCBlbGVtZW50cyBieSBAcCAobWlkZGxlLWZpcnN0KQorICAgKiAgcG9zaXRpb25zIHNvIHRoYXQgdGhlIGVsZW1lbnQgYXQgQHAgbWlkZGxlIGlzIG1vdmVkIHRvIEBwIHJlc3VsdCwgdGhlCisgICAqICBlbGVtZW50IGF0IEBwIG1pZGRsZSsxIGlzIG1vdmVkIHRvIEByZXN1bHQrMSBhbmQgc28gb24gZm9yIGVhY2ggZWxlbWVudAorICAgKiAgaW4gdGhlIHJhbmdlIEBwIFtmaXJzdCxsYXN0KS4KKyAgICoKKyAgICogIFBlcmZvcm1zIEBwICoocmVzdWx0KyhuKyhsYXN0LW1pZGRsZSkpJShsYXN0LWZpcnN0KSk9KihmaXJzdCtuKSBmb3IKKyAgICogIGVhY2ggQHAgbiBpbiB0aGUgcmFuZ2UgQHAgWzAsbGFzdC1maXJzdCkuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvcj4KKyAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICByb3RhdGVfY29weShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19taWRkbGUsCisgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X091dHB1dEl0ZXJhdG9yLAorCQl0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbWlkZGxlKTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX21pZGRsZSwgX19sYXN0KTsKKworICAgICAgcmV0dXJuIHN0ZDo6Y29weShfX2ZpcnN0LCBfX21pZGRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fcmVzdWx0KSk7CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uLi4uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgX0ZvcndhcmRJdGVyYXRvcgorICAgIF9fcGFydGl0aW9uKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJCV9QcmVkaWNhdGUgX19wcmVkLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCisJcmV0dXJuIF9fZmlyc3Q7CisKKyAgICAgIHdoaWxlIChfX3ByZWQoKl9fZmlyc3QpKQorCWlmICgrK19fZmlyc3QgPT0gX19sYXN0KQorCSAgcmV0dXJuIF9fZmlyc3Q7CisKKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKKworICAgICAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkKKwlpZiAoX19wcmVkKCpfX25leHQpKQorCSAgeworCSAgICBzdGQ6Oml0ZXJfc3dhcChfX2ZpcnN0LCBfX25leHQpOworCSAgICArK19fZmlyc3Q7CisJICB9CisKKyAgICAgIHJldHVybiBfX2ZpcnN0OworICAgIH0KKworICAvLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbi4uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IKKyAgICBfX3BhcnRpdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19sYXN0LAorCQlfUHJlZGljYXRlIF9fcHJlZCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgd2hpbGUgKHRydWUpCisJeworCSAgd2hpbGUgKHRydWUpCisJICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwkgICAgICByZXR1cm4gX19maXJzdDsKKwkgICAgZWxzZSBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKKwkgICAgICArK19fZmlyc3Q7CisJICAgIGVsc2UKKwkgICAgICBicmVhazsKKwkgIC0tX19sYXN0OworCSAgd2hpbGUgKHRydWUpCisJICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwkgICAgICByZXR1cm4gX19maXJzdDsKKwkgICAgZWxzZSBpZiAoIWJvb2woX19wcmVkKCpfX2xhc3QpKSkKKwkgICAgICAtLV9fbGFzdDsKKwkgICAgZWxzZQorCSAgICAgIGJyZWFrOworCSAgc3RkOjppdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKKwkgICsrX19maXJzdDsKKwl9CisgICAgfQorCisgIC8vIHBhcnRpdGlvbgorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uLi4uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9EaXN0YW5jZT4KKyAgICBfRm9yd2FyZEl0ZXJhdG9yCisgICAgX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAorCQkJICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQkJICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4pCisgICAgeworICAgICAgaWYgKF9fbGVuID09IDEpCisJcmV0dXJuIF9fcHJlZCgqX19maXJzdCkgPyBfX2xhc3QgOiBfX2ZpcnN0OworICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZGRsZSA9IF9fZmlyc3Q7CisgICAgICBzdGQ6OmFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fYmVnaW4gPSBzdGQ6Ol9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmlyc3QsCisJCQkJCQkJCSBfX21pZGRsZSwKKwkJCQkJCQkJIF9fcHJlZCwKKwkJCQkJCQkJIF9fbGVuIC8gMik7CisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZW5kID0gc3RkOjpfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX21pZGRsZSwgX19sYXN0LAorCQkJCQkJCSAgICAgICBfX3ByZWQsCisJCQkJCQkJICAgICAgIF9fbGVuCisJCQkJCQkJICAgICAgIC0gX19sZW4gLyAyKTsKKyAgICAgIHN0ZDo6cm90YXRlKF9fYmVnaW4sIF9fbWlkZGxlLCBfX2VuZCk7CisgICAgICBzdGQ6OmFkdmFuY2UoX19iZWdpbiwgc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19lbmQpKTsKKyAgICAgIHJldHVybiBfX2JlZ2luOworICAgIH0KKworICAvLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbi4uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwKKwkgICB0eXBlbmFtZSBfRGlzdGFuY2U+CisgICAgX0ZvcndhcmRJdGVyYXRvcgorICAgIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCisJCQkJX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJCQkJX1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xlbiwKKwkJCQlfUG9pbnRlciBfX2J1ZmZlciwKKwkJCQlfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKKyAgICB7CisgICAgICBpZiAoX19sZW4gPD0gX19idWZmZXJfc2l6ZSkKKwl7CisJICBfRm9yd2FyZEl0ZXJhdG9yIF9fcmVzdWx0MSA9IF9fZmlyc3Q7CisJICBfUG9pbnRlciBfX3Jlc3VsdDIgPSBfX2J1ZmZlcjsKKwkgIGZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQorCSAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKKwkgICAgICB7CisJCSpfX3Jlc3VsdDEgPSBfR0xJQkNYWF9NT1ZFKCpfX2ZpcnN0KTsKKwkJKytfX3Jlc3VsdDE7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgeworCQkqX19yZXN1bHQyID0gX0dMSUJDWFhfTU9WRSgqX19maXJzdCk7CisJCSsrX19yZXN1bHQyOworCSAgICAgIH0KKwkgIF9HTElCQ1hYX01PVkUzKF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9fcmVzdWx0MSk7CisJICByZXR1cm4gX19yZXN1bHQxOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkZGxlID0gX19maXJzdDsKKwkgIHN0ZDo6YWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsKKwkgIF9Gb3J3YXJkSXRlcmF0b3IgX19iZWdpbiA9CisJICAgIHN0ZDo6X19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ByZWQsCisJCQkJCSAgICAgX19sZW4gLyAyLCBfX2J1ZmZlciwKKwkJCQkJICAgICBfX2J1ZmZlcl9zaXplKTsKKwkgIF9Gb3J3YXJkSXRlcmF0b3IgX19lbmQgPQorCSAgICBzdGQ6Ol9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX3ByZWQsCisJCQkJCSAgICAgX19sZW4gLSBfX2xlbiAvIDIsCisJCQkJCSAgICAgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOworCSAgc3RkOjpyb3RhdGUoX19iZWdpbiwgX19taWRkbGUsIF9fZW5kKTsKKwkgIHN0ZDo6YWR2YW5jZShfX2JlZ2luLCBzdGQ6OmRpc3RhbmNlKF9fbWlkZGxlLCBfX2VuZCkpOworCSAgcmV0dXJuIF9fYmVnaW47CisJfQorICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBNb3ZlIGVsZW1lbnRzIGZvciB3aGljaCBhIHByZWRpY2F0ZSBpcyB0cnVlIHRvIHRoZSBiZWdpbm5pbmcKKyAgICogICAgICAgICBvZiBhIHNlcXVlbmNlLCBwcmVzZXJ2aW5nIHJlbGF0aXZlIG9yZGVyaW5nLgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIHByZWQgICAgQSBwcmVkaWNhdGUgZnVuY3Rvci4KKyAgICogIEByZXR1cm4gIEFuIGl0ZXJhdG9yIEBwIG1pZGRsZSBzdWNoIHRoYXQgQHAgcHJlZChpKSBpcyB0cnVlIGZvciBlYWNoCisgICAqICBpdGVyYXRvciBAcCBpIGluIHRoZSByYW5nZSBAcCBbZmlyc3QsbWlkZGxlKSBhbmQgZmFsc2UgZm9yIGVhY2ggQHAgaQorICAgKiAgaW4gdGhlIHJhbmdlIEBwIFttaWRkbGUsbGFzdCkuCisgICAqCisgICAqICBQZXJmb3JtcyB0aGUgc2FtZSBmdW5jdGlvbiBhcyBAcCBwYXJ0aXRpb24oKSB3aXRoIHRoZSBhZGRpdGlvbmFsCisgICAqICBndWFyYW50ZWUgdGhhdCB0aGUgcmVsYXRpdmUgb3JkZXJpbmcgb2YgZWxlbWVudHMgaW4gZWFjaCBncm91cCBpcworICAgKiAgcHJlc2VydmVkLCBzbyBhbnkgdHdvIGVsZW1lbnRzIEBwIHggYW5kIEBwIHkgaW4gdGhlIHJhbmdlCisgICAqICBAcCBbZmlyc3QsbGFzdCkgc3VjaCB0aGF0IEBwIHByZWQoeCk9PXByZWQoeSkgd2lsbCBoYXZlIHRoZSBzYW1lCisgICAqICByZWxhdGl2ZSBvcmRlcmluZyBhZnRlciBjYWxsaW5nIEBwIHN0YWJsZV9wYXJ0aXRpb24oKS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBfRm9yd2FyZEl0ZXJhdG9yCisgICAgc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQkgICAgIF9QcmVkaWNhdGUgX19wcmVkKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9VbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X1ByZWRpY2F0ZSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCisJcmV0dXJuIF9fZmlyc3Q7CisgICAgICBlbHNlCisJeworCSAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwkgICAgX1ZhbHVlVHlwZTsKKwkgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKwkgICAgX0Rpc3RhbmNlVHlwZTsKKworCSAgX1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyYXRvciwgX1ZhbHVlVHlwZT4gX19idWYoX19maXJzdCwKKwkJCQkJCQkJX19sYXN0KTsKKwlpZiAoX19idWYuc2l6ZSgpID4gMCkKKwkgIHJldHVybgorCSAgICBzdGQ6Ol9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKKwkJCQkJICBfRGlzdGFuY2VUeXBlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpLAorCQkJCQkgIF9fYnVmLmJlZ2luKCksCisJCQkJCSAgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpKTsKKwllbHNlCisJICByZXR1cm4KKwkgICAgc3RkOjpfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKKwkJCQkJIF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSkpOworCX0KKyAgICB9CisKKyAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSBzb3J0IHJvdXRpbmVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CisgICAgdm9pZAorICAgIF9faGVhcF9zZWxlY3QoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCisJCSAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbWlkZGxlLAorCQkgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgc3RkOjptYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUpOworICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kpCisJaWYgKCpfX2kgPCAqX19maXJzdCkKKwkgIHN0ZDo6X19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pKTsKKyAgICB9CisKKyAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSBzb3J0IHJvdXRpbmVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQKKyAgICBfX2hlYXBfc2VsZWN0KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAorCQkgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX21pZGRsZSwKKwkJICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgc3RkOjptYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CisgICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2kgPSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKKwlpZiAoX19jb21wKCpfX2ksICpfX2ZpcnN0KSkKKwkgIHN0ZDo6X19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfX2NvbXApOworICAgIH0KKworICAvLyBwYXJ0aWFsX3NvcnQKKworICAvKioKKyAgICogIEBicmllZiBDb3B5IHRoZSBzbWFsbGVzdCBlbGVtZW50cyBvZiBhIHNlcXVlbmNlLgorICAgKiAgQGluZ3JvdXAgc29ydGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGZpcnN0ICAgQW4gaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QgICAgQW5vdGhlciBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgcmVzdWx0X2ZpcnN0ICAgQSByYW5kb20tYWNjZXNzIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICByZXN1bHRfbGFzdCAgICBBbm90aGVyIHJhbmRvbS1hY2Nlc3MgaXRlcmF0b3IuCisgICAqICBAcmV0dXJuICAgQW4gaXRlcmF0b3IgaW5kaWNhdGluZyB0aGUgZW5kIG9mIHRoZSByZXN1bHRpbmcgc2VxdWVuY2UuCisgICAqCisgICAqICBDb3BpZXMgYW5kIHNvcnRzIHRoZSBzbWFsbGVzdCBOIHZhbHVlcyBmcm9tIHRoZSByYW5nZSBAcCBbZmlyc3QsbGFzdCkKKyAgICogIHRvIHRoZSByYW5nZSBiZWdpbm5pbmcgYXQgQHAgcmVzdWx0X2ZpcnN0LCB3aGVyZSB0aGUgbnVtYmVyIG9mCisgICAqICBlbGVtZW50cyB0byBiZSBjb3BpZWQsIEBwIE4sIGlzIHRoZSBzbWFsbGVyIG9mIEBwIChsYXN0LWZpcnN0KSBhbmQKKyAgICogIEBwIChyZXN1bHRfbGFzdC1yZXN1bHRfZmlyc3QpLgorICAgKiAgQWZ0ZXIgdGhlIHNvcnQgaWYgQHAgaSBhbmQgQGogYXJlIGl0ZXJhdG9ycyBpbiB0aGUgcmFuZ2UKKyAgICogIEBwIFtyZXN1bHRfZmlyc3QscmVzdWx0X2ZpcnN0K04pIHN1Y2ggdGhhdCBAaSBwcmVjZWRlcyBAaiB0aGVuCisgICAqICBAcCAqajwqaSBpcyBmYWxzZS4KKyAgICogIFRoZSB2YWx1ZSByZXR1cm5lZCBpcyBAcCByZXN1bHRfZmlyc3QrTi4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KKyAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IKKyAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCSAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdF9maXJzdCwKKwkJICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0X2xhc3QpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJX0lucHV0VmFsdWVUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9PdXRwdXRWYWx1ZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKwlfRGlzdGFuY2VUeXBlOworCisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0NvbnZlcnRpYmxlQ29uY2VwdDxfSW5wdXRWYWx1ZVR5cGUsCisJCQkJICBfT3V0cHV0VmFsdWVUeXBlPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5PcENvbmNlcHQ8X0lucHV0VmFsdWVUeXBlLAorCQkJCSAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRWYWx1ZVR5cGU+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbkNvbXBhcmFibGVDb25jZXB0PF9PdXRwdXRWYWx1ZVR5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X2xhc3QpOworCisgICAgICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkKKwlyZXR1cm4gX19yZXN1bHRfbGFzdDsKKyAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKKyAgICAgIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0KQorCXsKKwkgICpfX3Jlc3VsdF9yZWFsX2xhc3QgPSAqX19maXJzdDsKKwkgICsrX19yZXN1bHRfcmVhbF9sYXN0OworCSAgKytfX2ZpcnN0OworCX0KKyAgICAgIHN0ZDo6bWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOworICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQorCXsKKwkgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdF9maXJzdCkKKwkgICAgc3RkOjpfX2FkanVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAorCQkJICAgICAgIF9EaXN0YW5jZVR5cGUoX19yZXN1bHRfcmVhbF9sYXN0CisJCQkJCSAgICAgLSBfX3Jlc3VsdF9maXJzdCksCisJCQkgICAgICAgX0lucHV0VmFsdWVUeXBlKCpfX2ZpcnN0KSk7CisJICArK19fZmlyc3Q7CisJfQorICAgICAgc3RkOjpzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7CisgICAgICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0OworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBDb3B5IHRoZSBzbWFsbGVzdCBlbGVtZW50cyBvZiBhIHNlcXVlbmNlIHVzaW5nIGEgcHJlZGljYXRlIGZvcgorICAgKiAgICAgICAgIGNvbXBhcmlzb24uCisgICAqICBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgICBBbm90aGVyIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICByZXN1bHRfZmlyc3QgICBBIHJhbmRvbS1hY2Nlc3MgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIHJlc3VsdF9sYXN0ICAgIEFub3RoZXIgcmFuZG9tLWFjY2VzcyBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgY29tcCAgICBBIGNvbXBhcmlzb24gZnVuY3Rvci4KKyAgICogIEByZXR1cm4gICBBbiBpdGVyYXRvciBpbmRpY2F0aW5nIHRoZSBlbmQgb2YgdGhlIHJlc3VsdGluZyBzZXF1ZW5jZS4KKyAgICoKKyAgICogIENvcGllcyBhbmQgc29ydHMgdGhlIHNtYWxsZXN0IE4gdmFsdWVzIGZyb20gdGhlIHJhbmdlIEBwIFtmaXJzdCxsYXN0KQorICAgKiAgdG8gdGhlIHJhbmdlIGJlZ2lubmluZyBhdCBAcCByZXN1bHRfZmlyc3QsIHdoZXJlIHRoZSBudW1iZXIgb2YKKyAgICogIGVsZW1lbnRzIHRvIGJlIGNvcGllZCwgQHAgTiwgaXMgdGhlIHNtYWxsZXIgb2YgQHAgKGxhc3QtZmlyc3QpIGFuZAorICAgKiAgQHAgKHJlc3VsdF9sYXN0LXJlc3VsdF9maXJzdCkuCisgICAqICBBZnRlciB0aGUgc29ydCBpZiBAcCBpIGFuZCBAaiBhcmUgaXRlcmF0b3JzIGluIHRoZSByYW5nZQorICAgKiAgQHAgW3Jlc3VsdF9maXJzdCxyZXN1bHRfZmlyc3QrTikgc3VjaCB0aGF0IEBpIHByZWNlZGVzIEBqIHRoZW4KKyAgICogIEBwIGNvbXAoKmosKmkpIGlzIGZhbHNlLgorICAgKiAgVGhlIHZhbHVlIHJldHVybmVkIGlzIEBwIHJlc3VsdF9maXJzdCtOLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IKKyAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCSAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdF9maXJzdCwKKwkJICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0X2xhc3QsCisJCSAgICAgIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwlfSW5wdXRWYWx1ZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJX091dHB1dFZhbHVlVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorCV9EaXN0YW5jZVR5cGU7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8CisJCQkJICBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Db252ZXJ0aWJsZUNvbmNlcHQ8X0lucHV0VmFsdWVUeXBlLAorCQkJCSAgX091dHB1dFZhbHVlVHlwZT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X0NvbXBhcmUsCisJCQkJICBfSW5wdXRWYWx1ZVR5cGUsIF9PdXRwdXRWYWx1ZVR5cGU+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9Db21wYXJlLAorCQkJCSAgX091dHB1dFZhbHVlVHlwZSwgX091dHB1dFZhbHVlVHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfbGFzdCk7CisKKyAgICAgIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KQorCXJldHVybiBfX3Jlc3VsdF9sYXN0OworICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0X3JlYWxfbGFzdCA9IF9fcmVzdWx0X2ZpcnN0OworICAgICAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpCisJeworCSAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OworCSAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CisJICArK19fZmlyc3Q7CisJfQorICAgICAgc3RkOjptYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKKyAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwl7CisJICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHRfZmlyc3QpKQorCSAgICBzdGQ6Ol9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZVR5cGUoMCksCisJCQkgICAgICAgX0Rpc3RhbmNlVHlwZShfX3Jlc3VsdF9yZWFsX2xhc3QKKwkJCQkJICAgICAtIF9fcmVzdWx0X2ZpcnN0KSwKKwkJCSAgICAgICBfSW5wdXRWYWx1ZVR5cGUoKl9fZmlyc3QpLAorCQkJICAgICAgIF9fY29tcCk7CisJICArK19fZmlyc3Q7CisJfQorICAgICAgc3RkOjpzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKKyAgICAgIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgc29ydCByb3V0aW5lLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CisgICAgdm9pZAorICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9fdmFsID0gX0dMSUJDWFhfTU9WRSgqX19sYXN0KTsKKyAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX25leHQgPSBfX2xhc3Q7CisgICAgICAtLV9fbmV4dDsKKyAgICAgIHdoaWxlIChfX3ZhbCA8ICpfX25leHQpCisJeworCSAgKl9fbGFzdCA9IF9HTElCQ1hYX01PVkUoKl9fbmV4dCk7CisJICBfX2xhc3QgPSBfX25leHQ7CisJICAtLV9fbmV4dDsKKwl9CisgICAgICAqX19sYXN0ID0gX0dMSUJDWFhfTU9WRShfX3ZhbCk7CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgc29ydCByb3V0aW5lLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQKKyAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCisJCQkgICAgICBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwlfX3ZhbCA9IF9HTElCQ1hYX01PVkUoKl9fbGFzdCk7CisgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19uZXh0ID0gX19sYXN0OworICAgICAgLS1fX25leHQ7CisgICAgICB3aGlsZSAoX19jb21wKF9fdmFsLCAqX19uZXh0KSkKKwl7CisJICAqX19sYXN0ID0gX0dMSUJDWFhfTU9WRSgqX19uZXh0KTsKKwkgIF9fbGFzdCA9IF9fbmV4dDsKKwkgIC0tX19uZXh0OworCX0KKyAgICAgICpfX2xhc3QgPSBfR0xJQkNYWF9NT1ZFKF9fdmFsKTsKKyAgICB9CisKKyAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSBzb3J0IHJvdXRpbmUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KKyAgICB2b2lkCisgICAgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKKwkJICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwlyZXR1cm47CisKKyAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKKwl7CisJICBpZiAoKl9faSA8ICpfX2ZpcnN0KQorCSAgICB7CisJICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwkJX192YWwgPSBfR0xJQkNYWF9NT1ZFKCpfX2kpOworCSAgICAgIF9HTElCQ1hYX01PVkVfQkFDS1dBUkQzKF9fZmlyc3QsIF9faSwgX19pICsgMSk7CisJICAgICAgKl9fZmlyc3QgPSBfR0xJQkNYWF9NT1ZFKF9fdmFsKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICBzdGQ6Ol9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pKTsKKwl9CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgc29ydCByb3V0aW5lLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQKKyAgICBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAorCQkgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKKworICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQorCXsKKwkgIGlmIChfX2NvbXAoKl9faSwgKl9fZmlyc3QpKQorCSAgICB7CisJICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwkJX192YWwgPSBfR0xJQkNYWF9NT1ZFKCpfX2kpOworCSAgICAgIF9HTElCQ1hYX01PVkVfQkFDS1dBUkQzKF9fZmlyc3QsIF9faSwgX19pICsgMSk7CisJICAgICAgKl9fZmlyc3QgPSBfR0xJQkNYWF9NT1ZFKF9fdmFsKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICBzdGQ6Ol9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX2NvbXApOworCX0KKyAgICB9CisKKyAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSBzb3J0IHJvdXRpbmUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAorCQkJICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisKKyAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQorCXN0ZDo6X191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2kpOworICAgIH0KKworICAvLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIHNvcnQgcm91dGluZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAorCQkJICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTsKKworICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCisJc3RkOjpfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX19jb21wKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAZG9jdG9kbworICAgKiAgVGhpcyBjb250cm9scyBzb21lIGFzcGVjdCBvZiB0aGUgc29ydCByb3V0aW5lcy4KKyAgKi8KKyAgZW51bSB7IF9TX3RocmVzaG9sZCA9IDE2IH07CisKKyAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSBzb3J0IHJvdXRpbmUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KKyAgICB2b2lkCisgICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKKwkJCSAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBpbnQoX1NfdGhyZXNob2xkKSkKKwl7CisJICBzdGQ6Ol9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIGludChfU190aHJlc2hvbGQpKTsKKwkgIHN0ZDo6X191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIGludChfU190aHJlc2hvbGQpLCBfX2xhc3QpOworCX0KKyAgICAgIGVsc2UKKwlzdGQ6Ol9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKKyAgICB9CisKKyAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSBzb3J0IHJvdXRpbmUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZAorICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCisJCQkgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBpbnQoX1NfdGhyZXNob2xkKSkKKwl7CisJICBzdGQ6Ol9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIGludChfU190aHJlc2hvbGQpLCBfX2NvbXApOworCSAgc3RkOjpfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgaW50KF9TX3RocmVzaG9sZCksIF9fbGFzdCwKKwkJCQkJICBfX2NvbXApOworCX0KKyAgICAgIGVsc2UKKwlzdGQ6Ol9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOworICAgIH0KKworICAvLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbi4uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IKKyAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCisJCQkgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIGNvbnN0IF9UcCYgX19waXZvdCkKKyAgICB7CisgICAgICB3aGlsZSAodHJ1ZSkKKwl7CisJICB3aGlsZSAoKl9fZmlyc3QgPCBfX3Bpdm90KQorCSAgICArK19fZmlyc3Q7CisJICAtLV9fbGFzdDsKKwkgIHdoaWxlIChfX3Bpdm90IDwgKl9fbGFzdCkKKwkgICAgLS1fX2xhc3Q7CisJICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKKwkgICAgcmV0dXJuIF9fZmlyc3Q7CisJICBzdGQ6Oml0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOworCSAgKytfX2ZpcnN0OworCX0KKyAgICB9CisKKyAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24uLi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcgorICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKKwkJCSAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKKwkJCSAgY29uc3QgX1RwJiBfX3Bpdm90LCBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgd2hpbGUgKHRydWUpCisJeworCSAgd2hpbGUgKF9fY29tcCgqX19maXJzdCwgX19waXZvdCkpCisJICAgICsrX19maXJzdDsKKwkgIC0tX19sYXN0OworCSAgd2hpbGUgKF9fY29tcChfX3Bpdm90LCAqX19sYXN0KSkKKwkgICAgLS1fX2xhc3Q7CisJICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKKwkgICAgcmV0dXJuIF9fZmlyc3Q7CisJICBzdGQ6Oml0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOworCSAgKytfX2ZpcnN0OworCX0KKyAgICB9CisKKyAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24uLi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgorICAgIGlubGluZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IKKyAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb25fcGl2b3QoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCisJCQkJX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKKyAgICAgIHN0ZDo6X19tb3ZlX21lZGlhbl9maXJzdChfX2ZpcnN0LCBfX21pZCwgKF9fbGFzdCAtIDEpKTsKKyAgICAgIHJldHVybiBzdGQ6Ol9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0ICsgMSwgX19sYXN0LCAqX19maXJzdCk7CisgICAgfQorCisKKyAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24uLi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yCisgICAgX191bmd1YXJkZWRfcGFydGl0aW9uX3Bpdm90KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAorCQkJCV9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKKyAgICAgIHN0ZDo6X19tb3ZlX21lZGlhbl9maXJzdChfX2ZpcnN0LCBfX21pZCwgKF9fbGFzdCAtIDEpLCBfX2NvbXApOworICAgICAgcmV0dXJuIHN0ZDo6X191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QgKyAxLCBfX2xhc3QsICpfX2ZpcnN0LCBfX2NvbXApOworICAgIH0KKworICAvLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIHNvcnQgcm91dGluZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2l6ZT4KKyAgICB2b2lkCisgICAgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKKwkJICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAorCQkgICAgIF9TaXplIF9fZGVwdGhfbGltaXQpCisgICAgeworICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBpbnQoX1NfdGhyZXNob2xkKSkKKwl7CisJICBpZiAoX19kZXB0aF9saW1pdCA9PSAwKQorCSAgICB7CisJICAgICAgX0dMSUJDWFhfU1REX1A6OnBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCk7CisJICAgICAgcmV0dXJuOworCSAgICB9CisJICAtLV9fZGVwdGhfbGltaXQ7CisJICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19jdXQgPQorCSAgICBzdGQ6Ol9fdW5ndWFyZGVkX3BhcnRpdGlvbl9waXZvdChfX2ZpcnN0LCBfX2xhc3QpOworCSAgc3RkOjpfX2ludHJvc29ydF9sb29wKF9fY3V0LCBfX2xhc3QsIF9fZGVwdGhfbGltaXQpOworCSAgX19sYXN0ID0gX19jdXQ7CisJfQorICAgIH0KKworICAvLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIHNvcnQgcm91dGluZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZAorICAgIF9faW50cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCisJCSAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKKwkJICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0LCBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBpbnQoX1NfdGhyZXNob2xkKSkKKwl7CisJICBpZiAoX19kZXB0aF9saW1pdCA9PSAwKQorCSAgICB7CisJICAgICAgX0dMSUJDWFhfU1REX1A6OnBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCwgX19jb21wKTsKKwkgICAgICByZXR1cm47CisJICAgIH0KKwkgIC0tX19kZXB0aF9saW1pdDsKKwkgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2N1dCA9CisJICAgIHN0ZDo6X191bmd1YXJkZWRfcGFydGl0aW9uX3Bpdm90KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKKwkgIHN0ZDo6X19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2RlcHRoX2xpbWl0LCBfX2NvbXApOworCSAgX19sYXN0ID0gX19jdXQ7CisJfQorICAgIH0KKworICAvLyBzb3J0CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2l6ZT4KKyAgICB2b2lkCisgICAgX19pbnRyb3NlbGVjdChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbnRoLAorCQkgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9TaXplIF9fZGVwdGhfbGltaXQpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisKKyAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykKKwl7CisJICBpZiAoX19kZXB0aF9saW1pdCA9PSAwKQorCSAgICB7CisJICAgICAgc3RkOjpfX2hlYXBfc2VsZWN0KF9fZmlyc3QsIF9fbnRoICsgMSwgX19sYXN0KTsKKworCSAgICAgIC8vIFBsYWNlIHRoZSBudGggbGFyZ2VzdCBlbGVtZW50IGluIGl0cyBmaW5hbCBwb3NpdGlvbi4KKwkgICAgICBzdGQ6Oml0ZXJfc3dhcChfX2ZpcnN0LCBfX250aCk7CisJICAgICAgcmV0dXJuOworCSAgICB9CisJICAtLV9fZGVwdGhfbGltaXQ7CisJICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19jdXQgPQorCSAgICBzdGQ6Ol9fdW5ndWFyZGVkX3BhcnRpdGlvbl9waXZvdChfX2ZpcnN0LCBfX2xhc3QpOworCSAgaWYgKF9fY3V0IDw9IF9fbnRoKQorCSAgICBfX2ZpcnN0ID0gX19jdXQ7CisJICBlbHNlCisJICAgIF9fbGFzdCA9IF9fY3V0OworCX0KKyAgICAgIHN0ZDo6X19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB2b2lkCisgICAgX19pbnRyb3NlbGVjdChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbnRoLAorCQkgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9TaXplIF9fZGVwdGhfbGltaXQsCisJCSAgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlOworCisgICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDMpCisJeworCSAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkKKwkgICAgeworCSAgICAgIHN0ZDo6X19oZWFwX3NlbGVjdChfX2ZpcnN0LCBfX250aCArIDEsIF9fbGFzdCwgX19jb21wKTsKKwkgICAgICAvLyBQbGFjZSB0aGUgbnRoIGxhcmdlc3QgZWxlbWVudCBpbiBpdHMgZmluYWwgcG9zaXRpb24uCisJICAgICAgc3RkOjppdGVyX3N3YXAoX19maXJzdCwgX19udGgpOworCSAgICAgIHJldHVybjsKKwkgICAgfQorCSAgLS1fX2RlcHRoX2xpbWl0OworCSAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fY3V0ID0KKwkgICAgc3RkOjpfX3VuZ3VhcmRlZF9wYXJ0aXRpb25fcGl2b3QoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOworCSAgaWYgKF9fY3V0IDw9IF9fbnRoKQorCSAgICBfX2ZpcnN0ID0gX19jdXQ7CisJICBlbHNlCisJICAgIF9fbGFzdCA9IF9fY3V0OworCX0KKyAgICAgIHN0ZDo6X19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CisgICAgfQorCisgIC8vIG50aF9lbGVtZW50CisKKyAgLy8gbG93ZXJfYm91bmQgbW92ZWQgdG8gc3RsX2FsZ29iYXNlLmgKKworICAvKioKKyAgICogIEBicmllZiBGaW5kcyB0aGUgZmlyc3QgcG9zaXRpb24gaW4gd2hpY2ggQGEgdmFsIGNvdWxkIGJlIGluc2VydGVkCisgICAqICAgICAgICAgd2l0aG91dCBjaGFuZ2luZyB0aGUgb3JkZXJpbmcuCisgICAqICBAaW5ncm91cCBiaW5hcnlfc2VhcmNoX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgICBBbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICB2YWwgICAgIFRoZSBzZWFyY2ggdGVybS4KKyAgICogIEBwYXJhbSAgY29tcCAgICBBIGZ1bmN0b3IgdG8gdXNlIGZvciBjb21wYXJpc29ucy4KKyAgICogIEByZXR1cm4gQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IGVsZW1lbnQgPGVtPm5vdCBsZXNzCisgICAqICAgICAgICAgICB0aGFuPC9lbT4gQGEgdmFsLCBvciBlbmQoKSBpZiBldmVyeSBlbGVtZW50IGlzIGxlc3MKKyAgICogICAgICAgICAgIHRoYW4gQGEgdmFsLgorICAgKiAgQGluZ3JvdXAgYmluYXJ5X3NlYXJjaF9hbGdvcml0aG1zCisgICAqCisgICAqICBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBzaG91bGQgaGF2ZSB0aGUgc2FtZSBlZmZlY3RzIG9uIG9yZGVyaW5nIGFzCisgICAqICB0aGUgZnVuY3Rpb24gdXNlZCBmb3IgdGhlIGluaXRpYWwgc29ydC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfRm9yd2FyZEl0ZXJhdG9yCisgICAgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkJY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKwlfRGlzdGFuY2VUeXBlOworCisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9Db21wYXJlLAorCQkJCSAgX1ZhbHVlVHlwZSwgX1RwPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19wYXJ0aXRpb25lZF9sb3dlcl9wcmVkKF9fZmlyc3QsIF9fbGFzdCwKKwkJCQkJCV9fdmFsLCBfX2NvbXApOworCisgICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOworICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkZGxlOworCisgICAgICB3aGlsZSAoX19sZW4gPiAwKQorCXsKKwkgIF9faGFsZiA9IF9fbGVuID4+IDE7CisJICBfX21pZGRsZSA9IF9fZmlyc3Q7CisJICBzdGQ6OmFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CisJICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKQorCSAgICB7CisJICAgICAgX19maXJzdCA9IF9fbWlkZGxlOworCSAgICAgICsrX19maXJzdDsKKwkgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKKwkgICAgfQorCSAgZWxzZQorCSAgICBfX2xlbiA9IF9faGFsZjsKKwl9CisgICAgICByZXR1cm4gX19maXJzdDsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgRmluZHMgdGhlIGxhc3QgcG9zaXRpb24gaW4gd2hpY2ggQGEgdmFsIGNvdWxkIGJlIGluc2VydGVkCisgICAqICAgICAgICAgd2l0aG91dCBjaGFuZ2luZyB0aGUgb3JkZXJpbmcuCisgICAqICBAaW5ncm91cCBiaW5hcnlfc2VhcmNoX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgICBBbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICB2YWwgICAgIFRoZSBzZWFyY2ggdGVybS4KKyAgICogIEByZXR1cm4gIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50IGdyZWF0ZXIgdGhhbiBAYSB2YWwsCisgICAqICAgICAgICAgICBvciBlbmQoKSBpZiBubyBlbGVtZW50cyBhcmUgZ3JlYXRlciB0aGFuIEBhIHZhbC4KKyAgICogIEBpbmdyb3VwIGJpbmFyeV9zZWFyY2hfYWxnb3JpdGhtcworICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CisgICAgX0ZvcndhcmRJdGVyYXRvcgorICAgIHVwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJCWNvbnN0IF9UcCYgX192YWwpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorCV9EaXN0YW5jZVR5cGU7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuT3BDb25jZXB0PF9UcCwgX1ZhbHVlVHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfcGFydGl0aW9uZWRfdXBwZXIoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CisKKyAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWRkbGU7CisKKyAgICAgIHdoaWxlIChfX2xlbiA+IDApCisJeworCSAgX19oYWxmID0gX19sZW4gPj4gMTsKKwkgIF9fbWlkZGxlID0gX19maXJzdDsKKwkgIHN0ZDo6YWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKKwkgIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKKwkgICAgX19sZW4gPSBfX2hhbGY7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CisJICAgICAgKytfX2ZpcnN0OworCSAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOworCSAgICB9CisJfQorICAgICAgcmV0dXJuIF9fZmlyc3Q7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIEZpbmRzIHRoZSBsYXN0IHBvc2l0aW9uIGluIHdoaWNoIEBhIHZhbCBjb3VsZCBiZSBpbnNlcnRlZAorICAgKiAgICAgICAgIHdpdGhvdXQgY2hhbmdpbmcgdGhlIG9yZGVyaW5nLgorICAgKiAgQGluZ3JvdXAgYmluYXJ5X3NlYXJjaF9hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGZpcnN0ICAgQW4gaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QgICAgQW5vdGhlciBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgdmFsICAgICBUaGUgc2VhcmNoIHRlcm0uCisgICAqICBAcGFyYW0gIGNvbXAgICAgQSBmdW5jdG9yIHRvIHVzZSBmb3IgY29tcGFyaXNvbnMuCisgICAqICBAcmV0dXJuICBBbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZmlyc3QgZWxlbWVudCBncmVhdGVyIHRoYW4gQGEgdmFsLAorICAgKiAgICAgICAgICAgb3IgZW5kKCkgaWYgbm8gZWxlbWVudHMgYXJlIGdyZWF0ZXIgdGhhbiBAYSB2YWwuCisgICAqICBAaW5ncm91cCBiaW5hcnlfc2VhcmNoX2FsZ29yaXRobXMKKyAgICoKKyAgICogIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIHNob3VsZCBoYXZlIHRoZSBzYW1lIGVmZmVjdHMgb24gb3JkZXJpbmcgYXMKKyAgICogIHRoZSBmdW5jdGlvbiB1c2VkIGZvciB0aGUgaW5pdGlhbCBzb3J0LgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9Gb3J3YXJkSXRlcmF0b3IKKyAgICB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQljb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorCV9EaXN0YW5jZVR5cGU7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X0NvbXBhcmUsCisJCQkJICBfVHAsIF9WYWx1ZVR5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3BhcnRpdGlvbmVkX3VwcGVyX3ByZWQoX19maXJzdCwgX19sYXN0LAorCQkJCQkJX192YWwsIF9fY29tcCk7CisKKyAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWRkbGU7CisKKyAgICAgIHdoaWxlIChfX2xlbiA+IDApCisJeworCSAgX19oYWxmID0gX19sZW4gPj4gMTsKKwkgIF9fbWlkZGxlID0gX19maXJzdDsKKwkgIHN0ZDo6YWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKKwkgIGlmIChfX2NvbXAoX192YWwsICpfX21pZGRsZSkpCisJICAgIF9fbGVuID0gX19oYWxmOworCSAgZWxzZQorCSAgICB7CisJICAgICAgX19maXJzdCA9IF9fbWlkZGxlOworCSAgICAgICsrX19maXJzdDsKKwkgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiBfX2ZpcnN0OworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBGaW5kcyB0aGUgbGFyZ2VzdCBzdWJyYW5nZSBpbiB3aGljaCBAYSB2YWwgY291bGQgYmUgaW5zZXJ0ZWQKKyAgICogICAgICAgICBhdCBhbnkgcGxhY2UgaW4gaXQgd2l0aG91dCBjaGFuZ2luZyB0aGUgb3JkZXJpbmcuCisgICAqICBAaW5ncm91cCBiaW5hcnlfc2VhcmNoX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgICBBbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICB2YWwgICAgIFRoZSBzZWFyY2ggdGVybS4KKyAgICogIEByZXR1cm4gIEFuIHBhaXIgb2YgaXRlcmF0b3JzIGRlZmluaW5nIHRoZSBzdWJyYW5nZS4KKyAgICogIEBpbmdyb3VwIGJpbmFyeV9zZWFyY2hfYWxnb3JpdGhtcworICAgKgorICAgKiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvCisgICAqICBAY29kZQorICAgKiAgICBzdGQ6Om1ha2VfcGFpcihsb3dlcl9ib3VuZChmaXJzdCwgbGFzdCwgdmFsKSwKKyAgICogICAgICAgICAgICAgICAgICAgdXBwZXJfYm91bmQoZmlyc3QsIGxhc3QsIHZhbCkpCisgICAqICBAZW5kY29kZQorICAgKiAgYnV0IGRvZXMgbm90IGFjdHVhbGx5IGNhbGwgdGhvc2UgZnVuY3Rpb25zLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CisgICAgcGFpcjxfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9yPgorICAgIGVxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJCWNvbnN0IF9UcCYgX192YWwpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorCV9EaXN0YW5jZVR5cGU7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuT3BDb25jZXB0PF9WYWx1ZVR5cGUsIF9UcD4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuT3BDb25jZXB0PF9UcCwgX1ZhbHVlVHlwZT4pCQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3BhcnRpdGlvbmVkX2xvd2VyKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3BhcnRpdGlvbmVkX3VwcGVyKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOyAgICAgIAorCisgICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOworICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CisKKyAgICAgIHdoaWxlIChfX2xlbiA+IDApCisJeworCSAgX19oYWxmID0gX19sZW4gPj4gMTsKKwkgIF9fbWlkZGxlID0gX19maXJzdDsKKwkgIHN0ZDo6YWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKKwkgIGlmICgqX19taWRkbGUgPCBfX3ZhbCkKKwkgICAgeworCSAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKKwkgICAgICArK19fZmlyc3Q7CisJICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CisJICAgIH0KKwkgIGVsc2UgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQorCSAgICBfX2xlbiA9IF9faGFsZjsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIF9fbGVmdCA9IHN0ZDo6bG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsKTsKKwkgICAgICBzdGQ6OmFkdmFuY2UoX19maXJzdCwgX19sZW4pOworCSAgICAgIF9fcmlnaHQgPSBzdGQ6OnVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFsKTsKKwkgICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9yPihfX2xlZnQsIF9fcmlnaHQpOworCSAgICB9CisJfQorICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvcj4oX19maXJzdCwgX19maXJzdCk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIEZpbmRzIHRoZSBsYXJnZXN0IHN1YnJhbmdlIGluIHdoaWNoIEBhIHZhbCBjb3VsZCBiZSBpbnNlcnRlZAorICAgKiAgICAgICAgIGF0IGFueSBwbGFjZSBpbiBpdCB3aXRob3V0IGNoYW5naW5nIHRoZSBvcmRlcmluZy4KKyAgICogIEBwYXJhbSAgZmlyc3QgICBBbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICB2YWwgICAgIFRoZSBzZWFyY2ggdGVybS4KKyAgICogIEBwYXJhbSAgY29tcCAgICBBIGZ1bmN0b3IgdG8gdXNlIGZvciBjb21wYXJpc29ucy4KKyAgICogIEByZXR1cm4gIEFuIHBhaXIgb2YgaXRlcmF0b3JzIGRlZmluaW5nIHRoZSBzdWJyYW5nZS4KKyAgICogIEBpbmdyb3VwIGJpbmFyeV9zZWFyY2hfYWxnb3JpdGhtcworICAgKgorICAgKiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvCisgICAqICBAY29kZQorICAgKiAgICBzdGQ6Om1ha2VfcGFpcihsb3dlcl9ib3VuZChmaXJzdCwgbGFzdCwgdmFsLCBjb21wKSwKKyAgICogICAgICAgICAgICAgICAgICAgdXBwZXJfYm91bmQoZmlyc3QsIGxhc3QsIHZhbCwgY29tcCkpCisgICAqICBAZW5kY29kZQorICAgKiAgYnV0IGRvZXMgbm90IGFjdHVhbGx5IGNhbGwgdGhvc2UgZnVuY3Rpb25zLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHBhaXI8X0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICBlcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQljb25zdCBfVHAmIF9fdmFsLAorCQlfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorCV9EaXN0YW5jZVR5cGU7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X0NvbXBhcmUsCisJCQkJICBfVmFsdWVUeXBlLCBfVHA+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9Db21wYXJlLAorCQkJCSAgX1RwLCBfVmFsdWVUeXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19wYXJ0aXRpb25lZF9sb3dlcl9wcmVkKF9fZmlyc3QsIF9fbGFzdCwKKwkJCQkJCV9fdmFsLCBfX2NvbXApOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3BhcnRpdGlvbmVkX3VwcGVyX3ByZWQoX19maXJzdCwgX19sYXN0LAorCQkJCQkJX192YWwsIF9fY29tcCk7CisKKyAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsKKworICAgICAgd2hpbGUgKF9fbGVuID4gMCkKKwl7CisJICBfX2hhbGYgPSBfX2xlbiA+PiAxOworCSAgX19taWRkbGUgPSBfX2ZpcnN0OworCSAgc3RkOjphZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOworCSAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkKKwkgICAgeworCSAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKKwkgICAgICArK19fZmlyc3Q7CisJICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CisJICAgIH0KKwkgIGVsc2UgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKKwkgICAgX19sZW4gPSBfX2hhbGY7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBfX2xlZnQgPSBzdGQ6Omxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCwgX19jb21wKTsKKwkgICAgICBzdGQ6OmFkdmFuY2UoX19maXJzdCwgX19sZW4pOworCSAgICAgIF9fcmlnaHQgPSBzdGQ6OnVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFsLCBfX2NvbXApOworCSAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0b3I+KF9fbGVmdCwgX19yaWdodCk7CisJICAgIH0KKwl9CisgICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9yPihfX2ZpcnN0LCBfX2ZpcnN0KTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgRGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGVsZW1lbnQgZXhpc3RzIGluIGEgcmFuZ2UuCisgICAqICBAaW5ncm91cCBiaW5hcnlfc2VhcmNoX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgICBBbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICB2YWwgICAgIFRoZSBzZWFyY2ggdGVybS4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgdmFsIChvciBpdHMgZXF1aXZhbGVudCkgaXMgaW4gW0BhIGZpcnN0LEBhIGxhc3QgXS4KKyAgICoKKyAgICogIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFjdHVhbGx5IHJldHVybiBhbiBpdGVyYXRvciB0byBAYSB2YWwuICBGb3IKKyAgICogIHRoYXQsIHVzZSBzdGQ6OmZpbmQgb3IgYSBjb250YWluZXIncyBzcGVjaWFsaXplZCBmaW5kIG1lbWJlciBmdW5jdGlvbnMuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICBib29sCisgICAgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuT3BDb25jZXB0PF9UcCwgX1ZhbHVlVHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfcGFydGl0aW9uZWRfbG93ZXIoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfcGFydGl0aW9uZWRfdXBwZXIoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CisKKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19pID0gc3RkOjpsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKKyAgICAgIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICEoX192YWwgPCAqX19pKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgRGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGVsZW1lbnQgZXhpc3RzIGluIGEgcmFuZ2UuCisgICAqICBAaW5ncm91cCBiaW5hcnlfc2VhcmNoX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgICBBbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICB2YWwgICAgIFRoZSBzZWFyY2ggdGVybS4KKyAgICogIEBwYXJhbSAgY29tcCAgICBBIGZ1bmN0b3IgdG8gdXNlIGZvciBjb21wYXJpc29ucy4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgdmFsIChvciBpdHMgZXF1aXZhbGVudCkgaXMgaW4gW0BhIGZpcnN0LEBhIGxhc3QgXS4KKyAgICoKKyAgICogIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFjdHVhbGx5IHJldHVybiBhbiBpdGVyYXRvciB0byBAYSB2YWwuICBGb3IKKyAgICogIHRoYXQsIHVzZSBzdGQ6OmZpbmQgb3IgYSBjb250YWluZXIncyBzcGVjaWFsaXplZCBmaW5kIG1lbWJlciBmdW5jdGlvbnMuCisgICAqCisgICAqICBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBzaG91bGQgaGF2ZSB0aGUgc2FtZSBlZmZlY3RzIG9uIG9yZGVyaW5nIGFzCisgICAqICB0aGUgZnVuY3Rpb24gdXNlZCBmb3IgdGhlIGluaXRpYWwgc29ydC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBib29sCisgICAgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQ29tcGFyZSwKKwkJCQkgIF9UcCwgX1ZhbHVlVHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfcGFydGl0aW9uZWRfbG93ZXJfcHJlZChfX2ZpcnN0LCBfX2xhc3QsCisJCQkJCQlfX3ZhbCwgX19jb21wKTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19wYXJ0aXRpb25lZF91cHBlcl9wcmVkKF9fZmlyc3QsIF9fbGFzdCwKKwkJCQkJCV9fdmFsLCBfX2NvbXApOworCisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9faSA9IHN0ZDo6bG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wKTsKKyAgICAgIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICFib29sKF9fY29tcChfX3ZhbCwgKl9faSkpOworICAgIH0KKworICAvLyBtZXJnZQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgbWVyZ2Ugcm91dGluZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMiwKKwkgICB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMz4KKyAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMworICAgIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjEgX19maXJzdDEsCisJCSAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjEgX19sYXN0MSwKKwkJICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMiBfX2ZpcnN0MiwKKwkJICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMiBfX2xhc3QyLAorCQkgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IzIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQorCXJldHVybiBzdGQ6OmNvcHlfYmFja3dhcmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsKKyAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQorCXJldHVybiBzdGQ6OmNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKKyAgICAgIC0tX19sYXN0MTsKKyAgICAgIC0tX19sYXN0MjsKKyAgICAgIHdoaWxlICh0cnVlKQorCXsKKwkgIGlmICgqX19sYXN0MiA8ICpfX2xhc3QxKQorCSAgICB7CisJICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKKwkgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKKwkJcmV0dXJuIHN0ZDo6Y29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CisJICAgICAgLS1fX2xhc3QxOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOworCSAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQorCQlyZXR1cm4gc3RkOjpjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19fbGFzdDEsIF9fcmVzdWx0KTsKKwkgICAgICAtLV9fbGFzdDI7CisJICAgIH0KKwl9CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgbWVyZ2Ugcm91dGluZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMiwKKwkgICB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMywgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjMKKyAgICBfX21lcmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IxIF9fZmlyc3QxLAorCQkgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IxIF9fbGFzdDEsCisJCSAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjIgX19maXJzdDIsCisJCSAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjIgX19sYXN0MiwKKwkJICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMyBfX3Jlc3VsdCwKKwkJICAgICBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCisJcmV0dXJuIHN0ZDo6Y29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOworICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCisJcmV0dXJuIHN0ZDo6Y29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOworICAgICAgLS1fX2xhc3QxOworICAgICAgLS1fX2xhc3QyOworICAgICAgd2hpbGUgKHRydWUpCisJeworCSAgaWYgKF9fY29tcCgqX19sYXN0MiwgKl9fbGFzdDEpKQorCSAgICB7CisJICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKKwkgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKKwkJcmV0dXJuIHN0ZDo6Y29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CisJICAgICAgLS1fX2xhc3QxOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOworCSAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQorCQlyZXR1cm4gc3RkOjpjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19fbGFzdDEsIF9fcmVzdWx0KTsKKwkgICAgICAtLV9fbGFzdDI7CisJICAgIH0KKwl9CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgbWVyZ2Ugcm91dGluZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMiwKKwkgICB0eXBlbmFtZSBfRGlzdGFuY2U+CisgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjEKKyAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMSBfX2ZpcnN0LAorCQkgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMSBfX21pZGRsZSwKKwkJICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjEgX19sYXN0LAorCQkgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAorCQkgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMiBfX2J1ZmZlciwKKwkJICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCisgICAgeworICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjIgX19idWZmZXJfZW5kOworICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMiAmJiBfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkKKwl7CisJICBfX2J1ZmZlcl9lbmQgPSBfR0xJQkNYWF9NT1ZFMyhfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CisJICBfR0xJQkNYWF9NT1ZFX0JBQ0tXQVJEMyhfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsKKwkgIHJldHVybiBfR0xJQkNYWF9NT1ZFMyhfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2ZpcnN0KTsKKwl9CisgICAgICBlbHNlIGlmIChfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkKKwl7CisJICBfX2J1ZmZlcl9lbmQgPSBfR0xJQkNYWF9NT1ZFMyhfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOworCSAgX0dMSUJDWFhfTU9WRTMoX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCk7CisJICByZXR1cm4gX0dMSUJDWFhfTU9WRV9CQUNLV0FSRDMoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKKwl9CisgICAgICBlbHNlCisJeworCSAgc3RkOjpyb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7CisJICBzdGQ6OmFkdmFuY2UoX19maXJzdCwgc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KSk7CisJICByZXR1cm4gX19maXJzdDsKKwl9CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgbWVyZ2Ugcm91dGluZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwKKwkgICB0eXBlbmFtZSBfUG9pbnRlcj4KKyAgICB2b2lkCisgICAgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fZmlyc3QsCisgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbWlkZGxlLAorCQkgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19sYXN0LAorCQkgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCisJCSAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQorICAgIHsKKyAgICAgIGlmIChfX2xlbjEgPD0gX19sZW4yICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKQorCXsKKwkgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IF9HTElCQ1hYX01PVkUzKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CisJICBfR0xJQkNYWF9TVERfUDo6bWVyZ2UoX0dMSUJDWFhfTUFLRV9NT1ZFX0lURVJBVE9SKF9fYnVmZmVyKSwKKwkJCQlfR0xJQkNYWF9NQUtFX01PVkVfSVRFUkFUT1IoX19idWZmZXJfZW5kKSwKKwkJCQlfR0xJQkNYWF9NQUtFX01PVkVfSVRFUkFUT1IoX19taWRkbGUpLAorCQkJCV9HTElCQ1hYX01BS0VfTU9WRV9JVEVSQVRPUihfX2xhc3QpLAorCQkJCV9fZmlyc3QpOworCX0KKyAgICAgIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKQorCXsKKwkgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IF9HTElCQ1hYX01PVkUzKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKKwkgIHN0ZDo6X19tZXJnZV9iYWNrd2FyZChfR0xJQkNYWF9NQUtFX01PVkVfSVRFUkFUT1IoX19maXJzdCksCisJCQkJX0dMSUJDWFhfTUFLRV9NT1ZFX0lURVJBVE9SKF9fbWlkZGxlKSwKKwkJCQlfR0xJQkNYWF9NQUtFX01PVkVfSVRFUkFUT1IoX19idWZmZXIpLAorCQkJCV9HTElCQ1hYX01BS0VfTU9WRV9JVEVSQVRPUihfX2J1ZmZlcl9lbmQpLAorCQkJCV9fbGFzdCk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19maXJzdF9jdXQgPSBfX2ZpcnN0OworCSAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKKwkgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKKwkgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKKwkgIGlmIChfX2xlbjEgPiBfX2xlbjIpCisJICAgIHsKKwkgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKKwkgICAgICBzdGQ6OmFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOworCSAgICAgIF9fc2Vjb25kX2N1dCA9IHN0ZDo6bG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwKKwkJCQkJICAgICAgKl9fZmlyc3RfY3V0KTsKKwkgICAgICBfX2xlbjIyID0gc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CisJICAgICAgc3RkOjphZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CisJICAgICAgX19maXJzdF9jdXQgPSBzdGQ6OnVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLAorCQkJCQkgICAgICpfX3NlY29uZF9jdXQpOworCSAgICAgIF9fbGVuMTEgPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKKwkgICAgfQorCSAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX25ld19taWRkbGUgPQorCSAgICBzdGQ6Ol9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0LAorCQkJCSAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMjIsIF9fYnVmZmVyLAorCQkJCSAgIF9fYnVmZmVyX3NpemUpOworCSAgc3RkOjpfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsCisJCQkJX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOworCSAgc3RkOjpfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsCisJCQkJX19sZW4xIC0gX19sZW4xMSwKKwkJCQlfX2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CisJfQorICAgIH0KKworICAvLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIG1lcmdlIHJvdXRpbmVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2UsIAorCSAgIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB2b2lkCisgICAgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fZmlyc3QsCisgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbWlkZGxlLAorCQkgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19sYXN0LAorCQkgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCisJCSAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplLAorCQkgICAgIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkKKwl7CisJICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBfR0xJQkNYWF9NT1ZFMyhfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOworCSAgX0dMSUJDWFhfU1REX1A6Om1lcmdlKF9HTElCQ1hYX01BS0VfTU9WRV9JVEVSQVRPUihfX2J1ZmZlciksCisJCQkJX0dMSUJDWFhfTUFLRV9NT1ZFX0lURVJBVE9SKF9fYnVmZmVyX2VuZCksCisJCQkJX0dMSUJDWFhfTUFLRV9NT1ZFX0lURVJBVE9SKF9fbWlkZGxlKSwKKwkJCQlfR0xJQkNYWF9NQUtFX01PVkVfSVRFUkFUT1IoX19sYXN0KSwKKwkJCQlfX2ZpcnN0LCBfX2NvbXApOworCX0KKyAgICAgIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKQorCXsKKwkgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IF9HTElCQ1hYX01PVkUzKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKKwkgIHN0ZDo6X19tZXJnZV9iYWNrd2FyZChfR0xJQkNYWF9NQUtFX01PVkVfSVRFUkFUT1IoX19maXJzdCksCisJCQkJX0dMSUJDWFhfTUFLRV9NT1ZFX0lURVJBVE9SKF9fbWlkZGxlKSwKKwkJCQlfR0xJQkNYWF9NQUtFX01PVkVfSVRFUkFUT1IoX19idWZmZXIpLAorCQkJCV9HTElCQ1hYX01BS0VfTU9WRV9JVEVSQVRPUihfX2J1ZmZlcl9lbmQpLAorCQkJCV9fbGFzdCxfX2NvbXApOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKKwkgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CisJICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CisJICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CisJICBpZiAoX19sZW4xID4gX19sZW4yKQorCSAgICB7CisJICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CisJICAgICAgc3RkOjphZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKKwkgICAgICBfX3NlY29uZF9jdXQgPSBzdGQ6Omxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCwKKwkJCQkJICAgICAgX19jb21wKTsKKwkgICAgICBfX2xlbjIyID0gc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CisJICAgICAgc3RkOjphZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CisJICAgICAgX19maXJzdF9jdXQgPSBzdGQ6OnVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LAorCQkJCQkgICAgIF9fY29tcCk7CisJICAgICAgX19sZW4xMSA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOworCSAgICB9CisJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbmV3X21pZGRsZSA9CisJICAgIHN0ZDo6X19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsCisJCQkJICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yMiwgX19idWZmZXIsCisJCQkJICAgX19idWZmZXJfc2l6ZSk7CisJICBzdGQ6Ol9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwKKwkJCQlfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKKwkgIHN0ZDo6X19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAorCQkJCV9fbGVuMSAtIF9fbGVuMTEsCisJCQkJX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIsCisJCQkJX19idWZmZXJfc2l6ZSwgX19jb21wKTsKKwl9CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgbWVyZ2Ugcm91dGluZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KKyAgICB2b2lkCisgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fZmlyc3QsCisJCQkgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbWlkZGxlLAorCQkJICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2xhc3QsCisJCQkgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yKQorICAgIHsKKyAgICAgIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKKwlyZXR1cm47CisgICAgICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpCisJeworCSAgaWYgKCpfX21pZGRsZSA8ICpfX2ZpcnN0KQorCSAgICBzdGQ6Oml0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CisJICByZXR1cm47CisJfQorICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CisgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOworICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOworICAgICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOworICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikKKwl7CisJICBfX2xlbjExID0gX19sZW4xIC8gMjsKKwkgIHN0ZDo6YWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CisJICBfX3NlY29uZF9jdXQgPSBzdGQ6Omxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCk7CisJICBfX2xlbjIyID0gc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKKwl9CisgICAgICBlbHNlCisJeworCSAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CisJICBzdGQ6OmFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKKwkgIF9fZmlyc3RfY3V0ID0gc3RkOjp1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CisJICBfX2xlbjExID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CisJfQorICAgICAgc3RkOjpyb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOworICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX25ld19taWRkbGUgPSBfX2ZpcnN0X2N1dDsKKyAgICAgIHN0ZDo6YWR2YW5jZShfX25ld19taWRkbGUsIHN0ZDo6ZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCkpOworICAgICAgc3RkOjpfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsCisJCQkJICBfX2xlbjExLCBfX2xlbjIyKTsKKyAgICAgIHN0ZDo6X19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAorCQkJCSAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yIC0gX19sZW4yMik7CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgbWVyZ2Ugcm91dGluZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB2b2lkCisgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fZmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbWlkZGxlLAorCQkJICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2xhc3QsCisJCQkgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAorCQkJICAgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKKwlyZXR1cm47CisgICAgICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpCisJeworCSAgaWYgKF9fY29tcCgqX19taWRkbGUsICpfX2ZpcnN0KSkKKwkgICAgc3RkOjppdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOworCSAgcmV0dXJuOworCX0KKyAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19maXJzdF9jdXQgPSBfX2ZpcnN0OworICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKKyAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKKyAgICAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKKyAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpCisJeworCSAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CisJICBzdGQ6OmFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOworCSAgX19zZWNvbmRfY3V0ID0gc3RkOjpsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsCisJCQkJCSAgX19jb21wKTsKKwkgIF9fbGVuMjIgPSBzdGQ6OmRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBfX2xlbjIyID0gX19sZW4yIC8gMjsKKwkgIHN0ZDo6YWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOworCSAgX19maXJzdF9jdXQgPSBzdGQ6OnVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LAorCQkJCQkgX19jb21wKTsKKwkgIF9fbGVuMTEgPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKKwl9CisgICAgICBzdGQ6OnJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CisgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbmV3X21pZGRsZSA9IF9fZmlyc3RfY3V0OworICAgICAgc3RkOjphZHZhbmNlKF9fbmV3X21pZGRsZSwgc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KSk7CisgICAgICBzdGQ6Ol9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKKwkJCQkgIF9fbGVuMTEsIF9fbGVuMjIsIF9fY29tcCk7CisgICAgICBzdGQ6Ol9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwKKwkJCQkgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIsIF9fY29tcCk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIE1lcmdlcyB0d28gc29ydGVkIHJhbmdlcyBpbiBwbGFjZS4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgIEFuIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBtaWRkbGUgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QgICAgQW5vdGhlciBpdGVyYXRvci4KKyAgICogIEByZXR1cm4gIE5vdGhpbmcuCisgICAqCisgICAqICBNZXJnZXMgdHdvIHNvcnRlZCBhbmQgY29uc2VjdXRpdmUgcmFuZ2VzLCBbZmlyc3QsbWlkZGxlKSBhbmQKKyAgICogIFttaWRkbGUsbGFzdCksIGFuZCBwdXRzIHRoZSByZXN1bHQgaW4gW2ZpcnN0LGxhc3QpLiAgVGhlIG91dHB1dCB3aWxsCisgICAqICBiZSBzb3J0ZWQuICBUaGUgc29ydCBpcyBAZSBzdGFibGUsIHRoYXQgaXMsIGZvciBlcXVpdmFsZW50CisgICAqICBlbGVtZW50cyBpbiB0aGUgdHdvIHJhbmdlcywgZWxlbWVudHMgZnJvbSB0aGUgZmlyc3QgcmFuZ2Ugd2lsbCBhbHdheXMKKyAgICogIGNvbWUgYmVmb3JlIGVsZW1lbnRzIGZyb20gdGhlIHNlY29uZC4KKyAgICoKKyAgICogIElmIGVub3VnaCBhZGRpdGlvbmFsIG1lbW9yeSBpcyBhdmFpbGFibGUsIHRoaXMgdGFrZXMgKGxhc3QtZmlyc3QpLTEKKyAgICogIGNvbXBhcmlzb25zLiAgT3RoZXJ3aXNlIGFuIE5sb2dOIGFsZ29yaXRobSBpcyB1c2VkLCB3aGVyZSBOIGlzCisgICAqICBkaXN0YW5jZShmaXJzdCxsYXN0KS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcj4KKyAgICB2b2lkCisgICAgaW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fZmlyc3QsCisJCSAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX21pZGRsZSwKKwkJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQorICAgICAgICAgIF9WYWx1ZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCisgICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9CaWRpcmVjdGlvbmFsSXRlcmF0b3JDb25jZXB0PAorCSAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5Db21wYXJhYmxlQ29uY2VwdDxfVmFsdWVUeXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zb3J0ZWQoX19maXJzdCwgX19taWRkbGUpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZChfX21pZGRsZSwgX19sYXN0KTsKKworICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQorCXJldHVybjsKKworICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbjEgPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlKTsKKyAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4yID0gc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KTsKKworICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgX1ZhbHVlVHlwZT4gX19idWYoX19maXJzdCwKKwkJCQkJCQkJICBfX2xhc3QpOworICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKKwlzdGQ6Ol9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIpOworICAgICAgZWxzZQorCXN0ZDo6X19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKKwkJCSAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIE1lcmdlcyB0d28gc29ydGVkIHJhbmdlcyBpbiBwbGFjZS4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgIEFuIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBtaWRkbGUgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QgICAgQW5vdGhlciBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgY29tcCAgICBBIGZ1bmN0b3IgdG8gdXNlIGZvciBjb21wYXJpc29ucy4KKyAgICogIEByZXR1cm4gIE5vdGhpbmcuCisgICAqCisgICAqICBNZXJnZXMgdHdvIHNvcnRlZCBhbmQgY29uc2VjdXRpdmUgcmFuZ2VzLCBbZmlyc3QsbWlkZGxlKSBhbmQKKyAgICogIFttaWRkbGUsbGFzdCksIGFuZCBwdXRzIHRoZSByZXN1bHQgaW4gW2ZpcnN0LGxhc3QpLiAgVGhlIG91dHB1dCB3aWxsCisgICAqICBiZSBzb3J0ZWQuICBUaGUgc29ydCBpcyBAZSBzdGFibGUsIHRoYXQgaXMsIGZvciBlcXVpdmFsZW50CisgICAqICBlbGVtZW50cyBpbiB0aGUgdHdvIHJhbmdlcywgZWxlbWVudHMgZnJvbSB0aGUgZmlyc3QgcmFuZ2Ugd2lsbCBhbHdheXMKKyAgICogIGNvbWUgYmVmb3JlIGVsZW1lbnRzIGZyb20gdGhlIHNlY29uZC4KKyAgICoKKyAgICogIElmIGVub3VnaCBhZGRpdGlvbmFsIG1lbW9yeSBpcyBhdmFpbGFibGUsIHRoaXMgdGFrZXMgKGxhc3QtZmlyc3QpLTEKKyAgICogIGNvbXBhcmlzb25zLiAgT3RoZXJ3aXNlIGFuIE5sb2dOIGFsZ29yaXRobSBpcyB1c2VkLCB3aGVyZSBOIGlzCisgICAqICBkaXN0YW5jZShmaXJzdCxsYXN0KS4KKyAgICoKKyAgICogIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIHNob3VsZCBoYXZlIHRoZSBzYW1lIGVmZmVjdHMgb24gb3JkZXJpbmcgYXMKKyAgICogIHRoZSBmdW5jdGlvbiB1c2VkIGZvciB0aGUgaW5pdGlhbCBzb3J0LgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB2b2lkCisgICAgaW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fZmlyc3QsCisJCSAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX21pZGRsZSwKKwkJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbGFzdCwKKwkJICBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyYXRvcj46OnZhbHVlX3R5cGUKKyAgICAgICAgICBfVmFsdWVUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdDwKKwkgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X0NvbXBhcmUsCisJICAgIF9WYWx1ZVR5cGUsIF9WYWx1ZVR5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9wcmVkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9wcmVkKF9fbWlkZGxlLCBfX2xhc3QsIF9fY29tcCk7CisKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlkZGxlID09IF9fbGFzdCkKKwlyZXR1cm47CisKKyAgICAgIGNvbnN0IF9EaXN0YW5jZVR5cGUgX19sZW4xID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSk7CisgICAgICBjb25zdCBfRGlzdGFuY2VUeXBlIF9fbGVuMiA9IHN0ZDo6ZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCk7CisKKyAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsCisJCQkJCQkJCSAgX19sYXN0KTsKKyAgICAgIGlmIChfX2J1Zi5iZWdpbigpID09IDApCisJc3RkOjpfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwKKwkJCQkgICAgX19sZW4yLCBfX2NvbXApOworICAgICAgZWxzZQorCXN0ZDo6X19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKKwkJCSAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSwKKwkJCSAgICAgIF9fY29tcCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcjIsCisJICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgorICAgIHZvaWQKKyAgICBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IxIF9fZmlyc3QsCisJCSAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcjEgX19sYXN0LAorCQkgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IyIF9fcmVzdWx0LAorCQkgICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUpCisgICAgeworICAgICAgY29uc3QgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7CisKKyAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApCisJeworCSAgX19yZXN1bHQgPSBfR0xJQkNYWF9TVERfUDo6bWVyZ2UoCisJCQlfR0xJQkNYWF9NQUtFX01PVkVfSVRFUkFUT1IoX19maXJzdCksCisJCQlfR0xJQkNYWF9NQUtFX01PVkVfSVRFUkFUT1IoX19maXJzdCArIF9fc3RlcF9zaXplKSwKKwkJCV9HTElCQ1hYX01BS0VfTU9WRV9JVEVSQVRPUihfX2ZpcnN0ICsgX19zdGVwX3NpemUpLAorCQkJX0dMSUJDWFhfTUFLRV9NT1ZFX0lURVJBVE9SKF9fZmlyc3QgKyBfX3R3b19zdGVwKSwKKwkJCV9fcmVzdWx0KTsKKwkgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKKwl9CisKKyAgICAgIF9fc3RlcF9zaXplID0gc3RkOjptaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CisgICAgICBfR0xJQkNYWF9TVERfUDo6bWVyZ2UoX0dMSUJDWFhfTUFLRV9NT1ZFX0lURVJBVE9SKF9fZmlyc3QpLAorCQkJICAgIF9HTElCQ1hYX01BS0VfTU9WRV9JVEVSQVRPUihfX2ZpcnN0ICsKKwkJCQkJCQlfX3N0ZXBfc2l6ZSksCisJCQkgICAgX0dMSUJDWFhfTUFLRV9NT1ZFX0lURVJBVE9SKF9fZmlyc3QgKworCQkJCQkJCV9fc3RlcF9zaXplKSwKKwkJCSAgICBfR0xJQkNYWF9NQUtFX01PVkVfSVRFUkFUT1IoX19sYXN0KSwKKwkJCSAgICBfX3Jlc3VsdCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcjIsCisJICAgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB2b2lkCisgICAgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yMSBfX2ZpcnN0LAorCQkgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IxIF9fbGFzdCwKKwkJICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplLAorCQkgICAgICBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgY29uc3QgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7CisKKyAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApCisJeworCSAgX19yZXN1bHQgPSBfR0xJQkNYWF9TVERfUDo6bWVyZ2UoCisJCQlfR0xJQkNYWF9NQUtFX01PVkVfSVRFUkFUT1IoX19maXJzdCksCisJCQlfR0xJQkNYWF9NQUtFX01PVkVfSVRFUkFUT1IoX19maXJzdCArIF9fc3RlcF9zaXplKSwKKwkJCV9HTElCQ1hYX01BS0VfTU9WRV9JVEVSQVRPUihfX2ZpcnN0ICsgX19zdGVwX3NpemUpLAorCQkJX0dMSUJDWFhfTUFLRV9NT1ZFX0lURVJBVE9SKF9fZmlyc3QgKyBfX3R3b19zdGVwKSwKKwkJCV9fcmVzdWx0LCBfX2NvbXApOworCSAgX19maXJzdCArPSBfX3R3b19zdGVwOworCX0KKyAgICAgIF9fc3RlcF9zaXplID0gc3RkOjptaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CisKKyAgICAgIF9HTElCQ1hYX1NURF9QOjptZXJnZShfR0xJQkNYWF9NQUtFX01PVkVfSVRFUkFUT1IoX19maXJzdCksCisJCQkgICAgX0dMSUJDWFhfTUFLRV9NT1ZFX0lURVJBVE9SKF9fZmlyc3QgKworCQkJCQkJCV9fc3RlcF9zaXplKSwKKwkJCSAgICBfR0xJQkNYWF9NQUtFX01PVkVfSVRFUkFUT1IoX19maXJzdCArCisJCQkJCQkJX19zdGVwX3NpemUpLAorCQkJICAgIF9HTElCQ1hYX01BS0VfTU9WRV9JVEVSQVRPUihfX2xhc3QpLAorCQkJICAgIF9fcmVzdWx0LCBfX2NvbXApOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KKyAgICB2b2lkCisgICAgX19jaHVua19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKKwkJCSAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCisJCQkgICBfRGlzdGFuY2UgX19jaHVua19zaXplKQorICAgIHsKKyAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkKKwl7CisJICBzdGQ6Ol9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSk7CisJICBfX2ZpcnN0ICs9IF9fY2h1bmtfc2l6ZTsKKwl9CisgICAgICBzdGQ6Ol9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2UsCisJICAgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZAorICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCisJCQkgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAorCQkJICAgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkKKwl7CisJICBzdGQ6Ol9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSwgX19jb21wKTsKKwkgIF9fZmlyc3QgKz0gX19jaHVua19zaXplOworCX0KKyAgICAgIHN0ZDo6X19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CisgICAgfQorCisgIGVudW0geyBfU19jaHVua19zaXplID0gNyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1BvaW50ZXI+CisgICAgdm9pZAorICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKKwkJCSAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCisJX0Rpc3RhbmNlOworCisgICAgICBjb25zdCBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OworICAgICAgY29uc3QgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47CisKKyAgICAgIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9TX2NodW5rX3NpemU7CisgICAgICBzdGQ6Ol9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSk7CisKKyAgICAgIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKQorCXsKKwkgIHN0ZDo6X19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3NpemUpOworCSAgX19zdGVwX3NpemUgKj0gMjsKKwkgIHN0ZDo6X19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplKTsKKwkgIF9fc3RlcF9zaXplICo9IDI7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB2b2lkCisgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAorCQkJICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorCV9EaXN0YW5jZTsKKworICAgICAgY29uc3QgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKKyAgICAgIGNvbnN0IF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOworCisgICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfU19jaHVua19zaXplOworICAgICAgc3RkOjpfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CisKKyAgICAgIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKQorCXsKKwkgIHN0ZDo6X19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwKKwkJCQkgX19zdGVwX3NpemUsIF9fY29tcCk7CisJICBfX3N0ZXBfc2l6ZSAqPSAyOworCSAgc3RkOjpfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwKKwkJCQkgX19zdGVwX3NpemUsIF9fY29tcCk7CisJICBfX3N0ZXBfc2l6ZSAqPSAyOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfUG9pbnRlciwKKwkgICB0eXBlbmFtZSBfRGlzdGFuY2U+CisgICAgdm9pZAorICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCisJCQkgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQorICAgIHsKKyAgICAgIGNvbnN0IF9EaXN0YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOworICAgICAgY29uc3QgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOworICAgICAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkKKwl7CisJICBzdGQ6Ol9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsCisJCQkJICAgICAgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOworCSAgc3RkOjpfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsCisJCQkJICAgICAgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBzdGQ6Ol9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOworCSAgc3RkOjpfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOworCX0KKyAgICAgIHN0ZDo6X19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAorCQkJICAgIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAorCQkJICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksCisJCQkgICAgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Qb2ludGVyLAorCSAgIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZAorICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCisJCQkgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIGNvbnN0IF9EaXN0YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOworICAgICAgY29uc3QgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOworICAgICAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkKKwl7CisJICBzdGQ6Ol9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLAorCQkJCSAgICAgIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7CisJICBzdGQ6Ol9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsCisJCQkJICAgICAgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgc3RkOjpfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2NvbXApOworCSAgc3RkOjpfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fY29tcCk7CisJfQorICAgICAgc3RkOjpfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCisJCQkgICAgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksCisJCQkgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwKKwkJCSAgICBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKKwkJCSAgICBfX2NvbXApOworICAgIH0KKworICAvLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIHN0YWJsZSBzb3J0aW5nIHJvdXRpbmVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CisgICAgdm9pZAorICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKKwkJCSAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDE1KQorCXsKKwkgIHN0ZDo6X19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOworCSAgcmV0dXJuOworCX0KKyAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOworICAgICAgc3RkOjpfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUpOworICAgICAgc3RkOjpfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCk7CisgICAgICBzdGQ6Ol9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKKwkJCQkgIF9fbWlkZGxlIC0gX19maXJzdCwKKwkJCQkgIF9fbGFzdCAtIF9fbWlkZGxlKTsKKyAgICB9CisKKyAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSBzdGFibGUgc29ydGluZyByb3V0aW5lcy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB2b2lkCisgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAorCQkJICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkKKwl7CisJICBzdGQ6Ol9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOworCSAgcmV0dXJuOworCX0KKyAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOworICAgICAgc3RkOjpfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CisgICAgICBzdGQ6Ol9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwgX19sYXN0LCBfX2NvbXApOworICAgICAgc3RkOjpfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCisJCQkJICBfX21pZGRsZSAtIF9fZmlyc3QsCisJCQkJICBfX2xhc3QgLSBfX21pZGRsZSwKKwkJCQkgIF9fY29tcCk7CisgICAgfQorCisgIC8vIHN0YWJsZV9zb3J0CisKKyAgLy8gU2V0IGFsZ29yaXRobXM6IGluY2x1ZGVzLCBzZXRfdW5pb24sIHNldF9pbnRlcnNlY3Rpb24sIHNldF9kaWZmZXJlbmNlLAorICAvLyBzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UuICBBbGwgb2YgdGhlc2UgYWxnb3JpdGhtcyBoYXZlIHRoZSBwcmVjb25kaXRpb24KKyAgLy8gdGhhdCB0aGVpciBpbnB1dCByYW5nZXMgYXJlIHNvcnRlZCBhbmQgdGhlIHBvc3Rjb25kaXRpb24gdGhhdCB0aGVpciBvdXRwdXQKKyAgLy8gcmFuZ2VzIGFyZSBzb3J0ZWQuCisKKyAgLyoqCisgICAqICBAYnJpZWYgRGV0ZXJtaW5lcyB3aGV0aGVyIGFsbCBlbGVtZW50cyBvZiBhIHNlcXVlbmNlIGV4aXN0cyBpbiBhIHJhbmdlLgorICAgKiAgQHBhcmFtICBmaXJzdDEgIFN0YXJ0IG9mIHNlYXJjaCByYW5nZS4KKyAgICogIEBwYXJhbSAgbGFzdDEgICBFbmQgb2Ygc2VhcmNoIHJhbmdlLgorICAgKiAgQHBhcmFtICBmaXJzdDIgIFN0YXJ0IG9mIHNlcXVlbmNlCisgICAqICBAcGFyYW0gIGxhc3QyICAgRW5kIG9mIHNlcXVlbmNlLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBlYWNoIGVsZW1lbnQgaW4gW2ZpcnN0MixsYXN0MikgaXMgY29udGFpbmVkIGluIG9yZGVyCisgICAqICB3aXRoaW4gW2ZpcnN0MSxsYXN0MSkuICBGYWxzZSBvdGhlcndpc2UuCisgICAqICBAaW5ncm91cCBzZXRfYWxnb3JpdGhtcworICAgKgorICAgKiAgVGhpcyBvcGVyYXRpb24gZXhwZWN0cyBib3RoIFtmaXJzdDEsbGFzdDEpIGFuZCBbZmlyc3QyLGxhc3QyKSB0byBiZQorICAgKiAgc29ydGVkLiAgU2VhcmNoZXMgZm9yIHRoZSBwcmVzZW5jZSBvZiBlYWNoIGVsZW1lbnQgaW4gW2ZpcnN0MixsYXN0MikKKyAgICogIHdpdGhpbiBbZmlyc3QxLGxhc3QxKS4gIFRoZSBpdGVyYXRvcnMgb3ZlciBlYWNoIHJhbmdlIG9ubHkgbW92ZSBmb3J3YXJkLAorICAgKiAgc28gdGhpcyBpcyBhIGxpbmVhciBhbGdvcml0aG0uICBJZiBhbiBlbGVtZW50IGluIFtmaXJzdDIsbGFzdDIpIGlzIG5vdAorICAgKiAgZm91bmQgYmVmb3JlIHRoZSBzZWFyY2ggaXRlcmF0b3IgcmVhY2hlcyBAYSBsYXN0MiwgZmFsc2UgaXMgcmV0dXJuZWQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyPgorICAgIGJvb2wKKyAgICBpbmNsdWRlcyhfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yMSBfX2xhc3QxLAorCSAgICAgX0lucHV0SXRlcmF0b3IyIF9fZmlyc3QyLCBfSW5wdXRJdGVyYXRvcjIgX19sYXN0MikKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcjE+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcjI+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTI7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuT3BDb25jZXB0PF9WYWx1ZVR5cGUxLCBfVmFsdWVUeXBlMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuT3BDb25jZXB0PF9WYWx1ZVR5cGUyLCBfVmFsdWVUeXBlMT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkX3NldChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9zZXQoX19maXJzdDIsIF9fbGFzdDIsIF9fZmlyc3QxKTsKKworICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKKwlpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQorCSAgcmV0dXJuIGZhbHNlOworCWVsc2UgaWYoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQorCSAgKytfX2ZpcnN0MTsKKwllbHNlCisJICArK19fZmlyc3QxLCArK19fZmlyc3QyOworCisgICAgICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgRGV0ZXJtaW5lcyB3aGV0aGVyIGFsbCBlbGVtZW50cyBvZiBhIHNlcXVlbmNlIGV4aXN0cyBpbiBhIHJhbmdlCisgICAqICB1c2luZyBjb21wYXJpc29uLgorICAgKiAgQGluZ3JvdXAgc2V0X2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QxICBTdGFydCBvZiBzZWFyY2ggcmFuZ2UuCisgICAqICBAcGFyYW0gIGxhc3QxICAgRW5kIG9mIHNlYXJjaCByYW5nZS4KKyAgICogIEBwYXJhbSAgZmlyc3QyICBTdGFydCBvZiBzZXF1ZW5jZQorICAgKiAgQHBhcmFtICBsYXN0MiAgIEVuZCBvZiBzZXF1ZW5jZS4KKyAgICogIEBwYXJhbSAgY29tcCAgICBDb21wYXJpc29uIGZ1bmN0aW9uIHRvIHVzZS4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgZWFjaCBlbGVtZW50IGluIFtmaXJzdDIsbGFzdDIpIGlzIGNvbnRhaW5lZCBpbiBvcmRlcgorICAgKiAgd2l0aGluIFtmaXJzdDEsbGFzdDEpIGFjY29yZGluZyB0byBjb21wLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKiAgQGluZ3JvdXAgc2V0X2FsZ29yaXRobXMKKyAgICoKKyAgICogIFRoaXMgb3BlcmF0aW9uIGV4cGVjdHMgYm90aCBbZmlyc3QxLGxhc3QxKSBhbmQgW2ZpcnN0MixsYXN0MikgdG8gYmUKKyAgICogIHNvcnRlZC4gIFNlYXJjaGVzIGZvciB0aGUgcHJlc2VuY2Ugb2YgZWFjaCBlbGVtZW50IGluIFtmaXJzdDIsbGFzdDIpCisgICAqICB3aXRoaW4gW2ZpcnN0MSxsYXN0MSksIHVzaW5nIGNvbXAgdG8gZGVjaWRlLiAgVGhlIGl0ZXJhdG9ycyBvdmVyIGVhY2gKKyAgICogIHJhbmdlIG9ubHkgbW92ZSBmb3J3YXJkLCBzbyB0aGlzIGlzIGEgbGluZWFyIGFsZ29yaXRobS4gIElmIGFuIGVsZW1lbnQKKyAgICogIGluIFtmaXJzdDIsbGFzdDIpIGlzIG5vdCBmb3VuZCBiZWZvcmUgdGhlIHNlYXJjaCBpdGVyYXRvciByZWFjaGVzIEBhCisgICAqICBsYXN0MiwgZmFsc2UgaXMgcmV0dXJuZWQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLAorCSAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGJvb2wKKyAgICBpbmNsdWRlcyhfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yMSBfX2xhc3QxLAorCSAgICAgX0lucHV0SXRlcmF0b3IyIF9fZmlyc3QyLCBfSW5wdXRJdGVyYXRvcjIgX19sYXN0MiwKKwkgICAgIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcjE+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcjI+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTI7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X0NvbXBhcmUsCisJCQkJICBfVmFsdWVUeXBlMSwgX1ZhbHVlVHlwZTI+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9Db21wYXJlLAorCQkJCSAgX1ZhbHVlVHlwZTIsIF9WYWx1ZVR5cGUxPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zb3J0ZWRfc2V0X3ByZWQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2NvbXApOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9zZXRfcHJlZChfX2ZpcnN0MiwgX19sYXN0MiwgX19maXJzdDEsIF9fY29tcCk7CisKKyAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCisJaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCisJICByZXR1cm4gZmFsc2U7CisJZWxzZSBpZihfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQorCSAgKytfX2ZpcnN0MTsKKwllbHNlCisJICArK19fZmlyc3QxLCArK19fZmlyc3QyOworCisgICAgICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKKyAgICB9CisKKyAgLy8gbnRoX2VsZW1lbnQKKyAgLy8gbWVyZ2UKKyAgLy8gc2V0X2RpZmZlcmVuY2UKKyAgLy8gc2V0X2ludGVyc2VjdGlvbgorICAvLyBzZXRfdW5pb24KKyAgLy8gc3RhYmxlX3NvcnQKKyAgLy8gc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlCisgIC8vIG1pbl9lbGVtZW50CisgIC8vIG1heF9lbGVtZW50CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFBlcm11dGUgcmFuZ2UgaW50byB0aGUgbmV4dCBAYSBkaWN0aW9uYXJ5IG9yZGVyaW5nLgorICAgKiAgQGluZ3JvdXAgc29ydGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGZpcnN0ICBTdGFydCBvZiByYW5nZS4KKyAgICogIEBwYXJhbSAgbGFzdCAgIEVuZCBvZiByYW5nZS4KKyAgICogIEByZXR1cm4gIEZhbHNlIGlmIHdyYXBwZWQgdG8gZmlyc3QgcGVybXV0YXRpb24sIHRydWUgb3RoZXJ3aXNlLgorICAgKgorICAgKiAgVHJlYXRzIGFsbCBwZXJtdXRhdGlvbnMgb2YgdGhlIHJhbmdlIGFzIGEgc2V0IG9mIEBhIGRpY3Rpb25hcnkgc29ydGVkCisgICAqICBzZXF1ZW5jZXMuICBQZXJtdXRlcyB0aGUgY3VycmVudCBzZXF1ZW5jZSBpbnRvIHRoZSBuZXh0IG9uZSBvZiB0aGlzIHNldC4KKyAgICogIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgbW9yZSBzZXF1ZW5jZXMgdG8gZ2VuZXJhdGUuICBJZiB0aGUgc2VxdWVuY2UKKyAgICogIGlzIHRoZSBsYXJnZXN0IG9mIHRoZSBzZXQsIHRoZSBzbWFsbGVzdCBpcyBnZW5lcmF0ZWQgYW5kIGZhbHNlIHJldHVybmVkLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPgorICAgIGJvb2wKKyAgICBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19maXJzdCwKKwkJICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuQ29tcGFyYWJsZUNvbmNlcHQ8CisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCXJldHVybiBmYWxzZTsKKyAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19pID0gX19maXJzdDsKKyAgICAgICsrX19pOworICAgICAgaWYgKF9faSA9PSBfX2xhc3QpCisJcmV0dXJuIGZhbHNlOworICAgICAgX19pID0gX19sYXN0OworICAgICAgLS1fX2k7CisKKyAgICAgIGZvcig7OykKKwl7CisJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9faWkgPSBfX2k7CisJICAtLV9faTsKKwkgIGlmICgqX19pIDwgKl9faWkpCisJICAgIHsKKwkgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9faiA9IF9fbGFzdDsKKwkgICAgICB3aGlsZSAoISgqX19pIDwgKi0tX19qKSkKKwkJe30KKwkgICAgICBzdGQ6Oml0ZXJfc3dhcChfX2ksIF9faik7CisJICAgICAgc3RkOjpyZXZlcnNlKF9faWksIF9fbGFzdCk7CisJICAgICAgcmV0dXJuIHRydWU7CisJICAgIH0KKwkgIGlmIChfX2kgPT0gX19maXJzdCkKKwkgICAgeworCSAgICAgIHN0ZDo6cmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOworCSAgICAgIHJldHVybiBmYWxzZTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFBlcm11dGUgcmFuZ2UgaW50byB0aGUgbmV4dCBAYSBkaWN0aW9uYXJ5IG9yZGVyaW5nIHVzaW5nCisgICAqICAgICAgICAgIGNvbXBhcmlzb24gZnVuY3Rvci4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgU3RhcnQgb2YgcmFuZ2UuCisgICAqICBAcGFyYW0gIGxhc3QgICBFbmQgb2YgcmFuZ2UuCisgICAqICBAcGFyYW0gIGNvbXAgICBBIGNvbXBhcmlzb24gZnVuY3Rvci4KKyAgICogIEByZXR1cm4gIEZhbHNlIGlmIHdyYXBwZWQgdG8gZmlyc3QgcGVybXV0YXRpb24sIHRydWUgb3RoZXJ3aXNlLgorICAgKgorICAgKiAgVHJlYXRzIGFsbCBwZXJtdXRhdGlvbnMgb2YgdGhlIHJhbmdlIFtmaXJzdCxsYXN0KSBhcyBhIHNldCBvZgorICAgKiAgQGEgZGljdGlvbmFyeSBzb3J0ZWQgc2VxdWVuY2VzIG9yZGVyZWQgYnkgQGEgY29tcC4gIFBlcm11dGVzIHRoZSBjdXJyZW50CisgICAqICBzZXF1ZW5jZSBpbnRvIHRoZSBuZXh0IG9uZSBvZiB0aGlzIHNldC4gIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgbW9yZQorICAgKiAgc2VxdWVuY2VzIHRvIGdlbmVyYXRlLiAgSWYgdGhlIHNlcXVlbmNlIGlzIHRoZSBsYXJnZXN0IG9mIHRoZSBzZXQsIHRoZQorICAgKiAgc21hbGxlc3QgaXMgZ2VuZXJhdGVkIGFuZCBmYWxzZSByZXR1cm5lZC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgYm9vbAorICAgIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2ZpcnN0LAorCQkgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9Db21wYXJlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyYXRvcj46OnZhbHVlX3R5cGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCXJldHVybiBmYWxzZTsKKyAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19pID0gX19maXJzdDsKKyAgICAgICsrX19pOworICAgICAgaWYgKF9faSA9PSBfX2xhc3QpCisJcmV0dXJuIGZhbHNlOworICAgICAgX19pID0gX19sYXN0OworICAgICAgLS1fX2k7CisKKyAgICAgIGZvcig7OykKKwl7CisJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9faWkgPSBfX2k7CisJICAtLV9faTsKKwkgIGlmIChfX2NvbXAoKl9faSwgKl9faWkpKQorCSAgICB7CisJICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2ogPSBfX2xhc3Q7CisJICAgICAgd2hpbGUgKCFib29sKF9fY29tcCgqX19pLCAqLS1fX2opKSkKKwkJe30KKwkgICAgICBzdGQ6Oml0ZXJfc3dhcChfX2ksIF9faik7CisJICAgICAgc3RkOjpyZXZlcnNlKF9faWksIF9fbGFzdCk7CisJICAgICAgcmV0dXJuIHRydWU7CisJICAgIH0KKwkgIGlmIChfX2kgPT0gX19maXJzdCkKKwkgICAgeworCSAgICAgIHN0ZDo6cmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOworCSAgICAgIHJldHVybiBmYWxzZTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFBlcm11dGUgcmFuZ2UgaW50byB0aGUgcHJldmlvdXMgQGEgZGljdGlvbmFyeSBvcmRlcmluZy4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgU3RhcnQgb2YgcmFuZ2UuCisgICAqICBAcGFyYW0gIGxhc3QgICBFbmQgb2YgcmFuZ2UuCisgICAqICBAcmV0dXJuICBGYWxzZSBpZiB3cmFwcGVkIHRvIGxhc3QgcGVybXV0YXRpb24sIHRydWUgb3RoZXJ3aXNlLgorICAgKgorICAgKiAgVHJlYXRzIGFsbCBwZXJtdXRhdGlvbnMgb2YgdGhlIHJhbmdlIGFzIGEgc2V0IG9mIEBhIGRpY3Rpb25hcnkgc29ydGVkCisgICAqICBzZXF1ZW5jZXMuICBQZXJtdXRlcyB0aGUgY3VycmVudCBzZXF1ZW5jZSBpbnRvIHRoZSBwcmV2aW91cyBvbmUgb2YgdGhpcworICAgKiAgc2V0LiAgUmV0dXJucyB0cnVlIGlmIHRoZXJlIGFyZSBtb3JlIHNlcXVlbmNlcyB0byBnZW5lcmF0ZS4gIElmIHRoZQorICAgKiAgc2VxdWVuY2UgaXMgdGhlIHNtYWxsZXN0IG9mIHRoZSBzZXQsIHRoZSBsYXJnZXN0IGlzIGdlbmVyYXRlZCBhbmQgZmFsc2UKKyAgICogIHJldHVybmVkLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPgorICAgIGJvb2wKKyAgICBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19maXJzdCwKKwkJICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuQ29tcGFyYWJsZUNvbmNlcHQ8CisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCXJldHVybiBmYWxzZTsKKyAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19pID0gX19maXJzdDsKKyAgICAgICsrX19pOworICAgICAgaWYgKF9faSA9PSBfX2xhc3QpCisJcmV0dXJuIGZhbHNlOworICAgICAgX19pID0gX19sYXN0OworICAgICAgLS1fX2k7CisKKyAgICAgIGZvcig7OykKKwl7CisJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9faWkgPSBfX2k7CisJICAtLV9faTsKKwkgIGlmICgqX19paSA8ICpfX2kpCisJICAgIHsKKwkgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9faiA9IF9fbGFzdDsKKwkgICAgICB3aGlsZSAoISgqLS1fX2ogPCAqX19pKSkKKwkJe30KKwkgICAgICBzdGQ6Oml0ZXJfc3dhcChfX2ksIF9faik7CisJICAgICAgc3RkOjpyZXZlcnNlKF9faWksIF9fbGFzdCk7CisJICAgICAgcmV0dXJuIHRydWU7CisJICAgIH0KKwkgIGlmIChfX2kgPT0gX19maXJzdCkKKwkgICAgeworCSAgICAgIHN0ZDo6cmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOworCSAgICAgIHJldHVybiBmYWxzZTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFBlcm11dGUgcmFuZ2UgaW50byB0aGUgcHJldmlvdXMgQGEgZGljdGlvbmFyeSBvcmRlcmluZyB1c2luZworICAgKiAgICAgICAgICBjb21wYXJpc29uIGZ1bmN0b3IuCisgICAqICBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgIFN0YXJ0IG9mIHJhbmdlLgorICAgKiAgQHBhcmFtICBsYXN0ICAgRW5kIG9mIHJhbmdlLgorICAgKiAgQHBhcmFtICBjb21wICAgQSBjb21wYXJpc29uIGZ1bmN0b3IuCisgICAqICBAcmV0dXJuICBGYWxzZSBpZiB3cmFwcGVkIHRvIGxhc3QgcGVybXV0YXRpb24sIHRydWUgb3RoZXJ3aXNlLgorICAgKgorICAgKiAgVHJlYXRzIGFsbCBwZXJtdXRhdGlvbnMgb2YgdGhlIHJhbmdlIFtmaXJzdCxsYXN0KSBhcyBhIHNldCBvZgorICAgKiAgQGEgZGljdGlvbmFyeSBzb3J0ZWQgc2VxdWVuY2VzIG9yZGVyZWQgYnkgQGEgY29tcC4gIFBlcm11dGVzIHRoZSBjdXJyZW50CisgICAqICBzZXF1ZW5jZSBpbnRvIHRoZSBwcmV2aW91cyBvbmUgb2YgdGhpcyBzZXQuICBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlCisgICAqICBtb3JlIHNlcXVlbmNlcyB0byBnZW5lcmF0ZS4gIElmIHRoZSBzZXF1ZW5jZSBpcyB0aGUgc21hbGxlc3Qgb2YgdGhlIHNldCwKKyAgICogIHRoZSBsYXJnZXN0IGlzIGdlbmVyYXRlZCBhbmQgZmFsc2UgcmV0dXJuZWQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGJvb2wKKyAgICBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19maXJzdCwKKwkJICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpZGlyZWN0aW9uYWxJdGVyYXRvckNvbmNlcHQ8CisJCQkJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQ29tcGFyZSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwlyZXR1cm4gZmFsc2U7CisgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9faSA9IF9fZmlyc3Q7CisgICAgICArK19faTsKKyAgICAgIGlmIChfX2kgPT0gX19sYXN0KQorCXJldHVybiBmYWxzZTsKKyAgICAgIF9faSA9IF9fbGFzdDsKKyAgICAgIC0tX19pOworCisgICAgICBmb3IoOzspCisJeworCSAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2lpID0gX19pOworCSAgLS1fX2k7CisJICBpZiAoX19jb21wKCpfX2lpLCAqX19pKSkKKwkgICAgeworCSAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19qID0gX19sYXN0OworCSAgICAgIHdoaWxlICghYm9vbChfX2NvbXAoKi0tX19qLCAqX19pKSkpCisJCXt9CisJICAgICAgc3RkOjppdGVyX3N3YXAoX19pLCBfX2opOworCSAgICAgIHN0ZDo6cmV2ZXJzZShfX2lpLCBfX2xhc3QpOworCSAgICAgIHJldHVybiB0cnVlOworCSAgICB9CisJICBpZiAoX19pID09IF9fZmlyc3QpCisJICAgIHsKKwkgICAgICBzdGQ6OnJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKKwkgICAgICByZXR1cm4gZmFsc2U7CisJICAgIH0KKwl9CisgICAgfQorCisgIC8vIHJlcGxhY2UKKyAgLy8gcmVwbGFjZV9pZgorCisgIC8qKgorICAgKiAgQGJyaWVmIENvcHkgYSBzZXF1ZW5jZSwgcmVwbGFjaW5nIGVhY2ggZWxlbWVudCBvZiBvbmUgdmFsdWUgd2l0aCBhbm90aGVyCisgICAqICAgICAgICAgdmFsdWUuCisgICAqICBAcGFyYW0gIGZpcnN0ICAgICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QgICAgICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIHJlc3VsdCAgICAgQW4gb3V0cHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBvbGRfdmFsdWUgIFRoZSB2YWx1ZSB0byBiZSByZXBsYWNlZC4KKyAgICogIEBwYXJhbSAgbmV3X3ZhbHVlICBUaGUgcmVwbGFjZW1lbnQgdmFsdWUuCisgICAqICBAcmV0dXJuICAgVGhlIGVuZCBvZiB0aGUgb3V0cHV0IHNlcXVlbmNlLCBAcCByZXN1bHQrKGxhc3QtZmlyc3QpLgorICAgKgorICAgKiAgQ29waWVzIGVhY2ggZWxlbWVudCBpbiB0aGUgaW5wdXQgcmFuZ2UgQHAgW2ZpcnN0LGxhc3QpIHRvIHRoZQorICAgKiAgb3V0cHV0IHJhbmdlIEBwIFtyZXN1bHQscmVzdWx0KyhsYXN0LWZpcnN0KSkgcmVwbGFjaW5nIGVsZW1lbnRzCisgICAqICBlcXVhbCB0byBAcCBvbGRfdmFsdWUgd2l0aCBAcCBuZXdfdmFsdWUuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICByZXBsYWNlX2NvcHkoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LAorCQkgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3IsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9FcXVhbE9wQ29uY2VwdDwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSwgX1RwPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKKwlpZiAoKl9fZmlyc3QgPT0gX19vbGRfdmFsdWUpCisJICAqX19yZXN1bHQgPSBfX25ld192YWx1ZTsKKwllbHNlCisJICAqX19yZXN1bHQgPSAqX19maXJzdDsKKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgQ29weSBhIHNlcXVlbmNlLCByZXBsYWNpbmcgZWFjaCB2YWx1ZSBmb3Igd2hpY2ggYSBwcmVkaWNhdGUKKyAgICogICAgICAgICByZXR1cm5zIHRydWUgd2l0aCBhbm90aGVyIHZhbHVlLgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgICAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0ICAgICAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICByZXN1bHQgICAgIEFuIG91dHB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgcHJlZCAgICAgICBBIHByZWRpY2F0ZS4KKyAgICogIEBwYXJhbSAgbmV3X3ZhbHVlICBUaGUgcmVwbGFjZW1lbnQgdmFsdWUuCisgICAqICBAcmV0dXJuICAgVGhlIGVuZCBvZiB0aGUgb3V0cHV0IHNlcXVlbmNlLCBAcCByZXN1bHQrKGxhc3QtZmlyc3QpLgorICAgKgorICAgKiAgQ29waWVzIGVhY2ggZWxlbWVudCBpbiB0aGUgcmFuZ2UgQHAgW2ZpcnN0LGxhc3QpIHRvIHRoZSByYW5nZQorICAgKiAgQHAgW3Jlc3VsdCxyZXN1bHQrKGxhc3QtZmlyc3QpKSByZXBsYWNpbmcgZWxlbWVudHMgZm9yIHdoaWNoCisgICAqICBAcCBwcmVkIHJldHVybnMgdHJ1ZSB3aXRoIEBwIG5ld192YWx1ZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfVHA+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgcmVwbGFjZV9jb3B5X2lmKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwKKwkJICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX1VuYXJ5UHJlZGljYXRlQ29uY2VwdDxfUHJlZGljYXRlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKKwlpZiAoX19wcmVkKCpfX2ZpcnN0KSkKKwkgICpfX3Jlc3VsdCA9IF9fbmV3X3ZhbHVlOworCWVsc2UKKwkgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OworICAgICAgcmV0dXJuIF9fcmVzdWx0OworICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgIC8qKgorICAgKiAgQGJyaWVmICBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGVsZW1lbnRzIG9mIGEgc2VxdWVuY2UgYXJlIHNvcnRlZC4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgIEFuIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0ICAgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIHRoZSBlbGVtZW50cyBhcmUgc29ydGVkLCBmYWxzZSBvdGhlcndpc2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBpc19zb3J0ZWQoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKKyAgICB7IHJldHVybiBzdGQ6OmlzX3NvcnRlZF91bnRpbChfX2ZpcnN0LCBfX2xhc3QpID09IF9fbGFzdDsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGVsZW1lbnRzIG9mIGEgc2VxdWVuY2UgYXJlIHNvcnRlZAorICAgKiAgICAgICAgICBhY2NvcmRpbmcgdG8gYSBjb21wYXJpc29uIGZ1bmN0b3IuCisgICAqICBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgICBBbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBjb21wICAgIEEgY29tcGFyaXNvbiBmdW5jdG9yLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiB0aGUgZWxlbWVudHMgYXJlIHNvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIGlzX3NvcnRlZChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCSAgICAgIF9Db21wYXJlIF9fY29tcCkKKyAgICB7IHJldHVybiBzdGQ6OmlzX3NvcnRlZF91bnRpbChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCkgPT0gX19sYXN0OyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIERldGVybWluZXMgdGhlIGVuZCBvZiBhIHNvcnRlZCBzZXF1ZW5jZS4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgIEFuIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0ICAgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcmV0dXJuICBBbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgbGFzdCBpdGVyYXRvciBpIGluIFtmaXJzdCwgbGFzdCkKKyAgICogICAgICAgICAgIGZvciB3aGljaCB0aGUgcmFuZ2UgW2ZpcnN0LCBpKSBpcyBzb3J0ZWQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgX0ZvcndhcmRJdGVyYXRvcgorICAgIGlzX3NvcnRlZF91bnRpbChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuQ29tcGFyYWJsZUNvbmNlcHQ8CisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCXJldHVybiBfX2xhc3Q7CisKKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKKyAgICAgIGZvciAoKytfX25leHQ7IF9fbmV4dCAhPSBfX2xhc3Q7IF9fZmlyc3QgPSBfX25leHQsICsrX19uZXh0KQorCWlmICgqX19uZXh0IDwgKl9fZmlyc3QpCisJICByZXR1cm4gX19uZXh0OworICAgICAgcmV0dXJuIF9fbmV4dDsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIERldGVybWluZXMgdGhlIGVuZCBvZiBhIHNvcnRlZCBzZXF1ZW5jZSB1c2luZyBjb21wYXJpc29uIGZ1bmN0b3IuCisgICAqICBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgICBBbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBjb21wICAgIEEgY29tcGFyaXNvbiBmdW5jdG9yLgorICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGxhc3QgaXRlcmF0b3IgaSBpbiBbZmlyc3QsIGxhc3QpCisgICAqICAgICAgICAgICBmb3Igd2hpY2ggdGhlIHJhbmdlIFtmaXJzdCwgaSkgaXMgc29ydGVkLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfRm9yd2FyZEl0ZXJhdG9yCisgICAgaXNfc29ydGVkX3VudGlsKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJCSAgICBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQ29tcGFyZSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwlyZXR1cm4gX19sYXN0OworCisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CisgICAgICBmb3IgKCsrX19uZXh0OyBfX25leHQgIT0gX19sYXN0OyBfX2ZpcnN0ID0gX19uZXh0LCArK19fbmV4dCkKKwlpZiAoX19jb21wKCpfX25leHQsICpfX2ZpcnN0KSkKKwkgIHJldHVybiBfX25leHQ7CisgICAgICByZXR1cm4gX19uZXh0OworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgRGV0ZXJtaW5lcyBtaW4gYW5kIG1heCBhdCBvbmNlIGFzIGFuIG9yZGVyZWQgcGFpci4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBhICBBIHRoaW5nIG9mIGFyYml0cmFyeSB0eXBlLgorICAgKiAgQHBhcmFtICBiICBBbm90aGVyIHRoaW5nIG9mIGFyYml0cmFyeSB0eXBlLgorICAgKiAgQHJldHVybiAgQSBwYWlyKGIsIGEpIGlmIGIgaXMgc21hbGxlciB0aGFuIGEsIHBhaXIoYSwgYikgb3RoZXJ3aXNlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHBhaXI8Y29uc3QgX1RwJiwgY29uc3QgX1RwJj4KKyAgICBtaW5tYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuQ29tcGFyYWJsZUNvbmNlcHQ8X1RwPikKKworICAgICAgcmV0dXJuIF9fYiA8IF9fYSA/IHBhaXI8Y29uc3QgX1RwJiwgY29uc3QgX1RwJj4oX19iLCBfX2EpCisJICAgICAgICAgICAgICAgOiBwYWlyPGNvbnN0IF9UcCYsIGNvbnN0IF9UcCY+KF9fYSwgX19iKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIERldGVybWluZXMgbWluIGFuZCBtYXggYXQgb25jZSBhcyBhbiBvcmRlcmVkIHBhaXIuCisgICAqICBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgYSAgQSB0aGluZyBvZiBhcmJpdHJhcnkgdHlwZS4KKyAgICogIEBwYXJhbSAgYiAgQW5vdGhlciB0aGluZyBvZiBhcmJpdHJhcnkgdHlwZS4KKyAgICogIEBwYXJhbSAgY29tcCAgQSBAbGluayBjb21wYXJpc29uX2Z1bmN0b3IgY29tcGFyaXNvbiBmdW5jdG9yQGVuZGxpbmsuCisgICAqICBAcmV0dXJuICBBIHBhaXIoYiwgYSkgaWYgYiBpcyBzbWFsbGVyIHRoYW4gYSwgcGFpcihhLCBiKSBvdGhlcndpc2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgaW5saW5lIHBhaXI8Y29uc3QgX1RwJiwgY29uc3QgX1RwJj4KKyAgICBtaW5tYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgcmV0dXJuIF9fY29tcChfX2IsIF9fYSkgPyBwYWlyPGNvbnN0IF9UcCYsIGNvbnN0IF9UcCY+KF9fYiwgX19hKQorCSAgICAgICAgICAgICAgICAgICAgICA6IHBhaXI8Y29uc3QgX1RwJiwgY29uc3QgX1RwJj4oX19hLCBfX2IpOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgUmV0dXJuIGEgcGFpciBvZiBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIG1pbmltdW0gYW5kIG1heGltdW0KKyAgICogICAgICAgICAgZWxlbWVudHMgaW4gYSByYW5nZS4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgU3RhcnQgb2YgcmFuZ2UuCisgICAqICBAcGFyYW0gIGxhc3QgICBFbmQgb2YgcmFuZ2UuCisgICAqICBAcmV0dXJuICBtYWtlX3BhaXIobSwgTSksIHdoZXJlIG0gaXMgdGhlIGZpcnN0IGl0ZXJhdG9yIGkgaW4gCisgICAqICAgICAgICAgICBbZmlyc3QsIGxhc3QpIHN1Y2ggdGhhdCBubyBvdGhlciBlbGVtZW50IGluIHRoZSByYW5nZSBpcworICAgKiAgICAgICAgICAgc21hbGxlciwgYW5kIHdoZXJlIE0gaXMgdGhlIGxhc3QgaXRlcmF0b3IgaSBpbiBbZmlyc3QsIGxhc3QpCisgICAqICAgICAgICAgICBzdWNoIHRoYXQgbm8gb3RoZXIgZWxlbWVudCBpbiB0aGUgcmFuZ2UgaXMgbGFyZ2VyLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgIHBhaXI8X0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICBtaW5tYXhfZWxlbWVudChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuQ29tcGFyYWJsZUNvbmNlcHQ8CisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0CisJICB8fCArK19fbmV4dCA9PSBfX2xhc3QpCisJcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKF9fZmlyc3QsIF9fZmlyc3QpOworCisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWluLCBfX21heDsKKyAgICAgIGlmICgqX19uZXh0IDwgKl9fZmlyc3QpCisJeworCSAgX19taW4gPSBfX25leHQ7CisJICBfX21heCA9IF9fZmlyc3Q7CisJfQorICAgICAgZWxzZQorCXsKKwkgIF9fbWluID0gX19maXJzdDsKKwkgIF9fbWF4ID0gX19uZXh0OworCX0KKworICAgICAgX19maXJzdCA9IF9fbmV4dDsKKyAgICAgICsrX19maXJzdDsKKworICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQorCXsKKwkgIF9fbmV4dCA9IF9fZmlyc3Q7CisJICBpZiAoKytfX25leHQgPT0gX19sYXN0KQorCSAgICB7CisJICAgICAgaWYgKCpfX2ZpcnN0IDwgKl9fbWluKQorCQlfX21pbiA9IF9fZmlyc3Q7CisJICAgICAgZWxzZSBpZiAoISgqX19maXJzdCA8ICpfX21heCkpCisJCV9fbWF4ID0gX19maXJzdDsKKwkgICAgICBicmVhazsKKwkgICAgfQorCisJICBpZiAoKl9fbmV4dCA8ICpfX2ZpcnN0KQorCSAgICB7CisJICAgICAgaWYgKCpfX25leHQgPCAqX19taW4pCisJCV9fbWluID0gX19uZXh0OworCSAgICAgIGlmICghKCpfX2ZpcnN0IDwgKl9fbWF4KSkKKwkJX19tYXggPSBfX2ZpcnN0OworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBpZiAoKl9fZmlyc3QgPCAqX19taW4pCisJCV9fbWluID0gX19maXJzdDsKKwkgICAgICBpZiAoISgqX19uZXh0IDwgKl9fbWF4KSkKKwkJX19tYXggPSBfX25leHQ7CisJICAgIH0KKworCSAgX19maXJzdCA9IF9fbmV4dDsKKwkgICsrX19maXJzdDsKKwl9CisKKyAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihfX21pbiwgX19tYXgpOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgUmV0dXJuIGEgcGFpciBvZiBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIG1pbmltdW0gYW5kIG1heGltdW0KKyAgICogICAgICAgICAgZWxlbWVudHMgaW4gYSByYW5nZS4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgU3RhcnQgb2YgcmFuZ2UuCisgICAqICBAcGFyYW0gIGxhc3QgICBFbmQgb2YgcmFuZ2UuCisgICAqICBAcGFyYW0gIGNvbXAgICBDb21wYXJpc29uIGZ1bmN0b3IuCisgICAqICBAcmV0dXJuICBtYWtlX3BhaXIobSwgTSksIHdoZXJlIG0gaXMgdGhlIGZpcnN0IGl0ZXJhdG9yIGkgaW4gCisgICAqICAgICAgICAgICBbZmlyc3QsIGxhc3QpIHN1Y2ggdGhhdCBubyBvdGhlciBlbGVtZW50IGluIHRoZSByYW5nZSBpcworICAgKiAgICAgICAgICAgc21hbGxlciwgYW5kIHdoZXJlIE0gaXMgdGhlIGxhc3QgaXRlcmF0b3IgaSBpbiBbZmlyc3QsIGxhc3QpCisgICAqICAgICAgICAgICBzdWNoIHRoYXQgbm8gb3RoZXIgZWxlbWVudCBpbiB0aGUgcmFuZ2UgaXMgbGFyZ2VyLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBwYWlyPF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgbWlubWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkJICAgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X0NvbXBhcmUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CisgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QKKwkgIHx8ICsrX19uZXh0ID09IF9fbGFzdCkKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoX19maXJzdCwgX19maXJzdCk7CisKKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taW4sIF9fbWF4OworICAgICAgaWYgKF9fY29tcCgqX19uZXh0LCAqX19maXJzdCkpCisJeworCSAgX19taW4gPSBfX25leHQ7CisJICBfX21heCA9IF9fZmlyc3Q7CisJfQorICAgICAgZWxzZQorCXsKKwkgIF9fbWluID0gX19maXJzdDsKKwkgIF9fbWF4ID0gX19uZXh0OworCX0KKworICAgICAgX19maXJzdCA9IF9fbmV4dDsKKyAgICAgICsrX19maXJzdDsKKworICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQorCXsKKwkgIF9fbmV4dCA9IF9fZmlyc3Q7CisJICBpZiAoKytfX25leHQgPT0gX19sYXN0KQorCSAgICB7CisJICAgICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fbWluKSkKKwkJX19taW4gPSBfX2ZpcnN0OworCSAgICAgIGVsc2UgaWYgKCFfX2NvbXAoKl9fZmlyc3QsICpfX21heCkpCisJCV9fbWF4ID0gX19maXJzdDsKKwkgICAgICBicmVhazsKKwkgICAgfQorCisJICBpZiAoX19jb21wKCpfX25leHQsICpfX2ZpcnN0KSkKKwkgICAgeworCSAgICAgIGlmIChfX2NvbXAoKl9fbmV4dCwgKl9fbWluKSkKKwkJX19taW4gPSBfX25leHQ7CisJICAgICAgaWYgKCFfX2NvbXAoKl9fZmlyc3QsICpfX21heCkpCisJCV9fbWF4ID0gX19maXJzdDsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fbWluKSkKKwkJX19taW4gPSBfX2ZpcnN0OworCSAgICAgIGlmICghX19jb21wKCpfX25leHQsICpfX21heCkpCisJCV9fbWF4ID0gX19uZXh0OworCSAgICB9CisKKwkgIF9fZmlyc3QgPSBfX25leHQ7CisJICArK19fZmlyc3Q7CisJfQorCisgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoX19taW4sIF9fbWF4KTsKKyAgICB9CisKKyAgLy8gTjI3MjIgKyBEUiA5MTUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgbWluKGluaXRpYWxpemVyX2xpc3Q8X1RwPiBfX2wpCisgICAgeyByZXR1cm4gKnN0ZDo6bWluX2VsZW1lbnQoX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGlubGluZSBfVHAKKyAgICBtaW4oaW5pdGlhbGl6ZXJfbGlzdDxfVHA+IF9fbCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsgcmV0dXJuICpzdGQ6Om1pbl9lbGVtZW50KF9fbC5iZWdpbigpLCBfX2wuZW5kKCksIF9fY29tcCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9UcAorICAgIG1heChpbml0aWFsaXplcl9saXN0PF9UcD4gX19sKQorICAgIHsgcmV0dXJuICpzdGQ6Om1heF9lbGVtZW50KF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgX1RwCisgICAgbWF4KGluaXRpYWxpemVyX2xpc3Q8X1RwPiBfX2wsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7IHJldHVybiAqc3RkOjptYXhfZWxlbWVudChfX2wuYmVnaW4oKSwgX19sLmVuZCgpLCBfX2NvbXApOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBwYWlyPF9UcCwgX1RwPgorICAgIG1pbm1heChpbml0aWFsaXplcl9saXN0PF9UcD4gX19sKQorICAgIHsKKyAgICAgIHBhaXI8Y29uc3QgX1RwKiwgY29uc3QgX1RwKj4gX19wID0KKwlzdGQ6Om1pbm1heF9lbGVtZW50KF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOworICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKCpfX3AuZmlyc3QsICpfX3Auc2Vjb25kKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgcGFpcjxfVHAsIF9UcD4KKyAgICBtaW5tYXgoaW5pdGlhbGl6ZXJfbGlzdDxfVHA+IF9fbCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHBhaXI8Y29uc3QgX1RwKiwgY29uc3QgX1RwKj4gX19wID0KKwlzdGQ6Om1pbm1heF9lbGVtZW50KF9fbC5iZWdpbigpLCBfX2wuZW5kKCksIF9fY29tcCk7CisgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoKl9fcC5maXJzdCwgKl9fcC5zZWNvbmQpOworICAgIH0KKworI2lmZGVmIF9HTElCQ1hYX1VTRV9DOTlfU1RESU5UX1RSMQorICAvKioKKyAgICogIEBicmllZiBTaHVmZmxlIHRoZSBlbGVtZW50cyBvZiBhIHNlcXVlbmNlIHVzaW5nIGEgdW5pZm9ybSByYW5kb20KKyAgICogICAgICAgICBudW1iZXIgZ2VuZXJhdG9yLgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGcgICAgICAgQSBVbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yICgyNi41LjEuMykuCisgICAqICBAcmV0dXJuICBOb3RoaW5nLgorICAgKgorICAgKiAgUmVvcmRlcnMgdGhlIGVsZW1lbnRzIGluIHRoZSByYW5nZSBAcCBbZmlyc3QsbGFzdCkgdXNpbmcgQHAgZyB0bworICAgKiAgcHJvdmlkZSByYW5kb20gbnVtYmVycy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgIHZvaWQKKyAgICBzaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAorCSAgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX19nKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PAorCSAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwlyZXR1cm47CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorCV9EaXN0YW5jZVR5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjptYWtlX3Vuc2lnbmVkPF9EaXN0YW5jZVR5cGU+Ojp0eXBlIF9fdWRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjp1bmlmb3JtX2ludF9kaXN0cmlidXRpb248X191ZF90eXBlPiBfX2Rpc3RyX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZGlzdHJfdHlwZTo6cGFyYW1fdHlwZSBfX3BfdHlwZTsKKyAgICAgIF9fZGlzdHJfdHlwZSBfX2Q7CisKKyAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKKwlzdGQ6Oml0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX2QoX19nLCBfX3BfdHlwZSgwLCBfX2kgLSBfX2ZpcnN0KSkpOworICAgIH0KKyNlbmRpZgorCisjZW5kaWYgLy8gX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCitfR0xJQkNYWF9CRUdJTl9ORVNURURfTkFNRVNQQUNFKHN0ZCwgX0dMSUJDWFhfU1REX1ApCisKKyAgLyoqCisgICAqICBAYnJpZWYgQXBwbHkgYSBmdW5jdGlvbiB0byBldmVyeSBlbGVtZW50IG9mIGEgc2VxdWVuY2UuCisgICAqICBAaW5ncm91cCBub25fbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgZiAgICAgIEEgdW5hcnkgZnVuY3Rpb24gb2JqZWN0LgorICAgKiAgQHJldHVybiAgIEBwIGYgKHN0ZDo6bW92ZShAcCBmKSBpbiBDKysweCkuCisgICAqCisgICAqICBBcHBsaWVzIHRoZSBmdW5jdGlvbiBvYmplY3QgQHAgZiB0byBlYWNoIGVsZW1lbnQgaW4gdGhlIHJhbmdlCisgICAqICBAcCBbZmlyc3QsbGFzdCkuICBAcCBmIG11c3Qgbm90IG1vZGlmeSB0aGUgb3JkZXIgb2YgdGhlIHNlcXVlbmNlLgorICAgKiAgSWYgQHAgZiBoYXMgYSByZXR1cm4gdmFsdWUgaXQgaXMgaWdub3JlZC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9GdW5jdGlvbj4KKyAgICBfRnVuY3Rpb24KKyAgICBmb3JfZWFjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9GdW5jdGlvbiBfX2YpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwlfX2YoKl9fZmlyc3QpOworICAgICAgcmV0dXJuIF9HTElCQ1hYX01PVkUoX19mKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHZhbHVlIGluIGEgc2VxdWVuY2UuCisgICAqICBAaW5ncm91cCBub25fbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgdmFsICAgIFRoZSB2YWx1ZSB0byBmaW5kLgorICAgKiAgQHJldHVybiAgIFRoZSBmaXJzdCBpdGVyYXRvciBAYyBpIGluIHRoZSByYW5nZSBAcCBbZmlyc3QsbGFzdCkKKyAgICogIHN1Y2ggdGhhdCBAYyAqaSA9PSBAcCB2YWwsIG9yIEBwIGxhc3QgaWYgbm8gc3VjaCBpdGVyYXRvciBleGlzdHMuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9JbnB1dEl0ZXJhdG9yCisgICAgZmluZChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJIGNvbnN0IF9UcCYgX192YWwpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9FcXVhbE9wQ29uY2VwdDwKKwkJdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSwgX1RwPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworICAgICAgcmV0dXJuIHN0ZDo6X19maW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsCisJCSAgICAgICAgIHN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIEZpbmQgdGhlIGZpcnN0IGVsZW1lbnQgaW4gYSBzZXF1ZW5jZSBmb3Igd2hpY2ggYQorICAgKiAgICAgICAgIHByZWRpY2F0ZSBpcyB0cnVlLgorICAgKiAgQGluZ3JvdXAgbm9uX211dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIHByZWQgICBBIHByZWRpY2F0ZS4KKyAgICogIEByZXR1cm4gICBUaGUgZmlyc3QgaXRlcmF0b3IgQGMgaSBpbiB0aGUgcmFuZ2UgQHAgW2ZpcnN0LGxhc3QpCisgICAqICBzdWNoIHRoYXQgQHAgcHJlZCgqaSkgaXMgdHJ1ZSwgb3IgQHAgbGFzdCBpZiBubyBzdWNoIGl0ZXJhdG9yIGV4aXN0cy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgaW5saW5lIF9JbnB1dEl0ZXJhdG9yCisgICAgZmluZF9pZihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICAgIF9QcmVkaWNhdGUgX19wcmVkKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfVW5hcnlQcmVkaWNhdGVDb25jZXB0PF9QcmVkaWNhdGUsCisJICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKyAgICAgIHJldHVybiBzdGQ6Ol9fZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKKwkJCSAgICBzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgRmluZCBlbGVtZW50IGZyb20gYSBzZXQgaW4gYSBzZXF1ZW5jZS4KKyAgICogIEBpbmdyb3VwIG5vbl9tdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGZpcnN0MSAgU3RhcnQgb2YgcmFuZ2UgdG8gc2VhcmNoLgorICAgKiAgQHBhcmFtICBsYXN0MSAgIEVuZCBvZiByYW5nZSB0byBzZWFyY2guCisgICAqICBAcGFyYW0gIGZpcnN0MiAgU3RhcnQgb2YgbWF0Y2ggY2FuZGlkYXRlcy4KKyAgICogIEBwYXJhbSAgbGFzdDIgICBFbmQgb2YgbWF0Y2ggY2FuZGlkYXRlcy4KKyAgICogIEByZXR1cm4gICBUaGUgZmlyc3QgaXRlcmF0b3IgQGMgaSBpbiB0aGUgcmFuZ2UKKyAgICogIEBwIFtmaXJzdDEsbGFzdDEpIHN1Y2ggdGhhdCBAYyAqaSA9PSBAcCAqKGkyKSBzdWNoIHRoYXQgaTIgaXMgYW4KKyAgICogIGl0ZXJhdG9yIGluIFtmaXJzdDIsbGFzdDIpLCBvciBAcCBsYXN0MSBpZiBubyBzdWNoIGl0ZXJhdG9yIGV4aXN0cy4KKyAgICoKKyAgICogIFNlYXJjaGVzIHRoZSByYW5nZSBAcCBbZmlyc3QxLGxhc3QxKSBmb3IgYW4gZWxlbWVudCB0aGF0IGlzIGVxdWFsIHRvCisgICAqICBzb21lIGVsZW1lbnQgaW4gdGhlIHJhbmdlIFtmaXJzdDIsbGFzdDIpLiAgSWYgZm91bmQsIHJldHVybnMgYW4gaXRlcmF0b3IKKyAgICogIGluIHRoZSByYW5nZSBbZmlyc3QxLGxhc3QxKSwgb3RoZXJ3aXNlIHJldHVybnMgQHAgbGFzdDEuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgIF9JbnB1dEl0ZXJhdG9yCisgICAgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3IgX19sYXN0MSwKKwkJICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdDIpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9FcXVhbE9wQ29uY2VwdDwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MSwgX19sYXN0MSk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdDIsIF9fbGFzdDIpOworCisgICAgICBmb3IgKDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSkKKwlmb3IgKF9Gb3J3YXJkSXRlcmF0b3IgX19pdGVyID0gX19maXJzdDI7IF9faXRlciAhPSBfX2xhc3QyOyArK19faXRlcikKKwkgIGlmICgqX19maXJzdDEgPT0gKl9faXRlcikKKwkgICAgcmV0dXJuIF9fZmlyc3QxOworICAgICAgcmV0dXJuIF9fbGFzdDE7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBGaW5kIGVsZW1lbnQgZnJvbSBhIHNldCBpbiBhIHNlcXVlbmNlIHVzaW5nIGEgcHJlZGljYXRlLgorICAgKiAgQGluZ3JvdXAgbm9uX211dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QxICBTdGFydCBvZiByYW5nZSB0byBzZWFyY2guCisgICAqICBAcGFyYW0gIGxhc3QxICAgRW5kIG9mIHJhbmdlIHRvIHNlYXJjaC4KKyAgICogIEBwYXJhbSAgZmlyc3QyICBTdGFydCBvZiBtYXRjaCBjYW5kaWRhdGVzLgorICAgKiAgQHBhcmFtICBsYXN0MiAgIEVuZCBvZiBtYXRjaCBjYW5kaWRhdGVzLgorICAgKiAgQHBhcmFtICBjb21wICAgIFByZWRpY2F0ZSB0byB1c2UuCisgICAqICBAcmV0dXJuICAgVGhlIGZpcnN0IGl0ZXJhdG9yIEBjIGkgaW4gdGhlIHJhbmdlCisgICAqICBAcCBbZmlyc3QxLGxhc3QxKSBzdWNoIHRoYXQgQGMgY29tcCgqaSwgQHAgKihpMikpIGlzIHRydWUgYW5kIGkyIGlzIGFuCisgICAqICBpdGVyYXRvciBpbiBbZmlyc3QyLGxhc3QyKSwgb3IgQHAgbGFzdDEgaWYgbm8gc3VjaCBpdGVyYXRvciBleGlzdHMuCisgICAqCisKKyAgICogIFNlYXJjaGVzIHRoZSByYW5nZSBAcCBbZmlyc3QxLGxhc3QxKSBmb3IgYW4gZWxlbWVudCB0aGF0IGlzCisgICAqICBlcXVhbCB0byBzb21lIGVsZW1lbnQgaW4gdGhlIHJhbmdlIFtmaXJzdDIsbGFzdDIpLiAgSWYgZm91bmQsCisgICAqICByZXR1cm5zIGFuIGl0ZXJhdG9yIGluIHRoZSByYW5nZSBbZmlyc3QxLGxhc3QxKSwgb3RoZXJ3aXNlCisgICAqICByZXR1cm5zIEBwIGxhc3QxLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgorICAgIF9JbnB1dEl0ZXJhdG9yCisgICAgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3IgX19sYXN0MSwKKwkJICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdDIsCisJCSAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9CaW5hcnlQcmVkaWNhdGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdDEsIF9fbGFzdDEpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QyLCBfX2xhc3QyKTsKKworICAgICAgZm9yICg7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCisJZm9yIChfRm9yd2FyZEl0ZXJhdG9yIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCisJICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9faXRlcikpCisJICAgIHJldHVybiBfX2ZpcnN0MTsKKyAgICAgIHJldHVybiBfX2xhc3QxOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBGaW5kIHR3byBhZGphY2VudCB2YWx1ZXMgaW4gYSBzZXF1ZW5jZSB0aGF0IGFyZSBlcXVhbC4KKyAgICogIEBpbmdyb3VwIG5vbl9tdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGZpcnN0ICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QgICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcmV0dXJuICAgVGhlIGZpcnN0IGl0ZXJhdG9yIEBjIGkgc3VjaCB0aGF0IEBjIGkgYW5kIEBjIGkrMSBhcmUgYm90aAorICAgKiAgdmFsaWQgaXRlcmF0b3JzIGluIEBwIFtmaXJzdCxsYXN0KSBhbmQgc3VjaCB0aGF0IEBjICppID09IEBjICooaSsxKSwKKyAgICogIG9yIEBwIGxhc3QgaWYgbm8gc3VjaCBpdGVyYXRvciBleGlzdHMuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgX0ZvcndhcmRJdGVyYXRvcgorICAgIGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9FcXVhbGl0eUNvbXBhcmFibGVDb25jZXB0PAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCisJcmV0dXJuIF9fbGFzdDsKKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKKyAgICAgIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkKKwl7CisJICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkKKwkgICAgcmV0dXJuIF9fZmlyc3Q7CisJICBfX2ZpcnN0ID0gX19uZXh0OworCX0KKyAgICAgIHJldHVybiBfX2xhc3Q7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIEZpbmQgdHdvIGFkamFjZW50IHZhbHVlcyBpbiBhIHNlcXVlbmNlIHVzaW5nIGEgcHJlZGljYXRlLgorICAgKiAgQGluZ3JvdXAgbm9uX211dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgICAgICAgICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QgICAgICAgICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBiaW5hcnlfcHJlZCAgIEEgYmluYXJ5IHByZWRpY2F0ZS4KKyAgICogIEByZXR1cm4gICBUaGUgZmlyc3QgaXRlcmF0b3IgQGMgaSBzdWNoIHRoYXQgQGMgaSBhbmQgQGMgaSsxIGFyZSBib3RoCisgICAqICB2YWxpZCBpdGVyYXRvcnMgaW4gQHAgW2ZpcnN0LGxhc3QpIGFuZCBzdWNoIHRoYXQKKyAgICogIEBwIGJpbmFyeV9wcmVkKCppLCooaSsxKSkgaXMgdHJ1ZSwgb3IgQHAgbGFzdCBpZiBubyBzdWNoIGl0ZXJhdG9yCisgICAqICBleGlzdHMuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgX0ZvcndhcmRJdGVyYXRvcgorICAgIGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkJICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQmluYXJ5UHJlZGljYXRlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwlyZXR1cm4gX19sYXN0OworICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OworICAgICAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KQorCXsKKwkgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0KSkKKwkgICAgcmV0dXJuIF9fZmlyc3Q7CisJICBfX2ZpcnN0ID0gX19uZXh0OworCX0KKyAgICAgIHJldHVybiBfX2xhc3Q7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIENvdW50IHRoZSBudW1iZXIgb2YgY29waWVzIG9mIGEgdmFsdWUgaW4gYSBzZXF1ZW5jZS4KKyAgICogIEBpbmdyb3VwIG5vbl9tdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGZpcnN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICB2YWx1ZSAgVGhlIHZhbHVlIHRvIGJlIGNvdW50ZWQuCisgICAqICBAcmV0dXJuICAgVGhlIG51bWJlciBvZiBpdGVyYXRvcnMgQGMgaSBpbiB0aGUgcmFuZ2UgQHAgW2ZpcnN0LGxhc3QpCisgICAqICBmb3Igd2hpY2ggQGMgKmkgPT0gQHAgdmFsdWUKKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBjb3VudChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0VxdWFsT3BDb25jZXB0PAorCXR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGUsIF9UcD4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKyAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOworICAgICAgZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCisJaWYgKCpfX2ZpcnN0ID09IF9fdmFsdWUpCisJICArK19fbjsKKyAgICAgIHJldHVybiBfX247CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIENvdW50IHRoZSBlbGVtZW50cyBvZiBhIHNlcXVlbmNlIGZvciB3aGljaCBhIHByZWRpY2F0ZSBpcyB0cnVlLgorICAgKiAgQGluZ3JvdXAgbm9uX211dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIHByZWQgICBBIHByZWRpY2F0ZS4KKyAgICogIEByZXR1cm4gICBUaGUgbnVtYmVyIG9mIGl0ZXJhdG9ycyBAYyBpIGluIHRoZSByYW5nZSBAcCBbZmlyc3QsbGFzdCkKKyAgICogIGZvciB3aGljaCBAcCBwcmVkKCppKSBpcyB0cnVlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBjb3VudF9pZihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfVW5hcnlQcmVkaWNhdGVDb25jZXB0PF9QcmVkaWNhdGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKKyAgICAgIGZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQorCWlmIChfX3ByZWQoKl9fZmlyc3QpKQorCSAgKytfX247CisgICAgICByZXR1cm4gX19uOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBTZWFyY2ggYSBzZXF1ZW5jZSBmb3IgYSBtYXRjaGluZyBzdWItc2VxdWVuY2UuCisgICAqICBAaW5ncm91cCBub25fbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdDEgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdDEgICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGZpcnN0MiAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0MiAgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEByZXR1cm4gICBUaGUgZmlyc3QgaXRlcmF0b3IgQGMgaSBpbiB0aGUgcmFuZ2UKKyAgICogIEBwIFtmaXJzdDEsbGFzdDEtKGxhc3QyLWZpcnN0MikpIHN1Y2ggdGhhdCBAYyAqKGkrTikgPT0gQHAgKihmaXJzdDIrTikKKyAgICogIGZvciBlYWNoIEBjIE4gaW4gdGhlIHJhbmdlIEBwIFswLGxhc3QyLWZpcnN0MiksIG9yIEBwIGxhc3QxIGlmIG5vCisgICAqICBzdWNoIGl0ZXJhdG9yIGV4aXN0cy4KKyAgICoKKyAgICogIFNlYXJjaGVzIHRoZSByYW5nZSBAcCBbZmlyc3QxLGxhc3QxKSBmb3IgYSBzdWItc2VxdWVuY2UgdGhhdCBjb21wYXJlcworICAgKiAgZXF1YWwgdmFsdWUtYnktdmFsdWUgd2l0aCB0aGUgc2VxdWVuY2UgZ2l2ZW4gYnkgQHAgW2ZpcnN0MixsYXN0MikgYW5kCisgICAqICByZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBzdWItc2VxdWVuY2UsIG9yCisgICAqICBAcCBsYXN0MSBpZiB0aGUgc3ViLXNlcXVlbmNlIGlzIG5vdCBmb3VuZC4KKyAgICoKKyAgICogIEJlY2F1c2UgdGhlIHN1Yi1zZXF1ZW5jZSBtdXN0IGxpZSBjb21wbGV0ZWx5IHdpdGhpbiB0aGUgcmFuZ2UKKyAgICogIEBwIFtmaXJzdDEsbGFzdDEpIGl0IG11c3Qgc3RhcnQgYXQgYSBwb3NpdGlvbiBsZXNzIHRoYW4KKyAgICogIEBwIGxhc3QxLShsYXN0Mi1maXJzdDIpIHdoZXJlIEBwIGxhc3QyLWZpcnN0MiBpcyB0aGUgbGVuZ3RoIG9mIHRoZQorICAgKiAgc3ViLXNlcXVlbmNlLgorICAgKiAgVGhpcyBtZWFucyB0aGF0IHRoZSByZXR1cm5lZCBpdGVyYXRvciBAYyBpIHdpbGwgYmUgaW4gdGhlIHJhbmdlCisgICAqICBAcCBbZmlyc3QxLGxhc3QxLShsYXN0Mi1maXJzdDIpKQorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcjI+CisgICAgX0ZvcndhcmRJdGVyYXRvcjEKKyAgICBzZWFyY2goX0ZvcndhcmRJdGVyYXRvcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcmF0b3IxIF9fbGFzdDEsCisJICAgX0ZvcndhcmRJdGVyYXRvcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcmF0b3IyIF9fbGFzdDIpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcjI+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9FcXVhbE9wQ29uY2VwdDwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3IxPjo6dmFsdWVfdHlwZSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3IyPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdDEsIF9fbGFzdDEpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QyLCBfX2xhc3QyKTsKKworICAgICAgLy8gVGVzdCBmb3IgZW1wdHkgcmFuZ2VzCisgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9PSBfX2xhc3QyKQorCXJldHVybiBfX2ZpcnN0MTsKKworICAgICAgLy8gVGVzdCBmb3IgYSBwYXR0ZXJuIG9mIGxlbmd0aCAxLgorICAgICAgX0ZvcndhcmRJdGVyYXRvcjIgX19wMShfX2ZpcnN0Mik7CisgICAgICBpZiAoKytfX3AxID09IF9fbGFzdDIpCisJcmV0dXJuIF9HTElCQ1hYX1NURF9QOjpmaW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIpOworCisgICAgICAvLyBHZW5lcmFsIGNhc2UuCisgICAgICBfRm9yd2FyZEl0ZXJhdG9yMiBfX3A7CisgICAgICBfRm9yd2FyZEl0ZXJhdG9yMSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKKworICAgICAgZm9yICg7OykKKwl7CisJICBfX2ZpcnN0MSA9IF9HTElCQ1hYX1NURF9QOjpmaW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIpOworCSAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCisJICAgIHJldHVybiBfX2xhc3QxOworCisJICBfX3AgPSBfX3AxOworCSAgX19jdXJyZW50ID0gX19maXJzdDE7CisJICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKKwkgICAgcmV0dXJuIF9fbGFzdDE7CisKKwkgIHdoaWxlICgqX19jdXJyZW50ID09ICpfX3ApCisJICAgIHsKKwkgICAgICBpZiAoKytfX3AgPT0gX19sYXN0MikKKwkJcmV0dXJuIF9fZmlyc3QxOworCSAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQorCQlyZXR1cm4gX19sYXN0MTsKKwkgICAgfQorCSAgKytfX2ZpcnN0MTsKKwl9CisgICAgICByZXR1cm4gX19maXJzdDE7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIFNlYXJjaCBhIHNlcXVlbmNlIGZvciBhIG1hdGNoaW5nIHN1Yi1zZXF1ZW5jZSB1c2luZyBhIHByZWRpY2F0ZS4KKyAgICogIEBpbmdyb3VwIG5vbl9tdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGZpcnN0MSAgICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0MSAgICAgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgZmlyc3QyICAgICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QyICAgICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBwcmVkaWNhdGUgIEEgYmluYXJ5IHByZWRpY2F0ZS4KKyAgICogIEByZXR1cm4gICBUaGUgZmlyc3QgaXRlcmF0b3IgQGMgaSBpbiB0aGUgcmFuZ2UKKyAgICogIEBwIFtmaXJzdDEsbGFzdDEtKGxhc3QyLWZpcnN0MikpIHN1Y2ggdGhhdAorICAgKiAgQHAgcHJlZGljYXRlKCooaStOKSwqKGZpcnN0MitOKSkgaXMgdHJ1ZSBmb3IgZWFjaCBAYyBOIGluIHRoZSByYW5nZQorICAgKiAgQHAgWzAsbGFzdDItZmlyc3QyKSwgb3IgQHAgbGFzdDEgaWYgbm8gc3VjaCBpdGVyYXRvciBleGlzdHMuCisgICAqCisgICAqICBTZWFyY2hlcyB0aGUgcmFuZ2UgQHAgW2ZpcnN0MSxsYXN0MSkgZm9yIGEgc3ViLXNlcXVlbmNlIHRoYXQgY29tcGFyZXMKKyAgICogIGVxdWFsIHZhbHVlLWJ5LXZhbHVlIHdpdGggdGhlIHNlcXVlbmNlIGdpdmVuIGJ5IEBwIFtmaXJzdDIsbGFzdDIpLAorICAgKiAgdXNpbmcgQHAgcHJlZGljYXRlIHRvIGRldGVybWluZSBlcXVhbGl0eSwgYW5kIHJldHVybnMgYW4gaXRlcmF0b3IKKyAgICogIHRvIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBzdWItc2VxdWVuY2UsIG9yIEBwIGxhc3QxIGlmIG5vIHN1Y2gKKyAgICogIGl0ZXJhdG9yIGV4aXN0cy4KKyAgICoKKyAgICogIEBzZWUgc2VhcmNoKF9Gb3J3YXJkSXRlcjEsIF9Gb3J3YXJkSXRlcjEsIF9Gb3J3YXJkSXRlcjIsIF9Gb3J3YXJkSXRlcjIpCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yMiwKKwkgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgorICAgIF9Gb3J3YXJkSXRlcmF0b3IxCisgICAgc2VhcmNoKF9Gb3J3YXJkSXRlcmF0b3IxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXJhdG9yMSBfX2xhc3QxLAorCSAgIF9Gb3J3YXJkSXRlcmF0b3IyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXJhdG9yMiBfX2xhc3QyLAorCSAgIF9CaW5hcnlQcmVkaWNhdGUgIF9fcHJlZGljYXRlKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcjE+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3IyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQmluYXJ5UHJlZGljYXRlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcjE+Ojp2YWx1ZV90eXBlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcjI+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MSwgX19sYXN0MSk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdDIsIF9fbGFzdDIpOworCisgICAgICAvLyBUZXN0IGZvciBlbXB0eSByYW5nZXMKKyAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIpCisJcmV0dXJuIF9fZmlyc3QxOworCisgICAgICAvLyBUZXN0IGZvciBhIHBhdHRlcm4gb2YgbGVuZ3RoIDEuCisgICAgICBfRm9yd2FyZEl0ZXJhdG9yMiBfX3AxKF9fZmlyc3QyKTsKKyAgICAgIGlmICgrK19fcDEgPT0gX19sYXN0MikKKwl7CisJICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MQorCQkgJiYgIWJvb2woX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKSkKKwkgICAgKytfX2ZpcnN0MTsKKwkgIHJldHVybiBfX2ZpcnN0MTsKKwl9CisKKyAgICAgIC8vIEdlbmVyYWwgY2FzZS4KKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IyIF9fcDsKKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IxIF9fY3VycmVudCA9IF9fZmlyc3QxOworCisgICAgICBmb3IgKDs7KQorCXsKKwkgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxCisJCSAmJiAhYm9vbChfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpKQorCSAgICArK19fZmlyc3QxOworCSAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCisJICAgIHJldHVybiBfX2xhc3QxOworCisJICBfX3AgPSBfX3AxOworCSAgX19jdXJyZW50ID0gX19maXJzdDE7CisJICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKKwkgICAgcmV0dXJuIF9fbGFzdDE7CisKKwkgIHdoaWxlIChfX3ByZWRpY2F0ZSgqX19jdXJyZW50LCAqX19wKSkKKwkgICAgeworCSAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQorCQlyZXR1cm4gX19maXJzdDE7CisJICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCisJCXJldHVybiBfX2xhc3QxOworCSAgICB9CisJICArK19fZmlyc3QxOworCX0KKyAgICAgIHJldHVybiBfX2ZpcnN0MTsKKyAgICB9CisKKworICAvKioKKyAgICogIEBicmllZiBTZWFyY2ggYSBzZXF1ZW5jZSBmb3IgYSBudW1iZXIgb2YgY29uc2VjdXRpdmUgdmFsdWVzLgorICAgKiAgQGluZ3JvdXAgbm9uX211dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgY291bnQgIFRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgdmFsdWVzLgorICAgKiAgQHBhcmFtICB2YWwgICAgVGhlIHZhbHVlIHRvIGZpbmQuCisgICAqICBAcmV0dXJuICAgVGhlIGZpcnN0IGl0ZXJhdG9yIEBjIGkgaW4gdGhlIHJhbmdlIEBwIFtmaXJzdCxsYXN0LWNvdW50KQorICAgKiAgc3VjaCB0aGF0IEBjICooaStOKSA9PSBAcCB2YWwgZm9yIGVhY2ggQGMgTiBpbiB0aGUgcmFuZ2UgQHAgWzAsY291bnQpLAorICAgKiAgb3IgQHAgbGFzdCBpZiBubyBzdWNoIGl0ZXJhdG9yIGV4aXN0cy4KKyAgICoKKyAgICogIFNlYXJjaGVzIHRoZSByYW5nZSBAcCBbZmlyc3QsbGFzdCkgZm9yIEBwIGNvdW50IGNvbnNlY3V0aXZlIGVsZW1lbnRzCisgICAqICBlcXVhbCB0byBAcCB2YWwuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHA+CisgICAgX0ZvcndhcmRJdGVyYXRvcgorICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0VxdWFsT3BDb25jZXB0PAorCXR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSwgX1RwPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBpZiAoX19jb3VudCA8PSAwKQorCXJldHVybiBfX2ZpcnN0OworICAgICAgaWYgKF9fY291bnQgPT0gMSkKKwlyZXR1cm4gX0dMSUJDWFhfU1REX1A6OmZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CisgICAgICByZXR1cm4gc3RkOjpfX3NlYXJjaF9uKF9fZmlyc3QsIF9fbGFzdCwgX19jb3VudCwgX192YWwsCisJCQkgICAgIHN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CisgICAgfQorCisKKyAgLyoqCisgICAqICBAYnJpZWYgU2VhcmNoIGEgc2VxdWVuY2UgZm9yIGEgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHZhbHVlcyB1c2luZyBhCisgICAqICAgICAgICAgcHJlZGljYXRlLgorICAgKiAgQGluZ3JvdXAgbm9uX211dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgICAgICAgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgICAgICAgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgY291bnQgICAgICAgIFRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgdmFsdWVzLgorICAgKiAgQHBhcmFtICB2YWwgICAgICAgICAgVGhlIHZhbHVlIHRvIGZpbmQuCisgICAqICBAcGFyYW0gIGJpbmFyeV9wcmVkICBBIGJpbmFyeSBwcmVkaWNhdGUuCisgICAqICBAcmV0dXJuICAgVGhlIGZpcnN0IGl0ZXJhdG9yIEBjIGkgaW4gdGhlIHJhbmdlIEBwIFtmaXJzdCxsYXN0LWNvdW50KQorICAgKiAgc3VjaCB0aGF0IEBwIGJpbmFyeV9wcmVkKCooaStOKSx2YWwpIGlzIHRydWUgZm9yIGVhY2ggQGMgTiBpbiB0aGUKKyAgICogIHJhbmdlIEBwIFswLGNvdW50KSwgb3IgQHAgbGFzdCBpZiBubyBzdWNoIGl0ZXJhdG9yIGV4aXN0cy4KKyAgICoKKyAgICogIFNlYXJjaGVzIHRoZSByYW5nZSBAcCBbZmlyc3QsbGFzdCkgZm9yIEBwIGNvdW50IGNvbnNlY3V0aXZlIGVsZW1lbnRzCisgICAqICBmb3Igd2hpY2ggdGhlIHByZWRpY2F0ZSByZXR1cm5zIHRydWUuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHAsCisgICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgX0ZvcndhcmRJdGVyYXRvcgorICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsLAorCSAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X0JpbmFyeVByZWRpY2F0ZSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLCBfVHA+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIGlmIChfX2NvdW50IDw9IDApCisJcmV0dXJuIF9fZmlyc3Q7CisgICAgICBpZiAoX19jb3VudCA9PSAxKQorCXsKKwkgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhYm9vbChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCBfX3ZhbCkpKQorCSAgICArK19fZmlyc3Q7CisJICByZXR1cm4gX19maXJzdDsKKwl9CisgICAgICByZXR1cm4gc3RkOjpfX3NlYXJjaF9uKF9fZmlyc3QsIF9fbGFzdCwgX19jb3VudCwgX192YWwsIF9fYmluYXJ5X3ByZWQsCisJCQkgICAgIHN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CisgICAgfQorCisKKyAgLyoqCisgICAqICBAYnJpZWYgUGVyZm9ybSBhbiBvcGVyYXRpb24gb24gYSBzZXF1ZW5jZS4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgICAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0ICAgICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIHJlc3VsdCAgICBBbiBvdXRwdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIHVuYXJ5X29wICBBIHVuYXJ5IG9wZXJhdG9yLgorICAgKiAgQHJldHVybiAgIEFuIG91dHB1dCBpdGVyYXRvciBlcXVhbCB0byBAcCByZXN1bHQrKGxhc3QtZmlyc3QpLgorICAgKgorICAgKiAgQXBwbGllcyB0aGUgb3BlcmF0b3IgdG8gZWFjaCBlbGVtZW50IGluIHRoZSBpbnB1dCByYW5nZSBhbmQgYXNzaWducworICAgKiAgdGhlIHJlc3VsdHMgdG8gc3VjY2Vzc2l2ZSBlbGVtZW50cyBvZiB0aGUgb3V0cHV0IHNlcXVlbmNlLgorICAgKiAgRXZhbHVhdGVzIEBwICoocmVzdWx0K04pPXVuYXJ5X29wKCooZmlyc3QrTikpIGZvciBlYWNoIEBjIE4gaW4gdGhlCisgICAqICByYW5nZSBAcCBbMCxsYXN0LWZpcnN0KS4KKyAgICoKKyAgICogIEBwIHVuYXJ5X29wIG11c3Qgbm90IGFsdGVyIGl0cyBhcmd1bWVudC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfVW5hcnlPcGVyYXRpb24+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgdHJhbnNmb3JtKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIF9VbmFyeU9wZXJhdGlvbiBfX3VuYXJ5X29wKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKyAgICAgICAgICAgIC8vICJ0aGUgdHlwZSByZXR1cm5lZCBieSBhIF9VbmFyeU9wZXJhdGlvbiIKKyAgICAgICAgICAgIF9fdHlwZW9mX18oX191bmFyeV9vcCgqX19maXJzdCkpPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKKwkqX19yZXN1bHQgPSBfX3VuYXJ5X29wKCpfX2ZpcnN0KTsKKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgUGVyZm9ybSBhbiBvcGVyYXRpb24gb24gY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiB0d28gc2VxdWVuY2VzLgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdDEgICAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0MSAgICAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBmaXJzdDIgICAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICByZXN1bHQgICAgIEFuIG91dHB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgYmluYXJ5X29wICBBIGJpbmFyeSBvcGVyYXRvci4KKyAgICogIEByZXR1cm4gICBBbiBvdXRwdXQgaXRlcmF0b3IgZXF1YWwgdG8gQHAgcmVzdWx0KyhsYXN0LWZpcnN0KS4KKyAgICoKKyAgICogIEFwcGxpZXMgdGhlIG9wZXJhdG9yIHRvIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIGluIHRoZSB0d28KKyAgICogIGlucHV0IHJhbmdlcyBhbmQgYXNzaWducyB0aGUgcmVzdWx0cyB0byBzdWNjZXNzaXZlIGVsZW1lbnRzIG9mIHRoZQorICAgKiAgb3V0cHV0IHNlcXVlbmNlLgorICAgKiAgRXZhbHVhdGVzIEBwICoocmVzdWx0K04pPWJpbmFyeV9vcCgqKGZpcnN0MStOKSwqKGZpcnN0MitOKSkgZm9yIGVhY2gKKyAgICogIEBjIE4gaW4gdGhlIHJhbmdlIEBwIFswLGxhc3QxLWZpcnN0MSkuCisgICAqCisgICAqICBAcCBiaW5hcnlfb3AgbXVzdCBub3QgYWx0ZXIgZWl0aGVyIG9mIGl0cyBhcmd1bWVudHMuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLAorCSAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwgdHlwZW5hbWUgX0JpbmFyeU9wZXJhdGlvbj4KKyAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICB0cmFuc2Zvcm0oX0lucHV0SXRlcmF0b3IxIF9fZmlyc3QxLCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKKwkgICAgICBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIsIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwKKwkgICAgICBfQmluYXJ5T3BlcmF0aW9uIF9fYmluYXJ5X29wKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3IsCisgICAgICAgICAgICAvLyAidGhlIHR5cGUgcmV0dXJuZWQgYnkgYSBfQmluYXJ5T3BlcmF0aW9uIgorICAgICAgICAgICAgX190eXBlb2ZfXyhfX2JpbmFyeV9vcCgqX19maXJzdDEsKl9fZmlyc3QyKSk+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QxLCBfX2xhc3QxKTsKKworICAgICAgZm9yICg7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIsICsrX19yZXN1bHQpCisJKl9fcmVzdWx0ID0gX19iaW5hcnlfb3AoKl9fZmlyc3QxLCAqX19maXJzdDIpOworICAgICAgcmV0dXJuIF9fcmVzdWx0OworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBSZXBsYWNlIGVhY2ggb2NjdXJyZW5jZSBvZiBvbmUgdmFsdWUgaW4gYSBzZXF1ZW5jZSB3aXRoIGFub3RoZXIKKyAgICogICAgICAgICB2YWx1ZS4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgICAgICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QgICAgICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBvbGRfdmFsdWUgIFRoZSB2YWx1ZSB0byBiZSByZXBsYWNlZC4KKyAgICogIEBwYXJhbSAgbmV3X3ZhbHVlICBUaGUgcmVwbGFjZW1lbnQgdmFsdWUuCisgICAqICBAcmV0dXJuICAgcmVwbGFjZSgpIHJldHVybnMgbm8gdmFsdWUuCisgICAqCisgICAqICBGb3IgZWFjaCBpdGVyYXRvciBAYyBpIGluIHRoZSByYW5nZSBAcCBbZmlyc3QsbGFzdCkgaWYgQGMgKmkgPT0KKyAgICogIEBwIG9sZF92YWx1ZSB0aGVuIHRoZSBhc3NpZ25tZW50IEBjICppID0gQHAgbmV3X3ZhbHVlIGlzIHBlcmZvcm1lZC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICByZXBsYWNlKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgX0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0VxdWFsT3BDb25jZXB0PAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUsIF9UcD4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0NvbnZlcnRpYmxlQ29uY2VwdDxfVHAsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCisJaWYgKCpfX2ZpcnN0ID09IF9fb2xkX3ZhbHVlKQorCSAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgUmVwbGFjZSBlYWNoIHZhbHVlIGluIGEgc2VxdWVuY2UgZm9yIHdoaWNoIGEgcHJlZGljYXRlIHJldHVybnMKKyAgICogICAgICAgICB0cnVlIHdpdGggYW5vdGhlciB2YWx1ZS4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgICAgICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QgICAgICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBwcmVkICAgICAgIEEgcHJlZGljYXRlLgorICAgKiAgQHBhcmFtICBuZXdfdmFsdWUgIFRoZSByZXBsYWNlbWVudCB2YWx1ZS4KKyAgICogIEByZXR1cm4gICByZXBsYWNlX2lmKCkgcmV0dXJucyBubyB2YWx1ZS4KKyAgICoKKyAgICogIEZvciBlYWNoIGl0ZXJhdG9yIEBjIGkgaW4gdGhlIHJhbmdlIEBwIFtmaXJzdCxsYXN0KSBpZiBAcCBwcmVkKCppKQorICAgKiAgaXMgdHJ1ZSB0aGVuIHRoZSBhc3NpZ25tZW50IEBjICppID0gQHAgbmV3X3ZhbHVlIGlzIHBlcmZvcm1lZC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICByZXBsYWNlX2lmKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Db252ZXJ0aWJsZUNvbmNlcHQ8X1RwLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9VbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X1ByZWRpY2F0ZSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwlpZiAoX19wcmVkKCpfX2ZpcnN0KSkKKwkgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIEFzc2lnbiB0aGUgcmVzdWx0IG9mIGEgZnVuY3Rpb24gb2JqZWN0IHRvIGVhY2ggdmFsdWUgaW4gYQorICAgKiAgICAgICAgIHNlcXVlbmNlLgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0ICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBnZW4gICAgQSBmdW5jdGlvbiBvYmplY3QgdGFraW5nIG5vIGFyZ3VtZW50cyBhbmQgcmV0dXJuaW5nCisgICAqICAgICAgICAgICAgICAgICBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQorICAgKiAgQHJldHVybiAgIGdlbmVyYXRlKCkgcmV0dXJucyBubyB2YWx1ZS4KKyAgICoKKyAgICogIFBlcmZvcm1zIHRoZSBhc3NpZ25tZW50IEBjICppID0gQHAgZ2VuKCkgZm9yIGVhY2ggQGMgaSBpbiB0aGUgcmFuZ2UKKyAgICogIEBwIFtmaXJzdCxsYXN0KS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX0dlbmVyYXRvcj4KKyAgICB2b2lkCisgICAgZ2VuZXJhdGUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgIF9HZW5lcmF0b3IgX19nZW4pCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfR2VuZXJhdG9yQ29uY2VwdDxfR2VuZXJhdG9yLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIGZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQorCSpfX2ZpcnN0ID0gX19nZW4oKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgQXNzaWduIHRoZSByZXN1bHQgb2YgYSBmdW5jdGlvbiBvYmplY3QgdG8gZWFjaCB2YWx1ZSBpbiBhCisgICAqICAgICAgICAgc2VxdWVuY2UuCisgICAqICBAaW5ncm91cCBtdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGZpcnN0ICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIG4gICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZS4KKyAgICogIEBwYXJhbSAgZ2VuICAgIEEgZnVuY3Rpb24gb2JqZWN0IHRha2luZyBubyBhcmd1bWVudHMgYW5kIHJldHVybmluZworICAgKiAgICAgICAgICAgICAgICAgc3RkOjppdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUKKyAgICogIEByZXR1cm4gICBUaGUgZW5kIG9mIHRoZSBzZXF1ZW5jZSwgQHAgZmlyc3QrbgorICAgKgorICAgKiAgUGVyZm9ybXMgdGhlIGFzc2lnbm1lbnQgQGMgKmkgPSBAcCBnZW4oKSBmb3IgZWFjaCBAYyBpIGluIHRoZSByYW5nZQorICAgKiAgQHAgW2ZpcnN0LGZpcnN0K24pLgorICAgKgorICAgKiAgX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgKiAgRFIgODY1LiBNb3JlIGFsZ29yaXRobXMgdGhhdCB0aHJvdyBhd2F5IGluZm9ybWF0aW9uCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9HZW5lcmF0b3I+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgZ2VuZXJhdGVfbihfT3V0cHV0SXRlcmF0b3IgX19maXJzdCwgX1NpemUgX19uLCBfR2VuZXJhdG9yIF9fZ2VuKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3IsCisgICAgICAgICAgICAvLyAidGhlIHR5cGUgcmV0dXJuZWQgYnkgYSBfR2VuZXJhdG9yIgorICAgICAgICAgICAgX190eXBlb2ZfXyhfX2dlbigpKT4pCisKKyAgICAgIGZvciAoOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQorCSpfX2ZpcnN0ID0gX19nZW4oKTsKKyAgICAgIHJldHVybiBfX2ZpcnN0OworICAgIH0KKworCisgIC8qKgorICAgKiAgQGJyaWVmIENvcHkgYSBzZXF1ZW5jZSwgcmVtb3ZpbmcgY29uc2VjdXRpdmUgZHVwbGljYXRlIHZhbHVlcy4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgcmVzdWx0ICBBbiBvdXRwdXQgaXRlcmF0b3IuCisgICAqICBAcmV0dXJuICAgQW4gaXRlcmF0b3IgZGVzaWduYXRpbmcgdGhlIGVuZCBvZiB0aGUgcmVzdWx0aW5nIHNlcXVlbmNlLgorICAgKgorICAgKiAgQ29waWVzIGVhY2ggZWxlbWVudCBpbiB0aGUgcmFuZ2UgQHAgW2ZpcnN0LGxhc3QpIHRvIHRoZSByYW5nZQorICAgKiAgYmVnaW5uaW5nIGF0IEBwIHJlc3VsdCwgZXhjZXB0IHRoYXQgb25seSB0aGUgZmlyc3QgZWxlbWVudCBpcyBjb3BpZWQKKyAgICogIGZyb20gZ3JvdXBzIG9mIGNvbnNlY3V0aXZlIGVsZW1lbnRzIHRoYXQgY29tcGFyZSBlcXVhbC4KKyAgICogIHVuaXF1ZV9jb3B5KCkgaXMgc3RhYmxlLCBzbyB0aGUgcmVsYXRpdmUgb3JkZXIgb2YgZWxlbWVudHMgdGhhdCBhcmUKKyAgICogIGNvcGllZCBpcyB1bmNoYW5nZWQuCisgICAqCisgICAqICBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAqICBEUiAyNDEuIERvZXMgdW5pcXVlX2NvcHkoKSByZXF1aXJlIENvcHlDb25zdHJ1Y3RpYmxlIGFuZCBBc3NpZ25hYmxlPworICAgKiAgCisgICAqICBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAqICBEUiA1MzguIDI0MSBhZ2FpbjogRG9lcyB1bmlxdWVfY29weSgpIHJlcXVpcmUgQ29weUNvbnN0cnVjdGlibGUgYW5kIAorICAgKiAgQXNzaWduYWJsZT8KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvcj4KKyAgICBpbmxpbmUgX091dHB1dEl0ZXJhdG9yCisgICAgdW5pcXVlX2NvcHkoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQlfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X091dHB1dEl0ZXJhdG9yLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRXF1YWxpdHlDb21wYXJhYmxlQ29uY2VwdDwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCXJldHVybiBfX3Jlc3VsdDsKKyAgICAgIHJldHVybiBzdGQ6Ol9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKKwkJCQlzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCksCisJCQkJc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fcmVzdWx0KSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIENvcHkgYSBzZXF1ZW5jZSwgcmVtb3ZpbmcgY29uc2VjdXRpdmUgdmFsdWVzIHVzaW5nIGEgcHJlZGljYXRlLgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgICAgICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QgICAgICAgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgcmVzdWx0ICAgICAgIEFuIG91dHB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgYmluYXJ5X3ByZWQgIEEgYmluYXJ5IHByZWRpY2F0ZS4KKyAgICogIEByZXR1cm4gICBBbiBpdGVyYXRvciBkZXNpZ25hdGluZyB0aGUgZW5kIG9mIHRoZSByZXN1bHRpbmcgc2VxdWVuY2UuCisgICAqCisgICAqICBDb3BpZXMgZWFjaCBlbGVtZW50IGluIHRoZSByYW5nZSBAcCBbZmlyc3QsbGFzdCkgdG8gdGhlIHJhbmdlCisgICAqICBiZWdpbm5pbmcgYXQgQHAgcmVzdWx0LCBleGNlcHQgdGhhdCBvbmx5IHRoZSBmaXJzdCBlbGVtZW50IGlzIGNvcGllZAorICAgKiAgZnJvbSBncm91cHMgb2YgY29uc2VjdXRpdmUgZWxlbWVudHMgZm9yIHdoaWNoIEBwIGJpbmFyeV9wcmVkIHJldHVybnMKKyAgICogIHRydWUuCisgICAqICB1bmlxdWVfY29weSgpIGlzIHN0YWJsZSwgc28gdGhlIHJlbGF0aXZlIG9yZGVyIG9mIGVsZW1lbnRzIHRoYXQgYXJlCisgICAqICBjb3BpZWQgaXMgdW5jaGFuZ2VkLgorICAgKgorICAgKiAgX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgKiAgRFIgMjQxLiBEb2VzIHVuaXF1ZV9jb3B5KCkgcmVxdWlyZSBDb3B5Q29uc3RydWN0aWJsZSBhbmQgQXNzaWduYWJsZT8KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgorICAgIGlubGluZSBfT3V0cHV0SXRlcmF0b3IKKyAgICB1bmlxdWVfY29weShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCV9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwKKwkJX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzIC0tIHByZWRpY2F0ZXMgY2hlY2tlZCBsYXRlcgorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3IsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwlyZXR1cm4gX19yZXN1bHQ7CisgICAgICByZXR1cm4gc3RkOjpfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fYmluYXJ5X3ByZWQsCisJCQkJc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpLAorCQkJCXN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX3Jlc3VsdCkpOworICAgIH0KKworCisgIC8qKgorICAgKiAgQGJyaWVmIFJhbmRvbWx5IHNodWZmbGUgdGhlIGVsZW1lbnRzIG9mIGEgc2VxdWVuY2UuCisgICAqICBAaW5ncm91cCBtdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGZpcnN0ICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0ICAgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEByZXR1cm4gIE5vdGhpbmcuCisgICAqCisgICAqICBSZW9yZGVyIHRoZSBlbGVtZW50cyBpbiB0aGUgcmFuZ2UgQHAgW2ZpcnN0LGxhc3QpIHVzaW5nIGEgcmFuZG9tCisgICAqICBkaXN0cmlidXRpb24sIHNvIHRoYXQgZXZlcnkgcG9zc2libGUgb3JkZXJpbmcgb2YgdGhlIHNlcXVlbmNlIGlzCisgICAqICBlcXVhbGx5IGxpa2VseS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgorICAgIGlubGluZSB2b2lkCisgICAgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8CisJICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KQorCWZvciAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKKwkgIHN0ZDo6aXRlcl9zd2FwKF9faSwgX19maXJzdCArIChzdGQ6OnJhbmQoKSAlICgoX19pIC0gX19maXJzdCkgKyAxKSkpOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBTaHVmZmxlIHRoZSBlbGVtZW50cyBvZiBhIHNlcXVlbmNlIHVzaW5nIGEgcmFuZG9tIG51bWJlcgorICAgKiAgICAgICAgIGdlbmVyYXRvci4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QgICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICByYW5kICAgIFRoZSBSTkcgZnVuY3RvciBvciBmdW5jdGlvbi4KKyAgICogIEByZXR1cm4gIE5vdGhpbmcuCisgICAqCisgICAqICBSZW9yZGVycyB0aGUgZWxlbWVudHMgaW4gdGhlIHJhbmdlIEBwIFtmaXJzdCxsYXN0KSB1c2luZyBAcCByYW5kIHRvCisgICAqICBwcm92aWRlIGEgcmFuZG9tIGRpc3RyaWJ1dGlvbi4gQ2FsbGluZyBAcCByYW5kKE4pIGZvciBhIHBvc2l0aXZlCisgICAqICBpbnRlZ2VyIEBwIE4gc2hvdWxkIHJldHVybiBhIHJhbmRvbWx5IGNob3NlbiBpbnRlZ2VyIGZyb20gdGhlCisgICAqICByYW5nZSBbMCxOKS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgIHZvaWQKKyAgICByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworCQkgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiYgX19yYW5kKQorI2Vsc2UKKwkJICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kKQorI2VuZGlmCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8CisJICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCXJldHVybjsKKyAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKKwlzdGQ6Oml0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmQoKF9faSAtIF9fZmlyc3QpICsgMSkpOworICAgIH0KKworCisgIC8qKgorICAgKiAgQGJyaWVmIE1vdmUgZWxlbWVudHMgZm9yIHdoaWNoIGEgcHJlZGljYXRlIGlzIHRydWUgdG8gdGhlIGJlZ2lubmluZworICAgKiAgICAgICAgIG9mIGEgc2VxdWVuY2UuCisgICAqICBAaW5ncm91cCBtdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGZpcnN0ICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0ICAgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgcHJlZCAgICBBIHByZWRpY2F0ZSBmdW5jdG9yLgorICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgQHAgbWlkZGxlIHN1Y2ggdGhhdCBAcCBwcmVkKGkpIGlzIHRydWUgZm9yIGVhY2gKKyAgICogIGl0ZXJhdG9yIEBwIGkgaW4gdGhlIHJhbmdlIEBwIFtmaXJzdCxtaWRkbGUpIGFuZCBmYWxzZSBmb3IgZWFjaCBAcCBpCisgICAqICBpbiB0aGUgcmFuZ2UgQHAgW21pZGRsZSxsYXN0KS4KKyAgICoKKyAgICogIEBwIHByZWQgbXVzdCBub3QgbW9kaWZ5IGl0cyBvcGVyYW5kLiBAcCBwYXJ0aXRpb24oKSBkb2VzIG5vdCBwcmVzZXJ2ZQorICAgKiAgdGhlIHJlbGF0aXZlIG9yZGVyaW5nIG9mIGVsZW1lbnRzIGluIGVhY2ggZ3JvdXAsIHVzZQorICAgKiAgQHAgc3RhYmxlX3BhcnRpdGlvbigpIGlmIHRoaXMgaXMgbmVlZGVkLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGlubGluZSBfRm9yd2FyZEl0ZXJhdG9yCisgICAgcGFydGl0aW9uKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJICAgICAgX1ByZWRpY2F0ZSAgIF9fcHJlZCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8CisJCQkJICBfRm9yd2FyZEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfVW5hcnlQcmVkaWNhdGVDb25jZXB0PF9QcmVkaWNhdGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgcmV0dXJuIHN0ZDo6X19wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCisJCQkgICAgICBzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOworICAgIH0KKworCisKKyAgLyoqCisgICAqICBAYnJpZWYgU29ydCB0aGUgc21hbGxlc3QgZWxlbWVudHMgb2YgYSBzZXF1ZW5jZS4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgIEFuIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBtaWRkbGUgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QgICAgQW5vdGhlciBpdGVyYXRvci4KKyAgICogIEByZXR1cm4gIE5vdGhpbmcuCisgICAqCisgICAqICBTb3J0cyB0aGUgc21hbGxlc3QgQHAgKG1pZGRsZS1maXJzdCkgZWxlbWVudHMgaW4gdGhlIHJhbmdlCisgICAqICBAcCBbZmlyc3QsbGFzdCkgYW5kIG1vdmVzIHRoZW0gdG8gdGhlIHJhbmdlIEBwIFtmaXJzdCxtaWRkbGUpLiBUaGUKKyAgICogIG9yZGVyIG9mIHRoZSByZW1haW5pbmcgZWxlbWVudHMgaW4gdGhlIHJhbmdlIEBwIFttaWRkbGUsbGFzdCkgaXMKKyAgICogIHVuZGVmaW5lZC4KKyAgICogIEFmdGVyIHRoZSBzb3J0IGlmIEBwIGkgYW5kIEBqIGFyZSBpdGVyYXRvcnMgaW4gdGhlIHJhbmdlCisgICAqICBAcCBbZmlyc3QsbWlkZGxlKSBzdWNoIHRoYXQgQGkgcHJlY2VkZXMgQGogYW5kIEBrIGlzIGFuIGl0ZXJhdG9yIGluCisgICAqICB0aGUgcmFuZ2UgQHAgW21pZGRsZSxsYXN0KSB0aGVuIEBwICpqPCppIGFuZCBAcCAqazwqaSBhcmUgYm90aCBmYWxzZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgorICAgIGlubGluZSB2b2lkCisgICAgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAorCQkgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbWlkZGxlLAorCQkgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8CisJICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuQ29tcGFyYWJsZUNvbmNlcHQ8X1ZhbHVlVHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19taWRkbGUpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fbWlkZGxlLCBfX2xhc3QpOworCisgICAgICBzdGQ6Ol9faGVhcF9zZWxlY3QoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7CisgICAgICBzdGQ6OnNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIFNvcnQgdGhlIHNtYWxsZXN0IGVsZW1lbnRzIG9mIGEgc2VxdWVuY2UgdXNpbmcgYSBwcmVkaWNhdGUKKyAgICogICAgICAgICBmb3IgY29tcGFyaXNvbi4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgIEFuIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBtaWRkbGUgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QgICAgQW5vdGhlciBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgY29tcCAgICBBIGNvbXBhcmlzb24gZnVuY3Rvci4KKyAgICogIEByZXR1cm4gIE5vdGhpbmcuCisgICAqCisgICAqICBTb3J0cyB0aGUgc21hbGxlc3QgQHAgKG1pZGRsZS1maXJzdCkgZWxlbWVudHMgaW4gdGhlIHJhbmdlCisgICAqICBAcCBbZmlyc3QsbGFzdCkgYW5kIG1vdmVzIHRoZW0gdG8gdGhlIHJhbmdlIEBwIFtmaXJzdCxtaWRkbGUpLiBUaGUKKyAgICogIG9yZGVyIG9mIHRoZSByZW1haW5pbmcgZWxlbWVudHMgaW4gdGhlIHJhbmdlIEBwIFttaWRkbGUsbGFzdCkgaXMKKyAgICogIHVuZGVmaW5lZC4KKyAgICogIEFmdGVyIHRoZSBzb3J0IGlmIEBwIGkgYW5kIEBqIGFyZSBpdGVyYXRvcnMgaW4gdGhlIHJhbmdlCisgICAqICBAcCBbZmlyc3QsbWlkZGxlKSBzdWNoIHRoYXQgQGkgcHJlY2VkZXMgQGogYW5kIEBrIGlzIGFuIGl0ZXJhdG9yIGluCisgICAqICB0aGUgcmFuZ2UgQHAgW21pZGRsZSxsYXN0KSB0aGVuIEBwICpjb21wKGosKmkpIGFuZCBAcCBjb21wKCprLCppKQorICAgKiAgYXJlIGJvdGggZmFsc2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgaW5saW5lIHZvaWQKKyAgICBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCisJCSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19taWRkbGUsCisJCSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAorCQkgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlOworCisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yQ29uY2VwdDwKKwkgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQ29tcGFyZSwKKwkJCQkgIF9WYWx1ZVR5cGUsIF9WYWx1ZVR5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbWlkZGxlKTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX21pZGRsZSwgX19sYXN0KTsKKworICAgICAgc3RkOjpfX2hlYXBfc2VsZWN0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fY29tcCk7CisgICAgICBzdGQ6OnNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgU29ydCBhIHNlcXVlbmNlIGp1c3QgZW5vdWdoIHRvIGZpbmQgYSBwYXJ0aWN1bGFyIHBvc2l0aW9uLgorICAgKiAgQGluZ3JvdXAgc29ydGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGZpcnN0ICAgQW4gaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIG50aCAgICAgQW5vdGhlciBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHJldHVybiAgTm90aGluZy4KKyAgICoKKyAgICogIFJlYXJyYW5nZXMgdGhlIGVsZW1lbnRzIGluIHRoZSByYW5nZSBAcCBbZmlyc3QsbGFzdCkgc28gdGhhdCBAcCAqbnRoCisgICAqICBpcyB0aGUgc2FtZSBlbGVtZW50IHRoYXQgd291bGQgaGF2ZSBiZWVuIGluIHRoYXQgcG9zaXRpb24gaGFkIHRoZQorICAgKiAgd2hvbGUgc2VxdWVuY2UgYmVlbiBzb3J0ZWQuCisgICAqICB3aG9sZSBzZXF1ZW5jZSBiZWVuIHNvcnRlZC4gVGhlIGVsZW1lbnRzIGVpdGhlciBzaWRlIG9mIEBwICpudGggYXJlCisgICAqICBub3QgY29tcGxldGVseSBzb3J0ZWQsIGJ1dCBmb3IgYW55IGl0ZXJhdG9yIEBpIGluIHRoZSByYW5nZQorICAgKiAgQHAgW2ZpcnN0LG50aCkgYW5kIGFueSBpdGVyYXRvciBAaiBpbiB0aGUgcmFuZ2UgQHAgW250aCxsYXN0KSBpdAorICAgKiAgaG9sZHMgdGhhdCBAcCAqajwqaSBpcyBmYWxzZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgorICAgIGlubGluZSB2b2lkCisgICAgbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX250aCwKKwkJX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8CisJCQkJICBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbkNvbXBhcmFibGVDb25jZXB0PF9WYWx1ZVR5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbnRoKTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX250aCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0IHx8IF9fbnRoID09IF9fbGFzdCkKKwlyZXR1cm47CisKKyAgICAgIHN0ZDo6X19pbnRyb3NlbGVjdChfX2ZpcnN0LCBfX250aCwgX19sYXN0LAorCQkJIHN0ZDo6X19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIpOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBTb3J0IGEgc2VxdWVuY2UganVzdCBlbm91Z2ggdG8gZmluZCBhIHBhcnRpY3VsYXIgcG9zaXRpb24KKyAgICogICAgICAgICB1c2luZyBhIHByZWRpY2F0ZSBmb3IgY29tcGFyaXNvbi4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgIEFuIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBudGggICAgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QgICAgQW5vdGhlciBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgY29tcCAgICBBIGNvbXBhcmlzb24gZnVuY3Rvci4KKyAgICogIEByZXR1cm4gIE5vdGhpbmcuCisgICAqCisgICAqICBSZWFycmFuZ2VzIHRoZSBlbGVtZW50cyBpbiB0aGUgcmFuZ2UgQHAgW2ZpcnN0LGxhc3QpIHNvIHRoYXQgQHAgKm50aAorICAgKiAgaXMgdGhlIHNhbWUgZWxlbWVudCB0aGF0IHdvdWxkIGhhdmUgYmVlbiBpbiB0aGF0IHBvc2l0aW9uIGhhZCB0aGUKKyAgICogIHdob2xlIHNlcXVlbmNlIGJlZW4gc29ydGVkLiBUaGUgZWxlbWVudHMgZWl0aGVyIHNpZGUgb2YgQHAgKm50aCBhcmUKKyAgICogIG5vdCBjb21wbGV0ZWx5IHNvcnRlZCwgYnV0IGZvciBhbnkgaXRlcmF0b3IgQGkgaW4gdGhlIHJhbmdlCisgICAqICBAcCBbZmlyc3QsbnRoKSBhbmQgYW55IGl0ZXJhdG9yIEBqIGluIHRoZSByYW5nZSBAcCBbbnRoLGxhc3QpIGl0CisgICAqICBob2xkcyB0aGF0IEBwIGNvbXAoKmosKmkpIGlzIGZhbHNlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGlubGluZSB2b2lkCisgICAgbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX250aCwKKwkJX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlOworCisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X0NvbXBhcmUsCisJCQkJICBfVmFsdWVUeXBlLCBfVmFsdWVUeXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX250aCk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19udGgsIF9fbGFzdCk7CisKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCB8fCBfX250aCA9PSBfX2xhc3QpCisJcmV0dXJuOworCisgICAgICBzdGQ6Ol9faW50cm9zZWxlY3QoX19maXJzdCwgX19udGgsIF9fbGFzdCwKKwkJCSBzdGQ6Ol9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyLCBfX2NvbXApOworICAgIH0KKworCisgIC8qKgorICAgKiAgQGJyaWVmIFNvcnQgdGhlIGVsZW1lbnRzIG9mIGEgc2VxdWVuY2UuCisgICAqICBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgICBBbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHJldHVybiAgTm90aGluZy4KKyAgICoKKyAgICogIFNvcnRzIHRoZSBlbGVtZW50cyBpbiB0aGUgcmFuZ2UgQHAgW2ZpcnN0LGxhc3QpIGluIGFzY2VuZGluZyBvcmRlciwKKyAgICogIHN1Y2ggdGhhdCBAcCAqKGkrMSk8KmkgaXMgZmFsc2UgZm9yIGVhY2ggaXRlcmF0b3IgQHAgaSBpbiB0aGUgcmFuZ2UKKyAgICogIEBwIFtmaXJzdCxsYXN0LTEpLgorICAgKgorICAgKiAgVGhlIHJlbGF0aXZlIG9yZGVyaW5nIG9mIGVxdWl2YWxlbnQgZWxlbWVudHMgaXMgbm90IHByZXNlcnZlZCwgdXNlCisgICAqICBAcCBzdGFibGVfc29ydCgpIGlmIHRoaXMgaXMgbmVlZGVkLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CisgICAgaW5saW5lIHZvaWQKKyAgICBzb3J0KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlOworCisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yQ29uY2VwdDwKKwkgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5Db21wYXJhYmxlQ29uY2VwdDxfVmFsdWVUeXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpCisJeworCSAgc3RkOjpfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwKKwkJCQlzdGQ6Ol9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyKTsKKwkgIHN0ZDo6X19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOworCX0KKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgU29ydCB0aGUgZWxlbWVudHMgb2YgYSBzZXF1ZW5jZSB1c2luZyBhIHByZWRpY2F0ZSBmb3IgY29tcGFyaXNvbi4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgIEFuIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0ICAgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGNvbXAgICAgQSBjb21wYXJpc29uIGZ1bmN0b3IuCisgICAqICBAcmV0dXJuICBOb3RoaW5nLgorICAgKgorICAgKiAgU29ydHMgdGhlIGVsZW1lbnRzIGluIHRoZSByYW5nZSBAcCBbZmlyc3QsbGFzdCkgaW4gYXNjZW5kaW5nIG9yZGVyLAorICAgKiAgc3VjaCB0aGF0IEBwIGNvbXAoKihpKzEpLCppKSBpcyBmYWxzZSBmb3IgZXZlcnkgaXRlcmF0b3IgQHAgaSBpbiB0aGUKKyAgICogIHJhbmdlIEBwIFtmaXJzdCxsYXN0LTEpLgorICAgKgorICAgKiAgVGhlIHJlbGF0aXZlIG9yZGVyaW5nIG9mIGVxdWl2YWxlbnQgZWxlbWVudHMgaXMgbm90IHByZXNlcnZlZCwgdXNlCisgICAqICBAcCBzdGFibGVfc29ydCgpIGlmIHRoaXMgaXMgbmVlZGVkLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGlubGluZSB2b2lkCisgICAgc29ydChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKKwkgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlOworCisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yQ29uY2VwdDwKKwkgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQ29tcGFyZSwgX1ZhbHVlVHlwZSwKKwkJCQkgIF9WYWx1ZVR5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwl7CisJICBzdGQ6Ol9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LAorCQkJCXN0ZDo6X19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIsIF9fY29tcCk7CisJICBzdGQ6Ol9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOworCX0KKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgTWVyZ2VzIHR3byBzb3J0ZWQgcmFuZ2VzLgorICAgKiAgQGluZ3JvdXAgc29ydGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGZpcnN0MSAgQW4gaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGZpcnN0MiAgQW5vdGhlciBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdDEgICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0MiAgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIHJlc3VsdCAgQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgbWVyZ2VkIHJhbmdlLgorICAgKiAgQHJldHVybiAgICAgICAgIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50IDxlbT5ub3QgbGVzcworICAgKiAgICAgICAgICAgICAgICAgIHRoYW48L2VtPiBAYSB2YWwuCisgICAqCisgICAqICBNZXJnZXMgdGhlIHJhbmdlcyBbZmlyc3QxLGxhc3QxKSBhbmQgW2ZpcnN0MixsYXN0MikgaW50byB0aGUgc29ydGVkIHJhbmdlCisgICAqICBbcmVzdWx0LCByZXN1bHQgKyAobGFzdDEtZmlyc3QxKSArIChsYXN0Mi1maXJzdDIpKS4gIEJvdGggaW5wdXQgcmFuZ2VzCisgICAqICBtdXN0IGJlIHNvcnRlZCwgYW5kIHRoZSBvdXRwdXQgcmFuZ2UgbXVzdCBub3Qgb3ZlcmxhcCB3aXRoIGVpdGhlciBvZgorICAgKiAgdGhlIGlucHV0IHJhbmdlcy4gIFRoZSBzb3J0IGlzIEBlIHN0YWJsZSwgdGhhdCBpcywgZm9yIGVxdWl2YWxlbnQKKyAgICogIGVsZW1lbnRzIGluIHRoZSB0d28gcmFuZ2VzLCBlbGVtZW50cyBmcm9tIHRoZSBmaXJzdCByYW5nZSB3aWxsIGFsd2F5cworICAgKiAgY29tZSBiZWZvcmUgZWxlbWVudHMgZnJvbSB0aGUgc2Vjb25kLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMiwKKwkgICB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3I+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgbWVyZ2UoX0lucHV0SXRlcmF0b3IxIF9fZmlyc3QxLCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKKwkgIF9JbnB1dEl0ZXJhdG9yMiBfX2ZpcnN0MiwgX0lucHV0SXRlcmF0b3IyIF9fbGFzdDIsCisJICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3IxPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGUxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3IyPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGUyOworCisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcjE+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcjI+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X091dHB1dEl0ZXJhdG9yLAorCQkJCSAgX1ZhbHVlVHlwZTE+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X091dHB1dEl0ZXJhdG9yLAorCQkJCSAgX1ZhbHVlVHlwZTI+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbk9wQ29uY2VwdDxfVmFsdWVUeXBlMiwgX1ZhbHVlVHlwZTE+KQkKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zb3J0ZWRfc2V0KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Mik7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkX3NldChfX2ZpcnN0MiwgX19sYXN0MiwgX19maXJzdDEpOworCisgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQorCXsKKwkgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCisJICAgIHsKKwkgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CisJICAgICAgKytfX2ZpcnN0MjsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOworCSAgICAgICsrX19maXJzdDE7CisJICAgIH0KKwkgICsrX19yZXN1bHQ7CisJfQorICAgICAgcmV0dXJuIHN0ZDo6Y29weShfX2ZpcnN0MiwgX19sYXN0Miwgc3RkOjpjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLAorCQkJCQkJICAgIF9fcmVzdWx0KSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIE1lcmdlcyB0d28gc29ydGVkIHJhbmdlcy4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdDEgIEFuIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBmaXJzdDIgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QxICAgQW5vdGhlciBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdDIgICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICByZXN1bHQgIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbmQgb2YgdGhlIG1lcmdlZCByYW5nZS4KKyAgICogIEBwYXJhbSAgY29tcCAgICBBIGZ1bmN0b3IgdG8gdXNlIGZvciBjb21wYXJpc29ucy4KKyAgICogIEByZXR1cm4gICAgICAgICBBbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZmlyc3QgZWxlbWVudCAibm90IGxlc3MKKyAgICogICAgICAgICAgICAgICAgICB0aGFuIiBAYSB2YWwuCisgICAqCisgICAqICBNZXJnZXMgdGhlIHJhbmdlcyBbZmlyc3QxLGxhc3QxKSBhbmQgW2ZpcnN0MixsYXN0MikgaW50byB0aGUgc29ydGVkIHJhbmdlCisgICAqICBbcmVzdWx0LCByZXN1bHQgKyAobGFzdDEtZmlyc3QxKSArIChsYXN0Mi1maXJzdDIpKS4gIEJvdGggaW5wdXQgcmFuZ2VzCisgICAqICBtdXN0IGJlIHNvcnRlZCwgYW5kIHRoZSBvdXRwdXQgcmFuZ2UgbXVzdCBub3Qgb3ZlcmxhcCB3aXRoIGVpdGhlciBvZgorICAgKiAgdGhlIGlucHV0IHJhbmdlcy4gIFRoZSBzb3J0IGlzIEBlIHN0YWJsZSwgdGhhdCBpcywgZm9yIGVxdWl2YWxlbnQKKyAgICogIGVsZW1lbnRzIGluIHRoZSB0d28gcmFuZ2VzLCBlbGVtZW50cyBmcm9tIHRoZSBmaXJzdCByYW5nZSB3aWxsIGFsd2F5cworICAgKiAgY29tZSBiZWZvcmUgZWxlbWVudHMgZnJvbSB0aGUgc2Vjb25kLgorICAgKgorICAgKiAgVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gc2hvdWxkIGhhdmUgdGhlIHNhbWUgZWZmZWN0cyBvbiBvcmRlcmluZyBhcworICAgKiAgdGhlIGZ1bmN0aW9uIHVzZWQgZm9yIHRoZSBpbml0aWFsIHNvcnQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLAorCSAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgbWVyZ2UoX0lucHV0SXRlcmF0b3IxIF9fZmlyc3QxLCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKKwkgIF9JbnB1dEl0ZXJhdG9yMiBfX2ZpcnN0MiwgX0lucHV0SXRlcmF0b3IyIF9fbGFzdDIsCisJICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcjE+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcjI+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTI7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3IsCisJCQkJICBfVmFsdWVUeXBlMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3IsCisJCQkJICBfVmFsdWVUeXBlMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X0NvbXBhcmUsCisJCQkJICBfVmFsdWVUeXBlMiwgX1ZhbHVlVHlwZTE+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9zZXRfcHJlZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fY29tcCk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkX3NldF9wcmVkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX2ZpcnN0MSwgX19jb21wKTsKKworICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKKwl7CisJICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKKwkgICAgeworCSAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKKwkgICAgICArK19fZmlyc3QyOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CisJICAgICAgKytfX2ZpcnN0MTsKKwkgICAgfQorCSAgKytfX3Jlc3VsdDsKKwl9CisgICAgICByZXR1cm4gc3RkOjpjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBzdGQ6OmNvcHkoX19maXJzdDEsIF9fbGFzdDEsCisJCQkJCQkgICAgX19yZXN1bHQpKTsKKyAgICB9CisKKworICAvKioKKyAgICogIEBicmllZiBTb3J0IHRoZSBlbGVtZW50cyBvZiBhIHNlcXVlbmNlLCBwcmVzZXJ2aW5nIHRoZSByZWxhdGl2ZSBvcmRlcgorICAgKiAgICAgICAgIG9mIGVxdWl2YWxlbnQgZWxlbWVudHMuCisgICAqICBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgICBBbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHJldHVybiAgTm90aGluZy4KKyAgICoKKyAgICogIFNvcnRzIHRoZSBlbGVtZW50cyBpbiB0aGUgcmFuZ2UgQHAgW2ZpcnN0LGxhc3QpIGluIGFzY2VuZGluZyBvcmRlciwKKyAgICogIHN1Y2ggdGhhdCBAcCAqKGkrMSk8KmkgaXMgZmFsc2UgZm9yIGVhY2ggaXRlcmF0b3IgQHAgaSBpbiB0aGUgcmFuZ2UKKyAgICogIEBwIFtmaXJzdCxsYXN0LTEpLgorICAgKgorICAgKiAgVGhlIHJlbGF0aXZlIG9yZGVyaW5nIG9mIGVxdWl2YWxlbnQgZWxlbWVudHMgaXMgcHJlc2VydmVkLCBzbyBhbnkgdHdvCisgICAqICBlbGVtZW50cyBAcCB4IGFuZCBAcCB5IGluIHRoZSByYW5nZSBAcCBbZmlyc3QsbGFzdCkgc3VjaCB0aGF0CisgICAqICBAcCB4PHkgaXMgZmFsc2UgYW5kIEBwIHk8eCBpcyBmYWxzZSB3aWxsIGhhdmUgdGhlIHNhbWUgcmVsYXRpdmUKKyAgICogIG9yZGVyaW5nIGFmdGVyIGNhbGxpbmcgQHAgc3RhYmxlX3NvcnQoKS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgorICAgIGlubGluZSB2b2lkCisgICAgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKwlfRGlzdGFuY2VUeXBlOworCisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yQ29uY2VwdDwKKwkgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5Db21wYXJhYmxlQ29uY2VwdDxfVmFsdWVUeXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsCisJCQkJCQkJCSBfX2xhc3QpOworICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKKwlzdGQ6Ol9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QpOworICAgICAgZWxzZQorCXN0ZDo6X19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmLmJlZ2luKCksCisJCQkJICAgIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIFNvcnQgdGhlIGVsZW1lbnRzIG9mIGEgc2VxdWVuY2UgdXNpbmcgYSBwcmVkaWNhdGUgZm9yIGNvbXBhcmlzb24sCisgICAqICAgICAgICAgcHJlc2VydmluZyB0aGUgcmVsYXRpdmUgb3JkZXIgb2YgZXF1aXZhbGVudCBlbGVtZW50cy4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgIEFuIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0ICAgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGNvbXAgICAgQSBjb21wYXJpc29uIGZ1bmN0b3IuCisgICAqICBAcmV0dXJuICBOb3RoaW5nLgorICAgKgorICAgKiAgU29ydHMgdGhlIGVsZW1lbnRzIGluIHRoZSByYW5nZSBAcCBbZmlyc3QsbGFzdCkgaW4gYXNjZW5kaW5nIG9yZGVyLAorICAgKiAgc3VjaCB0aGF0IEBwIGNvbXAoKihpKzEpLCppKSBpcyBmYWxzZSBmb3IgZWFjaCBpdGVyYXRvciBAcCBpIGluIHRoZQorICAgKiAgcmFuZ2UgQHAgW2ZpcnN0LGxhc3QtMSkuCisgICAqCisgICAqICBUaGUgcmVsYXRpdmUgb3JkZXJpbmcgb2YgZXF1aXZhbGVudCBlbGVtZW50cyBpcyBwcmVzZXJ2ZWQsIHNvIGFueSB0d28KKyAgICogIGVsZW1lbnRzIEBwIHggYW5kIEBwIHkgaW4gdGhlIHJhbmdlIEBwIFtmaXJzdCxsYXN0KSBzdWNoIHRoYXQKKyAgICogIEBwIGNvbXAoeCx5KSBpcyBmYWxzZSBhbmQgQHAgY29tcCh5LHgpIGlzIGZhbHNlIHdpbGwgaGF2ZSB0aGUgc2FtZQorICAgKiAgcmVsYXRpdmUgb3JkZXJpbmcgYWZ0ZXIgY2FsbGluZyBAcCBzdGFibGVfc29ydCgpLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGlubGluZSB2b2lkCisgICAgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCisJCV9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorCV9EaXN0YW5jZVR5cGU7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PAorCSAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9Db21wYXJlLAorCQkJCSAgX1ZhbHVlVHlwZSwKKwkJCQkgIF9WYWx1ZVR5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgX1ZhbHVlVHlwZT4gX19idWYoX19maXJzdCwKKwkJCQkJCQkJIF9fbGFzdCk7CisgICAgICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQorCXN0ZDo6X19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKKyAgICAgIGVsc2UKKwlzdGQ6Ol9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBfX2J1Zi5iZWdpbigpLAorCQkJCSAgICBfRGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSksIF9fY29tcCk7CisgICAgfQorCisKKyAgLyoqCisgICAqICBAYnJpZWYgUmV0dXJuIHRoZSB1bmlvbiBvZiB0d28gc29ydGVkIHJhbmdlcy4KKyAgICogIEBpbmdyb3VwIHNldF9hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGZpcnN0MSAgU3RhcnQgb2YgZmlyc3QgcmFuZ2UuCisgICAqICBAcGFyYW0gIGxhc3QxICAgRW5kIG9mIGZpcnN0IHJhbmdlLgorICAgKiAgQHBhcmFtICBmaXJzdDIgIFN0YXJ0IG9mIHNlY29uZCByYW5nZS4KKyAgICogIEBwYXJhbSAgbGFzdDIgICBFbmQgb2Ygc2Vjb25kIHJhbmdlLgorICAgKiAgQHJldHVybiAgRW5kIG9mIHRoZSBvdXRwdXQgcmFuZ2UuCisgICAqICBAaW5ncm91cCBzZXRfYWxnb3JpdGhtcworICAgKgorICAgKiAgVGhpcyBvcGVyYXRpb24gaXRlcmF0ZXMgb3ZlciBib3RoIHJhbmdlcywgY29weWluZyBlbGVtZW50cyBwcmVzZW50IGluCisgICAqICBlYWNoIHJhbmdlIGluIG9yZGVyIHRvIHRoZSBvdXRwdXQgcmFuZ2UuICBJdGVyYXRvcnMgaW5jcmVtZW50IGZvciBlYWNoCisgICAqICByYW5nZS4gIFdoZW4gdGhlIGN1cnJlbnQgZWxlbWVudCBvZiBvbmUgcmFuZ2UgaXMgbGVzcyB0aGFuIHRoZSBvdGhlciwKKyAgICogIHRoYXQgZWxlbWVudCBpcyBjb3BpZWQgYW5kIHRoZSBpdGVyYXRvciBhZHZhbmNlZC4gIElmIGFuIGVsZW1lbnQgaXMKKyAgICogIGNvbnRhaW5lZCBpbiBib3RoIHJhbmdlcywgdGhlIGVsZW1lbnQgZnJvbSB0aGUgZmlyc3QgcmFuZ2UgaXMgY29waWVkIGFuZAorICAgKiAgYm90aCByYW5nZXMgYWR2YW5jZS4gIFRoZSBvdXRwdXQgcmFuZ2UgbWF5IG5vdCBvdmVybGFwIGVpdGhlciBpbnB1dAorICAgKiAgcmFuZ2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLAorCSAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvcj4KKyAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICBzZXRfdW5pb24oX0lucHV0SXRlcmF0b3IxIF9fZmlyc3QxLCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKKwkgICAgICBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIsIF9JbnB1dEl0ZXJhdG9yMiBfX2xhc3QyLAorCSAgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcjE+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcjI+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTI7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3IsCisJCQkJICBfVmFsdWVUeXBlMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3IsCisJCQkJICBfVmFsdWVUeXBlMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuT3BDb25jZXB0PF9WYWx1ZVR5cGUxLCBfVmFsdWVUeXBlMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuT3BDb25jZXB0PF9WYWx1ZVR5cGUyLCBfVmFsdWVUeXBlMT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkX3NldChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9zZXQoX19maXJzdDIsIF9fbGFzdDIsIF9fZmlyc3QxKTsKKworICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKKwl7CisJICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQorCSAgICB7CisJICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOworCSAgICAgICsrX19maXJzdDE7CisJICAgIH0KKwkgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKKwkgICAgeworCSAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKKwkgICAgICArK19fZmlyc3QyOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CisJICAgICAgKytfX2ZpcnN0MTsKKwkgICAgICArK19fZmlyc3QyOworCSAgICB9CisJICArK19fcmVzdWx0OworCX0KKyAgICAgIHJldHVybiBzdGQ6OmNvcHkoX19maXJzdDIsIF9fbGFzdDIsIHN0ZDo6Y29weShfX2ZpcnN0MSwgX19sYXN0MSwKKwkJCQkJCSAgICBfX3Jlc3VsdCkpOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBSZXR1cm4gdGhlIHVuaW9uIG9mIHR3byBzb3J0ZWQgcmFuZ2VzIHVzaW5nIGEgY29tcGFyaXNvbiBmdW5jdG9yLgorICAgKiAgQGluZ3JvdXAgc2V0X2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QxICBTdGFydCBvZiBmaXJzdCByYW5nZS4KKyAgICogIEBwYXJhbSAgbGFzdDEgICBFbmQgb2YgZmlyc3QgcmFuZ2UuCisgICAqICBAcGFyYW0gIGZpcnN0MiAgU3RhcnQgb2Ygc2Vjb25kIHJhbmdlLgorICAgKiAgQHBhcmFtICBsYXN0MiAgIEVuZCBvZiBzZWNvbmQgcmFuZ2UuCisgICAqICBAcGFyYW0gIGNvbXAgICAgVGhlIGNvbXBhcmlzb24gZnVuY3Rvci4KKyAgICogIEByZXR1cm4gIEVuZCBvZiB0aGUgb3V0cHV0IHJhbmdlLgorICAgKiAgQGluZ3JvdXAgc2V0X2FsZ29yaXRobXMKKyAgICoKKyAgICogIFRoaXMgb3BlcmF0aW9uIGl0ZXJhdGVzIG92ZXIgYm90aCByYW5nZXMsIGNvcHlpbmcgZWxlbWVudHMgcHJlc2VudCBpbgorICAgKiAgZWFjaCByYW5nZSBpbiBvcmRlciB0byB0aGUgb3V0cHV0IHJhbmdlLiAgSXRlcmF0b3JzIGluY3JlbWVudCBmb3IgZWFjaAorICAgKiAgcmFuZ2UuICBXaGVuIHRoZSBjdXJyZW50IGVsZW1lbnQgb2Ygb25lIHJhbmdlIGlzIGxlc3MgdGhhbiB0aGUgb3RoZXIKKyAgICogIGFjY29yZGluZyB0byBAYSBjb21wLCB0aGF0IGVsZW1lbnQgaXMgY29waWVkIGFuZCB0aGUgaXRlcmF0b3IgYWR2YW5jZWQuCisgICAqICBJZiBhbiBlcXVpdmFsZW50IGVsZW1lbnQgYWNjb3JkaW5nIHRvIEBhIGNvbXAgaXMgY29udGFpbmVkIGluIGJvdGgKKyAgICogIHJhbmdlcywgdGhlIGVsZW1lbnQgZnJvbSB0aGUgZmlyc3QgcmFuZ2UgaXMgY29waWVkIGFuZCBib3RoIHJhbmdlcworICAgKiAgYWR2YW5jZS4gIFRoZSBvdXRwdXQgcmFuZ2UgbWF5IG5vdCBvdmVybGFwIGVpdGhlciBpbnB1dCByYW5nZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IxLCB0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjIsCisJICAgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICBzZXRfdW5pb24oX0lucHV0SXRlcmF0b3IxIF9fZmlyc3QxLCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKKwkgICAgICBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIsIF9JbnB1dEl0ZXJhdG9yMiBfX2xhc3QyLAorCSAgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yMT46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yMj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlMjsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkJCQkgIF9WYWx1ZVR5cGUxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkJCQkgIF9WYWx1ZVR5cGUyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQ29tcGFyZSwKKwkJCQkgIF9WYWx1ZVR5cGUxLCBfVmFsdWVUeXBlMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X0NvbXBhcmUsCisJCQkJICBfVmFsdWVUeXBlMiwgX1ZhbHVlVHlwZTE+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9zZXRfcHJlZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fY29tcCk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkX3NldF9wcmVkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX2ZpcnN0MSwgX19jb21wKTsKKworICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKKwl7CisJICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKKwkgICAgeworCSAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKKwkgICAgICArK19fZmlyc3QxOworCSAgICB9CisJICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQorCSAgICB7CisJICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOworCSAgICAgICsrX19maXJzdDI7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKKwkgICAgICArK19fZmlyc3QxOworCSAgICAgICsrX19maXJzdDI7CisJICAgIH0KKwkgICsrX19yZXN1bHQ7CisJfQorICAgICAgcmV0dXJuIHN0ZDo6Y29weShfX2ZpcnN0MiwgX19sYXN0Miwgc3RkOjpjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLAorCQkJCQkJICAgIF9fcmVzdWx0KSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIFJldHVybiB0aGUgaW50ZXJzZWN0aW9uIG9mIHR3byBzb3J0ZWQgcmFuZ2VzLgorICAgKiAgQGluZ3JvdXAgc2V0X2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QxICBTdGFydCBvZiBmaXJzdCByYW5nZS4KKyAgICogIEBwYXJhbSAgbGFzdDEgICBFbmQgb2YgZmlyc3QgcmFuZ2UuCisgICAqICBAcGFyYW0gIGZpcnN0MiAgU3RhcnQgb2Ygc2Vjb25kIHJhbmdlLgorICAgKiAgQHBhcmFtICBsYXN0MiAgIEVuZCBvZiBzZWNvbmQgcmFuZ2UuCisgICAqICBAcmV0dXJuICBFbmQgb2YgdGhlIG91dHB1dCByYW5nZS4KKyAgICogIEBpbmdyb3VwIHNldF9hbGdvcml0aG1zCisgICAqCisgICAqICBUaGlzIG9wZXJhdGlvbiBpdGVyYXRlcyBvdmVyIGJvdGggcmFuZ2VzLCBjb3B5aW5nIGVsZW1lbnRzIHByZXNlbnQgaW4KKyAgICogIGJvdGggcmFuZ2VzIGluIG9yZGVyIHRvIHRoZSBvdXRwdXQgcmFuZ2UuICBJdGVyYXRvcnMgaW5jcmVtZW50IGZvciBlYWNoCisgICAqICByYW5nZS4gIFdoZW4gdGhlIGN1cnJlbnQgZWxlbWVudCBvZiBvbmUgcmFuZ2UgaXMgbGVzcyB0aGFuIHRoZSBvdGhlciwKKyAgICogIHRoYXQgaXRlcmF0b3IgYWR2YW5jZXMuICBJZiBhbiBlbGVtZW50IGlzIGNvbnRhaW5lZCBpbiBib3RoIHJhbmdlcywgdGhlCisgICAqICBlbGVtZW50IGZyb20gdGhlIGZpcnN0IHJhbmdlIGlzIGNvcGllZCBhbmQgYm90aCByYW5nZXMgYWR2YW5jZS4gIFRoZQorICAgKiAgb3V0cHV0IHJhbmdlIG1heSBub3Qgb3ZlcmxhcCBlaXRoZXIgaW5wdXQgcmFuZ2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLAorCSAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvcj4KKyAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICBzZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEsCisJCSAgICAgX0lucHV0SXRlcmF0b3IyIF9fZmlyc3QyLCBfSW5wdXRJdGVyYXRvcjIgX19sYXN0MiwKKwkJICAgICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3IxPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGUxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3IyPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGUyOworCisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcjE+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcjI+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X091dHB1dEl0ZXJhdG9yLAorCQkJCSAgX1ZhbHVlVHlwZTE+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbk9wQ29uY2VwdDxfVmFsdWVUeXBlMSwgX1ZhbHVlVHlwZTI+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbk9wQ29uY2VwdDxfVmFsdWVUeXBlMiwgX1ZhbHVlVHlwZTE+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9zZXQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zb3J0ZWRfc2V0KF9fZmlyc3QyLCBfX2xhc3QyLCBfX2ZpcnN0MSk7CisKKyAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCisJaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKKwkgICsrX19maXJzdDE7CisJZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQorCSAgKytfX2ZpcnN0MjsKKwllbHNlCisJICB7CisJICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKKwkgICAgKytfX2ZpcnN0MTsKKwkgICAgKytfX2ZpcnN0MjsKKwkgICAgKytfX3Jlc3VsdDsKKwkgIH0KKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgUmV0dXJuIHRoZSBpbnRlcnNlY3Rpb24gb2YgdHdvIHNvcnRlZCByYW5nZXMgdXNpbmcgY29tcGFyaXNvbgorICAgKiAgZnVuY3Rvci4KKyAgICogIEBpbmdyb3VwIHNldF9hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGZpcnN0MSAgU3RhcnQgb2YgZmlyc3QgcmFuZ2UuCisgICAqICBAcGFyYW0gIGxhc3QxICAgRW5kIG9mIGZpcnN0IHJhbmdlLgorICAgKiAgQHBhcmFtICBmaXJzdDIgIFN0YXJ0IG9mIHNlY29uZCByYW5nZS4KKyAgICogIEBwYXJhbSAgbGFzdDIgICBFbmQgb2Ygc2Vjb25kIHJhbmdlLgorICAgKiAgQHBhcmFtICBjb21wICAgIFRoZSBjb21wYXJpc29uIGZ1bmN0b3IuCisgICAqICBAcmV0dXJuICBFbmQgb2YgdGhlIG91dHB1dCByYW5nZS4KKyAgICogIEBpbmdyb3VwIHNldF9hbGdvcml0aG1zCisgICAqCisgICAqICBUaGlzIG9wZXJhdGlvbiBpdGVyYXRlcyBvdmVyIGJvdGggcmFuZ2VzLCBjb3B5aW5nIGVsZW1lbnRzIHByZXNlbnQgaW4KKyAgICogIGJvdGggcmFuZ2VzIGluIG9yZGVyIHRvIHRoZSBvdXRwdXQgcmFuZ2UuICBJdGVyYXRvcnMgaW5jcmVtZW50IGZvciBlYWNoCisgICAqICByYW5nZS4gIFdoZW4gdGhlIGN1cnJlbnQgZWxlbWVudCBvZiBvbmUgcmFuZ2UgaXMgbGVzcyB0aGFuIHRoZSBvdGhlcgorICAgKiAgYWNjb3JkaW5nIHRvIEBhIGNvbXAsIHRoYXQgaXRlcmF0b3IgYWR2YW5jZXMuICBJZiBhbiBlbGVtZW50IGlzCisgICAqICBjb250YWluZWQgaW4gYm90aCByYW5nZXMgYWNjb3JkaW5nIHRvIEBhIGNvbXAsIHRoZSBlbGVtZW50IGZyb20gdGhlCisgICAqICBmaXJzdCByYW5nZSBpcyBjb3BpZWQgYW5kIGJvdGggcmFuZ2VzIGFkdmFuY2UuICBUaGUgb3V0cHV0IHJhbmdlIG1heSBub3QKKyAgICogIG92ZXJsYXAgZWl0aGVyIGlucHV0IHJhbmdlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMiwKKwkgICB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9PdXRwdXRJdGVyYXRvcgorICAgIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcmF0b3IxIF9fZmlyc3QxLCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKKwkJICAgICBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIsIF9JbnB1dEl0ZXJhdG9yMiBfX2xhc3QyLAorCQkgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yMT46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yMj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlMjsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkJCQkgIF9WYWx1ZVR5cGUxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQ29tcGFyZSwKKwkJCQkgIF9WYWx1ZVR5cGUxLCBfVmFsdWVUeXBlMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X0NvbXBhcmUsCisJCQkJICBfVmFsdWVUeXBlMiwgX1ZhbHVlVHlwZTE+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9zZXRfcHJlZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fY29tcCk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkX3NldF9wcmVkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX2ZpcnN0MSwgX19jb21wKTsKKworICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKKwlpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKKwkgICsrX19maXJzdDE7CisJZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKKwkgICsrX19maXJzdDI7CisJZWxzZQorCSAgeworCSAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CisJICAgICsrX19maXJzdDE7CisJICAgICsrX19maXJzdDI7CisJICAgICsrX19yZXN1bHQ7CisJICB9CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIFJldHVybiB0aGUgZGlmZmVyZW5jZSBvZiB0d28gc29ydGVkIHJhbmdlcy4KKyAgICogIEBpbmdyb3VwIHNldF9hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGZpcnN0MSAgU3RhcnQgb2YgZmlyc3QgcmFuZ2UuCisgICAqICBAcGFyYW0gIGxhc3QxICAgRW5kIG9mIGZpcnN0IHJhbmdlLgorICAgKiAgQHBhcmFtICBmaXJzdDIgIFN0YXJ0IG9mIHNlY29uZCByYW5nZS4KKyAgICogIEBwYXJhbSAgbGFzdDIgICBFbmQgb2Ygc2Vjb25kIHJhbmdlLgorICAgKiAgQHJldHVybiAgRW5kIG9mIHRoZSBvdXRwdXQgcmFuZ2UuCisgICAqICBAaW5ncm91cCBzZXRfYWxnb3JpdGhtcworICAgKgorICAgKiAgVGhpcyBvcGVyYXRpb24gaXRlcmF0ZXMgb3ZlciBib3RoIHJhbmdlcywgY29weWluZyBlbGVtZW50cyBwcmVzZW50IGluCisgICAqICB0aGUgZmlyc3QgcmFuZ2UgYnV0IG5vdCB0aGUgc2Vjb25kIGluIG9yZGVyIHRvIHRoZSBvdXRwdXQgcmFuZ2UuCisgICAqICBJdGVyYXRvcnMgaW5jcmVtZW50IGZvciBlYWNoIHJhbmdlLiAgV2hlbiB0aGUgY3VycmVudCBlbGVtZW50IG9mIHRoZQorICAgKiAgZmlyc3QgcmFuZ2UgaXMgbGVzcyB0aGFuIHRoZSBzZWNvbmQsIHRoYXQgZWxlbWVudCBpcyBjb3BpZWQgYW5kIHRoZQorICAgKiAgaXRlcmF0b3IgYWR2YW5jZXMuICBJZiB0aGUgY3VycmVudCBlbGVtZW50IG9mIHRoZSBzZWNvbmQgcmFuZ2UgaXMgbGVzcywKKyAgICogIHRoZSBpdGVyYXRvciBhZHZhbmNlcywgYnV0IG5vIGVsZW1lbnQgaXMgY29waWVkLiAgSWYgYW4gZWxlbWVudCBpcworICAgKiAgY29udGFpbmVkIGluIGJvdGggcmFuZ2VzLCBubyBlbGVtZW50cyBhcmUgY29waWVkIGFuZCBib3RoIHJhbmdlcworICAgKiAgYWR2YW5jZS4gIFRoZSBvdXRwdXQgcmFuZ2UgbWF5IG5vdCBvdmVybGFwIGVpdGhlciBpbnB1dCByYW5nZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IxLCB0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjIsCisJICAgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPgorICAgIF9PdXRwdXRJdGVyYXRvcgorICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEsCisJCSAgIF9JbnB1dEl0ZXJhdG9yMiBfX2ZpcnN0MiwgX0lucHV0SXRlcmF0b3IyIF9fbGFzdDIsCisJCSAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcjE+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcjI+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTI7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3IsCisJCQkJICBfVmFsdWVUeXBlMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuT3BDb25jZXB0PF9WYWx1ZVR5cGUxLCBfVmFsdWVUeXBlMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuT3BDb25jZXB0PF9WYWx1ZVR5cGUyLCBfVmFsdWVUeXBlMT4pCQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9zZXQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zb3J0ZWRfc2V0KF9fZmlyc3QyLCBfX2xhc3QyLCBfX2ZpcnN0MSk7CisKKyAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCisJaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKKwkgIHsKKwkgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOworCSAgICArK19fZmlyc3QxOworCSAgICArK19fcmVzdWx0OworCSAgfQorCWVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKKwkgICsrX19maXJzdDI7CisJZWxzZQorCSAgeworCSAgICArK19fZmlyc3QxOworCSAgICArK19fZmlyc3QyOworCSAgfQorICAgICAgcmV0dXJuIHN0ZDo6Y29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgUmV0dXJuIHRoZSBkaWZmZXJlbmNlIG9mIHR3byBzb3J0ZWQgcmFuZ2VzIHVzaW5nIGNvbXBhcmlzb24KKyAgICogIGZ1bmN0b3IuCisgICAqICBAaW5ncm91cCBzZXRfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdDEgIFN0YXJ0IG9mIGZpcnN0IHJhbmdlLgorICAgKiAgQHBhcmFtICBsYXN0MSAgIEVuZCBvZiBmaXJzdCByYW5nZS4KKyAgICogIEBwYXJhbSAgZmlyc3QyICBTdGFydCBvZiBzZWNvbmQgcmFuZ2UuCisgICAqICBAcGFyYW0gIGxhc3QyICAgRW5kIG9mIHNlY29uZCByYW5nZS4KKyAgICogIEBwYXJhbSAgY29tcCAgICBUaGUgY29tcGFyaXNvbiBmdW5jdG9yLgorICAgKiAgQHJldHVybiAgRW5kIG9mIHRoZSBvdXRwdXQgcmFuZ2UuCisgICAqICBAaW5ncm91cCBzZXRfYWxnb3JpdGhtcworICAgKgorICAgKiAgVGhpcyBvcGVyYXRpb24gaXRlcmF0ZXMgb3ZlciBib3RoIHJhbmdlcywgY29weWluZyBlbGVtZW50cyBwcmVzZW50IGluCisgICAqICB0aGUgZmlyc3QgcmFuZ2UgYnV0IG5vdCB0aGUgc2Vjb25kIGluIG9yZGVyIHRvIHRoZSBvdXRwdXQgcmFuZ2UuCisgICAqICBJdGVyYXRvcnMgaW5jcmVtZW50IGZvciBlYWNoIHJhbmdlLiAgV2hlbiB0aGUgY3VycmVudCBlbGVtZW50IG9mIHRoZQorICAgKiAgZmlyc3QgcmFuZ2UgaXMgbGVzcyB0aGFuIHRoZSBzZWNvbmQgYWNjb3JkaW5nIHRvIEBhIGNvbXAsIHRoYXQgZWxlbWVudAorICAgKiAgaXMgY29waWVkIGFuZCB0aGUgaXRlcmF0b3IgYWR2YW5jZXMuICBJZiB0aGUgY3VycmVudCBlbGVtZW50IG9mIHRoZQorICAgKiAgc2Vjb25kIHJhbmdlIGlzIGxlc3MsIG5vIGVsZW1lbnQgaXMgY29waWVkIGFuZCB0aGUgaXRlcmF0b3IgYWR2YW5jZXMuCisgICAqICBJZiBhbiBlbGVtZW50IGlzIGNvbnRhaW5lZCBpbiBib3RoIHJhbmdlcyBhY2NvcmRpbmcgdG8gQGEgY29tcCwgbm8KKyAgICogIGVsZW1lbnRzIGFyZSBjb3BpZWQgYW5kIGJvdGggcmFuZ2VzIGFkdmFuY2UuICBUaGUgb3V0cHV0IHJhbmdlIG1heSBub3QKKyAgICogIG92ZXJsYXAgZWl0aGVyIGlucHV0IHJhbmdlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMiwKKwkgICB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9PdXRwdXRJdGVyYXRvcgorICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEsCisJCSAgIF9JbnB1dEl0ZXJhdG9yMiBfX2ZpcnN0MiwgX0lucHV0SXRlcmF0b3IyIF9fbGFzdDIsCisJCSAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yMT46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yMj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlMjsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkJCQkgIF9WYWx1ZVR5cGUxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQ29tcGFyZSwKKwkJCQkgIF9WYWx1ZVR5cGUxLCBfVmFsdWVUeXBlMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X0NvbXBhcmUsCisJCQkJICBfVmFsdWVUeXBlMiwgX1ZhbHVlVHlwZTE+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9zZXRfcHJlZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fY29tcCk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkX3NldF9wcmVkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX2ZpcnN0MSwgX19jb21wKTsKKworICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKKwlpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKKwkgIHsKKwkgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOworCSAgICArK19fZmlyc3QxOworCSAgICArK19fcmVzdWx0OworCSAgfQorCWVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCisJICArK19fZmlyc3QyOworCWVsc2UKKwkgIHsKKwkgICAgKytfX2ZpcnN0MTsKKwkgICAgKytfX2ZpcnN0MjsKKwkgIH0KKyAgICAgIHJldHVybiBzdGQ6OmNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFJldHVybiB0aGUgc3ltbWV0cmljIGRpZmZlcmVuY2Ugb2YgdHdvIHNvcnRlZCByYW5nZXMuCisgICAqICBAaW5ncm91cCBzZXRfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdDEgIFN0YXJ0IG9mIGZpcnN0IHJhbmdlLgorICAgKiAgQHBhcmFtICBsYXN0MSAgIEVuZCBvZiBmaXJzdCByYW5nZS4KKyAgICogIEBwYXJhbSAgZmlyc3QyICBTdGFydCBvZiBzZWNvbmQgcmFuZ2UuCisgICAqICBAcGFyYW0gIGxhc3QyICAgRW5kIG9mIHNlY29uZCByYW5nZS4KKyAgICogIEByZXR1cm4gIEVuZCBvZiB0aGUgb3V0cHV0IHJhbmdlLgorICAgKiAgQGluZ3JvdXAgc2V0X2FsZ29yaXRobXMKKyAgICoKKyAgICogIFRoaXMgb3BlcmF0aW9uIGl0ZXJhdGVzIG92ZXIgYm90aCByYW5nZXMsIGNvcHlpbmcgZWxlbWVudHMgcHJlc2VudCBpbgorICAgKiAgb25lIHJhbmdlIGJ1dCBub3QgdGhlIG90aGVyIGluIG9yZGVyIHRvIHRoZSBvdXRwdXQgcmFuZ2UuICBJdGVyYXRvcnMKKyAgICogIGluY3JlbWVudCBmb3IgZWFjaCByYW5nZS4gIFdoZW4gdGhlIGN1cnJlbnQgZWxlbWVudCBvZiBvbmUgcmFuZ2UgaXMgbGVzcworICAgKiAgdGhhbiB0aGUgb3RoZXIsIHRoYXQgZWxlbWVudCBpcyBjb3BpZWQgYW5kIHRoZSBpdGVyYXRvciBhZHZhbmNlcy4gIElmIGFuCisgICAqICBlbGVtZW50IGlzIGNvbnRhaW5lZCBpbiBib3RoIHJhbmdlcywgbm8gZWxlbWVudHMgYXJlIGNvcGllZCBhbmQgYm90aAorICAgKiAgcmFuZ2VzIGFkdmFuY2UuICBUaGUgb3V0cHV0IHJhbmdlIG1heSBub3Qgb3ZlcmxhcCBlaXRoZXIgaW5wdXQgcmFuZ2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLAorCSAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvcj4KKyAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcmF0b3IxIF9fZmlyc3QxLCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKKwkJCSAgICAgX0lucHV0SXRlcmF0b3IyIF9fZmlyc3QyLCBfSW5wdXRJdGVyYXRvcjIgX19sYXN0MiwKKwkJCSAgICAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yMT46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yMj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlMjsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkJCQkgIF9WYWx1ZVR5cGUxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkJCQkgIF9WYWx1ZVR5cGUyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5PcENvbmNlcHQ8X1ZhbHVlVHlwZTEsIF9WYWx1ZVR5cGUyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5PcENvbmNlcHQ8X1ZhbHVlVHlwZTIsIF9WYWx1ZVR5cGUxPikJCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkX3NldChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9zZXQoX19maXJzdDIsIF9fbGFzdDIsIF9fZmlyc3QxKTsKKworICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKKwlpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQorCSAgeworCSAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CisJICAgICsrX19maXJzdDE7CisJICAgICsrX19yZXN1bHQ7CisJICB9CisJZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQorCSAgeworCSAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CisJICAgICsrX19maXJzdDI7CisJICAgICsrX19yZXN1bHQ7CisJICB9CisJZWxzZQorCSAgeworCSAgICArK19fZmlyc3QxOworCSAgICArK19fZmlyc3QyOworCSAgfQorICAgICAgcmV0dXJuIHN0ZDo6Y29weShfX2ZpcnN0MiwgX19sYXN0Miwgc3RkOjpjb3B5KF9fZmlyc3QxLAorCQkJCQkJICAgIF9fbGFzdDEsIF9fcmVzdWx0KSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBSZXR1cm4gdGhlIHN5bW1ldHJpYyBkaWZmZXJlbmNlIG9mIHR3byBzb3J0ZWQgcmFuZ2VzIHVzaW5nCisgICAqICBjb21wYXJpc29uIGZ1bmN0b3IuCisgICAqICBAaW5ncm91cCBzZXRfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdDEgIFN0YXJ0IG9mIGZpcnN0IHJhbmdlLgorICAgKiAgQHBhcmFtICBsYXN0MSAgIEVuZCBvZiBmaXJzdCByYW5nZS4KKyAgICogIEBwYXJhbSAgZmlyc3QyICBTdGFydCBvZiBzZWNvbmQgcmFuZ2UuCisgICAqICBAcGFyYW0gIGxhc3QyICAgRW5kIG9mIHNlY29uZCByYW5nZS4KKyAgICogIEBwYXJhbSAgY29tcCAgICBUaGUgY29tcGFyaXNvbiBmdW5jdG9yLgorICAgKiAgQHJldHVybiAgRW5kIG9mIHRoZSBvdXRwdXQgcmFuZ2UuCisgICAqICBAaW5ncm91cCBzZXRfYWxnb3JpdGhtcworICAgKgorICAgKiAgVGhpcyBvcGVyYXRpb24gaXRlcmF0ZXMgb3ZlciBib3RoIHJhbmdlcywgY29weWluZyBlbGVtZW50cyBwcmVzZW50IGluCisgICAqICBvbmUgcmFuZ2UgYnV0IG5vdCB0aGUgb3RoZXIgaW4gb3JkZXIgdG8gdGhlIG91dHB1dCByYW5nZS4gIEl0ZXJhdG9ycworICAgKiAgaW5jcmVtZW50IGZvciBlYWNoIHJhbmdlLiAgV2hlbiB0aGUgY3VycmVudCBlbGVtZW50IG9mIG9uZSByYW5nZSBpcyBsZXNzCisgICAqICB0aGFuIHRoZSBvdGhlciBhY2NvcmRpbmcgdG8gQGEgY29tcCwgdGhhdCBlbGVtZW50IGlzIGNvcGllZCBhbmQgdGhlCisgICAqICBpdGVyYXRvciBhZHZhbmNlcy4gIElmIGFuIGVsZW1lbnQgaXMgY29udGFpbmVkIGluIGJvdGggcmFuZ2VzIGFjY29yZGluZworICAgKiAgdG8gQGEgY29tcCwgbm8gZWxlbWVudHMgYXJlIGNvcGllZCBhbmQgYm90aCByYW5nZXMgYWR2YW5jZS4gIFRoZSBvdXRwdXQKKyAgICogIHJhbmdlIG1heSBub3Qgb3ZlcmxhcCBlaXRoZXIgaW5wdXQgcmFuZ2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLAorCSAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEsCisJCQkgICAgIF9JbnB1dEl0ZXJhdG9yMiBfX2ZpcnN0MiwgX0lucHV0SXRlcmF0b3IyIF9fbGFzdDIsCisJCQkgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwKKwkJCSAgICAgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yMT46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yMj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlMjsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkJCQkgIF9WYWx1ZVR5cGUxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkJCQkgIF9WYWx1ZVR5cGUyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQ29tcGFyZSwKKwkJCQkgIF9WYWx1ZVR5cGUxLCBfVmFsdWVUeXBlMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X0NvbXBhcmUsCisJCQkJICBfVmFsdWVUeXBlMiwgX1ZhbHVlVHlwZTE+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9zZXRfcHJlZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fY29tcCk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkX3NldF9wcmVkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX2ZpcnN0MSwgX19jb21wKTsKKworICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKKwlpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKKwkgIHsKKwkgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOworCSAgICArK19fZmlyc3QxOworCSAgICArK19fcmVzdWx0OworCSAgfQorCWVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCisJICB7CisJICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKKwkgICAgKytfX2ZpcnN0MjsKKwkgICAgKytfX3Jlc3VsdDsKKwkgIH0KKwllbHNlCisJICB7CisJICAgICsrX19maXJzdDE7CisJICAgICsrX19maXJzdDI7CisJICB9CisgICAgICByZXR1cm4gc3RkOjpjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCAKKwkJICAgICAgIHN0ZDo6Y29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKKyAgICB9CisKKworICAvKioKKyAgICogIEBicmllZiAgUmV0dXJuIHRoZSBtaW5pbXVtIGVsZW1lbnQgaW4gYSByYW5nZS4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgU3RhcnQgb2YgcmFuZ2UuCisgICAqICBAcGFyYW0gIGxhc3QgICBFbmQgb2YgcmFuZ2UuCisgICAqICBAcmV0dXJuICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgdGhlIHNtYWxsZXN0IHZhbHVlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgIF9Gb3J3YXJkSXRlcmF0b3IKKyAgICBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuQ29tcGFyYWJsZUNvbmNlcHQ8CisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCXJldHVybiBfX2ZpcnN0OworICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CisgICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKKwlpZiAoKl9fZmlyc3QgPCAqX19yZXN1bHQpCisJICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBSZXR1cm4gdGhlIG1pbmltdW0gZWxlbWVudCBpbiBhIHJhbmdlIHVzaW5nIGNvbXBhcmlzb24gZnVuY3Rvci4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgU3RhcnQgb2YgcmFuZ2UuCisgICAqICBAcGFyYW0gIGxhc3QgICBFbmQgb2YgcmFuZ2UuCisgICAqICBAcGFyYW0gIGNvbXAgICBDb21wYXJpc29uIGZ1bmN0b3IuCisgICAqICBAcmV0dXJuICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgdGhlIHNtYWxsZXN0IHZhbHVlCisgICAqICBhY2NvcmRpbmcgdG8gY29tcC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX0ZvcndhcmRJdGVyYXRvcgorICAgIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJCV9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9Db21wYXJlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCXJldHVybiBfX2ZpcnN0OworICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CisgICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKKwlpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHQpKQorCSAgX19yZXN1bHQgPSBfX2ZpcnN0OworICAgICAgcmV0dXJuIF9fcmVzdWx0OworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgUmV0dXJuIHRoZSBtYXhpbXVtIGVsZW1lbnQgaW4gYSByYW5nZS4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgU3RhcnQgb2YgcmFuZ2UuCisgICAqICBAcGFyYW0gIGxhc3QgICBFbmQgb2YgcmFuZ2UuCisgICAqICBAcmV0dXJuICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgdGhlIGxhcmdlc3QgdmFsdWUuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgX0ZvcndhcmRJdGVyYXRvcgorICAgIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5Db21wYXJhYmxlQ29uY2VwdDwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCisJcmV0dXJuIF9fZmlyc3Q7CisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fcmVzdWx0ID0gX19maXJzdDsKKyAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQorCWlmICgqX19yZXN1bHQgPCAqX19maXJzdCkKKwkgIF9fcmVzdWx0ID0gX19maXJzdDsKKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFJldHVybiB0aGUgbWF4aW11bSBlbGVtZW50IGluIGEgcmFuZ2UgdXNpbmcgY29tcGFyaXNvbiBmdW5jdG9yLgorICAgKiAgQGluZ3JvdXAgc29ydGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGZpcnN0ICBTdGFydCBvZiByYW5nZS4KKyAgICogIEBwYXJhbSAgbGFzdCAgIEVuZCBvZiByYW5nZS4KKyAgICogIEBwYXJhbSAgY29tcCAgIENvbXBhcmlzb24gZnVuY3Rvci4KKyAgICogIEByZXR1cm4gIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiB0aGUgbGFyZ2VzdCB2YWx1ZQorICAgKiAgYWNjb3JkaW5nIHRvIGNvbXAuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9Gb3J3YXJkSXRlcmF0b3IKKyAgICBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQlfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQ29tcGFyZSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fcmVzdWx0ID0gX19maXJzdDsKKyAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQorCWlmIChfX2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkpCisJICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCitfR0xJQkNYWF9FTkRfTkVTVEVEX05BTUVTUEFDRQorCisjZW5kaWYgLyogX1NUTF9BTEdPX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfYWxnb2Jhc2UuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfYWxnb2Jhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTI1NDA0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF9hbGdvYmFzZS5oCkBAIC0wLDAgKzEsMTIzMCBAQAorLy8gQ29yZSBhbGdvcml0aG1pYyBmYWNpbGl0aWVzIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OAorICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIHN0bF9hbGdvYmFzZS5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKyNpZm5kZWYgX1NUTF9BTEdPQkFTRV9ICisjZGVmaW5lIF9TVExfQUxHT0JBU0VfSCAxCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8Yml0cy9mdW5jdGV4Y2VwdC5oPgorI2luY2x1ZGUgPGJpdHMvY3BwX3R5cGVfdHJhaXRzLmg+CisjaW5jbHVkZSA8ZXh0L3R5cGVfdHJhaXRzLmg+CisjaW5jbHVkZSA8ZXh0L251bWVyaWNfdHJhaXRzLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfcGFpci5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfaXRlcmF0b3IuaD4KKyNpbmNsdWRlIDxiaXRzL2NvbmNlcHRfY2hlY2suaD4KKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorI2luY2x1ZGUgPGJpdHMvbW92ZS5oPiAvLyBGb3Igc3RkOjpzd2FwIGFuZCBfR0xJQkNYWF9NT1ZFCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgLy8gU2VlIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9saWJzdGRjKysvMjAwNC0wOC9tc2cwMDE2Ny5odG1sOiBpbiBhCisgIC8vIG51dHNoZWxsLCB3ZSBhcmUgcGFydGlhbGx5IGltcGxlbWVudGluZyB0aGUgcmVzb2x1dGlvbiBvZiBEUiAxODcsCisgIC8vIHdoZW4gaXQncyBzYWZlLCBpLmUuLCB0aGUgdmFsdWVfdHlwZXMgYXJlIGVxdWFsLgorICB0ZW1wbGF0ZTxib29sIF9Cb29sVHlwZT4KKyAgICBzdHJ1Y3QgX19pdGVyX3N3YXAKKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcjI+CisgICAgICAgIHN0YXRpYyB2b2lkCisgICAgICAgIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXJhdG9yMSBfX2EsIF9Gb3J3YXJkSXRlcmF0b3IyIF9fYikKKyAgICAgICAgeworICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3IxPjo6dmFsdWVfdHlwZQorICAgICAgICAgICAgX1ZhbHVlVHlwZTE7CisgICAgICAgICAgX1ZhbHVlVHlwZTEgX190bXAgPSBfR0xJQkNYWF9NT1ZFKCpfX2EpOworICAgICAgICAgICpfX2EgPSBfR0xJQkNYWF9NT1ZFKCpfX2IpOworICAgICAgICAgICpfX2IgPSBfR0xJQkNYWF9NT1ZFKF9fdG1wKTsKKwl9CisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9faXRlcl9zd2FwPHRydWU+CisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IyPgorICAgICAgICBzdGF0aWMgdm9pZCAKKyAgICAgICAgaXRlcl9zd2FwKF9Gb3J3YXJkSXRlcmF0b3IxIF9fYSwgX0ZvcndhcmRJdGVyYXRvcjIgX19iKQorICAgICAgICB7CisgICAgICAgICAgc3dhcCgqX19hLCAqX19iKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgU3dhcHMgdGhlIGNvbnRlbnRzIG9mIHR3byBpdGVyYXRvcnMuCisgICAqICBAaW5ncm91cCBtdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGEgIEFuIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBiICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHJldHVybiAgIE5vdGhpbmcuCisgICAqCisgICAqICBUaGlzIGZ1bmN0aW9uIHN3YXBzIHRoZSB2YWx1ZXMgcG9pbnRlZCB0byBieSB0d28gaXRlcmF0b3JzLCBub3QgdGhlCisgICAqICBpdGVyYXRvcnMgdGhlbXNlbHZlcy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IyPgorICAgIGlubGluZSB2b2lkCisgICAgaXRlcl9zd2FwKF9Gb3J3YXJkSXRlcmF0b3IxIF9fYSwgX0ZvcndhcmRJdGVyYXRvcjIgX19iKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3IxPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGUxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcjI+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTI7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9Gb3J3YXJkSXRlcmF0b3IxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgX0ZvcndhcmRJdGVyYXRvcjI+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Db252ZXJ0aWJsZUNvbmNlcHQ8X1ZhbHVlVHlwZTEsCisJCQkJICBfVmFsdWVUeXBlMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0NvbnZlcnRpYmxlQ29uY2VwdDxfVmFsdWVUeXBlMiwKKwkJCQkgIF9WYWx1ZVR5cGUxPikKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcjE+OjpyZWZlcmVuY2UKKwlfUmVmZXJlbmNlVHlwZTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yMj46OnJlZmVyZW5jZQorCV9SZWZlcmVuY2VUeXBlMjsKKyAgICAgIHN0ZDo6X19pdGVyX3N3YXA8X19hcmVfc2FtZTxfVmFsdWVUeXBlMSwgX1ZhbHVlVHlwZTI+OjpfX3ZhbHVlCisJJiYgX19hcmVfc2FtZTxfVmFsdWVUeXBlMSYsIF9SZWZlcmVuY2VUeXBlMT46Ol9fdmFsdWUKKwkmJiBfX2FyZV9zYW1lPF9WYWx1ZVR5cGUyJiwgX1JlZmVyZW5jZVR5cGUyPjo6X192YWx1ZT46OgorCWl0ZXJfc3dhcChfX2EsIF9fYik7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIFN3YXAgdGhlIGVsZW1lbnRzIG9mIHR3byBzZXF1ZW5jZXMuCisgICAqICBAaW5ncm91cCBtdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGZpcnN0MSAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0MSAgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgZmlyc3QyICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcmV0dXJuICAgQW4gaXRlcmF0b3IgZXF1YWwgdG8gQHAgZmlyc3QyKyhsYXN0MS1maXJzdDEpLgorICAgKgorICAgKiAgU3dhcHMgZWFjaCBlbGVtZW50IGluIHRoZSByYW5nZSBAcCBbZmlyc3QxLGxhc3QxKSB3aXRoIHRoZQorICAgKiAgY29ycmVzcG9uZGluZyBlbGVtZW50IGluIHRoZSByYW5nZSBAcCBbZmlyc3QyLChsYXN0MS1maXJzdDEpKS4KKyAgICogIFRoZSByYW5nZXMgbXVzdCBub3Qgb3ZlcmxhcC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IyPgorICAgIF9Gb3J3YXJkSXRlcmF0b3IyCisgICAgc3dhcF9yYW5nZXMoX0ZvcndhcmRJdGVyYXRvcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcmF0b3IxIF9fbGFzdDEsCisJCV9Gb3J3YXJkSXRlcmF0b3IyIF9fZmlyc3QyKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9Gb3J3YXJkSXRlcmF0b3IxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgX0ZvcndhcmRJdGVyYXRvcjI+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QxLCBfX2xhc3QxKTsKKworICAgICAgZm9yICg7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCisJc3RkOjppdGVyX3N3YXAoX19maXJzdDEsIF9fZmlyc3QyKTsKKyAgICAgIHJldHVybiBfX2ZpcnN0MjsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgVGhpcyBkb2VzIHdoYXQgeW91IHRoaW5rIGl0IGRvZXMuCisgICAqICBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgYSAgQSB0aGluZyBvZiBhcmJpdHJhcnkgdHlwZS4KKyAgICogIEBwYXJhbSAgYiAgQW5vdGhlciB0aGluZyBvZiBhcmJpdHJhcnkgdHlwZS4KKyAgICogIEByZXR1cm4gICBUaGUgbGVzc2VyIG9mIHRoZSBwYXJhbWV0ZXJzLgorICAgKgorICAgKiAgVGhpcyBpcyB0aGUgc2ltcGxlIGNsYXNzaWMgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbi4gIEl0IHdpbGwgd29yayBvbgorICAgKiAgdGVtcG9yYXJ5IGV4cHJlc3Npb25zLCBzaW5jZSB0aGV5IGFyZSBvbmx5IGV2YWx1YXRlZCBvbmNlLCB1bmxpa2UgYQorICAgKiAgcHJlcHJvY2Vzc29yIG1hY3JvLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbnN0IF9UcCYKKyAgICBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuQ29tcGFyYWJsZUNvbmNlcHQ8X1RwPikKKyAgICAgIC8vcmV0dXJuIF9fYiA8IF9fYSA/IF9fYiA6IF9fYTsKKyAgICAgIGlmIChfX2IgPCBfX2EpCisJcmV0dXJuIF9fYjsKKyAgICAgIHJldHVybiBfX2E7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIFRoaXMgZG9lcyB3aGF0IHlvdSB0aGluayBpdCBkb2VzLgorICAgKiAgQGluZ3JvdXAgc29ydGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGEgIEEgdGhpbmcgb2YgYXJiaXRyYXJ5IHR5cGUuCisgICAqICBAcGFyYW0gIGIgIEFub3RoZXIgdGhpbmcgb2YgYXJiaXRyYXJ5IHR5cGUuCisgICAqICBAcmV0dXJuICAgVGhlIGdyZWF0ZXIgb2YgdGhlIHBhcmFtZXRlcnMuCisgICAqCisgICAqICBUaGlzIGlzIHRoZSBzaW1wbGUgY2xhc3NpYyBnZW5lcmljIGltcGxlbWVudGF0aW9uLiAgSXQgd2lsbCB3b3JrIG9uCisgICAqICB0ZW1wb3JhcnkgZXhwcmVzc2lvbnMsIHNpbmNlIHRoZXkgYXJlIG9ubHkgZXZhbHVhdGVkIG9uY2UsIHVubGlrZSBhCisgICAqICBwcmVwcm9jZXNzb3IgbWFjcm8uCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29uc3QgX1RwJgorICAgIG1heChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5Db21wYXJhYmxlQ29uY2VwdDxfVHA+KQorICAgICAgLy9yZXR1cm4gIF9fYSA8IF9fYiA/IF9fYiA6IF9fYTsKKyAgICAgIGlmIChfX2EgPCBfX2IpCisJcmV0dXJuIF9fYjsKKyAgICAgIHJldHVybiBfX2E7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIFRoaXMgZG9lcyB3aGF0IHlvdSB0aGluayBpdCBkb2VzLgorICAgKiAgQGluZ3JvdXAgc29ydGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGEgIEEgdGhpbmcgb2YgYXJiaXRyYXJ5IHR5cGUuCisgICAqICBAcGFyYW0gIGIgIEFub3RoZXIgdGhpbmcgb2YgYXJiaXRyYXJ5IHR5cGUuCisgICAqICBAcGFyYW0gIGNvbXAgIEEgQGxpbmsgY29tcGFyaXNvbl9mdW5jdG9ycyBjb21wYXJpc29uIGZ1bmN0b3JAZW5kbGluay4KKyAgICogIEByZXR1cm4gICBUaGUgbGVzc2VyIG9mIHRoZSBwYXJhbWV0ZXJzLgorICAgKgorICAgKiAgVGhpcyB3aWxsIHdvcmsgb24gdGVtcG9yYXJ5IGV4cHJlc3Npb25zLCBzaW5jZSB0aGV5IGFyZSBvbmx5IGV2YWx1YXRlZAorICAgKiAgb25jZSwgdW5saWtlIGEgcHJlcHJvY2Vzc29yIG1hY3JvLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGlubGluZSBjb25zdCBfVHAmCisgICAgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIC8vcmV0dXJuIF9fY29tcChfX2IsIF9fYSkgPyBfX2IgOiBfX2E7CisgICAgICBpZiAoX19jb21wKF9fYiwgX19hKSkKKwlyZXR1cm4gX19iOworICAgICAgcmV0dXJuIF9fYTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgVGhpcyBkb2VzIHdoYXQgeW91IHRoaW5rIGl0IGRvZXMuCisgICAqICBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgYSAgQSB0aGluZyBvZiBhcmJpdHJhcnkgdHlwZS4KKyAgICogIEBwYXJhbSAgYiAgQW5vdGhlciB0aGluZyBvZiBhcmJpdHJhcnkgdHlwZS4KKyAgICogIEBwYXJhbSAgY29tcCAgQSBAbGluayBjb21wYXJpc29uX2Z1bmN0b3JzIGNvbXBhcmlzb24gZnVuY3RvckBlbmRsaW5rLgorICAgKiAgQHJldHVybiAgIFRoZSBncmVhdGVyIG9mIHRoZSBwYXJhbWV0ZXJzLgorICAgKgorICAgKiAgVGhpcyB3aWxsIHdvcmsgb24gdGVtcG9yYXJ5IGV4cHJlc3Npb25zLCBzaW5jZSB0aGV5IGFyZSBvbmx5IGV2YWx1YXRlZAorICAgKiAgb25jZSwgdW5saWtlIGEgcHJlcHJvY2Vzc29yIG1hY3JvLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGlubGluZSBjb25zdCBfVHAmCisgICAgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIC8vcmV0dXJuIF9fY29tcChfX2EsIF9fYikgPyBfX2IgOiBfX2E7CisgICAgICBpZiAoX19jb21wKF9fYSwgX19iKSkKKwlyZXR1cm4gX19iOworICAgICAgcmV0dXJuIF9fYTsKKyAgICB9CisKKworICAvLyBJZiBfSXRlcmF0b3IgaGFzIGEgYmFzZSByZXR1cm5zIGl0IG90aGVyd2lzZSBfSXRlcmF0b3IgaXMgcmV0dXJuZWQKKyAgLy8gdW50b3VjaGVkCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgYm9vbCBfSGFzQmFzZT4KKyAgICBzdHJ1Y3QgX0l0ZXJfYmFzZQorICAgIHsKKyAgICAgIHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7CisgICAgICBzdGF0aWMgaXRlcmF0b3JfdHlwZQorICAgICAgX1NfYmFzZShfSXRlcmF0b3IgX19pdCkKKyAgICAgIHsgcmV0dXJuIF9faXQ7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KKyAgICBzdHJ1Y3QgX0l0ZXJfYmFzZTxfSXRlcmF0b3IsIHRydWU+CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6Oml0ZXJhdG9yX3R5cGUgaXRlcmF0b3JfdHlwZTsKKyAgICAgIHN0YXRpYyBpdGVyYXRvcl90eXBlCisgICAgICBfU19iYXNlKF9JdGVyYXRvciBfX2l0KQorICAgICAgeyByZXR1cm4gX19pdC5iYXNlKCk7IH0KKyAgICB9OworCisgIC8vIElmIF9JdGVyYXRvciBpcyBhIF9fbm9ybWFsX2l0ZXJhdG9yIHJldHVybiBpdHMgYmFzZSAoYSBwbGFpbiBwb2ludGVyLAorICAvLyBub3JtYWxseSkgb3RoZXJ3aXNlIHJldHVybiBpdCB1bnRvdWNoZWQuICBTZWUgY29weSwgZmlsbCwgLi4uIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CisgICAgc3RydWN0IF9OaXRlcl9iYXNlCisgICAgOiBfSXRlcl9iYXNlPF9JdGVyYXRvciwgX19pc19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6X192YWx1ZT4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgIGlubGluZSB0eXBlbmFtZSBfTml0ZXJfYmFzZTxfSXRlcmF0b3I+OjppdGVyYXRvcl90eXBlCisgICAgX19uaXRlcl9iYXNlKF9JdGVyYXRvciBfX2l0KQorICAgIHsgcmV0dXJuIHN0ZDo6X05pdGVyX2Jhc2U8X0l0ZXJhdG9yPjo6X1NfYmFzZShfX2l0KTsgfQorCisgIC8vIExpa2V3aXNlLCBmb3IgbW92ZV9pdGVyYXRvci4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgIHN0cnVjdCBfTWl0ZXJfYmFzZQorICAgIDogX0l0ZXJfYmFzZTxfSXRlcmF0b3IsIF9faXNfbW92ZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpfX3ZhbHVlPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CisgICAgaW5saW5lIHR5cGVuYW1lIF9NaXRlcl9iYXNlPF9JdGVyYXRvcj46Oml0ZXJhdG9yX3R5cGUKKyAgICBfX21pdGVyX2Jhc2UoX0l0ZXJhdG9yIF9faXQpCisgICAgeyByZXR1cm4gc3RkOjpfTWl0ZXJfYmFzZTxfSXRlcmF0b3I+OjpfU19iYXNlKF9faXQpOyB9CisKKyAgLy8gQWxsIG9mIHRoZXNlIGF1eGlsaWFyeSBzdHJ1Y3RzIHNlcnZlIHR3byBwdXJwb3Nlcy4gICgxKSBSZXBsYWNlCisgIC8vIGNhbGxzIHRvIGNvcHkgd2l0aCBtZW1tb3ZlIHdoZW5ldmVyIHBvc3NpYmxlLiAgKE1lbW1vdmUsIG5vdCBtZW1jcHksCisgIC8vIGJlY2F1c2UgdGhlIGlucHV0IGFuZCBvdXRwdXQgcmFuZ2VzIGFyZSBwZXJtaXR0ZWQgdG8gb3ZlcmxhcC4pCisgIC8vICgyKSBJZiB3ZSdyZSB1c2luZyByYW5kb20gYWNjZXNzIGl0ZXJhdG9ycywgdGhlbiB3cml0ZSB0aGUgbG9vcCBhcworICAvLyBhIGZvciBsb29wIHdpdGggYW4gZXhwbGljaXQgY291bnQuCisKKyAgdGVtcGxhdGU8Ym9vbCwgYm9vbCwgdHlwZW5hbWU+CisgICAgc3RydWN0IF9fY29weV9tb3ZlCisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJLCB0eXBlbmFtZSBfT0k+CisgICAgICAgIHN0YXRpYyBfT0kKKyAgICAgICAgX19jb3B5X20oX0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QsIF9PSSBfX3Jlc3VsdCkKKyAgICAgICAgeworCSAgZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fcmVzdWx0LCArK19fZmlyc3QpCisJICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OworCSAgcmV0dXJuIF9fcmVzdWx0OworCX0KKyAgICB9OworCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NhdGVnb3J5PgorICAgIHN0cnVjdCBfX2NvcHlfbW92ZTx0cnVlLCBmYWxzZSwgX0NhdGVnb3J5PgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSSwgdHlwZW5hbWUgX09JPgorICAgICAgICBzdGF0aWMgX09JCisgICAgICAgIF9fY29weV9tKF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0LCBfT0kgX19yZXN1bHQpCisgICAgICAgIHsKKwkgIGZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX3Jlc3VsdCwgKytfX2ZpcnN0KQorCSAgICAqX19yZXN1bHQgPSBzdGQ6Om1vdmUoKl9fZmlyc3QpOworCSAgcmV0dXJuIF9fcmVzdWx0OworCX0KKyAgICB9OworI2VuZGlmCisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2NvcHlfbW92ZTxmYWxzZSwgZmFsc2UsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnPgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSSwgdHlwZW5hbWUgX09JPgorICAgICAgICBzdGF0aWMgX09JCisgICAgICAgIF9fY29weV9tKF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0LCBfT0kgX19yZXN1bHQpCisgICAgICAgIHsgCisJICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUk+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOworCSAgZm9yKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikKKwkgICAgeworCSAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OworCSAgICAgICsrX19maXJzdDsKKwkgICAgICArK19fcmVzdWx0OworCSAgICB9CisJICByZXR1cm4gX19yZXN1bHQ7CisJfQorICAgIH07CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fY29weV9tb3ZlPHRydWUsIGZhbHNlLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZz4KKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUksIHR5cGVuYW1lIF9PST4KKyAgICAgICAgc3RhdGljIF9PSQorICAgICAgICBfX2NvcHlfbShfSUkgX19maXJzdCwgX0lJIF9fbGFzdCwgX09JIF9fcmVzdWx0KQorICAgICAgICB7IAorCSAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lJPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKKwkgIGZvcihfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pCisJICAgIHsKKwkgICAgICAqX19yZXN1bHQgPSBzdGQ6Om1vdmUoKl9fZmlyc3QpOworCSAgICAgICsrX19maXJzdDsKKwkgICAgICArK19fcmVzdWx0OworCSAgICB9CisJICByZXR1cm4gX19yZXN1bHQ7CisJfQorICAgIH07CisjZW5kaWYKKworICB0ZW1wbGF0ZTxib29sIF9Jc01vdmU+CisgICAgc3RydWN0IF9fY29weV9tb3ZlPF9Jc01vdmUsIHRydWUsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnPgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RhdGljIF9UcCoKKyAgICAgICAgX19jb3B5X20oY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKKyAgICAgICAgeworCSAgY29uc3QgcHRyZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBfX2ZpcnN0OworCSAgaWYgKF9OdW0pCisJICAgIF9fYnVpbHRpbl9tZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2YoX1RwKSAqIF9OdW0pOworCSAgcmV0dXJuIF9fcmVzdWx0ICsgX051bTsKKwl9CisgICAgfTsKKworICB0ZW1wbGF0ZTxib29sIF9Jc01vdmUsIHR5cGVuYW1lIF9JSSwgdHlwZW5hbWUgX09JPgorICAgIGlubGluZSBfT0kKKyAgICBfX2NvcHlfbW92ZV9hKF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0LCBfT0kgX19yZXN1bHQpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lJPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlSTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9PST46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZU87CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUk+OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdvcnk7CisgICAgICBjb25zdCBib29sIF9fc2ltcGxlID0gKF9faXNfcG9kKF9WYWx1ZVR5cGVJKQorCSAgICAgICAgICAgICAgICAgICAgICYmIF9faXNfcG9pbnRlcjxfSUk+OjpfX3ZhbHVlCisJICAgICAgICAgICAgICAgICAgICAgJiYgX19pc19wb2ludGVyPF9PST46Ol9fdmFsdWUKKwkJCSAgICAgJiYgX19hcmVfc2FtZTxfVmFsdWVUeXBlSSwgX1ZhbHVlVHlwZU8+OjpfX3ZhbHVlKTsKKworICAgICAgcmV0dXJuIHN0ZDo6X19jb3B5X21vdmU8X0lzTW92ZSwgX19zaW1wbGUsCisJICAgICAgICAgICAgICAgICAgICAgIF9DYXRlZ29yeT46Ol9fY29weV9tKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOworICAgIH0KKworICAvLyBIZWxwZXJzIGZvciBzdHJlYW1idWYgaXRlcmF0b3JzIChlaXRoZXIgaXN0cmVhbSBvciBvc3RyZWFtKS4KKyAgLy8gTkI6IGF2b2lkIGluY2x1ZGluZyA8aW9zZndkPiwgcmVsYXRpdmVseSBsYXJnZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIHN0cnVjdCBjaGFyX3RyYWl0czsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjsKKworICB0ZW1wbGF0ZTxib29sIF9Jc01vdmUsIHR5cGVuYW1lIF9DaGFyVD4KKyAgICB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfY2hhcjxfQ2hhclQ+OjpfX3ZhbHVlLCAKKwkgICAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBjaGFyX3RyYWl0czxfQ2hhclQ+ID4gPjo6X190eXBlCisgICAgX19jb3B5X21vdmVfYTIoX0NoYXJUKiwgX0NoYXJUKiwKKwkJICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIGNoYXJfdHJhaXRzPF9DaGFyVD4gPik7CisKKyAgdGVtcGxhdGU8Ym9vbCBfSXNNb3ZlLCB0eXBlbmFtZSBfQ2hhclQ+CisgICAgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2NoYXI8X0NoYXJUPjo6X192YWx1ZSwgCisJICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgY2hhcl90cmFpdHM8X0NoYXJUPiA+ID46Ol9fdHlwZQorICAgIF9fY29weV9tb3ZlX2EyKGNvbnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCosCisJCSAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBjaGFyX3RyYWl0czxfQ2hhclQ+ID4pOworCisgIHRlbXBsYXRlPGJvb2wgX0lzTW92ZSwgdHlwZW5hbWUgX0NoYXJUPgorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19jaGFyPF9DaGFyVD46Ol9fdmFsdWUsCisJCQkJICAgIF9DaGFyVCo+OjpfX3R5cGUKKyAgICBfX2NvcHlfbW92ZV9hMihpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgY2hhcl90cmFpdHM8X0NoYXJUPiA+LAorCQkgICBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgY2hhcl90cmFpdHM8X0NoYXJUPiA+LCBfQ2hhclQqKTsKKworICB0ZW1wbGF0ZTxib29sIF9Jc01vdmUsIHR5cGVuYW1lIF9JSSwgdHlwZW5hbWUgX09JPgorICAgIGlubGluZSBfT0kKKyAgICBfX2NvcHlfbW92ZV9hMihfSUkgX19maXJzdCwgX0lJIF9fbGFzdCwgX09JIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIHJldHVybiBfT0koc3RkOjpfX2NvcHlfbW92ZV9hPF9Jc01vdmU+KHN0ZDo6X19uaXRlcl9iYXNlKF9fZmlyc3QpLAorCQkJCQkgICAgIHN0ZDo6X19uaXRlcl9iYXNlKF9fbGFzdCksCisJCQkJCSAgICAgc3RkOjpfX25pdGVyX2Jhc2UoX19yZXN1bHQpKSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIENvcGllcyB0aGUgcmFuZ2UgW2ZpcnN0LGxhc3QpIGludG8gcmVzdWx0LgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgcmVzdWx0IEFuIG91dHB1dCBpdGVyYXRvci4KKyAgICogIEByZXR1cm4gICByZXN1bHQgKyAoZmlyc3QgLSBsYXN0KQorICAgKgorICAgKiAgVGhpcyBpbmxpbmUgZnVuY3Rpb24gd2lsbCBib2lsIGRvd24gdG8gYSBjYWxsIHRvIEBjIG1lbW1vdmUgd2hlbmV2ZXIKKyAgICogIHBvc3NpYmxlLiAgRmFpbGluZyB0aGF0LCBpZiByYW5kb20gYWNjZXNzIGl0ZXJhdG9ycyBhcmUgcGFzc2VkLCB0aGVuIHRoZQorICAgKiAgbG9vcCBjb3VudCB3aWxsIGJlIGtub3duIChhbmQgdGhlcmVmb3JlIGEgY2FuZGlkYXRlIGZvciBjb21waWxlcgorICAgKiAgb3B0aW1pemF0aW9ucyBzdWNoIGFzIHVucm9sbGluZykuICBSZXN1bHQgbWF5IG5vdCBiZSBjb250YWluZWQgd2l0aGluCisgICAqICBbZmlyc3QsbGFzdCk7IHRoZSBjb3B5X2JhY2t3YXJkIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCisgICAqCisgICAqICBOb3RlIHRoYXQgdGhlIGVuZCBvZiB0aGUgb3V0cHV0IHJhbmdlIGlzIHBlcm1pdHRlZCB0byBiZSBjb250YWluZWQKKyAgICogIHdpdGhpbiBbZmlyc3QsbGFzdCkuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSSwgdHlwZW5hbWUgX09JPgorICAgIGlubGluZSBfT0kKKyAgICBjb3B5KF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0LCBfT0kgX19yZXN1bHQpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lJPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PSSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JST46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIHJldHVybiAoc3RkOjpfX2NvcHlfbW92ZV9hMjxfX2lzX21vdmVfaXRlcmF0b3I8X0lJPjo6X192YWx1ZT4KKwkgICAgICAoc3RkOjpfX21pdGVyX2Jhc2UoX19maXJzdCksIHN0ZDo6X19taXRlcl9iYXNlKF9fbGFzdCksCisJICAgICAgIF9fcmVzdWx0KSk7CisgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgLyoqCisgICAqICBAYnJpZWYgTW92ZXMgdGhlIHJhbmdlIFtmaXJzdCxsYXN0KSBpbnRvIHJlc3VsdC4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIHJlc3VsdCBBbiBvdXRwdXQgaXRlcmF0b3IuCisgICAqICBAcmV0dXJuICAgcmVzdWx0ICsgKGZpcnN0IC0gbGFzdCkKKyAgICoKKyAgICogIFRoaXMgaW5saW5lIGZ1bmN0aW9uIHdpbGwgYm9pbCBkb3duIHRvIGEgY2FsbCB0byBAYyBtZW1tb3ZlIHdoZW5ldmVyCisgICAqICBwb3NzaWJsZS4gIEZhaWxpbmcgdGhhdCwgaWYgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMgYXJlIHBhc3NlZCwgdGhlbiB0aGUKKyAgICogIGxvb3AgY291bnQgd2lsbCBiZSBrbm93biAoYW5kIHRoZXJlZm9yZSBhIGNhbmRpZGF0ZSBmb3IgY29tcGlsZXIKKyAgICogIG9wdGltaXphdGlvbnMgc3VjaCBhcyB1bnJvbGxpbmcpLiAgUmVzdWx0IG1heSBub3QgYmUgY29udGFpbmVkIHdpdGhpbgorICAgKiAgW2ZpcnN0LGxhc3QpOyB0aGUgbW92ZV9iYWNrd2FyZCBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgorICAgKgorICAgKiAgTm90ZSB0aGF0IHRoZSBlbmQgb2YgdGhlIG91dHB1dCByYW5nZSBpcyBwZXJtaXR0ZWQgdG8gYmUgY29udGFpbmVkCisgICAqICB3aXRoaW4gW2ZpcnN0LGxhc3QpLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUksIHR5cGVuYW1lIF9PST4KKyAgICBpbmxpbmUgX09JCisgICAgbW92ZShfSUkgX19maXJzdCwgX0lJIF9fbGFzdCwgX09JIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JST4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT0ksCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUk+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICByZXR1cm4gc3RkOjpfX2NvcHlfbW92ZV9hMjx0cnVlPihzdGQ6Ol9fbWl0ZXJfYmFzZShfX2ZpcnN0KSwKKwkJCQkgICAgICAgc3RkOjpfX21pdGVyX2Jhc2UoX19sYXN0KSwgX19yZXN1bHQpOworICAgIH0KKworI2RlZmluZSBfR0xJQkNYWF9NT1ZFMyhfVHAsIF9VcCwgX1ZwKSBzdGQ6Om1vdmUoX1RwLCBfVXAsIF9WcCkKKyNlbHNlCisjZGVmaW5lIF9HTElCQ1hYX01PVkUzKF9UcCwgX1VwLCBfVnApIHN0ZDo6Y29weShfVHAsIF9VcCwgX1ZwKQorI2VuZGlmCisKKyAgdGVtcGxhdGU8Ym9vbCwgYm9vbCwgdHlwZW5hbWU+CisgICAgc3RydWN0IF9fY29weV9tb3ZlX2JhY2t3YXJkCisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KKyAgICAgICAgc3RhdGljIF9CSTIKKyAgICAgICAgX19jb3B5X21vdmVfYihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KQorICAgICAgICB7CisJICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCisJICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0OworCSAgcmV0dXJuIF9fcmVzdWx0OworCX0KKyAgICB9OworCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NhdGVnb3J5PgorICAgIHN0cnVjdCBfX2NvcHlfbW92ZV9iYWNrd2FyZDx0cnVlLCBmYWxzZSwgX0NhdGVnb3J5PgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CisgICAgICAgIHN0YXRpYyBfQkkyCisgICAgICAgIF9fY29weV9tb3ZlX2IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkKKyAgICAgICAgeworCSAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQorCSAgICAqLS1fX3Jlc3VsdCA9IHN0ZDo6bW92ZSgqLS1fX2xhc3QpOworCSAgcmV0dXJuIF9fcmVzdWx0OworCX0KKyAgICB9OworI2VuZGlmCisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2NvcHlfbW92ZV9iYWNrd2FyZDxmYWxzZSwgZmFsc2UsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnPgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CisgICAgICAgIHN0YXRpYyBfQkkyCisgICAgICAgIF9fY29weV9tb3ZlX2IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkKKyAgICAgICAgeworCSAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CSTE+OjpkaWZmZXJlbmNlX3R5cGUgX19uOworCSAgZm9yIChfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikKKwkgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CisJICByZXR1cm4gX19yZXN1bHQ7CisJfQorICAgIH07CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fY29weV9tb3ZlX2JhY2t3YXJkPHRydWUsIGZhbHNlLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZz4KKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgorICAgICAgICBzdGF0aWMgX0JJMgorICAgICAgICBfX2NvcHlfbW92ZV9iKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCisgICAgICAgIHsKKwkgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkxPjo6ZGlmZmVyZW5jZV90eXBlIF9fbjsKKwkgIGZvciAoX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pCisJICAgICotLV9fcmVzdWx0ID0gc3RkOjptb3ZlKCotLV9fbGFzdCk7CisJICByZXR1cm4gX19yZXN1bHQ7CisJfQorICAgIH07CisjZW5kaWYKKworICB0ZW1wbGF0ZTxib29sIF9Jc01vdmU+CisgICAgc3RydWN0IF9fY29weV9tb3ZlX2JhY2t3YXJkPF9Jc01vdmUsIHRydWUsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnPgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RhdGljIF9UcCoKKyAgICAgICAgX19jb3B5X21vdmVfYihjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQorICAgICAgICB7CisJICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CisJICBpZiAoX051bSkKKwkgICAgX19idWlsdGluX21lbW1vdmUoX19yZXN1bHQgLSBfTnVtLCBfX2ZpcnN0LCBzaXplb2YoX1RwKSAqIF9OdW0pOworCSAgcmV0dXJuIF9fcmVzdWx0IC0gX051bTsKKwl9CisgICAgfTsKKworICB0ZW1wbGF0ZTxib29sIF9Jc01vdmUsIHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CisgICAgaW5saW5lIF9CSTIKKyAgICBfX2NvcHlfbW92ZV9iYWNrd2FyZF9hKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJMT46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CSTE+OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdvcnk7CisgICAgICBjb25zdCBib29sIF9fc2ltcGxlID0gKF9faXNfcG9kKF9WYWx1ZVR5cGUxKQorCSAgICAgICAgICAgICAgICAgICAgICYmIF9faXNfcG9pbnRlcjxfQkkxPjo6X192YWx1ZQorCSAgICAgICAgICAgICAgICAgICAgICYmIF9faXNfcG9pbnRlcjxfQkkyPjo6X192YWx1ZQorCQkJICAgICAmJiBfX2FyZV9zYW1lPF9WYWx1ZVR5cGUxLCBfVmFsdWVUeXBlMj46Ol9fdmFsdWUpOworCisgICAgICByZXR1cm4gc3RkOjpfX2NvcHlfbW92ZV9iYWNrd2FyZDxfSXNNb3ZlLCBfX3NpbXBsZSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NhdGVnb3J5Pjo6X19jb3B5X21vdmVfYihfX2ZpcnN0LAorCQkJCQkJCQkgX19sYXN0LAorCQkJCQkJCQkgX19yZXN1bHQpOworICAgIH0KKworICB0ZW1wbGF0ZTxib29sIF9Jc01vdmUsIHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CisgICAgaW5saW5lIF9CSTIKKyAgICBfX2NvcHlfbW92ZV9iYWNrd2FyZF9hMihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIHJldHVybiBfQkkyKHN0ZDo6X19jb3B5X21vdmVfYmFja3dhcmRfYTxfSXNNb3ZlPgorCQkgIChzdGQ6Ol9fbml0ZXJfYmFzZShfX2ZpcnN0KSwgc3RkOjpfX25pdGVyX2Jhc2UoX19sYXN0KSwKKwkJICAgc3RkOjpfX25pdGVyX2Jhc2UoX19yZXN1bHQpKSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIENvcGllcyB0aGUgcmFuZ2UgW2ZpcnN0LGxhc3QpIGludG8gcmVzdWx0LgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdCAgQSBiaWRpcmVjdGlvbmFsIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0ICAgQSBiaWRpcmVjdGlvbmFsIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICByZXN1bHQgQSBiaWRpcmVjdGlvbmFsIGl0ZXJhdG9yLgorICAgKiAgQHJldHVybiAgIHJlc3VsdCAtIChmaXJzdCAtIGxhc3QpCisgICAqCisgICAqICBUaGUgZnVuY3Rpb24gaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBjb3B5LCBidXQgc3RhcnRzIGF0IHRoZSBlbmQgb2YgdGhlCisgICAqICByYW5nZSBhbmQgd29ya3MgaXRzIHdheSB0byB0aGUgc3RhcnQsIHJldHVybmluZyB0aGUgc3RhcnQgb2YgdGhlIHJlc3VsdC4KKyAgICogIFRoaXMgaW5saW5lIGZ1bmN0aW9uIHdpbGwgYm9pbCBkb3duIHRvIGEgY2FsbCB0byBAYyBtZW1tb3ZlIHdoZW5ldmVyCisgICAqICBwb3NzaWJsZS4gIEZhaWxpbmcgdGhhdCwgaWYgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMgYXJlIHBhc3NlZCwgdGhlbiB0aGUKKyAgICogIGxvb3AgY291bnQgd2lsbCBiZSBrbm93biAoYW5kIHRoZXJlZm9yZSBhIGNhbmRpZGF0ZSBmb3IgY29tcGlsZXIKKyAgICogIG9wdGltaXphdGlvbnMgc3VjaCBhcyB1bnJvbGxpbmcpLgorICAgKgorICAgKiAgUmVzdWx0IG1heSBub3QgYmUgaW4gdGhlIHJhbmdlIFtmaXJzdCxsYXN0KS4gIFVzZSBjb3B5IGluc3RlYWQuICBOb3RlCisgICAqICB0aGF0IHRoZSBzdGFydCBvZiB0aGUgb3V0cHV0IHJhbmdlIG1heSBvdmVybGFwIFtmaXJzdCxsYXN0KS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KKyAgICBpbmxpbmUgX0JJMgorICAgIGNvcHlfYmFja3dhcmQoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3JDb25jZXB0PF9CSTE+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9NdXRhYmxlX0JpZGlyZWN0aW9uYWxJdGVyYXRvckNvbmNlcHQ8X0JJMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0NvbnZlcnRpYmxlQ29uY2VwdDwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CSTE+Ojp2YWx1ZV90eXBlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIHJldHVybiAoc3RkOjpfX2NvcHlfbW92ZV9iYWNrd2FyZF9hMjxfX2lzX21vdmVfaXRlcmF0b3I8X0JJMT46Ol9fdmFsdWU+CisJICAgICAgKHN0ZDo6X19taXRlcl9iYXNlKF9fZmlyc3QpLCBzdGQ6Ol9fbWl0ZXJfYmFzZShfX2xhc3QpLAorCSAgICAgICBfX3Jlc3VsdCkpOworICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgIC8qKgorICAgKiAgQGJyaWVmIE1vdmVzIHRoZSByYW5nZSBbZmlyc3QsbGFzdCkgaW50byByZXN1bHQuCisgICAqICBAaW5ncm91cCBtdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGZpcnN0ICBBIGJpZGlyZWN0aW9uYWwgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QgICBBIGJpZGlyZWN0aW9uYWwgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIHJlc3VsdCBBIGJpZGlyZWN0aW9uYWwgaXRlcmF0b3IuCisgICAqICBAcmV0dXJuICAgcmVzdWx0IC0gKGZpcnN0IC0gbGFzdCkKKyAgICoKKyAgICogIFRoZSBmdW5jdGlvbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIG1vdmUsIGJ1dCBzdGFydHMgYXQgdGhlIGVuZCBvZiB0aGUKKyAgICogIHJhbmdlIGFuZCB3b3JrcyBpdHMgd2F5IHRvIHRoZSBzdGFydCwgcmV0dXJuaW5nIHRoZSBzdGFydCBvZiB0aGUgcmVzdWx0LgorICAgKiAgVGhpcyBpbmxpbmUgZnVuY3Rpb24gd2lsbCBib2lsIGRvd24gdG8gYSBjYWxsIHRvIEBjIG1lbW1vdmUgd2hlbmV2ZXIKKyAgICogIHBvc3NpYmxlLiAgRmFpbGluZyB0aGF0LCBpZiByYW5kb20gYWNjZXNzIGl0ZXJhdG9ycyBhcmUgcGFzc2VkLCB0aGVuIHRoZQorICAgKiAgbG9vcCBjb3VudCB3aWxsIGJlIGtub3duIChhbmQgdGhlcmVmb3JlIGEgY2FuZGlkYXRlIGZvciBjb21waWxlcgorICAgKiAgb3B0aW1pemF0aW9ucyBzdWNoIGFzIHVucm9sbGluZykuCisgICAqCisgICAqICBSZXN1bHQgbWF5IG5vdCBiZSBpbiB0aGUgcmFuZ2UgW2ZpcnN0LGxhc3QpLiAgVXNlIG1vdmUgaW5zdGVhZC4gIE5vdGUKKyAgICogIHRoYXQgdGhlIHN0YXJ0IG9mIHRoZSBvdXRwdXQgcmFuZ2UgbWF5IG92ZXJsYXAgW2ZpcnN0LGxhc3QpLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgorICAgIGlubGluZSBfQkkyCisgICAgbW92ZV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpZGlyZWN0aW9uYWxJdGVyYXRvckNvbmNlcHQ8X0JJMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdDxfQkkyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQ29udmVydGlibGVDb25jZXB0PAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJMT46OnZhbHVlX3R5cGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgcmV0dXJuIHN0ZDo6X19jb3B5X21vdmVfYmFja3dhcmRfYTI8dHJ1ZT4oc3RkOjpfX21pdGVyX2Jhc2UoX19maXJzdCksCisJCQkJCQlzdGQ6Ol9fbWl0ZXJfYmFzZShfX2xhc3QpLAorCQkJCQkJX19yZXN1bHQpOworICAgIH0KKworI2RlZmluZSBfR0xJQkNYWF9NT1ZFX0JBQ0tXQVJEMyhfVHAsIF9VcCwgX1ZwKSBzdGQ6Om1vdmVfYmFja3dhcmQoX1RwLCBfVXAsIF9WcCkKKyNlbHNlCisjZGVmaW5lIF9HTElCQ1hYX01PVkVfQkFDS1dBUkQzKF9UcCwgX1VwLCBfVnApIHN0ZDo6Y29weV9iYWNrd2FyZChfVHAsIF9VcCwgX1ZwKQorI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZQorICAgIF9fZ251X2N4eDo6X19lbmFibGVfaWY8IV9faXNfc2NhbGFyPF9UcD46Ol9fdmFsdWUsIHZvaWQ+OjpfX3R5cGUKKyAgICBfX2ZpbGxfYShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorIAkgICAgIGNvbnN0IF9UcCYgX192YWx1ZSkKKyAgICB7CisgICAgICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwkqX19maXJzdCA9IF9fdmFsdWU7CisgICAgfQorICAgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lCisgICAgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX3NjYWxhcjxfVHA+OjpfX3ZhbHVlLCB2b2lkPjo6X190eXBlCisgICAgX19maWxsX2EoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgIGNvbnN0IF9UcCYgX192YWx1ZSkKKyAgICB7CisgICAgICBjb25zdCBfVHAgX190bXAgPSBfX3ZhbHVlOworICAgICAgZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCisJKl9fZmlyc3QgPSBfX3RtcDsKKyAgICB9CisKKyAgLy8gU3BlY2lhbGl6YXRpb246IGZvciBjaGFyIHR5cGVzIHdlIGNhbiB1c2UgbWVtc2V0LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lCisgICAgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2J5dGU8X1RwPjo6X192YWx1ZSwgdm9pZD46Ol9fdHlwZQorICAgIF9fZmlsbF9hKF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3QsIGNvbnN0IF9UcCYgX19jKQorICAgIHsKKyAgICAgIGNvbnN0IF9UcCBfX3RtcCA9IF9fYzsKKyAgICAgIF9fYnVpbHRpbl9tZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190bXApLAorCQkgICAgICAgX19sYXN0IC0gX19maXJzdCk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIEZpbGxzIHRoZSByYW5nZSBbZmlyc3QsbGFzdCkgd2l0aCBjb3BpZXMgb2YgdmFsdWUuCisgICAqICBAaW5ncm91cCBtdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGZpcnN0ICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QgICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIHZhbHVlICBBIHJlZmVyZW5jZS10by1jb25zdCBvZiBhcmJpdHJhcnkgdHlwZS4KKyAgICogIEByZXR1cm4gICBOb3RoaW5nLgorICAgKgorICAgKiAgVGhpcyBmdW5jdGlvbiBmaWxscyBhIHJhbmdlIHdpdGggY29waWVzIG9mIHRoZSBzYW1lIHZhbHVlLiAgRm9yIGNoYXIKKyAgICogIHR5cGVzIGZpbGxpbmcgY29udGlndW91cyBhcmVhcyBvZiBtZW1vcnksIHRoaXMgYmVjb21lcyBhbiBpbmxpbmUgY2FsbAorICAgKiAgdG8gQGMgbWVtc2V0IG9yIEBjIHdtZW1zZXQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIGZpbGwoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIHN0ZDo6X19maWxsX2Eoc3RkOjpfX25pdGVyX2Jhc2UoX19maXJzdCksIHN0ZDo6X19uaXRlcl9iYXNlKF9fbGFzdCksCisJCSAgICBfX3ZhbHVlKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZQorICAgIF9fZ251X2N4eDo6X19lbmFibGVfaWY8IV9faXNfc2NhbGFyPF9UcD46Ol9fdmFsdWUsIF9PdXRwdXRJdGVyYXRvcj46Ol9fdHlwZQorICAgIF9fZmlsbF9uX2EoX091dHB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlKQorICAgIHsKKyAgICAgIGZvciAoOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQorCSpfX2ZpcnN0ID0gX192YWx1ZTsKKyAgICAgIHJldHVybiBfX2ZpcnN0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lCisgICAgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX3NjYWxhcjxfVHA+OjpfX3ZhbHVlLCBfT3V0cHV0SXRlcmF0b3I+OjpfX3R5cGUKKyAgICBfX2ZpbGxfbl9hKF9PdXRwdXRJdGVyYXRvciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkKKyAgICB7CisgICAgICBjb25zdCBfVHAgX190bXAgPSBfX3ZhbHVlOworICAgICAgZm9yICg7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCisJKl9fZmlyc3QgPSBfX3RtcDsKKyAgICAgIHJldHVybiBfX2ZpcnN0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZQorICAgIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19ieXRlPF9UcD46Ol9fdmFsdWUsIF9UcCo+OjpfX3R5cGUKKyAgICBfX2ZpbGxfbl9hKF9UcCogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9fYykKKyAgICB7CisgICAgICBzdGQ6Ol9fZmlsbF9hKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CisgICAgICByZXR1cm4gX19maXJzdCArIF9fbjsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgRmlsbHMgdGhlIHJhbmdlIFtmaXJzdCxmaXJzdCtuKSB3aXRoIGNvcGllcyBvZiB2YWx1ZS4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QgIEFuIG91dHB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbiAgICAgIFRoZSBjb3VudCBvZiBjb3BpZXMgdG8gcGVyZm9ybS4KKyAgICogIEBwYXJhbSAgdmFsdWUgIEEgcmVmZXJlbmNlLXRvLWNvbnN0IG9mIGFyYml0cmFyeSB0eXBlLgorICAgKiAgQHJldHVybiAgIFRoZSBpdGVyYXRvciBhdCBmaXJzdCtuLgorICAgKgorICAgKiAgVGhpcyBmdW5jdGlvbiBmaWxscyBhIHJhbmdlIHdpdGggY29waWVzIG9mIHRoZSBzYW1lIHZhbHVlLiAgRm9yIGNoYXIKKyAgICogIHR5cGVzIGZpbGxpbmcgY29udGlndW91cyBhcmVhcyBvZiBtZW1vcnksIHRoaXMgYmVjb21lcyBhbiBpbmxpbmUgY2FsbAorICAgKiAgdG8gQGMgbWVtc2V0IG9yIEAgd21lbXNldC4KKyAgICoKKyAgICogIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICogIERSIDg2NS4gTW9yZSBhbGdvcml0aG1zIHRoYXQgdGhyb3cgYXdheSBpbmZvcm1hdGlvbgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT0ksIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9PSQorICAgIGZpbGxfbihfT0kgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PSSwgX1RwPikKKworICAgICAgcmV0dXJuIF9PSShzdGQ6Ol9fZmlsbF9uX2Eoc3RkOjpfX25pdGVyX2Jhc2UoX19maXJzdCksIF9fbiwgX192YWx1ZSkpOworICAgIH0KKworICB0ZW1wbGF0ZTxib29sIF9Cb29sVHlwZT4KKyAgICBzdHJ1Y3QgX19lcXVhbAorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSTEsIHR5cGVuYW1lIF9JSTI+CisgICAgICAgIHN0YXRpYyBib29sCisgICAgICAgIGVxdWFsKF9JSTEgX19maXJzdDEsIF9JSTEgX19sYXN0MSwgX0lJMiBfX2ZpcnN0MikKKyAgICAgICAgeworCSAgZm9yICg7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCisJICAgIGlmICghKCpfX2ZpcnN0MSA9PSAqX19maXJzdDIpKQorCSAgICAgIHJldHVybiBmYWxzZTsKKwkgIHJldHVybiB0cnVlOworCX0KKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19lcXVhbDx0cnVlPgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RhdGljIGJvb2wKKyAgICAgICAgZXF1YWwoY29uc3QgX1RwKiBfX2ZpcnN0MSwgY29uc3QgX1RwKiBfX2xhc3QxLCBjb25zdCBfVHAqIF9fZmlyc3QyKQorICAgICAgICB7CisJICByZXR1cm4gIV9fYnVpbHRpbl9tZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBzaXplb2YoX1RwKQorCQkJCSAgICogKF9fbGFzdDEgLSBfX2ZpcnN0MSkpOworCX0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSTEsIHR5cGVuYW1lIF9JSTI+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX2VxdWFsX2F1eChfSUkxIF9fZmlyc3QxLCBfSUkxIF9fbGFzdDEsIF9JSTIgX19maXJzdDIpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lJMT46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUkyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMjsKKyAgICAgIGNvbnN0IGJvb2wgX19zaW1wbGUgPSAoX19pc19pbnRlZ2VyPF9WYWx1ZVR5cGUxPjo6X192YWx1ZQorCSAgICAgICAgICAgICAgICAgICAgICYmIF9faXNfcG9pbnRlcjxfSUkxPjo6X192YWx1ZQorCSAgICAgICAgICAgICAgICAgICAgICYmIF9faXNfcG9pbnRlcjxfSUkyPjo6X192YWx1ZQorCQkJICAgICAmJiBfX2FyZV9zYW1lPF9WYWx1ZVR5cGUxLCBfVmFsdWVUeXBlMj46Ol9fdmFsdWUpOworCisgICAgICByZXR1cm4gc3RkOjpfX2VxdWFsPF9fc2ltcGxlPjo6ZXF1YWwoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWU+CisgICAgc3RydWN0IF9fbGNfcmFpCisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJMSwgdHlwZW5hbWUgX0lJMj4KKyAgICAgICAgc3RhdGljIF9JSTEKKyAgICAgICAgX19uZXdsYXN0MShfSUkxLCBfSUkxIF9fbGFzdDEsIF9JSTIsIF9JSTIpCisgICAgICAgIHsgcmV0dXJuIF9fbGFzdDE7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJPgorICAgICAgICBzdGF0aWMgYm9vbAorICAgICAgICBfX2NuZDIoX0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpCisgICAgICAgIHsgcmV0dXJuIF9fZmlyc3QgIT0gX19sYXN0OyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fbGNfcmFpPHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZz4KKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJMSwgdHlwZW5hbWUgX1JBSTI+CisgICAgICAgIHN0YXRpYyBfUkFJMQorICAgICAgICBfX25ld2xhc3QxKF9SQUkxIF9fZmlyc3QxLCBfUkFJMSBfX2xhc3QxLAorCQkgICBfUkFJMiBfX2ZpcnN0MiwgX1JBSTIgX19sYXN0MikKKyAgICAgICAgeworCSAgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SQUkxPjo6ZGlmZmVyZW5jZV90eXBlCisJICAgIF9fZGlmZjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CisJICBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JBSTI+OjpkaWZmZXJlbmNlX3R5cGUKKwkgICAgX19kaWZmMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKKwkgIHJldHVybiBfX2RpZmYyIDwgX19kaWZmMSA/IF9fZmlyc3QxICsgX19kaWZmMiA6IF9fbGFzdDE7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJPgorICAgICAgICBzdGF0aWMgYm9vbAorICAgICAgICBfX2NuZDIoX1JBSSwgX1JBSSkKKyAgICAgICAgeyByZXR1cm4gdHJ1ZTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8Ym9vbCBfQm9vbFR5cGU+CisgICAgc3RydWN0IF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUKKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUkxLCB0eXBlbmFtZSBfSUkyPgorICAgICAgICBzdGF0aWMgYm9vbCBfX2xjKF9JSTEsIF9JSTEsIF9JSTIsIF9JSTIpOworICAgIH07CisKKyAgdGVtcGxhdGU8Ym9vbCBfQm9vbFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJMSwgdHlwZW5hbWUgX0lJMj4KKyAgICAgIGJvb2wKKyAgICAgIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmU8X0Jvb2xUeXBlPjo6CisgICAgICBfX2xjKF9JSTEgX19maXJzdDEsIF9JSTEgX19sYXN0MSwgX0lJMiBfX2ZpcnN0MiwgX0lJMiBfX2xhc3QyKQorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JSTE+OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdvcnkxOworCXR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JSTI+OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdvcnkyOworCXR5cGVkZWYgc3RkOjpfX2xjX3JhaTxfQ2F0ZWdvcnkxLCBfQ2F0ZWdvcnkyPiAJX19yYWlfdHlwZTsKKwkKKwlfX2xhc3QxID0gX19yYWlfdHlwZTo6X19uZXdsYXN0MShfX2ZpcnN0MSwgX19sYXN0MSwKKwkJCQkJIF9fZmlyc3QyLCBfX2xhc3QyKTsKKwlmb3IgKDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX3JhaV90eXBlOjpfX2NuZDIoX19maXJzdDIsIF9fbGFzdDIpOworCSAgICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKKwkgIHsKKwkgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKKwkgICAgICByZXR1cm4gdHJ1ZTsKKwkgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKKwkgICAgICByZXR1cm4gZmFsc2U7CisJICB9CisJcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmU8dHJ1ZT4KKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICAgICAgc3RhdGljIGJvb2wKKyAgICAgICAgX19sYyhjb25zdCBfVHAqIF9fZmlyc3QxLCBjb25zdCBfVHAqIF9fbGFzdDEsCisJICAgICBjb25zdCBfVXAqIF9fZmlyc3QyLCBjb25zdCBfVXAqIF9fbGFzdDIpCisJeworCSAgY29uc3Qgc2l6ZV90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsKKwkgIGNvbnN0IHNpemVfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CisJICBjb25zdCBpbnQgX19yZXN1bHQgPSBfX2J1aWx0aW5fbWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0MiwKKwkJCQkJCXN0ZDo6bWluKF9fbGVuMSwgX19sZW4yKSk7CisJICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0IDwgMCA6IF9fbGVuMSA8IF9fbGVuMjsKKwl9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUkxLCB0eXBlbmFtZSBfSUkyPgorICAgIGlubGluZSBib29sCisgICAgX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV9hdXgoX0lJMSBfX2ZpcnN0MSwgX0lJMSBfX2xhc3QxLAorCQkJCSAgX0lJMiBfX2ZpcnN0MiwgX0lJMiBfX2xhc3QyKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JSTE+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lJMj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTI7CisgICAgICBjb25zdCBib29sIF9fc2ltcGxlID0KKwkoX19pc19ieXRlPF9WYWx1ZVR5cGUxPjo6X192YWx1ZSAmJiBfX2lzX2J5dGU8X1ZhbHVlVHlwZTI+OjpfX3ZhbHVlCisJICYmICFfX2dudV9jeHg6Ol9fbnVtZXJpY190cmFpdHM8X1ZhbHVlVHlwZTE+OjpfX2lzX3NpZ25lZAorCSAmJiAhX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPF9WYWx1ZVR5cGUyPjo6X19pc19zaWduZWQKKwkgJiYgX19pc19wb2ludGVyPF9JSTE+OjpfX3ZhbHVlCisJICYmIF9faXNfcG9pbnRlcjxfSUkyPjo6X192YWx1ZSk7CisKKyAgICAgIHJldHVybiBzdGQ6Ol9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmU8X19zaW1wbGU+OjpfX2xjKF9fZmlyc3QxLCBfX2xhc3QxLAorCQkJCQkJCSAgICBfX2ZpcnN0MiwgX19sYXN0Mik7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIEZpbmRzIHRoZSBmaXJzdCBwb3NpdGlvbiBpbiB3aGljaCBAYSB2YWwgY291bGQgYmUgaW5zZXJ0ZWQKKyAgICogICAgICAgICB3aXRob3V0IGNoYW5naW5nIHRoZSBvcmRlcmluZy4KKyAgICogIEBwYXJhbSAgZmlyc3QgICBBbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdCAgICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICB2YWwgICAgIFRoZSBzZWFyY2ggdGVybS4KKyAgICogIEByZXR1cm4gICAgICAgICBBbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZmlyc3QgZWxlbWVudCA8ZW0+bm90IGxlc3MKKyAgICogICAgICAgICAgICAgICAgICB0aGFuPC9lbT4gQGEgdmFsLCBvciBlbmQoKSBpZiBldmVyeSBlbGVtZW50IGlzIGxlc3MgdGhhbiAKKyAgICogICAgICAgICAgICAgICAgICBAYSB2YWwuCisgICAqICBAaW5ncm91cCBiaW5hcnlfc2VhcmNoX2FsZ29yaXRobXMKKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgorICAgIF9Gb3J3YXJkSXRlcmF0b3IKKyAgICBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQljb25zdCBfVHAmIF9fdmFsKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKwlfRGlzdGFuY2VUeXBlOworCisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbk9wQ29uY2VwdDxfVmFsdWVUeXBlLCBfVHA+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3BhcnRpdGlvbmVkX2xvd2VyKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOworCisgICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOworICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkZGxlOworCisgICAgICB3aGlsZSAoX19sZW4gPiAwKQorCXsKKwkgIF9faGFsZiA9IF9fbGVuID4+IDE7CisJICBfX21pZGRsZSA9IF9fZmlyc3Q7CisJICBzdGQ6OmFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CisJICBpZiAoKl9fbWlkZGxlIDwgX192YWwpCisJICAgIHsKKwkgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CisJICAgICAgKytfX2ZpcnN0OworCSAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOworCSAgICB9CisJICBlbHNlCisJICAgIF9fbGVuID0gX19oYWxmOworCX0KKyAgICAgIHJldHVybiBfX2ZpcnN0OworICAgIH0KKworICAvLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIHNvcnQgcm91dGluZXMgYW5kIGZvciByYW5kb20udGNjLgorICAvLyAgUHJlY29uZGl0aW9uOiBfX24gPiAwLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KKyAgICBpbmxpbmUgX1NpemUKKyAgICBfX2xnKF9TaXplIF9fbikKKyAgICB7CisgICAgICBfU2l6ZSBfX2s7CisgICAgICBmb3IgKF9fayA9IDA7IF9fbiAhPSAwOyBfX24gPj49IDEpCisJKytfX2s7CisgICAgICByZXR1cm4gX19rIC0gMTsKKyAgICB9CisKKyAgaW5saW5lIGludAorICBfX2xnKGludCBfX24pCisgIHsgcmV0dXJuIHNpemVvZihpbnQpICogX19DSEFSX0JJVF9fICAtIDEgLSBfX2J1aWx0aW5fY2x6KF9fbik7IH0KKworICBpbmxpbmUgbG9uZworICBfX2xnKGxvbmcgX19uKQorICB7IHJldHVybiBzaXplb2YobG9uZykgKiBfX0NIQVJfQklUX18gLSAxIC0gX19idWlsdGluX2NsemwoX19uKTsgfQorCisgIGlubGluZSBsb25nIGxvbmcKKyAgX19sZyhsb25nIGxvbmcgX19uKQorICB7IHJldHVybiBzaXplb2YobG9uZyBsb25nKSAqIF9fQ0hBUl9CSVRfXyAtIDEgLSBfX2J1aWx0aW5fY2x6bGwoX19uKTsgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKK19HTElCQ1hYX0JFR0lOX05FU1RFRF9OQU1FU1BBQ0Uoc3RkLCBfR0xJQkNYWF9TVERfUCkKKworICAvKioKKyAgICogIEBicmllZiBUZXN0cyBhIHJhbmdlIGZvciBlbGVtZW50LXdpc2UgZXF1YWxpdHkuCisgICAqICBAaW5ncm91cCBub25fbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdDEgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0MSAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBmaXJzdDIgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHJldHVybiAgIEEgYm9vbGVhbiB0cnVlIG9yIGZhbHNlLgorICAgKgorICAgKiAgVGhpcyBjb21wYXJlcyB0aGUgZWxlbWVudHMgb2YgdHdvIHJhbmdlcyB1c2luZyBAYyA9PSBhbmQgcmV0dXJucyB0cnVlIG9yCisgICAqICBmYWxzZSBkZXBlbmRpbmcgb24gd2hldGhlciBhbGwgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdGhlCisgICAqICByYW5nZXMgYXJlIGVxdWFsLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUkxLCB0eXBlbmFtZSBfSUkyPgorICAgIGlubGluZSBib29sCisgICAgZXF1YWwoX0lJMSBfX2ZpcnN0MSwgX0lJMSBfX2xhc3QxLCBfSUkyIF9fZmlyc3QyKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JSTE+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSUkyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRXF1YWxPcENvbmNlcHQ8CisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUkxPjo6dmFsdWVfdHlwZSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JSTI+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MSwgX19sYXN0MSk7CisKKyAgICAgIHJldHVybiBzdGQ6Ol9fZXF1YWxfYXV4KHN0ZDo6X19uaXRlcl9iYXNlKF9fZmlyc3QxKSwKKwkJCSAgICAgIHN0ZDo6X19uaXRlcl9iYXNlKF9fbGFzdDEpLAorCQkJICAgICAgc3RkOjpfX25pdGVyX2Jhc2UoX19maXJzdDIpKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgVGVzdHMgYSByYW5nZSBmb3IgZWxlbWVudC13aXNlIGVxdWFsaXR5LgorICAgKiAgQGluZ3JvdXAgbm9uX211dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgZmlyc3QxICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgbGFzdDEgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgZmlyc3QyICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSBiaW5hcnlfcHJlZCBBIGJpbmFyeSBwcmVkaWNhdGUgQGxpbmsgZnVuY3RvcnMKKyAgICogICAgICAgICAgICAgICAgICBmdW5jdG9yQGVuZGxpbmsuCisgICAqICBAcmV0dXJuICAgICAgICAgQSBib29sZWFuIHRydWUgb3IgZmFsc2UuCisgICAqCisgICAqICBUaGlzIGNvbXBhcmVzIHRoZSBlbGVtZW50cyBvZiB0d28gcmFuZ2VzIHVzaW5nIHRoZSBiaW5hcnlfcHJlZAorICAgKiAgcGFyYW1ldGVyLCBhbmQgcmV0dXJucyB0cnVlIG9yCisgICAqICBmYWxzZSBkZXBlbmRpbmcgb24gd2hldGhlciBhbGwgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdGhlCisgICAqICByYW5nZXMgYXJlIGVxdWFsLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgorICAgIGlubGluZSBib29sCisgICAgZXF1YWwoX0lJdGVyMSBfX2ZpcnN0MSwgX0lJdGVyMSBfX2xhc3QxLAorCSAgX0lJdGVyMiBfX2ZpcnN0MiwgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JSXRlcjE+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSUl0ZXIyPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MSwgX19sYXN0MSk7CisKKyAgICAgIGZvciAoOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQorCWlmICghYm9vbChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkpCisJICByZXR1cm4gZmFsc2U7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgUGVyZm9ybXMgQGIgZGljdGlvbmFyeSBjb21wYXJpc29uIG9uIHJhbmdlcy4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdDEgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0MSAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBmaXJzdDIgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0MiAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHJldHVybiAgIEEgYm9vbGVhbiB0cnVlIG9yIGZhbHNlLgorICAgKgorICAgKiAgPGVtPlJldHVybnMgdHJ1ZSBpZiB0aGUgc2VxdWVuY2Ugb2YgZWxlbWVudHMgZGVmaW5lZCBieSB0aGUgcmFuZ2UKKyAgICogIFtmaXJzdDEsbGFzdDEpIGlzIGxleGljb2dyYXBoaWNhbGx5IGxlc3MgdGhhbiB0aGUgc2VxdWVuY2Ugb2YgZWxlbWVudHMKKyAgICogIGRlZmluZWQgYnkgdGhlIHJhbmdlIFtmaXJzdDIsbGFzdDIpLiAgUmV0dXJucyBmYWxzZSBvdGhlcndpc2UuPC9lbT4KKyAgICogIChRdW90ZWQgZnJvbSBbMjUuMy44XS8xLikgIElmIHRoZSBpdGVyYXRvcnMgYXJlIGFsbCBjaGFyYWN0ZXIgcG9pbnRlcnMsCisgICAqICB0aGVuIHRoaXMgaXMgYW4gaW5saW5lIGNhbGwgdG8gQGMgbWVtY21wLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUkxLCB0eXBlbmFtZSBfSUkyPgorICAgIGlubGluZSBib29sCisgICAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lJMSBfX2ZpcnN0MSwgX0lJMSBfX2xhc3QxLAorCQkJICAgIF9JSTIgX19maXJzdDIsIF9JSTIgX19sYXN0MikKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lJMT46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUkyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMjsKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lJMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JSTI+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbk9wQ29uY2VwdDxfVmFsdWVUeXBlMSwgX1ZhbHVlVHlwZTI+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbk9wQ29uY2VwdDxfVmFsdWVUeXBlMiwgX1ZhbHVlVHlwZTE+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QxLCBfX2xhc3QxKTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MiwgX19sYXN0Mik7CisKKyAgICAgIHJldHVybiBzdGQ6Ol9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfYXV4KHN0ZDo6X19uaXRlcl9iYXNlKF9fZmlyc3QxKSwKKwkJCQkJCXN0ZDo6X19uaXRlcl9iYXNlKF9fbGFzdDEpLAorCQkJCQkJc3RkOjpfX25pdGVyX2Jhc2UoX19maXJzdDIpLAorCQkJCQkJc3RkOjpfX25pdGVyX2Jhc2UoX19sYXN0MikpOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBQZXJmb3JtcyBAYiBkaWN0aW9uYXJ5IGNvbXBhcmlzb24gb24gcmFuZ2VzLgorICAgKiAgQGluZ3JvdXAgc29ydGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGZpcnN0MSAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QxICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGZpcnN0MiAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QyICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGNvbXAgIEEgQGxpbmsgY29tcGFyaXNvbl9mdW5jdG9ycyBjb21wYXJpc29uIGZ1bmN0b3JAZW5kbGluay4KKyAgICogIEByZXR1cm4gICBBIGJvb2xlYW4gdHJ1ZSBvciBmYWxzZS4KKyAgICoKKyAgICogIFRoZSBzYW1lIGFzIHRoZSBmb3VyLXBhcmFtZXRlciBAYyBsZXhpY29ncmFwaGljYWxfY29tcGFyZSwgYnV0IHVzZXMgdGhlCisgICAqICBjb21wIHBhcmFtZXRlciBpbnN0ZWFkIG9mIEBjIDwuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSTEsIHR5cGVuYW1lIF9JSTIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGJvb2wKKyAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSUkxIF9fZmlyc3QxLCBfSUkxIF9fbGFzdDEsCisJCQkgICAgX0lJMiBfX2ZpcnN0MiwgX0lJMiBfX2xhc3QyLCBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lJMT46Oml0ZXJhdG9yX2NhdGVnb3J5IF9DYXRlZ29yeTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUkyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0NhdGVnb3J5MjsKKyAgICAgIHR5cGVkZWYgc3RkOjpfX2xjX3JhaTxfQ2F0ZWdvcnkxLCBfQ2F0ZWdvcnkyPiAJX19yYWlfdHlwZTsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lJMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JSTI+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QxLCBfX2xhc3QxKTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MiwgX19sYXN0Mik7CisKKyAgICAgIF9fbGFzdDEgPSBfX3JhaV90eXBlOjpfX25ld2xhc3QxKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CisgICAgICBmb3IgKDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX3JhaV90eXBlOjpfX2NuZDIoX19maXJzdDIsIF9fbGFzdDIpOworCSAgICsrX19maXJzdDEsICsrX19maXJzdDIpCisJeworCSAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCisJICAgIHJldHVybiB0cnVlOworCSAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCisJICAgIHJldHVybiBmYWxzZTsKKwl9CisgICAgICByZXR1cm4gX19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBGaW5kcyB0aGUgcGxhY2VzIGluIHJhbmdlcyB3aGljaCBkb24ndCBtYXRjaC4KKyAgICogIEBpbmdyb3VwIG5vbl9tdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIGZpcnN0MSAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QxICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGZpcnN0MiAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcmV0dXJuICAgQSBwYWlyIG9mIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUgZmlyc3QgbWlzbWF0Y2guCisgICAqCisgICAqICBUaGlzIGNvbXBhcmVzIHRoZSBlbGVtZW50cyBvZiB0d28gcmFuZ2VzIHVzaW5nIEBjID09IGFuZCByZXR1cm5zIGEgcGFpcgorICAgKiAgb2YgaXRlcmF0b3JzLiAgVGhlIGZpcnN0IGl0ZXJhdG9yIHBvaW50cyBpbnRvIHRoZSBmaXJzdCByYW5nZSwgdGhlCisgICAqICBzZWNvbmQgaXRlcmF0b3IgcG9pbnRzIGludG8gdGhlIHNlY29uZCByYW5nZSwgYW5kIHRoZSBlbGVtZW50cyBwb2ludGVkCisgICAqICB0byBieSB0aGUgaXRlcmF0b3JzIGFyZSBub3QgZXF1YWwuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyPgorICAgIHBhaXI8X0lucHV0SXRlcmF0b3IxLCBfSW5wdXRJdGVyYXRvcjI+CisgICAgbWlzbWF0Y2goX0lucHV0SXRlcmF0b3IxIF9fZmlyc3QxLCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKKwkgICAgIF9JbnB1dEl0ZXJhdG9yMiBfX2ZpcnN0MikKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcjE+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcjI+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9FcXVhbE9wQ29uY2VwdDwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yMT46OnZhbHVlX3R5cGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcjI+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MSwgX19sYXN0MSk7CisKKyAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICpfX2ZpcnN0MSA9PSAqX19maXJzdDIpCisgICAgICAgIHsKKwkgICsrX19maXJzdDE7CisJICArK19fZmlyc3QyOworICAgICAgICB9CisgICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyYXRvcjEsIF9JbnB1dEl0ZXJhdG9yMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgRmluZHMgdGhlIHBsYWNlcyBpbiByYW5nZXMgd2hpY2ggZG9uJ3QgbWF0Y2guCisgICAqICBAaW5ncm91cCBub25fbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBmaXJzdDEgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0MSAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBmaXJzdDIgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtIGJpbmFyeV9wcmVkIEEgYmluYXJ5IHByZWRpY2F0ZSBAbGluayBmdW5jdG9ycworICAgKiAgICAgICAgIGZ1bmN0b3JAZW5kbGluay4KKyAgICogIEByZXR1cm4gICBBIHBhaXIgb2YgaXRlcmF0b3JzIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBtaXNtYXRjaC4KKyAgICoKKyAgICogIFRoaXMgY29tcGFyZXMgdGhlIGVsZW1lbnRzIG9mIHR3byByYW5nZXMgdXNpbmcgdGhlIGJpbmFyeV9wcmVkCisgICAqICBwYXJhbWV0ZXIsIGFuZCByZXR1cm5zIGEgcGFpcgorICAgKiAgb2YgaXRlcmF0b3JzLiAgVGhlIGZpcnN0IGl0ZXJhdG9yIHBvaW50cyBpbnRvIHRoZSBmaXJzdCByYW5nZSwgdGhlCisgICAqICBzZWNvbmQgaXRlcmF0b3IgcG9pbnRzIGludG8gdGhlIHNlY29uZCByYW5nZSwgYW5kIHRoZSBlbGVtZW50cyBwb2ludGVkCisgICAqICB0byBieSB0aGUgaXRlcmF0b3JzIGFyZSBub3QgZXF1YWwuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLAorCSAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgcGFpcjxfSW5wdXRJdGVyYXRvcjEsIF9JbnB1dEl0ZXJhdG9yMj4KKyAgICBtaXNtYXRjaChfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yMSBfX2xhc3QxLAorCSAgICAgX0lucHV0SXRlcmF0b3IyIF9fZmlyc3QyLCBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IyPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MSwgX19sYXN0MSk7CisKKyAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIGJvb2woX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpKQorICAgICAgICB7CisJICArK19fZmlyc3QxOworCSAgKytfX2ZpcnN0MjsKKyAgICAgICAgfQorICAgICAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcmF0b3IxLCBfSW5wdXRJdGVyYXRvcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CisgICAgfQorCitfR0xJQkNYWF9FTkRfTkVTVEVEX05BTUVTUEFDRQorCisvLyBOQjogVGhpcyBmaWxlIGlzIGluY2x1ZGVkIHdpdGhpbiBtYW55IG90aGVyIEMrKyBpbmNsdWRlcywgYXMgYSB3YXkKKy8vIG9mIGdldHRpbmcgdGhlIGJhc2UgYWxnb3JpdGhtcy4gU28sIG1ha2Ugc3VyZSB0aGF0IHBhcmFsbGVsIGJpdHMKKy8vIGNvbWUgaW4gdG9vIGlmIHJlcXVlc3RlZC4gCisjaWZkZWYgX0dMSUJDWFhfUEFSQUxMRUwKKyMgaW5jbHVkZSA8cGFyYWxsZWwvYWxnb2Jhc2UuaD4KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfYnZlY3Rvci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF9idmVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI4MTc2MQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfYnZlY3Rvci5oCkBAIC0wLDAgKzEsMTA1MSBAQAorLy8gdmVjdG9yPGJvb2w+IHNwZWNpYWxpemF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OQorICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIHN0bF9idmVjdG9yLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfU1RMX0JWRUNUT1JfSAorI2RlZmluZSBfU1RMX0JWRUNUT1JfSCAxCisKKyNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgorCitfR0xJQkNYWF9CRUdJTl9ORVNURURfTkFNRVNQQUNFKHN0ZCwgX0dMSUJDWFhfU1REX0QpCisKKyAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9CaXRfdHlwZTsKKyAgZW51bSB7IF9TX3dvcmRfYml0ID0gaW50KF9fQ0hBUl9CSVRfXyAqIHNpemVvZihfQml0X3R5cGUpKSB9OworCisgIHN0cnVjdCBfQml0X3JlZmVyZW5jZQorICB7CisgICAgX0JpdF90eXBlICogX01fcDsKKyAgICBfQml0X3R5cGUgX01fbWFzazsKKworICAgIF9CaXRfcmVmZXJlbmNlKF9CaXRfdHlwZSAqIF9feCwgX0JpdF90eXBlIF9feSkKKyAgICA6IF9NX3AoX194KSwgX01fbWFzayhfX3kpIHsgfQorCisgICAgX0JpdF9yZWZlcmVuY2UoKSA6IF9NX3AoMCksIF9NX21hc2soMCkgeyB9CisKKyAgICBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICB7IHJldHVybiAhISgqX01fcCAmIF9NX21hc2spOyB9CisKKyAgICBfQml0X3JlZmVyZW5jZSYKKyAgICBvcGVyYXRvcj0oYm9vbCBfX3gpCisgICAgeworICAgICAgaWYgKF9feCkKKwkqX01fcCB8PSBfTV9tYXNrOworICAgICAgZWxzZQorCSpfTV9wICY9IH5fTV9tYXNrOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIF9CaXRfcmVmZXJlbmNlJgorICAgIG9wZXJhdG9yPShjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KQorICAgIHsgcmV0dXJuICp0aGlzID0gYm9vbChfX3gpOyB9CisKKyAgICBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25zdAorICAgIHsgcmV0dXJuIGJvb2woKnRoaXMpID09IGJvb2woX194KTsgfQorCisgICAgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25zdAorICAgIHsgcmV0dXJuICFib29sKCp0aGlzKSAmJiBib29sKF9feCk7IH0KKworICAgIHZvaWQKKyAgICBmbGlwKCkKKyAgICB7ICpfTV9wIF49IF9NX21hc2s7IH0KKyAgfTsKKworICBzdHJ1Y3QgX0JpdF9pdGVyYXRvcl9iYXNlCisgIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpyYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgYm9vbD4KKyAgeworICAgIF9CaXRfdHlwZSAqIF9NX3A7CisgICAgdW5zaWduZWQgaW50IF9NX29mZnNldDsKKworICAgIF9CaXRfaXRlcmF0b3JfYmFzZShfQml0X3R5cGUgKiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCisgICAgOiBfTV9wKF9feCksIF9NX29mZnNldChfX3kpIHsgfQorCisgICAgdm9pZAorICAgIF9NX2J1bXBfdXAoKQorICAgIHsKKyAgICAgIGlmIChfTV9vZmZzZXQrKyA9PSBpbnQoX1Nfd29yZF9iaXQpIC0gMSkKKwl7CisJICBfTV9vZmZzZXQgPSAwOworCSAgKytfTV9wOworCX0KKyAgICB9CisKKyAgICB2b2lkCisgICAgX01fYnVtcF9kb3duKCkKKyAgICB7CisgICAgICBpZiAoX01fb2Zmc2V0LS0gPT0gMCkKKwl7CisJICBfTV9vZmZzZXQgPSBpbnQoX1Nfd29yZF9iaXQpIC0gMTsKKwkgIC0tX01fcDsKKwl9CisgICAgfQorCisgICAgdm9pZAorICAgIF9NX2luY3IocHRyZGlmZl90IF9faSkKKyAgICB7CisgICAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19pICsgX01fb2Zmc2V0OworICAgICAgX01fcCArPSBfX24gLyBpbnQoX1Nfd29yZF9iaXQpOworICAgICAgX19uID0gX19uICUgaW50KF9TX3dvcmRfYml0KTsKKyAgICAgIGlmIChfX24gPCAwKQorCXsKKwkgIF9fbiArPSBpbnQoX1Nfd29yZF9iaXQpOworCSAgLS1fTV9wOworCX0KKyAgICAgIF9NX29mZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oX19uKTsKKyAgICB9CisKKyAgICBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QKKyAgICB7IHJldHVybiBfTV9wID09IF9faS5fTV9wICYmIF9NX29mZnNldCA9PSBfX2kuX01fb2Zmc2V0OyB9CisKKyAgICBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdAorICAgIHsKKyAgICAgIHJldHVybiBfTV9wIDwgX19pLl9NX3AKKwkgICAgIHx8IChfTV9wID09IF9faS5fTV9wICYmIF9NX29mZnNldCA8IF9faS5fTV9vZmZzZXQpOworICAgIH0KKworICAgIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdAorICAgIHsgcmV0dXJuICEoKnRoaXMgPT0gX19pKTsgfQorCisgICAgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QKKyAgICB7IHJldHVybiBfX2kgPCAqdGhpczsgfQorCisgICAgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0CisgICAgeyByZXR1cm4gIShfX2kgPCAqdGhpcyk7IH0KKworICAgIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdAorICAgIHsgcmV0dXJuICEoKnRoaXMgPCBfX2kpOyB9CisgIH07CisKKyAgaW5saW5lIHB0cmRpZmZfdAorICBvcGVyYXRvci0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX3gsIGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX195KQorICB7CisgICAgcmV0dXJuIChpbnQoX1Nfd29yZF9iaXQpICogKF9feC5fTV9wIC0gX195Ll9NX3ApCisJICAgICsgX194Ll9NX29mZnNldCAtIF9feS5fTV9vZmZzZXQpOworICB9CisKKyAgc3RydWN0IF9CaXRfaXRlcmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlCisgIHsKKyAgICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlICByZWZlcmVuY2U7CisgICAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSogcG9pbnRlcjsKKyAgICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgICBpdGVyYXRvcjsKKworICAgIF9CaXRfaXRlcmF0b3IoKSA6IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7IH0KKworICAgIF9CaXRfaXRlcmF0b3IoX0JpdF90eXBlICogX194LCB1bnNpZ25lZCBpbnQgX195KQorICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feCwgX195KSB7IH0KKworICAgIHJlZmVyZW5jZQorICAgIG9wZXJhdG9yKigpIGNvbnN0CisgICAgeyByZXR1cm4gcmVmZXJlbmNlKF9NX3AsIDFVTCA8PCBfTV9vZmZzZXQpOyB9CisKKyAgICBpdGVyYXRvciYKKyAgICBvcGVyYXRvcisrKCkKKyAgICB7CisgICAgICBfTV9idW1wX3VwKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgaXRlcmF0b3IKKyAgICBvcGVyYXRvcisrKGludCkKKyAgICB7CisgICAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOworICAgICAgX01fYnVtcF91cCgpOworICAgICAgcmV0dXJuIF9fdG1wOworICAgIH0KKworICAgIGl0ZXJhdG9yJgorICAgIG9wZXJhdG9yLS0oKQorICAgIHsKKyAgICAgIF9NX2J1bXBfZG93bigpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGl0ZXJhdG9yCisgICAgb3BlcmF0b3ItLShpbnQpCisgICAgeworICAgICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKKyAgICAgIF9NX2J1bXBfZG93bigpOworICAgICAgcmV0dXJuIF9fdG1wOworICAgIH0KKworICAgIGl0ZXJhdG9yJgorICAgIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9faSkKKyAgICB7CisgICAgICBfTV9pbmNyKF9faSk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgaXRlcmF0b3ImCisgICAgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKQorICAgIHsKKyAgICAgICp0aGlzICs9IC1fX2k7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgaXRlcmF0b3IKKyAgICBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QKKyAgICB7CisgICAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOworICAgICAgcmV0dXJuIF9fdG1wICs9IF9faTsKKyAgICB9CisKKyAgICBpdGVyYXRvcgorICAgIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdAorICAgIHsKKyAgICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CisgICAgICByZXR1cm4gX190bXAgLT0gX19pOworICAgIH0KKworICAgIHJlZmVyZW5jZQorICAgIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QKKyAgICB7IHJldHVybiAqKCp0aGlzICsgX19pKTsgfQorICB9OworCisgIGlubGluZSBfQml0X2l0ZXJhdG9yCisgIG9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2l0ZXJhdG9yJiBfX3gpCisgIHsgcmV0dXJuIF9feCArIF9fbjsgfQorCisgIHN0cnVjdCBfQml0X2NvbnN0X2l0ZXJhdG9yIDogcHVibGljIF9CaXRfaXRlcmF0b3JfYmFzZQorICB7CisgICAgdHlwZWRlZiBib29sICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgdHlwZWRlZiBib29sICAgICAgICAgICAgICAgICBjb25zdF9yZWZlcmVuY2U7CisgICAgdHlwZWRlZiBjb25zdCBib29sKiAgICAgICAgICBwb2ludGVyOworICAgIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciAgY29uc3RfaXRlcmF0b3I7CisKKyAgICBfQml0X2NvbnN0X2l0ZXJhdG9yKCkgOiBfQml0X2l0ZXJhdG9yX2Jhc2UoMCwgMCkgeyB9CisKKyAgICBfQml0X2NvbnN0X2l0ZXJhdG9yKF9CaXRfdHlwZSAqIF9feCwgdW5zaWduZWQgaW50IF9feSkKKyAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3gsIF9feSkgeyB9CisKKyAgICBfQml0X2NvbnN0X2l0ZXJhdG9yKGNvbnN0IF9CaXRfaXRlcmF0b3ImIF9feCkKKyAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3guX01fcCwgX194Ll9NX29mZnNldCkgeyB9CisKKyAgICBjb25zdF9yZWZlcmVuY2UKKyAgICBvcGVyYXRvciooKSBjb25zdAorICAgIHsgcmV0dXJuIF9CaXRfcmVmZXJlbmNlKF9NX3AsIDFVTCA8PCBfTV9vZmZzZXQpOyB9CisKKyAgICBjb25zdF9pdGVyYXRvciYKKyAgICBvcGVyYXRvcisrKCkKKyAgICB7CisgICAgICBfTV9idW1wX3VwKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgY29uc3RfaXRlcmF0b3IKKyAgICBvcGVyYXRvcisrKGludCkKKyAgICB7CisgICAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOworICAgICAgX01fYnVtcF91cCgpOworICAgICAgcmV0dXJuIF9fdG1wOworICAgIH0KKworICAgIGNvbnN0X2l0ZXJhdG9yJgorICAgIG9wZXJhdG9yLS0oKQorICAgIHsKKyAgICAgIF9NX2J1bXBfZG93bigpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgb3BlcmF0b3ItLShpbnQpCisgICAgeworICAgICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKKyAgICAgIF9NX2J1bXBfZG93bigpOworICAgICAgcmV0dXJuIF9fdG1wOworICAgIH0KKworICAgIGNvbnN0X2l0ZXJhdG9yJgorICAgIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9faSkKKyAgICB7CisgICAgICBfTV9pbmNyKF9faSk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgY29uc3RfaXRlcmF0b3ImCisgICAgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKQorICAgIHsKKyAgICAgICp0aGlzICs9IC1fX2k7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgY29uc3RfaXRlcmF0b3IgCisgICAgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0CisgICAgeworICAgICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKKyAgICAgIHJldHVybiBfX3RtcCArPSBfX2k7CisgICAgfQorCisgICAgY29uc3RfaXRlcmF0b3IKKyAgICBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QKKyAgICB7CisgICAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOworICAgICAgcmV0dXJuIF9fdG1wIC09IF9faTsKKyAgICB9CisKKyAgICBjb25zdF9yZWZlcmVuY2UKKyAgICBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0CisgICAgeyByZXR1cm4gKigqdGhpcyArIF9faSk7IH0KKyAgfTsKKworICBpbmxpbmUgX0JpdF9jb25zdF9pdGVyYXRvcgorICBvcGVyYXRvcisocHRyZGlmZl90IF9fbiwgY29uc3QgX0JpdF9jb25zdF9pdGVyYXRvciYgX194KQorICB7IHJldHVybiBfX3ggKyBfX247IH0KKworICBpbmxpbmUgdm9pZAorICBfX2ZpbGxfYnZlY3RvcihfQml0X2l0ZXJhdG9yIF9fZmlyc3QsIF9CaXRfaXRlcmF0b3IgX19sYXN0LCBib29sIF9feCkKKyAgeworICAgIGZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQorICAgICAgKl9fZmlyc3QgPSBfX3g7CisgIH0KKworICBpbmxpbmUgdm9pZAorICBmaWxsKF9CaXRfaXRlcmF0b3IgX19maXJzdCwgX0JpdF9pdGVyYXRvciBfX2xhc3QsIGNvbnN0IGJvb2wmIF9feCkKKyAgeworICAgIGlmIChfX2ZpcnN0Ll9NX3AgIT0gX19sYXN0Ll9NX3ApCisgICAgICB7CisJc3RkOjpmaWxsKF9fZmlyc3QuX01fcCArIDEsIF9fbGFzdC5fTV9wLCBfX3ggPyB+MCA6IDApOworCV9fZmlsbF9idmVjdG9yKF9fZmlyc3QsIF9CaXRfaXRlcmF0b3IoX19maXJzdC5fTV9wICsgMSwgMCksIF9feCk7CisJX19maWxsX2J2ZWN0b3IoX0JpdF9pdGVyYXRvcihfX2xhc3QuX01fcCwgMCksIF9fbGFzdCwgX194KTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBfX2ZpbGxfYnZlY3RvcihfX2ZpcnN0LCBfX2xhc3QsIF9feCk7CisgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgc3RydWN0IF9CdmVjdG9yX2Jhc2UKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPF9CaXRfdHlwZT46Om90aGVyCisgICAgICAgIF9CaXRfYWxsb2NfdHlwZTsKKyAgICAgIAorICAgICAgc3RydWN0IF9CdmVjdG9yX2ltcGwKKyAgICAgIDogcHVibGljIF9CaXRfYWxsb2NfdHlwZQorICAgICAgeworCV9CaXRfaXRlcmF0b3IgCV9NX3N0YXJ0OworCV9CaXRfaXRlcmF0b3IgCV9NX2ZpbmlzaDsKKwlfQml0X3R5cGUqIAlfTV9lbmRfb2Zfc3RvcmFnZTsKKworCV9CdmVjdG9yX2ltcGwoKQorCTogX0JpdF9hbGxvY190eXBlKCksIF9NX3N0YXJ0KCksIF9NX2ZpbmlzaCgpLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKQorCXsgfQorIAorCV9CdmVjdG9yX2ltcGwoY29uc3QgX0JpdF9hbGxvY190eXBlJiBfX2EpCisJOiBfQml0X2FsbG9jX3R5cGUoX19hKSwgX01fc3RhcnQoKSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCisJeyB9CisgICAgICB9OworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfQWxsb2MgYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIF9CaXRfYWxsb2NfdHlwZSYKKyAgICAgIF9NX2dldF9CaXRfYWxsb2NhdG9yKCkKKyAgICAgIHsgcmV0dXJuICpzdGF0aWNfY2FzdDxfQml0X2FsbG9jX3R5cGUqPigmdGhpcy0+X01faW1wbCk7IH0KKworICAgICAgY29uc3QgX0JpdF9hbGxvY190eXBlJgorICAgICAgX01fZ2V0X0JpdF9hbGxvY2F0b3IoKSBjb25zdAorICAgICAgeyByZXR1cm4gKnN0YXRpY19jYXN0PGNvbnN0IF9CaXRfYWxsb2NfdHlwZSo+KCZ0aGlzLT5fTV9pbXBsKTsgfQorCisgICAgICBhbGxvY2F0b3JfdHlwZQorICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0CisgICAgICB7IHJldHVybiBhbGxvY2F0b3JfdHlwZShfTV9nZXRfQml0X2FsbG9jYXRvcigpKTsgfQorCisgICAgICBfQnZlY3Rvcl9iYXNlKCkKKyAgICAgIDogX01faW1wbCgpIHsgfQorICAgICAgCisgICAgICBfQnZlY3Rvcl9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCisgICAgICA6IF9NX2ltcGwoX19hKSB7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBfQnZlY3Rvcl9iYXNlKF9CdmVjdG9yX2Jhc2UmJiBfX3gpCisgICAgICA6IF9NX2ltcGwoX194Ll9NX2dldF9CaXRfYWxsb2NhdG9yKCkpCisgICAgICB7CisJdGhpcy0+X01faW1wbC5fTV9zdGFydCA9IF9feC5fTV9pbXBsLl9NX3N0YXJ0OworCXRoaXMtPl9NX2ltcGwuX01fZmluaXNoID0gX194Ll9NX2ltcGwuX01fZmluaXNoOworCXRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UgPSBfX3guX01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZTsKKwlfX3guX01faW1wbC5fTV9zdGFydCA9IF9CaXRfaXRlcmF0b3IoKTsKKwlfX3guX01faW1wbC5fTV9maW5pc2ggPSBfQml0X2l0ZXJhdG9yKCk7CisJX194Ll9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UgPSAwOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIH5fQnZlY3Rvcl9iYXNlKCkKKyAgICAgIHsgdGhpcy0+X01fZGVhbGxvY2F0ZSgpOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfQnZlY3Rvcl9pbXBsIF9NX2ltcGw7CisKKyAgICAgIF9CaXRfdHlwZSoKKyAgICAgIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCisgICAgICB7IHJldHVybiBfTV9pbXBsLmFsbG9jYXRlKChfX24gKyBpbnQoX1Nfd29yZF9iaXQpIC0gMSkKKwkJCQkvIGludChfU193b3JkX2JpdCkpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RlYWxsb2NhdGUoKQorICAgICAgeworCWlmIChfTV9pbXBsLl9NX3N0YXJ0Ll9NX3ApCisJICBfTV9pbXBsLmRlYWxsb2NhdGUoX01faW1wbC5fTV9zdGFydC5fTV9wLAorCQkJICAgICBfTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlIC0gX01faW1wbC5fTV9zdGFydC5fTV9wKTsKKyAgICAgIH0KKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkVTVEVEX05BTUVTUEFDRQorCisvLyBEZWNsYXJlIGEgcGFydGlhbCBzcGVjaWFsaXphdGlvbiBvZiB2ZWN0b3I8VCwgQWxsb2M+LgorI2luY2x1ZGUgPGJpdHMvc3RsX3ZlY3Rvci5oPgorCitfR0xJQkNYWF9CRUdJTl9ORVNURURfTkFNRVNQQUNFKHN0ZCwgX0dMSUJDWFhfU1REX0QpCisKKyAgLyoqCisgICAqICBAYnJpZWYgIEEgc3BlY2lhbGl6YXRpb24gb2YgdmVjdG9yIGZvciBib29sZWFucyB3aGljaCBvZmZlcnMgZml4ZWQgdGltZQorICAgKiAgYWNjZXNzIHRvIGluZGl2aWR1YWwgZWxlbWVudHMgaW4gYW55IG9yZGVyLgorICAgKgorICAgKiAgTm90ZSB0aGF0IHZlY3Rvcjxib29sPiBkb2VzIG5vdCBhY3R1YWxseSBtZWV0IHRoZSByZXF1aXJlbWVudHMgZm9yIGJlaW5nCisgICAqICBhIGNvbnRhaW5lci4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgcmVmZXJlbmNlIGFuZCBwb2ludGVyIHR5cGVzIGFyZSBub3QKKyAgICogIHJlYWxseSByZWZlcmVuY2VzIGFuZCBwb2ludGVycyB0byBib29sLiAgU2VlIERSOTYgZm9yIGRldGFpbHMuICBAc2VlCisgICAqICB2ZWN0b3IgZm9yIGZ1bmN0aW9uIGRvY3VtZW50YXRpb24uCisgICAqCisgICAqICBAaW5ncm91cCBzZXF1ZW5jZXMKKyAgICoKKyAgICogIEluIHNvbWUgdGVybWlub2xvZ3kgYSAldmVjdG9yIGNhbiBiZSBkZXNjcmliZWQgYXMgYSBkeW5hbWljCisgICAqICBDLXN0eWxlIGFycmF5LCBpdCBvZmZlcnMgZmFzdCBhbmQgZWZmaWNpZW50IGFjY2VzcyB0byBpbmRpdmlkdWFsCisgICAqICBlbGVtZW50cyBpbiBhbnkgb3JkZXIgYW5kIHNhdmVzIHRoZSB1c2VyIGZyb20gd29ycnlpbmcgYWJvdXQKKyAgICogIG1lbW9yeSBhbmQgc2l6ZSBhbGxvY2F0aW9uLiAgU3Vic2NyaXB0aW5nICggQGMgW10gKSBhY2Nlc3MgaXMKKyAgICogIGFsc28gcHJvdmlkZWQgYXMgd2l0aCBDLXN0eWxlIGFycmF5cy4KKyAgKi8KK3RlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKyAgY2xhc3MgdmVjdG9yPGJvb2wsIF9BbGxvYz4gOiBwcm90ZWN0ZWQgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+CisgIHsKKyAgICB0eXBlZGVmIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPgkJCSBfQmFzZTsKKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgdGVtcGxhdGU8dHlwZW5hbWU+IGZyaWVuZCBjbGFzcyBoYXNoOworI2VuZGlmCisKKyAgcHVibGljOgorICAgIHR5cGVkZWYgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICB0eXBlZGVmIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICB0eXBlZGVmIHB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICB0eXBlZGVmIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X3JlZmVyZW5jZTsKKyAgICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgdHlwZWRlZiBjb25zdCBib29sKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9wb2ludGVyOworICAgIHR5cGVkZWYgX0JpdF9pdGVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3I7CisgICAgdHlwZWRlZiBfQml0X2NvbnN0X2l0ZXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gICAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CisgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+ICAgICAgICAgICAgICByZXZlcnNlX2l0ZXJhdG9yOworICAgIHR5cGVkZWYgX0FsbG9jICAgICAgICAgICAgICAgICAgICAgICAgCQkgYWxsb2NhdG9yX3R5cGU7CisKKyAgICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QKKyAgICB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CisKKyAgcHJvdGVjdGVkOgorICAgIHVzaW5nIF9CYXNlOjpfTV9hbGxvY2F0ZTsKKyAgICB1c2luZyBfQmFzZTo6X01fZGVhbGxvY2F0ZTsKKyAgICB1c2luZyBfQmFzZTo6X01fZ2V0X0JpdF9hbGxvY2F0b3I7CisKKyAgcHVibGljOgorICAgIHZlY3RvcigpCisgICAgOiBfQmFzZSgpIHsgfQorCisgICAgZXhwbGljaXQKKyAgICB2ZWN0b3IoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKKyAgICA6IF9CYXNlKF9fYSkgeyB9CisKKyAgICBleHBsaWNpdAorICAgIHZlY3RvcihzaXplX3R5cGUgX19uLCBjb25zdCBib29sJiBfX3ZhbHVlID0gYm9vbCgpLCAKKwkgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICA6IF9CYXNlKF9fYSkKKyAgICB7CisgICAgICBfTV9pbml0aWFsaXplKF9fbik7CisgICAgICBzdGQ6OmZpbGwodGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9wLCB0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlLCAKKwkJX192YWx1ZSA/IH4wIDogMCk7CisgICAgfQorCisgICAgdmVjdG9yKGNvbnN0IHZlY3RvciYgX194KQorICAgIDogX0Jhc2UoX194Ll9NX2dldF9CaXRfYWxsb2NhdG9yKCkpCisgICAgeworICAgICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKKyAgICAgIF9NX2NvcHlfYWxpZ25lZChfX3guYmVnaW4oKSwgX194LmVuZCgpLCB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0KTsKKyAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgIHZlY3Rvcih2ZWN0b3ImJiBfX3gpCisgICAgOiBfQmFzZShzdGQ6OmZvcndhcmQ8X0Jhc2U+KF9feCkpIHsgfQorCisgICAgdmVjdG9yKGluaXRpYWxpemVyX2xpc3Q8Ym9vbD4gX19sLAorCSAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgIDogX0Jhc2UoX19hKQorICAgIHsKKyAgICAgIF9NX2luaXRpYWxpemVfcmFuZ2UoX19sLmJlZ2luKCksIF9fbC5lbmQoKSwKKwkJCSAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcoKSk7CisgICAgfQorI2VuZGlmCisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgIHZlY3RvcihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19hKQorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgc3RkOjpfX2lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfX3R5cGUgX0ludGVncmFsOworCV9NX2luaXRpYWxpemVfZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CisgICAgICB9CisKKyAgICB+dmVjdG9yKCkgeyB9CisKKyAgICB2ZWN0b3ImCisgICAgb3BlcmF0b3I9KGNvbnN0IHZlY3RvciYgX194KQorICAgIHsKKyAgICAgIGlmICgmX194ID09IHRoaXMpCisJcmV0dXJuICp0aGlzOworICAgICAgaWYgKF9feC5zaXplKCkgPiBjYXBhY2l0eSgpKQorCXsKKwkgIHRoaXMtPl9NX2RlYWxsb2NhdGUoKTsKKwkgIF9NX2luaXRpYWxpemUoX194LnNpemUoKSk7CisJfQorICAgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2ggPSBfTV9jb3B5X2FsaWduZWQoX194LmJlZ2luKCksIF9feC5lbmQoKSwKKwkJCQkJCWJlZ2luKCkpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgdmVjdG9yJgorICAgIG9wZXJhdG9yPSh2ZWN0b3ImJiBfX3gpCisgICAgeworICAgICAgLy8gTkI6IERSIDEyMDQuCisgICAgICAvLyBOQjogRFIgNjc1LgorICAgICAgdGhpcy0+Y2xlYXIoKTsKKyAgICAgIHRoaXMtPnN3YXAoX194KTsgCisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdmVjdG9yJgorICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PGJvb2w+IF9fbCkKKyAgICB7CisgICAgICB0aGlzLT5hc3NpZ24gKF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyNlbmRpZgorCisgICAgLy8gYXNzaWduKCksIGEgZ2VuZXJhbGl6ZWQgYXNzaWdubWVudCBtZW1iZXIgZnVuY3Rpb24uICBUd28KKyAgICAvLyB2ZXJzaW9uczogb25lIHRoYXQgdGFrZXMgYSBjb3VudCwgYW5kIG9uZSB0aGF0IHRha2VzIGEgcmFuZ2UuCisgICAgLy8gVGhlIHJhbmdlIHZlcnNpb24gaXMgYSBtZW1iZXIgdGVtcGxhdGUsIHNvIHdlIGRpc3BhdGNoIG9uIHdoZXRoZXIKKyAgICAvLyBvciBub3QgdGhlIHR5cGUgaXMgYW4gaW50ZWdlci4KKyAgICB2b2lkCisgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IGJvb2wmIF9feCkKKyAgICB7IF9NX2ZpbGxfYXNzaWduKF9fbiwgX194KTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICB2b2lkCisgICAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgc3RkOjpfX2lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfX3R5cGUgX0ludGVncmFsOworCV9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgdm9pZAorICAgIGFzc2lnbihpbml0aWFsaXplcl9saXN0PGJvb2w+IF9fbCkKKyAgICB7IHRoaXMtPmFzc2lnbihfX2wuYmVnaW4oKSwgX19sLmVuZCgpKTsgfQorI2VuZGlmCisKKyAgICBpdGVyYXRvcgorICAgIGJlZ2luKCkKKyAgICB7IHJldHVybiB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0OyB9CisKKyAgICBjb25zdF9pdGVyYXRvcgorICAgIGJlZ2luKCkgY29uc3QKKyAgICB7IHJldHVybiB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0OyB9CisKKyAgICBpdGVyYXRvcgorICAgIGVuZCgpCisgICAgeyByZXR1cm4gdGhpcy0+X01faW1wbC5fTV9maW5pc2g7IH0KKworICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgZW5kKCkgY29uc3QKKyAgICB7IHJldHVybiB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaDsgfQorCisgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgIHJiZWdpbigpCisgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICByYmVnaW4oKSBjb25zdAorICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgcmVuZCgpCisgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgIHJlbmQoKSBjb25zdAorICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgY29uc3RfaXRlcmF0b3IKKyAgICBjYmVnaW4oKSBjb25zdAorICAgIHsgcmV0dXJuIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQ7IH0KKworICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgY2VuZCgpIGNvbnN0CisgICAgeyByZXR1cm4gdGhpcy0+X01faW1wbC5fTV9maW5pc2g7IH0KKworICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICBjcmJlZ2luKCkgY29uc3QKKyAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgIGNyZW5kKCkgY29uc3QKKyAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisjZW5kaWYKKworICAgIHNpemVfdHlwZQorICAgIHNpemUoKSBjb25zdAorICAgIHsgcmV0dXJuIHNpemVfdHlwZShlbmQoKSAtIGJlZ2luKCkpOyB9CisKKyAgICBzaXplX3R5cGUKKyAgICBtYXhfc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9faXNpemUgPQorCV9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxkaWZmZXJlbmNlX3R5cGU+OjpfX21heAorCS0gaW50KF9TX3dvcmRfYml0KSArIDE7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19hc2l6ZSA9IF9NX2dldF9CaXRfYWxsb2NhdG9yKCkubWF4X3NpemUoKTsKKyAgICAgIHJldHVybiAoX19hc2l6ZSA8PSBfX2lzaXplIC8gaW50KF9TX3dvcmRfYml0KQorCSAgICAgID8gX19hc2l6ZSAqIGludChfU193b3JkX2JpdCkgOiBfX2lzaXplKTsKKyAgICB9CisKKyAgICBzaXplX3R5cGUKKyAgICBjYXBhY2l0eSgpIGNvbnN0CisgICAgeyByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKHRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UsIDApCisJCSAgICAgICAtIGJlZ2luKCkpOyB9CisKKyAgICBib29sCisgICAgZW1wdHkoKSBjb25zdAorICAgIHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0KKworICAgIHJlZmVyZW5jZQorICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikKKyAgICB7CisgICAgICByZXR1cm4gKml0ZXJhdG9yKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fcAorCQkgICAgICAgKyBfX24gLyBpbnQoX1Nfd29yZF9iaXQpLCBfX24gJSBpbnQoX1Nfd29yZF9iaXQpKTsKKyAgICB9CisKKyAgICBjb25zdF9yZWZlcmVuY2UKKyAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgeworICAgICAgcmV0dXJuICpjb25zdF9pdGVyYXRvcih0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX3AKKwkJCSAgICAgKyBfX24gLyBpbnQoX1Nfd29yZF9iaXQpLCBfX24gJSBpbnQoX1Nfd29yZF9iaXQpKTsKKyAgICB9CisKKyAgcHJvdGVjdGVkOgorICAgIHZvaWQKKyAgICBfTV9yYW5nZV9jaGVjayhzaXplX3R5cGUgX19uKSBjb25zdAorICAgIHsKKyAgICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQorICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZShfX04oInZlY3Rvcjxib29sPjo6X01fcmFuZ2VfY2hlY2siKSk7CisgICAgfQorCisgIHB1YmxpYzoKKyAgICByZWZlcmVuY2UKKyAgICBhdChzaXplX3R5cGUgX19uKQorICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQorCisgICAgY29uc3RfcmVmZXJlbmNlCisgICAgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KKworICAgIHZvaWQKKyAgICByZXNlcnZlKHNpemVfdHlwZSBfX24pOworCisgICAgcmVmZXJlbmNlCisgICAgZnJvbnQoKQorICAgIHsgcmV0dXJuICpiZWdpbigpOyB9CisKKyAgICBjb25zdF9yZWZlcmVuY2UKKyAgICBmcm9udCgpIGNvbnN0CisgICAgeyByZXR1cm4gKmJlZ2luKCk7IH0KKworICAgIHJlZmVyZW5jZQorICAgIGJhY2soKQorICAgIHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQorCisgICAgY29uc3RfcmVmZXJlbmNlCisgICAgYmFjaygpIGNvbnN0CisgICAgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CisKKyAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgLy8gRFIgNDY0LiBTdWdnZXN0aW9uIGZvciBuZXcgbWVtYmVyIGZ1bmN0aW9ucyBpbiBzdGFuZGFyZCBjb250YWluZXJzLgorICAgIC8vIE4uQi4gRFIgNDY0IHNheXMgbm90aGluZyBhYm91dCB2ZWN0b3I8Ym9vbD4gYnV0IHdlIG5lZWQgc29tZXRoaW5nCisgICAgLy8gaGVyZSBkdWUgdG8gdGhlIHdheSB3ZSBhcmUgaW1wbGVtZW50aW5nIERSIDQ2NCBpbiB0aGUgZGVidWctbW9kZQorICAgIC8vIHZlY3RvciBjbGFzcy4KKyAgICB2b2lkCisgICAgZGF0YSgpIHsgfQorCisgICAgdm9pZAorICAgIHB1c2hfYmFjayhib29sIF9feCkKKyAgICB7CisgICAgICBpZiAodGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fcCAhPSB0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlKQorICAgICAgICAqdGhpcy0+X01faW1wbC5fTV9maW5pc2grKyA9IF9feDsKKyAgICAgIGVsc2UKKyAgICAgICAgX01faW5zZXJ0X2F1eChlbmQoKSwgX194KTsKKyAgICB9CisKKyAgICB2b2lkCisgICAgc3dhcCh2ZWN0b3ImIF9feCkKKyAgICB7CisgICAgICBzdGQ6OnN3YXAodGhpcy0+X01faW1wbC5fTV9zdGFydCwgX194Ll9NX2ltcGwuX01fc3RhcnQpOworICAgICAgc3RkOjpzd2FwKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLCBfX3guX01faW1wbC5fTV9maW5pc2gpOworICAgICAgc3RkOjpzd2FwKHRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UsIAorCQlfX3guX01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSk7CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDQzMS4gU3dhcHBpbmcgY29udGFpbmVycyB3aXRoIHVuZXF1YWwgYWxsb2NhdG9ycy4KKyAgICAgIHN0ZDo6X19hbGxvY19zd2FwPHR5cGVuYW1lIF9CYXNlOjpfQml0X2FsbG9jX3R5cGU+OjoKKwlfU19kb19pdChfTV9nZXRfQml0X2FsbG9jYXRvcigpLCBfX3guX01fZ2V0X0JpdF9hbGxvY2F0b3IoKSk7CisgICAgfQorCisgICAgLy8gWzIzLjIuNV0vMSwgdGhpcmQtdG8tbGFzdCBlbnRyeSBpbiBzeW5vcHNpcyBsaXN0aW5nCisgICAgc3RhdGljIHZvaWQKKyAgICBzd2FwKHJlZmVyZW5jZSBfX3gsIHJlZmVyZW5jZSBfX3kpCisgICAgeworICAgICAgYm9vbCBfX3RtcCA9IF9feDsKKyAgICAgIF9feCA9IF9feTsKKyAgICAgIF9feSA9IF9fdG1wOworICAgIH0KKworICAgIGl0ZXJhdG9yCisgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IGJvb2wmIF9feCA9IGJvb2woKSkKKyAgICB7CisgICAgICBjb25zdCBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CisgICAgICBpZiAodGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fcCAhPSB0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlCisJICAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKQorICAgICAgICAqdGhpcy0+X01faW1wbC5fTV9maW5pc2grKyA9IF9feDsKKyAgICAgIGVsc2UKKyAgICAgICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBfX3gpOworICAgICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICB2b2lkCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKKwkgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwl0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6X19pc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X190eXBlIF9JbnRlZ3JhbDsKKwlfTV9pbnNlcnRfZGlzcGF0Y2goX19wb3NpdGlvbiwgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CisgICAgICB9CisKKyAgICB2b2lkCisgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIGNvbnN0IGJvb2wmIF9feCkKKyAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zaXRpb24sIF9fbiwgX194KTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICB2b2lkIGluc2VydChpdGVyYXRvciBfX3AsIGluaXRpYWxpemVyX2xpc3Q8Ym9vbD4gX19sKQorICAgIHsgdGhpcy0+aW5zZXJ0KF9fcCwgX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7IH0KKyNlbmRpZgorCisgICAgdm9pZAorICAgIHBvcF9iYWNrKCkKKyAgICB7IC0tdGhpcy0+X01faW1wbC5fTV9maW5pc2g7IH0KKworICAgIGl0ZXJhdG9yCisgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICB7CisgICAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0gZW5kKCkpCisgICAgICAgIHN0ZDo6Y29weShfX3Bvc2l0aW9uICsgMSwgZW5kKCksIF9fcG9zaXRpb24pOworICAgICAgLS10aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaDsKKyAgICAgIHJldHVybiBfX3Bvc2l0aW9uOworICAgIH0KKworICAgIGl0ZXJhdG9yCisgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIF9NX2VyYXNlX2F0X2VuZChzdGQ6OmNvcHkoX19sYXN0LCBlbmQoKSwgX19maXJzdCkpOworICAgICAgcmV0dXJuIF9fZmlyc3Q7CisgICAgfQorCisgICAgdm9pZAorICAgIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgYm9vbCBfX3ggPSBib29sKCkpCisgICAgeworICAgICAgaWYgKF9fbmV3X3NpemUgPCBzaXplKCkpCisgICAgICAgIF9NX2VyYXNlX2F0X2VuZChiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbmV3X3NpemUpKTsKKyAgICAgIGVsc2UKKyAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXplIC0gc2l6ZSgpLCBfX3gpOworICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgdm9pZAorICAgIHNocmlua190b19maXQoKQorICAgIHsgc3RkOjpfX3Nocmlua190b19maXQ8dmVjdG9yPjo6X1NfZG9faXQoKnRoaXMpOyB9CisjZW5kaWYKKworICAgIHZvaWQKKyAgICBmbGlwKCkKKyAgICB7CisgICAgICBmb3IgKF9CaXRfdHlwZSAqIF9fcCA9IHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fcDsKKwkgICBfX3AgIT0gdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZTsgKytfX3ApCisgICAgICAgICpfX3AgPSB+Kl9fcDsKKyAgICB9CisKKyAgICB2b2lkCisgICAgY2xlYXIoKQorICAgIHsgX01fZXJhc2VfYXRfZW5kKGJlZ2luKCkpOyB9CisKKyAgIAorICBwcm90ZWN0ZWQ6CisgICAgLy8gUHJlY29uZGl0aW9uOiBfX2ZpcnN0Ll9NX29mZnNldCA9PSAwICYmIF9fcmVzdWx0Ll9NX29mZnNldCA9PSAwLgorICAgIGl0ZXJhdG9yCisgICAgX01fY29weV9hbGlnbmVkKGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QsIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdCwKKwkJICAgIGl0ZXJhdG9yIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIF9CaXRfdHlwZSogX19xID0gc3RkOjpjb3B5KF9fZmlyc3QuX01fcCwgX19sYXN0Ll9NX3AsIF9fcmVzdWx0Ll9NX3ApOworICAgICAgcmV0dXJuIHN0ZDo6Y29weShjb25zdF9pdGVyYXRvcihfX2xhc3QuX01fcCwgMCksIF9fbGFzdCwKKwkJICAgICAgIGl0ZXJhdG9yKF9fcSwgMCkpOworICAgIH0KKworICAgIHZvaWQKKyAgICBfTV9pbml0aWFsaXplKHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgX0JpdF90eXBlKiBfX3EgPSB0aGlzLT5fTV9hbGxvY2F0ZShfX24pOworICAgICAgdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSA9IChfX3EKKwkJCQkJICsgKChfX24gKyBpbnQoX1Nfd29yZF9iaXQpIC0gMSkKKwkJCQkJICAgIC8gaW50KF9TX3dvcmRfYml0KSkpOworICAgICAgdGhpcy0+X01faW1wbC5fTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CisgICAgICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCA9IHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgKyBkaWZmZXJlbmNlX3R5cGUoX19uKTsKKyAgICB9CisKKyAgICAvLyBDaGVjayB3aGV0aGVyIGl0J3MgYW4gaW50ZWdyYWwgdHlwZS4gIElmIHNvLCBpdCdzIG5vdCBhbiBpdGVyYXRvci4KKworICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAvLyA0MzguIEFtYmlndWl0eSBpbiB0aGUgImRvIHRoZSByaWdodCB0aGluZyIgY2xhdXNlCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVnZXI+CisgICAgICB2b2lkCisgICAgICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LCBfX3RydWVfdHlwZSkKKyAgICAgIHsKKwlfTV9pbml0aWFsaXplKHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19uKSk7CisJc3RkOjpmaWxsKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fcCwgCisJCSAgdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKKyAgICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgdm9pZCAKKyAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkJICAgICBfX2ZhbHNlX3R5cGUpCisgICAgICB7IF9NX2luaXRpYWxpemVfcmFuZ2UoX19maXJzdCwgX19sYXN0LCAKKwkJCSAgICBzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2luaXRpYWxpemVfcmFuZ2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkJICBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZykKKyAgICAgIHsKKwlmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwkgIHB1c2hfYmFjaygqX19maXJzdCk7CisgICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgX01faW5pdGlhbGl6ZV9yYW5nZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQkJICBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnKQorICAgICAgeworCWNvbnN0IHNpemVfdHlwZSBfX24gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CisJX01faW5pdGlhbGl6ZShfX24pOworCXN0ZDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQpOworICAgICAgfQorCisgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgIC8vIDQzOC4gQW1iaWd1aXR5IGluIHRoZSAiZG8gdGhlIHJpZ2h0IHRoaW5nIiBjbGF1c2UKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZWdlcj4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKKyAgICAgIHsgX01fZmlsbF9hc3NpZ24oX19uLCBfX3ZhbCk7IH0KKworICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJCSBfX2ZhbHNlX3R5cGUpCisgICAgICB7IF9NX2Fzc2lnbl9hdXgoX19maXJzdCwgX19sYXN0LCBzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOyB9CisKKyAgICB2b2lkCisgICAgX01fZmlsbF9hc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpCisgICAgeworICAgICAgaWYgKF9fbiA+IHNpemUoKSkKKwl7CisJICBzdGQ6OmZpbGwodGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9wLCAKKwkJICAgIHRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CisJICBpbnNlcnQoZW5kKCksIF9fbiAtIHNpemUoKSwgX194KTsKKwl9CisgICAgICBlbHNlCisJeworCSAgX01fZXJhc2VfYXRfZW5kKGJlZ2luKCkgKyBfX24pOworCSAgc3RkOjpmaWxsKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fcCwgCisJCSAgICB0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOworCX0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkgICAgc3RkOjppbnB1dF9pdGVyYXRvcl90YWcpCisgICAgICB7CisJaXRlcmF0b3IgX19jdXIgPSBiZWdpbigpOworCWZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2ZpcnN0KQorCSAgKl9fY3VyID0gKl9fZmlyc3Q7CisJaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCSAgX01fZXJhc2VfYXRfZW5kKF9fY3VyKTsKKwllbHNlCisJICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkJICAgIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcpCisgICAgICB7CisJY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOworCWlmIChfX2xlbiA8IHNpemUoKSkKKwkgIF9NX2VyYXNlX2F0X2VuZChzdGQ6OmNvcHkoX19maXJzdCwgX19sYXN0LCBiZWdpbigpKSk7CisJZWxzZQorCSAgeworCSAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKKwkgICAgc3RkOjphZHZhbmNlKF9fbWlkLCBzaXplKCkpOworCSAgICBzdGQ6OmNvcHkoX19maXJzdCwgX19taWQsIGJlZ2luKCkpOworCSAgICBpbnNlcnQoZW5kKCksIF9fbWlkLCBfX2xhc3QpOworCSAgfQorICAgICAgfQorCisgICAgLy8gQ2hlY2sgd2hldGhlciBpdCdzIGFuIGludGVncmFsIHR5cGUuICBJZiBzbywgaXQncyBub3QgYW4gaXRlcmF0b3IuCisKKyAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgLy8gNDM4LiBBbWJpZ3VpdHkgaW4gdGhlICJkbyB0aGUgcmlnaHQgdGhpbmciIGNsYXVzZQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlZ2VyPgorICAgICAgdm9pZAorICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwKKwkJCSBfX3RydWVfdHlwZSkKKyAgICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194KTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICB2b2lkCisgICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCisJCQkgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkJIF9fZmFsc2VfdHlwZSkKKyAgICAgIHsgX01faW5zZXJ0X3JhbmdlKF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsCisJCQlzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOyB9CisKKyAgICB2b2lkCisgICAgX01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3gpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICB2b2lkCisgICAgICBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIAorCQkgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnKQorICAgICAgeworCWZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQorCSAgeworCSAgICBfX3BvcyA9IGluc2VydChfX3BvcywgKl9fZmlyc3QpOworCSAgICArK19fcG9zOworCSAgfQorICAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2luc2VydF9yYW5nZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIAorCQkgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CisKKyAgICB2b2lkCisgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCk7CisKKyAgICBzaXplX3R5cGUKKyAgICBfTV9jaGVja19sZW4oc2l6ZV90eXBlIF9fbiwgY29uc3QgY2hhciogX19zKSBjb25zdAorICAgIHsKKyAgICAgIGlmIChtYXhfc2l6ZSgpIC0gc2l6ZSgpIDwgX19uKQorCV9fdGhyb3dfbGVuZ3RoX2Vycm9yKF9fTihfX3MpKTsKKworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsgc3RkOjptYXgoc2l6ZSgpLCBfX24pOworICAgICAgcmV0dXJuIChfX2xlbiA8IHNpemUoKSB8fCBfX2xlbiA+IG1heF9zaXplKCkpID8gbWF4X3NpemUoKSA6IF9fbGVuOworICAgIH0KKworICAgIHZvaWQKKyAgICBfTV9lcmFzZV9hdF9lbmQoaXRlcmF0b3IgX19wb3MpCisgICAgeyB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCA9IF9fcG9zOyB9CisgIH07CisKK19HTElCQ1hYX0VORF9ORVNURURfTkFNRVNQQUNFCisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworCisjaW5jbHVkZSA8Yml0cy9mdW5jdGlvbmFsX2hhc2guaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvLyBEUiAxMTgyLgorICAvLy8gc3RkOjpoYXNoIHNwZWNpYWxpemF0aW9uIGZvciB2ZWN0b3I8Ym9vbD4uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKyAgICBzdHJ1Y3QgaGFzaDxfR0xJQkNYWF9TVERfRDo6dmVjdG9yPGJvb2wsIF9BbGxvYz4+CisgICAgOiBwdWJsaWMgc3RkOjp1bmFyeV9mdW5jdGlvbjxfR0xJQkNYWF9TVERfRDo6dmVjdG9yPGJvb2wsIF9BbGxvYz4sIHNpemVfdD4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX0dMSUJDWFhfU1REX0Q6OnZlY3Rvcjxib29sLCBfQWxsb2M+JiBfX2IpIGNvbnN0OworICAgIH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmIC8vIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF9jb25zdHJ1Y3QuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfY29uc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MzMGI5YQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfY29uc3RydWN0LmgKQEAgLTAsMCArMSwxNTQgQEAKKy8vIG5vbnN0YW5kYXJkIGNvbnN0cnVjdCBhbmQgZGVzdHJveSBmdW5jdGlvbnMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk3CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgc3RsX2NvbnN0cnVjdC5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKyNpZm5kZWYgX1NUTF9DT05TVFJVQ1RfSAorI2RlZmluZSBfU1RMX0NPTlNUUlVDVF9IIDEKKworI2luY2x1ZGUgPG5ldz4KKyNpbmNsdWRlIDxiaXRzL21vdmUuaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvKioKKyAgICogQ29uc3RydWN0cyBhbiBvYmplY3QgaW4gZXhpc3RpbmcgbWVtb3J5IGJ5IGludm9raW5nIGFuIGFsbG9jYXRlZAorICAgKiBvYmplY3QncyBjb25zdHJ1Y3RvciB3aXRoIGFuIGluaXRpYWxpemVyLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CisgICAgaW5saW5lIHZvaWQKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgIC8vIEFsbG93IHBlcmZlY3QgZm9yd2FyZGluZworICAgIF9Db25zdHJ1Y3QoX1QxKiBfX3AsIF9UMiYmIF9fdmFsdWUpCisjZWxzZQorICAgIF9Db25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkKKyNlbmRpZgorICAgIHsKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDQwMi4gd3JvbmcgbmV3IGV4cHJlc3Npb24gaW4gW3NvbWVfXWFsbG9jYXRvcjo6Y29uc3RydWN0CisgICAgICA6Om5ldyhzdGF0aWNfY2FzdDx2b2lkKj4oX19wKSkgX1QxKF9HTElCQ1hYX0ZPUldBUkQoX1QyLCBfX3ZhbHVlKSk7CisgICAgfQorCisgIC8qKgorICAgKiBEZXN0cm95IHRoZSBvYmplY3QgcG9pbnRlZCB0byBieSBhIHBvaW50ZXIgdHlwZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9EZXN0cm95KF9UcCogX19wb2ludGVyKQorICAgIHsgX19wb2ludGVyLT5+X1RwKCk7IH0KKworICB0ZW1wbGF0ZTxib29sPgorICAgIHN0cnVjdCBfRGVzdHJveV9hdXgKKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgICAgICBzdGF0aWMgdm9pZAorICAgICAgICBfX2Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKKwl7CisJICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwkgICAgc3RkOjpfRGVzdHJveSgmKl9fZmlyc3QpOworCX0KKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX0Rlc3Ryb3lfYXV4PHRydWU+CisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICAgICAgc3RhdGljIHZvaWQKKyAgICAgICAgX19kZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0b3IpIHsgfQorICAgIH07CisKKyAgLyoqCisgICAqIERlc3Ryb3kgYSByYW5nZSBvZiBvYmplY3RzLiAgSWYgdGhlIHZhbHVlX3R5cGUgb2YgdGhlIG9iamVjdCBoYXMKKyAgICogYSB0cml2aWFsIGRlc3RydWN0b3IsIHRoZSBjb21waWxlciBzaG91bGQgb3B0aW1pemUgYWxsIG9mIHRoaXMKKyAgICogYXdheSwgb3RoZXJ3aXNlIHRoZSBvYmplY3RzJyBkZXN0cnVjdG9ycyBtdXN0IGJlIGludm9rZWQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgIGlubGluZSB2b2lkCisgICAgX0Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQorICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVfdHlwZTsKKyAgICAgIHN0ZDo6X0Rlc3Ryb3lfYXV4PF9faGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcihfVmFsdWVfdHlwZSk+OjoKKwlfX2Rlc3Ryb3koX19maXJzdCwgX19sYXN0KTsKKyAgICB9CisKKyAgLyoqCisgICAqIERlc3Ryb3kgYSByYW5nZSBvZiBvYmplY3RzIHVzaW5nIHRoZSBzdXBwbGllZCBhbGxvY2F0b3IuICBGb3IKKyAgICogbm9uZGVmYXVsdCBhbGxvY2F0b3JzIHdlIGRvIG5vdCBvcHRpbWl6ZSBhd2F5IGludm9jYXRpb24gb2YgCisgICAqIGRlc3Ryb3koKSBldmVuIGlmIF9UcCBoYXMgYSB0cml2aWFsIGRlc3RydWN0b3IuCisgICAqLworCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHA+IGNsYXNzIGFsbG9jYXRvcjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIHZvaWQKKyAgICBfRGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCSAgICAgX0FsbG9jYXRvciYgX19hbGxvYykKKyAgICB7CisgICAgICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwlfX2FsbG9jLmRlc3Ryb3koJipfX2ZpcnN0KTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX0Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgIGFsbG9jYXRvcjxfVHA+JikKKyAgICB7CisgICAgICBfRGVzdHJveShfX2ZpcnN0LCBfX2xhc3QpOworICAgIH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYgLyogX1NUTF9DT05TVFJVQ1RfSCAqLworCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3RsX2RlcXVlLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3RsX2RlcXVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkwMjJiMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfZGVxdWUuaApAQCAtMCwwICsxLDE4ODggQEAKKy8vIERlcXVlIGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBzdGxfZGVxdWUuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWZuZGVmIF9TVExfREVRVUVfSAorI2RlZmluZSBfU1RMX0RFUVVFX0ggMQorCisjaW5jbHVkZSA8Yml0cy9jb25jZXB0X2NoZWNrLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaD4KKyNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgorCitfR0xJQkNYWF9CRUdJTl9ORVNURURfTkFNRVNQQUNFKHN0ZCwgX0dMSUJDWFhfU1REX0QpCisKKyAgLyoqCisgICAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBjb250cm9scyB0aGUgc2l6ZSBvZiBtZW1vcnkgbm9kZXMuCisgICAqICBAcGFyYW0gIHNpemUgIFRoZSBzaXplIG9mIGFuIGVsZW1lbnQuCisgICAqICBAcmV0dXJuICAgVGhlIG51bWJlciAobm90IGJ5dGUgc2l6ZSkgb2YgZWxlbWVudHMgcGVyIG5vZGUuCisgICAqCisgICAqICBUaGlzIGZ1bmN0aW9uIHN0YXJ0ZWQgb2ZmIGFzIGEgY29tcGlsZXIga2x1ZGdlIGZyb20gU0dJLCBidXQKKyAgICogIHNlZW1zIHRvIGJlIGEgdXNlZnVsIHdyYXBwZXIgYXJvdW5kIGEgcmVwZWF0ZWQgY29uc3RhbnQKKyAgICogIGV4cHJlc3Npb24uICBUaGUgQGIgNTEyIGlzIHR1bmFibGUgKGFuZCBubyBvdGhlciBjb2RlIG5lZWRzIHRvCisgICAqICBjaGFuZ2UpLCBidXQgbm8gaW52ZXN0aWdhdGlvbiBoYXMgYmVlbiBkb25lIHNpbmNlIGluaGVyaXRpbmcgdGhlCisgICAqICBTR0kgY29kZS4gIFRvdWNoIF9HTElCQ1hYX0RFUVVFX0JVRl9TSVpFIG9ubHkgaWYgeW91IGtub3cgd2hhdAorICAgKiAgeW91IGFyZSBkb2luZywgaG93ZXZlcjogY2hhbmdpbmcgaXQgYnJlYWtzIHRoZSBiaW5hcnkKKyAgICogIGNvbXBhdGliaWxpdHkhIQorICAqLworCisjaWZuZGVmIF9HTElCQ1hYX0RFUVVFX0JVRl9TSVpFCisjZGVmaW5lIF9HTElCQ1hYX0RFUVVFX0JVRl9TSVpFIDUxMgorI2VuZGlmCisKKyAgaW5saW5lIHNpemVfdAorICBfX2RlcXVlX2J1Zl9zaXplKHNpemVfdCBfX3NpemUpCisgIHsgcmV0dXJuIChfX3NpemUgPCBfR0xJQkNYWF9ERVFVRV9CVUZfU0laRQorCSAgICA/IHNpemVfdChfR0xJQkNYWF9ERVFVRV9CVUZfU0laRSAvIF9fc2l6ZSkgOiBzaXplX3QoMSkpOyB9CisKKworICAvKioKKyAgICogIEBicmllZiBBIGRlcXVlOjppdGVyYXRvci4KKyAgICoKKyAgICogIFF1aXRlIGEgYml0IG9mIGludGVsbGlnZW5jZSBoZXJlLiAgTXVjaCBvZiB0aGUgZnVuY3Rpb25hbGl0eSBvZgorICAgKiAgZGVxdWUgaXMgYWN0dWFsbHkgcGFzc2VkIG9mZiB0byB0aGlzIGNsYXNzLiAgQSBkZXF1ZSBob2xkcyB0d28KKyAgICogIG9mIHRoZXNlIGludGVybmFsbHksIG1hcmtpbmcgaXRzIHZhbGlkIHJhbmdlLiAgQWNjZXNzIHRvCisgICAqICBlbGVtZW50cyBpcyBkb25lIGFzIG9mZnNldHMgb2YgZWl0aGVyIG9mIHRob3NlIHR3bywgcmVseWluZyBvbgorICAgKiAgb3BlcmF0b3Igb3ZlcmxvYWRpbmcgaW4gdGhpcyBjbGFzcy4KKyAgICoKKyAgICogIEFsbCB0aGUgZnVuY3Rpb25zIGFyZSBvcCBvdmVybG9hZHMgZXhjZXB0IGZvciBfTV9zZXRfbm9kZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfUmVmLCB0eXBlbmFtZSBfUHRyPgorICAgIHN0cnVjdCBfRGVxdWVfaXRlcmF0b3IKKyAgICB7CisgICAgICB0eXBlZGVmIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+ICAgICAgICAgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0b3I8X1RwLCBjb25zdCBfVHAmLCBjb25zdCBfVHAqPiBjb25zdF9pdGVyYXRvcjsKKworICAgICAgc3RhdGljIHNpemVfdCBfU19idWZmZXJfc2l6ZSgpCisgICAgICB7IHJldHVybiBfX2RlcXVlX2J1Zl9zaXplKHNpemVvZihfVHApKTsgfQorCisgICAgICB0eXBlZGVmIHN0ZDo6cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisgICAgICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1B0ciAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiBfUmVmICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBfVHAqKiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NYXBfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgX0RlcXVlX2l0ZXJhdG9yICAgICAgICAgICAgICAgICBfU2VsZjsKKworICAgICAgX1RwKiBfTV9jdXI7CisgICAgICBfVHAqIF9NX2ZpcnN0OworICAgICAgX1RwKiBfTV9sYXN0OworICAgICAgX01hcF9wb2ludGVyIF9NX25vZGU7CisKKyAgICAgIF9EZXF1ZV9pdGVyYXRvcihfVHAqIF9feCwgX01hcF9wb2ludGVyIF9feSkKKyAgICAgIDogX01fY3VyKF9feCksIF9NX2ZpcnN0KCpfX3kpLAorICAgICAgICBfTV9sYXN0KCpfX3kgKyBfU19idWZmZXJfc2l6ZSgpKSwgX01fbm9kZShfX3kpIHsgfQorCisgICAgICBfRGVxdWVfaXRlcmF0b3IoKQorICAgICAgOiBfTV9jdXIoMCksIF9NX2ZpcnN0KDApLCBfTV9sYXN0KDApLCBfTV9ub2RlKDApIHsgfQorCisgICAgICBfRGVxdWVfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9feCkKKyAgICAgIDogX01fY3VyKF9feC5fTV9jdXIpLCBfTV9maXJzdChfX3guX01fZmlyc3QpLAorICAgICAgICBfTV9sYXN0KF9feC5fTV9sYXN0KSwgX01fbm9kZShfX3guX01fbm9kZSkgeyB9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICpfTV9jdXI7IH0KKworICAgICAgcG9pbnRlcgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9jdXI7IH0KKworICAgICAgX1NlbGYmCisgICAgICBvcGVyYXRvcisrKCkKKyAgICAgIHsKKwkrK19NX2N1cjsKKwlpZiAoX01fY3VyID09IF9NX2xhc3QpCisJICB7CisJICAgIF9NX3NldF9ub2RlKF9NX25vZGUgKyAxKTsKKwkgICAgX01fY3VyID0gX01fZmlyc3Q7CisJICB9CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfU2VsZgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7CisJX1NlbGYgX190bXAgPSAqdGhpczsKKwkrKyp0aGlzOworCXJldHVybiBfX3RtcDsKKyAgICAgIH0KKworICAgICAgX1NlbGYmCisgICAgICBvcGVyYXRvci0tKCkKKyAgICAgIHsKKwlpZiAoX01fY3VyID09IF9NX2ZpcnN0KQorCSAgeworCSAgICBfTV9zZXRfbm9kZShfTV9ub2RlIC0gMSk7CisJICAgIF9NX2N1ciA9IF9NX2xhc3Q7CisJICB9CisJLS1fTV9jdXI7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfU2VsZgorICAgICAgb3BlcmF0b3ItLShpbnQpCisgICAgICB7CisJX1NlbGYgX190bXAgPSAqdGhpczsKKwktLSp0aGlzOworCXJldHVybiBfX3RtcDsKKyAgICAgIH0KKworICAgICAgX1NlbGYmCisgICAgICBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX24pCisgICAgICB7CisJY29uc3QgZGlmZmVyZW5jZV90eXBlIF9fb2Zmc2V0ID0gX19uICsgKF9NX2N1ciAtIF9NX2ZpcnN0KTsKKwlpZiAoX19vZmZzZXQgPj0gMCAmJiBfX29mZnNldCA8IGRpZmZlcmVuY2VfdHlwZShfU19idWZmZXJfc2l6ZSgpKSkKKwkgIF9NX2N1ciArPSBfX247CisJZWxzZQorCSAgeworCSAgICBjb25zdCBkaWZmZXJlbmNlX3R5cGUgX19ub2RlX29mZnNldCA9CisJICAgICAgX19vZmZzZXQgPiAwID8gX19vZmZzZXQgLyBkaWZmZXJlbmNlX3R5cGUoX1NfYnVmZmVyX3NpemUoKSkKKwkgICAgICAgICAgICAgICAgICAgOiAtZGlmZmVyZW5jZV90eXBlKCgtX19vZmZzZXQgLSAxKQorCQkJCQkgICAgICAvIF9TX2J1ZmZlcl9zaXplKCkpIC0gMTsKKwkgICAgX01fc2V0X25vZGUoX01fbm9kZSArIF9fbm9kZV9vZmZzZXQpOworCSAgICBfTV9jdXIgPSBfTV9maXJzdCArIChfX29mZnNldCAtIF9fbm9kZV9vZmZzZXQKKwkJCQkgKiBkaWZmZXJlbmNlX3R5cGUoX1NfYnVmZmVyX3NpemUoKSkpOworCSAgfQorCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX1NlbGYKKyAgICAgIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAorICAgICAgeworCV9TZWxmIF9fdG1wID0gKnRoaXM7CisJcmV0dXJuIF9fdG1wICs9IF9fbjsKKyAgICAgIH0KKworICAgICAgX1NlbGYmCisgICAgICBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX24pCisgICAgICB7IHJldHVybiAqdGhpcyArPSAtX19uOyB9CisKKyAgICAgIF9TZWxmCisgICAgICBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsKKwlfU2VsZiBfX3RtcCA9ICp0aGlzOworCXJldHVybiBfX3RtcCAtPSBfX247CisgICAgICB9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0KKworICAgICAgLyoqIAorICAgICAgICogIFByZXBhcmVzIHRvIHRyYXZlcnNlIG5ld19ub2RlLiAgU2V0cyBldmVyeXRoaW5nIGV4Y2VwdAorICAgICAgICogIF9NX2N1ciwgd2hpY2ggc2hvdWxkIHRoZXJlZm9yZSBiZSBzZXQgYnkgdGhlIGNhbGxlcgorICAgICAgICogIGltbWVkaWF0ZWx5IGFmdGVyd2FyZHMsIGJhc2VkIG9uIF9NX2ZpcnN0IGFuZCBfTV9sYXN0LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBfTV9zZXRfbm9kZShfTWFwX3BvaW50ZXIgX19uZXdfbm9kZSkKKyAgICAgIHsKKwlfTV9ub2RlID0gX19uZXdfbm9kZTsKKwlfTV9maXJzdCA9ICpfX25ld19ub2RlOworCV9NX2xhc3QgPSBfTV9maXJzdCArIGRpZmZlcmVuY2VfdHlwZShfU19idWZmZXJfc2l6ZSgpKTsKKyAgICAgIH0KKyAgICB9OworCisgIC8vIE5vdGU6IHdlIGFsc28gcHJvdmlkZSBvdmVybG9hZHMgd2hvc2Ugb3BlcmFuZHMgYXJlIG9mIHRoZSBzYW1lIHR5cGUgaW4KKyAgLy8gb3JkZXIgdG8gYXZvaWQgYW1iaWd1b3VzIG92ZXJsb2FkIHJlc29sdXRpb24gd2hlbiBzdGQ6OnJlbF9vcHMgb3BlcmF0b3JzCisgIC8vIGFyZSBpbiBzY29wZSAoZm9yIGFkZGl0aW9uYWwgZGV0YWlscywgc2VlIGxpYnN0ZGMrKy8zNjI4KQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+JiBfX3gsCisJICAgICAgIGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX2N1ciA9PSBfX3kuX01fY3VyOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfUmVmTCwgdHlwZW5hbWUgX1B0ckwsCisJICAgdHlwZW5hbWUgX1JlZlIsIHR5cGVuYW1lIF9QdHJSPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmTCwgX1B0ckw+JiBfX3gsCisJICAgICAgIGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWZSLCBfUHRyUj4mIF9feSkKKyAgICB7IHJldHVybiBfX3guX01fY3VyID09IF9feS5fTV9jdXI7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+JiBfX3gsCisJICAgICAgIGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1JlZkwsIHR5cGVuYW1lIF9QdHJMLAorCSAgIHR5cGVuYW1lIF9SZWZSLCB0eXBlbmFtZSBfUHRyUj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZkwsIF9QdHJMPiYgX194LAorCSAgICAgICBjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmUiwgX1B0clI+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0cj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmLCBfUHRyPiYgX194LAorCSAgICAgIGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+JiBfX3kpCisgICAgeyByZXR1cm4gKF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlKSA/IChfX3guX01fY3VyIDwgX195Ll9NX2N1cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKF9feC5fTV9ub2RlIDwgX195Ll9NX25vZGUpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfUmVmTCwgdHlwZW5hbWUgX1B0ckwsCisJICAgdHlwZW5hbWUgX1JlZlIsIHR5cGVuYW1lIF9QdHJSPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWZMLCBfUHRyTD4mIF9feCwKKwkgICAgICBjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmUiwgX1B0clI+JiBfX3kpCisgICAgeyByZXR1cm4gKF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlKSA/IChfX3guX01fY3VyIDwgX195Ll9NX2N1cikKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoX194Ll9NX25vZGUgPCBfX3kuX01fbm9kZSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZiwgX1B0cj4mIF9feCwKKwkgICAgICBjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmLCBfUHRyPiYgX195KQorICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1JlZkwsIHR5cGVuYW1lIF9QdHJMLAorCSAgIHR5cGVuYW1lIF9SZWZSLCB0eXBlbmFtZSBfUHRyUj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmTCwgX1B0ckw+JiBfX3gsCisJICAgICAgY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZlIsIF9QdHJSPiYgX195KQorICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0cj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZiwgX1B0cj4mIF9feCwKKwkgICAgICAgY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZiwgX1B0cj4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9SZWZMLCB0eXBlbmFtZSBfUHRyTCwKKwkgICB0eXBlbmFtZSBfUmVmUiwgdHlwZW5hbWUgX1B0clI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWZMLCBfUHRyTD4mIF9feCwKKwkgICAgICAgY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZlIsIF9QdHJSPiYgX195KQorICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0cj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZiwgX1B0cj4mIF9feCwKKwkgICAgICAgY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZiwgX1B0cj4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9SZWZMLCB0eXBlbmFtZSBfUHRyTCwKKwkgICB0eXBlbmFtZSBfUmVmUiwgdHlwZW5hbWUgX1B0clI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWZMLCBfUHRyTD4mIF9feCwKKwkgICAgICAgY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZlIsIF9QdHJSPiYgX195KQorICAgIHsgcmV0dXJuICEoX194IDwgX195KTsgfQorCisgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgLy8gQWNjb3JkaW5nIHRvIHRoZSByZXNvbHV0aW9uIG9mIERSMTc5IG5vdCBvbmx5IHRoZSB2YXJpb3VzIGNvbXBhcmlzb24KKyAgLy8gb3BlcmF0b3JzIGJ1dCBhbHNvIG9wZXJhdG9yLSBtdXN0IGFjY2VwdCBtaXhlZCBpdGVyYXRvci9jb25zdF9pdGVyYXRvcgorICAvLyBwYXJhbWV0ZXJzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CisgICAgaW5saW5lIHR5cGVuYW1lIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBvcGVyYXRvci0oY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZiwgX1B0cj4mIF9feCwKKwkgICAgICBjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmLCBfUHRyPiYgX195KQorICAgIHsKKyAgICAgIHJldHVybiB0eXBlbmFtZSBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmLCBfUHRyPjo6ZGlmZmVyZW5jZV90eXBlCisJKF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+OjpfU19idWZmZXJfc2l6ZSgpKQorCSogKF9feC5fTV9ub2RlIC0gX195Ll9NX25vZGUgLSAxKSArIChfX3guX01fY3VyIC0gX194Ll9NX2ZpcnN0KQorCSsgKF9feS5fTV9sYXN0IC0gX195Ll9NX2N1cik7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1JlZkwsIHR5cGVuYW1lIF9QdHJMLAorCSAgIHR5cGVuYW1lIF9SZWZSLCB0eXBlbmFtZSBfUHRyUj4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZkwsIF9QdHJMPjo6ZGlmZmVyZW5jZV90eXBlCisgICAgb3BlcmF0b3ItKGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWZMLCBfUHRyTD4mIF9feCwKKwkgICAgICBjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmUiwgX1B0clI+JiBfX3kpCisgICAgeworICAgICAgcmV0dXJuIHR5cGVuYW1lIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWZMLCBfUHRyTD46OmRpZmZlcmVuY2VfdHlwZQorCShfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmTCwgX1B0ckw+OjpfU19idWZmZXJfc2l6ZSgpKQorCSogKF9feC5fTV9ub2RlIC0gX195Ll9NX25vZGUgLSAxKSArIChfX3guX01fY3VyIC0gX194Ll9NX2ZpcnN0KQorCSsgKF9feS5fTV9sYXN0IC0gX195Ll9NX2N1cik7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0cj4KKyAgICBpbmxpbmUgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZiwgX1B0cj4KKyAgICBvcGVyYXRvcisocHRyZGlmZl90IF9fbiwgY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZiwgX1B0cj4mIF9feCkKKyAgICB7IHJldHVybiBfX3ggKyBfX247IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgdm9pZAorICAgIGZpbGwoY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4mLAorCSBjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPiYsIGNvbnN0IF9UcCYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPgorICAgIGNvcHkoX0RlcXVlX2l0ZXJhdG9yPF9UcCwgY29uc3QgX1RwJiwgY29uc3QgX1RwKj4sCisJIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCo+LAorCSBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPgorICAgIGNvcHkoX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4gX19maXJzdCwKKwkgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4gX19sYXN0LAorCSBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPiBfX3Jlc3VsdCkKKyAgICB7IHJldHVybiBzdGQ6OmNvcHkoX0RlcXVlX2l0ZXJhdG9yPF9UcCwgY29uc3QgX1RwJiwgY29uc3QgX1RwKj4oX19maXJzdCksCisJCSAgICAgICBfRGVxdWVfaXRlcmF0b3I8X1RwLCBjb25zdCBfVHAmLCBjb25zdCBfVHAqPihfX2xhc3QpLAorCQkgICAgICAgX19yZXN1bHQpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+CisgICAgY29weV9iYWNrd2FyZChfRGVxdWVfaXRlcmF0b3I8X1RwLCBjb25zdCBfVHAmLCBjb25zdCBfVHAqPiwKKwkJICBfRGVxdWVfaXRlcmF0b3I8X1RwLCBjb25zdCBfVHAmLCBjb25zdCBfVHAqPiwKKwkJICBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPgorICAgIGNvcHlfYmFja3dhcmQoX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4gX19maXJzdCwKKwkJICBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPiBfX2xhc3QsCisJCSAgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4gX19yZXN1bHQpCisgICAgeyByZXR1cm4gc3RkOjpjb3B5X2JhY2t3YXJkKF9EZXF1ZV9pdGVyYXRvcjxfVHAsCisJCQkJY29uc3QgX1RwJiwgY29uc3QgX1RwKj4oX19maXJzdCksCisJCQkJX0RlcXVlX2l0ZXJhdG9yPF9UcCwKKwkJCQljb25zdCBfVHAmLCBjb25zdCBfVHAqPihfX2xhc3QpLAorCQkJCV9fcmVzdWx0KTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+CisgICAgbW92ZShfRGVxdWVfaXRlcmF0b3I8X1RwLCBjb25zdCBfVHAmLCBjb25zdCBfVHAqPiwKKwkgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgY29uc3QgX1RwJiwgY29uc3QgX1RwKj4sCisJIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+KTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+CisgICAgbW92ZShfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPiBfX2ZpcnN0LAorCSBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPiBfX2xhc3QsCisJIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+IF9fcmVzdWx0KQorICAgIHsgcmV0dXJuIHN0ZDo6bW92ZShfRGVxdWVfaXRlcmF0b3I8X1RwLCBjb25zdCBfVHAmLCBjb25zdCBfVHAqPihfX2ZpcnN0KSwKKwkJICAgICAgIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCo+KF9fbGFzdCksCisJCSAgICAgICBfX3Jlc3VsdCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4KKyAgICBtb3ZlX2JhY2t3YXJkKF9EZXF1ZV9pdGVyYXRvcjxfVHAsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCo+LAorCQkgIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCo+LAorCQkgIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+KTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+CisgICAgbW92ZV9iYWNrd2FyZChfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPiBfX2ZpcnN0LAorCQkgIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+IF9fbGFzdCwKKwkJICBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPiBfX3Jlc3VsdCkKKyAgICB7IHJldHVybiBzdGQ6Om1vdmVfYmFja3dhcmQoX0RlcXVlX2l0ZXJhdG9yPF9UcCwKKwkJCQljb25zdCBfVHAmLCBjb25zdCBfVHAqPihfX2ZpcnN0KSwKKwkJCQlfRGVxdWVfaXRlcmF0b3I8X1RwLAorCQkJCWNvbnN0IF9UcCYsIGNvbnN0IF9UcCo+KF9fbGFzdCksCisJCQkJX19yZXN1bHQpOyB9CisjZW5kaWYKKworICAvKioKKyAgICogIERlcXVlIGJhc2UgY2xhc3MuICBUaGlzIGNsYXNzIHByb3ZpZGVzIHRoZSB1bmlmaWVkIGZhY2UgZm9yICVkZXF1ZSdzCisgICAqICBhbGxvY2F0aW9uLiAgVGhpcyBjbGFzcydzIGNvbnN0cnVjdG9yIGFuZCBkZXN0cnVjdG9yIGFsbG9jYXRlIGFuZAorICAgKiAgZGVhbGxvY2F0ZSAoYnV0IGRvIG5vdCBpbml0aWFsaXplKSBzdG9yYWdlLiAgVGhpcyBtYWtlcyAlZXhjZXB0aW9uCisgICAqICBzYWZldHkgZWFzaWVyLgorICAgKgorICAgKiAgTm90aGluZyBpbiB0aGlzIGNsYXNzIGV2ZXIgY29uc3RydWN0cyBvciBkZXN0cm95cyBhbiBhY3R1YWwgVHAgZWxlbWVudC4KKyAgICogIChEZXF1ZSBoYW5kbGVzIHRoYXQgaXRzZWxmLikgIE9ubHkvQWxsIG1lbW9yeSBtYW5hZ2VtZW50IGlzIHBlcmZvcm1lZAorICAgKiAgaGVyZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgY2xhc3MgX0RlcXVlX2Jhc2UKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfQWxsb2MgICAgICAgICAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKKworICAgICAgYWxsb2NhdG9yX3R5cGUKKyAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdAorICAgICAgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsgfQorCisgICAgICB0eXBlZGVmIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+ICAgICAgICAgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0b3I8X1RwLCBjb25zdCBfVHAmLCBjb25zdCBfVHAqPiBjb25zdF9pdGVyYXRvcjsKKworICAgICAgX0RlcXVlX2Jhc2UoKQorICAgICAgOiBfTV9pbXBsKCkKKyAgICAgIHsgX01faW5pdGlhbGl6ZV9tYXAoMCk7IH0KKworICAgICAgX0RlcXVlX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSwgc2l6ZV90IF9fbnVtX2VsZW1lbnRzKQorICAgICAgOiBfTV9pbXBsKF9fYSkKKyAgICAgIHsgX01faW5pdGlhbGl6ZV9tYXAoX19udW1fZWxlbWVudHMpOyB9CisKKyAgICAgIF9EZXF1ZV9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCisgICAgICA6IF9NX2ltcGwoX19hKQorICAgICAgeyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgX0RlcXVlX2Jhc2UoX0RlcXVlX2Jhc2UmJiBfX3gpCisgICAgICA6IF9NX2ltcGwoX194Ll9NX2dldF9UcF9hbGxvY2F0b3IoKSkKKyAgICAgIHsKKwlfTV9pbml0aWFsaXplX21hcCgwKTsKKwlpZiAoX194Ll9NX2ltcGwuX01fbWFwKQorCSAgeworCSAgICBzdGQ6OnN3YXAodGhpcy0+X01faW1wbC5fTV9zdGFydCwgX194Ll9NX2ltcGwuX01fc3RhcnQpOworCSAgICBzdGQ6OnN3YXAodGhpcy0+X01faW1wbC5fTV9maW5pc2gsIF9feC5fTV9pbXBsLl9NX2ZpbmlzaCk7CisJICAgIHN0ZDo6c3dhcCh0aGlzLT5fTV9pbXBsLl9NX21hcCwgX194Ll9NX2ltcGwuX01fbWFwKTsKKwkgICAgc3RkOjpzd2FwKHRoaXMtPl9NX2ltcGwuX01fbWFwX3NpemUsIF9feC5fTV9pbXBsLl9NX21hcF9zaXplKTsKKwkgIH0KKyAgICAgIH0KKyNlbmRpZgorCisgICAgICB+X0RlcXVlX2Jhc2UoKTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgIC8vVGhpcyBzdHJ1Y3QgZW5jYXBzdWxhdGVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3RkOjpkZXF1ZQorICAgICAgLy9zdGFuZGFyZCBjb250YWluZXIgYW5kIGF0IHRoZSBzYW1lIHRpbWUgbWFrZXMgdXNlIG9mIHRoZSBFQk8KKyAgICAgIC8vZm9yIGVtcHR5IGFsbG9jYXRvcnMuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPF9UcCo+OjpvdGhlciBfTWFwX2FsbG9jX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3RoZXIgIF9UcF9hbGxvY190eXBlOworCisgICAgICBzdHJ1Y3QgX0RlcXVlX2ltcGwKKyAgICAgIDogcHVibGljIF9UcF9hbGxvY190eXBlCisgICAgICB7CisJX1RwKiogX01fbWFwOworCXNpemVfdCBfTV9tYXBfc2l6ZTsKKwlpdGVyYXRvciBfTV9zdGFydDsKKwlpdGVyYXRvciBfTV9maW5pc2g7CisKKwlfRGVxdWVfaW1wbCgpCisJOiBfVHBfYWxsb2NfdHlwZSgpLCBfTV9tYXAoMCksIF9NX21hcF9zaXplKDApLAorCSAgX01fc3RhcnQoKSwgX01fZmluaXNoKCkKKwl7IH0KKworCV9EZXF1ZV9pbXBsKGNvbnN0IF9UcF9hbGxvY190eXBlJiBfX2EpCisJOiBfVHBfYWxsb2NfdHlwZShfX2EpLCBfTV9tYXAoMCksIF9NX21hcF9zaXplKDApLAorCSAgX01fc3RhcnQoKSwgX01fZmluaXNoKCkKKwl7IH0KKyAgICAgIH07CisKKyAgICAgIF9UcF9hbGxvY190eXBlJgorICAgICAgX01fZ2V0X1RwX2FsbG9jYXRvcigpCisgICAgICB7IHJldHVybiAqc3RhdGljX2Nhc3Q8X1RwX2FsbG9jX3R5cGUqPigmdGhpcy0+X01faW1wbCk7IH0KKworICAgICAgY29uc3QgX1RwX2FsbG9jX3R5cGUmCisgICAgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICpzdGF0aWNfY2FzdDxjb25zdCBfVHBfYWxsb2NfdHlwZSo+KCZ0aGlzLT5fTV9pbXBsKTsgfQorCisgICAgICBfTWFwX2FsbG9jX3R5cGUKKyAgICAgIF9NX2dldF9tYXBfYWxsb2NhdG9yKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NYXBfYWxsb2NfdHlwZShfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOyB9CisKKyAgICAgIF9UcCoKKyAgICAgIF9NX2FsbG9jYXRlX25vZGUoKQorICAgICAgeyAKKwlyZXR1cm4gX01faW1wbC5fVHBfYWxsb2NfdHlwZTo6YWxsb2NhdGUoX19kZXF1ZV9idWZfc2l6ZShzaXplb2YoX1RwKSkpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9kZWFsbG9jYXRlX25vZGUoX1RwKiBfX3ApCisgICAgICB7CisJX01faW1wbC5fVHBfYWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIF9fZGVxdWVfYnVmX3NpemUoc2l6ZW9mKF9UcCkpKTsKKyAgICAgIH0KKworICAgICAgX1RwKioKKyAgICAgIF9NX2FsbG9jYXRlX21hcChzaXplX3QgX19uKQorICAgICAgeyByZXR1cm4gX01fZ2V0X21hcF9hbGxvY2F0b3IoKS5hbGxvY2F0ZShfX24pOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RlYWxsb2NhdGVfbWFwKF9UcCoqIF9fcCwgc2l6ZV90IF9fbikKKyAgICAgIHsgX01fZ2V0X21hcF9hbGxvY2F0b3IoKS5kZWFsbG9jYXRlKF9fcCwgX19uKTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgdm9pZCBfTV9pbml0aWFsaXplX21hcChzaXplX3QpOworICAgICAgdm9pZCBfTV9jcmVhdGVfbm9kZXMoX1RwKiogX19uc3RhcnQsIF9UcCoqIF9fbmZpbmlzaCk7CisgICAgICB2b2lkIF9NX2Rlc3Ryb3lfbm9kZXMoX1RwKiogX19uc3RhcnQsIF9UcCoqIF9fbmZpbmlzaCk7CisgICAgICBlbnVtIHsgX1NfaW5pdGlhbF9tYXBfc2l6ZSA9IDggfTsKKworICAgICAgX0RlcXVlX2ltcGwgX01faW1wbDsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIF9EZXF1ZV9iYXNlPF9UcCwgX0FsbG9jPjo6CisgICAgfl9EZXF1ZV9iYXNlKCkKKyAgICB7CisgICAgICBpZiAodGhpcy0+X01faW1wbC5fTV9tYXApCisJeworCSAgX01fZGVzdHJveV9ub2Rlcyh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX25vZGUsCisJCQkgICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9ub2RlICsgMSk7CisJICBfTV9kZWFsbG9jYXRlX21hcCh0aGlzLT5fTV9pbXBsLl9NX21hcCwgdGhpcy0+X01faW1wbC5fTV9tYXBfc2l6ZSk7CisJfQorICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBMYXlvdXQgc3RvcmFnZS4KKyAgICogIEBwYXJhbSAgbnVtX2VsZW1lbnRzICBUaGUgY291bnQgb2YgVCdzIGZvciB3aGljaCB0byBhbGxvY2F0ZSBzcGFjZQorICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGF0IGZpcnN0LgorICAgKiAgQHJldHVybiAgIE5vdGhpbmcuCisgICAqCisgICAqICBUaGUgaW5pdGlhbCB1bmRlcmx5aW5nIG1lbW9yeSBsYXlvdXQgaXMgYSBiaXQgY29tcGxpY2F0ZWQuLi4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIF9EZXF1ZV9iYXNlPF9UcCwgX0FsbG9jPjo6CisgICAgX01faW5pdGlhbGl6ZV9tYXAoc2l6ZV90IF9fbnVtX2VsZW1lbnRzKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdCBfX251bV9ub2RlcyA9IChfX251bV9lbGVtZW50cy8gX19kZXF1ZV9idWZfc2l6ZShzaXplb2YoX1RwKSkKKwkJCQkgICsgMSk7CisKKyAgICAgIHRoaXMtPl9NX2ltcGwuX01fbWFwX3NpemUgPSBzdGQ6Om1heCgoc2l6ZV90KSBfU19pbml0aWFsX21hcF9zaXplLAorCQkJCQkgICBzaXplX3QoX19udW1fbm9kZXMgKyAyKSk7CisgICAgICB0aGlzLT5fTV9pbXBsLl9NX21hcCA9IF9NX2FsbG9jYXRlX21hcCh0aGlzLT5fTV9pbXBsLl9NX21hcF9zaXplKTsKKworICAgICAgLy8gRm9yICJzbWFsbCIgbWFwcyAobmVlZGluZyBsZXNzIHRoYW4gX01fbWFwX3NpemUgbm9kZXMpLCBhbGxvY2F0aW9uCisgICAgICAvLyBzdGFydHMgaW4gdGhlIG1pZGRsZSBlbGVtZW50cyBhbmQgZ3Jvd3Mgb3V0d2FyZHMuICBTbyBuc3RhcnQgbWF5IGJlCisgICAgICAvLyB0aGUgYmVnaW5uaW5nIG9mIF9NX21hcCwgYnV0IGZvciBzbWFsbCBtYXBzIGl0IG1heSBiZSBhcyBmYXIgaW4gYXMKKyAgICAgIC8vIF9NX21hcCszLgorCisgICAgICBfVHAqKiBfX25zdGFydCA9ICh0aGlzLT5fTV9pbXBsLl9NX21hcAorCQkJKyAodGhpcy0+X01faW1wbC5fTV9tYXBfc2l6ZSAtIF9fbnVtX25vZGVzKSAvIDIpOworICAgICAgX1RwKiogX19uZmluaXNoID0gX19uc3RhcnQgKyBfX251bV9ub2RlczsKKworICAgICAgX190cnkKKwl7IF9NX2NyZWF0ZV9ub2RlcyhfX25zdGFydCwgX19uZmluaXNoKTsgfQorICAgICAgX19jYXRjaCguLi4pCisJeworCSAgX01fZGVhbGxvY2F0ZV9tYXAodGhpcy0+X01faW1wbC5fTV9tYXAsIHRoaXMtPl9NX2ltcGwuX01fbWFwX3NpemUpOworCSAgdGhpcy0+X01faW1wbC5fTV9tYXAgPSAwOworCSAgdGhpcy0+X01faW1wbC5fTV9tYXBfc2l6ZSA9IDA7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisKKyAgICAgIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fc2V0X25vZGUoX19uc3RhcnQpOworICAgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fc2V0X25vZGUoX19uZmluaXNoIC0gMSk7CisgICAgICB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX2N1ciA9IF9NX2ltcGwuX01fc3RhcnQuX01fZmlyc3Q7CisgICAgICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9jdXIgPSAodGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fZmlyc3QKKwkJCQkJKyBfX251bV9lbGVtZW50cworCQkJCQklIF9fZGVxdWVfYnVmX3NpemUoc2l6ZW9mKF9UcCkpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIF9EZXF1ZV9iYXNlPF9UcCwgX0FsbG9jPjo6CisgICAgX01fY3JlYXRlX25vZGVzKF9UcCoqIF9fbnN0YXJ0LCBfVHAqKiBfX25maW5pc2gpCisgICAgeworICAgICAgX1RwKiogX19jdXI7CisgICAgICBfX3RyeQorCXsKKwkgIGZvciAoX19jdXIgPSBfX25zdGFydDsgX19jdXIgPCBfX25maW5pc2g7ICsrX19jdXIpCisJICAgICpfX2N1ciA9IHRoaXMtPl9NX2FsbG9jYXRlX25vZGUoKTsKKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBfTV9kZXN0cm95X25vZGVzKF9fbnN0YXJ0LCBfX2N1cik7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBfRGVxdWVfYmFzZTxfVHAsIF9BbGxvYz46OgorICAgIF9NX2Rlc3Ryb3lfbm9kZXMoX1RwKiogX19uc3RhcnQsIF9UcCoqIF9fbmZpbmlzaCkKKyAgICB7CisgICAgICBmb3IgKF9UcCoqIF9fbiA9IF9fbnN0YXJ0OyBfX24gPCBfX25maW5pc2g7ICsrX19uKQorCV9NX2RlYWxsb2NhdGVfbm9kZSgqX19uKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIEEgc3RhbmRhcmQgY29udGFpbmVyIHVzaW5nIGZpeGVkLXNpemUgbWVtb3J5IGFsbG9jYXRpb24gYW5kCisgICAqICBjb25zdGFudC10aW1lIG1hbmlwdWxhdGlvbiBvZiBlbGVtZW50cyBhdCBlaXRoZXIgZW5kLgorICAgKgorICAgKiAgQGluZ3JvdXAgc2VxdWVuY2VzCisgICAqCisgICAqICBNZWV0cyB0aGUgcmVxdWlyZW1lbnRzIG9mIGEgPGEgaHJlZj0idGFibGVzLmh0bWwjNjUiPmNvbnRhaW5lcjwvYT4sIGEKKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sIzY2Ij5yZXZlcnNpYmxlIGNvbnRhaW5lcjwvYT4sIGFuZCBhCisgICAqICA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2NyI+c2VxdWVuY2U8L2E+LCBpbmNsdWRpbmcgdGhlCisgICAqICA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2OCI+b3B0aW9uYWwgc2VxdWVuY2UgcmVxdWlyZW1lbnRzPC9hPi4KKyAgICoKKyAgICogIEluIHByZXZpb3VzIEhQL1NHSSB2ZXJzaW9ucyBvZiBkZXF1ZSwgdGhlcmUgd2FzIGFuIGV4dHJhIHRlbXBsYXRlCisgICAqICBwYXJhbWV0ZXIgc28gdXNlcnMgY291bGQgY29udHJvbCB0aGUgbm9kZSBzaXplLiAgVGhpcyBleHRlbnNpb24gdHVybmVkCisgICAqICBvdXQgdG8gdmlvbGF0ZSB0aGUgQysrIHN0YW5kYXJkIChpdCBjYW4gYmUgZGV0ZWN0ZWQgdXNpbmcgdGVtcGxhdGUKKyAgICogIHRlbXBsYXRlIHBhcmFtZXRlcnMpLCBhbmQgaXQgd2FzIHJlbW92ZWQuCisgICAqCisgICAqICBIZXJlJ3MgaG93IGEgZGVxdWU8VHA+IG1hbmFnZXMgbWVtb3J5LiAgRWFjaCBkZXF1ZSBoYXMgNCBtZW1iZXJzOgorICAgKgorICAgKiAgLSBUcCoqICAgICAgICBfTV9tYXAKKyAgICogIC0gc2l6ZV90ICAgICAgX01fbWFwX3NpemUKKyAgICogIC0gaXRlcmF0b3IgICAgX01fc3RhcnQsIF9NX2ZpbmlzaAorICAgKgorICAgKiAgbWFwX3NpemUgaXMgYXQgbGVhc3QgOC4gICVtYXAgaXMgYW4gYXJyYXkgb2YgbWFwX3NpemUKKyAgICogIHBvaW50ZXJzLXRvLUBhbm9kZXMuICAoVGhlIG5hbWUgJW1hcCBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZQorICAgKiAgc3RkOjptYXAgY2xhc3MsIGFuZCBAYiBub2RlcyBzaG91bGQgbm90IGJlIGNvbmZ1c2VkIHdpdGgKKyAgICogIHN0ZDo6bGlzdCdzIHVzYWdlIG9mIEBhIG5vZGUuKQorICAgKgorICAgKiAgQSBAYSBub2RlIGhhcyBubyBzcGVjaWZpYyB0eXBlIG5hbWUgYXMgc3VjaCwgYnV0IGl0IGlzIHJlZmVycmVkCisgICAqICB0byBhcyBAYSBub2RlIGluIHRoaXMgZmlsZS4gIEl0IGlzIGEgc2ltcGxlIGFycmF5LW9mLVRwLiAgSWYgVHAKKyAgICogIGlzIHZlcnkgbGFyZ2UsIHRoZXJlIHdpbGwgYmUgb25lIFRwIGVsZW1lbnQgcGVyIG5vZGUgKGkuZS4sIGFuCisgICAqICBAYSBhcnJheSBvZiBvbmUpLiAgRm9yIG5vbi1odWdlIFRwJ3MsIG5vZGUgc2l6ZSBpcyBpbnZlcnNlbHkKKyAgICogIHJlbGF0ZWQgdG8gVHAgc2l6ZTogdGhlIGxhcmdlciB0aGUgVHAsIHRoZSBmZXdlciBUcCdzIHdpbGwgZml0CisgICAqICBpbiBhIG5vZGUuICBUaGUgZ29hbCBoZXJlIGlzIHRvIGtlZXAgdGhlIHRvdGFsIHNpemUgb2YgYSBub2RlCisgICAqICByZWxhdGl2ZWx5IHNtYWxsIGFuZCBjb25zdGFudCBvdmVyIGRpZmZlcmVudCBUcCdzLCB0byBpbXByb3ZlCisgICAqICBhbGxvY2F0b3IgZWZmaWNpZW5jeS4KKyAgICoKKyAgICogIE5vdCBldmVyeSBwb2ludGVyIGluIHRoZSAlbWFwIGFycmF5IHdpbGwgcG9pbnQgdG8gYSBub2RlLiAgSWYKKyAgICogIHRoZSBpbml0aWFsIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgZGVxdWUgaXMgc21hbGwsIHRoZQorICAgKiAgL21pZGRsZS8gJW1hcCBwb2ludGVycyB3aWxsIGJlIHZhbGlkLCBhbmQgdGhlIG9uZXMgYXQgdGhlIGVkZ2VzCisgICAqICB3aWxsIGJlIHVudXNlZC4gIFRoaXMgc2FtZSBzaXR1YXRpb24gd2lsbCBhcmlzZSBhcyB0aGUgJW1hcAorICAgKiAgZ3Jvd3M6IGF2YWlsYWJsZSAlbWFwIHBvaW50ZXJzLCBpZiBhbnksIHdpbGwgYmUgb24gdGhlIGVuZHMuICBBcworICAgKiAgbmV3IG5vZGVzIGFyZSBjcmVhdGVkLCBvbmx5IGEgc3Vic2V0IG9mIHRoZSAlbWFwJ3MgcG9pbnRlcnMgbmVlZAorICAgKiAgdG8gYmUgY29waWVkIEBhIG91dHdhcmQuCisgICAqCisgICAqICBDbGFzcyBpbnZhcmlhbnRzOgorICAgKiAtIEZvciBhbnkgbm9uc2luZ3VsYXIgaXRlcmF0b3IgaToKKyAgICogICAgLSBpLm5vZGUgcG9pbnRzIHRvIGEgbWVtYmVyIG9mIHRoZSAlbWFwIGFycmF5LiAgKFllcywgeW91IHJlYWQgdGhhdAorICAgKiAgICAgIGNvcnJlY3RseTogIGkubm9kZSBkb2VzIG5vdCBhY3R1YWxseSBwb2ludCB0byBhIG5vZGUuKSAgVGhlIG1lbWJlciBvZgorICAgKiAgICAgIHRoZSAlbWFwIGFycmF5IGlzIHdoYXQgYWN0dWFsbHkgcG9pbnRzIHRvIHRoZSBub2RlLgorICAgKiAgICAtIGkuZmlyc3QgPT0gKihpLm5vZGUpICAgIChUaGlzIHBvaW50cyB0byB0aGUgbm9kZSAoZmlyc3QgVHAgZWxlbWVudCkuKQorICAgKiAgICAtIGkubGFzdCAgPT0gaS5maXJzdCArIG5vZGVfc2l6ZQorICAgKiAgICAtIGkuY3VyIGlzIGEgcG9pbnRlciBpbiB0aGUgcmFuZ2UgW2kuZmlyc3QsIGkubGFzdCkuICBOT1RFOgorICAgKiAgICAgIHRoZSBpbXBsaWNhdGlvbiBvZiB0aGlzIGlzIHRoYXQgaS5jdXIgaXMgYWx3YXlzIGEgZGVyZWZlcmVuY2VhYmxlCisgICAqICAgICAgcG9pbnRlciwgZXZlbiBpZiBpIGlzIGEgcGFzdC10aGUtZW5kIGl0ZXJhdG9yLgorICAgKiAtIFN0YXJ0IGFuZCBGaW5pc2ggYXJlIGFsd2F5cyBub25zaW5ndWxhciBpdGVyYXRvcnMuICBOT1RFOiB0aGlzCisgICAqIG1lYW5zIHRoYXQgYW4gZW1wdHkgZGVxdWUgbXVzdCBoYXZlIG9uZSBub2RlLCBhIGRlcXVlIHdpdGggPE4KKyAgICogZWxlbWVudHMgKHdoZXJlIE4gaXMgdGhlIG5vZGUgYnVmZmVyIHNpemUpIG11c3QgaGF2ZSBvbmUgbm9kZSwgYQorICAgKiBkZXF1ZSB3aXRoIE4gdGhyb3VnaCAoMk4tMSkgZWxlbWVudHMgbXVzdCBoYXZlIHR3byBub2RlcywgZXRjLgorICAgKiAtIEZvciBldmVyeSBub2RlIG90aGVyIHRoYW4gc3RhcnQubm9kZSBhbmQgZmluaXNoLm5vZGUsIGV2ZXJ5CisgICAqIGVsZW1lbnQgaW4gdGhlIG5vZGUgaXMgYW4gaW5pdGlhbGl6ZWQgb2JqZWN0LiAgSWYgc3RhcnQubm9kZSA9PQorICAgKiBmaW5pc2gubm9kZSwgdGhlbiBbc3RhcnQuY3VyLCBmaW5pc2guY3VyKSBhcmUgaW5pdGlhbGl6ZWQKKyAgICogb2JqZWN0cywgYW5kIHRoZSBlbGVtZW50cyBvdXRzaWRlIHRoYXQgcmFuZ2UgYXJlIHVuaW5pdGlhbGl6ZWQKKyAgICogc3RvcmFnZS4gIE90aGVyd2lzZSwgW3N0YXJ0LmN1ciwgc3RhcnQubGFzdCkgYW5kIFtmaW5pc2guZmlyc3QsCisgICAqIGZpbmlzaC5jdXIpIGFyZSBpbml0aWFsaXplZCBvYmplY3RzLCBhbmQgW3N0YXJ0LmZpcnN0LCBzdGFydC5jdXIpCisgICAqIGFuZCBbZmluaXNoLmN1ciwgZmluaXNoLmxhc3QpIGFyZSB1bmluaXRpYWxpemVkIHN0b3JhZ2UuCisgICAqIC0gWyVtYXAsICVtYXAgKyBtYXBfc2l6ZSkgaXMgYSB2YWxpZCwgbm9uLWVtcHR5IHJhbmdlLgorICAgKiAtIFtzdGFydC5ub2RlLCBmaW5pc2gubm9kZV0gaXMgYSB2YWxpZCByYW5nZSBjb250YWluZWQgd2l0aGluCisgICAqICAgWyVtYXAsICVtYXAgKyBtYXBfc2l6ZSkuCisgICAqIC0gQSBwb2ludGVyIGluIHRoZSByYW5nZSBbJW1hcCwgJW1hcCArIG1hcF9zaXplKSBwb2ludHMgdG8gYW4gYWxsb2NhdGVkCisgICAqICAgbm9kZSBpZiBhbmQgb25seSBpZiB0aGUgcG9pbnRlciBpcyBpbiB0aGUgcmFuZ2UKKyAgICogICBbc3RhcnQubm9kZSwgZmluaXNoLm5vZGVdLgorICAgKgorICAgKiAgSGVyZSdzIHRoZSBtYWdpYzogIG5vdGhpbmcgaW4gZGVxdWUgaXMgQGIgYXdhcmUgb2YgdGhlIGRpc2NvbnRpZ3VvdXMKKyAgICogIHN0b3JhZ2UhCisgICAqCisgICAqICBUaGUgbWVtb3J5IHNldHVwIGFuZCBsYXlvdXQgb2NjdXJzIGluIHRoZSBwYXJlbnQsIF9CYXNlLCBhbmQgdGhlIGl0ZXJhdG9yCisgICAqICBjbGFzcyBpcyBlbnRpcmVseSByZXNwb25zaWJsZSBmb3IgQGEgbGVhcGluZyBmcm9tIG9uZSBub2RlIHRvIHRoZSBuZXh0LgorICAgKiAgQWxsIHRoZSBpbXBsZW1lbnRhdGlvbiByb3V0aW5lcyBmb3IgZGVxdWUgaXRzZWxmIHdvcmsgb25seSB0aHJvdWdoIHRoZQorICAgKiAgc3RhcnQgYW5kIGZpbmlzaCBpdGVyYXRvcnMuICBUaGlzIGtlZXBzIHRoZSByb3V0aW5lcyBzaW1wbGUgYW5kIHNhbmUsCisgICAqICBhbmQgd2UgY2FuIHVzZSBvdGhlciBzdGFuZGFyZCBhbGdvcml0aG1zIGFzIHdlbGwuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jID0gc3RkOjphbGxvY2F0b3I8X1RwPiA+CisgICAgY2xhc3MgZGVxdWUgOiBwcm90ZWN0ZWQgX0RlcXVlX2Jhc2U8X1RwLCBfQWxsb2M+CisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp2YWx1ZV90eXBlICAgICAgICBfQWxsb2NfdmFsdWVfdHlwZTsKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlcyhfVHAsIF9TR0lBc3NpZ25hYmxlQ29uY2VwdCkKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlczIoX1RwLCBfQWxsb2NfdmFsdWVfdHlwZSwgX1NhbWVUeXBlQ29uY2VwdCkKKworICAgICAgdHlwZWRlZiBfRGVxdWVfYmFzZTxfVHAsIF9BbGxvYz4gICAgICAgICAgIF9CYXNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6X1RwX2FsbG9jX3R5cGUJIF9UcF9hbGxvY190eXBlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RwX2FsbG9jX3R5cGU6OnBvaW50ZXIgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcF9hbGxvY190eXBlOjpjb25zdF9wb2ludGVyICAgICBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHBfYWxsb2NfdHlwZTo6cmVmZXJlbmNlICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHBfYWxsb2NfdHlwZTo6Y29uc3RfcmVmZXJlbmNlICAgY29uc3RfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgICAgICAgICAgICAgICAgICAgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciAgICAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gICAgICAgICAgICByZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgcHRyZGlmZl90ICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIF9BbGxvYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmIHBvaW50ZXIqICAgICAgICAgICAgICAgICAgICAgICAgICAgX01hcF9wb2ludGVyOworCisgICAgICBzdGF0aWMgc2l6ZV90IF9TX2J1ZmZlcl9zaXplKCkKKyAgICAgIHsgcmV0dXJuIF9fZGVxdWVfYnVmX3NpemUoc2l6ZW9mKF9UcCkpOyB9CisKKyAgICAgIC8vIEZ1bmN0aW9ucyBjb250cm9sbGluZyBtZW1vcnkgbGF5b3V0LCBhbmQgbm90aGluZyBlbHNlLgorICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2luaXRpYWxpemVfbWFwOworICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2NyZWF0ZV9ub2RlczsKKyAgICAgIHVzaW5nIF9CYXNlOjpfTV9kZXN0cm95X25vZGVzOworICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2FsbG9jYXRlX25vZGU7CisgICAgICB1c2luZyBfQmFzZTo6X01fZGVhbGxvY2F0ZV9ub2RlOworICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2FsbG9jYXRlX21hcDsKKyAgICAgIHVzaW5nIF9CYXNlOjpfTV9kZWFsbG9jYXRlX21hcDsKKyAgICAgIHVzaW5nIF9CYXNlOjpfTV9nZXRfVHBfYWxsb2NhdG9yOworCisgICAgICAvKiogCisgICAgICAgKiAgQSB0b3RhbCBvZiBmb3VyIGRhdGEgbWVtYmVycyBhY2N1bXVsYXRlZCBkb3duIHRoZSBoaWVyYXJjaHkuCisgICAgICAgKiAgTWF5IGJlIGFjY2Vzc2VkIHZpYSBfTV9pbXBsLioKKyAgICAgICAqLworICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2ltcGw7CisKKyAgICBwdWJsaWM6CisgICAgICAvLyBbMjMuMi4xLjFdIGNvbnN0cnVjdC9jb3B5L2Rlc3Ryb3kKKyAgICAgIC8vIChhc3NpZ24oKSBhbmQgZ2V0X2FsbG9jYXRvcigpIGFyZSBhbHNvIGxpc3RlZCBpbiB0aGlzIHNlY3Rpb24pCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIERlZmF1bHQgY29uc3RydWN0b3IgY3JlYXRlcyBubyBlbGVtZW50cy4KKyAgICAgICAqLworICAgICAgZGVxdWUoKQorICAgICAgOiBfQmFzZSgpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENyZWF0ZXMgYSAlZGVxdWUgd2l0aCBubyBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gIGEgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBkZXF1ZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQorICAgICAgOiBfQmFzZShfX2EsIDApIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENyZWF0ZXMgYSAlZGVxdWUgd2l0aCBjb3BpZXMgb2YgYW4gZXhlbXBsYXIgZWxlbWVudC4KKyAgICAgICAqICBAcGFyYW0gIG4gIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gaW5pdGlhbGx5IGNyZWF0ZS4KKyAgICAgICAqICBAcGFyYW0gIHZhbHVlICBBbiBlbGVtZW50IHRvIGNvcHkuCisgICAgICAgKiAgQHBhcmFtICBhICBBbiBhbGxvY2F0b3IuCisgICAgICAgKgorICAgICAgICogIFRoaXMgY29uc3RydWN0b3IgZmlsbHMgdGhlICVkZXF1ZSB3aXRoIEBhIG4gY29waWVzIG9mIEBhIHZhbHVlLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgZGVxdWUoc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX192YWx1ZSA9IHZhbHVlX3R5cGUoKSwKKwkgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fYSwgX19uKQorICAgICAgeyBfTV9maWxsX2luaXRpYWxpemUoX192YWx1ZSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlRGVxdWUgY29weSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqICBAcGFyYW0gIHggIEEgJWRlcXVlIG9mIGlkZW50aWNhbCBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoZSBuZXdseS1jcmVhdGVkICVkZXF1ZSB1c2VzIGEgY29weSBvZiB0aGUgYWxsb2NhdGlvbiBvYmplY3QgdXNlZAorICAgICAgICogIGJ5IEBhIHguCisgICAgICAgKi8KKyAgICAgIGRlcXVlKGNvbnN0IGRlcXVlJiBfX3gpCisgICAgICA6IF9CYXNlKF9feC5fTV9nZXRfVHBfYWxsb2NhdG9yKCksIF9feC5zaXplKCkpCisgICAgICB7IHN0ZDo6X191bmluaXRpYWxpemVkX2NvcHlfYShfX3guYmVnaW4oKSwgX194LmVuZCgpLCAKKwkJCQkgICAgdGhpcy0+X01faW1wbC5fTV9zdGFydCwKKwkJCQkgICAgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJURlcXVlIG1vdmUgY29uc3RydWN0b3IuCisgICAgICAgKiAgQHBhcmFtICB4ICBBICVkZXF1ZSBvZiBpZGVudGljYWwgZWxlbWVudCBhbmQgYWxsb2NhdG9yIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBUaGUgbmV3bHktY3JlYXRlZCAlZGVxdWUgY29udGFpbnMgdGhlIGV4YWN0IGNvbnRlbnRzIG9mIEBhIHguCisgICAgICAgKiAgVGhlIGNvbnRlbnRzIG9mIEBhIHggYXJlIGEgdmFsaWQsIGJ1dCB1bnNwZWNpZmllZCAlZGVxdWUuCisgICAgICAgKi8KKyAgICAgIGRlcXVlKGRlcXVlJiYgIF9feCkKKyAgICAgIDogX0Jhc2Uoc3RkOjpmb3J3YXJkPF9CYXNlPihfX3gpKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBCdWlsZHMgYSAlZGVxdWUgZnJvbSBhbiBpbml0aWFsaXplciBsaXN0LgorICAgICAgICogIEBwYXJhbSAgbCAgQW4gaW5pdGlhbGl6ZXJfbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIGEgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKgorICAgICAgICogIENyZWF0ZSBhICVkZXF1ZSBjb25zaXN0aW5nIG9mIGNvcGllcyBvZiB0aGUgZWxlbWVudHMgaW4gdGhlCisgICAgICAgKiAgaW5pdGlhbGl6ZXJfbGlzdCBAYSBsLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIHdpbGwgY2FsbCB0aGUgZWxlbWVudCB0eXBlJ3MgY29weSBjb25zdHJ1Y3RvciBOIHRpbWVzCisgICAgICAgKiAgKHdoZXJlIE4gaXMgbC5zaXplKCkpIGFuZCBkbyBubyBtZW1vcnkgcmVhbGxvY2F0aW9uLgorICAgICAgICovCisgICAgICBkZXF1ZShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCwKKwkgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfQmFzZShfX2EpCisgICAgICAgIHsKKwkgIF9NX3JhbmdlX2luaXRpYWxpemUoX19sLmJlZ2luKCksIF9fbC5lbmQoKSwKKwkJCSAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKCkpOworCX0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEJ1aWxkcyBhICVkZXF1ZSBmcm9tIGEgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtICBmaXJzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBsYXN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIGEgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKgorICAgICAgICogIENyZWF0ZSBhICVkZXF1ZSBjb25zaXN0aW5nIG9mIGNvcGllcyBvZiB0aGUgZWxlbWVudHMgZnJvbSBbZmlyc3QsCisgICAgICAgKiAgbGFzdCkuCisgICAgICAgKgorICAgICAgICogIElmIHRoZSBpdGVyYXRvcnMgYXJlIGZvcndhcmQsIGJpZGlyZWN0aW9uYWwsIG9yIHJhbmRvbS1hY2Nlc3MsIHRoZW4KKyAgICAgICAqICB0aGlzIHdpbGwgY2FsbCB0aGUgZWxlbWVudHMnIGNvcHkgY29uc3RydWN0b3IgTiB0aW1lcyAod2hlcmUgTiBpcworICAgICAgICogIGRpc3RhbmNlKGZpcnN0LGxhc3QpKSBhbmQgZG8gbm8gbWVtb3J5IHJlYWxsb2NhdGlvbi4gIEJ1dCBpZiBvbmx5CisgICAgICAgKiAgaW5wdXQgaXRlcmF0b3JzIGFyZSB1c2VkLCB0aGVuIHRoaXMgd2lsbCBkbyBhdCBtb3N0IDJOIGNhbGxzIHRvIHRoZQorICAgICAgICogIGNvcHkgY29uc3RydWN0b3IsIGFuZCBsb2dOIG1lbW9yeSByZWFsbG9jYXRpb25zLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgZGVxdWUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCSAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX0Jhc2UoX19hKQorICAgICAgICB7CisJICAvLyBDaGVjayB3aGV0aGVyIGl0J3MgYW4gaW50ZWdyYWwgdHlwZS4gIElmIHNvLCBpdCdzIG5vdCBhbiBpdGVyYXRvci4KKwkgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpfX2lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfX3R5cGUgX0ludGVncmFsOworCSAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKKwl9CisKKyAgICAgIC8qKgorICAgICAgICogIFRoZSBkdG9yIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50cywgYW5kIG5vdGUgdGhhdCBpZiB0aGUgZWxlbWVudHMKKyAgICAgICAqICB0aGVtc2VsdmVzIGFyZSBwb2ludGVycywgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkIGluIGFueQorICAgICAgICogIHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIH5kZXF1ZSgpCisgICAgICB7IF9NX2Rlc3Ryb3lfZGF0YShiZWdpbigpLCBlbmQoKSwgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgICVEZXF1ZSBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgeCAgQSAlZGVxdWUgb2YgaWRlbnRpY2FsIGVsZW1lbnQgYW5kIGFsbG9jYXRvciB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgQWxsIHRoZSBlbGVtZW50cyBvZiBAYSB4IGFyZSBjb3BpZWQsIGJ1dCB1bmxpa2UgdGhlIGNvcHkgY29uc3RydWN0b3IsCisgICAgICAgKiAgdGhlIGFsbG9jYXRvciBvYmplY3QgaXMgbm90IGNvcGllZC4KKyAgICAgICAqLworICAgICAgZGVxdWUmCisgICAgICBvcGVyYXRvcj0oY29uc3QgZGVxdWUmIF9feCk7CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlRGVxdWUgbW92ZSBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgeCAgQSAlZGVxdWUgb2YgaWRlbnRpY2FsIGVsZW1lbnQgYW5kIGFsbG9jYXRvciB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGNvbnRlbnRzIG9mIEBhIHggYXJlIG1vdmVkIGludG8gdGhpcyBkZXF1ZSAod2l0aG91dCBjb3B5aW5nKS4KKyAgICAgICAqICBAYSB4IGlzIGEgdmFsaWQsIGJ1dCB1bnNwZWNpZmllZCAlZGVxdWUuCisgICAgICAgKi8KKyAgICAgIGRlcXVlJgorICAgICAgb3BlcmF0b3I9KGRlcXVlJiYgX194KQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorCS8vIE5COiBEUiA2NzUuCisJdGhpcy0+Y2xlYXIoKTsKKwl0aGlzLT5zd2FwKF9feCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFzc2lnbnMgYW4gaW5pdGlhbGl6ZXIgbGlzdCB0byBhICVkZXF1ZS4KKyAgICAgICAqICBAcGFyYW0gIGwgIEFuIGluaXRpYWxpemVyX2xpc3QuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZmlsbHMgYSAlZGVxdWUgd2l0aCBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGluIHRoZQorICAgICAgICogIGluaXRpYWxpemVyX2xpc3QgQGEgbC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZSB0aGF0IHRoZSBhc3NpZ25tZW50IGNvbXBsZXRlbHkgY2hhbmdlcyB0aGUgJWRlcXVlIGFuZCB0aGF0IHRoZQorICAgICAgICogIHJlc3VsdGluZyAlZGVxdWUncyBzaXplIGlzIHRoZSBzYW1lIGFzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMKKyAgICAgICAqICBhc3NpZ25lZC4gIE9sZCBkYXRhIG1heSBiZSBsb3N0LgorICAgICAgICovCisgICAgICBkZXF1ZSYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwl0aGlzLT5hc3NpZ24oX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXNzaWducyBhIGdpdmVuIHZhbHVlIHRvIGEgJWRlcXVlLgorICAgICAgICogIEBwYXJhbSAgbiAgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIGJlIGFzc2lnbmVkLgorICAgICAgICogIEBwYXJhbSAgdmFsICBWYWx1ZSB0byBiZSBhc3NpZ25lZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBmaWxscyBhICVkZXF1ZSB3aXRoIEBhIG4gY29waWVzIG9mIHRoZSBnaXZlbgorICAgICAgICogIHZhbHVlLiAgTm90ZSB0aGF0IHRoZSBhc3NpZ25tZW50IGNvbXBsZXRlbHkgY2hhbmdlcyB0aGUKKyAgICAgICAqICAlZGVxdWUgYW5kIHRoYXQgdGhlIHJlc3VsdGluZyAlZGVxdWUncyBzaXplIGlzIHRoZSBzYW1lIGFzCisgICAgICAgKiAgdGhlIG51bWJlciBvZiBlbGVtZW50cyBhc3NpZ25lZC4gIE9sZCBkYXRhIG1heSBiZSBsb3N0LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX192YWwpCisgICAgICB7IF9NX2ZpbGxfYXNzaWduKF9fbiwgX192YWwpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXNzaWducyBhIHJhbmdlIHRvIGEgJWRlcXVlLgorICAgICAgICogIEBwYXJhbSAgZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgbGFzdCAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGZpbGxzIGEgJWRlcXVlIHdpdGggY29waWVzIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUKKyAgICAgICAqICByYW5nZSBbZmlyc3QsbGFzdCkuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhhdCB0aGUgYXNzaWdubWVudCBjb21wbGV0ZWx5IGNoYW5nZXMgdGhlICVkZXF1ZSBhbmQgdGhhdCB0aGUKKyAgICAgICAqICByZXN1bHRpbmcgJWRlcXVlJ3Mgc2l6ZSBpcyB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzCisgICAgICAgKiAgYXNzaWduZWQuICBPbGQgZGF0YSBtYXkgYmUgbG9zdC4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeworCSAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Ol9faXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9fdHlwZSBfSW50ZWdyYWw7CisJICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CisJfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXNzaWducyBhbiBpbml0aWFsaXplciBsaXN0IHRvIGEgJWRlcXVlLgorICAgICAgICogIEBwYXJhbSAgbCAgQW4gaW5pdGlhbGl6ZXJfbGlzdC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBmaWxscyBhICVkZXF1ZSB3aXRoIGNvcGllcyBvZiB0aGUgZWxlbWVudHMgaW4gdGhlCisgICAgICAgKiAgaW5pdGlhbGl6ZXJfbGlzdCBAYSBsLgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgdGhlIGFzc2lnbm1lbnQgY29tcGxldGVseSBjaGFuZ2VzIHRoZSAlZGVxdWUgYW5kIHRoYXQgdGhlCisgICAgICAgKiAgcmVzdWx0aW5nICVkZXF1ZSdzIHNpemUgaXMgdGhlIHNhbWUgYXMgdGhlIG51bWJlciBvZiBlbGVtZW50cworICAgICAgICogIGFzc2lnbmVkLiAgT2xkIGRhdGEgbWF5IGJlIGxvc3QuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGFzc2lnbihpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsgdGhpcy0+YXNzaWduKF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOyB9CisjZW5kaWYKKworICAgICAgLy8vIEdldCBhIGNvcHkgb2YgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIG9iamVjdC4KKyAgICAgIGFsbG9jYXRvcl90eXBlCisgICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0KKworICAgICAgLy8gaXRlcmF0b3JzCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUKKyAgICAgICAqICAlZGVxdWUuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBvcmRpbmFyeSBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKQorICAgICAgeyByZXR1cm4gdGhpcy0+X01faW1wbC5fTV9zdGFydDsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGZpcnN0CisgICAgICAgKiAgZWxlbWVudCBpbiB0aGUgJWRlcXVlLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gb3JkaW5hcnkgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQ7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgaXRlcmF0b3IgdGhhdCBwb2ludHMgb25lIHBhc3QgdGhlIGxhc3QKKyAgICAgICAqICBlbGVtZW50IGluIHRoZSAlZGVxdWUuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBvcmRpbmFyeQorICAgICAgICogIGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKQorICAgICAgeyByZXR1cm4gdGhpcy0+X01faW1wbC5fTV9maW5pc2g7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIG9uZSBwYXN0CisgICAgICAgKiAgdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgJWRlcXVlLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4KKyAgICAgICAqICBvcmRpbmFyeSBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlCisgICAgICAgKiAgbGFzdCBlbGVtZW50IGluIHRoZSAlZGVxdWUuICBJdGVyYXRpb24gaXMgZG9uZSBpbiByZXZlcnNlCisgICAgICAgKiAgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+X01faW1wbC5fTV9maW5pc2gpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzCisgICAgICAgKiAgdG8gdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgJWRlcXVlLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4KKyAgICAgICAqICByZXZlcnNlIGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIG9uZQorICAgICAgICogIGJlZm9yZSB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgJWRlcXVlLiAgSXRlcmF0aW9uIGlzIGRvbmUKKyAgICAgICAqICBpbiByZXZlcnNlIGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cworICAgICAgICogIHRvIG9uZSBiZWZvcmUgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlICVkZXF1ZS4gIEl0ZXJhdGlvbiBpcworICAgICAgICogIGRvbmUgaW4gcmV2ZXJzZSBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+X01faW1wbC5fTV9zdGFydCk7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGZpcnN0CisgICAgICAgKiAgZWxlbWVudCBpbiB0aGUgJWRlcXVlLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gb3JkaW5hcnkgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0OyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyBvbmUgcGFzdAorICAgICAgICogIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlICVkZXF1ZS4gIEl0ZXJhdGlvbiBpcyBkb25lIGluCisgICAgICAgKiAgb3JkaW5hcnkgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01faW1wbC5fTV9maW5pc2g7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMKKyAgICAgICAqICB0byB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSAlZGVxdWUuICBJdGVyYXRpb24gaXMgZG9uZSBpbgorICAgICAgICogIHJldmVyc2UgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cworICAgICAgICogIHRvIG9uZSBiZWZvcmUgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlICVkZXF1ZS4gIEl0ZXJhdGlvbiBpcworICAgICAgICogIGRvbmUgaW4gcmV2ZXJzZSBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjcmVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQpOyB9CisjZW5kaWYKKworICAgICAgLy8gWzIzLjIuMS4yXSBjYXBhY2l0eQorICAgICAgLyoqICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlICVkZXF1ZS4gICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIHNpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01faW1wbC5fTV9maW5pc2ggLSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0OyB9CisKKyAgICAgIC8qKiAgUmV0dXJucyB0aGUgc2l6ZSgpIG9mIHRoZSBsYXJnZXN0IHBvc3NpYmxlICVkZXF1ZS4gICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2dldF9UcF9hbGxvY2F0b3IoKS5tYXhfc2l6ZSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVzaXplcyB0aGUgJWRlcXVlIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGVsZW1lbnRzLgorICAgICAgICogIEBwYXJhbSAgbmV3X3NpemUgIE51bWJlciBvZiBlbGVtZW50cyB0aGUgJWRlcXVlIHNob3VsZCBjb250YWluLgorICAgICAgICogIEBwYXJhbSAgeCAgRGF0YSB3aXRoIHdoaWNoIG5ldyBlbGVtZW50cyBzaG91bGQgYmUgcG9wdWxhdGVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgJXJlc2l6ZSB0aGUgJWRlcXVlIHRvIHRoZSBzcGVjaWZpZWQKKyAgICAgICAqICBudW1iZXIgb2YgZWxlbWVudHMuICBJZiB0aGUgbnVtYmVyIGlzIHNtYWxsZXIgdGhhbiB0aGUKKyAgICAgICAqICAlZGVxdWUncyBjdXJyZW50IHNpemUgdGhlICVkZXF1ZSBpcyB0cnVuY2F0ZWQsIG90aGVyd2lzZSB0aGUKKyAgICAgICAqICAlZGVxdWUgaXMgZXh0ZW5kZWQgYW5kIG5ldyBlbGVtZW50cyBhcmUgcG9wdWxhdGVkIHdpdGggZ2l2ZW4KKyAgICAgICAqICBkYXRhLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIHZhbHVlX3R5cGUgX194ID0gdmFsdWVfdHlwZSgpKQorICAgICAgeworCWNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKTsKKwlpZiAoX19uZXdfc2l6ZSA8IF9fbGVuKQorCSAgX01fZXJhc2VfYXRfZW5kKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgKyBkaWZmZXJlbmNlX3R5cGUoX19uZXdfc2l6ZSkpOworCWVsc2UKKwkgIGluc2VydCh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwgX19uZXdfc2l6ZSAtIF9fbGVuLCBfX3gpOworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKiAgQSBub24tYmluZGluZyByZXF1ZXN0IHRvIHJlZHVjZSBtZW1vcnkgdXNlLiAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHNocmlua190b19maXQoKQorICAgICAgeyBzdGQ6Ol9fc2hyaW5rX3RvX2ZpdDxkZXF1ZT46Ol9TX2RvX2l0KCp0aGlzKTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgdHJ1ZSBpZiB0aGUgJWRlcXVlIGlzIGVtcHR5LiAgKFRodXMgYmVnaW4oKSB3b3VsZAorICAgICAgICogIGVxdWFsIGVuZCgpLikKKyAgICAgICAqLworICAgICAgYm9vbAorICAgICAgZW1wdHkoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01faW1wbC5fTV9maW5pc2ggPT0gdGhpcy0+X01faW1wbC5fTV9zdGFydDsgfQorCisgICAgICAvLyBlbGVtZW50IGFjY2VzcworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFN1YnNjcmlwdCBhY2Nlc3MgdG8gdGhlIGRhdGEgY29udGFpbmVkIGluIHRoZSAlZGVxdWUuCisgICAgICAgKiAgQHBhcmFtIG4gVGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IGZvciB3aGljaCBkYXRhIHNob3VsZCBiZQorICAgICAgICogIGFjY2Vzc2VkLgorICAgICAgICogIEByZXR1cm4gIFJlYWQvd3JpdGUgcmVmZXJlbmNlIHRvIGRhdGEuCisgICAgICAgKgorICAgICAgICogIFRoaXMgb3BlcmF0b3IgYWxsb3dzIGZvciBlYXN5LCBhcnJheS1zdHlsZSwgZGF0YSBhY2Nlc3MuCisgICAgICAgKiAgTm90ZSB0aGF0IGRhdGEgYWNjZXNzIHdpdGggdGhpcyBvcGVyYXRvciBpcyB1bmNoZWNrZWQgYW5kCisgICAgICAgKiAgb3V0X29mX3JhbmdlIGxvb2t1cHMgYXJlIG5vdCBkZWZpbmVkLiAoRm9yIGNoZWNrZWQgbG9va3VwcworICAgICAgICogIHNlZSBhdCgpLikKKyAgICAgICAqLworICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pCisgICAgICB7IHJldHVybiB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0W2RpZmZlcmVuY2VfdHlwZShfX24pXTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgU3Vic2NyaXB0IGFjY2VzcyB0byB0aGUgZGF0YSBjb250YWluZWQgaW4gdGhlICVkZXF1ZS4KKyAgICAgICAqICBAcGFyYW0gbiBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgZm9yIHdoaWNoIGRhdGEgc2hvdWxkIGJlCisgICAgICAgKiAgYWNjZXNzZWQuCisgICAgICAgKiAgQHJldHVybiAgUmVhZC1vbmx5IChjb25zdGFudCkgcmVmZXJlbmNlIHRvIGRhdGEuCisgICAgICAgKgorICAgICAgICogIFRoaXMgb3BlcmF0b3IgYWxsb3dzIGZvciBlYXN5LCBhcnJheS1zdHlsZSwgZGF0YSBhY2Nlc3MuCisgICAgICAgKiAgTm90ZSB0aGF0IGRhdGEgYWNjZXNzIHdpdGggdGhpcyBvcGVyYXRvciBpcyB1bmNoZWNrZWQgYW5kCisgICAgICAgKiAgb3V0X29mX3JhbmdlIGxvb2t1cHMgYXJlIG5vdCBkZWZpbmVkLiAoRm9yIGNoZWNrZWQgbG9va3VwcworICAgICAgICogIHNlZSBhdCgpLikKKyAgICAgICAqLworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0W2RpZmZlcmVuY2VfdHlwZShfX24pXTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgLy8vIFNhZmV0eSBjaGVjayB1c2VkIG9ubHkgZnJvbSBhdCgpLgorICAgICAgdm9pZAorICAgICAgX01fcmFuZ2VfY2hlY2soc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsKKwlpZiAoX19uID49IHRoaXMtPnNpemUoKSkKKwkgIF9fdGhyb3dfb3V0X29mX3JhbmdlKF9fTigiZGVxdWU6Ol9NX3JhbmdlX2NoZWNrIikpOworICAgICAgfQorCisgICAgcHVibGljOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGRhdGEgY29udGFpbmVkIGluIHRoZSAlZGVxdWUuCisgICAgICAgKiAgQHBhcmFtIG4gVGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IGZvciB3aGljaCBkYXRhIHNob3VsZCBiZQorICAgICAgICogIGFjY2Vzc2VkLgorICAgICAgICogIEByZXR1cm4gIFJlYWQvd3JpdGUgcmVmZXJlbmNlIHRvIGRhdGEuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgQGEgbiBpcyBhbiBpbnZhbGlkIGluZGV4LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGZvciBzYWZlciBkYXRhIGFjY2Vzcy4gIFRoZSBwYXJhbWV0ZXIKKyAgICAgICAqICBpcyBmaXJzdCBjaGVja2VkIHRoYXQgaXQgaXMgaW4gdGhlIHJhbmdlIG9mIHRoZSBkZXF1ZS4gIFRoZQorICAgICAgICogIGZ1bmN0aW9uIHRocm93cyBvdXRfb2ZfcmFuZ2UgaWYgdGhlIGNoZWNrIGZhaWxzLgorICAgICAgICovCisgICAgICByZWZlcmVuY2UKKyAgICAgIGF0KHNpemVfdHlwZSBfX24pCisgICAgICB7CisJX01fcmFuZ2VfY2hlY2soX19uKTsKKwlyZXR1cm4gKCp0aGlzKVtfX25dOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgZGF0YSBjb250YWluZWQgaW4gdGhlICVkZXF1ZS4KKyAgICAgICAqICBAcGFyYW0gbiBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgZm9yIHdoaWNoIGRhdGEgc2hvdWxkIGJlCisgICAgICAgKiAgYWNjZXNzZWQuCisgICAgICAgKiAgQHJldHVybiAgUmVhZC1vbmx5IChjb25zdGFudCkgcmVmZXJlbmNlIHRvIGRhdGEuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgQGEgbiBpcyBhbiBpbnZhbGlkIGluZGV4LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGZvciBzYWZlciBkYXRhIGFjY2Vzcy4gIFRoZSBwYXJhbWV0ZXIgaXMgZmlyc3QKKyAgICAgICAqICBjaGVja2VkIHRoYXQgaXQgaXMgaW4gdGhlIHJhbmdlIG9mIHRoZSBkZXF1ZS4gIFRoZSBmdW5jdGlvbiB0aHJvd3MKKyAgICAgICAqICBvdXRfb2ZfcmFuZ2UgaWYgdGhlIGNoZWNrIGZhaWxzLgorICAgICAgICovCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7CisJX01fcmFuZ2VfY2hlY2soX19uKTsKKwlyZXR1cm4gKCp0aGlzKVtfX25dOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgYXQgdGhlIGZpcnN0CisgICAgICAgKiAgZWxlbWVudCBvZiB0aGUgJWRlcXVlLgorICAgICAgICovCisgICAgICByZWZlcmVuY2UKKyAgICAgIGZyb250KCkKKyAgICAgIHsgcmV0dXJuICpiZWdpbigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgYXQgdGhlIGZpcnN0CisgICAgICAgKiAgZWxlbWVudCBvZiB0aGUgJWRlcXVlLgorICAgICAgICovCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIGZyb250KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICpiZWdpbigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIHJlZmVyZW5jZSB0byB0aGUgZGF0YSBhdCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZQorICAgICAgICogICVkZXF1ZS4KKyAgICAgICAqLworICAgICAgcmVmZXJlbmNlCisgICAgICBiYWNrKCkKKyAgICAgIHsKKwlpdGVyYXRvciBfX3RtcCA9IGVuZCgpOworCS0tX190bXA7CisJcmV0dXJuICpfX3RtcDsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJlZmVyZW5jZSB0byB0aGUgZGF0YSBhdCB0aGUgbGFzdAorICAgICAgICogIGVsZW1lbnQgb2YgdGhlICVkZXF1ZS4KKyAgICAgICAqLworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBiYWNrKCkgY29uc3QKKyAgICAgIHsKKwljb25zdF9pdGVyYXRvciBfX3RtcCA9IGVuZCgpOworCS0tX190bXA7CisJcmV0dXJuICpfX3RtcDsKKyAgICAgIH0KKworICAgICAgLy8gWzIzLjIuMS4yXSBtb2RpZmllcnMKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQWRkIGRhdGEgdG8gdGhlIGZyb250IG9mIHRoZSAlZGVxdWUuCisgICAgICAgKiAgQHBhcmFtICB4ICBEYXRhIHRvIGJlIGFkZGVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGlzIGEgdHlwaWNhbCBzdGFjayBvcGVyYXRpb24uICBUaGUgZnVuY3Rpb24gY3JlYXRlcyBhbgorICAgICAgICogIGVsZW1lbnQgYXQgdGhlIGZyb250IG9mIHRoZSAlZGVxdWUgYW5kIGFzc2lnbnMgdGhlIGdpdmVuCisgICAgICAgKiAgZGF0YSB0byBpdC4gIER1ZSB0byB0aGUgbmF0dXJlIG9mIGEgJWRlcXVlIHRoaXMgb3BlcmF0aW9uCisgICAgICAgKiAgY2FuIGJlIGRvbmUgaW4gY29uc3RhbnQgdGltZS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcHVzaF9mcm9udChjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7CisJaWYgKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fY3VyICE9IHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fZmlyc3QpCisJICB7CisJICAgIHRoaXMtPl9NX2ltcGwuY29uc3RydWN0KHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fY3VyIC0gMSwgX194KTsKKwkgICAgLS10aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX2N1cjsKKwkgIH0KKwllbHNlCisJICBfTV9wdXNoX2Zyb250X2F1eChfX3gpOworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfZnJvbnQodmFsdWVfdHlwZSYmIF9feCkKKyAgICAgIHsgZW1wbGFjZV9mcm9udChzdGQ6Om1vdmUoX194KSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHZvaWQKKyAgICAgICAgZW1wbGFjZV9mcm9udChfQXJncyYmLi4uIF9fYXJncyk7CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBZGQgZGF0YSB0byB0aGUgZW5kIG9mIHRoZSAlZGVxdWUuCisgICAgICAgKiAgQHBhcmFtICB4ICBEYXRhIHRvIGJlIGFkZGVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGlzIGEgdHlwaWNhbCBzdGFjayBvcGVyYXRpb24uICBUaGUgZnVuY3Rpb24gY3JlYXRlcyBhbgorICAgICAgICogIGVsZW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgJWRlcXVlIGFuZCBhc3NpZ25zIHRoZSBnaXZlbiBkYXRhCisgICAgICAgKiAgdG8gaXQuICBEdWUgdG8gdGhlIG5hdHVyZSBvZiBhICVkZXF1ZSB0aGlzIG9wZXJhdGlvbiBjYW4gYmUKKyAgICAgICAqICBkb25lIGluIGNvbnN0YW50IHRpbWUuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfYmFjayhjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7CisJaWYgKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX2N1cgorCSAgICAhPSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9sYXN0IC0gMSkKKwkgIHsKKwkgICAgdGhpcy0+X01faW1wbC5jb25zdHJ1Y3QodGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fY3VyLCBfX3gpOworCSAgICArK3RoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX2N1cjsKKwkgIH0KKwllbHNlCisJICBfTV9wdXNoX2JhY2tfYXV4KF9feCk7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdm9pZAorICAgICAgcHVzaF9iYWNrKHZhbHVlX3R5cGUmJiBfX3gpCisgICAgICB7IGVtcGxhY2VfYmFjayhzdGQ6Om1vdmUoX194KSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHZvaWQKKyAgICAgICAgZW1wbGFjZV9iYWNrKF9BcmdzJiYuLi4gX19hcmdzKTsKKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZXMgZmlyc3QgZWxlbWVudC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyBhIHR5cGljYWwgc3RhY2sgb3BlcmF0aW9uLiAgSXQgc2hyaW5rcyB0aGUgJWRlcXVlIGJ5IG9uZS4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZSB0aGF0IG5vIGRhdGEgaXMgcmV0dXJuZWQsIGFuZCBpZiB0aGUgZmlyc3QgZWxlbWVudCdzIGRhdGEgaXMKKyAgICAgICAqICBuZWVkZWQsIGl0IHNob3VsZCBiZSByZXRyaWV2ZWQgYmVmb3JlIHBvcF9mcm9udCgpIGlzIGNhbGxlZC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcG9wX2Zyb250KCkKKyAgICAgIHsKKwlpZiAodGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9jdXIKKwkgICAgIT0gdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9sYXN0IC0gMSkKKwkgIHsKKwkgICAgdGhpcy0+X01faW1wbC5kZXN0cm95KHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fY3VyKTsKKwkgICAgKyt0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX2N1cjsKKwkgIH0KKwllbHNlCisJICBfTV9wb3BfZnJvbnRfYXV4KCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVtb3ZlcyBsYXN0IGVsZW1lbnQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgaXMgYSB0eXBpY2FsIHN0YWNrIG9wZXJhdGlvbi4gIEl0IHNocmlua3MgdGhlICVkZXF1ZSBieSBvbmUuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhhdCBubyBkYXRhIGlzIHJldHVybmVkLCBhbmQgaWYgdGhlIGxhc3QgZWxlbWVudCdzIGRhdGEgaXMKKyAgICAgICAqICBuZWVkZWQsIGl0IHNob3VsZCBiZSByZXRyaWV2ZWQgYmVmb3JlIHBvcF9iYWNrKCkgaXMgY2FsbGVkLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwb3BfYmFjaygpCisgICAgICB7CisJaWYgKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX2N1cgorCSAgICAhPSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9maXJzdCkKKwkgIHsKKwkgICAgLS10aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9jdXI7CisJICAgIHRoaXMtPl9NX2ltcGwuZGVzdHJveSh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9jdXIpOworCSAgfQorCWVsc2UKKwkgIF9NX3BvcF9iYWNrX2F1eCgpOworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW5zZXJ0cyBhbiBvYmplY3QgaW4gJWRlcXVlIGJlZm9yZSBzcGVjaWZpZWQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBwb3NpdGlvbiAgQW4gaXRlcmF0b3IgaW50byB0aGUgJWRlcXVlLgorICAgICAgICogIEBwYXJhbSAgYXJncyAgQXJndW1lbnRzLgorICAgICAgICogIEByZXR1cm4gIEFuIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBpbnNlcnRlZCBkYXRhLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgaW5zZXJ0IGFuIG9iamVjdCBvZiB0eXBlIFQgY29uc3RydWN0ZWQKKyAgICAgICAqICB3aXRoIFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSBiZWZvcmUgdGhlIHNwZWNpZmllZCBsb2NhdGlvbi4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIGl0ZXJhdG9yCisgICAgICAgIGVtcGxhY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgX0FyZ3MmJi4uLiBfX2FyZ3MpOworI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW5zZXJ0cyBnaXZlbiB2YWx1ZSBpbnRvICVkZXF1ZSBiZWZvcmUgc3BlY2lmaWVkIGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgcG9zaXRpb24gIEFuIGl0ZXJhdG9yIGludG8gdGhlICVkZXF1ZS4KKyAgICAgICAqICBAcGFyYW0gIHggIERhdGEgdG8gYmUgaW5zZXJ0ZWQuCisgICAgICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGluc2VydGVkIGRhdGEuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBpbnNlcnQgYSBjb3B5IG9mIHRoZSBnaXZlbiB2YWx1ZSBiZWZvcmUgdGhlCisgICAgICAgKiAgc3BlY2lmaWVkIGxvY2F0aW9uLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnRzIGdpdmVuIHJ2YWx1ZSBpbnRvICVkZXF1ZSBiZWZvcmUgc3BlY2lmaWVkIGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgcG9zaXRpb24gIEFuIGl0ZXJhdG9yIGludG8gdGhlICVkZXF1ZS4KKyAgICAgICAqICBAcGFyYW0gIHggIERhdGEgdG8gYmUgaW5zZXJ0ZWQuCisgICAgICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGluc2VydGVkIGRhdGEuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBpbnNlcnQgYSBjb3B5IG9mIHRoZSBnaXZlbiBydmFsdWUgYmVmb3JlIHRoZQorICAgICAgICogIHNwZWNpZmllZCBsb2NhdGlvbi4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCB2YWx1ZV90eXBlJiYgX194KQorICAgICAgeyByZXR1cm4gZW1wbGFjZShfX3Bvc2l0aW9uLCBzdGQ6Om1vdmUoX194KSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnRzIGFuIGluaXRpYWxpemVyIGxpc3QgaW50byB0aGUgJWRlcXVlLgorICAgICAgICogIEBwYXJhbSAgcCAgQW4gaXRlcmF0b3IgaW50byB0aGUgJWRlcXVlLgorICAgICAgICogIEBwYXJhbSAgbCAgQW4gaW5pdGlhbGl6ZXJfbGlzdC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGluc2VydCBjb3BpZXMgb2YgdGhlIGRhdGEgaW4gdGhlCisgICAgICAgKiAgaW5pdGlhbGl6ZXJfbGlzdCBAYSBsIGludG8gdGhlICVkZXF1ZSBiZWZvcmUgdGhlIGxvY2F0aW9uCisgICAgICAgKiAgc3BlY2lmaWVkIGJ5IEBhIHAuICBUaGlzIGlzIGtub3duIGFzIDxlbT5saXN0IGluc2VydDwvZW0+LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsgdGhpcy0+aW5zZXJ0KF9fcCwgX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydHMgYSBudW1iZXIgb2YgY29waWVzIG9mIGdpdmVuIGRhdGEgaW50byB0aGUgJWRlcXVlLgorICAgICAgICogIEBwYXJhbSAgcG9zaXRpb24gIEFuIGl0ZXJhdG9yIGludG8gdGhlICVkZXF1ZS4KKyAgICAgICAqICBAcGFyYW0gIG4gIE51bWJlciBvZiBlbGVtZW50cyB0byBiZSBpbnNlcnRlZC4KKyAgICAgICAqICBAcGFyYW0gIHggIERhdGEgdG8gYmUgaW5zZXJ0ZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBpbnNlcnQgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIGNvcGllcyBvZiB0aGUgZ2l2ZW4KKyAgICAgICAqICBkYXRhIGJlZm9yZSB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGJ5IEBhIHBvc2l0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeyBfTV9maWxsX2luc2VydChfX3Bvc2l0aW9uLCBfX24sIF9feCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnRzIGEgcmFuZ2UgaW50byB0aGUgJWRlcXVlLgorICAgICAgICogIEBwYXJhbSAgcG9zaXRpb24gIEFuIGl0ZXJhdG9yIGludG8gdGhlICVkZXF1ZS4KKyAgICAgICAqICBAcGFyYW0gIGZpcnN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIGxhc3QgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGluc2VydCBjb3BpZXMgb2YgdGhlIGRhdGEgaW4gdGhlIHJhbmdlCisgICAgICAgKiAgW2ZpcnN0LGxhc3QpIGludG8gdGhlICVkZXF1ZSBiZWZvcmUgdGhlIGxvY2F0aW9uIHNwZWNpZmllZAorICAgICAgICogIGJ5IEBhIHBvcy4gIFRoaXMgaXMga25vd24gYXMgPGVtPnJhbmdlIGluc2VydDwvZW0+LgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgX0lucHV0SXRlcmF0b3IgX19maXJzdCwKKwkgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgICB7CisJICAvLyBDaGVjayB3aGV0aGVyIGl0J3MgYW4gaW50ZWdyYWwgdHlwZS4gIElmIHNvLCBpdCdzIG5vdCBhbiBpdGVyYXRvci4KKwkgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpfX2lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfX3R5cGUgX0ludGVncmFsOworCSAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zaXRpb24sIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOworCX0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZW1vdmUgZWxlbWVudCBhdCBnaXZlbiBwb3NpdGlvbi4KKyAgICAgICAqICBAcGFyYW0gIHBvc2l0aW9uICBJdGVyYXRvciBwb2ludGluZyB0byBlbGVtZW50IHRvIGJlIGVyYXNlZC4KKyAgICAgICAqICBAcmV0dXJuICBBbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgbmV4dCBlbGVtZW50IChvciBlbmQoKSkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBlcmFzZSB0aGUgZWxlbWVudCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHRodXMKKyAgICAgICAqICBzaG9ydGVuIHRoZSAlZGVxdWUgYnkgb25lLgorICAgICAgICoKKyAgICAgICAqICBUaGUgdXNlciBpcyBjYXV0aW9uZWQgdGhhdAorICAgICAgICogIHRoaXMgZnVuY3Rpb24gb25seSBlcmFzZXMgdGhlIGVsZW1lbnQsIGFuZCB0aGF0IGlmIHRoZSBlbGVtZW50IGlzCisgICAgICAgKiAgaXRzZWxmIGEgcG9pbnRlciwgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkIGluIGFueSB3YXkuCisgICAgICAgKiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZSBhIHJhbmdlIG9mIGVsZW1lbnRzLgorICAgICAgICogIEBwYXJhbSAgZmlyc3QgIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50IHRvIGJlIGVyYXNlZC4KKyAgICAgICAqICBAcGFyYW0gIGxhc3QgIEl0ZXJhdG9yIHBvaW50aW5nIHRvIG9uZSBwYXN0IHRoZSBsYXN0IGVsZW1lbnQgdG8gYmUKKyAgICAgICAqICAgICAgICAgICAgICAgIGVyYXNlZC4KKyAgICAgICAqICBAcmV0dXJuICBBbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZWxlbWVudCBwb2ludGVkIHRvIGJ5IEBhIGxhc3QKKyAgICAgICAqICAgICAgICAgICBwcmlvciB0byBlcmFzaW5nIChvciBlbmQoKSkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBlcmFzZSB0aGUgZWxlbWVudHMgaW4gdGhlIHJhbmdlIFtmaXJzdCxsYXN0KSBhbmQKKyAgICAgICAqICBzaG9ydGVuIHRoZSAlZGVxdWUgYWNjb3JkaW5nbHkuCisgICAgICAgKgorICAgICAgICogIFRoZSB1c2VyIGlzIGNhdXRpb25lZCB0aGF0CisgICAgICAgKiAgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudHMsIGFuZCB0aGF0IGlmIHRoZSBlbGVtZW50cworICAgICAgICogIHRoZW1zZWx2ZXMgYXJlIHBvaW50ZXJzLCB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQgaW4gYW55CisgICAgICAgKiAgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU3dhcHMgZGF0YSB3aXRoIGFub3RoZXIgJWRlcXVlLgorICAgICAgICogIEBwYXJhbSAgeCAgQSAlZGVxdWUgb2YgdGhlIHNhbWUgZWxlbWVudCBhbmQgYWxsb2NhdG9yIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGV4Y2hhbmdlcyB0aGUgZWxlbWVudHMgYmV0d2VlbiB0d28gZGVxdWVzIGluIGNvbnN0YW50IHRpbWUuCisgICAgICAgKiAgKEZvdXIgcG9pbnRlcnMsIHNvIGl0IHNob3VsZCBiZSBxdWl0ZSBmYXN0LikKKyAgICAgICAqICBOb3RlIHRoYXQgdGhlIGdsb2JhbCBzdGQ6OnN3YXAoKSBmdW5jdGlvbiBpcyBzcGVjaWFsaXplZCBzdWNoIHRoYXQKKyAgICAgICAqICBzdGQ6OnN3YXAoZDEsZDIpIHdpbGwgZmVlZCB0byB0aGlzIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBzd2FwKGRlcXVlJiBfX3gpCisgICAgICB7CisJc3RkOjpzd2FwKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQsIF9feC5fTV9pbXBsLl9NX3N0YXJ0KTsKKwlzdGQ6OnN3YXAodGhpcy0+X01faW1wbC5fTV9maW5pc2gsIF9feC5fTV9pbXBsLl9NX2ZpbmlzaCk7CisJc3RkOjpzd2FwKHRoaXMtPl9NX2ltcGwuX01fbWFwLCBfX3guX01faW1wbC5fTV9tYXApOworCXN0ZDo6c3dhcCh0aGlzLT5fTV9pbXBsLl9NX21hcF9zaXplLCBfX3guX01faW1wbC5fTV9tYXBfc2l6ZSk7CisKKwkvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJLy8gNDMxLiBTd2FwcGluZyBjb250YWluZXJzIHdpdGggdW5lcXVhbCBhbGxvY2F0b3JzLgorCXN0ZDo6X19hbGxvY19zd2FwPF9UcF9hbGxvY190eXBlPjo6X1NfZG9faXQoX01fZ2V0X1RwX2FsbG9jYXRvcigpLAorCQkJCQkJICAgIF9feC5fTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBFcmFzZXMgYWxsIHRoZSBlbGVtZW50cy4gIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZQorICAgICAgICogIGVsZW1lbnRzLCBhbmQgdGhhdCBpZiB0aGUgZWxlbWVudHMgdGhlbXNlbHZlcyBhcmUgcG9pbnRlcnMsIHRoZQorICAgICAgICogIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkIGluIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcworICAgICAgICogIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCkKKyAgICAgIHsgX01fZXJhc2VfYXRfZW5kKGJlZ2luKCkpOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvLyBJbnRlcm5hbCBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgZm9sbG93LgorCisgICAgICAvLyBjYWxsZWQgYnkgdGhlIHJhbmdlIGNvbnN0cnVjdG9yIHRvIGltcGxlbWVudCBbMjMuMS4xXS85CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDQzOC4gQW1iaWd1aXR5IGluIHRoZSAiZG8gdGhlIHJpZ2h0IHRoaW5nIiBjbGF1c2UKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlZ2VyPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsIF9fdHJ1ZV90eXBlKQorICAgICAgICB7CisJICBfTV9pbml0aWFsaXplX21hcChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fbikpOworCSAgX01fZmlsbF9pbml0aWFsaXplKF9feCk7CisJfQorCisgICAgICAvLyBjYWxsZWQgYnkgdGhlIHJhbmdlIGNvbnN0cnVjdG9yIHRvIGltcGxlbWVudCBbMjMuMS4xXS85CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJCSAgICAgICBfX2ZhbHNlX3R5cGUpCisgICAgICAgIHsKKwkgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjoKKwkgICAgaXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJDYXRlZ29yeTsKKwkgIF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfSXRlckNhdGVnb3J5KCkpOworCX0KKworICAgICAgLy8gY2FsbGVkIGJ5IHRoZSBzZWNvbmQgaW5pdGlhbGl6ZV9kaXNwYXRjaCBhYm92ZQorICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEZpbGxzIHRoZSBkZXF1ZSB3aXRoIHdoYXRldmVyIGlzIGluIFtmaXJzdCxsYXN0KS4KKyAgICAgICAqICBAcGFyYW0gIGZpcnN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIGxhc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEByZXR1cm4gICBOb3RoaW5nLgorICAgICAgICoKKyAgICAgICAqICBJZiB0aGUgaXRlcmF0b3JzIGFyZSBhY3R1YWxseSBmb3J3YXJkIGl0ZXJhdG9ycyAob3IgYmV0dGVyKSwgdGhlbiB0aGUKKyAgICAgICAqICBtZW1vcnkgbGF5b3V0IGNhbiBiZSBkb25lIGFsbCBhdCBvbmNlLiAgRWxzZSB3ZSBtb3ZlIGZvcndhcmQgdXNpbmcKKyAgICAgICAqICBwdXNoX2JhY2sgb24gZWFjaCB2YWx1ZSBmcm9tIHRoZSBpdGVyYXRvci4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01fcmFuZ2VfaW5pdGlhbGl6ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCQkgICAgc3RkOjppbnB1dF9pdGVyYXRvcl90YWcpOworCisgICAgICAvLyBjYWxsZWQgYnkgdGhlIHNlY29uZCBpbml0aWFsaXplX2Rpc3BhdGNoIGFib3ZlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkJCSAgICBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnKTsKKyAgICAgIC8vQH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEZpbGxzIHRoZSAlZGVxdWUgd2l0aCBjb3BpZXMgb2YgdmFsdWUuCisgICAgICAgKiAgQHBhcmFtICB2YWx1ZSAgSW5pdGlhbCB2YWx1ZS4KKyAgICAgICAqICBAcmV0dXJuICAgTm90aGluZy4KKyAgICAgICAqICBAcHJlIF9NX3N0YXJ0IGFuZCBfTV9maW5pc2ggaGF2ZSBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQsCisgICAgICAgKiAgYnV0IG5vbmUgb2YgdGhlICVkZXF1ZSdzIGVsZW1lbnRzIGhhdmUgeWV0IGJlZW4gY29uc3RydWN0ZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgd2hlbiB0aGUgdXNlciBwcm92aWRlcyBhbiBleHBsaWNpdCBzaXplCisgICAgICAgKiAgKHdpdGggb3Igd2l0aG91dCBhbiBleHBsaWNpdCBleGVtcGxhciB2YWx1ZSkuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIF9NX2ZpbGxfaW5pdGlhbGl6ZShjb25zdCB2YWx1ZV90eXBlJiBfX3ZhbHVlKTsKKworICAgICAgLy8gSW50ZXJuYWwgYXNzaWduIGZ1bmN0aW9ucyBmb2xsb3cuICBUaGUgKl9hdXggZnVuY3Rpb25zIGRvIHRoZSBhY3R1YWwKKyAgICAgIC8vIGFzc2lnbm1lbnQgd29yayBmb3IgdGhlIHJhbmdlIHZlcnNpb25zLgorCisgICAgICAvLyBjYWxsZWQgYnkgdGhlIHJhbmdlIGFzc2lnbiB0byBpbXBsZW1lbnQgWzIzLjEuMV0vOQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA0MzguIEFtYmlndWl0eSBpbiB0aGUgImRvIHRoZSByaWdodCB0aGluZyIgY2xhdXNlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZWdlcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCisgICAgICAgIHsgX01fZmlsbF9hc3NpZ24oX19uLCBfX3ZhbCk7IH0KKworICAgICAgLy8gY2FsbGVkIGJ5IHRoZSByYW5nZSBhc3NpZ24gdG8gaW1wbGVtZW50IFsyMy4xLjFdLzkKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCQkgICBfX2ZhbHNlX3R5cGUpCisgICAgICAgIHsKKwkgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjoKKwkgICAgaXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJDYXRlZ29yeTsKKwkgIF9NX2Fzc2lnbl9hdXgoX19maXJzdCwgX19sYXN0LCBfSXRlckNhdGVnb3J5KCkpOworCX0KKworICAgICAgLy8gY2FsbGVkIGJ5IHRoZSBzZWNvbmQgYXNzaWduX2Rpc3BhdGNoIGFib3ZlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJICAgICAgc3RkOjppbnB1dF9pdGVyYXRvcl90YWcpOworCisgICAgICAvLyBjYWxsZWQgYnkgdGhlIHNlY29uZCBhc3NpZ25fZGlzcGF0Y2ggYWJvdmUKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQkgICAgICBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnKQorICAgICAgICB7CisJICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CisJICBpZiAoX19sZW4gPiBzaXplKCkpCisJICAgIHsKKwkgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKKwkgICAgICBzdGQ6OmFkdmFuY2UoX19taWQsIHNpemUoKSk7CisJICAgICAgc3RkOjpjb3B5KF9fZmlyc3QsIF9fbWlkLCBiZWdpbigpKTsKKwkgICAgICBpbnNlcnQoZW5kKCksIF9fbWlkLCBfX2xhc3QpOworCSAgICB9CisJICBlbHNlCisJICAgIF9NX2VyYXNlX2F0X2VuZChzdGQ6OmNvcHkoX19maXJzdCwgX19sYXN0LCBiZWdpbigpKSk7CisJfQorCisgICAgICAvLyBDYWxsZWQgYnkgYXNzaWduKG4sdCksIGFuZCB0aGUgcmFuZ2UgYXNzaWduIHdoZW4gaXQgdHVybnMgb3V0CisgICAgICAvLyB0byBiZSB0aGUgc2FtZSB0aGluZy4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2ZpbGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKQorICAgICAgeworCWlmIChfX24gPiBzaXplKCkpCisJICB7CisJICAgIHN0ZDo6ZmlsbChiZWdpbigpLCBlbmQoKSwgX192YWwpOworCSAgICBpbnNlcnQoZW5kKCksIF9fbiAtIHNpemUoKSwgX192YWwpOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgX01fZXJhc2VfYXRfZW5kKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CisJICAgIHN0ZDo6ZmlsbChiZWdpbigpLCBlbmQoKSwgX192YWwpOworCSAgfQorICAgICAgfQorCisgICAgICAvL0B7CisgICAgICAvLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgcHVzaF8qIGFuZCBwb3BfKi4KKyNpZm5kZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHZvaWQgX01fcHVzaF9iYWNrX2F1eChjb25zdCB2YWx1ZV90eXBlJik7CisKKyAgICAgIHZvaWQgX01fcHVzaF9mcm9udF9hdXgoY29uc3QgdmFsdWVfdHlwZSYpOworI2Vsc2UKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICB2b2lkIF9NX3B1c2hfYmFja19hdXgoX0FyZ3MmJi4uLiBfX2FyZ3MpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgdm9pZCBfTV9wdXNoX2Zyb250X2F1eChfQXJncyYmLi4uIF9fYXJncyk7CisjZW5kaWYKKworICAgICAgdm9pZCBfTV9wb3BfYmFja19hdXgoKTsKKworICAgICAgdm9pZCBfTV9wb3BfZnJvbnRfYXV4KCk7CisgICAgICAvL0B9CisKKyAgICAgIC8vIEludGVybmFsIGluc2VydCBmdW5jdGlvbnMgZm9sbG93LiAgVGhlICpfYXV4IGZ1bmN0aW9ucyBkbyB0aGUgYWN0dWFsCisgICAgICAvLyBpbnNlcnRpb24gd29yayB3aGVuIGFsbCBzaG9ydGN1dHMgZmFpbC4KKworICAgICAgLy8gY2FsbGVkIGJ5IHRoZSByYW5nZSBpbnNlcnQgdG8gaW1wbGVtZW50IFsyMy4xLjFdLzkKKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNDM4LiBBbWJpZ3VpdHkgaW4gdGhlICJkbyB0aGUgcmlnaHQgdGhpbmciIGNsYXVzZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVnZXI+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLAorCQkJICAgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsIF9fdHJ1ZV90eXBlKQorICAgICAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7IH0KKworICAgICAgLy8gY2FsbGVkIGJ5IHRoZSByYW5nZSBpbnNlcnQgdG8gaW1wbGVtZW50IFsyMy4xLjFdLzkKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywKKwkJCSAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJCSAgIF9fZmFsc2VfdHlwZSkKKyAgICAgICAgeworCSAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OgorCSAgICBpdGVyYXRvcl9jYXRlZ29yeSBfSXRlckNhdGVnb3J5OworICAgICAgICAgIF9NX3JhbmdlX2luc2VydF9hdXgoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX0l0ZXJDYXRlZ29yeSgpKTsKKwl9CisKKyAgICAgIC8vIGNhbGxlZCBieSB0aGUgc2Vjb25kIGluc2VydF9kaXNwYXRjaCBhYm92ZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01fcmFuZ2VfaW5zZXJ0X2F1eChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19maXJzdCwKKwkJCSAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnKTsKKworICAgICAgLy8gY2FsbGVkIGJ5IHRoZSBzZWNvbmQgaW5zZXJ0X2Rpc3BhdGNoIGFib3ZlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX3JhbmdlX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3MsIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKKwkJCSAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CisKKyAgICAgIC8vIENhbGxlZCBieSBpbnNlcnQocCxuLHgpLCBhbmQgdGhlIHJhbmdlIGluc2VydCB3aGVuIGl0IHR1cm5zIG91dCB0byBiZQorICAgICAgLy8gdGhlIHNhbWUgdGhpbmcuICBDYW4gdXNlIGZpbGwgZnVuY3Rpb25zIGluIG9wdGltYWwgc2l0dWF0aW9ucywKKyAgICAgIC8vIG90aGVyd2lzZSBwYXNzZXMgb2ZmIHRvIGluc2VydF9hdXgocCxuLHgpLgorICAgICAgdm9pZAorICAgICAgX01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CisKKyAgICAgIC8vIGNhbGxlZCBieSBpbnNlcnQocCx4KQorI2lmbmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgaXRlcmF0b3IKKyAgICAgIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3MsIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CisjZWxzZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIGl0ZXJhdG9yCisgICAgICAgIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3MsIF9BcmdzJiYuLi4gX19hcmdzKTsKKyNlbmRpZgorCisgICAgICAvLyBjYWxsZWQgYnkgaW5zZXJ0KHAsbix4KSB2aWEgZmlsbF9pbnNlcnQKKyAgICAgIHZvaWQKKyAgICAgIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CisKKyAgICAgIC8vIGNhbGxlZCBieSByYW5nZV9pbnNlcnRfYXV4IGZvciBmb3J3YXJkIGl0ZXJhdG9ycworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zLAorCQkgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQkgICAgICBzaXplX3R5cGUgX19uKTsKKworCisgICAgICAvLyBJbnRlcm5hbCBlcmFzZSBmdW5jdGlvbnMgZm9sbG93LgorCisgICAgICB2b2lkCisgICAgICBfTV9kZXN0cm95X2RhdGFfYXV4KGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCk7CisKKyAgICAgIC8vIENhbGxlZCBieSB+ZGVxdWUoKS4KKyAgICAgIC8vIE5COiBEb2Vzbid0IGRlYWxsb2NhdGUgdGhlIG5vZGVzLgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jMT4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9kZXN0cm95X2RhdGEoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0LCBjb25zdCBfQWxsb2MxJikKKyAgICAgICAgeyBfTV9kZXN0cm95X2RhdGFfYXV4KF9fZmlyc3QsIF9fbGFzdCk7IH0KKworICAgICAgdm9pZAorICAgICAgX01fZGVzdHJveV9kYXRhKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCwKKwkJICAgICAgY29uc3Qgc3RkOjphbGxvY2F0b3I8X1RwPiYpCisgICAgICB7CisJaWYgKCFfX2hhc190cml2aWFsX2Rlc3RydWN0b3IodmFsdWVfdHlwZSkpCisJICBfTV9kZXN0cm95X2RhdGFfYXV4KF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICB9CisKKyAgICAgIC8vIENhbGxlZCBieSBlcmFzZShxMSwgcTIpLgorICAgICAgdm9pZAorICAgICAgX01fZXJhc2VfYXRfYmVnaW4oaXRlcmF0b3IgX19wb3MpCisgICAgICB7CisJX01fZGVzdHJveV9kYXRhKGJlZ2luKCksIF9fcG9zLCBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCV9NX2Rlc3Ryb3lfbm9kZXModGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9ub2RlLCBfX3Bvcy5fTV9ub2RlKTsKKwl0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0ID0gX19wb3M7CisgICAgICB9CisKKyAgICAgIC8vIENhbGxlZCBieSBlcmFzZShxMSwgcTIpLCByZXNpemUoKSwgY2xlYXIoKSwgX01fYXNzaWduX2F1eCwKKyAgICAgIC8vIF9NX2ZpbGxfYXNzaWduLCBvcGVyYXRvcj0uCisgICAgICB2b2lkCisgICAgICBfTV9lcmFzZV9hdF9lbmQoaXRlcmF0b3IgX19wb3MpCisgICAgICB7CisJX01fZGVzdHJveV9kYXRhKF9fcG9zLCBlbmQoKSwgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwlfTV9kZXN0cm95X25vZGVzKF9fcG9zLl9NX25vZGUgKyAxLAorCQkJIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX25vZGUgKyAxKTsKKwl0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCA9IF9fcG9zOworICAgICAgfQorCisgICAgICAvL0B7CisgICAgICAvLy8gTWVtb3J5LWhhbmRsaW5nIGhlbHBlcnMgZm9yIHRoZSBwcmV2aW91cyBpbnRlcm5hbCBpbnNlcnQgZnVuY3Rpb25zLgorICAgICAgaXRlcmF0b3IKKyAgICAgIF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfZnJvbnQoc2l6ZV90eXBlIF9fbikKKyAgICAgIHsKKwljb25zdCBzaXplX3R5cGUgX192YWNhbmNpZXMgPSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX2N1cgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9maXJzdDsKKwlpZiAoX19uID4gX192YWNhbmNpZXMpCisJICBfTV9uZXdfZWxlbWVudHNfYXRfZnJvbnQoX19uIC0gX192YWNhbmNpZXMpOworCXJldHVybiB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0IC0gZGlmZmVyZW5jZV90eXBlKF9fbik7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBfTV9yZXNlcnZlX2VsZW1lbnRzX2F0X2JhY2soc2l6ZV90eXBlIF9fbikKKyAgICAgIHsKKwljb25zdCBzaXplX3R5cGUgX192YWNhbmNpZXMgPSAodGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fbGFzdAorCQkJCSAgICAgICAtIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX2N1cikgLSAxOworCWlmIChfX24gPiBfX3ZhY2FuY2llcykKKwkgIF9NX25ld19lbGVtZW50c19hdF9iYWNrKF9fbiAtIF9fdmFjYW5jaWVzKTsKKwlyZXR1cm4gdGhpcy0+X01faW1wbC5fTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01fbmV3X2VsZW1lbnRzX2F0X2Zyb250KHNpemVfdHlwZSBfX25ld19lbGVtZW50cyk7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX25ld19lbGVtZW50c19hdF9iYWNrKHNpemVfdHlwZSBfX25ld19lbGVtZW50cyk7CisgICAgICAvL0B9CisKKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIE1lbW9yeS1oYW5kbGluZyBoZWxwZXJzIGZvciB0aGUgbWFqb3IgJW1hcC4KKyAgICAgICAqCisgICAgICAgKiAgTWFrZXMgc3VyZSB0aGUgX01fbWFwIGhhcyBzcGFjZSBmb3IgbmV3IG5vZGVzLiAgRG9lcyBub3QKKyAgICAgICAqICBhY3R1YWxseSBhZGQgdGhlIG5vZGVzLiAgQ2FuIGludmFsaWRhdGUgX01fbWFwIHBvaW50ZXJzLgorICAgICAgICogIChBbmQgY29uc2VxdWVudGx5LCAlZGVxdWUgaXRlcmF0b3JzLikKKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgX01fcmVzZXJ2ZV9tYXBfYXRfYmFjayhzaXplX3R5cGUgX19ub2Rlc190b19hZGQgPSAxKQorICAgICAgeworCWlmIChfX25vZGVzX3RvX2FkZCArIDEgPiB0aGlzLT5fTV9pbXBsLl9NX21hcF9zaXplCisJICAgIC0gKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX25vZGUgLSB0aGlzLT5fTV9pbXBsLl9NX21hcCkpCisJICBfTV9yZWFsbG9jYXRlX21hcChfX25vZGVzX3RvX2FkZCwgZmFsc2UpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9yZXNlcnZlX21hcF9hdF9mcm9udChzaXplX3R5cGUgX19ub2Rlc190b19hZGQgPSAxKQorICAgICAgeworCWlmIChfX25vZGVzX3RvX2FkZCA+IHNpemVfdHlwZSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX25vZGUKKwkJCQkgICAgICAgLSB0aGlzLT5fTV9pbXBsLl9NX21hcCkpCisJICBfTV9yZWFsbG9jYXRlX21hcChfX25vZGVzX3RvX2FkZCwgdHJ1ZSk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3JlYWxsb2NhdGVfbWFwKHNpemVfdHlwZSBfX25vZGVzX3RvX2FkZCwgYm9vbCBfX2FkZF9hdF9mcm9udCk7CisgICAgICAvL0B9CisgICAgfTsKKworCisgIC8qKgorICAgKiAgQGJyaWVmICBEZXF1ZSBlcXVhbGl0eSBjb21wYXJpc29uLgorICAgKiAgQHBhcmFtICB4ICBBICVkZXF1ZS4KKyAgICogIEBwYXJhbSAgeSAgQSAlZGVxdWUgb2YgdGhlIHNhbWUgdHlwZSBhcyBAYSB4LgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZmYgdGhlIHNpemUgYW5kIGVsZW1lbnRzIG9mIHRoZSBkZXF1ZXMgYXJlIGVxdWFsLgorICAgKgorICAgKiAgVGhpcyBpcyBhbiBlcXVpdmFsZW5jZSByZWxhdGlvbi4gIEl0IGlzIGxpbmVhciBpbiB0aGUgc2l6ZSBvZiB0aGUKKyAgICogIGRlcXVlcy4gIERlcXVlcyBhcmUgY29uc2lkZXJlZCBlcXVpdmFsZW50IGlmIHRoZWlyIHNpemVzIGFyZSBlcXVhbCwKKyAgICogIGFuZCBpZiBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIGNvbXBhcmUgZXF1YWwuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBfX3guc2l6ZSgpID09IF9feS5zaXplKCkKKyAgICAgICAgICAgICAmJiBzdGQ6OmVxdWFsKF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9feS5iZWdpbigpKTsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBEZXF1ZSBvcmRlcmluZyByZWxhdGlvbi4KKyAgICogIEBwYXJhbSAgeCAgQSAlZGVxdWUuCisgICAqICBAcGFyYW0gIHkgIEEgJWRlcXVlIG9mIHRoZSBzYW1lIHR5cGUgYXMgQGEgeC4KKyAgICogIEByZXR1cm4gIFRydWUgaWZmIEBhIHggaXMgbGV4aWNvZ3JhcGhpY2FsbHkgbGVzcyB0aGFuIEBhIHkuCisgICAqCisgICAqICBUaGlzIGlzIGEgdG90YWwgb3JkZXJpbmcgcmVsYXRpb24uICBJdCBpcyBsaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlCisgICAqICBkZXF1ZXMuICBUaGUgZWxlbWVudHMgbXVzdCBiZSBjb21wYXJhYmxlIHdpdGggQGMgPC4KKyAgICoKKyAgICogIFNlZSBzdGQ6OmxleGljb2dyYXBoaWNhbF9jb21wYXJlKCkgZm9yIGhvdyB0aGUgZGV0ZXJtaW5hdGlvbiBpcyBtYWRlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feCwKKwkgICAgICBjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBzdGQ6OmxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCisJCQkJCSAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I9PQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I8CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX194LAorCSAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQorCisgIC8vLyBCYXNlZCBvbiBvcGVyYXRvcjwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I8CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CisKKyAgLy8vIFNlZSBzdGQ6OmRlcXVlOjpzd2FwKCkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChkZXF1ZTxfVHAsX0FsbG9jPiYgX194LCBkZXF1ZTxfVHAsX0FsbG9jPiYgX195KQorICAgIHsgX194LnN3YXAoX195KTsgfQorCisjdW5kZWYgX0dMSUJDWFhfREVRVUVfQlVGX1NJWkUKKworX0dMSUJDWFhfRU5EX05FU1RFRF9OQU1FU1BBQ0UKKworI2VuZGlmIC8qIF9TVExfREVRVUVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF9mdW5jdGlvbi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF9mdW5jdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOWMzNTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3RsX2Z1bmN0aW9uLmgKQEAgLTAsMCArMSw3MTUgQEAKKy8vIEZ1bmN0b3IgaW1wbGVtZW50YXRpb25zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OAorICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIHN0bF9mdW5jdGlvbi5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKyNpZm5kZWYgX1NUTF9GVU5DVElPTl9ICisjZGVmaW5lIF9TVExfRlVOQ1RJT05fSCAxCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgLy8gMjAuMy4xIGJhc2UgY2xhc3NlcworICAvKiogQGRlZmdyb3VwIGZ1bmN0b3JzIEZ1bmN0aW9uIE9iamVjdHMKKyAgICogQGluZ3JvdXAgdXRpbGl0aWVzCisgICAqCisgICAqICBGdW5jdGlvbiBvYmplY3RzLCBvciBAZSBmdW5jdG9ycywgYXJlIG9iamVjdHMgd2l0aCBhbiBAYyBvcGVyYXRvcigpCisgICAqICBkZWZpbmVkIGFuZCBhY2Nlc3NpYmxlLiAgVGhleSBjYW4gYmUgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byBhbGdvcml0aG0KKyAgICogIHRlbXBsYXRlcyBhbmQgdXNlZCBpbiBwbGFjZSBvZiBhIGZ1bmN0aW9uIHBvaW50ZXIuICBOb3Qgb25seSBpcyB0aGUKKyAgICogIHJlc3VsdGluZyBleHByZXNzaXZlbmVzcyBvZiB0aGUgbGlicmFyeSBpbmNyZWFzZWQsIGJ1dCB0aGUgZ2VuZXJhdGVkCisgICAqICBjb2RlIGNhbiBiZSBtb3JlIGVmZmljaWVudCB0aGFuIHdoYXQgeW91IG1pZ2h0IHdyaXRlIGJ5IGhhbmQuICBXaGVuIHdlCisgICAqICByZWZlciB0byBAYSBmdW5jdG9ycywgdGhlbiwgZ2VuZXJhbGx5IHdlIGluY2x1ZGUgZnVuY3Rpb24gcG9pbnRlcnMgaW4KKyAgICogIHRoZSBkZXNjcmlwdGlvbiBhcyB3ZWxsLgorICAgKgorICAgKiAgT2Z0ZW4sIGZ1bmN0b3JzIGFyZSBvbmx5IGNyZWF0ZWQgYXMgdGVtcG9yYXJpZXMgcGFzc2VkIHRvIGFsZ29yaXRobQorICAgKiAgY2FsbHMsIHJhdGhlciB0aGFuIGJlaW5nIGNyZWF0ZWQgYXMgbmFtZWQgdmFyaWFibGVzLgorICAgKgorICAgKiAgVHdvIGV4YW1wbGVzIHRha2VuIGZyb20gdGhlIHN0YW5kYXJkIGl0c2VsZiBmb2xsb3cuICBUbyBwZXJmb3JtIGEKKyAgICogIGJ5LWVsZW1lbnQgYWRkaXRpb24gb2YgdHdvIHZlY3RvcnMgQGMgYSBhbmQgQGMgYiBjb250YWluaW5nIEBjIGRvdWJsZSwKKyAgICogIGFuZCBwdXQgdGhlIHJlc3VsdCBpbiBAYyBhLCB1c2UKKyAgICogIFxjb2RlCisgICAqICB0cmFuc2Zvcm0gKGEuYmVnaW4oKSwgYS5lbmQoKSwgYi5iZWdpbigpLCBhLmJlZ2luKCksIHBsdXM8ZG91YmxlPigpKTsKKyAgICogIFxlbmRjb2RlCisgICAqICBUbyBuZWdhdGUgZXZlcnkgZWxlbWVudCBpbiBAYyBhLCB1c2UKKyAgICogIFxjb2RlCisgICAqICB0cmFuc2Zvcm0oYS5iZWdpbigpLCBhLmVuZCgpLCBhLmJlZ2luKCksIG5lZ2F0ZTxkb3VibGU+KCkpOworICAgKiAgXGVuZGNvZGUKKyAgICogIFRoZSBhZGRpdGlvbiBhbmQgbmVnYXRpb24gZnVuY3Rpb25zIHdpbGwgYmUgaW5saW5lZCBkaXJlY3RseS4KKyAgICoKKyAgICogIFRoZSBzdGFuZGFyZCBmdW5jdG9ycyBhcmUgZGVyaXZlZCBmcm9tIHN0cnVjdHMgbmFtZWQgQGMgdW5hcnlfZnVuY3Rpb24KKyAgICogIGFuZCBAYyBiaW5hcnlfZnVuY3Rpb24uICBUaGVzZSB0d28gY2xhc3NlcyBjb250YWluIG5vdGhpbmcgYnV0IHR5cGVkZWZzLAorICAgKiAgdG8gYWlkIGluIGdlbmVyaWMgKHRlbXBsYXRlKSBwcm9ncmFtbWluZy4gIElmIHlvdSB3cml0ZSB5b3VyIG93bgorICAgKiAgZnVuY3RvcnMsIHlvdSBtaWdodCBjb25zaWRlciBkb2luZyB0aGUgc2FtZS4KKyAgICoKKyAgICogIEB7CisgICAqLworICAvKioKKyAgICogIFRoaXMgaXMgb25lIG9mIHRoZSBAbGluayBmdW5jdG9ycyBmdW5jdG9yIGJhc2UgY2xhc3Nlc0BlbmRsaW5rLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZywgdHlwZW5hbWUgX1Jlc3VsdD4KKyAgICBzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24KKyAgICB7CisgICAgICB0eXBlZGVmIF9BcmcgYXJndW1lbnRfdHlwZTsgICAvLy88IEBjIGFyZ3VtZW50X3R5cGUgaXMgdGhlIHR5cGUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8gICAgIGFyZ3VtZW50IChubyBzdXJwcmlzZXMgaGVyZSkKKworICAgICAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOyAgLy8vPCBAYyByZXN1bHRfdHlwZSBpcyB0aGUgcmV0dXJuIHR5cGUKKyAgICB9OworCisgIC8qKgorICAgKiAgVGhpcyBpcyBvbmUgb2YgdGhlIEBsaW5rIGZ1bmN0b3JzIGZ1bmN0b3IgYmFzZSBjbGFzc2VzQGVuZGxpbmsuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQXJnMSwgdHlwZW5hbWUgX0FyZzIsIHR5cGVuYW1lIF9SZXN1bHQ+CisgICAgc3RydWN0IGJpbmFyeV9mdW5jdGlvbgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsgICAvLy88IHRoZSB0eXBlIG9mIHRoZSBmaXJzdCBhcmd1bWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLyAgKG5vIHN1cnByaXNlcyBoZXJlKQorCisgICAgICB0eXBlZGVmIF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOyAgLy8vPCB0aGUgdHlwZSBvZiB0aGUgc2Vjb25kIGFyZ3VtZW50CisgICAgICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7ICAgICAgICAgLy8vPCB0eXBlIG9mIHRoZSByZXR1cm4gdHlwZQorICAgIH07CisgIC8qKiBAfSAgKi8KKworICAvLyAyMC4zLjIgYXJpdGhtZXRpYworICAvKiogQGRlZmdyb3VwIGFyaXRobWV0aWNfZnVuY3RvcnMgQXJpdGhtZXRpYyBDbGFzc2VzCisgICAqIEBpbmdyb3VwIGZ1bmN0b3JzCisgICAqCisgICAqICBCZWNhdXNlIGJhc2ljIG1hdGggb2Z0ZW4gbmVlZHMgdG8gYmUgZG9uZSBkdXJpbmcgYW4gYWxnb3JpdGhtLAorICAgKiAgdGhlIGxpYnJhcnkgcHJvdmlkZXMgZnVuY3RvcnMgZm9yIHRob3NlIG9wZXJhdGlvbnMuICBTZWUgdGhlCisgICAqICBkb2N1bWVudGF0aW9uIGZvciBAbGluayBmdW5jdG9ycyB0aGUgYmFzZSBjbGFzc2VzQGVuZGxpbmsKKyAgICogIGZvciBleGFtcGxlcyBvZiB0aGVpciB1c2UuCisgICAqCisgICAqICBAeworICAgKi8KKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgYXJpdGhtZXRpY19mdW5jdG9ycyBtYXRoIGZ1bmN0b3JzQGVuZGxpbmsuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLCBfVHAsIF9UcD4KKyAgICB7CisgICAgICBfVHAKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdAorICAgICAgeyByZXR1cm4gX194ICsgX195OyB9CisgICAgfTsKKworICAvLy8gT25lIG9mIHRoZSBAbGluayBhcml0aG1ldGljX2Z1bmN0b3JzIG1hdGggZnVuY3RvcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLCBfVHAsIF9UcD4KKyAgICB7CisgICAgICBfVHAKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdAorICAgICAgeyByZXR1cm4gX194IC0gX195OyB9CisgICAgfTsKKworICAvLy8gT25lIG9mIHRoZSBAbGluayBhcml0aG1ldGljX2Z1bmN0b3JzIG1hdGggZnVuY3RvcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsIF9UcCwgX1RwPgorICAgIHsKKyAgICAgIF9UcAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggKiBfX3k7IH0KKyAgICB9OworCisgIC8vLyBPbmUgb2YgdGhlIEBsaW5rIGFyaXRobWV0aWNfZnVuY3RvcnMgbWF0aCBmdW5jdG9yc0BlbmRsaW5rLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGRpdmlkZXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCwgX1RwLCBfVHA+CisgICAgeworICAgICAgX1RwCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feCAvIF9feTsgfQorICAgIH07CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgYXJpdGhtZXRpY19mdW5jdG9ycyBtYXRoIGZ1bmN0b3JzQGVuZGxpbmsuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgbW9kdWx1cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLCBfVHAsIF9UcD4KKyAgICB7CisgICAgICBfVHAKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdAorICAgICAgeyByZXR1cm4gX194ICUgX195OyB9CisgICAgfTsKKworICAvLy8gT25lIG9mIHRoZSBAbGluayBhcml0aG1ldGljX2Z1bmN0b3JzIG1hdGggZnVuY3RvcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLCBfVHA+CisgICAgeworICAgICAgX1RwCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gLV9feDsgfQorICAgIH07CisgIC8qKiBAfSAgKi8KKworICAvLyAyMC4zLjMgY29tcGFyaXNvbnMKKyAgLyoqIEBkZWZncm91cCBjb21wYXJpc29uX2Z1bmN0b3JzIENvbXBhcmlzb24gQ2xhc3NlcworICAgKiBAaW5ncm91cCBmdW5jdG9ycworICAgKgorICAgKiAgVGhlIGxpYnJhcnkgcHJvdmlkZXMgc2l4IHdyYXBwZXIgZnVuY3RvcnMgZm9yIGFsbCB0aGUgYmFzaWMgY29tcGFyaXNvbnMKKyAgICogIGluIEMrKywgbGlrZSBAYyA8LgorICAgKgorICAgKiAgQHsKKyAgICovCisgIC8vLyBPbmUgb2YgdGhlIEBsaW5rIGNvbXBhcmlzb25fZnVuY3RvcnMgY29tcGFyaXNvbiBmdW5jdG9yc0BlbmRsaW5rLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGVxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsIF9UcCwgYm9vbD4KKyAgICB7CisgICAgICBib29sCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feCA9PSBfX3k7IH0KKyAgICB9OworCisgIC8vLyBPbmUgb2YgdGhlIEBsaW5rIGNvbXBhcmlzb25fZnVuY3RvcnMgY29tcGFyaXNvbiBmdW5jdG9yc0BlbmRsaW5rLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IG5vdF9lcXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLCBfVHAsIGJvb2w+CisgICAgeworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggIT0gX195OyB9CisgICAgfTsKKworICAvLy8gT25lIG9mIHRoZSBAbGluayBjb21wYXJpc29uX2Z1bmN0b3JzIGNvbXBhcmlzb24gZnVuY3RvcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBncmVhdGVyIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsIF9UcCwgYm9vbD4KKyAgICB7CisgICAgICBib29sCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feCA+IF9feTsgfQorICAgIH07CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgY29tcGFyaXNvbl9mdW5jdG9ycyBjb21wYXJpc29uIGZ1bmN0b3JzQGVuZGxpbmsuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgbGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLCBfVHAsIGJvb2w+CisgICAgeworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggPCBfX3k7IH0KKyAgICB9OworCisgIC8vLyBPbmUgb2YgdGhlIEBsaW5rIGNvbXBhcmlzb25fZnVuY3RvcnMgY29tcGFyaXNvbiBmdW5jdG9yc0BlbmRsaW5rLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGdyZWF0ZXJfZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCwgX1RwLCBib29sPgorICAgIHsKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdAorICAgICAgeyByZXR1cm4gX194ID49IF9feTsgfQorICAgIH07CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgY29tcGFyaXNvbl9mdW5jdG9ycyBjb21wYXJpc29uIGZ1bmN0b3JzQGVuZGxpbmsuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgbGVzc19lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLCBfVHAsIGJvb2w+CisgICAgeworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggPD0gX195OyB9CisgICAgfTsKKyAgLyoqIEB9ICAqLworCisgIC8vIDIwLjMuNCBsb2dpY2FsIG9wZXJhdGlvbnMKKyAgLyoqIEBkZWZncm91cCBsb2dpY2FsX2Z1bmN0b3JzIEJvb2xlYW4gT3BlcmF0aW9ucyBDbGFzc2VzCisgICAqIEBpbmdyb3VwIGZ1bmN0b3JzCisgICAqCisgICAqICBIZXJlIGFyZSB3cmFwcGVyIGZ1bmN0b3JzIGZvciBCb29sZWFuIG9wZXJhdGlvbnM6IEBjICYmLCBAYyB8fCwKKyAgICogIGFuZCBAYyAhLgorICAgKgorICAgKiAgQHsKKyAgICovCisgIC8vLyBPbmUgb2YgdGhlIEBsaW5rIGxvZ2ljYWxfZnVuY3RvcnMgQm9vbGVhbiBvcGVyYXRpb25zIGZ1bmN0b3JzQGVuZGxpbmsuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgbG9naWNhbF9hbmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCwgX1RwLCBib29sPgorICAgIHsKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdAorICAgICAgeyByZXR1cm4gX194ICYmIF9feTsgfQorICAgIH07CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgbG9naWNhbF9mdW5jdG9ycyBCb29sZWFuIG9wZXJhdGlvbnMgZnVuY3RvcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBsb2dpY2FsX29yIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsIF9UcCwgYm9vbD4KKyAgICB7CisgICAgICBib29sCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feCB8fCBfX3k7IH0KKyAgICB9OworCisgIC8vLyBPbmUgb2YgdGhlIEBsaW5rIGxvZ2ljYWxfZnVuY3RvcnMgQm9vbGVhbiBvcGVyYXRpb25zIGZ1bmN0b3JzQGVuZGxpbmsuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgbG9naWNhbF9ub3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLCBib29sPgorICAgIHsKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiAhX194OyB9CisgICAgfTsKKyAgLyoqIEB9ICAqLworCisgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgLy8gRFIgNjYwLiBNaXNzaW5nIEJpdHdpc2UgT3BlcmF0aW9ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBiaXRfYW5kIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsIF9UcCwgX1RwPgorICAgIHsKKyAgICAgIF9UcAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggJiBfX3k7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgYml0X29yIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsIF9UcCwgX1RwPgorICAgIHsKKyAgICAgIF9UcAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggfCBfX3k7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgYml0X3hvciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLCBfVHAsIF9UcD4KKyAgICB7CisgICAgICBfVHAKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdAorICAgICAgeyByZXR1cm4gX194IF4gX195OyB9CisgICAgfTsKKworICAvLyAyMC4zLjUgbmVnYXRvcnMKKyAgLyoqIEBkZWZncm91cCBuZWdhdG9ycyBOZWdhdG9ycworICAgKiBAaW5ncm91cCBmdW5jdG9ycworICAgKgorICAgKiAgVGhlIGZ1bmN0aW9ucyBAYyBub3QxIGFuZCBAYyBub3QyIGVhY2ggdGFrZSBhIHByZWRpY2F0ZSBmdW5jdG9yCisgICAqICBhbmQgcmV0dXJuIGFuIGluc3RhbmNlIG9mIEBjIHVuYXJ5X25lZ2F0ZSBvcgorICAgKiAgQGMgYmluYXJ5X25lZ2F0ZSwgcmVzcGVjdGl2ZWx5LiAgVGhlc2UgY2xhc3NlcyBhcmUgZnVuY3RvcnMgd2hvc2UKKyAgICogIEBjIG9wZXJhdG9yKCkgcGVyZm9ybXMgdGhlIHN0b3JlZCBwcmVkaWNhdGUgZnVuY3Rpb24gYW5kIHRoZW4gcmV0dXJucworICAgKiAgdGhlIG5lZ2F0aW9uIG9mIHRoZSByZXN1bHQuCisgICAqCisgICAqICBGb3IgZXhhbXBsZSwgZ2l2ZW4gYSB2ZWN0b3Igb2YgaW50ZWdlcnMgYW5kIGEgdHJpdmlhbCBwcmVkaWNhdGUsCisgICAqICBcY29kZQorICAgKiAgc3RydWN0IEludEdyZWF0ZXJUaGFuVGhyZWUKKyAgICogICAgOiBwdWJsaWMgc3RkOjp1bmFyeV9mdW5jdGlvbjxpbnQsIGJvb2w+CisgICAqICB7CisgICAqICAgICAgYm9vbCBvcGVyYXRvcigpIChpbnQgeCkgeyByZXR1cm4geCA+IDM7IH0KKyAgICogIH07CisgICAqCisgICAqICBzdGQ6OmZpbmRfaWYgKHYuYmVnaW4oKSwgdi5lbmQoKSwgbm90MShJbnRHcmVhdGVyVGhhblRocmVlKCkpKTsKKyAgICogIFxlbmRjb2RlCisgICAqICBUaGUgY2FsbCB0byBAYyBmaW5kX2lmIHdpbGwgbG9jYXRlIHRoZSBmaXJzdCBpbmRleCAoaSkgb2YgQGMgdiBmb3Igd2hpY2gKKyAgICogIDxjb2RlPiEodltpXSA+IDMpPC9jb2RlPiBpcyB0cnVlLgorICAgKgorICAgKiAgVGhlIG5vdDEvdW5hcnlfbmVnYXRlIGNvbWJpbmF0aW9uIHdvcmtzIG9uIHByZWRpY2F0ZXMgdGFraW5nIGEgc2luZ2xlCisgICAqICBhcmd1bWVudC4gIFRoZSBub3QyL2JpbmFyeV9uZWdhdGUgY29tYmluYXRpb24gd29ya3Mgb24gcHJlZGljYXRlcyB3aGljaAorICAgKiAgdGFrZSB0d28gYXJndW1lbnRzLgorICAgKgorICAgKiAgQHsKKyAgICovCisgIC8vLyBPbmUgb2YgdGhlIEBsaW5rIG5lZ2F0b3JzIG5lZ2F0aW9uIGZ1bmN0b3JzQGVuZGxpbmsuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgY2xhc3MgdW5hcnlfbmVnYXRlCisgICAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSwgYm9vbD4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgX1ByZWRpY2F0ZSBfTV9wcmVkOworCisgICAgcHVibGljOgorICAgICAgZXhwbGljaXQKKyAgICAgIHVuYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHsgfQorCisgICAgICBib29sCisgICAgICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICFfTV9wcmVkKF9feCk7IH0KKyAgICB9OworCisgIC8vLyBPbmUgb2YgdGhlIEBsaW5rIG5lZ2F0b3JzIG5lZ2F0aW9uIGZ1bmN0b3JzQGVuZGxpbmsuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgaW5saW5lIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPgorICAgIG5vdDEoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQorICAgIHsgcmV0dXJuIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3ByZWQpOyB9CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgbmVnYXRvcnMgbmVnYXRpb24gZnVuY3RvcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBjbGFzcyBiaW5hcnlfbmVnYXRlCisgICAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUsCisJCQkgICAgIHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlLCBib29sPgorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfUHJlZGljYXRlIF9NX3ByZWQ7CisKKyAgICBwdWJsaWM6CisgICAgICBleHBsaWNpdAorICAgICAgYmluYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHsgfQorCisgICAgICBib29sCisgICAgICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCwKKwkJIGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiAhX01fcHJlZChfX3gsIF9feSk7IH0KKyAgICB9OworCisgIC8vLyBPbmUgb2YgdGhlIEBsaW5rIG5lZ2F0b3JzIG5lZ2F0aW9uIGZ1bmN0b3JzQGVuZGxpbmsuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgaW5saW5lIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4KKyAgICBub3QyKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKKyAgICB7IHJldHVybiBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7IH0KKyAgLyoqIEB9ICAqLworCisgIC8vIDIwLjMuNyBhZGFwdG9ycyBwb2ludGVycyBmdW5jdGlvbnMKKyAgLyoqIEBkZWZncm91cCBwb2ludGVyX2FkYXB0b3JzIEFkYXB0b3JzIGZvciBwb2ludGVycyB0byBmdW5jdGlvbnMKKyAgICogQGluZ3JvdXAgZnVuY3RvcnMKKyAgICoKKyAgICogIFRoZSBhZHZhbnRhZ2Ugb2YgZnVuY3Rpb24gb2JqZWN0cyBvdmVyIHBvaW50ZXJzIHRvIGZ1bmN0aW9ucyBpcyB0aGF0CisgICAqICB0aGUgb2JqZWN0cyBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBkZWNsYXJlIG5lc3RlZCB0eXBlZGVmcyBkZXNjcmliaW5nCisgICAqICB0aGVpciBhcmd1bWVudCBhbmQgcmVzdWx0IHR5cGVzIHdpdGggdW5pZm9ybSBuYW1lcyAoZS5nLiwgQGMgcmVzdWx0X3R5cGUKKyAgICogIGZyb20gdGhlIGJhc2UgY2xhc3NlcyBAYyB1bmFyeV9mdW5jdGlvbiBhbmQgQGMgYmluYXJ5X2Z1bmN0aW9uKS4KKyAgICogIFNvbWV0aW1lcyB0aG9zZSB0eXBlZGVmcyBhcmUgcmVxdWlyZWQsIG5vdCBqdXN0IG9wdGlvbmFsLgorICAgKgorICAgKiAgQWRhcHRvcnMgYXJlIHByb3ZpZGVkIHRvIHR1cm4gcG9pbnRlcnMgdG8gdW5hcnkgKHNpbmdsZS1hcmd1bWVudCkgYW5kCisgICAqICBiaW5hcnkgKGRvdWJsZS1hcmd1bWVudCkgZnVuY3Rpb25zIGludG8gZnVuY3Rpb24gb2JqZWN0cy4gIFRoZQorICAgKiAgbG9uZy13aW5kZWQgZnVuY3RvciBAYyBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIGlzIGNvbnN0cnVjdGVkIHdpdGggYQorICAgKiAgZnVuY3Rpb24gcG9pbnRlciBAYyBmLCBhbmQgaXRzIEBjIG9wZXJhdG9yKCkgY2FsbGVkIHdpdGggYXJndW1lbnQgQGMgeAorICAgKiAgcmV0dXJucyBAYyBmKHgpLiAgVGhlIGZ1bmN0b3IgQGMgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24gZG9lcyB0aGUgc2FtZQorICAgKiAgdGhpbmcsIGJ1dCB3aXRoIGEgZG91YmxlLWFyZ3VtZW50IEBjIGYgYW5kIEBjIG9wZXJhdG9yKCkuCisgICAqCisgICAqICBUaGUgZnVuY3Rpb24gQGMgcHRyX2Z1biB0YWtlcyBhIHBvaW50ZXItdG8tZnVuY3Rpb24gQGMgZiBhbmQgY29uc3RydWN0cworICAgKiAgYW4gaW5zdGFuY2Ugb2YgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0b3IuCisgICAqCisgICAqICBAeworICAgKi8KKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgcG9pbnRlcl9hZGFwdG9ycyBhZGFwdG9ycyBmb3IgZnVuY3Rpb24gcG9pbnRlcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZywgdHlwZW5hbWUgX1Jlc3VsdD4KKyAgICBjbGFzcyBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+CisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcpOworCisgICAgcHVibGljOgorICAgICAgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbigpIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnKSkKKyAgICAgIDogX01fcHRyKF9feCkgeyB9CisKKyAgICAgIF9SZXN1bHQKKyAgICAgIG9wZXJhdG9yKCkoX0FyZyBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wdHIoX194KTsgfQorICAgIH07CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgcG9pbnRlcl9hZGFwdG9ycyBhZGFwdG9ycyBmb3IgZnVuY3Rpb24gcG9pbnRlcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZywgdHlwZW5hbWUgX1Jlc3VsdD4KKyAgICBpbmxpbmUgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PgorICAgIHB0cl9mdW4oX1Jlc3VsdCAoKl9feCkoX0FyZykpCisgICAgeyByZXR1cm4gcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PihfX3gpOyB9CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgcG9pbnRlcl9hZGFwdG9ycyBhZGFwdG9ycyBmb3IgZnVuY3Rpb24gcG9pbnRlcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZzEsIHR5cGVuYW1lIF9BcmcyLCB0eXBlbmFtZSBfUmVzdWx0PgorICAgIGNsYXNzIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uCisgICAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLCBfQXJnMiwgX1Jlc3VsdD4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZzEsIF9BcmcyKTsKKworICAgIHB1YmxpYzoKKyAgICAgIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKCkgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKQorICAgICAgOiBfTV9wdHIoX194KSB7IH0KKworICAgICAgX1Jlc3VsdAorICAgICAgb3BlcmF0b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3B0cihfX3gsIF9feSk7IH0KKyAgICB9OworCisgIC8vLyBPbmUgb2YgdGhlIEBsaW5rIHBvaW50ZXJfYWRhcHRvcnMgYWRhcHRvcnMgZm9yIGZ1bmN0aW9uIHBvaW50ZXJzQGVuZGxpbmsuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9BcmcxLCB0eXBlbmFtZSBfQXJnMiwgdHlwZW5hbWUgX1Jlc3VsdD4KKyAgICBpbmxpbmUgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsIF9BcmcyLCBfUmVzdWx0PgorICAgIHB0cl9mdW4oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkKKyAgICB7IHJldHVybiBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSwgX0FyZzIsIF9SZXN1bHQ+KF9feCk7IH0KKyAgLyoqIEB9ICAqLworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX0lkZW50aXR5IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+CisgICAgeworICAgICAgX1RwJgorICAgICAgb3BlcmF0b3IoKShfVHAmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feDsgfQorCisgICAgICBjb25zdCBfVHAmCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX194OyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUGFpcj4KKyAgICBzdHJ1Y3QgX1NlbGVjdDFzdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwKKwkJCQkJICAgICAgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGU+CisgICAgeworICAgICAgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmCisgICAgICBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3guZmlyc3Q7IH0KKworICAgICAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3guZmlyc3Q7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9QYWlyPgorICAgIHN0cnVjdCBfU2VsZWN0Mm5kIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLAorCQkJCQkgICAgICB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGU+CisgICAgeworICAgICAgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJgorICAgICAgb3BlcmF0b3IoKShfUGFpciYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX194LnNlY29uZDsgfQorCisgICAgICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3guc2Vjb25kOyB9CisgICAgfTsKKworICAvLyAyMC4zLjggYWRhcHRvcnMgcG9pbnRlcnMgbWVtYmVycworICAvKiogQGRlZmdyb3VwIG1lbW9yeV9hZGFwdG9ycyBBZGFwdG9ycyBmb3IgcG9pbnRlcnMgdG8gbWVtYmVycworICAgKiBAaW5ncm91cCBmdW5jdG9ycworICAgKgorICAgKiAgVGhlcmUgYXJlIGEgdG90YWwgb2YgOCA9IDJeMyBmdW5jdGlvbiBvYmplY3RzIGluIHRoaXMgZmFtaWx5LgorICAgKiAgICgxKSBNZW1iZXIgZnVuY3Rpb25zIHRha2luZyBubyBhcmd1bWVudHMgdnMgbWVtYmVyIGZ1bmN0aW9ucyB0YWtpbmcKKyAgICogICAgICAgIG9uZSBhcmd1bWVudC4KKyAgICogICAoMikgQ2FsbCB0aHJvdWdoIHBvaW50ZXIgdnMgY2FsbCB0aHJvdWdoIHJlZmVyZW5jZS4KKyAgICogICAoMykgQ29uc3QgdnMgbm9uLWNvbnN0IG1lbWJlciBmdW5jdGlvbi4KKyAgICoKKyAgICogIEFsbCBvZiB0aGlzIGNvbXBsZXhpdHkgaXMgaW4gdGhlIGZ1bmN0aW9uIG9iamVjdHMgdGhlbXNlbHZlcy4gIFlvdSBjYW4KKyAgICogICBpZ25vcmUgaXQgYnkgdXNpbmcgdGhlIGhlbHBlciBmdW5jdGlvbiBtZW1fZnVuIGFuZCBtZW1fZnVuX3JlZiwKKyAgICogICB3aGljaCBjcmVhdGUgd2hpY2hldmVyIHR5cGUgb2YgYWRhcHRvciBpcyBhcHByb3ByaWF0ZS4KKyAgICoKKyAgICogIEB7CisgICAqLworICAvLy8gT25lIG9mIHRoZSBAbGluayBtZW1vcnlfYWRhcHRvcnMgYWRhcHRvcnMgZm9yIG1lbWJlcgorICAvLy8gcG9pbnRlcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JldCwgdHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIG1lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLCBfUmV0PgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICBleHBsaWNpdAorICAgICAgbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpCisgICAgICA6IF9NX2YoX19wZikgeyB9CisKKyAgICAgIF9SZXQKKyAgICAgIG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0CisgICAgICB7IHJldHVybiAoX19wLT4qX01fZikoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIF9SZXQgKF9UcDo6Kl9NX2YpKCk7CisgICAgfTsKKworICAvLy8gT25lIG9mIHRoZSBAbGluayBtZW1vcnlfYWRhcHRvcnMgYWRhcHRvcnMgZm9yIG1lbWJlcgorICAvLy8gcG9pbnRlcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JldCwgdHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIGNvbnN0X21lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLCBfUmV0PgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICBleHBsaWNpdAorICAgICAgY29uc3RfbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpCisgICAgICA6IF9NX2YoX19wZikgeyB9CisKKyAgICAgIF9SZXQKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0CisgICAgICB7IHJldHVybiAoX19wLT4qX01fZikoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7CisgICAgfTsKKworICAvLy8gT25lIG9mIHRoZSBAbGluayBtZW1vcnlfYWRhcHRvcnMgYWRhcHRvcnMgZm9yIG1lbWJlcgorICAvLy8gcG9pbnRlcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JldCwgdHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIG1lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLCBfUmV0PgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICBleHBsaWNpdAorICAgICAgbWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpKQorICAgICAgOiBfTV9mKF9fcGYpIHsgfQorCisgICAgICBfUmV0CisgICAgICBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdAorICAgICAgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIF9SZXQgKF9UcDo6Kl9NX2YpKCk7CisgIH07CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgbWVtb3J5X2FkYXB0b3JzIGFkYXB0b3JzIGZvciBtZW1iZXIKKyAgLy8vIHBvaW50ZXJzQGVuZGxpbmsuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXQsIHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCwgX1JldD4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgZXhwbGljaXQKKyAgICAgIGNvbnN0X21lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSBjb25zdCkKKyAgICAgIDogX01fZihfX3BmKSB7IH0KKworICAgICAgX1JldAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QKKyAgICAgIHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0OworICAgIH07CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgbWVtb3J5X2FkYXB0b3JzIGFkYXB0b3JzIGZvciBtZW1iZXIKKyAgLy8vIHBvaW50ZXJzQGVuZGxpbmsuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXQsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FyZz4KKyAgICBjbGFzcyBtZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAqLCBfQXJnLCBfUmV0PgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICBleHBsaWNpdAorICAgICAgbWVtX2Z1bjFfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSkKKyAgICAgIDogX01fZihfX3BmKSB7IH0KKworICAgICAgX1JldAorICAgICAgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOworICAgIH07CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgbWVtb3J5X2FkYXB0b3JzIGFkYXB0b3JzIGZvciBtZW1iZXIKKyAgLy8vIHBvaW50ZXJzQGVuZGxpbmsuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXQsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FyZz4KKyAgICBjbGFzcyBjb25zdF9tZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLCBfQXJnLCBfUmV0PgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICBleHBsaWNpdAorICAgICAgY29uc3RfbWVtX2Z1bjFfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkKKyAgICAgIDogX01fZihfX3BmKSB7IH0KKworICAgICAgX1JldAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0OworICAgIH07CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgbWVtb3J5X2FkYXB0b3JzIGFkYXB0b3JzIGZvciBtZW1iZXIKKyAgLy8vIHBvaW50ZXJzQGVuZGxpbmsuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXQsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FyZz4KKyAgICBjbGFzcyBtZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLCBfQXJnLCBfUmV0PgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICBleHBsaWNpdAorICAgICAgbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpCisgICAgICA6IF9NX2YoX19wZikgeyB9CisKKyAgICAgIF9SZXQKKyAgICAgIG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOworICAgIH07CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgbWVtb3J5X2FkYXB0b3JzIGFkYXB0b3JzIGZvciBtZW1iZXIKKyAgLy8vIHBvaW50ZXJzQGVuZGxpbmsuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXQsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FyZz4KKyAgICBjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLCBfQXJnLCBfUmV0PgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICBleHBsaWNpdAorICAgICAgY29uc3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpCisgICAgICA6IF9NX2YoX19wZikgeyB9CisKKyAgICAgIF9SZXQKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0OworICAgIH07CisKKyAgLy8gTWVtX2Z1biBhZGFwdG9yIGhlbHBlciBmdW5jdGlvbnMuICBUaGVyZSBhcmUgb25seSB0d286CisgIC8vIG1lbV9mdW4gYW5kIG1lbV9mdW5fcmVmLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmV0LCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIG1lbV9mdW5fdDxfUmV0LCBfVHA+CisgICAgbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkpCisgICAgeyByZXR1cm4gbWVtX2Z1bl90PF9SZXQsIF9UcD4oX19mKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXQsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29uc3RfbWVtX2Z1bl90PF9SZXQsIF9UcD4KKyAgICBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSBjb25zdCkKKyAgICB7IHJldHVybiBjb25zdF9tZW1fZnVuX3Q8X1JldCwgX1RwPihfX2YpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JldCwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBtZW1fZnVuX3JlZl90PF9SZXQsIF9UcD4KKyAgICBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKCkpCisgICAgeyByZXR1cm4gbWVtX2Z1bl9yZWZfdDxfUmV0LCBfVHA+KF9fZik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmV0LCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCwgX1RwPgorICAgIG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSBjb25zdCkKKyAgICB7IHJldHVybiBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsIF9UcD4oX19mKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXQsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FyZz4KKyAgICBpbmxpbmUgbWVtX2Z1bjFfdDxfUmV0LCBfVHAsIF9Bcmc+CisgICAgbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQorICAgIHsgcmV0dXJuIG1lbV9mdW4xX3Q8X1JldCwgX1RwLCBfQXJnPihfX2YpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JldCwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQXJnPgorICAgIGlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsIF9UcCwgX0FyZz4KKyAgICBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCisgICAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfdDxfUmV0LCBfVHAsIF9Bcmc+KF9fZik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmV0LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Bcmc+CisgICAgaW5saW5lIG1lbV9mdW4xX3JlZl90PF9SZXQsIF9UcCwgX0FyZz4KKyAgICBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQorICAgIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsIF9UcCwgX0FyZz4oX19mKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXQsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FyZz4KKyAgICBpbmxpbmUgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCwgX1RwLCBfQXJnPgorICAgIG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCisgICAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCwgX1RwLCBfQXJnPihfX2YpOyB9CisKKyAgLyoqIEB9ICAqLworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNpZiAhZGVmaW5lZChfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXykgfHwgX0dMSUJDWFhfREVQUkVDQVRFRAorIyBpbmNsdWRlIDxiYWNrd2FyZC9iaW5kZXJzLmg+CisjZW5kaWYKKworI2VuZGlmIC8qIF9TVExfRlVOQ1RJT05fSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF9oZWFwLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3RsX2hlYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTJmYTdhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF9oZWFwLmgKQEAgLTAsMCArMSw1NzggQEAKKy8vIEhlYXAgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk3CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgc3RsX2hlYXAuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWZuZGVmIF9TVExfSEVBUF9ICisjZGVmaW5lIF9TVExfSEVBUF9IIDEKKworI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisjaW5jbHVkZSA8Yml0cy9tb3ZlLmg+CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgLyoqCisgICAqIEBkZWZncm91cCBoZWFwX2FsZ29yaXRobXMgSGVhcAorICAgKiBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICovCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CisgICAgX0Rpc3RhbmNlCisgICAgX19pc19oZWFwX3VudGlsKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19uKQorICAgIHsKKyAgICAgIF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7CisgICAgICBmb3IgKF9EaXN0YW5jZSBfX2NoaWxkID0gMTsgX19jaGlsZCA8IF9fbjsgKytfX2NoaWxkKQorCXsKKwkgIGlmIChfX2ZpcnN0W19fcGFyZW50XSA8IF9fZmlyc3RbX19jaGlsZF0pCisJICAgIHJldHVybiBfX2NoaWxkOworCSAgaWYgKChfX2NoaWxkICYgMSkgPT0gMCkKKwkgICAgKytfX3BhcmVudDsKKwl9CisgICAgICByZXR1cm4gX19uOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfRGlzdGFuY2UKKyAgICBfX2lzX2hlYXBfdW50aWwoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX24sCisJCSAgICBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gMDsKKyAgICAgIGZvciAoX0Rpc3RhbmNlIF9fY2hpbGQgPSAxOyBfX2NoaWxkIDwgX19uOyArK19fY2hpbGQpCisJeworCSAgaWYgKF9fY29tcChfX2ZpcnN0W19fcGFyZW50XSwgX19maXJzdFtfX2NoaWxkXSkpCisJICAgIHJldHVybiBfX2NoaWxkOworCSAgaWYgKChfX2NoaWxkICYgMSkgPT0gMCkKKwkgICAgKytfX3BhcmVudDsKKwl9CisgICAgICByZXR1cm4gX19uOworICAgIH0KKworICAvLyBfX2lzX2hlYXAsIGEgcHJlZGljYXRlIHRlc3Rpbmcgd2hldGhlciBvciBub3QgYSByYW5nZSBpcyBhIGhlYXAuCisgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYW4gZXh0ZW5zaW9uLCBub3QgcGFydCBvZiB0aGUgQysrIHN0YW5kYXJkLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9faXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9fbikKKyAgICB7IHJldHVybiBzdGQ6Ol9faXNfaGVhcF91bnRpbChfX2ZpcnN0LCBfX24pID09IF9fbjsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmUsCisJICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgorICAgIGlubGluZSBib29sCisgICAgX19pc19oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfQ29tcGFyZSBfX2NvbXAsIF9EaXN0YW5jZSBfX24pCisgICAgeyByZXR1cm4gc3RkOjpfX2lzX2hlYXBfdW50aWwoX19maXJzdCwgX19uLCBfX2NvbXApID09IF9fbjsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9faXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKKyAgICB7IHJldHVybiBzdGQ6Ol9faXNfaGVhcChfX2ZpcnN0LCBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCkpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9faXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKKwkgICAgICBfQ29tcGFyZSBfX2NvbXApCisgICAgeyByZXR1cm4gc3RkOjpfX2lzX2hlYXAoX19maXJzdCwgX19jb21wLCBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCkpOyB9CisKKyAgLy8gSGVhcC1tYW5pcHVsYXRpb24gZnVuY3Rpb25zOiBwdXNoX2hlYXAsIHBvcF9oZWFwLCBtYWtlX2hlYXAsIHNvcnRfaGVhcCwKKyAgLy8gKyBpc19oZWFwIGFuZCBpc19oZWFwX3VudGlsIGluIEMrKzB4LgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHA+CisgICAgdm9pZAorICAgIF9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAorCQlfRGlzdGFuY2UgX19ob2xlSW5kZXgsIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1ZSkKKyAgICB7CisgICAgICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CisgICAgICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYmICooX19maXJzdCArIF9fcGFyZW50KSA8IF9fdmFsdWUpCisJeworCSAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX0dMSUJDWFhfTU9WRSgqKF9fZmlyc3QgKyBfX3BhcmVudCkpOworCSAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsKKwkgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOworCX0KKyAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9HTElCQ1hYX01PVkUoX192YWx1ZSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBQdXNoIGFuIGVsZW1lbnQgb250byBhIGhlYXAuCisgICAqICBAcGFyYW0gIGZpcnN0ICBTdGFydCBvZiBoZWFwLgorICAgKiAgQHBhcmFtICBsYXN0ICAgRW5kIG9mIGhlYXAgKyBlbGVtZW50LgorICAgKiAgQGluZ3JvdXAgaGVhcF9hbGdvcml0aG1zCisgICAqCisgICAqICBUaGlzIG9wZXJhdGlvbiBwdXNoZXMgdGhlIGVsZW1lbnQgYXQgbGFzdC0xIG9udG8gdGhlIHZhbGlkIGhlYXAgb3ZlciB0aGUKKyAgICogIHJhbmdlIFtmaXJzdCxsYXN0LTEpLiAgQWZ0ZXIgY29tcGxldGlvbiwgW2ZpcnN0LGxhc3QpIGlzIGEgdmFsaWQgaGVhcC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgorICAgIGlubGluZSB2b2lkCisgICAgcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwkgIF9WYWx1ZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKwkgIF9EaXN0YW5jZVR5cGU7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PAorCSAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbkNvbXBhcmFibGVDb25jZXB0PF9WYWx1ZVR5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSAxKTsKKworICAgICAgX1ZhbHVlVHlwZSBfX3ZhbHVlID0gX0dMSUJDWFhfTU9WRSgqKF9fbGFzdCAtIDEpKTsKKyAgICAgIHN0ZDo6X19wdXNoX2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlVHlwZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwKKwkJICAgICAgIF9EaXN0YW5jZVR5cGUoMCksIF9HTElCQ1hYX01PVkUoX192YWx1ZSkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwLAorCSAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQKKyAgICBfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAorCQlfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CisgICAgICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4CisJICAgICAmJiBfX2NvbXAoKihfX2ZpcnN0ICsgX19wYXJlbnQpLCBfX3ZhbHVlKSkKKwl7CisJICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfR0xJQkNYWF9NT1ZFKCooX19maXJzdCArIF9fcGFyZW50KSk7CisJICBfX2hvbGVJbmRleCA9IF9fcGFyZW50OworCSAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CisJfQorICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX0dMSUJDWFhfTU9WRShfX3ZhbHVlKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFB1c2ggYW4gZWxlbWVudCBvbnRvIGEgaGVhcCB1c2luZyBjb21wYXJpc29uIGZ1bmN0b3IuCisgICAqICBAcGFyYW0gIGZpcnN0ICBTdGFydCBvZiBoZWFwLgorICAgKiAgQHBhcmFtICBsYXN0ICAgRW5kIG9mIGhlYXAgKyBlbGVtZW50LgorICAgKiAgQHBhcmFtICBjb21wICAgQ29tcGFyaXNvbiBmdW5jdG9yLgorICAgKiAgQGluZ3JvdXAgaGVhcF9hbGdvcml0aG1zCisgICAqCisgICAqICBUaGlzIG9wZXJhdGlvbiBwdXNoZXMgdGhlIGVsZW1lbnQgYXQgbGFzdC0xIG9udG8gdGhlIHZhbGlkIGhlYXAgb3ZlciB0aGUKKyAgICogIHJhbmdlIFtmaXJzdCxsYXN0LTEpLiAgQWZ0ZXIgY29tcGxldGlvbiwgW2ZpcnN0LGxhc3QpIGlzIGEgdmFsaWQgaGVhcC4KKyAgICogIENvbXBhcmUgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIHVzaW5nIGNvbXAuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgaW5saW5lIHZvaWQKKyAgICBwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCisJICAgICAgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwkgIF9WYWx1ZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKwkgIF9EaXN0YW5jZVR5cGU7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PAorCSAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaGVhcF9wcmVkKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fY29tcCk7CisKKyAgICAgIF9WYWx1ZVR5cGUgX192YWx1ZSA9IF9HTElCQ1hYX01PVkUoKihfX2xhc3QgLSAxKSk7CisgICAgICBzdGQ6Ol9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZVR5cGUoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksCisJCSAgICAgICBfRGlzdGFuY2VUeXBlKDApLCBfR0xJQkNYWF9NT1ZFKF9fdmFsdWUpLCBfX2NvbXApOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICBfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCisJCSAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAgX192YWx1ZSkKKyAgICB7CisgICAgICBjb25zdCBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4OworICAgICAgX0Rpc3RhbmNlIF9fc2Vjb25kQ2hpbGQgPSBfX2hvbGVJbmRleDsKKyAgICAgIHdoaWxlIChfX3NlY29uZENoaWxkIDwgKF9fbGVuIC0gMSkgLyAyKQorCXsKKwkgIF9fc2Vjb25kQ2hpbGQgPSAyICogKF9fc2Vjb25kQ2hpbGQgKyAxKTsKKwkgIGlmICgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKSA8ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKQorCSAgICBfX3NlY29uZENoaWxkLS07CisJICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfR0xJQkNYWF9NT1ZFKCooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpKTsKKwkgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKKwl9CisgICAgICBpZiAoKF9fbGVuICYgMSkgPT0gMCAmJiBfX3NlY29uZENoaWxkID09IChfX2xlbiAtIDIpIC8gMikKKwl7CisJICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CisJICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfR0xJQkNYWF9NT1ZFKCooX19maXJzdAorCQkJCQkJICAgICArIChfX3NlY29uZENoaWxkIC0gMSkpKTsKKwkgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7CisJfQorICAgICAgc3RkOjpfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwKKwkJICAgICAgIF9HTElCQ1hYX01PVkUoX192YWx1ZSkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAorCSAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1bHQpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKwlfRGlzdGFuY2VUeXBlOworCisgICAgICBfVmFsdWVUeXBlIF9fdmFsdWUgPSBfR0xJQkNYWF9NT1ZFKCpfX3Jlc3VsdCk7CisgICAgICAqX19yZXN1bHQgPSBfR0xJQkNYWF9NT1ZFKCpfX2ZpcnN0KTsKKyAgICAgIHN0ZDo6X19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAorCQkJIF9EaXN0YW5jZVR5cGUoX19sYXN0IC0gX19maXJzdCksCisJCQkgX0dMSUJDWFhfTU9WRShfX3ZhbHVlKSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBQb3AgYW4gZWxlbWVudCBvZmYgYSBoZWFwLgorICAgKiAgQHBhcmFtICBmaXJzdCAgU3RhcnQgb2YgaGVhcC4KKyAgICogIEBwYXJhbSAgbGFzdCAgIEVuZCBvZiBoZWFwLgorICAgKiAgQGluZ3JvdXAgaGVhcF9hbGdvcml0aG1zCisgICAqCisgICAqICBUaGlzIG9wZXJhdGlvbiBwb3BzIHRoZSB0b3Agb2YgdGhlIGhlYXAuICBUaGUgZWxlbWVudHMgZmlyc3QgYW5kIGxhc3QtMQorICAgKiAgYXJlIHN3YXBwZWQgYW5kIFtmaXJzdCxsYXN0LTEpIGlzIG1hZGUgaW50byBhIGhlYXAuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KKyAgICBpbmxpbmUgdm9pZAorICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlOworCisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yQ29uY2VwdDwKKwkgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5Db21wYXJhYmxlQ29uY2VwdDxfVmFsdWVUeXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2hlYXAoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgLS1fX2xhc3Q7CisgICAgICBzdGQ6Ol9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LCBfX2xhc3QpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwKKwkgICB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQKKyAgICBfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCisJCSAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIGNvbnN0IF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CisgICAgICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IF9faG9sZUluZGV4OworICAgICAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCAoX19sZW4gLSAxKSAvIDIpCisJeworCSAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOworCSAgaWYgKF9fY29tcCgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKSwKKwkJICAgICAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkpCisJICAgIF9fc2Vjb25kQ2hpbGQtLTsKKwkgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9HTElCQ1hYX01PVkUoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCkpOworCSAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkOworCX0KKyAgICAgIGlmICgoX19sZW4gJiAxKSA9PSAwICYmIF9fc2Vjb25kQ2hpbGQgPT0gKF9fbGVuIC0gMikgLyAyKQorCXsKKwkgIF9fc2Vjb25kQ2hpbGQgPSAyICogKF9fc2Vjb25kQ2hpbGQgKyAxKTsKKwkgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9HTElCQ1hYX01PVkUoKihfX2ZpcnN0CisJCQkJCQkgICAgICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpOworCSAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsKKwl9CisgICAgICBzdGQ6Ol9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCAKKwkJICAgICAgIF9HTElCQ1hYX01PVkUoX192YWx1ZSksIF9fY29tcCk7ICAgICAgCisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAorCSAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorCV9EaXN0YW5jZVR5cGU7CisKKyAgICAgIF9WYWx1ZVR5cGUgX192YWx1ZSA9IF9HTElCQ1hYX01PVkUoKl9fcmVzdWx0KTsKKyAgICAgICpfX3Jlc3VsdCA9IF9HTElCQ1hYX01PVkUoKl9fZmlyc3QpOworICAgICAgc3RkOjpfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZVR5cGUoMCksCisJCQkgX0Rpc3RhbmNlVHlwZShfX2xhc3QgLSBfX2ZpcnN0KSwKKwkJCSBfR0xJQkNYWF9NT1ZFKF9fdmFsdWUpLCBfX2NvbXApOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgUG9wIGFuIGVsZW1lbnQgb2ZmIGEgaGVhcCB1c2luZyBjb21wYXJpc29uIGZ1bmN0b3IuCisgICAqICBAcGFyYW0gIGZpcnN0ICBTdGFydCBvZiBoZWFwLgorICAgKiAgQHBhcmFtICBsYXN0ICAgRW5kIG9mIGhlYXAuCisgICAqICBAcGFyYW0gIGNvbXAgICBDb21wYXJpc29uIGZ1bmN0b3IgdG8gdXNlLgorICAgKiAgQGluZ3JvdXAgaGVhcF9hbGdvcml0aG1zCisgICAqCisgICAqICBUaGlzIG9wZXJhdGlvbiBwb3BzIHRoZSB0b3Agb2YgdGhlIGhlYXAuICBUaGUgZWxlbWVudHMgZmlyc3QgYW5kIGxhc3QtMQorICAgKiAgYXJlIHN3YXBwZWQgYW5kIFtmaXJzdCxsYXN0LTEpIGlzIG1hZGUgaW50byBhIGhlYXAuICBDb21wYXJpc29ucyBhcmUKKyAgICogIG1hZGUgdXNpbmcgY29tcC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgdm9pZAorICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAorCSAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PAorCSAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaGVhcF9wcmVkKF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKKworICAgICAgLS1fX2xhc3Q7CisgICAgICBzdGQ6Ol9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LCBfX2xhc3QsIF9fY29tcCk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBDb25zdHJ1Y3QgYSBoZWFwIG92ZXIgYSByYW5nZS4KKyAgICogIEBwYXJhbSAgZmlyc3QgIFN0YXJ0IG9mIGhlYXAuCisgICAqICBAcGFyYW0gIGxhc3QgICBFbmQgb2YgaGVhcC4KKyAgICogIEBpbmdyb3VwIGhlYXBfYWxnb3JpdGhtcworICAgKgorICAgKiAgVGhpcyBvcGVyYXRpb24gbWFrZXMgdGhlIGVsZW1lbnRzIGluIFtmaXJzdCxsYXN0KSBpbnRvIGEgaGVhcC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgorICAgIHZvaWQKKyAgICBtYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCSAgX1ZhbHVlVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorCSAgX0Rpc3RhbmNlVHlwZTsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8CisJICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuQ29tcGFyYWJsZUNvbmNlcHQ8X1ZhbHVlVHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKQorCXJldHVybjsKKworICAgICAgY29uc3QgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CisgICAgICBfRGlzdGFuY2VUeXBlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikgLyAyOworICAgICAgd2hpbGUgKHRydWUpCisJeworCSAgX1ZhbHVlVHlwZSBfX3ZhbHVlID0gX0dMSUJDWFhfTU9WRSgqKF9fZmlyc3QgKyBfX3BhcmVudCkpOworCSAgc3RkOjpfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX0dMSUJDWFhfTU9WRShfX3ZhbHVlKSk7CisJICBpZiAoX19wYXJlbnQgPT0gMCkKKwkgICAgcmV0dXJuOworCSAgX19wYXJlbnQtLTsKKwl9CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBDb25zdHJ1Y3QgYSBoZWFwIG92ZXIgYSByYW5nZSB1c2luZyBjb21wYXJpc29uIGZ1bmN0b3IuCisgICAqICBAcGFyYW0gIGZpcnN0ICBTdGFydCBvZiBoZWFwLgorICAgKiAgQHBhcmFtICBsYXN0ICAgRW5kIG9mIGhlYXAuCisgICAqICBAcGFyYW0gIGNvbXAgICBDb21wYXJpc29uIGZ1bmN0b3IgdG8gdXNlLgorICAgKiAgQGluZ3JvdXAgaGVhcF9hbGdvcml0aG1zCisgICAqCisgICAqICBUaGlzIG9wZXJhdGlvbiBtYWtlcyB0aGUgZWxlbWVudHMgaW4gW2ZpcnN0LGxhc3QpIGludG8gYSBoZWFwLgorICAgKiAgQ29tcGFyaXNvbnMgYXJlIG1hZGUgdXNpbmcgY29tcC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB2b2lkCisgICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAorCSAgICAgIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJICBfVmFsdWVUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCisJICBfRGlzdGFuY2VUeXBlOworCisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yQ29uY2VwdDwKKwkgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDIpCisJcmV0dXJuOworCisgICAgICBjb25zdCBfRGlzdGFuY2VUeXBlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKKyAgICAgIF9EaXN0YW5jZVR5cGUgX19wYXJlbnQgPSAoX19sZW4gLSAyKSAvIDI7CisgICAgICB3aGlsZSAodHJ1ZSkKKwl7CisJICBfVmFsdWVUeXBlIF9fdmFsdWUgPSBfR0xJQkNYWF9NT1ZFKCooX19maXJzdCArIF9fcGFyZW50KSk7CisJICBzdGQ6Ol9fYWRqdXN0X2hlYXAoX19maXJzdCwgX19wYXJlbnQsIF9fbGVuLCBfR0xJQkNYWF9NT1ZFKF9fdmFsdWUpLAorCQkJICAgICBfX2NvbXApOworCSAgaWYgKF9fcGFyZW50ID09IDApCisJICAgIHJldHVybjsKKwkgIF9fcGFyZW50LS07CisJfQorICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgU29ydCBhIGhlYXAuCisgICAqICBAcGFyYW0gIGZpcnN0ICBTdGFydCBvZiBoZWFwLgorICAgKiAgQHBhcmFtICBsYXN0ICAgRW5kIG9mIGhlYXAuCisgICAqICBAaW5ncm91cCBoZWFwX2FsZ29yaXRobXMKKyAgICoKKyAgICogIFRoaXMgb3BlcmF0aW9uIHNvcnRzIHRoZSB2YWxpZCBoZWFwIGluIHRoZSByYW5nZSBbZmlyc3QsbGFzdCkuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KKyAgICB2b2lkCisgICAgc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PAorCSAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbkNvbXBhcmFibGVDb25jZXB0PAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19oZWFwKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKKwl7CisJICAtLV9fbGFzdDsKKwkgIHN0ZDo6X19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCk7CisJfQorICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgU29ydCBhIGhlYXAgdXNpbmcgY29tcGFyaXNvbiBmdW5jdG9yLgorICAgKiAgQHBhcmFtICBmaXJzdCAgU3RhcnQgb2YgaGVhcC4KKyAgICogIEBwYXJhbSAgbGFzdCAgIEVuZCBvZiBoZWFwLgorICAgKiAgQHBhcmFtICBjb21wICAgQ29tcGFyaXNvbiBmdW5jdG9yIHRvIHVzZS4KKyAgICogIEBpbmdyb3VwIGhlYXBfYWxnb3JpdGhtcworICAgKgorICAgKiAgVGhpcyBvcGVyYXRpb24gc29ydHMgdGhlIHZhbGlkIGhlYXAgaW4gdGhlIHJhbmdlIFtmaXJzdCxsYXN0KS4KKyAgICogIENvbXBhcmlzb25zIGFyZSBtYWRlIHVzaW5nIGNvbXAuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZAorICAgIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKKwkgICAgICBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8CisJICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19oZWFwX3ByZWQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOworCisgICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCisJeworCSAgLS1fX2xhc3Q7CisJICBzdGQ6Ol9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LCBfX2xhc3QsIF9fY29tcCk7CisJfQorICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgIC8qKgorICAgKiAgQGJyaWVmICBTZWFyY2ggdGhlIGVuZCBvZiBhIGhlYXAuCisgICAqICBAcGFyYW0gIGZpcnN0ICBTdGFydCBvZiByYW5nZS4KKyAgICogIEBwYXJhbSAgbGFzdCAgIEVuZCBvZiByYW5nZS4KKyAgICogIEByZXR1cm4gIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50IG5vdCBpbiB0aGUgaGVhcC4KKyAgICogIEBpbmdyb3VwIGhlYXBfYWxnb3JpdGhtcworICAgKgorICAgKiAgVGhpcyBvcGVyYXRpb24gcmV0dXJucyB0aGUgbGFzdCBpdGVyYXRvciBpIGluIFtmaXJzdCwgbGFzdCkgZm9yIHdoaWNoCisgICAqICB0aGUgcmFuZ2UgW2ZpcnN0LCBpKSBpcyBhIGhlYXAuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KKyAgICBpbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yCisgICAgaXNfaGVhcF91bnRpbChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8CisJICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuQ29tcGFyYWJsZUNvbmNlcHQ8CisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICByZXR1cm4gX19maXJzdCArIHN0ZDo6X19pc19oZWFwX3VudGlsKF9fZmlyc3QsIHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwKKwkJCQkJCQkJICAgX19sYXN0KSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBTZWFyY2ggdGhlIGVuZCBvZiBhIGhlYXAgdXNpbmcgY29tcGFyaXNvbiBmdW5jdG9yLgorICAgKiAgQHBhcmFtICBmaXJzdCAgU3RhcnQgb2YgcmFuZ2UuCisgICAqICBAcGFyYW0gIGxhc3QgICBFbmQgb2YgcmFuZ2UuCisgICAqICBAcGFyYW0gIGNvbXAgICBDb21wYXJpc29uIGZ1bmN0b3IgdG8gdXNlLgorICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IGVsZW1lbnQgbm90IGluIHRoZSBoZWFwLgorICAgKiAgQGluZ3JvdXAgaGVhcF9hbGdvcml0aG1zCisgICAqCisgICAqICBUaGlzIG9wZXJhdGlvbiByZXR1cm5zIHRoZSBsYXN0IGl0ZXJhdG9yIGkgaW4gW2ZpcnN0LCBsYXN0KSBmb3Igd2hpY2gKKyAgICogIHRoZSByYW5nZSBbZmlyc3QsIGkpIGlzIGEgaGVhcC4gIENvbXBhcmlzb25zIGFyZSBtYWRlIHVzaW5nIGNvbXAuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcgorICAgIGlzX2hlYXBfdW50aWwoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCisJCSAgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yQ29uY2VwdDwKKwkgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICByZXR1cm4gX19maXJzdCArIHN0ZDo6X19pc19oZWFwX3VudGlsKF9fZmlyc3QsIHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwKKwkJCQkJCQkJICAgX19sYXN0KSwKKwkJCQkJICAgIF9fY29tcCk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBEZXRlcm1pbmVzIHdoZXRoZXIgYSByYW5nZSBpcyBhIGhlYXAuCisgICAqICBAcGFyYW0gIGZpcnN0ICBTdGFydCBvZiByYW5nZS4KKyAgICogIEBwYXJhbSAgbGFzdCAgIEVuZCBvZiByYW5nZS4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgcmFuZ2UgaXMgYSBoZWFwLCBmYWxzZSBvdGhlcndpc2UuCisgICAqICBAaW5ncm91cCBoZWFwX2FsZ29yaXRobXMKKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgorICAgIGlubGluZSBib29sCisgICAgaXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKKyAgICB7IHJldHVybiBzdGQ6OmlzX2hlYXBfdW50aWwoX19maXJzdCwgX19sYXN0KSA9PSBfX2xhc3Q7IH0KKworICAvKioKKyAgICogIEBicmllZiAgRGV0ZXJtaW5lcyB3aGV0aGVyIGEgcmFuZ2UgaXMgYSBoZWFwIHVzaW5nIGNvbXBhcmlzb24gZnVuY3Rvci4KKyAgICogIEBwYXJhbSAgZmlyc3QgIFN0YXJ0IG9mIHJhbmdlLgorICAgKiAgQHBhcmFtICBsYXN0ICAgRW5kIG9mIHJhbmdlLgorICAgKiAgQHBhcmFtICBjb21wICAgQ29tcGFyaXNvbiBmdW5jdG9yIHRvIHVzZS4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgcmFuZ2UgaXMgYSBoZWFwLCBmYWxzZSBvdGhlcndpc2UuCisgICAqICBAaW5ncm91cCBoZWFwX2FsZ29yaXRobXMKKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIGlzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCisJICAgIF9Db21wYXJlIF9fY29tcCkKKyAgICB7IHJldHVybiBzdGQ6OmlzX2hlYXBfdW50aWwoX19maXJzdCwgX19sYXN0LCBfX2NvbXApID09IF9fbGFzdDsgfQorI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmIC8qIF9TVExfSEVBUF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3RsX2l0ZXJhdG9yLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3RsX2l0ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNhMzkwZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfaXRlcmF0b3IuaApAQCAtMCwwICsxLDEwNzYgQEAKKy8vIEl0ZXJhdG9ycyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTgKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBzdGxfaXRlcmF0b3IuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqCisgKiAgVGhpcyBmaWxlIGltcGxlbWVudHMgcmV2ZXJzZV9pdGVyYXRvciwgYmFja19pbnNlcnRfaXRlcmF0b3IsCisgKiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yLCBpbnNlcnRfaXRlcmF0b3IsIF9fbm9ybWFsX2l0ZXJhdG9yLCBhbmQgdGhlaXIKKyAqICBzdXBwb3J0aW5nIGZ1bmN0aW9ucyBhbmQgb3ZlcmxvYWRlZCBvcGVyYXRvcnMuCisgKi8KKworI2lmbmRlZiBfU1RMX0lURVJBVE9SX0gKKyNkZWZpbmUgX1NUTF9JVEVSQVRPUl9IIDEKKworI2luY2x1ZGUgPGJpdHMvY3BwX3R5cGVfdHJhaXRzLmg+CisjaW5jbHVkZSA8ZXh0L3R5cGVfdHJhaXRzLmg+CisjaW5jbHVkZSA8Yml0cy9tb3ZlLmg+CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIGl0ZXJhdG9ycworICAgKiBAeworICAgKi8KKworICAvLyAyNC40LjEgUmV2ZXJzZSBpdGVyYXRvcnMKKyAgLyoqCisgICAqICBCaWRpcmVjdGlvbmFsIGFuZCByYW5kb20gYWNjZXNzIGl0ZXJhdG9ycyBoYXZlIGNvcnJlc3BvbmRpbmcgcmV2ZXJzZQorICAgKiAgJWl0ZXJhdG9yIGFkYXB0b3JzIHRoYXQgaXRlcmF0ZSB0aHJvdWdoIHRoZSBkYXRhIHN0cnVjdHVyZSBpbiB0aGUKKyAgICogIG9wcG9zaXRlIGRpcmVjdGlvbi4gIFRoZXkgaGF2ZSB0aGUgc2FtZSBzaWduYXR1cmVzIGFzIHRoZSBjb3JyZXNwb25kaW5nCisgICAqICBpdGVyYXRvcnMuICBUaGUgZnVuZGFtZW50YWwgcmVsYXRpb24gYmV0d2VlbiBhIHJldmVyc2UgJWl0ZXJhdG9yIGFuZCBpdHMKKyAgICogIGNvcnJlc3BvbmRpbmcgJWl0ZXJhdG9yIEBjIGkgaXMgZXN0YWJsaXNoZWQgYnkgdGhlIGlkZW50aXR5OgorICAgKiAgQGNvZGUKKyAgICogICAgICAmKihyZXZlcnNlX2l0ZXJhdG9yKGkpKSA9PSAmKihpIC0gMSkKKyAgICogIEBlbmRjb2RlCisgICAqCisgICAqICA8ZW0+VGhpcyBtYXBwaW5nIGlzIGRpY3RhdGVkIGJ5IHRoZSBmYWN0IHRoYXQgd2hpbGUgdGhlcmUgaXMgYWx3YXlzIGEKKyAgICogIHBvaW50ZXIgcGFzdCB0aGUgZW5kIG9mIGFuIGFycmF5LCB0aGVyZSBtaWdodCBub3QgYmUgYSB2YWxpZCBwb2ludGVyCisgICAqICBiZWZvcmUgdGhlIGJlZ2lubmluZyBvZiBhbiBhcnJheS48L2VtPiBbMjQuNC4xXS8xLDIKKyAgICoKKyAgICogIFJldmVyc2UgaXRlcmF0b3JzIGNhbiBiZSB0cmlja3kgYW5kIHN1cnByaXNpbmcgYXQgZmlyc3QuICBUaGVpcgorICAgKiAgc2VtYW50aWNzIG1ha2Ugc2Vuc2UsIGhvd2V2ZXIsIGFuZCB0aGUgdHJpY2tpbmVzcyBpcyBhIHNpZGUgZWZmZWN0IG9mCisgICAqICB0aGUgcmVxdWlyZW1lbnQgdGhhdCB0aGUgaXRlcmF0b3JzIG11c3QgYmUgc2FmZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgIGNsYXNzIHJldmVyc2VfaXRlcmF0b3IKKyAgICA6IHB1YmxpYyBpdGVyYXRvcjx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCisJCSAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAorCQkgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlLAorCQkgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfSXRlcmF0b3IgY3VycmVudDsKKworICAgICAgdHlwZWRlZiBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPgkJX190cmFpdHNfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0l0ZXJhdG9yCQkJCQlpdGVyYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpkaWZmZXJlbmNlX3R5cGUJZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpwb2ludGVyCQlwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpyZWZlcmVuY2UJCXJlZmVyZW5jZTsKKworICAgICAgLyoqCisgICAgICAgKiAgVGhlIGRlZmF1bHQgY29uc3RydWN0b3IgZGVmYXVsdC1pbml0aWFsaXplcyBtZW1iZXIgQHAgY3VycmVudC4KKyAgICAgICAqICBJZiBpdCBpcyBhIHBvaW50ZXIsIHRoYXQgbWVhbnMgaXQgaXMgemVyby1pbml0aWFsaXplZC4KKyAgICAgICovCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyMzUgTm8gc3BlY2lmaWNhdGlvbiBvZiBkZWZhdWx0IGN0b3IgZm9yIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IoKSA6IGN1cnJlbnQoKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgVGhpcyAlaXRlcmF0b3Igd2lsbCBtb3ZlIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gdGhhdCBAcCB4IGRvZXMuCisgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IoaXRlcmF0b3JfdHlwZSBfX3gpIDogY3VycmVudChfX3gpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBUaGUgY29weSBjb25zdHJ1Y3RvciBpcyBub3JtYWwuCisgICAgICAqLworICAgICAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNlX2l0ZXJhdG9yJiBfX3gpCisgICAgICA6IGN1cnJlbnQoX194LmN1cnJlbnQpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBBIHJldmVyc2VfaXRlcmF0b3IgYWNyb3NzIG90aGVyIHR5cGVzIGNhbiBiZSBjb3BpZWQgaW4gdGhlIG5vcm1hbAorICAgICAgICogIGZhc2hpb24uCisgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CisgICAgICAgIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcj4mIF9feCkKKwk6IGN1cnJlbnQoX194LmJhc2UoKSkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEByZXR1cm4gIEBjIGN1cnJlbnQsIHRoZSAlaXRlcmF0b3IgdXNlZCBmb3IgdW5kZXJseWluZyB3b3JrLgorICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yX3R5cGUKKyAgICAgIGJhc2UoKSBjb25zdAorICAgICAgeyByZXR1cm4gY3VycmVudDsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAcmV0dXJuICBUT0RPCisgICAgICAgKgorICAgICAgICogIEBkb2N0b2RvCisgICAgICAqLworICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeworCV9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CisJcmV0dXJuICotLV9fdG1wOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAcmV0dXJuICBUT0RPCisgICAgICAgKgorICAgICAgICogIEBkb2N0b2RvCisgICAgICAqLworICAgICAgcG9pbnRlcgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CisgICAgICB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAcmV0dXJuICBUT0RPCisgICAgICAgKgorICAgICAgICogIEBkb2N0b2RvCisgICAgICAqLworICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworCS0tY3VycmVudDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEByZXR1cm4gIFRPRE8KKyAgICAgICAqCisgICAgICAgKiAgQGRvY3RvZG8KKyAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsKKwlyZXZlcnNlX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CisJLS1jdXJyZW50OworCXJldHVybiBfX3RtcDsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQHJldHVybiAgVE9ETworICAgICAgICoKKyAgICAgICAqICBAZG9jdG9kbworICAgICAgKi8KKyAgICAgIHJldmVyc2VfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvci0tKCkKKyAgICAgIHsKKwkrK2N1cnJlbnQ7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAcmV0dXJuICBUT0RPCisgICAgICAgKgorICAgICAgICogIEBkb2N0b2RvCisgICAgICAqLworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgb3BlcmF0b3ItLShpbnQpCisgICAgICB7CisJcmV2ZXJzZV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOworCSsrY3VycmVudDsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEByZXR1cm4gIFRPRE8KKyAgICAgICAqCisgICAgICAgKiAgQGRvY3RvZG8KKyAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoY3VycmVudCAtIF9fbik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQHJldHVybiAgVE9ETworICAgICAgICoKKyAgICAgICAqICBAZG9jdG9kbworICAgICAgKi8KKyAgICAgIHJldmVyc2VfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX24pCisgICAgICB7CisJY3VycmVudCAtPSBfX247CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAcmV0dXJuICBUT0RPCisgICAgICAgKgorICAgICAgICogIEBkb2N0b2RvCisgICAgICAqLworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGN1cnJlbnQgKyBfX24pOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEByZXR1cm4gIFRPRE8KKyAgICAgICAqCisgICAgICAgKiAgQGRvY3RvZG8KKyAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19uKQorICAgICAgeworCWN1cnJlbnQgKz0gX19uOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQHJldHVybiAgVE9ETworICAgICAgICoKKyAgICAgICAqICBAZG9jdG9kbworICAgICAgKi8KKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0KKyAgICB9OworCisgIC8vQHsKKyAgLyoqCisgICAqICBAcGFyYW0gIHggIEEgJXJldmVyc2VfaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIHkgIEEgJXJldmVyc2VfaXRlcmF0b3IuCisgICAqICBAcmV0dXJuICBBIHNpbXBsZSBib29sLgorICAgKgorICAgKiAgUmV2ZXJzZSBpdGVyYXRvcnMgZm9yd2FyZCBtYW55IG9wZXJhdGlvbnMgdG8gdGhlaXIgdW5kZXJseWluZyBiYXNlKCkKKyAgICogIGl0ZXJhdG9ycy4gIE90aGVycyBhcmUgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2Ygb25lIGFub3RoZXIuCisgICAqCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCisJICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKKwkgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKKyAgICB7IHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCisJICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCisJICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCisgICAgeyByZXR1cm4gX195IDwgX194OyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKKwkgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKKwkgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgIGlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorICAgIG9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKKwkgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKKyAgICB7IHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KKyAgICBpbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+CisgICAgb3BlcmF0b3IrKHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKKwkgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCkKKyAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4oX194LmJhc2UoKSAtIF9fbik7IH0KKworICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgIC8vIERSIDI4MC4gQ29tcGFyaXNvbiBvZiByZXZlcnNlX2l0ZXJhdG9yIHRvIGNvbnN0IHJldmVyc2VfaXRlcmF0b3IuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yTD4mIF9feCwKKwkgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3JSPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3JMPiYgX194LAorCSAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yUj4mIF9feSkKKyAgICB7IHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yTD4mIF9feCwKKwkgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3JSPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yTD4mIF9feCwKKwkgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvclI+JiBfX3kpCisgICAgeyByZXR1cm4gX195IDwgX194OyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3JMPiYgX194LAorCSAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvclI+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3JMPiYgX194LAorCSAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvclI+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUj4KKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgIC8vIERSIDY4NS4KKyAgICBpbmxpbmUgYXV0bworICAgIG9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvckw+JiBfX3gsCisJICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3JSPiYgX195KQorICAgIC0+IGRlY2x0eXBlKF9feS5iYXNlKCkgLSBfX3guYmFzZSgpKQorI2Vsc2UKKyAgICBpbmxpbmUgdHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3JMPjo6ZGlmZmVyZW5jZV90eXBlCisgICAgb3BlcmF0b3ItKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yTD4mIF9feCwKKwkgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvclI+JiBfX3kpCisjZW5kaWYKKyAgICB7IHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsgfQorICAvL0B9CisKKyAgLy8gMjQuNC4yLjIuMSBiYWNrX2luc2VydF9pdGVyYXRvcgorICAvKioKKyAgICogIEBicmllZiAgVHVybnMgYXNzaWdubWVudCBpbnRvIGluc2VydGlvbi4KKyAgICoKKyAgICogIFRoZXNlIGFyZSBvdXRwdXQgaXRlcmF0b3JzLCBjb25zdHJ1Y3RlZCBmcm9tIGEgY29udGFpbmVyLW9mLVQuCisgICAqICBBc3NpZ25pbmcgYSBUIHRvIHRoZSBpdGVyYXRvciBhcHBlbmRzIGl0IHRvIHRoZSBjb250YWluZXIgdXNpbmcKKyAgICogIHB1c2hfYmFjay4KKyAgICoKKyAgICogIFRpcDogIFVzaW5nIHRoZSBiYWNrX2luc2VydGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGVzZSBpdGVyYXRvcnMgY2FuCisgICAqICBzYXZlIHR5cGluZy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KKyAgICBjbGFzcyBiYWNrX2luc2VydF9pdGVyYXRvcgorICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vLyBBIG5lc3RlZCB0eXBlZGVmIGZvciB0aGUgdHlwZSBvZiB3aGF0ZXZlciBjb250YWluZXIgeW91IHVzZWQuCisgICAgICB0eXBlZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5cGU7CisKKyAgICAgIC8vLyBUaGUgb25seSB3YXkgdG8gY3JlYXRlIHRoaXMgJWl0ZXJhdG9yIGlzIHdpdGggYSBjb250YWluZXIuCisgICAgICBleHBsaWNpdAorICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQHBhcmFtICB2YWx1ZSAgQW4gaW5zdGFuY2Ugb2Ygd2hhdGV2ZXIgdHlwZQorICAgICAgICogICAgICAgICAgICAgICAgIGNvbnRhaW5lcl90eXBlOjpjb25zdF9yZWZlcmVuY2UgaXM7IHByZXN1bWFibHkgYQorICAgICAgICogICAgICAgICAgICAgICAgIHJlZmVyZW5jZS10by1jb25zdCBUIGZvciBjb250YWluZXI8VD4uCisgICAgICAgKiAgQHJldHVybiAgVGhpcyAlaXRlcmF0b3IsIGZvciBjaGFpbmVkIG9wZXJhdGlvbnMuCisgICAgICAgKgorICAgICAgICogIFRoaXMga2luZCBvZiAlaXRlcmF0b3IgZG9lc24ndCByZWFsbHkgaGF2ZSBhIEBhIHBvc2l0aW9uIGluIHRoZQorICAgICAgICogIGNvbnRhaW5lciAoeW91IGNhbiB0aGluayBvZiB0aGUgcG9zaXRpb24gYXMgYmVpbmcgcGVybWFuZW50bHkgYXQKKyAgICAgICAqICB0aGUgZW5kLCBpZiB5b3UgbGlrZSkuICBBc3NpZ25pbmcgYSB2YWx1ZSB0byB0aGUgJWl0ZXJhdG9yIHdpbGwKKyAgICAgICAqICBhbHdheXMgYXBwZW5kIHRoZSB2YWx1ZSB0byB0aGUgZW5kIG9mIHRoZSBjb250YWluZXIuCisgICAgICAqLworI2lmbmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcj0odHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCisgICAgICB7CisJY29udGFpbmVyLT5wdXNoX2JhY2soX192YWx1ZSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorI2Vsc2UKKyAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpCisgICAgICB7CisJY29udGFpbmVyLT5wdXNoX2JhY2soX192YWx1ZSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yPSh0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiYgX192YWx1ZSkKKyAgICAgIHsKKwljb250YWluZXItPnB1c2hfYmFjayhzdGQ6Om1vdmUoX192YWx1ZSkpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICAvLy8gU2ltcGx5IHJldHVybnMgKnRoaXMuCisgICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKigpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorCisgICAgICAvLy8gU2ltcGx5IHJldHVybnMgKnRoaXMuICAoVGhpcyAlaXRlcmF0b3IgZG9lcyBub3QgQGEgbW92ZS4pCisgICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgLy8vIFNpbXBseSByZXR1cm5zICp0aGlzLiAgKFRoaXMgJWl0ZXJhdG9yIGRvZXMgbm90IEBhIG1vdmUuKQorICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3IKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKyAgICB9OworCisgIC8qKgorICAgKiAgQHBhcmFtICB4ICBBIGNvbnRhaW5lciBvZiBhcmJpdHJhcnkgdHlwZS4KKyAgICogIEByZXR1cm4gIEFuIGluc3RhbmNlIG9mIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yIHdvcmtpbmcgb24gQHAgeC4KKyAgICoKKyAgICogIFRoaXMgd3JhcHBlciBmdW5jdGlvbiBoZWxwcyBpbiBjcmVhdGluZyBiYWNrX2luc2VydF9pdGVyYXRvciBpbnN0YW5jZXMuCisgICAqICBUeXBpbmcgdGhlIG5hbWUgb2YgdGhlICVpdGVyYXRvciByZXF1aXJlcyBrbm93aW5nIHRoZSBwcmVjaXNlIGZ1bGwKKyAgICogIHR5cGUgb2YgdGhlIGNvbnRhaW5lciwgd2hpY2ggY2FuIGJlIHRlZGlvdXMgYW5kIGltcGVkZXMgZ2VuZXJpYworICAgKiAgcHJvZ3JhbW1pbmcuICBVc2luZyB0aGlzIGZ1bmN0aW9uIGxldHMgeW91IHRha2UgYWR2YW50YWdlIG9mIGF1dG9tYXRpYworICAgKiAgdGVtcGxhdGUgcGFyYW1ldGVyIGRlZHVjdGlvbiwgbWFraW5nIHRoZSBjb21waWxlciBtYXRjaCB0aGUgY29ycmVjdAorICAgKiAgdHlwZXMgZm9yIHlvdS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KKyAgICBpbmxpbmUgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4KKyAgICBiYWNrX2luc2VydGVyKF9Db250YWluZXImIF9feCkKKyAgICB7IHJldHVybiBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFR1cm5zIGFzc2lnbm1lbnQgaW50byBpbnNlcnRpb24uCisgICAqCisgICAqICBUaGVzZSBhcmUgb3V0cHV0IGl0ZXJhdG9ycywgY29uc3RydWN0ZWQgZnJvbSBhIGNvbnRhaW5lci1vZi1ULgorICAgKiAgQXNzaWduaW5nIGEgVCB0byB0aGUgaXRlcmF0b3IgcHJlcGVuZHMgaXQgdG8gdGhlIGNvbnRhaW5lciB1c2luZworICAgKiAgcHVzaF9mcm9udC4KKyAgICoKKyAgICogIFRpcDogIFVzaW5nIHRoZSBmcm9udF9pbnNlcnRlciBmdW5jdGlvbiB0byBjcmVhdGUgdGhlc2UgaXRlcmF0b3JzIGNhbgorICAgKiAgc2F2ZSB0eXBpbmcuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CisgICAgY2xhc3MgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yCisgICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOworCisgICAgcHVibGljOgorICAgICAgLy8vIEEgbmVzdGVkIHR5cGVkZWYgZm9yIHRoZSB0eXBlIG9mIHdoYXRldmVyIGNvbnRhaW5lciB5b3UgdXNlZC4KKyAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWluZXJfdHlwZTsKKworICAgICAgLy8vIFRoZSBvbmx5IHdheSB0byBjcmVhdGUgdGhpcyAlaXRlcmF0b3IgaXMgd2l0aCBhIGNvbnRhaW5lci4KKyAgICAgIGV4cGxpY2l0IGZyb250X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAcGFyYW0gIHZhbHVlICBBbiBpbnN0YW5jZSBvZiB3aGF0ZXZlciB0eXBlCisgICAgICAgKiAgICAgICAgICAgICAgICAgY29udGFpbmVyX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBpczsgcHJlc3VtYWJseSBhCisgICAgICAgKiAgICAgICAgICAgICAgICAgcmVmZXJlbmNlLXRvLWNvbnN0IFQgZm9yIGNvbnRhaW5lcjxUPi4KKyAgICAgICAqICBAcmV0dXJuICBUaGlzICVpdGVyYXRvciwgZm9yIGNoYWluZWQgb3BlcmF0aW9ucy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBraW5kIG9mICVpdGVyYXRvciBkb2Vzbid0IHJlYWxseSBoYXZlIGEgQGEgcG9zaXRpb24gaW4gdGhlCisgICAgICAgKiAgY29udGFpbmVyICh5b3UgY2FuIHRoaW5rIG9mIHRoZSBwb3NpdGlvbiBhcyBiZWluZyBwZXJtYW5lbnRseSBhdAorICAgICAgICogIHRoZSBmcm9udCwgaWYgeW91IGxpa2UpLiAgQXNzaWduaW5nIGEgdmFsdWUgdG8gdGhlICVpdGVyYXRvciB3aWxsCisgICAgICAgKiAgYWx3YXlzIHByZXBlbmQgdGhlIHZhbHVlIHRvIHRoZSBmcm9udCBvZiB0aGUgY29udGFpbmVyLgorICAgICAgKi8KKyNpZm5kZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yPSh0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKKyAgICAgIHsKKwljb250YWluZXItPnB1c2hfZnJvbnQoX192YWx1ZSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorI2Vsc2UKKyAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKQorICAgICAgeworCWNvbnRhaW5lci0+cHVzaF9mcm9udChfX3ZhbHVlKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yPSh0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiYgX192YWx1ZSkKKyAgICAgIHsKKwljb250YWluZXItPnB1c2hfZnJvbnQoc3RkOjptb3ZlKF9fdmFsdWUpKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisjZW5kaWYKKworICAgICAgLy8vIFNpbXBseSByZXR1cm5zICp0aGlzLgorICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IqKCkKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIC8vLyBTaW1wbHkgcmV0dXJucyAqdGhpcy4gIChUaGlzICVpdGVyYXRvciBkb2VzIG5vdCBAYSBtb3ZlLikKKyAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgLy8vIFNpbXBseSByZXR1cm5zICp0aGlzLiAgKFRoaXMgJWl0ZXJhdG9yIGRvZXMgbm90IEBhIG1vdmUuKQorICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisgICAgfTsKKworICAvKioKKyAgICogIEBwYXJhbSAgeCAgQSBjb250YWluZXIgb2YgYXJiaXRyYXJ5IHR5cGUuCisgICAqICBAcmV0dXJuICBBbiBpbnN0YW5jZSBvZiBmcm9udF9pbnNlcnRfaXRlcmF0b3Igd29ya2luZyBvbiBAcCB4LgorICAgKgorICAgKiAgVGhpcyB3cmFwcGVyIGZ1bmN0aW9uIGhlbHBzIGluIGNyZWF0aW5nIGZyb250X2luc2VydF9pdGVyYXRvciBpbnN0YW5jZXMuCisgICAqICBUeXBpbmcgdGhlIG5hbWUgb2YgdGhlICVpdGVyYXRvciByZXF1aXJlcyBrbm93aW5nIHRoZSBwcmVjaXNlIGZ1bGwKKyAgICogIHR5cGUgb2YgdGhlIGNvbnRhaW5lciwgd2hpY2ggY2FuIGJlIHRlZGlvdXMgYW5kIGltcGVkZXMgZ2VuZXJpYworICAgKiAgcHJvZ3JhbW1pbmcuICBVc2luZyB0aGlzIGZ1bmN0aW9uIGxldHMgeW91IHRha2UgYWR2YW50YWdlIG9mIGF1dG9tYXRpYworICAgKiAgdGVtcGxhdGUgcGFyYW1ldGVyIGRlZHVjdGlvbiwgbWFraW5nIHRoZSBjb21waWxlciBtYXRjaCB0aGUgY29ycmVjdAorICAgKiAgdHlwZXMgZm9yIHlvdS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KKyAgICBpbmxpbmUgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CisgICAgZnJvbnRfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KQorICAgIHsgcmV0dXJuIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFR1cm5zIGFzc2lnbm1lbnQgaW50byBpbnNlcnRpb24uCisgICAqCisgICAqICBUaGVzZSBhcmUgb3V0cHV0IGl0ZXJhdG9ycywgY29uc3RydWN0ZWQgZnJvbSBhIGNvbnRhaW5lci1vZi1ULgorICAgKiAgQXNzaWduaW5nIGEgVCB0byB0aGUgaXRlcmF0b3IgaW5zZXJ0cyBpdCBpbiB0aGUgY29udGFpbmVyIGF0IHRoZQorICAgKiAgJWl0ZXJhdG9yJ3MgcG9zaXRpb24sIHJhdGhlciB0aGFuIG92ZXJ3cml0aW5nIHRoZSB2YWx1ZSBhdCB0aGF0CisgICAqICBwb3NpdGlvbi4KKyAgICoKKyAgICogIChTZXF1ZW5jZXMgd2lsbCBhY3R1YWxseSBpbnNlcnQgYSBAZSBjb3B5IG9mIHRoZSB2YWx1ZSBiZWZvcmUgdGhlCisgICAqICAlaXRlcmF0b3IncyBwb3NpdGlvbi4pCisgICAqCisgICAqICBUaXA6ICBVc2luZyB0aGUgaW5zZXJ0ZXIgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZXNlIGl0ZXJhdG9ycyBjYW4KKyAgICogIHNhdmUgdHlwaW5nLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgorICAgIGNsYXNzIGluc2VydF9pdGVyYXRvcgorICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsKKyAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7CisKKyAgICBwdWJsaWM6CisgICAgICAvLy8gQSBuZXN0ZWQgdHlwZWRlZiBmb3IgdGhlIHR5cGUgb2Ygd2hhdGV2ZXIgY29udGFpbmVyIHlvdSB1c2VkLgorICAgICAgdHlwZWRlZiBfQ29udGFpbmVyICAgICAgICAgIGNvbnRhaW5lcl90eXBlOworCisgICAgICAvKioKKyAgICAgICAqICBUaGUgb25seSB3YXkgdG8gY3JlYXRlIHRoaXMgJWl0ZXJhdG9yIGlzIHdpdGggYSBjb250YWluZXIgYW5kIGFuCisgICAgICAgKiAgaW5pdGlhbCBwb3NpdGlvbiAoYSBub3JtYWwgJWl0ZXJhdG9yIGludG8gdGhlIGNvbnRhaW5lcikuCisgICAgICAqLworICAgICAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pKQorICAgICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQorCisgICAgICAvKioKKyAgICAgICAqICBAcGFyYW0gIHZhbHVlICBBbiBpbnN0YW5jZSBvZiB3aGF0ZXZlciB0eXBlCisgICAgICAgKiAgICAgICAgICAgICAgICAgY29udGFpbmVyX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBpczsgcHJlc3VtYWJseSBhCisgICAgICAgKiAgICAgICAgICAgICAgICAgcmVmZXJlbmNlLXRvLWNvbnN0IFQgZm9yIGNvbnRhaW5lcjxUPi4KKyAgICAgICAqICBAcmV0dXJuICBUaGlzICVpdGVyYXRvciwgZm9yIGNoYWluZWQgb3BlcmF0aW9ucy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBraW5kIG9mICVpdGVyYXRvciBtYWludGFpbnMgaXRzIG93biBwb3NpdGlvbiBpbiB0aGUKKyAgICAgICAqICBjb250YWluZXIuICBBc3NpZ25pbmcgYSB2YWx1ZSB0byB0aGUgJWl0ZXJhdG9yIHdpbGwgaW5zZXJ0IHRoZQorICAgICAgICogIHZhbHVlIGludG8gdGhlIGNvbnRhaW5lciBhdCB0aGUgcGxhY2UgYmVmb3JlIHRoZSAlaXRlcmF0b3IuCisgICAgICAgKgorICAgICAgICogIFRoZSBwb3NpdGlvbiBpcyBtYWludGFpbmVkIHN1Y2ggdGhhdCBzdWJzZXF1ZW50IGFzc2lnbm1lbnRzIHdpbGwKKyAgICAgICAqICBpbnNlcnQgdmFsdWVzIGltbWVkaWF0ZWx5IGFmdGVyIG9uZSBhbm90aGVyLiAgRm9yIGV4YW1wbGUsCisgICAgICAgKiAgQGNvZGUKKyAgICAgICAqICAgICAvLyB2ZWN0b3IgdiBjb250YWlucyBBIGFuZCBaCisgICAgICAgKgorICAgICAgICogICAgIGluc2VydF9pdGVyYXRvciBpICh2LCArK3YuYmVnaW4oKSk7CisgICAgICAgKiAgICAgaSA9IDE7CisgICAgICAgKiAgICAgaSA9IDI7CisgICAgICAgKiAgICAgaSA9IDM7CisgICAgICAgKgorICAgICAgICogICAgIC8vIHZlY3RvciB2IGNvbnRhaW5zIEEsIDEsIDIsIDMsIGFuZCBaCisgICAgICAgKiAgQGVuZGNvZGUKKyAgICAgICovCisjaWZuZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBpbnNlcnRfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcj0odHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCisgICAgICB7CisJaXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIsIF9fdmFsdWUpOworCSsraXRlcjsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisjZWxzZQorICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpCisgICAgICB7CisJaXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIsIF9fdmFsdWUpOworCSsraXRlcjsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGluc2VydF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yPSh0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiYgX192YWx1ZSkKKyAgICAgIHsKKwlpdGVyID0gY29udGFpbmVyLT5pbnNlcnQoaXRlciwgc3RkOjptb3ZlKF9fdmFsdWUpKTsKKwkrK2l0ZXI7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8vLyBTaW1wbHkgcmV0dXJucyAqdGhpcy4KKyAgICAgIGluc2VydF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKigpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorCisgICAgICAvLy8gU2ltcGx5IHJldHVybnMgKnRoaXMuICAoVGhpcyAlaXRlcmF0b3IgZG9lcyBub3QgQGEgbW92ZS4pCisgICAgICBpbnNlcnRfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcisrKCkKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIC8vLyBTaW1wbHkgcmV0dXJucyAqdGhpcy4gIChUaGlzICVpdGVyYXRvciBkb2VzIG5vdCBAYSBtb3ZlLikKKyAgICAgIGluc2VydF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKyAgICB9OworCisgIC8qKgorICAgKiAgQHBhcmFtICB4ICBBIGNvbnRhaW5lciBvZiBhcmJpdHJhcnkgdHlwZS4KKyAgICogIEByZXR1cm4gIEFuIGluc3RhbmNlIG9mIGluc2VydF9pdGVyYXRvciB3b3JraW5nIG9uIEBwIHguCisgICAqCisgICAqICBUaGlzIHdyYXBwZXIgZnVuY3Rpb24gaGVscHMgaW4gY3JlYXRpbmcgaW5zZXJ0X2l0ZXJhdG9yIGluc3RhbmNlcy4KKyAgICogIFR5cGluZyB0aGUgbmFtZSBvZiB0aGUgJWl0ZXJhdG9yIHJlcXVpcmVzIGtub3dpbmcgdGhlIHByZWNpc2UgZnVsbAorICAgKiAgdHlwZSBvZiB0aGUgY29udGFpbmVyLCB3aGljaCBjYW4gYmUgdGVkaW91cyBhbmQgaW1wZWRlcyBnZW5lcmljCisgICAqICBwcm9ncmFtbWluZy4gIFVzaW5nIHRoaXMgZnVuY3Rpb24gbGV0cyB5b3UgdGFrZSBhZHZhbnRhZ2Ugb2YgYXV0b21hdGljCisgICAqICB0ZW1wbGF0ZSBwYXJhbWV0ZXIgZGVkdWN0aW9uLCBtYWtpbmcgdGhlIGNvbXBpbGVyIG1hdGNoIHRoZSBjb3JyZWN0CisgICAqICB0eXBlcyBmb3IgeW91LgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyLCB0eXBlbmFtZSBfSXRlcmF0b3I+CisgICAgaW5saW5lIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPgorICAgIGluc2VydGVyKF9Db250YWluZXImIF9feCwgX0l0ZXJhdG9yIF9faSkKKyAgICB7CisgICAgICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCwKKwkJCQkJIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yKF9faSkpOworICAgIH0KKworICAvLyBAfSBncm91cCBpdGVyYXRvcnMKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorCisgIC8vIFRoaXMgaXRlcmF0b3IgYWRhcHRlciBpcyBAYSBub3JtYWwgaW4gdGhlIHNlbnNlIHRoYXQgaXQgZG9lcyBub3QKKyAgLy8gY2hhbmdlIHRoZSBzZW1hbnRpY3Mgb2YgYW55IG9mIHRoZSBvcGVyYXRvcnMgb2YgaXRzIGl0ZXJhdG9yCisgIC8vIHBhcmFtZXRlci4gIEl0cyBwcmltYXJ5IHB1cnBvc2UgaXMgdG8gY29udmVydCBhbiBpdGVyYXRvciB0aGF0IGlzCisgIC8vIG5vdCBhIGNsYXNzLCBlLmcuIGEgcG9pbnRlciwgaW50byBhbiBpdGVyYXRvciB0aGF0IGlzIGEgY2xhc3MuCisgIC8vIFRoZSBfQ29udGFpbmVyIHBhcmFtZXRlciBleGlzdHMgc29sZWx5IHNvIHRoYXQgZGlmZmVyZW50IGNvbnRhaW5lcnMKKyAgLy8gdXNpbmcgdGhpcyB0ZW1wbGF0ZSBjYW4gaW5zdGFudGlhdGUgZGlmZmVyZW50IHR5cGVzLCBldmVuIGlmIHRoZQorICAvLyBfSXRlcmF0b3IgcGFyYW1ldGVyIGlzIHRoZSBzYW1lLgorICB1c2luZyBzdGQ6Oml0ZXJhdG9yX3RyYWl0czsKKyAgdXNpbmcgc3RkOjppdGVyYXRvcjsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgorICAgIGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yCisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIF9JdGVyYXRvciBfTV9jdXJyZW50OworCisgICAgICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+CQlfX3RyYWl0c190eXBlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfSXRlcmF0b3IJCQkJCWl0ZXJhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjp2YWx1ZV90eXBlICAJdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIAlkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OnJlZmVyZW5jZSAJcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpwb2ludGVyICAgCXBvaW50ZXI7CisKKyAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9JdGVyYXRvcigpKSB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRvciYgX19pKSA6IF9NX2N1cnJlbnQoX19pKSB7IH0KKworICAgICAgLy8gQWxsb3cgaXRlcmF0b3IgdG8gY29uc3RfaXRlcmF0b3IgY29udmVyc2lvbgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CisgICAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyLAorCQkJICB0eXBlbmFtZSBfX2VuYWJsZV9pZjwKKyAgICAgIAkgICAgICAgKHN0ZDo6X19hcmVfc2FtZTxfSXRlciwgdHlwZW5hbWUgX0NvbnRhaW5lcjo6cG9pbnRlcj46Ol9fdmFsdWUpLAorCQkgICAgICBfQ29udGFpbmVyPjo6X190eXBlPiYgX19pKQorICAgICAgICA6IF9NX2N1cnJlbnQoX19pLmJhc2UoKSkgeyB9CisKKyAgICAgIC8vIEZvcndhcmQgaXRlcmF0b3IgcmVxdWlyZW1lbnRzCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICB7IHJldHVybiAqX01fY3VycmVudDsgfQorCisgICAgICBwb2ludGVyCisgICAgICBvcGVyYXRvci0+KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KKworICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcisrKCkKKyAgICAgIHsKKwkrK19NX2N1cnJlbnQ7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfX25vcm1hbF9pdGVyYXRvcgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50KyspOyB9CisKKyAgICAgIC8vIEJpZGlyZWN0aW9uYWwgaXRlcmF0b3IgcmVxdWlyZW1lbnRzCisgICAgICBfX25vcm1hbF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yLS0oKQorICAgICAgeworCS0tX01fY3VycmVudDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCisgICAgICBvcGVyYXRvci0tKGludCkKKyAgICAgIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQtLSk7IH0KKworICAgICAgLy8gUmFuZG9tIGFjY2VzcyBpdGVyYXRvciByZXF1aXJlbWVudHMKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsgfQorCisgICAgICBfX25vcm1hbF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKz0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCisgICAgICB7IF9NX2N1cnJlbnQgKz0gX19uOyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgX19ub3JtYWxfaXRlcmF0b3IKKyAgICAgIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgKyBfX24pOyB9CisKKyAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3ItPShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikKKyAgICAgIHsgX01fY3VycmVudCAtPSBfX247IHJldHVybiAqdGhpczsgfQorCisgICAgICBfX25vcm1hbF9pdGVyYXRvcgorICAgICAgb3BlcmF0b3ItKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCAtIF9fbik7IH0KKworICAgICAgY29uc3QgX0l0ZXJhdG9yJgorICAgICAgYmFzZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9jdXJyZW50OyB9CisgICAgfTsKKworICAvLyBOb3RlOiBJbiB3aGF0IGZvbGxvd3MsIHRoZSBsZWZ0LSBhbmQgcmlnaHQtaGFuZC1zaWRlIGl0ZXJhdG9ycyBhcmUKKyAgLy8gYWxsb3dlZCB0byB2YXJ5IGluIHR5cGVzIChjb25jZXB0dWFsbHkgaW4gY3YtcXVhbGlmaWNhdGlvbikgc28gdGhhdAorICAvLyBjb21wYXJpc29uIGJldHdlZW4gY3YtcXVhbGlmaWVkIGFuZCBub24tY3YtcXVhbGlmaWVkIGl0ZXJhdG9ycyBiZQorICAvLyB2YWxpZC4gIEhvd2V2ZXIsIHRoZSBncmVlZHkgYW5kIHVuZnJpZW5kbHkgb3BlcmF0b3JzIGluIHN0ZDo6cmVsX29wcworICAvLyB3aWxsIG1ha2Ugb3ZlcmxvYWQgcmVzb2x1dGlvbiBhbWJpZ3VvdXMgKHdoZW4gaW4gc2NvcGUpIGlmIHdlIGRvbid0CisgIC8vIHByb3ZpZGUgb3ZlcmxvYWRzIHdob3NlIG9wZXJhbmRzIGFyZSBvZiB0aGUgc2FtZSB0eXBlLiAgQ2FuIHNvbWVvbmUKKyAgLy8gcmVtaW5kIG1lIHdoYXQgZ2VuZXJpYyBwcm9ncmFtbWluZyBpcyBhYm91dD8gLS0gR2FieQorCisgIC8vIEZvcndhcmQgaXRlcmF0b3IgcmVxdWlyZW1lbnRzCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKKwkgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA9PSBfX3Jocy5iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuYmFzZSgpICE9IF9fcmhzLmJhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCisJICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSAhPSBfX3Jocy5iYXNlKCk7IH0KKworICAvLyBSYW5kb20gYWNjZXNzIGl0ZXJhdG9yIHJlcXVpcmVtZW50cworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKKwkgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhzLmJhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCisJICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuYmFzZSgpID4gX19yaHMuYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuYmFzZSgpIDw9IF9fcmhzLmJhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCisJICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCisJICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5iYXNlKCkgPj0gX19yaHMuYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKKwkgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuYmFzZSgpID49IF9fcmhzLmJhc2UoKTsgfQorCisgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgLy8gQWNjb3JkaW5nIHRvIHRoZSByZXNvbHV0aW9uIG9mIERSMTc5IG5vdCBvbmx5IHRoZSB2YXJpb3VzIGNvbXBhcmlzb24KKyAgLy8gb3BlcmF0b3JzIGJ1dCBhbHNvIG9wZXJhdG9yLSBtdXN0IGFjY2VwdCBtaXhlZCBpdGVyYXRvci9jb25zdF9pdGVyYXRvcgorICAvLyBwYXJhbWV0ZXJzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgorI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgLy8gRFIgNjg1LgorICAgIGlubGluZSBhdXRvCisgICAgb3BlcmF0b3ItKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKKwkgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCisgICAgLT4gZGVjbHR5cGUoX19saHMuYmFzZSgpIC0gX19yaHMuYmFzZSgpKQorI2Vsc2UKKyAgICBpbmxpbmUgdHlwZW5hbWUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj46OmRpZmZlcmVuY2VfdHlwZQorICAgIG9wZXJhdG9yLShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCisJICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQorI2VuZGlmCisgICAgeyByZXR1cm4gX19saHMuYmFzZSgpIC0gX19yaHMuYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgorICAgIGlubGluZSB0eXBlbmFtZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBvcGVyYXRvci0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCisJICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuYmFzZSgpIC0gX19yaHMuYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgorICAgIGlubGluZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+CisgICAgb3BlcmF0b3IrKHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj46OmRpZmZlcmVuY2VfdHlwZQorCSAgICAgIF9fbiwgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQorICAgIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4oX19pLmJhc2UoKSArIF9fbik7IH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgaXRlcmF0b3JzCisgICAqIEB7CisgICAqLworCisgIC8vIDI0LjQuMyAgTW92ZSBpdGVyYXRvcnMKKyAgLyoqCisgICAqICBDbGFzcyB0ZW1wbGF0ZSBtb3ZlX2l0ZXJhdG9yIGlzIGFuIGl0ZXJhdG9yIGFkYXB0ZXIgd2l0aCB0aGUgc2FtZQorICAgKiAgYmVoYXZpb3IgYXMgdGhlIHVuZGVybHlpbmcgaXRlcmF0b3IgZXhjZXB0IHRoYXQgaXRzIGRlcmVmZXJlbmNlCisgICAqICBvcGVyYXRvciBpbXBsaWNpdGx5IGNvbnZlcnRzIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgdW5kZXJseWluZworICAgKiAgaXRlcmF0b3IncyBkZXJlZmVyZW5jZSBvcGVyYXRvciB0byBhbiBydmFsdWUgcmVmZXJlbmNlLiAgU29tZQorICAgKiAgZ2VuZXJpYyBhbGdvcml0aG1zIGNhbiBiZSBjYWxsZWQgd2l0aCBtb3ZlIGl0ZXJhdG9ycyB0byByZXBsYWNlCisgICAqICBjb3B5aW5nIHdpdGggbW92aW5nLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgIGNsYXNzIG1vdmVfaXRlcmF0b3IKKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgX0l0ZXJhdG9yIF9NX2N1cnJlbnQ7CisKKyAgICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj4JCV9fdHJhaXRzX3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9JdGVyYXRvcgkJCQkJaXRlcmF0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OnZhbHVlX3R5cGUgIAl2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpkaWZmZXJlbmNlX3R5cGUJZGlmZmVyZW5jZV90eXBlOworICAgICAgLy8gTkI6IERSIDY4MC4KKyAgICAgIHR5cGVkZWYgX0l0ZXJhdG9yCQkJCQlwb2ludGVyOworICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlJiYJCQkJcmVmZXJlbmNlOworCisgICAgICBtb3ZlX2l0ZXJhdG9yKCkKKyAgICAgIDogX01fY3VycmVudCgpIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgbW92ZV9pdGVyYXRvcihpdGVyYXRvcl90eXBlIF9faSkKKyAgICAgIDogX01fY3VycmVudChfX2kpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KKwltb3ZlX2l0ZXJhdG9yKGNvbnN0IG1vdmVfaXRlcmF0b3I8X0l0ZXI+JiBfX2kpCisJOiBfTV9jdXJyZW50KF9faS5iYXNlKCkpIHsgfQorCisgICAgICBpdGVyYXRvcl90eXBlCisgICAgICBiYXNlKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KKworICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjptb3ZlKCpfTV9jdXJyZW50KTsgfQorCisgICAgICBwb2ludGVyCisgICAgICBvcGVyYXRvci0+KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KKworICAgICAgbW92ZV9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworCSsrX01fY3VycmVudDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIG1vdmVfaXRlcmF0b3IKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeworCW1vdmVfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKKwkrK19NX2N1cnJlbnQ7CisJcmV0dXJuIF9fdG1wOworICAgICAgfQorCisgICAgICBtb3ZlX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3ItLSgpCisgICAgICB7CisJLS1fTV9jdXJyZW50OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgbW92ZV9pdGVyYXRvcgorICAgICAgb3BlcmF0b3ItLShpbnQpCisgICAgICB7CisJbW92ZV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOworCS0tX01fY3VycmVudDsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisKKyAgICAgIG1vdmVfaXRlcmF0b3IKKyAgICAgIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gbW92ZV9pdGVyYXRvcihfTV9jdXJyZW50ICsgX19uKTsgfQorCisgICAgICBtb3ZlX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19uKQorICAgICAgeworCV9NX2N1cnJlbnQgKz0gX19uOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgbW92ZV9pdGVyYXRvcgorICAgICAgb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBtb3ZlX2l0ZXJhdG9yKF9NX2N1cnJlbnQgLSBfX24pOyB9CisgICAgCisgICAgICBtb3ZlX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19uKQorICAgICAgeyAKKwlfTV9jdXJyZW50IC09IF9fbjsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjptb3ZlKF9NX2N1cnJlbnRbX19uXSk7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IG1vdmVfaXRlcmF0b3I8X0l0ZXJhdG9yTD4mIF9feCwKKwkgICAgICAgY29uc3QgbW92ZV9pdGVyYXRvcjxfSXRlcmF0b3JSPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IG1vdmVfaXRlcmF0b3I8X0l0ZXJhdG9yTD4mIF9feCwKKwkgICAgICAgY29uc3QgbW92ZV9pdGVyYXRvcjxfSXRlcmF0b3JSPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IG1vdmVfaXRlcmF0b3I8X0l0ZXJhdG9yTD4mIF9feCwKKwkgICAgICBjb25zdCBtb3ZlX2l0ZXJhdG9yPF9JdGVyYXRvclI+JiBfX3kpCisgICAgeyByZXR1cm4gX194LmJhc2UoKSA8IF9feS5iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBtb3ZlX2l0ZXJhdG9yPF9JdGVyYXRvckw+JiBfX3gsCisJICAgICAgIGNvbnN0IG1vdmVfaXRlcmF0b3I8X0l0ZXJhdG9yUj4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IG1vdmVfaXRlcmF0b3I8X0l0ZXJhdG9yTD4mIF9feCwKKwkgICAgICBjb25zdCBtb3ZlX2l0ZXJhdG9yPF9JdGVyYXRvclI+JiBfX3kpCisgICAgeyByZXR1cm4gX195IDwgX194OyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgbW92ZV9pdGVyYXRvcjxfSXRlcmF0b3JMPiYgX194LAorCSAgICAgICBjb25zdCBtb3ZlX2l0ZXJhdG9yPF9JdGVyYXRvclI+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CisKKyAgLy8gRFIgNjg1LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSPgorICAgIGlubGluZSBhdXRvCisgICAgb3BlcmF0b3ItKGNvbnN0IG1vdmVfaXRlcmF0b3I8X0l0ZXJhdG9yTD4mIF9feCwKKwkgICAgICBjb25zdCBtb3ZlX2l0ZXJhdG9yPF9JdGVyYXRvclI+JiBfX3kpCisgICAgLT4gZGVjbHR5cGUoX194LmJhc2UoKSAtIF9feS5iYXNlKCkpCisgICAgeyByZXR1cm4gX194LmJhc2UoKSAtIF9feS5iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CisgICAgaW5saW5lIG1vdmVfaXRlcmF0b3I8X0l0ZXJhdG9yPgorICAgIG9wZXJhdG9yKyh0eXBlbmFtZSBtb3ZlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sCisJICAgICAgY29uc3QgbW92ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gpCisgICAgeyByZXR1cm4gX194ICsgX19uOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgIGlubGluZSBtb3ZlX2l0ZXJhdG9yPF9JdGVyYXRvcj4KKyAgICBtYWtlX21vdmVfaXRlcmF0b3IoY29uc3QgX0l0ZXJhdG9yJiBfX2kpCisgICAgeyByZXR1cm4gbW92ZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9faSk7IH0KKworICAvLyBAfSBncm91cCBpdGVyYXRvcnMKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZGVmaW5lIF9HTElCQ1hYX01BS0VfTU9WRV9JVEVSQVRPUihfSXRlcikgc3RkOjptYWtlX21vdmVfaXRlcmF0b3IoX0l0ZXIpCisjZWxzZQorI2RlZmluZSBfR0xJQkNYWF9NQUtFX01PVkVfSVRFUkFUT1IoX0l0ZXIpIChfSXRlcikKKyNlbmRpZiAvLyBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBlMGJjYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oCkBAIC0wLDAgKzEsMjEwIEBACisvLyBGdW5jdGlvbnMgdXNlZCBieSBpdGVyYXRvcnMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5Ni0xOTk4CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqCisgKiAgVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCBvZiB0aGUgZ2VuZXJhbCBpdGVyYXRvci1yZWxhdGVkIHV0aWxpdHkKKyAqICBmdW5jdGlvbnMsIHN1Y2ggYXMgZGlzdGFuY2UoKSBhbmQgYWR2YW5jZSgpLgorICovCisKKyNpZm5kZWYgX1NUTF9JVEVSQVRPUl9CQVNFX0ZVTkNTX0gKKyNkZWZpbmUgX1NUTF9JVEVSQVRPUl9CQVNFX0ZVTkNTX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2NvbmNlcHRfY2hlY2suaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCisgICAgX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3I+KQorCisgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKKyAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwl7CisJICArK19fZmlyc3Q7CisJICArK19fbjsKKwl9CisgICAgICByZXR1cm4gX19uOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CisgICAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAorICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPikKKyAgICAgIHJldHVybiBfX2xhc3QgLSBfX2ZpcnN0OworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBBIGdlbmVyYWxpemF0aW9uIG9mIHBvaW50ZXIgYXJpdGhtZXRpYy4KKyAgICogIEBwYXJhbSAgZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEByZXR1cm4gIFRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZW0uCisgICAqCisgICAqICBSZXR1cm5zIEBjIG4gc3VjaCB0aGF0IGZpcnN0ICsgbiA9PSBsYXN0LiAgVGhpcyByZXF1aXJlcyB0aGF0IEBwIGxhc3QKKyAgICogIG11c3QgYmUgcmVhY2hhYmxlIGZyb20gQHAgZmlyc3QuICBOb3RlIHRoYXQgQGMgbiBtYXkgYmUgbmVnYXRpdmUuCisgICAqCisgICAqICBGb3IgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMsIHRoaXMgdXNlcyB0aGVpciBAYyArIGFuZCBAYyAtIG9wZXJhdGlvbnMKKyAgICogIGFuZCBhcmUgY29uc3RhbnQgdGltZS4gIEZvciBvdGhlciAlaXRlcmF0b3IgY2xhc3NlcyB0aGV5IGFyZSBsaW5lYXIgdGltZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorICAgIGRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cyAtLSB0YWtlbiBjYXJlIG9mIGluIF9fZGlzdGFuY2UKKyAgICAgIHJldHVybiBzdGQ6Ol9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LAorCQkJICAgICBzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgorICAgIGlubGluZSB2b2lkCisgICAgX19hZHZhbmNlKF9JbnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcj4pCisgICAgICB3aGlsZSAoX19uLS0pCisJKytfX2k7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fYWR2YW5jZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCisJICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3I+KQorICAgICAgaWYgKF9fbiA+IDApCisgICAgICAgIHdoaWxlIChfX24tLSkKKwkgICsrX19pOworICAgICAgZWxzZQorICAgICAgICB3aGlsZSAoX19uKyspCisJICAtLV9faTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCisgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4pCisgICAgICBfX2kgKz0gX19uOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBBIGdlbmVyYWxpemF0aW9uIG9mIHBvaW50ZXIgYXJpdGhtZXRpYy4KKyAgICogIEBwYXJhbSAgaSAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIG4gIFRoZSBAYSBkZWx0YSBieSB3aGljaCB0byBjaGFuZ2UgQHAgaS4KKyAgICogIEByZXR1cm4gIE5vdGhpbmcuCisgICAqCisgICAqICBUaGlzIGluY3JlbWVudHMgQHAgaSBieSBAcCBuLiAgRm9yIGJpZGlyZWN0aW9uYWwgYW5kIHJhbmRvbSBhY2Nlc3MKKyAgICogIGl0ZXJhdG9ycywgQHAgbiBtYXkgYmUgbmVnYXRpdmUsIGluIHdoaWNoIGNhc2UgQHAgaSBpcyBkZWNyZW1lbnRlZC4KKyAgICoKKyAgICogIEZvciByYW5kb20gYWNjZXNzIGl0ZXJhdG9ycywgdGhpcyB1c2VzIHRoZWlyIEBjICsgYW5kIEBjIC0gb3BlcmF0aW9ucworICAgKiAgYW5kIGFyZSBjb25zdGFudCB0aW1lLiAgRm9yIG90aGVyICVpdGVyYXRvciBjbGFzc2VzIHRoZXkgYXJlIGxpbmVhciB0aW1lLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgorICAgIGlubGluZSB2b2lkCisgICAgYWR2YW5jZShfSW5wdXRJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzIC0tIHRha2VuIGNhcmUgb2YgaW4gX19hZHZhbmNlCisgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19kID0gX19uOworICAgICAgc3RkOjpfX2FkdmFuY2UoX19pLCBfX2QsIHN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKKyAgICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisKKyNpbmNsdWRlIDxleHQvdHlwZV90cmFpdHMuaD4gLy8gRm9yIF9fZW5hYmxlX2lmIGFuZCBfX2lzX2l0ZXJhdG9yCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICBpbmxpbmUgdHlwZW5hbWUKKyAgICBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvcj46Ol9fdmFsdWUsCisJCQkgICBfRm9yd2FyZEl0ZXJhdG9yPjo6X190eXBlCisgICAgbmV4dChfRm9yd2FyZEl0ZXJhdG9yIF9feCwgdHlwZW5hbWUKKwkgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMSkKKyAgICB7CisgICAgICBzdGQ6OmFkdmFuY2UoX194LCBfX24pOworICAgICAgcmV0dXJuIF9feDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcj4KKyAgICBpbmxpbmUgdHlwZW5hbWUKKyAgICBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyYXRvcj46Ol9fdmFsdWUsCisJCQkgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPjo6X190eXBlCisgICAgcHJldihfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9feCwgdHlwZW5hbWUKKwkgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMSkgCisgICAgeworICAgICAgc3RkOjphZHZhbmNlKF9feCwgLV9fbik7CisgICAgICByZXR1cm4gX194OworICAgIH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYgLy8gX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKworI2VuZGlmIC8qIF9TVExfSVRFUkFUT1JfQkFTRV9GVU5DU19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYTc4MTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaApAQCAtMCwwICsxLDE4MiBAQAorLy8gVHlwZXMgdXNlZCBpbiBpdGVyYXRvciBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTgKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBzdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgYWxsIG9mIHRoZSBnZW5lcmFsIGl0ZXJhdG9yLXJlbGF0ZWQgdXRpbGl0eSB0eXBlcywKKyAqICBzdWNoIGFzIGl0ZXJhdG9yX3RyYWl0cyBhbmQgc3RydWN0IGl0ZXJhdG9yLgorICovCisKKyNpZm5kZWYgX1NUTF9JVEVSQVRPUl9CQVNFX1RZUEVTX0gKKyNkZWZpbmUgX1NUTF9JVEVSQVRPUl9CQVNFX1RZUEVTX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGNzdGRkZWY+CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgLyoqCisgICAqICBAZGVmZ3JvdXAgaXRlcmF0b3JzIEl0ZXJhdG9ycworICAgKiAgQWJzdHJhY3Rpb25zIGZvciB1bmlmb3JtIGl0ZXJhdGluZyB0aHJvdWdoIHZhcmlvdXMgdW5kZXJseWluZyB0eXBlcy4KKyAgKi8KKyAgLy9AeyAKKworICAvKioKKyAgICogIEBkZWZncm91cCBpdGVyYXRvcl90YWdzIEl0ZXJhdG9yIFRhZ3MKKyAgICogIFRoZXNlIGFyZSBlbXB0eSB0eXBlcywgdXNlZCB0byBkaXN0aW5ndWlzaCBkaWZmZXJlbnQgaXRlcmF0b3JzLiAgVGhlCisgICAqICBkaXN0aW5jdGlvbiBpcyBub3QgbWFkZSBieSB3aGF0IHRoZXkgY29udGFpbiwgYnV0IHNpbXBseSBieSB3aGF0IHRoZXkKKyAgICogIGFyZS4gIERpZmZlcmVudCB1bmRlcmx5aW5nIGFsZ29yaXRobXMgY2FuIHRoZW4gYmUgdXNlZCBiYXNlZCBvbiB0aGUKKyAgICogIGRpZmZlcmVudCBvcGVyYXRpb25zIHN1cHBvcnRlZCBieSBkaWZmZXJlbnQgaXRlcmF0b3IgdHlwZXMuCisgICovCisgIC8vQHsgCisgIC8vLyAgTWFya2luZyBpbnB1dCBpdGVyYXRvcnMuCisgIHN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcgeyB9OworCisgIC8vLyAgTWFya2luZyBvdXRwdXQgaXRlcmF0b3JzLgorICBzdHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yX3RhZyB7IH07CisKKyAgLy8vIEZvcndhcmQgaXRlcmF0b3JzIHN1cHBvcnQgYSBzdXBlcnNldCBvZiBpbnB1dCBpdGVyYXRvciBvcGVyYXRpb25zLgorICBzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0b3JfdGFnIHsgfTsKKworICAvLy8gQmlkaXJlY3Rpb25hbCBpdGVyYXRvcnMgc3VwcG9ydCBhIHN1cGVyc2V0IG9mIGZvcndhcmQgaXRlcmF0b3IKKyAgLy8vIG9wZXJhdGlvbnMuCisgIHN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBmb3J3YXJkX2l0ZXJhdG9yX3RhZyB7IH07CisKKyAgLy8vIFJhbmRvbS1hY2Nlc3MgaXRlcmF0b3JzIHN1cHBvcnQgYSBzdXBlcnNldCBvZiBiaWRpcmVjdGlvbmFsCisgIC8vLyBpdGVyYXRvciBvcGVyYXRpb25zLgorICBzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgeyB9OworICAvL0B9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIENvbW1vbiAlaXRlcmF0b3IgY2xhc3MuCisgICAqCisgICAqICBUaGlzIGNsYXNzIGRvZXMgbm90aGluZyBidXQgZGVmaW5lIG5lc3RlZCB0eXBlZGVmcy4gICVJdGVyYXRvciBjbGFzc2VzCisgICAqICBjYW4gaW5oZXJpdCBmcm9tIHRoaXMgY2xhc3MgdG8gc2F2ZSBzb21lIHdvcmsuICBUaGUgdHlwZWRlZnMgYXJlIHRoZW4KKyAgICogIHVzZWQgaW4gc3BlY2lhbGl6YXRpb25zIGFuZCBvdmVybG9hZGluZy4KKyAgICoKKyAgICogIEluIHBhcnRpY3VsYXIsIHRoZXJlIGFyZSBubyBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBvZiByZXF1aXJlbWVudHMKKyAgICogIHN1Y2ggYXMgQGMgb3BlcmF0b3IrKyBhbmQgdGhlIGxpa2UuICAoSG93IGNvdWxkIHRoZXJlIGJlPykKKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NhdGVnb3J5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9EaXN0YW5jZSA9IHB0cmRpZmZfdCwKKyAgICAgICAgICAgdHlwZW5hbWUgX1BvaW50ZXIgPSBfVHAqLCB0eXBlbmFtZSBfUmVmZXJlbmNlID0gX1RwJj4KKyAgICBzdHJ1Y3QgaXRlcmF0b3IKKyAgICB7CisgICAgICAvLy8gT25lIG9mIHRoZSBAbGluayBpdGVyYXRvcl90YWdzIHRhZyB0eXBlc0BlbmRsaW5rLgorICAgICAgdHlwZWRlZiBfQ2F0ZWdvcnkgIGl0ZXJhdG9yX2NhdGVnb3J5OworICAgICAgLy8vIFRoZSB0eXBlICJwb2ludGVkIHRvIiBieSB0aGUgaXRlcmF0b3IuCisgICAgICB0eXBlZGVmIF9UcCAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIC8vLyBEaXN0YW5jZSBiZXR3ZWVuIGl0ZXJhdG9ycyBpcyByZXByZXNlbnRlZCBhcyB0aGlzIHR5cGUuCisgICAgICB0eXBlZGVmIF9EaXN0YW5jZSAgZGlmZmVyZW5jZV90eXBlOworICAgICAgLy8vIFRoaXMgdHlwZSByZXByZXNlbnRzIGEgcG9pbnRlci10by12YWx1ZV90eXBlLgorICAgICAgdHlwZWRlZiBfUG9pbnRlciAgIHBvaW50ZXI7CisgICAgICAvLy8gVGhpcyB0eXBlIHJlcHJlc2VudHMgYSByZWZlcmVuY2UtdG8tdmFsdWVfdHlwZS4KKyAgICAgIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7CisgICAgfTsKKworICAvKioKKyAgICogIEBicmllZiAgVHJhaXRzIGNsYXNzIGZvciBpdGVyYXRvcnMuCisgICAqCisgICAqICBUaGlzIGNsYXNzIGRvZXMgbm90aGluZyBidXQgZGVmaW5lIG5lc3RlZCB0eXBlZGVmcy4gIFRoZSBnZW5lcmFsCisgICAqICB2ZXJzaW9uIHNpbXBseSBAYSBmb3J3YXJkcyB0aGUgbmVzdGVkIHR5cGVkZWZzIGZyb20gdGhlIEl0ZXJhdG9yCisgICAqICBhcmd1bWVudC4gIFNwZWNpYWxpemVkIHZlcnNpb25zIGZvciBwb2ludGVycyBhbmQgcG9pbnRlcnMtdG8tY29uc3QKKyAgICogIHByb3ZpZGUgdGlnaHRlciwgbW9yZSBjb3JyZWN0IHNlbWFudGljcy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHMKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6dmFsdWVfdHlwZSAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZlcmVuY2UgICAgICAgICByZWZlcmVuY2U7CisgICAgfTsKKworICAvLy8gUGFydGlhbCBzcGVjaWFsaXphdGlvbiBmb3IgcG9pbnRlciB0eXBlcy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4KKyAgICB7CisgICAgICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OworICAgICAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgcHRyZGlmZl90ICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RwKiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIF9UcCYgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgfTsKKworICAvLy8gUGFydGlhbCBzcGVjaWFsaXphdGlvbiBmb3IgY29uc3QgcG9pbnRlciB0eXBlcy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX1RwKj4KKyAgICB7CisgICAgICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OworICAgICAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgcHRyZGlmZl90ICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1RwKiAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIGNvbnN0IF9UcCYgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgfTsKKworICAvKioKKyAgICogIFRoaXMgZnVuY3Rpb24gaXMgbm90IGEgcGFydCBvZiB0aGUgQysrIHN0YW5kYXJkIGJ1dCBpcyBzeW50YWN0aWMKKyAgICogIHN1Z2FyIGZvciBpbnRlcm5hbCBsaWJyYXJ5IHVzZSBvbmx5LgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KKyAgICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKKyAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJikKKyAgICB7IHJldHVybiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSgpOyB9CisKKyAgLy9AfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZiAvKiBfU1RMX0lURVJBVE9SX0JBU0VfVFlQRVNfSCAqLworCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3RsX2xpc3QuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmY2JjNGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3RsX2xpc3QuaApAQCAtMCwwICsxLDE1NDggQEAKKy8vIExpc3QgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk3CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgc3RsX2xpc3QuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWZuZGVmIF9TVExfTElTVF9ICisjZGVmaW5lIF9TVExfTElTVF9IIDEKKworI2luY2x1ZGUgPGJpdHMvY29uY2VwdF9jaGVjay5oPgorI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisKK19HTElCQ1hYX0JFR0lOX05FU1RFRF9OQU1FU1BBQ0Uoc3RkLCBfR0xJQkNYWF9TVERfRCkKKworICAvLyBTdXBwb3J0aW5nIHN0cnVjdHVyZXMgYXJlIHNwbGl0IGludG8gY29tbW9uIGFuZCB0ZW1wbGF0ZWQgdHlwZXM7IHRoZQorICAvLyBsYXR0ZXIgcHVibGljbHkgaW5oZXJpdHMgZnJvbSB0aGUgZm9ybWVyIGluIGFuIGVmZm9ydCB0byByZWR1Y2UgY29kZQorICAvLyBkdXBsaWNhdGlvbi4gIFRoaXMgcmVzdWx0cyBpbiBzb21lICJuZWVkbGVzcyIgc3RhdGljX2Nhc3QnaW5nIGxhdGVyIG9uLAorICAvLyBidXQgaXQncyBhbGwgc2FmZSBkb3duY2FzdGluZy4KKworICAvLy8gQ29tbW9uIHBhcnQgb2YgYSBub2RlIGluIHRoZSAlbGlzdC4gCisgIHN0cnVjdCBfTGlzdF9ub2RlX2Jhc2UKKyAgeworICAgIF9MaXN0X25vZGVfYmFzZSogX01fbmV4dDsKKyAgICBfTGlzdF9ub2RlX2Jhc2UqIF9NX3ByZXY7CisKKyAgICBzdGF0aWMgdm9pZAorICAgIHN3YXAoX0xpc3Rfbm9kZV9iYXNlJiBfX3gsIF9MaXN0X25vZGVfYmFzZSYgX195KSB0aHJvdyAoKTsKKworICAgIHZvaWQKKyAgICBfTV90cmFuc2ZlcihfTGlzdF9ub2RlX2Jhc2UgKiBjb25zdCBfX2ZpcnN0LAorCQlfTGlzdF9ub2RlX2Jhc2UgKiBjb25zdCBfX2xhc3QpIHRocm93ICgpOworCisgICAgdm9pZAorICAgIF9NX3JldmVyc2UoKSB0aHJvdyAoKTsKKworICAgIHZvaWQKKyAgICBfTV9ob29rKF9MaXN0X25vZGVfYmFzZSAqIGNvbnN0IF9fcG9zaXRpb24pIHRocm93ICgpOworCisgICAgdm9pZAorICAgIF9NX3VuaG9vaygpIHRocm93ICgpOworICB9OworCisgIC8vLyBBbiBhY3R1YWwgbm9kZSBpbiB0aGUgJWxpc3QuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX0xpc3Rfbm9kZSA6IHB1YmxpYyBfTGlzdF9ub2RlX2Jhc2UKKyAgICB7CisgICAgICAvLy88IFVzZXIncyBkYXRhLgorICAgICAgX1RwIF9NX2RhdGE7CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIF9MaXN0X25vZGUoX0FyZ3MmJi4uLiBfX2FyZ3MpCisJOiBfTGlzdF9ub2RlX2Jhc2UoKSwgX01fZGF0YShzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pIHsgfQorI2VuZGlmCisgICAgfTsKKworICAvKioKKyAgICogIEBicmllZiBBIGxpc3Q6Oml0ZXJhdG9yLgorICAgKgorICAgKiAgQWxsIHRoZSBmdW5jdGlvbnMgYXJlIG9wIG92ZXJsb2Fkcy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfTGlzdF9pdGVyYXRvcgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1RwPiAgICAgICAgICAgICAgICBfU2VsZjsKKyAgICAgIHR5cGVkZWYgX0xpc3Rfbm9kZTxfVHA+ICAgICAgICAgICAgICAgICAgICBfTm9kZTsKKworICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyAgICBpdGVyYXRvcl9jYXRlZ29yeTsKKyAgICAgIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIF9UcCYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOworCisgICAgICBfTGlzdF9pdGVyYXRvcigpCisgICAgICA6IF9NX25vZGUoKSB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIF9MaXN0X2l0ZXJhdG9yKF9MaXN0X25vZGVfYmFzZSogX194KQorICAgICAgOiBfTV9ub2RlKF9feCkgeyB9CisKKyAgICAgIC8vIE11c3QgZG93bmNhc3QgZnJvbSBMaXN0X25vZGVfYmFzZSB0byBfTGlzdF9ub2RlIHRvIGdldCB0byBfTV9kYXRhLgorICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X05vZGUqPihfTV9ub2RlKS0+X01fZGF0YTsgfQorCisgICAgICBwb2ludGVyCisgICAgICBvcGVyYXRvci0+KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICZzdGF0aWNfY2FzdDxfTm9kZSo+KF9NX25vZGUpLT5fTV9kYXRhOyB9CisKKyAgICAgIF9TZWxmJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7CisJX01fbm9kZSA9IF9NX25vZGUtPl9NX25leHQ7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfU2VsZgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7CisJX1NlbGYgX190bXAgPSAqdGhpczsKKwlfTV9ub2RlID0gX01fbm9kZS0+X01fbmV4dDsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisKKyAgICAgIF9TZWxmJgorICAgICAgb3BlcmF0b3ItLSgpCisgICAgICB7CisJX01fbm9kZSA9IF9NX25vZGUtPl9NX3ByZXY7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfU2VsZgorICAgICAgb3BlcmF0b3ItLShpbnQpCisgICAgICB7CisJX1NlbGYgX190bXAgPSAqdGhpczsKKwlfTV9ub2RlID0gX01fbm9kZS0+X01fcHJldjsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgX1NlbGYmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX25vZGUgPT0gX194Ll9NX25vZGU7IH0KKworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCBfU2VsZiYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fbm9kZSAhPSBfX3guX01fbm9kZTsgfQorCisgICAgICAvLyBUaGUgb25seSBtZW1iZXIgcG9pbnRzIHRvIHRoZSAlbGlzdCBlbGVtZW50LgorICAgICAgX0xpc3Rfbm9kZV9iYXNlKiBfTV9ub2RlOworICAgIH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgQSBsaXN0Ojpjb25zdF9pdGVyYXRvci4KKyAgICoKKyAgICogIEFsbCB0aGUgZnVuY3Rpb25zIGFyZSBvcCBvdmVybG9hZHMuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX0xpc3RfY29uc3RfaXRlcmF0b3IKKyAgICB7CisgICAgICB0eXBlZGVmIF9MaXN0X2NvbnN0X2l0ZXJhdG9yPF9UcD4gICAgICAgICAgX1NlbGY7CisgICAgICB0eXBlZGVmIGNvbnN0IF9MaXN0X25vZGU8X1RwPiAgICAgICAgICAgICAgX05vZGU7CisgICAgICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcD4gICAgICAgICAgICAgICAgaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgcHRyZGlmZl90ICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgICAgaXRlcmF0b3JfY2F0ZWdvcnk7CisgICAgICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1RwKiAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiBjb25zdCBfVHAmICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKworICAgICAgX0xpc3RfY29uc3RfaXRlcmF0b3IoKQorICAgICAgOiBfTV9ub2RlKCkgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfTGlzdF9jb25zdF9pdGVyYXRvcihjb25zdCBfTGlzdF9ub2RlX2Jhc2UqIF9feCkKKyAgICAgIDogX01fbm9kZShfX3gpIHsgfQorCisgICAgICBfTGlzdF9jb25zdF9pdGVyYXRvcihjb25zdCBpdGVyYXRvciYgX194KQorICAgICAgOiBfTV9ub2RlKF9feC5fTV9ub2RlKSB7IH0KKworICAgICAgLy8gTXVzdCBkb3duY2FzdCBmcm9tIExpc3Rfbm9kZV9iYXNlIHRvIF9MaXN0X25vZGUgdG8gZ2V0IHRvCisgICAgICAvLyBfTV9kYXRhLgorICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X05vZGUqPihfTV9ub2RlKS0+X01fZGF0YTsgfQorCisgICAgICBwb2ludGVyCisgICAgICBvcGVyYXRvci0+KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICZzdGF0aWNfY2FzdDxfTm9kZSo+KF9NX25vZGUpLT5fTV9kYXRhOyB9CisKKyAgICAgIF9TZWxmJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7CisJX01fbm9kZSA9IF9NX25vZGUtPl9NX25leHQ7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfU2VsZgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7CisJX1NlbGYgX190bXAgPSAqdGhpczsKKwlfTV9ub2RlID0gX01fbm9kZS0+X01fbmV4dDsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisKKyAgICAgIF9TZWxmJgorICAgICAgb3BlcmF0b3ItLSgpCisgICAgICB7CisJX01fbm9kZSA9IF9NX25vZGUtPl9NX3ByZXY7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfU2VsZgorICAgICAgb3BlcmF0b3ItLShpbnQpCisgICAgICB7CisJX1NlbGYgX190bXAgPSAqdGhpczsKKwlfTV9ub2RlID0gX01fbm9kZS0+X01fcHJldjsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgX1NlbGYmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX25vZGUgPT0gX194Ll9NX25vZGU7IH0KKworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCBfU2VsZiYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fbm9kZSAhPSBfX3guX01fbm9kZTsgfQorCisgICAgICAvLyBUaGUgb25seSBtZW1iZXIgcG9pbnRzIHRvIHRoZSAlbGlzdCBlbGVtZW50LgorICAgICAgY29uc3QgX0xpc3Rfbm9kZV9iYXNlKiBfTV9ub2RlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX0xpc3RfaXRlcmF0b3I8X1ZhbD4mIF9feCwKKwkgICAgICAgY29uc3QgX0xpc3RfY29uc3RfaXRlcmF0b3I8X1ZhbD4mIF9feSkKKyAgICB7IHJldHVybiBfX3guX01fbm9kZSA9PSBfX3kuX01fbm9kZTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWw+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9MaXN0X2l0ZXJhdG9yPF9WYWw+JiBfX3gsCisgICAgICAgICAgICAgICBjb25zdCBfTGlzdF9jb25zdF9pdGVyYXRvcjxfVmFsPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlICE9IF9feS5fTV9ub2RlOyB9CisKKworICAvLy8gU2VlIGJpdHMvc3RsX2RlcXVlLmgncyBfRGVxdWVfYmFzZSBmb3IgYW4gZXhwbGFuYXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGNsYXNzIF9MaXN0X2Jhc2UKKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgLy8gTk9UQSBCRU5FCisgICAgICAvLyBUaGUgc3RvcmVkIGluc3RhbmNlIGlzIG5vdCBhY3R1YWxseSBvZiAiYWxsb2NhdG9yX3R5cGUiJ3MKKyAgICAgIC8vIHR5cGUuICBJbnN0ZWFkIHdlIHJlYmluZCB0aGUgdHlwZSB0bworICAgICAgLy8gQWxsb2NhdG9yPExpc3Rfbm9kZTxUcD4+LCB3aGljaCBhY2NvcmRpbmcgdG8gWzIwLjEuNV0vNAorICAgICAgLy8gc2hvdWxkIHByb2JhYmx5IGJlIHRoZSBzYW1lLiAgTGlzdF9ub2RlPFRwPiBpcyBub3QgdGhlIHNhbWUKKyAgICAgIC8vIHNpemUgYXMgVHAgKGl0J3MgdHdvIHBvaW50ZXJzIGxhcmdlciksIGFuZCBzcGVjaWFsaXphdGlvbnMgb24KKyAgICAgIC8vIFRwIG1heSBnbyB1bnVzZWQgYmVjYXVzZSBMaXN0X25vZGU8VHA+IGlzIGJlaW5nIGJvdW5kCisgICAgICAvLyBpbnN0ZWFkLgorICAgICAgLy8KKyAgICAgIC8vIFdlIHB1dCB0aGlzIHRvIHRoZSB0ZXN0IGluIHRoZSBjb25zdHJ1Y3RvcnMgYW5kIGluCisgICAgICAvLyBnZXRfYWxsb2NhdG9yLCB3aGVyZSB3ZSB1c2UgY29udmVyc2lvbnMgYmV0d2VlbgorICAgICAgLy8gYWxsb2NhdG9yX3R5cGUgYW5kIF9Ob2RlX2FsbG9jX3R5cGUuIFRoZSBjb252ZXJzaW9uIGlzCisgICAgICAvLyByZXF1aXJlZCBieSB0YWJsZSAzMiBpbiBbMjAuMS41XS4KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8X0xpc3Rfbm9kZTxfVHA+ID46Om90aGVyCisgICAgICAgIF9Ob2RlX2FsbG9jX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3RoZXIgX1RwX2FsbG9jX3R5cGU7CisKKyAgICAgIHN0cnVjdCBfTGlzdF9pbXBsIAorICAgICAgOiBwdWJsaWMgX05vZGVfYWxsb2NfdHlwZQorICAgICAgeworCV9MaXN0X25vZGVfYmFzZSBfTV9ub2RlOworCisJX0xpc3RfaW1wbCgpCisJOiBfTm9kZV9hbGxvY190eXBlKCksIF9NX25vZGUoKQorCXsgfQorCisJX0xpc3RfaW1wbChjb25zdCBfTm9kZV9hbGxvY190eXBlJiBfX2EpCisJOiBfTm9kZV9hbGxvY190eXBlKF9fYSksIF9NX25vZGUoKQorCXsgfQorICAgICAgfTsKKworICAgICAgX0xpc3RfaW1wbCBfTV9pbXBsOworCisgICAgICBfTGlzdF9ub2RlPF9UcD4qCisgICAgICBfTV9nZXRfbm9kZSgpCisgICAgICB7IHJldHVybiBfTV9pbXBsLl9Ob2RlX2FsbG9jX3R5cGU6OmFsbG9jYXRlKDEpOyB9CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIF9NX3B1dF9ub2RlKF9MaXN0X25vZGU8X1RwPiogX19wKQorICAgICAgeyBfTV9pbXBsLl9Ob2RlX2FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX19wLCAxKTsgfQorICAgICAgCisgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOworCisgICAgICBfTm9kZV9hbGxvY190eXBlJgorICAgICAgX01fZ2V0X05vZGVfYWxsb2NhdG9yKCkKKyAgICAgIHsgcmV0dXJuICpzdGF0aWNfY2FzdDxfTm9kZV9hbGxvY190eXBlKj4oJnRoaXMtPl9NX2ltcGwpOyB9CisKKyAgICAgIGNvbnN0IF9Ob2RlX2FsbG9jX3R5cGUmCisgICAgICBfTV9nZXRfTm9kZV9hbGxvY2F0b3IoKSBjb25zdAorICAgICAgeyByZXR1cm4gKnN0YXRpY19jYXN0PGNvbnN0IF9Ob2RlX2FsbG9jX3R5cGUqPigmdGhpcy0+X01faW1wbCk7IH0KKworICAgICAgX1RwX2FsbG9jX3R5cGUKKyAgICAgIF9NX2dldF9UcF9hbGxvY2F0b3IoKSBjb25zdAorICAgICAgeyByZXR1cm4gX1RwX2FsbG9jX3R5cGUoX01fZ2V0X05vZGVfYWxsb2NhdG9yKCkpOyB9CisKKyAgICAgIGFsbG9jYXRvcl90eXBlCisgICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKF9NX2dldF9Ob2RlX2FsbG9jYXRvcigpKTsgfQorCisgICAgICBfTGlzdF9iYXNlKCkKKyAgICAgIDogX01faW1wbCgpCisgICAgICB7IF9NX2luaXQoKTsgfQorCisgICAgICBfTGlzdF9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCisgICAgICA6IF9NX2ltcGwoX19hKQorICAgICAgeyBfTV9pbml0KCk7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBfTGlzdF9iYXNlKF9MaXN0X2Jhc2UmJiBfX3gpCisgICAgICA6IF9NX2ltcGwoX194Ll9NX2dldF9Ob2RlX2FsbG9jYXRvcigpKQorICAgICAgeworCV9NX2luaXQoKTsKKwlfTGlzdF9ub2RlX2Jhc2U6OnN3YXAodGhpcy0+X01faW1wbC5fTV9ub2RlLCBfX3guX01faW1wbC5fTV9ub2RlKTsJCisgICAgICB9CisjZW5kaWYKKworICAgICAgLy8gVGhpcyBpcyB3aGF0IGFjdHVhbGx5IGRlc3Ryb3lzIHRoZSBsaXN0LgorICAgICAgfl9MaXN0X2Jhc2UoKQorICAgICAgeyBfTV9jbGVhcigpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2NsZWFyKCk7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2luaXQoKQorICAgICAgeworICAgICAgICB0aGlzLT5fTV9pbXBsLl9NX25vZGUuX01fbmV4dCA9ICZ0aGlzLT5fTV9pbXBsLl9NX25vZGU7CisgICAgICAgIHRoaXMtPl9NX2ltcGwuX01fbm9kZS5fTV9wcmV2ID0gJnRoaXMtPl9NX2ltcGwuX01fbm9kZTsKKyAgICAgIH0KKyAgICB9OworCisgIC8qKgorICAgKiAgQGJyaWVmIEEgc3RhbmRhcmQgY29udGFpbmVyIHdpdGggbGluZWFyIHRpbWUgYWNjZXNzIHRvIGVsZW1lbnRzLAorICAgKiAgYW5kIGZpeGVkIHRpbWUgaW5zZXJ0aW9uL2RlbGV0aW9uIGF0IGFueSBwb2ludCBpbiB0aGUgc2VxdWVuY2UuCisgICAqCisgICAqICBAaW5ncm91cCBzZXF1ZW5jZXMKKyAgICoKKyAgICogIE1lZXRzIHRoZSByZXF1aXJlbWVudHMgb2YgYSA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2NSI+Y29udGFpbmVyPC9hPiwgYQorICAgKiAgPGEgaHJlZj0idGFibGVzLmh0bWwjNjYiPnJldmVyc2libGUgY29udGFpbmVyPC9hPiwgYW5kIGEKKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sIzY3Ij5zZXF1ZW5jZTwvYT4sIGluY2x1ZGluZyB0aGUKKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sIzY4Ij5vcHRpb25hbCBzZXF1ZW5jZSByZXF1aXJlbWVudHM8L2E+IHdpdGggdGhlCisgICAqICAlZXhjZXB0aW9uIG9mIEBjIGF0IGFuZCBAYyBvcGVyYXRvcltdLgorICAgKgorICAgKiAgVGhpcyBpcyBhIEBlIGRvdWJseSBAZSBsaW5rZWQgJWxpc3QuICBUcmF2ZXJzYWwgdXAgYW5kIGRvd24gdGhlCisgICAqICAlbGlzdCByZXF1aXJlcyBsaW5lYXIgdGltZSwgYnV0IGFkZGluZyBhbmQgcmVtb3ZpbmcgZWxlbWVudHMgKG9yCisgICAqICBAZSBub2RlcykgaXMgZG9uZSBpbiBjb25zdGFudCB0aW1lLCByZWdhcmRsZXNzIG9mIHdoZXJlIHRoZQorICAgKiAgY2hhbmdlIHRha2VzIHBsYWNlLiAgVW5saWtlIHN0ZDo6dmVjdG9yIGFuZCBzdGQ6OmRlcXVlLAorICAgKiAgcmFuZG9tLWFjY2VzcyBpdGVyYXRvcnMgYXJlIG5vdCBwcm92aWRlZCwgc28gc3Vic2NyaXB0aW5nICggQGMKKyAgICogIFtdICkgYWNjZXNzIGlzIG5vdCBhbGxvd2VkLiAgRm9yIGFsZ29yaXRobXMgd2hpY2ggb25seSBuZWVkCisgICAqICBzZXF1ZW50aWFsIGFjY2VzcywgdGhpcyBsYWNrIG1ha2VzIG5vIGRpZmZlcmVuY2UuCisgICAqCisgICAqICBBbHNvIHVubGlrZSB0aGUgb3RoZXIgc3RhbmRhcmQgY29udGFpbmVycywgc3RkOjpsaXN0IHByb3ZpZGVzCisgICAqICBzcGVjaWFsaXplZCBhbGdvcml0aG1zICV1bmlxdWUgdG8gbGlua2VkIGxpc3RzLCBzdWNoIGFzCisgICAqICBzcGxpY2luZywgc29ydGluZywgYW5kIGluLXBsYWNlIHJldmVyc2FsLgorICAgKgorICAgKiAgQSBjb3VwbGUgcG9pbnRzIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBsaXN0PFRwPjoKKyAgICoKKyAgICogIEZpcnN0LCB3ZSBuZXZlciBhY3R1YWxseSBhbGxvY2F0ZSBhIFRwLCB3ZSBhbGxvY2F0ZQorICAgKiAgTGlzdF9ub2RlPFRwPidzIGFuZCB0cnVzdCBbMjAuMS41XS80IHRvIERUUlQuICBUaGlzIGlzIHRvIGVuc3VyZQorICAgKiAgdGhhdCBhZnRlciBlbGVtZW50cyBmcm9tICVsaXN0PFgsQWxsb2MxPiBhcmUgc3BsaWNlZCBpbnRvCisgICAqICAlbGlzdDxYLEFsbG9jMj4sIGRlc3Ryb3lpbmcgdGhlIG1lbW9yeSBvZiB0aGUgc2Vjb25kICVsaXN0IGlzIGEKKyAgICogIHZhbGlkIG9wZXJhdGlvbiwgaS5lLiwgQWxsb2MxIGdpdmV0aCBhbmQgQWxsb2MyIHRha2V0aCBhd2F5LgorICAgKgorICAgKiAgU2Vjb25kLCBhICVsaXN0IGNvbmNlcHR1YWxseSByZXByZXNlbnRlZCBhcworICAgKiAgQGNvZGUKKyAgICogICAgQSA8LS0tPiBCIDwtLS0+IEMgPC0tLT4gRAorICAgKiAgQGVuZGNvZGUKKyAgICogIGlzIGFjdHVhbGx5IGNpcmN1bGFyOyBhIGxpbmsgZXhpc3RzIGJldHdlZW4gQSBhbmQgRC4gIFRoZSAlbGlzdAorICAgKiAgY2xhc3MgaG9sZHMgKGFzIGl0cyBvbmx5IGRhdGEgbWVtYmVyKSBhIHByaXZhdGUgbGlzdDo6aXRlcmF0b3IKKyAgICogIHBvaW50aW5nIHRvIEBlIEQsIG5vdCB0byBAZSBBISAgVG8gZ2V0IHRvIHRoZSBoZWFkIG9mIHRoZSAlbGlzdCwKKyAgICogIHdlIHN0YXJ0IGF0IHRoZSB0YWlsIGFuZCBtb3ZlIGZvcndhcmQgYnkgb25lLiAgV2hlbiB0aGlzIG1lbWJlcgorICAgKiAgaXRlcmF0b3IncyBuZXh0L3ByZXZpb3VzIHBvaW50ZXJzIHJlZmVyIHRvIGl0c2VsZiwgdGhlICVsaXN0IGlzCisgICAqICAlZW1wdHkuIAorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPF9UcD4gPgorICAgIGNsYXNzIGxpc3QgOiBwcm90ZWN0ZWQgX0xpc3RfYmFzZTxfVHAsIF9BbGxvYz4KKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnZhbHVlX3R5cGUgICAgICAgICAgICAgICAgX0FsbG9jX3ZhbHVlX3R5cGU7CisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX1RwLCBfU0dJQXNzaWduYWJsZUNvbmNlcHQpCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMyKF9UcCwgX0FsbG9jX3ZhbHVlX3R5cGUsIF9TYW1lVHlwZUNvbmNlcHQpCisKKyAgICAgIHR5cGVkZWYgX0xpc3RfYmFzZTxfVHAsIF9BbGxvYz4gICAgICAgICAgICAgICAgICAgIF9CYXNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6X1RwX2FsbG9jX3R5cGUJCSBfVHBfYWxsb2NfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcF9hbGxvY190eXBlOjpwb2ludGVyICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHBfYWxsb2NfdHlwZTo6Y29uc3RfcG9pbnRlciAgICAgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RwX2FsbG9jX3R5cGU6OnJlZmVyZW5jZSAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RwX2FsbG9jX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSAgIGNvbnN0X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1RwPiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfTGlzdF9jb25zdF9pdGVyYXRvcjxfVHA+ICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+ICAgICAgICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgcHRyZGlmZl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0FsbG9jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRvcl90eXBlOworCisgICAgcHJvdGVjdGVkOgorICAgICAgLy8gTm90ZSB0aGF0IHBvaW50ZXJzLXRvLV9Ob2RlJ3MgY2FuIGJlIGN0b3ItY29udmVydGVkIHRvCisgICAgICAvLyBpdGVyYXRvciB0eXBlcy4KKyAgICAgIHR5cGVkZWYgX0xpc3Rfbm9kZTxfVHA+CQkJCSBfTm9kZTsKKworICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2ltcGw7CisgICAgICB1c2luZyBfQmFzZTo6X01fcHV0X25vZGU7CisgICAgICB1c2luZyBfQmFzZTo6X01fZ2V0X25vZGU7CisgICAgICB1c2luZyBfQmFzZTo6X01fZ2V0X1RwX2FsbG9jYXRvcjsKKyAgICAgIHVzaW5nIF9CYXNlOjpfTV9nZXRfTm9kZV9hbGxvY2F0b3I7CisKKyAgICAgIC8qKgorICAgICAgICogIEBwYXJhbSAgeCAgQW4gaW5zdGFuY2Ugb2YgdXNlciBkYXRhLgorICAgICAgICoKKyAgICAgICAqICBBbGxvY2F0ZXMgc3BhY2UgZm9yIGEgbmV3IG5vZGUgYW5kIGNvbnN0cnVjdHMgYSBjb3B5IG9mIEBhIHggaW4gaXQuCisgICAgICAgKi8KKyNpZm5kZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIF9Ob2RlKgorICAgICAgX01fY3JlYXRlX25vZGUoY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeworCV9Ob2RlKiBfX3AgPSB0aGlzLT5fTV9nZXRfbm9kZSgpOworCV9fdHJ5CisJICB7CisJICAgIF9NX2dldF9UcF9hbGxvY2F0b3IoKS5jb25zdHJ1Y3QoJl9fcC0+X01fZGF0YSwgX194KTsKKwkgIH0KKwlfX2NhdGNoKC4uLikKKwkgIHsKKwkgICAgX01fcHV0X25vZGUoX19wKTsKKwkgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICB9CisJcmV0dXJuIF9fcDsKKyAgICAgIH0KKyNlbHNlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgX05vZGUqCisgICAgICAgIF9NX2NyZWF0ZV9ub2RlKF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIF9Ob2RlKiBfX3AgPSB0aGlzLT5fTV9nZXRfbm9kZSgpOworCSAgX190cnkKKwkgICAgeworCSAgICAgIF9NX2dldF9Ob2RlX2FsbG9jYXRvcigpLmNvbnN0cnVjdChfX3AsCisJCQkJCQlzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeworCSAgICAgIF9NX3B1dF9ub2RlKF9fcCk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwkgIHJldHVybiBfX3A7CisJfQorI2VuZGlmCisKKyAgICBwdWJsaWM6CisgICAgICAvLyBbMjMuMi4yLjFdIGNvbnN0cnVjdC9jb3B5L2Rlc3Ryb3kKKyAgICAgIC8vIChhc3NpZ24oKSBhbmQgZ2V0X2FsbG9jYXRvcigpIGFyZSBhbHNvIGxpc3RlZCBpbiB0aGlzIHNlY3Rpb24pCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIERlZmF1bHQgY29uc3RydWN0b3IgY3JlYXRlcyBubyBlbGVtZW50cy4KKyAgICAgICAqLworICAgICAgbGlzdCgpCisgICAgICA6IF9CYXNlKCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ3JlYXRlcyBhICVsaXN0IHdpdGggbm8gZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBhICBBbiBhbGxvY2F0b3Igb2JqZWN0LgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgbGlzdChjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQorICAgICAgOiBfQmFzZShfX2EpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENyZWF0ZXMgYSAlbGlzdCB3aXRoIGNvcGllcyBvZiBhbiBleGVtcGxhciBlbGVtZW50LgorICAgICAgICogIEBwYXJhbSAgbiAgVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBpbml0aWFsbHkgY3JlYXRlLgorICAgICAgICogIEBwYXJhbSAgdmFsdWUgIEFuIGVsZW1lbnQgdG8gY29weS4KKyAgICAgICAqICBAcGFyYW0gIGEgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKgorICAgICAgICogIFRoaXMgY29uc3RydWN0b3IgZmlsbHMgdGhlICVsaXN0IHdpdGggQGEgbiBjb3BpZXMgb2YgQGEgdmFsdWUuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBsaXN0KHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsdWUgPSB2YWx1ZV90eXBlKCksCisJICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fYSkKKyAgICAgIHsgX01fZmlsbF9pbml0aWFsaXplKF9fbiwgX192YWx1ZSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlTGlzdCBjb3B5IGNvbnN0cnVjdG9yLgorICAgICAgICogIEBwYXJhbSAgeCAgQSAlbGlzdCBvZiBpZGVudGljYWwgZWxlbWVudCBhbmQgYWxsb2NhdG9yIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBUaGUgbmV3bHktY3JlYXRlZCAlbGlzdCB1c2VzIGEgY29weSBvZiB0aGUgYWxsb2NhdGlvbiBvYmplY3QgdXNlZAorICAgICAgICogIGJ5IEBhIHguCisgICAgICAgKi8KKyAgICAgIGxpc3QoY29uc3QgbGlzdCYgX194KQorICAgICAgOiBfQmFzZShfX3guX01fZ2V0X05vZGVfYWxsb2NhdG9yKCkpCisgICAgICB7IF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX194LmJlZ2luKCksIF9feC5lbmQoKSwgX19mYWxzZV90eXBlKCkpOyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlTGlzdCBtb3ZlIGNvbnN0cnVjdG9yLgorICAgICAgICogIEBwYXJhbSAgeCAgQSAlbGlzdCBvZiBpZGVudGljYWwgZWxlbWVudCBhbmQgYWxsb2NhdG9yIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBUaGUgbmV3bHktY3JlYXRlZCAlbGlzdCBjb250YWlucyB0aGUgZXhhY3QgY29udGVudHMgb2YgQGEgeC4KKyAgICAgICAqICBUaGUgY29udGVudHMgb2YgQGEgeCBhcmUgYSB2YWxpZCwgYnV0IHVuc3BlY2lmaWVkICVsaXN0LgorICAgICAgICovCisgICAgICBsaXN0KGxpc3QmJiBfX3gpCisgICAgICA6IF9CYXNlKHN0ZDo6Zm9yd2FyZDxfQmFzZT4oX194KSkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQnVpbGRzIGEgJWxpc3QgZnJvbSBhbiBpbml0aWFsaXplcl9saXN0CisgICAgICAgKiAgQHBhcmFtICBsICBBbiBpbml0aWFsaXplcl9saXN0IG9mIHZhbHVlX3R5cGUuCisgICAgICAgKiAgQHBhcmFtICBhICBBbiBhbGxvY2F0b3Igb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqICBDcmVhdGUgYSAlbGlzdCBjb25zaXN0aW5nIG9mIGNvcGllcyBvZiB0aGUgZWxlbWVudHMgaW4gdGhlCisgICAgICAgKiAgaW5pdGlhbGl6ZXJfbGlzdCBAYSBsLiAgVGhpcyBpcyBsaW5lYXIgaW4gbC5zaXplKCkuCisgICAgICAgKi8KKyAgICAgIGxpc3QoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2EpCisgICAgICB7IF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX19sLmJlZ2luKCksIF9fbC5lbmQoKSwgX19mYWxzZV90eXBlKCkpOyB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBCdWlsZHMgYSAlbGlzdCBmcm9tIGEgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtICBmaXJzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBsYXN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIGEgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKgorICAgICAgICogIENyZWF0ZSBhICVsaXN0IGNvbnNpc3Rpbmcgb2YgY29waWVzIG9mIHRoZSBlbGVtZW50cyBmcm9tCisgICAgICAgKiAgW0BhIGZpcnN0LEBhIGxhc3QpLiAgVGhpcyBpcyBsaW5lYXIgaW4gTiAod2hlcmUgTiBpcworICAgICAgICogIGRpc3RhbmNlKEBhIGZpcnN0LEBhIGxhc3QpKS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGxpc3QoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCSAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICAgIDogX0Jhc2UoX19hKQorICAgICAgICB7IAorCSAgLy8gQ2hlY2sgd2hldGhlciBpdCdzIGFuIGludGVncmFsIHR5cGUuICBJZiBzbywgaXQncyBub3QgYW4gaXRlcmF0b3IuCisJICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6X19pc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X190eXBlIF9JbnRlZ3JhbDsKKwkgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CisJfQorCisgICAgICAvKioKKyAgICAgICAqICBObyBleHBsaWNpdCBkdG9yIG5lZWRlZCBhcyB0aGUgX0Jhc2UgZHRvciB0YWtlcyBjYXJlIG9mCisgICAgICAgKiAgdGhpbmdzLiAgVGhlIF9CYXNlIGR0b3Igb25seSBlcmFzZXMgdGhlIGVsZW1lbnRzLCBhbmQgbm90ZQorICAgICAgICogIHRoYXQgaWYgdGhlIGVsZW1lbnRzIHRoZW1zZWx2ZXMgYXJlIHBvaW50ZXJzLCB0aGUgcG9pbnRlZC10bworICAgICAgICogIG1lbW9yeSBpcyBub3QgdG91Y2hlZCBpbiBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMKKyAgICAgICAqICB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJUxpc3QgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIHggIEEgJWxpc3Qgb2YgaWRlbnRpY2FsIGVsZW1lbnQgYW5kIGFsbG9jYXRvciB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgQWxsIHRoZSBlbGVtZW50cyBvZiBAYSB4IGFyZSBjb3BpZWQsIGJ1dCB1bmxpa2UgdGhlIGNvcHkKKyAgICAgICAqICBjb25zdHJ1Y3RvciwgdGhlIGFsbG9jYXRvciBvYmplY3QgaXMgbm90IGNvcGllZC4KKyAgICAgICAqLworICAgICAgbGlzdCYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBsaXN0JiBfX3gpOworCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJUxpc3QgbW92ZSBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgeCAgQSAlbGlzdCBvZiBpZGVudGljYWwgZWxlbWVudCBhbmQgYWxsb2NhdG9yIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBUaGUgY29udGVudHMgb2YgQGEgeCBhcmUgbW92ZWQgaW50byB0aGlzICVsaXN0ICh3aXRob3V0IGNvcHlpbmcpLgorICAgICAgICogIEBhIHggaXMgYSB2YWxpZCwgYnV0IHVuc3BlY2lmaWVkICVsaXN0CisgICAgICAgKi8KKyAgICAgIGxpc3QmCisgICAgICBvcGVyYXRvcj0obGlzdCYmIF9feCkKKyAgICAgIHsKKwkvLyBOQjogRFIgMTIwNC4KKwkvLyBOQjogRFIgNjc1LgorCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+c3dhcChfX3gpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlTGlzdCBpbml0aWFsaXplciBsaXN0IGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBsICBBbiBpbml0aWFsaXplcl9saXN0IG9mIHZhbHVlX3R5cGUuCisgICAgICAgKgorICAgICAgICogIFJlcGxhY2UgdGhlIGNvbnRlbnRzIG9mIHRoZSAlbGlzdCB3aXRoIGNvcGllcyBvZiB0aGUgZWxlbWVudHMKKyAgICAgICAqICBpbiB0aGUgaW5pdGlhbGl6ZXJfbGlzdCBAYSBsLiAgVGhpcyBpcyBsaW5lYXIgaW4gbC5zaXplKCkuCisgICAgICAgKi8KKyAgICAgIGxpc3QmCisgICAgICBvcGVyYXRvcj0oaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7CisJdGhpcy0+YXNzaWduKF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFzc2lnbnMgYSBnaXZlbiB2YWx1ZSB0byBhICVsaXN0LgorICAgICAgICogIEBwYXJhbSAgbiAgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIGJlIGFzc2lnbmVkLgorICAgICAgICogIEBwYXJhbSAgdmFsICBWYWx1ZSB0byBiZSBhc3NpZ25lZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBmaWxscyBhICVsaXN0IHdpdGggQGEgbiBjb3BpZXMgb2YgdGhlIGdpdmVuCisgICAgICAgKiAgdmFsdWUuICBOb3RlIHRoYXQgdGhlIGFzc2lnbm1lbnQgY29tcGxldGVseSBjaGFuZ2VzIHRoZSAlbGlzdAorICAgICAgICogIGFuZCB0aGF0IHRoZSByZXN1bHRpbmcgJWxpc3QncyBzaXplIGlzIHRoZSBzYW1lIGFzIHRoZSBudW1iZXIKKyAgICAgICAqICBvZiBlbGVtZW50cyBhc3NpZ25lZC4gIE9sZCBkYXRhIG1heSBiZSBsb3N0LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX192YWwpCisgICAgICB7IF9NX2ZpbGxfYXNzaWduKF9fbiwgX192YWwpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXNzaWducyBhIHJhbmdlIHRvIGEgJWxpc3QuCisgICAgICAgKiAgQHBhcmFtICBmaXJzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBsYXN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZmlsbHMgYSAlbGlzdCB3aXRoIGNvcGllcyBvZiB0aGUgZWxlbWVudHMgaW4gdGhlCisgICAgICAgKiAgcmFuZ2UgW0BhIGZpcnN0LEBhIGxhc3QpLgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgdGhlIGFzc2lnbm1lbnQgY29tcGxldGVseSBjaGFuZ2VzIHRoZSAlbGlzdCBhbmQKKyAgICAgICAqICB0aGF0IHRoZSByZXN1bHRpbmcgJWxpc3QncyBzaXplIGlzIHRoZSBzYW1lIGFzIHRoZSBudW1iZXIgb2YKKyAgICAgICAqICBlbGVtZW50cyBhc3NpZ25lZC4gIE9sZCBkYXRhIG1heSBiZSBsb3N0LgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgICB7CisJICAvLyBDaGVjayB3aGV0aGVyIGl0J3MgYW4gaW50ZWdyYWwgdHlwZS4gIElmIHNvLCBpdCdzIG5vdCBhbiBpdGVyYXRvci4KKwkgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpfX2lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfX3R5cGUgX0ludGVncmFsOworCSAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOworCX0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFzc2lnbnMgYW4gaW5pdGlhbGl6ZXJfbGlzdCB0byBhICVsaXN0LgorICAgICAgICogIEBwYXJhbSAgbCAgQW4gaW5pdGlhbGl6ZXJfbGlzdCBvZiB2YWx1ZV90eXBlLgorICAgICAgICoKKyAgICAgICAqICBSZXBsYWNlIHRoZSBjb250ZW50cyBvZiB0aGUgJWxpc3Qgd2l0aCBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzCisgICAgICAgKiAgaW4gdGhlIGluaXRpYWxpemVyX2xpc3QgQGEgbC4gIFRoaXMgaXMgbGluZWFyIGluIGwuc2l6ZSgpLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBhc3NpZ24oaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7IHRoaXMtPmFzc2lnbihfX2wuYmVnaW4oKSwgX19sLmVuZCgpKTsgfQorI2VuZGlmCisKKyAgICAgIC8vLyBHZXQgYSBjb3B5IG9mIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBvYmplY3QuCisgICAgICBhbGxvY2F0b3JfdHlwZQorICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0CisgICAgICB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CisKKyAgICAgIC8vIGl0ZXJhdG9ycworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlCisgICAgICAgKiAgJWxpc3QuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBvcmRpbmFyeSBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IodGhpcy0+X01faW1wbC5fTV9ub2RlLl9NX25leHQpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUKKyAgICAgICAqICBmaXJzdCBlbGVtZW50IGluIHRoZSAlbGlzdC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIG9yZGluYXJ5CisgICAgICAgKiAgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHRoaXMtPl9NX2ltcGwuX01fbm9kZS5fTV9uZXh0KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSBpdGVyYXRvciB0aGF0IHBvaW50cyBvbmUgcGFzdCB0aGUgbGFzdAorICAgICAgICogIGVsZW1lbnQgaW4gdGhlICVsaXN0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gb3JkaW5hcnkgZWxlbWVudAorICAgICAgICogIG9yZGVyLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKCZ0aGlzLT5fTV9pbXBsLl9NX25vZGUpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyBvbmUgcGFzdAorICAgICAgICogIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlICVsaXN0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gb3JkaW5hcnkKKyAgICAgICAqICBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKCZ0aGlzLT5fTV9pbXBsLl9NX25vZGUpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGxhc3QKKyAgICAgICAqICBlbGVtZW50IGluIHRoZSAlbGlzdC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIHJldmVyc2UgZWxlbWVudAorICAgICAgICogIG9yZGVyLgorICAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8KKyAgICAgICAqICB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSAlbGlzdC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIHJldmVyc2UKKyAgICAgICAqICBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byBvbmUKKyAgICAgICAqICBiZWZvcmUgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlICVsaXN0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4KKyAgICAgICAqICByZXZlcnNlIGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byBvbmUKKyAgICAgICAqICBiZWZvcmUgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlICVsaXN0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gcmV2ZXJzZQorICAgICAgICogIGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUKKyAgICAgICAqICBmaXJzdCBlbGVtZW50IGluIHRoZSAlbGlzdC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIG9yZGluYXJ5CisgICAgICAgKiAgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlzLT5fTV9pbXBsLl9NX25vZGUuX01fbmV4dCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIG9uZSBwYXN0CisgICAgICAgKiAgdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgJWxpc3QuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBvcmRpbmFyeQorICAgICAgICogIGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKCZ0aGlzLT5fTV9pbXBsLl9NX25vZGUpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvCisgICAgICAgKiAgdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgJWxpc3QuICBJdGVyYXRpb24gaXMgZG9uZSBpbiByZXZlcnNlCisgICAgICAgKiAgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byBvbmUKKyAgICAgICAqICBiZWZvcmUgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlICVsaXN0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gcmV2ZXJzZQorICAgICAgICogIGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKyNlbmRpZgorCisgICAgICAvLyBbMjMuMi4yLjJdIGNhcGFjaXR5CisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIHRydWUgaWYgdGhlICVsaXN0IGlzIGVtcHR5LiAgKFRodXMgYmVnaW4oKSB3b3VsZCBlcXVhbAorICAgICAgICogIGVuZCgpLikKKyAgICAgICAqLworICAgICAgYm9vbAorICAgICAgZW1wdHkoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01faW1wbC5fTV9ub2RlLl9NX25leHQgPT0gJnRoaXMtPl9NX2ltcGwuX01fbm9kZTsgfQorCisgICAgICAvKiogIFJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgJWxpc3QuICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0ZDo6ZGlzdGFuY2UoYmVnaW4oKSwgZW5kKCkpOyB9CisKKyAgICAgIC8qKiAgUmV0dXJucyB0aGUgc2l6ZSgpIG9mIHRoZSBsYXJnZXN0IHBvc3NpYmxlICVsaXN0LiAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZ2V0X05vZGVfYWxsb2NhdG9yKCkubWF4X3NpemUoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgUmVzaXplcyB0aGUgJWxpc3QgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtIG5ld19zaXplIE51bWJlciBvZiBlbGVtZW50cyB0aGUgJWxpc3Qgc2hvdWxkIGNvbnRhaW4uCisgICAgICAgKiAgQHBhcmFtIHggRGF0YSB3aXRoIHdoaWNoIG5ldyBlbGVtZW50cyBzaG91bGQgYmUgcG9wdWxhdGVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgJXJlc2l6ZSB0aGUgJWxpc3QgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIKKyAgICAgICAqICBvZiBlbGVtZW50cy4gIElmIHRoZSBudW1iZXIgaXMgc21hbGxlciB0aGFuIHRoZSAlbGlzdCdzCisgICAgICAgKiAgY3VycmVudCBzaXplIHRoZSAlbGlzdCBpcyB0cnVuY2F0ZWQsIG90aGVyd2lzZSB0aGUgJWxpc3QgaXMKKyAgICAgICAqICBleHRlbmRlZCBhbmQgbmV3IGVsZW1lbnRzIGFyZSBwb3B1bGF0ZWQgd2l0aCBnaXZlbiBkYXRhLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIHZhbHVlX3R5cGUgX194ID0gdmFsdWVfdHlwZSgpKTsKKworICAgICAgLy8gZWxlbWVudCBhY2Nlc3MKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIHJlZmVyZW5jZSB0byB0aGUgZGF0YSBhdCB0aGUgZmlyc3QKKyAgICAgICAqICBlbGVtZW50IG9mIHRoZSAlbGlzdC4KKyAgICAgICAqLworICAgICAgcmVmZXJlbmNlCisgICAgICBmcm9udCgpCisgICAgICB7IHJldHVybiAqYmVnaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmVmZXJlbmNlIHRvIHRoZSBkYXRhIGF0IHRoZSBmaXJzdAorICAgICAgICogIGVsZW1lbnQgb2YgdGhlICVsaXN0LgorICAgICAgICovCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIGZyb250KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICpiZWdpbigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIHJlZmVyZW5jZSB0byB0aGUgZGF0YSBhdCB0aGUgbGFzdCBlbGVtZW50CisgICAgICAgKiAgb2YgdGhlICVsaXN0LgorICAgICAgICovCisgICAgICByZWZlcmVuY2UKKyAgICAgIGJhY2soKQorICAgICAgeyAKKwlpdGVyYXRvciBfX3RtcCA9IGVuZCgpOworCS0tX190bXA7CisJcmV0dXJuICpfX3RtcDsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJlZmVyZW5jZSB0byB0aGUgZGF0YSBhdCB0aGUgbGFzdAorICAgICAgICogIGVsZW1lbnQgb2YgdGhlICVsaXN0LgorICAgICAgICovCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIGJhY2soKSBjb25zdAorICAgICAgeyAKKwljb25zdF9pdGVyYXRvciBfX3RtcCA9IGVuZCgpOworCS0tX190bXA7CisJcmV0dXJuICpfX3RtcDsKKyAgICAgIH0KKworICAgICAgLy8gWzIzLjIuMi4zXSBtb2RpZmllcnMKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQWRkIGRhdGEgdG8gdGhlIGZyb250IG9mIHRoZSAlbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIHggIERhdGEgdG8gYmUgYWRkZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgaXMgYSB0eXBpY2FsIHN0YWNrIG9wZXJhdGlvbi4gIFRoZSBmdW5jdGlvbiBjcmVhdGVzIGFuCisgICAgICAgKiAgZWxlbWVudCBhdCB0aGUgZnJvbnQgb2YgdGhlICVsaXN0IGFuZCBhc3NpZ25zIHRoZSBnaXZlbiBkYXRhCisgICAgICAgKiAgdG8gaXQuICBEdWUgdG8gdGhlIG5hdHVyZSBvZiBhICVsaXN0IHRoaXMgb3BlcmF0aW9uIGNhbiBiZQorICAgICAgICogIGRvbmUgaW4gY29uc3RhbnQgdGltZSwgYW5kIGRvZXMgbm90IGludmFsaWRhdGUgaXRlcmF0b3JzIGFuZAorICAgICAgICogIHJlZmVyZW5jZXMuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfZnJvbnQoY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeyB0aGlzLT5fTV9pbnNlcnQoYmVnaW4oKSwgX194KTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfZnJvbnQodmFsdWVfdHlwZSYmIF9feCkKKyAgICAgIHsgdGhpcy0+X01faW5zZXJ0KGJlZ2luKCksIHN0ZDo6bW92ZShfX3gpKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgdm9pZAorICAgICAgICBlbXBsYWNlX2Zyb250KF9BcmdzJiYuLi4gX19hcmdzKQorICAgICAgICB7IHRoaXMtPl9NX2luc2VydChiZWdpbigpLCBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOyB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZW1vdmVzIGZpcnN0IGVsZW1lbnQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgaXMgYSB0eXBpY2FsIHN0YWNrIG9wZXJhdGlvbi4gIEl0IHNocmlua3MgdGhlICVsaXN0IGJ5CisgICAgICAgKiAgb25lLiAgRHVlIHRvIHRoZSBuYXR1cmUgb2YgYSAlbGlzdCB0aGlzIG9wZXJhdGlvbiBjYW4gYmUgZG9uZQorICAgICAgICogIGluIGNvbnN0YW50IHRpbWUsIGFuZCBvbmx5IGludmFsaWRhdGVzIGl0ZXJhdG9ycy9yZWZlcmVuY2VzIHRvCisgICAgICAgKiAgdGhlIGVsZW1lbnQgYmVpbmcgcmVtb3ZlZC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZSB0aGF0IG5vIGRhdGEgaXMgcmV0dXJuZWQsIGFuZCBpZiB0aGUgZmlyc3QgZWxlbWVudCdzIGRhdGEKKyAgICAgICAqICBpcyBuZWVkZWQsIGl0IHNob3VsZCBiZSByZXRyaWV2ZWQgYmVmb3JlIHBvcF9mcm9udCgpIGlzCisgICAgICAgKiAgY2FsbGVkLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwb3BfZnJvbnQoKQorICAgICAgeyB0aGlzLT5fTV9lcmFzZShiZWdpbigpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFkZCBkYXRhIHRvIHRoZSBlbmQgb2YgdGhlICVsaXN0LgorICAgICAgICogIEBwYXJhbSAgeCAgRGF0YSB0byBiZSBhZGRlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyBhIHR5cGljYWwgc3RhY2sgb3BlcmF0aW9uLiAgVGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYW4KKyAgICAgICAqICBlbGVtZW50IGF0IHRoZSBlbmQgb2YgdGhlICVsaXN0IGFuZCBhc3NpZ25zIHRoZSBnaXZlbiBkYXRhIHRvCisgICAgICAgKiAgaXQuICBEdWUgdG8gdGhlIG5hdHVyZSBvZiBhICVsaXN0IHRoaXMgb3BlcmF0aW9uIGNhbiBiZSBkb25lCisgICAgICAgKiAgaW4gY29uc3RhbnQgdGltZSwgYW5kIGRvZXMgbm90IGludmFsaWRhdGUgaXRlcmF0b3JzIGFuZAorICAgICAgICogIHJlZmVyZW5jZXMuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfYmFjayhjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7IHRoaXMtPl9NX2luc2VydChlbmQoKSwgX194KTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfYmFjayh2YWx1ZV90eXBlJiYgX194KQorICAgICAgeyB0aGlzLT5fTV9pbnNlcnQoZW5kKCksIHN0ZDo6bW92ZShfX3gpKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgdm9pZAorICAgICAgICBlbXBsYWNlX2JhY2soX0FyZ3MmJi4uLiBfX2FyZ3MpCisgICAgICAgIHsgdGhpcy0+X01faW5zZXJ0KGVuZCgpLCBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOyB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZW1vdmVzIGxhc3QgZWxlbWVudC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyBhIHR5cGljYWwgc3RhY2sgb3BlcmF0aW9uLiAgSXQgc2hyaW5rcyB0aGUgJWxpc3QgYnkKKyAgICAgICAqICBvbmUuICBEdWUgdG8gdGhlIG5hdHVyZSBvZiBhICVsaXN0IHRoaXMgb3BlcmF0aW9uIGNhbiBiZSBkb25lCisgICAgICAgKiAgaW4gY29uc3RhbnQgdGltZSwgYW5kIG9ubHkgaW52YWxpZGF0ZXMgaXRlcmF0b3JzL3JlZmVyZW5jZXMgdG8KKyAgICAgICAqICB0aGUgZWxlbWVudCBiZWluZyByZW1vdmVkLgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgbm8gZGF0YSBpcyByZXR1cm5lZCwgYW5kIGlmIHRoZSBsYXN0IGVsZW1lbnQncyBkYXRhCisgICAgICAgKiAgaXMgbmVlZGVkLCBpdCBzaG91bGQgYmUgcmV0cmlldmVkIGJlZm9yZSBwb3BfYmFjaygpIGlzIGNhbGxlZC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcG9wX2JhY2soKQorICAgICAgeyB0aGlzLT5fTV9lcmFzZShpdGVyYXRvcih0aGlzLT5fTV9pbXBsLl9NX25vZGUuX01fcHJldikpOyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3RzIG9iamVjdCBpbiAlbGlzdCBiZWZvcmUgc3BlY2lmaWVkIGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgcG9zaXRpb24gIEEgY29uc3RfaXRlcmF0b3IgaW50byB0aGUgJWxpc3QuCisgICAgICAgKiAgQHBhcmFtICBhcmdzICBBcmd1bWVudHMuCisgICAgICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGluc2VydGVkIGRhdGEuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBpbnNlcnQgYW4gb2JqZWN0IG9mIHR5cGUgVCBjb25zdHJ1Y3RlZAorICAgICAgICogIHdpdGggVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pIGJlZm9yZSB0aGUgc3BlY2lmaWVkCisgICAgICAgKiAgbG9jYXRpb24uICBEdWUgdG8gdGhlIG5hdHVyZSBvZiBhICVsaXN0IHRoaXMgb3BlcmF0aW9uIGNhbgorICAgICAgICogIGJlIGRvbmUgaW4gY29uc3RhbnQgdGltZSwgYW5kIGRvZXMgbm90IGludmFsaWRhdGUgaXRlcmF0b3JzCisgICAgICAgKiAgYW5kIHJlZmVyZW5jZXMuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICBpdGVyYXRvcgorICAgICAgICBlbXBsYWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIF9BcmdzJiYuLi4gX19hcmdzKTsKKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydHMgZ2l2ZW4gdmFsdWUgaW50byAlbGlzdCBiZWZvcmUgc3BlY2lmaWVkIGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgcG9zaXRpb24gIEFuIGl0ZXJhdG9yIGludG8gdGhlICVsaXN0LgorICAgICAgICogIEBwYXJhbSAgeCAgRGF0YSB0byBiZSBpbnNlcnRlZC4KKyAgICAgICAqICBAcmV0dXJuICBBbiBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgaW5zZXJ0ZWQgZGF0YS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGluc2VydCBhIGNvcHkgb2YgdGhlIGdpdmVuIHZhbHVlIGJlZm9yZQorICAgICAgICogIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uICBEdWUgdG8gdGhlIG5hdHVyZSBvZiBhICVsaXN0IHRoaXMKKyAgICAgICAqICBvcGVyYXRpb24gY2FuIGJlIGRvbmUgaW4gY29uc3RhbnQgdGltZSwgYW5kIGRvZXMgbm90CisgICAgICAgKiAgaW52YWxpZGF0ZSBpdGVyYXRvcnMgYW5kIHJlZmVyZW5jZXMuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydHMgZ2l2ZW4gcnZhbHVlIGludG8gJWxpc3QgYmVmb3JlIHNwZWNpZmllZCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIHBvc2l0aW9uICBBbiBpdGVyYXRvciBpbnRvIHRoZSAlbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIHggIERhdGEgdG8gYmUgaW5zZXJ0ZWQuCisgICAgICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGluc2VydGVkIGRhdGEuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBpbnNlcnQgYSBjb3B5IG9mIHRoZSBnaXZlbiBydmFsdWUgYmVmb3JlCisgICAgICAgKiAgdGhlIHNwZWNpZmllZCBsb2NhdGlvbi4gIER1ZSB0byB0aGUgbmF0dXJlIG9mIGEgJWxpc3QgdGhpcworICAgICAgICogIG9wZXJhdGlvbiBjYW4gYmUgZG9uZSBpbiBjb25zdGFudCB0aW1lLCBhbmQgZG9lcyBub3QKKyAgICAgICAqICBpbnZhbGlkYXRlIGl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcy4KKyAgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgdmFsdWVfdHlwZSYmIF9feCkKKyAgICAgIHsgcmV0dXJuIGVtcGxhY2UoX19wb3NpdGlvbiwgc3RkOjptb3ZlKF9feCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW5zZXJ0cyB0aGUgY29udGVudHMgb2YgYW4gaW5pdGlhbGl6ZXJfbGlzdCBpbnRvICVsaXN0CisgICAgICAgKiAgICAgICAgICBiZWZvcmUgc3BlY2lmaWVkIGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgcCAgQW4gaXRlcmF0b3IgaW50byB0aGUgJWxpc3QuCisgICAgICAgKiAgQHBhcmFtICBsICBBbiBpbml0aWFsaXplcl9saXN0IG9mIHZhbHVlX3R5cGUuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBpbnNlcnQgY29waWVzIG9mIHRoZSBkYXRhIGluIHRoZQorICAgICAgICogIGluaXRpYWxpemVyX2xpc3QgQGEgbCBpbnRvIHRoZSAlbGlzdCBiZWZvcmUgdGhlIGxvY2F0aW9uCisgICAgICAgKiAgc3BlY2lmaWVkIGJ5IEBhIHAuCisgICAgICAgKgorICAgICAgICogIFRoaXMgb3BlcmF0aW9uIGlzIGxpbmVhciBpbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluc2VydGVkIGFuZAorICAgICAgICogIGRvZXMgbm90IGludmFsaWRhdGUgaXRlcmF0b3JzIGFuZCByZWZlcmVuY2VzLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsgdGhpcy0+aW5zZXJ0KF9fcCwgX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydHMgYSBudW1iZXIgb2YgY29waWVzIG9mIGdpdmVuIGRhdGEgaW50byB0aGUgJWxpc3QuCisgICAgICAgKiAgQHBhcmFtICBwb3NpdGlvbiAgQW4gaXRlcmF0b3IgaW50byB0aGUgJWxpc3QuCisgICAgICAgKiAgQHBhcmFtICBuICBOdW1iZXIgb2YgZWxlbWVudHMgdG8gYmUgaW5zZXJ0ZWQuCisgICAgICAgKiAgQHBhcmFtICB4ICBEYXRhIHRvIGJlIGluc2VydGVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgaW5zZXJ0IGEgc3BlY2lmaWVkIG51bWJlciBvZiBjb3BpZXMgb2YgdGhlCisgICAgICAgKiAgZ2l2ZW4gZGF0YSBiZWZvcmUgdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBieSBAYSBwb3NpdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBvcGVyYXRpb24gaXMgbGluZWFyIGluIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW5zZXJ0ZWQgYW5kCisgICAgICAgKiAgZG9lcyBub3QgaW52YWxpZGF0ZSBpdGVyYXRvcnMgYW5kIHJlZmVyZW5jZXMuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7ICAKKwlsaXN0IF9fdG1wKF9fbiwgX194LCBfTV9nZXRfTm9kZV9hbGxvY2F0b3IoKSk7CisJc3BsaWNlKF9fcG9zaXRpb24sIF9fdG1wKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnRzIGEgcmFuZ2UgaW50byB0aGUgJWxpc3QuCisgICAgICAgKiAgQHBhcmFtICBwb3NpdGlvbiAgQW4gaXRlcmF0b3IgaW50byB0aGUgJWxpc3QuCisgICAgICAgKiAgQHBhcmFtICBmaXJzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBsYXN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBpbnNlcnQgY29waWVzIG9mIHRoZSBkYXRhIGluIHRoZSByYW5nZSBbQGEKKyAgICAgICAqICBmaXJzdCxAYSBsYXN0KSBpbnRvIHRoZSAlbGlzdCBiZWZvcmUgdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBieQorICAgICAgICogIEBhIHBvc2l0aW9uLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIG9wZXJhdGlvbiBpcyBsaW5lYXIgaW4gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbnNlcnRlZCBhbmQKKyAgICAgICAqICBkb2VzIG5vdCBpbnZhbGlkYXRlIGl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCisJICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeworCSAgbGlzdCBfX3RtcChfX2ZpcnN0LCBfX2xhc3QsIF9NX2dldF9Ob2RlX2FsbG9jYXRvcigpKTsKKwkgIHNwbGljZShfX3Bvc2l0aW9uLCBfX3RtcCk7CisJfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZSBlbGVtZW50IGF0IGdpdmVuIHBvc2l0aW9uLgorICAgICAgICogIEBwYXJhbSAgcG9zaXRpb24gIEl0ZXJhdG9yIHBvaW50aW5nIHRvIGVsZW1lbnQgdG8gYmUgZXJhc2VkLgorICAgICAgICogIEByZXR1cm4gIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBuZXh0IGVsZW1lbnQgKG9yIGVuZCgpKS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGVyYXNlIHRoZSBlbGVtZW50IGF0IHRoZSBnaXZlbiBwb3NpdGlvbiBhbmQgdGh1cworICAgICAgICogIHNob3J0ZW4gdGhlICVsaXN0IGJ5IG9uZS4KKyAgICAgICAqCisgICAgICAgKiAgRHVlIHRvIHRoZSBuYXR1cmUgb2YgYSAlbGlzdCB0aGlzIG9wZXJhdGlvbiBjYW4gYmUgZG9uZSBpbgorICAgICAgICogIGNvbnN0YW50IHRpbWUsIGFuZCBvbmx5IGludmFsaWRhdGVzIGl0ZXJhdG9ycy9yZWZlcmVuY2VzIHRvCisgICAgICAgKiAgdGhlIGVsZW1lbnQgYmVpbmcgcmVtb3ZlZC4gIFRoZSB1c2VyIGlzIGFsc28gY2F1dGlvbmVkIHRoYXQKKyAgICAgICAqICB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50LCBhbmQgdGhhdCBpZiB0aGUgZWxlbWVudAorICAgICAgICogIGlzIGl0c2VsZiBhIHBvaW50ZXIsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZCBpbgorICAgICAgICogIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbik7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVtb3ZlIGEgcmFuZ2Ugb2YgZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBmaXJzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IGVsZW1lbnQgdG8gYmUgZXJhc2VkLgorICAgICAgICogIEBwYXJhbSAgbGFzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gb25lIHBhc3QgdGhlIGxhc3QgZWxlbWVudCB0byBiZQorICAgICAgICogICAgICAgICAgICAgICAgZXJhc2VkLgorICAgICAgICogIEByZXR1cm4gIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbGVtZW50IHBvaW50ZWQgdG8gYnkgQGEgbGFzdAorICAgICAgICogICAgICAgICAgIHByaW9yIHRvIGVyYXNpbmcgKG9yIGVuZCgpKS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGVyYXNlIHRoZSBlbGVtZW50cyBpbiB0aGUgcmFuZ2UgQGEKKyAgICAgICAqICBbZmlyc3QsbGFzdCkgYW5kIHNob3J0ZW4gdGhlICVsaXN0IGFjY29yZGluZ2x5LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIG9wZXJhdGlvbiBpcyBsaW5lYXIgdGltZSBpbiB0aGUgc2l6ZSBvZiB0aGUgcmFuZ2UgYW5kIG9ubHkKKyAgICAgICAqICBpbnZhbGlkYXRlcyBpdGVyYXRvcnMvcmVmZXJlbmNlcyB0byB0aGUgZWxlbWVudCBiZWluZyByZW1vdmVkLgorICAgICAgICogIFRoZSB1c2VyIGlzIGFsc28gY2F1dGlvbmVkIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUKKyAgICAgICAqICBlbGVtZW50cywgYW5kIHRoYXQgaWYgdGhlIGVsZW1lbnRzIHRoZW1zZWx2ZXMgYXJlIHBvaW50ZXJzLCB0aGUKKyAgICAgICAqICBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZCBpbiBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIKKyAgICAgICAqICBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICAgeworCXdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwkgIF9fZmlyc3QgPSBlcmFzZShfX2ZpcnN0KTsKKwlyZXR1cm4gX19sYXN0OworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFN3YXBzIGRhdGEgd2l0aCBhbm90aGVyICVsaXN0LgorICAgICAgICogIEBwYXJhbSAgeCAgQSAlbGlzdCBvZiB0aGUgc2FtZSBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZXhjaGFuZ2VzIHRoZSBlbGVtZW50cyBiZXR3ZWVuIHR3byBsaXN0cyBpbiBjb25zdGFudAorICAgICAgICogIHRpbWUuICBOb3RlIHRoYXQgdGhlIGdsb2JhbCBzdGQ6OnN3YXAoKSBmdW5jdGlvbiBpcworICAgICAgICogIHNwZWNpYWxpemVkIHN1Y2ggdGhhdCBzdGQ6OnN3YXAobDEsbDIpIHdpbGwgZmVlZCB0byB0aGlzCisgICAgICAgKiAgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHN3YXAobGlzdCYgX194KQorICAgICAgeworCV9MaXN0X25vZGVfYmFzZTo6c3dhcCh0aGlzLT5fTV9pbXBsLl9NX25vZGUsIF9feC5fTV9pbXBsLl9NX25vZGUpOworCisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDQzMS4gU3dhcHBpbmcgY29udGFpbmVycyB3aXRoIHVuZXF1YWwgYWxsb2NhdG9ycy4KKwlzdGQ6Ol9fYWxsb2Nfc3dhcDx0eXBlbmFtZSBfQmFzZTo6X05vZGVfYWxsb2NfdHlwZT46OgorCSAgX1NfZG9faXQoX01fZ2V0X05vZGVfYWxsb2NhdG9yKCksIF9feC5fTV9nZXRfTm9kZV9hbGxvY2F0b3IoKSk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEVyYXNlcyBhbGwgdGhlIGVsZW1lbnRzLiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gb25seSBlcmFzZXMKKyAgICAgICAqICB0aGUgZWxlbWVudHMsIGFuZCB0aGF0IGlmIHRoZSBlbGVtZW50cyB0aGVtc2VsdmVzIGFyZQorICAgICAgICogIHBvaW50ZXJzLCB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQgaW4gYW55IHdheS4KKyAgICAgICAqICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBjbGVhcigpCisgICAgICB7CisgICAgICAgIF9CYXNlOjpfTV9jbGVhcigpOworICAgICAgICBfQmFzZTo6X01faW5pdCgpOworICAgICAgfQorCisgICAgICAvLyBbMjMuMi4yLjRdIGxpc3Qgb3BlcmF0aW9ucworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnQgY29udGVudHMgb2YgYW5vdGhlciAlbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIHBvc2l0aW9uICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgZWxlbWVudCB0byBpbnNlcnQgYmVmb3JlLgorICAgICAgICogIEBwYXJhbSAgeCAgU291cmNlIGxpc3QuCisgICAgICAgKgorICAgICAgICogIFRoZSBlbGVtZW50cyBvZiBAYSB4IGFyZSBpbnNlcnRlZCBpbiBjb25zdGFudCB0aW1lIGluIGZyb250IG9mCisgICAgICAgKiAgdGhlIGVsZW1lbnQgcmVmZXJlbmNlZCBieSBAYSBwb3NpdGlvbi4gIEBhIHggYmVjb21lcyBhbiBlbXB0eQorICAgICAgICogIGxpc3QuCisgICAgICAgKgorICAgICAgICogIFJlcXVpcmVzIHRoaXMgIT0gQGEgeC4KKyAgICAgICAqLworICAgICAgdm9pZAorI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYmIF9feCkKKyNlbHNlCisgICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYgX194KQorI2VuZGlmCisgICAgICB7CisJaWYgKCFfX3guZW1wdHkoKSkKKwkgIHsKKwkgICAgX01fY2hlY2tfZXF1YWxfYWxsb2NhdG9ycyhfX3gpOworCisJICAgIHRoaXMtPl9NX3RyYW5zZmVyKF9fcG9zaXRpb24sIF9feC5iZWdpbigpLCBfX3guZW5kKCkpOworCSAgfQorICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHZvaWQKKyAgICAgIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiBfX3gpCisgICAgICB7IHNwbGljZShfX3Bvc2l0aW9uLCBzdGQ6Om1vdmUoX194KSk7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydCBlbGVtZW50IGZyb20gYW5vdGhlciAlbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIHBvc2l0aW9uICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgZWxlbWVudCB0byBpbnNlcnQgYmVmb3JlLgorICAgICAgICogIEBwYXJhbSAgeCAgU291cmNlIGxpc3QuCisgICAgICAgKiAgQHBhcmFtICBpICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgZWxlbWVudCB0byBtb3ZlLgorICAgICAgICoKKyAgICAgICAqICBSZW1vdmVzIHRoZSBlbGVtZW50IGluIGxpc3QgQGEgeCByZWZlcmVuY2VkIGJ5IEBhIGkgYW5kCisgICAgICAgKiAgaW5zZXJ0cyBpdCBpbnRvIHRoZSBjdXJyZW50IGxpc3QgYmVmb3JlIEBhIHBvc2l0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiYgX194LCBpdGVyYXRvciBfX2kpCisjZWxzZQorICAgICAgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmIF9feCwgaXRlcmF0b3IgX19pKQorI2VuZGlmCisgICAgICB7CisJaXRlcmF0b3IgX19qID0gX19pOworCSsrX19qOworCWlmIChfX3Bvc2l0aW9uID09IF9faSB8fCBfX3Bvc2l0aW9uID09IF9faikKKwkgIHJldHVybjsKKworCWlmICh0aGlzICE9ICZfX3gpCisJICBfTV9jaGVja19lcXVhbF9hbGxvY2F0b3JzKF9feCk7CisKKwl0aGlzLT5fTV90cmFuc2ZlcihfX3Bvc2l0aW9uLCBfX2ksIF9faik7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdm9pZAorICAgICAgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmIF9feCwgaXRlcmF0b3IgX19pKQorICAgICAgeyBzcGxpY2UoX19wb3NpdGlvbiwgc3RkOjptb3ZlKF9feCksIF9faSk7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydCByYW5nZSBmcm9tIGFub3RoZXIgJWxpc3QuCisgICAgICAgKiAgQHBhcmFtICBwb3NpdGlvbiAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgdGhlIGVsZW1lbnQgdG8gaW5zZXJ0IGJlZm9yZS4KKyAgICAgICAqICBAcGFyYW0gIHggIFNvdXJjZSBsaXN0LgorICAgICAgICogIEBwYXJhbSAgZmlyc3QgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIHRoZSBzdGFydCBvZiByYW5nZSBpbiB4LgorICAgICAgICogIEBwYXJhbSAgbGFzdCAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgdGhlIGVuZCBvZiByYW5nZSBpbiB4LgorICAgICAgICoKKyAgICAgICAqICBSZW1vdmVzIGVsZW1lbnRzIGluIHRoZSByYW5nZSBbZmlyc3QsbGFzdCkgYW5kIGluc2VydHMgdGhlbQorICAgICAgICogIGJlZm9yZSBAYSBwb3NpdGlvbiBpbiBjb25zdGFudCB0aW1lLgorICAgICAgICoKKyAgICAgICAqICBVbmRlZmluZWQgaWYgQGEgcG9zaXRpb24gaXMgaW4gW2ZpcnN0LGxhc3QpLgorICAgICAgICovCisgICAgICB2b2lkCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiYgX194LCBpdGVyYXRvciBfX2ZpcnN0LAorCSAgICAgaXRlcmF0b3IgX19sYXN0KQorI2Vsc2UKKyAgICAgIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiBfX3gsIGl0ZXJhdG9yIF9fZmlyc3QsCisJICAgICBpdGVyYXRvciBfX2xhc3QpCisjZW5kaWYKKyAgICAgIHsKKwlpZiAoX19maXJzdCAhPSBfX2xhc3QpCisJICB7CisJICAgIGlmICh0aGlzICE9ICZfX3gpCisJICAgICAgX01fY2hlY2tfZXF1YWxfYWxsb2NhdG9ycyhfX3gpOworCisJICAgIHRoaXMtPl9NX3RyYW5zZmVyKF9fcG9zaXRpb24sIF9fZmlyc3QsIF9fbGFzdCk7CisJICB9CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdm9pZAorICAgICAgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmIF9feCwgaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICAgeyBzcGxpY2UoX19wb3NpdGlvbiwgc3RkOjptb3ZlKF9feCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZSBhbGwgZWxlbWVudHMgZXF1YWwgdG8gdmFsdWUuCisgICAgICAgKiAgQHBhcmFtICB2YWx1ZSAgVGhlIHZhbHVlIHRvIHJlbW92ZS4KKyAgICAgICAqCisgICAgICAgKiAgUmVtb3ZlcyBldmVyeSBlbGVtZW50IGluIHRoZSBsaXN0IGVxdWFsIHRvIEBhIHZhbHVlLgorICAgICAgICogIFJlbWFpbmluZyBlbGVtZW50cyBzdGF5IGluIGxpc3Qgb3JkZXIuICBOb3RlIHRoYXQgdGhpcworICAgICAgICogIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50cywgYW5kIHRoYXQgaWYgdGhlIGVsZW1lbnRzCisgICAgICAgKiAgdGhlbXNlbHZlcyBhcmUgcG9pbnRlcnMsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QKKyAgICAgICAqICB0b3VjaGVkIGluIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzCisgICAgICAgKiAgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlbW92ZShjb25zdCBfVHAmIF9fdmFsdWUpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZSBhbGwgZWxlbWVudHMgc2F0aXNmeWluZyBhIHByZWRpY2F0ZS4KKyAgICAgICAqICBAcGFyYW0gIFByZWRpY2F0ZSAgVW5hcnkgcHJlZGljYXRlIGZ1bmN0aW9uIG9yIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiAgUmVtb3ZlcyBldmVyeSBlbGVtZW50IGluIHRoZSBsaXN0IGZvciB3aGljaCB0aGUgcHJlZGljYXRlCisgICAgICAgKiAgcmV0dXJucyB0cnVlLiAgUmVtYWluaW5nIGVsZW1lbnRzIHN0YXkgaW4gbGlzdCBvcmRlci4gIE5vdGUKKyAgICAgICAqICB0aGF0IHRoaXMgZnVuY3Rpb24gb25seSBlcmFzZXMgdGhlIGVsZW1lbnRzLCBhbmQgdGhhdCBpZiB0aGUKKyAgICAgICAqICBlbGVtZW50cyB0aGVtc2VsdmVzIGFyZSBwb2ludGVycywgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzCisgICAgICAgKiAgbm90IHRvdWNoZWQgaW4gYW55IHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MKKyAgICAgICAqICByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICAgICAgdm9pZAorICAgICAgICByZW1vdmVfaWYoX1ByZWRpY2F0ZSk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVtb3ZlIGNvbnNlY3V0aXZlIGR1cGxpY2F0ZSBlbGVtZW50cy4KKyAgICAgICAqCisgICAgICAgKiAgRm9yIGVhY2ggY29uc2VjdXRpdmUgc2V0IG9mIGVsZW1lbnRzIHdpdGggdGhlIHNhbWUgdmFsdWUsCisgICAgICAgKiAgcmVtb3ZlIGFsbCBidXQgdGhlIGZpcnN0IG9uZS4gIFJlbWFpbmluZyBlbGVtZW50cyBzdGF5IGluCisgICAgICAgKiAgbGlzdCBvcmRlci4gIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZQorICAgICAgICogIGVsZW1lbnRzLCBhbmQgdGhhdCBpZiB0aGUgZWxlbWVudHMgdGhlbXNlbHZlcyBhcmUgcG9pbnRlcnMsCisgICAgICAgKiAgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkIGluIGFueSB3YXkuICBNYW5hZ2luZworICAgICAgICogIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHVuaXF1ZSgpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZSBjb25zZWN1dGl2ZSBlbGVtZW50cyBzYXRpc2Z5aW5nIGEgcHJlZGljYXRlLgorICAgICAgICogIEBwYXJhbSAgQmluYXJ5UHJlZGljYXRlICBCaW5hcnkgcHJlZGljYXRlIGZ1bmN0aW9uIG9yIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiAgRm9yIGVhY2ggY29uc2VjdXRpdmUgc2V0IG9mIGVsZW1lbnRzIFtmaXJzdCxsYXN0KSB0aGF0CisgICAgICAgKiAgc2F0aXNmeSBwcmVkaWNhdGUoZmlyc3QsaSkgd2hlcmUgaSBpcyBhbiBpdGVyYXRvciBpbgorICAgICAgICogIFtmaXJzdCxsYXN0KSwgcmVtb3ZlIGFsbCBidXQgdGhlIGZpcnN0IG9uZS4gIFJlbWFpbmluZworICAgICAgICogIGVsZW1lbnRzIHN0YXkgaW4gbGlzdCBvcmRlci4gIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkKKyAgICAgICAqICBlcmFzZXMgdGhlIGVsZW1lbnRzLCBhbmQgdGhhdCBpZiB0aGUgZWxlbWVudHMgdGhlbXNlbHZlcyBhcmUKKyAgICAgICAqICBwb2ludGVycywgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkIGluIGFueSB3YXkuCisgICAgICAgKiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KKyAgICAgICAgdm9pZAorICAgICAgICB1bmlxdWUoX0JpbmFyeVByZWRpY2F0ZSk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTWVyZ2Ugc29ydGVkIGxpc3RzLgorICAgICAgICogIEBwYXJhbSAgeCAgU29ydGVkIGxpc3QgdG8gbWVyZ2UuCisgICAgICAgKgorICAgICAgICogIEFzc3VtZXMgdGhhdCBib3RoIEBhIHggYW5kIHRoaXMgbGlzdCBhcmUgc29ydGVkIGFjY29yZGluZyB0bworICAgICAgICogIG9wZXJhdG9yPCgpLiAgTWVyZ2VzIGVsZW1lbnRzIG9mIEBhIHggaW50byB0aGlzIGxpc3QgaW4KKyAgICAgICAqICBzb3J0ZWQgb3JkZXIsIGxlYXZpbmcgQGEgeCBlbXB0eSB3aGVuIGNvbXBsZXRlLiAgRWxlbWVudHMgaW4KKyAgICAgICAqICB0aGlzIGxpc3QgcHJlY2VkZSBlbGVtZW50cyBpbiBAYSB4IHRoYXQgYXJlIGVxdWFsLgorICAgICAgICovCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHZvaWQKKyAgICAgIG1lcmdlKGxpc3QmJiBfX3gpOworCisgICAgICB2b2lkCisgICAgICBtZXJnZShsaXN0JiBfX3gpCisgICAgICB7IG1lcmdlKHN0ZDo6bW92ZShfX3gpKTsgfQorI2Vsc2UKKyAgICAgIHZvaWQKKyAgICAgIG1lcmdlKGxpc3QmIF9feCk7CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBNZXJnZSBzb3J0ZWQgbGlzdHMgYWNjb3JkaW5nIHRvIGNvbXBhcmlzb24gZnVuY3Rpb24uCisgICAgICAgKiAgQHBhcmFtICB4ICBTb3J0ZWQgbGlzdCB0byBtZXJnZS4KKyAgICAgICAqICBAcGFyYW0gU3RyaWN0V2Vha09yZGVyaW5nIENvbXBhcmlzb24gZnVuY3Rpb24gZGVmaW5pbmcKKyAgICAgICAqICBzb3J0IG9yZGVyLgorICAgICAgICoKKyAgICAgICAqICBBc3N1bWVzIHRoYXQgYm90aCBAYSB4IGFuZCB0aGlzIGxpc3QgYXJlIHNvcnRlZCBhY2NvcmRpbmcgdG8KKyAgICAgICAqICBTdHJpY3RXZWFrT3JkZXJpbmcuICBNZXJnZXMgZWxlbWVudHMgb2YgQGEgeCBpbnRvIHRoaXMgbGlzdAorICAgICAgICogIGluIHNvcnRlZCBvcmRlciwgbGVhdmluZyBAYSB4IGVtcHR5IHdoZW4gY29tcGxldGUuICBFbGVtZW50cworICAgICAgICogIGluIHRoaXMgbGlzdCBwcmVjZWRlIGVsZW1lbnRzIGluIEBhIHggdGhhdCBhcmUgZXF1aXZhbGVudAorICAgICAgICogIGFjY29yZGluZyB0byBTdHJpY3RXZWFrT3JkZXJpbmcoKS4KKyAgICAgICAqLworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RyaWN0V2Vha09yZGVyaW5nPgorICAgICAgICB2b2lkCisgICAgICAgIG1lcmdlKGxpc3QmJiwgX1N0cmljdFdlYWtPcmRlcmluZyk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9TdHJpY3RXZWFrT3JkZXJpbmc+CisgICAgICAgIHZvaWQKKyAgICAgICAgbWVyZ2UobGlzdCYgX194LCBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkKKyAgICAgICAgeyBtZXJnZShzdGQ6Om1vdmUoX194KSwgX19jb21wKTsgfQorI2Vsc2UKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9TdHJpY3RXZWFrT3JkZXJpbmc+CisgICAgICAgIHZvaWQKKyAgICAgICAgbWVyZ2UobGlzdCYsIF9TdHJpY3RXZWFrT3JkZXJpbmcpOworI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV2ZXJzZSB0aGUgZWxlbWVudHMgaW4gbGlzdC4KKyAgICAgICAqCisgICAgICAgKiAgUmV2ZXJzZSB0aGUgb3JkZXIgb2YgZWxlbWVudHMgaW4gdGhlIGxpc3QgaW4gbGluZWFyIHRpbWUuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJldmVyc2UoKQorICAgICAgeyB0aGlzLT5fTV9pbXBsLl9NX25vZGUuX01fcmV2ZXJzZSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU29ydCB0aGUgZWxlbWVudHMuCisgICAgICAgKgorICAgICAgICogIFNvcnRzIHRoZSBlbGVtZW50cyBvZiB0aGlzIGxpc3QgaW4gTmxvZ04gdGltZS4gIEVxdWl2YWxlbnQKKyAgICAgICAqICBlbGVtZW50cyByZW1haW4gaW4gbGlzdCBvcmRlci4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgc29ydCgpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNvcnQgdGhlIGVsZW1lbnRzIGFjY29yZGluZyB0byBjb21wYXJpc29uIGZ1bmN0aW9uLgorICAgICAgICoKKyAgICAgICAqICBTb3J0cyB0aGUgZWxlbWVudHMgb2YgdGhpcyBsaXN0IGluIE5sb2dOIHRpbWUuICBFcXVpdmFsZW50CisgICAgICAgKiAgZWxlbWVudHMgcmVtYWluIGluIGxpc3Qgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9TdHJpY3RXZWFrT3JkZXJpbmc+CisgICAgICAgIHZvaWQKKyAgICAgICAgc29ydChfU3RyaWN0V2Vha09yZGVyaW5nKTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgIC8vIEludGVybmFsIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyBmb2xsb3cuCisKKyAgICAgIC8vIENhbGxlZCBieSB0aGUgcmFuZ2UgY29uc3RydWN0b3IgdG8gaW1wbGVtZW50IFsyMy4xLjFdLzkKKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNDM4LiBBbWJpZ3VpdHkgaW4gdGhlICJkbyB0aGUgcmlnaHQgdGhpbmciIGNsYXVzZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVnZXI+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwgX190cnVlX3R5cGUpCisgICAgICAgIHsgX01fZmlsbF9pbml0aWFsaXplKHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19uKSwgX194KTsgfQorCisgICAgICAvLyBDYWxsZWQgYnkgdGhlIHJhbmdlIGNvbnN0cnVjdG9yIHRvIGltcGxlbWVudCBbMjMuMS4xXS85CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJCSAgICAgICBfX2ZhbHNlX3R5cGUpCisgICAgICAgIHsKKwkgIGZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQorCSAgICBwdXNoX2JhY2soKl9fZmlyc3QpOworCX0KKworICAgICAgLy8gQ2FsbGVkIGJ5IGxpc3Qobix2LGEpLCBhbmQgdGhlIHJhbmdlIGNvbnN0cnVjdG9yIHdoZW4gaXQgdHVybnMgb3V0CisgICAgICAvLyB0byBiZSB0aGUgc2FtZSB0aGluZy4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2ZpbGxfaW5pdGlhbGl6ZShzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7CisJZm9yICg7IF9fbiA+IDA7IC0tX19uKQorCSAgcHVzaF9iYWNrKF9feCk7CisgICAgICB9CisKKworICAgICAgLy8gSW50ZXJuYWwgYXNzaWduIGZ1bmN0aW9ucyBmb2xsb3cuCisKKyAgICAgIC8vIENhbGxlZCBieSB0aGUgcmFuZ2UgYXNzaWduIHRvIGltcGxlbWVudCBbMjMuMS4xXS85CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDQzOC4gQW1iaWd1aXR5IGluIHRoZSAiZG8gdGhlIHJpZ2h0IHRoaW5nIiBjbGF1c2UKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlZ2VyPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKKyAgICAgICAgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9fdmFsKTsgfQorCisgICAgICAvLyBDYWxsZWQgYnkgdGhlIHJhbmdlIGFzc2lnbiB0byBpbXBsZW1lbnQgWzIzLjEuMV0vOQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJCSAgIF9fZmFsc2VfdHlwZSk7CisKKyAgICAgIC8vIENhbGxlZCBieSBhc3NpZ24obix0KSwgYW5kIHRoZSByYW5nZSBhc3NpZ24gd2hlbiBpdCB0dXJucyBvdXQKKyAgICAgIC8vIHRvIGJlIHRoZSBzYW1lIHRoaW5nLgorICAgICAgdm9pZAorICAgICAgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX192YWwpOworCisKKyAgICAgIC8vIE1vdmVzIHRoZSBlbGVtZW50cyBmcm9tIFtmaXJzdCxsYXN0KSBiZWZvcmUgcG9zaXRpb24uCisgICAgICB2b2lkCisgICAgICBfTV90cmFuc2ZlcihpdGVyYXRvciBfX3Bvc2l0aW9uLCBpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCisgICAgICB7IF9fcG9zaXRpb24uX01fbm9kZS0+X01fdHJhbnNmZXIoX19maXJzdC5fTV9ub2RlLCBfX2xhc3QuX01fbm9kZSk7IH0KKworICAgICAgLy8gSW5zZXJ0cyBuZXcgZWxlbWVudCBhdCBwb3NpdGlvbiBnaXZlbiBhbmQgd2l0aCB2YWx1ZSBnaXZlbi4KKyNpZm5kZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHZvaWQKKyAgICAgIF9NX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7CisgICAgICAgIF9Ob2RlKiBfX3RtcCA9IF9NX2NyZWF0ZV9ub2RlKF9feCk7CisgICAgICAgIF9fdG1wLT5fTV9ob29rKF9fcG9zaXRpb24uX01fbm9kZSk7CisgICAgICB9CisjZWxzZQorICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICB2b2lkCisgICAgICAgX01faW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIF9BcmdzJiYuLi4gX19hcmdzKQorICAgICAgIHsKKwkgX05vZGUqIF9fdG1wID0gX01fY3JlYXRlX25vZGUoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwkgX190bXAtPl9NX2hvb2soX19wb3NpdGlvbi5fTV9ub2RlKTsKKyAgICAgICB9CisjZW5kaWYKKworICAgICAgLy8gRXJhc2VzIGVsZW1lbnQgYXQgcG9zaXRpb24gZ2l2ZW4uCisgICAgICB2b2lkCisgICAgICBfTV9lcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeworICAgICAgICBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3VuaG9vaygpOworICAgICAgICBfTm9kZSogX19uID0gc3RhdGljX2Nhc3Q8X05vZGUqPihfX3Bvc2l0aW9uLl9NX25vZGUpOworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAgIF9NX2dldF9Ob2RlX2FsbG9jYXRvcigpLmRlc3Ryb3koX19uKTsKKyNlbHNlCisJX01fZ2V0X1RwX2FsbG9jYXRvcigpLmRlc3Ryb3koJl9fbi0+X01fZGF0YSk7CisjZW5kaWYKKyAgICAgICAgX01fcHV0X25vZGUoX19uKTsKKyAgICAgIH0KKworICAgICAgLy8gVG8gaW1wbGVtZW50IHRoZSBzcGxpY2UgKGFuZCBtZXJnZSkgYml0cyBvZiBOMTU5OS4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2NoZWNrX2VxdWFsX2FsbG9jYXRvcnMobGlzdCYgX194KQorICAgICAgeworCWlmIChzdGQ6Ol9fYWxsb2NfbmVxPHR5cGVuYW1lIF9CYXNlOjpfTm9kZV9hbGxvY190eXBlPjo6CisJICAgIF9TX2RvX2l0KF9NX2dldF9Ob2RlX2FsbG9jYXRvcigpLCBfX3guX01fZ2V0X05vZGVfYWxsb2NhdG9yKCkpKQorCSAgX190aHJvd19ydW50aW1lX2Vycm9yKF9fTigibGlzdDo6X01fY2hlY2tfZXF1YWxfYWxsb2NhdG9ycyIpKTsKKyAgICAgIH0KKyAgICB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBMaXN0IGVxdWFsaXR5IGNvbXBhcmlzb24uCisgICAqICBAcGFyYW0gIHggIEEgJWxpc3QuCisgICAqICBAcGFyYW0gIHkgIEEgJWxpc3Qgb2YgdGhlIHNhbWUgdHlwZSBhcyBAYSB4LgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZmYgdGhlIHNpemUgYW5kIGVsZW1lbnRzIG9mIHRoZSBsaXN0cyBhcmUgZXF1YWwuCisgICAqCisgICAqICBUaGlzIGlzIGFuIGVxdWl2YWxlbmNlIHJlbGF0aW9uLiAgSXQgaXMgbGluZWFyIGluIHRoZSBzaXplIG9mCisgICAqICB0aGUgbGlzdHMuICBMaXN0cyBhcmUgY29uc2lkZXJlZCBlcXVpdmFsZW50IGlmIHRoZWlyIHNpemVzIGFyZQorICAgKiAgZXF1YWwsIGFuZCBpZiBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIGNvbXBhcmUgZXF1YWwuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX195KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbGlzdDxfVHAsIF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgICAgY29uc3RfaXRlcmF0b3IgX19lbmQxID0gX194LmVuZCgpOworICAgICAgY29uc3RfaXRlcmF0b3IgX19lbmQyID0gX195LmVuZCgpOworCisgICAgICBjb25zdF9pdGVyYXRvciBfX2kxID0gX194LmJlZ2luKCk7CisgICAgICBjb25zdF9pdGVyYXRvciBfX2kyID0gX195LmJlZ2luKCk7CisgICAgICB3aGlsZSAoX19pMSAhPSBfX2VuZDEgJiYgX19pMiAhPSBfX2VuZDIgJiYgKl9faTEgPT0gKl9faTIpCisJeworCSAgKytfX2kxOworCSAgKytfX2kyOworCX0KKyAgICAgIHJldHVybiBfX2kxID09IF9fZW5kMSAmJiBfX2kyID09IF9fZW5kMjsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIExpc3Qgb3JkZXJpbmcgcmVsYXRpb24uCisgICAqICBAcGFyYW0gIHggIEEgJWxpc3QuCisgICAqICBAcGFyYW0gIHkgIEEgJWxpc3Qgb2YgdGhlIHNhbWUgdHlwZSBhcyBAYSB4LgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZmYgQGEgeCBpcyBsZXhpY29ncmFwaGljYWxseSBsZXNzIHRoYW4gQGEgeS4KKyAgICoKKyAgICogIFRoaXMgaXMgYSB0b3RhbCBvcmRlcmluZyByZWxhdGlvbi4gIEl0IGlzIGxpbmVhciBpbiB0aGUgc2l6ZSBvZiB0aGUKKyAgICogIGxpc3RzLiAgVGhlIGVsZW1lbnRzIG11c3QgYmUgY29tcGFyYWJsZSB3aXRoIEBjIDwuCisgICAqCisgICAqICBTZWUgc3RkOjpsZXhpY29ncmFwaGljYWxfY29tcGFyZSgpIGZvciBob3cgdGhlIGRldGVybWluYXRpb24gaXMgbWFkZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBzdGQ6OmxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCisJCQkJCSAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I9PQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CisKKyAgLy8vIEJhc2VkIG9uIG9wZXJhdG9yPAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQorCisgIC8vLyBCYXNlZCBvbiBvcGVyYXRvcjwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CisKKyAgLy8vIEJhc2VkIG9uIG9wZXJhdG9yPAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KKworICAvLy8gU2VlIHN0ZDo6bGlzdDo6c3dhcCgpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAobGlzdDxfVHAsIF9BbGxvYz4mIF9feCwgbGlzdDxfVHAsIF9BbGxvYz4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworX0dMSUJDWFhfRU5EX05FU1RFRF9OQU1FU1BBQ0UKKworI2VuZGlmIC8qIF9TVExfTElTVF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3RsX21hcC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF9tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjgxZmFiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF9tYXAuaApAQCAtMCwwICsxLDg5NSBAQAorLy8gTWFwIGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5NworICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIHN0bF9tYXAuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWZuZGVmIF9TVExfTUFQX0gKKyNkZWZpbmUgX1NUTF9NQVBfSCAxCisKKyNpbmNsdWRlIDxiaXRzL2Z1bmN0ZXhjZXB0Lmg+CisjaW5jbHVkZSA8Yml0cy9jb25jZXB0X2NoZWNrLmg+CisjaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KKworX0dMSUJDWFhfQkVHSU5fTkVTVEVEX05BTUVTUEFDRShzdGQsIF9HTElCQ1hYX1NURF9EKQorCisgIC8qKgorICAgKiAgQGJyaWVmIEEgc3RhbmRhcmQgY29udGFpbmVyIG1hZGUgdXAgb2YgKGtleSx2YWx1ZSkgcGFpcnMsIHdoaWNoIGNhbiBiZQorICAgKiAgcmV0cmlldmVkIGJhc2VkIG9uIGEga2V5LCBpbiBsb2dhcml0aG1pYyB0aW1lLgorICAgKgorICAgKiAgQGluZ3JvdXAgYXNzb2NpYXRpdmVfY29udGFpbmVycworICAgKgorICAgKiAgTWVldHMgdGhlIHJlcXVpcmVtZW50cyBvZiBhIDxhIGhyZWY9InRhYmxlcy5odG1sIzY1Ij5jb250YWluZXI8L2E+LCBhCisgICAqICA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2NiI+cmV2ZXJzaWJsZSBjb250YWluZXI8L2E+LCBhbmQgYW4KKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sIzY5Ij5hc3NvY2lhdGl2ZSBjb250YWluZXI8L2E+ICh1c2luZyB1bmlxdWUga2V5cykuCisgICAqICBGb3IgYSBAYyBtYXA8S2V5LFQ+IHRoZSBrZXlfdHlwZSBpcyBLZXksIHRoZSBtYXBwZWRfdHlwZSBpcyBULCBhbmQgdGhlCisgICAqICB2YWx1ZV90eXBlIGlzIHN0ZDo6cGFpcjxjb25zdCBLZXksVD4uCisgICAqCisgICAqICBNYXBzIHN1cHBvcnQgYmlkaXJlY3Rpb25hbCBpdGVyYXRvcnMuCisgICAqCisgICAqICBUaGUgcHJpdmF0ZSB0cmVlIGRhdGEgaXMgZGVjbGFyZWQgZXhhY3RseSB0aGUgc2FtZSB3YXkgZm9yIG1hcCBhbmQKKyAgICogIG11bHRpbWFwOyB0aGUgZGlzdGluY3Rpb24gaXMgbWFkZSBlbnRpcmVseSBpbiBob3cgdGhlIHRyZWUgZnVuY3Rpb25zIGFyZQorICAgKiAgY2FsbGVkICgqX3VuaXF1ZSB2ZXJzdXMgKl9lcXVhbCwgc2FtZSBhcyB0aGUgc3RhbmRhcmQpLgorICAqLworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSA9IHN0ZDo6bGVzczxfS2V5PiwKKyAgICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4gPgorICAgIGNsYXNzIG1hcAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9LZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBlZF90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0NvbXBhcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9jb21wYXJlOworICAgICAgdHlwZWRlZiBfQWxsb2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CisKKyAgICBwcml2YXRlOgorICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp2YWx1ZV90eXBlICAgICAgICAgICAgICAgICAgIF9BbGxvY192YWx1ZV90eXBlOworICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzKF9UcCwgX1NHSUFzc2lnbmFibGVDb25jZXB0KQorICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzNChfQ29tcGFyZSwgYm9vbCwgX0tleSwgX0tleSwKKwkJCQlfQmluYXJ5RnVuY3Rpb25Db25jZXB0KQorICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzMih2YWx1ZV90eXBlLCBfQWxsb2NfdmFsdWVfdHlwZSwgX1NhbWVUeXBlQ29uY2VwdCkKKworICAgIHB1YmxpYzoKKyAgICAgIGNsYXNzIHZhbHVlX2NvbXBhcmUKKyAgICAgIDogcHVibGljIHN0ZDo6YmluYXJ5X2Z1bmN0aW9uPHZhbHVlX3R5cGUsIHZhbHVlX3R5cGUsIGJvb2w+CisgICAgICB7CisJZnJpZW5kIGNsYXNzIG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2M+OworICAgICAgcHJvdGVjdGVkOgorCV9Db21wYXJlIGNvbXA7CisKKwl2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9fYykKKwk6IGNvbXAoX19jKSB7IH0KKworICAgICAgcHVibGljOgorCWJvb2wgb3BlcmF0b3IoKShjb25zdCB2YWx1ZV90eXBlJiBfX3gsIGNvbnN0IHZhbHVlX3R5cGUmIF9feSkgY29uc3QKKwl7IHJldHVybiBjb21wKF9feC5maXJzdCwgX195LmZpcnN0KTsgfQorICAgICAgfTsKKworICAgIHByaXZhdGU6CisgICAgICAvLy8gVGhpcyB0dXJucyBhIHJlZC1ibGFjayB0cmVlIGludG8gYSBbbXVsdGldbWFwLiAKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8dmFsdWVfdHlwZT46Om90aGVyIAorICAgICAgICBfUGFpcl9hbGxvY190eXBlOworCisgICAgICB0eXBlZGVmIF9SYl90cmVlPGtleV90eXBlLCB2YWx1ZV90eXBlLCBfU2VsZWN0MXN0PHZhbHVlX3R5cGU+LAorCQkgICAgICAga2V5X2NvbXBhcmUsIF9QYWlyX2FsbG9jX3R5cGU+IF9SZXBfdHlwZTsKKworICAgICAgLy8vIFRoZSBhY3R1YWwgdHJlZSBzdHJ1Y3R1cmUuCisgICAgICBfUmVwX3R5cGUgX01fdDsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vIG1hbnkgb2YgdGhlc2UgYXJlIHNwZWNpZmllZCBkaWZmZXJlbnRseSBpbiBJU08sIGJ1dCB0aGUgZm9sbG93aW5nIGFyZQorICAgICAgLy8gImZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUGFpcl9hbGxvY190eXBlOjpwb2ludGVyICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1BhaXJfYWxsb2NfdHlwZTo6Y29uc3RfcG9pbnRlciAgIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9QYWlyX2FsbG9jX3R5cGU6OnJlZmVyZW5jZSAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9QYWlyX2FsbG9jX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgICAgICAgICAgICAgICBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnNpemVfdHlwZSAgICAgICAgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CisKKyAgICAgIC8vIFsyMy4zLjEuMV0gY29uc3RydWN0L2NvcHkvZGVzdHJveQorICAgICAgLy8gKGdldF9hbGxvY2F0b3IoKSBpcyBub3JtYWxseSBsaXN0ZWQgaW4gdGhpcyBzZWN0aW9uLCBidXQgc2VlbXMgdG8gaGF2ZQorICAgICAgLy8gYmVlbiBhY2NpZGVudGFsbHkgb21pdHRlZCBpbiB0aGUgcHJpbnRlZCBzdGFuZGFyZCkKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRGVmYXVsdCBjb25zdHJ1Y3RvciBjcmVhdGVzIG5vIGVsZW1lbnRzLgorICAgICAgICovCisgICAgICBtYXAoKQorICAgICAgOiBfTV90KCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ3JlYXRlcyBhICVtYXAgd2l0aCBubyBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gIGNvbXAgIEEgY29tcGFyaXNvbiBvYmplY3QuCisgICAgICAgKiAgQHBhcmFtICBhICBBbiBhbGxvY2F0b3Igb2JqZWN0LgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgbWFwKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCisJICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX01fdChfX2NvbXAsIF9fYSkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJU1hcCBjb3B5IGNvbnN0cnVjdG9yLgorICAgICAgICogIEBwYXJhbSAgeCAgQSAlbWFwIG9mIGlkZW50aWNhbCBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoZSBuZXdseS1jcmVhdGVkICVtYXAgdXNlcyBhIGNvcHkgb2YgdGhlIGFsbG9jYXRpb24gb2JqZWN0CisgICAgICAgKiAgdXNlZCBieSBAYSB4LgorICAgICAgICovCisgICAgICBtYXAoY29uc3QgbWFwJiBfX3gpCisgICAgICA6IF9NX3QoX194Ll9NX3QpIHsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJU1hcCBtb3ZlIGNvbnN0cnVjdG9yLgorICAgICAgICogIEBwYXJhbSAgeCAgQSAlbWFwIG9mIGlkZW50aWNhbCBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoZSBuZXdseS1jcmVhdGVkICVtYXAgY29udGFpbnMgdGhlIGV4YWN0IGNvbnRlbnRzIG9mIEBhIHguCisgICAgICAgKiAgVGhlIGNvbnRlbnRzIG9mIEBhIHggYXJlIGEgdmFsaWQsIGJ1dCB1bnNwZWNpZmllZCAlbWFwLgorICAgICAgICovCisgICAgICBtYXAobWFwJiYgX194KQorICAgICAgOiBfTV90KHN0ZDo6Zm9yd2FyZDxfUmVwX3R5cGU+KF9feC5fTV90KSkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQnVpbGRzIGEgJW1hcCBmcm9tIGFuIGluaXRpYWxpemVyX2xpc3QuCisgICAgICAgKiAgQHBhcmFtICBsICBBbiBpbml0aWFsaXplcl9saXN0LgorICAgICAgICogIEBwYXJhbSAgY29tcCAgQSBjb21wYXJpc29uIG9iamVjdC4KKyAgICAgICAqICBAcGFyYW0gIGEgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKgorICAgICAgICogIENyZWF0ZSBhICVtYXAgY29uc2lzdGluZyBvZiBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGluIHRoZQorICAgICAgICogIGluaXRpYWxpemVyX2xpc3QgQGEgbC4KKyAgICAgICAqICBUaGlzIGlzIGxpbmVhciBpbiBOIGlmIHRoZSByYW5nZSBpcyBhbHJlYWR5IHNvcnRlZCwgYW5kIE5sb2dOCisgICAgICAgKiAgb3RoZXJ3aXNlICh3aGVyZSBOIGlzIEBhIGwuc2l6ZSgpKS4KKyAgICAgICAqLworICAgICAgbWFwKGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sLAorCSAgY29uc3QgX0NvbXBhcmUmIF9fYyA9IF9Db21wYXJlKCksCisJICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX01fdChfX2MsIF9fYSkKKyAgICAgIHsgX01fdC5fTV9pbnNlcnRfdW5pcXVlKF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOyB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBCdWlsZHMgYSAlbWFwIGZyb20gYSByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gIGZpcnN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIGxhc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICoKKyAgICAgICAqICBDcmVhdGUgYSAlbWFwIGNvbnNpc3Rpbmcgb2YgY29waWVzIG9mIHRoZSBlbGVtZW50cyBmcm9tIFtmaXJzdCxsYXN0KS4KKyAgICAgICAqICBUaGlzIGlzIGxpbmVhciBpbiBOIGlmIHRoZSByYW5nZSBpcyBhbHJlYWR5IHNvcnRlZCwgYW5kIE5sb2dOCisgICAgICAgKiAgb3RoZXJ3aXNlICh3aGVyZSBOIGlzIGRpc3RhbmNlKGZpcnN0LGxhc3QpKS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIG1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisJOiBfTV90KCkKKyAgICAgICAgeyBfTV90Ll9NX2luc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEJ1aWxkcyBhICVtYXAgZnJvbSBhIHJhbmdlLgorICAgICAgICogIEBwYXJhbSAgZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgbGFzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBjb21wICBBIGNvbXBhcmlzb24gZnVuY3Rvci4KKyAgICAgICAqICBAcGFyYW0gIGEgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKgorICAgICAgICogIENyZWF0ZSBhICVtYXAgY29uc2lzdGluZyBvZiBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGZyb20gW2ZpcnN0LGxhc3QpLgorICAgICAgICogIFRoaXMgaXMgbGluZWFyIGluIE4gaWYgdGhlIHJhbmdlIGlzIGFscmVhZHkgc29ydGVkLCBhbmQgTmxvZ04KKyAgICAgICAqICBvdGhlcndpc2UgKHdoZXJlIE4gaXMgZGlzdGFuY2UoZmlyc3QsbGFzdCkpLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKKwkgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfTV90KF9fY29tcCwgX19hKQorICAgICAgICB7IF9NX3QuX01faW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CisKKyAgICAgIC8vIEZJWE1FIFRoZXJlIGlzIG5vIGR0b3IgZGVjbGFyZWQsIGJ1dCB3ZSBzaG91bGQgaGF2ZSBzb21ldGhpbmcKKyAgICAgIC8vIGdlbmVyYXRlZCBieSBEb3h5Z2VuLiAgSSBkb24ndCBrbm93IHdoYXQgdGFncyB0byBhZGQgdG8gdGhpcworICAgICAgLy8gcGFyYWdyYXBoIHRvIG1ha2UgdGhhdCBoYXBwZW46CisgICAgICAvKioKKyAgICAgICAqICBUaGUgZHRvciBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudHMsIGFuZCBub3RlIHRoYXQgaWYgdGhlIGVsZW1lbnRzCisgICAgICAgKiAgdGhlbXNlbHZlcyBhcmUgcG9pbnRlcnMsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZCBpbiBhbnkKKyAgICAgICAqICB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJU1hcCBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgeCAgQSAlbWFwIG9mIGlkZW50aWNhbCBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIEFsbCB0aGUgZWxlbWVudHMgb2YgQGEgeCBhcmUgY29waWVkLCBidXQgdW5saWtlIHRoZSBjb3B5IGNvbnN0cnVjdG9yLAorICAgICAgICogIHRoZSBhbGxvY2F0b3Igb2JqZWN0IGlzIG5vdCBjb3BpZWQuCisgICAgICAgKi8KKyAgICAgIG1hcCYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBtYXAmIF9feCkKKyAgICAgIHsKKwlfTV90ID0gX194Ll9NX3Q7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJU1hcCBtb3ZlIGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICB4ICBBICVtYXAgb2YgaWRlbnRpY2FsIGVsZW1lbnQgYW5kIGFsbG9jYXRvciB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGNvbnRlbnRzIG9mIEBhIHggYXJlIG1vdmVkIGludG8gdGhpcyBtYXAgKHdpdGhvdXQgY29weWluZykuCisgICAgICAgKiAgQGEgeCBpcyBhIHZhbGlkLCBidXQgdW5zcGVjaWZpZWQgJW1hcC4KKyAgICAgICAqLworICAgICAgbWFwJgorICAgICAgb3BlcmF0b3I9KG1hcCYmIF9feCkKKyAgICAgIHsKKwkvLyBOQjogRFIgMTIwNC4KKwkvLyBOQjogRFIgNjc1LgorCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+c3dhcChfX3gpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlTWFwIGxpc3QgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIGwgIEFuIGluaXRpYWxpemVyX2xpc3QuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZmlsbHMgYSAlbWFwIHdpdGggY29waWVzIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUKKyAgICAgICAqICBpbml0aWFsaXplciBsaXN0IEBhIGwuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhhdCB0aGUgYXNzaWdubWVudCBjb21wbGV0ZWx5IGNoYW5nZXMgdGhlICVtYXAgYW5kCisgICAgICAgKiAgdGhhdCB0aGUgcmVzdWx0aW5nICVtYXAncyBzaXplIGlzIHRoZSBzYW1lIGFzIHRoZSBudW1iZXIKKyAgICAgICAqICBvZiBlbGVtZW50cyBhc3NpZ25lZC4gIE9sZCBkYXRhIG1heSBiZSBsb3N0LgorICAgICAgICovCisgICAgICBtYXAmCisgICAgICBvcGVyYXRvcj0oaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7CisJdGhpcy0+Y2xlYXIoKTsKKwl0aGlzLT5pbnNlcnQoX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8vLyBHZXQgYSBjb3B5IG9mIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBvYmplY3QuCisgICAgICBhbGxvY2F0b3JfdHlwZQorICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LmdldF9hbGxvY2F0b3IoKTsgfQorCisgICAgICAvLyBpdGVyYXRvcnMKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBmaXJzdCBwYWlyIGluIHRoZQorICAgICAgICogICVtYXAuCisgICAgICAgKiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gYXNjZW5kaW5nIG9yZGVyIGFjY29yZGluZyB0byB0aGUga2V5cy4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkKKyAgICAgIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGZpcnN0IHBhaXIKKyAgICAgICAqICBpbiB0aGUgJW1hcC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIGFzY2VuZGluZyBvcmRlciBhY2NvcmRpbmcgdG8gdGhlCisgICAgICAgKiAga2V5cy4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSBpdGVyYXRvciB0aGF0IHBvaW50cyBvbmUgcGFzdCB0aGUgbGFzdAorICAgICAgICogIHBhaXIgaW4gdGhlICVtYXAuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBhc2NlbmRpbmcgb3JkZXIKKyAgICAgICAqICBhY2NvcmRpbmcgdG8gdGhlIGtleXMuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKQorICAgICAgeyByZXR1cm4gX01fdC5lbmQoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgb25lIHBhc3QgdGhlIGxhc3QKKyAgICAgICAqICBwYWlyIGluIHRoZSAlbWFwLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gYXNjZW5kaW5nIG9yZGVyIGFjY29yZGluZyB0bworICAgICAgICogIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgbGFzdCBwYWlyIGluCisgICAgICAgKiAgdGhlICVtYXAuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBkZXNjZW5kaW5nIG9yZGVyIGFjY29yZGluZyB0byB0aGUKKyAgICAgICAqICBrZXlzLgorICAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKQorICAgICAgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUKKyAgICAgICAqICBsYXN0IHBhaXIgaW4gdGhlICVtYXAuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBkZXNjZW5kaW5nIG9yZGVyCisgICAgICAgKiAgYWNjb3JkaW5nIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIG9uZSBiZWZvcmUgdGhlCisgICAgICAgKiAgZmlyc3QgcGFpciBpbiB0aGUgJW1hcC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIGRlc2NlbmRpbmcgb3JkZXIKKyAgICAgICAqICBhY2NvcmRpbmcgdG8gdGhlIGtleXMuCisgICAgICAgKi8KKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKQorICAgICAgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gb25lCisgICAgICAgKiAgYmVmb3JlIHRoZSBmaXJzdCBwYWlyIGluIHRoZSAlbWFwLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gZGVzY2VuZGluZworICAgICAgICogIG9yZGVyIGFjY29yZGluZyB0byB0aGUga2V5cy4KKyAgICAgICAqLworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LnJlbmQoKTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgZmlyc3QgcGFpcgorICAgICAgICogIGluIHRoZSAlbWFwLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gYXNjZW5kaW5nIG9yZGVyIGFjY29yZGluZyB0byB0aGUKKyAgICAgICAqICBrZXlzLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgb25lIHBhc3QgdGhlIGxhc3QKKyAgICAgICAqICBwYWlyIGluIHRoZSAlbWFwLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gYXNjZW5kaW5nIG9yZGVyIGFjY29yZGluZyB0bworICAgICAgICogIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LmVuZCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZQorICAgICAgICogIGxhc3QgcGFpciBpbiB0aGUgJW1hcC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIGRlc2NlbmRpbmcgb3JkZXIKKyAgICAgICAqICBhY2NvcmRpbmcgdG8gdGhlIGtleXMuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byBvbmUKKyAgICAgICAqICBiZWZvcmUgdGhlIGZpcnN0IHBhaXIgaW4gdGhlICVtYXAuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBkZXNjZW5kaW5nCisgICAgICAgKiAgb3JkZXIgYWNjb3JkaW5nIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjcmVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LnJlbmQoKTsgfQorI2VuZGlmCisKKyAgICAgIC8vIGNhcGFjaXR5CisgICAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSAlbWFwIGlzIGVtcHR5LiAgKFRodXMgYmVnaW4oKSB3b3VsZCBlcXVhbAorICAgICAgICogIGVuZCgpLikKKyAgICAgICovCisgICAgICBib29sCisgICAgICBlbXB0eSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LmVtcHR5KCk7IH0KKworICAgICAgLyoqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlICVtYXAuICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3Quc2l6ZSgpOyB9CisKKyAgICAgIC8qKiBSZXR1cm5zIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlICVtYXAuICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7IH0KKworICAgICAgLy8gWzIzLjMuMS4yXSBlbGVtZW50IGFjY2VzcworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTdWJzY3JpcHQgKCBAYyBbXSApIGFjY2VzcyB0byAlbWFwIGRhdGEuCisgICAgICAgKiAgQHBhcmFtICBrICBUaGUga2V5IGZvciB3aGljaCBkYXRhIHNob3VsZCBiZSByZXRyaWV2ZWQuCisgICAgICAgKiAgQHJldHVybiAgQSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgb2YgdGhlIChrZXksZGF0YSkgJXBhaXIuCisgICAgICAgKgorICAgICAgICogIEFsbG93cyBmb3IgZWFzeSBsb29rdXAgd2l0aCB0aGUgc3Vic2NyaXB0ICggQGMgW10gKQorICAgICAgICogIG9wZXJhdG9yLiAgUmV0dXJucyBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5IHNwZWNpZmllZCBpbgorICAgICAgICogIHN1YnNjcmlwdC4gIElmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QsIGEgcGFpciB3aXRoIHRoYXQga2V5CisgICAgICAgKiAgaXMgY3JlYXRlZCB1c2luZyBkZWZhdWx0IHZhbHVlcywgd2hpY2ggaXMgdGhlbiByZXR1cm5lZC4KKyAgICAgICAqCisgICAgICAgKiAgTG9va3VwIHJlcXVpcmVzIGxvZ2FyaXRobWljIHRpbWUuCisgICAgICAgKi8KKyAgICAgIG1hcHBlZF90eXBlJgorICAgICAgb3BlcmF0b3JbXShjb25zdCBrZXlfdHlwZSYgX19rKQorICAgICAgeworCS8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisJX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9EZWZhdWx0Q29uc3RydWN0aWJsZUNvbmNlcHQ8bWFwcGVkX3R5cGU+KQorCisJaXRlcmF0b3IgX19pID0gbG93ZXJfYm91bmQoX19rKTsKKwkvLyBfX2ktPmZpcnN0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVpdmFsZW50IHRvIF9fay4KKwlpZiAoX19pID09IGVuZCgpIHx8IGtleV9jb21wKCkoX19rLCAoKl9faSkuZmlyc3QpKQorICAgICAgICAgIF9faSA9IGluc2VydChfX2ksIHZhbHVlX3R5cGUoX19rLCBtYXBwZWRfdHlwZSgpKSk7CisJcmV0dXJuICgqX19pKS5zZWNvbmQ7CisgICAgICB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSIDQ2NC4gU3VnZ2VzdGlvbiBmb3IgbmV3IG1lbWJlciBmdW5jdGlvbnMgaW4gc3RhbmRhcmQgY29udGFpbmVycy4KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQWNjZXNzIHRvICVtYXAgZGF0YS4KKyAgICAgICAqICBAcGFyYW0gIGsgIFRoZSBrZXkgZm9yIHdoaWNoIGRhdGEgc2hvdWxkIGJlIHJldHJpZXZlZC4KKyAgICAgICAqICBAcmV0dXJuICBBIHJlZmVyZW5jZSB0byB0aGUgZGF0YSB3aG9zZSBrZXkgaXMgZXF1aXZhbGVudCB0byBAYSBrLCBpZgorICAgICAgICogICAgICAgICAgIHN1Y2ggYSBkYXRhIGlzIHByZXNlbnQgaW4gdGhlICVtYXAuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgbm8gc3VjaCBkYXRhIGlzIHByZXNlbnQuCisgICAgICAgKi8KKyAgICAgIG1hcHBlZF90eXBlJgorICAgICAgYXQoY29uc3Qga2V5X3R5cGUmIF9faykKKyAgICAgIHsKKwlpdGVyYXRvciBfX2kgPSBsb3dlcl9ib3VuZChfX2spOworCWlmIChfX2kgPT0gZW5kKCkgfHwga2V5X2NvbXAoKShfX2ssICgqX19pKS5maXJzdCkpCisJICBfX3Rocm93X291dF9vZl9yYW5nZShfX04oIm1hcDo6YXQiKSk7CisJcmV0dXJuICgqX19pKS5zZWNvbmQ7CisgICAgICB9CisKKyAgICAgIGNvbnN0IG1hcHBlZF90eXBlJgorICAgICAgYXQoY29uc3Qga2V5X3R5cGUmIF9faykgY29uc3QKKyAgICAgIHsKKwljb25zdF9pdGVyYXRvciBfX2kgPSBsb3dlcl9ib3VuZChfX2spOworCWlmIChfX2kgPT0gZW5kKCkgfHwga2V5X2NvbXAoKShfX2ssICgqX19pKS5maXJzdCkpCisJICBfX3Rocm93X291dF9vZl9yYW5nZShfX04oIm1hcDo6YXQiKSk7CisJcmV0dXJuICgqX19pKS5zZWNvbmQ7CisgICAgICB9CisKKyAgICAgIC8vIG1vZGlmaWVycworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEF0dGVtcHRzIHRvIGluc2VydCBhIHN0ZDo6cGFpciBpbnRvIHRoZSAlbWFwLgorCisgICAgICAgKiAgQHBhcmFtICB4ICBQYWlyIHRvIGJlIGluc2VydGVkIChzZWUgc3RkOjptYWtlX3BhaXIgZm9yIGVhc3kgY3JlYXRpb24gCisgICAgICAgKgkgICAgIG9mIHBhaXJzKS4KKworICAgICAgICogIEByZXR1cm4gIEEgcGFpciwgb2Ygd2hpY2ggdGhlIGZpcnN0IGVsZW1lbnQgaXMgYW4gaXRlcmF0b3IgdGhhdCAKKyAgICAgICAqICAgICAgICAgICBwb2ludHMgdG8gdGhlIHBvc3NpYmx5IGluc2VydGVkIHBhaXIsIGFuZCB0aGUgc2Vjb25kIGlzIAorICAgICAgICogICAgICAgICAgIGEgYm9vbCB0aGF0IGlzIHRydWUgaWYgdGhlIHBhaXIgd2FzIGFjdHVhbGx5IGluc2VydGVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIGluc2VydCBhIChrZXksIHZhbHVlKSAlcGFpciBpbnRvIHRoZSAlbWFwLgorICAgICAgICogIEEgJW1hcCByZWxpZXMgb24gdW5pcXVlIGtleXMgYW5kIHRodXMgYSAlcGFpciBpcyBvbmx5IGluc2VydGVkIGlmIGl0cworICAgICAgICogIGZpcnN0IGVsZW1lbnQgKHRoZSBrZXkpIGlzIG5vdCBhbHJlYWR5IHByZXNlbnQgaW4gdGhlICVtYXAuCisgICAgICAgKgorICAgICAgICogIEluc2VydGlvbiByZXF1aXJlcyBsb2dhcml0aG1pYyB0aW1lLgorICAgICAgICovCisgICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+CisgICAgICBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gX01fdC5fTV9pbnNlcnRfdW5pcXVlKF9feCk7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgQXR0ZW1wdHMgdG8gaW5zZXJ0IGEgbGlzdCBvZiBzdGQ6OnBhaXJzIGludG8gdGhlICVtYXAuCisgICAgICAgKiAgQHBhcmFtICBsaXN0ICBBIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBvZiBwYWlycyB0byBiZQorICAgICAgICogICAgICAgICAgICAgICAgaW5zZXJ0ZWQuCisgICAgICAgKgorICAgICAgICogIENvbXBsZXhpdHkgc2ltaWxhciB0byB0aGF0IG9mIHRoZSByYW5nZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2xpc3QpCisgICAgICB7IGluc2VydCAoX19saXN0LmJlZ2luKCksIF9fbGlzdC5lbmQoKSk7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgQXR0ZW1wdHMgdG8gaW5zZXJ0IGEgc3RkOjpwYWlyIGludG8gdGhlICVtYXAuCisgICAgICAgKiAgQHBhcmFtICBwb3NpdGlvbiAgQW4gaXRlcmF0b3IgdGhhdCBzZXJ2ZXMgYXMgYSBoaW50IGFzIHRvIHdoZXJlIHRoZQorICAgICAgICogICAgICAgICAgICAgICAgICAgIHBhaXIgc2hvdWxkIGJlIGluc2VydGVkLgorICAgICAgICogIEBwYXJhbSAgeCAgUGFpciB0byBiZSBpbnNlcnRlZCAoc2VlIHN0ZDo6bWFrZV9wYWlyIGZvciBlYXN5IGNyZWF0aW9uCisgICAgICAgKiAgICAgICAgICAgICBvZiBwYWlycykuCisgICAgICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGVsZW1lbnQgd2l0aCBrZXkgb2YgQGEgeCAobWF5CisgICAgICAgKiAgICAgICAgICAgb3IgbWF5IG5vdCBiZSB0aGUgJXBhaXIgcGFzc2VkIGluKS4KKyAgICAgICAqCisKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBjb25jZXJuZWQgYWJvdXQgd2hldGhlciB0aGUgaW5zZXJ0aW9uCisgICAgICAgKiAgdG9vayBwbGFjZSwgYW5kIHRodXMgZG9lcyBub3QgcmV0dXJuIGEgYm9vbGVhbiBsaWtlIHRoZQorICAgICAgICogIHNpbmdsZS1hcmd1bWVudCBpbnNlcnQoKSBkb2VzLiAgTm90ZSB0aGF0IHRoZSBmaXJzdAorICAgICAgICogIHBhcmFtZXRlciBpcyBvbmx5IGEgaGludCBhbmQgY2FuIHBvdGVudGlhbGx5IGltcHJvdmUgdGhlCisgICAgICAgKiAgcGVyZm9ybWFuY2Ugb2YgdGhlIGluc2VydGlvbiBwcm9jZXNzLiAgQSBiYWQgaGludCB3b3VsZAorICAgICAgICogIGNhdXNlIG5vIGdhaW5zIGluIGVmZmljaWVuY3kuCisgICAgICAgKgorICAgICAgICogIFNlZQorICAgICAgICogIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2xpYnN0ZGMrKy9tYW51YWwvYmswMXB0MDdjaDE3Lmh0bWwKKyAgICAgICAqICBmb3IgbW9yZSBvbiBAYSBoaW50aW5nLgorICAgICAgICoKKyAgICAgICAqICBJbnNlcnRpb24gcmVxdWlyZXMgbG9nYXJpdGhtaWMgdGltZSAoaWYgdGhlIGhpbnQgaXMgbm90IHRha2VuKS4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV90Ll9NX2luc2VydF91bmlxdWVfKF9fcG9zaXRpb24sIF9feCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgYXR0ZW1wdHMgdG8gaW5zZXJ0IGEgcmFuZ2Ugb2YgZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBmaXJzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSB0byBiZQorICAgICAgICogICAgICAgICAgICAgICAgIGluc2VydGVkLgorICAgICAgICogIEBwYXJhbSAgbGFzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgcmFuZ2UuCisgICAgICAgKgorICAgICAgICogIENvbXBsZXhpdHkgc2ltaWxhciB0byB0aGF0IG9mIHRoZSByYW5nZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeyBfTV90Ll9NX2luc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSIDEzMC4gQXNzb2NpYXRpdmUgZXJhc2Ugc2hvdWxkIHJldHVybiBhbiBpdGVyYXRvci4KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBFcmFzZXMgYW4gZWxlbWVudCBmcm9tIGEgJW1hcC4KKyAgICAgICAqICBAcGFyYW0gIHBvc2l0aW9uICBBbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZWxlbWVudCB0byBiZSBlcmFzZWQuCisgICAgICAgKiAgQHJldHVybiBBbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZWxlbWVudCBpbW1lZGlhdGVseSBmb2xsb3dpbmcKKyAgICAgICAqICAgICAgICAgIEBhIHBvc2l0aW9uIHByaW9yIHRvIHRoZSBlbGVtZW50IGJlaW5nIGVyYXNlZC4gSWYgbm8gc3VjaCAKKyAgICAgICAqICAgICAgICAgIGVsZW1lbnQgZXhpc3RzLCBlbmQoKSBpcyByZXR1cm5lZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBlcmFzZXMgYW4gZWxlbWVudCwgcG9pbnRlZCB0byBieSB0aGUgZ2l2ZW4KKyAgICAgICAqICBpdGVyYXRvciwgZnJvbSBhICVtYXAuICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcworICAgICAgICogIHRoZSBlbGVtZW50LCBhbmQgdGhhdCBpZiB0aGUgZWxlbWVudCBpcyBpdHNlbGYgYSBwb2ludGVyLAorICAgICAgICogIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZCBpbiBhbnkgd2F5LiAgTWFuYWdpbmcKKyAgICAgICAqICB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICAgIHsgcmV0dXJuIF9NX3QuZXJhc2UoX19wb3NpdGlvbik7IH0KKyNlbHNlCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRXJhc2VzIGFuIGVsZW1lbnQgZnJvbSBhICVtYXAuCisgICAgICAgKiAgQHBhcmFtICBwb3NpdGlvbiAgQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVsZW1lbnQgdG8gYmUgZXJhc2VkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGVyYXNlcyBhbiBlbGVtZW50LCBwb2ludGVkIHRvIGJ5IHRoZSBnaXZlbgorICAgICAgICogIGl0ZXJhdG9yLCBmcm9tIGEgJW1hcC4gIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzCisgICAgICAgKiAgdGhlIGVsZW1lbnQsIGFuZCB0aGF0IGlmIHRoZSBlbGVtZW50IGlzIGl0c2VsZiBhIHBvaW50ZXIsCisgICAgICAgKiAgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkIGluIGFueSB3YXkuICBNYW5hZ2luZworICAgICAgICogIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7IF9NX3QuZXJhc2UoX19wb3NpdGlvbik7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRXJhc2VzIGVsZW1lbnRzIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQga2V5LgorICAgICAgICogIEBwYXJhbSAgeCAgS2V5IG9mIGVsZW1lbnQgdG8gYmUgZXJhc2VkLgorICAgICAgICogIEByZXR1cm4gIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgZXJhc2VkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGVyYXNlcyBhbGwgdGhlIGVsZW1lbnRzIGxvY2F0ZWQgYnkgdGhlIGdpdmVuIGtleSBmcm9tCisgICAgICAgKiAgYSAlbWFwLgorICAgICAgICogIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50LCBhbmQgdGhhdCBpZgorICAgICAgICogIHRoZSBlbGVtZW50IGlzIGl0c2VsZiBhIHBvaW50ZXIsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZAorICAgICAgICogIGluIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV90LmVyYXNlKF9feCk7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUiAxMzAuIEFzc29jaWF0aXZlIGVyYXNlIHNob3VsZCByZXR1cm4gYW4gaXRlcmF0b3IuCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRXJhc2VzIGEgW2ZpcnN0LGxhc3QpIHJhbmdlIG9mIGVsZW1lbnRzIGZyb20gYSAlbWFwLgorICAgICAgICogIEBwYXJhbSAgZmlyc3QgIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UgdG8gYmUKKyAgICAgICAqICAgICAgICAgICAgICAgICBlcmFzZWQuCisgICAgICAgKiAgQHBhcmFtICBsYXN0ICBJdGVyYXRvciBwb2ludGluZyB0byB0aGUgZW5kIG9mIHRoZSByYW5nZSB0byBiZSBlcmFzZWQuCisgICAgICAgKiAgQHJldHVybiBUaGUgaXRlcmF0b3IgQGEgbGFzdC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBlcmFzZXMgYSBzZXF1ZW5jZSBvZiBlbGVtZW50cyBmcm9tIGEgJW1hcC4KKyAgICAgICAqICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudCwgYW5kIHRoYXQgaWYKKyAgICAgICAqICB0aGUgZWxlbWVudCBpcyBpdHNlbGYgYSBwb2ludGVyLCB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQKKyAgICAgICAqICBpbiBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsgcmV0dXJuIF9NX3QuZXJhc2UoX19maXJzdCwgX19sYXN0KTsgfQorI2Vsc2UKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBFcmFzZXMgYSBbZmlyc3QsbGFzdCkgcmFuZ2Ugb2YgZWxlbWVudHMgZnJvbSBhICVtYXAuCisgICAgICAgKiAgQHBhcmFtICBmaXJzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSB0byBiZQorICAgICAgICogICAgICAgICAgICAgICAgIGVyYXNlZC4KKyAgICAgICAqICBAcGFyYW0gIGxhc3QgIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbmQgb2YgdGhlIHJhbmdlIHRvIGJlIGVyYXNlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBlcmFzZXMgYSBzZXF1ZW5jZSBvZiBlbGVtZW50cyBmcm9tIGEgJW1hcC4KKyAgICAgICAqICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudCwgYW5kIHRoYXQgaWYKKyAgICAgICAqICB0aGUgZWxlbWVudCBpcyBpdHNlbGYgYSBwb2ludGVyLCB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQKKyAgICAgICAqICBpbiBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICAgeyBfTV90LmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFN3YXBzIGRhdGEgd2l0aCBhbm90aGVyICVtYXAuCisgICAgICAgKiAgQHBhcmFtICB4ICBBICVtYXAgb2YgdGhlIHNhbWUgZWxlbWVudCBhbmQgYWxsb2NhdG9yIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGV4Y2hhbmdlcyB0aGUgZWxlbWVudHMgYmV0d2VlbiB0d28gbWFwcyBpbiBjb25zdGFudAorICAgICAgICogIHRpbWUuICAoSXQgaXMgb25seSBzd2FwcGluZyBhIHBvaW50ZXIsIGFuIGludGVnZXIsIGFuZCBhbgorICAgICAgICogIGluc3RhbmNlIG9mIHRoZSBAYyBDb21wYXJlIHR5cGUgKHdoaWNoIGl0c2VsZiBpcyBvZnRlbgorICAgICAgICogIHN0YXRlbGVzcyBhbmQgZW1wdHkpLCBzbyBpdCBzaG91bGQgYmUgcXVpdGUgZmFzdC4pICBOb3RlCisgICAgICAgKiAgdGhhdCB0aGUgZ2xvYmFsIHN0ZDo6c3dhcCgpIGZ1bmN0aW9uIGlzIHNwZWNpYWxpemVkIHN1Y2gKKyAgICAgICAqICB0aGF0IHN0ZDo6c3dhcChtMSxtMikgd2lsbCBmZWVkIHRvIHRoaXMgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHN3YXAobWFwJiBfX3gpCisgICAgICB7IF9NX3Quc3dhcChfX3guX01fdCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgRXJhc2VzIGFsbCBlbGVtZW50cyBpbiBhICVtYXAuICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5CisgICAgICAgKiAgZXJhc2VzIHRoZSBlbGVtZW50cywgYW5kIHRoYXQgaWYgdGhlIGVsZW1lbnRzIHRoZW1zZWx2ZXMgYXJlCisgICAgICAgKiAgcG9pbnRlcnMsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZCBpbiBhbnkgd2F5LgorICAgICAgICogIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCkKKyAgICAgIHsgX01fdC5jbGVhcigpOyB9CisKKyAgICAgIC8vIG9ic2VydmVycworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyB0aGUga2V5IGNvbXBhcmlzb24gb2JqZWN0IG91dCBvZiB3aGljaCB0aGUgJW1hcCB3YXMKKyAgICAgICAqICBjb25zdHJ1Y3RlZC4KKyAgICAgICAqLworICAgICAga2V5X2NvbXBhcmUKKyAgICAgIGtleV9jb21wKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3Qua2V5X2NvbXAoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgdmFsdWUgY29tcGFyaXNvbiBvYmplY3QsIGJ1aWx0IGZyb20gdGhlIGtleSBjb21wYXJpc29uCisgICAgICAgKiAgb2JqZWN0IG91dCBvZiB3aGljaCB0aGUgJW1hcCB3YXMgY29uc3RydWN0ZWQuCisgICAgICAgKi8KKyAgICAgIHZhbHVlX2NvbXBhcmUKKyAgICAgIHZhbHVlX2NvbXAoKSBjb25zdAorICAgICAgeyByZXR1cm4gdmFsdWVfY29tcGFyZShfTV90LmtleV9jb21wKCkpOyB9CisKKyAgICAgIC8vIFsyMy4zLjEuM10gbWFwIG9wZXJhdGlvbnMKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBUcmllcyB0byBsb2NhdGUgYW4gZWxlbWVudCBpbiBhICVtYXAuCisgICAgICAgKiAgQHBhcmFtICB4ICBLZXkgb2YgKGtleSwgdmFsdWUpICVwYWlyIHRvIGJlIGxvY2F0ZWQuCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gc291Z2h0LWFmdGVyIGVsZW1lbnQsIG9yIGVuZCgpIGlmIG5vdAorICAgICAgICogICAgICAgICAgIGZvdW5kLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHRha2VzIGEga2V5IGFuZCB0cmllcyB0byBsb2NhdGUgdGhlIGVsZW1lbnQgd2l0aCB3aGljaAorICAgICAgICogIHRoZSBrZXkgbWF0Y2hlcy4gIElmIHN1Y2Nlc3NmdWwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gaXRlcmF0b3IKKyAgICAgICAqICBwb2ludGluZyB0byB0aGUgc291Z2h0IGFmdGVyICVwYWlyLiAgSWYgdW5zdWNjZXNzZnVsIGl0IHJldHVybnMgdGhlCisgICAgICAgKiAgcGFzdC10aGUtZW5kICggQGMgZW5kKCkgKSBpdGVyYXRvci4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBUcmllcyB0byBsb2NhdGUgYW4gZWxlbWVudCBpbiBhICVtYXAuCisgICAgICAgKiAgQHBhcmFtICB4ICBLZXkgb2YgKGtleSwgdmFsdWUpICVwYWlyIHRvIGJlIGxvY2F0ZWQuCisgICAgICAgKiAgQHJldHVybiAgUmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgcG9pbnRpbmcgdG8gc291Z2h0LWFmdGVyCisgICAgICAgKiAgICAgICAgICAgZWxlbWVudCwgb3IgZW5kKCkgaWYgbm90IGZvdW5kLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHRha2VzIGEga2V5IGFuZCB0cmllcyB0byBsb2NhdGUgdGhlIGVsZW1lbnQgd2l0aCB3aGljaAorICAgICAgICogIHRoZSBrZXkgbWF0Y2hlcy4gIElmIHN1Y2Nlc3NmdWwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBjb25zdGFudAorICAgICAgICogIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBzb3VnaHQgYWZ0ZXIgJXBhaXIuIElmIHVuc3VjY2Vzc2Z1bCBpdAorICAgICAgICogIHJldHVybnMgdGhlIHBhc3QtdGhlLWVuZCAoIEBjIGVuZCgpICkgaXRlcmF0b3IuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmRzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgd2l0aCBnaXZlbiBrZXkuCisgICAgICAgKiAgQHBhcmFtICB4ICBLZXkgb2YgKGtleSwgdmFsdWUpIHBhaXJzIHRvIGJlIGxvY2F0ZWQuCisgICAgICAgKiAgQHJldHVybiAgTnVtYmVyIG9mIGVsZW1lbnRzIHdpdGggc3BlY2lmaWVkIGtleS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBvbmx5IG1ha2VzIHNlbnNlIGZvciBtdWx0aW1hcHM7IGZvciBtYXAgdGhlIHJlc3VsdCB3aWxsCisgICAgICAgKiAgZWl0aGVyIGJlIDAgKG5vdCBwcmVzZW50KSBvciAxIChwcmVzZW50KS4KKyAgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5maW5kKF9feCkgPT0gX01fdC5lbmQoKSA/IDAgOiAxOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBGaW5kcyB0aGUgYmVnaW5uaW5nIG9mIGEgc3Vic2VxdWVuY2UgbWF0Y2hpbmcgZ2l2ZW4ga2V5LgorICAgICAgICogIEBwYXJhbSAgeCAgS2V5IG9mIChrZXksIHZhbHVlKSBwYWlyIHRvIGJlIGxvY2F0ZWQuCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gZmlyc3QgZWxlbWVudCBlcXVhbCB0byBvciBncmVhdGVyCisgICAgICAgKiAgICAgICAgICAgdGhhbiBrZXksIG9yIGVuZCgpLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYSBzdWJzZXF1ZW5jZSBvZiBlbGVtZW50cworICAgICAgICogIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4ga2V5LiAgSWYgdW5zdWNjZXNzZnVsIGl0IHJldHVybnMgYW4gaXRlcmF0b3IKKyAgICAgICAqICBwb2ludGluZyB0byB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IGhhcyBhIGdyZWF0ZXIgdmFsdWUgdGhhbiBnaXZlbiBrZXkKKyAgICAgICAqICBvciBlbmQoKSBpZiBubyBzdWNoIGVsZW1lbnQgZXhpc3RzLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRmluZHMgdGhlIGJlZ2lubmluZyBvZiBhIHN1YnNlcXVlbmNlIG1hdGNoaW5nIGdpdmVuIGtleS4KKyAgICAgICAqICBAcGFyYW0gIHggIEtleSBvZiAoa2V5LCB2YWx1ZSkgcGFpciB0byBiZSBsb2NhdGVkLgorICAgICAgICogIEByZXR1cm4gIFJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHBvaW50aW5nIHRvIGZpcnN0IGVsZW1lbnQKKyAgICAgICAqICAgICAgICAgICBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4ga2V5LCBvciBlbmQoKS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IG9mIGEgc3Vic2VxdWVuY2Ugb2YgZWxlbWVudHMKKyAgICAgICAqICB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIGtleS4gIElmIHVuc3VjY2Vzc2Z1bCBpdCByZXR1cm5zIGFuIGl0ZXJhdG9yCisgICAgICAgKiAgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBoYXMgYSBncmVhdGVyIHZhbHVlIHRoYW4gZ2l2ZW4ga2V5CisgICAgICAgKiAgb3IgZW5kKCkgaWYgbm8gc3VjaCBlbGVtZW50IGV4aXN0cy4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEZpbmRzIHRoZSBlbmQgb2YgYSBzdWJzZXF1ZW5jZSBtYXRjaGluZyBnaXZlbiBrZXkuCisgICAgICAgKiAgQHBhcmFtICB4ICBLZXkgb2YgKGtleSwgdmFsdWUpIHBhaXIgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50CisgICAgICAgKiAgICAgICAgICBncmVhdGVyIHRoYW4ga2V5LCBvciBlbmQoKS4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEZpbmRzIHRoZSBlbmQgb2YgYSBzdWJzZXF1ZW5jZSBtYXRjaGluZyBnaXZlbiBrZXkuCisgICAgICAgKiAgQHBhcmFtICB4ICBLZXkgb2YgKGtleSwgdmFsdWUpIHBhaXIgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciBwb2ludGluZyB0byBmaXJzdCBpdGVyYXRvcgorICAgICAgICogICAgICAgICAgIGdyZWF0ZXIgdGhhbiBrZXksIG9yIGVuZCgpLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRmluZHMgYSBzdWJzZXF1ZW5jZSBtYXRjaGluZyBnaXZlbiBrZXkuCisgICAgICAgKiAgQHBhcmFtICB4ICBLZXkgb2YgKGtleSwgdmFsdWUpIHBhaXJzIHRvIGJlIGxvY2F0ZWQuCisgICAgICAgKiAgQHJldHVybiAgUGFpciBvZiBpdGVyYXRvcnMgdGhhdCBwb3NzaWJseSBwb2ludHMgdG8gdGhlIHN1YnNlcXVlbmNlCisgICAgICAgKiAgICAgICAgICAgbWF0Y2hpbmcgZ2l2ZW4ga2V5LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgICAqICBAY29kZQorICAgICAgICogICAgc3RkOjptYWtlX3BhaXIoYy5sb3dlcl9ib3VuZCh2YWwpLAorICAgICAgICogICAgICAgICAgICAgICAgICAgYy51cHBlcl9ib3VuZCh2YWwpKQorICAgICAgICogIEBlbmRjb2RlCisgICAgICAgKiAgKGJ1dCBpcyBmYXN0ZXIgdGhhbiBtYWtpbmcgdGhlIGNhbGxzIHNlcGFyYXRlbHkpLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHByb2JhYmx5IG9ubHkgbWFrZXMgc2Vuc2UgZm9yIG11bHRpbWFwcy4KKyAgICAgICAqLworICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEZpbmRzIGEgc3Vic2VxdWVuY2UgbWF0Y2hpbmcgZ2l2ZW4ga2V5LgorICAgICAgICogIEBwYXJhbSAgeCAgS2V5IG9mIChrZXksIHZhbHVlKSBwYWlycyB0byBiZSBsb2NhdGVkLgorICAgICAgICogIEByZXR1cm4gIFBhaXIgb2YgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3JzIHRoYXQgcG9zc2libHkgcG9pbnRzCisgICAgICAgKiAgICAgICAgICAgdG8gdGhlIHN1YnNlcXVlbmNlIG1hdGNoaW5nIGdpdmVuIGtleS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvCisgICAgICAgKiAgQGNvZGUKKyAgICAgICAqICAgIHN0ZDo6bWFrZV9wYWlyKGMubG93ZXJfYm91bmQodmFsKSwKKyAgICAgICAqICAgICAgICAgICAgICAgICAgIGMudXBwZXJfYm91bmQodmFsKSkKKyAgICAgICAqICBAZW5kY29kZQorICAgICAgICogIChidXQgaXMgZmFzdGVyIHRoYW4gbWFraW5nIHRoZSBjYWxscyBzZXBhcmF0ZWx5KS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBwcm9iYWJseSBvbmx5IG1ha2VzIHNlbnNlIGZvciBtdWx0aW1hcHMuCisgICAgICAgKi8KKyAgICAgIHN0ZDo6cGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9LMSwgdHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfQzEsIHR5cGVuYW1lIF9BMT4KKyAgICAgICAgZnJpZW5kIGJvb2wKKyAgICAgICAgb3BlcmF0b3I9PShjb25zdCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYsCisJCSAgIGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+Jik7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9LMSwgdHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfQzEsIHR5cGVuYW1lIF9BMT4KKyAgICAgICAgZnJpZW5kIGJvb2wKKyAgICAgICAgb3BlcmF0b3I8KGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKKwkJICBjb25zdCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOworICAgIH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgIE1hcCBlcXVhbGl0eSBjb21wYXJpc29uLgorICAgKiAgQHBhcmFtICB4ICBBICVtYXAuCisgICAqICBAcGFyYW0gIHkgIEEgJW1hcCBvZiB0aGUgc2FtZSB0eXBlIGFzIEBhIHguCisgICAqICBAcmV0dXJuICBUcnVlIGlmZiB0aGUgc2l6ZSBhbmQgZWxlbWVudHMgb2YgdGhlIG1hcHMgYXJlIGVxdWFsLgorICAgKgorICAgKiAgVGhpcyBpcyBhbiBlcXVpdmFsZW5jZSByZWxhdGlvbi4gIEl0IGlzIGxpbmVhciBpbiB0aGUgc2l6ZSBvZiB0aGUKKyAgICogIG1hcHMuICBNYXBzIGFyZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQgaWYgdGhlaXIgc2l6ZXMgYXJlIGVxdWFsLAorICAgKiAgYW5kIGlmIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgY29tcGFyZSBlcXVhbC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX194LAorICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBNYXAgb3JkZXJpbmcgcmVsYXRpb24uCisgICAqICBAcGFyYW0gIHggIEEgJW1hcC4KKyAgICogIEBwYXJhbSAgeSAgQSAlbWFwIG9mIHRoZSBzYW1lIHR5cGUgYXMgQGEgeC4KKyAgICogIEByZXR1cm4gIFRydWUgaWZmIEBhIHggaXMgbGV4aWNvZ3JhcGhpY2FsbHkgbGVzcyB0aGFuIEBhIHkuCisgICAqCisgICAqICBUaGlzIGlzIGEgdG90YWwgb3JkZXJpbmcgcmVsYXRpb24uICBJdCBpcyBsaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlCisgICAqICBtYXBzLiAgVGhlIGVsZW1lbnRzIG11c3QgYmUgY29tcGFyYWJsZSB3aXRoIEBjIDwuCisgICAqCisgICAqICBTZWUgc3RkOjpsZXhpY29ncmFwaGljYWxfY29tcGFyZSgpIGZvciBob3cgdGhlIGRldGVybWluYXRpb24gaXMgbWFkZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gsCisgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01fdDsgfQorCisgIC8vLyBCYXNlZCBvbiBvcGVyYXRvcj09CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKyAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQorCisgIC8vLyBCYXNlZCBvbiBvcGVyYXRvcjwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gsCisgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gX195IDwgX194OyB9CisKKyAgLy8vIEJhc2VkIG9uIG9wZXJhdG9yPAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gsCisgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQorCisgIC8vLyBCYXNlZCBvbiBvcGVyYXRvcjwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX194LAorICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KKworICAvLy8gU2VlIHN0ZDo6bWFwOjpzd2FwKCkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAobWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKwkgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworX0dMSUJDWFhfRU5EX05FU1RFRF9OQU1FU1BBQ0UKKworI2VuZGlmIC8qIF9TVExfTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfbXVsdGltYXAuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfbXVsdGltYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTU3NWJjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF9tdWx0aW1hcC5oCkBAIC0wLDAgKzEsODI2IEBACisvLyBNdWx0aW1hcCBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBzdGxfbXVsdGltYXAuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWZuZGVmIF9TVExfTVVMVElNQVBfSAorI2RlZmluZSBfU1RMX01VTFRJTUFQX0ggMQorCisjaW5jbHVkZSA8Yml0cy9jb25jZXB0X2NoZWNrLmg+CisjaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KKworX0dMSUJDWFhfQkVHSU5fTkVTVEVEX05BTUVTUEFDRShzdGQsIF9HTElCQ1hYX1NURF9EKQorCisgIC8qKgorICAgKiAgQGJyaWVmIEEgc3RhbmRhcmQgY29udGFpbmVyIG1hZGUgdXAgb2YgKGtleSx2YWx1ZSkgcGFpcnMsIHdoaWNoIGNhbiBiZQorICAgKiAgcmV0cmlldmVkIGJhc2VkIG9uIGEga2V5LCBpbiBsb2dhcml0aG1pYyB0aW1lLgorICAgKgorICAgKiAgQGluZ3JvdXAgYXNzb2NpYXRpdmVfY29udGFpbmVycworICAgKgorICAgKiAgTWVldHMgdGhlIHJlcXVpcmVtZW50cyBvZiBhIDxhIGhyZWY9InRhYmxlcy5odG1sIzY1Ij5jb250YWluZXI8L2E+LCBhCisgICAqICA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2NiI+cmV2ZXJzaWJsZSBjb250YWluZXI8L2E+LCBhbmQgYW4KKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sIzY5Ij5hc3NvY2lhdGl2ZSBjb250YWluZXI8L2E+ICh1c2luZyBlcXVpdmFsZW50CisgICAqICBrZXlzKS4gIEZvciBhIEBjIG11bHRpbWFwPEtleSxUPiB0aGUga2V5X3R5cGUgaXMgS2V5LCB0aGUgbWFwcGVkX3R5cGUKKyAgICogIGlzIFQsIGFuZCB0aGUgdmFsdWVfdHlwZSBpcyBzdGQ6OnBhaXI8Y29uc3QgS2V5LFQ+LgorICAgKgorICAgKiAgTXVsdGltYXBzIHN1cHBvcnQgYmlkaXJlY3Rpb25hbCBpdGVyYXRvcnMuCisgICAqCisgICAqICBUaGUgcHJpdmF0ZSB0cmVlIGRhdGEgaXMgZGVjbGFyZWQgZXhhY3RseSB0aGUgc2FtZSB3YXkgZm9yIG1hcCBhbmQKKyAgICogIG11bHRpbWFwOyB0aGUgZGlzdGluY3Rpb24gaXMgbWFkZSBlbnRpcmVseSBpbiBob3cgdGhlIHRyZWUgZnVuY3Rpb25zIGFyZQorICAgKiAgY2FsbGVkICgqX3VuaXF1ZSB2ZXJzdXMgKl9lcXVhbCwgc2FtZSBhcyB0aGUgc3RhbmRhcmQpLgorICAqLworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLAorCSAgICB0eXBlbmFtZSBfQ29tcGFyZSA9IHN0ZDo6bGVzczxfS2V5PiwKKwkgICAgdHlwZW5hbWUgX0FsbG9jID0gc3RkOjphbGxvY2F0b3I8c3RkOjpwYWlyPGNvbnN0IF9LZXksIF9UcD4gPiA+CisgICAgY2xhc3MgbXVsdGltYXAKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfS2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X3R5cGU7CisgICAgICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWRfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpwYWlyPGNvbnN0IF9LZXksIF9UcD4gICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9Db21wYXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfY29tcGFyZTsKKyAgICAgIHR5cGVkZWYgX0FsbG9jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRvcl90eXBlOworCisgICAgcHJpdmF0ZToKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dmFsdWVfdHlwZSAgICAgICAgICAgICAgICAgICBfQWxsb2NfdmFsdWVfdHlwZTsKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlcyhfVHAsIF9TR0lBc3NpZ25hYmxlQ29uY2VwdCkKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlczQoX0NvbXBhcmUsIGJvb2wsIF9LZXksIF9LZXksCisJCQkJX0JpbmFyeUZ1bmN0aW9uQ29uY2VwdCkKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlczIodmFsdWVfdHlwZSwgX0FsbG9jX3ZhbHVlX3R5cGUsIF9TYW1lVHlwZUNvbmNlcHQpCQorCisgICAgcHVibGljOgorICAgICAgY2xhc3MgdmFsdWVfY29tcGFyZQorICAgICAgOiBwdWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rpb248dmFsdWVfdHlwZSwgdmFsdWVfdHlwZSwgYm9vbD4KKyAgICAgIHsKKwlmcmllbmQgY2xhc3MgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPjsKKyAgICAgIHByb3RlY3RlZDoKKwlfQ29tcGFyZSBjb21wOworCisJdmFsdWVfY29tcGFyZShfQ29tcGFyZSBfX2MpCisJOiBjb21wKF9fYykgeyB9CisKKyAgICAgIHB1YmxpYzoKKwlib29sIG9wZXJhdG9yKCkoY29uc3QgdmFsdWVfdHlwZSYgX194LCBjb25zdCB2YWx1ZV90eXBlJiBfX3kpIGNvbnN0CisJeyByZXR1cm4gY29tcChfX3guZmlyc3QsIF9feS5maXJzdCk7IH0KKyAgICAgIH07CisKKyAgICBwcml2YXRlOgorICAgICAgLy8vIFRoaXMgdHVybnMgYSByZWQtYmxhY2sgdHJlZSBpbnRvIGEgW211bHRpXW1hcC4KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8dmFsdWVfdHlwZT46Om90aGVyIAorICAgICAgICBfUGFpcl9hbGxvY190eXBlOworCisgICAgICB0eXBlZGVmIF9SYl90cmVlPGtleV90eXBlLCB2YWx1ZV90eXBlLCBfU2VsZWN0MXN0PHZhbHVlX3R5cGU+LAorCQkgICAgICAga2V5X2NvbXBhcmUsIF9QYWlyX2FsbG9jX3R5cGU+IF9SZXBfdHlwZTsKKyAgICAgIC8vLyBUaGUgYWN0dWFsIHRyZWUgc3RydWN0dXJlLgorICAgICAgX1JlcF90eXBlIF9NX3Q7CisKKyAgICBwdWJsaWM6CisgICAgICAvLyBtYW55IG9mIHRoZXNlIGFyZSBzcGVjaWZpZWQgZGlmZmVyZW50bHkgaW4gSVNPLCBidXQgdGhlIGZvbGxvd2luZyBhcmUKKyAgICAgIC8vICJmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCIKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1BhaXJfYWxsb2NfdHlwZTo6cG9pbnRlciAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9QYWlyX2FsbG9jX3R5cGU6OmNvbnN0X3BvaW50ZXIgICBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUGFpcl9hbGxvY190eXBlOjpyZWZlcmVuY2UgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUGFpcl9hbGxvY190eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yICAgICAgICAgICAgICAgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgICAgICAgICBjb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5cGUgICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZXZlcnNlX2l0ZXJhdG9yICAgICAgIHJldmVyc2VfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworCisgICAgICAvLyBbMjMuMy4yXSBjb25zdHJ1Y3QvY29weS9kZXN0cm95CisgICAgICAvLyAoZ2V0X2FsbG9jYXRvcigpIGlzIGFsc28gbGlzdGVkIGluIHRoaXMgc2VjdGlvbikKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRGVmYXVsdCBjb25zdHJ1Y3RvciBjcmVhdGVzIG5vIGVsZW1lbnRzLgorICAgICAgICovCisgICAgICBtdWx0aW1hcCgpCisgICAgICA6IF9NX3QoKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDcmVhdGVzIGEgJW11bHRpbWFwIHdpdGggbm8gZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBjb21wICBBIGNvbXBhcmlzb24gb2JqZWN0LgorICAgICAgICogIEBwYXJhbSAgYSAgQW4gYWxsb2NhdG9yIG9iamVjdC4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIG11bHRpbWFwKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCisJICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfTV90KF9fY29tcCwgX19hKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlTXVsdGltYXAgY29weSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqICBAcGFyYW0gIHggIEEgJW11bHRpbWFwIG9mIGlkZW50aWNhbCBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoZSBuZXdseS1jcmVhdGVkICVtdWx0aW1hcCB1c2VzIGEgY29weSBvZiB0aGUgYWxsb2NhdGlvbiBvYmplY3QKKyAgICAgICAqICB1c2VkIGJ5IEBhIHguCisgICAgICAgKi8KKyAgICAgIG11bHRpbWFwKGNvbnN0IG11bHRpbWFwJiBfX3gpCisgICAgICA6IF9NX3QoX194Ll9NX3QpIHsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJU11bHRpbWFwIG1vdmUgY29uc3RydWN0b3IuCisgICAgICAgKiAgQHBhcmFtICAgeCAgQSAlbXVsdGltYXAgb2YgaWRlbnRpY2FsIGVsZW1lbnQgYW5kIGFsbG9jYXRvciB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIG5ld2x5LWNyZWF0ZWQgJW11bHRpbWFwIGNvbnRhaW5zIHRoZSBleGFjdCBjb250ZW50cyBvZiBAYSB4LgorICAgICAgICogIFRoZSBjb250ZW50cyBvZiBAYSB4IGFyZSBhIHZhbGlkLCBidXQgdW5zcGVjaWZpZWQgJW11bHRpbWFwLgorICAgICAgICovCisgICAgICBtdWx0aW1hcChtdWx0aW1hcCYmIF9feCkKKyAgICAgIDogX01fdChzdGQ6OmZvcndhcmQ8X1JlcF90eXBlPihfX3guX01fdCkpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEJ1aWxkcyBhICVtdWx0aW1hcCBmcm9tIGFuIGluaXRpYWxpemVyX2xpc3QuCisgICAgICAgKiAgQHBhcmFtICBsICBBbiBpbml0aWFsaXplcl9saXN0LgorICAgICAgICogIEBwYXJhbSAgY29tcCAgQSBjb21wYXJpc29uIGZ1bmN0b3IuCisgICAgICAgKiAgQHBhcmFtICBhICBBbiBhbGxvY2F0b3Igb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqICBDcmVhdGUgYSAlbXVsdGltYXAgY29uc2lzdGluZyBvZiBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGZyb20KKyAgICAgICAqICB0aGUgaW5pdGlhbGl6ZXJfbGlzdC4gIFRoaXMgaXMgbGluZWFyIGluIE4gaWYgdGhlIGxpc3QgaXMgYWxyZWFkeQorICAgICAgICogIHNvcnRlZCwgYW5kIE5sb2dOIG90aGVyd2lzZSAod2hlcmUgTiBpcyBAYSBfX2wuc2l6ZSgpKS4KKyAgICAgICAqLworICAgICAgbXVsdGltYXAoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJICAgICAgIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAgPSBfQ29tcGFyZSgpLAorCSAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX01fdChfX2NvbXAsIF9fYSkKKyAgICAgIHsgX01fdC5fTV9pbnNlcnRfZXF1YWwoX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEJ1aWxkcyBhICVtdWx0aW1hcCBmcm9tIGEgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtICBmaXJzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBsYXN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqCisgICAgICAgKiAgQ3JlYXRlIGEgJW11bHRpbWFwIGNvbnNpc3Rpbmcgb2YgY29waWVzIG9mIHRoZSBlbGVtZW50cyBmcm9tCisgICAgICAgKiAgW2ZpcnN0LGxhc3QpLiAgVGhpcyBpcyBsaW5lYXIgaW4gTiBpZiB0aGUgcmFuZ2UgaXMgYWxyZWFkeSBzb3J0ZWQsCisgICAgICAgKiAgYW5kIE5sb2dOIG90aGVyd2lzZSAod2hlcmUgTiBpcyBkaXN0YW5jZShmaXJzdCxsYXN0KSkuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBtdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisJOiBfTV90KCkKKyAgICAgICAgeyBfTV90Ll9NX2luc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQnVpbGRzIGEgJW11bHRpbWFwIGZyb20gYSByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gIGZpcnN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIGxhc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgY29tcCAgQSBjb21wYXJpc29uIGZ1bmN0b3IuCisgICAgICAgKiAgQHBhcmFtICBhICBBbiBhbGxvY2F0b3Igb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqICBDcmVhdGUgYSAlbXVsdGltYXAgY29uc2lzdGluZyBvZiBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGZyb20KKyAgICAgICAqICBbZmlyc3QsbGFzdCkuICBUaGlzIGlzIGxpbmVhciBpbiBOIGlmIHRoZSByYW5nZSBpcyBhbHJlYWR5IHNvcnRlZCwKKyAgICAgICAqICBhbmQgTmxvZ04gb3RoZXJ3aXNlICh3aGVyZSBOIGlzIGRpc3RhbmNlKGZpcnN0LGxhc3QpKS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIG11bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCisJCSBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgICAgOiBfTV90KF9fY29tcCwgX19hKQorICAgICAgICB7IF9NX3QuX01faW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7IH0KKworICAgICAgLy8gRklYTUUgVGhlcmUgaXMgbm8gZHRvciBkZWNsYXJlZCwgYnV0IHdlIHNob3VsZCBoYXZlIHNvbWV0aGluZyBnZW5lcmF0ZWQKKyAgICAgIC8vIGJ5IERveHlnZW4uICBJIGRvbid0IGtub3cgd2hhdCB0YWdzIHRvIGFkZCB0byB0aGlzIHBhcmFncmFwaCB0byBtYWtlCisgICAgICAvLyB0aGF0IGhhcHBlbjoKKyAgICAgIC8qKgorICAgICAgICogIFRoZSBkdG9yIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50cywgYW5kIG5vdGUgdGhhdCBpZiB0aGUgZWxlbWVudHMKKyAgICAgICAqICB0aGVtc2VsdmVzIGFyZSBwb2ludGVycywgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkIGluIGFueQorICAgICAgICogIHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlTXVsdGltYXAgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIHggIEEgJW11bHRpbWFwIG9mIGlkZW50aWNhbCBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIEFsbCB0aGUgZWxlbWVudHMgb2YgQGEgeCBhcmUgY29waWVkLCBidXQgdW5saWtlIHRoZSBjb3B5IGNvbnN0cnVjdG9yLAorICAgICAgICogIHRoZSBhbGxvY2F0b3Igb2JqZWN0IGlzIG5vdCBjb3BpZWQuCisgICAgICAgKi8KKyAgICAgIG11bHRpbWFwJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IG11bHRpbWFwJiBfX3gpCisgICAgICB7CisJX01fdCA9IF9feC5fTV90OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgICVNdWx0aW1hcCBtb3ZlIGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICB4ICBBICVtdWx0aW1hcCBvZiBpZGVudGljYWwgZWxlbWVudCBhbmQgYWxsb2NhdG9yIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBUaGUgY29udGVudHMgb2YgQGEgeCBhcmUgbW92ZWQgaW50byB0aGlzIG11bHRpbWFwICh3aXRob3V0IGNvcHlpbmcpLgorICAgICAgICogIEBhIHggaXMgYSB2YWxpZCwgYnV0IHVuc3BlY2lmaWVkIG11bHRpbWFwLgorICAgICAgICovCisgICAgICBtdWx0aW1hcCYKKyAgICAgIG9wZXJhdG9yPShtdWx0aW1hcCYmIF9feCkKKyAgICAgIHsKKwkvLyBOQjogRFIgMTIwNC4KKwkvLyBOQjogRFIgNjc1LgorCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+c3dhcChfX3gpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlTXVsdGltYXAgbGlzdCBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgbCAgQW4gaW5pdGlhbGl6ZXJfbGlzdC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBmaWxscyBhICVtdWx0aW1hcCB3aXRoIGNvcGllcyBvZiB0aGUgZWxlbWVudHMKKyAgICAgICAqICBpbiB0aGUgaW5pdGlhbGl6ZXIgbGlzdCBAYSBsLgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgdGhlIGFzc2lnbm1lbnQgY29tcGxldGVseSBjaGFuZ2VzIHRoZSAlbXVsdGltYXAgYW5kCisgICAgICAgKiAgdGhhdCB0aGUgcmVzdWx0aW5nICVtdWx0aW1hcCdzIHNpemUgaXMgdGhlIHNhbWUgYXMgdGhlIG51bWJlcgorICAgICAgICogIG9mIGVsZW1lbnRzIGFzc2lnbmVkLiAgT2xkIGRhdGEgbWF5IGJlIGxvc3QuCisgICAgICAgKi8KKyAgICAgIG11bHRpbWFwJgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+aW5zZXJ0KF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICAvLy8gR2V0IGEgY29weSBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gb2JqZWN0LgorICAgICAgYWxsb2NhdG9yX3R5cGUKKyAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0KKworICAgICAgLy8gaXRlcmF0b3JzCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgZmlyc3QgcGFpciBpbiB0aGUKKyAgICAgICAqICAlbXVsdGltYXAuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBhc2NlbmRpbmcgb3JkZXIgYWNjb3JkaW5nIHRvIHRoZQorICAgICAgICogIGtleXMuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpCisgICAgICB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBmaXJzdCBwYWlyCisgICAgICAgKiAgaW4gdGhlICVtdWx0aW1hcC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIGFzY2VuZGluZyBvcmRlciBhY2NvcmRpbmcgdG8KKyAgICAgICAqICB0aGUga2V5cy4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSBpdGVyYXRvciB0aGF0IHBvaW50cyBvbmUgcGFzdCB0aGUgbGFzdCBwYWlyIGluCisgICAgICAgKiAgdGhlICVtdWx0aW1hcC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIGFzY2VuZGluZyBvcmRlciBhY2NvcmRpbmcgdG8gdGhlCisgICAgICAgKiAga2V5cy4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpCisgICAgICB7IHJldHVybiBfTV90LmVuZCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyBvbmUgcGFzdCB0aGUgbGFzdAorICAgICAgICogIHBhaXIgaW4gdGhlICVtdWx0aW1hcC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIGFzY2VuZGluZyBvcmRlciBhY2NvcmRpbmcKKyAgICAgICAqICB0byB0aGUga2V5cy4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LmVuZCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGxhc3QgcGFpciBpbgorICAgICAgICogIHRoZSAlbXVsdGltYXAuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBkZXNjZW5kaW5nIG9yZGVyIGFjY29yZGluZyB0byB0aGUKKyAgICAgICAqICBrZXlzLgorICAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKQorICAgICAgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUKKyAgICAgICAqICBsYXN0IHBhaXIgaW4gdGhlICVtdWx0aW1hcC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIGRlc2NlbmRpbmcgb3JkZXIKKyAgICAgICAqICBhY2NvcmRpbmcgdG8gdGhlIGtleXMuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gb25lIGJlZm9yZSB0aGUKKyAgICAgICAqICBmaXJzdCBwYWlyIGluIHRoZSAlbXVsdGltYXAuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBkZXNjZW5kaW5nIG9yZGVyCisgICAgICAgKiAgYWNjb3JkaW5nIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkKKyAgICAgIHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIG9uZQorICAgICAgICogIGJlZm9yZSB0aGUgZmlyc3QgcGFpciBpbiB0aGUgJW11bHRpbWFwLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4KKyAgICAgICAqICBkZXNjZW5kaW5nIG9yZGVyIGFjY29yZGluZyB0byB0aGUga2V5cy4KKyAgICAgICAqLworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LnJlbmQoKTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgZmlyc3QgcGFpcgorICAgICAgICogIGluIHRoZSAlbXVsdGltYXAuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBhc2NlbmRpbmcgb3JkZXIgYWNjb3JkaW5nIHRvCisgICAgICAgKiAgdGhlIGtleXMuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyBvbmUgcGFzdCB0aGUgbGFzdAorICAgICAgICogIHBhaXIgaW4gdGhlICVtdWx0aW1hcC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIGFzY2VuZGluZyBvcmRlciBhY2NvcmRpbmcKKyAgICAgICAqICB0byB0aGUga2V5cy4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5lbmQoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUKKyAgICAgICAqICBsYXN0IHBhaXIgaW4gdGhlICVtdWx0aW1hcC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIGRlc2NlbmRpbmcgb3JkZXIKKyAgICAgICAqICBhY2NvcmRpbmcgdG8gdGhlIGtleXMuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byBvbmUKKyAgICAgICAqICBiZWZvcmUgdGhlIGZpcnN0IHBhaXIgaW4gdGhlICVtdWx0aW1hcC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluCisgICAgICAgKiAgZGVzY2VuZGluZyBvcmRlciBhY2NvcmRpbmcgdG8gdGhlIGtleXMuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CisjZW5kaWYKKworICAgICAgLy8gY2FwYWNpdHkKKyAgICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlICVtdWx0aW1hcCBpcyBlbXB0eS4gICovCisgICAgICBib29sCisgICAgICBlbXB0eSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LmVtcHR5KCk7IH0KKworICAgICAgLyoqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlICVtdWx0aW1hcC4gICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIHNpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5zaXplKCk7IH0KKworICAgICAgLyoqIFJldHVybnMgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgJW11bHRpbWFwLiAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5tYXhfc2l6ZSgpOyB9CisKKyAgICAgIC8vIG1vZGlmaWVycworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEluc2VydHMgYSBzdGQ6OnBhaXIgaW50byB0aGUgJW11bHRpbWFwLgorICAgICAgICogIEBwYXJhbSAgeCAgUGFpciB0byBiZSBpbnNlcnRlZCAoc2VlIHN0ZDo6bWFrZV9wYWlyIGZvciBlYXN5IGNyZWF0aW9uCisgICAgICAgKiAgICAgICAgICAgICBvZiBwYWlycykuCisgICAgICAgKiAgQHJldHVybiBBbiBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgaW5zZXJ0ZWQgKGtleSx2YWx1ZSkgcGFpci4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBpbnNlcnRzIGEgKGtleSwgdmFsdWUpIHBhaXIgaW50byB0aGUgJW11bHRpbWFwLgorICAgICAgICogIENvbnRyYXJ5IHRvIGEgc3RkOjptYXAgdGhlICVtdWx0aW1hcCBkb2VzIG5vdCByZWx5IG9uIHVuaXF1ZSBrZXlzIGFuZAorICAgICAgICogIHRodXMgbXVsdGlwbGUgcGFpcnMgd2l0aCB0aGUgc2FtZSBrZXkgY2FuIGJlIGluc2VydGVkLgorICAgICAgICoKKyAgICAgICAqICBJbnNlcnRpb24gcmVxdWlyZXMgbG9nYXJpdGhtaWMgdGltZS4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV90Ll9NX2luc2VydF9lcXVhbChfX3gpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBJbnNlcnRzIGEgc3RkOjpwYWlyIGludG8gdGhlICVtdWx0aW1hcC4KKyAgICAgICAqICBAcGFyYW0gIHBvc2l0aW9uICBBbiBpdGVyYXRvciB0aGF0IHNlcnZlcyBhcyBhIGhpbnQgYXMgdG8gd2hlcmUgdGhlCisgICAgICAgKiAgICAgICAgICAgICAgICAgICAgcGFpciBzaG91bGQgYmUgaW5zZXJ0ZWQuCisgICAgICAgKiAgQHBhcmFtICB4ICBQYWlyIHRvIGJlIGluc2VydGVkIChzZWUgc3RkOjptYWtlX3BhaXIgZm9yIGVhc3kgY3JlYXRpb24KKyAgICAgICAqICAgICAgICAgICAgIG9mIHBhaXJzKS4KKyAgICAgICAqICBAcmV0dXJuIEFuIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBpbnNlcnRlZCAoa2V5LHZhbHVlKSBwYWlyLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGluc2VydHMgYSAoa2V5LCB2YWx1ZSkgcGFpciBpbnRvIHRoZSAlbXVsdGltYXAuCisgICAgICAgKiAgQ29udHJhcnkgdG8gYSBzdGQ6Om1hcCB0aGUgJW11bHRpbWFwIGRvZXMgbm90IHJlbHkgb24gdW5pcXVlIGtleXMgYW5kCisgICAgICAgKiAgdGh1cyBtdWx0aXBsZSBwYWlycyB3aXRoIHRoZSBzYW1lIGtleSBjYW4gYmUgaW5zZXJ0ZWQuCisgICAgICAgKiAgTm90ZSB0aGF0IHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgb25seSBhIGhpbnQgYW5kIGNhbiBwb3RlbnRpYWxseQorICAgICAgICogIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBpbnNlcnRpb24gcHJvY2Vzcy4gIEEgYmFkIGhpbnQgd291bGQKKyAgICAgICAqICBjYXVzZSBubyBnYWlucyBpbiBlZmZpY2llbmN5LgorICAgICAgICoKKyAgICAgICAqICBGb3IgbW9yZSBvbiBAYSBoaW50aW5nLCBzZWU6CisgICAgICAgKiAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL21hbnVhbC9iazAxcHQwN2NoMTcuaHRtbAorICAgICAgICoKKyAgICAgICAqICBJbnNlcnRpb24gcmVxdWlyZXMgbG9nYXJpdGhtaWMgdGltZSAoaWYgdGhlIGhpbnQgaXMgbm90IHRha2VuKS4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV90Ll9NX2luc2VydF9lcXVhbF8oX19wb3NpdGlvbiwgX194KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgQSB0ZW1wbGF0ZSBmdW5jdGlvbiB0aGF0IGF0dGVtcHRzIHRvIGluc2VydCBhIHJhbmdlCisgICAgICAgKiAgb2YgZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBmaXJzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSB0byBiZQorICAgICAgICogICAgICAgICAgICAgICAgIGluc2VydGVkLgorICAgICAgICogIEBwYXJhbSAgbGFzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgcmFuZ2UuCisgICAgICAgKgorICAgICAgICogIENvbXBsZXhpdHkgc2ltaWxhciB0byB0aGF0IG9mIHRoZSByYW5nZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeyBfTV90Ll9NX2luc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEF0dGVtcHRzIHRvIGluc2VydCBhIGxpc3Qgb2Ygc3RkOjpwYWlycyBpbnRvIHRoZSAlbXVsdGltYXAuCisgICAgICAgKiAgQHBhcmFtICBsaXN0ICBBIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBvZiBwYWlycyB0byBiZQorICAgICAgICogICAgICAgICAgICAgICAgaW5zZXJ0ZWQuCisgICAgICAgKgorICAgICAgICogIENvbXBsZXhpdHkgc2ltaWxhciB0byB0aGF0IG9mIHRoZSByYW5nZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeyB0aGlzLT5pbnNlcnQoX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7IH0KKyNlbmRpZgorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSIDEzMC4gQXNzb2NpYXRpdmUgZXJhc2Ugc2hvdWxkIHJldHVybiBhbiBpdGVyYXRvci4KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBFcmFzZXMgYW4gZWxlbWVudCBmcm9tIGEgJW11bHRpbWFwLgorICAgICAgICogIEBwYXJhbSAgcG9zaXRpb24gIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbGVtZW50IHRvIGJlIGVyYXNlZC4KKyAgICAgICAqICBAcmV0dXJuIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbGVtZW50IGltbWVkaWF0ZWx5IGZvbGxvd2luZworICAgICAgICogICAgICAgICAgQGEgcG9zaXRpb24gcHJpb3IgdG8gdGhlIGVsZW1lbnQgYmVpbmcgZXJhc2VkLiBJZiBubyBzdWNoIAorICAgICAgICogICAgICAgICAgZWxlbWVudCBleGlzdHMsIGVuZCgpIGlzIHJldHVybmVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGVyYXNlcyBhbiBlbGVtZW50LCBwb2ludGVkIHRvIGJ5IHRoZSBnaXZlbiBpdGVyYXRvciwKKyAgICAgICAqICBmcm9tIGEgJW11bHRpbWFwLiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gb25seSBlcmFzZXMgdGhlIGVsZW1lbnQsCisgICAgICAgKiAgYW5kIHRoYXQgaWYgdGhlIGVsZW1lbnQgaXMgaXRzZWxmIGEgcG9pbnRlciwgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzCisgICAgICAgKiAgbm90IHRvdWNoZWQgaW4gYW55IHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MKKyAgICAgICAqICByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7IHJldHVybiBfTV90LmVyYXNlKF9fcG9zaXRpb24pOyB9CisjZWxzZQorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEVyYXNlcyBhbiBlbGVtZW50IGZyb20gYSAlbXVsdGltYXAuCisgICAgICAgKiAgQHBhcmFtICBwb3NpdGlvbiAgQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVsZW1lbnQgdG8gYmUgZXJhc2VkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGVyYXNlcyBhbiBlbGVtZW50LCBwb2ludGVkIHRvIGJ5IHRoZSBnaXZlbiBpdGVyYXRvciwKKyAgICAgICAqICBmcm9tIGEgJW11bHRpbWFwLiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gb25seSBlcmFzZXMgdGhlIGVsZW1lbnQsCisgICAgICAgKiAgYW5kIHRoYXQgaWYgdGhlIGVsZW1lbnQgaXMgaXRzZWxmIGEgcG9pbnRlciwgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzCisgICAgICAgKiAgbm90IHRvdWNoZWQgaW4gYW55IHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MKKyAgICAgICAqICByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICAgIHsgX01fdC5lcmFzZShfX3Bvc2l0aW9uKTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBFcmFzZXMgZWxlbWVudHMgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBrZXkuCisgICAgICAgKiAgQHBhcmFtICB4ICBLZXkgb2YgZWxlbWVudCB0byBiZSBlcmFzZWQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIG51bWJlciBvZiBlbGVtZW50cyBlcmFzZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZXJhc2VzIGFsbCBlbGVtZW50cyBsb2NhdGVkIGJ5IHRoZSBnaXZlbiBrZXkgZnJvbSBhCisgICAgICAgKiAgJW11bHRpbWFwLgorICAgICAgICogIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50LCBhbmQgdGhhdCBpZgorICAgICAgICogIHRoZSBlbGVtZW50IGlzIGl0c2VsZiBhIHBvaW50ZXIsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZAorICAgICAgICogIGluIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV90LmVyYXNlKF9feCk7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUiAxMzAuIEFzc29jaWF0aXZlIGVyYXNlIHNob3VsZCByZXR1cm4gYW4gaXRlcmF0b3IuCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRXJhc2VzIGEgW2ZpcnN0LGxhc3QpIHJhbmdlIG9mIGVsZW1lbnRzIGZyb20gYSAlbXVsdGltYXAuCisgICAgICAgKiAgQHBhcmFtICBmaXJzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSB0byBiZQorICAgICAgICogICAgICAgICAgICAgICAgIGVyYXNlZC4KKyAgICAgICAqICBAcGFyYW0gIGxhc3QgIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbmQgb2YgdGhlIHJhbmdlIHRvIGJlIGVyYXNlZC4KKyAgICAgICAqICBAcmV0dXJuIFRoZSBpdGVyYXRvciBAYSBsYXN0LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGVyYXNlcyBhIHNlcXVlbmNlIG9mIGVsZW1lbnRzIGZyb20gYSAlbXVsdGltYXAuCisgICAgICAgKiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gb25seSBlcmFzZXMgdGhlIGVsZW1lbnRzLCBhbmQgdGhhdCBpZgorICAgICAgICogIHRoZSBlbGVtZW50cyB0aGVtc2VsdmVzIGFyZSBwb2ludGVycywgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdAorICAgICAgICogIHRvdWNoZWQgaW4gYW55IHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCisgICAgICB7IHJldHVybiBfTV90LmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KKyNlbHNlCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUiAxMzAuIEFzc29jaWF0aXZlIGVyYXNlIHNob3VsZCByZXR1cm4gYW4gaXRlcmF0b3IuCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRXJhc2VzIGEgW2ZpcnN0LGxhc3QpIHJhbmdlIG9mIGVsZW1lbnRzIGZyb20gYSAlbXVsdGltYXAuCisgICAgICAgKiAgQHBhcmFtICBmaXJzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSB0byBiZQorICAgICAgICogICAgICAgICAgICAgICAgIGVyYXNlZC4KKyAgICAgICAqICBAcGFyYW0gIGxhc3QgIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbmQgb2YgdGhlIHJhbmdlIHRvIGJlIGVyYXNlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBlcmFzZXMgYSBzZXF1ZW5jZSBvZiBlbGVtZW50cyBmcm9tIGEgJW11bHRpbWFwLgorICAgICAgICogIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50cywgYW5kIHRoYXQgaWYKKyAgICAgICAqICB0aGUgZWxlbWVudHMgdGhlbXNlbHZlcyBhcmUgcG9pbnRlcnMsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QKKyAgICAgICAqICB0b3VjaGVkIGluIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCisgICAgICB7IF9NX3QuZXJhc2UoX19maXJzdCwgX19sYXN0KTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU3dhcHMgZGF0YSB3aXRoIGFub3RoZXIgJW11bHRpbWFwLgorICAgICAgICogIEBwYXJhbSAgeCAgQSAlbXVsdGltYXAgb2YgdGhlIHNhbWUgZWxlbWVudCBhbmQgYWxsb2NhdG9yIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGV4Y2hhbmdlcyB0aGUgZWxlbWVudHMgYmV0d2VlbiB0d28gbXVsdGltYXBzIGluIGNvbnN0YW50IHRpbWUuCisgICAgICAgKiAgKEl0IGlzIG9ubHkgc3dhcHBpbmcgYSBwb2ludGVyLCBhbiBpbnRlZ2VyLCBhbmQgYW4gaW5zdGFuY2Ugb2YKKyAgICAgICAqICB0aGUgQGMgQ29tcGFyZSB0eXBlICh3aGljaCBpdHNlbGYgaXMgb2Z0ZW4gc3RhdGVsZXNzIGFuZCBlbXB0eSksIHNvIGl0CisgICAgICAgKiAgc2hvdWxkIGJlIHF1aXRlIGZhc3QuKQorICAgICAgICogIE5vdGUgdGhhdCB0aGUgZ2xvYmFsIHN0ZDo6c3dhcCgpIGZ1bmN0aW9uIGlzIHNwZWNpYWxpemVkIHN1Y2ggdGhhdAorICAgICAgICogIHN0ZDo6c3dhcChtMSxtMikgd2lsbCBmZWVkIHRvIHRoaXMgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHN3YXAobXVsdGltYXAmIF9feCkKKyAgICAgIHsgX01fdC5zd2FwKF9feC5fTV90KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBFcmFzZXMgYWxsIGVsZW1lbnRzIGluIGEgJW11bHRpbWFwLiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gb25seQorICAgICAgICogIGVyYXNlcyB0aGUgZWxlbWVudHMsIGFuZCB0aGF0IGlmIHRoZSBlbGVtZW50cyB0aGVtc2VsdmVzIGFyZSBwb2ludGVycywKKyAgICAgICAqICB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQgaW4gYW55IHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyCisgICAgICAgKiAgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgY2xlYXIoKQorICAgICAgeyBfTV90LmNsZWFyKCk7IH0KKworICAgICAgLy8gb2JzZXJ2ZXJzCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIHRoZSBrZXkgY29tcGFyaXNvbiBvYmplY3Qgb3V0IG9mIHdoaWNoIHRoZSAlbXVsdGltYXAKKyAgICAgICAqICB3YXMgY29uc3RydWN0ZWQuCisgICAgICAgKi8KKyAgICAgIGtleV9jb21wYXJlCisgICAgICBrZXlfY29tcCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHZhbHVlIGNvbXBhcmlzb24gb2JqZWN0LCBidWlsdCBmcm9tIHRoZSBrZXkgY29tcGFyaXNvbgorICAgICAgICogIG9iamVjdCBvdXQgb2Ygd2hpY2ggdGhlICVtdWx0aW1hcCB3YXMgY29uc3RydWN0ZWQuCisgICAgICAgKi8KKyAgICAgIHZhbHVlX2NvbXBhcmUKKyAgICAgIHZhbHVlX2NvbXAoKSBjb25zdAorICAgICAgeyByZXR1cm4gdmFsdWVfY29tcGFyZShfTV90LmtleV9jb21wKCkpOyB9CisKKyAgICAgIC8vIG11bHRpbWFwIG9wZXJhdGlvbnMKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBUcmllcyB0byBsb2NhdGUgYW4gZWxlbWVudCBpbiBhICVtdWx0aW1hcC4KKyAgICAgICAqICBAcGFyYW0gIHggIEtleSBvZiAoa2V5LCB2YWx1ZSkgcGFpciB0byBiZSBsb2NhdGVkLgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHNvdWdodC1hZnRlciBlbGVtZW50LAorICAgICAgICogICAgICAgICAgIG9yIGVuZCgpIGlmIG5vdCBmb3VuZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIGtleSBhbmQgdHJpZXMgdG8gbG9jYXRlIHRoZSBlbGVtZW50IHdpdGggd2hpY2gKKyAgICAgICAqICB0aGUga2V5IG1hdGNoZXMuICBJZiBzdWNjZXNzZnVsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGl0ZXJhdG9yCisgICAgICAgKiAgcG9pbnRpbmcgdG8gdGhlIHNvdWdodCBhZnRlciAlcGFpci4gIElmIHVuc3VjY2Vzc2Z1bCBpdCByZXR1cm5zIHRoZQorICAgICAgICogIHBhc3QtdGhlLWVuZCAoIEBjIGVuZCgpICkgaXRlcmF0b3IuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgVHJpZXMgdG8gbG9jYXRlIGFuIGVsZW1lbnQgaW4gYSAlbXVsdGltYXAuCisgICAgICAgKiAgQHBhcmFtICB4ICBLZXkgb2YgKGtleSwgdmFsdWUpIHBhaXIgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciBwb2ludGluZyB0byBzb3VnaHQtYWZ0ZXIKKyAgICAgICAqICAgICAgICAgICBlbGVtZW50LCBvciBlbmQoKSBpZiBub3QgZm91bmQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBrZXkgYW5kIHRyaWVzIHRvIGxvY2F0ZSB0aGUgZWxlbWVudCB3aXRoIHdoaWNoCisgICAgICAgKiAgdGhlIGtleSBtYXRjaGVzLiAgSWYgc3VjY2Vzc2Z1bCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGNvbnN0YW50CisgICAgICAgKiAgaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIHNvdWdodCBhZnRlciAlcGFpci4gIElmIHVuc3VjY2Vzc2Z1bCBpdAorICAgICAgICogIHJldHVybnMgdGhlIHBhc3QtdGhlLWVuZCAoIEBjIGVuZCgpICkgaXRlcmF0b3IuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRmluZHMgdGhlIG51bWJlciBvZiBlbGVtZW50cyB3aXRoIGdpdmVuIGtleS4KKyAgICAgICAqICBAcGFyYW0gIHggIEtleSBvZiAoa2V5LCB2YWx1ZSkgcGFpcnMgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuIE51bWJlciBvZiBlbGVtZW50cyB3aXRoIHNwZWNpZmllZCBrZXkuCisgICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3QuY291bnQoX194KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRmluZHMgdGhlIGJlZ2lubmluZyBvZiBhIHN1YnNlcXVlbmNlIG1hdGNoaW5nIGdpdmVuIGtleS4KKyAgICAgICAqICBAcGFyYW0gIHggIEtleSBvZiAoa2V5LCB2YWx1ZSkgcGFpciB0byBiZSBsb2NhdGVkLgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIHBvaW50aW5nIHRvIGZpcnN0IGVsZW1lbnQgZXF1YWwgdG8gb3IgZ3JlYXRlcgorICAgICAgICogICAgICAgICAgIHRoYW4ga2V5LCBvciBlbmQoKS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IG9mIGEgc3Vic2VxdWVuY2Ugb2YgZWxlbWVudHMKKyAgICAgICAqICB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIGtleS4gIElmIHVuc3VjY2Vzc2Z1bCBpdCByZXR1cm5zIGFuIGl0ZXJhdG9yCisgICAgICAgKiAgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBoYXMgYSBncmVhdGVyIHZhbHVlIHRoYW4gZ2l2ZW4ga2V5CisgICAgICAgKiAgb3IgZW5kKCkgaWYgbm8gc3VjaCBlbGVtZW50IGV4aXN0cy4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEZpbmRzIHRoZSBiZWdpbm5pbmcgb2YgYSBzdWJzZXF1ZW5jZSBtYXRjaGluZyBnaXZlbiBrZXkuCisgICAgICAgKiAgQHBhcmFtICB4ICBLZXkgb2YgKGtleSwgdmFsdWUpIHBhaXIgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciBwb2ludGluZyB0byBmaXJzdCBlbGVtZW50CisgICAgICAgKiAgICAgICAgICAgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIGtleSwgb3IgZW5kKCkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBvZiBhIHN1YnNlcXVlbmNlIG9mIGVsZW1lbnRzCisgICAgICAgKiAgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBrZXkuICBJZiB1bnN1Y2Nlc3NmdWwgdGhlIGl0ZXJhdG9yIHdpbGwgcG9pbnQKKyAgICAgICAqICB0byB0aGUgbmV4dCBncmVhdGVzdCBlbGVtZW50IG9yLCBpZiBubyBzdWNoIGdyZWF0ZXIgZWxlbWVudCBleGlzdHMsIHRvCisgICAgICAgKiAgZW5kKCkuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBGaW5kcyB0aGUgZW5kIG9mIGEgc3Vic2VxdWVuY2UgbWF0Y2hpbmcgZ2l2ZW4ga2V5LgorICAgICAgICogIEBwYXJhbSAgeCAgS2V5IG9mIChrZXksIHZhbHVlKSBwYWlyIHRvIGJlIGxvY2F0ZWQuCisgICAgICAgKiAgQHJldHVybiBJdGVyYXRvciBwb2ludGluZyB0byB0aGUgZmlyc3QgZWxlbWVudAorICAgICAgICogICAgICAgICAgZ3JlYXRlciB0aGFuIGtleSwgb3IgZW5kKCkuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBGaW5kcyB0aGUgZW5kIG9mIGEgc3Vic2VxdWVuY2UgbWF0Y2hpbmcgZ2l2ZW4ga2V5LgorICAgICAgICogIEBwYXJhbSAgeCAgS2V5IG9mIChrZXksIHZhbHVlKSBwYWlyIHRvIGJlIGxvY2F0ZWQuCisgICAgICAgKiAgQHJldHVybiAgUmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgcG9pbnRpbmcgdG8gZmlyc3QgaXRlcmF0b3IKKyAgICAgICAqICAgICAgICAgICBncmVhdGVyIHRoYW4ga2V5LCBvciBlbmQoKS4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEZpbmRzIGEgc3Vic2VxdWVuY2UgbWF0Y2hpbmcgZ2l2ZW4ga2V5LgorICAgICAgICogIEBwYXJhbSAgeCAgS2V5IG9mIChrZXksIHZhbHVlKSBwYWlycyB0byBiZSBsb2NhdGVkLgorICAgICAgICogIEByZXR1cm4gIFBhaXIgb2YgaXRlcmF0b3JzIHRoYXQgcG9zc2libHkgcG9pbnRzIHRvIHRoZSBzdWJzZXF1ZW5jZQorICAgICAgICogICAgICAgICAgIG1hdGNoaW5nIGdpdmVuIGtleS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvCisgICAgICAgKiAgQGNvZGUKKyAgICAgICAqICAgIHN0ZDo6bWFrZV9wYWlyKGMubG93ZXJfYm91bmQodmFsKSwKKyAgICAgICAqICAgICAgICAgICAgICAgICAgIGMudXBwZXJfYm91bmQodmFsKSkKKyAgICAgICAqICBAZW5kY29kZQorICAgICAgICogIChidXQgaXMgZmFzdGVyIHRoYW4gbWFraW5nIHRoZSBjYWxscyBzZXBhcmF0ZWx5KS4KKyAgICAgICAqLworICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEZpbmRzIGEgc3Vic2VxdWVuY2UgbWF0Y2hpbmcgZ2l2ZW4ga2V5LgorICAgICAgICogIEBwYXJhbSAgeCAgS2V5IG9mIChrZXksIHZhbHVlKSBwYWlycyB0byBiZSBsb2NhdGVkLgorICAgICAgICogIEByZXR1cm4gIFBhaXIgb2YgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3JzIHRoYXQgcG9zc2libHkgcG9pbnRzCisgICAgICAgKiAgICAgICAgICAgdG8gdGhlIHN1YnNlcXVlbmNlIG1hdGNoaW5nIGdpdmVuIGtleS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvCisgICAgICAgKiAgQGNvZGUKKyAgICAgICAqICAgIHN0ZDo6bWFrZV9wYWlyKGMubG93ZXJfYm91bmQodmFsKSwKKyAgICAgICAqICAgICAgICAgICAgICAgICAgIGMudXBwZXJfYm91bmQodmFsKSkKKyAgICAgICAqICBAZW5kY29kZQorICAgICAgICogIChidXQgaXMgZmFzdGVyIHRoYW4gbWFraW5nIHRoZSBjYWxscyBzZXBhcmF0ZWx5KS4KKyAgICAgICAqLworICAgICAgc3RkOjpwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0sxLCB0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9DMSwgdHlwZW5hbWUgX0ExPgorICAgICAgICBmcmllbmQgYm9vbAorICAgICAgICBvcGVyYXRvcj09KGNvbnN0IG11bHRpbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mLAorCQkgICBjb25zdCBtdWx0aW1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+Jik7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9LMSwgdHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfQzEsIHR5cGVuYW1lIF9BMT4KKyAgICAgICAgZnJpZW5kIGJvb2wKKyAgICAgICAgb3BlcmF0b3I8KGNvbnN0IG11bHRpbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mLAorCQkgIGNvbnN0IG11bHRpbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mKTsKKyAgfTsKKworICAvKioKKyAgICogIEBicmllZiAgTXVsdGltYXAgZXF1YWxpdHkgY29tcGFyaXNvbi4KKyAgICogIEBwYXJhbSAgeCAgQSAlbXVsdGltYXAuCisgICAqICBAcGFyYW0gIHkgIEEgJW11bHRpbWFwIG9mIHRoZSBzYW1lIHR5cGUgYXMgQGEgeC4KKyAgICogIEByZXR1cm4gIFRydWUgaWZmIHRoZSBzaXplIGFuZCBlbGVtZW50cyBvZiB0aGUgbWFwcyBhcmUgZXF1YWwuCisgICAqCisgICAqICBUaGlzIGlzIGFuIGVxdWl2YWxlbmNlIHJlbGF0aW9uLiAgSXQgaXMgbGluZWFyIGluIHRoZSBzaXplIG9mIHRoZQorICAgKiAgbXVsdGltYXBzLiAgTXVsdGltYXBzIGFyZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQgaWYgdGhlaXIgc2l6ZXMgYXJlIGVxdWFsLAorICAgKiAgYW5kIGlmIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgY29tcGFyZSBlcXVhbC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBtdWx0aW1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gsCisgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7IH0KKworICAvKioKKyAgICogIEBicmllZiAgTXVsdGltYXAgb3JkZXJpbmcgcmVsYXRpb24uCisgICAqICBAcGFyYW0gIHggIEEgJW11bHRpbWFwLgorICAgKiAgQHBhcmFtICB5ICBBICVtdWx0aW1hcCBvZiB0aGUgc2FtZSB0eXBlIGFzIEBhIHguCisgICAqICBAcmV0dXJuICBUcnVlIGlmZiBAYSB4IGlzIGxleGljb2dyYXBoaWNhbGx5IGxlc3MgdGhhbiBAYSB5LgorICAgKgorICAgKiAgVGhpcyBpcyBhIHRvdGFsIG9yZGVyaW5nIHJlbGF0aW9uLiAgSXQgaXMgbGluZWFyIGluIHRoZSBzaXplIG9mIHRoZQorICAgKiAgbXVsdGltYXBzLiAgVGhlIGVsZW1lbnRzIG11c3QgYmUgY29tcGFyYWJsZSB3aXRoIEBjIDwuCisgICAqCisgICAqICBTZWUgc3RkOjpsZXhpY29ncmFwaGljYWxfY29tcGFyZSgpIGZvciBob3cgdGhlIGRldGVybWluYXRpb24gaXMgbWFkZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IG11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKyAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5fTV90IDwgX195Ll9NX3Q7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I9PQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IG11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKyAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CisKKyAgLy8vIEJhc2VkIG9uIG9wZXJhdG9yPAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX194LAorICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gX195IDwgX194OyB9CisKKyAgLy8vIEJhc2VkIG9uIG9wZXJhdG9yPAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IG11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKyAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I8CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX194LAorICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX194IDwgX195KTsgfQorCisgIC8vLyBTZWUgc3RkOjptdWx0aW1hcDo6c3dhcCgpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKG11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKyAgICAgICAgIG11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworX0dMSUJDWFhfRU5EX05FU1RFRF9OQU1FU1BBQ0UKKworI2VuZGlmIC8qIF9TVExfTVVMVElNQVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF9tdWx0aXNldC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF9tdWx0aXNldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOWU1OGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3RsX211bHRpc2V0LmgKQEAgLTAsMCArMSw3MjEgQEAKKy8vIE11bHRpc2V0IGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBzdGxfbXVsdGlzZXQuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWZuZGVmIF9TVExfTVVMVElTRVRfSAorI2RlZmluZSBfU1RMX01VTFRJU0VUX0ggMQorCisjaW5jbHVkZSA8Yml0cy9jb25jZXB0X2NoZWNrLmg+CisjaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KKworX0dMSUJDWFhfQkVHSU5fTkVTVEVEX05BTUVTUEFDRShzdGQsIF9HTElCQ1hYX1NURF9EKQorCisgIC8qKgorICAgKiAgQGJyaWVmIEEgc3RhbmRhcmQgY29udGFpbmVyIG1hZGUgdXAgb2YgZWxlbWVudHMsIHdoaWNoIGNhbiBiZSByZXRyaWV2ZWQKKyAgICogIGluIGxvZ2FyaXRobWljIHRpbWUuCisgICAqCisgICAqICBAaW5ncm91cCBhc3NvY2lhdGl2ZV9jb250YWluZXJzCisgICAqCisgICAqICBNZWV0cyB0aGUgcmVxdWlyZW1lbnRzIG9mIGEgPGEgaHJlZj0idGFibGVzLmh0bWwjNjUiPmNvbnRhaW5lcjwvYT4sIGEKKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sIzY2Ij5yZXZlcnNpYmxlIGNvbnRhaW5lcjwvYT4sIGFuZCBhbgorICAgKiAgPGEgaHJlZj0idGFibGVzLmh0bWwjNjkiPmFzc29jaWF0aXZlIGNvbnRhaW5lcjwvYT4gKHVzaW5nIGVxdWl2YWxlbnQKKyAgICogIGtleXMpLiAgRm9yIGEgQGMgbXVsdGlzZXQ8S2V5PiB0aGUga2V5X3R5cGUgYW5kIHZhbHVlX3R5cGUgYXJlIEtleS4KKyAgICoKKyAgICogIE11bHRpc2V0cyBzdXBwb3J0IGJpZGlyZWN0aW9uYWwgaXRlcmF0b3JzLgorICAgKgorICAgKiAgVGhlIHByaXZhdGUgdHJlZSBkYXRhIGlzIGRlY2xhcmVkIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGZvciBzZXQgYW5kCisgICAqICBtdWx0aXNldDsgdGhlIGRpc3RpbmN0aW9uIGlzIG1hZGUgZW50aXJlbHkgaW4gaG93IHRoZSB0cmVlIGZ1bmN0aW9ucyBhcmUKKyAgICogIGNhbGxlZCAoKl91bmlxdWUgdmVyc3VzICpfZXF1YWwsIHNhbWUgYXMgdGhlIHN0YW5kYXJkKS4KKyAgKi8KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlID0gc3RkOjpsZXNzPF9LZXk+LAorCSAgICB0eXBlbmFtZSBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxfS2V5PiA+CisgICAgY2xhc3MgbXVsdGlzZXQKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnZhbHVlX3R5cGUgICAgICAgICAgICAgICAgICAgX0FsbG9jX3ZhbHVlX3R5cGU7CisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX0tleSwgX1NHSUFzc2lnbmFibGVDb25jZXB0KQorICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzNChfQ29tcGFyZSwgYm9vbCwgX0tleSwgX0tleSwKKwkJCQlfQmluYXJ5RnVuY3Rpb25Db25jZXB0KQorICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzMihfS2V5LCBfQWxsb2NfdmFsdWVfdHlwZSwgX1NhbWVUeXBlQ29uY2VwdCkJCisKKyAgICBwdWJsaWM6CisgICAgICAvLyB0eXBlZGVmczoKKyAgICAgIHR5cGVkZWYgX0tleSAgICAga2V5X3R5cGU7CisgICAgICB0eXBlZGVmIF9LZXkgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9Db21wYXJlIGtleV9jb21wYXJlOworICAgICAgdHlwZWRlZiBfQ29tcGFyZSB2YWx1ZV9jb21wYXJlOworICAgICAgdHlwZWRlZiBfQWxsb2MgICBhbGxvY2F0b3JfdHlwZTsKKworICAgIHByaXZhdGU6CisgICAgICAvLy8gVGhpcyB0dXJucyBhIHJlZC1ibGFjayB0cmVlIGludG8gYSBbbXVsdGldc2V0LgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxfS2V5Pjo6b3RoZXIgX0tleV9hbGxvY190eXBlOworCisgICAgICB0eXBlZGVmIF9SYl90cmVlPGtleV90eXBlLCB2YWx1ZV90eXBlLCBfSWRlbnRpdHk8dmFsdWVfdHlwZT4sCisJCSAgICAgICBrZXlfY29tcGFyZSwgX0tleV9hbGxvY190eXBlPiBfUmVwX3R5cGU7CisgICAgICAvLy8gVGhlIGFjdHVhbCB0cmVlIHN0cnVjdHVyZS4KKyAgICAgIF9SZXBfdHlwZSBfTV90OworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfS2V5X2FsbG9jX3R5cGU6OnBvaW50ZXIgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0tleV9hbGxvY190eXBlOjpjb25zdF9wb2ludGVyICAgICAgIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9LZXlfYWxsb2NfdHlwZTo6cmVmZXJlbmNlICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9LZXlfYWxsb2NfdHlwZTo6Y29uc3RfcmVmZXJlbmNlICAgICBjb25zdF9yZWZlcmVuY2U7CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUiAxMDMuIHNldDo6aXRlcmF0b3IgaXMgcmVxdWlyZWQgdG8gYmUgbW9kaWZpYWJsZSwKKyAgICAgIC8vIGJ1dCB0aGlzIGFsbG93cyBtb2RpZmljYXRpb24gb2Yga2V5cy4KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciAgICAgICAgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0ZXJhdG9yICAgICAgICAgICAgY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciAgICByZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5cGUgICAgICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKworICAgICAgLy8gYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRGVmYXVsdCBjb25zdHJ1Y3RvciBjcmVhdGVzIG5vIGVsZW1lbnRzLgorICAgICAgICovCisgICAgICBtdWx0aXNldCgpCisgICAgICA6IF9NX3QoKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDcmVhdGVzIGEgJW11bHRpc2V0IHdpdGggbm8gZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBjb21wICBDb21wYXJhdG9yIHRvIHVzZS4KKyAgICAgICAqICBAcGFyYW0gIGEgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBtdWx0aXNldChjb25zdCBfQ29tcGFyZSYgX19jb21wLAorCSAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX01fdChfX2NvbXAsIF9fYSkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQnVpbGRzIGEgJW11bHRpc2V0IGZyb20gYSByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gIGZpcnN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIGxhc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICoKKyAgICAgICAqICBDcmVhdGUgYSAlbXVsdGlzZXQgY29uc2lzdGluZyBvZiBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGZyb20KKyAgICAgICAqICBbZmlyc3QsbGFzdCkuICBUaGlzIGlzIGxpbmVhciBpbiBOIGlmIHRoZSByYW5nZSBpcyBhbHJlYWR5IHNvcnRlZCwKKyAgICAgICAqICBhbmQgTmxvZ04gb3RoZXJ3aXNlICh3aGVyZSBOIGlzIGRpc3RhbmNlKGZpcnN0LGxhc3QpKS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIG11bHRpc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKwk6IF9NX3QoKQorICAgICAgICB7IF9NX3QuX01faW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBCdWlsZHMgYSAlbXVsdGlzZXQgZnJvbSBhIHJhbmdlLgorICAgICAgICogIEBwYXJhbSAgZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgbGFzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBjb21wICBBIGNvbXBhcmlzb24gZnVuY3Rvci4KKyAgICAgICAqICBAcGFyYW0gIGEgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKgorICAgICAgICogIENyZWF0ZSBhICVtdWx0aXNldCBjb25zaXN0aW5nIG9mIGNvcGllcyBvZiB0aGUgZWxlbWVudHMgZnJvbQorICAgICAgICogIFtmaXJzdCxsYXN0KS4gIFRoaXMgaXMgbGluZWFyIGluIE4gaWYgdGhlIHJhbmdlIGlzIGFscmVhZHkgc29ydGVkLAorICAgICAgICogIGFuZCBObG9nTiBvdGhlcndpc2UgKHdoZXJlIE4gaXMgZGlzdGFuY2UoZmlyc3QsbGFzdCkpLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgbXVsdGlzZXQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkgY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKKwkJIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX01fdChfX2NvbXAsIF9fYSkKKyAgICAgICAgeyBfTV90Ll9NX2luc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJU11bHRpc2V0IGNvcHkgY29uc3RydWN0b3IuCisgICAgICAgKiAgQHBhcmFtICB4ICBBICVtdWx0aXNldCBvZiBpZGVudGljYWwgZWxlbWVudCBhbmQgYWxsb2NhdG9yIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBUaGUgbmV3bHktY3JlYXRlZCAlbXVsdGlzZXQgdXNlcyBhIGNvcHkgb2YgdGhlIGFsbG9jYXRpb24gb2JqZWN0IHVzZWQKKyAgICAgICAqICBieSBAYSB4LgorICAgICAgICovCisgICAgICBtdWx0aXNldChjb25zdCBtdWx0aXNldCYgX194KQorICAgICAgOiBfTV90KF9feC5fTV90KSB7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJU11bHRpc2V0IG1vdmUgY29uc3RydWN0b3IuCisgICAgICAgKiAgQHBhcmFtICB4ICBBICVtdWx0aXNldCBvZiBpZGVudGljYWwgZWxlbWVudCBhbmQgYWxsb2NhdG9yIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBUaGUgbmV3bHktY3JlYXRlZCAlbXVsdGlzZXQgY29udGFpbnMgdGhlIGV4YWN0IGNvbnRlbnRzIG9mIEBhIHguCisgICAgICAgKiAgVGhlIGNvbnRlbnRzIG9mIEBhIHggYXJlIGEgdmFsaWQsIGJ1dCB1bnNwZWNpZmllZCAlbXVsdGlzZXQuCisgICAgICAgKi8KKyAgICAgIG11bHRpc2V0KG11bHRpc2V0JiYgX194KQorICAgICAgOiBfTV90KHN0ZDo6Zm9yd2FyZDxfUmVwX3R5cGU+KF9feC5fTV90KSkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQnVpbGRzIGEgJW11bHRpc2V0IGZyb20gYW4gaW5pdGlhbGl6ZXJfbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIGwgIEFuIGluaXRpYWxpemVyX2xpc3QuCisgICAgICAgKiAgQHBhcmFtICBjb21wICBBIGNvbXBhcmlzb24gZnVuY3Rvci4KKyAgICAgICAqICBAcGFyYW0gIGEgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKgorICAgICAgICogIENyZWF0ZSBhICVtdWx0aXNldCBjb25zaXN0aW5nIG9mIGNvcGllcyBvZiB0aGUgZWxlbWVudHMgZnJvbQorICAgICAgICogIHRoZSBsaXN0LiAgVGhpcyBpcyBsaW5lYXIgaW4gTiBpZiB0aGUgbGlzdCBpcyBhbHJlYWR5IHNvcnRlZCwKKyAgICAgICAqICBhbmQgTmxvZ04gb3RoZXJ3aXNlICh3aGVyZSBOIGlzIEBhIGwuc2l6ZSgpKS4KKyAgICAgICAqLworICAgICAgbXVsdGlzZXQoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJICAgICAgIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAgPSBfQ29tcGFyZSgpLAorCSAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX01fdChfX2NvbXAsIF9fYSkKKyAgICAgIHsgX01fdC5fTV9pbnNlcnRfZXF1YWwoX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgICVNdWx0aXNldCBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgeCAgQSAlbXVsdGlzZXQgb2YgaWRlbnRpY2FsIGVsZW1lbnQgYW5kIGFsbG9jYXRvciB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgQWxsIHRoZSBlbGVtZW50cyBvZiBAYSB4IGFyZSBjb3BpZWQsIGJ1dCB1bmxpa2UgdGhlIGNvcHkgY29uc3RydWN0b3IsCisgICAgICAgKiAgdGhlIGFsbG9jYXRvciBvYmplY3QgaXMgbm90IGNvcGllZC4KKyAgICAgICAqLworICAgICAgbXVsdGlzZXQmCisgICAgICBvcGVyYXRvcj0oY29uc3QgbXVsdGlzZXQmIF9feCkKKyAgICAgIHsKKwlfTV90ID0gX194Ll9NX3Q7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJU11bHRpc2V0IG1vdmUgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIHggIEEgJW11bHRpc2V0IG9mIGlkZW50aWNhbCBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoZSBjb250ZW50cyBvZiBAYSB4IGFyZSBtb3ZlZCBpbnRvIHRoaXMgJW11bHRpc2V0ICh3aXRob3V0IGNvcHlpbmcpLgorICAgICAgICogIEBhIHggaXMgYSB2YWxpZCwgYnV0IHVuc3BlY2lmaWVkICVtdWx0aXNldC4KKyAgICAgICAqLworICAgICAgbXVsdGlzZXQmCisgICAgICBvcGVyYXRvcj0obXVsdGlzZXQmJiBfX3gpCisgICAgICB7CisJLy8gTkI6IERSIDEyMDQuCisJLy8gTkI6IERSIDY3NS4KKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPnN3YXAoX194KTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJU11bHRpc2V0IGxpc3QgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIGwgIEFuIGluaXRpYWxpemVyX2xpc3QuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZmlsbHMgYSAlbXVsdGlzZXQgd2l0aCBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGluIHRoZQorICAgICAgICogIGluaXRpYWxpemVyIGxpc3QgQGEgbC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZSB0aGF0IHRoZSBhc3NpZ25tZW50IGNvbXBsZXRlbHkgY2hhbmdlcyB0aGUgJW11bHRpc2V0IGFuZAorICAgICAgICogIHRoYXQgdGhlIHJlc3VsdGluZyAlbXVsdGlzZXQncyBzaXplIGlzIHRoZSBzYW1lIGFzIHRoZSBudW1iZXIKKyAgICAgICAqICBvZiBlbGVtZW50cyBhc3NpZ25lZC4gIE9sZCBkYXRhIG1heSBiZSBsb3N0LgorICAgICAgICovCisgICAgICBtdWx0aXNldCYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPmluc2VydChfX2wuYmVnaW4oKSwgX19sLmVuZCgpKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisjZW5kaWYKKworICAgICAgLy8gYWNjZXNzb3JzOgorCisgICAgICAvLy8gIFJldHVybnMgdGhlIGNvbXBhcmlzb24gb2JqZWN0LgorICAgICAga2V5X2NvbXBhcmUKKyAgICAgIGtleV9jb21wKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3Qua2V5X2NvbXAoKTsgfQorICAgICAgLy8vICBSZXR1cm5zIHRoZSBjb21wYXJpc29uIG9iamVjdC4KKyAgICAgIHZhbHVlX2NvbXBhcmUKKyAgICAgIHZhbHVlX2NvbXAoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CisgICAgICAvLy8gIFJldHVybnMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIG9iamVjdC4KKyAgICAgIGFsbG9jYXRvcl90eXBlCisgICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgZmlyc3QKKyAgICAgICAqICBlbGVtZW50IGluIHRoZSAlbXVsdGlzZXQuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBhc2NlbmRpbmcgb3JkZXIKKyAgICAgICAqICBhY2NvcmRpbmcgdG8gdGhlIGtleXMuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIG9uZSBwYXN0IHRoZSBsYXN0CisgICAgICAgKiAgZWxlbWVudCBpbiB0aGUgJW11bHRpc2V0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gYXNjZW5kaW5nIG9yZGVyCisgICAgICAgKiAgYWNjb3JkaW5nIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlCisgICAgICAgKiAgbGFzdCBlbGVtZW50IGluIHRoZSAlbXVsdGlzZXQuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBkZXNjZW5kaW5nIG9yZGVyCisgICAgICAgKiAgYWNjb3JkaW5nIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUKKyAgICAgICAqICBsYXN0IGVsZW1lbnQgaW4gdGhlICVtdWx0aXNldC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIGRlc2NlbmRpbmcgb3JkZXIKKyAgICAgICAqICBhY2NvcmRpbmcgdG8gdGhlIGtleXMuCisgICAgICAgKi8KKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGZpcnN0CisgICAgICAgKiAgZWxlbWVudCBpbiB0aGUgJW11bHRpc2V0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gYXNjZW5kaW5nIG9yZGVyCisgICAgICAgKiAgYWNjb3JkaW5nIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgb25lIHBhc3QgdGhlIGxhc3QKKyAgICAgICAqICBlbGVtZW50IGluIHRoZSAlbXVsdGlzZXQuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBhc2NlbmRpbmcgb3JkZXIKKyAgICAgICAqICBhY2NvcmRpbmcgdG8gdGhlIGtleXMuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBjZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlCisgICAgICAgKiAgbGFzdCBlbGVtZW50IGluIHRoZSAlbXVsdGlzZXQuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBkZXNjZW5kaW5nIG9yZGVyCisgICAgICAgKiAgYWNjb3JkaW5nIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjcmJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3QucmJlZ2luKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlCisgICAgICAgKiAgbGFzdCBlbGVtZW50IGluIHRoZSAlbXVsdGlzZXQuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBkZXNjZW5kaW5nIG9yZGVyCisgICAgICAgKiAgYWNjb3JkaW5nIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjcmVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LnJlbmQoKTsgfQorI2VuZGlmCisKKyAgICAgIC8vLyAgUmV0dXJucyB0cnVlIGlmIHRoZSAlc2V0IGlzIGVtcHR5LgorICAgICAgYm9vbAorICAgICAgZW1wdHkoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5lbXB0eSgpOyB9CisKKyAgICAgIC8vLyAgUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgJXNldC4KKyAgICAgIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LnNpemUoKTsgfQorCisgICAgICAvLy8gIFJldHVybnMgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgJXNldC4KKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5tYXhfc2l6ZSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU3dhcHMgZGF0YSB3aXRoIGFub3RoZXIgJW11bHRpc2V0LgorICAgICAgICogIEBwYXJhbSAgeCAgQSAlbXVsdGlzZXQgb2YgdGhlIHNhbWUgZWxlbWVudCBhbmQgYWxsb2NhdG9yIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGV4Y2hhbmdlcyB0aGUgZWxlbWVudHMgYmV0d2VlbiB0d28gbXVsdGlzZXRzIGluIGNvbnN0YW50IHRpbWUuCisgICAgICAgKiAgKEl0IGlzIG9ubHkgc3dhcHBpbmcgYSBwb2ludGVyLCBhbiBpbnRlZ2VyLCBhbmQgYW4gaW5zdGFuY2Ugb2YgdGhlIEBjCisgICAgICAgKiAgQ29tcGFyZSB0eXBlICh3aGljaCBpdHNlbGYgaXMgb2Z0ZW4gc3RhdGVsZXNzIGFuZCBlbXB0eSksIHNvIGl0IHNob3VsZAorICAgICAgICogIGJlIHF1aXRlIGZhc3QuKQorICAgICAgICogIE5vdGUgdGhhdCB0aGUgZ2xvYmFsIHN0ZDo6c3dhcCgpIGZ1bmN0aW9uIGlzIHNwZWNpYWxpemVkIHN1Y2ggdGhhdAorICAgICAgICogIHN0ZDo6c3dhcChzMSxzMikgd2lsbCBmZWVkIHRvIHRoaXMgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHN3YXAobXVsdGlzZXQmIF9feCkKKyAgICAgIHsgX01fdC5zd2FwKF9feC5fTV90KTsgfQorCisgICAgICAvLyBpbnNlcnQvZXJhc2UKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBJbnNlcnRzIGFuIGVsZW1lbnQgaW50byB0aGUgJW11bHRpc2V0LgorICAgICAgICogIEBwYXJhbSAgeCAgRWxlbWVudCB0byBiZSBpbnNlcnRlZC4KKyAgICAgICAqICBAcmV0dXJuIEFuIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBpbnNlcnRlZCBlbGVtZW50LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGluc2VydHMgYW4gZWxlbWVudCBpbnRvIHRoZSAlbXVsdGlzZXQuICBDb250cmFyeQorICAgICAgICogIHRvIGEgc3RkOjpzZXQgdGhlICVtdWx0aXNldCBkb2VzIG5vdCByZWx5IG9uIHVuaXF1ZSBrZXlzIGFuZCB0aHVzCisgICAgICAgKiAgbXVsdGlwbGUgY29waWVzIG9mIHRoZSBzYW1lIGVsZW1lbnQgY2FuIGJlIGluc2VydGVkLgorICAgICAgICoKKyAgICAgICAqICBJbnNlcnRpb24gcmVxdWlyZXMgbG9nYXJpdGhtaWMgdGltZS4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV90Ll9NX2luc2VydF9lcXVhbChfX3gpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBJbnNlcnRzIGFuIGVsZW1lbnQgaW50byB0aGUgJW11bHRpc2V0LgorICAgICAgICogIEBwYXJhbSAgcG9zaXRpb24gIEFuIGl0ZXJhdG9yIHRoYXQgc2VydmVzIGFzIGEgaGludCBhcyB0byB3aGVyZSB0aGUKKyAgICAgICAqICAgICAgICAgICAgICAgICAgICBlbGVtZW50IHNob3VsZCBiZSBpbnNlcnRlZC4KKyAgICAgICAqICBAcGFyYW0gIHggIEVsZW1lbnQgdG8gYmUgaW5zZXJ0ZWQuCisgICAgICAgKiAgQHJldHVybiBBbiBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgaW5zZXJ0ZWQgZWxlbWVudC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBpbnNlcnRzIGFuIGVsZW1lbnQgaW50byB0aGUgJW11bHRpc2V0LiAgQ29udHJhcnkKKyAgICAgICAqICB0byBhIHN0ZDo6c2V0IHRoZSAlbXVsdGlzZXQgZG9lcyBub3QgcmVseSBvbiB1bmlxdWUga2V5cyBhbmQgdGh1cworICAgICAgICogIG11bHRpcGxlIGNvcGllcyBvZiB0aGUgc2FtZSBlbGVtZW50IGNhbiBiZSBpbnNlcnRlZC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZSB0aGF0IHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgb25seSBhIGhpbnQgYW5kIGNhbiBwb3RlbnRpYWxseQorICAgICAgICogIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBpbnNlcnRpb24gcHJvY2Vzcy4gIEEgYmFkIGhpbnQgd291bGQKKyAgICAgICAqICBjYXVzZSBubyBnYWlucyBpbiBlZmZpY2llbmN5LgorICAgICAgICoKKyAgICAgICAqICBTZWUgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL21hbnVhbC9iazAxcHQwN2NoMTcuaHRtbAorICAgICAgICogIGZvciBtb3JlIG9uIEBhIGhpbnRpbmcuCisgICAgICAgKgorICAgICAgICogIEluc2VydGlvbiByZXF1aXJlcyBsb2dhcml0aG1pYyB0aW1lIChpZiB0aGUgaGludCBpcyBub3QgdGFrZW4pLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIF9NX3QuX01faW5zZXJ0X2VxdWFsXyhfX3Bvc2l0aW9uLCBfX3gpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBBIHRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgdHJpZXMgdG8gaW5zZXJ0IGEgcmFuZ2Ugb2YgZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBmaXJzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSB0byBiZQorICAgICAgICogICAgICAgICAgICAgICAgIGluc2VydGVkLgorICAgICAgICogIEBwYXJhbSAgbGFzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgcmFuZ2UuCisgICAgICAgKgorICAgICAgICogIENvbXBsZXhpdHkgc2ltaWxhciB0byB0aGF0IG9mIHRoZSByYW5nZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeyBfTV90Ll9NX2luc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEF0dGVtcHRzIHRvIGluc2VydCBhIGxpc3Qgb2YgZWxlbWVudHMgaW50byB0aGUgJW11bHRpc2V0LgorICAgICAgICogIEBwYXJhbSAgbGlzdCAgQSBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gb2YgZWxlbWVudHMKKyAgICAgICAqICAgICAgICAgICAgICAgIHRvIGJlIGluc2VydGVkLgorICAgICAgICoKKyAgICAgICAqICBDb21wbGV4aXR5IHNpbWlsYXIgdG8gdGhhdCBvZiB0aGUgcmFuZ2UgY29uc3RydWN0b3IuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsgdGhpcy0+aW5zZXJ0KF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOyB9CisjZW5kaWYKKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUiAxMzAuIEFzc29jaWF0aXZlIGVyYXNlIHNob3VsZCByZXR1cm4gYW4gaXRlcmF0b3IuCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRXJhc2VzIGFuIGVsZW1lbnQgZnJvbSBhICVtdWx0aXNldC4KKyAgICAgICAqICBAcGFyYW0gIHBvc2l0aW9uICBBbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZWxlbWVudCB0byBiZSBlcmFzZWQuCisgICAgICAgKiAgQHJldHVybiBBbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZWxlbWVudCBpbW1lZGlhdGVseSBmb2xsb3dpbmcKKyAgICAgICAqICAgICAgICAgIEBhIHBvc2l0aW9uIHByaW9yIHRvIHRoZSBlbGVtZW50IGJlaW5nIGVyYXNlZC4gSWYgbm8gc3VjaCAKKyAgICAgICAqICAgICAgICAgIGVsZW1lbnQgZXhpc3RzLCBlbmQoKSBpcyByZXR1cm5lZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBlcmFzZXMgYW4gZWxlbWVudCwgcG9pbnRlZCB0byBieSB0aGUgZ2l2ZW4gaXRlcmF0b3IsCisgICAgICAgKiAgZnJvbSBhICVtdWx0aXNldC4gIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50LAorICAgICAgICogIGFuZCB0aGF0IGlmIHRoZSBlbGVtZW50IGlzIGl0c2VsZiBhIHBvaW50ZXIsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcworICAgICAgICogIG5vdCB0b3VjaGVkIGluIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzCisgICAgICAgKiAgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeyByZXR1cm4gX01fdC5lcmFzZShfX3Bvc2l0aW9uKTsgfQorI2Vsc2UKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBFcmFzZXMgYW4gZWxlbWVudCBmcm9tIGEgJW11bHRpc2V0LgorICAgICAgICogIEBwYXJhbSAgcG9zaXRpb24gIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbGVtZW50IHRvIGJlIGVyYXNlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBlcmFzZXMgYW4gZWxlbWVudCwgcG9pbnRlZCB0byBieSB0aGUgZ2l2ZW4gaXRlcmF0b3IsCisgICAgICAgKiAgZnJvbSBhICVtdWx0aXNldC4gIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50LAorICAgICAgICogIGFuZCB0aGF0IGlmIHRoZSBlbGVtZW50IGlzIGl0c2VsZiBhIHBvaW50ZXIsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcworICAgICAgICogIG5vdCB0b3VjaGVkIGluIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzCisgICAgICAgKiAgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7IF9NX3QuZXJhc2UoX19wb3NpdGlvbik7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRXJhc2VzIGVsZW1lbnRzIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQga2V5LgorICAgICAgICogIEBwYXJhbSAgeCAgS2V5IG9mIGVsZW1lbnQgdG8gYmUgZXJhc2VkLgorICAgICAgICogIEByZXR1cm4gIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgZXJhc2VkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGVyYXNlcyBhbGwgZWxlbWVudHMgbG9jYXRlZCBieSB0aGUgZ2l2ZW4ga2V5IGZyb20gYQorICAgICAgICogICVtdWx0aXNldC4KKyAgICAgICAqICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudCwgYW5kIHRoYXQgaWYKKyAgICAgICAqICB0aGUgZWxlbWVudCBpcyBpdHNlbGYgYSBwb2ludGVyLCB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQKKyAgICAgICAqICBpbiBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gX01fdC5lcmFzZShfX3gpOyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gRFIgMTMwLiBBc3NvY2lhdGl2ZSBlcmFzZSBzaG91bGQgcmV0dXJuIGFuIGl0ZXJhdG9yLgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEVyYXNlcyBhIFtmaXJzdCxsYXN0KSByYW5nZSBvZiBlbGVtZW50cyBmcm9tIGEgJW11bHRpc2V0LgorICAgICAgICogIEBwYXJhbSAgZmlyc3QgIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UgdG8gYmUKKyAgICAgICAqICAgICAgICAgICAgICAgICBlcmFzZWQuCisgICAgICAgKiAgQHBhcmFtICBsYXN0ICBJdGVyYXRvciBwb2ludGluZyB0byB0aGUgZW5kIG9mIHRoZSByYW5nZSB0byBiZSBlcmFzZWQuCisgICAgICAgKiAgQHJldHVybiBUaGUgaXRlcmF0b3IgQGEgbGFzdC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBlcmFzZXMgYSBzZXF1ZW5jZSBvZiBlbGVtZW50cyBmcm9tIGEgJW11bHRpc2V0LgorICAgICAgICogIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50cywgYW5kIHRoYXQgaWYKKyAgICAgICAqICB0aGUgZWxlbWVudHMgdGhlbXNlbHZlcyBhcmUgcG9pbnRlcnMsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QKKyAgICAgICAqICB0b3VjaGVkIGluIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICAgeyByZXR1cm4gX01fdC5lcmFzZShfX2ZpcnN0LCBfX2xhc3QpOyB9CisjZWxzZQorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEVyYXNlcyBhIFtmaXJzdCxsYXN0KSByYW5nZSBvZiBlbGVtZW50cyBmcm9tIGEgJW11bHRpc2V0LgorICAgICAgICogIEBwYXJhbSAgZmlyc3QgIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UgdG8gYmUKKyAgICAgICAqICAgICAgICAgICAgICAgICBlcmFzZWQuCisgICAgICAgKiAgQHBhcmFtICBsYXN0ICBJdGVyYXRvciBwb2ludGluZyB0byB0aGUgZW5kIG9mIHRoZSByYW5nZSB0byBiZSBlcmFzZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZXJhc2VzIGEgc2VxdWVuY2Ugb2YgZWxlbWVudHMgZnJvbSBhICVtdWx0aXNldC4KKyAgICAgICAqICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudHMsIGFuZCB0aGF0IGlmCisgICAgICAgKiAgdGhlIGVsZW1lbnRzIHRoZW1zZWx2ZXMgYXJlIHBvaW50ZXJzLCB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90CisgICAgICAgKiAgdG91Y2hlZCBpbiBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICAgeyBfTV90LmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBFcmFzZXMgYWxsIGVsZW1lbnRzIGluIGEgJW11bHRpc2V0LiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gb25seQorICAgICAgICogIGVyYXNlcyB0aGUgZWxlbWVudHMsIGFuZCB0aGF0IGlmIHRoZSBlbGVtZW50cyB0aGVtc2VsdmVzIGFyZSBwb2ludGVycywKKyAgICAgICAqICB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQgaW4gYW55IHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyCisgICAgICAgKiAgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgY2xlYXIoKQorICAgICAgeyBfTV90LmNsZWFyKCk7IH0KKworICAgICAgLy8gbXVsdGlzZXQgb3BlcmF0aW9uczoKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEZpbmRzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgd2l0aCBnaXZlbiBrZXkuCisgICAgICAgKiAgQHBhcmFtICB4ICBLZXkgb2YgZWxlbWVudHMgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuIE51bWJlciBvZiBlbGVtZW50cyB3aXRoIHNwZWNpZmllZCBrZXkuCisgICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3QuY291bnQoX194KTsgfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyMTQuICBzZXQ6OmZpbmQoKSBtaXNzaW5nIGNvbnN0IG92ZXJsb2FkCisgICAgICAvL0B7CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgVHJpZXMgdG8gbG9jYXRlIGFuIGVsZW1lbnQgaW4gYSAlc2V0LgorICAgICAgICogIEBwYXJhbSAgeCAgRWxlbWVudCB0byBiZSBsb2NhdGVkLgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHNvdWdodC1hZnRlciBlbGVtZW50LCBvciBlbmQoKSBpZiBub3QKKyAgICAgICAqICAgICAgICAgICBmb3VuZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIGtleSBhbmQgdHJpZXMgdG8gbG9jYXRlIHRoZSBlbGVtZW50IHdpdGggd2hpY2gKKyAgICAgICAqICB0aGUga2V5IG1hdGNoZXMuICBJZiBzdWNjZXNzZnVsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGl0ZXJhdG9yCisgICAgICAgKiAgcG9pbnRpbmcgdG8gdGhlIHNvdWdodCBhZnRlciBlbGVtZW50LiAgSWYgdW5zdWNjZXNzZnVsIGl0IHJldHVybnMgdGhlCisgICAgICAgKiAgcGFzdC10aGUtZW5kICggQGMgZW5kKCkgKSBpdGVyYXRvci4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQorICAgICAgLy9AfQorCisgICAgICAvL0B7CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRmluZHMgdGhlIGJlZ2lubmluZyBvZiBhIHN1YnNlcXVlbmNlIG1hdGNoaW5nIGdpdmVuIGtleS4KKyAgICAgICAqICBAcGFyYW0gIHggIEtleSB0byBiZSBsb2NhdGVkLgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIHBvaW50aW5nIHRvIGZpcnN0IGVsZW1lbnQgZXF1YWwgdG8gb3IgZ3JlYXRlcgorICAgICAgICogICAgICAgICAgIHRoYW4ga2V5LCBvciBlbmQoKS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IG9mIGEgc3Vic2VxdWVuY2Ugb2YgZWxlbWVudHMKKyAgICAgICAqICB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIGtleS4gIElmIHVuc3VjY2Vzc2Z1bCBpdCByZXR1cm5zIGFuIGl0ZXJhdG9yCisgICAgICAgKiAgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBoYXMgYSBncmVhdGVyIHZhbHVlIHRoYW4gZ2l2ZW4ga2V5CisgICAgICAgKiAgb3IgZW5kKCkgaWYgbm8gc3VjaCBlbGVtZW50IGV4aXN0cy4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7IH0KKyAgICAgIC8vQH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEZpbmRzIHRoZSBlbmQgb2YgYSBzdWJzZXF1ZW5jZSBtYXRjaGluZyBnaXZlbiBrZXkuCisgICAgICAgKiAgQHBhcmFtICB4ICBLZXkgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50CisgICAgICAgKiAgICAgICAgICBncmVhdGVyIHRoYW4ga2V5LCBvciBlbmQoKS4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KKyAgICAgIC8vQH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEZpbmRzIGEgc3Vic2VxdWVuY2UgbWF0Y2hpbmcgZ2l2ZW4ga2V5LgorICAgICAgICogIEBwYXJhbSAgeCAgS2V5IHRvIGJlIGxvY2F0ZWQuCisgICAgICAgKiAgQHJldHVybiAgUGFpciBvZiBpdGVyYXRvcnMgdGhhdCBwb3NzaWJseSBwb2ludHMgdG8gdGhlIHN1YnNlcXVlbmNlCisgICAgICAgKiAgICAgICAgICAgbWF0Y2hpbmcgZ2l2ZW4ga2V5LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgICAqICBAY29kZQorICAgICAgICogICAgc3RkOjptYWtlX3BhaXIoYy5sb3dlcl9ib3VuZCh2YWwpLAorICAgICAgICogICAgICAgICAgICAgICAgICAgYy51cHBlcl9ib3VuZCh2YWwpKQorICAgICAgICogIEBlbmRjb2RlCisgICAgICAgKiAgKGJ1dCBpcyBmYXN0ZXIgdGhhbiBtYWtpbmcgdGhlIGNhbGxzIHNlcGFyYXRlbHkpLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHByb2JhYmx5IG9ubHkgbWFrZXMgc2Vuc2UgZm9yIG11bHRpc2V0cy4KKyAgICAgICAqLworICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7IH0KKworICAgICAgc3RkOjpwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0sxLCB0eXBlbmFtZSBfQzEsIHR5cGVuYW1lIF9BMT4KKyAgICAgICAgZnJpZW5kIGJvb2wKKyAgICAgICAgb3BlcmF0b3I9PShjb25zdCBtdWx0aXNldDxfSzEsIF9DMSwgX0ExPiYsCisJCSAgIGNvbnN0IG11bHRpc2V0PF9LMSwgX0MxLCBfQTE+Jik7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9LMSwgdHlwZW5hbWUgX0MxLCB0eXBlbmFtZSBfQTE+CisgICAgICAgIGZyaWVuZCBib29sCisgICAgICAgIG9wZXJhdG9yPCAoY29uc3QgbXVsdGlzZXQ8X0sxLCBfQzEsIF9BMT4mLAorCQkgICBjb25zdCBtdWx0aXNldDxfSzEsIF9DMSwgX0ExPiYpOworICAgIH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgIE11bHRpc2V0IGVxdWFsaXR5IGNvbXBhcmlzb24uCisgICAqICBAcGFyYW0gIHggIEEgJW11bHRpc2V0LgorICAgKiAgQHBhcmFtICB5ICBBICVtdWx0aXNldCBvZiB0aGUgc2FtZSB0eXBlIGFzIEBhIHguCisgICAqICBAcmV0dXJuICBUcnVlIGlmZiB0aGUgc2l6ZSBhbmQgZWxlbWVudHMgb2YgdGhlIG11bHRpc2V0cyBhcmUgZXF1YWwuCisgICAqCisgICAqICBUaGlzIGlzIGFuIGVxdWl2YWxlbmNlIHJlbGF0aW9uLiAgSXQgaXMgbGluZWFyIGluIHRoZSBzaXplIG9mIHRoZQorICAgKiAgbXVsdGlzZXRzLgorICAgKiAgTXVsdGlzZXRzIGFyZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQgaWYgdGhlaXIgc2l6ZXMgYXJlIGVxdWFsLCBhbmQgaWYKKyAgICogIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgY29tcGFyZSBlcXVhbC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgbXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBNdWx0aXNldCBvcmRlcmluZyByZWxhdGlvbi4KKyAgICogIEBwYXJhbSAgeCAgQSAlbXVsdGlzZXQuCisgICAqICBAcGFyYW0gIHkgIEEgJW11bHRpc2V0IG9mIHRoZSBzYW1lIHR5cGUgYXMgQGEgeC4KKyAgICogIEByZXR1cm4gIFRydWUgaWZmIEBhIHggaXMgbGV4aWNvZ3JhcGhpY2FsbHkgbGVzcyB0aGFuIEBhIHkuCisgICAqCisgICAqICBUaGlzIGlzIGEgdG90YWwgb3JkZXJpbmcgcmVsYXRpb24uICBJdCBpcyBsaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlCisgICAqICBtYXBzLiAgVGhlIGVsZW1lbnRzIG11c3QgYmUgY29tcGFyYWJsZSB3aXRoIEBjIDwuCisgICAqCisgICAqICBTZWUgc3RkOjpsZXhpY29ncmFwaGljYWxfY29tcGFyZSgpIGZvciBob3cgdGhlIGRldGVybWluYXRpb24gaXMgbWFkZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBtdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jPiYgX194LAorCSAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01fdDsgfQorCisgIC8vLyAgUmV0dXJucyAhKHggPT0geSkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQorCisgIC8vLyAgUmV0dXJucyB5IDwgeC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKKwkgICAgICBjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KKworICAvLy8gIFJldHVybnMgISh5IDwgeCkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgbXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KKworICAvLy8gIFJldHVybnMgISh4IDwgeSkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgbXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KKworICAvLy8gU2VlIHN0ZDo6bXVsdGlzZXQ6OnN3YXAoKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAobXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKwkgbXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworX0dMSUJDWFhfRU5EX05FU1RFRF9OQU1FU1BBQ0UKKworI2VuZGlmIC8qIF9TVExfTVVMVElTRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF9udW1lcmljLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3RsX251bWVyaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWRkZGY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF9udW1lcmljLmgKQEAgLTAsMCArMSwzODAgQEAKKy8vIE51bWVyaWMgZnVuY3Rpb25zIGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5NworICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIHN0bF9udW1lcmljLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfU1RMX05VTUVSSUNfSAorI2RlZmluZSBfU1RMX05VTUVSSUNfSCAxCisKKyNpbmNsdWRlIDxiaXRzL2NvbmNlcHRfY2hlY2suaD4KKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorI2luY2x1ZGUgPGJpdHMvbW92ZS5oPiAvLyBGb3IgX0dMSUJDWFhfTU9WRQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvKioKKyAgICogIEBicmllZiAgQ3JlYXRlIGEgcmFuZ2Ugb2Ygc2VxdWVudGlhbGx5IGluY3JlYXNpbmcgdmFsdWVzLgorICAgKgorICAgKiAgRm9yIGVhY2ggZWxlbWVudCBpbiB0aGUgcmFuZ2UgQHAgW2ZpcnN0LGxhc3QpIGFzc2lnbnMgQHAgdmFsdWUgYW5kCisgICAqICBpbmNyZW1lbnRzIEBwIHZhbHVlIGFzIGlmIGJ5IEBwICsrdmFsdWUuCisgICAqCisgICAqICBAcGFyYW0gIGZpcnN0ICBTdGFydCBvZiByYW5nZS4KKyAgICogIEBwYXJhbSAgbGFzdCAgRW5kIG9mIHJhbmdlLgorICAgKiAgQHBhcmFtICB2YWx1ZSAgU3RhcnRpbmcgdmFsdWUuCisgICAqICBAcmV0dXJuICBOb3RoaW5nLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICBpb3RhKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9UcCBfX3ZhbHVlKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Db252ZXJ0aWJsZUNvbmNlcHQ8X1RwLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIGZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQorCXsKKwkgICpfX2ZpcnN0ID0gX192YWx1ZTsKKwkgICsrX192YWx1ZTsKKwl9CisgICAgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZgorCitfR0xJQkNYWF9CRUdJTl9ORVNURURfTkFNRVNQQUNFKHN0ZCwgX0dMSUJDWFhfU1REX1ApCisKKyAgLyoqCisgICAqICBAYnJpZWYgIEFjY3VtdWxhdGUgdmFsdWVzIGluIGEgcmFuZ2UuCisgICAqCisgICAqICBBY2N1bXVsYXRlcyB0aGUgdmFsdWVzIGluIHRoZSByYW5nZSBbZmlyc3QsbGFzdCkgdXNpbmcgb3BlcmF0b3IrKCkuICBUaGUKKyAgICogIGluaXRpYWwgdmFsdWUgaXMgQGEgaW5pdC4gIFRoZSB2YWx1ZXMgYXJlIHByb2Nlc3NlZCBpbiBvcmRlci4KKyAgICoKKyAgICogIEBwYXJhbSAgZmlyc3QgIFN0YXJ0IG9mIHJhbmdlLgorICAgKiAgQHBhcmFtICBsYXN0ICBFbmQgb2YgcmFuZ2UuCisgICAqICBAcGFyYW0gIGluaXQgIFN0YXJ0aW5nIHZhbHVlIHRvIGFkZCBvdGhlciB2YWx1ZXMgdG8uCisgICAqICBAcmV0dXJuICBUaGUgZmluYWwgc3VtLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgYWNjdW11bGF0ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9UcCBfX2luaXQpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIGZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQorCV9faW5pdCA9IF9faW5pdCArICpfX2ZpcnN0OworICAgICAgcmV0dXJuIF9faW5pdDsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIEFjY3VtdWxhdGUgdmFsdWVzIGluIGEgcmFuZ2Ugd2l0aCBvcGVyYXRpb24uCisgICAqCisgICAqICBBY2N1bXVsYXRlcyB0aGUgdmFsdWVzIGluIHRoZSByYW5nZSBbZmlyc3QsbGFzdCkgdXNpbmcgdGhlIGZ1bmN0aW9uCisgICAqICBvYmplY3QgQGEgYmluYXJ5X29wLiAgVGhlIGluaXRpYWwgdmFsdWUgaXMgQGEgaW5pdC4gIFRoZSB2YWx1ZXMgYXJlCisgICAqICBwcm9jZXNzZWQgaW4gb3JkZXIuCisgICAqCisgICAqICBAcGFyYW0gIGZpcnN0ICBTdGFydCBvZiByYW5nZS4KKyAgICogIEBwYXJhbSAgbGFzdCAgRW5kIG9mIHJhbmdlLgorICAgKiAgQHBhcmFtICBpbml0ICBTdGFydGluZyB2YWx1ZSB0byBhZGQgb3RoZXIgdmFsdWVzIHRvLgorICAgKiAgQHBhcmFtICBiaW5hcnlfb3AgIEZ1bmN0aW9uIG9iamVjdCB0byBhY2N1bXVsYXRlIHdpdGguCisgICAqICBAcmV0dXJuICBUaGUgZmluYWwgc3VtLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0JpbmFyeU9wZXJhdGlvbj4KKyAgICBpbmxpbmUgX1RwCisgICAgYWNjdW11bGF0ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9UcCBfX2luaXQsCisJICAgICAgIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3ApCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIGZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQorCV9faW5pdCA9IF9fYmluYXJ5X29wKF9faW5pdCwgKl9fZmlyc3QpOworICAgICAgcmV0dXJuIF9faW5pdDsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIENvbXB1dGUgaW5uZXIgcHJvZHVjdCBvZiB0d28gcmFuZ2VzLgorICAgKgorICAgKiAgU3RhcnRpbmcgd2l0aCBhbiBpbml0aWFsIHZhbHVlIG9mIEBhIGluaXQsIG11bHRpcGxpZXMgc3VjY2Vzc2l2ZQorICAgKiAgZWxlbWVudHMgZnJvbSB0aGUgdHdvIHJhbmdlcyBhbmQgYWRkcyBlYWNoIHByb2R1Y3QgaW50byB0aGUgYWNjdW11bGF0ZWQKKyAgICogIHZhbHVlIHVzaW5nIG9wZXJhdG9yKygpLiAgVGhlIHZhbHVlcyBpbiB0aGUgcmFuZ2VzIGFyZSBwcm9jZXNzZWQgaW4KKyAgICogIG9yZGVyLgorICAgKgorICAgKiAgQHBhcmFtICBmaXJzdDEgIFN0YXJ0IG9mIHJhbmdlIDEuCisgICAqICBAcGFyYW0gIGxhc3QxICBFbmQgb2YgcmFuZ2UgMS4KKyAgICogIEBwYXJhbSAgZmlyc3QyICBTdGFydCBvZiByYW5nZSAyLgorICAgKiAgQHBhcmFtICBpbml0ICBTdGFydGluZyB2YWx1ZSB0byBhZGQgb3RoZXIgdmFsdWVzIHRvLgorICAgKiAgQHJldHVybiAgVGhlIGZpbmFsIGlubmVyIHByb2R1Y3QuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMiwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICBpbm5lcl9wcm9kdWN0KF9JbnB1dEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEsCisJCSAgX0lucHV0SXRlcmF0b3IyIF9fZmlyc3QyLCBfVHAgX19pbml0KQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yMj4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdDEsIF9fbGFzdDEpOworCisgICAgICBmb3IgKDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKKwlfX2luaXQgPSBfX2luaXQgKyAoKl9fZmlyc3QxICogKl9fZmlyc3QyKTsKKyAgICAgIHJldHVybiBfX2luaXQ7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBDb21wdXRlIGlubmVyIHByb2R1Y3Qgb2YgdHdvIHJhbmdlcy4KKyAgICoKKyAgICogIFN0YXJ0aW5nIHdpdGggYW4gaW5pdGlhbCB2YWx1ZSBvZiBAYSBpbml0LCBhcHBsaWVzIEBhIGJpbmFyeV9vcDIgdG8KKyAgICogIHN1Y2Nlc3NpdmUgZWxlbWVudHMgZnJvbSB0aGUgdHdvIHJhbmdlcyBhbmQgYWNjdW11bGF0ZXMgZWFjaCByZXN1bHQgaW50bworICAgKiAgdGhlIGFjY3VtdWxhdGVkIHZhbHVlIHVzaW5nIEBhIGJpbmFyeV9vcDEuICBUaGUgdmFsdWVzIGluIHRoZSByYW5nZXMgYXJlCisgICAqICBwcm9jZXNzZWQgaW4gb3JkZXIuCisgICAqCisgICAqICBAcGFyYW0gIGZpcnN0MSAgU3RhcnQgb2YgcmFuZ2UgMS4KKyAgICogIEBwYXJhbSAgbGFzdDEgIEVuZCBvZiByYW5nZSAxLgorICAgKiAgQHBhcmFtICBmaXJzdDIgIFN0YXJ0IG9mIHJhbmdlIDIuCisgICAqICBAcGFyYW0gIGluaXQgIFN0YXJ0aW5nIHZhbHVlIHRvIGFkZCBvdGhlciB2YWx1ZXMgdG8uCisgICAqICBAcGFyYW0gIGJpbmFyeV9vcDEgIEZ1bmN0aW9uIG9iamVjdCB0byBhY2N1bXVsYXRlIHdpdGguCisgICAqICBAcGFyYW0gIGJpbmFyeV9vcDIgIEZ1bmN0aW9uIG9iamVjdCB0byBhcHBseSB0byBwYWlycyBvZiBpbnB1dCB2YWx1ZXMuCisgICAqICBAcmV0dXJuICBUaGUgZmluYWwgaW5uZXIgcHJvZHVjdC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0JpbmFyeU9wZXJhdGlvbjEsIHR5cGVuYW1lIF9CaW5hcnlPcGVyYXRpb24yPgorICAgIGlubGluZSBfVHAKKyAgICBpbm5lcl9wcm9kdWN0KF9JbnB1dEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEsCisJCSAgX0lucHV0SXRlcmF0b3IyIF9fZmlyc3QyLCBfVHAgX19pbml0LAorCQkgIF9CaW5hcnlPcGVyYXRpb24xIF9fYmluYXJ5X29wMSwKKwkJICBfQmluYXJ5T3BlcmF0aW9uMiBfX2JpbmFyeV9vcDIpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IyPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MSwgX19sYXN0MSk7CisKKyAgICAgIGZvciAoOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQorCV9faW5pdCA9IF9fYmluYXJ5X29wMShfX2luaXQsIF9fYmluYXJ5X29wMigqX19maXJzdDEsICpfX2ZpcnN0MikpOworICAgICAgcmV0dXJuIF9faW5pdDsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFJldHVybiBsaXN0IG9mIHBhcnRpYWwgc3VtcworICAgKgorICAgKiAgQWNjdW11bGF0ZXMgdGhlIHZhbHVlcyBpbiB0aGUgcmFuZ2UgW2ZpcnN0LGxhc3QpIHVzaW5nIG9wZXJhdG9yKygpLgorICAgKiAgQXMgZWFjaCBzdWNjZXNzaXZlIGlucHV0IHZhbHVlIGlzIGFkZGVkIGludG8gdGhlIHRvdGFsLCB0aGF0IHBhcnRpYWwgc3VtCisgICAqICBpcyB3cml0dGVuIHRvIEBhIHJlc3VsdC4gIFRoZXJlZm9yZSwgdGhlIGZpcnN0IHZhbHVlIGluIHJlc3VsdCBpcyB0aGUKKyAgICogIGZpcnN0IHZhbHVlIG9mIHRoZSBpbnB1dCwgdGhlIHNlY29uZCB2YWx1ZSBpbiByZXN1bHQgaXMgdGhlIHN1bSBvZiB0aGUKKyAgICogIGZpcnN0IGFuZCBzZWNvbmQgaW5wdXQgdmFsdWVzLCBhbmQgc28gb24uCisgICAqCisgICAqICBAcGFyYW0gIGZpcnN0ICBTdGFydCBvZiBpbnB1dCByYW5nZS4KKyAgICogIEBwYXJhbSAgbGFzdCAgRW5kIG9mIGlucHV0IHJhbmdlLgorICAgKiAgQHBhcmFtICByZXN1bHQgIE91dHB1dCB0byB3cml0ZSBzdW1zIHRvLgorICAgKiAgQHJldHVybiAgSXRlcmF0b3IgcG9pbnRpbmcganVzdCBiZXlvbmQgdGhlIHZhbHVlcyB3cml0dGVuIHRvIHJlc3VsdC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3I+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgcGFydGlhbF9zdW0oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQlfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCXJldHVybiBfX3Jlc3VsdDsKKyAgICAgIF9WYWx1ZVR5cGUgX192YWx1ZSA9ICpfX2ZpcnN0OworICAgICAgKl9fcmVzdWx0ID0gX192YWx1ZTsKKyAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQorCXsKKwkgIF9fdmFsdWUgPSBfX3ZhbHVlICsgKl9fZmlyc3Q7CisJICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CisJfQorICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBSZXR1cm4gbGlzdCBvZiBwYXJ0aWFsIHN1bXMKKyAgICoKKyAgICogIEFjY3VtdWxhdGVzIHRoZSB2YWx1ZXMgaW4gdGhlIHJhbmdlIFtmaXJzdCxsYXN0KSB1c2luZyBvcGVyYXRvcisoKS4KKyAgICogIEFzIGVhY2ggc3VjY2Vzc2l2ZSBpbnB1dCB2YWx1ZSBpcyBhZGRlZCBpbnRvIHRoZSB0b3RhbCwgdGhhdCBwYXJ0aWFsIHN1bQorICAgKiAgaXMgd3JpdHRlbiB0byBAYSByZXN1bHQuICBUaGVyZWZvcmUsIHRoZSBmaXJzdCB2YWx1ZSBpbiByZXN1bHQgaXMgdGhlCisgICAqICBmaXJzdCB2YWx1ZSBvZiB0aGUgaW5wdXQsIHRoZSBzZWNvbmQgdmFsdWUgaW4gcmVzdWx0IGlzIHRoZSBzdW0gb2YgdGhlCisgICAqICBmaXJzdCBhbmQgc2Vjb25kIGlucHV0IHZhbHVlcywgYW5kIHNvIG9uLgorICAgKgorICAgKiAgQHBhcmFtICBmaXJzdCAgU3RhcnQgb2YgaW5wdXQgcmFuZ2UuCisgICAqICBAcGFyYW0gIGxhc3QgIEVuZCBvZiBpbnB1dCByYW5nZS4KKyAgICogIEBwYXJhbSAgcmVzdWx0ICBPdXRwdXQgdG8gd3JpdGUgc3VtcyB0by4KKyAgICogIEByZXR1cm4gIEl0ZXJhdG9yIHBvaW50aW5nIGp1c3QgYmV5b25kIHRoZSB2YWx1ZXMgd3JpdHRlbiB0byByZXN1bHQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIF9CaW5hcnlPcGVyYXRpb24+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgcGFydGlhbF9zdW0oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQlfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3ApCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCXJldHVybiBfX3Jlc3VsdDsKKyAgICAgIF9WYWx1ZVR5cGUgX192YWx1ZSA9ICpfX2ZpcnN0OworICAgICAgKl9fcmVzdWx0ID0gX192YWx1ZTsKKyAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQorCXsKKwkgIF9fdmFsdWUgPSBfX2JpbmFyeV9vcChfX3ZhbHVlLCAqX19maXJzdCk7CisJICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CisJfQorICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBSZXR1cm4gZGlmZmVyZW5jZXMgYmV0d2VlbiBhZGphY2VudCB2YWx1ZXMuCisgICAqCisgICAqICBDb21wdXRlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFkamFjZW50IHZhbHVlcyBpbiB0aGUgcmFuZ2UKKyAgICogIFtmaXJzdCxsYXN0KSB1c2luZyBvcGVyYXRvci0oKSBhbmQgd3JpdGVzIHRoZSByZXN1bHQgdG8gQGEgcmVzdWx0LgorICAgKgorICAgKiAgQHBhcmFtICBmaXJzdCAgU3RhcnQgb2YgaW5wdXQgcmFuZ2UuCisgICAqICBAcGFyYW0gIGxhc3QgIEVuZCBvZiBpbnB1dCByYW5nZS4KKyAgICogIEBwYXJhbSAgcmVzdWx0ICBPdXRwdXQgdG8gd3JpdGUgc3VtcyB0by4KKyAgICogIEByZXR1cm4gIEl0ZXJhdG9yIHBvaW50aW5nIGp1c3QgYmV5b25kIHRoZSB2YWx1ZXMgd3JpdHRlbiB0byByZXN1bHQuCisgICAqCisgICAqICBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAqICBEUiA1MzkuIHBhcnRpYWxfc3VtIGFuZCBhZGphY2VudF9kaWZmZXJlbmNlIHNob3VsZCBtZW50aW9uIHJlcXVpcmVtZW50cworICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvcj4KKyAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICBhZGphY2VudF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCisJCQlfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X091dHB1dEl0ZXJhdG9yLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCisJcmV0dXJuIF9fcmVzdWx0OworICAgICAgX1ZhbHVlVHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CisgICAgICAqX19yZXN1bHQgPSBfX3ZhbHVlOworICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCisJeworCSAgX1ZhbHVlVHlwZSBfX3RtcCA9ICpfX2ZpcnN0OworCSAgKisrX19yZXN1bHQgPSBfX3RtcCAtIF9fdmFsdWU7CisJICBfX3ZhbHVlID0gX0dMSUJDWFhfTU9WRShfX3RtcCk7CisJfQorICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBSZXR1cm4gZGlmZmVyZW5jZXMgYmV0d2VlbiBhZGphY2VudCB2YWx1ZXMuCisgICAqCisgICAqICBDb21wdXRlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFkamFjZW50IHZhbHVlcyBpbiB0aGUgcmFuZ2UKKyAgICogIFtmaXJzdCxsYXN0KSB1c2luZyB0aGUgZnVuY3Rpb24gb2JqZWN0IEBhIGJpbmFyeV9vcCBhbmQgd3JpdGVzIHRoZQorICAgKiAgcmVzdWx0IHRvIEBhIHJlc3VsdC4KKyAgICoKKyAgICogIEBwYXJhbSAgZmlyc3QgIFN0YXJ0IG9mIGlucHV0IHJhbmdlLgorICAgKiAgQHBhcmFtICBsYXN0ICBFbmQgb2YgaW5wdXQgcmFuZ2UuCisgICAqICBAcGFyYW0gIHJlc3VsdCAgT3V0cHV0IHRvIHdyaXRlIHN1bXMgdG8uCisgICAqICBAcmV0dXJuICBJdGVyYXRvciBwb2ludGluZyBqdXN0IGJleW9uZCB0aGUgdmFsdWVzIHdyaXR0ZW4gdG8gcmVzdWx0LgorICAgKgorICAgKiAgX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgKiAgRFIgNTM5LiBwYXJ0aWFsX3N1bSBhbmQgYWRqYWNlbnRfZGlmZmVyZW5jZSBzaG91bGQgbWVudGlvbiByZXF1aXJlbWVudHMKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsCisJICAgdHlwZW5hbWUgX0JpbmFyeU9wZXJhdGlvbj4KKyAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICBhZGphY2VudF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJCV9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X091dHB1dEl0ZXJhdG9yLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCisJcmV0dXJuIF9fcmVzdWx0OworICAgICAgX1ZhbHVlVHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CisgICAgICAqX19yZXN1bHQgPSBfX3ZhbHVlOworICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCisJeworCSAgX1ZhbHVlVHlwZSBfX3RtcCA9ICpfX2ZpcnN0OworCSAgKisrX19yZXN1bHQgPSBfX2JpbmFyeV9vcChfX3RtcCwgX192YWx1ZSk7CisJICBfX3ZhbHVlID0gX0dMSUJDWFhfTU9WRShfX3RtcCk7CisJfQorICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CisgICAgfQorCitfR0xJQkNYWF9FTkRfTkVTVEVEX05BTUVTUEFDRQorCisjZW5kaWYgLyogX1NUTF9OVU1FUklDX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfcGFpci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF9wYWlyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNkZDE2NgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfcGFpci5oCkBAIC0wLDAgKzEsMjU5IEBACisvLyBQYWlyIGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5NworICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIHN0bF9wYWlyLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfU1RMX1BBSVJfSAorI2RlZmluZSBfU1RMX1BBSVJfSCAxCisKKyNpbmNsdWRlIDxiaXRzL21vdmUuaD4gLy8gZm9yIHN0ZDo6bW92ZSAvIHN0ZDo6Zm9yd2FyZCwgc3RkOjpkZWNheSwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0ZDo6c3dhcAorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNlbmRpZgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8vLyBwYWlyIGhvbGRzIHR3byBvYmplY3RzIG9mIGFyYml0cmFyeSB0eXBlLgorICB0ZW1wbGF0ZTxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KKyAgICBzdHJ1Y3QgcGFpcgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7ICAgIC8vLzwgIEBjIGZpcnN0X3R5cGUgaXMgdGhlIGZpcnN0IGJvdW5kIHR5cGUKKyAgICAgIHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOyAgIC8vLzwgIEBjIHNlY29uZF90eXBlIGlzIHRoZSBzZWNvbmQgYm91bmQgdHlwZQorCisgICAgICBfVDEgZmlyc3Q7ICAgICAgICAgICAgICAgICAvLy88IEBjIGZpcnN0IGlzIGEgY29weSBvZiB0aGUgZmlyc3Qgb2JqZWN0CisgICAgICBfVDIgc2Vjb25kOyAgICAgICAgICAgICAgICAvLy88IEBjIHNlY29uZCBpcyBhIGNvcHkgb2YgdGhlIHNlY29uZCBvYmplY3QKKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMjY1LiAgc3RkOjpwYWlyOjpwYWlyKCkgZWZmZWN0cyBvdmVybHkgcmVzdHJpY3RpdmUKKyAgICAgIC8qKiBUaGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBjcmVhdGVzIEBjIGZpcnN0IGFuZCBAYyBzZWNvbmQgdXNpbmcgdGhlaXIKKyAgICAgICAqICByZXNwZWN0aXZlIGRlZmF1bHQgY29uc3RydWN0b3JzLiAgKi8KKyAgICAgIHBhaXIoKQorICAgICAgOiBmaXJzdCgpLCBzZWNvbmQoKSB7IH0KKworICAgICAgLyoqIFR3byBvYmplY3RzIG1heSBiZSBwYXNzZWQgdG8gYSBAYyBwYWlyIGNvbnN0cnVjdG9yIHRvIGJlIGNvcGllZC4gICovCisgICAgICBwYWlyKGNvbnN0IF9UMSYgX19hLCBjb25zdCBfVDImIF9fYikKKyAgICAgIDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikgeyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgLy8gRFIgODExLgorICAgICAgdGVtcGxhdGU8Y2xhc3MgX1UxLCBjbGFzcyA9IHR5cGVuYW1lCisJICAgICAgIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfY29udmVydGlibGU8X1UxLCBfVDE+Ojp2YWx1ZT46OnR5cGU+CisgICAgICAgIHBhaXIoX1UxJiYgX194LCBjb25zdCBfVDImIF9feSkKKwk6IGZpcnN0KHN0ZDo6Zm9yd2FyZDxfVTE+KF9feCkpLAorCSAgc2Vjb25kKF9feSkgeyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9VMiwgY2xhc3MgPSB0eXBlbmFtZQorCSAgICAgICBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2NvbnZlcnRpYmxlPF9VMiwgX1QyPjo6dmFsdWU+Ojp0eXBlPgorICAgICAgICBwYWlyKGNvbnN0IF9UMSYgX194LCBfVTImJiBfX3kpCisJOiBmaXJzdChfX3gpLAorCSAgc2Vjb25kKHN0ZDo6Zm9yd2FyZDxfVTI+KF9feSkpIHsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfVTEsIGNsYXNzIF9VMiwgY2xhc3MgPSB0eXBlbmFtZQorCSAgICAgICBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2NvbnZlcnRpYmxlPF9VMSwgX1QxPjo6dmFsdWUKKwkJCSAgICAgICYmIHN0ZDo6aXNfY29udmVydGlibGU8X1UyLCBfVDI+Ojp2YWx1ZT46OnR5cGU+CisgICAgICAgIHBhaXIoX1UxJiYgX194LCBfVTImJiBfX3kpCisJOiBmaXJzdChzdGQ6OmZvcndhcmQ8X1UxPihfX3gpKSwKKwkgIHNlY29uZChzdGQ6OmZvcndhcmQ8X1UyPihfX3kpKSB7IH0KKyNlbmRpZgorCisgICAgICAvKiogVGhlcmUgaXMgYWxzbyBhIHRlbXBsYXRlZCBjb3B5IGN0b3IgZm9yIHRoZSBAYyBwYWlyIGNsYXNzIGl0c2VsZi4gICovCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfVTEsIGNsYXNzIF9VMj4KKyAgICAgICAgcGFpcihjb25zdCBwYWlyPF9VMSwgX1UyPiYgX19wKQorCTogZmlyc3QoX19wLmZpcnN0KSwKKwkgIHNlY29uZChfX3Auc2Vjb25kKSB7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfVTEsIGNsYXNzIF9VMj4KKyAgICAgICAgcGFpcihwYWlyPF9VMSwgX1UyPiYmIF9fcCkKKwk6IGZpcnN0KHN0ZDo6Zm9yd2FyZDxfVTE+KF9fcC5maXJzdCkpLAorCSAgc2Vjb25kKHN0ZDo6Zm9yd2FyZDxfVTI+KF9fcC5zZWNvbmQpKSB7IH0KKworICAgICAgcGFpciYKKyAgICAgIG9wZXJhdG9yPShwYWlyJiYgX19wKQorICAgICAgeyAKKwlmaXJzdCA9IHN0ZDo6bW92ZShfX3AuZmlyc3QpOworCXNlY29uZCA9IHN0ZDo6bW92ZShfX3Auc2Vjb25kKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9VMSwgY2xhc3MgX1UyPgorICAgICAgICBwYWlyJgorICAgICAgICBvcGVyYXRvcj0ocGFpcjxfVTEsIF9VMj4mJiBfX3ApCisJeworCSAgZmlyc3QgPSBzdGQ6Om1vdmUoX19wLmZpcnN0KTsKKwkgIHNlY29uZCA9IHN0ZDo6bW92ZShfX3Auc2Vjb25kKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAocGFpciYgX19wKQorICAgICAgeworCXVzaW5nIHN0ZDo6c3dhcDsKKwlzd2FwKGZpcnN0LCBfX3AuZmlyc3QpOworCXN3YXAoc2Vjb25kLCBfX3Auc2Vjb25kKTsJCisgICAgICB9CisjZW5kaWYKKyAgICB9OworCisgIC8vLyBUd28gcGFpcnMgb2YgdGhlIHNhbWUgdHlwZSBhcmUgZXF1YWwgaWZmIHRoZWlyIG1lbWJlcnMgYXJlIGVxdWFsLgorICB0ZW1wbGF0ZTxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkKKyAgICB7IHJldHVybiBfX3guZmlyc3QgPT0gX195LmZpcnN0ICYmIF9feC5zZWNvbmQgPT0gX195LnNlY29uZDsgfQorCisgIC8vLyA8aHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL21hbnVhbC91dGlsaXRpZXMuaHRtbD4KKyAgdGVtcGxhdGU8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkKKyAgICB7IHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmlyc3QKKwkgICAgIHx8ICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNlY29uZCA8IF9feS5zZWNvbmQpOyB9CisKKyAgLy8vIFVzZXMgQGMgb3BlcmF0b3I9PSB0byBmaW5kIHRoZSByZXN1bHQuCisgIHRlbXBsYXRlPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworICAvLy8gVXNlcyBAYyBvcGVyYXRvcjwgdG8gZmluZCB0aGUgcmVzdWx0LgorICB0ZW1wbGF0ZTxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQorICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQorCisgIC8vLyBVc2VzIEBjIG9wZXJhdG9yPCB0byBmaW5kIHRoZSByZXN1bHQuCisgIHRlbXBsYXRlPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQorICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQorCisgIC8vLyBVc2VzIEBjIG9wZXJhdG9yPCB0byBmaW5kIHRoZSByZXN1bHQuCisgIHRlbXBsYXRlPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQorICAgIHsgcmV0dXJuICEoX194IDwgX195KTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgLy8vIFNlZSBzdGQ6OnBhaXI6OnN3YXAoKS4KKyAgLy8gTm90ZTogIG5vIHN0ZDo6c3dhcCBvdmVybG9hZHMgaW4gQysrMDMgbW9kZSwgdGhpcyBoYXMgcGVyZm9ybWFuY2UKKyAgLy8gICAgICAgIGltcGxpY2F0aW9ucywgc2VlLCBlZywgbGlic3RkYysrLzM4NDY2LgorICB0ZW1wbGF0ZTxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAocGFpcjxfVDEsIF9UMj4mIF9feCwgcGFpcjxfVDEsIF9UMj4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKyNlbmRpZgorCisgIC8qKgorICAgKiAgQGJyaWVmIEEgY29udmVuaWVuY2Ugd3JhcHBlciBmb3IgY3JlYXRpbmcgYSBwYWlyIGZyb20gdHdvIG9iamVjdHMuCisgICAqICBAcGFyYW0gIHggIFRoZSBmaXJzdCBvYmplY3QuCisgICAqICBAcGFyYW0gIHkgIFRoZSBzZWNvbmQgb2JqZWN0LgorICAgKiAgQHJldHVybiAgIEEgbmV3bHktY29uc3RydWN0ZWQgcGFpcjw+IG9iamVjdCBvZiB0aGUgYXBwcm9wcmlhdGUgdHlwZS4KKyAgICoKKyAgICogIFRoZSBzdGFuZGFyZCByZXF1aXJlcyB0aGF0IHRoZSBvYmplY3RzIGJlIHBhc3NlZCBieSByZWZlcmVuY2UtdG8tY29uc3QsCisgICAqICBidXQgTFdHIGlzc3VlICMxODEgc2F5cyB0aGV5IHNob3VsZCBiZSBwYXNzZWQgYnkgY29uc3QgdmFsdWUuICBXZSBmb2xsb3cKKyAgICogIHRoZSBMV0cgYnkgZGVmYXVsdC4KKyAgICovCisgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgLy8gMTgxLiAgbWFrZV9wYWlyKCkgdW5pbnRlbmRlZCBiZWhhdmlvcgorI2lmbmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICB0ZW1wbGF0ZTxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KKyAgICBpbmxpbmUgcGFpcjxfVDEsIF9UMj4KKyAgICBtYWtlX3BhaXIoX1QxIF9feCwgX1QyIF9feSkKKyAgICB7IHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7IH0KKyNlbHNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyByZWZlcmVuY2Vfd3JhcHBlcjsKKworICAvLyBIZWxwZXIgd2hpY2ggYWRkcyBhIHJlZmVyZW5jZSB0byBhIHR5cGUgd2hlbiBnaXZlbiBhIHJlZmVyZW5jZV93cmFwcGVyCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19zdHJpcF9yZWZlcmVuY2Vfd3JhcHBlcgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1RwIF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19zdHJpcF9yZWZlcmVuY2Vfd3JhcHBlcjxyZWZlcmVuY2Vfd3JhcHBlcjxfVHA+ID4KKyAgICB7CisgICAgICB0eXBlZGVmIF9UcCYgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX3N0cmlwX3JlZmVyZW5jZV93cmFwcGVyPGNvbnN0IHJlZmVyZW5jZV93cmFwcGVyPF9UcD4gPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1RwJiBfX3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fZGVjYXlfYW5kX3N0cmlwCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmlwX3JlZmVyZW5jZV93cmFwcGVyPAorCXR5cGVuYW1lIGRlY2F5PF9UcD46OnR5cGU+OjpfX3R5cGUgX190eXBlOworICAgIH07CisKKyAgLy8gTkI6IERSIDcwNi4KKyAgdGVtcGxhdGU8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CisgICAgaW5saW5lIHBhaXI8dHlwZW5hbWUgX19kZWNheV9hbmRfc3RyaXA8X1QxPjo6X190eXBlLAorCQl0eXBlbmFtZSBfX2RlY2F5X2FuZF9zdHJpcDxfVDI+OjpfX3R5cGU+CisgICAgbWFrZV9wYWlyKF9UMSYmIF9feCwgX1QyJiYgX195KQorICAgIHsKKyAgICAgIHJldHVybiBwYWlyPHR5cGVuYW1lIF9fZGVjYXlfYW5kX3N0cmlwPF9UMT46Ol9fdHlwZSwKKwkgICAgICAgICAgdHlwZW5hbWUgX19kZWNheV9hbmRfc3RyaXA8X1QyPjo6X190eXBlPgorCShzdGQ6OmZvcndhcmQ8X1QxPihfX3gpLCBzdGQ6OmZvcndhcmQ8X1QyPihfX3kpKTsKKyAgICB9CisjZW5kaWYKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYgLyogX1NUTF9QQUlSX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfcXVldWUuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfcXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNThmMWI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF9xdWV1ZS5oCkBAIC0wLDAgKzEsNTY0IEBACisvLyBRdWV1ZSBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBzdGxfcXVldWUuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWZuZGVmIF9TVExfUVVFVUVfSAorI2RlZmluZSBfU1RMX1FVRVVFX0ggMQorCisjaW5jbHVkZSA8Yml0cy9jb25jZXB0X2NoZWNrLmg+CisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvKioKKyAgICogIEBicmllZiAgQSBzdGFuZGFyZCBjb250YWluZXIgZ2l2aW5nIEZJRk8gYmVoYXZpb3IuCisgICAqCisgICAqICBAaW5ncm91cCBzZXF1ZW5jZXMKKyAgICoKKyAgICogIE1lZXRzIG1hbnkgb2YgdGhlIHJlcXVpcmVtZW50cyBvZiBhCisgICAqICA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2NSI+Y29udGFpbmVyPC9hPiwKKyAgICogIGJ1dCBkb2VzIG5vdCBkZWZpbmUgYW55dGhpbmcgdG8gZG8gd2l0aCBpdGVyYXRvcnMuICBWZXJ5IGZldyBvZiB0aGUKKyAgICogIG90aGVyIHN0YW5kYXJkIGNvbnRhaW5lciBpbnRlcmZhY2VzIGFyZSBkZWZpbmVkLgorICAgKgorICAgKiAgVGhpcyBpcyBub3QgYSB0cnVlIGNvbnRhaW5lciwgYnV0IGFuIEBlIGFkYXB0b3IuICBJdCBob2xkcyBhbm90aGVyCisgICAqICBjb250YWluZXIsIGFuZCBwcm92aWRlcyBhIHdyYXBwZXIgaW50ZXJmYWNlIHRvIHRoYXQgY29udGFpbmVyLiAgVGhlCisgICAqICB3cmFwcGVyIGlzIHdoYXQgZW5mb3JjZXMgc3RyaWN0IGZpcnN0LWluLWZpcnN0LW91dCAlcXVldWUgYmVoYXZpb3IuCisgICAqCisgICAqICBUaGUgc2Vjb25kIHRlbXBsYXRlIHBhcmFtZXRlciBkZWZpbmVzIHRoZSB0eXBlIG9mIHRoZSB1bmRlcmx5aW5nCisgICAqICBzZXF1ZW5jZS9jb250YWluZXIuICBJdCBkZWZhdWx0cyB0byBzdGQ6OmRlcXVlLCBidXQgaXQgY2FuIGJlIGFueSB0eXBlCisgICAqICB0aGF0IHN1cHBvcnRzIEBjIGZyb250LCBAYyBiYWNrLCBAYyBwdXNoX2JhY2ssIGFuZCBAYyBwb3BfZnJvbnQsCisgICAqICBzdWNoIGFzIHN0ZDo6bGlzdCBvciBhbiBhcHByb3ByaWF0ZSB1c2VyLWRlZmluZWQgdHlwZS4KKyAgICoKKyAgICogIE1lbWJlcnMgbm90IGZvdW5kIGluIEBhIG5vcm1hbCBjb250YWluZXJzIGFyZSBAYyBjb250YWluZXJfdHlwZSwKKyAgICogIHdoaWNoIGlzIGEgdHlwZWRlZiBmb3IgdGhlIHNlY29uZCBTZXF1ZW5jZSBwYXJhbWV0ZXIsIGFuZCBAYyBwdXNoIGFuZAorICAgKiAgQGMgcG9wLCB3aGljaCBhcmUgc3RhbmRhcmQgJXF1ZXVlL0ZJRk8gb3BlcmF0aW9ucy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfU2VxdWVuY2UgPSBkZXF1ZTxfVHA+ID4KKyAgICBjbGFzcyBxdWV1ZQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6dmFsdWVfdHlwZSBfU2VxdWVuY2VfdmFsdWVfdHlwZTsKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlcyhfVHAsIF9TR0lBc3NpZ25hYmxlQ29uY2VwdCkKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlcyhfU2VxdWVuY2UsIF9Gcm9udEluc2VydGlvblNlcXVlbmNlQ29uY2VwdCkKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlcyhfU2VxdWVuY2UsIF9CYWNrSW5zZXJ0aW9uU2VxdWVuY2VDb25jZXB0KQorICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzMihfVHAsIF9TZXF1ZW5jZV92YWx1ZV90eXBlLCBfU2FtZVR5cGVDb25jZXB0KQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfU2VxMT4KKyAgICAgICAgZnJpZW5kIGJvb2wKKyAgICAgICAgb3BlcmF0b3I9PShjb25zdCBxdWV1ZTxfVHAxLCBfU2VxMT4mLCBjb25zdCBxdWV1ZTxfVHAxLCBfU2VxMT4mKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1NlcTE+CisgICAgICAgIGZyaWVuZCBib29sCisgICAgICAgIG9wZXJhdG9yPChjb25zdCBxdWV1ZTxfVHAxLCBfU2VxMT4mLCBjb25zdCBxdWV1ZTxfVHAxLCBfU2VxMT4mKTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjp2YWx1ZV90eXBlICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6cmVmZXJlbmNlICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6Y29uc3RfcmVmZXJlbmNlICAgICAgICAgICBjb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6c2l6ZV90eXBlICAgICAgICAgICAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmICAgICAgICAgIF9TZXF1ZW5jZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfdHlwZTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgIC8qKgorICAgICAgICogICdjJyBpcyB0aGUgdW5kZXJseWluZyBjb250YWluZXIuICBNYWludGFpbmVycyB3b25kZXJpbmcgd2h5CisgICAgICAgKiAgdGhpcyBpc24ndCB1Z2xpZmllZCBhcyBwZXIgc3R5bGUgZ3VpZGVsaW5lcyBzaG91bGQgbm90ZSB0aGF0CisgICAgICAgKiAgdGhpcyBuYW1lIGlzIHNwZWNpZmllZCBpbiB0aGUgc3RhbmRhcmQsIFsyMy4yLjMuMV0uICAoV2h5PworICAgICAgICogIFByZXN1bWFibHkgZm9yIHRoZSBzYW1lIHJlYXNvbiB0aGF0IGl0J3MgcHJvdGVjdGVkIGluc3RlYWQKKyAgICAgICAqICBvZiBwcml2YXRlOiB0byBhbGxvdyBkZXJpdmF0aW9uLiAgQnV0IG5vbmUgb2YgdGhlIG90aGVyCisgICAgICAgKiAgY29udGFpbmVycyBhbGxvdyBmb3IgZGVyaXZhdGlvbi4gIE9kZC4pCisgICAgICAgKi8KKyAgICAgIF9TZXF1ZW5jZSBjOworCisgICAgcHVibGljOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBEZWZhdWx0IGNvbnN0cnVjdG9yIGNyZWF0ZXMgbm8gZWxlbWVudHMuCisgICAgICAgKi8KKyNpZm5kZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIGV4cGxpY2l0CisgICAgICBxdWV1ZShjb25zdCBfU2VxdWVuY2UmIF9fYyA9IF9TZXF1ZW5jZSgpKQorICAgICAgOiBjKF9fYykgeyB9CisjZWxzZQorICAgICAgZXhwbGljaXQKKyAgICAgIHF1ZXVlKGNvbnN0IF9TZXF1ZW5jZSYgX19jKQorICAgICAgOiBjKF9fYykgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBxdWV1ZShfU2VxdWVuY2UmJiBfX2MgPSBfU2VxdWVuY2UoKSkKKyAgICAgIDogYyhzdGQ6Om1vdmUoX19jKSkgeyB9CisKKyAgICAgIHF1ZXVlKHF1ZXVlJiYgX19xKQorICAgICAgOiBjKHN0ZDo6bW92ZShfX3EuYykpIHsgfQorCisgICAgICBxdWV1ZSYKKyAgICAgIG9wZXJhdG9yPShxdWV1ZSYmIF9fcSkKKyAgICAgIHsKKwljID0gc3RkOjptb3ZlKF9fcS5jKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyB0cnVlIGlmIHRoZSAlcXVldWUgaXMgZW1wdHkuCisgICAgICAgKi8KKyAgICAgIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGMuZW1wdHkoKTsgfQorCisgICAgICAvKiogIFJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgJXF1ZXVlLiAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBjLnNpemUoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgYXQgdGhlIGZpcnN0CisgICAgICAgKiAgZWxlbWVudCBvZiB0aGUgJXF1ZXVlLgorICAgICAgICovCisgICAgICByZWZlcmVuY2UKKyAgICAgIGZyb250KCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfbm9uZW1wdHkoKTsKKwlyZXR1cm4gYy5mcm9udCgpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmVmZXJlbmNlIHRvIHRoZSBkYXRhIGF0IHRoZSBmaXJzdAorICAgICAgICogIGVsZW1lbnQgb2YgdGhlICVxdWV1ZS4KKyAgICAgICAqLworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBmcm9udCgpIGNvbnN0CisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX25vbmVtcHR5KCk7CisJcmV0dXJuIGMuZnJvbnQoKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgcmVmZXJlbmNlIHRvIHRoZSBkYXRhIGF0IHRoZSBsYXN0CisgICAgICAgKiAgZWxlbWVudCBvZiB0aGUgJXF1ZXVlLgorICAgICAgICovCisgICAgICByZWZlcmVuY2UKKyAgICAgIGJhY2soKQorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19ub25lbXB0eSgpOworCXJldHVybiBjLmJhY2soKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJlZmVyZW5jZSB0byB0aGUgZGF0YSBhdCB0aGUgbGFzdAorICAgICAgICogIGVsZW1lbnQgb2YgdGhlICVxdWV1ZS4KKyAgICAgICAqLworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBiYWNrKCkgY29uc3QKKyAgICAgIHsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfbm9uZW1wdHkoKTsKKwlyZXR1cm4gYy5iYWNrKCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQWRkIGRhdGEgdG8gdGhlIGVuZCBvZiB0aGUgJXF1ZXVlLgorICAgICAgICogIEBwYXJhbSAgeCAgRGF0YSB0byBiZSBhZGRlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyBhIHR5cGljYWwgJXF1ZXVlIG9wZXJhdGlvbi4gIFRoZSBmdW5jdGlvbiBjcmVhdGVzIGFuCisgICAgICAgKiAgZWxlbWVudCBhdCB0aGUgZW5kIG9mIHRoZSAlcXVldWUgYW5kIGFzc2lnbnMgdGhlIGdpdmVuIGRhdGEKKyAgICAgICAqICB0byBpdC4gIFRoZSB0aW1lIGNvbXBsZXhpdHkgb2YgdGhlIG9wZXJhdGlvbiBkZXBlbmRzIG9uIHRoZQorICAgICAgICogIHVuZGVybHlpbmcgc2VxdWVuY2UuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHB1c2goY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeyBjLnB1c2hfYmFjayhfX3gpOyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdm9pZAorICAgICAgcHVzaCh2YWx1ZV90eXBlJiYgX194KQorICAgICAgeyBjLnB1c2hfYmFjayhzdGQ6Om1vdmUoX194KSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHZvaWQKKyAgICAgICAgZW1wbGFjZShfQXJncyYmLi4uIF9fYXJncykKKwl7IGMuZW1wbGFjZV9iYWNrKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZXMgZmlyc3QgZWxlbWVudC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyBhIHR5cGljYWwgJXF1ZXVlIG9wZXJhdGlvbi4gIEl0IHNocmlua3MgdGhlICVxdWV1ZSBieSBvbmUuCisgICAgICAgKiAgVGhlIHRpbWUgY29tcGxleGl0eSBvZiB0aGUgb3BlcmF0aW9uIGRlcGVuZHMgb24gdGhlIHVuZGVybHlpbmcKKyAgICAgICAqICBzZXF1ZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZSB0aGF0IG5vIGRhdGEgaXMgcmV0dXJuZWQsIGFuZCBpZiB0aGUgZmlyc3QgZWxlbWVudCdzCisgICAgICAgKiAgZGF0YSBpcyBuZWVkZWQsIGl0IHNob3VsZCBiZSByZXRyaWV2ZWQgYmVmb3JlIHBvcCgpIGlzCisgICAgICAgKiAgY2FsbGVkLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwb3AoKQorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19ub25lbXB0eSgpOworCWMucG9wX2Zyb250KCk7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdm9pZAorICAgICAgc3dhcChxdWV1ZSYgX19xKQorICAgICAgeyBjLnN3YXAoX19xLmMpOyB9CisjZW5kaWYKKyAgICB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBRdWV1ZSBlcXVhbGl0eSBjb21wYXJpc29uLgorICAgKiAgQHBhcmFtICB4ICBBICVxdWV1ZS4KKyAgICogIEBwYXJhbSAgeSAgQSAlcXVldWUgb2YgdGhlIHNhbWUgdHlwZSBhcyBAYSB4LgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZmYgdGhlIHNpemUgYW5kIGVsZW1lbnRzIG9mIHRoZSBxdWV1ZXMgYXJlIGVxdWFsLgorICAgKgorICAgKiAgVGhpcyBpcyBhbiBlcXVpdmFsZW5jZSByZWxhdGlvbi4gIENvbXBsZXhpdHkgYW5kIHNlbWFudGljcyBkZXBlbmQgb24gdGhlCisgICAqICB1bmRlcmx5aW5nIHNlcXVlbmNlIHR5cGUsIGJ1dCB0aGUgZXhwZWN0ZWQgcnVsZXMgYXJlOiAgdGhpcyByZWxhdGlvbiBpcworICAgKiAgbGluZWFyIGluIHRoZSBzaXplIG9mIHRoZSBzZXF1ZW5jZXMsIGFuZCBxdWV1ZXMgYXJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudAorICAgKiAgaWYgdGhlaXIgc2VxdWVuY2VzIGNvbXBhcmUgZXF1YWwuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1NlcT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgcXVldWU8X1RwLCBfU2VxPiYgX194LCBjb25zdCBxdWV1ZTxfVHAsIF9TZXE+JiBfX3kpCisgICAgeyByZXR1cm4gX194LmMgPT0gX195LmM7IH0KKworICAvKioKKyAgICogIEBicmllZiAgUXVldWUgb3JkZXJpbmcgcmVsYXRpb24uCisgICAqICBAcGFyYW0gIHggIEEgJXF1ZXVlLgorICAgKiAgQHBhcmFtICB5ICBBICVxdWV1ZSBvZiB0aGUgc2FtZSB0eXBlIGFzIEBhIHguCisgICAqICBAcmV0dXJuICBUcnVlIGlmZiBAYSB4IGlzIGxleGljb2dyYXBoaWNhbGx5IGxlc3MgdGhhbiBAYSB5LgorICAgKgorICAgKiAgVGhpcyBpcyBhbiB0b3RhbCBvcmRlcmluZyByZWxhdGlvbi4gIENvbXBsZXhpdHkgYW5kIHNlbWFudGljcworICAgKiAgZGVwZW5kIG9uIHRoZSB1bmRlcmx5aW5nIHNlcXVlbmNlIHR5cGUsIGJ1dCB0aGUgZXhwZWN0ZWQgcnVsZXMKKyAgICogIGFyZTogdGhpcyByZWxhdGlvbiBpcyBsaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlIHNlcXVlbmNlcywgdGhlCisgICAqICBlbGVtZW50cyBtdXN0IGJlIGNvbXBhcmFibGUgd2l0aCBAYyA8LCBhbmQKKyAgICogIHN0ZDo6bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKSBpcyB1c3VhbGx5IHVzZWQgdG8gbWFrZSB0aGUKKyAgICogIGRldGVybWluYXRpb24uCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1NlcT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBxdWV1ZTxfVHAsIF9TZXE+JiBfX3gsIGNvbnN0IHF1ZXVlPF9UcCwgX1NlcT4mIF9feSkKKyAgICB7IHJldHVybiBfX3guYyA8IF9feS5jOyB9CisKKyAgLy8vIEJhc2VkIG9uIG9wZXJhdG9yPT0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfU2VxPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBxdWV1ZTxfVHAsIF9TZXE+JiBfX3gsIGNvbnN0IHF1ZXVlPF9UcCwgX1NlcT4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CisKKyAgLy8vIEJhc2VkIG9uIG9wZXJhdG9yPAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9TZXE+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgcXVldWU8X1RwLCBfU2VxPiYgX194LCBjb25zdCBxdWV1ZTxfVHAsIF9TZXE+JiBfX3kpCisgICAgeyByZXR1cm4gX195IDwgX194OyB9CisKKyAgLy8vIEJhc2VkIG9uIG9wZXJhdG9yPAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9TZXE+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IHF1ZXVlPF9UcCwgX1NlcT4mIF9feCwgY29uc3QgcXVldWU8X1RwLCBfU2VxPiYgX195KQorICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQorCisgIC8vLyBCYXNlZCBvbiBvcGVyYXRvcjwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfU2VxPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBxdWV1ZTxfVHAsIF9TZXE+JiBfX3gsIGNvbnN0IHF1ZXVlPF9UcCwgX1NlcT4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1NlcT4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAocXVldWU8X1RwLCBfU2VxPiYgX194LCBxdWV1ZTxfVHAsIF9TZXE+JiBfX3kpCisgICAgeyBfX3guc3dhcChfX3kpOyB9CisjZW5kaWYKKworICAvKioKKyAgICogIEBicmllZiAgQSBzdGFuZGFyZCBjb250YWluZXIgYXV0b21hdGljYWxseSBzb3J0aW5nIGl0cyBjb250ZW50cy4KKyAgICoKKyAgICogIEBpbmdyb3VwIHNlcXVlbmNlcworICAgKgorICAgKiAgVGhpcyBpcyBub3QgYSB0cnVlIGNvbnRhaW5lciwgYnV0IGFuIEBlIGFkYXB0b3IuICBJdCBob2xkcworICAgKiAgYW5vdGhlciBjb250YWluZXIsIGFuZCBwcm92aWRlcyBhIHdyYXBwZXIgaW50ZXJmYWNlIHRvIHRoYXQKKyAgICogIGNvbnRhaW5lci4gIFRoZSB3cmFwcGVyIGlzIHdoYXQgZW5mb3JjZXMgcHJpb3JpdHktYmFzZWQgc29ydGluZyAKKyAgICogIGFuZCAlcXVldWUgYmVoYXZpb3IuICBWZXJ5IGZldyBvZiB0aGUgc3RhbmRhcmQgY29udGFpbmVyL3NlcXVlbmNlCisgICAqICBpbnRlcmZhY2UgcmVxdWlyZW1lbnRzIGFyZSBtZXQgKGUuZy4sIGl0ZXJhdG9ycykuCisgICAqCisgICAqICBUaGUgc2Vjb25kIHRlbXBsYXRlIHBhcmFtZXRlciBkZWZpbmVzIHRoZSB0eXBlIG9mIHRoZSB1bmRlcmx5aW5nCisgICAqICBzZXF1ZW5jZS9jb250YWluZXIuICBJdCBkZWZhdWx0cyB0byBzdGQ6OnZlY3RvciwgYnV0IGl0IGNhbiBiZQorICAgKiAgYW55IHR5cGUgdGhhdCBzdXBwb3J0cyBAYyBmcm9udCgpLCBAYyBwdXNoX2JhY2ssIEBjIHBvcF9iYWNrLAorICAgKiAgYW5kIHJhbmRvbS1hY2Nlc3MgaXRlcmF0b3JzLCBzdWNoIGFzIHN0ZDo6ZGVxdWUgb3IgYW4KKyAgICogIGFwcHJvcHJpYXRlIHVzZXItZGVmaW5lZCB0eXBlLgorICAgKgorICAgKiAgVGhlIHRoaXJkIHRlbXBsYXRlIHBhcmFtZXRlciBzdXBwbGllcyB0aGUgbWVhbnMgb2YgbWFraW5nCisgICAqICBwcmlvcml0eSBjb21wYXJpc29ucy4gIEl0IGRlZmF1bHRzIHRvIEBjIGxlc3M8dmFsdWVfdHlwZT4gYnV0CisgICAqICBjYW4gYmUgYW55dGhpbmcgZGVmaW5pbmcgYSBzdHJpY3Qgd2VhayBvcmRlcmluZy4KKyAgICoKKyAgICogIE1lbWJlcnMgbm90IGZvdW5kIGluIEBhIG5vcm1hbCBjb250YWluZXJzIGFyZSBAYyBjb250YWluZXJfdHlwZSwKKyAgICogIHdoaWNoIGlzIGEgdHlwZWRlZiBmb3IgdGhlIHNlY29uZCBTZXF1ZW5jZSBwYXJhbWV0ZXIsIGFuZCBAYworICAgKiAgcHVzaCwgQGMgcG9wLCBhbmQgQGMgdG9wLCB3aGljaCBhcmUgc3RhbmRhcmQgJXF1ZXVlIG9wZXJhdGlvbnMuCisgICAqCisgICAqICBAbm90ZSBObyBlcXVhbGl0eS9jb21wYXJpc29uIG9wZXJhdG9ycyBhcmUgcHJvdmlkZWQgZm9yCisgICAqICAlcHJpb3JpdHlfcXVldWUuCisgICAqCisgICAqICBAbm90ZSBTb3J0aW5nIG9mIHRoZSBlbGVtZW50cyB0YWtlcyBwbGFjZSBhcyB0aGV5IGFyZSBhZGRlZCB0bywKKyAgICogIGFuZCByZW1vdmVkIGZyb20sIHRoZSAlcHJpb3JpdHlfcXVldWUgdXNpbmcgdGhlCisgICAqICAlcHJpb3JpdHlfcXVldWUncyBtZW1iZXIgZnVuY3Rpb25zLiAgSWYgeW91IGFjY2VzcyB0aGUgZWxlbWVudHMKKyAgICogIGJ5IG90aGVyIG1lYW5zLCBhbmQgY2hhbmdlIHRoZWlyIGRhdGEgc3VjaCB0aGF0IHRoZSBzb3J0aW5nCisgICAqICBvcmRlciB3b3VsZCBiZSBkaWZmZXJlbnQsIHRoZSAlcHJpb3JpdHlfcXVldWUgd2lsbCBub3QgcmUtc29ydAorICAgKiAgdGhlIGVsZW1lbnRzIGZvciB5b3UuICAoSG93IGNvdWxkIGl0IGtub3cgdG8gZG8gc28/KQorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9TZXF1ZW5jZSA9IHZlY3RvcjxfVHA+LAorCSAgIHR5cGVuYW1lIF9Db21wYXJlICA9IGxlc3M8dHlwZW5hbWUgX1NlcXVlbmNlOjp2YWx1ZV90eXBlPiA+CisgICAgY2xhc3MgcHJpb3JpdHlfcXVldWUKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OnZhbHVlX3R5cGUgX1NlcXVlbmNlX3ZhbHVlX3R5cGU7CisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX1RwLCBfU0dJQXNzaWduYWJsZUNvbmNlcHQpCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX1NlcXVlbmNlLCBfU2VxdWVuY2VDb25jZXB0KQorICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzKF9TZXF1ZW5jZSwgX1JhbmRvbUFjY2Vzc0NvbnRhaW5lckNvbmNlcHQpCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMyKF9UcCwgX1NlcXVlbmNlX3ZhbHVlX3R5cGUsIF9TYW1lVHlwZUNvbmNlcHQpCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXM0KF9Db21wYXJlLCBib29sLCBfVHAsIF9UcCwKKwkJCQlfQmluYXJ5RnVuY3Rpb25Db25jZXB0KQorCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OnZhbHVlX3R5cGUgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjpyZWZlcmVuY2UgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjpjb25zdF9yZWZlcmVuY2UgICAgICAgICAgIGNvbnN0X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjpzaXplX3R5cGUgICAgICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgICAgICAgICAgX1NlcXVlbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl90eXBlOworCisgICAgcHJvdGVjdGVkOgorICAgICAgLy8gIFNlZSBxdWV1ZTo6YyBmb3Igbm90ZXMgb24gdGhlc2UgbmFtZXMuCisgICAgICBfU2VxdWVuY2UgIGM7CisgICAgICBfQ29tcGFyZSAgIGNvbXA7CisKKyAgICBwdWJsaWM6CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIERlZmF1bHQgY29uc3RydWN0b3IgY3JlYXRlcyBubyBlbGVtZW50cy4KKyAgICAgICAqLworI2lmbmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgZXhwbGljaXQKKyAgICAgIHByaW9yaXR5X3F1ZXVlKGNvbnN0IF9Db21wYXJlJiBfX3ggPSBfQ29tcGFyZSgpLAorCQkgICAgIGNvbnN0IF9TZXF1ZW5jZSYgX19zID0gX1NlcXVlbmNlKCkpCisgICAgICA6IGMoX19zKSwgY29tcChfX3gpCisgICAgICB7IHN0ZDo6bWFrZV9oZWFwKGMuYmVnaW4oKSwgYy5lbmQoKSwgY29tcCk7IH0KKyNlbHNlCisgICAgICBleHBsaWNpdAorICAgICAgcHJpb3JpdHlfcXVldWUoY29uc3QgX0NvbXBhcmUmIF9feCwKKwkJICAgICBjb25zdCBfU2VxdWVuY2UmIF9fcykKKyAgICAgIDogYyhfX3MpLCBjb21wKF9feCkKKyAgICAgIHsgc3RkOjptYWtlX2hlYXAoYy5iZWdpbigpLCBjLmVuZCgpLCBjb21wKTsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgcHJpb3JpdHlfcXVldWUoY29uc3QgX0NvbXBhcmUmIF9feCA9IF9Db21wYXJlKCksCisJCSAgICAgX1NlcXVlbmNlJiYgX19zID0gX1NlcXVlbmNlKCkpCisgICAgICA6IGMoc3RkOjptb3ZlKF9fcykpLCBjb21wKF9feCkKKyAgICAgIHsgc3RkOjptYWtlX2hlYXAoYy5iZWdpbigpLCBjLmVuZCgpLCBjb21wKTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQnVpbGRzIGEgJXF1ZXVlIGZyb20gYSByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gIGZpcnN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIGxhc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgeCAgQSBjb21wYXJpc29uIGZ1bmN0b3IgZGVzY3JpYmluZyBhIHN0cmljdCB3ZWFrIG9yZGVyaW5nLgorICAgICAgICogIEBwYXJhbSAgcyAgQW4gaW5pdGlhbCBzZXF1ZW5jZSB3aXRoIHdoaWNoIHRvIHN0YXJ0LgorICAgICAgICoKKyAgICAgICAqICBCZWdpbnMgYnkgY29weWluZyBAYSBzLCBpbnNlcnRpbmcgYSBjb3B5IG9mIHRoZSBlbGVtZW50cworICAgICAgICogIGZyb20gQGEgW2ZpcnN0LGxhc3QpIGludG8gdGhlIGNvcHkgb2YgQGEgcywgdGhlbiBvcmRlcmluZworICAgICAgICogIHRoZSBjb3B5IGFjY29yZGluZyB0byBAYSB4LgorICAgICAgICoKKyAgICAgICAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBmdW5jdGlvbiBvYmplY3RzLCBzZWUgdGhlCisgICAgICAgKiAgZG9jdW1lbnRhdGlvbiBvbiBAbGluayBmdW5jdG9ycyBmdW5jdG9yIGJhc2UKKyAgICAgICAqICBjbGFzc2VzQGVuZGxpbmsuCisgICAgICAgKi8KKyNpZm5kZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBwcmlvcml0eV9xdWV1ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCSAgICAgICBjb25zdCBfQ29tcGFyZSYgX194ID0gX0NvbXBhcmUoKSwKKwkJICAgICAgIGNvbnN0IF9TZXF1ZW5jZSYgX19zID0gX1NlcXVlbmNlKCkpCisJOiBjKF9fcyksIGNvbXAoX194KQorICAgICAgICB7CisJICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKwkgIGMuaW5zZXJ0KGMuZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7CisJICBzdGQ6Om1ha2VfaGVhcChjLmJlZ2luKCksIGMuZW5kKCksIGNvbXApOworCX0KKyNlbHNlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgcHJpb3JpdHlfcXVldWUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkgICAgICAgY29uc3QgX0NvbXBhcmUmIF9feCwKKwkJICAgICAgIGNvbnN0IF9TZXF1ZW5jZSYgX19zKQorCTogYyhfX3MpLCBjb21wKF9feCkKKyAgICAgICAgeworCSAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisJICBjLmluc2VydChjLmVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOworCSAgc3RkOjptYWtlX2hlYXAoYy5iZWdpbigpLCBjLmVuZCgpLCBjb21wKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBwcmlvcml0eV9xdWV1ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCSAgICAgICBjb25zdCBfQ29tcGFyZSYgX194ID0gX0NvbXBhcmUoKSwKKwkJICAgICAgIF9TZXF1ZW5jZSYmIF9fcyA9IF9TZXF1ZW5jZSgpKQorCTogYyhzdGQ6Om1vdmUoX19zKSksIGNvbXAoX194KQorICAgICAgICB7CisJICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKwkgIGMuaW5zZXJ0KGMuZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7CisJICBzdGQ6Om1ha2VfaGVhcChjLmJlZ2luKCksIGMuZW5kKCksIGNvbXApOworCX0KKworICAgICAgcHJpb3JpdHlfcXVldWUocHJpb3JpdHlfcXVldWUmJiBfX3BxKQorICAgICAgOiBjKHN0ZDo6bW92ZShfX3BxLmMpKSwgY29tcChzdGQ6Om1vdmUoX19wcS5jb21wKSkgeyB9CisKKyAgICAgIHByaW9yaXR5X3F1ZXVlJgorICAgICAgb3BlcmF0b3I9KHByaW9yaXR5X3F1ZXVlJiYgX19wcSkKKyAgICAgIHsKKwljID0gc3RkOjptb3ZlKF9fcHEuYyk7CisJY29tcCA9IHN0ZDo6bW92ZShfX3BxLmNvbXApOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIHRydWUgaWYgdGhlICVxdWV1ZSBpcyBlbXB0eS4KKyAgICAgICAqLworICAgICAgYm9vbAorICAgICAgZW1wdHkoKSBjb25zdAorICAgICAgeyByZXR1cm4gYy5lbXB0eSgpOyB9CisKKyAgICAgIC8qKiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSAlcXVldWUuICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGMuc2l6ZSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgYXQgdGhlIGZpcnN0CisgICAgICAgKiAgZWxlbWVudCBvZiB0aGUgJXF1ZXVlLgorICAgICAgICovCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIHRvcCgpIGNvbnN0CisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX25vbmVtcHR5KCk7CisJcmV0dXJuIGMuZnJvbnQoKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBZGQgZGF0YSB0byB0aGUgJXF1ZXVlLgorICAgICAgICogIEBwYXJhbSAgeCAgRGF0YSB0byBiZSBhZGRlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyBhIHR5cGljYWwgJXF1ZXVlIG9wZXJhdGlvbi4KKyAgICAgICAqICBUaGUgdGltZSBjb21wbGV4aXR5IG9mIHRoZSBvcGVyYXRpb24gZGVwZW5kcyBvbiB0aGUgdW5kZXJseWluZworICAgICAgICogIHNlcXVlbmNlLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwdXNoKGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsKKwljLnB1c2hfYmFjayhfX3gpOworCXN0ZDo6cHVzaF9oZWFwKGMuYmVnaW4oKSwgYy5lbmQoKSwgY29tcCk7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdm9pZAorICAgICAgcHVzaCh2YWx1ZV90eXBlJiYgX194KQorICAgICAgeworCWMucHVzaF9iYWNrKHN0ZDo6bW92ZShfX3gpKTsKKwlzdGQ6OnB1c2hfaGVhcChjLmJlZ2luKCksIGMuZW5kKCksIGNvbXApOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgdm9pZAorICAgICAgICBlbXBsYWNlKF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIGMuZW1wbGFjZV9iYWNrKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJICBzdGQ6OnB1c2hfaGVhcChjLmJlZ2luKCksIGMuZW5kKCksIGNvbXApOworCX0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZXMgZmlyc3QgZWxlbWVudC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyBhIHR5cGljYWwgJXF1ZXVlIG9wZXJhdGlvbi4gIEl0IHNocmlua3MgdGhlICVxdWV1ZQorICAgICAgICogIGJ5IG9uZS4gIFRoZSB0aW1lIGNvbXBsZXhpdHkgb2YgdGhlIG9wZXJhdGlvbiBkZXBlbmRzIG9uIHRoZQorICAgICAgICogIHVuZGVybHlpbmcgc2VxdWVuY2UuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhhdCBubyBkYXRhIGlzIHJldHVybmVkLCBhbmQgaWYgdGhlIGZpcnN0IGVsZW1lbnQncworICAgICAgICogIGRhdGEgaXMgbmVlZGVkLCBpdCBzaG91bGQgYmUgcmV0cmlldmVkIGJlZm9yZSBwb3AoKSBpcworICAgICAgICogIGNhbGxlZC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcG9wKCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfbm9uZW1wdHkoKTsKKwlzdGQ6OnBvcF9oZWFwKGMuYmVnaW4oKSwgYy5lbmQoKSwgY29tcCk7CisJYy5wb3BfYmFjaygpOworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHZvaWQKKyAgICAgIHN3YXAocHJpb3JpdHlfcXVldWUmIF9fcHEpCisgICAgICB7CisJdXNpbmcgc3RkOjpzd2FwOworCWMuc3dhcChfX3BxLmMpOworCXN3YXAoY29tcCwgX19wcS5jb21wKTsKKyAgICAgIH0KKyNlbmRpZgorICAgIH07CisKKyAgLy8gTm8gZXF1YWxpdHkvY29tcGFyaXNvbiBvcGVyYXRvcnMgYXJlIHByb3ZpZGVkIGZvciBwcmlvcml0eV9xdWV1ZS4KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1NlcXVlbmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAocHJpb3JpdHlfcXVldWU8X1RwLCBfU2VxdWVuY2UsIF9Db21wYXJlPiYgX194LAorCSBwcmlvcml0eV9xdWV1ZTxfVHAsIF9TZXF1ZW5jZSwgX0NvbXBhcmU+JiBfX3kpCisgICAgeyBfX3guc3dhcChfX3kpOyB9CisjZW5kaWYKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYgLyogX1NUTF9RVUVVRV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNmNhZDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaApAQCAtMCwwICsxLDEwNiBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NgorICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIHN0bF9yYXdfc3RvcmFnZV9pdGVyLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfU1RMX1JBV19TVE9SQUdFX0lURVJBVE9SX0gKKyNkZWZpbmUgX1NUTF9SQVdfU1RPUkFHRV9JVEVSQVRPUl9IIDEKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvKioKKyAgICogIFRoaXMgaXRlcmF0b3IgY2xhc3MgbGV0cyBhbGdvcml0aG1zIHN0b3JlIHRoZWlyIHJlc3VsdHMgaW50bworICAgKiAgdW5pbml0aWFsaXplZCBtZW1vcnkuCisgICovCisgIHRlbXBsYXRlIDxjbGFzcyBfT3V0cHV0SXRlcmF0b3IsIGNsYXNzIF9UcD4KKyAgICBjbGFzcyByYXdfc3RvcmFnZV9pdGVyYXRvcgorICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIF9PdXRwdXRJdGVyYXRvciBfTV9pdGVyOworCisgICAgcHVibGljOgorICAgICAgZXhwbGljaXQKKyAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yKF9PdXRwdXRJdGVyYXRvciBfX3gpCisgICAgICA6IF9NX2l0ZXIoX194KSB7fQorCisgICAgICByYXdfc3RvcmFnZV9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9UcCYgX19lbGVtZW50KQorICAgICAgeworCXN0ZDo6X0NvbnN0cnVjdCgmKl9NX2l0ZXIsIF9fZWxlbWVudCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfT3V0cHV0SXRlcmF0b3IsIF9UcD4mCisgICAgICBvcGVyYXRvcisrKCkKKyAgICAgIHsKKwkrK19NX2l0ZXI7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfT3V0cHV0SXRlcmF0b3IsIF9UcD4KKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeworCXJhd19zdG9yYWdlX2l0ZXJhdG9yPF9PdXRwdXRJdGVyYXRvciwgX1RwPiBfX3RtcCA9ICp0aGlzOworCSsrX01faXRlcjsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisgICAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfcmVsb3BzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3RsX3JlbG9wcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNzdjNWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3RsX3JlbG9wcy5oCkBAIC0wLDAgKzEsMTMxIEBACisvLyBzdGQ6OnJlbF9vcHMgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDA0LCAyMDA1LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlLCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5NworICogU2lsaWNvbiBHcmFwaGljcworICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqLworCisvKiogQGZpbGUgc3RsX3JlbG9wcy5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICoKKyAqICBJbmNsdXNpb24gb2YgdGhpcyBmaWxlIGhhcyBiZWVuIHJlbW92ZWQgZnJvbQorICogIGFsbCBvZiB0aGUgb3RoZXIgU1RMIGhlYWRlcnMgZm9yIHNhZmV0eSByZWFzb25zLCBleGNlcHQgc3RkX3V0aWxpdHkuaC4KKyAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSB0aHJlYWQgb2YgYWJvdXQgdHdlbnR5IG1lc3NhZ2VzIHN0YXJ0aW5nCisgKiAgd2l0aCBodHRwOi8vZ2NjLmdudS5vcmcvbWwvbGlic3RkYysrLzIwMDEtMDEvbXNnMDAyMjMuaHRtbCwgb3IKKyAqICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9saWJzdGRjKysvZmFxLmh0bWwjZmFxLmFtYmlndW91c19vdmVybG9hZHMKKyAqCisgKiAgU2hvcnQgc3VtbWFyeTogIHRoZSByZWxfb3BzIG9wZXJhdG9ycyBzaG91bGQgYmUgYXZvaWRlZCBmb3IgdGhlIHByZXNlbnQuCisgKi8KKworI2lmbmRlZiBfU1RMX1JFTE9QU19ICisjZGVmaW5lIF9TVExfUkVMT1BTX0ggMQorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIG5hbWVzcGFjZSByZWxfb3BzCisgIHsKKyAgICAvKiogQG5hbWVzcGFjZSBzdGQ6OnJlbF9vcHMKKyAgICAgKiAgQGJyaWVmICBUaGUgZ2VuZXJhdGVkIHJlbGF0aW9uYWwgb3BlcmF0b3JzIGFyZSBzZXF1ZXN0ZXJlZCBoZXJlLgorICAgICAqLworCisgICAgLyoqCisgICAgICogIEBicmllZiBEZWZpbmVzIEBjICE9IGZvciBhcmJpdHJhcnkgdHlwZXMsIGluIHRlcm1zIG9mIEBjID09LgorICAgICAqICBAcGFyYW0gIHggIEEgdGhpbmcuCisgICAgICogIEBwYXJhbSAgeSAgQW5vdGhlciB0aGluZy4KKyAgICAgKiAgQHJldHVybiAgIHggIT0geQorICAgICAqCisgICAgICogIFRoaXMgZnVuY3Rpb24gdXNlcyBAYyA9PSB0byBkZXRlcm1pbmUgaXRzIHJlc3VsdC4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorICAgICAgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yIT0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KQorICAgICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQorCisgICAgLyoqCisgICAgICogIEBicmllZiBEZWZpbmVzIEBjID4gZm9yIGFyYml0cmFyeSB0eXBlcywgaW4gdGVybXMgb2YgQGMgPC4KKyAgICAgKiAgQHBhcmFtICB4ICBBIHRoaW5nLgorICAgICAqICBAcGFyYW0gIHkgIEFub3RoZXIgdGhpbmcuCisgICAgICogIEByZXR1cm4gICB4ID4geQorICAgICAqCisgICAgICogIFRoaXMgZnVuY3Rpb24gdXNlcyBAYyA8IHRvIGRldGVybWluZSBpdHMgcmVzdWx0LgorICAgICAqLworICAgIHRlbXBsYXRlIDxjbGFzcyBfVHA+CisgICAgICBpbmxpbmUgYm9vbAorICAgICAgb3BlcmF0b3I+KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkKKyAgICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQorCisgICAgLyoqCisgICAgICogIEBicmllZiBEZWZpbmVzIEBjIDw9IGZvciBhcmJpdHJhcnkgdHlwZXMsIGluIHRlcm1zIG9mIEBjIDwuCisgICAgICogIEBwYXJhbSAgeCAgQSB0aGluZy4KKyAgICAgKiAgQHBhcmFtICB5ICBBbm90aGVyIHRoaW5nLgorICAgICAqICBAcmV0dXJuICAgeCA8PSB5CisgICAgICoKKyAgICAgKiAgVGhpcyBmdW5jdGlvbiB1c2VzIEBjIDwgdG8gZGV0ZXJtaW5lIGl0cyByZXN1bHQuCisgICAgICovCisgICAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcjw9KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkKKyAgICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQorCisgICAgLyoqCisgICAgICogIEBicmllZiBEZWZpbmVzIEBjID49IGZvciBhcmJpdHJhcnkgdHlwZXMsIGluIHRlcm1zIG9mIEBjIDwuCisgICAgICogIEBwYXJhbSAgeCAgQSB0aGluZy4KKyAgICAgKiAgQHBhcmFtICB5ICBBbm90aGVyIHRoaW5nLgorICAgICAqICBAcmV0dXJuICAgeCA+PSB5CisgICAgICoKKyAgICAgKiAgVGhpcyBmdW5jdGlvbiB1c2VzIEBjIDwgdG8gZGV0ZXJtaW5lIGl0cyByZXN1bHQuCisgICAgICovCisgICAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcj49KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkKKyAgICAgIHsgcmV0dXJuICEoX194IDwgX195KTsgfQorCisgIH0gLy8gbmFtZXNwYWNlIHJlbF9vcHMKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYgLyogX1NUTF9SRUxPUFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF9zZXQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQzMjFlMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfc2V0LmgKQEAgLTAsMCArMSw3MzMgQEAKKy8vIFNldCBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBzdGxfc2V0LmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfU1RMX1NFVF9ICisjZGVmaW5lIF9TVExfU0VUX0ggMQorCisjaW5jbHVkZSA8Yml0cy9jb25jZXB0X2NoZWNrLmg+CisjaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KKworX0dMSUJDWFhfQkVHSU5fTkVTVEVEX05BTUVTUEFDRShzdGQsIF9HTElCQ1hYX1NURF9EKQorCisgIC8qKgorICAgKiAgQGJyaWVmIEEgc3RhbmRhcmQgY29udGFpbmVyIG1hZGUgdXAgb2YgdW5pcXVlIGtleXMsIHdoaWNoIGNhbiBiZQorICAgKiAgcmV0cmlldmVkIGluIGxvZ2FyaXRobWljIHRpbWUuCisgICAqCisgICAqICBAaW5ncm91cCBhc3NvY2lhdGl2ZV9jb250YWluZXJzCisgICAqCisgICAqICBNZWV0cyB0aGUgcmVxdWlyZW1lbnRzIG9mIGEgPGEgaHJlZj0idGFibGVzLmh0bWwjNjUiPmNvbnRhaW5lcjwvYT4sIGEKKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sIzY2Ij5yZXZlcnNpYmxlIGNvbnRhaW5lcjwvYT4sIGFuZCBhbgorICAgKiAgPGEgaHJlZj0idGFibGVzLmh0bWwjNjkiPmFzc29jaWF0aXZlIGNvbnRhaW5lcjwvYT4gKHVzaW5nIHVuaXF1ZSBrZXlzKS4KKyAgICoKKyAgICogIFNldHMgc3VwcG9ydCBiaWRpcmVjdGlvbmFsIGl0ZXJhdG9ycy4KKyAgICoKKyAgICogIEBwYXJhbSAgS2V5ICBUeXBlIG9mIGtleSBvYmplY3RzLgorICAgKiAgQHBhcmFtICBDb21wYXJlICBDb21wYXJpc29uIGZ1bmN0aW9uIG9iamVjdCB0eXBlLCBkZWZhdWx0cyB0byBsZXNzPEtleT4uCisgICAqICBAcGFyYW0gIEFsbG9jICBBbGxvY2F0b3IgdHlwZSwgZGVmYXVsdHMgdG8gYWxsb2NhdG9yPEtleT4uCisgICAqCisgICAqICBUaGUgcHJpdmF0ZSB0cmVlIGRhdGEgaXMgZGVjbGFyZWQgZXhhY3RseSB0aGUgc2FtZSB3YXkgZm9yIHNldCBhbmQKKyAgICogIG11bHRpc2V0OyB0aGUgZGlzdGluY3Rpb24gaXMgbWFkZSBlbnRpcmVseSBpbiBob3cgdGhlIHRyZWUgZnVuY3Rpb25zIGFyZQorICAgKiAgY2FsbGVkICgqX3VuaXF1ZSB2ZXJzdXMgKl9lcXVhbCwgc2FtZSBhcyB0aGUgc3RhbmRhcmQpLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSA9IHN0ZDo6bGVzczxfS2V5PiwKKwkgICB0eXBlbmFtZSBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxfS2V5PiA+CisgICAgY2xhc3Mgc2V0CisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp2YWx1ZV90eXBlICAgICAgICAgICAgICAgICAgIF9BbGxvY192YWx1ZV90eXBlOworICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzKF9LZXksIF9TR0lBc3NpZ25hYmxlQ29uY2VwdCkKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlczQoX0NvbXBhcmUsIGJvb2wsIF9LZXksIF9LZXksCisJCQkJX0JpbmFyeUZ1bmN0aW9uQ29uY2VwdCkKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlczIoX0tleSwgX0FsbG9jX3ZhbHVlX3R5cGUsIF9TYW1lVHlwZUNvbmNlcHQpCQorCisgICAgcHVibGljOgorICAgICAgLy8gdHlwZWRlZnM6CisgICAgICAvL0B7CisgICAgICAvLy8gUHVibGljIHR5cGVkZWZzLgorICAgICAgdHlwZWRlZiBfS2V5ICAgICBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0tleSAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0NvbXBhcmUga2V5X2NvbXBhcmU7CisgICAgICB0eXBlZGVmIF9Db21wYXJlIHZhbHVlX2NvbXBhcmU7CisgICAgICB0eXBlZGVmIF9BbGxvYyAgIGFsbG9jYXRvcl90eXBlOworICAgICAgLy9AfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8X0tleT46Om90aGVyIF9LZXlfYWxsb2NfdHlwZTsKKworICAgICAgdHlwZWRlZiBfUmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwgX0lkZW50aXR5PHZhbHVlX3R5cGU+LAorCQkgICAgICAga2V5X2NvbXBhcmUsIF9LZXlfYWxsb2NfdHlwZT4gX1JlcF90eXBlOworICAgICAgX1JlcF90eXBlIF9NX3Q7ICAvLyBSZWQtYmxhY2sgdHJlZSByZXByZXNlbnRpbmcgc2V0LgorCisgICAgcHVibGljOgorICAgICAgLy9AeworICAgICAgLy8vICBJdGVyYXRvci1yZWxhdGVkIHR5cGVkZWZzLgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfS2V5X2FsbG9jX3R5cGU6OnBvaW50ZXIgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0tleV9hbGxvY190eXBlOjpjb25zdF9wb2ludGVyICAgICAgIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9LZXlfYWxsb2NfdHlwZTo6cmVmZXJlbmNlICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9LZXlfYWxsb2NfdHlwZTo6Y29uc3RfcmVmZXJlbmNlICAgICBjb25zdF9yZWZlcmVuY2U7CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUiAxMDMuIHNldDo6aXRlcmF0b3IgaXMgcmVxdWlyZWQgdG8gYmUgbW9kaWZpYWJsZSwKKyAgICAgIC8vIGJ1dCB0aGlzIGFsbG93cyBtb2RpZmljYXRpb24gb2Yga2V5cy4KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciAgICAgICAgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0ZXJhdG9yICAgICAgICAgICAgY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciAgICByZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5cGUgICAgICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIC8vQH0KKworICAgICAgLy8gYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRGVmYXVsdCBjb25zdHJ1Y3RvciBjcmVhdGVzIG5vIGVsZW1lbnRzLgorICAgICAgICovCisgICAgICBzZXQoKQorICAgICAgOiBfTV90KCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ3JlYXRlcyBhICVzZXQgd2l0aCBubyBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gIGNvbXAgIENvbXBhcmF0b3IgdG8gdXNlLgorICAgICAgICogIEBwYXJhbSAgYSAgQW4gYWxsb2NhdG9yIG9iamVjdC4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIHNldChjb25zdCBfQ29tcGFyZSYgX19jb21wLAorCSAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEJ1aWxkcyBhICVzZXQgZnJvbSBhIHJhbmdlLgorICAgICAgICogIEBwYXJhbSAgZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgbGFzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKgorICAgICAgICogIENyZWF0ZSBhICVzZXQgY29uc2lzdGluZyBvZiBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGZyb20gW2ZpcnN0LGxhc3QpLgorICAgICAgICogIFRoaXMgaXMgbGluZWFyIGluIE4gaWYgdGhlIHJhbmdlIGlzIGFscmVhZHkgc29ydGVkLCBhbmQgTmxvZ04KKyAgICAgICAqICBvdGhlcndpc2UgKHdoZXJlIE4gaXMgZGlzdGFuY2UoZmlyc3QsbGFzdCkpLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKwk6IF9NX3QoKQorICAgICAgICB7IF9NX3QuX01faW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQnVpbGRzIGEgJXNldCBmcm9tIGEgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtICBmaXJzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBsYXN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIGNvbXAgIEEgY29tcGFyaXNvbiBmdW5jdG9yLgorICAgICAgICogIEBwYXJhbSAgYSAgQW4gYWxsb2NhdG9yIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiAgQ3JlYXRlIGEgJXNldCBjb25zaXN0aW5nIG9mIGNvcGllcyBvZiB0aGUgZWxlbWVudHMgZnJvbSBbZmlyc3QsbGFzdCkuCisgICAgICAgKiAgVGhpcyBpcyBsaW5lYXIgaW4gTiBpZiB0aGUgcmFuZ2UgaXMgYWxyZWFkeSBzb3J0ZWQsIGFuZCBObG9nTgorICAgICAgICogIG90aGVyd2lzZSAod2hlcmUgTiBpcyBkaXN0YW5jZShmaXJzdCxsYXN0KSkuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBzZXQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCSAgICBjb25zdCBfQ29tcGFyZSYgX19jb21wLAorCSAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKwk6IF9NX3QoX19jb21wLCBfX2EpCisgICAgICAgIHsgX01fdC5fTV9pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlU2V0IGNvcHkgY29uc3RydWN0b3IuCisgICAgICAgKiAgQHBhcmFtICB4ICBBICVzZXQgb2YgaWRlbnRpY2FsIGVsZW1lbnQgYW5kIGFsbG9jYXRvciB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIG5ld2x5LWNyZWF0ZWQgJXNldCB1c2VzIGEgY29weSBvZiB0aGUgYWxsb2NhdGlvbiBvYmplY3QgdXNlZAorICAgICAgICogIGJ5IEBhIHguCisgICAgICAgKi8KKyAgICAgIHNldChjb25zdCBzZXQmIF9feCkKKyAgICAgIDogX01fdChfX3guX01fdCkgeyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgJVNldCBtb3ZlIGNvbnN0cnVjdG9yCisgICAgICAgKiAgQHBhcmFtIHggIEEgJXNldCBvZiBpZGVudGljYWwgZWxlbWVudCBhbmQgYWxsb2NhdG9yIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBUaGUgbmV3bHktY3JlYXRlZCAlc2V0IGNvbnRhaW5zIHRoZSBleGFjdCBjb250ZW50cyBvZiBAYSB4LgorICAgICAgICogIFRoZSBjb250ZW50cyBvZiBAYSB4IGFyZSBhIHZhbGlkLCBidXQgdW5zcGVjaWZpZWQgJXNldC4KKyAgICAgICAqLworICAgICAgc2V0KHNldCYmIF9feCkKKyAgICAgIDogX01fdChzdGQ6OmZvcndhcmQ8X1JlcF90eXBlPihfX3guX01fdCkpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEJ1aWxkcyBhICVzZXQgZnJvbSBhbiBpbml0aWFsaXplcl9saXN0LgorICAgICAgICogIEBwYXJhbSAgbCAgQW4gaW5pdGlhbGl6ZXJfbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIGNvbXAgIEEgY29tcGFyaXNvbiBmdW5jdG9yLgorICAgICAgICogIEBwYXJhbSAgYSAgQW4gYWxsb2NhdG9yIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiAgQ3JlYXRlIGEgJXNldCBjb25zaXN0aW5nIG9mIGNvcGllcyBvZiB0aGUgZWxlbWVudHMgaW4gdGhlIGxpc3QuCisgICAgICAgKiAgVGhpcyBpcyBsaW5lYXIgaW4gTiBpZiB0aGUgbGlzdCBpcyBhbHJlYWR5IHNvcnRlZCwgYW5kIE5sb2dOCisgICAgICAgKiAgb3RoZXJ3aXNlICh3aGVyZSBOIGlzIEBhIGwuc2l6ZSgpKS4KKyAgICAgICAqLworICAgICAgc2V0KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sLAorCSAgY29uc3QgX0NvbXBhcmUmIF9fY29tcCA9IF9Db21wYXJlKCksCisJICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX01fdChfX2NvbXAsIF9fYSkKKyAgICAgIHsgX01fdC5fTV9pbnNlcnRfdW5pcXVlKF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOyB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlU2V0IGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICB4ICBBICVzZXQgb2YgaWRlbnRpY2FsIGVsZW1lbnQgYW5kIGFsbG9jYXRvciB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgQWxsIHRoZSBlbGVtZW50cyBvZiBAYSB4IGFyZSBjb3BpZWQsIGJ1dCB1bmxpa2UgdGhlIGNvcHkgY29uc3RydWN0b3IsCisgICAgICAgKiAgdGhlIGFsbG9jYXRvciBvYmplY3QgaXMgbm90IGNvcGllZC4KKyAgICAgICAqLworICAgICAgc2V0JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHNldCYgX194KQorICAgICAgeworCV9NX3QgPSBfX3guX01fdDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICVTZXQgbW92ZSBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgICogIEBwYXJhbSB4ICBBICVzZXQgb2YgaWRlbnRpY2FsIGVsZW1lbnQgYW5kIGFsbG9jYXRvciB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGNvbnRlbnRzIG9mIEBhIHggYXJlIG1vdmVkIGludG8gdGhpcyAlc2V0ICh3aXRob3V0IGNvcHlpbmcpLgorICAgICAgICogIEBhIHggaXMgYSB2YWxpZCwgYnV0IHVuc3BlY2lmaWVkICVzZXQuCisgICAgICAgKi8KKyAgICAgIHNldCYKKyAgICAgIG9wZXJhdG9yPShzZXQmJiBfX3gpCisgICAgICB7CisJLy8gTkI6IERSIDEyMDQuCisJLy8gTkI6IERSIDY3NS4KKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPnN3YXAoX194KTsKKyAgICAgIAlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJVNldCBsaXN0IGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBsICBBbiBpbml0aWFsaXplcl9saXN0LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGZpbGxzIGEgJXNldCB3aXRoIGNvcGllcyBvZiB0aGUgZWxlbWVudHMgaW4gdGhlCisgICAgICAgKiAgaW5pdGlhbGl6ZXIgbGlzdCBAYSBsLgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgdGhlIGFzc2lnbm1lbnQgY29tcGxldGVseSBjaGFuZ2VzIHRoZSAlc2V0IGFuZAorICAgICAgICogIHRoYXQgdGhlIHJlc3VsdGluZyAlc2V0J3Mgc2l6ZSBpcyB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyCisgICAgICAgKiAgb2YgZWxlbWVudHMgYXNzaWduZWQuICBPbGQgZGF0YSBtYXkgYmUgbG9zdC4KKyAgICAgICAqLworICAgICAgc2V0JgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+aW5zZXJ0KF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICAvLyBhY2Nlc3NvcnM6CisKKyAgICAgIC8vLyAgUmV0dXJucyB0aGUgY29tcGFyaXNvbiBvYmplY3Qgd2l0aCB3aGljaCB0aGUgJXNldCB3YXMgY29uc3RydWN0ZWQuCisgICAgICBrZXlfY29tcGFyZQorICAgICAga2V5X2NvbXAoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CisgICAgICAvLy8gIFJldHVybnMgdGhlIGNvbXBhcmlzb24gb2JqZWN0IHdpdGggd2hpY2ggdGhlICVzZXQgd2FzIGNvbnN0cnVjdGVkLgorICAgICAgdmFsdWVfY29tcGFyZQorICAgICAgdmFsdWVfY29tcCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KKyAgICAgIC8vLyAgUmV0dXJucyB0aGUgYWxsb2NhdG9yIG9iamVjdCB3aXRoIHdoaWNoIHRoZSAlc2V0IHdhcyBjb25zdHJ1Y3RlZC4KKyAgICAgIGFsbG9jYXRvcl90eXBlCisgICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgZmlyc3QKKyAgICAgICAqICBlbGVtZW50IGluIHRoZSAlc2V0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gYXNjZW5kaW5nIG9yZGVyIGFjY29yZGluZworICAgICAgICogIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyBvbmUgcGFzdCB0aGUgbGFzdAorICAgICAgICogIGVsZW1lbnQgaW4gdGhlICVzZXQuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBhc2NlbmRpbmcgb3JkZXIgYWNjb3JkaW5nCisgICAgICAgKiAgdG8gdGhlIGtleXMuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5lbmQoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGxhc3QKKyAgICAgICAqICBlbGVtZW50IGluIHRoZSAlc2V0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gZGVzY2VuZGluZyBvcmRlciBhY2NvcmRpbmcKKyAgICAgICAqICB0byB0aGUga2V5cy4KKyAgICAgICAqLworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3QucmJlZ2luKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlCisgICAgICAgKiAgbGFzdCBwYWlyIGluIHRoZSAlc2V0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gZGVzY2VuZGluZyBvcmRlcgorICAgICAgICogIGFjY29yZGluZyB0byB0aGUga2V5cy4KKyAgICAgICAqLworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LnJlbmQoKTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgZmlyc3QKKyAgICAgICAqICBlbGVtZW50IGluIHRoZSAlc2V0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gYXNjZW5kaW5nIG9yZGVyIGFjY29yZGluZworICAgICAgICogIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgb25lIHBhc3QgdGhlIGxhc3QKKyAgICAgICAqICBlbGVtZW50IGluIHRoZSAlc2V0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gYXNjZW5kaW5nIG9yZGVyIGFjY29yZGluZworICAgICAgICogIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LmVuZCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgbGFzdAorICAgICAgICogIGVsZW1lbnQgaW4gdGhlICVzZXQuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBkZXNjZW5kaW5nIG9yZGVyIGFjY29yZGluZworICAgICAgICogIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjcmJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3QucmJlZ2luKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlCisgICAgICAgKiAgbGFzdCBwYWlyIGluIHRoZSAlc2V0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gZGVzY2VuZGluZyBvcmRlcgorICAgICAgICogIGFjY29yZGluZyB0byB0aGUga2V5cy4KKyAgICAgICAqLworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KKyNlbmRpZgorCisgICAgICAvLy8gIFJldHVybnMgdHJ1ZSBpZiB0aGUgJXNldCBpcyBlbXB0eS4KKyAgICAgIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3QuZW1wdHkoKTsgfQorCisgICAgICAvLy8gIFJldHVybnMgdGhlIHNpemUgb2YgdGhlICVzZXQuCisgICAgICBzaXplX3R5cGUKKyAgICAgIHNpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5zaXplKCk7IH0KKworICAgICAgLy8vICBSZXR1cm5zIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlICVzZXQuCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3QubWF4X3NpemUoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFN3YXBzIGRhdGEgd2l0aCBhbm90aGVyICVzZXQuCisgICAgICAgKiAgQHBhcmFtICB4ICBBICVzZXQgb2YgdGhlIHNhbWUgZWxlbWVudCBhbmQgYWxsb2NhdG9yIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGV4Y2hhbmdlcyB0aGUgZWxlbWVudHMgYmV0d2VlbiB0d28gc2V0cyBpbiBjb25zdGFudCB0aW1lLgorICAgICAgICogIChJdCBpcyBvbmx5IHN3YXBwaW5nIGEgcG9pbnRlciwgYW4gaW50ZWdlciwgYW5kIGFuIGluc3RhbmNlIG9mCisgICAgICAgKiAgdGhlIEBjIENvbXBhcmUgdHlwZSAod2hpY2ggaXRzZWxmIGlzIG9mdGVuIHN0YXRlbGVzcyBhbmQgZW1wdHkpLCBzbyBpdAorICAgICAgICogIHNob3VsZCBiZSBxdWl0ZSBmYXN0LikKKyAgICAgICAqICBOb3RlIHRoYXQgdGhlIGdsb2JhbCBzdGQ6OnN3YXAoKSBmdW5jdGlvbiBpcyBzcGVjaWFsaXplZCBzdWNoIHRoYXQKKyAgICAgICAqICBzdGQ6OnN3YXAoczEsczIpIHdpbGwgZmVlZCB0byB0aGlzIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBzd2FwKHNldCYgX194KQkKKyAgICAgIHsgX01fdC5zd2FwKF9feC5fTV90KTsgfQorCisgICAgICAvLyBpbnNlcnQvZXJhc2UKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBBdHRlbXB0cyB0byBpbnNlcnQgYW4gZWxlbWVudCBpbnRvIHRoZSAlc2V0LgorICAgICAgICogIEBwYXJhbSAgeCAgRWxlbWVudCB0byBiZSBpbnNlcnRlZC4KKyAgICAgICAqICBAcmV0dXJuICBBIHBhaXIsIG9mIHdoaWNoIHRoZSBmaXJzdCBlbGVtZW50IGlzIGFuIGl0ZXJhdG9yIHRoYXQgcG9pbnRzCisgICAgICAgKiAgICAgICAgICAgdG8gdGhlIHBvc3NpYmx5IGluc2VydGVkIGVsZW1lbnQsIGFuZCB0aGUgc2Vjb25kIGlzIGEgYm9vbAorICAgICAgICogICAgICAgICAgIHRoYXQgaXMgdHJ1ZSBpZiB0aGUgZWxlbWVudCB3YXMgYWN0dWFsbHkgaW5zZXJ0ZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gYXR0ZW1wdHMgdG8gaW5zZXJ0IGFuIGVsZW1lbnQgaW50byB0aGUgJXNldC4gIEEgJXNldAorICAgICAgICogIHJlbGllcyBvbiB1bmlxdWUga2V5cyBhbmQgdGh1cyBhbiBlbGVtZW50IGlzIG9ubHkgaW5zZXJ0ZWQgaWYgaXQgaXMKKyAgICAgICAqICBub3QgYWxyZWFkeSBwcmVzZW50IGluIHRoZSAlc2V0LgorICAgICAgICoKKyAgICAgICAqICBJbnNlcnRpb24gcmVxdWlyZXMgbG9nYXJpdGhtaWMgdGltZS4KKyAgICAgICAqLworICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPgorICAgICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsKKwlzdGQ6OnBhaXI8dHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciwgYm9vbD4gX19wID0KKwkgIF9NX3QuX01faW5zZXJ0X3VuaXF1ZShfX3gpOworCXJldHVybiBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+KF9fcC5maXJzdCwgX19wLnNlY29uZCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBBdHRlbXB0cyB0byBpbnNlcnQgYW4gZWxlbWVudCBpbnRvIHRoZSAlc2V0LgorICAgICAgICogIEBwYXJhbSAgcG9zaXRpb24gIEFuIGl0ZXJhdG9yIHRoYXQgc2VydmVzIGFzIGEgaGludCBhcyB0byB3aGVyZSB0aGUKKyAgICAgICAqICAgICAgICAgICAgICAgICAgICBlbGVtZW50IHNob3VsZCBiZSBpbnNlcnRlZC4KKyAgICAgICAqICBAcGFyYW0gIHggIEVsZW1lbnQgdG8gYmUgaW5zZXJ0ZWQuCisgICAgICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGVsZW1lbnQgd2l0aCBrZXkgb2YgQGEgeCAobWF5CisgICAgICAgKiAgICAgICAgICAgb3IgbWF5IG5vdCBiZSB0aGUgZWxlbWVudCBwYXNzZWQgaW4pLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBjb25jZXJuZWQgYWJvdXQgd2hldGhlciB0aGUgaW5zZXJ0aW9uIHRvb2sgcGxhY2UsCisgICAgICAgKiAgYW5kIHRodXMgZG9lcyBub3QgcmV0dXJuIGEgYm9vbGVhbiBsaWtlIHRoZSBzaW5nbGUtYXJndW1lbnQgaW5zZXJ0KCkKKyAgICAgICAqICBkb2VzLiAgTm90ZSB0aGF0IHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgb25seSBhIGhpbnQgYW5kIGNhbgorICAgICAgICogIHBvdGVudGlhbGx5IGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBpbnNlcnRpb24gcHJvY2Vzcy4gIEEgYmFkCisgICAgICAgKiAgaGludCB3b3VsZCBjYXVzZSBubyBnYWlucyBpbiBlZmZpY2llbmN5LgorICAgICAgICoKKyAgICAgICAqICBGb3IgbW9yZSBvbiBAYSBoaW50aW5nLCBzZWU6CisgICAgICAgKiAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL21hbnVhbC9iazAxcHQwN2NoMTcuaHRtbAorICAgICAgICogIAorICAgICAgICogIEluc2VydGlvbiByZXF1aXJlcyBsb2dhcml0aG1pYyB0aW1lIChpZiB0aGUgaGludCBpcyBub3QgdGFrZW4pLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIF9NX3QuX01faW5zZXJ0X3VuaXF1ZV8oX19wb3NpdGlvbiwgX194KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgQSB0ZW1wbGF0ZSBmdW5jdGlvbiB0aGF0IGF0dGVtcHRzIHRvIGluc2VydCBhIHJhbmdlCisgICAgICAgKiAgb2YgZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBmaXJzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSB0byBiZQorICAgICAgICogICAgICAgICAgICAgICAgIGluc2VydGVkLgorICAgICAgICogIEBwYXJhbSAgbGFzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgcmFuZ2UuCisgICAgICAgKgorICAgICAgICogIENvbXBsZXhpdHkgc2ltaWxhciB0byB0aGF0IG9mIHRoZSByYW5nZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeyBfTV90Ll9NX2luc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBBdHRlbXB0cyB0byBpbnNlcnQgYSBsaXN0IG9mIGVsZW1lbnRzIGludG8gdGhlICVzZXQuCisgICAgICAgKiAgQHBhcmFtICBsaXN0ICBBIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBvZiBlbGVtZW50cworICAgICAgICogICAgICAgICAgICAgICAgdG8gYmUgaW5zZXJ0ZWQuCisgICAgICAgKgorICAgICAgICogIENvbXBsZXhpdHkgc2ltaWxhciB0byB0aGF0IG9mIHRoZSByYW5nZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeyB0aGlzLT5pbnNlcnQoX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7IH0KKyNlbmRpZgorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSIDEzMC4gQXNzb2NpYXRpdmUgZXJhc2Ugc2hvdWxkIHJldHVybiBhbiBpdGVyYXRvci4KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBFcmFzZXMgYW4gZWxlbWVudCBmcm9tIGEgJXNldC4KKyAgICAgICAqICBAcGFyYW0gIHBvc2l0aW9uICBBbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZWxlbWVudCB0byBiZSBlcmFzZWQuCisgICAgICAgKiAgQHJldHVybiBBbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZWxlbWVudCBpbW1lZGlhdGVseSBmb2xsb3dpbmcKKyAgICAgICAqICAgICAgICAgIEBhIHBvc2l0aW9uIHByaW9yIHRvIHRoZSBlbGVtZW50IGJlaW5nIGVyYXNlZC4gSWYgbm8gc3VjaCAKKyAgICAgICAqICAgICAgICAgIGVsZW1lbnQgZXhpc3RzLCBlbmQoKSBpcyByZXR1cm5lZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBlcmFzZXMgYW4gZWxlbWVudCwgcG9pbnRlZCB0byBieSB0aGUgZ2l2ZW4gaXRlcmF0b3IsCisgICAgICAgKiAgZnJvbSBhICVzZXQuICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudCwgYW5kCisgICAgICAgKiAgdGhhdCBpZiB0aGUgZWxlbWVudCBpcyBpdHNlbGYgYSBwb2ludGVyLCB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90CisgICAgICAgKiAgdG91Y2hlZCBpbiBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7IHJldHVybiBfTV90LmVyYXNlKF9fcG9zaXRpb24pOyB9CisjZWxzZQorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEVyYXNlcyBhbiBlbGVtZW50IGZyb20gYSAlc2V0LgorICAgICAgICogIEBwYXJhbSAgcG9zaXRpb24gIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbGVtZW50IHRvIGJlIGVyYXNlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBlcmFzZXMgYW4gZWxlbWVudCwgcG9pbnRlZCB0byBieSB0aGUgZ2l2ZW4gaXRlcmF0b3IsCisgICAgICAgKiAgZnJvbSBhICVzZXQuICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudCwgYW5kCisgICAgICAgKiAgdGhhdCBpZiB0aGUgZWxlbWVudCBpcyBpdHNlbGYgYSBwb2ludGVyLCB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90CisgICAgICAgKiAgdG91Y2hlZCBpbiBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICAgIHsgX01fdC5lcmFzZShfX3Bvc2l0aW9uKTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBFcmFzZXMgZWxlbWVudHMgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBrZXkuCisgICAgICAgKiAgQHBhcmFtICB4ICBLZXkgb2YgZWxlbWVudCB0byBiZSBlcmFzZWQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIG51bWJlciBvZiBlbGVtZW50cyBlcmFzZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZXJhc2VzIGFsbCB0aGUgZWxlbWVudHMgbG9jYXRlZCBieSB0aGUgZ2l2ZW4ga2V5IGZyb20KKyAgICAgICAqICBhICVzZXQuCisgICAgICAgKiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gb25seSBlcmFzZXMgdGhlIGVsZW1lbnQsIGFuZCB0aGF0IGlmCisgICAgICAgKiAgdGhlIGVsZW1lbnQgaXMgaXRzZWxmIGEgcG9pbnRlciwgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkCisgICAgICAgKiAgaW4gYW55IHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIF9NX3QuZXJhc2UoX194KTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSIDEzMC4gQXNzb2NpYXRpdmUgZXJhc2Ugc2hvdWxkIHJldHVybiBhbiBpdGVyYXRvci4KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBFcmFzZXMgYSBbZmlyc3QsbGFzdCkgcmFuZ2Ugb2YgZWxlbWVudHMgZnJvbSBhICVzZXQuCisgICAgICAgKiAgQHBhcmFtICBmaXJzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSB0byBiZQorICAgICAgICogICAgICAgICAgICAgICAgIGVyYXNlZC4KKyAgICAgICAqICBAcGFyYW0gIGxhc3QgIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbmQgb2YgdGhlIHJhbmdlIHRvIGJlIGVyYXNlZC4KKyAgICAgICAqICBAcmV0dXJuIFRoZSBpdGVyYXRvciBAYSBsYXN0LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGVyYXNlcyBhIHNlcXVlbmNlIG9mIGVsZW1lbnRzIGZyb20gYSAlc2V0LgorICAgICAgICogIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50LCBhbmQgdGhhdCBpZgorICAgICAgICogIHRoZSBlbGVtZW50IGlzIGl0c2VsZiBhIHBvaW50ZXIsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZAorICAgICAgICogIGluIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICAgeyByZXR1cm4gX01fdC5lcmFzZShfX2ZpcnN0LCBfX2xhc3QpOyB9CisjZWxzZQorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEVyYXNlcyBhIFtmaXJzdCxsYXN0KSByYW5nZSBvZiBlbGVtZW50cyBmcm9tIGEgJXNldC4KKyAgICAgICAqICBAcGFyYW0gIGZpcnN0ICBJdGVyYXRvciBwb2ludGluZyB0byB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIHRvIGJlCisgICAgICAgKiAgICAgICAgICAgICAgICAgZXJhc2VkLgorICAgICAgICogIEBwYXJhbSAgbGFzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgcmFuZ2UgdG8gYmUgZXJhc2VkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGVyYXNlcyBhIHNlcXVlbmNlIG9mIGVsZW1lbnRzIGZyb20gYSAlc2V0LgorICAgICAgICogIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50LCBhbmQgdGhhdCBpZgorICAgICAgICogIHRoZSBlbGVtZW50IGlzIGl0c2VsZiBhIHBvaW50ZXIsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZAorICAgICAgICogIGluIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCisgICAgICB7IF9NX3QuZXJhc2UoX19maXJzdCwgX19sYXN0KTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEVyYXNlcyBhbGwgZWxlbWVudHMgaW4gYSAlc2V0LiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gb25seSBlcmFzZXMKKyAgICAgICAqICB0aGUgZWxlbWVudHMsIGFuZCB0aGF0IGlmIHRoZSBlbGVtZW50cyB0aGVtc2VsdmVzIGFyZSBwb2ludGVycywgdGhlCisgICAgICAgKiAgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQgaW4gYW55IHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzCisgICAgICAgKiAgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgY2xlYXIoKQorICAgICAgeyBfTV90LmNsZWFyKCk7IH0KKworICAgICAgLy8gc2V0IG9wZXJhdGlvbnM6CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZHMgdGhlIG51bWJlciBvZiBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gIHggIEVsZW1lbnQgdG8gbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuICBOdW1iZXIgb2YgZWxlbWVudHMgd2l0aCBzcGVjaWZpZWQga2V5LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIG9ubHkgbWFrZXMgc2Vuc2UgZm9yIG11bHRpc2V0czsgZm9yIHNldCB0aGUgcmVzdWx0IHdpbGwKKyAgICAgICAqICBlaXRoZXIgYmUgMCAobm90IHByZXNlbnQpIG9yIDEgKHByZXNlbnQpLgorICAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LmZpbmQoX194KSA9PSBfTV90LmVuZCgpID8gMCA6IDE7IH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMjE0LiAgc2V0OjpmaW5kKCkgbWlzc2luZyBjb25zdCBvdmVybG9hZAorICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFRyaWVzIHRvIGxvY2F0ZSBhbiBlbGVtZW50IGluIGEgJXNldC4KKyAgICAgICAqICBAcGFyYW0gIHggIEVsZW1lbnQgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciBwb2ludGluZyB0byBzb3VnaHQtYWZ0ZXIgZWxlbWVudCwgb3IgZW5kKCkgaWYgbm90CisgICAgICAgKiAgICAgICAgICAgZm91bmQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBrZXkgYW5kIHRyaWVzIHRvIGxvY2F0ZSB0aGUgZWxlbWVudCB3aXRoIHdoaWNoCisgICAgICAgKiAgdGhlIGtleSBtYXRjaGVzLiAgSWYgc3VjY2Vzc2Z1bCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBpdGVyYXRvcgorICAgICAgICogIHBvaW50aW5nIHRvIHRoZSBzb3VnaHQgYWZ0ZXIgZWxlbWVudC4gIElmIHVuc3VjY2Vzc2Z1bCBpdCByZXR1cm5zIHRoZQorICAgICAgICogIHBhc3QtdGhlLWVuZCAoIEBjIGVuZCgpICkgaXRlcmF0b3IuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KKyAgICAgIC8vQH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEZpbmRzIHRoZSBiZWdpbm5pbmcgb2YgYSBzdWJzZXF1ZW5jZSBtYXRjaGluZyBnaXZlbiBrZXkuCisgICAgICAgKiAgQHBhcmFtICB4ICBLZXkgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciBwb2ludGluZyB0byBmaXJzdCBlbGVtZW50IGVxdWFsIHRvIG9yIGdyZWF0ZXIKKyAgICAgICAqICAgICAgICAgICB0aGFuIGtleSwgb3IgZW5kKCkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBvZiBhIHN1YnNlcXVlbmNlIG9mIGVsZW1lbnRzCisgICAgICAgKiAgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBrZXkuICBJZiB1bnN1Y2Nlc3NmdWwgaXQgcmV0dXJucyBhbiBpdGVyYXRvcgorICAgICAgICogIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaGFzIGEgZ3JlYXRlciB2YWx1ZSB0aGFuIGdpdmVuIGtleQorICAgICAgICogIG9yIGVuZCgpIGlmIG5vIHN1Y2ggZWxlbWVudCBleGlzdHMuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyB9CisgICAgICAvL0B9CisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBGaW5kcyB0aGUgZW5kIG9mIGEgc3Vic2VxdWVuY2UgbWF0Y2hpbmcgZ2l2ZW4ga2V5LgorICAgICAgICogIEBwYXJhbSAgeCAgS2V5IHRvIGJlIGxvY2F0ZWQuCisgICAgICAgKiAgQHJldHVybiBJdGVyYXRvciBwb2ludGluZyB0byB0aGUgZmlyc3QgZWxlbWVudAorICAgICAgICogICAgICAgICAgZ3JlYXRlciB0aGFuIGtleSwgb3IgZW5kKCkuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOyB9CisgICAgICAvL0B9CisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBGaW5kcyBhIHN1YnNlcXVlbmNlIG1hdGNoaW5nIGdpdmVuIGtleS4KKyAgICAgICAqICBAcGFyYW0gIHggIEtleSB0byBiZSBsb2NhdGVkLgorICAgICAgICogIEByZXR1cm4gIFBhaXIgb2YgaXRlcmF0b3JzIHRoYXQgcG9zc2libHkgcG9pbnRzIHRvIHRoZSBzdWJzZXF1ZW5jZQorICAgICAgICogICAgICAgICAgIG1hdGNoaW5nIGdpdmVuIGtleS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvCisgICAgICAgKiAgQGNvZGUKKyAgICAgICAqICAgIHN0ZDo6bWFrZV9wYWlyKGMubG93ZXJfYm91bmQodmFsKSwKKyAgICAgICAqICAgICAgICAgICAgICAgICAgIGMudXBwZXJfYm91bmQodmFsKSkKKyAgICAgICAqICBAZW5kY29kZQorICAgICAgICogIChidXQgaXMgZmFzdGVyIHRoYW4gbWFraW5nIHRoZSBjYWxscyBzZXBhcmF0ZWx5KS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBwcm9iYWJseSBvbmx5IG1ha2VzIHNlbnNlIGZvciBtdWx0aXNldHMuCisgICAgICAgKi8KKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOyB9CisKKyAgICAgIHN0ZDo6cGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOyB9CisgICAgICAvL0B9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9LMSwgdHlwZW5hbWUgX0MxLCB0eXBlbmFtZSBfQTE+CisgICAgICAgIGZyaWVuZCBib29sCisgICAgICAgIG9wZXJhdG9yPT0oY29uc3Qgc2V0PF9LMSwgX0MxLCBfQTE+JiwgY29uc3Qgc2V0PF9LMSwgX0MxLCBfQTE+Jik7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9LMSwgdHlwZW5hbWUgX0MxLCB0eXBlbmFtZSBfQTE+CisgICAgICAgIGZyaWVuZCBib29sCisgICAgICAgIG9wZXJhdG9yPChjb25zdCBzZXQ8X0sxLCBfQzEsIF9BMT4mLCBjb25zdCBzZXQ8X0sxLCBfQzEsIF9BMT4mKTsKKyAgICB9OworCisKKyAgLyoqCisgICAqICBAYnJpZWYgIFNldCBlcXVhbGl0eSBjb21wYXJpc29uLgorICAgKiAgQHBhcmFtICB4ICBBICVzZXQuCisgICAqICBAcGFyYW0gIHkgIEEgJXNldCBvZiB0aGUgc2FtZSB0eXBlIGFzIEBhIHguCisgICAqICBAcmV0dXJuICBUcnVlIGlmZiB0aGUgc2l6ZSBhbmQgZWxlbWVudHMgb2YgdGhlIHNldHMgYXJlIGVxdWFsLgorICAgKgorICAgKiAgVGhpcyBpcyBhbiBlcXVpdmFsZW5jZSByZWxhdGlvbi4gIEl0IGlzIGxpbmVhciBpbiB0aGUgc2l6ZSBvZiB0aGUgc2V0cy4KKyAgICogIFNldHMgYXJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudCBpZiB0aGVpciBzaXplcyBhcmUgZXF1YWwsIGFuZCBpZgorICAgKiAgY29ycmVzcG9uZGluZyBlbGVtZW50cyBjb21wYXJlIGVxdWFsLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7IH0KKworICAvKioKKyAgICogIEBicmllZiAgU2V0IG9yZGVyaW5nIHJlbGF0aW9uLgorICAgKiAgQHBhcmFtICB4ICBBICVzZXQuCisgICAqICBAcGFyYW0gIHkgIEEgJXNldCBvZiB0aGUgc2FtZSB0eXBlIGFzIEBhIHguCisgICAqICBAcmV0dXJuICBUcnVlIGlmZiBAYSB4IGlzIGxleGljb2dyYXBoaWNhbGx5IGxlc3MgdGhhbiBAYSB5LgorICAgKgorICAgKiAgVGhpcyBpcyBhIHRvdGFsIG9yZGVyaW5nIHJlbGF0aW9uLiAgSXQgaXMgbGluZWFyIGluIHRoZSBzaXplIG9mIHRoZQorICAgKiAgbWFwcy4gIFRoZSBlbGVtZW50cyBtdXN0IGJlIGNvbXBhcmFibGUgd2l0aCBAYyA8LgorICAgKgorICAgKiAgU2VlIHN0ZDo6bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKSBmb3IgaG93IHRoZSBkZXRlcm1pbmF0aW9uIGlzIG1hZGUuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gsCisJICAgICAgY29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01fdDsgfQorCisgIC8vLyAgUmV0dXJucyAhKHggPT0geSkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CisKKyAgLy8vICBSZXR1cm5zIHkgPCB4LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jPiYgX194LAorCSAgICAgIGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQorCisgIC8vLyAgUmV0dXJucyAhKHkgPCB4KQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CisKKyAgLy8vICBSZXR1cm5zICEoeCA8IHkpCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KKworICAvLy8gU2VlIHN0ZDo6c2V0Ojpzd2FwKCkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jPiYgX194LCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworX0dMSUJDWFhfRU5EX05FU1RFRF9OQU1FU1BBQ0UKKworI2VuZGlmIC8qIF9TVExfU0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfc3RhY2suaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfc3RhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmY1MGFkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF9zdGFjay5oCkBAIC0wLDAgKzEsMjg5IEBACisvLyBTdGFjayBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBzdGxfc3RhY2suaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWZuZGVmIF9TVExfU1RBQ0tfSAorI2RlZmluZSBfU1RMX1NUQUNLX0ggMQorCisjaW5jbHVkZSA8Yml0cy9jb25jZXB0X2NoZWNrLmg+CisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvKioKKyAgICogIEBicmllZiAgQSBzdGFuZGFyZCBjb250YWluZXIgZ2l2aW5nIEZJTE8gYmVoYXZpb3IuCisgICAqCisgICAqICBAaW5ncm91cCBzZXF1ZW5jZXMKKyAgICoKKyAgICogIE1lZXRzIG1hbnkgb2YgdGhlIHJlcXVpcmVtZW50cyBvZiBhCisgICAqICA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2NSI+Y29udGFpbmVyPC9hPiwKKyAgICogIGJ1dCBkb2VzIG5vdCBkZWZpbmUgYW55dGhpbmcgdG8gZG8gd2l0aCBpdGVyYXRvcnMuICBWZXJ5IGZldyBvZiB0aGUKKyAgICogIG90aGVyIHN0YW5kYXJkIGNvbnRhaW5lciBpbnRlcmZhY2VzIGFyZSBkZWZpbmVkLgorICAgKgorICAgKiAgVGhpcyBpcyBub3QgYSB0cnVlIGNvbnRhaW5lciwgYnV0IGFuIEBlIGFkYXB0b3IuICBJdCBob2xkcworICAgKiAgYW5vdGhlciBjb250YWluZXIsIGFuZCBwcm92aWRlcyBhIHdyYXBwZXIgaW50ZXJmYWNlIHRvIHRoYXQKKyAgICogIGNvbnRhaW5lci4gIFRoZSB3cmFwcGVyIGlzIHdoYXQgZW5mb3JjZXMgc3RyaWN0CisgICAqICBmaXJzdC1pbi1sYXN0LW91dCAlc3RhY2sgYmVoYXZpb3IuCisgICAqCisgICAqICBUaGUgc2Vjb25kIHRlbXBsYXRlIHBhcmFtZXRlciBkZWZpbmVzIHRoZSB0eXBlIG9mIHRoZSB1bmRlcmx5aW5nCisgICAqICBzZXF1ZW5jZS9jb250YWluZXIuICBJdCBkZWZhdWx0cyB0byBzdGQ6OmRlcXVlLCBidXQgaXQgY2FuIGJlCisgICAqICBhbnkgdHlwZSB0aGF0IHN1cHBvcnRzIEBjIGJhY2ssIEBjIHB1c2hfYmFjaywgYW5kIEBjIHBvcF9mcm9udCwKKyAgICogIHN1Y2ggYXMgc3RkOjpsaXN0LCBzdGQ6OnZlY3Rvciwgb3IgYW4gYXBwcm9wcmlhdGUgdXNlci1kZWZpbmVkCisgICAqICB0eXBlLgorICAgKgorICAgKiAgTWVtYmVycyBub3QgZm91bmQgaW4gQGEgbm9ybWFsIGNvbnRhaW5lcnMgYXJlIEBjIGNvbnRhaW5lcl90eXBlLAorICAgKiAgd2hpY2ggaXMgYSB0eXBlZGVmIGZvciB0aGUgc2Vjb25kIFNlcXVlbmNlIHBhcmFtZXRlciwgYW5kIEBjCisgICAqICBwdXNoLCBAYyBwb3AsIGFuZCBAYyB0b3AsIHdoaWNoIGFyZSBzdGFuZGFyZCAlc3RhY2svRklMTworICAgKiAgb3BlcmF0aW9ucy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfU2VxdWVuY2UgPSBkZXF1ZTxfVHA+ID4KKyAgICBjbGFzcyBzdGFjaworICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6dmFsdWVfdHlwZSBfU2VxdWVuY2VfdmFsdWVfdHlwZTsKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlcyhfVHAsIF9TR0lBc3NpZ25hYmxlQ29uY2VwdCkKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlcyhfU2VxdWVuY2UsIF9CYWNrSW5zZXJ0aW9uU2VxdWVuY2VDb25jZXB0KQorICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzMihfVHAsIF9TZXF1ZW5jZV92YWx1ZV90eXBlLCBfU2FtZVR5cGVDb25jZXB0KQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfU2VxMT4KKyAgICAgICAgZnJpZW5kIGJvb2wKKyAgICAgICAgb3BlcmF0b3I9PShjb25zdCBzdGFjazxfVHAxLCBfU2VxMT4mLCBjb25zdCBzdGFjazxfVHAxLCBfU2VxMT4mKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1NlcTE+CisgICAgICAgIGZyaWVuZCBib29sCisgICAgICAgIG9wZXJhdG9yPChjb25zdCBzdGFjazxfVHAxLCBfU2VxMT4mLCBjb25zdCBzdGFjazxfVHAxLCBfU2VxMT4mKTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjp2YWx1ZV90eXBlICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6cmVmZXJlbmNlICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6Y29uc3RfcmVmZXJlbmNlICAgICAgICAgICBjb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6c2l6ZV90eXBlICAgICAgICAgICAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmICAgICAgICAgIF9TZXF1ZW5jZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfdHlwZTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgIC8vICBTZWUgcXVldWU6OmMgZm9yIG5vdGVzIG9uIHRoaXMgbmFtZS4KKyAgICAgIF9TZXF1ZW5jZSBjOworCisgICAgcHVibGljOgorICAgICAgLy8gWFhYIHJlbW92ZWQgb2xkIGRlZiBjdG9yLCBhZGRlZCBkZWYgYXJnIHRvIHRoaXMgb25lIHRvIG1hdGNoIDE0ODgyCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIERlZmF1bHQgY29uc3RydWN0b3IgY3JlYXRlcyBubyBlbGVtZW50cy4KKyAgICAgICAqLworI2lmbmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgZXhwbGljaXQKKyAgICAgIHN0YWNrKGNvbnN0IF9TZXF1ZW5jZSYgX19jID0gX1NlcXVlbmNlKCkpCisgICAgICA6IGMoX19jKSB7IH0KKyNlbHNlCisgICAgICBleHBsaWNpdAorICAgICAgc3RhY2soY29uc3QgX1NlcXVlbmNlJiBfX2MpCisgICAgICA6IGMoX19jKSB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIHN0YWNrKF9TZXF1ZW5jZSYmIF9fYyA9IF9TZXF1ZW5jZSgpKQorICAgICAgOiBjKHN0ZDo6bW92ZShfX2MpKSB7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIHRydWUgaWYgdGhlICVzdGFjayBpcyBlbXB0eS4KKyAgICAgICAqLworICAgICAgYm9vbAorICAgICAgZW1wdHkoKSBjb25zdAorICAgICAgeyByZXR1cm4gYy5lbXB0eSgpOyB9CisKKyAgICAgIC8qKiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSAlc3RhY2suICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGMuc2l6ZSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIHJlZmVyZW5jZSB0byB0aGUgZGF0YSBhdCB0aGUgZmlyc3QKKyAgICAgICAqICBlbGVtZW50IG9mIHRoZSAlc3RhY2suCisgICAgICAgKi8KKyAgICAgIHJlZmVyZW5jZQorICAgICAgdG9wKCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfbm9uZW1wdHkoKTsKKwlyZXR1cm4gYy5iYWNrKCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgYXQgdGhlIGZpcnN0CisgICAgICAgKiAgZWxlbWVudCBvZiB0aGUgJXN0YWNrLgorICAgICAgICovCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIHRvcCgpIGNvbnN0CisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX25vbmVtcHR5KCk7CisJcmV0dXJuIGMuYmFjaygpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFkZCBkYXRhIHRvIHRoZSB0b3Agb2YgdGhlICVzdGFjay4KKyAgICAgICAqICBAcGFyYW0gIHggIERhdGEgdG8gYmUgYWRkZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgaXMgYSB0eXBpY2FsICVzdGFjayBvcGVyYXRpb24uICBUaGUgZnVuY3Rpb24gY3JlYXRlcyBhbgorICAgICAgICogIGVsZW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgJXN0YWNrIGFuZCBhc3NpZ25zIHRoZSBnaXZlbiBkYXRhCisgICAgICAgKiAgdG8gaXQuICBUaGUgdGltZSBjb21wbGV4aXR5IG9mIHRoZSBvcGVyYXRpb24gZGVwZW5kcyBvbiB0aGUKKyAgICAgICAqICB1bmRlcmx5aW5nIHNlcXVlbmNlLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwdXNoKGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsgYy5wdXNoX2JhY2soX194KTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHZvaWQKKyAgICAgIHB1c2godmFsdWVfdHlwZSYmIF9feCkKKyAgICAgIHsgYy5wdXNoX2JhY2soc3RkOjptb3ZlKF9feCkpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICB2b2lkCisgICAgICAgIGVtcGxhY2UoX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeyBjLmVtcGxhY2VfYmFjayhzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOyB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZW1vdmVzIGZpcnN0IGVsZW1lbnQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgaXMgYSB0eXBpY2FsICVzdGFjayBvcGVyYXRpb24uICBJdCBzaHJpbmtzIHRoZSAlc3RhY2sKKyAgICAgICAqICBieSBvbmUuICBUaGUgdGltZSBjb21wbGV4aXR5IG9mIHRoZSBvcGVyYXRpb24gZGVwZW5kcyBvbiB0aGUKKyAgICAgICAqICB1bmRlcmx5aW5nIHNlcXVlbmNlLgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgbm8gZGF0YSBpcyByZXR1cm5lZCwgYW5kIGlmIHRoZSBmaXJzdCBlbGVtZW50J3MKKyAgICAgICAqICBkYXRhIGlzIG5lZWRlZCwgaXQgc2hvdWxkIGJlIHJldHJpZXZlZCBiZWZvcmUgcG9wKCkgaXMKKyAgICAgICAqICBjYWxsZWQuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHBvcCgpCisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX25vbmVtcHR5KCk7CisJYy5wb3BfYmFjaygpOworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoc3RhY2smIF9fcykKKyAgICAgIHsgYy5zd2FwKF9fcy5jKTsgfQorI2VuZGlmCisgICAgfTsKKworICAvKioKKyAgICogIEBicmllZiAgU3RhY2sgZXF1YWxpdHkgY29tcGFyaXNvbi4KKyAgICogIEBwYXJhbSAgeCAgQSAlc3RhY2suCisgICAqICBAcGFyYW0gIHkgIEEgJXN0YWNrIG9mIHRoZSBzYW1lIHR5cGUgYXMgQGEgeC4KKyAgICogIEByZXR1cm4gIFRydWUgaWZmIHRoZSBzaXplIGFuZCBlbGVtZW50cyBvZiB0aGUgc3RhY2tzIGFyZSBlcXVhbC4KKyAgICoKKyAgICogIFRoaXMgaXMgYW4gZXF1aXZhbGVuY2UgcmVsYXRpb24uICBDb21wbGV4aXR5IGFuZCBzZW1hbnRpY3MKKyAgICogIGRlcGVuZCBvbiB0aGUgdW5kZXJseWluZyBzZXF1ZW5jZSB0eXBlLCBidXQgdGhlIGV4cGVjdGVkIHJ1bGVzCisgICAqICBhcmU6IHRoaXMgcmVsYXRpb24gaXMgbGluZWFyIGluIHRoZSBzaXplIG9mIHRoZSBzZXF1ZW5jZXMsIGFuZAorICAgKiAgc3RhY2tzIGFyZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQgaWYgdGhlaXIgc2VxdWVuY2VzIGNvbXBhcmUKKyAgICogIGVxdWFsLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9TZXE+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IHN0YWNrPF9UcCwgX1NlcT4mIF9feCwgY29uc3Qgc3RhY2s8X1RwLCBfU2VxPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5jID09IF9feS5jOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFN0YWNrIG9yZGVyaW5nIHJlbGF0aW9uLgorICAgKiAgQHBhcmFtICB4ICBBICVzdGFjay4KKyAgICogIEBwYXJhbSAgeSAgQSAlc3RhY2sgb2YgdGhlIHNhbWUgdHlwZSBhcyBAYSB4LgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZmYgQGEgeCBpcyBsZXhpY29ncmFwaGljYWxseSBsZXNzIHRoYW4gQGEgeS4KKyAgICoKKyAgICogIFRoaXMgaXMgYW4gdG90YWwgb3JkZXJpbmcgcmVsYXRpb24uICBDb21wbGV4aXR5IGFuZCBzZW1hbnRpY3MKKyAgICogIGRlcGVuZCBvbiB0aGUgdW5kZXJseWluZyBzZXF1ZW5jZSB0eXBlLCBidXQgdGhlIGV4cGVjdGVkIHJ1bGVzCisgICAqICBhcmU6IHRoaXMgcmVsYXRpb24gaXMgbGluZWFyIGluIHRoZSBzaXplIG9mIHRoZSBzZXF1ZW5jZXMsIHRoZQorICAgKiAgZWxlbWVudHMgbXVzdCBiZSBjb21wYXJhYmxlIHdpdGggQGMgPCwgYW5kCisgICAqICBzdGQ6OmxleGljb2dyYXBoaWNhbF9jb21wYXJlKCkgaXMgdXN1YWxseSB1c2VkIHRvIG1ha2UgdGhlCisgICAqICBkZXRlcm1pbmF0aW9uLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9TZXE+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3Qgc3RhY2s8X1RwLCBfU2VxPiYgX194LCBjb25zdCBzdGFjazxfVHAsIF9TZXE+JiBfX3kpCisgICAgeyByZXR1cm4gX194LmMgPCBfX3kuYzsgfQorCisgIC8vLyBCYXNlZCBvbiBvcGVyYXRvcj09CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1NlcT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc3RhY2s8X1RwLCBfU2VxPiYgX194LCBjb25zdCBzdGFjazxfVHAsIF9TZXE+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQorCisgIC8vLyBCYXNlZCBvbiBvcGVyYXRvcjwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfU2VxPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IHN0YWNrPF9UcCwgX1NlcT4mIF9feCwgY29uc3Qgc3RhY2s8X1RwLCBfU2VxPiYgX195KQorICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQorCisgIC8vLyBCYXNlZCBvbiBvcGVyYXRvcjwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfU2VxPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBzdGFjazxfVHAsIF9TZXE+JiBfX3gsIGNvbnN0IHN0YWNrPF9UcCwgX1NlcT4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I8CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1NlcT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3Qgc3RhY2s8X1RwLCBfU2VxPiYgX194LCBjb25zdCBzdGFjazxfVHAsIF9TZXE+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9TZXE+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHN0YWNrPF9UcCwgX1NlcT4mIF9feCwgc3RhY2s8X1RwLCBfU2VxPiYgX195KQorICAgIHsgX194LnN3YXAoX195KTsgfQorI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmIC8qIF9TVExfU1RBQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF90ZW1wYnVmLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3RsX3RlbXBidWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDhiMWVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF90ZW1wYnVmLmgKQEAgLTAsMCArMSwyMDcgQEAKKy8vIFRlbXBvcmFyeSBidWZmZXIgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk3CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgc3RsX3RlbXBidWYuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWZuZGVmIF9TVExfVEVNUEJVRl9ICisjZGVmaW5lIF9TVExfVEVNUEJVRl9IIDEKKworI2luY2x1ZGUgPGJpdHMvc3RsX2FsZ29iYXNlLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfY29uc3RydWN0Lmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfdW5pbml0aWFsaXplZC5oPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8qKgorICAgKiAgQGJyaWVmIEFsbG9jYXRlcyBhIHRlbXBvcmFyeSBidWZmZXIuCisgICAqICBAcGFyYW0gIGxlbiAgVGhlIG51bWJlciBvZiBvYmplY3RzIG9mIHR5cGUgVHAuCisgICAqICBAcmV0dXJuIFNlZSBmdWxsIGRlc2NyaXB0aW9uLgorICAgKgorICAgKiAgUmVpbnZlbnRpbmcgdGhlIHdoZWVsLCBidXQgdGhpcyB0aW1lIHdpdGggcHJldHRpZXIgc3Bva2VzIQorICAgKgorICAgKiAgVGhpcyBmdW5jdGlvbiB0cmllcyB0byBvYnRhaW4gc3RvcmFnZSBmb3IgQGMgbGVuIGFkamFjZW50IFRwCisgICAqICBvYmplY3RzLiAgVGhlIG9iamVjdHMgdGhlbXNlbHZlcyBhcmUgbm90IGNvbnN0cnVjdGVkLCBvZiBjb3Vyc2UuCisgICAqICBBIHBhaXI8PiBpcyByZXR1cm5lZCBjb250YWluaW5nIDxlbT50aGUgYnVmZmVyIHMgYWRkcmVzcyBhbmQKKyAgICogIGNhcGFjaXR5IChpbiB0aGUgdW5pdHMgb2Ygc2l6ZW9mKFRwKSksIG9yIGEgcGFpciBvZiAwIHZhbHVlcyBpZgorICAgKiAgbm8gc3RvcmFnZSBjYW4gYmUgb2J0YWluZWQuPC9lbT4gIE5vdGUgdGhhdCB0aGUgY2FwYWNpdHkgb2J0YWluZWQKKyAgICogIG1heSBiZSBsZXNzIHRoYW4gdGhhdCByZXF1ZXN0ZWQgaWYgdGhlIG1lbW9yeSBpcyB1bmF2YWlsYWJsZTsKKyAgICogIHlvdSBzaG91bGQgY29tcGFyZSBsZW4gd2l0aCB0aGUgLnNlY29uZCByZXR1cm4gdmFsdWUuCisgICAqCisgICAqIFByb3ZpZGVzIHRoZSBub3Rocm93IGV4Y2VwdGlvbiBndWFyYW50ZWUuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgcGFpcjxfVHAqLCBwdHJkaWZmX3Q+CisgICAgZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuKQorICAgIHsKKyAgICAgIGNvbnN0IHB0cmRpZmZfdCBfX21heCA9CisJX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPHB0cmRpZmZfdD46Ol9fbWF4IC8gc2l6ZW9mKF9UcCk7CisgICAgICBpZiAoX19sZW4gPiBfX21heCkKKwlfX2xlbiA9IF9fbWF4OworICAgICAgCisgICAgICB3aGlsZSAoX19sZW4gPiAwKSAKKwl7CisJICBfVHAqIF9fdG1wID0gc3RhdGljX2Nhc3Q8X1RwKj4oOjpvcGVyYXRvciBuZXcoX19sZW4gKiBzaXplb2YoX1RwKSwgCisJCQkJCQkJc3RkOjpub3Rocm93KSk7CisJICBpZiAoX190bXAgIT0gMCkKKwkgICAgcmV0dXJuIHN0ZDo6cGFpcjxfVHAqLCBwdHJkaWZmX3Q+KF9fdG1wLCBfX2xlbik7CisJICBfX2xlbiAvPSAyOworCX0KKyAgICAgIHJldHVybiBzdGQ6OnBhaXI8X1RwKiwgcHRyZGlmZl90PihzdGF0aWNfY2FzdDxfVHAqPigwKSwgMCk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIFRoZSBjb21wYW5pb24gdG8gZ2V0X3RlbXBvcmFyeV9idWZmZXIoKS4KKyAgICogIEBwYXJhbSAgcCAgQSBidWZmZXIgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgZ2V0X3RlbXBvcmFyeV9idWZmZXIuCisgICAqICBAcmV0dXJuICAgTm9uZS4KKyAgICoKKyAgICogIEZyZWVzIHRoZSBtZW1vcnkgcG9pbnRlZCB0byBieSBwLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgcmV0dXJuX3RlbXBvcmFyeV9idWZmZXIoX1RwKiBfX3ApCisgICAgeyA6Om9wZXJhdG9yIGRlbGV0ZShfX3AsIHN0ZDo6bm90aHJvdyk7IH0KKworCisgIC8qKgorICAgKiAgVGhpcyBjbGFzcyBpcyB1c2VkIGluIHR3byBwbGFjZXM6IHN0bF9hbGdvLmggYW5kIGV4dC9tZW1vcnksCisgICAqICB3aGVyZSBpdCBpcyB3cmFwcGVkIGFzIHRoZSB0ZW1wb3JhcnlfYnVmZmVyIGNsYXNzLiAgU2VlCisgICAqICB0ZW1wb3JhcnlfYnVmZmVyIGRvY3MgZm9yIG1vcmUgbm90ZXMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgX1RlbXBvcmFyeV9idWZmZXIKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0KQorCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfVHAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOworICAgICAgdHlwZWRlZiBwb2ludGVyICAgICBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgcHRyZGlmZl90ICAgc2l6ZV90eXBlOworCisgICAgcHJvdGVjdGVkOgorICAgICAgc2l6ZV90eXBlICBfTV9vcmlnaW5hbF9sZW47CisgICAgICBzaXplX3R5cGUgIF9NX2xlbjsKKyAgICAgIHBvaW50ZXIgICAgX01fYnVmZmVyOworCisgICAgcHVibGljOgorICAgICAgLy8vIEFzIHBlciBUYWJsZSBtdW1ibGUuCisgICAgICBzaXplX3R5cGUKKyAgICAgIHNpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fbGVuOyB9CisKKyAgICAgIC8vLyBSZXR1cm5zIHRoZSBzaXplIHJlcXVlc3RlZCBieSB0aGUgY29uc3RydWN0b3I7IG1heSBiZSA+c2l6ZSgpLgorICAgICAgc2l6ZV90eXBlCisgICAgICByZXF1ZXN0ZWRfc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9vcmlnaW5hbF9sZW47IH0KKworICAgICAgLy8vIEFzIHBlciBUYWJsZSBtdW1ibGUuCisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKQorICAgICAgeyByZXR1cm4gX01fYnVmZmVyOyB9CisKKyAgICAgIC8vLyBBcyBwZXIgVGFibGUgbXVtYmxlLgorICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpCisgICAgICB7IHJldHVybiBfTV9idWZmZXIgKyBfTV9sZW47IH0KKworICAgICAgLyoqCisgICAgICAgKiBDb25zdHJ1Y3RzIGEgdGVtcG9yYXJ5IGJ1ZmZlciBvZiBhIHNpemUgc29tZXdoZXJlIGJldHdlZW4KKyAgICAgICAqIHplcm8gYW5kIHRoZSBzaXplIG9mIHRoZSBnaXZlbiByYW5nZS4KKyAgICAgICAqLworICAgICAgX1RlbXBvcmFyeV9idWZmZXIoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCk7CisKKyAgICAgIH5fVGVtcG9yYXJ5X2J1ZmZlcigpCisgICAgICB7CisJc3RkOjpfRGVzdHJveShfTV9idWZmZXIsIF9NX2J1ZmZlciArIF9NX2xlbik7CisJc3RkOjpyZXR1cm5fdGVtcG9yYXJ5X2J1ZmZlcihfTV9idWZmZXIpOworICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIC8vIERpc2FibGUgY29weSBjb25zdHJ1Y3RvciBhbmQgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgIF9UZW1wb3JhcnlfYnVmZmVyKGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJik7CisKKyAgICAgIHZvaWQKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgorICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD46OgorICAgIF9UZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCisgICAgOiBfTV9vcmlnaW5hbF9sZW4oc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpKSwKKyAgICAgIF9NX2xlbigwKSwgX01fYnVmZmVyKDApCisgICAgeworICAgICAgX190cnkKKwl7CisJICBzdGQ6OnBhaXI8cG9pbnRlciwgc2l6ZV90eXBlPiBfX3Aoc3RkOjpnZXRfdGVtcG9yYXJ5X2J1ZmZlcjwKKwkJCQkJICAgIHZhbHVlX3R5cGU+KF9NX29yaWdpbmFsX2xlbikpOworCSAgX01fYnVmZmVyID0gX19wLmZpcnN0OworCSAgX01fbGVuID0gX19wLnNlY29uZDsKKwkgIGlmKF9NX2J1ZmZlcikKKwkgICAgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfY29uc3RydWN0X3JhbmdlKF9NX2J1ZmZlciwgX01fYnVmZmVyICsgX01fbGVuLAorCQkJCQkJICpfX2ZpcnN0KTsKKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBzdGQ6OnJldHVybl90ZW1wb3JhcnlfYnVmZmVyKF9NX2J1ZmZlcik7CisJICBfTV9idWZmZXIgPSAwOworCSAgX01fbGVuID0gMDsKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmIC8qIF9TVExfVEVNUEJVRl9IICovCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfdHJlZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF90cmVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM3ZGM1NwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfdHJlZS5oCkBAIC0wLDAgKzEsMTU5MyBAQAorLy8gUkIgdHJlZSBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKi8KKworLyoqIEBmaWxlIHN0bF90cmVlLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfU1RMX1RSRUVfSAorI2RlZmluZSBfU1RMX1RSRUVfSCAxCisKKyNpbmNsdWRlIDxiaXRzL3N0bF9hbGdvYmFzZS5oPgorI2luY2x1ZGUgPGJpdHMvYWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfZnVuY3Rpb24uaD4KKyNpbmNsdWRlIDxiaXRzL2NwcF90eXBlX3RyYWl0cy5oPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8vIFJlZC1ibGFjayB0cmVlIGNsYXNzLCBkZXNpZ25lZCBmb3IgdXNlIGluIGltcGxlbWVudGluZyBTVEwKKyAgLy8gYXNzb2NpYXRpdmUgY29udGFpbmVycyAoc2V0LCBtdWx0aXNldCwgbWFwLCBhbmQgbXVsdGltYXApLiBUaGUKKyAgLy8gaW5zZXJ0aW9uIGFuZCBkZWxldGlvbiBhbGdvcml0aG1zIGFyZSBiYXNlZCBvbiB0aG9zZSBpbiBDb3JtZW4sCisgIC8vIExlaXNlcnNvbiwgYW5kIFJpdmVzdCwgSW50cm9kdWN0aW9uIHRvIEFsZ29yaXRobXMgKE1JVCBQcmVzcywKKyAgLy8gMTk5MCksIGV4Y2VwdCB0aGF0CisgIC8vCisgIC8vICgxKSB0aGUgaGVhZGVyIGNlbGwgaXMgbWFpbnRhaW5lZCB3aXRoIGxpbmtzIG5vdCBvbmx5IHRvIHRoZSByb290CisgIC8vIGJ1dCBhbHNvIHRvIHRoZSBsZWZ0bW9zdCBub2RlIG9mIHRoZSB0cmVlLCB0byBlbmFibGUgY29uc3RhbnQKKyAgLy8gdGltZSBiZWdpbigpLCBhbmQgdG8gdGhlIHJpZ2h0bW9zdCBub2RlIG9mIHRoZSB0cmVlLCB0byBlbmFibGUKKyAgLy8gbGluZWFyIHRpbWUgcGVyZm9ybWFuY2Ugd2hlbiB1c2VkIHdpdGggdGhlIGdlbmVyaWMgc2V0IGFsZ29yaXRobXMKKyAgLy8gKHNldF91bmlvbiwgZXRjLikKKyAgLy8gCisgIC8vICgyKSB3aGVuIGEgbm9kZSBiZWluZyBkZWxldGVkIGhhcyB0d28gY2hpbGRyZW4gaXRzIHN1Y2Nlc3NvciBub2RlCisgIC8vIGlzIHJlbGlua2VkIGludG8gaXRzIHBsYWNlLCByYXRoZXIgdGhhbiBjb3BpZWQsIHNvIHRoYXQgdGhlIG9ubHkKKyAgLy8gaXRlcmF0b3JzIGludmFsaWRhdGVkIGFyZSB0aG9zZSByZWZlcnJpbmcgdG8gdGhlIGRlbGV0ZWQgbm9kZS4KKworICBlbnVtIF9SYl90cmVlX2NvbG9yIHsgX1NfcmVkID0gZmFsc2UsIF9TX2JsYWNrID0gdHJ1ZSB9OworCisgIHN0cnVjdCBfUmJfdHJlZV9ub2RlX2Jhc2UKKyAgeworICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNlKiBfQmFzZV9wdHI7CisgICAgdHlwZWRlZiBjb25zdCBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9Db25zdF9CYXNlX3B0cjsKKworICAgIF9SYl90cmVlX2NvbG9yCV9NX2NvbG9yOworICAgIF9CYXNlX3B0cgkJX01fcGFyZW50OworICAgIF9CYXNlX3B0cgkJX01fbGVmdDsKKyAgICBfQmFzZV9wdHIJCV9NX3JpZ2h0OworCisgICAgc3RhdGljIF9CYXNlX3B0cgorICAgIF9TX21pbmltdW0oX0Jhc2VfcHRyIF9feCkKKyAgICB7CisgICAgICB3aGlsZSAoX194LT5fTV9sZWZ0ICE9IDApIF9feCA9IF9feC0+X01fbGVmdDsKKyAgICAgIHJldHVybiBfX3g7CisgICAgfQorCisgICAgc3RhdGljIF9Db25zdF9CYXNlX3B0cgorICAgIF9TX21pbmltdW0oX0NvbnN0X0Jhc2VfcHRyIF9feCkKKyAgICB7CisgICAgICB3aGlsZSAoX194LT5fTV9sZWZ0ICE9IDApIF9feCA9IF9feC0+X01fbGVmdDsKKyAgICAgIHJldHVybiBfX3g7CisgICAgfQorCisgICAgc3RhdGljIF9CYXNlX3B0cgorICAgIF9TX21heGltdW0oX0Jhc2VfcHRyIF9feCkKKyAgICB7CisgICAgICB3aGlsZSAoX194LT5fTV9yaWdodCAhPSAwKSBfX3ggPSBfX3gtPl9NX3JpZ2h0OworICAgICAgcmV0dXJuIF9feDsKKyAgICB9CisKKyAgICBzdGF0aWMgX0NvbnN0X0Jhc2VfcHRyCisgICAgX1NfbWF4aW11bShfQ29uc3RfQmFzZV9wdHIgX194KQorICAgIHsKKyAgICAgIHdoaWxlIChfX3gtPl9NX3JpZ2h0ICE9IDApIF9feCA9IF9feC0+X01fcmlnaHQ7CisgICAgICByZXR1cm4gX194OworICAgIH0KKyAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgorICAgIHN0cnVjdCBfUmJfdHJlZV9ub2RlIDogcHVibGljIF9SYl90cmVlX25vZGVfYmFzZQorICAgIHsKKyAgICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZTxfVmFsPiogX0xpbmtfdHlwZTsKKyAgICAgIF9WYWwgX01fdmFsdWVfZmllbGQ7CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIF9SYl90cmVlX25vZGUoX0FyZ3MmJi4uLiBfX2FyZ3MpCisJOiBfUmJfdHJlZV9ub2RlX2Jhc2UoKSwKKwkgIF9NX3ZhbHVlX2ZpZWxkKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLikgeyB9CisjZW5kaWYKKyAgICB9OworCisgIF9HTElCQ1hYX1BVUkUgX1JiX3RyZWVfbm9kZV9iYXNlKgorICBfUmJfdHJlZV9pbmNyZW1lbnQoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gpIHRocm93ICgpOworCisgIF9HTElCQ1hYX1BVUkUgY29uc3QgX1JiX3RyZWVfbm9kZV9iYXNlKgorICBfUmJfdHJlZV9pbmNyZW1lbnQoY29uc3QgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gpIHRocm93ICgpOworCisgIF9HTElCQ1hYX1BVUkUgX1JiX3RyZWVfbm9kZV9iYXNlKgorICBfUmJfdHJlZV9kZWNyZW1lbnQoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gpIHRocm93ICgpOworCisgIF9HTElCQ1hYX1BVUkUgY29uc3QgX1JiX3RyZWVfbm9kZV9iYXNlKgorICBfUmJfdHJlZV9kZWNyZW1lbnQoY29uc3QgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gpIHRocm93ICgpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX1JiX3RyZWVfaXRlcmF0b3IKKyAgICB7CisgICAgICB0eXBlZGVmIF9UcCAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKKworICAgICAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKKyAgICAgIHR5cGVkZWYgcHRyZGlmZl90ICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworCisgICAgICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9UcD4gICAgICAgIF9TZWxmOworICAgICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9CYXNlX3B0ciBfQmFzZV9wdHI7CisgICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1RwPiogICAgICAgICAgIF9MaW5rX3R5cGU7CisKKyAgICAgIF9SYl90cmVlX2l0ZXJhdG9yKCkKKyAgICAgIDogX01fbm9kZSgpIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgX1JiX3RyZWVfaXRlcmF0b3IoX0xpbmtfdHlwZSBfX3gpCisgICAgICA6IF9NX25vZGUoX194KSB7IH0KKworICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X0xpbmtfdHlwZT4oX01fbm9kZSktPl9NX3ZhbHVlX2ZpZWxkOyB9CisKKyAgICAgIHBvaW50ZXIKKyAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAgeyByZXR1cm4gJnN0YXRpY19jYXN0PF9MaW5rX3R5cGU+KF9NX25vZGUpLT5fTV92YWx1ZV9maWVsZDsgfQorCisgICAgICBfU2VsZiYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworCV9NX25vZGUgPSBfUmJfdHJlZV9pbmNyZW1lbnQoX01fbm9kZSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfU2VsZgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7CisJX1NlbGYgX190bXAgPSAqdGhpczsKKwlfTV9ub2RlID0gX1JiX3RyZWVfaW5jcmVtZW50KF9NX25vZGUpOworCXJldHVybiBfX3RtcDsKKyAgICAgIH0KKworICAgICAgX1NlbGYmCisgICAgICBvcGVyYXRvci0tKCkKKyAgICAgIHsKKwlfTV9ub2RlID0gX1JiX3RyZWVfZGVjcmVtZW50KF9NX25vZGUpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX1NlbGYKKyAgICAgIG9wZXJhdG9yLS0oaW50KQorICAgICAgeworCV9TZWxmIF9fdG1wID0gKnRoaXM7CisJX01fbm9kZSA9IF9SYl90cmVlX2RlY3JlbWVudChfTV9ub2RlKTsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgX1NlbGYmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX25vZGUgPT0gX194Ll9NX25vZGU7IH0KKworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCBfU2VsZiYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fbm9kZSAhPSBfX3guX01fbm9kZTsgfQorCisgICAgICBfQmFzZV9wdHIgX01fbm9kZTsKKyAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9SYl90cmVlX2NvbnN0X2l0ZXJhdG9yCisgICAgeworICAgICAgdHlwZWRlZiBfVHAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIGNvbnN0IF9UcCYgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1RwPiBpdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKKyAgICAgIHR5cGVkZWYgcHRyZGlmZl90ICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworCisgICAgICB0eXBlZGVmIF9SYl90cmVlX2NvbnN0X2l0ZXJhdG9yPF9UcD4gICAgICAgIF9TZWxmOworICAgICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9Db25zdF9CYXNlX3B0ciBfQmFzZV9wdHI7CisgICAgICB0eXBlZGVmIGNvbnN0IF9SYl90cmVlX25vZGU8X1RwPiogICAgICAgICAgIF9MaW5rX3R5cGU7CisKKyAgICAgIF9SYl90cmVlX2NvbnN0X2l0ZXJhdG9yKCkKKyAgICAgIDogX01fbm9kZSgpIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgX1JiX3RyZWVfY29uc3RfaXRlcmF0b3IoX0xpbmtfdHlwZSBfX3gpCisgICAgICA6IF9NX25vZGUoX194KSB7IH0KKworICAgICAgX1JiX3RyZWVfY29uc3RfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9faXQpCisgICAgICA6IF9NX25vZGUoX19pdC5fTV9ub2RlKSB7IH0KKworICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X0xpbmtfdHlwZT4oX01fbm9kZSktPl9NX3ZhbHVlX2ZpZWxkOyB9CisKKyAgICAgIHBvaW50ZXIKKyAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAgeyByZXR1cm4gJnN0YXRpY19jYXN0PF9MaW5rX3R5cGU+KF9NX25vZGUpLT5fTV92YWx1ZV9maWVsZDsgfQorCisgICAgICBfU2VsZiYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworCV9NX25vZGUgPSBfUmJfdHJlZV9pbmNyZW1lbnQoX01fbm9kZSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfU2VsZgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7CisJX1NlbGYgX190bXAgPSAqdGhpczsKKwlfTV9ub2RlID0gX1JiX3RyZWVfaW5jcmVtZW50KF9NX25vZGUpOworCXJldHVybiBfX3RtcDsKKyAgICAgIH0KKworICAgICAgX1NlbGYmCisgICAgICBvcGVyYXRvci0tKCkKKyAgICAgIHsKKwlfTV9ub2RlID0gX1JiX3RyZWVfZGVjcmVtZW50KF9NX25vZGUpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX1NlbGYKKyAgICAgIG9wZXJhdG9yLS0oaW50KQorICAgICAgeworCV9TZWxmIF9fdG1wID0gKnRoaXM7CisJX01fbm9kZSA9IF9SYl90cmVlX2RlY3JlbWVudChfTV9ub2RlKTsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgX1NlbGYmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX25vZGUgPT0gX194Ll9NX25vZGU7IH0KKworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCBfU2VsZiYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fbm9kZSAhPSBfX3guX01fbm9kZTsgfQorCisgICAgICBfQmFzZV9wdHIgX01fbm9kZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWw+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWw+JiBfX3gsCisgICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9jb25zdF9pdGVyYXRvcjxfVmFsPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbD4mIF9feCwKKyAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2NvbnN0X2l0ZXJhdG9yPF9WYWw+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX25vZGUgIT0gX195Ll9NX25vZGU7IH0KKworICB2b2lkCisgIF9SYl90cmVlX2luc2VydF9hbmRfcmViYWxhbmNlKGNvbnN0IGJvb2wgX19pbnNlcnRfbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UmIF9faGVhZGVyKSB0aHJvdyAoKTsKKworICBfUmJfdHJlZV9ub2RlX2Jhc2UqCisgIF9SYl90cmVlX3JlYmFsYW5jZV9mb3JfZXJhc2UoX1JiX3RyZWVfbm9kZV9iYXNlKiBjb25zdCBfX3osCisJCQkgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlJiBfX2hlYWRlcikgdGhyb3cgKCk7CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfVmFsPiA+CisgICAgY2xhc3MgX1JiX3RyZWUKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPF9SYl90cmVlX25vZGU8X1ZhbD4gPjo6b3RoZXIKKyAgICAgICAgICAgICAgX05vZGVfYWxsb2NhdG9yOworCisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9CYXNlX3B0cjsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1JiX3RyZWVfbm9kZV9iYXNlKiBfQ29uc3RfQmFzZV9wdHI7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9LZXkga2V5X3R5cGU7CisgICAgICB0eXBlZGVmIF9WYWwgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1ZhbD4qIF9MaW5rX3R5cGU7CisgICAgICB0eXBlZGVmIGNvbnN0IF9SYl90cmVlX25vZGU8X1ZhbD4qIF9Db25zdF9MaW5rX3R5cGU7CisgICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKKworICAgICAgX05vZGVfYWxsb2NhdG9yJgorICAgICAgX01fZ2V0X05vZGVfYWxsb2NhdG9yKCkKKyAgICAgIHsgcmV0dXJuICpzdGF0aWNfY2FzdDxfTm9kZV9hbGxvY2F0b3IqPigmdGhpcy0+X01faW1wbCk7IH0KKyAgICAgIAorICAgICAgY29uc3QgX05vZGVfYWxsb2NhdG9yJgorICAgICAgX01fZ2V0X05vZGVfYWxsb2NhdG9yKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICpzdGF0aWNfY2FzdDxjb25zdCBfTm9kZV9hbGxvY2F0b3IqPigmdGhpcy0+X01faW1wbCk7IH0KKworICAgICAgYWxsb2NhdG9yX3R5cGUKKyAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdAorICAgICAgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoX01fZ2V0X05vZGVfYWxsb2NhdG9yKCkpOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfTGlua190eXBlCisgICAgICBfTV9nZXRfbm9kZSgpCisgICAgICB7IHJldHVybiBfTV9pbXBsLl9Ob2RlX2FsbG9jYXRvcjo6YWxsb2NhdGUoMSk7IH0KKworICAgICAgdm9pZAorICAgICAgX01fcHV0X25vZGUoX0xpbmtfdHlwZSBfX3ApCisgICAgICB7IF9NX2ltcGwuX05vZGVfYWxsb2NhdG9yOjpkZWFsbG9jYXRlKF9fcCwgMSk7IH0KKworI2lmbmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgX0xpbmtfdHlwZQorICAgICAgX01fY3JlYXRlX25vZGUoY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeworCV9MaW5rX3R5cGUgX190bXAgPSBfTV9nZXRfbm9kZSgpOworCV9fdHJ5CisJICB7IGdldF9hbGxvY2F0b3IoKS5jb25zdHJ1Y3QoJl9fdG1wLT5fTV92YWx1ZV9maWVsZCwgX194KTsgfQorCV9fY2F0Y2goLi4uKQorCSAgeworCSAgICBfTV9wdXRfbm9kZShfX3RtcCk7CisJICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgfQorCXJldHVybiBfX3RtcDsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01fZGVzdHJveV9ub2RlKF9MaW5rX3R5cGUgX19wKQorICAgICAgeworCWdldF9hbGxvY2F0b3IoKS5kZXN0cm95KCZfX3AtPl9NX3ZhbHVlX2ZpZWxkKTsKKwlfTV9wdXRfbm9kZShfX3ApOworICAgICAgfQorI2Vsc2UKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICBfTGlua190eXBlCisgICAgICAgIF9NX2NyZWF0ZV9ub2RlKF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIF9MaW5rX3R5cGUgX190bXAgPSBfTV9nZXRfbm9kZSgpOworCSAgX190cnkKKwkgICAgeworCSAgICAgIF9NX2dldF9Ob2RlX2FsbG9jYXRvcigpLmNvbnN0cnVjdChfX3RtcCwKKwkJCQkJICAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeworCSAgICAgIF9NX3B1dF9ub2RlKF9fdG1wKTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCSAgcmV0dXJuIF9fdG1wOworCX0KKworICAgICAgdm9pZAorICAgICAgX01fZGVzdHJveV9ub2RlKF9MaW5rX3R5cGUgX19wKQorICAgICAgeworCV9NX2dldF9Ob2RlX2FsbG9jYXRvcigpLmRlc3Ryb3koX19wKTsKKwlfTV9wdXRfbm9kZShfX3ApOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIF9MaW5rX3R5cGUKKyAgICAgIF9NX2Nsb25lX25vZGUoX0NvbnN0X0xpbmtfdHlwZSBfX3gpCisgICAgICB7CisJX0xpbmtfdHlwZSBfX3RtcCA9IF9NX2NyZWF0ZV9ub2RlKF9feC0+X01fdmFsdWVfZmllbGQpOworCV9fdG1wLT5fTV9jb2xvciA9IF9feC0+X01fY29sb3I7CisJX190bXAtPl9NX2xlZnQgPSAwOworCV9fdG1wLT5fTV9yaWdodCA9IDA7CisJcmV0dXJuIF9fdG1wOworICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleV9jb21wYXJlLCAKKwkgICAgICAgYm9vbCBfSXNfcG9kX2NvbXBhcmF0b3IgPSBfX2lzX3BvZChfS2V5X2NvbXBhcmUpPgorICAgICAgICBzdHJ1Y3QgX1JiX3RyZWVfaW1wbCA6IHB1YmxpYyBfTm9kZV9hbGxvY2F0b3IKKyAgICAgICAgeworCSAgX0tleV9jb21wYXJlCQlfTV9rZXlfY29tcGFyZTsKKwkgIF9SYl90cmVlX25vZGVfYmFzZSAJX01faGVhZGVyOworCSAgc2l6ZV90eXBlIAkJX01fbm9kZV9jb3VudDsgLy8gS2VlcHMgdHJhY2sgb2Ygc2l6ZSBvZiB0cmVlLgorCisJICBfUmJfdHJlZV9pbXBsKCkKKwkgIDogX05vZGVfYWxsb2NhdG9yKCksIF9NX2tleV9jb21wYXJlKCksIF9NX2hlYWRlcigpLAorCSAgICBfTV9ub2RlX2NvdW50KDApCisJICB7IF9NX2luaXRpYWxpemUoKTsgfQorCisJICBfUmJfdHJlZV9pbXBsKGNvbnN0IF9LZXlfY29tcGFyZSYgX19jb21wLCBjb25zdCBfTm9kZV9hbGxvY2F0b3ImIF9fYSkKKwkgIDogX05vZGVfYWxsb2NhdG9yKF9fYSksIF9NX2tleV9jb21wYXJlKF9fY29tcCksIF9NX2hlYWRlcigpLAorCSAgICBfTV9ub2RlX2NvdW50KDApCisJICB7IF9NX2luaXRpYWxpemUoKTsgfQorCisJcHJpdmF0ZToKKwkgIHZvaWQKKwkgIF9NX2luaXRpYWxpemUoKQorCSAgeworCSAgICB0aGlzLT5fTV9oZWFkZXIuX01fY29sb3IgPSBfU19yZWQ7CisJICAgIHRoaXMtPl9NX2hlYWRlci5fTV9wYXJlbnQgPSAwOworCSAgICB0aGlzLT5fTV9oZWFkZXIuX01fbGVmdCA9ICZ0aGlzLT5fTV9oZWFkZXI7CisJICAgIHRoaXMtPl9NX2hlYWRlci5fTV9yaWdodCA9ICZ0aGlzLT5fTV9oZWFkZXI7CisJICB9CSAgICAKKwl9OworCisgICAgICBfUmJfdHJlZV9pbXBsPF9Db21wYXJlPiBfTV9pbXBsOworCisgICAgcHJvdGVjdGVkOgorICAgICAgX0Jhc2VfcHRyJgorICAgICAgX01fcm9vdCgpCisgICAgICB7IHJldHVybiB0aGlzLT5fTV9pbXBsLl9NX2hlYWRlci5fTV9wYXJlbnQ7IH0KKworICAgICAgX0NvbnN0X0Jhc2VfcHRyCisgICAgICBfTV9yb290KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2ltcGwuX01faGVhZGVyLl9NX3BhcmVudDsgfQorCisgICAgICBfQmFzZV9wdHImCisgICAgICBfTV9sZWZ0bW9zdCgpCisgICAgICB7IHJldHVybiB0aGlzLT5fTV9pbXBsLl9NX2hlYWRlci5fTV9sZWZ0OyB9CisKKyAgICAgIF9Db25zdF9CYXNlX3B0cgorICAgICAgX01fbGVmdG1vc3QoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01faW1wbC5fTV9oZWFkZXIuX01fbGVmdDsgfQorCisgICAgICBfQmFzZV9wdHImCisgICAgICBfTV9yaWdodG1vc3QoKQorICAgICAgeyByZXR1cm4gdGhpcy0+X01faW1wbC5fTV9oZWFkZXIuX01fcmlnaHQ7IH0KKworICAgICAgX0NvbnN0X0Jhc2VfcHRyCisgICAgICBfTV9yaWdodG1vc3QoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01faW1wbC5fTV9oZWFkZXIuX01fcmlnaHQ7IH0KKworICAgICAgX0xpbmtfdHlwZQorICAgICAgX01fYmVnaW4oKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X0xpbmtfdHlwZT4odGhpcy0+X01faW1wbC5fTV9oZWFkZXIuX01fcGFyZW50KTsgfQorCisgICAgICBfQ29uc3RfTGlua190eXBlCisgICAgICBfTV9iZWdpbigpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIHN0YXRpY19jYXN0PF9Db25zdF9MaW5rX3R5cGU+CisJICAodGhpcy0+X01faW1wbC5fTV9oZWFkZXIuX01fcGFyZW50KTsKKyAgICAgIH0KKworICAgICAgX0xpbmtfdHlwZQorICAgICAgX01fZW5kKCkKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9MaW5rX3R5cGU+KCZ0aGlzLT5fTV9pbXBsLl9NX2hlYWRlcik7IH0KKworICAgICAgX0NvbnN0X0xpbmtfdHlwZQorICAgICAgX01fZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9Db25zdF9MaW5rX3R5cGU+KCZ0aGlzLT5fTV9pbXBsLl9NX2hlYWRlcik7IH0KKworICAgICAgc3RhdGljIGNvbnN0X3JlZmVyZW5jZQorICAgICAgX1NfdmFsdWUoX0NvbnN0X0xpbmtfdHlwZSBfX3gpCisgICAgICB7IHJldHVybiBfX3gtPl9NX3ZhbHVlX2ZpZWxkOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdCBfS2V5JgorICAgICAgX1Nfa2V5KF9Db25zdF9MaW5rX3R5cGUgX194KQorICAgICAgeyByZXR1cm4gX0tleU9mVmFsdWUoKShfU192YWx1ZShfX3gpKTsgfQorCisgICAgICBzdGF0aWMgX0xpbmtfdHlwZQorICAgICAgX1NfbGVmdChfQmFzZV9wdHIgX194KQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X0xpbmtfdHlwZT4oX194LT5fTV9sZWZ0KTsgfQorCisgICAgICBzdGF0aWMgX0NvbnN0X0xpbmtfdHlwZQorICAgICAgX1NfbGVmdChfQ29uc3RfQmFzZV9wdHIgX194KQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X0NvbnN0X0xpbmtfdHlwZT4oX194LT5fTV9sZWZ0KTsgfQorCisgICAgICBzdGF0aWMgX0xpbmtfdHlwZQorICAgICAgX1NfcmlnaHQoX0Jhc2VfcHRyIF9feCkKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9MaW5rX3R5cGU+KF9feC0+X01fcmlnaHQpOyB9CisKKyAgICAgIHN0YXRpYyBfQ29uc3RfTGlua190eXBlCisgICAgICBfU19yaWdodChfQ29uc3RfQmFzZV9wdHIgX194KQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X0NvbnN0X0xpbmtfdHlwZT4oX194LT5fTV9yaWdodCk7IH0KKworICAgICAgc3RhdGljIGNvbnN0X3JlZmVyZW5jZQorICAgICAgX1NfdmFsdWUoX0NvbnN0X0Jhc2VfcHRyIF9feCkKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9Db25zdF9MaW5rX3R5cGU+KF9feCktPl9NX3ZhbHVlX2ZpZWxkOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdCBfS2V5JgorICAgICAgX1Nfa2V5KF9Db25zdF9CYXNlX3B0ciBfX3gpCisgICAgICB7IHJldHVybiBfS2V5T2ZWYWx1ZSgpKF9TX3ZhbHVlKF9feCkpOyB9CisKKyAgICAgIHN0YXRpYyBfQmFzZV9wdHIKKyAgICAgIF9TX21pbmltdW0oX0Jhc2VfcHRyIF9feCkKKyAgICAgIHsgcmV0dXJuIF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfX3gpOyB9CisKKyAgICAgIHN0YXRpYyBfQ29uc3RfQmFzZV9wdHIKKyAgICAgIF9TX21pbmltdW0oX0NvbnN0X0Jhc2VfcHRyIF9feCkKKyAgICAgIHsgcmV0dXJuIF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfX3gpOyB9CisKKyAgICAgIHN0YXRpYyBfQmFzZV9wdHIKKyAgICAgIF9TX21heGltdW0oX0Jhc2VfcHRyIF9feCkKKyAgICAgIHsgcmV0dXJuIF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11bShfX3gpOyB9CisKKyAgICAgIHN0YXRpYyBfQ29uc3RfQmFzZV9wdHIKKyAgICAgIF9TX21heGltdW0oX0NvbnN0X0Jhc2VfcHRyIF9feCkKKyAgICAgIHsgcmV0dXJuIF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11bShfX3gpOyB9CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPHZhbHVlX3R5cGU+ICAgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfUmJfdHJlZV9jb25zdF9pdGVyYXRvcjx2YWx1ZV90eXBlPiBjb25zdF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+ICAgICAgIHJldmVyc2VfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKKworICAgIHByaXZhdGU6CisgICAgICBpdGVyYXRvcgorICAgICAgX01faW5zZXJ0XyhfQ29uc3RfQmFzZV9wdHIgX194LCBfQ29uc3RfQmFzZV9wdHIgX195LAorCQkgY29uc3QgdmFsdWVfdHlwZSYgX192KTsKKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMjMzLiBJbnNlcnRpb24gaGludHMgaW4gYXNzb2NpYXRpdmUgY29udGFpbmVycy4KKyAgICAgIGl0ZXJhdG9yCisgICAgICBfTV9pbnNlcnRfbG93ZXIoX0Jhc2VfcHRyIF9feCwgX0Jhc2VfcHRyIF9feSwgY29uc3QgdmFsdWVfdHlwZSYgX192KTsKKworICAgICAgaXRlcmF0b3IKKyAgICAgIF9NX2luc2VydF9lcXVhbF9sb3dlcihjb25zdCB2YWx1ZV90eXBlJiBfX3gpOworCisgICAgICBfTGlua190eXBlCisgICAgICBfTV9jb3B5KF9Db25zdF9MaW5rX3R5cGUgX194LCBfTGlua190eXBlIF9fcCk7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2VyYXNlKF9MaW5rX3R5cGUgX194KTsKKworICAgICAgaXRlcmF0b3IKKyAgICAgIF9NX2xvd2VyX2JvdW5kKF9MaW5rX3R5cGUgX194LCBfTGlua190eXBlIF9feSwKKwkJICAgICBjb25zdCBfS2V5JiBfX2spOworCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgX01fbG93ZXJfYm91bmQoX0NvbnN0X0xpbmtfdHlwZSBfX3gsIF9Db25zdF9MaW5rX3R5cGUgX195LAorCQkgICAgIGNvbnN0IF9LZXkmIF9faykgY29uc3Q7CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBfTV91cHBlcl9ib3VuZChfTGlua190eXBlIF9feCwgX0xpbmtfdHlwZSBfX3ksCisJCSAgICAgY29uc3QgX0tleSYgX19rKTsKKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIF9NX3VwcGVyX2JvdW5kKF9Db25zdF9MaW5rX3R5cGUgX194LCBfQ29uc3RfTGlua190eXBlIF9feSwKKwkJICAgICBjb25zdCBfS2V5JiBfX2spIGNvbnN0OworCisgICAgcHVibGljOgorICAgICAgLy8gYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24KKyAgICAgIF9SYl90cmVlKCkgeyB9CisKKyAgICAgIF9SYl90cmVlKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCisJICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfTV9pbXBsKF9fY29tcCwgX19hKSB7IH0KKworICAgICAgX1JiX3RyZWUoY29uc3QgX1JiX3RyZWUmIF9feCkKKyAgICAgIDogX01faW1wbChfX3guX01faW1wbC5fTV9rZXlfY29tcGFyZSwgX194Ll9NX2dldF9Ob2RlX2FsbG9jYXRvcigpKQorICAgICAgeworCWlmIChfX3guX01fcm9vdCgpICE9IDApCisJICB7CisJICAgIF9NX3Jvb3QoKSA9IF9NX2NvcHkoX194Ll9NX2JlZ2luKCksIF9NX2VuZCgpKTsKKwkgICAgX01fbGVmdG1vc3QoKSA9IF9TX21pbmltdW0oX01fcm9vdCgpKTsKKwkgICAgX01fcmlnaHRtb3N0KCkgPSBfU19tYXhpbXVtKF9NX3Jvb3QoKSk7CisJICAgIF9NX2ltcGwuX01fbm9kZV9jb3VudCA9IF9feC5fTV9pbXBsLl9NX25vZGVfY291bnQ7CisJICB9CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgX1JiX3RyZWUoX1JiX3RyZWUmJiBfX3gpOworI2VuZGlmCisKKyAgICAgIH5fUmJfdHJlZSgpCisgICAgICB7IF9NX2VyYXNlKF9NX2JlZ2luKCkpOyB9CisKKyAgICAgIF9SYl90cmVlJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9SYl90cmVlJiBfX3gpOworCisgICAgICAvLyBBY2Nlc3NvcnMuCisgICAgICBfQ29tcGFyZQorICAgICAga2V5X2NvbXAoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faW1wbC5fTV9rZXlfY29tcGFyZTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKQorICAgICAgeyAKKwlyZXR1cm4gaXRlcmF0b3Ioc3RhdGljX2Nhc3Q8X0xpbmtfdHlwZT4KKwkJCSh0aGlzLT5fTV9pbXBsLl9NX2hlYWRlci5fTV9sZWZ0KSk7CisgICAgICB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0CisgICAgICB7IAorCXJldHVybiBjb25zdF9pdGVyYXRvcihzdGF0aWNfY2FzdDxfQ29uc3RfTGlua190eXBlPgorCQkJICAgICAgKHRoaXMtPl9NX2ltcGwuX01faGVhZGVyLl9NX2xlZnQpKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihzdGF0aWNfY2FzdDxfTGlua190eXBlPigmdGhpcy0+X01faW1wbC5fTV9oZWFkZXIpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QKKyAgICAgIHsgCisJcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHN0YXRpY19jYXN0PF9Db25zdF9MaW5rX3R5cGU+CisJCQkgICAgICAoJnRoaXMtPl9NX2ltcGwuX01faGVhZGVyKSk7CisgICAgICB9CisKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpCisgICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpCisgICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisgICAgICBib29sCisgICAgICBlbXB0eSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9pbXBsLl9NX25vZGVfY291bnQgPT0gMDsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIHNpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faW1wbC5fTV9ub2RlX2NvdW50OyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZ2V0X05vZGVfYWxsb2NhdG9yKCkubWF4X3NpemUoKTsgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKF9SYl90cmVlJiBfX3QpOyAgICAgIAorCisgICAgICAvLyBJbnNlcnQvZXJhc2UuCisgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPgorICAgICAgX01faW5zZXJ0X3VuaXF1ZShjb25zdCB2YWx1ZV90eXBlJiBfX3gpOworCisgICAgICBpdGVyYXRvcgorICAgICAgX01faW5zZXJ0X2VxdWFsKGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBfTV9pbnNlcnRfdW5pcXVlXyhjb25zdF9pdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpOworCisgICAgICBpdGVyYXRvcgorICAgICAgX01faW5zZXJ0X2VxdWFsXyhjb25zdF9pdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9pbnNlcnRfdW5pcXVlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX2luc2VydF9lcXVhbChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpOworCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSIDEzMC4gQXNzb2NpYXRpdmUgZXJhc2Ugc2hvdWxkIHJldHVybiBhbiBpdGVyYXRvci4KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKTsKKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gRFIgMTMwLiBBc3NvY2lhdGl2ZSBlcmFzZSBzaG91bGQgcmV0dXJuIGFuIGl0ZXJhdG9yLgorICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9fcG9zaXRpb24pOworI2Vsc2UKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pOworCisgICAgICB2b2lkCisgICAgICBlcmFzZShjb25zdF9pdGVyYXRvciBfX3Bvc2l0aW9uKTsKKyNlbmRpZgorICAgICAgc2l6ZV90eXBlCisgICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KTsKKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUiAxMzAuIEFzc29jaWF0aXZlIGVyYXNlIHNob3VsZCByZXR1cm4gYW4gaXRlcmF0b3IuCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KTsKKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gRFIgMTMwLiBBc3NvY2lhdGl2ZSBlcmFzZSBzaG91bGQgcmV0dXJuIGFuIGl0ZXJhdG9yLgorICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QsIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdCk7CisjZWxzZQorICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KTsKKworICAgICAgdm9pZAorICAgICAgZXJhc2UoY29uc3RfaXRlcmF0b3IgX19maXJzdCwgY29uc3RfaXRlcmF0b3IgX19sYXN0KTsKKyNlbmRpZgorICAgICAgdm9pZAorICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUqIF9fZmlyc3QsIGNvbnN0IGtleV90eXBlKiBfX2xhc3QpOworCisgICAgICB2b2lkCisgICAgICBjbGVhcigpCisgICAgICB7CisgICAgICAgIF9NX2VyYXNlKF9NX2JlZ2luKCkpOworICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX01fZW5kKCk7CisgICAgICAgIF9NX3Jvb3QoKSA9IDA7CisgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01fZW5kKCk7CisgICAgICAgIF9NX2ltcGwuX01fbm9kZV9jb3VudCA9IDA7CisgICAgICB9CisKKyAgICAgIC8vIFNldCBvcGVyYXRpb25zLgorICAgICAgaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9fayk7CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2spIGNvbnN0OworCisgICAgICBzaXplX3R5cGUKKyAgICAgIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX2spIGNvbnN0OworCisgICAgICBpdGVyYXRvcgorICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9faykKKyAgICAgIHsgcmV0dXJuIF9NX2xvd2VyX2JvdW5kKF9NX2JlZ2luKCksIF9NX2VuZCgpLCBfX2spOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX19rKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fbG93ZXJfYm91bmQoX01fYmVnaW4oKSwgX01fZW5kKCksIF9fayk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX2spCisgICAgICB7IHJldHVybiBfTV91cHBlcl9ib3VuZChfTV9iZWdpbigpLCBfTV9lbmQoKSwgX19rKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9faykgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3VwcGVyX2JvdW5kKF9NX2JlZ2luKCksIF9NX2VuZCgpLCBfX2spOyB9CisKKyAgICAgIHBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fayk7CisKKyAgICAgIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9faykgY29uc3Q7CisKKyAgICAgIC8vIERlYnVnZ2luZy4KKyAgICAgIGJvb2wKKyAgICAgIF9fcmJfdmVyaWZ5KCkgY29uc3Q7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPiYgX195KQorICAgIHsKKyAgICAgIHJldHVybiBfX3guc2l6ZSgpID09IF9feS5zaXplKCkKKwkgICAgICYmIHN0ZDo6ZXF1YWwoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX195LmJlZ2luKCkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKwkgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7CisgICAgICByZXR1cm4gc3RkOjpsZXhpY29ncmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLCAKKwkJCQkJICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gsCisJICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gX195IDwgX194OyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX194IDwgX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKwkgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3kpCisgICAgeyBfX3guc3dhcChfX3kpOyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgorICAgIF9SYl90cmVlKF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPiYmIF9feCkKKyAgICA6IF9NX2ltcGwoX194Ll9NX2ltcGwuX01fa2V5X2NvbXBhcmUsIF9feC5fTV9nZXRfTm9kZV9hbGxvY2F0b3IoKSkKKyAgICB7CisgICAgICBpZiAoX194Ll9NX3Jvb3QoKSAhPSAwKQorCXsKKwkgIF9NX3Jvb3QoKSA9IF9feC5fTV9yb290KCk7CisJICBfTV9sZWZ0bW9zdCgpID0gX194Ll9NX2xlZnRtb3N0KCk7CisJICBfTV9yaWdodG1vc3QoKSA9IF9feC5fTV9yaWdodG1vc3QoKTsKKwkgIF9NX3Jvb3QoKS0+X01fcGFyZW50ID0gX01fZW5kKCk7CisKKwkgIF9feC5fTV9yb290KCkgPSAwOworCSAgX194Ll9NX2xlZnRtb3N0KCkgPSBfX3guX01fZW5kKCk7CisJICBfX3guX01fcmlnaHRtb3N0KCkgPSBfX3guX01fZW5kKCk7CisKKwkgIHRoaXMtPl9NX2ltcGwuX01fbm9kZV9jb3VudCA9IF9feC5fTV9pbXBsLl9NX25vZGVfY291bnQ7CisJICBfX3guX01faW1wbC5fTV9ub2RlX2NvdW50ID0gMDsKKwl9CisgICAgfQorI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+JgorICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CisgICAgb3BlcmF0b3I9KGNvbnN0IF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPiYgX194KQorICAgIHsKKyAgICAgIGlmICh0aGlzICE9ICZfX3gpCisJeworCSAgLy8gTm90ZSB0aGF0IF9LZXkgbWF5IGJlIGEgY29uc3RhbnQgdHlwZS4KKwkgIGNsZWFyKCk7CisJICBfTV9pbXBsLl9NX2tleV9jb21wYXJlID0gX194Ll9NX2ltcGwuX01fa2V5X2NvbXBhcmU7CisJICBpZiAoX194Ll9NX3Jvb3QoKSAhPSAwKQorCSAgICB7CisJICAgICAgX01fcm9vdCgpID0gX01fY29weShfX3guX01fYmVnaW4oKSwgX01fZW5kKCkpOworCSAgICAgIF9NX2xlZnRtb3N0KCkgPSBfU19taW5pbXVtKF9NX3Jvb3QoKSk7CisJICAgICAgX01fcmlnaHRtb3N0KCkgPSBfU19tYXhpbXVtKF9NX3Jvb3QoKSk7CisJICAgICAgX01faW1wbC5fTV9ub2RlX2NvdW50ID0gX194Ll9NX2ltcGwuX01fbm9kZV9jb3VudDsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjppdGVyYXRvcgorICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CisgICAgX01faW5zZXJ0XyhfQ29uc3RfQmFzZV9wdHIgX194LCBfQ29uc3RfQmFzZV9wdHIgX19wLCBjb25zdCBfVmFsJiBfX3YpCisgICAgeworICAgICAgYm9vbCBfX2luc2VydF9sZWZ0ID0gKF9feCAhPSAwIHx8IF9fcCA9PSBfTV9lbmQoKQorCQkJICAgIHx8IF9NX2ltcGwuX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCAKKwkJCQkJCSAgICAgIF9TX2tleShfX3ApKSk7CisKKyAgICAgIF9MaW5rX3R5cGUgX196ID0gX01fY3JlYXRlX25vZGUoX192KTsKKworICAgICAgX1JiX3RyZWVfaW5zZXJ0X2FuZF9yZWJhbGFuY2UoX19pbnNlcnRfbGVmdCwgX196LAorCQkJCSAgICBjb25zdF9jYXN0PF9CYXNlX3B0cj4oX19wKSwgIAorCQkJCSAgICB0aGlzLT5fTV9pbXBsLl9NX2hlYWRlcik7CisgICAgICArK19NX2ltcGwuX01fbm9kZV9jb3VudDsKKyAgICAgIHJldHVybiBpdGVyYXRvcihfX3opOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJhdG9yCisgICAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjoKKyAgICBfTV9pbnNlcnRfbG93ZXIoX0Jhc2VfcHRyIF9feCwgX0Jhc2VfcHRyIF9fcCwgY29uc3QgX1ZhbCYgX192KQorICAgIHsKKyAgICAgIGJvb2wgX19pbnNlcnRfbGVmdCA9IChfX3ggIT0gMCB8fCBfX3AgPT0gX01fZW5kKCkKKwkJCSAgICB8fCAhX01faW1wbC5fTV9rZXlfY29tcGFyZShfU19rZXkoX19wKSwKKwkJCQkJCSAgICAgICBfS2V5T2ZWYWx1ZSgpKF9fdikpKTsKKworICAgICAgX0xpbmtfdHlwZSBfX3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOworCisgICAgICBfUmJfdHJlZV9pbnNlcnRfYW5kX3JlYmFsYW5jZShfX2luc2VydF9sZWZ0LCBfX3osIF9fcCwgIAorCQkJCSAgICB0aGlzLT5fTV9pbXBsLl9NX2hlYWRlcik7CisgICAgICArK19NX2ltcGwuX01fbm9kZV9jb3VudDsKKyAgICAgIHJldHVybiBpdGVyYXRvcihfX3opOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJhdG9yCisgICAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjoKKyAgICBfTV9pbnNlcnRfZXF1YWxfbG93ZXIoY29uc3QgX1ZhbCYgX192KQorICAgIHsKKyAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fYmVnaW4oKTsKKyAgICAgIF9MaW5rX3R5cGUgX195ID0gX01fZW5kKCk7CisgICAgICB3aGlsZSAoX194ICE9IDApCisJeworCSAgX195ID0gX194OworCSAgX194ID0gIV9NX2ltcGwuX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9LZXlPZlZhbHVlKCkoX192KSkgPworCSAgICAgICAgX1NfbGVmdChfX3gpIDogX1NfcmlnaHQoX194KTsKKwl9CisgICAgICByZXR1cm4gX01faW5zZXJ0X2xvd2VyKF9feCwgX195LCBfX3YpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS29WLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+OjpfTGlua190eXBlCisgICAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46OgorICAgIF9NX2NvcHkoX0NvbnN0X0xpbmtfdHlwZSBfX3gsIF9MaW5rX3R5cGUgX19wKQorICAgIHsKKyAgICAgIC8vIFN0cnVjdHVyYWwgY29weS4gIF9feCBhbmQgX19wIG11c3QgYmUgbm9uLW51bGwuCisgICAgICBfTGlua190eXBlIF9fdG9wID0gX01fY2xvbmVfbm9kZShfX3gpOworICAgICAgX190b3AtPl9NX3BhcmVudCA9IF9fcDsKKworICAgICAgX190cnkKKwl7CisJICBpZiAoX194LT5fTV9yaWdodCkKKwkgICAgX190b3AtPl9NX3JpZ2h0ID0gX01fY29weShfU19yaWdodChfX3gpLCBfX3RvcCk7CisJICBfX3AgPSBfX3RvcDsKKwkgIF9feCA9IF9TX2xlZnQoX194KTsKKworCSAgd2hpbGUgKF9feCAhPSAwKQorCSAgICB7CisJICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9jbG9uZV9ub2RlKF9feCk7CisJICAgICAgX19wLT5fTV9sZWZ0ID0gX195OworCSAgICAgIF9feS0+X01fcGFyZW50ID0gX19wOworCSAgICAgIGlmIChfX3gtPl9NX3JpZ2h0KQorCQlfX3ktPl9NX3JpZ2h0ID0gX01fY29weShfU19yaWdodChfX3gpLCBfX3kpOworCSAgICAgIF9fcCA9IF9feTsKKwkgICAgICBfX3ggPSBfU19sZWZ0KF9feCk7CisJICAgIH0KKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBfTV9lcmFzZShfX3RvcCk7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgICByZXR1cm4gX190b3A7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgorICAgIF9NX2VyYXNlKF9MaW5rX3R5cGUgX194KQorICAgIHsKKyAgICAgIC8vIEVyYXNlIHdpdGhvdXQgcmViYWxhbmNpbmcuCisgICAgICB3aGlsZSAoX194ICE9IDApCisJeworCSAgX01fZXJhc2UoX1NfcmlnaHQoX194KSk7CisJICBfTGlua190eXBlIF9feSA9IF9TX2xlZnQoX194KTsKKwkgIF9NX2Rlc3Ryb3lfbm9kZShfX3gpOworCSAgX194ID0gX195OworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsCisJCSAgICAgIF9Db21wYXJlLCBfQWxsb2M+OjppdGVyYXRvcgorICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CisgICAgX01fbG93ZXJfYm91bmQoX0xpbmtfdHlwZSBfX3gsIF9MaW5rX3R5cGUgX195LAorCQkgICBjb25zdCBfS2V5JiBfX2spCisgICAgeworICAgICAgd2hpbGUgKF9feCAhPSAwKQorCWlmICghX01faW1wbC5fTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKKwkgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOworCWVsc2UKKwkgIF9feCA9IF9TX3JpZ2h0KF9feCk7CisgICAgICByZXR1cm4gaXRlcmF0b3IoX195KTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsCisJCSAgICAgIF9Db21wYXJlLCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcgorICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CisgICAgX01fbG93ZXJfYm91bmQoX0NvbnN0X0xpbmtfdHlwZSBfX3gsIF9Db25zdF9MaW5rX3R5cGUgX195LAorCQkgICBjb25zdCBfS2V5JiBfX2spIGNvbnN0CisgICAgeworICAgICAgd2hpbGUgKF9feCAhPSAwKQorCWlmICghX01faW1wbC5fTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKKwkgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOworCWVsc2UKKwkgIF9feCA9IF9TX3JpZ2h0KF9feCk7CisgICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IoX195KTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsCisJCSAgICAgIF9Db21wYXJlLCBfQWxsb2M+OjppdGVyYXRvcgorICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CisgICAgX01fdXBwZXJfYm91bmQoX0xpbmtfdHlwZSBfX3gsIF9MaW5rX3R5cGUgX195LAorCQkgICBjb25zdCBfS2V5JiBfX2spCisgICAgeworICAgICAgd2hpbGUgKF9feCAhPSAwKQorCWlmIChfTV9pbXBsLl9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9feCkpKQorCSAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CisJZWxzZQorCSAgX194ID0gX1NfcmlnaHQoX194KTsKKyAgICAgIHJldHVybiBpdGVyYXRvcihfX3kpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwKKwkJICAgICAgX0NvbXBhcmUsIF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yCisgICAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjoKKyAgICBfTV91cHBlcl9ib3VuZChfQ29uc3RfTGlua190eXBlIF9feCwgX0NvbnN0X0xpbmtfdHlwZSBfX3ksCisJCSAgIGNvbnN0IF9LZXkmIF9faykgY29uc3QKKyAgICB7CisgICAgICB3aGlsZSAoX194ICE9IDApCisJaWYgKF9NX2ltcGwuX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX194KSkpCisJICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKKwllbHNlCisJICBfX3ggPSBfU19yaWdodChfX3gpOworICAgICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9feSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsCisJCQkgICBfQ29tcGFyZSwgX0FsbG9jPjo6aXRlcmF0b3IsCisJIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLAorCQkJICAgX0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJhdG9yPgorICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CisgICAgZXF1YWxfcmFuZ2UoY29uc3QgX0tleSYgX19rKQorICAgIHsKKyAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fYmVnaW4oKTsKKyAgICAgIF9MaW5rX3R5cGUgX195ID0gX01fZW5kKCk7CisgICAgICB3aGlsZSAoX194ICE9IDApCisJeworCSAgaWYgKF9NX2ltcGwuX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCisJICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CisJICBlbHNlIGlmIChfTV9pbXBsLl9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9feCkpKQorCSAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIF9MaW5rX3R5cGUgX194dShfX3gpLCBfX3l1KF9feSk7CisJICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CisJICAgICAgX194dSA9IF9TX3JpZ2h0KF9feHUpOworCSAgICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLAorCQkgICAgICAgICAgaXRlcmF0b3I+KF9NX2xvd2VyX2JvdW5kKF9feCwgX195LCBfX2spLAorCQkJCSAgICBfTV91cHBlcl9ib3VuZChfX3h1LCBfX3l1LCBfX2spKTsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4oaXRlcmF0b3IoX195KSwKKwkJCQkgICAgICBpdGVyYXRvcihfX3kpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwKKwkJCSAgIF9Db21wYXJlLCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRvciwKKwkgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsCisJCQkgICBfQ29tcGFyZSwgX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3I+CisgICAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjoKKyAgICBlcXVhbF9yYW5nZShjb25zdCBfS2V5JiBfX2spIGNvbnN0CisgICAgeworICAgICAgX0NvbnN0X0xpbmtfdHlwZSBfX3ggPSBfTV9iZWdpbigpOworICAgICAgX0NvbnN0X0xpbmtfdHlwZSBfX3kgPSBfTV9lbmQoKTsKKyAgICAgIHdoaWxlIChfX3ggIT0gMCkKKwl7CisJICBpZiAoX01faW1wbC5fTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKKwkgICAgX194ID0gX1NfcmlnaHQoX194KTsKKwkgIGVsc2UgaWYgKF9NX2ltcGwuX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX194KSkpCisJICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOworCSAgZWxzZQorCSAgICB7CisJICAgICAgX0NvbnN0X0xpbmtfdHlwZSBfX3h1KF9feCksIF9feXUoX195KTsKKwkgICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKKwkgICAgICBfX3h1ID0gX1NfcmlnaHQoX194dSk7CisJICAgICAgcmV0dXJuIHBhaXI8Y29uc3RfaXRlcmF0b3IsCisJCSAgICAgICAgICBjb25zdF9pdGVyYXRvcj4oX01fbG93ZXJfYm91bmQoX194LCBfX3ksIF9fayksCisJCQkJCSAgX01fdXBwZXJfYm91bmQoX194dSwgX195dSwgX19rKSk7CisJICAgIH0KKwl9CisgICAgICByZXR1cm4gcGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+KGNvbnN0X2l0ZXJhdG9yKF9feSksCisJCQkJCQkgIGNvbnN0X2l0ZXJhdG9yKF9feSkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjoKKyAgICBzd2FwKF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPiYgX190KQorICAgIHsKKyAgICAgIGlmIChfTV9yb290KCkgPT0gMCkKKwl7CisJICBpZiAoX190Ll9NX3Jvb3QoKSAhPSAwKQorCSAgICB7CisJICAgICAgX01fcm9vdCgpID0gX190Ll9NX3Jvb3QoKTsKKwkgICAgICBfTV9sZWZ0bW9zdCgpID0gX190Ll9NX2xlZnRtb3N0KCk7CisJICAgICAgX01fcmlnaHRtb3N0KCkgPSBfX3QuX01fcmlnaHRtb3N0KCk7CisJICAgICAgX01fcm9vdCgpLT5fTV9wYXJlbnQgPSBfTV9lbmQoKTsKKwkgICAgICAKKwkgICAgICBfX3QuX01fcm9vdCgpID0gMDsKKwkgICAgICBfX3QuX01fbGVmdG1vc3QoKSA9IF9fdC5fTV9lbmQoKTsKKwkgICAgICBfX3QuX01fcmlnaHRtb3N0KCkgPSBfX3QuX01fZW5kKCk7CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmIChfX3QuX01fcm9vdCgpID09IDApCisJeworCSAgX190Ll9NX3Jvb3QoKSA9IF9NX3Jvb3QoKTsKKwkgIF9fdC5fTV9sZWZ0bW9zdCgpID0gX01fbGVmdG1vc3QoKTsKKwkgIF9fdC5fTV9yaWdodG1vc3QoKSA9IF9NX3JpZ2h0bW9zdCgpOworCSAgX190Ll9NX3Jvb3QoKS0+X01fcGFyZW50ID0gX190Ll9NX2VuZCgpOworCSAgCisJICBfTV9yb290KCkgPSAwOworCSAgX01fbGVmdG1vc3QoKSA9IF9NX2VuZCgpOworCSAgX01fcmlnaHRtb3N0KCkgPSBfTV9lbmQoKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgc3RkOjpzd2FwKF9NX3Jvb3QoKSxfX3QuX01fcm9vdCgpKTsKKwkgIHN0ZDo6c3dhcChfTV9sZWZ0bW9zdCgpLF9fdC5fTV9sZWZ0bW9zdCgpKTsKKwkgIHN0ZDo6c3dhcChfTV9yaWdodG1vc3QoKSxfX3QuX01fcmlnaHRtb3N0KCkpOworCSAgCisJICBfTV9yb290KCktPl9NX3BhcmVudCA9IF9NX2VuZCgpOworCSAgX190Ll9NX3Jvb3QoKS0+X01fcGFyZW50ID0gX190Ll9NX2VuZCgpOworCX0KKyAgICAgIC8vIE5vIG5lZWQgdG8gc3dhcCBoZWFkZXIncyBjb2xvciBhcyBpdCBkb2VzIG5vdCBjaGFuZ2UuCisgICAgICBzdGQ6OnN3YXAodGhpcy0+X01faW1wbC5fTV9ub2RlX2NvdW50LCBfX3QuX01faW1wbC5fTV9ub2RlX2NvdW50KTsKKyAgICAgIHN0ZDo6c3dhcCh0aGlzLT5fTV9pbXBsLl9NX2tleV9jb21wYXJlLCBfX3QuX01faW1wbC5fTV9rZXlfY29tcGFyZSk7CisgICAgICAKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDQzMS4gU3dhcHBpbmcgY29udGFpbmVycyB3aXRoIHVuZXF1YWwgYWxsb2NhdG9ycy4KKyAgICAgIHN0ZDo6X19hbGxvY19zd2FwPF9Ob2RlX2FsbG9jYXRvcj46OgorCV9TX2RvX2l0KF9NX2dldF9Ob2RlX2FsbG9jYXRvcigpLCBfX3QuX01fZ2V0X05vZGVfYWxsb2NhdG9yKCkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLAorCQkJICAgX0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJhdG9yLCBib29sPgorICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CisgICAgX01faW5zZXJ0X3VuaXF1ZShjb25zdCBfVmFsJiBfX3YpCisgICAgeworICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9iZWdpbigpOworICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9lbmQoKTsKKyAgICAgIGJvb2wgX19jb21wID0gdHJ1ZTsKKyAgICAgIHdoaWxlIChfX3ggIT0gMCkKKwl7CisJICBfX3kgPSBfX3g7CisJICBfX2NvbXAgPSBfTV9pbXBsLl9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feCkpOworCSAgX194ID0gX19jb21wID8gX1NfbGVmdChfX3gpIDogX1NfcmlnaHQoX194KTsKKwl9CisgICAgICBpdGVyYXRvciBfX2ogPSBpdGVyYXRvcihfX3kpOworICAgICAgaWYgKF9fY29tcCkKKwl7CisJICBpZiAoX19qID09IGJlZ2luKCkpCisJICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLCBib29sPihfTV9pbnNlcnRfKF9feCwgX195LCBfX3YpLCB0cnVlKTsKKwkgIGVsc2UKKwkgICAgLS1fX2o7CisJfQorICAgICAgaWYgKF9NX2ltcGwuX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fai5fTV9ub2RlKSwgX0tleU9mVmFsdWUoKShfX3YpKSkKKwlyZXR1cm4gcGFpcjxpdGVyYXRvciwgYm9vbD4oX01faW5zZXJ0XyhfX3gsIF9feSwgX192KSwgdHJ1ZSk7CisgICAgICByZXR1cm4gcGFpcjxpdGVyYXRvciwgYm9vbD4oX19qLCBmYWxzZSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6aXRlcmF0b3IKKyAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgorICAgIF9NX2luc2VydF9lcXVhbChjb25zdCBfVmFsJiBfX3YpCisgICAgeworICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9iZWdpbigpOworICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9lbmQoKTsKKyAgICAgIHdoaWxlIChfX3ggIT0gMCkKKwl7CisJICBfX3kgPSBfX3g7CisJICBfX3ggPSBfTV9pbXBsLl9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feCkpID8KKwkgICAgICAgIF9TX2xlZnQoX194KSA6IF9TX3JpZ2h0KF9feCk7CisJfQorICAgICAgcmV0dXJuIF9NX2luc2VydF8oX194LCBfX3ksIF9fdik7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6aXRlcmF0b3IKKyAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgorICAgIF9NX2luc2VydF91bmlxdWVfKGNvbnN0X2l0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9WYWwmIF9fdikKKyAgICB7CisgICAgICAvLyBlbmQoKQorICAgICAgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9lbmQoKSkKKwl7CisJICBpZiAoc2l6ZSgpID4gMAorCSAgICAgICYmIF9NX2ltcGwuX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9NX3JpZ2h0bW9zdCgpKSwgCisJCQkJCV9LZXlPZlZhbHVlKCkoX192KSkpCisJICAgIHJldHVybiBfTV9pbnNlcnRfKDAsIF9NX3JpZ2h0bW9zdCgpLCBfX3YpOworCSAgZWxzZQorCSAgICByZXR1cm4gX01faW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0OworCX0KKyAgICAgIGVsc2UgaWYgKF9NX2ltcGwuX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLAorCQkJCSAgICAgIF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpKSkKKwl7CisJICAvLyBGaXJzdCwgdHJ5IGJlZm9yZS4uLgorCSAgY29uc3RfaXRlcmF0b3IgX19iZWZvcmUgPSBfX3Bvc2l0aW9uOworCSAgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9sZWZ0bW9zdCgpKSAvLyBiZWdpbigpCisJICAgIHJldHVybiBfTV9pbnNlcnRfKF9NX2xlZnRtb3N0KCksIF9NX2xlZnRtb3N0KCksIF9fdik7CisJICBlbHNlIGlmIChfTV9pbXBsLl9NX2tleV9jb21wYXJlKF9TX2tleSgoLS1fX2JlZm9yZSkuX01fbm9kZSksIAorCQkJCQkgIF9LZXlPZlZhbHVlKCkoX192KSkpCisJICAgIHsKKwkgICAgICBpZiAoX1NfcmlnaHQoX19iZWZvcmUuX01fbm9kZSkgPT0gMCkKKwkJcmV0dXJuIF9NX2luc2VydF8oMCwgX19iZWZvcmUuX01fbm9kZSwgX192KTsKKwkgICAgICBlbHNlCisJCXJldHVybiBfTV9pbnNlcnRfKF9fcG9zaXRpb24uX01fbm9kZSwKKwkJCQkgIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKKwkgICAgfQorCSAgZWxzZQorCSAgICByZXR1cm4gX01faW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0OworCX0KKyAgICAgIGVsc2UgaWYgKF9NX2ltcGwuX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSksCisJCQkJICAgICAgX0tleU9mVmFsdWUoKShfX3YpKSkKKwl7CisJICAvLyAuLi4gdGhlbiB0cnkgYWZ0ZXIuCisJICBjb25zdF9pdGVyYXRvciBfX2FmdGVyID0gX19wb3NpdGlvbjsKKwkgIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01fcmlnaHRtb3N0KCkpCisJICAgIHJldHVybiBfTV9pbnNlcnRfKDAsIF9NX3JpZ2h0bW9zdCgpLCBfX3YpOworCSAgZWxzZSBpZiAoX01faW1wbC5fTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksCisJCQkJCSAgX1Nfa2V5KCgrK19fYWZ0ZXIpLl9NX25vZGUpKSkKKwkgICAgeworCSAgICAgIGlmIChfU19yaWdodChfX3Bvc2l0aW9uLl9NX25vZGUpID09IDApCisJCXJldHVybiBfTV9pbnNlcnRfKDAsIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKKwkgICAgICBlbHNlCisJCXJldHVybiBfTV9pbnNlcnRfKF9fYWZ0ZXIuX01fbm9kZSwgX19hZnRlci5fTV9ub2RlLCBfX3YpOworCSAgICB9CisJICBlbHNlCisJICAgIHJldHVybiBfTV9pbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CisJfQorICAgICAgZWxzZQorCS8vIEVxdWl2YWxlbnQga2V5cy4KKwlyZXR1cm4gaXRlcmF0b3Ioc3RhdGljX2Nhc3Q8X0xpbmtfdHlwZT4KKwkJCShjb25zdF9jYXN0PF9CYXNlX3B0cj4oX19wb3NpdGlvbi5fTV9ub2RlKSkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJhdG9yCisgICAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjoKKyAgICBfTV9pbnNlcnRfZXF1YWxfKGNvbnN0X2l0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9WYWwmIF9fdikKKyAgICB7CisgICAgICAvLyBlbmQoKQorICAgICAgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9lbmQoKSkKKwl7CisJICBpZiAoc2l6ZSgpID4gMAorCSAgICAgICYmICFfTV9pbXBsLl9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwKKwkJCQkJIF9TX2tleShfTV9yaWdodG1vc3QoKSkpKQorCSAgICByZXR1cm4gX01faW5zZXJ0XygwLCBfTV9yaWdodG1vc3QoKSwgX192KTsKKwkgIGVsc2UKKwkgICAgcmV0dXJuIF9NX2luc2VydF9lcXVhbChfX3YpOworCX0KKyAgICAgIGVsc2UgaWYgKCFfTV9pbXBsLl9NX2tleV9jb21wYXJlKF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpLAorCQkJCSAgICAgICBfS2V5T2ZWYWx1ZSgpKF9fdikpKQorCXsKKwkgIC8vIEZpcnN0LCB0cnkgYmVmb3JlLi4uCisJICBjb25zdF9pdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9zaXRpb247CisJICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2xlZnRtb3N0KCkpIC8vIGJlZ2luKCkKKwkgICAgcmV0dXJuIF9NX2luc2VydF8oX01fbGVmdG1vc3QoKSwgX01fbGVmdG1vc3QoKSwgX192KTsKKwkgIGVsc2UgaWYgKCFfTV9pbXBsLl9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwKKwkJCQkJICAgX1Nfa2V5KCgtLV9fYmVmb3JlKS5fTV9ub2RlKSkpCisJICAgIHsKKwkgICAgICBpZiAoX1NfcmlnaHQoX19iZWZvcmUuX01fbm9kZSkgPT0gMCkKKwkJcmV0dXJuIF9NX2luc2VydF8oMCwgX19iZWZvcmUuX01fbm9kZSwgX192KTsKKwkgICAgICBlbHNlCisJCXJldHVybiBfTV9pbnNlcnRfKF9fcG9zaXRpb24uX01fbm9kZSwKKwkJCQkgIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKKwkgICAgfQorCSAgZWxzZQorCSAgICByZXR1cm4gX01faW5zZXJ0X2VxdWFsKF9fdik7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8vIC4uLiB0aGVuIHRyeSBhZnRlci4gIAorCSAgY29uc3RfaXRlcmF0b3IgX19hZnRlciA9IF9fcG9zaXRpb247CisJICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX3JpZ2h0bW9zdCgpKQorCSAgICByZXR1cm4gX01faW5zZXJ0XygwLCBfTV9yaWdodG1vc3QoKSwgX192KTsKKwkgIGVsc2UgaWYgKCFfTV9pbXBsLl9NX2tleV9jb21wYXJlKF9TX2tleSgoKytfX2FmdGVyKS5fTV9ub2RlKSwKKwkJCQkJICAgX0tleU9mVmFsdWUoKShfX3YpKSkKKwkgICAgeworCSAgICAgIGlmIChfU19yaWdodChfX3Bvc2l0aW9uLl9NX25vZGUpID09IDApCisJCXJldHVybiBfTV9pbnNlcnRfKDAsIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKKwkgICAgICBlbHNlCisJCXJldHVybiBfTV9pbnNlcnRfKF9fYWZ0ZXIuX01fbm9kZSwgX19hZnRlci5fTV9ub2RlLCBfX3YpOworCSAgICB9CisJICBlbHNlCisJICAgIHJldHVybiBfTV9pbnNlcnRfZXF1YWxfbG93ZXIoX192KTsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1YsCisgICAgICAgICAgIHR5cGVuYW1lIF9DbXAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTxjbGFzcyBfSUk+CisgICAgICB2b2lkCisgICAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29WLCBfQ21wLCBfQWxsb2M+OjoKKyAgICAgIF9NX2luc2VydF91bmlxdWUoX0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpCisgICAgICB7CisJZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCisJICBfTV9pbnNlcnRfdW5pcXVlXyhlbmQoKSwgKl9fZmlyc3QpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1YsCisgICAgICAgICAgIHR5cGVuYW1lIF9DbXAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTxjbGFzcyBfSUk+CisgICAgICB2b2lkCisgICAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29WLCBfQ21wLCBfQWxsb2M+OjoKKyAgICAgIF9NX2luc2VydF9lcXVhbChfSUkgX19maXJzdCwgX0lJIF9fbGFzdCkKKyAgICAgIHsKKwlmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwkgIF9NX2luc2VydF9lcXVhbF8oZW5kKCksICpfX2ZpcnN0KTsKKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgLy8gRFIgMTMwLiBBc3NvY2lhdGl2ZSBlcmFzZSBzaG91bGQgcmV0dXJuIGFuIGl0ZXJhdG9yLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjppdGVyYXRvcgorICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CisgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICB7CisgICAgICBpdGVyYXRvciBfX3Jlc3VsdCA9IF9fcG9zaXRpb247CisgICAgICArK19fcmVzdWx0OworICAgICAgX0xpbmtfdHlwZSBfX3kgPQorCXN0YXRpY19jYXN0PF9MaW5rX3R5cGU+KF9SYl90cmVlX3JlYmFsYW5jZV9mb3JfZXJhc2UKKwkJCQkoX19wb3NpdGlvbi5fTV9ub2RlLAorCQkJCSB0aGlzLT5fTV9pbXBsLl9NX2hlYWRlcikpOworICAgICAgX01fZGVzdHJveV9ub2RlKF9feSk7CisgICAgICAtLV9NX2ltcGwuX01fbm9kZV9jb3VudDsKKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisKKyAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAvLyBEUiAxMzAuIEFzc29jaWF0aXZlIGVyYXNlIHNob3VsZCByZXR1cm4gYW4gaXRlcmF0b3IuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yCisgICAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjoKKyAgICBlcmFzZShjb25zdF9pdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgIHsKKyAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fcmVzdWx0ID0gX19wb3NpdGlvbjsKKyAgICAgICsrX19yZXN1bHQ7CisgICAgICBfTGlua190eXBlIF9feSA9CisJc3RhdGljX2Nhc3Q8X0xpbmtfdHlwZT4oX1JiX3RyZWVfcmViYWxhbmNlX2Zvcl9lcmFzZQorCQkJCShjb25zdF9jYXN0PF9CYXNlX3B0cj4oX19wb3NpdGlvbi5fTV9ub2RlKSwKKwkJCQkgdGhpcy0+X01faW1wbC5fTV9oZWFkZXIpKTsKKyAgICAgIF9NX2Rlc3Ryb3lfbm9kZShfX3kpOworICAgICAgLS1fTV9pbXBsLl9NX25vZGVfY291bnQ7CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorI2Vsc2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgorICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgeworICAgICAgX0xpbmtfdHlwZSBfX3kgPQorCXN0YXRpY19jYXN0PF9MaW5rX3R5cGU+KF9SYl90cmVlX3JlYmFsYW5jZV9mb3JfZXJhc2UKKwkJCQkoX19wb3NpdGlvbi5fTV9ub2RlLAorCQkJCSB0aGlzLT5fTV9pbXBsLl9NX2hlYWRlcikpOworICAgICAgX01fZGVzdHJveV9ub2RlKF9feSk7CisgICAgICAtLV9NX2ltcGwuX01fbm9kZV9jb3VudDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgorICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgeworICAgICAgX0xpbmtfdHlwZSBfX3kgPQorCXN0YXRpY19jYXN0PF9MaW5rX3R5cGU+KF9SYl90cmVlX3JlYmFsYW5jZV9mb3JfZXJhc2UKKwkJCQkoY29uc3RfY2FzdDxfQmFzZV9wdHI+KF9fcG9zaXRpb24uX01fbm9kZSksCisJCQkJIHRoaXMtPl9NX2ltcGwuX01faGVhZGVyKSk7CisgICAgICBfTV9kZXN0cm95X25vZGUoX195KTsKKyAgICAgIC0tX01faW1wbC5fTV9ub2RlX2NvdW50OworICAgIH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6c2l6ZV90eXBlCisgICAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjoKKyAgICBlcmFzZShjb25zdCBfS2V5JiBfX3gpCisgICAgeworICAgICAgcGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+IF9fcCA9IGVxdWFsX3JhbmdlKF9feCk7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKKyAgICAgIGVyYXNlKF9fcC5maXJzdCwgX19wLnNlY29uZCk7CisgICAgICByZXR1cm4gX19vbGRfc2l6ZSAtIHNpemUoKTsKKyAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgIC8vIERSIDEzMC4gQXNzb2NpYXRpdmUgZXJhc2Ugc2hvdWxkIHJldHVybiBhbiBpdGVyYXRvci4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjppdGVyYXRvcgorICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CisgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIGlmIChfX2ZpcnN0ID09IGJlZ2luKCkgJiYgX19sYXN0ID09IGVuZCgpKQorICAgICAgICB7CisJICBjbGVhcigpOworCSAgcmV0dXJuIGVuZCgpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKwkgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwkgICAgZXJhc2UoX19maXJzdCsrKTsKKwkgIHJldHVybiBfX2xhc3Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAvLyBEUiAxMzAuIEFzc29jaWF0aXZlIGVyYXNlIHNob3VsZCByZXR1cm4gYW4gaXRlcmF0b3IuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IKKyAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgorICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QsIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICBpZiAoX19maXJzdCA9PSBiZWdpbigpICYmIF9fbGFzdCA9PSBlbmQoKSkKKyAgICAgICAgeworCSAgY2xlYXIoKTsKKwkgIHJldHVybiBlbmQoKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisJICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCisJICAgIGVyYXNlKF9fZmlyc3QrKyk7CisJICByZXR1cm4gX19sYXN0OworICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CisgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIGlmIChfX2ZpcnN0ID09IGJlZ2luKCkgJiYgX19sYXN0ID09IGVuZCgpKQorCWNsZWFyKCk7CisgICAgICBlbHNlCisJd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQorCSAgZXJhc2UoX19maXJzdCsrKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CisgICAgZXJhc2UoY29uc3RfaXRlcmF0b3IgX19maXJzdCwgY29uc3RfaXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIGlmIChfX2ZpcnN0ID09IGJlZ2luKCkgJiYgX19sYXN0ID09IGVuZCgpKQorCWNsZWFyKCk7CisgICAgICBlbHNlCisJd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQorCSAgZXJhc2UoX19maXJzdCsrKTsKKyAgICB9CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjoKKyAgICBlcmFzZShjb25zdCBfS2V5KiBfX2ZpcnN0LCBjb25zdCBfS2V5KiBfX2xhc3QpCisgICAgeworICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQorCWVyYXNlKCpfX2ZpcnN0KyspOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwKKwkJICAgICAgX0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJhdG9yCisgICAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjoKKyAgICBmaW5kKGNvbnN0IF9LZXkmIF9faykKKyAgICB7CisgICAgICBpdGVyYXRvciBfX2ogPSBfTV9sb3dlcl9ib3VuZChfTV9iZWdpbigpLCBfTV9lbmQoKSwgX19rKTsKKyAgICAgIHJldHVybiAoX19qID09IGVuZCgpCisJICAgICAgfHwgX01faW1wbC5fTV9rZXlfY29tcGFyZShfX2ssCisJCQkJCV9TX2tleShfX2ouX01fbm9kZSkpKSA/IGVuZCgpIDogX19qOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwKKwkJICAgICAgX0NvbXBhcmUsIF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yCisgICAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjoKKyAgICBmaW5kKGNvbnN0IF9LZXkmIF9faykgY29uc3QKKyAgICB7CisgICAgICBjb25zdF9pdGVyYXRvciBfX2ogPSBfTV9sb3dlcl9ib3VuZChfTV9iZWdpbigpLCBfTV9lbmQoKSwgX19rKTsKKyAgICAgIHJldHVybiAoX19qID09IGVuZCgpCisJICAgICAgfHwgX01faW1wbC5fTV9rZXlfY29tcGFyZShfX2ssIAorCQkJCQlfU19rZXkoX19qLl9NX25vZGUpKSkgPyBlbmQoKSA6IF9fajsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjpzaXplX3R5cGUKKyAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgorICAgIGNvdW50KGNvbnN0IF9LZXkmIF9faykgY29uc3QKKyAgICB7CisgICAgICBwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4gX19wID0gZXF1YWxfcmFuZ2UoX19rKTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX24gPSBzdGQ6OmRpc3RhbmNlKF9fcC5maXJzdCwgX19wLnNlY29uZCk7CisgICAgICByZXR1cm4gX19uOworICAgIH0KKworICBfR0xJQkNYWF9QVVJFIHVuc2lnbmVkIGludAorICBfUmJfdHJlZV9ibGFja19jb3VudChjb25zdCBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3Jvb3QpIHRocm93ICgpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGJvb2wKKyAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6X19yYl92ZXJpZnkoKSBjb25zdAorICAgIHsKKyAgICAgIGlmIChfTV9pbXBsLl9NX25vZGVfY291bnQgPT0gMCB8fCBiZWdpbigpID09IGVuZCgpKQorCXJldHVybiBfTV9pbXBsLl9NX25vZGVfY291bnQgPT0gMCAmJiBiZWdpbigpID09IGVuZCgpCisJICAgICAgICYmIHRoaXMtPl9NX2ltcGwuX01faGVhZGVyLl9NX2xlZnQgPT0gX01fZW5kKCkKKwkgICAgICAgJiYgdGhpcy0+X01faW1wbC5fTV9oZWFkZXIuX01fcmlnaHQgPT0gX01fZW5kKCk7CisKKyAgICAgIHVuc2lnbmVkIGludCBfX2xlbiA9IF9SYl90cmVlX2JsYWNrX2NvdW50KF9NX2xlZnRtb3N0KCksIF9NX3Jvb3QoKSk7CisgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIF9faXQgPSBiZWdpbigpOyBfX2l0ICE9IGVuZCgpOyArK19faXQpCisJeworCSAgX0NvbnN0X0xpbmtfdHlwZSBfX3ggPSBzdGF0aWNfY2FzdDxfQ29uc3RfTGlua190eXBlPihfX2l0Ll9NX25vZGUpOworCSAgX0NvbnN0X0xpbmtfdHlwZSBfX0wgPSBfU19sZWZ0KF9feCk7CisJICBfQ29uc3RfTGlua190eXBlIF9fUiA9IF9TX3JpZ2h0KF9feCk7CisKKwkgIGlmIChfX3gtPl9NX2NvbG9yID09IF9TX3JlZCkKKwkgICAgaWYgKChfX0wgJiYgX19MLT5fTV9jb2xvciA9PSBfU19yZWQpCisJCXx8IChfX1IgJiYgX19SLT5fTV9jb2xvciA9PSBfU19yZWQpKQorCSAgICAgIHJldHVybiBmYWxzZTsKKworCSAgaWYgKF9fTCAmJiBfTV9pbXBsLl9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfU19rZXkoX19MKSkpCisJICAgIHJldHVybiBmYWxzZTsKKwkgIGlmIChfX1IgJiYgX01faW1wbC5fTV9rZXlfY29tcGFyZShfU19rZXkoX19SKSwgX1Nfa2V5KF9feCkpKQorCSAgICByZXR1cm4gZmFsc2U7CisKKwkgIGlmICghX19MICYmICFfX1IgJiYgX1JiX3RyZWVfYmxhY2tfY291bnQoX194LCBfTV9yb290KCkpICE9IF9fbGVuKQorCSAgICByZXR1cm4gZmFsc2U7CisJfQorCisgICAgICBpZiAoX01fbGVmdG1vc3QoKSAhPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX01fcm9vdCgpKSkKKwlyZXR1cm4gZmFsc2U7CisgICAgICBpZiAoX01fcmlnaHRtb3N0KCkgIT0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9NX3Jvb3QoKSkpCisJcmV0dXJuIGZhbHNlOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF91bmluaXRpYWxpemVkLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjYzOTlkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgKQEAgLTAsMCArMSw1MzkgQEAKKy8vIFJhdyBtZW1vcnkgbWFuaXB1bGF0b3JzIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5NworICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIHN0bF91bmluaXRpYWxpemVkLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfU1RMX1VOSU5JVElBTElaRURfSAorI2RlZmluZSBfU1RMX1VOSU5JVElBTElaRURfSCAxCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgdGVtcGxhdGU8Ym9vbD4KKyAgICBzdHJ1Y3QgX191bmluaXRpYWxpemVkX2NvcHkKKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICAgICAgc3RhdGljIF9Gb3J3YXJkSXRlcmF0b3IKKyAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJCSAgIF9Gb3J3YXJkSXRlcmF0b3IgX19yZXN1bHQpCisgICAgICAgIHsKKwkgIF9Gb3J3YXJkSXRlcmF0b3IgX19jdXIgPSBfX3Jlc3VsdDsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX2N1cikKKwkJc3RkOjpfQ29uc3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsKKwkgICAgICByZXR1cm4gX19jdXI7CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7CisJICAgICAgc3RkOjpfRGVzdHJveShfX3Jlc3VsdCwgX19jdXIpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX3VuaW5pdGlhbGl6ZWRfY29weTx0cnVlPgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgICAgICBzdGF0aWMgX0ZvcndhcmRJdGVyYXRvcgorICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkJICAgX0ZvcndhcmRJdGVyYXRvciBfX3Jlc3VsdCkKKyAgICAgICAgeyByZXR1cm4gc3RkOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9CisgICAgfTsKKworICAvKioKKyAgICogIEBicmllZiBDb3BpZXMgdGhlIHJhbmdlIFtmaXJzdCxsYXN0KSBpbnRvIHJlc3VsdC4KKyAgICogIEBwYXJhbSAgZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIHJlc3VsdCBBbiBvdXRwdXQgaXRlcmF0b3IuCisgICAqICBAcmV0dXJuICAgcmVzdWx0ICsgKGZpcnN0IC0gbGFzdCkKKyAgICoKKyAgICogIExpa2UgY29weSgpLCBidXQgZG9lcyBub3QgcmVxdWlyZSBhbiBpbml0aWFsaXplZCBvdXRwdXQgcmFuZ2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgIGlubGluZSBfRm9yd2FyZEl0ZXJhdG9yCisgICAgdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19yZXN1bHQpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGUyOworCisgICAgICByZXR1cm4gc3RkOjpfX3VuaW5pdGlhbGl6ZWRfY29weTwoX19pc19wb2QoX1ZhbHVlVHlwZTEpCisJCQkJCSYmIF9faXNfcG9kKF9WYWx1ZVR5cGUyKSk+OjoKKwl1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CisgICAgfQorCisKKyAgdGVtcGxhdGU8Ym9vbD4KKyAgICBzdHJ1Y3QgX191bmluaXRpYWxpemVkX2ZpbGwKKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CisgICAgICAgIHN0YXRpYyB2b2lkCisgICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCisJCQkgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gpCisgICAgICAgIHsKKwkgIF9Gb3J3YXJkSXRlcmF0b3IgX19jdXIgPSBfX2ZpcnN0OworCSAgX190cnkKKwkgICAgeworCSAgICAgIGZvciAoOyBfX2N1ciAhPSBfX2xhc3Q7ICsrX19jdXIpCisJCXN0ZDo6X0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeworCSAgICAgIHN0ZDo6X0Rlc3Ryb3koX19maXJzdCwgX19jdXIpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX3VuaW5pdGlhbGl6ZWRfZmlsbDx0cnVlPgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RhdGljIHZvaWQKKyAgICAgICAgdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKKwkJCSAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBjb25zdCBfVHAmIF9feCkKKyAgICAgICAgeyBzdGQ6OmZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gpOyB9CisgICAgfTsKKworICAvKioKKyAgICogIEBicmllZiBDb3BpZXMgdGhlIHZhbHVlIHggaW50byB0aGUgcmFuZ2UgW2ZpcnN0LGxhc3QpLgorICAgKiAgQHBhcmFtICBmaXJzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIGxhc3QgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgeCAgICAgIFRoZSBzb3VyY2UgdmFsdWUuCisgICAqICBAcmV0dXJuICAgTm90aGluZy4KKyAgICoKKyAgICogIExpa2UgZmlsbCgpLCBidXQgZG9lcyBub3QgcmVxdWlyZSBhbiBpbml0aWFsaXplZCBvdXRwdXQgcmFuZ2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQkgICAgICAgY29uc3QgX1RwJiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlOworCisgICAgICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9maWxsPF9faXNfcG9kKF9WYWx1ZVR5cGUpPjo6CisJdW5pbml0aWFsaXplZF9maWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsKKyAgICB9CisKKworICB0ZW1wbGF0ZTxib29sPgorICAgIHN0cnVjdCBfX3VuaW5pdGlhbGl6ZWRfY29uc3RydWN0X3JhbmdlX2Rpc3BhdGNoCisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgorICAgICAgICBzdGF0aWMgdm9pZAorICAgICAgICBfX3VjcihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCSAgICAgIF9UcCYgX192YWx1ZSkKKyAgICAgICAgeworCSAgaWYoX19maXJzdCA9PSBfX2xhc3QpCisJICAgIHJldHVybjsKKworCSAgX0ZvcndhcmRJdGVyYXRvciBfX2N1ciA9IF9fZmlyc3Q7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgc3RkOjpfQ29uc3RydWN0KCYqX19maXJzdCwgX0dMSUJDWFhfTU9WRShfX3ZhbHVlKSk7CisJICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX3ByZXYgPSBfX2N1cjsKKwkgICAgICArK19fY3VyOworCSAgICAgIGZvcig7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1ciwgKytfX3ByZXYpCisJCXN0ZDo6X0NvbnN0cnVjdCgmKl9fY3VyLCBfR0xJQkNYWF9NT1ZFKCpfX3ByZXYpKTsKKwkgICAgICBfX3ZhbHVlID0gX0dMSUJDWFhfTU9WRSgqX19wcmV2KTsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsKKwkgICAgICBzdGQ6Ol9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCX0KKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX191bmluaXRpYWxpemVkX2NvbnN0cnVjdF9yYW5nZV9kaXNwYXRjaDx0cnVlPgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RhdGljIHZvaWQKKyAgICAgICAgX191Y3IoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwgX1RwJikgeyB9CisgICAgfTsKKworICAvLyBDb25zdHJ1Y3RzIG9iamVjdHMgaW4gdGhlIHJhbmdlIFtmaXJzdCwgbGFzdCkuCisgIC8vIE5vdGUgdGhhdCB3aGlsZSB0aGVzZSBuZXcgb2JqZWN0cyB3aWxsIHRha2UgdmFsaWQgdmFsdWVzLAorICAvLyB0aGVpciBleGFjdCB2YWx1ZSBpcyBub3QgZGVmaW5lZC4gSW4gcGFydGljdWxhciB0aGV5IG1heQorICAvLyBiZSAnbW92ZWQgZnJvbScuCisgIC8vCisgIC8vIFdoaWxlIF9fdmFsdWUgbWF5IGFsdGVyZWQgZHVyaW5nIHRoaXMgYWxnb3JpdGhtLCBpdCB3aWxsIGhhdmUKKyAgLy8gdGhlIHNhbWUgdmFsdWUgd2hlbiB0aGUgYWxnb3JpdGhtIGZpbmlzaGVzLCB1bmxlc3Mgb25lIG9mIHRoZQorICAvLyBjb25zdHJ1Y3Rpb25zIHRocm93cy4KKyAgLy8KKyAgLy8gUmVxdWlyZW1lbnRzOiBfRm9yd2FyZEl0ZXJhdG9yOjp2YWx1ZV90eXBlKF9UcCYmKSBpcyB2YWxpZC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX191bmluaXRpYWxpemVkX2NvbnN0cnVjdF9yYW5nZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCisJCQkJICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQkJCSAgICBfVHAmIF9fdmFsdWUpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisKKyAgICAgIHN0ZDo6X191bmluaXRpYWxpemVkX2NvbnN0cnVjdF9yYW5nZV9kaXNwYXRjaDwKKyAgICAgICAgX19oYXNfdHJpdmlhbF9jb25zdHJ1Y3RvcihfVmFsdWVUeXBlKT46OgorCSAgX191Y3IoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlKTsKKyAgICB9CisKKworICB0ZW1wbGF0ZTxib29sPgorICAgIHN0cnVjdCBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uCisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RhdGljIHZvaWQKKyAgICAgICAgdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfU2l6ZSBfX24sCisJCQkgICAgIGNvbnN0IF9UcCYgX194KQorICAgICAgICB7CisJICBfRm9yd2FyZEl0ZXJhdG9yIF9fY3VyID0gX19maXJzdDsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICBmb3IgKDsgX19uID4gMDsgLS1fX24sICsrX19jdXIpCisJCXN0ZDo6X0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeworCSAgICAgIHN0ZDo6X0Rlc3Ryb3koX19maXJzdCwgX19jdXIpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uPHRydWU+CisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RhdGljIHZvaWQKKyAgICAgICAgdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfU2l6ZSBfX24sCisJCQkgICAgIGNvbnN0IF9UcCYgX194KQorICAgICAgICB7IHN0ZDo6ZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194KTsgfQorICAgIH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgQ29waWVzIHRoZSB2YWx1ZSB4IGludG8gdGhlIHJhbmdlIFtmaXJzdCxmaXJzdCtuKS4KKyAgICogIEBwYXJhbSAgZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBuICAgICAgVGhlIG51bWJlciBvZiBjb3BpZXMgdG8gbWFrZS4KKyAgICogIEBwYXJhbSAgeCAgICAgIFRoZSBzb3VyY2UgdmFsdWUuCisgICAqICBAcmV0dXJuICAgTm90aGluZy4KKyAgICoKKyAgICogIExpa2UgZmlsbF9uKCksIGJ1dCBkb2VzIG5vdCByZXF1aXJlIGFuIGluaXRpYWxpemVkIG91dHB1dCByYW5nZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisKKyAgICAgIHN0ZDo6X191bmluaXRpYWxpemVkX2ZpbGxfbjxfX2lzX3BvZChfVmFsdWVUeXBlKT46OgorCXVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194KTsKKyAgICB9CisKKyAgLy8gRXh0ZW5zaW9uczogdmVyc2lvbnMgb2YgdW5pbml0aWFsaXplZF9jb3B5LCB1bmluaXRpYWxpemVkX2ZpbGwsCisgIC8vICBhbmQgdW5pbml0aWFsaXplZF9maWxsX24gdGhhdCB0YWtlIGFuIGFsbG9jYXRvciBwYXJhbWV0ZXIuCisgIC8vICBXZSBkaXNwYXRjaCBiYWNrIHRvIHRoZSBzdGFuZGFyZCB2ZXJzaW9ucyB3aGVuIHdlJ3JlIGdpdmVuIHRoZQorICAvLyAgZGVmYXVsdCBhbGxvY2F0b3IuICBGb3Igbm9uZGVmYXVsdCBhbGxvY2F0b3JzIHdlIGRvIG5vdCB1c2UgCisgIC8vICBhbnkgb2YgdGhlIFBPRCBvcHRpbWl6YXRpb25zLgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgX0ZvcndhcmRJdGVyYXRvcgorICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2EoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkJICAgX0ZvcndhcmRJdGVyYXRvciBfX3Jlc3VsdCwgX0FsbG9jYXRvciYgX19hbGxvYykKKyAgICB7CisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fY3VyID0gX19yZXN1bHQ7CisgICAgICBfX3RyeQorCXsKKwkgIGZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fY3VyKQorCSAgICBfX2FsbG9jLmNvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7CisJICByZXR1cm4gX19jdXI7CisJfQorICAgICAgX19jYXRjaCguLi4pCisJeworCSAgc3RkOjpfRGVzdHJveShfX3Jlc3VsdCwgX19jdXIsIF9fYWxsb2MpOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfRm9yd2FyZEl0ZXJhdG9yCisgICAgX191bmluaXRpYWxpemVkX2NvcHlfYShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCQkgICBfRm9yd2FyZEl0ZXJhdG9yIF9fcmVzdWx0LCBhbGxvY2F0b3I8X1RwPiYpCisgICAgeyByZXR1cm4gc3RkOjp1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBfRm9yd2FyZEl0ZXJhdG9yCisgICAgX191bmluaXRpYWxpemVkX21vdmVfYShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCQkgICBfRm9yd2FyZEl0ZXJhdG9yIF9fcmVzdWx0LCBfQWxsb2NhdG9yJiBfX2FsbG9jKQorICAgIHsKKyAgICAgIHJldHVybiBzdGQ6Ol9fdW5pbml0aWFsaXplZF9jb3B5X2EoX0dMSUJDWFhfTUFLRV9NT1ZFX0lURVJBVE9SKF9fZmlyc3QpLAorCQkJCQkgX0dMSUJDWFhfTUFLRV9NT1ZFX0lURVJBVE9SKF9fbGFzdCksCisJCQkJCSBfX3Jlc3VsdCwgX19hbGxvYyk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICB2b2lkCisgICAgX191bmluaXRpYWxpemVkX2ZpbGxfYShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQkJICAgY29uc3QgX1RwJiBfX3gsIF9BbGxvY2F0b3ImIF9fYWxsb2MpCisgICAgeworICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2N1ciA9IF9fZmlyc3Q7CisgICAgICBfX3RyeQorCXsKKwkgIGZvciAoOyBfX2N1ciAhPSBfX2xhc3Q7ICsrX19jdXIpCisJICAgIF9fYWxsb2MuY29uc3RydWN0KCYqX19jdXIsIF9feCk7CisJfQorICAgICAgX19jYXRjaCguLi4pCisJeworCSAgc3RkOjpfRGVzdHJveShfX2ZpcnN0LCBfX2N1ciwgX19hbGxvYyk7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMj4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2EoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkJCSAgIGNvbnN0IF9UcCYgX194LCBhbGxvY2F0b3I8X1RwMj4mKQorICAgIHsgc3RkOjp1bmluaXRpYWxpemVkX2ZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIHZvaWQKKyAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2EoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfU2l6ZSBfX24sIAorCQkJICAgICBjb25zdCBfVHAmIF9feCwgX0FsbG9jYXRvciYgX19hbGxvYykKKyAgICB7CisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fY3VyID0gX19maXJzdDsKKyAgICAgIF9fdHJ5CisJeworCSAgZm9yICg7IF9fbiA+IDA7IC0tX19uLCArK19fY3VyKQorCSAgICBfX2FsbG9jLmNvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIHN0ZDo6X0Rlc3Ryb3koX19maXJzdCwgX19jdXIsIF9fYWxsb2MpOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwLAorCSAgIHR5cGVuYW1lIF9UcDI+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2EoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfU2l6ZSBfX24sIAorCQkJICAgICBjb25zdCBfVHAmIF9feCwgYWxsb2NhdG9yPF9UcDI+JikKKyAgICB7IHN0ZDo6dW5pbml0aWFsaXplZF9maWxsX24oX19maXJzdCwgX19uLCBfX3gpOyB9CisKKworICAvLyBFeHRlbnNpb25zOiBfX3VuaW5pdGlhbGl6ZWRfY29weV9tb3ZlLCBfX3VuaW5pdGlhbGl6ZWRfbW92ZV9jb3B5LAorICAvLyBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9tb3ZlLCBfX3VuaW5pdGlhbGl6ZWRfbW92ZV9maWxsLgorICAvLyBBbGwgb2YgdGhlc2UgYWxnb3JpdGhtcyB0YWtlIGEgdXNlci1zdXBwbGllZCBhbGxvY2F0b3IsIHdoaWNoIGlzIHVzZWQKKyAgLy8gZm9yIGNvbnN0cnVjdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uCisKKyAgLy8gX191bmluaXRpYWxpemVkX2NvcHlfbW92ZQorICAvLyBDb3BpZXMgW2ZpcnN0MSwgbGFzdDEpIGludG8gW3Jlc3VsdCwgcmVzdWx0ICsgKGxhc3QxIC0gZmlyc3QxKSksIGFuZAorICAvLyAgbW92ZSBbZmlyc3QyLCBsYXN0MikgaW50bworICAvLyAgW3Jlc3VsdCwgcmVzdWx0ICsgKGxhc3QxIC0gZmlyc3QxKSArIChsYXN0MiAtIGZpcnN0MikpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMiwKKwkgICB0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBfRm9yd2FyZEl0ZXJhdG9yCisgICAgX191bmluaXRpYWxpemVkX2NvcHlfbW92ZShfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEsCisJCQkgICAgICBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKKwkJCSAgICAgIF9JbnB1dEl0ZXJhdG9yMiBfX2ZpcnN0MiwKKwkJCSAgICAgIF9JbnB1dEl0ZXJhdG9yMiBfX2xhc3QyLAorCQkJICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX3Jlc3VsdCwKKwkJCSAgICAgIF9BbGxvY2F0b3ImIF9fYWxsb2MpCisgICAgeworICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IHN0ZDo6X191bmluaXRpYWxpemVkX2NvcHlfYShfX2ZpcnN0MSwgX19sYXN0MSwKKwkJCQkJCQkgICBfX3Jlc3VsdCwKKwkJCQkJCQkgICBfX2FsbG9jKTsKKyAgICAgIF9fdHJ5CisJeworCSAgcmV0dXJuIHN0ZDo6X191bmluaXRpYWxpemVkX21vdmVfYShfX2ZpcnN0MiwgX19sYXN0MiwgX19taWQsIF9fYWxsb2MpOworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIHN0ZDo6X0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkLCBfX2FsbG9jKTsKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICB9CisKKyAgLy8gX191bmluaXRpYWxpemVkX21vdmVfY29weQorICAvLyBNb3ZlcyBbZmlyc3QxLCBsYXN0MSkgaW50byBbcmVzdWx0LCByZXN1bHQgKyAobGFzdDEgLSBmaXJzdDEpKSwgYW5kCisgIC8vICBjb3BpZXMgW2ZpcnN0MiwgbGFzdDIpIGludG8KKyAgLy8gIFtyZXN1bHQsIHJlc3VsdCArIChsYXN0MSAtIGZpcnN0MSkgKyAobGFzdDIgLSBmaXJzdDIpKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IxLCB0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjIsCisJICAgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgX0ZvcndhcmRJdGVyYXRvcgorICAgIF9fdW5pbml0aWFsaXplZF9tb3ZlX2NvcHkoX0lucHV0SXRlcmF0b3IxIF9fZmlyc3QxLAorCQkJICAgICAgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEsCisJCQkgICAgICBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIsCisJCQkgICAgICBfSW5wdXRJdGVyYXRvcjIgX19sYXN0MiwKKwkJCSAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19yZXN1bHQsCisJCQkgICAgICBfQWxsb2NhdG9yJiBfX2FsbG9jKQorICAgIHsKKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBzdGQ6Ol9fdW5pbml0aWFsaXplZF9tb3ZlX2EoX19maXJzdDEsIF9fbGFzdDEsCisJCQkJCQkJICAgX19yZXN1bHQsCisJCQkJCQkJICAgX19hbGxvYyk7CisgICAgICBfX3RyeQorCXsKKwkgIHJldHVybiBzdGQ6Ol9fdW5pbml0aWFsaXplZF9jb3B5X2EoX19maXJzdDIsIF9fbGFzdDIsIF9fbWlkLCBfX2FsbG9jKTsKKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBzdGQ6Ol9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCwgX19hbGxvYyk7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgfQorICAKKyAgLy8gX191bmluaXRpYWxpemVkX2ZpbGxfbW92ZQorICAvLyBGaWxscyBbcmVzdWx0LCBtaWQpIHdpdGggeCwgYW5kIG1vdmVzIFtmaXJzdCwgbGFzdCkgaW50bworICAvLyAgW21pZCwgbWlkICsgKGxhc3QgLSBmaXJzdCkpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIF9Gb3J3YXJkSXRlcmF0b3IKKyAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9tb3ZlKF9Gb3J3YXJkSXRlcmF0b3IgX19yZXN1bHQsIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQsCisJCQkgICAgICBjb25zdCBfVHAmIF9feCwgX0lucHV0SXRlcmF0b3IgX19maXJzdCwKKwkJCSAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX0FsbG9jYXRvciYgX19hbGxvYykKKyAgICB7CisgICAgICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9maWxsX2EoX19yZXN1bHQsIF9fbWlkLCBfX3gsIF9fYWxsb2MpOworICAgICAgX190cnkKKwl7CisJICByZXR1cm4gc3RkOjpfX3VuaW5pdGlhbGl6ZWRfbW92ZV9hKF9fZmlyc3QsIF9fbGFzdCwgX19taWQsIF9fYWxsb2MpOworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIHN0ZDo6X0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkLCBfX2FsbG9jKTsKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICB9CisKKyAgLy8gX191bmluaXRpYWxpemVkX21vdmVfZmlsbAorICAvLyBNb3ZlcyBbZmlyc3QxLCBsYXN0MSkgaW50byBbZmlyc3QyLCBmaXJzdDIgKyAobGFzdDEgLSBmaXJzdDEpKSwgYW5kCisgIC8vICBmaWxscyBbZmlyc3QyICsgKGxhc3QxIC0gZmlyc3QxKSwgbGFzdDIpIHdpdGggeC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSB2b2lkCisgICAgX191bmluaXRpYWxpemVkX21vdmVfZmlsbChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3IgX19sYXN0MSwKKwkJCSAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdDIsCisJCQkgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdDIsIGNvbnN0IF9UcCYgX194LAorCQkJICAgICAgX0FsbG9jYXRvciYgX19hbGxvYykKKyAgICB7CisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkMiA9IHN0ZDo6X191bmluaXRpYWxpemVkX21vdmVfYShfX2ZpcnN0MSwgX19sYXN0MSwKKwkJCQkJCQkgICAgX19maXJzdDIsCisJCQkJCQkJICAgIF9fYWxsb2MpOworICAgICAgX190cnkKKwl7CisJICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9maWxsX2EoX19taWQyLCBfX2xhc3QyLCBfX3gsIF9fYWxsb2MpOworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIHN0ZDo6X0Rlc3Ryb3koX19maXJzdDIsIF9fbWlkMiwgX19hbGxvYyk7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9TaXplLAorCSAgIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgX0ZvcndhcmRJdGVyYXRvcgorICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX1NpemUgX19uLAorCQkJICAgX0ZvcndhcmRJdGVyYXRvciBfX3Jlc3VsdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19jdXIgPSBfX3Jlc3VsdDsKKyAgICAgIF9fdHJ5CisJeworCSAgZm9yICg7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QsICsrX19jdXIpCisJICAgIDo6bmV3KHN0YXRpY19jYXN0PHZvaWQqPigmKl9fY3VyKSkgdHlwZW5hbWUKKwkJaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlKCpfX2ZpcnN0KTsKKwkgIHJldHVybiBfX2N1cjsKKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBzdGQ6Ol9EZXN0cm95KF9fcmVzdWx0LCBfX2N1cik7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1NpemUsCisJICAgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICBpbmxpbmUgX0ZvcndhcmRJdGVyYXRvcgorICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9TaXplIF9fbiwKKwkJCSAgIF9Gb3J3YXJkSXRlcmF0b3IgX19yZXN1bHQsCisJCQkgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKKyAgICB7IHJldHVybiBzdGQ6OnVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX3Jlc3VsdCk7IH0KKworICAvKioKKyAgICogIEBicmllZiBDb3BpZXMgdGhlIHJhbmdlIFtmaXJzdCxmaXJzdCtuKSBpbnRvIHJlc3VsdC4KKyAgICogIEBwYXJhbSAgZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBuICAgICAgVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBjb3B5LgorICAgKiAgQHBhcmFtICByZXN1bHQgQW4gb3V0cHV0IGl0ZXJhdG9yLgorICAgKiAgQHJldHVybiAgcmVzdWx0ICsgbgorICAgKgorICAgKiAgTGlrZSBjb3B5X24oKSwgYnV0IGRvZXMgbm90IHJlcXVpcmUgYW4gaW5pdGlhbGl6ZWQgb3V0cHV0IHJhbmdlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgaW5saW5lIF9Gb3J3YXJkSXRlcmF0b3IKKyAgICB1bmluaXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfU2l6ZSBfX24sCisJCQkgX0ZvcndhcmRJdGVyYXRvciBfX3Jlc3VsdCkKKyAgICB7IHJldHVybiBzdGQ6Ol9fdW5pbml0aWFsaXplZF9jb3B5X24oX19maXJzdCwgX19uLCBfX3Jlc3VsdCwKKwkJCQkJIHN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZiAvKiBfU1RMX1VOSU5JVElBTElaRURfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0bF92ZWN0b3IuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfdmVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZmYzg2YwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdGxfdmVjdG9yLmgKQEAgLTAsMCArMSwxMjI1IEBACisvLyBWZWN0b3IgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NgorICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBzdGxfdmVjdG9yLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfU1RMX1ZFQ1RPUl9ICisjZGVmaW5lIF9TVExfVkVDVE9SX0ggMQorCisjaW5jbHVkZSA8Yml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oPgorI2luY2x1ZGUgPGJpdHMvZnVuY3RleGNlcHQuaD4KKyNpbmNsdWRlIDxiaXRzL2NvbmNlcHRfY2hlY2suaD4KKyNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgorCitfR0xJQkNYWF9CRUdJTl9ORVNURURfTkFNRVNQQUNFKHN0ZCwgX0dMSUJDWFhfU1REX0QpCisKKyAgLy8vIFNlZSBiaXRzL3N0bF9kZXF1ZS5oJ3MgX0RlcXVlX2Jhc2UgZm9yIGFuIGV4cGxhbmF0aW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBzdHJ1Y3QgX1ZlY3Rvcl9iYXNlCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxfVHA+OjpvdGhlciBfVHBfYWxsb2NfdHlwZTsKKworICAgICAgc3RydWN0IF9WZWN0b3JfaW1wbCAKKyAgICAgIDogcHVibGljIF9UcF9hbGxvY190eXBlCisgICAgICB7CisJdHlwZW5hbWUgX1RwX2FsbG9jX3R5cGU6OnBvaW50ZXIgX01fc3RhcnQ7CisJdHlwZW5hbWUgX1RwX2FsbG9jX3R5cGU6OnBvaW50ZXIgX01fZmluaXNoOworCXR5cGVuYW1lIF9UcF9hbGxvY190eXBlOjpwb2ludGVyIF9NX2VuZF9vZl9zdG9yYWdlOworCisJX1ZlY3Rvcl9pbXBsKCkKKwk6IF9UcF9hbGxvY190eXBlKCksIF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCisJeyB9CisKKwlfVmVjdG9yX2ltcGwoX1RwX2FsbG9jX3R5cGUgY29uc3QmIF9fYSkKKwk6IF9UcF9hbGxvY190eXBlKF9fYSksIF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCisJeyB9CisgICAgICB9OworICAgICAgCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfQWxsb2MgYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIF9UcF9hbGxvY190eXBlJgorICAgICAgX01fZ2V0X1RwX2FsbG9jYXRvcigpCisgICAgICB7IHJldHVybiAqc3RhdGljX2Nhc3Q8X1RwX2FsbG9jX3R5cGUqPigmdGhpcy0+X01faW1wbCk7IH0KKworICAgICAgY29uc3QgX1RwX2FsbG9jX3R5cGUmCisgICAgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICpzdGF0aWNfY2FzdDxjb25zdCBfVHBfYWxsb2NfdHlwZSo+KCZ0aGlzLT5fTV9pbXBsKTsgfQorCisgICAgICBhbGxvY2F0b3JfdHlwZQorICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0CisgICAgICB7IHJldHVybiBhbGxvY2F0b3JfdHlwZShfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOyB9CisKKyAgICAgIF9WZWN0b3JfYmFzZSgpCisgICAgICA6IF9NX2ltcGwoKSB7IH0KKworICAgICAgX1ZlY3Rvcl9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCisgICAgICA6IF9NX2ltcGwoX19hKSB7IH0KKworICAgICAgX1ZlY3Rvcl9iYXNlKHNpemVfdCBfX24sIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCisgICAgICA6IF9NX2ltcGwoX19hKQorICAgICAgeworCXRoaXMtPl9NX2ltcGwuX01fc3RhcnQgPSB0aGlzLT5fTV9hbGxvY2F0ZShfX24pOworCXRoaXMtPl9NX2ltcGwuX01fZmluaXNoID0gdGhpcy0+X01faW1wbC5fTV9zdGFydDsKKwl0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlID0gdGhpcy0+X01faW1wbC5fTV9zdGFydCArIF9fbjsKKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBfVmVjdG9yX2Jhc2UoX1ZlY3Rvcl9iYXNlJiYgX194KQorICAgICAgOiBfTV9pbXBsKF9feC5fTV9nZXRfVHBfYWxsb2NhdG9yKCkpCisgICAgICB7CisJdGhpcy0+X01faW1wbC5fTV9zdGFydCA9IF9feC5fTV9pbXBsLl9NX3N0YXJ0OworCXRoaXMtPl9NX2ltcGwuX01fZmluaXNoID0gX194Ll9NX2ltcGwuX01fZmluaXNoOworCXRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UgPSBfX3guX01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZTsKKwlfX3guX01faW1wbC5fTV9zdGFydCA9IDA7CisJX194Ll9NX2ltcGwuX01fZmluaXNoID0gMDsKKwlfX3guX01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSA9IDA7CisgICAgICB9CisjZW5kaWYKKworICAgICAgfl9WZWN0b3JfYmFzZSgpCisgICAgICB7IF9NX2RlYWxsb2NhdGUodGhpcy0+X01faW1wbC5fTV9zdGFydCwgdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZQorCQkgICAgICAtIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQpOyB9CisKKyAgICBwdWJsaWM6CisgICAgICBfVmVjdG9yX2ltcGwgX01faW1wbDsKKworICAgICAgdHlwZW5hbWUgX1RwX2FsbG9jX3R5cGU6OnBvaW50ZXIKKyAgICAgIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCisgICAgICB7IHJldHVybiBfX24gIT0gMCA/IF9NX2ltcGwuYWxsb2NhdGUoX19uKSA6IDA7IH0KKworICAgICAgdm9pZAorICAgICAgX01fZGVhbGxvY2F0ZSh0eXBlbmFtZSBfVHBfYWxsb2NfdHlwZTo6cG9pbnRlciBfX3AsIHNpemVfdCBfX24pCisgICAgICB7CisJaWYgKF9fcCkKKwkgIF9NX2ltcGwuZGVhbGxvY2F0ZShfX3AsIF9fbik7CisgICAgICB9CisgICAgfTsKKworCisgIC8qKgorICAgKiAgQGJyaWVmIEEgc3RhbmRhcmQgY29udGFpbmVyIHdoaWNoIG9mZmVycyBmaXhlZCB0aW1lIGFjY2VzcyB0bworICAgKiAgaW5kaXZpZHVhbCBlbGVtZW50cyBpbiBhbnkgb3JkZXIuCisgICAqCisgICAqICBAaW5ncm91cCBzZXF1ZW5jZXMKKyAgICoKKyAgICogIE1lZXRzIHRoZSByZXF1aXJlbWVudHMgb2YgYSA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2NSI+Y29udGFpbmVyPC9hPiwgYQorICAgKiAgPGEgaHJlZj0idGFibGVzLmh0bWwjNjYiPnJldmVyc2libGUgY29udGFpbmVyPC9hPiwgYW5kIGEKKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sIzY3Ij5zZXF1ZW5jZTwvYT4sIGluY2x1ZGluZyB0aGUKKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sIzY4Ij5vcHRpb25hbCBzZXF1ZW5jZSByZXF1aXJlbWVudHM8L2E+IHdpdGggdGhlCisgICAqICAlZXhjZXB0aW9uIG9mIEBjIHB1c2hfZnJvbnQgYW5kIEBjIHBvcF9mcm9udC4KKyAgICoKKyAgICogIEluIHNvbWUgdGVybWlub2xvZ3kgYSAldmVjdG9yIGNhbiBiZSBkZXNjcmliZWQgYXMgYSBkeW5hbWljCisgICAqICBDLXN0eWxlIGFycmF5LCBpdCBvZmZlcnMgZmFzdCBhbmQgZWZmaWNpZW50IGFjY2VzcyB0byBpbmRpdmlkdWFsCisgICAqICBlbGVtZW50cyBpbiBhbnkgb3JkZXIgYW5kIHNhdmVzIHRoZSB1c2VyIGZyb20gd29ycnlpbmcgYWJvdXQKKyAgICogIG1lbW9yeSBhbmQgc2l6ZSBhbGxvY2F0aW9uLiAgU3Vic2NyaXB0aW5nICggQGMgW10gKSBhY2Nlc3MgaXMKKyAgICogIGFsc28gcHJvdmlkZWQgYXMgd2l0aCBDLXN0eWxlIGFycmF5cy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxfVHA+ID4KKyAgICBjbGFzcyB2ZWN0b3IgOiBwcm90ZWN0ZWQgX1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPgorICAgIHsKKyAgICAgIC8vIENvbmNlcHQgcmVxdWlyZW1lbnRzLgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnZhbHVlX3R5cGUgICAgICAgICAgICAgICAgX0FsbG9jX3ZhbHVlX3R5cGU7CisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX1RwLCBfU0dJQXNzaWduYWJsZUNvbmNlcHQpCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMyKF9UcCwgX0FsbG9jX3ZhbHVlX3R5cGUsIF9TYW1lVHlwZUNvbmNlcHQpCisgICAgICAKKyAgICAgIHR5cGVkZWYgX1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPgkJCSBfQmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Ol9UcF9hbGxvY190eXBlCQkgX1RwX2FsbG9jX3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9UcAkJCQkJIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcF9hbGxvY190eXBlOjpwb2ludGVyICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHBfYWxsb2NfdHlwZTo6Y29uc3RfcG9pbnRlciAgICAgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RwX2FsbG9jX3R5cGU6OnJlZmVyZW5jZSAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RwX2FsbG9jX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSAgIGNvbnN0X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxwb2ludGVyLCB2ZWN0b3I+IGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIHZlY3Rvcj4KKyAgICAgIGNvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+ICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+CQkgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgc2l6ZV90CQkJCQkgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiBwdHJkaWZmX3QJCQkJCSBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIF9BbGxvYyAgICAgICAgICAgICAgICAgICAgICAgIAkJIGFsbG9jYXRvcl90eXBlOworCisgICAgcHJvdGVjdGVkOgorICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2FsbG9jYXRlOworICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2RlYWxsb2NhdGU7CisgICAgICB1c2luZyBfQmFzZTo6X01faW1wbDsKKyAgICAgIHVzaW5nIF9CYXNlOjpfTV9nZXRfVHBfYWxsb2NhdG9yOworCisgICAgcHVibGljOgorICAgICAgLy8gWzIzLjIuNC4xXSBjb25zdHJ1Y3QvY29weS9kZXN0cm95CisgICAgICAvLyAoYXNzaWduKCkgYW5kIGdldF9hbGxvY2F0b3IoKSBhcmUgYWxzbyBsaXN0ZWQgaW4gdGhpcyBzZWN0aW9uKQorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBEZWZhdWx0IGNvbnN0cnVjdG9yIGNyZWF0ZXMgbm8gZWxlbWVudHMuCisgICAgICAgKi8KKyAgICAgIHZlY3RvcigpCisgICAgICA6IF9CYXNlKCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ3JlYXRlcyBhICV2ZWN0b3Igd2l0aCBubyBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gIGEgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICB2ZWN0b3IoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKKyAgICAgIDogX0Jhc2UoX19hKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDcmVhdGVzIGEgJXZlY3RvciB3aXRoIGNvcGllcyBvZiBhbiBleGVtcGxhciBlbGVtZW50LgorICAgICAgICogIEBwYXJhbSAgbiAgVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBpbml0aWFsbHkgY3JlYXRlLgorICAgICAgICogIEBwYXJhbSAgdmFsdWUgIEFuIGVsZW1lbnQgdG8gY29weS4KKyAgICAgICAqICBAcGFyYW0gIGEgIEFuIGFsbG9jYXRvci4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBjb25zdHJ1Y3RvciBmaWxscyB0aGUgJXZlY3RvciB3aXRoIEBhIG4gY29waWVzIG9mIEBhIHZhbHVlLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgdmVjdG9yKHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsdWUgPSB2YWx1ZV90eXBlKCksCisJICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19uLCBfX2EpCisgICAgICB7IF9NX2ZpbGxfaW5pdGlhbGl6ZShfX24sIF9fdmFsdWUpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJVZlY3RvciBjb3B5IGNvbnN0cnVjdG9yLgorICAgICAgICogIEBwYXJhbSAgeCAgQSAldmVjdG9yIG9mIGlkZW50aWNhbCBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoZSBuZXdseS1jcmVhdGVkICV2ZWN0b3IgdXNlcyBhIGNvcHkgb2YgdGhlIGFsbG9jYXRpb24KKyAgICAgICAqICBvYmplY3QgdXNlZCBieSBAYSB4LiAgQWxsIHRoZSBlbGVtZW50cyBvZiBAYSB4IGFyZSBjb3BpZWQsCisgICAgICAgKiAgYnV0IGFueSBleHRyYSBtZW1vcnkgaW4KKyAgICAgICAqICBAYSB4IChmb3IgZmFzdCBleHBhbnNpb24pIHdpbGwgbm90IGJlIGNvcGllZC4KKyAgICAgICAqLworICAgICAgdmVjdG9yKGNvbnN0IHZlY3RvciYgX194KQorICAgICAgOiBfQmFzZShfX3guc2l6ZSgpLCBfX3guX01fZ2V0X1RwX2FsbG9jYXRvcigpKQorICAgICAgeyB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCA9CisJICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9jb3B5X2EoX194LmJlZ2luKCksIF9feC5lbmQoKSwKKwkJCQkgICAgICB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LAorCQkJCSAgICAgIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlVmVjdG9yIG1vdmUgY29uc3RydWN0b3IuCisgICAgICAgKiAgQHBhcmFtICB4ICBBICV2ZWN0b3Igb2YgaWRlbnRpY2FsIGVsZW1lbnQgYW5kIGFsbG9jYXRvciB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIG5ld2x5LWNyZWF0ZWQgJXZlY3RvciBjb250YWlucyB0aGUgZXhhY3QgY29udGVudHMgb2YgQGEgeC4KKyAgICAgICAqICBUaGUgY29udGVudHMgb2YgQGEgeCBhcmUgYSB2YWxpZCwgYnV0IHVuc3BlY2lmaWVkICV2ZWN0b3IuCisgICAgICAgKi8KKyAgICAgIHZlY3Rvcih2ZWN0b3ImJiBfX3gpCisgICAgICA6IF9CYXNlKHN0ZDo6Zm9yd2FyZDxfQmFzZT4oX194KSkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQnVpbGRzIGEgJXZlY3RvciBmcm9tIGFuIGluaXRpYWxpemVyIGxpc3QuCisgICAgICAgKiAgQHBhcmFtICBsICBBbiBpbml0aWFsaXplcl9saXN0LgorICAgICAgICogIEBwYXJhbSAgYSAgQW4gYWxsb2NhdG9yLgorICAgICAgICoKKyAgICAgICAqICBDcmVhdGUgYSAldmVjdG9yIGNvbnNpc3Rpbmcgb2YgY29waWVzIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUKKyAgICAgICAqICBpbml0aWFsaXplcl9saXN0IEBhIGwuCisgICAgICAgKgorICAgICAgICogIFRoaXMgd2lsbCBjYWxsIHRoZSBlbGVtZW50IHR5cGUncyBjb3B5IGNvbnN0cnVjdG9yIE4gdGltZXMKKyAgICAgICAqICAod2hlcmUgTiBpcyBAYSBsLnNpemUoKSkgYW5kIGRvIG5vIG1lbW9yeSByZWFsbG9jYXRpb24uCisgICAgICAgKi8KKyAgICAgIHZlY3Rvcihpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCwKKwkgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2EpCisgICAgICB7CisJX01fcmFuZ2VfaW5pdGlhbGl6ZShfX2wuYmVnaW4oKSwgX19sLmVuZCgpLAorCQkJICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKCkpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQnVpbGRzIGEgJXZlY3RvciBmcm9tIGEgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtICBmaXJzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBsYXN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIGEgIEFuIGFsbG9jYXRvci4KKyAgICAgICAqCisgICAgICAgKiAgQ3JlYXRlIGEgJXZlY3RvciBjb25zaXN0aW5nIG9mIGNvcGllcyBvZiB0aGUgZWxlbWVudHMgZnJvbQorICAgICAgICogIFtmaXJzdCxsYXN0KS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgdGhlIGl0ZXJhdG9ycyBhcmUgZm9yd2FyZCwgYmlkaXJlY3Rpb25hbCwgb3IKKyAgICAgICAqICByYW5kb20tYWNjZXNzLCB0aGVuIHRoaXMgd2lsbCBjYWxsIHRoZSBlbGVtZW50cycgY29weQorICAgICAgICogIGNvbnN0cnVjdG9yIE4gdGltZXMgKHdoZXJlIE4gaXMgZGlzdGFuY2UoZmlyc3QsbGFzdCkpIGFuZCBkbworICAgICAgICogIG5vIG1lbW9yeSByZWFsbG9jYXRpb24uICBCdXQgaWYgb25seSBpbnB1dCBpdGVyYXRvcnMgYXJlCisgICAgICAgKiAgdXNlZCwgdGhlbiB0aGlzIHdpbGwgZG8gYXQgbW9zdCAyTiBjYWxscyB0byB0aGUgY29weQorICAgICAgICogIGNvbnN0cnVjdG9yLCBhbmQgbG9nTiBtZW1vcnkgcmVhbGxvY2F0aW9ucy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZlY3RvcihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX0Jhc2UoX19hKQorICAgICAgICB7CisJICAvLyBDaGVjayB3aGV0aGVyIGl0J3MgYW4gaW50ZWdyYWwgdHlwZS4gIElmIHNvLCBpdCdzIG5vdCBhbiBpdGVyYXRvci4KKwkgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpfX2lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfX3R5cGUgX0ludGVncmFsOworCSAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKKwl9CisKKyAgICAgIC8qKgorICAgICAgICogIFRoZSBkdG9yIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50cywgYW5kIG5vdGUgdGhhdCBpZiB0aGUKKyAgICAgICAqICBlbGVtZW50cyB0aGVtc2VsdmVzIGFyZSBwb2ludGVycywgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzCisgICAgICAgKiAgbm90IHRvdWNoZWQgaW4gYW55IHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MKKyAgICAgICAqICByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgfnZlY3RvcigpCisgICAgICB7IHN0ZDo6X0Rlc3Ryb3kodGhpcy0+X01faW1wbC5fTV9zdGFydCwgdGhpcy0+X01faW1wbC5fTV9maW5pc2gsCisJCSAgICAgIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlVmVjdG9yIGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICB4ICBBICV2ZWN0b3Igb2YgaWRlbnRpY2FsIGVsZW1lbnQgYW5kIGFsbG9jYXRvciB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgQWxsIHRoZSBlbGVtZW50cyBvZiBAYSB4IGFyZSBjb3BpZWQsIGJ1dCBhbnkgZXh0cmEgbWVtb3J5IGluCisgICAgICAgKiAgQGEgeCAoZm9yIGZhc3QgZXhwYW5zaW9uKSB3aWxsIG5vdCBiZSBjb3BpZWQuICBVbmxpa2UgdGhlCisgICAgICAgKiAgY29weSBjb25zdHJ1Y3RvciwgdGhlIGFsbG9jYXRvciBvYmplY3QgaXMgbm90IGNvcGllZC4KKyAgICAgICAqLworICAgICAgdmVjdG9yJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHZlY3RvciYgX194KTsKKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgICVWZWN0b3IgbW92ZSBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgeCAgQSAldmVjdG9yIG9mIGlkZW50aWNhbCBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoZSBjb250ZW50cyBvZiBAYSB4IGFyZSBtb3ZlZCBpbnRvIHRoaXMgJXZlY3RvciAod2l0aG91dCBjb3B5aW5nKS4KKyAgICAgICAqICBAYSB4IGlzIGEgdmFsaWQsIGJ1dCB1bnNwZWNpZmllZCAldmVjdG9yLgorICAgICAgICovCisgICAgICB2ZWN0b3ImCisgICAgICBvcGVyYXRvcj0odmVjdG9yJiYgX194KQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorCS8vIE5COiBEUiA2NzUuCisJdGhpcy0+Y2xlYXIoKTsKKwl0aGlzLT5zd2FwKF9feCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgICVWZWN0b3IgbGlzdCBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgbCAgQW4gaW5pdGlhbGl6ZXJfbGlzdC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBmaWxscyBhICV2ZWN0b3Igd2l0aCBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGluIHRoZQorICAgICAgICogIGluaXRpYWxpemVyIGxpc3QgQGEgbC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZSB0aGF0IHRoZSBhc3NpZ25tZW50IGNvbXBsZXRlbHkgY2hhbmdlcyB0aGUgJXZlY3RvciBhbmQKKyAgICAgICAqICB0aGF0IHRoZSByZXN1bHRpbmcgJXZlY3RvcidzIHNpemUgaXMgdGhlIHNhbWUgYXMgdGhlIG51bWJlcgorICAgICAgICogIG9mIGVsZW1lbnRzIGFzc2lnbmVkLiAgT2xkIGRhdGEgbWF5IGJlIGxvc3QuCisgICAgICAgKi8KKyAgICAgIHZlY3RvciYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwl0aGlzLT5hc3NpZ24oX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXNzaWducyBhIGdpdmVuIHZhbHVlIHRvIGEgJXZlY3Rvci4KKyAgICAgICAqICBAcGFyYW0gIG4gIE51bWJlciBvZiBlbGVtZW50cyB0byBiZSBhc3NpZ25lZC4KKyAgICAgICAqICBAcGFyYW0gIHZhbCAgVmFsdWUgdG8gYmUgYXNzaWduZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZmlsbHMgYSAldmVjdG9yIHdpdGggQGEgbiBjb3BpZXMgb2YgdGhlIGdpdmVuCisgICAgICAgKiAgdmFsdWUuICBOb3RlIHRoYXQgdGhlIGFzc2lnbm1lbnQgY29tcGxldGVseSBjaGFuZ2VzIHRoZQorICAgICAgICogICV2ZWN0b3IgYW5kIHRoYXQgdGhlIHJlc3VsdGluZyAldmVjdG9yJ3Mgc2l6ZSBpcyB0aGUgc2FtZSBhcworICAgICAgICogIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgYXNzaWduZWQuICBPbGQgZGF0YSBtYXkgYmUgbG9zdC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKQorICAgICAgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9fdmFsKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFzc2lnbnMgYSByYW5nZSB0byBhICV2ZWN0b3IuCisgICAgICAgKiAgQHBhcmFtICBmaXJzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBsYXN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZmlsbHMgYSAldmVjdG9yIHdpdGggY29waWVzIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUKKyAgICAgICAqICByYW5nZSBbZmlyc3QsbGFzdCkuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhhdCB0aGUgYXNzaWdubWVudCBjb21wbGV0ZWx5IGNoYW5nZXMgdGhlICV2ZWN0b3IgYW5kCisgICAgICAgKiAgdGhhdCB0aGUgcmVzdWx0aW5nICV2ZWN0b3IncyBzaXplIGlzIHRoZSBzYW1lIGFzIHRoZSBudW1iZXIKKyAgICAgICAqICBvZiBlbGVtZW50cyBhc3NpZ25lZC4gIE9sZCBkYXRhIG1heSBiZSBsb3N0LgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgICB7CisJICAvLyBDaGVjayB3aGV0aGVyIGl0J3MgYW4gaW50ZWdyYWwgdHlwZS4gIElmIHNvLCBpdCdzIG5vdCBhbiBpdGVyYXRvci4KKwkgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpfX2lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfX3R5cGUgX0ludGVncmFsOworCSAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOworCX0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFzc2lnbnMgYW4gaW5pdGlhbGl6ZXIgbGlzdCB0byBhICV2ZWN0b3IuCisgICAgICAgKiAgQHBhcmFtICBsICBBbiBpbml0aWFsaXplcl9saXN0LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGZpbGxzIGEgJXZlY3RvciB3aXRoIGNvcGllcyBvZiB0aGUgZWxlbWVudHMgaW4gdGhlCisgICAgICAgKiAgaW5pdGlhbGl6ZXIgbGlzdCBAYSBsLgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgdGhlIGFzc2lnbm1lbnQgY29tcGxldGVseSBjaGFuZ2VzIHRoZSAldmVjdG9yIGFuZAorICAgICAgICogIHRoYXQgdGhlIHJlc3VsdGluZyAldmVjdG9yJ3Mgc2l6ZSBpcyB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyCisgICAgICAgKiAgb2YgZWxlbWVudHMgYXNzaWduZWQuICBPbGQgZGF0YSBtYXkgYmUgbG9zdC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgYXNzaWduKGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeyB0aGlzLT5hc3NpZ24oX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7IH0KKyNlbmRpZgorCisgICAgICAvLy8gR2V0IGEgY29weSBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gb2JqZWN0LgorICAgICAgdXNpbmcgX0Jhc2U6OmdldF9hbGxvY2F0b3I7CisKKyAgICAgIC8vIGl0ZXJhdG9ycworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGZpcnN0CisgICAgICAgKiAgZWxlbWVudCBpbiB0aGUgJXZlY3Rvci4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIG9yZGluYXJ5CisgICAgICAgKiAgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUKKyAgICAgICAqICBmaXJzdCBlbGVtZW50IGluIHRoZSAldmVjdG9yLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gb3JkaW5hcnkKKyAgICAgICAqICBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcy0+X01faW1wbC5fTV9zdGFydCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgaXRlcmF0b3IgdGhhdCBwb2ludHMgb25lIHBhc3QgdGhlIGxhc3QKKyAgICAgICAqICBlbGVtZW50IGluIHRoZSAldmVjdG9yLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gb3JkaW5hcnkKKyAgICAgICAqICBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgb25lIHBhc3QKKyAgICAgICAqICB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSAldmVjdG9yLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4KKyAgICAgICAqICBvcmRpbmFyeSBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZQorICAgICAgICogIGxhc3QgZWxlbWVudCBpbiB0aGUgJXZlY3Rvci4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIHJldmVyc2UKKyAgICAgICAqICBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMKKyAgICAgICAqICB0byB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSAldmVjdG9yLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4KKyAgICAgICAqICByZXZlcnNlIGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIG9uZQorICAgICAgICogIGJlZm9yZSB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgJXZlY3Rvci4gIEl0ZXJhdGlvbiBpcyBkb25lCisgICAgICAgKiAgaW4gcmV2ZXJzZSBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMKKyAgICAgICAqICB0byBvbmUgYmVmb3JlIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSAldmVjdG9yLiAgSXRlcmF0aW9uCisgICAgICAgKiAgaXMgZG9uZSBpbiByZXZlcnNlIGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUKKyAgICAgICAqICBmaXJzdCBlbGVtZW50IGluIHRoZSAldmVjdG9yLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gb3JkaW5hcnkKKyAgICAgICAqICBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyBvbmUgcGFzdAorICAgICAgICogIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlICV2ZWN0b3IuICBJdGVyYXRpb24gaXMgZG9uZSBpbgorICAgICAgICogIG9yZGluYXJ5IGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cworICAgICAgICogIHRvIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlICV2ZWN0b3IuICBJdGVyYXRpb24gaXMgZG9uZSBpbgorICAgICAgICogIHJldmVyc2UgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cworICAgICAgICogIHRvIG9uZSBiZWZvcmUgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlICV2ZWN0b3IuICBJdGVyYXRpb24KKyAgICAgICAqICBpcyBkb25lIGluIHJldmVyc2UgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorI2VuZGlmCisKKyAgICAgIC8vIFsyMy4yLjQuMl0gY2FwYWNpdHkKKyAgICAgIC8qKiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSAldmVjdG9yLiAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBzaXplX3R5cGUodGhpcy0+X01faW1wbC5fTV9maW5pc2ggLSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0KTsgfQorCisgICAgICAvKiogIFJldHVybnMgdGhlIHNpemUoKSBvZiB0aGUgbGFyZ2VzdCBwb3NzaWJsZSAldmVjdG9yLiAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZ2V0X1RwX2FsbG9jYXRvcigpLm1heF9zaXplKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXNpemVzIHRoZSAldmVjdG9yIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGVsZW1lbnRzLgorICAgICAgICogIEBwYXJhbSAgbmV3X3NpemUgIE51bWJlciBvZiBlbGVtZW50cyB0aGUgJXZlY3RvciBzaG91bGQgY29udGFpbi4KKyAgICAgICAqICBAcGFyYW0gIHggIERhdGEgd2l0aCB3aGljaCBuZXcgZWxlbWVudHMgc2hvdWxkIGJlIHBvcHVsYXRlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsICVyZXNpemUgdGhlICV2ZWN0b3IgdG8gdGhlIHNwZWNpZmllZAorICAgICAgICogIG51bWJlciBvZiBlbGVtZW50cy4gIElmIHRoZSBudW1iZXIgaXMgc21hbGxlciB0aGFuIHRoZQorICAgICAgICogICV2ZWN0b3IncyBjdXJyZW50IHNpemUgdGhlICV2ZWN0b3IgaXMgdHJ1bmNhdGVkLCBvdGhlcndpc2UKKyAgICAgICAqICB0aGUgJXZlY3RvciBpcyBleHRlbmRlZCBhbmQgbmV3IGVsZW1lbnRzIGFyZSBwb3B1bGF0ZWQgd2l0aAorICAgICAgICogIGdpdmVuIGRhdGEuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgdmFsdWVfdHlwZSBfX3ggPSB2YWx1ZV90eXBlKCkpCisgICAgICB7CisJaWYgKF9fbmV3X3NpemUgPCBzaXplKCkpCisJICBfTV9lcmFzZV9hdF9lbmQodGhpcy0+X01faW1wbC5fTV9zdGFydCArIF9fbmV3X3NpemUpOworCWVsc2UKKwkgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsKKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAvKiogIEEgbm9uLWJpbmRpbmcgcmVxdWVzdCB0byByZWR1Y2UgY2FwYWNpdHkoKSB0byBzaXplKCkuICAqLworICAgICAgdm9pZAorICAgICAgc2hyaW5rX3RvX2ZpdCgpCisgICAgICB7IHN0ZDo6X19zaHJpbmtfdG9fZml0PHZlY3Rvcj46Ol9TX2RvX2l0KCp0aGlzKTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBlbGVtZW50cyB0aGF0IHRoZSAldmVjdG9yIGNhbgorICAgICAgICogIGhvbGQgYmVmb3JlIG5lZWRpbmcgdG8gYWxsb2NhdGUgbW9yZSBtZW1vcnkuCisgICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgY2FwYWNpdHkoKSBjb25zdAorICAgICAgeyByZXR1cm4gc2l6ZV90eXBlKHRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UKKwkJCSAtIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgdHJ1ZSBpZiB0aGUgJXZlY3RvciBpcyBlbXB0eS4gIChUaHVzIGJlZ2luKCkgd291bGQKKyAgICAgICAqICBlcXVhbCBlbmQoKS4pCisgICAgICAgKi8KKyAgICAgIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBdHRlbXB0IHRvIHByZWFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIHNwZWNpZmllZCBudW1iZXIgb2YKKyAgICAgICAqICAgICAgICAgIGVsZW1lbnRzLgorICAgICAgICogIEBwYXJhbSAgbiAgTnVtYmVyIG9mIGVsZW1lbnRzIHJlcXVpcmVkLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIEBhIG4gZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIHJlc2VydmUgZW5vdWdoIG1lbW9yeSBmb3IgdGhlCisgICAgICAgKiAgJXZlY3RvciB0byBob2xkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGVsZW1lbnRzLiAgSWYgdGhlCisgICAgICAgKiAgbnVtYmVyIHJlcXVlc3RlZCBpcyBtb3JlIHRoYW4gbWF4X3NpemUoKSwgbGVuZ3RoX2Vycm9yIGlzCisgICAgICAgKiAgdGhyb3duLgorICAgICAgICoKKyAgICAgICAqICBUaGUgYWR2YW50YWdlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdGhhdCBpZiBvcHRpbWFsIGNvZGUgaXMgYQorICAgICAgICogIG5lY2Vzc2l0eSBhbmQgdGhlIHVzZXIgY2FuIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzCisgICAgICAgKiAgdGhhdCB3aWxsIGJlIHJlcXVpcmVkLCB0aGUgdXNlciBjYW4gcmVzZXJ2ZSB0aGUgbWVtb3J5IGluCisgICAgICAgKiAgJWFkdmFuY2UsIGFuZCB0aHVzIHByZXZlbnQgYSBwb3NzaWJsZSByZWFsbG9jYXRpb24gb2YgbWVtb3J5CisgICAgICAgKiAgYW5kIGNvcHlpbmcgb2YgJXZlY3RvciBkYXRhLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNlcnZlKHNpemVfdHlwZSBfX24pOworCisgICAgICAvLyBlbGVtZW50IGFjY2VzcworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTdWJzY3JpcHQgYWNjZXNzIHRvIHRoZSBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgJXZlY3Rvci4KKyAgICAgICAqICBAcGFyYW0gbiBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgZm9yIHdoaWNoIGRhdGEgc2hvdWxkIGJlCisgICAgICAgKiAgYWNjZXNzZWQuCisgICAgICAgKiAgQHJldHVybiAgUmVhZC93cml0ZSByZWZlcmVuY2UgdG8gZGF0YS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBvcGVyYXRvciBhbGxvd3MgZm9yIGVhc3ksIGFycmF5LXN0eWxlLCBkYXRhIGFjY2Vzcy4KKyAgICAgICAqICBOb3RlIHRoYXQgZGF0YSBhY2Nlc3Mgd2l0aCB0aGlzIG9wZXJhdG9yIGlzIHVuY2hlY2tlZCBhbmQKKyAgICAgICAqICBvdXRfb2ZfcmFuZ2UgbG9va3VwcyBhcmUgbm90IGRlZmluZWQuIChGb3IgY2hlY2tlZCBsb29rdXBzCisgICAgICAgKiAgc2VlIGF0KCkuKQorICAgICAgICovCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikKKyAgICAgIHsgcmV0dXJuICoodGhpcy0+X01faW1wbC5fTV9zdGFydCArIF9fbik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTdWJzY3JpcHQgYWNjZXNzIHRvIHRoZSBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgJXZlY3Rvci4KKyAgICAgICAqICBAcGFyYW0gbiBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgZm9yIHdoaWNoIGRhdGEgc2hvdWxkIGJlCisgICAgICAgKiAgYWNjZXNzZWQuCisgICAgICAgKiAgQHJldHVybiAgUmVhZC1vbmx5IChjb25zdGFudCkgcmVmZXJlbmNlIHRvIGRhdGEuCisgICAgICAgKgorICAgICAgICogIFRoaXMgb3BlcmF0b3IgYWxsb3dzIGZvciBlYXN5LCBhcnJheS1zdHlsZSwgZGF0YSBhY2Nlc3MuCisgICAgICAgKiAgTm90ZSB0aGF0IGRhdGEgYWNjZXNzIHdpdGggdGhpcyBvcGVyYXRvciBpcyB1bmNoZWNrZWQgYW5kCisgICAgICAgKiAgb3V0X29mX3JhbmdlIGxvb2t1cHMgYXJlIG5vdCBkZWZpbmVkLiAoRm9yIGNoZWNrZWQgbG9va3VwcworICAgICAgICogIHNlZSBhdCgpLikKKyAgICAgICAqLworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiAqKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgKyBfX24pOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvLy8gU2FmZXR5IGNoZWNrIHVzZWQgb25seSBmcm9tIGF0KCkuCisgICAgICB2b2lkCisgICAgICBfTV9yYW5nZV9jaGVjayhzaXplX3R5cGUgX19uKSBjb25zdAorICAgICAgeworCWlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQorCSAgX190aHJvd19vdXRfb2ZfcmFuZ2UoX19OKCJ2ZWN0b3I6Ol9NX3JhbmdlX2NoZWNrIikpOworICAgICAgfQorCisgICAgcHVibGljOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGRhdGEgY29udGFpbmVkIGluIHRoZSAldmVjdG9yLgorICAgICAgICogIEBwYXJhbSBuIFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCBmb3Igd2hpY2ggZGF0YSBzaG91bGQgYmUKKyAgICAgICAqICBhY2Nlc3NlZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWFkL3dyaXRlIHJlZmVyZW5jZSB0byBkYXRhLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgIElmIEBhIG4gaXMgYW4gaW52YWxpZCBpbmRleC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBmb3Igc2FmZXIgZGF0YSBhY2Nlc3MuICBUaGUgcGFyYW1ldGVyCisgICAgICAgKiAgaXMgZmlyc3QgY2hlY2tlZCB0aGF0IGl0IGlzIGluIHRoZSByYW5nZSBvZiB0aGUgdmVjdG9yLiAgVGhlCisgICAgICAgKiAgZnVuY3Rpb24gdGhyb3dzIG91dF9vZl9yYW5nZSBpZiB0aGUgY2hlY2sgZmFpbHMuCisgICAgICAgKi8KKyAgICAgIHJlZmVyZW5jZQorICAgICAgYXQoc2l6ZV90eXBlIF9fbikKKyAgICAgIHsKKwlfTV9yYW5nZV9jaGVjayhfX24pOworCXJldHVybiAoKnRoaXMpW19fbl07IAorICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgZGF0YSBjb250YWluZWQgaW4gdGhlICV2ZWN0b3IuCisgICAgICAgKiAgQHBhcmFtIG4gVGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IGZvciB3aGljaCBkYXRhIHNob3VsZCBiZQorICAgICAgICogIGFjY2Vzc2VkLgorICAgICAgICogIEByZXR1cm4gIFJlYWQtb25seSAoY29uc3RhbnQpIHJlZmVyZW5jZSB0byBkYXRhLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgIElmIEBhIG4gaXMgYW4gaW52YWxpZCBpbmRleC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBmb3Igc2FmZXIgZGF0YSBhY2Nlc3MuICBUaGUgcGFyYW1ldGVyCisgICAgICAgKiAgaXMgZmlyc3QgY2hlY2tlZCB0aGF0IGl0IGlzIGluIHRoZSByYW5nZSBvZiB0aGUgdmVjdG9yLiAgVGhlCisgICAgICAgKiAgZnVuY3Rpb24gdGhyb3dzIG91dF9vZl9yYW5nZSBpZiB0aGUgY2hlY2sgZmFpbHMuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsKKwlfTV9yYW5nZV9jaGVjayhfX24pOworCXJldHVybiAoKnRoaXMpW19fbl07CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIHJlZmVyZW5jZSB0byB0aGUgZGF0YSBhdCB0aGUgZmlyc3QKKyAgICAgICAqICBlbGVtZW50IG9mIHRoZSAldmVjdG9yLgorICAgICAgICovCisgICAgICByZWZlcmVuY2UKKyAgICAgIGZyb250KCkKKyAgICAgIHsgcmV0dXJuICpiZWdpbigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgYXQgdGhlIGZpcnN0CisgICAgICAgKiAgZWxlbWVudCBvZiB0aGUgJXZlY3Rvci4KKyAgICAgICAqLworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBmcm9udCgpIGNvbnN0CisgICAgICB7IHJldHVybiAqYmVnaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgYXQgdGhlIGxhc3QKKyAgICAgICAqICBlbGVtZW50IG9mIHRoZSAldmVjdG9yLgorICAgICAgICovCisgICAgICByZWZlcmVuY2UKKyAgICAgIGJhY2soKQorICAgICAgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgYXQgdGhlCisgICAgICAgKiAgbGFzdCBlbGVtZW50IG9mIHRoZSAldmVjdG9yLgorICAgICAgICovCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIGJhY2soKSBjb25zdAorICAgICAgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSIDQ2NC4gU3VnZ2VzdGlvbiBmb3IgbmV3IG1lbWJlciBmdW5jdGlvbnMgaW4gc3RhbmRhcmQgY29udGFpbmVycy4KKyAgICAgIC8vIGRhdGEgYWNjZXNzCisgICAgICAvKioKKyAgICAgICAqICAgUmV0dXJucyBhIHBvaW50ZXIgc3VjaCB0aGF0IFtkYXRhKCksIGRhdGEoKSArIHNpemUoKSkgaXMgYSB2YWxpZAorICAgICAgICogICByYW5nZS4gIEZvciBhIG5vbi1lbXB0eSAldmVjdG9yLCBkYXRhKCkgPT0gJmZyb250KCkuCisgICAgICAgKi8KKyAgICAgIHBvaW50ZXIKKyAgICAgIGRhdGEoKQorICAgICAgeyByZXR1cm4gcG9pbnRlcih0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0KTsgfQorCisgICAgICBjb25zdF9wb2ludGVyCisgICAgICBkYXRhKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3BvaW50ZXIodGhpcy0+X01faW1wbC5fTV9zdGFydCk7IH0KKworICAgICAgLy8gWzIzLjIuNC4zXSBtb2RpZmllcnMKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQWRkIGRhdGEgdG8gdGhlIGVuZCBvZiB0aGUgJXZlY3Rvci4KKyAgICAgICAqICBAcGFyYW0gIHggIERhdGEgdG8gYmUgYWRkZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgaXMgYSB0eXBpY2FsIHN0YWNrIG9wZXJhdGlvbi4gIFRoZSBmdW5jdGlvbiBjcmVhdGVzIGFuCisgICAgICAgKiAgZWxlbWVudCBhdCB0aGUgZW5kIG9mIHRoZSAldmVjdG9yIGFuZCBhc3NpZ25zIHRoZSBnaXZlbiBkYXRhCisgICAgICAgKiAgdG8gaXQuICBEdWUgdG8gdGhlIG5hdHVyZSBvZiBhICV2ZWN0b3IgdGhpcyBvcGVyYXRpb24gY2FuIGJlCisgICAgICAgKiAgZG9uZSBpbiBjb25zdGFudCB0aW1lIGlmIHRoZSAldmVjdG9yIGhhcyBwcmVhbGxvY2F0ZWQgc3BhY2UKKyAgICAgICAqICBhdmFpbGFibGUuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfYmFjayhjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7CisJaWYgKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoICE9IHRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UpCisJICB7CisJICAgIHRoaXMtPl9NX2ltcGwuY29uc3RydWN0KHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLCBfX3gpOworCSAgICArK3RoaXMtPl9NX2ltcGwuX01fZmluaXNoOworCSAgfQorCWVsc2UKKwkgIF9NX2luc2VydF9hdXgoZW5kKCksIF9feCk7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdm9pZAorICAgICAgcHVzaF9iYWNrKHZhbHVlX3R5cGUmJiBfX3gpCisgICAgICB7IGVtcGxhY2VfYmFjayhzdGQ6Om1vdmUoX194KSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHZvaWQKKyAgICAgICAgZW1wbGFjZV9iYWNrKF9BcmdzJiYuLi4gX19hcmdzKTsKKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZXMgbGFzdCBlbGVtZW50LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGlzIGEgdHlwaWNhbCBzdGFjayBvcGVyYXRpb24uIEl0IHNocmlua3MgdGhlICV2ZWN0b3IgYnkgb25lLgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgbm8gZGF0YSBpcyByZXR1cm5lZCwgYW5kIGlmIHRoZSBsYXN0IGVsZW1lbnQncworICAgICAgICogIGRhdGEgaXMgbmVlZGVkLCBpdCBzaG91bGQgYmUgcmV0cmlldmVkIGJlZm9yZSBwb3BfYmFjaygpIGlzCisgICAgICAgKiAgY2FsbGVkLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwb3BfYmFjaygpCisgICAgICB7CisJLS10aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaDsKKwl0aGlzLT5fTV9pbXBsLmRlc3Ryb3kodGhpcy0+X01faW1wbC5fTV9maW5pc2gpOworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW5zZXJ0cyBhbiBvYmplY3QgaW4gJXZlY3RvciBiZWZvcmUgc3BlY2lmaWVkIGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgcG9zaXRpb24gIEFuIGl0ZXJhdG9yIGludG8gdGhlICV2ZWN0b3IuCisgICAgICAgKiAgQHBhcmFtICBhcmdzICBBcmd1bWVudHMuCisgICAgICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGluc2VydGVkIGRhdGEuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBpbnNlcnQgYW4gb2JqZWN0IG9mIHR5cGUgVCBjb25zdHJ1Y3RlZAorICAgICAgICogIHdpdGggVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLgorICAgICAgICogIE5vdGUgdGhhdCB0aGlzIGtpbmQgb2Ygb3BlcmF0aW9uIGNvdWxkIGJlIGV4cGVuc2l2ZSBmb3IgYSAldmVjdG9yCisgICAgICAgKiAgYW5kIGlmIGl0IGlzIGZyZXF1ZW50bHkgdXNlZCB0aGUgdXNlciBzaG91bGQgY29uc2lkZXIgdXNpbmcKKyAgICAgICAqICBzdGQ6Omxpc3QuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICBpdGVyYXRvcgorICAgICAgICBlbXBsYWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIF9BcmdzJiYuLi4gX19hcmdzKTsKKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydHMgZ2l2ZW4gdmFsdWUgaW50byAldmVjdG9yIGJlZm9yZSBzcGVjaWZpZWQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBwb3NpdGlvbiAgQW4gaXRlcmF0b3IgaW50byB0aGUgJXZlY3Rvci4KKyAgICAgICAqICBAcGFyYW0gIHggIERhdGEgdG8gYmUgaW5zZXJ0ZWQuCisgICAgICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGluc2VydGVkIGRhdGEuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBpbnNlcnQgYSBjb3B5IG9mIHRoZSBnaXZlbiB2YWx1ZSBiZWZvcmUKKyAgICAgICAqICB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLiAgTm90ZSB0aGF0IHRoaXMga2luZCBvZiBvcGVyYXRpb24KKyAgICAgICAqICBjb3VsZCBiZSBleHBlbnNpdmUgZm9yIGEgJXZlY3RvciBhbmQgaWYgaXQgaXMgZnJlcXVlbnRseQorICAgICAgICogIHVzZWQgdGhlIHVzZXIgc2hvdWxkIGNvbnNpZGVyIHVzaW5nIHN0ZDo6bGlzdC4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpOworCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW5zZXJ0cyBnaXZlbiBydmFsdWUgaW50byAldmVjdG9yIGJlZm9yZSBzcGVjaWZpZWQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBwb3NpdGlvbiAgQW4gaXRlcmF0b3IgaW50byB0aGUgJXZlY3Rvci4KKyAgICAgICAqICBAcGFyYW0gIHggIERhdGEgdG8gYmUgaW5zZXJ0ZWQuCisgICAgICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGluc2VydGVkIGRhdGEuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBpbnNlcnQgYSBjb3B5IG9mIHRoZSBnaXZlbiBydmFsdWUgYmVmb3JlCisgICAgICAgKiAgdGhlIHNwZWNpZmllZCBsb2NhdGlvbi4gIE5vdGUgdGhhdCB0aGlzIGtpbmQgb2Ygb3BlcmF0aW9uCisgICAgICAgKiAgY291bGQgYmUgZXhwZW5zaXZlIGZvciBhICV2ZWN0b3IgYW5kIGlmIGl0IGlzIGZyZXF1ZW50bHkKKyAgICAgICAqICB1c2VkIHRoZSB1c2VyIHNob3VsZCBjb25zaWRlciB1c2luZyBzdGQ6Omxpc3QuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgdmFsdWVfdHlwZSYmIF9feCkKKyAgICAgIHsgcmV0dXJuIGVtcGxhY2UoX19wb3NpdGlvbiwgc3RkOjptb3ZlKF9feCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW5zZXJ0cyBhbiBpbml0aWFsaXplcl9saXN0IGludG8gdGhlICV2ZWN0b3IuCisgICAgICAgKiAgQHBhcmFtICBwb3NpdGlvbiAgQW4gaXRlcmF0b3IgaW50byB0aGUgJXZlY3Rvci4KKyAgICAgICAqICBAcGFyYW0gIGwgIEFuIGluaXRpYWxpemVyX2xpc3QuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBpbnNlcnQgY29waWVzIG9mIHRoZSBkYXRhIGluIHRoZSAKKyAgICAgICAqICBpbml0aWFsaXplcl9saXN0IEBhIGwgaW50byB0aGUgJXZlY3RvciBiZWZvcmUgdGhlIGxvY2F0aW9uCisgICAgICAgKiAgc3BlY2lmaWVkIGJ5IEBhIHBvc2l0aW9uLgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgdGhpcyBraW5kIG9mIG9wZXJhdGlvbiBjb3VsZCBiZSBleHBlbnNpdmUgZm9yIGEKKyAgICAgICAqICAldmVjdG9yIGFuZCBpZiBpdCBpcyBmcmVxdWVudGx5IHVzZWQgdGhlIHVzZXIgc2hvdWxkCisgICAgICAgKiAgY29uc2lkZXIgdXNpbmcgc3RkOjpsaXN0LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7IHRoaXMtPmluc2VydChfX3Bvc2l0aW9uLCBfX2wuYmVnaW4oKSwgX19sLmVuZCgpKTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW5zZXJ0cyBhIG51bWJlciBvZiBjb3BpZXMgb2YgZ2l2ZW4gZGF0YSBpbnRvIHRoZSAldmVjdG9yLgorICAgICAgICogIEBwYXJhbSAgcG9zaXRpb24gIEFuIGl0ZXJhdG9yIGludG8gdGhlICV2ZWN0b3IuCisgICAgICAgKiAgQHBhcmFtICBuICBOdW1iZXIgb2YgZWxlbWVudHMgdG8gYmUgaW5zZXJ0ZWQuCisgICAgICAgKiAgQHBhcmFtICB4ICBEYXRhIHRvIGJlIGluc2VydGVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgaW5zZXJ0IGEgc3BlY2lmaWVkIG51bWJlciBvZiBjb3BpZXMgb2YKKyAgICAgICAqICB0aGUgZ2l2ZW4gZGF0YSBiZWZvcmUgdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBieSBAYSBwb3NpdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZSB0aGF0IHRoaXMga2luZCBvZiBvcGVyYXRpb24gY291bGQgYmUgZXhwZW5zaXZlIGZvciBhCisgICAgICAgKiAgJXZlY3RvciBhbmQgaWYgaXQgaXMgZnJlcXVlbnRseSB1c2VkIHRoZSB1c2VyIHNob3VsZAorICAgICAgICogIGNvbnNpZGVyIHVzaW5nIHN0ZDo6bGlzdC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3NpdGlvbiwgX19uLCBfX3gpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW5zZXJ0cyBhIHJhbmdlIGludG8gdGhlICV2ZWN0b3IuCisgICAgICAgKiAgQHBhcmFtICBwb3NpdGlvbiAgQW4gaXRlcmF0b3IgaW50byB0aGUgJXZlY3Rvci4KKyAgICAgICAqICBAcGFyYW0gIGZpcnN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIGxhc3QgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGluc2VydCBjb3BpZXMgb2YgdGhlIGRhdGEgaW4gdGhlIHJhbmdlCisgICAgICAgKiAgW2ZpcnN0LGxhc3QpIGludG8gdGhlICV2ZWN0b3IgYmVmb3JlIHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQKKyAgICAgICAqICBieSBAYSBwb3MuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhhdCB0aGlzIGtpbmQgb2Ygb3BlcmF0aW9uIGNvdWxkIGJlIGV4cGVuc2l2ZSBmb3IgYQorICAgICAgICogICV2ZWN0b3IgYW5kIGlmIGl0IGlzIGZyZXF1ZW50bHkgdXNlZCB0aGUgdXNlciBzaG91bGQKKyAgICAgICAqICBjb25zaWRlciB1c2luZyBzdGQ6Omxpc3QuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAorCSAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICAgIHsKKwkgIC8vIENoZWNrIHdoZXRoZXIgaXQncyBhbiBpbnRlZ3JhbCB0eXBlLiAgSWYgc28sIGl0J3Mgbm90IGFuIGl0ZXJhdG9yLgorCSAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Ol9faXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9fdHlwZSBfSW50ZWdyYWw7CisJICBfTV9pbnNlcnRfZGlzcGF0Y2goX19wb3NpdGlvbiwgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CisJfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZSBlbGVtZW50IGF0IGdpdmVuIHBvc2l0aW9uLgorICAgICAgICogIEBwYXJhbSAgcG9zaXRpb24gIEl0ZXJhdG9yIHBvaW50aW5nIHRvIGVsZW1lbnQgdG8gYmUgZXJhc2VkLgorICAgICAgICogIEByZXR1cm4gIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBuZXh0IGVsZW1lbnQgKG9yIGVuZCgpKS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGVyYXNlIHRoZSBlbGVtZW50IGF0IHRoZSBnaXZlbiBwb3NpdGlvbiBhbmQgdGh1cworICAgICAgICogIHNob3J0ZW4gdGhlICV2ZWN0b3IgYnkgb25lLgorICAgICAgICoKKyAgICAgICAqICBOb3RlIFRoaXMgb3BlcmF0aW9uIGNvdWxkIGJlIGV4cGVuc2l2ZSBhbmQgaWYgaXQgaXMKKyAgICAgICAqICBmcmVxdWVudGx5IHVzZWQgdGhlIHVzZXIgc2hvdWxkIGNvbnNpZGVyIHVzaW5nIHN0ZDo6bGlzdC4KKyAgICAgICAqICBUaGUgdXNlciBpcyBhbHNvIGNhdXRpb25lZCB0aGF0IHRoaXMgZnVuY3Rpb24gb25seSBlcmFzZXMKKyAgICAgICAqICB0aGUgZWxlbWVudCwgYW5kIHRoYXQgaWYgdGhlIGVsZW1lbnQgaXMgaXRzZWxmIGEgcG9pbnRlciwKKyAgICAgICAqICB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQgaW4gYW55IHdheS4gIE1hbmFnaW5nCisgICAgICAgKiAgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZSBhIHJhbmdlIG9mIGVsZW1lbnRzLgorICAgICAgICogIEBwYXJhbSAgZmlyc3QgIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50IHRvIGJlIGVyYXNlZC4KKyAgICAgICAqICBAcGFyYW0gIGxhc3QgIEl0ZXJhdG9yIHBvaW50aW5nIHRvIG9uZSBwYXN0IHRoZSBsYXN0IGVsZW1lbnQgdG8gYmUKKyAgICAgICAqICAgICAgICAgICAgICAgIGVyYXNlZC4KKyAgICAgICAqICBAcmV0dXJuICBBbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZWxlbWVudCBwb2ludGVkIHRvIGJ5IEBhIGxhc3QKKyAgICAgICAqICAgICAgICAgICBwcmlvciB0byBlcmFzaW5nIChvciBlbmQoKSkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBlcmFzZSB0aGUgZWxlbWVudHMgaW4gdGhlIHJhbmdlIFtmaXJzdCxsYXN0KSBhbmQKKyAgICAgICAqICBzaG9ydGVuIHRoZSAldmVjdG9yIGFjY29yZGluZ2x5LgorICAgICAgICoKKyAgICAgICAqICBOb3RlIFRoaXMgb3BlcmF0aW9uIGNvdWxkIGJlIGV4cGVuc2l2ZSBhbmQgaWYgaXQgaXMKKyAgICAgICAqICBmcmVxdWVudGx5IHVzZWQgdGhlIHVzZXIgc2hvdWxkIGNvbnNpZGVyIHVzaW5nIHN0ZDo6bGlzdC4KKyAgICAgICAqICBUaGUgdXNlciBpcyBhbHNvIGNhdXRpb25lZCB0aGF0IHRoaXMgZnVuY3Rpb24gb25seSBlcmFzZXMKKyAgICAgICAqICB0aGUgZWxlbWVudHMsIGFuZCB0aGF0IGlmIHRoZSBlbGVtZW50cyB0aGVtc2VsdmVzIGFyZQorICAgICAgICogIHBvaW50ZXJzLCB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQgaW4gYW55IHdheS4KKyAgICAgICAqICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTd2FwcyBkYXRhIHdpdGggYW5vdGhlciAldmVjdG9yLgorICAgICAgICogIEBwYXJhbSAgeCAgQSAldmVjdG9yIG9mIHRoZSBzYW1lIGVsZW1lbnQgYW5kIGFsbG9jYXRvciB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBleGNoYW5nZXMgdGhlIGVsZW1lbnRzIGJldHdlZW4gdHdvIHZlY3RvcnMgaW4gY29uc3RhbnQgdGltZS4KKyAgICAgICAqICAoVGhyZWUgcG9pbnRlcnMsIHNvIGl0IHNob3VsZCBiZSBxdWl0ZSBmYXN0LikKKyAgICAgICAqICBOb3RlIHRoYXQgdGhlIGdsb2JhbCBzdGQ6OnN3YXAoKSBmdW5jdGlvbiBpcyBzcGVjaWFsaXplZCBzdWNoIHRoYXQKKyAgICAgICAqICBzdGQ6OnN3YXAodjEsdjIpIHdpbGwgZmVlZCB0byB0aGlzIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBzd2FwKHZlY3RvciYgX194KQorICAgICAgeworCXN0ZDo6c3dhcCh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LCBfX3guX01faW1wbC5fTV9zdGFydCk7CisJc3RkOjpzd2FwKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLCBfX3guX01faW1wbC5fTV9maW5pc2gpOworCXN0ZDo6c3dhcCh0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlLAorCQkgIF9feC5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlKTsKKworCS8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkvLyA0MzEuIFN3YXBwaW5nIGNvbnRhaW5lcnMgd2l0aCB1bmVxdWFsIGFsbG9jYXRvcnMuCisJc3RkOjpfX2FsbG9jX3N3YXA8X1RwX2FsbG9jX3R5cGU+OjpfU19kb19pdChfTV9nZXRfVHBfYWxsb2NhdG9yKCksCisJCQkJCQkgICAgX194Ll9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEVyYXNlcyBhbGwgdGhlIGVsZW1lbnRzLiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gb25seSBlcmFzZXMgdGhlCisgICAgICAgKiAgZWxlbWVudHMsIGFuZCB0aGF0IGlmIHRoZSBlbGVtZW50cyB0aGVtc2VsdmVzIGFyZSBwb2ludGVycywgdGhlCisgICAgICAgKiAgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQgaW4gYW55IHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzCisgICAgICAgKiAgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgY2xlYXIoKQorICAgICAgeyBfTV9lcmFzZV9hdF9lbmQodGhpcy0+X01faW1wbC5fTV9zdGFydCk7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIC8qKgorICAgICAgICogIE1lbW9yeSBleHBhbnNpb24gaGFuZGxlci4gIFVzZXMgdGhlIG1lbWJlciBhbGxvY2F0aW9uIGZ1bmN0aW9uIHRvCisgICAgICAgKiAgb2J0YWluIEBhIG4gYnl0ZXMgb2YgbWVtb3J5LCBhbmQgdGhlbiBjb3BpZXMgW2ZpcnN0LGxhc3QpIGludG8gaXQuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgICAgIHBvaW50ZXIKKyAgICAgICAgX01fYWxsb2NhdGVfYW5kX2NvcHkoc2l6ZV90eXBlIF9fbiwKKwkJCSAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeworCSAgcG9pbnRlciBfX3Jlc3VsdCA9IHRoaXMtPl9NX2FsbG9jYXRlKF9fbik7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfY29weV9hKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCisJCQkJCSAgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwkgICAgICByZXR1cm4gX19yZXN1bHQ7CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7CisJICAgICAgX01fZGVhbGxvY2F0ZShfX3Jlc3VsdCwgX19uKTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCX0KKworCisgICAgICAvLyBJbnRlcm5hbCBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgZm9sbG93LgorCisgICAgICAvLyBDYWxsZWQgYnkgdGhlIHJhbmdlIGNvbnN0cnVjdG9yIHRvIGltcGxlbWVudCBbMjMuMS4xXS85CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDQzOC4gQW1iaWd1aXR5IGluIHRoZSAiZG8gdGhlIHJpZ2h0IHRoaW5nIiBjbGF1c2UKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlZ2VyPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbHVlLCBfX3RydWVfdHlwZSkKKyAgICAgICAgeworCSAgdGhpcy0+X01faW1wbC5fTV9zdGFydCA9IF9NX2FsbG9jYXRlKHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19uKSk7CisJICB0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlID0KKwkgICAgdGhpcy0+X01faW1wbC5fTV9zdGFydCArIHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19uKTsKKwkgIF9NX2ZpbGxfaW5pdGlhbGl6ZShzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fbiksIF9fdmFsdWUpOworCX0KKworICAgICAgLy8gQ2FsbGVkIGJ5IHRoZSByYW5nZSBjb25zdHJ1Y3RvciB0byBpbXBsZW1lbnQgWzIzLjEuMV0vOQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCQkgICAgICAgX19mYWxzZV90eXBlKQorICAgICAgICB7CisJICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6CisJICAgIGl0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyQ2F0ZWdvcnk7CisJICBfTV9yYW5nZV9pbml0aWFsaXplKF9fZmlyc3QsIF9fbGFzdCwgX0l0ZXJDYXRlZ29yeSgpKTsKKwl9CisKKyAgICAgIC8vIENhbGxlZCBieSB0aGUgc2Vjb25kIGluaXRpYWxpemVfZGlzcGF0Y2ggYWJvdmUKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwKKwkJCSAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnKQorICAgICAgICB7CisJICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwkgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsKKwl9CisKKyAgICAgIC8vIENhbGxlZCBieSB0aGUgc2Vjb25kIGluaXRpYWxpemVfZGlzcGF0Y2ggYWJvdmUKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01fcmFuZ2VfaW5pdGlhbGl6ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCisJCQkgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcpCisgICAgICAgIHsKKwkgIGNvbnN0IHNpemVfdHlwZSBfX24gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CisJICB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0ID0gdGhpcy0+X01fYWxsb2NhdGUoX19uKTsKKwkgIHRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UgPSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0ICsgX19uOworCSAgdGhpcy0+X01faW1wbC5fTV9maW5pc2ggPQorCSAgICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9jb3B5X2EoX19maXJzdCwgX19sYXN0LAorCQkJCQl0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LAorCQkJCQlfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCX0KKworICAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBmaXJzdCBpbml0aWFsaXplX2Rpc3BhdGNoIGFib3ZlIGFuZCBieSB0aGUKKyAgICAgIC8vIHZlY3RvcihuLHZhbHVlLGEpIGNvbnN0cnVjdG9yLgorICAgICAgdm9pZAorICAgICAgX01fZmlsbF9pbml0aWFsaXplKHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsdWUpCisgICAgICB7CisJc3RkOjpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2EodGhpcy0+X01faW1wbC5fTV9zdGFydCwgX19uLCBfX3ZhbHVlLCAKKwkJCQkgICAgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCXRoaXMtPl9NX2ltcGwuX01fZmluaXNoID0gdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZTsKKyAgICAgIH0KKworCisgICAgICAvLyBJbnRlcm5hbCBhc3NpZ24gZnVuY3Rpb25zIGZvbGxvdy4gIFRoZSAqX2F1eCBmdW5jdGlvbnMgZG8gdGhlIGFjdHVhbAorICAgICAgLy8gYXNzaWdubWVudCB3b3JrIGZvciB0aGUgcmFuZ2UgdmVyc2lvbnMuCisKKyAgICAgIC8vIENhbGxlZCBieSB0aGUgcmFuZ2UgYXNzaWduIHRvIGltcGxlbWVudCBbMjMuMS4xXS85CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDQzOC4gQW1iaWd1aXR5IGluIHRoZSAiZG8gdGhlIHJpZ2h0IHRoaW5nIiBjbGF1c2UKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlZ2VyPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKKyAgICAgICAgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9fdmFsKTsgfQorCisgICAgICAvLyBDYWxsZWQgYnkgdGhlIHJhbmdlIGFzc2lnbiB0byBpbXBsZW1lbnQgWzIzLjEuMV0vOQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJCSAgIF9fZmFsc2VfdHlwZSkKKyAgICAgICAgeworCSAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OgorCSAgICBpdGVyYXRvcl9jYXRlZ29yeSBfSXRlckNhdGVnb3J5OworCSAgX01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9JdGVyQ2F0ZWdvcnkoKSk7CisJfQorCisgICAgICAvLyBDYWxsZWQgYnkgdGhlIHNlY29uZCBhc3NpZ25fZGlzcGF0Y2ggYWJvdmUKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkgICAgICBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZyk7CisKKyAgICAgIC8vIENhbGxlZCBieSB0aGUgc2Vjb25kIGFzc2lnbl9kaXNwYXRjaCBhYm92ZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJCSAgICAgIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcpOworCisgICAgICAvLyBDYWxsZWQgYnkgYXNzaWduKG4sdCksIGFuZCB0aGUgcmFuZ2UgYXNzaWduIHdoZW4gaXQgdHVybnMgb3V0CisgICAgICAvLyB0byBiZSB0aGUgc2FtZSB0aGluZy4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2ZpbGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKTsKKworCisgICAgICAvLyBJbnRlcm5hbCBpbnNlcnQgZnVuY3Rpb25zIGZvbGxvdy4KKworICAgICAgLy8gQ2FsbGVkIGJ5IHRoZSByYW5nZSBpbnNlcnQgdG8gaW1wbGVtZW50IFsyMy4xLjFdLzkKKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNDM4LiBBbWJpZ3VpdHkgaW4gdGhlICJkbyB0aGUgcmlnaHQgdGhpbmciIGNsYXVzZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVnZXI+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLAorCQkJICAgX190cnVlX3R5cGUpCisgICAgICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX192YWwpOyB9CisKKyAgICAgIC8vIENhbGxlZCBieSB0aGUgcmFuZ2UgaW5zZXJ0IHRvIGltcGxlbWVudCBbMjMuMS4xXS85CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCisJCQkgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKKyAgICAgICAgeworCSAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OgorCSAgICBpdGVyYXRvcl9jYXRlZ29yeSBfSXRlckNhdGVnb3J5OworCSAgX01fcmFuZ2VfaW5zZXJ0KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JdGVyQ2F0ZWdvcnkoKSk7CisJfQorCisgICAgICAvLyBDYWxsZWQgYnkgdGhlIHNlY29uZCBpbnNlcnRfZGlzcGF0Y2ggYWJvdmUKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19maXJzdCwKKwkJCV9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgc3RkOjppbnB1dF9pdGVyYXRvcl90YWcpOworCisgICAgICAvLyBDYWxsZWQgYnkgdGhlIHNlY29uZCBpbnNlcnRfZGlzcGF0Y2ggYWJvdmUKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCisJCQlfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CisKKyAgICAgIC8vIENhbGxlZCBieSBpbnNlcnQocCxuLHgpLCBhbmQgdGhlIHJhbmdlIGluc2VydCB3aGVuIGl0IHR1cm5zIG91dCB0byBiZQorICAgICAgLy8gdGhlIHNhbWUgdGhpbmcuCisgICAgICB2b2lkCisgICAgICBfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKKworICAgICAgLy8gQ2FsbGVkIGJ5IGluc2VydChwLHgpCisjaWZuZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICB2b2lkCisgICAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CisjZWxzZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBfQXJncyYmLi4uIF9fYXJncyk7CisjZW5kaWYKKworICAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBsYXR0ZXIuCisgICAgICBzaXplX3R5cGUKKyAgICAgIF9NX2NoZWNrX2xlbihzaXplX3R5cGUgX19uLCBjb25zdCBjaGFyKiBfX3MpIGNvbnN0CisgICAgICB7CisJaWYgKG1heF9zaXplKCkgLSBzaXplKCkgPCBfX24pCisJICBfX3Rocm93X2xlbmd0aF9lcnJvcihfX04oX19zKSk7CisKKwljb25zdCBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBzdGQ6Om1heChzaXplKCksIF9fbik7CisJcmV0dXJuIChfX2xlbiA8IHNpemUoKSB8fCBfX2xlbiA+IG1heF9zaXplKCkpID8gbWF4X3NpemUoKSA6IF9fbGVuOworICAgICAgfQorCisgICAgICAvLyBJbnRlcm5hbCBlcmFzZSBmdW5jdGlvbnMgZm9sbG93LgorCisgICAgICAvLyBDYWxsZWQgYnkgZXJhc2UocTEscTIpLCBjbGVhcigpLCByZXNpemUoKSwgX01fZmlsbF9hc3NpZ24sCisgICAgICAvLyBfTV9hc3NpZ25fYXV4LgorICAgICAgdm9pZAorICAgICAgX01fZXJhc2VfYXRfZW5kKHBvaW50ZXIgX19wb3MpCisgICAgICB7CisJc3RkOjpfRGVzdHJveShfX3BvcywgdGhpcy0+X01faW1wbC5fTV9maW5pc2gsIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJdGhpcy0+X01faW1wbC5fTV9maW5pc2ggPSBfX3BvczsKKyAgICAgIH0KKyAgICB9OworCisKKyAgLyoqCisgICAqICBAYnJpZWYgIFZlY3RvciBlcXVhbGl0eSBjb21wYXJpc29uLgorICAgKiAgQHBhcmFtICB4ICBBICV2ZWN0b3IuCisgICAqICBAcGFyYW0gIHkgIEEgJXZlY3RvciBvZiB0aGUgc2FtZSB0eXBlIGFzIEBhIHguCisgICAqICBAcmV0dXJuICBUcnVlIGlmZiB0aGUgc2l6ZSBhbmQgZWxlbWVudHMgb2YgdGhlIHZlY3RvcnMgYXJlIGVxdWFsLgorICAgKgorICAgKiAgVGhpcyBpcyBhbiBlcXVpdmFsZW5jZSByZWxhdGlvbi4gIEl0IGlzIGxpbmVhciBpbiB0aGUgc2l6ZSBvZiB0aGUKKyAgICogIHZlY3RvcnMuICBWZWN0b3JzIGFyZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQgaWYgdGhlaXIgc2l6ZXMgYXJlIGVxdWFsLAorICAgKiAgYW5kIGlmIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgY29tcGFyZSBlcXVhbC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuIChfX3guc2l6ZSgpID09IF9feS5zaXplKCkKKwkgICAgICAmJiBzdGQ6OmVxdWFsKF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9feS5iZWdpbigpKSk7IH0KKworICAvKioKKyAgICogIEBicmllZiAgVmVjdG9yIG9yZGVyaW5nIHJlbGF0aW9uLgorICAgKiAgQHBhcmFtICB4ICBBICV2ZWN0b3IuCisgICAqICBAcGFyYW0gIHkgIEEgJXZlY3RvciBvZiB0aGUgc2FtZSB0eXBlIGFzIEBhIHguCisgICAqICBAcmV0dXJuICBUcnVlIGlmZiBAYSB4IGlzIGxleGljb2dyYXBoaWNhbGx5IGxlc3MgdGhhbiBAYSB5LgorICAgKgorICAgKiAgVGhpcyBpcyBhIHRvdGFsIG9yZGVyaW5nIHJlbGF0aW9uLiAgSXQgaXMgbGluZWFyIGluIHRoZSBzaXplIG9mIHRoZQorICAgKiAgdmVjdG9ycy4gIFRoZSBlbGVtZW50cyBtdXN0IGJlIGNvbXBhcmFibGUgd2l0aCBAYyA8LgorICAgKgorICAgKiAgU2VlIHN0ZDo6bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKSBmb3IgaG93IHRoZSBkZXRlcm1pbmF0aW9uIGlzIG1hZGUuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuIHN0ZDo6bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwKKwkJCQkJICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsgfQorCisgIC8vLyBCYXNlZCBvbiBvcGVyYXRvcj09CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CisKKyAgLy8vIEJhc2VkIG9uIG9wZXJhdG9yPAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I8CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I8CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KKworICAvLy8gU2VlIHN0ZDo6dmVjdG9yOjpzd2FwKCkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworX0dMSUJDWFhfRU5EX05FU1RFRF9OQU1FU1BBQ0UKKworI2VuZGlmIC8qIF9TVExfVkVDVE9SX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdHJlYW1faXRlcmF0b3IuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdHJlYW1faXRlcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGYxYjU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0cmVhbV9pdGVyYXRvci5oCkBAIC0wLDAgKzEsMjE4IEBACisvLyBTdHJlYW0gaXRlcmF0b3JzCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwNCwgMjAwNSwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgc3RyZWFtX2l0ZXJhdG9yLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfU1RSRUFNX0lURVJBVE9SX0gKKyNkZWZpbmUgX1NUUkVBTV9JVEVSQVRPUl9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgaXRlcmF0b3JzCisgICAqIEB7CisgICAqLworCisgIC8vLyBQcm92aWRlcyBpbnB1dCBpdGVyYXRvciBzZW1hbnRpY3MgZm9yIHN0cmVhbXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NoYXJUID0gY2hhciwKKyAgICAgICAgICAgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sIHR5cGVuYW1lIF9EaXN0ID0gcHRyZGlmZl90PgorICAgIGNsYXNzIGlzdHJlYW1faXRlcmF0b3IKKyAgICA6IHB1YmxpYyBpdGVyYXRvcjxpbnB1dF9pdGVyYXRvcl90YWcsIF9UcCwgX0Rpc3QsIGNvbnN0IF9UcCosIGNvbnN0IF9UcCY+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0NoYXJUICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RyYWl0cyAgICAgICAgICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gaXN0cmVhbV90eXBlOworCisgICAgcHJpdmF0ZToKKyAgICAgIGlzdHJlYW1fdHlwZSoJX01fc3RyZWFtOworICAgICAgX1RwCQlfTV92YWx1ZTsKKyAgICAgIGJvb2wJCV9NX29rOworCisgICAgcHVibGljOgorICAgICAgLy8vICBDb25zdHJ1Y3QgZW5kIG9mIGlucHV0IHN0cmVhbSBpdGVyYXRvci4KKyAgICAgIGlzdHJlYW1faXRlcmF0b3IoKQorICAgICAgOiBfTV9zdHJlYW0oMCksIF9NX3ZhbHVlKCksIF9NX29rKGZhbHNlKSB7fQorCisgICAgICAvLy8gIENvbnN0cnVjdCBzdGFydCBvZiBpbnB1dCBzdHJlYW0gaXRlcmF0b3IuCisgICAgICBpc3RyZWFtX2l0ZXJhdG9yKGlzdHJlYW1fdHlwZSYgX19zKQorICAgICAgOiBfTV9zdHJlYW0oJl9fcykKKyAgICAgIHsgX01fcmVhZCgpOyB9CisKKyAgICAgIGlzdHJlYW1faXRlcmF0b3IoY29uc3QgaXN0cmVhbV9pdGVyYXRvciYgX19vYmopCisgICAgICA6IF9NX3N0cmVhbShfX29iai5fTV9zdHJlYW0pLCBfTV92YWx1ZShfX29iai5fTV92YWx1ZSksCisgICAgICAgIF9NX29rKF9fb2JqLl9NX29rKQorICAgICAgeyB9CisKKyAgICAgIGNvbnN0IF9UcCYKKyAgICAgIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX2NvbmQoX01fb2ssCisJCQkJX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfZGVyZWZfaXN0cmVhbSkKKwkJCQkuX01faXRlcmF0b3IoKnRoaXMpKTsKKwlyZXR1cm4gX01fdmFsdWU7CisgICAgICB9CisKKyAgICAgIGNvbnN0IF9UcCoKKyAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQorCisgICAgICBpc3RyZWFtX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX2NvbmQoX01fb2ssCisJCQkJX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfaW5jX2lzdHJlYW0pCisJCQkJLl9NX2l0ZXJhdG9yKCp0aGlzKSk7CisJX01fcmVhZCgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgaXN0cmVhbV9pdGVyYXRvcgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX2NvbmQoX01fb2ssCisJCQkJX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfaW5jX2lzdHJlYW0pCisJCQkJLl9NX2l0ZXJhdG9yKCp0aGlzKSk7CisJaXN0cmVhbV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOworCV9NX3JlYWQoKTsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisKKyAgICAgIGJvb2wKKyAgICAgIF9NX2VxdWFsKGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIChfTV9vayA9PSBfX3guX01fb2spICYmICghX01fb2sgfHwgX01fc3RyZWFtID09IF9feC5fTV9zdHJlYW0pOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgdm9pZAorICAgICAgX01fcmVhZCgpCisgICAgICB7CisJX01fb2sgPSAoX01fc3RyZWFtICYmICpfTV9zdHJlYW0pID8gdHJ1ZSA6IGZhbHNlOworCWlmIChfTV9vaykKKwkgIHsKKwkgICAgKl9NX3N0cmVhbSA+PiBfTV92YWx1ZTsKKwkgICAgX01fb2sgPSAqX01fc3RyZWFtID8gdHJ1ZSA6IGZhbHNlOworCSAgfQorICAgICAgfQorICAgIH07CisKKyAgLy8vICBSZXR1cm4gdHJ1ZSBpZiB4IGFuZCB5IGFyZSBib3RoIGVuZCBvciBub3QgZW5kLCBvciB4IGFuZCB5IGFyZSB0aGUgc2FtZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9EaXN0PgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBfVHJhaXRzLCBfRGlzdD4mIF9feCwKKwkgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX2VxdWFsKF9feSk7IH0KKworICAvLy8gIFJldHVybiBmYWxzZSBpZiB4IGFuZCB5IGFyZSBib3RoIGVuZCBvciBub3QgZW5kLCBvciB4IGFuZCB5IGFyZSB0aGUgc2FtZS4KKyAgdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfRGlzdD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3gsCisJICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX195KQorICAgIHsgcmV0dXJuICFfX3guX01fZXF1YWwoX195KTsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBQcm92aWRlcyBvdXRwdXQgaXRlcmF0b3Igc2VtYW50aWNzIGZvciBzdHJlYW1zLgorICAgKgorICAgKiAgVGhpcyBjbGFzcyBwcm92aWRlcyBhbiBpdGVyYXRvciB0byB3cml0ZSB0byBhbiBvc3RyZWFtLiAgVGhlIHR5cGUgVHAgaXMKKyAgICogIHRoZSBvbmx5IHR5cGUgd3JpdHRlbiBieSB0aGlzIGl0ZXJhdG9yIGFuZCB0aGVyZSBtdXN0IGJlIGFuCisgICAqICBvcGVyYXRvcjw8KFRwKSBkZWZpbmVkLgorICAgKgorICAgKiAgQHBhcmFtICBUcCAgVGhlIHR5cGUgdG8gd3JpdGUgdG8gdGhlIG9zdHJlYW0uCisgICAqICBAcGFyYW0gIENoYXJUICBUaGUgb3N0cmVhbSBjaGFyX3R5cGUuCisgICAqICBAcGFyYW0gIFRyYWl0cyAgVGhlIG9zdHJlYW0gY2hhcl90cmFpdHMuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NoYXJUID0gY2hhciwKKyAgICAgICAgICAgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgorICAgIGNsYXNzIG9zdHJlYW1faXRlcmF0b3IKKyAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvL0B7CisgICAgICAvLy8gUHVibGljIHR5cGVkZWYKKyAgICAgIHR5cGVkZWYgX0NoYXJUICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RyYWl0cyAgICAgICAgICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gb3N0cmVhbV90eXBlOworICAgICAgLy9AfQorCisgICAgcHJpdmF0ZToKKyAgICAgIG9zdHJlYW1fdHlwZSoJX01fc3RyZWFtOworICAgICAgY29uc3QgX0NoYXJUKglfTV9zdHJpbmc7CisKKyAgICBwdWJsaWM6CisgICAgICAvLy8gQ29uc3RydWN0IGZyb20gYW4gb3N0cmVhbS4KKyAgICAgIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3MpIDogX01fc3RyZWFtKCZfX3MpLCBfTV9zdHJpbmcoMCkge30KKworICAgICAgLyoqCisgICAgICAgKiAgQ29uc3RydWN0IGZyb20gYW4gb3N0cmVhbS4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGRlbGltaXRlciBzdHJpbmcgQGEgYyBpcyB3cml0dGVuIHRvIHRoZSBzdHJlYW0gYWZ0ZXIgZXZlcnkgVHAKKyAgICAgICAqICB3cml0dGVuIHRvIHRoZSBzdHJlYW0uICBUaGUgZGVsaW1pdGVyIGlzIG5vdCBjb3BpZWQsIGFuZCB0aHVzIG11c3QKKyAgICAgICAqICBub3QgYmUgZGVzdHJveWVkIHdoaWxlIHRoaXMgaXRlcmF0b3IgaXMgaW4gdXNlLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIHMgIFVuZGVybHlpbmcgb3N0cmVhbSB0byB3cml0ZSB0by4KKyAgICAgICAqICBAcGFyYW0gIGMgIENoYXJUIGRlbGltaXRlciBzdHJpbmcgdG8gaW5zZXJ0LgorICAgICAgKi8KKyAgICAgIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3MsIGNvbnN0IF9DaGFyVCogX19jKQorICAgICAgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZyhfX2MpICB7IH0KKworICAgICAgLy8vIENvcHkgY29uc3RydWN0b3IuCisgICAgICBvc3RyZWFtX2l0ZXJhdG9yKGNvbnN0IG9zdHJlYW1faXRlcmF0b3ImIF9fb2JqKQorICAgICAgOiBfTV9zdHJlYW0oX19vYmouX01fc3RyZWFtKSwgX01fc3RyaW5nKF9fb2JqLl9NX3N0cmluZykgIHsgfQorCisgICAgICAvLy8gV3JpdGVzIEBhIHZhbHVlIHRvIHVuZGVybHlpbmcgb3N0cmVhbSB1c2luZyBvcGVyYXRvcjw8LiAgSWYKKyAgICAgIC8vLyBjb25zdHJ1Y3RlZCB3aXRoIGRlbGltaXRlciBzdHJpbmcsIHdyaXRlcyBkZWxpbWl0ZXIgdG8gb3N0cmVhbS4KKyAgICAgIG9zdHJlYW1faXRlcmF0b3ImCisgICAgICBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX3ZhbHVlKQorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19jb25kKF9NX3N0cmVhbSAhPSAwLAorCQkJCV9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX291dHB1dF9vc3RyZWFtKQorCQkJCS5fTV9pdGVyYXRvcigqdGhpcykpOworCSpfTV9zdHJlYW0gPDwgX192YWx1ZTsKKwlpZiAoX01fc3RyaW5nKSAqX01fc3RyZWFtIDw8IF9NX3N0cmluZzsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIG9zdHJlYW1faXRlcmF0b3ImCisgICAgICBvcGVyYXRvciooKQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgb3N0cmVhbV9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgb3N0cmVhbV9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKyAgICB9OworCisgIC8vIEB9IGdyb3VwIGl0ZXJhdG9ycworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0cmVhbWJ1Zi50Y2MgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3RyZWFtYnVmLnRjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2U2Y2U3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3N0cmVhbWJ1Zi50Y2MKQEAgLTAsMCArMSwxNzQgQEAKKy8vIFN0cmVhbSBidWZmZXIgY2xhc3NlcyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsCisvLyAyMDA2LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgc3RyZWFtYnVmLnRjYworICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjcuNSAgU3RyZWFtIGJ1ZmZlcnMKKy8vCisKKyNpZm5kZWYgX1NUUkVBTUJVRl9UQ0MKKyNkZWZpbmUgX1NUUkVBTUJVRl9UQ0MgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0cmVhbXNpemUKKyAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CisgICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKKyAgICB7CisgICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKKyAgICAgIHdoaWxlIChfX3JldCA8IF9fbikKKwl7CisJICBjb25zdCBzdHJlYW1zaXplIF9fYnVmX2xlbiA9IHRoaXMtPmVncHRyKCkgLSB0aGlzLT5ncHRyKCk7CisJICBpZiAoX19idWZfbGVuKQorCSAgICB7CisJICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0OworCSAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19sZW4gPSBzdGQ6Om1pbihfX2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsKKwkgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3MsIHRoaXMtPmdwdHIoKSwgX19sZW4pOworCSAgICAgIF9fcmV0ICs9IF9fbGVuOworCSAgICAgIF9fcyArPSBfX2xlbjsKKwkgICAgICB0aGlzLT5nYnVtcChfX2xlbik7CisJICAgIH0KKworCSAgaWYgKF9fcmV0IDwgX19uKQorCSAgICB7CisJICAgICAgY29uc3QgaW50X3R5cGUgX19jID0gdGhpcy0+dWZsb3coKTsKKwkgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRyYWl0c190eXBlOjplb2YoKSkpCisJCXsKKwkJICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3MrKywgdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKTsKKwkJICArK19fcmV0OworCQl9CisJICAgICAgZWxzZQorCQlicmVhazsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiBfX3JldDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0cmVhbXNpemUKKyAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CisgICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKKyAgICB7CisgICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKKyAgICAgIHdoaWxlIChfX3JldCA8IF9fbikKKwl7CisJICBjb25zdCBzdHJlYW1zaXplIF9fYnVmX2xlbiA9IHRoaXMtPmVwcHRyKCkgLSB0aGlzLT5wcHRyKCk7CisJICBpZiAoX19idWZfbGVuKQorCSAgICB7CisJICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0OworCSAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19sZW4gPSBzdGQ6Om1pbihfX2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsKKwkgICAgICB0cmFpdHNfdHlwZTo6Y29weSh0aGlzLT5wcHRyKCksIF9fcywgX19sZW4pOworCSAgICAgIF9fcmV0ICs9IF9fbGVuOworCSAgICAgIF9fcyArPSBfX2xlbjsKKwkgICAgICB0aGlzLT5wYnVtcChfX2xlbik7CisJICAgIH0KKworCSAgaWYgKF9fcmV0IDwgX19uKQorCSAgICB7CisJICAgICAgaW50X3R5cGUgX19jID0gdGhpcy0+b3ZlcmZsb3codHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfX3MpKTsKKwkgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRyYWl0c190eXBlOjplb2YoKSkpCisJCXsKKwkJICArK19fcmV0OworCQkgICsrX19zOworCQl9CisJICAgICAgZWxzZQorCQlicmVhazsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiBfX3JldDsKKyAgICB9CisKKyAgLy8gQ29uY2VpdmFibHksIHRoaXMgY291bGQgYmUgdXNlZCB0byBpbXBsZW1lbnQgYnVmZmVyLXRvLWJ1ZmZlcgorICAvLyBjb3BpZXMsIGlmIHRoaXMgd2FzIGV2ZXIgZGVzaXJlZCBpbiBhbiB1bi1hbWJpZ3VvdXMgd2F5IGJ5IHRoZQorICAvLyBzdGFuZGFyZC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0cmVhbXNpemUKKyAgICBfX2NvcHlfc3RyZWFtYnVmc19lb2YoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKKwkJCSAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JvdXQsCisJCQkgIGJvb2wmIF9faW5lb2YpCisgICAgeworICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CisgICAgICBfX2luZW9mID0gdHJ1ZTsKKyAgICAgIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIF9fYyA9IF9fc2Jpbi0+c2dldGMoKTsKKyAgICAgIHdoaWxlICghX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfVHJhaXRzOjplb2YoKSkpCisJeworCSAgX19jID0gX19zYm91dC0+c3B1dGMoX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYykpOworCSAgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX1RyYWl0czo6ZW9mKCkpKQorCSAgICB7CisJICAgICAgX19pbmVvZiA9IGZhbHNlOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICArK19fcmV0OworCSAgX19jID0gX19zYmluLT5zbmV4dGMoKTsKKwl9CisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBpbmxpbmUgc3RyZWFtc2l6ZQorICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiaW4sCisJCSAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KQorICAgIHsKKyAgICAgIGJvb2wgX19pbmVvZjsKKyAgICAgIHJldHVybiBfX2NvcHlfc3RyZWFtYnVmc19lb2YoX19zYmluLCBfX3Nib3V0LCBfX2luZW9mKTsKKyAgICB9CisKKyAgLy8gSW5oaWJpdCBpbXBsaWNpdCBpbnN0YW50aWF0aW9ucyBmb3IgcmVxdWlyZWQgaW5zdGFudGlhdGlvbnMsCisgIC8vIHdoaWNoIGFyZSBkZWZpbmVkIHZpYSBleHBsaWNpdCBpbnN0YW50aWF0aW9ucyBlbHNld2hlcmUuCisgIC8vIE5COiAgVGhpcyBzeW50YXggaXMgYSBHTlUgZXh0ZW5zaW9uLgorI2lmIF9HTElCQ1hYX0VYVEVSTl9URU1QTEFURQorICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyZWFtYnVmPGNoYXI+OworICBleHRlcm4gdGVtcGxhdGUKKyAgICBzdHJlYW1zaXplCisgICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfc3RyZWFtYnVmPGNoYXI+KiwKKwkJICAgICAgYmFzaWNfc3RyZWFtYnVmPGNoYXI+Kik7CisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIHN0cmVhbXNpemUKKyAgICBfX2NvcHlfc3RyZWFtYnVmc19lb2YoYmFzaWNfc3RyZWFtYnVmPGNoYXI+KiwKKwkJCSAgYmFzaWNfc3RyZWFtYnVmPGNoYXI+KiwgYm9vbCYpOworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PjsKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgc3RyZWFtc2l6ZQorICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiosCisJCSAgICAgIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiopOworICBleHRlcm4gdGVtcGxhdGUKKyAgICBzdHJlYW1zaXplCisgICAgX19jb3B5X3N0cmVhbWJ1ZnNfZW9mKGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiosCisJCQkgIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiosIGJvb2wmKTsKKyNlbmRpZgorI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3RyZWFtYnVmX2l0ZXJhdG9yLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3RyZWFtYnVmX2l0ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFjMzIzMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdHJlYW1idWZfaXRlcmF0b3IuaApAQCAtMCwwICsxLDM5OSBAQAorLy8gU3RyZWFtYnVmIGl0ZXJhdG9ycworCisvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsCisvLyAyMDA2LCAyMDA3LCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgc3RyZWFtYnVmX2l0ZXJhdG9yLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfU1RSRUFNQlVGX0lURVJBVE9SX0gKKyNkZWZpbmUgX1NUUkVBTUJVRl9JVEVSQVRPUl9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8c3RyZWFtYnVmPgorI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisgICAgIAorICAvKioKKyAgICogQGFkZHRvZ3JvdXAgaXRlcmF0b3JzCisgICAqIEB7CisgICAqLworCisgIC8vIDI0LjUuMyBUZW1wbGF0ZSBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yCisgIC8vLyBQcm92aWRlcyBpbnB1dCBpdGVyYXRvciBzZW1hbnRpY3MgZm9yIHN0cmVhbWJ1ZnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yCisgICAgOiBwdWJsaWMgaXRlcmF0b3I8aW5wdXRfaXRlcmF0b3JfdGFnLCBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlLAorCQkgICAgICBfQ2hhclQqLCBfQ2hhclQmPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlczoKKyAgICAgIC8vQHsKKyAgICAgIC8vLyBQdWJsaWMgdHlwZWRlZnMKKyAgICAgIHR5cGVkZWYgX0NoYXJUCQkJCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcmFpdHMJCQkJCXRyYWl0c190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZQkJaW50X3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+CQlzdHJlYW1idWZfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CQlpc3RyZWFtX3R5cGU7CisgICAgICAvL0B9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVDI+CisJZnJpZW5kIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19jaGFyPF9DaGFyVDI+OjpfX3ZhbHVlLAorCQkgICAgICAgICAgICAgICAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUMj4gPjo6X190eXBlCisJY29weShpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVDI+LCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVDI+LAorCSAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQyPik7CisKKyAgICAgIHRlbXBsYXRlPGJvb2wgX0lzTW92ZSwgdHlwZW5hbWUgX0NoYXJUMj4KKwlmcmllbmQgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2NoYXI8X0NoYXJUMj46Ol9fdmFsdWUsIAorCQkJCQkgICAgICAgX0NoYXJUMio+OjpfX3R5cGUKKwlfX2NvcHlfbW92ZV9hMihpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVDI+LAorCQkgICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQyPiwgX0NoYXJUMiopOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQyPgorCWZyaWVuZCB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfY2hhcjxfQ2hhclQyPjo6X192YWx1ZSwKKwkJCSAgICAgICAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUMj4gPjo6X190eXBlCisJZmluZChpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVDI+LCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVDI+LAorCSAgICAgY29uc3QgX0NoYXJUMiYpOworCisgICAgcHJpdmF0ZToKKyAgICAgIC8vIDI0LjUuMyBpc3RyZWFtYnVmX2l0ZXJhdG9yCisgICAgICAvLyBwIDEKKyAgICAgIC8vIElmIHRoZSBlbmQgb2Ygc3RyZWFtIGlzIHJlYWNoZWQgKHN0cmVhbWJ1Zl90eXBlOjpzZ2V0YygpCisgICAgICAvLyByZXR1cm5zIHRyYWl0c190eXBlOjplb2YoKSksIHRoZSBpdGVyYXRvciBiZWNvbWVzIGVxdWFsIHRvCisgICAgICAvLyB0aGUgImVuZCBvZiBzdHJlYW0iIGl0ZXJhdG9yIHZhbHVlLgorICAgICAgLy8gTkI6IFRoaXMgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGUgImVuZCBvZiBzdHJlYW0iIHZhbHVlCisgICAgICAvLyBpcyBFT0YsIG9yIC0xLgorICAgICAgbXV0YWJsZSBzdHJlYW1idWZfdHlwZSoJX01fc2J1ZjsKKyAgICAgIG11dGFibGUgaW50X3R5cGUJCV9NX2M7CisKKyAgICBwdWJsaWM6CisgICAgICAvLy8gIENvbnN0cnVjdCBlbmQgb2YgaW5wdXQgc3RyZWFtIGl0ZXJhdG9yLgorICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcigpIHRocm93KCkKKyAgICAgIDogX01fc2J1ZigwKSwgX01fYyh0cmFpdHNfdHlwZTo6ZW9mKCkpIHsgfQorCisgICAgICAvLy8gIENvbnN0cnVjdCBzdGFydCBvZiBpbnB1dCBzdHJlYW0gaXRlcmF0b3IuCisgICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKGlzdHJlYW1fdHlwZSYgX19zKSB0aHJvdygpCisgICAgICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9jKHRyYWl0c190eXBlOjplb2YoKSkgeyB9CisKKyAgICAgIC8vLyAgQ29uc3RydWN0IHN0YXJ0IG9mIHN0cmVhbWJ1ZiBpdGVyYXRvci4KKyAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykgdGhyb3coKQorICAgICAgOiBfTV9zYnVmKF9fcyksIF9NX2ModHJhaXRzX3R5cGU6OmVvZigpKSB7IH0KKworICAgICAgLy8vICBSZXR1cm4gdGhlIGN1cnJlbnQgY2hhcmFjdGVyIHBvaW50ZWQgdG8gYnkgaXRlcmF0b3IuICBUaGlzIHJldHVybnMKKyAgICAgIC8vLyAgc3RyZWFtYnVmLnNnZXRjKCkuICBJdCBjYW5ub3QgYmUgYXNzaWduZWQuICBOQjogVGhlIHJlc3VsdCBvZgorICAgICAgLy8vICBvcGVyYXRvciooKSBvbiBhbiBlbmQgb2Ygc3RyZWFtIGlzIHVuZGVmaW5lZC4KKyAgICAgIGNoYXJfdHlwZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsKKyNpZmRlZiBfR0xJQkNYWF9ERUJVR19QRURBTlRJQworCS8vIERlcmVmZXJlbmNpbmcgYSBwYXN0LXRoZS1lbmQgaXN0cmVhbWJ1Zl9pdGVyYXRvciBpcyBhCisJLy8gbGlic3RkYysrIGV4dGVuc2lvbgorCV9fZ2xpYmN4eF9yZXF1aXJlc19jb25kKCFfTV9hdF9lb2YoKSwKKwkJCQlfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ19kZXJlZl9pc3RyZWFtYnVmKQorCQkJCS5fTV9pdGVyYXRvcigqdGhpcykpOworI2VuZGlmCisJcmV0dXJuIHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX01fZ2V0KCkpOworICAgICAgfQorCisgICAgICAvLy8gQWR2YW5jZSB0aGUgaXRlcmF0b3IuICBDYWxscyBzdHJlYW1idWYuc2J1bXBjKCkuCisgICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX2NvbmQoIV9NX2F0X2VvZigpLAorCQkJCV9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX2luY19pc3RyZWFtYnVmKQorCQkJCS5fTV9pdGVyYXRvcigqdGhpcykpOworCWlmIChfTV9zYnVmKQorCSAgeworCSAgICBfTV9zYnVmLT5zYnVtcGMoKTsKKwkgICAgX01fYyA9IHRyYWl0c190eXBlOjplb2YoKTsKKwkgIH0KKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8vLyBBZHZhbmNlIHRoZSBpdGVyYXRvci4gIENhbGxzIHN0cmVhbWJ1Zi5zYnVtcGMoKS4KKyAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19jb25kKCFfTV9hdF9lb2YoKSwKKwkJCQlfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ19pbmNfaXN0cmVhbWJ1ZikKKwkJCQkuX01faXRlcmF0b3IoKnRoaXMpKTsKKworCWlzdHJlYW1idWZfaXRlcmF0b3IgX19vbGQgPSAqdGhpczsKKwlpZiAoX01fc2J1ZikKKwkgIHsKKwkgICAgX19vbGQuX01fYyA9IF9NX3NidWYtPnNidW1wYygpOworCSAgICBfTV9jID0gdHJhaXRzX3R5cGU6OmVvZigpOworCSAgfQorCXJldHVybiBfX29sZDsKKyAgICAgIH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMTEwIGlzdHJlYW1idWZfaXRlcmF0b3I6OmVxdWFsIG5vdCBjb25zdAorICAgICAgLy8gTkI6IHRoZXJlIGlzIGFsc28gbnVtYmVyIDExMSAoTkFELCBGdXR1cmUpIHBlbmRpbmcgb24gdGhpcyBmdW5jdGlvbi4KKyAgICAgIC8vLyBSZXR1cm4gdHJ1ZSBib3RoIGl0ZXJhdG9ycyBhcmUgZW5kIG9yIGJvdGggYXJlIG5vdCBlbmQuCisgICAgICBib29sCisgICAgICBlcXVhbChjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yJiBfX2IpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9hdF9lb2YoKSA9PSBfX2IuX01fYXRfZW9mKCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICBpbnRfdHlwZQorICAgICAgX01fZ2V0KCkgY29uc3QKKyAgICAgIHsKKwljb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKKwlpbnRfdHlwZSBfX3JldCA9IF9fZW9mOworCWlmIChfTV9zYnVmKQorCSAgeworCSAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfTV9jLCBfX2VvZikpCisJICAgICAgX19yZXQgPSBfTV9jOworCSAgICBlbHNlIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKChfX3JldCA9IF9NX3NidWYtPnNnZXRjKCkpLAorCQkJCQkgICAgICAgX19lb2YpKQorCSAgICAgIF9NX2MgPSBfX3JldDsKKwkgICAgZWxzZQorCSAgICAgIF9NX3NidWYgPSAwOworCSAgfQorCXJldHVybiBfX3JldDsKKyAgICAgIH0KKworICAgICAgYm9vbAorICAgICAgX01fYXRfZW9mKCkgY29uc3QKKyAgICAgIHsKKwljb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKKwlyZXR1cm4gdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9NX2dldCgpLCBfX2VvZik7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLAorCSAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKKyAgICB7IHJldHVybiBfX2EuZXF1YWwoX19iKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsCisJICAgICAgIGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19iKQorICAgIHsgcmV0dXJuICFfX2EuZXF1YWwoX19iKTsgfQorCisgIC8vLyBQcm92aWRlcyBvdXRwdXQgaXRlcmF0b3Igc2VtYW50aWNzIGZvciBzdHJlYW1idWZzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcgorICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIFR5cGVzOgorICAgICAgLy9AeworICAgICAgLy8vIFB1YmxpYyB0eXBlZGVmcworICAgICAgdHlwZWRlZiBfQ2hhclQgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcmFpdHMgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICAgb3N0cmVhbV90eXBlOworICAgICAgLy9AfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQyPgorCWZyaWVuZCB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfY2hhcjxfQ2hhclQyPjo6X192YWx1ZSwKKwkJICAgICAgICAgICAgICAgICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVDI+ID46Ol9fdHlwZQorCWNvcHkoaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQyPiwgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQyPiwKKwkgICAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUMj4pOworCisgICAgcHJpdmF0ZToKKyAgICAgIHN0cmVhbWJ1Zl90eXBlKglfTV9zYnVmOworICAgICAgYm9vbAkJX01fZmFpbGVkOworCisgICAgcHVibGljOgorICAgICAgLy8vICBDb25zdHJ1Y3Qgb3V0cHV0IGl0ZXJhdG9yIGZyb20gb3N0cmVhbS4KKyAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3MpIHRocm93ICgpCisgICAgICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9mYWlsZWQoIV9NX3NidWYpIHsgfQorCisgICAgICAvLy8gIENvbnN0cnVjdCBvdXRwdXQgaXRlcmF0b3IgZnJvbSBzdHJlYW1idWYuCisgICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKHN0cmVhbWJ1Zl90eXBlKiBfX3MpIHRocm93ICgpCisgICAgICA6IF9NX3NidWYoX19zKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0KKworICAgICAgLy8vICBXcml0ZSBjaGFyYWN0ZXIgdG8gc3RyZWFtYnVmLiAgQ2FsbHMgc3RyZWFtYnVmLnNwdXRjKCkuCisgICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpCisgICAgICB7CisJaWYgKCFfTV9mYWlsZWQgJiYKKwkgICAgX1RyYWl0czo6ZXFfaW50X3R5cGUoX01fc2J1Zi0+c3B1dGMoX19jKSwgX1RyYWl0czo6ZW9mKCkpKQorCSAgX01fZmFpbGVkID0gdHJ1ZTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8vLyBSZXR1cm4gKnRoaXMuCisgICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IqKCkKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIC8vLyBSZXR1cm4gKnRoaXMuCisgICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorCisgICAgICAvLy8gUmV0dXJuICp0aGlzLgorICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgLy8vIFJldHVybiB0cnVlIGlmIHByZXZpb3VzIG9wZXJhdG9yPSgpIGZhaWxlZC4KKyAgICAgIGJvb2wKKyAgICAgIGZhaWxlZCgpIGNvbnN0IHRocm93KCkKKyAgICAgIHsgcmV0dXJuIF9NX2ZhaWxlZDsgfQorCisgICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgorICAgICAgX01fcHV0KGNvbnN0IF9DaGFyVCogX193cywgc3RyZWFtc2l6ZSBfX2xlbikKKyAgICAgIHsKKwlpZiAoX19idWlsdGluX2V4cGVjdCghX01fZmFpbGVkLCB0cnVlKQorCSAgICAmJiBfX2J1aWx0aW5fZXhwZWN0KHRoaXMtPl9NX3NidWYtPnNwdXRuKF9fd3MsIF9fbGVuKSAhPSBfX2xlbiwKKwkJCQlmYWxzZSkpCisJICBfTV9mYWlsZWQgPSB0cnVlOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyAgICB9OworCisgIC8vIE92ZXJsb2FkcyBmb3Igc3RyZWFtYnVmIGl0ZXJhdG9ycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19jaGFyPF9DaGFyVD46Ol9fdmFsdWUsCisgICAgCSAgICAgICAgICAgICAgICAgCSAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPjo6X190eXBlCisgICAgY29weShpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gX19maXJzdCwKKwkgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+IF9fbGFzdCwKKwkgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+IF9fcmVzdWx0KQorICAgIHsKKyAgICAgIGlmIChfX2ZpcnN0Ll9NX3NidWYgJiYgIV9fbGFzdC5fTV9zYnVmICYmICFfX3Jlc3VsdC5fTV9mYWlsZWQpCisJeworCSAgYm9vbCBfX2luZW9mOworCSAgX19jb3B5X3N0cmVhbWJ1ZnNfZW9mKF9fZmlyc3QuX01fc2J1ZiwgX19yZXN1bHQuX01fc2J1ZiwgX19pbmVvZik7CisJICBpZiAoIV9faW5lb2YpCisJICAgIF9fcmVzdWx0Ll9NX2ZhaWxlZCA9IHRydWU7CisJfQorICAgICAgcmV0dXJuIF9fcmVzdWx0OworICAgIH0KKworICB0ZW1wbGF0ZTxib29sIF9Jc01vdmUsIHR5cGVuYW1lIF9DaGFyVD4KKyAgICB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfY2hhcjxfQ2hhclQ+OjpfX3ZhbHVlLCAKKyAgICAJCQkJICAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+OjpfX3R5cGUKKyAgICBfX2NvcHlfbW92ZV9hMihfQ2hhclQqIF9fZmlyc3QsIF9DaGFyVCogX19sYXN0LAorCQkgICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gX19yZXN1bHQpCisgICAgeworICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX251bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CisgICAgICBpZiAoX19udW0gPiAwKQorCV9fcmVzdWx0Ll9NX3B1dChfX2ZpcnN0LCBfX251bSk7CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIHRlbXBsYXRlPGJvb2wgX0lzTW92ZSwgdHlwZW5hbWUgX0NoYXJUPgorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19jaGFyPF9DaGFyVD46Ol9fdmFsdWUsCisJCQkJICAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+OjpfX3R5cGUKKyAgICBfX2NvcHlfbW92ZV9hMihjb25zdCBfQ2hhclQqIF9fZmlyc3QsIGNvbnN0IF9DaGFyVCogX19sYXN0LAorCQkgICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gX19yZXN1bHQpCisgICAgeworICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX251bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CisgICAgICBpZiAoX19udW0gPiAwKQorCV9fcmVzdWx0Ll9NX3B1dChfX2ZpcnN0LCBfX251bSk7CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIHRlbXBsYXRlPGJvb2wgX0lzTW92ZSwgdHlwZW5hbWUgX0NoYXJUPgorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19jaGFyPF9DaGFyVD46Ol9fdmFsdWUsIAorICAgIAkJCQkgICAgX0NoYXJUKj46Ol9fdHlwZQorICAgIF9fY29weV9tb3ZlX2EyKGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiBfX2ZpcnN0LAorCQkgICBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gX19sYXN0LCBfQ2hhclQqIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ICAgICAgICAgICAgICAgICAgX19pc19pdGVyYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzX2l0ZXJhdG9yX3R5cGU6OnRyYWl0c190eXBlICAgICB0cmFpdHNfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc19pdGVyYXRvcl90eXBlOjpzdHJlYW1idWZfdHlwZSAgc3RyZWFtYnVmX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSAgICAgICAgICAgICAgIGludF90eXBlOworCisgICAgICBpZiAoX19maXJzdC5fTV9zYnVmICYmICFfX2xhc3QuX01fc2J1ZikKKwl7CisJICBzdHJlYW1idWZfdHlwZSogX19zYiA9IF9fZmlyc3QuX01fc2J1ZjsKKwkgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CisJICB3aGlsZSAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRyYWl0c190eXBlOjplb2YoKSkpCisJICAgIHsKKwkgICAgICBjb25zdCBzdHJlYW1zaXplIF9fbiA9IF9fc2ItPmVncHRyKCkgLSBfX3NiLT5ncHRyKCk7CisJICAgICAgaWYgKF9fbiA+IDEpCisJCXsKKwkJICB0cmFpdHNfdHlwZTo6Y29weShfX3Jlc3VsdCwgX19zYi0+Z3B0cigpLCBfX24pOworCQkgIF9fc2ItPmdidW1wKF9fbik7CisJCSAgX19yZXN1bHQgKz0gX19uOworCQkgIF9fYyA9IF9fc2ItPnVuZGVyZmxvdygpOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgKl9fcmVzdWx0KysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CisJCSAgX19jID0gX19zYi0+c25leHRjKCk7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19jaGFyPF9DaGFyVD46Ol9fdmFsdWUsCisJCSAgCQkgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID46Ol9fdHlwZQorICAgIGZpbmQoaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+IF9fZmlyc3QsCisJIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiBfX2xhc3QsIGNvbnN0IF9DaGFyVCYgX192YWwpCisgICAgeworICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gICAgICAgICAgICAgICAgICBfX2lzX2l0ZXJhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXNfaXRlcmF0b3JfdHlwZTo6dHJhaXRzX3R5cGUgICAgIHRyYWl0c190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzX2l0ZXJhdG9yX3R5cGU6OnN0cmVhbWJ1Zl90eXBlICBzdHJlYW1idWZfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlICAgICAgICAgICAgICAgaW50X3R5cGU7CisKKyAgICAgIGlmIChfX2ZpcnN0Ll9NX3NidWYgJiYgIV9fbGFzdC5fTV9zYnVmKQorCXsKKwkgIGNvbnN0IGludF90eXBlIF9faXZhbCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX3ZhbCk7CisJICBzdHJlYW1idWZfdHlwZSogX19zYiA9IF9fZmlyc3QuX01fc2J1ZjsKKwkgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CisJICB3aGlsZSAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRyYWl0c190eXBlOjplb2YoKSkKKwkJICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2l2YWwpKQorCSAgICB7CisJICAgICAgc3RyZWFtc2l6ZSBfX24gPSBfX3NiLT5lZ3B0cigpIC0gX19zYi0+Z3B0cigpOworCSAgICAgIGlmIChfX24gPiAxKQorCQl7CisJCSAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX3NiLT5ncHRyKCksCisJCQkJCQkJX19uLCBfX3ZhbCk7CisJCSAgaWYgKF9fcCkKKwkJICAgIF9fbiA9IF9fcCAtIF9fc2ItPmdwdHIoKTsKKwkJICBfX3NiLT5nYnVtcChfX24pOworCQkgIF9fYyA9IF9fc2ItPnNnZXRjKCk7CisJCX0KKwkgICAgICBlbHNlCisJCV9fYyA9IF9fc2ItPnNuZXh0YygpOworCSAgICB9CisKKwkgIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgdHJhaXRzX3R5cGU6OmVvZigpKSkKKwkgICAgX19maXJzdC5fTV9jID0gX19jOworCSAgZWxzZQorCSAgICBfX2ZpcnN0Ll9NX3NidWYgPSAwOworCX0KKyAgICAgIHJldHVybiBfX2ZpcnN0OworICAgIH0KKworLy8gQH0gZ3JvdXAgaXRlcmF0b3JzCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3RyaW5nZndkLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvc3RyaW5nZndkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY3OWJlNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy9zdHJpbmdmd2QuaApAQCAtMCwwICsxLDg1IEBACisvLyBTdHJpbmcgc3VwcG9ydCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksCisvLyAyMDEwCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgc3RyaW5nZndkLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDIxIFN0cmluZ3MgbGlicmFyeQorLy8KKworI2lmbmRlZiBfU1RSSU5HRldEX0gKKyNkZWZpbmUgX1NUUklOR0ZXRF9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgY2xhc3MgYWxsb2NhdG9yOworCisgIC8qKgorICAgKiAgQGRlZmdyb3VwIHN0cmluZ3MgU3RyaW5ncworICAgKgorICAgKiAgQHsKKyAgKi8KKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CisgICAgc3RydWN0IGNoYXJfdHJhaXRzOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCisgICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KKyAgICBjbGFzcyBiYXNpY19zdHJpbmc7CisKKyAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj47CisKKyAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcj4gICAgc3RyaW5nOyAgIC8vLzwgQSBzdHJpbmcgb2YgQGMgY2hhcgorCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJfdD47CisKKyAgdHlwZWRlZiBiYXNpY19zdHJpbmc8d2NoYXJfdD4gd3N0cmluZzsgICAvLy88IEEgc3RyaW5nIG9mIEBjIHdjaGFyX3QKKyNlbmRpZgorCisjaWYgKGRlZmluZWQoX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18pIFwKKyAgICAgJiYgZGVmaW5lZChfR0xJQkNYWF9VU0VfQzk5X1NURElOVF9UUjEpKQorCisgIHRlbXBsYXRlPD4gc3RydWN0IGNoYXJfdHJhaXRzPGNoYXIxNl90PjsKKyAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcjMyX3Q+OworCisgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXIxNl90PiB1MTZzdHJpbmc7IC8vLzwgQSBzdHJpbmcgb2YgQGMgY2hhcjE2X3QKKyAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcjMyX3Q+IHUzMnN0cmluZzsgLy8vPCBBIHN0cmluZyBvZiBAYyBjaGFyMzJfdAorCisjZW5kaWYKKyAgLyoqIEB9ICAqLworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZgkvLyBfU1RSSU5HRldEX0gKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy91bmlxdWVfcHRyLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvdW5pcXVlX3B0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYTMwNDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvdW5pcXVlX3B0ci5oCkBAIC0wLDAgKzEsNDIwIEBACisvLyB1bmlxdWVfcHRyIGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdW5pcXVlX3B0ci5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKyNpZm5kZWYgX1VOSVFVRV9QVFJfSAorI2RlZmluZSBfVU5JUVVFX1BUUl9IIDEKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHR1cGxlPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8qKgorICAgKiBAYWRkdG9ncm91cCBwb2ludGVyX2Fic3RyYWN0aW9ucworICAgKiBAeworICAgKi8KKworICAvLy8gUHJpbWFyeSB0ZW1wbGF0ZSwgZGVmYXVsdF9kZWxldGUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gCisgICAgc3RydWN0IGRlZmF1bHRfZGVsZXRlCisgICAgICB7CisJZGVmYXVsdF9kZWxldGUoKSB7IH0KKworCXRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKwkgIGRlZmF1bHRfZGVsZXRlKGNvbnN0IGRlZmF1bHRfZGVsZXRlPF9VcD4mKSB7IH0KKworCXZvaWQKKwlvcGVyYXRvcigpKF9UcCogX19wdHIpIGNvbnN0CisJeworCSAgc3RhdGljX2Fzc2VydChzaXplb2YoX1RwKT4wLAorCQkJImNhbid0IGRlbGV0ZSBwb2ludGVyIHRvIGluY29tcGxldGUgdHlwZSIpOworCSAgZGVsZXRlIF9fcHRyOworCX0KKyAgICB9OworCisgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgLy8gRFIgNzQwIC0gb21pdCBzcGVjaWFsaXphdGlvbiBmb3IgYXJyYXkgb2JqZWN0cyB3aXRoIGEgY29tcGlsZSB0aW1lIGxlbmd0aAorICAvLy8gU3BlY2lhbGl6YXRpb24sIGRlZmF1bHRfZGVsZXRlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IAorICAgIHN0cnVjdCBkZWZhdWx0X2RlbGV0ZTxfVHBbXT4KKyAgICB7CisgICAgICB2b2lkCisgICAgICBvcGVyYXRvcigpKF9UcCogX19wdHIpIGNvbnN0CisgICAgICB7CisJc3RhdGljX2Fzc2VydChzaXplb2YoX1RwKT4wLAorCQkgICAgICAiY2FuJ3QgZGVsZXRlIHBvaW50ZXIgdG8gaW5jb21wbGV0ZSB0eXBlIik7CisJZGVsZXRlIFtdIF9fcHRyOworICAgICAgfQorICAgIH07CisKKyAgLy8vIDIwLjcuMTIuMiB1bmlxdWVfcHRyIGZvciBzaW5nbGUgb2JqZWN0cy4KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwX0RlbGV0ZXIgPSBkZWZhdWx0X2RlbGV0ZTxfVHA+ID4gCisgICAgY2xhc3MgdW5pcXVlX3B0cgorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxfVHAqLCBfVHBfRGVsZXRlcj4gIF9fdHVwbGVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RwKiB1bmlxdWVfcHRyOjoqICAgICAgICAgICAgIF9fdW5zcGVjaWZpZWRfcG9pbnRlcl90eXBlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgIGVsZW1lbnRfdHlwZTsgICAgICAKKyAgICAgIHR5cGVkZWYgX1RwX0RlbGV0ZXIgICAgICAgIGRlbGV0ZXJfdHlwZTsKKworICAgICAgLy8gQ29uc3RydWN0b3JzLgorICAgICAgdW5pcXVlX3B0cigpCisgICAgICA6IF9NX3QocG9pbnRlcigpLCBkZWxldGVyX3R5cGUoKSkKKyAgICAgIHsgc3RhdGljX2Fzc2VydCghc3RkOjppc19wb2ludGVyPGRlbGV0ZXJfdHlwZT46OnZhbHVlLAorCQkgICAgICAiY29uc3RydWN0ZWQgd2l0aCBudWxsIGZ1bmN0aW9uIHBvaW50ZXIgZGVsZXRlciIpOyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICB1bmlxdWVfcHRyKHBvaW50ZXIgX19wKQorICAgICAgOiBfTV90KF9fcCwgZGVsZXRlcl90eXBlKCkpCisgICAgICB7IHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfcG9pbnRlcjxkZWxldGVyX3R5cGU+Ojp2YWx1ZSwKKwkJICAgICAiY29uc3RydWN0ZWQgd2l0aCBudWxsIGZ1bmN0aW9uIHBvaW50ZXIgZGVsZXRlciIpOyB9CisKKyAgICAgIHVuaXF1ZV9wdHIocG9pbnRlciBfX3AsCisgICAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxzdGQ6OmlzX3JlZmVyZW5jZTxkZWxldGVyX3R5cGU+Ojp2YWx1ZSwgCisgICAgICAgICAgICBkZWxldGVyX3R5cGUsIGNvbnN0IGRlbGV0ZXJfdHlwZSY+Ojp0eXBlIF9fZCkKKyAgICAgIDogX01fdChfX3AsIF9fZCkgeyB9CisKKyAgICAgIHVuaXF1ZV9wdHIocG9pbnRlciBfX3AsCisgICAgICAgICAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPGRlbGV0ZXJfdHlwZT46OnR5cGUmJiBfX2QpCisgICAgICA6IF9NX3Qoc3RkOjptb3ZlKF9fcCksIHN0ZDo6bW92ZShfX2QpKQorICAgICAgeyBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX3JlZmVyZW5jZTxkZWxldGVyX3R5cGU+Ojp2YWx1ZSwgCisJCSAgICAgICJydmFsdWUgZGVsZXRlciBib3VuZCB0byByZWZlcmVuY2UiKTsgfQorCisgICAgICAvLyBNb3ZlIGNvbnN0cnVjdG9ycy4KKyAgICAgIHVuaXF1ZV9wdHIodW5pcXVlX3B0ciYmIF9fdSkgCisgICAgICA6IF9NX3QoX191LnJlbGVhc2UoKSwgc3RkOjpmb3J3YXJkPGRlbGV0ZXJfdHlwZT4oX191LmdldF9kZWxldGVyKCkpKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwLCB0eXBlbmFtZSBfVXBfRGVsZXRlcj4gCisgICAgICAgIHVuaXF1ZV9wdHIodW5pcXVlX3B0cjxfVXAsIF9VcF9EZWxldGVyPiYmIF9fdSkgCisgICAgICAgIDogX01fdChfX3UucmVsZWFzZSgpLCBzdGQ6OmZvcndhcmQ8ZGVsZXRlcl90eXBlPihfX3UuZ2V0X2RlbGV0ZXIoKSkpCisJeyB9CisKKyAgICAgIC8vIERlc3RydWN0b3IuCisgICAgICB+dW5pcXVlX3B0cigpIHsgcmVzZXQoKTsgfQorICAgIAorICAgICAgLy8gQXNzaWdubWVudC4KKyAgICAgIHVuaXF1ZV9wdHImCisgICAgICBvcGVyYXRvcj0odW5pcXVlX3B0ciYmIF9fdSkKKyAgICAgIHsgCisgICAgICAgIHJlc2V0KF9fdS5yZWxlYXNlKCkpOyAKKyAgICAgICAgZ2V0X2RlbGV0ZXIoKSA9IHN0ZDo6bW92ZShfX3UuZ2V0X2RlbGV0ZXIoKSk7IAorICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcCwgdHlwZW5hbWUgX1VwX0RlbGV0ZXI+IAorICAgICAgICB1bmlxdWVfcHRyJgorICAgICAgICBvcGVyYXRvcj0odW5pcXVlX3B0cjxfVXAsIF9VcF9EZWxldGVyPiYmIF9fdSkKKwl7CisgICAgICAgICAgcmVzZXQoX191LnJlbGVhc2UoKSk7IAorICAgICAgICAgIGdldF9kZWxldGVyKCkgPSBzdGQ6Om1vdmUoX191LmdldF9kZWxldGVyKCkpOyAKKyAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgdW5pcXVlX3B0ciYKKyAgICAgIG9wZXJhdG9yPShfX3Vuc3BlY2lmaWVkX3BvaW50ZXJfdHlwZSkgCisgICAgICB7CisJcmVzZXQoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8vIE9ic2VydmVycy4KKyAgICAgIHR5cGVuYW1lIHN0ZDo6YWRkX2x2YWx1ZV9yZWZlcmVuY2U8ZWxlbWVudF90eXBlPjo6dHlwZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoZ2V0KCkgIT0gcG9pbnRlcigpKTsKKwlyZXR1cm4gKmdldCgpOworICAgICAgfQorCisgICAgICBwb2ludGVyCisgICAgICBvcGVyYXRvci0+KCkgY29uc3QKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoZ2V0KCkgIT0gcG9pbnRlcigpKTsKKwlyZXR1cm4gZ2V0KCk7CisgICAgICB9CisKKyAgICAgIHBvaW50ZXIKKyAgICAgIGdldCgpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGQ6OmdldDwwPihfTV90KTsgfQorCisgICAgICBkZWxldGVyX3R5cGUmCisgICAgICBnZXRfZGVsZXRlcigpCisgICAgICB7IHJldHVybiBzdGQ6OmdldDwxPihfTV90KTsgfQorCisgICAgICBjb25zdCBkZWxldGVyX3R5cGUmCisgICAgICBnZXRfZGVsZXRlcigpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGQ6OmdldDwxPihfTV90KTsgfQorCisgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGdldCgpID09IHBvaW50ZXIoKSA/IGZhbHNlIDogdHJ1ZTsgfQorCisgICAgICAvLyBNb2RpZmllcnMuCisgICAgICBwb2ludGVyCisgICAgICByZWxlYXNlKCkgCisgICAgICB7CisJcG9pbnRlciBfX3AgPSBnZXQoKTsKKwlzdGQ6OmdldDwwPihfTV90KSA9IHBvaW50ZXIoKTsKKwlyZXR1cm4gX19wOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICByZXNldChwb2ludGVyIF9fcCA9IHBvaW50ZXIoKSkKKyAgICAgIHsKKwl1c2luZyBzdGQ6OnN3YXA7CisJc3dhcChzdGQ6OmdldDwwPihfTV90KSwgX19wKTsKKwlpZiAoX19wICE9IHBvaW50ZXIoKSkKKwkgIGdldF9kZWxldGVyKCkoX19wKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgc3dhcCh1bmlxdWVfcHRyJiBfX3UpCisgICAgICB7CisJdXNpbmcgc3RkOjpzd2FwOworCXN3YXAoX01fdCwgX191Ll9NX3QpOworICAgICAgfQorCisgICAgICAvLyBEaXNhYmxlIGNvcHkgZnJvbSBsdmFsdWUuCisgICAgICB1bmlxdWVfcHRyKGNvbnN0IHVuaXF1ZV9wdHImKSA9IGRlbGV0ZTsKKyAgICAgIHVuaXF1ZV9wdHImIG9wZXJhdG9yPShjb25zdCB1bmlxdWVfcHRyJikgPSBkZWxldGU7CisKKyAgICBwcml2YXRlOgorICAgICAgX190dXBsZV90eXBlIF9NX3Q7CisgIH07CisgCisgIC8vLyAyMC43LjEyLjMgdW5pcXVlX3B0ciBmb3IgYXJyYXkgb2JqZWN0cyB3aXRoIGEgcnVudGltZSBsZW5ndGgKKyAgLy8gW3VuaXF1ZS5wdHIucnVudGltZV0KKyAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAvLyBEUiA3NDAgLSBvbWl0IHNwZWNpYWxpemF0aW9uIGZvciBhcnJheSBvYmplY3RzIHdpdGggYSBjb21waWxlIHRpbWUgbGVuZ3RoCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwX0RlbGV0ZXI+IAorICAgIGNsYXNzIHVuaXF1ZV9wdHI8X1RwW10sIF9UcF9EZWxldGVyPgorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxfVHAqLCBfVHBfRGVsZXRlcj4gIF9fdHVwbGVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RwKiB1bmlxdWVfcHRyOjoqICAgICAgICAgICAgIF9fdW5zcGVjaWZpZWRfcG9pbnRlcl90eXBlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgIGVsZW1lbnRfdHlwZTsgICAgICAKKyAgICAgIHR5cGVkZWYgX1RwX0RlbGV0ZXIgICAgICAgIGRlbGV0ZXJfdHlwZTsKKworICAgICAgLy8gQ29uc3RydWN0b3JzLgorICAgICAgdW5pcXVlX3B0cigpCisgICAgICA6IF9NX3QocG9pbnRlcigpLCBkZWxldGVyX3R5cGUoKSkKKyAgICAgIHsgc3RhdGljX2Fzc2VydCghc3RkOjppc19wb2ludGVyPGRlbGV0ZXJfdHlwZT46OnZhbHVlLAorCQkgICAgICAiY29uc3RydWN0ZWQgd2l0aCBudWxsIGZ1bmN0aW9uIHBvaW50ZXIgZGVsZXRlciIpOyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICB1bmlxdWVfcHRyKHBvaW50ZXIgX19wKQorICAgICAgOiBfTV90KF9fcCwgZGVsZXRlcl90eXBlKCkpCisgICAgICB7IHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfcG9pbnRlcjxkZWxldGVyX3R5cGU+Ojp2YWx1ZSwKKwkJICAgICAgImNvbnN0cnVjdGVkIHdpdGggbnVsbCBmdW5jdGlvbiBwb2ludGVyIGRlbGV0ZXIiKTsgfQorCisgICAgICB1bmlxdWVfcHRyKHBvaW50ZXIgX19wLAorICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8c3RkOjppc19yZWZlcmVuY2U8ZGVsZXRlcl90eXBlPjo6dmFsdWUsIAorICAgICAgICAgICAgICBkZWxldGVyX3R5cGUsIGNvbnN0IGRlbGV0ZXJfdHlwZSY+Ojp0eXBlIF9fZCkgCisgICAgICA6IF9NX3QoX19wLCBfX2QpIHsgfQorCisgICAgICB1bmlxdWVfcHRyKHBvaW50ZXIgX19wLAorCQkgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPGRlbGV0ZXJfdHlwZT46OnR5cGUgJiYgX19kKQorICAgICAgOiBfTV90KHN0ZDo6bW92ZShfX3ApLCBzdGQ6Om1vdmUoX19kKSkKKyAgICAgIHsgc3RhdGljX2Fzc2VydCghc3RkOjppc19yZWZlcmVuY2U8ZGVsZXRlcl90eXBlPjo6dmFsdWUsIAorCQkgICAgICAicnZhbHVlIGRlbGV0ZXIgYm91bmQgdG8gcmVmZXJlbmNlIik7IH0KKworICAgICAgLy8gTW92ZSBjb25zdHJ1Y3RvcnMuCisgICAgICB1bmlxdWVfcHRyKHVuaXF1ZV9wdHImJiBfX3UpIAorICAgICAgOiBfTV90KF9fdS5yZWxlYXNlKCksIHN0ZDo6Zm9yd2FyZDxkZWxldGVyX3R5cGU+KF9fdS5nZXRfZGVsZXRlcigpKSkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcCwgdHlwZW5hbWUgX1VwX0RlbGV0ZXI+IAorICAgICAgICB1bmlxdWVfcHRyKHVuaXF1ZV9wdHI8X1VwLCBfVXBfRGVsZXRlcj4mJiBfX3UpIAorCTogX01fdChfX3UucmVsZWFzZSgpLCBzdGQ6OmZvcndhcmQ8ZGVsZXRlcl90eXBlPihfX3UuZ2V0X2RlbGV0ZXIoKSkpCisJeyB9CisKKyAgICAgIC8vIERlc3RydWN0b3IuCisgICAgICB+dW5pcXVlX3B0cigpIHsgcmVzZXQoKTsgfQorCisgICAgICAvLyBBc3NpZ25tZW50LgorICAgICAgdW5pcXVlX3B0ciYKKyAgICAgIG9wZXJhdG9yPSh1bmlxdWVfcHRyJiYgX191KQorICAgICAgeworCXJlc2V0KF9fdS5yZWxlYXNlKCkpOworCWdldF9kZWxldGVyKCkgPSBzdGQ6Om1vdmUoX191LmdldF9kZWxldGVyKCkpOyAKKwlyZXR1cm4gKnRoaXM7IAorICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXAsIHR5cGVuYW1lIF9VcF9EZWxldGVyPiAKKyAgICAgICAgdW5pcXVlX3B0ciYKKyAgICAgICAgb3BlcmF0b3I9KHVuaXF1ZV9wdHI8X1VwLCBfVXBfRGVsZXRlcj4mJiBfX3UpCisJeworICAgICAgICAgIHJlc2V0KF9fdS5yZWxlYXNlKCkpOworICAgICAgICAgIGdldF9kZWxldGVyKCkgPSBzdGQ6Om1vdmUoX191LmdldF9kZWxldGVyKCkpOyAKKyAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgdW5pcXVlX3B0ciYKKyAgICAgIG9wZXJhdG9yPShfX3Vuc3BlY2lmaWVkX3BvaW50ZXJfdHlwZSkKKyAgICAgIHsKKwlyZXNldCgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLy8gT2JzZXJ2ZXJzLgorICAgICAgdHlwZW5hbWUgc3RkOjphZGRfbHZhbHVlX3JlZmVyZW5jZTxlbGVtZW50X3R5cGU+Ojp0eXBlIAorICAgICAgb3BlcmF0b3JbXShzaXplX3QgX19pKSBjb25zdCAKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoZ2V0KCkgIT0gcG9pbnRlcigpKTsKKwlyZXR1cm4gZ2V0KClbX19pXTsKKyAgICAgIH0KKworICAgICAgcG9pbnRlcgorICAgICAgZ2V0KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0ZDo6Z2V0PDA+KF9NX3QpOyB9CisKKyAgICAgIGRlbGV0ZXJfdHlwZSYgCisgICAgICBnZXRfZGVsZXRlcigpCisgICAgICB7IHJldHVybiBzdGQ6OmdldDwxPihfTV90KTsgfQorCisgICAgICBjb25zdCBkZWxldGVyX3R5cGUmCisgICAgICBnZXRfZGVsZXRlcigpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGQ6OmdldDwxPihfTV90KTsgfSAgICAKKworICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IAorICAgICAgeyByZXR1cm4gZ2V0KCkgPT0gcG9pbnRlcigpID8gZmFsc2UgOiB0cnVlOyB9CisgICAgCisgICAgICAvLyBNb2RpZmllcnMuCisgICAgICBwb2ludGVyCisgICAgICByZWxlYXNlKCkgCisgICAgICB7CisJcG9pbnRlciBfX3AgPSBnZXQoKTsKKwlzdGQ6OmdldDwwPihfTV90KSA9IHBvaW50ZXIoKTsKKwlyZXR1cm4gX19wOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICByZXNldChwb2ludGVyIF9fcCA9IHBvaW50ZXIoKSkgCisgICAgICB7CisJdXNpbmcgc3RkOjpzd2FwOworCXN3YXAoc3RkOjpnZXQ8MD4oX01fdCksIF9fcCk7CisJaWYgKF9fcCAhPSBwb2ludGVyKCkpCisJICBnZXRfZGVsZXRlcigpKF9fcCk7CisgICAgICB9CisKKyAgICAgIC8vIERSIDgyMS4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICAgICAgdm9pZCByZXNldChfVXApID0gZGVsZXRlOworCisgICAgICB2b2lkCisgICAgICBzd2FwKHVuaXF1ZV9wdHImIF9fdSkKKyAgICAgIHsKKwl1c2luZyBzdGQ6OnN3YXA7CisJc3dhcChfTV90LCBfX3UuX01fdCk7CisgICAgICB9CisKKyAgICAgIC8vIERpc2FibGUgY29weSBmcm9tIGx2YWx1ZS4KKyAgICAgIHVuaXF1ZV9wdHIoY29uc3QgdW5pcXVlX3B0ciYpID0gZGVsZXRlOworICAgICAgdW5pcXVlX3B0ciYgb3BlcmF0b3I9KGNvbnN0IHVuaXF1ZV9wdHImKSA9IGRlbGV0ZTsKKworICAgICAgLy8gRGlzYWJsZSBjb25zdHJ1Y3Rpb24gZnJvbSBjb252ZXJ0aWJsZSBwb2ludGVyIHR5cGVzLgorICAgICAgLy8gKE4yMzE1IC0gMjAuNi41LjMuMSkKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICAgICAgdW5pcXVlX3B0cihfVXAqLCB0eXBlbmFtZQorCQkgICBzdGQ6OmNvbmRpdGlvbmFsPHN0ZDo6aXNfcmVmZXJlbmNlPGRlbGV0ZXJfdHlwZT46OnZhbHVlLAorCQkgICBkZWxldGVyX3R5cGUsIGNvbnN0IGRlbGV0ZXJfdHlwZSY+Ojp0eXBlLAorCQkgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2NvbnZlcnRpYmxlPF9VcCosIAorCQkgICBwb2ludGVyPjo6dmFsdWU+Ojp0eXBlKiA9IDApID0gZGVsZXRlOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgICAgIHVuaXF1ZV9wdHIoX1VwKiwgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPGRlbGV0ZXJfdHlwZT46OnR5cGUmJiwKKwkJICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19jb252ZXJ0aWJsZTxfVXAqLCAKKwkJICAgcG9pbnRlcj46OnZhbHVlPjo6dHlwZSogPSAwKSA9IGRlbGV0ZTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorICAgICAgICBleHBsaWNpdAorICAgICAgICB1bmlxdWVfcHRyKF9VcCosIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfY29udmVydGlibGU8X1VwKiwgCisJCSAgIHBvaW50ZXI+Ojp2YWx1ZT46OnR5cGUqID0gMCkgPSBkZWxldGU7CisKKyAgICBwcml2YXRlOgorICAgICAgX190dXBsZV90eXBlIF9NX3Q7CisgIH07CisgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcF9EZWxldGVyPiAKKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAodW5pcXVlX3B0cjxfVHAsIF9UcF9EZWxldGVyPiYgX194LAorCSB1bmlxdWVfcHRyPF9UcCwgX1RwX0RlbGV0ZXI+JiBfX3kpCisgICAgeyBfX3guc3dhcChfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHBfRGVsZXRlciwKKwkgICB0eXBlbmFtZSBfVXAsIHR5cGVuYW1lIF9VcF9EZWxldGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCB1bmlxdWVfcHRyPF9UcCwgX1RwX0RlbGV0ZXI+JiBfX3gsCisJICAgICAgIGNvbnN0IHVuaXF1ZV9wdHI8X1VwLCBfVXBfRGVsZXRlcj4mIF9feSkKKyAgICB7IHJldHVybiBfX3guZ2V0KCkgPT0gX195LmdldCgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHBfRGVsZXRlciwKKwkgICB0eXBlbmFtZSBfVXAsIHR5cGVuYW1lIF9VcF9EZWxldGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCB1bmlxdWVfcHRyPF9UcCwgX1RwX0RlbGV0ZXI+JiBfX3gsCisJICAgICAgIGNvbnN0IHVuaXF1ZV9wdHI8X1VwLCBfVXBfRGVsZXRlcj4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feC5nZXQoKSA9PSBfX3kuZ2V0KCkpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHBfRGVsZXRlciwKKwkgICB0eXBlbmFtZSBfVXAsIHR5cGVuYW1lIF9VcF9EZWxldGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IHVuaXF1ZV9wdHI8X1RwLCBfVHBfRGVsZXRlcj4mIF9feCwKKwkgICAgICBjb25zdCB1bmlxdWVfcHRyPF9VcCwgX1VwX0RlbGV0ZXI+JiBfX3kpCisgICAgeyByZXR1cm4gX194LmdldCgpIDwgX195LmdldCgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHBfRGVsZXRlciwKKwkgICB0eXBlbmFtZSBfVXAsIHR5cGVuYW1lIF9VcF9EZWxldGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCB1bmlxdWVfcHRyPF9UcCwgX1RwX0RlbGV0ZXI+JiBfX3gsCisJICAgICAgIGNvbnN0IHVuaXF1ZV9wdHI8X1VwLCBfVXBfRGVsZXRlcj4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feS5nZXQoKSA8IF9feC5nZXQoKSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcF9EZWxldGVyLAorCSAgIHR5cGVuYW1lIF9VcCwgdHlwZW5hbWUgX1VwX0RlbGV0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgdW5pcXVlX3B0cjxfVHAsIF9UcF9EZWxldGVyPiYgX194LAorCSAgICAgIGNvbnN0IHVuaXF1ZV9wdHI8X1VwLCBfVXBfRGVsZXRlcj4mIF9feSkKKyAgICB7IHJldHVybiBfX3kuZ2V0KCkgPCBfX3guZ2V0KCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcF9EZWxldGVyLAorCSAgIHR5cGVuYW1lIF9VcCwgdHlwZW5hbWUgX1VwX0RlbGV0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IHVuaXF1ZV9wdHI8X1RwLCBfVHBfRGVsZXRlcj4mIF9feCwKKwkgICAgICAgY29uc3QgdW5pcXVlX3B0cjxfVXAsIF9VcF9EZWxldGVyPiYgX195KQorICAgIHsgcmV0dXJuICEoX194LmdldCgpIDwgX195LmdldCgpKTsgfQorCisgIC8vIEB9IGdyb3VwIHBvaW50ZXJfYWJzdHJhY3Rpb25zCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmIC8qIF9VTklRVUVfUFRSX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy91bm9yZGVyZWRfbWFwLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvdW5vcmRlcmVkX21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0OTk4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvdW5vcmRlcmVkX21hcC5oCkBAIC0wLDAgKzEsMzk5IEBACisvLyB1bm9yZGVyZWRfbWFwIGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy91bm9yZGVyZWRfbWFwLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfVU5PUkRFUkVEX01BUF9ICisjZGVmaW5lIF9VTk9SREVSRURfTUFQX0gKKworX0dMSUJDWFhfQkVHSU5fTkVTVEVEX05BTUVTUEFDRShzdGQsIF9HTElCQ1hYX1NURF9EKQorCisgIC8vIFhYWCBXaGVuIHdlIGdldCB0eXBlZGVmIHRlbXBsYXRlcyB0aGVzZSBjbGFzcyBkZWZpbml0aW9ucworICAvLyB3aWxsIGJlIHVubmVjZXNzYXJ5LgorICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsCisJICAgY2xhc3MgX0hhc2ggPSBoYXNoPF9LZXk+LAorCSAgIGNsYXNzIF9QcmVkID0gc3RkOjplcXVhbF90bzxfS2V5PiwKKwkgICBjbGFzcyBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiA+LAorCSAgIGJvb2wgX19jYWNoZV9oYXNoX2NvZGUgPSBmYWxzZT4KKyAgICBjbGFzcyBfX3Vub3JkZXJlZF9tYXAKKyAgICA6IHB1YmxpYyBfSGFzaHRhYmxlPF9LZXksIHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+LCBfQWxsb2MsCisJCQlzdGQ6Ol9TZWxlY3Qxc3Q8c3RkOjpwYWlyPGNvbnN0IF9LZXksIF9UcD4gPiwgX1ByZWQsIAorCQkJX0hhc2gsIF9fZGV0YWlsOjpfTW9kX3JhbmdlX2hhc2hpbmcsCisJCQlfX2RldGFpbDo6X0RlZmF1bHRfcmFuZ2VkX2hhc2gsCisJCQlfX2RldGFpbDo6X1ByaW1lX3JlaGFzaF9wb2xpY3ksCisJCQlfX2NhY2hlX2hhc2hfY29kZSwgZmFsc2UsIHRydWU+CisgICAgeworICAgICAgdHlwZWRlZiBfSGFzaHRhYmxlPF9LZXksIHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+LCBfQWxsb2MsCisJCQkgc3RkOjpfU2VsZWN0MXN0PHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4sIF9QcmVkLAorCQkJIF9IYXNoLCBfX2RldGFpbDo6X01vZF9yYW5nZV9oYXNoaW5nLAorCQkJIF9fZGV0YWlsOjpfRGVmYXVsdF9yYW5nZWRfaGFzaCwKKwkJCSBfX2RldGFpbDo6X1ByaW1lX3JlaGFzaF9wb2xpY3ksCisJCQkgX19jYWNoZV9oYXNoX2NvZGUsIGZhbHNlLCB0cnVlPgorICAgICAgICBfQmFzZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpoYXNoZXIgICAgICAgICAgaGFzaGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6a2V5X2VxdWFsICAgICAgIGtleV9lcXVhbDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlICBhbGxvY2F0b3JfdHlwZTsKKworICAgICAgZXhwbGljaXQKKyAgICAgIF9fdW5vcmRlcmVkX21hcChzaXplX3R5cGUgX19uID0gMTAsCisJCSAgICAgIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLAorCQkgICAgICBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCSAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX24sIF9faGYsIF9fZGV0YWlsOjpfTW9kX3JhbmdlX2hhc2hpbmcoKSwKKwkgICAgICBfX2RldGFpbDo6X0RlZmF1bHRfcmFuZ2VkX2hhc2goKSwKKwkgICAgICBfX2VxbCwgc3RkOjpfU2VsZWN0MXN0PHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4oKSwgX19hKQorICAgICAgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBfX3Vub3JkZXJlZF9tYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIAorCQkJc2l6ZV90eXBlIF9fbiA9IDEwLAorCQkJY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksIAorCQkJY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLCAKKwkJCWNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX0Jhc2UoX19mLCBfX2wsIF9fbiwgX19oZiwgX19kZXRhaWw6Ol9Nb2RfcmFuZ2VfaGFzaGluZygpLAorCQlfX2RldGFpbDo6X0RlZmF1bHRfcmFuZ2VkX2hhc2goKSwKKwkJX19lcWwsIHN0ZDo6X1NlbGVjdDFzdDxzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiA+KCksIF9fYSkKKwl7IH0KKworICAgICAgX191bm9yZGVyZWRfbWFwKF9fdW5vcmRlcmVkX21hcCYmIF9feCkKKyAgICAgIDogX0Jhc2Uoc3RkOjpmb3J3YXJkPF9CYXNlPihfX3gpKSB7IH0KKyAgICB9OworICAKKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLAorCSAgIGNsYXNzIF9IYXNoID0gaGFzaDxfS2V5PiwKKwkgICBjbGFzcyBfUHJlZCA9IHN0ZDo6ZXF1YWxfdG88X0tleT4sCisJICAgY2xhc3MgX0FsbG9jID0gc3RkOjphbGxvY2F0b3I8c3RkOjpwYWlyPGNvbnN0IF9LZXksIF9UcD4gPiwKKwkgICBib29sIF9fY2FjaGVfaGFzaF9jb2RlID0gZmFsc2U+CisgICAgY2xhc3MgX191bm9yZGVyZWRfbXVsdGltYXAKKyAgICA6IHB1YmxpYyBfSGFzaHRhYmxlPF9LZXksIHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+LAorCQkJX0FsbG9jLAorCQkJc3RkOjpfU2VsZWN0MXN0PHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4sIF9QcmVkLAorCQkJX0hhc2gsIF9fZGV0YWlsOjpfTW9kX3JhbmdlX2hhc2hpbmcsCisJCQlfX2RldGFpbDo6X0RlZmF1bHRfcmFuZ2VkX2hhc2gsCisJCQlfX2RldGFpbDo6X1ByaW1lX3JlaGFzaF9wb2xpY3ksCisJCQlfX2NhY2hlX2hhc2hfY29kZSwgZmFsc2UsIGZhbHNlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0hhc2h0YWJsZTxfS2V5LCBzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiwKKwkJCSBfQWxsb2MsCisJCQkgc3RkOjpfU2VsZWN0MXN0PHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4sIF9QcmVkLAorCQkJIF9IYXNoLCBfX2RldGFpbDo6X01vZF9yYW5nZV9oYXNoaW5nLAorCQkJIF9fZGV0YWlsOjpfRGVmYXVsdF9yYW5nZWRfaGFzaCwKKwkJCSBfX2RldGFpbDo6X1ByaW1lX3JlaGFzaF9wb2xpY3ksCisJCQkgX19jYWNoZV9oYXNoX2NvZGUsIGZhbHNlLCBmYWxzZT4KKyAgICAgICAgX0Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aGFzaGVyICAgICAgICAgIGhhc2hlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmtleV9lcXVhbCAgICAgICBrZXlfZXF1YWw7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSAgYWxsb2NhdG9yX3R5cGU7CisgICAgICAKKyAgICAgIGV4cGxpY2l0CisgICAgICBfX3Vub3JkZXJlZF9tdWx0aW1hcChzaXplX3R5cGUgX19uID0gMTAsCisJCQkgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJCSAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJCSAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX24sIF9faGYsIF9fZGV0YWlsOjpfTW9kX3JhbmdlX2hhc2hpbmcoKSwKKwkgICAgICBfX2RldGFpbDo6X0RlZmF1bHRfcmFuZ2VkX2hhc2goKSwKKwkgICAgICBfX2VxbCwgc3RkOjpfU2VsZWN0MXN0PHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4oKSwgX19hKQorICAgICAgeyB9CisKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIF9fdW5vcmRlcmVkX211bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCAKKwkJCSAgICAgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSBfX24gPSAwLAorCQkJICAgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwgCisJCQkgICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwgCisJCQkgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX0Jhc2UoX19mLCBfX2wsIF9fbiwgX19oZiwgX19kZXRhaWw6Ol9Nb2RfcmFuZ2VfaGFzaGluZygpLAorCQlfX2RldGFpbDo6X0RlZmF1bHRfcmFuZ2VkX2hhc2goKSwKKwkJX19lcWwsIHN0ZDo6X1NlbGVjdDFzdDxzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiA+KCksIF9fYSkKKyAgICAgICAgeyB9CisKKyAgICAgIF9fdW5vcmRlcmVkX211bHRpbWFwKF9fdW5vcmRlcmVkX211bHRpbWFwJiYgX194KQorICAgICAgOiBfQmFzZShzdGQ6OmZvcndhcmQ8X0Jhc2U+KF9feCkpIHsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaCwgY2xhc3MgX1ByZWQsIGNsYXNzIF9BbGxvYywKKwkgICBib29sIF9fY2FjaGVfaGFzaF9jb2RlPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChfX3Vub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsCisJIF9BbGxvYywgX19jYWNoZV9oYXNoX2NvZGU+JiBfX3gsCisJIF9fdW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwKKwkgX0FsbG9jLCBfX2NhY2hlX2hhc2hfY29kZT4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoLCBjbGFzcyBfUHJlZCwgY2xhc3MgX0FsbG9jLAorCSAgIGJvb2wgX19jYWNoZV9oYXNoX2NvZGU+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKF9fdW5vcmRlcmVkX211bHRpbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLAorCSBfQWxsb2MsIF9fY2FjaGVfaGFzaF9jb2RlPiYgX194LAorCSBfX3Vub3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwKKwkgX0FsbG9jLCBfX2NhY2hlX2hhc2hfY29kZT4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoLCBjbGFzcyBfUHJlZCwgY2xhc3MgX0FsbG9jLAorCSAgIGJvb2wgX19jYWNoZV9oYXNoX2NvZGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9fdW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jLAorCSAgICAgICBfX2NhY2hlX2hhc2hfY29kZT4mIF9feCwKKwkgICAgICAgY29uc3QgX191bm9yZGVyZWRfbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2MsCisJICAgICAgIF9fY2FjaGVfaGFzaF9jb2RlPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5fTV9lcXVhbChfX3kpOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaCwgY2xhc3MgX1ByZWQsIGNsYXNzIF9BbGxvYywKKwkgICBib29sIF9fY2FjaGVfaGFzaF9jb2RlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBfX3Vub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYywKKwkgICAgICAgX19jYWNoZV9oYXNoX2NvZGU+JiBfX3gsCisJICAgICAgIGNvbnN0IF9fdW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jLAorCSAgICAgICBfX2NhY2hlX2hhc2hfY29kZT4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaCwgY2xhc3MgX1ByZWQsIGNsYXNzIF9BbGxvYywKKwkgICBib29sIF9fY2FjaGVfaGFzaF9jb2RlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBfX3Vub3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jLAorCSAgICAgICBfX2NhY2hlX2hhc2hfY29kZT4mIF9feCwKKwkgICAgICAgY29uc3QgX191bm9yZGVyZWRfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYywKKwkgICAgICAgX19jYWNoZV9oYXNoX2NvZGU+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX2VxdWFsKF9feSk7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoLCBjbGFzcyBfUHJlZCwgY2xhc3MgX0FsbG9jLAorCSAgIGJvb2wgX19jYWNoZV9oYXNoX2NvZGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9fdW5vcmRlcmVkX211bHRpbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2MsCisJICAgICAgIF9fY2FjaGVfaGFzaF9jb2RlPiYgX194LAorCSAgICAgICBjb25zdCBfX3Vub3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jLAorCSAgICAgICBfX2NhY2hlX2hhc2hfY29kZT4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgQSBzdGFuZGFyZCBjb250YWluZXIgY29tcG9zZWQgb2YgdW5pcXVlIGtleXMgKGNvbnRhaW5pbmcKKyAgICogIGF0IG1vc3Qgb25lIG9mIGVhY2gga2V5IHZhbHVlKSB0aGF0IGFzc29jaWF0ZXMgdmFsdWVzIG9mIGFub3RoZXIgdHlwZQorICAgKiAgd2l0aCB0aGUga2V5cy4KKyAgICoKKyAgICogIEBpbmdyb3VwIHVub3JkZXJlZF9hc3NvY2lhdGl2ZV9jb250YWluZXJzCisgICAqCisgICAqICBNZWV0cyB0aGUgcmVxdWlyZW1lbnRzIG9mIGEgPGEgaHJlZj0idGFibGVzLmh0bWwjNjUiPmNvbnRhaW5lcjwvYT4sIGFuZAorICAgKiAgPGEgaHJlZj0idGFibGVzLmh0bWwjeHgiPnVub3JkZXJlZCBhc3NvY2lhdGl2ZSBjb250YWluZXI8L2E+CisgICAqCisgICAqICBAcGFyYW0gIEtleSAgVHlwZSBvZiBrZXkgb2JqZWN0cy4KKyAgICogIEBwYXJhbSAgVHAgIFR5cGUgb2YgbWFwcGVkIG9iamVjdHMuCisgICAqICBAcGFyYW0gIEhhc2ggIEhhc2hpbmcgZnVuY3Rpb24gb2JqZWN0IHR5cGUsIGRlZmF1bHRzIHRvIGhhc2g8VmFsdWU+LgorICAgKiAgQHBhcmFtICBQcmVkICBQcmVkaWNhdGUgZnVuY3Rpb24gb2JqZWN0IHR5cGUsIGRlZmF1bHRzIHRvIGVxdWFsX3RvPFZhbHVlPi4KKyAgICogIEBwYXJhbSAgQWxsb2MgIEFsbG9jYXRvciB0eXBlLCBkZWZhdWx0cyB0byBhbGxvY2F0b3I8S2V5Pi4KKyAgICoKKyAgICogVGhlIHJlc3VsdGluZyB2YWx1ZSB0eXBlIG9mIHRoZSBjb250YWluZXIgaXMgc3RkOjpwYWlyPGNvbnN0IEtleSwgVHA+LgorICAgKi8KKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLAorCSAgIGNsYXNzIF9IYXNoID0gaGFzaDxfS2V5PiwKKwkgICBjbGFzcyBfUHJlZCA9IHN0ZDo6ZXF1YWxfdG88X0tleT4sCisJICAgY2xhc3MgX0FsbG9jID0gc3RkOjphbGxvY2F0b3I8c3RkOjpwYWlyPGNvbnN0IF9LZXksIF9UcD4gPiA+CisgICAgY2xhc3MgdW5vcmRlcmVkX21hcAorICAgIDogcHVibGljIF9fdW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX191bm9yZGVyZWRfbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+ICBfQmFzZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6c2l6ZV90eXBlICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Omhhc2hlciAgICAgICAgICBoYXNoZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjprZXlfZXF1YWwgICAgICAga2V5X2VxdWFsOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgIGFsbG9jYXRvcl90eXBlOworCisgICAgICBleHBsaWNpdAorICAgICAgdW5vcmRlcmVkX21hcChzaXplX3R5cGUgX19uID0gMTAsCisJCSAgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHVub3JkZXJlZF9tYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIAorCQkgICAgICBzaXplX3R5cGUgX19uID0gMTAsCisJCSAgICAgIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLCAKKwkJICAgICAgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLCAKKwkJICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfQmFzZShfX2YsIF9fbCwgX19uLCBfX2hmLCBfX2VxbCwgX19hKQorICAgICAgICB7IH0KKworICAgICAgdW5vcmRlcmVkX21hcCh1bm9yZGVyZWRfbWFwJiYgX194KQorICAgICAgOiBfQmFzZShzdGQ6OmZvcndhcmQ8X0Jhc2U+KF9feCkpIHsgfQorCisgICAgICB1bm9yZGVyZWRfbWFwKGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sLAorCQkgICAgc2l6ZV90eXBlIF9fbiA9IDEwLAorCQkgICAgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCSAgICBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCSAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKwk6IF9CYXNlKF9fbC5iZWdpbigpLCBfX2wuZW5kKCksIF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKyAgICAgIHsgfQorCisgICAgICB1bm9yZGVyZWRfbWFwJgorICAgICAgb3BlcmF0b3I9KHVub3JkZXJlZF9tYXAmJiBfX3gpCisgICAgICB7CisJLy8gTkI6IERSIDEyMDQuCisJLy8gTkI6IERSIDY3NS4KKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPnN3YXAoX194KTsKKwlyZXR1cm4gKnRoaXM7CQorICAgICAgfQorCisgICAgICB1bm9yZGVyZWRfbWFwJgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+aW5zZXJ0KF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyAgICB9OworICAKKyAgLyoqCisgICAqICBAYnJpZWYgQSBzdGFuZGFyZCBjb250YWluZXIgY29tcG9zZWQgb2YgZXF1aXZhbGVudCBrZXlzCisgICAqICAocG9zc2libHkgY29udGFpbmluZyBtdWx0aXBsZSBvZiBlYWNoIGtleSB2YWx1ZSkgdGhhdCBhc3NvY2lhdGVzCisgICAqICB2YWx1ZXMgb2YgYW5vdGhlciB0eXBlIHdpdGggdGhlIGtleXMuCisgICAqCisgICAqICBAaW5ncm91cCB1bm9yZGVyZWRfYXNzb2NpYXRpdmVfY29udGFpbmVycworICAgKgorICAgKiAgTWVldHMgdGhlIHJlcXVpcmVtZW50cyBvZiBhIDxhIGhyZWY9InRhYmxlcy5odG1sIzY1Ij5jb250YWluZXI8L2E+LCBhbmQKKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sI3h4Ij51bm9yZGVyZWQgYXNzb2NpYXRpdmUgY29udGFpbmVyPC9hPgorICAgKgorICAgKiAgQHBhcmFtICBLZXkgIFR5cGUgb2Yga2V5IG9iamVjdHMuCisgICAqICBAcGFyYW0gIFRwICBUeXBlIG9mIG1hcHBlZCBvYmplY3RzLgorICAgKiAgQHBhcmFtICBIYXNoICBIYXNoaW5nIGZ1bmN0aW9uIG9iamVjdCB0eXBlLCBkZWZhdWx0cyB0byBoYXNoPFZhbHVlPi4KKyAgICogIEBwYXJhbSAgUHJlZCAgUHJlZGljYXRlIGZ1bmN0aW9uIG9iamVjdCB0eXBlLCBkZWZhdWx0cyB0byBlcXVhbF90bzxWYWx1ZT4uCisgICAqICBAcGFyYW0gIEFsbG9jICBBbGxvY2F0b3IgdHlwZSwgZGVmYXVsdHMgdG8gYWxsb2NhdG9yPEtleT4uCisgICAqCisgICAqIFRoZSByZXN1bHRpbmcgdmFsdWUgdHlwZSBvZiB0aGUgY29udGFpbmVyIGlzIHN0ZDo6cGFpcjxjb25zdCBLZXksIFRwPi4KKyAgICovCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwKKwkgICBjbGFzcyBfSGFzaCA9IGhhc2g8X0tleT4sCisJICAgY2xhc3MgX1ByZWQgPSBzdGQ6OmVxdWFsX3RvPF9LZXk+LAorCSAgIGNsYXNzIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4gPgorICAgIGNsYXNzIHVub3JkZXJlZF9tdWx0aW1hcAorICAgIDogcHVibGljIF9fdW5vcmRlcmVkX211bHRpbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+CisgICAgeworICAgICAgdHlwZWRlZiBfX3Vub3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiAgX0Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpoYXNoZXIgICAgICAgICAgaGFzaGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6a2V5X2VxdWFsICAgICAgIGtleV9lcXVhbDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlICBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIAorICAgICAgZXhwbGljaXQKKyAgICAgIHVub3JkZXJlZF9tdWx0aW1hcChzaXplX3R5cGUgX19uID0gMTAsCisJCQkgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCQkgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLAorCQkJIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICB7IH0KKworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdW5vcmRlcmVkX211bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCAKKwkJCSAgIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgX19uID0gMCwKKwkJCSAgIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLCAKKwkJCSAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwgCisJCQkgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKwk6IF9CYXNlKF9fZiwgX19sLCBfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICAgIHsgfQorCisgICAgICB1bm9yZGVyZWRfbXVsdGltYXAodW5vcmRlcmVkX211bHRpbWFwJiYgX194KQorICAgICAgOiBfQmFzZShzdGQ6OmZvcndhcmQ8X0Jhc2U+KF9feCkpIHsgfQorCisgICAgICB1bm9yZGVyZWRfbXVsdGltYXAoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJCQkgc2l6ZV90eXBlIF9fbiA9IDEwLAorCQkJIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLAorCQkJIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJCSBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKwk6IF9CYXNlKF9fbC5iZWdpbigpLCBfX2wuZW5kKCksIF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKyAgICAgIHsgfQorCisgICAgICB1bm9yZGVyZWRfbXVsdGltYXAmCisgICAgICBvcGVyYXRvcj0odW5vcmRlcmVkX211bHRpbWFwJiYgX194KQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorCS8vIE5COiBEUiA2NzUuCisJdGhpcy0+Y2xlYXIoKTsKKwl0aGlzLT5zd2FwKF9feCk7CisJcmV0dXJuICp0aGlzOwkKKyAgICAgIH0KKworICAgICAgdW5vcmRlcmVkX211bHRpbWFwJgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+aW5zZXJ0KF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2gsIGNsYXNzIF9QcmVkLCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHVub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgdW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgX194LnN3YXAoX195KTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2gsIGNsYXNzIF9QcmVkLCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHVub3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX194LAorCSB1bm9yZGVyZWRfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoLCBjbGFzcyBfUHJlZCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCB1bm9yZGVyZWRfbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IHVub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBfX3guX01fZXF1YWwoX195KTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2gsIGNsYXNzIF9QcmVkLCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHVub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgdW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoLCBjbGFzcyBfUHJlZCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCB1bm9yZGVyZWRfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgdW5vcmRlcmVkX211bHRpbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX2VxdWFsKF9feSk7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoLCBjbGFzcyBfUHJlZCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCB1bm9yZGVyZWRfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgdW5vcmRlcmVkX211bHRpbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQorCitfR0xJQkNYWF9FTkRfTkVTVEVEX05BTUVTUEFDRQorCisjZW5kaWYgLyogX1VOT1JERVJFRF9NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3Vub3JkZXJlZF9zZXQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy91bm9yZGVyZWRfc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBkZWUyMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy91bm9yZGVyZWRfc2V0LmgKQEAgLTAsMCArMSwzOTAgQEAKKy8vIHVub3JkZXJlZF9zZXQgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL3Vub3JkZXJlZF9zZXQuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWZuZGVmIF9VTk9SREVSRURfU0VUX0gKKyNkZWZpbmUgX1VOT1JERVJFRF9TRVRfSAorCitfR0xJQkNYWF9CRUdJTl9ORVNURURfTkFNRVNQQUNFKHN0ZCwgX0dMSUJDWFhfU1REX0QpCisKKyAgLy8gWFhYIFdoZW4gd2UgZ2V0IHR5cGVkZWYgdGVtcGxhdGVzIHRoZXNlIGNsYXNzIGRlZmluaXRpb25zCisgIC8vIHdpbGwgYmUgdW5uZWNlc3NhcnkuCisgIHRlbXBsYXRlPGNsYXNzIF9WYWx1ZSwKKwkgICBjbGFzcyBfSGFzaCA9IGhhc2g8X1ZhbHVlPiwKKwkgICBjbGFzcyBfUHJlZCA9IHN0ZDo6ZXF1YWxfdG88X1ZhbHVlPiwKKwkgICBjbGFzcyBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxfVmFsdWU+LAorCSAgIGJvb2wgX19jYWNoZV9oYXNoX2NvZGUgPSBmYWxzZT4KKyAgICBjbGFzcyBfX3Vub3JkZXJlZF9zZXQKKyAgICA6IHB1YmxpYyBfSGFzaHRhYmxlPF9WYWx1ZSwgX1ZhbHVlLCBfQWxsb2MsCisJCQlzdGQ6Ol9JZGVudGl0eTxfVmFsdWU+LCBfUHJlZCwKKwkJCV9IYXNoLCBfX2RldGFpbDo6X01vZF9yYW5nZV9oYXNoaW5nLAorCQkJX19kZXRhaWw6Ol9EZWZhdWx0X3JhbmdlZF9oYXNoLAorCQkJX19kZXRhaWw6Ol9QcmltZV9yZWhhc2hfcG9saWN5LAorCQkJX19jYWNoZV9oYXNoX2NvZGUsIHRydWUsIHRydWU+CisgICAgeworICAgICAgdHlwZWRlZiBfSGFzaHRhYmxlPF9WYWx1ZSwgX1ZhbHVlLCBfQWxsb2MsCisJCQkgc3RkOjpfSWRlbnRpdHk8X1ZhbHVlPiwgX1ByZWQsCisJCQkgX0hhc2gsIF9fZGV0YWlsOjpfTW9kX3JhbmdlX2hhc2hpbmcsCisJCQkgX19kZXRhaWw6Ol9EZWZhdWx0X3JhbmdlZF9oYXNoLAorCQkJIF9fZGV0YWlsOjpfUHJpbWVfcmVoYXNoX3BvbGljeSwKKwkJCSBfX2NhY2hlX2hhc2hfY29kZSwgdHJ1ZSwgdHJ1ZT4KKyAgICAgICAgX0Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aGFzaGVyICAgICAgICAgIGhhc2hlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmtleV9lcXVhbCAgICAgICBrZXlfZXF1YWw7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSAgYWxsb2NhdG9yX3R5cGU7CisgICAgICAKKyAgICAgIGV4cGxpY2l0CisgICAgICBfX3Vub3JkZXJlZF9zZXQoc2l6ZV90eXBlIF9fbiA9IDEwLAorCQkgICAgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJICAgICAgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLAorCQkgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19uLCBfX2hmLCBfX2RldGFpbDo6X01vZF9yYW5nZV9oYXNoaW5nKCksCisJICAgICAgX19kZXRhaWw6Ol9EZWZhdWx0X3JhbmdlZF9oYXNoKCksIF9fZXFsLAorCSAgICAgIHN0ZDo6X0lkZW50aXR5PF9WYWx1ZT4oKSwgX19hKQorICAgICAgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBfX3Vub3JkZXJlZF9zZXQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIAorCQkJc2l6ZV90eXBlIF9fbiA9IDEwLAorCQkJY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksIAorCQkJY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLCAKKwkJCWNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX0Jhc2UoX19mLCBfX2wsIF9fbiwgX19oZiwgX19kZXRhaWw6Ol9Nb2RfcmFuZ2VfaGFzaGluZygpLAorCQlfX2RldGFpbDo6X0RlZmF1bHRfcmFuZ2VkX2hhc2goKSwgX19lcWwsCisJCXN0ZDo6X0lkZW50aXR5PF9WYWx1ZT4oKSwgX19hKQorICAgICAgICB7IH0KKworICAgICAgX191bm9yZGVyZWRfc2V0KF9fdW5vcmRlcmVkX3NldCYmIF9feCkKKyAgICAgIDogX0Jhc2Uoc3RkOjpmb3J3YXJkPF9CYXNlPihfX3gpKSB7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9WYWx1ZSwKKwkgICBjbGFzcyBfSGFzaCA9IGhhc2g8X1ZhbHVlPiwKKwkgICBjbGFzcyBfUHJlZCA9IHN0ZDo6ZXF1YWxfdG88X1ZhbHVlPiwKKwkgICBjbGFzcyBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxfVmFsdWU+LAorCSAgIGJvb2wgX19jYWNoZV9oYXNoX2NvZGUgPSBmYWxzZT4KKyAgICBjbGFzcyBfX3Vub3JkZXJlZF9tdWx0aXNldAorICAgIDogcHVibGljIF9IYXNodGFibGU8X1ZhbHVlLCBfVmFsdWUsIF9BbGxvYywKKwkJCXN0ZDo6X0lkZW50aXR5PF9WYWx1ZT4sIF9QcmVkLAorCQkJX0hhc2gsIF9fZGV0YWlsOjpfTW9kX3JhbmdlX2hhc2hpbmcsCisJCQlfX2RldGFpbDo6X0RlZmF1bHRfcmFuZ2VkX2hhc2gsCisJCQlfX2RldGFpbDo6X1ByaW1lX3JlaGFzaF9wb2xpY3ksCisJCQlfX2NhY2hlX2hhc2hfY29kZSwgdHJ1ZSwgZmFsc2U+CisgICAgeworICAgICAgdHlwZWRlZiBfSGFzaHRhYmxlPF9WYWx1ZSwgX1ZhbHVlLCBfQWxsb2MsCisJCQkgc3RkOjpfSWRlbnRpdHk8X1ZhbHVlPiwgX1ByZWQsCisJCQkgX0hhc2gsIF9fZGV0YWlsOjpfTW9kX3JhbmdlX2hhc2hpbmcsCisJCQkgX19kZXRhaWw6Ol9EZWZhdWx0X3JhbmdlZF9oYXNoLAorCQkJIF9fZGV0YWlsOjpfUHJpbWVfcmVoYXNoX3BvbGljeSwKKwkJCSBfX2NhY2hlX2hhc2hfY29kZSwgdHJ1ZSwgZmFsc2U+CisgICAgICAgIF9CYXNlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6c2l6ZV90eXBlICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Omhhc2hlciAgICAgICAgICBoYXNoZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjprZXlfZXF1YWwgICAgICAga2V5X2VxdWFsOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgIGFsbG9jYXRvcl90eXBlOworICAgICAgCisgICAgICBleHBsaWNpdAorICAgICAgX191bm9yZGVyZWRfbXVsdGlzZXQoc2l6ZV90eXBlIF9fbiA9IDEwLAorCQkJICAgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCQkgICBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCQkgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19uLCBfX2hmLCBfX2RldGFpbDo6X01vZF9yYW5nZV9oYXNoaW5nKCksCisJICAgICAgX19kZXRhaWw6Ol9EZWZhdWx0X3JhbmdlZF9oYXNoKCksIF9fZXFsLAorCSAgICAgIHN0ZDo6X0lkZW50aXR5PF9WYWx1ZT4oKSwgX19hKQorICAgICAgeyB9CisKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIF9fdW5vcmRlcmVkX211bHRpc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCAKKwkJCSAgICAgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSBfX24gPSAwLAorCQkJICAgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwgCisJCQkgICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwgCisJCQkgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX0Jhc2UoX19mLCBfX2wsIF9fbiwgX19oZiwgX19kZXRhaWw6Ol9Nb2RfcmFuZ2VfaGFzaGluZygpLAorCQlfX2RldGFpbDo6X0RlZmF1bHRfcmFuZ2VkX2hhc2goKSwgX19lcWwsCisJCXN0ZDo6X0lkZW50aXR5PF9WYWx1ZT4oKSwgX19hKQorICAgICAgICB7IH0KKworICAgICAgX191bm9yZGVyZWRfbXVsdGlzZXQoX191bm9yZGVyZWRfbXVsdGlzZXQmJiBfX3gpCisgICAgICA6IF9CYXNlKHN0ZDo6Zm9yd2FyZDxfQmFzZT4oX194KSkgeyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoLCBjbGFzcyBfUHJlZCwgY2xhc3MgX0FsbG9jLAorCSAgIGJvb2wgX19jYWNoZV9oYXNoX2NvZGU+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKF9fdW5vcmRlcmVkX3NldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jLCBfX2NhY2hlX2hhc2hfY29kZT4mIF9feCwKKwkgX191bm9yZGVyZWRfc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2MsIF9fY2FjaGVfaGFzaF9jb2RlPiYgX195KQorICAgIHsgX194LnN3YXAoX195KTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0hhc2gsIGNsYXNzIF9QcmVkLCBjbGFzcyBfQWxsb2MsCisJICAgYm9vbCBfX2NhY2hlX2hhc2hfY29kZT4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoX191bm9yZGVyZWRfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsCisJIF9BbGxvYywgX19jYWNoZV9oYXNoX2NvZGU+JiBfX3gsCisJIF9fdW5vcmRlcmVkX211bHRpc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLAorCSBfQWxsb2MsIF9fY2FjaGVfaGFzaF9jb2RlPiYgX195KQorICAgIHsgX194LnN3YXAoX195KTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0hhc2gsIGNsYXNzIF9QcmVkLCBjbGFzcyBfQWxsb2MsCisJICAgYm9vbCBfX2NhY2hlX2hhc2hfY29kZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX191bm9yZGVyZWRfc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2MsCisJICAgICAgIF9fY2FjaGVfaGFzaF9jb2RlPiYgX194LAorCSAgICAgICBjb25zdCBfX3Vub3JkZXJlZF9zZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYywKKwkgICAgICAgX19jYWNoZV9oYXNoX2NvZGU+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX2VxdWFsKF9feSk7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoLCBjbGFzcyBfUHJlZCwgY2xhc3MgX0FsbG9jLAorCSAgIGJvb2wgX19jYWNoZV9oYXNoX2NvZGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9fdW5vcmRlcmVkX3NldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jLAorCSAgICAgICBfX2NhY2hlX2hhc2hfY29kZT4mIF9feCwKKwkgICAgICAgY29uc3QgX191bm9yZGVyZWRfc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2MsCisJICAgICAgIF9fY2FjaGVfaGFzaF9jb2RlPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoLCBjbGFzcyBfUHJlZCwgY2xhc3MgX0FsbG9jLAorCSAgIGJvb2wgX19jYWNoZV9oYXNoX2NvZGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9fdW5vcmRlcmVkX211bHRpc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2MsCisJICAgICAgIF9fY2FjaGVfaGFzaF9jb2RlPiYgX194LAorCSAgICAgICBjb25zdCBfX3Vub3JkZXJlZF9tdWx0aXNldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jLAorCSAgICAgICBfX2NhY2hlX2hhc2hfY29kZT4mIF9feSkKKyAgICB7IHJldHVybiBfX3guX01fZXF1YWwoX195KTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0hhc2gsIGNsYXNzIF9QcmVkLCBjbGFzcyBfQWxsb2MsCisJICAgYm9vbCBfX2NhY2hlX2hhc2hfY29kZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX191bm9yZGVyZWRfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYywKKwkgICAgICAgX19jYWNoZV9oYXNoX2NvZGU+JiBfX3gsCisJICAgICAgIGNvbnN0IF9fdW5vcmRlcmVkX211bHRpc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2MsCisJICAgICAgIF9fY2FjaGVfaGFzaF9jb2RlPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworICAvKioKKyAgICogIEBicmllZiBBIHN0YW5kYXJkIGNvbnRhaW5lciBjb21wb3NlZCBvZiB1bmlxdWUga2V5cyAoY29udGFpbmluZworICAgKiAgYXQgbW9zdCBvbmUgb2YgZWFjaCBrZXkgdmFsdWUpIGluIHdoaWNoIHRoZSBlbGVtZW50cycga2V5cyBhcmUKKyAgICogIHRoZSBlbGVtZW50cyB0aGVtc2VsdmVzLgorICAgKgorICAgKiAgQGluZ3JvdXAgdW5vcmRlcmVkX2Fzc29jaWF0aXZlX2NvbnRhaW5lcnMKKyAgICoKKyAgICogIE1lZXRzIHRoZSByZXF1aXJlbWVudHMgb2YgYSA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2NSI+Y29udGFpbmVyPC9hPiwgYW5kCisgICAqICA8YSBocmVmPSJ0YWJsZXMuaHRtbCN4eCI+dW5vcmRlcmVkIGFzc29jaWF0aXZlIGNvbnRhaW5lcjwvYT4KKyAgICoKKyAgICogIEBwYXJhbSAgVmFsdWUgIFR5cGUgb2Yga2V5IG9iamVjdHMuCisgICAqICBAcGFyYW0gIEhhc2ggIEhhc2hpbmcgZnVuY3Rpb24gb2JqZWN0IHR5cGUsIGRlZmF1bHRzIHRvIGhhc2g8VmFsdWU+LgorICAgKiAgQHBhcmFtICBQcmVkICBQcmVkaWNhdGUgZnVuY3Rpb24gb2JqZWN0IHR5cGUsIGRlZmF1bHRzIHRvIGVxdWFsX3RvPFZhbHVlPi4KKyAgICogIEBwYXJhbSAgQWxsb2MgIEFsbG9jYXRvciB0eXBlLCBkZWZhdWx0cyB0byBhbGxvY2F0b3I8S2V5Pi4KKyAgICovCisgIHRlbXBsYXRlPGNsYXNzIF9WYWx1ZSwKKwkgICBjbGFzcyBfSGFzaCA9IGhhc2g8X1ZhbHVlPiwKKwkgICBjbGFzcyBfUHJlZCA9IHN0ZDo6ZXF1YWxfdG88X1ZhbHVlPiwKKwkgICBjbGFzcyBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxfVmFsdWU+ID4KKyAgICBjbGFzcyB1bm9yZGVyZWRfc2V0CisgICAgOiBwdWJsaWMgX191bm9yZGVyZWRfc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+CisgICAgeworICAgICAgdHlwZWRlZiBfX3Vub3JkZXJlZF9zZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4gIF9CYXNlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aGFzaGVyICAgICAgICAgIGhhc2hlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmtleV9lcXVhbCAgICAgICBrZXlfZXF1YWw7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSAgYWxsb2NhdG9yX3R5cGU7CisgICAgICAKKyAgICAgIGV4cGxpY2l0CisgICAgICB1bm9yZGVyZWRfc2V0KHNpemVfdHlwZSBfX24gPSAxMCwKKwkJICAgIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLAorCQkgICAgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLAorCQkgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKyAgICAgIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdW5vcmRlcmVkX3NldChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgCisJCSAgICAgIHNpemVfdHlwZSBfX24gPSAxMCwKKwkJICAgICAgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksIAorCQkgICAgICBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksIAorCQkgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKwk6IF9CYXNlKF9fZiwgX19sLCBfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICAgIHsgfQorCisgICAgICB1bm9yZGVyZWRfc2V0KHVub3JkZXJlZF9zZXQmJiBfX3gpCisgICAgICA6IF9CYXNlKHN0ZDo6Zm9yd2FyZDxfQmFzZT4oX194KSkgeyB9CisKKyAgICAgIHVub3JkZXJlZF9zZXQoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJCSAgICBzaXplX3R5cGUgX19uID0gMTAsCisJCSAgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX0Jhc2UoX19sLmJlZ2luKCksIF9fbC5lbmQoKSwgX19uLCBfX2hmLCBfX2VxbCwgX19hKQorICAgICAgeyB9CisKKyAgICAgIHVub3JkZXJlZF9zZXQmCisgICAgICBvcGVyYXRvcj0odW5vcmRlcmVkX3NldCYmIF9feCkKKyAgICAgIHsKKwkvLyBOQjogRFIgMTIwNC4KKwkvLyBOQjogRFIgNjc1LgorCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+c3dhcChfX3gpOworCXJldHVybiAqdGhpczsJCisgICAgICB9CisKKyAgICAgIHVub3JkZXJlZF9zZXQmCisgICAgICBvcGVyYXRvcj0oaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7CisJdGhpcy0+Y2xlYXIoKTsKKwl0aGlzLT5pbnNlcnQoX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorICAgIH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgQSBzdGFuZGFyZCBjb250YWluZXIgY29tcG9zZWQgb2YgZXF1aXZhbGVudCBrZXlzCisgICAqICAocG9zc2libHkgY29udGFpbmluZyBtdWx0aXBsZSBvZiBlYWNoIGtleSB2YWx1ZSkgaW4gd2hpY2ggdGhlCisgICAqICBlbGVtZW50cycga2V5cyBhcmUgdGhlIGVsZW1lbnRzIHRoZW1zZWx2ZXMuCisgICAqCisgICAqICBAaW5ncm91cCB1bm9yZGVyZWRfYXNzb2NpYXRpdmVfY29udGFpbmVycworICAgKgorICAgKiAgTWVldHMgdGhlIHJlcXVpcmVtZW50cyBvZiBhIDxhIGhyZWY9InRhYmxlcy5odG1sIzY1Ij5jb250YWluZXI8L2E+LCBhbmQKKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sI3h4Ij51bm9yZGVyZWQgYXNzb2NpYXRpdmUgY29udGFpbmVyPC9hPgorICAgKgorICAgKiAgQHBhcmFtICBWYWx1ZSAgVHlwZSBvZiBrZXkgb2JqZWN0cy4KKyAgICogIEBwYXJhbSAgSGFzaCAgSGFzaGluZyBmdW5jdGlvbiBvYmplY3QgdHlwZSwgZGVmYXVsdHMgdG8gaGFzaDxWYWx1ZT4uCisgICAqICBAcGFyYW0gIFByZWQgIFByZWRpY2F0ZSBmdW5jdGlvbiBvYmplY3QgdHlwZSwgZGVmYXVsdHMgdG8gZXF1YWxfdG88VmFsdWU+LgorICAgKiAgQHBhcmFtICBBbGxvYyAgQWxsb2NhdG9yIHR5cGUsIGRlZmF1bHRzIHRvIGFsbG9jYXRvcjxLZXk+LgorICAgKi8KKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbHVlLAorCSAgIGNsYXNzIF9IYXNoID0gaGFzaDxfVmFsdWU+LAorCSAgIGNsYXNzIF9QcmVkID0gc3RkOjplcXVhbF90bzxfVmFsdWU+LAorCSAgIGNsYXNzIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPF9WYWx1ZT4gPgorICAgIGNsYXNzIHVub3JkZXJlZF9tdWx0aXNldAorICAgIDogcHVibGljIF9fdW5vcmRlcmVkX211bHRpc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+CisgICAgeworICAgICAgdHlwZWRlZiBfX3Vub3JkZXJlZF9tdWx0aXNldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiAgX0Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpoYXNoZXIgICAgICAgICAgaGFzaGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6a2V5X2VxdWFsICAgICAgIGtleV9lcXVhbDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlICBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIAorICAgICAgZXhwbGljaXQKKyAgICAgIHVub3JkZXJlZF9tdWx0aXNldChzaXplX3R5cGUgX19uID0gMTAsCisJCQkgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCQkgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLAorCQkJIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICB7IH0KKworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdW5vcmRlcmVkX211bHRpc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCAKKwkJCSAgIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgX19uID0gMCwKKwkJCSAgIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLCAKKwkJCSAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwgCisJCQkgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKwk6IF9CYXNlKF9fZiwgX19sLCBfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICAgIHsgfQorCisgICAgICB1bm9yZGVyZWRfbXVsdGlzZXQodW5vcmRlcmVkX211bHRpc2V0JiYgX194KQorICAgICAgOiBfQmFzZShzdGQ6OmZvcndhcmQ8X0Jhc2U+KF9feCkpIHsgfQorCisgICAgICB1bm9yZGVyZWRfbXVsdGlzZXQoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJCQkgc2l6ZV90eXBlIF9fbiA9IDEwLAorCQkJIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLAorCQkJIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJCSBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKwk6IF9CYXNlKF9fbC5iZWdpbigpLCBfX2wuZW5kKCksIF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKyAgICAgIHsgfQorCisgICAgICB1bm9yZGVyZWRfbXVsdGlzZXQmCisgICAgICBvcGVyYXRvcj0odW5vcmRlcmVkX211bHRpc2V0JiYgX194KQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorCS8vIE5COiBEUiA2NzUuCisJdGhpcy0+Y2xlYXIoKTsKKwl0aGlzLT5zd2FwKF9feCk7CisJcmV0dXJuICp0aGlzOwkKKyAgICAgIH0KKworICAgICAgdW5vcmRlcmVkX211bHRpc2V0JgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+aW5zZXJ0KF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0hhc2gsIGNsYXNzIF9QcmVkLCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHVub3JkZXJlZF9zZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgdW5vcmRlcmVkX3NldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgX194LnN3YXAoX195KTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0hhc2gsIGNsYXNzIF9QcmVkLCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHVub3JkZXJlZF9tdWx0aXNldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX194LAorCSB1bm9yZGVyZWRfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoLCBjbGFzcyBfUHJlZCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCB1bm9yZGVyZWRfc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IHVub3JkZXJlZF9zZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBfX3guX01fZXF1YWwoX195KTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0hhc2gsIGNsYXNzIF9QcmVkLCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHVub3JkZXJlZF9zZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgdW5vcmRlcmVkX3NldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoLCBjbGFzcyBfUHJlZCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCB1bm9yZGVyZWRfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgdW5vcmRlcmVkX211bHRpc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX2VxdWFsKF9feSk7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoLCBjbGFzcyBfUHJlZCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCB1bm9yZGVyZWRfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgdW5vcmRlcmVkX211bHRpc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQorCitfR0xJQkNYWF9FTkRfTkVTVEVEX05BTUVTUEFDRQorCisjZW5kaWYgLyogX1VOT1JERVJFRF9TRVRfSCAqLworCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvdmFsYXJyYXlfYWZ0ZXIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy92YWxhcnJheV9hZnRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MDg0MGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvdmFsYXJyYXlfYWZ0ZXIuaApAQCAtMCwwICsxLDU0OSBAQAorLy8gVGhlIHRlbXBsYXRlIGFuZCBpbmxpbmVzIGZvciB0aGUgLSotIEMrKyAtKi0gaW50ZXJuYWwgX01ldGEgY2xhc3MuCisKKy8vIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwKKy8vIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB2YWxhcnJheV9hZnRlci5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKy8vIFdyaXR0ZW4gYnkgR2FicmllbCBEb3MgUmVpcyA8R2FicmllbC5Eb3MtUmVpc0BjbWxhLmVucy1jYWNoYW4uZnI+CisKKyNpZm5kZWYgX1ZBTEFSUkFZX0FGVEVSX0gKKyNkZWZpbmUgX1ZBTEFSUkFZX0FGVEVSX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgLy8KKyAgLy8gZ3NsaWNlX2FycmF5IGNsb3N1cmUuCisgIC8vCisgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgY2xhc3MgX0dCYXNlCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworICAgICAgCisgICAgICBfR0Jhc2UgKGNvbnN0IF9Eb20mIF9fZSwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX19pKQorICAgICAgOiBfTV9leHByIChfX2UpLCBfTV9pbmRleChfX2kpIHt9CisgICAgICAKKyAgICAgIHZhbHVlX3R5cGUKKyAgICAgIG9wZXJhdG9yW10gKHNpemVfdCBfX2kpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9leHByW19NX2luZGV4W19faV1dOyB9CisgICAgICAKKyAgICAgIHNpemVfdAorICAgICAgc2l6ZSAoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faW5kZXguc2l6ZSgpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgY29uc3QgX0RvbSYJICAgICAgX01fZXhwcjsKKyAgICAgIGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9NX2luZGV4OworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIF9HQmFzZTxfQXJyYXk8X1RwPiA+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CisgICAgICAKKyAgICAgIF9HQmFzZSAoX0FycmF5PF9UcD4gX19hLCBjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfX2kpCisgICAgICA6IF9NX2FycmF5IChfX2EpLCBfTV9pbmRleChfX2kpIHt9CisgICAgICAKKyAgICAgIHZhbHVlX3R5cGUKKyAgICAgIG9wZXJhdG9yW10gKHNpemVfdCBfX2kpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9hcnJheS5fTV9kYXRhW19NX2luZGV4W19faV1dOyB9CisgICAgICAKKyAgICAgIHNpemVfdAorICAgICAgc2l6ZSAoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faW5kZXguc2l6ZSgpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgY29uc3QgX0FycmF5PF9UcD4gICAgICAgX01fYXJyYXk7CisgICAgICBjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfTV9pbmRleDsKKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgc3RydWN0IF9HQ2xvczxfRXhwciwgX0RvbT4KKyAgICA6IF9HQmFzZTxfRG9tPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0dCYXNlPF9Eb20+IF9CYXNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworICAgICAgCisgICAgICBfR0Nsb3MgKGNvbnN0IF9Eb20mIF9fZSwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX19pKQorICAgICAgOiBfQmFzZSAoX19lLCBfX2kpIHt9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9HQ2xvczxfVmFsQXJyYXksIF9UcD4KKyAgICA6IF9HQmFzZTxfQXJyYXk8X1RwPiA+CisgICAgeworICAgICAgdHlwZWRlZiBfR0Jhc2U8X0FycmF5PF9UcD4gPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKyAgICAgIAorICAgICAgX0dDbG9zIChfQXJyYXk8X1RwPiBfX2EsIGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9faSkKKyAgICAgIDogX0Jhc2UgKF9fYSwgX19pKSB7fQorICAgIH07CisKKyAgLy8KKyAgLy8gaW5kaXJlY3RfYXJyYXkgY2xvc3VyZQorICAvLworICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgIGNsYXNzIF9JQmFzZQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKworICAgICAgX0lCYXNlIChjb25zdCBfRG9tJiBfX2UsIGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9faSkKKyAgICAgIDogX01fZXhwciAoX19lKSwgX01faW5kZXggKF9faSkge30KKyAgICAgIAorICAgICAgdmFsdWVfdHlwZQorICAgICAgb3BlcmF0b3JbXSAoc2l6ZV90IF9faSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2V4cHJbX01faW5kZXhbX19pXV07IH0KKyAgICAgIAorICAgICAgc2l6ZV90CisgICAgICBzaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2luZGV4LnNpemUoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIGNvbnN0IF9Eb20mCSAgICAgIF9NX2V4cHI7CisgICAgICBjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfTV9pbmRleDsKKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgc3RydWN0IF9JQ2xvczxfRXhwciwgX0RvbT4KKyAgICA6IF9JQmFzZTxfRG9tPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0lCYXNlPF9Eb20+IF9CYXNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworICAgICAgCisgICAgICBfSUNsb3MgKGNvbnN0IF9Eb20mIF9fZSwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX19pKQorICAgICAgOiBfQmFzZSAoX19lLCBfX2kpIHt9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9JQ2xvczxfVmFsQXJyYXksIF9UcD4KKyAgICA6IF9JQmFzZTx2YWxhcnJheTxfVHA+ID4KKyAgICB7CisgICAgICB0eXBlZGVmIF9JQmFzZTx2YWxhcnJheTxfVHA+ID4gX0Jhc2U7CisgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOworICAgICAgCisgICAgICBfSUNsb3MgKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fYSwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX19pKQorICAgICAgOiBfQmFzZSAoX19hLCBfX2kpIHt9CisgICAgfTsKKyAgCisgIC8vCisgIC8vIGNsYXNzIF9FeHByCisgIC8vCisgIHRlbXBsYXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgX0V4cHIKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKKworICAgICAgX0V4cHIoY29uc3QgX0Nsb3MmKTsKKworICAgICAgY29uc3QgX0Nsb3MmIG9wZXJhdG9yKCkoKSBjb25zdDsKKworICAgICAgdmFsdWVfdHlwZSBvcGVyYXRvcltdKHNpemVfdCkgY29uc3Q7CisgICAgICB2YWxhcnJheTx2YWx1ZV90eXBlPiBvcGVyYXRvcltdKHNsaWNlKSBjb25zdDsKKyAgICAgIHZhbGFycmF5PHZhbHVlX3R5cGU+IG9wZXJhdG9yW10oY29uc3QgZ3NsaWNlJikgY29uc3Q7CisgICAgICB2YWxhcnJheTx2YWx1ZV90eXBlPiBvcGVyYXRvcltdKGNvbnN0IHZhbGFycmF5PGJvb2w+JikgY29uc3Q7CisgICAgICB2YWxhcnJheTx2YWx1ZV90eXBlPiBvcGVyYXRvcltdKGNvbnN0IHZhbGFycmF5PHNpemVfdD4mKSBjb25zdDsKKworICAgICAgX0V4cHI8X1VuQ2xvczxfX3VuYXJ5X3BsdXMsIHN0ZDo6X0V4cHIsIF9DbG9zPiwgdmFsdWVfdHlwZT4KKyAgICAgIG9wZXJhdG9yKygpIGNvbnN0OworCisgICAgICBfRXhwcjxfVW5DbG9zPF9fbmVnYXRlLCBzdGQ6Ol9FeHByLCBfQ2xvcz4sIHZhbHVlX3R5cGU+CisgICAgICBvcGVyYXRvci0oKSBjb25zdDsKKworICAgICAgX0V4cHI8X1VuQ2xvczxfX2JpdHdpc2Vfbm90LCBzdGQ6Ol9FeHByLCBfQ2xvcz4sIHZhbHVlX3R5cGU+CisgICAgICBvcGVyYXRvcn4oKSBjb25zdDsKKworICAgICAgX0V4cHI8X1VuQ2xvczxfX2xvZ2ljYWxfbm90LCBzdGQ6Ol9FeHByLCBfQ2xvcz4sIGJvb2w+CisgICAgICBvcGVyYXRvciEoKSBjb25zdDsKKworICAgICAgc2l6ZV90IHNpemUoKSBjb25zdDsKKyAgICAgIHZhbHVlX3R5cGUgc3VtKCkgY29uc3Q7CisKKyAgICAgIHZhbGFycmF5PHZhbHVlX3R5cGU+IHNoaWZ0KGludCkgY29uc3Q7CisgICAgICB2YWxhcnJheTx2YWx1ZV90eXBlPiBjc2hpZnQoaW50KSBjb25zdDsKKworICAgICAgdmFsdWVfdHlwZSBtaW4oKSBjb25zdDsKKyAgICAgIHZhbHVlX3R5cGUgbWF4KCkgY29uc3Q7CisKKyAgICAgIHZhbGFycmF5PHZhbHVlX3R5cGU+IGFwcGx5KHZhbHVlX3R5cGUgKCopKGNvbnN0IHZhbHVlX3R5cGUmKSkgY29uc3Q7CisgICAgICB2YWxhcnJheTx2YWx1ZV90eXBlPiBhcHBseSh2YWx1ZV90eXBlICgqKSh2YWx1ZV90eXBlKSkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgY29uc3QgX0Nsb3MgX01fY2xvc3VyZTsKKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lCisgICAgX0V4cHI8X0Nsb3MsIF9UcD46Ol9FeHByKGNvbnN0IF9DbG9zJiBfX2MpIDogX01fY2xvc3VyZShfX2MpIHt9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29uc3QgX0Nsb3MmCisgICAgX0V4cHI8X0Nsb3MsIF9UcD46Om9wZXJhdG9yKCkoKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX2Nsb3N1cmU7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICBfRXhwcjxfQ2xvcywgX1RwPjo6b3BlcmF0b3JbXShzaXplX3QgX19pKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX2Nsb3N1cmVbX19pXTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZhbGFycmF5PF9UcD4KKyAgICBfRXhwcjxfQ2xvcywgX1RwPjo6b3BlcmF0b3JbXShzbGljZSBfX3MpIGNvbnN0CisgICAgeworICAgICAgdmFsYXJyYXk8X1RwPiBfX3YgPSB2YWxhcnJheTxfVHA+KCp0aGlzKVtfX3NdOworICAgICAgcmV0dXJuIF9fdjsKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdmFsYXJyYXk8X1RwPgorICAgIF9FeHByPF9DbG9zLCBfVHA+OjpvcGVyYXRvcltdKGNvbnN0IGdzbGljZSYgX19ncykgY29uc3QKKyAgICB7CisgICAgICB2YWxhcnJheTxfVHA+IF9fdiA9IHZhbGFycmF5PF9UcD4oKnRoaXMpW19fZ3NdOworICAgICAgcmV0dXJuIF9fdjsKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdmFsYXJyYXk8X1RwPgorICAgIF9FeHByPF9DbG9zLCBfVHA+OjpvcGVyYXRvcltdKGNvbnN0IHZhbGFycmF5PGJvb2w+JiBfX20pIGNvbnN0CisgICAgeworICAgICAgdmFsYXJyYXk8X1RwPiBfX3YgPSB2YWxhcnJheTxfVHA+KCp0aGlzKVtfX21dOworICAgICAgcmV0dXJuIF9fdjsKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdmFsYXJyYXk8X1RwPgorICAgIF9FeHByPF9DbG9zLCBfVHA+OjpvcGVyYXRvcltdKGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9faSkgY29uc3QKKyAgICB7CisgICAgICB2YWxhcnJheTxfVHA+IF9fdiA9IHZhbGFycmF5PF9UcD4oKnRoaXMpW19faV07CisgICAgICByZXR1cm4gX192OworICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBzaXplX3QKKyAgICBfRXhwcjxfQ2xvcywgX1RwPjo6c2l6ZSgpIGNvbnN0CisgICAgeyByZXR1cm4gX01fY2xvc3VyZS5zaXplKCk7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2YWxhcnJheTxfVHA+CisgICAgX0V4cHI8X0Nsb3MsIF9UcD46OnNoaWZ0KGludCBfX24pIGNvbnN0CisgICAgeworICAgICAgdmFsYXJyYXk8X1RwPiBfX3YgPSB2YWxhcnJheTxfVHA+KCp0aGlzKS5zaGlmdChfX24pOworICAgICAgcmV0dXJuIF9fdjsKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdmFsYXJyYXk8X1RwPgorICAgIF9FeHByPF9DbG9zLCBfVHA+Ojpjc2hpZnQoaW50IF9fbikgY29uc3QKKyAgICB7CisgICAgICB2YWxhcnJheTxfVHA+IF9fdiA9IHZhbGFycmF5PF9UcD4oKnRoaXMpLmNzaGlmdChfX24pOworICAgICAgcmV0dXJuIF9fdjsKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdmFsYXJyYXk8X1RwPgorICAgIF9FeHByPF9DbG9zLCBfVHA+OjphcHBseShfVHAgX19mKGNvbnN0IF9UcCYpKSBjb25zdAorICAgIHsKKyAgICAgIHZhbGFycmF5PF9UcD4gX192ID0gdmFsYXJyYXk8X1RwPigqdGhpcykuYXBwbHkoX19mKTsKKyAgICAgIHJldHVybiBfX3Y7CisgICAgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZhbGFycmF5PF9UcD4KKyAgICBfRXhwcjxfQ2xvcywgX1RwPjo6YXBwbHkoX1RwIF9fZihfVHApKSBjb25zdAorICAgIHsKKyAgICAgIHZhbGFycmF5PF9UcD4gX192ID0gdmFsYXJyYXk8X1RwPigqdGhpcykuYXBwbHkoX19mKTsKKyAgICAgIHJldHVybiBfX3Y7CisgICAgfQorCisgIC8vIFhYWDogcmVwbGFjZSB0aGlzIHdpdGggYSBtb3JlIHJvYnVzdCBzdW1tYXRpb24gYWxnb3JpdGhtLgorICB0ZW1wbGF0ZTxjbGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICBfRXhwcjxfQ2xvcywgX1RwPjo6c3VtKCkgY29uc3QKKyAgICB7CisgICAgICBzaXplX3QgX19uID0gX01fY2xvc3VyZS5zaXplKCk7CisgICAgICBpZiAoX19uID09IDApCisJcmV0dXJuIF9UcCgpOworICAgICAgZWxzZQorCXsKKwkgIF9UcCBfX3MgPSBfTV9jbG9zdXJlWy0tX19uXTsKKwkgIHdoaWxlIChfX24gIT0gMCkKKwkgICAgX19zICs9IF9NX2Nsb3N1cmVbLS1fX25dOworCSAgcmV0dXJuIF9fczsKKyAgICAgICAgfQorICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICBfRXhwcjxfQ2xvcywgX1RwPjo6bWluKCkgY29uc3QKKyAgICB7IHJldHVybiBfX3ZhbGFycmF5X21pbihfTV9jbG9zdXJlKTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9UcAorICAgIF9FeHByPF9DbG9zLCBfVHA+OjptYXgoKSBjb25zdAorICAgIHsgcmV0dXJuIF9fdmFsYXJyYXlfbWF4KF9NX2Nsb3N1cmUpOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0RvbSwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfRXhwcjxfVW5DbG9zPF9fbG9naWNhbF9ub3QsIF9FeHByLCBfRG9tPiwgYm9vbD4KKyAgICBfRXhwcjxfRG9tLCBfVHA+OjpvcGVyYXRvciEoKSBjb25zdAorICAgIHsKKyAgICAgIHR5cGVkZWYgX1VuQ2xvczxfX2xvZ2ljYWxfbm90LCBzdGQ6Ol9FeHByLCBfRG9tPiBfQ2xvc3VyZTsKKyAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgYm9vbD4oX0Nsb3N1cmUodGhpcy0+X01fY2xvc3VyZSkpOworICAgIH0KKworI2RlZmluZSBfREVGSU5FX0VYUFJfVU5BUllfT1BFUkFUT1IoX09wLCBfTmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHRlbXBsYXRlPGNsYXNzIF9Eb20sIHR5cGVuYW1lIF9UcD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpbmxpbmUgX0V4cHI8X1VuQ2xvczxfTmFtZSwgc3RkOjpfRXhwciwgX0RvbT4sIF9UcD4gICAgICAgICAgICAgICAgICAgXAorICAgIF9FeHByPF9Eb20sIF9UcD46Om9wZXJhdG9yIF9PcCgpIGNvbnN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHR5cGVkZWYgX1VuQ2xvczxfTmFtZSwgc3RkOjpfRXhwciwgX0RvbT4gX0Nsb3N1cmU7ICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+KF9DbG9zdXJlKHRoaXMtPl9NX2Nsb3N1cmUpKTsgICAgICAgICAgICBcCisgICAgfQorCisgICAgX0RFRklORV9FWFBSX1VOQVJZX09QRVJBVE9SKCssIF9fdW5hcnlfcGx1cykKKyAgICBfREVGSU5FX0VYUFJfVU5BUllfT1BFUkFUT1IoLSwgX19uZWdhdGUpCisgICAgX0RFRklORV9FWFBSX1VOQVJZX09QRVJBVE9SKH4sIF9fYml0d2lzZV9ub3QpCisKKyN1bmRlZiBfREVGSU5FX0VYUFJfVU5BUllfT1BFUkFUT1IKKworI2RlZmluZSBfREVGSU5FX0VYUFJfQklOQVJZX09QRVJBVE9SKF9PcCwgX05hbWUpICAgICAgICAgICAgICAgICAgICAgICAgXAorICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+CQkJCQlcCisgICAgaW5saW5lIF9FeHByPF9CaW5DbG9zPF9OYW1lLCBfRXhwciwgX0V4cHIsIF9Eb20xLCBfRG9tMj4sICAgICAgICAgICBcCisgICAgICAgICAgIHR5cGVuYW1lIF9fZnVuPF9OYW1lLCB0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBcCisgICAgb3BlcmF0b3IgX09wKGNvbnN0IF9FeHByPF9Eb20xLCB0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT4mIF9fdiwgICBcCisJICAgICAgICAgY29uc3QgX0V4cHI8X0RvbTIsIHR5cGVuYW1lIF9Eb20yOjp2YWx1ZV90eXBlPiYgX193KSAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX0FyZzsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19mdW48X05hbWUsIF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7ICAgICAgICAgIFwKKyAgICAgIHR5cGVkZWYgX0JpbkNsb3M8X05hbWUsIF9FeHByLCBfRXhwciwgX0RvbTEsIF9Eb20yPiBfQ2xvc3VyZTsgICAgIFwKKyAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1ZhbHVlPihfQ2xvc3VyZShfX3YoKSwgX193KCkpKTsgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X05hbWUsIF9FeHByLCBfQ29uc3RhbnQsIF9Eb20sICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICB0eXBlbmFtZSBfX2Z1bjxfTmFtZSwgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBcCisgICAgb3BlcmF0b3IgX09wKGNvbnN0IF9FeHByPF9Eb20sIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsICAgICBcCisgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCkgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZnVuPF9OYW1lLCBfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyAgICAgICAgICBcCisgICAgICB0eXBlZGVmIF9CaW5DbG9zPF9OYW1lLCBfRXhwciwgX0NvbnN0YW50LCBfRG9tLCBfQXJnPiBfQ2xvc3VyZTsgICBcCisgICAgICByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9WYWx1ZT4oX0Nsb3N1cmUoX192KCksIF9fdCkpOyAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHRlbXBsYXRlPGNsYXNzIF9Eb20+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaW5saW5lIF9FeHByPF9CaW5DbG9zPF9OYW1lLCBfQ29uc3RhbnQsIF9FeHByLCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsIF9Eb20+LCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgdHlwZW5hbWUgX19mdW48X05hbWUsIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gXAorICAgIG9wZXJhdG9yIF9PcChjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QsICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICBjb25zdCBfRXhwcjxfRG9tLCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2Z1bjxfTmFtZSwgX0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgICAgICAgICAgXAorICAgICAgdHlwZWRlZiBfQmluQ2xvczxfTmFtZSwgX0NvbnN0YW50LCBfRXhwciwgX0FyZywgX0RvbT4gX0Nsb3N1cmU7ICAgXAorICAgICAgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVmFsdWU+KF9DbG9zdXJlKF9fdCwgX192KCkpKTsgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlubGluZSBfRXhwcjxfQmluQ2xvczxfTmFtZSwgX0V4cHIsIF9WYWxBcnJheSwgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBfRG9tLCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgICAgICAgICAgICAgXAorICAgICAgICAgICAgIHR5cGVuYW1lIF9fZnVuPF9OYW1lLCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IFwKKyAgICBvcGVyYXRvciBfT3AoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdikgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19mdW48X05hbWUsIF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7ICAgICAgICAgIFwKKyAgICAgIHR5cGVkZWYgX0JpbkNsb3M8X05hbWUsIF9FeHByLCBfVmFsQXJyYXksIF9Eb20sIF9Bcmc+IF9DbG9zdXJlOyAgIFwKKyAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1ZhbHVlPihfQ2xvc3VyZShfX2UoKSwgX192KSk7ICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X05hbWUsIF9WYWxBcnJheSwgX0V4cHIsICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSwgX0RvbT4sICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICB0eXBlbmFtZSBfX2Z1bjxfTmFtZSwgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBcCisgICAgb3BlcmF0b3IgX09wKGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsICAgICAgICBcCisgICAgICAgICAgICAgICAgIGNvbnN0IF9FeHByPF9Eb20sIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZnVuPF9OYW1lLCBfVHA+OjpyZXN1bHRfdHlwZSBfVmFsdWU7ICAgICAgICAgICBcCisgICAgICB0eXBlZGVmIF9CaW5DbG9zPF9OYW1lLCBfVmFsQXJyYXksIF9FeHByLCBfVHAsIF9Eb20+IF9DbG9zdXJlOyAgICBcCisgICAgICByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9WYWx1ZT4oX0Nsb3N1cmUoX192LCBfX2UgKCkpKTsgICAgICAgICAgICBcCisgICAgfQorCisgICAgX0RFRklORV9FWFBSX0JJTkFSWV9PUEVSQVRPUigrLCBfX3BsdXMpCisgICAgX0RFRklORV9FWFBSX0JJTkFSWV9PUEVSQVRPUigtLCBfX21pbnVzKQorICAgIF9ERUZJTkVfRVhQUl9CSU5BUllfT1BFUkFUT1IoKiwgX19tdWx0aXBsaWVzKQorICAgIF9ERUZJTkVfRVhQUl9CSU5BUllfT1BFUkFUT1IoLywgX19kaXZpZGVzKQorICAgIF9ERUZJTkVfRVhQUl9CSU5BUllfT1BFUkFUT1IoJSwgX19tb2R1bHVzKQorICAgIF9ERUZJTkVfRVhQUl9CSU5BUllfT1BFUkFUT1IoXiwgX19iaXR3aXNlX3hvcikKKyAgICBfREVGSU5FX0VYUFJfQklOQVJZX09QRVJBVE9SKCYsIF9fYml0d2lzZV9hbmQpCisgICAgX0RFRklORV9FWFBSX0JJTkFSWV9PUEVSQVRPUih8LCBfX2JpdHdpc2Vfb3IpCisgICAgX0RFRklORV9FWFBSX0JJTkFSWV9PUEVSQVRPUig8PCwgX19zaGlmdF9sZWZ0KQorICAgIF9ERUZJTkVfRVhQUl9CSU5BUllfT1BFUkFUT1IoPj4sIF9fc2hpZnRfcmlnaHQpCisgICAgX0RFRklORV9FWFBSX0JJTkFSWV9PUEVSQVRPUigmJiwgX19sb2dpY2FsX2FuZCkKKyAgICBfREVGSU5FX0VYUFJfQklOQVJZX09QRVJBVE9SKHx8LCBfX2xvZ2ljYWxfb3IpCisgICAgX0RFRklORV9FWFBSX0JJTkFSWV9PUEVSQVRPUig9PSwgX19lcXVhbF90bykKKyAgICBfREVGSU5FX0VYUFJfQklOQVJZX09QRVJBVE9SKCE9LCBfX25vdF9lcXVhbF90bykKKyAgICBfREVGSU5FX0VYUFJfQklOQVJZX09QRVJBVE9SKDwsIF9fbGVzcykKKyAgICBfREVGSU5FX0VYUFJfQklOQVJZX09QRVJBVE9SKD4sIF9fZ3JlYXRlcikKKyAgICBfREVGSU5FX0VYUFJfQklOQVJZX09QRVJBVE9SKDw9LCBfX2xlc3NfZXF1YWwpCisgICAgX0RFRklORV9FWFBSX0JJTkFSWV9PUEVSQVRPUig+PSwgX19ncmVhdGVyX2VxdWFsKQorCisjdW5kZWYgX0RFRklORV9FWFBSX0JJTkFSWV9PUEVSQVRPUgorCisjZGVmaW5lIF9ERUZJTkVfRVhQUl9VTkFSWV9GVU5DVElPTihfTmFtZSwgX1VOYW1lKSAgICAgICAgICAgICAgICAgICAgICAgXAorICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpbmxpbmUgX0V4cHI8X1VuQ2xvczxfVU5hbWUsIF9FeHByLCBfRG9tPiwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9OYW1lKGNvbnN0IF9FeHByPF9Eb20sIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdHlwZWRlZiBfVW5DbG9zPF9VTmFtZSwgX0V4cHIsIF9Eb20+IF9DbG9zdXJlOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPihfQ2xvc3VyZShfX2UoKSkpOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaW5saW5lIF9FeHByPF9VbkNsb3M8X1VOYW1lLCBfVmFsQXJyYXksIF9UcD4sIF9UcD4gICAgICAgICAgICAgICAgICAgXAorICAgIF9OYW1lKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB0eXBlZGVmIF9VbkNsb3M8X1VOYW1lLCBfVmFsQXJyYXksIF9UcD4gX0Nsb3N1cmU7ICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+KF9DbG9zdXJlKF9fdikpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKyAgICBfREVGSU5FX0VYUFJfVU5BUllfRlVOQ1RJT04oYWJzLCBfQWJzKQorICAgIF9ERUZJTkVfRVhQUl9VTkFSWV9GVU5DVElPTihjb3MsIF9Db3MpCisgICAgX0RFRklORV9FWFBSX1VOQVJZX0ZVTkNUSU9OKGFjb3MsIF9BY29zKQorICAgIF9ERUZJTkVfRVhQUl9VTkFSWV9GVU5DVElPTihjb3NoLCBfQ29zaCkKKyAgICBfREVGSU5FX0VYUFJfVU5BUllfRlVOQ1RJT04oc2luLCBfU2luKQorICAgIF9ERUZJTkVfRVhQUl9VTkFSWV9GVU5DVElPTihhc2luLCBfQXNpbikKKyAgICBfREVGSU5FX0VYUFJfVU5BUllfRlVOQ1RJT04oc2luaCwgX1NpbmgpCisgICAgX0RFRklORV9FWFBSX1VOQVJZX0ZVTkNUSU9OKHRhbiwgX1RhbikKKyAgICBfREVGSU5FX0VYUFJfVU5BUllfRlVOQ1RJT04odGFuaCwgX1RhbmgpCisgICAgX0RFRklORV9FWFBSX1VOQVJZX0ZVTkNUSU9OKGF0YW4sIF9BdGFuKQorICAgIF9ERUZJTkVfRVhQUl9VTkFSWV9GVU5DVElPTihleHAsIF9FeHApCisgICAgX0RFRklORV9FWFBSX1VOQVJZX0ZVTkNUSU9OKGxvZywgX0xvZykKKyAgICBfREVGSU5FX0VYUFJfVU5BUllfRlVOQ1RJT04obG9nMTAsIF9Mb2cxMCkKKyAgICBfREVGSU5FX0VYUFJfVU5BUllfRlVOQ1RJT04oc3FydCwgX1NxcnQpCisKKyN1bmRlZiBfREVGSU5FX0VYUFJfVU5BUllfRlVOQ1RJT04KKworI2RlZmluZSBfREVGSU5FX0VYUFJfQklOQVJZX0ZVTkNUSU9OKF9GdW4sIF9VRnVuKQkJICAgICAgIFwKKyAgdGVtcGxhdGU8Y2xhc3MgX0RvbTEsIGNsYXNzIF9Eb20yPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlubGluZSBfRXhwcjxfQmluQ2xvczxfVUZ1biwgX0V4cHIsIF9FeHByLCBfRG9tMSwgX0RvbTI+LCAgICAgICAgICBcCisJCSB0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0Z1bihjb25zdCBfRXhwcjxfRG9tMSwgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+JiBfX2UxLCAgICAgICAgIFwKKwkgY29uc3QgX0V4cHI8X0RvbTIsIHR5cGVuYW1lIF9Eb20yOjp2YWx1ZV90eXBlPiYgX19lMikJICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZSBfVHA7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB0eXBlZGVmIF9CaW5DbG9zPF9VRnVuLCBfRXhwciwgX0V4cHIsIF9Eb20xLCBfRG9tMj4gX0Nsb3N1cmU7ICAgIFwKKyAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPihfQ2xvc3VyZShfX2UxKCksIF9fZTIoKSkpOyAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlubGluZSBfRXhwcjxfQmluQ2xvczxfVUZ1biwgX0V4cHIsIF9WYWxBcnJheSwgX0RvbSwgICAgICAgICAgICAgICBcCisJCQkgIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LCAgICAgICAgICAgICAgICAgIFwKKwkJIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfRnVuKGNvbnN0IF9FeHByPF9Eb20sIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UsICAgICAgICAgICAgXAorCSBjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB0eXBlZGVmIF9CaW5DbG9zPF9VRnVuLCBfRXhwciwgX1ZhbEFycmF5LCBfRG9tLCBfVHA+IF9DbG9zdXJlOyAgIFwKKyAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPihfQ2xvc3VyZShfX2UoKSwgX192KSk7ICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlubGluZSBfRXhwcjxfQmluQ2xvczxfVUZ1biwgX1ZhbEFycmF5LCBfRXhwciwgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsIF9Eb20+LCAgICAgICAgICAgIFwKKwkJIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfRnVuKGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbGFycmF5PiYgX192LCAgICAgICAgICAgICAgICAgXAorCSBjb25zdCBfRXhwcjxfRG9tLCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB0eXBlZGVmIF9CaW5DbG9zPF9VRnVuLCBfVmFsQXJyYXksIF9FeHByLCBfVHAsIF9Eb20+IF9DbG9zdXJlOyAgIFwKKyAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPihfQ2xvc3VyZShfX3YsIF9fZSgpKSk7ICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlubGluZSBfRXhwcjxfQmluQ2xvczxfVUZ1biwgX0V4cHIsIF9Db25zdGFudCwgX0RvbSwgICAgICAgICAgICAgICBcCisJCQkgIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LCAgICAgICAgICAgICAgICAgIFwKKwkJIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfRnVuKGNvbnN0IF9FeHByPF9Eb20sIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UsICAgICAgICAgICAgXAorCSBjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB0eXBlZGVmIF9CaW5DbG9zPF9VRnVuLCBfRXhwciwgX0NvbnN0YW50LCBfRG9tLCBfVHA+IF9DbG9zdXJlOyAgIFwKKyAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPihfQ2xvc3VyZShfX2UoKSwgX190KSk7ICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlubGluZSBfRXhwcjxfQmluQ2xvczxfVUZ1biwgX0NvbnN0YW50LCBfRXhwciwgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsIF9Eb20+LCAgICAgICAgICAgIFwKKwkJIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfRnVuKGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCwgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSBjb25zdCBfRXhwcjxfRG9tLCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB0eXBlZGVmIF9CaW5DbG9zPF9VRnVuLCBfQ29uc3RhbnQsIF9FeHByLCBfVHAsIF9Eb20+IF9DbG9zdXJlOyAgIFwKKyAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPihfQ2xvc3VyZShfX3QsIF9fZSgpKSk7ICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlubGluZSBfRXhwcjxfQmluQ2xvczxfVUZ1biwgX1ZhbEFycmF5LCBfVmFsQXJyYXksIF9UcCwgX1RwPiwgX1RwPiBcCisgICAgX0Z1bihjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YsIGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdykgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdHlwZWRlZiBfQmluQ2xvczxfVUZ1biwgX1ZhbEFycmF5LCBfVmFsQXJyYXksIF9UcCwgX1RwPiBfQ2xvc3VyZTtcCisgICAgICByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4oX0Nsb3N1cmUoX192LCBfX3cpKTsgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X1VGdW4sIF9WYWxBcnJheSwgX0NvbnN0YW50LCBfVHAsIF9UcD4sIF9UcD4gXAorICAgIF9GdW4oY29uc3QgdmFsYXJyYXk8X1RwPiYgX192LCBjb25zdCBfVHAmIF9fdCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHR5cGVkZWYgX0JpbkNsb3M8X1VGdW4sIF9WYWxBcnJheSwgX0NvbnN0YW50LCBfVHAsIF9UcD4gX0Nsb3N1cmU7XAorICAgICAgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+KF9DbG9zdXJlKF9fdiwgX190KSk7ICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkJCQkJICAgICAgIFwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlubGluZSBfRXhwcjxfQmluQ2xvczxfVUZ1biwgX0NvbnN0YW50LCBfVmFsQXJyYXksIF9UcCwgX1RwPiwgX1RwPiBcCisgICAgX0Z1bihjb25zdCBfVHAmIF9fdCwgY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdHlwZWRlZiBfQmluQ2xvczxfVUZ1biwgX0NvbnN0YW50LCBfVmFsQXJyYXksIF9UcCwgX1RwPiBfQ2xvc3VyZTtcCisgICAgICByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4oX0Nsb3N1cmUoX190LCBfX3YpKTsgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKK19ERUZJTkVfRVhQUl9CSU5BUllfRlVOQ1RJT04oYXRhbjIsIF9BdGFuMikKK19ERUZJTkVfRVhQUl9CSU5BUllfRlVOQ1RJT04ocG93LCBfUG93KQorCisjdW5kZWYgX0RFRklORV9FWFBSX0JJTkFSWV9GVU5DVElPTgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZiAvKiBfQ1BQX1ZBTEFSUkFZX0FGVEVSX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy92YWxhcnJheV9hcnJheS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3ZhbGFycmF5X2FycmF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEyYjMzNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy92YWxhcnJheV9hcnJheS5oCkBAIC0wLDAgKzEsNjk0IEBACisvLyBUaGUgdGVtcGxhdGUgYW5kIGlubGluZXMgZm9yIHRoZSAtKi0gQysrIC0qLSBpbnRlcm5hbCBfQXJyYXkgaGVscGVyIGNsYXNzLgorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsCisvLyAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdmFsYXJyYXlfYXJyYXkuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisvLyBXcml0dGVuIGJ5IEdhYnJpZWwgRG9zIFJlaXMgPEdhYnJpZWwuRG9zLVJlaXNARFBUTWF0aHMuRU5TLUNhY2hhbi5Gcj4KKworI2lmbmRlZiBfVkFMQVJSQVlfQVJSQVlfSAorI2RlZmluZSBfVkFMQVJSQVlfQVJSQVlfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Yml0cy9jcHBfdHlwZV90cmFpdHMuaD4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPG5ldz4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvLworICAvLyBIZWxwZXIgZnVuY3Rpb25zIG9uIHJhdyBwb2ludGVycworICAvLworCisgIC8vIFdlIGdldCBtZW1vcnkgYnkgdGhlIG9sZCBmYXNoaW9uIHdheQorICBpbmxpbmUgdm9pZCoKKyAgX192YWxhcnJheV9nZXRfbWVtb3J5KHNpemVfdCBfX24pCisgIHsgcmV0dXJuIG9wZXJhdG9yIG5ldyhfX24pOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAqX19yZXN0cmljdF9fCisgICAgX192YWxhcnJheV9nZXRfc3RvcmFnZShzaXplX3QgX19uKQorICAgIHsKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxfVHAqX19yZXN0cmljdF9fPgorCShzdGQ6Ol9fdmFsYXJyYXlfZ2V0X21lbW9yeShfX24gKiBzaXplb2YoX1RwKSkpOworICAgIH0KKworICAvLyBSZXR1cm4gbWVtb3J5IHRvIHRoZSBzeXN0ZW0KKyAgaW5saW5lIHZvaWQKKyAgX192YWxhcnJheV9yZWxlYXNlX21lbW9yeSh2b2lkKiBfX3ApCisgIHsgb3BlcmF0b3IgZGVsZXRlKF9fcCk7IH0KKworICAvLyBUdXJuIGEgcmF3LW1lbW9yeSBpbnRvIGFuIGFycmF5IG9mIF9UcCBmaWxsZWQgd2l0aCBfVHAoKQorICAvLyBUaGlzIGlzIHJlcXVpcmVkIGluICd2YWxhcnJheTxUPiB2KG4pOycKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBib29sPgorICAgIHN0cnVjdCBfQXJyYXlfZGVmYXVsdF9jdG9yCisgICAgeworICAgICAgLy8gUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzbid0IGV4Y2VwdGlvbiBzYWZlLiAgQnV0CisgICAgICAvLyB2YWxhcnJheXMgYXJlbid0IHJlcXVpcmVkIHRvIGJlIGV4Y2VwdGlvbiBzYWZlLgorICAgICAgaW5saW5lIHN0YXRpYyB2b2lkCisgICAgICBfU19kb19pdChfVHAqIF9fYiwgX1RwKiBfX2UpCisgICAgICB7CisJd2hpbGUgKF9fYiAhPSBfX2UpCisJICBuZXcoX19iKyspIF9UcCgpOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfQXJyYXlfZGVmYXVsdF9jdG9yPF9UcCwgdHJ1ZT4KKyAgICB7CisgICAgICAvLyBGb3IgZnVuZGFtZW50YWwgdHlwZXMsIGl0IHN1ZmZpY2VzIHRvIHNheSAnbWVtc2V0KCknCisgICAgICBpbmxpbmUgc3RhdGljIHZvaWQKKyAgICAgIF9TX2RvX2l0KF9UcCogX19iLCBfVHAqIF9fZSkKKyAgICAgIHsgX19idWlsdGluX21lbXNldChfX2IsIDAsIChfX2UgLSBfX2IpICogc2l6ZW9mKF9UcCkpOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3ZhbGFycmF5X2RlZmF1bHRfY29uc3RydWN0KF9UcCogX19iLCBfVHAqIF9fZSkKKyAgICB7CisgICAgICBfQXJyYXlfZGVmYXVsdF9jdG9yPF9UcCwgX19pc19zY2FsYXI8X1RwPjo6X192YWx1ZT46Ol9TX2RvX2l0KF9fYiwgX19lKTsKKyAgICB9CisKKyAgLy8gVHVybiBhIHJhdy1tZW1vcnkgaW50byBhbiBhcnJheSBvZiBfVHAgZmlsbGVkIHdpdGggX190CisgIC8vIFRoaXMgaXMgdGhlIHJlcXVpcmVkIGluIHZhbGFycmF5PFQ+IHYobiwgdCkuICBBbHNvCisgIC8vIHVzZWQgaW4gdmFsYXJyYXk8Pjo6cmVzaXplKCkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgYm9vbD4KKyAgICBzdHJ1Y3QgX0FycmF5X2luaXRfY3RvcgorICAgIHsKKyAgICAgIC8vIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBpc24ndCBleGNlcHRpb24gc2FmZS4gIEJ1dAorICAgICAgLy8gdmFsYXJyYXlzIGFyZW4ndCByZXF1aXJlZCB0byBiZSBleGNlcHRpb24gc2FmZS4KKyAgICAgIGlubGluZSBzdGF0aWMgdm9pZAorICAgICAgX1NfZG9faXQoX1RwKiBfX2IsIF9UcCogX19lLCBjb25zdCBfVHAgX190KQorICAgICAgeworCXdoaWxlIChfX2IgIT0gX19lKQorCSAgbmV3KF9fYisrKSBfVHAoX190KTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX0FycmF5X2luaXRfY3RvcjxfVHAsIHRydWU+CisgICAgeworICAgICAgaW5saW5lIHN0YXRpYyB2b2lkCisgICAgICBfU19kb19pdChfVHAqIF9fYiwgX1RwKiBfX2UsIGNvbnN0IF9UcCBfX3QpCisgICAgICB7CisJd2hpbGUgKF9fYiAhPSBfX2UpCisJICAqX19iKysgPSBfX3Q7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3ZhbGFycmF5X2ZpbGxfY29uc3RydWN0KF9UcCogX19iLCBfVHAqIF9fZSwgY29uc3QgX1RwIF9fdCkKKyAgICB7CisgICAgICBfQXJyYXlfaW5pdF9jdG9yPF9UcCwgX19pc19wb2QoX1RwKT46Ol9TX2RvX2l0KF9fYiwgX19lLCBfX3QpOworICAgIH0KKworICAvLworICAvLyBjb3B5LWNvbnN0cnVjdCByYXcgYXJyYXkgW19fbywgKikgZnJvbSBwbGFpbiBhcnJheSBbX19iLCBfX2UpCisgIC8vIFdlIGNhbid0IGp1c3Qgc2F5ICdtZW1jcHkoKScKKyAgLy8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBib29sPgorICAgIHN0cnVjdCBfQXJyYXlfY29weV9jdG9yCisgICAgeworICAgICAgLy8gUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzbid0IGV4Y2VwdGlvbiBzYWZlLiAgQnV0CisgICAgICAvLyB2YWxhcnJheXMgYXJlbid0IHJlcXVpcmVkIHRvIGJlIGV4Y2VwdGlvbiBzYWZlLgorICAgICAgaW5saW5lIHN0YXRpYyB2b2lkCisgICAgICBfU19kb19pdChjb25zdCBfVHAqIF9fYiwgY29uc3QgX1RwKiBfX2UsIF9UcCogX19yZXN0cmljdF9fIF9fbykKKyAgICAgIHsKKwl3aGlsZSAoX19iICE9IF9fZSkKKwkgIG5ldyhfX28rKykgX1RwKCpfX2IrKyk7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9BcnJheV9jb3B5X2N0b3I8X1RwLCB0cnVlPgorICAgIHsKKyAgICAgIGlubGluZSBzdGF0aWMgdm9pZAorICAgICAgX1NfZG9faXQoY29uc3QgX1RwKiBfX2IsIGNvbnN0IF9UcCogX19lLCBfVHAqIF9fcmVzdHJpY3RfXyBfX28pCisgICAgICB7IF9fYnVpbHRpbl9tZW1jcHkoX19vLCBfX2IsIChfX2UgLSBfX2IpICogc2l6ZW9mKF9UcCkpOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0KGNvbnN0IF9UcCogX19iLCBjb25zdCBfVHAqIF9fZSwKKwkJCSAgICAgIF9UcCogX19yZXN0cmljdF9fIF9fbykKKyAgICB7CisgICAgICBfQXJyYXlfY29weV9jdG9yPF9UcCwgX19pc19wb2QoX1RwKT46Ol9TX2RvX2l0KF9fYiwgX19lLCBfX28pOworICAgIH0KKworICAvLyBjb3B5LWNvbnN0cnVjdCByYXcgYXJyYXkgW19fbywgKikgZnJvbSBzdHJpZGVkIGFycmF5IF9fYVs8X19uIDogX19zPl0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX192YWxhcnJheV9jb3B5X2NvbnN0cnVjdCAoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19hLCBzaXplX3QgX19uLAorCQkJICAgICAgIHNpemVfdCBfX3MsIF9UcCogX19yZXN0cmljdF9fIF9fbykKKyAgICB7CisgICAgICBpZiAoX19pc19wb2QoX1RwKSkKKwl3aGlsZSAoX19uLS0pCisJICB7CisJICAgICpfX28rKyA9ICpfX2E7CisJICAgIF9fYSArPSBfX3M7CisJICB9CisgICAgICBlbHNlCisJd2hpbGUgKF9fbi0tKQorCSAgeworCSAgICBuZXcoX19vKyspIF9UcCgqX19hKTsKKwkgICAgX19hICs9IF9fczsKKwkgIH0KKyAgICB9CisKKyAgLy8gY29weS1jb25zdHJ1Y3QgcmF3IGFycmF5IFtfX28sICopIGZyb20gaW5kZXhlZCBhcnJheSBfX2FbX19pWzxfX24+XV0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX192YWxhcnJheV9jb3B5X2NvbnN0cnVjdCAoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19hLAorCQkJICAgICAgIGNvbnN0IHNpemVfdCogX19yZXN0cmljdF9fIF9faSwKKwkJCSAgICAgICBfVHAqIF9fcmVzdHJpY3RfXyBfX28sIHNpemVfdCBfX24pCisgICAgeworICAgICAgaWYgKF9faXNfcG9kKF9UcCkpCisJd2hpbGUgKF9fbi0tKQorCSAgKl9fbysrID0gX19hWypfX2krK107CisgICAgICBlbHNlCisJd2hpbGUgKF9fbi0tKQorCSAgbmV3IChfX28rKykgX1RwKF9fYVsqX19pKytdKTsKKyAgICB9CisKKyAgLy8gRG8gdGhlIG5lY2Vzc2FyeSBjbGVhbnVwIHdoZW4gd2UncmUgZG9uZSB3aXRoIGFycmF5cy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX192YWxhcnJheV9kZXN0cm95X2VsZW1lbnRzKF9UcCogX19iLCBfVHAqIF9fZSkKKyAgICB7CisgICAgICBpZiAoIV9faXNfcG9kKF9UcCkpCisJd2hpbGUgKF9fYiAhPSBfX2UpCisJICB7CisJICAgIF9fYi0+fl9UcCgpOworCSAgICArK19fYjsKKwkgIH0KKyAgICB9CisKKyAgLy8gRmlsbCBhIHBsYWluIGFycmF5IF9fYVs8X19uPl0gd2l0aCBfX3QKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX192YWxhcnJheV9maWxsKF9UcCogX19yZXN0cmljdF9fIF9fYSwgc2l6ZV90IF9fbiwgY29uc3QgX1RwJiBfX3QpCisgICAgeworICAgICAgd2hpbGUgKF9fbi0tKQorCSpfX2ErKyA9IF9fdDsKKyAgICB9CisgIAorICAvLyBmaWxsIHN0cmlkZWQgYXJyYXkgX19hWzxfX24tMSA6IF9fcz5dIHdpdGggX190CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdmFsYXJyYXlfZmlsbChfVHAqIF9fcmVzdHJpY3RfXyBfX2EsIHNpemVfdCBfX24sCisJCSAgICBzaXplX3QgX19zLCBjb25zdCBfVHAmIF9fdCkKKyAgICB7IAorICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSwgX19hICs9IF9fcykKKwkqX19hID0gX190OworICAgIH0KKworICAvLyBmaWxsIGluZGlyZWN0IGFycmF5IF9fYVtfX2lbPF9fbj5dXSB3aXRoIF9faQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3ZhbGFycmF5X2ZpbGwoX1RwKiBfX3Jlc3RyaWN0X18gX19hLCBjb25zdCBzaXplX3QqIF9fcmVzdHJpY3RfXyBfX2ksCisJCSAgICBzaXplX3QgX19uLCBjb25zdCBfVHAmIF9fdCkKKyAgICB7CisgICAgICBmb3IgKHNpemVfdCBfX2ogPSAwOyBfX2ogPCBfX247ICsrX19qLCArK19faSkKKwlfX2FbKl9faV0gPSBfX3Q7CisgICAgfQorICAKKyAgLy8gY29weSBwbGFpbiBhcnJheSBfX2FbPF9fbj5dIGluIF9fYls8X19uPl0KKyAgLy8gRm9yIG5vbi1mdW5kYW1lbnRhbCB0eXBlcywgaXQgaXMgd3JvbmcgdG8gc2F5ICdtZW1jcHkoKScKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBib29sPgorICAgIHN0cnVjdCBfQXJyYXlfY29waWVyCisgICAgeworICAgICAgaW5saW5lIHN0YXRpYyB2b2lkCisgICAgICBfU19kb19pdChjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2EsIHNpemVfdCBfX24sIF9UcCogX19yZXN0cmljdF9fIF9fYikKKyAgICAgIHsKKwl3aGlsZShfX24tLSkKKwkgICpfX2IrKyA9ICpfX2ErKzsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX0FycmF5X2NvcGllcjxfVHAsIHRydWU+CisgICAgeworICAgICAgaW5saW5lIHN0YXRpYyB2b2lkCisgICAgICBfU19kb19pdChjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2EsIHNpemVfdCBfX24sIF9UcCogX19yZXN0cmljdF9fIF9fYikKKyAgICAgIHsgX19idWlsdGluX21lbWNweShfX2IsIF9fYSwgX19uICogc2l6ZW9mIChfVHApKTsgfQorICAgIH07CisKKyAgLy8gQ29weSBhIHBsYWluIGFycmF5IF9fYVs8X19uPl0gaW50byBhIHBsYXkgYXJyYXkgX19iWzw+XQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3ZhbGFycmF5X2NvcHkoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19hLCBzaXplX3QgX19uLAorCQkgICAgX1RwKiBfX3Jlc3RyaWN0X18gX19iKQorICAgIHsKKyAgICAgIF9BcnJheV9jb3BpZXI8X1RwLCBfX2lzX3BvZChfVHApPjo6X1NfZG9faXQoX19hLCBfX24sIF9fYik7CisgICAgfQorCisgIC8vIENvcHkgc3RyaWRlZCBhcnJheSBfX2FbPF9fbiA6IF9fcz5dIGluIHBsYWluIF9fYls8X19uPl0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX192YWxhcnJheV9jb3B5KGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9fYSwgc2l6ZV90IF9fbiwgc2l6ZV90IF9fcywKKwkJICAgIF9UcCogX19yZXN0cmljdF9fIF9fYikKKyAgICB7CisgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX247ICsrX19pLCArK19fYiwgX19hICs9IF9fcykKKwkqX19iID0gKl9fYTsKKyAgICB9CisKKyAgLy8gQ29weSBhIHBsYWluIGFycmF5ICBfX2FbPF9fbj5dIGludG8gYSBzdHJpZGVkIGFycmF5IF9fYls8X19uIDogX19zPl0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX192YWxhcnJheV9jb3B5KGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9fYSwgX1RwKiBfX3Jlc3RyaWN0X18gX19iLAorCQkgICAgc2l6ZV90IF9fbiwgc2l6ZV90IF9fcykKKyAgICB7CisgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX247ICsrX19pLCArK19fYSwgX19iICs9IF9fcykKKwkqX19iID0gKl9fYTsKKyAgICB9CisKKyAgLy8gQ29weSBzdHJpZGVkIGFycmF5IF9fc3JjWzxfX24gOiBfX3MxPl0gaW50byBhbm90aGVyCisgIC8vIHN0cmlkZWQgYXJyYXkgX19kc3RbPCA6IF9fczI+XS4gIFRoZWlyIHNpemVzIG11c3QgbWF0Y2guCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdmFsYXJyYXlfY29weShjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX3NyYywgc2l6ZV90IF9fbiwgc2l6ZV90IF9fczEsCisJCSAgICBfVHAqIF9fcmVzdHJpY3RfXyBfX2RzdCwgc2l6ZV90IF9fczIpCisgICAgeworICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSkKKwlfX2RzdFtfX2kgKiBfX3MyXSA9IF9fc3JjW19faSAqIF9fczFdOworICAgIH0KKworICAvLyBDb3B5IGFuIGluZGV4ZWQgYXJyYXkgX19hW19faVs8X19uPl1dIGluIHBsYWluIGFycmF5IF9fYls8X19uPl0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX192YWxhcnJheV9jb3B5KGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9fYSwKKwkJICAgIGNvbnN0IHNpemVfdCogX19yZXN0cmljdF9fIF9faSwKKwkJICAgIF9UcCogX19yZXN0cmljdF9fIF9fYiwgc2l6ZV90IF9fbikKKyAgICB7CisgICAgICBmb3IgKHNpemVfdCBfX2ogPSAwOyBfX2ogPCBfX247ICsrX19qLCArK19fYiwgKytfX2kpCisJKl9fYiA9IF9fYVsqX19pXTsKKyAgICB9CisKKyAgLy8gQ29weSBhIHBsYWluIGFycmF5IF9fYVs8X19uPl0gaW4gYW4gaW5kZXhlZCBhcnJheSBfX2JbX19pWzxfX24+XV0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX192YWxhcnJheV9jb3B5KGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9fYSwgc2l6ZV90IF9fbiwKKwkJICAgIF9UcCogX19yZXN0cmljdF9fIF9fYiwgY29uc3Qgc2l6ZV90KiBfX3Jlc3RyaWN0X18gX19pKQorICAgIHsKKyAgICAgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbjsgKytfX2osICsrX19hLCArK19faSkKKwlfX2JbKl9faV0gPSAqX19hOworICAgIH0KKworICAvLyBDb3B5IHRoZSBfX24gZmlyc3QgZWxlbWVudHMgb2YgYW4gaW5kZXhlZCBhcnJheSBfX3NyY1s8X19pPl0gaW50bworICAvLyBhbm90aGVyIGluZGV4ZWQgYXJyYXkgX19kc3RbPF9faj5dLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3ZhbGFycmF5X2NvcHkoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19zcmMsIHNpemVfdCBfX24sCisJCSAgICBjb25zdCBzaXplX3QqIF9fcmVzdHJpY3RfXyBfX2ksCisJCSAgICBfVHAqIF9fcmVzdHJpY3RfXyBfX2RzdCwgY29uc3Qgc2l6ZV90KiBfX3Jlc3RyaWN0X18gX19qKQorICAgIHsKKyAgICAgIGZvciAoc2l6ZV90IF9fayA9IDA7IF9fayA8IF9fbjsgKytfX2spCisJX19kc3RbKl9faisrXSA9IF9fc3JjWypfX2krK107CisgICAgfQorCisgIC8vCisgIC8vIENvbXB1dGUgdGhlIHN1bSBvZiBlbGVtZW50cyBpbiByYW5nZSBbX19mLCBfX2wpCisgIC8vIFRoaXMgaXMgYSBuYWl2ZSBhbGdvcml0aG0uICBJdCBzdWZmZXJzIGZyb20gY2FuY2VsbGluZy4KKyAgLy8gSW4gdGhlIGZ1dHVyZSB0cnkgdG8gc3BlY2lhbGl6ZQorICAvLyBmb3IgX1RwID0gZmxvYXQsIGRvdWJsZSwgbG9uZyBkb3VibGUgdXNpbmcgYSBtb3JlIGFjY3VyYXRlCisgIC8vIGFsZ29yaXRobS4KKyAgLy8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICBfX3ZhbGFycmF5X3N1bShjb25zdCBfVHAqIF9fZiwgY29uc3QgX1RwKiBfX2wpCisgICAgeworICAgICAgX1RwIF9fciA9IF9UcCgpOworICAgICAgd2hpbGUgKF9fZiAhPSBfX2wpCisJX19yICs9ICpfX2YrKzsKKyAgICAgIHJldHVybiBfX3I7CisgICAgfQorCisgIC8vIENvbXB1dGUgdGhlIHByb2R1Y3Qgb2YgYWxsIGVsZW1lbnRzIGluIHJhbmdlIFtfX2YsIF9fbCkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICBfX3ZhbGFycmF5X3Byb2R1Y3QoY29uc3QgX1RwKiBfX2YsIGNvbnN0IF9UcCogX19sKQorICAgIHsKKyAgICAgIF9UcCBfX3IgPSBfVHAoMSk7CisgICAgICB3aGlsZSAoX19mICE9IF9fbCkKKwlfX3IgPSBfX3IgKiAqX19mKys7CisgICAgICByZXR1cm4gX19yOworICAgIH0KKworICAvLyBDb21wdXRlIHRoZSBtaW4vbWF4IG9mIGFuIGFycmF5LWV4cHJlc3Npb24KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RhPgorICAgIGlubGluZSB0eXBlbmFtZSBfVGE6OnZhbHVlX3R5cGUKKyAgICBfX3ZhbGFycmF5X21pbihjb25zdCBfVGEmIF9fYSkKKyAgICB7CisgICAgICBzaXplX3QgX19zID0gX19hLnNpemUoKTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RhOjp2YWx1ZV90eXBlIF9WYWx1ZV90eXBlOworICAgICAgX1ZhbHVlX3R5cGUgX19yID0gX19zID09IDAgPyBfVmFsdWVfdHlwZSgpIDogX19hWzBdOworICAgICAgZm9yIChzaXplX3QgX19pID0gMTsgX19pIDwgX19zOyArK19faSkKKwl7CisJICBfVmFsdWVfdHlwZSBfX3QgPSBfX2FbX19pXTsKKwkgIGlmIChfX3QgPCBfX3IpCisJICAgIF9fciA9IF9fdDsKKwl9CisgICAgICByZXR1cm4gX19yOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVGE+CisgICAgaW5saW5lIHR5cGVuYW1lIF9UYTo6dmFsdWVfdHlwZQorICAgIF9fdmFsYXJyYXlfbWF4KGNvbnN0IF9UYSYgX19hKQorICAgIHsKKyAgICAgIHNpemVfdCBfX3MgPSBfX2Euc2l6ZSgpOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVGE6OnZhbHVlX3R5cGUgX1ZhbHVlX3R5cGU7CisgICAgICBfVmFsdWVfdHlwZSBfX3IgPSBfX3MgPT0gMCA/IF9WYWx1ZV90eXBlKCkgOiBfX2FbMF07CisgICAgICBmb3IgKHNpemVfdCBfX2kgPSAxOyBfX2kgPCBfX3M7ICsrX19pKQorCXsKKwkgIF9WYWx1ZV90eXBlIF9fdCA9IF9fYVtfX2ldOworCSAgaWYgKF9fdCA+IF9fcikKKwkgICAgX19yID0gX190OworCX0KKyAgICAgIHJldHVybiBfX3I7CisgICAgfQorCisgIC8vCisgIC8vIEhlbHBlciBjbGFzcyBfQXJyYXksIGZpcnN0IGxheWVyIG9mIHZhbGFycmF5IGFic3RyYWN0aW9uLgorICAvLyBBbGwgb3BlcmF0aW9ucyBvbiB2YWxhcnJheSBzaG91bGQgYmUgZm9yd2FyZGVkIHRvIHRoaXMgY2xhc3MKKyAgLy8gd2hlbmV2ZXIgcG9zc2libGUuIC0tIGdkcgorICAvLworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX0FycmF5CisgICAgeworICAgICAgZXhwbGljaXQgX0FycmF5KHNpemVfdCk7CisgICAgICBleHBsaWNpdCBfQXJyYXkoX1RwKiBjb25zdCBfX3Jlc3RyaWN0X18pOworICAgICAgZXhwbGljaXQgX0FycmF5KGNvbnN0IHZhbGFycmF5PF9UcD4mKTsKKyAgICAgIF9BcnJheShjb25zdCBfVHAqIF9fcmVzdHJpY3RfXywgc2l6ZV90KTsKKyAgICAgIAorICAgICAgX1RwKiBiZWdpbigpIGNvbnN0OworICAgICAgCisgICAgICBfVHAqIGNvbnN0IF9fcmVzdHJpY3RfXyBfTV9kYXRhOworICAgIH07CisKKworICAvLyBDb3B5LWNvbnN0cnVjdCBwbGFpbiBhcnJheSBfX2JbPF9fbj5dIGZyb20gaW5kZXhlZCBhcnJheSBfX2FbX19pWzxfX24+XV0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX192YWxhcnJheV9jb3B5X2NvbnN0cnVjdChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxzaXplX3Q+IF9faSwKKwkJCSAgICAgIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbikKKyAgICB7IHN0ZDo6X192YWxhcnJheV9jb3B5X2NvbnN0cnVjdChfX2EuX01fZGF0YSwgX19pLl9NX2RhdGEsCisJCQkJICAgICBfX2IuX01fZGF0YSwgX19uKTsgfQorCisgIC8vIENvcHktY29uc3RydWN0IHBsYWluIGFycmF5IF9fYls8X19uPl0gZnJvbSBzdHJpZGVkIGFycmF5IF9fYVs8X19uIDogX19zPl0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX192YWxhcnJheV9jb3B5X2NvbnN0cnVjdChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIHNpemVfdCBfX3MsCisJCQkgICAgICBfQXJyYXk8X1RwPiBfX2IpCisgICAgeyBzdGQ6Ol9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QoX19hLl9NX2RhdGEsIF9fbiwgX19zLCBfX2IuX01fZGF0YSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3ZhbGFycmF5X2ZpbGwgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgY29uc3QgX1RwJiBfX3QpCisgICAgeyBzdGQ6Ol9fdmFsYXJyYXlfZmlsbChfX2EuX01fZGF0YSwgX19uLCBfX3QpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX192YWxhcnJheV9maWxsKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgc2l6ZV90IF9fcywgY29uc3QgX1RwJiBfX3QpCisgICAgeyBzdGQ6Ol9fdmFsYXJyYXlfZmlsbChfX2EuX01fZGF0YSwgX19uLCBfX3MsIF9fdCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3ZhbGFycmF5X2ZpbGwoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6ZV90PiBfX2ksCisJCSAgICBzaXplX3QgX19uLCBjb25zdCBfVHAmIF9fdCkKKyAgICB7IHN0ZDo6X192YWxhcnJheV9maWxsKF9fYS5fTV9kYXRhLCBfX2kuX01fZGF0YSwgX19uLCBfX3QpOyB9CisKKyAgLy8gQ29weSBhIHBsYWluIGFycmF5IF9fYVs8X19uPl0gaW50byBhIHBsYXkgYXJyYXkgX19iWzw+XQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3ZhbGFycmF5X2NvcHkoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IpCisgICAgeyBzdGQ6Ol9fdmFsYXJyYXlfY29weShfX2EuX01fZGF0YSwgX19uLCBfX2IuX01fZGF0YSk7IH0KKworICAvLyBDb3B5IHN0cmlkZWQgYXJyYXkgX19hWzxfX24gOiBfX3M+XSBpbiBwbGFpbiBfX2JbPF9fbj5dCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdmFsYXJyYXlfY29weShfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIHNpemVfdCBfX3MsIF9BcnJheTxfVHA+IF9fYikKKyAgICB7IHN0ZDo6X192YWxhcnJheV9jb3B5KF9fYS5fTV9kYXRhLCBfX24sIF9fcywgX19iLl9NX2RhdGEpOyB9CisKKyAgLy8gQ29weSBhIHBsYWluIGFycmF5ICBfX2FbPF9fbj5dIGludG8gYSBzdHJpZGVkIGFycmF5IF9fYls8X19uIDogX19zPl0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX192YWxhcnJheV9jb3B5KF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PF9UcD4gX19iLCBzaXplX3QgX19uLCBzaXplX3QgX19zKQorICAgIHsgX192YWxhcnJheV9jb3B5KF9fYS5fTV9kYXRhLCBfX2IuX01fZGF0YSwgX19uLCBfX3MpOyB9CisKKyAgLy8gQ29weSBzdHJpZGVkIGFycmF5IF9fc3JjWzxfX24gOiBfX3MxPl0gaW50byBhbm90aGVyCisgIC8vIHN0cmlkZWQgYXJyYXkgX19kc3RbPCA6IF9fczI+XS4gIFRoZWlyIHNpemVzIG11c3QgbWF0Y2guCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdmFsYXJyYXlfY29weShfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIHNpemVfdCBfX3MxLAorICAgICAgICAgICAgICAgICAgICBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX3MyKQorICAgIHsgc3RkOjpfX3ZhbGFycmF5X2NvcHkoX19hLl9NX2RhdGEsIF9fbiwgX19zMSwgX19iLl9NX2RhdGEsIF9fczIpOyB9CisKKyAgLy8gQ29weSBhbiBpbmRleGVkIGFycmF5IF9fYVtfX2lbPF9fbj5dXSBpbiBwbGFpbiBhcnJheSBfX2JbPF9fbj5dCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdmFsYXJyYXlfY29weShfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxzaXplX3Q+IF9faSwKKwkJICAgIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbikKKyAgICB7IHN0ZDo6X192YWxhcnJheV9jb3B5KF9fYS5fTV9kYXRhLCBfX2kuX01fZGF0YSwgX19iLl9NX2RhdGEsIF9fbik7IH0KKworICAvLyBDb3B5IGEgcGxhaW4gYXJyYXkgX19hWzxfX24+XSBpbiBhbiBpbmRleGVkIGFycmF5IF9fYltfX2lbPF9fbj5dXQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3ZhbGFycmF5X2NvcHkoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IsCisJCSAgICBfQXJyYXk8c2l6ZV90PiBfX2kpCisgICAgeyBzdGQ6Ol9fdmFsYXJyYXlfY29weShfX2EuX01fZGF0YSwgX19uLCBfX2IuX01fZGF0YSwgX19pLl9NX2RhdGEpOyB9CisKKyAgLy8gQ29weSB0aGUgX19uIGZpcnN0IGVsZW1lbnRzIG9mIGFuIGluZGV4ZWQgYXJyYXkgX19zcmNbPF9faT5dIGludG8KKyAgLy8gYW5vdGhlciBpbmRleGVkIGFycmF5IF9fZHN0WzxfX2o+XS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX192YWxhcnJheV9jb3B5KF9BcnJheTxfVHA+IF9fc3JjLCBzaXplX3QgX19uLCBfQXJyYXk8c2l6ZV90PiBfX2ksCisgICAgICAgICAgICAgICAgICAgIF9BcnJheTxfVHA+IF9fZHN0LCBfQXJyYXk8c2l6ZV90PiBfX2opCisgICAgeworICAgICAgc3RkOjpfX3ZhbGFycmF5X2NvcHkoX19zcmMuX01fZGF0YSwgX19uLCBfX2kuX01fZGF0YSwKKwkJICAgIF9fZHN0Ll9NX2RhdGEsIF9fai5fTV9kYXRhKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZQorICAgIF9BcnJheTxfVHA+OjpfQXJyYXkoc2l6ZV90IF9fbikKKyAgICA6IF9NX2RhdGEoX192YWxhcnJheV9nZXRfc3RvcmFnZTxfVHA+KF9fbikpCisgICAgeyBzdGQ6Ol9fdmFsYXJyYXlfZGVmYXVsdF9jb25zdHJ1Y3QoX01fZGF0YSwgX01fZGF0YSArIF9fbik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lCisgICAgX0FycmF5PF9UcD46Ol9BcnJheShfVHAqIGNvbnN0IF9fcmVzdHJpY3RfXyBfX3ApCisgICAgOiBfTV9kYXRhIChfX3ApIHt9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZQorICAgIF9BcnJheTxfVHA+OjpfQXJyYXkoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KQorICAgIDogX01fZGF0YSAoX192Ll9NX2RhdGEpIHt9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZQorICAgIF9BcnJheTxfVHA+OjpfQXJyYXkoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19iLCBzaXplX3QgX19zKQorICAgIDogX01fZGF0YShfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX19zKSkKKyAgICB7IHN0ZDo6X192YWxhcnJheV9jb3B5X2NvbnN0cnVjdChfX2IsIF9fcywgX01fZGF0YSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9UcCoKKyAgICBfQXJyYXk8X1RwPjo6YmVnaW4gKCkgY29uc3QKKyAgICB7IHJldHVybiBfTV9kYXRhOyB9CisKKyNkZWZpbmUgX0RFRklORV9BUlJBWV9GVU5DVElPTihfT3AsIF9OYW1lKQkJCQlcCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4JCSAgICAgICAgCQkJXAorICAgIGlubGluZSB2b2lkCQkJCQkJCQlcCisgICAgX0FycmF5X2F1Z21lbnRlZF8jI19OYW1lKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgY29uc3QgX1RwJiBfX3QpIFwKKyAgICB7CQkJCQkJCQkJXAorICAgICAgZm9yIChfVHAqIF9fcCA9IF9fYS5fTV9kYXRhOyBfX3AgPCBfX2EuX01fZGF0YSArIF9fbjsgKytfX3ApCVwKKyAgICAgICAgKl9fcCBfT3AjIz0gX190OwkJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CQkJCQkJXAorICAgIGlubGluZSB2b2lkCQkJCQkJCQlcCisgICAgX0FycmF5X2F1Z21lbnRlZF8jI19OYW1lKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iKSBcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIF9UcCogX19wID0gX19hLl9NX2RhdGE7CQkJCQkJXAorICAgICAgZm9yIChfVHAqIF9fcSA9IF9fYi5fTV9kYXRhOyBfX3EgPCBfX2IuX01fZGF0YSArIF9fbjsgKytfX3AsICsrX19xKSBcCisgICAgICAgICpfX3AgX09wIyM9ICpfX3E7CQkJCQkJXAorICAgIH0JCQkJCQkJCQlcCisJCQkJCQkJCQlcCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4JCQkJCVwKKyAgICB2b2lkCQkJCQkJCQlcCisgICAgX0FycmF5X2F1Z21lbnRlZF8jI19OYW1lKF9BcnJheTxfVHA+IF9fYSwJICAgICAgICAJCVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19uKQlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIF9UcCogX19wKF9fYS5fTV9kYXRhKTsJCQkJCQlcCisgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX247ICsrX19pLCArK19fcCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICpfX3AgX09wIyM9IF9fZVtfX2ldOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisgICAgfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgkJCQkJCVwKKyAgICBpbmxpbmUgdm9pZAkJCQkJCQkJXAorICAgIF9BcnJheV9hdWdtZW50ZWRfIyNfTmFtZShfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIHNpemVfdCBfX3MsCVwKKwkgICAgICAgICAgICAgICAgICAgICBfQXJyYXk8X1RwPiBfX2IpCQkJCVwKKyAgICB7CQkJCQkJCQkJXAorICAgICAgX1RwKiBfX3EoX19iLl9NX2RhdGEpOwkJCQkJCVwKKyAgICAgIGZvciAoX1RwKiBfX3AgPSBfX2EuX01fZGF0YTsgX19wIDwgX19hLl9NX2RhdGEgKyBfX3MgKiBfX247ICAgICAgIFwKKwkgICBfX3AgKz0gX19zLCArK19fcSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAqX19wIF9PcCMjPSAqX19xOwkJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CQkJCQkJXAorICAgIGlubGluZSB2b2lkCQkJCQkJCQlcCisgICAgX0FycmF5X2F1Z21lbnRlZF8jI19OYW1lKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PF9UcD4gX19iLAkJXAorCQkgICAgICAgICAgICAgc2l6ZV90IF9fbiwgc2l6ZV90IF9fcykJCQlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIF9UcCogX19xKF9fYi5fTV9kYXRhKTsJCQkJCQlcCisgICAgICBmb3IgKF9UcCogX19wID0gX19hLl9NX2RhdGE7IF9fcCA8IF9fYS5fTV9kYXRhICsgX19uOyAgICAgICAgICAgICBcCisJICAgKytfX3AsIF9fcSArPSBfX3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKl9fcCBfT3AjIz0gKl9fcTsJCQkJCQlcCisgICAgfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPgkJCQkJXAorICAgIHZvaWQJCQkJCQkJCVwKKyAgICBfQXJyYXlfYXVnbWVudGVkXyMjX05hbWUoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19zLAkJXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24pCVwKKyAgICB7CQkJCQkJCQkJXAorICAgICAgX1RwKiBfX3AoX19hLl9NX2RhdGEpOwkJCQkJCVwKKyAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbjsgKytfX2ksIF9fcCArPSBfX3MpICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKl9fcCBfT3AjIz0gX19lW19faV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKyAgICB9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CQkJCQkJXAorICAgIGlubGluZSB2b2lkCQkJCQkJCQlcCisgICAgX0FycmF5X2F1Z21lbnRlZF8jI19OYW1lKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLAlcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbikJCVwKKyAgICB7CQkJCQkJCQkJXAorICAgICAgX1RwKiBfX3EoX19iLl9NX2RhdGEpOwkJCQkJCVwKKyAgICAgIGZvciAoc2l6ZV90KiBfX2ogPSBfX2kuX01fZGF0YTsgX19qIDwgX19pLl9NX2RhdGEgKyBfX247ICAgICAgICAgIFwKKyAgICAgICAgICAgKytfX2osICsrX19xKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX19hLl9NX2RhdGFbKl9fal0gX09wIyM9ICpfX3E7CQkJCQlcCisgICAgfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgkJCQkJCVwKKyAgICBpbmxpbmUgdm9pZAkJCQkJICAgICAgICAJCVwKKyAgICBfQXJyYXlfYXVnbWVudGVkXyMjX05hbWUoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLAkJXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQXJyYXk8X1RwPiBfX2IsIF9BcnJheTxzaXplX3Q+IF9faSkJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICBfVHAqIF9fcChfX2EuX01fZGF0YSk7CQkJCQkJXAorICAgICAgZm9yIChzaXplX3QqIF9faiA9IF9faS5fTV9kYXRhOyBfX2o8X19pLl9NX2RhdGEgKyBfX247ICAgICAgICAgICAgXAorCSAgICsrX19qLCArK19fcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICpfX3AgX09wIyM9IF9fYi5fTV9kYXRhWypfX2pdOwkJCQkJXAorICAgIH0JCQkJCQkJCQlcCisJCQkJCQkJCQlcCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4JCQkJCVwKKyAgICB2b2lkCQkJCQkJCQlcCisgICAgX0FycmF5X2F1Z21lbnRlZF8jI19OYW1lKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLAlcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwgc2l6ZV90IF9fbikJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICBzaXplX3QqIF9faihfX2kuX01fZGF0YSk7CSAgICAgICAgCQkJCVwKKyAgICAgIGZvciAoc2l6ZV90IF9fayA9IDA7IF9fazxfX247ICsrX19rLCArK19faikJCQlcCisgICAgICAgIF9fYS5fTV9kYXRhWypfX2pdIF9PcCMjPSBfX2VbX19rXTsJCQkJXAorICAgIH0JCQkJCQkJCQlcCisJCQkJCQkJCQlcCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4JCQkJCQlcCisgICAgdm9pZAkJCQkJCQkJXAorICAgIF9BcnJheV9hdWdtZW50ZWRfIyNfTmFtZShfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxib29sPiBfX20sICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24pCQlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIGJvb2wqIF9fb2soX19tLl9NX2RhdGEpOwkJCQkJCVwKKyAgICAgIF9UcCogX19wKF9fYS5fTV9kYXRhKTsJCQkJCQlcCisgICAgICBmb3IgKF9UcCogX19xID0gX19iLl9NX2RhdGE7IF9fcSA8IF9fYi5fTV9kYXRhICsgX19uOyAgICAgICAgICAgICBcCisJICAgKytfX3EsICsrX19vaywgKytfX3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB3aGlsZSAoISAqX19vaykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHsJCQkJCQkgICAgICAgIAlcCisgICAgICAgICAgICAgICsrX19vazsJCQkJCQkJXAorICAgICAgICAgICAgICArK19fcDsJCQkJCQkJXAorICAgICAgICAgICAgfQkJCQkJCQkJXAorICAgICAgICAgICpfX3AgX09wIyM9ICpfX3E7CQkJCQkJXAorICAgICAgICB9CQkJCQkJCQlcCisgICAgfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgkJCQkJCVwKKyAgICB2b2lkCQkJCQkJCQlcCisgICAgX0FycmF5X2F1Z21lbnRlZF8jI19OYW1lKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwJCVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FycmF5PF9UcD4gX19iLCBfQXJyYXk8Ym9vbD4gX19tKSAgIAlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIGJvb2wqIF9fb2soX19tLl9NX2RhdGEpOwkJCQkJCVwKKyAgICAgIF9UcCogX19xKF9fYi5fTV9kYXRhKTsJCQkJCQlcCisgICAgICBmb3IgKF9UcCogX19wID0gX19hLl9NX2RhdGE7IF9fcCA8IF9fYS5fTV9kYXRhICsgX19uOyAgICAgICAgICAgICBcCisJICAgKytfX3AsICsrX19vaywgKytfX3EpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB3aGlsZSAoISAqX19vaykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHsJCQkJCSAgICAgICAgCQlcCisgICAgICAgICAgICAgICsrX19vazsJCQkJCQkJXAorICAgICAgICAgICAgICArK19fcTsJCQkJCQkJXAorICAgICAgICAgICAgfQkJCQkJCQkJXAorICAgICAgICAgICpfX3AgX09wIyM9ICpfX3E7CQkJCQkJXAorICAgICAgICB9CQkJCQkJCQlcCisgICAgfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPgkJCQkJXAorICAgIHZvaWQJCQkJCQkJCVwKKyAgICBfQXJyYXlfYXVnbWVudGVkXyMjX05hbWUoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCAgCVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19uKQlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIGJvb2wqIF9fb2soX19tLl9NX2RhdGEpOwkJCQkJCVwKKyAgICAgIF9UcCogX19wKF9fYS5fTV9kYXRhKTsJCQkJCQlcCisgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX247ICsrX19pLCArK19fb2ssICsrX19wKSAgICAgICAgICAgICBcCisgICAgICAgIHsJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJXAorICAgICAgICAgIHdoaWxlICghICpfX29rKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgewkJICAgICAgICAgCQkJCQlcCisJICAgICAgKytfX29rOwkJCQkJCQlcCisgICAgICAgICAgICAgICsrX19wOwkJCQkJCQlcCisgICAgICAgICAgICB9CQkJCQkJCQlcCisgICAgICAgICAgKl9fcCBfT3AjIz0gX19lW19faV07CQkJCQkJXAorICAgICAgICB9CQkJCQkJCQlcCisgICAgfQorCisgICBfREVGSU5FX0FSUkFZX0ZVTkNUSU9OKCssIF9fcGx1cykKKyAgIF9ERUZJTkVfQVJSQVlfRlVOQ1RJT04oLSwgX19taW51cykKKyAgIF9ERUZJTkVfQVJSQVlfRlVOQ1RJT04oKiwgX19tdWx0aXBsaWVzKQorICAgX0RFRklORV9BUlJBWV9GVU5DVElPTigvLCBfX2RpdmlkZXMpCisgICBfREVGSU5FX0FSUkFZX0ZVTkNUSU9OKCUsIF9fbW9kdWx1cykKKyAgIF9ERUZJTkVfQVJSQVlfRlVOQ1RJT04oXiwgX19iaXR3aXNlX3hvcikKKyAgIF9ERUZJTkVfQVJSQVlfRlVOQ1RJT04ofCwgX19iaXR3aXNlX29yKQorICAgX0RFRklORV9BUlJBWV9GVU5DVElPTigmLCBfX2JpdHdpc2VfYW5kKQorICAgX0RFRklORV9BUlJBWV9GVU5DVElPTig8PCwgX19zaGlmdF9sZWZ0KQorICAgX0RFRklORV9BUlJBWV9GVU5DVElPTig+PiwgX19zaGlmdF9yaWdodCkKKworI3VuZGVmIF9ERUZJTkVfQVJSQVlfRlVOQ1RJT04KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjaWZuZGVmIF9HTElCQ1hYX0VYUE9SVF9URU1QTEFURQorIyBpbmNsdWRlIDxiaXRzL3ZhbGFycmF5X2FycmF5LnRjYz4KKyNlbmRpZgorCisjZW5kaWYgLyogX0FSUkFZX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy92YWxhcnJheV9hcnJheS50Y2MgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvdmFsYXJyYXlfYXJyYXkudGNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1Y2I3YjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvdmFsYXJyYXlfYXJyYXkudGNjCkBAIC0wLDAgKzEsMjQxIEBACisvLyBUaGUgdGVtcGxhdGUgYW5kIGlubGluZXMgZm9yIHRoZSAtKi0gQysrIC0qLSBpbnRlcm5hbCBfQXJyYXkgaGVscGVyIGNsYXNzLgorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDMsIDIwMDUsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHZhbGFycmF5X2FycmF5LnRjYworICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisvLyBXcml0dGVuIGJ5IEdhYnJpZWwgRG9zIFJlaXMgPEdhYnJpZWwuRG9zLVJlaXNARFBUTWF0aHMuRU5TLUNhY2hhbi5Gcj4KKworI2lmbmRlZiBfVkFMQVJSQVlfQVJSQVlfVENDCisjZGVmaW5lIF9WQUxBUlJBWV9BUlJBWV9UQ0MgMQorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICB2b2lkCisgICAgX192YWxhcnJheV9maWxsKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PGJvb2w+IF9fbSwKKwkJICAgIGNvbnN0IF9UcCYgX190KQorICAgIHsKKyAgICAgIF9UcCogX19wID0gX19hLl9NX2RhdGE7CisgICAgICBib29sKiBfX29rIChfX20uX01fZGF0YSk7CisgICAgICBmb3IgKHNpemVfdCBfX2k9MDsgX19pIDwgX19uOyArK19faSwgKytfX29rLCArK19fcCkKKwl7CisJICB3aGlsZSAoISpfX29rKQorCSAgeworCSAgICArK19fb2s7CisJICAgICsrX19wOworCSAgfQorCSAgKl9fcCA9IF9fdDsKKwl9CisgICAgfQorCisgIC8vIENvcHkgbiBlbGVtZW50cyBvZiBhIGludG8gY29uc2VjdXRpdmUgZWxlbWVudHMgb2YgYi4gIFdoZW4gbSBpcworICAvLyBmYWxzZSwgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiBhIGlzIHNraXBwZWQuICBtIG11c3QgY29udGFpbgorICAvLyBhdCBsZWFzdCBuIHRydWUgZWxlbWVudHMuICBhIG11c3QgY29udGFpbiBhdCBsZWFzdCBuIGVsZW1lbnRzIGFuZAorICAvLyBlbm91Z2ggZWxlbWVudHMgdG8gbWF0Y2ggdXAgd2l0aCBtIHRocm91Z2ggdGhlIG50aCB0cnVlIGVsZW1lbnQKKyAgLy8gb2YgbS4gIEkuZS4gIGlmIG4gaXMgMTAsIG0gaGFzIDE1IGVsZW1lbnRzIHdpdGggNSBmYWxzZSBmb2xsb3dlZAorICAvLyBieSAxMCB0cnVlLCBhIG11c3QgaGF2ZSAxNSBlbGVtZW50cy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICBfX3ZhbGFycmF5X2NvcHkoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCBfQXJyYXk8X1RwPiBfX2IsCisJCSAgICBzaXplX3QgX19uKQorICAgIHsKKyAgICAgIF9UcCogX19wIChfX2EuX01fZGF0YSk7CisgICAgICBib29sKiBfX29rIChfX20uX01fZGF0YSk7CisgICAgICBmb3IgKF9UcCogX19xID0gX19iLl9NX2RhdGE7IF9fcSA8IF9fYi5fTV9kYXRhICsgX19uOworCSAgICsrX19xLCArK19fb2ssICsrX19wKQorCXsKKwkgIHdoaWxlICghICpfX29rKQorCSAgICB7CisJICAgICAgKytfX29rOworCSAgICAgICsrX19wOworCSAgICB9CisJICAqX19xID0gKl9fcDsKKwl9CisgICAgfQorCisgIC8vIENvcHkgbiBjb25zZWN1dGl2ZSBlbGVtZW50cyBmcm9tIGEgaW50byBlbGVtZW50cyBvZiBiLiAgRWxlbWVudHMKKyAgLy8gb2YgYiBhcmUgc2tpcHBlZCBpZiB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIG0gaXMgZmFsc2UuICBtCisgIC8vIG11c3QgY29udGFpbiBhdCBsZWFzdCBuIHRydWUgZWxlbWVudHMuICBiIG11c3QgaGF2ZSBhdCBsZWFzdCBhcworICAvLyBtYW55IGVsZW1lbnRzIGFzIHRoZSBpbmRleCBvZiB0aGUgbnRoIHRydWUgZWxlbWVudCBvZiBtLiAgSS5lLiBpZgorICAvLyBtIGhhcyAxNSBlbGVtZW50cyB3aXRoIDUgZmFsc2UgZm9sbG93ZWQgYnkgMTAgdHJ1ZSwgYiBtdXN0IGhhdmUKKyAgLy8gYXQgbGVhc3QgMTUgZWxlbWVudHMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICB2b2lkCisgICAgX192YWxhcnJheV9jb3B5KF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iLAorCQkgICAgX0FycmF5PGJvb2w+IF9fbSkKKyAgICB7CisgICAgICBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOworICAgICAgYm9vbCogX19vayAoX19tLl9NX2RhdGEpOworICAgICAgZm9yIChfVHAqIF9fcCA9IF9fYS5fTV9kYXRhOyBfX3AgPCBfX2EuX01fZGF0YStfX247CisJICAgKytfX3AsICsrX19vaywgKytfX3EpCisJeworCSAgd2hpbGUgKCEgKl9fb2spCisJICAgIHsKKwkgICAgICArK19fb2s7CisJICAgICAgKytfX3E7CisJICAgIH0KKwkgICpfX3EgPSAqX19wOworCX0KKyAgICB9CisKKyAgLy8gQ29weSBuIGVsZW1lbnRzIGZyb20gYSBpbnRvIGVsZW1lbnRzIG9mIGIuICBFbGVtZW50cyBvZiBhIGFyZQorICAvLyBza2lwcGVkIGlmIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgbSBpcyBmYWxzZS4gIEVsZW1lbnRzIG9mCisgIC8vIGIgYXJlIHNraXBwZWQgaWYgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiBrIGlzIGZhbHNlLiAgbSBhbmQKKyAgLy8gayBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgbiB0cnVlIGVsZW1lbnRzLiAgYSBhbmQgYiBtdXN0IGhhdmUgYXQKKyAgLy8gbGVhc3QgYXMgbWFueSBlbGVtZW50cyBhcyB0aGUgaW5kZXggb2YgdGhlIG50aCB0cnVlIGVsZW1lbnQgb2YgbS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICBfX3ZhbGFycmF5X2NvcHkoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCBzaXplX3QgX19uLAorCQkgICAgX0FycmF5PF9UcD4gX19iLCBfQXJyYXk8Ym9vbD4gX19rKQorICAgIHsKKyAgICAgIF9UcCogX19wIChfX2EuX01fZGF0YSk7CisgICAgICBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOworICAgICAgYm9vbCogX19zcmNvayAoX19tLl9NX2RhdGEpOworICAgICAgYm9vbCogX19kc3RvayAoX19rLl9NX2RhdGEpOworICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOworCSAgICsrX19zcmNvaywgKytfX3AsICsrX19kc3RvaywgKytfX3EsICsrX19pKQorCXsKKwkgIHdoaWxlICghICpfX3NyY29rKQorCSAgICB7CisJICAgICAgKytfX3NyY29rOworCSAgICAgICsrX19wOworCSAgICB9CisJICB3aGlsZSAoISAqX19kc3RvaykgCisJICAgIHsKKwkgICAgICArK19fZHN0b2s7CisJICAgICAgKytfX3E7CisJICAgIH0KKwkgICpfX3EgPSAqX19wOworCX0KKyAgICB9CisKKyAgLy8gQ29weSBuIGNvbnNlY3V0aXZlIGVsZW1lbnRzIG9mIGUgaW50byBjb25zZWN1dGl2ZSBlbGVtZW50cyBvZiBhLgorICAvLyBJLmUuIGFbaV0gPSBlW2ldLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+CisgICAgdm9pZAorICAgIF9fdmFsYXJyYXlfY29weShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24sIF9BcnJheTxfVHA+IF9fYSkKKyAgICB7CisgICAgICBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOworICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSwgKytfX3ApCisJKl9fcCA9IF9fZVtfX2ldOworICAgIH0KKworICAvLyBDb3B5IG4gY29uc2VjdXRpdmUgZWxlbWVudHMgb2YgZSBpbnRvIGVsZW1lbnRzIG9mIGEgdXNpbmcgc3RyaWRlCisgIC8vIHMuICBJLmUuLCBhWzBdID0gZVswXSwgYVtzXSA9IGVbMV0sIGFbMipzXSA9IGVbMl0uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4KKyAgICB2b2lkCisgICAgX192YWxhcnJheV9jb3B5KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwgc2l6ZV90IF9fbiwKKwkJICAgICBfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX3MpCisgICAgeworICAgICAgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsKKyAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbjsgKytfX2ksIF9fcCArPSBfX3MpCisJKl9fcCA9IF9fZVtfX2ldOworICAgIH0KKworICAvLyBDb3B5IG4gY29uc2VjdXRpdmUgZWxlbWVudHMgb2YgZSBpbnRvIGVsZW1lbnRzIG9mIGEgaW5kZXhlZCBieQorICAvLyBjb250ZW50cyBvZiBpLiAgSS5lLiwgYVtpWzBdXSA9IGVbMF0uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4KKyAgICB2b2lkCisgICAgX192YWxhcnJheV9jb3B5KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwgc2l6ZV90IF9fbiwKKwkJICAgIF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pKQorICAgIHsKKyAgICAgIHNpemVfdCogX19qIChfX2kuX01fZGF0YSk7CisgICAgICBmb3IgKHNpemVfdCBfX2sgPSAwOyBfX2sgPCBfX247ICsrX19rLCArK19faikKKwlfX2EuX01fZGF0YVsqX19qXSA9IF9fZVtfX2tdOworICAgIH0KKworICAvLyBDb3B5IG4gZWxlbWVudHMgb2YgZSBpbmRleGVkIGJ5IGNvbnRlbnRzIG9mIGYgaW50byBlbGVtZW50cyBvZiBhCisgIC8vIGluZGV4ZWQgYnkgY29udGVudHMgb2YgaS4gIEkuZS4sIGFbaVswXV0gPSBlW2ZbMF1dLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgdm9pZAorICAgIF9fdmFsYXJyYXlfY29weShfQXJyYXk8X1RwPiBfX2UsIF9BcnJheTxzaXplX3Q+IF9fZiwKKwkJICAgIHNpemVfdCBfX24sIAorCQkgICAgX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6ZV90PiBfX2kpCisgICAgeworICAgICAgc2l6ZV90KiBfX2cgKF9fZi5fTV9kYXRhKTsKKyAgICAgIHNpemVfdCogX19qIChfX2kuX01fZGF0YSk7CisgICAgICBmb3IgKHNpemVfdCBfX2sgPSAwOyBfX2sgPCBfX247ICsrX19rLCArK19faiwgKytfX2cpIAorCV9fYS5fTV9kYXRhWypfX2pdID0gX19lLl9NX2RhdGFbKl9fZ107CisgICAgfQorCisgIC8vIENvcHkgbiBjb25zZWN1dGl2ZSBlbGVtZW50cyBvZiBlIGludG8gZWxlbWVudHMgb2YgYS4gIEVsZW1lbnRzIG9mCisgIC8vIGEgYXJlIHNraXBwZWQgaWYgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiBtIGlzIGZhbHNlLiAgbSBtdXN0CisgIC8vIGhhdmUgYXQgbGVhc3QgbiB0cnVlIGVsZW1lbnRzIGFuZCBhIG11c3QgaGF2ZSBhdCBsZWFzdCBhcyBtYW55CisgIC8vIGVsZW1lbnRzIGFzIHRoZSBpbmRleCBvZiB0aGUgbnRoIHRydWUgZWxlbWVudCBvZiBtLiAgSS5lLiBpZiBtCisgIC8vIGhhcyA1IGZhbHNlIGZvbGxvd2VkIGJ5IDEwIHRydWUgZWxlbWVudHMgYW5kIG4gPT0gMTAsIGEgbXVzdCBoYXZlCisgIC8vIGF0IGxlYXN0IDE1IGVsZW1lbnRzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+CisgICAgdm9pZAorICAgIF9fdmFsYXJyYXlfY29weShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24sCisJCSAgICBfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxib29sPiBfX20pCisgICAgeworICAgICAgYm9vbCogX19vayAoX19tLl9NX2RhdGEpOworICAgICAgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsKKyAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbjsgKytfX2ksICsrX19vaywgKytfX3ApCisJeworCSAgd2hpbGUgKCEgKl9fb2spCisJICAgIHsKKwkgICAgICArK19fb2s7CisJICAgICAgKytfX3A7CisJICAgIH0KKwkgICpfX3AgPSBfX2VbX19pXTsKKwl9CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPgorICAgIHZvaWQKKyAgICBfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwgc2l6ZV90IF9fbiwKKwkJCSAgICAgIF9BcnJheTxfVHA+IF9fYSkKKyAgICB7CisgICAgICBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOworICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSwgKytfX3ApCisJbmV3IChfX3ApIF9UcChfX2VbX19pXSk7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICBfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0KF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwKKwkJCSAgICAgIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbikKKyAgICB7CisgICAgICBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOworICAgICAgYm9vbCogX19vayAoX19tLl9NX2RhdGEpOworICAgICAgZm9yIChfVHAqIF9fcSA9IF9fYi5fTV9kYXRhOyBfX3EgPCBfX2IuX01fZGF0YStfX247ICsrX19xLCArK19fb2ssICsrX19wKQorCXsKKwkgIHdoaWxlICghICpfX29rKQorCSAgICB7CisJICAgICAgKytfX29rOworCSAgICAgICsrX19wOworCSAgICB9CisJICBuZXcgKF9fcSkgX1RwKCpfX3ApOworCX0KKyAgICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmIC8qIF9WQUxBUlJBWV9BUlJBWV9UQ0MgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy92YWxhcnJheV9iZWZvcmUuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0cy92YWxhcnJheV9iZWZvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmM4NWEzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3ZhbGFycmF5X2JlZm9yZS5oCkBAIC0wLDAgKzEsNzMxIEBACisvLyBUaGUgdGVtcGxhdGUgYW5kIGlubGluZXMgZm9yIHRoZSAtKi0gQysrIC0qLSBpbnRlcm5hbCBfTWV0YSBjbGFzcy4KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LAorLy8gMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHZhbGFycmF5X2JlZm9yZS5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKy8vIFdyaXR0ZW4gYnkgR2FicmllbCBEb3MgUmVpcyA8R2FicmllbC5Eb3MtUmVpc0BjbWxhLmVucy1jYWNoYW4uZnI+CisKKyNpZm5kZWYgX1ZBTEFSUkFZX0JFRk9SRV9ICisjZGVmaW5lIF9WQUxBUlJBWV9CRUZPUkVfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvc2xpY2VfYXJyYXkuaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvLworICAvLyBJbXBsZW1lbnRpbmcgYSBsb29zZW5lZCB2YWxhcnJheSByZXR1cm4gdmFsdWUgaXMgdHJpY2t5LgorICAvLyBGaXJzdCB3ZSBuZWVkIHRvIG1lZXQgMjYuMy4xLzM6IHdlIHNob3VsZCBub3QgYWRkIG1vcmUgdGhhbgorICAvLyB0d28gbGV2ZWxzIG9mIHRlbXBsYXRlIG5lc3RpbmcuIFRoZXJlZm9yZSB3ZSByZXNvcnQgdG8gdGVtcGxhdGUKKyAgLy8gdGVtcGxhdGUgdG8gImZsYXR0ZW4iIGxvb3NlbmVkIHJldHVybiB2YWx1ZSB0eXBlcy4KKyAgLy8gQXQgc29tZSBwb2ludCB3ZSB1c2UgcGFydGlhbCBzcGVjaWFsaXphdGlvbiB0byByZW1vdmUgb25lIGxldmVsCisgIC8vIHRlbXBsYXRlIG5lc3RpbmcgZHVlIHRvIF9FeHByPD4KKyAgLy8KKworICAvLyBUaGlzIGNsYXNzIGlzIE5PVCBkZWZpbmVkLiBJdCBkb2Vzbid0IG5lZWQgdG8uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9UcDI+IGNsYXNzIF9Db25zdGFudDsKKworICAvLyBJbXBsZW1lbnRhdGlvbnMgb2YgdW5hcnkgZnVuY3Rpb25zIGFwcGxpZWQgdG8gdmFsYXJyYXk8PnMuCisgIC8vIEkgdXNlIGhhcmQtY29kZWQgb2JqZWN0IGZ1bmN0aW9ucyBoZXJlIGluc3RlYWQgb2YgYSBnZW5lcmljCisgIC8vIGFwcHJvYWNoIGxpa2UgcG9pbnRlcnMgdG8gZnVuY3Rpb246CisgIC8vICAgIDEpIGNvcnJlY3RuZXNzOiBzb21lIGZ1bmN0aW9ucyB0YWtlIHJlZmVyZW5jZXMsIG90aGVycyB2YWx1ZXMuCisgIC8vICAgICAgIHdlIGNhbid0IGRlZHVjZSB0aGUgY29ycmVjdCB0eXBlIGFmdGVyd2FyZHMuCisgIC8vICAgIDIpIGVmZmljaWVuY3kgLS0gb2JqZWN0IGZ1bmN0aW9ucyBjYW4gYmUgZWFzaWx5IGlubGluZWQKKyAgLy8gICAgMykgYmUgS29lbmlnLWxvb2t1cC1mcmllbmRseQorCisgIHN0cnVjdCBfQWJzCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fdCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGFicyhfX3QpOyB9CisgIH07CisKKyAgc3RydWN0IF9Db3MKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX190KSBjb25zdAorICAgICAgeyByZXR1cm4gY29zKF9fdCk7IH0KKyAgfTsKKworICBzdHJ1Y3QgX0Fjb3MKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX190KSBjb25zdAorICAgICAgeyByZXR1cm4gYWNvcyhfX3QpOyB9CisgIH07CisKKyAgc3RydWN0IF9Db3NoCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fdCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvc2goX190KTsgfQorICB9OworCisgIHN0cnVjdCBfU2luCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fdCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHNpbihfX3QpOyB9CisgIH07CisKKyAgc3RydWN0IF9Bc2luCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fdCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGFzaW4oX190KTsgfQorICB9OworCisgIHN0cnVjdCBfU2luaAorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3QpIGNvbnN0CisgICAgICB7IHJldHVybiBzaW5oKF9fdCk7IH0KKyAgfTsKKworICBzdHJ1Y3QgX1RhbgorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3QpIGNvbnN0CisgICAgICB7IHJldHVybiB0YW4oX190KTsgfQorICB9OworCisgIHN0cnVjdCBfQXRhbgorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3QpIGNvbnN0CisgICAgICB7IHJldHVybiBhdGFuKF9fdCk7IH0KKyAgfTsKKworICBzdHJ1Y3QgX1RhbmgKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX190KSBjb25zdAorICAgICAgeyByZXR1cm4gdGFuaChfX3QpOyB9CisgIH07CisKKyAgc3RydWN0IF9FeHAKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX190KSBjb25zdAorICAgICAgeyByZXR1cm4gZXhwKF9fdCk7IH0KKyAgfTsKKworICBzdHJ1Y3QgX0xvZworICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3QpIGNvbnN0CisgICAgICB7IHJldHVybiBsb2coX190KTsgfQorICB9OworCisgIHN0cnVjdCBfTG9nMTAKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX190KSBjb25zdAorICAgICAgeyByZXR1cm4gbG9nMTAoX190KTsgfQorICB9OworCisgIHN0cnVjdCBfU3FydAorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3QpIGNvbnN0CisgICAgICB7IHJldHVybiBzcXJ0KF9fdCk7IH0KKyAgfTsKKworICAvLyBJbiB0aGUgcGFzdCwgd2UgdXNlZCB0byB0YWlsb3Igb3BlcmF0b3IgYXBwbGljYXRpb25zIHNlbWFudGljcworICAvLyB0byB0aGUgc3BlY2lhbGl6YXRpb24gb2Ygc3RhbmRhcmQgZnVuY3Rpb24gb2JqZWN0cyAoaS5lLiBwbHVzPD4sIGV0Yy4pCisgIC8vIFRoYXQgaXMgaW5jb3JyZWN0LiAgVGhlcmVmb3JlIHdlIHByb3ZpZGUgb3VyIG93biBzdXJyb2dhdGVzLgorCisgIHN0cnVjdCBfX3VuYXJ5X3BsdXMKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX190KSBjb25zdAorICAgICAgeyByZXR1cm4gK19fdDsgfQorICB9OworCisgIHN0cnVjdCBfX25lZ2F0ZQorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3QpIGNvbnN0CisgICAgICB7IHJldHVybiAtX190OyB9CisgIH07CisKKyAgc3RydWN0IF9fYml0d2lzZV9ub3QKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX190KSBjb25zdAorICAgICAgeyByZXR1cm4gfl9fdDsgfQorICB9OworCisgIHN0cnVjdCBfX3BsdXMKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feCArIF9feTsgfQorICB9OworCisgIHN0cnVjdCBfX21pbnVzCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggLSBfX3k7IH0KKyAgfTsKKworICBzdHJ1Y3QgX19tdWx0aXBsaWVzCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggKiBfX3k7IH0KKyAgfTsKKworICBzdHJ1Y3QgX19kaXZpZGVzCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggLyBfX3k7IH0KKyAgfTsKKworICBzdHJ1Y3QgX19tb2R1bHVzCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggJSBfX3k7IH0KKyAgfTsKKworICBzdHJ1Y3QgX19iaXR3aXNlX3hvcgorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdAorICAgICAgeyByZXR1cm4gX194IF4gX195OyB9CisgIH07CisKKyAgc3RydWN0IF9fYml0d2lzZV9hbmQKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feCAmIF9feTsgfQorICB9OworCisgIHN0cnVjdCBfX2JpdHdpc2Vfb3IKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feCB8IF9feTsgfQorICB9OworCisgIHN0cnVjdCBfX3NoaWZ0X2xlZnQKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feCA8PCBfX3k7IH0KKyAgfTsKKworICBzdHJ1Y3QgX19zaGlmdF9yaWdodAorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdAorICAgICAgeyByZXR1cm4gX194ID4+IF9feTsgfQorICB9OworCisgIHN0cnVjdCBfX2xvZ2ljYWxfYW5kCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdAorICAgICAgeyByZXR1cm4gX194ICYmIF9feTsgfQorICB9OworCisgIHN0cnVjdCBfX2xvZ2ljYWxfb3IKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggfHwgX195OyB9CisgIH07CisKKyAgc3RydWN0IF9fbG9naWNhbF9ub3QKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICFfX3g7IH0KKyAgfTsKKworICBzdHJ1Y3QgX19lcXVhbF90bworICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feCA9PSBfX3k7IH0KKyAgfTsKKworICBzdHJ1Y3QgX19ub3RfZXF1YWxfdG8KKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggIT0gX195OyB9CisgIH07CisKKyAgc3RydWN0IF9fbGVzcworICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feCA8IF9feTsgfQorICB9OworCisgIHN0cnVjdCBfX2dyZWF0ZXIKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggPiBfX3k7IH0KKyAgfTsKKworICBzdHJ1Y3QgX19sZXNzX2VxdWFsCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdAorICAgICAgeyByZXR1cm4gX194IDw9IF9feTsgfQorICB9OworCisgIHN0cnVjdCBfX2dyZWF0ZXJfZXF1YWwKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggPj0gX195OyB9CisgIH07CisKKyAgLy8gVGhlIGZldyBiaW5hcnkgZnVuY3Rpb25zIHdlIG1pc3MuCisgIHN0cnVjdCBfQXRhbjIKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGF0YW4yKF9feCwgX195KTsgfQorICB9OworCisgIHN0cnVjdCBfUG93CisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBwb3coX194LCBfX3kpOyB9CisgIH07CisKKworICAvLyBXZSBuZWVkIHRoZXNlIGJpdHMgaW4gb3JkZXIgdG8gcmVjb3ZlciB0aGUgcmV0dXJuIHR5cGUgb2YKKyAgLy8gc29tZSBmdW5jdGlvbnMvb3BlcmF0b3JzIG5vdyB0aGF0IHdlJ3JlIG5vIGxvbmdlciB1c2luZworICAvLyBmdW5jdGlvbiB0ZW1wbGF0ZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fZnVuCisgICAgeworICAgICAgdHlwZWRlZiBfVHAgcmVzdWx0X3R5cGU7CisgICAgfTsKKworICAvLyBzZXZlcmFsIHNwZWNpYWxpemF0aW9ucyBmb3IgcmVsYXRpb25hbCBvcGVyYXRvcnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19mdW48X19sb2dpY2FsX25vdCwgX1RwPgorICAgIHsKKyAgICAgIHR5cGVkZWYgYm9vbCByZXN1bHRfdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19mdW48X19sb2dpY2FsX2FuZCwgX1RwPgorICAgIHsKKyAgICAgIHR5cGVkZWYgYm9vbCByZXN1bHRfdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19mdW48X19sb2dpY2FsX29yLCBfVHA+CisgICAgeworICAgICAgdHlwZWRlZiBib29sIHJlc3VsdF90eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2Z1bjxfX2xlc3MsIF9UcD4KKyAgICB7CisgICAgICB0eXBlZGVmIGJvb2wgcmVzdWx0X3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fZnVuPF9fZ3JlYXRlciwgX1RwPgorICAgIHsKKyAgICAgIHR5cGVkZWYgYm9vbCByZXN1bHRfdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19mdW48X19sZXNzX2VxdWFsLCBfVHA+CisgICAgeworICAgICAgdHlwZWRlZiBib29sIHJlc3VsdF90eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2Z1bjxfX2dyZWF0ZXJfZXF1YWwsIF9UcD4KKyAgICB7CisgICAgICB0eXBlZGVmIGJvb2wgcmVzdWx0X3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fZnVuPF9fZXF1YWxfdG8sIF9UcD4KKyAgICB7CisgICAgICB0eXBlZGVmIGJvb2wgcmVzdWx0X3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fZnVuPF9fbm90X2VxdWFsX3RvLCBfVHA+CisgICAgeworICAgICAgdHlwZWRlZiBib29sIHJlc3VsdF90eXBlOworICAgIH07CisKKyAgLy8KKyAgLy8gQXBwbHkgZnVuY3Rpb24gdGFraW5nIGEgdmFsdWUvY29uc3QgcmVmZXJlbmNlIGNsb3N1cmUKKyAgLy8KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRG9tLCB0eXBlbmFtZSBfQXJnPgorICAgIGNsYXNzIF9GdW5CYXNlCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworCisgICAgICBfRnVuQmFzZShjb25zdCBfRG9tJiBfX2UsIHZhbHVlX3R5cGUgX19mKF9BcmcpKQorICAgICAgOiBfTV9leHByKF9fZSksIF9NX2Z1bmMoX19mKSB7fQorCisgICAgICB2YWx1ZV90eXBlIG9wZXJhdG9yW10oc2l6ZV90IF9faSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2Z1bmMgKF9NX2V4cHJbX19pXSk7IH0KKworICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9leHByLnNpemUgKCk7fQorCisgICAgcHJpdmF0ZToKKyAgICAgIGNvbnN0IF9Eb20mIF9NX2V4cHI7CisgICAgICB2YWx1ZV90eXBlICgqX01fZnVuYykoX0FyZyk7CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgIHN0cnVjdCBfVmFsRnVuQ2xvczxfRXhwcixfRG9tPiA6IF9GdW5CYXNlPF9Eb20sIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+CisgICAgeworICAgICAgdHlwZWRlZiBfRnVuQmFzZTxfRG9tLCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSBfVHA7CisKKyAgICAgIF9WYWxGdW5DbG9zKGNvbnN0IF9Eb20mIF9fZSwgX1RwIF9fZihfVHApKSA6IF9CYXNlKF9fZSwgX19mKSB7fQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfVmFsRnVuQ2xvczxfVmFsQXJyYXksX1RwPiA6IF9GdW5CYXNlPHZhbGFycmF5PF9UcD4sIF9UcD4KKyAgICB7CisgICAgICB0eXBlZGVmIF9GdW5CYXNlPHZhbGFycmF5PF9UcD4sIF9UcD4gX0Jhc2U7CisgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOworCisgICAgICBfVmFsRnVuQ2xvcyhjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YsIF9UcCBfX2YoX1RwKSkgOiBfQmFzZShfX3YsIF9fZikge30KKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgc3RydWN0IF9SZWZGdW5DbG9zPF9FeHByLCBfRG9tPgorICAgIDogX0Z1bkJhc2U8X0RvbSwgY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSY+CisgICAgeworICAgICAgdHlwZWRlZiBfRnVuQmFzZTxfRG9tLCBjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJj4gX0Jhc2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHZhbHVlX3R5cGUgX1RwOworCisgICAgICBfUmVmRnVuQ2xvcyhjb25zdCBfRG9tJiBfX2UsIF9UcCBfX2YoY29uc3QgX1RwJikpCisgICAgICA6IF9CYXNlKF9fZSwgX19mKSB7fQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfUmVmRnVuQ2xvczxfVmFsQXJyYXksIF9UcD4KKyAgICA6IF9GdW5CYXNlPHZhbGFycmF5PF9UcD4sIGNvbnN0IF9UcCY+CisgICAgeworICAgICAgdHlwZWRlZiBfRnVuQmFzZTx2YWxhcnJheTxfVHA+LCBjb25zdCBfVHAmPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CisKKyAgICAgIF9SZWZGdW5DbG9zKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdiwgX1RwIF9fZihjb25zdCBfVHAmKSkKKyAgICAgIDogX0Jhc2UoX192LCBfX2YpIHt9CisgICAgfTsKKworICAvLworICAvLyBVbmFyeSBleHByZXNzaW9uIGNsb3N1cmUuCisgIC8vCisKKyAgdGVtcGxhdGU8Y2xhc3MgX09wZXIsIGNsYXNzIF9Bcmc+CisgICAgY2xhc3MgX1VuQmFzZQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Bcmc6OnZhbHVlX3R5cGUgX1Z0OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2Z1bjxfT3BlciwgX1Z0Pjo6cmVzdWx0X3R5cGUgdmFsdWVfdHlwZTsKKworICAgICAgX1VuQmFzZShjb25zdCBfQXJnJiBfX2UpIDogX01fZXhwcihfX2UpIHt9CisKKyAgICAgIHZhbHVlX3R5cGUgb3BlcmF0b3JbXShzaXplX3QgX19pKSBjb25zdAorICAgICAgeyByZXR1cm4gX09wZXIoKShfTV9leHByW19faV0pOyB9CisKKyAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fZXhwci5zaXplKCk7IH0KKyAgICAgIAorICAgIHByaXZhdGU6CisgICAgICBjb25zdCBfQXJnJiBfTV9leHByOworICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX09wZXIsIGNsYXNzIF9Eb20+CisgICAgc3RydWN0IF9VbkNsb3M8X09wZXIsIF9FeHByLCBfRG9tPgorICAgIDogX1VuQmFzZTxfT3BlciwgX0RvbT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9Eb20gX0FyZzsKKyAgICAgIHR5cGVkZWYgX1VuQmFzZTxfT3BlciwgX0RvbT4gX0Jhc2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisKKyAgICAgIF9VbkNsb3MoY29uc3QgX0FyZyYgX19lKSA6IF9CYXNlKF9fZSkge30KKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9PcGVyLCB0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9VbkNsb3M8X09wZXIsIF9WYWxBcnJheSwgX1RwPgorICAgIDogX1VuQmFzZTxfT3BlciwgdmFsYXJyYXk8X1RwPiA+CisgICAgeworICAgICAgdHlwZWRlZiB2YWxhcnJheTxfVHA+IF9Bcmc7CisgICAgICB0eXBlZGVmIF9VbkJhc2U8X09wZXIsIHZhbGFycmF5PF9UcD4gPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKworICAgICAgX1VuQ2xvcyhjb25zdCBfQXJnJiBfX2UpIDogX0Jhc2UoX19lKSB7fQorICAgIH07CisKKworICAvLworICAvLyBCaW5hcnkgZXhwcmVzc2lvbiBjbG9zdXJlLgorICAvLworCisgIHRlbXBsYXRlPGNsYXNzIF9PcGVyLCBjbGFzcyBfRmlyc3RBcmcsIGNsYXNzIF9TZWNvbmRBcmc+CisgICAgY2xhc3MgX0JpbkJhc2UKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRmlyc3RBcmc6OnZhbHVlX3R5cGUgX1Z0OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2Z1bjxfT3BlciwgX1Z0Pjo6cmVzdWx0X3R5cGUgdmFsdWVfdHlwZTsKKworICAgICAgX0JpbkJhc2UoY29uc3QgX0ZpcnN0QXJnJiBfX2UxLCBjb25zdCBfU2Vjb25kQXJnJiBfX2UyKQorICAgICAgOiBfTV9leHByMShfX2UxKSwgX01fZXhwcjIoX19lMikge30KKworICAgICAgdmFsdWVfdHlwZSBvcGVyYXRvcltdKHNpemVfdCBfX2kpIGNvbnN0CisgICAgICB7IHJldHVybiBfT3BlcigpKF9NX2V4cHIxW19faV0sIF9NX2V4cHIyW19faV0pOyB9CisKKyAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fZXhwcjEuc2l6ZSgpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgY29uc3QgX0ZpcnN0QXJnJiBfTV9leHByMTsKKyAgICAgIGNvbnN0IF9TZWNvbmRBcmcmIF9NX2V4cHIyOworICAgIH07CisKKworICB0ZW1wbGF0ZTxjbGFzcyBfT3BlciwgY2xhc3MgX0Nsb3M+CisgICAgY2xhc3MgX0JpbkJhc2UyCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Nsb3M6OnZhbHVlX3R5cGUgX1Z0OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2Z1bjxfT3BlciwgX1Z0Pjo6cmVzdWx0X3R5cGUgdmFsdWVfdHlwZTsKKworICAgICAgX0JpbkJhc2UyKGNvbnN0IF9DbG9zJiBfX2UsIGNvbnN0IF9WdCYgX190KQorICAgICAgOiBfTV9leHByMShfX2UpLCBfTV9leHByMihfX3QpIHt9CisKKyAgICAgIHZhbHVlX3R5cGUgb3BlcmF0b3JbXShzaXplX3QgX19pKSBjb25zdAorICAgICAgeyByZXR1cm4gX09wZXIoKShfTV9leHByMVtfX2ldLCBfTV9leHByMik7IH0KKworICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9leHByMS5zaXplKCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICBjb25zdCBfQ2xvcyYgX01fZXhwcjE7CisgICAgICBjb25zdCBfVnQmIF9NX2V4cHIyOworICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX09wZXIsIGNsYXNzIF9DbG9zPgorICAgIGNsYXNzIF9CaW5CYXNlMQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9DbG9zOjp2YWx1ZV90eXBlIF9WdDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19mdW48X09wZXIsIF9WdD46OnJlc3VsdF90eXBlIHZhbHVlX3R5cGU7CisKKyAgICAgIF9CaW5CYXNlMShjb25zdCBfVnQmIF9fdCwgY29uc3QgX0Nsb3MmIF9fZSkKKyAgICAgIDogX01fZXhwcjEoX190KSwgX01fZXhwcjIoX19lKSB7fQorCisgICAgICB2YWx1ZV90eXBlIG9wZXJhdG9yW10oc2l6ZV90IF9faSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9PcGVyKCkoX01fZXhwcjEsIF9NX2V4cHIyW19faV0pOyB9CisKKyAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fZXhwcjIuc2l6ZSgpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgY29uc3QgX1Z0JiBfTV9leHByMTsKKyAgICAgIGNvbnN0IF9DbG9zJiBfTV9leHByMjsKKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9PcGVyLCBjbGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+CisgICAgc3RydWN0IF9CaW5DbG9zPF9PcGVyLCBfRXhwciwgX0V4cHIsIF9Eb20xLCBfRG9tMj4KKyAgICA6IF9CaW5CYXNlPF9PcGVyLCBfRG9tMSwgX0RvbTI+CisgICAgeworICAgICAgdHlwZWRlZiBfQmluQmFzZTxfT3BlciwgX0RvbTEsIF9Eb20yPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKworICAgICAgX0JpbkNsb3MoY29uc3QgX0RvbTEmIF9fZTEsIGNvbnN0IF9Eb20yJiBfX2UyKSA6IF9CYXNlKF9fZTEsIF9fZTIpIHt9CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfT3BlciwgdHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfQmluQ2xvczxfT3BlcixfVmFsQXJyYXksIF9WYWxBcnJheSwgX1RwLCBfVHA+CisgICAgOiBfQmluQmFzZTxfT3BlciwgdmFsYXJyYXk8X1RwPiwgdmFsYXJyYXk8X1RwPiA+CisgICAgeworICAgICAgdHlwZWRlZiBfQmluQmFzZTxfT3BlciwgdmFsYXJyYXk8X1RwPiwgdmFsYXJyYXk8X1RwPiA+IF9CYXNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworCisgICAgICBfQmluQ2xvcyhjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YsIGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdykKKyAgICAgIDogX0Jhc2UoX192LCBfX3cpIHt9CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfT3BlciwgY2xhc3MgX0RvbT4KKyAgICBzdHJ1Y3QgX0JpbkNsb3M8X09wZXIsIF9FeHByLCBfVmFsQXJyYXksIF9Eb20sIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+CisgICAgOiBfQmluQmFzZTxfT3BlciwgX0RvbSwgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gPgorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7CisgICAgICB0eXBlZGVmIF9CaW5CYXNlPF9PcGVyLF9Eb20sdmFsYXJyYXk8X1RwPiA+IF9CYXNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworCisgICAgICBfQmluQ2xvcyhjb25zdCBfRG9tJiBfX2UxLCBjb25zdCB2YWxhcnJheTxfVHA+JiBfX2UyKQorICAgICAgOiBfQmFzZShfX2UxLCBfX2UyKSB7fQorICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX09wZXIsIGNsYXNzIF9Eb20+CisgICAgc3RydWN0IF9CaW5DbG9zPF9PcGVyLCBfVmFsQXJyYXksIF9FeHByLCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLCBfRG9tPgorICAgIDogX0JpbkJhc2U8X09wZXIsIHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LF9Eb20+CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsKKyAgICAgIHR5cGVkZWYgX0JpbkJhc2U8X09wZXIsIHZhbGFycmF5PF9UcD4sIF9Eb20+IF9CYXNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworCisgICAgICBfQmluQ2xvcyhjb25zdCB2YWxhcnJheTxfVHA+JiBfX2UxLCBjb25zdCBfRG9tJiBfX2UyKQorICAgICAgOiBfQmFzZShfX2UxLCBfX2UyKSB7fQorICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX09wZXIsIGNsYXNzIF9Eb20+CisgICAgc3RydWN0IF9CaW5DbG9zPF9PcGVyLCBfRXhwciwgX0NvbnN0YW50LCBfRG9tLCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPgorICAgIDogX0JpbkJhc2UyPF9PcGVyLCBfRG9tPgorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7CisgICAgICB0eXBlZGVmIF9CaW5CYXNlMjxfT3BlcixfRG9tPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKworICAgICAgX0JpbkNsb3MoY29uc3QgX0RvbSYgX19lMSwgY29uc3QgX1RwJiBfX2UyKSA6IF9CYXNlKF9fZTEsIF9fZTIpIHt9CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfT3BlciwgY2xhc3MgX0RvbT4KKyAgICBzdHJ1Y3QgX0JpbkNsb3M8X09wZXIsIF9Db25zdGFudCwgX0V4cHIsIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsIF9Eb20+CisgICAgOiBfQmluQmFzZTE8X09wZXIsIF9Eb20+CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsKKyAgICAgIHR5cGVkZWYgX0JpbkJhc2UxPF9PcGVyLCBfRG9tPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKworICAgICAgX0JpbkNsb3MoY29uc3QgX1RwJiBfX2UxLCBjb25zdCBfRG9tJiBfX2UyKSA6IF9CYXNlKF9fZTEsIF9fZTIpIHt9CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfT3BlciwgdHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfQmluQ2xvczxfT3BlciwgX1ZhbEFycmF5LCBfQ29uc3RhbnQsIF9UcCwgX1RwPgorICAgIDogX0JpbkJhc2UyPF9PcGVyLCB2YWxhcnJheTxfVHA+ID4KKyAgICB7CisgICAgICB0eXBlZGVmIF9CaW5CYXNlMjxfT3Blcix2YWxhcnJheTxfVHA+ID4gX0Jhc2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisKKyAgICAgIF9CaW5DbG9zKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdiwgY29uc3QgX1RwJiBfX3QpIDogX0Jhc2UoX192LCBfX3QpIHt9CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfT3BlciwgdHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfQmluQ2xvczxfT3BlciwgX0NvbnN0YW50LCBfVmFsQXJyYXksIF9UcCwgX1RwPgorICAgIDogX0JpbkJhc2UxPF9PcGVyLCB2YWxhcnJheTxfVHA+ID4KKyAgICB7CisgICAgICB0eXBlZGVmIF9CaW5CYXNlMTxfT3BlciwgdmFsYXJyYXk8X1RwPiA+IF9CYXNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworCisgICAgICBfQmluQ2xvcyhjb25zdCBfVHAmIF9fdCwgY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSA6IF9CYXNlKF9fdCwgX192KSB7fQorICAgIH07CisKKyAgICAvLworICAgIC8vIHNsaWNlX2FycmF5IGNsb3N1cmUuCisgICAgLy8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0RvbT4gCisgICAgY2xhc3MgX1NCYXNlCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworICAgICAgCisgICAgICBfU0Jhc2UgKGNvbnN0IF9Eb20mIF9fZSwgY29uc3Qgc2xpY2UmIF9fcykKKyAgICAgIDogX01fZXhwciAoX19lKSwgX01fc2xpY2UgKF9fcykge30KKyAgICAgICAgCisgICAgICB2YWx1ZV90eXBlCisgICAgICBvcGVyYXRvcltdIChzaXplX3QgX19pKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZXhwcltfTV9zbGljZS5zdGFydCAoKSArIF9faSAqIF9NX3NsaWNlLnN0cmlkZSAoKV07IH0KKyAgICAgICAgCisgICAgICBzaXplX3QKKyAgICAgIHNpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fc2xpY2Uuc2l6ZSAoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIGNvbnN0IF9Eb20mIF9NX2V4cHI7CisgICAgICBjb25zdCBzbGljZSYgX01fc2xpY2U7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgX1NCYXNlPF9BcnJheTxfVHA+ID4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKKyAgICAgIAorICAgICAgX1NCYXNlIChfQXJyYXk8X1RwPiBfX2EsIGNvbnN0IHNsaWNlJiBfX3MpCisgICAgICA6IF9NX2FycmF5IChfX2EuX01fZGF0YStfX3Muc3RhcnQoKSksIF9NX3NpemUgKF9fcy5zaXplKCkpLAorCV9NX3N0cmlkZSAoX19zLnN0cmlkZSgpKSB7fQorICAgICAgICAKKyAgICAgIHZhbHVlX3R5cGUKKyAgICAgIG9wZXJhdG9yW10gKHNpemVfdCBfX2kpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9hcnJheS5fTV9kYXRhW19faSAqIF9NX3N0cmlkZV07IH0KKyAgICAgIAorICAgICAgc2l6ZV90CisgICAgICBzaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3NpemU7IH0KKworICAgIHByaXZhdGU6CisgICAgICBjb25zdCBfQXJyYXk8X1RwPiBfTV9hcnJheTsKKyAgICAgIGNvbnN0IHNpemVfdCBfTV9zaXplOworICAgICAgY29uc3Qgc2l6ZV90IF9NX3N0cmlkZTsKKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgc3RydWN0IF9TQ2xvczxfRXhwciwgX0RvbT4KKyAgICA6IF9TQmFzZTxfRG9tPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1NCYXNlPF9Eb20+IF9CYXNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworICAgICAgCisgICAgICBfU0Nsb3MgKGNvbnN0IF9Eb20mIF9fZSwgY29uc3Qgc2xpY2UmIF9fcykgOiBfQmFzZSAoX19lLCBfX3MpIHt9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9TQ2xvczxfVmFsQXJyYXksIF9UcD4KKyAgICA6IF9TQmFzZTxfQXJyYXk8X1RwPiA+CisgICAgeworICAgICAgdHlwZWRlZiAgX1NCYXNlPF9BcnJheTxfVHA+ID4gX0Jhc2U7CisgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOworICAgICAgCisgICAgICBfU0Nsb3MgKF9BcnJheTxfVHA+IF9fYSwgY29uc3Qgc2xpY2UmIF9fcykgOiBfQmFzZSAoX19hLCBfX3MpIHt9CisgICAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYgLyogX0NQUF9WQUxBUlJBWV9CRUZPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3ZlY3Rvci50Y2MgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2JpdHMvdmVjdG9yLnRjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTA5NzkzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzL3ZlY3Rvci50Y2MKQEAgLTAsMCArMSw3MjIgQEAKKy8vIFZlY3RvciBpbXBsZW1lbnRhdGlvbiAob3V0IG9mIGxpbmUpIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzICBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgdmVjdG9yLnRjYworICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWZuZGVmIF9WRUNUT1JfVENDCisjZGVmaW5lIF9WRUNUT1JfVENDIDEKKworX0dMSUJDWFhfQkVHSU5fTkVTVEVEX05BTUVTUEFDRShzdGQsIF9HTElCQ1hYX1NURF9EKQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICB2ZWN0b3I8X1RwLCBfQWxsb2M+OjoKKyAgICByZXNlcnZlKHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgaWYgKF9fbiA+IHRoaXMtPm1heF9zaXplKCkpCisJX190aHJvd19sZW5ndGhfZXJyb3IoX19OKCJ2ZWN0b3I6OnJlc2VydmUiKSk7CisgICAgICBpZiAodGhpcy0+Y2FwYWNpdHkoKSA8IF9fbikKKwl7CisJICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKKwkgIHBvaW50ZXIgX190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShfX24sCisJCSBfR0xJQkNYWF9NQUtFX01PVkVfSVRFUkFUT1IodGhpcy0+X01faW1wbC5fTV9zdGFydCksCisJCSBfR0xJQkNYWF9NQUtFX01PVkVfSVRFUkFUT1IodGhpcy0+X01faW1wbC5fTV9maW5pc2gpKTsKKwkgIHN0ZDo6X0Rlc3Ryb3kodGhpcy0+X01faW1wbC5fTV9zdGFydCwgdGhpcy0+X01faW1wbC5fTV9maW5pc2gsCisJCQlfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCSAgX01fZGVhbGxvY2F0ZSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LAorCQkJdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZQorCQkJLSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0KTsKKwkgIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgPSBfX3RtcDsKKwkgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoID0gX190bXAgKyBfX29sZF9zaXplOworCSAgdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSA9IHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgKyBfX247CisJfQorICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgdm9pZAorICAgICAgdmVjdG9yPF9UcCwgX0FsbG9jPjo6CisgICAgICBlbXBsYWNlX2JhY2soX0FyZ3MmJi4uLiBfX2FyZ3MpCisgICAgICB7CisJaWYgKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoICE9IHRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UpCisJICB7CisJICAgIHRoaXMtPl9NX2ltcGwuY29uc3RydWN0KHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkJCSAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCSAgICArK3RoaXMtPl9NX2ltcGwuX01fZmluaXNoOworCSAgfQorCWVsc2UKKwkgIF9NX2luc2VydF9hdXgoZW5kKCksIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisgICAgICB9CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSB2ZWN0b3I8X1RwLCBfQWxsb2M+OjppdGVyYXRvcgorICAgIHZlY3RvcjxfVHAsIF9BbGxvYz46OgorICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgeworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOworICAgICAgaWYgKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoICE9IHRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UKKwkgICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpCisJeworCSAgdGhpcy0+X01faW1wbC5jb25zdHJ1Y3QodGhpcy0+X01faW1wbC5fTV9maW5pc2gsIF9feCk7CisJICArK3RoaXMtPl9NX2ltcGwuX01fZmluaXNoOworCX0KKyAgICAgIGVsc2UKKwl7CisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKwkgIGlmICh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCAhPSB0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlKQorCSAgICB7CisJICAgICAgX1RwIF9feF9jb3B5ID0gX194OworCSAgICAgIF9NX2luc2VydF9hdXgoX19wb3NpdGlvbiwgc3RkOjptb3ZlKF9feF9jb3B5KSk7CisJICAgIH0KKwkgIGVsc2UKKyNlbmRpZgorCSAgICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRpb24sIF9feCk7CisJfQorICAgICAgcmV0dXJuIGl0ZXJhdG9yKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgKyBfX24pOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSB2ZWN0b3I8X1RwLCBfQWxsb2M+OjppdGVyYXRvcgorICAgIHZlY3RvcjxfVHAsIF9BbGxvYz46OgorICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgeworICAgICAgaWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQorCV9HTElCQ1hYX01PVkUzKF9fcG9zaXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CisgICAgICAtLXRoaXMtPl9NX2ltcGwuX01fZmluaXNoOworICAgICAgdGhpcy0+X01faW1wbC5kZXN0cm95KHRoaXMtPl9NX2ltcGwuX01fZmluaXNoKTsKKyAgICAgIHJldHVybiBfX3Bvc2l0aW9uOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSB2ZWN0b3I8X1RwLCBfQWxsb2M+OjppdGVyYXRvcgorICAgIHZlY3RvcjxfVHAsIF9BbGxvYz46OgorICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICBpZiAoX19sYXN0ICE9IGVuZCgpKQorCV9HTElCQ1hYX01PVkUzKF9fbGFzdCwgZW5kKCksIF9fZmlyc3QpOworICAgICAgX01fZXJhc2VfYXRfZW5kKF9fZmlyc3QuYmFzZSgpICsgKGVuZCgpIC0gX19sYXN0KSk7CisgICAgICByZXR1cm4gX19maXJzdDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdmVjdG9yPF9UcCwgX0FsbG9jPiYKKyAgICB2ZWN0b3I8X1RwLCBfQWxsb2M+OjoKKyAgICBvcGVyYXRvcj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KQorICAgIHsKKyAgICAgIGlmICgmX194ICE9IHRoaXMpCisJeworCSAgY29uc3Qgc2l6ZV90eXBlIF9feGxlbiA9IF9feC5zaXplKCk7CisJICBpZiAoX194bGVuID4gY2FwYWNpdHkoKSkKKwkgICAgeworCSAgICAgIHBvaW50ZXIgX190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShfX3hsZW4sIF9feC5iZWdpbigpLAorCQkJCQkJICAgX194LmVuZCgpKTsKKwkgICAgICBzdGQ6Ol9EZXN0cm95KHRoaXMtPl9NX2ltcGwuX01fc3RhcnQsIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkJICAgIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJICAgICAgX01fZGVhbGxvY2F0ZSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LAorCQkJICAgIHRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UKKwkJCSAgICAtIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQpOworCSAgICAgIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgPSBfX3RtcDsKKwkgICAgICB0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlID0gdGhpcy0+X01faW1wbC5fTV9zdGFydCArIF9feGxlbjsKKwkgICAgfQorCSAgZWxzZSBpZiAoc2l6ZSgpID49IF9feGxlbikKKwkgICAgeworCSAgICAgIHN0ZDo6X0Rlc3Ryb3koc3RkOjpjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIGJlZ2luKCkpLAorCQkJICAgIGVuZCgpLCBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBzdGQ6OmNvcHkoX194Ll9NX2ltcGwuX01fc3RhcnQsIF9feC5fTV9pbXBsLl9NX3N0YXJ0ICsgc2l6ZSgpLAorCQkJdGhpcy0+X01faW1wbC5fTV9zdGFydCk7CisJICAgICAgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfY29weV9hKF9feC5fTV9pbXBsLl9NX3N0YXJ0ICsgc2l6ZSgpLAorCQkJCQkgIF9feC5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJCQkJICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJCQkJICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCSAgICB9CisJICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCA9IHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgKyBfX3hsZW47CisJfQorICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgdmVjdG9yPF9UcCwgX0FsbG9jPjo6CisgICAgX01fZmlsbF9hc3NpZ24oc2l6ZV90IF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX192YWwpCisgICAgeworICAgICAgaWYgKF9fbiA+IGNhcGFjaXR5KCkpCisJeworCSAgdmVjdG9yIF9fdG1wKF9fbiwgX192YWwsIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJICBfX3RtcC5zd2FwKCp0aGlzKTsKKwl9CisgICAgICBlbHNlIGlmIChfX24gPiBzaXplKCkpCisJeworCSAgc3RkOjpmaWxsKGJlZ2luKCksIGVuZCgpLCBfX3ZhbCk7CisJICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9maWxsX25fYSh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJCQkJX19uIC0gc2l6ZSgpLCBfX3ZhbCwKKwkJCQkJX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwkgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoICs9IF9fbiAtIHNpemUoKTsKKwl9CisgICAgICBlbHNlCisgICAgICAgIF9NX2VyYXNlX2F0X2VuZChzdGQ6OmZpbGxfbih0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LCBfX24sIF9fdmFsKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgdmVjdG9yPF9UcCwgX0FsbG9jPjo6CisgICAgICBfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJICAgIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnKQorICAgICAgeworCXBvaW50ZXIgX19jdXIodGhpcy0+X01faW1wbC5fTV9zdGFydCk7CisJZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IHRoaXMtPl9NX2ltcGwuX01fZmluaXNoOworCSAgICAgKytfX2N1ciwgKytfX2ZpcnN0KQorCSAgKl9fY3VyID0gKl9fZmlyc3Q7CisJaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCSAgX01fZXJhc2VfYXRfZW5kKF9fY3VyKTsKKwllbHNlCisJICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIHZlY3RvcjxfVHAsIF9BbGxvYz46OgorICAgICAgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQkgICAgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZykKKyAgICAgIHsKKwljb25zdCBzaXplX3R5cGUgX19sZW4gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CisKKwlpZiAoX19sZW4gPiBjYXBhY2l0eSgpKQorCSAgeworCSAgICBwb2ludGVyIF9fdG1wKF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbGVuLCBfX2ZpcnN0LCBfX2xhc3QpKTsKKwkgICAgc3RkOjpfRGVzdHJveSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LCB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJCSAgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwkgICAgX01fZGVhbGxvY2F0ZSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LAorCQkJICB0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlCisJCQkgIC0gdGhpcy0+X01faW1wbC5fTV9zdGFydCk7CisJICAgIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgPSBfX3RtcDsKKwkgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2ggPSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0ICsgX19sZW47CisJICAgIHRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UgPSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaDsKKwkgIH0KKwllbHNlIGlmIChzaXplKCkgPj0gX19sZW4pCisJICBfTV9lcmFzZV9hdF9lbmQoc3RkOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgdGhpcy0+X01faW1wbC5fTV9zdGFydCkpOworCWVsc2UKKwkgIHsKKwkgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7CisJICAgIHN0ZDo6YWR2YW5jZShfX21pZCwgc2l6ZSgpKTsKKwkgICAgc3RkOjpjb3B5KF9fZmlyc3QsIF9fbWlkLCB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0KTsKKwkgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2ggPQorCSAgICAgIHN0ZDo6X191bmluaXRpYWxpemVkX2NvcHlfYShfX21pZCwgX19sYXN0LAorCQkJCQkgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkJCQkgIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJICB9CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgIHR5cGVuYW1lIHZlY3RvcjxfVHAsIF9BbGxvYz46Oml0ZXJhdG9yCisgICAgICB2ZWN0b3I8X1RwLCBfQWxsb2M+OjoKKyAgICAgIGVtcGxhY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisgICAgICB7CisJY29uc3Qgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOworCWlmICh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCAhPSB0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlCisJICAgICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpCisJICB7CisJICAgIHRoaXMtPl9NX2ltcGwuY29uc3RydWN0KHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkJCSAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCSAgICArK3RoaXMtPl9NX2ltcGwuX01fZmluaXNoOworCSAgfQorCWVsc2UKKwkgIF9NX2luc2VydF9hdXgoX19wb3NpdGlvbiwgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwlyZXR1cm4gaXRlcmF0b3IodGhpcy0+X01faW1wbC5fTV9zdGFydCArIF9fbik7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICB2b2lkCisgICAgICB2ZWN0b3I8X1RwLCBfQWxsb2M+OjoKKyAgICAgIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisjZWxzZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgdmVjdG9yPF9UcCwgX0FsbG9jPjo6CisgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkKKyNlbmRpZgorICAgIHsKKyAgICAgIGlmICh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCAhPSB0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlKQorCXsKKwkgIHRoaXMtPl9NX2ltcGwuY29uc3RydWN0KHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkJCSAgX0dMSUJDWFhfTU9WRSgqKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoCisJCQkJCQkgIC0gMSkpKTsKKwkgICsrdGhpcy0+X01faW1wbC5fTV9maW5pc2g7CisjaWZuZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisJICBfVHAgX194X2NvcHkgPSBfX3g7CisjZW5kaWYKKwkgIF9HTElCQ1hYX01PVkVfQkFDS1dBUkQzKF9fcG9zaXRpb24uYmFzZSgpLAorCQkJCSAgdGhpcy0+X01faW1wbC5fTV9maW5pc2ggLSAyLAorCQkJCSAgdGhpcy0+X01faW1wbC5fTV9maW5pc2ggLSAxKTsKKyNpZm5kZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKwkgICpfX3Bvc2l0aW9uID0gX194X2NvcHk7CisjZWxzZQorCSAgKl9fcG9zaXRpb24gPSBfVHAoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKyNlbmRpZgorCX0KKyAgICAgIGVsc2UKKwl7CisJICBjb25zdCBzaXplX3R5cGUgX19sZW4gPQorCSAgICBfTV9jaGVja19sZW4oc2l6ZV90eXBlKDEpLCAidmVjdG9yOjpfTV9pbnNlcnRfYXV4Iik7CisJICBjb25zdCBzaXplX3R5cGUgX19lbGVtc19iZWZvcmUgPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKKwkgIHBvaW50ZXIgX19uZXdfc3RhcnQodGhpcy0+X01fYWxsb2NhdGUoX19sZW4pKTsKKwkgIHBvaW50ZXIgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICAvLyBUaGUgb3JkZXIgb2YgdGhlIHRocmVlIG9wZXJhdGlvbnMgaXMgZGljdGF0ZWQgYnkgdGhlIEMrKzB4CisJICAgICAgLy8gY2FzZSwgd2hlcmUgdGhlIG1vdmVzIGNvdWxkIGFsdGVyIGEgbmV3IGVsZW1lbnQgYmVsb25naW5nCisJICAgICAgLy8gdG8gdGhlIGV4aXN0aW5nIHZlY3Rvci4gIFRoaXMgaXMgYW4gaXNzdWUgb25seSBmb3IgY2FsbGVycworCSAgICAgIC8vIHRha2luZyB0aGUgZWxlbWVudCBieSBjb25zdCBsdmFsdWUgcmVmIChzZWUgMjMuMS8xMykuCisJICAgICAgdGhpcy0+X01faW1wbC5jb25zdHJ1Y3QoX19uZXdfc3RhcnQgKyBfX2VsZW1zX2JlZm9yZSwKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworCQkJCSAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisjZWxzZQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9feCk7CisjZW5kaWYKKwkgICAgICBfX25ld19maW5pc2ggPSAwOworCisJICAgICAgX19uZXdfZmluaXNoID0KKwkJc3RkOjpfX3VuaW5pdGlhbGl6ZWRfbW92ZV9hKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQsCisJCQkJCSAgICBfX3Bvc2l0aW9uLmJhc2UoKSwgX19uZXdfc3RhcnQsCisJCQkJCSAgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCSAgICAgICsrX19uZXdfZmluaXNoOworCisJICAgICAgX19uZXdfZmluaXNoID0KKwkJc3RkOjpfX3VuaW5pdGlhbGl6ZWRfbW92ZV9hKF9fcG9zaXRpb24uYmFzZSgpLAorCQkJCQkgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2gsCisJCQkJCSAgICBfX25ld19maW5pc2gsCisJCQkJCSAgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCSAgICB9CisgICAgICAgICAgX19jYXRjaCguLi4pCisJICAgIHsKKwkgICAgICBpZiAoIV9fbmV3X2ZpbmlzaCkKKwkJdGhpcy0+X01faW1wbC5kZXN0cm95KF9fbmV3X3N0YXJ0ICsgX19lbGVtc19iZWZvcmUpOworCSAgICAgIGVsc2UKKwkJc3RkOjpfRGVzdHJveShfX25ld19zdGFydCwgX19uZXdfZmluaXNoLCBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCSAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQsIF9fbGVuKTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCSAgc3RkOjpfRGVzdHJveSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LCB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJCV9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJICBfTV9kZWFsbG9jYXRlKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQsCisJCQl0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlCisJCQktIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQpOworCSAgdGhpcy0+X01faW1wbC5fTV9zdGFydCA9IF9fbmV3X3N0YXJ0OworCSAgdGhpcy0+X01faW1wbC5fTV9maW5pc2ggPSBfX25ld19maW5pc2g7CisJICB0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICB2ZWN0b3I8X1RwLCBfQWxsb2M+OjoKKyAgICBfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgeworICAgICAgaWYgKF9fbiAhPSAwKQorCXsKKwkgIGlmIChzaXplX3R5cGUodGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZQorCQkJLSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCkgPj0gX19uKQorCSAgICB7CisJICAgICAgdmFsdWVfdHlwZSBfX3hfY29weSA9IF9feDsKKwkgICAgICBjb25zdCBzaXplX3R5cGUgX19lbGVtc19hZnRlciA9IGVuZCgpIC0gX19wb3NpdGlvbjsKKwkgICAgICBwb2ludGVyIF9fb2xkX2ZpbmlzaCh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCk7CisJICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24pCisJCXsKKwkJICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9tb3ZlX2EodGhpcy0+X01faW1wbC5fTV9maW5pc2ggLSBfX24sCisJCQkJCSAgICAgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkJCQkgICAgICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJCQkJICAgICAgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwkJICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCArPSBfX247CisJCSAgX0dMSUJDWFhfTU9WRV9CQUNLV0FSRDMoX19wb3NpdGlvbi5iYXNlKCksCisJCQkJCSAgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOworCQkgIHN0ZDo6ZmlsbChfX3Bvc2l0aW9uLmJhc2UoKSwgX19wb3NpdGlvbi5iYXNlKCkgKyBfX24sCisJCQkgICAgX194X2NvcHkpOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2EodGhpcy0+X01faW1wbC5fTV9maW5pc2gsCisJCQkJCQlfX24gLSBfX2VsZW1zX2FmdGVyLAorCQkJCQkJX194X2NvcHksCisJCQkJCQlfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCQkgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7CisJCSAgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfbW92ZV9hKF9fcG9zaXRpb24uYmFzZSgpLCBfX29sZF9maW5pc2gsCisJCQkJCSAgICAgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkJCQkgICAgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCQkgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CisJCSAgc3RkOjpmaWxsKF9fcG9zaXRpb24uYmFzZSgpLCBfX29sZF9maW5pc2gsIF9feF9jb3B5KTsKKwkJfQorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPQorCQlfTV9jaGVja19sZW4oX19uLCAidmVjdG9yOjpfTV9maWxsX2luc2VydCIpOworCSAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2JlZm9yZSA9IF9fcG9zaXRpb24gLSBiZWdpbigpOworCSAgICAgIHBvaW50ZXIgX19uZXdfc3RhcnQodGhpcy0+X01fYWxsb2NhdGUoX19sZW4pKTsKKwkgICAgICBwb2ludGVyIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CisJICAgICAgX190cnkKKwkJeworCQkgIC8vIFNlZSBfTV9pbnNlcnRfYXV4IGFib3ZlLgorCQkgIHN0ZDo6X191bmluaXRpYWxpemVkX2ZpbGxfbl9hKF9fbmV3X3N0YXJ0ICsgX19lbGVtc19iZWZvcmUsCisJCQkJCQlfX24sIF9feCwKKwkJCQkJCV9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJCSAgX19uZXdfZmluaXNoID0gMDsKKworCQkgIF9fbmV3X2ZpbmlzaCA9CisJCSAgICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9tb3ZlX2EodGhpcy0+X01faW1wbC5fTV9zdGFydCwKKwkJCQkJCV9fcG9zaXRpb24uYmFzZSgpLAorCQkJCQkJX19uZXdfc3RhcnQsCisJCQkJCQlfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCQkgIF9fbmV3X2ZpbmlzaCArPSBfX247CisKKwkJICBfX25ld19maW5pc2ggPQorCQkgICAgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfbW92ZV9hKF9fcG9zaXRpb24uYmFzZSgpLAorCQkJCQkJdGhpcy0+X01faW1wbC5fTV9maW5pc2gsCisJCQkJCQlfX25ld19maW5pc2gsCisJCQkJCQlfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCQl9CisJICAgICAgX19jYXRjaCguLi4pCisJCXsKKwkJICBpZiAoIV9fbmV3X2ZpbmlzaCkKKwkJICAgIHN0ZDo6X0Rlc3Ryb3koX19uZXdfc3RhcnQgKyBfX2VsZW1zX2JlZm9yZSwKKwkJCQkgIF9fbmV3X3N0YXJ0ICsgX19lbGVtc19iZWZvcmUgKyBfX24sCisJCQkJICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCQkgIGVsc2UKKwkJICAgIHN0ZDo6X0Rlc3Ryb3koX19uZXdfc3RhcnQsIF9fbmV3X2ZpbmlzaCwKKwkJCQkgIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJCSAgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydCwgX19sZW4pOworCQkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCQl9CisJICAgICAgc3RkOjpfRGVzdHJveSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LCB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJCSAgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCSAgICAgIF9NX2RlYWxsb2NhdGUodGhpcy0+X01faW1wbC5fTV9zdGFydCwKKwkJCSAgICB0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlCisJCQkgICAgLSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0KTsKKwkgICAgICB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CisJICAgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2ggPSBfX25ld19maW5pc2g7CisJICAgICAgdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CisJICAgIH0KKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgdmVjdG9yPF9UcCwgX0FsbG9jPjo6CisgICAgICBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCisJCSAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgc3RkOjppbnB1dF9pdGVyYXRvcl90YWcpCisgICAgICB7CisJZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCisJICB7CisJICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CisJICAgICsrX19wb3M7CisJICB9CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIHZlY3RvcjxfVHAsIF9BbGxvYz46OgorICAgICAgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKKwkJICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcpCisgICAgICB7CisJaWYgKF9fZmlyc3QgIT0gX19sYXN0KQorCSAgeworCSAgICBjb25zdCBzaXplX3R5cGUgX19uID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOworCSAgICBpZiAoc2l6ZV90eXBlKHRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UKKwkJCSAgLSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCkgPj0gX19uKQorCSAgICAgIHsKKwkJY29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRpb247CisJCXBvaW50ZXIgX19vbGRfZmluaXNoKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoKTsKKwkJaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24pCisJCSAgeworCQkgICAgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfbW92ZV9hKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoIC0gX19uLAorCQkJCQkJdGhpcy0+X01faW1wbC5fTV9maW5pc2gsCisJCQkJCQl0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJCQkJCV9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJCSAgICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCArPSBfX247CisJCSAgICBfR0xJQkNYWF9NT1ZFX0JBQ0tXQVJEMyhfX3Bvc2l0aW9uLmJhc2UoKSwKKwkJCQkJICAgIF9fb2xkX2ZpbmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKKwkJICAgIHN0ZDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcG9zaXRpb24pOworCQkgIH0KKwkJZWxzZQorCQkgIHsKKwkJICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OworCQkgICAgc3RkOjphZHZhbmNlKF9fbWlkLCBfX2VsZW1zX2FmdGVyKTsKKwkJICAgIHN0ZDo6X191bmluaXRpYWxpemVkX2NvcHlfYShfX21pZCwgX19sYXN0LAorCQkJCQkJdGhpcy0+X01faW1wbC5fTV9maW5pc2gsCisJCQkJCQlfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCQkgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2ggKz0gX19uIC0gX19lbGVtc19hZnRlcjsKKwkJICAgIHN0ZDo6X191bmluaXRpYWxpemVkX21vdmVfYShfX3Bvc2l0aW9uLmJhc2UoKSwKKwkJCQkJCV9fb2xkX2ZpbmlzaCwKKwkJCQkJCXRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkJCQkJX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwkJICAgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CisJCSAgICBzdGQ6OmNvcHkoX19maXJzdCwgX19taWQsIF9fcG9zaXRpb24pOworCQkgIH0KKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICB7CisJCWNvbnN0IHNpemVfdHlwZSBfX2xlbiA9CisJCSAgX01fY2hlY2tfbGVuKF9fbiwgInZlY3Rvcjo6X01fcmFuZ2VfaW5zZXJ0Iik7CisJCXBvaW50ZXIgX19uZXdfc3RhcnQodGhpcy0+X01fYWxsb2NhdGUoX19sZW4pKTsKKwkJcG9pbnRlciBfX25ld19maW5pc2goX19uZXdfc3RhcnQpOworCQlfX3RyeQorCQkgIHsKKwkJICAgIF9fbmV3X2ZpbmlzaCA9CisJCSAgICAgIHN0ZDo6X191bmluaXRpYWxpemVkX21vdmVfYSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LAorCQkJCQkJICBfX3Bvc2l0aW9uLmJhc2UoKSwKKwkJCQkJCSAgX19uZXdfc3RhcnQsCisJCQkJCQkgIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJCSAgICBfX25ld19maW5pc2ggPQorCQkgICAgICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9jb3B5X2EoX19maXJzdCwgX19sYXN0LAorCQkJCQkJICBfX25ld19maW5pc2gsCisJCQkJCQkgIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJCSAgICBfX25ld19maW5pc2ggPQorCQkgICAgICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9tb3ZlX2EoX19wb3NpdGlvbi5iYXNlKCksCisJCQkJCQkgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkJCQkJICBfX25ld19maW5pc2gsCisJCQkJCQkgIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJCSAgfQorCQlfX2NhdGNoKC4uLikKKwkJICB7CisJCSAgICBzdGQ6Ol9EZXN0cm95KF9fbmV3X3N0YXJ0LCBfX25ld19maW5pc2gsCisJCQkJICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCQkgICAgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydCwgX19sZW4pOworCQkgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJCSAgfQorCQlzdGQ6Ol9EZXN0cm95KHRoaXMtPl9NX2ltcGwuX01fc3RhcnQsIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkJICAgICAgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwkJX01fZGVhbGxvY2F0ZSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LAorCQkJICAgICAgdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZQorCQkJICAgICAgLSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0KTsKKwkJdGhpcy0+X01faW1wbC5fTV9zdGFydCA9IF9fbmV3X3N0YXJ0OworCQl0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKKwkJdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CisJICAgICAgfQorCSAgfQorICAgICAgfQorCisKKyAgLy8gdmVjdG9yPGJvb2w+CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICB2ZWN0b3I8Ym9vbCwgX0FsbG9jPjo6CisgICAgcmVzZXJ2ZShzaXplX3R5cGUgX19uKQorICAgIHsKKyAgICAgIGlmIChfX24gPiB0aGlzLT5tYXhfc2l6ZSgpKQorCV9fdGhyb3dfbGVuZ3RoX2Vycm9yKF9fTigidmVjdG9yOjpyZXNlcnZlIikpOworICAgICAgaWYgKHRoaXMtPmNhcGFjaXR5KCkgPCBfX24pCisJeworCSAgX0JpdF90eXBlKiBfX3EgPSB0aGlzLT5fTV9hbGxvY2F0ZShfX24pOworCSAgdGhpcy0+X01faW1wbC5fTV9maW5pc2ggPSBfTV9jb3B5X2FsaWduZWQoYmVnaW4oKSwgZW5kKCksCisJCQkJCQkgICAgaXRlcmF0b3IoX19xLCAwKSk7CisJICB0aGlzLT5fTV9kZWFsbG9jYXRlKCk7CisJICB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKKwkgIHRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UgPSAoX19xICsgKF9fbiArIGludChfU193b3JkX2JpdCkgLSAxKQorCQkJCQkgICAgIC8gaW50KF9TX3dvcmRfYml0KSk7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIHZlY3Rvcjxib29sLCBfQWxsb2M+OjoKKyAgICBfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBib29sIF9feCkKKyAgICB7CisgICAgICBpZiAoX19uID09IDApCisJcmV0dXJuOworICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKQorCXsKKwkgIHN0ZDo6Y29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwKKwkJCSAgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CisJICBzdGQ6OmZpbGwoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIGRpZmZlcmVuY2VfdHlwZShfX24pLCBfX3gpOworCSAgdGhpcy0+X01faW1wbC5fTV9maW5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9fbik7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IAorCSAgICBfTV9jaGVja19sZW4oX19uLCAidmVjdG9yPGJvb2w+OjpfTV9maWxsX2luc2VydCIpOworCSAgX0JpdF90eXBlICogX19xID0gdGhpcy0+X01fYWxsb2NhdGUoX19sZW4pOworCSAgaXRlcmF0b3IgX19pID0gX01fY29weV9hbGlnbmVkKGJlZ2luKCksIF9fcG9zaXRpb24sCisJCQkJCSBpdGVyYXRvcihfX3EsIDApKTsKKwkgIHN0ZDo6ZmlsbChfX2ksIF9faSArIGRpZmZlcmVuY2VfdHlwZShfX24pLCBfX3gpOworCSAgdGhpcy0+X01faW1wbC5fTV9maW5pc2ggPSBzdGQ6OmNvcHkoX19wb3NpdGlvbiwgZW5kKCksCisJCQkJCSAgICAgIF9faSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKKwkgIHRoaXMtPl9NX2RlYWxsb2NhdGUoKTsKKwkgIHRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UgPSAoX19xICsgKChfX2xlbgorCQkJCQkJICAgICArIGludChfU193b3JkX2JpdCkgLSAxKQorCQkJCQkJICAgIC8gaW50KF9TX3dvcmRfYml0KSkpOworCSAgdGhpcy0+X01faW1wbC5fTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIHZlY3Rvcjxib29sLCBfQWxsb2M+OjoKKyAgICAgIF9NX2luc2VydF9yYW5nZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIAorCQkgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZykKKyAgICAgIHsKKwlpZiAoX19maXJzdCAhPSBfX2xhc3QpCisJICB7CisJICAgIHNpemVfdHlwZSBfX24gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CisJICAgIGlmIChjYXBhY2l0eSgpIC0gc2l6ZSgpID49IF9fbikKKwkgICAgICB7CisJCXN0ZDo6Y29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwKKwkJCQkgICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaAorCQkJCSAgICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOworCQlzdGQ6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKKwkJdGhpcy0+X01faW1wbC5fTV9maW5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9fbik7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgeworCQljb25zdCBzaXplX3R5cGUgX19sZW4gPQorCQkgIF9NX2NoZWNrX2xlbihfX24sICJ2ZWN0b3I8Ym9vbD46Ol9NX2luc2VydF9yYW5nZSIpOworCQlfQml0X3R5cGUgKiBfX3EgPSB0aGlzLT5fTV9hbGxvY2F0ZShfX2xlbik7CisJCWl0ZXJhdG9yIF9faSA9IF9NX2NvcHlfYWxpZ25lZChiZWdpbigpLCBfX3Bvc2l0aW9uLAorCQkJCQkgICAgICAgaXRlcmF0b3IoX19xLCAwKSk7CisJCV9faSA9IHN0ZDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9faSk7CisJCXRoaXMtPl9NX2ltcGwuX01fZmluaXNoID0gc3RkOjpjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kpOworCQl0aGlzLT5fTV9kZWFsbG9jYXRlKCk7CisJCXRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UgPSAoX19xCisJCQkJCQkgICArICgoX19sZW4KKwkJCQkJCSAgICAgICArIGludChfU193b3JkX2JpdCkgLSAxKQorCQkJCQkJICAgICAgLyBpbnQoX1Nfd29yZF9iaXQpKSk7CisJCXRoaXMtPl9NX2ltcGwuX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOworCSAgICAgIH0KKwkgIH0KKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIHZlY3Rvcjxib29sLCBfQWxsb2M+OjoKKyAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJvb2wgX194KQorICAgIHsKKyAgICAgIGlmICh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9wICE9IHRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UpCisJeworCSAgc3RkOjpjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLCAKKwkJCSAgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2ggKyAxKTsKKwkgICpfX3Bvc2l0aW9uID0gX194OworCSAgKyt0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaDsKKwl9CisgICAgICBlbHNlCisJeworCSAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0KKwkgICAgX01fY2hlY2tfbGVuKHNpemVfdHlwZSgxKSwgInZlY3Rvcjxib29sPjo6X01faW5zZXJ0X2F1eCIpOworCSAgX0JpdF90eXBlICogX19xID0gdGhpcy0+X01fYWxsb2NhdGUoX19sZW4pOworCSAgaXRlcmF0b3IgX19pID0gX01fY29weV9hbGlnbmVkKGJlZ2luKCksIF9fcG9zaXRpb24sCisJCQkJCSBpdGVyYXRvcihfX3EsIDApKTsKKwkgICpfX2krKyA9IF9feDsKKwkgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoID0gc3RkOjpjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kpOworCSAgdGhpcy0+X01fZGVhbGxvY2F0ZSgpOworCSAgdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSA9IChfX3EgKyAoKF9fbGVuCisJCQkJCQkgICAgICsgaW50KF9TX3dvcmRfYml0KSAtIDEpCisJCQkJCQkgICAgLyBpbnQoX1Nfd29yZF9iaXQpKSk7CisJICB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKKwl9CisgICAgfQorCitfR0xJQkNYWF9FTkRfTkVTVEVEX05BTUVTUEFDRQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgc2l6ZV90CisgICAgaGFzaDxfR0xJQkNYWF9TVERfRDo6dmVjdG9yPGJvb2wsIF9BbGxvYz4+OjoKKyAgICBvcGVyYXRvcigpKGNvbnN0IF9HTElCQ1hYX1NURF9EOjp2ZWN0b3I8Ym9vbCwgX0FsbG9jPiYgX19iKSBjb25zdAorICAgIHsKKyAgICAgIHNpemVfdCBfX2hhc2ggPSAwOworICAgICAgdXNpbmcgX0dMSUJDWFhfU1REX0Q6Ol9TX3dvcmRfYml0OworICAgICAgdXNpbmcgX0dMSUJDWFhfU1REX0Q6Ol9CaXRfdHlwZTsKKworICAgICAgY29uc3Qgc2l6ZV90IF9fd29yZHMgPSBfX2Iuc2l6ZSgpIC8gX1Nfd29yZF9iaXQ7CisgICAgICBpZiAoX193b3JkcykKKwl7CisJICBjb25zdCBzaXplX3QgX19jbGVuZ3RoID0gX193b3JkcyAqIHNpemVvZihfQml0X3R5cGUpOworCSAgX19oYXNoID0gc3RkOjpfRm52X2hhc2g6Omhhc2goX19iLl9NX2ltcGwuX01fc3RhcnQuX01fcCwgX19jbGVuZ3RoKTsKKwl9CisKKyAgICAgIGNvbnN0IHNpemVfdCBfX2V4dHJhYml0cyA9IF9fYi5zaXplKCkgJSBfU193b3JkX2JpdDsKKyAgICAgIGlmIChfX2V4dHJhYml0cykKKwl7CisJICBfQml0X3R5cGUgX19oaXdvcmQgPSAqX19iLl9NX2ltcGwuX01fZmluaXNoLl9NX3A7CisJICBfX2hpd29yZCAmPSB+KCh+c3RhdGljX2Nhc3Q8X0JpdF90eXBlPigwKSkgPDwgX19leHRyYWJpdHMpOworCisJICBjb25zdCBzaXplX3QgX19jbGVuZ3RoCisJICAgID0gKF9fZXh0cmFiaXRzICsgX19DSEFSX0JJVF9fIC0gMSkgLyBfX0NIQVJfQklUX187CisJICBpZiAoX193b3JkcykKKwkgICAgX19oYXNoID0gc3RkOjpfRm52X2hhc2g6Omhhc2goJl9faGl3b3JkLCBfX2NsZW5ndGgsIF9faGFzaCk7CisJICBlbHNlCisJICAgIF9faGFzaCA9IHN0ZDo6X0Zudl9oYXNoOjpoYXNoKCZfX2hpd29yZCwgX19jbGVuZ3RoKTsKKwl9CisKKyAgICAgIHJldHVybiBfX2hhc2g7CisgICAgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZiAvLyBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworCisjZW5kaWYgLyogX1ZFQ1RPUl9UQ0MgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0c2V0IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9iaXRzZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIzYjUxYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvYml0c2V0CkBAIC0wLDAgKzEsMTUzMCBAQAorLy8gPGJpdHNldD4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk4CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgaW5jbHVkZS9iaXRzZXQKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfQklUU0VUCisjZGVmaW5lIF9HTElCQ1hYX0JJVFNFVCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGNzdGRkZWY+ICAgICAvLyBGb3Igc2l6ZV90CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPGJpdHMvZnVuY3RleGNlcHQuaD4gICAvLyBGb3IgaW52YWxpZF9hcmd1bWVudCwgb3V0X29mX3JhbmdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdmVyZmxvd19lcnJvcgorI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNsdWRlIDxjeHhhYmktZm9yY2VkLmg+CisKKyNkZWZpbmUgX0dMSUJDWFhfQklUU0VUX0JJVFNfUEVSX1dPUkQgIChfX0NIQVJfQklUX18gKiBzaXplb2YodW5zaWduZWQgbG9uZykpCisjZGVmaW5lIF9HTElCQ1hYX0JJVFNFVF9XT1JEUyhfX24pIFwKKyAoKF9fbikgPCAxID8gMCA6ICgoX19uKSArIF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9XT1JEIC0gMSkgXAorICAgICAgICAgICAgICAgICAgLyBfR0xJQkNYWF9CSVRTRVRfQklUU19QRVJfV09SRCkKKworX0dMSUJDWFhfQkVHSU5fTkVTVEVEX05BTUVTUEFDRShzdGQsIF9HTElCQ1hYX1NURF9EKQorCisgIC8qKgorICAgKiAgQmFzZSBjbGFzcywgZ2VuZXJhbCBjYXNlLiAgSXQgaXMgYSBjbGFzcyBpbnZhcmlhbnQgdGhhdCBfTncgd2lsbCBiZQorICAgKiAgbm9ubmVnYXRpdmUuCisgICAqCisgICAqICBTZWUgZG9jdW1lbnRhdGlvbiBmb3IgYml0c2V0LgorICAqLworICB0ZW1wbGF0ZTxzaXplX3QgX053PgorICAgIHN0cnVjdCBfQmFzZV9iaXRzZXQKKyAgICB7CisgICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX1dvcmRUOworCisgICAgICAvLy8gMCBpcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgd29yZC4KKyAgICAgIF9Xb3JkVCAJCV9NX3dbX053XTsKKworICAgICAgX0Jhc2VfYml0c2V0KCkKKyAgICAgIHsgX01fZG9fcmVzZXQoKTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIF9CYXNlX2JpdHNldCh1bnNpZ25lZCBsb25nIGxvbmcgX192YWwpCisjZWxzZQorICAgICAgX0Jhc2VfYml0c2V0KHVuc2lnbmVkIGxvbmcgX192YWwpCisjZW5kaWYKKyAgICAgIHsKKwlfTV9kb19yZXNldCgpOworCV9NX3dbMF0gPSBfX3ZhbDsKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworCWlmIChzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSA+IHNpemVvZih1bnNpZ25lZCBsb25nKSkKKwkgIF9NX3dbMV0gPSBfX3ZhbCA+PiBfR0xJQkNYWF9CSVRTRVRfQklUU19QRVJfV09SRDsKKyNlbmRpZgorICAgICAgfQorCisgICAgICBzdGF0aWMgc2l6ZV90CisgICAgICBfU193aGljaHdvcmQoc2l6ZV90IF9fcG9zICkKKyAgICAgIHsgcmV0dXJuIF9fcG9zIC8gX0dMSUJDWFhfQklUU0VUX0JJVFNfUEVSX1dPUkQ7IH0KKworICAgICAgc3RhdGljIHNpemVfdAorICAgICAgX1Nfd2hpY2hieXRlKHNpemVfdCBfX3BvcyApCisgICAgICB7IHJldHVybiAoX19wb3MgJSBfR0xJQkNYWF9CSVRTRVRfQklUU19QRVJfV09SRCkgLyBfX0NIQVJfQklUX187IH0KKworICAgICAgc3RhdGljIHNpemVfdAorICAgICAgX1Nfd2hpY2hiaXQoc2l6ZV90IF9fcG9zICkKKyAgICAgIHsgcmV0dXJuIF9fcG9zICUgX0dMSUJDWFhfQklUU0VUX0JJVFNfUEVSX1dPUkQ7IH0KKworICAgICAgc3RhdGljIF9Xb3JkVAorICAgICAgX1NfbWFza2JpdChzaXplX3QgX19wb3MgKQorICAgICAgeyByZXR1cm4gKHN0YXRpY19jYXN0PF9Xb3JkVD4oMSkpIDw8IF9TX3doaWNoYml0KF9fcG9zKTsgfQorCisgICAgICBfV29yZFQmCisgICAgICBfTV9nZXR3b3JkKHNpemVfdCBfX3BvcykKKyAgICAgIHsgcmV0dXJuIF9NX3dbX1Nfd2hpY2h3b3JkKF9fcG9zKV07IH0KKworICAgICAgX1dvcmRUCisgICAgICBfTV9nZXR3b3JkKHNpemVfdCBfX3BvcykgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3dbX1Nfd2hpY2h3b3JkKF9fcG9zKV07IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBjb25zdCBfV29yZFQqCisgICAgICBfTV9nZXRkYXRhKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3c7IH0KKyNlbmRpZgorCisgICAgICBfV29yZFQmCisgICAgICBfTV9oaXdvcmQoKQorICAgICAgeyByZXR1cm4gX01fd1tfTncgLSAxXTsgfQorCisgICAgICBfV29yZFQKKyAgICAgIF9NX2hpd29yZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV93W19OdyAtIDFdOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RvX2FuZChjb25zdCBfQmFzZV9iaXRzZXQ8X053PiYgX194KQorICAgICAgeworCWZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9OdzsgX19pKyspCisJICBfTV93W19faV0gJj0gX194Ll9NX3dbX19pXTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01fZG9fb3IoY29uc3QgX0Jhc2VfYml0c2V0PF9Odz4mIF9feCkKKyAgICAgIHsKKwlmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfTnc7IF9faSsrKQorCSAgX01fd1tfX2ldIHw9IF9feC5fTV93W19faV07CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RvX3hvcihjb25zdCBfQmFzZV9iaXRzZXQ8X053PiYgX194KQorICAgICAgeworCWZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9OdzsgX19pKyspCisJICBfTV93W19faV0gXj0gX194Ll9NX3dbX19pXTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01fZG9fbGVmdF9zaGlmdChzaXplX3QgX19zaGlmdCk7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RvX3JpZ2h0X3NoaWZ0KHNpemVfdCBfX3NoaWZ0KTsKKworICAgICAgdm9pZAorICAgICAgX01fZG9fZmxpcCgpCisgICAgICB7CisJZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX053OyBfX2krKykKKwkgIF9NX3dbX19pXSA9IH5fTV93W19faV07CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RvX3NldCgpCisgICAgICB7CisJZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX053OyBfX2krKykKKwkgIF9NX3dbX19pXSA9IH5zdGF0aWNfY2FzdDxfV29yZFQ+KDApOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9kb19yZXNldCgpCisgICAgICB7IF9fYnVpbHRpbl9tZW1zZXQoX01fdywgMCwgX053ICogc2l6ZW9mKF9Xb3JkVCkpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIF9NX2lzX2VxdWFsKGNvbnN0IF9CYXNlX2JpdHNldDxfTnc+JiBfX3gpIGNvbnN0CisgICAgICB7CisJZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX053OyArK19faSkKKwkgIGlmIChfTV93W19faV0gIT0gX194Ll9NX3dbX19pXSkKKwkgICAgcmV0dXJuIGZhbHNlOworCXJldHVybiB0cnVlOworICAgICAgfQorCisgICAgICBzaXplX3QKKyAgICAgIF9NX2FyZV9hbGxfYXV4KCkgY29uc3QKKyAgICAgIHsKKwlmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfTncgLSAxOyBfX2krKykKKwkgIGlmIChfTV93W19faV0gIT0gfnN0YXRpY19jYXN0PF9Xb3JkVD4oMCkpCisJICAgIHJldHVybiAwOworCXJldHVybiAoKF9OdyAtIDEpICogX0dMSUJDWFhfQklUU0VUX0JJVFNfUEVSX1dPUkQKKwkJKyBfX2J1aWx0aW5fcG9wY291bnRsKF9NX2hpd29yZCgpKSk7CisgICAgICB9CisKKyAgICAgIGJvb2wKKyAgICAgIF9NX2lzX2FueSgpIGNvbnN0CisgICAgICB7CisJZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX053OyBfX2krKykKKwkgIGlmIChfTV93W19faV0gIT0gc3RhdGljX2Nhc3Q8X1dvcmRUPigwKSkKKwkgICAgcmV0dXJuIHRydWU7CisJcmV0dXJuIGZhbHNlOworICAgICAgfQorCisgICAgICBzaXplX3QKKyAgICAgIF9NX2RvX2NvdW50KCkgY29uc3QKKyAgICAgIHsKKwlzaXplX3QgX19yZXN1bHQgPSAwOworCWZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9OdzsgX19pKyspCisJICBfX3Jlc3VsdCArPSBfX2J1aWx0aW5fcG9wY291bnRsKF9NX3dbX19pXSk7CisJcmV0dXJuIF9fcmVzdWx0OworICAgICAgfQorCisgICAgICB1bnNpZ25lZCBsb25nCisgICAgICBfTV9kb190b191bG9uZygpIGNvbnN0OworCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZworICAgICAgX01fZG9fdG9fdWxsb25nKCkgY29uc3Q7CisjZW5kaWYKKworICAgICAgLy8gZmluZCBmaXJzdCAib24iIGJpdAorICAgICAgc2l6ZV90CisgICAgICBfTV9kb19maW5kX2ZpcnN0KHNpemVfdCBfX25vdF9mb3VuZCkgY29uc3Q7CisKKyAgICAgIC8vIGZpbmQgdGhlIG5leHQgIm9uIiBiaXQgdGhhdCBmb2xsb3dzICJwcmV2IgorICAgICAgc2l6ZV90CisgICAgICBfTV9kb19maW5kX25leHQoc2l6ZV90IF9fcHJldiwgc2l6ZV90IF9fbm90X2ZvdW5kKSBjb25zdDsKKyAgICB9OworCisgIC8vIERlZmluaXRpb25zIG9mIG5vbi1pbmxpbmUgZnVuY3Rpb25zIGZyb20gX0Jhc2VfYml0c2V0LgorICB0ZW1wbGF0ZTxzaXplX3QgX053PgorICAgIHZvaWQKKyAgICBfQmFzZV9iaXRzZXQ8X053Pjo6X01fZG9fbGVmdF9zaGlmdChzaXplX3QgX19zaGlmdCkKKyAgICB7CisgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX3NoaWZ0ICE9IDAsIDEpKQorCXsKKwkgIGNvbnN0IHNpemVfdCBfX3dzaGlmdCA9IF9fc2hpZnQgLyBfR0xJQkNYWF9CSVRTRVRfQklUU19QRVJfV09SRDsKKwkgIGNvbnN0IHNpemVfdCBfX29mZnNldCA9IF9fc2hpZnQgJSBfR0xJQkNYWF9CSVRTRVRfQklUU19QRVJfV09SRDsKKworCSAgaWYgKF9fb2Zmc2V0ID09IDApCisJICAgIGZvciAoc2l6ZV90IF9fbiA9IF9OdyAtIDE7IF9fbiA+PSBfX3dzaGlmdDsgLS1fX24pCisJICAgICAgX01fd1tfX25dID0gX01fd1tfX24gLSBfX3dzaGlmdF07CisJICBlbHNlCisJICAgIHsKKwkgICAgICBjb25zdCBzaXplX3QgX19zdWJfb2Zmc2V0ID0gKF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9XT1JEIAorCQkJCQkgICAtIF9fb2Zmc2V0KTsKKwkgICAgICBmb3IgKHNpemVfdCBfX24gPSBfTncgLSAxOyBfX24gPiBfX3dzaGlmdDsgLS1fX24pCisJCV9NX3dbX19uXSA9ICgoX01fd1tfX24gLSBfX3dzaGlmdF0gPDwgX19vZmZzZXQpCisJCQkgICAgIHwgKF9NX3dbX19uIC0gX193c2hpZnQgLSAxXSA+PiBfX3N1Yl9vZmZzZXQpKTsKKwkgICAgICBfTV93W19fd3NoaWZ0XSA9IF9NX3dbMF0gPDwgX19vZmZzZXQ7CisJICAgIH0KKworCSAgc3RkOjpmaWxsKF9NX3cgKyAwLCBfTV93ICsgX193c2hpZnQsIHN0YXRpY19jYXN0PF9Xb3JkVD4oMCkpOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8c2l6ZV90IF9Odz4KKyAgICB2b2lkCisgICAgX0Jhc2VfYml0c2V0PF9Odz46Ol9NX2RvX3JpZ2h0X3NoaWZ0KHNpemVfdCBfX3NoaWZ0KQorICAgIHsKKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fc2hpZnQgIT0gMCwgMSkpCisJeworCSAgY29uc3Qgc2l6ZV90IF9fd3NoaWZ0ID0gX19zaGlmdCAvIF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9XT1JEOworCSAgY29uc3Qgc2l6ZV90IF9fb2Zmc2V0ID0gX19zaGlmdCAlIF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9XT1JEOworCSAgY29uc3Qgc2l6ZV90IF9fbGltaXQgPSBfTncgLSBfX3dzaGlmdCAtIDE7CisKKwkgIGlmIChfX29mZnNldCA9PSAwKQorCSAgICBmb3IgKHNpemVfdCBfX24gPSAwOyBfX24gPD0gX19saW1pdDsgKytfX24pCisJICAgICAgX01fd1tfX25dID0gX01fd1tfX24gKyBfX3dzaGlmdF07CisJICBlbHNlCisJICAgIHsKKwkgICAgICBjb25zdCBzaXplX3QgX19zdWJfb2Zmc2V0ID0gKF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9XT1JECisJCQkJCSAgIC0gX19vZmZzZXQpOworCSAgICAgIGZvciAoc2l6ZV90IF9fbiA9IDA7IF9fbiA8IF9fbGltaXQ7ICsrX19uKQorCQlfTV93W19fbl0gPSAoKF9NX3dbX19uICsgX193c2hpZnRdID4+IF9fb2Zmc2V0KQorCQkJICAgICB8IChfTV93W19fbiArIF9fd3NoaWZ0ICsgMV0gPDwgX19zdWJfb2Zmc2V0KSk7CisJICAgICAgX01fd1tfX2xpbWl0XSA9IF9NX3dbX053LTFdID4+IF9fb2Zmc2V0OworCSAgICB9CisJICAKKwkgIHN0ZDo6ZmlsbChfTV93ICsgX19saW1pdCArIDEsIF9NX3cgKyBfTncsIHN0YXRpY19jYXN0PF9Xb3JkVD4oMCkpOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8c2l6ZV90IF9Odz4KKyAgICB1bnNpZ25lZCBsb25nCisgICAgX0Jhc2VfYml0c2V0PF9Odz46Ol9NX2RvX3RvX3Vsb25nKCkgY29uc3QKKyAgICB7CisgICAgICBmb3IgKHNpemVfdCBfX2kgPSAxOyBfX2kgPCBfTnc7ICsrX19pKQorCWlmIChfTV93W19faV0pCisJICBfX3Rocm93X292ZXJmbG93X2Vycm9yKF9fTigiX0Jhc2VfYml0c2V0OjpfTV9kb190b191bG9uZyIpKTsKKyAgICAgIHJldHVybiBfTV93WzBdOworICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgIHRlbXBsYXRlPHNpemVfdCBfTnc+CisgICAgdW5zaWduZWQgbG9uZyBsb25nCisgICAgX0Jhc2VfYml0c2V0PF9Odz46Ol9NX2RvX3RvX3VsbG9uZygpIGNvbnN0CisgICAgeworICAgICAgY29uc3QgYm9vbCBfX2R3ID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykgPiBzaXplb2YodW5zaWduZWQgbG9uZyk7CisgICAgICBmb3IgKHNpemVfdCBfX2kgPSAxICsgX19kdzsgX19pIDwgX053OyArK19faSkKKwlpZiAoX01fd1tfX2ldKQorCSAgX190aHJvd19vdmVyZmxvd19lcnJvcihfX04oIl9CYXNlX2JpdHNldDo6X01fZG9fdG9fdWxsb25nIikpOworCisgICAgICBpZiAoX19kdykKKwlyZXR1cm4gX01fd1swXSArIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KF9NX3dbMV0pCisJCQkgIDw8IF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9XT1JEKTsKKyAgICAgIHJldHVybiBfTV93WzBdOworICAgIH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHNpemVfdCBfTnc+CisgICAgc2l6ZV90CisgICAgX0Jhc2VfYml0c2V0PF9Odz46Ol9NX2RvX2ZpbmRfZmlyc3Qoc2l6ZV90IF9fbm90X2ZvdW5kKSBjb25zdAorICAgIHsKKyAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9OdzsgX19pKyspCisJeworCSAgX1dvcmRUIF9fdGhpc3dvcmQgPSBfTV93W19faV07CisJICBpZiAoX190aGlzd29yZCAhPSBzdGF0aWNfY2FzdDxfV29yZFQ+KDApKQorCSAgICByZXR1cm4gKF9faSAqIF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9XT1JECisJCSAgICArIF9fYnVpbHRpbl9jdHpsKF9fdGhpc3dvcmQpKTsKKwl9CisgICAgICAvLyBub3QgZm91bmQsIHNvIHJldHVybiBhbiBpbmRpY2F0aW9uIG9mIGZhaWx1cmUuCisgICAgICByZXR1cm4gX19ub3RfZm91bmQ7CisgICAgfQorCisgIHRlbXBsYXRlPHNpemVfdCBfTnc+CisgICAgc2l6ZV90CisgICAgX0Jhc2VfYml0c2V0PF9Odz46Ol9NX2RvX2ZpbmRfbmV4dChzaXplX3QgX19wcmV2LCBzaXplX3QgX19ub3RfZm91bmQpIGNvbnN0CisgICAgeworICAgICAgLy8gbWFrZSBib3VuZCBpbmNsdXNpdmUKKyAgICAgICsrX19wcmV2OworCisgICAgICAvLyBjaGVjayBvdXQgb2YgYm91bmRzCisgICAgICBpZiAoX19wcmV2ID49IF9OdyAqIF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9XT1JEKQorCXJldHVybiBfX25vdF9mb3VuZDsKKworICAgICAgLy8gc2VhcmNoIGZpcnN0IHdvcmQKKyAgICAgIHNpemVfdCBfX2kgPSBfU193aGljaHdvcmQoX19wcmV2KTsKKyAgICAgIF9Xb3JkVCBfX3RoaXN3b3JkID0gX01fd1tfX2ldOworCisgICAgICAvLyBtYXNrIG9mZiBiaXRzIGJlbG93IGJvdW5kCisgICAgICBfX3RoaXN3b3JkICY9ICh+c3RhdGljX2Nhc3Q8X1dvcmRUPigwKSkgPDwgX1Nfd2hpY2hiaXQoX19wcmV2KTsKKworICAgICAgaWYgKF9fdGhpc3dvcmQgIT0gc3RhdGljX2Nhc3Q8X1dvcmRUPigwKSkKKwlyZXR1cm4gKF9faSAqIF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9XT1JECisJCSsgX19idWlsdGluX2N0emwoX190aGlzd29yZCkpOworCisgICAgICAvLyBjaGVjayBzdWJzZXF1ZW50IHdvcmRzCisgICAgICBfX2krKzsKKyAgICAgIGZvciAoOyBfX2kgPCBfTnc7IF9faSsrKQorCXsKKwkgIF9fdGhpc3dvcmQgPSBfTV93W19faV07CisJICBpZiAoX190aGlzd29yZCAhPSBzdGF0aWNfY2FzdDxfV29yZFQ+KDApKQorCSAgICByZXR1cm4gKF9faSAqIF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9XT1JECisJCSAgICArIF9fYnVpbHRpbl9jdHpsKF9fdGhpc3dvcmQpKTsKKwl9CisgICAgICAvLyBub3QgZm91bmQsIHNvIHJldHVybiBhbiBpbmRpY2F0aW9uIG9mIGZhaWx1cmUuCisgICAgICByZXR1cm4gX19ub3RfZm91bmQ7CisgICAgfSAvLyBlbmQgX01fZG9fZmluZF9uZXh0CisKKyAgLyoqCisgICAqICBCYXNlIGNsYXNzLCBzcGVjaWFsaXphdGlvbiBmb3IgYSBzaW5nbGUgd29yZC4KKyAgICoKKyAgICogIFNlZSBkb2N1bWVudGF0aW9uIGZvciBiaXRzZXQuCisgICovCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX0Jhc2VfYml0c2V0PDE+CisgICAgeworICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9Xb3JkVDsKKyAgICAgIF9Xb3JkVCBfTV93OworCisgICAgICBfQmFzZV9iaXRzZXQodm9pZCkKKyAgICAgIDogX01fdygwKQorICAgICAgeyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgX0Jhc2VfYml0c2V0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZhbCkKKyNlbHNlCisgICAgICBfQmFzZV9iaXRzZXQodW5zaWduZWQgbG9uZyBfX3ZhbCkKKyNlbmRpZgorICAgICAgOiBfTV93KF9fdmFsKQorICAgICAgeyB9CisKKyAgICAgIHN0YXRpYyBzaXplX3QKKyAgICAgIF9TX3doaWNod29yZChzaXplX3QgX19wb3MgKQorICAgICAgeyByZXR1cm4gX19wb3MgLyBfR0xJQkNYWF9CSVRTRVRfQklUU19QRVJfV09SRDsgfQorCisgICAgICBzdGF0aWMgc2l6ZV90CisgICAgICBfU193aGljaGJ5dGUoc2l6ZV90IF9fcG9zICkKKyAgICAgIHsgcmV0dXJuIChfX3BvcyAlIF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9XT1JEKSAvIF9fQ0hBUl9CSVRfXzsgfQorCisgICAgICBzdGF0aWMgc2l6ZV90CisgICAgICBfU193aGljaGJpdChzaXplX3QgX19wb3MgKQorICAgICAgeyAgcmV0dXJuIF9fcG9zICUgX0dMSUJDWFhfQklUU0VUX0JJVFNfUEVSX1dPUkQ7IH0KKworICAgICAgc3RhdGljIF9Xb3JkVAorICAgICAgX1NfbWFza2JpdChzaXplX3QgX19wb3MgKQorICAgICAgeyByZXR1cm4gKHN0YXRpY19jYXN0PF9Xb3JkVD4oMSkpIDw8IF9TX3doaWNoYml0KF9fcG9zKTsgfQorCisgICAgICBfV29yZFQmCisgICAgICBfTV9nZXR3b3JkKHNpemVfdCkKKyAgICAgIHsgcmV0dXJuIF9NX3c7IH0KKworICAgICAgX1dvcmRUCisgICAgICBfTV9nZXR3b3JkKHNpemVfdCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3c7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBjb25zdCBfV29yZFQqCisgICAgICBfTV9nZXRkYXRhKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICZfTV93OyB9CisjZW5kaWYKKworICAgICAgX1dvcmRUJgorICAgICAgX01faGl3b3JkKCkKKyAgICAgIHsgcmV0dXJuIF9NX3c7IH0KKworICAgICAgX1dvcmRUCisgICAgICBfTV9oaXdvcmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdzsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9kb19hbmQoY29uc3QgX0Jhc2VfYml0c2V0PDE+JiBfX3gpCisgICAgICB7IF9NX3cgJj0gX194Ll9NX3c7IH0KKworICAgICAgdm9pZAorICAgICAgX01fZG9fb3IoY29uc3QgX0Jhc2VfYml0c2V0PDE+JiBfX3gpCisgICAgICB7IF9NX3cgfD0gX194Ll9NX3c7IH0KKworICAgICAgdm9pZAorICAgICAgX01fZG9feG9yKGNvbnN0IF9CYXNlX2JpdHNldDwxPiYgX194KQorICAgICAgeyBfTV93IF49IF9feC5fTV93OyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RvX2xlZnRfc2hpZnQoc2l6ZV90IF9fc2hpZnQpCisgICAgICB7IF9NX3cgPDw9IF9fc2hpZnQ7IH0KKworICAgICAgdm9pZAorICAgICAgX01fZG9fcmlnaHRfc2hpZnQoc2l6ZV90IF9fc2hpZnQpCisgICAgICB7IF9NX3cgPj49IF9fc2hpZnQ7IH0KKworICAgICAgdm9pZAorICAgICAgX01fZG9fZmxpcCgpCisgICAgICB7IF9NX3cgPSB+X01fdzsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9kb19zZXQoKQorICAgICAgeyBfTV93ID0gfnN0YXRpY19jYXN0PF9Xb3JkVD4oMCk7IH0KKworICAgICAgdm9pZAorICAgICAgX01fZG9fcmVzZXQoKQorICAgICAgeyBfTV93ID0gMDsgfQorCisgICAgICBib29sCisgICAgICBfTV9pc19lcXVhbChjb25zdCBfQmFzZV9iaXRzZXQ8MT4mIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3cgPT0gX194Ll9NX3c7IH0KKworICAgICAgc2l6ZV90CisgICAgICBfTV9hcmVfYWxsX2F1eCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfX2J1aWx0aW5fcG9wY291bnRsKF9NX3cpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIF9NX2lzX2FueSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV93ICE9IDA7IH0KKworICAgICAgc2l6ZV90CisgICAgICBfTV9kb19jb3VudCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfX2J1aWx0aW5fcG9wY291bnRsKF9NX3cpOyB9CisKKyAgICAgIHVuc2lnbmVkIGxvbmcKKyAgICAgIF9NX2RvX3RvX3Vsb25nKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3c7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICB1bnNpZ25lZCBsb25nIGxvbmcKKyAgICAgIF9NX2RvX3RvX3VsbG9uZygpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV93OyB9CisjZW5kaWYKKworICAgICAgc2l6ZV90CisgICAgICBfTV9kb19maW5kX2ZpcnN0KHNpemVfdCBfX25vdF9mb3VuZCkgY29uc3QKKyAgICAgIHsKKyAgICAgICAgaWYgKF9NX3cgIT0gMCkKKyAgICAgICAgICByZXR1cm4gX19idWlsdGluX2N0emwoX01fdyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4gX19ub3RfZm91bmQ7CisgICAgICB9CisKKyAgICAgIC8vIGZpbmQgdGhlIG5leHQgIm9uIiBiaXQgdGhhdCBmb2xsb3dzICJwcmV2IgorICAgICAgc2l6ZV90CisgICAgICBfTV9kb19maW5kX25leHQoc2l6ZV90IF9fcHJldiwgc2l6ZV90IF9fbm90X2ZvdW5kKSBjb25zdAorICAgICAgeworCSsrX19wcmV2OworCWlmIChfX3ByZXYgPj0gKChzaXplX3QpIF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9XT1JEKSkKKwkgIHJldHVybiBfX25vdF9mb3VuZDsKKworCV9Xb3JkVCBfX3ggPSBfTV93ID4+IF9fcHJldjsKKwlpZiAoX194ICE9IDApCisJICByZXR1cm4gX19idWlsdGluX2N0emwoX194KSArIF9fcHJldjsKKwllbHNlCisJICByZXR1cm4gX19ub3RfZm91bmQ7CisgICAgICB9CisgICAgfTsKKworICAvKioKKyAgICogIEJhc2UgY2xhc3MsIHNwZWNpYWxpemF0aW9uIGZvciBubyBzdG9yYWdlICh6ZXJvLWxlbmd0aCAlYml0c2V0KS4KKyAgICoKKyAgICogIFNlZSBkb2N1bWVudGF0aW9uIGZvciBiaXRzZXQuCisgICovCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX0Jhc2VfYml0c2V0PDA+CisgICAgeworICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9Xb3JkVDsKKworICAgICAgX0Jhc2VfYml0c2V0KCkKKyAgICAgIHsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIF9CYXNlX2JpdHNldCh1bnNpZ25lZCBsb25nIGxvbmcpCisjZWxzZQorICAgICAgX0Jhc2VfYml0c2V0KHVuc2lnbmVkIGxvbmcpCisjZW5kaWYKKyAgICAgIHsgfQorCisgICAgICBzdGF0aWMgc2l6ZV90CisgICAgICBfU193aGljaHdvcmQoc2l6ZV90IF9fcG9zICkKKyAgICAgIHsgcmV0dXJuIF9fcG9zIC8gX0dMSUJDWFhfQklUU0VUX0JJVFNfUEVSX1dPUkQ7IH0KKworICAgICAgc3RhdGljIHNpemVfdAorICAgICAgX1Nfd2hpY2hieXRlKHNpemVfdCBfX3BvcyApCisgICAgICB7IHJldHVybiAoX19wb3MgJSBfR0xJQkNYWF9CSVRTRVRfQklUU19QRVJfV09SRCkgLyBfX0NIQVJfQklUX187IH0KKworICAgICAgc3RhdGljIHNpemVfdAorICAgICAgX1Nfd2hpY2hiaXQoc2l6ZV90IF9fcG9zICkKKyAgICAgIHsgIHJldHVybiBfX3BvcyAlIF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9XT1JEOyB9CisKKyAgICAgIHN0YXRpYyBfV29yZFQKKyAgICAgIF9TX21hc2tiaXQoc2l6ZV90IF9fcG9zICkKKyAgICAgIHsgcmV0dXJuIChzdGF0aWNfY2FzdDxfV29yZFQ+KDEpKSA8PCBfU193aGljaGJpdChfX3Bvcyk7IH0KKworICAgICAgLy8gVGhpcyB3b3VsZCBub3JtYWxseSBnaXZlIGFjY2VzcyB0byB0aGUgZGF0YS4gIFRoZSBib3VuZHMtY2hlY2tpbmcKKyAgICAgIC8vIGluIHRoZSBiaXRzZXQgY2xhc3Mgd2lsbCBwcmV2ZW50IHRoZSB1c2VyIGZyb20gZ2V0dGluZyB0aGlzIGZhciwKKyAgICAgIC8vIGJ1dCAoMSkgaXQgbXVzdCBzdGlsbCByZXR1cm4gYW4gbHZhbHVlIHRvIGNvbXBpbGUsIGFuZCAoMikgdGhlCisgICAgICAvLyB1c2VyIG1pZ2h0IGNhbGwgX1VuY2hlY2tlZF9zZXQgZGlyZWN0bHksIGluIHdoaWNoIGNhc2UgdGhpcyAvbmVlZHMvCisgICAgICAvLyB0byBmYWlsLiAgTGV0J3Mgbm90IHBlbmFsaXplIHplcm8tbGVuZ3RoIHVzZXJzIHVubGVzcyB0aGV5IGFjdHVhbGx5CisgICAgICAvLyBtYWtlIGFuIHVuY2hlY2tlZCBjYWxsOyBhbGwgdGhlIG1lbW9yeSB1Z2xpbmVzcyBpcyB0aGVyZWZvcmUKKyAgICAgIC8vIGxvY2FsaXplZCB0byB0aGlzIHNpbmdsZSBzaG91bGQtbmV2ZXItZ2V0LXRoaXMtZmFyIGZ1bmN0aW9uLgorICAgICAgX1dvcmRUJgorICAgICAgX01fZ2V0d29yZChzaXplX3QpIGNvbnN0CisgICAgICB7IAorCV9fdGhyb3dfb3V0X29mX3JhbmdlKF9fTigiX0Jhc2VfYml0c2V0OjpfTV9nZXR3b3JkIikpOyAKKwlyZXR1cm4gKm5ldyBfV29yZFQ7IAorICAgICAgfQorCisgICAgICBfV29yZFQKKyAgICAgIF9NX2hpd29yZCgpIGNvbnN0CisgICAgICB7IHJldHVybiAwOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RvX2FuZChjb25zdCBfQmFzZV9iaXRzZXQ8MD4mKQorICAgICAgeyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RvX29yKGNvbnN0IF9CYXNlX2JpdHNldDwwPiYpCisgICAgICB7IH0KKworICAgICAgdm9pZAorICAgICAgX01fZG9feG9yKGNvbnN0IF9CYXNlX2JpdHNldDwwPiYpCisgICAgICB7IH0KKworICAgICAgdm9pZAorICAgICAgX01fZG9fbGVmdF9zaGlmdChzaXplX3QpCisgICAgICB7IH0KKworICAgICAgdm9pZAorICAgICAgX01fZG9fcmlnaHRfc2hpZnQoc2l6ZV90KQorICAgICAgeyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RvX2ZsaXAoKQorICAgICAgeyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RvX3NldCgpCisgICAgICB7IH0KKworICAgICAgdm9pZAorICAgICAgX01fZG9fcmVzZXQoKQorICAgICAgeyB9CisKKyAgICAgIC8vIEFyZSBhbGwgZW1wdHkgYml0c2V0cyBlcXVhbCB0byBlYWNoIG90aGVyPyAgQXJlIHRoZXkgZXF1YWwgdG8KKyAgICAgIC8vIHRoZW1zZWx2ZXM/ICBIb3cgdG8gY29tcGFyZSBhIHRoaW5nIHdoaWNoIGhhcyBubyBzdGF0ZT8gIFdoYXQgaXMKKyAgICAgIC8vIHRoZSBzb3VuZCBvZiBvbmUgemVyby1sZW5ndGggYml0c2V0IGNsYXBwaW5nPworICAgICAgYm9vbAorICAgICAgX01faXNfZXF1YWwoY29uc3QgX0Jhc2VfYml0c2V0PDA+JikgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgc2l6ZV90CisgICAgICBfTV9hcmVfYWxsX2F1eCgpIGNvbnN0CisgICAgICB7IHJldHVybiAwOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIF9NX2lzX2FueSgpIGNvbnN0CisgICAgICB7IHJldHVybiBmYWxzZTsgfQorCisgICAgICBzaXplX3QKKyAgICAgIF9NX2RvX2NvdW50KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIDA7IH0KKworICAgICAgdW5zaWduZWQgbG9uZworICAgICAgX01fZG9fdG9fdWxvbmcoKSBjb25zdAorICAgICAgeyByZXR1cm4gMDsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZworICAgICAgX01fZG9fdG9fdWxsb25nKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgorCisgICAgICAvLyBOb3JtYWxseSAibm90IGZvdW5kIiBpcyB0aGUgc2l6ZSwgYnV0IHRoYXQgY291bGQgYWxzbyBiZQorICAgICAgLy8gbWlzaW50ZXJwcmV0ZWQgYXMgYW4gaW5kZXggaW4gdGhpcyBjb3JuZXIgY2FzZS4gIE9oIHdlbGwuCisgICAgICBzaXplX3QKKyAgICAgIF9NX2RvX2ZpbmRfZmlyc3Qoc2l6ZV90KSBjb25zdAorICAgICAgeyByZXR1cm4gMDsgfQorCisgICAgICBzaXplX3QKKyAgICAgIF9NX2RvX2ZpbmRfbmV4dChzaXplX3QsIHNpemVfdCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIDA7IH0KKyAgICB9OworCisKKyAgLy8gSGVscGVyIGNsYXNzIHRvIHplcm8gb3V0IHRoZSB1bnVzZWQgaGlnaC1vcmRlciBiaXRzIGluIHRoZSBoaWdoZXN0IHdvcmQuCisgIHRlbXBsYXRlPHNpemVfdCBfRXh0cmFiaXRzPgorICAgIHN0cnVjdCBfU2FuaXRpemUKKyAgICB7CisgICAgICBzdGF0aWMgdm9pZCBfU19kb19zYW5pdGl6ZSh1bnNpZ25lZCBsb25nJiBfX3ZhbCkKKyAgICAgIHsgX192YWwgJj0gfigofnN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApKSA8PCBfRXh0cmFiaXRzKTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfU2FuaXRpemU8MD4KKyAgICB7IHN0YXRpYyB2b2lkIF9TX2RvX3Nhbml0aXplKHVuc2lnbmVkIGxvbmcpIHt9IH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFRoZSAlYml0c2V0IGNsYXNzIHJlcHJlc2VudHMgYSBAZSBmaXhlZC1zaXplIHNlcXVlbmNlIG9mIGJpdHMuCisgICAqCisgICAqICBAaW5ncm91cCBjb250YWluZXJzCisgICAqCisgICAqICAoTm90ZSB0aGF0ICViaXRzZXQgZG9lcyBAZSBub3QgbWVldCB0aGUgZm9ybWFsIHJlcXVpcmVtZW50cyBvZiBhCisgICAqICA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2NSI+Y29udGFpbmVyPC9hPi4gIE1haW5seSwgaXQgbGFja3MgaXRlcmF0b3JzLikKKyAgICoKKyAgICogIFRoZSB0ZW1wbGF0ZSBhcmd1bWVudCwgQGEgTmIsIG1heSBiZSBhbnkgbm9uLW5lZ2F0aXZlIG51bWJlciwKKyAgICogIHNwZWNpZnlpbmcgdGhlIG51bWJlciBvZiBiaXRzIChlLmcuLCAiMCIsICIxMiIsICIxMDI0KjEwMjQiKS4KKyAgICoKKyAgICogIEluIHRoZSBnZW5lcmFsIHVub3B0aW1pemVkIGNhc2UsIHN0b3JhZ2UgaXMgYWxsb2NhdGVkIGluIHdvcmQtc2l6ZWQKKyAgICogIGJsb2Nrcy4gIExldCBCIGJlIHRoZSBudW1iZXIgb2YgYml0cyBpbiBhIHdvcmQsIHRoZW4gKE5iKyhCLTEpKS9CCisgICAqICB3b3JkcyB3aWxsIGJlIHVzZWQgZm9yIHN0b3JhZ2UuICBCIC0gTmIlQiBiaXRzIGFyZSB1bnVzZWQuICAoVGhleSBhcmUKKyAgICogIHRoZSBoaWdoLW9yZGVyIGJpdHMgaW4gdGhlIGhpZ2hlc3Qgd29yZC4pICBJdCBpcyBhIGNsYXNzIGludmFyaWFudAorICAgKiAgdGhhdCB0aG9zZSB1bnVzZWQgYml0cyBhcmUgYWx3YXlzIHplcm8uCisgICAqCisgICAqICBJZiB5b3UgdGhpbmsgb2YgJWJpdHNldCBhcyA8ZW0+YSBzaW1wbGUgYXJyYXkgb2YgYml0czwvZW0+LCBiZQorICAgKiAgYXdhcmUgdGhhdCB5b3VyIG1lbnRhbCBwaWN0dXJlIGlzIHJldmVyc2VkOiBhICViaXRzZXQgYmVoYXZlcworICAgKiAgdGhlIHNhbWUgd2F5IGFzIGJpdHMgaW4gaW50ZWdlcnMgZG8sIHdpdGggdGhlIGJpdCBhdCBpbmRleCAwIGluCisgICAqICB0aGUgPGVtPmxlYXN0IHNpZ25pZmljYW50IC8gcmlnaHQtaGFuZDwvZW0+IHBvc2l0aW9uLCBhbmQgdGhlIGJpdCBhdAorICAgKiAgaW5kZXggTmItMSBpbiB0aGUgPGVtPm1vc3Qgc2lnbmlmaWNhbnQgLyBsZWZ0LWhhbmQ8L2VtPiBwb3NpdGlvbi4KKyAgICogIFRodXMsIHVubGlrZSBvdGhlciBjb250YWluZXJzLCBhICViaXRzZXQncyBpbmRleCA8ZW0+Y291bnRzIGZyb20KKyAgICogIHJpZ2h0IHRvIGxlZnQ8L2VtPiwgdG8gcHV0IGl0IHZlcnkgbG9vc2VseS4KKyAgICoKKyAgICogIFRoaXMgYmVoYXZpb3IgaXMgcHJlc2VydmVkIHdoZW4gdHJhbnNsYXRpbmcgdG8gYW5kIGZyb20gc3RyaW5ncy4gIEZvcgorICAgKiAgZXhhbXBsZSwgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGZvbGxvd2luZyBwcm9ncmFtIHByb2JhYmx5IHByaW50cworICAgKiAgPGVtPmIoJmFwb3M7YSZhcG9zOykgaXMgMDAwMTEwMDAwMTwvZW0+IG9uIGEgbW9kZXJuIEFTQ0lJIHN5c3RlbS4KKyAgICoKKyAgICogIEBjb2RlCisgICAqICAgICAjaW5jbHVkZSA8Yml0c2V0PgorICAgKiAgICAgI2luY2x1ZGUgPGlvc3RyZWFtPgorICAgKiAgICAgI2luY2x1ZGUgPHNzdHJlYW0+CisgICAqCisgICAqICAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOworICAgKgorICAgKiAgICAgaW50IG1haW4oKQorICAgKiAgICAgeworICAgKiAgICAgICAgIGxvbmcgICAgICAgICBhID0gJ2EnOworICAgKiAgICAgICAgIGJpdHNldDwxMD4gICBiKGEpOworICAgKgorICAgKiAgICAgICAgIGNvdXQgPDwgImIoJ2EnKSBpcyAiIDw8IGIgPDwgZW5kbDsKKyAgICoKKyAgICogICAgICAgICBvc3RyaW5nc3RyZWFtIHM7CisgICAqICAgICAgICAgcyA8PCBiOworICAgKiAgICAgICAgIHN0cmluZyAgc3RyID0gcy5zdHIoKTsKKyAgICogICAgICAgICBjb3V0IDw8ICJpbmRleCAzIGluIHRoZSBzdHJpbmcgaXMgIiA8PCBzdHJbM10gPDwgIiBidXRcbiIKKyAgICogICAgICAgICAgICAgIDw8ICJpbmRleCAzIGluIHRoZSBiaXRzZXQgaXMgIiA8PCBiWzNdIDw8IGVuZGw7CisgICAqICAgICB9CisgICAqICBAZW5kY29kZQorICAgKgorICAgKiAgQWxzbyBzZWU6CisgICAqICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9saWJzdGRjKysvbWFudWFsL2JrMDFwdDEyY2gzM3MwMi5odG1sCisgICAqICBmb3IgYSBkZXNjcmlwdGlvbiBvZiBleHRlbnNpb25zLgorICAgKgorICAgKiAgTW9zdCBvZiB0aGUgYWN0dWFsIGNvZGUgaXNuJ3QgY29udGFpbmVkIGluICViaXRzZXQ8PiBpdHNlbGYsIGJ1dCBpbiB0aGUKKyAgICogIGJhc2UgY2xhc3MgX0Jhc2VfYml0c2V0LiAgVGhlIGJhc2UgY2xhc3Mgd29ya3Mgd2l0aCB3aG9sZSB3b3Jkcywgbm90IHdpdGgKKyAgICogIGluZGl2aWR1YWwgYml0cy4gIFRoaXMgYWxsb3dzIHVzIHRvIHNwZWNpYWxpemUgX0Jhc2VfYml0c2V0IGZvciB0aGUKKyAgICogIGltcG9ydGFudCBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhlICViaXRzZXQgaXMgb25seSBhIHNpbmdsZSB3b3JkLgorICAgKgorICAgKiAgRXh0cmEgY29uZnVzaW9uIGNhbiByZXN1bHQgZHVlIHRvIHRoZSBmYWN0IHRoYXQgdGhlIHN0b3JhZ2UgZm9yCisgICAqICBfQmFzZV9iaXRzZXQgQGUgaXMgYSByZWd1bGFyIGFycmF5LCBhbmQgaXMgaW5kZXhlZCBhcyBzdWNoLiAgVGhpcyBpcworICAgKiAgY2FyZWZ1bGx5IGVuY2Fwc3VsYXRlZC4KKyAgKi8KKyAgdGVtcGxhdGU8c2l6ZV90IF9OYj4KKyAgICBjbGFzcyBiaXRzZXQKKyAgICA6IHByaXZhdGUgX0Jhc2VfYml0c2V0PF9HTElCQ1hYX0JJVFNFVF9XT1JEUyhfTmIpPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBfQmFzZV9iaXRzZXQ8X0dMSUJDWFhfQklUU0VUX1dPUkRTKF9OYik+IF9CYXNlOworICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9Xb3JkVDsKKworICAgICAgdm9pZAorCV9NX2RvX3Nhbml0aXplKCkKKwl7CisJICBfU2FuaXRpemU8X05iICUgX0dMSUJDWFhfQklUU0VUX0JJVFNfUEVSX1dPUkQ+OjoKKwkgICAgX1NfZG9fc2FuaXRpemUodGhpcy0+X01faGl3b3JkKCkpOworCX0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZT4gZnJpZW5kIGNsYXNzIGhhc2g7CisjZW5kaWYKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKgorICAgICAgICogIFRoaXMgZW5jYXBzdWxhdGVzIHRoZSBjb25jZXB0IG9mIGEgc2luZ2xlIGJpdC4gIEFuIGluc3RhbmNlIG9mIHRoaXMKKyAgICAgICAqICBjbGFzcyBpcyBhIHByb3h5IGZvciBhbiBhY3R1YWwgYml0OyB0aGlzIHdheSB0aGUgaW5kaXZpZHVhbCBiaXQKKyAgICAgICAqICBvcGVyYXRpb25zIGFyZSBkb25lIGFzIGZhc3RlciB3b3JkLXNpemUgYml0d2lzZSBpbnN0cnVjdGlvbnMuCisgICAgICAgKgorICAgICAgICogIE1vc3QgdXNlcnMgd2lsbCBuZXZlciBuZWVkIHRvIHVzZSB0aGlzIGNsYXNzIGRpcmVjdGx5OyBjb252ZXJzaW9ucworICAgICAgICogIHRvIGFuZCBmcm9tIGJvb2wgYXJlIGF1dG9tYXRpYyBhbmQgc2hvdWxkIGJlIHRyYW5zcGFyZW50LiAgT3ZlcmxvYWRlZAorICAgICAgICogIG9wZXJhdG9ycyBoZWxwIHRvIHByZXNlcnZlIHRoZSBpbGx1c2lvbi4KKyAgICAgICAqCisgICAgICAgKiAgKE9uIGEgdHlwaWNhbCBzeXN0ZW0sIHRoaXMgPGVtPmJpdCAlcmVmZXJlbmNlPC9lbT4gaXMgNjQKKyAgICAgICAqICB0aW1lcyB0aGUgc2l6ZSBvZiBhbiBhY3R1YWwgYml0LiAgSGEuKQorICAgICAgICovCisgICAgICBjbGFzcyByZWZlcmVuY2UKKyAgICAgIHsKKwlmcmllbmQgY2xhc3MgYml0c2V0OworCisJX1dvcmRUICpfTV93cDsKKwlzaXplX3QgX01fYnBvczsKKwkKKwkvLyBsZWZ0IHVuZGVmaW5lZAorCXJlZmVyZW5jZSgpOworCQorICAgICAgcHVibGljOgorCXJlZmVyZW5jZShiaXRzZXQmIF9fYiwgc2l6ZV90IF9fcG9zKQorCXsKKwkgIF9NX3dwID0gJl9fYi5fTV9nZXR3b3JkKF9fcG9zKTsKKwkgIF9NX2Jwb3MgPSBfQmFzZTo6X1Nfd2hpY2hiaXQoX19wb3MpOworCX0KKworCX5yZWZlcmVuY2UoKQorCXsgfQorCisJLy8gRm9yIGJbaV0gPSBfX3g7CisJcmVmZXJlbmNlJgorCW9wZXJhdG9yPShib29sIF9feCkKKwl7CisJICBpZiAoX194KQorCSAgICAqX01fd3AgfD0gX0Jhc2U6Ol9TX21hc2tiaXQoX01fYnBvcyk7CisJICBlbHNlCisJICAgICpfTV93cCAmPSB+X0Jhc2U6Ol9TX21hc2tiaXQoX01fYnBvcyk7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisJLy8gRm9yIGJbaV0gPSBiW19fal07CisJcmVmZXJlbmNlJgorCW9wZXJhdG9yPShjb25zdCByZWZlcmVuY2UmIF9faikKKwl7CisJICBpZiAoKCooX19qLl9NX3dwKSAmIF9CYXNlOjpfU19tYXNrYml0KF9fai5fTV9icG9zKSkpCisJICAgICpfTV93cCB8PSBfQmFzZTo6X1NfbWFza2JpdChfTV9icG9zKTsKKwkgIGVsc2UKKwkgICAgKl9NX3dwICY9IH5fQmFzZTo6X1NfbWFza2JpdChfTV9icG9zKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKwkvLyBGbGlwcyB0aGUgYml0CisJYm9vbAorCW9wZXJhdG9yfigpIGNvbnN0CisJeyByZXR1cm4gKCooX01fd3ApICYgX0Jhc2U6Ol9TX21hc2tiaXQoX01fYnBvcykpID09IDA7IH0KKworCS8vIEZvciBfX3ggPSBiW2ldOworCW9wZXJhdG9yIGJvb2woKSBjb25zdAorCXsgcmV0dXJuICgqKF9NX3dwKSAmIF9CYXNlOjpfU19tYXNrYml0KF9NX2Jwb3MpKSAhPSAwOyB9CisKKwkvLyBGb3IgYltpXS5mbGlwKCk7CisJcmVmZXJlbmNlJgorCWZsaXAoKQorCXsKKwkgICpfTV93cCBePSBfQmFzZTo6X1NfbWFza2JpdChfTV9icG9zKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisgICAgICB9OworICAgICAgZnJpZW5kIGNsYXNzIHJlZmVyZW5jZTsKKworICAgICAgLy8gMjMuMy41LjEgY29uc3RydWN0b3JzOgorICAgICAgLy8vIEFsbCBiaXRzIHNldCB0byB6ZXJvLgorICAgICAgYml0c2V0KCkKKyAgICAgIHsgfQorCisgICAgICAvLy8gSW5pdGlhbCBiaXRzIGJpdHdpc2UtY29waWVkIGZyb20gYSBzaW5nbGUgd29yZCAob3RoZXJzIHNldCB0byB6ZXJvKS4KKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgYml0c2V0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZhbCkKKyNlbHNlCisgICAgICBiaXRzZXQodW5zaWduZWQgbG9uZyBfX3ZhbCkKKyNlbmRpZgorICAgICAgOiBfQmFzZShfX3ZhbCkKKyAgICAgIHsgX01fZG9fc2FuaXRpemUoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFVzZSBhIHN1YnNldCBvZiBhIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gIHMgIEEgc3RyaW5nIG9mIEBhIDAgYW5kIEBhIDEgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gIHBvc2l0aW9uICBJbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIEBhIHMgdG8gdXNlOworICAgICAgICogICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzIHRvIHplcm8uCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgQGEgcG9zIGlzIGJpZ2dlciB0aGUgc2l6ZSBvZiBAYSBzLgorICAgICAgICogIEB0aHJvdyAgc3RkOjppbnZhbGlkX2FyZ3VtZW50ICBJZiBhIGNoYXJhY3RlciBhcHBlYXJzIGluIHRoZSBzdHJpbmcKKyAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgbmVpdGhlciBAYSAwIG5vciBAYSAxLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KKwlleHBsaWNpdAorCWJpdHNldChjb25zdCBzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcywKKwkgICAgICAgc2l6ZV90IF9fcG9zaXRpb24gPSAwKQorCTogX0Jhc2UoKQorCXsKKwkgIGlmIChfX3Bvc2l0aW9uID4gX19zLnNpemUoKSkKKwkgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoX19OKCJiaXRzZXQ6OmJpdHNldCBpbml0aWFsIHBvc2l0aW9uICIKKwkJCQkgICAgICJub3QgdmFsaWQiKSk7CisJICBfTV9jb3B5X2Zyb21fc3RyaW5nKF9fcywgX19wb3NpdGlvbiwKKwkJCSAgICAgIHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6bnBvcywKKwkJCSAgICAgIF9DaGFyVCgnMCcpLCBfQ2hhclQoJzEnKSk7CisJfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFVzZSBhIHN1YnNldCBvZiBhIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gIHMgIEEgc3RyaW5nIG9mIEBhIDAgYW5kIEBhIDEgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gIHBvc2l0aW9uICBJbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIEBhIHMgdG8gdXNlLgorICAgICAgICogIEBwYXJhbSAgbiAgICBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gY29weS4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBwb3MgaXMgYmlnZ2VyIHRoZSBzaXplIG9mIEBhIHMuCisgICAgICAgKiAgQHRocm93ICBzdGQ6OmludmFsaWRfYXJndW1lbnQgIElmIGEgY2hhcmFjdGVyIGFwcGVhcnMgaW4gdGhlIHN0cmluZworICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBuZWl0aGVyIEBhIDAgbm9yIEBhIDEuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgorCWJpdHNldChjb25zdCBzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcywKKwkgICAgICAgc2l6ZV90IF9fcG9zaXRpb24sIHNpemVfdCBfX24pCisJOiBfQmFzZSgpCisJeworCSAgaWYgKF9fcG9zaXRpb24gPiBfX3Muc2l6ZSgpKQorCSAgICBfX3Rocm93X291dF9vZl9yYW5nZShfX04oImJpdHNldDo6Yml0c2V0IGluaXRpYWwgcG9zaXRpb24gIgorCQkJCSAgICAgIm5vdCB2YWxpZCIpKTsKKwkgIF9NX2NvcHlfZnJvbV9zdHJpbmcoX19zLCBfX3Bvc2l0aW9uLCBfX24sIF9DaGFyVCgnMCcpLCBfQ2hhclQoJzEnKSk7CisJfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAzOTYuIHdoYXQgYXJlIGNoYXJhY3RlcnMgemVybyBhbmQgb25lLgorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CisJYml0c2V0KGNvbnN0IHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zLAorCSAgICAgICBzaXplX3QgX19wb3NpdGlvbiwgc2l6ZV90IF9fbiwKKwkgICAgICAgX0NoYXJUIF9femVybywgX0NoYXJUIF9fb25lID0gX0NoYXJUKCcxJykpCisJOiBfQmFzZSgpCisJeworCSAgaWYgKF9fcG9zaXRpb24gPiBfX3Muc2l6ZSgpKQorCSAgICBfX3Rocm93X291dF9vZl9yYW5nZShfX04oImJpdHNldDo6Yml0c2V0IGluaXRpYWwgcG9zaXRpb24gIgorCQkJCSAgICAgIm5vdCB2YWxpZCIpKTsKKwkgIF9NX2NvcHlfZnJvbV9zdHJpbmcoX19zLCBfX3Bvc2l0aW9uLCBfX24sIF9femVybywgX19vbmUpOworCX0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdCBmcm9tIGEgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSAgc3RyICBBIHN0cmluZyBvZiBAYSAwIGFuZCBAYSAxIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHRocm93ICBzdGQ6OmludmFsaWRfYXJndW1lbnQgIElmIGEgY2hhcmFjdGVyIGFwcGVhcnMgaW4gdGhlIHN0cmluZworICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBuZWl0aGVyIEBhIDAgbm9yIEBhIDEuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBiaXRzZXQoY29uc3QgY2hhciogX19zdHIpCisgICAgICA6IF9CYXNlKCkKKyAgICAgIHsKKwlpZiAoIV9fc3RyKQorCSAgX190aHJvd19sb2dpY19lcnJvcihfX04oImJpdHNldDo6Yml0c2V0KGNvbnN0IGNoYXIqKSIpKTsKKworCWNvbnN0IHNpemVfdCBfX2xlbiA9IF9fYnVpbHRpbl9zdHJsZW4oX19zdHIpOworCV9NX2NvcHlfZnJvbV9wdHI8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPj4oX19zdHIsIF9fbGVuLCAwLAorCQkJCQkJICAgICAgIF9fbGVuLCAnMCcsICcxJyk7CisgICAgICB9CisjZW5kaWYKKworICAgICAgLy8gMjMuMy41LjIgYml0c2V0IG9wZXJhdGlvbnM6CisgICAgICAvL0B7CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE9wZXJhdGlvbnMgb24gYml0c2V0cy4KKyAgICAgICAqICBAcGFyYW0gIHJocyAgQSBzYW1lLXNpemVkIGJpdHNldC4KKyAgICAgICAqCisgICAgICAgKiAgVGhlc2Ugc2hvdWxkIGJlIHNlbGYtZXhwbGFuYXRvcnkuCisgICAgICAgKi8KKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgb3BlcmF0b3ImPShjb25zdCBiaXRzZXQ8X05iPiYgX19yaHMpCisgICAgICB7CisJdGhpcy0+X01fZG9fYW5kKF9fcmhzKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgb3BlcmF0b3J8PShjb25zdCBiaXRzZXQ8X05iPiYgX19yaHMpCisgICAgICB7CisJdGhpcy0+X01fZG9fb3IoX19yaHMpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgYml0c2V0PF9OYj4mCisgICAgICBvcGVyYXRvcl49KGNvbnN0IGJpdHNldDxfTmI+JiBfX3JocykKKyAgICAgIHsKKwl0aGlzLT5fTV9kb194b3IoX19yaHMpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyAgICAgIC8vQH0KKyAgICAgIAorICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBPcGVyYXRpb25zIG9uIGJpdHNldHMuCisgICAgICAgKiAgQHBhcmFtICBwb3NpdGlvbiAgVGhlIG51bWJlciBvZiBwbGFjZXMgdG8gc2hpZnQuCisgICAgICAgKgorICAgICAgICogIFRoZXNlIHNob3VsZCBiZSBzZWxmLWV4cGxhbmF0b3J5LgorICAgICAgICovCisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIG9wZXJhdG9yPDw9KHNpemVfdCBfX3Bvc2l0aW9uKQorICAgICAgeworCWlmIChfX2J1aWx0aW5fZXhwZWN0KF9fcG9zaXRpb24gPCBfTmIsIDEpKQorCSAgeworCSAgICB0aGlzLT5fTV9kb19sZWZ0X3NoaWZ0KF9fcG9zaXRpb24pOworCSAgICB0aGlzLT5fTV9kb19zYW5pdGl6ZSgpOworCSAgfQorCWVsc2UKKwkgIHRoaXMtPl9NX2RvX3Jlc2V0KCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIG9wZXJhdG9yPj49KHNpemVfdCBfX3Bvc2l0aW9uKQorICAgICAgeworCWlmIChfX2J1aWx0aW5fZXhwZWN0KF9fcG9zaXRpb24gPCBfTmIsIDEpKQorCSAgeworCSAgICB0aGlzLT5fTV9kb19yaWdodF9zaGlmdChfX3Bvc2l0aW9uKTsKKwkgICAgdGhpcy0+X01fZG9fc2FuaXRpemUoKTsKKwkgIH0KKwllbHNlCisJICB0aGlzLT5fTV9kb19yZXNldCgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyAgICAgIC8vQH0KKyAgICAgIAorICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgVGhlc2UgdmVyc2lvbnMgb2Ygc2luZ2xlLWJpdCBzZXQsIHJlc2V0LCBmbGlwLCBhbmQgdGVzdCBhcmUKKyAgICAgICAqICBleHRlbnNpb25zIGZyb20gdGhlIFNHSSB2ZXJzaW9uLiAgVGhleSBkbyBubyByYW5nZSBjaGVja2luZy4KKyAgICAgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICAgICAgKi8KKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgX1VuY2hlY2tlZF9zZXQoc2l6ZV90IF9fcG9zKQorICAgICAgeworCXRoaXMtPl9NX2dldHdvcmQoX19wb3MpIHw9IF9CYXNlOjpfU19tYXNrYml0KF9fcG9zKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgX1VuY2hlY2tlZF9zZXQoc2l6ZV90IF9fcG9zLCBpbnQgX192YWwpCisgICAgICB7CisJaWYgKF9fdmFsKQorCSAgdGhpcy0+X01fZ2V0d29yZChfX3BvcykgfD0gX0Jhc2U6Ol9TX21hc2tiaXQoX19wb3MpOworCWVsc2UKKwkgIHRoaXMtPl9NX2dldHdvcmQoX19wb3MpICY9IH5fQmFzZTo6X1NfbWFza2JpdChfX3Bvcyk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIF9VbmNoZWNrZWRfcmVzZXQoc2l6ZV90IF9fcG9zKQorICAgICAgeworCXRoaXMtPl9NX2dldHdvcmQoX19wb3MpICY9IH5fQmFzZTo6X1NfbWFza2JpdChfX3Bvcyk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIF9VbmNoZWNrZWRfZmxpcChzaXplX3QgX19wb3MpCisgICAgICB7CisJdGhpcy0+X01fZ2V0d29yZChfX3BvcykgXj0gX0Jhc2U6Ol9TX21hc2tiaXQoX19wb3MpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgYm9vbAorICAgICAgX1VuY2hlY2tlZF90ZXN0KHNpemVfdCBfX3BvcykgY29uc3QKKyAgICAgIHsgcmV0dXJuICgodGhpcy0+X01fZ2V0d29yZChfX3BvcykgJiBfQmFzZTo6X1NfbWFza2JpdChfX3BvcykpCisJCSE9IHN0YXRpY19jYXN0PF9Xb3JkVD4oMCkpOyB9CisgICAgICAvL0B9CisgICAgICAKKyAgICAgIC8vIFNldCwgcmVzZXQsIGFuZCBmbGlwLgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFNldHMgZXZlcnkgYml0IHRvIHRydWUuCisgICAgICAgKi8KKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgc2V0KCkKKyAgICAgIHsKKwl0aGlzLT5fTV9kb19zZXQoKTsKKwl0aGlzLT5fTV9kb19zYW5pdGl6ZSgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFNldHMgYSBnaXZlbiBiaXQgdG8gYSBwYXJ0aWN1bGFyIHZhbHVlLgorICAgICAgICogIEBwYXJhbSAgcG9zaXRpb24gIFRoZSBpbmRleCBvZiB0aGUgYml0LgorICAgICAgICogIEBwYXJhbSAgdmFsICBFaXRoZXIgdHJ1ZSBvciBmYWxzZSwgZGVmYXVsdHMgdG8gdHJ1ZS4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBwb3MgaXMgYmlnZ2VyIHRoZSBzaXplIG9mIHRoZSAlc2V0LgorICAgICAgICovCisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIHNldChzaXplX3QgX19wb3NpdGlvbiwgYm9vbCBfX3ZhbCA9IHRydWUpCisgICAgICB7CisJaWYgKF9fcG9zaXRpb24gPj0gX05iKQorCSAgX190aHJvd19vdXRfb2ZfcmFuZ2UoX19OKCJiaXRzZXQ6OnNldCIpKTsKKwlyZXR1cm4gX1VuY2hlY2tlZF9zZXQoX19wb3NpdGlvbiwgX192YWwpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgU2V0cyBldmVyeSBiaXQgdG8gZmFsc2UuCisgICAgICAgKi8KKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgcmVzZXQoKQorICAgICAgeworCXRoaXMtPl9NX2RvX3Jlc2V0KCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgU2V0cyBhIGdpdmVuIGJpdCB0byBmYWxzZS4KKyAgICAgICAqICBAcGFyYW0gIHBvc2l0aW9uICBUaGUgaW5kZXggb2YgdGhlIGJpdC4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBwb3MgaXMgYmlnZ2VyIHRoZSBzaXplIG9mIHRoZSAlc2V0LgorICAgICAgICoKKyAgICAgICAqICBTYW1lIGFzIHdyaXRpbmcgQGMgc2V0KHBvcyxmYWxzZSkuCisgICAgICAgKi8KKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgcmVzZXQoc2l6ZV90IF9fcG9zaXRpb24pCisgICAgICB7CisJaWYgKF9fcG9zaXRpb24gPj0gX05iKQorCSAgX190aHJvd19vdXRfb2ZfcmFuZ2UoX19OKCJiaXRzZXQ6OnJlc2V0IikpOworCXJldHVybiBfVW5jaGVja2VkX3Jlc2V0KF9fcG9zaXRpb24pOworICAgICAgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgVG9nZ2xlcyBldmVyeSBiaXQgdG8gaXRzIG9wcG9zaXRlIHZhbHVlLgorICAgICAgICovCisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIGZsaXAoKQorICAgICAgeworCXRoaXMtPl9NX2RvX2ZsaXAoKTsKKwl0aGlzLT5fTV9kb19zYW5pdGl6ZSgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFRvZ2dsZXMgYSBnaXZlbiBiaXQgdG8gaXRzIG9wcG9zaXRlIHZhbHVlLgorICAgICAgICogIEBwYXJhbSAgcG9zaXRpb24gIFRoZSBpbmRleCBvZiB0aGUgYml0LgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgIElmIEBhIHBvcyBpcyBiaWdnZXIgdGhlIHNpemUgb2YgdGhlICVzZXQuCisgICAgICAgKi8KKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgZmxpcChzaXplX3QgX19wb3NpdGlvbikKKyAgICAgIHsKKwlpZiAoX19wb3NpdGlvbiA+PSBfTmIpCisJICBfX3Rocm93X291dF9vZl9yYW5nZShfX04oImJpdHNldDo6ZmxpcCIpKTsKKwlyZXR1cm4gX1VuY2hlY2tlZF9mbGlwKF9fcG9zaXRpb24pOworICAgICAgfQorICAgICAgCisgICAgICAvLy8gU2VlIHRoZSBuby1hcmd1bWVudCBmbGlwKCkuCisgICAgICBiaXRzZXQ8X05iPgorICAgICAgb3BlcmF0b3J+KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGJpdHNldDxfTmI+KCp0aGlzKS5mbGlwKCk7IH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBcnJheS1pbmRleGluZyBzdXBwb3J0LgorICAgICAgICogIEBwYXJhbSAgcG9zaXRpb24gIEluZGV4IGludG8gdGhlICViaXRzZXQuCisgICAgICAgKiAgQHJldHVybiAgQSBib29sIGZvciBhIDxlbT5jb25zdCAlYml0c2V0PC9lbT4uICBGb3Igbm9uLWNvbnN0IGJpdHNldHMsIGFuCisgICAgICAgKiAgICAgICAgICAgaW5zdGFuY2Ugb2YgdGhlIHJlZmVyZW5jZSBwcm94eSBjbGFzcy4KKyAgICAgICAqICBAbm90ZSAgVGhlc2Ugb3BlcmF0b3JzIGRvIG5vIHJhbmdlIGNoZWNraW5nIGFuZCB0aHJvdyBubyBleGNlcHRpb25zLAorICAgICAgICogICAgICAgICBhcyByZXF1aXJlZCBieSBEUiAxMSB0byB0aGUgc3RhbmRhcmQuCisgICAgICAgKgorICAgICAgICogIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMgTm90ZSB0aGF0IHRoaXMgaW1wbGVtZW50YXRpb24gYWxyZWFkeQorICAgICAgICogIHJlc29sdmVzIERSIDExIChpdGVtcyAxIGFuZCAyKSwgYnV0IGRvZXMgbm90IGRvIHRoZSByYW5nZS1jaGVja2luZworICAgICAgICogIHJlcXVpcmVkIGJ5IHRoYXQgRFIncyByZXNvbHV0aW9uLiAgLXBtZQorICAgICAgICogIFRoZSBEUiBoYXMgc2luY2UgYmVlbiBjaGFuZ2VkOiAgcmFuZ2UtY2hlY2tpbmcgaXMgYSBwcmVjb25kaXRpb24KKyAgICAgICAqICAodXNlcnMnIHJlc3BvbnNpYmlsaXR5KSwgYW5kIHRoZXNlIGZ1bmN0aW9ucyBtdXN0IG5vdCB0aHJvdy4gIC1wbWUKKyAgICAgICAqLworICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKHNpemVfdCBfX3Bvc2l0aW9uKQorICAgICAgeyByZXR1cm4gcmVmZXJlbmNlKCp0aGlzLF9fcG9zaXRpb24pOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yW10oc2l6ZV90IF9fcG9zaXRpb24pIGNvbnN0CisgICAgICB7IHJldHVybiBfVW5jaGVja2VkX3Rlc3QoX19wb3NpdGlvbik7IH0KKyAgICAgIC8vQH0KKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFJldHVybnMgYSBudW1lcmljYWwgaW50ZXJwcmV0YXRpb24gb2YgdGhlICViaXRzZXQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIGludGVncmFsIGVxdWl2YWxlbnQgb2YgdGhlIGJpdHMuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om92ZXJmbG93X2Vycm9yICBJZiB0aGVyZSBhcmUgdG9vIG1hbnkgYml0cyB0byBiZQorICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcmVzZW50ZWQgaW4gYW4gQGMgdW5zaWduZWQgQGMgbG9uZy4KKyAgICAgICAqLworICAgICAgdW5zaWduZWQgbG9uZworICAgICAgdG9fdWxvbmcoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01fZG9fdG9fdWxvbmcoKTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZworICAgICAgdG9fdWxsb25nKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2RvX3RvX3VsbG9uZygpOyB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFJldHVybnMgYSBjaGFyYWN0ZXIgaW50ZXJwcmV0YXRpb24gb2YgdGhlICViaXRzZXQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIHN0cmluZyBlcXVpdmFsZW50IG9mIHRoZSBiaXRzLgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoZSBvcmRlcmluZyBvZiB0aGUgYml0czogIGRlY3JlYXNpbmcgY2hhcmFjdGVyIHBvc2l0aW9ucworICAgICAgICogIGNvcnJlc3BvbmQgdG8gaW5jcmVhc2luZyBiaXQgcG9zaXRpb25zIChzZWUgdGhlIG1haW4gY2xhc3Mgbm90ZXMgZm9yCisgICAgICAgKiAgYW4gZXhhbXBsZSkuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgorCXN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgorCXRvX3N0cmluZygpIGNvbnN0CisJeworCSAgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fcmVzdWx0OworCSAgX01fY29weV90b19zdHJpbmcoX19yZXN1bHQsIF9DaGFyVCgnMCcpLCBfQ2hhclQoJzEnKSk7CisJICByZXR1cm4gX19yZXN1bHQ7CisJfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAzOTYuIHdoYXQgYXJlIGNoYXJhY3RlcnMgemVybyBhbmQgb25lLgorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CisJc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CisJdG9fc3RyaW5nKF9DaGFyVCBfX3plcm8sIF9DaGFyVCBfX29uZSA9IF9DaGFyVCgnMScpKSBjb25zdAorCXsKKwkgIHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3Jlc3VsdDsKKwkgIF9NX2NvcHlfdG9fc3RyaW5nKF9fcmVzdWx0LCBfX3plcm8sIF9fb25lKTsKKwkgIHJldHVybiBfX3Jlc3VsdDsKKwl9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDQzNC4gYml0c2V0Ojp0b19zdHJpbmcoKSBoYXJkIHRvIHVzZS4KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KKwlzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIHN0ZDo6YWxsb2NhdG9yPF9DaGFyVD4gPgorCXRvX3N0cmluZygpIGNvbnN0CisJeyByZXR1cm4gdG9fc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgc3RkOjphbGxvY2F0b3I8X0NoYXJUPiA+KCk7IH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gODUzLiB0b19zdHJpbmcgbmVlZHMgdXBkYXRpbmcgd2l0aCB6ZXJvIGFuZCBvbmUuCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CisJc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBzdGQ6OmFsbG9jYXRvcjxfQ2hhclQ+ID4KKwl0b19zdHJpbmcoX0NoYXJUIF9femVybywgX0NoYXJUIF9fb25lID0gX0NoYXJUKCcxJykpIGNvbnN0CisJeyByZXR1cm4gdG9fc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywKKwkgICAgICAgICAgICAgICAgICAgc3RkOjphbGxvY2F0b3I8X0NoYXJUPiA+KF9femVybywgX19vbmUpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KKwlzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIHN0ZDo6Y2hhcl90cmFpdHM8X0NoYXJUPiwKKwkgICAgICAgICAgICAgICAgICBzdGQ6OmFsbG9jYXRvcjxfQ2hhclQ+ID4KKwl0b19zdHJpbmcoKSBjb25zdAorCXsKKwkgIHJldHVybiB0b19zdHJpbmc8X0NoYXJULCBzdGQ6OmNoYXJfdHJhaXRzPF9DaGFyVD4sCisJICAgICAgICAgICAgICAgICAgIHN0ZDo6YWxsb2NhdG9yPF9DaGFyVD4gPigpOworCX0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgorCXN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgc3RkOjpjaGFyX3RyYWl0czxfQ2hhclQ+LAorCSAgICAgICAgICAgICAgICAgIHN0ZDo6YWxsb2NhdG9yPF9DaGFyVD4gPgorCXRvX3N0cmluZyhfQ2hhclQgX196ZXJvLCBfQ2hhclQgX19vbmUgPSBfQ2hhclQoJzEnKSkgY29uc3QKKwl7CisJICByZXR1cm4gdG9fc3RyaW5nPF9DaGFyVCwgc3RkOjpjaGFyX3RyYWl0czxfQ2hhclQ+LAorCSAgICAgICAgICAgICAgICAgICBzdGQ6OmFsbG9jYXRvcjxfQ2hhclQ+ID4oX196ZXJvLCBfX29uZSk7CisJfQorCisgICAgICBzdGQ6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+CisgICAgICB0b19zdHJpbmcoKSBjb25zdAorICAgICAgeworCXJldHVybiB0b19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwKKwkgICAgICAgICAgICAgICAgIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4oKTsKKyAgICAgIH0KKworICAgICAgc3RkOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPgorICAgICAgdG9fc3RyaW5nKGNoYXIgX196ZXJvLCBjaGFyIF9fb25lID0gJzEnKSBjb25zdAorICAgICAgeworCXJldHVybiB0b19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwKKwkgICAgICAgICAgICAgICAgIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4oX196ZXJvLCBfX29uZSk7CisgICAgICB9CisKKyAgICAgIC8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIHN0cmluZyBvcGVyYXRpb25zLgorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX2NvcHlfZnJvbV9wdHIoY29uc3QgX0NoYXJUKiwgc2l6ZV90LCBzaXplX3QsIHNpemVfdCwKKwkJCSBfQ2hhclQsIF9DaGFyVCk7CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgorCXZvaWQKKwlfTV9jb3B5X2Zyb21fc3RyaW5nKGNvbnN0IHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwKKwkJCSAgICBfVHJhaXRzLCBfQWxsb2M+JiBfX3MsIHNpemVfdCBfX3Bvcywgc2l6ZV90IF9fbiwKKwkJCSAgICBfQ2hhclQgX196ZXJvLCBfQ2hhclQgX19vbmUpCisJeyBfTV9jb3B5X2Zyb21fcHRyPF9DaGFyVCwgX1RyYWl0cz4oX19zLmRhdGEoKSwgX19zLnNpemUoKSwgX19wb3MsIF9fbiwKKwkJCQkJICAgIF9femVybywgX19vbmUpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgorCXZvaWQKKyAgICAgICAgX01fY29weV90b19zdHJpbmcoc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiwKKwkJCSAgX0NoYXJULCBfQ2hhclQpIGNvbnN0OworCisgICAgICAvLyBOQjogQmFja3dhcmQgY29tcGF0LgorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CisJdm9pZAorCV9NX2NvcHlfZnJvbV9zdHJpbmcoY29uc3Qgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULAorCQkJICAgIF9UcmFpdHMsIF9BbGxvYz4mIF9fcywgc2l6ZV90IF9fcG9zLCBzaXplX3QgX19uKQorCXsgX01fY29weV9mcm9tX3N0cmluZyhfX3MsIF9fcG9zLCBfX24sIF9DaGFyVCgnMCcpLCBfQ2hhclQoJzEnKSk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CisJdm9pZAorICAgICAgICBfTV9jb3B5X3RvX3N0cmluZyhzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsX0FsbG9jPiYgX19zKSBjb25zdAorCXsgX01fY29weV90b19zdHJpbmcoX19zLCBfQ2hhclQoJzAnKSwgX0NoYXJUKCcxJykpOyB9CisKKyAgICAgIC8vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYml0cyB3aGljaCBhcmUgc2V0LgorICAgICAgc2l6ZV90CisgICAgICBjb3VudCgpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5fTV9kb19jb3VudCgpOyB9CisKKyAgICAgIC8vLyBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgYml0cy4KKyAgICAgIHNpemVfdAorICAgICAgc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTmI7IH0KKworICAgICAgLy9AeworICAgICAgLy8vIFRoZXNlIGNvbXBhcmlzb25zIGZvciBlcXVhbGl0eS9pbmVxdWFsaXR5IGFyZSwgd2VsbCwgQGUgYml0d2lzZS4KKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgYml0c2V0PF9OYj4mIF9fcmhzKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01faXNfZXF1YWwoX19yaHMpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yIT0oY29uc3QgYml0c2V0PF9OYj4mIF9fcmhzKSBjb25zdAorICAgICAgeyByZXR1cm4gIXRoaXMtPl9NX2lzX2VxdWFsKF9fcmhzKTsgfQorICAgICAgLy9AfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgVGVzdHMgdGhlIHZhbHVlIG9mIGEgYml0LgorICAgICAgICogIEBwYXJhbSAgcG9zaXRpb24gIFRoZSBpbmRleCBvZiBhIGJpdC4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgdmFsdWUgYXQgQGEgcG9zLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgIElmIEBhIHBvcyBpcyBiaWdnZXIgdGhlIHNpemUgb2YgdGhlICVzZXQuCisgICAgICAgKi8KKyAgICAgIGJvb2wKKyAgICAgIHRlc3Qoc2l6ZV90IF9fcG9zaXRpb24pIGNvbnN0CisgICAgICB7CisJaWYgKF9fcG9zaXRpb24gPj0gX05iKQorCSAgX190aHJvd19vdXRfb2ZfcmFuZ2UoX19OKCJiaXRzZXQ6OnRlc3QiKSk7CisJcmV0dXJuIF9VbmNoZWNrZWRfdGVzdChfX3Bvc2l0aW9uKTsKKyAgICAgIH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gRFIgNjkzLiBzdGQ6OmJpdHNldDo6YWxsKCkgbWlzc2luZy4KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBUZXN0cyB3aGV0aGVyIGFsbCB0aGUgYml0cyBhcmUgb24uCisgICAgICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBhbGwgdGhlIGJpdHMgYXJlIHNldC4KKyAgICAgICAqLworICAgICAgYm9vbAorICAgICAgYWxsKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2FyZV9hbGxfYXV4KCkgPT0gX05iOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBUZXN0cyB3aGV0aGVyIGFueSBvZiB0aGUgYml0cyBhcmUgb24uCisgICAgICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBhdCBsZWFzdCBvbmUgYml0IGlzIHNldC4KKyAgICAgICAqLworICAgICAgYm9vbAorICAgICAgYW55KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2lzX2FueSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBUZXN0cyB3aGV0aGVyIGFueSBvZiB0aGUgYml0cyBhcmUgb24uCisgICAgICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBub25lIG9mIHRoZSBiaXRzIGFyZSBzZXQuCisgICAgICAgKi8KKyAgICAgIGJvb2wKKyAgICAgIG5vbmUoKSBjb25zdAorICAgICAgeyByZXR1cm4gIXRoaXMtPl9NX2lzX2FueSgpOyB9CisKKyAgICAgIC8vQHsKKyAgICAgIC8vLyBTZWxmLWV4cGxhbmF0b3J5LgorICAgICAgYml0c2V0PF9OYj4KKyAgICAgIG9wZXJhdG9yPDwoc2l6ZV90IF9fcG9zaXRpb24pIGNvbnN0CisgICAgICB7IHJldHVybiBiaXRzZXQ8X05iPigqdGhpcykgPDw9IF9fcG9zaXRpb247IH0KKworICAgICAgYml0c2V0PF9OYj4KKyAgICAgIG9wZXJhdG9yPj4oc2l6ZV90IF9fcG9zaXRpb24pIGNvbnN0CisgICAgICB7IHJldHVybiBiaXRzZXQ8X05iPigqdGhpcykgPj49IF9fcG9zaXRpb247IH0KKyAgICAgIC8vQH0KKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0ICJvbiIgYml0LgorICAgICAgICogIEByZXR1cm4gIFRoZSBpbmRleCBvZiB0aGUgZmlyc3QgYml0IHNldCwgb3Igc2l6ZSgpIGlmIG5vdCBmb3VuZC4KKyAgICAgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICAgICAgKiAgQHNhICBfRmluZF9uZXh0CisgICAgICAgKi8KKyAgICAgIHNpemVfdAorICAgICAgX0ZpbmRfZmlyc3QoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01fZG9fZmluZF9maXJzdChfTmIpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZHMgdGhlIGluZGV4IG9mIHRoZSBuZXh0ICJvbiIgYml0IGFmdGVyIHByZXYuCisgICAgICAgKiAgQHJldHVybiAgVGhlIGluZGV4IG9mIHRoZSBuZXh0IGJpdCBzZXQsIG9yIHNpemUoKSBpZiBub3QgZm91bmQuCisgICAgICAgKiAgQHBhcmFtICBwcmV2ICBXaGVyZSB0byBzdGFydCBzZWFyY2hpbmcuCisgICAgICAgKiAgQGluZ3JvdXAgU0dJZXh0ZW5zaW9ucworICAgICAgICogIEBzYSAgX0ZpbmRfZmlyc3QKKyAgICAgICAqLworICAgICAgc2l6ZV90CisgICAgICBfRmluZF9uZXh0KHNpemVfdCBfX3ByZXYgKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01fZG9fZmluZF9uZXh0KF9fcHJldiwgX05iKTsgfQorICAgIH07CisKKyAgLy8gRGVmaW5pdGlvbnMgb2Ygbm9uLWlubGluZSBtZW1iZXIgZnVuY3Rpb25zLgorICB0ZW1wbGF0ZTxzaXplX3QgX05iPgorICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KKyAgICAgIHZvaWQKKyAgICAgIGJpdHNldDxfTmI+OjoKKyAgICAgIF9NX2NvcHlfZnJvbV9wdHIoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdCBfX2xlbiwKKwkJICAgICAgIHNpemVfdCBfX3Bvcywgc2l6ZV90IF9fbiwgX0NoYXJUIF9femVybywgX0NoYXJUIF9fb25lKQorICAgICAgeworCXJlc2V0KCk7CisJY29uc3Qgc2l6ZV90IF9fbmJpdHMgPSBzdGQ6Om1pbihfTmIsIHN0ZDo6bWluKF9fbiwgX19sZW4gLSBfX3BvcykpOworCWZvciAoc2l6ZV90IF9faSA9IF9fbmJpdHM7IF9faSA+IDA7IC0tX19pKQorCSAgeworCSAgICBjb25zdCBfQ2hhclQgX19jID0gX19zW19fcG9zICsgX19uYml0cyAtIF9faV07CisJICAgIGlmIChfVHJhaXRzOjplcShfX2MsIF9femVybykpCisJICAgICAgOworCSAgICBlbHNlIGlmIChfVHJhaXRzOjplcShfX2MsIF9fb25lKSkKKwkgICAgICBfVW5jaGVja2VkX3NldChfX2kgLSAxKTsKKwkgICAgZWxzZQorCSAgICAgIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChfX04oImJpdHNldDo6X01fY29weV9mcm9tX3B0ciIpKTsKKwkgIH0KKyAgICAgIH0KKworICB0ZW1wbGF0ZTxzaXplX3QgX05iPgorICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgorICAgICAgdm9pZAorICAgICAgYml0c2V0PF9OYj46OgorICAgICAgX01fY29weV90b19zdHJpbmcoc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MsCisJCQlfQ2hhclQgX196ZXJvLCBfQ2hhclQgX19vbmUpIGNvbnN0CisgICAgICB7CisJX19zLmFzc2lnbihfTmIsIF9femVybyk7CisJZm9yIChzaXplX3QgX19pID0gX05iOyBfX2kgPiAwOyAtLV9faSkKKwkgIGlmIChfVW5jaGVja2VkX3Rlc3QoX19pIC0gMSkpCisJICAgIF9UcmFpdHM6OmFzc2lnbihfX3NbX05iIC0gX19pXSwgX19vbmUpOworICAgICAgfQorCisgIC8vIDIzLjMuNS4zIGJpdHNldCBvcGVyYXRpb25zOgorICAvL0B7CisgIC8qKgorICAgKiAgQGJyaWVmICBHbG9iYWwgYml0d2lzZSBvcGVyYXRpb25zIG9uIGJpdHNldHMuCisgICAqICBAcGFyYW0gIHggIEEgYml0c2V0LgorICAgKiAgQHBhcmFtICB5ICBBIGJpdHNldCBvZiB0aGUgc2FtZSBzaXplIGFzIEBhIHguCisgICAqICBAcmV0dXJuICBBIG5ldyBiaXRzZXQuCisgICAqCisgICAqICBUaGVzZSBzaG91bGQgYmUgc2VsZi1leHBsYW5hdG9yeS4KKyAgKi8KKyAgdGVtcGxhdGU8c2l6ZV90IF9OYj4KKyAgICBpbmxpbmUgYml0c2V0PF9OYj4KKyAgICBvcGVyYXRvciYoY29uc3QgYml0c2V0PF9OYj4mIF9feCwgY29uc3QgYml0c2V0PF9OYj4mIF9feSkKKyAgICB7CisgICAgICBiaXRzZXQ8X05iPiBfX3Jlc3VsdChfX3gpOworICAgICAgX19yZXN1bHQgJj0gX195OworICAgICAgcmV0dXJuIF9fcmVzdWx0OworICAgIH0KKworICB0ZW1wbGF0ZTxzaXplX3QgX05iPgorICAgIGlubGluZSBiaXRzZXQ8X05iPgorICAgIG9wZXJhdG9yfChjb25zdCBiaXRzZXQ8X05iPiYgX194LCBjb25zdCBiaXRzZXQ8X05iPiYgX195KQorICAgIHsKKyAgICAgIGJpdHNldDxfTmI+IF9fcmVzdWx0KF9feCk7CisgICAgICBfX3Jlc3VsdCB8PSBfX3k7CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIHRlbXBsYXRlIDxzaXplX3QgX05iPgorICAgIGlubGluZSBiaXRzZXQ8X05iPgorICAgIG9wZXJhdG9yXihjb25zdCBiaXRzZXQ8X05iPiYgX194LCBjb25zdCBiaXRzZXQ8X05iPiYgX195KQorICAgIHsKKyAgICAgIGJpdHNldDxfTmI+IF9fcmVzdWx0KF9feCk7CisgICAgICBfX3Jlc3VsdCBePSBfX3k7CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorICAvL0B9CisKKyAgLy9AeworICAvKioKKyAgICogIEBicmllZiBHbG9iYWwgSS9PIG9wZXJhdG9ycyBmb3IgYml0c2V0cy4KKyAgICoKKyAgICogIERpcmVjdCBJL08gYmV0d2VlbiBzdHJlYW1zIGFuZCBiaXRzZXRzIGlzIHN1cHBvcnRlZC4gIE91dHB1dCBpcworICAgKiAgc3RyYWlnaHRmb3J3YXJkLiAgSW5wdXQgd2lsbCBza2lwIHdoaXRlc3BhY2UsIG9ubHkgYWNjZXB0IEBhIDAgYW5kIEBhIDEKKyAgICogIGNoYXJhY3RlcnMsIGFuZCB3aWxsIG9ubHkgZXh0cmFjdCBhcyBtYW55IGRpZ2l0cyBhcyB0aGUgJWJpdHNldCB3aWxsCisgICAqICBob2xkLgorICAqLworICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIHNpemVfdCBfTmI+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywgYml0c2V0PF9OYj4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSAgICAgICAgICBjaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cz4gX190bXA7CisgICAgICBfX3RtcC5yZXNlcnZlKF9OYik7CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDMwMy4gQml0c2V0IGlucHV0IG9wZXJhdG9yIHVuZGVyc3BlY2lmaWVkCisgICAgICBjb25zdCBjaGFyX3R5cGUgX196ZXJvID0gX19pcy53aWRlbignMCcpOworICAgICAgY29uc3QgY2hhcl90eXBlIF9fb25lID0gX19pcy53aWRlbignMScpOworCisgICAgICB0eXBlbmFtZSBfX2lvc19iYXNlOjppb3N0YXRlIF9fc3RhdGUgPSBfX2lvc19iYXNlOjpnb29kYml0OworICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX3NlbnRyeShfX2lzKTsKKyAgICAgIGlmIChfX3NlbnRyeSkKKwl7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgZm9yIChzaXplX3QgX19pID0gX05iOyBfX2kgPiAwOyAtLV9faSkKKwkJeworCQkgIHN0YXRpYyB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOworCQkgIAorCQkgIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIF9fYzEgPSBfX2lzLnJkYnVmKCktPnNidW1wYygpOworCQkgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MxLCBfX2VvZikpCisJCSAgICB7CisJCSAgICAgIF9fc3RhdGUgfD0gX19pb3NfYmFzZTo6ZW9mYml0OworCQkgICAgICBicmVhazsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX2MyID0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYzEpOworCQkgICAgICBpZiAoX1RyYWl0czo6ZXEoX19jMiwgX196ZXJvKSkKKwkJCV9fdG1wLnB1c2hfYmFjayhfX3plcm8pOworCQkgICAgICBlbHNlIGlmIChfVHJhaXRzOjplcShfX2MyLCBfX29uZSkpCisJCQlfX3RtcC5wdXNoX2JhY2soX19vbmUpOworCQkgICAgICBlbHNlIGlmIChfVHJhaXRzOjoKKwkJCSAgICAgICBlcV9pbnRfdHlwZShfX2lzLnJkYnVmKCktPnNwdXRiYWNrYyhfX2MyKSwKKwkJCQkJICAgX19lb2YpKQorCQkJeworCQkJICBfX3N0YXRlIHw9IF9faW9zX2Jhc2U6OmZhaWxiaXQ7CisJCQkgIGJyZWFrOworCQkJfQorCQkgICAgfQorCQl9CisJICAgIH0KKwkgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwkgICAgeworCSAgICAgIF9faXMuX01fc2V0c3RhdGUoX19pb3NfYmFzZTo6YmFkYml0KTsJCQorCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeyBfX2lzLl9NX3NldHN0YXRlKF9faW9zX2Jhc2U6OmJhZGJpdCk7IH0KKwl9CisKKyAgICAgIGlmIChfX3RtcC5lbXB0eSgpICYmIF9OYikKKwlfX3N0YXRlIHw9IF9faW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgICBlbHNlCisJX194Ll9NX2NvcHlfZnJvbV9zdHJpbmcoX190bXAsIHN0YXRpY19jYXN0PHNpemVfdD4oMCksIF9OYiwKKwkJCQlfX3plcm8sIF9fb25lKTsKKyAgICAgIGlmIChfX3N0YXRlKQorCV9faXMuc2V0c3RhdGUoX19zdGF0ZSk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgc2l6ZV90IF9OYj4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBiaXRzZXQ8X05iPiYgX194KQorICAgIHsKKyAgICAgIHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cz4gX190bXA7CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDM5Ni4gd2hhdCBhcmUgY2hhcmFjdGVycyB6ZXJvIGFuZCBvbmUuCisgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0ID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX29zLmdldGxvYygpKTsKKyAgICAgIF9feC5fTV9jb3B5X3RvX3N0cmluZyhfX3RtcCwgX19jdC53aWRlbignMCcpLCBfX2N0LndpZGVuKCcxJykpOworICAgICAgcmV0dXJuIF9fb3MgPDwgX190bXA7CisgICAgfQorICAvL0B9CisKK19HTElCQ1hYX0VORF9ORVNURURfTkFNRVNQQUNFCisKKyN1bmRlZiBfR0xJQkNYWF9CSVRTRVRfV09SRFMKKyN1bmRlZiBfR0xJQkNYWF9CSVRTRVRfQklUU19QRVJfV09SRAorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKworI2luY2x1ZGUgPGJpdHMvZnVuY3Rpb25hbF9oYXNoLmg+CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgLy8gRFIgMTE4Mi4KKyAgLy8vIHN0ZDo6aGFzaCBzcGVjaWFsaXphdGlvbiBmb3IgYml0c2V0LgorICB0ZW1wbGF0ZTxzaXplX3QgX05iPgorICAgIHN0cnVjdCBoYXNoPF9HTElCQ1hYX1NURF9EOjpiaXRzZXQ8X05iPj4KKyAgICA6IHB1YmxpYyBzdGQ6OnVuYXJ5X2Z1bmN0aW9uPF9HTElCQ1hYX1NURF9EOjpiaXRzZXQ8X05iPiwgc2l6ZV90PgorICAgIHsKKyAgICAgIHNpemVfdAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfR0xJQkNYWF9TVERfRDo6Yml0c2V0PF9OYj4mIF9fYikgY29uc3QKKyAgICAgIHsKKwljb25zdCBzaXplX3QgX19jbGVuZ3RoID0gKF9OYiArIF9fQ0hBUl9CSVRfXyAtIDEpIC8gX19DSEFSX0JJVF9fOworCXJldHVybiBzdGQ6Ol9GbnZfaGFzaDo6aGFzaChfX2IuX01fZ2V0ZGF0YSgpLCBfX2NsZW5ndGgpOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBoYXNoPF9HTElCQ1hYX1NURF9EOjpiaXRzZXQ8MD4+CisgICAgOiBwdWJsaWMgc3RkOjp1bmFyeV9mdW5jdGlvbjxfR0xJQkNYWF9TVERfRDo6Yml0c2V0PDA+LCBzaXplX3Q+CisgICAgeworICAgICAgc2l6ZV90CisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9HTElCQ1hYX1NURF9EOjpiaXRzZXQ8MD4mKSBjb25zdAorICAgICAgeyByZXR1cm4gMDsgfQorICAgIH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmIC8vIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworIyBpbmNsdWRlIDxkZWJ1Zy9iaXRzZXQ+CisjZW5kaWYKKworI2lmZGVmIF9HTElCQ1hYX1BST0ZJTEUKKyMgaW5jbHVkZSA8cHJvZmlsZS9iaXRzZXQ+CisjZW5kaWYKKworI2VuZGlmIC8qIF9HTElCQ1hYX0JJVFNFVCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jYXNzZXJ0IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jYXNzZXJ0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjOGFmNjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2Nhc3NlcnQKQEAgLTAsMCArMSw0NSBAQAorLy8gLSotIEMrKyAtKi0gZm9yd2FyZGluZyBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwKKy8vIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBjYXNzZXJ0CisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGZpbGUuICBZb3Ugc2hvdWxkIEBjIFwjaW5jbHVkZSB0aGlzIGZpbGUKKyAqICBpbiB5b3VyIHByb2dyYW1zLCByYXRoZXIgdGhhbiBhbnkgb2YgdGhlIEBhICouaCBpbXBsZW1lbnRhdGlvbiBmaWxlcy4KKyAqCisgKiAgVGhpcyBpcyB0aGUgQysrIHZlcnNpb24gb2YgdGhlIFN0YW5kYXJkIEMgTGlicmFyeSBoZWFkZXIgQGMgYXNzZXJ0LmgsCisgKiAgYW5kIGl0cyBjb250ZW50cyBhcmUgKG1vc3RseSkgdGhlIHNhbWUgYXMgdGhhdCBoZWFkZXIsIGJ1dCBhcmUgYWxsCisgKiAgY29udGFpbmVkIGluIHRoZSBuYW1lc3BhY2UgQGMgc3RkIChleGNlcHQgZm9yIG5hbWVzIHdoaWNoIGFyZSBkZWZpbmVkCisgKiAgYXMgbWFjcm9zIGluIEMpLgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAxOS4yICBBc3NlcnRpb25zCisvLworCisvLyBObyBpbmNsdWRlIGd1YXJkcyBvbiB0aGlzIGhlYWRlci4uLgorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY2NvbXBsZXggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2Njb21wbGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMTE3ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2Njb21wbGV4CkBAIC0wLDAgKzEsNDQgQEAKKy8vIDxjY29tcGxleD4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL2Njb21wbGV4CisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpZm5kZWYgX0dMSUJDWFhfQ0NPTVBMRVgKKyNkZWZpbmUgX0dMSUJDWFhfQ0NPTVBMRVggMQorCisjaWZuZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisjIGluY2x1ZGUgPGJpdHMvYysrMHhfd2FybmluZy5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9HTElCQ1hYX0lOQ0xVREVfQVNfVFIxKQorIyAgZXJyb3IgQysrMHggaGVhZGVyIGNhbm5vdCBiZSBpbmNsdWRlZCBmcm9tIFRSMSBoZWFkZXIKKyNlbmRpZgorCisjaW5jbHVkZSA8Y29tcGxleD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2NjdHlwZSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY2N0eXBlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZmUxNzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2NjdHlwZQpAQCAtMCwwICsxLDEwMSBAQAorLy8gLSotIEMrKyAtKi0gZm9yd2FyZGluZyBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwKKy8vIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL2NjdHlwZQorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBmaWxlLiAgWW91IHNob3VsZCBAYyBcI2luY2x1ZGUgdGhpcyBmaWxlCisgKiAgaW4geW91ciBwcm9ncmFtcywgcmF0aGVyIHRoYW4gYW55IG9mIHRoZSBAYSAqLmggaW1wbGVtZW50YXRpb24gZmlsZXMuCisgKgorICogIFRoaXMgaXMgdGhlIEMrKyB2ZXJzaW9uIG9mIHRoZSBTdGFuZGFyZCBDIExpYnJhcnkgaGVhZGVyIEBjIGN0eXBlLmgsCisgKiAgYW5kIGl0cyBjb250ZW50cyBhcmUgKG1vc3RseSkgdGhlIHNhbWUgYXMgdGhhdCBoZWFkZXIsIGJ1dCBhcmUgYWxsCisgKiAgY29udGFpbmVkIGluIHRoZSBuYW1lc3BhY2UgQGMgc3RkIChleGNlcHQgZm9yIG5hbWVzIHdoaWNoIGFyZSBkZWZpbmVkCisgKiAgYXMgbWFjcm9zIGluIEMpLgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiA8Y2N5dHBlPgorLy8KKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaWZuZGVmIF9HTElCQ1hYX0NDVFlQRQorI2RlZmluZSBfR0xJQkNYWF9DQ1RZUEUgMQorCisvLyBHZXQgcmlkIG9mIHRob3NlIG1hY3JvcyBkZWZpbmVkIGluIDxjdHlwZS5oPiBpbiBsaWV1IG9mIHJlYWwgZnVuY3Rpb25zLgorI3VuZGVmIGlzYWxudW0KKyN1bmRlZiBpc2FscGhhCisjdW5kZWYgaXNjbnRybAorI3VuZGVmIGlzZGlnaXQKKyN1bmRlZiBpc2dyYXBoCisjdW5kZWYgaXNsb3dlcgorI3VuZGVmIGlzcHJpbnQKKyN1bmRlZiBpc3B1bmN0CisjdW5kZWYgaXNzcGFjZQorI3VuZGVmIGlzdXBwZXIKKyN1bmRlZiBpc3hkaWdpdAorI3VuZGVmIHRvbG93ZXIKKyN1bmRlZiB0b3VwcGVyCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgdXNpbmcgOjppc2FsbnVtOworICB1c2luZyA6OmlzYWxwaGE7CisgIHVzaW5nIDo6aXNjbnRybDsKKyAgdXNpbmcgOjppc2RpZ2l0OworICB1c2luZyA6OmlzZ3JhcGg7CisgIHVzaW5nIDo6aXNsb3dlcjsKKyAgdXNpbmcgOjppc3ByaW50OworICB1c2luZyA6OmlzcHVuY3Q7CisgIHVzaW5nIDo6aXNzcGFjZTsKKyAgdXNpbmcgOjppc3VwcGVyOworICB1c2luZyA6OmlzeGRpZ2l0OworICB1c2luZyA6OnRvbG93ZXI7CisgIHVzaW5nIDo6dG91cHBlcjsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyMgIGlmIGRlZmluZWQoX0dMSUJDWFhfSU5DTFVERV9BU19UUjEpCisjICAgIGVycm9yIEMrKzB4IGhlYWRlciBjYW5ub3QgYmUgaW5jbHVkZWQgZnJvbSBUUjEgaGVhZGVyCisjICBlbmRpZgorIyAgaWYgZGVmaW5lZChfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYKQorIyAgICBpbmNsdWRlIDx0cjFfaW1wbC9jY3R5cGU+CisjICBlbHNlCisjICAgIGRlZmluZSBfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYCisjICAgIGRlZmluZSBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxCisjICAgIGRlZmluZSBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorIyAgICBkZWZpbmUgX0dMSUJDWFhfVFIxCisjICAgIGluY2x1ZGUgPHRyMV9pbXBsL2NjdHlwZT4KKyMgICAgdW5kZWYgX0dMSUJDWFhfVFIxCisjICAgIHVuZGVmIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVFIxCisjICAgIHVuZGVmIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9UUjEKKyMgICAgdW5kZWYgX0dMSUJDWFhfSU5DTFVERV9BU19DWFgwWAorIyAgZW5kaWYKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY2Vycm5vIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jZXJybm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ1MWNkOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY2Vycm5vCkBAIC0wLDAgKzEsNTMgQEAKKy8vIFRoZSAtKi0gQysrIC0qLSBmb3J3YXJkaW5nIGhlYWRlci4KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LAorLy8gMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGNlcnJubworICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBmaWxlLiAgWW91IHNob3VsZCBAYyBcI2luY2x1ZGUgdGhpcyBmaWxlCisgKiAgaW4geW91ciBwcm9ncmFtcywgcmF0aGVyIHRoYW4gYW55IG9mIHRoZSBAYSAqLmggaW1wbGVtZW50YXRpb24gZmlsZXMuCisgKgorICogIFRoaXMgaXMgdGhlIEMrKyB2ZXJzaW9uIG9mIHRoZSBTdGFuZGFyZCBDIExpYnJhcnkgaGVhZGVyIEBjIGVycm5vLmgsCisgKiAgYW5kIGl0cyBjb250ZW50cyBhcmUgKG1vc3RseSkgdGhlIHNhbWUgYXMgdGhhdCBoZWFkZXIsIGJ1dCBhcmUgYWxsCisgKiAgY29udGFpbmVkIGluIHRoZSBuYW1lc3BhY2UgQGMgc3RkIChleGNlcHQgZm9yIG5hbWVzIHdoaWNoIGFyZSBkZWZpbmVkCisgKiAgYXMgbWFjcm9zIGluIEMpLgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAxOS4zICBFcnJvciBudW1iZXJzCisvLworCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaWZuZGVmIF9HTElCQ1hYX0NFUlJOTworI2RlZmluZSBfR0xJQkNYWF9DRVJSTk8gMQorCisvLyBBZGhlcmUgdG8gc2VjdGlvbiAxNy40LjEuMiBjbGF1c2UgNSBvZiBJU08gMTQ4ODI6MTk5OAorI2lmbmRlZiBlcnJubworI2RlZmluZSBlcnJubyBlcnJubworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jZmVudiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY2ZlbnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU0MDE0MQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY2ZlbnYKQEAgLTAsMCArMSw2MSBAQAorLy8gPGNmZW52PiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvY2ZlbnYKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfQ0ZFTlYKKyNkZWZpbmUgX0dMSUJDWFhfQ0ZFTlYgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpZm5kZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyMgaW5jbHVkZSA8Yml0cy9jKysweF93YXJuaW5nLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoX0dMSUJDWFhfSU5DTFVERV9BU19UUjEpCisjICBlcnJvciBDKysweCBoZWFkZXIgY2Fubm90IGJlIGluY2x1ZGVkIGZyb20gVFIxIGhlYWRlcgorI2VuZGlmCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2lmIF9HTElCQ1hYX0hBVkVfRkVOVl9ICisjIGluY2x1ZGUgPGZlbnYuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYKQorIyAgaW5jbHVkZSA8dHIxX2ltcGwvY2ZlbnY+CisjZWxzZQorIyAgZGVmaW5lIF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgKKyMgIGRlZmluZSBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxCisjICBkZWZpbmUgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9UUjEKKyMgIGRlZmluZSBfR0xJQkNYWF9UUjEKKyMgIGluY2x1ZGUgPHRyMV9pbXBsL2NmZW52PgorIyAgdW5kZWYgX0dMSUJDWFhfVFIxCisjICB1bmRlZiBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorIyAgdW5kZWYgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMQorIyAgdW5kZWYgX0dMSUJDWFhfSU5DTFVERV9BU19DWFgwWAorI2VuZGlmCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9DRkVOVgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jZmxvYXQgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2NmbG9hdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmU4MWQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jZmxvYXQKQEAgLTAsMCArMSw2MCBAQAorLy8gLSotIEMrKyAtKi0gZm9yd2FyZGluZyBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwKKy8vIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL2NmbG9hdAorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBmaWxlLiAgWW91IHNob3VsZCBAYyBcI2luY2x1ZGUgdGhpcyBmaWxlCisgKiAgaW4geW91ciBwcm9ncmFtcywgcmF0aGVyIHRoYW4gYW55IG9mIHRoZSBAYSAqLmggaW1wbGVtZW50YXRpb24gZmlsZXMuCisgKgorICogIFRoaXMgaXMgdGhlIEMrKyB2ZXJzaW9uIG9mIHRoZSBTdGFuZGFyZCBDIExpYnJhcnkgaGVhZGVyIEBjIGZsb2F0LmgsCisgKiAgYW5kIGl0cyBjb250ZW50cyBhcmUgKG1vc3RseSkgdGhlIHNhbWUgYXMgdGhhdCBoZWFkZXIsIGJ1dCBhcmUgYWxsCisgKiAgY29udGFpbmVkIGluIHRoZSBuYW1lc3BhY2UgQGMgc3RkIChleGNlcHQgZm9yIG5hbWVzIHdoaWNoIGFyZSBkZWZpbmVkCisgKiAgYXMgbWFjcm9zIGluIEMpLgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAxOC4yLjIgIEltcGxlbWVudGF0aW9uIHByb3BlcnRpZXM6IEMgbGlicmFyeQorLy8KKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8ZmxvYXQuaD4KKworI2lmbmRlZiBfR0xJQkNYWF9DRkxPQVQKKyNkZWZpbmUgX0dMSUJDWFhfQ0ZMT0FUIDEKKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisjICBpZiBkZWZpbmVkKF9HTElCQ1hYX0lOQ0xVREVfQVNfVFIxKQorIyAgICBlcnJvciBDKysweCBoZWFkZXIgY2Fubm90IGJlIGluY2x1ZGVkIGZyb20gVFIxIGhlYWRlcgorIyAgZW5kaWYKKyMgIGlmbmRlZiBERUNJTUFMX0RJRworIyAgICBkZWZpbmUgREVDSU1BTF9ESUcgX19ERUNJTUFMX0RJR19fCisjICBlbmRpZgorIyAgaWZuZGVmIEZMVF9FVkFMX01FVEhPRAorIyAgICBkZWZpbmUgRkxUX0VWQUxfTUVUSE9EIF9fRkxUX0VWQUxfTUVUSE9EX18KKyMgIGVuZGlmCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2Nocm9ubyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY2hyb25vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMGI3ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2Nocm9ubwpAQCAtMCwwICsxLDcwMCBAQAorLy8gPGNocm9ubz4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL2Nocm9ubworICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9DSFJPTk8KKyNkZWZpbmUgX0dMSUJDWFhfQ0hST05PIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaWZuZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisjIGluY2x1ZGUgPGJpdHMvYysrMHhfd2FybmluZy5oPgorI2Vsc2UKKworI2lmZGVmIF9HTElCQ1hYX0lOQ0xVREVfQVNfVFIxCisjICBlcnJvciBDKysweCBoZWFkZXIgY2Fubm90IGJlIGluY2x1ZGVkIGZyb20gVFIxIGhlYWRlcgorI2VuZGlmCisKKyNpbmNsdWRlIDxyYXRpbz4KKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8Y3RpbWU+CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfQzk5X1NURElOVF9UUjEKKworbmFtZXNwYWNlIHN0ZCAKK3sKKyAgLyoqCisgICAqIEBkZWZncm91cCBjaHJvbm8gVGltZQorICAgKiBAaW5ncm91cCB1dGlsaXRpZXMKKyAgICoKKyAgICogQ2xhc3NlcyBhbmQgZnVuY3Rpb25zIGZvciB0aW1lLgorICAgKiBAeworICAgKi8KKworICAvKiogQG5hbWVzcGFjZSBzdGQ6OmNocm9ubworICAgKiAgQGJyaWVmIElTTyBDKysgMHggZW50aXRpZXMgc3ViIG5hbWVzcGFjZSBmb3IgdGltZSBhbmQgZGF0ZS4KKyAgICovCisgIG5hbWVzcGFjZSBjaHJvbm8KKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAsIHR5cGVuYW1lIF9QZXJpb2QgPSByYXRpbzwxPj4KKyAgICAgIHN0cnVjdCBkdXJhdGlvbjsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DbG9jaywgdHlwZW5hbWUgX0R1cmF0aW9uID0gdHlwZW5hbWUgX0Nsb2NrOjpkdXJhdGlvbj4KKyAgICAgIHN0cnVjdCB0aW1lX3BvaW50OworICB9CisKKyAgLy8gMjAuOC4yLjMgc3BlY2lhbGl6YXRpb24gb2YgY29tbW9uX3R5cGUgKGZvciBkdXJhdGlvbikKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcDEsIHR5cGVuYW1lIF9QZXJpb2QxLCB0eXBlbmFtZSBfUmVwMiwgdHlwZW5hbWUgX1BlcmlvZDI+CisgICAgc3RydWN0IGNvbW1vbl90eXBlPGNocm9ubzo6ZHVyYXRpb248X1JlcDEsIF9QZXJpb2QxPiwKKyAgICAgICAgICAgICAgICAgICAgICAgY2hyb25vOjpkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+PgorICAgIHsKKyAgICAgIHR5cGVkZWYgY2hyb25vOjpkdXJhdGlvbjx0eXBlbmFtZSBjb21tb25fdHlwZTxfUmVwMSwgX1JlcDI+Ojp0eXBlLAorICAgICAgICByYXRpbzxfX3N0YXRpY19nY2Q8X1BlcmlvZDE6Om51bSwgX1BlcmlvZDI6Om51bT46OnZhbHVlLAorICAgICAgICAoX1BlcmlvZDE6OmRlbiAvIF9fc3RhdGljX2djZDxfUGVyaW9kMTo6ZGVuLCBfUGVyaW9kMjo6ZGVuPjo6dmFsdWUpCisgICAgICAgICogX1BlcmlvZDI6OmRlbj4+IHR5cGU7CisgICAgfTsKKyAgCisgIC8vIDIwLjguMi4zIHNwZWNpYWxpemF0aW9uIG9mIGNvbW1vbl90eXBlIChmb3IgdGltZV9wb2ludCkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Nsb2NrLCB0eXBlbmFtZSBfRHVyYXRpb24xLCB0eXBlbmFtZSBfRHVyYXRpb24yPgorICAgIHN0cnVjdCBjb21tb25fdHlwZTxjaHJvbm86OnRpbWVfcG9pbnQ8X0Nsb2NrLCBfRHVyYXRpb24xPiwKKyAgICAgICAgICAgICAgICAgICAgICAgY2hyb25vOjp0aW1lX3BvaW50PF9DbG9jaywgX0R1cmF0aW9uMj4+CisgICAgeworICAgICAgdHlwZWRlZiBjaHJvbm86OnRpbWVfcG9pbnQ8X0Nsb2NrLCAKKyAgICAgICAgdHlwZW5hbWUgY29tbW9uX3R5cGU8X0R1cmF0aW9uMSwgX0R1cmF0aW9uMj46OnR5cGU+IHR5cGU7CisgICAgfTsKKworICBuYW1lc3BhY2UgY2hyb25vIAorICB7CisgICAgLy8gUHJpbWFyeSB0ZW1wbGF0ZSBmb3IgZHVyYXRpb25fY2FzdCBpbXBsLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Ub0R1cmF0aW9uLCB0eXBlbmFtZSBfQ0YsIHR5cGVuYW1lIF9DUiwKKyAgICAgICAgICAgICBib29sIF9OdW1Jc09uZSA9IGZhbHNlLCBib29sIF9EZW5Jc09uZSA9IGZhbHNlPgorICAgICAgc3RydWN0IF9fZHVyYXRpb25fY2FzdF9pbXBsCisgICAgICB7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAsIHR5cGVuYW1lIF9QZXJpb2Q+CisgICAgICAgICAgc3RhdGljIF9Ub0R1cmF0aW9uIF9fY2FzdChjb25zdCBkdXJhdGlvbjxfUmVwLCBfUGVyaW9kPiYgX19kKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfVG9EdXJhdGlvbihzdGF0aWNfY2FzdDwKKyAgICAgICAgICAgICAgdHlwZW5hbWUgX1RvRHVyYXRpb246OnJlcD4oc3RhdGljX2Nhc3Q8X0NSPihfX2QuY291bnQoKSkKKyAgICAgICAgICAgICAgKiBzdGF0aWNfY2FzdDxfQ1I+KF9DRjo6bnVtKQorICAgICAgICAgICAgICAvIHN0YXRpY19jYXN0PF9DUj4oX0NGOjpkZW4pKSk7CisgICAgICAgICAgfQorICAgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Ub0R1cmF0aW9uLCB0eXBlbmFtZSBfQ0YsIHR5cGVuYW1lIF9DUj4KKyAgICAgIHN0cnVjdCBfX2R1cmF0aW9uX2Nhc3RfaW1wbDxfVG9EdXJhdGlvbiwgX0NGLCBfQ1IsIHRydWUsIHRydWU+CisgICAgICB7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAsIHR5cGVuYW1lIF9QZXJpb2Q+CisgICAgICAgICAgc3RhdGljIF9Ub0R1cmF0aW9uIF9fY2FzdChjb25zdCBkdXJhdGlvbjxfUmVwLCBfUGVyaW9kPiYgX19kKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfVG9EdXJhdGlvbigKKyAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dHlwZW5hbWUgX1RvRHVyYXRpb246OnJlcD4oX19kLmNvdW50KCkpKTsKKyAgICAgICAgICB9CisgICAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RvRHVyYXRpb24sIHR5cGVuYW1lIF9DRiwgdHlwZW5hbWUgX0NSPgorICAgICAgc3RydWN0IF9fZHVyYXRpb25fY2FzdF9pbXBsPF9Ub0R1cmF0aW9uLCBfQ0YsIF9DUiwgdHJ1ZSwgZmFsc2U+CisgICAgICB7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAsIHR5cGVuYW1lIF9QZXJpb2Q+CisgICAgICAgICAgc3RhdGljIF9Ub0R1cmF0aW9uIF9fY2FzdChjb25zdCBkdXJhdGlvbjxfUmVwLCBfUGVyaW9kPiYgX19kKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfVG9EdXJhdGlvbihzdGF0aWNfY2FzdDx0eXBlbmFtZSBfVG9EdXJhdGlvbjo6cmVwPigKKyAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8X0NSPihfX2QuY291bnQoKSkgLyBzdGF0aWNfY2FzdDxfQ1I+KF9DRjo6ZGVuKSkpOyAKKyAgICAgICAgICB9CisgICAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RvRHVyYXRpb24sIHR5cGVuYW1lIF9DRiwgdHlwZW5hbWUgX0NSPgorICAgICAgc3RydWN0IF9fZHVyYXRpb25fY2FzdF9pbXBsPF9Ub0R1cmF0aW9uLCBfQ0YsIF9DUiwgZmFsc2UsIHRydWU+CisgICAgICB7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAsIHR5cGVuYW1lIF9QZXJpb2Q+CisgICAgICAgICAgc3RhdGljIF9Ub0R1cmF0aW9uIF9fY2FzdChjb25zdCBkdXJhdGlvbjxfUmVwLCBfUGVyaW9kPiYgX19kKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfVG9EdXJhdGlvbihzdGF0aWNfY2FzdDx0eXBlbmFtZSBfVG9EdXJhdGlvbjo6cmVwPigKKyAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8X0NSPihfX2QuY291bnQoKSkgKiBzdGF0aWNfY2FzdDxfQ1I+KF9DRjo6bnVtKSkpOworICAgICAgICAgIH0KKyAgICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBzdHJ1Y3QgX19pc19kdXJhdGlvbgorICAgICAgOiBzdGQ6OmZhbHNlX3R5cGUKKyAgICAgIHsgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAsIHR5cGVuYW1lIF9QZXJpb2Q+CisgICAgICBzdHJ1Y3QgX19pc19kdXJhdGlvbjxkdXJhdGlvbjxfUmVwLCBfUGVyaW9kPj4KKyAgICAgIDogc3RkOjp0cnVlX3R5cGUKKyAgICAgIHsgfTsKKworICAgIC8vLyBkdXJhdGlvbl9jYXN0CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RvRHVyYXRpb24sIHR5cGVuYW1lIF9SZXAsIHR5cGVuYW1lIF9QZXJpb2Q+CisgICAgICBpbmxpbmUgdHlwZW5hbWUgZW5hYmxlX2lmPF9faXNfZHVyYXRpb248X1RvRHVyYXRpb24+Ojp2YWx1ZSwKKwkJCQlfVG9EdXJhdGlvbj46OnR5cGUKKyAgICAgIGR1cmF0aW9uX2Nhc3QoY29uc3QgZHVyYXRpb248X1JlcCwgX1BlcmlvZD4mIF9fZCkKKyAgICAgIHsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZQorICAgICAgICAgIHJhdGlvX2RpdmlkZTxfUGVyaW9kLCB0eXBlbmFtZSBfVG9EdXJhdGlvbjo6cGVyaW9kPjo6dHlwZSBfX2NmOworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lCisgICAgICAgICAgY29tbW9uX3R5cGU8dHlwZW5hbWUgX1RvRHVyYXRpb246OnJlcCwgX1JlcCwgaW50bWF4X3Q+Ojp0eXBlIF9fY3I7CisKKyAgICAgICAgcmV0dXJuIF9fZHVyYXRpb25fY2FzdF9pbXBsPF9Ub0R1cmF0aW9uLCBfX2NmLCBfX2NyLAorICAgICAgICAgIF9fY2Y6Om51bSA9PSAxLCBfX2NmOjpkZW4gPT0gMT46Ol9fY2FzdChfX2QpOworICAgICAgfQorCisgICAgLy8vIHRyZWF0X2FzX2Zsb2F0aW5nX3BvaW50CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcD4KKyAgICAgIHN0cnVjdCB0cmVhdF9hc19mbG9hdGluZ19wb2ludAorICAgICAgOiBpc19mbG9hdGluZ19wb2ludDxfUmVwPgorICAgICAgeyB9OworCisgICAgLy8vIGR1cmF0aW9uX3ZhbHVlcworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXA+CisgICAgICBzdHJ1Y3QgZHVyYXRpb25fdmFsdWVzCisgICAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBfUmVwCisgICAgICAgIHplcm8oKQorICAgICAgICB7IHJldHVybiBfUmVwKDApOyB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgY29uc3QgX1JlcAorICAgICAgICBtYXgoKQorICAgICAgICB7IHJldHVybiBudW1lcmljX2xpbWl0czxfUmVwPjo6bWF4KCk7IH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBjb25zdCBfUmVwCisgICAgICAgIG1pbigpCisgICAgICAgIHsgcmV0dXJuIG51bWVyaWNfbGltaXRzPF9SZXA+OjptaW4oKTsgfQorICAgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgICBzdHJ1Y3QgX19pc19yYXRpbworICAgICAgOiBzdGQ6OmZhbHNlX3R5cGUKKyAgICAgIHsgfTsKKworICAgIHRlbXBsYXRlPGludG1heF90IF9OdW0sIGludG1heF90IF9EZW4+CisgICAgICBzdHJ1Y3QgX19pc19yYXRpbzxyYXRpbzxfTnVtLCBfRGVuPj4KKyAgICAgIDogc3RkOjp0cnVlX3R5cGUKKyAgICAgIHsgfTsKKworICAgIC8vLyBkdXJhdGlvbgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAsIHR5cGVuYW1lIF9QZXJpb2Q+CisgICAgICBzdHJ1Y3QgZHVyYXRpb24KKyAgICAgIHsKKwlzdGF0aWNfYXNzZXJ0KCFfX2lzX2R1cmF0aW9uPF9SZXA+Ojp2YWx1ZSwgInJlcCBjYW5ub3QgYmUgYSBkdXJhdGlvbiIpOworCXN0YXRpY19hc3NlcnQoX19pc19yYXRpbzxfUGVyaW9kPjo6dmFsdWUsIAorCQkgICAgICAicGVyaW9kIG11c3QgYmUgYSBzcGVjaWFsaXphdGlvbiBvZiByYXRpbyIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KF9QZXJpb2Q6Om51bSA+IDAsICJwZXJpb2QgbXVzdCBiZSBwb3NpdGl2ZSIpOworICAgICAgICAKKyAgICAgICAgdHlwZWRlZiBfUmVwICAgIHJlcDsKKyAgICAgICAgdHlwZWRlZiBfUGVyaW9kIHBlcmlvZDsKKyAgICAgICAgCisgICAgICAgIC8vIDIwLjguMy4xIGNvbnN0cnVjdGlvbiAvIGNvcHkgLyBkZXN0cm95CisJZHVyYXRpb24oKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcDIsIHR5cGVuYW1lID0gdHlwZW5hbWUKKwkgICAgICAgZW5hYmxlX2lmPGlzX2NvbnZlcnRpYmxlPF9SZXAyLCByZXA+Ojp2YWx1ZQorCQkJICYmICh0cmVhdF9hc19mbG9hdGluZ19wb2ludDxyZXA+Ojp2YWx1ZQorCQkJICAgICB8fCAhdHJlYXRfYXNfZmxvYXRpbmdfcG9pbnQ8X1JlcDI+Ojp2YWx1ZSk+Ojp0eXBlPgorICAgICAgICAgIGV4cGxpY2l0IGR1cmF0aW9uKGNvbnN0IF9SZXAyJiBfX3JlcCkKKyAgICAgICAgICA6IF9fcihzdGF0aWNfY2FzdDxyZXA+KF9fcmVwKSkgeyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcDIsIHR5cGVuYW1lIF9QZXJpb2QyLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJICAgICAgIGVuYWJsZV9pZjx0cmVhdF9hc19mbG9hdGluZ19wb2ludDxyZXA+Ojp2YWx1ZSAKKwkJCSB8fCAocmF0aW9fZGl2aWRlPF9QZXJpb2QyLCBwZXJpb2Q+Ojp0eXBlOjpkZW4gPT0gMQorCQkJICAgICAmJiAhdHJlYXRfYXNfZmxvYXRpbmdfcG9pbnQ8X1JlcDI+Ojp2YWx1ZSk+Ojp0eXBlPgorICAgICAgICAgIGR1cmF0aW9uKGNvbnN0IGR1cmF0aW9uPF9SZXAyLCBfUGVyaW9kMj4mIF9fZCkKKyAgICAgICAgICA6IF9fcihkdXJhdGlvbl9jYXN0PGR1cmF0aW9uPihfX2QpLmNvdW50KCkpIHsgfQorCisJfmR1cmF0aW9uKCkgPSBkZWZhdWx0OworCWR1cmF0aW9uKGNvbnN0IGR1cmF0aW9uJikgPSBkZWZhdWx0OworCWR1cmF0aW9uJiBvcGVyYXRvcj0oY29uc3QgZHVyYXRpb24mKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgLy8gMjAuOC4zLjIgb2JzZXJ2ZXIKKyAgICAgICAgcmVwCisgICAgICAgIGNvdW50KCkgY29uc3QKKyAgICAgICAgeyByZXR1cm4gX19yOyB9CisKKyAgICAgICAgLy8gMjAuOC4zLjMgYXJpdGhtZXRpYworICAgICAgICBkdXJhdGlvbgorICAgICAgICBvcGVyYXRvcisoKSBjb25zdCAKKyAgICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgICBkdXJhdGlvbgorICAgICAgICBvcGVyYXRvci0oKSBjb25zdAorICAgICAgICB7IHJldHVybiBkdXJhdGlvbigtX19yKTsgfQorCisgICAgICAgIGR1cmF0aW9uJgorICAgICAgICBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICsrX19yOworICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGR1cmF0aW9uCisgICAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgICB7IHJldHVybiBkdXJhdGlvbihfX3IrKyk7IH0KKworICAgICAgICBkdXJhdGlvbiYKKyAgICAgICAgb3BlcmF0b3ItLSgpCisgICAgICAgIHsKKyAgICAgICAgICAtLV9fcjsKKyAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBkdXJhdGlvbgorICAgICAgICBvcGVyYXRvci0tKGludCkKKyAgICAgICAgeyByZXR1cm4gZHVyYXRpb24oX19yLS0pOyB9CisgICAgICAgIAorICAgICAgICBkdXJhdGlvbiYKKyAgICAgICAgb3BlcmF0b3IrPShjb25zdCBkdXJhdGlvbiYgX19kKQorICAgICAgICB7CisgICAgICAgICAgX19yICs9IF9fZC5jb3VudCgpOworICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGR1cmF0aW9uJgorICAgICAgICBvcGVyYXRvci09KGNvbnN0IGR1cmF0aW9uJiBfX2QpCisgICAgICAgIHsKKyAgICAgICAgICBfX3IgLT0gX19kLmNvdW50KCk7CisgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgZHVyYXRpb24mCisgICAgICAgIG9wZXJhdG9yKj0oY29uc3QgcmVwJiBfX3JocykKKyAgICAgICAgeworICAgICAgICAgIF9fciAqPSBfX3JoczsKKyAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBkdXJhdGlvbiYKKyAgICAgICAgb3BlcmF0b3IvPShjb25zdCByZXAmIF9fcmhzKQorICAgICAgICB7CisgICAgICAgICAgX19yIC89IF9fcmhzOworICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisJLy8gRFIgOTM0LgorCXRlbXBsYXRlPHR5cGVuYW1lIF9SZXAyID0gcmVwPgorCSAgdHlwZW5hbWUgZW5hYmxlX2lmPCF0cmVhdF9hc19mbG9hdGluZ19wb2ludDxfUmVwMj46OnZhbHVlLAorCQkJICAgICBkdXJhdGlvbiY+Ojp0eXBlCisJICBvcGVyYXRvciU9KGNvbnN0IHJlcCYgX19yaHMpCisJICB7CisJICAgIF9fciAlPSBfX3JoczsKKwkgICAgcmV0dXJuICp0aGlzOworCSAgfQorCisJdGVtcGxhdGU8dHlwZW5hbWUgX1JlcDIgPSByZXA+CisJICB0eXBlbmFtZSBlbmFibGVfaWY8IXRyZWF0X2FzX2Zsb2F0aW5nX3BvaW50PF9SZXAyPjo6dmFsdWUsCisJCQkgICAgIGR1cmF0aW9uJj46OnR5cGUKKwkgIG9wZXJhdG9yJT0oY29uc3QgZHVyYXRpb24mIF9fZCkKKwkgIHsKKwkgICAgX19yICU9IF9fZC5jb3VudCgpOworCSAgICByZXR1cm4gKnRoaXM7CisJICB9CisKKyAgICAgICAgLy8gMjAuOC4zLjQgc3BlY2lhbCB2YWx1ZXMKKyAgICAgICAgLy8gVE9ETzogVGhlc2Ugc2hvdWxkIGJlIGNvbnN0ZXhwcnMuCisgICAgICAgIHN0YXRpYyBjb25zdCBkdXJhdGlvbgorICAgICAgICB6ZXJvKCkKKyAgICAgICAgeyByZXR1cm4gZHVyYXRpb24oZHVyYXRpb25fdmFsdWVzPHJlcD46Onplcm8oKSk7IH0KKworICAgICAgICBzdGF0aWMgY29uc3QgZHVyYXRpb24KKyAgICAgICAgbWluKCkKKyAgICAgICAgeyByZXR1cm4gZHVyYXRpb24oZHVyYXRpb25fdmFsdWVzPHJlcD46Om1pbigpKTsgfQorICAgICAgCisgICAgICAgIHN0YXRpYyBjb25zdCBkdXJhdGlvbgorICAgICAgICBtYXgoKQorICAgICAgICB7IHJldHVybiBkdXJhdGlvbihkdXJhdGlvbl92YWx1ZXM8cmVwPjo6bWF4KCkpOyB9CisKKyAgICAgIHByaXZhdGU6CisgICAgICAgIHJlcCBfX3I7CisgICAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcDEsIHR5cGVuYW1lIF9QZXJpb2QxLAorICAgICAgICAgICAgIHR5cGVuYW1lIF9SZXAyLCB0eXBlbmFtZSBfUGVyaW9kMj4KKyAgICAgIGlubGluZSB0eXBlbmFtZSBjb21tb25fdHlwZTxkdXJhdGlvbjxfUmVwMSwgX1BlcmlvZDE+LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+Pjo6dHlwZQorICAgICAgb3BlcmF0b3IrKGNvbnN0IGR1cmF0aW9uPF9SZXAxLCBfUGVyaW9kMT4mIF9fbGhzLCAKKyAgICAgICAgICAgICAgICBjb25zdCBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+JiBfX3JocykKKyAgICAgIHsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjb21tb25fdHlwZTxkdXJhdGlvbjxfUmVwMSwgX1BlcmlvZDE+LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+Pjo6dHlwZSBfX2N0OworICAgICAgICByZXR1cm4gX19jdChfX2xocykgKz0gX19yaHM7CisgICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVwMSwgdHlwZW5hbWUgX1BlcmlvZDEsIAorICAgICAgICAgICAgIHR5cGVuYW1lIF9SZXAyLCB0eXBlbmFtZSBfUGVyaW9kMj4KKyAgICAgIGlubGluZSB0eXBlbmFtZSBjb21tb25fdHlwZTxkdXJhdGlvbjxfUmVwMSwgX1BlcmlvZDE+LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+Pjo6dHlwZQorICAgICAgb3BlcmF0b3ItKGNvbnN0IGR1cmF0aW9uPF9SZXAxLCBfUGVyaW9kMT4mIF9fbGhzLCAKKyAgICAgICAgICAgICAgICBjb25zdCBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+JiBfX3JocykKKyAgICAgIHsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjb21tb25fdHlwZTxkdXJhdGlvbjxfUmVwMSwgX1BlcmlvZDE+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uPF9SZXAyLCBfUGVyaW9kMj4+Ojp0eXBlIF9fY3Q7CisgICAgICAgIHJldHVybiBfX2N0KF9fbGhzKSAtPSBfX3JoczsKKyAgICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAxLCB0eXBlbmFtZSBfUmVwMiwgYm9vbCA9CisJICAgICBpc19jb252ZXJ0aWJsZTxfUmVwMiwKKwkJCSAgICB0eXBlbmFtZSBjb21tb25fdHlwZTxfUmVwMSwgX1JlcDI+Ojp0eXBlPjo6dmFsdWU+CisgICAgICBzdHJ1Y3QgX19jb21tb25fcmVwX3R5cGUgeyB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcDEsIHR5cGVuYW1lIF9SZXAyPgorICAgICAgc3RydWN0IF9fY29tbW9uX3JlcF90eXBlPF9SZXAxLCBfUmVwMiwgdHJ1ZT4KKyAgICAgIHsgdHlwZWRlZiB0eXBlbmFtZSBjb21tb25fdHlwZTxfUmVwMSwgX1JlcDI+Ojp0eXBlIHR5cGU7IH07ICAgICAKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAxLCB0eXBlbmFtZSBfUGVyaW9kLCB0eXBlbmFtZSBfUmVwMj4KKyAgICAgIGlubGluZSBkdXJhdGlvbjx0eXBlbmFtZSBfX2NvbW1vbl9yZXBfdHlwZTxfUmVwMSwgX1JlcDI+Ojp0eXBlLCBfUGVyaW9kPgorICAgICAgb3BlcmF0b3IqKGNvbnN0IGR1cmF0aW9uPF9SZXAxLCBfUGVyaW9kPiYgX19kLCBjb25zdCBfUmVwMiYgX19zKQorICAgICAgeworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGNvbW1vbl90eXBlPF9SZXAxLCBfUmVwMj46OnR5cGUgX19jcjsKKyAgICAgICAgcmV0dXJuIGR1cmF0aW9uPF9fY3IsIF9QZXJpb2Q+KF9fZCkgKj0gX19zOworICAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcDEsIHR5cGVuYW1lIF9QZXJpb2QsIHR5cGVuYW1lIF9SZXAyPgorICAgICAgaW5saW5lIGR1cmF0aW9uPHR5cGVuYW1lIF9fY29tbW9uX3JlcF90eXBlPF9SZXAyLCBfUmVwMT46OnR5cGUsIF9QZXJpb2Q+CisgICAgICBvcGVyYXRvciooY29uc3QgX1JlcDEmIF9fcywgY29uc3QgZHVyYXRpb248X1JlcDIsIF9QZXJpb2Q+JiBfX2QpCisgICAgICB7IHJldHVybiBfX2QgKiBfX3M7IH0KKyAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVwMSwgdHlwZW5hbWUgX1BlcmlvZCwgdHlwZW5hbWUgX1JlcDI+CisgICAgICBpbmxpbmUgZHVyYXRpb248dHlwZW5hbWUgX19jb21tb25fcmVwX3R5cGU8X1JlcDEsIHR5cGVuYW1lCisJZW5hYmxlX2lmPCFfX2lzX2R1cmF0aW9uPF9SZXAyPjo6dmFsdWUsIF9SZXAyPjo6dHlwZT46OnR5cGUsIF9QZXJpb2Q+CisgICAgICBvcGVyYXRvci8oY29uc3QgZHVyYXRpb248X1JlcDEsIF9QZXJpb2Q+JiBfX2QsIGNvbnN0IF9SZXAyJiBfX3MpCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBjb21tb25fdHlwZTxfUmVwMSwgX1JlcDI+Ojp0eXBlIF9fY3I7CisJcmV0dXJuIGR1cmF0aW9uPF9fY3IsIF9QZXJpb2Q+KF9fZCkgLz0gX19zOworICAgICAgfQorCisgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAxLCB0eXBlbmFtZSBfUGVyaW9kMSwKKwkgICAgICB0eXBlbmFtZSBfUmVwMiwgdHlwZW5hbWUgX1BlcmlvZDI+CisgICAgICBpbmxpbmUgdHlwZW5hbWUgY29tbW9uX3R5cGU8X1JlcDEsIF9SZXAyPjo6dHlwZQorICAgICAgb3BlcmF0b3IvKGNvbnN0IGR1cmF0aW9uPF9SZXAxLCBfUGVyaW9kMT4mIF9fbGhzLCAKKyAgICAgICAgICAgICAgICBjb25zdCBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+JiBfX3JocykKKyAgICAgIHsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjb21tb25fdHlwZTxkdXJhdGlvbjxfUmVwMSwgX1BlcmlvZDE+LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+Pjo6dHlwZSBfX2N0OworICAgICAgICByZXR1cm4gX19jdChfX2xocykuY291bnQoKSAvIF9fY3QoX19yaHMpLmNvdW50KCk7CisgICAgICB9CisKKyAgICAvLyBEUiA5MzQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcDEsIHR5cGVuYW1lIF9QZXJpb2QsIHR5cGVuYW1lIF9SZXAyPgorICAgICAgaW5saW5lIGR1cmF0aW9uPHR5cGVuYW1lIF9fY29tbW9uX3JlcF90eXBlPF9SZXAxLCB0eXBlbmFtZQorCWVuYWJsZV9pZjwhX19pc19kdXJhdGlvbjxfUmVwMj46OnZhbHVlLCBfUmVwMj46OnR5cGU+Ojp0eXBlLCBfUGVyaW9kPgorICAgICAgb3BlcmF0b3IlKGNvbnN0IGR1cmF0aW9uPF9SZXAxLCBfUGVyaW9kPiYgX19kLCBjb25zdCBfUmVwMiYgX19zKQorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgY29tbW9uX3R5cGU8X1JlcDEsIF9SZXAyPjo6dHlwZSBfX2NyOworCXJldHVybiBkdXJhdGlvbjxfX2NyLCBfUGVyaW9kPihfX2QpICU9IF9fczsKKyAgICAgIH0KKworICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVwMSwgdHlwZW5hbWUgX1BlcmlvZDEsCisJICAgICAgdHlwZW5hbWUgX1JlcDIsIHR5cGVuYW1lIF9QZXJpb2QyPgorICAgICAgaW5saW5lIHR5cGVuYW1lIGNvbW1vbl90eXBlPGR1cmF0aW9uPF9SZXAxLCBfUGVyaW9kMT4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uPF9SZXAyLCBfUGVyaW9kMj4+Ojp0eXBlCisgICAgICBvcGVyYXRvciUoY29uc3QgZHVyYXRpb248X1JlcDEsIF9QZXJpb2QxPiYgX19saHMsIAorICAgICAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uPF9SZXAyLCBfUGVyaW9kMj4mIF9fcmhzKQorICAgICAgeworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGNvbW1vbl90eXBlPGR1cmF0aW9uPF9SZXAxLCBfUGVyaW9kMT4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uPF9SZXAyLCBfUGVyaW9kMj4+Ojp0eXBlIF9fY3Q7CisgICAgICAgIHJldHVybiBfX2N0KF9fbGhzKSAlPSBfX3JoczsKKyAgICAgIH0KKworICAgIC8vIGNvbXBhcmlzb25zCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcDEsIHR5cGVuYW1lIF9QZXJpb2QxLAorICAgICAgICAgICAgIHR5cGVuYW1lIF9SZXAyLCB0eXBlbmFtZSBfUGVyaW9kMj4KKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IGR1cmF0aW9uPF9SZXAxLCBfUGVyaW9kMT4mIF9fbGhzLCAKKyAgICAgICAgICAgICAgICAgY29uc3QgZHVyYXRpb248X1JlcDIsIF9QZXJpb2QyPiYgX19yaHMpCisgICAgICB7CisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY29tbW9uX3R5cGU8ZHVyYXRpb248X1JlcDEsIF9QZXJpb2QxPiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb248X1JlcDIsIF9QZXJpb2QyPj46OnR5cGUgX19jdDsKKyAgICAgICAgcmV0dXJuIF9fY3QoX19saHMpLmNvdW50KCkgPT0gX19jdChfX3JocykuY291bnQoKTsKKyAgICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAxLCB0eXBlbmFtZSBfUGVyaW9kMSwKKyAgICAgICAgICAgICB0eXBlbmFtZSBfUmVwMiwgdHlwZW5hbWUgX1BlcmlvZDI+CisgICAgICBpbmxpbmUgYm9vbAorICAgICAgb3BlcmF0b3I8KGNvbnN0IGR1cmF0aW9uPF9SZXAxLCBfUGVyaW9kMT4mIF9fbGhzLCAKKyAgICAgICAgICAgICAgICBjb25zdCBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+JiBfX3JocykKKyAgICAgIHsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjb21tb25fdHlwZTxkdXJhdGlvbjxfUmVwMSwgX1BlcmlvZDE+LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+Pjo6dHlwZSBfX2N0OworICAgICAgICByZXR1cm4gX19jdChfX2xocykuY291bnQoKSA8IF9fY3QoX19yaHMpLmNvdW50KCk7CisgICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVwMSwgdHlwZW5hbWUgX1BlcmlvZDEsCisgICAgICAgICAgICAgdHlwZW5hbWUgX1JlcDIsIHR5cGVuYW1lIF9QZXJpb2QyPgorICAgICAgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yIT0oY29uc3QgZHVyYXRpb248X1JlcDEsIF9QZXJpb2QxPiYgX19saHMsIAorICAgICAgICAgICAgICAgICBjb25zdCBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+JiBfX3JocykKKyAgICAgIHsgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVwMSwgdHlwZW5hbWUgX1BlcmlvZDEsCisgICAgICAgICAgICAgdHlwZW5hbWUgX1JlcDIsIHR5cGVuYW1lIF9QZXJpb2QyPgorICAgICAgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yPD0oY29uc3QgZHVyYXRpb248X1JlcDEsIF9QZXJpb2QxPiYgX19saHMsIAorICAgICAgICAgICAgICAgICBjb25zdCBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+JiBfX3JocykKKyAgICAgIHsgcmV0dXJuICEoX19yaHMgPCBfX2xocyk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAxLCB0eXBlbmFtZSBfUGVyaW9kMSwKKyAgICAgICAgICAgICB0eXBlbmFtZSBfUmVwMiwgdHlwZW5hbWUgX1BlcmlvZDI+CisgICAgICBpbmxpbmUgYm9vbCAKKyAgICAgIG9wZXJhdG9yPihjb25zdCBkdXJhdGlvbjxfUmVwMSwgX1BlcmlvZDE+JiBfX2xocywgCisgICAgICAgICAgICAgICAgY29uc3QgZHVyYXRpb248X1JlcDIsIF9QZXJpb2QyPiYgX19yaHMpCisgICAgICB7IHJldHVybiBfX3JocyA8IF9fbGhzOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVwMSwgdHlwZW5hbWUgX1BlcmlvZDEsIAorICAgICAgICAgICAgIHR5cGVuYW1lIF9SZXAyLCB0eXBlbmFtZSBfUGVyaW9kMj4KKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcj49KGNvbnN0IGR1cmF0aW9uPF9SZXAxLCBfUGVyaW9kMT4mIF9fbGhzLCAKKyAgICAgICAgICAgICAgICAgY29uc3QgZHVyYXRpb248X1JlcDIsIF9QZXJpb2QyPiYgX19yaHMpCisgICAgICB7IHJldHVybiAhKF9fbGhzIDwgX19yaHMpOyB9CisKKyAgICAvLy8gbmFub3NlY29uZHMKKyAgICB0eXBlZGVmIGR1cmF0aW9uPGludDY0X3QsICAgICAgICBuYW5vPiBuYW5vc2Vjb25kczsKKworICAgIC8vLyBtaWNyb3NlY29uZHMKKyAgICB0eXBlZGVmIGR1cmF0aW9uPGludDY0X3QsICAgICAgIG1pY3JvPiBtaWNyb3NlY29uZHM7CisKKyAgICAvLy8gbWlsbGlzZWNvbmRzCisgICAgdHlwZWRlZiBkdXJhdGlvbjxpbnQ2NF90LCAgICAgICBtaWxsaT4gbWlsbGlzZWNvbmRzOworICAgIAorICAgIC8vLyBzZWNvbmRzCisgICAgdHlwZWRlZiBkdXJhdGlvbjxpbnQ2NF90ICAgICAgICAgICAgID4gc2Vjb25kczsKKworICAgIC8vLyBtaW51dGVzCisgICAgdHlwZWRlZiBkdXJhdGlvbjxpbnQsICAgICByYXRpbzwgIDYwPj4gbWludXRlczsKKworICAgIC8vLyBob3VycworICAgIHR5cGVkZWYgZHVyYXRpb248aW50LCAgICAgcmF0aW88MzYwMD4+IGhvdXJzOworCisgICAgLy8vIHRpbWVfcG9pbnQKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2xvY2ssIHR5cGVuYW1lIF9EdXJhdGlvbj4KKyAgICAgIHN0cnVjdCB0aW1lX3BvaW50CisgICAgICB7CisJdHlwZWRlZiBfQ2xvY2sgICAgICAgICAgICAgICAgICAgIGNsb2NrOworCXR5cGVkZWYgX0R1cmF0aW9uICAgICAgICAgICAgICAgICBkdXJhdGlvbjsKKwl0eXBlZGVmIHR5cGVuYW1lIGR1cmF0aW9uOjpyZXAgICAgcmVwOworCXR5cGVkZWYgdHlwZW5hbWUgZHVyYXRpb246OnBlcmlvZCBwZXJpb2Q7CisKKwl0aW1lX3BvaW50KCkgOiBfX2QoZHVyYXRpb246Onplcm8oKSkKKwl7IH0KKworCWV4cGxpY2l0IHRpbWVfcG9pbnQoY29uc3QgZHVyYXRpb24mIF9fZHVyKSAKKwk6IF9fZChkdXJhdGlvbjo6emVybygpICsgX19kdXIpCisJeyB9CisKKwkvLyBjb252ZXJzaW9ucworCXRlbXBsYXRlPHR5cGVuYW1lIF9EdXJhdGlvbjI+CisJICB0aW1lX3BvaW50KGNvbnN0IHRpbWVfcG9pbnQ8Y2xvY2ssIF9EdXJhdGlvbjI+JiBfX3QpCisJICA6IF9fZChfX3QudGltZV9zaW5jZV9lcG9jaCgpKQorCSAgeyB9CisKKwkvLyBvYnNlcnZlcgorCWR1cmF0aW9uCisJdGltZV9zaW5jZV9lcG9jaCgpIGNvbnN0CisJeyByZXR1cm4gX19kOyB9CisJCisJLy8gYXJpdGhtZXRpYworCXRpbWVfcG9pbnQmCisJb3BlcmF0b3IrPShjb25zdCBkdXJhdGlvbiYgX19kdXIpCisJeworCSAgX19kICs9IF9fZHVyOworCSAgcmV0dXJuICp0aGlzOworCX0KKwkKKwl0aW1lX3BvaW50JgorCW9wZXJhdG9yLT0oY29uc3QgZHVyYXRpb24mIF9fZHVyKQorCXsKKwkgIF9fZCAtPSBfX2R1cjsKKwkgIHJldHVybiAqdGhpczsKKwl9CisJCisJLy8gc3BlY2lhbCB2YWx1ZXMKKwkvLyBUT0RPOiBUaGVzZSBzaG91bGQgYmUgY29uc3RleHBycy4KKwlzdGF0aWMgY29uc3QgdGltZV9wb2ludAorCW1pbigpCisJeyByZXR1cm4gdGltZV9wb2ludChkdXJhdGlvbjo6bWluKCkpOyB9CisJCisJc3RhdGljIGNvbnN0IHRpbWVfcG9pbnQKKwltYXgoKQorCXsgcmV0dXJuIHRpbWVfcG9pbnQoZHVyYXRpb246Om1heCgpKTsgfQorCQorICAgICAgcHJpdmF0ZToKKwlkdXJhdGlvbiBfX2Q7CisgICAgICB9OworICAKKyAgICAvLy8gdGltZV9wb2ludF9jYXN0CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RvRHVyYXRpb24sIHR5cGVuYW1lIF9DbG9jaywgdHlwZW5hbWUgX0R1cmF0aW9uPgorICAgICAgaW5saW5lIHR5cGVuYW1lIGVuYWJsZV9pZjxfX2lzX2R1cmF0aW9uPF9Ub0R1cmF0aW9uPjo6dmFsdWUsCisJCQkJdGltZV9wb2ludDxfQ2xvY2ssIF9Ub0R1cmF0aW9uPj46OnR5cGUKKyAgICAgIHRpbWVfcG9pbnRfY2FzdChjb25zdCB0aW1lX3BvaW50PF9DbG9jaywgX0R1cmF0aW9uPiYgX190KQorICAgICAgeworICAgICAgICByZXR1cm4gdGltZV9wb2ludDxfQ2xvY2ssIF9Ub0R1cmF0aW9uPigKKyAgICAgICAgICBkdXJhdGlvbl9jYXN0PF9Ub0R1cmF0aW9uPihfX3QudGltZV9zaW5jZV9lcG9jaCgpKSk7ICAKKyAgICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DbG9jaywgdHlwZW5hbWUgX0R1cmF0aW9uMSwKKyAgICAgICAgICAgICB0eXBlbmFtZSBfUmVwMiwgdHlwZW5hbWUgX1BlcmlvZDI+CisgICAgICBpbmxpbmUgdGltZV9wb2ludDxfQ2xvY2ssIAorICAgICAgICB0eXBlbmFtZSBjb21tb25fdHlwZTxfRHVyYXRpb24xLCBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+Pjo6dHlwZT4KKyAgICAgIG9wZXJhdG9yKyhjb25zdCB0aW1lX3BvaW50PF9DbG9jaywgX0R1cmF0aW9uMT4mIF9fbGhzLCAKKyAgICAgICAgICAgICAgICBjb25zdCBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+JiBfX3JocykKKyAgICAgIHsKKyAgICAgICAgdHlwZWRlZiB0aW1lX3BvaW50PF9DbG9jaywgCisgICAgICAgICAgdHlwZW5hbWUgY29tbW9uX3R5cGU8X0R1cmF0aW9uMSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb248X1JlcDIsIF9QZXJpb2QyPj46OnR5cGU+IF9fY3Q7CisgICAgICAgIHJldHVybiBfX2N0KF9fbGhzKSArPSBfX3JoczsKKyAgICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAxLCB0eXBlbmFtZSBfUGVyaW9kMSwKKyAgICAgICAgICAgICB0eXBlbmFtZSBfQ2xvY2ssIHR5cGVuYW1lIF9EdXJhdGlvbjI+CisgICAgICBpbmxpbmUgdGltZV9wb2ludDxfQ2xvY2ssIAorICAgICAgICB0eXBlbmFtZSBjb21tb25fdHlwZTxkdXJhdGlvbjxfUmVwMSwgX1BlcmlvZDE+LCBfRHVyYXRpb24yPjo6dHlwZT4KKyAgICAgIG9wZXJhdG9yKyhjb25zdCBkdXJhdGlvbjxfUmVwMSwgX1BlcmlvZDE+JiBfX2xocywgCisgICAgICAgICAgICAgICAgY29uc3QgdGltZV9wb2ludDxfQ2xvY2ssIF9EdXJhdGlvbjI+JiBfX3JocykKKyAgICAgIHsgcmV0dXJuIF9fcmhzICsgX19saHM7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DbG9jaywgdHlwZW5hbWUgX0R1cmF0aW9uMSwKKyAgICAgICAgICAgICB0eXBlbmFtZSBfUmVwMiwgdHlwZW5hbWUgX1BlcmlvZDI+CisgICAgICBpbmxpbmUgdGltZV9wb2ludDxfQ2xvY2ssIAorICAgICAgICB0eXBlbmFtZSBjb21tb25fdHlwZTxfRHVyYXRpb24xLCBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+Pjo6dHlwZT4KKyAgICAgIG9wZXJhdG9yLShjb25zdCB0aW1lX3BvaW50PF9DbG9jaywgX0R1cmF0aW9uMT4mIF9fbGhzLCAKKyAgICAgICAgICAgICAgICBjb25zdCBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+JiBfX3JocykKKyAgICAgIHsgcmV0dXJuIF9fbGhzICsgKC1fX3Jocyk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DbG9jaywgdHlwZW5hbWUgX0R1cmF0aW9uMSwgdHlwZW5hbWUgX0R1cmF0aW9uMj4KKyAgICAgIGlubGluZSB0eXBlbmFtZSBjb21tb25fdHlwZTxfRHVyYXRpb24xLCBfRHVyYXRpb24yPjo6dHlwZQorICAgICAgb3BlcmF0b3ItKGNvbnN0IHRpbWVfcG9pbnQ8X0Nsb2NrLCBfRHVyYXRpb24xPiYgX19saHMsIAorICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVfcG9pbnQ8X0Nsb2NrLCBfRHVyYXRpb24yPiYgX19yaHMpCisgICAgICB7IHJldHVybiBfX2xocy50aW1lX3NpbmNlX2Vwb2NoKCkgLSBfX3Jocy50aW1lX3NpbmNlX2Vwb2NoKCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DbG9jaywgdHlwZW5hbWUgX0R1cmF0aW9uMSwgdHlwZW5hbWUgX0R1cmF0aW9uMj4KKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IHRpbWVfcG9pbnQ8X0Nsb2NrLCBfRHVyYXRpb24xPiYgX19saHMsCisgICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVfcG9pbnQ8X0Nsb2NrLCBfRHVyYXRpb24yPiYgX19yaHMpCisgICAgICB7IHJldHVybiBfX2xocy50aW1lX3NpbmNlX2Vwb2NoKCkgPT0gX19yaHMudGltZV9zaW5jZV9lcG9jaCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2xvY2ssIHR5cGVuYW1lIF9EdXJhdGlvbjEsIHR5cGVuYW1lIF9EdXJhdGlvbjI+CisgICAgICBpbmxpbmUgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCB0aW1lX3BvaW50PF9DbG9jaywgX0R1cmF0aW9uMT4mIF9fbGhzLAorICAgICAgICAgICAgICAgICBjb25zdCB0aW1lX3BvaW50PF9DbG9jaywgX0R1cmF0aW9uMj4mIF9fcmhzKQorICAgICAgeyByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DbG9jaywgdHlwZW5hbWUgX0R1cmF0aW9uMSwgdHlwZW5hbWUgX0R1cmF0aW9uMj4KKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcjwoY29uc3QgdGltZV9wb2ludDxfQ2xvY2ssIF9EdXJhdGlvbjE+JiBfX2xocywKKyAgICAgICAgICAgICAgICBjb25zdCB0aW1lX3BvaW50PF9DbG9jaywgX0R1cmF0aW9uMj4mIF9fcmhzKQorICAgICAgeyByZXR1cm4gIF9fbGhzLnRpbWVfc2luY2VfZXBvY2goKSA8IF9fcmhzLnRpbWVfc2luY2VfZXBvY2goKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Nsb2NrLCB0eXBlbmFtZSBfRHVyYXRpb24xLCB0eXBlbmFtZSBfRHVyYXRpb24yPgorICAgICAgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yPD0oY29uc3QgdGltZV9wb2ludDxfQ2xvY2ssIF9EdXJhdGlvbjE+JiBfX2xocywKKyAgICAgICAgICAgICAgICAgY29uc3QgdGltZV9wb2ludDxfQ2xvY2ssIF9EdXJhdGlvbjI+JiBfX3JocykKKyAgICAgIHsgcmV0dXJuICEoX19yaHMgPCBfX2xocyk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DbG9jaywgdHlwZW5hbWUgX0R1cmF0aW9uMSwgdHlwZW5hbWUgX0R1cmF0aW9uMj4KKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcj4oY29uc3QgdGltZV9wb2ludDxfQ2xvY2ssIF9EdXJhdGlvbjE+JiBfX2xocywKKyAgICAgICAgICAgICAgICBjb25zdCB0aW1lX3BvaW50PF9DbG9jaywgX0R1cmF0aW9uMj4mIF9fcmhzKQorICAgICAgeyByZXR1cm4gX19yaHMgPCBfX2xoczsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Nsb2NrLCB0eXBlbmFtZSBfRHVyYXRpb24xLCB0eXBlbmFtZSBfRHVyYXRpb24yPgorICAgICAgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yPj0oY29uc3QgdGltZV9wb2ludDxfQ2xvY2ssIF9EdXJhdGlvbjE+JiBfX2xocywKKyAgICAgICAgICAgICAgICAgY29uc3QgdGltZV9wb2ludDxfQ2xvY2ssIF9EdXJhdGlvbjI+JiBfX3JocykKKyAgICAgIHsgcmV0dXJuICEoX19saHMgPCBfX3Jocyk7IH0KKworICAgIC8vLyBzeXN0ZW1fY2xvY2sKKyAgICBzdHJ1Y3Qgc3lzdGVtX2Nsb2NrCisgICAgeworI2lmZGVmIF9HTElCQ1hYX1VTRV9DTE9DS19SRUFMVElNRQorICAgICAgdHlwZWRlZiBjaHJvbm86Om5hbm9zZWNvbmRzICAgICBkdXJhdGlvbjsgICAgICAKKyNlbGlmIGRlZmluZWQoX0dMSUJDWFhfVVNFX0dFVFRJTUVPRkRBWSkKKyAgICAgIHR5cGVkZWYgY2hyb25vOjptaWNyb3NlY29uZHMgICAgZHVyYXRpb247ICAgICAgCisjZWxzZQorICAgICAgdHlwZWRlZiBjaHJvbm86OnNlY29uZHMgICAgICAgICBkdXJhdGlvbjsgICAgICAKKyNlbmRpZgorCisgICAgICB0eXBlZGVmIGR1cmF0aW9uOjpyZXAgICAgcmVwOworICAgICAgdHlwZWRlZiBkdXJhdGlvbjo6cGVyaW9kIHBlcmlvZDsKKyAgICAgIHR5cGVkZWYgY2hyb25vOjp0aW1lX3BvaW50PHN5c3RlbV9jbG9jaywgZHVyYXRpb24+IHRpbWVfcG9pbnQ7CisKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vbm90b25pYyA9IGZhbHNlOworCisgICAgICBzdGF0aWMgdGltZV9wb2ludAorICAgICAgbm93KCkgdGhyb3cgKCk7CisKKyAgICAgIC8vIE1hcCB0byBDIEFQSQorICAgICAgc3RhdGljIHN0ZDo6dGltZV90CisgICAgICB0b190aW1lX3QoY29uc3QgdGltZV9wb2ludCYgX190KQorICAgICAgeworICAgICAgICByZXR1cm4gc3RkOjp0aW1lX3QoCisgICAgICAgICAgZHVyYXRpb25fY2FzdDxjaHJvbm86OnNlY29uZHM+KF9fdC50aW1lX3NpbmNlX2Vwb2NoKCkpLmNvdW50KCkpOworICAgICAgfQorCisgICAgICBzdGF0aWMgdGltZV9wb2ludAorICAgICAgZnJvbV90aW1lX3Qoc3RkOjp0aW1lX3QgX190KQorICAgICAgeyAKKyAgICAgICAgcmV0dXJuIHRpbWVfcG9pbnRfY2FzdDxzeXN0ZW1fY2xvY2s6OmR1cmF0aW9uPigKKyAgICAgICAgICBjaHJvbm86OnRpbWVfcG9pbnQ8c3lzdGVtX2Nsb2NrLCBjaHJvbm86OnNlY29uZHM+KAorICAgICAgICAgICAgY2hyb25vOjpzZWNvbmRzKF9fdCkpKTsKKyAgICAgIH0KKworICAgICAgLy8gVE9ETzogcmVxdWlyZXMgY29uc3RleHByCisgICAgICAvKiAgCisgICAgICBzdGF0aWNfYXNzZXJ0KAorICAgICAgICBzeXN0ZW1fY2xvY2s6OmR1cmF0aW9uOjptaW4oKSA8IAorICAgICAgICBzeXN0ZW1fY2xvY2s6OmR1cmF0aW9uOjp6ZXJvKCksIAorICAgICAgICAiYSBjbG9jaydzIG1pbmltdW0gZHVyYXRpb24gY2Fubm90IGJlIGxlc3MgdGhhbiBpdHMgZXBvY2giKTsKKyAgICAgICovCisgICAgfTsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9DTE9DS19NT05PVE9OSUMKKyAgICAvLy8gbW9ub3RvbmljX2Nsb2NrCisgICAgc3RydWN0IG1vbm90b25pY19jbG9jaworICAgIHsKKyAgICAgIHR5cGVkZWYgY2hyb25vOjpuYW5vc2Vjb25kcyBkdXJhdGlvbjsKKyAgICAgIHR5cGVkZWYgZHVyYXRpb246OnJlcCAgICAgICByZXA7CisgICAgICB0eXBlZGVmIGR1cmF0aW9uOjpwZXJpb2QgICAgcGVyaW9kOworICAgICAgdHlwZWRlZiBjaHJvbm86OnRpbWVfcG9pbnQ8bW9ub3RvbmljX2Nsb2NrLCBkdXJhdGlvbj4gdGltZV9wb2ludDsKKworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9ub3RvbmljID0gdHJ1ZTsKKworICAgICAgc3RhdGljIHRpbWVfcG9pbnQKKyAgICAgIG5vdygpOworICAgIH07CisjZWxzZQorICAgIHR5cGVkZWYgc3lzdGVtX2Nsb2NrIG1vbm90b25pY19jbG9jazsKKyNlbmRpZgorCisgICAgdHlwZWRlZiBzeXN0ZW1fY2xvY2sgaGlnaF9yZXNvbHV0aW9uX2Nsb2NrOworICB9IC8vIG5hbWVzcGFjZSBjaHJvbm8KKworICAvLyBAfSBncm91cCBjaHJvbm8KK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYgLy9fR0xJQkNYWF9VU0VfQzk5X1NURElOVF9UUjEKKworI2VuZGlmIC8vX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKworI2VuZGlmIC8vX0dMSUJDWFhfQ0hST05PCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2NpbnR0eXBlcyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY2ludHR5cGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZGU1ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2NpbnR0eXBlcwpAQCAtMCwwICsxLDcxIEBACisvLyA8Y2ludHR5cGVzPiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvY2ludHR5cGVzCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0NJTlRUWVBFUworI2RlZmluZSBfR0xJQkNYWF9DSU5UVFlQRVMgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpZm5kZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyMgaW5jbHVkZSA8Yml0cy9jKysweF93YXJuaW5nLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoX0dMSUJDWFhfSU5DTFVERV9BU19UUjEpCisjICBlcnJvciBDKysweCBoZWFkZXIgY2Fubm90IGJlIGluY2x1ZGVkIGZyb20gVFIxIGhlYWRlcgorI2VuZGlmCisKKyNpbmNsdWRlIDxjc3RkaW50PgorCisvLyBGb3IgOC4xMS4xLzEgKHNlZSBDOTksIE5vdGUgMTg0KQorI2lmIF9HTElCQ1hYX0hBVkVfSU5UVFlQRVNfSAorIyBpZm5kZWYgX19TVERDX0ZPUk1BVF9NQUNST1MKKyMgIGRlZmluZSBfVU5ERUZfX1NURENfRk9STUFUX01BQ1JPUworIyAgZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TCisjIGVuZGlmCisjIGluY2x1ZGUgPGludHR5cGVzLmg+CisjIGlmZGVmIF9VTkRFRl9fU1REQ19GT1JNQVRfTUFDUk9TCisjICB1bmRlZiBfX1NURENfRk9STUFUX01BQ1JPUworIyAgdW5kZWYgX1VOREVGX19TVERDX0ZPUk1BVF9NQUNST1MKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYKQorIyAgaW5jbHVkZSA8dHIxX2ltcGwvY2ludHR5cGVzPgorI2Vsc2UKKyMgIGRlZmluZSBfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYCisjICBkZWZpbmUgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMQorIyAgZGVmaW5lIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVFIxCisjICBkZWZpbmUgX0dMSUJDWFhfVFIxCisjICBpbmNsdWRlIDx0cjFfaW1wbC9jaW50dHlwZXM+CisjICB1bmRlZiBfR0xJQkNYWF9UUjEKKyMgIHVuZGVmIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVFIxCisjICB1bmRlZiBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxCisjICB1bmRlZiBfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYCisjZW5kaWYKKworI2VuZGlmIC8vIF9HTElCQ1hYX0NJTlRUWVBFUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jaXNvNjQ2IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jaXNvNjQ2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NTk0YWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2Npc282NDYKQEAgLTAsMCArMSwzNCBAQAorLy8gLSotIEMrKyAtKi0gZm9yd2FyZGluZyBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGNpc282NDYKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgZmlsZS4gIFlvdSBzaG91bGQgQGMgXCNpbmNsdWRlIHRoaXMgZmlsZQorICogIGluIHlvdXIgcHJvZ3JhbXMsIHJhdGhlciB0aGFuIGFueSBvZiB0aGUgQGEgKi5oIGltcGxlbWVudGF0aW9uIGZpbGVzLgorICoKKyAqICBUaGlzIGlzIHRoZSBDKysgdmVyc2lvbiBvZiB0aGUgU3RhbmRhcmQgQyBMaWJyYXJ5IGhlYWRlciBAYyBpc282NDYuaCwKKyAqICBhbmQgaXRzIGNvbnRlbnRzIGFyZSAobW9zdGx5KSB0aGUgc2FtZSBhcyB0aGF0IGhlYWRlciwgYnV0IGFyZSBhbGwKKyAqICBjb250YWluZWQgaW4gdGhlIG5hbWVzcGFjZSBAYyBzdGQgKGV4Y2VwdCBmb3IgbmFtZXMgd2hpY2ggYXJlIGRlZmluZWQKKyAqICBhcyBtYWNyb3MgaW4gQykuCisgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY2xpbWl0cyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY2xpbWl0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDgwZmNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jbGltaXRzCkBAIC0wLDAgKzEsNjAgQEAKKy8vIC0qLSBDKysgLSotIGZvcndhcmRpbmcgaGVhZGVyLgorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsCisvLyAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgaW5jbHVkZS9jbGltaXRzCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGZpbGUuICBZb3Ugc2hvdWxkIEBjIFwjaW5jbHVkZSB0aGlzIGZpbGUKKyAqICBpbiB5b3VyIHByb2dyYW1zLCByYXRoZXIgdGhhbiBhbnkgb2YgdGhlIEBhICouaCBpbXBsZW1lbnRhdGlvbiBmaWxlcy4KKyAqCisgKiAgVGhpcyBpcyB0aGUgQysrIHZlcnNpb24gb2YgdGhlIFN0YW5kYXJkIEMgTGlicmFyeSBoZWFkZXIgQGMgbGltaXRzLmgsCisgKiAgYW5kIGl0cyBjb250ZW50cyBhcmUgKG1vc3RseSkgdGhlIHNhbWUgYXMgdGhhdCBoZWFkZXIsIGJ1dCBhcmUgYWxsCisgKiAgY29udGFpbmVkIGluIHRoZSBuYW1lc3BhY2UgQGMgc3RkIChleGNlcHQgZm9yIG5hbWVzIHdoaWNoIGFyZSBkZWZpbmVkCisgKiAgYXMgbWFjcm9zIGluIEMpLgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAxOC4yLjIgIEltcGxlbWVudGF0aW9uIHByb3BlcnRpZXM6IEMgbGlicmFyeQorLy8KKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpZm5kZWYgX0dMSUJDWFhfQ0xJTUlUUworI2RlZmluZSBfR0xJQkNYWF9DTElNSVRTIDEKKworI2lmbmRlZiBMTE9OR19NSU4KKyNkZWZpbmUgTExPTkdfTUlOICgtX19MT05HX0xPTkdfTUFYX18gLSAxKQorI2VuZGlmCisKKyNpZm5kZWYgTExPTkdfTUFYCisjZGVmaW5lIExMT05HX01BWCBfX0xPTkdfTE9OR19NQVhfXworI2VuZGlmCisKKyNpZm5kZWYgVUxMT05HX01BWAorI2RlZmluZSBVTExPTkdfTUFYIChfX0xPTkdfTE9OR19NQVhfXyAqIDJVTEwgKyAxKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jbG9jYWxlIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jbG9jYWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZjQyZTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2Nsb2NhbGUKQEAgLTAsMCArMSw2MSBAQAorLy8gLSotIEMrKyAtKi0gZm9yd2FyZGluZyBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwKKy8vIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBjbG9jYWxlCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGZpbGUuICBZb3Ugc2hvdWxkIEBjIFwjaW5jbHVkZSB0aGlzIGZpbGUKKyAqICBpbiB5b3VyIHByb2dyYW1zLCByYXRoZXIgdGhhbiBhbnkgb2YgdGhlIEBhICouaCBpbXBsZW1lbnRhdGlvbiBmaWxlcy4KKyAqCisgKiAgVGhpcyBpcyB0aGUgQysrIHZlcnNpb24gb2YgdGhlIFN0YW5kYXJkIEMgTGlicmFyeSBoZWFkZXIgQGMgbG9jYWxlLmgsCisgKiAgYW5kIGl0cyBjb250ZW50cyBhcmUgKG1vc3RseSkgdGhlIHNhbWUgYXMgdGhhdCBoZWFkZXIsIGJ1dCBhcmUgYWxsCisgKiAgY29udGFpbmVkIGluIHRoZSBuYW1lc3BhY2UgQGMgc3RkIChleGNlcHQgZm9yIG5hbWVzIHdoaWNoIGFyZSBkZWZpbmVkCisgKiAgYXMgbWFjcm9zIGluIEMpLgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAxOC4yLjIgIEltcGxlbWVudGF0aW9uIHByb3BlcnRpZXM6IEMgbGlicmFyeQorLy8KKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxsb2NhbGUuaD4KKworI2lmbmRlZiBfR0xJQkNYWF9DTE9DQUxFCisjZGVmaW5lIF9HTElCQ1hYX0NMT0NBTEUgMQorCisvLyBHZXQgcmlkIG9mIHRob3NlIG1hY3JvcyBkZWZpbmVkIGluIDxsb2NhbGUuaD4gaW4gbGlldSBvZiByZWFsIGZ1bmN0aW9ucy4KKyN1bmRlZiBzZXRsb2NhbGUKKyN1bmRlZiBsb2NhbGVjb252CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgdXNpbmcgOjpsY29udjsKKyAgdXNpbmcgOjpzZXRsb2NhbGU7CisgIHVzaW5nIDo6bG9jYWxlY29udjsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY21hdGggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2NtYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNjcyMTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2NtYXRoCkBAIC0wLDAgKzEsNjM3IEBACisvLyAtKi0gQysrIC0qLSBDIGZvcndhcmRpbmcgaGVhZGVyLgorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsCisvLyAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgaW5jbHVkZS9jbWF0aAorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBmaWxlLiAgWW91IHNob3VsZCBAYyBcI2luY2x1ZGUgdGhpcyBmaWxlCisgKiAgaW4geW91ciBwcm9ncmFtcywgcmF0aGVyIHRoYW4gYW55IG9mIHRoZSBAYSAqLmggaW1wbGVtZW50YXRpb24gZmlsZXMuCisgKgorICogIFRoaXMgaXMgdGhlIEMrKyB2ZXJzaW9uIG9mIHRoZSBTdGFuZGFyZCBDIExpYnJhcnkgaGVhZGVyIEBjIG1hdGguaCwKKyAqICBhbmQgaXRzIGNvbnRlbnRzIGFyZSAobW9zdGx5KSB0aGUgc2FtZSBhcyB0aGF0IGhlYWRlciwgYnV0IGFyZSBhbGwKKyAqICBjb250YWluZWQgaW4gdGhlIG5hbWVzcGFjZSBAYyBzdGQgKGV4Y2VwdCBmb3IgbmFtZXMgd2hpY2ggYXJlIGRlZmluZWQKKyAqICBhcyBtYWNyb3MgaW4gQykuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDI2LjUgIEMgbGlicmFyeQorLy8KKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxiaXRzL2NwcF90eXBlX3RyYWl0cy5oPgorI2luY2x1ZGUgPGV4dC90eXBlX3RyYWl0cy5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworI2lmbmRlZiBfR0xJQkNYWF9DTUFUSAorI2RlZmluZSBfR0xJQkNYWF9DTUFUSCAxCisKKy8vIEdldCByaWQgb2YgdGhvc2UgbWFjcm9zIGRlZmluZWQgaW4gPG1hdGguaD4gaW4gbGlldSBvZiByZWFsIGZ1bmN0aW9ucy4KKyN1bmRlZiBhYnMKKyN1bmRlZiBkaXYKKyN1bmRlZiBhY29zCisjdW5kZWYgYXNpbgorI3VuZGVmIGF0YW4KKyN1bmRlZiBhdGFuMgorI3VuZGVmIGNlaWwKKyN1bmRlZiBjb3MKKyN1bmRlZiBjb3NoCisjdW5kZWYgZXhwCisjdW5kZWYgZmFicworI3VuZGVmIGZsb29yCisjdW5kZWYgZm1vZAorI3VuZGVmIGZyZXhwCisjdW5kZWYgbGRleHAKKyN1bmRlZiBsb2cKKyN1bmRlZiBsb2cxMAorI3VuZGVmIG1vZGYKKyN1bmRlZiBwb3cKKyN1bmRlZiBzaW4KKyN1bmRlZiBzaW5oCisjdW5kZWYgc3FydAorI3VuZGVmIHRhbgorI3VuZGVmIHRhbmgKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvLyBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIGEgaGVscGVyIGZ1bmN0aW9uLiAgVGhpcyByZWFsbHkgc2hvdWxkIGJlCisgIC8vIGFuIGBleHBvcnRlZCcgZm9yd2FyZCBkZWNsYXJhdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcCBfX2NtYXRoX3Bvd2VyKF9UcCwgdW5zaWduZWQgaW50KTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9UcAorICAgIF9fcG93X2hlbHBlcihfVHAgX194LCBpbnQgX19uKQorICAgIHsKKyAgICAgIHJldHVybiBfX24gPCAwCisgICAgICAgID8gX1RwKDEpL19fY21hdGhfcG93ZXIoX194LCAtX19uKQorICAgICAgICA6IF9fY21hdGhfcG93ZXIoX194LCBfX24pOworICAgIH0KKworICBpbmxpbmUgZG91YmxlCisgIGFicyhkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fZmFicyhfX3gpOyB9CisKKyAgaW5saW5lIGZsb2F0CisgIGFicyhmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGFicyhsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKwkJCQkJICAgZG91YmxlPjo6X190eXBlCisgICAgYWJzKF9UcCBfX3gpCisgICAgeyByZXR1cm4gX19idWlsdGluX2ZhYnMoX194KTsgfQorCisgIHVzaW5nIDo6YWNvczsKKworICBpbmxpbmUgZmxvYXQKKyAgYWNvcyhmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9hY29zZihfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGFjb3MobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fYWNvc2woX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisJCQkJCSAgIGRvdWJsZT46Ol9fdHlwZQorICAgIGFjb3MoX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fYWNvcyhfX3gpOyB9CisKKyAgdXNpbmcgOjphc2luOworCisgIGlubGluZSBmbG9hdAorICBhc2luKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2FzaW5mKF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgYXNpbihsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9hc2lubChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLAorCQkJCQkgICBkb3VibGU+OjpfX3R5cGUKKyAgICBhc2luKF9UcCBfX3gpCisgICAgeyByZXR1cm4gX19idWlsdGluX2FzaW4oX194KTsgfQorCisgIHVzaW5nIDo6YXRhbjsKKworICBpbmxpbmUgZmxvYXQKKyAgYXRhbihmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9hdGFuZihfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGF0YW4obG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fYXRhbmwoX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisJCQkJCSAgIGRvdWJsZT46Ol9fdHlwZQorICAgIGF0YW4oX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fYXRhbihfX3gpOyB9CisKKyAgdXNpbmcgOjphdGFuMjsKKworICBpbmxpbmUgZmxvYXQKKyAgYXRhbjIoZmxvYXQgX195LCBmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9hdGFuMmYoX195LCBfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGF0YW4yKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fYXRhbjJsKF9feSwgX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIGlubGluZQorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8CisgICAgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2FyaXRobWV0aWM8X1RwPjo6X192YWx1ZQorCQkJCSAgICAmJiBfX2lzX2FyaXRobWV0aWM8X1VwPjo6X192YWx1ZSwKKwkJCQkgICAgX1RwPjo6X190eXBlLCBfVXA+OjpfX3R5cGUKKyAgICBhdGFuMihfVHAgX195LCBfVXAgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gYXRhbjIoX190eXBlKF9feSksIF9fdHlwZShfX3gpKTsKKyAgICB9CisKKyAgdXNpbmcgOjpjZWlsOworCisgIGlubGluZSBmbG9hdAorICBjZWlsKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2NlaWxmKF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgY2VpbChsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jZWlsbChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKwkJCQkJICAgZG91YmxlPjo6X190eXBlCisgICAgY2VpbChfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9jZWlsKF9feCk7IH0KKworICB1c2luZyA6OmNvczsKKworICBpbmxpbmUgZmxvYXQKKyAgY29zKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2Nvc2YoX194KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBjb3MobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fY29zbChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKwkJCQkJICAgZG91YmxlPjo6X190eXBlCisgICAgY29zKF9UcCBfX3gpCisgICAgeyByZXR1cm4gX19idWlsdGluX2NvcyhfX3gpOyB9CisKKyAgdXNpbmcgOjpjb3NoOworCisgIGlubGluZSBmbG9hdAorICBjb3NoKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2Nvc2hmKF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgY29zaChsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jb3NobChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKwkJCQkJICAgZG91YmxlPjo6X190eXBlCisgICAgY29zaChfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9jb3NoKF9feCk7IH0KKworICB1c2luZyA6OmV4cDsKKworICBpbmxpbmUgZmxvYXQKKyAgZXhwKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2V4cGYoX194KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBleHAobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fZXhwbChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKwkJCQkJICAgZG91YmxlPjo6X190eXBlCisgICAgZXhwKF9UcCBfX3gpCisgICAgeyByZXR1cm4gX19idWlsdGluX2V4cChfX3gpOyB9CisKKyAgdXNpbmcgOjpmYWJzOworCisgIGlubGluZSBmbG9hdAorICBmYWJzKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2ZhYnNmKF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgZmFicyhsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKwkJCQkJICAgZG91YmxlPjo6X190eXBlCisgICAgZmFicyhfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzKF9feCk7IH0KKworICB1c2luZyA6OmZsb29yOworCisgIGlubGluZSBmbG9hdAorICBmbG9vcihmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9mbG9vcmYoX194KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBmbG9vcihsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9mbG9vcmwoX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisJCQkJCSAgIGRvdWJsZT46Ol9fdHlwZQorICAgIGZsb29yKF9UcCBfX3gpCisgICAgeyByZXR1cm4gX19idWlsdGluX2Zsb29yKF9feCk7IH0KKworICB1c2luZyA6OmZtb2Q7CisKKyAgaW5saW5lIGZsb2F0CisgIGZtb2QoZmxvYXQgX194LCBmbG9hdCBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9mbW9kZihfX3gsIF9feSk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgZm1vZChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkKKyAgeyByZXR1cm4gX19idWlsdGluX2Ztb2RsKF9feCwgX195KTsgfQorCisgIHVzaW5nIDo6ZnJleHA7CisKKyAgaW5saW5lIGZsb2F0CisgIGZyZXhwKGZsb2F0IF9feCwgaW50KiBfX2V4cCkKKyAgeyByZXR1cm4gX19idWlsdGluX2ZyZXhwZihfX3gsIF9fZXhwKTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBmcmV4cChsb25nIGRvdWJsZSBfX3gsIGludCogX19leHApCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9mcmV4cGwoX194LCBfX2V4cCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorCQkJCQkgICBkb3VibGU+OjpfX3R5cGUKKyAgICBmcmV4cChfVHAgX194LCBpbnQqIF9fZXhwKQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9mcmV4cChfX3gsIF9fZXhwKTsgfQorCisgIHVzaW5nIDo6bGRleHA7CisKKyAgaW5saW5lIGZsb2F0CisgIGxkZXhwKGZsb2F0IF9feCwgaW50IF9fZXhwKQorICB7IHJldHVybiBfX2J1aWx0aW5fbGRleHBmKF9feCwgX19leHApOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGxkZXhwKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwKQorICB7IHJldHVybiBfX2J1aWx0aW5fbGRleHBsKF9feCwgX19leHApOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKwkJCQkJICAgZG91YmxlPjo6X190eXBlCisgIGxkZXhwKF9UcCBfX3gsIGludCBfX2V4cCkKKyAgeyByZXR1cm4gX19idWlsdGluX2xkZXhwKF9feCwgX19leHApOyB9CisKKyAgdXNpbmcgOjpsb2c7CisKKyAgaW5saW5lIGZsb2F0CisgIGxvZyhmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9sb2dmKF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgbG9nKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2xvZ2woX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisJCQkJCSAgIGRvdWJsZT46Ol9fdHlwZQorICAgIGxvZyhfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9sb2coX194KTsgfQorCisgIHVzaW5nIDo6bG9nMTA7CisKKyAgaW5saW5lIGZsb2F0CisgIGxvZzEwKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2xvZzEwZihfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGxvZzEwKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2xvZzEwbChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKwkJCQkJICAgZG91YmxlPjo6X190eXBlCisgICAgbG9nMTAoX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fbG9nMTAoX194KTsgfQorCisgIHVzaW5nIDo6bW9kZjsKKworICBpbmxpbmUgZmxvYXQKKyAgbW9kZihmbG9hdCBfX3gsIGZsb2F0KiBfX2lwdHIpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9tb2RmZihfX3gsIF9faXB0cik7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgbW9kZihsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlKiBfX2lwdHIpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9tb2RmbChfX3gsIF9faXB0cik7IH0KKworICB1c2luZyA6OnBvdzsKKworICBpbmxpbmUgZmxvYXQKKyAgcG93KGZsb2F0IF9feCwgZmxvYXQgX195KQorICB7IHJldHVybiBfX2J1aWx0aW5fcG93ZihfX3gsIF9feSk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgcG93KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KQorICB7IHJldHVybiBfX2J1aWx0aW5fcG93bChfX3gsIF9feSk7IH0KKworI2lmbmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgIC8vIERSIDU1MC4gV2hhdCBzaG91bGQgdGhlIHJldHVybiB0eXBlIG9mIHBvdyhmbG9hdCxpbnQpIGJlPworICBpbmxpbmUgZG91YmxlCisgIHBvdyhkb3VibGUgX194LCBpbnQgX19pKQorICB7IHJldHVybiBfX2J1aWx0aW5fcG93aShfX3gsIF9faSk7IH0KKworICBpbmxpbmUgZmxvYXQKKyAgcG93KGZsb2F0IF9feCwgaW50IF9fbikKKyAgeyByZXR1cm4gX19idWlsdGluX3Bvd2lmKF9feCwgX19uKTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBwb3cobG9uZyBkb3VibGUgX194LCBpbnQgX19uKQorICB7IHJldHVybiBfX2J1aWx0aW5fcG93aWwoX194LCBfX24pOyB9CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBpbmxpbmUKKyAgICB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPAorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19hcml0aG1ldGljPF9UcD46Ol9fdmFsdWUKKwkJCQkgICAgJiYgX19pc19hcml0aG1ldGljPF9VcD46Ol9fdmFsdWUsCisJCQkJICAgIF9UcD46Ol9fdHlwZSwgX1VwPjo6X190eXBlCisgICAgcG93KF9UcCBfX3gsIF9VcCBfX3kpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBwb3coX190eXBlKF9feCksIF9fdHlwZShfX3kpKTsKKyAgICB9CisKKyAgdXNpbmcgOjpzaW47CisKKyAgaW5saW5lIGZsb2F0CisgIHNpbihmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9zaW5mKF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgc2luKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX3NpbmwoX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisJCQkJCSAgIGRvdWJsZT46Ol9fdHlwZQorICAgIHNpbihfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9zaW4oX194KTsgfQorCisgIHVzaW5nIDo6c2luaDsKKworICBpbmxpbmUgZmxvYXQKKyAgc2luaChmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9zaW5oZihfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIHNpbmgobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fc2luaGwoX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisJCQkJCSAgIGRvdWJsZT46Ol9fdHlwZQorICAgIHNpbmgoX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fc2luaChfX3gpOyB9CisKKyAgdXNpbmcgOjpzcXJ0OworCisgIGlubGluZSBmbG9hdAorICBzcXJ0KGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX3NxcnRmKF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgc3FydChsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9zcXJ0bChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKwkJCQkJICAgZG91YmxlPjo6X190eXBlCisgICAgc3FydChfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9zcXJ0KF9feCk7IH0KKworICB1c2luZyA6OnRhbjsKKworICBpbmxpbmUgZmxvYXQKKyAgdGFuKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX3RhbmYoX194KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICB0YW4obG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fdGFubChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKwkJCQkJICAgZG91YmxlPjo6X190eXBlCisgICAgdGFuKF9UcCBfX3gpCisgICAgeyByZXR1cm4gX19idWlsdGluX3RhbihfX3gpOyB9CisKKyAgdXNpbmcgOjp0YW5oOworCisgIGlubGluZSBmbG9hdAorICB0YW5oKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX3RhbmhmKF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgdGFuaChsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl90YW5obChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKwkJCQkJICAgZG91YmxlPjo6X190eXBlCisgICAgdGFuaChfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl90YW5oKF9feCk7IH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRICisjaWYgIV9HTElCQ1hYX1VTRV9DOTlfRlBfTUFDUk9TX0RZTkFNSUMKKworLy8gVGhlc2UgYXJlIHBvc3NpYmxlIG1hY3JvcyBpbXBvcnRlZCBmcm9tIEM5OS1sYW5kLgorI3VuZGVmIGZwY2xhc3NpZnkKKyN1bmRlZiBpc2Zpbml0ZQorI3VuZGVmIGlzaW5mCisjdW5kZWYgaXNuYW4KKyN1bmRlZiBpc25vcm1hbAorI3VuZGVmIHNpZ25iaXQKKyN1bmRlZiBpc2dyZWF0ZXIKKyN1bmRlZiBpc2dyZWF0ZXJlcXVhbAorI3VuZGVmIGlzbGVzcworI3VuZGVmIGlzbGVzc2VxdWFsCisjdW5kZWYgaXNsZXNzZ3JlYXRlcgorI3VuZGVmIGlzdW5vcmRlcmVkCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfYXJpdGhtZXRpYzxfVHA+OjpfX3ZhbHVlLAorCQkJCQkgICBpbnQ+OjpfX3R5cGUKKyAgICBmcGNsYXNzaWZ5KF9UcCBfX2YpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fYnVpbHRpbl9mcGNsYXNzaWZ5KEZQX05BTiwgRlBfSU5GSU5JVEUsIEZQX05PUk1BTCwKKwkJCQkgIEZQX1NVQk5PUk1BTCwgRlBfWkVSTywgX190eXBlKF9fZikpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19hcml0aG1ldGljPF9UcD46Ol9fdmFsdWUsCisJCQkJCSAgIGludD46Ol9fdHlwZQorICAgIGlzZmluaXRlKF9UcCBfX2YpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fYnVpbHRpbl9pc2Zpbml0ZShfX3R5cGUoX19mKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2FyaXRobWV0aWM8X1RwPjo6X192YWx1ZSwKKwkJCQkJICAgaW50Pjo6X190eXBlCisgICAgaXNpbmYoX1RwIF9fZikKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19idWlsdGluX2lzaW5mKF9fdHlwZShfX2YpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfYXJpdGhtZXRpYzxfVHA+OjpfX3ZhbHVlLAorCQkJCQkgICBpbnQ+OjpfX3R5cGUKKyAgICBpc25hbihfVHAgX19mKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBfX2J1aWx0aW5faXNuYW4oX190eXBlKF9fZikpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19hcml0aG1ldGljPF9UcD46Ol9fdmFsdWUsCisJCQkJCSAgIGludD46Ol9fdHlwZQorICAgIGlzbm9ybWFsKF9UcCBfX2YpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fYnVpbHRpbl9pc25vcm1hbChfX3R5cGUoX19mKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2FyaXRobWV0aWM8X1RwPjo6X192YWx1ZSwKKwkJCQkJICAgaW50Pjo6X190eXBlCisgICAgc2lnbmJpdChfVHAgX19mKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBfX2J1aWx0aW5fc2lnbmJpdChfX3R5cGUoX19mKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2FyaXRobWV0aWM8X1RwPjo6X192YWx1ZSwKKwkJCQkJICAgaW50Pjo6X190eXBlCisgICAgaXNncmVhdGVyKF9UcCBfX2YxLCBfVHAgX19mMikKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19idWlsdGluX2lzZ3JlYXRlcihfX3R5cGUoX19mMSksIF9fdHlwZShfX2YyKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2FyaXRobWV0aWM8X1RwPjo6X192YWx1ZSwKKwkJCQkJICAgaW50Pjo6X190eXBlCisgICAgaXNncmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBfX2J1aWx0aW5faXNncmVhdGVyZXF1YWwoX190eXBlKF9fZjEpLCBfX3R5cGUoX19mMikpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19hcml0aG1ldGljPF9UcD46Ol9fdmFsdWUsCisJCQkJCSAgIGludD46Ol9fdHlwZQorICAgIGlzbGVzcyhfVHAgX19mMSwgX1RwIF9fZjIpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fYnVpbHRpbl9pc2xlc3MoX190eXBlKF9fZjEpLCBfX3R5cGUoX19mMikpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19hcml0aG1ldGljPF9UcD46Ol9fdmFsdWUsCisJCQkJCSAgIGludD46Ol9fdHlwZQorICAgIGlzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19idWlsdGluX2lzbGVzc2VxdWFsKF9fdHlwZShfX2YxKSwgX190eXBlKF9fZjIpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfYXJpdGhtZXRpYzxfVHA+OjpfX3ZhbHVlLAorCQkJCQkgICBpbnQ+OjpfX3R5cGUKKyAgICBpc2xlc3NncmVhdGVyKF9UcCBfX2YxLCBfVHAgX19mMikKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19idWlsdGluX2lzbGVzc2dyZWF0ZXIoX190eXBlKF9fZjEpLCBfX3R5cGUoX19mMikpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19hcml0aG1ldGljPF9UcD46Ol9fdmFsdWUsCisJCQkJCSAgIGludD46Ol9fdHlwZQorICAgIGlzdW5vcmRlcmVkKF9UcCBfX2YxLCBfVHAgX19mMikKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19idWlsdGluX2lzdW5vcmRlcmVkKF9fdHlwZShfX2YxKSwgX190eXBlKF9fZjIpKTsKKyAgICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmIC8qIF9HTElCQ1hYX1VTRV9DOTlfRlBfTUFDUk9TX0RZTkFNSUMgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9HTElCQ1hYX0VYUE9SVF9URU1QTEFURQorIyBpbmNsdWRlIDxiaXRzL2NtYXRoLnRjYz4KKyNlbmRpZgorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyMgIGlmIGRlZmluZWQoX0dMSUJDWFhfSU5DTFVERV9BU19UUjEpCisjICAgIGVycm9yIEMrKzB4IGhlYWRlciBjYW5ub3QgYmUgaW5jbHVkZWQgZnJvbSBUUjEgaGVhZGVyCisjICBlbmRpZgorIyAgaWYgZGVmaW5lZChfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYKQorIyAgICBpbmNsdWRlIDx0cjFfaW1wbC9jbWF0aD4KKyMgIGVsc2UKKyMgICAgZGVmaW5lIF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgKKyMgICAgZGVmaW5lIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9UUjEKKyMgICAgZGVmaW5lIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVFIxCisjICAgIGRlZmluZSBfR0xJQkNYWF9UUjEKKyMgICAgaW5jbHVkZSA8dHIxX2ltcGwvY21hdGg+CisjICAgIHVuZGVmIF9HTElCQ1hYX1RSMQorIyAgICB1bmRlZiBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorIyAgICB1bmRlZiBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxCisjICAgIHVuZGVmIF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgKKyMgIGVuZGlmCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2NvbXBsZXggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2NvbXBsZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQzMDk3ZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY29tcGxleApAQCAtMCwwICsxLDE1OTAgQEAKKy8vIFRoZSB0ZW1wbGF0ZSBhbmQgaW5saW5lcyBmb3IgdGhlIC0qLSBDKysgLSotIGNvbXBsZXggbnVtYmVyIGNsYXNzZXMuCisKKy8vIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwKKy8vIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL2NvbXBsZXgKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyNi4yICBDb21wbGV4IE51bWJlcnMKKy8vIE5vdGU6IHRoaXMgaXMgbm90IGEgY29uZm9ybWluZyBpbXBsZW1lbnRhdGlvbi4KKy8vIEluaXRpYWxseSBpbXBsZW1lbnRlZCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPgorLy8gSW1wcm92ZWQgYnkgR2FicmllbCBEb3MgUmVpcyA8ZG9zcmVpc0BjbWxhLmVucy1jYWNoYW4uZnI+CisvLworCisjaWZuZGVmIF9HTElCQ1hYX0NPTVBMRVgKKyNkZWZpbmUgX0dMSUJDWFhfQ09NUExFWCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Yml0cy9jcHBfdHlwZV90cmFpdHMuaD4KKyNpbmNsdWRlIDxleHQvdHlwZV90cmFpdHMuaD4KKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8qKgorICAgKiBAZGVmZ3JvdXAgY29tcGxleF9udW1iZXJzIENvbXBsZXggTnVtYmVycworICAgKiBAaW5ncm91cCBudW1lcmljcworICAgKgorICAgKiBDbGFzc2VzIGFuZCBmdW5jdGlvbnMgZm9yIGNvbXBsZXggbnVtYmVycy4KKyAgICogQHsKKyAgICovCisKKyAgLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY2xhc3MgY29tcGxleDsKKyAgdGVtcGxhdGU8PiBjbGFzcyBjb21wbGV4PGZsb2F0PjsKKyAgdGVtcGxhdGU8PiBjbGFzcyBjb21wbGV4PGRvdWJsZT47CisgIHRlbXBsYXRlPD4gY2xhc3MgY29tcGxleDxsb25nIGRvdWJsZT47CisKKyAgLy8vICBSZXR1cm4gbWFnbml0dWRlIG9mIEBhIHouCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIGFicyhjb25zdCBjb21wbGV4PF9UcD4mKTsKKyAgLy8vICBSZXR1cm4gcGhhc2UgYW5nbGUgb2YgQGEgei4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgYXJnKGNvbnN0IGNvbXBsZXg8X1RwPiYpOworICAvLy8gIFJldHVybiBAYSB6IG1hZ25pdHVkZSBzcXVhcmVkLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBub3JtKGNvbnN0IGNvbXBsZXg8X1RwPiYpOworCisgIC8vLyAgUmV0dXJuIGNvbXBsZXggY29uanVnYXRlIG9mIEBhIHouCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxleDxfVHA+IGNvbmooY29uc3QgY29tcGxleDxfVHA+Jik7CisgIC8vLyAgUmV0dXJuIGNvbXBsZXggd2l0aCBtYWduaXR1ZGUgQGEgcmhvIGFuZCBhbmdsZSBAYSB0aGV0YS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gcG9sYXIoY29uc3QgX1RwJiwgY29uc3QgX1RwJiA9IDApOworCisgIC8vIFRyYW5zY2VuZGVudGFsczoKKyAgLy8vIFJldHVybiBjb21wbGV4IGNvc2luZSBvZiBAYSB6LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBjb3MoY29uc3QgY29tcGxleDxfVHA+Jik7CisgIC8vLyBSZXR1cm4gY29tcGxleCBoeXBlcmJvbGljIGNvc2luZSBvZiBAYSB6LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBjb3NoKGNvbnN0IGNvbXBsZXg8X1RwPiYpOworICAvLy8gUmV0dXJuIGNvbXBsZXggYmFzZSBlIGV4cG9uZW50aWFsIG9mIEBhIHouCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxleDxfVHA+IGV4cChjb25zdCBjb21wbGV4PF9UcD4mKTsKKyAgLy8vIFJldHVybiBjb21wbGV4IG5hdHVyYWwgbG9nYXJpdGhtIG9mIEBhIHouCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxleDxfVHA+IGxvZyhjb25zdCBjb21wbGV4PF9UcD4mKTsKKyAgLy8vIFJldHVybiBjb21wbGV4IGJhc2UgMTAgbG9nYXJpdGhtIG9mIEBhIHouCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxleDxfVHA+IGxvZzEwKGNvbnN0IGNvbXBsZXg8X1RwPiYpOworI2lmbmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAvLyBEUiA4NDQuCisgIC8vLyBSZXR1cm4gQGEgeCB0byB0aGUgQGEgeSd0aCBwb3dlci4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gcG93KGNvbnN0IGNvbXBsZXg8X1RwPiYsIGludCk7CisjZW5kaWYKKyAgLy8vIFJldHVybiBAYSB4IHRvIHRoZSBAYSB5J3RoIHBvd2VyLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBwb3coY29uc3QgY29tcGxleDxfVHA+JiwgY29uc3QgX1RwJik7CisgIC8vLyBSZXR1cm4gQGEgeCB0byB0aGUgQGEgeSd0aCBwb3dlci4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gcG93KGNvbnN0IGNvbXBsZXg8X1RwPiYsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcGxleDxfVHA+Jik7CisgIC8vLyBSZXR1cm4gQGEgeCB0byB0aGUgQGEgeSd0aCBwb3dlci4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gcG93KGNvbnN0IF9UcCYsIGNvbnN0IGNvbXBsZXg8X1RwPiYpOworICAvLy8gUmV0dXJuIGNvbXBsZXggc2luZSBvZiBAYSB6LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBzaW4oY29uc3QgY29tcGxleDxfVHA+Jik7CisgIC8vLyBSZXR1cm4gY29tcGxleCBoeXBlcmJvbGljIHNpbmUgb2YgQGEgei4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gc2luaChjb25zdCBjb21wbGV4PF9UcD4mKTsKKyAgLy8vIFJldHVybiBjb21wbGV4IHNxdWFyZSByb290IG9mIEBhIHouCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxleDxfVHA+IHNxcnQoY29uc3QgY29tcGxleDxfVHA+Jik7CisgIC8vLyBSZXR1cm4gY29tcGxleCB0YW5nZW50IG9mIEBhIHouCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxleDxfVHA+IHRhbihjb25zdCBjb21wbGV4PF9UcD4mKTsKKyAgLy8vIFJldHVybiBjb21wbGV4IGh5cGVyYm9saWMgdGFuZ2VudCBvZiBAYSB6LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiB0YW5oKGNvbnN0IGNvbXBsZXg8X1RwPiYpOworICAgIAorICAgIAorICAvLyAyNi4yLjIgIFByaW1hcnkgdGVtcGxhdGUgY2xhc3MgY29tcGxleAorICAvKioKKyAgICogIFRlbXBsYXRlIHRvIHJlcHJlc2VudCBjb21wbGV4IG51bWJlcnMuCisgICAqCisgICAqICBTcGVjaWFsaXphdGlvbnMgZm9yIGZsb2F0LCBkb3VibGUsIGFuZCBsb25nIGRvdWJsZSBhcmUgcGFydCBvZiB0aGUKKyAgICogIGxpYnJhcnkuICBSZXN1bHRzIHdpdGggYW55IG90aGVyIHR5cGUgYXJlIG5vdCBndWFyYW50ZWVkLgorICAgKgorICAgKiAgQHBhcmFtICBUcCAgVHlwZSBvZiByZWFsIGFuZCBpbWFnaW5hcnkgdmFsdWVzLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGNvbXBsZXgKKyAgICB7CisgICAgICAvLy8gVmFsdWUgdHlwZWRlZi4KKyAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CisgICAgICAKKyAgICAgIC8vLyAgRGVmYXVsdCBjb25zdHJ1Y3Rvci4gIEZpcnN0IHBhcmFtZXRlciBpcyB4LCBzZWNvbmQgcGFyYW1ldGVyIGlzIHkuCisgICAgICAvLy8gIFVuc3BlY2lmaWVkIHBhcmFtZXRlcnMgZGVmYXVsdCB0byAwLgorICAgICAgY29tcGxleChjb25zdCBfVHAmIF9fciA9IF9UcCgpLCBjb25zdCBfVHAmIF9faSA9IF9UcCgpKQorICAgICAgOiBfTV9yZWFsKF9fciksIF9NX2ltYWcoX19pKSB7IH0KKworICAgICAgLy8gTGV0cyB0aGUgY29tcGlsZXIgc3ludGhlc2l6ZSB0aGUgY29weSBjb25zdHJ1Y3RvciAgIAorICAgICAgLy8gY29tcGxleCAoY29uc3QgY29tcGxleDxfVHA+Jik7CisgICAgICAvLy8gIENvcHkgY29uc3RydWN0b3IuCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgICAgIGNvbXBsZXgoY29uc3QgY29tcGxleDxfVXA+JiBfX3opCisJOiBfTV9yZWFsKF9fei5yZWFsKCkpLCBfTV9pbWFnKF9fei5pbWFnKCkpIHsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSIDM4Ny4gc3RkOjpjb21wbGV4IG92ZXItZW5jYXBzdWxhdGVkLgorICAgICAgX1RwIHJlYWwoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcmVhbDsgfQorCisgICAgICBfVHAgaW1hZygpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9pbWFnOyB9CisjZWxzZQorICAgICAgLy8vICBSZXR1cm4gcmVhbCBwYXJ0IG9mIGNvbXBsZXggbnVtYmVyLgorICAgICAgX1RwJiByZWFsKCkKKyAgICAgIHsgcmV0dXJuIF9NX3JlYWw7IH0KKworICAgICAgLy8vICBSZXR1cm4gcmVhbCBwYXJ0IG9mIGNvbXBsZXggbnVtYmVyLgorICAgICAgY29uc3QgX1RwJiByZWFsKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3JlYWw7IH0KKworICAgICAgLy8vICBSZXR1cm4gaW1hZ2luYXJ5IHBhcnQgb2YgY29tcGxleCBudW1iZXIuCisgICAgICBfVHAmIGltYWcoKQorICAgICAgeyByZXR1cm4gX01faW1hZzsgfQorCisgICAgICAvLy8gIFJldHVybiBpbWFnaW5hcnkgcGFydCBvZiBjb21wbGV4IG51bWJlci4KKyAgICAgIGNvbnN0IF9UcCYgaW1hZygpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9pbWFnOyB9CisjZW5kaWYKKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gRFIgMzg3LiBzdGQ6OmNvbXBsZXggb3Zlci1lbmNhcHN1bGF0ZWQuCisgICAgICB2b2lkIHJlYWwoX1RwIF9fdmFsKQorICAgICAgeyBfTV9yZWFsID0gX192YWw7IH0KKworICAgICAgdm9pZCBpbWFnKF9UcCBfX3ZhbCkKKyAgICAgIHsgX01faW1hZyA9IF9fdmFsOyB9CisKKyAgICAgIC8vLyBBc3NpZ24gdGhpcyBjb21wbGV4IG51bWJlciB0byBzY2FsYXIgQGEgdC4KKyAgICAgIGNvbXBsZXg8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IF9UcCYpOworICAgICAgCisgICAgICAvLy8gQWRkIEBhIHQgdG8gdGhpcyBjb21wbGV4IG51bWJlci4KKyAgICAgIC8vIDI2LjIuNS8xCisgICAgICBjb21wbGV4PF9UcD4mCisgICAgICBvcGVyYXRvcis9KGNvbnN0IF9UcCYgX190KQorICAgICAgeworCV9NX3JlYWwgKz0gX190OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLy8vIFN1YnRyYWN0IEBhIHQgZnJvbSB0aGlzIGNvbXBsZXggbnVtYmVyLgorICAgICAgLy8gMjYuMi41LzMKKyAgICAgIGNvbXBsZXg8X1RwPiYKKyAgICAgIG9wZXJhdG9yLT0oY29uc3QgX1RwJiBfX3QpCisgICAgICB7CisJX01fcmVhbCAtPSBfX3Q7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvLy8gTXVsdGlwbHkgdGhpcyBjb21wbGV4IG51bWJlciBieSBAYSB0LgorICAgICAgY29tcGxleDxfVHA+JiBvcGVyYXRvcio9KGNvbnN0IF9UcCYpOworICAgICAgLy8vIERpdmlkZSB0aGlzIGNvbXBsZXggbnVtYmVyIGJ5IEBhIHQuCisgICAgICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yLz0oY29uc3QgX1RwJik7CisKKyAgICAgIC8vIExldHMgdGhlIGNvbXBpbGVyIHN5bnRoZXNpemUgdGhlCisgICAgICAvLyBjb3B5IGFuZCBhc3NpZ25tZW50IG9wZXJhdG9yCisgICAgICAvLyBjb21wbGV4PF9UcD4mIG9wZXJhdG9yPSAoY29uc3QgY29tcGxleDxfVHA+Jik7CisgICAgICAvLy8gQXNzaWduIHRoaXMgY29tcGxleCBudW1iZXIgdG8gY29tcGxleCBAYSB6LgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorICAgICAgICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yPShjb25zdCBjb21wbGV4PF9VcD4mKTsKKyAgICAgIC8vLyBBZGQgQGEgeiB0byB0aGlzIGNvbXBsZXggbnVtYmVyLgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorICAgICAgICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yKz0oY29uc3QgY29tcGxleDxfVXA+Jik7CisgICAgICAvLy8gU3VidHJhY3QgQGEgeiBmcm9tIHRoaXMgY29tcGxleCBudW1iZXIuCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgICAgIGNvbXBsZXg8X1RwPiYgb3BlcmF0b3ItPShjb25zdCBjb21wbGV4PF9VcD4mKTsKKyAgICAgIC8vLyBNdWx0aXBseSB0aGlzIGNvbXBsZXggbnVtYmVyIGJ5IEBhIHouCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgICAgIGNvbXBsZXg8X1RwPiYgb3BlcmF0b3IqPShjb25zdCBjb21wbGV4PF9VcD4mKTsKKyAgICAgIC8vLyBEaXZpZGUgdGhpcyBjb21wbGV4IG51bWJlciBieSBAYSB6LgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorICAgICAgICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yLz0oY29uc3QgY29tcGxleDxfVXA+Jik7CisKKyAgICAgIGNvbnN0IGNvbXBsZXgmIF9fcmVwKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgX1RwIF9NX3JlYWw7CisgICAgICBfVHAgX01faW1hZzsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjb21wbGV4PF9UcD4mCisgICAgY29tcGxleDxfVHA+OjpvcGVyYXRvcj0oY29uc3QgX1RwJiBfX3QpCisgICAgeworICAgICBfTV9yZWFsID0gX190OworICAgICBfTV9pbWFnID0gX1RwKCk7CisgICAgIHJldHVybiAqdGhpczsKKyAgICB9IAorCisgIC8vIDI2LjIuNS81CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjb21wbGV4PF9UcD4mCisgICAgY29tcGxleDxfVHA+OjpvcGVyYXRvcio9KGNvbnN0IF9UcCYgX190KQorICAgIHsKKyAgICAgIF9NX3JlYWwgKj0gX190OworICAgICAgX01faW1hZyAqPSBfX3Q7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIC8vIDI2LjIuNS83CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjb21wbGV4PF9UcD4mCisgICAgY29tcGxleDxfVHA+OjpvcGVyYXRvci89KGNvbnN0IF9UcCYgX190KQorICAgIHsKKyAgICAgIF9NX3JlYWwgLz0gX190OworICAgICAgX01faW1hZyAvPSBfX3Q7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgY29tcGxleDxfVHA+JgorICAgIGNvbXBsZXg8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IGNvbXBsZXg8X1VwPiYgX196KQorICAgIHsKKyAgICAgIF9NX3JlYWwgPSBfX3oucmVhbCgpOworICAgICAgX01faW1hZyA9IF9fei5pbWFnKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIC8vIDI2LjIuNS85CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgY29tcGxleDxfVHA+JgorICAgIGNvbXBsZXg8X1RwPjo6b3BlcmF0b3IrPShjb25zdCBjb21wbGV4PF9VcD4mIF9feikKKyAgICB7CisgICAgICBfTV9yZWFsICs9IF9fei5yZWFsKCk7CisgICAgICBfTV9pbWFnICs9IF9fei5pbWFnKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIC8vIDI2LjIuNS8xMQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorICAgIGNvbXBsZXg8X1RwPiYKKyAgICBjb21wbGV4PF9UcD46Om9wZXJhdG9yLT0oY29uc3QgY29tcGxleDxfVXA+JiBfX3opCisgICAgeworICAgICAgX01fcmVhbCAtPSBfX3oucmVhbCgpOworICAgICAgX01faW1hZyAtPSBfX3ouaW1hZygpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAvLyAyNi4yLjUvMTMKKyAgLy8gWFhYOiBUaGlzIGlzIGEgZ3JhbW1hciBzY2hvb2wgaW1wbGVtZW50YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgY29tcGxleDxfVHA+JgorICAgIGNvbXBsZXg8X1RwPjo6b3BlcmF0b3IqPShjb25zdCBjb21wbGV4PF9VcD4mIF9feikKKyAgICB7CisgICAgICBjb25zdCBfVHAgX19yID0gX01fcmVhbCAqIF9fei5yZWFsKCkgLSBfTV9pbWFnICogX196LmltYWcoKTsKKyAgICAgIF9NX2ltYWcgPSBfTV9yZWFsICogX196LmltYWcoKSArIF9NX2ltYWcgKiBfX3oucmVhbCgpOworICAgICAgX01fcmVhbCA9IF9fcjsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgLy8gMjYuMi41LzE1CisgIC8vIFhYWDogVGhpcyBpcyBhIGdyYW1tYXIgc2Nob29sIGltcGxlbWVudGF0aW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorICAgIGNvbXBsZXg8X1RwPiYKKyAgICBjb21wbGV4PF9UcD46Om9wZXJhdG9yLz0oY29uc3QgY29tcGxleDxfVXA+JiBfX3opCisgICAgeworICAgICAgY29uc3QgX1RwIF9fciA9ICBfTV9yZWFsICogX196LnJlYWwoKSArIF9NX2ltYWcgKiBfX3ouaW1hZygpOworICAgICAgY29uc3QgX1RwIF9fbiA9IHN0ZDo6bm9ybShfX3opOworICAgICAgX01faW1hZyA9IChfTV9pbWFnICogX196LnJlYWwoKSAtIF9NX3JlYWwgKiBfX3ouaW1hZygpKSAvIF9fbjsKKyAgICAgIF9NX3JlYWwgPSBfX3IgLyBfX247CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIAorICAvLyBPcGVyYXRvcnM6CisgIC8vQHsKKyAgLy8vICBSZXR1cm4gbmV3IGNvbXBsZXggdmFsdWUgQGEgeCBwbHVzIEBhIHkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgb3BlcmF0b3IrKGNvbnN0IGNvbXBsZXg8X1RwPiYgX194LCBjb25zdCBjb21wbGV4PF9UcD4mIF9feSkKKyAgICB7CisgICAgICBjb21wbGV4PF9UcD4gX19yID0gX194OworICAgICAgX19yICs9IF9feTsKKyAgICAgIHJldHVybiBfX3I7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgb3BlcmF0b3IrKGNvbnN0IGNvbXBsZXg8X1RwPiYgX194LCBjb25zdCBfVHAmIF9feSkKKyAgICB7CisgICAgICBjb21wbGV4PF9UcD4gX19yID0gX194OworICAgICAgX19yICs9IF9feTsKKyAgICAgIHJldHVybiBfX3I7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgb3BlcmF0b3IrKGNvbnN0IF9UcCYgX194LCBjb25zdCBjb21wbGV4PF9UcD4mIF9feSkKKyAgICB7CisgICAgICBjb21wbGV4PF9UcD4gX19yID0gX195OworICAgICAgX19yICs9IF9feDsKKyAgICAgIHJldHVybiBfX3I7CisgICAgfQorICAvL0B9CisKKyAgLy9AeworICAvLy8gIFJldHVybiBuZXcgY29tcGxleCB2YWx1ZSBAYSB4IG1pbnVzIEBhIHkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgb3BlcmF0b3ItKGNvbnN0IGNvbXBsZXg8X1RwPiYgX194LCBjb25zdCBjb21wbGV4PF9UcD4mIF9feSkKKyAgICB7CisgICAgICBjb21wbGV4PF9UcD4gX19yID0gX194OworICAgICAgX19yIC09IF9feTsKKyAgICAgIHJldHVybiBfX3I7CisgICAgfQorICAgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIG9wZXJhdG9yLShjb25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgX1RwJiBfX3kpCisgICAgeworICAgICAgY29tcGxleDxfVHA+IF9fciA9IF9feDsKKyAgICAgIF9fciAtPSBfX3k7CisgICAgICByZXR1cm4gX19yOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIG9wZXJhdG9yLShjb25zdCBfVHAmIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCisgICAgeworICAgICAgY29tcGxleDxfVHA+IF9fcihfX3gsIC1fX3kuaW1hZygpKTsKKyAgICAgIF9fciAtPSBfX3kucmVhbCgpOworICAgICAgcmV0dXJuIF9fcjsKKyAgICB9CisgIC8vQH0KKworICAvL0B7CisgIC8vLyAgUmV0dXJuIG5ldyBjb21wbGV4IHZhbHVlIEBhIHggdGltZXMgQGEgeS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBvcGVyYXRvciooY29uc3QgY29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQorICAgIHsKKyAgICAgIGNvbXBsZXg8X1RwPiBfX3IgPSBfX3g7CisgICAgICBfX3IgKj0gX195OworICAgICAgcmV0dXJuIF9fcjsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBvcGVyYXRvciooY29uc3QgY29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IF9UcCYgX195KQorICAgIHsKKyAgICAgIGNvbXBsZXg8X1RwPiBfX3IgPSBfX3g7CisgICAgICBfX3IgKj0gX195OworICAgICAgcmV0dXJuIF9fcjsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBvcGVyYXRvciooY29uc3QgX1RwJiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQorICAgIHsKKyAgICAgIGNvbXBsZXg8X1RwPiBfX3IgPSBfX3k7CisgICAgICBfX3IgKj0gX194OworICAgICAgcmV0dXJuIF9fcjsKKyAgICB9CisgIC8vQH0KKworICAvL0B7CisgIC8vLyAgUmV0dXJuIG5ldyBjb21wbGV4IHZhbHVlIEBhIHggZGl2aWRlZCBieSBAYSB5LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIG9wZXJhdG9yLyhjb25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCisgICAgeworICAgICAgY29tcGxleDxfVHA+IF9fciA9IF9feDsKKyAgICAgIF9fciAvPSBfX3k7CisgICAgICByZXR1cm4gX19yOworICAgIH0KKyAgICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBvcGVyYXRvci8oY29uc3QgY29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IF9UcCYgX195KQorICAgIHsKKyAgICAgIGNvbXBsZXg8X1RwPiBfX3IgPSBfX3g7CisgICAgICBfX3IgLz0gX195OworICAgICAgcmV0dXJuIF9fcjsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBvcGVyYXRvci8oY29uc3QgX1RwJiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQorICAgIHsKKyAgICAgIGNvbXBsZXg8X1RwPiBfX3IgPSBfX3g7CisgICAgICBfX3IgLz0gX195OworICAgICAgcmV0dXJuIF9fcjsKKyAgICB9CisgIC8vQH0KKworICAvLy8gIFJldHVybiBAYSB4LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIG9wZXJhdG9yKyhjb25zdCBjb21wbGV4PF9UcD4mIF9feCkKKyAgICB7IHJldHVybiBfX3g7IH0KKworICAvLy8gIFJldHVybiBjb21wbGV4IG5lZ2F0aW9uIG9mIEBhIHguCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgb3BlcmF0b3ItKGNvbnN0IGNvbXBsZXg8X1RwPiYgX194KQorICAgIHsgIHJldHVybiBjb21wbGV4PF9UcD4oLV9feC5yZWFsKCksIC1fX3guaW1hZygpKTsgfQorCisgIC8vQHsKKyAgLy8vICBSZXR1cm4gdHJ1ZSBpZiBAYSB4IGlzIGVxdWFsIHRvIEBhIHkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgY29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5yZWFsKCkgPT0gX195LnJlYWwoKSAmJiBfX3guaW1hZygpID09IF9feS5pbWFnKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGNvbXBsZXg8X1RwPiYgX194LCBjb25zdCBfVHAmIF9feSkKKyAgICB7IHJldHVybiBfX3gucmVhbCgpID09IF9feSAmJiBfX3guaW1hZygpID09IF9UcCgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBfVHAmIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCisgICAgeyByZXR1cm4gX194ID09IF9feS5yZWFsKCkgJiYgX1RwKCkgPT0gX195LmltYWcoKTsgfQorICAvL0B9CisKKyAgLy9AeworICAvLy8gIFJldHVybiBmYWxzZSBpZiBAYSB4IGlzIGVxdWFsIHRvIEBhIHkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgY29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5yZWFsKCkgIT0gX195LnJlYWwoKSB8fCBfX3guaW1hZygpICE9IF9feS5pbWFnKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IGNvbXBsZXg8X1RwPiYgX194LCBjb25zdCBfVHAmIF9feSkKKyAgICB7IHJldHVybiBfX3gucmVhbCgpICE9IF9feSB8fCBfX3guaW1hZygpICE9IF9UcCgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBfVHAmIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCisgICAgeyByZXR1cm4gX194ICE9IF9feS5yZWFsKCkgfHwgX1RwKCkgIT0gX195LmltYWcoKTsgfQorICAvL0B9CisKKyAgLy8vICBFeHRyYWN0aW9uIG9wZXJhdG9yIGZvciBjb21wbGV4IHZhbHVlcy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLCBjb21wbGV4PF9UcD4mIF9feCkKKyAgICB7CisgICAgICBfVHAgX19yZV94LCBfX2ltX3g7CisgICAgICBfQ2hhclQgX19jaDsKKyAgICAgIF9faXMgPj4gX19jaDsKKyAgICAgIGlmIChfX2NoID09ICcoJykgCisJeworCSAgX19pcyA+PiBfX3JlX3ggPj4gX19jaDsKKwkgIGlmIChfX2NoID09ICcsJykgCisJICAgIHsKKwkgICAgICBfX2lzID4+IF9faW1feCA+PiBfX2NoOworCSAgICAgIGlmIChfX2NoID09ICcpJykgCisJCV9feCA9IGNvbXBsZXg8X1RwPihfX3JlX3gsIF9faW1feCk7CisJICAgICAgZWxzZQorCQlfX2lzLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKKwkgICAgfQorCSAgZWxzZSBpZiAoX19jaCA9PSAnKScpIAorCSAgICBfX3ggPSBfX3JlX3g7CisJICBlbHNlCisJICAgIF9faXMuc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOworCX0KKyAgICAgIGVsc2UgCisJeworCSAgX19pcy5wdXRiYWNrKF9fY2gpOworCSAgX19pcyA+PiBfX3JlX3g7CisJICBfX3ggPSBfX3JlX3g7CisJfQorICAgICAgcmV0dXJuIF9faXM7CisgICAgfQorCisgIC8vLyAgSW5zZXJ0aW9uIG9wZXJhdG9yIGZvciBjb21wbGV4IHZhbHVlcy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CisgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLCBjb25zdCBjb21wbGV4PF9UcD4mIF9feCkKKyAgICB7CisgICAgICBiYXNpY19vc3RyaW5nc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19zOworICAgICAgX19zLmZsYWdzKF9fb3MuZmxhZ3MoKSk7CisgICAgICBfX3MuaW1idWUoX19vcy5nZXRsb2MoKSk7CisgICAgICBfX3MucHJlY2lzaW9uKF9fb3MucHJlY2lzaW9uKCkpOworICAgICAgX19zIDw8ICcoJyA8PCBfX3gucmVhbCgpIDw8ICcsJyA8PCBfX3guaW1hZygpIDw8ICcpJzsKKyAgICAgIHJldHVybiBfX29zIDw8IF9fcy5zdHIoKTsKKyAgICB9CisKKyAgLy8gVmFsdWVzCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICByZWFsKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIF9fei5yZWFsKCk7IH0KKyAgICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICBpbWFnKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIF9fei5pbWFnKCk7IH0KKyNlbHNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwJgorICAgIHJlYWwoY29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gX196LnJlYWwoKTsgfQorICAgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbnN0IF9UcCYKKyAgICByZWFsKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIF9fei5yZWFsKCk7IH0KKyAgICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAmCisgICAgaW1hZyhjb21wbGV4PF9UcD4mIF9feikKKyAgICB7IHJldHVybiBfX3ouaW1hZygpOyB9CisgICAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29uc3QgX1RwJgorICAgIGltYWcoY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gX196LmltYWcoKTsgfQorI2VuZGlmCisKKyAgLy8gMjYuMi43LzMgYWJzKF9feik6ICBSZXR1cm5zIHRoZSBtYWduaXR1ZGUgb2YgX196LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9UcAorICAgIF9fY29tcGxleF9hYnMoY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisgICAgeworICAgICAgX1RwIF9feCA9IF9fei5yZWFsKCk7CisgICAgICBfVHAgX195ID0gX196LmltYWcoKTsKKyAgICAgIGNvbnN0IF9UcCBfX3MgPSBzdGQ6Om1heChhYnMoX194KSwgYWJzKF9feSkpOworICAgICAgaWYgKF9fcyA9PSBfVHAoKSkgIC8vIHdlbGwgLi4uCisgICAgICAgIHJldHVybiBfX3M7CisgICAgICBfX3ggLz0gX19zOyAKKyAgICAgIF9feSAvPSBfX3M7CisgICAgICByZXR1cm4gX19zICogc3FydChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpOworICAgIH0KKworI2lmIF9HTElCQ1hYX1VTRV9DOTlfQ09NUExFWAorICBpbmxpbmUgZmxvYXQKKyAgX19jb21wbGV4X2FicyhfX2NvbXBsZXhfXyBmbG9hdCBfX3opIHsgcmV0dXJuIF9fYnVpbHRpbl9jYWJzZihfX3opOyB9CisKKyAgaW5saW5lIGRvdWJsZQorICBfX2NvbXBsZXhfYWJzKF9fY29tcGxleF9fIGRvdWJsZSBfX3opIHsgcmV0dXJuIF9fYnVpbHRpbl9jYWJzKF9feik7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgX19jb21wbGV4X2Ficyhjb25zdCBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZSYgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2Fic2woX196KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgYWJzKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KSB7IHJldHVybiBfX2NvbXBsZXhfYWJzKF9fei5fX3JlcCgpKTsgfQorI2Vsc2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICBhYnMoY29uc3QgY29tcGxleDxfVHA+JiBfX3opIHsgcmV0dXJuIF9fY29tcGxleF9hYnMoX196KTsgfQorI2VuZGlmICAKKworCisgIC8vIDI2LjIuNy80OiBhcmcoX196KTogUmV0dXJucyB0aGUgcGhhc2UgYW5nbGUgb2YgX196LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9UcAorICAgIF9fY29tcGxleF9hcmcoY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gIGF0YW4yKF9fei5pbWFnKCksIF9fei5yZWFsKCkpOyB9CisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X0NPTVBMRVgKKyAgaW5saW5lIGZsb2F0CisgIF9fY29tcGxleF9hcmcoX19jb21wbGV4X18gZmxvYXQgX196KSB7IHJldHVybiBfX2J1aWx0aW5fY2FyZ2YoX196KTsgfQorCisgIGlubGluZSBkb3VibGUKKyAgX19jb21wbGV4X2FyZyhfX2NvbXBsZXhfXyBkb3VibGUgX196KSB7IHJldHVybiBfX2J1aWx0aW5fY2FyZyhfX3opOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIF9fY29tcGxleF9hcmcoY29uc3QgX19jb21wbGV4X18gbG9uZyBkb3VibGUmIF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2NhcmdsKF9feik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9UcAorICAgIGFyZyhjb25zdCBjb21wbGV4PF9UcD4mIF9feikgeyByZXR1cm4gX19jb21wbGV4X2FyZyhfX3ouX19yZXAoKSk7IH0KKyNlbHNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgYXJnKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KSB7IHJldHVybiBfX2NvbXBsZXhfYXJnKF9feik7IH0KKyNlbmRpZgorCisgIC8vIDI2LjIuNy81OiBub3JtKF9feikgcmV0dXJucyB0aGUgc3F1YXJlZCBtYWduaXR1ZGUgb2YgX196LgorICAvLyAgICAgQXMgZGVmaW5lZCwgbm9ybSgpIGlzIC1ub3QtIGEgbm9ybSBpcyB0aGUgY29tbW9uIG1hdGhlbWF0aWNhbAorICAvLyAgICAgc2VucyB1c2VkIGluIG51bWVyaWNzLiAgVGhlIGhlbHBlciBjbGFzcyBfTm9ybV9oZWxwZXI8PiB0cmllcyB0bworICAvLyAgICAgZGlzdGluZ3Vpc2ggYmV0d2VlbiBidWlsdGluIGZsb2F0aW5nIHBvaW50IGFuZCB0aGUgcmVzdCwgc28gYXMKKyAgLy8gICAgIHRvIGRlbGl2ZXIgYW4gYW5zd2VyIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRoZSByZWFsIHZhbHVlLgorICB0ZW1wbGF0ZTxib29sPgorICAgIHN0cnVjdCBfTm9ybV9oZWxwZXIKKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIHN0YXRpYyBpbmxpbmUgX1RwIF9TX2RvX2l0KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorICAgICAgICB7CisgICAgICAgICAgY29uc3QgX1RwIF9feCA9IF9fei5yZWFsKCk7CisgICAgICAgICAgY29uc3QgX1RwIF9feSA9IF9fei5pbWFnKCk7CisgICAgICAgICAgcmV0dXJuIF9feCAqIF9feCArIF9feSAqIF9feTsKKyAgICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfTm9ybV9oZWxwZXI8dHJ1ZT4KKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIHN0YXRpYyBpbmxpbmUgX1RwIF9TX2RvX2l0KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fcmVzID0gc3RkOjphYnMoX196KTsKKyAgICAgICAgICByZXR1cm4gX19yZXMgKiBfX3JlczsKKyAgICAgICAgfQorICAgIH07CisgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9UcAorICAgIG5vcm0oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisgICAgeworICAgICAgcmV0dXJuIF9Ob3JtX2hlbHBlcjxfX2lzX2Zsb2F0aW5nPF9UcD46Ol9fdmFsdWUgCisJJiYgIV9HTElCQ1hYX0ZBU1RfTUFUSD46Ol9TX2RvX2l0KF9feik7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgcG9sYXIoY29uc3QgX1RwJiBfX3JobywgY29uc3QgX1RwJiBfX3RoZXRhKQorICAgIHsgcmV0dXJuIGNvbXBsZXg8X1RwPihfX3JobyAqIGNvcyhfX3RoZXRhKSwgX19yaG8gKiBzaW4oX190aGV0YSkpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBjb25qKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIGNvbXBsZXg8X1RwPihfX3oucmVhbCgpLCAtX196LmltYWcoKSk7IH0KKyAgCisgIC8vIFRyYW5zY2VuZGVudGFscworCisgIC8vIDI2LjIuOC8xIGNvcyhfX3opOiAgUmV0dXJucyB0aGUgY29zaW5lIG9mIF9fei4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBfX2NvbXBsZXhfY29zKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorICAgIHsKKyAgICAgIGNvbnN0IF9UcCBfX3ggPSBfX3oucmVhbCgpOworICAgICAgY29uc3QgX1RwIF9feSA9IF9fei5pbWFnKCk7CisgICAgICByZXR1cm4gY29tcGxleDxfVHA+KGNvcyhfX3gpICogY29zaChfX3kpLCAtc2luKF9feCkgKiBzaW5oKF9feSkpOworICAgIH0KKworI2lmIF9HTElCQ1hYX1VTRV9DOTlfQ09NUExFWAorICBpbmxpbmUgX19jb21wbGV4X18gZmxvYXQKKyAgX19jb21wbGV4X2NvcyhfX2NvbXBsZXhfXyBmbG9hdCBfX3opIHsgcmV0dXJuIF9fYnVpbHRpbl9jY29zZihfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGRvdWJsZQorICBfX2NvbXBsZXhfY29zKF9fY29tcGxleF9fIGRvdWJsZSBfX3opIHsgcmV0dXJuIF9fYnVpbHRpbl9jY29zKF9feik7IH0KKworICBpbmxpbmUgX19jb21wbGV4X18gbG9uZyBkb3VibGUKKyAgX19jb21wbGV4X2Nvcyhjb25zdCBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZSYgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2Nvc2woX196KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgY29zKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KSB7IHJldHVybiBfX2NvbXBsZXhfY29zKF9fei5fX3JlcCgpKTsgfQorI2Vsc2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBjb3MoY29uc3QgY29tcGxleDxfVHA+JiBfX3opIHsgcmV0dXJuIF9fY29tcGxleF9jb3MoX196KTsgfQorI2VuZGlmCisKKyAgLy8gMjYuMi44LzIgY29zaChfX3opOiBSZXR1cm5zIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiBfX3ouCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgX19jb21wbGV4X2Nvc2goY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisgICAgeworICAgICAgY29uc3QgX1RwIF9feCA9IF9fei5yZWFsKCk7CisgICAgICBjb25zdCBfVHAgX195ID0gX196LmltYWcoKTsKKyAgICAgIHJldHVybiBjb21wbGV4PF9UcD4oY29zaChfX3gpICogY29zKF9feSksIHNpbmgoX194KSAqIHNpbihfX3kpKTsKKyAgICB9CisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X0NPTVBMRVgKKyAgaW5saW5lIF9fY29tcGxleF9fIGZsb2F0CisgIF9fY29tcGxleF9jb3NoKF9fY29tcGxleF9fIGZsb2F0IF9feikgeyByZXR1cm4gX19idWlsdGluX2Njb3NoZihfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGRvdWJsZQorICBfX2NvbXBsZXhfY29zaChfX2NvbXBsZXhfXyBkb3VibGUgX196KSB7IHJldHVybiBfX2J1aWx0aW5fY2Nvc2goX196KTsgfQorCisgIGlubGluZSBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZQorICBfX2NvbXBsZXhfY29zaChjb25zdCBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZSYgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2Nvc2hsKF9feik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIGNvc2goY29uc3QgY29tcGxleDxfVHA+JiBfX3opIHsgcmV0dXJuIF9fY29tcGxleF9jb3NoKF9fei5fX3JlcCgpKTsgfQorI2Vsc2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBjb3NoKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KSB7IHJldHVybiBfX2NvbXBsZXhfY29zaChfX3opOyB9CisjZW5kaWYKKworICAvLyAyNi4yLjgvMyBleHAoX196KTogUmV0dXJucyB0aGUgY29tcGxleCBiYXNlIGUgZXhwb25lbnRpYWwgb2YgeAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIF9fY29tcGxleF9leHAoY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gc3RkOjpwb2xhcihleHAoX196LnJlYWwoKSksIF9fei5pbWFnKCkpOyB9CisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X0NPTVBMRVgKKyAgaW5saW5lIF9fY29tcGxleF9fIGZsb2F0CisgIF9fY29tcGxleF9leHAoX19jb21wbGV4X18gZmxvYXQgX196KSB7IHJldHVybiBfX2J1aWx0aW5fY2V4cGYoX196KTsgfQorCisgIGlubGluZSBfX2NvbXBsZXhfXyBkb3VibGUKKyAgX19jb21wbGV4X2V4cChfX2NvbXBsZXhfXyBkb3VibGUgX196KSB7IHJldHVybiBfX2J1aWx0aW5fY2V4cChfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGxvbmcgZG91YmxlCisgIF9fY29tcGxleF9leHAoY29uc3QgX19jb21wbGV4X18gbG9uZyBkb3VibGUmIF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2NleHBsKF9feik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIGV4cChjb25zdCBjb21wbGV4PF9UcD4mIF9feikgeyByZXR1cm4gX19jb21wbGV4X2V4cChfX3ouX19yZXAoKSk7IH0KKyNlbHNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgZXhwKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KSB7IHJldHVybiBfX2NvbXBsZXhfZXhwKF9feik7IH0KKyNlbmRpZgorCisgIC8vIDI2LjIuOC81IGxvZyhfX3opOiBSZXR1cm5zIHRoZSBuYXR1cmFsIGNvbXBsZXggbG9nYXJpdGhtIG9mIF9fei4KKyAgLy8gICAgICAgICAgICAgICAgICAgIFRoZSBicmFuY2ggY3V0IGlzIGFsb25nIHRoZSBuZWdhdGl2ZSBheGlzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIF9fY29tcGxleF9sb2coY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gY29tcGxleDxfVHA+KGxvZyhzdGQ6OmFicyhfX3opKSwgc3RkOjphcmcoX196KSk7IH0KKworI2lmIF9HTElCQ1hYX1VTRV9DOTlfQ09NUExFWAorICBpbmxpbmUgX19jb21wbGV4X18gZmxvYXQKKyAgX19jb21wbGV4X2xvZyhfX2NvbXBsZXhfXyBmbG9hdCBfX3opIHsgcmV0dXJuIF9fYnVpbHRpbl9jbG9nZihfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGRvdWJsZQorICBfX2NvbXBsZXhfbG9nKF9fY29tcGxleF9fIGRvdWJsZSBfX3opIHsgcmV0dXJuIF9fYnVpbHRpbl9jbG9nKF9feik7IH0KKworICBpbmxpbmUgX19jb21wbGV4X18gbG9uZyBkb3VibGUKKyAgX19jb21wbGV4X2xvZyhjb25zdCBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZSYgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2xvZ2woX196KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgbG9nKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KSB7IHJldHVybiBfX2NvbXBsZXhfbG9nKF9fei5fX3JlcCgpKTsgfQorI2Vsc2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBsb2coY29uc3QgY29tcGxleDxfVHA+JiBfX3opIHsgcmV0dXJuIF9fY29tcGxleF9sb2coX196KTsgfQorI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBsb2cxMChjb25zdCBjb21wbGV4PF9UcD4mIF9feikKKyAgICB7IHJldHVybiBzdGQ6OmxvZyhfX3opIC8gbG9nKF9UcCgxMC4wKSk7IH0KKworICAvLyAyNi4yLjgvMTAgc2luKF9feik6IFJldHVybnMgdGhlIHNpbmUgb2YgX196LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIF9fY29tcGxleF9zaW4oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisgICAgeworICAgICAgY29uc3QgX1RwIF9feCA9IF9fei5yZWFsKCk7CisgICAgICBjb25zdCBfVHAgX195ID0gX196LmltYWcoKTsKKyAgICAgIHJldHVybiBjb21wbGV4PF9UcD4oc2luKF9feCkgKiBjb3NoKF9feSksIGNvcyhfX3gpICogc2luaChfX3kpKTsgCisgICAgfQorCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9DT01QTEVYCisgIGlubGluZSBfX2NvbXBsZXhfXyBmbG9hdAorICBfX2NvbXBsZXhfc2luKF9fY29tcGxleF9fIGZsb2F0IF9feikgeyByZXR1cm4gX19idWlsdGluX2NzaW5mKF9feik7IH0KKworICBpbmxpbmUgX19jb21wbGV4X18gZG91YmxlCisgIF9fY29tcGxleF9zaW4oX19jb21wbGV4X18gZG91YmxlIF9feikgeyByZXR1cm4gX19idWlsdGluX2NzaW4oX196KTsgfQorCisgIGlubGluZSBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZQorICBfX2NvbXBsZXhfc2luKGNvbnN0IF9fY29tcGxleF9fIGxvbmcgZG91YmxlJiBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jc2lubChfX3opOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBzaW4oY29uc3QgY29tcGxleDxfVHA+JiBfX3opIHsgcmV0dXJuIF9fY29tcGxleF9zaW4oX196Ll9fcmVwKCkpOyB9CisjZWxzZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIHNpbihjb25zdCBjb21wbGV4PF9UcD4mIF9feikgeyByZXR1cm4gX19jb21wbGV4X3NpbihfX3opOyB9CisjZW5kaWYKKworICAvLyAyNi4yLjgvMTEgc2luaChfX3opOiBSZXR1cm5zIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgX196LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIF9fY29tcGxleF9zaW5oKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorICAgIHsKKyAgICAgIGNvbnN0IF9UcCBfX3ggPSBfX3oucmVhbCgpOworICAgICAgY29uc3QgX1RwICBfX3kgPSBfX3ouaW1hZygpOworICAgICAgcmV0dXJuIGNvbXBsZXg8X1RwPihzaW5oKF9feCkgKiBjb3MoX195KSwgY29zaChfX3gpICogc2luKF9feSkpOworICAgIH0KKworI2lmIF9HTElCQ1hYX1VTRV9DOTlfQ09NUExFWAorICBpbmxpbmUgX19jb21wbGV4X18gZmxvYXQKKyAgX19jb21wbGV4X3NpbmgoX19jb21wbGV4X18gZmxvYXQgX196KSB7IHJldHVybiBfX2J1aWx0aW5fY3NpbmhmKF9feik7IH0gICAgICAKKworICBpbmxpbmUgX19jb21wbGV4X18gZG91YmxlCisgIF9fY29tcGxleF9zaW5oKF9fY29tcGxleF9fIGRvdWJsZSBfX3opIHsgcmV0dXJuIF9fYnVpbHRpbl9jc2luaChfX3opOyB9ICAgICAgCisKKyAgaW5saW5lIF9fY29tcGxleF9fIGxvbmcgZG91YmxlCisgIF9fY29tcGxleF9zaW5oKGNvbnN0IF9fY29tcGxleF9fIGxvbmcgZG91YmxlJiBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jc2luaGwoX196KTsgfSAgICAgIAorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgc2luaChjb25zdCBjb21wbGV4PF9UcD4mIF9feikgeyByZXR1cm4gX19jb21wbGV4X3NpbmgoX196Ll9fcmVwKCkpOyB9CisjZWxzZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIHNpbmgoY29uc3QgY29tcGxleDxfVHA+JiBfX3opIHsgcmV0dXJuIF9fY29tcGxleF9zaW5oKF9feik7IH0KKyNlbmRpZgorCisgIC8vIDI2LjIuOC8xMyBzcXJ0KF9feik6IFJldHVybnMgdGhlIGNvbXBsZXggc3F1YXJlIHJvb3Qgb2YgX196LgorICAvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBicmFuY2ggY3V0IGlzIG9uIHRoZSBuZWdhdGl2ZSBheGlzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY29tcGxleDxfVHA+CisgICAgX19jb21wbGV4X3NxcnQoY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisgICAgeworICAgICAgX1RwIF9feCA9IF9fei5yZWFsKCk7CisgICAgICBfVHAgX195ID0gX196LmltYWcoKTsKKworICAgICAgaWYgKF9feCA9PSBfVHAoKSkKKyAgICAgICAgeworICAgICAgICAgIF9UcCBfX3QgPSBzcXJ0KGFicyhfX3kpIC8gMik7CisgICAgICAgICAgcmV0dXJuIGNvbXBsZXg8X1RwPihfX3QsIF9feSA8IF9UcCgpID8gLV9fdCA6IF9fdCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIF9UcCBfX3QgPSBzcXJ0KDIgKiAoc3RkOjphYnMoX196KSArIGFicyhfX3gpKSk7CisgICAgICAgICAgX1RwIF9fdSA9IF9fdCAvIDI7CisgICAgICAgICAgcmV0dXJuIF9feCA+IF9UcCgpCisgICAgICAgICAgICA/IGNvbXBsZXg8X1RwPihfX3UsIF9feSAvIF9fdCkKKyAgICAgICAgICAgIDogY29tcGxleDxfVHA+KGFicyhfX3kpIC8gX190LCBfX3kgPCBfVHAoKSA/IC1fX3UgOiBfX3UpOworICAgICAgICB9CisgICAgfQorCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9DT01QTEVYCisgIGlubGluZSBfX2NvbXBsZXhfXyBmbG9hdAorICBfX2NvbXBsZXhfc3FydChfX2NvbXBsZXhfXyBmbG9hdCBfX3opIHsgcmV0dXJuIF9fYnVpbHRpbl9jc3FydGYoX196KTsgfQorCisgIGlubGluZSBfX2NvbXBsZXhfXyBkb3VibGUKKyAgX19jb21wbGV4X3NxcnQoX19jb21wbGV4X18gZG91YmxlIF9feikgeyByZXR1cm4gX19idWlsdGluX2NzcXJ0KF9feik7IH0KKworICBpbmxpbmUgX19jb21wbGV4X18gbG9uZyBkb3VibGUKKyAgX19jb21wbGV4X3NxcnQoY29uc3QgX19jb21wbGV4X18gbG9uZyBkb3VibGUmIF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2NzcXJ0bChfX3opOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBzcXJ0KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KSB7IHJldHVybiBfX2NvbXBsZXhfc3FydChfX3ouX19yZXAoKSk7IH0KKyNlbHNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgc3FydChjb25zdCBjb21wbGV4PF9UcD4mIF9feikgeyByZXR1cm4gX19jb21wbGV4X3NxcnQoX196KTsgfQorI2VuZGlmCisKKyAgLy8gMjYuMi44LzE0IHRhbihfX3opOiAgUmV0dXJuIHRoZSBjb21wbGV4IHRhbmdlbnQgb2YgX196LgorICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBfX2NvbXBsZXhfdGFuKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIHN0ZDo6c2luKF9feikgLyBzdGQ6OmNvcyhfX3opOyB9CisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X0NPTVBMRVgKKyAgaW5saW5lIF9fY29tcGxleF9fIGZsb2F0CisgIF9fY29tcGxleF90YW4oX19jb21wbGV4X18gZmxvYXQgX196KSB7IHJldHVybiBfX2J1aWx0aW5fY3RhbmYoX196KTsgfQorCisgIGlubGluZSBfX2NvbXBsZXhfXyBkb3VibGUKKyAgX19jb21wbGV4X3RhbihfX2NvbXBsZXhfXyBkb3VibGUgX196KSB7IHJldHVybiBfX2J1aWx0aW5fY3RhbihfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGxvbmcgZG91YmxlCisgIF9fY29tcGxleF90YW4oY29uc3QgX19jb21wbGV4X18gbG9uZyBkb3VibGUmIF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2N0YW5sKF9feik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIHRhbihjb25zdCBjb21wbGV4PF9UcD4mIF9feikgeyByZXR1cm4gX19jb21wbGV4X3RhbihfX3ouX19yZXAoKSk7IH0KKyNlbHNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgdGFuKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KSB7IHJldHVybiBfX2NvbXBsZXhfdGFuKF9feik7IH0KKyNlbmRpZgorCisKKyAgLy8gMjYuMi44LzE1IHRhbmgoX196KTogIFJldHVybnMgdGhlIGh5cGVyYm9saWMgdGFuZ2VudCBvZiBfX3ouCisgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIF9fY29tcGxleF90YW5oKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIHN0ZDo6c2luaChfX3opIC8gc3RkOjpjb3NoKF9feik7IH0KKworI2lmIF9HTElCQ1hYX1VTRV9DOTlfQ09NUExFWAorICBpbmxpbmUgX19jb21wbGV4X18gZmxvYXQKKyAgX19jb21wbGV4X3RhbmgoX19jb21wbGV4X18gZmxvYXQgX196KSB7IHJldHVybiBfX2J1aWx0aW5fY3RhbmhmKF9feik7IH0KKworICBpbmxpbmUgX19jb21wbGV4X18gZG91YmxlCisgIF9fY29tcGxleF90YW5oKF9fY29tcGxleF9fIGRvdWJsZSBfX3opIHsgcmV0dXJuIF9fYnVpbHRpbl9jdGFuaChfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGxvbmcgZG91YmxlCisgIF9fY29tcGxleF90YW5oKGNvbnN0IF9fY29tcGxleF9fIGxvbmcgZG91YmxlJiBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jdGFuaGwoX196KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgdGFuaChjb25zdCBjb21wbGV4PF9UcD4mIF9feikgeyByZXR1cm4gX19jb21wbGV4X3RhbmgoX196Ll9fcmVwKCkpOyB9CisjZWxzZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIHRhbmgoY29uc3QgY29tcGxleDxfVHA+JiBfX3opIHsgcmV0dXJuIF9fY29tcGxleF90YW5oKF9feik7IH0KKyNlbmRpZgorCisKKyAgLy8gMjYuMi44LzkgIHBvdyhfX3gsIF9feSk6IFJldHVybnMgdGhlIGNvbXBsZXggcG93ZXIgYmFzZSBvZiBfX3gKKyAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlZCB0byB0aGUgX195LXRoIHBvd2VyLiAgVGhlIGJyYW5jaAorICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY3V0IGlzIG9uIHRoZSBuZWdhdGl2ZSBheGlzLgorI2lmbmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgIC8vIERSIDg0NC4gY29tcGxleCBwb3cgcmV0dXJuIHR5cGUgaXMgYW1iaWd1b3VzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIHBvdyhjb25zdCBjb21wbGV4PF9UcD4mIF9feiwgaW50IF9fbikKKyAgICB7IHJldHVybiBzdGQ6Ol9fcG93X2hlbHBlcihfX3osIF9fbik7IH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjb21wbGV4PF9UcD4KKyAgICBwb3coY29uc3QgY29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IF9UcCYgX195KQorICAgIHsKKyNpZm5kZWYgX0dMSUJDWFhfVVNFX0M5OV9DT01QTEVYCisgICAgICBpZiAoX194ID09IF9UcCgpKQorCXJldHVybiBfVHAoKTsKKyNlbmRpZgorICAgICAgaWYgKF9feC5pbWFnKCkgPT0gX1RwKCkgJiYgX194LnJlYWwoKSA+IF9UcCgpKQorICAgICAgICByZXR1cm4gcG93KF9feC5yZWFsKCksIF9feSk7CisKKyAgICAgIGNvbXBsZXg8X1RwPiBfX3QgPSBzdGQ6OmxvZyhfX3gpOworICAgICAgcmV0dXJuIHN0ZDo6cG9sYXIoZXhwKF9feSAqIF9fdC5yZWFsKCkpLCBfX3kgKiBfX3QuaW1hZygpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBfX2NvbXBsZXhfcG93KGNvbnN0IGNvbXBsZXg8X1RwPiYgX194LCBjb25zdCBjb21wbGV4PF9UcD4mIF9feSkKKyAgICB7IHJldHVybiBfX3ggPT0gX1RwKCkgPyBfVHAoKSA6IHN0ZDo6ZXhwKF9feSAqIHN0ZDo6bG9nKF9feCkpOyB9CisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X0NPTVBMRVgKKyAgaW5saW5lIF9fY29tcGxleF9fIGZsb2F0CisgIF9fY29tcGxleF9wb3coX19jb21wbGV4X18gZmxvYXQgX194LCBfX2NvbXBsZXhfXyBmbG9hdCBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jcG93ZihfX3gsIF9feSk7IH0KKworICBpbmxpbmUgX19jb21wbGV4X18gZG91YmxlCisgIF9fY29tcGxleF9wb3coX19jb21wbGV4X18gZG91YmxlIF9feCwgX19jb21wbGV4X18gZG91YmxlIF9feSkKKyAgeyByZXR1cm4gX19idWlsdGluX2Nwb3coX194LCBfX3kpOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGxvbmcgZG91YmxlCisgIF9fY29tcGxleF9wb3coY29uc3QgX19jb21wbGV4X18gbG9uZyBkb3VibGUmIF9feCwKKwkJY29uc3QgX19jb21wbGV4X18gbG9uZyBkb3VibGUmIF9feSkKKyAgeyByZXR1cm4gX19idWlsdGluX2Nwb3dsKF9feCwgX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgcG93KGNvbnN0IGNvbXBsZXg8X1RwPiYgX194LCBjb25zdCBjb21wbGV4PF9UcD4mIF9feSkKKyAgICB7IHJldHVybiBfX2NvbXBsZXhfcG93KF9feC5fX3JlcCgpLCBfX3kuX19yZXAoKSk7IH0KKyNlbHNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgcG93KGNvbnN0IGNvbXBsZXg8X1RwPiYgX194LCBjb25zdCBjb21wbGV4PF9UcD4mIF9feSkKKyAgICB7IHJldHVybiBfX2NvbXBsZXhfcG93KF9feCwgX195KTsgfQorI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBwb3coY29uc3QgX1RwJiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQorICAgIHsKKyAgICAgIHJldHVybiBfX3ggPiBfVHAoKSA/IHN0ZDo6cG9sYXIocG93KF9feCwgX195LnJlYWwoKSksCisJCQkJICAgICAgX195LmltYWcoKSAqIGxvZyhfX3gpKQorCSAgICAgICAgICAgICAgICAgOiBzdGQ6OnBvdyhjb21wbGV4PF9UcD4oX194KSwgX195KTsKKyAgICB9CisKKyAgLy8gMjYuMi4zICBjb21wbGV4IHNwZWNpYWxpemF0aW9ucworICAvLyBjb21wbGV4PGZsb2F0PiBzcGVjaWFsaXphdGlvbgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGNvbXBsZXg8ZmxvYXQ+CisgICAgeworICAgICAgdHlwZWRlZiBmbG9hdCB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBfX2NvbXBsZXhfXyBmbG9hdCBfQ29tcGxleFQ7CisKKyAgICAgIGNvbXBsZXgoX0NvbXBsZXhUIF9feikgOiBfTV92YWx1ZShfX3opIHsgfQorCisgICAgICBjb21wbGV4KGZsb2F0IF9fciA9IDAuMGYsIGZsb2F0IF9faSA9IDAuMGYpCisgICAgICB7CisJX19yZWFsX18gX01fdmFsdWUgPSBfX3I7CisJX19pbWFnX18gX01fdmFsdWUgPSBfX2k7CisgICAgICB9CisKKyAgICAgIGV4cGxpY2l0IGNvbXBsZXgoY29uc3QgY29tcGxleDxkb3VibGU+Jik7CisgICAgICBleHBsaWNpdCBjb21wbGV4KGNvbnN0IGNvbXBsZXg8bG9uZyBkb3VibGU+Jik7CQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSIDM4Ny4gc3RkOjpjb21wbGV4IG92ZXItZW5jYXBzdWxhdGVkLgorICAgICAgZmxvYXQgcmVhbCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3JlYWxfXyBfTV92YWx1ZTsgfQorCisgICAgICBmbG9hdCBpbWFnKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9faW1hZ19fIF9NX3ZhbHVlOyB9CisjZWxzZQorICAgICAgZmxvYXQmIHJlYWwoKQorICAgICAgeyByZXR1cm4gX19yZWFsX18gX01fdmFsdWU7IH0KKworICAgICAgY29uc3QgZmxvYXQmIHJlYWwoKSBjb25zdAorICAgICAgeyByZXR1cm4gX19yZWFsX18gX01fdmFsdWU7IH0gICAgICAKKworICAgICAgZmxvYXQmIGltYWcoKQorICAgICAgeyByZXR1cm4gX19pbWFnX18gX01fdmFsdWU7IH0KKworICAgICAgY29uc3QgZmxvYXQmIGltYWcoKSBjb25zdAorICAgICAgeyByZXR1cm4gX19pbWFnX18gX01fdmFsdWU7IH0KKyNlbmRpZgorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUiAzODcuIHN0ZDo6Y29tcGxleCBvdmVyLWVuY2Fwc3VsYXRlZC4KKyAgICAgIHZvaWQgcmVhbChmbG9hdCBfX3ZhbCkKKyAgICAgIHsgX19yZWFsX18gX01fdmFsdWUgPSBfX3ZhbDsgfQorCisgICAgICB2b2lkIGltYWcoZmxvYXQgX192YWwpCisgICAgICB7IF9faW1hZ19fIF9NX3ZhbHVlID0gX192YWw7IH0KKworICAgICAgY29tcGxleDxmbG9hdD4mCisgICAgICBvcGVyYXRvcj0oZmxvYXQgX19mKQorICAgICAgeworCV9fcmVhbF9fIF9NX3ZhbHVlID0gX19mOworCV9faW1hZ19fIF9NX3ZhbHVlID0gMC4wZjsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGNvbXBsZXg8ZmxvYXQ+JgorICAgICAgb3BlcmF0b3IrPShmbG9hdCBfX2YpCisgICAgICB7CisJX19yZWFsX18gX01fdmFsdWUgKz0gX19mOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgY29tcGxleDxmbG9hdD4mCisgICAgICBvcGVyYXRvci09KGZsb2F0IF9fZikKKyAgICAgIHsKKwlfX3JlYWxfXyBfTV92YWx1ZSAtPSBfX2Y7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBjb21wbGV4PGZsb2F0PiYKKyAgICAgIG9wZXJhdG9yKj0oZmxvYXQgX19mKQorICAgICAgeworCV9NX3ZhbHVlICo9IF9fZjsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGNvbXBsZXg8ZmxvYXQ+JgorICAgICAgb3BlcmF0b3IvPShmbG9hdCBfX2YpCisgICAgICB7CisJX01fdmFsdWUgLz0gX19mOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLy8gTGV0IHRoZSBjb21waWxlciBzeW50aGVzaXplIHRoZSBjb3B5IGFuZCBhc3NpZ25tZW50CisgICAgICAvLyBvcGVyYXRvci4gIEl0IGFsd2F5cyBkb2VzIGEgcHJldHR5IGdvb2Qgam9iLgorICAgICAgLy8gY29tcGxleCYgb3BlcmF0b3I9KGNvbnN0IGNvbXBsZXgmKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBjb21wbGV4PGZsb2F0PiYKKyAgICAgICAgb3BlcmF0b3I9KGNvbnN0IGNvbXBsZXg8X1RwPiYgIF9feikKKwl7CisJICBfX3JlYWxfXyBfTV92YWx1ZSA9IF9fei5yZWFsKCk7CisJICBfX2ltYWdfXyBfTV92YWx1ZSA9IF9fei5pbWFnKCk7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIGNvbXBsZXg8ZmxvYXQ+JgorICAgICAgICBvcGVyYXRvcis9KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorCXsKKwkgIF9fcmVhbF9fIF9NX3ZhbHVlICs9IF9fei5yZWFsKCk7CisJICBfX2ltYWdfXyBfTV92YWx1ZSArPSBfX3ouaW1hZygpOworCSAgcmV0dXJuICp0aGlzOworCX0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX1RwPgorICAgICAgICBjb21wbGV4PGZsb2F0PiYKKyAgICAgICAgb3BlcmF0b3ItPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKKwl7CisJICBfX3JlYWxfXyBfTV92YWx1ZSAtPSBfX3oucmVhbCgpOworCSAgX19pbWFnX18gX01fdmFsdWUgLT0gX196LmltYWcoKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9UcD4KKyAgICAgICAgY29tcGxleDxmbG9hdD4mCisgICAgICAgIG9wZXJhdG9yKj0oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisJeworCSAgX0NvbXBsZXhUIF9fdDsKKwkgIF9fcmVhbF9fIF9fdCA9IF9fei5yZWFsKCk7CisJICBfX2ltYWdfXyBfX3QgPSBfX3ouaW1hZygpOworCSAgX01fdmFsdWUgKj0gX190OworCSAgcmV0dXJuICp0aGlzOworCX0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX1RwPgorICAgICAgICBjb21wbGV4PGZsb2F0PiYKKyAgICAgICAgb3BlcmF0b3IvPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKKwl7CisJICBfQ29tcGxleFQgX190OworCSAgX19yZWFsX18gX190ID0gX196LnJlYWwoKTsKKwkgIF9faW1hZ19fIF9fdCA9IF9fei5pbWFnKCk7CisJICBfTV92YWx1ZSAvPSBfX3Q7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICBjb25zdCBfQ29tcGxleFQmIF9fcmVwKCkgY29uc3QgeyByZXR1cm4gX01fdmFsdWU7IH0KKworICAgIHByaXZhdGU6CisgICAgICBfQ29tcGxleFQgX01fdmFsdWU7CisgICAgfTsKKworICAvLyAyNi4yLjMgIGNvbXBsZXggc3BlY2lhbGl6YXRpb25zCisgIC8vIGNvbXBsZXg8ZG91YmxlPiBzcGVjaWFsaXphdGlvbgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGNvbXBsZXg8ZG91YmxlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgZG91YmxlIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9fY29tcGxleF9fIGRvdWJsZSBfQ29tcGxleFQ7CisKKyAgICAgIGNvbXBsZXgoX0NvbXBsZXhUIF9feikgOiBfTV92YWx1ZShfX3opIHsgfQorCisgICAgICBjb21wbGV4KGRvdWJsZSBfX3IgPSAwLjAsIGRvdWJsZSBfX2kgPSAwLjApCisgICAgICB7CisJX19yZWFsX18gX01fdmFsdWUgPSBfX3I7CisJX19pbWFnX18gX01fdmFsdWUgPSBfX2k7CisgICAgICB9CisKKyAgICAgIGNvbXBsZXgoY29uc3QgY29tcGxleDxmbG9hdD4mIF9feikKKyAgICAgIDogX01fdmFsdWUoX196Ll9fcmVwKCkpIHsgfQorCisgICAgICBleHBsaWNpdCBjb21wbGV4KGNvbnN0IGNvbXBsZXg8bG9uZyBkb3VibGU+Jik7CQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSIDM4Ny4gc3RkOjpjb21wbGV4IG92ZXItZW5jYXBzdWxhdGVkLgorICAgICAgZG91YmxlIHJlYWwoKSBjb25zdAorICAgICAgeyByZXR1cm4gX19yZWFsX18gX01fdmFsdWU7IH0KKworICAgICAgZG91YmxlIGltYWcoKSBjb25zdAorICAgICAgeyByZXR1cm4gX19pbWFnX18gX01fdmFsdWU7IH0KKyNlbHNlCisgICAgICBkb3VibGUmIHJlYWwoKQorICAgICAgeyByZXR1cm4gX19yZWFsX18gX01fdmFsdWU7IH0KKworICAgICAgY29uc3QgZG91YmxlJiByZWFsKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fcmVhbF9fIF9NX3ZhbHVlOyB9CisKKyAgICAgIGRvdWJsZSYgaW1hZygpCisgICAgICB7IHJldHVybiBfX2ltYWdfXyBfTV92YWx1ZTsgfQorCisgICAgICBjb25zdCBkb3VibGUmIGltYWcoKSBjb25zdAorICAgICAgeyByZXR1cm4gX19pbWFnX18gX01fdmFsdWU7IH0KKyNlbmRpZgorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUiAzODcuIHN0ZDo6Y29tcGxleCBvdmVyLWVuY2Fwc3VsYXRlZC4KKyAgICAgIHZvaWQgcmVhbChkb3VibGUgX192YWwpCisgICAgICB7IF9fcmVhbF9fIF9NX3ZhbHVlID0gX192YWw7IH0KKworICAgICAgdm9pZCBpbWFnKGRvdWJsZSBfX3ZhbCkKKyAgICAgIHsgX19pbWFnX18gX01fdmFsdWUgPSBfX3ZhbDsgfQorCisgICAgICBjb21wbGV4PGRvdWJsZT4mCisgICAgICBvcGVyYXRvcj0oZG91YmxlIF9fZCkKKyAgICAgIHsKKwlfX3JlYWxfXyBfTV92YWx1ZSA9IF9fZDsKKwlfX2ltYWdfXyBfTV92YWx1ZSA9IDAuMDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGNvbXBsZXg8ZG91YmxlPiYKKyAgICAgIG9wZXJhdG9yKz0oZG91YmxlIF9fZCkKKyAgICAgIHsKKwlfX3JlYWxfXyBfTV92YWx1ZSArPSBfX2Q7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCQorICAgICAgY29tcGxleDxkb3VibGU+JgorICAgICAgb3BlcmF0b3ItPShkb3VibGUgX19kKQorICAgICAgeworCV9fcmVhbF9fIF9NX3ZhbHVlIC09IF9fZDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGNvbXBsZXg8ZG91YmxlPiYKKyAgICAgIG9wZXJhdG9yKj0oZG91YmxlIF9fZCkKKyAgICAgIHsKKwlfTV92YWx1ZSAqPSBfX2Q7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBjb21wbGV4PGRvdWJsZT4mCisgICAgICBvcGVyYXRvci89KGRvdWJsZSBfX2QpCisgICAgICB7CisJX01fdmFsdWUgLz0gX19kOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLy8gVGhlIGNvbXBpbGVyIHdpbGwgc3ludGhlc2l6ZSB0aGlzLCBlZmZpY2llbnRseS4KKyAgICAgIC8vIGNvbXBsZXgmIG9wZXJhdG9yPShjb25zdCBjb21wbGV4Jik7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgY29tcGxleDxkb3VibGU+JgorICAgICAgICBvcGVyYXRvcj0oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisJeworCSAgX19yZWFsX18gX01fdmFsdWUgPSBfX3oucmVhbCgpOworCSAgX19pbWFnX18gX01fdmFsdWUgPSBfX3ouaW1hZygpOworCSAgcmV0dXJuICp0aGlzOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBjb21wbGV4PGRvdWJsZT4mCisgICAgICAgIG9wZXJhdG9yKz0oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisJeworCSAgX19yZWFsX18gX01fdmFsdWUgKz0gX196LnJlYWwoKTsKKwkgIF9faW1hZ19fIF9NX3ZhbHVlICs9IF9fei5pbWFnKCk7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIGNvbXBsZXg8ZG91YmxlPiYKKyAgICAgICAgb3BlcmF0b3ItPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKKwl7CisJICBfX3JlYWxfXyBfTV92YWx1ZSAtPSBfX3oucmVhbCgpOworCSAgX19pbWFnX18gX01fdmFsdWUgLT0gX196LmltYWcoKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgY29tcGxleDxkb3VibGU+JgorICAgICAgICBvcGVyYXRvcio9KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorCXsKKwkgIF9Db21wbGV4VCBfX3Q7CisJICBfX3JlYWxfXyBfX3QgPSBfX3oucmVhbCgpOworCSAgX19pbWFnX18gX190ID0gX196LmltYWcoKTsKKwkgIF9NX3ZhbHVlICo9IF9fdDsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgY29tcGxleDxkb3VibGU+JgorICAgICAgICBvcGVyYXRvci89KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorCXsKKwkgIF9Db21wbGV4VCBfX3Q7CisJICBfX3JlYWxfXyBfX3QgPSBfX3oucmVhbCgpOworCSAgX19pbWFnX18gX190ID0gX196LmltYWcoKTsKKwkgIF9NX3ZhbHVlIC89IF9fdDsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIGNvbnN0IF9Db21wbGV4VCYgX19yZXAoKSBjb25zdCB7IHJldHVybiBfTV92YWx1ZTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIF9Db21wbGV4VCBfTV92YWx1ZTsKKyAgICB9OworCisgIC8vIDI2LjIuMyAgY29tcGxleCBzcGVjaWFsaXphdGlvbnMKKyAgLy8gY29tcGxleDxsb25nIGRvdWJsZT4gc3BlY2lhbGl6YXRpb24KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBjb21wbGV4PGxvbmcgZG91YmxlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgbG9uZyBkb3VibGUgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX19jb21wbGV4X18gbG9uZyBkb3VibGUgX0NvbXBsZXhUOworCisgICAgICBjb21wbGV4KF9Db21wbGV4VCBfX3opIDogX01fdmFsdWUoX196KSB7IH0KKworICAgICAgY29tcGxleChsb25nIGRvdWJsZSBfX3IgPSAwLjBMLCBsb25nIGRvdWJsZSBfX2kgPSAwLjBMKQorICAgICAgeworCV9fcmVhbF9fIF9NX3ZhbHVlID0gX19yOworCV9faW1hZ19fIF9NX3ZhbHVlID0gX19pOworICAgICAgfQorCisgICAgICBjb21wbGV4KGNvbnN0IGNvbXBsZXg8ZmxvYXQ+JiBfX3opCisgICAgICA6IF9NX3ZhbHVlKF9fei5fX3JlcCgpKSB7IH0KKworICAgICAgY29tcGxleChjb25zdCBjb21wbGV4PGRvdWJsZT4mIF9feikKKyAgICAgIDogX01fdmFsdWUoX196Ll9fcmVwKCkpIHsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSIDM4Ny4gc3RkOjpjb21wbGV4IG92ZXItZW5jYXBzdWxhdGVkLgorICAgICAgbG9uZyBkb3VibGUgcmVhbCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3JlYWxfXyBfTV92YWx1ZTsgfQorCisgICAgICBsb25nIGRvdWJsZSBpbWFnKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9faW1hZ19fIF9NX3ZhbHVlOyB9CisjZWxzZQorICAgICAgbG9uZyBkb3VibGUmIHJlYWwoKQorICAgICAgeyByZXR1cm4gX19yZWFsX18gX01fdmFsdWU7IH0KKworICAgICAgY29uc3QgbG9uZyBkb3VibGUmIHJlYWwoKSBjb25zdAorICAgICAgeyByZXR1cm4gX19yZWFsX18gX01fdmFsdWU7IH0KKworICAgICAgbG9uZyBkb3VibGUmIGltYWcoKQorICAgICAgeyByZXR1cm4gX19pbWFnX18gX01fdmFsdWU7IH0KKworICAgICAgY29uc3QgbG9uZyBkb3VibGUmIGltYWcoKSBjb25zdAorICAgICAgeyByZXR1cm4gX19pbWFnX18gX01fdmFsdWU7IH0KKyNlbmRpZgorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUiAzODcuIHN0ZDo6Y29tcGxleCBvdmVyLWVuY2Fwc3VsYXRlZC4KKyAgICAgIHZvaWQgcmVhbChsb25nIGRvdWJsZSBfX3ZhbCkKKyAgICAgIHsgX19yZWFsX18gX01fdmFsdWUgPSBfX3ZhbDsgfQorCisgICAgICB2b2lkIGltYWcobG9uZyBkb3VibGUgX192YWwpCisgICAgICB7IF9faW1hZ19fIF9NX3ZhbHVlID0gX192YWw7IH0KKworICAgICAgY29tcGxleDxsb25nIGRvdWJsZT4mCisgICAgICBvcGVyYXRvcj0obG9uZyBkb3VibGUgX19yKQorICAgICAgeworCV9fcmVhbF9fIF9NX3ZhbHVlID0gX19yOworCV9faW1hZ19fIF9NX3ZhbHVlID0gMC4wTDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGNvbXBsZXg8bG9uZyBkb3VibGU+JgorICAgICAgb3BlcmF0b3IrPShsb25nIGRvdWJsZSBfX3IpCisgICAgICB7CisJX19yZWFsX18gX01fdmFsdWUgKz0gX19yOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgY29tcGxleDxsb25nIGRvdWJsZT4mCisgICAgICBvcGVyYXRvci09KGxvbmcgZG91YmxlIF9fcikKKyAgICAgIHsKKwlfX3JlYWxfXyBfTV92YWx1ZSAtPSBfX3I7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBjb21wbGV4PGxvbmcgZG91YmxlPiYKKyAgICAgIG9wZXJhdG9yKj0obG9uZyBkb3VibGUgX19yKQorICAgICAgeworCV9NX3ZhbHVlICo9IF9fcjsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGNvbXBsZXg8bG9uZyBkb3VibGU+JgorICAgICAgb3BlcmF0b3IvPShsb25nIGRvdWJsZSBfX3IpCisgICAgICB7CisJX01fdmFsdWUgLz0gX19yOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLy8gVGhlIGNvbXBpbGVyIGtub3dzIGhvdyB0byBkbyB0aGlzIGVmZmljaWVudGx5CisgICAgICAvLyBjb21wbGV4JiBvcGVyYXRvcj0oY29uc3QgY29tcGxleCYpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIGNvbXBsZXg8bG9uZyBkb3VibGU+JgorICAgICAgICBvcGVyYXRvcj0oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisJeworCSAgX19yZWFsX18gX01fdmFsdWUgPSBfX3oucmVhbCgpOworCSAgX19pbWFnX18gX01fdmFsdWUgPSBfX3ouaW1hZygpOworCSAgcmV0dXJuICp0aGlzOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBjb21wbGV4PGxvbmcgZG91YmxlPiYKKwlvcGVyYXRvcis9KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorCXsKKwkgIF9fcmVhbF9fIF9NX3ZhbHVlICs9IF9fei5yZWFsKCk7CisJICBfX2ltYWdfXyBfTV92YWx1ZSArPSBfX3ouaW1hZygpOworCSAgcmV0dXJuICp0aGlzOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBjb21wbGV4PGxvbmcgZG91YmxlPiYKKwlvcGVyYXRvci09KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorCXsKKwkgIF9fcmVhbF9fIF9NX3ZhbHVlIC09IF9fei5yZWFsKCk7CisJICBfX2ltYWdfXyBfTV92YWx1ZSAtPSBfX3ouaW1hZygpOworCSAgcmV0dXJuICp0aGlzOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBjb21wbGV4PGxvbmcgZG91YmxlPiYKKwlvcGVyYXRvcio9KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorCXsKKwkgIF9Db21wbGV4VCBfX3Q7CisJICBfX3JlYWxfXyBfX3QgPSBfX3oucmVhbCgpOworCSAgX19pbWFnX18gX190ID0gX196LmltYWcoKTsKKwkgIF9NX3ZhbHVlICo9IF9fdDsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgY29tcGxleDxsb25nIGRvdWJsZT4mCisJb3BlcmF0b3IvPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKKwl7CisJICBfQ29tcGxleFQgX190OworCSAgX19yZWFsX18gX190ID0gX196LnJlYWwoKTsKKwkgIF9faW1hZ19fIF9fdCA9IF9fei5pbWFnKCk7CisJICBfTV92YWx1ZSAvPSBfX3Q7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICBjb25zdCBfQ29tcGxleFQmIF9fcmVwKCkgY29uc3QgeyByZXR1cm4gX01fdmFsdWU7IH0KKworICAgIHByaXZhdGU6CisgICAgICBfQ29tcGxleFQgX01fdmFsdWU7CisgICAgfTsKKworICAvLyBUaGVzZSBiaXRzIGhhdmUgdG8gYmUgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUsIHNvIHRoYXQgdGhlCisgIC8vIHNwZWNpYWxpemF0aW9ucyBoYXZlIGFsbCBiZWVuIGRlZmluZWQuCisgIGlubGluZQorICBjb21wbGV4PGZsb2F0Pjo6Y29tcGxleChjb25zdCBjb21wbGV4PGRvdWJsZT4mIF9feikKKyAgOiBfTV92YWx1ZShfX3ouX19yZXAoKSkgeyB9CisKKyAgaW5saW5lCisgIGNvbXBsZXg8ZmxvYXQ+Ojpjb21wbGV4KGNvbnN0IGNvbXBsZXg8bG9uZyBkb3VibGU+JiBfX3opCisgIDogX01fdmFsdWUoX196Ll9fcmVwKCkpIHsgfQorCisgIGlubGluZQorICBjb21wbGV4PGRvdWJsZT46OmNvbXBsZXgoY29uc3QgY29tcGxleDxsb25nIGRvdWJsZT4mIF9feikKKyAgOiBfTV92YWx1ZShfX3ouX19yZXAoKSkgeyB9CisKKyAgLy8gSW5oaWJpdCBpbXBsaWNpdCBpbnN0YW50aWF0aW9ucyBmb3IgcmVxdWlyZWQgaW5zdGFudGlhdGlvbnMsCisgIC8vIHdoaWNoIGFyZSBkZWZpbmVkIHZpYSBleHBsaWNpdCBpbnN0YW50aWF0aW9ucyBlbHNld2hlcmUuCisgIC8vIE5COiAgVGhpcyBzeW50YXggaXMgYSBHTlUgZXh0ZW5zaW9uLgorI2lmIF9HTElCQ1hYX0VYVEVSTl9URU1QTEFURQorICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgY29tcGxleDxmbG9hdD4mKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IGNvbXBsZXg8ZmxvYXQ+Jik7CisgIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBjb21wbGV4PGRvdWJsZT4mKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IGNvbXBsZXg8ZG91YmxlPiYpOworICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgY29tcGxleDxsb25nIGRvdWJsZT4mKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IGNvbXBsZXg8bG9uZyBkb3VibGU+Jik7CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJlYW0mLCBjb21wbGV4PGZsb2F0PiYpOworICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBjb25zdCBjb21wbGV4PGZsb2F0PiYpOworICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJlYW0mLCBjb21wbGV4PGRvdWJsZT4mKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY29uc3QgY29tcGxleDxkb3VibGU+Jik7CisgIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgb3BlcmF0b3I+Pih3aXN0cmVhbSYsIGNvbXBsZXg8bG9uZyBkb3VibGU+Jik7CisgIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIGNvbnN0IGNvbXBsZXg8bG9uZyBkb3VibGU+Jik7CisjZW5kaWYKKyNlbmRpZgorCisgIC8vIEB9IGdyb3VwIGNvbXBsZXhfbnVtYmVycworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisKKyAgLy8gU2VlIGV4dC90eXBlX3RyYWl0cy5oIGZvciB0aGUgcHJpbWFyeSB0ZW1wbGF0ZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgc3RydWN0IF9fcHJvbW90ZV8yPHN0ZDo6Y29tcGxleDxfVHA+LCBfVXA+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgc3RkOjpjb21wbGV4PHR5cGVuYW1lIF9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlPiBfX3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBzdHJ1Y3QgX19wcm9tb3RlXzI8X1RwLCBzdGQ6OmNvbXBsZXg8X1VwPiA+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgc3RkOjpjb21wbGV4PHR5cGVuYW1lIF9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlPiBfX3R5cGU7CisgICAgfTsKKyAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIHN0cnVjdCBfX3Byb21vdGVfMjxzdGQ6OmNvbXBsZXg8X1RwPiwgc3RkOjpjb21wbGV4PF9VcD4gPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHN0ZDo6Y29tcGxleDx0eXBlbmFtZSBfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZT4gX190eXBlOworICAgIH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisjICBpZiBkZWZpbmVkKF9HTElCQ1hYX0lOQ0xVREVfQVNfVFIxKQorIyAgICBlcnJvciBDKysweCBoZWFkZXIgY2Fubm90IGJlIGluY2x1ZGVkIGZyb20gVFIxIGhlYWRlcgorIyAgZW5kaWYKKyMgIGlmIGRlZmluZWQoX0dMSUJDWFhfSU5DTFVERV9BU19DWFgwWCkKKyMgICAgaW5jbHVkZSA8dHIxX2ltcGwvY29tcGxleD4KKyMgIGVsc2UKKyMgICAgZGVmaW5lIF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgKKyMgICAgZGVmaW5lIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9UUjEKKyMgICAgZGVmaW5lIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVFIxCisjICAgIGRlZmluZSBfR0xJQkNYWF9UUjEKKyMgICAgaW5jbHVkZSA8dHIxX2ltcGwvY29tcGxleD4KKyMgICAgdW5kZWYgX0dMSUJDWFhfVFIxCisjICAgIHVuZGVmIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVFIxCisjICAgIHVuZGVmIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9UUjEKKyMgICAgdW5kZWYgX0dMSUJDWFhfSU5DTFVERV9BU19DWFgwWAorIyAgZW5kaWYKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KKyAgLy8gRFIgNzgxLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0ZDo6Y29tcGxleDxfVHA+IHByb2ooY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBfX2NvbXBsZXhfcHJvaihjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX196KQorICAgIHsKKyAgICAgIGNvbnN0IF9UcCBfX2RlbiA9IChfX3oucmVhbCgpICogX196LnJlYWwoKQorCQkJICsgX196LmltYWcoKSAqIF9fei5pbWFnKCkgKyBfVHAoMS4wKSk7CisKKyAgICAgIHJldHVybiBzdGQ6OmNvbXBsZXg8X1RwPigoX1RwKDIuMCkgKiBfX3oucmVhbCgpKSAvIF9fZGVuLAorCQkJICAgICAgIChfVHAoMi4wKSAqIF9fei5pbWFnKCkpIC8gX19kZW4pOworICAgIH0KKworI2lmIF9HTElCQ1hYX1VTRV9DOTlfQ09NUExFWAorICBpbmxpbmUgX19jb21wbGV4X18gZmxvYXQKKyAgX19jb21wbGV4X3Byb2ooX19jb21wbGV4X18gZmxvYXQgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY3Byb2pmKF9feik7IH0KKworICBpbmxpbmUgX19jb21wbGV4X18gZG91YmxlCisgIF9fY29tcGxleF9wcm9qKF9fY29tcGxleF9fIGRvdWJsZSBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jcHJvaihfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGxvbmcgZG91YmxlCisgIF9fY29tcGxleF9wcm9qKGNvbnN0IF9fY29tcGxleF9fIGxvbmcgZG91YmxlJiBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jcHJvamwoX196KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBwcm9qKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gX19jb21wbGV4X3Byb2ooX196Ll9fcmVwKCkpOyB9CisjZWxzZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHN0ZDo6Y29tcGxleDxfVHA+CisgICAgcHJvaihjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIF9fY29tcGxleF9wcm9qKF9feik7IH0KKyNlbmRpZgorCisgIC8vIERSIDExMzcuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlCisgICAgcHJvaihfVHAgX194KQorICAgIHsgcmV0dXJuIF9feDsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlCisgICAgY29uaihfVHAgX194KQorICAgIHsgcmV0dXJuIF9feDsgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZgorCisjZW5kaWYJLyogX0dMSUJDWFhfQ09NUExFWCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jb21wbGV4LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2NvbXBsZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGM1OTI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jb21wbGV4LmgKQEAgLTAsMCArMSw0MiBAQAorLy8gLSotIEMrKyAtKi0gY29tcGF0aWJpbGl0eSBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgY29tcGxleC5oCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisjIGluY2x1ZGUgPGNjb21wbGV4PgorI2Vsc2UKKyMgaWYgX0dMSUJDWFhfSEFWRV9DT01QTEVYX0gKKyMgIGluY2x1ZGVfbmV4dCA8Y29tcGxleC5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgX0dMSUJDWFhfQ09NUExFWF9ICisjZGVmaW5lIF9HTElCQ1hYX0NPTVBMRVhfSCAxCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jb25kaXRpb25fdmFyaWFibGUgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2NvbmRpdGlvbl92YXJpYWJsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWNlMjA3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jb25kaXRpb25fdmFyaWFibGUKQEAgLTAsMCArMSwyNjMgQEAKKy8vIDxjb25kaXRpb25fdmFyaWFibGU+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgY29uZGl0aW9uX3ZhcmlhYmxlCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0NPTkRJVElPTl9WQVJJQUJMRQorI2RlZmluZSBfR0xJQkNYWF9DT05ESVRJT05fVkFSSUFCTEUgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpZm5kZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyMgaW5jbHVkZSA8Yml0cy9jKysweF93YXJuaW5nLmg+CisjZWxzZQorCisjaW5jbHVkZSA8Y2hyb25vPgorI2luY2x1ZGUgPG11dGV4PiAvLyB1bmlxdWVfbG9jaworCisjaWYgZGVmaW5lZChfR0xJQkNYWF9IQVNfR1RIUkVBRFMpICYmIGRlZmluZWQoX0dMSUJDWFhfVVNFX0M5OV9TVERJTlRfVFIxKQorCituYW1lc3BhY2Ugc3RkCit7CisgIC8qKgorICAgKiBAZGVmZ3JvdXAgY29uZGl0aW9uX3ZhcmlhYmxlcyBDb25kaXRpb24gVmFyaWFibGVzCisgICAqIEBpbmdyb3VwIGNvbmN1cnJlbmN5CisgICAqCisgICAqIENsYXNzZXMgZm9yIGNvbmRpdGlvbl92YXJpYWJsZSBzdXBwb3J0LgorICAgKiBAeworICAgKi8KKworICAvLy8gY3Zfc3RhdHVzCisgIGVudW0gY2xhc3MgY3Zfc3RhdHVzIHsgbm9fdGltZW91dCwgdGltZW91dCB9OworICAKKyAgLy8vIGNvbmRpdGlvbl92YXJpYWJsZQorICBjbGFzcyBjb25kaXRpb25fdmFyaWFibGUKKyAgeworICAgIHR5cGVkZWYgY2hyb25vOjpzeXN0ZW1fY2xvY2sJX19jbG9ja190OworICAgIHR5cGVkZWYgX19ndGhyZWFkX2NvbmRfdAkJX19uYXRpdmVfdHlwZTsKKyAgICBfX25hdGl2ZV90eXBlCQkJX01fY29uZDsKKworICBwdWJsaWM6CisgICAgdHlwZWRlZiBfX25hdGl2ZV90eXBlKiAJCW5hdGl2ZV9oYW5kbGVfdHlwZTsKKworICAgIGNvbmRpdGlvbl92YXJpYWJsZSgpIHRocm93ICgpOworICAgIH5jb25kaXRpb25fdmFyaWFibGUoKSB0aHJvdyAoKTsKKworICAgIGNvbmRpdGlvbl92YXJpYWJsZShjb25zdCBjb25kaXRpb25fdmFyaWFibGUmKSA9IGRlbGV0ZTsKKyAgICBjb25kaXRpb25fdmFyaWFibGUmIG9wZXJhdG9yPShjb25zdCBjb25kaXRpb25fdmFyaWFibGUmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQKKyAgICBub3RpZnlfb25lKCk7CisKKyAgICB2b2lkCisgICAgbm90aWZ5X2FsbCgpOworCisgICAgdm9pZAorICAgIHdhaXQodW5pcXVlX2xvY2s8bXV0ZXg+JiBfX2xvY2spOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICAgIHZvaWQKKyAgICAgIHdhaXQodW5pcXVlX2xvY2s8bXV0ZXg+JiBfX2xvY2ssIF9QcmVkaWNhdGUgX19wKQorICAgICAgeworCXdoaWxlICghX19wKCkpCisJICB3YWl0KF9fbG9jayk7CisgICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRHVyYXRpb24+CisgICAgICBjdl9zdGF0dXMKKyAgICAgIHdhaXRfdW50aWwodW5pcXVlX2xvY2s8bXV0ZXg+JiBfX2xvY2ssCisJCSBjb25zdCBjaHJvbm86OnRpbWVfcG9pbnQ8X19jbG9ja190LCBfRHVyYXRpb24+JiBfX2F0aW1lKQorICAgICAgeyByZXR1cm4gX193YWl0X3VudGlsX2ltcGwoX19sb2NrLCBfX2F0aW1lKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Nsb2NrLCB0eXBlbmFtZSBfRHVyYXRpb24+CisgICAgICBjdl9zdGF0dXMKKyAgICAgIHdhaXRfdW50aWwodW5pcXVlX2xvY2s8bXV0ZXg+JiBfX2xvY2ssCisJCSBjb25zdCBjaHJvbm86OnRpbWVfcG9pbnQ8X0Nsb2NrLCBfRHVyYXRpb24+JiBfX2F0aW1lKQorICAgICAgeworCS8vIERSIDg4NyAtIFN5bmMgdW5rbm93biBjbG9jayB0byBrbm93biBjbG9jay4KKwljb25zdCB0eXBlbmFtZSBfQ2xvY2s6OnRpbWVfcG9pbnQgX19jX2VudHJ5ID0gX0Nsb2NrOjpub3coKTsKKwljb25zdCBfX2Nsb2NrX3Q6OnRpbWVfcG9pbnQgX19zX2VudHJ5ID0gX19jbG9ja190Ojpub3coKTsKKwljb25zdCBjaHJvbm86Om5hbm9zZWNvbmRzIF9fZGVsdGEgPSBfX2F0aW1lIC0gX19jX2VudHJ5OworCWNvbnN0IF9fY2xvY2tfdDo6dGltZV9wb2ludCBfX3NfYXRpbWUgPSBfX3NfZW50cnkgKyBfX2RlbHRhOworCisJcmV0dXJuIF9fd2FpdF91bnRpbF9pbXBsKF9fbG9jaywgX19zX2F0aW1lKTsKKyAgICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DbG9jaywgdHlwZW5hbWUgX0R1cmF0aW9uLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgICAgYm9vbAorICAgICAgd2FpdF91bnRpbCh1bmlxdWVfbG9jazxtdXRleD4mIF9fbG9jaywKKwkJIGNvbnN0IGNocm9ubzo6dGltZV9wb2ludDxfQ2xvY2ssIF9EdXJhdGlvbj4mIF9fYXRpbWUsCisJCSBfUHJlZGljYXRlIF9fcCkKKyAgICAgIHsKKwl3aGlsZSAoIV9fcCgpKQorCSAgaWYgKHdhaXRfdW50aWwoX19sb2NrLCBfX2F0aW1lKSA9PSBjdl9zdGF0dXM6OnRpbWVvdXQpCisJICAgIHJldHVybiBfX3AoKTsKKwlyZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAsIHR5cGVuYW1lIF9QZXJpb2Q+CisgICAgICBjdl9zdGF0dXMKKyAgICAgIHdhaXRfZm9yKHVuaXF1ZV9sb2NrPG11dGV4PiYgX19sb2NrLAorCSAgICAgICBjb25zdCBjaHJvbm86OmR1cmF0aW9uPF9SZXAsIF9QZXJpb2Q+JiBfX3J0aW1lKQorICAgICAgeyByZXR1cm4gd2FpdF91bnRpbChfX2xvY2ssIF9fY2xvY2tfdDo6bm93KCkgKyBfX3J0aW1lKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcCwgdHlwZW5hbWUgX1BlcmlvZCwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICAgIGJvb2wKKyAgICAgIHdhaXRfZm9yKHVuaXF1ZV9sb2NrPG11dGV4PiYgX19sb2NrLAorCSAgICAgICBjb25zdCBjaHJvbm86OmR1cmF0aW9uPF9SZXAsIF9QZXJpb2Q+JiBfX3J0aW1lLAorCSAgICAgICBfUHJlZGljYXRlIF9fcCkKKyAgICAgIHsgcmV0dXJuIHdhaXRfdW50aWwoX19sb2NrLCBfX2Nsb2NrX3Q6Om5vdygpICsgX19ydGltZSwgc3RkOjptb3ZlKF9fcCkpOyB9CisKKyAgICBuYXRpdmVfaGFuZGxlX3R5cGUKKyAgICBuYXRpdmVfaGFuZGxlKCkKKyAgICB7IHJldHVybiAmX01fY29uZDsgfQorCisgIHByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Nsb2NrLCB0eXBlbmFtZSBfRHVyYXRpb24+CisgICAgICBjdl9zdGF0dXMKKyAgICAgIF9fd2FpdF91bnRpbF9pbXBsKHVuaXF1ZV9sb2NrPG11dGV4PiYgX19sb2NrLAorCQkJY29uc3QgY2hyb25vOjp0aW1lX3BvaW50PF9DbG9jaywgX0R1cmF0aW9uPiYgX19hdGltZSkKKyAgICAgIHsKKwljaHJvbm86OnRpbWVfcG9pbnQ8X19jbG9ja190LCBjaHJvbm86OnNlY29uZHM+IF9fcyA9CisJICBjaHJvbm86OnRpbWVfcG9pbnRfY2FzdDxjaHJvbm86OnNlY29uZHM+KF9fYXRpbWUpOworCisJY2hyb25vOjpuYW5vc2Vjb25kcyBfX25zID0KKwkgIGNocm9ubzo6ZHVyYXRpb25fY2FzdDxjaHJvbm86Om5hbm9zZWNvbmRzPihfX2F0aW1lIC0gX19zKTsKKworCV9fZ3RocmVhZF90aW1lX3QgX190cyA9CisJICB7CisJICAgIHN0YXRpY19jYXN0PHN0ZDo6dGltZV90PihfX3MudGltZV9zaW5jZV9lcG9jaCgpLmNvdW50KCkpLAorCSAgICBzdGF0aWNfY2FzdDxsb25nPihfX25zLmNvdW50KCkpCisJICB9OworCisJX19ndGhyZWFkX2NvbmRfdGltZWR3YWl0KCZfTV9jb25kLCBfX2xvY2subXV0ZXgoKS0+bmF0aXZlX2hhbmRsZSgpLAorCQkJCSAmX190cyk7CisKKwlyZXR1cm4gKF9DbG9jazo6bm93KCkgPCBfX2F0aW1lCisJCT8gY3Zfc3RhdHVzOjpub190aW1lb3V0IDogY3Zfc3RhdHVzOjp0aW1lb3V0KTsKKyAgICAgIH0KKyAgfTsKKworICAvLy8gY29uZGl0aW9uX3ZhcmlhYmxlX2FueQorICAvLyBMaWtlIGFib3ZlLCBidXQgbXV0ZXggaXMgbm90IHJlcXVpcmVkIHRvIGhhdmUgdHJ5X2xvY2suCisgIGNsYXNzIGNvbmRpdGlvbl92YXJpYWJsZV9hbnkKKyAgeworICAgIHR5cGVkZWYgY2hyb25vOjpzeXN0ZW1fY2xvY2sJX19jbG9ja190OworICAgIGNvbmRpdGlvbl92YXJpYWJsZQkJCV9NX2NvbmQ7CisgICAgbXV0ZXgJCQkJX01fbXV0ZXg7CisKKyAgcHVibGljOgorICAgIHR5cGVkZWYgY29uZGl0aW9uX3ZhcmlhYmxlOjpuYXRpdmVfaGFuZGxlX3R5cGUJbmF0aXZlX2hhbmRsZV90eXBlOworCisgICAgY29uZGl0aW9uX3ZhcmlhYmxlX2FueSgpIHRocm93ICgpOworICAgIH5jb25kaXRpb25fdmFyaWFibGVfYW55KCkgdGhyb3cgKCk7CisKKyAgICBjb25kaXRpb25fdmFyaWFibGVfYW55KGNvbnN0IGNvbmRpdGlvbl92YXJpYWJsZV9hbnkmKSA9IGRlbGV0ZTsKKyAgICBjb25kaXRpb25fdmFyaWFibGVfYW55JiBvcGVyYXRvcj0oY29uc3QgY29uZGl0aW9uX3ZhcmlhYmxlX2FueSYpID0gZGVsZXRlOworCisgICAgdm9pZAorICAgIG5vdGlmeV9vbmUoKQorICAgIHsKKyAgICAgIGxvY2tfZ3VhcmQ8bXV0ZXg+IF9fbG9jayhfTV9tdXRleCk7CisgICAgICBfTV9jb25kLm5vdGlmeV9vbmUoKTsKKyAgICB9CisKKyAgICB2b2lkCisgICAgbm90aWZ5X2FsbCgpCisgICAgeworICAgICAgbG9ja19ndWFyZDxtdXRleD4gX19sb2NrKF9NX211dGV4KTsKKyAgICAgIF9NX2NvbmQubm90aWZ5X2FsbCgpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Mb2NrPgorICAgICAgdm9pZAorICAgICAgd2FpdChfTG9jayYgX19sb2NrKQorICAgICAgeworICAgICAgICB1bmlxdWVfbG9jazxtdXRleD4gX19teV9sb2NrKF9NX211dGV4KTsKKyAgICAgICAgX19sb2NrLnVubG9jaygpOworICAgICAgICBfTV9jb25kLndhaXQoX19teV9sb2NrKTsKKyAgICAgICAgX19sb2NrLmxvY2soKTsKKyAgICAgIH0KKyAgICAgIAorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0xvY2ssIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgICB2b2lkCisgICAgICB3YWl0KF9Mb2NrJiBfX2xvY2ssIF9QcmVkaWNhdGUgX19wKQorICAgICAgeworCXdoaWxlICghX19wKCkpCisJICB3YWl0KF9fbG9jayk7CisgICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTG9jaywgdHlwZW5hbWUgX0Nsb2NrLCB0eXBlbmFtZSBfRHVyYXRpb24+CisgICAgICBjdl9zdGF0dXMKKyAgICAgIHdhaXRfdW50aWwoX0xvY2smIF9fbG9jaywKKwkJIGNvbnN0IGNocm9ubzo6dGltZV9wb2ludDxfQ2xvY2ssIF9EdXJhdGlvbj4mIF9fYXRpbWUpCisgICAgICB7CisgICAgICAgIHVuaXF1ZV9sb2NrPG11dGV4PiBfX215X2xvY2soX01fbXV0ZXgpOworICAgICAgICBfX2xvY2sudW5sb2NrKCk7CisgICAgICAgIGN2X3N0YXR1cyBfX3N0YXR1cyA9IF9NX2NvbmQud2FpdF91bnRpbChfX215X2xvY2ssIF9fYXRpbWUpOworICAgICAgICBfX2xvY2subG9jaygpOworICAgICAgICByZXR1cm4gX19zdGF0dXM7CisgICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTG9jaywgdHlwZW5hbWUgX0Nsb2NrLAorCSAgICAgdHlwZW5hbWUgX0R1cmF0aW9uLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgICAgYm9vbAorICAgICAgd2FpdF91bnRpbChfTG9jayYgX19sb2NrLAorCQkgY29uc3QgY2hyb25vOjp0aW1lX3BvaW50PF9DbG9jaywgX0R1cmF0aW9uPiYgX19hdGltZSwKKwkJIF9QcmVkaWNhdGUgX19wKQorICAgICAgeworCXdoaWxlICghX19wKCkpCisJICBpZiAod2FpdF91bnRpbChfX2xvY2ssIF9fYXRpbWUpID09IGN2X3N0YXR1czo6dGltZW91dCkKKwkgICAgcmV0dXJuIF9fcCgpOworCXJldHVybiB0cnVlOworICAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0xvY2ssIHR5cGVuYW1lIF9SZXAsIHR5cGVuYW1lIF9QZXJpb2Q+CisgICAgICBjdl9zdGF0dXMKKyAgICAgIHdhaXRfZm9yKF9Mb2NrJiBfX2xvY2ssIGNvbnN0IGNocm9ubzo6ZHVyYXRpb248X1JlcCwgX1BlcmlvZD4mIF9fcnRpbWUpCisgICAgICB7IHJldHVybiB3YWl0X3VudGlsKF9fbG9jaywgX19jbG9ja190Ojpub3coKSArIF9fcnRpbWUpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTG9jaywgdHlwZW5hbWUgX1JlcCwKKwkgICAgIHR5cGVuYW1lIF9QZXJpb2QsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgICBib29sCisgICAgICB3YWl0X2ZvcihfTG9jayYgX19sb2NrLAorCSAgICAgICBjb25zdCBjaHJvbm86OmR1cmF0aW9uPF9SZXAsIF9QZXJpb2Q+JiBfX3J0aW1lLCBfUHJlZGljYXRlIF9fcCkKKyAgICAgIHsgcmV0dXJuIHdhaXRfdW50aWwoX19sb2NrLCBfX2Nsb2NrX3Q6Om5vdygpICsgX19ydGltZSwgc3RkOjptb3ZlKF9fcCkpOyB9CisKKyAgICBuYXRpdmVfaGFuZGxlX3R5cGUKKyAgICBuYXRpdmVfaGFuZGxlKCkKKyAgICB7IHJldHVybiBfTV9jb25kLm5hdGl2ZV9oYW5kbGUoKTsgfQorICB9OworCisgIC8vIEB9IGdyb3VwIGNvbmRpdGlvbl92YXJpYWJsZXMKK30KKworI2VuZGlmIC8vIF9HTElCQ1hYX0hBU19HVEhSRUFEUyAmJiBfR0xJQkNYWF9VU0VfQzk5X1NURElOVF9UUjEKKworI2VuZGlmIC8vIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9DT05ESVRJT05fVkFSSUFCTEUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY3NldGptcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY3NldGptcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmMzZGU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jc2V0am1wCkBAIC0wLDAgKzEsNjQgQEAKKy8vIC0qLSBDKysgLSotIGZvcndhcmRpbmcgaGVhZGVyLgorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsCisvLyAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgY3NldGptcAorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBmaWxlLiAgWW91IHNob3VsZCBAYyBcI2luY2x1ZGUgdGhpcyBmaWxlCisgKiAgaW4geW91ciBwcm9ncmFtcywgcmF0aGVyIHRoYW4gYW55IG9mIHRoZSBAYSAqLmggaW1wbGVtZW50YXRpb24gZmlsZXMuCisgKgorICogIFRoaXMgaXMgdGhlIEMrKyB2ZXJzaW9uIG9mIHRoZSBTdGFuZGFyZCBDIExpYnJhcnkgaGVhZGVyIEBjIHNldGptcC5oLAorICogIGFuZCBpdHMgY29udGVudHMgYXJlIChtb3N0bHkpIHRoZSBzYW1lIGFzIHRoYXQgaGVhZGVyLCBidXQgYXJlIGFsbAorICogIGNvbnRhaW5lZCBpbiB0aGUgbmFtZXNwYWNlIEBjIHN0ZCAoZXhjZXB0IGZvciBuYW1lcyB3aGljaCBhcmUgZGVmaW5lZAorICogIGFzIG1hY3JvcyBpbiBDKS4KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjAuNC42ICBDIGxpYnJhcnkKKy8vCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8c2V0am1wLmg+CisKKyNpZm5kZWYgX0dMSUJDWFhfQ1NFVEpNUAorI2RlZmluZSBfR0xJQkNYWF9DU0VUSk1QIDEKKworLy8gR2V0IHJpZCBvZiB0aG9zZSBtYWNyb3MgZGVmaW5lZCBpbiA8c2V0am1wLmg+IGluIGxpZXUgb2YgcmVhbCBmdW5jdGlvbnMuCisjdW5kZWYgbG9uZ2ptcAorCisvLyBBZGhlcmUgdG8gc2VjdGlvbiAxNy40LjEuMiBjbGF1c2UgNSBvZiBJU08gMTQ4ODI6MTk5OAorI2lmbmRlZiBzZXRqbXAKKyNkZWZpbmUgc2V0am1wKGVudikgc2V0am1wIChlbnYpCisjZW5kaWYKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICB1c2luZyA6OmptcF9idWY7CisgIHVzaW5nIDo6bG9uZ2ptcDsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY3NpZ25hbCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY3NpZ25hbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmQ1OGNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jc2lnbmFsCkBAIC0wLDAgKzEsNjAgQEAKKy8vIC0qLSBDKysgLSotIGZvcndhcmRpbmcgaGVhZGVyLgorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsCisvLyAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgY3NpZ25hbAorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBmaWxlLiAgWW91IHNob3VsZCBAYyBcI2luY2x1ZGUgdGhpcyBmaWxlCisgKiAgaW4geW91ciBwcm9ncmFtcywgcmF0aGVyIHRoYW4gYW55IG9mIHRoZSBAYSAqLmggaW1wbGVtZW50YXRpb24gZmlsZXMuCisgKgorICogIFRoaXMgaXMgdGhlIEMrKyB2ZXJzaW9uIG9mIHRoZSBTdGFuZGFyZCBDIExpYnJhcnkgaGVhZGVyIEBjIHNpZ25hbC5oLAorICogIGFuZCBpdHMgY29udGVudHMgYXJlIChtb3N0bHkpIHRoZSBzYW1lIGFzIHRoYXQgaGVhZGVyLCBidXQgYXJlIGFsbAorICogIGNvbnRhaW5lZCBpbiB0aGUgbmFtZXNwYWNlIEBjIHN0ZCAoZXhjZXB0IGZvciBuYW1lcyB3aGljaCBhcmUgZGVmaW5lZAorICogIGFzIG1hY3JvcyBpbiBDKS4KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjAuNC42ICBDIGxpYnJhcnkKKy8vCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKyNpZm5kZWYgX0dMSUJDWFhfQ1NJR05BTAorI2RlZmluZSBfR0xJQkNYWF9DU0lHTkFMIDEKKworLy8gR2V0IHJpZCBvZiB0aG9zZSBtYWNyb3MgZGVmaW5lZCBpbiA8c2lnbmFsLmg+IGluIGxpZXUgb2YgcmVhbCBmdW5jdGlvbnMuCisjdW5kZWYgcmFpc2UKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICB1c2luZyA6OnNpZ19hdG9taWNfdDsKKyAgdXNpbmcgOjpzaWduYWw7CisgIHVzaW5nIDo6cmFpc2U7CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2NzdGRhcmcgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2NzdGRhcmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJjYTRlOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY3N0ZGFyZwpAQCAtMCwwICsxLDYwIEBACisvLyAtKi0gQysrIC0qLSBmb3J3YXJkaW5nIGhlYWRlci4KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LAorLy8gMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvY3N0ZGFyZworICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBmaWxlLiAgWW91IHNob3VsZCBAYyBcI2luY2x1ZGUgdGhpcyBmaWxlCisgKiAgaW4geW91ciBwcm9ncmFtcywgcmF0aGVyIHRoYW4gYW55IG9mIHRoZSBAYSAqLmggaW1wbGVtZW50YXRpb24gZmlsZXMuCisgKgorICogIFRoaXMgaXMgdGhlIEMrKyB2ZXJzaW9uIG9mIHRoZSBTdGFuZGFyZCBDIExpYnJhcnkgaGVhZGVyIEBjIHN0ZGFyZy5oLAorICogIGFuZCBpdHMgY29udGVudHMgYXJlIChtb3N0bHkpIHRoZSBzYW1lIGFzIHRoYXQgaGVhZGVyLCBidXQgYXJlIGFsbAorICogIGNvbnRhaW5lZCBpbiB0aGUgbmFtZXNwYWNlIEBjIHN0ZCAoZXhjZXB0IGZvciBuYW1lcyB3aGljaCBhcmUgZGVmaW5lZAorICogIGFzIG1hY3JvcyBpbiBDKS4KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjAuNC42ICBDIGxpYnJhcnkKKy8vCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpZm5kZWYgX0dMSUJDWFhfQ1NUREFSRworI2RlZmluZSBfR0xJQkNYWF9DU1REQVJHIDEKKworLy8gQWRoZXJlIHRvIHNlY3Rpb24gMTcuNC4xLjIgY2xhdXNlIDUgb2YgSVNPIDE0ODgyOjE5OTgKKyNpZm5kZWYgdmFfZW5kCisjZGVmaW5lIHZhX2VuZChhcCkgdmFfZW5kIChhcCkKKyNlbmRpZgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIHVzaW5nIDo6dmFfbGlzdDsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY3N0ZGJvb2wgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2NzdGRib29sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNDI4ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2NzdGRib29sCkBAIC0wLDAgKzEsNDQgQEAKKy8vIDxjc3RkYm9vbD4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL2NzdGRib29sCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpZm5kZWYgX0dMSUJDWFhfQ1NUREJPT0wKKyNkZWZpbmUgX0dMSUJDWFhfQ1NUREJPT0wgMQorCisjaWZuZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisjICBpbmNsdWRlIDxiaXRzL2MrKzB4X3dhcm5pbmcuaD4KKyNlbHNlCisjICBpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorIyAgaWYgX0dMSUJDWFhfSEFWRV9TVERCT09MX0gKKyMgICAgaW5jbHVkZSA8c3RkYm9vbC5oPgorIyAgZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY3N0ZGRlZiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY3N0ZGRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTJkMzEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jc3RkZGVmCkBAIC0wLDAgKzEsNTYgQEAKKy8vIC0qLSBDKysgLSotIGZvcndhcmRpbmcgaGVhZGVyLgorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsCisvLyAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgY3N0ZGRlZgorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBmaWxlLiAgWW91IHNob3VsZCBAYyBcI2luY2x1ZGUgdGhpcyBmaWxlCisgKiAgaW4geW91ciBwcm9ncmFtcywgcmF0aGVyIHRoYW4gYW55IG9mIHRoZSBAYSAqLmggaW1wbGVtZW50YXRpb24gZmlsZXMuCisgKgorICogIFRoaXMgaXMgdGhlIEMrKyB2ZXJzaW9uIG9mIHRoZSBTdGFuZGFyZCBDIExpYnJhcnkgaGVhZGVyIEBjIHN0ZGRlZi5oLAorICogIGFuZCBpdHMgY29udGVudHMgYXJlIChtb3N0bHkpIHRoZSBzYW1lIGFzIHRoYXQgaGVhZGVyLCBidXQgYXJlIGFsbAorICogIGNvbnRhaW5lZCBpbiB0aGUgbmFtZXNwYWNlIEBjIHN0ZCAoZXhjZXB0IGZvciBuYW1lcyB3aGljaCBhcmUgZGVmaW5lZAorICogIGFzIG1hY3JvcyBpbiBDKS4KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMTguMSAgVHlwZXMKKy8vCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpZm5kZWYgX0dMSUJDWFhfQ1NURERFRgorI2RlZmluZSBfR0xJQkNYWF9DU1REREVGIDEKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICB1c2luZyA6OnB0cmRpZmZfdDsKKyAgdXNpbmcgOjpzaXplX3Q7CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2NzdGRpbnQgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2NzdGRpbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhlNDQ5YwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY3N0ZGludApAQCAtMCwwICsxLDc5IEBACisvLyA8Y3N0ZGludD4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL2NzdGRpbnQKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfQ1NURElOVAorI2RlZmluZSBfR0xJQkNYWF9DU1RESU5UIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaWZuZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisjIGluY2x1ZGUgPGJpdHMvYysrMHhfd2FybmluZy5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9HTElCQ1hYX0lOQ0xVREVfQVNfVFIxKQorIyAgZXJyb3IgQysrMHggaGVhZGVyIGNhbm5vdCBiZSBpbmNsdWRlZCBmcm9tIFRSMSBoZWFkZXIKKyNlbmRpZgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKworLy8gRm9yIDguMjIuMS8xIChzZWUgQzk5LCBOb3RlcyAyMTksIDIyMCwgMjIyKQorI2lmIF9HTElCQ1hYX0hBVkVfU1RESU5UX0gKKyMgaWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKKyMgIGRlZmluZSBfVU5ERUZfX1NURENfTElNSVRfTUFDUk9TCisjICBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUworIyBlbmRpZgorIyBpZm5kZWYgX19TVERDX0NPTlNUQU5UX01BQ1JPUworIyAgZGVmaW5lIF9VTkRFRl9fU1REQ19DT05TVEFOVF9NQUNST1MKKyMgIGRlZmluZSBfX1NURENfQ09OU1RBTlRfTUFDUk9TCisjIGVuZGlmCisjIGluY2x1ZGUgPHN0ZGludC5oPgorIyBpZmRlZiBfVU5ERUZfX1NURENfTElNSVRfTUFDUk9TCisjICB1bmRlZiBfX1NURENfTElNSVRfTUFDUk9TCisjICB1bmRlZiBfVU5ERUZfX1NURENfTElNSVRfTUFDUk9TCisjIGVuZGlmCisjIGlmZGVmIF9VTkRFRl9fU1REQ19DT05TVEFOVF9NQUNST1MKKyMgIHVuZGVmIF9fU1REQ19DT05TVEFOVF9NQUNST1MKKyMgIHVuZGVmIF9VTkRFRl9fU1REQ19DT05TVEFOVF9NQUNST1MKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYKQorIyAgaW5jbHVkZSA8dHIxX2ltcGwvY3N0ZGludD4KKyNlbHNlCisjICBkZWZpbmUgX0dMSUJDWFhfSU5DTFVERV9BU19DWFgwWAorIyAgZGVmaW5lIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9UUjEKKyMgIGRlZmluZSBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorIyAgZGVmaW5lIF9HTElCQ1hYX1RSMQorIyAgaW5jbHVkZSA8dHIxX2ltcGwvY3N0ZGludD4KKyMgIHVuZGVmIF9HTElCQ1hYX1RSMQorIyAgdW5kZWYgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9UUjEKKyMgIHVuZGVmIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9UUjEKKyMgIHVuZGVmIF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgKKyNlbmRpZgorCisjZW5kaWYgLy8gX0dMSUJDWFhfQ1NURElOVApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jc3RkaW8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2NzdGRpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODdhZjE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jc3RkaW8KQEAgLTAsMCArMSwyMDcgQEAKKy8vIC0qLSBDKysgLSotIGZvcndhcmRpbmcgaGVhZGVyLgorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsCisvLyAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgaW5jbHVkZS9jc3RkaW8KKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgZmlsZS4gIFlvdSBzaG91bGQgQGMgXCNpbmNsdWRlIHRoaXMgZmlsZQorICogIGluIHlvdXIgcHJvZ3JhbXMsIHJhdGhlciB0aGFuIGFueSBvZiB0aGUgQGEgKi5oIGltcGxlbWVudGF0aW9uIGZpbGVzLgorICoKKyAqICBUaGlzIGlzIHRoZSBDKysgdmVyc2lvbiBvZiB0aGUgU3RhbmRhcmQgQyBMaWJyYXJ5IGhlYWRlciBAYyBzdGRpby5oLAorICogIGFuZCBpdHMgY29udGVudHMgYXJlIChtb3N0bHkpIHRoZSBzYW1lIGFzIHRoYXQgaGVhZGVyLCBidXQgYXJlIGFsbAorICogIGNvbnRhaW5lZCBpbiB0aGUgbmFtZXNwYWNlIEBjIHN0ZCAoZXhjZXB0IGZvciBuYW1lcyB3aGljaCBhcmUgZGVmaW5lZAorICogIGFzIG1hY3JvcyBpbiBDKS4KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjcuOC4yICBDIExpYnJhcnkgZmlsZXMKKy8vCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZuZGVmIF9HTElCQ1hYX0NTVERJTworI2RlZmluZSBfR0xJQkNYWF9DU1RESU8gMQorCisvLyBHZXQgcmlkIG9mIHRob3NlIG1hY3JvcyBkZWZpbmVkIGluIDxzdGRpby5oPiBpbiBsaWV1IG9mIHJlYWwgZnVuY3Rpb25zLgorI3VuZGVmIGNsZWFyZXJyCisjdW5kZWYgZmNsb3NlCisjdW5kZWYgZmVvZgorI3VuZGVmIGZlcnJvcgorI3VuZGVmIGZmbHVzaAorI3VuZGVmIGZnZXRjCisjdW5kZWYgZmdldHBvcworI3VuZGVmIGZnZXRzCisjdW5kZWYgZm9wZW4KKyN1bmRlZiBmcHJpbnRmCisjdW5kZWYgZnB1dGMKKyN1bmRlZiBmcHV0cworI3VuZGVmIGZyZWFkCisjdW5kZWYgZnJlb3BlbgorI3VuZGVmIGZzY2FuZgorI3VuZGVmIGZzZWVrCisjdW5kZWYgZnNldHBvcworI3VuZGVmIGZ0ZWxsCisjdW5kZWYgZndyaXRlCisjdW5kZWYgZ2V0YworI3VuZGVmIGdldGNoYXIKKyN1bmRlZiBnZXRzCisjdW5kZWYgcGVycm9yCisjdW5kZWYgcHJpbnRmCisjdW5kZWYgcHV0YworI3VuZGVmIHB1dGNoYXIKKyN1bmRlZiBwdXRzCisjdW5kZWYgcmVtb3ZlCisjdW5kZWYgcmVuYW1lCisjdW5kZWYgcmV3aW5kCisjdW5kZWYgc2NhbmYKKyN1bmRlZiBzZXRidWYKKyN1bmRlZiBzZXR2YnVmCisjdW5kZWYgc3ByaW50ZgorI3VuZGVmIHNzY2FuZgorI3VuZGVmIHRtcGZpbGUKKyN1bmRlZiB0bXBuYW0KKyN1bmRlZiB1bmdldGMKKyN1bmRlZiB2ZnByaW50ZgorI3VuZGVmIHZwcmludGYKKyN1bmRlZiB2c3ByaW50ZgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIHVzaW5nIDo6RklMRTsKKyAgdXNpbmcgOjpmcG9zX3Q7CisKKyAgdXNpbmcgOjpjbGVhcmVycjsKKyAgdXNpbmcgOjpmY2xvc2U7CisgIHVzaW5nIDo6ZmVvZjsKKyAgdXNpbmcgOjpmZXJyb3I7CisgIHVzaW5nIDo6ZmZsdXNoOworICB1c2luZyA6OmZnZXRjOworICB1c2luZyA6OmZnZXRwb3M7CisgIHVzaW5nIDo6ZmdldHM7CisgIHVzaW5nIDo6Zm9wZW47CisgIHVzaW5nIDo6ZnByaW50ZjsKKyAgdXNpbmcgOjpmcHV0YzsKKyAgdXNpbmcgOjpmcHV0czsKKyAgdXNpbmcgOjpmcmVhZDsKKyAgdXNpbmcgOjpmcmVvcGVuOworICB1c2luZyA6OmZzY2FuZjsKKyAgdXNpbmcgOjpmc2VlazsKKyAgdXNpbmcgOjpmc2V0cG9zOworICB1c2luZyA6OmZ0ZWxsOworICB1c2luZyA6OmZ3cml0ZTsKKyAgdXNpbmcgOjpnZXRjOworICB1c2luZyA6OmdldGNoYXI7CisgIHVzaW5nIDo6Z2V0czsKKyAgdXNpbmcgOjpwZXJyb3I7CisgIHVzaW5nIDo6cHJpbnRmOworICB1c2luZyA6OnB1dGM7CisgIHVzaW5nIDo6cHV0Y2hhcjsKKyAgdXNpbmcgOjpwdXRzOworICB1c2luZyA6OnJlbW92ZTsKKyAgdXNpbmcgOjpyZW5hbWU7CisgIHVzaW5nIDo6cmV3aW5kOworICB1c2luZyA6OnNjYW5mOworICB1c2luZyA6OnNldGJ1ZjsKKyAgdXNpbmcgOjpzZXR2YnVmOworICB1c2luZyA6OnNwcmludGY7CisgIHVzaW5nIDo6c3NjYW5mOworICB1c2luZyA6OnRtcGZpbGU7CisgIHVzaW5nIDo6dG1wbmFtOworICB1c2luZyA6OnVuZ2V0YzsKKyAgdXNpbmcgOjp2ZnByaW50ZjsKKyAgdXNpbmcgOjp2cHJpbnRmOworICB1c2luZyA6OnZzcHJpbnRmOworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5CisKKyN1bmRlZiBzbnByaW50ZgorI3VuZGVmIHZmc2NhbmYKKyN1bmRlZiB2c2NhbmYKKyN1bmRlZiB2c25wcmludGYKKyN1bmRlZiB2c3NjYW5mCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X0NIRUNLIHx8IF9HTElCQ1hYX1VTRV9DOTlfRFlOQU1JQworICBleHRlcm4gIkMiIGludAorICAoc25wcmludGYpKGNoYXIgKiByZXN0cmljdCwgc2l6ZV90LCBjb25zdCBjaGFyICogcmVzdHJpY3QsIC4uLikgdGhyb3cgKCk7CisgIGV4dGVybiAiQyIgaW50CisgICh2ZnNjYW5mKShGSUxFICogcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiByZXN0cmljdCwgX19nbnVjX3ZhX2xpc3QpOworICBleHRlcm4gIkMiIGludCAodnNjYW5mKShjb25zdCBjaGFyICogcmVzdHJpY3QsIF9fZ251Y192YV9saXN0KTsKKyAgZXh0ZXJuICJDIiBpbnQKKyAgKHZzbnByaW50ZikoY2hhciAqIHJlc3RyaWN0LCBzaXplX3QsIGNvbnN0IGNoYXIgKiByZXN0cmljdCwgX19nbnVjX3ZhX2xpc3QpCisgIHRocm93ICgpOworICBleHRlcm4gIkMiIGludAorICAodnNzY2FuZikoY29uc3QgY2hhciAqIHJlc3RyaWN0LCBjb25zdCBjaGFyICogcmVzdHJpY3QsIF9fZ251Y192YV9saXN0KQorICB0aHJvdyAoKTsKKyNlbmRpZgorCisjaWYgIV9HTElCQ1hYX1VTRV9DOTlfRFlOQU1JQworICB1c2luZyA6OnNucHJpbnRmOworICB1c2luZyA6OnZmc2NhbmY7CisgIHVzaW5nIDo6dnNjYW5mOworICB1c2luZyA6OnZzbnByaW50ZjsKKyAgdXNpbmcgOjp2c3NjYW5mOworI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICB1c2luZyA6Ol9fZ251X2N4eDo6c25wcmludGY7CisgIHVzaW5nIDo6X19nbnVfY3h4Ojp2ZnNjYW5mOworICB1c2luZyA6Ol9fZ251X2N4eDo6dnNjYW5mOworICB1c2luZyA6Ol9fZ251X2N4eDo6dnNucHJpbnRmOworICB1c2luZyA6Ol9fZ251X2N4eDo6dnNzY2FuZjsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYgLy8gX0dMSUJDWFhfVVNFX0M5OQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyMgIGlmIGRlZmluZWQoX0dMSUJDWFhfSU5DTFVERV9BU19UUjEpCisjICAgIGVycm9yIEMrKzB4IGhlYWRlciBjYW5ub3QgYmUgaW5jbHVkZWQgZnJvbSBUUjEgaGVhZGVyCisjICBlbmRpZgorIyAgaWYgZGVmaW5lZChfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYKQorIyAgICBpbmNsdWRlIDx0cjFfaW1wbC9jc3RkaW8+CisjICBlbHNlCisjICAgIGRlZmluZSBfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYCisjICAgIGRlZmluZSBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxCisjICAgIGRlZmluZSBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorIyAgICBkZWZpbmUgX0dMSUJDWFhfVFIxCisjICAgIGluY2x1ZGUgPHRyMV9pbXBsL2NzdGRpbz4KKyMgICAgdW5kZWYgX0dMSUJDWFhfVFIxCisjICAgIHVuZGVmIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVFIxCisjICAgIHVuZGVmIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9UUjEKKyMgICAgdW5kZWYgX0dMSUJDWFhfSU5DTFVERV9BU19DWFgwWAorIyAgZW5kaWYKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY3N0ZGxpYiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY3N0ZGxpYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGZmODEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jc3RkbGliCkBAIC0wLDAgKzEsMjQyIEBACisvLyAtKi0gQysrIC0qLSBmb3J3YXJkaW5nIGhlYWRlci4KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LAorLy8gMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvY3N0ZGxpYgorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBmaWxlLiAgWW91IHNob3VsZCBAYyBcI2luY2x1ZGUgdGhpcyBmaWxlCisgKiAgaW4geW91ciBwcm9ncmFtcywgcmF0aGVyIHRoYW4gYW55IG9mIHRoZSBAYSAqLmggaW1wbGVtZW50YXRpb24gZmlsZXMuCisgKgorICogIFRoaXMgaXMgdGhlIEMrKyB2ZXJzaW9uIG9mIHRoZSBTdGFuZGFyZCBDIExpYnJhcnkgaGVhZGVyIEBjIHN0ZGxpYi5oLAorICogIGFuZCBpdHMgY29udGVudHMgYXJlIChtb3N0bHkpIHRoZSBzYW1lIGFzIHRoYXQgaGVhZGVyLCBidXQgYXJlIGFsbAorICogIGNvbnRhaW5lZCBpbiB0aGUgbmFtZXNwYWNlIEBjIHN0ZCAoZXhjZXB0IGZvciBuYW1lcyB3aGljaCBhcmUgZGVmaW5lZAorICogIGFzIG1hY3JvcyBpbiBDKS4KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjAuNC42ICBDIGxpYnJhcnkKKy8vCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKworI2lmbmRlZiBfR0xJQkNYWF9DU1RETElCCisjZGVmaW5lIF9HTElCQ1hYX0NTVERMSUIgMQorCisjaWYgIV9HTElCQ1hYX0hPU1RFRAorLy8gVGhlIEMgc3RhbmRhcmQgZG9lcyBub3QgcmVxdWlyZSBhIGZyZWVzdGFuZGluZyBpbXBsZW1lbnRhdGlvbiB0bworLy8gcHJvdmlkZSA8c3RkbGliLmg+LiAgSG93ZXZlciwgdGhlIEMrKyBzdGFuZGFyZCBkb2VzIHN0aWxsIHJlcXVpcmUKKy8vIDxjc3RkbGliPiAtLSBidXQgb25seSB0aGUgZnVuY3Rpb25hbGl0eSBtZW50aW9uZWQgaW4KKy8vIFtsaWIuc3VwcG9ydC5zdGFydC50ZXJtXS4KKworI2RlZmluZSBFWElUX1NVQ0NFU1MgMAorI2RlZmluZSBFWElUX0ZBSUxVUkUgMQorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIGV4dGVybiAiQyIgdm9pZCBhYm9ydCh2b2lkKSB0aHJvdyAoKSBfR0xJQkNYWF9OT1JFVFVSTjsKKyAgZXh0ZXJuICJDIiBpbnQgYXRleGl0KHZvaWQgKCopKCkpIHRocm93ICgpOworICBleHRlcm4gIkMiIHZvaWQgZXhpdChpbnQpIHRocm93ICgpIF9HTElCQ1hYX05PUkVUVVJOOworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbHNlCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLy8gR2V0IHJpZCBvZiB0aG9zZSBtYWNyb3MgZGVmaW5lZCBpbiA8c3RkbGliLmg+IGluIGxpZXUgb2YgcmVhbCBmdW5jdGlvbnMuCisjdW5kZWYgYWJvcnQKKyN1bmRlZiBhYnMKKyN1bmRlZiBhdGV4aXQKKyN1bmRlZiBhdG9mCisjdW5kZWYgYXRvaQorI3VuZGVmIGF0b2wKKyN1bmRlZiBic2VhcmNoCisjdW5kZWYgY2FsbG9jCisjdW5kZWYgZGl2CisjdW5kZWYgZXhpdAorI3VuZGVmIGZyZWUKKyN1bmRlZiBnZXRlbnYKKyN1bmRlZiBsYWJzCisjdW5kZWYgbGRpdgorI3VuZGVmIG1hbGxvYworI3VuZGVmIG1ibGVuCisjdW5kZWYgbWJzdG93Y3MKKyN1bmRlZiBtYnRvd2MKKyN1bmRlZiBxc29ydAorI3VuZGVmIHJhbmQKKyN1bmRlZiByZWFsbG9jCisjdW5kZWYgc3JhbmQKKyN1bmRlZiBzdHJ0b2QKKyN1bmRlZiBzdHJ0b2wKKyN1bmRlZiBzdHJ0b3VsCisjdW5kZWYgc3lzdGVtCisjdW5kZWYgd2NzdG9tYnMKKyN1bmRlZiB3Y3RvbWIKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICB1c2luZyA6OmRpdl90OworICB1c2luZyA6OmxkaXZfdDsKKworICB1c2luZyA6OmFib3J0OworICB1c2luZyA6OmFiczsKKyAgdXNpbmcgOjphdGV4aXQ7CisgIHVzaW5nIDo6YXRvZjsKKyAgdXNpbmcgOjphdG9pOworICB1c2luZyA6OmF0b2w7CisgIHVzaW5nIDo6YnNlYXJjaDsKKyAgdXNpbmcgOjpjYWxsb2M7CisgIHVzaW5nIDo6ZGl2OworICB1c2luZyA6OmV4aXQ7CisgIHVzaW5nIDo6ZnJlZTsKKyAgdXNpbmcgOjpnZXRlbnY7CisgIHVzaW5nIDo6bGFiczsKKyAgdXNpbmcgOjpsZGl2OworICB1c2luZyA6Om1hbGxvYzsKKyNpZmRlZiBfR0xJQkNYWF9IQVZFX01CU1RBVEVfVAorICB1c2luZyA6Om1ibGVuOworICB1c2luZyA6Om1ic3Rvd2NzOworICB1c2luZyA6Om1idG93YzsKKyNlbmRpZiAvLyBfR0xJQkNYWF9IQVZFX01CU1RBVEVfVAorICB1c2luZyA6OnFzb3J0OworICB1c2luZyA6OnJhbmQ7CisgIHVzaW5nIDo6cmVhbGxvYzsKKyAgdXNpbmcgOjpzcmFuZDsKKyAgdXNpbmcgOjpzdHJ0b2Q7CisgIHVzaW5nIDo6c3RydG9sOworICB1c2luZyA6OnN0cnRvdWw7CisgIHVzaW5nIDo6c3lzdGVtOworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIHVzaW5nIDo6d2NzdG9tYnM7CisgIHVzaW5nIDo6d2N0b21iOworI2VuZGlmIC8vIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisKKyAgaW5saW5lIGxvbmcKKyAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBsYWJzKF9faSk7IH0KKworICBpbmxpbmUgbGRpdl90CisgIGRpdihsb25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJuIGxkaXYoX19pLCBfX2opOyB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2lmIF9HTElCQ1hYX1VTRV9DOTkKKworI3VuZGVmIF9FeGl0CisjdW5kZWYgbGxhYnMKKyN1bmRlZiBsbGRpdgorI3VuZGVmIGF0b2xsCisjdW5kZWYgc3RydG9sbAorI3VuZGVmIHN0cnRvdWxsCisjdW5kZWYgc3RydG9mCisjdW5kZWYgc3RydG9sZAorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorCisjaWYgIV9HTElCQ1hYX1VTRV9DOTlfTE9OR19MT05HX0RZTkFNSUMKKyAgdXNpbmcgOjpsbGRpdl90OworI2VuZGlmCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9DSEVDSyB8fCBfR0xJQkNYWF9VU0VfQzk5X0RZTkFNSUMKKyAgZXh0ZXJuICJDIiB2b2lkIChfRXhpdCkoaW50KSB0aHJvdyAoKSBfR0xJQkNYWF9OT1JFVFVSTjsKKyNlbmRpZgorI2lmICFfR0xJQkNYWF9VU0VfQzk5X0RZTkFNSUMKKyAgdXNpbmcgOjpfRXhpdDsKKyNlbmRpZgorCisgIGlubGluZSBsb25nIGxvbmcKKyAgYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9feCA+PSAwID8gX194IDogLV9feDsgfQorCisjaWYgIV9HTElCQ1hYX1VTRV9DOTlfTE9OR19MT05HX0RZTkFNSUMKKyAgdXNpbmcgOjpsbGFiczsKKworICBpbmxpbmUgbGxkaXZfdAorICBkaXYobG9uZyBsb25nIF9fbiwgbG9uZyBsb25nIF9fZCkKKyAgeyBsbGRpdl90IF9fcTsgX19xLnF1b3QgPSBfX24gLyBfX2Q7IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBfX3E7IH0KKworICB1c2luZyA6OmxsZGl2OworI2VuZGlmCisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X0xPTkdfTE9OR19DSEVDSyB8fCBfR0xJQkNYWF9VU0VfQzk5X0xPTkdfTE9OR19EWU5BTUlDCisgIGV4dGVybiAiQyIgbG9uZyBsb25nIGludCAoYXRvbGwpKGNvbnN0IGNoYXIgKikgdGhyb3cgKCk7CisgIGV4dGVybiAiQyIgbG9uZyBsb25nIGludAorICAgIChzdHJ0b2xsKShjb25zdCBjaGFyICogcmVzdHJpY3QsIGNoYXIgKiogcmVzdHJpY3QsIGludCkgdGhyb3cgKCk7CisgIGV4dGVybiAiQyIgdW5zaWduZWQgbG9uZyBsb25nIGludAorICAgIChzdHJ0b3VsbCkoY29uc3QgY2hhciAqIHJlc3RyaWN0LCBjaGFyICoqIHJlc3RyaWN0LCBpbnQpIHRocm93ICgpOworI2VuZGlmCisjaWYgIV9HTElCQ1hYX1VTRV9DOTlfTE9OR19MT05HX0RZTkFNSUMKKyAgdXNpbmcgOjphdG9sbDsKKyAgdXNpbmcgOjpzdHJ0b2xsOworICB1c2luZyA6OnN0cnRvdWxsOworI2VuZGlmCisgIHVzaW5nIDo6c3RydG9mOworICB1c2luZyA6OnN0cnRvbGQ7CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworI2lmICFfR0xJQkNYWF9VU0VfQzk5X0xPTkdfTE9OR19EWU5BTUlDCisgIHVzaW5nIDo6X19nbnVfY3h4OjpsbGRpdl90OworI2VuZGlmCisgIHVzaW5nIDo6X19nbnVfY3h4OjpfRXhpdDsKKyAgdXNpbmcgOjpfX2dudV9jeHg6OmFiczsKKyNpZiAhX0dMSUJDWFhfVVNFX0M5OV9MT05HX0xPTkdfRFlOQU1JQworICB1c2luZyA6Ol9fZ251X2N4eDo6bGxhYnM7CisgIHVzaW5nIDo6X19nbnVfY3h4OjpkaXY7CisgIHVzaW5nIDo6X19nbnVfY3h4OjpsbGRpdjsKKyNlbmRpZgorICB1c2luZyA6Ol9fZ251X2N4eDo6YXRvbGw7CisgIHVzaW5nIDo6X19nbnVfY3h4OjpzdHJ0b2Y7CisgIHVzaW5nIDo6X19nbnVfY3h4OjpzdHJ0b2xsOworICB1c2luZyA6Ol9fZ251X2N4eDo6c3RydG91bGw7CisgIHVzaW5nIDo6X19nbnVfY3h4OjpzdHJ0b2xkOworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9VU0VfQzk5CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworIyAgaWYgZGVmaW5lZChfR0xJQkNYWF9JTkNMVURFX0FTX1RSMSkKKyMgICAgZXJyb3IgQysrMHggaGVhZGVyIGNhbm5vdCBiZSBpbmNsdWRlZCBmcm9tIFRSMSBoZWFkZXIKKyMgIGVuZGlmCisjICBpZiBkZWZpbmVkKF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgpCisjICAgIGluY2x1ZGUgPHRyMV9pbXBsL2NzdGRsaWI+CisjICBlbHNlCisjICAgIGRlZmluZSBfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYCisjICAgIGRlZmluZSBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxCisjICAgIGRlZmluZSBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorIyAgICBkZWZpbmUgX0dMSUJDWFhfVFIxCisjICAgIGluY2x1ZGUgPHRyMV9pbXBsL2NzdGRsaWI+CisjICAgIHVuZGVmIF9HTElCQ1hYX1RSMQorIyAgICB1bmRlZiBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorIyAgICB1bmRlZiBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxCisjICAgIHVuZGVmIF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgKKyMgIGVuZGlmCisjZW5kaWYKKworI2VuZGlmIC8vICFfR0xJQkNYWF9IT1NURUQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2NzdHJpbmcgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2NzdHJpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ1MjAyMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY3N0cmluZwpAQCAtMCwwICsxLDEyMyBAQAorLy8gLSotIEMrKyAtKi0gZm9yd2FyZGluZyBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwKKy8vIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBjc3RyaW5nCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGZpbGUuICBZb3Ugc2hvdWxkIEBjIFwjaW5jbHVkZSB0aGlzIGZpbGUKKyAqICBpbiB5b3VyIHByb2dyYW1zLCByYXRoZXIgdGhhbiBhbnkgb2YgdGhlIEBhICouaCBpbXBsZW1lbnRhdGlvbiBmaWxlcy4KKyAqCisgKiAgVGhpcyBpcyB0aGUgQysrIHZlcnNpb24gb2YgdGhlIFN0YW5kYXJkIEMgTGlicmFyeSBoZWFkZXIgQGMgc3RyaW5nLmgsCisgKiAgYW5kIGl0cyBjb250ZW50cyBhcmUgKG1vc3RseSkgdGhlIHNhbWUgYXMgdGhhdCBoZWFkZXIsIGJ1dCBhcmUgYWxsCisgKiAgY29udGFpbmVkIGluIHRoZSBuYW1lc3BhY2UgQGMgc3RkIChleGNlcHQgZm9yIG5hbWVzIHdoaWNoIGFyZSBkZWZpbmVkCisgKiAgYXMgbWFjcm9zIGluIEMpLgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyMC40LjYgIEMgbGlicmFyeQorLy8KKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWZuZGVmIF9HTElCQ1hYX0NTVFJJTkcKKyNkZWZpbmUgX0dMSUJDWFhfQ1NUUklORyAxCisKKy8vIEdldCByaWQgb2YgdGhvc2UgbWFjcm9zIGRlZmluZWQgaW4gPHN0cmluZy5oPiBpbiBsaWV1IG9mIHJlYWwgZnVuY3Rpb25zLgorI3VuZGVmIG1lbWNocgorI3VuZGVmIG1lbWNtcAorI3VuZGVmIG1lbWNweQorI3VuZGVmIG1lbW1vdmUKKyN1bmRlZiBtZW1zZXQKKyN1bmRlZiBzdHJjYXQKKyN1bmRlZiBzdHJjaHIKKyN1bmRlZiBzdHJjbXAKKyN1bmRlZiBzdHJjb2xsCisjdW5kZWYgc3RyY3B5CisjdW5kZWYgc3RyY3NwbgorI3VuZGVmIHN0cmVycm9yCisjdW5kZWYgc3RybGVuCisjdW5kZWYgc3RybmNhdAorI3VuZGVmIHN0cm5jbXAKKyN1bmRlZiBzdHJuY3B5CisjdW5kZWYgc3RycGJyaworI3VuZGVmIHN0cnJjaHIKKyN1bmRlZiBzdHJzcG4KKyN1bmRlZiBzdHJzdHIKKyN1bmRlZiBzdHJ0b2sKKyN1bmRlZiBzdHJ4ZnJtCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgdXNpbmcgOjptZW1jaHI7CisgIHVzaW5nIDo6bWVtY21wOworICB1c2luZyA6Om1lbWNweTsKKyAgdXNpbmcgOjptZW1tb3ZlOworICB1c2luZyA6Om1lbXNldDsKKyAgdXNpbmcgOjpzdHJjYXQ7CisgIHVzaW5nIDo6c3RyY21wOworICB1c2luZyA6OnN0cmNvbGw7CisgIHVzaW5nIDo6c3RyY3B5OworICB1c2luZyA6OnN0cmNzcG47CisgIHVzaW5nIDo6c3RyZXJyb3I7CisgIHVzaW5nIDo6c3RybGVuOworICB1c2luZyA6OnN0cm5jYXQ7CisgIHVzaW5nIDo6c3RybmNtcDsKKyAgdXNpbmcgOjpzdHJuY3B5OworICB1c2luZyA6OnN0cnNwbjsKKyAgdXNpbmcgOjpzdHJ0b2s7CisgIHVzaW5nIDo6c3RyeGZybTsKKyAgdXNpbmcgOjpzdHJjaHI7CisgIHVzaW5nIDo6c3RycGJyazsKKyAgdXNpbmcgOjpzdHJyY2hyOworICB1c2luZyA6OnN0cnN0cjsKKworI2lmbmRlZiBfX0NPUlJFQ1RfSVNPX0NQUF9TVFJJTkdfSF9QUk9UTworICBpbmxpbmUgdm9pZCoKKyAgbWVtY2hyKHZvaWQqIF9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKKyAgeyByZXR1cm4gX19idWlsdGluX21lbWNocihfX3MsIF9fYywgX19uKTsgfQorCisgIGlubGluZSBjaGFyKgorICBzdHJjaHIoY2hhciogX19zLCBpbnQgX19uKQorICB7IHJldHVybiBfX2J1aWx0aW5fc3RyY2hyKF9fcywgX19uKTsgfQorCisgIGlubGluZSBjaGFyKgorICBzdHJwYnJrKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJwYnJrKF9fczEsIF9fczIpOyB9CisKKyAgaW5saW5lIGNoYXIqCisgIHN0cnJjaHIoY2hhciogX19zLCBpbnQgX19uKQorICB7IHJldHVybiBfX2J1aWx0aW5fc3RycmNocihfX3MsIF9fbik7IH0KKworICBpbmxpbmUgY2hhcioKKyAgc3Ryc3RyKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJzdHIoX19zMSwgX19zMik7IH0KKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jdGdtYXRoIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jdGdtYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNTEwMDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2N0Z21hdGgKQEAgLTAsMCArMSw0MSBAQAorLy8gPGN0Z21hdGg+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgaW5jbHVkZS9jdGdtYXRoCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpZm5kZWYgX0dMSUJDWFhfQ1RHTUFUSAorI2RlZmluZSBfR0xJQkNYWF9DVEdNQVRIIDEKKworI2lmbmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworIyAgaW5jbHVkZSA8Yml0cy9jKysweF93YXJuaW5nLmg+CisjZWxzZQorIyAgaW5jbHVkZSA8Y21hdGg+CisjZW5kaWYKKworI2VuZGlmIAorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2N0aW1lIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jdGltZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWYxZjA2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jdGltZQpAQCAtMCwwICsxLDc4IEBACisvLyAtKi0gQysrIC0qLSBmb3J3YXJkaW5nIGhlYWRlci4KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LAorLy8gMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvY3RpbWUKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgZmlsZS4gIFlvdSBzaG91bGQgQGMgXCNpbmNsdWRlIHRoaXMgZmlsZQorICogIGluIHlvdXIgcHJvZ3JhbXMsIHJhdGhlciB0aGFuIGFueSBvZiB0aGUgQGEgKi5oIGltcGxlbWVudGF0aW9uIGZpbGVzLgorICoKKyAqICBUaGlzIGlzIHRoZSBDKysgdmVyc2lvbiBvZiB0aGUgU3RhbmRhcmQgQyBMaWJyYXJ5IGhlYWRlciBAYyB0aW1lLmgsCisgKiAgYW5kIGl0cyBjb250ZW50cyBhcmUgKG1vc3RseSkgdGhlIHNhbWUgYXMgdGhhdCBoZWFkZXIsIGJ1dCBhcmUgYWxsCisgKiAgY29udGFpbmVkIGluIHRoZSBuYW1lc3BhY2UgQGMgc3RkIChleGNlcHQgZm9yIG5hbWVzIHdoaWNoIGFyZSBkZWZpbmVkCisgKiAgYXMgbWFjcm9zIGluIEMpLgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyMC41ICBEYXRlIGFuZCB0aW1lCisvLworCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2lmbmRlZiBfR0xJQkNYWF9DVElNRQorI2RlZmluZSBfR0xJQkNYWF9DVElNRSAxCisKKy8vIEdldCByaWQgb2YgdGhvc2UgbWFjcm9zIGRlZmluZWQgaW4gPHRpbWUuaD4gaW4gbGlldSBvZiByZWFsIGZ1bmN0aW9ucy4KKyN1bmRlZiBjbG9jaworI3VuZGVmIGRpZmZ0aW1lCisjdW5kZWYgbWt0aW1lCisjdW5kZWYgdGltZQorI3VuZGVmIGFzY3RpbWUKKyN1bmRlZiBjdGltZQorI3VuZGVmIGdtdGltZQorI3VuZGVmIGxvY2FsdGltZQorI3VuZGVmIHN0cmZ0aW1lCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgdXNpbmcgOjpjbG9ja190OworICB1c2luZyA6OnRpbWVfdDsKKyAgdXNpbmcgOjp0bTsKKworICB1c2luZyA6OmNsb2NrOworICB1c2luZyA6OmRpZmZ0aW1lOworICB1c2luZyA6Om1rdGltZTsKKyAgdXNpbmcgOjp0aW1lOworICB1c2luZyA6OmFzY3RpbWU7CisgIHVzaW5nIDo6Y3RpbWU7CisgIHVzaW5nIDo6Z210aW1lOworICB1c2luZyA6OmxvY2FsdGltZTsKKyAgdXNpbmcgOjpzdHJmdGltZTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY3djaGFyIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9jd2NoYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM3ZjM5YQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY3djaGFyCkBAIC0wLDAgKzEsMjk1IEBACisvLyAtKi0gQysrIC0qLSBmb3J3YXJkaW5nIGhlYWRlci4KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LAorLy8gMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvY3djaGFyCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGZpbGUuICBZb3Ugc2hvdWxkIEBjIFwjaW5jbHVkZSB0aGlzIGZpbGUKKyAqICBpbiB5b3VyIHByb2dyYW1zLCByYXRoZXIgdGhhbiBhbnkgb2YgdGhlIEBhICouaCBpbXBsZW1lbnRhdGlvbiBmaWxlcy4KKyAqCisgKiAgVGhpcyBpcyB0aGUgQysrIHZlcnNpb24gb2YgdGhlIFN0YW5kYXJkIEMgTGlicmFyeSBoZWFkZXIgQGMgd2NoYXIuaCwKKyAqICBhbmQgaXRzIGNvbnRlbnRzIGFyZSAobW9zdGx5KSB0aGUgc2FtZSBhcyB0aGF0IGhlYWRlciwgYnV0IGFyZSBhbGwKKyAqICBjb250YWluZWQgaW4gdGhlIG5hbWVzcGFjZSBAYyBzdGQgKGV4Y2VwdCBmb3IgbmFtZXMgd2hpY2ggYXJlIGRlZmluZWQKKyAqICBhcyBtYWNyb3MgaW4gQykuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDIxLjQKKy8vCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKworI2lmIF9HTElCQ1hYX0hBVkVfV0NIQVJfSAorI2luY2x1ZGUgPHdjaGFyLmg+CisjZW5kaWYKKworI2lmbmRlZiBfR0xJQkNYWF9DV0NIQVIKKyNkZWZpbmUgX0dMSUJDWFhfQ1dDSEFSIDEKKworLy8gTmVlZCB0byBkbyBhIGJpdCBvZiB0cmlja2VyeSBoZXJlIHdpdGggbWJzdGF0ZV90IGFzIGNoYXJfdHJhaXRzCisvLyBhc3N1bWVzIGl0IGlzIGluIHdjaGFyLmgsIHJlZ2FyZGxlc3Mgb2Ygd2NoYXJfdCBzcGVjaWFsaXphdGlvbnMuCisjaWZuZGVmIF9HTElCQ1hYX0hBVkVfTUJTVEFURV9UCitleHRlcm4gIkMiCit7CisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICBpbnQgX19maWxsWzZdOworICB9IG1ic3RhdGVfdDsKK30KKyNlbmRpZgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIHVzaW5nIDo6bWJzdGF0ZV90OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKy8vIEdldCByaWQgb2YgdGhvc2UgbWFjcm9zIGRlZmluZWQgaW4gPHdjaGFyLmg+IGluIGxpZXUgb2YgcmVhbCBmdW5jdGlvbnMuCisjdW5kZWYgYnRvd2MKKyN1bmRlZiBmZ2V0d2MKKyN1bmRlZiBmZ2V0d3MKKyN1bmRlZiBmcHV0d2MKKyN1bmRlZiBmcHV0d3MKKyN1bmRlZiBmd2lkZQorI3VuZGVmIGZ3cHJpbnRmCisjdW5kZWYgZndzY2FuZgorI3VuZGVmIGdldHdjCisjdW5kZWYgZ2V0d2NoYXIKKyN1bmRlZiBtYnJsZW4KKyN1bmRlZiBtYnJ0b3djCisjdW5kZWYgbWJzaW5pdAorI3VuZGVmIG1ic3J0b3djcworI3VuZGVmIHB1dHdjCisjdW5kZWYgcHV0d2NoYXIKKyN1bmRlZiBzd3ByaW50ZgorI3VuZGVmIHN3c2NhbmYKKyN1bmRlZiB1bmdldHdjCisjdW5kZWYgdmZ3cHJpbnRmCisjaWYgX0dMSUJDWFhfSEFWRV9WRldTQ0FORgorIyB1bmRlZiB2ZndzY2FuZgorI2VuZGlmCisjdW5kZWYgdnN3cHJpbnRmCisjaWYgX0dMSUJDWFhfSEFWRV9WU1dTQ0FORgorIyB1bmRlZiB2c3dzY2FuZgorI2VuZGlmCisjdW5kZWYgdndwcmludGYKKyNpZiBfR0xJQkNYWF9IQVZFX1ZXU0NBTkYKKyMgdW5kZWYgdndzY2FuZgorI2VuZGlmCisjdW5kZWYgd2NydG9tYgorI3VuZGVmIHdjc2NhdAorI3VuZGVmIHdjc2NocgorI3VuZGVmIHdjc2NtcAorI3VuZGVmIHdjc2NvbGwKKyN1bmRlZiB3Y3NjcHkKKyN1bmRlZiB3Y3Njc3BuCisjdW5kZWYgd2NzZnRpbWUKKyN1bmRlZiB3Y3NsZW4KKyN1bmRlZiB3Y3NuY2F0CisjdW5kZWYgd2NzbmNtcAorI3VuZGVmIHdjc25jcHkKKyN1bmRlZiB3Y3NwYnJrCisjdW5kZWYgd2NzcmNocgorI3VuZGVmIHdjc3J0b21icworI3VuZGVmIHdjc3NwbgorI3VuZGVmIHdjc3N0cgorI3VuZGVmIHdjc3RvZAorI2lmIF9HTElCQ1hYX0hBVkVfV0NTVE9GCisjIHVuZGVmIHdjc3RvZgorI2VuZGlmCisjdW5kZWYgd2NzdG9rCisjdW5kZWYgd2NzdG9sCisjdW5kZWYgd2NzdG91bAorI3VuZGVmIHdjc3hmcm0KKyN1bmRlZiB3Y3RvYgorI3VuZGVmIHdtZW1jaHIKKyN1bmRlZiB3bWVtY21wCisjdW5kZWYgd21lbWNweQorI3VuZGVmIHdtZW1tb3ZlCisjdW5kZWYgd21lbXNldAorI3VuZGVmIHdwcmludGYKKyN1bmRlZiB3c2NhbmYKKworI2lmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgdXNpbmcgOjp3aW50X3Q7CisKKyAgdXNpbmcgOjpidG93YzsKKyAgdXNpbmcgOjpmZ2V0d2M7CisgIHVzaW5nIDo6ZmdldHdzOworICB1c2luZyA6OmZwdXR3YzsKKyAgdXNpbmcgOjpmcHV0d3M7CisgIHVzaW5nIDo6ZndpZGU7CisgIHVzaW5nIDo6ZndwcmludGY7CisgIHVzaW5nIDo6ZndzY2FuZjsKKyAgdXNpbmcgOjpnZXR3YzsKKyAgdXNpbmcgOjpnZXR3Y2hhcjsKKyAgdXNpbmcgOjptYnJsZW47CisgIHVzaW5nIDo6bWJydG93YzsKKyAgdXNpbmcgOjptYnNpbml0OworICB1c2luZyA6Om1ic3J0b3djczsKKyAgdXNpbmcgOjpwdXR3YzsKKyAgdXNpbmcgOjpwdXR3Y2hhcjsKKyNpZm5kZWYgX0dMSUJDWFhfSEFWRV9CUk9LRU5fVlNXUFJJTlRGCisgIHVzaW5nIDo6c3dwcmludGY7CisjZW5kaWYKKyAgdXNpbmcgOjpzd3NjYW5mOworICB1c2luZyA6OnVuZ2V0d2M7CisgIHVzaW5nIDo6dmZ3cHJpbnRmOworI2lmIF9HTElCQ1hYX0hBVkVfVkZXU0NBTkYKKyAgdXNpbmcgOjp2ZndzY2FuZjsKKyNlbmRpZgorI2lmbmRlZiBfR0xJQkNYWF9IQVZFX0JST0tFTl9WU1dQUklOVEYKKyAgdXNpbmcgOjp2c3dwcmludGY7CisjZW5kaWYKKyNpZiBfR0xJQkNYWF9IQVZFX1ZTV1NDQU5GCisgIHVzaW5nIDo6dnN3c2NhbmY7CisjZW5kaWYKKyAgdXNpbmcgOjp2d3ByaW50ZjsKKyNpZiBfR0xJQkNYWF9IQVZFX1ZXU0NBTkYKKyAgdXNpbmcgOjp2d3NjYW5mOworI2VuZGlmCisgIHVzaW5nIDo6d2NydG9tYjsKKyAgdXNpbmcgOjp3Y3NjYXQ7CisgIHVzaW5nIDo6d2NzY21wOworICB1c2luZyA6Ondjc2NvbGw7CisgIHVzaW5nIDo6d2NzY3B5OworICB1c2luZyA6Ondjc2NzcG47CisgIHVzaW5nIDo6d2NzZnRpbWU7CisgIHVzaW5nIDo6d2NzbGVuOworICB1c2luZyA6Ondjc25jYXQ7CisgIHVzaW5nIDo6d2NzbmNtcDsKKyAgdXNpbmcgOjp3Y3NuY3B5OworICB1c2luZyA6Ondjc3J0b21iczsKKyAgdXNpbmcgOjp3Y3NzcG47CisgIHVzaW5nIDo6d2NzdG9kOworI2lmIF9HTElCQ1hYX0hBVkVfV0NTVE9GCisgIHVzaW5nIDo6d2NzdG9mOworI2VuZGlmCisgIHVzaW5nIDo6d2NzdG9rOworICB1c2luZyA6Ondjc3RvbDsKKyAgdXNpbmcgOjp3Y3N0b3VsOworICB1c2luZyA6Ondjc3hmcm07CisgIHVzaW5nIDo6d2N0b2I7CisgIHVzaW5nIDo6d21lbWNtcDsKKyAgdXNpbmcgOjp3bWVtY3B5OworICB1c2luZyA6OndtZW1tb3ZlOworICB1c2luZyA6OndtZW1zZXQ7CisgIHVzaW5nIDo6d3ByaW50ZjsKKyAgdXNpbmcgOjp3c2NhbmY7CisgIHVzaW5nIDo6d2NzY2hyOworICB1c2luZyA6Ondjc3Bicms7CisgIHVzaW5nIDo6d2NzcmNocjsKKyAgdXNpbmcgOjp3Y3NzdHI7CisgIHVzaW5nIDo6d21lbWNocjsKKworI2lmbmRlZiBfX0NPUlJFQ1RfSVNPX0NQUF9XQ0hBUl9IX1BST1RPCisgIGlubGluZSB3Y2hhcl90KgorICB3Y3NjaHIod2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYykKKyAgeyByZXR1cm4gd2NzY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYyk7IH0KKworICBpbmxpbmUgd2NoYXJfdCoKKyAgd2NzcGJyayh3Y2hhcl90KiBfX3MxLCBjb25zdCB3Y2hhcl90KiBfX3MyKQorICB7IHJldHVybiB3Y3NwYnJrKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fczEpLCBfX3MyKTsgfQorCisgIGlubGluZSB3Y2hhcl90KgorICB3Y3NyY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MpCisgIHsgcmV0dXJuIHdjc3JjaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jKTsgfQorCisgIGlubGluZSB3Y2hhcl90KgorICB3Y3NzdHIod2NoYXJfdCogX19zMSwgY29uc3Qgd2NoYXJfdCogX19zMikKKyAgeyByZXR1cm4gd2Nzc3RyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fczEpLCBfX3MyKTsgfQorCisgIGlubGluZSB3Y2hhcl90KgorICB3bWVtY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pCisgIHsgcmV0dXJuIHdtZW1jaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jLCBfX24pOyB9CisjZW5kaWYKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjaWYgX0dMSUJDWFhfVVNFX0M5OQorCisjdW5kZWYgd2NzdG9sZAorI3VuZGVmIHdjc3RvbGwKKyN1bmRlZiB3Y3N0b3VsbAorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9DSEVDSyB8fCBfR0xJQkNYWF9VU0VfQzk5X0RZTkFNSUMKKyAgZXh0ZXJuICJDIiBsb25nIGRvdWJsZQorICAgICh3Y3N0b2xkKShjb25zdCB3Y2hhcl90ICogcmVzdHJpY3QsIHdjaGFyX3QgKiogcmVzdHJpY3QpIHRocm93ICgpOworI2VuZGlmCisjaWYgIV9HTElCQ1hYX1VTRV9DOTlfRFlOQU1JQworICB1c2luZyA6Ondjc3RvbGQ7CisjZW5kaWYKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X0xPTkdfTE9OR19DSEVDSyB8fCBfR0xJQkNYWF9VU0VfQzk5X0xPTkdfTE9OR19EWU5BTUlDCisgIGV4dGVybiAiQyIgbG9uZyBsb25nIGludAorICAgICh3Y3N0b2xsKShjb25zdCB3Y2hhcl90ICogcmVzdHJpY3QsIHdjaGFyX3QgKiogcmVzdHJpY3QsIGludCkgdGhyb3cgKCk7CisgIGV4dGVybiAiQyIgdW5zaWduZWQgbG9uZyBsb25nIGludAorICAgICh3Y3N0b3VsbCkoY29uc3Qgd2NoYXJfdCAqIHJlc3RyaWN0LCB3Y2hhcl90ICoqIHJlc3RyaWN0LCBpbnQpIHRocm93ICgpOworI2VuZGlmCisjaWYgIV9HTElCQ1hYX1VTRV9DOTlfTE9OR19MT05HX0RZTkFNSUMKKyAgdXNpbmcgOjp3Y3N0b2xsOworICB1c2luZyA6Ondjc3RvdWxsOworI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICB1c2luZyA6Ol9fZ251X2N4eDo6d2NzdG9sZDsKKyAgdXNpbmcgOjpfX2dudV9jeHg6Ondjc3RvbGw7CisgIHVzaW5nIDo6X19nbnVfY3h4Ojp3Y3N0b3VsbDsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYKKworI2VuZGlmIC8vX0dMSUJDWFhfVVNFX1dDSEFSX1QKKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisjICBpZiBkZWZpbmVkKF9HTElCQ1hYX0lOQ0xVREVfQVNfVFIxKQorIyAgICBlcnJvciBDKysweCBoZWFkZXIgY2Fubm90IGJlIGluY2x1ZGVkIGZyb20gVFIxIGhlYWRlcgorIyAgZW5kaWYKKyMgIGlmIGRlZmluZWQoX0dMSUJDWFhfSU5DTFVERV9BU19DWFgwWCkKKyMgICAgaW5jbHVkZSA8dHIxX2ltcGwvY3djaGFyPgorIyAgZWxzZQorIyAgICBkZWZpbmUgX0dMSUJDWFhfSU5DTFVERV9BU19DWFgwWAorIyAgICBkZWZpbmUgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMQorIyAgICBkZWZpbmUgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9UUjEKKyMgICAgZGVmaW5lIF9HTElCQ1hYX1RSMQorIyAgICBpbmNsdWRlIDx0cjFfaW1wbC9jd2NoYXI+CisjICAgIHVuZGVmIF9HTElCQ1hYX1RSMQorIyAgICB1bmRlZiBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorIyAgICB1bmRlZiBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxCisjICAgIHVuZGVmIF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgKKyMgIGVuZGlmCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2N3Y3R5cGUgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2N3Y3R5cGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU2NDlhMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY3djdHlwZQpAQCAtMCwwICsxLDEyNiBAQAorLy8gLSotIEMrKyAtKi0gZm9yd2FyZGluZyBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwKKy8vIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL2N3Y3R5cGUKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgZmlsZS4gIFlvdSBzaG91bGQgQGMgXCNpbmNsdWRlIHRoaXMgZmlsZQorICogIGluIHlvdXIgcHJvZ3JhbXMsIHJhdGhlciB0aGFuIGFueSBvZiB0aGUgQGEgKi5oIGltcGxlbWVudGF0aW9uIGZpbGVzLgorICoKKyAqICBUaGlzIGlzIHRoZSBDKysgdmVyc2lvbiBvZiB0aGUgU3RhbmRhcmQgQyBMaWJyYXJ5IGhlYWRlciBAYyB3Y3R5cGUuaCwKKyAqICBhbmQgaXRzIGNvbnRlbnRzIGFyZSAobW9zdGx5KSB0aGUgc2FtZSBhcyB0aGF0IGhlYWRlciwgYnV0IGFyZSBhbGwKKyAqICBjb250YWluZWQgaW4gdGhlIG5hbWVzcGFjZSBAYyBzdGQgKGV4Y2VwdCBmb3IgbmFtZXMgd2hpY2ggYXJlIGRlZmluZWQKKyAqICBhcyBtYWNyb3MgaW4gQykuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDxjd2N0eXBlPgorLy8KKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKworI2lmIF9HTElCQ1hYX0hBVkVfV0NUWVBFX0gKKyNpbmNsdWRlIDx3Y3R5cGUuaD4KKyNlbmRpZgorCisjaWZuZGVmIF9HTElCQ1hYX0NXQ1RZUEUKKyNkZWZpbmUgX0dMSUJDWFhfQ1dDVFlQRSAxCisKKy8vIEdldCByaWQgb2YgdGhvc2UgbWFjcm9zIGRlZmluZWQgaW4gPHdjdHlwZS5oPiBpbiBsaWV1IG9mIHJlYWwgZnVuY3Rpb25zLgorI3VuZGVmIGlzd2FsbnVtCisjdW5kZWYgaXN3YWxwaGEKKyNpZiBfR0xJQkNYWF9IQVZFX0lTV0JMQU5LCisjIHVuZGVmIGlzd2JsYW5rCisjZW5kaWYKKyN1bmRlZiBpc3djbnRybAorI3VuZGVmIGlzd2N0eXBlCisjdW5kZWYgaXN3ZGlnaXQKKyN1bmRlZiBpc3dncmFwaAorI3VuZGVmIGlzd2xvd2VyCisjdW5kZWYgaXN3cHJpbnQKKyN1bmRlZiBpc3dwdW5jdAorI3VuZGVmIGlzd3NwYWNlCisjdW5kZWYgaXN3dXBwZXIKKyN1bmRlZiBpc3d4ZGlnaXQKKyN1bmRlZiB0b3djdHJhbnMKKyN1bmRlZiB0b3dsb3dlcgorI3VuZGVmIHRvd3VwcGVyCisjdW5kZWYgd2N0cmFucworI3VuZGVmIHdjdHlwZQorCisjaWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICB1c2luZyA6OndjdHJhbnNfdDsKKyAgdXNpbmcgOjp3Y3R5cGVfdDsKKyAgdXNpbmcgOjp3aW50X3Q7CisKKyAgdXNpbmcgOjppc3dhbG51bTsKKyAgdXNpbmcgOjppc3dhbHBoYTsKKyNpZiBfR0xJQkNYWF9IQVZFX0lTV0JMQU5LCisgIHVzaW5nIDo6aXN3Ymxhbms7CisjZW5kaWYKKyAgdXNpbmcgOjppc3djbnRybDsKKyAgdXNpbmcgOjppc3djdHlwZTsKKyAgdXNpbmcgOjppc3dkaWdpdDsKKyAgdXNpbmcgOjppc3dncmFwaDsKKyAgdXNpbmcgOjppc3dsb3dlcjsKKyAgdXNpbmcgOjppc3dwcmludDsKKyAgdXNpbmcgOjppc3dwdW5jdDsKKyAgdXNpbmcgOjppc3dzcGFjZTsKKyAgdXNpbmcgOjppc3d1cHBlcjsKKyAgdXNpbmcgOjppc3d4ZGlnaXQ7CisgIHVzaW5nIDo6dG93Y3RyYW5zOworICB1c2luZyA6OnRvd2xvd2VyOworICB1c2luZyA6OnRvd3VwcGVyOworICB1c2luZyA6OndjdHJhbnM7CisgIHVzaW5nIDo6d2N0eXBlOworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZiAvL19HTElCQ1hYX1VTRV9XQ0hBUl9UCisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworIyAgaWYgZGVmaW5lZChfR0xJQkNYWF9JTkNMVURFX0FTX1RSMSkKKyMgICAgZXJyb3IgQysrMHggaGVhZGVyIGNhbm5vdCBiZSBpbmNsdWRlZCBmcm9tIFRSMSBoZWFkZXIKKyMgIGVuZGlmCisjICBpZiBkZWZpbmVkKF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgpCisjICAgIGluY2x1ZGUgPHRyMV9pbXBsL2N3Y3R5cGU+CisjICBlbHNlCisjICAgIGRlZmluZSBfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYCisjICAgIGRlZmluZSBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxCisjICAgIGRlZmluZSBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorIyAgICBkZWZpbmUgX0dMSUJDWFhfVFIxCisjICAgIGluY2x1ZGUgPHRyMV9pbXBsL2N3Y3R5cGU+CisjICAgIHVuZGVmIF9HTElCQ1hYX1RSMQorIyAgICB1bmRlZiBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorIyAgICB1bmRlZiBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxCisjICAgIHVuZGVmIF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgKKyMgIGVuZGlmCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2N4eGFiaS1mb3JjZWQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY3h4YWJpLWZvcmNlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZmYzNDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2N4eGFiaS1mb3JjZWQuaApAQCAtMCwwICsxLDU5IEBACisvLyBjeHhhYmkuaCBzdWJzZXQgZm9yIGluY2x1c2lvbiBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMgLSotIEMrKyAtKi0KKyAgCisvLyBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorLy8KKy8vIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisvLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisvLyAKKy8vIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisvLyAKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBjeHhhYmktZm9yY2VkLmgKKyAqICBUaGUgaGVhZGVyIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0byB0aGUgQysrIEFCSS4KKyAqLworCisjaWZuZGVmIF9DWFhBQklfRk9SQ0VEX0gKKyNkZWZpbmUgX0NYWEFCSV9GT1JDRURfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGRlZmF1bHQpCisKKyNpZmRlZiBfX2NwbHVzcGx1cworbmFtZXNwYWNlIF9fY3h4YWJpdjEKK3sgIAorICAvKiogCisgICAqICBAYnJpZWYgVGhyb3duIGFzIHBhcnQgb2YgZm9yY2VkIHVud2luZGluZy4KKyAgICogIEBpbmdyb3VwIGV4Y2VwdGlvbnMKKyAgICoKKyAgICogIEEgbWFnaWMgcGxhY2Vob2xkZXIgY2xhc3MgdGhhdCBjYW4gYmUgY2F1Z2h0IGJ5IHJlZmVyZW5jZSB0bworICAgKiAgcmVjb2duaXplIGZvcmNlZCB1bndpbmRpbmcuCisgICAqLworICBjbGFzcyBfX2ZvcmNlZF91bndpbmQKKyAgeworICAgIHZpcnR1YWwgfl9fZm9yY2VkX3Vud2luZCgpIHRocm93KCk7CisKKyAgICAvLyBQcmV2ZW50IGNhdGNoIGJ5IHZhbHVlLgorICAgIHZpcnR1YWwgdm9pZCBfX3B1cmVfZHVtbXkoKSA9IDA7IAorICB9OworfQorI2VuZGlmIC8vIF9fY3BsdXNwbHVzCisKKyNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcG9wCisKKyNlbmRpZiAvLyBfX0NYWEFCSV9GT1JDRURfSCAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvY3h4YWJpLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2N4eGFiaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZTNiOGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2N4eGFiaS5oCkBAIC0wLDAgKzEsNjMxIEBACisvLyBuZXcgYWJpIHN1cHBvcnQgLSotIEMrKyAtKi0KKyAgCisvLyBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKy8vCisvLyBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorLy8gCisvLyBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLy8gCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBXcml0dGVuIGJ5IE5hdGhhbiBTaWR3ZWxsLCBDb2Rlc291cmNlcnkgTExDLCA8bmF0aGFuQGNvZGVzb3VyY2VyeS5jb20+CisgCisvKiBUaGlzIGZpbGUgZGVjbGFyZXMgdGhlIG5ldyBhYmkgZW50cnkgcG9pbnRzIGludG8gdGhlIHJ1bnRpbWUuIEl0IGlzIG5vdAorICAgbm9ybWFsbHkgbmVjZXNzYXJ5IGZvciB1c2VyIHByb2dyYW1zIHRvIGluY2x1ZGUgdGhpcyBoZWFkZXIsIG9yIHVzZSB0aGUKKyAgIGVudHJ5IHBvaW50cyBkaXJlY3RseS4gSG93ZXZlciwgdGhpcyBoZWFkZXIgaXMgYXZhaWxhYmxlIHNob3VsZCB0aGF0IGJlCisgICBuZWVkZWQuCisgICAKKyAgIFNvbWUgb2YgdGhlIGVudHJ5IHBvaW50cyBhcmUgaW50ZW5kZWQgZm9yIGJvdGggQyBhbmQgQysrLCB0aHVzIHRoaXMgaGVhZGVyCisgICBpcyBpbmNsdWRhYmxlIGZyb20gYm90aCBDIGFuZCBDKysuIFRob3VnaCB0aGUgQysrIHNwZWNpZmljIHBhcnRzIGFyZSBub3QKKyAgIGF2YWlsYWJsZSBpbiBDLCBuYXR1cmFsbHkgZW5vdWdoLiAgKi8KKworLyoqIEBmaWxlIGN4eGFiaS5oCisgKiAgVGhlIGhlYWRlciBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gdGhlIEMrKyBBQkkuCisgKi8KKworI2lmbmRlZiBfQ1hYQUJJX0gKKyNkZWZpbmUgX0NYWEFCSV9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHB1c2goZGVmYXVsdCkKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPGJpdHMvY3h4YWJpX3R3ZWFrcy5oPgorI2luY2x1ZGUgPGN4eGFiaS1mb3JjZWQuaD4KKyAKKyNpZmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBfR0xJQkNYWF9OT1RIUk9XIHRocm93KCkgCisjZWxzZQorI2RlZmluZSBfR0xJQkNYWF9OT1RIUk9XIF9fYXR0cmlidXRlX18oKG5vdGhyb3cpKQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworbmFtZXNwYWNlIF9fY3h4YWJpdjEKK3sgIAorICBleHRlcm4gIkMiIAorICB7CisjZW5kaWYKKworICB0eXBlZGVmIF9fY3hhX2NkdG9yX3JldHVybl90eXBlICgqX19jeGFfY2R0b3JfdHlwZSkodm9pZCAqKTsKKworICAvLyBBbGxvY2F0ZSBhcnJheS4KKyAgdm9pZCogCisgIF9fY3hhX3ZlY19uZXcoc2l6ZV90IF9fZWxlbWVudF9jb3VudCwgc2l6ZV90IF9fZWxlbWVudF9zaXplLCAKKwkJc2l6ZV90IF9fcGFkZGluZ19zaXplLCBfX2N4YV9jZHRvcl90eXBlIGNvbnN0cnVjdG9yLAorCQlfX2N4YV9jZHRvcl90eXBlIGRlc3RydWN0b3IpOworCisgIHZvaWQqCisgIF9fY3hhX3ZlY19uZXcyKHNpemVfdCBfX2VsZW1lbnRfY291bnQsIHNpemVfdCBfX2VsZW1lbnRfc2l6ZSwKKwkJIHNpemVfdCBfX3BhZGRpbmdfc2l6ZSwgX19jeGFfY2R0b3JfdHlwZSBjb25zdHJ1Y3RvciwKKwkJIF9fY3hhX2NkdG9yX3R5cGUgZGVzdHJ1Y3Rvciwgdm9pZCAqKCpfX2FsbG9jKSAoc2l6ZV90KSwgCisJCSB2b2lkICgqX19kZWFsbG9jKSAodm9pZCopKTsKKworICB2b2lkKgorICBfX2N4YV92ZWNfbmV3MyhzaXplX3QgX19lbGVtZW50X2NvdW50LCBzaXplX3QgX19lbGVtZW50X3NpemUsCisJCSBzaXplX3QgX19wYWRkaW5nX3NpemUsIF9fY3hhX2NkdG9yX3R5cGUgY29uc3RydWN0b3IsCisJCSBfX2N4YV9jZHRvcl90eXBlIGRlc3RydWN0b3IsIHZvaWQgKigqX19hbGxvYykgKHNpemVfdCksIAorCQkgdm9pZCAoKl9fZGVhbGxvYykgKHZvaWQqLCBzaXplX3QpKTsKKworICAvLyBDb25zdHJ1Y3QgYXJyYXkuCisgIF9fY3hhX3ZlY19jdG9yX3JldHVybl90eXBlCisgIF9fY3hhX3ZlY19jdG9yKHZvaWQqIF9fYXJyYXlfYWRkcmVzcywgc2l6ZV90IF9fZWxlbWVudF9jb3VudCwKKwkJIHNpemVfdCBfX2VsZW1lbnRfc2l6ZSwgX19jeGFfY2R0b3JfdHlwZSBjb25zdHJ1Y3RvciwKKwkJIF9fY3hhX2NkdG9yX3R5cGUgZGVzdHJ1Y3Rvcik7CisKKyAgX19jeGFfdmVjX2N0b3JfcmV0dXJuX3R5cGUKKyAgX19jeGFfdmVjX2NjdG9yKHZvaWQqIGRlc3RfYXJyYXksIHZvaWQqIHNyY19hcnJheSwgc2l6ZV90IGVsZW1lbnRfY291bnQsIAorCQkgIHNpemVfdCBlbGVtZW50X3NpemUsIAorCQkgIF9fY3hhX2NkdG9yX3JldHVybl90eXBlICgqY29uc3RydWN0b3IpICh2b2lkKiwgdm9pZCopLCAKKwkJICBfX2N4YV9jZHRvcl90eXBlIGRlc3RydWN0b3IpOworIAorICAvLyBEZXN0cnVjdCBhcnJheS4KKyAgdm9pZCAKKyAgX19jeGFfdmVjX2R0b3Iodm9pZCogX19hcnJheV9hZGRyZXNzLCBzaXplX3QgX19lbGVtZW50X2NvdW50LAorCQkgc2l6ZV90IF9fZWxlbWVudF9zaXplLCBfX2N4YV9jZHRvcl90eXBlIGRlc3RydWN0b3IpOworICAKKyAgdm9pZCAKKyAgX19jeGFfdmVjX2NsZWFudXAodm9pZCogX19hcnJheV9hZGRyZXNzLCBzaXplX3QgX19lbGVtZW50X2NvdW50LAorCQkgICAgc2l6ZV90IF9fcywgX19jeGFfY2R0b3JfdHlwZSBkZXN0cnVjdG9yKSBfR0xJQkNYWF9OT1RIUk9XOworICAKKyAgLy8gRGVzdHJ1Y3QgYW5kIHJlbGVhc2UgYXJyYXkuCisgIHZvaWQgCisgIF9fY3hhX3ZlY19kZWxldGUodm9pZCogX19hcnJheV9hZGRyZXNzLCBzaXplX3QgX19lbGVtZW50X3NpemUsCisJCSAgIHNpemVfdCBfX3BhZGRpbmdfc2l6ZSwgX19jeGFfY2R0b3JfdHlwZSBkZXN0cnVjdG9yKTsKKworICB2b2lkIAorICBfX2N4YV92ZWNfZGVsZXRlMih2b2lkKiBfX2FycmF5X2FkZHJlc3MsIHNpemVfdCBfX2VsZW1lbnRfc2l6ZSwKKwkJICAgIHNpemVfdCBfX3BhZGRpbmdfc2l6ZSwgX19jeGFfY2R0b3JfdHlwZSBkZXN0cnVjdG9yLAorCQkgICAgdm9pZCAoKl9fZGVhbGxvYykgKHZvaWQqKSk7CisgICAgICAgICAgICAgICAgICAKKyAgdm9pZCAKKyAgX19jeGFfdmVjX2RlbGV0ZTModm9pZCogX19hcnJheV9hZGRyZXNzLCBzaXplX3QgX19lbGVtZW50X3NpemUsCisJCSAgICBzaXplX3QgX19wYWRkaW5nX3NpemUsIF9fY3hhX2NkdG9yX3R5cGUgZGVzdHJ1Y3RvciwKKwkJICAgIHZvaWQgKCpfX2RlYWxsb2MpICh2b2lkKiwgc2l6ZV90KSk7CisKKyAgaW50IAorICBfX2N4YV9ndWFyZF9hY3F1aXJlKF9fZ3VhcmQqKTsKKworICB2b2lkIAorICBfX2N4YV9ndWFyZF9yZWxlYXNlKF9fZ3VhcmQqKSBfR0xJQkNYWF9OT1RIUk9XOworCisgIHZvaWQgCisgIF9fY3hhX2d1YXJkX2Fib3J0KF9fZ3VhcmQqKSBfR0xJQkNYWF9OT1RIUk9XOworCisgIC8vIFB1cmUgdmlydHVhbCBmdW5jdGlvbnMuCisgIHZvaWQKKyAgX19jeGFfcHVyZV92aXJ0dWFsKHZvaWQpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKKworICAvLyBFeGNlcHRpb24gaGFuZGxpbmcuCisgIHZvaWQKKyAgX19jeGFfYmFkX2Nhc3QoKTsKKworICB2b2lkCisgIF9fY3hhX2JhZF90eXBlaWQoKTsKKworICAvLyBEU08gZGVzdHJ1Y3Rpb24uCisgIGludAorICBfX2N4YV9hdGV4aXQodm9pZCAoKikodm9pZCopLCB2b2lkKiwgdm9pZCopIF9HTElCQ1hYX05PVEhST1c7CisKKyAgaW50CisgIF9fY3hhX2ZpbmFsaXplKHZvaWQqKTsKKworCisgIC8qKgorICAgKiAgQGJyaWVmIERlbWFuZ2xpbmcgcm91dGluZS4gCisgICAqICBBQkktbWFuZGF0ZWQgZW50cnkgcG9pbnQgaW4gdGhlIEMrKyBydW50aW1lIGxpYnJhcnkgZm9yIGRlbWFuZ2xpbmcuCisgICAqCisgICAqICBAcGFyYW0gX19tYW5nbGVkX25hbWUgQSBOVUwtdGVybWluYXRlZCBjaGFyYWN0ZXIgc3RyaW5nCisgICAqICBjb250YWluaW5nIHRoZSBuYW1lIHRvIGJlIGRlbWFuZ2xlZC4KKyAgICoKKyAgICogIEBwYXJhbSBfX291dHB1dF9idWZmZXIgQSByZWdpb24gb2YgbWVtb3J5LCBhbGxvY2F0ZWQgd2l0aAorICAgKiAgbWFsbG9jLCBvZiBAYSAqX19sZW5ndGggYnl0ZXMsIGludG8gd2hpY2ggdGhlIGRlbWFuZ2xlZCBuYW1lIGlzCisgICAqICBzdG9yZWQuICBJZiBAYSBfX291dHB1dF9idWZmZXIgaXMgbm90IGxvbmcgZW5vdWdoLCBpdCBpcworICAgKiAgZXhwYW5kZWQgdXNpbmcgcmVhbGxvYy4gIEBhIF9fb3V0cHV0X2J1ZmZlciBtYXkgaW5zdGVhZCBiZSBOVUxMOworICAgKiAgaW4gdGhhdCBjYXNlLCB0aGUgZGVtYW5nbGVkIG5hbWUgaXMgcGxhY2VkIGluIGEgcmVnaW9uIG9mIG1lbW9yeQorICAgKiAgYWxsb2NhdGVkIHdpdGggbWFsbG9jLgorICAgKgorICAgKiAgQHBhcmFtIF9fbGVuZ3RoIElmIEBhIF9fbGVuZ3RoIGlzIG5vbi1OVUxMLCB0aGUgbGVuZ3RoIG9mIHRoZQorICAgKiAgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRlbWFuZ2xlZCBuYW1lIGlzIHBsYWNlZCBpbiBAYSAqX19sZW5ndGguCisgICAqCisgICAqICBAcGFyYW0gX19zdGF0dXMgQGEgKl9fc3RhdHVzIGlzIHNldCB0byBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICAqICAgMDogVGhlIGRlbWFuZ2xpbmcgb3BlcmF0aW9uIHN1Y2NlZWRlZC4KKyAgICogIC0xOiBBIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgb2NjdXJyZWQuCisgICAqICAtMjogQGEgbWFuZ2xlZF9uYW1lIGlzIG5vdCBhIHZhbGlkIG5hbWUgdW5kZXIgdGhlIEMrKyBBQkkgbWFuZ2xpbmcgcnVsZXMuCisgICAqICAtMzogT25lIG9mIHRoZSBhcmd1bWVudHMgaXMgaW52YWxpZC4KKyAgICoKKyAgICogIEByZXR1cm4gQSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgTlVMLXRlcm1pbmF0ZWQgZGVtYW5nbGVkCisgICAqICBuYW1lLCBvciBOVUxMIGlmIHRoZSBkZW1hbmdsaW5nIGZhaWxzLiAgVGhlIGNhbGxlciBpcworICAgKiAgcmVzcG9uc2libGUgZm9yIGRlYWxsb2NhdGluZyB0aGlzIG1lbW9yeSB1c2luZyBAYyBmcmVlLgorICAgKgorICAgKiAgVGhlIGRlbWFuZ2xpbmcgaXMgcGVyZm9ybWVkIHVzaW5nIHRoZSBDKysgQUJJIG1hbmdsaW5nIHJ1bGVzLAorICAgKiAgd2l0aCBHTlUgZXh0ZW5zaW9ucy4gRm9yIGV4YW1wbGUsIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbgorICAgKiAgX19nbnVfY3h4OjpfX3ZlcmJvc2VfdGVybWluYXRlX2hhbmRsZXIuCisgICAqIAorICAgKiAgU2VlIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2xpYnN0ZGMrKy9tYW51YWwvYmswMXB0MTJjaDM5Lmh0bWwKKyAgICogIGZvciBvdGhlciBleGFtcGxlcyBvZiB1c2UuCisgICAqCisgICAqICBAbm90ZSBUaGUgc2FtZSBkZW1hbmdsaW5nIGZ1bmN0aW9uYWxpdHkgaXMgYXZhaWxhYmxlIHZpYQorICAgKiAgbGliaWJlcnR5IChAYyA8bGliaWJlcnR5L2RlbWFuZ2xlLmg+IGFuZCBAYyBsaWJpYmVydHkuYSkgaW4gR0NDCisgICAqICAzLjEgYW5kIGxhdGVyLCBidXQgdGhhdCByZXF1aXJlcyBleHBsaWNpdCBpbnN0YWxsYXRpb24gKEBjCisgICAqICAtLWVuYWJsZS1pbnN0YWxsLWxpYmliZXJ0eSkgYW5kIHVzZXMgYSBkaWZmZXJlbnQgQVBJLCBhbHRob3VnaAorICAgKiAgdGhlIEFCSSBpcyB1bmNoYW5nZWQuCisgICAqLworICBjaGFyKgorICBfX2N4YV9kZW1hbmdsZShjb25zdCBjaGFyKiBfX21hbmdsZWRfbmFtZSwgY2hhciogX19vdXRwdXRfYnVmZmVyLAorCQkgc2l6ZV90KiBfX2xlbmd0aCwgaW50KiBfX3N0YXR1cyk7CisjaWZkZWYgX19jcGx1c3BsdXMKKyAgfQorfSAvLyBuYW1lc3BhY2UgX19jeHhhYml2MQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworCisjaW5jbHVkZSA8dHlwZWluZm8+CisKK25hbWVzcGFjZSBfX2N4eGFiaXYxCit7CisgIC8vIFR5cGUgaW5mb3JtYXRpb24gZm9yIGludCwgZmxvYXQgZXRjLgorICBjbGFzcyBfX2Z1bmRhbWVudGFsX3R5cGVfaW5mbyA6IHB1YmxpYyBzdGQ6OnR5cGVfaW5mbworICB7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCAKKyAgICBfX2Z1bmRhbWVudGFsX3R5cGVfaW5mbyhjb25zdCBjaGFyKiBfX24pIDogc3RkOjp0eXBlX2luZm8oX19uKSB7IH0KKworICAgIHZpcnR1YWwgCisgICAgfl9fZnVuZGFtZW50YWxfdHlwZV9pbmZvKCk7CisgIH07CisKKyAgLy8gVHlwZSBpbmZvcm1hdGlvbiBmb3IgYXJyYXkgb2JqZWN0cy4KKyAgY2xhc3MgX19hcnJheV90eXBlX2luZm8gOiBwdWJsaWMgc3RkOjp0eXBlX2luZm8KKyAgeworICBwdWJsaWM6CisgICAgZXhwbGljaXQgCisgICAgX19hcnJheV90eXBlX2luZm8oY29uc3QgY2hhciogX19uKSA6IHN0ZDo6dHlwZV9pbmZvKF9fbikgeyB9CisKKyAgICB2aXJ0dWFsIAorICAgIH5fX2FycmF5X3R5cGVfaW5mbygpOworICB9OworCisgIC8vIFR5cGUgaW5mb3JtYXRpb24gZm9yIGZ1bmN0aW9ucyAoYm90aCBtZW1iZXIgYW5kIG5vbi1tZW1iZXIpLgorICBjbGFzcyBfX2Z1bmN0aW9uX3R5cGVfaW5mbyA6IHB1YmxpYyBzdGQ6OnR5cGVfaW5mbworICB7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCAKKyAgICBfX2Z1bmN0aW9uX3R5cGVfaW5mbyhjb25zdCBjaGFyKiBfX24pIDogc3RkOjp0eXBlX2luZm8oX19uKSB7IH0KKworICAgIHZpcnR1YWwgCisgICAgfl9fZnVuY3Rpb25fdHlwZV9pbmZvKCk7CisKKyAgcHJvdGVjdGVkOgorICAgIC8vIEltcGxlbWVudGF0aW9uIGRlZmluZWQgbWVtYmVyIGZ1bmN0aW9uLgorICAgIHZpcnR1YWwgYm9vbCAKKyAgICBfX2lzX2Z1bmN0aW9uX3AoKSBjb25zdDsKKyAgfTsKKworICAvLyBUeXBlIGluZm9ybWF0aW9uIGZvciBlbnVtZXJhdGlvbnMuCisgIGNsYXNzIF9fZW51bV90eXBlX2luZm8gOiBwdWJsaWMgc3RkOjp0eXBlX2luZm8KKyAgeworICBwdWJsaWM6CisgICAgZXhwbGljaXQgCisgICAgX19lbnVtX3R5cGVfaW5mbyhjb25zdCBjaGFyKiBfX24pIDogc3RkOjp0eXBlX2luZm8oX19uKSB7IH0KKworICAgIHZpcnR1YWwgCisgICAgfl9fZW51bV90eXBlX2luZm8oKTsKKyAgfTsKKworICAvLyBDb21tb24gdHlwZSBpbmZvcm1hdGlvbiBmb3Igc2ltcGxlIHBvaW50ZXJzIGFuZCBwb2ludGVycyB0byBtZW1iZXIuCisgIGNsYXNzIF9fcGJhc2VfdHlwZV9pbmZvIDogcHVibGljIHN0ZDo6dHlwZV9pbmZvCisgIHsKKyAgcHVibGljOgorICAgIHVuc2lnbmVkIGludCAJCV9fZmxhZ3M7IC8vIFF1YWxpZmljYXRpb24gb2YgdGhlIHRhcmdldCBvYmplY3QuCisgICAgY29uc3Qgc3RkOjp0eXBlX2luZm8qIAlfX3BvaW50ZWU7IC8vIFR5cGUgb2YgcG9pbnRlZCB0byBvYmplY3QuCisKKyAgICBleHBsaWNpdCAKKyAgICBfX3BiYXNlX3R5cGVfaW5mbyhjb25zdCBjaGFyKiBfX24sIGludCBfX3F1YWxzLCAKKwkJICAgICAgY29uc3Qgc3RkOjp0eXBlX2luZm8qIF9fdHlwZSkKKyAgICA6IHN0ZDo6dHlwZV9pbmZvKF9fbiksIF9fZmxhZ3MoX19xdWFscyksIF9fcG9pbnRlZShfX3R5cGUpCisgICAgeyB9CisgICAgCisgICAgdmlydHVhbCAKKyAgICB+X19wYmFzZV90eXBlX2luZm8oKTsKKworICAgIC8vIEltcGxlbWVudGF0aW9uIGRlZmluZWQgdHlwZS4KKyAgICBlbnVtIF9fbWFza3MgCisgICAgICB7CisJX19jb25zdF9tYXNrID0gMHgxLAorCV9fdm9sYXRpbGVfbWFzayA9IDB4MiwKKwlfX3Jlc3RyaWN0X21hc2sgPSAweDQsCisJX19pbmNvbXBsZXRlX21hc2sgPSAweDgsCisJX19pbmNvbXBsZXRlX2NsYXNzX21hc2sgPSAweDEwCisgICAgICB9OworCisgIHByb3RlY3RlZDoKKyAgICBfX3BiYXNlX3R5cGVfaW5mbyhjb25zdCBfX3BiYXNlX3R5cGVfaW5mbyYpOworCisgICAgX19wYmFzZV90eXBlX2luZm8mCisgICAgb3BlcmF0b3I9KGNvbnN0IF9fcGJhc2VfdHlwZV9pbmZvJik7CisKKyAgICAvLyBJbXBsZW1lbnRhdGlvbiBkZWZpbmVkIG1lbWJlciBmdW5jdGlvbnMuCisgICAgdmlydHVhbCBib29sIAorICAgIF9fZG9fY2F0Y2goY29uc3Qgc3RkOjp0eXBlX2luZm8qIF9fdGhyX3R5cGUsIHZvaWQqKiBfX3Rocl9vYmosIAorCSAgICAgICB1bnNpZ25lZCBpbnQgX19vdXRlcikgY29uc3Q7CisKKyAgICBpbmxpbmUgdmlydHVhbCBib29sIAorICAgIF9fcG9pbnRlcl9jYXRjaChjb25zdCBfX3BiYXNlX3R5cGVfaW5mbyogX190aHJfdHlwZSwgdm9pZCoqIF9fdGhyX29iaiwKKwkJICAgIHVuc2lnbmVkIF9fb3V0ZXIpIGNvbnN0OworICB9OworCisgIC8vIFR5cGUgaW5mb3JtYXRpb24gZm9yIHNpbXBsZSBwb2ludGVycy4KKyAgY2xhc3MgX19wb2ludGVyX3R5cGVfaW5mbyA6IHB1YmxpYyBfX3BiYXNlX3R5cGVfaW5mbworICB7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCAKKyAgICBfX3BvaW50ZXJfdHlwZV9pbmZvKGNvbnN0IGNoYXIqIF9fbiwgaW50IF9fcXVhbHMsIAorCQkJY29uc3Qgc3RkOjp0eXBlX2luZm8qIF9fdHlwZSkKKyAgICA6IF9fcGJhc2VfdHlwZV9pbmZvIChfX24sIF9fcXVhbHMsIF9fdHlwZSkgeyB9CisKKworICAgIHZpcnR1YWwgCisgICAgfl9fcG9pbnRlcl90eXBlX2luZm8oKTsKKworICBwcm90ZWN0ZWQ6CisgICAgLy8gSW1wbGVtZW50YXRpb24gZGVmaW5lZCBtZW1iZXIgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgYm9vbCAKKyAgICBfX2lzX3BvaW50ZXJfcCgpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIAorICAgIF9fcG9pbnRlcl9jYXRjaChjb25zdCBfX3BiYXNlX3R5cGVfaW5mbyogX190aHJfdHlwZSwgdm9pZCoqIF9fdGhyX29iaiwgCisJCSAgICB1bnNpZ25lZCBfX291dGVyKSBjb25zdDsKKyAgfTsKKworICBjbGFzcyBfX2NsYXNzX3R5cGVfaW5mbzsKKworICAvLyBUeXBlIGluZm9ybWF0aW9uIGZvciBhIHBvaW50ZXIgdG8gbWVtYmVyIHZhcmlhYmxlLgorICBjbGFzcyBfX3BvaW50ZXJfdG9fbWVtYmVyX3R5cGVfaW5mbyA6IHB1YmxpYyBfX3BiYXNlX3R5cGVfaW5mbworICB7CisgIHB1YmxpYzoKKyAgICBfX2NsYXNzX3R5cGVfaW5mbyogX19jb250ZXh0OyAgIC8vIENsYXNzIG9mIHRoZSBtZW1iZXIuCisKKyAgICBleHBsaWNpdCAKKyAgICBfX3BvaW50ZXJfdG9fbWVtYmVyX3R5cGVfaW5mbyhjb25zdCBjaGFyKiBfX24sIGludCBfX3F1YWxzLAorCQkJCSAgY29uc3Qgc3RkOjp0eXBlX2luZm8qIF9fdHlwZSwgCisJCQkJICBfX2NsYXNzX3R5cGVfaW5mbyogX19rbGFzcykKKyAgICA6IF9fcGJhc2VfdHlwZV9pbmZvKF9fbiwgX19xdWFscywgX190eXBlKSwgX19jb250ZXh0KF9fa2xhc3MpIHsgfQorCisgICAgdmlydHVhbCAKKyAgICB+X19wb2ludGVyX3RvX21lbWJlcl90eXBlX2luZm8oKTsKKworICBwcm90ZWN0ZWQ6CisgICAgX19wb2ludGVyX3RvX21lbWJlcl90eXBlX2luZm8oY29uc3QgX19wb2ludGVyX3RvX21lbWJlcl90eXBlX2luZm8mKTsKKworICAgIF9fcG9pbnRlcl90b19tZW1iZXJfdHlwZV9pbmZvJgorICAgIG9wZXJhdG9yPShjb25zdCBfX3BvaW50ZXJfdG9fbWVtYmVyX3R5cGVfaW5mbyYpOworCisgICAgLy8gSW1wbGVtZW50YXRpb24gZGVmaW5lZCBtZW1iZXIgZnVuY3Rpb24uCisgICAgdmlydHVhbCBib29sIAorICAgIF9fcG9pbnRlcl9jYXRjaChjb25zdCBfX3BiYXNlX3R5cGVfaW5mbyogX190aHJfdHlwZSwgdm9pZCoqIF9fdGhyX29iaiwKKwkJICAgIHVuc2lnbmVkIF9fb3V0ZXIpIGNvbnN0OworICB9OworCisgIC8vIEhlbHBlciBjbGFzcyBmb3IgX192bWlfY2xhc3NfdHlwZS4KKyAgY2xhc3MgX19iYXNlX2NsYXNzX3R5cGVfaW5mbworICB7CisgIHB1YmxpYzoKKyAgICBjb25zdCBfX2NsYXNzX3R5cGVfaW5mbyogCV9fYmFzZV90eXBlOyAgLy8gQmFzZSBjbGFzcyB0eXBlLgorICAgIGxvbmcgCQkJX19vZmZzZXRfZmxhZ3M7ICAvLyBPZmZzZXQgYW5kIGluZm8uCisKKyAgICBlbnVtIF9fb2Zmc2V0X2ZsYWdzX21hc2tzIAorICAgICAgeworCV9fdmlydHVhbF9tYXNrID0gMHgxLAorCV9fcHVibGljX21hc2sgPSAweDIsCisJX19od21fYml0ID0gMiwKKwlfX29mZnNldF9zaGlmdCA9IDggICAgICAgICAgLy8gQml0cyB0byBzaGlmdCBvZmZzZXQuCisgICAgICB9OworICAKKyAgICAvLyBJbXBsZW1lbnRhdGlvbiBkZWZpbmVkIG1lbWJlciBmdW5jdGlvbnMuCisgICAgYm9vbCAKKyAgICBfX2lzX3ZpcnR1YWxfcCgpIGNvbnN0CisgICAgeyByZXR1cm4gX19vZmZzZXRfZmxhZ3MgJiBfX3ZpcnR1YWxfbWFzazsgfQorCisgICAgYm9vbCAKKyAgICBfX2lzX3B1YmxpY19wKCkgY29uc3QKKyAgICB7IHJldHVybiBfX29mZnNldF9mbGFncyAmIF9fcHVibGljX21hc2s7IH0KKworICAgIHB0cmRpZmZfdCAKKyAgICBfX29mZnNldCgpIGNvbnN0CisgICAgeyAKKyAgICAgIC8vIFRoaXMgc2hpZnQsIGJlaW5nIG9mIGEgc2lnbmVkIHR5cGUsIGlzIGltcGxlbWVudGF0aW9uCisgICAgICAvLyBkZWZpbmVkLiBHQ0MgaW1wbGVtZW50cyBzdWNoIHNoaWZ0cyBhcyBhcml0aG1ldGljLCB3aGljaCBpcworICAgICAgLy8gd2hhdCB3ZSB3YW50LgorICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oX19vZmZzZXRfZmxhZ3MpID4+IF9fb2Zmc2V0X3NoaWZ0OworICAgIH0KKyAgfTsKKworICAvLyBUeXBlIGluZm9ybWF0aW9uIGZvciBhIGNsYXNzLgorICBjbGFzcyBfX2NsYXNzX3R5cGVfaW5mbyA6IHB1YmxpYyBzdGQ6OnR5cGVfaW5mbworICB7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCAKKyAgICBfX2NsYXNzX3R5cGVfaW5mbyAoY29uc3QgY2hhciAqX19uKSA6IHR5cGVfaW5mbyhfX24pIHsgfQorCisgICAgdmlydHVhbCAKKyAgICB+X19jbGFzc190eXBlX2luZm8gKCk7CisKKyAgICAvLyBJbXBsZW1lbnRhdGlvbiBkZWZpbmVkIHR5cGVzLgorICAgIC8vIFRoZSB0eXBlIHN1Yl9raW5kIHRlbGxzIHVzIGFib3V0IGhvdyBhIGJhc2Ugb2JqZWN0IGlzIGNvbnRhaW5lZAorICAgIC8vIHdpdGhpbiBhIGRlcml2ZWQgb2JqZWN0LiBXZSBvZnRlbiBkbyB0aGlzIGxhemlseSwgaGVuY2UgdGhlCisgICAgLy8gVU5LTk9XTiB2YWx1ZS4gQXQgb3RoZXIgdGltZXMgd2UgbWF5IHVzZSBOT1RfQ09OVEFJTkVEIHRvIG1lYW4KKyAgICAvLyBub3QgcHVibGljbHkgY29udGFpbmVkLgorICAgIGVudW0gX19zdWJfa2luZAorICAgICAgeworCS8vIFdlIGhhdmUgbm8gaWRlYS4KKwlfX3Vua25vd24gPSAwLCAKKworCS8vIE5vdCBjb250YWluZWQgd2l0aGluIHVzIChpbiBzb21lIGNpcmN1bXN0YW5jZXMgdGhpcyBtaWdodAorCS8vIG1lYW4gbm90IGNvbnRhaW5lZCBwdWJsaWNseSkKKwlfX25vdF9jb250YWluZWQsIAorCisJLy8gQ29udGFpbmVkIGFtYmlndW91c2x5LgorCV9fY29udGFpbmVkX2FtYmlnLCAKKyAgICAKKwkvLyBWaWEgYSB2aXJ0dWFsIHBhdGguCisJX19jb250YWluZWRfdmlydHVhbF9tYXNrID0gX19iYXNlX2NsYXNzX3R5cGVfaW5mbzo6X192aXJ0dWFsX21hc2ssIAorCisJLy8gVmlhIGEgcHVibGljIHBhdGguCisJX19jb250YWluZWRfcHVibGljX21hc2sgPSBfX2Jhc2VfY2xhc3NfdHlwZV9pbmZvOjpfX3B1YmxpY19tYXNrLCAgIAorCisJLy8gQ29udGFpbmVkIHdpdGhpbiB1cy4KKwlfX2NvbnRhaW5lZF9tYXNrID0gMSA8PCBfX2Jhc2VfY2xhc3NfdHlwZV9pbmZvOjpfX2h3bV9iaXQsCisgICAgCisJX19jb250YWluZWRfcHJpdmF0ZSA9IF9fY29udGFpbmVkX21hc2ssCisJX19jb250YWluZWRfcHVibGljID0gX19jb250YWluZWRfbWFzayB8IF9fY29udGFpbmVkX3B1YmxpY19tYXNrCisgICAgICB9OworCisgICAgc3RydWN0IF9fdXBjYXN0X3Jlc3VsdDsKKyAgICBzdHJ1Y3QgX19keW5jYXN0X3Jlc3VsdDsKKworICBwcm90ZWN0ZWQ6CisgICAgLy8gSW1wbGVtZW50YXRpb24gZGVmaW5lZCBtZW1iZXIgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgYm9vbCAKKyAgICBfX2RvX3VwY2FzdChjb25zdCBfX2NsYXNzX3R5cGVfaW5mbyogX19kc3RfdHlwZSwgdm9pZCoqX19vYmpfcHRyKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCAKKyAgICBfX2RvX2NhdGNoKGNvbnN0IHR5cGVfaW5mbyogX190aHJfdHlwZSwgdm9pZCoqIF9fdGhyX29iaiwgCisJICAgICAgIHVuc2lnbmVkIF9fb3V0ZXIpIGNvbnN0OworCisgIHB1YmxpYzoKKyAgICAvLyBIZWxwZXIgZm9yIHVwY2FzdC4gU2VlIGlmIERTVCBpcyB1cywgb3Igb25lIG9mIG91ciBiYXNlcy4gCisgICAgLy8gUmV0dXJuIGZhbHNlIGlmIG5vdCBmb3VuZCwgdHJ1ZSBpZiBmb3VuZC4gCisgICAgdmlydHVhbCBib29sIAorICAgIF9fZG9fdXBjYXN0KGNvbnN0IF9fY2xhc3NfdHlwZV9pbmZvKiBfX2RzdCwgY29uc3Qgdm9pZCogX19vYmosCisJCV9fdXBjYXN0X3Jlc3VsdCYgX19yZXN0cmljdCBfX3Jlc3VsdCkgY29uc3Q7CisKKyAgICAvLyBJbmRpY2F0ZSB3aGV0aGVyIFNSQ19QVFIgb2YgdHlwZSBTUkNfVFlQRSBpcyBjb250YWluZWQgcHVibGljbHkKKyAgICAvLyB3aXRoaW4gT0JKX1BUUi4gT0JKX1BUUiBwb2ludHMgdG8gYSBiYXNlIG9iamVjdCBvZiBvdXIgdHlwZSwKKyAgICAvLyB3aGljaCBpcyB0aGUgZGVzdGluYXRpb24gdHlwZS4gU1JDMkRTVCBpbmRpY2F0ZXMgaG93IFNSQworICAgIC8vIG9iamVjdHMgbWlnaHQgYmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIHR5cGUuICBJZiBTUkNfUFRSIGlzIG9uZQorICAgIC8vIG9mIG91ciBTUkNfVFlQRSBiYXNlcywgaW5kaWNhdGUgdGhlIHZpcnR1YWxpdHkuIFJldHVybnMKKyAgICAvLyBub3RfY29udGFpbmVkIGZvciBub24gY29udGFpbm1lbnQgb3IgcHJpdmF0ZSBjb250YWlubWVudC4KKyAgICBpbmxpbmUgX19zdWJfa2luZCAKKyAgICBfX2ZpbmRfcHVibGljX3NyYyhwdHJkaWZmX3QgX19zcmMyZHN0LCBjb25zdCB2b2lkKiBfX29ial9wdHIsCisJCSAgICAgIGNvbnN0IF9fY2xhc3NfdHlwZV9pbmZvKiBfX3NyY190eXBlLCAKKwkJICAgICAgY29uc3Qgdm9pZCogX19zcmNfcHRyKSBjb25zdDsKKworICAgIC8vIEhlbHBlciBmb3IgZHluYW1pYyBjYXN0LiBBQ0NFU1NfUEFUSCBnaXZlcyB0aGUgYWNjZXNzIGZyb20gdGhlCisgICAgLy8gbW9zdCBkZXJpdmVkIG9iamVjdCB0byB0aGlzIGJhc2UuIERTVF9UWVBFIGluZGljYXRlcyB0aGUKKyAgICAvLyBkZXNpcmVkIHR5cGUgd2Ugd2FudC4gT0JKX1BUUiBwb2ludHMgdG8gYSBiYXNlIG9mIG91ciB0eXBlCisgICAgLy8gd2l0aGluIHRoZSBjb21wbGV0ZSBvYmplY3QuIFNSQ19UWVBFIGluZGljYXRlcyB0aGUgc3RhdGljIHR5cGUKKyAgICAvLyBzdGFydGVkIGZyb20gYW5kIFNSQ19QVFIgcG9pbnRzIHRvIHRoYXQgYmFzZSB3aXRoaW4gdGhlIG1vc3QKKyAgICAvLyBkZXJpdmVkIG9iamVjdC4gRmlsbCBpbiBSRVNVTFQgd2l0aCB3aGF0IHdlIGZpbmQuIFJldHVybiB0cnVlCisgICAgLy8gaWYgd2UgaGF2ZSBsb2NhdGVkIGFuIGFtYmlndW91cyBtYXRjaC4KKyAgICB2aXJ0dWFsIGJvb2wgCisgICAgX19kb19keW5jYXN0KHB0cmRpZmZfdCBfX3NyYzJkc3QsIF9fc3ViX2tpbmQgX19hY2Nlc3NfcGF0aCwKKwkJIGNvbnN0IF9fY2xhc3NfdHlwZV9pbmZvKiBfX2RzdF90eXBlLCBjb25zdCB2b2lkKiBfX29ial9wdHIsIAorCQkgY29uc3QgX19jbGFzc190eXBlX2luZm8qIF9fc3JjX3R5cGUsIGNvbnN0IHZvaWQqIF9fc3JjX3B0ciwgCisJCSBfX2R5bmNhc3RfcmVzdWx0JiBfX3Jlc3VsdCkgY29uc3Q7CisgICAgCisgICAgLy8gSGVscGVyIGZvciBmaW5kX3B1YmxpY19zdWJvYmouIFNSQzJEU1QgaW5kaWNhdGVzIGhvdyBTUkNfVFlQRQorICAgIC8vIGJhc2VzIGFyZSBpbmhlcml0ZWQgYnkgdGhlIHR5cGUgc3RhcnRlZCBmcm9tIC0tIHdoaWNoIGlzIG5vdAorICAgIC8vIG5lY2Vzc2FyaWx5IHRoZSBjdXJyZW50IHR5cGUuIFRoZSBjdXJyZW50IHR5cGUgd2lsbCBiZSBhIGJhc2UKKyAgICAvLyBvZiB0aGUgZGVzdGluYXRpb24gdHlwZS4gIE9CSl9QVFIgcG9pbnRzIHRvIHRoZSBjdXJyZW50IGJhc2UuCisgICAgdmlydHVhbCBfX3N1Yl9raW5kIAorICAgIF9fZG9fZmluZF9wdWJsaWNfc3JjKHB0cmRpZmZfdCBfX3NyYzJkc3QsIGNvbnN0IHZvaWQqIF9fb2JqX3B0ciwKKwkJCSBjb25zdCBfX2NsYXNzX3R5cGVfaW5mbyogX19zcmNfdHlwZSwKKwkJCSBjb25zdCB2b2lkKiBfX3NyY19wdHIpIGNvbnN0OworICB9OworCisgIC8vIFR5cGUgaW5mb3JtYXRpb24gZm9yIGEgY2xhc3Mgd2l0aCBhIHNpbmdsZSBub24tdmlydHVhbCBiYXNlLgorICBjbGFzcyBfX3NpX2NsYXNzX3R5cGVfaW5mbyA6IHB1YmxpYyBfX2NsYXNzX3R5cGVfaW5mbworICB7CisgIHB1YmxpYzoKKyAgICBjb25zdCBfX2NsYXNzX3R5cGVfaW5mbyogX19iYXNlX3R5cGU7CisKKyAgICBleHBsaWNpdCAKKyAgICBfX3NpX2NsYXNzX3R5cGVfaW5mbyhjb25zdCBjaGFyICpfX24sIGNvbnN0IF9fY2xhc3NfdHlwZV9pbmZvICpfX2Jhc2UpCisgICAgOiBfX2NsYXNzX3R5cGVfaW5mbyhfX24pLCBfX2Jhc2VfdHlwZShfX2Jhc2UpIHsgfQorCisgICAgdmlydHVhbCAKKyAgICB+X19zaV9jbGFzc190eXBlX2luZm8oKTsKKworICBwcm90ZWN0ZWQ6CisgICAgX19zaV9jbGFzc190eXBlX2luZm8oY29uc3QgX19zaV9jbGFzc190eXBlX2luZm8mKTsKKworICAgIF9fc2lfY2xhc3NfdHlwZV9pbmZvJgorICAgIG9wZXJhdG9yPShjb25zdCBfX3NpX2NsYXNzX3R5cGVfaW5mbyYpOworCisgICAgLy8gSW1wbGVtZW50YXRpb24gZGVmaW5lZCBtZW1iZXIgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgYm9vbCAKKyAgICBfX2RvX2R5bmNhc3QocHRyZGlmZl90IF9fc3JjMmRzdCwgX19zdWJfa2luZCBfX2FjY2Vzc19wYXRoLAorCQkgY29uc3QgX19jbGFzc190eXBlX2luZm8qIF9fZHN0X3R5cGUsIGNvbnN0IHZvaWQqIF9fb2JqX3B0ciwKKwkJIGNvbnN0IF9fY2xhc3NfdHlwZV9pbmZvKiBfX3NyY190eXBlLCBjb25zdCB2b2lkKiBfX3NyY19wdHIsCisJCSBfX2R5bmNhc3RfcmVzdWx0JiBfX3Jlc3VsdCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIF9fc3ViX2tpbmQgCisgICAgX19kb19maW5kX3B1YmxpY19zcmMocHRyZGlmZl90IF9fc3JjMmRzdCwgY29uc3Qgdm9pZCogX19vYmpfcHRyLAorCQkJIGNvbnN0IF9fY2xhc3NfdHlwZV9pbmZvKiBfX3NyY190eXBlLAorCQkJIGNvbnN0IHZvaWQqIF9fc3ViX3B0cikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgCisgICAgX19kb191cGNhc3QoY29uc3QgX19jbGFzc190eXBlX2luZm8qX19kc3QsIGNvbnN0IHZvaWQqX19vYmosCisJCV9fdXBjYXN0X3Jlc3VsdCYgX19yZXN0cmljdCBfX3Jlc3VsdCkgY29uc3Q7CisgIH07CisKKyAgLy8gVHlwZSBpbmZvcm1hdGlvbiBmb3IgYSBjbGFzcyB3aXRoIG11bHRpcGxlIGFuZC9vciB2aXJ0dWFsIGJhc2VzLgorICBjbGFzcyBfX3ZtaV9jbGFzc190eXBlX2luZm8gOiBwdWJsaWMgX19jbGFzc190eXBlX2luZm8gCisgIHsKKyAgcHVibGljOgorICAgIHVuc2lnbmVkIGludCAJCV9fZmxhZ3M7ICAvLyBEZXRhaWxzIGFib3V0IHRoZSBjbGFzcyBoaWVyYXJjaHkuCisgICAgdW5zaWduZWQgaW50IAkJX19iYXNlX2NvdW50OyAgLy8gTnVtYmVyIG9mIGRpcmVjdCBiYXNlcy4KKworICAgIC8vIFRoZSBhcnJheSBvZiBiYXNlcyB1c2VzIHRoZSB0cmFpbGluZyBhcnJheSBzdHJ1Y3QgaGFjayBzbyB0aGlzCisgICAgLy8gY2xhc3MgaXMgbm90IGNvbnN0cnVjdGFibGUgd2l0aCBhIG5vcm1hbCBjb25zdHJ1Y3Rvci4gSXQgaXMKKyAgICAvLyBpbnRlcm5hbGx5IGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZXIuCisgICAgX19iYXNlX2NsYXNzX3R5cGVfaW5mbyAJX19iYXNlX2luZm9bMV07ICAvLyBBcnJheSBvZiBiYXNlcy4KKworICAgIGV4cGxpY2l0IAorICAgIF9fdm1pX2NsYXNzX3R5cGVfaW5mbyhjb25zdCBjaGFyKiBfX24sIGludCBfX19mbGFncykKKyAgICA6IF9fY2xhc3NfdHlwZV9pbmZvKF9fbiksIF9fZmxhZ3MoX19fZmxhZ3MpLCBfX2Jhc2VfY291bnQoMCkgeyB9CisKKyAgICB2aXJ0dWFsIAorICAgIH5fX3ZtaV9jbGFzc190eXBlX2luZm8oKTsKKworICAgIC8vIEltcGxlbWVudGF0aW9uIGRlZmluZWQgdHlwZXMuCisgICAgZW51bSBfX2ZsYWdzX21hc2tzIAorICAgICAgeworCV9fbm9uX2RpYW1vbmRfcmVwZWF0X21hc2sgPSAweDEsIC8vIERpc3RpbmN0IGluc3RhbmNlIG9mIHJlcGVhdGVkIGJhc2UuCisJX19kaWFtb25kX3NoYXBlZF9tYXNrID0gMHgyLCAvLyBEaWFtb25kIHNoYXBlZCBtdWx0aXBsZSBpbmhlcml0YW5jZS4KKwlfX2ZsYWdzX3Vua25vd25fbWFzayA9IDB4MTAKKyAgICAgIH07CisKKyAgcHJvdGVjdGVkOgorICAgIC8vIEltcGxlbWVudGF0aW9uIGRlZmluZWQgbWVtYmVyIGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIGJvb2wgCisgICAgX19kb19keW5jYXN0KHB0cmRpZmZfdCBfX3NyYzJkc3QsIF9fc3ViX2tpbmQgX19hY2Nlc3NfcGF0aCwKKwkJIGNvbnN0IF9fY2xhc3NfdHlwZV9pbmZvKiBfX2RzdF90eXBlLCBjb25zdCB2b2lkKiBfX29ial9wdHIsCisJCSBjb25zdCBfX2NsYXNzX3R5cGVfaW5mbyogX19zcmNfdHlwZSwgY29uc3Qgdm9pZCogX19zcmNfcHRyLAorCQkgX19keW5jYXN0X3Jlc3VsdCYgX19yZXN1bHQpIGNvbnN0OworCisgICAgdmlydHVhbCBfX3N1Yl9raW5kIAorICAgIF9fZG9fZmluZF9wdWJsaWNfc3JjKHB0cmRpZmZfdCBfX3NyYzJkc3QsIGNvbnN0IHZvaWQqIF9fb2JqX3B0ciwgCisJCQkgY29uc3QgX19jbGFzc190eXBlX2luZm8qIF9fc3JjX3R5cGUsCisJCQkgY29uc3Qgdm9pZCogX19zcmNfcHRyKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgCisgICAgX19kb191cGNhc3QoY29uc3QgX19jbGFzc190eXBlX2luZm8qIF9fZHN0LCBjb25zdCB2b2lkKiBfX29iaiwKKwkJX191cGNhc3RfcmVzdWx0JiBfX3Jlc3RyaWN0IF9fcmVzdWx0KSBjb25zdDsKKyAgfTsKKworICAvLyBEeW5hbWljIGNhc3QgcnVudGltZS4KKyAgLy8gc3JjMmRzdCBoYXMgdGhlIGZvbGxvd2luZyBwb3NzaWJsZSB2YWx1ZXMKKyAgLy8gID4tMTogc3JjX3R5cGUgaXMgYSB1bmlxdWUgcHVibGljIG5vbi12aXJ0dWFsIGJhc2Ugb2YgZHN0X3R5cGUKKyAgLy8gICAgICAgZHN0X3B0ciArIHNyYzJkc3QgPT0gc3JjX3B0cgorICAvLyAgIC0xOiB1bnNwZWNpZmllZCByZWxhdGlvbnNoaXAKKyAgLy8gICAtMjogc3JjX3R5cGUgaXMgbm90IGEgcHVibGljIGJhc2Ugb2YgZHN0X3R5cGUKKyAgLy8gICAtMzogc3JjX3R5cGUgaXMgYSBtdWx0aXBsZSBwdWJsaWMgbm9uLXZpcnR1YWwgYmFzZSBvZiBkc3RfdHlwZQorICBleHRlcm4gIkMiIHZvaWQqCisgIF9fZHluYW1pY19jYXN0KGNvbnN0IHZvaWQqIF9fc3JjX3B0ciwgLy8gU3RhcnRpbmcgb2JqZWN0LgorCQkgY29uc3QgX19jbGFzc190eXBlX2luZm8qIF9fc3JjX3R5cGUsIC8vIFN0YXRpYyB0eXBlIG9mIG9iamVjdC4KKwkJIGNvbnN0IF9fY2xhc3NfdHlwZV9pbmZvKiBfX2RzdF90eXBlLCAvLyBEZXNpcmVkIHRhcmdldCB0eXBlLgorCQkgcHRyZGlmZl90IF9fc3JjMmRzdCk7IC8vIEhvdyBzcmMgYW5kIGRzdCBhcmUgcmVsYXRlZC4KKworCisgIC8vIFJldHVybnMgdGhlIHR5cGVfaW5mbyBmb3IgdGhlIGN1cnJlbnRseSBoYW5kbGVkIGV4Y2VwdGlvbiBbMTUuMy84XSwgb3IKKyAgLy8gbnVsbCBpZiB0aGVyZSBpcyBub25lLgorICBleHRlcm4gIkMiIHN0ZDo6dHlwZV9pbmZvKgorICBfX2N4YV9jdXJyZW50X2V4Y2VwdGlvbl90eXBlKCkgX0dMSUJDWFhfTk9USFJPVyBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKKworICAvLyBBIG1hZ2ljIHBsYWNlaG9sZGVyIGNsYXNzIHRoYXQgY2FuIGJlIGNhdWdodCBieSByZWZlcmVuY2UKKyAgLy8gdG8gcmVjb2duaXplIGZvcmVpZ24gZXhjZXB0aW9ucy4KKyAgY2xhc3MgX19mb3JlaWduX2V4Y2VwdGlvbgorICB7CisgICAgdmlydHVhbCB+X19mb3JlaWduX2V4Y2VwdGlvbigpIF9HTElCQ1hYX05PVEhST1c7CisgICAgdmlydHVhbCB2b2lkIF9fcHVyZV9kdW1teSgpID0gMDsgLy8gcHJldmVudCBjYXRjaCBieSB2YWx1ZQorICB9OworCit9IC8vIG5hbWVzcGFjZSBfX2N4eGFiaXYxCisKKy8qKiBAbmFtZXNwYWNlIGFiaQorICogIEBicmllZiBUaGUgY3Jvc3MtdmVuZG9yIEMrKyBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlLiBBCisgKiAgbmFtZXNwYWNlIGFsaWFzIHRvIF9fY3h4YWJpdjEsIGJ1dCB1c2VyIHByb2dyYW1zIHNob3VsZCB1c2UgdGhlCisgKiAgYWxpYXMgJ2FiaScuCisgKgorICogIEEgYnJpZWYgb3ZlcnZpZXcgb2YgYW4gQUJJIGlzIGdpdmVuIGluIHRoZSBsaWJzdGRjKysgRkFRLCBxdWVzdGlvbgorICogIDUuOCAoeW91IG1heSBoYXZlIGEgY29weSBvZiB0aGUgRkFRIGxvY2FsbHksIG9yIHlvdSBjYW4gdmlldyB0aGUgb25saW5lCisgKiAgdmVyc2lvbiBhdCBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9saWJzdGRjKysvZmFxL2luZGV4Lmh0bWwjNV84KS4KKyAqCisgKiAgR0NDIHN1YnNjcmliZXMgdG8gYSBjcm9zcy12ZW5kb3IgQUJJIGZvciBDKyssIHNvbWV0aW1lcworICogIGNhbGxlZCB0aGUgSUE2NCBBQkkgYmVjYXVzZSBpdCBoYXBwZW5zIHRvIGJlIHRoZSBuYXRpdmUgQUJJIGZvciB0aGF0CisgKiAgcGxhdGZvcm0uICBJdCBpcyBzdW1tYXJpemVkIGF0IGh0dHA6Ly93d3cuY29kZXNvdXJjZXJ5LmNvbS9jeHgtYWJpLworICogIGFsb25nIHdpdGggdGhlIGN1cnJlbnQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKiAgRm9yIHVzZXJzIG9mIEdDQyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMy54LCBlbnRyeSBwb2ludHMgYXJlCisgKiAgYXZhaWxhYmxlIGluIDxjeHhhYmkuaD4sIHdoaWNoIG5vdGVzLCA8ZW0+J0l0IGlzIG5vdCBub3JtYWxseQorICogIG5lY2Vzc2FyeSBmb3IgdXNlciBwcm9ncmFtcyB0byBpbmNsdWRlIHRoaXMgaGVhZGVyLCBvciB1c2UgdGhlCisgKiAgZW50cnkgcG9pbnRzIGRpcmVjdGx5LiAgSG93ZXZlciwgdGhpcyBoZWFkZXIgaXMgYXZhaWxhYmxlIHNob3VsZAorICogIHRoYXQgYmUgbmVlZGVkLic8L2VtPgorKi8KK25hbWVzcGFjZSBhYmkgPSBfX2N4eGFiaXYxOworCituYW1lc3BhY2UgX19nbnVfY3h4Cit7CisgIC8qKgorICAgKiAgQGJyaWVmIEV4Y2VwdGlvbiB0aHJvd24gYnkgX19jeGFfZ3VhcmRfYWNxdWlyZS4KKyAgICogIEBpbmdyb3VwIGV4Y2VwdGlvbnMKKyAgICoKKyAgICogIDYuN1tzdG10LmRjbF0vNDogSWYgY29udHJvbCByZS1lbnRlcnMgdGhlIGRlY2xhcmF0aW9uIChyZWN1cnNpdmVseSkKKyAgICogIHdoaWxlIHRoZSBvYmplY3QgaXMgYmVpbmcgaW5pdGlhbGl6ZWQsIHRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQuCisgICAqCisgICAqICBTaW5jZSB3ZSBhbHJlYWR5IGhhdmUgYSBsaWJyYXJ5IGZ1bmN0aW9uIHRvIGhhbmRsZSBsb2NraW5nLCB3ZSBtaWdodAorICAgKiAgYXMgd2VsbCBjaGVjayBmb3IgdGhpcyBzaXR1YXRpb24gYW5kIHRocm93IGFuIGV4Y2VwdGlvbi4KKyAgICogIFdlIHVzZSB0aGUgc2Vjb25kIGJ5dGUgb2YgdGhlIGd1YXJkIHZhcmlhYmxlIHRvIHJlbWVtYmVyIHRoYXQgd2UncmUKKyAgICogIGluIHRoZSBtaWRkbGUgb2YgYW4gaW5pdGlhbGl6YXRpb24uCisgICAqLworICBjbGFzcyByZWN1cnNpdmVfaW5pdF9lcnJvcjogcHVibGljIHN0ZDo6ZXhjZXB0aW9uCisgIHsKKyAgcHVibGljOgorICAgIHJlY3Vyc2l2ZV9pbml0X2Vycm9yKCkgdGhyb3coKSB7IH0KKyAgICB2aXJ0dWFsIH5yZWN1cnNpdmVfaW5pdF9lcnJvcigpIHRocm93ICgpOworICB9OworfQorI2VuZGlmIC8vIF9fY3BsdXNwbHVzCisKKyNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcG9wCisKKyNlbmRpZiAvLyBfX0NYWEFCSV9IIApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9kZWJ1Zy9iaXRzZXQgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlYnVnL2JpdHNldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDUyMDYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9kZWJ1Zy9iaXRzZXQKQEAgLTAsMCArMSwzOTggQEAKKy8vIERlYnVnZ2luZyBiaXRzZXQgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZGVidWcvYml0c2V0CisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGRlYnVnIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9ERUJVR19CSVRTRVQKKyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfQklUU0VUCisKKyNpbmNsdWRlIDxiaXRzZXQ+CisjaW5jbHVkZSA8ZGVidWcvc2FmZV9zZXF1ZW5jZS5oPgorI2luY2x1ZGUgPGRlYnVnL3NhZmVfaXRlcmF0b3IuaD4KKworbmFtZXNwYWNlIHN0ZAoreworbmFtZXNwYWNlIF9fZGVidWcKK3sKKyAgLy8vIENsYXNzIHN0ZDo6Yml0c2V0IHdpdGggYWRkaXRpb25hbCBzYWZldHkvY2hlY2tpbmcvZGVidWcgaW5zdHJ1bWVudGF0aW9uLgorICB0ZW1wbGF0ZTxzaXplX3QgX05iPgorICAgIGNsYXNzIGJpdHNldAorICAgIDogcHVibGljIF9HTElCQ1hYX1NURF9EOjpiaXRzZXQ8X05iPiwgCisgICAgICBwdWJsaWMgX19nbnVfZGVidWc6Ol9TYWZlX3NlcXVlbmNlX2Jhc2UKKyAgICB7CisgICAgICB0eXBlZGVmIF9HTElCQ1hYX1NURF9EOjpiaXRzZXQ8X05iPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX3NlcXVlbmNlX2Jhc2UgIF9TYWZlX2Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICAvLyBiaXQgcmVmZXJlbmNlOgorICAgICAgY2xhc3MgcmVmZXJlbmNlCisgICAgICA6IHByaXZhdGUgX0Jhc2U6OnJlZmVyZW5jZSwgcHVibGljIF9fZ251X2RlYnVnOjpfU2FmZV9pdGVyYXRvcl9iYXNlCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cmVmZXJlbmNlIF9CYXNlX3JlZjsKKworCWZyaWVuZCBjbGFzcyBiaXRzZXQ7CisJcmVmZXJlbmNlKCk7CisKKwlyZWZlcmVuY2UoY29uc3QgX0Jhc2VfcmVmJiBfX2Jhc2UsIGJpdHNldCogX19zZXEpCisJOiBfQmFzZV9yZWYoX19iYXNlKSwgX1NhZmVfaXRlcmF0b3JfYmFzZShfX3NlcSwgZmFsc2UpCisJeyB9CisKKyAgICAgIHB1YmxpYzoKKwlyZWZlcmVuY2UoY29uc3QgcmVmZXJlbmNlJiBfX3gpCisJOiBfQmFzZV9yZWYoX194KSwgX1NhZmVfaXRlcmF0b3JfYmFzZShfX3gsIGZhbHNlKQorCXsgfQorCisJcmVmZXJlbmNlJgorCW9wZXJhdG9yPShib29sIF9feCkKKwl7CisJICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoISB0aGlzLT5fTV9zaW5ndWxhcigpLAorCQkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfYmFkX2JpdHNldF93cml0ZSkKKwkJCQkuX01faXRlcmF0b3IoKnRoaXMpKTsKKwkgICpzdGF0aWNfY2FzdDxfQmFzZV9yZWYqPih0aGlzKSA9IF9feDsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKwlyZWZlcmVuY2UmCisJb3BlcmF0b3I9KGNvbnN0IHJlZmVyZW5jZSYgX194KQorCXsKKwkgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWSghIF9feC5fTV9zaW5ndWxhcigpLAorCQkJICAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX2JhZF9iaXRzZXRfcmVhZCkKKwkJCQkuX01faXRlcmF0b3IoX194KSk7CisJICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoISB0aGlzLT5fTV9zaW5ndWxhcigpLAorCQkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfYmFkX2JpdHNldF93cml0ZSkKKwkJCQkuX01faXRlcmF0b3IoKnRoaXMpKTsKKwkgICpzdGF0aWNfY2FzdDxfQmFzZV9yZWYqPih0aGlzKSA9IF9feDsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKwlib29sCisJb3BlcmF0b3J+KCkgY29uc3QKKwl7CisJICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoISB0aGlzLT5fTV9zaW5ndWxhcigpLAorCQkJICAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX2JhZF9iaXRzZXRfcmVhZCkKKwkJCQkuX01faXRlcmF0b3IoKnRoaXMpKTsKKwkgIHJldHVybiB+KCpzdGF0aWNfY2FzdDxjb25zdCBfQmFzZV9yZWYqPih0aGlzKSk7CisJfQorCisJb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisJeworCSAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKCEgdGhpcy0+X01fc2luZ3VsYXIoKSwKKwkJCSAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX2JhZF9iaXRzZXRfcmVhZCkKKwkJCQkuX01faXRlcmF0b3IoKnRoaXMpKTsKKwkgIHJldHVybiAqc3RhdGljX2Nhc3Q8Y29uc3QgX0Jhc2VfcmVmKj4odGhpcyk7CisJfQorCisJcmVmZXJlbmNlJgorCWZsaXAoKQorCXsKKwkgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWSghIHRoaXMtPl9NX3Npbmd1bGFyKCksCisJCQkgICAgICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ19iYWRfYml0c2V0X2ZsaXApCisJCQkJLl9NX2l0ZXJhdG9yKCp0aGlzKSk7CisJICBfQmFzZV9yZWY6OmZsaXAoKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisgICAgICB9OworCisgICAgICAvLyAyMy4zLjUuMSBjb25zdHJ1Y3RvcnM6CisgICAgICBiaXRzZXQoKSA6IF9CYXNlKCkgeyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgYml0c2V0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZhbCkKKyNlbHNlCisgICAgICBiaXRzZXQodW5zaWduZWQgbG9uZyBfX3ZhbCkKKyNlbmRpZgorICAgICAgOiBfQmFzZShfX3ZhbCkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgICAgICBleHBsaWNpdAorICAgICAgICBiaXRzZXQoY29uc3Qgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwKKwkgICAgICAgdHlwZW5hbWUgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKKwkgICAgICAgX19wb3MgPSAwLAorCSAgICAgICB0eXBlbmFtZSBzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQorCSAgICAgICBfX24gPSAoc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpucG9zKSkKKwk6IF9CYXNlKF9fc3RyLCBfX3BvcywgX19uKSB7IH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMzk2LiB3aGF0IGFyZSBjaGFyYWN0ZXJzIHplcm8gYW5kIG9uZS4KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgorCWJpdHNldChjb25zdCBzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLAorCSAgICAgICB0eXBlbmFtZSBzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQorCSAgICAgICBfX3BvcywKKwkgICAgICAgdHlwZW5hbWUgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKKwkgICAgICAgX19uLAorCSAgICAgICBfQ2hhclQgX196ZXJvLCBfQ2hhclQgX19vbmUgPSBfQ2hhclQoJzEnKSkKKwk6IF9CYXNlKF9fc3RyLCBfX3BvcywgX19uLCBfX3plcm8sIF9fb25lKSB7IH0KKworICAgICAgYml0c2V0KGNvbnN0IF9CYXNlJiBfX3gpIDogX0Jhc2UoX194KSwgX1NhZmVfYmFzZSgpIHsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIGV4cGxpY2l0CisgICAgICBiaXRzZXQoY29uc3QgY2hhciogX19zdHIpIDogX0Jhc2UoX19zdHIpIHsgfQorI2VuZGlmCisKKyAgICAgIC8vIDIzLjMuNS4yIGJpdHNldCBvcGVyYXRpb25zOgorICAgICAgYml0c2V0PF9OYj4mCisgICAgICBvcGVyYXRvciY9KGNvbnN0IGJpdHNldDxfTmI+JiBfX3JocykKKyAgICAgIHsKKwlfTV9iYXNlKCkgJj0gX19yaHM7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIG9wZXJhdG9yfD0oY29uc3QgYml0c2V0PF9OYj4mIF9fcmhzKQorICAgICAgeworCV9NX2Jhc2UoKSB8PSBfX3JoczsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgb3BlcmF0b3JePShjb25zdCBiaXRzZXQ8X05iPiYgX19yaHMpCisgICAgICB7CisJX01fYmFzZSgpIF49IF9fcmhzOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgYml0c2V0PF9OYj4mCisgICAgICBvcGVyYXRvcjw8PShzaXplX3QgX19wb3MpCisgICAgICB7CisJX01fYmFzZSgpIDw8PSBfX3BvczsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgb3BlcmF0b3I+Pj0oc2l6ZV90IF9fcG9zKQorICAgICAgeworCV9NX2Jhc2UoKSA+Pj0gX19wb3M7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIHNldCgpCisgICAgICB7CisJX0Jhc2U6OnNldCgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMTg2LiBiaXRzZXQ6OnNldCgpIHNlY29uZCBwYXJhbWV0ZXIgc2hvdWxkIGJlIGJvb2wKKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgc2V0KHNpemVfdCBfX3BvcywgYm9vbCBfX3ZhbCA9IHRydWUpCisgICAgICB7CisJX0Jhc2U6OnNldChfX3BvcywgX192YWwpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgYml0c2V0PF9OYj4mCisgICAgICByZXNldCgpCisgICAgICB7CisJX0Jhc2U6OnJlc2V0KCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIHJlc2V0KHNpemVfdCBfX3BvcykKKyAgICAgIHsKKwlfQmFzZTo6cmVzZXQoX19wb3MpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgYml0c2V0PF9OYj4gb3BlcmF0b3J+KCkgY29uc3QgeyByZXR1cm4gYml0c2V0KH5fTV9iYXNlKCkpOyB9CisKKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgZmxpcCgpCisgICAgICB7CisJX0Jhc2U6OmZsaXAoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgZmxpcChzaXplX3QgX19wb3MpCisgICAgICB7CisJX0Jhc2U6OmZsaXAoX19wb3MpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLy8gZWxlbWVudCBhY2Nlc3M6CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAxMS4gQml0c2V0IG1pbm9yIHByb2JsZW1zCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yW10oc2l6ZV90IF9fcG9zKQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19zdWJzY3JpcHQoX19wb3MpOworCXJldHVybiByZWZlcmVuY2UoX01fYmFzZSgpW19fcG9zXSwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDExLiBCaXRzZXQgbWlub3IgcHJvYmxlbXMKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yW10oc2l6ZV90IF9fcG9zKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19zdWJzY3JpcHQoX19wb3MpOworCXJldHVybiBfTV9iYXNlKClbX19wb3NdOworICAgICAgfQorCisgICAgICB1c2luZyBfQmFzZTo6dG9fdWxvbmc7CisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHVzaW5nIF9CYXNlOjp0b191bGxvbmc7CisjZW5kaWYKKworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgICAgICBzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KKyAgICAgICAgdG9fc3RyaW5nKCkgY29uc3QKKyAgICAgICAgeyByZXR1cm4gX01fYmFzZSgpLnRlbXBsYXRlIHRvX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4oKTsgfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAzOTYuIHdoYXQgYXJlIGNoYXJhY3RlcnMgemVybyBhbmQgb25lLgorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CisJc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CisJdG9fc3RyaW5nKF9DaGFyVCBfX3plcm8sIF9DaGFyVCBfX29uZSA9IF9DaGFyVCgnMScpKSBjb25zdAorCXsKKwkgIHJldHVybiBfTV9iYXNlKCkudGVtcGxhdGUKKwkgICAgdG9fc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPihfX3plcm8sIF9fb25lKTsKKwl9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDQzNC4gYml0c2V0Ojp0b19zdHJpbmcoKSBoYXJkIHRvIHVzZS4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICAgICAgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBzdGQ6OmFsbG9jYXRvcjxfQ2hhclQ+ID4KKyAgICAgICAgdG9fc3RyaW5nKCkgY29uc3QKKyAgICAgICAgeyByZXR1cm4gdG9fc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgc3RkOjphbGxvY2F0b3I8X0NoYXJUPiA+KCk7IH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gODUzLiB0b19zdHJpbmcgbmVlZHMgdXBkYXRpbmcgd2l0aCB6ZXJvIGFuZCBvbmUuCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CisJc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBzdGQ6OmFsbG9jYXRvcjxfQ2hhclQ+ID4KKwl0b19zdHJpbmcoX0NoYXJUIF9femVybywgX0NoYXJUIF9fb25lID0gX0NoYXJUKCcxJykpIGNvbnN0CisJeyByZXR1cm4gdG9fc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywKKwkgICAgICAgICAgICAgICAgICAgc3RkOjphbGxvY2F0b3I8X0NoYXJUPiA+KF9femVybywgX19vbmUpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgICAgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBzdGQ6OmNoYXJfdHJhaXRzPF9DaGFyVD4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6YWxsb2NhdG9yPF9DaGFyVD4gPgorICAgICAgICB0b19zdHJpbmcoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgcmV0dXJuIHRvX3N0cmluZzxfQ2hhclQsIHN0ZDo6Y2hhcl90cmFpdHM8X0NoYXJUPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6YWxsb2NhdG9yPF9DaGFyVD4gPigpOworICAgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KKwlzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIHN0ZDo6Y2hhcl90cmFpdHM8X0NoYXJUPiwKKwkgICAgICAgICAgICAgICAgICBzdGQ6OmFsbG9jYXRvcjxfQ2hhclQ+ID4KKwl0b19zdHJpbmcoX0NoYXJUIF9femVybywgX0NoYXJUIF9fb25lID0gX0NoYXJUKCcxJykpIGNvbnN0CisJeworCSAgcmV0dXJuIHRvX3N0cmluZzxfQ2hhclQsIHN0ZDo6Y2hhcl90cmFpdHM8X0NoYXJUPiwKKwkgICAgICAgICAgICAgICAgICAgc3RkOjphbGxvY2F0b3I8X0NoYXJUPiA+KF9femVybywgX19vbmUpOworCX0KKworICAgICAgc3RkOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPgorICAgICAgdG9fc3RyaW5nKCkgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gdG9fc3RyaW5nPGNoYXIsc3RkOjpjaGFyX3RyYWl0czxjaGFyPixzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+KCk7CisgICAgICB9CisKKyAgICAgIHN0ZDo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4KKyAgICAgIHRvX3N0cmluZyhjaGFyIF9femVybywgY2hhciBfX29uZSA9ICcxJykgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gdG9fc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sCisJICAgICAgICAgICAgICAgICBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+KF9femVybywgX19vbmUpOworICAgICAgfQorCisgICAgICB1c2luZyBfQmFzZTo6Y291bnQ7CisgICAgICB1c2luZyBfQmFzZTo6c2l6ZTsKKworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBiaXRzZXQ8X05iPiYgX19yaHMpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9iYXNlKCkgPT0gX19yaHM7IH0KKworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCBiaXRzZXQ8X05iPiYgX19yaHMpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9iYXNlKCkgIT0gX19yaHM7IH0KKworICAgICAgdXNpbmcgX0Jhc2U6OnRlc3Q7CisgICAgICB1c2luZyBfQmFzZTo6YWxsOworICAgICAgdXNpbmcgX0Jhc2U6OmFueTsKKyAgICAgIHVzaW5nIF9CYXNlOjpub25lOworCisgICAgICBiaXRzZXQ8X05iPgorICAgICAgb3BlcmF0b3I8PChzaXplX3QgX19wb3MpIGNvbnN0CisgICAgICB7IHJldHVybiBiaXRzZXQ8X05iPihfTV9iYXNlKCkgPDwgX19wb3MpOyB9CisKKyAgICAgIGJpdHNldDxfTmI+CisgICAgICBvcGVyYXRvcj4+KHNpemVfdCBfX3BvcykgY29uc3QKKyAgICAgIHsgcmV0dXJuIGJpdHNldDxfTmI+KF9NX2Jhc2UoKSA+PiBfX3Bvcyk7IH0KKworICAgICAgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgY29uc3QgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPHNpemVfdCBfTmI+CisgICAgYml0c2V0PF9OYj4KKyAgICBvcGVyYXRvciYoY29uc3QgYml0c2V0PF9OYj4mIF9feCwgY29uc3QgYml0c2V0PF9OYj4mIF9feSkKKyAgICB7IHJldHVybiBiaXRzZXQ8X05iPihfX3gpICY9IF9feTsgfQorCisgIHRlbXBsYXRlPHNpemVfdCBfTmI+CisgICAgYml0c2V0PF9OYj4KKyAgICBvcGVyYXRvcnwoY29uc3QgYml0c2V0PF9OYj4mIF9feCwgY29uc3QgYml0c2V0PF9OYj4mIF9feSkKKyAgICB7IHJldHVybiBiaXRzZXQ8X05iPihfX3gpIHw9IF9feTsgfQorCisgIHRlbXBsYXRlPHNpemVfdCBfTmI+CisgICAgYml0c2V0PF9OYj4KKyAgICBvcGVyYXRvcl4oY29uc3QgYml0c2V0PF9OYj4mIF9feCwgY29uc3QgYml0c2V0PF9OYj4mIF9feSkKKyAgICB7IHJldHVybiBiaXRzZXQ8X05iPihfX3gpIF49IF9feTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgc2l6ZV90IF9OYj4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLCBiaXRzZXQ8X05iPiYgX194KQorICAgIHsgcmV0dXJuIF9faXMgPj4gX194Ll9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgc2l6ZV90IF9OYj4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBiaXRzZXQ8X05iPiYgX194KQorICAgIHsgcmV0dXJuIF9fb3MgPDwgX194Ll9NX2Jhc2UoKTsgfQorCit9IC8vIG5hbWVzcGFjZSBfX2RlYnVnCisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAvLyBEUiAxMTgyLgorICAvLy8gc3RkOjpoYXNoIHNwZWNpYWxpemF0aW9uIGZvciBiaXRzZXQuCisgIHRlbXBsYXRlPHNpemVfdCBfTmI+CisgICAgc3RydWN0IGhhc2g8X19kZWJ1Zzo6Yml0c2V0PF9OYj4+CisgICAgOiBwdWJsaWMgc3RkOjp1bmFyeV9mdW5jdGlvbjxfX2RlYnVnOjpiaXRzZXQ8X05iPiwgc2l6ZV90PgorICAgIHsKKyAgICAgIHNpemVfdAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfX2RlYnVnOjpiaXRzZXQ8X05iPiYgX19iKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpoYXNoPF9HTElCQ1hYX1NURF9EOjpiaXRzZXQ8X05iPj4oKShfX2IuX01fYmFzZSgpKTsgfQorICAgIH07CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9kZWJ1Zy9kZWJ1Zy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9kZWJ1Zy9kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNTI5OWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlYnVnL2RlYnVnLmgKQEAgLTAsMCArMSwxMzAgQEAKKy8vIERlYnVnZ2luZyBzdXBwb3J0IGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGRlYnVnL2RlYnVnLmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZGVidWcgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0RFQlVHX01BQ1JPX1NXSVRDSF9ICisjZGVmaW5lIF9HTElCQ1hYX0RFQlVHX01BQ1JPX1NXSVRDSF9IIDEKKworLyoqIE1hY3JvcyBhbmQgbmFtZXNwYWNlcyB1c2VkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiBvdXRzaWRlIG9mIGRlYnVnCisgKiAgd3JhcHBlcnMgdG8gdmVyaWZ5IGNlcnRhaW4gcHJvcGVydGllcy4gVGhlIF9fZ2xpYmN4eF9yZXF1aXJlc194eHgKKyAqICBtYWNyb3MgYXJlIG1lcmVseSB3cmFwcGVycyBhcm91bmQgdGhlIF9fZ2xpYmN4eF9jaGVja194eHggd3JhcHBlcnMKKyAqICB3aGVuIHdlIGFyZSBjb21waWxpbmcgd2l0aCBkZWJ1ZyBtb2RlLCBidXQgZGlzYXBwZWFyIHdoZW4gd2UgYXJlCisgKiAgaW4gcmVsZWFzZSBtb2RlIHNvIHRoYXQgdGhlcmUgaXMgbm8gY2hlY2tpbmcgcGVyZm9ybWVkIGluLCBlLmcuLAorICogIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGFsZ29yaXRobXMuCisqLworCisvLyBEZWJ1ZyBtb2RlIG5hbWVzcGFjZXMuCisKKy8qKgorICogQG5hbWVzcGFjZSBzdGQ6Ol9fZGVidWcKKyAqIEBicmllZiBHTlUgZGVidWcgY29kZSwgcmVwbGFjZXMgc3RhbmRhcmQgYmVoYXZpb3Igd2l0aCBkZWJ1ZyBiZWhhdmlvci4KKyAqLworbmFtZXNwYWNlIHN0ZCAKK3sgCisgIG5hbWVzcGFjZSBfX2RlYnVnIHsgfSAKK30KKworLyoqIEBuYW1lc3BhY2UgX19nbnVfZGVidWcKKyAqICBAYnJpZWYgR05VIGRlYnVnIGNsYXNzZXMgZm9yIHB1YmxpYyB1c2UuCisqLworbmFtZXNwYWNlIF9fZ251X2RlYnVnCit7CisgIHVzaW5nIG5hbWVzcGFjZSBzdGQ6Ol9fZGVidWc7Cit9CisKKyNpZm5kZWYgX0dMSUJDWFhfREVCVUcKKworIyBkZWZpbmUgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9Db25kaXRpb24pCisjIGRlZmluZSBfR0xJQkNYWF9ERUJVR19QRURBU1NFUlQoX0NvbmRpdGlvbikKKyMgZGVmaW5lIF9HTElCQ1hYX0RFQlVHX09OTFkoX1N0YXRlbWVudCkgOworIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX2NvbmQoX0NvbmQsX01zZykKKyMgZGVmaW5lIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfRmlyc3QsX0xhc3QpCisjIGRlZmluZSBfX2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkKF9GaXJzdCxfTGFzdCkKKyMgZGVmaW5lIF9fZ2xpYmN4eF9yZXF1aXJlc19zb3J0ZWRfcHJlZChfRmlyc3QsX0xhc3QsX1ByZWQpCisjIGRlZmluZSBfX2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkX3NldChfRmlyc3QxLF9MYXN0MSxfRmlyc3QyKQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9zZXRfcHJlZChfRmlyc3QxLF9MYXN0MSxfRmlyc3QyLF9QcmVkKQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX3BhcnRpdGlvbmVkX2xvd2VyKF9GaXJzdCxfTGFzdCxfVmFsdWUpCisjIGRlZmluZSBfX2dsaWJjeHhfcmVxdWlyZXNfcGFydGl0aW9uZWRfdXBwZXIoX0ZpcnN0LF9MYXN0LF9WYWx1ZSkKKyMgZGVmaW5lIF9fZ2xpYmN4eF9yZXF1aXJlc19wYXJ0aXRpb25lZF9sb3dlcl9wcmVkKF9GaXJzdCxfTGFzdCxfVmFsdWUsX1ByZWQpCisjIGRlZmluZSBfX2dsaWJjeHhfcmVxdWlyZXNfcGFydGl0aW9uZWRfdXBwZXJfcHJlZChfRmlyc3QsX0xhc3QsX1ZhbHVlLF9QcmVkKQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX2hlYXAoX0ZpcnN0LF9MYXN0KQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX2hlYXBfcHJlZChfRmlyc3QsX0xhc3QsX1ByZWQpCisjIGRlZmluZSBfX2dsaWJjeHhfcmVxdWlyZXNfbm9uZW1wdHkoKQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfU3RyaW5nKQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZ19sZW4oX1N0cmluZyxfTGVuKQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX3N1YnNjcmlwdChfTikKKworI2Vsc2UKKworIyBpbmNsdWRlIDxkZWJ1Zy9tYWNyb3MuaD4KKworI2RlZmluZSBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX0NvbmRpdGlvbikgX19nbGliY3h4X2Fzc2VydChfQ29uZGl0aW9uKQorCisjaWZkZWYgX0dMSUJDWFhfREVCVUdfUEVEQU5USUMKKyMgZGVmaW5lIF9HTElCQ1hYX0RFQlVHX1BFREFTU0VSVChfQ29uZGl0aW9uKSBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX0NvbmRpdGlvbikKKyNlbHNlCisjIGRlZmluZSBfR0xJQkNYWF9ERUJVR19QRURBU1NFUlQoX0NvbmRpdGlvbikKKyNlbmRpZgorCisjIGRlZmluZSBfR0xJQkNYWF9ERUJVR19PTkxZKF9TdGF0ZW1lbnQpIF9TdGF0ZW1lbnQKKworIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX2NvbmQoX0NvbmQsX01zZykgX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9Db25kLF9Nc2cpCisjIGRlZmluZSBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX0ZpcnN0LF9MYXN0KSBcCisgICAgIF9fZ2xpYmN4eF9jaGVja192YWxpZF9yYW5nZShfRmlyc3QsX0xhc3QpCisjIGRlZmluZSBfX2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkKF9GaXJzdCxfTGFzdCkgXAorICAgICBfX2dsaWJjeHhfY2hlY2tfc29ydGVkKF9GaXJzdCxfTGFzdCkKKyMgZGVmaW5lIF9fZ2xpYmN4eF9yZXF1aXJlc19zb3J0ZWRfcHJlZChfRmlyc3QsX0xhc3QsX1ByZWQpIFwKKyAgICAgX19nbGliY3h4X2NoZWNrX3NvcnRlZF9wcmVkKF9GaXJzdCxfTGFzdCxfUHJlZCkKKyMgZGVmaW5lIF9fZ2xpYmN4eF9yZXF1aXJlc19zb3J0ZWRfc2V0KF9GaXJzdDEsX0xhc3QxLF9GaXJzdDIpIFwKKyAgICAgX19nbGliY3h4X2NoZWNrX3NvcnRlZF9zZXQoX0ZpcnN0MSxfTGFzdDEsX0ZpcnN0MikKKyMgZGVmaW5lIF9fZ2xpYmN4eF9yZXF1aXJlc19zb3J0ZWRfc2V0X3ByZWQoX0ZpcnN0MSxfTGFzdDEsX0ZpcnN0MixfUHJlZCkgXAorICAgICBfX2dsaWJjeHhfY2hlY2tfc29ydGVkX3NldF9wcmVkKF9GaXJzdDEsX0xhc3QxLF9GaXJzdDIsX1ByZWQpCisjIGRlZmluZSBfX2dsaWJjeHhfcmVxdWlyZXNfcGFydGl0aW9uZWRfbG93ZXIoX0ZpcnN0LF9MYXN0LF9WYWx1ZSkJXAorICAgICBfX2dsaWJjeHhfY2hlY2tfcGFydGl0aW9uZWRfbG93ZXIoX0ZpcnN0LF9MYXN0LF9WYWx1ZSkKKyMgZGVmaW5lIF9fZ2xpYmN4eF9yZXF1aXJlc19wYXJ0aXRpb25lZF91cHBlcihfRmlyc3QsX0xhc3QsX1ZhbHVlKQlcCisgICAgIF9fZ2xpYmN4eF9jaGVja19wYXJ0aXRpb25lZF91cHBlcihfRmlyc3QsX0xhc3QsX1ZhbHVlKQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX3BhcnRpdGlvbmVkX2xvd2VyX3ByZWQoX0ZpcnN0LF9MYXN0LF9WYWx1ZSxfUHJlZCkgXAorICAgICBfX2dsaWJjeHhfY2hlY2tfcGFydGl0aW9uZWRfbG93ZXJfcHJlZChfRmlyc3QsX0xhc3QsX1ZhbHVlLF9QcmVkKQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX3BhcnRpdGlvbmVkX3VwcGVyX3ByZWQoX0ZpcnN0LF9MYXN0LF9WYWx1ZSxfUHJlZCkgXAorICAgICBfX2dsaWJjeHhfY2hlY2tfcGFydGl0aW9uZWRfdXBwZXJfcHJlZChfRmlyc3QsX0xhc3QsX1ZhbHVlLF9QcmVkKQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX2hlYXAoX0ZpcnN0LF9MYXN0KSBcCisgICAgIF9fZ2xpYmN4eF9jaGVja19oZWFwKF9GaXJzdCxfTGFzdCkKKyMgZGVmaW5lIF9fZ2xpYmN4eF9yZXF1aXJlc19oZWFwX3ByZWQoX0ZpcnN0LF9MYXN0LF9QcmVkKSBcCisgICAgIF9fZ2xpYmN4eF9jaGVja19oZWFwX3ByZWQoX0ZpcnN0LF9MYXN0LF9QcmVkKQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX25vbmVtcHR5KCkgX19nbGliY3h4X2NoZWNrX25vbmVtcHR5KCkKKyMgZGVmaW5lIF9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmcoX1N0cmluZykgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfU3RyaW5nKQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZ19sZW4oX1N0cmluZyxfTGVuKQlcCisgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmdfbGVuKF9TdHJpbmcsX0xlbikKKyMgZGVmaW5lIF9fZ2xpYmN4eF9yZXF1aXJlc19zdWJzY3JpcHQoX04pIF9fZ2xpYmN4eF9jaGVja19zdWJzY3JpcHQoX04pCisKKyMgaW5jbHVkZSA8ZGVidWcvZnVuY3Rpb25zLmg+CisjIGluY2x1ZGUgPGRlYnVnL2Zvcm1hdHRlci5oPgorCisjZW5kaWYKKworI2VuZGlmIC8vIF9HTElCQ1hYX0RFQlVHX01BQ1JPX1NXSVRDSF9ICmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlYnVnL2RlcXVlIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9kZWJ1Zy9kZXF1ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzk4MDA2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9kZWJ1Zy9kZXF1ZQpAQCAtMCwwICsxLDUwNSBAQAorLy8gRGVidWdnaW5nIGRlcXVlIGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGRlYnVnL2RlcXVlCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGRlYnVnIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9ERUJVR19ERVFVRQorI2RlZmluZSBfR0xJQkNYWF9ERUJVR19ERVFVRSAxCisKKyNpbmNsdWRlIDxkZXF1ZT4KKyNpbmNsdWRlIDxkZWJ1Zy9zYWZlX3NlcXVlbmNlLmg+CisjaW5jbHVkZSA8ZGVidWcvc2FmZV9pdGVyYXRvci5oPgorCituYW1lc3BhY2Ugc3RkCit7CituYW1lc3BhY2UgX19kZWJ1ZworeworICAvLy8gQ2xhc3Mgc3RkOjpkZXF1ZSB3aXRoIHNhZmV0eS9jaGVja2luZy9kZWJ1ZyBpbnN0cnVtZW50YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jYXRvciA9IHN0ZDo6YWxsb2NhdG9yPF9UcD4gPgorICAgIGNsYXNzIGRlcXVlCisgICAgOiBwdWJsaWMgX0dMSUJDWFhfU1REX0Q6OmRlcXVlPF9UcCwgX0FsbG9jYXRvcj4sCisgICAgICBwdWJsaWMgX19nbnVfZGVidWc6Ol9TYWZlX3NlcXVlbmNlPGRlcXVlPF9UcCwgX0FsbG9jYXRvcj4gPgorICAgIHsKKyAgICAgIHR5cGVkZWYgIF9HTElCQ1hYX1NURF9EOjpkZXF1ZTxfVHAsIF9BbGxvY2F0b3I+IF9CYXNlOworICAgICAgdHlwZWRlZiBfX2dudV9kZWJ1Zzo6X1NhZmVfc2VxdWVuY2U8ZGVxdWU+IF9TYWZlX2Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpyZWZlcmVuY2UgICAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfcmVmZXJlbmNlICAgICAgIGNvbnN0X3JlZmVyZW5jZTsKKworICAgICAgdHlwZWRlZiBfX2dudV9kZWJ1Zzo6X1NhZmVfaXRlcmF0b3I8dHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yLGRlcXVlPgorCQkJCQkJICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfX2dudV9kZWJ1Zzo6X1NhZmVfaXRlcmF0b3I8dHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yLGRlcXVlPgorCQkJCQkJICAgICBjb25zdF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6c2l6ZV90eXBlICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmRpZmZlcmVuY2VfdHlwZSAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgX1RwCQkJCSAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBfQWxsb2NhdG9yCQkJICAgIGFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cG9pbnRlciAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9wb2ludGVyICAgICAgICAgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiAgICAgICByZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CisKKyAgICAgIC8vIDIzLjIuMS4xIGNvbnN0cnVjdC9jb3B5L2Rlc3Ryb3k6CisgICAgICBleHBsaWNpdCBkZXF1ZShjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICA6IF9CYXNlKF9fYSkgeyB9CisKKyAgICAgIGV4cGxpY2l0IGRlcXVlKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSA9IF9UcCgpLAorCQkgICAgIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKyAgICAgIDogX0Jhc2UoX19uLCBfX3ZhbHVlLCBfX2EpIHsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgZGVxdWUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCSAgICAgIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKwk6IF9CYXNlKF9fZ251X2RlYnVnOjpfX2NoZWNrX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCksIF9fbGFzdCwgX19hKQorICAgICAgICB7IH0KKworICAgICAgZGVxdWUoY29uc3QgZGVxdWUmIF9feCkKKyAgICAgIDogX0Jhc2UoX194KSwgX1NhZmVfYmFzZSgpIHsgfQorCisgICAgICBkZXF1ZShjb25zdCBfQmFzZSYgX194KQorICAgICAgOiBfQmFzZShfX3gpLCBfU2FmZV9iYXNlKCkgeyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgZGVxdWUoZGVxdWUmJiBfX3gpCisgICAgICA6IF9CYXNlKHN0ZDo6Zm9yd2FyZDxkZXF1ZT4oX194KSksIF9TYWZlX2Jhc2UoKQorICAgICAgeyB0aGlzLT5fTV9zd2FwKF9feCk7IH0KKworICAgICAgZGVxdWUoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2wsIF9fYSksIF9TYWZlX2Jhc2UoKSB7IH0KKyNlbmRpZgorCisgICAgICB+ZGVxdWUoKSB7IH0KKworICAgICAgZGVxdWUmCisgICAgICBvcGVyYXRvcj0oY29uc3QgZGVxdWUmIF9feCkKKyAgICAgIHsKKwkqc3RhdGljX2Nhc3Q8X0Jhc2UqPih0aGlzKSA9IF9feDsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBkZXF1ZSYKKyAgICAgIG9wZXJhdG9yPShkZXF1ZSYmIF9feCkKKyAgICAgIHsKKwkvLyBOQjogRFIgMTIwNC4KKwkvLyBOQjogRFIgNjc1LgorCWNsZWFyKCk7CisJc3dhcChfX3gpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgZGVxdWUmCisgICAgICBvcGVyYXRvcj0oaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7CisJKnN0YXRpY19jYXN0PF9CYXNlKj4odGhpcykgPSBfX2w7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisjZW5kaWYKKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeworCSAgX19nbGliY3h4X2NoZWNrX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisJICBfQmFzZTo6YXNzaWduKF9fZmlyc3QsIF9fbGFzdCk7CisJICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCX0KKworICAgICAgdm9pZAorICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX190KQorICAgICAgeworCV9CYXNlOjphc3NpZ24oX19uLCBfX3QpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdm9pZAorICAgICAgYXNzaWduKGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCV9CYXNlOjphc3NpZ24oX19sKTsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIHVzaW5nIF9CYXNlOjpnZXRfYWxsb2NhdG9yOworCisgICAgICAvLyBpdGVyYXRvcnM6CisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorI2VuZGlmCisKKyAgICAgIC8vIDIzLjIuMS4yIGNhcGFjaXR5OgorICAgICAgdXNpbmcgX0Jhc2U6OnNpemU7CisgICAgICB1c2luZyBfQmFzZTo6bWF4X3NpemU7CisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19zeiwgX1RwIF9fYyA9IF9UcCgpKQorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yIF9CYXNlX2NvbnN0X2l0ZXJhdG9yOworCXR5cGVkZWYgX19nbnVfZGVidWc6Ol9BZnRlcl9udGhfZnJvbTxfQmFzZV9jb25zdF9pdGVyYXRvcj4gX0FmdGVyX250aDsKKworCWJvb2wgX19pbnZhbGlkYXRlX2FsbCA9IF9fc3ogPiB0aGlzLT5zaXplKCk7CisJaWYgKF9fc3ogPCB0aGlzLT5zaXplKCkpCisJICB0aGlzLT5fTV9pbnZhbGlkYXRlX2lmKF9BZnRlcl9udGgoX19zeiwgX01fYmFzZSgpLmJlZ2luKCkpKTsKKworCV9CYXNlOjpyZXNpemUoX19zeiwgX19jKTsKKworCWlmIChfX2ludmFsaWRhdGVfYWxsKQorCSAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICB1c2luZyBfQmFzZTo6c2hyaW5rX3RvX2ZpdDsKKyNlbmRpZgorCisgICAgICB1c2luZyBfQmFzZTo6ZW1wdHk7CisKKyAgICAgIC8vIGVsZW1lbnQgYWNjZXNzOgorICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX3N1YnNjcmlwdChfX24pOworCXJldHVybiBfTV9iYXNlKClbX19uXTsKKyAgICAgIH0KKworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX3N1YnNjcmlwdChfX24pOworCXJldHVybiBfTV9iYXNlKClbX19uXTsKKyAgICAgIH0KKworICAgICAgdXNpbmcgX0Jhc2U6OmF0OworCisgICAgICByZWZlcmVuY2UKKyAgICAgIGZyb250KCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfbm9uZW1wdHkoKTsKKwlyZXR1cm4gX0Jhc2U6OmZyb250KCk7CisgICAgICB9CisKKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgZnJvbnQoKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19ub25lbXB0eSgpOworCXJldHVybiBfQmFzZTo6ZnJvbnQoKTsKKyAgICAgIH0KKworICAgICAgcmVmZXJlbmNlCisgICAgICBiYWNrKCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfbm9uZW1wdHkoKTsKKwlyZXR1cm4gX0Jhc2U6OmJhY2soKTsKKyAgICAgIH0KKworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBiYWNrKCkgY29uc3QKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfbm9uZW1wdHkoKTsKKwlyZXR1cm4gX0Jhc2U6OmJhY2soKTsKKyAgICAgIH0KKworICAgICAgLy8gMjMuMi4xLjMgbW9kaWZpZXJzOgorICAgICAgdm9pZAorICAgICAgcHVzaF9mcm9udChjb25zdCBfVHAmIF9feCkKKyAgICAgIHsKKwlfQmFzZTo6cHVzaF9mcm9udChfX3gpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfYmFjayhjb25zdCBfVHAmIF9feCkKKyAgICAgIHsKKwlfQmFzZTo6cHVzaF9iYWNrKF9feCk7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICB2b2lkCisgICAgICBwdXNoX2Zyb250KF9UcCYmIF9feCkKKyAgICAgIHsgZW1wbGFjZV9mcm9udChzdGQ6Om1vdmUoX194KSk7IH0KKworICAgICAgdm9pZAorICAgICAgcHVzaF9iYWNrKF9UcCYmIF9feCkKKyAgICAgIHsgZW1wbGFjZV9iYWNrKHN0ZDo6bW92ZShfX3gpKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgdm9pZAorICAgICAgICBlbXBsYWNlX2Zyb250KF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIF9CYXNlOjplbXBsYWNlX2Zyb250KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHZvaWQKKyAgICAgICAgZW1wbGFjZV9iYWNrKF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIF9CYXNlOjplbXBsYWNlX2JhY2soc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwkgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgaXRlcmF0b3IKKyAgICAgICAgZW1wbGFjZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBfQXJncyYmLi4uIF9fYXJncykKKwl7CisJICBfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9fcG9zaXRpb24pOworCSAgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIF9fcmVzID0gX0Jhc2U6OmVtcGxhY2UoX19wb3NpdGlvbi5iYXNlKCksCisJCQkJCSAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCSAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwkgIHJldHVybiBpdGVyYXRvcihfX3JlcywgdGhpcyk7CisJfQorI2VuZGlmCisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2luc2VydChfX3Bvc2l0aW9uKTsKKwl0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgX19yZXMgPSBfQmFzZTo6aW5zZXJ0KF9fcG9zaXRpb24uYmFzZSgpLCBfX3gpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisJcmV0dXJuIGl0ZXJhdG9yKF9fcmVzLCB0aGlzKTsKKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIF9UcCYmIF9feCkKKyAgICAgIHsgcmV0dXJuIGVtcGxhY2UoX19wb3NpdGlvbiwgc3RkOjptb3ZlKF9feCkpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCV9CYXNlOjppbnNlcnQoX19wLCBfX2wpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICB9CisjZW5kaWYKKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19pbnNlcnQoX19wb3NpdGlvbik7CisJX0Jhc2U6Omluc2VydChfX3Bvc2l0aW9uLmJhc2UoKSwgX19uLCBfX3gpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLAorCSAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICAgIHsKKwkgIF9fZ2xpYmN4eF9jaGVja19pbnNlcnRfcmFuZ2UoX19wb3NpdGlvbiwgX19maXJzdCwgX19sYXN0KTsKKwkgIF9CYXNlOjppbnNlcnQoX19wb3NpdGlvbi5iYXNlKCksIF9fZmlyc3QsIF9fbGFzdCk7CisJICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCX0KKworICAgICAgdm9pZAorICAgICAgcG9wX2Zyb250KCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfbm9uZW1wdHkoKTsKKwlpdGVyYXRvciBfX3ZpY3RpbSA9IGJlZ2luKCk7CisJX192aWN0aW0uX01faW52YWxpZGF0ZSgpOworCV9CYXNlOjpwb3BfZnJvbnQoKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgcG9wX2JhY2soKQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19ub25lbXB0eSgpOworCWl0ZXJhdG9yIF9fdmljdGltID0gZW5kKCk7CisJLS1fX3ZpY3RpbTsKKwlfX3ZpY3RpbS5fTV9pbnZhbGlkYXRlKCk7CisJX0Jhc2U6OnBvcF9iYWNrKCk7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19lcmFzZShfX3Bvc2l0aW9uKTsKKwlpZiAoX19wb3NpdGlvbiA9PSBiZWdpbigpIHx8IF9fcG9zaXRpb24gPT0gZW5kKCktMSkKKwkgIHsKKwkgICAgX19wb3NpdGlvbi5fTV9pbnZhbGlkYXRlKCk7CisJICAgIHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZXJhc2UoX19wb3NpdGlvbi5iYXNlKCkpLCB0aGlzKTsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBfX3JlcyA9IF9CYXNlOjplcmFzZShfX3Bvc2l0aW9uLmJhc2UoKSk7CisJICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisJICAgIHJldHVybiBpdGVyYXRvcihfX3JlcywgdGhpcyk7CisJICB9CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCisgICAgICB7CisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDE1MS4gY2FuJ3QgY3VycmVudGx5IGNsZWFyKCkgZW1wdHkgY29udGFpbmVyCisJX19nbGliY3h4X2NoZWNrX2VyYXNlX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICAgIGlmIChfX2ZpcnN0ID09IGJlZ2luKCkgfHwgX19sYXN0ID09IGVuZCgpKQorCSAgeworCSAgICB0aGlzLT5fTV9kZXRhY2hfc2luZ3VsYXIoKTsKKwkgICAgZm9yIChpdGVyYXRvciBfX3Bvc2l0aW9uID0gX19maXJzdDsgX19wb3NpdGlvbiAhPSBfX2xhc3Q7ICkKKwkgICAgICB7CisJCWl0ZXJhdG9yIF9fdmljdGltID0gX19wb3NpdGlvbisrOworCQlfX3ZpY3RpbS5fTV9pbnZhbGlkYXRlKCk7CisJICAgICAgfQorCSAgICBfX3RyeQorCSAgICAgIHsKKwkJcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplcmFzZShfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSksCisJCQkJdGhpcyk7CisJICAgICAgfQorCSAgICBfX2NhdGNoKC4uLikKKwkgICAgICB7CisJCXRoaXMtPl9NX3JldmFsaWRhdGVfc2luZ3VsYXIoKTsKKwkJX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgICAgfQorCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIF9fcmVzID0gX0Jhc2U6OmVyYXNlKF9fZmlyc3QuYmFzZSgpLAorCQkJCQkJCSAgX19sYXN0LmJhc2UoKSk7CisJICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisJICAgIHJldHVybiBpdGVyYXRvcihfX3JlcywgdGhpcyk7CisJICB9CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoZGVxdWUmIF9feCkKKyAgICAgIHsKKwlfQmFzZTo6c3dhcChfX3gpOworCXRoaXMtPl9NX3N3YXAoX194KTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKQorICAgICAgeworCV9CYXNlOjpjbGVhcigpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICB9CisKKyAgICAgIF9CYXNlJgorICAgICAgX01fYmFzZSgpICAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIGNvbnN0IF9CYXNlJgorICAgICAgX01fYmFzZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICAgY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPT0gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX19saHMsCisJICAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpICE9IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX19saHMsCisJICAgICAgY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPCBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICAgY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPD0gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX19saHMsCisJICAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID49IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX19saHMsCisJICAgICAgY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPiBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoZGVxdWU8X1RwLCBfQWxsb2M+JiBfX2xocywgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CisKK30gLy8gbmFtZXNwYWNlIF9fZGVidWcKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZGVidWcvZm9ybWF0dGVyLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlYnVnL2Zvcm1hdHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YjQzODkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlYnVnL2Zvcm1hdHRlci5oCkBAIC0wLDAgKzEsNDIyIEBACisvLyBEZWJ1Zy1tb2RlIGVycm9yIGZvcm1hdHRpbmcgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZGVidWcvZm9ybWF0dGVyLmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZGVidWcgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0RFQlVHX0ZPUk1BVFRFUl9ICisjZGVmaW5lIF9HTElCQ1hYX0RFQlVHX0ZPUk1BVFRFUl9IIDEKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8dHlwZWluZm8+CisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKworbmFtZXNwYWNlIF9fZ251X2RlYnVnCit7CisgIHVzaW5nIHN0ZDo6dHlwZV9pbmZvOworCisgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIHR3byB0eXBlcyBhcmUgdGhlIHNhbWUuICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlMSwgdHlwZW5hbWUgX1R5cGUyPgorICAgIHN0cnVjdCBfX2lzX3NhbWUKKyAgICB7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+CisgICAgc3RydWN0IF9faXNfc2FtZTxfVHlwZSwgX1R5cGU+CisgICAgeworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOworICAgIH07CisKKyAgdGVtcGxhdGU8Ym9vbD4gc3RydWN0IF9fdHJ1dGggeyB9OworCisgIGNsYXNzIF9TYWZlX3NlcXVlbmNlX2Jhc2U7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgY2xhc3MgX1NhZmVfaXRlcmF0b3I7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIGNsYXNzIF9TYWZlX3NlcXVlbmNlOworCisgIGVudW0gX0RlYnVnX21zZ19pZAorICB7CisgICAgLy8gR2VuZXJhbCBjaGVja3MKKyAgICBfX21zZ192YWxpZF9yYW5nZSwKKyAgICBfX21zZ19pbnNlcnRfc2luZ3VsYXIsCisgICAgX19tc2dfaW5zZXJ0X2RpZmZlcmVudCwKKyAgICBfX21zZ19lcmFzZV9iYWQsCisgICAgX19tc2dfZXJhc2VfZGlmZmVyZW50LAorICAgIF9fbXNnX3N1YnNjcmlwdF9vb2IsCisgICAgX19tc2dfZW1wdHksCisgICAgX19tc2dfdW5wYXJ0aXRpb25lZCwKKyAgICBfX21zZ191bnBhcnRpdGlvbmVkX3ByZWQsCisgICAgX19tc2dfdW5zb3J0ZWQsCisgICAgX19tc2dfdW5zb3J0ZWRfcHJlZCwKKyAgICBfX21zZ19ub3RfaGVhcCwKKyAgICBfX21zZ19ub3RfaGVhcF9wcmVkLAorICAgIC8vIHN0ZDo6Yml0c2V0IGNoZWNrcworICAgIF9fbXNnX2JhZF9iaXRzZXRfd3JpdGUsCisgICAgX19tc2dfYmFkX2JpdHNldF9yZWFkLAorICAgIF9fbXNnX2JhZF9iaXRzZXRfZmxpcCwKKyAgICAvLyBzdGQ6Omxpc3QgY2hlY2tzCisgICAgX19tc2dfc2VsZl9zcGxpY2UsCisgICAgX19tc2dfc3BsaWNlX2FsbG9jLAorICAgIF9fbXNnX3NwbGljZV9iYWQsCisgICAgX19tc2dfc3BsaWNlX290aGVyLAorICAgIF9fbXNnX3NwbGljZV9vdmVybGFwLAorICAgIC8vIGl0ZXJhdG9yIGNoZWNrcworICAgIF9fbXNnX2luaXRfc2luZ3VsYXIsCisgICAgX19tc2dfaW5pdF9jb3B5X3Npbmd1bGFyLAorICAgIF9fbXNnX2luaXRfY29uc3Rfc2luZ3VsYXIsCisgICAgX19tc2dfY29weV9zaW5ndWxhciwKKyAgICBfX21zZ19iYWRfZGVyZWYsCisgICAgX19tc2dfYmFkX2luYywKKyAgICBfX21zZ19iYWRfZGVjLAorICAgIF9fbXNnX2l0ZXJfc3Vic2NyaXB0X29vYiwKKyAgICBfX21zZ19hZHZhbmNlX29vYiwKKyAgICBfX21zZ19yZXRyZWF0X29vYiwKKyAgICBfX21zZ19pdGVyX2NvbXBhcmVfYmFkLAorICAgIF9fbXNnX2NvbXBhcmVfZGlmZmVyZW50LAorICAgIF9fbXNnX2l0ZXJfb3JkZXJfYmFkLAorICAgIF9fbXNnX29yZGVyX2RpZmZlcmVudCwKKyAgICBfX21zZ19kaXN0YW5jZV9iYWQsCisgICAgX19tc2dfZGlzdGFuY2VfZGlmZmVyZW50LAorICAgIC8vIGlzdHJlYW1faXRlcmF0b3IKKyAgICBfX21zZ19kZXJlZl9pc3RyZWFtLAorICAgIF9fbXNnX2luY19pc3RyZWFtLAorICAgIC8vIG9zdHJlYW1faXRlcmF0b3IKKyAgICBfX21zZ19vdXRwdXRfb3N0cmVhbSwKKyAgICAvLyBpc3RyZWFtYnVmX2l0ZXJhdG9yCisgICAgX19tc2dfZGVyZWZfaXN0cmVhbWJ1ZiwKKyAgICBfX21zZ19pbmNfaXN0cmVhbWJ1ZgorICB9OworCisgIGNsYXNzIF9FcnJvcl9mb3JtYXR0ZXIKKyAgeworICAgIC8vLyBXaGV0aGVyIGFuIGl0ZXJhdG9yIGlzIGNvbnN0YW50LCBtdXRhYmxlLCBvciB1bmtub3duCisgICAgZW51bSBfQ29uc3RuZXNzCisgICAgeworICAgICAgX191bmtub3duX2NvbnN0bmVzcywKKyAgICAgIF9fY29uc3RfaXRlcmF0b3IsCisgICAgICBfX211dGFibGVfaXRlcmF0b3IsCisgICAgICBfX2xhc3RfY29uc3RuZXNzCisgICAgfTsKKworICAgIC8vIFRoZSBzdGF0ZSBvZiB0aGUgaXRlcmF0b3IgKGZpbmUtZ3JhaW5lZCksIGlmIHdlIGtub3cgaXQuCisgICAgZW51bSBfSXRlcmF0b3Jfc3RhdGUKKyAgICB7CisgICAgICBfX3Vua25vd25fc3RhdGUsCisgICAgICBfX3Npbmd1bGFyLCAgICAgIC8vIHNpbmd1bGFyLCBtYXkgc3RpbGwgYmUgYXR0YWNoZWQgdG8gYSBzZXF1ZW5jZQorICAgICAgX19iZWdpbiwgICAgICAgICAvLyBkZXJlZmVyZW5jZWFibGUsIGFuZCBhdCB0aGUgYmVnaW5uaW5nCisgICAgICBfX21pZGRsZSwgICAgICAgIC8vIGRlcmVmZXJlbmNlYWJsZSwgbm90IGF0IHRoZSBiZWdpbm5pbmcKKyAgICAgIF9fZW5kLCAgICAgICAgICAgLy8gcGFzdC10aGUtZW5kLCBtYXkgYmUgYXQgYmVnaW5uaW5nIGlmIHNlcXVlbmNlIGVtcHR5CisgICAgICBfX2xhc3Rfc3RhdGUKKyAgICB9OworCisgICAgLy8gVGFncyBkZW5vdGluZyB0aGUgdHlwZSBvZiBwYXJhbWV0ZXIgZm9yIGNvbnN0cnVjdGlvbgorICAgIHN0cnVjdCBfSXNfaXRlcmF0b3IgeyB9OworICAgIHN0cnVjdCBfSXNfc2VxdWVuY2UgeyB9OworCisgICAgLy8gQSBwYXJhbWV0ZXIgdGhhdCBtYXkgYmUgcmVmZXJlbmNlZCBieSBhbiBlcnJvciBtZXNzYWdlCisgICAgc3RydWN0IF9QYXJhbWV0ZXIKKyAgICB7CisgICAgICBlbnVtCisgICAgICB7CisJX191bnVzZWRfcGFyYW0sCisJX19pdGVyYXRvciwKKwlfX3NlcXVlbmNlLAorCV9faW50ZWdlciwKKwlfX3N0cmluZworICAgICAgfSBfTV9raW5kOworCisgICAgICB1bmlvbgorICAgICAgeworCS8vIFdoZW4gX01fa2luZCA9PSBfX2l0ZXJhdG9yCisJc3RydWN0CisJeworCSAgY29uc3QgY2hhciogICAgICBfTV9uYW1lOworCSAgY29uc3Qgdm9pZCogICAgICBfTV9hZGRyZXNzOworCSAgY29uc3QgdHlwZV9pbmZvKiBfTV90eXBlOworCSAgX0NvbnN0bmVzcyAgICAgICBfTV9jb25zdG5lc3M7CisJICBfSXRlcmF0b3Jfc3RhdGUgIF9NX3N0YXRlOworCSAgY29uc3Qgdm9pZCogICAgICBfTV9zZXF1ZW5jZTsKKwkgIGNvbnN0IHR5cGVfaW5mbyogX01fc2VxX3R5cGU7CisJfSBfTV9pdGVyYXRvcjsKKworCS8vIFdoZW4gX01fa2luZCA9PSBfX3NlcXVlbmNlCisJc3RydWN0CisJeworCSAgY29uc3QgY2hhciogICAgICBfTV9uYW1lOworCSAgY29uc3Qgdm9pZCogICAgICBfTV9hZGRyZXNzOworCSAgY29uc3QgdHlwZV9pbmZvKiBfTV90eXBlOworCX0gX01fc2VxdWVuY2U7CisKKwkvLyBXaGVuIF9NX2tpbmQgPT0gX19pbnRlZ2VyCisJc3RydWN0CisJeworCSAgY29uc3QgY2hhciogX01fbmFtZTsKKwkgIGxvbmcgICAgICAgIF9NX3ZhbHVlOworCX0gX01faW50ZWdlcjsKKworCS8vIFdoZW4gX01fa2luZCA9PSBfX3N0cmluZworCXN0cnVjdAorCXsKKwkgIGNvbnN0IGNoYXIqIF9NX25hbWU7CisJICBjb25zdCBjaGFyKiBfTV92YWx1ZTsKKwl9IF9NX3N0cmluZzsKKyAgICAgIH0gX01fdmFyaWFudDsKKworICAgICAgX1BhcmFtZXRlcigpIDogX01fa2luZChfX3VudXNlZF9wYXJhbSksIF9NX3ZhcmlhbnQoKSB7IH0KKworICAgICAgX1BhcmFtZXRlcihsb25nIF9fdmFsdWUsIGNvbnN0IGNoYXIqIF9fbmFtZSkgCisgICAgICA6IF9NX2tpbmQoX19pbnRlZ2VyKSwgX01fdmFyaWFudCgpCisgICAgICB7CisJX01fdmFyaWFudC5fTV9pbnRlZ2VyLl9NX25hbWUgPSBfX25hbWU7CisJX01fdmFyaWFudC5fTV9pbnRlZ2VyLl9NX3ZhbHVlID0gX192YWx1ZTsKKyAgICAgIH0KKworICAgICAgX1BhcmFtZXRlcihjb25zdCBjaGFyKiBfX3ZhbHVlLCBjb25zdCBjaGFyKiBfX25hbWUpIAorICAgICAgOiBfTV9raW5kKF9fc3RyaW5nKSwgX01fdmFyaWFudCgpCisgICAgICB7CisJX01fdmFyaWFudC5fTV9zdHJpbmcuX01fbmFtZSA9IF9fbmFtZTsKKwlfTV92YXJpYW50Ll9NX3N0cmluZy5fTV92YWx1ZSA9IF9fdmFsdWU7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgICAgICBfUGFyYW1ldGVyKGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19pdCwKKwkJICAgY29uc3QgY2hhciogX19uYW1lLCBfSXNfaXRlcmF0b3IpCisJOiBfTV9raW5kKF9faXRlcmF0b3IpLCAgX01fdmFyaWFudCgpCisgICAgICAgIHsKKwkgIF9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fbmFtZSA9IF9fbmFtZTsKKwkgIF9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fYWRkcmVzcyA9ICZfX2l0OworI2lmZGVmIF9fR1hYX1JUVEkKKwkgIF9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fdHlwZSA9ICZ0eXBlaWQoX19pdCk7CisjZWxzZQorCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV90eXBlID0gMDsKKyNlbmRpZgorCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV9jb25zdG5lc3MgPQorCSAgICBfX2lzX3NhbWU8X1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+LAorCSAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfU2VxdWVuY2U6Oml0ZXJhdG9yPjo6CisJICAgICAgdmFsdWU/IF9fbXV0YWJsZV9pdGVyYXRvciA6IF9fY29uc3RfaXRlcmF0b3I7CisJICBfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX3NlcXVlbmNlID0gX19pdC5fTV9nZXRfc2VxdWVuY2UoKTsKKyNpZmRlZiBfX0dYWF9SVFRJCisJICBfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX3NlcV90eXBlID0gJnR5cGVpZChfU2VxdWVuY2UpOworI2Vsc2UKKwkgIF9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fc2VxX3R5cGUgPSAwOworI2VuZGlmCisKKwkgIGlmIChfX2l0Ll9NX3Npbmd1bGFyKCkpCisJICAgIF9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fc3RhdGUgPSBfX3Npbmd1bGFyOworCSAgZWxzZQorCSAgICB7CisJICAgICAgYm9vbCBfX2lzX2JlZ2luID0gX19pdC5fTV9pc19iZWdpbigpOworCSAgICAgIGJvb2wgX19pc19lbmQgPSBfX2l0Ll9NX2lzX2VuZCgpOworCSAgICAgIGlmIChfX2lzX2VuZCkKKwkJX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV9zdGF0ZSA9IF9fZW5kOworCSAgICAgIGVsc2UgaWYgKF9faXNfYmVnaW4pCisJCV9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fc3RhdGUgPSBfX2JlZ2luOworCSAgICAgIGVsc2UKKwkJX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV9zdGF0ZSA9IF9fbWlkZGxlOworCSAgICB9CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KKyAgICAgICAgX1BhcmFtZXRlcihjb25zdCBfVHlwZSomIF9faXQsIGNvbnN0IGNoYXIqIF9fbmFtZSwgX0lzX2l0ZXJhdG9yKQorICAgICAgICA6IF9NX2tpbmQoX19pdGVyYXRvciksIF9NX3ZhcmlhbnQoKQorICAgICAgICB7CisJICBfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX25hbWUgPSBfX25hbWU7CisJICBfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX2FkZHJlc3MgPSAmX19pdDsKKyNpZmRlZiBfX0dYWF9SVFRJCisJICBfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX3R5cGUgPSAmdHlwZWlkKF9faXQpOworI2Vsc2UKKwkgIF9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fdHlwZSA9IDA7CisjZW5kaWYKKwkgIF9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fY29uc3RuZXNzID0gX19tdXRhYmxlX2l0ZXJhdG9yOworCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV9zdGF0ZSA9IF9faXQ/IF9fdW5rbm93bl9zdGF0ZSA6IF9fc2luZ3VsYXI7CisJICBfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX3NlcXVlbmNlID0gMDsKKwkgIF9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fc2VxX3R5cGUgPSAwOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+CisgICAgICAgIF9QYXJhbWV0ZXIoX1R5cGUqJiBfX2l0LCBjb25zdCBjaGFyKiBfX25hbWUsIF9Jc19pdGVyYXRvcikKKyAgICAgICAgOiBfTV9raW5kKF9faXRlcmF0b3IpLCBfTV92YXJpYW50KCkKKyAgICAgICAgeworCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV9uYW1lID0gX19uYW1lOworCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV9hZGRyZXNzID0gJl9faXQ7CisjaWZkZWYgX19HWFhfUlRUSQorCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV90eXBlID0gJnR5cGVpZChfX2l0KTsKKyNlbHNlCisJICBfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX3R5cGUgPSAwOworI2VuZGlmCisJICBfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX2NvbnN0bmVzcyA9IF9fY29uc3RfaXRlcmF0b3I7CisJICBfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX3N0YXRlID0gX19pdD8gX191bmtub3duX3N0YXRlIDogX19zaW5ndWxhcjsKKwkgIF9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fc2VxdWVuY2UgPSAwOworCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV9zZXFfdHlwZSA9IDA7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CisgICAgICAgIF9QYXJhbWV0ZXIoY29uc3QgX0l0ZXJhdG9yJiBfX2l0LCBjb25zdCBjaGFyKiBfX25hbWUsIF9Jc19pdGVyYXRvcikKKyAgICAgICAgOiBfTV9raW5kKF9faXRlcmF0b3IpLCBfTV92YXJpYW50KCkKKyAgICAgICAgeworCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV9uYW1lID0gX19uYW1lOworCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV9hZGRyZXNzID0gJl9faXQ7CisjaWZkZWYgX19HWFhfUlRUSQorCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV90eXBlID0gJnR5cGVpZChfX2l0KTsKKyNlbHNlCisJICBfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX3R5cGUgPSAwOworI2VuZGlmCisJICBfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX2NvbnN0bmVzcyA9IF9fdW5rbm93bl9jb25zdG5lc3M7CisJICBfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX3N0YXRlID0KKwkgICAgX19nbnVfZGVidWc6Ol9fY2hlY2tfc2luZ3VsYXIoX19pdCk/IF9fc2luZ3VsYXIgOiBfX3Vua25vd25fc3RhdGU7CisJICBfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX3NlcXVlbmNlID0gMDsKKwkgIF9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fc2VxX3R5cGUgPSAwOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1NlcXVlbmNlPgorICAgICAgICBfUGFyYW1ldGVyKGNvbnN0IF9TYWZlX3NlcXVlbmNlPF9TZXF1ZW5jZT4mIF9fc2VxLAorCQkgICBjb25zdCBjaGFyKiBfX25hbWUsIF9Jc19zZXF1ZW5jZSkKKyAgICAgICAgOiBfTV9raW5kKF9fc2VxdWVuY2UpLCBfTV92YXJpYW50KCkKKyAgICAgICAgeworCSAgX01fdmFyaWFudC5fTV9zZXF1ZW5jZS5fTV9uYW1lID0gX19uYW1lOworCSAgX01fdmFyaWFudC5fTV9zZXF1ZW5jZS5fTV9hZGRyZXNzID0KKwkgICAgc3RhdGljX2Nhc3Q8Y29uc3QgX1NlcXVlbmNlKj4oJl9fc2VxKTsKKyNpZmRlZiBfX0dYWF9SVFRJCisJICBfTV92YXJpYW50Ll9NX3NlcXVlbmNlLl9NX3R5cGUgPSAmdHlwZWlkKF9TZXF1ZW5jZSk7CisjZWxzZQorCSAgX01fdmFyaWFudC5fTV9zZXF1ZW5jZS5fTV90eXBlID0gMDsKKyNlbmRpZgorCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1NlcXVlbmNlPgorICAgICAgICBfUGFyYW1ldGVyKGNvbnN0IF9TZXF1ZW5jZSYgX19zZXEsIGNvbnN0IGNoYXIqIF9fbmFtZSwgX0lzX3NlcXVlbmNlKQorICAgICAgICA6IF9NX2tpbmQoX19zZXF1ZW5jZSksIF9NX3ZhcmlhbnQoKQorICAgICAgICB7CisJICBfTV92YXJpYW50Ll9NX3NlcXVlbmNlLl9NX25hbWUgPSBfX25hbWU7CisJICBfTV92YXJpYW50Ll9NX3NlcXVlbmNlLl9NX2FkZHJlc3MgPSAmX19zZXE7CisjaWZkZWYgX19HWFhfUlRUSQorCSAgX01fdmFyaWFudC5fTV9zZXF1ZW5jZS5fTV90eXBlID0gJnR5cGVpZChfU2VxdWVuY2UpOworI2Vsc2UKKwkgIF9NX3ZhcmlhbnQuX01fc2VxdWVuY2UuX01fdHlwZSA9IDA7CisjZW5kaWYKKwl9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3ByaW50X2ZpZWxkKGNvbnN0IF9FcnJvcl9mb3JtYXR0ZXIqIF9fZm9ybWF0dGVyLAorCQkgICAgIGNvbnN0IGNoYXIqIF9fbmFtZSkgY29uc3Q7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3ByaW50X2Rlc2NyaXB0aW9uKGNvbnN0IF9FcnJvcl9mb3JtYXR0ZXIqIF9fZm9ybWF0dGVyKSBjb25zdDsKKyAgICB9OworCisgICAgZnJpZW5kIHN0cnVjdCBfUGFyYW1ldGVyOworCisgIHB1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CisgICAgICBjb25zdCBfRXJyb3JfZm9ybWF0dGVyJgorICAgICAgX01faXRlcmF0b3IoY29uc3QgX0l0ZXJhdG9yJiBfX2l0LCBjb25zdCBjaGFyKiBfX25hbWUgPSAwKSAgY29uc3QKKyAgICAgIHsKKwlpZiAoX01fbnVtX3BhcmFtZXRlcnMgPCBzaXplX3QoX19tYXhfcGFyYW1ldGVycykpCisJICBfTV9wYXJhbWV0ZXJzW19NX251bV9wYXJhbWV0ZXJzKytdID0gX1BhcmFtZXRlcihfX2l0LCBfX25hbWUsCisJCQkJCQkJICBfSXNfaXRlcmF0b3IoKSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgY29uc3QgX0Vycm9yX2Zvcm1hdHRlciYKKyAgICBfTV9pbnRlZ2VyKGxvbmcgX192YWx1ZSwgY29uc3QgY2hhciogX19uYW1lID0gMCkgY29uc3QKKyAgICB7CisgICAgICBpZiAoX01fbnVtX3BhcmFtZXRlcnMgPCBzaXplX3QoX19tYXhfcGFyYW1ldGVycykpCisJX01fcGFyYW1ldGVyc1tfTV9udW1fcGFyYW1ldGVycysrXSA9IF9QYXJhbWV0ZXIoX192YWx1ZSwgX19uYW1lKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBjb25zdCBfRXJyb3JfZm9ybWF0dGVyJgorICAgIF9NX3N0cmluZyhjb25zdCBjaGFyKiBfX3ZhbHVlLCBjb25zdCBjaGFyKiBfX25hbWUgPSAwKSBjb25zdAorICAgIHsKKyAgICAgIGlmIChfTV9udW1fcGFyYW1ldGVycyA8IHNpemVfdChfX21heF9wYXJhbWV0ZXJzKSkKKwlfTV9wYXJhbWV0ZXJzW19NX251bV9wYXJhbWV0ZXJzKytdID0gX1BhcmFtZXRlcihfX3ZhbHVlLCBfX25hbWUpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICAgIGNvbnN0IF9FcnJvcl9mb3JtYXR0ZXImCisgICAgICBfTV9zZXF1ZW5jZShjb25zdCBfU2VxdWVuY2UmIF9fc2VxLCBjb25zdCBjaGFyKiBfX25hbWUgPSAwKSBjb25zdAorICAgICAgeworCWlmIChfTV9udW1fcGFyYW1ldGVycyA8IHNpemVfdChfX21heF9wYXJhbWV0ZXJzKSkKKwkgIF9NX3BhcmFtZXRlcnNbX01fbnVtX3BhcmFtZXRlcnMrK10gPSBfUGFyYW1ldGVyKF9fc2VxLCBfX25hbWUsCisJCQkJCQkJICBfSXNfc2VxdWVuY2UoKSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgY29uc3QgX0Vycm9yX2Zvcm1hdHRlciYKKyAgICBfTV9tZXNzYWdlKGNvbnN0IGNoYXIqIF9fdGV4dCkgY29uc3QKKyAgICB7IF9NX3RleHQgPSBfX3RleHQ7IHJldHVybiAqdGhpczsgfQorCisgICAgY29uc3QgX0Vycm9yX2Zvcm1hdHRlciYKKyAgICBfTV9tZXNzYWdlKF9EZWJ1Z19tc2dfaWQgX19pZCkgY29uc3QgdGhyb3cgKCk7CisKKyAgICBfR0xJQkNYWF9OT1JFVFVSTiB2b2lkCisgICAgX01fZXJyb3IoKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIF9FcnJvcl9mb3JtYXR0ZXIoY29uc3QgY2hhciogX19maWxlLCBzaXplX3QgX19saW5lKQorICAgIDogX01fZmlsZShfX2ZpbGUpLCBfTV9saW5lKF9fbGluZSksIF9NX251bV9wYXJhbWV0ZXJzKDApLCBfTV90ZXh0KDApLAorICAgICAgX01fbWF4X2xlbmd0aCg3OCksIF9NX2NvbHVtbigxKSwgX01fZmlyc3RfbGluZSh0cnVlKSwgX01fd29yZHdyYXAoZmFsc2UpCisgICAgeyBfTV9nZXRfbWF4X2xlbmd0aCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICB2b2lkCisgICAgICBfTV9mb3JtYXRfd29yZChjaGFyKiwgaW50LCBjb25zdCBjaGFyKiwgX1RwKSBjb25zdCB0aHJvdyAoKTsKKworICAgIHZvaWQKKyAgICBfTV9wcmludF93b3JkKGNvbnN0IGNoYXIqIF9fd29yZCkgY29uc3Q7CisKKyAgICB2b2lkCisgICAgX01fcHJpbnRfc3RyaW5nKGNvbnN0IGNoYXIqIF9fc3RyaW5nKSBjb25zdDsKKworICAgIHZvaWQKKyAgICBfTV9nZXRfbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93ICgpOworCisgICAgZW51bSB7IF9fbWF4X3BhcmFtZXRlcnMgPSA5IH07CisKKyAgICBjb25zdCBjaGFyKiAgICAgICAgIF9NX2ZpbGU7CisgICAgc2l6ZV90ICAgICAgICAgICAgICBfTV9saW5lOworICAgIG11dGFibGUgX1BhcmFtZXRlciAgX01fcGFyYW1ldGVyc1tfX21heF9wYXJhbWV0ZXJzXTsKKyAgICBtdXRhYmxlIHNpemVfdCAgICAgIF9NX251bV9wYXJhbWV0ZXJzOworICAgIG11dGFibGUgY29uc3QgY2hhciogX01fdGV4dDsKKyAgICBtdXRhYmxlIHNpemVfdCAgICAgIF9NX21heF9sZW5ndGg7CisgICAgZW51bSB7IF9NX2luZGVudCA9IDQgfSA7CisgICAgbXV0YWJsZSBzaXplX3QgICAgICBfTV9jb2x1bW47CisgICAgbXV0YWJsZSBib29sICAgICAgICBfTV9maXJzdF9saW5lOworICAgIG11dGFibGUgYm9vbCAgICAgICAgX01fd29yZHdyYXA7CisKKyAgcHVibGljOgorICAgIHN0YXRpYyBfRXJyb3JfZm9ybWF0dGVyCisgICAgX01fYXQoY29uc3QgY2hhciogX19maWxlLCBzaXplX3QgX19saW5lKQorICAgIHsgcmV0dXJuIF9FcnJvcl9mb3JtYXR0ZXIoX19maWxlLCBfX2xpbmUpOyB9CisgIH07Cit9IC8vIG5hbWVzcGFjZSBfX2dudV9kZWJ1ZworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZGVidWcvZnVuY3Rpb25zLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlYnVnL2Z1bmN0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YjFkNzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlYnVnL2Z1bmN0aW9ucy5oCkBAIC0wLDAgKzEsMzgzIEBACisvLyBEZWJ1Z2dpbmcgc3VwcG9ydCBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBkZWJ1Zy9mdW5jdGlvbnMuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBkZWJ1ZyBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfREVCVUdfRlVOQ1RJT05TX0gKKyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfRlVOQ1RJT05TX0ggMQorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxjc3RkZGVmPiAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHB0cmRpZmZfdAorI2luY2x1ZGUgPGJpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaD4gLy8gZm9yIGl0ZXJhdG9yX3RyYWl0cywgY2F0ZWdvcmllcworI2luY2x1ZGUgPGJpdHMvY3BwX3R5cGVfdHJhaXRzLmg+ICAgICAgICAgLy8gZm9yIF9faXNfaW50ZWdlcgorCituYW1lc3BhY2UgX19nbnVfZGVidWcKK3sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgY2xhc3MgX1NhZmVfaXRlcmF0b3I7CisKKyAgLy8gQW4gYXJiaXRyYXJ5IGl0ZXJhdG9yIHBvaW50ZXIgaXMgbm90IHNpbmd1bGFyLgorICBpbmxpbmUgYm9vbAorICBfX2NoZWNrX3Npbmd1bGFyX2F1eChjb25zdCB2b2lkKikgeyByZXR1cm4gZmFsc2U7IH0KKworICAvLyBXZSBtYXkgaGF2ZSBhbiBpdGVyYXRvciB0aGF0IGRlcml2ZXMgZnJvbSBfU2FmZV9pdGVyYXRvcl9iYXNlIGJ1dCBpc24ndAorICAvLyBhIF9TYWZlX2l0ZXJhdG9yLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX2NoZWNrX3Npbmd1bGFyKF9JdGVyYXRvciYgX194KQorICAgIHsgcmV0dXJuIF9fY2hlY2tfc2luZ3VsYXJfYXV4KCZfX3gpOyB9CisKKyAgLyoqIE5vbi1OVUxMIHBvaW50ZXJzIGFyZSBub25zaW5ndWxhci4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sCisgICAgX19jaGVja19zaW5ndWxhcihjb25zdCBfVHAqIF9fcHRyKQorICAgIHsgcmV0dXJuIF9fcHRyID09IDA7IH0KKworICAvKiogU2FmZSBpdGVyYXRvcnMga25vdyBpZiB0aGV5IGFyZSBzaW5ndWxhci4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX2NoZWNrX3Npbmd1bGFyKGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX194KQorICAgIHsgcmV0dXJuIF9feC5fTV9zaW5ndWxhcigpOyB9CisKKyAgLyoqIEFzc3VtZSB0aGF0IHNvbWUgYXJiaXRyYXJ5IGl0ZXJhdG9yIGlzIGRlcmVmZXJlbmNlYWJsZSwgYmVjYXVzZSB3ZQorICAgICAgY2FuJ3QgcHJvdmUgdGhhdCBpdCBpc24ndC4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgIGlubGluZSBib29sCisgICAgX19jaGVja19kZXJlZmVyZW5jZWFibGUoX0l0ZXJhdG9yJikKKyAgICB7IHJldHVybiB0cnVlOyB9CisKKyAgLyoqIE5vbi1OVUxMIHBvaW50ZXJzIGFyZSBkZXJlZmVyZW5jZWFibGUuICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9fY2hlY2tfZGVyZWZlcmVuY2VhYmxlKGNvbnN0IF9UcCogX19wdHIpCisgICAgeyByZXR1cm4gX19wdHI7IH0KKworICAvKiogU2FmZSBpdGVyYXRvcnMga25vdyBpZiB0aGV5IGFyZSBzaW5ndWxhci4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX2NoZWNrX2RlcmVmZXJlbmNlYWJsZShjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9feCkKKyAgICB7IHJldHVybiBfX3guX01fZGVyZWZlcmVuY2VhYmxlKCk7IH0KKworICAvKiogSWYgdGhlIGRpc3RhbmNlIGJldHdlZW4gdHdvIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzIGlzCisgICAqICBub25uZWdhdGl2ZSwgYXNzdW1lIHRoZSByYW5nZSBpcyB2YWxpZC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgorICAgIGlubGluZSBib29sCisgICAgX192YWxpZF9yYW5nZV9hdXgyKGNvbnN0IF9SYW5kb21BY2Nlc3NJdGVyYXRvciYgX19maXJzdCwKKwkJICAgICAgIGNvbnN0IF9SYW5kb21BY2Nlc3NJdGVyYXRvciYgX19sYXN0LAorCQkgICAgICAgc3RkOjpyYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKKyAgICB7IHJldHVybiBfX2xhc3QgLSBfX2ZpcnN0ID49IDA7IH0KKworICAvKiogQ2FuJ3QgdGVzdCBmb3IgYSB2YWxpZCByYW5nZSB3aXRoIGlucHV0IGl0ZXJhdG9ycywgYmVjYXVzZQorICAgKiAgaXRlcmF0aW9uIG1heSBiZSBkZXN0cnVjdGl2ZS4gU28gd2UganVzdCBhc3N1bWUgdGhhdCB0aGUgcmFuZ2UKKyAgICogIGlzIHZhbGlkLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9fdmFsaWRfcmFuZ2VfYXV4Mihjb25zdCBfSW5wdXRJdGVyYXRvciYsIGNvbnN0IF9JbnB1dEl0ZXJhdG9yJiwKKwkJICAgICAgIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnKQorICAgIHsgcmV0dXJuIHRydWU7IH0KKworICAvKiogV2Ugc2F5IHRoYXQgaW50ZWdyYWwgdHlwZXMgZm9yIGEgdmFsaWQgcmFuZ2UsIGFuZCBkZWZlciB0byBvdGhlcgorICAgKiAgcm91dGluZXMgdG8gcmVhbGl6ZSB3aGF0IHRvIGRvIHdpdGggaW50ZWdyYWwgdHlwZXMgaW5zdGVhZCBvZgorICAgKiAgaXRlcmF0b3JzLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZWdyYWw+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX3ZhbGlkX3JhbmdlX2F1eChjb25zdCBfSW50ZWdyYWwmLCBjb25zdCBfSW50ZWdyYWwmLCBzdGQ6Ol9fdHJ1ZV90eXBlKQorICAgIHsgcmV0dXJuIHRydWU7IH0KKworICAvKiogV2UgaGF2ZSBpdGVyYXRvcnMsIHNvIGZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mIGl0ZXJhdG9ycyB0aGF0IGFyZQorICAgKiAgdG8gc2VlIGlmIHdlIGNhbiBjaGVjayB0aGUgcmFuZ2UgYWhlYWQgb2YgdGltZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX3ZhbGlkX3JhbmdlX2F1eChjb25zdCBfSW5wdXRJdGVyYXRvciYgX19maXJzdCwKKwkJICAgICAgY29uc3QgX0lucHV0SXRlcmF0b3ImIF9fbGFzdCwgc3RkOjpfX2ZhbHNlX3R5cGUpCisgIHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkKKyAgICAgIF9DYXRlZ29yeTsKKyAgICByZXR1cm4gX192YWxpZF9yYW5nZV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwgX0NhdGVnb3J5KCkpOworICB9CisKKyAgLyoqIERvbid0IGtub3cgd2hhdCB0aGVzZSBpdGVyYXRvcnMgYXJlLCBvciBpZiB0aGV5IGFyZSBldmVuCisgICAqICBpdGVyYXRvcnMgKHdlIG1heSBnZXQgYW4gaW50ZWdyYWwgdHlwZSBmb3IgSW5wdXRJdGVyYXRvciksIHNvCisgICAqICBzZWUgaWYgdGhleSBhcmUgaW50ZWdyYWwgYW5kIHBhc3MgdGhlbSBvbiB0byB0aGUgbmV4dCBwaGFzZQorICAgKiAgb3RoZXJ3aXNlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9fdmFsaWRfcmFuZ2UoY29uc3QgX0lucHV0SXRlcmF0b3ImIF9fZmlyc3QsIGNvbnN0IF9JbnB1dEl0ZXJhdG9yJiBfX2xhc3QpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Ol9faXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9fdHlwZSBfSW50ZWdyYWw7CisgICAgICByZXR1cm4gX192YWxpZF9yYW5nZV9hdXgoX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CisgICAgfQorCisgIC8qKiBTYWZlIGl0ZXJhdG9ycyBrbm93IGhvdyB0byBjaGVjayBpZiB0aGV5IGZvcm0gYSB2YWxpZCByYW5nZS4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX3ZhbGlkX3JhbmdlKGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19maXJzdCwKKwkJICBjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9fbGFzdCkKKyAgICB7IHJldHVybiBfX2ZpcnN0Ll9NX3ZhbGlkX3JhbmdlKF9fbGFzdCk7IH0KKworICAvKiBDaGVja3MgdGhhdCBbZmlyc3QsIGxhc3QpIGlzIGEgdmFsaWQgcmFuZ2UsIGFuZCB0aGVuIHJldHVybnMKKyAgICogX19maXJzdC4gVGhpcyByb3V0aW5lIGlzIHVzZWZ1bCB3aGVuIHdlIGNhbid0IHVzZSBhIHNlcGFyYXRlCisgICAqIGFzc2VydGlvbiBzdGF0ZW1lbnQgYmVjYXVzZSwgZS5nLiwgd2UgYXJlIGluIGEgY29uc3RydWN0b3IuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgIGlubGluZSBfSW5wdXRJdGVyYXRvcgorICAgIF9fY2hlY2tfdmFsaWRfcmFuZ2UoY29uc3QgX0lucHV0SXRlcmF0b3ImIF9fZmlyc3QsCisJCQljb25zdCBfSW5wdXRJdGVyYXRvciYgX19sYXN0CisJCQlfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9fdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KSk7CisgICAgICByZXR1cm4gX19maXJzdDsKKyAgICB9CisKKyAgLyoqIENoZWNrcyB0aGF0IF9fcyBpcyBub24tTlVMTCBvciBfX24gPT0gMCwgYW5kIHRoZW4gcmV0dXJucyBfX3MuICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0ludGVnZXI+CisgICAgaW5saW5lIGNvbnN0IF9DaGFyVCoKKyAgICBfX2NoZWNrX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywKKwkJICAgY29uc3QgX0ludGVnZXImIF9fbiBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkpCisgICAgeworI2lmZGVmIF9HTElCQ1hYX0RFQlVHX1BFREFOVElDCisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX19zICE9IDAgfHwgX19uID09IDApOworI2VuZGlmCisgICAgICByZXR1cm4gX19zOworICAgIH0KKworICAvKiogQ2hlY2tzIHRoYXQgX19zIGlzIG5vbi1OVUxMIGFuZCB0aGVuIHJldHVybnMgX19zLiAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgaW5saW5lIGNvbnN0IF9DaGFyVCoKKyAgICBfX2NoZWNrX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcykKKyAgICB7CisjaWZkZWYgX0dMSUJDWFhfREVCVUdfUEVEQU5USUMKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChfX3MgIT0gMCk7CisjZW5kaWYKKyAgICAgIHJldHVybiBfX3M7CisgICAgfQorCisgIC8vIENhbid0IGNoZWNrIGlmIGFuIGlucHV0IGl0ZXJhdG9yIHNlcXVlbmNlIGlzIHNvcnRlZCwgYmVjYXVzZSB3ZQorICAvLyBjYW4ndCBzdGVwIHRocm91Z2ggdGhlIHNlcXVlbmNlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9fY2hlY2tfc29ydGVkX2F1eChjb25zdCBfSW5wdXRJdGVyYXRvciYsIGNvbnN0IF9JbnB1dEl0ZXJhdG9yJiwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppbnB1dF9pdGVyYXRvcl90YWcpCisgICAgeyByZXR1cm4gdHJ1ZTsgfQorCisgIC8vIENhbiB2ZXJpZnkgaWYgYSBmb3J3YXJkIGl0ZXJhdG9yIHNlcXVlbmNlIGlzIGluIGZhY3Qgc29ydGVkIHVzaW5nCisgIC8vIHN0ZDo6X19pc19zb3J0ZWQKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9fY2hlY2tfc29ydGVkX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKKyAgICAgIGZvciAoKytfX25leHQ7IF9fbmV4dCAhPSBfX2xhc3Q7IF9fZmlyc3QgPSBfX25leHQsICsrX19uZXh0KQorICAgICAgICBpZiAoKl9fbmV4dCA8ICpfX2ZpcnN0KQorICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgIC8vIENhbid0IGNoZWNrIGlmIGFuIGlucHV0IGl0ZXJhdG9yIHNlcXVlbmNlIGlzIHNvcnRlZCwgYmVjYXVzZSB3ZSBjYW4ndCBzdGVwCisgIC8vIHRocm91Z2ggdGhlIHNlcXVlbmNlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9fY2hlY2tfc29ydGVkX2F1eChjb25zdCBfSW5wdXRJdGVyYXRvciYsIGNvbnN0IF9JbnB1dEl0ZXJhdG9yJiwKKyAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSwgc3RkOjppbnB1dF9pdGVyYXRvcl90YWcpCisgICAgeyByZXR1cm4gdHJ1ZTsgfQorCisgIC8vIENhbiB2ZXJpZnkgaWYgYSBmb3J3YXJkIGl0ZXJhdG9yIHNlcXVlbmNlIGlzIGluIGZhY3Qgc29ydGVkIHVzaW5nCisgIC8vIHN0ZDo6X19pc19zb3J0ZWQKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9fY2hlY2tfc29ydGVkX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CisgICAgICBmb3IgKCsrX19uZXh0OyBfX25leHQgIT0gX19sYXN0OyBfX2ZpcnN0ID0gX19uZXh0LCArK19fbmV4dCkKKyAgICAgICAgaWYgKF9fcHJlZCgqX19uZXh0LCAqX19maXJzdCkpCisgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgLy8gRGV0ZXJtaW5lIGlmIGEgc2VxdWVuY2UgaXMgc29ydGVkLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9fY2hlY2tfc29ydGVkKGNvbnN0IF9JbnB1dEl0ZXJhdG9yJiBfX2ZpcnN0LCBjb25zdCBfSW5wdXRJdGVyYXRvciYgX19sYXN0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeQorICAgICAgICBfQ2F0ZWdvcnk7CisKKyAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZSA8IG9wZXJhdG9yIGZvciBlbGVtZW50cyBpbiB0aGUgc2VxdWVuY2UgaXMgYQorICAgICAgLy8gU3RyaWN0V2Vha09yZGVyaW5nIGJ5IGNoZWNraW5nIHRoYXQgaXQgaXMgaXJyZWZsZXhpdmUuCisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX19maXJzdCA9PSBfX2xhc3QgfHwgISgqX19maXJzdCA8ICpfX2ZpcnN0KSk7CisKKyAgICAgIHJldHVybiBfX2NoZWNrX3NvcnRlZF9hdXgoX19maXJzdCwgX19sYXN0LCBfQ2F0ZWdvcnkoKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGlubGluZSBib29sCisgICAgX19jaGVja19zb3J0ZWQoY29uc3QgX0lucHV0SXRlcmF0b3ImIF9fZmlyc3QsIGNvbnN0IF9JbnB1dEl0ZXJhdG9yJiBfX2xhc3QsCisgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5CisgICAgICAgIF9DYXRlZ29yeTsKKworICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHByZWRpY2F0ZSBpcyBTdHJpY3RXZWFrT3JkZXJpbmcgYnkgY2hlY2tpbmcgdGhhdCBpdAorICAgICAgLy8gaXMgaXJyZWZsZXhpdmUuCisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX19maXJzdCA9PSBfX2xhc3QgfHwgIV9fcHJlZCgqX19maXJzdCwgKl9fZmlyc3QpKTsKKworICAgICAgcmV0dXJuIF9fY2hlY2tfc29ydGVkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX0NhdGVnb3J5KCkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9fY2hlY2tfc29ydGVkX3NldF9hdXgoY29uc3QgX0lucHV0SXRlcmF0b3ImIF9fZmlyc3QsCisJCQkgICBjb25zdCBfSW5wdXRJdGVyYXRvciYgX19sYXN0LAorCQkJICAgc3RkOjpfX3RydWVfdHlwZSkKKyAgICB7IHJldHVybiBfX2NoZWNrX3NvcnRlZChfX2ZpcnN0LCBfX2xhc3QpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX2NoZWNrX3NvcnRlZF9zZXRfYXV4KGNvbnN0IF9JbnB1dEl0ZXJhdG9yJiwKKwkJCSAgIGNvbnN0IF9JbnB1dEl0ZXJhdG9yJiwKKwkJCSAgIHN0ZDo6X19mYWxzZV90eXBlKQorICAgIHsgcmV0dXJuIHRydWU7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9fY2hlY2tfc29ydGVkX3NldF9hdXgoY29uc3QgX0lucHV0SXRlcmF0b3ImIF9fZmlyc3QsCisJCQkgICBjb25zdCBfSW5wdXRJdGVyYXRvciYgX19sYXN0LAorCQkJICAgX1ByZWRpY2F0ZSBfX3ByZWQsIHN0ZDo6X190cnVlX3R5cGUpCisgICAgeyByZXR1cm4gX19jaGVja19zb3J0ZWQoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX2NoZWNrX3NvcnRlZF9zZXRfYXV4KGNvbnN0IF9JbnB1dEl0ZXJhdG9yJiwKKwkJCSAgIGNvbnN0IF9JbnB1dEl0ZXJhdG9yJiwgX1ByZWRpY2F0ZSwKKwkJCSAgIHN0ZDo6X19mYWxzZV90eXBlKQorICAgIHsgcmV0dXJuIHRydWU7IH0KKworICAvLyAuLi4gc3BlY2lhbCB2YXJpYW50IHVzZWQgaW4gc3RkOjptZXJnZSwgc3RkOjppbmNsdWRlcywgc3RkOjpzZXRfKi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IxLCB0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjI+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX2NoZWNrX3NvcnRlZF9zZXQoY29uc3QgX0lucHV0SXRlcmF0b3IxJiBfX2ZpcnN0LAorCQkgICAgICAgY29uc3QgX0lucHV0SXRlcmF0b3IxJiBfX2xhc3QsCisJCSAgICAgICBjb25zdCBfSW5wdXRJdGVyYXRvcjImKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3IxPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGUxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcjI+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTI7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpfX2FyZV9zYW1lPF9WYWx1ZVR5cGUxLCBfVmFsdWVUeXBlMj46Ol9fdHlwZQorCV9TYW1lVHlwZTsKKyAgICAgIHJldHVybiBfX2NoZWNrX3NvcnRlZF9zZXRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX1NhbWVUeXBlKCkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMiwKKwkgICB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGlubGluZSBib29sCisgICAgX19jaGVja19zb3J0ZWRfc2V0KGNvbnN0IF9JbnB1dEl0ZXJhdG9yMSYgX19maXJzdCwKKwkJICAgICAgIGNvbnN0IF9JbnB1dEl0ZXJhdG9yMSYgX19sYXN0LAorCQkgICAgICAgY29uc3QgX0lucHV0SXRlcmF0b3IyJiwgX1ByZWRpY2F0ZSBfX3ByZWQpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcjE+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yMj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlMjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Ol9fYXJlX3NhbWU8X1ZhbHVlVHlwZTEsIF9WYWx1ZVR5cGUyPjo6X190eXBlCisJX1NhbWVUeXBlOworICAgICAgcmV0dXJuIF9fY2hlY2tfc29ydGVkX3NldF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsIF9TYW1lVHlwZSgpKTsKKyAgIH0KKworICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgIC8vIDI3MC4gQmluYXJ5IHNlYXJjaCByZXF1aXJlbWVudHMgb3Zlcmx5IHN0cmljdAorICAvLyBEZXRlcm1pbmUgaWYgYSBzZXF1ZW5jZSBpcyBwYXJ0aXRpb25lZCB3LnIudC4gdGhpcyBlbGVtZW50LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX2NoZWNrX3BhcnRpdGlvbmVkX2xvd2VyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKKwkJCSAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCisgICAgeworICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICpfX2ZpcnN0IDwgX192YWx1ZSkKKwkrK19fZmlyc3Q7CisgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgISgqX19maXJzdCA8IF9fdmFsdWUpKQorCSsrX19maXJzdDsKKyAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sCisgICAgX19jaGVja19wYXJ0aXRpb25lZF91cHBlcihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCisJCQkgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQorICAgIHsKKyAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhKF9fdmFsdWUgPCAqX19maXJzdCkpCisJKytfX2ZpcnN0OworICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fdmFsdWUgPCAqX19maXJzdCkKKwkrK19fZmlyc3Q7CisgICAgICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3Q7CisgICAgfQorCisgIC8vIERldGVybWluZSBpZiBhIHNlcXVlbmNlIGlzIHBhcnRpdGlvbmVkIHcuci50LiB0aGlzIGVsZW1lbnQuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1ByZWQ+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX2NoZWNrX3BhcnRpdGlvbmVkX2xvd2VyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKKwkJCSAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUsCisJCQkgICAgICBfUHJlZCBfX3ByZWQpCisgICAgeworICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmIGJvb2woX19wcmVkKCpfX2ZpcnN0LCBfX3ZhbHVlKSkpCisJKytfX2ZpcnN0OworICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFib29sKF9fcHJlZCgqX19maXJzdCwgX192YWx1ZSkpKQorCSsrX19maXJzdDsKKyAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfUHJlZD4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9fY2hlY2tfcGFydGl0aW9uZWRfdXBwZXIoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAorCQkJICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSwKKwkJCSAgICAgIF9QcmVkIF9fcHJlZCkKKyAgICB7CisgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgIWJvb2woX19wcmVkKF9fdmFsdWUsICpfX2ZpcnN0KSkpCisJKytfX2ZpcnN0OworICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmIGJvb2woX19wcmVkKF9fdmFsdWUsICpfX2ZpcnN0KSkpCisJKytfX2ZpcnN0OworICAgICAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0OworICAgIH0KK30gLy8gbmFtZXNwYWNlIF9fZ251X2RlYnVnCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9kZWJ1Zy9saXN0IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9kZWJ1Zy9saXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YTY0ODEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlYnVnL2xpc3QKQEAgLTAsMCArMSw2NjkgQEAKKy8vIERlYnVnZ2luZyBsaXN0IGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGRlYnVnL2xpc3QKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZGVidWcgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0RFQlVHX0xJU1QKKyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfTElTVCAxCisKKyNpbmNsdWRlIDxsaXN0PgorI2luY2x1ZGUgPGRlYnVnL3NhZmVfc2VxdWVuY2UuaD4KKyNpbmNsdWRlIDxkZWJ1Zy9zYWZlX2l0ZXJhdG9yLmg+CisKK25hbWVzcGFjZSBzdGQKK3sKK25hbWVzcGFjZSBfX2RlYnVnCit7CisgIC8vLyBDbGFzcyBzdGQ6Omxpc3Qgd2l0aCBzYWZldHkvY2hlY2tpbmcvZGVidWcgaW5zdHJ1bWVudGF0aW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvY2F0b3IgPSBzdGQ6OmFsbG9jYXRvcjxfVHA+ID4KKyAgICBjbGFzcyBsaXN0CisgICAgOiBwdWJsaWMgX0dMSUJDWFhfU1REX0Q6Omxpc3Q8X1RwLCBfQWxsb2NhdG9yPiwKKyAgICAgIHB1YmxpYyBfX2dudV9kZWJ1Zzo6X1NhZmVfc2VxdWVuY2U8bGlzdDxfVHAsIF9BbGxvY2F0b3I+ID4KKyAgICB7CisgICAgICB0eXBlZGVmIF9HTElCQ1hYX1NURF9EOjpsaXN0PF9UcCwgX0FsbG9jYXRvcj4gX0Jhc2U7CisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9zZXF1ZW5jZTxsaXN0PiAgX1NhZmVfYmFzZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnJlZmVyZW5jZSAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9yZWZlcmVuY2UgICAgICAgY29uc3RfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9pdGVyYXRvcjx0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IsIGxpc3Q+CisJCQkJCQkgICAgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9pdGVyYXRvcjx0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IsIGxpc3Q+CisJCQkJCQkgICAgY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSAgICAgICAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpkaWZmZXJlbmNlX3R5cGUgICAgICAgZGlmZmVyZW5jZV90eXBlOworCisgICAgICB0eXBlZGVmIF9UcAkJCQkgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0FsbG9jYXRvcgkJCSAgICBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnBvaW50ZXIgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfcG9pbnRlciAgICAgICAgIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworCisgICAgICAvLyAyMy4yLjIuMSBjb25zdHJ1Y3QvY29weS9kZXN0cm95OgorICAgICAgZXhwbGljaXQgbGlzdChjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICA6IF9CYXNlKF9fYSkgeyB9CisKKyAgICAgIGV4cGxpY2l0IGxpc3Qoc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlID0gX1RwKCksCisJCSAgICBjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICA6IF9CYXNlKF9fbiwgX192YWx1ZSwgX19hKSB7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICBsaXN0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkgICBjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICA6IF9CYXNlKF9fZ251X2RlYnVnOjpfX2NoZWNrX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCksIF9fbGFzdCwgX19hKQorICAgICAgeyB9CisKKworICAgICAgbGlzdChjb25zdCBsaXN0JiBfX3gpCisgICAgICA6IF9CYXNlKF9feCksIF9TYWZlX2Jhc2UoKSB7IH0KKworICAgICAgbGlzdChjb25zdCBfQmFzZSYgX194KQorICAgICAgOiBfQmFzZShfX3gpLCBfU2FmZV9iYXNlKCkgeyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgbGlzdChsaXN0JiYgX194KQorICAgICAgOiBfQmFzZShzdGQ6OmZvcndhcmQ8bGlzdD4oX194KSksIF9TYWZlX2Jhc2UoKQorICAgICAgeyB0aGlzLT5fTV9zd2FwKF9feCk7IH0KKworICAgICAgbGlzdChpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCwKKyAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICAgIDogX0Jhc2UoX19sLCBfX2EpLCBfU2FmZV9iYXNlKCkgeyB9CisjZW5kaWYKKworICAgICAgfmxpc3QoKSB7IH0KKworICAgICAgbGlzdCYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBsaXN0JiBfX3gpCisgICAgICB7CisJc3RhdGljX2Nhc3Q8X0Jhc2UmPigqdGhpcykgPSBfX3g7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgbGlzdCYKKyAgICAgIG9wZXJhdG9yPShsaXN0JiYgX194KQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorCS8vIE5COiBEUiA2NzUuCisJY2xlYXIoKTsKKwlzd2FwKF9feCk7CisgICAgICAJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBsaXN0JgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCXN0YXRpY19jYXN0PF9CYXNlJj4oKnRoaXMpID0gX19sOworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBhc3NpZ24oaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7CisJX0Jhc2U6OmFzc2lnbihfX2wpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICB9CisjZW5kaWYKKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeworCSAgX19nbGliY3h4X2NoZWNrX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisJICBfQmFzZTo6YXNzaWduKF9fZmlyc3QsIF9fbGFzdCk7CisJICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCX0KKworICAgICAgdm9pZAorICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX190KQorICAgICAgeworCV9CYXNlOjphc3NpZ24oX19uLCBfX3QpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICB9CisKKyAgICAgIHVzaW5nIF9CYXNlOjpnZXRfYWxsb2NhdG9yOworCisgICAgICAvLyBpdGVyYXRvcnM6CisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorI2VuZGlmCisKKyAgICAgIC8vIDIzLjIuMi4yIGNhcGFjaXR5OgorICAgICAgdXNpbmcgX0Jhc2U6OmVtcHR5OworICAgICAgdXNpbmcgX0Jhc2U6OnNpemU7CisgICAgICB1c2luZyBfQmFzZTo6bWF4X3NpemU7CisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19zeiwgX1RwIF9fYyA9IF9UcCgpKQorICAgICAgeworCXRoaXMtPl9NX2RldGFjaF9zaW5ndWxhcigpOworCisJLy8gaWYgX19zeiA8IHNpemUoKSwgaW52YWxpZGF0ZSBhbGwgaXRlcmF0b3JzIGluIFtiZWdpbitfX3N6LCBlbmQoKSkKKwlpdGVyYXRvciBfX3ZpY3RpbSA9IGJlZ2luKCk7CisJaXRlcmF0b3IgX19lbmQgPSBlbmQoKTsKKwlmb3IgKHNpemVfdHlwZSBfX2kgPSBfX3N6OyBfX3ZpY3RpbSAhPSBfX2VuZCAmJiBfX2kgPiAwOyAtLV9faSkKKwkgICsrX192aWN0aW07CisKKwl3aGlsZSAoX192aWN0aW0gIT0gX19lbmQpCisJICB7CisJICAgIGl0ZXJhdG9yIF9fcmVhbF92aWN0aW0gPSBfX3ZpY3RpbSsrOworCSAgICBfX3JlYWxfdmljdGltLl9NX2ludmFsaWRhdGUoKTsKKwkgIH0KKworCV9fdHJ5CisJICB7CisJICAgIF9CYXNlOjpyZXNpemUoX19zeiwgX19jKTsKKwkgIH0KKwlfX2NhdGNoKC4uLikKKwkgIHsKKwkgICAgdGhpcy0+X01fcmV2YWxpZGF0ZV9zaW5ndWxhcigpOworCSAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgIH0KKyAgICAgIH0KKworICAgICAgLy8gZWxlbWVudCBhY2Nlc3M6CisgICAgICByZWZlcmVuY2UKKyAgICAgIGZyb250KCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfbm9uZW1wdHkoKTsKKwlyZXR1cm4gX0Jhc2U6OmZyb250KCk7CisgICAgICB9CisKKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgZnJvbnQoKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19ub25lbXB0eSgpOworCXJldHVybiBfQmFzZTo6ZnJvbnQoKTsKKyAgICAgIH0KKworICAgICAgcmVmZXJlbmNlCisgICAgICBiYWNrKCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfbm9uZW1wdHkoKTsKKwlyZXR1cm4gX0Jhc2U6OmJhY2soKTsKKyAgICAgIH0KKworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBiYWNrKCkgY29uc3QKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfbm9uZW1wdHkoKTsKKwlyZXR1cm4gX0Jhc2U6OmJhY2soKTsKKyAgICAgIH0KKworICAgICAgLy8gMjMuMi4yLjMgbW9kaWZpZXJzOgorICAgICAgdXNpbmcgX0Jhc2U6OnB1c2hfZnJvbnQ7CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdXNpbmcgX0Jhc2U6OmVtcGxhY2VfZnJvbnQ7CisjZW5kaWYKKworICAgICAgdm9pZAorICAgICAgcG9wX2Zyb250KCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfbm9uZW1wdHkoKTsKKwlpdGVyYXRvciBfX3ZpY3RpbSA9IGJlZ2luKCk7CisJX192aWN0aW0uX01faW52YWxpZGF0ZSgpOworCV9CYXNlOjpwb3BfZnJvbnQoKTsKKyAgICAgIH0KKworICAgICAgdXNpbmcgX0Jhc2U6OnB1c2hfYmFjazsKKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICB1c2luZyBfQmFzZTo6ZW1wbGFjZV9iYWNrOworI2VuZGlmCisKKyAgICAgIHZvaWQKKyAgICAgIHBvcF9iYWNrKCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfbm9uZW1wdHkoKTsKKwlpdGVyYXRvciBfX3ZpY3RpbSA9IGVuZCgpOworCS0tX192aWN0aW07CisJX192aWN0aW0uX01faW52YWxpZGF0ZSgpOworCV9CYXNlOjpwb3BfYmFjaygpOworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICBpdGVyYXRvcgorICAgICAgICBlbXBsYWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIF9fZ2xpYmN4eF9jaGVja19pbnNlcnQoX19wb3NpdGlvbik7CisJICByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVtcGxhY2UoX19wb3NpdGlvbi5iYXNlKCksCisJCQkJCXN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiksIHRoaXMpOworCX0KKyNlbmRpZgorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19pbnNlcnQoX19wb3NpdGlvbik7CisJcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjppbnNlcnQoX19wb3NpdGlvbi5iYXNlKCksIF9feCksIHRoaXMpOworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgX1RwJiYgX194KQorICAgICAgeyByZXR1cm4gZW1wbGFjZShfX3Bvc2l0aW9uLCBzdGQ6Om1vdmUoX194KSk7IH0KKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2luc2VydChfX3ApOworCV9CYXNlOjppbnNlcnQoX19wLCBfX2wpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9fcG9zaXRpb24pOworCV9CYXNlOjppbnNlcnQoX19wb3NpdGlvbi5iYXNlKCksIF9fbiwgX194KTsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCisJICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeworCSAgX19nbGliY3h4X2NoZWNrX2luc2VydF9yYW5nZShfX3Bvc2l0aW9uLCBfX2ZpcnN0LCBfX2xhc3QpOworCSAgX0Jhc2U6Omluc2VydChfX3Bvc2l0aW9uLmJhc2UoKSwgX19maXJzdCwgX19sYXN0KTsKKwl9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19lcmFzZShfX3Bvc2l0aW9uKTsKKwlfX3Bvc2l0aW9uLl9NX2ludmFsaWRhdGUoKTsKKwlyZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVyYXNlKF9fcG9zaXRpb24uYmFzZSgpKSwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBpdGVyYXRvciBfX2xhc3QpCisgICAgICB7CisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDE1MS4gY2FuJ3QgY3VycmVudGx5IGNsZWFyKCkgZW1wdHkgY29udGFpbmVyCisJX19nbGliY3h4X2NoZWNrX2VyYXNlX3JhbmdlKF9fcG9zaXRpb24sIF9fbGFzdCk7CisJZm9yIChpdGVyYXRvciBfX3ZpY3RpbSA9IF9fcG9zaXRpb247IF9fdmljdGltICE9IF9fbGFzdDsgKQorCSAgeworCSAgICBpdGVyYXRvciBfX29sZCA9IF9fdmljdGltOworCSAgICArK19fdmljdGltOworCSAgICBfX29sZC5fTV9pbnZhbGlkYXRlKCk7CisJICB9CisJcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplcmFzZShfX3Bvc2l0aW9uLmJhc2UoKSwgX19sYXN0LmJhc2UoKSksIHRoaXMpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKGxpc3QmIF9feCkKKyAgICAgIHsKKwlfQmFzZTo6c3dhcChfX3gpOworCXRoaXMtPl9NX3N3YXAoX194KTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKQorICAgICAgeworCV9CYXNlOjpjbGVhcigpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICB9CisKKyAgICAgIC8vIDIzLjIuMi40IGxpc3Qgb3BlcmF0aW9uczoKKyAgICAgIHZvaWQKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmJiBfX3gpCisjZWxzZQorICAgICAgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmIF9feCkKKyNlbmRpZgorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1ZFUklGWSgmX194ICE9IHRoaXMsCisJCQkgICAgICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ19zZWxmX3NwbGljZSkKKwkJCSAgICAgIC5fTV9zZXF1ZW5jZSgqdGhpcywgInRoaXMiKSk7CisJdGhpcy0+c3BsaWNlKF9fcG9zaXRpb24sIF9HTElCQ1hYX01PVkUoX194KSwgX194LmJlZ2luKCksIF9feC5lbmQoKSk7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdm9pZAorICAgICAgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmIF9feCkKKyAgICAgIHsgc3BsaWNlKF9fcG9zaXRpb24sIHN0ZDo6bW92ZShfX3gpKTsgfQorI2VuZGlmCisKKyAgICAgIHZvaWQKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmJiBfX3gsIGl0ZXJhdG9yIF9faSkKKyNlbHNlCisgICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYgX194LCBpdGVyYXRvciBfX2kpCisjZW5kaWYKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9fcG9zaXRpb24pOworCisJLy8gV2UgdXNlZCB0byBwZXJmb3JtIHRoZSBzcGxpY2VfYWxsb2MgY2hlY2s6ICBub3QgYW55bW9yZSwgcmVkdW5kYW50CisJLy8gYWZ0ZXIgaW1wbGVtZW50aW5nIHRoZSByZWxldmFudCBiaXRzIG9mIE4xNTk5LgorCisJX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9faS5fTV9kZXJlZmVyZW5jZWFibGUoKSwKKwkJCSAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX3NwbGljZV9iYWQpCisJCQkgICAgICAuX01faXRlcmF0b3IoX19pLCAiX19pIikpOworCV9HTElCQ1hYX0RFQlVHX1ZFUklGWShfX2kuX01fYXR0YWNoZWRfdG8oJl9feCksCisJCQkgICAgICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ19zcGxpY2Vfb3RoZXIpCisJCQkgICAgIC5fTV9pdGVyYXRvcihfX2ksICJfX2kiKS5fTV9zZXF1ZW5jZShfX3gsICJfX3giKSk7CisKKwkvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJLy8gMjUwLiBzcGxpY2luZyBpbnZhbGlkYXRlcyBpdGVyYXRvcnMKKwl0aGlzLT5fTV90cmFuc2Zlcl9pdGVyKF9faSk7CisJX0Jhc2U6OnNwbGljZShfX3Bvc2l0aW9uLmJhc2UoKSwgX0dMSUJDWFhfTU9WRShfX3guX01fYmFzZSgpKSwKKwkJICAgICAgX19pLmJhc2UoKSk7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdm9pZAorICAgICAgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmIF9feCwgaXRlcmF0b3IgX19pKQorICAgICAgeyBzcGxpY2UoX19wb3NpdGlvbiwgc3RkOjptb3ZlKF9feCksIF9faSk7IH0KKyNlbmRpZgorCisgICAgICB2b2lkCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiYgX194LCBpdGVyYXRvciBfX2ZpcnN0LAorCSAgICAgaXRlcmF0b3IgX19sYXN0KQorI2Vsc2UKKyAgICAgIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiBfX3gsIGl0ZXJhdG9yIF9fZmlyc3QsCisJICAgICBpdGVyYXRvciBfX2xhc3QpCisjZW5kaWYKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9fcG9zaXRpb24pOworCV9fZ2xpYmN4eF9jaGVja192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCV9HTElCQ1hYX0RFQlVHX1ZFUklGWShfX2ZpcnN0Ll9NX2F0dGFjaGVkX3RvKCZfX3gpLAorCQkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfc3BsaWNlX290aGVyKQorCQkJICAgICAgLl9NX3NlcXVlbmNlKF9feCwgIngiKQorCQkJICAgICAgLl9NX2l0ZXJhdG9yKF9fZmlyc3QsICJmaXJzdCIpKTsKKworCS8vIFdlIHVzZWQgdG8gcGVyZm9ybSB0aGUgc3BsaWNlX2FsbG9jIGNoZWNrOiAgbm90IGFueW1vcmUsIHJlZHVuZGFudAorCS8vIGFmdGVyIGltcGxlbWVudGluZyB0aGUgcmVsZXZhbnQgYml0cyBvZiBOMTU5OS4KKworCWZvciAoaXRlcmF0b3IgX190bXAgPSBfX2ZpcnN0OyBfX3RtcCAhPSBfX2xhc3Q7ICkKKwkgIHsKKwkgICAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKCZfX3ggIT0gdGhpcyB8fCBfX3RtcCAhPSBfX3Bvc2l0aW9uLAorCQkJCV9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX3NwbGljZV9vdmVybGFwKQorCQkJCSAgLl9NX2l0ZXJhdG9yKF9fdG1wLCAicG9zaXRpb24iKQorCQkJCSAgLl9NX2l0ZXJhdG9yKF9fZmlyc3QsICJmaXJzdCIpCisJCQkJICAuX01faXRlcmF0b3IoX19sYXN0LCAibGFzdCIpKTsKKwkgICAgaXRlcmF0b3IgX192aWN0aW0gPSBfX3RtcCsrOworCSAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJICAgIC8vIDI1MC4gc3BsaWNpbmcgaW52YWxpZGF0ZXMgaXRlcmF0b3JzCisJICAgIHRoaXMtPl9NX3RyYW5zZmVyX2l0ZXIoX192aWN0aW0pOworCSAgfQorCisJX0Jhc2U6OnNwbGljZShfX3Bvc2l0aW9uLmJhc2UoKSwgX0dMSUJDWFhfTU9WRShfX3guX01fYmFzZSgpKSwKKwkJICAgICAgX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCkpOworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHZvaWQKKyAgICAgIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiBfX3gsIGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsgc3BsaWNlKF9fcG9zaXRpb24sIHN0ZDo6bW92ZShfX3gpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CisjZW5kaWYKKworICAgICAgdm9pZAorICAgICAgcmVtb3ZlKGNvbnN0IF9UcCYgX192YWx1ZSkKKyAgICAgIHsKKwlmb3IgKGl0ZXJhdG9yIF9feCA9IGJlZ2luKCk7IF9feC5iYXNlKCkgIT0gX0Jhc2U6OmVuZCgpOyApCisJICB7CisJICAgIGlmICgqX194ID09IF9fdmFsdWUpCisJICAgICAgX194ID0gZXJhc2UoX194KTsKKwkgICAgZWxzZQorCSAgICAgICsrX194OworCSAgfQorICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfUHJlZGljYXRlPgorICAgICAgICB2b2lkCisgICAgICAgIHJlbW92ZV9pZihfUHJlZGljYXRlIF9fcHJlZCkKKyAgICAgICAgeworCSAgZm9yIChpdGVyYXRvciBfX3ggPSBiZWdpbigpOyBfX3guYmFzZSgpICE9IF9CYXNlOjplbmQoKTsgKQorCSAgICB7CisJICAgICAgaWYgKF9fcHJlZCgqX194KSkKKwkJX194ID0gZXJhc2UoX194KTsKKwkgICAgICBlbHNlCisJCSsrX194OworCSAgICB9CisJfQorCisgICAgICB2b2lkCisgICAgICB1bmlxdWUoKQorICAgICAgeworCWl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOworCWl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOworCWlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwkgIHJldHVybjsKKwlpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OworCXdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3QpCisJICB7CisJICAgIGlmICgqX19maXJzdCA9PSAqX19uZXh0KQorCSAgICAgIGVyYXNlKF9fbmV4dCk7CisJICAgIGVsc2UKKwkgICAgICBfX2ZpcnN0ID0gX19uZXh0OworCSAgICBfX25leHQgPSBfX2ZpcnN0OworCSAgfQorICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgorICAgICAgICB2b2lkCisgICAgICAgIHVuaXF1ZShfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCisgICAgICAgIHsKKwkgIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOworCSAgaXRlcmF0b3IgX19sYXN0ID0gZW5kKCk7CisJICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCisJICAgIHJldHVybjsKKwkgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CisJICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KQorCSAgICB7CisJICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQorCQllcmFzZShfX25leHQpOworCSAgICAgIGVsc2UKKwkJX19maXJzdCA9IF9fbmV4dDsKKwkgICAgICBfX25leHQgPSBfX2ZpcnN0OworCSAgICB9CisJfQorCisgICAgICB2b2lkCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIG1lcmdlKGxpc3QmJiBfX3gpCisjZWxzZQorICAgICAgbWVyZ2UobGlzdCYgX194KQorI2VuZGlmCisgICAgICB7CisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDMwMC4gbGlzdDo6bWVyZ2UoKSBzcGVjaWZpY2F0aW9uIGluY29tcGxldGUKKwlpZiAodGhpcyAhPSAmX194KQorCSAgeworCSAgICBfX2dsaWJjeHhfY2hlY2tfc29ydGVkKF9CYXNlOjpiZWdpbigpLCBfQmFzZTo6ZW5kKCkpOworCSAgICBfX2dsaWJjeHhfY2hlY2tfc29ydGVkKF9feC5iZWdpbigpLmJhc2UoKSwgX194LmVuZCgpLmJhc2UoKSk7CisJICAgIGZvciAoaXRlcmF0b3IgX190bXAgPSBfX3guYmVnaW4oKTsgX190bXAgIT0gX194LmVuZCgpOykKKwkgICAgICB7CisJCWl0ZXJhdG9yIF9fdmljdGltID0gX190bXArKzsKKwkJdGhpcy0+X01fdHJhbnNmZXJfaXRlcihfX3ZpY3RpbSk7CisJICAgICAgfQorCSAgICBfQmFzZTo6bWVyZ2UoX0dMSUJDWFhfTU9WRShfX3guX01fYmFzZSgpKSk7CisJICB9CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdm9pZAorICAgICAgbWVyZ2UobGlzdCYgX194KQorICAgICAgeyBtZXJnZShzdGQ6Om1vdmUoX194KSk7IH0KKyNlbmRpZgorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ29tcGFyZT4KKyAgICAgICAgdm9pZAorI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAgIG1lcmdlKGxpc3QmJiBfX3gsIF9Db21wYXJlIF9fY29tcCkKKyNlbHNlCisgICAgICAgIG1lcmdlKGxpc3QmIF9feCwgX0NvbXBhcmUgX19jb21wKQorI2VuZGlmCisgICAgICAgIHsKKwkgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkgIC8vIDMwMC4gbGlzdDo6bWVyZ2UoKSBzcGVjaWZpY2F0aW9uIGluY29tcGxldGUKKwkgIGlmICh0aGlzICE9ICZfX3gpCisJICAgIHsKKwkgICAgICBfX2dsaWJjeHhfY2hlY2tfc29ydGVkX3ByZWQoX0Jhc2U6OmJlZ2luKCksIF9CYXNlOjplbmQoKSwKKwkJCQkJICBfX2NvbXApOworCSAgICAgIF9fZ2xpYmN4eF9jaGVja19zb3J0ZWRfcHJlZChfX3guYmVnaW4oKS5iYXNlKCksIF9feC5lbmQoKS5iYXNlKCksCisJCQkJCSAgX19jb21wKTsKKwkgICAgICBmb3IgKGl0ZXJhdG9yIF9fdG1wID0gX194LmJlZ2luKCk7IF9fdG1wICE9IF9feC5lbmQoKTspCisJCXsKKwkJICBpdGVyYXRvciBfX3ZpY3RpbSA9IF9fdG1wKys7CisJCSAgdGhpcy0+X01fdHJhbnNmZXJfaXRlcihfX3ZpY3RpbSk7CisJCX0KKwkgICAgICBfQmFzZTo6bWVyZ2UoX0dMSUJDWFhfTU9WRShfX3guX01fYmFzZSgpKSwgX19jb21wKTsKKwkgICAgfQorCX0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICAgICAgdm9pZAorICAgICAgICBtZXJnZShsaXN0JiBfX3gsIF9Db21wYXJlIF9fY29tcCkKKyAgICAgICAgeyBtZXJnZShzdGQ6Om1vdmUoX194KSwgX19jb21wKTsgfQorI2VuZGlmCisKKyAgICAgIHZvaWQKKyAgICAgIHNvcnQoKSB7IF9CYXNlOjpzb3J0KCk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0cmljdFdlYWtPcmRlcmluZz4KKyAgICAgICAgdm9pZAorICAgICAgICBzb3J0KF9TdHJpY3RXZWFrT3JkZXJpbmcgX19wcmVkKSB7IF9CYXNlOjpzb3J0KF9fcHJlZCk7IH0KKworICAgICAgdXNpbmcgX0Jhc2U6OnJldmVyc2U7CisKKyAgICAgIF9CYXNlJgorICAgICAgX01fYmFzZSgpICAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIGNvbnN0IF9CYXNlJgorICAgICAgX01fYmFzZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgdm9pZAorICAgICAgX01faW52YWxpZGF0ZV9hbGwoKQorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yIF9CYXNlX2NvbnN0X2l0ZXJhdG9yOworCXR5cGVkZWYgX19nbnVfZGVidWc6Ol9Ob3RfZXF1YWxfdG88X0Jhc2VfY29uc3RfaXRlcmF0b3I+IF9Ob3RfZXF1YWw7CisJdGhpcy0+X01faW52YWxpZGF0ZV9pZihfTm90X2VxdWFsKF9NX2Jhc2UoKS5lbmQoKSkpOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICAgY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA9PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgICBjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpICE9IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICBjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpIDwgX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICAgY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA8PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgICBjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID49IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICBjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID4gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKGxpc3Q8X1RwLCBfQWxsb2M+JiBfX2xocywgbGlzdDxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0KKworfSAvLyBuYW1lc3BhY2UgX19kZWJ1ZworfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9kZWJ1Zy9tYWNyb3MuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZGVidWcvbWFjcm9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU2MDAxYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZGVidWcvbWFjcm9zLmgKQEAgLTAsMCArMSwyNDYgQEAKKy8vIERlYnVnZ2luZyBzdXBwb3J0IGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGRlYnVnL21hY3Jvcy5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGRlYnVnIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9ERUJVR19NQUNST1NfSAorI2RlZmluZSBfR0xJQkNYWF9ERUJVR19NQUNST1NfSCAxCisKKy8qKgorICogTWFjcm9zIHVzZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uIHRvIHZlcmlmeSBjZXJ0YWluCisgKiBwcm9wZXJ0aWVzLiBUaGVzZSBtYWNyb3MgbWF5IG9ubHkgYmUgdXNlZCBkaXJlY3RseSBieSB0aGUgZGVidWcKKyAqIHdyYXBwZXJzLiBOb3RlIHRoYXQgdGhlc2UgYXJlIG1hY3JvcyAoaW5zdGVhZCBvZiB0aGUgbW9yZSBvYnZpb3VzbHkKKyAqIEBhIGNvcnJlY3QgY2hvaWNlIG9mIG1ha2luZyB0aGVtIGZ1bmN0aW9ucykgYmVjYXVzZSB3ZSBuZWVkIGxpbmUgYW5kCisgKiBmaWxlIGluZm9ybWF0aW9uIGF0IHRoZSBjYWxsIHNpdGUsIHRvIG1pbmltaXplIHRoZSBkaXN0YW5jZSBiZXR3ZWVuCisgKiB0aGUgdXNlciBlcnJvciBhbmQgd2hlcmUgdGhlIGVycm9yIGlzIHJlcG9ydGVkLgorICoKKyAqLworI2RlZmluZSBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX0NvbmRpdGlvbixfRXJyb3JNZXNzYWdlKQkJICAgICAgICBcCisgIGRvIAkJCQkJCQkJCVwKKyAgewkJCQkJCQkJCVwKKyAgICBpZiAoISAoX0NvbmRpdGlvbikpCQkJCQkJCVwKKyAgICAgIF9fZ251X2RlYnVnOjpfRXJyb3JfZm9ybWF0dGVyOjpfTV9hdChfX0ZJTEVfXywgX19MSU5FX18pCSAgICAgICAgXAorCSAgLl9FcnJvck1lc3NhZ2UuX01fZXJyb3IoKTsJCQkJCVwKKyAgfSB3aGlsZSAoZmFsc2UpCisKKy8vIFZlcmlmeSB0aGF0IFtfRmlyc3QsIF9MYXN0KSBmb3JtcyBhIHZhbGlkIGl0ZXJhdG9yIHJhbmdlLgorI2RlZmluZSBfX2dsaWJjeHhfY2hlY2tfdmFsaWRfcmFuZ2UoX0ZpcnN0LF9MYXN0KQkJCVwKK19HTElCQ1hYX0RFQlVHX1ZFUklGWShfX2dudV9kZWJ1Zzo6X192YWxpZF9yYW5nZShfRmlyc3QsIF9MYXN0KSwJXAorCQkgICAgICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ192YWxpZF9yYW5nZSkJXAorCQkgICAgICAuX01faXRlcmF0b3IoX0ZpcnN0LCAjX0ZpcnN0KQkJCVwKKwkJICAgICAgLl9NX2l0ZXJhdG9yKF9MYXN0LCAjX0xhc3QpKQorCisvKiogVmVyaWZ5IHRoYXQgd2UgY2FuIGluc2VydCBpbnRvICp0aGlzIHdpdGggdGhlIGl0ZXJhdG9yIF9Qb3NpdGlvbi4KKyAqICBJbnNlcnRpb24gaW50byBhIGNvbnRhaW5lciBhdCBhIHNwZWNpZmljIHBvc2l0aW9uIHJlcXVpcmVzIHRoYXQKKyAqICB0aGUgaXRlcmF0b3IgYmUgbm9uc2luZ3VsYXIgKGkuZS4sIGVpdGhlciBkZXJlZmVyZW5jZWFibGUgb3IKKyAqICBwYXN0LXRoZS1lbmQpIGFuZCB0aGF0IGl0IHJlZmVyZW5jZSB0aGUgc2VxdWVuY2Ugd2UgYXJlIGluc2VydGluZworICogIGludG8uIE5vdGUgdGhhdCB0aGlzIG1hY3JvIGlzIG9ubHkgdmFsaWQgd2hlbiB0aGUgY29udGFpbmVyIGlzIGEKKyAqICBfU2FmZV9zZXF1ZW5jZSBhbmQgdGhlIGl0ZXJhdG9yIGlzIGEgX1NhZmVfaXRlcmF0b3IuCisqLworI2RlZmluZSBfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9Qb3NpdGlvbikJCQkJXAorX0dMSUJDWFhfREVCVUdfVkVSSUZZKCFfUG9zaXRpb24uX01fc2luZ3VsYXIoKSwJCQkJXAorCQkgICAgICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ19pbnNlcnRfc2luZ3VsYXIpIFwKKwkJICAgICAgLl9NX3NlcXVlbmNlKCp0aGlzLCAidGhpcyIpCQkJXAorCQkgICAgICAuX01faXRlcmF0b3IoX1Bvc2l0aW9uLCAjX1Bvc2l0aW9uKSk7CQlcCitfR0xJQkNYWF9ERUJVR19WRVJJRlkoX1Bvc2l0aW9uLl9NX2F0dGFjaGVkX3RvKHRoaXMpLAkJCVwKKwkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfaW5zZXJ0X2RpZmZlcmVudCkgXAorCQkgICAgICAuX01fc2VxdWVuY2UoKnRoaXMsICJ0aGlzIikJCQlcCisJCSAgICAgIC5fTV9pdGVyYXRvcihfUG9zaXRpb24sICNfUG9zaXRpb24pKQorCisvKiogVmVyaWZ5IHRoYXQgd2UgY2FuIGluc2VydCB0aGUgdmFsdWVzIGluIHRoZSBpdGVyYXRvciByYW5nZQorICogIFtfRmlyc3QsIF9MYXN0KSBpbnRvICp0aGlzIHdpdGggdGhlIGl0ZXJhdG9yIF9Qb3NpdGlvbi4gIEluc2VydGlvbgorICogIGludG8gYSBjb250YWluZXIgYXQgYSBzcGVjaWZpYyBwb3NpdGlvbiByZXF1aXJlcyB0aGF0IHRoZSBpdGVyYXRvcgorICogIGJlIG5vbnNpbmd1bGFyIChpLmUuLCBlaXRoZXIgZGVyZWZlcmVuY2VhYmxlIG9yIHBhc3QtdGhlLWVuZCksCisgKiAgdGhhdCBpdCByZWZlcmVuY2UgdGhlIHNlcXVlbmNlIHdlIGFyZSBpbnNlcnRpbmcgaW50bywgYW5kIHRoYXQgdGhlCisgKiAgaXRlcmF0b3IgcmFuZ2UgW19GaXJzdCwgTGFzdCkgaXMgYSB2YWxpZCAocG9zc2libHkgZW1wdHkpCisgKiAgcmFuZ2UuIE5vdGUgdGhhdCB0aGlzIG1hY3JvIGlzIG9ubHkgdmFsaWQgd2hlbiB0aGUgY29udGFpbmVyIGlzIGEKKyAqICBfU2FmZV9zZXF1ZW5jZSBhbmQgdGhlIGl0ZXJhdG9yIGlzIGEgX1NhZmVfaXRlcmF0b3IuCisgKgorICogIEB0b2RvIFdlIHdvdWxkIGxpa2UgdG8gYmUgYWJsZSB0byBjaGVjayBmb3Igbm9uaW50ZXJmZXJlbmNlIG9mCisgKiAgX1Bvc2l0aW9uIGFuZCB0aGUgcmFuZ2UgW19GaXJzdCwgX0xhc3QpLCBidXQgdGhhdCBjYW4ndCAoaW4KKyAqICBnZW5lcmFsKSBiZSBkb25lLgorKi8KKyNkZWZpbmUgX19nbGliY3h4X2NoZWNrX2luc2VydF9yYW5nZShfUG9zaXRpb24sX0ZpcnN0LF9MYXN0KQkJXAorX19nbGliY3h4X2NoZWNrX3ZhbGlkX3JhbmdlKF9GaXJzdCxfTGFzdCk7CQkJCVwKK19HTElCQ1hYX0RFQlVHX1ZFUklGWSghX1Bvc2l0aW9uLl9NX3Npbmd1bGFyKCksCQkJCVwKKwkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfaW5zZXJ0X3Npbmd1bGFyKSAgICBcCisgICAgICAgICAgICAgICAgICAgICAgLl9NX3NlcXVlbmNlKCp0aGlzLCAidGhpcyIpCQkJXAorCQkgICAgICAuX01faXRlcmF0b3IoX1Bvc2l0aW9uLCAjX1Bvc2l0aW9uKSk7CQlcCitfR0xJQkNYWF9ERUJVR19WRVJJRlkoX1Bvc2l0aW9uLl9NX2F0dGFjaGVkX3RvKHRoaXMpLAkJCVwKKwkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfaW5zZXJ0X2RpZmZlcmVudCkgICBcCisJCSAgICAgIC5fTV9zZXF1ZW5jZSgqdGhpcywgInRoaXMiKQkJCVwKKwkJICAgICAgLl9NX2l0ZXJhdG9yKF9Qb3NpdGlvbiwgI19Qb3NpdGlvbikpCisKKy8qKiBWZXJpZnkgdGhhdCB3ZSBjYW4gZXJhc2UgdGhlIGVsZW1lbnQgcmVmZXJlbmNlZCBieSB0aGUgaXRlcmF0b3IKKyAqIF9Qb3NpdGlvbi4gV2UgY2FuIGVyYXNlIHRoZSBlbGVtZW50IGlmIHRoZSBfUG9zaXRpb24gaXRlcmF0b3IgaXMKKyAqIGRlcmVmZXJlbmNlYWJsZSBhbmQgcmVmZXJlbmNlcyB0aGlzIHNlcXVlbmNlLgorKi8KKyNkZWZpbmUgX19nbGliY3h4X2NoZWNrX2VyYXNlKF9Qb3NpdGlvbikJCQkJXAorX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9Qb3NpdGlvbi5fTV9kZXJlZmVyZW5jZWFibGUoKSwJCQlcCisJCSAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX2VyYXNlX2JhZCkJICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgLl9NX3NlcXVlbmNlKCp0aGlzLCAidGhpcyIpCQkJXAorCQkgICAgICAuX01faXRlcmF0b3IoX1Bvc2l0aW9uLCAjX1Bvc2l0aW9uKSk7CQlcCitfR0xJQkNYWF9ERUJVR19WRVJJRlkoX1Bvc2l0aW9uLl9NX2F0dGFjaGVkX3RvKHRoaXMpLAkJCVwKKwkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfZXJhc2VfZGlmZmVyZW50KSAgICBcCisJCSAgICAgIC5fTV9zZXF1ZW5jZSgqdGhpcywgInRoaXMiKQkJCVwKKwkJICAgICAgLl9NX2l0ZXJhdG9yKF9Qb3NpdGlvbiwgI19Qb3NpdGlvbikpCisKKy8qKiBWZXJpZnkgdGhhdCB3ZSBjYW4gZXJhc2UgdGhlIGVsZW1lbnRzIGluIHRoZSBpdGVyYXRvciByYW5nZQorICogIFtfRmlyc3QsIF9MYXN0KS4gV2UgY2FuIGVyYXNlIHRoZSBlbGVtZW50cyBpZiBbX0ZpcnN0LCBfTGFzdCkgaXMgYQorICogIHZhbGlkIGl0ZXJhdG9yIHJhbmdlIHdpdGhpbiB0aGlzIHNlcXVlbmNlLgorKi8KKyNkZWZpbmUgX19nbGliY3h4X2NoZWNrX2VyYXNlX3JhbmdlKF9GaXJzdCxfTGFzdCkJCQlcCitfX2dsaWJjeHhfY2hlY2tfdmFsaWRfcmFuZ2UoX0ZpcnN0LF9MYXN0KTsJCQkJXAorX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9GaXJzdC5fTV9hdHRhY2hlZF90byh0aGlzKSwJCQlcCisJCSAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX2VyYXNlX2RpZmZlcmVudCkgICAgXAorICAgICAgICAgICAgICAgICAgICAgIC5fTV9zZXF1ZW5jZSgqdGhpcywgInRoaXMiKQkJCVwKKwkJICAgICAgLl9NX2l0ZXJhdG9yKF9GaXJzdCwgI19GaXJzdCkJCQlcCisJCSAgICAgIC5fTV9pdGVyYXRvcihfTGFzdCwgI19MYXN0KSkKKworLy8gVmVyaWZ5IHRoYXQgdGhlIHN1YnNjcmlwdCBfTiBpcyBsZXNzIHRoYW4gdGhlIGNvbnRhaW5lcidzIHNpemUuCisjZGVmaW5lIF9fZ2xpYmN4eF9jaGVja19zdWJzY3JpcHQoX04pCQkJCQlcCitfR0xJQkNYWF9ERUJVR19WRVJJRlkoX04gPCB0aGlzLT5zaXplKCksCQkJCVwKKwkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfc3Vic2NyaXB0X29vYikgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgLl9NX3NlcXVlbmNlKCp0aGlzLCAidGhpcyIpCQkJXAorCQkgICAgICAuX01faW50ZWdlcihfTiwgI19OKQkJCQlcCisJCSAgICAgIC5fTV9pbnRlZ2VyKHRoaXMtPnNpemUoKSwgInNpemUiKSkKKworLy8gVmVyaWZ5IHRoYXQgdGhlIGNvbnRhaW5lciBpcyBub25lbXB0eQorI2RlZmluZSBfX2dsaWJjeHhfY2hlY2tfbm9uZW1wdHkoKQkJCQkJXAorX0dMSUJDWFhfREVCVUdfVkVSSUZZKCEgdGhpcy0+ZW1wdHkoKSwJCQkJCVwKKwkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfZW1wdHkpCSAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIC5fTV9zZXF1ZW5jZSgqdGhpcywgInRoaXMiKSkKKworLy8gVmVyaWZ5IHRoYXQgdGhlIGl0ZXJhdG9yIHJhbmdlIFtfRmlyc3QsIF9MYXN0KSBpcyBzb3J0ZWQKKyNkZWZpbmUgX19nbGliY3h4X2NoZWNrX3NvcnRlZChfRmlyc3QsX0xhc3QpCQkJCVwKK19fZ2xpYmN4eF9jaGVja192YWxpZF9yYW5nZShfRmlyc3QsX0xhc3QpOwkJCQlcCitfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19nbnVfZGVidWc6Ol9fY2hlY2tfc29ydGVkKF9GaXJzdCwgX0xhc3QpLAlcCisJCSAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX3Vuc29ydGVkKQkgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAuX01faXRlcmF0b3IoX0ZpcnN0LCAjX0ZpcnN0KQkJCVwKKwkJICAgICAgLl9NX2l0ZXJhdG9yKF9MYXN0LCAjX0xhc3QpKQorCisvKiogVmVyaWZ5IHRoYXQgdGhlIGl0ZXJhdG9yIHJhbmdlIFtfRmlyc3QsIF9MYXN0KSBpcyBzb3J0ZWQgYnkgdGhlCisgICAgcHJlZGljYXRlIF9QcmVkLiAqLworI2RlZmluZSBfX2dsaWJjeHhfY2hlY2tfc29ydGVkX3ByZWQoX0ZpcnN0LF9MYXN0LF9QcmVkKQkJCVwKK19fZ2xpYmN4eF9jaGVja192YWxpZF9yYW5nZShfRmlyc3QsX0xhc3QpOwkJCQlcCitfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19nbnVfZGVidWc6Ol9fY2hlY2tfc29ydGVkKF9GaXJzdCwgX0xhc3QsIF9QcmVkKSwgXAorCQkgICAgICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ191bnNvcnRlZF9wcmVkKSAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAuX01faXRlcmF0b3IoX0ZpcnN0LCAjX0ZpcnN0KQkJCVwKKwkJICAgICAgLl9NX2l0ZXJhdG9yKF9MYXN0LCAjX0xhc3QpCQkJXAorCQkgICAgICAuX01fc3RyaW5nKCNfUHJlZCkpCisKKy8vIFNwZWNpYWwgdmFyaWFudCBmb3Igc3RkOjptZXJnZSwgc3RkOjppbmNsdWRlcywgc3RkOjpzZXRfKgorI2RlZmluZSBfX2dsaWJjeHhfY2hlY2tfc29ydGVkX3NldChfRmlyc3QxLF9MYXN0MSxfRmlyc3QyKQkJXAorX19nbGliY3h4X2NoZWNrX3ZhbGlkX3JhbmdlKF9GaXJzdDEsX0xhc3QxKTsJCQkJXAorX0dMSUJDWFhfREVCVUdfVkVSSUZZKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2dudV9kZWJ1Zzo6X19jaGVja19zb3J0ZWRfc2V0KF9GaXJzdDEsIF9MYXN0MSwgX0ZpcnN0MiksCQlcCisgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX3Vuc29ydGVkKQkJCQlcCisgIC5fTV9pdGVyYXRvcihfRmlyc3QxLCAjX0ZpcnN0MSkJCQkJCVwKKyAgLl9NX2l0ZXJhdG9yKF9MYXN0MSwgI19MYXN0MSkpCisKKy8vIExpa2V3aXNlIHdpdGggYSBfUHJlZC4KKyNkZWZpbmUgX19nbGliY3h4X2NoZWNrX3NvcnRlZF9zZXRfcHJlZChfRmlyc3QxLF9MYXN0MSxfRmlyc3QyLF9QcmVkKQlcCitfX2dsaWJjeHhfY2hlY2tfdmFsaWRfcmFuZ2UoX0ZpcnN0MSxfTGFzdDEpOyAgICAgICAgCQkJXAorX0dMSUJDWFhfREVCVUdfVkVSSUZZKAkJCQkJCQlcCisgIF9fZ251X2RlYnVnOjpfX2NoZWNrX3NvcnRlZF9zZXQoX0ZpcnN0MSwgX0xhc3QxLCBfRmlyc3QyLCBfUHJlZCksCVwKKyAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfdW5zb3J0ZWRfcHJlZCkJCQkJXAorICAuX01faXRlcmF0b3IoX0ZpcnN0MSwgI19GaXJzdDEpCQkJCQlcCisgIC5fTV9pdGVyYXRvcihfTGFzdDEsICNfTGFzdDEpCQkJCQkJXAorICAuX01fc3RyaW5nKCNfUHJlZCkpCisKKy8qKiBWZXJpZnkgdGhhdCB0aGUgaXRlcmF0b3IgcmFuZ2UgW19GaXJzdCwgX0xhc3QpIGlzIHBhcnRpdGlvbmVkCisgICAgdy5yLnQuIHRoZSB2YWx1ZSBfVmFsdWUuICovCisjZGVmaW5lIF9fZ2xpYmN4eF9jaGVja19wYXJ0aXRpb25lZF9sb3dlcihfRmlyc3QsX0xhc3QsX1ZhbHVlKQkJXAorX19nbGliY3h4X2NoZWNrX3ZhbGlkX3JhbmdlKF9GaXJzdCxfTGFzdCk7CQkJCVwKK19HTElCQ1hYX0RFQlVHX1ZFUklGWShfX2dudV9kZWJ1Zzo6X19jaGVja19wYXJ0aXRpb25lZF9sb3dlcihfRmlyc3QsIF9MYXN0LCBcCisJCQkJCQkJICAgIF9WYWx1ZSksCVwKKwkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfdW5wYXJ0aXRpb25lZCkgICAgICBcCisJCSAgICAgIC5fTV9pdGVyYXRvcihfRmlyc3QsICNfRmlyc3QpCQkJXAorCQkgICAgICAuX01faXRlcmF0b3IoX0xhc3QsICNfTGFzdCkJCQlcCisJCSAgICAgIC5fTV9zdHJpbmcoI19WYWx1ZSkpCisKKyNkZWZpbmUgX19nbGliY3h4X2NoZWNrX3BhcnRpdGlvbmVkX3VwcGVyKF9GaXJzdCxfTGFzdCxfVmFsdWUpCQlcCitfX2dsaWJjeHhfY2hlY2tfdmFsaWRfcmFuZ2UoX0ZpcnN0LF9MYXN0KTsJCQkJXAorX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9fZ251X2RlYnVnOjpfX2NoZWNrX3BhcnRpdGlvbmVkX3VwcGVyKF9GaXJzdCwgX0xhc3QsIFwKKwkJCQkJCQkgICAgX1ZhbHVlKSwJXAorCQkgICAgICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ191bnBhcnRpdGlvbmVkKSAgICAgIFwKKwkJICAgICAgLl9NX2l0ZXJhdG9yKF9GaXJzdCwgI19GaXJzdCkJCQlcCisJCSAgICAgIC5fTV9pdGVyYXRvcihfTGFzdCwgI19MYXN0KQkJCVwKKwkJICAgICAgLl9NX3N0cmluZygjX1ZhbHVlKSkKKworLyoqIFZlcmlmeSB0aGF0IHRoZSBpdGVyYXRvciByYW5nZSBbX0ZpcnN0LCBfTGFzdCkgaXMgcGFydGl0aW9uZWQKKyAgICB3LnIudC4gdGhlIHZhbHVlIF9WYWx1ZSBhbmQgcHJlZGljYXRlIF9QcmVkLiAqLworI2RlZmluZSBfX2dsaWJjeHhfY2hlY2tfcGFydGl0aW9uZWRfbG93ZXJfcHJlZChfRmlyc3QsX0xhc3QsX1ZhbHVlLF9QcmVkKSBcCitfX2dsaWJjeHhfY2hlY2tfdmFsaWRfcmFuZ2UoX0ZpcnN0LF9MYXN0KTsJCQkJXAorX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9fZ251X2RlYnVnOjpfX2NoZWNrX3BhcnRpdGlvbmVkX2xvd2VyKF9GaXJzdCwgX0xhc3QsIFwKKwkJCQkJCQkgX1ZhbHVlLCBfUHJlZCksIFwKKwkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfdW5wYXJ0aXRpb25lZF9wcmVkKSBcCisJCSAgICAgIC5fTV9pdGVyYXRvcihfRmlyc3QsICNfRmlyc3QpCQkJXAorCQkgICAgICAuX01faXRlcmF0b3IoX0xhc3QsICNfTGFzdCkJCQlcCisJCSAgICAgIC5fTV9zdHJpbmcoI19QcmVkKQkJCQlcCisgICAgICAgICAgICAgICAgICAgICAgLl9NX3N0cmluZygjX1ZhbHVlKSkKKworLyoqIFZlcmlmeSB0aGF0IHRoZSBpdGVyYXRvciByYW5nZSBbX0ZpcnN0LCBfTGFzdCkgaXMgcGFydGl0aW9uZWQKKyAgICB3LnIudC4gdGhlIHZhbHVlIF9WYWx1ZSBhbmQgcHJlZGljYXRlIF9QcmVkLiAqLworI2RlZmluZSBfX2dsaWJjeHhfY2hlY2tfcGFydGl0aW9uZWRfdXBwZXJfcHJlZChfRmlyc3QsX0xhc3QsX1ZhbHVlLF9QcmVkKSBcCitfX2dsaWJjeHhfY2hlY2tfdmFsaWRfcmFuZ2UoX0ZpcnN0LF9MYXN0KTsJCQkJXAorX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9fZ251X2RlYnVnOjpfX2NoZWNrX3BhcnRpdGlvbmVkX3VwcGVyKF9GaXJzdCwgX0xhc3QsIFwKKwkJCQkJCQkgX1ZhbHVlLCBfUHJlZCksIFwKKwkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfdW5wYXJ0aXRpb25lZF9wcmVkKSBcCisJCSAgICAgIC5fTV9pdGVyYXRvcihfRmlyc3QsICNfRmlyc3QpCQkJXAorCQkgICAgICAuX01faXRlcmF0b3IoX0xhc3QsICNfTGFzdCkJCQlcCisJCSAgICAgIC5fTV9zdHJpbmcoI19QcmVkKQkJCQlcCisgICAgICAgICAgICAgICAgICAgICAgLl9NX3N0cmluZygjX1ZhbHVlKSkKKworLy8gVmVyaWZ5IHRoYXQgdGhlIGl0ZXJhdG9yIHJhbmdlIFtfRmlyc3QsIF9MYXN0KSBpcyBhIGhlYXAKKyNkZWZpbmUgX19nbGliY3h4X2NoZWNrX2hlYXAoX0ZpcnN0LF9MYXN0KQkJCQlcCitfX2dsaWJjeHhfY2hlY2tfdmFsaWRfcmFuZ2UoX0ZpcnN0LF9MYXN0KTsJCQkJXAorX0dMSUJDWFhfREVCVUdfVkVSSUZZKHN0ZDo6X19pc19oZWFwKF9GaXJzdCwgX0xhc3QpLAkJICAgICAgICBcCisJCSAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX25vdF9oZWFwKQkgICAgICAgIFwKKwkJICAgICAgLl9NX2l0ZXJhdG9yKF9GaXJzdCwgI19GaXJzdCkJCQlcCisJCSAgICAgIC5fTV9pdGVyYXRvcihfTGFzdCwgI19MYXN0KSkKKworLyoqIFZlcmlmeSB0aGF0IHRoZSBpdGVyYXRvciByYW5nZSBbX0ZpcnN0LCBfTGFzdCkgaXMgYSBoZWFwCisgICAgdy5yLnQuIHRoZSBwcmVkaWNhdGUgX1ByZWQuICovCisjZGVmaW5lIF9fZ2xpYmN4eF9jaGVja19oZWFwX3ByZWQoX0ZpcnN0LF9MYXN0LF9QcmVkKQkJCVwKK19fZ2xpYmN4eF9jaGVja192YWxpZF9yYW5nZShfRmlyc3QsX0xhc3QpOwkJCQlcCitfR0xJQkNYWF9ERUJVR19WRVJJRlkoc3RkOjpfX2lzX2hlYXAoX0ZpcnN0LCBfTGFzdCwgX1ByZWQpLAkJXAorCQkgICAgICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ19ub3RfaGVhcF9wcmVkKSAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAuX01faXRlcmF0b3IoX0ZpcnN0LCAjX0ZpcnN0KQkJCVwKKwkJICAgICAgLl9NX2l0ZXJhdG9yKF9MYXN0LCAjX0xhc3QpCQkJXAorCQkgICAgICAuX01fc3RyaW5nKCNfUHJlZCkpCisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVR19QRURBTlRJQworIyAgZGVmaW5lIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX1N0cmluZykgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9TdHJpbmcgIT0gMCkKKyMgIGRlZmluZSBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nX2xlbihfU3RyaW5nLF9MZW4pIFwKKyAgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX1N0cmluZyAhPSAwIHx8IF9MZW4gPT0gMCkKKyNlbHNlCisjICBkZWZpbmUgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfU3RyaW5nKQorIyAgZGVmaW5lIF9fZ2xpYmN4eF9jaGVja19zdHJpbmdfbGVuKF9TdHJpbmcsX0xlbikKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZGVidWcvbWFwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9kZWJ1Zy9tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQxNmI3MQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZGVidWcvbWFwCkBAIC0wLDAgKzEsMzcgQEAKKy8vIERlYnVnZ2luZyBtYXAvbXVsdGltYXAgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZGVidWcvbWFwCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGRlYnVnIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9ERUJVR19NQVAKKyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfTUFQIDEKKworI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxkZWJ1Zy9tYXAuaD4KKyNpbmNsdWRlIDxkZWJ1Zy9tdWx0aW1hcC5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZGVidWcvbWFwLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlYnVnL21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZjVlYTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlYnVnL21hcC5oCkBAIC0wLDAgKzEsNDE3IEBACisvLyBEZWJ1Z2dpbmcgbWFwIGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGRlYnVnL21hcC5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGRlYnVnIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9ERUJVR19NQVBfSAorI2RlZmluZSBfR0xJQkNYWF9ERUJVR19NQVBfSCAxCisKKyNpbmNsdWRlIDxkZWJ1Zy9zYWZlX3NlcXVlbmNlLmg+CisjaW5jbHVkZSA8ZGVidWcvc2FmZV9pdGVyYXRvci5oPgorI2luY2x1ZGUgPHV0aWxpdHk+CisKK25hbWVzcGFjZSBzdGQKK3sKK25hbWVzcGFjZSBfX2RlYnVnCit7CisgIC8vLyBDbGFzcyBzdGQ6Om1hcCB3aXRoIHNhZmV0eS9jaGVja2luZy9kZWJ1ZyBpbnN0cnVtZW50YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUgPSBzdGQ6Omxlc3M8X0tleT4sCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciA9IHN0ZDo6YWxsb2NhdG9yPHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4gPgorICAgIGNsYXNzIG1hcAorICAgIDogcHVibGljIF9HTElCQ1hYX1NURF9EOjptYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4sCisgICAgICBwdWJsaWMgX19nbnVfZGVidWc6Ol9TYWZlX3NlcXVlbmNlPG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiA+CisgICAgeworICAgICAgdHlwZWRlZiBfR0xJQkNYWF9TVERfRDo6bWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+IF9CYXNlOworICAgICAgdHlwZWRlZiBfX2dudV9kZWJ1Zzo6X1NhZmVfc2VxdWVuY2U8bWFwPiBfU2FmZV9iYXNlOworCisgICAgcHVibGljOgorICAgICAgLy8gdHlwZXM6CisgICAgICB0eXBlZGVmIF9LZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X3R5cGU7CisgICAgICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGVkX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0NvbXBhcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfY29tcGFyZTsKKyAgICAgIHR5cGVkZWYgX0FsbG9jYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnJlZmVyZW5jZSAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9yZWZlcmVuY2UgICAgICAgY29uc3RfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9pdGVyYXRvcjx0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IsIG1hcD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX2l0ZXJhdG9yPHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciwgbWFwPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6ZGlmZmVyZW5jZV90eXBlICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnBvaW50ZXIgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfcG9pbnRlciAgICAgICAgIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworCisgICAgICB1c2luZyBfQmFzZTo6dmFsdWVfY29tcGFyZTsKKworICAgICAgLy8gMjMuMy4xLjEgY29uc3RydWN0L2NvcHkvZGVzdHJveToKKyAgICAgIGV4cGxpY2l0IG1hcChjb25zdCBfQ29tcGFyZSYgX19jb21wID0gX0NvbXBhcmUoKSwKKwkJICAgY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorICAgICAgOiBfQmFzZShfX2NvbXAsIF9fYSkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBtYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCSAgICBjb25zdCBfQ29tcGFyZSYgX19jb21wID0gX0NvbXBhcmUoKSwKKwkgICAgY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorCTogX0Jhc2UoX19nbnVfZGVidWc6Ol9fY2hlY2tfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KSwgX19sYXN0LAorCQlfX2NvbXAsIF9fYSksIF9TYWZlX2Jhc2UoKSB7IH0KKworICAgICAgbWFwKGNvbnN0IG1hcCYgX194KQorICAgICAgOiBfQmFzZShfX3gpLCBfU2FmZV9iYXNlKCkgeyB9CisKKyAgICAgIG1hcChjb25zdCBfQmFzZSYgX194KQorICAgICAgOiBfQmFzZShfX3gpLCBfU2FmZV9iYXNlKCkgeyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgbWFwKG1hcCYmIF9feCkKKyAgICAgIDogX0Jhc2Uoc3RkOjpmb3J3YXJkPG1hcD4oX194KSksIF9TYWZlX2Jhc2UoKQorICAgICAgeyB0aGlzLT5fTV9zd2FwKF9feCk7IH0KKworICAgICAgbWFwKGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sLAorCSAgY29uc3QgX0NvbXBhcmUmIF9fYyA9IF9Db21wYXJlKCksCisJICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19sLCBfX2MsIF9fYSksIF9TYWZlX2Jhc2UoKSB7IH0KKyNlbmRpZgorCisgICAgICB+bWFwKCkgeyB9CisKKyAgICAgIG1hcCYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBtYXAmIF9feCkKKyAgICAgIHsKKwkqc3RhdGljX2Nhc3Q8X0Jhc2UqPih0aGlzKSA9IF9feDsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBtYXAmCisgICAgICBvcGVyYXRvcj0obWFwJiYgX194KQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorCS8vIE5COiBEUiA2NzUuCisJY2xlYXIoKTsKKwlzd2FwKF9feCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBtYXAmCisgICAgICBvcGVyYXRvcj0oaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7CisJdGhpcy0+Y2xlYXIoKTsKKwl0aGlzLT5pbnNlcnQoX19sKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisjZW5kaWYKKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMTMzLiBtYXAgbWlzc2luZyBnZXRfYWxsb2NhdG9yKCkKKyAgICAgIHVzaW5nIF9CYXNlOjpnZXRfYWxsb2NhdG9yOworCisgICAgICAvLyBpdGVyYXRvcnM6CisgICAgICBpdGVyYXRvciAKKyAgICAgIGJlZ2luKCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjplbmQoKSwgdGhpcyk7IH0KKworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjcmJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKyNlbmRpZgorCisgICAgICAvLyBjYXBhY2l0eToKKyAgICAgIHVzaW5nIF9CYXNlOjplbXB0eTsKKyAgICAgIHVzaW5nIF9CYXNlOjpzaXplOworICAgICAgdXNpbmcgX0Jhc2U6Om1heF9zaXplOworCisgICAgICAvLyAyMy4zLjEuMiBlbGVtZW50IGFjY2VzczoKKyAgICAgIHVzaW5nIF9CYXNlOjpvcGVyYXRvcltdOworCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUiA0NjQuIFN1Z2dlc3Rpb24gZm9yIG5ldyBtZW1iZXIgZnVuY3Rpb25zIGluIHN0YW5kYXJkIGNvbnRhaW5lcnMuCisgICAgICB1c2luZyBfQmFzZTo6YXQ7CisKKyAgICAgIC8vIG1vZGlmaWVyczoKKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgX0Jhc2VfaXRlcmF0b3I7CisJc3RkOjpwYWlyPF9CYXNlX2l0ZXJhdG9yLCBib29sPiBfX3JlcyA9IF9CYXNlOjppbnNlcnQoX194KTsKKwlyZXR1cm4gc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPihpdGVyYXRvcihfX3Jlcy5maXJzdCwgdGhpcyksCisJCQkJCSBfX3Jlcy5zZWNvbmQpOworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19saXN0KQorICAgICAgeyBfQmFzZTo6aW5zZXJ0KF9fbGlzdCk7IH0KKyNlbmRpZgorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9fcG9zaXRpb24pOworCXJldHVybiBpdGVyYXRvcihfQmFzZTo6aW5zZXJ0KF9fcG9zaXRpb24uYmFzZSgpLCBfX3gpLCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeworCSAgX19nbGliY3h4X2NoZWNrX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisJICBfQmFzZTo6aW5zZXJ0KF9fZmlyc3QsIF9fbGFzdCk7CisJfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19lcmFzZShfX3Bvc2l0aW9uKTsKKwlfX3Bvc2l0aW9uLl9NX2ludmFsaWRhdGUoKTsKKwlyZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVyYXNlKF9fcG9zaXRpb24uYmFzZSgpKSwgdGhpcyk7CisgICAgICB9CisjZWxzZQorICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfZXJhc2UoX19wb3NpdGlvbik7CisJX19wb3NpdGlvbi5fTV9pbnZhbGlkYXRlKCk7CisJX0Jhc2U6OmVyYXNlKF9fcG9zaXRpb24uYmFzZSgpKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7CisJaXRlcmF0b3IgX192aWN0aW0gPSBmaW5kKF9feCk7CisJaWYgKF9fdmljdGltID09IGVuZCgpKQorCSAgcmV0dXJuIDA7CisJZWxzZQorCXsKKwkgIF9fdmljdGltLl9NX2ludmFsaWRhdGUoKTsKKwkgIF9CYXNlOjplcmFzZShfX3ZpY3RpbS5iYXNlKCkpOworCSAgcmV0dXJuIDE7CisJfQorICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCisgICAgICB7CisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDE1MS4gY2FuJ3QgY3VycmVudGx5IGNsZWFyKCkgZW1wdHkgY29udGFpbmVyCisJX19nbGliY3h4X2NoZWNrX2VyYXNlX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisJd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQorCSAgdGhpcy0+ZXJhc2UoX19maXJzdCsrKTsKKwlyZXR1cm4gX19sYXN0OworICAgICAgfQorI2Vsc2UKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwkvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJLy8gMTUxLiBjYW4ndCBjdXJyZW50bHkgY2xlYXIoKSBlbXB0eSBjb250YWluZXIKKwlfX2dsaWJjeHhfY2hlY2tfZXJhc2VfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKwl3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCisJICB0aGlzLT5lcmFzZShfX2ZpcnN0KyspOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAobWFwJiBfX3gpCisgICAgICB7CisJX0Jhc2U6OnN3YXAoX194KTsKKwl0aGlzLT5fTV9zd2FwKF9feCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCkKKyAgICAgIHsgdGhpcy0+ZXJhc2UoYmVnaW4oKSwgZW5kKCkpOyB9CisKKyAgICAgIC8vIG9ic2VydmVyczoKKyAgICAgIHVzaW5nIF9CYXNlOjprZXlfY29tcDsKKyAgICAgIHVzaW5nIF9CYXNlOjp2YWx1ZV9jb21wOworCisgICAgICAvLyAyMy4zLjEuMyBtYXAgb3BlcmF0aW9uczoKKyAgICAgIGl0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZmluZChfX3gpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmZpbmQoX194KSwgdGhpcyk7IH0KKworICAgICAgdXNpbmcgX0Jhc2U6OmNvdW50OworCisgICAgICBpdGVyYXRvcgorICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpsb3dlcl9ib3VuZChfX3gpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpsb3dlcl9ib3VuZChfX3gpLCB0aGlzKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjp1cHBlcl9ib3VuZChfX3gpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjp1cHBlcl9ib3VuZChfX3gpLCB0aGlzKTsgfQorCisgICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIF9CYXNlX2l0ZXJhdG9yOworCXN0ZDo6cGFpcjxfQmFzZV9pdGVyYXRvciwgX0Jhc2VfaXRlcmF0b3I+IF9fcmVzID0KKwlfQmFzZTo6ZXF1YWxfcmFuZ2UoX194KTsKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoaXRlcmF0b3IoX19yZXMuZmlyc3QsIHRoaXMpLAorCQkJICAgICAgaXRlcmF0b3IoX19yZXMuc2Vjb25kLCB0aGlzKSk7CisgICAgICB9CisKKyAgICAgIHN0ZDo6cGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IgX0Jhc2VfY29uc3RfaXRlcmF0b3I7CisJc3RkOjpwYWlyPF9CYXNlX2NvbnN0X2l0ZXJhdG9yLCBfQmFzZV9jb25zdF9pdGVyYXRvcj4gX19yZXMgPQorCV9CYXNlOjplcXVhbF9yYW5nZShfX3gpOworCXJldHVybiBzdGQ6Om1ha2VfcGFpcihjb25zdF9pdGVyYXRvcihfX3Jlcy5maXJzdCwgdGhpcyksCisJCQkgICAgICBjb25zdF9pdGVyYXRvcihfX3Jlcy5zZWNvbmQsIHRoaXMpKTsKKyAgICAgIH0KKworICAgICAgX0Jhc2UmIAorICAgICAgX01fYmFzZSgpIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIGNvbnN0IF9CYXNlJgorICAgICAgX01fYmFzZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgdm9pZAorICAgICAgX01faW52YWxpZGF0ZV9hbGwoKQorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yIF9CYXNlX2NvbnN0X2l0ZXJhdG9yOworCXR5cGVkZWYgX19nbnVfZGVidWc6Ol9Ob3RfZXF1YWxfdG88X0Jhc2VfY29uc3RfaXRlcmF0b3I+IF9Ob3RfZXF1YWw7CisJdGhpcy0+X01faW52YWxpZGF0ZV9pZihfTm90X2VxdWFsKF9NX2Jhc2UoKS5lbmQoKSkpOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLAorCSAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA9PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpICE9IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpIDwgX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLAorCSAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA8PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID49IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID4gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLAorCSAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSBtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0KKworfSAvLyBuYW1lc3BhY2UgX19kZWJ1ZworfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9kZWJ1Zy9tdWx0aW1hcC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9kZWJ1Zy9tdWx0aW1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYTU0MjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlYnVnL211bHRpbWFwLmgKQEAgLTAsMCArMSw0MDUgQEAKKy8vIERlYnVnZ2luZyBtdWx0aW1hcCBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBkZWJ1Zy9tdWx0aW1hcC5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGRlYnVnIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9ERUJVR19NVUxUSU1BUF9ICisjZGVmaW5lIF9HTElCQ1hYX0RFQlVHX01VTFRJTUFQX0ggMQorCisjaW5jbHVkZSA8ZGVidWcvc2FmZV9zZXF1ZW5jZS5oPgorI2luY2x1ZGUgPGRlYnVnL3NhZmVfaXRlcmF0b3IuaD4KKyNpbmNsdWRlIDx1dGlsaXR5PgorCituYW1lc3BhY2Ugc3RkCit7CituYW1lc3BhY2UgX19kZWJ1ZworeworICAvLy8gQ2xhc3Mgc3RkOjptdWx0aW1hcCB3aXRoIHNhZmV0eS9jaGVja2luZy9kZWJ1ZyBpbnN0cnVtZW50YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUgPSBzdGQ6Omxlc3M8X0tleT4sCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciA9IHN0ZDo6YWxsb2NhdG9yPHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4gPgorICAgIGNsYXNzIG11bHRpbWFwCisgICAgOiBwdWJsaWMgX0dMSUJDWFhfU1REX0Q6Om11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+LAorICAgICAgcHVibGljIF9fZ251X2RlYnVnOjpfU2FmZV9zZXF1ZW5jZTxtdWx0aW1hcDxfS2V5LCBfVHAsCisJCQkJCQkgIF9Db21wYXJlLCBfQWxsb2NhdG9yPiA+CisgICAgeworICAgICAgdHlwZWRlZiBfR0xJQkNYWF9TVERfRDo6bXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4gX0Jhc2U7CisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9zZXF1ZW5jZTxtdWx0aW1hcD4gX1NhZmVfYmFzZTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vIHR5cGVzOgorICAgICAgdHlwZWRlZiBfS2V5CQkJCSAgICAga2V5X3R5cGU7CisgICAgICB0eXBlZGVmIF9UcAkJCQkgICAgIG1hcHBlZF90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBfQ29tcGFyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfY29tcGFyZTsKKyAgICAgIHR5cGVkZWYgX0FsbG9jYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpyZWZlcmVuY2UgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3JlZmVyZW5jZSAgICAgICAgY29uc3RfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9pdGVyYXRvcjx0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IsIG11bHRpbWFwPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX2l0ZXJhdG9yPHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aW1hcD4gY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSAgICAgICAgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6ZGlmZmVyZW5jZV90eXBlICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpwb2ludGVyICAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9wb2ludGVyICAgICAgICAgIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gICAgICAgIHJldmVyc2VfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CisKKyAgICAgIHVzaW5nIF9CYXNlOjp2YWx1ZV9jb21wYXJlOworCisgICAgICAvLyAyMy4zLjEuMSBjb25zdHJ1Y3QvY29weS9kZXN0cm95OgorICAgICAgZXhwbGljaXQgbXVsdGltYXAoY29uc3QgX0NvbXBhcmUmIF9fY29tcCA9IF9Db21wYXJlKCksCisJCQljb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICA6IF9CYXNlKF9fY29tcCwgX19hKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICBtdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICAgICAgIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAgPSBfQ29tcGFyZSgpLAorCSAgICAgICBjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICA6IF9CYXNlKF9fZ251X2RlYnVnOjpfX2NoZWNrX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCksIF9fbGFzdCwKKwkgICAgICBfX2NvbXAsIF9fYSkgeyB9CisKKyAgICAgIG11bHRpbWFwKGNvbnN0IG11bHRpbWFwJiBfX3gpCisgICAgICA6IF9CYXNlKF9feCksIF9TYWZlX2Jhc2UoKSB7IH0KKworICAgICAgbXVsdGltYXAoY29uc3QgX0Jhc2UmIF9feCkKKyAgICAgIDogX0Jhc2UoX194KSwgX1NhZmVfYmFzZSgpIHsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIG11bHRpbWFwKG11bHRpbWFwJiYgX194KQorICAgICAgOiBfQmFzZShzdGQ6OmZvcndhcmQ8bXVsdGltYXA+KF9feCkpLCBfU2FmZV9iYXNlKCkKKyAgICAgIHsgdGhpcy0+X01fc3dhcChfX3gpOyB9CisKKyAgICAgIG11bHRpbWFwKGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sLAorCSAgICAgICBjb25zdCBfQ29tcGFyZSYgX19jID0gX0NvbXBhcmUoKSwKKwkgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fbCwgX19jLCBfX2EpLCBfU2FmZV9iYXNlKCkgeyB9CisjZW5kaWYKKworICAgICAgfm11bHRpbWFwKCkgeyB9CisKKyAgICAgIG11bHRpbWFwJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IG11bHRpbWFwJiBfX3gpCisgICAgICB7CisJKnN0YXRpY19jYXN0PF9CYXNlKj4odGhpcykgPSBfX3g7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgbXVsdGltYXAmCisgICAgICBvcGVyYXRvcj0obXVsdGltYXAmJiBfX3gpCisgICAgICB7CisJLy8gTkI6IERSIDEyMDQuCisJLy8gTkI6IERSIDY3NS4KKwljbGVhcigpOworCXN3YXAoX194KTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIG11bHRpbWFwJgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+aW5zZXJ0KF9fbCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIHVzaW5nIF9CYXNlOjpnZXRfYWxsb2NhdG9yOworCisgICAgICAvLyBpdGVyYXRvcnM6CisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorI2VuZGlmCisKKyAgICAgIC8vIGNhcGFjaXR5OgorICAgICAgdXNpbmcgX0Jhc2U6OmVtcHR5OworICAgICAgdXNpbmcgX0Jhc2U6OnNpemU7CisgICAgICB1c2luZyBfQmFzZTo6bWF4X3NpemU7CisKKyAgICAgIC8vIG1vZGlmaWVyczoKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6Omluc2VydChfX3gpLCB0aGlzKTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19saXN0KQorICAgICAgeyBfQmFzZTo6aW5zZXJ0KF9fbGlzdCk7IH0KKyNlbmRpZgorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9fcG9zaXRpb24pOworCXJldHVybiBpdGVyYXRvcihfQmFzZTo6aW5zZXJ0KF9fcG9zaXRpb24uYmFzZSgpLCBfX3gpLCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeworCSAgX19nbGliY3h4X2NoZWNrX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisJICBfQmFzZTo6aW5zZXJ0KF9fZmlyc3QsIF9fbGFzdCk7CisJfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19lcmFzZShfX3Bvc2l0aW9uKTsKKwlfX3Bvc2l0aW9uLl9NX2ludmFsaWRhdGUoKTsKKwlyZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVyYXNlKF9fcG9zaXRpb24uYmFzZSgpKSwgdGhpcyk7CisgICAgICB9CisjZWxzZQorICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfZXJhc2UoX19wb3NpdGlvbik7CisJX19wb3NpdGlvbi5fTV9pbnZhbGlkYXRlKCk7CisJX0Jhc2U6OmVyYXNlKF9fcG9zaXRpb24uYmFzZSgpKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7CisJc3RkOjpwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4gX192aWN0aW1zID0gdGhpcy0+ZXF1YWxfcmFuZ2UoX194KTsKKwlzaXplX3R5cGUgX19jb3VudCA9IDA7CisJd2hpbGUgKF9fdmljdGltcy5maXJzdCAhPSBfX3ZpY3RpbXMuc2Vjb25kKQorCXsKKwkgIGl0ZXJhdG9yIF9fdmljdGltID0gX192aWN0aW1zLmZpcnN0Kys7CisJICBfX3ZpY3RpbS5fTV9pbnZhbGlkYXRlKCk7CisJICBfQmFzZTo6ZXJhc2UoX192aWN0aW0uYmFzZSgpKTsKKwkgICsrX19jb3VudDsKKwl9CisJcmV0dXJuIF9fY291bnQ7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwkvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJLy8gMTUxLiBjYW4ndCBjdXJyZW50bHkgY2xlYXIoKSBlbXB0eSBjb250YWluZXIKKwlfX2dsaWJjeHhfY2hlY2tfZXJhc2VfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKwl3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCisJICB0aGlzLT5lcmFzZShfX2ZpcnN0KyspOworCXJldHVybiBfX2xhc3Q7CisgICAgICB9CisjZWxzZQorICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICAgeworCS8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkvLyAxNTEuIGNhbid0IGN1cnJlbnRseSBjbGVhcigpIGVtcHR5IGNvbnRhaW5lcgorCV9fZ2xpYmN4eF9jaGVja19lcmFzZV9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCXdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwkgIHRoaXMtPmVyYXNlKF9fZmlyc3QrKyk7CisgICAgICB9CisjZW5kaWYKKworICAgICAgdm9pZAorICAgICAgc3dhcChtdWx0aW1hcCYgX194KQorICAgICAgeworCV9CYXNlOjpzd2FwKF9feCk7CisJdGhpcy0+X01fc3dhcChfX3gpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBjbGVhcigpCisgICAgICB7IHRoaXMtPmVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQorCisgICAgICAvLyBvYnNlcnZlcnM6CisgICAgICB1c2luZyBfQmFzZTo6a2V5X2NvbXA7CisgICAgICB1c2luZyBfQmFzZTo6dmFsdWVfY29tcDsKKworICAgICAgLy8gMjMuMy4xLjMgbXVsdGltYXAgb3BlcmF0aW9uczoKKyAgICAgIGl0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZmluZChfX3gpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmZpbmQoX194KSwgdGhpcyk7IH0KKworICAgICAgdXNpbmcgX0Jhc2U6OmNvdW50OworCisgICAgICBpdGVyYXRvcgorICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpsb3dlcl9ib3VuZChfX3gpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpsb3dlcl9ib3VuZChfX3gpLCB0aGlzKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjp1cHBlcl9ib3VuZChfX3gpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjp1cHBlcl9ib3VuZChfX3gpLCB0aGlzKTsgfQorCisgICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIF9CYXNlX2l0ZXJhdG9yOworCXN0ZDo6cGFpcjxfQmFzZV9pdGVyYXRvciwgX0Jhc2VfaXRlcmF0b3I+IF9fcmVzID0KKwlfQmFzZTo6ZXF1YWxfcmFuZ2UoX194KTsKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoaXRlcmF0b3IoX19yZXMuZmlyc3QsIHRoaXMpLAorCQkJICAgICAgaXRlcmF0b3IoX19yZXMuc2Vjb25kLCB0aGlzKSk7CisgICAgICB9CisKKyAgICAgIHN0ZDo6cGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IgX0Jhc2VfY29uc3RfaXRlcmF0b3I7CisJc3RkOjpwYWlyPF9CYXNlX2NvbnN0X2l0ZXJhdG9yLCBfQmFzZV9jb25zdF9pdGVyYXRvcj4gX19yZXMgPQorCV9CYXNlOjplcXVhbF9yYW5nZShfX3gpOworCXJldHVybiBzdGQ6Om1ha2VfcGFpcihjb25zdF9pdGVyYXRvcihfX3Jlcy5maXJzdCwgdGhpcyksCisJCQkgICAgICBjb25zdF9pdGVyYXRvcihfX3Jlcy5zZWNvbmQsIHRoaXMpKTsKKyAgICAgIH0KKworICAgICAgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgY29uc3QgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KKworICAgIHByaXZhdGU6CisgICAgICB2b2lkCisgICAgICBfTV9pbnZhbGlkYXRlX2FsbCgpCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IgX0Jhc2VfY29uc3RfaXRlcmF0b3I7CisJdHlwZWRlZiBfX2dudV9kZWJ1Zzo6X05vdF9lcXVhbF90bzxfQmFzZV9jb25zdF9pdGVyYXRvcj4gX05vdF9lcXVhbDsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2lmKF9Ob3RfZXF1YWwoX01fYmFzZSgpLmVuZCgpKSk7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IG11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA9PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IG11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSAhPSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPCBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IG11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA8PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IG11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA+PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPiBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKG11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0KKworfSAvLyBuYW1lc3BhY2UgX19kZWJ1ZworfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9kZWJ1Zy9tdWx0aXNldC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9kZWJ1Zy9tdWx0aXNldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNjViYTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlYnVnL211bHRpc2V0LmgKQEAgLTAsMCArMSw0MDMgQEAKKy8vIERlYnVnZ2luZyBtdWx0aXNldCBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBkZWJ1Zy9tdWx0aXNldC5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGRlYnVnIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9ERUJVR19NVUxUSVNFVF9ICisjZGVmaW5lIF9HTElCQ1hYX0RFQlVHX01VTFRJU0VUX0ggMQorCisjaW5jbHVkZSA8ZGVidWcvc2FmZV9zZXF1ZW5jZS5oPgorI2luY2x1ZGUgPGRlYnVnL3NhZmVfaXRlcmF0b3IuaD4KKyNpbmNsdWRlIDx1dGlsaXR5PgorCituYW1lc3BhY2Ugc3RkCit7CituYW1lc3BhY2UgX19kZWJ1ZworeworICAvLy8gQ2xhc3Mgc3RkOjptdWx0aXNldCB3aXRoIHNhZmV0eS9jaGVja2luZy9kZWJ1ZyBpbnN0cnVtZW50YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlID0gc3RkOjpsZXNzPF9LZXk+LAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IgPSBzdGQ6OmFsbG9jYXRvcjxfS2V5PiA+CisgICAgY2xhc3MgbXVsdGlzZXQKKyAgICA6IHB1YmxpYyBfR0xJQkNYWF9TVERfRDo6bXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+LAorICAgICAgcHVibGljIF9fZ251X2RlYnVnOjpfU2FmZV9zZXF1ZW5jZTxtdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4gPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0dMSUJDWFhfU1REX0Q6Om11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX3NlcXVlbmNlPG11bHRpc2V0PiBfU2FmZV9iYXNlOworCisgICAgcHVibGljOgorICAgICAgLy8gdHlwZXM6CisgICAgICB0eXBlZGVmIF9LZXkJCQkJICAgICBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0tleQkJCQkgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9Db21wYXJlCQkJCSAgICAga2V5X2NvbXBhcmU7CisgICAgICB0eXBlZGVmIF9Db21wYXJlCQkJCSAgICAgdmFsdWVfY29tcGFyZTsKKyAgICAgIHR5cGVkZWYgX0FsbG9jYXRvcgkJCSAgICAgYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpyZWZlcmVuY2UJICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3JlZmVyZW5jZSAgICAgICAgY29uc3RfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9pdGVyYXRvcjx0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IsIG11bHRpc2V0PgorICAgICAgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9pdGVyYXRvcjx0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IsCisJCQkJCSAgbXVsdGlzZXQ+IGNvbnN0X2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmRpZmZlcmVuY2VfdHlwZSAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cG9pbnRlciAgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfcG9pbnRlciAgICAgICAgICBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+ICAgICAgICByZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+ICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworCisgICAgICAvLyAyMy4zLjMuMSBjb25zdHJ1Y3QvY29weS9kZXN0cm95OgorICAgICAgZXhwbGljaXQgbXVsdGlzZXQoY29uc3QgX0NvbXBhcmUmIF9fY29tcCA9IF9Db21wYXJlKCksCisJCQljb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICA6IF9CYXNlKF9fY29tcCwgX19hKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIG11bHRpc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAgPSBfQ29tcGFyZSgpLAorCQkgY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorCTogX0Jhc2UoX19nbnVfZGVidWc6Ol9fY2hlY2tfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KSwgX19sYXN0LAorCQlfX2NvbXAsIF9fYSkgeyB9CisKKyAgICAgIG11bHRpc2V0KGNvbnN0IG11bHRpc2V0JiBfX3gpCisgICAgICA6IF9CYXNlKF9feCksIF9TYWZlX2Jhc2UoKSB7IH0KKworICAgICAgbXVsdGlzZXQoY29uc3QgX0Jhc2UmIF9feCkKKyAgICAgIDogX0Jhc2UoX194KSwgX1NhZmVfYmFzZSgpIHsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIG11bHRpc2V0KG11bHRpc2V0JiYgX194KQorICAgICAgOiBfQmFzZShzdGQ6OmZvcndhcmQ8bXVsdGlzZXQ+KF9feCkpLCBfU2FmZV9iYXNlKCkKKyAgICAgIHsgdGhpcy0+X01fc3dhcChfX3gpOyB9CisKKyAgICAgIG11bHRpc2V0KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sLAorCSAgICAgICBjb25zdCBfQ29tcGFyZSYgX19jb21wID0gX0NvbXBhcmUoKSwKKwkgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fbCwgX19jb21wLCBfX2EpLCBfU2FmZV9iYXNlKCkgeyB9CisjZW5kaWYKKworICAgICAgfm11bHRpc2V0KCkgeyB9CisKKyAgICAgIG11bHRpc2V0JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IG11bHRpc2V0JiBfX3gpCisgICAgICB7CisJKnN0YXRpY19jYXN0PF9CYXNlKj4odGhpcykgPSBfX3g7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgbXVsdGlzZXQmCisgICAgICBvcGVyYXRvcj0obXVsdGlzZXQmJiBfX3gpCisgICAgICB7CisJLy8gTkI6IERSIDEyMDQuCisJLy8gTkI6IERSIDY3NS4KKwljbGVhcigpOworCXN3YXAoX194KTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIG11bHRpc2V0JgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+aW5zZXJ0KF9fbCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIHVzaW5nIF9CYXNlOjpnZXRfYWxsb2NhdG9yOworCisgICAgICAvLyBpdGVyYXRvcnM6CisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorI2VuZGlmCisKKyAgICAgIC8vIGNhcGFjaXR5OgorICAgICAgdXNpbmcgX0Jhc2U6OmVtcHR5OworICAgICAgdXNpbmcgX0Jhc2U6OnNpemU7CisgICAgICB1c2luZyBfQmFzZTo6bWF4X3NpemU7CisKKyAgICAgIC8vIG1vZGlmaWVyczoKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6Omluc2VydChfX3gpLCB0aGlzKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9fcG9zaXRpb24pOworCXJldHVybiBpdGVyYXRvcihfQmFzZTo6aW5zZXJ0KF9fcG9zaXRpb24uYmFzZSgpLCBfX3gpLCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICB2b2lkCisgICAgICBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCV9CYXNlOjppbnNlcnQoX19maXJzdCwgX19sYXN0KTsKKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7IF9CYXNlOjppbnNlcnQoX19sKTsgfQorI2VuZGlmCisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2VyYXNlKF9fcG9zaXRpb24pOworCV9fcG9zaXRpb24uX01faW52YWxpZGF0ZSgpOworCXJldHVybiBpdGVyYXRvcihfQmFzZTo6ZXJhc2UoX19wb3NpdGlvbi5iYXNlKCkpLCB0aGlzKTsKKyAgICAgIH0KKyNlbHNlCisgICAgICB2b2lkCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19lcmFzZShfX3Bvc2l0aW9uKTsKKwlfX3Bvc2l0aW9uLl9NX2ludmFsaWRhdGUoKTsKKwlfQmFzZTo6ZXJhc2UoX19wb3NpdGlvbi5iYXNlKCkpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIHNpemVfdHlwZQorICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsKKwlzdGQ6OnBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPiBfX3ZpY3RpbXMgPSB0aGlzLT5lcXVhbF9yYW5nZShfX3gpOworCXNpemVfdHlwZSBfX2NvdW50ID0gMDsKKwl3aGlsZSAoX192aWN0aW1zLmZpcnN0ICE9IF9fdmljdGltcy5zZWNvbmQpCisJeworCSAgaXRlcmF0b3IgX192aWN0aW0gPSBfX3ZpY3RpbXMuZmlyc3QrKzsKKwkgIF9fdmljdGltLl9NX2ludmFsaWRhdGUoKTsKKwkgIF9CYXNlOjplcmFzZShfX3ZpY3RpbS5iYXNlKCkpOworCSAgKytfX2NvdW50OworCX0KKwlyZXR1cm4gX19jb3VudDsKKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICAgeworCS8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkvLyAxNTEuIGNhbid0IGN1cnJlbnRseSBjbGVhcigpIGVtcHR5IGNvbnRhaW5lcgorCV9fZ2xpYmN4eF9jaGVja19lcmFzZV9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCXdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwkgIHRoaXMtPmVyYXNlKF9fZmlyc3QrKyk7CisJcmV0dXJuIF9fbGFzdDsKKyAgICAgIH0KKyNlbHNlCisgICAgICB2b2lkCisgICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCisgICAgICB7CisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDE1MS4gY2FuJ3QgY3VycmVudGx5IGNsZWFyKCkgZW1wdHkgY29udGFpbmVyCisJX19nbGliY3h4X2NoZWNrX2VyYXNlX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisJd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQorCSAgdGhpcy0+ZXJhc2UoX19maXJzdCsrKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICB2b2lkCisgICAgICBzd2FwKG11bHRpc2V0JiBfX3gpCisgICAgICB7CisJX0Jhc2U6OnN3YXAoX194KTsKKwl0aGlzLT5fTV9zd2FwKF9feCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCkKKyAgICAgIHsgdGhpcy0+ZXJhc2UoYmVnaW4oKSwgZW5kKCkpOyB9CisKKyAgICAgIC8vIG9ic2VydmVyczoKKyAgICAgIHVzaW5nIF9CYXNlOjprZXlfY29tcDsKKyAgICAgIHVzaW5nIF9CYXNlOjp2YWx1ZV9jb21wOworCisgICAgICAvLyBtdWx0aXNldCBvcGVyYXRpb25zOgorICAgICAgaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpmaW5kKF9feCksIHRoaXMpOyB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDIxNC4gc2V0OjpmaW5kKCkgbWlzc2luZyBjb25zdCBvdmVybG9hZAorICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpmaW5kKF9feCksIHRoaXMpOyB9CisKKyAgICAgIHVzaW5nIF9CYXNlOjpjb3VudDsKKworICAgICAgaXRlcmF0b3IKKyAgICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6bG93ZXJfYm91bmQoX194KSwgdGhpcyk7IH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMjE0LiBzZXQ6OmZpbmQoKSBtaXNzaW5nIGNvbnN0IG92ZXJsb2FkCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpsb3dlcl9ib3VuZChfX3gpLCB0aGlzKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjp1cHBlcl9ib3VuZChfX3gpLCB0aGlzKTsgfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyMTQuIHNldDo6ZmluZCgpIG1pc3NpbmcgY29uc3Qgb3ZlcmxvYWQKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OnVwcGVyX2JvdW5kKF9feCksIHRoaXMpOyB9CisKKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvcixpdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgX0Jhc2VfaXRlcmF0b3I7CisJc3RkOjpwYWlyPF9CYXNlX2l0ZXJhdG9yLCBfQmFzZV9pdGVyYXRvcj4gX19yZXMgPQorICAgICAgICBfQmFzZTo6ZXF1YWxfcmFuZ2UoX194KTsKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoaXRlcmF0b3IoX19yZXMuZmlyc3QsIHRoaXMpLAorCQkJICAgICAgaXRlcmF0b3IoX19yZXMuc2Vjb25kLCB0aGlzKSk7CisgICAgICB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDIxNC4gc2V0OjpmaW5kKCkgbWlzc2luZyBjb25zdCBvdmVybG9hZAorICAgICAgc3RkOjpwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsKKwl0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciBfQmFzZV9pdGVyYXRvcjsKKwlzdGQ6OnBhaXI8X0Jhc2VfaXRlcmF0b3IsIF9CYXNlX2l0ZXJhdG9yPiBfX3JlcyA9CisgICAgICAgIF9CYXNlOjplcXVhbF9yYW5nZShfX3gpOworCXJldHVybiBzdGQ6Om1ha2VfcGFpcihjb25zdF9pdGVyYXRvcihfX3Jlcy5maXJzdCwgdGhpcyksCisJCQkgICAgICBjb25zdF9pdGVyYXRvcihfX3Jlcy5zZWNvbmQsIHRoaXMpKTsKKyAgICAgIH0KKworICAgICAgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgY29uc3QgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KKworICAgIHByaXZhdGU6CisgICAgICB2b2lkCisgICAgICBfTV9pbnZhbGlkYXRlX2FsbCgpCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IgX0Jhc2VfY29uc3RfaXRlcmF0b3I7CisJdHlwZWRlZiBfX2dudV9kZWJ1Zzo6X05vdF9lcXVhbF90bzxfQmFzZV9jb25zdF9pdGVyYXRvcj4gX05vdF9lcXVhbDsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2lmKF9Ob3RfZXF1YWwoX01fYmFzZSgpLmVuZCgpKSk7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgbXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPT0gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpICE9IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPCBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgbXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPD0gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID49IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPiBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICB2b2lkCisgICAgc3dhcChtdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9feCwKKwkgbXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3kpCisgICAgeyByZXR1cm4gX194LnN3YXAoX195KTsgfQorCit9IC8vIG5hbWVzcGFjZSBfX2RlYnVnCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlYnVnL3NhZmVfYmFzZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9kZWJ1Zy9zYWZlX2Jhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTgxZjliCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9kZWJ1Zy9zYWZlX2Jhc2UuaApAQCAtMCwwICsxLDIyMCBAQAorLy8gU2FmZSBzZXF1ZW5jZS9pdGVyYXRvciBiYXNlIGltcGxlbWVudGF0aW9uICAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBkZWJ1Zy9zYWZlX2Jhc2UuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBkZWJ1ZyBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfREVCVUdfU0FGRV9CQVNFX0gKKyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfU0FGRV9CQVNFX0ggMQorCisjaW5jbHVkZSA8ZXh0L2NvbmN1cnJlbmNlLmg+CisKK25hbWVzcGFjZSBfX2dudV9kZWJ1ZworeworICBjbGFzcyBfU2FmZV9zZXF1ZW5jZV9iYXNlOworCisgIC8qKiBcYnJpZWYgQmFzaWMgZnVuY3Rpb25hbGl0eSBmb3IgYSBAYSBzYWZlIGl0ZXJhdG9yLgorICAgKgorICAgKiAgVGhlICVfU2FmZV9pdGVyYXRvcl9iYXNlIGJhc2UgY2xhc3MgaW1wbGVtZW50cyB0aGUgZnVuY3Rpb25hbGl0eQorICAgKiAgb2YgYSBzYWZlIGl0ZXJhdG9yIHRoYXQgaXMgbm90IHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBpdGVyYXRvcgorICAgKiAgdHlwZS4gSXQgY29udGFpbnMgYSBwb2ludGVyIGJhY2sgdG8gdGhlIHNlcXVlbmNlIGl0IHJlZmVyZW5jZXMKKyAgICogIGFsb25nIHdpdGggaXRlcmF0b3IgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgcG9pbnRlcnMgdG8gZm9ybSBhCisgICAqICBkb3VibHktbGlua2VkIGxpc3Qgb2YgaXRlcmF0b3JzIHJlZmVyZW5jZWQgYnkgdGhlIGNvbnRhaW5lci4KKyAgICoKKyAgICogIFRoaXMgY2xhc3MgbXVzdCBub3QgcGVyZm9ybSBhbnkgb3BlcmF0aW9ucyB0aGF0IGNhbiB0aHJvdyBhbgorICAgKiAgZXhjZXB0aW9uLCBvciB0aGUgZXhjZXB0aW9uIGd1YXJhbnRlZXMgb2YgZGVyaXZlZCBpdGVyYXRvcnMgd2lsbAorICAgKiAgYmUgYnJva2VuLgorICAgKi8KKyAgY2xhc3MgX1NhZmVfaXRlcmF0b3JfYmFzZQorICB7CisgIHB1YmxpYzoKKyAgICAvKiogVGhlIHNlcXVlbmNlIHRoaXMgaXRlcmF0b3IgcmVmZXJlbmNlczsgbWF5IGJlIE5VTEwgdG8gaW5kaWNhdGUKKwlhIHNpbmd1bGFyIGl0ZXJhdG9yLiAqLworICAgIF9TYWZlX3NlcXVlbmNlX2Jhc2UqIF9NX3NlcXVlbmNlOworCisgICAgLyoqIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIGl0ZXJhdG9yLiBUaGUgc2VudGluZWwgdmFsdWUgMCBpcworICAgICAqICB1c2VkIHRvIGluZGljYXRlIGFuIGludmFsaWRhdGVkIGl0ZXJhdG9yIChpLmUuLCBvbmUgdGhhdCBpcworICAgICAqICBzaW5ndWxhciBiZWNhdXNlIG9mIGFuIG9wZXJhdGlvbiBvbiB0aGUgY29udGFpbmVyKS4gVGhpcworICAgICAqICB2ZXJzaW9uIG51bWJlciBtdXN0IGVxdWFsIHRoZSB2ZXJzaW9uIG51bWJlciBpbiB0aGUgc2VxdWVuY2UKKyAgICAgKiAgcmVmZXJlbmNlZCBieSBfTV9zZXF1ZW5jZSBmb3IgdGhlIGl0ZXJhdG9yIHRvIGJlCisgICAgICogIG5vbi1zaW5ndWxhci4KKyAgICAgKi8KKyAgICB1bnNpZ25lZCBpbnQgICAgICAgICBfTV92ZXJzaW9uOworCisgICAgLyoqIFBvaW50ZXIgdG8gdGhlIHByZXZpb3VzIGl0ZXJhdG9yIGluIHRoZSBzZXF1ZW5jZSdzIGxpc3Qgb2YKKwlpdGVyYXRvcnMuIE9ubHkgdmFsaWQgd2hlbiBfTV9zZXF1ZW5jZSAhPSBOVUxMLiAqLworICAgIF9TYWZlX2l0ZXJhdG9yX2Jhc2UqIF9NX3ByaW9yOworCisgICAgLyoqIFBvaW50ZXIgdG8gdGhlIG5leHQgaXRlcmF0b3IgaW4gdGhlIHNlcXVlbmNlJ3MgbGlzdCBvZgorCWl0ZXJhdG9ycy4gT25seSB2YWxpZCB3aGVuIF9NX3NlcXVlbmNlICE9IE5VTEwuICovCisgICAgX1NhZmVfaXRlcmF0b3JfYmFzZSogX01fbmV4dDsKKworICBwcm90ZWN0ZWQ6CisgICAgLyoqIEluaXRpYWxpemVzIHRoZSBpdGVyYXRvciBhbmQgbWFrZXMgaXQgc2luZ3VsYXIuICovCisgICAgX1NhZmVfaXRlcmF0b3JfYmFzZSgpCisgICAgOiBfTV9zZXF1ZW5jZSgwKSwgX01fdmVyc2lvbigwKSwgX01fcHJpb3IoMCksIF9NX25leHQoMCkKKyAgICB7IH0KKworICAgIC8qKiBJbml0aWFsaXplIHRoZSBpdGVyYXRvciB0byByZWZlcmVuY2UgdGhlIHNlcXVlbmNlIHBvaW50ZWQgdG8KKyAgICAgKiAgYnkgQHBfX3NlcS4gQHAgX19jb25zdGFudCBpcyB0cnVlIHdoZW4gd2UgYXJlIGluaXRpYWxpemluZyBhCisgICAgICogIGNvbnN0YW50IGl0ZXJhdG9yLCBhbmQgZmFsc2UgaWYgaXQgaXMgYSBtdXRhYmxlIGl0ZXJhdG9yLiBOb3RlCisgICAgICogIHRoYXQgQHAgX19zZXEgbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2UgdGhlIGl0ZXJhdG9yIHdpbGwgYmUKKyAgICAgKiAgc2luZ3VsYXIuIE90aGVyd2lzZSwgdGhlIGl0ZXJhdG9yIHdpbGwgcmVmZXJlbmNlIEBwIF9fc2VxIGFuZAorICAgICAqICBiZSBub25zaW5ndWxhci4KKyAgICAgKi8KKyAgICBfU2FmZV9pdGVyYXRvcl9iYXNlKGNvbnN0IF9TYWZlX3NlcXVlbmNlX2Jhc2UqIF9fc2VxLCBib29sIF9fY29uc3RhbnQpCisgICAgOiBfTV9zZXF1ZW5jZSgwKSwgX01fdmVyc2lvbigwKSwgX01fcHJpb3IoMCksIF9NX25leHQoMCkKKyAgICB7IHRoaXMtPl9NX2F0dGFjaChjb25zdF9jYXN0PF9TYWZlX3NlcXVlbmNlX2Jhc2UqPihfX3NlcSksIF9fY29uc3RhbnQpOyB9CisKKyAgICAvKiogSW5pdGlhbGl6ZXMgdGhlIGl0ZXJhdG9yIHRvIHJlZmVyZW5jZSB0aGUgc2FtZSBzZXF1ZW5jZSB0aGF0CisJQHAgX194IGRvZXMuIEBwIF9fY29uc3RhbnQgaXMgdHJ1ZSBpZiB0aGlzIGlzIGEgY29uc3RhbnQKKwlpdGVyYXRvciwgYW5kIGZhbHNlIGlmIGl0IGlzIG11dGFibGUuICovCisgICAgX1NhZmVfaXRlcmF0b3JfYmFzZShjb25zdCBfU2FmZV9pdGVyYXRvcl9iYXNlJiBfX3gsIGJvb2wgX19jb25zdGFudCkKKyAgICA6IF9NX3NlcXVlbmNlKDApLCBfTV92ZXJzaW9uKDApLCBfTV9wcmlvcigwKSwgX01fbmV4dCgwKQorICAgIHsgdGhpcy0+X01fYXR0YWNoKF9feC5fTV9zZXF1ZW5jZSwgX19jb25zdGFudCk7IH0KKworICAgIF9TYWZlX2l0ZXJhdG9yX2Jhc2UmCisgICAgb3BlcmF0b3I9KGNvbnN0IF9TYWZlX2l0ZXJhdG9yX2Jhc2UmKTsKKworICAgIGV4cGxpY2l0CisgICAgX1NhZmVfaXRlcmF0b3JfYmFzZShjb25zdCBfU2FmZV9pdGVyYXRvcl9iYXNlJik7CisKKyAgICB+X1NhZmVfaXRlcmF0b3JfYmFzZSgpIHsgdGhpcy0+X01fZGV0YWNoKCk7IH0KKworICAgIC8qKiBGb3IgdXNlIGluIF9TYWZlX2l0ZXJhdG9yLiAqLworICAgIF9fZ251X2N4eDo6X19tdXRleCYgX01fZ2V0X211dGV4KCkgdGhyb3cgKCk7CisKKyAgcHVibGljOgorICAgIC8qKiBBdHRhY2hlcyB0aGlzIGl0ZXJhdG9yIHRvIHRoZSBnaXZlbiBzZXF1ZW5jZSwgZGV0YWNoaW5nIGl0CisgICAgICoJZnJvbSB3aGF0ZXZlciBzZXF1ZW5jZSBpdCB3YXMgYXR0YWNoZWQgdG8gb3JpZ2luYWxseS4gSWYgdGhlCisgICAgICoJbmV3IHNlcXVlbmNlIGlzIHRoZSBOVUxMIHBvaW50ZXIsIHRoZSBpdGVyYXRvciBpcyBsZWZ0CisgICAgICoJdW5hdHRhY2hlZC4KKyAgICAgKi8KKyAgICB2b2lkIF9NX2F0dGFjaChfU2FmZV9zZXF1ZW5jZV9iYXNlKiBfX3NlcSwgYm9vbCBfX2NvbnN0YW50KTsKKworICAgIC8qKiBMaWtld2lzZSwgYnV0IG5vdCB0aHJlYWQtc2FmZS4gKi8KKyAgICB2b2lkIF9NX2F0dGFjaF9zaW5nbGUoX1NhZmVfc2VxdWVuY2VfYmFzZSogX19zZXEsIGJvb2wgX19jb25zdGFudCkgdGhyb3cgKCk7CisKKyAgICAvKiogRGV0YWNoIHRoZSBpdGVyYXRvciBmb3Igd2hhdGV2ZXIgc2VxdWVuY2UgaXQgaXMgYXR0YWNoZWQgdG8sCisgICAgICoJaWYgYW55LgorICAgICovCisgICAgdm9pZCBfTV9kZXRhY2goKTsKKworICAgIC8qKiBMaWtld2lzZSwgYnV0IG5vdCB0aHJlYWQtc2FmZS4gKi8KKyAgICB2b2lkIF9NX2RldGFjaF9zaW5nbGUoKSB0aHJvdyAoKTsKKworICAgIC8qKiBEZXRlcm1pbmVzIGlmIHdlIGFyZSBhdHRhY2hlZCB0byB0aGUgZ2l2ZW4gc2VxdWVuY2UuICovCisgICAgYm9vbCBfTV9hdHRhY2hlZF90byhjb25zdCBfU2FmZV9zZXF1ZW5jZV9iYXNlKiBfX3NlcSkgY29uc3QKKyAgICB7IHJldHVybiBfTV9zZXF1ZW5jZSA9PSBfX3NlcTsgfQorCisgICAgLyoqIElzIHRoaXMgaXRlcmF0b3Igc2luZ3VsYXI/ICovCisgICAgX0dMSUJDWFhfUFVSRSBib29sIF9NX3Npbmd1bGFyKCkgY29uc3QgdGhyb3cgKCk7CisKKyAgICAvKiogQ2FuIHdlIGNvbXBhcmUgdGhpcyBpdGVyYXRvciB0byB0aGUgZ2l2ZW4gaXRlcmF0b3IgQHAgX194PworCVJldHVybnMgdHJ1ZSBpZiBib3RoIGl0ZXJhdG9ycyBhcmUgbm9uc2luZ3VsYXIgYW5kIHJlZmVyZW5jZQorCXRoZSBzYW1lIHNlcXVlbmNlLiAqLworICAgIF9HTElCQ1hYX1BVUkUgYm9vbCBfTV9jYW5fY29tcGFyZShjb25zdCBfU2FmZV9pdGVyYXRvcl9iYXNlJiBfX3gpIGNvbnN0IHRocm93ICgpOworICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgQmFzZSBjbGFzcyB0aGF0IHN1cHBvcnRzIHRyYWNraW5nIG9mIGl0ZXJhdG9ycyB0aGF0CisgICAqIHJlZmVyZW5jZSBhIHNlcXVlbmNlLgorICAgKgorICAgKiBUaGUgJV9TYWZlX3NlcXVlbmNlX2Jhc2UgY2xhc3MgcHJvdmlkZXMgYmFzaWMgc3VwcG9ydCBmb3IKKyAgICogdHJhY2tpbmcgaXRlcmF0b3JzIGludG8gYSBzZXF1ZW5jZS4gU2VxdWVuY2VzIHRoYXQgdHJhY2sKKyAgICogaXRlcmF0b3JzIG11c3QgZGVyaXZlZCBmcm9tICVfU2FmZV9zZXF1ZW5jZV9iYXNlIHB1YmxpY2x5LCBzbworICAgKiB0aGF0IHNhZmUgaXRlcmF0b3JzICh3aGljaCBpbmhlcml0IF9TYWZlX2l0ZXJhdG9yX2Jhc2UpIGNhbgorICAgKiBhdHRhY2ggdG8gdGhlbS4gVGhpcyBjbGFzcyBjb250YWlucyB0d28gbGlua2VkIGxpc3RzIG9mCisgICAqIGl0ZXJhdG9ycywgb25lIGZvciBjb25zdGFudCBpdGVyYXRvcnMgYW5kIG9uZSBmb3IgbXV0YWJsZQorICAgKiBpdGVyYXRvcnMsIGFuZCBhIHZlcnNpb24gbnVtYmVyIHRoYXQgYWxsb3dzIHZlcnkgZmFzdAorICAgKiBpbnZhbGlkYXRpb24gb2YgYWxsIGl0ZXJhdG9ycyB0aGF0IHJlZmVyZW5jZSB0aGUgY29udGFpbmVyLgorICAgKgorICAgKiBUaGlzIGNsYXNzIG11c3QgZW5zdXJlIHRoYXQgbm8gb3BlcmF0aW9uIG9uIGl0IG1heSB0aHJvdyBhbgorICAgKiBleGNlcHRpb24sIG90aGVyd2lzZSBAYSBzYWZlIHNlcXVlbmNlcyBtYXkgZmFpbCB0byBwcm92aWRlIHRoZQorICAgKiBleGNlcHRpb24tc2FmZXR5IGd1YXJhbnRlZXMgcmVxdWlyZWQgYnkgdGhlIEMrKyBzdGFuZGFyZC4KKyAgICovCisgIGNsYXNzIF9TYWZlX3NlcXVlbmNlX2Jhc2UKKyAgeworICBwdWJsaWM6CisgICAgLy8vIFRoZSBsaXN0IG9mIG11dGFibGUgaXRlcmF0b3JzIHRoYXQgcmVmZXJlbmNlIHRoaXMgY29udGFpbmVyCisgICAgX1NhZmVfaXRlcmF0b3JfYmFzZSogX01faXRlcmF0b3JzOworCisgICAgLy8vIFRoZSBsaXN0IG9mIGNvbnN0YW50IGl0ZXJhdG9ycyB0aGF0IHJlZmVyZW5jZSB0aGlzIGNvbnRhaW5lcgorICAgIF9TYWZlX2l0ZXJhdG9yX2Jhc2UqIF9NX2NvbnN0X2l0ZXJhdG9yczsKKworICAgIC8vLyBUaGUgY29udGFpbmVyIHZlcnNpb24gbnVtYmVyLiBUaGlzIG51bWJlciBtYXkgbmV2ZXIgYmUgMC4KKyAgICBtdXRhYmxlIHVuc2lnbmVkIGludCBfTV92ZXJzaW9uOworCisgIHByb3RlY3RlZDoKKyAgICAvLyBJbml0aWFsaXplIHdpdGggYSB2ZXJzaW9uIG51bWJlciBvZiAxIGFuZCBubyBpdGVyYXRvcnMKKyAgICBfU2FmZV9zZXF1ZW5jZV9iYXNlKCkKKyAgICA6IF9NX2l0ZXJhdG9ycygwKSwgX01fY29uc3RfaXRlcmF0b3JzKDApLCBfTV92ZXJzaW9uKDEpCisgICAgeyB9CisKKyAgICAvKiogTm90aWZ5IGFsbCBpdGVyYXRvcnMgdGhhdCByZWZlcmVuY2UgdGhpcyBzZXF1ZW5jZSB0aGF0IHRoZQorCXNlcXVlbmNlIGlzIGJlaW5nIGRlc3Ryb3llZC4gKi8KKyAgICB+X1NhZmVfc2VxdWVuY2VfYmFzZSgpCisgICAgeyB0aGlzLT5fTV9kZXRhY2hfYWxsKCk7IH0KKworICAgIC8qKiBEZXRhY2ggYWxsIGl0ZXJhdG9ycywgbGVhdmluZyB0aGVtIHNpbmd1bGFyLiAqLworICAgIHZvaWQKKyAgICBfTV9kZXRhY2hfYWxsKCk7CisKKyAgICAvKiogRGV0YWNoIGFsbCBzaW5ndWxhciBpdGVyYXRvcnMuCisgICAgICogIEBwb3N0IGZvciBhbGwgaXRlcmF0b3JzIGkgYXR0YWNoZWQgdG8gdGhpcyBzZXF1ZW5jZSwKKyAgICAgKiAgIGktPl9NX3ZlcnNpb24gPT0gX01fdmVyc2lvbi4KKyAgICAgKi8KKyAgICB2b2lkCisgICAgX01fZGV0YWNoX3Npbmd1bGFyKCk7CisKKyAgICAvKiogUmV2YWxpZGF0ZXMgYWxsIGF0dGFjaGVkIHNpbmd1bGFyIGl0ZXJhdG9ycy4gIFRoaXMgbWV0aG9kIG1heQorICAgICAqICBiZSB1c2VkIHRvIHZhbGlkYXRlIGl0ZXJhdG9ycyB0aGF0IHdlcmUgaW52YWxpZGF0ZWQgYmVmb3JlCisgICAgICogIChidXQgZm9yIHNvbWUgcmVhc29uLCBzdWNoIGFzIGFuIGV4Y2VwdGlvbiwgbmVlZCB0byBiZWNvbWUKKyAgICAgKiAgdmFsaWQgYWdhaW4pLgorICAgICAqLworICAgIHZvaWQKKyAgICBfTV9yZXZhbGlkYXRlX3Npbmd1bGFyKCk7CisKKyAgICAvKiogU3dhcCB0aGlzIHNlcXVlbmNlIHdpdGggdGhlIGdpdmVuIHNlcXVlbmNlLiBUaGlzIG9wZXJhdGlvbgorICAgICAqICBhbHNvIHN3YXBzIG93bmVyc2hpcCBvZiB0aGUgaXRlcmF0b3JzLCBzbyB0aGF0IHdoZW4gdGhlCisgICAgICogIG9wZXJhdGlvbiBpcyBjb21wbGV0ZSBhbGwgaXRlcmF0b3JzIHRoYXQgb3JpZ2luYWxseSByZWZlcmVuY2VkCisgICAgICogIG9uZSBjb250YWluZXIgbm93IHJlZmVyZW5jZSB0aGUgb3RoZXIgY29udGFpbmVyLgorICAgICAqLworICAgIHZvaWQKKyAgICBfTV9zd2FwKF9TYWZlX3NlcXVlbmNlX2Jhc2UmIF9feCk7CisKKyAgICAvKiogRm9yIHVzZSBpbiBfU2FmZV9zZXF1ZW5jZS4gKi8KKyAgICBfX2dudV9jeHg6Ol9fbXV0ZXgmIF9NX2dldF9tdXRleCgpIHRocm93ICgpOworCisgIHB1YmxpYzoKKyAgICAvKiogSW52YWxpZGF0ZXMgYWxsIGl0ZXJhdG9ycy4gKi8KKyAgICB2b2lkCisgICAgX01faW52YWxpZGF0ZV9hbGwoKSBjb25zdAorICAgIHsgaWYgKCsrX01fdmVyc2lvbiA9PSAwKSBfTV92ZXJzaW9uID0gMTsgfQorICB9OworfSAvLyBuYW1lc3BhY2UgX19nbnVfZGVidWcKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlYnVnL3NhZmVfaXRlcmF0b3IuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZGVidWcvc2FmZV9pdGVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMGEzZTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlYnVnL3NhZmVfaXRlcmF0b3IuaApAQCAtMCwwICsxLDY0NyBAQAorLy8gU2FmZSBpdGVyYXRvciBpbXBsZW1lbnRhdGlvbiAgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZGVidWcvc2FmZV9pdGVyYXRvci5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGRlYnVnIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9ERUJVR19TQUZFX0lURVJBVE9SX0gKKyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfU0FGRV9JVEVSQVRPUl9IIDEKKworI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisjaW5jbHVkZSA8ZGVidWcvbWFjcm9zLmg+CisjaW5jbHVkZSA8ZGVidWcvZnVuY3Rpb25zLmg+CisjaW5jbHVkZSA8ZGVidWcvZm9ybWF0dGVyLmg+CisjaW5jbHVkZSA8ZGVidWcvc2FmZV9iYXNlLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfcGFpci5oPgorI2luY2x1ZGUgPGV4dC90eXBlX3RyYWl0cy5oPgorCituYW1lc3BhY2UgX19nbnVfZGVidWcKK3sKKyAgLyoqIEl0ZXJhdG9ycyB0aGF0IGRlcml2ZSBmcm9tIF9TYWZlX2l0ZXJhdG9yX2Jhc2UgYnV0IHRoYXQgYXJlbid0CisgICAqICBfU2FmZV9pdGVyYXRvcnMgY2FuIGJlIGRldGVybWluZWQgc2luZ3VsYXIgb3Igbm9uLXNpbmd1bGFyIHZpYQorICAgKiAgX1NhZmVfaXRlcmF0b3JfYmFzZS4KKyAgICovCisgIGlubGluZSBib29sIAorICBfX2NoZWNrX3Npbmd1bGFyX2F1eChjb25zdCBfU2FmZV9pdGVyYXRvcl9iYXNlKiBfX3gpCisgIHsgcmV0dXJuIF9feC0+X01fc2luZ3VsYXIoKTsgfQorCisgIC8qKiBcYnJpZWYgU2FmZSBpdGVyYXRvciB3cmFwcGVyLgorICAgKgorICAgKiAgVGhlIGNsYXNzIHRlbXBsYXRlICVfU2FmZV9pdGVyYXRvciBpcyBhIHdyYXBwZXIgYXJvdW5kIGFuCisgICAqICBpdGVyYXRvciB0aGF0IHRyYWNrcyB0aGUgaXRlcmF0b3IncyBtb3ZlbWVudCBhbW9uZyBzZXF1ZW5jZXMgYW5kCisgICAqICBjaGVja3MgdGhhdCBvcGVyYXRpb25zIHBlcmZvcm1lZCBvbiB0aGUgInNhZmUiIGl0ZXJhdG9yIGFyZQorICAgKiAgbGVnYWwuIEluIGFkZGl0aW9uYWwgdG8gdGhlIGJhc2ljIGl0ZXJhdG9yIG9wZXJhdGlvbnMgKHdoaWNoIGFyZQorICAgKiAgdmFsaWRhdGVkLCBhbmQgdGhlbiBwYXNzZWQgdG8gdGhlIHVuZGVybHlpbmcgaXRlcmF0b3IpLAorICAgKiAgJV9TYWZlX2l0ZXJhdG9yIGhhcyBtZW1iZXIgZnVuY3Rpb25zIGZvciBpdGVyYXRvciBpbnZhbGlkYXRpb24sCisgICAqICBhdHRhY2hpbmcvZGV0YWNoaW5nIHRoZSBpdGVyYXRvciBmcm9tIHNlcXVlbmNlcywgYW5kIHF1ZXJ5aW5nCisgICAqICB0aGUgaXRlcmF0b3IncyBzdGF0ZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIGNsYXNzIF9TYWZlX2l0ZXJhdG9yIDogcHVibGljIF9TYWZlX2l0ZXJhdG9yX2Jhc2UKKyAgICB7CisgICAgICB0eXBlZGVmIF9TYWZlX2l0ZXJhdG9yIF9TZWxmOworCisgICAgICAvKiogVGhlIHByZWNpc2lvbiB0byB3aGljaCB3ZSBjYW4gY2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBiZXR3ZWVuCisgICAgICAgKiAgdHdvIGl0ZXJhdG9ycy4KKyAgICAgICAqLworICAgICAgZW51bSBfRGlzdGFuY2VfcHJlY2lzaW9uCisJeworCSAgX19kcF9lcXVhbGl0eSwgLy88IENhbiBjb21wYXJlIGl0ZXJhdG9yIGVxdWFsaXR5LCBvbmx5CisJICBfX2RwX3NpZ24sICAgICAvLzwgQ2FuIGRldGVybWluZSBlcXVhbGl0eSBhbmQgb3JkZXJpbmcKKwkgIF9fZHBfZXhhY3QgICAgIC8vPCBDYW4gZGV0ZXJtaW5lIGRpc3RhbmNlIHByZWNpc2VseQorCX07CisKKyAgICAgIC8vLyBUaGUgdW5kZXJseWluZyBpdGVyYXRvcgorICAgICAgX0l0ZXJhdG9yIF9NX2N1cnJlbnQ7CisKKyAgICAgIC8vLyBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhIGNvbnN0YW50IGl0ZXJhdG9yLgorICAgICAgYm9vbAorICAgICAgX01fY29uc3RhbnQoKSBjb25zdAorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKwlyZXR1cm4gX19pc19zYW1lPGNvbnN0X2l0ZXJhdG9yLCBfU2FmZV9pdGVyYXRvcj46OnZhbHVlOworICAgICAgfQorCisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj4gX1RyYWl0czsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0l0ZXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jhc2VfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjp2YWx1ZV90eXBlICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpkaWZmZXJlbmNlX3R5cGUgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnJlZmVyZW5jZSAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9pbnRlciAgICAgICAgICAgcG9pbnRlcjsKKworICAgICAgLy8vIEBwb3N0IHRoZSBpdGVyYXRvciBpcyBzaW5ndWxhciBhbmQgdW5hdHRhY2hlZAorICAgICAgX1NhZmVfaXRlcmF0b3IoKSA6IF9NX2N1cnJlbnQoKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgU2FmZSBpdGVyYXRvciBjb25zdHJ1Y3Rpb24gZnJvbSBhbiB1bnNhZmUgaXRlcmF0b3IgYW5kCisgICAgICAgKiBpdHMgc2VxdWVuY2UuCisgICAgICAgKgorICAgICAgICogQHByZSBAcCBzZXEgaXMgbm90IE5VTEwKKyAgICAgICAqIEBwb3N0IHRoaXMgaXMgbm90IHNpbmd1bGFyCisgICAgICAgKi8KKyAgICAgIF9TYWZlX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRvciYgX19pLCBjb25zdCBfU2VxdWVuY2UqIF9fc2VxKQorICAgICAgOiBfU2FmZV9pdGVyYXRvcl9iYXNlKF9fc2VxLCBfTV9jb25zdGFudCgpKSwgX01fY3VycmVudChfX2kpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfVkVSSUZZKCEgdGhpcy0+X01fc2luZ3VsYXIoKSwKKwkJCSAgICAgIF9NX21lc3NhZ2UoX19tc2dfaW5pdF9zaW5ndWxhcikKKwkJCSAgICAgIC5fTV9pdGVyYXRvcigqdGhpcywgInRoaXMiKSk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvcHkgY29uc3RydWN0aW9uLgorICAgICAgICovCisgICAgICBfU2FmZV9pdGVyYXRvcihjb25zdCBfU2FmZV9pdGVyYXRvciYgX194KQorICAgICAgOiBfU2FmZV9pdGVyYXRvcl9iYXNlKF9feCwgX01fY29uc3RhbnQoKSksIF9NX2N1cnJlbnQoX194Ll9NX2N1cnJlbnQpCisgICAgICB7CisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIERSIDQwOC4gSXMgdmVjdG9yPHJldmVyc2VfaXRlcmF0b3I8Y2hhcio+ID4gZm9yYmlkZGVuPworCV9HTElCQ1hYX0RFQlVHX1ZFUklGWSghX194Ll9NX3Npbmd1bGFyKCkKKwkJCSAgICAgIHx8IF9feC5fTV9jdXJyZW50ID09IF9JdGVyYXRvcigpLAorCQkJICAgICAgX01fbWVzc2FnZShfX21zZ19pbml0X2NvcHlfc2luZ3VsYXIpCisJCQkgICAgICAuX01faXRlcmF0b3IoKnRoaXMsICJ0aGlzIikKKwkJCSAgICAgIC5fTV9pdGVyYXRvcihfX3gsICJvdGhlciIpKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIENvbnZlcnRpbmcgY29uc3RydWN0b3IgZnJvbSBhIG11dGFibGUgaXRlcmF0b3IgdG8gYQorICAgICAgICogIGNvbnN0YW50IGl0ZXJhdG9yLgorICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9NdXRhYmxlSXRlcmF0b3I+CisgICAgICAgIF9TYWZlX2l0ZXJhdG9yKAorICAgICAgICAgIGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9NdXRhYmxlSXRlcmF0b3IsCisgICAgICAgICAgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjwoc3RkOjpfX2FyZV9zYW1lPF9NdXRhYmxlSXRlcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1NlcXVlbmNlOjppdGVyYXRvcjo6X0Jhc2VfaXRlcmF0b3I+OjpfX3ZhbHVlKSwKKyAgICAgICAgICAgICAgICAgICBfU2VxdWVuY2U+OjpfX3R5cGU+JiBfX3gpCisJOiBfU2FmZV9pdGVyYXRvcl9iYXNlKF9feCwgX01fY29uc3RhbnQoKSksIF9NX2N1cnJlbnQoX194LmJhc2UoKSkKKyAgICAgICAgeworCSAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCSAgLy8gRFIgNDA4LiBJcyB2ZWN0b3I8cmV2ZXJzZV9pdGVyYXRvcjxjaGFyKj4gPiBmb3JiaWRkZW4/CisJICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoIV9feC5fTV9zaW5ndWxhcigpCisJCQkJfHwgX194LmJhc2UoKSA9PSBfSXRlcmF0b3IoKSwKKwkJCQlfTV9tZXNzYWdlKF9fbXNnX2luaXRfY29uc3Rfc2luZ3VsYXIpCisJCQkJLl9NX2l0ZXJhdG9yKCp0aGlzLCAidGhpcyIpCisJCQkJLl9NX2l0ZXJhdG9yKF9feCwgIm90aGVyIikpOworCX0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29weSBhc3NpZ25tZW50LgorICAgICAgICovCisgICAgICBfU2FmZV9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfU2FmZV9pdGVyYXRvciYgX194KQorICAgICAgeworCS8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkvLyBEUiA0MDguIElzIHZlY3RvcjxyZXZlcnNlX2l0ZXJhdG9yPGNoYXIqPiA+IGZvcmJpZGRlbj8KKwlfR0xJQkNYWF9ERUJVR19WRVJJRlkoIV9feC5fTV9zaW5ndWxhcigpCisJCQkgICAgICB8fCBfX3guX01fY3VycmVudCA9PSBfSXRlcmF0b3IoKSwKKwkJCSAgICAgIF9NX21lc3NhZ2UoX19tc2dfY29weV9zaW5ndWxhcikKKwkJCSAgICAgIC5fTV9pdGVyYXRvcigqdGhpcywgInRoaXMiKQorCQkJICAgICAgLl9NX2l0ZXJhdG9yKF9feCwgIm90aGVyIikpOworCV9NX2N1cnJlbnQgPSBfX3guX01fY3VycmVudDsKKwl0aGlzLT5fTV9hdHRhY2goc3RhdGljX2Nhc3Q8X1NlcXVlbmNlKj4oX194Ll9NX3NlcXVlbmNlKSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgSXRlcmF0b3IgZGVyZWZlcmVuY2UuCisgICAgICAgKiAgQHByZSBpdGVyYXRvciBpcyBkZXJlZmVyZW5jZWFibGUKKyAgICAgICAqLworICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1ZFUklGWSh0aGlzLT5fTV9kZXJlZmVyZW5jZWFibGUoKSwKKwkJCSAgICAgIF9NX21lc3NhZ2UoX19tc2dfYmFkX2RlcmVmKQorCQkJICAgICAgLl9NX2l0ZXJhdG9yKCp0aGlzLCAidGhpcyIpKTsKKwlyZXR1cm4gKl9NX2N1cnJlbnQ7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBJdGVyYXRvciBkZXJlZmVyZW5jZS4KKyAgICAgICAqICBAcHJlIGl0ZXJhdG9yIGlzIGRlcmVmZXJlbmNlYWJsZQorICAgICAgICogIEB0b2RvIE1ha2UgdGhpcyBjb3JyZWN0IHcuci50LiBpdGVyYXRvcnMgdGhhdCByZXR1cm4gcHJveGllcworICAgICAgICogIEB0b2RvIFVzZSBhZGRyZXNzb2YoKSBpbnN0ZWFkIG9mICYgb3BlcmF0b3IKKyAgICAgICAqLworICAgICAgcG9pbnRlcgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfVkVSSUZZKHRoaXMtPl9NX2RlcmVmZXJlbmNlYWJsZSgpLAorCQkJICAgICAgX01fbWVzc2FnZShfX21zZ19iYWRfZGVyZWYpCisJCQkgICAgICAuX01faXRlcmF0b3IoKnRoaXMsICJ0aGlzIikpOworCXJldHVybiAmKl9NX2N1cnJlbnQ7CisgICAgICB9CisKKyAgICAgIC8vIC0tLS0tLSBJbnB1dCBpdGVyYXRvciByZXF1aXJlbWVudHMgLS0tLS0tCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgSXRlcmF0b3IgcHJlaW5jcmVtZW50CisgICAgICAgKiAgQHByZSBpdGVyYXRvciBpcyBpbmNyZW1lbnRhYmxlCisgICAgICAgKi8KKyAgICAgIF9TYWZlX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfVkVSSUZZKHRoaXMtPl9NX2luY3JlbWVudGFibGUoKSwKKwkJCSAgICAgIF9NX21lc3NhZ2UoX19tc2dfYmFkX2luYykKKwkJCSAgICAgIC5fTV9pdGVyYXRvcigqdGhpcywgInRoaXMiKSk7CisJKytfTV9jdXJyZW50OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEl0ZXJhdG9yIHBvc3RpbmNyZW1lbnQKKyAgICAgICAqICBAcHJlIGl0ZXJhdG9yIGlzIGluY3JlbWVudGFibGUKKyAgICAgICAqLworICAgICAgX1NhZmVfaXRlcmF0b3IKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1ZFUklGWSh0aGlzLT5fTV9pbmNyZW1lbnRhYmxlKCksCisJCQkgICAgICBfTV9tZXNzYWdlKF9fbXNnX2JhZF9pbmMpCisJCQkgICAgICAuX01faXRlcmF0b3IoKnRoaXMsICJ0aGlzIikpOworCV9TYWZlX2l0ZXJhdG9yIF9fdG1wKCp0aGlzKTsKKwkrK19NX2N1cnJlbnQ7CisJcmV0dXJuIF9fdG1wOworICAgICAgfQorCisgICAgICAvLyAtLS0tLS0gQmlkaXJlY3Rpb25hbCBpdGVyYXRvciByZXF1aXJlbWVudHMgLS0tLS0tCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgSXRlcmF0b3IgcHJlZGVjcmVtZW50CisgICAgICAgKiAgQHByZSBpdGVyYXRvciBpcyBkZWNyZW1lbnRhYmxlCisgICAgICAgKi8KKyAgICAgIF9TYWZlX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3ItLSgpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfVkVSSUZZKHRoaXMtPl9NX2RlY3JlbWVudGFibGUoKSwKKwkJCSAgICAgIF9NX21lc3NhZ2UoX19tc2dfYmFkX2RlYykKKwkJCSAgICAgIC5fTV9pdGVyYXRvcigqdGhpcywgInRoaXMiKSk7CisJLS1fTV9jdXJyZW50OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEl0ZXJhdG9yIHBvc3RkZWNyZW1lbnQKKyAgICAgICAqICBAcHJlIGl0ZXJhdG9yIGlzIGRlY3JlbWVudGFibGUKKyAgICAgICAqLworICAgICAgX1NhZmVfaXRlcmF0b3IKKyAgICAgIG9wZXJhdG9yLS0oaW50KQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1ZFUklGWSh0aGlzLT5fTV9kZWNyZW1lbnRhYmxlKCksCisJCQkgICAgICBfTV9tZXNzYWdlKF9fbXNnX2JhZF9kZWMpCisJCQkgICAgICAuX01faXRlcmF0b3IoKnRoaXMsICJ0aGlzIikpOworCV9TYWZlX2l0ZXJhdG9yIF9fdG1wKCp0aGlzKTsKKwktLV9NX2N1cnJlbnQ7CisJcmV0dXJuIF9fdG1wOworICAgICAgfQorCisgICAgICAvLyAtLS0tLS0gUmFuZG9tIGFjY2VzcyBpdGVyYXRvciByZXF1aXJlbWVudHMgLS0tLS0tCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yW10oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfVkVSSUZZKHRoaXMtPl9NX2Nhbl9hZHZhbmNlKF9fbikKKwkJCSAgICAgICYmIHRoaXMtPl9NX2Nhbl9hZHZhbmNlKF9fbisxKSwKKwkJCSAgICAgIF9NX21lc3NhZ2UoX19tc2dfaXRlcl9zdWJzY3JpcHRfb29iKQorCQkJICAgICAgLl9NX2l0ZXJhdG9yKCp0aGlzKS5fTV9pbnRlZ2VyKF9fbikpOworCisJcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsKKyAgICAgIH0KKworICAgICAgX1NhZmVfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcis9KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1ZFUklGWSh0aGlzLT5fTV9jYW5fYWR2YW5jZShfX24pLAorCQkJICAgICAgX01fbWVzc2FnZShfX21zZ19hZHZhbmNlX29vYikKKwkJCSAgICAgIC5fTV9pdGVyYXRvcigqdGhpcykuX01faW50ZWdlcihfX24pKTsKKwlfTV9jdXJyZW50ICs9IF9fbjsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIF9TYWZlX2l0ZXJhdG9yCisgICAgICBvcGVyYXRvcisoY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CisgICAgICB7CisJX1NhZmVfaXRlcmF0b3IgX190bXAoKnRoaXMpOworCV9fdG1wICs9IF9fbjsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisKKyAgICAgIF9TYWZlX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3ItPShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19WRVJJRlkodGhpcy0+X01fY2FuX2FkdmFuY2UoLV9fbiksCisJCQkgICAgICBfTV9tZXNzYWdlKF9fbXNnX3JldHJlYXRfb29iKQorCQkJICAgICAgLl9NX2l0ZXJhdG9yKCp0aGlzKS5fTV9pbnRlZ2VyKF9fbikpOworCV9NX2N1cnJlbnQgKz0gLV9fbjsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIF9TYWZlX2l0ZXJhdG9yCisgICAgICBvcGVyYXRvci0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CisgICAgICB7CisJX1NhZmVfaXRlcmF0b3IgX190bXAoKnRoaXMpOworCV9fdG1wIC09IF9fbjsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisKKyAgICAgIC8vIC0tLS0tLSBVdGlsaXRpZXMgLS0tLS0tCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm4gdGhlIHVuZGVybHlpbmcgaXRlcmF0b3IKKyAgICAgICAqLworICAgICAgX0l0ZXJhdG9yCisgICAgICBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb252ZXJzaW9uIHRvIHVuZGVybHlpbmcgbm9uLWRlYnVnIGl0ZXJhdG9yIHRvIGFsbG93CisgICAgICAgKiBiZXR0ZXIgaW50ZXJhY3Rpb24gd2l0aCBub24tZGVidWcgY29udGFpbmVycy4KKyAgICAgICAqLworICAgICAgb3BlcmF0b3IgX0l0ZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQorCisgICAgICAvKiogQXR0YWNoIGl0ZXJhdG9yIHRvIHRoZSBnaXZlbiBzZXF1ZW5jZS4gKi8KKyAgICAgIHZvaWQKKyAgICAgIF9NX2F0dGFjaChjb25zdCBfU2VxdWVuY2UqIF9fc2VxKQorICAgICAgeworCV9TYWZlX2l0ZXJhdG9yX2Jhc2U6Ol9NX2F0dGFjaChjb25zdF9jYXN0PF9TZXF1ZW5jZSo+KF9fc2VxKSwKKwkJCQkgICAgICAgX01fY29uc3RhbnQoKSk7CisgICAgICB9CisKKyAgICAgIC8qKiBMaWtld2lzZSwgYnV0IG5vdCB0aHJlYWQtc2FmZS4gKi8KKyAgICAgIHZvaWQKKyAgICAgIF9NX2F0dGFjaF9zaW5nbGUoY29uc3QgX1NlcXVlbmNlKiBfX3NlcSkKKyAgICAgIHsKKwlfU2FmZV9pdGVyYXRvcl9iYXNlOjpfTV9hdHRhY2hfc2luZ2xlKGNvbnN0X2Nhc3Q8X1NlcXVlbmNlKj4oX19zZXEpLAorCQkJCQkgICAgICBfTV9jb25zdGFudCgpKTsKKyAgICAgIH0KKworICAgICAgLyoqIEludmFsaWRhdGUgdGhlIGl0ZXJhdG9yLCBtYWtpbmcgaXQgc2luZ3VsYXIuICovCisgICAgICB2b2lkCisgICAgICBfTV9pbnZhbGlkYXRlKCk7CisKKyAgICAgIC8qKiBMaWtld2lzZSwgYnV0IG5vdCB0aHJlYWQtc2FmZS4gKi8KKyAgICAgIHZvaWQKKyAgICAgIF9NX2ludmFsaWRhdGVfc2luZ2xlKCk7CisKKyAgICAgIC8vLyBJcyB0aGUgaXRlcmF0b3IgZGVyZWZlcmVuY2VhYmxlPworICAgICAgYm9vbAorICAgICAgX01fZGVyZWZlcmVuY2VhYmxlKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICF0aGlzLT5fTV9zaW5ndWxhcigpICYmICFfTV9pc19lbmQoKTsgfQorCisgICAgICAvLy8gSXMgdGhlIGl0ZXJhdG9yIGluY3JlbWVudGFibGU/CisgICAgICBib29sCisgICAgICBfTV9pbmNyZW1lbnRhYmxlKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+X01fZGVyZWZlcmVuY2VhYmxlKCk7IH0KKworICAgICAgLy8gSXMgdGhlIGl0ZXJhdG9yIGRlY3JlbWVudGFibGU/CisgICAgICBib29sCisgICAgICBfTV9kZWNyZW1lbnRhYmxlKCkgY29uc3QgeyByZXR1cm4gIV9NX3Npbmd1bGFyKCkgJiYgIV9NX2lzX2JlZ2luKCk7IH0KKworICAgICAgLy8gQ2FuIHdlIGFkdmFuY2UgdGhlIGl0ZXJhdG9yIEBwIF9fbiBzdGVwcyAoQHAgX19uIG1heSBiZSBuZWdhdGl2ZSkKKyAgICAgIGJvb2wKKyAgICAgIF9NX2Nhbl9hZHZhbmNlKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdDsKKworICAgICAgLy8gSXMgdGhlIGl0ZXJhdG9yIHJhbmdlIFsqdGhpcywgX19yaHMpIHZhbGlkPworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX090aGVyPgorICAgICAgICBib29sCisgICAgICAgIF9NX3ZhbGlkX3JhbmdlKGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9PdGhlciwgX1NlcXVlbmNlPiYgX19yaHMpIGNvbnN0OworCisgICAgICAvLyBUaGUgc2VxdWVuY2UgdGhpcyBpdGVyYXRvciByZWZlcmVuY2VzLgorICAgICAgY29uc3QgX1NlcXVlbmNlKgorICAgICAgX01fZ2V0X3NlcXVlbmNlKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IF9TZXF1ZW5jZSo+KF9NX3NlcXVlbmNlKTsgfQorCisgICAgLyoqIERldGVybWluZSB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gaXRlcmF0b3JzIHdpdGggc29tZSBrbm93bgorICAgICAqCXByZWNpc2lvbi4KKyAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcjEsIHR5cGVuYW1lIF9JdGVyYXRvcjI+CisgICAgICBzdGF0aWMgc3RkOjpwYWlyPGRpZmZlcmVuY2VfdHlwZSwgX0Rpc3RhbmNlX3ByZWNpc2lvbj4KKyAgICAgIF9NX2dldF9kaXN0YW5jZShjb25zdCBfSXRlcmF0b3IxJiBfX2xocywgY29uc3QgX0l0ZXJhdG9yMiYgX19yaHMpCisgICAgICB7CisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yMT46Oml0ZXJhdG9yX2NhdGVnb3J5CisJICBfQ2F0ZWdvcnk7CisgICAgICAgIHJldHVybiBfTV9nZXRfZGlzdGFuY2UoX19saHMsIF9fcmhzLCBfQ2F0ZWdvcnkoKSk7CisgICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IxLCB0eXBlbmFtZSBfSXRlcmF0b3IyPgorICAgICAgc3RhdGljIHN0ZDo6cGFpcjxkaWZmZXJlbmNlX3R5cGUsIF9EaXN0YW5jZV9wcmVjaXNpb24+CisgICAgICBfTV9nZXRfZGlzdGFuY2UoY29uc3QgX0l0ZXJhdG9yMSYgX19saHMsIGNvbnN0IF9JdGVyYXRvcjImIF9fcmhzLAorCQkgICAgICBzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQorICAgICAgeworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoX19yaHMuYmFzZSgpIC0gX19saHMuYmFzZSgpLCBfX2RwX2V4YWN0KTsKKyAgICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcjEsIHR5cGVuYW1lIF9JdGVyYXRvcjI+CisgICAgICBzdGF0aWMgc3RkOjpwYWlyPGRpZmZlcmVuY2VfdHlwZSwgX0Rpc3RhbmNlX3ByZWNpc2lvbj4KKyAgICAgIF9NX2dldF9kaXN0YW5jZShjb25zdCBfSXRlcmF0b3IxJiBfX2xocywgY29uc3QgX0l0ZXJhdG9yMiYgX19yaHMsCisJCSAgICBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnKQorICAgICAgeworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKT8gMCA6IDEsCisJCQkgICAgICBfX2RwX2VxdWFsaXR5KTsKKyAgICAgIH0KKworICAgICAgLy8vIElzIHRoaXMgaXRlcmF0b3IgZXF1YWwgdG8gdGhlIHNlcXVlbmNlJ3MgYmVnaW4oKSBpdGVyYXRvcj8KKyAgICAgIGJvb2wgX01faXNfYmVnaW4oKSBjb25zdAorICAgICAgewlyZXR1cm4gKnRoaXMgPT0gc3RhdGljX2Nhc3Q8Y29uc3QgX1NlcXVlbmNlKj4oX01fc2VxdWVuY2UpLT5iZWdpbigpOyB9CisKKyAgICAgIC8vLyBJcyB0aGlzIGl0ZXJhdG9yIGVxdWFsIHRvIHRoZSBzZXF1ZW5jZSdzIGVuZCgpIGl0ZXJhdG9yPworICAgICAgYm9vbCBfTV9pc19lbmQoKSBjb25zdAorICAgICAgewlyZXR1cm4gKnRoaXMgPT0gc3RhdGljX2Nhc3Q8Y29uc3QgX1NlcXVlbmNlKj4oX01fc2VxdWVuY2UpLT5lbmQoKTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfU2VxdWVuY2U+JiBfX2xocywKKwkgICAgICAgY29uc3QgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX1NlcXVlbmNlPiYgX19yaHMpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKCEgX19saHMuX01fc2luZ3VsYXIoKSAmJiAhIF9fcmhzLl9NX3Npbmd1bGFyKCksCisJCQkgICAgX01fbWVzc2FnZShfX21zZ19pdGVyX2NvbXBhcmVfYmFkKQorCQkJICAgIC5fTV9pdGVyYXRvcihfX2xocywgImxocyIpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fcmhzLCAicmhzIikpOworICAgICAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9fbGhzLl9NX2Nhbl9jb21wYXJlKF9fcmhzKSwKKwkJCSAgICBfTV9tZXNzYWdlKF9fbXNnX2NvbXBhcmVfZGlmZmVyZW50KQorCQkJICAgIC5fTV9pdGVyYXRvcihfX2xocywgImxocyIpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fcmhzLCAicmhzIikpOworICAgICAgcmV0dXJuIF9fbGhzLmJhc2UoKSA9PSBfX3Jocy5iYXNlKCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9fbGhzLAorICAgICAgICAgICAgICAgY29uc3QgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX3JocykKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoISBfX2xocy5fTV9zaW5ndWxhcigpICYmICEgX19yaHMuX01fc2luZ3VsYXIoKSwKKwkJCSAgICBfTV9tZXNzYWdlKF9fbXNnX2l0ZXJfY29tcGFyZV9iYWQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19saHMuX01fY2FuX2NvbXBhcmUoX19yaHMpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfY29tcGFyZV9kaWZmZXJlbnQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICByZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfU2VxdWVuY2U+JiBfX2xocywKKwkgICAgICAgY29uc3QgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX1NlcXVlbmNlPiYgX19yaHMpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKCEgX19saHMuX01fc2luZ3VsYXIoKSAmJiAhIF9fcmhzLl9NX3Npbmd1bGFyKCksCisJCQkgICAgX01fbWVzc2FnZShfX21zZ19pdGVyX2NvbXBhcmVfYmFkKQorCQkJICAgIC5fTV9pdGVyYXRvcihfX2xocywgImxocyIpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fcmhzLCAicmhzIikpOworICAgICAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9fbGhzLl9NX2Nhbl9jb21wYXJlKF9fcmhzKSwKKwkJCSAgICBfTV9tZXNzYWdlKF9fbXNnX2NvbXBhcmVfZGlmZmVyZW50KQorCQkJICAgIC5fTV9pdGVyYXRvcihfX2xocywgImxocyIpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fcmhzLCAicmhzIikpOworICAgICAgcmV0dXJuIF9fbGhzLmJhc2UoKSAhPSBfX3Jocy5iYXNlKCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9fbGhzLAorICAgICAgICAgICAgICAgY29uc3QgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX3JocykKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoISBfX2xocy5fTV9zaW5ndWxhcigpICYmICEgX19yaHMuX01fc2luZ3VsYXIoKSwKKwkJCSAgICBfTV9tZXNzYWdlKF9fbXNnX2l0ZXJfY29tcGFyZV9iYWQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19saHMuX01fY2FuX2NvbXBhcmUoX19yaHMpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfY29tcGFyZV9kaWZmZXJlbnQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICByZXR1cm4gX19saHMuYmFzZSgpICE9IF9fcmhzLmJhc2UoKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9TZXF1ZW5jZT4mIF9fbGhzLAorCSAgICAgIGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9TZXF1ZW5jZT4mIF9fcmhzKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWSghIF9fbGhzLl9NX3Npbmd1bGFyKCkgJiYgISBfX3Jocy5fTV9zaW5ndWxhcigpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfaXRlcl9vcmRlcl9iYWQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19saHMuX01fY2FuX2NvbXBhcmUoX19yaHMpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfb3JkZXJfZGlmZmVyZW50KQorCQkJICAgIC5fTV9pdGVyYXRvcihfX2xocywgImxocyIpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fcmhzLCAicmhzIikpOworICAgICAgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhzLmJhc2UoKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX2xocywKKwkgICAgICBjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9fcmhzKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWSghIF9fbGhzLl9NX3Npbmd1bGFyKCkgJiYgISBfX3Jocy5fTV9zaW5ndWxhcigpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfaXRlcl9vcmRlcl9iYWQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19saHMuX01fY2FuX2NvbXBhcmUoX19yaHMpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfb3JkZXJfZGlmZmVyZW50KQorCQkJICAgIC5fTV9pdGVyYXRvcihfX2xocywgImxocyIpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fcmhzLCAicmhzIikpOworICAgICAgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhzLmJhc2UoKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfU2VxdWVuY2U+JiBfX2xocywKKwkgICAgICAgY29uc3QgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX1NlcXVlbmNlPiYgX19yaHMpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKCEgX19saHMuX01fc2luZ3VsYXIoKSAmJiAhIF9fcmhzLl9NX3Npbmd1bGFyKCksCisJCQkgICAgX01fbWVzc2FnZShfX21zZ19pdGVyX29yZGVyX2JhZCkKKwkJCSAgICAuX01faXRlcmF0b3IoX19saHMsICJsaHMiKQorCQkJICAgIC5fTV9pdGVyYXRvcihfX3JocywgInJocyIpKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWShfX2xocy5fTV9jYW5fY29tcGFyZShfX3JocyksCisJCQkgICAgX01fbWVzc2FnZShfX21zZ19vcmRlcl9kaWZmZXJlbnQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICByZXR1cm4gX19saHMuYmFzZSgpIDw9IF9fcmhzLmJhc2UoKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19saHMsCisgICAgICAgICAgICAgICBjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9fcmhzKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWSghIF9fbGhzLl9NX3Npbmd1bGFyKCkgJiYgISBfX3Jocy5fTV9zaW5ndWxhcigpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfaXRlcl9vcmRlcl9iYWQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19saHMuX01fY2FuX2NvbXBhcmUoX19yaHMpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfb3JkZXJfZGlmZmVyZW50KQorCQkJICAgIC5fTV9pdGVyYXRvcihfX2xocywgImxocyIpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fcmhzLCAicmhzIikpOworICAgICAgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfU2VxdWVuY2U+JiBfX2xocywKKwkgICAgICBjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfU2VxdWVuY2U+JiBfX3JocykKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoISBfX2xocy5fTV9zaW5ndWxhcigpICYmICEgX19yaHMuX01fc2luZ3VsYXIoKSwKKwkJCSAgICBfTV9tZXNzYWdlKF9fbXNnX2l0ZXJfb3JkZXJfYmFkKQorCQkJICAgIC5fTV9pdGVyYXRvcihfX2xocywgImxocyIpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fcmhzLCAicmhzIikpOworICAgICAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9fbGhzLl9NX2Nhbl9jb21wYXJlKF9fcmhzKSwKKwkJCSAgICBfTV9tZXNzYWdlKF9fbXNnX29yZGVyX2RpZmZlcmVudCkKKwkJCSAgICAuX01faXRlcmF0b3IoX19saHMsICJsaHMiKQorCQkJICAgIC5fTV9pdGVyYXRvcihfX3JocywgInJocyIpKTsKKyAgICAgIHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19saHMsCisJICAgICAgY29uc3QgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX3JocykKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoISBfX2xocy5fTV9zaW5ndWxhcigpICYmICEgX19yaHMuX01fc2luZ3VsYXIoKSwKKwkJCSAgICBfTV9tZXNzYWdlKF9fbXNnX2l0ZXJfb3JkZXJfYmFkKQorCQkJICAgIC5fTV9pdGVyYXRvcihfX2xocywgImxocyIpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fcmhzLCAicmhzIikpOworICAgICAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9fbGhzLl9NX2Nhbl9jb21wYXJlKF9fcmhzKSwKKwkJCSAgICBfTV9tZXNzYWdlKF9fbXNnX29yZGVyX2RpZmZlcmVudCkKKwkJCSAgICAuX01faXRlcmF0b3IoX19saHMsICJsaHMiKQorCQkJICAgIC5fTV9pdGVyYXRvcihfX3JocywgInJocyIpKTsKKyAgICAgIHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX1NlcXVlbmNlPiYgX19saHMsCisJICAgICAgIGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9TZXF1ZW5jZT4mIF9fcmhzKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWSghIF9fbGhzLl9NX3Npbmd1bGFyKCkgJiYgISBfX3Jocy5fTV9zaW5ndWxhcigpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfaXRlcl9vcmRlcl9iYWQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19saHMuX01fY2FuX2NvbXBhcmUoX19yaHMpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfb3JkZXJfZGlmZmVyZW50KQorCQkJICAgIC5fTV9pdGVyYXRvcihfX2xocywgImxocyIpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fcmhzLCAicmhzIikpOworICAgICAgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9fbGhzLAorICAgICAgICAgICAgICAgY29uc3QgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX3JocykKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoISBfX2xocy5fTV9zaW5ndWxhcigpICYmICEgX19yaHMuX01fc2luZ3VsYXIoKSwKKwkJCSAgICBfTV9tZXNzYWdlKF9fbXNnX2l0ZXJfb3JkZXJfYmFkKQorCQkJICAgIC5fTV9pdGVyYXRvcihfX2xocywgImxocyIpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fcmhzLCAicmhzIikpOworICAgICAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9fbGhzLl9NX2Nhbl9jb21wYXJlKF9fcmhzKSwKKwkJCSAgICBfTV9tZXNzYWdlKF9fbXNnX29yZGVyX2RpZmZlcmVudCkKKwkJCSAgICAuX01faXRlcmF0b3IoX19saHMsICJsaHMiKQorCQkJICAgIC5fTV9pdGVyYXRvcihfX3JocywgInJocyIpKTsKKyAgICAgIHJldHVybiBfX2xocy5iYXNlKCkgPj0gX19yaHMuYmFzZSgpOworICAgIH0KKworICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgIC8vIEFjY29yZGluZyB0byB0aGUgcmVzb2x1dGlvbiBvZiBEUjE3OSBub3Qgb25seSB0aGUgdmFyaW91cyBjb21wYXJpc29uCisgIC8vIG9wZXJhdG9ycyBidXQgYWxzbyBvcGVyYXRvci0gbXVzdCBhY2NlcHQgbWl4ZWQgaXRlcmF0b3IvY29uc3RfaXRlcmF0b3IKKyAgLy8gcGFyYW1ldGVycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIGlubGluZSB0eXBlbmFtZSBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfU2VxdWVuY2U+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBvcGVyYXRvci0oY29uc3QgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX1NlcXVlbmNlPiYgX19saHMsCisJICAgICAgY29uc3QgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX1NlcXVlbmNlPiYgX19yaHMpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKCEgX19saHMuX01fc2luZ3VsYXIoKSAmJiAhIF9fcmhzLl9NX3Npbmd1bGFyKCksCisJCQkgICAgX01fbWVzc2FnZShfX21zZ19kaXN0YW5jZV9iYWQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19saHMuX01fY2FuX2NvbXBhcmUoX19yaHMpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfZGlzdGFuY2VfZGlmZmVyZW50KQorCQkJICAgIC5fTV9pdGVyYXRvcihfX2xocywgImxocyIpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fcmhzLCAicmhzIikpOworICAgICAgcmV0dXJuIF9fbGhzLmJhc2UoKSAtIF9fcmhzLmJhc2UoKTsKKyAgICB9CisKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgICBpbmxpbmUgdHlwZW5hbWUgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICAgb3BlcmF0b3ItKGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19saHMsCisJICAgICAgIGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19yaHMpCisgICAgIHsKKyAgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoISBfX2xocy5fTV9zaW5ndWxhcigpICYmICEgX19yaHMuX01fc2luZ3VsYXIoKSwKKwkJCSAgICAgX01fbWVzc2FnZShfX21zZ19kaXN0YW5jZV9iYWQpCisJCQkgICAgIC5fTV9pdGVyYXRvcihfX2xocywgImxocyIpCisJCQkgICAgIC5fTV9pdGVyYXRvcihfX3JocywgInJocyIpKTsKKyAgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19saHMuX01fY2FuX2NvbXBhcmUoX19yaHMpLAorCQkJICAgICBfTV9tZXNzYWdlKF9fbXNnX2Rpc3RhbmNlX2RpZmZlcmVudCkKKwkJCSAgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAgLl9NX2l0ZXJhdG9yKF9fcmhzLCAicmhzIikpOworICAgICAgIHJldHVybiBfX2xocy5iYXNlKCkgLSBfX3Jocy5iYXNlKCk7CisgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICBpbmxpbmUgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+CisgICAgb3BlcmF0b3IrKHR5cGVuYW1lIF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvcixfU2VxdWVuY2U+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAorCSAgICAgIGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19pKQorICAgIHsgcmV0dXJuIF9faSArIF9fbjsgfQorfSAvLyBuYW1lc3BhY2UgX19nbnVfZGVidWcKKworI2lmbmRlZiBfR0xJQkNYWF9FWFBPUlRfVEVNUExBVEUKKyMgIGluY2x1ZGUgPGRlYnVnL3NhZmVfaXRlcmF0b3IudGNjPgorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9kZWJ1Zy9zYWZlX2l0ZXJhdG9yLnRjYyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZGVidWcvc2FmZV9pdGVyYXRvci50Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRmMmFlZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZGVidWcvc2FmZV9pdGVyYXRvci50Y2MKQEAgLTAsMCArMSwxNDMgQEAKKy8vIERlYnVnZ2luZyBpdGVyYXRvciBpbXBsZW1lbnRhdGlvbiAob3V0IG9mIGxpbmUpIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGRlYnVnL3NhZmVfaXRlcmF0b3IudGNjCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGRlYnVnIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9ERUJVR19TQUZFX0lURVJBVE9SX1RDQworI2RlZmluZSBfR0xJQkNYWF9ERUJVR19TQUZFX0lURVJBVE9SX1RDQyAxCisKK25hbWVzcGFjZSBfX2dudV9kZWJ1ZworeworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICBib29sCisgICAgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+OjoKKyAgICBfTV9jYW5fYWR2YW5jZShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIGlmICh0aGlzLT5fTV9zaW5ndWxhcigpKQorCXJldHVybiBmYWxzZTsKKyAgICAgIGlmIChfX24gPT0gMCkKKwlyZXR1cm4gdHJ1ZTsKKyAgICAgIGlmIChfX24gPCAwKQorCXsKKwkgIGNvbnN0X2l0ZXJhdG9yIF9fYmVnaW4gPQorCSAgICBzdGF0aWNfY2FzdDxjb25zdCBfU2VxdWVuY2UqPihfTV9zZXF1ZW5jZSktPmJlZ2luKCk7CisJICBzdGQ6OnBhaXI8ZGlmZmVyZW5jZV90eXBlLCBfRGlzdGFuY2VfcHJlY2lzaW9uPiBfX2Rpc3QgPQorCSAgICB0aGlzLT5fTV9nZXRfZGlzdGFuY2UoX19iZWdpbiwgKnRoaXMpOworCSAgYm9vbCBfX29rID0gICgoX19kaXN0LnNlY29uZCA9PSBfX2RwX2V4YWN0ICYmIF9fZGlzdC5maXJzdCA+PSAtX19uKQorCQkJfHwgKF9fZGlzdC5zZWNvbmQgIT0gX19kcF9leGFjdCAmJiBfX2Rpc3QuZmlyc3QgPiAwKSk7CisJICByZXR1cm4gX19vazsKKwl9CisgICAgICBlbHNlCisJeworCSAgY29uc3RfaXRlcmF0b3IgX19lbmQgPQorCSAgICBzdGF0aWNfY2FzdDxjb25zdCBfU2VxdWVuY2UqPihfTV9zZXF1ZW5jZSktPmVuZCgpOworCSAgc3RkOjpwYWlyPGRpZmZlcmVuY2VfdHlwZSwgX0Rpc3RhbmNlX3ByZWNpc2lvbj4gX19kaXN0ID0KKwkgICAgdGhpcy0+X01fZ2V0X2Rpc3RhbmNlKCp0aGlzLCBfX2VuZCk7CisJICBib29sIF9fb2sgPSAoKF9fZGlzdC5zZWNvbmQgPT0gX19kcF9leGFjdCAmJiBfX2Rpc3QuZmlyc3QgPj0gX19uKQorCQkgICAgICAgfHwgKF9fZGlzdC5zZWNvbmQgIT0gX19kcF9leGFjdCAmJiBfX2Rpc3QuZmlyc3QgPiAwKSk7CisJICByZXR1cm4gX19vazsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9PdGhlcj4KKyAgICAgIGJvb2wKKyAgICAgIF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvciwgX1NlcXVlbmNlPjo6CisgICAgICBfTV92YWxpZF9yYW5nZShjb25zdCBfU2FmZV9pdGVyYXRvcjxfT3RoZXIsIF9TZXF1ZW5jZT4mIF9fcmhzKSBjb25zdAorICAgICAgeworCWlmICghX01fY2FuX2NvbXBhcmUoX19yaHMpKQorCSAgcmV0dXJuIGZhbHNlOworCisJLyogRGV0ZXJtaW5lIGlmIHdlIGNhbiBvcmRlciB0aGUgaXRlcmF0b3JzIHdpdGhvdXQgdGhlIGhlbHAgb2YKKwkgICB0aGUgY29udGFpbmVyICovCisJc3RkOjpwYWlyPGRpZmZlcmVuY2VfdHlwZSwgX0Rpc3RhbmNlX3ByZWNpc2lvbj4gX19kaXN0ID0KKwkgIHRoaXMtPl9NX2dldF9kaXN0YW5jZSgqdGhpcywgX19yaHMpOworCXN3aXRjaCAoX19kaXN0LnNlY29uZCkgeworCWNhc2UgX19kcF9lcXVhbGl0eToKKwkgIGlmIChfX2Rpc3QuZmlyc3QgPT0gMCkKKwkgICAgcmV0dXJuIHRydWU7CisJICBicmVhazsKKworCWNhc2UgX19kcF9zaWduOgorCWNhc2UgX19kcF9leGFjdDoKKwkgIHJldHVybiBfX2Rpc3QuZmlyc3QgPj0gMDsKKwl9CisKKwkvKiBXZSBjYW4gb25seSB0ZXN0IGZvciBlcXVhbGl0eSwgYnV0IGNoZWNrIGlmIG9uZSBvZiB0aGUKKwkgICBpdGVyYXRvcnMgaXMgYXQgYW4gZXh0cmVtZS4gKi8KKwlpZiAoX01faXNfYmVnaW4oKSB8fCBfX3Jocy5fTV9pc19lbmQoKSkKKwkgIHJldHVybiB0cnVlOworCWVsc2UgaWYgKF9NX2lzX2VuZCgpIHx8IF9fcmhzLl9NX2lzX2JlZ2luKCkpCisJICByZXR1cm4gZmFsc2U7CisKKwkvLyBBc3N1bWUgdGhhdCB0aGlzIGlzIGEgdmFsaWQgcmFuZ2U7IHdlIGNhbid0IGNoZWNrIGFueXRoaW5nIGVsc2UKKwlyZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICB2b2lkCisgICAgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+OjoKKyAgICBfTV9pbnZhbGlkYXRlKCkKKyAgICB7CisgICAgICBfX2dudV9jeHg6Ol9fc2NvcGVkX2xvY2sgc2VudHJ5KHRoaXMtPl9NX2dldF9tdXRleCgpKTsKKyAgICAgIF9NX2ludmFsaWRhdGVfc2luZ2xlKCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIHZvaWQKKyAgICBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT46OgorICAgIF9NX2ludmFsaWRhdGVfc2luZ2xlKCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIGlmICghdGhpcy0+X01fc2luZ3VsYXIoKSkKKwl7CisJICBmb3IgKF9TYWZlX2l0ZXJhdG9yX2Jhc2UqIF9faXRlciA9IF9NX3NlcXVlbmNlLT5fTV9pdGVyYXRvcnM7CisJICAgICAgIF9faXRlcjsgX19pdGVyID0gX19pdGVyLT5fTV9uZXh0KQorCSAgICB7CisJICAgICAgaXRlcmF0b3IqIF9fdmljdGltID0gc3RhdGljX2Nhc3Q8aXRlcmF0b3IqPihfX2l0ZXIpOworCSAgICAgIGlmICh0aGlzLT5iYXNlKCkgPT0gX192aWN0aW0tPmJhc2UoKSkKKwkJX192aWN0aW0tPl9NX3ZlcnNpb24gPSAwOworCSAgICB9CisKKwkgIGZvciAoX1NhZmVfaXRlcmF0b3JfYmFzZSogX19pdGVyMiA9IF9NX3NlcXVlbmNlLT5fTV9jb25zdF9pdGVyYXRvcnM7CisJICAgICAgIF9faXRlcjI7IF9faXRlcjIgPSBfX2l0ZXIyLT5fTV9uZXh0KQorCSAgICB7CisJICAgICAgY29uc3RfaXRlcmF0b3IqIF9fdmljdGltID0gc3RhdGljX2Nhc3Q8Y29uc3RfaXRlcmF0b3IqPihfX2l0ZXIyKTsKKwkgICAgICBpZiAoX192aWN0aW0tPmJhc2UoKSA9PSB0aGlzLT5iYXNlKCkpCisJCV9fdmljdGltLT5fTV92ZXJzaW9uID0gMDsKKwkgICAgfQorCSAgX01fdmVyc2lvbiA9IDA7CisJfQorICAgIH0KK30gLy8gbmFtZXNwYWNlIF9fZ251X2RlYnVnCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlYnVnL3NhZmVfc2VxdWVuY2UuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZGVidWcvc2FmZV9zZXF1ZW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMDM3MmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlYnVnL3NhZmVfc2VxdWVuY2UuaApAQCAtMCwwICsxLDE4MyBAQAorLy8gU2FmZSBzZXF1ZW5jZSBpbXBsZW1lbnRhdGlvbiAgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA5LCAyMDEwCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZGVidWcvc2FmZV9zZXF1ZW5jZS5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGRlYnVnIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9ERUJVR19TQUZFX1NFUVVFTkNFX0gKKyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfU0FGRV9TRVFVRU5DRV9IIDEKKworI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisjaW5jbHVkZSA8ZGVidWcvbWFjcm9zLmg+CisjaW5jbHVkZSA8ZGVidWcvZnVuY3Rpb25zLmg+CisjaW5jbHVkZSA8ZGVidWcvc2FmZV9iYXNlLmg+CisKK25hbWVzcGFjZSBfX2dudV9kZWJ1ZworeworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICBjbGFzcyBfU2FmZV9pdGVyYXRvcjsKKworICAvKiogQSBzaW1wbGUgZnVuY3Rpb24gb2JqZWN0IHRoYXQgcmV0dXJucyB0cnVlIGlmIHRoZSBwYXNzZWQtaW4KKyAgICogIHZhbHVlIGlzIG5vdCBlcXVhbCB0byB0aGUgc3RvcmVkIHZhbHVlLiBJdCBzYXZlcyB0eXBpbmcgb3ZlcgorICAgKiAgdXNpbmcgYm90aCBiaW5kMXN0IGFuZCBub3RfZXF1YWwuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KKyAgICBjbGFzcyBfTm90X2VxdWFsX3RvCisgICAgeworICAgICAgX1R5cGUgX192YWx1ZTsKKworICAgIHB1YmxpYzoKKyAgICAgIGV4cGxpY2l0IF9Ob3RfZXF1YWxfdG8oY29uc3QgX1R5cGUmIF9fdikgOiBfX3ZhbHVlKF9fdikgeyB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX1R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fdmFsdWUgIT0gX194OyB9CisgICAgfTsKKworICAvKiogQSBmdW5jdGlvbiBvYmplY3QgdGhhdCByZXR1cm5zIHRydWUgd2hlbiB0aGUgZ2l2ZW4gcmFuZG9tIGFjY2VzcworICAgICAgaXRlcmF0b3IgaXMgYXQgbGVhc3QgQGMgbiBzdGVwcyBhd2F5IGZyb20gdGhlIGdpdmVuIGl0ZXJhdG9yLiAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CisgICAgY2xhc3MgX0FmdGVyX250aF9mcm9tCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKworICAgICAgX0l0ZXJhdG9yIF9NX2Jhc2U7CisgICAgICBkaWZmZXJlbmNlX3R5cGUgX01fbjsKKworICAgIHB1YmxpYzoKKyAgICAgIF9BZnRlcl9udGhfZnJvbShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbiwgY29uc3QgX0l0ZXJhdG9yJiBfX2Jhc2UpCisgICAgICA6IF9NX2Jhc2UoX19iYXNlKSwgX01fbihfX24pIHsgfQorCisgICAgICBib29sCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9JdGVyYXRvciYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX194IC0gX01fYmFzZSA+PSBfTV9uOyB9CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIEJhc2UgY2xhc3MgZm9yIGNvbnN0cnVjdGluZyBhIEBhIHNhZmUgc2VxdWVuY2UgdHlwZSB0aGF0CisgICAqIHRyYWNrcyBpdGVyYXRvcnMgdGhhdCByZWZlcmVuY2UgaXQuCisgICAqCisgICAqIFRoZSBjbGFzcyB0ZW1wbGF0ZSAlX1NhZmVfc2VxdWVuY2Ugc2ltcGxpZmllcyB0aGUgY29uc3RydWN0aW9uIG9mCisgICAqIEBhIHNhZmUgc2VxdWVuY2VzIHRoYXQgdHJhY2sgdGhlIGl0ZXJhdG9ycyB0aGF0IHJlZmVyZW5jZSB0aGUKKyAgICogc2VxdWVuY2UsIHNvIHRoYXQgdGhlIGl0ZXJhdG9ycyBhcmUgbm90aWZpZWQgb2YgY2hhbmdlcyBpbiB0aGUKKyAgICogc2VxdWVuY2UgdGhhdCBtYXkgYWZmZWN0IHRoZWlyIG9wZXJhdGlvbiwgZS5nLiwgaWYgdGhlIGNvbnRhaW5lcgorICAgKiBpbnZhbGlkYXRlcyBpdHMgaXRlcmF0b3JzIG9yIGlzIGRlc3RydWN0ZWQuIFRoaXMgY2xhc3MgdGVtcGxhdGUKKyAgICogbWF5IG9ubHkgYmUgdXNlZCBieSBkZXJpdmluZyBmcm9tIGl0IGFuZCBwYXNzaW5nIHRoZSBuYW1lIG9mIHRoZQorICAgKiBkZXJpdmVkIGNsYXNzIGFzIGl0cyB0ZW1wbGF0ZSBwYXJhbWV0ZXIgdmlhIHRoZSBjdXJpb3VzbHkKKyAgICogcmVjdXJyaW5nIHRlbXBsYXRlIHBhdHRlcm4uIFRoZSBkZXJpdmVkIGNsYXNzIG11c3QgaGF2ZSBAYworICAgKiBpdGVyYXRvciBhbmQgQGNvbnN0X2l0ZXJhdG9yIHR5cGVzIHRoYXQgYXJlIGluc3RhbnRpYXRpb25zIG9mCisgICAqIGNsYXNzIHRlbXBsYXRlIF9TYWZlX2l0ZXJhdG9yIGZvciB0aGlzIHNlcXVlbmNlLiBJdGVyYXRvcnMgd2lsbAorICAgKiB0aGVuIGJlIHRyYWNrZWQgYXV0b21hdGljYWxseS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICBjbGFzcyBfU2FmZV9zZXF1ZW5jZSA6IHB1YmxpYyBfU2FmZV9zZXF1ZW5jZV9iYXNlCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBJbnZhbGlkYXRlcyBhbGwgaXRlcmF0b3JzIEBjIHggdGhhdCByZWZlcmVuY2UgdGhpcyBzZXF1ZW5jZSwKKwkgIGFyZSBub3Qgc2luZ3VsYXIsIGFuZCBmb3Igd2hpY2ggQGMgcHJlZCh4KSByZXR1cm5zIEBjCisJICB0cnVlLiBUaGUgdXNlciBvZiB0aGlzIHJvdXRpbmUgc2hvdWxkIGJlIGNhcmVmdWwgbm90IHRvIG1ha2UKKwkgIGNvcGllcyBvZiB0aGUgaXRlcmF0b3JzIHBhc3NlZCB0byBAcCBwcmVkLCBhcyB0aGUgY29waWVzIG1heQorCSAgaW50ZXJmZXJlIHdpdGggdGhlIGludmFsaWRhdGlvbi4gKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01faW52YWxpZGF0ZV9pZihfUHJlZGljYXRlIF9fcHJlZCk7CisKKyAgICAgIC8qKiBUcmFuc2ZlcnMgYWxsIGl0ZXJhdG9ycyB0aGF0IHJlZmVyZW5jZSB0aGlzIG1lbW9yeSBsb2NhdGlvbgorCSAgdG8gdGhpcyBzZXF1ZW5jZSBmcm9tIHdoYXRldmVyIHNlcXVlbmNlIHRoZXkgYXJlIGF0dGFjaGVkCisJICB0by4gKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV90cmFuc2Zlcl9pdGVyKGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX194KTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgICAgdm9pZAorICAgICAgX1NhZmVfc2VxdWVuY2U8X1NlcXVlbmNlPjo6CisgICAgICBfTV9pbnZhbGlkYXRlX2lmKF9QcmVkaWNhdGUgX19wcmVkKQorICAgICAgeworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKworCV9fZ251X2N4eDo6X19zY29wZWRfbG9jayBzZW50cnkodGhpcy0+X01fZ2V0X211dGV4KCkpOworICAgICAgICBmb3IgKF9TYWZlX2l0ZXJhdG9yX2Jhc2UqIF9faXRlciA9IF9NX2l0ZXJhdG9yczsgX19pdGVyOykKKwkgIHsKKwkgICAgaXRlcmF0b3IqIF9fdmljdGltID0gc3RhdGljX2Nhc3Q8aXRlcmF0b3IqPihfX2l0ZXIpOworCSAgICBfX2l0ZXIgPSBfX2l0ZXItPl9NX25leHQ7CisJICAgIGlmICghX192aWN0aW0tPl9NX3Npbmd1bGFyKCkpCisJICAgICAgeworCQlpZiAoX19wcmVkKF9fdmljdGltLT5iYXNlKCkpKQorCQkgIF9fdmljdGltLT5fTV9pbnZhbGlkYXRlX3NpbmdsZSgpOworCSAgICAgIH0KKwkgIH0KKworICAgICAgICBmb3IgKF9TYWZlX2l0ZXJhdG9yX2Jhc2UqIF9faXRlcjIgPSBfTV9jb25zdF9pdGVyYXRvcnM7IF9faXRlcjI7KQorCSAgeworCSAgICBjb25zdF9pdGVyYXRvciogX192aWN0aW0gPSBzdGF0aWNfY2FzdDxjb25zdF9pdGVyYXRvcio+KF9faXRlcjIpOworCSAgICBfX2l0ZXIyID0gX19pdGVyMi0+X01fbmV4dDsKKwkgICAgaWYgKCFfX3ZpY3RpbS0+X01fc2luZ3VsYXIoKSkKKwkgICAgICB7CisJCWlmIChfX3ByZWQoX192aWN0aW0tPmJhc2UoKSkpCisJCSAgX192aWN0aW0tPl9NX2ludmFsaWRhdGVfc2luZ2xlKCk7CisJICAgICAgfQorCSAgfQorICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CisgICAgICB2b2lkCisgICAgICBfU2FmZV9zZXF1ZW5jZTxfU2VxdWVuY2U+OjoKKyAgICAgIF9NX3RyYW5zZmVyX2l0ZXIoY29uc3QgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX3gpCisgICAgICB7CisJX1NhZmVfc2VxdWVuY2VfYmFzZSogX19mcm9tID0gX194Ll9NX3NlcXVlbmNlOworCWlmICghX19mcm9tKQorCSAgcmV0dXJuOworCisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjppdGVyYXRvciBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworCisJX19nbnVfY3h4OjpfX3Njb3BlZF9sb2NrIHNlbnRyeSh0aGlzLT5fTV9nZXRfbXV0ZXgoKSk7CisgICAgICAgIGZvciAoX1NhZmVfaXRlcmF0b3JfYmFzZSogX19pdGVyID0gX19mcm9tLT5fTV9pdGVyYXRvcnM7IF9faXRlcjspCisJICB7CisJICAgIGl0ZXJhdG9yKiBfX3ZpY3RpbSA9IHN0YXRpY19jYXN0PGl0ZXJhdG9yKj4oX19pdGVyKTsKKwkgICAgX19pdGVyID0gX19pdGVyLT5fTV9uZXh0OworCSAgICBpZiAoIV9fdmljdGltLT5fTV9zaW5ndWxhcigpICYmIF9fdmljdGltLT5iYXNlKCkgPT0gX194LmJhc2UoKSkKKwkgICAgICBfX3ZpY3RpbS0+X01fYXR0YWNoX3NpbmdsZShzdGF0aWNfY2FzdDxfU2VxdWVuY2UqPih0aGlzKSk7CisJICB9CisKKyAgICAgICAgZm9yIChfU2FmZV9pdGVyYXRvcl9iYXNlKiBfX2l0ZXIyID0gX19mcm9tLT5fTV9jb25zdF9pdGVyYXRvcnM7IAorCSAgICAgX19pdGVyMjspCisJICB7CisJICAgIGNvbnN0X2l0ZXJhdG9yKiBfX3ZpY3RpbSA9IHN0YXRpY19jYXN0PGNvbnN0X2l0ZXJhdG9yKj4oX19pdGVyMik7CisJICAgIF9faXRlcjIgPSBfX2l0ZXIyLT5fTV9uZXh0OworCSAgICBpZiAoIV9fdmljdGltLT5fTV9zaW5ndWxhcigpICYmIF9fdmljdGltLT5iYXNlKCkgPT0gX194LmJhc2UoKSkKKwkgICAgICBfX3ZpY3RpbS0+X01fYXR0YWNoX3NpbmdsZShzdGF0aWNfY2FzdDxfU2VxdWVuY2UqPih0aGlzKSk7CisJICB9CisgICAgICB9Cit9IC8vIG5hbWVzcGFjZSBfX2dudV9kZWJ1ZworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZGVidWcvc2V0IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9kZWJ1Zy9zZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRmM2VhNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZGVidWcvc2V0CkBAIC0wLDAgKzEsMzcgQEAKKy8vIERlYnVnZ2luZyBzZXQvbXVsdGlzZXQgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZGVidWcvc2V0CisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGRlYnVnIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9ERUJVR19TRVQKKyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfU0VUIDEKKworI2luY2x1ZGUgPHNldD4KKyNpbmNsdWRlIDxkZWJ1Zy9zZXQuaD4KKyNpbmNsdWRlIDxkZWJ1Zy9tdWx0aXNldC5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZGVidWcvc2V0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlYnVnL3NldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZDNkZGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlYnVnL3NldC5oCkBAIC0wLDAgKzEsNDA3IEBACisvLyBEZWJ1Z2dpbmcgc2V0IGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGRlYnVnL3NldC5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGRlYnVnIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9ERUJVR19TRVRfSAorI2RlZmluZSBfR0xJQkNYWF9ERUJVR19TRVRfSCAxCisKKyNpbmNsdWRlIDxkZWJ1Zy9zYWZlX3NlcXVlbmNlLmg+CisjaW5jbHVkZSA8ZGVidWcvc2FmZV9pdGVyYXRvci5oPgorI2luY2x1ZGUgPHV0aWxpdHk+CisKK25hbWVzcGFjZSBzdGQgCit7CituYW1lc3BhY2UgX19kZWJ1ZworeworICAvLy8gQ2xhc3Mgc3RkOjpzZXQgd2l0aCBzYWZldHkvY2hlY2tpbmcvZGVidWcgaW5zdHJ1bWVudGF0aW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSA9IHN0ZDo6bGVzczxfS2V5PiwKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yID0gc3RkOjphbGxvY2F0b3I8X0tleT4gPgorICAgIGNsYXNzIHNldAorICAgIDogcHVibGljIF9HTElCQ1hYX1NURF9EOjpzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2NhdG9yPiwKKyAgICAgIHB1YmxpYyBfX2dudV9kZWJ1Zzo6X1NhZmVfc2VxdWVuY2U8c2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiA+CisgICAgeworICAgICAgdHlwZWRlZiBfR0xJQkNYWF9TVERfRDo6c2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX3NlcXVlbmNlPHNldD4gX1NhZmVfYmFzZTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vIHR5cGVzOgorICAgICAgdHlwZWRlZiBfS2V5CQkJCSAgICBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0tleQkJCQkgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0NvbXBhcmUJCQkJICAgIGtleV9jb21wYXJlOworICAgICAgdHlwZWRlZiBfQ29tcGFyZQkJCQkgICAgdmFsdWVfY29tcGFyZTsKKyAgICAgIHR5cGVkZWYgX0FsbG9jYXRvcgkJCSAgICBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnJlZmVyZW5jZSAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9yZWZlcmVuY2UgICAgICAgY29uc3RfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9pdGVyYXRvcjx0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IsIHNldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX2l0ZXJhdG9yPHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciwgc2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6ZGlmZmVyZW5jZV90eXBlICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnBvaW50ZXIgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfcG9pbnRlciAgICAgICAgIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworCisgICAgICAvLyAyMy4zLjMuMSBjb25zdHJ1Y3QvY29weS9kZXN0cm95OgorICAgICAgZXhwbGljaXQgc2V0KGNvbnN0IF9Db21wYXJlJiBfX2NvbXAgPSBfQ29tcGFyZSgpLAorCQkgICBjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICA6IF9CYXNlKF9fY29tcCwgX19hKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHNldChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICAgIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAgPSBfQ29tcGFyZSgpLAorCSAgICBjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisJOiBfQmFzZShfX2dudV9kZWJ1Zzo6X19jaGVja192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpLCBfX2xhc3QsCisJCV9fY29tcCwgX19hKSB7IH0KKworICAgICAgc2V0KGNvbnN0IHNldCYgX194KQorICAgICAgOiBfQmFzZShfX3gpLCBfU2FmZV9iYXNlKCkgeyB9CisKKyAgICAgIHNldChjb25zdCBfQmFzZSYgX194KQorICAgICAgOiBfQmFzZShfX3gpLCBfU2FmZV9iYXNlKCkgeyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgc2V0KHNldCYmIF9feCkKKyAgICAgIDogX0Jhc2Uoc3RkOjpmb3J3YXJkPHNldD4oX194KSksIF9TYWZlX2Jhc2UoKQorICAgICAgeyB0aGlzLT5fTV9zd2FwKF9feCk7IH0KKworICAgICAgc2V0KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sLAorCSAgY29uc3QgX0NvbXBhcmUmIF9fY29tcCA9IF9Db21wYXJlKCksCisJICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19sLCBfX2NvbXAsIF9fYSksIF9TYWZlX2Jhc2UoKSB7IH0KKyNlbmRpZgorCisgICAgICB+c2V0KCkgeyB9CisKKyAgICAgIHNldCYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBzZXQmIF9feCkKKyAgICAgIHsKKwkqc3RhdGljX2Nhc3Q8X0Jhc2UqPih0aGlzKSA9IF9feDsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBzZXQmCisgICAgICBvcGVyYXRvcj0oc2V0JiYgX194KQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorCS8vIE5COiBEUiA2NzUuCisJY2xlYXIoKTsKKwlzd2FwKF9feCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBzZXQmCisgICAgICBvcGVyYXRvcj0oaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7CisJdGhpcy0+Y2xlYXIoKTsKKwl0aGlzLT5pbnNlcnQoX19sKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisjZW5kaWYKKworICAgICAgdXNpbmcgX0Jhc2U6OmdldF9hbGxvY2F0b3I7CisKKyAgICAgIC8vIGl0ZXJhdG9yczoKKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplbmQoKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpCisgICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpCisgICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjplbmQoKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjcmVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisjZW5kaWYKKworICAgICAgLy8gY2FwYWNpdHk6CisgICAgICB1c2luZyBfQmFzZTo6ZW1wdHk7CisgICAgICB1c2luZyBfQmFzZTo6c2l6ZTsKKyAgICAgIHVzaW5nIF9CYXNlOjptYXhfc2l6ZTsKKworICAgICAgLy8gbW9kaWZpZXJzOgorICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPgorICAgICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsKKwl0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBfQmFzZV9pdGVyYXRvcjsKKwlzdGQ6OnBhaXI8X0Jhc2VfaXRlcmF0b3IsIGJvb2w+IF9fcmVzID0gX0Jhc2U6Omluc2VydChfX3gpOworCXJldHVybiBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+KGl0ZXJhdG9yKF9fcmVzLmZpcnN0LCB0aGlzKSwKKwkJCQkJIF9fcmVzLnNlY29uZCk7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19pbnNlcnQoX19wb3NpdGlvbik7CisJcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjppbnNlcnQoX19wb3NpdGlvbi5iYXNlKCksIF9feCksIHRoaXMpOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeworCSAgX19nbGliY3h4X2NoZWNrX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisJICBfQmFzZTo6aW5zZXJ0KF9fZmlyc3QsIF9fbGFzdCk7CisJfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsgX0Jhc2U6Omluc2VydChfX2wpOyB9CisjZW5kaWYKKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfZXJhc2UoX19wb3NpdGlvbik7CisJX19wb3NpdGlvbi5fTV9pbnZhbGlkYXRlKCk7CisJcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplcmFzZShfX3Bvc2l0aW9uLmJhc2UoKSksIHRoaXMpOworICAgICAgfQorI2Vsc2UKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2VyYXNlKF9fcG9zaXRpb24pOworCV9fcG9zaXRpb24uX01faW52YWxpZGF0ZSgpOworCV9CYXNlOjplcmFzZShfX3Bvc2l0aW9uLmJhc2UoKSk7CisgICAgICB9CisjZW5kaWYKKworICAgICAgc2l6ZV90eXBlCisgICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeworCWl0ZXJhdG9yIF9fdmljdGltID0gZmluZChfX3gpOworCWlmIChfX3ZpY3RpbSA9PSBlbmQoKSkKKyAgICAgICAgICByZXR1cm4gMDsKKwllbHNlCisgICAgICAgIHsKKwkgIF9fdmljdGltLl9NX2ludmFsaWRhdGUoKTsKKwkgIF9CYXNlOjplcmFzZShfX3ZpY3RpbS5iYXNlKCkpOworCSAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICAgeworCS8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkvLyAxNTEuIGNhbid0IGN1cnJlbnRseSBjbGVhcigpIGVtcHR5IGNvbnRhaW5lcgorCV9fZ2xpYmN4eF9jaGVja19lcmFzZV9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCXdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwkgIHRoaXMtPmVyYXNlKF9fZmlyc3QrKyk7CisJcmV0dXJuIF9fbGFzdDsKKyAgICAgIH0KKyNlbHNlCisgICAgICB2b2lkCisgICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCisgICAgICB7CisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDE1MS4gY2FuJ3QgY3VycmVudGx5IGNsZWFyKCkgZW1wdHkgY29udGFpbmVyCisJX19nbGliY3h4X2NoZWNrX2VyYXNlX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisJd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQorCSAgdGhpcy0+ZXJhc2UoX19maXJzdCsrKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICB2b2lkCisgICAgICBzd2FwKHNldCYgX194KQorICAgICAgeworCV9CYXNlOjpzd2FwKF9feCk7CisJdGhpcy0+X01fc3dhcChfX3gpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBjbGVhcigpCisgICAgICB7IHRoaXMtPmVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQorCisgICAgICAvLyBvYnNlcnZlcnM6CisgICAgICB1c2luZyBfQmFzZTo6a2V5X2NvbXA7CisgICAgICB1c2luZyBfQmFzZTo6dmFsdWVfY29tcDsKKworICAgICAgLy8gc2V0IG9wZXJhdGlvbnM6CisgICAgICBpdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmZpbmQoX194KSwgdGhpcyk7IH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMjE0LiBzZXQ6OmZpbmQoKSBtaXNzaW5nIGNvbnN0IG92ZXJsb2FkCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmZpbmQoX194KSwgdGhpcyk7IH0KKworICAgICAgdXNpbmcgX0Jhc2U6OmNvdW50OworCisgICAgICBpdGVyYXRvcgorICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpsb3dlcl9ib3VuZChfX3gpLCB0aGlzKTsgfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyMTQuIHNldDo6ZmluZCgpIG1pc3NpbmcgY29uc3Qgb3ZlcmxvYWQKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6Omxvd2VyX2JvdW5kKF9feCksIHRoaXMpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OnVwcGVyX2JvdW5kKF9feCksIHRoaXMpOyB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDIxNC4gc2V0OjpmaW5kKCkgbWlzc2luZyBjb25zdCBvdmVybG9hZAorICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6dXBwZXJfYm91bmQoX194KSwgdGhpcyk7IH0KKworICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsKKwl0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBfQmFzZV9pdGVyYXRvcjsKKwlzdGQ6OnBhaXI8X0Jhc2VfaXRlcmF0b3IsIF9CYXNlX2l0ZXJhdG9yPiBfX3JlcyA9CisgICAgICAgIF9CYXNlOjplcXVhbF9yYW5nZShfX3gpOworCXJldHVybiBzdGQ6Om1ha2VfcGFpcihpdGVyYXRvcihfX3Jlcy5maXJzdCwgdGhpcyksCisJCQkgICAgICBpdGVyYXRvcihfX3Jlcy5zZWNvbmQsIHRoaXMpKTsKKyAgICAgIH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMjE0LiBzZXQ6OmZpbmQoKSBtaXNzaW5nIGNvbnN0IG92ZXJsb2FkCisgICAgICBzdGQ6OnBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yIF9CYXNlX2l0ZXJhdG9yOworCXN0ZDo6cGFpcjxfQmFzZV9pdGVyYXRvciwgX0Jhc2VfaXRlcmF0b3I+IF9fcmVzID0KKyAgICAgICAgX0Jhc2U6OmVxdWFsX3JhbmdlKF9feCk7CisJcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGNvbnN0X2l0ZXJhdG9yKF9fcmVzLmZpcnN0LCB0aGlzKSwKKwkJCSAgICAgIGNvbnN0X2l0ZXJhdG9yKF9fcmVzLnNlY29uZCwgdGhpcykpOworICAgICAgfQorCisgICAgICBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSB7IHJldHVybiAqdGhpczsgfQorCisgICAgICBjb25zdCBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHZvaWQKKyAgICAgIF9NX2ludmFsaWRhdGVfYWxsKCkKKyAgICAgIHsKKwl0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciBfQmFzZV9jb25zdF9pdGVyYXRvcjsKKwl0eXBlZGVmIF9fZ251X2RlYnVnOjpfTm90X2VxdWFsX3RvPF9CYXNlX2NvbnN0X2l0ZXJhdG9yPiBfTm90X2VxdWFsOworCXRoaXMtPl9NX2ludmFsaWRhdGVfaWYoX05vdF9lcXVhbChfTV9iYXNlKCkuZW5kKCkpKTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICAgY29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID09IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICAgY29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpICE9IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA8IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICAgY29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpIDw9IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICAgY29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID49IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA+IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIHZvaWQKKyAgICBzd2FwKHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9feCwKKwkgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5zd2FwKF9feSk7IH0KKworfSAvLyBuYW1lc3BhY2UgX19kZWJ1ZworfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9kZWJ1Zy9zdHJpbmcgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlYnVnL3N0cmluZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjA0ODhlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9kZWJ1Zy9zdHJpbmcKQEAgLTAsMCArMSwxMTAyIEBACisvLyBEZWJ1Z2dpbmcgc3RyaW5nIGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGRlYnVnL3N0cmluZworICogIFRoaXMgZmlsZSBpcyBhIEdOVSBkZWJ1ZyBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfREVCVUdfU1RSSU5HCisjZGVmaW5lIF9HTElCQ1hYX0RFQlVHX1NUUklORyAxCisKKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8ZGVidWcvc2FmZV9zZXF1ZW5jZS5oPgorI2luY2x1ZGUgPGRlYnVnL3NhZmVfaXRlcmF0b3IuaD4KKworbmFtZXNwYWNlIF9fZ251X2RlYnVnCit7CisgIC8vLyBDbGFzcyBzdGQ6OmJhc2ljX3N0cmluZyB3aXRoIHNhZmV0eS9jaGVja2luZy9kZWJ1ZyBpbnN0cnVtZW50YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IHN0ZDo6Y2hhcl90cmFpdHM8X0NoYXJUPiwKKyAgICAgICAgICAgIHR5cGVuYW1lIF9BbGxvY2F0b3IgPSBzdGQ6OmFsbG9jYXRvcjxfQ2hhclQ+ID4KKyAgICBjbGFzcyBiYXNpY19zdHJpbmcKKyAgICA6IHB1YmxpYyBzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvY2F0b3I+LAorICAgICAgcHVibGljIF9fZ251X2RlYnVnOjpfU2FmZV9zZXF1ZW5jZTxiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLAorCQkJCQkJICAgICAgX0FsbG9jYXRvcj4gPgorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2NhdG9yPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX3NlcXVlbmNlPGJhc2ljX3N0cmluZz4gICAgIF9TYWZlX2Jhc2U7CisKKyAgcHVibGljOgorICAgIC8vIHR5cGVzOgorICAgIHR5cGVkZWYgX1RyYWl0cwkJCQkgICAgICAgdHJhaXRzX3R5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpjaGFyX3R5cGUJCSAgICAgICB2YWx1ZV90eXBlOworICAgIHR5cGVkZWYgX0FsbG9jYXRvcgkJCQkgICAgICAgYWxsb2NhdG9yX3R5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6c2l6ZV90eXBlICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmRpZmZlcmVuY2VfdHlwZSAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpyZWZlcmVuY2UgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfcmVmZXJlbmNlICAgICAgICAgICAgY29uc3RfcmVmZXJlbmNlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnBvaW50ZXIgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfcG9pbnRlciAgICAgICAgICAgICAgY29uc3RfcG9pbnRlcjsKKworICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX2l0ZXJhdG9yPHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciwgYmFzaWNfc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yOworICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX2l0ZXJhdG9yPHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5nPiBjb25zdF9pdGVyYXRvcjsKKworICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiAgICAgICAgICAgIHJldmVyc2VfaXRlcmF0b3I7CisgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+ICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKKworICAgIHVzaW5nIF9CYXNlOjpucG9zOworCisgICAgLy8gMjEuMy4xIGNvbnN0cnVjdC9jb3B5L2Rlc3Ryb3k6CisgICAgZXhwbGljaXQgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKyAgICA6IF9CYXNlKF9fYSkKKyAgICB7IH0KKworICAgIC8vIFByb3ZpZGVzIGNvbnZlcnNpb24gZnJvbSBhIHJlbGVhc2UtbW9kZSBzdHJpbmcgdG8gYSBkZWJ1Zy1tb2RlIHN0cmluZworICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQmFzZSYgX19iYXNlKSA6IF9CYXNlKF9fYmFzZSksIF9TYWZlX2Jhc2UoKSB7IH0KKworICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAvLyA0Mi4gc3RyaW5nIGN0b3JzIHNwZWNpZnkgd3JvbmcgZGVmYXVsdCBhbGxvY2F0b3IKKyAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKKyAgICA6IF9CYXNlKF9fc3RyLCAwLCBfQmFzZTo6bnBvcywgX19zdHIuZ2V0X2FsbG9jYXRvcigpKSwgX1NhZmVfYmFzZSgpCisgICAgeyB9CisKKyAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgLy8gNDIuIHN0cmluZyBjdG9ycyBzcGVjaWZ5IHdyb25nIGRlZmF1bHQgYWxsb2NhdG9yCisgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKKwkJICAgc2l6ZV90eXBlIF9fbiA9IF9CYXNlOjpucG9zLAorCQkgICBjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgOiBfQmFzZShfX3N0ciwgX19wb3MsIF9fbiwgX19hKQorICAgIHsgfQorCisgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLAorCQkgICBjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgOiBfQmFzZShfX2dudV9kZWJ1Zzo6X19jaGVja19zdHJpbmcoX19zLCBfX24pLCBfX24sIF9fYSkKKyAgICB7IH0KKworICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorICAgIDogX0Jhc2UoX19nbnVfZGVidWc6Ol9fY2hlY2tfc3RyaW5nKF9fcyksIF9fYSkKKyAgICB7IHRoaXMtPmFzc2lnbihfX3MpOyB9CisKKyAgICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywKKwkJICAgY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorICAgIDogX0Jhc2UoX19uLCBfX2MsIF9fYSkKKyAgICB7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXJhdG9yIF9fYmVnaW4sIF9JbnB1dEl0ZXJhdG9yIF9fZW5kLAorCQkgICAgIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKyAgICAgIDogX0Jhc2UoX19nbnVfZGVidWc6Ol9fY2hlY2tfdmFsaWRfcmFuZ2UoX19iZWdpbiwgX19lbmQpLCBfX2VuZCwgX19hKQorICAgICAgeyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgIGJhc2ljX3N0cmluZyhiYXNpY19zdHJpbmcmJiBfX3N0cikKKyAgICA6IF9CYXNlKHN0ZDo6Zm9yd2FyZDxfQmFzZT4oX19zdHIpKQorICAgIHsgfQorCisgICAgYmFzaWNfc3RyaW5nKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfQ2hhclQ+IF9fbCwKKwkJIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKyAgICA6IF9CYXNlKF9fbCwgX19hKQorICAgIHsgfQorI2VuZGlmIC8vIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisKKyAgICB+YmFzaWNfc3RyaW5nKCkgeyB9CisKKyAgICBiYXNpY19zdHJpbmcmCisgICAgb3BlcmF0b3I9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCisgICAgeworICAgICAgKnN0YXRpY19jYXN0PF9CYXNlKj4odGhpcykgPSBfX3N0cjsKKyAgICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgYmFzaWNfc3RyaW5nJgorICAgIG9wZXJhdG9yPShjb25zdCBfQ2hhclQqIF9fcykKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nKF9fcyk7CisgICAgICAqc3RhdGljX2Nhc3Q8X0Jhc2UqPih0aGlzKSA9IF9fczsKKyAgICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgYmFzaWNfc3RyaW5nJgorICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKQorICAgIHsKKyAgICAgICpzdGF0aWNfY2FzdDxfQmFzZSo+KHRoaXMpID0gX19jOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgIGJhc2ljX3N0cmluZyYKKyAgICBvcGVyYXRvcj0oYmFzaWNfc3RyaW5nJiYgX19zdHIpCisgICAgeworICAgICAgKnN0YXRpY19jYXN0PF9CYXNlKj4odGhpcykgPSBzdGQ6OmZvcndhcmQ8X0Jhc2U+KF9fc3RyKTsKKyAgICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgYmFzaWNfc3RyaW5nJgorICAgIG9wZXJhdG9yPShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X0NoYXJUPiBfX2wpCisgICAgeworICAgICAgKnN0YXRpY19jYXN0PF9CYXNlKj4odGhpcykgPSBfX2w7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyNlbmRpZiAvLyBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworCisgICAgLy8gMjEuMy4yIGl0ZXJhdG9yczoKKyAgICBpdGVyYXRvcgorICAgIGJlZ2luKCkKKyAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgYmVnaW4oKSBjb25zdAorICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgaXRlcmF0b3IKKyAgICBlbmQoKQorICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplbmQoKSwgdGhpcyk7IH0KKworICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgZW5kKCkgY29uc3QKKyAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgcmJlZ2luKCkKKyAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgIHJiZWdpbigpIGNvbnN0CisgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICByZW5kKCkKKyAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgcmVuZCgpIGNvbnN0CisgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisgICAgLy8gMjEuMy4zIGNhcGFjaXR5OgorICAgIHVzaW5nIF9CYXNlOjpzaXplOworICAgIHVzaW5nIF9CYXNlOjpsZW5ndGg7CisgICAgdXNpbmcgX0Jhc2U6Om1heF9zaXplOworCisgICAgdm9pZAorICAgIHJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQorICAgIHsKKyAgICAgIF9CYXNlOjpyZXNpemUoX19uLCBfX2MpOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICB9CisKKyAgICB2b2lkCisgICAgcmVzaXplKHNpemVfdHlwZSBfX24pCisgICAgeyB0aGlzLT5yZXNpemUoX19uLCBfQ2hhclQoKSk7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgdXNpbmcgX0Jhc2U6OnNocmlua190b19maXQ7CisjZW5kaWYKKworICAgIHVzaW5nIF9CYXNlOjpjYXBhY2l0eTsKKyAgICB1c2luZyBfQmFzZTo6cmVzZXJ2ZTsKKworICAgIHZvaWQKKyAgICBjbGVhcigpCisgICAgeworICAgICAgX0Jhc2U6OmNsZWFyKCk7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgIH0KKworICAgIHVzaW5nIF9CYXNlOjplbXB0eTsKKworICAgIC8vIDIxLjMuNCBlbGVtZW50IGFjY2VzczoKKyAgICBjb25zdF9yZWZlcmVuY2UKKyAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX3BvcykgY29uc3QKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19wb3MgPD0gdGhpcy0+c2l6ZSgpLAorCQkJICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX3N1YnNjcmlwdF9vb2IpCisJCQkgICAgLl9NX3NlcXVlbmNlKCp0aGlzLCAidGhpcyIpCisJCQkgICAgLl9NX2ludGVnZXIoX19wb3MsICJfX3BvcyIpCisJCQkgICAgLl9NX2ludGVnZXIodGhpcy0+c2l6ZSgpLCAic2l6ZSIpKTsKKyAgICAgIHJldHVybiBfTV9iYXNlKClbX19wb3NdOworICAgIH0KKworICAgIHJlZmVyZW5jZQorICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fcG9zKQorICAgIHsKKyNpZmRlZiBfR0xJQkNYWF9ERUJVR19QRURBTlRJQworICAgICAgX19nbGliY3h4X2NoZWNrX3N1YnNjcmlwdChfX3Bvcyk7CisjZWxzZQorICAgICAgLy8gYXMgYW4gZXh0ZW5zaW9uIHYzIGFsbG93cyBzW3Muc2l6ZSgpXSB3aGVuIHMgaXMgbm9uLWNvbnN0LgorICAgICAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9fcG9zIDw9IHRoaXMtPnNpemUoKSwKKwkJCSAgICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ19zdWJzY3JpcHRfb29iKQorCQkJICAgIC5fTV9zZXF1ZW5jZSgqdGhpcywgInRoaXMiKQorCQkJICAgIC5fTV9pbnRlZ2VyKF9fcG9zLCAiX19wb3MiKQorCQkJICAgIC5fTV9pbnRlZ2VyKHRoaXMtPnNpemUoKSwgInNpemUiKSk7CisjZW5kaWYKKyAgICAgIHJldHVybiBfTV9iYXNlKClbX19wb3NdOworICAgIH0KKworICAgIHVzaW5nIF9CYXNlOjphdDsKKworICAgIC8vIDIxLjMuNSBtb2RpZmllcnM6CisgICAgYmFzaWNfc3RyaW5nJgorICAgIG9wZXJhdG9yKz0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKKyAgICB7CisgICAgICBfTV9iYXNlKCkgKz0gX19zdHI7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJhc2ljX3N0cmluZyYKKyAgICBvcGVyYXRvcis9KGNvbnN0IF9DaGFyVCogX19zKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19zKTsKKyAgICAgIF9NX2Jhc2UoKSArPSBfX3M7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJhc2ljX3N0cmluZyYKKyAgICBvcGVyYXRvcis9KF9DaGFyVCBfX2MpCisgICAgeworICAgICAgX01fYmFzZSgpICs9IF9fYzsKKyAgICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICBiYXNpY19zdHJpbmcmCisgICAgb3BlcmF0b3IrPShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X0NoYXJUPiBfX2wpCisgICAgeworICAgICAgX01fYmFzZSgpICs9IF9fbDsKKyAgICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorI2VuZGlmIC8vIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisKKyAgICBiYXNpY19zdHJpbmcmCisgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCisgICAgeworICAgICAgX0Jhc2U6OmFwcGVuZChfX3N0cik7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJhc2ljX3N0cmluZyYKKyAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQorICAgIHsKKyAgICAgIF9CYXNlOjphcHBlbmQoX19zdHIsIF9fcG9zLCBfX24pOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBiYXNpY19zdHJpbmcmCisgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmdfbGVuKF9fcywgX19uKTsKKyAgICAgIF9CYXNlOjphcHBlbmQoX19zLCBfX24pOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBiYXNpY19zdHJpbmcmCisgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19zKTsKKyAgICAgIF9CYXNlOjphcHBlbmQoX19zKTsKKyAgICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgYmFzaWNfc3RyaW5nJgorICAgIGFwcGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQorICAgIHsKKyAgICAgIF9CYXNlOjphcHBlbmQoX19uLCBfX2MpOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIGFwcGVuZChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisJX0Jhc2U6OmFwcGVuZChfX2ZpcnN0LCBfX2xhc3QpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgIC8vIDcuIHN0cmluZyBjbGF1c2UgbWlub3IgcHJvYmxlbXMKKyAgICB2b2lkCisgICAgcHVzaF9iYWNrKF9DaGFyVCBfX2MpCisgICAgeworICAgICAgX0Jhc2U6OnB1c2hfYmFjayhfX2MpOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICB9CisKKyAgICBiYXNpY19zdHJpbmcmCisgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX194KQorICAgIHsKKyAgICAgIF9CYXNlOjphc3NpZ24oX194KTsKKyAgICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICBiYXNpY19zdHJpbmcmCisgICAgYXNzaWduKGJhc2ljX3N0cmluZyYmIF9feCkKKyAgICB7CisgICAgICBfQmFzZTo6YXNzaWduKHN0ZDo6Zm9yd2FyZDxfQmFzZT4oX194KSk7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyNlbmRpZiAvLyBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworCisgICAgYmFzaWNfc3RyaW5nJgorICAgIGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgX0Jhc2U6OmFzc2lnbihfX3N0ciwgX19wb3MsIF9fbik7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJhc2ljX3N0cmluZyYKKyAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZ19sZW4oX19zLCBfX24pOworICAgICAgX0Jhc2U6OmFzc2lnbihfX3MsIF9fbik7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJhc2ljX3N0cmluZyYKKyAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MpCisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfX3MpOworICAgICAgX0Jhc2U6OmFzc2lnbihfX3MpOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBiYXNpY19zdHJpbmcmCisgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCisgICAgeworICAgICAgX0Jhc2U6OmFzc2lnbihfX24sIF9fYyk7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKwlfQmFzZTo6YXNzaWduKF9fZmlyc3QsIF9fbGFzdCk7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgIGJhc2ljX3N0cmluZyYKKyAgICBhc3NpZ24oc3RkOjppbml0aWFsaXplcl9saXN0PF9DaGFyVD4gX19sKQorICAgIHsKKyAgICAgIF9CYXNlOjphc3NpZ24oX19sKTsKKyAgICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorI2VuZGlmIC8vIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisKKyAgICBiYXNpY19zdHJpbmcmCisgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCisgICAgeworICAgICAgX0Jhc2U6Omluc2VydChfX3BvczEsIF9fc3RyKTsKKyAgICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgYmFzaWNfc3RyaW5nJgorICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAorCSAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgX0Jhc2U6Omluc2VydChfX3BvczEsIF9fc3RyLCBfX3BvczIsIF9fbik7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJhc2ljX3N0cmluZyYKKyAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nKF9fcyk7CisgICAgICBfQmFzZTo6aW5zZXJ0KF9fcG9zLCBfX3MsIF9fbik7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJhc2ljX3N0cmluZyYKKyAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcykKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nKF9fcyk7CisgICAgICBfQmFzZTo6aW5zZXJ0KF9fcG9zLCBfX3MpOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBiYXNpY19zdHJpbmcmCisgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKKyAgICB7CisgICAgICBfQmFzZTo6aW5zZXJ0KF9fcG9zLCBfX24sIF9fYyk7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGl0ZXJhdG9yCisgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0NoYXJUIF9fYykKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9fcCk7CisgICAgICB0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgX19yZXMgPSBfQmFzZTo6aW5zZXJ0KF9fcC5iYXNlKCksIF9fYyk7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9fcmVzLCB0aGlzKTsKKyAgICB9CisKKyAgICB2b2lkCisgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9fcCk7CisgICAgICBfQmFzZTo6aW5zZXJ0KF9fcC5iYXNlKCksIF9fbiwgX19jKTsKKyAgICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICB2b2lkCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2luc2VydF9yYW5nZShfX3AsIF9fZmlyc3QsIF9fbGFzdCk7CisJX0Jhc2U6Omluc2VydChfX3AuYmFzZSgpLCBfX2ZpcnN0LCBfX2xhc3QpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgIHZvaWQKKyAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X0NoYXJUPiBfX2wpCisgICAgeworICAgICAgX0Jhc2U6Omluc2VydChfX3AsIF9fbCk7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgIH0KKyNlbmRpZiAvLyBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworCisgICAgYmFzaWNfc3RyaW5nJgorICAgIGVyYXNlKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBfQmFzZTo6bnBvcykKKyAgICB7CisgICAgICBfQmFzZTo6ZXJhc2UoX19wb3MsIF9fbik7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGl0ZXJhdG9yCisgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfZXJhc2UoX19wb3NpdGlvbik7CisgICAgICB0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgX19yZXMgPSBfQmFzZTo6ZXJhc2UoX19wb3NpdGlvbi5iYXNlKCkpOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiBpdGVyYXRvcihfX3JlcywgdGhpcyk7CisgICAgfQorCisgICAgaXRlcmF0b3IKKyAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMTUxLiBjYW4ndCBjdXJyZW50bHkgY2xlYXIoKSBlbXB0eSBjb250YWluZXIKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19lcmFzZV9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworICAgICAgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIF9fcmVzID0gX0Jhc2U6OmVyYXNlKF9fZmlyc3QuYmFzZSgpLAorCQkJCQkJICAgICAgIF9fbGFzdC5iYXNlKCkpOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiBpdGVyYXRvcihfX3JlcywgdGhpcyk7CisgICAgfQorCisgICAgYmFzaWNfc3RyaW5nJgorICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCisgICAgeworICAgICAgX0Jhc2U6OnJlcGxhY2UoX19wb3MxLCBfX24xLCBfX3N0cik7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJhc2ljX3N0cmluZyYKKyAgICByZXBsYWNlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAorCSAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMikKKyAgICB7CisgICAgICBfQmFzZTo6cmVwbGFjZShfX3BvczEsIF9fbjEsIF9fc3RyLCBfX3BvczIsIF9fbjIpOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBiYXNpY19zdHJpbmcmCisgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKKwkgICAgc2l6ZV90eXBlIF9fbjIpCisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZ19sZW4oX19zLCBfX24yKTsKKyAgICAgIF9CYXNlOjpyZXBsYWNlKF9fcG9zLCBfX24xLCBfX3MsIF9fbjIpOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBiYXNpY19zdHJpbmcmCisgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nKF9fcyk7CisgICAgICBfQmFzZTo6cmVwbGFjZShfX3BvcywgX19uMSwgX19zKTsKKyAgICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgYmFzaWNfc3RyaW5nJgorICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgc2l6ZV90eXBlIF9fbjIsIF9DaGFyVCBfX2MpCisgICAgeworICAgICAgX0Jhc2U6OnJlcGxhY2UoX19wb3MsIF9fbjEsIF9fbjIsIF9fYyk7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJhc2ljX3N0cmluZyYKKyAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX2VyYXNlX3JhbmdlKF9faTEsIF9faTIpOworICAgICAgX0Jhc2U6OnJlcGxhY2UoX19pMS5iYXNlKCksIF9faTIuYmFzZSgpLCBfX3N0cik7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJhc2ljX3N0cmluZyYKKyAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19lcmFzZV9yYW5nZShfX2kxLCBfX2kyKTsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmdfbGVuKF9fcywgX19uKTsKKyAgICAgIF9CYXNlOjpyZXBsYWNlKF9faTEuYmFzZSgpLCBfX2kyLmJhc2UoKSwgX19zLCBfX24pOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBiYXNpY19zdHJpbmcmCisgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBfQ2hhclQqIF9fcykKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfZXJhc2VfcmFuZ2UoX19pMSwgX19pMik7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nKF9fcyk7CisgICAgICBfQmFzZTo6cmVwbGFjZShfX2kxLmJhc2UoKSwgX19pMi5iYXNlKCksIF9fcyk7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJhc2ljX3N0cmluZyYKKyAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX2VyYXNlX3JhbmdlKF9faTEsIF9faTIpOworICAgICAgX0Jhc2U6OnJlcGxhY2UoX19pMS5iYXNlKCksIF9faTIuYmFzZSgpLCBfX24sIF9fYyk7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLAorCSAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fajEsIF9JbnB1dEl0ZXJhdG9yIF9fajIpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2VyYXNlX3JhbmdlKF9faTEsIF9faTIpOworCV9fZ2xpYmN4eF9jaGVja192YWxpZF9yYW5nZShfX2oxLCBfX2oyKTsKKwlfQmFzZTo6cmVwbGFjZShfX2kxLmJhc2UoKSwgX19pMi5iYXNlKCksIF9fajEsIF9fajIpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIGJhc2ljX3N0cmluZyYgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLAorCQkJICAgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfQ2hhclQ+IF9fbCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfZXJhc2VfcmFuZ2UoX19pMSwgX19pMik7CisJX0Jhc2U6OnJlcGxhY2UoX19pMS5iYXNlKCksIF9faTIuYmFzZSgpLCBfX2wpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorI2VuZGlmIC8vIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisKKyAgICBzaXplX3R5cGUKKyAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmdfbGVuKF9fcywgX19uKTsKKyAgICAgIHJldHVybiBfQmFzZTo6Y29weShfX3MsIF9fbiwgX19wb3MpOworICAgIH0KKworICAgIHZvaWQKKyAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPiYgX194KQorICAgIHsKKyAgICAgIF9CYXNlOjpzd2FwKF9feCk7CisgICAgICB0aGlzLT5fTV9zd2FwKF9feCk7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgX194Ll9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgfQorCisgICAgLy8gMjEuMy42IHN0cmluZyBvcGVyYXRpb25zOgorICAgIGNvbnN0IF9DaGFyVCoKKyAgICBjX3N0cigpIGNvbnN0CisgICAgeworICAgICAgY29uc3QgX0NoYXJUKiBfX3JlcyA9IF9CYXNlOjpjX3N0cigpOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiBfX3JlczsKKyAgICB9CisKKyAgICBjb25zdCBfQ2hhclQqCisgICAgZGF0YSgpIGNvbnN0CisgICAgeworICAgICAgY29uc3QgX0NoYXJUKiBfX3JlcyA9IF9CYXNlOjpkYXRhKCk7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuIF9fcmVzOworICAgIH0KKworICAgIHVzaW5nIF9CYXNlOjpnZXRfYWxsb2NhdG9yOworCisgICAgc2l6ZV90eXBlCisgICAgZmluZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAorICAgIHsgcmV0dXJuIF9CYXNlOjpmaW5kKF9fc3RyLCBfX3Bvcyk7IH0KKworICAgIHNpemVfdHlwZQorICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nKF9fcyk7CisgICAgICByZXR1cm4gX0Jhc2U6OmZpbmQoX19zLCBfX3BvcywgX19uKTsKKyAgICB9CisKKyAgICBzaXplX3R5cGUKKyAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19zKTsKKyAgICAgIHJldHVybiBfQmFzZTo6ZmluZChfX3MsIF9fcG9zKTsKKyAgICB9CisKKyAgICBzaXplX3R5cGUKKyAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CisgICAgeyByZXR1cm4gX0Jhc2U6OmZpbmQoX19jLCBfX3Bvcyk7IH0KKworICAgIHNpemVfdHlwZQorICAgIHJmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IF9CYXNlOjpucG9zKSBjb25zdAorICAgIHsgcmV0dXJuIF9CYXNlOjpyZmluZChfX3N0ciwgX19wb3MpOyB9CisKKyAgICBzaXplX3R5cGUKKyAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmdfbGVuKF9fcywgX19uKTsKKyAgICAgIHJldHVybiBfQmFzZTo6cmZpbmQoX19zLCBfX3BvcywgX19uKTsKKyAgICB9CisKKyAgICBzaXplX3R5cGUKKyAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gX0Jhc2U6Om5wb3MpIGNvbnN0CisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfX3MpOworICAgICAgcmV0dXJuIF9CYXNlOjpyZmluZChfX3MsIF9fcG9zKTsKKyAgICB9CisKKyAgICBzaXplX3R5cGUKKyAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBfQmFzZTo6bnBvcykgY29uc3QKKyAgICB7IHJldHVybiBfQmFzZTo6cmZpbmQoX19jLCBfX3Bvcyk7IH0KKworICAgIHNpemVfdHlwZQorICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKKyAgICB7IHJldHVybiBfQmFzZTo6ZmluZF9maXJzdF9vZihfX3N0ciwgX19wb3MpOyB9CisKKyAgICBzaXplX3R5cGUKKyAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfX3MpOworICAgICAgcmV0dXJuIF9CYXNlOjpmaW5kX2ZpcnN0X29mKF9fcywgX19wb3MsIF9fbik7CisgICAgfQorCisgICAgc2l6ZV90eXBlCisgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nKF9fcyk7CisgICAgICByZXR1cm4gX0Jhc2U6OmZpbmRfZmlyc3Rfb2YoX19zLCBfX3Bvcyk7CisgICAgfQorCisgICAgc2l6ZV90eXBlCisgICAgZmluZF9maXJzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAorICAgIHsgcmV0dXJuIF9CYXNlOjpmaW5kX2ZpcnN0X29mKF9fYywgX19wb3MpOyB9CisKKyAgICBzaXplX3R5cGUKKyAgICBmaW5kX2xhc3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgCisJCSBzaXplX3R5cGUgX19wb3MgPSBfQmFzZTo6bnBvcykgY29uc3QKKyAgICB7IHJldHVybiBfQmFzZTo6ZmluZF9sYXN0X29mKF9fc3RyLCBfX3Bvcyk7IH0KKworICAgIHNpemVfdHlwZQorICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19zKTsKKyAgICAgIHJldHVybiBfQmFzZTo6ZmluZF9sYXN0X29mKF9fcywgX19wb3MsIF9fbik7CisgICAgfQorCisgICAgc2l6ZV90eXBlCisgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBfQmFzZTo6bnBvcykgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nKF9fcyk7CisgICAgICByZXR1cm4gX0Jhc2U6OmZpbmRfbGFzdF9vZihfX3MsIF9fcG9zKTsKKyAgICB9CisKKyAgICBzaXplX3R5cGUKKyAgICBmaW5kX2xhc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gX0Jhc2U6Om5wb3MpIGNvbnN0CisgICAgeyByZXR1cm4gX0Jhc2U6OmZpbmRfbGFzdF9vZihfX2MsIF9fcG9zKTsgfQorCisgICAgc2l6ZV90eXBlCisgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKKyAgICB7IHJldHVybiBfQmFzZTo6ZmluZF9maXJzdF9ub3Rfb2YoX19zdHIsIF9fcG9zKTsgfQorCisgICAgc2l6ZV90eXBlCisgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nX2xlbihfX3MsIF9fbik7CisgICAgICByZXR1cm4gX0Jhc2U6OmZpbmRfZmlyc3Rfbm90X29mKF9fcywgX19wb3MsIF9fbik7CisgICAgfQorCisgICAgc2l6ZV90eXBlCisgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfX3MpOworICAgICAgcmV0dXJuIF9CYXNlOjpmaW5kX2ZpcnN0X25vdF9vZihfX3MsIF9fcG9zKTsKKyAgICB9CisKKyAgICBzaXplX3R5cGUKKyAgICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAorICAgIHsgcmV0dXJuIF9CYXNlOjpmaW5kX2ZpcnN0X25vdF9vZihfX2MsIF9fcG9zKTsgfQorCisgICAgc2l6ZV90eXBlCisgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAorCQkJCSAgc2l6ZV90eXBlIF9fcG9zID0gX0Jhc2U6Om5wb3MpIGNvbnN0CisgICAgeyByZXR1cm4gX0Jhc2U6OmZpbmRfbGFzdF9ub3Rfb2YoX19zdHIsIF9fcG9zKTsgfQorCisgICAgc2l6ZV90eXBlCisgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19zKTsKKyAgICAgIHJldHVybiBfQmFzZTo6ZmluZF9sYXN0X25vdF9vZihfX3MsIF9fcG9zLCBfX24pOworICAgIH0KKworICAgIHNpemVfdHlwZQorICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IF9CYXNlOjpucG9zKSBjb25zdAorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19zKTsKKyAgICAgIHJldHVybiBfQmFzZTo6ZmluZF9sYXN0X25vdF9vZihfX3MsIF9fcG9zKTsKKyAgICB9CisKKyAgICBzaXplX3R5cGUKKyAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IF9CYXNlOjpucG9zKSBjb25zdAorICAgIHsgcmV0dXJuIF9CYXNlOjpmaW5kX2xhc3Rfbm90X29mKF9fYywgX19wb3MpOyB9CisKKyAgICBiYXNpY19zdHJpbmcKKyAgICBzdWJzdHIoc2l6ZV90eXBlIF9fcG9zID0gMCwgc2l6ZV90eXBlIF9fbiA9IF9CYXNlOjpucG9zKSBjb25zdAorICAgIHsgcmV0dXJuIGJhc2ljX3N0cmluZyhfQmFzZTo6c3Vic3RyKF9fcG9zLCBfX24pKTsgfQorCisgICAgaW50CisgICAgY29tcGFyZShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAorICAgIHsgcmV0dXJuIF9CYXNlOjpjb21wYXJlKF9fc3RyKTsgfQorCisgICAgaW50CisgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwKKwkJICBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAorICAgIHsgcmV0dXJuIF9CYXNlOjpjb21wYXJlKF9fcG9zMSwgX19uMSwgX19zdHIpOyB9CisKKyAgICBpbnQKKyAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAorCSAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdAorICAgIHsgcmV0dXJuIF9CYXNlOjpjb21wYXJlKF9fcG9zMSwgX19uMSwgX19zdHIsIF9fcG9zMiwgX19uMik7IH0KKworICAgIGludAorICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfX3MpOworICAgICAgcmV0dXJuIF9CYXNlOjpjb21wYXJlKF9fcyk7CisgICAgfQorCisgICAgLy8gIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAvLyAgNS4gc3RyaW5nOjpjb21wYXJlIHNwZWNpZmljYXRpb24gcXVlc3Rpb25hYmxlCisgICAgaW50CisgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfX3MpOworICAgICAgcmV0dXJuIF9CYXNlOjpjb21wYXJlKF9fcG9zMSwgX19uMSwgX19zKTsKKyAgICB9CisKKyAgICAvLyAgX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgIC8vICA1LiBzdHJpbmc6OmNvbXBhcmUgc3BlY2lmaWNhdGlvbiBxdWVzdGlvbmFibGUKKyAgICBpbnQKKyAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLGNvbnN0IF9DaGFyVCogX19zLAorCSAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdAorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmdfbGVuKF9fcywgX19uMik7CisgICAgICByZXR1cm4gX0Jhc2U6OmNvbXBhcmUoX19wb3MxLCBfX24xLCBfX3MsIF9fbjIpOworICAgIH0KKworICAgIF9CYXNlJgorICAgIF9NX2Jhc2UoKSB7IHJldHVybiAqdGhpczsgfQorCisgICAgY29uc3QgX0Jhc2UmCisgICAgX01fYmFzZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICB1c2luZyBfU2FmZV9iYXNlOjpfTV9pbnZhbGlkYXRlX2FsbDsKKyAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPgorICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+KF9fbGhzKSArPSBfX3JoczsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+CisgICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsCisJICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nKF9fbGhzKTsKKyAgICAgIHJldHVybiBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4oX19saHMpICs9IF9fcmhzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPgorICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsCisJICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4oMSwgX19saHMpICs9IF9fcmhzOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4KKyAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19yaHMpOworICAgICAgcmV0dXJuIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPihfX2xocykgKz0gX19yaHM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+CisgICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgX0NoYXJUIF9fcmhzKQorICAgIHsgcmV0dXJuIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPihfX2xocykgKz0gX19yaHM7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID09IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX0NoYXJUKiBfX2xocywKKwkgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nKF9fbGhzKTsKKyAgICAgIHJldHVybiBfX2xocyA9PSBfX3Jocy5fTV9iYXNlKCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nKF9fcmhzKTsKKyAgICAgIHJldHVybiBfX2xocy5fTV9iYXNlKCkgPT0gX19yaHM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgIT0gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBfQ2hhclQqIF9fbGhzLAorCSAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19saHMpOworICAgICAgcmV0dXJuIF9fbGhzICE9IF9fcmhzLl9NX2Jhc2UoKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19yaHMpOworICAgICAgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSAhPSBfX3JoczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPCBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgX0NoYXJUKiBfX2xocywKKwkgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19saHMpOworICAgICAgcmV0dXJuIF9fbGhzIDwgX19yaHMuX01fYmFzZSgpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19yaHMpOworICAgICAgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA8IF9fcmhzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpIDw9IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgX0NoYXJUKiBfX2xocywKKwkgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nKF9fbGhzKTsKKyAgICAgIHJldHVybiBfX2xocyA8PSBfX3Jocy5fTV9iYXNlKCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nKF9fcmhzKTsKKyAgICAgIHJldHVybiBfX2xocy5fTV9iYXNlKCkgPD0gX19yaHM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPj0gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBfQ2hhclQqIF9fbGhzLAorCSAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19saHMpOworICAgICAgcmV0dXJuIF9fbGhzID49IF9fcmhzLl9NX2Jhc2UoKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19yaHMpOworICAgICAgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA+PSBfX3JoczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPiBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgX0NoYXJUKiBfX2xocywKKwkgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19saHMpOworICAgICAgcmV0dXJuIF9fbGhzID4gX19yaHMuX01fYmFzZSgpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19yaHMpOworICAgICAgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA+IF9fcmhzOworICAgIH0KKworICAvLyAyMS4zLjcuODoKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fbGhzLAorCSBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jYXRvcj4mIF9fc3RyKQorICAgIHsgcmV0dXJuIF9fb3MgPDwgX19zdHIuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fc3RyKQorICAgIHsKKyAgICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fcmVzID0gX19pcyA+PiBfX3N0ci5fTV9iYXNlKCk7CisgICAgICBfX3N0ci5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuIF9fcmVzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKKyAgICBnZXRsaW5lKHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9faXMsCisJICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPiYgX19zdHIsIF9DaGFyVCBfX2RlbGltKQorICAgIHsKKyAgICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fcmVzID0gZ2V0bGluZShfX2lzLAorCQkJCQkJCSAgX19zdHIuX01fYmFzZSgpLAorCQkJCQkJCV9fZGVsaW0pOworICAgICAgX19zdHIuX01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiBfX3JlczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCisgICAgZ2V0bGluZShzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2lzLAorCSAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fc3RyKQorICAgIHsKKyAgICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fcmVzID0gZ2V0bGluZShfX2lzLAorCQkJCQkJCSAgX19zdHIuX01fYmFzZSgpKTsKKyAgICAgIF9fc3RyLl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICByZXR1cm4gX19yZXM7CisgICAgfQorCisgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXI+ICAgIHN0cmluZzsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPHdjaGFyX3Q+IHdzdHJpbmc7CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgX19nbnVfZGVidWcKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlYnVnL3Vub3JkZXJlZF9tYXAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlYnVnL3Vub3JkZXJlZF9tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRjOWZhMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZGVidWcvdW5vcmRlcmVkX21hcApAQCAtMCwwICsxLDU1OCBAQAorLy8gRGVidWdnaW5nIHVub3JkZXJlZF9tYXAvdW5vcmRlcmVkX211bHRpbWFwIGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGRlYnVnL3Vub3JkZXJlZF9tYXAKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZGVidWcgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0RFQlVHX1VOT1JERVJFRF9NQVAKKyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfVU5PUkRFUkVEX01BUCAxCisKKyNpZm5kZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyMgaW5jbHVkZSA8Yml0cy9jKysweF93YXJuaW5nLmg+CisjZWxzZQorIyBpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorCisjaW5jbHVkZSA8ZGVidWcvc2FmZV9zZXF1ZW5jZS5oPgorI2luY2x1ZGUgPGRlYnVnL3NhZmVfaXRlcmF0b3IuaD4KKworbmFtZXNwYWNlIHN0ZAoreworbmFtZXNwYWNlIF9fZGVidWcKK3sKKyAgLy8vIENsYXNzIHN0ZDo6dW5vcmRlcmVkX21hcCB3aXRoIHNhZmV0eS9jaGVja2luZy9kZWJ1ZyBpbnN0cnVtZW50YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfSGFzaCA9IHN0ZDo6aGFzaDxfS2V5PiwKKwkgICB0eXBlbmFtZSBfUHJlZCA9IHN0ZDo6ZXF1YWxfdG88X0tleT4sCisJICAgdHlwZW5hbWUgX0FsbG9jID0gc3RkOjphbGxvY2F0b3I8X0tleT4gPgorICAgIGNsYXNzIHVub3JkZXJlZF9tYXAKKyAgICA6IHB1YmxpYyBfR0xJQkNYWF9TVERfRDo6dW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiwKKyAgICAgIHB1YmxpYyBfX2dudV9kZWJ1Zzo6X1NhZmVfc2VxdWVuY2U8dW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLAorCQkJCQkJICAgICAgIF9QcmVkLCBfQWxsb2M+ID4KKyAgICB7CisgICAgICB0eXBlZGVmIF9HTElCQ1hYX1NURF9EOjp1bm9yZGVyZWRfbWFwPF9LZXksIF9UcCwgX0hhc2gsCisJCQkJCSAgICBfUHJlZCwgX0FsbG9jPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX3NlcXVlbmNlPHVub3JkZXJlZF9tYXA+IF9TYWZlX2Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aGFzaGVyICAgICAgICAgIGhhc2hlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmtleV9lcXVhbCAgICAgICBrZXlfZXF1YWw7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSAgYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmtleV90eXBlICAgICAgICBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgICAgICB2YWx1ZV90eXBlOworCisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9pdGVyYXRvcjx0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IsCisJCQkJCSAgdW5vcmRlcmVkX21hcD4gaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9pdGVyYXRvcjx0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IsCisJCQkJCSAgdW5vcmRlcmVkX21hcD4gY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICB1bm9yZGVyZWRfbWFwKHNpemVfdHlwZSBfX24gPSAxMCwKKwkJICAgIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLAorCQkgICAgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLAorCQkgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fbiwgX19oZiwgX19lcWwsIF9fYSkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB1bm9yZGVyZWRfbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCAKKwkJICAgICAgc2l6ZV90eXBlIF9fbiA9IDEwLAorCQkgICAgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwgCisJCSAgICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwgCisJCSAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX0Jhc2UoX19nbnVfZGVidWc6Ol9fY2hlY2tfdmFsaWRfcmFuZ2UoX19mLCBfX2wpLCBfX2wsIF9fbiwKKwkJX19oZiwgX19lcWwsIF9fYSksIF9TYWZlX2Jhc2UoKSB7IH0KKworICAgICAgdW5vcmRlcmVkX21hcChjb25zdCB1bm9yZGVyZWRfbWFwJiBfX3gpIAorICAgICAgOiBfQmFzZShfX3gpLCBfU2FmZV9iYXNlKCkgeyB9CisKKyAgICAgIHVub3JkZXJlZF9tYXAoY29uc3QgX0Jhc2UmIF9feCkKKyAgICAgIDogX0Jhc2UoX194KSwgX1NhZmVfYmFzZSgpIHsgfQorCisgICAgICB1bm9yZGVyZWRfbWFwKHVub3JkZXJlZF9tYXAmJiBfX3gpCisgICAgICA6IF9CYXNlKHN0ZDo6Zm9yd2FyZDx1bm9yZGVyZWRfbWFwPihfX3gpKSwgX1NhZmVfYmFzZSgpIHsgfQorCisgICAgICB1bm9yZGVyZWRfbWFwKGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sLAorCQkgICAgc2l6ZV90eXBlIF9fbiA9IDEwLAorCQkgICAgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCSAgICBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCSAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19sLCBfX24sIF9faGYsIF9fZXFsLCBfX2EpLCBfU2FmZV9iYXNlKCkgeyB9CisKKyAgICAgIHVub3JkZXJlZF9tYXAmCisgICAgICBvcGVyYXRvcj0oY29uc3QgdW5vcmRlcmVkX21hcCYgX194KQorICAgICAgeworCSpzdGF0aWNfY2FzdDxfQmFzZSo+KHRoaXMpID0gX194OworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB1bm9yZGVyZWRfbWFwJgorICAgICAgb3BlcmF0b3I9KHVub3JkZXJlZF9tYXAmJiBfX3gpCisgICAgICB7CisgICAJLy8gTkI6IERSIDEyMDQuCisJLy8gTkI6IERSIDY3NS4KKwljbGVhcigpOworCXN3YXAoX194KTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHVub3JkZXJlZF9tYXAmCisgICAgICBvcGVyYXRvcj0oaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7CisJdGhpcy0+Y2xlYXIoKTsKKwl0aGlzLT5pbnNlcnQoX19sKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAodW5vcmRlcmVkX21hcCYgX194KQorICAgICAgeworCV9CYXNlOjpzd2FwKF9feCk7CisJX1NhZmVfYmFzZTo6X01fc3dhcChfX3gpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBjbGVhcigpCisgICAgICB7CisJX0Jhc2U6OmNsZWFyKCk7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IgCisgICAgICBiZWdpbigpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplbmQoKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjplbmQoKSwgdGhpcyk7IH0KKworICAgICAgLy8gbG9jYWwgdmVyc2lvbnMKKyAgICAgIHVzaW5nIF9CYXNlOjpiZWdpbjsKKyAgICAgIHVzaW5nIF9CYXNlOjplbmQ7CisgICAgICB1c2luZyBfQmFzZTo6Y2JlZ2luOworICAgICAgdXNpbmcgX0Jhc2U6OmNlbmQ7CisKKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICAgIHsKKwl0eXBlZGVmIHN0ZDo6cGFpcjx0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IsIGJvb2w+IF9fcGFpcl90eXBlOworCV9fcGFpcl90eXBlIF9fcmVzID0gX0Jhc2U6Omluc2VydChfX29iaik7CisJcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGl0ZXJhdG9yKF9fcmVzLmZpcnN0LCB0aGlzKSwgX19yZXMuc2Vjb25kKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdF9pdGVyYXRvciwgY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCisgICAgICB7CisJdHlwZWRlZiBzdGQ6OnBhaXI8dHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yLCBib29sPiBfX3BhaXJfdHlwZTsKKwlfX3BhaXJfdHlwZSBfX3JlcyA9IF9CYXNlOjppbnNlcnQoX19vYmopOworCXJldHVybiBpdGVyYXRvcihfX3Jlcy5maXJzdCwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeyBfQmFzZTo6aW5zZXJ0KF9fbCk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeworCSAgX19nbGliY3h4X2NoZWNrX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisJICBfQmFzZTo6aW5zZXJ0KF9fZmlyc3QsIF9fbGFzdCk7CisJfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rZXkpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZmluZChfX2tleSksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpmaW5kKF9fa2V5KSwgdGhpcyk7IH0KKworICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2tleSkKKyAgICAgIHsKKwl0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBfQmFzZV9pdGVyYXRvcjsKKwl0eXBlZGVmIHN0ZDo6cGFpcjxfQmFzZV9pdGVyYXRvciwgX0Jhc2VfaXRlcmF0b3I+IF9fcGFpcl90eXBlOworCV9fcGFpcl90eXBlIF9fcmVzID0gX0Jhc2U6OmVxdWFsX3JhbmdlKF9fa2V5KTsKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoaXRlcmF0b3IoX19yZXMuZmlyc3QsIHRoaXMpLAorCQkJICAgICAgaXRlcmF0b3IoX19yZXMuc2Vjb25kLCB0aGlzKSk7CisgICAgICB9CisKKyAgICAgIHN0ZDo6cGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IgX0Jhc2VfaXRlcmF0b3I7CisJdHlwZWRlZiBzdGQ6OnBhaXI8X0Jhc2VfaXRlcmF0b3IsIF9CYXNlX2l0ZXJhdG9yPiBfX3BhaXJfdHlwZTsKKwlfX3BhaXJfdHlwZSBfX3JlcyA9IF9CYXNlOjplcXVhbF9yYW5nZShfX2tleSk7CisJcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGNvbnN0X2l0ZXJhdG9yKF9fcmVzLmZpcnN0LCB0aGlzKSwKKwkJCSAgICAgIGNvbnN0X2l0ZXJhdG9yKF9fcmVzLnNlY29uZCwgdGhpcykpOworICAgICAgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX2tleSkKKyAgICAgIHsKKwlzaXplX3R5cGUgX19yZXQoMCk7CisJaXRlcmF0b3IgX192aWN0aW0oX0Jhc2U6OmZpbmQoX19rZXkpLCB0aGlzKTsKKwlpZiAoX192aWN0aW0gIT0gZW5kKCkpCisJICB7CisJICAgIHRoaXMtPmVyYXNlKF9fdmljdGltKTsKKwkgICAgX19yZXQgPSAxOworCSAgfQorCXJldHVybiBfX3JldDsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9faXQpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2VyYXNlKF9faXQpOworCV9faXQuX01faW52YWxpZGF0ZSgpOworCXJldHVybiBpdGVyYXRvcihfQmFzZTo6ZXJhc2UoX19pdC5iYXNlKCkpLCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QsIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfZXJhc2VfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKwlmb3IgKGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gX19maXJzdDsgX190bXAgIT0gX19sYXN0OykKKwl7CisJICBjb25zdF9pdGVyYXRvciBfX3ZpY3RpbSA9IF9fdG1wKys7CisJICBfX3ZpY3RpbS5fTV9pbnZhbGlkYXRlKCk7CisJfQorCXJldHVybiBpdGVyYXRvcihfQmFzZTo6ZXJhc2UoX19maXJzdC5iYXNlKCksCisJCQkJICAgICBfX2xhc3QuYmFzZSgpKSwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIF9CYXNlJgorICAgICAgX01fYmFzZSgpIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIGNvbnN0IF9CYXNlJgorICAgICAgX01fYmFzZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgdm9pZAorICAgICAgX01faW52YWxpZGF0ZV9hbGwoKQorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yIF9CYXNlX2NvbnN0X2l0ZXJhdG9yOworCXR5cGVkZWYgX19nbnVfZGVidWc6Ol9Ob3RfZXF1YWxfdG88X0Jhc2VfY29uc3RfaXRlcmF0b3I+IF9Ob3RfZXF1YWw7CisJdGhpcy0+X01faW52YWxpZGF0ZV9pZihfTm90X2VxdWFsKF9NX2Jhc2UoKS5lbmQoKSkpOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSGFzaCwKKwkgICB0eXBlbmFtZSBfUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcCh1bm9yZGVyZWRfbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJIHVub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9IYXNoLAorCSAgIHR5cGVuYW1lIF9QcmVkLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IHVub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgdW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5fTV9lcXVhbChfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSGFzaCwKKwkgICB0eXBlbmFtZSBfUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCB1bm9yZGVyZWRfbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IHVub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CisKKworICAvLy8gQ2xhc3Mgc3RkOjp1bm9yZGVyZWRfbXVsdGltYXAgd2l0aCBzYWZldHkvY2hlY2tpbmcvZGVidWcgaW5zdHJ1bWVudGF0aW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0hhc2ggPSBzdGQ6Omhhc2g8X0tleT4sCisJICAgdHlwZW5hbWUgX1ByZWQgPSBzdGQ6OmVxdWFsX3RvPF9LZXk+LAorCSAgIHR5cGVuYW1lIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPF9LZXk+ID4KKyAgICBjbGFzcyB1bm9yZGVyZWRfbXVsdGltYXAKKyAgICA6IHB1YmxpYyBfR0xJQkNYWF9TVERfRDo6dW5vcmRlcmVkX211bHRpbWFwPF9LZXksIF9UcCwgX0hhc2gsCisJCQkJCQlfUHJlZCwgX0FsbG9jPiwKKyAgICAgIHB1YmxpYyBfX2dudV9kZWJ1Zzo6X1NhZmVfc2VxdWVuY2U8dW5vcmRlcmVkX211bHRpbWFwPF9LZXksIF9UcCwgX0hhc2gsCisJCQkJCQkJICAgIF9QcmVkLCBfQWxsb2M+ID4KKyAgICB7CisgICAgICB0eXBlZGVmIF9HTElCQ1hYX1NURF9EOjp1bm9yZGVyZWRfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaCwKKwkJCQkJCSBfUHJlZCwgX0FsbG9jPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX3NlcXVlbmNlPHVub3JkZXJlZF9tdWx0aW1hcD4gX1NhZmVfYmFzZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpoYXNoZXIgICAgICAgICAgaGFzaGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6a2V5X2VxdWFsICAgICAgIGtleV9lcXVhbDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlICBhbGxvY2F0b3JfdHlwZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6a2V5X3R5cGUgICAgICAgIGtleV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSAgICAgIHZhbHVlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX2l0ZXJhdG9yPHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciwKKwkJCQkJICB1bm9yZGVyZWRfbXVsdGltYXA+IGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfX2dudV9kZWJ1Zzo6X1NhZmVfaXRlcmF0b3I8dHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yLAorCQkJCQkgIHVub3JkZXJlZF9tdWx0aW1hcD4gY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICB1bm9yZGVyZWRfbXVsdGltYXAoc2l6ZV90eXBlIF9fbiA9IDEwLAorCQkJIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLAorCQkJIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJCSBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19uLCBfX2hmLCBfX2VxbCwgX19hKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHVub3JkZXJlZF9tdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgCisJCQkgICBzaXplX3R5cGUgX19uID0gMTAsCisJCQkgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwgCisJCQkgICBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksIAorCQkJICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfQmFzZShfX2dudV9kZWJ1Zzo6X19jaGVja192YWxpZF9yYW5nZShfX2YsIF9fbCksIF9fbCwgX19uLAorCQlfX2hmLCBfX2VxbCwgX19hKSwgX1NhZmVfYmFzZSgpIHsgfQorCisgICAgICB1bm9yZGVyZWRfbXVsdGltYXAoY29uc3QgdW5vcmRlcmVkX211bHRpbWFwJiBfX3gpIAorICAgICAgOiBfQmFzZShfX3gpLCBfU2FmZV9iYXNlKCkgeyB9CisKKyAgICAgIHVub3JkZXJlZF9tdWx0aW1hcChjb25zdCBfQmFzZSYgX194KSAKKyAgICAgIDogX0Jhc2UoX194KSwgX1NhZmVfYmFzZSgpIHsgfQorCisgICAgICB1bm9yZGVyZWRfbXVsdGltYXAodW5vcmRlcmVkX211bHRpbWFwJiYgX194KSAKKyAgICAgIDogX0Jhc2Uoc3RkOjpmb3J3YXJkPHVub3JkZXJlZF9tdWx0aW1hcD4oX194KSksIF9TYWZlX2Jhc2UoKSB7IH0KKworICAgICAgdW5vcmRlcmVkX211bHRpbWFwKGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sLAorCQkJIHNpemVfdHlwZSBfX24gPSAxMCwKKwkJCSBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJCSBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCQkgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fbCwgX19uLCBfX2hmLCBfX2VxbCwgX19hKSwgX1NhZmVfYmFzZSgpIHsgfQorCisgICAgICB1bm9yZGVyZWRfbXVsdGltYXAmCisgICAgICBvcGVyYXRvcj0oY29uc3QgdW5vcmRlcmVkX211bHRpbWFwJiBfX3gpCisgICAgICB7CisJKnN0YXRpY19jYXN0PF9CYXNlKj4odGhpcykgPSBfX3g7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHVub3JkZXJlZF9tdWx0aW1hcCYKKyAgICAgIG9wZXJhdG9yPSh1bm9yZGVyZWRfbXVsdGltYXAmJiBfX3gpCisgICAgICB7CisJLy8gTkI6IERSIDEyMDQuCisJLy8gTkI6IERSIDY3NS4KKwljbGVhcigpOworCXN3YXAoX194KTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHVub3JkZXJlZF9tdWx0aW1hcCYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPmluc2VydChfX2wpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgc3dhcCh1bm9yZGVyZWRfbXVsdGltYXAmIF9feCkKKyAgICAgIHsKKwlfQmFzZTo6c3dhcChfX3gpOworCV9TYWZlX2Jhc2U6Ol9NX3N3YXAoX194KTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKQorICAgICAgeworCV9CYXNlOjpjbGVhcigpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yIAorICAgICAgYmVnaW4oKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIC8vIGxvY2FsIHZlcnNpb25zCisgICAgICB1c2luZyBfQmFzZTo6YmVnaW47CisgICAgICB1c2luZyBfQmFzZTo6ZW5kOworICAgICAgdXNpbmcgX0Jhc2U6OmNiZWdpbjsKKyAgICAgIHVzaW5nIF9CYXNlOjpjZW5kOworCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6Omluc2VydChfX29iaiksIHRoaXMpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3RfaXRlcmF0b3IsIGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6Omluc2VydChfX29iaiksIHRoaXMpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeyBfQmFzZTo6aW5zZXJ0KF9fbCk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeworCSAgX19nbGliY3h4X2NoZWNrX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisJICBfQmFzZTo6aW5zZXJ0KF9fZmlyc3QsIF9fbGFzdCk7CisJfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rZXkpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZmluZChfX2tleSksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpmaW5kKF9fa2V5KSwgdGhpcyk7IH0KKworICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2tleSkKKyAgICAgIHsKKwl0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBfQmFzZV9pdGVyYXRvcjsKKwl0eXBlZGVmIHN0ZDo6cGFpcjxfQmFzZV9pdGVyYXRvciwgX0Jhc2VfaXRlcmF0b3I+IF9fcGFpcl90eXBlOworCV9fcGFpcl90eXBlIF9fcmVzID0gX0Jhc2U6OmVxdWFsX3JhbmdlKF9fa2V5KTsKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoaXRlcmF0b3IoX19yZXMuZmlyc3QsIHRoaXMpLAorCQkJICAgICAgaXRlcmF0b3IoX19yZXMuc2Vjb25kLCB0aGlzKSk7CisgICAgICB9CisKKyAgICAgIHN0ZDo6cGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IgX0Jhc2VfaXRlcmF0b3I7CisJdHlwZWRlZiBzdGQ6OnBhaXI8X0Jhc2VfaXRlcmF0b3IsIF9CYXNlX2l0ZXJhdG9yPiBfX3BhaXJfdHlwZTsKKwlfX3BhaXJfdHlwZSBfX3JlcyA9IF9CYXNlOjplcXVhbF9yYW5nZShfX2tleSk7CisJcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGNvbnN0X2l0ZXJhdG9yKF9fcmVzLmZpcnN0LCB0aGlzKSwKKwkJCSAgICAgIGNvbnN0X2l0ZXJhdG9yKF9fcmVzLnNlY29uZCwgdGhpcykpOworICAgICAgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX2tleSkKKyAgICAgIHsKKwlzaXplX3R5cGUgX19yZXQoMCk7CisJaXRlcmF0b3IgX192aWN0aW0oX0Jhc2U6OmZpbmQoX19rZXkpLCB0aGlzKTsKKwlpZiAoX192aWN0aW0gIT0gZW5kKCkpCisJICB7CisJICAgIHRoaXMtPmVyYXNlKF9fdmljdGltKTsKKwkgICAgX19yZXQgPSAxOworCSAgfQorCXJldHVybiBfX3JldDsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9faXQpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2VyYXNlKF9faXQpOworCV9faXQuX01faW52YWxpZGF0ZSgpOworCXJldHVybiBpdGVyYXRvcihfQmFzZTo6ZXJhc2UoX19pdC5iYXNlKCkpLCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QsIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfZXJhc2VfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKwlmb3IgKGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gX19maXJzdDsgX190bXAgIT0gX19sYXN0OykKKwl7CisJICBjb25zdF9pdGVyYXRvciBfX3ZpY3RpbSA9IF9fdG1wKys7CisJICBfX3ZpY3RpbS5fTV9pbnZhbGlkYXRlKCk7CisJfQorCXJldHVybiBpdGVyYXRvcihfQmFzZTo6ZXJhc2UoX19maXJzdC5iYXNlKCksCisJCQkJICAgICBfX2xhc3QuYmFzZSgpKSwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIF9CYXNlJgorICAgICAgX01fYmFzZSgpIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIGNvbnN0IF9CYXNlJgorICAgICAgX01fYmFzZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgdm9pZAorICAgICAgX01faW52YWxpZGF0ZV9hbGwoKQorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yIF9CYXNlX2NvbnN0X2l0ZXJhdG9yOworCXR5cGVkZWYgX19nbnVfZGVidWc6Ol9Ob3RfZXF1YWxfdG88X0Jhc2VfY29uc3RfaXRlcmF0b3I+IF9Ob3RfZXF1YWw7CisJdGhpcy0+X01faW52YWxpZGF0ZV9pZihfTm90X2VxdWFsKF9NX2Jhc2UoKS5lbmQoKSkpOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSGFzaCwKKwkgICB0eXBlbmFtZSBfUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcCh1bm9yZGVyZWRfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgdW5vcmRlcmVkX211bHRpbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3kpCisgICAgeyBfX3guc3dhcChfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSGFzaCwKKwkgICB0eXBlbmFtZSBfUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCB1bm9yZGVyZWRfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgdW5vcmRlcmVkX211bHRpbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX2VxdWFsKF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9IYXNoLAorCSAgIHR5cGVuYW1lIF9QcmVkLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHVub3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCB1bm9yZGVyZWRfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CisKK30gLy8gbmFtZXNwYWNlIF9fZGVidWcKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYgLy8gX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlYnVnL3Vub3JkZXJlZF9zZXQgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlYnVnL3Vub3JkZXJlZF9zZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk1NmJiMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZGVidWcvdW5vcmRlcmVkX3NldApAQCAtMCwwICsxLDU1MSBAQAorLy8gRGVidWdnaW5nIHVub3JkZXJlZF9zZXQvdW5vcmRlcmVkX211bHRpc2V0IGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGRlYnVnL3Vub3JkZXJlZF9zZXQKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZGVidWcgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0RFQlVHX1VOT1JERVJFRF9TRVQKKyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfVU5PUkRFUkVEX1NFVCAxCisKKyNpZm5kZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyMgaW5jbHVkZSA8Yml0cy9jKysweF93YXJuaW5nLmg+CisjZWxzZQorIyBpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorCisjaW5jbHVkZSA8ZGVidWcvc2FmZV9zZXF1ZW5jZS5oPgorI2luY2x1ZGUgPGRlYnVnL3NhZmVfaXRlcmF0b3IuaD4KKworbmFtZXNwYWNlIHN0ZAoreworbmFtZXNwYWNlIF9fZGVidWcKK3sKKyAgLy8vIENsYXNzIHN0ZDo6dW5vcmRlcmVkX3NldCB3aXRoIHNhZmV0eS9jaGVja2luZy9kZWJ1ZyBpbnN0cnVtZW50YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfSGFzaCA9IHN0ZDo6aGFzaDxfVmFsdWU+LAorCSAgIHR5cGVuYW1lIF9QcmVkID0gc3RkOjplcXVhbF90bzxfVmFsdWU+LAorCSAgIHR5cGVuYW1lIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPF9WYWx1ZT4gPgorICAgIGNsYXNzIHVub3JkZXJlZF9zZXQKKyAgICA6IHB1YmxpYyBfR0xJQkNYWF9TVERfRDo6dW5vcmRlcmVkX3NldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiwKKyAgICAgIHB1YmxpYyBfX2dudV9kZWJ1Zzo6X1NhZmVfc2VxdWVuY2U8dW5vcmRlcmVkX3NldDxfVmFsdWUsIF9IYXNoLAorCQkJCQkJICAgICAgIF9QcmVkLCBfQWxsb2M+ID4KKyAgICB7CisgICAgICB0eXBlZGVmIF9HTElCQ1hYX1NURF9EOjp1bm9yZGVyZWRfc2V0PF9WYWx1ZSwgX0hhc2gsCisJCQkJCSAgICBfUHJlZCwgX0FsbG9jPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX3NlcXVlbmNlPHVub3JkZXJlZF9zZXQ+IF9TYWZlX2Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aGFzaGVyICAgICAgICAgIGhhc2hlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmtleV9lcXVhbCAgICAgICBrZXlfZXF1YWw7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSAgYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmtleV90eXBlICAgICAgICBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgICAgICB2YWx1ZV90eXBlOworCisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9pdGVyYXRvcjx0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IsCisJCQkJCSAgdW5vcmRlcmVkX3NldD4gaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9pdGVyYXRvcjx0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IsCisJCQkJCSAgdW5vcmRlcmVkX3NldD4gY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICB1bm9yZGVyZWRfc2V0KHNpemVfdHlwZSBfX24gPSAxMCwKKwkJICAgIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLAorCQkgICAgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLAorCQkgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fbiwgX19oZiwgX19lcWwsIF9fYSkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB1bm9yZGVyZWRfc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCAKKwkJICAgICAgc2l6ZV90eXBlIF9fbiA9IDEwLAorCQkgICAgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwgCisJCSAgICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwgCisJCSAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX0Jhc2UoX19nbnVfZGVidWc6Ol9fY2hlY2tfdmFsaWRfcmFuZ2UoX19mLCBfX2wpLCBfX2wsIF9fbiwKKwkJX19oZiwgX19lcWwsIF9fYSksIF9TYWZlX2Jhc2UoKSB7IH0KKworICAgICAgdW5vcmRlcmVkX3NldChjb25zdCB1bm9yZGVyZWRfc2V0JiBfX3gpIAorICAgICAgOiBfQmFzZShfX3gpLCBfU2FmZV9iYXNlKCkgeyB9CisKKyAgICAgIHVub3JkZXJlZF9zZXQoY29uc3QgX0Jhc2UmIF9feCkgCisgICAgICA6IF9CYXNlKF9feCksIF9TYWZlX2Jhc2UoKSB7IH0KKworICAgICAgdW5vcmRlcmVkX3NldCh1bm9yZGVyZWRfc2V0JiYgX194KSAKKyAgICAgIDogX0Jhc2Uoc3RkOjpmb3J3YXJkPHVub3JkZXJlZF9zZXQ+KF9feCkpLCBfU2FmZV9iYXNlKCkgeyB9CisKKyAgICAgIHVub3JkZXJlZF9zZXQoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJCSAgICBzaXplX3R5cGUgX19uID0gMTAsCisJCSAgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2wsIF9fbiwgX19oZiwgX19lcWwsIF9fYSksIF9TYWZlX2Jhc2UoKSB7IH0KKworICAgICAgdW5vcmRlcmVkX3NldCYKKyAgICAgIG9wZXJhdG9yPShjb25zdCB1bm9yZGVyZWRfc2V0JiBfX3gpCisgICAgICB7CisJKnN0YXRpY19jYXN0PF9CYXNlKj4odGhpcykgPSBfX3g7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHVub3JkZXJlZF9zZXQmCisgICAgICBvcGVyYXRvcj0odW5vcmRlcmVkX3NldCYmIF9feCkKKyAgICAgIHsKKwkvLyBOQjogRFIgMTIwNC4KKwkvLyBOQjogRFIgNjc1LgorCWNsZWFyKCk7CisJc3dhcChfX3gpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgdW5vcmRlcmVkX3NldCYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPmluc2VydChfX2wpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgc3dhcCh1bm9yZGVyZWRfc2V0JiBfX3gpCisgICAgICB7CisJX0Jhc2U6OnN3YXAoX194KTsKKwlfU2FmZV9iYXNlOjpfTV9zd2FwKF9feCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCkKKyAgICAgIHsKKwlfQmFzZTo6Y2xlYXIoKTsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgfQorCisgICAgICBpdGVyYXRvciAKKyAgICAgIGJlZ2luKCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjplbmQoKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsgfQorCisgICAgICAvLyBsb2NhbCB2ZXJzaW9ucworICAgICAgdXNpbmcgX0Jhc2U6OmJlZ2luOworICAgICAgdXNpbmcgX0Jhc2U6OmVuZDsKKyAgICAgIHVzaW5nIF9CYXNlOjpjYmVnaW47CisgICAgICB1c2luZyBfQmFzZTo6Y2VuZDsKKworICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPgorICAgICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQorICAgICAgeworCXR5cGVkZWYgc3RkOjpwYWlyPHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciwgYm9vbD4gX19wYWlyX3R5cGU7CisJX19wYWlyX3R5cGUgX19yZXMgPSBfQmFzZTo6aW5zZXJ0KF9fb2JqKTsKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoaXRlcmF0b3IoX19yZXMuZmlyc3QsIHRoaXMpLCBfX3Jlcy5zZWNvbmQpOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yLCBjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICAgIHsKKwl0eXBlZGVmIHN0ZDo6cGFpcjx0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IsIGJvb2w+IF9fcGFpcl90eXBlOworCV9fcGFpcl90eXBlIF9fcmVzID0gX0Jhc2U6Omluc2VydChfX29iaik7CisJcmV0dXJuIGl0ZXJhdG9yKF9fcmVzLmZpcnN0LCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7IF9CYXNlOjppbnNlcnQoX19sKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgICB7CisJICBfX2dsaWJjeHhfY2hlY2tfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKwkgIF9CYXNlOjppbnNlcnQoX19maXJzdCwgX19sYXN0KTsKKwl9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2tleSkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpmaW5kKF9fa2V5KSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmZpbmQoX19rZXkpLCB0aGlzKTsgfQorCisgICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIF9CYXNlX2l0ZXJhdG9yOworCXR5cGVkZWYgc3RkOjpwYWlyPF9CYXNlX2l0ZXJhdG9yLCBfQmFzZV9pdGVyYXRvcj4gX19wYWlyX3R5cGU7CisJX19wYWlyX3R5cGUgX19yZXMgPSBfQmFzZTo6ZXF1YWxfcmFuZ2UoX19rZXkpOworCXJldHVybiBzdGQ6Om1ha2VfcGFpcihpdGVyYXRvcihfX3Jlcy5maXJzdCwgdGhpcyksCisJCQkgICAgICBpdGVyYXRvcihfX3Jlcy5zZWNvbmQsIHRoaXMpKTsKKyAgICAgIH0KKworICAgICAgc3RkOjpwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKKyAgICAgIHsKKwl0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciBfQmFzZV9pdGVyYXRvcjsKKwl0eXBlZGVmIHN0ZDo6cGFpcjxfQmFzZV9pdGVyYXRvciwgX0Jhc2VfaXRlcmF0b3I+IF9fcGFpcl90eXBlOworCV9fcGFpcl90eXBlIF9fcmVzID0gX0Jhc2U6OmVxdWFsX3JhbmdlKF9fa2V5KTsKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoY29uc3RfaXRlcmF0b3IoX19yZXMuZmlyc3QsIHRoaXMpLAorCQkJICAgICAgY29uc3RfaXRlcmF0b3IoX19yZXMuc2Vjb25kLCB0aGlzKSk7CisgICAgICB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQorICAgICAgeworCXNpemVfdHlwZSBfX3JldCgwKTsKKwlpdGVyYXRvciBfX3ZpY3RpbShfQmFzZTo6ZmluZChfX2tleSksIHRoaXMpOworCWlmIChfX3ZpY3RpbSAhPSBlbmQoKSkKKwkgIHsKKwkgICAgdGhpcy0+ZXJhc2UoX192aWN0aW0pOworCSAgICBfX3JldCA9IDE7CisJICB9CisJcmV0dXJuIF9fcmV0OworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoY29uc3RfaXRlcmF0b3IgX19pdCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfZXJhc2UoX19pdCk7CisJX19pdC5fTV9pbnZhbGlkYXRlKCk7CisJcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplcmFzZShfX2l0LmJhc2UoKSksIHRoaXMpOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoY29uc3RfaXRlcmF0b3IgX19maXJzdCwgY29uc3RfaXRlcmF0b3IgX19sYXN0KQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19lcmFzZV9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCWZvciAoY29uc3RfaXRlcmF0b3IgX190bXAgPSBfX2ZpcnN0OyBfX3RtcCAhPSBfX2xhc3Q7KQorCXsKKwkgIGNvbnN0X2l0ZXJhdG9yIF9fdmljdGltID0gX190bXArKzsKKwkgIF9fdmljdGltLl9NX2ludmFsaWRhdGUoKTsKKwl9CisJcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplcmFzZShfX2ZpcnN0LmJhc2UoKSwKKwkJCQkgICAgIF9fbGFzdC5iYXNlKCkpLCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgY29uc3QgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KKworICAgIHByaXZhdGU6CisgICAgICB2b2lkCisgICAgICBfTV9pbnZhbGlkYXRlX2FsbCgpCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IgX0Jhc2VfY29uc3RfaXRlcmF0b3I7CisJdHlwZWRlZiBfX2dudV9kZWJ1Zzo6X05vdF9lcXVhbF90bzxfQmFzZV9jb25zdF9pdGVyYXRvcj4gX05vdF9lcXVhbDsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2lmKF9Ob3RfZXF1YWwoX01fYmFzZSgpLmVuZCgpKSk7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcCh1bm9yZGVyZWRfc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJIHVub3JkZXJlZF9zZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCB1bm9yZGVyZWRfc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IHVub3JkZXJlZF9zZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBfX3guX01fZXF1YWwoX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZSwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9QcmVkLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHVub3JkZXJlZF9zZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgdW5vcmRlcmVkX3NldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworCisgIC8vLyBDbGFzcyBzdGQ6OnVub3JkZXJlZF9tdWx0aXNldCB3aXRoIHNhZmV0eS9jaGVja2luZy9kZWJ1ZyBpbnN0cnVtZW50YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfSGFzaCA9IHN0ZDo6aGFzaDxfVmFsdWU+LAorCSAgIHR5cGVuYW1lIF9QcmVkID0gc3RkOjplcXVhbF90bzxfVmFsdWU+LAorCSAgIHR5cGVuYW1lIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPF9WYWx1ZT4gPgorICAgIGNsYXNzIHVub3JkZXJlZF9tdWx0aXNldAorICAgIDogcHVibGljIF9HTElCQ1hYX1NURF9EOjp1bm9yZGVyZWRfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4sCisgICAgICBwdWJsaWMgX19nbnVfZGVidWc6Ol9TYWZlX3NlcXVlbmNlPHVub3JkZXJlZF9tdWx0aXNldDxfVmFsdWUsIF9IYXNoLAorCQkJCQkJCSAgICBfUHJlZCwgX0FsbG9jPiA+CisgICAgeworICAgICAgdHlwZWRlZiBfR0xJQkNYWF9TVERfRDo6dW5vcmRlcmVkX211bHRpc2V0PF9WYWx1ZSwgX0hhc2gsCisJCQkJCQkgX1ByZWQsIF9BbGxvYz4gX0Jhc2U7CisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9zZXF1ZW5jZTx1bm9yZGVyZWRfbXVsdGlzZXQ+IF9TYWZlX2Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aGFzaGVyICAgICAgICAgIGhhc2hlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmtleV9lcXVhbCAgICAgICBrZXlfZXF1YWw7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSAgYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmtleV90eXBlICAgICAgICBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgICAgICB2YWx1ZV90eXBlOworCisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9pdGVyYXRvcjx0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IsCisJCQkJCSAgdW5vcmRlcmVkX211bHRpc2V0PiBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX2l0ZXJhdG9yPHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciwKKwkJCQkJICB1bm9yZGVyZWRfbXVsdGlzZXQ+IGNvbnN0X2l0ZXJhdG9yOworCisgICAgICBleHBsaWNpdAorICAgICAgdW5vcmRlcmVkX211bHRpc2V0KHNpemVfdHlwZSBfX24gPSAxMCwKKwkJCSBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJCSBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCQkgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fbiwgX19oZiwgX19lcWwsIF9fYSkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB1bm9yZGVyZWRfbXVsdGlzZXQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIAorCQkJICAgc2l6ZV90eXBlIF9fbiA9IDEwLAorCQkJICAgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksIAorCQkJICAgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLCAKKwkJCSAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX0Jhc2UoX19nbnVfZGVidWc6Ol9fY2hlY2tfdmFsaWRfcmFuZ2UoX19mLCBfX2wpLCBfX2wsIF9fbiwKKwkJX19oZiwgX19lcWwsIF9fYSksIF9TYWZlX2Jhc2UoKSB7IH0KKworICAgICAgdW5vcmRlcmVkX211bHRpc2V0KGNvbnN0IHVub3JkZXJlZF9tdWx0aXNldCYgX194KSAKKyAgICAgIDogX0Jhc2UoX194KSwgX1NhZmVfYmFzZSgpIHsgfQorCisgICAgICB1bm9yZGVyZWRfbXVsdGlzZXQoY29uc3QgX0Jhc2UmIF9feCkgCisgICAgICA6IF9CYXNlKF9feCksIF9TYWZlX2Jhc2UoKSB7IH0KKworICAgICAgdW5vcmRlcmVkX211bHRpc2V0KHVub3JkZXJlZF9tdWx0aXNldCYmIF9feCkgCisgICAgICA6IF9CYXNlKHN0ZDo6Zm9yd2FyZDx1bm9yZGVyZWRfbXVsdGlzZXQ+KF9feCkpLCBfU2FmZV9iYXNlKCkgeyB9CisKKyAgICAgIHVub3JkZXJlZF9tdWx0aXNldChpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCwKKwkJCSBzaXplX3R5cGUgX19uID0gMTAsCisJCQkgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCQkgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLAorCQkJIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2wsIF9fbiwgX19oZiwgX19lcWwsIF9fYSksIF9TYWZlX2Jhc2UoKSB7IH0KKworICAgICAgdW5vcmRlcmVkX211bHRpc2V0JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHVub3JkZXJlZF9tdWx0aXNldCYgX194KQorICAgICAgeworCSpzdGF0aWNfY2FzdDxfQmFzZSo+KHRoaXMpID0gX194OworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB1bm9yZGVyZWRfbXVsdGlzZXQmCisgICAgICBvcGVyYXRvcj0odW5vcmRlcmVkX211bHRpc2V0JiYgX194KQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorICAgICAgICAvLyBOQjogRFIgNjc1LgorCWNsZWFyKCk7CisJc3dhcChfX3gpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgdW5vcmRlcmVkX211bHRpc2V0JgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+aW5zZXJ0KF9fbCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKHVub3JkZXJlZF9tdWx0aXNldCYgX194KQorICAgICAgeworCV9CYXNlOjpzd2FwKF9feCk7CisJX1NhZmVfYmFzZTo6X01fc3dhcChfX3gpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBjbGVhcigpCisgICAgICB7CisJX0Jhc2U6OmNsZWFyKCk7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjplbmQoKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsgfQorCisgICAgICAvLyBsb2NhbCB2ZXJzaW9ucworICAgICAgdXNpbmcgX0Jhc2U6OmJlZ2luOworICAgICAgdXNpbmcgX0Jhc2U6OmVuZDsKKyAgICAgIHVzaW5nIF9CYXNlOjpjYmVnaW47CisgICAgICB1c2luZyBfQmFzZTo6Y2VuZDsKKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjppbnNlcnQoX19vYmopLCB0aGlzKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yLCBjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjppbnNlcnQoX19vYmopLCB0aGlzKTsgfQorCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoc3RkOjppbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsgX0Jhc2U6Omluc2VydChfX2wpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICAgIHsKKwkgIF9fZ2xpYmN4eF9jaGVja192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCSAgX0Jhc2U6Omluc2VydChfX2ZpcnN0LCBfX2xhc3QpOworCX0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmZpbmQoX19rZXkpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZmluZChfX2tleSksIHRoaXMpOyB9CisKKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rZXkpCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgX0Jhc2VfaXRlcmF0b3I7CisJdHlwZWRlZiBzdGQ6OnBhaXI8X0Jhc2VfaXRlcmF0b3IsIF9CYXNlX2l0ZXJhdG9yPiBfX3BhaXJfdHlwZTsKKwlfX3BhaXJfdHlwZSBfX3JlcyA9IF9CYXNlOjplcXVhbF9yYW5nZShfX2tleSk7CisJcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGl0ZXJhdG9yKF9fcmVzLmZpcnN0LCB0aGlzKSwKKwkJCSAgICAgIGl0ZXJhdG9yKF9fcmVzLnNlY29uZCwgdGhpcykpOworICAgICAgfQorCisgICAgICBzdGQ6OnBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yIF9CYXNlX2l0ZXJhdG9yOworCXR5cGVkZWYgc3RkOjpwYWlyPF9CYXNlX2l0ZXJhdG9yLCBfQmFzZV9pdGVyYXRvcj4gX19wYWlyX3R5cGU7CisJX19wYWlyX3R5cGUgX19yZXMgPSBfQmFzZTo6ZXF1YWxfcmFuZ2UoX19rZXkpOworCXJldHVybiBzdGQ6Om1ha2VfcGFpcihjb25zdF9pdGVyYXRvcihfX3Jlcy5maXJzdCwgdGhpcyksCisJCQkgICAgICBjb25zdF9pdGVyYXRvcihfX3Jlcy5zZWNvbmQsIHRoaXMpKTsKKyAgICAgIH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX19rZXkpCisgICAgICB7CisJc2l6ZV90eXBlIF9fcmV0KDApOworCWl0ZXJhdG9yIF9fdmljdGltKF9CYXNlOjpmaW5kKF9fa2V5KSwgdGhpcyk7CisJaWYgKF9fdmljdGltICE9IGVuZCgpKQorCSAgeworCSAgICB0aGlzLT5lcmFzZShfX3ZpY3RpbSk7CisJICAgIF9fcmV0ID0gMTsKKwkgIH0KKwlyZXR1cm4gX19yZXQ7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShjb25zdF9pdGVyYXRvciBfX2l0KQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19lcmFzZShfX2l0KTsKKwlfX2l0Ll9NX2ludmFsaWRhdGUoKTsKKwlyZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVyYXNlKF9faXQuYmFzZSgpKSwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShjb25zdF9pdGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBfX2xhc3QpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2VyYXNlX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisJZm9yIChjb25zdF9pdGVyYXRvciBfX3RtcCA9IF9fZmlyc3Q7IF9fdG1wICE9IF9fbGFzdDspCisJeworCSAgY29uc3RfaXRlcmF0b3IgX192aWN0aW0gPSBfX3RtcCsrOworCSAgX192aWN0aW0uX01faW52YWxpZGF0ZSgpOworCX0KKwlyZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVyYXNlKF9fZmlyc3QuYmFzZSgpLAorCQkJCSAgICAgX19sYXN0LmJhc2UoKSksIHRoaXMpOworICAgICAgfQorCisgICAgICBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSB7IHJldHVybiAqdGhpczsgfQorCisgICAgICBjb25zdCBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHZvaWQKKyAgICAgIF9NX2ludmFsaWRhdGVfYWxsKCkKKyAgICAgIHsKKwl0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciBfQmFzZV9jb25zdF9pdGVyYXRvcjsKKwl0eXBlZGVmIF9fZ251X2RlYnVnOjpfTm90X2VxdWFsX3RvPF9CYXNlX2NvbnN0X2l0ZXJhdG9yPiBfTm90X2VxdWFsOworCXRoaXMtPl9NX2ludmFsaWRhdGVfaWYoX05vdF9lcXVhbChfTV9iYXNlKCkuZW5kKCkpKTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZSwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9QcmVkLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHVub3JkZXJlZF9tdWx0aXNldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX194LAorCSB1bm9yZGVyZWRfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCB1bm9yZGVyZWRfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgdW5vcmRlcmVkX211bHRpc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX2VxdWFsKF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCB1bm9yZGVyZWRfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgdW5vcmRlcmVkX211bHRpc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQorCit9IC8vIG5hbWVzcGFjZSBfX2RlYnVnCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmIC8vIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9kZWJ1Zy92ZWN0b3IgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlYnVnL3ZlY3RvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTU1YjA4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9kZWJ1Zy92ZWN0b3IKQEAgLTAsMCArMSw1NTcgQEAKKy8vIERlYnVnZ2luZyB2ZWN0b3IgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZGVidWcvdmVjdG9yCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGRlYnVnIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9ERUJVR19WRUNUT1IKKyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfVkVDVE9SIDEKKworI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPGRlYnVnL3NhZmVfc2VxdWVuY2UuaD4KKyNpbmNsdWRlIDxkZWJ1Zy9zYWZlX2l0ZXJhdG9yLmg+CisKK25hbWVzcGFjZSBzdGQKK3sKK25hbWVzcGFjZSBfX2RlYnVnCit7CisgIC8vLyBDbGFzcyBzdGQ6OnZlY3RvciB3aXRoIHNhZmV0eS9jaGVja2luZy9kZWJ1ZyBpbnN0cnVtZW50YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yID0gc3RkOjphbGxvY2F0b3I8X1RwPiA+CisgICAgY2xhc3MgdmVjdG9yCisgICAgOiBwdWJsaWMgX0dMSUJDWFhfU1REX0Q6OnZlY3RvcjxfVHAsIF9BbGxvY2F0b3I+LAorICAgICAgcHVibGljIF9fZ251X2RlYnVnOjpfU2FmZV9zZXF1ZW5jZTx2ZWN0b3I8X1RwLCBfQWxsb2NhdG9yPiA+CisgICAgeworICAgICAgdHlwZWRlZiBfR0xJQkNYWF9TVERfRDo6dmVjdG9yPF9UcCwgX0FsbG9jYXRvcj4gX0Jhc2U7CisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9zZXF1ZW5jZTx2ZWN0b3I+ICAgICAgICAgICAgICBfU2FmZV9iYXNlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciBfQmFzZV9jb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9BZnRlcl9udGhfZnJvbTxfQmFzZV9jb25zdF9pdGVyYXRvcj4gX0FmdGVyX250aDsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnJlZmVyZW5jZSAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9yZWZlcmVuY2UgICAgICAgY29uc3RfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9pdGVyYXRvcjx0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IsdmVjdG9yPgorICAgICAgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9pdGVyYXRvcjx0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IsdmVjdG9yPgorICAgICAgY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSAgICAgICAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpkaWZmZXJlbmNlX3R5cGUgICAgICAgZGlmZmVyZW5jZV90eXBlOworCisgICAgICB0eXBlZGVmIF9UcAkJCQkgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0FsbG9jYXRvcgkJCSAgICBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnBvaW50ZXIgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfcG9pbnRlciAgICAgICAgIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworCisgICAgICAvLyAyMy4yLjQuMSBjb25zdHJ1Y3QvY29weS9kZXN0cm95OgorICAgICAgZXhwbGljaXQgdmVjdG9yKGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKyAgICAgIDogX0Jhc2UoX19hKSwgX01fZ3VhcmFudGVlZF9jYXBhY2l0eSgwKSB7IH0KKworICAgICAgZXhwbGljaXQgdmVjdG9yKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSA9IF9UcCgpLAorCQkgICAgICBjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICA6IF9CYXNlKF9fbiwgX192YWx1ZSwgX19hKSwgX01fZ3VhcmFudGVlZF9jYXBhY2l0eShfX24pIHsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgICAgY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorCTogX0Jhc2UoX19nbnVfZGVidWc6Ol9fY2hlY2tfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KSwKKwkJX19sYXN0LCBfX2EpLAorCSAgX01fZ3VhcmFudGVlZF9jYXBhY2l0eSgwKQorICAgICAgICB7IF9NX3VwZGF0ZV9ndWFyYW50ZWVkX2NhcGFjaXR5KCk7IH0KKworICAgICAgdmVjdG9yKGNvbnN0IHZlY3RvciYgX194KQorICAgICAgOiBfQmFzZShfX3gpLCBfU2FmZV9iYXNlKCksIF9NX2d1YXJhbnRlZWRfY2FwYWNpdHkoX194LnNpemUoKSkgeyB9CisKKyAgICAgIC8vLyBDb25zdHJ1Y3Rpb24gZnJvbSBhIHJlbGVhc2UtbW9kZSB2ZWN0b3IKKyAgICAgIHZlY3Rvcihjb25zdCBfQmFzZSYgX194KQorICAgICAgOiBfQmFzZShfX3gpLCBfU2FmZV9iYXNlKCksIF9NX2d1YXJhbnRlZWRfY2FwYWNpdHkoX194LnNpemUoKSkgeyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdmVjdG9yKHZlY3RvciYmIF9feCkKKyAgICAgIDogX0Jhc2Uoc3RkOjpmb3J3YXJkPHZlY3Rvcj4oX194KSksIF9TYWZlX2Jhc2UoKSwKKwlfTV9ndWFyYW50ZWVkX2NhcGFjaXR5KHRoaXMtPnNpemUoKSkKKyAgICAgIHsKKwl0aGlzLT5fTV9zd2FwKF9feCk7CisJX194Ll9NX2d1YXJhbnRlZWRfY2FwYWNpdHkgPSAwOworICAgICAgfQorCisgICAgICB2ZWN0b3IoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19sLCBfX2EpLCBfU2FmZV9iYXNlKCksCisJX01fZ3VhcmFudGVlZF9jYXBhY2l0eShfX2wuc2l6ZSgpKSB7IH0KKyNlbmRpZgorCisgICAgICB+dmVjdG9yKCkgeyB9CisKKyAgICAgIHZlY3RvciYKKyAgICAgIG9wZXJhdG9yPShjb25zdCB2ZWN0b3ImIF9feCkKKyAgICAgIHsKKwlzdGF0aWNfY2FzdDxfQmFzZSY+KCp0aGlzKSA9IF9feDsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCV9NX3VwZGF0ZV9ndWFyYW50ZWVkX2NhcGFjaXR5KCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHZlY3RvciYKKyAgICAgIG9wZXJhdG9yPSh2ZWN0b3ImJiBfX3gpCisgICAgICB7CisJLy8gTkI6IERSIDEyMDQuCisJLy8gTkI6IERSIDY3NS4KKwljbGVhcigpOworCXN3YXAoX194KTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHZlY3RvciYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwlzdGF0aWNfY2FzdDxfQmFzZSY+KCp0aGlzKSA9IF9fbDsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCV9NX3VwZGF0ZV9ndWFyYW50ZWVkX2NhcGFjaXR5KCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICAgIHsKKwkgIF9fZ2xpYmN4eF9jaGVja192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCSAgX0Jhc2U6OmFzc2lnbihfX2ZpcnN0LCBfX2xhc3QpOworCSAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwkgIF9NX3VwZGF0ZV9ndWFyYW50ZWVkX2NhcGFjaXR5KCk7CisJfQorCisgICAgICB2b2lkCisgICAgICBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3UpCisgICAgICB7CisJX0Jhc2U6OmFzc2lnbihfX24sIF9fdSk7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwlfTV91cGRhdGVfZ3VhcmFudGVlZF9jYXBhY2l0eSgpOworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHZvaWQKKyAgICAgIGFzc2lnbihpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwlfQmFzZTo6YXNzaWduKF9fbCk7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwlfTV91cGRhdGVfZ3VhcmFudGVlZF9jYXBhY2l0eSgpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIHVzaW5nIF9CYXNlOjpnZXRfYWxsb2NhdG9yOworCisgICAgICAvLyBpdGVyYXRvcnM6CisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorI2VuZGlmCisKKyAgICAgIC8vIDIzLjIuNC4yIGNhcGFjaXR5OgorICAgICAgdXNpbmcgX0Jhc2U6OnNpemU7CisgICAgICB1c2luZyBfQmFzZTo6bWF4X3NpemU7CisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19zeiwgX1RwIF9fYyA9IF9UcCgpKQorICAgICAgeworCWJvb2wgX19yZWFsbG9jID0gX01fcmVxdWlyZXNfcmVhbGxvY2F0aW9uKF9fc3opOworCWlmIChfX3N6IDwgdGhpcy0+c2l6ZSgpKQorCSAgdGhpcy0+X01faW52YWxpZGF0ZV9pZihfQWZ0ZXJfbnRoKF9fc3osIF9NX2Jhc2UoKS5iZWdpbigpKSk7CisJX0Jhc2U6OnJlc2l6ZShfX3N6LCBfX2MpOworCWlmIChfX3JlYWxsb2MpCisJICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCV9NX3VwZGF0ZV9ndWFyYW50ZWVkX2NhcGFjaXR5KCk7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdXNpbmcgX0Jhc2U6OnNocmlua190b19maXQ7CisjZW5kaWYKKworICAgICAgc2l6ZV90eXBlCisgICAgICBjYXBhY2l0eSgpIGNvbnN0CisgICAgICB7CisjaWZkZWYgX0dMSUJDWFhfREVCVUdfUEVEQU5USUMKKwlyZXR1cm4gX01fZ3VhcmFudGVlZF9jYXBhY2l0eTsKKyNlbHNlCisJcmV0dXJuIF9CYXNlOjpjYXBhY2l0eSgpOworI2VuZGlmCisgICAgICB9CisKKyAgICAgIHVzaW5nIF9CYXNlOjplbXB0eTsKKworICAgICAgdm9pZAorICAgICAgcmVzZXJ2ZShzaXplX3R5cGUgX19uKQorICAgICAgeworCWJvb2wgX19yZWFsbG9jID0gX01fcmVxdWlyZXNfcmVhbGxvY2F0aW9uKF9fbik7CisJX0Jhc2U6OnJlc2VydmUoX19uKTsKKwlpZiAoX19uID4gX01fZ3VhcmFudGVlZF9jYXBhY2l0eSkKKwkgIF9NX2d1YXJhbnRlZWRfY2FwYWNpdHkgPSBfX247CisJaWYgKF9fcmVhbGxvYykKKwkgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICB9CisKKyAgICAgIC8vIGVsZW1lbnQgYWNjZXNzOgorICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX3N1YnNjcmlwdChfX24pOworCXJldHVybiBfTV9iYXNlKClbX19uXTsKKyAgICAgIH0KKworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX3N1YnNjcmlwdChfX24pOworCXJldHVybiBfTV9iYXNlKClbX19uXTsKKyAgICAgIH0KKworICAgICAgdXNpbmcgX0Jhc2U6OmF0OworCisgICAgICByZWZlcmVuY2UKKyAgICAgIGZyb250KCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfbm9uZW1wdHkoKTsKKwlyZXR1cm4gX0Jhc2U6OmZyb250KCk7CisgICAgICB9CisKKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgZnJvbnQoKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19ub25lbXB0eSgpOworCXJldHVybiBfQmFzZTo6ZnJvbnQoKTsKKyAgICAgIH0KKworICAgICAgcmVmZXJlbmNlCisgICAgICBiYWNrKCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfbm9uZW1wdHkoKTsKKwlyZXR1cm4gX0Jhc2U6OmJhY2soKTsKKyAgICAgIH0KKworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBiYWNrKCkgY29uc3QKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfbm9uZW1wdHkoKTsKKwlyZXR1cm4gX0Jhc2U6OmJhY2soKTsKKyAgICAgIH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gRFIgNDY0LiBTdWdnZXN0aW9uIGZvciBuZXcgbWVtYmVyIGZ1bmN0aW9ucyBpbiBzdGFuZGFyZCBjb250YWluZXJzLgorICAgICAgdXNpbmcgX0Jhc2U6OmRhdGE7CisKKyAgICAgIC8vIDIzLjIuNC4zIG1vZGlmaWVyczoKKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfYmFjayhjb25zdCBfVHAmIF9feCkKKyAgICAgIHsKKwlib29sIF9fcmVhbGxvYyA9IF9NX3JlcXVpcmVzX3JlYWxsb2NhdGlvbih0aGlzLT5zaXplKCkgKyAxKTsKKwlfQmFzZTo6cHVzaF9iYWNrKF9feCk7CisJaWYgKF9fcmVhbGxvYykKKwkgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisJX01fdXBkYXRlX2d1YXJhbnRlZWRfY2FwYWNpdHkoKTsKKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXAgPSBfVHA+CisgICAgICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8IXN0ZDo6X19hcmVfc2FtZTxfVXAsIGJvb2w+OjpfX3ZhbHVlLAorCQkJCQl2b2lkPjo6X190eXBlCisgICAgICAgIHB1c2hfYmFjayhfVHAmJiBfX3gpCisJeyBlbXBsYWNlX2JhY2soc3RkOjptb3ZlKF9feCkpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICB2b2lkCisgICAgICAgIGVtcGxhY2VfYmFjayhfQXJncyYmLi4uIF9fYXJncykKKwl7CisJICBib29sIF9fcmVhbGxvYyA9IF9NX3JlcXVpcmVzX3JlYWxsb2NhdGlvbih0aGlzLT5zaXplKCkgKyAxKTsKKwkgIF9CYXNlOjplbXBsYWNlX2JhY2soc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwkgIGlmIChfX3JlYWxsb2MpCisJICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisJICBfTV91cGRhdGVfZ3VhcmFudGVlZF9jYXBhY2l0eSgpOworCX0KKyNlbmRpZgorCisgICAgICB2b2lkCisgICAgICBwb3BfYmFjaygpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX25vbmVtcHR5KCk7CisJaXRlcmF0b3IgX192aWN0aW0gPSBlbmQoKSAtIDE7CisJX192aWN0aW0uX01faW52YWxpZGF0ZSgpOworCV9CYXNlOjpwb3BfYmFjaygpOworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICBpdGVyYXRvcgorICAgICAgICBlbXBsYWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIF9fZ2xpYmN4eF9jaGVja19pbnNlcnQoX19wb3NpdGlvbik7CisJICBib29sIF9fcmVhbGxvYyA9IF9NX3JlcXVpcmVzX3JlYWxsb2NhdGlvbih0aGlzLT5zaXplKCkgKyAxKTsKKwkgIGRpZmZlcmVuY2VfdHlwZSBfX29mZnNldCA9IF9fcG9zaXRpb24gLSBiZWdpbigpOworCSAgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIF9fcmVzID0gX0Jhc2U6OmVtcGxhY2UoX19wb3NpdGlvbi5iYXNlKCksCisJCQkJCSAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCSAgaWYgKF9fcmVhbGxvYykKKwkgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwkgIGVsc2UKKwkgICAgdGhpcy0+X01faW52YWxpZGF0ZV9pZihfQWZ0ZXJfbnRoKF9fb2Zmc2V0LCBfTV9iYXNlKCkuYmVnaW4oKSkpOworCSAgX01fdXBkYXRlX2d1YXJhbnRlZWRfY2FwYWNpdHkoKTsKKwkgIHJldHVybiBpdGVyYXRvcihfX3JlcywgdGhpcyk7CisJfQorI2VuZGlmCisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2luc2VydChfX3Bvc2l0aW9uKTsKKwlib29sIF9fcmVhbGxvYyA9IF9NX3JlcXVpcmVzX3JlYWxsb2NhdGlvbih0aGlzLT5zaXplKCkgKyAxKTsKKwlkaWZmZXJlbmNlX3R5cGUgX19vZmZzZXQgPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKKwl0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgX19yZXMgPSBfQmFzZTo6aW5zZXJ0KF9fcG9zaXRpb24uYmFzZSgpLF9feCk7CisJaWYgKF9fcmVhbGxvYykKKwkgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisJZWxzZQorCSAgdGhpcy0+X01faW52YWxpZGF0ZV9pZihfQWZ0ZXJfbnRoKF9fb2Zmc2V0LCBfTV9iYXNlKCkuYmVnaW4oKSkpOworCV9NX3VwZGF0ZV9ndWFyYW50ZWVkX2NhcGFjaXR5KCk7CisJcmV0dXJuIGl0ZXJhdG9yKF9fcmVzLCB0aGlzKTsKKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXAgPSBfVHA+CisgICAgICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8IXN0ZDo6X19hcmVfc2FtZTxfVXAsIGJvb2w+OjpfX3ZhbHVlLAorCQkJCQlpdGVyYXRvcj46Ol9fdHlwZQorICAgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgX1RwJiYgX194KQorICAgICAgICB7IHJldHVybiBlbXBsYWNlKF9fcG9zaXRpb24sIHN0ZDo6bW92ZShfX3gpKTsgfQorCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7IHRoaXMtPmluc2VydChfX3Bvc2l0aW9uLCBfX2wuYmVnaW4oKSwgX19sLmVuZCgpKTsgfQorI2VuZGlmCisKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9fcG9zaXRpb24pOworCWJvb2wgX19yZWFsbG9jID0gX01fcmVxdWlyZXNfcmVhbGxvY2F0aW9uKHRoaXMtPnNpemUoKSArIF9fbik7CisJZGlmZmVyZW5jZV90eXBlIF9fb2Zmc2V0ID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CisJX0Jhc2U6Omluc2VydChfX3Bvc2l0aW9uLmJhc2UoKSwgX19uLCBfX3gpOworCWlmIChfX3JlYWxsb2MpCisJICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCWVsc2UKKwkgIHRoaXMtPl9NX2ludmFsaWRhdGVfaWYoX0FmdGVyX250aChfX29mZnNldCwgX01fYmFzZSgpLmJlZ2luKCkpKTsKKwlfTV91cGRhdGVfZ3VhcmFudGVlZF9jYXBhY2l0eSgpOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKKwkgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgICB7CisJICBfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0X3JhbmdlKF9fcG9zaXRpb24sIF9fZmlyc3QsIF9fbGFzdCk7CisKKwkgIC8qIEhhcmQgdG8gZ3Vlc3MgaWYgaW52YWxpZGF0aW9uIHdpbGwgb2NjdXIsIGJlY2F1c2UgX19sYXN0CisJICAgICAtIF9fZmlyc3QgY2FuJ3QgYmUgY2FsY3VsYXRlZCBpbiBhbGwgY2FzZXMsIHNvIHdlIGp1c3QKKwkgICAgIHB1bnQgaGVyZSBieSBjaGVja2luZyBpZiBpdCBkaWQgb2NjdXIuICovCisJICB0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgX19vbGRfYmVnaW4gPSBfTV9iYXNlKCkuYmVnaW4oKTsKKwkgIGRpZmZlcmVuY2VfdHlwZSBfX29mZnNldCA9IF9fcG9zaXRpb24gLSBiZWdpbigpOworCSAgX0Jhc2U6Omluc2VydChfX3Bvc2l0aW9uLmJhc2UoKSwgX19maXJzdCwgX19sYXN0KTsKKworCSAgaWYgKF9NX2Jhc2UoKS5iZWdpbigpICE9IF9fb2xkX2JlZ2luKQorCSAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCSAgZWxzZQorCSAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2lmKF9BZnRlcl9udGgoX19vZmZzZXQsIF9NX2Jhc2UoKS5iZWdpbigpKSk7CisJICBfTV91cGRhdGVfZ3VhcmFudGVlZF9jYXBhY2l0eSgpOworCX0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2VyYXNlKF9fcG9zaXRpb24pOworCWRpZmZlcmVuY2VfdHlwZSBfX29mZnNldCA9IF9fcG9zaXRpb24gLSBiZWdpbigpOworCXR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBfX3JlcyA9IF9CYXNlOjplcmFzZShfX3Bvc2l0aW9uLmJhc2UoKSk7CisJdGhpcy0+X01faW52YWxpZGF0ZV9pZihfQWZ0ZXJfbnRoKF9fb2Zmc2V0LCBfTV9iYXNlKCkuYmVnaW4oKSkpOworCXJldHVybiBpdGVyYXRvcihfX3JlcywgdGhpcyk7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCisgICAgICB7CisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDE1MS4gY2FuJ3QgY3VycmVudGx5IGNsZWFyKCkgZW1wdHkgY29udGFpbmVyCisJX19nbGliY3h4X2NoZWNrX2VyYXNlX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKwlkaWZmZXJlbmNlX3R5cGUgX19vZmZzZXQgPSBfX2ZpcnN0IC0gYmVnaW4oKTsKKwl0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgX19yZXMgPSBfQmFzZTo6ZXJhc2UoX19maXJzdC5iYXNlKCksCisJCQkJCQkJIF9fbGFzdC5iYXNlKCkpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfaWYoX0FmdGVyX250aChfX29mZnNldCwgX01fYmFzZSgpLmJlZ2luKCkpKTsKKwlyZXR1cm4gaXRlcmF0b3IoX19yZXMsIHRoaXMpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKHZlY3RvciYgX194KQorICAgICAgeworCV9CYXNlOjpzd2FwKF9feCk7CisJdGhpcy0+X01fc3dhcChfX3gpOworICAgICAgICBzdGQ6OnN3YXAoX01fZ3VhcmFudGVlZF9jYXBhY2l0eSwgX194Ll9NX2d1YXJhbnRlZWRfY2FwYWNpdHkpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBjbGVhcigpCisgICAgICB7CisJX0Jhc2U6OmNsZWFyKCk7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgICAgX01fZ3VhcmFudGVlZF9jYXBhY2l0eSA9IDA7CisgICAgICB9CisKKyAgICAgIF9CYXNlJgorICAgICAgX01fYmFzZSgpIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIGNvbnN0IF9CYXNlJgorICAgICAgX01fYmFzZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgc2l6ZV90eXBlIF9NX2d1YXJhbnRlZWRfY2FwYWNpdHk7CisKKyAgICAgIGJvb2wKKyAgICAgIF9NX3JlcXVpcmVzX3JlYWxsb2NhdGlvbihzaXplX3R5cGUgX19lbGVtZW50cykKKyAgICAgIHsgcmV0dXJuIF9fZWxlbWVudHMgPiB0aGlzLT5jYXBhY2l0eSgpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3VwZGF0ZV9ndWFyYW50ZWVkX2NhcGFjaXR5KCkKKyAgICAgIHsKKwlpZiAodGhpcy0+c2l6ZSgpID4gX01fZ3VhcmFudGVlZF9jYXBhY2l0eSkKKwkgIF9NX2d1YXJhbnRlZWRfY2FwYWNpdHkgPSB0aGlzLT5zaXplKCk7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX19saHMsCisJICAgICAgIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA9PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX19saHMsCisJICAgICAgIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSAhPSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPCBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX19saHMsCisJICAgICAgIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA8PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX19saHMsCisJICAgICAgIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA+PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPiBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX19saHMsIHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0KKworfSAvLyBuYW1lc3BhY2UgX19kZWJ1ZworCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgLy8gRFIgMTE4Mi4KKyAgLy8vIHN0ZDo6aGFzaCBzcGVjaWFsaXphdGlvbiBmb3IgdmVjdG9yPGJvb2w+LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgc3RydWN0IGhhc2g8X19kZWJ1Zzo6dmVjdG9yPGJvb2wsIF9BbGxvYz4+CisgICAgOiBwdWJsaWMgc3RkOjp1bmFyeV9mdW5jdGlvbjxfX2RlYnVnOjp2ZWN0b3I8Ym9vbCwgX0FsbG9jPiwgc2l6ZV90PgorICAgIHsKKyAgICAgIHNpemVfdAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfX2RlYnVnOjp2ZWN0b3I8Ym9vbCwgX0FsbG9jPiYgX19iKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpoYXNoPF9HTElCQ1hYX1NURF9EOjp2ZWN0b3I8Ym9vbCwgX0FsbG9jPj4oKQorCSAgKF9fYi5fTV9iYXNlKCkpOyB9CisgICAgfTsKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlY2ltYWwvZGVjaW1hbCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZGVjaW1hbC9kZWNpbWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZjVhOTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlY2ltYWwvZGVjaW1hbApAQCAtMCwwICsxLDQ4MiBAQAorLy8gPGRlY2ltYWw+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL2RlY2ltYWwvZGVjaW1hbAorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworLy8gSVNPL0lFQyBUUiAyNDczMyAKKy8vIFdyaXR0ZW4gYnkgSmFuaXMgSm9obnNvbiA8amFuaXMxODdAdXMuaWJtLmNvbT4KKworI2lmbmRlZiBfR0xJQkNYWF9ERUNJTUFMCisjZGVmaW5lIF9HTElCQ1hYX0RFQ0lNQUwgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorCisjaWZuZGVmIF9HTElCQ1hYX1VTRV9ERUNJTUFMX0ZMT0FUCisjZXJyb3IgVGhpcyBmaWxlIHJlcXVpcmVzIGNvbXBpbGVyIGFuZCBsaWJyYXJ5IHN1cHBvcnQgZm9yIElTTy9JRUMgVFIgMjQ3MzMgXAordGhhdCBpcyBjdXJyZW50bHkgbm90IGF2YWlsYWJsZS4KKyNlbmRpZgorCituYW1lc3BhY2Ugc3RkCit7CisgIC8qKgorICAgICogQGRlZmdyb3VwIGRlY2ltYWwgRGVjaW1hbCBGbG9hdGluZy1Qb2ludCBBcml0aG1ldGljCisgICAgKiBAaW5ncm91cCBudW1lcmljcworICAgICoKKyAgICAqIENsYXNzZXMgYW5kIGZ1bmN0aW9ucyBmb3IgZGVjaW1hbCBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljLgorICAgICogQHsKKyAgICAqLworCisgIC8qKiBAbmFtZXNwYWNlIHN0ZDo6ZGVjaW1hbAorICAgICogQGJyaWVmIElTTy9JRUMgVFIgMjQ3MzMgRGVjaW1hbCBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljLgorICAgICovCituYW1lc3BhY2UgZGVjaW1hbAoreworICBjbGFzcyBkZWNpbWFsMzI7CisgIGNsYXNzIGRlY2ltYWw2NDsKKyAgY2xhc3MgZGVjaW1hbDEyODsKKworICAvLyAzLjIuNSAgSW5pdGlhbGl6YXRpb24gZnJvbSBjb2VmZmljaWVudCBhbmQgZXhwb25lbnQuCisgIHN0YXRpYyBkZWNpbWFsMzIgbWFrZV9kZWNpbWFsMzIobG9uZyBsb25nIF9fY29lZmYsIGludCBfX2V4cCk7CisgIHN0YXRpYyBkZWNpbWFsMzIgbWFrZV9kZWNpbWFsMzIodW5zaWduZWQgbG9uZyBsb25nIF9fY29lZmYsIGludCBfX2V4cCk7CisgIHN0YXRpYyBkZWNpbWFsNjQgbWFrZV9kZWNpbWFsNjQobG9uZyBsb25nIF9fY29lZmYsIGludCBfX2V4cCk7CisgIHN0YXRpYyBkZWNpbWFsNjQgbWFrZV9kZWNpbWFsNjQodW5zaWduZWQgbG9uZyBsb25nIF9fY29lZmYsIGludCBfX2V4cCk7CisgIHN0YXRpYyBkZWNpbWFsMTI4IG1ha2VfZGVjaW1hbDEyOChsb25nIGxvbmcgX19jb2VmZiwgaW50IF9fZXhwKTsKKyAgc3RhdGljIGRlY2ltYWwxMjggbWFrZV9kZWNpbWFsMTI4KHVuc2lnbmVkIGxvbmcgbG9uZyBfX2NvZWZmLCBpbnQgX19leHApOworCisgIC8vLyBOb24tY29uZm9ybWluZyBleHRlbnNpb246IENvbnZlcnNpb24gdG8gaW50ZWdyYWwgdHlwZS4KKyAgbG9uZyBsb25nIGRlY2ltYWwzMl90b19sb25nX2xvbmcoZGVjaW1hbDMyIF9fZCk7CisgIGxvbmcgbG9uZyBkZWNpbWFsNjRfdG9fbG9uZ19sb25nKGRlY2ltYWw2NCBfX2QpOworICBsb25nIGxvbmcgZGVjaW1hbDEyOF90b19sb25nX2xvbmcoZGVjaW1hbDEyOCBfX2QpOworICBsb25nIGxvbmcgZGVjaW1hbF90b19sb25nX2xvbmcoZGVjaW1hbDMyIF9fZCk7CisgIGxvbmcgbG9uZyBkZWNpbWFsX3RvX2xvbmdfbG9uZyhkZWNpbWFsNjQgX19kKTsKKyAgbG9uZyBsb25nIGRlY2ltYWxfdG9fbG9uZ19sb25nKGRlY2ltYWwxMjggX19kKTsKKworICAvLyAzLjIuNiAgQ29udmVyc2lvbiB0byBnZW5lcmljIGZsb2F0aW5nLXBvaW50IHR5cGUuCisgIGZsb2F0IGRlY2ltYWwzMl90b19mbG9hdChkZWNpbWFsMzIgX19kKTsKKyAgZmxvYXQgZGVjaW1hbDY0X3RvX2Zsb2F0KGRlY2ltYWw2NCBfX2QpOworICBmbG9hdCBkZWNpbWFsMTI4X3RvX2Zsb2F0KGRlY2ltYWwxMjggX19kKTsKKyAgZmxvYXQgZGVjaW1hbF90b19mbG9hdChkZWNpbWFsMzIgX19kKTsKKyAgZmxvYXQgZGVjaW1hbF90b19mbG9hdChkZWNpbWFsNjQgX19kKTsKKyAgZmxvYXQgZGVjaW1hbF90b19mbG9hdChkZWNpbWFsMTI4IF9fZCk7CisKKyAgZG91YmxlIGRlY2ltYWwzMl90b19kb3VibGUoZGVjaW1hbDMyIF9fZCk7CisgIGRvdWJsZSBkZWNpbWFsNjRfdG9fZG91YmxlKGRlY2ltYWw2NCBfX2QpOworICBkb3VibGUgZGVjaW1hbDEyOF90b19kb3VibGUoZGVjaW1hbDEyOCBfX2QpOworICBkb3VibGUgZGVjaW1hbF90b19kb3VibGUoZGVjaW1hbDMyIF9fZCk7CisgIGRvdWJsZSBkZWNpbWFsX3RvX2RvdWJsZShkZWNpbWFsNjQgX19kKTsKKyAgZG91YmxlIGRlY2ltYWxfdG9fZG91YmxlKGRlY2ltYWwxMjggX19kKTsKKworICBsb25nIGRvdWJsZSBkZWNpbWFsMzJfdG9fbG9uZ19kb3VibGUoZGVjaW1hbDMyIF9fZCk7CisgIGxvbmcgZG91YmxlIGRlY2ltYWw2NF90b19sb25nX2RvdWJsZShkZWNpbWFsNjQgX19kKTsKKyAgbG9uZyBkb3VibGUgZGVjaW1hbDEyOF90b19sb25nX2RvdWJsZShkZWNpbWFsMTI4IF9fZCk7CisgIGxvbmcgZG91YmxlIGRlY2ltYWxfdG9fbG9uZ19kb3VibGUoZGVjaW1hbDMyIF9fZCk7CisgIGxvbmcgZG91YmxlIGRlY2ltYWxfdG9fbG9uZ19kb3VibGUoZGVjaW1hbDY0IF9fZCk7CisgIGxvbmcgZG91YmxlIGRlY2ltYWxfdG9fbG9uZ19kb3VibGUoZGVjaW1hbDEyOCBfX2QpOworCisgIC8vIDMuMi43ICBVbmFyeSBhcml0aG1ldGljIG9wZXJhdG9ycy4KKyAgZGVjaW1hbDMyICBvcGVyYXRvcisoZGVjaW1hbDMyIF9fcmhzKTsKKyAgZGVjaW1hbDY0ICBvcGVyYXRvcisoZGVjaW1hbDY0IF9fcmhzKTsKKyAgZGVjaW1hbDEyOCBvcGVyYXRvcisoZGVjaW1hbDEyOCBfX3Jocyk7CisgIGRlY2ltYWwzMiAgb3BlcmF0b3ItKGRlY2ltYWwzMiBfX3Jocyk7CisgIGRlY2ltYWw2NCAgb3BlcmF0b3ItKGRlY2ltYWw2NCBfX3Jocyk7CisgIGRlY2ltYWwxMjggb3BlcmF0b3ItKGRlY2ltYWwxMjggX19yaHMpOworCisgIC8vIDMuMi44ICBCaW5hcnkgYXJpdGhtZXRpYyBvcGVyYXRvcnMuCisjZGVmaW5lIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKF9PcCwgX1QxLCBfVDIsIF9UMykJXAorICBfVDEgb3BlcmF0b3IgX09wKF9UMiBfX2xocywgX1QzIF9fcmhzKTsKKyNkZWZpbmUgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9JTlQoX09wLCBfVHApCQlcCisgIF9UcCBvcGVyYXRvciBfT3AoX1RwIF9fbGhzLCBpbnQgX19yaHMpOwkJCVwKKyAgX1RwIG9wZXJhdG9yIF9PcChfVHAgX19saHMsIHVuc2lnbmVkIGludCBfX3Jocyk7CQlcCisgIF9UcCBvcGVyYXRvciBfT3AoX1RwIF9fbGhzLCBsb25nIF9fcmhzKTsJCQlcCisgIF9UcCBvcGVyYXRvciBfT3AoX1RwIF9fbGhzLCB1bnNpZ25lZCBsb25nIF9fcmhzKTsJCVwKKyAgX1RwIG9wZXJhdG9yIF9PcChfVHAgX19saHMsIGxvbmcgbG9uZyBfX3Jocyk7CQkJXAorICBfVHAgb3BlcmF0b3IgX09wKF9UcCBfX2xocywgdW5zaWduZWQgbG9uZyBsb25nIF9fcmhzKTsJXAorICBfVHAgb3BlcmF0b3IgX09wKGludCBfX2xocywgX1RwIF9fcmhzKTsJCQlcCisgIF9UcCBvcGVyYXRvciBfT3AodW5zaWduZWQgaW50IF9fbGhzLCBfVHAgX19yaHMpOwkJXAorICBfVHAgb3BlcmF0b3IgX09wKGxvbmcgX19saHMsIF9UcCBfX3Jocyk7CQkJXAorICBfVHAgb3BlcmF0b3IgX09wKHVuc2lnbmVkIGxvbmcgX19saHMsIF9UcCBfX3Jocyk7CQlcCisgIF9UcCBvcGVyYXRvciBfT3AobG9uZyBsb25nIF9fbGhzLCBfVHAgX19yaHMpOwkJCVwKKyAgX1RwIG9wZXJhdG9yIF9PcCh1bnNpZ25lZCBsb25nIGxvbmcgX19saHMsIF9UcCBfX3Jocyk7CisKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKywgZGVjaW1hbDMyLCBkZWNpbWFsMzIsIGRlY2ltYWwzMikKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9JTlQoKywgZGVjaW1hbDMyKQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygrLCBkZWNpbWFsNjQsIGRlY2ltYWwzMiwgZGVjaW1hbDY0KQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygrLCBkZWNpbWFsNjQsIGRlY2ltYWw2NCwgZGVjaW1hbDMyKQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygrLCBkZWNpbWFsNjQsIGRlY2ltYWw2NCwgZGVjaW1hbDY0KQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0lOVCgrLCBkZWNpbWFsNjQpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKCssIGRlY2ltYWwxMjgsIGRlY2ltYWwzMiwgZGVjaW1hbDEyOCkKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKywgZGVjaW1hbDEyOCwgZGVjaW1hbDY0LCBkZWNpbWFsMTI4KQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygrLCBkZWNpbWFsMTI4LCBkZWNpbWFsMTI4LCBkZWNpbWFsMzIpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKCssIGRlY2ltYWwxMjgsIGRlY2ltYWwxMjgsIGRlY2ltYWw2NCkKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKywgZGVjaW1hbDEyOCwgZGVjaW1hbDEyOCwgZGVjaW1hbDEyOCkKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9JTlQoKywgZGVjaW1hbDEyOCkKKworICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygtLCBkZWNpbWFsMzIsIGRlY2ltYWwzMiwgZGVjaW1hbDMyKQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0lOVCgtLCBkZWNpbWFsMzIpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKC0sIGRlY2ltYWw2NCwgZGVjaW1hbDMyLCBkZWNpbWFsNjQpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKC0sIGRlY2ltYWw2NCwgZGVjaW1hbDY0LCBkZWNpbWFsMzIpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKC0sIGRlY2ltYWw2NCwgZGVjaW1hbDY0LCBkZWNpbWFsNjQpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfSU5UKC0sIGRlY2ltYWw2NCkKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoLSwgZGVjaW1hbDEyOCwgZGVjaW1hbDMyLCBkZWNpbWFsMTI4KQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygtLCBkZWNpbWFsMTI4LCBkZWNpbWFsNjQsIGRlY2ltYWwxMjgpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKC0sIGRlY2ltYWwxMjgsIGRlY2ltYWwxMjgsIGRlY2ltYWwzMikKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoLSwgZGVjaW1hbDEyOCwgZGVjaW1hbDEyOCwgZGVjaW1hbDY0KQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygtLCBkZWNpbWFsMTI4LCBkZWNpbWFsMTI4LCBkZWNpbWFsMTI4KQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0lOVCgtLCBkZWNpbWFsMTI4KQorCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKCosIGRlY2ltYWwzMiwgZGVjaW1hbDMyLCBkZWNpbWFsMzIpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfSU5UKCosIGRlY2ltYWwzMikKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKiwgZGVjaW1hbDY0LCBkZWNpbWFsMzIsIGRlY2ltYWw2NCkKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKiwgZGVjaW1hbDY0LCBkZWNpbWFsNjQsIGRlY2ltYWwzMikKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKiwgZGVjaW1hbDY0LCBkZWNpbWFsNjQsIGRlY2ltYWw2NCkKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9JTlQoKiwgZGVjaW1hbDY0KQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygqLCBkZWNpbWFsMTI4LCBkZWNpbWFsMzIsIGRlY2ltYWwxMjgpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKCosIGRlY2ltYWwxMjgsIGRlY2ltYWw2NCwgZGVjaW1hbDEyOCkKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKiwgZGVjaW1hbDEyOCwgZGVjaW1hbDEyOCwgZGVjaW1hbDMyKQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygqLCBkZWNpbWFsMTI4LCBkZWNpbWFsMTI4LCBkZWNpbWFsNjQpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKCosIGRlY2ltYWwxMjgsIGRlY2ltYWwxMjgsIGRlY2ltYWwxMjgpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfSU5UKCosIGRlY2ltYWwxMjgpCisKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoLywgZGVjaW1hbDMyLCBkZWNpbWFsMzIsIGRlY2ltYWwzMikKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9JTlQoLywgZGVjaW1hbDMyKQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygvLCBkZWNpbWFsNjQsIGRlY2ltYWwzMiwgZGVjaW1hbDY0KQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygvLCBkZWNpbWFsNjQsIGRlY2ltYWw2NCwgZGVjaW1hbDMyKQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygvLCBkZWNpbWFsNjQsIGRlY2ltYWw2NCwgZGVjaW1hbDY0KQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0lOVCgvLCBkZWNpbWFsNjQpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKC8sIGRlY2ltYWwxMjgsIGRlY2ltYWwzMiwgZGVjaW1hbDEyOCkKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoLywgZGVjaW1hbDEyOCwgZGVjaW1hbDY0LCBkZWNpbWFsMTI4KQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygvLCBkZWNpbWFsMTI4LCBkZWNpbWFsMTI4LCBkZWNpbWFsMzIpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKC8sIGRlY2ltYWwxMjgsIGRlY2ltYWwxMjgsIGRlY2ltYWw2NCkKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoLywgZGVjaW1hbDEyOCwgZGVjaW1hbDEyOCwgZGVjaW1hbDEyOCkKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9JTlQoLywgZGVjaW1hbDEyOCkKKworI3VuZGVmIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDCisjdW5kZWYgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9JTlQKKworICAvLyAzLjIuOSAgQ29tcGFyaXNvbiBvcGVyYXRvcnMuCisjZGVmaW5lIF9ERUNMQVJFX0RFQ0lNQUxfQ09NUEFSSVNPTihfT3AsIF9UcCkJCQkJXAorICBib29sIG9wZXJhdG9yIF9PcChfVHAgX19saHMsIGRlY2ltYWwzMiBfX3Jocyk7CQkJXAorICBib29sIG9wZXJhdG9yIF9PcChfVHAgX19saHMsIGRlY2ltYWw2NCBfX3Jocyk7CQkJXAorICBib29sIG9wZXJhdG9yIF9PcChfVHAgX19saHMsIGRlY2ltYWwxMjggX19yaHMpOwkJCVwKKyAgYm9vbCBvcGVyYXRvciBfT3AoX1RwIF9fbGhzLCBpbnQgX19yaHMpOwkJCQlcCisgIGJvb2wgb3BlcmF0b3IgX09wKF9UcCBfX2xocywgdW5zaWduZWQgaW50IF9fcmhzKTsJCQlcCisgIGJvb2wgb3BlcmF0b3IgX09wKF9UcCBfX2xocywgbG9uZyBfX3Jocyk7CQkJCVwKKyAgYm9vbCBvcGVyYXRvciBfT3AoX1RwIF9fbGhzLCB1bnNpZ25lZCBsb25nIF9fcmhzKTsJCQlcCisgIGJvb2wgb3BlcmF0b3IgX09wKF9UcCBfX2xocywgbG9uZyBsb25nIF9fcmhzKTsJCQlcCisgIGJvb2wgb3BlcmF0b3IgX09wKF9UcCBfX2xocywgdW5zaWduZWQgbG9uZyBsb25nIF9fcmhzKTsJCVwKKyAgYm9vbCBvcGVyYXRvciBfT3AoaW50IF9fbGhzLCBfVHAgX19yaHMpOwkJCQlcCisgIGJvb2wgb3BlcmF0b3IgX09wKHVuc2lnbmVkIGludCBfX2xocywgX1RwIF9fcmhzKTsJCQlcCisgIGJvb2wgb3BlcmF0b3IgX09wKGxvbmcgX19saHMsIF9UcCBfX3Jocyk7CQkJCVwKKyAgYm9vbCBvcGVyYXRvciBfT3AodW5zaWduZWQgbG9uZyBfX2xocywgX1RwIF9fcmhzKTsJCQlcCisgIGJvb2wgb3BlcmF0b3IgX09wKGxvbmcgbG9uZyBfX2xocywgX1RwIF9fcmhzKTsJCQlcCisgIGJvb2wgb3BlcmF0b3IgX09wKHVuc2lnbmVkIGxvbmcgbG9uZyBfX2xocywgX1RwIF9fcmhzKTsKKworICBfREVDTEFSRV9ERUNJTUFMX0NPTVBBUklTT04oPT0sIGRlY2ltYWwzMikKKyAgX0RFQ0xBUkVfREVDSU1BTF9DT01QQVJJU09OKD09LCBkZWNpbWFsNjQpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQ09NUEFSSVNPTig9PSwgZGVjaW1hbDEyOCkKKworICBfREVDTEFSRV9ERUNJTUFMX0NPTVBBUklTT04oIT0sIGRlY2ltYWwzMikKKyAgX0RFQ0xBUkVfREVDSU1BTF9DT01QQVJJU09OKCE9LCBkZWNpbWFsNjQpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQ09NUEFSSVNPTighPSwgZGVjaW1hbDEyOCkKKworICBfREVDTEFSRV9ERUNJTUFMX0NPTVBBUklTT04oPCwgZGVjaW1hbDMyKQorICBfREVDTEFSRV9ERUNJTUFMX0NPTVBBUklTT04oPCwgZGVjaW1hbDY0KQorICBfREVDTEFSRV9ERUNJTUFMX0NPTVBBUklTT04oPCwgZGVjaW1hbDEyOCkKKworICBfREVDTEFSRV9ERUNJTUFMX0NPTVBBUklTT04oPj0sIGRlY2ltYWwzMikKKyAgX0RFQ0xBUkVfREVDSU1BTF9DT01QQVJJU09OKD49LCBkZWNpbWFsNjQpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQ09NUEFSSVNPTig+PSwgZGVjaW1hbDEyOCkKKworICBfREVDTEFSRV9ERUNJTUFMX0NPTVBBUklTT04oPiwgZGVjaW1hbDMyKQorICBfREVDTEFSRV9ERUNJTUFMX0NPTVBBUklTT04oPiwgZGVjaW1hbDY0KQorICBfREVDTEFSRV9ERUNJTUFMX0NPTVBBUklTT04oPiwgZGVjaW1hbDEyOCkKKworICBfREVDTEFSRV9ERUNJTUFMX0NPTVBBUklTT04oPj0sIGRlY2ltYWwzMikKKyAgX0RFQ0xBUkVfREVDSU1BTF9DT01QQVJJU09OKD49LCBkZWNpbWFsNjQpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQ09NUEFSSVNPTig+PSwgZGVjaW1hbDEyOCkKKworI3VuZGVmIF9ERUNMQVJFX0RFQ0lNQUxfQ09NUEFSSVNPTgorCisgIC8vLyAzLjIuMiAgQ2xhc3MgZGVjaW1hbDMyLgorICBjbGFzcyBkZWNpbWFsMzIKKyAgeworICBwdWJsaWM6CisgICAgdHlwZWRlZiBmbG9hdCBfX2RlY2Zsb2F0MzIgX19hdHRyaWJ1dGVfXygobW9kZShTRCkpKTsKKworICAgIC8vIDMuMi4yLjIgIENvbnN0cnVjdC9jb3B5L2Rlc3Ryb3kuCisgICAgZGVjaW1hbDMyKCkJCQkJCTogX192YWwoMC5lLTEwMURGKSB7fQorCisgICAgLy8gMy4yLjIuMyAgQ29udmVyc2lvbiBmcm9tIGZsb2F0aW5nLXBvaW50IHR5cGUuCisgICAgZXhwbGljaXQgZGVjaW1hbDMyKGRlY2ltYWw2NCBfX2Q2NCk7CisgICAgZXhwbGljaXQgZGVjaW1hbDMyKGRlY2ltYWwxMjggX19kMTI4KTsKKyAgICBleHBsaWNpdCBkZWNpbWFsMzIoZmxvYXQgX19yKQkJOiBfX3ZhbChfX3IpIHt9CisgICAgZXhwbGljaXQgZGVjaW1hbDMyKGRvdWJsZSBfX3IpCQk6IF9fdmFsKF9fcikge30KKyAgICBleHBsaWNpdCBkZWNpbWFsMzIobG9uZyBkb3VibGUgX19yKQkJOiBfX3ZhbChfX3IpIHt9CisKKyAgICAvLyAzLjIuMi40ICBDb252ZXJzaW9uIGZyb20gaW50ZWdyYWwgdHlwZS4KKyAgICBkZWNpbWFsMzIoaW50IF9feikJCQkJOiBfX3ZhbChfX3opIHt9CisgICAgZGVjaW1hbDMyKHVuc2lnbmVkIGludCBfX3opCQkJOiBfX3ZhbChfX3opIHt9CisgICAgZGVjaW1hbDMyKGxvbmcgX196KQkJCQk6IF9fdmFsKF9feikge30KKyAgICBkZWNpbWFsMzIodW5zaWduZWQgbG9uZyBfX3opCQk6IF9fdmFsKF9feikge30KKyAgICBkZWNpbWFsMzIobG9uZyBsb25nIF9feikJCQk6IF9fdmFsKF9feikge30KKyAgICBkZWNpbWFsMzIodW5zaWduZWQgbG9uZyBsb25nIF9feikJCTogX192YWwoX196KSB7fQorCisgICAgLy8vIENvbmZvcm1pbmcgZXh0ZW5zaW9uOiBDb252ZXJzaW9uIGZyb20gc2NhbGFyIGRlY2ltYWwgdHlwZS4KKyAgICBkZWNpbWFsMzIoX19kZWNmbG9hdDMyIF9feikJCQk6IF9fdmFsKF9feikge30KKworICAgIC8vIDMuMi4yLjUgIENvbnZlcnNpb24gdG8gaW50ZWdyYWwgdHlwZS4gKERJU0FCTEVEKQorICAgIC8vb3BlcmF0b3IgbG9uZyBsb25nKCkgY29uc3QgeyByZXR1cm4gKGxvbmcgbG9uZylfX3ZhbDsgfQorCisgICAgLy8gMy4yLjIuNiAgSW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgb3BlcmF0b3JzLgorICAgIGRlY2ltYWwzMiYgb3BlcmF0b3IrKygpCisgICAgeworICAgICAgX192YWwgKz0gMTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBkZWNpbWFsMzIgb3BlcmF0b3IrKyhpbnQpCisgICAgeworICAgICAgZGVjaW1hbDMyIF9fdG1wID0gKnRoaXM7CisgICAgICBfX3ZhbCArPSAxOworICAgICAgcmV0dXJuIF9fdG1wOworICAgIH0KKworICAgIGRlY2ltYWwzMiYgb3BlcmF0b3ItLSgpCisgICAgeworICAgICAgX192YWwgLT0gMTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBkZWNpbWFsMzIgICBvcGVyYXRvci0tKGludCkKKyAgICB7CisgICAgICBkZWNpbWFsMzIgX190bXAgPSAqdGhpczsKKyAgICAgIF9fdmFsIC09IDE7CisgICAgICByZXR1cm4gX190bXA7CisgICAgfQorCisgICAgLy8gMy4yLjIuNyAgQ29tcG91bmQgYXNzaWdubWVudC4KKyNkZWZpbmUgX0RFQ0xBUkVfREVDSU1BTDMyX0NPTVBPVU5EX0FTU0lHTk1FTlQoX09wKQlcCisgICAgZGVjaW1hbDMyJiBvcGVyYXRvciBfT3AoZGVjaW1hbDMyIF9fcmhzKTsJCVwKKyAgICBkZWNpbWFsMzImIG9wZXJhdG9yIF9PcChkZWNpbWFsNjQgX19yaHMpOwkJXAorICAgIGRlY2ltYWwzMiYgb3BlcmF0b3IgX09wKGRlY2ltYWwxMjggX19yaHMpOwkJXAorICAgIGRlY2ltYWwzMiYgb3BlcmF0b3IgX09wKGludCBfX3Jocyk7CQkJXAorICAgIGRlY2ltYWwzMiYgb3BlcmF0b3IgX09wKHVuc2lnbmVkIGludCBfX3Jocyk7CVwKKyAgICBkZWNpbWFsMzImIG9wZXJhdG9yIF9PcChsb25nIF9fcmhzKTsJCVwKKyAgICBkZWNpbWFsMzImIG9wZXJhdG9yIF9PcCh1bnNpZ25lZCBsb25nIF9fcmhzKTsJXAorICAgIGRlY2ltYWwzMiYgb3BlcmF0b3IgX09wKGxvbmcgbG9uZyBfX3Jocyk7CQlcCisgICAgZGVjaW1hbDMyJiBvcGVyYXRvciBfT3AodW5zaWduZWQgbG9uZyBsb25nIF9fcmhzKTsKKworICAgIF9ERUNMQVJFX0RFQ0lNQUwzMl9DT01QT1VORF9BU1NJR05NRU5UKCs9KQorICAgIF9ERUNMQVJFX0RFQ0lNQUwzMl9DT01QT1VORF9BU1NJR05NRU5UKC09KQorICAgIF9ERUNMQVJFX0RFQ0lNQUwzMl9DT01QT1VORF9BU1NJR05NRU5UKCo9KQorICAgIF9ERUNMQVJFX0RFQ0lNQUwzMl9DT01QT1VORF9BU1NJR05NRU5UKC89KQorI3VuZGVmIF9ERUNMQVJFX0RFQ0lNQUwzMl9DT01QT1VORF9BU1NJR05NRU5UCisKKyAgcHJpdmF0ZToKKyAgICBfX2RlY2Zsb2F0MzIgX192YWw7CisKKyAgcHVibGljOgorICAgIF9fZGVjZmxvYXQzMiBfX2dldHZhbCh2b2lkKSB7IHJldHVybiBfX3ZhbDsgfQorICAgIHZvaWQgX19zZXR2YWwoX19kZWNmbG9hdDMyIF9feCkgeyBfX3ZhbCA9IF9feDsgfQorICB9OworCisgIC8vLyAzLjIuMyAgQ2xhc3MgZGVjaW1hbDY0LgorICBjbGFzcyBkZWNpbWFsNjQKKyAgeworICBwdWJsaWM6CisgICAgdHlwZWRlZiBmbG9hdCBfX2RlY2Zsb2F0NjQgX19hdHRyaWJ1dGVfXygobW9kZShERCkpKTsKKworICAgIC8vIDMuMi4zLjIgIENvbnN0cnVjdC9jb3B5L2Rlc3Ryb3kuCisgICAgZGVjaW1hbDY0KCkJCQkJCTogX192YWwoMC5lLTM5OGRkKSB7fQorCisgICAgLy8gMy4yLjMuMyAgQ29udmVyc2lvbiBmcm9tIGZsb2F0aW5nLXBvaW50IHR5cGUuCisJICAgICBkZWNpbWFsNjQoZGVjaW1hbDMyIGQzMik7CisgICAgZXhwbGljaXQgZGVjaW1hbDY0KGRlY2ltYWwxMjggZDEyOCk7CisgICAgZXhwbGljaXQgZGVjaW1hbDY0KGZsb2F0IF9fcikJCTogX192YWwoX19yKSB7fQorICAgIGV4cGxpY2l0IGRlY2ltYWw2NChkb3VibGUgX19yKQkJOiBfX3ZhbChfX3IpIHt9CisgICAgZXhwbGljaXQgZGVjaW1hbDY0KGxvbmcgZG91YmxlIF9fcikJCTogX192YWwoX19yKSB7fQorCisgICAgLy8gMy4yLjMuNCAgQ29udmVyc2lvbiBmcm9tIGludGVncmFsIHR5cGUuCisgICAgZGVjaW1hbDY0KGludCBfX3opCQkJCTogX192YWwoX196KSB7fQorICAgIGRlY2ltYWw2NCh1bnNpZ25lZCBpbnQgX196KQkJCTogX192YWwoX196KSB7fQorICAgIGRlY2ltYWw2NChsb25nIF9feikJCQkJOiBfX3ZhbChfX3opIHt9CisgICAgZGVjaW1hbDY0KHVuc2lnbmVkIGxvbmcgX196KQkJOiBfX3ZhbChfX3opIHt9CisgICAgZGVjaW1hbDY0KGxvbmcgbG9uZyBfX3opCQkJOiBfX3ZhbChfX3opIHt9CisgICAgZGVjaW1hbDY0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX3opCQk6IF9fdmFsKF9feikge30KKworICAgIC8vLyBDb25mb3JtaW5nIGV4dGVuc2lvbjogQ29udmVyc2lvbiBmcm9tIHNjYWxhciBkZWNpbWFsIHR5cGUuCisgICAgZGVjaW1hbDY0KF9fZGVjZmxvYXQ2NCBfX3opCQkJOiBfX3ZhbChfX3opIHt9CisKKyAgICAvLyAzLjIuMy41ICBDb252ZXJzaW9uIHRvIGludGVncmFsIHR5cGUuIChESVNBQkxFRCkKKyAgICAvL29wZXJhdG9yIGxvbmcgbG9uZygpIGNvbnN0IHsgcmV0dXJuIChsb25nIGxvbmcpX192YWw7IH0KKworICAgIC8vIDMuMi4zLjYgIEluY3JlbWVudCBhbmQgZGVjcmVtZW50IG9wZXJhdG9ycy4KKyAgICBkZWNpbWFsNjQmIG9wZXJhdG9yKysoKQorICAgIHsKKyAgICAgIF9fdmFsICs9IDE7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgZGVjaW1hbDY0IG9wZXJhdG9yKysoaW50KQorICAgIHsKKyAgICAgIGRlY2ltYWw2NCBfX3RtcCA9ICp0aGlzOworICAgICAgX192YWwgKz0gMTsKKyAgICAgIHJldHVybiBfX3RtcDsKKyAgICB9CisKKyAgICBkZWNpbWFsNjQmIG9wZXJhdG9yLS0oKQorICAgIHsKKyAgICAgIF9fdmFsIC09IDE7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgZGVjaW1hbDY0IG9wZXJhdG9yLS0oaW50KQorICAgIHsKKyAgICAgIGRlY2ltYWw2NCBfX3RtcCA9ICp0aGlzOworICAgICAgX192YWwgLT0gMTsKKyAgICAgIHJldHVybiBfX3RtcDsKKyAgICB9CisKKyAgICAvLyAzLjIuMy43ICBDb21wb3VuZCBhc3NpZ25tZW50LgorI2RlZmluZSBfREVDTEFSRV9ERUNJTUFMNjRfQ09NUE9VTkRfQVNTSUdOTUVOVChfT3ApCVwKKyAgICBkZWNpbWFsNjQmIG9wZXJhdG9yIF9PcChkZWNpbWFsMzIgX19yaHMpOwkJXAorICAgIGRlY2ltYWw2NCYgb3BlcmF0b3IgX09wKGRlY2ltYWw2NCBfX3Jocyk7CQlcCisgICAgZGVjaW1hbDY0JiBvcGVyYXRvciBfT3AoZGVjaW1hbDEyOCBfX3Jocyk7CQlcCisgICAgZGVjaW1hbDY0JiBvcGVyYXRvciBfT3AoaW50IF9fcmhzKTsJCQlcCisgICAgZGVjaW1hbDY0JiBvcGVyYXRvciBfT3AodW5zaWduZWQgaW50IF9fcmhzKTsJXAorICAgIGRlY2ltYWw2NCYgb3BlcmF0b3IgX09wKGxvbmcgX19yaHMpOwkJXAorICAgIGRlY2ltYWw2NCYgb3BlcmF0b3IgX09wKHVuc2lnbmVkIGxvbmcgX19yaHMpOwlcCisgICAgZGVjaW1hbDY0JiBvcGVyYXRvciBfT3AobG9uZyBsb25nIF9fcmhzKTsJCVwKKyAgICBkZWNpbWFsNjQmIG9wZXJhdG9yIF9PcCh1bnNpZ25lZCBsb25nIGxvbmcgX19yaHMpOworCisgICAgX0RFQ0xBUkVfREVDSU1BTDY0X0NPTVBPVU5EX0FTU0lHTk1FTlQoKz0pCisgICAgX0RFQ0xBUkVfREVDSU1BTDY0X0NPTVBPVU5EX0FTU0lHTk1FTlQoLT0pCisgICAgX0RFQ0xBUkVfREVDSU1BTDY0X0NPTVBPVU5EX0FTU0lHTk1FTlQoKj0pCisgICAgX0RFQ0xBUkVfREVDSU1BTDY0X0NPTVBPVU5EX0FTU0lHTk1FTlQoLz0pCisjdW5kZWYgX0RFQ0xBUkVfREVDSU1BTDY0X0NPTVBPVU5EX0FTU0lHTk1FTlQKKworICBwcml2YXRlOgorICAgIF9fZGVjZmxvYXQ2NCBfX3ZhbDsKKworICBwdWJsaWM6CisgICAgX19kZWNmbG9hdDY0IF9fZ2V0dmFsKHZvaWQpIHsgcmV0dXJuIF9fdmFsOyB9CisgICAgdm9pZCBfX3NldHZhbChfX2RlY2Zsb2F0NjQgX194KSB7IF9fdmFsID0gX194OyB9CisgIH07CisKKyAgLy8vIDMuMi40ICBDbGFzcyBkZWNpbWFsMTI4LgorICBjbGFzcyBkZWNpbWFsMTI4CisgIHsKKyAgcHVibGljOgorICAgIHR5cGVkZWYgZmxvYXQgX19kZWNmbG9hdDEyOCBfX2F0dHJpYnV0ZV9fKChtb2RlKFREKSkpOworCisgICAgLy8gMy4yLjQuMiAgQ29uc3RydWN0L2NvcHkvZGVzdHJveS4KKyAgICBkZWNpbWFsMTI4KCkJCQkJOiBfX3ZhbCgwLmUtNjE3NkRMKSB7fQorCisgICAgLy8gMy4yLjQuMyAgQ29udmVyc2lvbiBmcm9tIGZsb2F0aW5nLXBvaW50IHR5cGUuCisJICAgICBkZWNpbWFsMTI4KGRlY2ltYWwzMiBkMzIpOworCSAgICAgZGVjaW1hbDEyOChkZWNpbWFsNjQgZDY0KTsKKyAgICBleHBsaWNpdCBkZWNpbWFsMTI4KGZsb2F0IF9fcikJCTogX192YWwoX19yKSB7fQorICAgIGV4cGxpY2l0IGRlY2ltYWwxMjgoZG91YmxlIF9fcikJCTogX192YWwoX19yKSB7fQorICAgIGV4cGxpY2l0IGRlY2ltYWwxMjgobG9uZyBkb3VibGUgX19yKQk6IF9fdmFsKF9fcikge30KKworCisgICAgLy8gMy4yLjQuNCAgQ29udmVyc2lvbiBmcm9tIGludGVncmFsIHR5cGUuCisgICAgZGVjaW1hbDEyOChpbnQgX196KQkJCQk6IF9fdmFsKF9feikge30KKyAgICBkZWNpbWFsMTI4KHVuc2lnbmVkIGludCBfX3opCQk6IF9fdmFsKF9feikge30KKyAgICBkZWNpbWFsMTI4KGxvbmcgX196KQkJCTogX192YWwoX196KSB7fQorICAgIGRlY2ltYWwxMjgodW5zaWduZWQgbG9uZyBfX3opCQk6IF9fdmFsKF9feikge30KKyAgICBkZWNpbWFsMTI4KGxvbmcgbG9uZyBfX3opCQkJOiBfX3ZhbChfX3opIHt9CisgICAgZGVjaW1hbDEyOCh1bnNpZ25lZCBsb25nIGxvbmcgX196KQkJOiBfX3ZhbChfX3opIHt9CisKKyAgICAvLy8gQ29uZm9ybWluZyBleHRlbnNpb246IENvbnZlcnNpb24gZnJvbSBzY2FsYXIgZGVjaW1hbCB0eXBlLgorICAgIGRlY2ltYWwxMjgoX19kZWNmbG9hdDEyOCBfX3opCQk6IF9fdmFsKF9feikge30KKworICAgIC8vIDMuMi40LjUgIENvbnZlcnNpb24gdG8gaW50ZWdyYWwgdHlwZS4gKERJU0FCTEVEKQorICAgIC8vb3BlcmF0b3IgbG9uZyBsb25nKCkgY29uc3QgeyByZXR1cm4gKGxvbmcgbG9uZylfX3ZhbDsgfQorCisgICAgLy8gMy4yLjQuNiAgSW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgb3BlcmF0b3JzLgorICAgIGRlY2ltYWwxMjgmIG9wZXJhdG9yKysoKQorICAgIHsKKyAgICAgIF9fdmFsICs9IDE7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgZGVjaW1hbDEyOCBvcGVyYXRvcisrKGludCkKKyAgICB7CisgICAgICBkZWNpbWFsMTI4IF9fdG1wID0gKnRoaXM7CisgICAgICBfX3ZhbCArPSAxOworICAgICAgcmV0dXJuIF9fdG1wOworICAgIH0KKworICAgIGRlY2ltYWwxMjgmIG9wZXJhdG9yLS0oKQorICAgIHsKKyAgICAgIF9fdmFsIC09IDE7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgZGVjaW1hbDEyOCAgIG9wZXJhdG9yLS0oaW50KQorICAgIHsKKyAgICAgIGRlY2ltYWwxMjggX190bXAgPSAqdGhpczsKKyAgICAgIF9fdmFsIC09IDE7CisgICAgICByZXR1cm4gX190bXA7CisgICAgfQorCisgICAgLy8gMy4yLjQuNyAgQ29tcG91bmQgYXNzaWdubWVudC4KKyNkZWZpbmUgX0RFQ0xBUkVfREVDSU1BTDEyOF9DT01QT1VORF9BU1NJR05NRU5UKF9PcCkJXAorICAgIGRlY2ltYWwxMjgmIG9wZXJhdG9yIF9PcChkZWNpbWFsMzIgX19yaHMpOwkJXAorICAgIGRlY2ltYWwxMjgmIG9wZXJhdG9yIF9PcChkZWNpbWFsNjQgX19yaHMpOwkJXAorICAgIGRlY2ltYWwxMjgmIG9wZXJhdG9yIF9PcChkZWNpbWFsMTI4IF9fcmhzKTsJCVwKKyAgICBkZWNpbWFsMTI4JiBvcGVyYXRvciBfT3AoaW50IF9fcmhzKTsJCVwKKyAgICBkZWNpbWFsMTI4JiBvcGVyYXRvciBfT3AodW5zaWduZWQgaW50IF9fcmhzKTsJXAorICAgIGRlY2ltYWwxMjgmIG9wZXJhdG9yIF9PcChsb25nIF9fcmhzKTsJCVwKKyAgICBkZWNpbWFsMTI4JiBvcGVyYXRvciBfT3AodW5zaWduZWQgbG9uZyBfX3Jocyk7CVwKKyAgICBkZWNpbWFsMTI4JiBvcGVyYXRvciBfT3AobG9uZyBsb25nIF9fcmhzKTsJCVwKKyAgICBkZWNpbWFsMTI4JiBvcGVyYXRvciBfT3AodW5zaWduZWQgbG9uZyBsb25nIF9fcmhzKTsKKworICAgIF9ERUNMQVJFX0RFQ0lNQUwxMjhfQ09NUE9VTkRfQVNTSUdOTUVOVCgrPSkKKyAgICBfREVDTEFSRV9ERUNJTUFMMTI4X0NPTVBPVU5EX0FTU0lHTk1FTlQoLT0pCisgICAgX0RFQ0xBUkVfREVDSU1BTDEyOF9DT01QT1VORF9BU1NJR05NRU5UKCo9KQorICAgIF9ERUNMQVJFX0RFQ0lNQUwxMjhfQ09NUE9VTkRfQVNTSUdOTUVOVCgvPSkKKyN1bmRlZiBfREVDTEFSRV9ERUNJTUFMMTI4X0NPTVBPVU5EX0FTU0lHTk1FTlQKKworICBwcml2YXRlOgorICAgIF9fZGVjZmxvYXQxMjggX192YWw7CisKKyAgcHVibGljOgorICAgIF9fZGVjZmxvYXQxMjggX19nZXR2YWwodm9pZCkgeyByZXR1cm4gX192YWw7IH0KKyAgICB2b2lkIF9fc2V0dmFsKF9fZGVjZmxvYXQxMjggX194KSB7IF9fdmFsID0gX194OyB9CisgIH07CisKKyNkZWZpbmUgX0dMSUJDWFhfVVNFX0RFQ0lNQUxfIDEKKworfSAvLyBuYW1lc3BhY2UgZGVjaW1hbAorICAvLyBAfSBncm91cCBkZWNpbWFsCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2luY2x1ZGUgPGRlY2ltYWwvZGVjaW1hbC5oPgorCisjZW5kaWYgLyogX0dMSUJDWFhfREVDSU1BTCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9kZWNpbWFsL2RlY2ltYWwuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZGVjaW1hbC9kZWNpbWFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVhNmZiYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZGVjaW1hbC9kZWNpbWFsLmgKQEAgLTAsMCArMSw0NjYgQEAKKy8vIGRlY2ltYWwgY2xhc3NlcyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL2RlY2ltYWwuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisvLyBJU08vSUVDIFRSIDI0NzMzCisvLyBXcml0dGVuIGJ5IEphbmlzIEpvaG5zb24gPGphbmlzMTg3QHVzLmlibS5jb20+CisKKyNpZm5kZWYgX0dMSUJDWFhfREVDSU1BTF9JTVBMCisjZGVmaW5lIF9HTElCQ1hYX0RFQ0lNQUxfSU1QTCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworbmFtZXNwYWNlIHN0ZAoreworbmFtZXNwYWNlIGRlY2ltYWwKK3sKKyAgLy8gSVNPL0lFQyBUUiAyNDczMyAgMy4yLlsyMzRdLjEgIENvbnN0cnVjdC9jb3B5L2Rlc3Ryb3kuCisKKyAgaW5saW5lIGRlY2ltYWwzMjo6ZGVjaW1hbDMyKGRlY2ltYWw2NCBfX3IpCTogX192YWwoX19yLl9fZ2V0dmFsKCkpIHt9CisgIGlubGluZSBkZWNpbWFsMzI6OmRlY2ltYWwzMihkZWNpbWFsMTI4IF9fcikJOiBfX3ZhbChfX3IuX19nZXR2YWwoKSkge30KKyAgaW5saW5lIGRlY2ltYWw2NDo6ZGVjaW1hbDY0KGRlY2ltYWwzMiBfX3IpCTogX192YWwoX19yLl9fZ2V0dmFsKCkpIHt9CisgIGlubGluZSBkZWNpbWFsNjQ6OmRlY2ltYWw2NChkZWNpbWFsMTI4IF9fcikJOiBfX3ZhbChfX3IuX19nZXR2YWwoKSkge30KKyAgaW5saW5lIGRlY2ltYWwxMjg6OmRlY2ltYWwxMjgoZGVjaW1hbDMyIF9fcikJOiBfX3ZhbChfX3IuX19nZXR2YWwoKSkge30KKyAgaW5saW5lIGRlY2ltYWwxMjg6OmRlY2ltYWwxMjgoZGVjaW1hbDY0IF9fcikJOiBfX3ZhbChfX3IuX19nZXR2YWwoKSkge30KKworICAvLyBJU08vSUVDIFRSIDI0NzMzICAzLjIuWzIzNF0uNiAgQ29tcG91bmQgYXNzaWdubWVudC4KKworI2RlZmluZSBfREVGSU5FX0RFQ0lNQUxfQ09NUE9VTkRfQVNTSUdOTUVOVF9ERUMoX09wMSwgX09wMiwgX1QxLCBfVDIpCSBcCisgIGlubGluZSBfVDEmIF9UMTo6b3BlcmF0b3IgX09wMShfVDIgX19yaHMpCQkJCSBcCisgIHsJCQkJCQkJCQkgXAorICAgIF9fc2V0dmFsKF9fZ2V0dmFsKCkgX09wMiBfX3Jocy5fX2dldHZhbCgpKTsJCQkJIFwKKyAgICByZXR1cm4gKnRoaXM7CQkJCQkJCSBcCisgIH0KKworI2RlZmluZSBfREVGSU5FX0RFQ0lNQUxfQ09NUE9VTkRfQVNTSUdOTUVOVF9JTlQoX09wMSwgX09wMiwgX1QxLCBfVDIpCSBcCisgIGlubGluZSBfVDEmIF9UMTo6b3BlcmF0b3IgX09wMShfVDIgX19yaHMpCQkJCSBcCisgIHsJCQkJCQkJCQkgXAorICAgIF9fc2V0dmFsKF9fZ2V0dmFsKCkgX09wMiBfX3Jocyk7CQkJCQkgXAorICAgIHJldHVybiAqdGhpczsJCQkJCQkJIFwKKyAgfQorCisjZGVmaW5lIF9ERUZJTkVfREVDSU1BTF9DT01QT1VORF9BU1NJR05NRU5UUyhfT3AxLCBfT3AyLCBfVDEpCQkgXAorICBfREVGSU5FX0RFQ0lNQUxfQ09NUE9VTkRfQVNTSUdOTUVOVF9ERUMoX09wMSwgX09wMiwgX1QxLCBkZWNpbWFsMzIpCSBcCisgIF9ERUZJTkVfREVDSU1BTF9DT01QT1VORF9BU1NJR05NRU5UX0RFQyhfT3AxLCBfT3AyLCBfVDEsIGRlY2ltYWw2NCkJIFwKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBPVU5EX0FTU0lHTk1FTlRfREVDKF9PcDEsIF9PcDIsIF9UMSwgZGVjaW1hbDEyOCkJIFwKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBPVU5EX0FTU0lHTk1FTlRfSU5UKF9PcDEsIF9PcDIsIF9UMSwgaW50KQkJIFwKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBPVU5EX0FTU0lHTk1FTlRfSU5UKF9PcDEsIF9PcDIsIF9UMSwgdW5zaWduZWQgaW50KSBcCisgIF9ERUZJTkVfREVDSU1BTF9DT01QT1VORF9BU1NJR05NRU5UX0lOVChfT3AxLCBfT3AyLCBfVDEsIGxvbmcpCSBcCisgIF9ERUZJTkVfREVDSU1BTF9DT01QT1VORF9BU1NJR05NRU5UX0lOVChfT3AxLCBfT3AyLCBfVDEsIHVuc2lnbmVkIGxvbmcpXAorICBfREVGSU5FX0RFQ0lNQUxfQ09NUE9VTkRfQVNTSUdOTUVOVF9JTlQoX09wMSwgX09wMiwgX1QxLCBsb25nIGxvbmcpCSBcCisgIF9ERUZJTkVfREVDSU1BTF9DT01QT1VORF9BU1NJR05NRU5UX0lOVChfT3AxLCBfT3AyLCBfVDEsIHVuc2lnbmVkIGxvbmcgbG9uZykKKworICBfREVGSU5FX0RFQ0lNQUxfQ09NUE9VTkRfQVNTSUdOTUVOVFMoKz0sICssIGRlY2ltYWwzMikKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBPVU5EX0FTU0lHTk1FTlRTKC09LCAtLCBkZWNpbWFsMzIpCisgIF9ERUZJTkVfREVDSU1BTF9DT01QT1VORF9BU1NJR05NRU5UUygqPSwgKiwgZGVjaW1hbDMyKQorICBfREVGSU5FX0RFQ0lNQUxfQ09NUE9VTkRfQVNTSUdOTUVOVFMoLz0sIC8sIGRlY2ltYWwzMikKKworICBfREVGSU5FX0RFQ0lNQUxfQ09NUE9VTkRfQVNTSUdOTUVOVFMoKz0sICssIGRlY2ltYWw2NCkKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBPVU5EX0FTU0lHTk1FTlRTKC09LCAtLCBkZWNpbWFsNjQpCisgIF9ERUZJTkVfREVDSU1BTF9DT01QT1VORF9BU1NJR05NRU5UUygqPSwgKiwgZGVjaW1hbDY0KQorICBfREVGSU5FX0RFQ0lNQUxfQ09NUE9VTkRfQVNTSUdOTUVOVFMoLz0sIC8sIGRlY2ltYWw2NCkKKworICBfREVGSU5FX0RFQ0lNQUxfQ09NUE9VTkRfQVNTSUdOTUVOVFMoKz0sICssIGRlY2ltYWwxMjgpCisgIF9ERUZJTkVfREVDSU1BTF9DT01QT1VORF9BU1NJR05NRU5UUygtPSwgLSwgZGVjaW1hbDEyOCkKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBPVU5EX0FTU0lHTk1FTlRTKCo9LCAqLCBkZWNpbWFsMTI4KQorICBfREVGSU5FX0RFQ0lNQUxfQ09NUE9VTkRfQVNTSUdOTUVOVFMoLz0sIC8sIGRlY2ltYWwxMjgpCisKKyN1bmRlZiBfREVGSU5FX0RFQ0lNQUxfQ09NUE9VTkRfQVNTSUdOTUVOVF9ERUMKKyN1bmRlZiBfREVGSU5FX0RFQ0lNQUxfQ09NUE9VTkRfQVNTSUdOTUVOVF9JTlQKKyN1bmRlZiBfREVGSU5FX0RFQ0lNQUxfQ09NUE9VTkRfQVNTSUdOTUVOVFMKKworICAvLyBFeHRlbnNpb246IENvbnZlcnNpb24gdG8gaW50ZWdyYWwgdHlwZS4KKworICBpbmxpbmUgbG9uZyBsb25nIGRlY2ltYWwzMl90b19sb25nX2xvbmcoZGVjaW1hbDMyIF9fZCkKKyAgeyByZXR1cm4gKGxvbmcgbG9uZylfX2QuX19nZXR2YWwoKTsgfQorCisgIGlubGluZSBsb25nIGxvbmcgZGVjaW1hbDY0X3RvX2xvbmdfbG9uZyhkZWNpbWFsNjQgX19kKQorICB7IHJldHVybiAobG9uZyBsb25nKV9fZC5fX2dldHZhbCgpOyB9CisKKyAgaW5saW5lIGxvbmcgbG9uZyBkZWNpbWFsMTI4X3RvX2xvbmdfbG9uZyhkZWNpbWFsMTI4IF9fZCkKKyAgeyByZXR1cm4gKGxvbmcgbG9uZylfX2QuX19nZXR2YWwoKTsgfQorCisgIGlubGluZSBsb25nIGxvbmcgZGVjaW1hbF90b19sb25nX2xvbmcoZGVjaW1hbDMyIF9fZCkKKyAgeyByZXR1cm4gKGxvbmcgbG9uZylfX2QuX19nZXR2YWwoKTsgfQorCisgIGlubGluZSBsb25nIGxvbmcgZGVjaW1hbF90b19sb25nX2xvbmcoZGVjaW1hbDY0IF9fZCkKKyAgeyByZXR1cm4gKGxvbmcgbG9uZylfX2QuX19nZXR2YWwoKTsgfQorCisgIGlubGluZSBsb25nIGxvbmcgZGVjaW1hbF90b19sb25nX2xvbmcoZGVjaW1hbDEyOCBfX2QpCisgIHsgcmV0dXJuIChsb25nIGxvbmcpX19kLl9fZ2V0dmFsKCk7IH0KKworICAvLyBJU08vSUVDIFRSIDI0NzMzICAzLjIuNSAgSW5pdGlhbGl6YXRpb24gZnJvbSBjb2VmZmljaWVudCBhbmQgZXhwb25lbnQuCisKKyAgc3RhdGljIGRlY2ltYWwzMiBtYWtlX2RlY2ltYWwzMihsb25nIGxvbmcgX19jb2VmZiwgaW50IF9fZXhwb25lbnQpCisgIHsKKyAgICBkZWNpbWFsMzIgX19kZWNleHAgPSAxLCBfX211bHRpcGxpZXI7CisKKyAgICBpZiAoX19leHBvbmVudCA8IDApCisgICAgICB7CisJX19tdWx0aXBsaWVyID0gMS5FLTFERjsKKwlfX2V4cG9uZW50ID0gLV9fZXhwb25lbnQ7CisgICAgICB9CisgICAgZWxzZQorICAgICAgX19tdWx0aXBsaWVyID0gMS5FMURGOworCisgICAgZm9yIChpbnQgX19pID0gMDsgX19pIDwgX19leHBvbmVudDsgKytfX2kpCisgICAgICBfX2RlY2V4cCAqPSBfX211bHRpcGxpZXI7CisKKyAgICByZXR1cm4gX19jb2VmZiAqIF9fZGVjZXhwOworICB9CisKKyAgc3RhdGljIGRlY2ltYWwzMiBtYWtlX2RlY2ltYWwzMih1bnNpZ25lZCBsb25nIGxvbmcgX19jb2VmZiwgaW50IF9fZXhwb25lbnQpCisgIHsKKyAgICBkZWNpbWFsMzIgX19kZWNleHAgPSAxLCBfX211bHRpcGxpZXI7CisKKyAgICBpZiAoX19leHBvbmVudCA8IDApCisgICAgICB7CisJX19tdWx0aXBsaWVyID0gMS5FLTFERjsKKwlfX2V4cG9uZW50ID0gLV9fZXhwb25lbnQ7CisgICAgICB9CisgICAgZWxzZQorICAgICAgX19tdWx0aXBsaWVyID0gMS5FMURGOworCisgICAgZm9yIChpbnQgX19pID0gMDsgX19pIDwgX19leHBvbmVudDsgKytfX2kpCisgICAgICBfX2RlY2V4cCAqPSBfX211bHRpcGxpZXI7CisKKyAgICByZXR1cm4gX19jb2VmZiAqIF9fZGVjZXhwOworICB9CisKKyAgc3RhdGljIGRlY2ltYWw2NCBtYWtlX2RlY2ltYWw2NChsb25nIGxvbmcgX19jb2VmZiwgaW50IF9fZXhwb25lbnQpCisgIHsKKyAgICBkZWNpbWFsNjQgX19kZWNleHAgPSAxLCBfX211bHRpcGxpZXI7CisKKyAgICBpZiAoX19leHBvbmVudCA8IDApCisgICAgICB7CisJX19tdWx0aXBsaWVyID0gMS5FLTFERDsKKwlfX2V4cG9uZW50ID0gLV9fZXhwb25lbnQ7CisgICAgICB9CisgICAgZWxzZQorICAgICAgX19tdWx0aXBsaWVyID0gMS5FMUREOworCisgICAgZm9yIChpbnQgX19pID0gMDsgX19pIDwgX19leHBvbmVudDsgKytfX2kpCisgICAgICBfX2RlY2V4cCAqPSBfX211bHRpcGxpZXI7CisKKyAgICByZXR1cm4gX19jb2VmZiAqIF9fZGVjZXhwOworICB9CisKKyAgc3RhdGljIGRlY2ltYWw2NCBtYWtlX2RlY2ltYWw2NCh1bnNpZ25lZCBsb25nIGxvbmcgX19jb2VmZiwgaW50IF9fZXhwb25lbnQpCisgIHsKKyAgICBkZWNpbWFsNjQgX19kZWNleHAgPSAxLCBfX211bHRpcGxpZXI7CisKKyAgICBpZiAoX19leHBvbmVudCA8IDApCisgICAgICB7CisJX19tdWx0aXBsaWVyID0gMS5FLTFERDsKKwlfX2V4cG9uZW50ID0gLV9fZXhwb25lbnQ7CisgICAgICB9CisgICAgZWxzZQorICAgICAgX19tdWx0aXBsaWVyID0gMS5FMUREOworCisgICAgZm9yIChpbnQgX19pID0gMDsgX19pIDwgX19leHBvbmVudDsgKytfX2kpCisgICAgICBfX2RlY2V4cCAqPSBfX211bHRpcGxpZXI7CisKKyAgICByZXR1cm4gX19jb2VmZiAqIF9fZGVjZXhwOworICB9CisKKyAgc3RhdGljIGRlY2ltYWwxMjggbWFrZV9kZWNpbWFsMTI4KGxvbmcgbG9uZyBfX2NvZWZmLCBpbnQgX19leHBvbmVudCkKKyAgeworICAgIGRlY2ltYWwxMjggX19kZWNleHAgPSAxLCBfX211bHRpcGxpZXI7CisKKyAgICBpZiAoX19leHBvbmVudCA8IDApCisgICAgICB7CisJX19tdWx0aXBsaWVyID0gMS5FLTFETDsKKwlfX2V4cG9uZW50ID0gLV9fZXhwb25lbnQ7CisgICAgICB9CisgICAgZWxzZQorICAgICAgX19tdWx0aXBsaWVyID0gMS5FMURMOworCisgICAgZm9yIChpbnQgX19pID0gMDsgX19pIDwgX19leHBvbmVudDsgKytfX2kpCisgICAgICBfX2RlY2V4cCAqPSBfX211bHRpcGxpZXI7CisKKyAgICByZXR1cm4gX19jb2VmZiAqIF9fZGVjZXhwOworICB9CisKKyAgc3RhdGljIGRlY2ltYWwxMjggbWFrZV9kZWNpbWFsMTI4KHVuc2lnbmVkIGxvbmcgbG9uZyBfX2NvZWZmLCBpbnQgX19leHBvbmVudCkKKyAgeworICAgIGRlY2ltYWwxMjggX19kZWNleHAgPSAxLCBfX211bHRpcGxpZXI7CisKKyAgICBpZiAoX19leHBvbmVudCA8IDApCisgICAgICB7CisJX19tdWx0aXBsaWVyID0gMS5FLTFETDsKKwlfX2V4cG9uZW50ID0gLV9fZXhwb25lbnQ7CisgICAgICB9CisgICAgZWxzZQorICAgICAgX19tdWx0aXBsaWVyID0gMS5FMURMOworCisgICAgZm9yIChpbnQgX19pID0gMDsgX19pIDwgX19leHBvbmVudDsgKytfX2kpCisgICAgICBfX2RlY2V4cCAqPSBfX211bHRpcGxpZXI7CisKKyAgICByZXR1cm4gX19jb2VmZiAqIF9fZGVjZXhwOworICB9CisKKyAgLy8gSVNPL0lFQyBUUiAyNDczMyAgMy4yLjYgIENvbnZlcnNpb24gdG8gZ2VuZXJpYyBmbG9hdGluZy1wb2ludCB0eXBlLgorCisgIGlubGluZSBmbG9hdCBkZWNpbWFsMzJfdG9fZmxvYXQoZGVjaW1hbDMyIF9fZCkKKyAgeyByZXR1cm4gKGZsb2F0KV9fZC5fX2dldHZhbCgpOyB9CisKKyAgaW5saW5lIGZsb2F0IGRlY2ltYWw2NF90b19mbG9hdChkZWNpbWFsNjQgX19kKQorICB7IHJldHVybiAoZmxvYXQpX19kLl9fZ2V0dmFsKCk7IH0KKworICBpbmxpbmUgZmxvYXQgZGVjaW1hbDEyOF90b19mbG9hdChkZWNpbWFsMTI4IF9fZCkKKyAgeyByZXR1cm4gKGZsb2F0KV9fZC5fX2dldHZhbCgpOyB9CisKKyAgaW5saW5lIGZsb2F0IGRlY2ltYWxfdG9fZmxvYXQoZGVjaW1hbDMyIF9fZCkKKyAgeyByZXR1cm4gKGZsb2F0KV9fZC5fX2dldHZhbCgpOyB9CisKKyAgaW5saW5lIGZsb2F0IGRlY2ltYWxfdG9fZmxvYXQoZGVjaW1hbDY0IF9fZCkKKyAgeyByZXR1cm4gKGZsb2F0KV9fZC5fX2dldHZhbCgpOyB9CisKKyAgaW5saW5lIGZsb2F0IGRlY2ltYWxfdG9fZmxvYXQoZGVjaW1hbDEyOCBfX2QpCisgIHsgcmV0dXJuIChmbG9hdClfX2QuX19nZXR2YWwoKTsgfQorCisgIGlubGluZSBkb3VibGUgZGVjaW1hbDMyX3RvX2RvdWJsZShkZWNpbWFsMzIgX19kKQorICB7IHJldHVybiAoZG91YmxlKV9fZC5fX2dldHZhbCgpOyB9CisKKyAgaW5saW5lIGRvdWJsZSBkZWNpbWFsNjRfdG9fZG91YmxlKGRlY2ltYWw2NCBfX2QpCisgIHsgcmV0dXJuIChkb3VibGUpX19kLl9fZ2V0dmFsKCk7IH0KKworICBpbmxpbmUgZG91YmxlIGRlY2ltYWwxMjhfdG9fZG91YmxlKGRlY2ltYWwxMjggX19kKQorICB7IHJldHVybiAoZG91YmxlKV9fZC5fX2dldHZhbCgpOyB9CisKKyAgaW5saW5lIGRvdWJsZSBkZWNpbWFsX3RvX2RvdWJsZShkZWNpbWFsMzIgX19kKQorICB7IHJldHVybiAoZG91YmxlKV9fZC5fX2dldHZhbCgpOyB9CisKKyAgaW5saW5lIGRvdWJsZSBkZWNpbWFsX3RvX2RvdWJsZShkZWNpbWFsNjQgX19kKQorICB7IHJldHVybiAoZG91YmxlKV9fZC5fX2dldHZhbCgpOyB9CisKKyAgaW5saW5lIGRvdWJsZSBkZWNpbWFsX3RvX2RvdWJsZShkZWNpbWFsMTI4IF9fZCkKKyAgeyByZXR1cm4gKGRvdWJsZSlfX2QuX19nZXR2YWwoKTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZSBkZWNpbWFsMzJfdG9fbG9uZ19kb3VibGUoZGVjaW1hbDMyIF9fZCkKKyAgeyByZXR1cm4gKGxvbmcgZG91YmxlKV9fZC5fX2dldHZhbCgpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlIGRlY2ltYWw2NF90b19sb25nX2RvdWJsZShkZWNpbWFsNjQgX19kKQorICB7IHJldHVybiAobG9uZyBkb3VibGUpX19kLl9fZ2V0dmFsKCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUgZGVjaW1hbDEyOF90b19sb25nX2RvdWJsZShkZWNpbWFsMTI4IF9fZCkKKyAgeyByZXR1cm4gKGxvbmcgZG91YmxlKV9fZC5fX2dldHZhbCgpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlIGRlY2ltYWxfdG9fbG9uZ19kb3VibGUoZGVjaW1hbDMyIF9fZCkKKyAgeyByZXR1cm4gKGxvbmcgZG91YmxlKV9fZC5fX2dldHZhbCgpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlIGRlY2ltYWxfdG9fbG9uZ19kb3VibGUoZGVjaW1hbDY0IF9fZCkKKyAgeyByZXR1cm4gKGxvbmcgZG91YmxlKV9fZC5fX2dldHZhbCgpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlIGRlY2ltYWxfdG9fbG9uZ19kb3VibGUoZGVjaW1hbDEyOCBfX2QpCisgIHsgcmV0dXJuIChsb25nIGRvdWJsZSlfX2QuX19nZXR2YWwoKTsgfQorCisgIC8vIElTTy9JRUMgVFIgMjQ3MzMgIDMuMi43ICBVbmFyeSBhcml0aG1ldGljIG9wZXJhdG9ycy4KKworI2RlZmluZSBfREVGSU5FX0RFQ0lNQUxfVU5BUllfT1AoX09wLCBfVHApCVwKKyAgaW5saW5lIF9UcCBvcGVyYXRvciBfT3AoX1RwIF9fcmhzKQkJXAorICB7CQkJCQkJXAorICAgIF9UcCBfX3RtcDsJCQkJCVwKKyAgICBfX3RtcC5fX3NldHZhbCgwIF9PcCBfX3Jocy5fX2dldHZhbCgpKTsJXAorICAgIHJldHVybiBfX3RtcDsJCQkJXAorICB9CisKKyAgX0RFRklORV9ERUNJTUFMX1VOQVJZX09QKCssIGRlY2ltYWwzMikKKyAgX0RFRklORV9ERUNJTUFMX1VOQVJZX09QKCssIGRlY2ltYWw2NCkKKyAgX0RFRklORV9ERUNJTUFMX1VOQVJZX09QKCssIGRlY2ltYWwxMjgpCisgIF9ERUZJTkVfREVDSU1BTF9VTkFSWV9PUCgtLCBkZWNpbWFsMzIpCisgIF9ERUZJTkVfREVDSU1BTF9VTkFSWV9PUCgtLCBkZWNpbWFsNjQpCisgIF9ERUZJTkVfREVDSU1BTF9VTkFSWV9PUCgtLCBkZWNpbWFsMTI4KQorCisjdW5kZWYgX0RFRklORV9ERUNJTUFMX1VOQVJZX09QCisKKyAgLy8gSVNPL0lFQyBUUiAyNDczMyAgMy4yLjggIEJpbmFyeSBhcml0aG1ldGljIG9wZXJhdG9ycy4KKworI2RlZmluZSBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKF9PcCwgX1QxLCBfVDIsIF9UMykJXAorICBpbmxpbmUgX1QxIG9wZXJhdG9yIF9PcChfVDIgX19saHMsIF9UMyBfX3JocykJCQlcCisgIHsJCQkJCQkJCVwKKyAgICBfVDEgX19yZXR2YWw7CQkJCQkJXAorICAgIF9fcmV0dmFsLl9fc2V0dmFsKF9fbGhzLl9fZ2V0dmFsKCkgX09wIF9fcmhzLl9fZ2V0dmFsKCkpOwlcCisgICAgcmV0dXJuIF9fcmV0dmFsOwkJCQkJCVwKKyAgfQorCisjZGVmaW5lIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfQk9USChfT3AsIF9UMSwgX1QyLCBfVDMpCVwKKyAgaW5saW5lIF9UMSBvcGVyYXRvciBfT3AoX1QyIF9fbGhzLCBfVDMgX19yaHMpCQkJXAorICB7CQkJCQkJCQlcCisgICAgX1QxIF9fcmV0dmFsOwkJCQkJCVwKKyAgICBfX3JldHZhbC5fX3NldHZhbChfX2xocy5fX2dldHZhbCgpIF9PcCBfX3Jocy5fX2dldHZhbCgpKTsJXAorICAgIHJldHVybiBfX3JldHZhbDsJCQkJCQlcCisgIH0KKworI2RlZmluZSBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX0xIUyhfT3AsIF9UMSwgX1QyKQkJXAorICBpbmxpbmUgX1QxIG9wZXJhdG9yIF9PcChfVDEgX19saHMsIF9UMiBfX3JocykJCQlcCisgIHsJCQkJCQkJCVwKKyAgICBfVDEgX19yZXR2YWw7CQkJCQkJXAorICAgIF9fcmV0dmFsLl9fc2V0dmFsKF9fbGhzLl9fZ2V0dmFsKCkgX09wIF9fcmhzKTsJCVwKKyAgICByZXR1cm4gX19yZXR2YWw7CQkJCQkJXAorICB9CisKKyNkZWZpbmUgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9SSFMoX09wLCBfVDEsIF9UMikJCVwKKyAgaW5saW5lIF9UMSBvcGVyYXRvciBfT3AoX1QyIF9fbGhzLCBfVDEgX19yaHMpCQkJXAorICB7CQkJCQkJCQlcCisgICAgX1QxIF9fcmV0dmFsOwkJCQkJCVwKKyAgICBfX3JldHZhbC5fX3NldHZhbChfX2xocyBfT3AgX19yaHMuX19nZXR2YWwoKSk7CQlcCisgICAgcmV0dXJuIF9fcmV0dmFsOwkJCQkJCVwKKyAgfQorCisjZGVmaW5lIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9JTlQoX09wLCBfVDEpCQlcCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfTEhTKF9PcCwgX1QxLCBpbnQpOwkJCVwKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9MSFMoX09wLCBfVDEsIHVuc2lnbmVkIGludCk7CVwKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9MSFMoX09wLCBfVDEsIGxvbmcpOwkJXAorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX0xIUyhfT3AsIF9UMSwgdW5zaWduZWQgbG9uZyk7CVwKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9MSFMoX09wLCBfVDEsIGxvbmcgbG9uZyk7CQlcCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfTEhTKF9PcCwgX1QxLCB1bnNpZ25lZCBsb25nIGxvbmcpOwlcCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfUkhTKF9PcCwgX1QxLCBpbnQpOwkJCVwKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9SSFMoX09wLCBfVDEsIHVuc2lnbmVkIGludCk7CVwKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9SSFMoX09wLCBfVDEsIGxvbmcpOwkJXAorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1JIUyhfT3AsIF9UMSwgdW5zaWduZWQgbG9uZyk7CVwKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9SSFMoX09wLCBfVDEsIGxvbmcgbG9uZyk7CQlcCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfUkhTKF9PcCwgX1QxLCB1bnNpZ25lZCBsb25nIGxvbmcpOwlcCisKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygrLCBkZWNpbWFsMzIsIGRlY2ltYWwzMiwgZGVjaW1hbDMyKQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfSU5UKCssIGRlY2ltYWwzMikKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygrLCBkZWNpbWFsNjQsIGRlY2ltYWwzMiwgZGVjaW1hbDY0KQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKCssIGRlY2ltYWw2NCwgZGVjaW1hbDY0LCBkZWNpbWFsMzIpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKywgZGVjaW1hbDY0LCBkZWNpbWFsNjQsIGRlY2ltYWw2NCkKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0lOVCgrLCBkZWNpbWFsNjQpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKywgZGVjaW1hbDEyOCwgZGVjaW1hbDMyLCBkZWNpbWFsMTI4KQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKCssIGRlY2ltYWwxMjgsIGRlY2ltYWw2NCwgZGVjaW1hbDEyOCkKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygrLCBkZWNpbWFsMTI4LCBkZWNpbWFsMTI4LCBkZWNpbWFsMzIpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKywgZGVjaW1hbDEyOCwgZGVjaW1hbDEyOCwgZGVjaW1hbDY0KQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKCssIGRlY2ltYWwxMjgsIGRlY2ltYWwxMjgsIGRlY2ltYWwxMjgpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9JTlQoKywgZGVjaW1hbDEyOCkKKworICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKC0sIGRlY2ltYWwzMiwgZGVjaW1hbDMyLCBkZWNpbWFsMzIpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9JTlQoLSwgZGVjaW1hbDMyKQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKC0sIGRlY2ltYWw2NCwgZGVjaW1hbDMyLCBkZWNpbWFsNjQpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoLSwgZGVjaW1hbDY0LCBkZWNpbWFsNjQsIGRlY2ltYWwzMikKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygtLCBkZWNpbWFsNjQsIGRlY2ltYWw2NCwgZGVjaW1hbDY0KQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfSU5UKC0sIGRlY2ltYWw2NCkKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygtLCBkZWNpbWFsMTI4LCBkZWNpbWFsMzIsIGRlY2ltYWwxMjgpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoLSwgZGVjaW1hbDEyOCwgZGVjaW1hbDY0LCBkZWNpbWFsMTI4KQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKC0sIGRlY2ltYWwxMjgsIGRlY2ltYWwxMjgsIGRlY2ltYWwzMikKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygtLCBkZWNpbWFsMTI4LCBkZWNpbWFsMTI4LCBkZWNpbWFsNjQpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoLSwgZGVjaW1hbDEyOCwgZGVjaW1hbDEyOCwgZGVjaW1hbDEyOCkKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0lOVCgtLCBkZWNpbWFsMTI4KQorCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKiwgZGVjaW1hbDMyLCBkZWNpbWFsMzIsIGRlY2ltYWwzMikKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0lOVCgqLCBkZWNpbWFsMzIpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKiwgZGVjaW1hbDY0LCBkZWNpbWFsMzIsIGRlY2ltYWw2NCkKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygqLCBkZWNpbWFsNjQsIGRlY2ltYWw2NCwgZGVjaW1hbDMyKQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKCosIGRlY2ltYWw2NCwgZGVjaW1hbDY0LCBkZWNpbWFsNjQpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9JTlQoKiwgZGVjaW1hbDY0KQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKCosIGRlY2ltYWwxMjgsIGRlY2ltYWwzMiwgZGVjaW1hbDEyOCkKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygqLCBkZWNpbWFsMTI4LCBkZWNpbWFsNjQsIGRlY2ltYWwxMjgpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKiwgZGVjaW1hbDEyOCwgZGVjaW1hbDEyOCwgZGVjaW1hbDMyKQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKCosIGRlY2ltYWwxMjgsIGRlY2ltYWwxMjgsIGRlY2ltYWw2NCkKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygqLCBkZWNpbWFsMTI4LCBkZWNpbWFsMTI4LCBkZWNpbWFsMTI4KQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfSU5UKCosIGRlY2ltYWwxMjgpCisKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygvLCBkZWNpbWFsMzIsIGRlY2ltYWwzMiwgZGVjaW1hbDMyKQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfSU5UKC8sIGRlY2ltYWwzMikKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygvLCBkZWNpbWFsNjQsIGRlY2ltYWwzMiwgZGVjaW1hbDY0KQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKC8sIGRlY2ltYWw2NCwgZGVjaW1hbDY0LCBkZWNpbWFsMzIpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoLywgZGVjaW1hbDY0LCBkZWNpbWFsNjQsIGRlY2ltYWw2NCkKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0lOVCgvLCBkZWNpbWFsNjQpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoLywgZGVjaW1hbDEyOCwgZGVjaW1hbDMyLCBkZWNpbWFsMTI4KQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKC8sIGRlY2ltYWwxMjgsIGRlY2ltYWw2NCwgZGVjaW1hbDEyOCkKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygvLCBkZWNpbWFsMTI4LCBkZWNpbWFsMTI4LCBkZWNpbWFsMzIpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoLywgZGVjaW1hbDEyOCwgZGVjaW1hbDEyOCwgZGVjaW1hbDY0KQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKC8sIGRlY2ltYWwxMjgsIGRlY2ltYWwxMjgsIGRlY2ltYWwxMjgpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9JTlQoLywgZGVjaW1hbDEyOCkKKworI3VuZGVmIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMKKyN1bmRlZiBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX0JPVEgKKyN1bmRlZiBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX0xIUworI3VuZGVmIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfUkhTCisjdW5kZWYgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0lOVAorCisgIC8vIElTTy9JRUMgVFIgMjQ3MzMgIDMuMi45ICBDb21wYXJpc29uIG9wZXJhdG9ycy4KKworI2RlZmluZSBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTl9CT1RIKF9PcCwgX1QxLCBfVDIpCVwKKyAgaW5saW5lIGJvb2wgb3BlcmF0b3IgX09wKF9UMSBfX2xocywgX1QyIF9fcmhzKQlcCisgIHsgcmV0dXJuIF9fbGhzLl9fZ2V0dmFsKCkgX09wIF9fcmhzLl9fZ2V0dmFsKCk7IH0KKworI2RlZmluZSBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTl9MSFMoX09wLCBfVDEsIF9UMikJXAorICBpbmxpbmUgYm9vbCBvcGVyYXRvciBfT3AoX1QxIF9fbGhzLCBfVDIgX19yaHMpCVwKKyAgeyByZXR1cm4gX19saHMuX19nZXR2YWwoKSBfT3AgX19yaHM7IH0KKworI2RlZmluZSBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTl9SSFMoX09wLCBfVDEsIF9UMikJXAorICBpbmxpbmUgYm9vbCBvcGVyYXRvciBfT3AoX1QxIF9fbGhzLCBfVDIgX19yaHMpCVwKKyAgeyByZXR1cm4gX19saHMgX09wIF9fcmhzLl9fZ2V0dmFsKCk7IH0KKworI2RlZmluZSBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTlMoX09wLCBfVHApCQkJXAorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTl9CT1RIKF9PcCwgX1RwLCBkZWNpbWFsMzIpCQlcCisgIF9ERUZJTkVfREVDSU1BTF9DT01QQVJJU09OX0JPVEgoX09wLCBfVHAsIGRlY2ltYWw2NCkJCVwKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBBUklTT05fQk9USChfT3AsIF9UcCwgZGVjaW1hbDEyOCkJCVwKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBBUklTT05fTEhTKF9PcCwgX1RwLCBpbnQpCQkJXAorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTl9MSFMoX09wLCBfVHAsIHVuc2lnbmVkIGludCkJXAorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTl9MSFMoX09wLCBfVHAsIGxvbmcpCQlcCisgIF9ERUZJTkVfREVDSU1BTF9DT01QQVJJU09OX0xIUyhfT3AsIF9UcCwgdW5zaWduZWQgbG9uZykJXAorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTl9MSFMoX09wLCBfVHAsIGxvbmcgbG9uZykJCVwKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBBUklTT05fTEhTKF9PcCwgX1RwLCB1bnNpZ25lZCBsb25nIGxvbmcpCVwKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBBUklTT05fUkhTKF9PcCwgaW50LCBfVHApCQkJXAorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTl9SSFMoX09wLCB1bnNpZ25lZCBpbnQsIF9UcCkJXAorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTl9SSFMoX09wLCBsb25nLCBfVHApCQlcCisgIF9ERUZJTkVfREVDSU1BTF9DT01QQVJJU09OX1JIUyhfT3AsIHVuc2lnbmVkIGxvbmcsIF9UcCkJXAorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTl9SSFMoX09wLCBsb25nIGxvbmcsIF9UcCkJCVwKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBBUklTT05fUkhTKF9PcCwgdW5zaWduZWQgbG9uZyBsb25nLCBfVHApCisKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBBUklTT05TKD09LCBkZWNpbWFsMzIpCisgIF9ERUZJTkVfREVDSU1BTF9DT01QQVJJU09OUyg9PSwgZGVjaW1hbDY0KQorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTlMoPT0sIGRlY2ltYWwxMjgpCisgIF9ERUZJTkVfREVDSU1BTF9DT01QQVJJU09OUyghPSwgZGVjaW1hbDMyKQorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTlMoIT0sIGRlY2ltYWw2NCkKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBBUklTT05TKCE9LCBkZWNpbWFsMTI4KQorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTlMoPCwgIGRlY2ltYWwzMikKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBBUklTT05TKDwsICBkZWNpbWFsNjQpCisgIF9ERUZJTkVfREVDSU1BTF9DT01QQVJJU09OUyg8LCAgZGVjaW1hbDEyOCkKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBBUklTT05TKDw9LCBkZWNpbWFsMzIpCisgIF9ERUZJTkVfREVDSU1BTF9DT01QQVJJU09OUyg8PSwgZGVjaW1hbDY0KQorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTlMoPD0sIGRlY2ltYWwxMjgpCisgIF9ERUZJTkVfREVDSU1BTF9DT01QQVJJU09OUyg+LCAgZGVjaW1hbDMyKQorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTlMoPiwgIGRlY2ltYWw2NCkKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBBUklTT05TKD4sICBkZWNpbWFsMTI4KQorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTlMoPj0sIGRlY2ltYWwzMikKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBBUklTT05TKD49LCBkZWNpbWFsNjQpCisgIF9ERUZJTkVfREVDSU1BTF9DT01QQVJJU09OUyg+PSwgZGVjaW1hbDEyOCkKKworI3VuZGVmIF9ERUZJTkVfREVDSU1BTF9DT01QQVJJU09OX0JPVEgKKyN1bmRlZiBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTl9MSFMKKyN1bmRlZiBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTl9SSFMKKyN1bmRlZiBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTlMKKworfSAvLyBuYW1lc3BhY2UgZGVjaW1hbAorfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9ERUNJTUFMX0lNUEwgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZGVxdWUgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlcXVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YTU1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2RlcXVlCkBAIC0wLDAgKzEsNzkgQEAKKy8vIDxkZXF1ZT4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NworICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGluY2x1ZGUvZGVxdWUKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfREVRVUUKKyNkZWZpbmUgX0dMSUJDWFhfREVRVUUgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL3N0bF9hbGdvYmFzZS5oPgorI2luY2x1ZGUgPGJpdHMvYWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfY29uc3RydWN0Lmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfdW5pbml0aWFsaXplZC5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2RlcXVlLmg+CisKKyNpZm5kZWYgX0dMSUJDWFhfRVhQT1JUX1RFTVBMQVRFCisjIGluY2x1ZGUgPGJpdHMvZGVxdWUudGNjPgorI2VuZGlmCisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworIyBpbmNsdWRlIDxkZWJ1Zy9kZXF1ZT4KKyNlbmRpZgorCisjaWZkZWYgX0dMSUJDWFhfUFJPRklMRQorIyBpbmNsdWRlIDxwcm9maWxlL2RlcXVlPgorI2VuZGlmCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9ERVFVRSAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leGNlcHRpb24gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4Y2VwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTdiMjAyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leGNlcHRpb24KQEAgLTAsMCArMSwxNTUgQEAKKy8vIEV4Y2VwdGlvbiBIYW5kbGluZyBzdXBwb3J0IGhlYWRlciBmb3IgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLAorLy8gMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorLy8KKy8vIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisvLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZXhjZXB0aW9uCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjaWZuZGVmIF9fRVhDRVBUSU9OX18KKyNkZWZpbmUgX19FWENFUFRJT05fXworCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcHVzaChkZWZhdWx0KQorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKworZXh0ZXJuICJDKysiIHsKKworbmFtZXNwYWNlIHN0ZAoreworICAvKioKKyAgICogQGRlZmdyb3VwIGV4Y2VwdGlvbnMgRXhjZXB0aW9ucworICAgKiBAaW5ncm91cCBkaWFnbm9zdGljcworICAgKgorICAgKiBDbGFzc2VzIGFuZCBmdW5jdGlvbnMgZm9yIHJlcG9ydGluZyBlcnJvcnMgdmlhIGV4Y2VwdGlvbiBjbGFzc2VzLgorICAgKiBAeworICAgKi8KKworICAvKioKKyAgICogIEBicmllZiBCYXNlIGNsYXNzIGZvciBhbGwgbGlicmFyeSBleGNlcHRpb25zLgorICAgKgorICAgKiAgVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgYWxsIGV4Y2VwdGlvbnMgdGhyb3duIGJ5IHRoZSBzdGFuZGFyZAorICAgKiAgbGlicmFyeSwgYW5kIGJ5IGNlcnRhaW4gbGFuZ3VhZ2UgZXhwcmVzc2lvbnMuICBZb3UgYXJlIGZyZWUgdG8gZGVyaXZlCisgICAqICB5b3VyIG93biAlZXhjZXB0aW9uIGNsYXNzZXMsIG9yIHVzZSBhIGRpZmZlcmVudCBoaWVyYXJjaHksIG9yIHRvCisgICAqICB0aHJvdyBub24tY2xhc3MgZGF0YSAoZS5nLiwgZnVuZGFtZW50YWwgdHlwZXMpLgorICAgKi8KKyAgY2xhc3MgZXhjZXB0aW9uCisgIHsKKyAgcHVibGljOgorICAgIGV4Y2VwdGlvbigpIHRocm93KCkgeyB9CisgICAgdmlydHVhbCB+ZXhjZXB0aW9uKCkgdGhyb3coKTsKKworICAgIC8qKiBSZXR1cm5zIGEgQy1zdHlsZSBjaGFyYWN0ZXIgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGdlbmVyYWwgY2F1c2UKKyAgICAgKiAgb2YgdGhlIGN1cnJlbnQgZXJyb3IuICAqLworICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCk7CisgIH07CisKKyAgLyoqIElmIGFuICVleGNlcHRpb24gaXMgdGhyb3duIHdoaWNoIGlzIG5vdCBsaXN0ZWQgaW4gYSBmdW5jdGlvbidzCisgICAqICAlZXhjZXB0aW9uIHNwZWNpZmljYXRpb24sIG9uZSBvZiB0aGVzZSBtYXkgYmUgdGhyb3duLiAgKi8KKyAgY2xhc3MgYmFkX2V4Y2VwdGlvbiA6IHB1YmxpYyBleGNlcHRpb24KKyAgeworICBwdWJsaWM6CisgICAgYmFkX2V4Y2VwdGlvbigpIHRocm93KCkgeyB9CisKKyAgICAvLyBUaGlzIGRlY2xhcmF0aW9uIGlzIG5vdCB1c2VsZXNzOgorICAgIC8vIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy0zLjAuMi9nY2NfNi5odG1sI1NFQzExOAorICAgIHZpcnR1YWwgfmJhZF9leGNlcHRpb24oKSB0aHJvdygpOworCisgICAgLy8gU2VlIGNvbW1lbnQgaW4gZWhfZXhjZXB0aW9uLmNjLgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCk7CisgIH07CisKKyAgLy8vIElmIHlvdSB3cml0ZSBhIHJlcGxhY2VtZW50ICV0ZXJtaW5hdGUgaGFuZGxlciwgaXQgbXVzdCBiZSBvZiB0aGlzIHR5cGUuCisgIHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsKKworICAvLy8gSWYgeW91IHdyaXRlIGEgcmVwbGFjZW1lbnQgJXVuZXhwZWN0ZWQgaGFuZGxlciwgaXQgbXVzdCBiZSBvZiB0aGlzIHR5cGUuCisgIHR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7CisKKyAgLy8vIFRha2VzIGEgbmV3IGhhbmRsZXIgZnVuY3Rpb24gYXMgYW4gYXJndW1lbnQsIHJldHVybnMgdGhlIG9sZCBmdW5jdGlvbi4KKyAgdGVybWluYXRlX2hhbmRsZXIgc2V0X3Rlcm1pbmF0ZSh0ZXJtaW5hdGVfaGFuZGxlcikgdGhyb3coKTsKKworICAvKiogVGhlIHJ1bnRpbWUgd2lsbCBjYWxsIHRoaXMgZnVuY3Rpb24gaWYgJWV4Y2VwdGlvbiBoYW5kbGluZyBtdXN0IGJlCisgICAqICBhYmFuZG9uZWQgZm9yIGFueSByZWFzb24uICBJdCBjYW4gYWxzbyBiZSBjYWxsZWQgYnkgdGhlIHVzZXIuICAqLworICB2b2lkIHRlcm1pbmF0ZSgpIHRocm93KCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOworCisgIC8vLyBUYWtlcyBhIG5ldyBoYW5kbGVyIGZ1bmN0aW9uIGFzIGFuIGFyZ3VtZW50LCByZXR1cm5zIHRoZSBvbGQgZnVuY3Rpb24uCisgIHVuZXhwZWN0ZWRfaGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7CisKKyAgLyoqIFRoZSBydW50aW1lIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uIGlmIGFuICVleGNlcHRpb24gaXMgdGhyb3duIHdoaWNoCisgICAqICB2aW9sYXRlcyB0aGUgZnVuY3Rpb24ncyAlZXhjZXB0aW9uIHNwZWNpZmljYXRpb24uICAqLworICB2b2lkIHVuZXhwZWN0ZWQoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CisKKyAgLyoqIFsxOC42LjRdLzE6ICAnUmV0dXJucyB0cnVlIGFmdGVyIGNvbXBsZXRpbmcgZXZhbHVhdGlvbiBvZiBhCisgICAqICB0aHJvdy1leHByZXNzaW9uIHVudGlsIGVpdGhlciBjb21wbGV0aW5nIGluaXRpYWxpemF0aW9uIG9mIHRoZQorICAgKiAgZXhjZXB0aW9uLWRlY2xhcmF0aW9uIGluIHRoZSBtYXRjaGluZyBoYW5kbGVyIG9yIGVudGVyaW5nIEBjIHVuZXhwZWN0ZWQoKQorICAgKiAgZHVlIHRvIHRoZSB0aHJvdzsgb3IgYWZ0ZXIgZW50ZXJpbmcgQGMgdGVybWluYXRlKCkgZm9yIGFueSByZWFzb24KKyAgICogIG90aGVyIHRoYW4gYW4gZXhwbGljaXQgY2FsbCB0byBAYyB0ZXJtaW5hdGUoKS4gIFtOb3RlOiBUaGlzIGluY2x1ZGVzCisgICAqICBzdGFjayB1bndpbmRpbmcgWzE1LjJdLiAgZW5kIG5vdGVdJworICAgKgorICAgKiAgMjogJ1doZW4gQGMgdW5jYXVnaHRfZXhjZXB0aW9uKCkgaXMgdHJ1ZSwgdGhyb3dpbmcgYW4KKyAgICogICVleGNlcHRpb24gY2FuIHJlc3VsdCBpbiBhIGNhbGwgb2YgQGMgdGVybWluYXRlKCkKKyAgICogICgxNS41LjEpLicKKyAgICovCisgIGJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uKCkgdGhyb3coKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKKworICAvLyBAfSBncm91cCBleGNlcHRpb25zCit9IC8vIG5hbWVzcGFjZSBzdGQKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKworICAvKioKKyAgICogIEBicmllZiBBIHJlcGxhY2VtZW50IGZvciB0aGUgc3RhbmRhcmQgdGVybWluYXRlX2hhbmRsZXIgd2hpY2gKKyAgICogIHByaW50cyBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0ZXJtaW5hdGluZyBleGNlcHRpb24gKGlmIGFueSkKKyAgICogIG9uIHN0ZGVyci4KKyAgICoKKyAgICogIEBpbmdyb3VwIGV4Y2VwdGlvbnMKKyAgICoKKyAgICogIENhbGwKKyAgICogICBAY29kZQorICAgKiAgICAgc3RkOjpzZXRfdGVybWluYXRlKF9fZ251X2N4eDo6X192ZXJib3NlX3Rlcm1pbmF0ZV9oYW5kbGVyKQorICAgKiAgIEBlbmRjb2RlCisgICAqICB0byB1c2UuICBGb3IgbW9yZSBpbmZvLCBzZWUKKyAgICogIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2xpYnN0ZGMrKy9tYW51YWwvYmswMXB0MDJjaDA2czAyLmh0bWwKKyAgICoKKyAgICogIEluIDMuNCBhbmQgbGF0ZXIsIHRoaXMgaXMgb24gYnkgZGVmYXVsdC4KKyAgICovCisgIHZvaWQgX192ZXJib3NlX3Rlcm1pbmF0ZV9oYW5kbGVyKCk7CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworfSAvLyBleHRlcm4gIkMrKyIKKworI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwb3AKKworI2lmIChkZWZpbmVkKF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fKSBcCisgICAgICYmIGRlZmluZWQoX0dMSUJDWFhfQVRPTUlDX0JVSUxUSU5TXzQpKQorI2luY2x1ZGUgPGV4Y2VwdGlvbl9wdHIuaD4KKyNpbmNsdWRlIDxuZXN0ZWRfZXhjZXB0aW9uLmg+CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4Y2VwdGlvbl9kZWZpbmVzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4Y2VwdGlvbl9kZWZpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUxZDk2ZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXhjZXB0aW9uX2RlZmluZXMuaApAQCAtMCwwICsxLDQ5IEBACisvLyAtZm5vLWV4Y2VwdGlvbnMgU3VwcG9ydCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAxOS4xICBFeGNlcHRpb24gY2xhc3NlcworLy8KKworLyoqIEBmaWxlIGV4Y2VwdGlvbl9kZWZpbmVzLmgKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0VYQ0VQVElPTl9ERUZJTkVTX0gKKyNkZWZpbmUgX0VYQ0VQVElPTl9ERUZJTkVTX0ggMQorCisjaWZuZGVmIF9fRVhDRVBUSU9OUworLy8gSWZmIC1mbm8tZXhjZXB0aW9ucywgdHJhbnNmb3JtIGVycm9yIGhhbmRsaW5nIGNvZGUgdG8gd29yayB3aXRob3V0IGl0LgorIyBkZWZpbmUgX190cnkgICAgICBpZiAodHJ1ZSkKKyMgZGVmaW5lIF9fY2F0Y2goWCkgaWYgKGZhbHNlKQorIyBkZWZpbmUgX190aHJvd19leGNlcHRpb25fYWdhaW4KKyNlbHNlCisvLyBFbHNlIHByb2NlZWQgbm9ybWFsbHkuCisjIGRlZmluZSBfX3RyeSAgICAgIHRyeQorIyBkZWZpbmUgX19jYXRjaChYKSBjYXRjaChYKQorIyBkZWZpbmUgX190aHJvd19leGNlcHRpb25fYWdhaW4gdGhyb3cKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXhjZXB0aW9uX3B0ci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leGNlcHRpb25fcHRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VlNGQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXhjZXB0aW9uX3B0ci5oCkBAIC0wLDAgKzEsMTcwIEBACisvLyBFeGNlcHRpb24gSGFuZGxpbmcgc3VwcG9ydCBoZWFkZXIgKGV4Y2VwdGlvbl9wdHIgY2xhc3MpIGZvciAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorLy8KKy8vIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisvLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisvLyAKKy8vIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisvLyAKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBleGNlcHRpb25fcHRyLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBoZWFkZXJzIGFuZCB0aGUKKyAqICBpbXBsZW1lbnRhdGlvbi4gWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfRVhDRVBUSU9OX1BUUl9ICisjZGVmaW5lIF9FWENFUFRJT05fUFRSX0gKKworI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGRlZmF1bHQpCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGV4Y2VwdGlvbl9kZWZpbmVzLmg+CisKKyNpZiAhZGVmaW5lZChfR0xJQkNYWF9BVE9NSUNfQlVJTFRJTlNfNCkKKyMgIGVycm9yIFRoaXMgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBleGNlcHRpb24gcHJvcGFnYXRpb24uCisjZW5kaWYKKworZXh0ZXJuICJDKysiIHsKKworbmFtZXNwYWNlIHN0ZCAKK3sKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIGV4Y2VwdGlvbnMKKyAgICogQHsKKyAgICovCisgIG5hbWVzcGFjZSBfX2V4Y2VwdGlvbl9wdHIKKyAgeworICAgIGNsYXNzIGV4Y2VwdGlvbl9wdHI7CisgIH0KKworICB1c2luZyBfX2V4Y2VwdGlvbl9wdHI6OmV4Y2VwdGlvbl9wdHI7CisKKyAgLyoqIE9idGFpbiBhbiBleGNlcHRpb25fcHRyIHRvIHRoZSBjdXJyZW50bHkgaGFuZGxlZCBleGNlcHRpb24uIElmIHRoZXJlCisgICAqICBpcyBub25lLCBvciB0aGUgY3VycmVudGx5IGhhbmRsZWQgZXhjZXB0aW9uIGlzIGZvcmVpZ24sIHJldHVybiB0aGUgbnVsbAorICAgKiAgdmFsdWUuCisgICAqLworICBleGNlcHRpb25fcHRyIGN1cnJlbnRfZXhjZXB0aW9uKCkgdGhyb3coKTsKKworICAvLy8gVGhyb3cgdGhlIG9iamVjdCBwb2ludGVkIHRvIGJ5IHRoZSBleGNlcHRpb25fcHRyLgorICB2b2lkIHJldGhyb3dfZXhjZXB0aW9uKGV4Y2VwdGlvbl9wdHIpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKKworICBuYW1lc3BhY2UgX19leGNlcHRpb25fcHRyCisgIHsKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmIEFuIG9wYXF1ZSBwb2ludGVyIHRvIGFuIGFyYml0cmFyeSBleGNlcHRpb24uCisgICAgICogIEBpbmdyb3VwIGV4Y2VwdGlvbnMKKyAgICAgKi8KKyAgICBjbGFzcyBleGNlcHRpb25fcHRyCisgICAgeworICAgICAgdm9pZCogX01fZXhjZXB0aW9uX29iamVjdDsKKworICAgICAgZXhwbGljaXQgZXhjZXB0aW9uX3B0cih2b2lkKiBfX2UpIHRocm93KCk7CisKKyAgICAgIHZvaWQgX01fYWRkcmVmKCkgdGhyb3coKTsKKyAgICAgIHZvaWQgX01fcmVsZWFzZSgpIHRocm93KCk7CisKKyAgICAgIHZvaWQgKl9NX2dldCgpIGNvbnN0IHRocm93KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CisKKyAgICAgIHZvaWQgX01fc2FmZV9ib29sX2R1bW15KCkgdGhyb3coKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CisKKyAgICAgIGZyaWVuZCBleGNlcHRpb25fcHRyIHN0ZDo6Y3VycmVudF9leGNlcHRpb24oKSB0aHJvdygpOworICAgICAgZnJpZW5kIHZvaWQgc3RkOjpyZXRocm93X2V4Y2VwdGlvbihleGNlcHRpb25fcHRyKTsKKworICAgIHB1YmxpYzoKKyAgICAgIGV4Y2VwdGlvbl9wdHIoKSB0aHJvdygpOworCisgICAgICB0eXBlZGVmIHZvaWQgKGV4Y2VwdGlvbl9wdHI6OipfX3NhZmVfYm9vbCkoKTsKKworICAgICAgLy8gRm9yIGNvbnN0cnVjdGlvbiBmcm9tIG51bGxwdHIgb3IgMC4KKyAgICAgIGV4Y2VwdGlvbl9wdHIoX19zYWZlX2Jvb2wpIHRocm93KCk7CisKKyAgICAgIGV4Y2VwdGlvbl9wdHIoY29uc3QgZXhjZXB0aW9uX3B0ciYpIHRocm93KCk7CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgZXhjZXB0aW9uX3B0cihleGNlcHRpb25fcHRyJiYgX19vKSB0aHJvdygpCisgICAgICA6IF9NX2V4Y2VwdGlvbl9vYmplY3QoX19vLl9NX2V4Y2VwdGlvbl9vYmplY3QpCisgICAgICB7IF9fby5fTV9leGNlcHRpb25fb2JqZWN0ID0gMDsgfQorI2VuZGlmCisKKyAgICAgIGV4Y2VwdGlvbl9wdHImIAorICAgICAgb3BlcmF0b3I9KGNvbnN0IGV4Y2VwdGlvbl9wdHImKSB0aHJvdygpOworCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIGV4Y2VwdGlvbl9wdHImIAorICAgICAgb3BlcmF0b3I9KGV4Y2VwdGlvbl9wdHImJiBfX28pIHRocm93KCkKKyAgICAgIHsKKyAgICAgICAgZXhjZXB0aW9uX3B0cihzdGF0aWNfY2FzdDxleGNlcHRpb25fcHRyJiY+KF9fbykpLnN3YXAoKnRoaXMpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICB9CisjZW5kaWYKKworICAgICAgfmV4Y2VwdGlvbl9wdHIoKSB0aHJvdygpOworCisgICAgICB2b2lkIAorICAgICAgc3dhcChleGNlcHRpb25fcHRyJikgdGhyb3coKTsKKworI2lmZGVmIF9HTElCQ1hYX0VIX1BUUl9DT01QQVQKKyAgICAgIC8vIFJldGFpbmVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQ1hYQUJJXzEuMy4KKyAgICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgdGhyb3coKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKKyAgICAgIG9wZXJhdG9yIF9fc2FmZV9ib29sKCkgY29uc3QgdGhyb3coKTsKKyNlbmRpZgorCisgICAgICBmcmllbmQgYm9vbCAKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgZXhjZXB0aW9uX3B0ciYsIGNvbnN0IGV4Y2VwdGlvbl9wdHImKSB0aHJvdygpIAorICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CisKKyAgICAgIGNvbnN0IHR5cGVfaW5mbyoKKyAgICAgIF9fY3hhX2V4Y2VwdGlvbl90eXBlKCkgY29uc3QgdGhyb3coKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKKyAgICB9OworCisgICAgYm9vbCAKKyAgICBvcGVyYXRvcj09KGNvbnN0IGV4Y2VwdGlvbl9wdHImLCBjb25zdCBleGNlcHRpb25fcHRyJikgdGhyb3coKSAKKyAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKKworICAgIGJvb2wgCisgICAgb3BlcmF0b3IhPShjb25zdCBleGNlcHRpb25fcHRyJiwgY29uc3QgZXhjZXB0aW9uX3B0ciYpIHRocm93KCkgCisgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CisgIH0gLy8gbmFtZXNwYWNlIF9fZXhjZXB0aW9uX3B0cgorCisKKyAgLy8vIE9idGFpbiBhbiBleGNlcHRpb25fcHRyIHBvaW50aW5nIHRvIGEgY29weSBvZiB0aGUgc3VwcGxpZWQgb2JqZWN0LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRXg+CisgICAgZXhjZXB0aW9uX3B0ciAKKyAgICBjb3B5X2V4Y2VwdGlvbihfRXggX19leCkgdGhyb3coKQorICAgIHsKKyAgICAgIF9fdHJ5CisJeworI2lmZGVmIF9fRVhDRVBUSU9OUworCSAgdGhyb3cgX19leDsKKyNlbmRpZgorCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIHJldHVybiBjdXJyZW50X2V4Y2VwdGlvbigpOworCX0KKyAgICB9CisKKyAgLy8gQH0gZ3JvdXAgZXhjZXB0aW9ucworfSAvLyBuYW1lc3BhY2Ugc3RkCisKK30gLy8gZXh0ZXJuICJDKysiCisKKyNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcG9wCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvYWxnb3JpdGhtIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvYWxnb3JpdGhtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NTQ3OWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9hbGdvcml0aG0KQEAgLTAsMCArMSw1OTggQEAKKy8vIEFsZ29yaXRobSBleHRlbnNpb25zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwKKy8vIDIwMDksIDIwMTAsIDIwMTEKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgZXh0L2FsZ29yaXRobQorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IChwb3NzaWJseQorICogIGNvbnRhaW5pbmcgZXh0ZW5zaW9ucyBmcm9tIHRoZSBIUC9TR0kgU1RMIHN1YnNldCkuCisgKi8KKworI2lmbmRlZiBfRVhUX0FMR09SSVRITQorI2RlZmluZSBfRVhUX0FMR09SSVRITSAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKworICB1c2luZyBzdGQ6OnB0cmRpZmZfdDsKKyAgdXNpbmcgc3RkOjptaW47CisgIHVzaW5nIHN0ZDo6cGFpcjsKKyAgdXNpbmcgc3RkOjppbnB1dF9pdGVyYXRvcl90YWc7CisgIHVzaW5nIHN0ZDo6cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWc7CisgIHVzaW5nIHN0ZDo6aXRlcmF0b3JfdHJhaXRzOworCisgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLy8gY29weV9uIChub3QgcGFydCBvZiB0aGUgQysrIHN0YW5kYXJkKQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPgorICAgIHBhaXI8X0lucHV0SXRlcmF0b3IsIF9PdXRwdXRJdGVyYXRvcj4KKyAgICBfX2NvcHlfbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAorCSAgICAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LAorCSAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIGZvciAoIDsgX19jb3VudCA+IDA7IC0tX19jb3VudCkKKwl7CisJICAqX19yZXN1bHQgPSAqX19maXJzdDsKKwkgICsrX19maXJzdDsKKwkgICsrX19yZXN1bHQ7CisJfQorICAgICAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcmF0b3IsIF9PdXRwdXRJdGVyYXRvcj4oX19maXJzdCwgX19yZXN1bHQpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyYXRvciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvcj4KKyAgICBpbmxpbmUgcGFpcjxfUkFJdGVyYXRvciwgX091dHB1dEl0ZXJhdG9yPgorICAgIF9fY29weV9uKF9SQUl0ZXJhdG9yIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCisJICAgICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsCisJICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICBfUkFJdGVyYXRvciBfX2xhc3QgPSBfX2ZpcnN0ICsgX19jb3VudDsKKyAgICAgIHJldHVybiBwYWlyPF9SQUl0ZXJhdG9yLCBfT3V0cHV0SXRlcmF0b3I+KF9fbGFzdCwgc3RkOjpjb3B5KF9fZmlyc3QsCisJCQkJCQkJCSAgX19sYXN0LAorCQkJCQkJCQkgIF9fcmVzdWx0KSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIENvcGllcyB0aGUgcmFuZ2UgW2ZpcnN0LGZpcnN0K2NvdW50KSBpbnRvIFtyZXN1bHQscmVzdWx0K2NvdW50KS4KKyAgICogIEBwYXJhbSAgZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBjb3VudCAgVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBjb3B5LgorICAgKiAgQHBhcmFtICByZXN1bHQgQW4gb3V0cHV0IGl0ZXJhdG9yLgorICAgKiAgQHJldHVybiAgIEEgc3RkOjpwYWlyIGNvbXBvc2VkIG9mIGZpcnN0K2NvdW50IGFuZCByZXN1bHQrY291bnQuCisgICAqCisgICAqICBUaGlzIGlzIGFuIFNHSSBleHRlbnNpb24uCisgICAqICBUaGlzIGlubGluZSBmdW5jdGlvbiB3aWxsIGJvaWwgZG93biB0byBhIGNhbGwgdG8gQGMgbWVtbW92ZSB3aGVuZXZlcgorICAgKiAgcG9zc2libGUuICBGYWlsaW5nIHRoYXQsIGlmIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzIGFyZSBwYXNzZWQsIHRoZW4gdGhlCisgICAqICBsb29wIGNvdW50IHdpbGwgYmUga25vd24gKGFuZCB0aGVyZWZvcmUgYSBjYW5kaWRhdGUgZm9yIGNvbXBpbGVyCisgICAqICBvcHRpbWl6YXRpb25zIHN1Y2ggYXMgdW5yb2xsaW5nKS4KKyAgICogIEBpbmdyb3VwIFNHSWV4dGVuc2lvbnMKKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3I+CisgICAgaW5saW5lIHBhaXI8X0lucHV0SXRlcmF0b3IsIF9PdXRwdXRJdGVyYXRvcj4KKyAgICBjb3B5X24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisKKyAgICAgIHJldHVybiBfX2dudV9jeHg6Ol9fY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAorCQkJCSBzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMj4KKyAgICBpbnQKKyAgICBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX0lucHV0SXRlcmF0b3IxIF9fZmlyc3QxLAorCQkJCSAgIF9JbnB1dEl0ZXJhdG9yMSBfX2xhc3QxLAorCQkJCSAgIF9JbnB1dEl0ZXJhdG9yMiBfX2ZpcnN0MiwKKwkJCQkgICBfSW5wdXRJdGVyYXRvcjIgX19sYXN0MikKKyAgICB7CisgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQorCXsKKwkgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpCisJICAgIHJldHVybiAtMTsKKwkgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCisJICAgIHJldHVybiAxOworCSAgKytfX2ZpcnN0MTsKKwkgICsrX19maXJzdDI7CisJfQorICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCisJcmV0dXJuICEoX19maXJzdDEgPT0gX19sYXN0MSk7CisgICAgICBlbHNlCisJcmV0dXJuIC0xOworICAgIH0KKworICBpbmxpbmUgaW50CisgIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MSwKKwkJCQkgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKKwkJCQkgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIsCisJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCisgIHsKKyAgICBjb25zdCBwdHJkaWZmX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmlyc3QxOworICAgIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CisgICAgY29uc3QgaW50IF9fcmVzdWx0ID0gX19idWlsdGluX21lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIsCisJCQkJCSAgbWluKF9fbGVuMSwgX19sZW4yKSk7CisgICAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdAorCQkJIDogKF9fbGVuMSA9PSBfX2xlbjIgPyAwIDogKF9fbGVuMSA8IF9fbGVuMiA/IC0xIDogMSkpOworICB9CisKKyAgaW5saW5lIGludAorICBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCisJCQkJIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQorICB7CisjaWYgQ0hBUl9NQVggPT0gU0NIQVJfTUFYCisgICAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheSgoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKKwkJCQkJICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAorCQkJCQkgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLAorCQkJCQkgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOworI2Vsc2UKKyAgICByZXR1cm4gX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KChjb25zdCB1bnNpZ25lZCBjaGFyKikgX19maXJzdDEsCisJCQkJCSAgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAorCQkJCQkgIChjb25zdCB1bnNpZ25lZCBjaGFyKikgX19maXJzdDIsCisJCQkJCSAgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsKKyNlbmRpZgorICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgQGMgbWVtY21wIG9uIHN0ZXJvaWRzLgorICAgKiAgQHBhcmFtICBmaXJzdDEgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0MSAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBmaXJzdDIgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0MiAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHJldHVybiAgIEFuIGludCwgYXMgd2l0aCBAYyBtZW1jbXAuCisgICAqCisgICAqICBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgbGVzcyB0aGFuIHplcm8gaWYgdGhlIGZpcnN0IHJhbmdlIGlzCisgICAqICA8ZW0+bGV4aWdyYXBoaWNhbGx5IGxlc3MgdGhhbjwvZW0+IHRoZSBzZWNvbmQsIGdyZWF0ZXIgdGhhbiB6ZXJvCisgICAqICBpZiB0aGUgc2Vjb25kIHJhbmdlIGlzIDxlbT5sZXhpZ3JhcGhpY2FsbHkgbGVzcyB0aGFuPC9lbT4gdGhlCisgICAqICBmaXJzdCwgYW5kIHplcm8gb3RoZXJ3aXNlLgorICAgKiAgVGhpcyBpcyBhbiBTR0kgZXh0ZW5zaW9uLgorICAgKiAgQGluZ3JvdXAgU0dJZXh0ZW5zaW9ucworICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMj4KKyAgICBpbnQKKyAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0ZXJhdG9yMSBfX2ZpcnN0MSwKKwkJCQkgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEsCisJCQkJIF9JbnB1dEl0ZXJhdG9yMiBfX2ZpcnN0MiwKKwkJCQkgX0lucHV0SXRlcmF0b3IyIF9fbGFzdDIpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5Db21wYXJhYmxlQ29uY2VwdDwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yMT46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbkNvbXBhcmFibGVDb25jZXB0PAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3IyPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdDEsIF9fbGFzdDEpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QyLCBfX2xhc3QyKTsKKworICAgICAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsCisJCQkJCSAgICBfX2xhc3QyKTsKKyAgICB9CisKKyAgLy8gY291bnQgYW5kIGNvdW50X2lmOiB0aGlzIHZlcnNpb24sIHdob3NlIHJldHVybiB0eXBlIGlzIHZvaWQsIHdhcyBwcmVzZW50CisgIC8vIGluIHRoZSBIUCBTVEwsIGFuZCBpcyByZXRhaW5lZCBhcyBhbiBleHRlbnNpb24gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9TaXplPgorICAgIHZvaWQKKyAgICBjb3VudChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICBjb25zdCBfVHAmIF9fdmFsdWUsCisJICBfU2l6ZSYgX19uKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRXF1YWxpdHlDb21wYXJhYmxlQ29uY2VwdDwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSA+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9FcXVhbGl0eUNvbXBhcmFibGVDb25jZXB0PF9UcD4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQorCWlmICgqX19maXJzdCA9PSBfX3ZhbHVlKQorCSAgKytfX247CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfU2l6ZT4KKyAgICB2b2lkCisgICAgY291bnRfaWYoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCSAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCisJICAgICBfU2l6ZSYgX19uKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfVW5hcnlQcmVkaWNhdGVDb25jZXB0PF9QcmVkaWNhdGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwlpZiAoX19wcmVkKCpfX2ZpcnN0KSkKKwkgICsrX19uOworICAgIH0KKworICAvLyByYW5kb21fc2FtcGxlIGFuZCByYW5kb21fc2FtcGxlX24gKGV4dGVuc2lvbnMsIG5vdCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCkuCisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIFNHSSBleHRlbnNpb24uCisgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICAqICBAZG9jdG9kbworICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsCisJICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgorICAgIF9PdXRwdXRJdGVyYXRvcgorICAgIHJhbmRvbV9zYW1wbGVfbihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlcmF0b3IgX19vdXQsIGNvbnN0IF9EaXN0YW5jZSBfX24pCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkJdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBfRGlzdGFuY2UgX19yZW1haW5pbmcgPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICBfRGlzdGFuY2UgX19tID0gbWluKF9fbiwgX19yZW1haW5pbmcpOworCisgICAgICB3aGlsZSAoX19tID4gMCkKKwl7CisJICBpZiAoKHN0ZDo6cmFuZCgpICUgX19yZW1haW5pbmcpIDwgX19tKQorCSAgICB7CisJICAgICAgKl9fb3V0ID0gKl9fZmlyc3Q7CisJICAgICAgKytfX291dDsKKwkgICAgICAtLV9fbTsKKwkgICAgfQorCSAgLS1fX3JlbWFpbmluZzsKKwkgICsrX19maXJzdDsKKwl9CisgICAgICByZXR1cm4gX19vdXQ7CisgICAgfQorCisgIC8qKgorICAgKiAgVGhpcyBpcyBhbiBTR0kgZXh0ZW5zaW9uLgorICAgKiAgQGluZ3JvdXAgU0dJZXh0ZW5zaW9ucworICAgKiAgQGRvY3RvZG8KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICByYW5kb21fc2FtcGxlX24oX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKyAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlcmF0b3IgX19vdXQsIGNvbnN0IF9EaXN0YW5jZSBfX24sCisJCSAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X091dHB1dEl0ZXJhdG9yLAorCQl0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9VbmFyeUZ1bmN0aW9uQ29uY2VwdDwKKwkJX1JhbmRvbU51bWJlckdlbmVyYXRvciwgX0Rpc3RhbmNlLCBfRGlzdGFuY2U+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKKyAgICAgIF9EaXN0YW5jZSBfX20gPSBtaW4oX19uLCBfX3JlbWFpbmluZyk7CisKKyAgICAgIHdoaWxlIChfX20gPiAwKQorCXsKKwkgIGlmIChfX3JhbmQoX19yZW1haW5pbmcpIDwgX19tKQorCSAgICB7CisJICAgICAgKl9fb3V0ID0gKl9fZmlyc3Q7CisJICAgICAgKytfX291dDsKKwkgICAgICAtLV9fbTsKKwkgICAgfQorCSAgLS1fX3JlbWFpbmluZzsKKwkgICsrX19maXJzdDsKKwl9CisgICAgICByZXR1cm4gX19vdXQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsCisJICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgorICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcgorICAgIF9fcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCSAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19vdXQsCisJCSAgICBjb25zdCBfRGlzdGFuY2UgX19uKQorICAgIHsKKyAgICAgIF9EaXN0YW5jZSBfX20gPSAwOworICAgICAgX0Rpc3RhbmNlIF9fdCA9IF9fbjsKKyAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19tIDwgX19uOyArK19fbSwgKytfX2ZpcnN0KQorCV9fb3V0W19fbV0gPSAqX19maXJzdDsKKworICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQorCXsKKwkgICsrX190OworCSAgX0Rpc3RhbmNlIF9fTSA9IHN0ZDo6cmFuZCgpICUgKF9fdCk7CisJICBpZiAoX19NIDwgX19uKQorCSAgICBfX291dFtfX01dID0gKl9fZmlyc3Q7CisJICArK19fZmlyc3Q7CisJfQorICAgICAgcmV0dXJuIF9fb3V0ICsgX19tOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIF9SYW5kb21OdW1iZXJHZW5lcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KKyAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IKKyAgICBfX3JhbmRvbV9zYW1wbGUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fb3V0LAorCQkgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kLAorCQkgICAgY29uc3QgX0Rpc3RhbmNlIF9fbikKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9VbmFyeUZ1bmN0aW9uQ29uY2VwdDwKKwkgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciwgX0Rpc3RhbmNlLCBfRGlzdGFuY2U+KQorCisgICAgICBfRGlzdGFuY2UgX19tID0gMDsKKyAgICAgIF9EaXN0YW5jZSBfX3QgPSBfX247CisgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fbSA8IF9fbjsgKytfX20sICsrX19maXJzdCkKKwlfX291dFtfX21dID0gKl9fZmlyc3Q7CisKKyAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwl7CisJICArK19fdDsKKwkgIF9EaXN0YW5jZSBfX00gPSBfX3JhbmQoX190KTsKKwkgIGlmIChfX00gPCBfX24pCisJICAgIF9fb3V0W19fTV0gPSAqX19maXJzdDsKKwkgICsrX19maXJzdDsKKwl9CisgICAgICByZXR1cm4gX19vdXQgKyBfX207CisgICAgfQorCisgIC8qKgorICAgKiAgVGhpcyBpcyBhbiBTR0kgZXh0ZW5zaW9uLgorICAgKiAgQGluZ3JvdXAgU0dJZXh0ZW5zaW9ucworICAgKiAgQGRvY3RvZG8KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KKyAgICBpbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yCisgICAgcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCSAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fb3V0X2ZpcnN0LAorCQkgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX291dF9sYXN0KQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8CisJICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX291dF9maXJzdCwgX19vdXRfbGFzdCk7CisKKyAgICAgIHJldHVybiBfX3JhbmRvbV9zYW1wbGUoX19maXJzdCwgX19sYXN0LAorCQkJICAgICBfX291dF9maXJzdCwgX19vdXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsKKyAgICB9CisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIFNHSSBleHRlbnNpb24uCisgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICAqICBAZG9jdG9kbworICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcgorICAgIHJhbmRvbV9zYW1wbGUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX291dF9maXJzdCwKKwkJICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19vdXRfbGFzdCwKKwkJICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yQ29uY2VwdDwKKwkgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fb3V0X2ZpcnN0LCBfX291dF9sYXN0KTsKKworICAgICAgcmV0dXJuIF9fcmFuZG9tX3NhbXBsZShfX2ZpcnN0LCBfX2xhc3QsCisJCQkgICAgIF9fb3V0X2ZpcnN0LCBfX3JhbmQsCisJCQkgICAgIF9fb3V0X2xhc3QgLSBfX291dF9maXJzdCk7CisgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgdXNpbmcgc3RkOjppc19oZWFwOworI2Vsc2UKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIFNHSSBleHRlbnNpb24uCisgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICAqICBAZG9jdG9kbworICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBpc19oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuQ29tcGFyYWJsZUNvbmNlcHQ8CisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICByZXR1cm4gc3RkOjpfX2lzX2hlYXAoX19maXJzdCwgX19sYXN0IC0gX19maXJzdCk7CisgICAgfQorCisgIC8qKgorICAgKiAgVGhpcyBpcyBhbiBTR0kgZXh0ZW5zaW9uLgorICAgKiAgQGluZ3JvdXAgU0dJZXh0ZW5zaW9ucworICAgKiAgQGRvY3RvZG8KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfU3RyaWN0V2Vha09yZGVyaW5nPgorICAgIGlubGluZSBib29sCisgICAgaXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKKwkgICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfU3RyaWN0V2Vha09yZGVyaW5nLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIHJldHVybiBzdGQ6Ol9faXNfaGVhcChfX2ZpcnN0LCBfX2NvbXAsIF9fbGFzdCAtIF9fZmlyc3QpOworICAgIH0KKyNlbmRpZgorCisgIC8vIGlzX3NvcnRlZCwgYSBwcmVkaWNhdGVkIHRlc3Rpbmcgd2hldGhlciBhIHJhbmdlIGlzIHNvcnRlZCBpbgorICAvLyBub25kZXNjZW5kaW5nIG9yZGVyLiAgVGhpcyBpcyBhbiBleHRlbnNpb24sIG5vdCBwYXJ0IG9mIHRoZSBDKysKKyAgLy8gc3RhbmRhcmQuCisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIFNHSSBleHRlbnNpb24uCisgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICAqICBAZG9jdG9kbworICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgIGJvb2wKKyAgICBpc19zb3J0ZWQoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbkNvbXBhcmFibGVDb25jZXB0PAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwlyZXR1cm4gdHJ1ZTsKKworICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OworICAgICAgZm9yICgrK19fbmV4dDsgX19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4dCwgKytfX25leHQpCisJaWYgKCpfX25leHQgPCAqX19maXJzdCkKKwkgIHJldHVybiBmYWxzZTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAvKioKKyAgICogIFRoaXMgaXMgYW4gU0dJIGV4dGVuc2lvbi4KKyAgICogIEBpbmdyb3VwIFNHSWV4dGVuc2lvbnMKKyAgICogIEBkb2N0b2RvCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9TdHJpY3RXZWFrT3JkZXJpbmc+CisgICAgYm9vbAorICAgIGlzX3NvcnRlZChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCSAgICAgIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X1N0cmljdFdlYWtPcmRlcmluZywKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwlyZXR1cm4gdHJ1ZTsKKworICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OworICAgICAgZm9yICgrK19fbmV4dDsgX19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4dCwgKytfX25leHQpCisJaWYgKF9fY29tcCgqX19uZXh0LCAqX19maXJzdCkpCisJICByZXR1cm4gZmFsc2U7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgRmluZCB0aGUgbWVkaWFuIG9mIHRocmVlIHZhbHVlcy4KKyAgICogIEBwYXJhbSAgYSAgQSB2YWx1ZS4KKyAgICogIEBwYXJhbSAgYiAgQSB2YWx1ZS4KKyAgICogIEBwYXJhbSAgYyAgQSB2YWx1ZS4KKyAgICogIEByZXR1cm4gT25lIG9mIEBwIGEsIEBwIGIgb3IgQHAgYy4KKyAgICoKKyAgICogIElmIEBjIHtsLG0sbn0gaXMgc29tZSBjb252b2x1dGlvbiBvZiBAcCB7YSxiLGN9IHN1Y2ggdGhhdCBAYyBsPD1tPD1uCisgICAqICB0aGVuIHRoZSB2YWx1ZSByZXR1cm5lZCB3aWxsIGJlIEBjIG0uCisgICAqICBUaGlzIGlzIGFuIFNHSSBleHRlbnNpb24uCisgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjb25zdCBfVHAmCisgICAgX19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYykKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbkNvbXBhcmFibGVDb25jZXB0PF9UcD4pCisgICAgICBpZiAoX19hIDwgX19iKQorCWlmIChfX2IgPCBfX2MpCisJICByZXR1cm4gX19iOworCWVsc2UgaWYgKF9fYSA8IF9fYykKKwkgIHJldHVybiBfX2M7CisJZWxzZQorCSAgcmV0dXJuIF9fYTsKKyAgICAgIGVsc2UgaWYgKF9fYSA8IF9fYykKKwlyZXR1cm4gX19hOworICAgICAgZWxzZSBpZiAoX19iIDwgX19jKQorCXJldHVybiBfX2M7CisgICAgICBlbHNlCisJcmV0dXJuIF9fYjsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgRmluZCB0aGUgbWVkaWFuIG9mIHRocmVlIHZhbHVlcyB1c2luZyBhIHByZWRpY2F0ZSBmb3IgY29tcGFyaXNvbi4KKyAgICogIEBwYXJhbSAgYSAgICAgQSB2YWx1ZS4KKyAgICogIEBwYXJhbSAgYiAgICAgQSB2YWx1ZS4KKyAgICogIEBwYXJhbSAgYyAgICAgQSB2YWx1ZS4KKyAgICogIEBwYXJhbSAgY29tcCAgQSBiaW5hcnkgcHJlZGljYXRlLgorICAgKiAgQHJldHVybiBPbmUgb2YgQHAgYSwgQHAgYiBvciBAcCBjLgorICAgKgorICAgKiAgSWYgQGMge2wsbSxufSBpcyBzb21lIGNvbnZvbHV0aW9uIG9mIEBwIHthLGIsY30gc3VjaCB0aGF0IEBwIGNvbXAobCxtKQorICAgKiAgYW5kIEBwIGNvbXAobSxuKSBhcmUgYm90aCB0cnVlIHRoZW4gdGhlIHZhbHVlIHJldHVybmVkIHdpbGwgYmUgQGMgbS4KKyAgICogIFRoaXMgaXMgYW4gU0dJIGV4dGVuc2lvbi4KKyAgICogIEBpbmdyb3VwIFNHSWV4dGVuc2lvbnMKKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBjb25zdCBfVHAmCisgICAgX19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYywgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeUZ1bmN0aW9uQ29uY2VwdDxfQ29tcGFyZSwgYm9vbCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgX1RwLCBfVHA+KQorICAgICAgaWYgKF9fY29tcChfX2EsIF9fYikpCisJaWYgKF9fY29tcChfX2IsIF9fYykpCisJICByZXR1cm4gX19iOworCWVsc2UgaWYgKF9fY29tcChfX2EsIF9fYykpCisJICByZXR1cm4gX19jOworCWVsc2UKKwkgIHJldHVybiBfX2E7CisgICAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQorCXJldHVybiBfX2E7CisgICAgICBlbHNlIGlmIChfX2NvbXAoX19iLCBfX2MpKQorCXJldHVybiBfX2M7CisgICAgICBlbHNlCisJcmV0dXJuIF9fYjsKKyAgICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmIC8qIF9FWFRfQUxHT1JJVEhNICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9hcnJheV9hbGxvY2F0b3IuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L2FycmF5X2FsbG9jYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNmYyNzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9hcnJheV9hbGxvY2F0b3IuaApAQCAtMCwwICsxLDE1NCBAQAorLy8gYXJyYXkgYWxsb2NhdG9yIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGV4dC9hcnJheV9hbGxvY2F0b3IuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX0FSUkFZX0FMTE9DQVRPUl9ICisjZGVmaW5lIF9BUlJBWV9BTExPQ0FUT1JfSCAxCisKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPG5ldz4KKyNpbmNsdWRlIDxiaXRzL2Z1bmN0ZXhjZXB0Lmg+CisjaW5jbHVkZSA8dHIxL2FycmF5PgorI2luY2x1ZGUgPGJpdHMvbW92ZS5oPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorCisgdXNpbmcgc3RkOjpzaXplX3Q7CisgdXNpbmcgc3RkOjpwdHJkaWZmX3Q7CisKKyAgLy8vIEJhc2UgY2xhc3MuCisgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIGFycmF5X2FsbG9jYXRvcl9iYXNlCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgc2l6ZV90ICAgICAJc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgIAlkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcCogICAgICAgCXBvaW50ZXI7CisgICAgICB0eXBlZGVmIGNvbnN0IF9UcCogCWNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIF9UcCYgICAgICAgCXJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1RwJgljb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIF9UcCAgICAgICAgCXZhbHVlX3R5cGU7CisKKyAgICAgIHBvaW50ZXIKKyAgICAgIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQorCisgICAgICBjb25zdF9wb2ludGVyCisgICAgICBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KKworICAgICAgdm9pZAorICAgICAgZGVhbGxvY2F0ZShwb2ludGVyLCBzaXplX3R5cGUpCisgICAgICB7IAorCS8vIERvZXMgbm90aGluZy4KKyAgICAgIH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkgCisgICAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNDAyLiB3cm9uZyBuZXcgZXhwcmVzc2lvbiBpbiBbc29tZV9dIGFsbG9jYXRvcjo6Y29uc3RydWN0CisgICAgICB2b2lkIAorICAgICAgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSAKKyAgICAgIHsgOjpuZXcoKHZvaWQgKilfX3ApIHZhbHVlX3R5cGUoX192YWwpOyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHZvaWQKKyAgICAgICAgY29uc3RydWN0KHBvaW50ZXIgX19wLCBfQXJncyYmLi4uIF9fYXJncykKKwl7IDo6bmV3KCh2b2lkICopX19wKSBfVHAoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsgfQorI2VuZGlmCisKKyAgICAgIHZvaWQgCisgICAgICBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9CisgICAgfTsgIAorCisgIC8qKgorICAgKiAgQGJyaWVmICBBbiBhbGxvY2F0b3IgdGhhdCB1c2VzIHByZXZpb3VzbHkgYWxsb2NhdGVkIG1lbW9yeS4KKyAgICogIFRoaXMgbWVtb3J5IGNhbiBiZSBleHRlcm5hbGx5LCBnbG9iYWxseSwgb3Igb3RoZXJ3aXNlIGFsbG9jYXRlZC4KKyAgICogIEBpbmdyb3VwIGFsbG9jYXRvcnMKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FycmF5ID0gc3RkOjp0cjE6OmFycmF5PF9UcCwgMT4gPgorICAgIGNsYXNzIGFycmF5X2FsbG9jYXRvciA6IHB1YmxpYyBhcnJheV9hbGxvY2F0b3JfYmFzZTxfVHA+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgc2l6ZV90ICAgICAJc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgIAlkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcCogICAgICAgCXBvaW50ZXI7CisgICAgICB0eXBlZGVmIGNvbnN0IF9UcCogCWNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIF9UcCYgICAgICAgCXJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiAJY29uc3RfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBfVHAgICAgICAgIAl2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBfQXJyYXkJCWFycmF5X3R5cGU7CisKKyAgICBwcml2YXRlOgorICAgICAgYXJyYXlfdHlwZSogCV9NX2FycmF5OworICAgICAgc2l6ZV90eXBlIAlfTV91c2VkOworCisgICAgcHVibGljOgorICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfQXJyYXkxID0gX0FycmF5PgorICAgICAgICBzdHJ1Y3QgcmViaW5kCisgICAgICAgIHsgdHlwZWRlZiBhcnJheV9hbGxvY2F0b3I8X1RwMSwgX0FycmF5MT4gb3RoZXI7IH07CisKKyAgICAgIGFycmF5X2FsbG9jYXRvcihhcnJheV90eXBlKiBfX2FycmF5ID0gTlVMTCkgdGhyb3coKSAKKyAgICAgIDogX01fYXJyYXkoX19hcnJheSksIF9NX3VzZWQoc2l6ZV90eXBlKCkpIHsgfQorCisgICAgICBhcnJheV9hbGxvY2F0b3IoY29uc3QgYXJyYXlfYWxsb2NhdG9yJiBfX28pICB0aHJvdygpIAorICAgICAgOiBfTV9hcnJheShfX28uX01fYXJyYXkpLCBfTV91c2VkKF9fby5fTV91c2VkKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX0FycmF5MT4KKyAgICAgICAgYXJyYXlfYWxsb2NhdG9yKGNvbnN0IGFycmF5X2FsbG9jYXRvcjxfVHAxLCBfQXJyYXkxPiYpIHRocm93KCkKKwk6IF9NX2FycmF5KE5VTEwpLCBfTV91c2VkKHNpemVfdHlwZSgpKSB7IH0KKworICAgICAgfmFycmF5X2FsbG9jYXRvcigpIHRocm93KCkgeyB9CisKKyAgICAgIHBvaW50ZXIKKyAgICAgIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkKKyAgICAgIHsKKwlpZiAoX01fYXJyYXkgPT0gMCB8fCBfTV91c2VkICsgX19uID4gX01fYXJyYXktPnNpemUoKSkKKwkgIHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsKKwlwb2ludGVyIF9fcmV0ID0gX01fYXJyYXktPmJlZ2luKCkgKyBfTV91c2VkOworCV9NX3VzZWQgKz0gX19uOworCXJldHVybiBfX3JldDsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FycmF5PgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBhcnJheV9hbGxvY2F0b3I8X1RwLCBfQXJyYXk+JiwKKwkgICAgICAgY29uc3QgYXJyYXlfYWxsb2NhdG9yPF9UcCwgX0FycmF5PiYpCisgICAgeyByZXR1cm4gdHJ1ZTsgfQorICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQXJyYXk+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IGFycmF5X2FsbG9jYXRvcjxfVHAsIF9BcnJheT4mLCAKKwkgICAgICAgY29uc3QgYXJyYXlfYWxsb2NhdG9yPF9UcCwgX0FycmF5PiYpCisgICAgeyByZXR1cm4gZmFsc2U7IH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L2F0b21pY2l0eS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvYXRvbWljaXR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNiNDE5ZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L2F0b21pY2l0eS5oCkBAIC0wLDAgKzEsMTEzIEBACisvLyBTdXBwb3J0IGZvciBhdG9taWMgb3BlcmF0aW9ucyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGF0b21pY2l0eS5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfQVRPTUlDSVRZX0gKKyNkZWZpbmUgX0dMSUJDWFhfQVRPTUlDSVRZX0gJMQorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxiaXRzL2d0aHIuaD4KKyNpbmNsdWRlIDxiaXRzL2F0b21pY193b3JkLmg+CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisKKyAgLy8gRnVuY3Rpb25zIGZvciBwb3J0YWJsZSBhdG9taWMgYWNjZXNzLgorICAvLyBUbyBhYnN0cmFjdCBsb2NraW5nIHByaW1pdGl2ZXMgYWNyb3NzIGFsbCB0aHJlYWQgcG9saWNpZXMsIHVzZToKKyAgLy8gX19leGNoYW5nZV9hbmRfYWRkX2Rpc3BhdGNoCisgIC8vIF9fYXRvbWljX2FkZF9kaXNwYXRjaAorI2lmZGVmIF9HTElCQ1hYX0FUT01JQ19CVUlMVElOU180CisgIHN0YXRpYyBpbmxpbmUgX0F0b21pY193b3JkIAorICBfX2V4Y2hhbmdlX2FuZF9hZGQodm9sYXRpbGUgX0F0b21pY193b3JkKiBfX21lbSwgaW50IF9fdmFsKQorICB7IHJldHVybiBfX3N5bmNfZmV0Y2hfYW5kX2FkZChfX21lbSwgX192YWwpOyB9CisKKyAgc3RhdGljIGlubGluZSB2b2lkCisgIF9fYXRvbWljX2FkZCh2b2xhdGlsZSBfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192YWwpCisgIHsgX19zeW5jX2ZldGNoX2FuZF9hZGQoX19tZW0sIF9fdmFsKTsgfQorI2Vsc2UKKyAgX0F0b21pY193b3JkCisgIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKKyAgX19leGNoYW5nZV9hbmRfYWRkKHZvbGF0aWxlIF9BdG9taWNfd29yZCosIGludCkgdGhyb3cgKCk7CisKKyAgdm9pZAorICBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCisgIF9fYXRvbWljX2FkZCh2b2xhdGlsZSBfQXRvbWljX3dvcmQqLCBpbnQpIHRocm93ICgpOworI2VuZGlmCisKKyAgc3RhdGljIGlubGluZSBfQXRvbWljX3dvcmQKKyAgX19leGNoYW5nZV9hbmRfYWRkX3NpbmdsZShfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192YWwpCisgIHsKKyAgICBfQXRvbWljX3dvcmQgX19yZXN1bHQgPSAqX19tZW07CisgICAgKl9fbWVtICs9IF9fdmFsOworICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgfQorCisgIHN0YXRpYyBpbmxpbmUgdm9pZAorICBfX2F0b21pY19hZGRfc2luZ2xlKF9BdG9taWNfd29yZCogX19tZW0sIGludCBfX3ZhbCkKKyAgeyAqX19tZW0gKz0gX192YWw7IH0KKworICBzdGF0aWMgaW5saW5lIF9BdG9taWNfd29yZAorICBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCisgIF9fZXhjaGFuZ2VfYW5kX2FkZF9kaXNwYXRjaChfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192YWwpCisgIHsKKyNpZmRlZiBfX0dUSFJFQURTCisgICAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCgpKQorICAgICAgcmV0dXJuIF9fZXhjaGFuZ2VfYW5kX2FkZChfX21lbSwgX192YWwpOworICAgIGVsc2UKKyAgICAgIHJldHVybiBfX2V4Y2hhbmdlX2FuZF9hZGRfc2luZ2xlKF9fbWVtLCBfX3ZhbCk7CisjZWxzZQorICAgIHJldHVybiBfX2V4Y2hhbmdlX2FuZF9hZGRfc2luZ2xlKF9fbWVtLCBfX3ZhbCk7CisjZW5kaWYKKyAgfQorCisgIHN0YXRpYyBpbmxpbmUgdm9pZAorICBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCisgIF9fYXRvbWljX2FkZF9kaXNwYXRjaChfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192YWwpCisgIHsKKyNpZmRlZiBfX0dUSFJFQURTCisgICAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCgpKQorICAgICAgX19hdG9taWNfYWRkKF9fbWVtLCBfX3ZhbCk7CisgICAgZWxzZQorICAgICAgX19hdG9taWNfYWRkX3NpbmdsZShfX21lbSwgX192YWwpOworI2Vsc2UKKyAgICBfX2F0b21pY19hZGRfc2luZ2xlKF9fbWVtLCBfX3ZhbCk7CisjZW5kaWYKKyAgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKy8vIEV2ZW4gaWYgdGhlIENQVSBkb2Vzbid0IG5lZWQgYSBtZW1vcnkgYmFycmllciwgd2UgbmVlZCB0byBlbnN1cmUKKy8vIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgcmVvcmRlciBtZW1vcnkgYWNjZXNzZXMgYWNyb3NzIHRoZQorLy8gYmFycmllcnMuCisjaWZuZGVmIF9HTElCQ1hYX1JFQURfTUVNX0JBUlJJRVIKKyNkZWZpbmUgX0dMSUJDWFhfUkVBRF9NRU1fQkFSUklFUiBfX2FzbSBfX3ZvbGF0aWxlICgiIjo6OiJtZW1vcnkiKQorI2VuZGlmCisjaWZuZGVmIF9HTElCQ1hYX1dSSVRFX01FTV9CQVJSSUVSCisjZGVmaW5lIF9HTElCQ1hYX1dSSVRFX01FTV9CQVJSSUVSIF9fYXNtIF9fdm9sYXRpbGUgKCIiOjo6Im1lbW9yeSIpCisjZW5kaWYKKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvYml0bWFwX2FsbG9jYXRvci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvYml0bWFwX2FsbG9jYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MWQ5YWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9iaXRtYXBfYWxsb2NhdG9yLmgKQEAgLTAsMCArMSwxMTA3IEBACisvLyBCaXRtYXAgQWxsb2NhdG9yLiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBleHQvYml0bWFwX2FsbG9jYXRvci5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfQklUTUFQX0FMTE9DQVRPUl9ICisjZGVmaW5lIF9CSVRNQVBfQUxMT0NBVE9SX0ggMQorCisjaW5jbHVkZSA8Y3N0ZGRlZj4gLy8gRm9yIHN0ZDo6c2l6ZV90LCBhbmQgcHRyZGlmZl90LgorI2luY2x1ZGUgPGJpdHMvZnVuY3RleGNlcHQuaD4gLy8gRm9yIF9fdGhyb3dfYmFkX2FsbG9jKCkuCisjaW5jbHVkZSA8dXRpbGl0eT4gLy8gRm9yIHN0ZDo6cGFpci4KKyNpbmNsdWRlIDxmdW5jdGlvbmFsPiAvLyBGb3IgZ3JlYXRlcl9lcXVhbCwgYW5kIGxlc3NfZXF1YWwuCisjaW5jbHVkZSA8bmV3PiAvLyBGb3Igb3BlcmF0b3IgbmV3LgorI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+IC8vIF9HTElCQ1hYX0RFQlVHX0FTU0VSVAorI2luY2x1ZGUgPGV4dC9jb25jdXJyZW5jZS5oPgorI2luY2x1ZGUgPGJpdHMvbW92ZS5oPgorCisvKiogQGJyaWVmIFRoZSBjb25zdGFudCBpbiB0aGUgZXhwcmVzc2lvbiBiZWxvdyBpcyB0aGUgYWxpZ25tZW50CisgKiByZXF1aXJlZCBpbiBieXRlcy4KKyAqLworI2RlZmluZSBfQkFMTE9DX0FMSUdOX0JZVEVTIDgKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKworICB1c2luZyBzdGQ6OnNpemVfdDsKKyAgdXNpbmcgc3RkOjpwdHJkaWZmX3Q7CisKKyAgbmFtZXNwYWNlIF9fZGV0YWlsCisgIHsKKyAgICAvKiogQGNsYXNzICBfX21pbmlfdmVjdG9yIGJpdG1hcF9hbGxvY2F0b3IuaCBiaXRtYXBfYWxsb2NhdG9yLmgKKyAgICAgKgorICAgICAqICBAYnJpZWYgIF9fbWluaV92ZWN0b3I8PiBpcyBhIHN0cmlwcGVkIGRvd24gdmVyc2lvbiBvZiB0aGUKKyAgICAgKiAgZnVsbC1mbGVkZ2VkIHN0ZDo6dmVjdG9yPD4uCisgICAgICoKKyAgICAgKiAgSXQgaXMgdG8gYmUgdXNlZCBvbmx5IGZvciBidWlsdC1pbiB0eXBlcyBvciBQT0RzLiBOb3RhYmxlCisgICAgICogIGRpZmZlcmVuY2VzIGFyZToKKyAgICAgKiAKKyAgICAgKiAgQGRldGFpbAorICAgICAqICAxLiBOb3QgYWxsIGFjY2Vzc29yIGZ1bmN0aW9ucyBhcmUgcHJlc2VudC4KKyAgICAgKiAgMi4gVXNlZCBPTkxZIGZvciBQT0RzLgorICAgICAqICAzLiBObyBBbGxvY2F0b3IgdGVtcGxhdGUgYXJndW1lbnQuIFVzZXMgOjpvcGVyYXRvciBuZXcoKSB0byBnZXQKKyAgICAgKiAgbWVtb3J5LCBhbmQgOjpvcGVyYXRvciBkZWxldGUoKSB0byBmcmVlIGl0LgorICAgICAqICBDYXZlYXQ6IFRoZSBkdG9yIGRvZXMgTk9UIGZyZWUgdGhlIG1lbW9yeSBhbGxvY2F0ZWQsIHNvIHRoaXMgYQorICAgICAqICBtZW1vcnktbGVha2luZyB2ZWN0b3IhCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgY2xhc3MgX19taW5pX3ZlY3RvcgorICAgICAgeworCV9fbWluaV92ZWN0b3IoY29uc3QgX19taW5pX3ZlY3RvciYpOworCV9fbWluaV92ZWN0b3ImIG9wZXJhdG9yPShjb25zdCBfX21pbmlfdmVjdG9yJik7CisKKyAgICAgIHB1YmxpYzoKKwl0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOworCXR5cGVkZWYgX1RwKiBwb2ludGVyOworCXR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CisJdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKKwl0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CisJdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOworCXR5cGVkZWYgcG9pbnRlciBpdGVyYXRvcjsKKworICAgICAgcHJpdmF0ZToKKwlwb2ludGVyIF9NX3N0YXJ0OworCXBvaW50ZXIgX01fZmluaXNoOworCXBvaW50ZXIgX01fZW5kX29mX3N0b3JhZ2U7CisKKwlzaXplX3R5cGUKKwlfTV9zcGFjZV9sZWZ0KCkgY29uc3QgdGhyb3coKQorCXsgcmV0dXJuIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoOyB9CisKKwlwb2ludGVyCisJYWxsb2NhdGUoc2l6ZV90eXBlIF9fbikKKwl7IHJldHVybiBzdGF0aWNfY2FzdDxwb2ludGVyPig6Om9wZXJhdG9yIG5ldyhfX24gKiBzaXplb2YoX1RwKSkpOyB9CisKKwl2b2lkCisJZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlKQorCXsgOjpvcGVyYXRvciBkZWxldGUoX19wKTsgfQorCisgICAgICBwdWJsaWM6CisJLy8gTWVtYmVycyB1c2VkOiBzaXplKCksIHB1c2hfYmFjaygpLCBwb3BfYmFjaygpLAorCS8vIGluc2VydChpdGVyYXRvciwgY29uc3RfcmVmZXJlbmNlKSwgZXJhc2UoaXRlcmF0b3IpLAorCS8vIGJlZ2luKCksIGVuZCgpLCBiYWNrKCksIG9wZXJhdG9yW10uCisKKwlfX21pbmlfdmVjdG9yKCkKKyAgICAgICAgOiBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7IH0KKworCXNpemVfdHlwZQorCXNpemUoKSBjb25zdCB0aHJvdygpCisJeyByZXR1cm4gX01fZmluaXNoIC0gX01fc3RhcnQ7IH0KKworCWl0ZXJhdG9yCisJYmVnaW4oKSBjb25zdCB0aHJvdygpCisJeyByZXR1cm4gdGhpcy0+X01fc3RhcnQ7IH0KKworCWl0ZXJhdG9yCisJZW5kKCkgY29uc3QgdGhyb3coKQorCXsgcmV0dXJuIHRoaXMtPl9NX2ZpbmlzaDsgfQorCisJcmVmZXJlbmNlCisJYmFjaygpIGNvbnN0IHRocm93KCkKKwl7IHJldHVybiAqKHRoaXMtPmVuZCgpIC0gMSk7IH0KKworCXJlZmVyZW5jZQorCW9wZXJhdG9yW10oY29uc3Qgc2l6ZV90eXBlIF9fcG9zKSBjb25zdCB0aHJvdygpCisJeyByZXR1cm4gdGhpcy0+X01fc3RhcnRbX19wb3NdOyB9CisKKwl2b2lkCisJaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBjb25zdF9yZWZlcmVuY2UgX194KTsKKworCXZvaWQKKwlwdXNoX2JhY2soY29uc3RfcmVmZXJlbmNlIF9feCkKKwl7CisJICBpZiAodGhpcy0+X01fc3BhY2VfbGVmdCgpKQorCSAgICB7CisJICAgICAgKnRoaXMtPmVuZCgpID0gX194OworCSAgICAgICsrdGhpcy0+X01fZmluaXNoOworCSAgICB9CisJICBlbHNlCisJICAgIHRoaXMtPmluc2VydCh0aGlzLT5lbmQoKSwgX194KTsKKwl9CisKKwl2b2lkCisJcG9wX2JhY2soKSB0aHJvdygpCisJeyAtLXRoaXMtPl9NX2ZpbmlzaDsgfQorCisJdm9pZAorCWVyYXNlKGl0ZXJhdG9yIF9fcG9zKSB0aHJvdygpOworCisJdm9pZAorCWNsZWFyKCkgdGhyb3coKQorCXsgdGhpcy0+X01fZmluaXNoID0gdGhpcy0+X01fc3RhcnQ7IH0KKyAgICAgIH07CisKKyAgICAvLyBPdXQgb2YgbGluZSBmdW5jdGlvbiBkZWZpbml0aW9ucy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICB2b2lkIF9fbWluaV92ZWN0b3I8X1RwPjo6CisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIGNvbnN0X3JlZmVyZW5jZSBfX3gpCisgICAgICB7CisJaWYgKHRoaXMtPl9NX3NwYWNlX2xlZnQoKSkKKwkgIHsKKwkgICAgc2l6ZV90eXBlIF9fdG9fbW92ZSA9IHRoaXMtPl9NX2ZpbmlzaCAtIF9fcG9zOworCSAgICBpdGVyYXRvciBfX2Rlc3QgPSB0aGlzLT5lbmQoKTsKKwkgICAgaXRlcmF0b3IgX19zcmMgPSB0aGlzLT5lbmQoKSAtIDE7CisKKwkgICAgKyt0aGlzLT5fTV9maW5pc2g7CisJICAgIHdoaWxlIChfX3RvX21vdmUpCisJICAgICAgeworCQkqX19kZXN0ID0gKl9fc3JjOworCQktLV9fZGVzdDsgLS1fX3NyYzsgLS1fX3RvX21vdmU7CisJICAgICAgfQorCSAgICAqX19wb3MgPSBfX3g7CisJICB9CisJZWxzZQorCSAgeworCSAgICBzaXplX3R5cGUgX19uZXdfc2l6ZSA9IHRoaXMtPnNpemUoKSA/IHRoaXMtPnNpemUoKSAqIDIgOiAxOworCSAgICBpdGVyYXRvciBfX25ld19zdGFydCA9IHRoaXMtPmFsbG9jYXRlKF9fbmV3X3NpemUpOworCSAgICBpdGVyYXRvciBfX2ZpcnN0ID0gdGhpcy0+YmVnaW4oKTsKKwkgICAgaXRlcmF0b3IgX19zdGFydCA9IF9fbmV3X3N0YXJ0OworCSAgICB3aGlsZSAoX19maXJzdCAhPSBfX3BvcykKKwkgICAgICB7CisJCSpfX3N0YXJ0ID0gKl9fZmlyc3Q7CisJCSsrX19zdGFydDsgKytfX2ZpcnN0OworCSAgICAgIH0KKwkgICAgKl9fc3RhcnQgPSBfX3g7CisJICAgICsrX19zdGFydDsKKwkgICAgd2hpbGUgKF9fZmlyc3QgIT0gdGhpcy0+ZW5kKCkpCisJICAgICAgeworCQkqX19zdGFydCA9ICpfX2ZpcnN0OworCQkrK19fc3RhcnQ7ICsrX19maXJzdDsKKwkgICAgICB9CisJICAgIGlmICh0aGlzLT5fTV9zdGFydCkKKwkgICAgICB0aGlzLT5kZWFsbG9jYXRlKHRoaXMtPl9NX3N0YXJ0LCB0aGlzLT5zaXplKCkpOworCisJICAgIHRoaXMtPl9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CisJICAgIHRoaXMtPl9NX2ZpbmlzaCA9IF9fc3RhcnQ7CisJICAgIHRoaXMtPl9NX2VuZF9vZl9zdG9yYWdlID0gdGhpcy0+X01fc3RhcnQgKyBfX25ld19zaXplOworCSAgfQorICAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgdm9pZCBfX21pbmlfdmVjdG9yPF9UcD46OgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3MpIHRocm93KCkKKyAgICAgIHsKKwl3aGlsZSAoX19wb3MgKyAxICE9IHRoaXMtPmVuZCgpKQorCSAgeworCSAgICAqX19wb3MgPSBfX3Bvc1sxXTsKKwkgICAgKytfX3BvczsKKwkgIH0KKwktLXRoaXMtPl9NX2ZpbmlzaDsKKyAgICAgIH0KKworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgc3RydWN0IF9fbXZfaXRlcl90cmFpdHMKKyAgICAgIHsKKwl0eXBlZGVmIHR5cGVuYW1lIF9UcDo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworCXR5cGVkZWYgdHlwZW5hbWUgX1RwOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworICAgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIHN0cnVjdCBfX212X2l0ZXJfdHJhaXRzPF9UcCo+CisgICAgICB7CisJdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKKwl0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB9OworCisgICAgZW51bSAKKyAgICAgIHsgCisJYml0c19wZXJfYnl0ZSA9IDgsCisJYml0c19wZXJfYmxvY2sgPSBzaXplb2Yoc2l6ZV90KSAqIHNpemVfdChiaXRzX3Blcl9ieXRlKSAKKyAgICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgICAgX0ZvcndhcmRJdGVyYXRvcgorICAgICAgX19sb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQkgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgX19tdl9pdGVyX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCSAgX1ZhbHVlVHlwZTsKKwl0eXBlZGVmIHR5cGVuYW1lIF9fbXZfaXRlcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorCSAgX0Rpc3RhbmNlVHlwZTsKKworCV9EaXN0YW5jZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OworCV9EaXN0YW5jZVR5cGUgX19oYWxmOworCV9Gb3J3YXJkSXRlcmF0b3IgX19taWRkbGU7CisKKwl3aGlsZSAoX19sZW4gPiAwKQorCSAgeworCSAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOworCSAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CisJICAgIF9fbWlkZGxlICs9IF9faGFsZjsKKwkgICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkKKwkgICAgICB7CisJCV9fZmlyc3QgPSBfX21pZGRsZTsKKwkJKytfX2ZpcnN0OworCQlfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICBfX2xlbiA9IF9faGFsZjsKKwkgIH0KKwlyZXR1cm4gX19maXJzdDsKKyAgICAgIH0KKworICAgIC8qKiBAYnJpZWYgVGhlIG51bWJlciBvZiBCbG9ja3MgcG9pbnRlZCB0byBieSB0aGUgYWRkcmVzcyBwYWlyCisgICAgICogIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FkZHJQYWlyPgorICAgICAgaW5saW5lIHNpemVfdAorICAgICAgX19udW1fYmxvY2tzKF9BZGRyUGFpciBfX2FwKQorICAgICAgeyByZXR1cm4gKF9fYXAuc2Vjb25kIC0gX19hcC5maXJzdCkgKyAxOyB9CisKKyAgICAvKiogQGJyaWVmIFRoZSBudW1iZXIgb2YgQml0LW1hcHMgcG9pbnRlZCB0byBieSB0aGUgYWRkcmVzcyBwYWlyCisgICAgICogIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FkZHJQYWlyPgorICAgICAgaW5saW5lIHNpemVfdAorICAgICAgX19udW1fYml0bWFwcyhfQWRkclBhaXIgX19hcCkKKyAgICAgIHsgcmV0dXJuIF9fbnVtX2Jsb2NrcyhfX2FwKSAvIHNpemVfdChiaXRzX3Blcl9ibG9jayk7IH0KKworICAgIC8vIF9UcCBzaG91bGQgYmUgYSBwb2ludGVyIHR5cGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgY2xhc3MgX0luY2x1c2l2ZV9iZXR3ZWVuIAorICAgICAgOiBwdWJsaWMgc3RkOjp1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBzdGQ6OnBhaXI8X1RwLCBfVHA+LCBib29sPgorICAgICAgeworCXR5cGVkZWYgX1RwIHBvaW50ZXI7CisJcG9pbnRlciBfTV9wdHJfdmFsdWU7CisJdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OnBhaXI8X1RwLCBfVHA+IF9CbG9ja19wYWlyOworCQorICAgICAgcHVibGljOgorCV9JbmNsdXNpdmVfYmV0d2Vlbihwb2ludGVyIF9fcHRyKSA6IF9NX3B0cl92YWx1ZShfX3B0cikgCisJeyB9CisJCisJYm9vbCAKKwlvcGVyYXRvcigpKF9CbG9ja19wYWlyIF9fYnApIGNvbnN0IHRocm93KCkKKwl7CisJICBpZiAoc3RkOjpsZXNzX2VxdWFsPHBvaW50ZXI+KCkoX01fcHRyX3ZhbHVlLCBfX2JwLnNlY29uZCkgCisJICAgICAgJiYgc3RkOjpncmVhdGVyX2VxdWFsPHBvaW50ZXI+KCkoX01fcHRyX3ZhbHVlLCBfX2JwLmZpcnN0KSkKKwkgICAgcmV0dXJuIHRydWU7CisJICBlbHNlCisJICAgIHJldHVybiBmYWxzZTsKKwl9CisgICAgICB9OworICAKKyAgICAvLyBVc2VkIHRvIHBhc3MgYSBGdW5jdG9yIHRvIGZ1bmN0aW9ucyBieSByZWZlcmVuY2UuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3I+CisgICAgICBjbGFzcyBfRnVuY3Rvcl9SZWYgCisgICAgICA6IHB1YmxpYyBzdGQ6OnVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9GdW5jdG9yOjphcmd1bWVudF90eXBlLCAKKwkJCQkgICB0eXBlbmFtZSBfRnVuY3Rvcjo6cmVzdWx0X3R5cGU+CisgICAgICB7CisJX0Z1bmN0b3ImIF9NX2ZyZWY7CisJCisgICAgICBwdWJsaWM6CisJdHlwZWRlZiB0eXBlbmFtZSBfRnVuY3Rvcjo6YXJndW1lbnRfdHlwZSBhcmd1bWVudF90eXBlOworCXR5cGVkZWYgdHlwZW5hbWUgX0Z1bmN0b3I6OnJlc3VsdF90eXBlIHJlc3VsdF90eXBlOworCisJX0Z1bmN0b3JfUmVmKF9GdW5jdG9yJiBfX2ZyZWYpIDogX01fZnJlZihfX2ZyZWYpIAorCXsgfQorCisJcmVzdWx0X3R5cGUgCisJb3BlcmF0b3IoKShhcmd1bWVudF90eXBlIF9fYXJnKSAKKwl7IHJldHVybiBfTV9mcmVmKF9fYXJnKTsgfQorICAgICAgfTsKKworICAgIC8qKiBAY2xhc3MgIF9GZml0X2ZpbmRlciBiaXRtYXBfYWxsb2NhdG9yLmggYml0bWFwX2FsbG9jYXRvci5oCisgICAgICoKKyAgICAgKiAgQGJyaWVmICBUaGUgY2xhc3Mgd2hpY2ggYWN0cyBhcyBhIHByZWRpY2F0ZSBmb3IgYXBwbHlpbmcgdGhlCisgICAgICogIGZpcnN0LWZpdCBtZW1vcnkgYWxsb2NhdGlvbiBwb2xpY3kgZm9yIHRoZSBiaXRtYXAgYWxsb2NhdG9yLgorICAgICAqLworICAgIC8vIF9UcCBzaG91bGQgYmUgYSBwb2ludGVyIHR5cGUsIGFuZCBfQWxsb2MgaXMgdGhlIEFsbG9jYXRvciBmb3IKKyAgICAvLyB0aGUgdmVjdG9yLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIGNsYXNzIF9GZml0X2ZpbmRlciAKKyAgICAgIDogcHVibGljIHN0ZDo6dW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgc3RkOjpwYWlyPF9UcCwgX1RwPiwgYm9vbD4KKyAgICAgIHsKKwl0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6cGFpcjxfVHAsIF9UcD4gX0Jsb2NrX3BhaXI7CisJdHlwZWRlZiB0eXBlbmFtZSBfX2RldGFpbDo6X19taW5pX3ZlY3RvcjxfQmxvY2tfcGFpcj4gX0JQVmVjdG9yOworCXR5cGVkZWYgdHlwZW5hbWUgX0JQVmVjdG9yOjpkaWZmZXJlbmNlX3R5cGUgX0NvdW50ZXJfdHlwZTsKKworCXNpemVfdCogX01fcGJpdG1hcDsKKwlfQ291bnRlcl90eXBlIF9NX2RhdGFfb2Zmc2V0OworCisgICAgICBwdWJsaWM6CisJX0ZmaXRfZmluZGVyKCkgOiBfTV9wYml0bWFwKDApLCBfTV9kYXRhX29mZnNldCgwKQorCXsgfQorCisJYm9vbCAKKwlvcGVyYXRvcigpKF9CbG9ja19wYWlyIF9fYnApIHRocm93KCkKKwl7CisJICAvLyBTZXQgdGhlIF9yb3ZlciB0byB0aGUgbGFzdCBwaHlzaWNhbCBsb2NhdGlvbiBiaXRtYXAsCisJICAvLyB3aGljaCBpcyB0aGUgYml0bWFwIHdoaWNoIGJlbG9uZ3MgdG8gdGhlIGZpcnN0IGZyZWUKKwkgIC8vIGJsb2NrLiBUaHVzLCB0aGUgYml0bWFwcyBhcmUgaW4gZXhhY3QgcmV2ZXJzZSBvcmRlciBvZgorCSAgLy8gdGhlIGFjdHVhbCBtZW1vcnkgbGF5b3V0LiBTbywgd2UgY291bnQgZG93biB0aGUgYml0bWFwcywKKwkgIC8vIHdoaWNoIGlzIHRoZSBzYW1lIGFzIG1vdmluZyB1cCB0aGUgbWVtb3J5LgorCisJICAvLyBJZiB0aGUgdXNlZCBjb3VudCBzdG9yZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBCaXQgTWFwIGhlYWRlcnMKKwkgIC8vIGlzIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgT2JqZWN0cyB0aGF0IHRoZSBjdXJyZW50IEJsb2NrIGNhbgorCSAgLy8gc3RvcmUsIHRoZW4gdGhlcmUgaXMgZGVmaW5pdGVseSBubyBzcGFjZSBmb3IgYW5vdGhlciBzaW5nbGUKKwkgIC8vIG9iamVjdCwgc28ganVzdCByZXR1cm4gZmFsc2UuCisJICBfQ291bnRlcl90eXBlIF9fZGlmZiA9IF9fZGV0YWlsOjpfX251bV9iaXRtYXBzKF9fYnApOworCisJICBpZiAoKihyZWludGVycHJldF9jYXN0PHNpemVfdCo+CisJCShfX2JwLmZpcnN0KSAtIChfX2RpZmYgKyAxKSkgPT0gX19kZXRhaWw6Ol9fbnVtX2Jsb2NrcyhfX2JwKSkKKwkgICAgcmV0dXJuIGZhbHNlOworCisJICBzaXplX3QqIF9fcm92ZXIgPSByZWludGVycHJldF9jYXN0PHNpemVfdCo+KF9fYnAuZmlyc3QpIC0gMTsKKworCSAgZm9yIChfQ291bnRlcl90eXBlIF9faSA9IDA7IF9faSA8IF9fZGlmZjsgKytfX2kpCisJICAgIHsKKwkgICAgICBfTV9kYXRhX29mZnNldCA9IF9faTsKKwkgICAgICBpZiAoKl9fcm92ZXIpCisJCXsKKwkJICBfTV9wYml0bWFwID0gX19yb3ZlcjsKKwkJICByZXR1cm4gdHJ1ZTsKKwkJfQorCSAgICAgIC0tX19yb3ZlcjsKKwkgICAgfQorCSAgcmV0dXJuIGZhbHNlOworCX0KKyAgICAKKwlzaXplX3QqCisJX01fZ2V0KCkgY29uc3QgdGhyb3coKQorCXsgcmV0dXJuIF9NX3BiaXRtYXA7IH0KKworCV9Db3VudGVyX3R5cGUKKwlfTV9vZmZzZXQoKSBjb25zdCB0aHJvdygpCisJeyByZXR1cm4gX01fZGF0YV9vZmZzZXQgKiBzaXplX3QoYml0c19wZXJfYmxvY2spOyB9CisgICAgICB9OworCisgICAgLyoqIEBjbGFzcyAgX0JpdG1hcF9jb3VudGVyIGJpdG1hcF9hbGxvY2F0b3IuaCBiaXRtYXBfYWxsb2NhdG9yLmgKKyAgICAgKgorICAgICAqICBAYnJpZWYgIFRoZSBiaXRtYXAgY291bnRlciB3aGljaCBhY3RzIGFzIHRoZSBiaXRtYXAKKyAgICAgKiAgbWFuaXB1bGF0b3IsIGFuZCBtYW5hZ2VzIHRoZSBiaXQtbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyBhbmQKKyAgICAgKiAgdGhlIHNlYXJjaGluZyBhbmQgaWRlbnRpZmljYXRpb24gZnVuY3Rpb25zIG9uIHRoZSBiaXQtbWFwLgorICAgICAqLworICAgIC8vIF9UcCBzaG91bGQgYmUgYSBwb2ludGVyIHR5cGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgY2xhc3MgX0JpdG1hcF9jb3VudGVyCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZQorCV9fZGV0YWlsOjpfX21pbmlfdmVjdG9yPHR5cGVuYW1lIHN0ZDo6cGFpcjxfVHAsIF9UcD4gPiBfQlBWZWN0b3I7CisJdHlwZWRlZiB0eXBlbmFtZSBfQlBWZWN0b3I6OnNpemVfdHlwZSBfSW5kZXhfdHlwZTsKKwl0eXBlZGVmIF9UcCBwb2ludGVyOworCisJX0JQVmVjdG9yJiBfTV92YnA7CisJc2l6ZV90KiBfTV9jdXJyX2JtYXA7CisJc2l6ZV90KiBfTV9sYXN0X2JtYXBfaW5fYmxvY2s7CisJX0luZGV4X3R5cGUgX01fY3Vycl9pbmRleDsKKyAgICAKKyAgICAgIHB1YmxpYzoKKwkvLyBVc2UgdGhlIDJuZCBwYXJhbWV0ZXIgd2l0aCBjYXJlLiBNYWtlIHN1cmUgdGhhdCBzdWNoIGFuCisJLy8gZW50cnkgZXhpc3RzIGluIHRoZSB2ZWN0b3IgYmVmb3JlIHBhc3NpbmcgdGhhdCBwYXJ0aWN1bGFyCisJLy8gaW5kZXggdG8gdGhpcyBjdG9yLgorCV9CaXRtYXBfY291bnRlcihfQlBWZWN0b3ImIFJ2YnAsIGxvbmcgX19pbmRleCA9IC0xKSA6IF9NX3ZicChSdmJwKQorCXsgdGhpcy0+X01fcmVzZXQoX19pbmRleCk7IH0KKyAgICAKKwl2b2lkIAorCV9NX3Jlc2V0KGxvbmcgX19pbmRleCA9IC0xKSB0aHJvdygpCisJeworCSAgaWYgKF9faW5kZXggPT0gLTEpCisJICAgIHsKKwkgICAgICBfTV9jdXJyX2JtYXAgPSAwOworCSAgICAgIF9NX2N1cnJfaW5kZXggPSBzdGF0aWNfY2FzdDxfSW5kZXhfdHlwZT4oLTEpOworCSAgICAgIHJldHVybjsKKwkgICAgfQorCisJICBfTV9jdXJyX2luZGV4ID0gX19pbmRleDsKKwkgIF9NX2N1cnJfYm1hcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Kj4KKwkgICAgKF9NX3ZicFtfTV9jdXJyX2luZGV4XS5maXJzdCkgLSAxOworCSAgCisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX19pbmRleCA8PSAobG9uZylfTV92YnAuc2l6ZSgpIC0gMSk7CisJCisJICBfTV9sYXN0X2JtYXBfaW5fYmxvY2sgPSBfTV9jdXJyX2JtYXAKKwkgICAgLSAoKF9NX3ZicFtfTV9jdXJyX2luZGV4XS5zZWNvbmQgCisJCS0gX01fdmJwW19NX2N1cnJfaW5kZXhdLmZpcnN0ICsgMSkgCisJICAgICAgIC8gc2l6ZV90KGJpdHNfcGVyX2Jsb2NrKSAtIDEpOworCX0KKyAgICAKKwkvLyBEYW5nZXJvdXMgRnVuY3Rpb24hIFVzZSB3aXRoIGV4dHJlbWUgY2FyZS4gUGFzcyB0byB0aGlzCisJLy8gZnVuY3Rpb24gT05MWSB0aG9zZSB2YWx1ZXMgdGhhdCBhcmUga25vd24gdG8gYmUgY29ycmVjdCwKKwkvLyBvdGhlcndpc2UgdGhpcyB3aWxsIG1lc3MgdXAgYmlnIHRpbWUuCisJdm9pZAorCV9NX3NldF9pbnRlcm5hbF9iaXRtYXAoc2l6ZV90KiBfX25ld19pbnRlcm5hbF9tYXJrZXIpIHRocm93KCkKKwl7IF9NX2N1cnJfYm1hcCA9IF9fbmV3X2ludGVybmFsX21hcmtlcjsgfQorICAgIAorCWJvb2wKKwlfTV9maW5pc2hlZCgpIGNvbnN0IHRocm93KCkKKwl7IHJldHVybihfTV9jdXJyX2JtYXAgPT0gMCk7IH0KKyAgICAKKwlfQml0bWFwX2NvdW50ZXImCisJb3BlcmF0b3IrKygpIHRocm93KCkKKwl7CisJICBpZiAoX01fY3Vycl9ibWFwID09IF9NX2xhc3RfYm1hcF9pbl9ibG9jaykKKwkgICAgeworCSAgICAgIGlmICgrK19NX2N1cnJfaW5kZXggPT0gX01fdmJwLnNpemUoKSkKKwkJX01fY3Vycl9ibWFwID0gMDsKKwkgICAgICBlbHNlCisJCXRoaXMtPl9NX3Jlc2V0KF9NX2N1cnJfaW5kZXgpOworCSAgICB9CisJICBlbHNlCisJICAgIC0tX01fY3Vycl9ibWFwOworCSAgcmV0dXJuICp0aGlzOworCX0KKyAgICAKKwlzaXplX3QqCisJX01fZ2V0KCkgY29uc3QgdGhyb3coKQorCXsgcmV0dXJuIF9NX2N1cnJfYm1hcDsgfQorICAgIAorCXBvaW50ZXIgCisJX01fYmFzZSgpIGNvbnN0IHRocm93KCkKKwl7IHJldHVybiBfTV92YnBbX01fY3Vycl9pbmRleF0uZmlyc3Q7IH0KKworCV9JbmRleF90eXBlCisJX01fb2Zmc2V0KCkgY29uc3QgdGhyb3coKQorCXsKKwkgIHJldHVybiBzaXplX3QoYml0c19wZXJfYmxvY2spCisJICAgICogKChyZWludGVycHJldF9jYXN0PHNpemVfdCo+KHRoaXMtPl9NX2Jhc2UoKSkgCisJCS0gX01fY3Vycl9ibWFwKSAtIDEpOworCX0KKyAgICAKKwlfSW5kZXhfdHlwZQorCV9NX3doZXJlKCkgY29uc3QgdGhyb3coKQorCXsgcmV0dXJuIF9NX2N1cnJfaW5kZXg7IH0KKyAgICAgIH07CisKKyAgICAvKiogQGJyaWVmICBNYXJrIGEgbWVtb3J5IGFkZHJlc3MgYXMgYWxsb2NhdGVkIGJ5IHJlLXNldHRpbmcgdGhlCisgICAgICogIGNvcnJlc3BvbmRpbmcgYml0IGluIHRoZSBiaXQtbWFwLgorICAgICAqLworICAgIGlubGluZSB2b2lkIAorICAgIF9fYml0X2FsbG9jYXRlKHNpemVfdCogX19wYm1hcCwgc2l6ZV90IF9fcG9zKSB0aHJvdygpCisgICAgeworICAgICAgc2l6ZV90IF9fbWFzayA9IDEgPDwgX19wb3M7CisgICAgICBfX21hc2sgPSB+X19tYXNrOworICAgICAgKl9fcGJtYXAgJj0gX19tYXNrOworICAgIH0KKyAgCisgICAgLyoqIEBicmllZiAgTWFyayBhIG1lbW9yeSBhZGRyZXNzIGFzIGZyZWUgYnkgc2V0dGluZyB0aGUKKyAgICAgKiAgY29ycmVzcG9uZGluZyBiaXQgaW4gdGhlIGJpdC1tYXAuCisgICAgICovCisgICAgaW5saW5lIHZvaWQgCisgICAgX19iaXRfZnJlZShzaXplX3QqIF9fcGJtYXAsIHNpemVfdCBfX3BvcykgdGhyb3coKQorICAgIHsKKyAgICAgIHNpemVfdCBfX21hc2sgPSAxIDw8IF9fcG9zOworICAgICAgKl9fcGJtYXAgfD0gX19tYXNrOworICAgIH0KKyAgfSAvLyBuYW1lc3BhY2UgX19kZXRhaWwKKworICAvKiogQGJyaWVmICBHZW5lcmljIFZlcnNpb24gb2YgdGhlIGJzZiBpbnN0cnVjdGlvbi4KKyAgICovCisgIGlubGluZSBzaXplX3QgCisgIF9CaXRfc2Nhbl9mb3J3YXJkKHNpemVfdCBfX251bSkKKyAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihfX2J1aWx0aW5fY3R6bChfX251bSkpOyB9CisKKyAgLyoqIEBjbGFzcyAgZnJlZV9saXN0IGJpdG1hcF9hbGxvY2F0b3IuaCBiaXRtYXBfYWxsb2NhdG9yLmgKKyAgICoKKyAgICogIEBicmllZiAgVGhlIGZyZWUgbGlzdCBjbGFzcyBmb3IgbWFuYWdpbmcgY2h1bmtzIG9mIG1lbW9yeSB0byBiZQorICAgKiAgZ2l2ZW4gdG8gYW5kIHJldHVybmVkIGJ5IHRoZSBiaXRtYXBfYWxsb2NhdG9yLgorICAgKi8KKyAgY2xhc3MgZnJlZV9saXN0CisgIHsKKyAgcHVibGljOgorICAgIHR5cGVkZWYgc2l6ZV90KiAJCQkJdmFsdWVfdHlwZTsKKyAgICB0eXBlZGVmIF9fZGV0YWlsOjpfX21pbmlfdmVjdG9yPHZhbHVlX3R5cGU+IHZlY3Rvcl90eXBlOworICAgIHR5cGVkZWYgdmVjdG9yX3R5cGU6Oml0ZXJhdG9yIAkJaXRlcmF0b3I7CisgICAgdHlwZWRlZiBfX211dGV4CQkJCV9fbXV0ZXhfdHlwZTsKKworICBwcml2YXRlOgorICAgIHN0cnVjdCBfTFRfcG9pbnRlcl9jb21wYXJlCisgICAgeworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IoKShjb25zdCBzaXplX3QqIF9fcHVpLCAKKwkJIGNvbnN0IHNpemVfdCBfX2N1aSkgY29uc3QgdGhyb3coKQorICAgICAgeyByZXR1cm4gKl9fcHVpIDwgX19jdWk7IH0KKyAgICB9OworCisjaWYgZGVmaW5lZCBfX0dUSFJFQURTCisgICAgX19tdXRleF90eXBlJgorICAgIF9NX2dldF9tdXRleCgpCisgICAgeworICAgICAgc3RhdGljIF9fbXV0ZXhfdHlwZSBfU19tdXRleDsKKyAgICAgIHJldHVybiBfU19tdXRleDsKKyAgICB9CisjZW5kaWYKKworICAgIHZlY3Rvcl90eXBlJgorICAgIF9NX2dldF9mcmVlX2xpc3QoKQorICAgIHsKKyAgICAgIHN0YXRpYyB2ZWN0b3JfdHlwZSBfU19mcmVlX2xpc3Q7CisgICAgICByZXR1cm4gX1NfZnJlZV9saXN0OworICAgIH0KKworICAgIC8qKiBAYnJpZWYgIFBlcmZvcm1zIHZhbGlkYXRpb24gb2YgbWVtb3J5IGJhc2VkIG9uIHRoZWlyIHNpemUuCisgICAgICoKKyAgICAgKiAgQHBhcmFtICBfX2FkZHIgVGhlIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBibG9jayB0byBiZQorICAgICAqICB2YWxpZGF0ZWQuCisgICAgICoKKyAgICAgKiAgQGRldGFpbCAgVmFsaWRhdGVzIHRoZSBtZW1vcnkgYmxvY2sgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYW5kCisgICAgICogIGFwcHJvcHJpYXRlbHkgcGVyZm9ybXMgdGhlIGFjdGlvbiBvZiBtYW5hZ2luZyB0aGUgZnJlZSBsaXN0IG9mCisgICAgICogIGJsb2NrcyBieSBhZGRpbmcgdGhpcyBibG9jayB0byB0aGUgZnJlZSBsaXN0IG9yIGRlbGV0aW5nIHRoaXMKKyAgICAgKiAgb3IgbGFyZ2VyIGJsb2NrcyBmcm9tIHRoZSBmcmVlIGxpc3QuCisgICAgICovCisgICAgdm9pZAorICAgIF9NX3ZhbGlkYXRlKHNpemVfdCogX19hZGRyKSB0aHJvdygpCisgICAgeworICAgICAgdmVjdG9yX3R5cGUmIF9fZnJlZV9saXN0ID0gX01fZ2V0X2ZyZWVfbGlzdCgpOworICAgICAgY29uc3QgdmVjdG9yX3R5cGU6OnNpemVfdHlwZSBfX21heF9zaXplID0gNjQ7CisgICAgICBpZiAoX19mcmVlX2xpc3Quc2l6ZSgpID49IF9fbWF4X3NpemUpCisJeworCSAgLy8gT2ssIHRoZSB0aHJlc2hvbGQgdmFsdWUgaGFzIGJlZW4gcmVhY2hlZC4gIFdlIGRldGVybWluZQorCSAgLy8gd2hpY2ggYmxvY2sgdG8gcmVtb3ZlIGZyb20gdGhlIGxpc3Qgb2YgZnJlZSBibG9ja3MuCisJICBpZiAoKl9fYWRkciA+PSAqX19mcmVlX2xpc3QuYmFjaygpKQorCSAgICB7CisJICAgICAgLy8gT2ssIHRoZSBuZXcgYmxvY2sgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZQorCSAgICAgIC8vIGxhc3QgYmxvY2sgaW4gdGhlIGxpc3Qgb2YgZnJlZSBibG9ja3MuIFdlIGp1c3QgZnJlZQorCSAgICAgIC8vIHRoZSBuZXcgYmxvY2suCisJICAgICAgOjpvcGVyYXRvciBkZWxldGUoc3RhdGljX2Nhc3Q8dm9pZCo+KF9fYWRkcikpOworCSAgICAgIHJldHVybjsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgLy8gRGVhbGxvY2F0ZSB0aGUgbGFzdCBibG9jayBpbiB0aGUgbGlzdCBvZiBmcmVlIGxpc3RzLAorCSAgICAgIC8vIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmUgaW4gaXRzIGNvcnJlY3QgcG9zaXRpb24uCisJICAgICAgOjpvcGVyYXRvciBkZWxldGUoc3RhdGljX2Nhc3Q8dm9pZCo+KF9fZnJlZV9saXN0LmJhY2soKSkpOworCSAgICAgIF9fZnJlZV9saXN0LnBvcF9iYWNrKCk7CisJICAgIH0KKwl9CisJICAKKyAgICAgIC8vIEp1c3QgYWRkIHRoZSBibG9jayB0byB0aGUgbGlzdCBvZiBmcmVlIGxpc3RzIHVuY29uZGl0aW9uYWxseS4KKyAgICAgIGl0ZXJhdG9yIF9fdGVtcCA9IF9fZGV0YWlsOjpfX2xvd2VyX2JvdW5kCisJKF9fZnJlZV9saXN0LmJlZ2luKCksIF9fZnJlZV9saXN0LmVuZCgpLCAKKwkgKl9fYWRkciwgX0xUX3BvaW50ZXJfY29tcGFyZSgpKTsKKworICAgICAgLy8gV2UgbWF5IGluc2VydCB0aGUgbmV3IGZyZWUgbGlzdCBiZWZvcmUgX3RlbXA7CisgICAgICBfX2ZyZWVfbGlzdC5pbnNlcnQoX190ZW1wLCBfX2FkZHIpOworICAgIH0KKworICAgIC8qKiBAYnJpZWYgIERlY2lkZXMgd2hldGhlciB0aGUgd2FzdGFnZSBvZiBtZW1vcnkgaXMgYWNjZXB0YWJsZSBmb3IKKyAgICAgKiAgdGhlIGN1cnJlbnQgbWVtb3J5IHJlcXVlc3QgYW5kIHJldHVybnMgYWNjb3JkaW5nbHkuCisgICAgICoKKyAgICAgKiAgQHBhcmFtIF9fYmxvY2tfc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgYmxvY2sgYXZhaWxhYmxlIGluIHRoZSBmcmVlCisgICAgICogIGxpc3QuCisgICAgICoKKyAgICAgKiAgQHBhcmFtIF9fcmVxdWlyZWRfc2l6ZSBUaGUgcmVxdWlyZWQgc2l6ZSBvZiB0aGUgbWVtb3J5IGJsb2NrLgorICAgICAqCisgICAgICogIEByZXR1cm4gdHJ1ZSBpZiB0aGUgd2FzdGFnZSBpbmN1cnJlZCBpcyBhY2NlcHRhYmxlLCBlbHNlIHJldHVybnMKKyAgICAgKiAgZmFsc2UuCisgICAgICovCisgICAgYm9vbCAKKyAgICBfTV9zaG91bGRfaV9naXZlKHNpemVfdCBfX2Jsb2NrX3NpemUsIAorCQkgICAgIHNpemVfdCBfX3JlcXVpcmVkX3NpemUpIHRocm93KCkKKyAgICB7CisgICAgICBjb25zdCBzaXplX3QgX19tYXhfd2FzdGFnZV9wZXJjZW50YWdlID0gMzY7CisgICAgICBpZiAoX19ibG9ja19zaXplID49IF9fcmVxdWlyZWRfc2l6ZSAmJiAKKwkgICgoKF9fYmxvY2tfc2l6ZSAtIF9fcmVxdWlyZWRfc2l6ZSkgKiAxMDAgLyBfX2Jsb2NrX3NpemUpCisJICAgPCBfX21heF93YXN0YWdlX3BlcmNlbnRhZ2UpKQorCXJldHVybiB0cnVlOworICAgICAgZWxzZQorCXJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgcHVibGljOgorICAgIC8qKiBAYnJpZWYgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBibG9jayBvZiBtZW1vcnkgdG8gdGhlCisgICAgICogIGludGVybmFsIGZyZWUgbGlzdC4KKyAgICAgKgorICAgICAqICBAcGFyYW0gIF9fYWRkciBUaGUgcG9pbnRlciB0byB0aGUgbWVtb3J5IGJsb2NrIHRoYXQgd2FzIGdpdmVuCisgICAgICogIGJ5IGEgY2FsbCB0byB0aGUgX01fZ2V0IGZ1bmN0aW9uLgorICAgICAqLworICAgIGlubGluZSB2b2lkIAorICAgIF9NX2luc2VydChzaXplX3QqIF9fYWRkcikgdGhyb3coKQorICAgIHsKKyNpZiBkZWZpbmVkIF9fR1RIUkVBRFMKKyAgICAgIF9fc2NvcGVkX2xvY2sgX19iZmxfbG9jayhfTV9nZXRfbXV0ZXgoKSk7CisjZW5kaWYKKyAgICAgIC8vIENhbGwgX01fdmFsaWRhdGUgdG8gZGVjaWRlIHdoYXQgc2hvdWxkIGJlIGRvbmUgd2l0aAorICAgICAgLy8gdGhpcyBwYXJ0aWN1bGFyIGZyZWUgbGlzdC4KKyAgICAgIHRoaXMtPl9NX3ZhbGlkYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Kj4oX19hZGRyKSAtIDEpOworICAgICAgLy8gU2VlIGRpc2N1c3Npb24gYXMgdG8gd2h5IHRoaXMgaXMgMSEKKyAgICB9CisgICAgCisgICAgLyoqIEBicmllZiAgVGhpcyBmdW5jdGlvbiBnZXRzIGEgYmxvY2sgb2YgbWVtb3J5IG9mIHRoZSBzcGVjaWZpZWQKKyAgICAgKiAgc2l6ZSBmcm9tIHRoZSBmcmVlIGxpc3QuCisgICAgICoKKyAgICAgKiAgQHBhcmFtICBfX3N6IFRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBtZW1vcnkgcmVxdWlyZWQuCisgICAgICoKKyAgICAgKiAgQHJldHVybiAgQSBwb2ludGVyIHRvIHRoZSBuZXcgbWVtb3J5IGJsb2NrIG9mIHNpemUgYXQgbGVhc3QKKyAgICAgKiAgZXF1YWwgdG8gdGhhdCByZXF1ZXN0ZWQuCisgICAgICovCisgICAgc2l6ZV90KgorICAgIF9NX2dldChzaXplX3QgX19zeikgdGhyb3coc3RkOjpiYWRfYWxsb2MpOworCisgICAgLyoqIEBicmllZiAgVGhpcyBmdW5jdGlvbiBqdXN0IGNsZWFycyB0aGUgaW50ZXJuYWwgRnJlZSBMaXN0LCBhbmQKKyAgICAgKiAgZ2l2ZXMgYmFjayBhbGwgdGhlIG1lbW9yeSB0byB0aGUgT1MuCisgICAgICovCisgICAgdm9pZCAKKyAgICBfTV9jbGVhcigpOworICB9OworCisKKyAgLy8gRm9yd2FyZCBkZWNsYXJlIHRoZSBjbGFzcy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiAKKyAgICBjbGFzcyBiaXRtYXBfYWxsb2NhdG9yOworCisgIC8vIFNwZWNpYWxpemUgZm9yIHZvaWQ6CisgIHRlbXBsYXRlPD4KKyAgICBjbGFzcyBiaXRtYXBfYWxsb2NhdG9yPHZvaWQ+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdm9pZCogICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKKworICAgICAgLy8gUmVmZXJlbmNlLXRvLXZvaWQgbWVtYmVycyBhcmUgaW1wb3NzaWJsZS4KKyAgICAgIHR5cGVkZWYgdm9pZCAgdmFsdWVfdHlwZTsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIHN0cnVjdCByZWJpbmQKKwl7CisJICB0eXBlZGVmIGJpdG1hcF9hbGxvY2F0b3I8X1RwMT4gb3RoZXI7CisJfTsKKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgQml0bWFwIEFsbG9jYXRvciwgcHJpbWFyeSB0ZW1wbGF0ZS4KKyAgICogQGluZ3JvdXAgYWxsb2NhdG9ycworICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIGJpdG1hcF9hbGxvY2F0b3IgOiBwcml2YXRlIGZyZWVfbGlzdAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHNpemVfdCAgICAJCXNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgcHRyZGlmZl90IAkJZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBfVHAqICAgICAgICAJCXBvaW50ZXI7CisgICAgICB0eXBlZGVmIGNvbnN0IF9UcCogIAkJY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgX1RwJiAgICAgICAgCQlyZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIGNvbnN0IF9UcCYgIAkJY29uc3RfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBfVHAgICAgICAgICAJCXZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIGZyZWVfbGlzdDo6X19tdXRleF90eXBlIAlfX211dGV4X3R5cGU7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIHN0cnVjdCByZWJpbmQKKwl7CisJICB0eXBlZGVmIGJpdG1hcF9hbGxvY2F0b3I8X1RwMT4gb3RoZXI7CisJfTsKKworICAgIHByaXZhdGU6CisgICAgICB0ZW1wbGF0ZTxzaXplX3QgX0JTaXplLCBzaXplX3QgX0FsaWduU2l6ZT4KKyAgICAgICAgc3RydWN0IGFsaWduZWRfc2l6ZQorCXsKKwkgIGVudW0KKwkgICAgeyAKKwkgICAgICBtb2R1bHVzID0gX0JTaXplICUgX0FsaWduU2l6ZSwKKwkgICAgICB2YWx1ZSA9IF9CU2l6ZSArIChtb2R1bHVzID8gX0FsaWduU2l6ZSAtIChtb2R1bHVzKSA6IDApCisJICAgIH07CisJfTsKKworICAgICAgc3RydWN0IF9BbGxvY19ibG9jaworICAgICAgeworCWNoYXIgX19NX3VudXNlZFthbGlnbmVkX3NpemU8c2l6ZW9mKHZhbHVlX3R5cGUpLAorCQkJX0JBTExPQ19BTElHTl9CWVRFUz46OnZhbHVlXTsKKyAgICAgIH07CisKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OnBhaXI8X0FsbG9jX2Jsb2NrKiwgX0FsbG9jX2Jsb2NrKj4gX0Jsb2NrX3BhaXI7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19kZXRhaWw6Ol9fbWluaV92ZWN0b3I8X0Jsb2NrX3BhaXI+IF9CUFZlY3RvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0JQVmVjdG9yOjppdGVyYXRvciBfQlBpdGVyOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgICAgICBzdGF0aWMgX0JQaXRlcgorICAgICAgICBfU19maW5kKF9QcmVkaWNhdGUgX19wKQorICAgICAgICB7CisJICBfQlBpdGVyIF9fZmlyc3QgPSBfU19tZW1fYmxvY2tzLmJlZ2luKCk7CisJICB3aGlsZSAoX19maXJzdCAhPSBfU19tZW1fYmxvY2tzLmVuZCgpICYmICFfX3AoKl9fZmlyc3QpKQorCSAgICArK19fZmlyc3Q7CisJICByZXR1cm4gX19maXJzdDsKKwl9CisKKyNpZiBkZWZpbmVkIF9HTElCQ1hYX0RFQlVHCisgICAgICAvLyBDb21wbGV4aXR5OiBPKGxnKE4pKS4gV2hlcmUsIE4gaXMgdGhlIG51bWJlciBvZiBibG9jayBvZiBzaXplCisgICAgICAvLyBzaXplb2YodmFsdWVfdHlwZSkuCisgICAgICB2b2lkIAorICAgICAgX1NfY2hlY2tfZm9yX2ZyZWVfYmxvY2tzKCkgdGhyb3coKQorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgX19kZXRhaWw6Ol9GZml0X2ZpbmRlcjxfQWxsb2NfYmxvY2sqPiBfRkZGOworCV9CUGl0ZXIgX19icGkgPSBfU19maW5kKF9GRkYoKSk7CisKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoX19icGkgPT0gX1NfbWVtX2Jsb2Nrcy5lbmQoKSk7CisgICAgICB9CisjZW5kaWYKKworICAgICAgLyoqIEBicmllZiAgUmVzcG9uc2libGUgZm9yIGV4cG9uZW50aWFsbHkgZ3Jvd2luZyB0aGUgaW50ZXJuYWwKKyAgICAgICAqICBtZW1vcnkgcG9vbC4KKyAgICAgICAqCisgICAgICAgKiAgQHRocm93ICBzdGQ6OmJhZF9hbGxvYy4gSWYgbWVtb3J5IGNhbiBub3QgYmUgYWxsb2NhdGVkLgorICAgICAgICoKKyAgICAgICAqICBAZGV0YWlsICBDb21wbGV4aXR5OiBPKDEpLCBidXQgaW50ZXJuYWxseSBkZXBlbmRzIHVwb24gdGhlCisgICAgICAgKiAgY29tcGxleGl0eSBvZiB0aGUgZnVuY3Rpb24gZnJlZV9saXN0OjpfTV9nZXQuIFRoZSBwYXJ0IHdoZXJlCisgICAgICAgKiAgdGhlIGJpdG1hcCBoZWFkZXJzIGFyZSB3cml0dGVuIGhhcyBjb21wbGV4aXR5OiBPKFgpLHdoZXJlIFgKKyAgICAgICAqICBpcyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBvZiBzaXplIHNpemVvZih2YWx1ZV90eXBlKSB3aXRoaW4KKyAgICAgICAqICB0aGUgbmV3bHkgYWNxdWlyZWQgYmxvY2suIEhhdmluZyBhIHRpZ2h0IGJvdW5kLgorICAgICAgICovCisgICAgICB2b2lkIAorICAgICAgX1NfcmVmaWxsX3Bvb2woKSB0aHJvdyhzdGQ6OmJhZF9hbGxvYykKKyAgICAgIHsKKyNpZiBkZWZpbmVkIF9HTElCQ1hYX0RFQlVHCisJX1NfY2hlY2tfZm9yX2ZyZWVfYmxvY2tzKCk7CisjZW5kaWYKKworCWNvbnN0IHNpemVfdCBfX251bV9iaXRtYXBzID0gKF9TX2Jsb2NrX3NpemUKKwkJCQkgICAgICAvIHNpemVfdChfX2RldGFpbDo6Yml0c19wZXJfYmxvY2spKTsKKwljb25zdCBzaXplX3QgX19zaXplX3RvX2FsbG9jYXRlID0gc2l6ZW9mKHNpemVfdCkgCisJICArIF9TX2Jsb2NrX3NpemUgKiBzaXplb2YoX0FsbG9jX2Jsb2NrKSAKKwkgICsgX19udW1fYml0bWFwcyAqIHNpemVvZihzaXplX3QpOworCisJc2l6ZV90KiBfX3RlbXAgPQorCSAgcmVpbnRlcnByZXRfY2FzdDxzaXplX3QqPih0aGlzLT5fTV9nZXQoX19zaXplX3RvX2FsbG9jYXRlKSk7CisJKl9fdGVtcCA9IDA7CisJKytfX3RlbXA7CisKKwkvLyBUaGUgSGVhZGVyIGluZm9ybWF0aW9uIGdvZXMgYXQgdGhlIEJlZ2lubmluZyBvZiB0aGUgQmxvY2suCisJX0Jsb2NrX3BhaXIgX19icCA9IAorCSAgc3RkOjptYWtlX3BhaXIocmVpbnRlcnByZXRfY2FzdDxfQWxsb2NfYmxvY2sqPgorCQkJIChfX3RlbXAgKyBfX251bV9iaXRtYXBzKSwgCisJCQkgcmVpbnRlcnByZXRfY2FzdDxfQWxsb2NfYmxvY2sqPgorCQkJIChfX3RlbXAgKyBfX251bV9iaXRtYXBzKSAKKwkJCSArIF9TX2Jsb2NrX3NpemUgLSAxKTsKKwkKKwkvLyBGaWxsIHRoZSBWZWN0b3Igd2l0aCB0aGlzIGluZm9ybWF0aW9uLgorCV9TX21lbV9ibG9ja3MucHVzaF9iYWNrKF9fYnApOworCisJZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19udW1fYml0bWFwczsgKytfX2kpCisJICBfX3RlbXBbX19pXSA9IH5zdGF0aWNfY2FzdDxzaXplX3Q+KDApOyAvLyAxIEluZGljYXRlcyBhbGwgRnJlZS4KKworCV9TX2Jsb2NrX3NpemUgKj0gMjsKKyAgICAgIH0KKworICAgICAgc3RhdGljIF9CUFZlY3RvciBfU19tZW1fYmxvY2tzOworICAgICAgc3RhdGljIHNpemVfdCBfU19ibG9ja19zaXplOworICAgICAgc3RhdGljIF9fZGV0YWlsOjpfQml0bWFwX2NvdW50ZXI8X0FsbG9jX2Jsb2NrKj4gX1NfbGFzdF9yZXF1ZXN0OworICAgICAgc3RhdGljIHR5cGVuYW1lIF9CUFZlY3Rvcjo6c2l6ZV90eXBlIF9TX2xhc3RfZGVhbGxvY19pbmRleDsKKyNpZiBkZWZpbmVkIF9fR1RIUkVBRFMKKyAgICAgIHN0YXRpYyBfX211dGV4X3R5cGUgX1NfbXV0OworI2VuZGlmCisKKyAgICBwdWJsaWM6CisKKyAgICAgIC8qKiBAYnJpZWYgIEFsbG9jYXRlcyBtZW1vcnkgZm9yIGEgc2luZ2xlIG9iamVjdCBvZiBzaXplCisgICAgICAgKiAgc2l6ZW9mKF9UcCkuCisgICAgICAgKgorICAgICAgICogIEB0aHJvdyAgc3RkOjpiYWRfYWxsb2MuIElmIG1lbW9yeSBjYW4gbm90IGJlIGFsbG9jYXRlZC4KKyAgICAgICAqCisgICAgICAgKiAgQGRldGFpbCAgQ29tcGxleGl0eTogV29yc3QgY2FzZSBjb21wbGV4aXR5IGlzIE8oTiksIGJ1dCB0aGF0CisgICAgICAgKiAgaXMgaGFyZGx5IGV2ZXIgaGl0LiBJZiBhbmQgd2hlbiB0aGlzIHBhcnRpY3VsYXIgY2FzZSBpcworICAgICAgICogIGVuY291bnRlcmVkLCB0aGUgbmV4dCBmZXcgY2FzZXMgYXJlIGd1YXJhbnRlZWQgdG8gaGF2ZSBhCisgICAgICAgKiAgd29yc3QgY2FzZSBjb21wbGV4aXR5IG9mIE8oMSkhICBUaGF0J3Mgd2h5IHRoaXMgZnVuY3Rpb24KKyAgICAgICAqICBwZXJmb3JtcyB2ZXJ5IHdlbGwgb24gYXZlcmFnZS4gWW91IGNhbiBjb25zaWRlciB0aGlzCisgICAgICAgKiAgZnVuY3Rpb24gdG8gaGF2ZSBhIGNvbXBsZXhpdHkgcmVmZXJyZWQgdG8gY29tbW9ubHkgYXM6CisgICAgICAgKiAgQW1vcnRpemVkIENvbnN0YW50IHRpbWUuCisgICAgICAgKi8KKyAgICAgIHBvaW50ZXIgCisgICAgICBfTV9hbGxvY2F0ZV9zaW5nbGVfb2JqZWN0KCkgdGhyb3coc3RkOjpiYWRfYWxsb2MpCisgICAgICB7CisjaWYgZGVmaW5lZCBfX0dUSFJFQURTCisJX19zY29wZWRfbG9jayBfX2JpdF9sb2NrKF9TX211dCk7CisjZW5kaWYKKworCS8vIFRoZSBhbGdvcml0aG0gaXMgc29tZXRoaW5nIGxpa2UgdGhpczogVGhlIGxhc3RfcmVxdWVzdAorCS8vIHZhcmlhYmxlIHBvaW50cyB0byB0aGUgbGFzdCBhY2Nlc3NlZCBCaXQgTWFwLiBXaGVuIHN1Y2ggYQorCS8vIGNvbmRpdGlvbiBvY2N1cnMsIHdlIHRyeSB0byBmaW5kIGEgZnJlZSBibG9jayBpbiB0aGUKKwkvLyBjdXJyZW50IGJpdG1hcCwgb3Igc3VjY2VlZGluZyBiaXRtYXBzIHVudGlsIHRoZSBsYXN0IGJpdG1hcAorCS8vIGlzIHJlYWNoZWQuIElmIG5vIGZyZWUgYmxvY2sgdHVybnMgdXAsIHdlIHJlc29ydCB0byBGaXJzdAorCS8vIEZpdCBtZXRob2QuCisKKwkvLyBXQVJOSU5HOiBEbyBub3QgcmUtb3JkZXIgdGhlIGNvbmRpdGlvbiBpbiB0aGUgd2hpbGUKKwkvLyBzdGF0ZW1lbnQgYmVsb3csIGJlY2F1c2UgaXQgcmVsaWVzIG9uIEMrKydzIHNob3J0LWNpcmN1aXQKKwkvLyBldmFsdWF0aW9uLiBUaGUgcmV0dXJuIGZyb20gX1NfbGFzdF9yZXF1ZXN0LT5fTV9nZXQoKSB3aWxsCisJLy8gTk9UIGJlIGRlcmVmZXJlbmNlIGFibGUgaWYgX1NfbGFzdF9yZXF1ZXN0LT5fTV9maW5pc2hlZCgpCisJLy8gcmV0dXJucyB0cnVlLiBUaGlzIHdvdWxkIGluZXZpdGFibHkgbGVhZCB0byBhIE5VTEwgcG9pbnRlcgorCS8vIGRlcmVmZXJlbmNlIGlmIHRpbmtlcmVkIHdpdGguCisJd2hpbGUgKF9TX2xhc3RfcmVxdWVzdC5fTV9maW5pc2hlZCgpID09IGZhbHNlCisJICAgICAgICYmICgqKF9TX2xhc3RfcmVxdWVzdC5fTV9nZXQoKSkgPT0gMCkpCisJICBfU19sYXN0X3JlcXVlc3Qub3BlcmF0b3IrKygpOworCisJaWYgKF9fYnVpbHRpbl9leHBlY3QoX1NfbGFzdF9yZXF1ZXN0Ll9NX2ZpbmlzaGVkKCkgPT0gdHJ1ZSwgZmFsc2UpKQorCSAgeworCSAgICAvLyBGYWxsIEJhY2sgdG8gRmlyc3QgRml0IGFsZ29yaXRobS4KKwkgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2RldGFpbDo6X0ZmaXRfZmluZGVyPF9BbGxvY19ibG9jayo+IF9GRkY7CisJICAgIF9GRkYgX19mZmY7CisJICAgIF9CUGl0ZXIgX19icGkgPSBfU19maW5kKF9fZGV0YWlsOjpfRnVuY3Rvcl9SZWY8X0ZGRj4oX19mZmYpKTsKKworCSAgICBpZiAoX19icGkgIT0gX1NfbWVtX2Jsb2Nrcy5lbmQoKSkKKwkgICAgICB7CisJCS8vIFNlYXJjaCB3YXMgc3VjY2Vzc2Z1bC4gT2ssIG5vdyBtYXJrIHRoZSBmaXJzdCBiaXQgZnJvbQorCQkvLyB0aGUgcmlnaHQgYXMgMCwgbWVhbmluZyBBbGxvY2F0ZWQuIFRoaXMgYml0IGlzIG9idGFpbmVkCisJCS8vIGJ5IGNhbGxpbmcgX01fZ2V0KCkgb24gX19mZmYuCisJCXNpemVfdCBfX256X2JpdCA9IF9CaXRfc2Nhbl9mb3J3YXJkKCpfX2ZmZi5fTV9nZXQoKSk7CisJCV9fZGV0YWlsOjpfX2JpdF9hbGxvY2F0ZShfX2ZmZi5fTV9nZXQoKSwgX19uel9iaXQpOworCisJCV9TX2xhc3RfcmVxdWVzdC5fTV9yZXNldChfX2JwaSAtIF9TX21lbV9ibG9ja3MuYmVnaW4oKSk7CisKKwkJLy8gTm93LCBnZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGJpdCB3ZSBtYXJrZWQgYXMgYWxsb2NhdGVkLgorCQlwb2ludGVyIF9fcmV0ID0gcmVpbnRlcnByZXRfY2FzdDxwb2ludGVyPgorCQkgIChfX2JwaS0+Zmlyc3QgKyBfX2ZmZi5fTV9vZmZzZXQoKSArIF9fbnpfYml0KTsKKwkJc2l6ZV90KiBfX3B1c2VfY291bnQgPSAKKwkJICByZWludGVycHJldF9jYXN0PHNpemVfdCo+CisJCSAgKF9fYnBpLT5maXJzdCkgLSAoX19kZXRhaWw6Ol9fbnVtX2JpdG1hcHMoKl9fYnBpKSArIDEpOworCQkKKwkJKysoKl9fcHVzZV9jb3VudCk7CisJCXJldHVybiBfX3JldDsKKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICB7CisJCS8vIFNlYXJjaCB3YXMgdW5zdWNjZXNzZnVsLiBXZSBBZGQgbW9yZSBtZW1vcnkgdG8gdGhlCisJCS8vIHBvb2wgYnkgY2FsbGluZyBfU19yZWZpbGxfcG9vbCgpLgorCQlfU19yZWZpbGxfcG9vbCgpOworCisJCS8vIF9NX1Jlc2V0IHRoZSBfU19sYXN0X3JlcXVlc3Qgc3RydWN0dXJlIHRvIHRoZSBmaXJzdAorCQkvLyBmcmVlIGJsb2NrJ3MgYml0IG1hcC4KKwkJX1NfbGFzdF9yZXF1ZXN0Ll9NX3Jlc2V0KF9TX21lbV9ibG9ja3Muc2l6ZSgpIC0gMSk7CisKKwkJLy8gTm93LCBtYXJrIHRoYXQgYml0IGFzIGFsbG9jYXRlZC4KKwkgICAgICB9CisJICB9CisKKwkvLyBfU19sYXN0X3JlcXVlc3QgaG9sZHMgYSBwb2ludGVyIHRvIGEgdmFsaWQgYml0IG1hcCwgdGhhdAorCS8vIHBvaW50cyB0byBhIGZyZWUgYmxvY2sgaW4gbWVtb3J5LgorCXNpemVfdCBfX256X2JpdCA9IF9CaXRfc2Nhbl9mb3J3YXJkKCpfU19sYXN0X3JlcXVlc3QuX01fZ2V0KCkpOworCV9fZGV0YWlsOjpfX2JpdF9hbGxvY2F0ZShfU19sYXN0X3JlcXVlc3QuX01fZ2V0KCksIF9fbnpfYml0KTsKKworCXBvaW50ZXIgX19yZXQgPSByZWludGVycHJldF9jYXN0PHBvaW50ZXI+CisJICAoX1NfbGFzdF9yZXF1ZXN0Ll9NX2Jhc2UoKSArIF9TX2xhc3RfcmVxdWVzdC5fTV9vZmZzZXQoKSArIF9fbnpfYml0KTsKKworCXNpemVfdCogX19wdXNlX2NvdW50ID0gcmVpbnRlcnByZXRfY2FzdDxzaXplX3QqPgorCSAgKF9TX21lbV9ibG9ja3NbX1NfbGFzdF9yZXF1ZXN0Ll9NX3doZXJlKCldLmZpcnN0KQorCSAgLSAoX19kZXRhaWw6OgorCSAgICAgX19udW1fYml0bWFwcyhfU19tZW1fYmxvY2tzW19TX2xhc3RfcmVxdWVzdC5fTV93aGVyZSgpXSkgKyAxKTsKKworCSsrKCpfX3B1c2VfY291bnQpOworCXJldHVybiBfX3JldDsKKyAgICAgIH0KKworICAgICAgLyoqIEBicmllZiAgRGVhbGxvY2F0ZXMgbWVtb3J5IHRoYXQgYmVsb25ncyB0byBhIHNpbmdsZSBvYmplY3Qgb2YKKyAgICAgICAqICBzaXplIHNpemVvZihfVHApLgorICAgICAgICoKKyAgICAgICAqICBAZGV0YWlsICBDb21wbGV4aXR5OiBPKGxnKE4pKSwgYnV0IHRoZSB3b3JzdCBjYXNlIGlzIG5vdCBoaXQKKyAgICAgICAqICBvZnRlbiEgIFRoaXMgaXMgYmVjYXVzZSBjb250YWluZXJzIHVzdWFsbHkgZGVhbGxvY2F0ZSBtZW1vcnkKKyAgICAgICAqICBjbG9zZSB0byBlYWNoIG90aGVyIGFuZCB0aGlzIGNhc2UgaXMgaGFuZGxlZCBpbiBPKDEpIHRpbWUgYnkKKyAgICAgICAqICB0aGUgZGVhbGxvY2F0ZSBmdW5jdGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZCAKKyAgICAgIF9NX2RlYWxsb2NhdGVfc2luZ2xlX29iamVjdChwb2ludGVyIF9fcCkgdGhyb3coKQorICAgICAgeworI2lmIGRlZmluZWQgX19HVEhSRUFEUworCV9fc2NvcGVkX2xvY2sgX19iaXRfbG9jayhfU19tdXQpOworI2VuZGlmCisJX0FsbG9jX2Jsb2NrKiBfX3JlYWxfcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8X0FsbG9jX2Jsb2NrKj4oX19wKTsKKworCXR5cGVkZWYgdHlwZW5hbWUgX0JQVmVjdG9yOjppdGVyYXRvciBfSXRlcmF0b3I7CisJdHlwZWRlZiB0eXBlbmFtZSBfQlBWZWN0b3I6OmRpZmZlcmVuY2VfdHlwZSBfRGlmZmVyZW5jZV90eXBlOworCisJX0RpZmZlcmVuY2VfdHlwZSBfX2RpZmY7CisJbG9uZyBfX2Rpc3BsYWNlbWVudDsKKworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChfU19sYXN0X2RlYWxsb2NfaW5kZXggPj0gMCk7CisKKwlfX2RldGFpbDo6X0luY2x1c2l2ZV9iZXR3ZWVuPF9BbGxvY19ibG9jayo+IF9faWJ0KF9fcmVhbF9wKTsKKwlpZiAoX19pYnQoX1NfbWVtX2Jsb2Nrc1tfU19sYXN0X2RlYWxsb2NfaW5kZXhdKSkKKwkgIHsKKwkgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9TX2xhc3RfZGVhbGxvY19pbmRleAorCQkJCSAgPD0gX1NfbWVtX2Jsb2Nrcy5zaXplKCkgLSAxKTsKKworCSAgICAvLyBJbml0aWFsIEFzc3VtcHRpb24gd2FzIGNvcnJlY3QhCisJICAgIF9fZGlmZiA9IF9TX2xhc3RfZGVhbGxvY19pbmRleDsKKwkgICAgX19kaXNwbGFjZW1lbnQgPSBfX3JlYWxfcCAtIF9TX21lbV9ibG9ja3NbX19kaWZmXS5maXJzdDsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIF9JdGVyYXRvciBfaXRlciA9IF9TX2ZpbmQoX19pYnQpOworCisJICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChfaXRlciAhPSBfU19tZW1fYmxvY2tzLmVuZCgpKTsKKworCSAgICBfX2RpZmYgPSBfaXRlciAtIF9TX21lbV9ibG9ja3MuYmVnaW4oKTsKKwkgICAgX19kaXNwbGFjZW1lbnQgPSBfX3JlYWxfcCAtIF9TX21lbV9ibG9ja3NbX19kaWZmXS5maXJzdDsKKwkgICAgX1NfbGFzdF9kZWFsbG9jX2luZGV4ID0gX19kaWZmOworCSAgfQorCisJLy8gR2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgaXRlcmF0b3IgdGhhdCBoYXMgYmVlbiBmb3VuZC4KKwljb25zdCBzaXplX3QgX19yb3RhdGUgPSAoX19kaXNwbGFjZW1lbnQKKwkJCQkgJSBzaXplX3QoX19kZXRhaWw6OmJpdHNfcGVyX2Jsb2NrKSk7CisJc2l6ZV90KiBfX2JpdG1hcEMgPSAKKwkgIHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Kj4KKwkgIChfU19tZW1fYmxvY2tzW19fZGlmZl0uZmlyc3QpIC0gMTsKKwlfX2JpdG1hcEMgLT0gKF9fZGlzcGxhY2VtZW50IC8gc2l6ZV90KF9fZGV0YWlsOjpiaXRzX3Blcl9ibG9jaykpOworICAgICAgCisJX19kZXRhaWw6Ol9fYml0X2ZyZWUoX19iaXRtYXBDLCBfX3JvdGF0ZSk7CisJc2l6ZV90KiBfX3B1c2VfY291bnQgPSByZWludGVycHJldF9jYXN0PHNpemVfdCo+CisJICAoX1NfbWVtX2Jsb2Nrc1tfX2RpZmZdLmZpcnN0KQorCSAgLSAoX19kZXRhaWw6Ol9fbnVtX2JpdG1hcHMoX1NfbWVtX2Jsb2Nrc1tfX2RpZmZdKSArIDEpOworCQorCV9HTElCQ1hYX0RFQlVHX0FTU0VSVCgqX19wdXNlX2NvdW50ICE9IDApOworCisJLS0oKl9fcHVzZV9jb3VudCk7CisKKwlpZiAoX19idWlsdGluX2V4cGVjdCgqX19wdXNlX2NvdW50ID09IDAsIGZhbHNlKSkKKwkgIHsKKwkgICAgX1NfYmxvY2tfc2l6ZSAvPSAyOworCSAgCisJICAgIC8vIFdlIGNhbiBzYWZlbHkgcmVtb3ZlIHRoaXMgYmxvY2suCisJICAgIC8vIF9CbG9ja19wYWlyIF9fYnAgPSBfU19tZW1fYmxvY2tzW19fZGlmZl07CisJICAgIHRoaXMtPl9NX2luc2VydChfX3B1c2VfY291bnQpOworCSAgICBfU19tZW1fYmxvY2tzLmVyYXNlKF9TX21lbV9ibG9ja3MuYmVnaW4oKSArIF9fZGlmZik7CisKKwkgICAgLy8gUmVzZXQgdGhlIF9TX2xhc3RfcmVxdWVzdCB2YXJpYWJsZSB0byByZWZsZWN0IHRoZQorCSAgICAvLyBlcmFzZWQgYmxvY2suIFdlIGRvIHRoaXMgdG8gcHJvdGVjdCBmdXR1cmUgcmVxdWVzdHMKKwkgICAgLy8gYWZ0ZXIgdGhlIGxhc3QgYmxvY2sgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIGEgcGFydGljdWxhcgorCSAgICAvLyBtZW1vcnkgQ2h1bmssIHdoaWNoIGluIHR1cm4gaGFzIGJlZW4gcmV0dXJuZWQgdG8gdGhlCisJICAgIC8vIGZyZWUgbGlzdCwgYW5kIGhlbmNlIGhhZCBiZWVuIGVyYXNlZCBmcm9tIHRoZSB2ZWN0b3IsCisJICAgIC8vIHNvIHRoZSBzaXplIG9mIHRoZSB2ZWN0b3IgZ2V0cyByZWR1Y2VkIGJ5IDEuCisJICAgIGlmICgoX0RpZmZlcmVuY2VfdHlwZSlfU19sYXN0X3JlcXVlc3QuX01fd2hlcmUoKSA+PSBfX2RpZmYtLSkKKwkgICAgICBfU19sYXN0X3JlcXVlc3QuX01fcmVzZXQoX19kaWZmKTsgCisKKwkgICAgLy8gSWYgdGhlIEluZGV4IGludG8gdGhlIHZlY3RvciBvZiB0aGUgcmVnaW9uIG9mIG1lbW9yeQorCSAgICAvLyB0aGF0IG1pZ2h0IGhvbGQgdGhlIG5leHQgYWRkcmVzcyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvCisJICAgIC8vIGRlYWxsb2NhdGVkIG1heSBoYXZlIGJlZW4gaW52YWxpZGF0ZWQgZHVlIHRvIHRoZSBhYm92ZQorCSAgICAvLyBlcmFzZSBwcm9jZWR1cmUgYmVpbmcgY2FsbGVkIG9uIHRoZSB2ZWN0b3IsIGhlbmNlIHdlCisJICAgIC8vIHRyeSB0byByZXN0b3JlIHRoaXMgaW52YXJpYW50IHRvby4KKwkgICAgaWYgKF9TX2xhc3RfZGVhbGxvY19pbmRleCA+PSBfU19tZW1fYmxvY2tzLnNpemUoKSkKKwkgICAgICB7CisJCV9TX2xhc3RfZGVhbGxvY19pbmRleCA9KF9fZGlmZiAhPSAtMSA/IF9fZGlmZiA6IDApOworCQlfR0xJQkNYWF9ERUJVR19BU1NFUlQoX1NfbGFzdF9kZWFsbG9jX2luZGV4ID49IDApOworCSAgICAgIH0KKwkgIH0KKyAgICAgIH0KKworICAgIHB1YmxpYzoKKyAgICAgIGJpdG1hcF9hbGxvY2F0b3IoKSB0aHJvdygpCisgICAgICB7IH0KKworICAgICAgYml0bWFwX2FsbG9jYXRvcihjb25zdCBiaXRtYXBfYWxsb2NhdG9yJikKKyAgICAgIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorICAgICAgICBiaXRtYXBfYWxsb2NhdG9yKGNvbnN0IGJpdG1hcF9hbGxvY2F0b3I8X1RwMT4mKSB0aHJvdygpCisgICAgICAgIHsgfQorCisgICAgICB+Yml0bWFwX2FsbG9jYXRvcigpIHRocm93KCkKKyAgICAgIHsgfQorCisgICAgICBwb2ludGVyIAorICAgICAgYWxsb2NhdGUoc2l6ZV90eXBlIF9fbikKKyAgICAgIHsKKwlpZiAoX19uID4gdGhpcy0+bWF4X3NpemUoKSkKKwkgIHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsKKworCWlmIChfX2J1aWx0aW5fZXhwZWN0KF9fbiA9PSAxLCB0cnVlKSkKKwkgIHJldHVybiB0aGlzLT5fTV9hbGxvY2F0ZV9zaW5nbGVfb2JqZWN0KCk7CisJZWxzZQorCSAgeyAKKwkgICAgY29uc3Qgc2l6ZV90eXBlIF9fYiA9IF9fbiAqIHNpemVvZih2YWx1ZV90eXBlKTsKKwkgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8cG9pbnRlcj4oOjpvcGVyYXRvciBuZXcoX19iKSk7CisJICB9CisgICAgICB9CisKKyAgICAgIHBvaW50ZXIgCisgICAgICBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCB0eXBlbmFtZSBiaXRtYXBfYWxsb2NhdG9yPHZvaWQ+Ojpjb25zdF9wb2ludGVyKQorICAgICAgeyByZXR1cm4gYWxsb2NhdGUoX19uKTsgfQorCisgICAgICB2b2lkIAorICAgICAgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikgdGhyb3coKQorICAgICAgeworCWlmIChfX2J1aWx0aW5fZXhwZWN0KF9fcCAhPSAwLCB0cnVlKSkKKwkgIHsKKwkgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19uID09IDEsIHRydWUpKQorCSAgICAgIHRoaXMtPl9NX2RlYWxsb2NhdGVfc2luZ2xlX29iamVjdChfX3ApOworCSAgICBlbHNlCisJICAgICAgOjpvcGVyYXRvciBkZWxldGUoX19wKTsKKwkgIH0KKyAgICAgIH0KKworICAgICAgcG9pbnRlciAKKyAgICAgIGFkZHJlc3MocmVmZXJlbmNlIF9fcikgY29uc3QKKyAgICAgIHsgcmV0dXJuICZfX3I7IH0KKworICAgICAgY29uc3RfcG9pbnRlciAKKyAgICAgIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9fcikgY29uc3QKKyAgICAgIHsgcmV0dXJuICZfX3I7IH0KKworICAgICAgc2l6ZV90eXBlIAorICAgICAgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpCisgICAgICB7IHJldHVybiBzaXplX3R5cGUoLTEpIC8gc2l6ZW9mKHZhbHVlX3R5cGUpOyB9CisKKyAgICAgIHZvaWQgCisgICAgICBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0X3JlZmVyZW5jZSBfX2RhdGEpCisgICAgICB7IDo6bmV3KCh2b2lkICopX19wKSB2YWx1ZV90eXBlKF9fZGF0YSk7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgdm9pZAorICAgICAgICBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIF9BcmdzJiYuLi4gX19hcmdzKQorCXsgOjpuZXcoKHZvaWQgKilfX3ApIF9UcChzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOyB9CisjZW5kaWYKKworICAgICAgdm9pZCAKKyAgICAgIGRlc3Ryb3kocG9pbnRlciBfX3ApCisgICAgICB7IF9fcC0+fnZhbHVlX3R5cGUoKTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1RwMj4KKyAgICBib29sIAorICAgIG9wZXJhdG9yPT0oY29uc3QgYml0bWFwX2FsbG9jYXRvcjxfVHAxPiYsIAorCSAgICAgICBjb25zdCBiaXRtYXBfYWxsb2NhdG9yPF9UcDI+JikgdGhyb3coKQorICAgIHsgcmV0dXJuIHRydWU7IH0KKyAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9UcDI+CisgICAgYm9vbCAKKyAgICBvcGVyYXRvciE9KGNvbnN0IGJpdG1hcF9hbGxvY2F0b3I8X1RwMT4mLCAKKwkgICAgICAgY29uc3QgYml0bWFwX2FsbG9jYXRvcjxfVHAyPiYpIHRocm93KCkgCisgIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgLy8gU3RhdGljIG1lbWJlciBkZWZpbml0aW9ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHR5cGVuYW1lIGJpdG1hcF9hbGxvY2F0b3I8X1RwPjo6X0JQVmVjdG9yCisgICAgYml0bWFwX2FsbG9jYXRvcjxfVHA+OjpfU19tZW1fYmxvY2tzOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzaXplX3QgYml0bWFwX2FsbG9jYXRvcjxfVHA+OjpfU19ibG9ja19zaXplID0gCisgICAgMiAqIHNpemVfdChfX2RldGFpbDo6Yml0c19wZXJfYmxvY2spOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICB0eXBlbmFtZSBiaXRtYXBfYWxsb2NhdG9yPF9UcD46Ol9CUFZlY3Rvcjo6c2l6ZV90eXBlIAorICAgIGJpdG1hcF9hbGxvY2F0b3I8X1RwPjo6X1NfbGFzdF9kZWFsbG9jX2luZGV4ID0gMDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX19kZXRhaWw6Ol9CaXRtYXBfY291bnRlcgorICAgICAgPHR5cGVuYW1lIGJpdG1hcF9hbGxvY2F0b3I8X1RwPjo6X0FsbG9jX2Jsb2NrKj4KKyAgICBiaXRtYXBfYWxsb2NhdG9yPF9UcD46Ol9TX2xhc3RfcmVxdWVzdChfU19tZW1fYmxvY2tzKTsKKworI2lmIGRlZmluZWQgX19HVEhSRUFEUworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgdHlwZW5hbWUgYml0bWFwX2FsbG9jYXRvcjxfVHA+OjpfX211dGV4X3R5cGUKKyAgICBiaXRtYXBfYWxsb2NhdG9yPF9UcD46Ol9TX211dDsKKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZiAKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvY2FzdC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvY2FzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZDhjYzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9jYXN0LmgKQEAgLTAsMCArMSwxMTMgQEAKKy8vIDxjYXN0Lmg+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjaWZuZGVmIF9DQVNUX0gKKyNkZWZpbmUgX0NBU1RfSCAxCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisKKyAgLyoqCisgICAqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgaGVyZSB0byBhbGxvdyBjb250YWluZXJzIHRvIHN1cHBvcnQgbm9uIHN0YW5kYXJkCisgICAqIHBvaW50ZXIgdHlwZXMuICBGb3Igbm9ybWFsIHBvaW50ZXJzLCB0aGVzZSByZXNvbHZlIHRvIHRoZSB1c2Ugb2YgdGhlCisgICAqIHN0YW5kYXJkIGNhc3Qgb3BlcmF0aW9uLiAgRm9yIG90aGVyIHR5cGVzIHRoZSBmdW5jdGlvbnMgd2lsbCBwZXJmb3JtCisgICAqIHRoZSBhcHBycHJpYXRlIGNhc3QgdG8vZnJvbSB0aGUgY3VzdG9tIHBvaW50ZXIgY2xhc3Mgc28gbG9uZyBhcyB0aGF0CisgICAqIGNsYXNzIG1lZXRzIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAgICogMSkgaGFzIGEgdHlwZWRlZiBlbGVtZW50X3R5cGUgd2hpY2ggbmFtZXMgdGVoZSB0eXBlIGl0IHBvaW50cyB0by4KKyAgICogMikgaGFzIGEgZ2V0KCkgY29uc3QgbWV0aG9kIHdoaWNoIHJldHVybnMgZWxlbWVudF90eXBlKi4KKyAgICogMykgaGFzIGEgY29uc3RydWN0b3Igd2hpY2ggY2FuIHRha2Ugb25lIGVsZW1lbnRfdHlwZSogYXJndW1lbnQuCisgICAqLworCisgIC8qKgorICAgKiBUaGlzIHR5cGUgc3VwcG9ydHMgdGhlIHNlbWFudGljcyBvZiB0aGUgcG9pbnRlciBjYXN0IG9wZXJhdG9ycyAoYmVsb3cuKQorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RvVHlwZT4KKyAgICBzdHJ1Y3QgX0Nhc3RlcgorICAgIHsgdHlwZWRlZiB0eXBlbmFtZSBfVG9UeXBlOjplbGVtZW50X3R5cGUqICB0eXBlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Ub1R5cGU+CisgICAgc3RydWN0IF9DYXN0ZXI8X1RvVHlwZSo+CisgICAgeyB0eXBlZGVmIF9Ub1R5cGUqICB0eXBlOyB9OworCisgIC8qKgorICAgKiBDYXN0aW5nIG9wZXJhdGlvbnMgZm9yIGNhc2VzIHdoZXJlIF9Gcm9tVHlwZSBpcyBub3QgYSBzdGFuZGFyZCBwb2ludGVyLgorICAgKiBfVG9UeXBlIGNhbiBiZSBhIHN0YW5kYXJkIG9yIG5vbi1zdGFuZGFyZCBwb2ludGVyLiAgR2l2ZW4gdGhhdCBfRnJvbVR5cGUKKyAgICogaXMgbm90IGEgcG9pbnRlciwgaXQgbXVzdCBoYXZlIGEgZ2V0KCkgbWV0aG9kIHRoYXQgcmV0dXJucyB0aGUgc3RhbmRhcmQKKyAgICogcG9pbnRlciBlcXVpdmFsZW50IG9mIHRoZSBhZGRyZXNzIGl0IHBvaW50cyB0bywgYW5kIG11c3QgaGF2ZSBhbgorICAgKiBlbGVtZW50X3R5cGUgdHlwZWRlZiB3aGljaCBuYW1lcyB0aGUgdHlwZSBpdCBwb2ludHMgdG8uCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVG9UeXBlLCB0eXBlbmFtZSBfRnJvbVR5cGU+CisgICAgaW5saW5lIF9Ub1R5cGUKKyAgICBfX3N0YXRpY19wb2ludGVyX2Nhc3QoY29uc3QgX0Zyb21UeXBlJiBfX2FyZykKKyAgICB7IHJldHVybiBfVG9UeXBlKHN0YXRpY19jYXN0PHR5cGVuYW1lIF9DYXN0ZXI8X1RvVHlwZT46OgorCQkgICAgIHR5cGU+KF9fYXJnLmdldCgpKSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVG9UeXBlLCB0eXBlbmFtZSBfRnJvbVR5cGU+CisgICAgaW5saW5lIF9Ub1R5cGUKKyAgICBfX2R5bmFtaWNfcG9pbnRlcl9jYXN0KGNvbnN0IF9Gcm9tVHlwZSYgX19hcmcpCisgICAgeyByZXR1cm4gX1RvVHlwZShkeW5hbWljX2Nhc3Q8dHlwZW5hbWUgX0Nhc3RlcjxfVG9UeXBlPjo6CisJCSAgICAgdHlwZT4oX19hcmcuZ2V0KCkpKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Ub1R5cGUsIHR5cGVuYW1lIF9Gcm9tVHlwZT4KKyAgICBpbmxpbmUgX1RvVHlwZQorICAgIF9fY29uc3RfcG9pbnRlcl9jYXN0KGNvbnN0IF9Gcm9tVHlwZSYgX19hcmcpCisgICAgeyByZXR1cm4gX1RvVHlwZShjb25zdF9jYXN0PHR5cGVuYW1lIF9DYXN0ZXI8X1RvVHlwZT46OgorCQkgICAgIHR5cGU+KF9fYXJnLmdldCgpKSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVG9UeXBlLCB0eXBlbmFtZSBfRnJvbVR5cGU+CisgICAgaW5saW5lIF9Ub1R5cGUKKyAgICBfX3JlaW50ZXJwcmV0X3BvaW50ZXJfY2FzdChjb25zdCBfRnJvbVR5cGUmIF9fYXJnKQorICAgIHsgcmV0dXJuIF9Ub1R5cGUocmVpbnRlcnByZXRfY2FzdDx0eXBlbmFtZSBfQ2FzdGVyPF9Ub1R5cGU+OjoKKwkJICAgICB0eXBlPihfX2FyZy5nZXQoKSkpOyB9CisKKyAgLyoqCisgICAqIENhc3Rpbmcgb3BlcmF0aW9ucyBmb3IgY2FzZXMgd2hlcmUgX0Zyb21UeXBlIGlzIGEgc3RhbmRhcmQgcG9pbnRlci4KKyAgICogX1RvVHlwZSBjYW4gYmUgYSBzdGFuZGFyZCBvciBub24tc3RhbmRhcmQgcG9pbnRlci4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Ub1R5cGUsIHR5cGVuYW1lIF9Gcm9tVHlwZT4KKyAgICBpbmxpbmUgX1RvVHlwZQorICAgIF9fc3RhdGljX3BvaW50ZXJfY2FzdChfRnJvbVR5cGUqIF9fYXJnKQorICAgIHsgcmV0dXJuIF9Ub1R5cGUoc3RhdGljX2Nhc3Q8dHlwZW5hbWUgX0Nhc3RlcjxfVG9UeXBlPjo6CisJCSAgICAgdHlwZT4oX19hcmcpKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Ub1R5cGUsIHR5cGVuYW1lIF9Gcm9tVHlwZT4KKyAgICBpbmxpbmUgX1RvVHlwZQorICAgIF9fZHluYW1pY19wb2ludGVyX2Nhc3QoX0Zyb21UeXBlKiBfX2FyZykKKyAgICB7IHJldHVybiBfVG9UeXBlKGR5bmFtaWNfY2FzdDx0eXBlbmFtZSBfQ2FzdGVyPF9Ub1R5cGU+OjoKKwkJICAgICB0eXBlPihfX2FyZykpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RvVHlwZSwgdHlwZW5hbWUgX0Zyb21UeXBlPgorICAgIGlubGluZSBfVG9UeXBlCisgICAgX19jb25zdF9wb2ludGVyX2Nhc3QoX0Zyb21UeXBlKiBfX2FyZykKKyAgICB7IHJldHVybiBfVG9UeXBlKGNvbnN0X2Nhc3Q8dHlwZW5hbWUgX0Nhc3RlcjxfVG9UeXBlPjo6CisJCSAgICAgdHlwZT4oX19hcmcpKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Ub1R5cGUsIHR5cGVuYW1lIF9Gcm9tVHlwZT4KKyAgICBpbmxpbmUgX1RvVHlwZQorICAgIF9fcmVpbnRlcnByZXRfcG9pbnRlcl9jYXN0KF9Gcm9tVHlwZSogX19hcmcpCisgICAgeyByZXR1cm4gX1RvVHlwZShyZWludGVycHJldF9jYXN0PHR5cGVuYW1lIF9DYXN0ZXI8X1RvVHlwZT46OgorCQkgICAgIHR5cGU+KF9fYXJnKSk7IH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYgLy8gX0NBU1RfSApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvY29kZWN2dF9zcGVjaWFsaXphdGlvbnMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L2NvZGVjdnRfc3BlY2lhbGl6YXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlhZGIzZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L2NvZGVjdnRfc3BlY2lhbGl6YXRpb25zLmgKQEAgLTAsMCArMSw1MDcgQEAKKy8vIExvY2FsZSBzdXBwb3J0IChjb2RlY3Z0KSAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDkKKy8vICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjIuMi4xLjUgVGVtcGxhdGUgY2xhc3MgY29kZWN2dAorLy8KKworLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKworLyoqIEBmaWxlIGV4dC9jb2RlY3Z0X3NwZWNpYWxpemF0aW9ucy5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfRVhUX0NPREVDVlRfU1BFQ0lBTElaQVRJT05TX0gKKyNkZWZpbmUgX0VYVF9DT0RFQ1ZUX1NQRUNJQUxJWkFUSU9OU19IIDEKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8bG9jYWxlPgorI2luY2x1ZGUgPGljb252Lmg+CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisKKyAgLy8vIEV4dGVuc2lvbiB0byB1c2UgaWNvbnYgZm9yIGRlYWxpbmcgd2l0aCBjaGFyYWN0ZXIgZW5jb2RpbmdzLgorICAvLyBUaGlzIGluY2x1ZGVzIGNvbnZlcnNpb25zIGFuZCBjb21wYXJpc29ucyBiZXR3ZWVuIHZhcmlvdXMgY2hhcmFjdGVyCisgIC8vIHNldHMuICBUaGlzIG9iamVjdCBlbmNhcHN1bGF0ZXMgZGF0YSB0aGF0IG1heSBuZWVkIHRvIGJlIHNoYXJlZCBiZXR3ZWVuCisgIC8vIGNoYXJfdHJhaXRzLCBjb2RlY3Z0IGFuZCBjdHlwZS4KKyAgY2xhc3MgZW5jb2Rpbmdfc3RhdGUKKyAgeworICBwdWJsaWM6CisgICAgLy8gVHlwZXM6IAorICAgIC8vIE5COiBBIGNvbnZlcnNpb24gZGVzY3JpcHRvciBzdWJzdW1lcyBhbmQgZW5oYW5jZXMgdGhlCisgICAgLy8gZnVuY3Rpb25hbGl0eSBvZiBhIHNpbXBsZSBzdGF0ZSB0eXBlIHN1Y2ggYXMgbWJzdGF0ZV90LgorICAgIHR5cGVkZWYgaWNvbnZfdAlkZXNjcmlwdG9yX3R5cGU7CisgICAgCisgIHByb3RlY3RlZDoKKyAgICAvLyBOYW1lIG9mIGludGVybmFsIGNoYXJhY3RlciBzZXQgZW5jb2RpbmcuCisgICAgc3RkOjpzdHJpbmcJICAgICAgIAlfTV9pbnRfZW5jOworCisgICAgLy8gTmFtZSBvZiBleHRlcm5hbCBjaGFyYWN0ZXIgc2V0IGVuY29kaW5nLgorICAgIHN0ZDo6c3RyaW5nICAJX01fZXh0X2VuYzsKKworICAgIC8vIENvbnZlcnNpb24gZGVzY3JpcHRvciBiZXR3ZWVuIGV4dGVybmFsIGVuY29kaW5nIHRvIGludGVybmFsIGVuY29kaW5nLgorICAgIGRlc2NyaXB0b3JfdHlwZQlfTV9pbl9kZXNjOworCisgICAgLy8gQ29udmVyc2lvbiBkZXNjcmlwdG9yIGJldHdlZW4gaW50ZXJuYWwgZW5jb2RpbmcgdG8gZXh0ZXJuYWwgZW5jb2RpbmcuCisgICAgZGVzY3JpcHRvcl90eXBlCV9NX291dF9kZXNjOworCisgICAgLy8gVGhlIGJ5dGUtb3JkZXIgbWFya2VyIGZvciB0aGUgZXh0ZXJuYWwgZW5jb2RpbmcsIGlmIG5lY2Vzc2FyeS4KKyAgICBpbnQJCQlfTV9leHRfYm9tOworCisgICAgLy8gVGhlIGJ5dGUtb3JkZXIgbWFya2VyIGZvciB0aGUgaW50ZXJuYWwgZW5jb2RpbmcsIGlmIG5lY2Vzc2FyeS4KKyAgICBpbnQJCQlfTV9pbnRfYm9tOworCisgICAgLy8gTnVtYmVyIG9mIGV4dGVybmFsIGJ5dGVzIG5lZWRlZCB0byBjb25zdHJ1Y3Qgb25lIGNvbXBsZXRlCisgICAgLy8gY2hhcmFjdGVyIGluIHRoZSBpbnRlcm5hbCBlbmNvZGluZy4KKyAgICAvLyBOQjogLTEgaW5kaWNhdGVzIHZhcmlhYmxlLCBvciBzdGF0ZWZ1bCwgZW5jb2RpbmdzLgorICAgIGludCAJCV9NX2J5dGVzOworCisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCAKKyAgICBlbmNvZGluZ19zdGF0ZSgpIAorICAgIDogX01faW5fZGVzYygwKSwgX01fb3V0X2Rlc2MoMCksIF9NX2V4dF9ib20oMCksIF9NX2ludF9ib20oMCksIF9NX2J5dGVzKDApCisgICAgeyB9CisKKyAgICBleHBsaWNpdCAKKyAgICBlbmNvZGluZ19zdGF0ZShjb25zdCBjaGFyKiBfX2ludCwgY29uc3QgY2hhciogX19leHQsIAorCQkgICBpbnQgX19pYm9tID0gMCwgaW50IF9fZWJvbSA9IDAsIGludCBfX2J5dGVzID0gMSkKKyAgICA6IF9NX2ludF9lbmMoX19pbnQpLCBfTV9leHRfZW5jKF9fZXh0KSwgX01faW5fZGVzYygwKSwgX01fb3V0X2Rlc2MoMCksIAorICAgICAgX01fZXh0X2JvbShfX2Vib20pLCBfTV9pbnRfYm9tKF9faWJvbSksIF9NX2J5dGVzKF9fYnl0ZXMpCisgICAgeyBpbml0KCk7IH0KKworICAgIC8vIDIxLjEuMiB0cmFpdHMgdHlwZWRlZnMKKyAgICAvLyBwNAorICAgIC8vIHR5cGVkZWYgU1RBVEVfVCBzdGF0ZV90eXBlCisgICAgLy8gcmVxdWlyZXM6IHN0YXRlX3R5cGUgc2hhbGwgbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mCisgICAgLy8gQ29weUNvbnN0cnVjdGlibGUgdHlwZXMgKDIwLjEuMykKKyAgICAvLyBOQjogVGhpcyBkb2VzIG5vdCBwcmVzZXJ2ZSB0aGUgYWN0dWFsIHN0YXRlIG9mIHRoZSBjb252ZXJzaW9uCisgICAgLy8gZGVzY3JpcHRvciBtZW1iZXIsIGJ1dCBpdCBkb2VzIGR1cGxpY2F0ZSB0aGUgZW5jb2RpbmcKKyAgICAvLyBpbmZvcm1hdGlvbi4KKyAgICBlbmNvZGluZ19zdGF0ZShjb25zdCBlbmNvZGluZ19zdGF0ZSYgX19vYmopIDogX01faW5fZGVzYygwKSwgX01fb3V0X2Rlc2MoMCkKKyAgICB7IGNvbnN0cnVjdChfX29iaik7IH0KKworICAgIC8vIE5lZWQgYXNzaWdubWVudCBvcGVyYXRvciBhcyB3ZWxsLgorICAgIGVuY29kaW5nX3N0YXRlJgorICAgIG9wZXJhdG9yPShjb25zdCBlbmNvZGluZ19zdGF0ZSYgX19vYmopCisgICAgeworICAgICAgY29uc3RydWN0KF9fb2JqKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICB+ZW5jb2Rpbmdfc3RhdGUoKQorICAgIHsgZGVzdHJveSgpOyB9IAorCisgICAgYm9vbAorICAgIGdvb2QoKSBjb25zdCB0aHJvdygpCisgICAgeyAKKyAgICAgIGNvbnN0IGRlc2NyaXB0b3JfdHlwZSBfX2VyciA9IChpY29udl90KSgtMSk7CisgICAgICBib29sIF9fdGVzdCA9IF9NX2luX2Rlc2MgJiYgX01faW5fZGVzYyAhPSBfX2VycjsgCisgICAgICBfX3Rlc3QgJj0gIF9NX291dF9kZXNjICYmIF9NX291dF9kZXNjICE9IF9fZXJyOworICAgICAgcmV0dXJuIF9fdGVzdDsKKyAgICB9CisgICAgCisgICAgaW50CisgICAgY2hhcmFjdGVyX3JhdGlvKCkgY29uc3QKKyAgICB7IHJldHVybiBfTV9ieXRlczsgfQorCisgICAgY29uc3Qgc3RkOjpzdHJpbmcKKyAgICBpbnRlcm5hbF9lbmNvZGluZygpIGNvbnN0CisgICAgeyByZXR1cm4gX01faW50X2VuYzsgfQorCisgICAgaW50IAorICAgIGludGVybmFsX2JvbSgpIGNvbnN0CisgICAgeyByZXR1cm4gX01faW50X2JvbTsgfQorCisgICAgY29uc3Qgc3RkOjpzdHJpbmcKKyAgICBleHRlcm5hbF9lbmNvZGluZygpIGNvbnN0CisgICAgeyByZXR1cm4gX01fZXh0X2VuYzsgfQorCisgICAgaW50IAorICAgIGV4dGVybmFsX2JvbSgpIGNvbnN0CisgICAgeyByZXR1cm4gX01fZXh0X2JvbTsgfQorCisgICAgY29uc3QgZGVzY3JpcHRvcl90eXBlJgorICAgIGluX2Rlc2NyaXB0b3IoKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX2luX2Rlc2M7IH0KKworICAgIGNvbnN0IGRlc2NyaXB0b3JfdHlwZSYKKyAgICBvdXRfZGVzY3JpcHRvcigpIGNvbnN0CisgICAgeyByZXR1cm4gX01fb3V0X2Rlc2M7IH0KKworICBwcm90ZWN0ZWQ6CisgICAgdm9pZAorICAgIGluaXQoKQorICAgIHsKKyAgICAgIGNvbnN0IGRlc2NyaXB0b3JfdHlwZSBfX2VyciA9IChpY29udl90KSgtMSk7CisgICAgICBjb25zdCBib29sIF9faGF2ZV9lbmNvZGluZ3MgPSBfTV9pbnRfZW5jLnNpemUoKSAmJiBfTV9leHRfZW5jLnNpemUoKTsKKyAgICAgIGlmICghX01faW5fZGVzYyAmJiBfX2hhdmVfZW5jb2RpbmdzKQorCXsKKwkgIF9NX2luX2Rlc2MgPSBpY29udl9vcGVuKF9NX2ludF9lbmMuY19zdHIoKSwgX01fZXh0X2VuYy5jX3N0cigpKTsKKwkgIGlmIChfTV9pbl9kZXNjID09IF9fZXJyKQorCSAgICBzdGQ6Ol9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oImVuY29kaW5nX3N0YXRlOjpfTV9pbml0ICIKKwkJCQkgICAgImNyZWF0aW5nIGljb252IGlucHV0IGRlc2NyaXB0b3IgZmFpbGVkIikpOworCX0KKyAgICAgIGlmICghX01fb3V0X2Rlc2MgJiYgX19oYXZlX2VuY29kaW5ncykKKwl7CisJICBfTV9vdXRfZGVzYyA9IGljb252X29wZW4oX01fZXh0X2VuYy5jX3N0cigpLCBfTV9pbnRfZW5jLmNfc3RyKCkpOworCSAgaWYgKF9NX291dF9kZXNjID09IF9fZXJyKQorCSAgICBzdGQ6Ol9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oImVuY29kaW5nX3N0YXRlOjpfTV9pbml0ICIKKwkJCQkgICJjcmVhdGluZyBpY29udiBvdXRwdXQgZGVzY3JpcHRvciBmYWlsZWQiKSk7CisJfQorICAgIH0KKworICAgIHZvaWQKKyAgICBjb25zdHJ1Y3QoY29uc3QgZW5jb2Rpbmdfc3RhdGUmIF9fb2JqKQorICAgIHsKKyAgICAgIGRlc3Ryb3koKTsKKyAgICAgIF9NX2ludF9lbmMgPSBfX29iai5fTV9pbnRfZW5jOworICAgICAgX01fZXh0X2VuYyA9IF9fb2JqLl9NX2V4dF9lbmM7CisgICAgICBfTV9leHRfYm9tID0gX19vYmouX01fZXh0X2JvbTsKKyAgICAgIF9NX2ludF9ib20gPSBfX29iai5fTV9pbnRfYm9tOworICAgICAgX01fYnl0ZXMgPSBfX29iai5fTV9ieXRlczsKKyAgICAgIGluaXQoKTsKKyAgICB9CisKKyAgICB2b2lkCisgICAgZGVzdHJveSgpIHRocm93KCkKKyAgICB7CisgICAgICBjb25zdCBkZXNjcmlwdG9yX3R5cGUgX19lcnIgPSAoaWNvbnZfdCkoLTEpOworICAgICAgaWYgKF9NX2luX2Rlc2MgJiYgX01faW5fZGVzYyAhPSBfX2VycikgCisJeworCSAgaWNvbnZfY2xvc2UoX01faW5fZGVzYyk7CisJICBfTV9pbl9kZXNjID0gMDsKKwl9CisgICAgICBpZiAoX01fb3V0X2Rlc2MgJiYgX01fb3V0X2Rlc2MgIT0gX19lcnIpIAorCXsKKwkgIGljb252X2Nsb3NlKF9NX291dF9kZXNjKTsKKwkgIF9NX291dF9kZXNjID0gMDsKKwl9CisgICAgfQorICB9OworCisgIC8vLyBlbmNvZGluZ19jaGFyX3RyYWl0cworICAvLyBDdXN0b20gdHJhaXRzIHR5cGUgd2l0aCBlbmNvZGluZ19zdGF0ZSBmb3IgdGhlIHN0YXRlIHR5cGUsIGFuZCB0aGUKKyAgLy8gYXNzb2NpYXRlZCBmcG9zPGVuY29kaW5nX3N0YXRlPiBmb3IgdGhlIHBvc2l0aW9uIHR5cGUsIGFsbCBvdGhlcgorICAvLyBiaXRzIGVxdWl2YWxlbnQgdG8gdGhlIHJlcXVpcmVkIGNoYXJfdHJhaXRzIGluc3RhbnRpYXRpb25zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgc3RydWN0IGVuY29kaW5nX2NoYXJfdHJhaXRzIDogcHVibGljIHN0ZDo6Y2hhcl90cmFpdHM8X0NoYXJUPgorICAgIHsKKyAgICAgIHR5cGVkZWYgZW5jb2Rpbmdfc3RhdGUJCQkJc3RhdGVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpmcG9zPHN0YXRlX3R5cGU+CQlwb3NfdHlwZTsKKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICB1c2luZyBfX2dudV9jeHg6OmVuY29kaW5nX3N0YXRlOworCisgIC8vLyBjb2RlY3Z0PEludGVyblQsIF9FeHRlcm5ULCBlbmNvZGluZ19zdGF0ZT4gc3BlY2lhbGl6YXRpb24uCisgIC8vIFRoaXMgcGFydGlhbCBzcGVjaWFsaXphdGlvbiB0YWtlcyBhZHZhbnRhZ2Ugb2YgaWNvbnYgdG8gcHJvdmlkZQorICAvLyBjb2RlIGNvbnZlcnNpb25zIGJldHdlZW4gYSBsYXJnZSBudW1iZXIgb2YgY2hhcmFjdGVyIGVuY29kaW5ncy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgorICAgIGNsYXNzIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBlbmNvZGluZ19zdGF0ZT4KKyAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJuVCwgX0V4dGVyblQsIGVuY29kaW5nX3N0YXRlPgorICAgIHsKKyAgICBwdWJsaWM6ICAgICAgCisgICAgICAvLyBUeXBlczoKKyAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQJCQlyZXN1bHQ7CisgICAgICB0eXBlZGVmIF9JbnRlcm5UIAkJCQkJaW50ZXJuX3R5cGU7CisgICAgICB0eXBlZGVmIF9FeHRlcm5UIAkJCQkJZXh0ZXJuX3R5cGU7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6ZW5jb2Rpbmdfc3RhdGUgCQlzdGF0ZV90eXBlOworICAgICAgdHlwZWRlZiBzdGF0ZV90eXBlOjpkZXNjcmlwdG9yX3R5cGUgCQlkZXNjcmlwdG9yX3R5cGU7CisKKyAgICAgIC8vIERhdGEgTWVtYmVyczoKKyAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIAkJaWQ7CisKKyAgICAgIGV4cGxpY2l0IAorICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCkKKyAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8aW50ZXJuX3R5cGUsIGV4dGVybl90eXBlLCBzdGF0ZV90eXBlPihfX3JlZnMpCisgICAgICB7IH0KKworICAgICAgZXhwbGljaXQgCisgICAgICBjb2RlY3Z0KHN0YXRlX3R5cGUmIF9fZW5jLCBzaXplX3QgX19yZWZzID0gMCkKKyAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8aW50ZXJuX3R5cGUsIGV4dGVybl90eXBlLCBzdGF0ZV90eXBlPihfX3JlZnMpCisgICAgICB7IH0KKworICAgICBwcm90ZWN0ZWQ6CisgICAgICB2aXJ0dWFsIAorICAgICAgfmNvZGVjdnQoKSB7IH0KKworICAgICAgdmlydHVhbCByZXN1bHQKKyAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLCAKKwkgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorCSAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKKwkgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKKworICAgICAgdmlydHVhbCByZXN1bHQKKyAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sIAorCQkgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CisKKyAgICAgIHZpcnR1YWwgcmVzdWx0CisgICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLCAKKwkgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCisJICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsIAorCSAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CisKKyAgICAgIHZpcnR1YWwgaW50IAorICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOworCisgICAgICB2aXJ0dWFsIGJvb2wgCisgICAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKKworICAgICAgdmlydHVhbCBpbnQgCisgICAgICBkb19sZW5ndGgoc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sIAorCQljb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7CisKKyAgICAgIHZpcnR1YWwgaW50IAorICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CisgICAgbG9jYWxlOjppZCAKKyAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgZW5jb2Rpbmdfc3RhdGU+OjppZDsKKworICAvLyBUaGlzIGFkYXB0b3Igd29ya3MgYXJvdW5kIHRoZSBzaWduYXR1cmUgcHJvYmxlbXMgb2YgdGhlIHNlY29uZAorICAvLyBhcmd1bWVudCB0byBpY29udigpOiAgU1VTdjIgYW5kIG90aGVycyB1c2UgJ2NvbnN0IGNoYXIqKicsIGJ1dCBnbGliYyAyLjIKKyAgLy8gdXNlcyAnY2hhcioqJywgd2hpY2ggbWF0Y2hlcyB0aGUgUE9TSVggMTAwMy4xLTIwMDEgc3RhbmRhcmQuCisgIC8vIFVzaW5nIHRoaXMgYWRhcHRvciwgZysrIHdpbGwgZG8gdGhlIHdvcmsgZm9yIHVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHNpemVfdAorICAgIF9faWNvbnZfYWRhcHRvcihzaXplX3QoKl9fZnVuYykoaWNvbnZfdCwgX1RwLCBzaXplX3QqLCBjaGFyKiosIHNpemVfdCopLAorICAgICAgICAgICAgICAgICAgICBpY29udl90IF9fY2QsIGNoYXIqKiBfX2luYnVmLCBzaXplX3QqIF9faW5ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgY2hhcioqIF9fb3V0YnVmLCBzaXplX3QqIF9fb3V0Ynl0ZXMpCisgICAgeyByZXR1cm4gX19mdW5jKF9fY2QsIChfVHApX19pbmJ1ZiwgX19pbmJ5dGVzLCBfX291dGJ1ZiwgX19vdXRieXRlcyk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CisgICAgY29kZWN2dF9iYXNlOjpyZXN1bHQKKyAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgZW5jb2Rpbmdfc3RhdGU+OjoKKyAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwgCisJICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCisJICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKKwkgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKKyAgICB7CisgICAgICByZXN1bHQgX19yZXQgPSBjb2RlY3Z0X2Jhc2U6OmVycm9yOworICAgICAgaWYgKF9fc3RhdGUuZ29vZCgpKQorCXsKKwkgIGNvbnN0IGRlc2NyaXB0b3JfdHlwZSYgX19kZXNjID0gX19zdGF0ZS5vdXRfZGVzY3JpcHRvcigpOworCSAgY29uc3Qgc2l6ZV90IF9fZm11bHRpcGxlID0gc2l6ZW9mKGludGVybl90eXBlKTsKKwkgIHNpemVfdCBfX2ZieXRlcyA9IF9fZm11bHRpcGxlICogKF9fZnJvbV9lbmQgLSBfX2Zyb20pOworCSAgY29uc3Qgc2l6ZV90IF9fdG11bHRpcGxlID0gc2l6ZW9mKGV4dGVybl90eXBlKTsKKwkgIHNpemVfdCBfX3RieXRlcyA9IF9fdG11bHRpcGxlICogKF9fdG9fZW5kIC0gX190byk7IAorCSAgCisJICAvLyBBcmd1bWVudCBsaXN0IGZvciBpY29udiBzcGVjaWZpZXMgYSBieXRlIHNlcXVlbmNlLiBUaHVzLAorCSAgLy8gYWxsIHRvL2Zyb20gYXJyYXlzIG11c3QgYmUgYnJ1dGFsbHkgY2FzdGVkIHRvIGNoYXIqLgorCSAgY2hhciogX19jdG8gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3RvKTsKKwkgIGNoYXIqIF9fY2Zyb207CisJICBzaXplX3QgX19jb252OworCisJICAvLyBTb21lIGVuY29kaW5ncyBuZWVkIGEgYnl0ZSBvcmRlciBtYXJrZXIgYXMgdGhlIGZpcnN0IGl0ZW0KKwkgIC8vIGluIHRoZSBieXRlIHN0cmVhbSwgdG8gZGVzaWduYXRlIGVuZGlhbi1uZXNzLiBUaGUgZGVmYXVsdAorCSAgLy8gdmFsdWUgZm9yIHRoZSBieXRlIG9yZGVyIG1hcmtlciBpcyBOVUxMLCBzbyBpZiB0aGlzIGlzCisJICAvLyB0aGUgY2FzZSwgaXQncyBub3QgbmVjZXNzYXJ5IGFuZCB3ZSBjYW4ganVzdCBnbyBvbiBvdXIKKwkgIC8vIG1lcnJ5IHdheS4KKwkgIGludCBfX2ludF9ib20gPSBfX3N0YXRlLmludGVybmFsX2JvbSgpOworCSAgaWYgKF9faW50X2JvbSkKKwkgICAgewkgIAorCSAgICAgIHNpemVfdCBfX3NpemUgPSBfX2Zyb21fZW5kIC0gX19mcm9tOworCSAgICAgIGludGVybl90eXBlKiBfX2NmaXhlZCA9IHN0YXRpY19jYXN0PGludGVybl90eXBlKj4KKwkJKF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGludGVybl90eXBlKSAqIChfX3NpemUgKyAxKSkpOworCSAgICAgIF9fY2ZpeGVkWzBdID0gc3RhdGljX2Nhc3Q8aW50ZXJuX3R5cGU+KF9faW50X2JvbSk7CisJICAgICAgY2hhcl90cmFpdHM8aW50ZXJuX3R5cGU+Ojpjb3B5KF9fY2ZpeGVkICsgMSwgX19mcm9tLCBfX3NpemUpOworCSAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7CisJICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCBfX2Rlc2MsICZfX2Nmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2ZieXRlcywgJl9fY3RvLCAmX190Ynl0ZXMpOyAKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgaW50ZXJuX3R5cGUqIF9fY2ZpeGVkID0gY29uc3RfY2FzdDxpbnRlcm5fdHlwZSo+KF9fZnJvbSk7CisJICAgICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKKwkgICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsIF9fZGVzYywgJl9fY2Zyb20sICZfX2ZieXRlcywgCisJCQkJICAgICAgICZfX2N0bywgJl9fdGJ5dGVzKTsgCisJICAgIH0KKworCSAgaWYgKF9fY29udiAhPSBzaXplX3QoLTEpKQorCSAgICB7CisJICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGludGVybl90eXBlKj4oX19jZnJvbSk7CisJICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxleHRlcm5fdHlwZSo+KF9fY3RvKTsKKwkgICAgICBfX3JldCA9IGNvZGVjdnRfYmFzZTo6b2s7CisJICAgIH0KKwkgIGVsc2UgCisJICAgIHsKKwkgICAgICBpZiAoX19mYnl0ZXMgPCBfX2ZtdWx0aXBsZSAqIChfX2Zyb21fZW5kIC0gX19mcm9tKSkKKwkJeworCQkgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnRlcm5fdHlwZSo+KF9fY2Zyb20pOworCQkgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CisJCSAgX19yZXQgPSBjb2RlY3Z0X2Jhc2U6OnBhcnRpYWw7CisJCX0KKwkgICAgICBlbHNlCisJCV9fcmV0ID0gY29kZWN2dF9iYXNlOjplcnJvcjsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiBfX3JldDsgCisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KKyAgICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAorICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBlbmNvZGluZ19zdGF0ZT46OgorICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sIAorCSAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAorICAgIHsKKyAgICAgIHJlc3VsdCBfX3JldCA9IGNvZGVjdnRfYmFzZTo6ZXJyb3I7CisgICAgICBpZiAoX19zdGF0ZS5nb29kKCkpCisJeworCSAgY29uc3QgZGVzY3JpcHRvcl90eXBlJiBfX2Rlc2MgPSBfX3N0YXRlLmluX2Rlc2NyaXB0b3IoKTsKKwkgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBsZSA9IHNpemVvZihpbnRlcm5fdHlwZSk7CisJICBzaXplX3QgX190bGVuID0gX190bXVsdGlwbGUgKiAoX190b19lbmQgLSBfX3RvKTsgCisJICAKKwkgIC8vIEFyZ3VtZW50IGxpc3QgZm9yIGljb252IHNwZWNpZmllcyBhIGJ5dGUgc2VxdWVuY2UuIFRodXMsCisJICAvLyBhbGwgdG8vZnJvbSBhcnJheXMgbXVzdCBiZSBicnV0YWxseSBjYXN0ZWQgdG8gY2hhciouCisJICBjaGFyKiBfX2N0byA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fdG8pOworCSAgc2l6ZV90IF9fY29udiA9IF9faWNvbnZfYWRhcHRvcihpY29udixfX2Rlc2MsIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19jdG8sICZfX3RsZW4pOyAKKwkgIAorCSAgaWYgKF9fY29udiAhPSBzaXplX3QoLTEpKQorCSAgICB7CisJICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxleHRlcm5fdHlwZSo+KF9fY3RvKTsKKwkgICAgICBpZiAoX190bGVuID09IF9fdG11bHRpcGxlICogKF9fdG9fZW5kIC0gX190bykpCisJCV9fcmV0ID0gY29kZWN2dF9iYXNlOjpub2NvbnY7CisJICAgICAgZWxzZSBpZiAoX190bGVuID09IDApCisJCV9fcmV0ID0gY29kZWN2dF9iYXNlOjpvazsKKwkgICAgICBlbHNlCisJCV9fcmV0ID0gY29kZWN2dF9iYXNlOjpwYXJ0aWFsOworCSAgICB9CisJICBlbHNlIAorCSAgICBfX3JldCA9IGNvZGVjdnRfYmFzZTo6ZXJyb3I7CisJfQorICAgICAgcmV0dXJuIF9fcmV0OyAKKyAgICB9CisgICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgorICAgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CisgICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIGVuY29kaW5nX3N0YXRlPjo6CisgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwgCisJICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKwkgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsIAorCSAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CisgICAgeyAKKyAgICAgIHJlc3VsdCBfX3JldCA9IGNvZGVjdnRfYmFzZTo6ZXJyb3I7CisgICAgICBpZiAoX19zdGF0ZS5nb29kKCkpCisJeworCSAgY29uc3QgZGVzY3JpcHRvcl90eXBlJiBfX2Rlc2MgPSBfX3N0YXRlLmluX2Rlc2NyaXB0b3IoKTsKKwkgIGNvbnN0IHNpemVfdCBfX2ZtdWx0aXBsZSA9IHNpemVvZihleHRlcm5fdHlwZSk7CisJICBzaXplX3QgX19mbGVuID0gX19mbXVsdGlwbGUgKiAoX19mcm9tX2VuZCAtIF9fZnJvbSk7CisJICBjb25zdCBzaXplX3QgX190bXVsdGlwbGUgPSBzaXplb2YoaW50ZXJuX3R5cGUpOworCSAgc2l6ZV90IF9fdGxlbiA9IF9fdG11bHRpcGxlICogKF9fdG9fZW5kIC0gX190byk7IAorCSAgCisJICAvLyBBcmd1bWVudCBsaXN0IGZvciBpY29udiBzcGVjaWZpZXMgYSBieXRlIHNlcXVlbmNlLiBUaHVzLAorCSAgLy8gYWxsIHRvL2Zyb20gYXJyYXlzIG11c3QgYmUgYnJ1dGFsbHkgY2FzdGVkIHRvIGNoYXIqLgorCSAgY2hhciogX19jdG8gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3RvKTsKKwkgIGNoYXIqIF9fY2Zyb207CisJICBzaXplX3QgX19jb252OworCisJICAvLyBTb21lIGVuY29kaW5ncyBuZWVkIGEgYnl0ZSBvcmRlciBtYXJrZXIgYXMgdGhlIGZpcnN0IGl0ZW0KKwkgIC8vIGluIHRoZSBieXRlIHN0cmVhbSwgdG8gZGVzaWduYXRlIGVuZGlhbi1uZXNzLiBUaGUgZGVmYXVsdAorCSAgLy8gdmFsdWUgZm9yIHRoZSBieXRlIG9yZGVyIG1hcmtlciBpcyBOVUxMLCBzbyBpZiB0aGlzIGlzCisJICAvLyB0aGUgY2FzZSwgaXQncyBub3QgbmVjZXNzYXJ5IGFuZCB3ZSBjYW4ganVzdCBnbyBvbiBvdXIKKwkgIC8vIG1lcnJ5IHdheS4KKwkgIGludCBfX2V4dF9ib20gPSBfX3N0YXRlLmV4dGVybmFsX2JvbSgpOworCSAgaWYgKF9fZXh0X2JvbSkKKwkgICAgewkgIAorCSAgICAgIHNpemVfdCBfX3NpemUgPSBfX2Zyb21fZW5kIC0gX19mcm9tOworCSAgICAgIGV4dGVybl90eXBlKiBfX2NmaXhlZCA9ICBzdGF0aWNfY2FzdDxleHRlcm5fdHlwZSo+CisJCShfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihleHRlcm5fdHlwZSkgKiAoX19zaXplICsgMSkpKTsKKwkgICAgICBfX2NmaXhlZFswXSA9IHN0YXRpY19jYXN0PGV4dGVybl90eXBlPihfX2V4dF9ib20pOworCSAgICAgIGNoYXJfdHJhaXRzPGV4dGVybl90eXBlPjo6Y29weShfX2NmaXhlZCArIDEsIF9fZnJvbSwgX19zaXplKTsKKwkgICAgICBfX2Nmcm9tID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19jZml4ZWQpOworCSAgICAgIF9fY29udiA9IF9faWNvbnZfYWRhcHRvcihpY29udiwgX19kZXNjLCAmX19jZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2ZsZW4sICZfX2N0bywgJl9fdGxlbik7IAorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBleHRlcm5fdHlwZSogX19jZml4ZWQgPSBjb25zdF9jYXN0PGV4dGVybl90eXBlKj4oX19mcm9tKTsKKwkgICAgICBfX2Nmcm9tID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19jZml4ZWQpOworCSAgICAgIF9fY29udiA9IF9faWNvbnZfYWRhcHRvcihpY29udiwgX19kZXNjLCAmX19jZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2ZsZW4sICZfX2N0bywgJl9fdGxlbik7IAorCSAgICB9CisKKwkgIAorCSAgaWYgKF9fY29udiAhPSBzaXplX3QoLTEpKQorCSAgICB7CisJICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGV4dGVybl90eXBlKj4oX19jZnJvbSk7CisJICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRlcm5fdHlwZSo+KF9fY3RvKTsKKwkgICAgICBfX3JldCA9IGNvZGVjdnRfYmFzZTo6b2s7CisJICAgIH0KKwkgIGVsc2UgCisJICAgIHsKKwkgICAgICBpZiAoX19mbGVuIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihfX2Zyb21fZW5kIC0gX19mcm9tKSkKKwkJeworCQkgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KF9fY2Zyb20pOworCQkgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50ZXJuX3R5cGUqPihfX2N0byk7CisJCSAgX19yZXQgPSBjb2RlY3Z0X2Jhc2U6OnBhcnRpYWw7CisJCX0KKwkgICAgICBlbHNlCisJCV9fcmV0ID0gY29kZWN2dF9iYXNlOjplcnJvcjsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiBfX3JldDsgCisgICAgfQorICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgorICAgIGludCAKKyAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgZW5jb2Rpbmdfc3RhdGU+OjoKKyAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkKKyAgICB7CisgICAgICBpbnQgX19yZXQgPSAwOworICAgICAgaWYgKHNpemVvZihfRXh0ZXJuVCkgPD0gc2l6ZW9mKF9JbnRlcm5UKSkKKwlfX3JldCA9IHNpemVvZihfSW50ZXJuVCkgLyBzaXplb2YoX0V4dGVyblQpOworICAgICAgcmV0dXJuIF9fcmV0OyAKKyAgICB9CisgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CisgICAgYm9vbCAKKyAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgZW5jb2Rpbmdfc3RhdGU+OjoKKyAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQorICAgIHsgcmV0dXJuIGZhbHNlOyB9CisgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CisgICAgaW50IAorICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBlbmNvZGluZ19zdGF0ZT46OgorICAgIGRvX2xlbmd0aChzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwgCisJICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0CisgICAgeyByZXR1cm4gc3RkOjptaW4oX19tYXgsIHN0YXRpY19jYXN0PHNpemVfdD4oX19lbmQgLSBfX2Zyb20pKTsgfQorCisgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgLy8gNzQuICBHYXJibGVkIHRleHQgZm9yIGNvZGVjdnQ6OmRvX21heF9sZW5ndGgKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgorICAgIGludCAKKyAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgZW5jb2Rpbmdfc3RhdGU+OjoKKyAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKQorICAgIHsgcmV0dXJuIDE7IH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L2NvbmN1cnJlbmNlLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9jb25jdXJyZW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZjhjZDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9jb25jdXJyZW5jZS5oCkBAIC0wLDAgKzEsMzIyIEBACisvLyBTdXBwb3J0IGZvciBjb25jdXJyZW50IHByb2dyYW1pbmcgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgY29uY3VycmVuY2UuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWZuZGVmIF9DT05DVVJSRU5DRV9ICisjZGVmaW5lIF9DT05DVVJSRU5DRV9IIDEKKworI2luY2x1ZGUgPGV4Y2VwdGlvbj4KKyNpbmNsdWRlIDxiaXRzL2d0aHIuaD4gCisjaW5jbHVkZSA8Yml0cy9mdW5jdGV4Y2VwdC5oPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorCisgIC8vIEF2YWlsYWJsZSBsb2NraW5nIHBvbGljaWVzOgorICAvLyBfU19zaW5nbGUgICAgc2luZ2xlLXRocmVhZGVkIGNvZGUgdGhhdCBkb2Vzbid0IG5lZWQgdG8gYmUgbG9ja2VkLgorICAvLyBfU19tdXRleCAgICAgbXVsdGktdGhyZWFkZWQgY29kZSB0aGF0IHJlcXVpcmVzIGFkZGl0aW9uYWwgc3VwcG9ydAorICAvLyAgICAgICAgICAgICAgZnJvbSBndGhyLmggb3IgYWJzdHJhY3Rpb24gbGF5ZXJzIGluIGNvbmN1cnJlbmNlLmguCisgIC8vIF9TX2F0b21pYyAgICBtdWx0aS10aHJlYWRlZCBjb2RlIHVzaW5nIGF0b21pYyBvcGVyYXRpb25zLgorICBlbnVtIF9Mb2NrX3BvbGljeSB7IF9TX3NpbmdsZSwgX1NfbXV0ZXgsIF9TX2F0b21pYyB9OyAKKworICAvLyBDb21waWxlIHRpbWUgY29uc3RhbnQgdGhhdCBpbmRpY2F0ZXMgcHJlZmVyZWQgbG9ja2luZyBwb2xpY3kgaW4KKyAgLy8gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyAgc3RhdGljIGNvbnN0IF9Mb2NrX3BvbGljeSBfX2RlZmF1bHRfbG9ja19wb2xpY3kgPSAKKyNpZmRlZiBfX0dUSFJFQURTCisjaWYgKGRlZmluZWQoX19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfMikgXAorICAgICAmJiBkZWZpbmVkKF9fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzQpKQorICBfU19hdG9taWM7CisjZWxzZQorICBfU19tdXRleDsKKyNlbmRpZgorI2Vsc2UKKyAgX1Nfc2luZ2xlOworI2VuZGlmCisKKyAgLy8gTkI6IEFzIHRoaXMgaXMgdXNlZCBpbiBsaWJzdXBjKyssIG5lZWQgdG8gb25seSBkZXBlbmQgb24KKyAgLy8gZXhjZXB0aW9uLiBObyBzdGRleGNlcHRpb24gY2xhc3Nlcywgbm8gdXNlIG9mIHN0ZDo6c3RyaW5nLgorICBjbGFzcyBfX2NvbmN1cnJlbmNlX2xvY2tfZXJyb3IgOiBwdWJsaWMgc3RkOjpleGNlcHRpb24KKyAgeworICBwdWJsaWM6CisgICAgdmlydHVhbCBjaGFyIGNvbnN0KgorICAgIHdoYXQoKSBjb25zdCB0aHJvdygpCisgICAgeyByZXR1cm4gIl9fZ251X2N4eDo6X19jb25jdXJyZW5jZV9sb2NrX2Vycm9yIjsgfQorICB9OworCisgIGNsYXNzIF9fY29uY3VycmVuY2VfdW5sb2NrX2Vycm9yIDogcHVibGljIHN0ZDo6ZXhjZXB0aW9uCisgIHsKKyAgcHVibGljOgorICAgIHZpcnR1YWwgY2hhciBjb25zdCoKKyAgICB3aGF0KCkgY29uc3QgdGhyb3coKQorICAgIHsgcmV0dXJuICJfX2dudV9jeHg6Ol9fY29uY3VycmVuY2VfdW5sb2NrX2Vycm9yIjsgfQorICB9OworCisgIGNsYXNzIF9fY29uY3VycmVuY2VfYnJvYWRjYXN0X2Vycm9yIDogcHVibGljIHN0ZDo6ZXhjZXB0aW9uCisgIHsKKyAgcHVibGljOgorICAgIHZpcnR1YWwgY2hhciBjb25zdCoKKyAgICB3aGF0KCkgY29uc3QgdGhyb3coKQorICAgIHsgcmV0dXJuICJfX2dudV9jeHg6Ol9fY29uY3VycmVuY2VfYnJvYWRjYXN0X2Vycm9yIjsgfQorICB9OworCisgIGNsYXNzIF9fY29uY3VycmVuY2Vfd2FpdF9lcnJvciA6IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbgorICB7CisgIHB1YmxpYzoKKyAgICB2aXJ0dWFsIGNoYXIgY29uc3QqCisgICAgd2hhdCgpIGNvbnN0IHRocm93KCkKKyAgICB7IHJldHVybiAiX19nbnVfY3h4OjpfX2NvbmN1cnJlbmNlX3dhaXRfZXJyb3IiOyB9CisgIH07CisKKyAgLy8gU3Vic3RpdHV0ZSBmb3IgY29uY3VycmVuY2VfZXJyb3Igb2JqZWN0IGluIHRoZSBjYXNlIG9mIC1mbm8tZXhjZXB0aW9ucy4KKyAgaW5saW5lIHZvaWQKKyAgX190aHJvd19jb25jdXJyZW5jZV9sb2NrX2Vycm9yKCkKKyAgeworI2lmIF9fRVhDRVBUSU9OUworICAgIHRocm93IF9fY29uY3VycmVuY2VfbG9ja19lcnJvcigpOworI2Vsc2UKKyAgICBfX2J1aWx0aW5fYWJvcnQoKTsKKyNlbmRpZgorICB9CisKKyAgaW5saW5lIHZvaWQKKyAgX190aHJvd19jb25jdXJyZW5jZV91bmxvY2tfZXJyb3IoKQorICB7CisjaWYgX19FWENFUFRJT05TCisgICAgdGhyb3cgX19jb25jdXJyZW5jZV91bmxvY2tfZXJyb3IoKTsKKyNlbHNlCisgICAgX19idWlsdGluX2Fib3J0KCk7CisjZW5kaWYKKyAgfQorCisjaWZkZWYgX19HVEhSRUFEX0hBU19DT05ECisgIGlubGluZSB2b2lkCisgIF9fdGhyb3dfY29uY3VycmVuY2VfYnJvYWRjYXN0X2Vycm9yKCkKKyAgeworI2lmIF9fRVhDRVBUSU9OUworICAgIHRocm93IF9fY29uY3VycmVuY2VfYnJvYWRjYXN0X2Vycm9yKCk7CisjZWxzZQorICAgIF9fYnVpbHRpbl9hYm9ydCgpOworI2VuZGlmCisgIH0KKworICBpbmxpbmUgdm9pZAorICBfX3Rocm93X2NvbmN1cnJlbmNlX3dhaXRfZXJyb3IoKQorICB7CisjaWYgX19FWENFUFRJT05TCisgICAgdGhyb3cgX19jb25jdXJyZW5jZV93YWl0X2Vycm9yKCk7CisjZWxzZQorICAgIF9fYnVpbHRpbl9hYm9ydCgpOworI2VuZGlmCisgIH0KKyNlbmRpZgorIAorICBjbGFzcyBfX211dGV4IAorICB7CisgIHByaXZhdGU6CisgICAgX19ndGhyZWFkX211dGV4X3QgX01fbXV0ZXg7CisKKyAgICBfX211dGV4KGNvbnN0IF9fbXV0ZXgmKTsKKyAgICBfX211dGV4JiBvcGVyYXRvcj0oY29uc3QgX19tdXRleCYpOworCisgIHB1YmxpYzoKKyAgICBfX211dGV4KCkgCisgICAgeyAKKyNpZiBfX0dUSFJFQURTCisgICAgICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wKCkpCisJeworI2lmIGRlZmluZWQgX19HVEhSRUFEX01VVEVYX0lOSVQKKwkgIF9fZ3RocmVhZF9tdXRleF90IF9fdG1wID0gX19HVEhSRUFEX01VVEVYX0lOSVQ7CisJICBfTV9tdXRleCA9IF9fdG1wOworI2Vsc2UKKwkgIF9fR1RIUkVBRF9NVVRFWF9JTklUX0ZVTkNUSU9OKCZfTV9tdXRleCk7IAorI2VuZGlmCisJfQorI2VuZGlmIAorICAgIH0KKworICAgIHZvaWQgbG9jaygpCisgICAgeworI2lmIF9fR1RIUkVBRFMKKyAgICAgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AoKSkKKwl7CisJICBpZiAoX19ndGhyZWFkX211dGV4X2xvY2soJl9NX211dGV4KSAhPSAwKQorCSAgICBfX3Rocm93X2NvbmN1cnJlbmNlX2xvY2tfZXJyb3IoKTsKKwl9CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgdm9pZCB1bmxvY2soKQorICAgIHsKKyNpZiBfX0dUSFJFQURTCisgICAgICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wKCkpCisJeworCSAgaWYgKF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX211dGV4KSAhPSAwKQorCSAgICBfX3Rocm93X2NvbmN1cnJlbmNlX3VubG9ja19lcnJvcigpOworCX0KKyNlbmRpZgorICAgIH0KKworICAgIF9fZ3RocmVhZF9tdXRleF90KiBndGhyZWFkX211dGV4KHZvaWQpCisgICAgICB7IHJldHVybiAmX01fbXV0ZXg7IH0KKyAgfTsKKworICBjbGFzcyBfX3JlY3Vyc2l2ZV9tdXRleCAKKyAgeworICBwcml2YXRlOgorICAgIF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdCBfTV9tdXRleDsKKworICAgIF9fcmVjdXJzaXZlX211dGV4KGNvbnN0IF9fcmVjdXJzaXZlX211dGV4Jik7CisgICAgX19yZWN1cnNpdmVfbXV0ZXgmIG9wZXJhdG9yPShjb25zdCBfX3JlY3Vyc2l2ZV9tdXRleCYpOworCisgIHB1YmxpYzoKKyAgICBfX3JlY3Vyc2l2ZV9tdXRleCgpIAorICAgIHsgCisjaWYgX19HVEhSRUFEUworICAgICAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCgpKQorCXsKKyNpZiBkZWZpbmVkIF9fR1RIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVAorCSAgX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90IF9fdG1wID0gX19HVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUOworCSAgX01fbXV0ZXggPSBfX3RtcDsKKyNlbHNlCisJICBfX0dUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRfRlVOQ1RJT04oJl9NX211dGV4KTsgCisjZW5kaWYKKwl9CisjZW5kaWYgCisgICAgfQorCisgICAgdm9pZCBsb2NrKCkKKyAgICB7IAorI2lmIF9fR1RIUkVBRFMKKyAgICAgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AoKSkKKwl7CisJICBpZiAoX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF9sb2NrKCZfTV9tdXRleCkgIT0gMCkKKwkgICAgX190aHJvd19jb25jdXJyZW5jZV9sb2NrX2Vycm9yKCk7CisJfQorI2VuZGlmCisgICAgfQorICAgIAorICAgIHZvaWQgdW5sb2NrKCkKKyAgICB7IAorI2lmIF9fR1RIUkVBRFMKKyAgICAgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AoKSkKKwl7CisJICBpZiAoX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF91bmxvY2soJl9NX211dGV4KSAhPSAwKQorCSAgICBfX3Rocm93X2NvbmN1cnJlbmNlX3VubG9ja19lcnJvcigpOworCX0KKyNlbmRpZgorICAgIH0KKworICAgIF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdCogZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXgodm9pZCkKKyAgICAgIHsgcmV0dXJuICZfTV9tdXRleDsgfQorICB9OworCisgIC8vLyBTY29wZWQgbG9jayBpZGlvbS4KKyAgLy8gQWNxdWlyZSB0aGUgbXV0ZXggaGVyZSB3aXRoIGEgY29uc3RydWN0b3IgY2FsbCwgdGhlbiByZWxlYXNlIHdpdGgKKyAgLy8gdGhlIGRlc3RydWN0b3IgY2FsbCBpbiBhY2NvcmRhbmNlIHdpdGggUkFJSSBzdHlsZS4KKyAgY2xhc3MgX19zY29wZWRfbG9jaworICB7CisgIHB1YmxpYzoKKyAgICB0eXBlZGVmIF9fbXV0ZXggX19tdXRleF90eXBlOworCisgIHByaXZhdGU6CisgICAgX19tdXRleF90eXBlJiBfTV9kZXZpY2U7CisKKyAgICBfX3Njb3BlZF9sb2NrKGNvbnN0IF9fc2NvcGVkX2xvY2smKTsKKyAgICBfX3Njb3BlZF9sb2NrJiBvcGVyYXRvcj0oY29uc3QgX19zY29wZWRfbG9jayYpOworCisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBfX3Njb3BlZF9sb2NrKF9fbXV0ZXhfdHlwZSYgX19uYW1lKSA6IF9NX2RldmljZShfX25hbWUpCisgICAgeyBfTV9kZXZpY2UubG9jaygpOyB9CisKKyAgICB+X19zY29wZWRfbG9jaygpIHRocm93KCkKKyAgICB7IF9NX2RldmljZS51bmxvY2soKTsgfQorICB9OworCisjaWZkZWYgX19HVEhSRUFEX0hBU19DT05ECisgIGNsYXNzIF9fY29uZAorICB7CisgIHByaXZhdGU6CisgICAgX19ndGhyZWFkX2NvbmRfdCBfTV9jb25kOworCisgICAgX19jb25kKGNvbnN0IF9fY29uZCYpOworICAgIF9fY29uZCYgb3BlcmF0b3I9KGNvbnN0IF9fY29uZCYpOworCisgIHB1YmxpYzoKKyAgICBfX2NvbmQoKSAKKyAgICB7IAorI2lmIF9fR1RIUkVBRFMKKyAgICAgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AoKSkKKwl7CisjaWYgZGVmaW5lZCBfX0dUSFJFQURfQ09ORF9JTklUCisJICBfX2d0aHJlYWRfY29uZF90IF9fdG1wID0gX19HVEhSRUFEX0NPTkRfSU5JVDsKKwkgIF9NX2NvbmQgPSBfX3RtcDsKKyNlbHNlCisJICBfX0dUSFJFQURfQ09ORF9JTklUX0ZVTkNUSU9OKCZfTV9jb25kKTsKKyNlbmRpZgorCX0KKyNlbmRpZiAKKyAgICB9CisKKyAgICB2b2lkIGJyb2FkY2FzdCgpCisgICAgeworI2lmIF9fR1RIUkVBRFMKKyAgICAgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AoKSkKKwl7CisJICBpZiAoX19ndGhyZWFkX2NvbmRfYnJvYWRjYXN0KCZfTV9jb25kKSAhPSAwKQorCSAgICBfX3Rocm93X2NvbmN1cnJlbmNlX2Jyb2FkY2FzdF9lcnJvcigpOworCX0KKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgd2FpdChfX211dGV4ICptdXRleCkKKyAgICB7CisjaWYgX19HVEhSRUFEUworICAgICAgeworCSAgaWYgKF9fZ3RocmVhZF9jb25kX3dhaXQoJl9NX2NvbmQsIG11dGV4LT5ndGhyZWFkX211dGV4KCkpICE9IDApCisJICAgIF9fdGhyb3dfY29uY3VycmVuY2Vfd2FpdF9lcnJvcigpOworICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAgdm9pZCB3YWl0X3JlY3Vyc2l2ZShfX3JlY3Vyc2l2ZV9tdXRleCAqbXV0ZXgpCisgICAgeworI2lmIF9fR1RIUkVBRFMKKyAgICAgIHsKKwkgIGlmIChfX2d0aHJlYWRfY29uZF93YWl0X3JlY3Vyc2l2ZSgmX01fY29uZCwKKwkJCQkJICAgIG11dGV4LT5ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleCgpKQorCSAgICAgICE9IDApCisJICAgIF9fdGhyb3dfY29uY3VycmVuY2Vfd2FpdF9lcnJvcigpOworICAgICAgfQorI2VuZGlmCisgICAgfQorICB9OworI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9kZWJ1Z19hbGxvY2F0b3IuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L2RlYnVnX2FsbG9jYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZDgwNDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9kZWJ1Z19hbGxvY2F0b3IuaApAQCAtMCwwICsxLDEyNCBAQAorLy8gQWxsb2NhdG9ycyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5Ni0xOTk3CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgZXh0L2RlYnVnX2FsbG9jYXRvci5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKiAgWW91IHNob3VsZCBvbmx5IGluY2x1ZGUgdGhpcyBoZWFkZXIgaWYgeW91IGFyZSB1c2luZyBHQ0MgMyBvciBsYXRlci4KKyAqLworCisjaWZuZGVmIF9ERUJVR19BTExPQ0FUT1JfSAorI2RlZmluZSBfREVCVUdfQUxMT0NBVE9SX0ggMQorCisjaW5jbHVkZSA8c3RkZXhjZXB0PgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorCisgIHVzaW5nIHN0ZDo6c2l6ZV90OworCisgIC8qKgorICAgKiAgQGJyaWVmICBBIG1ldGEtYWxsb2NhdG9yIHdpdGggZGVidWdnaW5nIGJpdHMsIGFzIHBlciBbMjAuNF0uCisgICAqICBAaW5ncm91cCBhbGxvY2F0b3JzCisgICAqCisgICAqICBUaGlzIGlzIHByZWNpc2VseSB0aGUgYWxsb2NhdG9yIGRlZmluZWQgaW4gdGhlIEMrKyBTdGFuZGFyZC4gCisgICAqICAgIC0gYWxsIGFsbG9jYXRpb24gY2FsbHMgb3BlcmF0b3IgbmV3CisgICAqICAgIC0gYWxsIGRlYWxsb2NhdGlvbiBjYWxscyBvcGVyYXRvciBkZWxldGUKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKyAgICBjbGFzcyBkZWJ1Z19hbGxvY2F0b3IKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSAgICAgICAJc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmRpZmZlcmVuY2VfdHlwZQlkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cG9pbnRlciAgICAgICAJcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9wb2ludGVyICAgIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmVmZXJlbmNlICAgICAgIAlyZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcmVmZXJlbmNlICBjb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dmFsdWVfdHlwZSAgICAgICB2YWx1ZV90eXBlOworCisgICAgcHJpdmF0ZToKKyAgICAgIC8vIF9NX2V4dHJhIGlzIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlCisgICAgICAvLyBleHRyYSBzcGFjZSB3aGVyZSBkZWJ1ZyBpbmZvcm1hdGlvbiBpcyBzdG9yZWQuCisgICAgICBzaXplX3R5cGUgCQlfTV9leHRyYTsKKyAgICAgIAorICAgICAgX0FsbG9jCQkJX01fYWxsb2NhdG9yOworCisgICAgcHVibGljOgorICAgICAgZGVidWdfYWxsb2NhdG9yKCkKKyAgICAgIHsKKwljb25zdCBzaXplX3QgX19vYmpfc2l6ZSA9IHNpemVvZih2YWx1ZV90eXBlKTsKKwlfTV9leHRyYSA9IChzaXplb2Yoc2l6ZV90eXBlKSArIF9fb2JqX3NpemUgLSAxKSAvIF9fb2JqX3NpemU7IAorICAgICAgfQorICAgICAgCisgICAgICBwb2ludGVyCisgICAgICBhbGxvY2F0ZShzaXplX3R5cGUgX19uKQorICAgICAgeworICAgICAgICBwb2ludGVyIF9fcmVzID0gX01fYWxsb2NhdG9yLmFsbG9jYXRlKF9fbiArIF9NX2V4dHJhKTsgICAgICAKKwlzaXplX3R5cGUqIF9fcHMgPSByZWludGVycHJldF9jYXN0PHNpemVfdHlwZSo+KF9fcmVzKTsKKwkqX19wcyA9IF9fbjsKKyAgICAgICAgcmV0dXJuIF9fcmVzICsgX01fZXh0cmE7CisgICAgICB9CisKKyAgICAgIHBvaW50ZXIKKyAgICAgIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqIF9faGludCkKKyAgICAgIHsKKyAgICAgICAgcG9pbnRlciBfX3JlcyA9IF9NX2FsbG9jYXRvci5hbGxvY2F0ZShfX24gKyBfTV9leHRyYSwgX19oaW50KTsKKwlzaXplX3R5cGUqIF9fcHMgPSByZWludGVycHJldF9jYXN0PHNpemVfdHlwZSo+KF9fcmVzKTsKKwkqX19wcyA9IF9fbjsKKyAgICAgICAgcmV0dXJuIF9fcmVzICsgX01fZXh0cmE7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCisgICAgICB7CisJaWYgKF9fcCkKKwkgIHsKKwkgICAgcG9pbnRlciBfX3JlYWxfcCA9IF9fcCAtIF9NX2V4dHJhOworCSAgICBpZiAoKnJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90eXBlKj4oX19yZWFsX3ApICE9IF9fbikKKwkgICAgICB7CisJCXRocm93IHN0ZDo6cnVudGltZV9lcnJvcigiZGVidWdfYWxsb2NhdG9yOjpkZWFsbG9jYXRlIgorCQkJCQkgIiB3cm9uZyBzaXplIik7CisJICAgICAgfQorCSAgICBfTV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3JlYWxfcCwgX19uICsgX01fZXh0cmEpOworCSAgfQorCWVsc2UKKwkgIHRocm93IHN0ZDo6cnVudGltZV9lcnJvcigiZGVidWdfYWxsb2NhdG9yOjpkZWFsbG9jYXRlIG51bGwgcG9pbnRlciIpOworICAgICAgfQorICAgIH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9lbmNfZmlsZWJ1Zi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvZW5jX2ZpbGVidWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjgzNTY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvZW5jX2ZpbGVidWYuaApAQCAtMCwwICsxLDYyIEBACisvLyBmaWxlYnVmIHdpdGggZW5jb2Rpbmcgc3RhdGUgdHlwZSAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGV4dC9lbmNfZmlsZWJ1Zi5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfRVhUX0VOQ19GSUxFQlVGX0gKKyNkZWZpbmUgX0VYVF9FTkNfRklMRUJVRl9IIDEKKworI2luY2x1ZGUgPGZzdHJlYW0+CisjaW5jbHVkZSA8bG9jYWxlPgorI2luY2x1ZGUgPGV4dC9jb2RlY3Z0X3NwZWNpYWxpemF0aW9ucy5oPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorCisgIC8vLyBjbGFzcyBlbmNfZmlsZWJ1Zi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGNsYXNzIGVuY19maWxlYnVmCisgICAgOiBwdWJsaWMgc3RkOjpiYXNpY19maWxlYnVmPF9DaGFyVCwgZW5jb2RpbmdfY2hhcl90cmFpdHM8X0NoYXJUPiA+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgZW5jb2RpbmdfY2hhcl90cmFpdHM8X0NoYXJUPiAgICAgCXRyYWl0c190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6c3RhdGVfdHlwZQlzdGF0ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUJcG9zX3R5cGU7CisKKyAgICAgIGVuY19maWxlYnVmKHN0YXRlX3R5cGUmIF9fc3RhdGUpCisgICAgICA6IHN0ZDo6YmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIGVuY29kaW5nX2NoYXJfdHJhaXRzPF9DaGFyVD4gPigpCisgICAgICB7IHRoaXMtPl9NX3N0YXRlX2JlZyA9IF9fc3RhdGU7IH0KKworICAgIHByaXZhdGU6CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50czoKKyAgICAgIC8vIFNldCBzdGF0ZSB0eXBlIHRvIHNvbWV0aGluZyB1c2VmdWwuCisgICAgICAvLyBTb21ldGhpbmcgbW9yZSB0aGFuIGNvcHljb25zdHJ1Y3RpYmxlIGlzIG5lZWRlZCBoZXJlLCBzbworICAgICAgLy8gcmVxdWlyZSBkZWZhdWx0IGFuZCBjb3B5IGNvbnN0cnVjdGlibGUgKyBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzKHN0YXRlX3R5cGUsIF9TR0lBc3NpZ25hYmxlQ29uY2VwdCkKKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvZXh0cHRyX2FsbG9jYXRvci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvZXh0cHRyX2FsbG9jYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYjZiMWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9leHRwdHJfYWxsb2NhdG9yLmgKQEAgLTAsMCArMSwxNzYgQEAKKy8vIDxleHRwdHJfYWxsb2NhdG9yLmg+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKioKKyAqIEBmaWxlIGV4dC9leHRwdHJfYWxsb2NhdG9yLmgKKyAqIEBhdXRob3IgQm9iIFdhbHRlcnMKKyAqCisgKiBBbiBleGFtcGxlIGFsbG9jYXRvciB3aGljaCB1c2VzIGFuIGFsdGVybmF0aXZlIHBvaW50ZXIgdHlwZSBmcm9tCisgKiBiaXRzL3BvaW50ZXIuaC4gIFN1cHBvcnRzIHRlc3QgY2FzZXMgd2hpY2ggY29uZmlybSBjb250YWluZXIgc3VwcG9ydAorICogZm9yIGFsdGVybmF0aXZlIHBvaW50ZXJzLgorICovCisKKyNpZm5kZWYgX0VYVFBUUl9BTExPQ0FUT1JfSAorI2RlZmluZSBfRVhUUFRSX0FMTE9DQVRPUl9IIDEKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8ZXh0L3BvaW50ZXIuaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKworICAvKioKKyAgICogQGJyaWVmIEFuIGV4YW1wbGUgYWxsb2NhdG9yIHdoaWNoIHVzZXMgYSBub24tc3RhbmRhcmQgcG9pbnRlciB0eXBlLgorICAgKiBAaW5ncm91cCBhbGxvY2F0b3JzCisgICAqCisgICAqIFRoaXMgYWxsb2NhdG9yIHNwZWNpZmllcyB0aGF0IGNvbnRhaW5lcnMgdXNlIGEgJ3JlbGF0aXZlIHBvaW50ZXInIGFzIGl0J3MKKyAgICogcG9pbnRlciB0eXBlLiAgKFNlZSBleHQvcG9pbnRlci5oKSAgTWVtb3J5IGFsbG9jYXRpb24gaW4gdGhpcyBleGFtcGxlCisgICAqIGlzIHN0aWxsIHBlcmZvcm1lZCB1c2luZyBzdGQ6OmFsbG9jYXRvci4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyBfRXh0UHRyX2FsbG9jYXRvcgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHN0ZDo6c2l6ZV90ICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6cHRyZGlmZl90ICBkaWZmZXJlbmNlX3R5cGU7CisKKyAgICAgIC8vIE5vdGUgdGhlIG5vbi1zdGFuZGFyZCBwb2ludGVyIHR5cGVzLgorICAgICAgdHlwZWRlZiBfUG9pbnRlcl9hZGFwdGVyPF9SZWxhdGl2ZV9wb2ludGVyX2ltcGw8X1RwPiA+ICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIF9Qb2ludGVyX2FkYXB0ZXI8X1JlbGF0aXZlX3BvaW50ZXJfaW1wbDxjb25zdCBfVHA+ID4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZiBfVHAmICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIF9UcCAgICAgICAgdmFsdWVfdHlwZTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorICAgICAgICBzdHJ1Y3QgcmViaW5kCisgICAgICAgIHsgdHlwZWRlZiBfRXh0UHRyX2FsbG9jYXRvcjxfVXA+IG90aGVyOyB9OworCisgICAgICBfRXh0UHRyX2FsbG9jYXRvcigpIHRocm93KCkgCisgICAgICA6IF9NX3JlYWxfYWxsb2MoKSB7IH0KKworICAgICAgX0V4dFB0cl9hbGxvY2F0b3IoY29uc3QgX0V4dFB0cl9hbGxvY2F0b3IgJl9fcmFyZykgdGhyb3coKQorICAgICAgOiBfTV9yZWFsX2FsbG9jKF9fcmFyZy5fTV9yZWFsX2FsbG9jKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorICAgICAgICBfRXh0UHRyX2FsbG9jYXRvcihjb25zdCBfRXh0UHRyX2FsbG9jYXRvcjxfVXA+JiBfX3JhcmcpIHRocm93KCkKKyAgICAgICAgOiBfTV9yZWFsX2FsbG9jKF9fcmFyZy5fTV9nZXRVbmRlcmx5aW5nSW1wKCkpIHsgfQorCisgICAgICB+X0V4dFB0cl9hbGxvY2F0b3IoKSB0aHJvdygpCisgICAgICB7IH0KKworICAgICAgcG9pbnRlciBhZGRyZXNzKHJlZmVyZW5jZSBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiAmX194OyB9CisKKyAgICAgIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gJl9feDsgfQorCisgICAgICBwb2ludGVyIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIHZvaWQqIF9faGludCA9IDApCisgICAgICB7IHJldHVybiBfTV9yZWFsX2FsbG9jLmFsbG9jYXRlKF9fbixfX2hpbnQpOyB9CisKKyAgICAgIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKKyAgICAgIHsgX01fcmVhbF9hbGxvYy5kZWFsbG9jYXRlKF9fcC5nZXQoKSwgX19uKTsgfQorCisgICAgICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpCisgICAgICB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdHlwZT46Om1heCgpIC8gc2l6ZW9mKF9UcCk7IH0KKworICAgICAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpCisgICAgICB7IDo6bmV3KF9fcC5nZXQoKSkgX1RwKF9fdmFsKTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICB2b2lkCisgICAgICAgIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisgICAgICAgIHsgOjpuZXcoX19wLmdldCgpKSBfVHAoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsgfQorI2VuZGlmCisKKyAgICAgIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkKKyAgICAgIHsgX19wLT5+X1RwKCk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorICAgICAgICBpbmxpbmUgYm9vbAorICAgICAgICBvcGVyYXRvcj09KGNvbnN0IF9FeHRQdHJfYWxsb2NhdG9yPF9VcD4mIF9fcmFyZykKKyAgICAgICAgeyByZXR1cm4gX01fcmVhbF9hbGxvYyA9PSBfX3JhcmcuX01fZ2V0VW5kZXJseWluZ0ltcCgpOyB9CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IF9FeHRQdHJfYWxsb2NhdG9yJiBfX3JhcmcpCisgICAgICB7IHJldHVybiBfTV9yZWFsX2FsbG9jID09IF9fcmFyZy5fTV9yZWFsX2FsbG9jOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICAgICAgaW5saW5lIGJvb2wKKyAgICAgICAgb3BlcmF0b3IhPShjb25zdCBfRXh0UHRyX2FsbG9jYXRvcjxfVXA+JiBfX3JhcmcpCisgICAgICAgIHsgcmV0dXJuIF9NX3JlYWxfYWxsb2MgIT0gX19yYXJnLl9NX2dldFVuZGVybHlpbmdJbXAoKTsgfQorCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCBfRXh0UHRyX2FsbG9jYXRvciYgX19yYXJnKQorICAgICAgeyByZXR1cm4gX01fcmVhbF9hbGxvYyAhPSBfX3JhcmcuX01fcmVhbF9hbGxvYzsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgICAgIGlubGluZSBmcmllbmQgdm9pZAorICAgICAgICBzd2FwKF9FeHRQdHJfYWxsb2NhdG9yPF9VcD4mLCBfRXh0UHRyX2FsbG9jYXRvcjxfVXA+Jik7CisKKyAgICAgIC8vIEEgbWV0aG9kIHNwZWNpZmljIHRvIHRoaXMgaW1wbGVtZW50YXRpb24uCisgICAgICBjb25zdCBzdGQ6OmFsbG9jYXRvcjxfVHA+JgorICAgICAgX01fZ2V0VW5kZXJseWluZ0ltcCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9yZWFsX2FsbG9jOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgc3RkOjphbGxvY2F0b3I8X1RwPiAgX01fcmVhbF9hbGxvYzsKKyAgICB9OworCisgIC8vIF9FeHRQdHJfYWxsb2NhdG9yPHZvaWQ+IHNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTw+CisgICAgY2xhc3MgX0V4dFB0cl9hbGxvY2F0b3I8dm9pZD4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBzdGQ6OnNpemVfdCAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpwdHJkaWZmX3QgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKworICAgICAgLy8gTm90ZSB0aGUgbm9uLXN0YW5kYXJkIHBvaW50ZXIgdHlwZXMKKyAgICAgIHR5cGVkZWYgX1BvaW50ZXJfYWRhcHRlcjxfUmVsYXRpdmVfcG9pbnRlcl9pbXBsPHZvaWQ+ID4gICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgX1BvaW50ZXJfYWRhcHRlcjxfUmVsYXRpdmVfcG9pbnRlcl9pbXBsPGNvbnN0IHZvaWQ+ID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfcG9pbnRlcjsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorICAgICAgICBzdHJ1Y3QgcmViaW5kCisgICAgICAgIHsgdHlwZWRlZiBfRXh0UHRyX2FsbG9jYXRvcjxfVXA+IG90aGVyOyB9OworCisgICAgcHJpdmF0ZToKKyAgICAgIHN0ZDo6YWxsb2NhdG9yPHZvaWQ+ICBfTV9yZWFsX2FsbG9jOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChfRXh0UHRyX2FsbG9jYXRvcjxfVHA+JiBfX2xhcmcsIF9FeHRQdHJfYWxsb2NhdG9yPF9UcD4mIF9fcmFyZykKKyAgICB7CisgICAgICBzdGQ6OmFsbG9jYXRvcjxfVHA+IF9fdG1wKCBfX3JhcmcuX01fcmVhbF9hbGxvYyApOworICAgICAgX19yYXJnLl9NX3JlYWxfYWxsb2MgPSBfX2xhcmcuX01fcmVhbF9hbGxvYzsKKyAgICAgIF9fbGFyZy5fTV9yZWFsX2FsbG9jID0gX190bXA7CisgICAgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZiAvKiBfRVhUUFRSX0FMTE9DQVRPUl9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9mdW5jdGlvbmFsIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvZnVuY3Rpb25hbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDZiOWM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvZnVuY3Rpb25hbApAQCAtMCwwICsxLDQyNSBAQAorLy8gRnVuY3Rpb25hbCBleHRlbnNpb25zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBleHQvZnVuY3Rpb25hbAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IChwb3NzaWJseQorICogIGNvbnRhaW5pbmcgZXh0ZW5zaW9ucyBmcm9tIHRoZSBIUC9TR0kgU1RMIHN1YnNldCkuCisgKi8KKworI2lmbmRlZiBfRVhUX0ZVTkNUSU9OQUwKKyNkZWZpbmUgX0VYVF9GVU5DVElPTkFMIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDxjc3RkZGVmPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorCisgIHVzaW5nIHN0ZDo6c2l6ZV90OworICB1c2luZyBzdGQ6OnVuYXJ5X2Z1bmN0aW9uOworICB1c2luZyBzdGQ6OmJpbmFyeV9mdW5jdGlvbjsKKyAgdXNpbmcgc3RkOjptZW1fZnVuMV90OworICB1c2luZyBzdGQ6OmNvbnN0X21lbV9mdW4xX3Q7CisgIHVzaW5nIHN0ZDo6bWVtX2Z1bjFfcmVmX3Q7CisgIHVzaW5nIHN0ZDo6Y29uc3RfbWVtX2Z1bjFfcmVmX3Q7CisKKyAgLyoqIFRoZSBAYyBpZGVudGl0eV9lbGVtZW50IGZ1bmN0aW9ucyBhcmUgbm90IHBhcnQgb2YgdGhlIEMrKworICAgKiAgc3RhbmRhcmQ7IFNHSSBwcm92aWRlZCB0aGVtIGFzIGFuIGV4dGVuc2lvbi4gIEl0cyBhcmd1bWVudCBpcyBhbgorICAgKiAgb3BlcmF0aW9uLCBhbmQgaXRzIHJldHVybiB2YWx1ZSBpcyB0aGUgaWRlbnRpdHkgZWxlbWVudCBmb3IgdGhhdAorICAgKiAgb3BlcmF0aW9uLiAgSXQgaXMgb3ZlcmxvYWRlZCBmb3IgYWRkaXRpb24gYW5kIG11bHRpcGxpY2F0aW9uLAorICAgKiAgYW5kIHlvdSBjYW4gb3ZlcmxvYWQgaXQgZm9yIHlvdXIgb3duIG5lZmFyaW91cyBvcGVyYXRpb25zLgorICAgKgorICAgKiAgQGFkZHRvZ3JvdXAgU0dJZXh0ZW5zaW9ucworICAgKiAgQHsKKyAgICovCisgIC8vLyBBbiBcbGluayBTR0lleHRlbnNpb25zIFNHSSBleHRlbnNpb24gXGVuZGxpbmsuCisgIHRlbXBsYXRlIDxjbGFzcyBfVHA+CisgICAgaW5saW5lIF9UcAorICAgIGlkZW50aXR5X2VsZW1lbnQoc3RkOjpwbHVzPF9UcD4pCisgICAgeyByZXR1cm4gX1RwKDApOyB9CisKKyAgLy8vIEFuIFxsaW5rIFNHSWV4dGVuc2lvbnMgU0dJIGV4dGVuc2lvbiBcZW5kbGluay4KKyAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgaWRlbnRpdHlfZWxlbWVudChzdGQ6Om11bHRpcGxpZXM8X1RwPikKKyAgICB7IHJldHVybiBfVHAoMSk7IH0KKyAgLyoqIEB9ICAqLworICAKKyAgLyoqIEFzIGFuIGV4dGVuc2lvbiB0byB0aGUgYmluZGVycywgU0dJIHByb3ZpZGVkIGNvbXBvc2l0aW9uIGZ1bmN0b3JzIGFuZAorICAgKiAgd3JhcHBlciBmdW5jdGlvbnMgdG8gYWlkIGluIHRoZWlyIGNyZWF0aW9uLiAgVGhlIEBjIHVuYXJ5X2NvbXBvc2UKKyAgICogIGZ1bmN0b3IgaXMgY29uc3RydWN0ZWQgZnJvbSB0d28gZnVuY3Rpb25zL2Z1bmN0b3JzLCBAYyBmIGFuZCBAYyBnLgorICAgKiAgQ2FsbGluZyBAYyBvcGVyYXRvcigpIHdpdGggYSBzaW5nbGUgYXJndW1lbnQgQGMgeCByZXR1cm5zIEBjIGYoZyh4KSkuCisgICAqICBUaGUgZnVuY3Rpb24gQGMgY29tcG9zZTEgdGFrZXMgdGhlIHR3byBmdW5jdGlvbnMgYW5kIGNvbnN0cnVjdHMgYQorICAgKiAgQGMgdW5hcnlfY29tcG9zZSB2YXJpYWJsZSBmb3IgeW91LgorICAgKgorICAgKiAgQGMgYmluYXJ5X2NvbXBvc2UgaXMgY29uc3RydWN0ZWQgZnJvbSB0aHJlZSBmdW5jdG9ycywgQGMgZiwgQGMgZzEsCisgICAqICBhbmQgQGMgZzIuICBJdHMgQGMgb3BlcmF0b3IoKSByZXR1cm5zIEBjIGYoZzEoeCksZzIoeCkpLiAgVGhlIGZ1bmN0aW9uCisgICAqICBAY29tcG9zZTIgdGFrZXMgZiwgZzEsIGFuZCBnMiwgYW5kIGNvbnN0cnVjdHMgdGhlIEBjIGJpbmFyeV9jb21wb3NlCisgICAqICBpbnN0YW5jZSBmb3IgeW91LiAgRm9yIGV4YW1wbGUsIGlmIEBjIGYgcmV0dXJucyBhbiBpbnQsIHRoZW4KKyAgICogIFxjb2RlCisgICAqICBpbnQgYW5zd2VyID0gKGNvbXBvc2UyKGYsZzEsZzIpKSh4KTsKKyAgICogIFxlbmRjb2RlCisgICAqICBpcyBlcXVpdmFsZW50IHRvCisgICAqICBcY29kZQorICAgKiAgaW50IHRlbXAxID0gZzEoeCk7CisgICAqICBpbnQgdGVtcDIgPSBnMih4KTsKKyAgICogIGludCBhbnN3ZXIgPSBmKHRlbXAxLHRlbXAyKTsKKyAgICogIFxlbmRjb2RlCisgICAqICBCdXQgdGhlIGZpcnN0IGZvcm0gaXMgbW9yZSBjb21wYWN0LCBhbmQgY2FuIGJlIHBhc3NlZCBhcm91bmQgYXMgYQorICAgKiAgZnVuY3RvciB0byBvdGhlciBhbGdvcml0aG1zLgorICAgKgorICAgKiAgQGFkZHRvZ3JvdXAgU0dJZXh0ZW5zaW9ucworICAgKiAgQHsKKyAgICovCisgIC8vLyBBbiBcbGluayBTR0lleHRlbnNpb25zIFNHSSBleHRlbnNpb24gXGVuZGxpbmsuCisgIHRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjI+CisgICAgY2xhc3MgdW5hcnlfY29tcG9zZQorICAgIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlLAorCQkJICAgIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZT4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgX09wZXJhdGlvbjEgX01fZm4xOworICAgICAgX09wZXJhdGlvbjIgX01fZm4yOworCisgICAgcHVibGljOgorICAgICAgdW5hcnlfY29tcG9zZShjb25zdCBfT3BlcmF0aW9uMSYgX194LCBjb25zdCBfT3BlcmF0aW9uMiYgX195KQorICAgICAgOiBfTV9mbjEoX194KSwgX01fZm4yKF9feSkge30KKworICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlCisgICAgICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9mbjEoX01fZm4yKF9feCkpOyB9CisgICAgfTsKKworICAvLy8gQW4gXGxpbmsgU0dJZXh0ZW5zaW9ucyBTR0kgZXh0ZW5zaW9uIFxlbmRsaW5rLgorICB0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yPgorICAgIGlubGluZSB1bmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLCBfT3BlcmF0aW9uMj4KKyAgICBjb21wb3NlMShjb25zdCBfT3BlcmF0aW9uMSYgX19mbjEsIGNvbnN0IF9PcGVyYXRpb24yJiBfX2ZuMikKKyAgICB7IHJldHVybiB1bmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24yPihfX2ZuMSwgX19mbjIpOyB9CisKKyAgLy8vIEFuIFxsaW5rIFNHSWV4dGVuc2lvbnMgU0dJIGV4dGVuc2lvbiBcZW5kbGluay4KKyAgdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMiwgY2xhc3MgX09wZXJhdGlvbjM+CisgICAgY2xhc3MgYmluYXJ5X2NvbXBvc2UKKyAgICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSwKKwkJCSAgICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGU+CisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIF9PcGVyYXRpb24xIF9NX2ZuMTsKKyAgICAgIF9PcGVyYXRpb24yIF9NX2ZuMjsKKyAgICAgIF9PcGVyYXRpb24zIF9NX2ZuMzsKKyAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgIGJpbmFyeV9jb21wb3NlKGNvbnN0IF9PcGVyYXRpb24xJiBfX3gsIGNvbnN0IF9PcGVyYXRpb24yJiBfX3ksCisJCSAgICAgY29uc3QgX09wZXJhdGlvbjMmIF9feikKKyAgICAgIDogX01fZm4xKF9feCksIF9NX2ZuMihfX3kpLCBfTV9mbjMoX196KSB7IH0KKworICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlCisgICAgICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9mbjEoX01fZm4yKF9feCksIF9NX2ZuMyhfX3gpKTsgfQorICAgIH07CisKKyAgLy8vIEFuIFxsaW5rIFNHSWV4dGVuc2lvbnMgU0dJIGV4dGVuc2lvbiBcZW5kbGluay4KKyAgdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMiwgY2xhc3MgX09wZXJhdGlvbjM+CisgICAgaW5saW5lIGJpbmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLCBfT3BlcmF0aW9uMiwgX09wZXJhdGlvbjM+CisgICAgY29tcG9zZTIoY29uc3QgX09wZXJhdGlvbjEmIF9fZm4xLCBjb25zdCBfT3BlcmF0aW9uMiYgX19mbjIsCisJICAgICBjb25zdCBfT3BlcmF0aW9uMyYgX19mbjMpCisgICAgeyByZXR1cm4gYmluYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsIF9PcGVyYXRpb24yLCBfT3BlcmF0aW9uMz4KKwkoX19mbjEsIF9fZm4yLCBfX2ZuMyk7IH0KKyAgLyoqIEB9ICAqLworCisgIC8qKiBBcyBhbiBleHRlbnNpb24sIFNHSSBwcm92aWRlZCBhIGZ1bmN0b3IgY2FsbGVkIEBjIGlkZW50aXR5LiAgV2hlbiBhCisgICAqICBmdW5jdG9yIGlzIHJlcXVpcmVkIGJ1dCBubyBvcGVyYXRpb25zIGFyZSBkZXNpcmVkLCB0aGlzIGNhbiBiZSB1c2VkIGFzIGEKKyAgICogIHBhc3MtdGhyb3VnaC4gIEl0cyBAYyBvcGVyYXRvcigpIHJldHVybnMgaXRzIGFyZ3VtZW50IHVuY2hhbmdlZC4KKyAgICoKKyAgICogIEBhZGR0b2dyb3VwIFNHSWV4dGVuc2lvbnMKKyAgICovCisgIHRlbXBsYXRlIDxjbGFzcyBfVHA+CisgICAgc3RydWN0IGlkZW50aXR5IDogcHVibGljIHN0ZDo6X0lkZW50aXR5PF9UcD4ge307CisKKyAgLyoqIEBjIHNlbGVjdDFzdCBhbmQgQGMgc2VsZWN0Mm5kIGFyZSBleHRlbnNpb25zIHByb3ZpZGVkIGJ5IFNHSS4gIFRoZWlyCisgICAqICBAYyBvcGVyYXRvcigpcworICAgKiAgdGFrZSBhIEBjIHN0ZDo6cGFpciBhcyBhbiBhcmd1bWVudCwgYW5kIHJldHVybiBlaXRoZXIgdGhlIGZpcnN0IG1lbWJlcgorICAgKiAgb3IgdGhlIHNlY29uZCBtZW1iZXIsIHJlc3BlY3RpdmVseS4gIFRoZXkgY2FuIGJlIHVzZWQgKGVzcGVjaWFsbHkgd2l0aAorICAgKiAgdGhlIGNvbXBvc2l0aW9uIGZ1bmN0b3JzKSB0byBAYSBzdHJpcCBkYXRhIGZyb20gYSBzZXF1ZW5jZSBiZWZvcmUKKyAgICogIHBlcmZvcm1pbmcgdGhlIHJlbWFpbmRlciBvZiBhbiBhbGdvcml0aG0uCisgICAqCisgICAqICBAYWRkdG9ncm91cCBTR0lleHRlbnNpb25zCisgICAqICBAeworICAgKi8KKyAgLy8vIEFuIFxsaW5rIFNHSWV4dGVuc2lvbnMgU0dJIGV4dGVuc2lvbiBcZW5kbGluay4KKyAgdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgorICAgIHN0cnVjdCBzZWxlY3Qxc3QgOiBwdWJsaWMgc3RkOjpfU2VsZWN0MXN0PF9QYWlyPiB7fTsKKworICAvLy8gQW4gXGxpbmsgU0dJZXh0ZW5zaW9ucyBTR0kgZXh0ZW5zaW9uIFxlbmRsaW5rLgorICB0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CisgICAgc3RydWN0IHNlbGVjdDJuZCA6IHB1YmxpYyBzdGQ6Ol9TZWxlY3QybmQ8X1BhaXI+IHt9OworICAvKiogQH0gICovCisKKyAgLy8gZXh0ZW5zaW9uIGRvY3VtZW50ZWQgbmV4dAorICB0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgorICAgIHN0cnVjdCBfUHJvamVjdDFzdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsIF9BcmcyLCBfQXJnMT4KKyAgICB7CisgICAgICBfQXJnMQorICAgICAgb3BlcmF0b3IoKShjb25zdCBfQXJnMSYgX194LCBjb25zdCBfQXJnMiYpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3g7IH0KKyAgICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+CisgICAgc3RydWN0IF9Qcm9qZWN0Mm5kIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSwgX0FyZzIsIF9BcmcyPgorICAgIHsKKyAgICAgIF9BcmcyCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiwgY29uc3QgX0FyZzImIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feTsgfQorICAgIH07CisKKyAgLyoqIFRoZSBAYyBvcGVyYXRvcigpIG9mIHRoZSBAYyBwcm9qZWN0MXN0IGZ1bmN0b3IgdGFrZXMgdHdvIGFyYml0cmFyeQorICAgKiAgYXJndW1lbnRzIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBvbmUsIHdoaWxlIEBjIHByb2plY3QybmQgcmV0dXJucyB0aGUKKyAgICogIHNlY29uZCBvbmUuICBUaGV5IGFyZSBleHRlbnNpb25zIHByb3ZpZGVkIGJ5IFNHSS4KKyAgICoKKyAgICogIEBhZGR0b2dyb3VwIFNHSWV4dGVuc2lvbnMKKyAgICogIEB7CisgICAqLworCisgIC8vLyBBbiBcbGluayBTR0lleHRlbnNpb25zIFNHSSBleHRlbnNpb24gXGVuZGxpbmsuCisgIHRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+CisgICAgc3RydWN0IHByb2plY3Qxc3QgOiBwdWJsaWMgX1Byb2plY3Qxc3Q8X0FyZzEsIF9BcmcyPiB7fTsKKworICAvLy8gQW4gXGxpbmsgU0dJZXh0ZW5zaW9ucyBTR0kgZXh0ZW5zaW9uIFxlbmRsaW5rLgorICB0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgorICAgIHN0cnVjdCBwcm9qZWN0Mm5kIDogcHVibGljIF9Qcm9qZWN0Mm5kPF9BcmcxLCBfQXJnMj4ge307CisgIC8qKiBAfSAgKi8KKworICAvLyBleHRlbnNpb24gZG9jdW1lbnRlZCBuZXh0CisgIHRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgorICAgIHN0cnVjdCBfQ29uc3RhbnRfdm9pZF9mdW4KKyAgICB7CisgICAgICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7CisgICAgICByZXN1bHRfdHlwZSBfTV92YWw7CisKKyAgICAgIF9Db25zdGFudF92b2lkX2Z1bihjb25zdCByZXN1bHRfdHlwZSYgX192KSA6IF9NX3ZhbChfX3YpIHt9CisKKyAgICAgIGNvbnN0IHJlc3VsdF90eXBlJgorICAgICAgb3BlcmF0b3IoKSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV92YWw7IH0KKyAgICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJndW1lbnQ+CisgICAgc3RydWN0IF9Db25zdGFudF91bmFyeV9mdW4KKyAgICB7CisgICAgICB0eXBlZGVmIF9Bcmd1bWVudCBhcmd1bWVudF90eXBlOworICAgICAgdHlwZWRlZiAgX1Jlc3VsdCAgcmVzdWx0X3R5cGU7CisgICAgICByZXN1bHRfdHlwZSBfTV92YWw7CisgICAgICAKKyAgICAgIF9Db25zdGFudF91bmFyeV9mdW4oY29uc3QgcmVzdWx0X3R5cGUmIF9fdikgOiBfTV92YWwoX192KSB7fQorCisgICAgICBjb25zdCByZXN1bHRfdHlwZSYKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX0FyZ3VtZW50JikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3ZhbDsgfQorICAgIH07CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQsIGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4KKyAgICBzdHJ1Y3QgX0NvbnN0YW50X2JpbmFyeV9mdW4KKyAgICB7CisgICAgICB0eXBlZGVmICBfQXJnMSAgIGZpcnN0X2FyZ3VtZW50X3R5cGU7CisgICAgICB0eXBlZGVmICBfQXJnMiAgIHNlY29uZF9hcmd1bWVudF90eXBlOworICAgICAgdHlwZWRlZiAgX1Jlc3VsdCByZXN1bHRfdHlwZTsKKyAgICAgIF9SZXN1bHQgX01fdmFsOworCisgICAgICBfQ29uc3RhbnRfYmluYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpIDogX01fdmFsKF9fdikge30KKyAgICAgIAorICAgICAgY29uc3QgcmVzdWx0X3R5cGUmCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiwgY29uc3QgX0FyZzImKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdmFsOyB9CisgICAgfTsKKworICAvKiogVGhlc2UgdGhyZWUgZnVuY3RvcnMgYXJlIGVhY2ggY29uc3RydWN0ZWQgZnJvbSBhIHNpbmdsZSBhcmJpdHJhcnkKKyAgICogIHZhcmlhYmxlL3ZhbHVlLiAgTGF0ZXIsIHRoZWlyIEBjIG9wZXJhdG9yKClzIGNvbXBsZXRlbHkgaWdub3JlIGFueQorICAgKiAgYXJndW1lbnRzIHBhc3NlZCwgYW5kIHJldHVybiB0aGUgc3RvcmVkIHZhbHVlLgorICAgKiAgLSBAYyBjb25zdGFudF92b2lkX2Z1bidzIEBjIG9wZXJhdG9yKCkgdGFrZXMgbm8gYXJndW1lbnRzCisgICAqICAtIEBjIGNvbnN0YW50X3VuYXJ5X2Z1bidzIEBjIG9wZXJhdG9yKCkgdGFrZXMgb25lIGFyZ3VtZW50IChpZ25vcmVkKQorICAgKiAgLSBAYyBjb25zdGFudF9iaW5hcnlfZnVuJ3MgQGMgb3BlcmF0b3IoKSB0YWtlcyB0d28gYXJndW1lbnRzIChpZ25vcmVkKQorICAgKgorICAgKiAgVGhlIGhlbHBlciBjcmVhdG9yIGZ1bmN0aW9ucyBAYyBjb25zdGFudDAsIEBjIGNvbnN0YW50MSwgYW5kCisgICAqICBAYyBjb25zdGFudDIgZWFjaCB0YWtlIGEgQGEgcmVzdWx0IGFyZ3VtZW50IGFuZCBjb25zdHJ1Y3QgdmFyaWFibGVzIG9mCisgICAqICB0aGUgYXBwcm9wcmlhdGUgZnVuY3RvciB0eXBlLgorICAgKgorICAgKiAgQGFkZHRvZ3JvdXAgU0dJZXh0ZW5zaW9ucworICAgKiAgQHsKKyAgICovCisgIC8vLyBBbiBcbGluayBTR0lleHRlbnNpb25zIFNHSSBleHRlbnNpb24gXGVuZGxpbmsuCisgIHRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgorICAgIHN0cnVjdCBjb25zdGFudF92b2lkX2Z1bgorICAgIDogcHVibGljIF9Db25zdGFudF92b2lkX2Z1bjxfUmVzdWx0PgorICAgIHsKKyAgICAgIGNvbnN0YW50X3ZvaWRfZnVuKGNvbnN0IF9SZXN1bHQmIF9fdikKKyAgICAgIDogX0NvbnN0YW50X3ZvaWRfZnVuPF9SZXN1bHQ+KF9fdikge30KKyAgICB9OworCisgIC8vLyBBbiBcbGluayBTR0lleHRlbnNpb25zIFNHSSBleHRlbnNpb24gXGVuZGxpbmsuCisgIHRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJndW1lbnQgPSBfUmVzdWx0PgorICAgIHN0cnVjdCBjb25zdGFudF91bmFyeV9mdW4gOiBwdWJsaWMgX0NvbnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LCBfQXJndW1lbnQ+CisgICAgeworICAgICAgY29uc3RhbnRfdW5hcnlfZnVuKGNvbnN0IF9SZXN1bHQmIF9fdikKKyAgICAgIDogX0NvbnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LCBfQXJndW1lbnQ+KF9fdikge30KKyAgICB9OworCisgIC8vLyBBbiBcbGluayBTR0lleHRlbnNpb25zIFNHSSBleHRlbnNpb24gXGVuZGxpbmsuCisgIHRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJnMSA9IF9SZXN1bHQsIGNsYXNzIF9BcmcyID0gX0FyZzE+CisgICAgc3RydWN0IGNvbnN0YW50X2JpbmFyeV9mdW4KKyAgICA6IHB1YmxpYyBfQ29uc3RhbnRfYmluYXJ5X2Z1bjxfUmVzdWx0LCBfQXJnMSwgX0FyZzI+CisgICAgeworICAgICAgY29uc3RhbnRfYmluYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpCisgICAgICA6IF9Db25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsIF9BcmcxLCBfQXJnMj4oX192KSB7fQorICAgIH07CisKKyAgLy8vIEFuIFxsaW5rIFNHSWV4dGVuc2lvbnMgU0dJIGV4dGVuc2lvbiBcZW5kbGluay4KKyAgdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CisgICAgaW5saW5lIGNvbnN0YW50X3ZvaWRfZnVuPF9SZXN1bHQ+CisgICAgY29uc3RhbnQwKGNvbnN0IF9SZXN1bHQmIF9fdmFsKQorICAgIHsgcmV0dXJuIGNvbnN0YW50X3ZvaWRfZnVuPF9SZXN1bHQ+KF9fdmFsKTsgfQorCisgIC8vLyBBbiBcbGluayBTR0lleHRlbnNpb25zIFNHSSBleHRlbnNpb24gXGVuZGxpbmsuCisgIHRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgorICAgIGlubGluZSBjb25zdGFudF91bmFyeV9mdW48X1Jlc3VsdCwgX1Jlc3VsdD4KKyAgICBjb25zdGFudDEoY29uc3QgX1Jlc3VsdCYgX192YWwpCisgICAgeyByZXR1cm4gY29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQsIF9SZXN1bHQ+KF9fdmFsKTsgfQorCisgIC8vLyBBbiBcbGluayBTR0lleHRlbnNpb25zIFNHSSBleHRlbnNpb24gXGVuZGxpbmsuCisgIHRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgorICAgIGlubGluZSBjb25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdCxfUmVzdWx0PgorICAgIGNvbnN0YW50Mihjb25zdCBfUmVzdWx0JiBfX3ZhbCkKKyAgICB7IHJldHVybiBjb25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsIF9SZXN1bHQsIF9SZXN1bHQ+KF9fdmFsKTsgfQorICAvKiogQH0gICovCisKKyAgLyoqIFRoZSBAYyBzdWJ0cmFjdGl2ZV9ybmcgY2xhc3MgaXMgZG9jdW1lbnRlZCBvbgorICAgKiAgPGEgaHJlZj0iaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsLyI+U0dJJ3Mgc2l0ZTwvYT4uCisgICAqICBOb3RlIHRoYXQgdGhpcyBjb2RlIGFzc3VtZXMgdGhhdCBAYyBpbnQgaXMgMzIgYml0cy4KKyAgICoKKyAgICogIEBpbmdyb3VwIFNHSWV4dGVuc2lvbnMKKyAgICovCisgIGNsYXNzIHN1YnRyYWN0aXZlX3JuZworICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludD4KKyAgeworICBwcml2YXRlOgorICAgIHVuc2lnbmVkIGludCBfTV90YWJsZVs1NV07CisgICAgc2l6ZV90IF9NX2luZGV4MTsKKyAgICBzaXplX3QgX01faW5kZXgyOworCisgIHB1YmxpYzoKKyAgICAvLy8gUmV0dXJucyBhIG51bWJlciBsZXNzIHRoYW4gdGhlIGFyZ3VtZW50LgorICAgIHVuc2lnbmVkIGludAorICAgIG9wZXJhdG9yKCkodW5zaWduZWQgaW50IF9fbGltaXQpCisgICAgeworICAgICAgX01faW5kZXgxID0gKF9NX2luZGV4MSArIDEpICUgNTU7CisgICAgICBfTV9pbmRleDIgPSAoX01faW5kZXgyICsgMSkgJSA1NTsKKyAgICAgIF9NX3RhYmxlW19NX2luZGV4MV0gPSBfTV90YWJsZVtfTV9pbmRleDFdIC0gX01fdGFibGVbX01faW5kZXgyXTsKKyAgICAgIHJldHVybiBfTV90YWJsZVtfTV9pbmRleDFdICUgX19saW1pdDsKKyAgICB9CisKKyAgICB2b2lkCisgICAgX01faW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgX19zZWVkKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCBfX2sgPSAxOworICAgICAgX01fdGFibGVbNTRdID0gX19zZWVkOworICAgICAgc2l6ZV90IF9faTsKKyAgICAgIGZvciAoX19pID0gMDsgX19pIDwgNTQ7IF9faSsrKQorCXsKKwkgIHNpemVfdCBfX2lpID0gKDIxICogKF9faSArIDEpICUgNTUpIC0gMTsKKwkgIF9NX3RhYmxlW19faWldID0gX19rOworCSAgX19rID0gX19zZWVkIC0gX19rOworCSAgX19zZWVkID0gX01fdGFibGVbX19paV07CisJfQorICAgICAgZm9yIChpbnQgX19sb29wID0gMDsgX19sb29wIDwgNDsgX19sb29wKyspCisJeworCSAgZm9yIChfX2kgPSAwOyBfX2kgPCA1NTsgX19pKyspCisgICAgICAgICAgICBfTV90YWJsZVtfX2ldID0gX01fdGFibGVbX19pXSAtIF9NX3RhYmxlWygxICsgX19pICsgMzApICUgNTVdOworCX0KKyAgICAgIF9NX2luZGV4MSA9IDA7CisgICAgICBfTV9pbmRleDIgPSAzMTsKKyAgICB9CisKKyAgICAvLy8gQ3RvciBhbGxvd2luZyB5b3UgdG8gaW5pdGlhbGl6ZSB0aGUgc2VlZC4KKyAgICBzdWJ0cmFjdGl2ZV9ybmcodW5zaWduZWQgaW50IF9fc2VlZCkKKyAgICB7IF9NX2luaXRpYWxpemUoX19zZWVkKTsgfQorCisgICAgLy8vIERlZmF1bHQgY3RvcjsgaW5pdGlhbGl6ZXMgaXRzIHN0YXRlIHdpdGggc29tZSBudW1iZXIgeW91IGRvbid0IHNlZS4KKyAgICBzdWJ0cmFjdGl2ZV9ybmcoKQorICAgIHsgX01faW5pdGlhbGl6ZSgxNjE4MDMzOTh1KTsgfQorICB9OworCisgIC8vIE1lbV9mdW4gYWRhcHRvciBoZWxwZXIgZnVuY3Rpb25zIG1lbV9mdW4xIGFuZCBtZW1fZnVuMV9yZWYsCisgIC8vIHByb3ZpZGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGV5IGFyZSBubyBsb25nZXIgcGFydCBvZgorICAvLyB0aGUgQysrIHN0YW5kYXJkLgorICAKKyAgdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KKyAgICBpbmxpbmUgbWVtX2Z1bjFfdDxfUmV0LCBfVHAsIF9Bcmc+CisgICAgbWVtX2Z1bjEoX1JldCAoX1RwOjoqX19mKShfQXJnKSkKKyAgICB7IHJldHVybiBtZW1fZnVuMV90PF9SZXQsIF9UcCwgX0FyZz4oX19mKTsgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CisgICAgaW5saW5lIGNvbnN0X21lbV9mdW4xX3Q8X1JldCwgX1RwLCBfQXJnPgorICAgIG1lbV9mdW4xKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCisgICAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfdDxfUmV0LCBfVHAsIF9Bcmc+KF9fZik7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgorICAgIGlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LCBfVHAsIF9Bcmc+CisgICAgbWVtX2Z1bjFfcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCisgICAgeyByZXR1cm4gbWVtX2Z1bjFfcmVmX3Q8X1JldCwgX1RwLCBfQXJnPihfX2YpOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KKyAgICBpbmxpbmUgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCwgX1RwLCBfQXJnPgorICAgIG1lbV9mdW4xX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQorICAgIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsIF9UcCwgX0FyZz4oX19mKTsgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9oYXNoX21hcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L2hhc2hfbWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxM2VjNDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9oYXNoX21hcApAQCAtMCwwICsxLDU5MSBAQAorLy8gSGFzaGluZyBtYXAgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA5LCAyMDEwCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk2CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKi8KKworLyoqIEBmaWxlIGJhY2t3YXJkL2hhc2hfbWFwCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkgKHBvc3NpYmx5CisgKiAgY29udGFpbmluZyBleHRlbnNpb25zIGZyb20gdGhlIEhQL1NHSSBTVEwgc3Vic2V0KS4KKyAqLworCisjaWZuZGVmIF9CQUNLV0FSRF9IQVNIX01BUAorI2RlZmluZSBfQkFDS1dBUkRfSEFTSF9NQVAgMQorCisjaW5jbHVkZSAiYmFja3dhcmRfd2FybmluZy5oIgorI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8YmFja3dhcmQvaGFzaHRhYmxlLmg+CisjaW5jbHVkZSA8Yml0cy9jb25jZXB0X2NoZWNrLmg+CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisKKyAgdXNpbmcgc3RkOjplcXVhbF90bzsKKyAgdXNpbmcgc3RkOjphbGxvY2F0b3I7CisgIHVzaW5nIHN0ZDo6cGFpcjsKKyAgdXNpbmcgc3RkOjpfU2VsZWN0MXN0OworCisgIC8qKgorICAgKiAgVGhpcyBpcyBhbiBTR0kgZXh0ZW5zaW9uLgorICAgKiAgQGluZ3JvdXAgU0dJZXh0ZW5zaW9ucworICAgKiAgQGRvY3RvZG8KKyAgICovCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2hGbiA9IGhhc2g8X0tleT4sCisJICAgY2xhc3MgX0VxdWFsS2V5ID0gZXF1YWxfdG88X0tleT4sIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfVHA+ID4KKyAgICBjbGFzcyBoYXNoX21hcAorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBoYXNodGFibGU8cGFpcjxjb25zdCBfS2V5LCBfVHA+LF9LZXksIF9IYXNoRm4sCisJCQlfU2VsZWN0MXN0PHBhaXI8Y29uc3QgX0tleSwgX1RwPiA+LAorCQkJX0VxdWFsS2V5LCBfQWxsb2M+IF9IdDsKKworICAgICAgX0h0IF9NX2h0OworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmtleV90eXBlIGtleV90eXBlOworICAgICAgdHlwZWRlZiBfVHAgZGF0YV90eXBlOworICAgICAgdHlwZWRlZiBfVHAgbWFwcGVkX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6Omhhc2hlciBoYXNoZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6a2V5X2VxdWFsIGtleV9lcXVhbDsKKyAgICAgIAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnNpemVfdHlwZSBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpwb2ludGVyIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnJlZmVyZW5jZSByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKKyAgICAgIAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6Oml0ZXJhdG9yIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgICAgCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CisgICAgICAKKyAgICAgIGhhc2hlcgorICAgICAgaGFzaF9mdW5jdCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5oYXNoX2Z1bmN0KCk7IH0KKworICAgICAga2V5X2VxdWFsCisgICAgICBrZXlfZXEoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQua2V5X2VxKCk7IH0KKworICAgICAgYWxsb2NhdG9yX3R5cGUKKyAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZ2V0X2FsbG9jYXRvcigpOyB9CisKKyAgICAgIGhhc2hfbWFwKCkKKyAgICAgIDogX01faHQoMTAwLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CisgIAorICAgICAgZXhwbGljaXQKKyAgICAgIGhhc2hfbWFwKHNpemVfdHlwZSBfX24pCisgICAgICA6IF9NX2h0KF9fbiwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQorCisgICAgICBoYXNoX21hcChzaXplX3R5cGUgX19uLCBjb25zdCBoYXNoZXImIF9faGYpCisgICAgICA6IF9NX2h0KF9fbiwgX19oZiwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CisKKyAgICAgIGhhc2hfbWFwKHNpemVfdHlwZSBfX24sIGNvbnN0IGhhc2hlciYgX19oZiwgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCwKKwkgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9NX2h0KF9fbiwgX19oZiwgX19lcWwsIF9fYSkge30KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGhhc2hfbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sKQorCTogX01faHQoMTAwLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCisgICAgICAgIHsgX01faHQuaW5zZXJ0X3VuaXF1ZShfX2YsIF9fbCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGhhc2hfbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19uKQorCTogX01faHQoX19uLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCisgICAgICAgIHsgX01faHQuaW5zZXJ0X3VuaXF1ZShfX2YsIF9fbCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGhhc2hfbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19uLAorCQkgY29uc3QgaGFzaGVyJiBfX2hmKQorCTogX01faHQoX19uLCBfX2hmLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19sKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgaGFzaF9tYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24sCisJCSBjb25zdCBoYXNoZXImIF9faGYsIGNvbnN0IGtleV9lcXVhbCYgX19lcWwsCisJCSBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKwk6IF9NX2h0KF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19sKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIHNpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuc2l6ZSgpOyB9CisgICAgICAKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQubWF4X3NpemUoKTsgfQorICAgICAgCisgICAgICBib29sCisgICAgICBlbXB0eSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5lbXB0eSgpOyB9CisgIAorICAgICAgdm9pZAorICAgICAgc3dhcChoYXNoX21hcCYgX19ocykKKyAgICAgIHsgX01faHQuc3dhcChfX2hzLl9NX2h0KTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0hGLCBjbGFzcyBfRXFLLCBjbGFzcyBfQWw+CisgICAgICAgIGZyaWVuZCBib29sCisgICAgICAgIG9wZXJhdG9yPT0gKGNvbnN0IGhhc2hfbWFwPF9LMSwgX1QxLCBfSEYsIF9FcUssIF9BbD4mLAorCQkgICAgY29uc3QgaGFzaF9tYXA8X0sxLCBfVDEsIF9IRiwgX0VxSywgX0FsPiYpOworCisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKQorICAgICAgeyByZXR1cm4gX01faHQuYmVnaW4oKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVuZCgpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5iZWdpbigpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZW5kKCk7IH0KKworICAgICAgcGFpcjxpdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICAgIHsgcmV0dXJuIF9NX2h0Lmluc2VydF91bmlxdWUoX19vYmopOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19sKTsgfQorCisgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPgorICAgICAgaW5zZXJ0X25vcmVzaXplKGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQorICAgICAgeyByZXR1cm4gX01faHQuaW5zZXJ0X3VuaXF1ZV9ub3Jlc2l6ZShfX29iaik7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQorICAgICAgeyByZXR1cm4gX01faHQuZmluZChfX2tleSk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZmluZChfX2tleSk7IH0KKworICAgICAgX1RwJgorICAgICAgb3BlcmF0b3JbXShjb25zdCBrZXlfdHlwZSYgX19rZXkpCisgICAgICB7IHJldHVybiBfTV9odC5maW5kX29yX2luc2VydCh2YWx1ZV90eXBlKF9fa2V5LCBfVHAoKSkpLnNlY29uZDsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmNvdW50KF9fa2V5KTsgfQorCisgICAgICBwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2tleSkKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVxdWFsX3JhbmdlKF9fa2V5KTsgfQorCisgICAgICBwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVxdWFsX3JhbmdlKF9fa2V5KTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX2tleSkKKyAgICAgIHtyZXR1cm4gX01faHQuZXJhc2UoX19rZXkpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9faXQpCisgICAgICB7IF9NX2h0LmVyYXNlKF9faXQpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZiwgaXRlcmF0b3IgX19sKQorICAgICAgeyBfTV9odC5lcmFzZShfX2YsIF9fbCk7IH0KKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKQorICAgICAgeyBfTV9odC5jbGVhcigpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19oaW50KQorICAgICAgeyBfTV9odC5yZXNpemUoX19oaW50KTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGJ1Y2tldF9jb3VudCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5idWNrZXRfY291bnQoKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9idWNrZXRfY291bnQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQubWF4X2J1Y2tldF9jb3VudCgpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgZWxlbXNfaW5fYnVja2V0KHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5lbGVtc19pbl9idWNrZXQoX19uKTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaEZuLCBjbGFzcyBfRXFsS2V5LCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGhhc2hfbWFwPF9LZXksIF9UcCwgX0hhc2hGbiwgX0VxbEtleSwgX0FsbG9jPiYgX19obTEsCisJICAgICAgIGNvbnN0IGhhc2hfbWFwPF9LZXksIF9UcCwgX0hhc2hGbiwgX0VxbEtleSwgX0FsbG9jPiYgX19obTIpCisgICAgeyByZXR1cm4gX19obTEuX01faHQgPT0gX19obTIuX01faHQ7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoRm4sIGNsYXNzIF9FcWxLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgaGFzaF9tYXA8X0tleSwgX1RwLCBfSGFzaEZuLCBfRXFsS2V5LCBfQWxsb2M+JiBfX2htMSwKKwkgICAgICAgY29uc3QgaGFzaF9tYXA8X0tleSwgX1RwLCBfSGFzaEZuLCBfRXFsS2V5LCBfQWxsb2M+JiBfX2htMikKKyAgICB7IHJldHVybiAhKF9faG0xID09IF9faG0yKTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2hGbiwgY2xhc3MgX0VxbEtleSwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChoYXNoX21hcDxfS2V5LCBfVHAsIF9IYXNoRm4sIF9FcWxLZXksIF9BbGxvYz4mIF9faG0xLAorCSBoYXNoX21hcDxfS2V5LCBfVHAsIF9IYXNoRm4sIF9FcWxLZXksIF9BbGxvYz4mIF9faG0yKQorICAgIHsgX19obTEuc3dhcChfX2htMik7IH0KKworCisgIC8qKgorICAgKiAgVGhpcyBpcyBhbiBTR0kgZXh0ZW5zaW9uLgorICAgKiAgQGluZ3JvdXAgU0dJZXh0ZW5zaW9ucworICAgKiAgQGRvY3RvZG8KKyAgICovCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwKKwkgICBjbGFzcyBfSGFzaEZuID0gaGFzaDxfS2V5PiwKKwkgICBjbGFzcyBfRXF1YWxLZXkgPSBlcXVhbF90bzxfS2V5PiwKKwkgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X1RwPiA+CisgICAgY2xhc3MgaGFzaF9tdWx0aW1hcAorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX0tleSwgX1NHSUFzc2lnbmFibGVDb25jZXB0KQorICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzKF9UcCwgX1NHSUFzc2lnbmFibGVDb25jZXB0KQorICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzMyhfSGFzaEZuLCBzaXplX3QsIF9LZXksIF9VbmFyeUZ1bmN0aW9uQ29uY2VwdCkKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlczMoX0VxdWFsS2V5LCBfS2V5LCBfS2V5LCBfQmluYXJ5UHJlZGljYXRlQ29uY2VwdCkKKwkKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBoYXNodGFibGU8cGFpcjxjb25zdCBfS2V5LCBfVHA+LCBfS2V5LCBfSGFzaEZuLAorCQkJX1NlbGVjdDFzdDxwYWlyPGNvbnN0IF9LZXksIF9UcD4gPiwgX0VxdWFsS2V5LCBfQWxsb2M+CisgICAgICAgICAgX0h0OworCisgICAgICBfSHQgX01faHQ7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6a2V5X3R5cGUga2V5X3R5cGU7CisgICAgICB0eXBlZGVmIF9UcCBkYXRhX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcCBtYXBwZWRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6aGFzaGVyIGhhc2hlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjprZXlfZXF1YWwga2V5X2VxdWFsOworICAgICAgCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6c2l6ZV90eXBlIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnBvaW50ZXIgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOworICAgICAgCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgICAKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIAorICAgICAgaGFzaGVyCisgICAgICBoYXNoX2Z1bmN0KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0Lmhhc2hfZnVuY3QoKTsgfQorCisgICAgICBrZXlfZXF1YWwKKyAgICAgIGtleV9lcSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5rZXlfZXEoKTsgfQorCisgICAgICBhbGxvY2F0b3JfdHlwZQorICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5nZXRfYWxsb2NhdG9yKCk7IH0KKworICAgICAgaGFzaF9tdWx0aW1hcCgpCisgICAgICA6IF9NX2h0KDEwMCwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQorCisgICAgICBleHBsaWNpdAorICAgICAgaGFzaF9tdWx0aW1hcChzaXplX3R5cGUgX19uKQorICAgICAgOiBfTV9odChfX24sIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KKworICAgICAgaGFzaF9tdWx0aW1hcChzaXplX3R5cGUgX19uLCBjb25zdCBoYXNoZXImIF9faGYpCisgICAgICA6IF9NX2h0KF9fbiwgX19oZiwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CisKKyAgICAgIGhhc2hfbXVsdGltYXAoc2l6ZV90eXBlIF9fbiwgY29uc3QgaGFzaGVyJiBfX2hmLCBjb25zdCBrZXlfZXF1YWwmIF9fZXFsLAorCQkgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9NX2h0KF9fbiwgX19oZiwgX19lcWwsIF9fYSkge30KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGhhc2hfbXVsdGltYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wpCisJOiBfTV9odCgxMDAsIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfZXF1YWwoX19mLCBfX2wpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBoYXNoX211bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19uKQorCTogX01faHQoX19uLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCisgICAgICAgIHsgX01faHQuaW5zZXJ0X2VxdWFsKF9fZiwgX19sKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgaGFzaF9tdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbiwKKwkJICAgICAgY29uc3QgaGFzaGVyJiBfX2hmKQorCTogX01faHQoX19uLCBfX2hmLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfZXF1YWwoX19mLCBfX2wpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBoYXNoX211bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19uLAorCQkgICAgICBjb25zdCBoYXNoZXImIF9faGYsIGNvbnN0IGtleV9lcXVhbCYgX19lcWwsCisJCSAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX01faHQoX19uLCBfX2hmLCBfX2VxbCwgX19hKQorICAgICAgICB7IF9NX2h0Lmluc2VydF9lcXVhbChfX2YsIF9fbCk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LnNpemUoKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0Lm1heF9zaXplKCk7IH0KKworICAgICAgYm9vbAorICAgICAgZW1wdHkoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZW1wdHkoKTsgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKGhhc2hfbXVsdGltYXAmIF9faHMpCisgICAgICB7IF9NX2h0LnN3YXAoX19ocy5fTV9odCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0sxLCBjbGFzcyBfVDEsIGNsYXNzIF9IRiwgY2xhc3MgX0VxSywgY2xhc3MgX0FsPgorICAgICAgICBmcmllbmQgYm9vbAorICAgICAgICBvcGVyYXRvcj09KGNvbnN0IGhhc2hfbXVsdGltYXA8X0sxLCBfVDEsIF9IRiwgX0VxSywgX0FsPiYsCisJCSAgIGNvbnN0IGhhc2hfbXVsdGltYXA8X0sxLCBfVDEsIF9IRiwgX0VxSywgX0FsPiYpOworCisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKQorICAgICAgeyByZXR1cm4gX01faHQuYmVnaW4oKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVuZCgpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5iZWdpbigpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZW5kKCk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICAgIHsgcmV0dXJuIF9NX2h0Lmluc2VydF9lcXVhbChfX29iaik7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sKQorICAgICAgICB7IF9NX2h0Lmluc2VydF9lcXVhbChfX2YsX19sKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0X25vcmVzaXplKGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQorICAgICAgeyByZXR1cm4gX01faHQuaW5zZXJ0X2VxdWFsX25vcmVzaXplKF9fb2JqKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rZXkpCisgICAgICB7IHJldHVybiBfTV9odC5maW5kKF9fa2V5KTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5maW5kKF9fa2V5KTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmNvdW50KF9fa2V5KTsgfQorCisgICAgICBwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2tleSkKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVxdWFsX3JhbmdlKF9fa2V5KTsgfQorCisgICAgICBwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVxdWFsX3JhbmdlKF9fa2V5KTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX2tleSkKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVyYXNlKF9fa2V5KTsgfQorCisgICAgICB2b2lkCisgICAgICBlcmFzZShpdGVyYXRvciBfX2l0KQorICAgICAgeyBfTV9odC5lcmFzZShfX2l0KTsgfQorCisgICAgICB2b2lkCisgICAgICBlcmFzZShpdGVyYXRvciBfX2YsIGl0ZXJhdG9yIF9fbCkKKyAgICAgIHsgX01faHQuZXJhc2UoX19mLCBfX2wpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCkKKyAgICAgIHsgX01faHQuY2xlYXIoKTsgfQorCisgICAgICB2b2lkCisgICAgICByZXNpemUoc2l6ZV90eXBlIF9faGludCkKKyAgICAgIHsgX01faHQucmVzaXplKF9faGludCk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBidWNrZXRfY291bnQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuYnVja2V0X2NvdW50KCk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfYnVja2V0X2NvdW50KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0Lm1heF9idWNrZXRfY291bnQoKTsgfQorICAgICAgCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVsZW1zX2luX2J1Y2tldChzaXplX3R5cGUgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZWxlbXNfaW5fYnVja2V0KF9fbik7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hGLCBjbGFzcyBfRXFLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgaGFzaF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IRiwgX0VxS2V5LCBfQWxsb2M+JiBfX2htMSwKKwkgICAgICAgY29uc3QgaGFzaF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IRiwgX0VxS2V5LCBfQWxsb2M+JiBfX2htMikKKyAgICB7IHJldHVybiBfX2htMS5fTV9odCA9PSBfX2htMi5fTV9odDsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hGLCBjbGFzcyBfRXFLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgaGFzaF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IRiwgX0VxS2V5LCBfQWxsb2M+JiBfX2htMSwKKwkgICAgICAgY29uc3QgaGFzaF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IRiwgX0VxS2V5LCBfQWxsb2M+JiBfX2htMikKKyAgICB7IHJldHVybiAhKF9faG0xID09IF9faG0yKTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2hGbiwgY2xhc3MgX0VxbEtleSwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChoYXNoX211bHRpbWFwPF9LZXksIF9UcCwgX0hhc2hGbiwgX0VxbEtleSwgX0FsbG9jPiYgX19obTEsCisJIGhhc2hfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaEZuLCBfRXFsS2V5LCBfQWxsb2M+JiBfX2htMikKKyAgICB7IF9faG0xLnN3YXAoX19obTIpOyB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvLyBTcGVjaWFsaXphdGlvbiBvZiBpbnNlcnRfaXRlcmF0b3Igc28gdGhhdCBpdCB3aWxsIHdvcmsgZm9yIGhhc2hfbWFwCisgIC8vIGFuZCBoYXNoX211bHRpbWFwLgorICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoRm4sICBjbGFzcyBfRXFLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBjbGFzcyBpbnNlcnRfaXRlcmF0b3I8X19nbnVfY3h4OjpoYXNoX21hcDxfS2V5LCBfVHAsIF9IYXNoRm4sIAorCQkJCQkgICAgICBfRXFLZXksIF9BbGxvYz4gPgorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6aGFzaF9tYXA8X0tleSwgX1RwLCBfSGFzaEZuLCBfRXFLZXksIF9BbGxvYz4KKyAgICAgICAgX0NvbnRhaW5lcjsKKyAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWluZXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIAorICAgICAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkKKyAgICAgIDogY29udGFpbmVyKCZfX3gpIHt9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yKQorICAgICAgOiBjb250YWluZXIoJl9feCkge30KKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpCisgICAgICB7CisJY29udGFpbmVyLT5pbnNlcnQoX192YWx1ZSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCisgICAgICBvcGVyYXRvciooKQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgorICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2hGbiwgIGNsYXNzIF9FcUtleSwgY2xhc3MgX0FsbG9jPgorICAgIGNsYXNzIGluc2VydF9pdGVyYXRvcjxfX2dudV9jeHg6Omhhc2hfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaEZuLAorCQkJCQkJICAgX0VxS2V5LCBfQWxsb2M+ID4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Omhhc2hfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaEZuLCBfRXFLZXksIF9BbGxvYz4KKyAgICAgICAgX0NvbnRhaW5lcjsKKyAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsKKyAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5cGU7CisgICAgICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisKKyAgICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpCisgICAgICA6IGNvbnRhaW5lcigmX194KSB7fQorCisgICAgICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvcikKKyAgICAgIDogY29udGFpbmVyKCZfX3gpIHt9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKQorICAgICAgeworCWNvbnRhaW5lci0+aW5zZXJ0KF9fdmFsdWUpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgorICAgICAgb3BlcmF0b3IqKCkKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorICAgIH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9oYXNoX3NldCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L2hhc2hfc2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMmFkZTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9oYXNoX3NldApAQCAtMCwwICsxLDU1OSBAQAorLy8gSGFzaGluZyBzZXQgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA5LCAyMDEwCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk2CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKi8KKworLyoqIEBmaWxlIGJhY2t3YXJkL2hhc2hfc2V0CisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkgKHBvc3NpYmx5CisgKiAgY29udGFpbmluZyBleHRlbnNpb25zIGZyb20gdGhlIEhQL1NHSSBTVEwgc3Vic2V0KS4KKyAqLworCisjaWZuZGVmIF9CQUNLV0FSRF9IQVNIX1NFVAorI2RlZmluZSBfQkFDS1dBUkRfSEFTSF9TRVQgMQorCisjaW5jbHVkZSAiYmFja3dhcmRfd2FybmluZy5oIgorI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8YmFja3dhcmQvaGFzaHRhYmxlLmg+CisjaW5jbHVkZSA8Yml0cy9jb25jZXB0X2NoZWNrLmg+CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisKKyAgdXNpbmcgc3RkOjplcXVhbF90bzsKKyAgdXNpbmcgc3RkOjphbGxvY2F0b3I7CisgIHVzaW5nIHN0ZDo6cGFpcjsKKyAgdXNpbmcgc3RkOjpfSWRlbnRpdHk7CisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIFNHSSBleHRlbnNpb24uCisgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICAqICBAZG9jdG9kbworICAgKi8KKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfSGFzaEZjbiAgPSBoYXNoPF9WYWx1ZT4sCisJICAgY2xhc3MgX0VxdWFsS2V5ID0gZXF1YWxfdG88X1ZhbHVlPiwKKwkgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X1ZhbHVlPiA+CisgICAgY2xhc3MgaGFzaF9zZXQKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzKF9WYWx1ZSwgX1NHSUFzc2lnbmFibGVDb25jZXB0KQorICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzMyhfSGFzaEZjbiwgc2l6ZV90LCBfVmFsdWUsIF9VbmFyeUZ1bmN0aW9uQ29uY2VwdCkKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlczMoX0VxdWFsS2V5LCBfVmFsdWUsIF9WYWx1ZSwgX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQpCisKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBoYXNodGFibGU8X1ZhbHVlLCBfVmFsdWUsIF9IYXNoRmNuLCBfSWRlbnRpdHk8X1ZhbHVlPiwKKwkJCV9FcXVhbEtleSwgX0FsbG9jPiBfSHQ7CisgICAgICBfSHQgX01faHQ7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6a2V5X3R5cGUga2V5X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6Omhhc2hlciBoYXNoZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6a2V5X2VxdWFsIGtleV9lcXVhbDsKKyAgICAgIAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnNpemVfdHlwZSBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpwb2ludGVyIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnJlZmVyZW5jZSByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKKyAgICAgIAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgICAgCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CisgICAgICAKKyAgICAgIGhhc2hlcgorICAgICAgaGFzaF9mdW5jdCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5oYXNoX2Z1bmN0KCk7IH0KKworICAgICAga2V5X2VxdWFsCisgICAgICBrZXlfZXEoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQua2V5X2VxKCk7IH0KKworICAgICAgYWxsb2NhdG9yX3R5cGUKKyAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZ2V0X2FsbG9jYXRvcigpOyB9CisKKyAgICAgIGhhc2hfc2V0KCkKKyAgICAgIDogX01faHQoMTAwLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBoYXNoX3NldChzaXplX3R5cGUgX19uKQorICAgICAgOiBfTV9odChfX24sIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KKworICAgICAgaGFzaF9zZXQoc2l6ZV90eXBlIF9fbiwgY29uc3QgaGFzaGVyJiBfX2hmKQorICAgICAgOiBfTV9odChfX24sIF9faGYsIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQorCisgICAgICBoYXNoX3NldChzaXplX3R5cGUgX19uLCBjb25zdCBoYXNoZXImIF9faGYsIGNvbnN0IGtleV9lcXVhbCYgX19lcWwsCisJICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfTV9odChfX24sIF9faGYsIF9fZXFsLCBfX2EpIHt9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBoYXNoX3NldChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCkKKwk6IF9NX2h0KDEwMCwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgICB7IF9NX2h0Lmluc2VydF91bmlxdWUoX19mLCBfX2wpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBoYXNoX3NldChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbikKKwk6IF9NX2h0KF9fbiwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgICB7IF9NX2h0Lmluc2VydF91bmlxdWUoX19mLCBfX2wpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBoYXNoX3NldChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbiwKKwkJIGNvbnN0IGhhc2hlciYgX19oZikKKwk6IF9NX2h0KF9fbiwgX19oZiwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCisgICAgICAgIHsgX01faHQuaW5zZXJ0X3VuaXF1ZShfX2YsIF9fbCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGhhc2hfc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19uLAorCQkgY29uc3QgaGFzaGVyJiBfX2hmLCBjb25zdCBrZXlfZXF1YWwmIF9fZXFsLAorCQkgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfTV9odChfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICAgIHsgX01faHQuaW5zZXJ0X3VuaXF1ZShfX2YsIF9fbCk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LnNpemUoKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0Lm1heF9zaXplKCk7IH0KKyAgICAgIAorICAgICAgYm9vbAorICAgICAgZW1wdHkoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZW1wdHkoKTsgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICBzd2FwKGhhc2hfc2V0JiBfX2hzKQorICAgICAgeyBfTV9odC5zd2FwKF9faHMuX01faHQpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9IRiwgY2xhc3MgX0VxSywgY2xhc3MgX0FsPgorICAgICAgICBmcmllbmQgYm9vbAorICAgICAgICBvcGVyYXRvcj09KGNvbnN0IGhhc2hfc2V0PF9WYWwsIF9IRiwgX0VxSywgX0FsPiYsCisJCSAgIGNvbnN0IGhhc2hfc2V0PF9WYWwsIF9IRiwgX0VxSywgX0FsPiYpOworCisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuYmVnaW4oKTsgfQorICAgICAgCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVuZCgpOyB9CisKKyAgICAgIHBhaXI8aXRlcmF0b3IsIGJvb2w+CisgICAgICBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCisgICAgICB7CisJcGFpcjx0eXBlbmFtZSBfSHQ6Oml0ZXJhdG9yLCBib29sPiBfX3AgPSBfTV9odC5pbnNlcnRfdW5pcXVlKF9fb2JqKTsKKwlyZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihfX3AuZmlyc3QsIF9fcC5zZWNvbmQpOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wpCisgICAgICAgIHsgX01faHQuaW5zZXJ0X3VuaXF1ZShfX2YsIF9fbCk7IH0KKworICAgICAgcGFpcjxpdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydF9ub3Jlc2l6ZShjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICAgIHsKKwlwYWlyPHR5cGVuYW1lIF9IdDo6aXRlcmF0b3IsIGJvb2w+IF9fcAorCSAgPSBfTV9odC5pbnNlcnRfdW5pcXVlX25vcmVzaXplKF9fb2JqKTsKKwlyZXR1cm4gcGFpcjxpdGVyYXRvciwgYm9vbD4oX19wLmZpcnN0LCBfX3Auc2Vjb25kKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZmluZChfX2tleSk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBjb3VudChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5jb3VudChfX2tleSk7IH0KKworICAgICAgcGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5lcXVhbF9yYW5nZShfX2tleSk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX19rZXkpCisgICAgICB7cmV0dXJuIF9NX2h0LmVyYXNlKF9fa2V5KTsgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICBlcmFzZShpdGVyYXRvciBfX2l0KQorICAgICAgeyBfTV9odC5lcmFzZShfX2l0KTsgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICBlcmFzZShpdGVyYXRvciBfX2YsIGl0ZXJhdG9yIF9fbCkKKyAgICAgIHsgX01faHQuZXJhc2UoX19mLCBfX2wpOyB9CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCkKKyAgICAgIHsgX01faHQuY2xlYXIoKTsgfQorCisgICAgICB2b2lkCisgICAgICByZXNpemUoc2l6ZV90eXBlIF9faGludCkKKyAgICAgIHsgX01faHQucmVzaXplKF9faGludCk7IH0KKyAgICAgIAorICAgICAgc2l6ZV90eXBlCisgICAgICBidWNrZXRfY291bnQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuYnVja2V0X2NvdW50KCk7IH0KKyAgICAgIAorICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfYnVja2V0X2NvdW50KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0Lm1heF9idWNrZXRfY291bnQoKTsgfQorICAgICAgCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVsZW1zX2luX2J1Y2tldChzaXplX3R5cGUgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZWxlbXNfaW5fYnVja2V0KF9fbik7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBoYXNoX3NldDxfVmFsdWUsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMxLAorCSAgICAgICBjb25zdCBoYXNoX3NldDxfVmFsdWUsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMyKQorICAgIHsgcmV0dXJuIF9faHMxLl9NX2h0ID09IF9faHMyLl9NX2h0OyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfSGFzaEZjbiwgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IGhhc2hfc2V0PF9WYWx1ZSwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczEsCisJICAgICAgIGNvbnN0IGhhc2hfc2V0PF9WYWx1ZSwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczIpCisgICAgeyByZXR1cm4gIShfX2hzMSA9PSBfX2hzMik7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsLCBjbGFzcyBfSGFzaEZjbiwgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKGhhc2hfc2V0PF9WYWwsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMxLAorCSBoYXNoX3NldDxfVmFsLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMikKKyAgICB7IF9faHMxLnN3YXAoX19oczIpOyB9CisKKworICAvKioKKyAgICogIFRoaXMgaXMgYW4gU0dJIGV4dGVuc2lvbi4KKyAgICogIEBpbmdyb3VwIFNHSWV4dGVuc2lvbnMKKyAgICogIEBkb2N0b2RvCisgICAqLworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsdWUsCisJICAgY2xhc3MgX0hhc2hGY24gPSBoYXNoPF9WYWx1ZT4sCisJICAgY2xhc3MgX0VxdWFsS2V5ID0gZXF1YWxfdG88X1ZhbHVlPiwKKwkgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X1ZhbHVlPiA+CisgICAgY2xhc3MgaGFzaF9tdWx0aXNldAorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX1ZhbHVlLCBfU0dJQXNzaWduYWJsZUNvbmNlcHQpCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMzKF9IYXNoRmNuLCBzaXplX3QsIF9WYWx1ZSwgX1VuYXJ5RnVuY3Rpb25Db25jZXB0KQorICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzMyhfRXF1YWxLZXksIF9WYWx1ZSwgX1ZhbHVlLCBfQmluYXJ5UHJlZGljYXRlQ29uY2VwdCkKKworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIGhhc2h0YWJsZTxfVmFsdWUsIF9WYWx1ZSwgX0hhc2hGY24sIF9JZGVudGl0eTxfVmFsdWU+LAorCQkJX0VxdWFsS2V5LCBfQWxsb2M+IF9IdDsKKyAgICAgIF9IdCBfTV9odDsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjprZXlfdHlwZSBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6aGFzaGVyIGhhc2hlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjprZXlfZXF1YWwga2V5X2VxdWFsOworICAgICAgCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6c2l6ZV90eXBlIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnBvaW50ZXIgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgICAKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIAorICAgICAgaGFzaGVyCisgICAgICBoYXNoX2Z1bmN0KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0Lmhhc2hfZnVuY3QoKTsgfQorICAgICAgCisgICAgICBrZXlfZXF1YWwKKyAgICAgIGtleV9lcSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5rZXlfZXEoKTsgfQorICAgICAgCisgICAgICBhbGxvY2F0b3JfdHlwZQorICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5nZXRfYWxsb2NhdG9yKCk7IH0KKworICAgICAgaGFzaF9tdWx0aXNldCgpCisgICAgICA6IF9NX2h0KDEwMCwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQorCisgICAgICBleHBsaWNpdAorICAgICAgaGFzaF9tdWx0aXNldChzaXplX3R5cGUgX19uKQorICAgICAgOiBfTV9odChfX24sIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KKworICAgICAgaGFzaF9tdWx0aXNldChzaXplX3R5cGUgX19uLCBjb25zdCBoYXNoZXImIF9faGYpCisgICAgICA6IF9NX2h0KF9fbiwgX19oZiwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CisgICAgICAKKyAgICAgIGhhc2hfbXVsdGlzZXQoc2l6ZV90eXBlIF9fbiwgY29uc3QgaGFzaGVyJiBfX2hmLCBjb25zdCBrZXlfZXF1YWwmIF9fZXFsLAorCQkgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9NX2h0KF9fbiwgX19oZiwgX19lcWwsIF9fYSkge30KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGhhc2hfbXVsdGlzZXQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wpCisJOiBfTV9odCgxMDAsIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfZXF1YWwoX19mLCBfX2wpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBoYXNoX211bHRpc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19uKQorCTogX01faHQoX19uLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCisgICAgICAgIHsgX01faHQuaW5zZXJ0X2VxdWFsKF9fZiwgX19sKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgaGFzaF9tdWx0aXNldChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbiwKKwkJICAgICAgY29uc3QgaGFzaGVyJiBfX2hmKQorCTogX01faHQoX19uLCBfX2hmLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfZXF1YWwoX19mLCBfX2wpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBoYXNoX211bHRpc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19uLAorCQkgICAgICBjb25zdCBoYXNoZXImIF9faGYsIGNvbnN0IGtleV9lcXVhbCYgX19lcWwsCisJCSAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX01faHQoX19uLCBfX2hmLCBfX2VxbCwgX19hKQorICAgICAgICB7IF9NX2h0Lmluc2VydF9lcXVhbChfX2YsIF9fbCk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LnNpemUoKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0Lm1heF9zaXplKCk7IH0KKworICAgICAgYm9vbAorICAgICAgZW1wdHkoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZW1wdHkoKTsgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKGhhc2hfbXVsdGlzZXQmIGhzKQorICAgICAgeyBfTV9odC5zd2FwKGhzLl9NX2h0KTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfVmFsLCBjbGFzcyBfSEYsIGNsYXNzIF9FcUssIGNsYXNzIF9BbD4KKyAgICAgICAgZnJpZW5kIGJvb2wKKyAgICAgICAgb3BlcmF0b3I9PShjb25zdCBoYXNoX211bHRpc2V0PF9WYWwsIF9IRiwgX0VxSywgX0FsPiYsCisJCSAgIGNvbnN0IGhhc2hfbXVsdGlzZXQ8X1ZhbCwgX0hGLCBfRXFLLCBfQWw+Jik7CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5iZWdpbigpOyB9CisgICAgICAKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZW5kKCk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICAgIHsgcmV0dXJuIF9NX2h0Lmluc2VydF9lcXVhbChfX29iaik7IH0KKyAgCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wpCisgICAgICAgIHsgX01faHQuaW5zZXJ0X2VxdWFsKF9fZixfX2wpOyB9CisgIAorICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydF9ub3Jlc2l6ZShjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICAgIHsgcmV0dXJuIF9NX2h0Lmluc2VydF9lcXVhbF9ub3Jlc2l6ZShfX29iaik7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZmluZChfX2tleSk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBjb3VudChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5jb3VudChfX2tleSk7IH0KKworICAgICAgcGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5lcXVhbF9yYW5nZShfX2tleSk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX19rZXkpCisgICAgICB7IHJldHVybiBfTV9odC5lcmFzZShfX2tleSk7IH0KKyAgCisgICAgICB2b2lkCisgICAgICBlcmFzZShpdGVyYXRvciBfX2l0KQorICAgICAgeyBfTV9odC5lcmFzZShfX2l0KTsgfQorICAKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZiwgaXRlcmF0b3IgX19sKQorICAgICAgeyBfTV9odC5lcmFzZShfX2YsIF9fbCk7IH0KKyAgCisgICAgICB2b2lkCisgICAgICBjbGVhcigpCisgICAgICB7IF9NX2h0LmNsZWFyKCk7IH0KKworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX2hpbnQpCisgICAgICB7IF9NX2h0LnJlc2l6ZShfX2hpbnQpOyB9CisgIAorICAgICAgc2l6ZV90eXBlCisgICAgICBidWNrZXRfY291bnQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuYnVja2V0X2NvdW50KCk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfYnVja2V0X2NvdW50KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0Lm1heF9idWNrZXRfY291bnQoKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVsZW1zX2luX2J1Y2tldChzaXplX3R5cGUgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZWxlbXNfaW5fYnVja2V0KF9fbik7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgaGFzaF9tdWx0aXNldDxfVmFsLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMSwKKwkgICAgICAgY29uc3QgaGFzaF9tdWx0aXNldDxfVmFsLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMikKKyAgICB7IHJldHVybiBfX2hzMS5fTV9odCA9PSBfX2hzMi5fTV9odDsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgaGFzaF9tdWx0aXNldDxfVmFsLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMSwKKwkgICAgICAgY29uc3QgaGFzaF9tdWx0aXNldDxfVmFsLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMikKKyAgICB7IHJldHVybiAhKF9faHMxID09IF9faHMyKTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoaGFzaF9tdWx0aXNldDxfVmFsLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMSwKKwkgaGFzaF9tdWx0aXNldDxfVmFsLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMikKKyAgICB7IF9faHMxLnN3YXAoX19oczIpOyB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvLyBTcGVjaWFsaXphdGlvbiBvZiBpbnNlcnRfaXRlcmF0b3Igc28gdGhhdCBpdCB3aWxsIHdvcmsgZm9yIGhhc2hfc2V0CisgIC8vIGFuZCBoYXNoX211bHRpc2V0LgorICB0ZW1wbGF0ZTxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBjbGFzcyBpbnNlcnRfaXRlcmF0b3I8X19nbnVfY3h4OjpoYXNoX3NldDxfVmFsdWUsIF9IYXNoRmNuLAorCQkJCQkgICAgICBfRXF1YWxLZXksIF9BbGxvYz4gPgorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6aGFzaF9zZXQ8X1ZhbHVlLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+CisgICAgICAgIF9Db250YWluZXI7CisgICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5cGU7CisgICAgICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisKKyAgICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpCisgICAgICA6IGNvbnRhaW5lcigmX194KSB7fQorICAgICAgCisgICAgICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvcikKKyAgICAgIDogY29udGFpbmVyKCZfX3gpIHt9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKQorICAgICAgeworCWNvbnRhaW5lci0+aW5zZXJ0KF9fdmFsdWUpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgorICAgICAgb3BlcmF0b3IqKCkKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisgICAgICAKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKyAgICAgIAorICAgICAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfSGFzaEZjbiwgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+CisgICAgY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yPF9fZ251X2N4eDo6aGFzaF9tdWx0aXNldDxfVmFsdWUsIF9IYXNoRmNuLAorCQkJCQkJICAgX0VxdWFsS2V5LCBfQWxsb2M+ID4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Omhhc2hfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+CisgICAgICAgIF9Db250YWluZXI7CisgICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7CisgICAgICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBpdGVyOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfQ29udGFpbmVyICAgICAgICAgIGNvbnRhaW5lcl90eXBlOworICAgICAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OworICAgICAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgCisgICAgICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KQorICAgICAgOiBjb250YWluZXIoJl9feCkge30KKyAgICAgIAorICAgICAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IpCisgICAgICA6IGNvbnRhaW5lcigmX194KSB7fQorCisgICAgICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCisgICAgICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkKKyAgICAgIHsKKwljb250YWluZXItPmluc2VydChfX3ZhbHVlKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yKigpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorCisgICAgICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCisgICAgICBvcGVyYXRvcisrKCkKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQorICAgIH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9pdGVyYXRvciBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L2l0ZXJhdG9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYjRiNTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9pdGVyYXRvcgpAQCAtMCwwICsxLDExMyBAQAorLy8gSFAvU0dJIGl0ZXJhdG9yIGV4dGVuc2lvbnMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDA0LCAyMDA1LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTgKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBleHQvaXRlcmF0b3IKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeSAocG9zc2libHkKKyAqICBjb250YWluaW5nIGV4dGVuc2lvbnMgZnJvbSB0aGUgSFAvU0dJIFNUTCBzdWJzZXQpLgorICovCisKKyNpZm5kZWYgX0VYVF9JVEVSQVRPUgorI2RlZmluZSBfRVhUX0lURVJBVE9SIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jb25jZXB0X2NoZWNrLmg+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisKKyAgLy8gVGhlcmUgYXJlIHR3byBzaWduYXR1cmVzIGZvciBkaXN0YW5jZS4gIEluIGFkZGl0aW9uIHRvIHRoZSBvbmUKKyAgLy8gdGFraW5nIHR3byBpdGVyYXRvcnMgYW5kIHJldHVybmluZyBhIHJlc3VsdCwgdGhlcmUgaXMgYW5vdGhlcgorICAvLyB0YWtpbmcgdHdvIGl0ZXJhdG9ycyBhbmQgYSByZWZlcmVuY2UtdG8tcmVzdWx0IHZhcmlhYmxlLCBhbmQKKyAgLy8gcmV0dXJuaW5nIG5vdGhpbmcuICBUaGUgbGF0dGVyIHNlZW1zIHRvIGJlIGFuIFNHSSBleHRlbnNpb24uCisgIC8vIC0tIHBlZHdhcmRzCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgICAgX0Rpc3RhbmNlJiBfX24sIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwl7CisJICArK19fZmlyc3Q7CisJICArK19fbjsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgorICAgIGlubGluZSB2b2lkCisgICAgX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKKwkgICAgICAgX0Rpc3RhbmNlJiBfX24sIHN0ZDo6cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPikKKyAgICAgIF9fbiArPSBfX2xhc3QgLSBfX2ZpcnN0OworICAgIH0KKworICAvKioKKyAgICogIFRoaXMgaXMgYW4gU0dJIGV4dGVuc2lvbi4KKyAgICogIEBpbmdyb3VwIFNHSWV4dGVuc2lvbnMKKyAgICogIEBkb2N0b2RvCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CisgICAgaW5saW5lIHZvaWQKKyAgICBkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisgICAgICAgICAgICAgX0Rpc3RhbmNlJiBfX24pCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMgLS0gdGFrZW4gY2FyZSBvZiBpbiBfX2Rpc3RhbmNlCisgICAgICBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uLCBzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOworICAgIH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvbWFsbG9jX2FsbG9jYXRvci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvbWFsbG9jX2FsbG9jYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MzJjNjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9tYWxsb2NfYWxsb2NhdG9yLmgKQEAgLTAsMCArMSwxMzQgQEAKKy8vIEFsbG9jYXRvciB0aGF0IHdyYXBzICJDIiBtYWxsb2MgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZXh0L21hbGxvY19hbGxvY2F0b3IuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX01BTExPQ19BTExPQ0FUT1JfSAorI2RlZmluZSBfTUFMTE9DX0FMTE9DQVRPUl9IIDEKKworI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8bmV3PgorI2luY2x1ZGUgPGJpdHMvZnVuY3RleGNlcHQuaD4KKyNpbmNsdWRlIDxiaXRzL21vdmUuaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKworICB1c2luZyBzdGQ6OnNpemVfdDsKKyAgdXNpbmcgc3RkOjpwdHJkaWZmX3Q7CisKKyAgLyoqCisgICAqICBAYnJpZWYgIEFuIGFsbG9jYXRvciB0aGF0IHVzZXMgbWFsbG9jLgorICAgKiAgQGluZ3JvdXAgYWxsb2NhdG9ycworICAgKgorICAgKiAgVGhpcyBpcyBwcmVjaXNlbHkgdGhlIGFsbG9jYXRvciBkZWZpbmVkIGluIHRoZSBDKysgU3RhbmRhcmQuIAorICAgKiAgICAtIGFsbCBhbGxvY2F0aW9uIGNhbGxzIG1hbGxvYworICAgKiAgICAtIGFsbCBkZWFsbG9jYXRpb24gY2FsbHMgZnJlZQorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIG1hbGxvY19hbGxvY2F0b3IKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBzaXplX3QgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgcHRyZGlmZl90ICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcCogICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiBfVHAmICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIF9UcCAgICAgICAgdmFsdWVfdHlwZTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgc3RydWN0IHJlYmluZAorICAgICAgICB7IHR5cGVkZWYgbWFsbG9jX2FsbG9jYXRvcjxfVHAxPiBvdGhlcjsgfTsKKworICAgICAgbWFsbG9jX2FsbG9jYXRvcigpIHRocm93KCkgeyB9CisKKyAgICAgIG1hbGxvY19hbGxvY2F0b3IoY29uc3QgbWFsbG9jX2FsbG9jYXRvciYpIHRocm93KCkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIG1hbGxvY19hbGxvY2F0b3IoY29uc3QgbWFsbG9jX2FsbG9jYXRvcjxfVHAxPiYpIHRocm93KCkgeyB9CisKKyAgICAgIH5tYWxsb2NfYWxsb2NhdG9yKCkgdGhyb3coKSB7IH0KKworICAgICAgcG9pbnRlcgorICAgICAgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CisKKyAgICAgIGNvbnN0X3BvaW50ZXIKKyAgICAgIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQorCisgICAgICAvLyBOQjogX19uIGlzIHBlcm1pdHRlZCB0byBiZSAwLiAgVGhlIEMrKyBzdGFuZGFyZCBzYXlzIG5vdGhpbmcKKyAgICAgIC8vIGFib3V0IHdoYXQgdGhlIHJldHVybiB2YWx1ZSBpcyB3aGVuIF9fbiA9PSAwLgorICAgICAgcG9pbnRlcgorICAgICAgYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAwKQorICAgICAgeworCWlmIChfX24gPiB0aGlzLT5tYXhfc2l6ZSgpKQorCSAgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOworCisJcG9pbnRlciBfX3JldCA9IHN0YXRpY19jYXN0PF9UcCo+KHN0ZDo6bWFsbG9jKF9fbiAqIHNpemVvZihfVHApKSk7CisJaWYgKCFfX3JldCkKKwkgIHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsKKwlyZXR1cm4gX19yZXQ7CisgICAgICB9CisKKyAgICAgIC8vIF9fcCBpcyBub3QgcGVybWl0dGVkIHRvIGJlIGEgbnVsbCBwb2ludGVyLgorICAgICAgdm9pZAorICAgICAgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlKQorICAgICAgeyBzdGQ6OmZyZWUoc3RhdGljX2Nhc3Q8dm9pZCo+KF9fcCkpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpIAorICAgICAgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDQwMi4gd3JvbmcgbmV3IGV4cHJlc3Npb24gaW4gW3NvbWVfXSBhbGxvY2F0b3I6OmNvbnN0cnVjdAorICAgICAgdm9pZCAKKyAgICAgIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgCisgICAgICB7IDo6bmV3KCh2b2lkICopX19wKSB2YWx1ZV90eXBlKF9fdmFsKTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICB2b2lkCisgICAgICAgIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgX0FyZ3MmJi4uLiBfX2FyZ3MpIAorCXsgOjpuZXcoKHZvaWQgKilfX3ApIF9UcChzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOyB9CisjZW5kaWYKKworICAgICAgdm9pZCAKKyAgICAgIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgbWFsbG9jX2FsbG9jYXRvcjxfVHA+JiwgY29uc3QgbWFsbG9jX2FsbG9jYXRvcjxfVHA+JikKKyAgICB7IHJldHVybiB0cnVlOyB9CisgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IG1hbGxvY19hbGxvY2F0b3I8X1RwPiYsIGNvbnN0IG1hbGxvY19hbGxvY2F0b3I8X1RwPiYpCisgICAgeyByZXR1cm4gZmFsc2U7IH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L21lbW9yeSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L21lbW9yeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Nzc2ZDczCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvbWVtb3J5CkBAIC0wLDAgKzEsMTk1IEBACisvLyBNZW1vcnkgZXh0ZW5zaW9ucyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgZXh0L21lbW9yeQorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IChwb3NzaWJseQorICogIGNvbnRhaW5pbmcgZXh0ZW5zaW9ucyBmcm9tIHRoZSBIUC9TR0kgU1RMIHN1YnNldCkuCisgKi8KKworI2lmbmRlZiBfRVhUX01FTU9SWQorI2RlZmluZSBfRVhUX01FTU9SWSAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxiaXRzL3N0bF90ZW1wYnVmLmg+CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisKKyAgdXNpbmcgc3RkOjpwdHJkaWZmX3Q7CisgIHVzaW5nIHN0ZDo6cGFpcjsKKyAgdXNpbmcgc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5OworICB1c2luZyBzdGQ6Ol9UZW1wb3JhcnlfYnVmZmVyOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CisgICAgcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+CisgICAgX191bmluaXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCisJCQkgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OworICAgICAgX190cnkKKwl7CisJICBmb3IgKDsgX19jb3VudCA+IDAgOyAtLV9fY291bnQsICsrX19maXJzdCwgKytfX2N1cikKKwkgICAgc3RkOjpfQ29uc3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsKKwkgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19jdXIpOworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIHN0ZDo6X0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyKTsKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CisgICAgaW5saW5lIHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJkSXRlcj4KKyAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCisJCQkgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCisJCQkgICBzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2NvdW50OworICAgICAgcmV0dXJuIChwYWlyPF9SYW5kb21BY2Nlc3NJdGVyLCBfRm9yd2FyZEl0ZXI+CisJICAgICAgKF9fbGFzdCwgc3RkOjp1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCkpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KKyAgICBpbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+CisgICAgX191bmluaXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCisJCQkgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCisgICAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAorCQkJCQkgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KKworICAvKioKKyAgICogIEBicmllZiBDb3BpZXMgdGhlIHJhbmdlIFtmaXJzdCxsYXN0KSBpbnRvIHJlc3VsdC4KKyAgICogIEBwYXJhbSAgZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBsYXN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIHJlc3VsdCBBbiBvdXRwdXQgaXRlcmF0b3IuCisgICAqICBAcmV0dXJuICAgcmVzdWx0ICsgKGZpcnN0IC0gbGFzdCkKKyAgICogIEBpbmdyb3VwIFNHSWV4dGVuc2lvbnMKKyAgICoKKyAgICogIExpa2UgY29weSgpLCBidXQgZG9lcyBub3QgcmVxdWlyZSBhbiBpbml0aWFsaXplZCBvdXRwdXQgcmFuZ2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CisgICAgaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPgorICAgIHVuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKKwkJCSBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCisgICAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAorCQkJCQkgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KKworCisgIC8vIEFuIGFsdGVybmF0aXZlIHZlcnNpb24gb2YgdW5pbml0aWFsaXplZF9jb3B5X24gdGhhdCBjb25zdHJ1Y3RzCisgIC8vIGFuZCBkZXN0cm95cyBvYmplY3RzIHdpdGggYSB1c2VyLXByb3ZpZGVkIGFsbG9jYXRvci4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwKKyAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4KKyAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9uX2EoX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAorCQkJICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCisJCQkgICAgIF9BbGxvY2F0b3IgX19hbGxvYykKKyAgICB7CisgICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKKyAgICAgIF9fdHJ5CisJeworCSAgZm9yICg7IF9fY291bnQgPiAwIDsgLS1fX2NvdW50LCArK19fZmlyc3QsICsrX19jdXIpCisJICAgIF9fYWxsb2MuY29uc3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsKKwkgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19jdXIpOworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIHN0ZDo6X0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyLCBfX2FsbG9jKTsKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwKKyAgICAgICAgICAgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4KKyAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9uX2EoX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAorCQkJICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCisJCQkgICAgIHN0ZDo6YWxsb2NhdG9yPF9UcD4pCisgICAgeworICAgICAgcmV0dXJuIF9fZ251X2N4eDo6dW5pbml0aWFsaXplZF9jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQpOworICAgIH0KKworICAvKioKKyAgICogIFRoaXMgY2xhc3MgcHJvdmlkZXMgc2ltaWxhciBiZWhhdmlvciBhbmQgc2VtYW50aWNzIG9mIHRoZSBzdGFuZGFyZAorICAgKiAgZnVuY3Rpb25zIGdldF90ZW1wb3JhcnlfYnVmZmVyKCkgYW5kIHJldHVybl90ZW1wb3JhcnlfYnVmZmVyKCksIGJ1dAorICAgKiAgZW5jYXBzdWxhdGVkIGluIGEgdHlwZSB2YWd1ZWx5IHJlc2VtYmxpbmcgYSBzdGFuZGFyZCBjb250YWluZXIuCisgICAqCisgICAqICBCeSBkZWZhdWx0LCBhIHRlbXBvcmFyeV9idWZmZXI8SXRlcj4gc3RvcmVzIHNwYWNlIGZvciBvYmplY3RzIG9mCisgICAqICB3aGF0ZXZlciB0eXBlIHRoZSBJdGVyIGl0ZXJhdG9yIHBvaW50cyB0by4gIEl0IGlzIGNvbnN0cnVjdGVkIGZyb20gYQorICAgKiAgdHlwaWNhbCBbZmlyc3QsbGFzdCkgcmFuZ2UsIGFuZCBwcm92aWRlcyB0aGUgYmVnaW4oKSwgZW5kKCksIHNpemUoKQorICAgKiAgZnVuY3Rpb25zLCBhcyB3ZWxsIGFzIHJlcXVlc3RlZF9zaXplKCkuICBGb3Igbm9uLXRyaXZpYWwgdHlwZXMsIGNvcGllcworICAgKiAgb2YgKmZpcnN0IHdpbGwgYmUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBzdG9yYWdlLgorICAgKgorICAgKiAgQGMgbWFsbG9jIGlzIHVzZWQgdG8gb2J0YWluIHVuZGVybHlpbmcgc3RvcmFnZS4KKyAgICoKKyAgICogIExpa2UgZ2V0X3RlbXBvcmFyeV9idWZmZXIoKSwgbm90IGFsbCB0aGUgcmVxdWVzdGVkIG1lbW9yeSBtYXkgYmUKKyAgICogIGF2YWlsYWJsZS4gIElkZWFsbHksIHRoZSBjcmVhdGVkIGJ1ZmZlciB3aWxsIGJlIGxhcmdlIGVub3VnaCB0byBob2xkIGEKKyAgICogIGNvcHkgb2YgW2ZpcnN0LGxhc3QpLCBidXQgaWYgc2l6ZSgpIGlzIGxlc3MgdGhhbiByZXF1ZXN0ZWRfc2l6ZSgpLAorICAgKiAgdGhlbiB0aGlzIGRpZG4ndCBoYXBwZW4uCisgICAqCisgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICovCisgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHAKKwkgICAgPSB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSA+CisgICAgc3RydWN0IHRlbXBvcmFyeV9idWZmZXIgOiBwdWJsaWMgX1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyYXRvciwgX1RwPgorICAgIHsKKyAgICAgIC8vLyBSZXF1ZXN0cyBzdG9yYWdlIGxhcmdlIGVub3VnaCB0byBob2xkIGEgY29weSBvZiBbZmlyc3QsbGFzdCkuCisgICAgICB0ZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCisgICAgICA6IF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4oX19maXJzdCwgX19sYXN0KSB7IH0KKyAgICAgIAorICAgICAgLy8vIERlc3Ryb3lzIG9iamVjdHMgYW5kIGZyZWVzIHN0b3JhZ2UuCisgICAgICB+dGVtcG9yYXJ5X2J1ZmZlcigpIHsgfQorICAgIH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L210X2FsbG9jYXRvci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvbXRfYWxsb2NhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU2NzUxMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L210X2FsbG9jYXRvci5oCkBAIC0wLDAgKzEsNzUxIEBACisvLyBNVC1vcHRpbWl6ZWQgYWxsb2NhdG9yIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGV4dC9tdF9hbGxvY2F0b3IuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX01UX0FMTE9DQVRPUl9ICisjZGVmaW5lIF9NVF9BTExPQ0FUT1JfSCAxCisKKyNpbmNsdWRlIDxuZXc+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxiaXRzL2Z1bmN0ZXhjZXB0Lmg+CisjaW5jbHVkZSA8ZXh0L2F0b21pY2l0eS5oPgorI2luY2x1ZGUgPGJpdHMvbW92ZS5oPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorCisgIHVzaW5nIHN0ZDo6c2l6ZV90OworICB1c2luZyBzdGQ6OnB0cmRpZmZfdDsKKworICB0eXBlZGVmIHZvaWQgKCpfX2Rlc3Ryb3lfaGFuZGxlcikodm9pZCopOworCisgIC8vLyBCYXNlIGNsYXNzIGZvciBwb29sIG9iamVjdC4KKyAgc3RydWN0IF9fcG9vbF9iYXNlCisgIHsKKyAgICAvLyBVc2luZyBzaG9ydCBpbnQgYXMgdHlwZSBmb3IgdGhlIGJpbm1hcCBpbXBsaWVzIHdlIGFyZSBuZXZlcgorICAgIC8vIGNhY2hpbmcgYmxvY2tzIGxhcmdlciB0aGFuIDMyNzY4IHdpdGggdGhpcyBhbGxvY2F0b3IuCisgICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX0Jpbm1hcF90eXBlOworCisgICAgLy8gVmFyaWFibGVzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBiZWhhdmlvciBvZiB0aGUgYWxsb2NhdG9yLAorICAgIC8vIGFzc2lnbmVkIGFuZCBleHBsYWluZWQgaW4gZGV0YWlsIGJlbG93LgorICAgIHN0cnVjdCBfVHVuZQorICAgICB7CisgICAgICAvLyBDb21waWxlIHRpbWUgY29uc3RhbnRzIGZvciB0aGUgZGVmYXVsdCBfVHVuZSB2YWx1ZXMuCisgICAgICBlbnVtIHsgX1NfYWxpZ24gPSA4IH07CisgICAgICBlbnVtIHsgX1NfbWF4X2J5dGVzID0gMTI4IH07CisgICAgICBlbnVtIHsgX1NfbWluX2JpbiA9IDggfTsKKyAgICAgIGVudW0geyBfU19jaHVua19zaXplID0gNDA5NiAtIDQgKiBzaXplb2Yodm9pZCopIH07CisgICAgICBlbnVtIHsgX1NfbWF4X3RocmVhZHMgPSA0MDk2IH07CisgICAgICBlbnVtIHsgX1NfZnJlZWxpc3RfaGVhZHJvb20gPSAxMCB9OworCisgICAgICAvLyBBbGlnbm1lbnQgbmVlZGVkLgorICAgICAgLy8gTkI6IEluIGFueSBjYXNlIG11c3QgYmUgPj0gc2l6ZW9mKF9CbG9ja19yZWNvcmQpLCB0aGF0CisgICAgICAvLyBpcyA0IG9uIDMyIGJpdCBtYWNoaW5lcyBhbmQgOCBvbiA2NCBiaXQgbWFjaGluZXMuCisgICAgICBzaXplX3QJX01fYWxpZ247CisgICAgICAKKyAgICAgIC8vIEFsbG9jYXRpb24gcmVxdWVzdHMgKGFmdGVyIHJvdW5kLXVwIHRvIHBvd2VyIG9mIDIpIGJlbG93CisgICAgICAvLyB0aGlzIHZhbHVlIHdpbGwgYmUgaGFuZGxlZCBieSB0aGUgYWxsb2NhdG9yLiBBIHJhdyBuZXcvCisgICAgICAvLyBjYWxsIHdpbGwgYmUgdXNlZCBmb3IgcmVxdWVzdHMgbGFyZ2VyIHRoYW4gdGhpcyB2YWx1ZS4KKyAgICAgIC8vIE5COiBNdXN0IGJlIG11Y2ggc21hbGxlciB0aGFuIF9NX2NodW5rX3NpemUgYW5kIGluIGFueQorICAgICAgLy8gY2FzZSA8PSAzMjc2OC4KKyAgICAgIHNpemVfdAlfTV9tYXhfYnl0ZXM7IAorCisgICAgICAvLyBTaXplIGluIGJ5dGVzIG9mIHRoZSBzbWFsbGVzdCBiaW4uCisgICAgICAvLyBOQjogTXVzdCBiZSBhIHBvd2VyIG9mIDIgYW5kID49IF9NX2FsaWduIChhbmQgb2YgY291cnNlCisgICAgICAvLyBtdWNoIHNtYWxsZXIgdGhhbiBfTV9tYXhfYnl0ZXMpLgorICAgICAgc2l6ZV90CV9NX21pbl9iaW47CisKKyAgICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIGZyYWdtZW50aW5nIGFuZCBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mCisgICAgICAvLyBuZXcoKSBjYWxscyB3ZSBhbHdheXMgcmVxdWVzdCBuZXcgbWVtb3J5IHVzaW5nIHRoaXMKKyAgICAgIC8vIHZhbHVlLiBCYXNlZCBvbiBwcmV2aW91cyBkaXNjdXNzaW9ucyBvbiB0aGUgbGlic3RkYysrCisgICAgICAvLyBtYWlsaW5nIGxpc3Qgd2UgaGF2ZSBjaG9zZW4gdGhlIHZhbHVlIGJlbG93LgorICAgICAgLy8gU2VlIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9saWJzdGRjKysvMjAwMS0wNy9tc2cwMDA3Ny5odG1sCisgICAgICAvLyBOQjogQXQgbGVhc3Qgb25lIG9yZGVyIG9mIG1hZ25pdHVkZSA+IF9NX21heF9ieXRlcy4gCisgICAgICBzaXplX3QJX01fY2h1bmtfc2l6ZTsKKworICAgICAgLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIHN1cHBvcnRlZCB0aHJlYWRzLiBGb3IKKyAgICAgIC8vIHNpbmdsZS10aHJlYWRlZCBvcGVyYXRpb24sIHVzZSBvbmUuIE1heGltdW0gdmFsdWVzIHdpbGwKKyAgICAgIC8vIHZhcnkgZGVwZW5kaW5nIG9uIGRldGFpbHMgb2YgdGhlIHVuZGVybHlpbmcgc3lzdGVtLiAoRm9yCisgICAgICAvLyBpbnN0YW5jZSwgTGludXggMi40LjE4IHJlcG9ydHMgNDA3MCBpbgorICAgICAgLy8gL3Byb2Mvc3lzL2tlcm5lbC90aHJlYWRzLW1heCwgd2hpbGUgTGludXggMi42LjYgcmVwb3J0cworICAgICAgLy8gNjU1MzQpCisgICAgICBzaXplX3QgCV9NX21heF90aHJlYWRzOworCisgICAgICAvLyBFYWNoIHRpbWUgYSBkZWFsbG9jYXRpb24gb2NjdXJzIGluIGEgdGhyZWFkZWQgYXBwbGljYXRpb24KKyAgICAgIC8vIHdlIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGFyZSBubyBtb3JlIHRoYW4KKyAgICAgIC8vIF9NX2ZyZWVsaXN0X2hlYWRyb29tICUgb2YgdXNlZCBtZW1vcnkgb24gdGhlIGZyZWVsaXN0LiBJZgorICAgICAgLy8gdGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIHJlY29yZHMgaXMgbW9yZSB0aGFuCisgICAgICAvLyBfTV9mcmVlbGlzdF9oZWFkcm9vbSAlIG9mIHRoZSBmcmVlbGlzdCwgd2UgbW92ZSB0aGVzZQorICAgICAgLy8gcmVjb3JkcyBiYWNrIHRvIHRoZSBnbG9iYWwgcG9vbC4KKyAgICAgIHNpemVfdCAJX01fZnJlZWxpc3RfaGVhZHJvb207CisgICAgICAKKyAgICAgIC8vIFNldCB0byB0cnVlIGZvcmNlcyBhbGwgYWxsb2NhdGlvbnMgdG8gdXNlIG5ldygpLgorICAgICAgYm9vbCAJX01fZm9yY2VfbmV3OyAKKyAgICAgIAorICAgICAgZXhwbGljaXQKKyAgICAgIF9UdW5lKCkKKyAgICAgIDogX01fYWxpZ24oX1NfYWxpZ24pLCBfTV9tYXhfYnl0ZXMoX1NfbWF4X2J5dGVzKSwgX01fbWluX2JpbihfU19taW5fYmluKSwKKyAgICAgIF9NX2NodW5rX3NpemUoX1NfY2h1bmtfc2l6ZSksIF9NX21heF90aHJlYWRzKF9TX21heF90aHJlYWRzKSwgCisgICAgICBfTV9mcmVlbGlzdF9oZWFkcm9vbShfU19mcmVlbGlzdF9oZWFkcm9vbSksIAorICAgICAgX01fZm9yY2VfbmV3KHN0ZDo6Z2V0ZW52KCJHTElCQ1hYX0ZPUkNFX05FVyIpID8gdHJ1ZSA6IGZhbHNlKQorICAgICAgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfVHVuZShzaXplX3QgX19hbGlnbiwgc2l6ZV90IF9fbWF4Yiwgc2l6ZV90IF9fbWluYmluLCBzaXplX3QgX19jaHVuaywgCisJICAgIHNpemVfdCBfX21heHRocmVhZHMsIHNpemVfdCBfX2hlYWRyb29tLCBib29sIF9fZm9yY2UpIAorICAgICAgOiBfTV9hbGlnbihfX2FsaWduKSwgX01fbWF4X2J5dGVzKF9fbWF4YiksIF9NX21pbl9iaW4oX19taW5iaW4pLAorICAgICAgX01fY2h1bmtfc2l6ZShfX2NodW5rKSwgX01fbWF4X3RocmVhZHMoX19tYXh0aHJlYWRzKSwKKyAgICAgIF9NX2ZyZWVsaXN0X2hlYWRyb29tKF9faGVhZHJvb20pLCBfTV9mb3JjZV9uZXcoX19mb3JjZSkKKyAgICAgIHsgfQorICAgIH07CisgICAgCisgICAgc3RydWN0IF9CbG9ja19hZGRyZXNzCisgICAgeworICAgICAgdm9pZCogCQkJX01faW5pdGlhbDsKKyAgICAgIF9CbG9ja19hZGRyZXNzKiAJCV9NX25leHQ7CisgICAgfTsKKyAgICAKKyAgICBjb25zdCBfVHVuZSYKKyAgICBfTV9nZXRfb3B0aW9ucygpIGNvbnN0CisgICAgeyByZXR1cm4gX01fb3B0aW9uczsgfQorCisgICAgdm9pZAorICAgIF9NX3NldF9vcHRpb25zKF9UdW5lIF9fdCkKKyAgICB7IAorICAgICAgaWYgKCFfTV9pbml0KQorCV9NX29wdGlvbnMgPSBfX3Q7CisgICAgfQorCisgICAgYm9vbAorICAgIF9NX2NoZWNrX3RocmVzaG9sZChzaXplX3QgX19ieXRlcykKKyAgICB7IHJldHVybiBfX2J5dGVzID4gX01fb3B0aW9ucy5fTV9tYXhfYnl0ZXMgfHwgX01fb3B0aW9ucy5fTV9mb3JjZV9uZXc7IH0KKworICAgIHNpemVfdAorICAgIF9NX2dldF9iaW5tYXAoc2l6ZV90IF9fYnl0ZXMpCisgICAgeyByZXR1cm4gX01fYmlubWFwW19fYnl0ZXNdOyB9CisKKyAgICBzaXplX3QKKyAgICBfTV9nZXRfYWxpZ24oKQorICAgIHsgcmV0dXJuIF9NX29wdGlvbnMuX01fYWxpZ247IH0KKworICAgIGV4cGxpY2l0IAorICAgIF9fcG9vbF9iYXNlKCkgCisgICAgOiBfTV9vcHRpb25zKF9UdW5lKCkpLCBfTV9iaW5tYXAoTlVMTCksIF9NX2luaXQoZmFsc2UpIHsgfQorCisgICAgZXhwbGljaXQgCisgICAgX19wb29sX2Jhc2UoY29uc3QgX1R1bmUmIF9fb3B0aW9ucykKKyAgICA6IF9NX29wdGlvbnMoX19vcHRpb25zKSwgX01fYmlubWFwKE5VTEwpLCBfTV9pbml0KGZhbHNlKSB7IH0KKworICBwcml2YXRlOgorICAgIGV4cGxpY2l0IAorICAgIF9fcG9vbF9iYXNlKGNvbnN0IF9fcG9vbF9iYXNlJik7CisKKyAgICBfX3Bvb2xfYmFzZSYKKyAgICBvcGVyYXRvcj0oY29uc3QgX19wb29sX2Jhc2UmKTsKKworICBwcm90ZWN0ZWQ6CisgICAgLy8gQ29uZmlndXJhdGlvbiBvcHRpb25zLgorICAgIF9UdW5lIAkgICAgICAgCQlfTV9vcHRpb25zOworICAgIAorICAgIF9CaW5tYXBfdHlwZSogCQlfTV9iaW5tYXA7CisKKyAgICAvLyBDb25maWd1cmF0aW9uIG9mIHRoZSBwb29sIG9iamVjdCB2aWEgX01fb3B0aW9ucyBjYW4gaGFwcGVuCisgICAgLy8gYWZ0ZXIgY29uc3RydWN0aW9uIGJ1dCBiZWZvcmUgaW5pdGlhbGl6YXRpb24uIEFmdGVyCisgICAgLy8gaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUsIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvIHRydWUuCisgICAgYm9vbCAJCQlfTV9pbml0OworICB9OworCisKKyAgLyoqCisgICAqICBAYnJpZWYgIERhdGEgZGVzY3JpYmluZyB0aGUgdW5kZXJseWluZyBtZW1vcnkgcG9vbCwgcGFyYW1ldGVyaXplZCBvbgorICAgKiAgdGhyZWFkaW5nIHN1cHBvcnQuCisgICAqLworICB0ZW1wbGF0ZTxib29sIF9UaHJlYWQ+CisgICAgY2xhc3MgX19wb29sOworCisgIC8vLyBTcGVjaWFsaXphdGlvbiBmb3Igc2luZ2xlIHRocmVhZC4KKyAgdGVtcGxhdGU8PgorICAgIGNsYXNzIF9fcG9vbDxmYWxzZT4gOiBwdWJsaWMgX19wb29sX2Jhc2UKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdW5pb24gX0Jsb2NrX3JlY29yZAorICAgICAgeworCS8vIFBvaW50cyB0byB0aGUgYmxvY2tfcmVjb3JkIG9mIHRoZSBuZXh0IGZyZWUgYmxvY2suCisJX0Jsb2NrX3JlY29yZCogCQkJX01fbmV4dDsKKyAgICAgIH07CisKKyAgICAgIHN0cnVjdCBfQmluX3JlY29yZAorICAgICAgeworCS8vIEFuICJhcnJheSIgb2YgcG9pbnRlcnMgdG8gdGhlIGZpcnN0IGZyZWUgYmxvY2suCisJX0Jsb2NrX3JlY29yZCoqCQkJX01fZmlyc3Q7CisKKwkvLyBBIGxpc3Qgb2YgdGhlIGluaXRpYWwgYWRkcmVzc2VzIG9mIGFsbCBhbGxvY2F0ZWQgYmxvY2tzLgorCV9CbG9ja19hZGRyZXNzKgkJICAgICAJX01fYWRkcmVzczsKKyAgICAgIH07CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIF9NX2luaXRpYWxpemVfb25jZSgpCisgICAgICB7CisJaWYgKF9fYnVpbHRpbl9leHBlY3QoX01faW5pdCA9PSBmYWxzZSwgZmFsc2UpKQorCSAgX01faW5pdGlhbGl6ZSgpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9kZXN0cm95KCkgdGhyb3coKTsKKworICAgICAgY2hhciogCisgICAgICBfTV9yZXNlcnZlX2Jsb2NrKHNpemVfdCBfX2J5dGVzLCBjb25zdCBzaXplX3QgX190aHJlYWRfaWQpOworICAgIAorICAgICAgdm9pZAorICAgICAgX01fcmVjbGFpbV9ibG9jayhjaGFyKiBfX3AsIHNpemVfdCBfX2J5dGVzKSB0aHJvdyAoKTsKKyAgICAKKyAgICAgIHNpemVfdCAKKyAgICAgIF9NX2dldF90aHJlYWRfaWQoKSB7IHJldHVybiAwOyB9CisgICAgICAKKyAgICAgIGNvbnN0IF9CaW5fcmVjb3JkJgorICAgICAgX01fZ2V0X2JpbihzaXplX3QgX193aGljaCkKKyAgICAgIHsgcmV0dXJuIF9NX2JpbltfX3doaWNoXTsgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICBfTV9hZGp1c3RfZnJlZWxpc3QoY29uc3QgX0Jpbl9yZWNvcmQmLCBfQmxvY2tfcmVjb3JkKiwgc2l6ZV90KQorICAgICAgeyB9CisKKyAgICAgIGV4cGxpY2l0IF9fcG9vbCgpIAorICAgICAgOiBfTV9iaW4oTlVMTCksIF9NX2Jpbl9zaXplKDEpIHsgfQorCisgICAgICBleHBsaWNpdCBfX3Bvb2woY29uc3QgX19wb29sX2Jhc2U6Ol9UdW5lJiBfX3R1bmUpIAorICAgICAgOiBfX3Bvb2xfYmFzZShfX3R1bmUpLCBfTV9iaW4oTlVMTCksIF9NX2Jpbl9zaXplKDEpIHsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIC8vIEFuICJhcnJheSIgb2YgYmluX3JlY29yZHMgZWFjaCBvZiB3aGljaCByZXByZXNlbnRzIGEgc3BlY2lmaWMKKyAgICAgIC8vIHBvd2VyIG9mIDIgc2l6ZS4gTWVtb3J5IHRvIHRoaXMgImFycmF5IiBpcyBhbGxvY2F0ZWQgaW4KKyAgICAgIC8vIF9NX2luaXRpYWxpemUoKS4KKyAgICAgIF9CaW5fcmVjb3JkKgkJIF9NX2JpbjsKKyAgICAgIAorICAgICAgLy8gQWN0dWFsIHZhbHVlIGNhbGN1bGF0ZWQgaW4gX01faW5pdGlhbGl6ZSgpLgorICAgICAgc2l6ZV90IAkgICAgICAgCSAgICAgCV9NX2Jpbl9zaXplOyAgICAgCisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2luaXRpYWxpemUoKTsKKyAgfTsKKyAKKyNpZmRlZiBfX0dUSFJFQURTCisgIC8vLyBTcGVjaWFsaXphdGlvbiBmb3IgdGhyZWFkIGVuYWJsZWQsIHZpYSBndGhyZWFkcy5oLgorICB0ZW1wbGF0ZTw+CisgICAgY2xhc3MgX19wb29sPHRydWU+IDogcHVibGljIF9fcG9vbF9iYXNlCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIEVhY2ggcmVxdWVzdGluZyB0aHJlYWQgaXMgYXNzaWduZWQgYW4gaWQgcmFuZ2luZyBmcm9tIDEgdG8KKyAgICAgIC8vIF9TX21heF90aHJlYWRzLiBUaHJlYWQgaWQgMCBpcyB1c2VkIGFzIGEgZ2xvYmFsIG1lbW9yeSBwb29sLgorICAgICAgLy8gSW4gb3JkZXIgdG8gZ2V0IGNvbnN0YW50IHBlcmZvcm1hbmNlIG9uIHRoZSB0aHJlYWQgYXNzaWdubWVudAorICAgICAgLy8gcm91dGluZSwgd2Uga2VlcCBhIGxpc3Qgb2YgZnJlZSBpZHMuIFdoZW4gYSB0aHJlYWQgZmlyc3QKKyAgICAgIC8vIHJlcXVlc3RzIG1lbW9yeSB3ZSByZW1vdmUgdGhlIGZpcnN0IHJlY29yZCBpbiB0aGlzIGxpc3QgYW5kCisgICAgICAvLyBzdG9yZXMgdGhlIGFkZHJlc3MgaW4gYSBfX2d0aHJlYWRfa2V5LiBXaGVuIGluaXRpYWxpemluZyB0aGUKKyAgICAgIC8vIF9fZ3RocmVhZF9rZXkgd2Ugc3BlY2lmeSBhIGRlc3RydWN0b3IuIFdoZW4gdGhpcyBkZXN0cnVjdG9yCisgICAgICAvLyAoaS5lLiB0aGUgdGhyZWFkIGRpZXMpIGlzIGNhbGxlZCwgd2UgcmV0dXJuIHRoZSB0aHJlYWQgaWQgdG8KKyAgICAgIC8vIHRoZSBmcm9udCBvZiB0aGlzIGxpc3QuCisgICAgICBzdHJ1Y3QgX1RocmVhZF9yZWNvcmQKKyAgICAgIHsKKwkvLyBQb2ludHMgdG8gbmV4dCBmcmVlIHRocmVhZCBpZCByZWNvcmQuIE5VTEwgaWYgbGFzdCByZWNvcmQgaW4gbGlzdC4KKwlfVGhyZWFkX3JlY29yZCoJCQlfTV9uZXh0OworCQorCS8vIFRocmVhZCBpZCByYW5naW5nIGZyb20gMSB0byBfU19tYXhfdGhyZWFkcy4KKwlzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2lkOworICAgICAgfTsKKyAgICAgIAorICAgICAgdW5pb24gX0Jsb2NrX3JlY29yZAorICAgICAgeworCS8vIFBvaW50cyB0byB0aGUgYmxvY2tfcmVjb3JkIG9mIHRoZSBuZXh0IGZyZWUgYmxvY2suCisJX0Jsb2NrX3JlY29yZCoJCQlfTV9uZXh0OworCQorCS8vIFRoZSB0aHJlYWQgaWQgb2YgdGhlIHRocmVhZCB3aGljaCBoYXMgcmVxdWVzdGVkIHRoaXMgYmxvY2suCisJc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICBfTV90aHJlYWRfaWQ7CisgICAgICB9OworICAgICAgCisgICAgICBzdHJ1Y3QgX0Jpbl9yZWNvcmQKKyAgICAgIHsKKwkvLyBBbiAiYXJyYXkiIG9mIHBvaW50ZXJzIHRvIHRoZSBmaXJzdCBmcmVlIGJsb2NrIGZvciBlYWNoCisJLy8gdGhyZWFkIGlkLiBNZW1vcnkgdG8gdGhpcyAiYXJyYXkiIGlzIGFsbG9jYXRlZCBpbgorCS8vIF9TX2luaXRpYWxpemUoKSBmb3IgX1NfbWF4X3RocmVhZHMgKyBnbG9iYWwgcG9vbCAwLgorCV9CbG9ja19yZWNvcmQqKgkJCV9NX2ZpcnN0OworCQorCS8vIEEgbGlzdCBvZiB0aGUgaW5pdGlhbCBhZGRyZXNzZXMgb2YgYWxsIGFsbG9jYXRlZCBibG9ja3MuCisJX0Jsb2NrX2FkZHJlc3MqCQkgICAgIAlfTV9hZGRyZXNzOworCisJLy8gQW4gImFycmF5IiBvZiBjb3VudGVycyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGFtb3VudCBvZgorCS8vIGJsb2NrcyB0aGF0IGFyZSBvbiB0aGUgZnJlZWxpc3QvdXNlZCBmb3IgZWFjaCB0aHJlYWQgaWQuCisJLy8gLSBOb3RlIHRoYXQgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBhbGxvY2F0ZWQgX01fdXNlZCAiYXJyYXkiCisJLy8gICBhY3R1YWxseSBob3N0cyAoYXRvbWljKSBjb3VudGVycyBvZiByZWNsYWltZWQgYmxvY2tzOiAgaW4KKwkvLyAgIF9NX3Jlc2VydmVfYmxvY2sgYW5kIGluIF9NX3JlY2xhaW1fYmxvY2sgdGhvc2UgbnVtYmVycyBhcmUKKwkvLyAgIHN1YnRyYWN0ZWQgZnJvbSB0aGUgZmlyc3Qgb25lcyB0byBvYnRhaW4gdGhlIGFjdHVhbCBzaXplCisJLy8gICBvZiB0aGUgIndvcmtpbmcgc2V0IiBvZiB0aGUgZ2l2ZW4gdGhyZWFkLgorCS8vIC0gTWVtb3J5IHRvIHRoZXNlICJhcnJheXMiIGlzIGFsbG9jYXRlZCBpbiBfU19pbml0aWFsaXplKCkKKwkvLyAgIGZvciBfU19tYXhfdGhyZWFkcyArIGdsb2JhbCBwb29sIDAuCisJc2l6ZV90KgkJCQlfTV9mcmVlOworCXNpemVfdCoJCQkgICAgICAgIF9NX3VzZWQ7CisJCisJLy8gRWFjaCBiaW4gaGFzIGl0cyBvd24gbXV0ZXggd2hpY2ggaXMgdXNlZCB0byBlbnN1cmUgZGF0YQorCS8vIGludGVncml0eSB3aGlsZSBjaGFuZ2luZyAib3duZXJzaGlwIiBvbiBhIGJsb2NrLiAgVGhlIG11dGV4CisJLy8gaXMgaW5pdGlhbGl6ZWQgaW4gX1NfaW5pdGlhbGl6ZSgpLgorCV9fZ3RocmVhZF9tdXRleF90KiAgICAgICAgICAgICAgX01fbXV0ZXg7CisgICAgICB9OworICAgICAgCisgICAgICAvLyBYWFggR0xJQkNYWF9BQkkgRGVwcmVjYXRlZAorICAgICAgdm9pZAorICAgICAgX01faW5pdGlhbGl6ZShfX2Rlc3Ryb3lfaGFuZGxlcik7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2luaXRpYWxpemVfb25jZSgpCisgICAgICB7CisJaWYgKF9fYnVpbHRpbl9leHBlY3QoX01faW5pdCA9PSBmYWxzZSwgZmFsc2UpKQorCSAgX01faW5pdGlhbGl6ZSgpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9kZXN0cm95KCkgdGhyb3coKTsKKworICAgICAgY2hhciogCisgICAgICBfTV9yZXNlcnZlX2Jsb2NrKHNpemVfdCBfX2J5dGVzLCBjb25zdCBzaXplX3QgX190aHJlYWRfaWQpOworICAgIAorICAgICAgdm9pZAorICAgICAgX01fcmVjbGFpbV9ibG9jayhjaGFyKiBfX3AsIHNpemVfdCBfX2J5dGVzKSB0aHJvdyAoKTsKKyAgICAKKyAgICAgIGNvbnN0IF9CaW5fcmVjb3JkJgorICAgICAgX01fZ2V0X2JpbihzaXplX3QgX193aGljaCkKKyAgICAgIHsgcmV0dXJuIF9NX2JpbltfX3doaWNoXTsgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICBfTV9hZGp1c3RfZnJlZWxpc3QoY29uc3QgX0Jpbl9yZWNvcmQmIF9fYmluLCBfQmxvY2tfcmVjb3JkKiBfX2Jsb2NrLCAKKwkJCSBzaXplX3QgX190aHJlYWRfaWQpCisgICAgICB7CisJaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCgpKQorCSAgeworCSAgICBfX2Jsb2NrLT5fTV90aHJlYWRfaWQgPSBfX3RocmVhZF9pZDsKKwkgICAgLS1fX2Jpbi5fTV9mcmVlW19fdGhyZWFkX2lkXTsKKwkgICAgKytfX2Jpbi5fTV91c2VkW19fdGhyZWFkX2lkXTsKKwkgIH0KKyAgICAgIH0KKworICAgICAgLy8gWFhYIEdMSUJDWFhfQUJJIERlcHJlY2F0ZWQKKyAgICAgIF9HTElCQ1hYX0NPTlNUIHZvaWQgCisgICAgICBfTV9kZXN0cm95X3RocmVhZF9rZXkodm9pZCopIHRocm93ICgpOworCisgICAgICBzaXplX3QgCisgICAgICBfTV9nZXRfdGhyZWFkX2lkKCk7CisKKyAgICAgIGV4cGxpY2l0IF9fcG9vbCgpIAorICAgICAgOiBfTV9iaW4oTlVMTCksIF9NX2Jpbl9zaXplKDEpLCBfTV90aHJlYWRfZnJlZWxpc3QoTlVMTCkgCisgICAgICB7IH0KKworICAgICAgZXhwbGljaXQgX19wb29sKGNvbnN0IF9fcG9vbF9iYXNlOjpfVHVuZSYgX190dW5lKSAKKyAgICAgIDogX19wb29sX2Jhc2UoX190dW5lKSwgX01fYmluKE5VTEwpLCBfTV9iaW5fc2l6ZSgxKSwgCisgICAgICBfTV90aHJlYWRfZnJlZWxpc3QoTlVMTCkgCisgICAgICB7IH0KKworICAgIHByaXZhdGU6CisgICAgICAvLyBBbiAiYXJyYXkiIG9mIGJpbl9yZWNvcmRzIGVhY2ggb2Ygd2hpY2ggcmVwcmVzZW50cyBhIHNwZWNpZmljCisgICAgICAvLyBwb3dlciBvZiAyIHNpemUuIE1lbW9yeSB0byB0aGlzICJhcnJheSIgaXMgYWxsb2NhdGVkIGluCisgICAgICAvLyBfTV9pbml0aWFsaXplKCkuCisgICAgICBfQmluX3JlY29yZCoJCV9NX2JpbjsKKworICAgICAgLy8gQWN0dWFsIHZhbHVlIGNhbGN1bGF0ZWQgaW4gX01faW5pdGlhbGl6ZSgpLgorICAgICAgc2l6ZV90IAkgICAgICAgCSAgICAgCV9NX2Jpbl9zaXplOworCisgICAgICBfVGhyZWFkX3JlY29yZCogCQlfTV90aHJlYWRfZnJlZWxpc3Q7CisgICAgICB2b2lkKgkJCV9NX3RocmVhZF9mcmVlbGlzdF9pbml0aWFsOworCisgICAgICB2b2lkCisgICAgICBfTV9pbml0aWFsaXplKCk7CisgICAgfTsKKyNlbmRpZgorCisgIHRlbXBsYXRlPHRlbXBsYXRlIDxib29sPiBjbGFzcyBfUG9vbFRwLCBib29sIF9UaHJlYWQ+CisgICAgc3RydWN0IF9fY29tbW9uX3Bvb2wKKyAgICB7CisgICAgICB0eXBlZGVmIF9Qb29sVHA8X1RocmVhZD4gCQlwb29sX3R5cGU7CisgICAgICAKKyAgICAgIHN0YXRpYyBwb29sX3R5cGUmCisgICAgICBfU19nZXRfcG9vbCgpCisgICAgICB7IAorCXN0YXRpYyBwb29sX3R5cGUgX1NfcG9vbDsKKwlyZXR1cm4gX1NfcG9vbDsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHRlbXBsYXRlIDxib29sPiBjbGFzcyBfUG9vbFRwLCBib29sIF9UaHJlYWQ+CisgICAgc3RydWN0IF9fY29tbW9uX3Bvb2xfYmFzZTsKKworICB0ZW1wbGF0ZTx0ZW1wbGF0ZSA8Ym9vbD4gY2xhc3MgX1Bvb2xUcD4KKyAgICBzdHJ1Y3QgX19jb21tb25fcG9vbF9iYXNlPF9Qb29sVHAsIGZhbHNlPiAKKyAgICA6IHB1YmxpYyBfX2NvbW1vbl9wb29sPF9Qb29sVHAsIGZhbHNlPgorICAgIHsKKyAgICAgIHVzaW5nICBfX2NvbW1vbl9wb29sPF9Qb29sVHAsIGZhbHNlPjo6X1NfZ2V0X3Bvb2w7CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfU19pbml0aWFsaXplX29uY2UoKQorICAgICAgeworCXN0YXRpYyBib29sIF9faW5pdDsKKwlpZiAoX19idWlsdGluX2V4cGVjdChfX2luaXQgPT0gZmFsc2UsIGZhbHNlKSkKKwkgIHsKKwkgICAgX1NfZ2V0X3Bvb2woKS5fTV9pbml0aWFsaXplX29uY2UoKTsgCisJICAgIF9faW5pdCA9IHRydWU7CisJICB9CisgICAgICB9CisgICAgfTsKKworI2lmZGVmIF9fR1RIUkVBRFMKKyAgdGVtcGxhdGU8dGVtcGxhdGUgPGJvb2w+IGNsYXNzIF9Qb29sVHA+CisgICAgc3RydWN0IF9fY29tbW9uX3Bvb2xfYmFzZTxfUG9vbFRwLCB0cnVlPgorICAgIDogcHVibGljIF9fY29tbW9uX3Bvb2w8X1Bvb2xUcCwgdHJ1ZT4KKyAgICB7CisgICAgICB1c2luZyAgX19jb21tb25fcG9vbDxfUG9vbFRwLCB0cnVlPjo6X1NfZ2V0X3Bvb2w7CisgICAgICAKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfU19pbml0aWFsaXplKCkgCisgICAgICB7IF9TX2dldF9wb29sKCkuX01faW5pdGlhbGl6ZV9vbmNlKCk7IH0KKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIF9TX2luaXRpYWxpemVfb25jZSgpCisgICAgICB7IAorCXN0YXRpYyBib29sIF9faW5pdDsKKwlpZiAoX19idWlsdGluX2V4cGVjdChfX2luaXQgPT0gZmFsc2UsIGZhbHNlKSkKKwkgIHsKKwkgICAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCgpKQorCSAgICAgIHsKKwkJLy8gT24gc29tZSBwbGF0Zm9ybXMsIF9fZ3RocmVhZF9vbmNlX3QgaXMgYW4gYWdncmVnYXRlLgorCQlzdGF0aWMgX19ndGhyZWFkX29uY2VfdCBfX29uY2UgPSBfX0dUSFJFQURfT05DRV9JTklUOworCQlfX2d0aHJlYWRfb25jZSgmX19vbmNlLCBfU19pbml0aWFsaXplKTsKKwkgICAgICB9CisKKwkgICAgLy8gRG91YmxlIGNoZWNrIGluaXRpYWxpemF0aW9uLiBNYXkgYmUgbmVjZXNzYXJ5IG9uIHNvbWUKKwkgICAgLy8gc3lzdGVtcyBmb3IgcHJvcGVyIGNvbnN0cnVjdGlvbiB3aGVuIG5vdCBjb21waWxpbmcgd2l0aAorCSAgICAvLyB0aHJlYWQgZmxhZ3MuCisJICAgIF9TX2dldF9wb29sKCkuX01faW5pdGlhbGl6ZV9vbmNlKCk7IAorCSAgICBfX2luaXQgPSB0cnVlOworCSAgfQorICAgICAgfQorICAgIH07CisjZW5kaWYKKworICAvLy8gUG9saWN5IGZvciBzaGFyZWQgX19wb29sIG9iamVjdHMuCisgIHRlbXBsYXRlPHRlbXBsYXRlIDxib29sPiBjbGFzcyBfUG9vbFRwLCBib29sIF9UaHJlYWQ+CisgICAgc3RydWN0IF9fY29tbW9uX3Bvb2xfcG9saWN5IDogcHVibGljIF9fY29tbW9uX3Bvb2xfYmFzZTxfUG9vbFRwLCBfVGhyZWFkPgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHRlbXBsYXRlIDxib29sPiBjbGFzcyBfUG9vbFRwMSA9IF9Qb29sVHAsIAorCSAgICAgICBib29sIF9UaHJlYWQxID0gX1RocmVhZD4KKyAgICAgICAgc3RydWN0IF9NX3JlYmluZAorICAgICAgICB7IHR5cGVkZWYgX19jb21tb25fcG9vbF9wb2xpY3k8X1Bvb2xUcDEsIF9UaHJlYWQxPiBvdGhlcjsgfTsKKworICAgICAgdXNpbmcgIF9fY29tbW9uX3Bvb2xfYmFzZTxfUG9vbFRwLCBfVGhyZWFkPjo6X1NfZ2V0X3Bvb2w7CisgICAgICB1c2luZyAgX19jb21tb25fcG9vbF9iYXNlPF9Qb29sVHAsIF9UaHJlYWQ+OjpfU19pbml0aWFsaXplX29uY2U7CisgIH07CisgCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0ZW1wbGF0ZSA8Ym9vbD4gY2xhc3MgX1Bvb2xUcCwgYm9vbCBfVGhyZWFkPgorICAgIHN0cnVjdCBfX3Blcl90eXBlX3Bvb2wKKyAgICB7CisgICAgICB0eXBlZGVmIF9UcCAJCQl2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBfUG9vbFRwPF9UaHJlYWQ+IAkJcG9vbF90eXBlOworICAgICAgCisgICAgICBzdGF0aWMgcG9vbF90eXBlJgorICAgICAgX1NfZ2V0X3Bvb2woKQorICAgICAgeyAKKwkvLyBTYW5lIGRlZmF1bHRzIGZvciB0aGUgX1Bvb2xUcC4KKwl0eXBlZGVmIHR5cGVuYW1lIHBvb2xfdHlwZTo6X0Jsb2NrX3JlY29yZCBfQmxvY2tfcmVjb3JkOworCWNvbnN0IHN0YXRpYyBzaXplX3QgX19hID0gKF9fYWxpZ25vZl9fKF9UcCkgPj0gc2l6ZW9mKF9CbG9ja19yZWNvcmQpCisJCQkJICAgPyBfX2FsaWdub2ZfXyhfVHApIDogc2l6ZW9mKF9CbG9ja19yZWNvcmQpKTsKKworCXR5cGVkZWYgdHlwZW5hbWUgX19wb29sX2Jhc2U6Ol9UdW5lIF9UdW5lOworCXN0YXRpYyBfVHVuZSBfU190dW5lKF9fYSwgc2l6ZW9mKF9UcCkgKiA2NCwKKwkJCSAgICAgc2l6ZW9mKF9UcCkgKiAyID49IF9fYSA/IHNpemVvZihfVHApICogMiA6IF9fYSwKKwkJCSAgICAgc2l6ZW9mKF9UcCkgKiBzaXplX3QoX1R1bmU6Ol9TX2NodW5rX3NpemUpLAorCQkJICAgICBfVHVuZTo6X1NfbWF4X3RocmVhZHMsCisJCQkgICAgIF9UdW5lOjpfU19mcmVlbGlzdF9oZWFkcm9vbSwKKwkJCSAgICAgc3RkOjpnZXRlbnYoIkdMSUJDWFhfRk9SQ0VfTkVXIikgPyB0cnVlIDogZmFsc2UpOworCXN0YXRpYyBwb29sX3R5cGUgX1NfcG9vbChfU190dW5lKTsKKwlyZXR1cm4gX1NfcG9vbDsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdGVtcGxhdGUgPGJvb2w+IGNsYXNzIF9Qb29sVHAsIGJvb2wgX1RocmVhZD4KKyAgICBzdHJ1Y3QgX19wZXJfdHlwZV9wb29sX2Jhc2U7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0ZW1wbGF0ZSA8Ym9vbD4gY2xhc3MgX1Bvb2xUcD4KKyAgICBzdHJ1Y3QgX19wZXJfdHlwZV9wb29sX2Jhc2U8X1RwLCBfUG9vbFRwLCBmYWxzZT4gCisgICAgOiBwdWJsaWMgX19wZXJfdHlwZV9wb29sPF9UcCwgX1Bvb2xUcCwgZmFsc2U+IAorICAgIHsKKyAgICAgIHVzaW5nICBfX3Blcl90eXBlX3Bvb2w8X1RwLCBfUG9vbFRwLCBmYWxzZT46Ol9TX2dldF9wb29sOworCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX1NfaW5pdGlhbGl6ZV9vbmNlKCkKKyAgICAgIHsKKwlzdGF0aWMgYm9vbCBfX2luaXQ7CisJaWYgKF9fYnVpbHRpbl9leHBlY3QoX19pbml0ID09IGZhbHNlLCBmYWxzZSkpCisJICB7CisJICAgIF9TX2dldF9wb29sKCkuX01faW5pdGlhbGl6ZV9vbmNlKCk7IAorCSAgICBfX2luaXQgPSB0cnVlOworCSAgfQorICAgICAgfQorICAgIH07CisKKyAjaWZkZWYgX19HVEhSRUFEUworIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdGVtcGxhdGUgPGJvb2w+IGNsYXNzIF9Qb29sVHA+CisgICAgc3RydWN0IF9fcGVyX3R5cGVfcG9vbF9iYXNlPF9UcCwgX1Bvb2xUcCwgdHJ1ZT4gCisgICAgOiBwdWJsaWMgX19wZXJfdHlwZV9wb29sPF9UcCwgX1Bvb2xUcCwgdHJ1ZT4gCisgICAgeworICAgICAgdXNpbmcgIF9fcGVyX3R5cGVfcG9vbDxfVHAsIF9Qb29sVHAsIHRydWU+OjpfU19nZXRfcG9vbDsKKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIF9TX2luaXRpYWxpemUoKSAKKyAgICAgIHsgX1NfZ2V0X3Bvb2woKS5fTV9pbml0aWFsaXplX29uY2UoKTsgfQorCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX1NfaW5pdGlhbGl6ZV9vbmNlKCkKKyAgICAgIHsgCisJc3RhdGljIGJvb2wgX19pbml0OworCWlmIChfX2J1aWx0aW5fZXhwZWN0KF9faW5pdCA9PSBmYWxzZSwgZmFsc2UpKQorCSAgeworCSAgICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wKCkpCisJICAgICAgeworCQkvLyBPbiBzb21lIHBsYXRmb3JtcywgX19ndGhyZWFkX29uY2VfdCBpcyBhbiBhZ2dyZWdhdGUuCisJCXN0YXRpYyBfX2d0aHJlYWRfb25jZV90IF9fb25jZSA9IF9fR1RIUkVBRF9PTkNFX0lOSVQ7CisJCV9fZ3RocmVhZF9vbmNlKCZfX29uY2UsIF9TX2luaXRpYWxpemUpOworCSAgICAgIH0KKworCSAgICAvLyBEb3VibGUgY2hlY2sgaW5pdGlhbGl6YXRpb24uIE1heSBiZSBuZWNlc3Nhcnkgb24gc29tZQorCSAgICAvLyBzeXN0ZW1zIGZvciBwcm9wZXIgY29uc3RydWN0aW9uIHdoZW4gbm90IGNvbXBpbGluZyB3aXRoCisJICAgIC8vIHRocmVhZCBmbGFncy4KKwkgICAgX1NfZ2V0X3Bvb2woKS5fTV9pbml0aWFsaXplX29uY2UoKTsgCisJICAgIF9faW5pdCA9IHRydWU7CisJICB9CisgICAgICB9CisgICAgfTsKKyNlbmRpZgorCisgIC8vLyBQb2xpY3kgZm9yIGluZGl2aWR1YWwgX19wb29sIG9iamVjdHMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdGVtcGxhdGUgPGJvb2w+IGNsYXNzIF9Qb29sVHAsIGJvb2wgX1RocmVhZD4KKyAgICBzdHJ1Y3QgX19wZXJfdHlwZV9wb29sX3BvbGljeSAKKyAgICA6IHB1YmxpYyBfX3Blcl90eXBlX3Bvb2xfYmFzZTxfVHAsIF9Qb29sVHAsIF9UaHJlYWQ+CisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdGVtcGxhdGUgPGJvb2w+IGNsYXNzIF9Qb29sVHAxID0gX1Bvb2xUcCwgCisJICAgICAgIGJvb2wgX1RocmVhZDEgPSBfVGhyZWFkPgorICAgICAgICBzdHJ1Y3QgX01fcmViaW5kCisgICAgICAgIHsgdHlwZWRlZiBfX3Blcl90eXBlX3Bvb2xfcG9saWN5PF9UcDEsIF9Qb29sVHAxLCBfVGhyZWFkMT4gb3RoZXI7IH07CisKKyAgICAgIHVzaW5nICBfX3Blcl90eXBlX3Bvb2xfYmFzZTxfVHAsIF9Qb29sVHAsIF9UaHJlYWQ+OjpfU19nZXRfcG9vbDsKKyAgICAgIHVzaW5nICBfX3Blcl90eXBlX3Bvb2xfYmFzZTxfVHAsIF9Qb29sVHAsIF9UaHJlYWQ+OjpfU19pbml0aWFsaXplX29uY2U7CisgIH07CisKKworICAvLy8gQmFzZSBjbGFzcyBmb3IgX1RwIGRlcGVuZGVudCBtZW1iZXIgZnVuY3Rpb25zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgX19tdF9hbGxvY19iYXNlIAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHNpemVfdCAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RwKiAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiBjb25zdCBfVHAqICAgICAgICAgICAgICAgIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIF9UcCYgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBjb25zdCBfVHAmICAgICAgICAgICAgICAgIGNvbnN0X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOworCisgICAgICBwb2ludGVyCisgICAgICBhZGRyZXNzKHJlZmVyZW5jZSBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiAmX194OyB9CisKKyAgICAgIGNvbnN0X3BvaW50ZXIKKyAgICAgIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICZfX3g7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkgCisgICAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNDAyLiB3cm9uZyBuZXcgZXhwcmVzc2lvbiBpbiBbc29tZV9dIGFsbG9jYXRvcjo6Y29uc3RydWN0CisgICAgICB2b2lkIAorICAgICAgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSAKKyAgICAgIHsgOjpuZXcoKHZvaWQgKilfX3ApIF9UcChfX3ZhbCk7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgdm9pZAorICAgICAgICBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIF9BcmdzJiYuLi4gX19hcmdzKQorCXsgOjpuZXcoKHZvaWQgKilfX3ApIF9UcChzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOyB9CisjZW5kaWYKKworICAgICAgdm9pZCAKKyAgICAgIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KKyAgICB9OworCisjaWZkZWYgX19HVEhSRUFEUworI2RlZmluZSBfX3RocmVhZF9kZWZhdWx0IHRydWUKKyNlbHNlCisjZGVmaW5lIF9fdGhyZWFkX2RlZmF1bHQgZmFsc2UKKyNlbmRpZgorCisgIC8qKgorICAgKiAgQGJyaWVmICBUaGlzIGlzIGEgZml4ZWQgc2l6ZSAocG93ZXIgb2YgMikgYWxsb2NhdG9yIHdoaWNoIC0gd2hlbgorICAgKiAgY29tcGlsZWQgd2l0aCB0aHJlYWQgc3VwcG9ydCAtIHdpbGwgbWFpbnRhaW4gb25lIGZyZWVsaXN0IHBlcgorICAgKiAgc2l6ZSBwZXIgdGhyZWFkIHBsdXMgYSBAYSBnbG9iYWwgb25lLiBTdGVwcyBhcmUgdGFrZW4gdG8gbGltaXQKKyAgICogIHRoZSBwZXIgdGhyZWFkIGZyZWVsaXN0IHNpemVzIChieSByZXR1cm5pbmcgZXhjZXNzIGJhY2sgdG8KKyAgICogIHRoZSBAYSBnbG9iYWwgbGlzdCkuCisgICAqICBAaW5ncm91cCBhbGxvY2F0b3JzCisgICAqCisgICAqICBGdXJ0aGVyIGRldGFpbHM6CisgICAqICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9saWJzdGRjKysvbWFudWFsL2JrMDFwdDEyY2gzMi5odG1sCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIAorCSAgIHR5cGVuYW1lIF9Qb29scCA9IF9fY29tbW9uX3Bvb2xfcG9saWN5PF9fcG9vbCwgX190aHJlYWRfZGVmYXVsdD4gPgorICAgIGNsYXNzIF9fbXRfYWxsb2MgOiBwdWJsaWMgX19tdF9hbGxvY19iYXNlPF9UcD4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBzaXplX3QgICAgICAgICAgICAgICAgICAgIAlzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHB0cmRpZmZfdCAgICAgICAgICAgICAgICAgCWRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RwKiAgICAgICAgICAgICAgICAgICAgICAJcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1RwKiAgICAgICAgICAgICAgICAJY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAJcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBjb25zdCBfVHAmICAgICAgICAgICAgICAgIAljb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgCXZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9Qb29scCAgICAgIAkJCV9fcG9saWN5X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Qb29scDo6cG9vbF90eXBlCV9fcG9vbF90eXBlOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfUG9vbHAxID0gX1Bvb2xwPgorICAgICAgICBzdHJ1Y3QgcmViaW5kCisgICAgICAgIHsgCisJICB0eXBlZGVmIHR5cGVuYW1lIF9Qb29scDE6OnRlbXBsYXRlIF9NX3JlYmluZDxfVHAxPjo6b3RoZXIgcG9sX3R5cGU7CisJICB0eXBlZGVmIF9fbXRfYWxsb2M8X1RwMSwgcG9sX3R5cGU+IG90aGVyOworCX07CisKKyAgICAgIF9fbXRfYWxsb2MoKSB0aHJvdygpIHsgfQorCisgICAgICBfX210X2FsbG9jKGNvbnN0IF9fbXRfYWxsb2MmKSB0aHJvdygpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfUG9vbHAxPgorICAgICAgICBfX210X2FsbG9jKGNvbnN0IF9fbXRfYWxsb2M8X1RwMSwgX1Bvb2xwMT4mKSB0aHJvdygpIHsgfQorCisgICAgICB+X19tdF9hbGxvYygpIHRocm93KCkgeyB9CisKKyAgICAgIHBvaW50ZXIKKyAgICAgIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCk7CisKKyAgICAgIHZvaWQKKyAgICAgIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pOworCisgICAgICBjb25zdCBfX3Bvb2xfYmFzZTo6X1R1bmUKKyAgICAgIF9NX2dldF9vcHRpb25zKCkKKyAgICAgIHsgCisJLy8gUmV0dXJuIGEgY29weSwgbm90IGEgcmVmZXJlbmNlLCBmb3IgZXh0ZXJuYWwgY29uc3VtcHRpb24uCisJcmV0dXJuIF9fcG9saWN5X3R5cGU6Ol9TX2dldF9wb29sKCkuX01fZ2V0X29wdGlvbnMoKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgdm9pZAorICAgICAgX01fc2V0X29wdGlvbnMoX19wb29sX2Jhc2U6Ol9UdW5lIF9fdCkKKyAgICAgIHsgX19wb2xpY3lfdHlwZTo6X1NfZ2V0X3Bvb2woKS5fTV9zZXRfb3B0aW9ucyhfX3QpOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Qb29scD4KKyAgICB0eXBlbmFtZSBfX210X2FsbG9jPF9UcCwgX1Bvb2xwPjo6cG9pbnRlcgorICAgIF9fbXRfYWxsb2M8X1RwLCBfUG9vbHA+OjoKKyAgICBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKikKKyAgICB7CisgICAgICBpZiAoX19uID4gdGhpcy0+bWF4X3NpemUoKSkKKwlzdGQ6Ol9fdGhyb3dfYmFkX2FsbG9jKCk7CisKKyAgICAgIF9fcG9saWN5X3R5cGU6Ol9TX2luaXRpYWxpemVfb25jZSgpOworCisgICAgICAvLyBSZXF1ZXN0cyBsYXJnZXIgdGhhbiBfTV9tYXhfYnl0ZXMgYXJlIGhhbmRsZWQgYnkgb3BlcmF0b3IKKyAgICAgIC8vIG5ldy9kZWxldGUgZGlyZWN0bHkuCisgICAgICBfX3Bvb2xfdHlwZSYgX19wb29sID0gX19wb2xpY3lfdHlwZTo6X1NfZ2V0X3Bvb2woKTsKKyAgICAgIGNvbnN0IHNpemVfdCBfX2J5dGVzID0gX19uICogc2l6ZW9mKF9UcCk7CisgICAgICBpZiAoX19wb29sLl9NX2NoZWNrX3RocmVzaG9sZChfX2J5dGVzKSkKKwl7CisJICB2b2lkKiBfX3JldCA9IDo6b3BlcmF0b3IgbmV3KF9fYnl0ZXMpOworCSAgcmV0dXJuIHN0YXRpY19jYXN0PF9UcCo+KF9fcmV0KTsKKwl9CisgICAgICAKKyAgICAgIC8vIFJvdW5kIHVwIHRvIHBvd2VyIG9mIDIgYW5kIGZpZ3VyZSBvdXQgd2hpY2ggYmluIHRvIHVzZS4KKyAgICAgIGNvbnN0IHNpemVfdCBfX3doaWNoID0gX19wb29sLl9NX2dldF9iaW5tYXAoX19ieXRlcyk7CisgICAgICBjb25zdCBzaXplX3QgX190aHJlYWRfaWQgPSBfX3Bvb2wuX01fZ2V0X3RocmVhZF9pZCgpOworICAgICAgCisgICAgICAvLyBGaW5kIG91dCBpZiB3ZSBoYXZlIGJsb2NrcyBvbiBvdXIgZnJlZWxpc3QuICBJZiBzbywgZ28gYWhlYWQKKyAgICAgIC8vIGFuZCB1c2UgdGhlbSBkaXJlY3RseSB3aXRob3V0IGhhdmluZyB0byBsb2NrIGFueXRoaW5nLgorICAgICAgY2hhciogX19jOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3Bvb2xfdHlwZTo6X0Jpbl9yZWNvcmQgX0Jpbl9yZWNvcmQ7CisgICAgICBjb25zdCBfQmluX3JlY29yZCYgX19iaW4gPSBfX3Bvb2wuX01fZ2V0X2JpbihfX3doaWNoKTsKKyAgICAgIGlmIChfX2Jpbi5fTV9maXJzdFtfX3RocmVhZF9pZF0pCisJeworCSAgLy8gQWxyZWFkeSByZXNlcnZlZC4KKwkgIHR5cGVkZWYgdHlwZW5hbWUgX19wb29sX3R5cGU6Ol9CbG9ja19yZWNvcmQgX0Jsb2NrX3JlY29yZDsKKwkgIF9CbG9ja19yZWNvcmQqIF9fYmxvY2sgPSBfX2Jpbi5fTV9maXJzdFtfX3RocmVhZF9pZF07CisJICBfX2Jpbi5fTV9maXJzdFtfX3RocmVhZF9pZF0gPSBfX2Jsb2NrLT5fTV9uZXh0OworCSAgCisJICBfX3Bvb2wuX01fYWRqdXN0X2ZyZWVsaXN0KF9fYmluLCBfX2Jsb2NrLCBfX3RocmVhZF9pZCk7CisJICBfX2MgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2Jsb2NrKSArIF9fcG9vbC5fTV9nZXRfYWxpZ24oKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgLy8gTnVsbCwgcmVzZXJ2ZS4KKwkgIF9fYyA9IF9fcG9vbC5fTV9yZXNlcnZlX2Jsb2NrKF9fYnl0ZXMsIF9fdGhyZWFkX2lkKTsKKwl9CisgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwKj4oc3RhdGljX2Nhc3Q8dm9pZCo+KF9fYykpOworICAgIH0KKyAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1Bvb2xwPgorICAgIHZvaWQKKyAgICBfX210X2FsbG9jPF9UcCwgX1Bvb2xwPjo6CisgICAgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKKyAgICB7CisgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX3AgIT0gMCwgdHJ1ZSkpCisJeworCSAgLy8gUmVxdWVzdHMgbGFyZ2VyIHRoYW4gX01fbWF4X2J5dGVzIGFyZSBoYW5kbGVkIGJ5CisJICAvLyBvcGVyYXRvcnMgbmV3L2RlbGV0ZSBkaXJlY3RseS4KKwkgIF9fcG9vbF90eXBlJiBfX3Bvb2wgPSBfX3BvbGljeV90eXBlOjpfU19nZXRfcG9vbCgpOworCSAgY29uc3Qgc2l6ZV90IF9fYnl0ZXMgPSBfX24gKiBzaXplb2YoX1RwKTsKKwkgIGlmIChfX3Bvb2wuX01fY2hlY2tfdGhyZXNob2xkKF9fYnl0ZXMpKQorCSAgICA6Om9wZXJhdG9yIGRlbGV0ZShfX3ApOworCSAgZWxzZQorCSAgICBfX3Bvb2wuX01fcmVjbGFpbV9ibG9jayhyZWludGVycHJldF9jYXN0PGNoYXIqPihfX3ApLCBfX2J5dGVzKTsKKwl9CisgICAgfQorICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfUG9vbHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9fbXRfYWxsb2M8X1RwLCBfUG9vbHA+JiwgY29uc3QgX19tdF9hbGxvYzxfVHAsIF9Qb29scD4mKQorICAgIHsgcmV0dXJuIHRydWU7IH0KKyAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1Bvb2xwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBfX210X2FsbG9jPF9UcCwgX1Bvb2xwPiYsIGNvbnN0IF9fbXRfYWxsb2M8X1RwLCBfUG9vbHA+JikKKyAgICB7IHJldHVybiBmYWxzZTsgfQorCisjdW5kZWYgX190aHJlYWRfZGVmYXVsdAorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvbmV3X2FsbG9jYXRvci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvbmV3X2FsbG9jYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNjY2YzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9uZXdfYWxsb2NhdG9yLmgKQEAgLTAsMCArMSwxMzAgQEAKKy8vIEFsbG9jYXRvciB0aGF0IHdyYXBzIG9wZXJhdG9yIG5ldyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBleHQvbmV3X2FsbG9jYXRvci5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfTkVXX0FMTE9DQVRPUl9ICisjZGVmaW5lIF9ORVdfQUxMT0NBVE9SX0ggMQorCisjaW5jbHVkZSA8bmV3PgorI2luY2x1ZGUgPGJpdHMvZnVuY3RleGNlcHQuaD4KKyNpbmNsdWRlIDxiaXRzL21vdmUuaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKworICB1c2luZyBzdGQ6OnNpemVfdDsKKyAgdXNpbmcgc3RkOjpwdHJkaWZmX3Q7CisKKyAgLyoqCisgICAqICBAYnJpZWYgIEFuIGFsbG9jYXRvciB0aGF0IHVzZXMgZ2xvYmFsIG5ldywgYXMgcGVyIFsyMC40XS4KKyAgICogIEBpbmdyb3VwIGFsbG9jYXRvcnMKKyAgICoKKyAgICogIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBhbGxvY2F0b3IgZGVmaW5lZCBpbiB0aGUgQysrIFN0YW5kYXJkLiAKKyAgICogICAgLSBhbGwgYWxsb2NhdGlvbiBjYWxscyBvcGVyYXRvciBuZXcKKyAgICogICAgLSBhbGwgZGVhbGxvY2F0aW9uIGNhbGxzIG9wZXJhdG9yIGRlbGV0ZQorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIG5ld19hbGxvY2F0b3IKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBzaXplX3QgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgcHRyZGlmZl90ICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcCogICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiBfVHAmICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIF9UcCAgICAgICAgdmFsdWVfdHlwZTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgc3RydWN0IHJlYmluZAorICAgICAgICB7IHR5cGVkZWYgbmV3X2FsbG9jYXRvcjxfVHAxPiBvdGhlcjsgfTsKKworICAgICAgbmV3X2FsbG9jYXRvcigpIHRocm93KCkgeyB9CisKKyAgICAgIG5ld19hbGxvY2F0b3IoY29uc3QgbmV3X2FsbG9jYXRvciYpIHRocm93KCkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIG5ld19hbGxvY2F0b3IoY29uc3QgbmV3X2FsbG9jYXRvcjxfVHAxPiYpIHRocm93KCkgeyB9CisKKyAgICAgIH5uZXdfYWxsb2NhdG9yKCkgdGhyb3coKSB7IH0KKworICAgICAgcG9pbnRlcgorICAgICAgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CisKKyAgICAgIGNvbnN0X3BvaW50ZXIKKyAgICAgIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQorCisgICAgICAvLyBOQjogX19uIGlzIHBlcm1pdHRlZCB0byBiZSAwLiAgVGhlIEMrKyBzdGFuZGFyZCBzYXlzIG5vdGhpbmcKKyAgICAgIC8vIGFib3V0IHdoYXQgdGhlIHJldHVybiB2YWx1ZSBpcyB3aGVuIF9fbiA9PSAwLgorICAgICAgcG9pbnRlcgorICAgICAgYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAwKQorICAgICAgeyAKKwlpZiAoX19uID4gdGhpcy0+bWF4X3NpemUoKSkKKwkgIHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsKKworCXJldHVybiBzdGF0aWNfY2FzdDxfVHAqPig6Om9wZXJhdG9yIG5ldyhfX24gKiBzaXplb2YoX1RwKSkpOworICAgICAgfQorCisgICAgICAvLyBfX3AgaXMgbm90IHBlcm1pdHRlZCB0byBiZSBhIG51bGwgcG9pbnRlci4KKyAgICAgIHZvaWQKKyAgICAgIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSkKKyAgICAgIHsgOjpvcGVyYXRvciBkZWxldGUoX19wKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3QgdGhyb3coKSAKKyAgICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA0MDIuIHdyb25nIG5ldyBleHByZXNzaW9uIGluIFtzb21lX10gYWxsb2NhdG9yOjpjb25zdHJ1Y3QKKyAgICAgIHZvaWQgCisgICAgICBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIAorICAgICAgeyA6Om5ldygodm9pZCAqKV9fcCkgX1RwKF9fdmFsKTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICB2b2lkCisgICAgICAgIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeyA6Om5ldygodm9pZCAqKV9fcCkgX1RwKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7IH0KKyNlbmRpZgorCisgICAgICB2b2lkIAorICAgICAgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBuZXdfYWxsb2NhdG9yPF9UcD4mLCBjb25zdCBuZXdfYWxsb2NhdG9yPF9UcD4mKQorICAgIHsgcmV0dXJuIHRydWU7IH0KKyAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgbmV3X2FsbG9jYXRvcjxfVHA+JiwgY29uc3QgbmV3X2FsbG9jYXRvcjxfVHA+JikKKyAgICB7IHJldHVybiBmYWxzZTsgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvbnVtZXJpYyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L251bWVyaWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRmNWVlMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L251bWVyaWMKQEAgLTAsMCArMSwxNDYgQEAKKy8vIE51bWVyaWMgZXh0ZW5zaW9ucyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQsIDIwMDUsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBleHQvbnVtZXJpYworICogIFRoaXMgZmlsZSBpcyBhIEdOVSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IChwb3NzaWJseQorICogIGNvbnRhaW5pbmcgZXh0ZW5zaW9ucyBmcm9tIHRoZSBIUC9TR0kgU1RMIHN1YnNldCkuIAorICovCisKKyNpZm5kZWYgX0VYVF9OVU1FUklDCisjZGVmaW5lIF9FWFRfTlVNRVJJQyAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvY29uY2VwdF9jaGVjay5oPgorI2luY2x1ZGUgPG51bWVyaWM+CisKKyNpbmNsdWRlIDxleHQvZnVuY3Rpb25hbD4gLy8gRm9yIGlkZW50aXR5X2VsZW1lbnQKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKworICAvLyBSZXR1cm5zIF9feCAqKiBfX24sIHdoZXJlIF9fbiA+PSAwLiAgX05vdGUgdGhhdCAibXVsdGlwbGljYXRpb24iCisgIC8vIGlzIHJlcXVpcmVkIHRvIGJlIGFzc29jaWF0aXZlLCBidXQgbm90IG5lY2Vzc2FyaWx5IGNvbW11dGF0aXZlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfTW9ub2lkT3BlcmF0aW9uPgorICAgIF9UcAorICAgIF9fcG93ZXIoX1RwIF9feCwgX0ludGVnZXIgX19uLCBfTW9ub2lkT3BlcmF0aW9uIF9fbW9ub2lkX29wKQorICAgIHsKKyAgICAgIGlmIChfX24gPT0gMCkKKwlyZXR1cm4gaWRlbnRpdHlfZWxlbWVudChfX21vbm9pZF9vcCk7CisgICAgICBlbHNlCisJeworCSAgd2hpbGUgKChfX24gJiAxKSA9PSAwKQorCSAgICB7CisJICAgICAgX19uID4+PSAxOworCSAgICAgIF9feCA9IF9fbW9ub2lkX29wKF9feCwgX194KTsKKwkgICAgfQorCisJICBfVHAgX19yZXN1bHQgPSBfX3g7CisJICBfX24gPj49IDE7CisJICB3aGlsZSAoX19uICE9IDApCisJICAgIHsKKwkgICAgICBfX3ggPSBfX21vbm9pZF9vcChfX3gsIF9feCk7CisJICAgICAgaWYgKChfX24gJiAxKSAhPSAwKQorCQlfX3Jlc3VsdCA9IF9fbW9ub2lkX29wKF9fcmVzdWx0LCBfX3gpOworCSAgICAgIF9fbiA+Pj0gMTsKKwkgICAgfQorCSAgcmV0dXJuIF9fcmVzdWx0OworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSW50ZWdlcj4KKyAgICBpbmxpbmUgX1RwCisgICAgX19wb3dlcihfVHAgX194LCBfSW50ZWdlciBfX24pCisgICAgeyByZXR1cm4gX19wb3dlcihfX3gsIF9fbiwgc3RkOjptdWx0aXBsaWVzPF9UcD4oKSk7IH0KKworICAvKioKKyAgICogIFRoaXMgaXMgYW4gU0dJIGV4dGVuc2lvbi4KKyAgICogIEBpbmdyb3VwIFNHSWV4dGVuc2lvbnMKKyAgICogIEBkb2N0b2RvCisgICovCisgIC8vIEFsaWFzIGZvciB0aGUgaW50ZXJuYWwgbmFtZSBfX3Bvd2VyLiAgTm90ZSB0aGF0IHBvd2VyIGlzIGFuIGV4dGVuc2lvbiwKKyAgLy8gbm90IHBhcnQgb2YgdGhlIEMrKyBzdGFuZGFyZC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX01vbm9pZE9wZXJhdGlvbj4KKyAgICBpbmxpbmUgX1RwCisgICAgcG93ZXIoX1RwIF9feCwgX0ludGVnZXIgX19uLCBfTW9ub2lkT3BlcmF0aW9uIF9fbW9ub2lkX29wKQorICAgIHsgcmV0dXJuIF9fcG93ZXIoX194LCBfX24sIF9fbW9ub2lkX29wKTsgfQorCisgIC8qKgorICAgKiAgVGhpcyBpcyBhbiBTR0kgZXh0ZW5zaW9uLgorICAgKiAgQGluZ3JvdXAgU0dJZXh0ZW5zaW9ucworICAgKiAgQGRvY3RvZG8KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSW50ZWdlcj4KKyAgICBpbmxpbmUgX1RwCisgICAgcG93ZXIoX1RwIF9feCwgX0ludGVnZXIgX19uKQorICAgIHsgcmV0dXJuIF9fcG93ZXIoX194LCBfX24pOyB9CisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIFNHSSBleHRlbnNpb24uCisgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICAqICBAZG9jdG9kbworICAqLworICAvLyBpb3RhIGlzIG5vdCBwYXJ0IG9mIHRoZSBDKysgc3RhbmRhcmQuICBJdCBpcyBhbiBleHRlbnNpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICBpb3RhKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfVHAgX192YWx1ZSkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQ29udmVydGlibGVDb25jZXB0PF9UcCwKKwkgICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZT4pCisKKyAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwkqX19maXJzdCsrID0gX192YWx1ZSsrOworICAgIH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvbnVtZXJpY190cmFpdHMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L251bWVyaWNfdHJhaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdmY2Y5YwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L251bWVyaWNfdHJhaXRzLmgKQEAgLTAsMCArMSwxMzUgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZXh0L251bWVyaWNfdHJhaXRzLmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9FWFRfTlVNRVJJQ19UUkFJVFMKKyNkZWZpbmUgX0VYVF9OVU1FUklDX1RSQUlUUyAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvY3BwX3R5cGVfdHJhaXRzLmg+CisjaW5jbHVkZSA8ZXh0L3R5cGVfdHJhaXRzLmg+CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisKKyAgLy8gQ29tcGlsZSB0aW1lIGNvbnN0YW50cyBmb3IgYnVpbHRpbiB0eXBlcy4KKyAgLy8gU2FkbHkgc3RkOjpudW1lcmljX2xpbWl0cyBtZW1iZXIgZnVuY3Rpb25zIGNhbm5vdCBiZSB1c2VkIGZvciB0aGlzLgorI2RlZmluZSBfX2dsaWJjeHhfc2lnbmVkKF9UcCkgKChfVHApKC0xKSA8IDApCisjZGVmaW5lIF9fZ2xpYmN4eF9kaWdpdHMoX1RwKSBcCisgIChzaXplb2YoX1RwKSAqIF9fQ0hBUl9CSVRfXyAtIF9fZ2xpYmN4eF9zaWduZWQoX1RwKSkKKworI2RlZmluZSBfX2dsaWJjeHhfbWluKF9UcCkgXAorICAoX19nbGliY3h4X3NpZ25lZChfVHApID8gKF9UcCkxIDw8IF9fZ2xpYmN4eF9kaWdpdHMoX1RwKSA6IChfVHApMCkKKworI2RlZmluZSBfX2dsaWJjeHhfbWF4KF9UcCkgXAorICAoX19nbGliY3h4X3NpZ25lZChfVHApID8gXAorICAgKCgoKChfVHApMSA8PCAoX19nbGliY3h4X2RpZ2l0cyhfVHApIC0gMSkpIC0gMSkgPDwgMSkgKyAxKSA6IH4oX1RwKTApCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlPgorICAgIHN0cnVjdCBfX251bWVyaWNfdHJhaXRzX2ludGVnZXIKKyAgICB7CisgICAgICAvLyBPbmx5IGludGVnZXJzIGZvciBpbml0aWFsaXphdGlvbiBvZiBtZW1iZXIgY29uc3RhbnQuCisgICAgICBzdGF0aWMgY29uc3QgX1ZhbHVlIF9fbWluID0gX19nbGliY3h4X21pbihfVmFsdWUpOworICAgICAgc3RhdGljIGNvbnN0IF9WYWx1ZSBfX21heCA9IF9fZ2xpYmN4eF9tYXgoX1ZhbHVlKTsKKworICAgICAgLy8gTkI6IHRoZXNlIHR3byBhbHNvIGF2YWlsYWJsZSBpbiBzdGQ6Om51bWVyaWNfbGltaXRzIGFzIGNvbXBpbGUKKyAgICAgIC8vIHRpbWUgY29uc3RhbnRzLCBidXQgPGxpbWl0cz4gaXMgYmlnIGFuZCB3ZSBhdm9pZCBpbmNsdWRpbmcgaXQuCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBfX2lzX3NpZ25lZCA9IF9fZ2xpYmN4eF9zaWduZWQoX1ZhbHVlKTsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgX19kaWdpdHMgPSBfX2dsaWJjeHhfZGlnaXRzKF9WYWx1ZSk7ICAgICAgCisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWU+CisgICAgY29uc3QgX1ZhbHVlIF9fbnVtZXJpY190cmFpdHNfaW50ZWdlcjxfVmFsdWU+OjpfX21pbjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWU+CisgICAgY29uc3QgX1ZhbHVlIF9fbnVtZXJpY190cmFpdHNfaW50ZWdlcjxfVmFsdWU+OjpfX21heDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWU+CisgICAgY29uc3QgYm9vbCBfX251bWVyaWNfdHJhaXRzX2ludGVnZXI8X1ZhbHVlPjo6X19pc19zaWduZWQ7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlPgorICAgIGNvbnN0IGludCBfX251bWVyaWNfdHJhaXRzX2ludGVnZXI8X1ZhbHVlPjo6X19kaWdpdHM7CisKKyN1bmRlZiBfX2dsaWJjeHhfc2lnbmVkCisjdW5kZWYgX19nbGliY3h4X2RpZ2l0cworI3VuZGVmIF9fZ2xpYmN4eF9taW4KKyN1bmRlZiBfX2dsaWJjeHhfbWF4CisKKyNkZWZpbmUgX19nbGliY3h4X2Zsb2F0aW5nKF9UcCwgX0Z2YWwsIF9EdmFsLCBfTER2YWwpIFwKKyAgKHN0ZDo6X19hcmVfc2FtZTxfVHAsIGZsb2F0Pjo6X192YWx1ZSA/IF9GdmFsIFwKKyAgIDogc3RkOjpfX2FyZV9zYW1lPF9UcCwgZG91YmxlPjo6X192YWx1ZSA/IF9EdmFsIDogX0xEdmFsKQorCisjZGVmaW5lIF9fZ2xpYmN4eF9tYXhfZGlnaXRzMTAoX1RwKSBcCisgICgyICsgX19nbGliY3h4X2Zsb2F0aW5nKF9UcCwgX19GTFRfTUFOVF9ESUdfXywgX19EQkxfTUFOVF9ESUdfXywgXAorCQkJICBfX0xEQkxfTUFOVF9ESUdfXykgKiAzMDEwIC8gMTAwMDApCisKKyNkZWZpbmUgX19nbGliY3h4X2RpZ2l0czEwKF9UcCkgXAorICBfX2dsaWJjeHhfZmxvYXRpbmcoX1RwLCBfX0ZMVF9ESUdfXywgX19EQkxfRElHX18sIF9fTERCTF9ESUdfXykKKworI2RlZmluZSBfX2dsaWJjeHhfbWF4X2V4cG9uZW50MTAoX1RwKSBcCisgIF9fZ2xpYmN4eF9mbG9hdGluZyhfVHAsIF9fRkxUX01BWF8xMF9FWFBfXywgX19EQkxfTUFYXzEwX0VYUF9fLCBcCisJCSAgICAgX19MREJMX01BWF8xMF9FWFBfXykKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWU+CisgICAgc3RydWN0IF9fbnVtZXJpY190cmFpdHNfZmxvYXRpbmcKKyAgICB7CisgICAgICAvLyBPbmx5IGZsb2F0aW5nIHBvaW50IHR5cGVzLiBTZWUgTjE4MjIuIAorICAgICAgc3RhdGljIGNvbnN0IGludCBfX21heF9kaWdpdHMxMCA9IF9fZ2xpYmN4eF9tYXhfZGlnaXRzMTAoX1ZhbHVlKTsKKworICAgICAgLy8gU2VlIGFib3ZlIGNvbW1lbnQuLi4KKyAgICAgIHN0YXRpYyBjb25zdCBib29sIF9faXNfc2lnbmVkID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgX19kaWdpdHMxMCA9IF9fZ2xpYmN4eF9kaWdpdHMxMChfVmFsdWUpOworICAgICAgc3RhdGljIGNvbnN0IGludCBfX21heF9leHBvbmVudDEwID0gX19nbGliY3h4X21heF9leHBvbmVudDEwKF9WYWx1ZSk7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWU+CisgICAgY29uc3QgaW50IF9fbnVtZXJpY190cmFpdHNfZmxvYXRpbmc8X1ZhbHVlPjo6X19tYXhfZGlnaXRzMTA7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlPgorICAgIGNvbnN0IGJvb2wgX19udW1lcmljX3RyYWl0c19mbG9hdGluZzxfVmFsdWU+OjpfX2lzX3NpZ25lZDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWU+CisgICAgY29uc3QgaW50IF9fbnVtZXJpY190cmFpdHNfZmxvYXRpbmc8X1ZhbHVlPjo6X19kaWdpdHMxMDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWU+CisgICAgY29uc3QgaW50IF9fbnVtZXJpY190cmFpdHNfZmxvYXRpbmc8X1ZhbHVlPjo6X19tYXhfZXhwb25lbnQxMDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWU+CisgICAgc3RydWN0IF9fbnVtZXJpY190cmFpdHMKKyAgICA6IHB1YmxpYyBfX2NvbmRpdGlvbmFsX3R5cGU8c3RkOjpfX2lzX2ludGVnZXI8X1ZhbHVlPjo6X192YWx1ZSwKKwkJCQlfX251bWVyaWNfdHJhaXRzX2ludGVnZXI8X1ZhbHVlPiwKKwkJCQlfX251bWVyaWNfdHJhaXRzX2Zsb2F0aW5nPF9WYWx1ZT4gPjo6X190eXBlCisgICAgeyB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyN1bmRlZiBfX2dsaWJjeHhfZmxvYXRpbmcKKyN1bmRlZiBfX2dsaWJjeHhfbWF4X2RpZ2l0czEwCisjdW5kZWYgX19nbGliY3h4X2RpZ2l0czEwCisjdW5kZWYgX19nbGliY3h4X21heF9leHBvbmVudDEwCisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2Fzc29jX2NvbnRhaW5lci5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYTk1M2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwCkBAIC0wLDAgKzEsNjk5IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBhc3NvY19jb250YWluZXIuaHBwCisgKiBDb250YWlucyBhc3NvY2lhdGl2ZSBjb250YWluZXJzLgorICovCisKKyNpZm5kZWYgUEJfRFNfQVNTT0NfQ05UTlJfSFBQCisjZGVmaW5lIFBCX0RTX0FTU09DX0NOVE5SX0hQUAorCisjaW5jbHVkZSA8ZXh0L3R5cGVsaXN0Lmg+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL3RhZ19hbmRfdHJhaXQuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvc3RhbmRhcmRfcG9saWNpZXMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvY29udGFpbmVyX2Jhc2VfZGlzcGF0Y2guaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmFzaWNfdHJlZV9wb2xpY3kvdHJhaXRzLmhwcD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgLyoqIEBkZWZncm91cCBwYmRzIFBvbGljeS1CYXNlZCBEYXRhIFN0cnVjdHVyZXMKKyAgICogIEBpbmdyb3VwIGV4dGVuc2lvbnMKKyAgICoKKyAgICogIFRoaXMgaXMgYSBsaWJyYXJ5IG9mIHBvbGljeS1iYXNlZCBlbGVtZW50YXJ5IGRhdGEgc3RydWN0dXJlczoKKyAgICogIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMgYW5kIHByaW9yaXR5IHF1ZXVlcy4gSXQgaXMgZGVzaWduZWQgZm9yCisgICAqICBoaWdoLXBlcmZvcm1hbmNlLCBmbGV4aWJpbGl0eSwgc2VtYW50aWMgc2FmZXR5LCBhbmQgY29uZm9ybWFuY2UKKyAgICogIHRvIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRhaW5lcnMgaW4gc3RkIChleGNlcHQgZm9yIHNvbWUgcG9pbnRzCisgICAqICB3aGVyZSBpdCBkaWZmZXJzIGJ5IGRlc2lnbikuCisgICAqCisgICAqICBGb3IgZGV0YWlscywgc2VlOiAKKyAgICogIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2xpYnN0ZGMrKy9leHQvcGJfZHMvaW5kZXguaHRtbAorICAgKgorICAgKiAgQHsKKyAgICovCisgCisjZGVmaW5lIFBCX0RTX0JBU0VfQ19ERUMgXAorICBkZXRhaWw6OmNvbnRhaW5lcl9iYXNlX2Rpc3BhdGNoPEtleSwgTWFwcGVkLCBUYWcsIFBvbGljeV9UbCwgQWxsb2NhdG9yPjo6dHlwZQorCisgIC8vLyBBbiBhYnN0cmFjdCBiYXNpYyBhc3NvY2lhdGl2ZSBjb250YWluZXIuCisgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgCisJICAgdHlwZW5hbWUgTWFwcGVkLCAKKwkgICB0eXBlbmFtZSBUYWcsIAorCSAgIHR5cGVuYW1lIFBvbGljeV9UbCwgCisJICAgdHlwZW5hbWUgQWxsb2NhdG9yPgorICBjbGFzcyBjb250YWluZXJfYmFzZSA6IHB1YmxpYyBQQl9EU19CQVNFX0NfREVDCisgIHsKKyAgcHJpdmF0ZToKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFBCX0RTX0JBU0VfQ19ERUMgCQkJYmFzZV90eXBlOworCisgIHB1YmxpYzoKKyAgICB0eXBlZGVmIFRhZyAJCQkJCWNvbnRhaW5lcl9jYXRlZ29yeTsKKyAgICB0eXBlZGVmIEFsbG9jYXRvciAJCQkJCWFsbG9jYXRvcl90eXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgYWxsb2NhdG9yX3R5cGU6OnNpemVfdHlwZSAJCXNpemVfdHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGFsbG9jYXRvcl90eXBlOjpkaWZmZXJlbmNlX3R5cGUgCWRpZmZlcmVuY2VfdHlwZTsKKworICAgIC8vIGtleV90eXBlCisgICAgdHlwZWRlZiB0eXBlbmFtZSBhbGxvY2F0b3JfdHlwZTo6dGVtcGxhdGUgcmViaW5kPEtleT46Om90aGVyOjp2YWx1ZV90eXBlIGtleV90eXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgYWxsb2NhdG9yX3R5cGU6OnRlbXBsYXRlIHJlYmluZDxrZXlfdHlwZT46Om90aGVyIGtleV9yZWJpbmQ7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBrZXlfcmViaW5kOjpyZWZlcmVuY2UgCQlrZXlfcmVmZXJlbmNlOworICAgIHR5cGVkZWYgdHlwZW5hbWUga2V5X3JlYmluZDo6Y29uc3RfcmVmZXJlbmNlIAljb25zdF9rZXlfcmVmZXJlbmNlOworICAgIHR5cGVkZWYgdHlwZW5hbWUga2V5X3JlYmluZDo6cG9pbnRlciAJCWtleV9wb2ludGVyOworICAgIHR5cGVkZWYgdHlwZW5hbWUga2V5X3JlYmluZDo6Y29uc3RfcG9pbnRlciAJCWNvbnN0X2tleV9wb2ludGVyOworCisgICAgLy8gbWFwcGVkX3R5cGUKKyAgICB0eXBlZGVmIE1hcHBlZCAJCQkJCW1hcHBlZF90eXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgYWxsb2NhdG9yX3R5cGU6OnRlbXBsYXRlIHJlYmluZDxtYXBwZWRfdHlwZT46Om90aGVyIG1hcHBlZF9yZWJpbmQ7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBtYXBwZWRfcmViaW5kOjpyZWZlcmVuY2UgCQltYXBwZWRfcmVmZXJlbmNlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgbWFwcGVkX3JlYmluZDo6Y29uc3RfcmVmZXJlbmNlCWNvbnN0X21hcHBlZF9yZWZlcmVuY2U7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBtYXBwZWRfcmViaW5kOjpwb2ludGVyIAkJbWFwcGVkX3BvaW50ZXI7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBtYXBwZWRfcmViaW5kOjpjb25zdF9wb2ludGVyIAljb25zdF9tYXBwZWRfcG9pbnRlcjsKKworICAgIC8vIHZhbHVlX3R5cGUKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6dmFsdWVfdHlwZSAJCXZhbHVlX3R5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBhbGxvY2F0b3JfdHlwZTo6dGVtcGxhdGUgcmViaW5kPHZhbHVlX3R5cGU+OjpvdGhlciB2YWx1ZV9yZWJpbmQ7CisgICAgdHlwZWRlZiB0eXBlbmFtZSB2YWx1ZV9yZWJpbmQ6OnJlZmVyZW5jZQkJcmVmZXJlbmNlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgdmFsdWVfcmViaW5kOjpjb25zdF9yZWZlcmVuY2UgCWNvbnN0X3JlZmVyZW5jZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIHZhbHVlX3JlYmluZDo6cG9pbnRlciAJCXBvaW50ZXI7CisgICAgdHlwZWRlZiB0eXBlbmFtZSB2YWx1ZV9yZWJpbmQ6OmNvbnN0X3BvaW50ZXIgCWNvbnN0X3BvaW50ZXI7CisKKyAgICAvLyBpdGVyYXRvcnMKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6aXRlcmF0b3IgCQlpdGVyYXRvcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfaXRlcmF0b3IgCQljb25zdF9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6cG9pbnRfaXRlcmF0b3IgCQlwb2ludF9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfcG9pbnRfaXRlcmF0b3IgCWNvbnN0X3BvaW50X2l0ZXJhdG9yOworCisgICAgdmlydHVhbAorICAgIH5jb250YWluZXJfYmFzZSgpIHsgfQorCisgIHByb3RlY3RlZDoKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfTkFNRSAJCWNvbnRhaW5lcl9iYXNlCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcD4KKyN1bmRlZiBQQl9EU19DTEFTU19OQU1FCisgIH07CisKKyN1bmRlZiBQQl9EU19CQVNFX0NfREVDCisKKworI2RlZmluZSBQQl9EU19CQVNFX0NfREVDIFwKKyAgY29udGFpbmVyX2Jhc2U8S2V5LCBNYXBwZWQsIFRhZywgdHlwZW5hbWUgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXBwZW5kPCBcCisgIHR5cGVuYW1lIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmNyZWF0ZTQ8SGFzaF9GbiwgRXFfRm4sIFJlc2l6ZV9Qb2xpY3ksIGRldGFpbDo6aW50ZWdyYWxfY29uc3RhbnQ8aW50LCBTdG9yZV9IYXNoPiA+Ojp0eXBlLCBQb2xpY3lfVEw+Ojp0eXBlLCBBbGxvY2F0b3I+CisKKyAgLy8vIEFuIGFic3RyYWN0IGJhc2ljIGhhc2gtYmFzZWQgYXNzb2NpYXRpdmUgY29udGFpbmVyLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksCisJICAgdHlwZW5hbWUgTWFwcGVkLAorCSAgIHR5cGVuYW1lIEhhc2hfRm4sCisJICAgdHlwZW5hbWUgRXFfRm4sCisJICAgdHlwZW5hbWUgUmVzaXplX1BvbGljeSwKKwkgICBib29sIFN0b3JlX0hhc2gsCisJICAgdHlwZW5hbWUgVGFnLAorCSAgIHR5cGVuYW1lIFBvbGljeV9UTCwKKwkgICB0eXBlbmFtZSBBbGxvY2F0b3I+CisgIGNsYXNzIGJhc2ljX2hhc2hfdGFibGUgOiBwdWJsaWMgUEJfRFNfQkFTRV9DX0RFQworICB7CisgIHByaXZhdGU6CisgICAgdHlwZWRlZiBQQl9EU19CQVNFX0NfREVDIGJhc2VfdHlwZTsKKworICBwdWJsaWM6CisgICAgdmlydHVhbAorICAgIH5iYXNpY19oYXNoX3RhYmxlKCkgeyB9CisKKyAgcHJvdGVjdGVkOgorI2RlZmluZSBQQl9EU19DTEFTU19OQU1FIGJhc2ljX2hhc2hfdGFibGUKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwPgorI3VuZGVmIFBCX0RTX0NMQVNTX05BTUUKKworICBwcml2YXRlOgorICAgIGJhc2ljX2hhc2hfdGFibGUmIAorICAgIG9wZXJhdG9yPShjb25zdCBiYXNlX3R5cGUmKTsKKyAgfTsKKworI3VuZGVmIFBCX0RTX0JBU0VfQ19ERUMKKworCisjZGVmaW5lIFBCX0RTX0JBU0VfQ19ERUMgXAorICBiYXNpY19oYXNoX3RhYmxlPEtleSwgTWFwcGVkLAlIYXNoX0ZuLCBFcV9GbiwgUmVzaXplX1BvbGljeSwgU3RvcmVfSGFzaCwgXAorCQkgICBjY19oYXNoX3RhZywJXAorCSAgdHlwZW5hbWUgX19nbnVfY3h4Ojp0eXBlbGlzdDo6Y3JlYXRlMTxDb21iX0hhc2hfRm4+Ojp0eXBlLCBBbGxvY2F0b3I+CisKKyAgLy8vIEEgY29uY3JldGUgY29sbGlzaW9uLWNoYWluaW5nIGhhc2gtYmFzZWQgYXNzb2NpYXRpdmUgY29udGFpbmVyLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksCisJICAgdHlwZW5hbWUgTWFwcGVkLAorCSAgIHR5cGVuYW1lIEhhc2hfRm4gPSB0eXBlbmFtZSBkZXRhaWw6OmRlZmF1bHRfaGFzaF9mbjxLZXk+Ojp0eXBlLAorCSAgIHR5cGVuYW1lIEVxX0ZuID0gdHlwZW5hbWUgZGV0YWlsOjpkZWZhdWx0X2VxX2ZuPEtleT46OnR5cGUsCisJICAgdHlwZW5hbWUgQ29tYl9IYXNoX0ZuID0gZGV0YWlsOjpkZWZhdWx0X2NvbWJfaGFzaF9mbjo6dHlwZSwKKwkgICB0eXBlbmFtZSBSZXNpemVfUG9saWN5ID0gdHlwZW5hbWUgZGV0YWlsOjpkZWZhdWx0X3Jlc2l6ZV9wb2xpY3k8Q29tYl9IYXNoX0ZuPjo6dHlwZSwKKwkgICBib29sIFN0b3JlX0hhc2ggPSBkZXRhaWw6OmRlZmF1bHRfc3RvcmVfaGFzaCwKKwkgICB0eXBlbmFtZSBBbGxvY2F0b3IgPSBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+CisgIGNsYXNzIGNjX2hhc2hfdGFibGUgOiAgcHVibGljIFBCX0RTX0JBU0VfQ19ERUMKKyAgeworICBwcml2YXRlOgorICAgIHR5cGVkZWYgUEJfRFNfQkFTRV9DX0RFQyAJYmFzZV90eXBlOworCisgIHB1YmxpYzoKKyAgICB0eXBlZGVmIEhhc2hfRm4gCQloYXNoX2ZuOworICAgIHR5cGVkZWYgRXFfRm4gCQllcV9mbjsKKyAgICB0eXBlZGVmIFJlc2l6ZV9Qb2xpY3kgCXJlc2l6ZV9wb2xpY3k7CisgICAgdHlwZWRlZiBDb21iX0hhc2hfRm4gCWNvbWJfaGFzaF9mbjsKKworICAgIC8vIERlZmF1bHQgY29uc3RydWN0b3IuCisgICAgY2NfaGFzaF90YWJsZSgpIHsgfQorCisgICAgLy8gQ29uc3RydWN0b3IgdGFraW5nIHNvbWUgcG9saWN5IG9iamVjdHMuIHJfaGFzaF9mbiB3aWxsIGJlCisgICAgLy8gY29waWVkIGJ5IHRoZSBIYXNoX0ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdC4KKyAgICBjY19oYXNoX3RhYmxlKGNvbnN0IGhhc2hfZm4mIGgpIAorICAgIDogYmFzZV90eXBlKGgpIHsgfQorCisgICAgLy8gQ29uc3RydWN0b3IgdGFraW5nIHNvbWUgcG9saWN5IG9iamVjdHMuIHJfaGFzaF9mbiB3aWxsIGJlCisgICAgLy8gY29waWVkIGJ5IHRoZSBoYXNoX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdCwgYW5kCisgICAgLy8gcl9lcV9mbiB3aWxsIGJlIGNvcGllZCBieSB0aGUgZXFfZm4gb2JqZWN0IG9mIHRoZSBjb250YWluZXIKKyAgICAvLyBvYmplY3QuCisgICAgY2NfaGFzaF90YWJsZShjb25zdCBoYXNoX2ZuJiBoLCBjb25zdCBlcV9mbiYgZSkKKyAgICA6IGJhc2VfdHlwZShoLCBlKSB7IH0KKworICAgIC8vIENvbnN0cnVjdG9yIHRha2luZyBzb21lIHBvbGljeSBvYmplY3RzLiByX2hhc2hfZm4gd2lsbCBiZQorICAgIC8vIGNvcGllZCBieSB0aGUgaGFzaF9mbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lciBvYmplY3QsIHJfZXFfZm4KKyAgICAvLyB3aWxsIGJlIGNvcGllZCBieSB0aGUgZXFfZm4gb2JqZWN0IG9mIHRoZSBjb250YWluZXIgb2JqZWN0LCBhbmQKKyAgICAvLyByX2NvbWJfaGFzaF9mbiB3aWxsIGJlIGNvcGllZCBieSB0aGUgY29tYl9oYXNoX2ZuIG9iamVjdCBvZiB0aGUKKyAgICAvLyBjb250YWluZXIgb2JqZWN0LgorICAgIGNjX2hhc2hfdGFibGUoY29uc3QgaGFzaF9mbiYgaCwgY29uc3QgZXFfZm4mIGUsIGNvbnN0IGNvbWJfaGFzaF9mbiYgY2gpCisgICAgOiBiYXNlX3R5cGUoaCwgZSwgY2gpIHsgfQorCisgICAgLy8gQ29uc3RydWN0b3IgdGFraW5nIHNvbWUgcG9saWN5IG9iamVjdHMuIHJfaGFzaF9mbiB3aWxsIGJlCisgICAgLy8gY29waWVkIGJ5IHRoZSBoYXNoX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdCwgcl9lcV9mbgorICAgIC8vIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBlcV9mbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lciBvYmplY3QsCisgICAgLy8gcl9jb21iX2hhc2hfZm4gd2lsbCBiZSBjb3BpZWQgYnkgdGhlIGNvbWJfaGFzaF9mbiBvYmplY3Qgb2YgdGhlCisgICAgLy8gY29udGFpbmVyIG9iamVjdCwgYW5kIHJfcmVzaXplX3BvbGljeSB3aWxsIGJlIGNvcGllZCBieSB0aGUKKyAgICAvLyByZXNpemVfcG9saWN5IG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdC4KKyAgICBjY19oYXNoX3RhYmxlKGNvbnN0IGhhc2hfZm4mIGgsIGNvbnN0IGVxX2ZuJiBlLCBjb25zdCBjb21iX2hhc2hfZm4mIGNoLCAKKwkJICBjb25zdCByZXNpemVfcG9saWN5JiBycCkgICAgCisgICAgOiBiYXNlX3R5cGUoaCwgZSwgY2gsIHJwKSB7IH0KKworICAgIC8vIENvbnN0cnVjdG9yIHRha2luZyBfX2l0ZXJhdG9ycyB0byBhIHJhbmdlIG9mIHZhbHVlX3R5cGVzLiBUaGUKKyAgICAvLyB2YWx1ZV90eXBlcyBiZXR3ZWVuIGZpcnN0X2l0IGFuZCBsYXN0X2l0IHdpbGwgYmUgaW5zZXJ0ZWQgaW50bworICAgIC8vIHRoZSBjb250YWluZXIgb2JqZWN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0PgorICAgIGNjX2hhc2hfdGFibGUoSXQgZmlyc3QsIEl0IGxhc3QpCisgICAgeyBiYXNlX3R5cGU6OmNvcHlfZnJvbV9yYW5nZShmaXJzdCwgbGFzdCk7IH0KKworICAgIC8vIENvbnN0cnVjdG9yIHRha2luZyBfX2l0ZXJhdG9ycyB0byBhIHJhbmdlIG9mIHZhbHVlX3R5cGVzIGFuZAorICAgIC8vIHNvbWUgcG9saWN5IG9iamVjdHMuIFRoZSB2YWx1ZV90eXBlcyBiZXR3ZWVuIGZpcnN0X2l0IGFuZAorICAgIC8vIGxhc3RfaXQgd2lsbCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBjb250YWluZXIgb2JqZWN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0PgorICAgIGNjX2hhc2hfdGFibGUoSXQgZmlyc3QsIEl0IGxhc3QsIGNvbnN0IGhhc2hfZm4mIGgpCisgICAgOiBiYXNlX3R5cGUoaCkKKyAgICB7IGNvcHlfZnJvbV9yYW5nZShmaXJzdCwgbGFzdCk7IH0KKworICAgIC8vIENvbnN0cnVjdG9yIHRha2luZyBfX2l0ZXJhdG9ycyB0byBhIHJhbmdlIG9mIHZhbHVlX3R5cGVzIGFuZAorICAgIC8vIHNvbWUgcG9saWN5IG9iamVjdHMgVGhlIHZhbHVlX3R5cGVzIGJldHdlZW4gZmlyc3RfaXQgYW5kCisgICAgLy8gbGFzdF9pdCB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlIGNvbnRhaW5lciBvYmplY3QuIHJfaGFzaF9mbgorICAgIC8vIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBoYXNoX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdCwKKyAgICAvLyBhbmQgcl9lcV9mbiB3aWxsIGJlIGNvcGllZCBieSB0aGUgZXFfZm4gb2JqZWN0IG9mIHRoZSBjb250YWluZXIKKyAgICAvLyBvYmplY3QuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXQ+CisgICAgY2NfaGFzaF90YWJsZShJdCBmaXJzdCwgSXQgbGFzdCwgY29uc3QgaGFzaF9mbiYgaCwgY29uc3QgZXFfZm4mIGUpCisgICAgOiBiYXNlX3R5cGUoaCwgZSkKKyAgICB7IGNvcHlfZnJvbV9yYW5nZShmaXJzdCwgbGFzdCk7IH0KKworICAgIC8vIENvbnN0cnVjdG9yIHRha2luZyBfX2l0ZXJhdG9ycyB0byBhIHJhbmdlIG9mIHZhbHVlX3R5cGVzIGFuZAorICAgIC8vIHNvbWUgcG9saWN5IG9iamVjdHMgVGhlIHZhbHVlX3R5cGVzIGJldHdlZW4gZmlyc3RfaXQgYW5kCisgICAgLy8gbGFzdF9pdCB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlIGNvbnRhaW5lciBvYmplY3QuIHJfaGFzaF9mbgorICAgIC8vIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBoYXNoX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdCwKKyAgICAvLyByX2VxX2ZuIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBlcV9mbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lcgorICAgIC8vIG9iamVjdCwgYW5kIHJfY29tYl9oYXNoX2ZuIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBjb21iX2hhc2hfZm4KKyAgICAvLyBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lciBvYmplY3QuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXQ+CisgICAgY2NfaGFzaF90YWJsZShJdCBmaXJzdCwgSXQgbGFzdCwgY29uc3QgaGFzaF9mbiYgaCwgY29uc3QgZXFfZm4mIGUsCisJCSAgY29uc3QgY29tYl9oYXNoX2ZuJiBjaCkKKyAgICA6IGJhc2VfdHlwZShoLCBlLCBjaCkKKyAgICB7IGNvcHlfZnJvbV9yYW5nZShmaXJzdCwgbGFzdCk7IH0KKworICAgIC8vIENvbnN0cnVjdG9yIHRha2luZyBfX2l0ZXJhdG9ycyB0byBhIHJhbmdlIG9mIHZhbHVlX3R5cGVzIGFuZAorICAgIC8vIHNvbWUgcG9saWN5IG9iamVjdHMgVGhlIHZhbHVlX3R5cGVzIGJldHdlZW4gZmlyc3RfaXQgYW5kCisgICAgLy8gbGFzdF9pdCB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlIGNvbnRhaW5lciBvYmplY3QuIHJfaGFzaF9mbgorICAgIC8vIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBoYXNoX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdCwKKyAgICAvLyByX2VxX2ZuIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBlcV9mbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lcgorICAgIC8vIG9iamVjdCwgcl9jb21iX2hhc2hfZm4gd2lsbCBiZSBjb3BpZWQgYnkgdGhlIGNvbWJfaGFzaF9mbgorICAgIC8vIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdCwgYW5kIHJfcmVzaXplX3BvbGljeSB3aWxsIGJlCisgICAgLy8gY29waWVkIGJ5IHRoZSByZXNpemVfcG9saWN5IG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KKyAgICBjY19oYXNoX3RhYmxlKEl0IGZpcnN0LCBJdCBsYXN0LCBjb25zdCBoYXNoX2ZuJiBoLCBjb25zdCBlcV9mbiYgZSwgCisJCSAgY29uc3QgY29tYl9oYXNoX2ZuJiBjaCwgY29uc3QgcmVzaXplX3BvbGljeSYgcnApCisgICAgOiBiYXNlX3R5cGUoaCwgZSwgY2gsIHJwKQorICAgIHsgY29weV9mcm9tX3JhbmdlKGZpcnN0LCBsYXN0KTsgfQorCisgICAgY2NfaGFzaF90YWJsZShjb25zdCBjY19oYXNoX3RhYmxlJiBvdGhlcikKKyAgICA6IGJhc2VfdHlwZSgoY29uc3QgYmFzZV90eXBlJilvdGhlcikKKyAgICB7IH0KKworICAgIHZpcnR1YWwKKyAgICB+Y2NfaGFzaF90YWJsZSgpIHsgfQorCisgICAgY2NfaGFzaF90YWJsZSYgCisgICAgb3BlcmF0b3I9KGNvbnN0IGNjX2hhc2hfdGFibGUmIG90aGVyKQorICAgIHsKKyAgICAgIGlmICh0aGlzICE9ICZvdGhlcikKKwl7CisJICBjY19oYXNoX3RhYmxlIHRtcChvdGhlcik7CisJICBzd2FwKHRtcCk7CisJfQorICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIHZvaWQKKyAgICBzd2FwKGNjX2hhc2hfdGFibGUmIG90aGVyKQorICAgIHsgYmFzZV90eXBlOjpzd2FwKG90aGVyKTsgfQorICB9OworCisjdW5kZWYgUEJfRFNfQkFTRV9DX0RFQworCisKKyNkZWZpbmUgUEJfRFNfQkFTRV9DX0RFQyBcCisgIGJhc2ljX2hhc2hfdGFibGU8S2V5LCBNYXBwZWQsCUhhc2hfRm4sIEVxX0ZuLCBSZXNpemVfUG9saWN5LCBTdG9yZV9IYXNoLCBcCisJCSAgIGdwX2hhc2hfdGFnLCBcCisJCSAgIHR5cGVuYW1lIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmNyZWF0ZTI8Q29tYl9Qcm9iZV9GbiwgUHJvYmVfRm4+Ojp0eXBlLCBBbGxvY2F0b3I+CisKKyAgLy8vIEEgY29uY3JldGUgZ2VuZXJhbC1wcm9iaW5nIGhhc2gtYmFzZWQgYXNzb2NpYXRpdmUgY29udGFpbmVyLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksCisJICAgdHlwZW5hbWUgTWFwcGVkLAorCSAgIHR5cGVuYW1lIEhhc2hfRm4gPSB0eXBlbmFtZSBkZXRhaWw6OmRlZmF1bHRfaGFzaF9mbjxLZXk+Ojp0eXBlLAorCSAgIHR5cGVuYW1lIEVxX0ZuID0gdHlwZW5hbWUgZGV0YWlsOjpkZWZhdWx0X2VxX2ZuPEtleT46OnR5cGUsCisJICAgdHlwZW5hbWUgQ29tYl9Qcm9iZV9GbiA9IGRldGFpbDo6ZGVmYXVsdF9jb21iX2hhc2hfZm46OnR5cGUsCisJICAgdHlwZW5hbWUgUHJvYmVfRm4gPSB0eXBlbmFtZSBkZXRhaWw6OmRlZmF1bHRfcHJvYmVfZm48Q29tYl9Qcm9iZV9Gbj46OnR5cGUsCisJICAgdHlwZW5hbWUgUmVzaXplX1BvbGljeSA9IHR5cGVuYW1lIGRldGFpbDo6ZGVmYXVsdF9yZXNpemVfcG9saWN5PENvbWJfUHJvYmVfRm4+Ojp0eXBlLAorCSAgIGJvb2wgU3RvcmVfSGFzaCA9IGRldGFpbDo6ZGVmYXVsdF9zdG9yZV9oYXNoLAorCSAgIHR5cGVuYW1lIEFsbG9jYXRvciA9IHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4KKyAgY2xhc3MgZ3BfaGFzaF90YWJsZSA6IHB1YmxpYyBQQl9EU19CQVNFX0NfREVDCisgIHsKKyAgcHJpdmF0ZToKKyAgICB0eXBlZGVmIFBCX0RTX0JBU0VfQ19ERUMgCWJhc2VfdHlwZTsKKworICBwdWJsaWM6CisgICAgdHlwZWRlZiBIYXNoX0ZuIAkJaGFzaF9mbjsKKyAgICB0eXBlZGVmIEVxX0ZuIAkJZXFfZm47CisgICAgdHlwZWRlZiBDb21iX1Byb2JlX0ZuCWNvbWJfcHJvYmVfZm47CisgICAgdHlwZWRlZiBQcm9iZV9GbiAJCXByb2JlX2ZuOworICAgIHR5cGVkZWYgUmVzaXplX1BvbGljeSAJcmVzaXplX3BvbGljeTsKKworICAgIC8vIERlZmF1bHQgY29uc3RydWN0b3IuCisgICAgZ3BfaGFzaF90YWJsZSgpIHsgfQorCisgICAgLy8gQ29uc3RydWN0b3IgdGFraW5nIHNvbWUgcG9saWN5IG9iamVjdHMuIHJfaGFzaF9mbiB3aWxsIGJlCisgICAgLy8gY29waWVkIGJ5IHRoZSBoYXNoX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdC4KKyAgICBncF9oYXNoX3RhYmxlKGNvbnN0IGhhc2hfZm4mIGgpCisgICAgOiBiYXNlX3R5cGUoaCkgeyB9CisKKyAgICAvLyBDb25zdHJ1Y3RvciB0YWtpbmcgc29tZSBwb2xpY3kgb2JqZWN0cy4gcl9oYXNoX2ZuIHdpbGwgYmUKKyAgICAvLyBjb3BpZWQgYnkgdGhlIGhhc2hfZm4gb2JqZWN0IG9mIHRoZSBjb250YWluZXIgb2JqZWN0LCBhbmQKKyAgICAvLyByX2VxX2ZuIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBlcV9mbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lcgorICAgIC8vIG9iamVjdC4KKyAgICBncF9oYXNoX3RhYmxlKGNvbnN0IGhhc2hfZm4mIGgsIGNvbnN0IGVxX2ZuJiBlKQorICAgIDogYmFzZV90eXBlKGgsIGUpIHsgfQorCisgICAgLy8gQ29uc3RydWN0b3IgdGFraW5nIHNvbWUgcG9saWN5IG9iamVjdHMuIHJfaGFzaF9mbiB3aWxsIGJlCisgICAgLy8gY29waWVkIGJ5IHRoZSBoYXNoX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdCwgcl9lcV9mbgorICAgIC8vIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBlcV9mbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lciBvYmplY3QsIGFuZAorICAgIC8vIHJfY29tYl9wcm9iZV9mbiB3aWxsIGJlIGNvcGllZCBieSB0aGUgY29tYl9wcm9iZV9mbiBvYmplY3Qgb2YKKyAgICAvLyB0aGUgY29udGFpbmVyIG9iamVjdC4KKyAgICBncF9oYXNoX3RhYmxlKGNvbnN0IGhhc2hfZm4mIGgsIGNvbnN0IGVxX2ZuJiBlLCBjb25zdCBjb21iX3Byb2JlX2ZuJiBjcCkKKyAgICA6IGJhc2VfdHlwZShoLCBlLCBjcCkgeyB9CisKKyAgICAvLyBDb25zdHJ1Y3RvciB0YWtpbmcgc29tZSBwb2xpY3kgb2JqZWN0cy4gcl9oYXNoX2ZuIHdpbGwgYmUKKyAgICAvLyBjb3BpZWQgYnkgdGhlIGhhc2hfZm4gb2JqZWN0IG9mIHRoZSBjb250YWluZXIgb2JqZWN0LCByX2VxX2ZuCisgICAgLy8gd2lsbCBiZSBjb3BpZWQgYnkgdGhlIGVxX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdCwKKyAgICAvLyByX2NvbWJfcHJvYmVfZm4gd2lsbCBiZSBjb3BpZWQgYnkgdGhlIGNvbWJfcHJvYmVfZm4gb2JqZWN0IG9mCisgICAgLy8gdGhlIGNvbnRhaW5lciBvYmplY3QsIGFuZCByX3Byb2JlX2ZuIHdpbGwgYmUgY29waWVkIGJ5IHRoZQorICAgIC8vIHByb2JlX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdC4KKyAgICBncF9oYXNoX3RhYmxlKGNvbnN0IGhhc2hfZm4mIGgsIGNvbnN0IGVxX2ZuJiBlLCBjb25zdCBjb21iX3Byb2JlX2ZuJiBjcCwgCisJCSAgY29uc3QgcHJvYmVfZm4mIHApCisgICAgOiBiYXNlX3R5cGUoaCwgZSwgY3AsIHApIHsgfQorCisgICAgLy8gQ29uc3RydWN0b3IgdGFraW5nIHNvbWUgcG9saWN5IG9iamVjdHMuIHJfaGFzaF9mbiB3aWxsIGJlCisgICAgLy8gY29waWVkIGJ5IHRoZSBoYXNoX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdCwgcl9lcV9mbgorICAgIC8vIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBlcV9mbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lciBvYmplY3QsCisgICAgLy8gcl9jb21iX3Byb2JlX2ZuIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBjb21iX3Byb2JlX2ZuIG9iamVjdCBvZgorICAgIC8vIHRoZSBjb250YWluZXIgb2JqZWN0LCByX3Byb2JlX2ZuIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBwcm9iZV9mbgorICAgIC8vIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdCwgYW5kIHJfcmVzaXplX3BvbGljeSB3aWxsIGJlCisgICAgLy8gY29waWVkIGJ5IHRoZSBSZXNpemVfUG9saWN5IG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdC4KKyAgICBncF9oYXNoX3RhYmxlKGNvbnN0IGhhc2hfZm4mIGgsIGNvbnN0IGVxX2ZuJiBlLCBjb25zdCBjb21iX3Byb2JlX2ZuJiBjcCwgCisJCSAgY29uc3QgcHJvYmVfZm4mIHAsIGNvbnN0IHJlc2l6ZV9wb2xpY3kmIHJwKQorICAgIDogYmFzZV90eXBlKGgsIGUsIGNwLCBwLCBycCkgeyB9CisKKyAgICAvLyBDb25zdHJ1Y3RvciB0YWtpbmcgX19pdGVyYXRvcnMgdG8gYSByYW5nZSBvZiB2YWx1ZV90eXBlcy4gVGhlCisgICAgLy8gdmFsdWVfdHlwZXMgYmV0d2VlbiBmaXJzdF9pdCBhbmQgbGFzdF9pdCB3aWxsIGJlIGluc2VydGVkIGludG8KKyAgICAvLyB0aGUgY29udGFpbmVyIG9iamVjdC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KKyAgICBncF9oYXNoX3RhYmxlKEl0IGZpcnN0LCBJdCBsYXN0KQorICAgIHsgYmFzZV90eXBlOjpjb3B5X2Zyb21fcmFuZ2UoZmlyc3QsIGxhc3QpOyB9CisKKyAgICAvLyBDb25zdHJ1Y3RvciB0YWtpbmcgX19pdGVyYXRvcnMgdG8gYSByYW5nZSBvZiB2YWx1ZV90eXBlcyBhbmQKKyAgICAvLyBzb21lIHBvbGljeSBvYmplY3RzLiBUaGUgdmFsdWVfdHlwZXMgYmV0d2VlbiBmaXJzdF9pdCBhbmQKKyAgICAvLyBsYXN0X2l0IHdpbGwgYmUgaW5zZXJ0ZWQgaW50byB0aGUgY29udGFpbmVyIG9iamVjdC4gcl9oYXNoX2ZuCisgICAgLy8gd2lsbCBiZSBjb3BpZWQgYnkgdGhlIGhhc2hfZm4gb2JqZWN0IG9mIHRoZSBjb250YWluZXIgb2JqZWN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0PgorICAgIGdwX2hhc2hfdGFibGUoSXQgZmlyc3QsIEl0IGxhc3QsIGNvbnN0IGhhc2hfZm4mIGgpCisgICAgOiBiYXNlX3R5cGUoaCkKKyAgICB7IGJhc2VfdHlwZTo6Y29weV9mcm9tX3JhbmdlKGZpcnN0LCBsYXN0KTsgfQorCisgICAgLy8gQ29uc3RydWN0b3IgdGFraW5nIF9faXRlcmF0b3JzIHRvIGEgcmFuZ2Ugb2YgdmFsdWVfdHlwZXMgYW5kCisgICAgLy8gc29tZSBwb2xpY3kgb2JqZWN0cy4gVGhlIHZhbHVlX3R5cGVzIGJldHdlZW4gZmlyc3RfaXQgYW5kCisgICAgLy8gbGFzdF9pdCB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlIGNvbnRhaW5lciBvYmplY3QuIHJfaGFzaF9mbgorICAgIC8vIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBoYXNoX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdCwKKyAgICAvLyBhbmQgcl9lcV9mbiB3aWxsIGJlIGNvcGllZCBieSB0aGUgZXFfZm4gb2JqZWN0IG9mIHRoZSBjb250YWluZXIKKyAgICAvLyBvYmplY3QuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXQ+CisgICAgZ3BfaGFzaF90YWJsZShJdCBmaXJzdCwgSXQgbGFzdCwgY29uc3QgaGFzaF9mbiYgaCwgY29uc3QgZXFfZm4mIGUpCisgICAgOiBiYXNlX3R5cGUoaCwgZSkKKyAgICB7IGJhc2VfdHlwZTo6Y29weV9mcm9tX3JhbmdlKGZpcnN0LCBsYXN0KTsgfQorCisgICAgLy8gQ29uc3RydWN0b3IgdGFraW5nIF9faXRlcmF0b3JzIHRvIGEgcmFuZ2Ugb2YgdmFsdWVfdHlwZXMgYW5kCisgICAgLy8gc29tZSBwb2xpY3kgb2JqZWN0cy4gVGhlIHZhbHVlX3R5cGVzIGJldHdlZW4gZmlyc3RfaXQgYW5kCisgICAgLy8gbGFzdF9pdCB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlIGNvbnRhaW5lciBvYmplY3QuIHJfaGFzaF9mbgorICAgIC8vIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBoYXNoX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdCwKKyAgICAvLyByX2VxX2ZuIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBlcV9mbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lcgorICAgIC8vIG9iamVjdCwgYW5kIHJfY29tYl9wcm9iZV9mbiB3aWxsIGJlIGNvcGllZCBieSB0aGUgY29tYl9wcm9iZV9mbgorICAgIC8vIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KKyAgICBncF9oYXNoX3RhYmxlKEl0IGZpcnN0LCBJdCBsYXN0LCBjb25zdCBoYXNoX2ZuJiBoLCBjb25zdCBlcV9mbiYgZSwgCisJCSAgY29uc3QgY29tYl9wcm9iZV9mbiYgY3ApCisgICAgOiBiYXNlX3R5cGUoaCwgZSwgY3ApCisgICAgeyBiYXNlX3R5cGU6OmNvcHlfZnJvbV9yYW5nZShmaXJzdCwgbGFzdCk7IH0KKworICAgIC8vIENvbnN0cnVjdG9yIHRha2luZyBfX2l0ZXJhdG9ycyB0byBhIHJhbmdlIG9mIHZhbHVlX3R5cGVzIGFuZAorICAgIC8vIHNvbWUgcG9saWN5IG9iamVjdHMuIFRoZSB2YWx1ZV90eXBlcyBiZXR3ZWVuIGZpcnN0X2l0IGFuZAorICAgIC8vIGxhc3RfaXQgd2lsbCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBjb250YWluZXIgb2JqZWN0LiByX2hhc2hfZm4KKyAgICAvLyB3aWxsIGJlIGNvcGllZCBieSB0aGUgaGFzaF9mbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lciBvYmplY3QsCisgICAgLy8gcl9lcV9mbiB3aWxsIGJlIGNvcGllZCBieSB0aGUgZXFfZm4gb2JqZWN0IG9mIHRoZSBjb250YWluZXIKKyAgICAvLyBvYmplY3QsIHJfY29tYl9wcm9iZV9mbiB3aWxsIGJlIGNvcGllZCBieSB0aGUgY29tYl9wcm9iZV9mbgorICAgIC8vIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdCwgYW5kIHJfcHJvYmVfZm4gd2lsbCBiZSBjb3BpZWQKKyAgICAvLyBieSB0aGUgcHJvYmVfZm4gb2JqZWN0IG9mIHRoZSBjb250YWluZXIgb2JqZWN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0PgorICAgIGdwX2hhc2hfdGFibGUoSXQgZmlyc3QsIEl0IGxhc3QsIGNvbnN0IGhhc2hfZm4mIGgsIGNvbnN0IGVxX2ZuJiBlLCAKKwkJICBjb25zdCBjb21iX3Byb2JlX2ZuJiBjcCwgY29uc3QgcHJvYmVfZm4mIHApCisgICAgOiBiYXNlX3R5cGUoaCwgZSwgY3AsIHApCisgICAgeyBiYXNlX3R5cGU6OmNvcHlfZnJvbV9yYW5nZShmaXJzdCwgbGFzdCk7IH0KKworICAgIC8vIENvbnN0cnVjdG9yIHRha2luZyBfX2l0ZXJhdG9ycyB0byBhIHJhbmdlIG9mIHZhbHVlX3R5cGVzIGFuZAorICAgIC8vIHNvbWUgcG9saWN5IG9iamVjdHMuIFRoZSB2YWx1ZV90eXBlcyBiZXR3ZWVuIGZpcnN0X2l0IGFuZAorICAgIC8vIGxhc3RfaXQgd2lsbCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBjb250YWluZXIgb2JqZWN0LiByX2hhc2hfZm4KKyAgICAvLyB3aWxsIGJlIGNvcGllZCBieSB0aGUgaGFzaF9mbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lciBvYmplY3QsCisgICAgLy8gcl9lcV9mbiB3aWxsIGJlIGNvcGllZCBieSB0aGUgZXFfZm4gb2JqZWN0IG9mIHRoZSBjb250YWluZXIKKyAgICAvLyBvYmplY3QsIHJfY29tYl9wcm9iZV9mbiB3aWxsIGJlIGNvcGllZCBieSB0aGUgY29tYl9wcm9iZV9mbgorICAgIC8vIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdCwgcl9wcm9iZV9mbiB3aWxsIGJlIGNvcGllZCBieQorICAgIC8vIHRoZSBwcm9iZV9mbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lciBvYmplY3QsIGFuZAorICAgIC8vIHJfcmVzaXplX3BvbGljeSB3aWxsIGJlIGNvcGllZCBieSB0aGUgcmVzaXplX3BvbGljeSBvYmplY3Qgb2YKKyAgICAvLyB0aGUgY29udGFpbmVyIG9iamVjdC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KKyAgICBncF9oYXNoX3RhYmxlKEl0IGZpcnN0LCBJdCBsYXN0LCBjb25zdCBoYXNoX2ZuJiBoLCBjb25zdCBlcV9mbiYgZSwgCisJCSAgY29uc3QgY29tYl9wcm9iZV9mbiYgY3AsIGNvbnN0IHByb2JlX2ZuJiBwLCAKKwkJICBjb25zdCByZXNpemVfcG9saWN5JiBycCkKKyAgICA6IGJhc2VfdHlwZShoLCBlLCBjcCwgcCwgcnApCisgICAgeyBiYXNlX3R5cGU6OmNvcHlfZnJvbV9yYW5nZShmaXJzdCwgbGFzdCk7IH0KKworICAgIGdwX2hhc2hfdGFibGUoY29uc3QgZ3BfaGFzaF90YWJsZSYgb3RoZXIpCisgICAgOiBiYXNlX3R5cGUoKGNvbnN0IGJhc2VfdHlwZSYpb3RoZXIpCisgICAgeyB9CisKKyAgICB2aXJ0dWFsCisgICAgfmdwX2hhc2hfdGFibGUoKSB7IH0KKworICAgIGdwX2hhc2hfdGFibGUmIAorICAgIG9wZXJhdG9yPShjb25zdCBncF9oYXNoX3RhYmxlJiBvdGhlcikKKyAgICB7CisgICAgICBpZiAodGhpcyAhPSAmb3RoZXIpCisJeworCSAgZ3BfaGFzaF90YWJsZSB0bXAob3RoZXIpOworCSAgc3dhcCh0bXApOworCX0KKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICB2b2lkCisgICAgc3dhcChncF9oYXNoX3RhYmxlJiBvdGhlcikKKyAgICB7IGJhc2VfdHlwZTo6c3dhcChvdGhlcik7IH0KKyAgfTsKKworI3VuZGVmIFBCX0RTX0JBU0VfQ19ERUMKKworCisjZGVmaW5lIFBCX0RTX0JBU0VfQ19ERUMgXAorICBjb250YWluZXJfYmFzZTxLZXksIE1hcHBlZCwgVGFnLCBQb2xpY3lfVGwsIEFsbG9jYXRvcj4KKworICAvLy8gQW4gYWJzdHJhY3QgYmFzaWMgdHJlZS1saWtlICh0cmVlLCB0cmllKSBhc3NvY2lhdGl2ZSBjb250YWluZXIuCisgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0eXBlbmFtZSBUYWcsIAorCSAgIHR5cGVuYW1lIE5vZGVfVXBkYXRlLCB0eXBlbmFtZSBQb2xpY3lfVGwsIHR5cGVuYW1lIEFsbG9jYXRvcj4KKyAgY2xhc3MgYmFzaWNfdHJlZSA6IHB1YmxpYyBQQl9EU19CQVNFX0NfREVDCisgIHsKKyAgcHJpdmF0ZToKKyAgICB0eXBlZGVmIFBCX0RTX0JBU0VfQ19ERUMgCWJhc2VfdHlwZTsKKworICBwdWJsaWM6CisgICAgdHlwZWRlZiBOb2RlX1VwZGF0ZSAJbm9kZV91cGRhdGU7CisKKyAgICB2aXJ0dWFsCisgICAgfmJhc2ljX3RyZWUoKSB7IH0KKworICBwcm90ZWN0ZWQ6CisjZGVmaW5lIFBCX0RTX0NMQVNTX05BTUUgCQliYXNpY190cmVlCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcD4KKyN1bmRlZiBQQl9EU19DTEFTU19OQU1FCisgIH07CisKKyN1bmRlZiBQQl9EU19CQVNFX0NfREVDCisKKworI2RlZmluZSBQQl9EU19UUkVFX05PREVfQU5EX0lUX1RSQUlUU19DX0RFQyBcCisgIGRldGFpbDo6dHJlZV90cmFpdHM8S2V5LCBNYXBwZWQsQ21wX0ZuLE5vZGVfVXBkYXRlLFRhZywgQWxsb2NhdG9yPgorCisjZGVmaW5lIFBCX0RTX0JBU0VfQ19ERUMgXAorICBiYXNpY190cmVlPEtleSxNYXBwZWQsVGFnLHR5cGVuYW1lIFBCX0RTX1RSRUVfTk9ERV9BTkRfSVRfVFJBSVRTX0NfREVDOjpub2RlX3VwZGF0ZSwgXAorCSAgICAgdHlwZW5hbWUgX19nbnVfY3h4Ojp0eXBlbGlzdDo6Y3JlYXRlMjxDbXBfRm4sIFBCX0RTX1RSRUVfTk9ERV9BTkRfSVRfVFJBSVRTX0NfREVDID46OnR5cGUsIEFsbG9jYXRvcj4KKworICAvLy8gQSBjb25jcmV0ZSBiYXNpYyB0cmVlLWJhc2VkIGFzc29jaWF0aXZlIGNvbnRhaW5lci4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBNYXBwZWQsIHR5cGVuYW1lIENtcF9GbiA9IHN0ZDo6bGVzczxLZXk+LAorCSAgIHR5cGVuYW1lIFRhZyA9IHJiX3RyZWVfdGFnLAorCSAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnN0X05vZGVfSXRlcmF0b3IsIHR5cGVuYW1lIE5vZGVfSXRlcmF0b3IsIHR5cGVuYW1lIENtcF9Gbl8sIHR5cGVuYW1lIEFsbG9jYXRvcl8+CisgIGNsYXNzIE5vZGVfVXBkYXRlID0gX19nbnVfcGJkczo6bnVsbF90cmVlX25vZGVfdXBkYXRlLAorCSAgIHR5cGVuYW1lIEFsbG9jYXRvciA9IHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4KKyAgY2xhc3MgdHJlZSA6IHB1YmxpYyBQQl9EU19CQVNFX0NfREVDCisgIHsKKyAgcHJpdmF0ZToKKyAgICB0eXBlZGVmIFBCX0RTX0JBU0VfQ19ERUMgCWJhc2VfdHlwZTsKKworICBwdWJsaWM6CisgICAgLy8gQ29tcGFyaXNvbiBmdW5jdG9yIHR5cGUuCisgICAgdHlwZWRlZiBDbXBfRm4gCQljbXBfZm47CisKKyAgICB0cmVlKCkgeyB9CisKKyAgICAvLyBDb25zdHJ1Y3RvciB0YWtpbmcgc29tZSBwb2xpY3kgb2JqZWN0cy4gcl9jbXBfZm4gd2lsbCBiZSBjb3BpZWQKKyAgICAvLyBieSB0aGUgQ21wX0ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdC4KKyAgICB0cmVlKGNvbnN0IGNtcF9mbiYgYykKKyAgICA6IGJhc2VfdHlwZShjKSB7IH0KKworICAgIC8vIENvbnN0cnVjdG9yIHRha2luZyBfX2l0ZXJhdG9ycyB0byBhIHJhbmdlIG9mIHZhbHVlX3R5cGVzLiBUaGUKKyAgICAvLyB2YWx1ZV90eXBlcyBiZXR3ZWVuIGZpcnN0X2l0IGFuZCBsYXN0X2l0IHdpbGwgYmUgaW5zZXJ0ZWQgaW50bworICAgIC8vIHRoZSBjb250YWluZXIgb2JqZWN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0PgorICAgIHRyZWUoSXQgZmlyc3QsIEl0IGxhc3QpCisgICAgeyBiYXNlX3R5cGU6OmNvcHlfZnJvbV9yYW5nZShmaXJzdCwgbGFzdCk7IH0KKworICAgIC8vIENvbnN0cnVjdG9yIHRha2luZyBfX2l0ZXJhdG9ycyB0byBhIHJhbmdlIG9mIHZhbHVlX3R5cGVzIGFuZAorICAgIC8vIHNvbWUgcG9saWN5IG9iamVjdHMgVGhlIHZhbHVlX3R5cGVzIGJldHdlZW4gZmlyc3RfaXQgYW5kCisgICAgLy8gbGFzdF9pdCB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlIGNvbnRhaW5lciBvYmplY3QuIHJfY21wX2ZuCisgICAgLy8gd2lsbCBiZSBjb3BpZWQgYnkgdGhlIGNtcF9mbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lciBvYmplY3QuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXQ+CisgICAgdHJlZShJdCBmaXJzdCwgSXQgbGFzdCwgY29uc3QgY21wX2ZuJiBjKQorICAgICAgOiBiYXNlX3R5cGUoYykKKyAgICB7IGJhc2VfdHlwZTo6Y29weV9mcm9tX3JhbmdlKGZpcnN0LCBsYXN0KTsgfQorCisgICAgdHJlZShjb25zdCB0cmVlJiBvdGhlcikKKyAgICA6IGJhc2VfdHlwZSgoY29uc3QgYmFzZV90eXBlJilvdGhlcikgeyB9CisKKyAgICB2aXJ0dWFsCisgICAgfnRyZWUoKSB7IH0KKworICAgIHRyZWUmIAorICAgIG9wZXJhdG9yPShjb25zdCB0cmVlJiBvdGhlcikKKyAgICB7CisgICAgICBpZiAodGhpcyAhPSAmb3RoZXIpCisJeworCSAgdHJlZSB0bXAob3RoZXIpOworCSAgc3dhcCh0bXApOworCX0KKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICB2b2lkCisgICAgc3dhcCh0cmVlJiBvdGhlcikKKyAgICB7IGJhc2VfdHlwZTo6c3dhcChvdGhlcik7IH0KKyAgfTsKKworI3VuZGVmIFBCX0RTX0JBU0VfQ19ERUMKKyN1bmRlZiBQQl9EU19UUkVFX05PREVfQU5EX0lUX1RSQUlUU19DX0RFQworCisKKyNkZWZpbmUgUEJfRFNfVFJJRV9OT0RFX0FORF9JVFNfVFJBSVRTIFwKKyAgZGV0YWlsOjp0cmllX3RyYWl0czxLZXksTWFwcGVkLEVfQWNjZXNzX1RyYWl0cyxOb2RlX1VwZGF0ZSxUYWcsQWxsb2NhdG9yPgorCisjZGVmaW5lIFBCX0RTX0JBU0VfQ19ERUMgXAorICBiYXNpY190cmVlPEtleSxNYXBwZWQsVGFnLCB0eXBlbmFtZSBQQl9EU19UUklFX05PREVfQU5EX0lUU19UUkFJVFM6Om5vZGVfdXBkYXRlLCBcCisJICAgICB0eXBlbmFtZSBfX2dudV9jeHg6OnR5cGVsaXN0OjpjcmVhdGUyPEVfQWNjZXNzX1RyYWl0cywgUEJfRFNfVFJJRV9OT0RFX0FORF9JVFNfVFJBSVRTID46OnR5cGUsIEFsbG9jYXRvcj4KKworICAvLy8gQSBjb25jcmV0ZSBiYXNpYyB0cmllLWJhc2VkIGFzc29jaWF0aXZlIGNvbnRhaW5lci4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LAorCSAgIHR5cGVuYW1lIE1hcHBlZCwKKwkgICB0eXBlbmFtZSBFX0FjY2Vzc19UcmFpdHMgPSB0eXBlbmFtZSBkZXRhaWw6OmRlZmF1bHRfdHJpZV9lX2FjY2Vzc190cmFpdHM8S2V5Pjo6dHlwZSwKKwkgICB0eXBlbmFtZSBUYWcgPSBwYXRfdHJpZV90YWcsCisJICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29uc3RfTm9kZV9JdGVyYXRvciwKKwkJICAgIHR5cGVuYW1lIE5vZGVfSXRlcmF0b3IsCisJCSAgICB0eXBlbmFtZSBFX0FjY2Vzc19UcmFpdHNfLAorCQkgICAgdHlwZW5hbWUgQWxsb2NhdG9yXz4KKyAgY2xhc3MgTm9kZV9VcGRhdGUgPSBudWxsX3RyaWVfbm9kZV91cGRhdGUsCisJICAgdHlwZW5hbWUgQWxsb2NhdG9yID0gc3RkOjphbGxvY2F0b3I8Y2hhcj4gPgorICBjbGFzcyB0cmllIDogcHVibGljIFBCX0RTX0JBU0VfQ19ERUMKKyAgeworICBwcml2YXRlOgorICAgIHR5cGVkZWYgUEJfRFNfQkFTRV9DX0RFQyBiYXNlX3R5cGU7CisKKyAgcHVibGljOgorICAgIC8vIEVsZW1lbnQgYWNjZXNzIHRyYWl0cyB0eXBlLgorICAgIHR5cGVkZWYgRV9BY2Nlc3NfVHJhaXRzIGVfYWNjZXNzX3RyYWl0czsKKworICAgIHRyaWUoKSB7IH0KKworICAgIC8vIENvbnN0cnVjdG9yIHRha2luZyBzb21lIHBvbGljeSBvYmplY3RzLiByX2VfYWNjZXNzX3RyYWl0cyB3aWxsCisgICAgLy8gYmUgY29waWVkIGJ5IHRoZSBFX0FjY2Vzc19UcmFpdHMgb2JqZWN0IG9mIHRoZSBjb250YWluZXIKKyAgICAvLyBvYmplY3QuCisgICAgdHJpZShjb25zdCBlX2FjY2Vzc190cmFpdHMmIHQpCisgICAgOiBiYXNlX3R5cGUodCkgeyB9CisKKyAgICAvLyBDb25zdHJ1Y3RvciB0YWtpbmcgX19pdGVyYXRvcnMgdG8gYSByYW5nZSBvZiB2YWx1ZV90eXBlcy4gVGhlCisgICAgLy8gdmFsdWVfdHlwZXMgYmV0d2VlbiBmaXJzdF9pdCBhbmQgbGFzdF9pdCB3aWxsIGJlIGluc2VydGVkIGludG8KKyAgICAvLyB0aGUgY29udGFpbmVyIG9iamVjdC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KKyAgICB0cmllKEl0IGZpcnN0LCBJdCBsYXN0KQorICAgIHsgYmFzZV90eXBlOjpjb3B5X2Zyb21fcmFuZ2UoZmlyc3QsIGxhc3QpOyB9CisKKyAgICAvLyBDb25zdHJ1Y3RvciB0YWtpbmcgX19pdGVyYXRvcnMgdG8gYSByYW5nZSBvZiB2YWx1ZV90eXBlcyBhbmQKKyAgICAvLyBzb21lIHBvbGljeSBvYmplY3RzLiBUaGUgdmFsdWVfdHlwZXMgYmV0d2VlbiBmaXJzdF9pdCBhbmQKKyAgICAvLyBsYXN0X2l0IHdpbGwgYmUgaW5zZXJ0ZWQgaW50byB0aGUgY29udGFpbmVyIG9iamVjdC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KKyAgICB0cmllKEl0IGZpcnN0LCBJdCBsYXN0LCBjb25zdCBlX2FjY2Vzc190cmFpdHMmIHQpCisgICAgOiBiYXNlX3R5cGUodCkKKyAgICB7IGJhc2VfdHlwZTo6Y29weV9mcm9tX3JhbmdlKGZpcnN0LCBsYXN0KTsgfQorCisgICAgdHJpZShjb25zdCB0cmllJiBvdGhlcikKKyAgICA6IGJhc2VfdHlwZSgoY29uc3QgYmFzZV90eXBlJilvdGhlcikgeyB9CisKKyAgICB2aXJ0dWFsCisgICAgfnRyaWUoKSB7IH0KKworICAgIHRyaWUmIAorICAgIG9wZXJhdG9yPShjb25zdCB0cmllJiBvdGhlcikKKyAgICB7CisgICAgICBpZiAodGhpcyAhPSAmb3RoZXIpCisJeworCSAgdHJpZSB0bXAob3RoZXIpOworCSAgc3dhcCh0bXApOworCX0KKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICB2b2lkCisgICAgc3dhcCh0cmllJiBvdGhlcikKKyAgICB7IGJhc2VfdHlwZTo6c3dhcChvdGhlcik7IH0KKyAgfTsKKworI3VuZGVmIFBCX0RTX0JBU0VfQ19ERUMKKyN1bmRlZiBQQl9EU19UUklFX05PREVfQU5EX0lUU19UUkFJVFMKKworCisjZGVmaW5lIFBCX0RTX0JBU0VfQ19ERUMgXAorICBjb250YWluZXJfYmFzZTxLZXksIE1hcHBlZCwgbGlzdF91cGRhdGVfdGFnLCBcCisJCSB0eXBlbmFtZSBfX2dudV9jeHg6OnR5cGVsaXN0OjpjcmVhdGUyPEVxX0ZuLCBVcGRhdGVfUG9saWN5Pjo6dHlwZSwgQWxsb2NhdG9yPgorCisgIC8vLyBBIGxpc3QtdXBkYXRlIGJhc2VkIGFzc29jaWF0aXZlIGNvbnRhaW5lci4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LAorCSAgIHR5cGVuYW1lIE1hcHBlZCwKKwkgICBjbGFzcyBFcV9GbiA9IHR5cGVuYW1lIGRldGFpbDo6ZGVmYXVsdF9lcV9mbjxLZXk+Ojp0eXBlLAorCSAgIGNsYXNzIFVwZGF0ZV9Qb2xpY3kgPSBkZXRhaWw6OmRlZmF1bHRfdXBkYXRlX3BvbGljeTo6dHlwZSwKKwkgICBjbGFzcyBBbGxvY2F0b3IgPSBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+CisgIGNsYXNzIGxpc3RfdXBkYXRlIDogcHVibGljIFBCX0RTX0JBU0VfQ19ERUMKKyAgeworICBwcml2YXRlOgorICAgIHR5cGVkZWYgUEJfRFNfQkFTRV9DX0RFQyAJYmFzZV90eXBlOworCisgIHB1YmxpYzoKKyAgICB0eXBlZGVmIEVxX0ZuIAkJZXFfZm47CisgICAgdHlwZWRlZiBVcGRhdGVfUG9saWN5IAl1cGRhdGVfcG9saWN5OworICAgIHR5cGVkZWYgQWxsb2NhdG9yIAkJYWxsb2NhdG9yOworCisgICAgbGlzdF91cGRhdGUoKSB7IH0KKworICAgIC8vIENvbnN0cnVjdG9yIHRha2luZyBfX2l0ZXJhdG9ycyB0byBhIHJhbmdlIG9mIHZhbHVlX3R5cGVzLiBUaGUKKyAgICAvLyB2YWx1ZV90eXBlcyBiZXR3ZWVuIGZpcnN0X2l0IGFuZCBsYXN0X2l0IHdpbGwgYmUgaW5zZXJ0ZWQgaW50bworICAgIC8vIHRoZSBjb250YWluZXIgb2JqZWN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0PgorICAgIGxpc3RfdXBkYXRlKEl0IGZpcnN0LCBJdCBsYXN0KQorICAgIHsgYmFzZV90eXBlOjpjb3B5X2Zyb21fcmFuZ2UoZmlyc3QsIGxhc3QpOyB9CisKKyAgICBsaXN0X3VwZGF0ZShjb25zdCBsaXN0X3VwZGF0ZSYgb3RoZXIpCisgICAgOiBiYXNlX3R5cGUoKGNvbnN0IGJhc2VfdHlwZSYpb3RoZXIpIHsgfQorCisgICAgdmlydHVhbAorICAgIH5saXN0X3VwZGF0ZSgpIHsgfQorCisgICAgbGlzdF91cGRhdGUmIAorICAgIG9wZXJhdG9yPShjb25zdCBsaXN0X3VwZGF0ZSYgb3RoZXIpCisgICAgeworICAgICAgaWYgKHRoaXMgIT0mIG90aGVyKQorCXsKKwkgIGxpc3RfdXBkYXRlIHRtcChvdGhlcik7CisJICBzd2FwKHRtcCk7CisJfQorICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIHZvaWQKKyAgICBzd2FwKGxpc3RfdXBkYXRlJiBvdGhlcikKKyAgICB7IGJhc2VfdHlwZTo6c3dhcChvdGhlcik7IH0KKyAgfTsKKworI3VuZGVmIFBCX0RTX0JBU0VfQ19ERUMKKworICAvLyBAfSBncm91cCBwYmRzCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iYXNpY190cmVlX3BvbGljeS9iYXNpY190cmVlX3BvbGljeV9iYXNlLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iYXNpY190cmVlX3BvbGljeS9iYXNpY190cmVlX3BvbGljeV9iYXNlLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2E5MGRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jhc2ljX3RyZWVfcG9saWN5L2Jhc2ljX3RyZWVfcG9saWN5X2Jhc2UuaHBwCkBAIC0wLDAgKzEsMTczIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBiYXNpY190cmVlX3BvbGljeV9iYXNlLmhwcAorICogQ29udGFpbnMgYSBiYXNlIGNsYXNzIGZvciB0cmVlX2xpa2UgcG9saWNpZXMuCisgKi8KKworI2lmbmRlZiBQQl9EU19UUkVFX0xJS0VfUE9MSUNZX0JBU0VfSFBQCisjZGVmaW5lIFBCX0RTX1RSRUVfTElLRV9QT0xJQ1lfQkFTRV9IUFAKKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfQ19ERUMJCQkJCQlcCisgICAgYmFzaWNfdHJlZV9wb2xpY3lfYmFzZTwJCQkJCQlcCisJCQkJCQkJQ29uc3RfTm9kZV9JdGVyYXRvciwgXAorCQkJCQkJCU5vZGVfSXRlcmF0b3IsCVwKKwkJCQkJCQlBbGxvY2F0b3I+CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25zdF9Ob2RlX0l0ZXJhdG9yLAorCSAgICAgdHlwZW5hbWUgTm9kZV9JdGVyYXRvciwKKwkgICAgIHR5cGVuYW1lIEFsbG9jYXRvcj4KKyAgICBzdHJ1Y3QgYmFzaWNfdHJlZV9wb2xpY3lfYmFzZQorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIE5vZGVfSXRlcmF0b3I6OnZhbHVlX3R5cGUgaXRfdHlwZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czwgaXRfdHlwZT46OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB2YWx1ZV90eXBlOjpmaXJzdF90eXBlIGtleV90eXBlOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKwl0eXBlbmFtZSByZW1vdmVfY29uc3Q8CisJa2V5X3R5cGU+Ojp0eXBlPjo6b3RoZXI6OmNvbnN0X3JlZmVyZW5jZQorICAgICAgY29uc3Rfa2V5X3JlZmVyZW5jZTsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8CisJdHlwZW5hbWUgcmVtb3ZlX2NvbnN0PAorCXZhbHVlX3R5cGU+Ojp0eXBlPjo6b3RoZXI6OmNvbnN0X3JlZmVyZW5jZQorICAgICAgY29uc3RfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKwl0eXBlbmFtZSByZW1vdmVfY29uc3Q8CisJdmFsdWVfdHlwZT46OnR5cGU+OjpvdGhlcjo6cmVmZXJlbmNlCisgICAgICByZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCXR5cGVuYW1lIHJlbW92ZV9jb25zdDwKKwl2YWx1ZV90eXBlPjo6dHlwZT46Om90aGVyOjpjb25zdF9wb2ludGVyCisgICAgICBjb25zdF9wb2ludGVyOworCisgICAgICBzdGF0aWMgaW5saW5lIGNvbnN0X2tleV9yZWZlcmVuY2UKKyAgICAgIGV4dHJhY3Rfa2V5KGNvbnN0X3JlZmVyZW5jZSByX3ZhbCkKKyAgICAgIHsKKwlyZXR1cm4gKHJfdmFsLmZpcnN0KTsKKyAgICAgIH0KKworICAgICAgdmlydHVhbCBpdF90eXBlCisgICAgICBlbmQoKSA9IDA7CisKKyAgICAgIGl0X3R5cGUKKyAgICAgIGVuZF9pdGVyYXRvcigpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIChjb25zdF9jYXN0PFBCX0RTX0NMQVNTX0NfREVDKiA+KHRoaXMpLT5lbmQoKSk7CisgICAgICB9CisKKyAgICAgIHZpcnR1YWwKKyAgICAgIH5iYXNpY190cmVlX3BvbGljeV9iYXNlKCkKKyAgICAgIHsgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25zdF9Ob2RlX0l0ZXJhdG9yLCB0eXBlbmFtZSBBbGxvY2F0b3I+CisgICAgc3RydWN0IGJhc2ljX3RyZWVfcG9saWN5X2Jhc2U8CisgICAgICBDb25zdF9Ob2RlX0l0ZXJhdG9yLAorICAgICAgQ29uc3RfTm9kZV9JdGVyYXRvciwKKyAgICAgIEFsbG9jYXRvcj4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb25zdF9Ob2RlX0l0ZXJhdG9yOjp2YWx1ZV90eXBlIGl0X3R5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8IGl0X3R5cGU+Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSBrZXlfdHlwZTsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8CisJdHlwZW5hbWUgcmVtb3ZlX2NvbnN0PAorCWtleV90eXBlPjo6dHlwZT46Om90aGVyOjpjb25zdF9yZWZlcmVuY2UKKyAgICAgIGNvbnN0X2tleV9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCXR5cGVuYW1lIHJlbW92ZV9jb25zdDwKKwl2YWx1ZV90eXBlPjo6dHlwZT46Om90aGVyOjpjb25zdF9yZWZlcmVuY2UKKyAgICAgIGNvbnN0X3JlZmVyZW5jZTsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8CisJdHlwZW5hbWUgcmVtb3ZlX2NvbnN0PAorCXZhbHVlX3R5cGU+Ojp0eXBlPjo6b3RoZXI6OnJlZmVyZW5jZQorICAgICAgcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKwl0eXBlbmFtZSByZW1vdmVfY29uc3Q8CisJdmFsdWVfdHlwZT46OnR5cGU+OjpvdGhlcjo6Y29uc3RfcG9pbnRlcgorICAgICAgY29uc3RfcG9pbnRlcjsKKworICAgICAgc3RhdGljIGlubGluZSBjb25zdF9rZXlfcmVmZXJlbmNlCisgICAgICBleHRyYWN0X2tleShjb25zdF9yZWZlcmVuY2Ugcl92YWwpCisgICAgICB7CisJcmV0dXJuIChyX3ZhbCk7CisgICAgICB9CisKKyAgICAgIHZpcnR1YWwgaXRfdHlwZQorICAgICAgZW5kKCkgY29uc3QgPSAwOworCisgICAgICBpdF90eXBlCisgICAgICBlbmRfaXRlcmF0b3IoKSBjb25zdAorICAgICAgeworCXJldHVybiAoZW5kKCkpOworICAgICAgfQorCisgICAgICB2aXJ0dWFsCisgICAgICB+YmFzaWNfdHJlZV9wb2xpY3lfYmFzZSgpCisgICAgICB7IH0KKyAgICB9OworCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmIC8vICNpZm5kZWYgUEJfRFNfVFJFRV9MSUtFX1BPTElDWV9CQVNFX0hQUApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jhc2ljX3RyZWVfcG9saWN5L251bGxfbm9kZV9tZXRhZGF0YS5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmFzaWNfdHJlZV9wb2xpY3kvbnVsbF9ub2RlX21ldGFkYXRhLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTdiOTA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jhc2ljX3RyZWVfcG9saWN5L251bGxfbm9kZV9tZXRhZGF0YS5ocHAKQEAgLTAsMCArMSw2NyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgbnVsbF9ub2RlX21ldGFkYXRhLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIHRyZWUtbGlrZSBjbGFzc2VzLgorICovCisKKyNpZm5kZWYgUEJfRFNfTlVMTF9OT0RFX01FVEFEQVRBX0hQUAorI2RlZmluZSBQQl9EU19OVUxMX05PREVfTUVUQURBVEFfSFBQCisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3R5cGVzX3RyYWl0cy5ocHA+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgY2xhc3MgRGF0YSwgY2xhc3MgQWxsb2NhdG9yPgorICAgIHN0cnVjdCBkdW1jb25zdF9ub2RlX2l0ZXJhdG9yCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHR5cGVzX3RyYWl0czxLZXksIERhdGEsIEFsbG9jYXRvciwgZmFsc2U+Ojpwb2ludGVyIGNvbnN0X2l0ZXJhdG9yOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBjb25zdF9pdGVyYXRvciB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBjb25zdF9pdGVyYXRvciBjb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIGNvbnN0X3JlZmVyZW5jZSByZWZlcmVuY2U7CisgICAgfTsKKworICAgIHN0cnVjdCBudWxsX25vZGVfbWV0YWRhdGEKKyAgICB7IH07CisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmFzaWNfdHJlZV9wb2xpY3kvdHJhaXRzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iYXNpY190cmVlX3BvbGljeS90cmFpdHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMDgyOWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmFzaWNfdHJlZV9wb2xpY3kvdHJhaXRzLmhwcApAQCAtMCwwICsxLDg1IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSB0cmFpdHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgdHJlZS1saWtlIGNsYXNzZXMuCisgKi8KKworI2lmbmRlZiBQQl9EU19OT0RFX0FORF9JVF9UUkFJVFNfSFBQCisjZGVmaW5lIFBCX0RTX05PREVfQU5EX0lUX1RSQUlUU19IUFAKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHlwZXNfdHJhaXRzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vdHJhaXRzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3RyZWVfcG9saWN5L25vZGVfbWV0YWRhdGFfc2VsZWN0b3IuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHJpZV9wb2xpY3kvbm9kZV9tZXRhZGF0YV9zZWxlY3Rvci5ocHA+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksCisJICAgICB0eXBlbmFtZSBEYXRhLAorCSAgICAgY2xhc3MgQ21wX0ZuLAorCSAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29uc3RfTm9kZV9JdGVyYXRvciwKKwkJICAgICAgY2xhc3MgTm9kZV9JdGVyYXRvciwKKwkJICAgICAgY2xhc3MgQ21wX0ZuXywKKwkJICAgICAgY2xhc3MgQWxsb2NhdG9yPgorICAgIGNsYXNzIE5vZGVfVXBkYXRlLAorCSAgICAgY2xhc3MgVGFnLAorCSAgICAgY2xhc3MgQWxsb2NhdG9yPgorICAgIHN0cnVjdCB0cmVlX3RyYWl0czsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwKKwkgICAgIHR5cGVuYW1lIERhdGEsCisJICAgICBjbGFzcyBFX0FjY2Vzc19UcmFpdHMsCisJICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25zdF9Ob2RlX0l0ZXJhdG9yLAorCQkgICAgICBjbGFzcyBOb2RlX0l0ZXJhdG9yLAorCQkgICAgICBjbGFzcyBFX0FjY2Vzc19UcmFpdHNfLAorCQkgICAgICBjbGFzcyBBbGxvY2F0b3I+CisgICAgY2xhc3MgTm9kZV9VcGRhdGUsCisJICAgICBjbGFzcyBUYWcsCisJICAgICBjbGFzcyBBbGxvY2F0b3I+CisgICAgc3RydWN0IHRyaWVfdHJhaXRzOworCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vdHJhaXRzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL3RyYWl0cy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vdHJhaXRzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy90cmFpdHMuaHBwPgorCisjZW5kaWYgLy8gI2lmbmRlZiBQQl9EU19OT0RFX0FORF9JVF9UUkFJVFNfSFBQCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmFzaWNfdHlwZXMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jhc2ljX3R5cGVzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWMxMzk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jhc2ljX3R5cGVzLmhwcApAQCAtMCwwICsxLDIxMSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgYmFzaWNfdHlwZXMuaHBwCisgKiBDb250YWlucyBiYXNpYyB0eXBlcyB1c2VkIGJ5IGNvbnRhaW5lcnMuCisgKi8KKworI2lmbmRlZiBQQl9EU19CQVNJQ19UWVBFU19IUFAKKyNkZWZpbmUgUEJfRFNfQkFTSUNfVFlQRVNfSFBQCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDxleHQvcGJfZHMvdGFnX2FuZF90cmFpdC5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90eXBlX3V0aWxzLmhwcD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBNYXBwZWQsIHR5cGVuYW1lIEFsbG9jYXRvciwgYm9vbCBTdG9yZV9IYXNoPgorICAgIHN0cnVjdCB2YWx1ZV90eXBlX2Jhc2U7CisKKyAgICAvKioKKyAgICAgKiBTcGVjaWFsaXphdGlvbiBvZiB2YWx1ZV90eXBlX2Jhc2UgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZSBoYXNoIHZhbHVlCisgICAgICogaXMgbm90IHN0b3JlZCBhbG9uZ3NpZGUgZWFjaCB2YWx1ZS4KKyAgICAgKiovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBNYXBwZWQsIHR5cGVuYW1lIEFsbG9jYXRvcj4KKyAgICBzdHJ1Y3QgdmFsdWVfdHlwZV9iYXNlPEtleSwgTWFwcGVkLCBBbGxvY2F0b3IsIGZhbHNlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8TWFwcGVkPjo6b3RoZXIgbWFwcGVkX3R5cGVfYWxsb2NhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBtYXBwZWRfdHlwZV9hbGxvY2F0b3I6OnZhbHVlX3R5cGUgbWFwcGVkX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIG1hcHBlZF90eXBlX2FsbG9jYXRvcjo6cG9pbnRlciBtYXBwZWRfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbWFwcGVkX3R5cGVfYWxsb2NhdG9yOjpjb25zdF9wb2ludGVyIGNvbnN0X21hcHBlZF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBtYXBwZWRfdHlwZV9hbGxvY2F0b3I6OnJlZmVyZW5jZSBtYXBwZWRfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBtYXBwZWRfdHlwZV9hbGxvY2F0b3I6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9tYXBwZWRfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPHN0ZDo6cGFpcjxjb25zdCBLZXksIE1hcHBlZD4gPjo6b3RoZXIgdmFsdWVfdHlwZV9hbGxvY2F0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHZhbHVlX3R5cGVfYWxsb2NhdG9yOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHZhbHVlX3R5cGVfYWxsb2NhdG9yOjpwb2ludGVyIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHZhbHVlX3R5cGVfYWxsb2NhdG9yOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHZhbHVlX3R5cGVfYWxsb2NhdG9yOjpyZWZlcmVuY2UgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB2YWx1ZV90eXBlX2FsbG9jYXRvcjo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKKworICAgICAgc3RydWN0IHN0b3JlZF92YWx1ZV90eXBlCisgICAgICB7CisJdmFsdWVfdHlwZSBtX3ZhbHVlOworICAgICAgfTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogU3BlY2lhbGl6YXRpb24gb2YgdmFsdWVfdHlwZV9iYXNlIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgaGFzaCB2YWx1ZQorICAgICAqIGlzIHN0b3JlZCBhbG9uZ3NpZGUgZWFjaCB2YWx1ZS4KKyAgICAgKiovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBNYXBwZWQsIHR5cGVuYW1lIEFsbG9jYXRvcj4KKyAgICBzdHJ1Y3QgdmFsdWVfdHlwZV9iYXNlPEtleSwgTWFwcGVkLCBBbGxvY2F0b3IsIHRydWU+CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxNYXBwZWQ+OjpvdGhlciBtYXBwZWRfdHlwZV9hbGxvY2F0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIG1hcHBlZF90eXBlX2FsbG9jYXRvcjo6dmFsdWVfdHlwZSBtYXBwZWRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbWFwcGVkX3R5cGVfYWxsb2NhdG9yOjpwb2ludGVyIG1hcHBlZF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBtYXBwZWRfdHlwZV9hbGxvY2F0b3I6OmNvbnN0X3BvaW50ZXIgY29uc3RfbWFwcGVkX3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIG1hcHBlZF90eXBlX2FsbG9jYXRvcjo6cmVmZXJlbmNlIG1hcHBlZF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIG1hcHBlZF90eXBlX2FsbG9jYXRvcjo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X21hcHBlZF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8c3RkOjpwYWlyPGNvbnN0IEtleSwgTWFwcGVkPiA+OjpvdGhlciB2YWx1ZV90eXBlX2FsbG9jYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdmFsdWVfdHlwZV9hbGxvY2F0b3I6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdmFsdWVfdHlwZV9hbGxvY2F0b3I6OnBvaW50ZXIgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdmFsdWVfdHlwZV9hbGxvY2F0b3I6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdmFsdWVfdHlwZV9hbGxvY2F0b3I6OnJlZmVyZW5jZSByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHZhbHVlX3R5cGVfYWxsb2NhdG9yOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOworCisgICAgICBzdHJ1Y3Qgc3RvcmVkX3ZhbHVlX3R5cGUKKyAgICAgIHsKKwl2YWx1ZV90eXBlIG1fdmFsdWU7CisJdHlwZW5hbWUgQWxsb2NhdG9yOjpzaXplX3R5cGUgbV9oYXNoOworICAgICAgfTsKKyAgICB9OworCisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIEFsbG9jYXRvcj4KKworI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBcCisgICAgdmFsdWVfdHlwZV9iYXNlPEtleSwgbnVsbF9tYXBwZWRfdHlwZSwgQWxsb2NhdG9yLCBmYWxzZT4KKworICAgIC8qKgorICAgICAqIFNwZWNpYWxpemF0aW9uIG9mIHZhbHVlX3R5cGVfYmFzZSBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIGhhc2ggdmFsdWUKKyAgICAgKiBpcyBub3Qgc3RvcmVkIGFsb25nc2lkZSBlYWNoIHZhbHVlLgorICAgICAqKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIEFsbG9jYXRvcj4KKyAgICBzdHJ1Y3QgdmFsdWVfdHlwZV9iYXNlPEtleSwgbnVsbF9tYXBwZWRfdHlwZSwgQWxsb2NhdG9yLCBmYWxzZT4KKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPG51bGxfbWFwcGVkX3R5cGU+OjpvdGhlciBtYXBwZWRfdHlwZV9hbGxvY2F0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIG1hcHBlZF90eXBlX2FsbG9jYXRvcjo6dmFsdWVfdHlwZSBtYXBwZWRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbWFwcGVkX3R5cGVfYWxsb2NhdG9yOjpwb2ludGVyIG1hcHBlZF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBtYXBwZWRfdHlwZV9hbGxvY2F0b3I6OmNvbnN0X3BvaW50ZXIgY29uc3RfbWFwcGVkX3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIG1hcHBlZF90eXBlX2FsbG9jYXRvcjo6cmVmZXJlbmNlIG1hcHBlZF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIG1hcHBlZF90eXBlX2FsbG9jYXRvcjo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X21hcHBlZF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgS2V5IHZhbHVlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8dmFsdWVfdHlwZT46Om90aGVyIHZhbHVlX3R5cGVfYWxsb2NhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB2YWx1ZV90eXBlX2FsbG9jYXRvcjo6cG9pbnRlciBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB2YWx1ZV90eXBlX2FsbG9jYXRvcjo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB2YWx1ZV90eXBlX2FsbG9jYXRvcjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdmFsdWVfdHlwZV9hbGxvY2F0b3I6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHN0cnVjdCBzdG9yZWRfdmFsdWVfdHlwZQorICAgICAgeworCXZhbHVlX3R5cGUgbV92YWx1ZTsKKyAgICAgIH07CisKKyAgICAgIHN0YXRpYyBudWxsX21hcHBlZF90eXBlIHNfbnVsbF9tYXBwZWQ7CisgICAgfTsKKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgbnVsbF9tYXBwZWRfdHlwZSBQQl9EU19DTEFTU19DX0RFQzo6c19udWxsX21hcHBlZDsKKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQyBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBBbGxvY2F0b3I+CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfQ19ERUMgXAorICAgIHZhbHVlX3R5cGVfYmFzZTxLZXksIG51bGxfbWFwcGVkX3R5cGUsIEFsbG9jYXRvciwgdHJ1ZT4KKworICAgIC8qKgorICAgICAqIFNwZWNpYWxpemF0aW9uIG9mIHZhbHVlX3R5cGVfYmFzZSBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIGhhc2ggdmFsdWUKKyAgICAgKiBpcyBzdG9yZWQgYWxvbmdzaWRlIGVhY2ggdmFsdWUuCisgICAgICoqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgQWxsb2NhdG9yPgorICAgIHN0cnVjdCB2YWx1ZV90eXBlX2Jhc2U8S2V5LCBudWxsX21hcHBlZF90eXBlLCBBbGxvY2F0b3IsIHRydWU+CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxudWxsX21hcHBlZF90eXBlPjo6b3RoZXIgbWFwcGVkX3R5cGVfYWxsb2NhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBtYXBwZWRfdHlwZV9hbGxvY2F0b3I6OnZhbHVlX3R5cGUgbWFwcGVkX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIG1hcHBlZF90eXBlX2FsbG9jYXRvcjo6cG9pbnRlciBtYXBwZWRfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbWFwcGVkX3R5cGVfYWxsb2NhdG9yOjpjb25zdF9wb2ludGVyIGNvbnN0X21hcHBlZF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBtYXBwZWRfdHlwZV9hbGxvY2F0b3I6OnJlZmVyZW5jZSBtYXBwZWRfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBtYXBwZWRfdHlwZV9hbGxvY2F0b3I6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9tYXBwZWRfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIEtleSB2YWx1ZV90eXBlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPHZhbHVlX3R5cGU+OjpvdGhlciB2YWx1ZV90eXBlX2FsbG9jYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdmFsdWVfdHlwZV9hbGxvY2F0b3I6OnBvaW50ZXIgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdmFsdWVfdHlwZV9hbGxvY2F0b3I6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdmFsdWVfdHlwZV9hbGxvY2F0b3I6OnJlZmVyZW5jZSByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHZhbHVlX3R5cGVfYWxsb2NhdG9yOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOworCisgICAgICBzdHJ1Y3Qgc3RvcmVkX3ZhbHVlX3R5cGUKKyAgICAgIHsKKwl2YWx1ZV90eXBlIG1fdmFsdWU7CisJdHlwZW5hbWUgQWxsb2NhdG9yOjpzaXplX3R5cGUgbV9oYXNoOworICAgICAgfTsKKworICAgICAgc3RhdGljIG51bGxfbWFwcGVkX3R5cGUgc19udWxsX21hcHBlZDsKKyAgICB9OworCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBudWxsX21hcHBlZF90eXBlIFBCX0RTX0NMQVNTX0NfREVDOjpzX251bGxfbWFwcGVkOworCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBNYXBwZWQ+CisgICAgc3RydWN0IG5vX3Rocm93X2NvcGllcworICAgIHsKKyAgICAgIHR5cGVkZWYgaW50ZWdyYWxfY29uc3RhbnQ8aW50LCBpc19zaW1wbGU8S2V5Pjo6dmFsdWUgJiYgaXNfc2ltcGxlPE1hcHBlZD46OnZhbHVlPiBpbmRpY2F0b3I7CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleT4KKyAgICBzdHJ1Y3Qgbm9fdGhyb3dfY29waWVzPEtleSwgbnVsbF9tYXBwZWRfdHlwZT4KKyAgICB7CisgICAgICB0eXBlZGVmIGludGVncmFsX2NvbnN0YW50PGludCwgaXNfc2ltcGxlPEtleT46OnZhbHVlPiBpbmRpY2F0b3I7CisgICAgfTsKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vYmluX3NlYXJjaF90cmVlXy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9iaW5fc2VhcmNoX3RyZWVfLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjNmZmUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vYmluX3NlYXJjaF90cmVlXy5ocHAKQEAgLTAsMCArMSw0OTcgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGJpbl9zZWFyY2hfdHJlZV8uaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYmluX3NlYXJjaF90cmVlXy4KKyAqLworLyoKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gdXNlcyBhbiBpZGVhIGZyb20gdGhlIFNHSSBTVEwgKHVzaW5nIGEgQGEgaGVhZGVyIG5vZGUKKyAqICAgIHdoaWNoIGlzIG5lZWRlZCBmb3IgZWZmaWNpZW50IGl0ZXJhdGlvbikuCisgKi8KKworI2luY2x1ZGUgPGV4dC9wYl9kcy9leGNlcHRpb24uaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvZXFfZm4vZXFfYnlfbGVzcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90eXBlc190cmFpdHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvZGVidWdfbWFwX2Jhc2UuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jb25kX2RlYWx0b3IuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHlwZV91dGlscy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90cmVlX3RyYWNlX2Jhc2UuaHBwPgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQwkJCQkJCVwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1hcHBlZCwgY2xhc3MgQ21wX0ZuLAkJXAorCSAgICAgY2xhc3MgTm9kZV9BbmRfSXRfVHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CisKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisjZGVmaW5lIFBCX0RTX0NMQVNTX05BTUUJCQlcCisgICAgYmluX3NlYXJjaF90cmVlX2RhdGFfCisjZW5kaWYgCisKKyNpZmRlZiBQQl9EU19EQVRBX0ZBTFNFX0lORElDQVRPUgorI2RlZmluZSBQQl9EU19DTEFTU19OQU1FCQkJXAorICAgIGJpbl9zZWFyY2hfdHJlZV9ub19kYXRhXworI2VuZGlmIAorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDCQkJCQkJXAorICAgIFBCX0RTX0NMQVNTX05BTUU8CQkJCQkJCVwKKwkJCQkJCUtleSwJCQlcCisJCQkJCQlNYXBwZWQsCQkJXAorCQkJCQkJQ21wX0ZuLAkJCVwKKwkJCQkJCU5vZGVfQW5kX0l0X1RyYWl0cywJXAorCQkJCQkJQWxsb2NhdG9yPgorCisjZGVmaW5lIFBCX0RTX1RZUEVTX1RSQUlUU19DX0RFQwkJCQlcCisgICAgdHlwZXNfdHJhaXRzPAkJCQlcCisJCQkJCQlLZXksCQlcCisJCQkJCQlNYXBwZWQsCQlcCisJCQkJCQlBbGxvY2F0b3IsCVwKKwkJCQkJCWZhbHNlPgorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyNkZWZpbmUgUEJfRFNfREVCVUdfTUFQX0JBU0VfQ19ERUMJCQkJCVwKKyAgICBkZWJ1Z19tYXBfYmFzZTxLZXksCWVxX2J5X2xlc3M8S2V5LCBDbXBfRm4+LCBcCisJICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8S2V5Pjo6b3RoZXI6OmNvbnN0X3JlZmVyZW5jZT4KKyNlbmRpZiAKKworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyNkZWZpbmUgUEJfRFNfVjJGKFgpIChYKS5maXJzdAorI2RlZmluZSBQQl9EU19WMlMoWCkgKFgpLnNlY29uZAorI2RlZmluZSBQQl9EU19FUDJWUChYKSYgKChYKS0+bV92YWx1ZSkKKyNlbmRpZiAKKworI2lmZGVmIFBCX0RTX0RBVEFfRkFMU0VfSU5ESUNBVE9SCisjZGVmaW5lIFBCX0RTX1YyRihYKSAoWCkKKyNkZWZpbmUgUEJfRFNfVjJTKFgpIE1hcHBlZF9EYXRhKCkKKyNkZWZpbmUgUEJfRFNfRVAyVlAoWCkmICgoWCktPm1fdmFsdWUuZmlyc3QpCisjZW5kaWYgCisKKyNpZmRlZiBQQl9EU19UUkVFX1RSQUNFCisjZGVmaW5lIFBCX0RTX1RSRUVfVFJBQ0VfQkFTRV9DX0RFQwkJCQkJXAorICAgIHRyZWVfdHJhY2VfYmFzZTwJCQkJCQkJXAorCQkJCQkJCQkJdHlwZW5hbWUgTm9kZV9BbmRfSXRfVHJhaXRzOjpjb25zdF9ub2RlX2l0ZXJhdG9yLCBcCisJCQkJCQkJCQl0eXBlbmFtZSBOb2RlX0FuZF9JdF9UcmFpdHM6Om5vZGVfaXRlcmF0b3IsIFwKKwkJCQkJCQkJCUNtcF9GbiwJXAorCQkJCQkJCQkJdHJ1ZSwgXAorCQkJCQkJCQkJQWxsb2NhdG9yPgorI2VuZGlmIAorCisgICAgLyoqCisgICAgICogY2xhc3MgZGVzY3JpcHRpb24gPSAiOGl8XHw0cmVlICQzNHJjfC18IDdyMzMgNzQ4MTMuIj4KKyAgICAgKiovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LAorCSAgICAgdHlwZW5hbWUgTWFwcGVkLAorCSAgICAgY2xhc3MgQ21wX0ZuLAorCSAgICAgY2xhc3MgTm9kZV9BbmRfSXRfVHJhaXRzLAorCSAgICAgY2xhc3MgQWxsb2NhdG9yPgorICAgIGNsYXNzIFBCX0RTX0NMQVNTX05BTUUgOgorI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICBwdWJsaWMgUEJfRFNfREVCVUdfTUFQX0JBU0VfQ19ERUMsCisjZW5kaWYgCisjaWZkZWYgUEJfRFNfVFJFRV9UUkFDRQorICAgICAgcHVibGljIFBCX0RTX1RSRUVfVFJBQ0VfQkFTRV9DX0RFQywKKyNlbmRpZiAKKyAgICAgIHB1YmxpYyBDbXBfRm4sCisgICAgICBwdWJsaWMgUEJfRFNfVFlQRVNfVFJBSVRTX0NfREVDLAorICAgICAgcHVibGljIE5vZGVfQW5kX0l0X1RyYWl0czo6bm9kZV91cGRhdGUKKyAgICB7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKyAgICAgIHR5cGVuYW1lIE5vZGVfQW5kX0l0X1RyYWl0czo6bm9kZT46Om90aGVyCisgICAgICBub2RlX2FsbG9jYXRvcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBub2RlX2FsbG9jYXRvcjo6dmFsdWVfdHlwZSBub2RlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIG5vZGVfYWxsb2NhdG9yOjpwb2ludGVyIG5vZGVfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZiBQQl9EU19UWVBFU19UUkFJVFNfQ19ERUMgdHJhaXRzX2Jhc2U7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIE5vZGVfQW5kX0l0X1RyYWl0czo6bnVsbF9ub2RlX3VwZGF0ZV9wb2ludGVyCisgICAgICBudWxsX25vZGVfdXBkYXRlX3BvaW50ZXI7CisKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBjb25kX2RlYWx0b3I8IG5vZGUsIEFsbG9jYXRvcj4gY29uZF9kZWFsdG9yX3Q7CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgdHlwZWRlZiBQQl9EU19ERUJVR19NQVBfQkFTRV9DX0RFQyBkZWJ1Z19iYXNlOworI2VuZGlmIAorCisgICAgcHVibGljOgorCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6c2l6ZV90eXBlIHNpemVfdHlwZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgUEJfRFNfVFlQRVNfVFJBSVRTX0NfREVDOjprZXlfdHlwZSBrZXlfdHlwZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBQQl9EU19UWVBFU19UUkFJVFNfQ19ERUM6OmtleV9wb2ludGVyIGtleV9wb2ludGVyOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBQQl9EU19UWVBFU19UUkFJVFNfQ19ERUM6OmNvbnN0X2tleV9wb2ludGVyCisgICAgICBjb25zdF9rZXlfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBQQl9EU19UWVBFU19UUkFJVFNfQ19ERUM6OmtleV9yZWZlcmVuY2Uga2V5X3JlZmVyZW5jZTsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgUEJfRFNfVFlQRVNfVFJBSVRTX0NfREVDOjpjb25zdF9rZXlfcmVmZXJlbmNlCisgICAgICBjb25zdF9rZXlfcmVmZXJlbmNlOworCisjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBQQl9EU19UWVBFU19UUkFJVFNfQ19ERUM6Om1hcHBlZF90eXBlIG1hcHBlZF90eXBlOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBQQl9EU19UWVBFU19UUkFJVFNfQ19ERUM6Om1hcHBlZF9wb2ludGVyCisgICAgICBtYXBwZWRfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgUEJfRFNfVFlQRVNfVFJBSVRTX0NfREVDOjpjb25zdF9tYXBwZWRfcG9pbnRlcgorICAgICAgY29uc3RfbWFwcGVkX3BvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIFBCX0RTX1RZUEVTX1RSQUlUU19DX0RFQzo6bWFwcGVkX3JlZmVyZW5jZQorICAgICAgbWFwcGVkX3JlZmVyZW5jZTsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgUEJfRFNfVFlQRVNfVFJBSVRTX0NfREVDOjpjb25zdF9tYXBwZWRfcmVmZXJlbmNlCisgICAgICBjb25zdF9tYXBwZWRfcmVmZXJlbmNlOworI2VuZGlmIAorCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIFBCX0RTX1RZUEVTX1RSQUlUU19DX0RFQzo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIFBCX0RTX1RZUEVTX1RSQUlUU19DX0RFQzo6cG9pbnRlciBwb2ludGVyOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIFBCX0RTX1RZUEVTX1RSQUlUU19DX0RFQzo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIFBCX0RTX1RZUEVTX1RSQUlUU19DX0RFQzo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgUEJfRFNfVFlQRVNfVFJBSVRTX0NfREVDOjpjb25zdF9yZWZlcmVuY2UKKyAgICAgIGNvbnN0X3JlZmVyZW5jZTsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgTm9kZV9BbmRfSXRfVHJhaXRzOjpjb25zdF9wb2ludF9pdGVyYXRvcgorICAgICAgY29uc3RfcG9pbnRfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgY29uc3RfcG9pbnRfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgTm9kZV9BbmRfSXRfVHJhaXRzOjpwb2ludF9pdGVyYXRvciBwb2ludF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiBwb2ludF9pdGVyYXRvciBpdGVyYXRvcjsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgTm9kZV9BbmRfSXRfVHJhaXRzOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIE5vZGVfQW5kX0l0X1RyYWl0czo6cmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBOb2RlX0FuZF9JdF9UcmFpdHM6OmNvbnN0X25vZGVfaXRlcmF0b3IKKyAgICAgIGNvbnN0X25vZGVfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgTm9kZV9BbmRfSXRfVHJhaXRzOjpub2RlX2l0ZXJhdG9yIG5vZGVfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgQ21wX0ZuIGNtcF9mbjsKKworICAgICAgdHlwZWRlZiBBbGxvY2F0b3IgYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgTm9kZV9BbmRfSXRfVHJhaXRzOjpub2RlX3VwZGF0ZSBub2RlX3VwZGF0ZTsKKworICAgIHB1YmxpYzoKKworICAgICAgUEJfRFNfQ0xBU1NfTkFNRSgpOworCisgICAgICBQQl9EU19DTEFTU19OQU1FKGNvbnN0IENtcF9GbiYgcl9jbXBfZm4pOworCisgICAgICBQQl9EU19DTEFTU19OQU1FKGNvbnN0IENtcF9GbiYgcl9jbXBfZm4sIGNvbnN0IG5vZGVfdXBkYXRlJiByX3VwZGF0ZSk7CisKKyAgICAgIFBCX0RTX0NMQVNTX05BTUUoY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKTsKKworICAgICAgdm9pZAorICAgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpOworCisgICAgICB+UEJfRFNfQ0xBU1NfTkFNRSgpOworCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgZW1wdHkoKSBjb25zdDsKKworICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0OworCisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBtYXhfc2l6ZSgpIGNvbnN0OworCisgICAgICBDbXBfRm4mIAorICAgICAgZ2V0X2NtcF9mbigpOworCisgICAgICBjb25zdCBDbXBfRm4mIAorICAgICAgZ2V0X2NtcF9mbigpIGNvbnN0OworCisgICAgICBpbmxpbmUgcG9pbnRfaXRlcmF0b3IKKyAgICAgIGxvd2VyX2JvdW5kKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpOworCisgICAgICBpbmxpbmUgY29uc3RfcG9pbnRfaXRlcmF0b3IKKyAgICAgIGxvd2VyX2JvdW5kKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpIGNvbnN0OworCisgICAgICBpbmxpbmUgcG9pbnRfaXRlcmF0b3IKKyAgICAgIHVwcGVyX2JvdW5kKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpOworCisgICAgICBpbmxpbmUgY29uc3RfcG9pbnRfaXRlcmF0b3IKKyAgICAgIHVwcGVyX2JvdW5kKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpIGNvbnN0OworCisgICAgICBpbmxpbmUgcG9pbnRfaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSk7CisKKyAgICAgIGlubGluZSBjb25zdF9wb2ludF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5KSBjb25zdDsKKworICAgICAgaW5saW5lIGl0ZXJhdG9yCisgICAgICBiZWdpbigpOworCisgICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBpdGVyYXRvcgorICAgICAgZW5kKCk7CisKKyAgICAgIGlubGluZSBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKTsKKworICAgICAgaW5saW5lIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIGNvbnN0OworCisgICAgICBpbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpOworCisgICAgICBpbmxpbmUgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIGNvbnN0OworCisgICAgICBpbmxpbmUgY29uc3Rfbm9kZV9pdGVyYXRvcgorICAgICAgbm9kZV9iZWdpbigpIGNvbnN0OworCisgICAgICBpbmxpbmUgbm9kZV9pdGVyYXRvcgorICAgICAgbm9kZV9iZWdpbigpOworCisgICAgICBpbmxpbmUgY29uc3Rfbm9kZV9pdGVyYXRvcgorICAgICAgbm9kZV9lbmQoKSBjb25zdDsKKworICAgICAgaW5saW5lIG5vZGVfaXRlcmF0b3IKKyAgICAgIG5vZGVfZW5kKCk7CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCk7CisKKyAgICBwcm90ZWN0ZWQ6CisKKyAgICAgIHZvaWQKKyAgICAgIHZhbHVlX3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKTsKKworICAgICAgdm9pZAorICAgICAgaW5pdGlhbGl6ZV9taW5fbWF4KCk7CisKKyAgICAgIGlubGluZSBpdGVyYXRvcgorICAgICAgaW5zZXJ0X2ltcF9lbXB0eShjb25zdF9yZWZlcmVuY2Ugcl92YWx1ZSk7CisKKyAgICAgIGlubGluZSBpdGVyYXRvcgorICAgICAgaW5zZXJ0X2xlYWZfbmV3KGNvbnN0X3JlZmVyZW5jZSByX3ZhbHVlLCBub2RlX3BvaW50ZXIgcF9uZCwgYm9vbCBsZWZ0X25kKTsKKworICAgICAgaW5saW5lIG5vZGVfcG9pbnRlcgorICAgICAgZ2V0X25ld19ub2RlX2Zvcl9sZWFmX2luc2VydChjb25zdF9yZWZlcmVuY2Ugcl92YWwsIGZhbHNlX3R5cGUpOworCisgICAgICBpbmxpbmUgbm9kZV9wb2ludGVyCisgICAgICBnZXRfbmV3X25vZGVfZm9yX2xlYWZfaW5zZXJ0KGNvbnN0X3JlZmVyZW5jZSByX3ZhbCwgdHJ1ZV90eXBlKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIGFjdHVhbF9lcmFzZV9ub2RlKG5vZGVfcG9pbnRlciBwX25kKTsKKworICAgICAgaW5saW5lIHN0ZDo6cGFpcjxub2RlX3BvaW50ZXIsIGJvb2w+CisgICAgICBlcmFzZShub2RlX3BvaW50ZXIgcF9uZCk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICB1cGRhdGVfbWluX21heF9mb3JfZXJhc2VkX25vZGUobm9kZV9wb2ludGVyIHBfbmQpOworCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgY2xlYXJfaW1wKG5vZGVfcG9pbnRlciBwX25kKTsKKworICAgICAgaW5saW5lIHN0ZDo6cGFpcjwKKwlwb2ludF9pdGVyYXRvciwKKwlib29sPgorICAgICAgaW5zZXJ0X2xlYWYoY29uc3RfcmVmZXJlbmNlIHJfdmFsdWUpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgcm90YXRlX2xlZnQobm9kZV9wb2ludGVyIHBfeCk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICByb3RhdGVfcmlnaHQobm9kZV9wb2ludGVyIHBfeSk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICByb3RhdGVfcGFyZW50KG5vZGVfcG9pbnRlciBwX25kKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIGFwcGx5X3VwZGF0ZShub2RlX3BvaW50ZXIgcF9uZCwgbnVsbF9ub2RlX3VwZGF0ZV9wb2ludGVyKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTm9kZV9VcGRhdGVfPgorICAgICAgaW5saW5lIHZvaWQKKyAgICAgIGFwcGx5X3VwZGF0ZShub2RlX3BvaW50ZXIgcF9uZCwgTm9kZV9VcGRhdGVfKiBwX3VwZGF0ZSk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICB1cGRhdGVfdG9fdG9wKG5vZGVfcG9pbnRlciBwX25kLCBudWxsX25vZGVfdXBkYXRlX3BvaW50ZXIpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX1VwZGF0ZV8+CisgICAgICBpbmxpbmUgdm9pZAorICAgICAgdXBkYXRlX3RvX3RvcChub2RlX3BvaW50ZXIgcF9uZCwgTm9kZV9VcGRhdGVfKiBwX3VwZGF0ZSk7CisKKyAgICAgIGJvb2wKKyAgICAgIGpvaW5fcHJlcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpOworCisgICAgICB2b2lkCisgICAgICBqb2luX2ZpbmlzaChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpOworCisgICAgICBib29sCisgICAgICBzcGxpdF9wcmVwKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXksIFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcik7CisKKyAgICAgIHZvaWQKKyAgICAgIHNwbGl0X2ZpbmlzaChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpOworCisgICAgICBzaXplX3R5cGUKKyAgICAgIHJlY3Vyc2l2ZV9jb3VudChub2RlX3BvaW50ZXIgcF9uZCkgY29uc3Q7CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X3ZhbGlkKCkgY29uc3Q7CisKKyAgICAgIHZvaWQKKyAgICAgIHN0cnVjdHVyZV9vbmx5X2Fzc2VydF92YWxpZCgpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfbm9kZV9jb25zaXN0ZW50KGNvbnN0IG5vZGVfcG9pbnRlciBwX25kKSBjb25zdDsKKyNlbmRpZiAKKworICAgIHByaXZhdGU6CisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF9pdGVyYXRvcnMoKSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X2NvbnNpc3RlbnRfd2l0aF9kZWJ1Z19iYXNlKCkgY29uc3Q7CisKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF9ub2RlX2NvbnNpc3RlbnRfd2l0aF9sZWZ0KGNvbnN0IG5vZGVfcG9pbnRlciBwX25kKSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X25vZGVfY29uc2lzdGVudF93aXRoX3JpZ2h0KGNvbnN0IG5vZGVfcG9pbnRlciBwX25kKSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X2NvbnNpc3RlbnRfd2l0aF9kZWJ1Z19iYXNlKGNvbnN0IG5vZGVfcG9pbnRlciBwX25kKSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X21pbigpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfbWluX2ltcChjb25zdCBub2RlX3BvaW50ZXIgcF9uZCkgY29uc3Q7CisKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF9tYXgoKSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X21heF9pbXAoY29uc3Qgbm9kZV9wb2ludGVyIHBfbmQpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfc2l6ZSgpIGNvbnN0OworCisgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjwgY29uc3RfcG9pbnRlciwgY29uc3RfcG9pbnRlcj4gbm9kZV9jb25zaXN0ZW50X3Q7CisKKyAgICAgIG5vZGVfY29uc2lzdGVudF90CisgICAgICBhc3NlcnRfbm9kZV9jb25zaXN0ZW50Xyhjb25zdCBub2RlX3BvaW50ZXIgcF9uZCkgY29uc3Q7CisjZW5kaWYgCisKKyAgICAgIHZvaWQKKyAgICAgIGluaXRpYWxpemUoKTsKKworICAgICAgbm9kZV9wb2ludGVyCisgICAgICByZWN1cnNpdmVfY29weV9ub2RlKGNvbnN0IG5vZGVfcG9pbnRlciBwX25kKTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgIG5vZGVfcG9pbnRlciBtX3BfaGVhZDsKKworICAgICAgc2l6ZV90eXBlIG1fc2l6ZTsKKworICAgICAgc3RhdGljIG5vZGVfYWxsb2NhdG9yIHNfbm9kZV9hbGxvY2F0b3I7CisgICAgfTsKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vaXRlcmF0b3JzX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9kZWJ1Z19mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vaW5zZXJ0X2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9lcmFzZV9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vZmluZF9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vaW5mb19mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vcm90YXRlX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9wb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwPgorCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisKKyN1bmRlZiBQQl9EU19DTEFTU19OQU1FCisKKyN1bmRlZiBQQl9EU19UWVBFU19UUkFJVFNfQ19ERUMKKworI3VuZGVmIFBCX0RTX0RFQlVHX01BUF9CQVNFX0NfREVDCisKKyNpZmRlZiBQQl9EU19UUkVFX1RSQUNFCisjdW5kZWYgUEJfRFNfVFJFRV9UUkFDRV9CQVNFX0NfREVDCisjZW5kaWYgCisKKyN1bmRlZiBQQl9EU19WMkYKKyN1bmRlZiBQQl9EU19FUDJWUAorI3VuZGVmIFBCX0RTX1YyUworCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vY29uZF9kdG9yX2VudHJ5X2RlYWx0b3IuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vY29uZF9kdG9yX2VudHJ5X2RlYWx0b3IuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MDU3NGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9jb25kX2R0b3JfZW50cnlfZGVhbHRvci5ocHAKQEAgLTAsMCArMSw3MCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY29uZF9kdG9yX2VudHJ5X2RlYWx0b3IuaHBwCisgKiBDb250YWlucyBhIGJpbmFyeSB0cmVlIGNvbnRhaW5lciBjb25kaXRpb25hbCBkZWFsbG9jYXRvcgorICovCisKK2NsYXNzIGJpbl9zZWFyY2hfdHJlZV9jb25kX2R0b3JfZW50cnlfZGVhbHRvcl8KK3sKK3B1YmxpYzoKKyAgaW5saW5lCisgIGJpbl9zZWFyY2hfdHJlZV9jb25kX2R0b3JfZW50cnlfZGVhbHRvcl8obm9kZV9wb2ludGVyIHBfbmQpIDogbV9wX25kKHBfbmQpLAorCQkJCQkJCQltX25vX2FjdGlvbl9kdG9yKGZhbHNlKQorICB7IH0KKworICBpbmxpbmUgdm9pZAorICBzZXRfbm9fYWN0aW9uX2R0b3IoKQorICB7CisgICAgbV9ub19hY3Rpb25fZHRvciA9IHRydWU7CisgIH0KKworICBpbmxpbmUKKyAgfmJpbl9zZWFyY2hfdHJlZV9jb25kX2R0b3JfZW50cnlfZGVhbHRvcl8oKQorICB7CisgICAgaWYgKG1fbm9fYWN0aW9uX2R0b3IpCisgICAgICByZXR1cm47CisKKyAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxOb2RlPjo6b3RoZXIoKS4KKyAgICAgIGRlYWxsb2NhdGUobV9wX25kLCAxKTsKKyAgfQorCitwcm90ZWN0ZWQ6CisgIG5vZGVfcG9pbnRlciBtX3BfbmQ7CisKKyAgYm9vbCBtX25vX2FjdGlvbl9kdG9yOworfTsKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vY29uZF9rZXlfZHRvcl9lbnRyeV9kZWFsdG9yLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2NvbmRfa2V5X2R0b3JfZW50cnlfZGVhbHRvci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEyZWNlYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2NvbmRfa2V5X2R0b3JfZW50cnlfZGVhbHRvci5ocHAKQEAgLTAsMCArMSw4MSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY29uZF9rZXlfZHRvcl9lbnRyeV9kZWFsdG9yLmhwcAorICogQ29udGFpbnMgYSBiaW5hcnkgdHJlZSBjb250YWluZXIgY29uZGl0aW9uYWwgZGVhbGxvY2F0b3IKKyAqLworCitjbGFzcyBiaW5fc2VhY2hfdHJlZV9jb25kX2tleV9kdG9yX2VudHJ5X2RlYWx0b3JfCit7CitwdWJsaWM6CisgIGlubGluZQorICBiaW5fc2VhY2hfdHJlZV9jb25kX2tleV9kdG9yX2VudHJ5X2RlYWx0b3JfKG5vZGVfcG9pbnRlciBwX25kKSA6IG1fcF9uZChwX25kKSwKKwkJCQkJCQkJICAgbV9ub19hY3Rpb25fZHRvcihmYWxzZSksCisJCQkJCQkJCSAgIG1fa2V5X2Rlc3RydWN0KGZhbHNlKQorICB7IH0KKworICBpbmxpbmUgdm9pZAorICBzZXRfbm9fYWN0aW9uX2R0b3IoKQorICB7CisgICAgbV9ub19hY3Rpb25fZHRvciA9IHRydWU7CisgIH0KKworICBpbmxpbmUgdm9pZAorICBzZXRfa2V5X2Rlc3RydWN0KCkKKyAgeworICAgIG1fa2V5X2Rlc3RydWN0ID0gdHJ1ZTsKKyAgfQorCisgIGlubGluZQorICB+YmluX3NlYWNoX3RyZWVfY29uZF9rZXlfZHRvcl9lbnRyeV9kZWFsdG9yXygpCisgIHsKKyAgICBpZiAobV9ub19hY3Rpb25fZHRvcikKKyAgICAgIHJldHVybjsKKworICAgIGlmIChtX2tleV9kZXN0cnVjdCkKKyAgICAgIG1fcF9uZC0+bV92YWx1ZS5maXJzdC5+S2V5KCk7CisKKyAgICBiaW5fdHJlZV9iYXNlOjpzX2FsbG9jLmRlYWxsb2NhdGUobV9wX25kLCAxKTsKKyAgfQorCitwcm90ZWN0ZWQ6CisgIG5vZGVfcG9pbnRlciBtX3BfbmQ7CisKKyAgYm9vbCBtX25vX2FjdGlvbl9kdG9yOworCisgIGJvb2wgbV9rZXlfZGVzdHJ1Y3Q7Cit9OworCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNWQyMDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDIxOCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBiaW5fc2VhcmNoX3RyZWVfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9hbGxvY2F0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjpzX25vZGVfYWxsb2NhdG9yOworCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfQ0xBU1NfTkFNRSgpIDogbV9wX2hlYWQoc19ub2RlX2FsbG9jYXRvci5hbGxvY2F0ZSgxKSksIG1fc2l6ZSgwKQoreworICBpbml0aWFsaXplKCk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoc3RydWN0dXJlX29ubHlfYXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfQ0xBU1NfTkFNRShjb25zdCBDbXBfRm4mIHJfY21wX2ZuKSA6CisgIENtcF9GbihyX2NtcF9mbiksIG1fcF9oZWFkKHNfbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSkpLCBtX3NpemUoMCkKK3sKKyAgaW5pdGlhbGl6ZSgpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKHN0cnVjdHVyZV9vbmx5X2Fzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK1BCX0RTX0NMQVNTX05BTUUoY29uc3QgQ21wX0ZuJiByX2NtcF9mbiwgY29uc3Qgbm9kZV91cGRhdGUmIHJfbm9kZV91cGRhdGUpIDoKKyAgQ21wX0ZuKHJfY21wX2ZuKSwKKyAgbm9kZV91cGRhdGUocl9ub2RlX3VwZGF0ZSksCisgIG1fcF9oZWFkKHNfbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSkpLAorICBtX3NpemUoMCkKK3sKKyAgaW5pdGlhbGl6ZSgpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKHN0cnVjdHVyZV9vbmx5X2Fzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK1BCX0RTX0NMQVNTX05BTUUoY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKSA6CisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgZGVidWdfYmFzZShvdGhlciksCisjZW5kaWYgCisjaWZkZWYgUEJfRFNfVFJFRV9UUkFDRQorICBQQl9EU19UUkVFX1RSQUNFX0JBU0VfQ19ERUMob3RoZXIpLAorI2VuZGlmIAorICBDbXBfRm4ob3RoZXIpLAorICBub2RlX3VwZGF0ZShvdGhlciksCisgIG1fcF9oZWFkKHNfbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSkpLAorICBtX3NpemUoMCkKK3sKKyAgaW5pdGlhbGl6ZSgpOworICBtX3NpemUgPSBvdGhlci5tX3NpemU7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuc3RydWN0dXJlX29ubHlfYXNzZXJ0X3ZhbGlkKCk7KQorCisgICAgX190cnkKKyAgICAgIHsKKyAgICAgICAgbV9wX2hlYWQtPm1fcF9wYXJlbnQgPSByZWN1cnNpdmVfY29weV9ub2RlKG90aGVyLm1fcF9oZWFkLT5tX3BfcGFyZW50KTsKKyAgICAgICAgaWYgKG1fcF9oZWFkLT5tX3BfcGFyZW50ICE9IE5VTEwpCisJICBtX3BfaGVhZC0+bV9wX3BhcmVudC0+bV9wX3BhcmVudCA9IG1fcF9oZWFkOworICAgICAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7CisgICAgICAgIGluaXRpYWxpemVfbWluX21heCgpOworICAgICAgfQorICAgIF9fY2F0Y2goLi4uKQorICAgICAgeworICAgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNsZWFyKCk7KQorCXNfbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShtX3BfaGVhZCwgMSk7CisgICAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworICAgICAgfQorICBfR0xJQkNYWF9ERUJVR19PTkxZKHN0cnVjdHVyZV9vbmx5X2Fzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKHN0cnVjdHVyZV9vbmx5X2Fzc2VydF92YWxpZCgpOykKKyAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5zdHJ1Y3R1cmVfb25seV9hc3NlcnRfdmFsaWQoKTspCisgIHZhbHVlX3N3YXAob3RoZXIpOworICBzdGQ6OnN3YXAoKENtcF9GbiYgKSgqdGhpcyksIChDbXBfRm4mIClvdGhlcik7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoc3RydWN0dXJlX29ubHlfYXNzZXJ0X3ZhbGlkKCk7KQorICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLnN0cnVjdHVyZV9vbmx5X2Fzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3ZhbHVlX3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OnN3YXAob3RoZXIpOykKKyAgc3RkOjpzd2FwKG1fcF9oZWFkLCBvdGhlci5tX3BfaGVhZCk7CisgIHN0ZDo6c3dhcChtX3NpemUsIG90aGVyLm1fc2l6ZSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6Cit+UEJfRFNfQ0xBU1NfTkFNRSgpCit7CisgIGNsZWFyKCk7CisgIHNfbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShtX3BfaGVhZCwgMSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citpbml0aWFsaXplKCkKK3sKKyAgbV9wX2hlYWQtPm1fcF9wYXJlbnQgPSBOVUxMOworICBtX3BfaGVhZC0+bV9wX2xlZnQgPSBtX3BfaGVhZDsKKyAgbV9wX2hlYWQtPm1fcF9yaWdodCA9IG1fcF9oZWFkOworICBtX3NpemUgPSAwOworfQorCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVjdXJzaXZlX2NvcHlfbm9kZShjb25zdCBub2RlX3BvaW50ZXIgcF9uZCkKK3sKKyAgaWYgKHBfbmQgPT0gTlVMTCkKKyAgICByZXR1cm4gKE5VTEwpOworCisgIG5vZGVfcG9pbnRlciBwX3JldCA9IHNfbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7CisgIF9fdHJ5CisgICAgeworICAgICAgbmV3IChwX3JldCkgbm9kZSgqcF9uZCk7CisgICAgfQorICBfX2NhdGNoKC4uLikKKyAgICB7CisgICAgICBzX25vZGVfYWxsb2NhdG9yLmRlYWxsb2NhdGUocF9yZXQsIDEpOworICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgICAgfQorCisgIHBfcmV0LT5tX3BfbGVmdCA9IHBfcmV0LT5tX3BfcmlnaHQgPSBOVUxMOworCisgIF9fdHJ5CisgICAgeworICAgICAgcF9yZXQtPm1fcF9sZWZ0ID0gcmVjdXJzaXZlX2NvcHlfbm9kZShwX25kLT5tX3BfbGVmdCk7CisgICAgICBwX3JldC0+bV9wX3JpZ2h0ID0gcmVjdXJzaXZlX2NvcHlfbm9kZShwX25kLT5tX3BfcmlnaHQpOworICAgIH0KKyAgX19jYXRjaCguLi4pCisgICAgeworICAgICAgY2xlYXJfaW1wKHBfcmV0KTsKKyAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworICAgIH0KKworICBpZiAocF9yZXQtPm1fcF9sZWZ0ICE9IE5VTEwpCisgICAgcF9yZXQtPm1fcF9sZWZ0LT5tX3BfcGFyZW50ID0gcF9yZXQ7CisKKyAgaWYgKHBfcmV0LT5tX3BfcmlnaHQgIT0gTlVMTCkKKyAgICBwX3JldC0+bV9wX3JpZ2h0LT5tX3BfcGFyZW50ID0gcF9yZXQ7CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfbm9kZV9jb25zaXN0ZW50KHBfcmV0KTspCisgIHJldHVybiBwX3JldDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2luaXRpYWxpemVfbWluX21heCgpCit7CisgIGlmIChtX3BfaGVhZC0+bV9wX3BhcmVudCA9PSBOVUxMKQorICAgIHsKKyAgICAgIG1fcF9oZWFkLT5tX3BfbGVmdCA9IG1fcF9oZWFkLT5tX3BfcmlnaHQgPSBtX3BfaGVhZDsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgeworICAgIG5vZGVfcG9pbnRlciBwX21pbiA9IG1fcF9oZWFkLT5tX3BfcGFyZW50OworICAgIHdoaWxlIChwX21pbi0+bV9wX2xlZnQgIT0gTlVMTCkKKyAgICAgIHBfbWluID0gcF9taW4tPm1fcF9sZWZ0OworICAgIG1fcF9oZWFkLT5tX3BfbGVmdCA9IHBfbWluOworICB9CisKKyAgeworICAgIG5vZGVfcG9pbnRlciBwX21heCA9IG1fcF9oZWFkLT5tX3BfcGFyZW50OworICAgIHdoaWxlIChwX21heC0+bV9wX3JpZ2h0ICE9IE5VTEwpCisgICAgICBwX21heCA9IHBfbWF4LT5tX3BfcmlnaHQ7CisgICAgbV9wX2hlYWQtPm1fcF9yaWdodCA9IHBfbWF4OworICB9Cit9CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2RlYnVnX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vZGVidWdfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM0NDdiZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2RlYnVnX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMjcyIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBkZWJ1Z19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGJpbl9zZWFyY2hfdHJlZV8uCisgKi8KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfdmFsaWQoKSBjb25zdAoreworICBzdHJ1Y3R1cmVfb25seV9hc3NlcnRfdmFsaWQoKTsKKyAgYXNzZXJ0X2NvbnNpc3RlbnRfd2l0aF9kZWJ1Z19iYXNlKCk7CisgIGFzc2VydF9zaXplKCk7CisgIGFzc2VydF9pdGVyYXRvcnMoKTsKKyAgaWYgKG1fcF9oZWFkLT5tX3BfcGFyZW50ID09IE5VTEwpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fc2l6ZSA9PSAwKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9zaXplID4gMCk7CisgICAgfQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3RydWN0dXJlX29ubHlfYXNzZXJ0X3ZhbGlkKCkgY29uc3QKK3sKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF9oZWFkICE9IE5VTEwpOworICBpZiAobV9wX2hlYWQtPm1fcF9wYXJlbnQgPT0gTlVMTCkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9wX2hlYWQtPm1fcF9sZWZ0ID09IG1fcF9oZWFkKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3BfaGVhZC0+bV9wX3JpZ2h0ID09IG1fcF9oZWFkKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9wX2hlYWQtPm1fcF9wYXJlbnQtPm1fcF9wYXJlbnQgPT0gbV9wX2hlYWQpOworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF9oZWFkLT5tX3BfbGVmdCAhPSBtX3BfaGVhZCk7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9wX2hlYWQtPm1fcF9yaWdodCAhPSBtX3BfaGVhZCk7CisgICAgfQorCisgIGlmIChtX3BfaGVhZC0+bV9wX3BhcmVudCAhPSBOVUxMKQorICAgIGFzc2VydF9ub2RlX2NvbnNpc3RlbnQobV9wX2hlYWQtPm1fcF9wYXJlbnQpOworICBhc3NlcnRfbWluKCk7CisgIGFzc2VydF9tYXgoKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9ub2RlX2NvbnNpc3RlbnQoY29uc3Qgbm9kZV9wb2ludGVyIHBfbmQpIGNvbnN0Cit7CisgIGFzc2VydF9ub2RlX2NvbnNpc3RlbnRfKHBfbmQpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfY29uc2lzdGVudF90CitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfbm9kZV9jb25zaXN0ZW50Xyhjb25zdCBub2RlX3BvaW50ZXIgcF9uZCkgY29uc3QKK3sKKyAgaWYgKHBfbmQgPT0gTlVMTCkKKyAgICByZXR1cm4gKHN0ZDo6bWFrZV9wYWlyKChjb25zdF9wb2ludGVyKU5VTEwsKGNvbnN0X3BvaW50ZXIpTlVMTCkpOworCisgIGFzc2VydF9ub2RlX2NvbnNpc3RlbnRfd2l0aF9sZWZ0KHBfbmQpOworICBhc3NlcnRfbm9kZV9jb25zaXN0ZW50X3dpdGhfcmlnaHQocF9uZCk7CisKKyAgY29uc3Qgc3RkOjpwYWlyPGNvbnN0X3BvaW50ZXIsIGNvbnN0X3BvaW50ZXI+CisgICAgbF9yYW5nZSA9IGFzc2VydF9ub2RlX2NvbnNpc3RlbnRfKHBfbmQtPm1fcF9sZWZ0KTsKKworICBpZiAobF9yYW5nZS5zZWNvbmQgIT0gTlVMTCkKKyAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoQ21wX0ZuOjpvcGVyYXRvcigpKFBCX0RTX1YyRigqbF9yYW5nZS5zZWNvbmQpLAorCQkJCQkgICAgIFBCX0RTX1YyRihwX25kLT5tX3ZhbHVlKSkpOworCisgIGNvbnN0IHN0ZDo6cGFpcjxjb25zdF9wb2ludGVyLCBjb25zdF9wb2ludGVyPgorICAgIHJfcmFuZ2UgPSBhc3NlcnRfbm9kZV9jb25zaXN0ZW50XyhwX25kLT5tX3BfcmlnaHQpOworCisgIGlmIChyX3JhbmdlLmZpcnN0ICE9IE5VTEwpCisgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKENtcF9Gbjo6b3BlcmF0b3IoKShQQl9EU19WMkYocF9uZC0+bV92YWx1ZSksCisJCQkJCSAgICAgUEJfRFNfVjJGKCpyX3JhbmdlLmZpcnN0KSkpOworCisgIHJldHVybiAoc3RkOjptYWtlX3BhaXIoKGxfcmFuZ2UuZmlyc3QgIT0gTlVMTCk/IGxfcmFuZ2UuZmlyc3QgOiYgcF9uZC0+bV92YWx1ZSwocl9yYW5nZS5zZWNvbmQgIT0gTlVMTCk/IHJfcmFuZ2Uuc2Vjb25kIDomIHBfbmQtPm1fdmFsdWUpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9ub2RlX2NvbnNpc3RlbnRfd2l0aF9sZWZ0KGNvbnN0IG5vZGVfcG9pbnRlciBwX25kKSBjb25zdAoreworICBpZiAocF9uZC0+bV9wX2xlZnQgPT0gTlVMTCkKKyAgICByZXR1cm47CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kLT5tX3BfbGVmdC0+bV9wX3BhcmVudCA9PSBwX25kKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKCFDbXBfRm46Om9wZXJhdG9yKCkoUEJfRFNfVjJGKHBfbmQtPm1fdmFsdWUpLAorCQkJCQkgICAgUEJfRFNfVjJGKHBfbmQtPm1fcF9sZWZ0LT5tX3ZhbHVlKSkpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X25vZGVfY29uc2lzdGVudF93aXRoX3JpZ2h0KGNvbnN0IG5vZGVfcG9pbnRlciBwX25kKSBjb25zdAoreworICBpZiAocF9uZC0+bV9wX3JpZ2h0ID09IE5VTEwpCisgICAgcmV0dXJuOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV9wX3JpZ2h0LT5tX3BfcGFyZW50ID09IHBfbmQpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoIUNtcF9Gbjo6b3BlcmF0b3IoKShQQl9EU19WMkYocF9uZC0+bV9wX3JpZ2h0LT5tX3ZhbHVlKSwKKwkJCQkgICAgICAgUEJfRFNfVjJGKHBfbmQtPm1fdmFsdWUpKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfbWluKCkgY29uc3QKK3sKKyAgYXNzZXJ0X21pbl9pbXAobV9wX2hlYWQtPm1fcF9wYXJlbnQpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X21pbl9pbXAoY29uc3Qgbm9kZV9wb2ludGVyIHBfbmQpIGNvbnN0Cit7CisgIGlmIChwX25kID09IE5VTEwpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF9oZWFkLT5tX3BfbGVmdCA9PSBtX3BfaGVhZCk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGlmIChwX25kLT5tX3BfbGVmdCA9PSBOVUxMKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kID09IG1fcF9oZWFkLT5tX3BfbGVmdCk7CisgICAgICByZXR1cm47CisgICAgfQorICBhc3NlcnRfbWluX2ltcChwX25kLT5tX3BfbGVmdCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfbWF4KCkgY29uc3QKK3sKKyAgYXNzZXJ0X21heF9pbXAobV9wX2hlYWQtPm1fcF9wYXJlbnQpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X21heF9pbXAoY29uc3Qgbm9kZV9wb2ludGVyIHBfbmQpIGNvbnN0Cit7CisgIGlmIChwX25kID09IE5VTEwpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF9oZWFkLT5tX3BfcmlnaHQgPT0gbV9wX2hlYWQpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBpZiAocF9uZC0+bV9wX3JpZ2h0ID09IE5VTEwpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQgPT0gbV9wX2hlYWQtPm1fcF9yaWdodCk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGFzc2VydF9tYXhfaW1wKHBfbmQtPm1fcF9yaWdodCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfaXRlcmF0b3JzKCkgY29uc3QKK3sKKyAgc2l6ZV90eXBlIGl0ZXJhdGVkX251bSA9IDA7CisgIGNvbnN0X2l0ZXJhdG9yIHByZXZfaXQgPSBlbmQoKTsKKyAgZm9yIChjb25zdF9pdGVyYXRvciBpdCA9IGJlZ2luKCk7IGl0ICE9IGVuZCgpOyArK2l0KQorICAgIHsKKyAgICAgICsraXRlcmF0ZWRfbnVtOworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGxvd2VyX2JvdW5kKFBCX0RTX1YyRigqaXQpKS5tX3BfbmQgPT0gaXQubV9wX25kKTsKKyAgICAgIGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kX2l0ID0gdXBwZXJfYm91bmQoUEJfRFNfVjJGKCppdCkpOworICAgICAgLS11cHBlcl9ib3VuZF9pdDsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCh1cHBlcl9ib3VuZF9pdC5tX3BfbmQgPT0gaXQubV9wX25kKTsKKworICAgICAgaWYgKHByZXZfaXQgIT0gZW5kKCkpCisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKENtcF9Gbjo6b3BlcmF0b3IoKShQQl9EU19WMkYoKnByZXZfaXQpLAorCQkJCQkJIFBCX0RTX1YyRigqaXQpKSk7CisgICAgICBwcmV2X2l0ID0gaXQ7CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChpdGVyYXRlZF9udW0gPT0gbV9zaXplKTsKKyAgc2l6ZV90eXBlIHJldmVyc2VfaXRlcmF0ZWRfbnVtID0gMDsKKyAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX3ByZXZfaXQgPSByZW5kKCk7CisgIGZvciAoY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ID0gcmJlZ2luKCk7IHJldmVyc2VfaXQgIT0gcmVuZCgpOworICAgICAgICsrcmV2ZXJzZV9pdCkKKyAgICB7CisgICAgICArK3JldmVyc2VfaXRlcmF0ZWRfbnVtOworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGxvd2VyX2JvdW5kKAorCQkJCSAgIFBCX0RTX1YyRigqcmV2ZXJzZV9pdCkpLm1fcF9uZCA9PSByZXZlcnNlX2l0Lm1fcF9uZCk7CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kX2l0ID0gdXBwZXJfYm91bmQoUEJfRFNfVjJGKCpyZXZlcnNlX2l0KSk7CisgICAgICAtLXVwcGVyX2JvdW5kX2l0OworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHVwcGVyX2JvdW5kX2l0Lm1fcF9uZCA9PSByZXZlcnNlX2l0Lm1fcF9uZCk7CisgICAgICBpZiAocmV2ZXJzZV9wcmV2X2l0ICE9IHJlbmQoKSkKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoIUNtcF9Gbjo6b3BlcmF0b3IoKShQQl9EU19WMkYoKnJldmVyc2VfcHJldl9pdCksCisJCQkJCQkgIFBCX0RTX1YyRigqcmV2ZXJzZV9pdCkpKTsKKyAgICAgIHJldmVyc2VfcHJldl9pdCA9IHJldmVyc2VfaXQ7CisgICAgfQorICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocmV2ZXJzZV9pdGVyYXRlZF9udW0gPT0gbV9zaXplKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9jb25zaXN0ZW50X3dpdGhfZGVidWdfYmFzZSgpIGNvbnN0Cit7CisgIGRlYnVnX2Jhc2U6OmNoZWNrX3NpemUobV9zaXplKTsKKyAgYXNzZXJ0X2NvbnNpc3RlbnRfd2l0aF9kZWJ1Z19iYXNlKG1fcF9oZWFkLT5tX3BfcGFyZW50KTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9jb25zaXN0ZW50X3dpdGhfZGVidWdfYmFzZShjb25zdCBub2RlX3BvaW50ZXIgcF9uZCkgY29uc3QKK3sKKyAgaWYgKHBfbmQgPT0gTlVMTCkKKyAgICByZXR1cm47CisgIGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9leGlzdHMoUEJfRFNfVjJGKHBfbmQtPm1fdmFsdWUpKTsKKyAgYXNzZXJ0X2NvbnNpc3RlbnRfd2l0aF9kZWJ1Z19iYXNlKHBfbmQtPm1fcF9sZWZ0KTsKKyAgYXNzZXJ0X2NvbnNpc3RlbnRfd2l0aF9kZWJ1Z19iYXNlKHBfbmQtPm1fcF9yaWdodCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfc2l6ZSgpIGNvbnN0Cit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChyZWN1cnNpdmVfY291bnQobV9wX2hlYWQtPm1fcF9wYXJlbnQpID09IG1fc2l6ZSk7Cit9CisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2VyYXNlX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vZXJhc2VfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAwMGM3NAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2VyYXNlX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTIwIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBlcmFzZV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGJpbl9zZWFyY2hfdHJlZV8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CithY3R1YWxfZXJhc2Vfbm9kZShub2RlX3BvaW50ZXIgcF96KQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9zaXplID4gMCk7CisgIC0tbV9zaXplOworCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZXJhc2VfZXhpc3RpbmcoUEJfRFNfVjJGKHBfei0+bV92YWx1ZSkpKTsKKworICBwX3otPn5ub2RlKCk7CisKKyAgc19ub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKHBfeiwgMSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordXBkYXRlX21pbl9tYXhfZm9yX2VyYXNlZF9ub2RlKG5vZGVfcG9pbnRlciBwX3opCit7CisgIGlmIChtX3NpemUgPT0gMSkKKyAgICB7CisgICAgICBtX3BfaGVhZC0+bV9wX2xlZnQgPSBtX3BfaGVhZC0+bV9wX3JpZ2h0ID0gbV9wX2hlYWQ7CisKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKG1fcF9oZWFkLT5tX3BfbGVmdCA9PSBwX3opCisgICAgeworICAgICAgaXRlcmF0b3IgaXQocF96KTsKKworICAgICAgKytpdDsKKworICAgICAgbV9wX2hlYWQtPm1fcF9sZWZ0ID0gaXQubV9wX25kOworICAgIH0KKyAgZWxzZSBpZiAobV9wX2hlYWQtPm1fcF9yaWdodCA9PSBwX3opCisgICAgeworICAgICAgaXRlcmF0b3IgaXQocF96KTsKKworICAgICAgLS1pdDsKKworICAgICAgbV9wX2hlYWQtPm1fcF9yaWdodCA9IGl0Lm1fcF9uZDsKKyAgICB9Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitjbGVhcigpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoc3RydWN0dXJlX29ubHlfYXNzZXJ0X3ZhbGlkKCk7KQorCisgICAgY2xlYXJfaW1wKG1fcF9oZWFkLT5tX3BfcGFyZW50KTsKKworICBtX3NpemUgPSAwOworCisgIGluaXRpYWxpemUoKTsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNsZWFyKCk7KQorCisgICAgX0dMSUJDWFhfREVCVUdfT05MWShzdHJ1Y3R1cmVfb25seV9hc3NlcnRfdmFsaWQoKTspCisgICAgfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY2xlYXJfaW1wKG5vZGVfcG9pbnRlciBwX25kKQoreworICBpZiAocF9uZCA9PSBOVUxMKQorICAgIHJldHVybjsKKworICBjbGVhcl9pbXAocF9uZC0+bV9wX2xlZnQpOworCisgIGNsZWFyX2ltcChwX25kLT5tX3BfcmlnaHQpOworCisgIHBfbmQtPn5ub2RlKCk7CisKKyAgc19ub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKHBfbmQsIDEpOworfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9maW5kX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vZmluZF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTMzMDRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vZmluZF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDE4MiBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZmluZF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGJpbl9zZWFyY2hfdHJlZV8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfcG9pbnRfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2xvd2VyX2JvdW5kKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpIGNvbnN0Cit7CisgIG5vZGVfcG9pbnRlciBwX3BvdCA9IG1fcF9oZWFkOworICBub2RlX3BvaW50ZXIgcF9uZCA9IG1fcF9oZWFkLT5tX3BfcGFyZW50OworCisgIHdoaWxlIChwX25kICE9IE5VTEwpCisgICAgaWYgKENtcF9Gbjo6b3BlcmF0b3IoKSgKKwkJCSAgIFBCX0RTX1YyRihwX25kLT5tX3ZhbHVlKSwKKwkJCSAgIHJfa2V5KSkKKyAgICAgIHBfbmQgPSBwX25kLT5tX3BfcmlnaHQ7CisgICAgZWxzZQorICAgICAgeworCXBfcG90ID0gcF9uZDsKKworCXBfbmQgPSBwX25kLT5tX3BfbGVmdDsKKyAgICAgIH0KKworICByZXR1cm4gKGl0ZXJhdG9yKHBfcG90KSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnBvaW50X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6Citsb3dlcl9ib3VuZChjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5KQoreworICBub2RlX3BvaW50ZXIgcF9wb3QgPSBtX3BfaGVhZDsKKyAgbm9kZV9wb2ludGVyIHBfbmQgPSBtX3BfaGVhZC0+bV9wX3BhcmVudDsKKworICB3aGlsZSAocF9uZCAhPSBOVUxMKQorICAgIGlmIChDbXBfRm46Om9wZXJhdG9yKCkoCisJCQkgICBQQl9EU19WMkYocF9uZC0+bV92YWx1ZSksCisJCQkgICByX2tleSkpCisgICAgICBwX25kID0gcF9uZC0+bV9wX3JpZ2h0OworICAgIGVsc2UKKyAgICAgIHsKKwlwX3BvdCA9IHBfbmQ7CisKKwlwX25kID0gcF9uZC0+bV9wX2xlZnQ7CisgICAgICB9CisKKyAgcmV0dXJuIChpdGVyYXRvcihwX3BvdCkpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9wb2ludF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgordXBwZXJfYm91bmQoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSkgY29uc3QKK3sKKyAgbm9kZV9wb2ludGVyIHBfcG90ID0gbV9wX2hlYWQ7CisgIG5vZGVfcG9pbnRlciBwX25kID0gbV9wX2hlYWQtPm1fcF9wYXJlbnQ7CisKKyAgd2hpbGUgKHBfbmQgIT0gTlVMTCkKKyAgICBpZiAoQ21wX0ZuOjpvcGVyYXRvcigpKHJfa2V5LAorCQkJICAgUEJfRFNfVjJGKHBfbmQtPm1fdmFsdWUpKSkKKyAgICAgIHsKKwlwX3BvdCA9IHBfbmQsCisKKwkgIHBfbmQgPSBwX25kLT5tX3BfbGVmdDsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBwX25kID0gcF9uZC0+bV9wX3JpZ2h0OworCisgIHJldHVybiAoY29uc3RfaXRlcmF0b3IocF9wb3QpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6cG9pbnRfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3VwcGVyX2JvdW5kKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpCit7CisgIG5vZGVfcG9pbnRlciBwX3BvdCA9IG1fcF9oZWFkOworICBub2RlX3BvaW50ZXIgcF9uZCA9IG1fcF9oZWFkLT5tX3BfcGFyZW50OworCisgIHdoaWxlIChwX25kICE9IE5VTEwpCisgICAgaWYgKENtcF9Gbjo6b3BlcmF0b3IoKShyX2tleSwKKwkJCSAgIFBCX0RTX1YyRihwX25kLT5tX3ZhbHVlKSkpCisgICAgICB7CisJcF9wb3QgPSBwX25kLAorCisJICBwX25kID0gcF9uZC0+bV9wX2xlZnQ7CisgICAgICB9CisgICAgZWxzZQorICAgICAgcF9uZCA9IHBfbmQtPm1fcF9yaWdodDsKKworICByZXR1cm4gKHBvaW50X2l0ZXJhdG9yKHBfcG90KSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnBvaW50X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitmaW5kKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoc3RydWN0dXJlX29ubHlfYXNzZXJ0X3ZhbGlkKCk7KQorCisgICAgbm9kZV9wb2ludGVyIHBfcG90ID0gbV9wX2hlYWQ7CisgIG5vZGVfcG9pbnRlciBwX25kID0gbV9wX2hlYWQtPm1fcF9wYXJlbnQ7CisKKyAgd2hpbGUgKHBfbmQgIT0gTlVMTCkKKyAgICBpZiAoIUNtcF9Gbjo6b3BlcmF0b3IoKShQQl9EU19WMkYocF9uZC0+bV92YWx1ZSksIHJfa2V5KSkKKyAgICAgIHsKKwlwX3BvdCA9IHBfbmQ7CisKKwlwX25kID0gcF9uZC0+bV9wX2xlZnQ7CisgICAgICB9CisgICAgZWxzZQorICAgICAgcF9uZCA9IHBfbmQtPm1fcF9yaWdodDsKKworICByZXR1cm4gcG9pbnRfaXRlcmF0b3IoKHBfcG90ICE9IG1fcF9oZWFkJiYgIENtcF9Gbjo6b3BlcmF0b3IoKSgKKwkJCQkJCQkJIHJfa2V5LAorCQkJCQkJCQkgUEJfRFNfVjJGKHBfcG90LT5tX3ZhbHVlKSkpPworCQkJbV9wX2hlYWQgOiBwX3BvdCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X3BvaW50X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitmaW5kKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpIGNvbnN0Cit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoc3RydWN0dXJlX29ubHlfYXNzZXJ0X3ZhbGlkKCk7KQorCisgICAgbm9kZV9wb2ludGVyIHBfcG90ID0gbV9wX2hlYWQ7CisgIG5vZGVfcG9pbnRlciBwX25kID0gbV9wX2hlYWQtPm1fcF9wYXJlbnQ7CisKKyAgd2hpbGUgKHBfbmQgIT0gTlVMTCkKKyAgICBpZiAoIUNtcF9Gbjo6b3BlcmF0b3IoKShQQl9EU19WMkYocF9uZC0+bV92YWx1ZSksIHJfa2V5KSkKKyAgICAgIHsKKwlwX3BvdCA9IHBfbmQ7CisKKwlwX25kID0gcF9uZC0+bV9wX2xlZnQ7CisgICAgICB9CisgICAgZWxzZQorICAgICAgcF9uZCA9IHBfbmQtPm1fcF9yaWdodDsKKworICByZXR1cm4gY29uc3RfcG9pbnRfaXRlcmF0b3IoKHBfcG90ICE9IG1fcF9oZWFkJiYgIENtcF9Gbjo6b3BlcmF0b3IoKSgKKwkJCQkJCQkJICAgICAgIHJfa2V5LAorCQkJCQkJCQkgICAgICAgUEJfRFNfVjJGKHBfcG90LT5tX3ZhbHVlKSkpPworCQkJICAgICAgbV9wX2hlYWQgOiBwX3BvdCk7Cit9CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2luZm9fZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9pbmZvX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZTQ2MTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9pbmZvX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNjQgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGluZm9fZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBiaW5fc2VhcmNoX3RyZWVfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgYm9vbAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZW1wdHkoKSBjb25zdAoreworICByZXR1cm4gKG1fc2l6ZSA9PSAwKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitzaXplKCkgY29uc3QKK3sKKyAgcmV0dXJuIChtX3NpemUpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK21heF9zaXplKCkgY29uc3QKK3sKKyAgcmV0dXJuIChzX25vZGVfYWxsb2NhdG9yLm1heF9zaXplKCkpOworfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9pbnNlcnRfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9pbnNlcnRfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FiZjBhMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2luc2VydF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDIxMSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgaW5zZXJ0X2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYmluX3NlYXJjaF90cmVlXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHN0ZDo6cGFpcjx0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6cG9pbnRfaXRlcmF0b3IsIGJvb2w+CitQQl9EU19DTEFTU19DX0RFQzo6CitpbnNlcnRfbGVhZihjb25zdF9yZWZlcmVuY2Ugcl92YWx1ZSkKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShzdHJ1Y3R1cmVfb25seV9hc3NlcnRfdmFsaWQoKTspCisKKyAgICBpZiAobV9zaXplID09IDApCisgICAgICByZXR1cm4gKHN0ZDo6bWFrZV9wYWlyKAorCQkJICAgICBpbnNlcnRfaW1wX2VtcHR5KHJfdmFsdWUpLAorCQkJICAgICB0cnVlKSk7CisKKyAgbm9kZV9wb2ludGVyIHBfbmQgPSBtX3BfaGVhZC0+bV9wX3BhcmVudDsKKyAgbm9kZV9wb2ludGVyIHBfcG90ID0gbV9wX2hlYWQ7CisKKyAgd2hpbGUgKHBfbmQgIT0gTlVMTCkKKyAgICBpZiAoIUNtcF9Gbjo6b3BlcmF0b3IoKSgKKwkJCSAgICBQQl9EU19WMkYocF9uZC0+bV92YWx1ZSksCisJCQkgICAgUEJfRFNfVjJGKHJfdmFsdWUpKSkKKyAgICAgIHsKKwlwX3BvdCA9IHBfbmQ7CisKKwlwX25kID0gcF9uZC0+bV9wX2xlZnQ7CisgICAgICB9CisgICAgZWxzZQorICAgICAgcF9uZCA9IHBfbmQtPm1fcF9yaWdodDsKKworICBpZiAocF9wb3QgPT0gbV9wX2hlYWQpCisgICAgcmV0dXJuIChzdGQ6Om1ha2VfcGFpcigKKwkJCSAgIGluc2VydF9sZWFmX25ldyhyX3ZhbHVlLCAgbV9wX2hlYWQtPm1fcF9yaWdodCwgZmFsc2UpLAorCQkJICAgdHJ1ZSkpOworCisgIGlmICghQ21wX0ZuOjpvcGVyYXRvcigpKAorCQkJICBQQl9EU19WMkYocl92YWx1ZSksCisJCQkgIFBCX0RTX1YyRihwX3BvdC0+bV92YWx1ZSkpKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoc3RydWN0dXJlX29ubHlfYXNzZXJ0X3ZhbGlkKCk7KQorCisgICAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6Y2hlY2tfa2V5X2V4aXN0cygKKwkJCQkJCQlQQl9EU19WMkYocl92YWx1ZSkpKTsKKworICAgICAgcmV0dXJuIChzdGQ6Om1ha2VfcGFpcihwX3BvdCwgZmFsc2UpKTsKKyAgICB9CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpjaGVja19rZXlfZG9lc19ub3RfZXhpc3QoCisJCQkJCQkJICBQQl9EU19WMkYocl92YWx1ZSkpKTsKKworICBwX25kID0gcF9wb3QtPm1fcF9sZWZ0OworICBpZiAocF9uZCA9PSBOVUxMKQorICAgIHJldHVybiAoc3RkOjptYWtlX3BhaXIoCisJCQkgICBpbnNlcnRfbGVhZl9uZXcocl92YWx1ZSwgcF9wb3QsIHRydWUpLAorCQkJICAgdHJ1ZSkpOworCisgIHdoaWxlIChwX25kLT5tX3BfcmlnaHQgIT0gTlVMTCkKKyAgICBwX25kID0gcF9uZC0+bV9wX3JpZ2h0OworCisgIHJldHVybiAoc3RkOjptYWtlX3BhaXIoCisJCQkgaW5zZXJ0X2xlYWZfbmV3KHJfdmFsdWUsIHBfbmQsIGZhbHNlKSwKKwkJCSB0cnVlKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitpbnNlcnRfbGVhZl9uZXcoY29uc3RfcmVmZXJlbmNlIHJfdmFsdWUsIG5vZGVfcG9pbnRlciBwX25kLCBib29sIGxlZnRfbmQpCit7CisgIG5vZGVfcG9pbnRlciBwX25ld19uZCA9CisgICAgZ2V0X25ld19ub2RlX2Zvcl9sZWFmX2luc2VydCggICAgICAgICAgICByX3ZhbHVlLCB0cmFpdHNfYmFzZTo6bV9ub190aHJvd19jb3BpZXNfaW5kaWNhdG9yKTsKKworICBpZiAobGVmdF9uZCkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV9wX2xlZnQgPT0gTlVMTCk7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoQ21wX0ZuOjpvcGVyYXRvcigpKAorCQkJCQkgIFBCX0RTX1YyRihyX3ZhbHVlKSwKKwkJCQkJICBQQl9EU19WMkYocF9uZC0+bV92YWx1ZSkpKTsKKworICAgICAgcF9uZC0+bV9wX2xlZnQgPSBwX25ld19uZDsKKworICAgICAgaWYgKG1fcF9oZWFkLT5tX3BfbGVmdCA9PSBwX25kKQorCW1fcF9oZWFkLT5tX3BfbGVmdCA9IHBfbmV3X25kOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kLT5tX3BfcmlnaHQgPT0gTlVMTCk7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoQ21wX0ZuOjpvcGVyYXRvcigpKAorCQkJCQkgIFBCX0RTX1YyRihwX25kLT5tX3ZhbHVlKSwKKwkJCQkJICBQQl9EU19WMkYocl92YWx1ZSkpKTsKKworICAgICAgcF9uZC0+bV9wX3JpZ2h0ID0gcF9uZXdfbmQ7CisKKyAgICAgIGlmIChtX3BfaGVhZC0+bV9wX3JpZ2h0ID09IHBfbmQpCisJbV9wX2hlYWQtPm1fcF9yaWdodCA9IHBfbmV3X25kOworICAgIH0KKworICBwX25ld19uZC0+bV9wX3BhcmVudCA9IHBfbmQ7CisKKyAgcF9uZXdfbmQtPm1fcF9sZWZ0ID0gcF9uZXdfbmQtPm1fcF9yaWdodCA9IE5VTEw7CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfbm9kZV9jb25zaXN0ZW50KHBfbmQpKTsKKworICB1cGRhdGVfdG9fdG9wKHBfbmV3X25kLCAobm9kZV91cGRhdGUqICl0aGlzKTsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6Omluc2VydF9uZXcoCisJCQkJCSAgICBQQl9EU19WMkYocl92YWx1ZSkpKTsKKworICByZXR1cm4gKGl0ZXJhdG9yKHBfbmV3X25kKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitpbnNlcnRfaW1wX2VtcHR5KGNvbnN0X3JlZmVyZW5jZSByX3ZhbHVlKQoreworICBub2RlX3BvaW50ZXIgcF9uZXdfbm9kZSA9CisgICAgZ2V0X25ld19ub2RlX2Zvcl9sZWFmX2luc2VydCggICAgICAgIHJfdmFsdWUsIHRyYWl0c19iYXNlOjptX25vX3Rocm93X2NvcGllc19pbmRpY2F0b3IpOworCisgIG1fcF9oZWFkLT5tX3BfbGVmdCA9IG1fcF9oZWFkLT5tX3BfcmlnaHQgPQorICAgIG1fcF9oZWFkLT5tX3BfcGFyZW50ID0gcF9uZXdfbm9kZTsKKworICBwX25ld19ub2RlLT5tX3BfcGFyZW50ID0gbV9wX2hlYWQ7CisKKyAgcF9uZXdfbm9kZS0+bV9wX2xlZnQgPSBwX25ld19ub2RlLT5tX3BfcmlnaHQgPSBOVUxMOworCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6aW5zZXJ0X25ldygKKwkJCQkJICAgIFBCX0RTX1YyRihyX3ZhbHVlKSkpOworCisgIHVwZGF0ZV90b190b3AobV9wX2hlYWQtPm1fcF9wYXJlbnQsIChub2RlX3VwZGF0ZSogKXRoaXMpOworCisgIHJldHVybiAoaXRlcmF0b3IocF9uZXdfbm9kZSkpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9uZXdfbm9kZV9mb3JfbGVhZl9pbnNlcnQoY29uc3RfcmVmZXJlbmNlIHJfdmFsLCBmYWxzZV90eXBlKQoreworICBub2RlX3BvaW50ZXIgcF9uZXdfbmQgPSBzX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOworCisgIGNvbmRfZGVhbHRvcl90IGNvbmQocF9uZXdfbmQpOworCisgIG5ldyAoY29uc3RfY2FzdDx2b2lkKiA+KAorCQkJICBzdGF0aWNfY2FzdDxjb25zdCB2b2lkKiA+KCZwX25ld19uZC0+bV92YWx1ZSkpKQorICAgIHR5cGVuYW1lIG5vZGU6OnZhbHVlX3R5cGUocl92YWwpOworCisgIGNvbmQuc2V0X25vX2FjdGlvbigpOworCisgIHBfbmV3X25kLT5tX3BfbGVmdCA9IHBfbmV3X25kLT5tX3BfcmlnaHQgPSBOVUxMOworCisgICsrbV9zaXplOworCisgIHJldHVybiAocF9uZXdfbmQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9uZXdfbm9kZV9mb3JfbGVhZl9pbnNlcnQoY29uc3RfcmVmZXJlbmNlIHJfdmFsLCB0cnVlX3R5cGUpCit7CisgIG5vZGVfcG9pbnRlciBwX25ld19uZCA9IHNfbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7CisKKyAgbmV3IChjb25zdF9jYXN0PHZvaWQqID4oCisJCQkgIHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqID4oJnBfbmV3X25kLT5tX3ZhbHVlKSkpCisgICAgdHlwZW5hbWUgbm9kZTo6dmFsdWVfdHlwZShyX3ZhbCk7CisKKyAgcF9uZXdfbmQtPm1fcF9sZWZ0ID0gcF9uZXdfbmQtPm1fcF9yaWdodCA9IE5VTEw7CisKKyAgKyttX3NpemU7CisKKyAgcmV0dXJuIChwX25ld19uZCk7Cit9CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2l0ZXJhdG9yc19mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2l0ZXJhdG9yc19mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDdmMWIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vaXRlcmF0b3JzX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTM2IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBpdGVyYXRvcnNfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBiaW5fc2VhcmNoX3RyZWVfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitiZWdpbigpCit7CisgIHJldHVybiAoaXRlcmF0b3IobV9wX2hlYWQtPm1fcF9sZWZ0KSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitiZWdpbigpIGNvbnN0Cit7CisgIHJldHVybiAoY29uc3RfaXRlcmF0b3IobV9wX2hlYWQtPm1fcF9sZWZ0KSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitlbmQoKQoreworICByZXR1cm4gKGl0ZXJhdG9yKG1fcF9oZWFkKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitlbmQoKSBjb25zdAoreworICByZXR1cm4gKGNvbnN0X2l0ZXJhdG9yKG1fcF9oZWFkKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JiZWdpbigpIGNvbnN0Cit7CisgIHJldHVybiAoY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihtX3BfaGVhZC0+bV9wX3JpZ2h0KSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnJldmVyc2VfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JiZWdpbigpCit7CisgIHJldHVybiAocmV2ZXJzZV9pdGVyYXRvcihtX3BfaGVhZC0+bV9wX3JpZ2h0KSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnJldmVyc2VfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JlbmQoKQoreworICByZXR1cm4gKHJldmVyc2VfaXRlcmF0b3IobV9wX2hlYWQpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVuZCgpIGNvbnN0Cit7CisgIHJldHVybiAoY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihtX3BfaGVhZCkpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9ub2RlX2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6Citub2RlX2JlZ2luKCkgY29uc3QKK3sKKyAgcmV0dXJuIChjb25zdF9ub2RlX2l0ZXJhdG9yKG1fcF9oZWFkLT5tX3BfcGFyZW50KSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vZGVfYmVnaW4oKQoreworICByZXR1cm4gKG5vZGVfaXRlcmF0b3IobV9wX2hlYWQtPm1fcF9wYXJlbnQpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3Rfbm9kZV9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm9kZV9lbmQoKSBjb25zdAoreworICByZXR1cm4gKGNvbnN0X25vZGVfaXRlcmF0b3IoTlVMTCkpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6Citub2RlX2VuZCgpCit7CisgIHJldHVybiAobm9kZV9pdGVyYXRvcihOVUxMKSk7Cit9CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL25vZGVfaXRlcmF0b3JzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL25vZGVfaXRlcmF0b3JzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjVmMDJiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vbm9kZV9pdGVyYXRvcnMuaHBwCkBAIC0wLDAgKzEsMjM3IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBub2RlX2l0ZXJhdG9ycy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBiaW5fc2VhcmNoX3RyZWVfLgorICovCisKKyNpZm5kZWYgUEJfRFNfQklOX1NFQVJDSF9UUkVFX05PREVfSVRFUkFUT1JTX0hQUAorI2RlZmluZSBQQl9EU19CSU5fU0VBUkNIX1RSRUVfTk9ERV9JVEVSQVRPUlNfSFBQCisKKyNpbmNsdWRlIDxleHQvcGJfZHMvdGFnX2FuZF90cmFpdC5ocHA+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworCisjZGVmaW5lIFBCX0RTX1RSRUVfQ09OU1RfTk9ERV9JVEVSQVRPUl9DTEFTU19DX0RFQwkJCVwKKyAgICBiaW5fc2VhcmNoX3RyZWVfY29uc3Rfbm9kZV9pdF88CQkJCQlcCisJCQkJCQkJTm9kZSwJCVwKKwkJCQkJCQlDb25zdF9JdGVyYXRvciwJXAorCQkJCQkJCUl0ZXJhdG9yLAlcCisJCQkJCQkJQWxsb2NhdG9yPgorCisgICAgLy8gQ29uc3Qgbm9kZSBpdGVyYXRvci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlLAorCSAgICAgY2xhc3MgQ29uc3RfSXRlcmF0b3IsCisJICAgICBjbGFzcyBJdGVyYXRvciwKKwkgICAgIGNsYXNzIEFsbG9jYXRvcj4KKyAgICBjbGFzcyBiaW5fc2VhcmNoX3RyZWVfY29uc3Rfbm9kZV9pdF8KKyAgICB7CisgICAgcHJpdmF0ZToKKworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKyAgICAgIE5vZGU+OjpvdGhlcjo6cG9pbnRlcgorICAgICAgbm9kZV9wb2ludGVyOworCisgICAgcHVibGljOgorCisgICAgICAvLyBDYXRlZ29yeS4KKyAgICAgIHR5cGVkZWYgdHJpdmlhbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisKKyAgICAgIC8vIERpZmZlcmVuY2UgdHlwZS4KKyAgICAgIHR5cGVkZWYgdHJpdmlhbF9pdGVyYXRvcl9kaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworCisgICAgICAvLyBfX0l0ZXJhdG9yJ3MgdmFsdWUgdHlwZS4KKyAgICAgIHR5cGVkZWYgQ29uc3RfSXRlcmF0b3IgdmFsdWVfdHlwZTsKKworICAgICAgLy8gX19JdGVyYXRvcidzIHJlZmVyZW5jZSB0eXBlLgorICAgICAgdHlwZWRlZiBDb25zdF9JdGVyYXRvciByZWZlcmVuY2U7CisKKyAgICAgIC8vIF9fSXRlcmF0b3IncyBfX2NvbnN0IHJlZmVyZW5jZSB0eXBlLgorICAgICAgdHlwZWRlZiBDb25zdF9JdGVyYXRvciBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIC8vIE1ldGFkYXRhIHR5cGUuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIE5vZGU6Om1ldGFkYXRhX3R5cGUgbWV0YWRhdGFfdHlwZTsKKworICAgICAgLy8gQ29uc3QgbWV0YWRhdGEgcmVmZXJlbmNlIHR5cGUuCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKwltZXRhZGF0YV90eXBlPjo6b3RoZXI6OmNvbnN0X3JlZmVyZW5jZQorICAgICAgY29uc3RfbWV0YWRhdGFfcmVmZXJlbmNlOworCisgICAgcHVibGljOgorCisgICAgICAvLyBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICAgICAgLyoKKwlpbmxpbmUKKwliaW5fc2VhcmNoX3RyZWVfY29uc3Rfbm9kZV9pdF8oKQorICAgICAgKi8KKworICAgICAgaW5saW5lCisgICAgICBiaW5fc2VhcmNoX3RyZWVfY29uc3Rfbm9kZV9pdF8oY29uc3Qgbm9kZV9wb2ludGVyIHBfbmQgPSBOVUxMKSA6IG1fcF9uZChjb25zdF9jYXN0PG5vZGVfcG9pbnRlcj4ocF9uZCkpCisgICAgICB7IH0KKworICAgICAgLy8gQWNjZXNzLgorICAgICAgaW5saW5lIGNvbnN0X3JlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gKENvbnN0X0l0ZXJhdG9yKG1fcF9uZCkpOworICAgICAgfQorCisgICAgICAvLyBNZXRhZGF0YSBhY2Nlc3MuCisgICAgICBpbmxpbmUgY29uc3RfbWV0YWRhdGFfcmVmZXJlbmNlCisgICAgICBnZXRfbWV0YWRhdGEoKSBjb25zdAorICAgICAgeworCXJldHVybiAobV9wX25kLT5nZXRfbWV0YWRhdGEoKSk7CisgICAgICB9CisKKyAgICAgIC8vIFJldHVybnMgdGhlIF9fY29uc3Qgbm9kZSBpdGVyYXRvciBhc3NvY2lhdGVkIHdpdGggdGhlIGxlZnQgbm9kZS4KKyAgICAgIGlubGluZSBQQl9EU19UUkVFX0NPTlNUX05PREVfSVRFUkFUT1JfQ0xBU1NfQ19ERUMKKyAgICAgIGdldF9sX2NoaWxkKCkgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gKFBCX0RTX1RSRUVfQ09OU1RfTk9ERV9JVEVSQVRPUl9DTEFTU19DX0RFQyhtX3BfbmQtPm1fcF9sZWZ0KSk7CisgICAgICB9CisKKyAgICAgIC8vIFJldHVybnMgdGhlIF9fY29uc3Qgbm9kZSBpdGVyYXRvciBhc3NvY2lhdGVkIHdpdGggdGhlIHJpZ2h0IG5vZGUuCisgICAgICBpbmxpbmUgUEJfRFNfVFJFRV9DT05TVF9OT0RFX0lURVJBVE9SX0NMQVNTX0NfREVDCisgICAgICBnZXRfcl9jaGlsZCgpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIChQQl9EU19UUkVFX0NPTlNUX05PREVfSVRFUkFUT1JfQ0xBU1NfQ19ERUMobV9wX25kLT5tX3BfcmlnaHQpKTsKKyAgICAgIH0KKworICAgICAgLy8gQ29tcGFyZXMgdG8gYSBkaWZmZXJlbnQgaXRlcmF0b3Igb2JqZWN0LgorICAgICAgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgUEJfRFNfVFJFRV9DT05TVF9OT0RFX0lURVJBVE9SX0NMQVNTX0NfREVDJiBvdGhlcikgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gKG1fcF9uZCA9PSBvdGhlci5tX3BfbmQpOworICAgICAgfQorCisgICAgICAvLyBDb21wYXJlcyAobmVnYXRpdmVseSkgdG8gYSBkaWZmZXJlbnQgaXRlcmF0b3Igb2JqZWN0LgorICAgICAgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yIT0oY29uc3QgUEJfRFNfVFJFRV9DT05TVF9OT0RFX0lURVJBVE9SX0NMQVNTX0NfREVDJiBvdGhlcikgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gKG1fcF9uZCAhPSBvdGhlci5tX3BfbmQpOworICAgICAgfQorCisgICAgcHVibGljOgorICAgICAgbm9kZV9wb2ludGVyIG1fcF9uZDsKKyAgICB9OworCisjZGVmaW5lIFBCX0RTX1RSRUVfTk9ERV9JVEVSQVRPUl9DTEFTU19DX0RFQwkJCVwKKyAgICBiaW5fc2VhcmNoX3RyZWVfbm9kZV9pdF88CQkJCQlcCisJCQkJCQlOb2RlLAkJXAorCQkJCQkJQ29uc3RfSXRlcmF0b3IsIFwKKwkJCQkJCUl0ZXJhdG9yLAlcCisJCQkJCQlBbGxvY2F0b3I+CisKKyAgICAvLyBOb2RlIGl0ZXJhdG9yLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGUsCisJICAgICBjbGFzcyBDb25zdF9JdGVyYXRvciwKKwkgICAgIGNsYXNzIEl0ZXJhdG9yLAorCSAgICAgY2xhc3MgQWxsb2NhdG9yPgorICAgIGNsYXNzIGJpbl9zZWFyY2hfdHJlZV9ub2RlX2l0XyA6IAorICAgICAgcHVibGljIFBCX0RTX1RSRUVfQ09OU1RfTk9ERV9JVEVSQVRPUl9DTEFTU19DX0RFQworCisgICAgeworCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorICAgICAgTm9kZT46Om90aGVyOjpwb2ludGVyCisgICAgICBub2RlX3BvaW50ZXI7CisKKyAgICBwdWJsaWM6CisKKyAgICAgIC8vIF9fSXRlcmF0b3IncyB2YWx1ZSB0eXBlLgorICAgICAgdHlwZWRlZiBJdGVyYXRvciB2YWx1ZV90eXBlOworCisgICAgICAvLyBfX0l0ZXJhdG9yJ3MgcmVmZXJlbmNlIHR5cGUuCisgICAgICB0eXBlZGVmIEl0ZXJhdG9yIHJlZmVyZW5jZTsKKworICAgICAgLy8gX19JdGVyYXRvcidzIF9fY29uc3QgcmVmZXJlbmNlIHR5cGUuCisgICAgICB0eXBlZGVmIEl0ZXJhdG9yIGNvbnN0X3JlZmVyZW5jZTsKKworICAgIHB1YmxpYzoKKworICAgICAgLy8gRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgICAgIC8qCisJaW5saW5lCisJYmluX3NlYXJjaF90cmVlX25vZGVfaXRfKCk7CisgICAgICAqLworCisgICAgICBpbmxpbmUKKyAgICAgIGJpbl9zZWFyY2hfdHJlZV9ub2RlX2l0Xyhjb25zdCBub2RlX3BvaW50ZXIgcF9uZCA9IE5VTEwpIDogUEJfRFNfVFJFRV9DT05TVF9OT0RFX0lURVJBVE9SX0NMQVNTX0NfREVDKAorCQkJCQkJCQkJCQkJCSAgICBjb25zdF9jYXN0PG5vZGVfcG9pbnRlcj4ocF9uZCkpCisgICAgICB7IH0KKworICAgICAgLy8gQWNjZXNzLgorICAgICAgaW5saW5lIEl0ZXJhdG9yCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeworCXJldHVybiAoSXRlcmF0b3IoUEJfRFNfVFJFRV9DT05TVF9OT0RFX0lURVJBVE9SX0NMQVNTX0NfREVDOjptX3BfbmQpKTsKKyAgICAgIH0KKworICAgICAgLy8gUmV0dXJucyB0aGUgbm9kZSBpdGVyYXRvciBhc3NvY2lhdGVkIHdpdGggdGhlIGxlZnQgbm9kZS4KKyAgICAgIGlubGluZSBQQl9EU19UUkVFX05PREVfSVRFUkFUT1JfQ0xBU1NfQ19ERUMKKyAgICAgIGdldF9sX2NoaWxkKCkgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gKFBCX0RTX1RSRUVfTk9ERV9JVEVSQVRPUl9DTEFTU19DX0RFQygKKwkJCQkJCSAgICAgUEJfRFNfVFJFRV9DT05TVF9OT0RFX0lURVJBVE9SX0NMQVNTX0NfREVDOjptX3BfbmQtPm1fcF9sZWZ0KSk7CisgICAgICB9CisKKyAgICAgIC8vIFJldHVybnMgdGhlIG5vZGUgaXRlcmF0b3IgYXNzb2NpYXRlZCB3aXRoIHRoZSByaWdodCBub2RlLgorICAgICAgaW5saW5lIFBCX0RTX1RSRUVfTk9ERV9JVEVSQVRPUl9DTEFTU19DX0RFQworICAgICAgZ2V0X3JfY2hpbGQoKSBjb25zdAorICAgICAgeworCXJldHVybiAoUEJfRFNfVFJFRV9OT0RFX0lURVJBVE9SX0NMQVNTX0NfREVDKAorCQkJCQkJICAgICBQQl9EU19UUkVFX0NPTlNUX05PREVfSVRFUkFUT1JfQ0xBU1NfQ19ERUM6Om1fcF9uZC0+bV9wX3JpZ2h0KSk7CisgICAgICB9CisKKyAgICB9OworCisjdW5kZWYgUEJfRFNfVFJFRV9DT05TVF9OT0RFX0lURVJBVE9SX0NMQVNTX0NfREVDCisKKyN1bmRlZiBQQl9EU19UUkVFX05PREVfSVRFUkFUT1JfQ0xBU1NfQ19ERUMKKworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmIC8vICNpZm5kZWYgUEJfRFNfQklOX1NFQVJDSF9UUkVFX05PREVfSVRFUkFUT1JTX0hQUAorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9wb2ludF9pdGVyYXRvcnMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vcG9pbnRfaXRlcmF0b3JzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjI0OWUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vcG9pbnRfaXRlcmF0b3JzLmhwcApAQCAtMCwwICsxLDM4MSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcG9pbnRfaXRlcmF0b3JzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGJpbl9zZWFyY2hfdHJlZV8uCisgKi8KKworI2lmbmRlZiBQQl9EU19CSU5fU0VBUkNIX1RSRUVfRklORF9JVEVSQVRPUlNfSFBQCisjZGVmaW5lIFBCX0RTX0JJTl9TRUFSQ0hfVFJFRV9GSU5EX0lURVJBVE9SU19IUFAKKworI2luY2x1ZGUgPGV4dC9wYl9kcy90YWdfYW5kX3RyYWl0LmhwcD4KKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKworI2RlZmluZSBQQl9EU19UUkVFX0NPTlNUX0lUX0NfREVDCQkJCQlcCisgICAgYmluX3NlYXJjaF90cmVlX2NvbnN0X2l0XzwJCQkJCQlcCisJCQkJCQlOb2RlX1BvaW50ZXIsCQlcCisJCQkJCQlWYWx1ZV9UeXBlLAkJXAorCQkJCQkJUG9pbnRlciwJCVwKKwkJCQkJCUNvbnN0X1BvaW50ZXIsCQlcCisJCQkJCQlSZWZlcmVuY2UsCQlcCisJCQkJCQlDb25zdF9SZWZlcmVuY2UsCVwKKwkJCQkJCUlzX0ZvcndhcmRfSXRlcmF0b3IsCVwKKwkJCQkJCUFsbG9jYXRvcj4KKworI2RlZmluZSBQQl9EU19UUkVFX0NPTlNUX09ESVJfSVRfQ19ERUMJCQkJCVwKKyAgICBiaW5fc2VhcmNoX3RyZWVfY29uc3RfaXRfPAkJCQkJCVwKKwkJCQkJCU5vZGVfUG9pbnRlciwJCVwKKwkJCQkJCVZhbHVlX1R5cGUsCQlcCisJCQkJCQlQb2ludGVyLAkJXAorCQkJCQkJQ29uc3RfUG9pbnRlciwJCVwKKwkJCQkJCVJlZmVyZW5jZSwJCVwKKwkJCQkJCUNvbnN0X1JlZmVyZW5jZSwJXAorCQkJCQkJIUlzX0ZvcndhcmRfSXRlcmF0b3IsCVwKKwkJCQkJCUFsbG9jYXRvcj4KKworI2RlZmluZSBQQl9EU19UUkVFX0lUX0NfREVDCQkJCQkJXAorICAgIGJpbl9zZWFyY2hfdHJlZV9pdF88CQkJCQkJXAorCQkJCQkJTm9kZV9Qb2ludGVyLAkJXAorCQkJCQkJVmFsdWVfVHlwZSwJCVwKKwkJCQkJCVBvaW50ZXIsCQlcCisJCQkJCQlDb25zdF9Qb2ludGVyLAkJXAorCQkJCQkJUmVmZXJlbmNlLAkJXAorCQkJCQkJQ29uc3RfUmVmZXJlbmNlLAlcCisJCQkJCQlJc19Gb3J3YXJkX0l0ZXJhdG9yLAlcCisJCQkJCQlBbGxvY2F0b3I+CisKKyNkZWZpbmUgUEJfRFNfVFJFRV9PRElSX0lUX0NfREVDCQkJCQlcCisgICAgYmluX3NlYXJjaF90cmVlX2l0XzwJCQkJCQlcCisJCQkJCQkJTm9kZV9Qb2ludGVyLAlcCisJCQkJCQkJVmFsdWVfVHlwZSwJXAorCQkJCQkJCVBvaW50ZXIsCVwKKwkJCQkJCQlDb25zdF9Qb2ludGVyLAlcCisJCQkJCQkJUmVmZXJlbmNlLAlcCisJCQkJCQkJQ29uc3RfUmVmZXJlbmNlLCBcCisJCQkJCQkJIUlzX0ZvcndhcmRfSXRlcmF0b3IsIFwKKwkJCQkJCQlBbGxvY2F0b3I+CisKKyAgICAvLyBDb25zdCBpdGVyYXRvci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX1BvaW50ZXIsCisJICAgICB0eXBlbmFtZSBWYWx1ZV9UeXBlLAorCSAgICAgdHlwZW5hbWUgUG9pbnRlciwKKwkgICAgIHR5cGVuYW1lIENvbnN0X1BvaW50ZXIsCisJICAgICB0eXBlbmFtZSBSZWZlcmVuY2UsCisJICAgICB0eXBlbmFtZSBDb25zdF9SZWZlcmVuY2UsCisJICAgICBib29sIElzX0ZvcndhcmRfSXRlcmF0b3IsCisJICAgICBjbGFzcyBBbGxvY2F0b3I+CisgICAgY2xhc3MgYmluX3NlYXJjaF90cmVlX2NvbnN0X2l0XworICAgIHsKKworICAgIHB1YmxpYzoKKworICAgICAgdHlwZWRlZiBzdGQ6OmJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKKworICAgICAgdHlwZWRlZiBWYWx1ZV9UeXBlIHZhbHVlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgUG9pbnRlciBwb2ludGVyOworCisgICAgICB0eXBlZGVmIENvbnN0X1BvaW50ZXIgY29uc3RfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZiBSZWZlcmVuY2UgcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIENvbnN0X1JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CisKKyAgICBwdWJsaWM6CisKKyAgICAgIGlubGluZQorICAgICAgYmluX3NlYXJjaF90cmVlX2NvbnN0X2l0Xyhjb25zdCBOb2RlX1BvaW50ZXIgcF9uZCA9IE5VTEwpIAorICAgICAgOiBtX3BfbmQoY29uc3RfY2FzdDxOb2RlX1BvaW50ZXI+KHBfbmQpKQorICAgICAgeyB9CisKKyAgICAgIGlubGluZQorICAgICAgYmluX3NlYXJjaF90cmVlX2NvbnN0X2l0Xyhjb25zdCBQQl9EU19UUkVFX0NPTlNUX09ESVJfSVRfQ19ERUMmIG90aGVyKSAKKyAgICAgIDogbV9wX25kKG90aGVyLm1fcF9uZCkKKyAgICAgIHsgfQorCisgICAgICBpbmxpbmUKKyAgICAgIFBCX0RTX1RSRUVfQ09OU1RfSVRfQ19ERUMmIAorICAgICAgb3BlcmF0b3I9KGNvbnN0IFBCX0RTX1RSRUVfQ09OU1RfSVRfQ19ERUMmIG90aGVyKQorICAgICAgeworCW1fcF9uZCA9IG90aGVyLm1fcF9uZDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGlubGluZQorICAgICAgUEJfRFNfVFJFRV9DT05TVF9JVF9DX0RFQyYgCisgICAgICBvcGVyYXRvcj0oY29uc3QgUEJfRFNfVFJFRV9DT05TVF9PRElSX0lUX0NfREVDJiBvdGhlcikKKyAgICAgIHsKKwltX3BfbmQgPSBvdGhlci5tX3BfbmQ7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBpbmxpbmUgY29uc3RfcG9pbnRlcgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF9uZCAhPSBOVUxMKTsKKwlyZXR1cm4gJm1fcF9uZC0+bV92YWx1ZTsKKyAgICAgIH0KKworICAgICAgaW5saW5lIGNvbnN0X3JlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9wX25kICE9IE5VTEwpOworCXJldHVybiBtX3BfbmQtPm1fdmFsdWU7CisgICAgICB9CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IFBCX0RTX1RSRUVfQ09OU1RfSVRfQ19ERUMgJiBvdGhlcikgY29uc3QKKyAgICAgIHsgcmV0dXJuIG1fcF9uZCA9PSBvdGhlci5tX3BfbmQ7IH0KKworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgUEJfRFNfVFJFRV9DT05TVF9PRElSX0lUX0NfREVDICYgb3RoZXIpIGNvbnN0CisgICAgICB7IHJldHVybiBtX3BfbmQgPT0gb3RoZXIubV9wX25kOyB9CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvciE9KGNvbnN0IFBCX0RTX1RSRUVfQ09OU1RfSVRfQ19ERUMmIG90aGVyKSBjb25zdAorICAgICAgeyByZXR1cm4gbV9wX25kICE9IG90aGVyLm1fcF9uZDsgfQorCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCBQQl9EU19UUkVFX0NPTlNUX09ESVJfSVRfQ19ERUMmIG90aGVyKSBjb25zdAorICAgICAgeyByZXR1cm4gbV9wX25kICE9IG90aGVyLm1fcF9uZDsgfQorCisgICAgICBpbmxpbmUgUEJfRFNfVFJFRV9DT05TVF9JVF9DX0RFQyYgCisgICAgICBvcGVyYXRvcisrKCkKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9wX25kICE9IE5VTEwpOworCWluYyhpbnRlZ3JhbF9jb25zdGFudDxpbnQsSXNfRm9yd2FyZF9JdGVyYXRvcj4oKSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBpbmxpbmUgUEJfRFNfVFJFRV9DT05TVF9JVF9DX0RFQworICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7CisJUEJfRFNfVFJFRV9DT05TVF9JVF9DX0RFQyByZXRfaXQobV9wX25kKTsKKwlvcGVyYXRvcisrKCk7CisJcmV0dXJuIHJldF9pdDsKKyAgICAgIH0KKworICAgICAgaW5saW5lIFBCX0RTX1RSRUVfQ09OU1RfSVRfQ19ERUMmIAorICAgICAgb3BlcmF0b3ItLSgpCisgICAgICB7CisJZGVjKGludGVncmFsX2NvbnN0YW50PGludCxJc19Gb3J3YXJkX0l0ZXJhdG9yPigpKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGlubGluZSBQQl9EU19UUkVFX0NPTlNUX0lUX0NfREVDCisgICAgICBvcGVyYXRvci0tKGludCkKKyAgICAgIHsKKwlQQl9EU19UUkVFX0NPTlNUX0lUX0NfREVDIHJldF9pdChtX3BfbmQpOworCW9wZXJhdG9yLS0oKTsKKwlyZXR1cm4gcmV0X2l0OworICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgaW5saW5lIHZvaWQKKyAgICAgIGluYyhmYWxzZV90eXBlKQorICAgICAgeyBkZWModHJ1ZV90eXBlKCkpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGluYyh0cnVlX3R5cGUpCisgICAgICB7CisJaWYgKG1fcF9uZC0+c3BlY2lhbCgpJiYgCisJICAgIG1fcF9uZC0+bV9wX3BhcmVudC0+bV9wX3BhcmVudCA9PSBtX3BfbmQpCisJICB7CisJICAgIG1fcF9uZCA9IG1fcF9uZC0+bV9wX2xlZnQ7CisJICAgIHJldHVybjsKKwkgIH0KKworCWlmIChtX3BfbmQtPm1fcF9yaWdodCAhPSBOVUxMKQorCSAgeworCSAgICBtX3BfbmQgPSBtX3BfbmQtPm1fcF9yaWdodDsKKwkgICAgd2hpbGUgKG1fcF9uZC0+bV9wX2xlZnQgIT0gTlVMTCkKKwkgICAgICBtX3BfbmQgPSBtX3BfbmQtPm1fcF9sZWZ0OworCSAgICByZXR1cm47CisJICB9CisKKwlOb2RlX1BvaW50ZXIgcF95ID0gbV9wX25kLT5tX3BfcGFyZW50OworCXdoaWxlIChtX3BfbmQgPT0gcF95LT5tX3BfcmlnaHQpCisJICB7CisJICAgIG1fcF9uZCA9IHBfeTsKKwkgICAgcF95ID0gcF95LT5tX3BfcGFyZW50OworCSAgfQorCisJaWYgKG1fcF9uZC0+bV9wX3JpZ2h0ICE9IHBfeSkKKwkgIG1fcF9uZCA9IHBfeTsKKyAgICAgIH0KKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIGRlYyhmYWxzZV90eXBlKQorICAgICAgeyBpbmModHJ1ZV90eXBlKCkpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGRlYyh0cnVlX3R5cGUpCisgICAgICB7CisJaWYgKG1fcF9uZC0+c3BlY2lhbCgpICYmIG1fcF9uZC0+bV9wX3BhcmVudC0+bV9wX3BhcmVudCA9PSBtX3BfbmQpCisJICB7CisJICAgIG1fcF9uZCA9IG1fcF9uZC0+bV9wX3JpZ2h0OworCSAgICByZXR1cm47CisJICB9CisKKwlpZiAobV9wX25kLT5tX3BfbGVmdCAhPSBOVUxMKQorCSAgeworCSAgICBOb2RlX1BvaW50ZXIgcF95ID0gbV9wX25kLT5tX3BfbGVmdDsKKwkgICAgd2hpbGUgKHBfeS0+bV9wX3JpZ2h0ICE9IE5VTEwpCisJICAgICAgcF95ID0gcF95LT5tX3BfcmlnaHQ7CisJICAgIG1fcF9uZCA9IHBfeTsKKwkgICAgcmV0dXJuOworCSAgfQorCisJTm9kZV9Qb2ludGVyIHBfeSA9IG1fcF9uZC0+bV9wX3BhcmVudDsKKwl3aGlsZSAobV9wX25kID09IHBfeS0+bV9wX2xlZnQpCisJICB7CisJICAgIG1fcF9uZCA9IHBfeTsKKwkgICAgcF95ID0gcF95LT5tX3BfcGFyZW50OworCSAgfQorCWlmIChtX3BfbmQtPm1fcF9sZWZ0ICE9IHBfeSkKKwkgIG1fcF9uZCA9IHBfeTsKKyAgICAgIH0KKworICAgIHB1YmxpYzoKKyAgICAgIE5vZGVfUG9pbnRlciBtX3BfbmQ7CisgICAgfTsKKworICAgIC8vIEl0ZXJhdG9yLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGVfUG9pbnRlciwKKwkgICAgIHR5cGVuYW1lIFZhbHVlX1R5cGUsCisJICAgICB0eXBlbmFtZSBQb2ludGVyLAorCSAgICAgdHlwZW5hbWUgQ29uc3RfUG9pbnRlciwKKwkgICAgIHR5cGVuYW1lIFJlZmVyZW5jZSwKKwkgICAgIHR5cGVuYW1lIENvbnN0X1JlZmVyZW5jZSwKKwkgICAgIGJvb2wgSXNfRm9yd2FyZF9JdGVyYXRvciwKKwkgICAgIGNsYXNzIEFsbG9jYXRvcj4KKyAgICBjbGFzcyBiaW5fc2VhcmNoX3RyZWVfaXRfIDogCisgICAgICBwdWJsaWMgUEJfRFNfVFJFRV9DT05TVF9JVF9DX0RFQworCisgICAgeworCisgICAgcHVibGljOgorCisgICAgICBpbmxpbmUKKyAgICAgIGJpbl9zZWFyY2hfdHJlZV9pdF8oY29uc3QgTm9kZV9Qb2ludGVyIHBfbmQgPSBOVUxMKSAKKyAgICAgIDogUEJfRFNfVFJFRV9DT05TVF9JVF9DX0RFQygoTm9kZV9Qb2ludGVyKXBfbmQpCisgICAgICB7IH0KKworICAgICAgaW5saW5lCisgICAgICBiaW5fc2VhcmNoX3RyZWVfaXRfKGNvbnN0IFBCX0RTX1RSRUVfT0RJUl9JVF9DX0RFQyYgb3RoZXIpIAorICAgICAgOiBQQl9EU19UUkVFX0NPTlNUX0lUX0NfREVDKG90aGVyLm1fcF9uZCkKKyAgICAgIHsgfQorCisgICAgICBpbmxpbmUKKyAgICAgIFBCX0RTX1RSRUVfSVRfQ19ERUMmIAorICAgICAgb3BlcmF0b3I9KGNvbnN0IFBCX0RTX1RSRUVfSVRfQ19ERUMmIG90aGVyKQorICAgICAgeworCWJhc2VfaXRfdHlwZTo6bV9wX25kID0gb3RoZXIubV9wX25kOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgaW5saW5lCisgICAgICBQQl9EU19UUkVFX0lUX0NfREVDJiAKKyAgICAgIG9wZXJhdG9yPShjb25zdCBQQl9EU19UUkVFX09ESVJfSVRfQ19ERUMmIG90aGVyKQorICAgICAgeworCWJhc2VfaXRfdHlwZTo6bV9wX25kID0gb3RoZXIubV9wX25kOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgaW5saW5lIHR5cGVuYW1lIFBCX0RTX1RSRUVfQ09OU1RfSVRfQ19ERUM6OnBvaW50ZXIKKyAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChiYXNlX2l0X3R5cGU6Om1fcF9uZCAhPSBOVUxMKTsKKwlyZXR1cm4gJmJhc2VfaXRfdHlwZTo6bV9wX25kLT5tX3ZhbHVlOworICAgICAgfQorCisgICAgICBpbmxpbmUgdHlwZW5hbWUgUEJfRFNfVFJFRV9DT05TVF9JVF9DX0RFQzo6cmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChiYXNlX2l0X3R5cGU6Om1fcF9uZCAhPSBOVUxMKTsKKwlyZXR1cm4gYmFzZV9pdF90eXBlOjptX3BfbmQtPm1fdmFsdWU7CisgICAgICB9CisKKyAgICAgIGlubGluZSBQQl9EU19UUkVFX0lUX0NfREVDJiAKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworCVBCX0RTX1RSRUVfQ09OU1RfSVRfQ19ERUM6OiBvcGVyYXRvcisrKCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBpbmxpbmUgUEJfRFNfVFJFRV9JVF9DX0RFQworICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7CisJUEJfRFNfVFJFRV9JVF9DX0RFQyByZXRfaXQoYmFzZV9pdF90eXBlOjptX3BfbmQpOworCW9wZXJhdG9yKysoKTsKKwlyZXR1cm4gcmV0X2l0OworICAgICAgfQorCisgICAgICBpbmxpbmUgUEJfRFNfVFJFRV9JVF9DX0RFQyYgCisgICAgICBvcGVyYXRvci0tKCkKKyAgICAgIHsKKwlQQl9EU19UUkVFX0NPTlNUX0lUX0NfREVDOjogb3BlcmF0b3ItLSgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgaW5saW5lIFBCX0RTX1RSRUVfSVRfQ19ERUMKKyAgICAgIG9wZXJhdG9yLS0oaW50KQorICAgICAgeworCVBCX0RTX1RSRUVfSVRfQ19ERUMgcmV0X2l0KGJhc2VfaXRfdHlwZTo6bV9wX25kKTsKKwlvcGVyYXRvci0tKCk7CisJcmV0dXJuIHJldF9pdDsKKyAgICAgIH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIHR5cGVkZWYgUEJfRFNfVFJFRV9DT05TVF9JVF9DX0RFQyBiYXNlX2l0X3R5cGU7CisgICAgfTsKKworI3VuZGVmIFBCX0RTX1RSRUVfQ09OU1RfSVRfQ19ERUMKKyN1bmRlZiBQQl9EU19UUkVFX0NPTlNUX09ESVJfSVRfQ19ERUMKKyN1bmRlZiBQQl9EU19UUkVFX0lUX0NfREVDCisjdW5kZWYgUEJfRFNfVFJFRV9PRElSX0lUX0NfREVDCisKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL3BvbGljeV9hY2Nlc3NfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9wb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZjMwN2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9wb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNTYgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHBvbGljeV9hY2Nlc3NfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBiaW5fc2VhcmNoX3RyZWVfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitDbXBfRm4mIAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X2NtcF9mbigpCit7CisgIHJldHVybiAoKnRoaXMpOworfQorCitQQl9EU19DTEFTU19UX0RFQworY29uc3QgQ21wX0ZuJiAKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9jbXBfZm4oKSBjb25zdAoreworICByZXR1cm4gKCp0aGlzKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vcl9lcmFzZV9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL3JfZXJhc2VfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY3ZWY4NAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL3JfZXJhc2VfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxMjAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHJfZXJhc2VfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBiaW5fc2VhcmNoX3RyZWVfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYWN0dWFsX2VyYXNlX25vZGUobm9kZV9wb2ludGVyIHBfeikKK3sKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fc2l6ZSA+IDApOworICAtLW1fc2l6ZTsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGVyYXNlX2V4aXN0aW5nKFBCX0RTX1YyRihwX3otPm1fdmFsdWUpKSk7CisKKyAgcF96LT5+bm9kZSgpOworCisgIHNfbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShwX3osIDEpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3VwZGF0ZV9taW5fbWF4X2Zvcl9lcmFzZWRfbm9kZShub2RlX3BvaW50ZXIgcF96KQoreworICBpZiAobV9zaXplID09IDEpCisgICAgeworICAgICAgbV9wX2hlYWQtPm1fcF9sZWZ0ID0gbV9wX2hlYWQtPm1fcF9yaWdodCA9IG1fcF9oZWFkOworCisgICAgICByZXR1cm47CisgICAgfQorCisgIGlmIChtX3BfaGVhZC0+bV9wX2xlZnQgPT0gcF96KQorICAgIHsKKyAgICAgIGl0ZXJhdG9yIGl0KHBfeik7CisKKyAgICAgICsraXQ7CisKKyAgICAgIG1fcF9oZWFkLT5tX3BfbGVmdCA9IGl0Lm1fcF9uZDsKKyAgICB9CisgIGVsc2UgaWYgKG1fcF9oZWFkLT5tX3BfcmlnaHQgPT0gcF96KQorICAgIHsKKyAgICAgIGl0ZXJhdG9yIGl0KHBfeik7CisKKyAgICAgIC0taXQ7CisKKyAgICAgIG1fcF9oZWFkLT5tX3BfcmlnaHQgPSBpdC5tX3BfbmQ7CisgICAgfQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY2xlYXIoKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKHN0cnVjdHVyZV9vbmx5X2Fzc2VydF92YWxpZCgpOykKKworICAgIGNsZWFyX2ltcChtX3BfaGVhZC0+bV9wX3BhcmVudCk7CisKKyAgbV9zaXplID0gMDsKKworICBpbml0aWFsaXplKCk7CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpjbGVhcigpOykKKworICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoc3RydWN0dXJlX29ubHlfYXNzZXJ0X3ZhbGlkKCk7KQorICAgIH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NsZWFyX2ltcChub2RlX3BvaW50ZXIgcF9uZCkKK3sKKyAgaWYgKHBfbmQgPT0gTlVMTCkKKyAgICByZXR1cm47CisKKyAgY2xlYXJfaW1wKHBfbmQtPm1fcF9sZWZ0KTsKKworICBjbGVhcl9pbXAocF9uZC0+bV9wX3JpZ2h0KTsKKworICBwX25kLT5+Tm9kZSgpOworCisgIHNfbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShwX25kLCAxKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vcm90YXRlX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vcm90YXRlX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OTg2NTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9yb3RhdGVfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxNTYgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHJvdGF0ZV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wcyBmb3Igcm90YXRpbmcgbm9kZXMuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cityb3RhdGVfbGVmdChub2RlX3BvaW50ZXIgcF94KQoreworICBub2RlX3BvaW50ZXIgcF95ID0gcF94LT5tX3BfcmlnaHQ7CisKKyAgcF94LT5tX3BfcmlnaHQgPSBwX3ktPm1fcF9sZWZ0OworCisgIGlmIChwX3ktPm1fcF9sZWZ0ICE9IE5VTEwpCisgICAgcF95LT5tX3BfbGVmdC0+bV9wX3BhcmVudCA9IHBfeDsKKworICBwX3ktPm1fcF9wYXJlbnQgPSBwX3gtPm1fcF9wYXJlbnQ7CisKKyAgaWYgKHBfeCA9PSBtX3BfaGVhZC0+bV9wX3BhcmVudCkKKyAgICBtX3BfaGVhZC0+bV9wX3BhcmVudCA9IHBfeTsKKyAgZWxzZSBpZiAocF94ID09IHBfeC0+bV9wX3BhcmVudC0+bV9wX2xlZnQpCisgICAgcF94LT5tX3BfcGFyZW50LT5tX3BfbGVmdCA9IHBfeTsKKyAgZWxzZQorICAgIHBfeC0+bV9wX3BhcmVudC0+bV9wX3JpZ2h0ID0gcF95OworCisgIHBfeS0+bV9wX2xlZnQgPSBwX3g7CisgIHBfeC0+bV9wX3BhcmVudCA9IHBfeTsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF9ub2RlX2NvbnNpc3RlbnQocF94KTspCisgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfbm9kZV9jb25zaXN0ZW50KHBfeSk7KQorCisgICAgYXBwbHlfdXBkYXRlKHBfeCwgKG5vZGVfdXBkYXRlKiApdGhpcyk7CisgIGFwcGx5X3VwZGF0ZShwX3gtPm1fcF9wYXJlbnQsIChub2RlX3VwZGF0ZSogKXRoaXMpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JvdGF0ZV9yaWdodChub2RlX3BvaW50ZXIgcF94KQoreworICBub2RlX3BvaW50ZXIgcF95ID0gcF94LT5tX3BfbGVmdDsKKworICBwX3gtPm1fcF9sZWZ0ID0gcF95LT5tX3BfcmlnaHQ7CisKKyAgaWYgKHBfeS0+bV9wX3JpZ2h0ICE9IE5VTEwpCisgICAgcF95LT5tX3BfcmlnaHQtPm1fcF9wYXJlbnQgPSBwX3g7CisKKyAgcF95LT5tX3BfcGFyZW50ID0gcF94LT5tX3BfcGFyZW50OworCisgIGlmIChwX3ggPT0gbV9wX2hlYWQtPm1fcF9wYXJlbnQpCisgICAgbV9wX2hlYWQtPm1fcF9wYXJlbnQgPSBwX3k7CisgIGVsc2UgaWYgKHBfeCA9PSBwX3gtPm1fcF9wYXJlbnQtPm1fcF9yaWdodCkKKyAgICBwX3gtPm1fcF9wYXJlbnQtPm1fcF9yaWdodCA9IHBfeTsKKyAgZWxzZQorICAgIHBfeC0+bV9wX3BhcmVudC0+bV9wX2xlZnQgPSBwX3k7CisKKyAgcF95LT5tX3BfcmlnaHQgPSBwX3g7CisgIHBfeC0+bV9wX3BhcmVudCA9IHBfeTsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF9ub2RlX2NvbnNpc3RlbnQocF94KTspCisgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfbm9kZV9jb25zaXN0ZW50KHBfeSk7KQorCisgICAgYXBwbHlfdXBkYXRlKHBfeCwgKG5vZGVfdXBkYXRlKiApdGhpcyk7CisgIGFwcGx5X3VwZGF0ZShwX3gtPm1fcF9wYXJlbnQsIChub2RlX3VwZGF0ZSogKXRoaXMpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JvdGF0ZV9wYXJlbnQobm9kZV9wb2ludGVyIHBfbmQpCit7CisgIG5vZGVfcG9pbnRlciBwX3BhcmVudCA9IHBfbmQtPm1fcF9wYXJlbnQ7CisKKyAgaWYgKHBfbmQgPT0gcF9wYXJlbnQtPm1fcF9sZWZ0KQorICAgIHJvdGF0ZV9yaWdodChwX3BhcmVudCk7CisgIGVsc2UKKyAgICByb3RhdGVfbGVmdChwX3BhcmVudCk7CisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfcGFyZW50LT5tX3BfcGFyZW50ID0gcF9uZCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kLT5tX3BfbGVmdCA9PSBwX3BhcmVudCB8fAorCQkgICBwX25kLT5tX3BfcmlnaHQgPT0gcF9wYXJlbnQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2FwcGx5X3VwZGF0ZShub2RlX3BvaW50ZXIgLypwX25kKi8sIG51bGxfbm9kZV91cGRhdGVfcG9pbnRlciAvKnBfdXBkYXRlKi8pCit7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIE5vZGVfVXBkYXRlXz4KK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CithcHBseV91cGRhdGUobm9kZV9wb2ludGVyIHBfbmQsIE5vZGVfVXBkYXRlXyogIC8qcF91cGRhdGUqLykKK3sKKyAgbm9kZV91cGRhdGU6Om9wZXJhdG9yKCkoCisJCQkgICBub2RlX2l0ZXJhdG9yKHBfbmQpLAorCQkJICAgY29uc3Rfbm9kZV9pdGVyYXRvcihzdGF0aWNfY2FzdDxub2RlX3BvaW50ZXI+KE5VTEwpKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX1VwZGF0ZV8+CitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordXBkYXRlX3RvX3RvcChub2RlX3BvaW50ZXIgcF9uZCwgTm9kZV9VcGRhdGVfKiBwX3VwZGF0ZSkKK3sKKyAgd2hpbGUgKHBfbmQgIT0gbV9wX2hlYWQpCisgICAgeworICAgICAgYXBwbHlfdXBkYXRlKHBfbmQsIHBfdXBkYXRlKTsKKworICAgICAgcF9uZCA9IHBfbmQtPm1fcF9wYXJlbnQ7CisgICAgfQorfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3VwZGF0ZV90b190b3Aobm9kZV9wb2ludGVyIC8qcF9uZCovLCBudWxsX25vZGVfdXBkYXRlX3BvaW50ZXIgLypwX3VwZGF0ZSovKQoreyB9CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9zcGxpdF9qb2luX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMmJkNmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9zcGxpdF9qb2luX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTQ2IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBzcGxpdF9qb2luX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYmluX3NlYXJjaF90cmVlXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworYm9vbAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogoram9pbl9wcmVwKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKCk7KQorICBpZiAob3RoZXIubV9zaXplID09IDApCisgICAgcmV0dXJuIGZhbHNlOworCisgIGlmIChtX3NpemUgPT0gMCkKKyAgICB7CisgICAgICB2YWx1ZV9zd2FwKG90aGVyKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgY29uc3QgYm9vbCBncmVhdGVyID0gQ21wX0ZuOjpvcGVyYXRvcigpKFBCX0RTX1YyRihtX3BfaGVhZC0+bV9wX3JpZ2h0LT5tX3ZhbHVlKSwgUEJfRFNfVjJGKG90aGVyLm1fcF9oZWFkLT5tX3BfbGVmdC0+bV92YWx1ZSkpOworCisgIGNvbnN0IGJvb2wgbGVzc2VyID0gQ21wX0ZuOjpvcGVyYXRvcigpKFBCX0RTX1YyRihvdGhlci5tX3BfaGVhZC0+bV9wX3JpZ2h0LT5tX3ZhbHVlKSwgUEJfRFNfVjJGKG1fcF9oZWFkLT5tX3BfbGVmdC0+bV92YWx1ZSkpOworCisgIGlmICghZ3JlYXRlciAmJiAhbGVzc2VyKQorICAgIF9fdGhyb3dfam9pbl9lcnJvcigpOworCisgIGlmIChsZXNzZXIpCisgICAgdmFsdWVfc3dhcChvdGhlcik7CisKKyAgbV9zaXplICs9IG90aGVyLm1fc2l6ZTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpqb2luKG90aGVyKTspCisgIHJldHVybiB0cnVlOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogoram9pbl9maW5pc2goUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBpbml0aWFsaXplX21pbl9tYXgoKTsKKyAgb3RoZXIuaW5pdGlhbGl6ZSgpOworfQorCitQQl9EU19DTEFTU19UX0RFQworYm9vbAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3BsaXRfcHJlcChjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5LCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpOykKKyAgb3RoZXIuY2xlYXIoKTsKKworICBpZiAobV9zaXplID09IDApCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpOykKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgaWYgKENtcF9Gbjo6b3BlcmF0b3IoKShyX2tleSwgUEJfRFNfVjJGKG1fcF9oZWFkLT5tX3BfbGVmdC0+bV92YWx1ZSkpKQorICAgIHsKKyAgICAgIHZhbHVlX3N3YXAob3RoZXIpOworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpOykKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgaWYgKCFDbXBfRm46Om9wZXJhdG9yKCkocl9rZXksIFBCX0RTX1YyRihtX3BfaGVhZC0+bV9wX3JpZ2h0LT5tX3ZhbHVlKSkpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpOykKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgaWYgKG1fc2l6ZSA9PSAxKQorICAgIHsKKyAgICAgIHZhbHVlX3N3YXAob3RoZXIpOworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpOykKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpzcGxpdChyX2tleSwoQ21wX0ZuJiApKCp0aGlzKSwgb3RoZXIpOykKKyAgcmV0dXJuIHRydWU7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitzcGxpdF9maW5pc2goUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBvdGhlci5pbml0aWFsaXplX21pbl9tYXgoKTsKKyAgb3RoZXIubV9zaXplID0gc3RkOjpkaXN0YW5jZShvdGhlci5iZWdpbigpLCBvdGhlci5lbmQoKSk7CisgIG1fc2l6ZSAtPSBvdGhlci5tX3NpemU7CisgIGluaXRpYWxpemVfbWluX21heCgpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CityZWN1cnNpdmVfY291bnQobm9kZV9wb2ludGVyIHApIGNvbnN0Cit7CisgIGlmIChwID09IE5VTEwpCisgICAgcmV0dXJuIDA7CisgIHJldHVybiAxICsgcmVjdXJzaXZlX2NvdW50KHAtPm1fcF9sZWZ0KSArIHJlY3Vyc2l2ZV9jb3VudChwLT5tX3BfcmlnaHQpOworfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy90cmFpdHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vdHJhaXRzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGMzMGMzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vdHJhaXRzLmhwcApAQCAtMCwwICsxLDI1MCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgdHJhaXRzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gZm9yIGJpbl9zZWFyY2hfdHJlZV8uCisgKi8KKworI2lmbmRlZiBQQl9EU19CSU5fU0VBUkNIX1RSRUVfTk9ERV9BTkRfSVRfVFJBSVRTX0hQUAorI2RlZmluZSBQQl9EU19CSU5fU0VBUkNIX1RSRUVfTk9ERV9BTkRfSVRfVFJBSVRTX0hQUAorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL3BvaW50X2l0ZXJhdG9ycy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL25vZGVfaXRlcmF0b3JzLmhwcD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksCisJICAgICB0eXBlbmFtZSBNYXBwZWQsCisJICAgICBjbGFzcyBDbXBfRm4sCisJICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25zdF9Ob2RlX0l0ZXJhdG9yLAorCQkgICAgICBjbGFzcyBOb2RlX0l0ZXJhdG9yLAorCQkgICAgICBjbGFzcyBDbXBfRm4sCisJCSAgICAgIGNsYXNzIEFsbG9jYXRvcj4KKyAgICBjbGFzcyBOb2RlX1VwZGF0ZSwKKwkgICAgIGNsYXNzIE5vZGUsCisJICAgICBjbGFzcyBBbGxvY2F0b3I+CisgICAgc3RydWN0IGJpbl9zZWFyY2hfdHJlZV90cmFpdHMKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVzX3RyYWl0czwKKyAgICAgIEtleSwKKyAgICAgIE1hcHBlZCwKKyAgICAgIEFsbG9jYXRvciwKKyAgICAgIGZhbHNlPgorICAgICAgdHlwZV90cmFpdHM7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIE5vZGUgbm9kZTsKKworICAgICAgdHlwZWRlZgorICAgICAgYmluX3NlYXJjaF90cmVlX2NvbnN0X2l0XzwKKwl0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKwlub2RlPjo6b3RoZXI6OnBvaW50ZXIsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OnZhbHVlX3R5cGUsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OnBvaW50ZXIsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OmNvbnN0X3BvaW50ZXIsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OnJlZmVyZW5jZSwKKwl0eXBlbmFtZSB0eXBlX3RyYWl0czo6Y29uc3RfcmVmZXJlbmNlLAorCXRydWUsCisJQWxsb2NhdG9yPgorICAgICAgY29uc3RfcG9pbnRfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIGJpbl9zZWFyY2hfdHJlZV9pdF88CisJdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8CisJbm9kZT46Om90aGVyOjpwb2ludGVyLAorCXR5cGVuYW1lIHR5cGVfdHJhaXRzOjp2YWx1ZV90eXBlLAorCXR5cGVuYW1lIHR5cGVfdHJhaXRzOjpwb2ludGVyLAorCXR5cGVuYW1lIHR5cGVfdHJhaXRzOjpjb25zdF9wb2ludGVyLAorCXR5cGVuYW1lIHR5cGVfdHJhaXRzOjpyZWZlcmVuY2UsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OmNvbnN0X3JlZmVyZW5jZSwKKwl0cnVlLAorCUFsbG9jYXRvcj4KKyAgICAgIHBvaW50X2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmCisgICAgICBiaW5fc2VhcmNoX3RyZWVfY29uc3RfaXRfPAorCXR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCW5vZGU+OjpvdGhlcjo6cG9pbnRlciwKKwl0eXBlbmFtZSB0eXBlX3RyYWl0czo6dmFsdWVfdHlwZSwKKwl0eXBlbmFtZSB0eXBlX3RyYWl0czo6cG9pbnRlciwKKwl0eXBlbmFtZSB0eXBlX3RyYWl0czo6Y29uc3RfcG9pbnRlciwKKwl0eXBlbmFtZSB0eXBlX3RyYWl0czo6cmVmZXJlbmNlLAorCXR5cGVuYW1lIHR5cGVfdHJhaXRzOjpjb25zdF9yZWZlcmVuY2UsCisJZmFsc2UsCisJQWxsb2NhdG9yPgorICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZgorICAgICAgYmluX3NlYXJjaF90cmVlX2l0XzwKKwl0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKwlub2RlPjo6b3RoZXI6OnBvaW50ZXIsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OnZhbHVlX3R5cGUsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OnBvaW50ZXIsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OmNvbnN0X3BvaW50ZXIsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OnJlZmVyZW5jZSwKKwl0eXBlbmFtZSB0eXBlX3RyYWl0czo6Y29uc3RfcmVmZXJlbmNlLAorCWZhbHNlLAorCUFsbG9jYXRvcj4KKyAgICAgIHJldmVyc2VfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIGJpbl9zZWFyY2hfdHJlZV9jb25zdF9ub2RlX2l0XzwKKwlOb2RlLAorCWNvbnN0X3BvaW50X2l0ZXJhdG9yLAorCXBvaW50X2l0ZXJhdG9yLAorCUFsbG9jYXRvcj4KKyAgICAgIGNvbnN0X25vZGVfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIGJpbl9zZWFyY2hfdHJlZV9ub2RlX2l0XzwKKwlOb2RlLAorCWNvbnN0X3BvaW50X2l0ZXJhdG9yLAorCXBvaW50X2l0ZXJhdG9yLAorCUFsbG9jYXRvcj4KKyAgICAgIG5vZGVfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIE5vZGVfVXBkYXRlPAorCWNvbnN0X25vZGVfaXRlcmF0b3IsCisJbm9kZV9pdGVyYXRvciwKKwlDbXBfRm4sCisJQWxsb2NhdG9yPgorICAgICAgbm9kZV91cGRhdGU7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIF9fZ251X3BiZHM6Om51bGxfdHJlZV9ub2RlX3VwZGF0ZTwKKwljb25zdF9ub2RlX2l0ZXJhdG9yLAorCW5vZGVfaXRlcmF0b3IsCisJQ21wX0ZuLAorCUFsbG9jYXRvcj4qIAorICAgICAgbnVsbF9ub2RlX3VwZGF0ZV9wb2ludGVyOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksCisJICAgICBjbGFzcyBDbXBfRm4sCisJICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25zdF9Ob2RlX0l0ZXJhdG9yLAorCQkgICAgICBjbGFzcyBOb2RlX0l0ZXJhdG9yLAorCQkgICAgICBjbGFzcyBDbXBfRm4sCisJCSAgICAgIGNsYXNzIEFsbG9jYXRvcj4KKyAgICBjbGFzcyBOb2RlX1VwZGF0ZSwKKwkgICAgIGNsYXNzIE5vZGUsCisJICAgICBjbGFzcyBBbGxvY2F0b3I+CisgICAgc3RydWN0IGJpbl9zZWFyY2hfdHJlZV90cmFpdHM8CisgICAgICBLZXksCisgICAgICBudWxsX21hcHBlZF90eXBlLAorICAgICAgQ21wX0ZuLAorICAgICAgTm9kZV9VcGRhdGUsCisgICAgICBOb2RlLAorICAgICAgQWxsb2NhdG9yPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZgorICAgICAgdHlwZXNfdHJhaXRzPAorICAgICAgS2V5LAorICAgICAgbnVsbF9tYXBwZWRfdHlwZSwKKyAgICAgIEFsbG9jYXRvciwKKyAgICAgIGZhbHNlPgorICAgICAgdHlwZV90cmFpdHM7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIE5vZGUgbm9kZTsKKworICAgICAgdHlwZWRlZgorICAgICAgYmluX3NlYXJjaF90cmVlX2NvbnN0X2l0XzwKKwl0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKwlub2RlPjo6b3RoZXI6OnBvaW50ZXIsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OnZhbHVlX3R5cGUsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OnBvaW50ZXIsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OmNvbnN0X3BvaW50ZXIsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OnJlZmVyZW5jZSwKKwl0eXBlbmFtZSB0eXBlX3RyYWl0czo6Y29uc3RfcmVmZXJlbmNlLAorCXRydWUsCisJQWxsb2NhdG9yPgorICAgICAgY29uc3RfcG9pbnRfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgY29uc3RfcG9pbnRfaXRlcmF0b3IgcG9pbnRfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIGJpbl9zZWFyY2hfdHJlZV9jb25zdF9pdF88CisJdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8CisJbm9kZT46Om90aGVyOjpwb2ludGVyLAorCXR5cGVuYW1lIHR5cGVfdHJhaXRzOjp2YWx1ZV90eXBlLAorCXR5cGVuYW1lIHR5cGVfdHJhaXRzOjpwb2ludGVyLAorCXR5cGVuYW1lIHR5cGVfdHJhaXRzOjpjb25zdF9wb2ludGVyLAorCXR5cGVuYW1lIHR5cGVfdHJhaXRzOjpyZWZlcmVuY2UsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OmNvbnN0X3JlZmVyZW5jZSwKKwlmYWxzZSwKKwlBbGxvY2F0b3I+CisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZgorICAgICAgYmluX3NlYXJjaF90cmVlX2NvbnN0X25vZGVfaXRfPAorCU5vZGUsCisJY29uc3RfcG9pbnRfaXRlcmF0b3IsCisJcG9pbnRfaXRlcmF0b3IsCisJQWxsb2NhdG9yPgorICAgICAgY29uc3Rfbm9kZV9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiBjb25zdF9ub2RlX2l0ZXJhdG9yIG5vZGVfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIE5vZGVfVXBkYXRlPAorCWNvbnN0X25vZGVfaXRlcmF0b3IsCisJbm9kZV9pdGVyYXRvciwKKwlDbXBfRm4sCisJQWxsb2NhdG9yPgorICAgICAgbm9kZV91cGRhdGU7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIF9fZ251X3BiZHM6Om51bGxfdHJlZV9ub2RlX3VwZGF0ZTwKKwljb25zdF9ub2RlX2l0ZXJhdG9yLAorCW5vZGVfaXRlcmF0b3IsCisJQ21wX0ZuLAorCUFsbG9jYXRvcj4qIAorICAgICAgbnVsbF9ub2RlX3VwZGF0ZV9wb2ludGVyOworICAgIH07CisKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAvLyAjaWZuZGVmIFBCX0RTX0JJTl9TRUFSQ0hfVFJFRV9OT0RFX0FORF9JVF9UUkFJVFNfSFBQCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2JpbmFyeV9oZWFwXy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2JpbmFyeV9oZWFwXy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc2Y2JhMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vYmluYXJ5X2hlYXBfLmhwcApAQCAtMCwwICsxLDM1NyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgYmluYXJ5X2hlYXBfLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGEgYmluYXJ5IGhlYXAuCisgKi8KKworI2lmbmRlZiBQQl9EU19CSU5BUllfSEVBUF9IUFAKKyNkZWZpbmUgUEJfRFNfQklOQVJZX0hFQVBfSFBQCisKKy8qCisgKiBCYXNlZCBvbiBDTFJTLgorICovCisKKyNpbmNsdWRlIDxxdWV1ZT4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jb25kX2RlYWx0b3IuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvY29uZF9kZWFsdG9yLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3R5cGVfdXRpbHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2VudHJ5X2NtcC5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vZW50cnlfcHJlZC5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vcmVzaXplX3BvbGljeS5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vY29uc3RfcG9pbnRfaXRlcmF0b3IuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2NvbnN0X2l0ZXJhdG9yLmhwcD4KKyNpZmRlZiBQQl9EU19CSU5BUllfSEVBUF9UUkFDRV8KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNlbmRpZgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHlwZV91dGlscy5ocHA+CisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZV9UeXBlLCBjbGFzcyBDbXBfRm4sIGNsYXNzIEFsbG9jYXRvcj4KKworI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBcCisgICAgYmluYXJ5X2hlYXBfPFZhbHVlX1R5cGUsIENtcF9GbiwgQWxsb2NhdG9yPgorCisjZGVmaW5lIFBCX0RTX0VOVFJZX0NNUF9ERUMgXAorICAgIGVudHJ5X2NtcDxWYWx1ZV9UeXBlLCBDbXBfRm4sIGlzX3NpbXBsZTxWYWx1ZV9UeXBlPjo6dmFsdWUsIEFsbG9jYXRvcj46OnR5cGUKKworI2RlZmluZSBQQl9EU19SRVNJWkVfUE9MSUNZX0RFQwlcCisgICAgX19nbnVfcGJkczo6ZGV0YWlsOjpyZXNpemVfcG9saWN5PHR5cGVuYW1lIEFsbG9jYXRvcjo6c2l6ZV90eXBlPgorCisgICAgLyoqCisgICAgICogY2xhc3MgZGVzY3JpcHRpb24gPSAiQmFzZSBjbGFzcyBmb3Igc29tZSB0eXBlcyBvZiBoM2FwJCI+CisgICAgICoqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlX1R5cGUsIGNsYXNzIENtcF9GbiwgY2xhc3MgQWxsb2NhdG9yPgorICAgIGNsYXNzIGJpbmFyeV9oZWFwXyA6IHB1YmxpYyBQQl9EU19FTlRSWV9DTVBfREVDLAorCQkJIHB1YmxpYyBQQl9EU19SRVNJWkVfUE9MSUNZX0RFQworICAgIHsKKworICAgIHByaXZhdGU6CisgICAgICBlbnVtCisJeworCSAgc2ltcGxlX3ZhbHVlID0gaXNfc2ltcGxlPFZhbHVlX1R5cGU+Ojp2YWx1ZQorCX07CisKKyAgICAgIHR5cGVkZWYgaW50ZWdyYWxfY29uc3RhbnQ8aW50LCBzaW1wbGVfdmFsdWU+IG5vX3Rocm93X2NvcGllc190OworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKwlWYWx1ZV9UeXBlPjo6b3RoZXIKKyAgICAgIHZhbHVlX2FsbG9jYXRvcjsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgX19jb25kaXRpb25hbF90eXBlPAorCXNpbXBsZV92YWx1ZSwKKwlWYWx1ZV9UeXBlLAorCXR5cGVuYW1lIHZhbHVlX2FsbG9jYXRvcjo6cG9pbnRlcj46Ol9fdHlwZQorICAgICAgZW50cnk7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCWVudHJ5Pjo6b3RoZXIKKyAgICAgIGVudHJ5X2FsbG9jYXRvcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBlbnRyeV9hbGxvY2F0b3I6OnBvaW50ZXIgZW50cnlfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBQQl9EU19FTlRSWV9DTVBfREVDIGVudHJ5X2NtcDsKKworICAgICAgdHlwZWRlZiBQQl9EU19SRVNJWkVfUE9MSUNZX0RFQyByZXNpemVfcG9saWN5OworCisgICAgICB0eXBlZGVmCisgICAgICBjb25kX2RlYWx0b3I8CisJVmFsdWVfVHlwZSwKKwlBbGxvY2F0b3I+CisgICAgICBjb25kX2RlYWx0b3JfdDsKKworICAgIHB1YmxpYzoKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnNpemVfdHlwZSBzaXplX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworCisgICAgICB0eXBlZGVmIFZhbHVlX1R5cGUgdmFsdWVfdHlwZTsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8CisJdmFsdWVfdHlwZT46Om90aGVyOjpwb2ludGVyCisgICAgICBwb2ludGVyOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKwl2YWx1ZV90eXBlPjo6b3RoZXI6OmNvbnN0X3BvaW50ZXIKKyAgICAgIGNvbnN0X3BvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCXZhbHVlX3R5cGU+OjpvdGhlcjo6cmVmZXJlbmNlCisgICAgICByZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCXZhbHVlX3R5cGU+OjpvdGhlcjo6Y29uc3RfcmVmZXJlbmNlCisgICAgICBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIGJpbmFyeV9oZWFwX2NvbnN0X3BvaW50X2l0ZXJhdG9yXzwKKwl2YWx1ZV90eXBlLAorCWVudHJ5LAorCXNpbXBsZV92YWx1ZSwKKwlBbGxvY2F0b3I+CisgICAgICBjb25zdF9wb2ludF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiBjb25zdF9wb2ludF9pdGVyYXRvciBwb2ludF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZgorICAgICAgYmluYXJ5X2hlYXBfY29uc3RfaXRlcmF0b3JfPAorCXZhbHVlX3R5cGUsCisJZW50cnksCisJc2ltcGxlX3ZhbHVlLAorCUFsbG9jYXRvcj4KKyAgICAgIGNvbnN0X2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIGNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIENtcF9GbiBjbXBfZm47CisKKyAgICAgIHR5cGVkZWYgQWxsb2NhdG9yIGFsbG9jYXRvcl90eXBlOworCisgICAgcHVibGljOgorCisgICAgICBiaW5hcnlfaGVhcF8oKTsKKworICAgICAgYmluYXJ5X2hlYXBfKGNvbnN0IENtcF9GbiYgcl9jbXBfZm4pOworCisgICAgICBiaW5hcnlfaGVhcF8oY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKTsKKworICAgICAgdm9pZAorICAgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpOworCisgICAgICB+YmluYXJ5X2hlYXBfKCk7CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBlbXB0eSgpIGNvbnN0OworCisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3Q7CisKKyAgICAgIENtcF9GbiYgCisgICAgICBnZXRfY21wX2ZuKCk7CisKKyAgICAgIGNvbnN0IENtcF9GbiYgCisgICAgICBnZXRfY21wX2ZuKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBwb2ludF9pdGVyYXRvcgorICAgICAgcHVzaChjb25zdF9yZWZlcmVuY2Ugcl92YWwpOworCisgICAgICB2b2lkCisgICAgICBtb2RpZnkocG9pbnRfaXRlcmF0b3IgaXQsIGNvbnN0X3JlZmVyZW5jZSByX25ld192YWwpOworCisgICAgICBpbmxpbmUgY29uc3RfcmVmZXJlbmNlCisgICAgICB0b3AoKSBjb25zdDsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIHBvcCgpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgZXJhc2UocG9pbnRfaXRlcmF0b3IgaXQpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkPgorICAgICAgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorICAgICAgZXJhc2VfaWYoUHJlZCBwcmVkKTsKKworICAgICAgaW5saW5lIHN0YXRpYyB2b2lkCisgICAgICBlcmFzZV9hdChlbnRyeV9wb2ludGVyIGFfZW50cmllcywgc2l6ZV90eXBlIHNpemUsIGZhbHNlX3R5cGUpOworCisgICAgICBpbmxpbmUgc3RhdGljIHZvaWQKKyAgICAgIGVyYXNlX2F0KGVudHJ5X3BvaW50ZXIgYV9lbnRyaWVzLCBzaXplX3R5cGUgc2l6ZSwgdHJ1ZV90eXBlKTsKKworICAgICAgaW5saW5lIGl0ZXJhdG9yCisgICAgICBiZWdpbigpOworCisgICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBpdGVyYXRvcgorICAgICAgZW5kKCk7CisKKyAgICAgIGlubGluZSBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3Q7CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFByZWQ+CisgICAgICB2b2lkCisgICAgICBzcGxpdChQcmVkIHByZWQsIFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcik7CisKKyAgICAgIHZvaWQKKyAgICAgIGpvaW4oUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKTsKKworI2lmZGVmIFBCX0RTX0JJTkFSWV9IRUFQX1RSQUNFXworICAgICAgdm9pZAorICAgICAgdHJhY2UoKSBjb25zdDsKKyNlbmRpZiAKKworICAgIHByb3RlY3RlZDoKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXQ+CisgICAgICB2b2lkCisgICAgICBjb3B5X2Zyb21fcmFuZ2UoSXQgZmlyc3RfaXQsIEl0IGxhc3RfaXQpOworCisgICAgcHJpdmF0ZToKKworICAgICAgdm9pZAorICAgICAgdmFsdWVfc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgaW5zZXJ0X3ZhbHVlKGNvbnN0X3JlZmVyZW5jZSByX3ZhbCwgZmFsc2VfdHlwZSk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBpbnNlcnRfdmFsdWUodmFsdWVfdHlwZSB2YWwsIHRydWVfdHlwZSk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBpbnNlcnRfZW50cnkoZW50cnkgZSk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICByZXNpemVfZm9yX2luc2VydF9pZl9uZWVkZWQoKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIHN3YXBfdmFsdWVfaW1wKGVudHJ5X3BvaW50ZXIgcF9lLCB2YWx1ZV90eXBlIG5ld192YWwsIHRydWVfdHlwZSk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBzd2FwX3ZhbHVlX2ltcChlbnRyeV9wb2ludGVyIHBfZSwgY29uc3RfcmVmZXJlbmNlIHJfbmV3X3ZhbCwgZmFsc2VfdHlwZSk7CisKKyAgICAgIHZvaWQKKyAgICAgIGZpeChlbnRyeV9wb2ludGVyIHBfZSk7CisKKyAgICAgIGlubGluZSBjb25zdF9yZWZlcmVuY2UKKyAgICAgIHRvcF9pbXAodHJ1ZV90eXBlKSBjb25zdDsKKworICAgICAgaW5saW5lIGNvbnN0X3JlZmVyZW5jZQorICAgICAgdG9wX2ltcChmYWxzZV90eXBlKSBjb25zdDsKKworICAgICAgaW5saW5lIHN0YXRpYyBzaXplX3R5cGUKKyAgICAgIGxlZnRfY2hpbGQoc2l6ZV90eXBlIGkpOworCisgICAgICBpbmxpbmUgc3RhdGljIHNpemVfdHlwZQorICAgICAgcmlnaHRfY2hpbGQoc2l6ZV90eXBlIGkpOworCisgICAgICBpbmxpbmUgc3RhdGljIHNpemVfdHlwZQorICAgICAgcGFyZW50KHNpemVfdHlwZSBpKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIHJlc2l6ZV9mb3JfZXJhc2VfaWZfbmVlZGVkKCk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFByZWQ+CisgICAgICBzaXplX3R5cGUKKyAgICAgIHBhcnRpdGlvbihQcmVkIHByZWQpOworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF92YWxpZCgpIGNvbnN0OworI2VuZGlmIAorCisjaWZkZWYgUEJfRFNfQklOQVJZX0hFQVBfVFJBQ0VfCisgICAgICB2b2lkCisgICAgICB0cmFjZV9lbnRyeShjb25zdCBlbnRyeSYgcl9lLCBmYWxzZV90eXBlKSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgdHJhY2VfZW50cnkoY29uc3QgZW50cnkmIHJfZSwgdHJ1ZV90eXBlKSBjb25zdDsKKyNlbmRpZiAKKworICAgIHByaXZhdGU6CisgICAgICBzdGF0aWMgZW50cnlfYWxsb2NhdG9yIHNfZW50cnlfYWxsb2NhdG9yOworCisgICAgICBzdGF0aWMgdmFsdWVfYWxsb2NhdG9yIHNfdmFsdWVfYWxsb2NhdG9yOworCisgICAgICBzdGF0aWMgbm9fdGhyb3dfY29waWVzX3Qgc19ub190aHJvd19jb3BpZXNfaW5kOworCisgICAgICBzaXplX3R5cGUgbV9zaXplOworCisgICAgICBzaXplX3R5cGUgbV9hY3R1YWxfc2l6ZTsKKworICAgICAgZW50cnlfcG9pbnRlciBtX2FfZW50cmllczsKKyAgICB9OworCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2l0ZXJhdG9yc19mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9kZWJ1Z19mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy90cmFjZV9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9lcmFzZV9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9pbmZvX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2ZpbmRfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9wb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwPgorCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19UX0RFQworI3VuZGVmIFBCX0RTX0VOVFJZX0NNUF9ERUMKKyN1bmRlZiBQQl9EU19SRVNJWkVfUE9MSUNZX0RFQworCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2NvbnN0X2l0ZXJhdG9yLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vY29uc3RfaXRlcmF0b3IuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYjEzZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2NvbnN0X2l0ZXJhdG9yLmhwcApAQCAtMCwwICsxLDE1MiBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY29uc3RfaXRlcmF0b3IuaHBwCisgKiBDb250YWlucyBhbiBpdGVyYXRvciBjbGFzcyByZXR1cm5lZCBieSB0aGUgdGFibGUncyBjb25zdCBmaW5kIGFuZCBpbnNlcnQKKyAqICAgICBtZXRob2RzLgorICovCisKKyNpZm5kZWYgUEJfRFNfQklOQVJZX0hFQVBfQ09OU1RfSVRFUkFUT1JfSFBQCisjZGVmaW5lIFBCX0RTX0JJTkFSWV9IRUFQX0NPTlNUX0lURVJBVE9SX0hQUAorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vY29uc3RfcG9pbnRfaXRlcmF0b3IuaHBwPgorI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFwKKyAgICBiaW5hcnlfaGVhcF9jb25zdF9pdGVyYXRvcl88VmFsdWVfVHlwZSwgRW50cnksIFNpbXBsZSwgQWxsb2NhdG9yPgorCisjZGVmaW5lIFBCX0RTX0JBU0VfQ19ERUMgXAorICAgIGJpbmFyeV9oZWFwX2NvbnN0X3BvaW50X2l0ZXJhdG9yXzxWYWx1ZV9UeXBlLCBFbnRyeSwgU2ltcGxlLCBBbGxvY2F0b3I+CisKKyAgICAvLyBDb25zdCBwb2ludC10eXBlIGl0ZXJhdG9yLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlX1R5cGUsCisJICAgICB0eXBlbmFtZSBFbnRyeSwKKwkgICAgIGJvb2wgU2ltcGxlLAorCSAgICAgY2xhc3MgQWxsb2NhdG9yPgorICAgIGNsYXNzIGJpbmFyeV9oZWFwX2NvbnN0X2l0ZXJhdG9yXyA6IHB1YmxpYyBQQl9EU19CQVNFX0NfREVDCisgICAgeworCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgUEJfRFNfQkFTRV9DX0RFQzo6ZW50cnlfcG9pbnRlciBlbnRyeV9wb2ludGVyOworCisgICAgICB0eXBlZGVmIFBCX0RTX0JBU0VfQ19ERUMgYmFzZV90eXBlOworCisgICAgcHVibGljOgorCisgICAgICAvLyBDYXRlZ29yeS4KKyAgICAgIHR5cGVkZWYgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKKworICAgICAgLy8gRGlmZmVyZW5jZSB0eXBlLgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisKKyAgICAgIC8vIEl0ZXJhdG9yJ3MgdmFsdWUgdHlwZS4KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisKKyAgICAgIC8vIEl0ZXJhdG9yJ3MgcG9pbnRlciB0eXBlLgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsKKworICAgICAgLy8gSXRlcmF0b3IncyBjb25zdCBwb2ludGVyIHR5cGUuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOworCisgICAgICAvLyBJdGVyYXRvcidzIHJlZmVyZW5jZSB0eXBlLgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OnJlZmVyZW5jZSByZWZlcmVuY2U7CisKKyAgICAgIC8vIEl0ZXJhdG9yJ3MgY29uc3QgcmVmZXJlbmNlIHR5cGUuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKKworICAgIHB1YmxpYzoKKworICAgICAgaW5saW5lCisgICAgICBiaW5hcnlfaGVhcF9jb25zdF9pdGVyYXRvcl8oZW50cnlfcG9pbnRlciBwX2UpIDogYmFzZV90eXBlKHBfZSkKKyAgICAgIHsgfQorCisgICAgICAvLyBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICAgICAgaW5saW5lCisgICAgICBiaW5hcnlfaGVhcF9jb25zdF9pdGVyYXRvcl8oKQorICAgICAgeyB9CisKKyAgICAgIC8vIENvcHkgY29uc3RydWN0b3IuCisgICAgICBpbmxpbmUKKyAgICAgIGJpbmFyeV9oZWFwX2NvbnN0X2l0ZXJhdG9yXyhjb25zdCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpIDogYmFzZV90eXBlKG90aGVyKQorICAgICAgeyB9CisKKyAgICAgIC8vIENvbXBhcmVzIGNvbnRlbnQgdG8gYSBkaWZmZXJlbnQgaXRlcmF0b3Igb2JqZWN0LgorICAgICAgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKSBjb25zdAorICAgICAgeworCXJldHVybiBiYXNlX3R5cGU6Om1fcF9lID09IG90aGVyLm1fcF9lOworICAgICAgfQorCisgICAgICAvLyBDb21wYXJlcyBjb250ZW50IChuZWdhdGl2ZWx5KSB0byBhIGRpZmZlcmVudCBpdGVyYXRvciBvYmplY3QuCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIGJhc2VfdHlwZTo6bV9wX2UgIT0gb3RoZXIubV9wX2U7CisgICAgICB9CisKKyAgICAgIGlubGluZSBQQl9EU19DTEFTU19DX0RFQyYgCisgICAgICBvcGVyYXRvcisrKCkKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoYmFzZV90eXBlOjptX3BfZSAhPSBOVUxMKTsKKwlpbmMoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGlubGluZSBQQl9EU19DTEFTU19DX0RFQworICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7CisJUEJfRFNfQ0xBU1NfQ19ERUMgcmV0X2l0KGJhc2VfdHlwZTo6bV9wX2UpOworCW9wZXJhdG9yKysoKTsKKwlyZXR1cm4gcmV0X2l0OworICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHZvaWQKKyAgICAgIGluYygpCisgICAgICB7ICsrYmFzZV90eXBlOjptX3BfZTsgfQorICAgIH07CisKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworI3VuZGVmIFBCX0RTX0JBU0VfQ19ERUMKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vY29uc3RfcG9pbnRfaXRlcmF0b3IuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9jb25zdF9wb2ludF9pdGVyYXRvci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQwMTNkYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vY29uc3RfcG9pbnRfaXRlcmF0b3IuaHBwCkBAIC0wLDAgKzEsMTQ0IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBjb25zdF9wb2ludF9pdGVyYXRvci5ocHAKKyAqIENvbnRhaW5zIGFuIGl0ZXJhdG9yIGNsYXNzIHJldHVybmVkIGJ5IHRoZSB0YWJsZSdzIGNvbnN0IGZpbmQgYW5kIGluc2VydAorICogICAgIG1ldGhvZHMuCisgKi8KKworI2lmbmRlZiBQQl9EU19CSU5BUllfSEVBUF9DT05TVF9GSU5EX0lURVJBVE9SX0hQUAorI2RlZmluZSBQQl9EU19CSU5BUllfSEVBUF9DT05TVF9GSU5EX0lURVJBVE9SX0hQUAorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL3RhZ19hbmRfdHJhaXQuaHBwPgorI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworICAgIC8vIENvbnN0IHBvaW50LXR5cGUgaXRlcmF0b3IuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVfVHlwZSwgdHlwZW5hbWUgRW50cnksIGJvb2wgU2ltcGxlLCAKKwkgICAgIHR5cGVuYW1lIEFsbG9jYXRvcj4KKyAgICBjbGFzcyBiaW5hcnlfaGVhcF9jb25zdF9wb2ludF9pdGVyYXRvcl8KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxFbnRyeT46Om90aGVyOjpwb2ludGVyIGVudHJ5X3BvaW50ZXI7CisKKyAgICBwdWJsaWM6CisgICAgICAvLyBDYXRlZ29yeS4KKyAgICAgIHR5cGVkZWYgdHJpdmlhbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisKKyAgICAgIC8vIERpZmZlcmVuY2UgdHlwZS4KKyAgICAgIHR5cGVkZWYgdHJpdmlhbF9pdGVyYXRvcl9kaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworCisgICAgICAvLyBJdGVyYXRvcidzIHZhbHVlIHR5cGUuCisgICAgICB0eXBlZGVmIFZhbHVlX1R5cGUgdmFsdWVfdHlwZTsKKworICAgICAgLy8gSXRlcmF0b3IncyBwb2ludGVyIHR5cGUuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPHZhbHVlX3R5cGU+OjpvdGhlcjo6cG9pbnRlcgorICAgICAgcG9pbnRlcjsKKworICAgICAgLy8gSXRlcmF0b3IncyBjb25zdCBwb2ludGVyIHR5cGUuCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDx2YWx1ZV90eXBlPjo6b3RoZXI6OmNvbnN0X3BvaW50ZXIKKyAgICAgIGNvbnN0X3BvaW50ZXI7CisKKyAgICAgIC8vIEl0ZXJhdG9yJ3MgcmVmZXJlbmNlIHR5cGUuCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDx2YWx1ZV90eXBlPjo6b3RoZXI6OnJlZmVyZW5jZQorICAgICAgcmVmZXJlbmNlOworCisgICAgICAvLyBJdGVyYXRvcidzIGNvbnN0IHJlZmVyZW5jZSB0eXBlLgorICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8dmFsdWVfdHlwZT46Om90aGVyOjpjb25zdF9yZWZlcmVuY2UKKyAgICAgIGNvbnN0X3JlZmVyZW5jZTsKKworICAgICAgaW5saW5lCisgICAgICBiaW5hcnlfaGVhcF9jb25zdF9wb2ludF9pdGVyYXRvcl8oZW50cnlfcG9pbnRlciBwX2UpIDogbV9wX2UocF9lKQorICAgICAgeyB9CisKKyAgICAgIC8vIERlZmF1bHQgY29uc3RydWN0b3IuCisgICAgICBpbmxpbmUKKyAgICAgIGJpbmFyeV9oZWFwX2NvbnN0X3BvaW50X2l0ZXJhdG9yXygpIDogbV9wX2UoTlVMTCkgeyB9CisKKyAgICAgIC8vIENvcHkgY29uc3RydWN0b3IuCisgICAgICBpbmxpbmUKKyAgICAgIGJpbmFyeV9oZWFwX2NvbnN0X3BvaW50X2l0ZXJhdG9yXyhjb25zdCBiaW5hcnlfaGVhcF9jb25zdF9wb2ludF9pdGVyYXRvcl8mIG90aGVyKQorICAgICAgOiBtX3BfZShvdGhlci5tX3BfZSkKKyAgICAgIHsgfQorCisgICAgICAvLyBBY2Nlc3MuCisgICAgICBpbmxpbmUgY29uc3RfcG9pbnRlcgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF9lICE9IE5VTEwpOworCXJldHVybiB0b19wdHIoaW50ZWdyYWxfY29uc3RhbnQ8aW50LCBTaW1wbGU+KCkpOworICAgICAgfQorCisgICAgICAvLyBBY2Nlc3MuCisgICAgICBpbmxpbmUgY29uc3RfcmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3BfZSAhPSBOVUxMKTsKKwlyZXR1cm4gKnRvX3B0cihpbnRlZ3JhbF9jb25zdGFudDxpbnQsIFNpbXBsZT4oKSk7CisgICAgICB9CisKKyAgICAgIC8vIENvbXBhcmVzIGNvbnRlbnQgdG8gYSBkaWZmZXJlbnQgaXRlcmF0b3Igb2JqZWN0LgorICAgICAgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgYmluYXJ5X2hlYXBfY29uc3RfcG9pbnRfaXRlcmF0b3JfJiBvdGhlcikgY29uc3QKKyAgICAgIHsgcmV0dXJuIG1fcF9lID09IG90aGVyLm1fcF9lOyB9CisKKyAgICAgIC8vIENvbXBhcmVzIGNvbnRlbnQgKG5lZ2F0aXZlbHkpIHRvIGEgZGlmZmVyZW50IGl0ZXJhdG9yIG9iamVjdC4KKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvciE9KGNvbnN0IGJpbmFyeV9oZWFwX2NvbnN0X3BvaW50X2l0ZXJhdG9yXyYgb3RoZXIpIGNvbnN0CisgICAgICB7IHJldHVybiBtX3BfZSAhPSBvdGhlci5tX3BfZTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIGlubGluZSBjb25zdF9wb2ludGVyCisgICAgICB0b19wdHIodHJ1ZV90eXBlKSBjb25zdAorICAgICAgeyByZXR1cm4gbV9wX2U7IH0KKworICAgICAgaW5saW5lIGNvbnN0X3BvaW50ZXIKKyAgICAgIHRvX3B0cihmYWxzZV90eXBlKSBjb25zdAorICAgICAgeyByZXR1cm4gKm1fcF9lOyB9CisKKyAgICBwdWJsaWM6CisgICAgICBlbnRyeV9wb2ludGVyIG1fcF9lOworICAgIH07CisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzdhMDI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDE1OSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBiaW5hcnlfaGVhcF8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjplbnRyeV9hbGxvY2F0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjpzX2VudHJ5X2FsbG9jYXRvcjsKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjp2YWx1ZV9hbGxvY2F0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjpzX3ZhbHVlX2FsbG9jYXRvcjsKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub190aHJvd19jb3BpZXNfdAorUEJfRFNfQ0xBU1NfQ19ERUM6OnNfbm9fdGhyb3dfY29waWVzX2luZDsKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIEl0Pgordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY29weV9mcm9tX3JhbmdlKEl0IGZpcnN0X2l0LCBJdCBsYXN0X2l0KQoreworICB3aGlsZSAoZmlyc3RfaXQgIT0gbGFzdF9pdCkKKyAgICB7CisgICAgICBpbnNlcnRfdmFsdWUoKmZpcnN0X2l0LCBzX25vX3Rocm93X2NvcGllc19pbmQpOworICAgICAgKytmaXJzdF9pdDsKKyAgICB9CisKKyAgc3RkOjptYWtlX2hlYXAobV9hX2VudHJpZXMsIG1fYV9lbnRyaWVzICsgbV9zaXplLCBzdGF0aWNfY2FzdDxlbnRyeV9jbXAmID4oKnRoaXMpKTsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2JpbmFyeV9oZWFwXygpIDoKKyAgbV9zaXplKDApLAorICBtX2FjdHVhbF9zaXplKHJlc2l6ZV9wb2xpY3k6Om1pbl9zaXplKSwKKyAgbV9hX2VudHJpZXMoc19lbnRyeV9hbGxvY2F0b3IuYWxsb2NhdGUobV9hY3R1YWxfc2l6ZSkpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorYmluYXJ5X2hlYXBfKGNvbnN0IENtcF9GbiYgcl9jbXBfZm4pIDoKKyAgZW50cnlfY21wKHJfY21wX2ZuKSwKKyAgbV9zaXplKDApLAorICBtX2FjdHVhbF9zaXplKHJlc2l6ZV9wb2xpY3k6Om1pbl9zaXplKSwKKyAgbV9hX2VudHJpZXMoc19lbnRyeV9hbGxvY2F0b3IuYWxsb2NhdGUobV9hY3R1YWxfc2l6ZSkpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorYmluYXJ5X2hlYXBfKGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikgOgorICBlbnRyeV9jbXAob3RoZXIpLAorICByZXNpemVfcG9saWN5KG90aGVyKSwKKyAgbV9zaXplKDApLAorICBtX2FjdHVhbF9zaXplKG90aGVyLm1fYWN0dWFsX3NpemUpLAorICBtX2FfZW50cmllcyhzX2VudHJ5X2FsbG9jYXRvci5hbGxvY2F0ZShtX2FjdHVhbF9zaXplKSkKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX2FfZW50cmllcyAhPSBvdGhlci5tX2FfZW50cmllcyk7CisKKyAgY29uc3RfaXRlcmF0b3IgZmlyc3RfaXQgPSBvdGhlci5iZWdpbigpOworICBjb25zdF9pdGVyYXRvciBsYXN0X2l0ID0gb3RoZXIuZW5kKCk7CisKKyAgX190cnkKKyAgICB7CisgICAgICB3aGlsZSAoZmlyc3RfaXQgIT0gbGFzdF9pdCkKKyAgICAgICAgeworCSAgaW5zZXJ0X3ZhbHVlKCpmaXJzdF9pdCwgc19ub190aHJvd19jb3BpZXNfaW5kKTsKKwkgICsrZmlyc3RfaXQ7CisgICAgICAgIH0KKyAgICB9CisgIF9fY2F0Y2goLi4uKQorICAgIHsKKyAgICAgIGZvciAoc2l6ZV90eXBlIGkgPSAwOyBpIDwgbV9zaXplOyArK2kpCisJZXJhc2VfYXQobV9hX2VudHJpZXMsIGksIHNfbm9fdGhyb3dfY29waWVzX2luZCk7CisKKyAgICAgIHNfZW50cnlfYWxsb2NhdG9yLmRlYWxsb2NhdGUobV9hX2VudHJpZXMsIG1fYWN0dWFsX3NpemUpOworICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgICAgfQorICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX2FfZW50cmllcyAhPSBvdGhlci5tX2FfZW50cmllcyk7CisKKyAgdmFsdWVfc3dhcChvdGhlcik7CisgIHN0ZDo6c3dhcCgoZW50cnlfY21wJiApKCp0aGlzKSwgKGVudHJ5X2NtcCYgKW90aGVyKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordmFsdWVfc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIHN0ZDo6c3dhcChtX2FfZW50cmllcywgb3RoZXIubV9hX2VudHJpZXMpOworICBzdGQ6OnN3YXAobV9zaXplLCBvdGhlci5tX3NpemUpOworICBzdGQ6OnN3YXAobV9hY3R1YWxfc2l6ZSwgb3RoZXIubV9hY3R1YWxfc2l6ZSk7CisgIHN0YXRpY19jYXN0PHJlc2l6ZV9wb2xpY3kqPih0aGlzKS0+c3dhcChvdGhlcik7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6Cit+YmluYXJ5X2hlYXBfKCkKK3sKKyAgZm9yIChzaXplX3R5cGUgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkKKyAgICBlcmFzZV9hdChtX2FfZW50cmllcywgaSwgc19ub190aHJvd19jb3BpZXNfaW5kKTsKKyAgc19lbnRyeV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShtX2FfZW50cmllcywgbV9hY3R1YWxfc2l6ZSk7Cit9CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vZGVidWdfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2RlYnVnX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZmVjZmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2RlYnVnX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNzIgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGRlYnVnX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYSBiaW5hcnlfaGVhcC4KKyAqLworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF92YWxpZCgpIGNvbnN0Cit7CisjaWZkZWYgUEJfRFNfUkVHUkVTU0lPTgorICBzX2VudHJ5X2FsbG9jYXRvci5jaGVja19hbGxvY2F0ZWQobV9hX2VudHJpZXMsIG1fYWN0dWFsX3NpemUpOworI2VuZGlmIAorCisgIHJlc2l6ZV9wb2xpY3k6OmFzc2VydF92YWxpZCgpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9zaXplIDw9IG1fYWN0dWFsX3NpemUpOworICBmb3IgKHNpemVfdHlwZSBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQorICAgIHsKKyNpZmRlZiBQQl9EU19SRUdSRVNTSU9OCisgICAgICBzX3ZhbHVlX2FsbG9jYXRvci5jaGVja19hbGxvY2F0ZWQobV9hX2VudHJpZXNbaV0sIDEpOworI2VuZGlmIAorCisgICAgICBpZiAobGVmdF9jaGlsZChpKSA8IG1fc2l6ZSkKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoIWVudHJ5X2NtcDo6b3BlcmF0b3IoKShtX2FfZW50cmllc1tpXSwgbV9hX2VudHJpZXNbbGVmdF9jaGlsZChpKV0pKTsKKworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBhcmVudChsZWZ0X2NoaWxkKGkpKSA9PSBpKTsKKworICAgICAgaWYgKHJpZ2h0X2NoaWxkKGkpIDwgbV9zaXplKQorCV9HTElCQ1hYX0RFQlVHX0FTU0VSVCghZW50cnlfY21wOjpvcGVyYXRvcigpKG1fYV9lbnRyaWVzW2ldLCBtX2FfZW50cmllc1tyaWdodF9jaGlsZChpKV0pKTsKKworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBhcmVudChyaWdodF9jaGlsZChpKSkgPT0gaSk7CisgICAgfQorfQorCisjZW5kaWYgCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2VudHJ5X2NtcC5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2VudHJ5X2NtcC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBhOWI1YgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vZW50cnlfY21wLmhwcApAQCAtMCwwICsxLDkzIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBlbnRyeV9jbXAuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYSBiaW5hcnlfaGVhcC4KKyAqLworCisjaWZuZGVmIFBCX0RTX0JJTkFSWV9IRUFQX0VOVFJZX0NNUF9IUFAKKyNkZWZpbmUgUEJfRFNfQklOQVJZX0hFQVBfRU5UUllfQ01QX0hQUAorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlX1R5cGUsCisJICAgICBjbGFzcyBDbXBfRm4sCisJICAgICBib29sIE5vX1Rocm93LAorCSAgICAgY2xhc3MgQWxsb2NhdG9yPgorICAgIHN0cnVjdCBlbnRyeV9jbXAKKyAgICB7CisgICAgICB0eXBlZGVmIENtcF9GbiB0eXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZV9UeXBlLCBjbGFzcyBDbXBfRm4sIGNsYXNzIEFsbG9jYXRvcj4KKyAgICBzdHJ1Y3QgZW50cnlfY21wPAorICAgICAgVmFsdWVfVHlwZSwKKyAgICAgIENtcF9GbiwKKyAgICAgIGZhbHNlLAorICAgICAgQWxsb2NhdG9yPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKyAgICAgIFZhbHVlX1R5cGU+OjpvdGhlcjo6Y29uc3RfcG9pbnRlcgorICAgICAgZW50cnk7CisKKyAgICAgIHN0cnVjdCB0eXBlIDogcHVibGljIENtcF9GbgorICAgICAgeworICAgICAgcHVibGljOgorCWlubGluZQorCXR5cGUoKQorCXsgfQorCisJaW5saW5lCisJdHlwZShjb25zdCBDbXBfRm4mIG90aGVyKSA6IENtcF9GbihvdGhlcikKKwl7IH0KKworCWlubGluZSBib29sCisJb3BlcmF0b3IoKShlbnRyeSBwX2xocywgIGVudHJ5IHBfcmhzKSBjb25zdAorCXsKKwkgIHJldHVybiBDbXBfRm46Om9wZXJhdG9yKCkoKnBfbGhzLCAqIHBfcmhzKTsKKwl9CisgICAgICB9OworICAgIH07CisKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAvLyAjaWZuZGVmIFBCX0RTX0JJTkFSWV9IRUFQX0VOVFJZX0NNUF9IUFAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vZW50cnlfcHJlZC5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2VudHJ5X3ByZWQuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NTUyOWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2VudHJ5X3ByZWQuaHBwCkBAIC0wLDAgKzEsOTMgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGVudHJ5X3ByZWQuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYSBiaW5hcnlfaGVhcC4KKyAqLworCisjaWZuZGVmIFBCX0RTX0JJTkFSWV9IRUFQX0VOVFJZX1BSRURfSFBQCisjZGVmaW5lIFBCX0RTX0JJTkFSWV9IRUFQX0VOVFJZX1BSRURfSFBQCisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVfVHlwZSwKKwkgICAgIGNsYXNzIFByZWQsCisJICAgICBib29sIE5vX1Rocm93LAorCSAgICAgY2xhc3MgQWxsb2NhdG9yPgorICAgIHN0cnVjdCBlbnRyeV9wcmVkCisgICAgeworICAgICAgdHlwZWRlZiBQcmVkIHR5cGU7CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlX1R5cGUsIGNsYXNzIFByZWQsIGNsYXNzIEFsbG9jYXRvcj4KKyAgICBzdHJ1Y3QgZW50cnlfcHJlZDwKKyAgICAgIFZhbHVlX1R5cGUsCisgICAgICBQcmVkLAorICAgICAgZmFsc2UsCisgICAgICBBbGxvY2F0b3I+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorICAgICAgVmFsdWVfVHlwZT46Om90aGVyOjpjb25zdF9wb2ludGVyCisgICAgICBlbnRyeTsKKworICAgICAgc3RydWN0IHR5cGUgOiBwdWJsaWMgUHJlZAorICAgICAgeworICAgICAgcHVibGljOgorCWlubGluZQorCXR5cGUoKQorCXsgfQorCisJaW5saW5lCisJdHlwZShjb25zdCBQcmVkJiBvdGhlcikgOiBQcmVkKG90aGVyKQorCXsgfQorCisJaW5saW5lIGJvb2wKKwlvcGVyYXRvcigpKGVudHJ5IHBfdikgY29uc3QKKwl7CisJICByZXR1cm4gUHJlZDo6b3BlcmF0b3IoKSgqcF92KTsKKwl9CisgICAgICB9OworICAgIH07CisKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAvLyAjaWZuZGVmIFBCX0RTX0JJTkFSWV9IRUFQX0VOVFJZX1BSRURfSFBQCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2VyYXNlX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9lcmFzZV9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGYzYTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9lcmFzZV9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDI0NiBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZXJhc2VfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBhIGJpbmFyeV9oZWFwLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitjbGVhcigpCit7CisgIGZvciAoc2l6ZV90eXBlIGkgPSAwOyBpIDwgbV9zaXplOyArK2kpCisgICAgZXJhc2VfYXQobV9hX2VudHJpZXMsIGksIHNfbm9fdGhyb3dfY29waWVzX2luZCk7CisKKyAgX190cnkKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgYWN0dWFsX3NpemUgPSByZXNpemVfcG9saWN5OjpnZXRfbmV3X3NpemVfZm9yX2FyYml0cmFyeSgwKTsKKworICAgICAgZW50cnlfcG9pbnRlciBhX2VudHJpZXMgPSBzX2VudHJ5X2FsbG9jYXRvci5hbGxvY2F0ZShhY3R1YWxfc2l6ZSk7CisKKyAgICAgIHJlc2l6ZV9wb2xpY3k6Om5vdGlmeV9hcmJpdHJhcnkoYWN0dWFsX3NpemUpOworCisgICAgICBzX2VudHJ5X2FsbG9jYXRvci5kZWFsbG9jYXRlKG1fYV9lbnRyaWVzLCBtX2FjdHVhbF9zaXplKTsKKworICAgICAgbV9hY3R1YWxfc2l6ZSA9IGFjdHVhbF9zaXplOworCisgICAgICBtX2FfZW50cmllcyA9IGFfZW50cmllczsKKyAgICB9CisgIF9fY2F0Y2goLi4uKQorICAgIHsgfQorCisgIG1fc2l6ZSA9IDA7CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2VfYXQoZW50cnlfcG9pbnRlciBhX2VudHJpZXMsIHNpemVfdHlwZSBpLCBmYWxzZV90eXBlKQoreworICBhX2VudHJpZXNbaV0tPn52YWx1ZV90eXBlKCk7CisKKyAgc192YWx1ZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShhX2VudHJpZXNbaV0sIDEpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2VfYXQoZW50cnlfcG9pbnRlciwgc2l6ZV90eXBlLCB0cnVlX3R5cGUpCit7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citwb3AoKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoIWVtcHR5KCkpOworCisgIGVyYXNlX2F0KG1fYV9lbnRyaWVzLCAwLCBzX25vX3Rocm93X2NvcGllc19pbmQpOworCisgIHN0ZDo6cG9wX2hlYXAobV9hX2VudHJpZXMsIG1fYV9lbnRyaWVzICsgbV9zaXplLCBzdGF0aWNfY2FzdDxlbnRyeV9jbXAmID4oKnRoaXMpKTsKKworICByZXNpemVfZm9yX2VyYXNlX2lmX25lZWRlZCgpOworCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3NpemUgPiAwKTsKKyAgLS1tX3NpemU7CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgfQorCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgUHJlZD4KK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlX2lmKFByZWQgcHJlZCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisKKyAgICB0eXBlZGVmCisgICAgdHlwZW5hbWUgZW50cnlfcHJlZDwKKyAgICB2YWx1ZV90eXBlLAorICAgIFByZWQsCisgICAgc2ltcGxlX3ZhbHVlLAorICAgIEFsbG9jYXRvcj46OnR5cGUKKyAgICBwcmVkX3Q7CisKKyAgY29uc3Qgc2l6ZV90eXBlIGxlZnQgPSBwYXJ0aXRpb24ocHJlZF90KHByZWQpKTsKKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9zaXplID49IGxlZnQpOworCisgIGNvbnN0IHNpemVfdHlwZSBlcnNkID0gbV9zaXplIC0gbGVmdDsKKworICBmb3IgKHNpemVfdHlwZSBpID0gbGVmdDsgaSA8IG1fc2l6ZTsgKytpKQorICAgIGVyYXNlX2F0KG1fYV9lbnRyaWVzLCBpLCBzX25vX3Rocm93X2NvcGllc19pbmQpOworCisgIF9fdHJ5CisgICAgeworICAgICAgY29uc3Qgc2l6ZV90eXBlIGFjdHVhbF9zaXplID0KKwlyZXNpemVfcG9saWN5OjpnZXRfbmV3X3NpemVfZm9yX2FyYml0cmFyeShsZWZ0KTsKKworICAgICAgZW50cnlfcG9pbnRlciBhX2VudHJpZXMgPSBzX2VudHJ5X2FsbG9jYXRvci5hbGxvY2F0ZShhY3R1YWxfc2l6ZSk7CisKKyAgICAgIHN0ZDo6Y29weShtX2FfZW50cmllcywgbV9hX2VudHJpZXMgKyBsZWZ0LCBhX2VudHJpZXMpOworCisgICAgICBzX2VudHJ5X2FsbG9jYXRvci5kZWFsbG9jYXRlKG1fYV9lbnRyaWVzLCBtX2FjdHVhbF9zaXplKTsKKworICAgICAgbV9hY3R1YWxfc2l6ZSA9IGFjdHVhbF9zaXplOworCisgICAgICByZXNpemVfcG9saWN5Ojpub3RpZnlfYXJiaXRyYXJ5KG1fYWN0dWFsX3NpemUpOworICAgIH0KKyAgX19jYXRjaCguLi4pCisgICAgeyB9OworCisgIG1fc2l6ZSA9IGxlZnQ7CisKKyAgc3RkOjptYWtlX2hlYXAobV9hX2VudHJpZXMsIG1fYV9lbnRyaWVzICsgbV9zaXplLCBzdGF0aWNfY2FzdDxlbnRyeV9jbXAmID4oKnRoaXMpKTsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKworICAgIHJldHVybiBlcnNkOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlKHBvaW50X2l0ZXJhdG9yIGl0KQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoIWVtcHR5KCkpOworCisgIGNvbnN0IHNpemVfdHlwZSBmaXhfcG9zID0gaXQubV9wX2UgLSBtX2FfZW50cmllczsKKworICBzdGQ6OnN3YXAoKml0Lm1fcF9lLCBtX2FfZW50cmllc1ttX3NpemUgLSAxXSk7CisKKyAgZXJhc2VfYXQobV9hX2VudHJpZXMsIG1fc2l6ZSAtIDEsIHNfbm9fdGhyb3dfY29waWVzX2luZCk7CisKKyAgcmVzaXplX2Zvcl9lcmFzZV9pZl9uZWVkZWQoKTsKKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9zaXplID4gMCk7CisgIC0tbV9zaXplOworCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChmaXhfcG9zIDw9IG1fc2l6ZSk7CisKKyAgaWYgKGZpeF9wb3MgIT0gbV9zaXplKQorICAgIGZpeChtX2FfZW50cmllcyArIGZpeF9wb3MpOworCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgIH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CityZXNpemVfZm9yX2VyYXNlX2lmX25lZWRlZCgpCit7CisgIGlmICghcmVzaXplX3BvbGljeTo6cmVzaXplX25lZWRlZF9mb3Jfc2hyaW5rKG1fc2l6ZSkpCisgICAgcmV0dXJuOworCisgIF9fdHJ5CisgICAgeworICAgICAgY29uc3Qgc2l6ZV90eXBlIG5ld19hY3R1YWxfc2l6ZSA9CisJcmVzaXplX3BvbGljeTo6Z2V0X25ld19zaXplX2Zvcl9zaHJpbmsoKTsKKworICAgICAgZW50cnlfcG9pbnRlciBhX25ld19lbnRyaWVzID0gc19lbnRyeV9hbGxvY2F0b3IuYWxsb2NhdGUobmV3X2FjdHVhbF9zaXplKTsKKworICAgICAgcmVzaXplX3BvbGljeTo6bm90aWZ5X3Nocmlua19yZXNpemUoKTsKKworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fc2l6ZSA+IDApOworICAgICAgc3RkOjpjb3B5KG1fYV9lbnRyaWVzLCBtX2FfZW50cmllcyArIG1fc2l6ZSAtIDEsIGFfbmV3X2VudHJpZXMpOworCisgICAgICBzX2VudHJ5X2FsbG9jYXRvci5kZWFsbG9jYXRlKG1fYV9lbnRyaWVzLCBtX2FjdHVhbF9zaXplKTsKKworICAgICAgbV9hY3R1YWxfc2l6ZSA9IG5ld19hY3R1YWxfc2l6ZTsKKworICAgICAgbV9hX2VudHJpZXMgPSBhX25ld19lbnRyaWVzOworICAgIH0KKyAgX19jYXRjaCguLi4pCisgICAgeyB9Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkPgordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcGFydGl0aW9uKFByZWQgcHJlZCkKK3sKKyAgc2l6ZV90eXBlIGxlZnQgPSAwOworICBzaXplX3R5cGUgcmlnaHQgPSBtX3NpemUgLSAxOworCisgIHdoaWxlIChyaWdodCArIDEgIT0gbGVmdCkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobGVmdCA8PSBtX3NpemUpOworCisgICAgICBpZiAoIXByZWQobV9hX2VudHJpZXNbbGVmdF0pKQorCSsrbGVmdDsKKyAgICAgIGVsc2UgaWYgKHByZWQobV9hX2VudHJpZXNbcmlnaHRdKSkKKwktLXJpZ2h0OworICAgICAgZWxzZQorICAgICAgICB7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobGVmdCA8IHJpZ2h0KTsKKworCSAgc3RkOjpzd2FwKG1fYV9lbnRyaWVzW2xlZnRdLCBtX2FfZW50cmllc1tyaWdodF0pOworCisJICArK2xlZnQ7CisJICAtLXJpZ2h0OworICAgICAgICB9CisgICAgfQorCisgIHJldHVybiBsZWZ0OworfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2ZpbmRfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2ZpbmRfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhkNGE4YwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vZmluZF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDkxIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBmaW5kX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYSBiaW5hcnlfaGVhcC4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9yZWZlcmVuY2UKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3RvcCgpIGNvbnN0Cit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCghZW1wdHkoKSk7CisKKyAgcmV0dXJuIHRvcF9pbXAoc19ub190aHJvd19jb3BpZXNfaW5kKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfcmVmZXJlbmNlCitQQl9EU19DTEFTU19DX0RFQzo6Cit0b3BfaW1wKHRydWVfdHlwZSkgY29uc3QKK3sKKyAgcmV0dXJuKiBtX2FfZW50cmllczsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfcmVmZXJlbmNlCitQQl9EU19DTEFTU19DX0RFQzo6Cit0b3BfaW1wKGZhbHNlX3R5cGUpIGNvbnN0Cit7CisgIHJldHVybioqIG1fYV9lbnRyaWVzOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2xlZnRfY2hpbGQoc2l6ZV90eXBlIGkpCit7CisgIHJldHVybiBpKiAgMiArIDE7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmlnaHRfY2hpbGQoc2l6ZV90eXBlIGkpCit7CisgIHJldHVybiBpKiAgMiArIDI7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcGFyZW50KHNpemVfdHlwZSBpKQoreworICByZXR1cm4gKGkgLSAxKSAvIDI7Cit9CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vaW5mb19mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vaW5mb19mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjkyNzkzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9pbmZvX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNjQgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGluZm9fZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBhIGJpbmFyeV9oZWFwLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgYm9vbAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZW1wdHkoKSBjb25zdAoreworICByZXR1cm4gKG1fc2l6ZSA9PSAwKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitzaXplKCkgY29uc3QKK3sKKyAgcmV0dXJuIChtX3NpemUpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK21heF9zaXplKCkgY29uc3QKK3sKKyAgcmV0dXJuIChzX2VudHJ5X2FsbG9jYXRvci5tYXhfc2l6ZSgpKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9pbnNlcnRfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2luc2VydF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTNhM2NiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9pbnNlcnRfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxODMgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGluc2VydF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGEgYmluYXJ5X2hlYXAuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6cG9pbnRfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3B1c2goY29uc3RfcmVmZXJlbmNlIHJfdmFsKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgaW5zZXJ0X3ZhbHVlKHJfdmFsLCBzX25vX3Rocm93X2NvcGllc19pbmQpOworICBzdGQ6OnB1c2hfaGVhcChtX2FfZW50cmllcywgbV9hX2VudHJpZXMgKyBtX3NpemUsIAorCQkgc3RhdGljX2Nhc3Q8ZW50cnlfY21wJj4oKnRoaXMpKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIHJldHVybiBwb2ludF9pdGVyYXRvcihtX2FfZW50cmllcyk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgoraW5zZXJ0X3ZhbHVlKHZhbHVlX3R5cGUgdmFsLCB0cnVlX3R5cGUpCit7CisgIHJlc2l6ZV9mb3JfaW5zZXJ0X2lmX25lZWRlZCgpOworCisgIG1fYV9lbnRyaWVzW21fc2l6ZSsrXSA9IHZhbDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitpbnNlcnRfdmFsdWUoY29uc3RfcmVmZXJlbmNlIHJfdmFsLCBmYWxzZV90eXBlKQoreworICByZXNpemVfZm9yX2luc2VydF9pZl9uZWVkZWQoKTsKKyAgcG9pbnRlciBwX25ldyA9IHNfdmFsdWVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOworICBjb25kX2RlYWx0b3JfdCBjb25kKHBfbmV3KTsKKyAgbmV3IChwX25ldykgdmFsdWVfdHlwZShyX3ZhbCk7CisgIGNvbmQuc2V0X25vX2FjdGlvbigpOworICBtX2FfZW50cmllc1ttX3NpemUrK10gPSBwX25ldzsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitpbnNlcnRfZW50cnkoZW50cnkgZSkKK3sKKyAgcmVzaXplX2Zvcl9pbnNlcnRfaWZfbmVlZGVkKCk7CisgIG1fYV9lbnRyaWVzW21fc2l6ZSsrXSA9IGU7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVzaXplX2Zvcl9pbnNlcnRfaWZfbmVlZGVkKCkKK3sKKyAgaWYgKCFyZXNpemVfcG9saWN5OjpyZXNpemVfbmVlZGVkX2Zvcl9ncm93KG1fc2l6ZSkpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fc2l6ZSA8IG1fYWN0dWFsX3NpemUpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBjb25zdCBzaXplX3R5cGUgbmV3X2FjdHVhbF9zaXplID0gcmVzaXplX3BvbGljeTo6Z2V0X25ld19zaXplX2Zvcl9ncm93KCk7CisgIGVudHJ5X3BvaW50ZXIgYV9uZXdfZW50cmllcyA9IHNfZW50cnlfYWxsb2NhdG9yLmFsbG9jYXRlKG5ld19hY3R1YWxfc2l6ZSk7CisgIHJlc2l6ZV9wb2xpY3k6Om5vdGlmeV9ncm93X3Jlc2l6ZSgpOworICBzdGQ6OmNvcHkobV9hX2VudHJpZXMsIG1fYV9lbnRyaWVzICsgbV9zaXplLCBhX25ld19lbnRyaWVzKTsKKyAgc19lbnRyeV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShtX2FfZW50cmllcywgbV9hY3R1YWxfc2l6ZSk7CisgIG1fYWN0dWFsX3NpemUgPSBuZXdfYWN0dWFsX3NpemU7CisgIG1fYV9lbnRyaWVzID0gYV9uZXdfZW50cmllczsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK21vZGlmeShwb2ludF9pdGVyYXRvciBpdCwgY29uc3RfcmVmZXJlbmNlIHJfbmV3X3ZhbCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIHN3YXBfdmFsdWVfaW1wKGl0Lm1fcF9lLCByX25ld192YWwsIHNfbm9fdGhyb3dfY29waWVzX2luZCk7CisgIGZpeChpdC5tX3BfZSk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZml4KGVudHJ5X3BvaW50ZXIgcF9lKQoreworICBzaXplX3R5cGUgaSA9IHBfZSAtIG1fYV9lbnRyaWVzOworICBpZiAoaSA+IDAgJiYgZW50cnlfY21wOjpvcGVyYXRvcigpKG1fYV9lbnRyaWVzW3BhcmVudChpKV0sIG1fYV9lbnRyaWVzW2ldKSkKKyAgICB7CisgICAgICBzaXplX3R5cGUgcGFyZW50X2kgPSBwYXJlbnQoaSk7CisgICAgICB3aGlsZSAoaSA+IDAgCisJICAgICAmJiBlbnRyeV9jbXA6Om9wZXJhdG9yKCkobV9hX2VudHJpZXNbcGFyZW50X2ldLCBtX2FfZW50cmllc1tpXSkpCisgICAgICAgIHsKKwkgIHN0ZDo6c3dhcChtX2FfZW50cmllc1tpXSwgbV9hX2VudHJpZXNbcGFyZW50X2ldKTsKKwkgIGkgPSBwYXJlbnRfaTsKKwkgIHBhcmVudF9pID0gcGFyZW50KGkpOworICAgICAgICB9CisKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgICAgcmV0dXJuOworICAgIH0KKworICB3aGlsZSAoaSA8IG1fc2l6ZSkKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgbGVmdF9jaGlsZF9pID0gbGVmdF9jaGlsZChpKTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSByaWdodF9jaGlsZF9pID0gcmlnaHRfY2hpbGQoaSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocmlnaHRfY2hpbGRfaSA+IGxlZnRfY2hpbGRfaSk7CisgICAgICBjb25zdCBib29sIHNtYWxsZXJfdGhhbl9sZWZ0X2NoaWxkID0gbGVmdF9jaGlsZF9pIDwgbV9zaXplICYmIAorCWVudHJ5X2NtcDo6b3BlcmF0b3IoKShtX2FfZW50cmllc1tpXSwgbV9hX2VudHJpZXNbbGVmdF9jaGlsZF9pXSk7CisKKyAgICAgIGNvbnN0IGJvb2wgc21hbGxlcl90aGFuX3JpZ2h0X2NoaWxkID0gcmlnaHRfY2hpbGRfaSA8IG1fc2l6ZSAmJiAKKwllbnRyeV9jbXA6Om9wZXJhdG9yKCkobV9hX2VudHJpZXNbaV0sIG1fYV9lbnRyaWVzW3JpZ2h0X2NoaWxkX2ldKTsKKworICAgICAgY29uc3QgYm9vbCBzd2FwX3dpdGhfcl9jaGlsZCA9IHNtYWxsZXJfdGhhbl9yaWdodF9jaGlsZCAmJiAoIXNtYWxsZXJfdGhhbl9sZWZ0X2NoaWxkIHx8IGVudHJ5X2NtcDo6b3BlcmF0b3IoKShtX2FfZW50cmllc1tsZWZ0X2NoaWxkX2ldLCBtX2FfZW50cmllc1tyaWdodF9jaGlsZF9pXSkpOworCisgICAgICBjb25zdCBib29sIHN3YXBfd2l0aF9sX2NoaWxkID0gIXN3YXBfd2l0aF9yX2NoaWxkICYmIHNtYWxsZXJfdGhhbl9sZWZ0X2NoaWxkOworCisgICAgICBpZiAoc3dhcF93aXRoX2xfY2hpbGQpCisgICAgICAgIHsKKwkgIHN0ZDo6c3dhcChtX2FfZW50cmllc1tpXSwgbV9hX2VudHJpZXNbbGVmdF9jaGlsZF9pXSk7CisJICBpID0gbGVmdF9jaGlsZF9pOworICAgICAgICB9CisgICAgICBlbHNlIGlmIChzd2FwX3dpdGhfcl9jaGlsZCkKKyAgICAgICAgeworCSAgc3RkOjpzd2FwKG1fYV9lbnRyaWVzW2ldLCBtX2FfZW50cmllc1tyaWdodF9jaGlsZF9pXSk7CisJICBpID0gcmlnaHRfY2hpbGRfaTsKKyAgICAgICAgfQorICAgICAgZWxzZQorCWkgPSBtX3NpemU7CisgICAgfQorfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3N3YXBfdmFsdWVfaW1wKGVudHJ5X3BvaW50ZXIgcF9lLCB2YWx1ZV90eXBlIG5ld192YWwsIHRydWVfdHlwZSkKK3sKKyAgKiBwX2UgPSBuZXdfdmFsOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3N3YXBfdmFsdWVfaW1wKGVudHJ5X3BvaW50ZXIgcF9lLCBjb25zdF9yZWZlcmVuY2Ugcl9uZXdfdmFsLCBmYWxzZV90eXBlKQoreworICB2YWx1ZV90eXBlIHRtcChyX25ld192YWwpOworICAoKnBfZSktPnN3YXAodG1wKTsKK30KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vaXRlcmF0b3JzX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9pdGVyYXRvcnNfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIwYTY0ZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vaXRlcmF0b3JzX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNzIgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGl0ZXJhdG9yc19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGEgYmluYXJ5X2hlYXAuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6aXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2JlZ2luKCkKK3sKKyAgcmV0dXJuIChpdGVyYXRvcihtX2FfZW50cmllcykpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYmVnaW4oKSBjb25zdAoreworICByZXR1cm4gKGNvbnN0X2l0ZXJhdG9yKG1fYV9lbnRyaWVzKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitlbmQoKQoreworICByZXR1cm4gKGl0ZXJhdG9yKG1fYV9lbnRyaWVzICsgbV9zaXplKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitlbmQoKSBjb25zdAoreworICByZXR1cm4gKGNvbnN0X2l0ZXJhdG9yKG1fYV9lbnRyaWVzICsgbV9zaXplKSk7Cit9CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vcG9saWN5X2FjY2Vzc19mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vcG9saWN5X2FjY2Vzc19mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWE3Yjg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9wb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNTYgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHBvbGljeV9hY2Nlc3NfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBhIGJpbmFyeV9oZWFwLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitDbXBfRm4mIAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X2NtcF9mbigpCit7CisgIHJldHVybiAoKnRoaXMpOworfQorCitQQl9EU19DTEFTU19UX0RFQworY29uc3QgQ21wX0ZuJiAKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9jbXBfZm4oKSBjb25zdAoreworICByZXR1cm4gKCp0aGlzKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9yZXNpemVfcG9saWN5LmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vcmVzaXplX3BvbGljeS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg4ZmIzZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vcmVzaXplX3BvbGljeS5ocHAKQEAgLTAsMCArMSwyNTMgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHJlc2l6ZV9wb2xpY3kuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYSBiaW5hcnlfaGVhcC4KKyAqLworCisjaWZuZGVmIFBCX0RTX0JJTkFSWV9IRUFQX1JFU0laRV9QT0xJQ1lfSFBQCisjZGVmaW5lIFBCX0RTX0JJTkFSWV9IRUFQX1JFU0laRV9QT0xJQ1lfSFBQCisKKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQyB0ZW1wbGF0ZTx0eXBlbmFtZSBTaXplX1R5cGU+CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfQ19ERUMgcmVzaXplX3BvbGljeTxTaXplX1R5cGU+CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTaXplX1R5cGU+CisgICAgY2xhc3MgcmVzaXplX3BvbGljeQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIFNpemVfVHlwZSBzaXplX3R5cGU7CisKKyAgICAgIGVudW0KKwl7CisJICBtaW5fc2l6ZSA9IDE2CisJfTsKKworICAgIHB1YmxpYzoKKyAgICAgIGlubGluZQorICAgICAgcmVzaXplX3BvbGljeSgpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpOworCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgcmVzaXplX25lZWRlZF9mb3JfZ3JvdyhzaXplX3R5cGUgc2l6ZSkgY29uc3Q7CisKKyAgICAgIGlubGluZSBib29sCisgICAgICByZXNpemVfbmVlZGVkX2Zvcl9zaHJpbmsoc2l6ZV90eXBlIHNpemUpIGNvbnN0OworCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgZ3Jvd19uZWVkZWQoc2l6ZV90eXBlIHNpemUpIGNvbnN0OworCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgc2hyaW5rX25lZWRlZChzaXplX3R5cGUgc2l6ZSkgY29uc3Q7CisKKyAgICAgIGlubGluZSBzaXplX3R5cGUKKyAgICAgIGdldF9uZXdfc2l6ZV9mb3JfZ3JvdygpIGNvbnN0OworCisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBnZXRfbmV3X3NpemVfZm9yX3NocmluaygpIGNvbnN0OworCisgICAgICBzaXplX3R5cGUKKyAgICAgIGdldF9uZXdfc2l6ZV9mb3JfYXJiaXRyYXJ5KHNpemVfdHlwZSBzaXplKSBjb25zdDsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIG5vdGlmeV9ncm93X3Jlc2l6ZSgpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgbm90aWZ5X3Nocmlua19yZXNpemUoKTsKKworICAgICAgdm9pZAorICAgICAgbm90aWZ5X2FyYml0cmFyeShzaXplX3R5cGUgYWN0dWFsX3NpemUpOworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF92YWxpZCgpIGNvbnN0OworI2VuZGlmIAorCisjaWZkZWYgUEJfRFNfQklOQVJZX0hFQVBfVFJBQ0VfCisgICAgICB2b2lkCisgICAgICB0cmFjZSgpIGNvbnN0OworI2VuZGlmIAorCisgICAgcHJpdmF0ZToKKyAgICAgIGVudW0KKwl7CisJICByYXRpbyA9IDgsCisJICBmYWN0b3IgPSAyCisJfTsKKworICAgIHByaXZhdGU6CisgICAgICBzaXplX3R5cGUgbV9uZXh0X3Nocmlua19zaXplOworICAgICAgc2l6ZV90eXBlIG1fbmV4dF9ncm93X3NpemU7CisgICAgfTsKKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgaW5saW5lCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHJlc2l6ZV9wb2xpY3koKSA6CisgICAgICBtX25leHRfc2hyaW5rX3NpemUoMCksCisgICAgICBtX25leHRfZ3Jvd19zaXplKG1pbl9zaXplKQorICAgIHsgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgaW5saW5lIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCisgICAgeworICAgICAgc3RkOjpzd2FwKG1fbmV4dF9zaHJpbmtfc2l6ZSwgb3RoZXIubV9uZXh0X3Nocmlua19zaXplKTsKKyAgICAgIHN0ZDo6c3dhcChtX25leHRfZ3Jvd19zaXplLCBvdGhlci5tX25leHRfZ3Jvd19zaXplKTsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIGlubGluZSBib29sCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHJlc2l6ZV9uZWVkZWRfZm9yX2dyb3coc2l6ZV90eXBlIHNpemUpIGNvbnN0CisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHNpemUgPD0gbV9uZXh0X2dyb3dfc2l6ZSk7CisgICAgICByZXR1cm4gc2l6ZSA9PSBtX25leHRfZ3Jvd19zaXplOworICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgaW5saW5lIGJvb2wKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcmVzaXplX25lZWRlZF9mb3Jfc2hyaW5rKHNpemVfdHlwZSBzaXplKSBjb25zdAorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChzaXplIDw9IG1fbmV4dF9ncm93X3NpemUpOworICAgICAgcmV0dXJuIHNpemUgPT0gbV9uZXh0X3Nocmlua19zaXplOworICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgZ2V0X25ld19zaXplX2Zvcl9ncm93KCkgY29uc3QKKyAgICB7IHJldHVybiBtX25leHRfZ3Jvd19zaXplKiAgZmFjdG9yOyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIGlubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIGdldF9uZXdfc2l6ZV9mb3Jfc2hyaW5rKCkgY29uc3QKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgaGFsZl9zaXplID0gbV9uZXh0X2dyb3dfc2l6ZSAvIGZhY3RvcjsKKyAgICAgIHJldHVybiBzdGQ6Om1heChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KG1pbl9zaXplKSwgaGFsZl9zaXplKTsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIGlubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIGdldF9uZXdfc2l6ZV9mb3JfYXJiaXRyYXJ5KHNpemVfdHlwZSBzaXplKSBjb25zdAorICAgIHsKKyAgICAgIHNpemVfdHlwZSByZXQgPSBtaW5fc2l6ZTsKKyAgICAgIHdoaWxlIChyZXQgPCBzaXplKQorCXJldCAqPSBmYWN0b3I7CisgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgaW5saW5lIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgbm90aWZ5X2dyb3dfcmVzaXplKCkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX25leHRfZ3Jvd19zaXplID49IG1pbl9zaXplKTsKKyAgICAgIG1fbmV4dF9ncm93X3NpemUgKj0gZmFjdG9yOworICAgICAgbV9uZXh0X3Nocmlua19zaXplID0gbV9uZXh0X2dyb3dfc2l6ZSAvIHJhdGlvOworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBpbmxpbmUgdm9pZAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBub3RpZnlfc2hyaW5rX3Jlc2l6ZSgpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgICBtX25leHRfc2hyaW5rX3NpemUgLz0gZmFjdG9yOworICAgICAgaWYgKG1fbmV4dF9zaHJpbmtfc2l6ZSA9PSAxKQorCW1fbmV4dF9zaHJpbmtfc2l6ZSA9IDA7CisKKyAgICAgIG1fbmV4dF9ncm93X3NpemUgPQorCXN0ZDo6bWF4KG1fbmV4dF9ncm93X3NpemUgLyBmYWN0b3IsIHN0YXRpY19jYXN0PHNpemVfdHlwZT4obWluX3NpemUpKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgaW5saW5lIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgbm90aWZ5X2FyYml0cmFyeShzaXplX3R5cGUgYWN0dWFsX3NpemUpCisgICAgeworICAgICAgbV9uZXh0X2dyb3dfc2l6ZSA9IGFjdHVhbF9zaXplOworICAgICAgbV9uZXh0X3Nocmlua19zaXplID0gbV9uZXh0X2dyb3dfc2l6ZSAvIHJhdGlvOworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgfQorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgYXNzZXJ0X3ZhbGlkKCkgY29uc3QKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9uZXh0X3Nocmlua19zaXplID09IDAgfHwKKwkJICAgICAgIG1fbmV4dF9zaHJpbmtfc2l6ZSogIHJhdGlvID09IG1fbmV4dF9ncm93X3NpemUpOworCisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9uZXh0X2dyb3dfc2l6ZSA+PSBtaW5fc2l6ZSk7CisgICAgfQorI2VuZGlmIAorCisjaWZkZWYgUEJfRFNfQklOQVJZX0hFQVBfVFJBQ0VfCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB2b2lkCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHRyYWNlKCkgY29uc3QKKyAgICB7CisgICAgICBzdGQ6OmNlcnIgPDwgInNocmluayA9ICIgPDwgbV9uZXh0X3Nocmlua19zaXplIDw8CisJIiBncm93ID0gIiA8PCBtX25leHRfZ3Jvd19zaXplIDw8IHN0ZDo6ZW5kbDsKKyAgICB9CisjZW5kaWYgCisKKyN1bmRlZiBQQl9EU19DTEFTU19UX0RFQworI3VuZGVmIFBCX0RTX0NMQVNTX0NfREVDCisKK30gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRiN2Q1NAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDE3MiBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgc3BsaXRfam9pbl9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGEgYmluYXJ5X2hlYXAuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIFByZWQ+Cit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitzcGxpdChQcmVkIHByZWQsIFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisKKyAgICB0eXBlZGVmCisgICAgdHlwZW5hbWUgZW50cnlfcHJlZDwKKyAgICB2YWx1ZV90eXBlLAorICAgIFByZWQsCisgICAgc2ltcGxlX3ZhbHVlLAorICAgIEFsbG9jYXRvcj46OnR5cGUKKyAgICBwcmVkX3Q7CisKKyAgY29uc3Qgc2l6ZV90eXBlIGxlZnQgPSBwYXJ0aXRpb24ocHJlZF90KHByZWQpKTsKKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9zaXplID49IGxlZnQpOworCisgIGNvbnN0IHNpemVfdHlwZSBlcnNkID0gbV9zaXplIC0gbGVmdDsKKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9zaXplID49IGVyc2QpOworCisgIGNvbnN0IHNpemVfdHlwZSBhY3R1YWxfc2l6ZSA9CisgICAgcmVzaXplX3BvbGljeTo6Z2V0X25ld19zaXplX2Zvcl9hcmJpdHJhcnkobGVmdCk7CisKKyAgY29uc3Qgc2l6ZV90eXBlIG90aGVyX2FjdHVhbF9zaXplID0KKyAgICBvdGhlci5nZXRfbmV3X3NpemVfZm9yX2FyYml0cmFyeShlcnNkKTsKKworICBlbnRyeV9wb2ludGVyIGFfZW50cmllcyA9IE5VTEw7CisgIGVudHJ5X3BvaW50ZXIgYV9vdGhlcl9lbnRyaWVzID0gTlVMTDsKKworICBfX3RyeQorICAgIHsKKyAgICAgIGFfZW50cmllcyA9IHNfZW50cnlfYWxsb2NhdG9yLmFsbG9jYXRlKGFjdHVhbF9zaXplKTsKKworICAgICAgYV9vdGhlcl9lbnRyaWVzID0gc19lbnRyeV9hbGxvY2F0b3IuYWxsb2NhdGUob3RoZXJfYWN0dWFsX3NpemUpOworICAgIH0KKyAgX19jYXRjaCguLi4pCisgICAgeworICAgICAgaWYgKGFfZW50cmllcyAhPSBOVUxMKQorCXNfZW50cnlfYWxsb2NhdG9yLmRlYWxsb2NhdGUoYV9lbnRyaWVzLCBhY3R1YWxfc2l6ZSk7CisKKyAgICAgIGlmIChhX290aGVyX2VudHJpZXMgIT0gTlVMTCkKKwlzX2VudHJ5X2FsbG9jYXRvci5kZWFsbG9jYXRlKGFfb3RoZXJfZW50cmllcywgb3RoZXJfYWN0dWFsX3NpemUpOworCisgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAgICB9OworCisgIGZvciAoc2l6ZV90eXBlIGkgPSAwOyBpIDwgb3RoZXIubV9zaXplOyArK2kpCisgICAgZXJhc2VfYXQob3RoZXIubV9hX2VudHJpZXMsIGksIHNfbm9fdGhyb3dfY29waWVzX2luZCk7CisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGFjdHVhbF9zaXplID49IGxlZnQpOworICBzdGQ6OmNvcHkobV9hX2VudHJpZXMsIG1fYV9lbnRyaWVzICsgbGVmdCwgYV9lbnRyaWVzKTsKKyAgc3RkOjpjb3B5KG1fYV9lbnRyaWVzICsgbGVmdCwgbV9hX2VudHJpZXMgKyBtX3NpemUsIGFfb3RoZXJfZW50cmllcyk7CisKKyAgc19lbnRyeV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShtX2FfZW50cmllcywgbV9hY3R1YWxfc2l6ZSk7CisgIHNfZW50cnlfYWxsb2NhdG9yLmRlYWxsb2NhdGUob3RoZXIubV9hX2VudHJpZXMsIG90aGVyLm1fYWN0dWFsX3NpemUpOworCisgIG1fYWN0dWFsX3NpemUgPSBhY3R1YWxfc2l6ZTsKKyAgb3RoZXIubV9hY3R1YWxfc2l6ZSA9IG90aGVyX2FjdHVhbF9zaXplOworCisgIG1fc2l6ZSA9IGxlZnQ7CisgIG90aGVyLm1fc2l6ZSA9IGVyc2Q7CisKKyAgbV9hX2VudHJpZXMgPSBhX2VudHJpZXM7CisgIG90aGVyLm1fYV9lbnRyaWVzID0gYV9vdGhlcl9lbnRyaWVzOworCisgIHN0ZDo6bWFrZV9oZWFwKG1fYV9lbnRyaWVzLCBtX2FfZW50cmllcyArIG1fc2l6ZSwgc3RhdGljX2Nhc3Q8ZW50cnlfY21wJiA+KCp0aGlzKSk7CisgIHN0ZDo6bWFrZV9oZWFwKG90aGVyLm1fYV9lbnRyaWVzLCBvdGhlci5tX2FfZW50cmllcyArIG90aGVyLm1fc2l6ZSwgc3RhdGljX2Nhc3Q8ZW50cnlfY21wJiA+KG90aGVyKSk7CisKKyAgcmVzaXplX3BvbGljeTo6bm90aWZ5X2FyYml0cmFyeShtX2FjdHVhbF9zaXplKTsKKyAgb3RoZXIubm90aWZ5X2FyYml0cmFyeShvdGhlci5tX2FjdHVhbF9zaXplKTsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpOykKKyAgICB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogoram9pbihQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpOykKKworICBjb25zdCBzaXplX3R5cGUgbGVuID0gbV9zaXplICsgb3RoZXIubV9zaXplOworICBjb25zdCBzaXplX3R5cGUgYWN0dWFsX3NpemUgPSByZXNpemVfcG9saWN5OjpnZXRfbmV3X3NpemVfZm9yX2FyYml0cmFyeShsZW4pOworCisgIGVudHJ5X3BvaW50ZXIgYV9lbnRyaWVzID0gTlVMTDsKKyAgZW50cnlfcG9pbnRlciBhX290aGVyX2VudHJpZXMgPSBOVUxMOworCisgIF9fdHJ5CisgICAgeworICAgICAgYV9lbnRyaWVzID0gc19lbnRyeV9hbGxvY2F0b3IuYWxsb2NhdGUoYWN0dWFsX3NpemUpOworICAgICAgYV9vdGhlcl9lbnRyaWVzID0gc19lbnRyeV9hbGxvY2F0b3IuYWxsb2NhdGUocmVzaXplX3BvbGljeTo6bWluX3NpemUpOworICAgIH0KKyAgX19jYXRjaCguLi4pCisgICAgeworICAgICAgaWYgKGFfZW50cmllcyAhPSBOVUxMKQorCXNfZW50cnlfYWxsb2NhdG9yLmRlYWxsb2NhdGUoYV9lbnRyaWVzLCBhY3R1YWxfc2l6ZSk7CisKKyAgICAgIGlmIChhX290aGVyX2VudHJpZXMgIT0gTlVMTCkKKwlzX2VudHJ5X2FsbG9jYXRvci5kZWFsbG9jYXRlKGFfb3RoZXJfZW50cmllcywgcmVzaXplX3BvbGljeTo6bWluX3NpemUpOworCisgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAgICB9CisKKyAgc3RkOjpjb3B5KG1fYV9lbnRyaWVzLCBtX2FfZW50cmllcyArIG1fc2l6ZSwgYV9lbnRyaWVzKTsKKyAgc3RkOjpjb3B5KG90aGVyLm1fYV9lbnRyaWVzLCBvdGhlci5tX2FfZW50cmllcyArIG90aGVyLm1fc2l6ZSwgYV9lbnRyaWVzICsgbV9zaXplKTsKKworICBzX2VudHJ5X2FsbG9jYXRvci5kZWFsbG9jYXRlKG1fYV9lbnRyaWVzLCBtX2FjdHVhbF9zaXplKTsKKyAgbV9hX2VudHJpZXMgPSBhX2VudHJpZXM7CisgIG1fc2l6ZSA9IGxlbjsKKyAgbV9hY3R1YWxfc2l6ZSA9IGFjdHVhbF9zaXplOworCisgIHJlc2l6ZV9wb2xpY3k6Om5vdGlmeV9hcmJpdHJhcnkoYWN0dWFsX3NpemUpOworCisgIHN0ZDo6bWFrZV9oZWFwKG1fYV9lbnRyaWVzLCBtX2FfZW50cmllcyArIG1fc2l6ZSwgc3RhdGljX2Nhc3Q8ZW50cnlfY21wJiA+KCp0aGlzKSk7CisKKyAgc19lbnRyeV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShvdGhlci5tX2FfZW50cmllcywgb3RoZXIubV9hY3R1YWxfc2l6ZSk7CisgIG90aGVyLm1fYV9lbnRyaWVzID0gYV9vdGhlcl9lbnRyaWVzOworICBvdGhlci5tX3NpemUgPSAwOworICBvdGhlci5tX2FjdHVhbF9zaXplID0gcmVzaXplX3BvbGljeTo6bWluX3NpemU7CisKKyAgb3RoZXIubm90aWZ5X2FyYml0cmFyeShyZXNpemVfcG9saWN5OjptaW5fc2l6ZSk7CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKCk7KQorfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL3RyYWNlX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy90cmFjZV9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmJkNjZmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy90cmFjZV9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDc4IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSB0cmFjZV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGEgYmluYXJ5X2hlYXAuCisgKi8KKworI2lmZGVmIFBCX0RTX0JJTkFSWV9IRUFQX1RSQUNFXworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordHJhY2UoKSBjb25zdAoreworICBzdGQ6OmNlcnIgPDwgdGhpcyA8PCBzdGQ6OmVuZGw7CisKKyAgc3RkOjpjZXJyIDw8IG1fYV9lbnRyaWVzIDw8IHN0ZDo6ZW5kbDsKKworICBmb3IgKHNpemVfdHlwZSBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQorICAgIHRyYWNlX2VudHJ5KG1fYV9lbnRyaWVzW2ldLCBzX25vX3Rocm93X2NvcGllc19pbmQpOworCisgIHN0ZDo6Y2VyciA8PCBzdGQ6OmVuZGw7CisKKyAgc3RkOjpjZXJyIDw8ICJzaXplID0gIiA8PCBtX3NpemUgPDwgIiAiIDw8ICJhY3R1YWxfc2l6ZSA9ICIgPDwgbV9hY3R1YWxfc2l6ZSA8PCBzdGQ6OmVuZGw7CisKKyAgcmVzaXplX3BvbGljeTo6dHJhY2UoKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3RyYWNlX2VudHJ5KGNvbnN0IGVudHJ5JiByX2UsIGZhbHNlX3R5cGUpIGNvbnN0Cit7CisgIHN0ZDo6Y291dCA8PCByX2UgPDwgIiAiIDw8KiByX2UgPDwgc3RkOjplbmRsOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordHJhY2VfZW50cnkoY29uc3QgZW50cnkmIHJfZSwgdHJ1ZV90eXBlKSBjb25zdAoreworICBzdGQ6OmNvdXQgPDwgcl9lIDw8IHN0ZDo6ZW5kbDsKK30KKworI2VuZGlmIC8vICNpZmRlZiBQQl9EU19CSU5BUllfSEVBUF9UUkFDRV8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5vbWlhbF9oZWFwXy9iaW5vbWlhbF9oZWFwXy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmlub21pYWxfaGVhcF8vYmlub21pYWxfaGVhcF8uaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNGQ2ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmlub21pYWxfaGVhcF8vYmlub21pYWxfaGVhcF8uaHBwCkBAIC0wLDAgKzEsMTE2IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBiaW5vbWlhbF9oZWFwXy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBhIGJpbm9taWFsIGhlYXAuCisgKi8KKworLyoKKyAqIEJpbm9taWFsIGhlYXAuCisgKiBWdWlsbGVtaW4gSiBpcyB0aGUgbWFzdGFoLgorICogTW9kaWZpZWQgZnJvbSBDTFJTLgorICovCisKKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvY29uZF9kZWFsdG9yLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3R5cGVfdXRpbHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmlub21pYWxfaGVhcF9iYXNlXy9iaW5vbWlhbF9oZWFwX2Jhc2VfLmhwcD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlX1R5cGUsIGNsYXNzIENtcF9GbiwgY2xhc3MgQWxsb2NhdG9yPgorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFwKKyAgICBiaW5vbWlhbF9oZWFwXzxWYWx1ZV9UeXBlLCBDbXBfRm4sIEFsbG9jYXRvcj4KKworI2RlZmluZSBQQl9EU19CQVNFX0NfREVDIFwKKyAgICBiaW5vbWlhbF9oZWFwX2Jhc2VfPFZhbHVlX1R5cGUsIENtcF9GbiwgQWxsb2NhdG9yPgorCisgICAgLyoqCisgICAgICogY2xhc3MgZGVzY3JpcHRpb24gPSAiOHl8XHwwfFwvfGk0MSBoMzRwIDc0ODEzIj4KKyAgICAgKiovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVfVHlwZSwgY2xhc3MgQ21wX0ZuLCBjbGFzcyBBbGxvY2F0b3I+CisgICAgY2xhc3MgYmlub21pYWxfaGVhcF8gOiBwdWJsaWMgUEJfRFNfQkFTRV9DX0RFQworICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBQQl9EU19CQVNFX0NfREVDIGJhc2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpub2RlX3BvaW50ZXIgbm9kZV9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X25vZGVfcG9pbnRlciBjb25zdF9ub2RlX3BvaW50ZXI7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIFZhbHVlX1R5cGUgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjpzaXplX3R5cGUgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6cG9pbnRlciBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfcG9pbnRfaXRlcmF0b3IgY29uc3RfcG9pbnRfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6cG9pbnRfaXRlcmF0b3IgcG9pbnRfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y21wX2ZuIGNtcF9mbjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKKworICAgICAgYmlub21pYWxfaGVhcF8oKTsKKworICAgICAgYmlub21pYWxfaGVhcF8oY29uc3QgQ21wX0ZuJiByX2NtcF9mbik7CisKKyAgICAgIGJpbm9taWFsX2hlYXBfKGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcik7CisKKyAgICAgIH5iaW5vbWlhbF9oZWFwXygpOworCisgICAgcHJvdGVjdGVkOgorI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfdmFsaWQoKSBjb25zdDsKKyNlbmRpZiAKKyAgICB9OworCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5vbWlhbF9oZWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfL2RlYnVnX2ZuX2ltcHMuaHBwPgorCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisKKyN1bmRlZiBQQl9EU19CQVNFX0NfREVDCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMDkzN2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmlub21pYWxfaGVhcF8vY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw2MSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGZvciBiaW5vbWlhbF9oZWFwXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorYmlub21pYWxfaGVhcF8oKQoreyBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykgfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorYmlub21pYWxfaGVhcF8oY29uc3QgQ21wX0ZuJiByX2NtcF9mbikgOgorICBQQl9EU19CQVNFX0NfREVDKHJfY21wX2ZuKQoreyBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykgfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorYmlub21pYWxfaGVhcF8oY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKSA6CisgIFBCX0RTX0JBU0VfQ19ERUMob3RoZXIpCit7IF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KSB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6Cit+Ymlub21pYWxfaGVhcF8oKSB7IH0KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfL2RlYnVnX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfL2RlYnVnX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYmVjNjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmlub21pYWxfaGVhcF8vZGVidWdfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw0OSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZGVidWdfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGZvciBiaW5vbWlhbF9oZWFwXy4KKyAqLworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF92YWxpZCgpIGNvbnN0Cit7IGJhc2VfdHlwZTo6YXNzZXJ0X3ZhbGlkKHRydWUpOyB9CisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5vbWlhbF9oZWFwX2Jhc2VfL2Jpbm9taWFsX2hlYXBfYmFzZV8uaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfYmFzZV8vYmlub21pYWxfaGVhcF9iYXNlXy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ2NmQxYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5vbWlhbF9oZWFwX2Jhc2VfL2Jpbm9taWFsX2hlYXBfYmFzZV8uaHBwCkBAIC0wLDAgKzEsMjM0IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBiaW5vbWlhbF9oZWFwX2Jhc2VfLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGEgYmFzZSBvZiBiaW5vbWlhbCBoZWFwcy4KKyAqLworCisjaWZuZGVmIFBCX0RTX0JJTk9NSUFMX0hFQVBfQkFTRV9IUFAKKyNkZWZpbmUgUEJfRFNfQklOT01JQUxfSEVBUF9CQVNFX0hQUAorCisvKgorICogQmlub21pYWwgaGVhcCBiYXNlLgorICogVnVpbGxlbWluIEogaXMgdGhlIG1hc3RhaC4KKyAqIE1vZGlmaWVkIGZyb20gQ0xSUy4KKyAqLworCisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2NvbmRfZGVhbHRvci5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90eXBlX3V0aWxzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL251bGxfbWV0YWRhdGEuaHBwPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQyBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVfVHlwZSwgY2xhc3MgQ21wX0ZuLCBjbGFzcyBBbGxvY2F0b3I+CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfQ19ERUMgXAorICAgIGJpbm9taWFsX2hlYXBfYmFzZV88VmFsdWVfVHlwZSwgQ21wX0ZuLCBBbGxvY2F0b3I+CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworI2RlZmluZSBQQl9EU19CQVNFX0NfREVDIFwKKyAgICBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXzxWYWx1ZV9UeXBlLCBDbXBfRm4sIFwKKwkJCQkgIHR5cGVuYW1lIEFsbG9jYXRvcjo6c2l6ZV90eXBlLCBcCisJCQkJICBBbGxvY2F0b3IsIGZhbHNlPgorI2Vsc2UgCisjZGVmaW5lIFBCX0RTX0JBU0VfQ19ERUMgXAorICAgIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfPFZhbHVlX1R5cGUsIENtcF9GbiwJXAorCQkJCXR5cGVuYW1lIEFsbG9jYXRvcjo6c2l6ZV90eXBlLCBBbGxvY2F0b3I+CisjZW5kaWYgCisKKyAgICAvKioKKyAgICAgKiBjbGFzcyBkZXNjcmlwdGlvbiA9ICI4eXxcfDB8XC98aTQxIGgzNHAgNzQ4MTMiPgorICAgICAqKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZV9UeXBlLCBjbGFzcyBDbXBfRm4sIGNsYXNzIEFsbG9jYXRvcj4KKyAgICBjbGFzcyBiaW5vbWlhbF9oZWFwX2Jhc2VfIDogcHVibGljIFBCX0RTX0JBU0VfQ19ERUMKKyAgICB7CisKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBQQl9EU19CQVNFX0NfREVDIGJhc2VfdHlwZTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpub2RlIG5vZGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpub2RlX3BvaW50ZXIgbm9kZV9wb2ludGVyOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3Rfbm9kZV9wb2ludGVyIGNvbnN0X25vZGVfcG9pbnRlcjsKKworICAgIHB1YmxpYzoKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnNpemVfdHlwZSBzaXplX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworCisgICAgICB0eXBlZGVmIFZhbHVlX1R5cGUgdmFsdWVfdHlwZTsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8CisJdmFsdWVfdHlwZT46Om90aGVyOjpwb2ludGVyCisgICAgICBwb2ludGVyOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKwl2YWx1ZV90eXBlPjo6b3RoZXI6OmNvbnN0X3BvaW50ZXIKKyAgICAgIGNvbnN0X3BvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCXZhbHVlX3R5cGU+OjpvdGhlcjo6cmVmZXJlbmNlCisgICAgICByZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCXZhbHVlX3R5cGU+OjpvdGhlcjo6Y29uc3RfcmVmZXJlbmNlCisgICAgICBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIFBCX0RTX0JBU0VfQ19ERUM6OmNvbnN0X3BvaW50X2l0ZXJhdG9yCisgICAgICBjb25zdF9wb2ludF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBQQl9EU19CQVNFX0NfREVDOjpwb2ludF9pdGVyYXRvciBwb2ludF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBQQl9EU19CQVNFX0NfREVDOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBQQl9EU19CQVNFX0NfREVDOjppdGVyYXRvciBpdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiBDbXBfRm4gY21wX2ZuOworCisgICAgICB0eXBlZGVmIEFsbG9jYXRvciBhbGxvY2F0b3JfdHlwZTsKKworICAgIHB1YmxpYzoKKworICAgICAgaW5saW5lIHBvaW50X2l0ZXJhdG9yCisgICAgICBwdXNoKGNvbnN0X3JlZmVyZW5jZSByX3ZhbCk7CisKKyAgICAgIHZvaWQKKyAgICAgIG1vZGlmeShwb2ludF9pdGVyYXRvciBpdCwgY29uc3RfcmVmZXJlbmNlIHJfbmV3X3ZhbCk7CisKKyAgICAgIGlubGluZSBjb25zdF9yZWZlcmVuY2UKKyAgICAgIHRvcCgpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBwb3AoKTsKKworICAgICAgdm9pZAorICAgICAgZXJhc2UocG9pbnRfaXRlcmF0b3IgaXQpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgY2xlYXIoKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZD4KKyAgICAgIHNpemVfdHlwZQorICAgICAgZXJhc2VfaWYoUHJlZCBwcmVkKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZD4KKyAgICAgIHZvaWQKKyAgICAgIHNwbGl0KFByZWQgcHJlZCwgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKTsKKworICAgICAgdm9pZAorICAgICAgam9pbihQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpOworCisgICAgcHJvdGVjdGVkOgorCisgICAgICBiaW5vbWlhbF9oZWFwX2Jhc2VfKCk7CisKKyAgICAgIGJpbm9taWFsX2hlYXBfYmFzZV8oY29uc3QgQ21wX0ZuJiByX2NtcF9mbik7CisKKyAgICAgIGJpbm9taWFsX2hlYXBfYmFzZV8oY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKTsKKworICAgICAgdm9pZAorICAgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpOworCisgICAgICB+Ymlub21pYWxfaGVhcF9iYXNlXygpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KKyAgICAgIHZvaWQKKyAgICAgIGNvcHlfZnJvbV9yYW5nZShJdCBmaXJzdF9pdCwgSXQgbGFzdF9pdCk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBmaW5kX21heCgpOworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF92YWxpZChib29sIHN0cmljdGx5X2Jpbm9taWFsKSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X21heCgpIGNvbnN0OworI2VuZGlmIAorCisgICAgcHJpdmF0ZToKKworICAgICAgaW5saW5lIG5vZGVfcG9pbnRlcgorICAgICAgZml4KG5vZGVfcG9pbnRlciBwX25kKSBjb25zdDsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIGluc2VydF9ub2RlKG5vZGVfcG9pbnRlciBwX25kKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIHJlbW92ZV9wYXJlbnRsZXNzX25vZGUobm9kZV9wb2ludGVyIHBfbmQpOworCisgICAgICBpbmxpbmUgbm9kZV9wb2ludGVyCisgICAgICBqb2luKG5vZGVfcG9pbnRlciBwX2xocywgbm9kZV9wb2ludGVyIHBfcmhzKSBjb25zdDsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfbm9kZV9jb25zaXN0ZW50KGNvbnN0X25vZGVfcG9pbnRlciwgYm9vbCwgYm9vbCkgY29uc3Q7CisjZW5kaWYKKworICAgIHByb3RlY3RlZDoKKyAgICAgIG5vZGVfcG9pbnRlciBtX3BfbWF4OworICAgIH07CisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfYmFzZV8vY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5vbWlhbF9oZWFwX2Jhc2VfL2RlYnVnX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmlub21pYWxfaGVhcF9iYXNlXy9maW5kX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmlub21pYWxfaGVhcF9iYXNlXy9pbnNlcnRfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5vbWlhbF9oZWFwX2Jhc2VfL2VyYXNlX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmlub21pYWxfaGVhcF9iYXNlXy9zcGxpdF9qb2luX2ZuX2ltcHMuaHBwPgorCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19UX0RFQworI3VuZGVmIFBCX0RTX0JBU0VfQ19ERUMKKworCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmlub21pYWxfaGVhcF9iYXNlXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5vbWlhbF9oZWFwX2Jhc2VfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NGM5MzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmlub21pYWxfaGVhcF9iYXNlXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDk3IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBjb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGEgYmFzZSBvZiBiaW5vbWlhbCBoZWFwcy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgSXQ+Cit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citjb3B5X2Zyb21fcmFuZ2UoSXQgZmlyc3RfaXQsIEl0IGxhc3RfaXQpCit7CisgIHdoaWxlIChmaXJzdF9pdCAhPSBsYXN0X2l0KQorICAgIHB1c2goKihmaXJzdF9pdCsrKSk7CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoZmFsc2UpOykKKyAgICB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitiaW5vbWlhbF9oZWFwX2Jhc2VfKCkgOgorICBtX3BfbWF4KE5VTEwpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKGZhbHNlKTspCisgICAgfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorYmlub21pYWxfaGVhcF9iYXNlXyhjb25zdCBDbXBfRm4mIHJfY21wX2ZuKSA6CisgIFBCX0RTX0JBU0VfQ19ERUMocl9jbXBfZm4pLAorICBtX3BfbWF4KE5VTEwpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKGZhbHNlKTspCisgICAgfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorYmlub21pYWxfaGVhcF9iYXNlXyhjb25zdCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpIDoKKyAgUEJfRFNfQkFTRV9DX0RFQyhvdGhlciksCisgIG1fcF9tYXgoTlVMTCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoZmFsc2UpOykKKyAgICB9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citzd2FwKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoZmFsc2UpOykKKworICAgIGJhc2VfdHlwZTo6c3dhcChvdGhlcik7CisKKyAgc3RkOjpzd2FwKG1fcF9tYXgsIG90aGVyLm1fcF9tYXgpOworCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKGZhbHNlKTspCisgICAgfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorfmJpbm9taWFsX2hlYXBfYmFzZV8oKQoreyB9CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5vbWlhbF9oZWFwX2Jhc2VfL2RlYnVnX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfYmFzZV8vZGVidWdfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEwN2YwZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5vbWlhbF9oZWFwX2Jhc2VfL2RlYnVnX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsOTggQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGRlYnVnX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYSBiYXNlIG9mIGJpbm9taWFsIGhlYXBzLgorICovCisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X3ZhbGlkKGJvb2wgc3RyaWN0bHlfYmlub21pYWwpIGNvbnN0Cit7CisgIGJhc2VfdHlwZTo6YXNzZXJ0X3ZhbGlkKCk7CisgIGFzc2VydF9ub2RlX2NvbnNpc3RlbnQoYmFzZV90eXBlOjptX3Bfcm9vdCwgc3RyaWN0bHlfYmlub21pYWwsIHRydWUpOworICBhc3NlcnRfbWF4KCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfbWF4KCkgY29uc3QKK3sKKyAgaWYgKG1fcF9tYXggPT0gTlVMTCkKKyAgICByZXR1cm47CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChiYXNlX3R5cGU6OnBhcmVudChtX3BfbWF4KSA9PSBOVUxMKTsKKyAgZm9yIChjb25zdF9pdGVyYXRvciBpdCA9IGJhc2VfdHlwZTo6YmVnaW4oKTsgaXQgIT0gYmFzZV90eXBlOjplbmQoKTsgKytpdCkKKyAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoIUNtcF9Gbjo6b3BlcmF0b3IoKShtX3BfbWF4LT5tX3ZhbHVlLAorCQkJCQkgICAgICBpdC5tX3BfbmQtPm1fdmFsdWUpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9ub2RlX2NvbnNpc3RlbnQoY29uc3Rfbm9kZV9wb2ludGVyIHBfbmQsIGJvb2wgc3RyaWN0bHlfYmlub21pYWwsCisJCSAgICAgICBib29sIGluY3JlYXNpbmcpIGNvbnN0Cit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChpbmNyZWFzaW5nIHx8IHN0cmljdGx5X2Jpbm9taWFsKTsKKyAgYmFzZV90eXBlOjphc3NlcnRfbm9kZV9jb25zaXN0ZW50KHBfbmQsIGZhbHNlKTsKKyAgaWYgKHBfbmQgPT0gTlVMTCkKKyAgICByZXR1cm47CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kLT5tX21ldGFkYXRhID09IGJhc2VfdHlwZTo6ZGVncmVlKHBfbmQpKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGJhc2VfdHlwZTo6c2l6ZV91bmRlcl9ub2RlKHBfbmQpID09CisJCSAgIHN0YXRpY19jYXN0PHNpemVfdHlwZT4oMSA8PCBwX25kLT5tX21ldGFkYXRhKSk7CisgIGFzc2VydF9ub2RlX2NvbnNpc3RlbnQocF9uZC0+bV9wX25leHRfc2libGluZywgc3RyaWN0bHlfYmlub21pYWwsIGluY3JlYXNpbmcpOworICBhc3NlcnRfbm9kZV9jb25zaXN0ZW50KHBfbmQtPm1fcF9sX2NoaWxkLCB0cnVlLCBmYWxzZSk7CisgIGlmIChwX25kLT5tX3BfbmV4dF9zaWJsaW5nICE9IE5VTEwpCisgICAgeworICAgICAgaWYgKGluY3JlYXNpbmcpCisJeworCSAgaWYgKHN0cmljdGx5X2Jpbm9taWFsKQorCSAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV9tZXRhZGF0YQorCQkJCSAgPCBwX25kLT5tX3BfbmV4dF9zaWJsaW5nLT5tX21ldGFkYXRhKTsKKwkgIGVsc2UKKwkgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQtPm1fbWV0YWRhdGEKKwkJCQkgIDw9IHBfbmQtPm1fcF9uZXh0X3NpYmxpbmctPm1fbWV0YWRhdGEpOworCX0KKyAgICAgIGVsc2UKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV9tZXRhZGF0YQorCQkJICAgICAgPiBwX25kLT5tX3BfbmV4dF9zaWJsaW5nLT5tX21ldGFkYXRhKTsKKyAgICB9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfYmFzZV8vZXJhc2VfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmlub21pYWxfaGVhcF9iYXNlXy9lcmFzZV9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGNmOTBjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfYmFzZV8vZXJhc2VfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxOTIgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGVyYXNlX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYSBiYXNlIG9mIGJpbm9taWFsIGhlYXBzLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citwb3AoKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCh0cnVlKTspCisgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKCFiYXNlX3R5cGU6OmVtcHR5KCkpOworCisgIGlmIChtX3BfbWF4ID09IE5VTEwpCisgICAgZmluZF9tYXgoKTsKKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9wX21heCAhPSBOVUxMKTsKKworICBub2RlX3BvaW50ZXIgcF9uZCA9IG1fcF9tYXg7CisKKyAgcmVtb3ZlX3BhcmVudGxlc3Nfbm9kZShtX3BfbWF4KTsKKworICBiYXNlX3R5cGU6OmFjdHVhbF9lcmFzZV9ub2RlKHBfbmQpOworCisgIG1fcF9tYXggPSBOVUxMOworCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKHRydWUpOykKKyAgICB9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CityZW1vdmVfcGFyZW50bGVzc19ub2RlKG5vZGVfcG9pbnRlciBwX25kKQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZCAhPSBOVUxMKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGJhc2VfdHlwZTo6cGFyZW50KHBfbmQpID09IE5VTEwpOworCisgIG5vZGVfcG9pbnRlciBwX2N1cl9yb290ID0gcF9uZCA9PSBiYXNlX3R5cGU6Om1fcF9yb290PworICAgIHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgOgorICAgIGJhc2VfdHlwZTo6bV9wX3Jvb3Q7CisKKyAgaWYgKHBfY3VyX3Jvb3QgIT0gTlVMTCkKKyAgICBwX2N1cl9yb290LT5tX3BfcHJldl9vcl9wYXJlbnQgPSBOVUxMOworCisgIGlmIChwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQgIT0gTlVMTCkKKyAgICBwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQtPm1fcF9uZXh0X3NpYmxpbmcgPSBwX25kLT5tX3BfbmV4dF9zaWJsaW5nOworCisgIGlmIChwX25kLT5tX3BfbmV4dF9zaWJsaW5nICE9IE5VTEwpCisgICAgcF9uZC0+bV9wX25leHRfc2libGluZy0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9uZC0+bV9wX3ByZXZfb3JfcGFyZW50OworCisgIG5vZGVfcG9pbnRlciBwX2NoaWxkID0gcF9uZC0+bV9wX2xfY2hpbGQ7CisKKyAgaWYgKHBfY2hpbGQgIT0gTlVMTCkKKyAgICB7CisgICAgICBwX2NoaWxkLT5tX3BfcHJldl9vcl9wYXJlbnQgPSBOVUxMOworCisgICAgICB3aGlsZSAocF9jaGlsZC0+bV9wX25leHRfc2libGluZyAhPSBOVUxMKQorCXBfY2hpbGQgPSBwX2NoaWxkLT5tX3BfbmV4dF9zaWJsaW5nOworICAgIH0KKworICBtX3BfbWF4ID0gTlVMTDsKKworICBiYXNlX3R5cGU6Om1fcF9yb290ID0gam9pbihwX2N1cl9yb290LCBwX2NoaWxkKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitjbGVhcigpCit7CisgIGJhc2VfdHlwZTo6Y2xlYXIoKTsKKworICBtX3BfbWF4ID0gTlVMTDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlKHBvaW50X2l0ZXJhdG9yIGl0KQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCh0cnVlKTspCisgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKCFiYXNlX3R5cGU6OmVtcHR5KCkpOworCisgIGJhc2VfdHlwZTo6YnViYmxlX3RvX3RvcChpdC5tX3BfbmQpOworCisgIHJlbW92ZV9wYXJlbnRsZXNzX25vZGUoaXQubV9wX25kKTsKKworICBiYXNlX3R5cGU6OmFjdHVhbF9lcmFzZV9ub2RlKGl0Lm1fcF9uZCk7CisKKyAgbV9wX21heCA9IE5VTEw7CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQodHJ1ZSk7KQorICAgIH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIFByZWQ+Cit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZV9pZihQcmVkIHByZWQpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKHRydWUpOykKKworICAgIGlmIChiYXNlX3R5cGU6OmVtcHR5KCkpCisgICAgICB7CisgICAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKHRydWUpOykKKworCSAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgYmFzZV90eXBlOjp0b19saW5rZWRfbGlzdCgpOworCisgIG5vZGVfcG9pbnRlciBwX291dCA9IGJhc2VfdHlwZTo6cHJ1bmUocHJlZCk7CisKKyAgc2l6ZV90eXBlIGVyc2QgPSAwOworCisgIHdoaWxlIChwX291dCAhPSBOVUxMKQorICAgIHsKKyAgICAgICsrZXJzZDsKKworICAgICAgbm9kZV9wb2ludGVyIHBfbmV4dCA9IHBfb3V0LT5tX3BfbmV4dF9zaWJsaW5nOworCisgICAgICBiYXNlX3R5cGU6OmFjdHVhbF9lcmFzZV9ub2RlKHBfb3V0KTsKKworICAgICAgcF9vdXQgPSBwX25leHQ7CisgICAgfQorCisgIG5vZGVfcG9pbnRlciBwX2N1ciA9IGJhc2VfdHlwZTo6bV9wX3Jvb3Q7CisKKyAgYmFzZV90eXBlOjptX3Bfcm9vdCA9IE5VTEw7CisKKyAgd2hpbGUgKHBfY3VyICE9IE5VTEwpCisgICAgeworICAgICAgbm9kZV9wb2ludGVyIHBfbmV4dCA9IHBfY3VyLT5tX3BfbmV4dF9zaWJsaW5nOworCisgICAgICBwX2N1ci0+bV9wX2xfY2hpbGQgPSBwX2N1ci0+bV9wX3ByZXZfb3JfcGFyZW50ID0gTlVMTDsKKworICAgICAgcF9jdXItPm1fbWV0YWRhdGEgPSAwOworCisgICAgICBwX2N1ci0+bV9wX25leHRfc2libGluZyA9IGJhc2VfdHlwZTo6bV9wX3Jvb3Q7CisKKyAgICAgIGlmIChiYXNlX3R5cGU6Om1fcF9yb290ICE9IE5VTEwpCisJYmFzZV90eXBlOjptX3Bfcm9vdC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9jdXI7CisKKyAgICAgIGJhc2VfdHlwZTo6bV9wX3Jvb3QgPSBwX2N1cjsKKworICAgICAgYmFzZV90eXBlOjptX3Bfcm9vdCA9IGZpeChiYXNlX3R5cGU6Om1fcF9yb290KTsKKworICAgICAgcF9jdXIgPSBwX25leHQ7CisgICAgfQorCisgIG1fcF9tYXggPSBOVUxMOworCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKHRydWUpOykKKworICAgIHJldHVybiBlcnNkOworfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmlub21pYWxfaGVhcF9iYXNlXy9maW5kX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfYmFzZV8vZmluZF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDdmNjUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfYmFzZV8vZmluZF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDczIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBmaW5kX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYSBiYXNlIG9mIGJpbm9taWFsIGhlYXBzLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X3JlZmVyZW5jZQorUEJfRFNfQ0xBU1NfQ19ERUM6OgordG9wKCkgY29uc3QKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoZmFsc2UpOykKKyAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoIWJhc2VfdHlwZTo6ZW1wdHkoKSk7CisKKyAgaWYgKG1fcF9tYXggPT0gTlVMTCkKKyAgICBjb25zdF9jYXN0PFBCX0RTX0NMQVNTX0NfREVDKiA+KHRoaXMpLT5maW5kX21heCgpOworCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3BfbWF4ICE9IE5VTEwpOworICByZXR1cm4gbV9wX21heC0+bV92YWx1ZTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2ZpbmRfbWF4KCkKK3sKKyAgbm9kZV9wb2ludGVyIHBfY3VyID0gYmFzZV90eXBlOjptX3Bfcm9vdDsKKworICBtX3BfbWF4ID0gcF9jdXI7CisKKyAgd2hpbGUgKHBfY3VyICE9IE5VTEwpCisgICAgeworICAgICAgaWYgKENtcF9Gbjo6b3BlcmF0b3IoKShtX3BfbWF4LT5tX3ZhbHVlLCBwX2N1ci0+bV92YWx1ZSkpCisJbV9wX21heCA9IHBfY3VyOworCisgICAgICBwX2N1ciA9IHBfY3VyLT5tX3BfbmV4dF9zaWJsaW5nOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfYmFzZV8vaW5zZXJ0X2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfYmFzZV8vaW5zZXJ0X2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2N2QwZGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmlub21pYWxfaGVhcF9iYXNlXy9pbnNlcnRfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwyMTYgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGluc2VydF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGEgYmFzZSBvZiBiaW5vbWlhbCBoZWFwcy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcHVzaChjb25zdF9yZWZlcmVuY2Ugcl92YWwpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKHRydWUpOykKKworICAgIG5vZGVfcG9pbnRlciBwX25kID0gYmFzZV90eXBlOjpnZXRfbmV3X25vZGVfZm9yX2luc2VydChyX3ZhbCk7CisKKyAgaW5zZXJ0X25vZGUocF9uZCk7CisKKyAgbV9wX21heCA9IE5VTEw7CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQodHJ1ZSk7KQorCisgICAgcmV0dXJuIHBvaW50X2l0ZXJhdG9yKHBfbmQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2luc2VydF9ub2RlKG5vZGVfcG9pbnRlciBwX25kKQoreworICBpZiAoYmFzZV90eXBlOjptX3Bfcm9vdCA9PSBOVUxMKQorICAgIHsKKyAgICAgIHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgPSBwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQgPQorCXBfbmQtPm1fcF9sX2NoaWxkID0gTlVMTDsKKworICAgICAgcF9uZC0+bV9tZXRhZGF0YSA9IDA7CisKKyAgICAgIGJhc2VfdHlwZTo6bV9wX3Jvb3QgPSBwX25kOworCisgICAgICByZXR1cm47CisgICAgfQorCisgIGlmIChiYXNlX3R5cGU6Om1fcF9yb290LT5tX21ldGFkYXRhID4gMCkKKyAgICB7CisgICAgICBwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQgPSBwX25kLT5tX3BfbF9jaGlsZCA9IE5VTEw7CisKKyAgICAgIHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgPSBiYXNlX3R5cGU6Om1fcF9yb290OworCisgICAgICBiYXNlX3R5cGU6Om1fcF9yb290LT5tX3BfcHJldl9vcl9wYXJlbnQgPSBwX25kOworCisgICAgICBiYXNlX3R5cGU6Om1fcF9yb290ID0gcF9uZDsKKworICAgICAgcF9uZC0+bV9tZXRhZGF0YSA9IDA7CisKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKENtcF9Gbjo6b3BlcmF0b3IoKShiYXNlX3R5cGU6Om1fcF9yb290LT5tX3ZhbHVlLCBwX25kLT5tX3ZhbHVlKSkKKyAgICB7CisgICAgICBwX25kLT5tX3BfbmV4dF9zaWJsaW5nID0gYmFzZV90eXBlOjptX3Bfcm9vdC0+bV9wX25leHRfc2libGluZzsKKworICAgICAgcF9uZC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gTlVMTDsKKworICAgICAgcF9uZC0+bV9tZXRhZGF0YSA9IDE7CisKKyAgICAgIHBfbmQtPm1fcF9sX2NoaWxkID0gYmFzZV90eXBlOjptX3Bfcm9vdDsKKworICAgICAgYmFzZV90eXBlOjptX3Bfcm9vdC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9uZDsKKworICAgICAgYmFzZV90eXBlOjptX3Bfcm9vdC0+bV9wX25leHRfc2libGluZyA9IE5VTEw7CisKKyAgICAgIGJhc2VfdHlwZTo6bV9wX3Jvb3QgPSBwX25kOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgPSBOVUxMOworCisgICAgICBwX25kLT5tX3BfbF9jaGlsZCA9IE5VTEw7CisKKyAgICAgIHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudCA9IGJhc2VfdHlwZTo6bV9wX3Jvb3Q7CisKKyAgICAgIHBfbmQtPm1fbWV0YWRhdGEgPSAwOworCisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoYmFzZV90eXBlOjptX3Bfcm9vdC0+bV9wX2xfY2hpbGQgPT0gMCk7CisgICAgICBiYXNlX3R5cGU6Om1fcF9yb290LT5tX3BfbF9jaGlsZCA9IHBfbmQ7CisKKyAgICAgIGJhc2VfdHlwZTo6bV9wX3Jvb3QtPm1fbWV0YWRhdGEgPSAxOworICAgIH0KKworICBiYXNlX3R5cGU6Om1fcF9yb290ID0gZml4KGJhc2VfdHlwZTo6bV9wX3Jvb3QpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2ZpeChub2RlX3BvaW50ZXIgcF9uZCkgY29uc3QKK3sKKyAgd2hpbGUgKHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgIT0gTlVMTCYmIAorCSBwX25kLT5tX21ldGFkYXRhID09IHBfbmQtPm1fcF9uZXh0X3NpYmxpbmctPm1fbWV0YWRhdGEpCisgICAgeworICAgICAgbm9kZV9wb2ludGVyIHBfbmV4dCA9IHBfbmQtPm1fcF9uZXh0X3NpYmxpbmc7CisKKyAgICAgIGlmIChDbXBfRm46Om9wZXJhdG9yKCkocF9uZC0+bV92YWx1ZSwgcF9uZXh0LT5tX3ZhbHVlKSkKKyAgICAgICAgeworCSAgcF9uZXh0LT5tX3BfcHJldl9vcl9wYXJlbnQgPQorCSAgICBwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQ7CisKKwkgIGlmIChwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQgIT0gTlVMTCkKKwkgICAgcF9uZC0+bV9wX3ByZXZfb3JfcGFyZW50LT5tX3BfbmV4dF9zaWJsaW5nID0gcF9uZXh0OworCisJICBiYXNlX3R5cGU6Om1ha2VfY2hpbGRfb2YocF9uZCwgcF9uZXh0KTsKKworCSAgKytwX25leHQtPm1fbWV0YWRhdGE7CisKKwkgIHBfbmQgPSBwX25leHQ7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworCSAgcF9uZC0+bV9wX25leHRfc2libGluZyA9IHBfbmV4dC0+bV9wX25leHRfc2libGluZzsKKworCSAgaWYgKHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgIT0gTlVMTCkKKwkgICAgcF9uZXh0LT5tX3BfbmV4dF9zaWJsaW5nID0gTlVMTDsKKworCSAgYmFzZV90eXBlOjptYWtlX2NoaWxkX29mKHBfbmV4dCwgcF9uZCk7CisKKwkgICsrcF9uZC0+bV9tZXRhZGF0YTsKKyAgICAgICAgfQorICAgIH0KKworICBpZiAocF9uZC0+bV9wX25leHRfc2libGluZyAhPSBOVUxMKQorICAgIHBfbmQtPm1fcF9uZXh0X3NpYmxpbmctPm1fcF9wcmV2X29yX3BhcmVudCA9IHBfbmQ7CisKKyAgcmV0dXJuIHBfbmQ7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cittb2RpZnkocG9pbnRfaXRlcmF0b3IgaXQsIGNvbnN0X3JlZmVyZW5jZSByX25ld192YWwpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKHRydWUpOykKKyAgICBub2RlX3BvaW50ZXIgcF9uZCA9IGl0Lm1fcF9uZDsKKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZCAhPSBOVUxMKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShiYXNlX3R5cGU6OmFzc2VydF9ub2RlX2NvbnNpc3RlbnQocF9uZCwgZmFsc2UpOykKKworICAgIGNvbnN0IGJvb2wgYnViYmxlX3VwID0gQ21wX0ZuOjpvcGVyYXRvcigpKHBfbmQtPm1fdmFsdWUsIHJfbmV3X3ZhbCk7CisKKyAgcF9uZC0+bV92YWx1ZSA9IHJfbmV3X3ZhbDsKKworICBpZiAoYnViYmxlX3VwKQorICAgIHsKKyAgICAgIG5vZGVfcG9pbnRlciBwX3BhcmVudCA9IGJhc2VfdHlwZTo6cGFyZW50KHBfbmQpOworCisgICAgICB3aGlsZSAocF9wYXJlbnQgIT0gTlVMTCYmIAorCSAgICAgQ21wX0ZuOjpvcGVyYXRvcigpKHBfcGFyZW50LT5tX3ZhbHVlLCBwX25kLT5tX3ZhbHVlKSkKKyAgICAgICAgeworCSAgYmFzZV90eXBlOjpzd2FwX3dpdGhfcGFyZW50KHBfbmQsIHBfcGFyZW50KTsKKworCSAgcF9wYXJlbnQgPSBiYXNlX3R5cGU6OnBhcmVudChwX25kKTsKKyAgICAgICAgfQorCisgICAgICBpZiAocF9uZC0+bV9wX3ByZXZfb3JfcGFyZW50ID09IE5VTEwpCisJYmFzZV90eXBlOjptX3Bfcm9vdCA9IHBfbmQ7CisKKyAgICAgIG1fcF9tYXggPSBOVUxMOworCisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCh0cnVlKTspCisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICBiYXNlX3R5cGU6OmJ1YmJsZV90b190b3AocF9uZCk7CisKKyAgcmVtb3ZlX3BhcmVudGxlc3Nfbm9kZShwX25kKTsKKworICBpbnNlcnRfbm9kZShwX25kKTsKKworICBtX3BfbWF4ID0gTlVMTDsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCh0cnVlKTspCisgICAgfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvYmlub21pYWxfaGVhcF9iYXNlXy9zcGxpdF9qb2luX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfYmFzZV8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzAxOTM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfYmFzZV8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDIzMiBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgc3BsaXRfam9pbl9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGEgYmFzZSBvZiBiaW5vbWlhbCBoZWFwcy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgUHJlZD4KK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3NwbGl0KFByZWQgcHJlZCwgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCh0cnVlKTspCisgICAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQodHJ1ZSk7KQorCisgICAgb3RoZXIuY2xlYXIoKTsKKworICBpZiAoYmFzZV90eXBlOjplbXB0eSgpKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKHRydWUpOykKKyAgICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQodHJ1ZSk7KQorCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgYmFzZV90eXBlOjp0b19saW5rZWRfbGlzdCgpOworCisgIG5vZGVfcG9pbnRlciBwX291dCA9IGJhc2VfdHlwZTo6cHJ1bmUocHJlZCk7CisKKyAgd2hpbGUgKHBfb3V0ICE9IE5VTEwpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGJhc2VfdHlwZTo6bV9zaXplID4gMCk7CisgICAgICAtLWJhc2VfdHlwZTo6bV9zaXplOworCisgICAgICArK290aGVyLm1fc2l6ZTsKKworICAgICAgbm9kZV9wb2ludGVyIHBfbmV4dCA9IHBfb3V0LT5tX3BfbmV4dF9zaWJsaW5nOworCisgICAgICBwX291dC0+bV9wX2xfY2hpbGQgPSBwX291dC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gTlVMTDsKKworICAgICAgcF9vdXQtPm1fbWV0YWRhdGEgPSAwOworCisgICAgICBwX291dC0+bV9wX25leHRfc2libGluZyA9IG90aGVyLm1fcF9yb290OworCisgICAgICBpZiAob3RoZXIubV9wX3Jvb3QgIT0gTlVMTCkKKwlvdGhlci5tX3Bfcm9vdC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9vdXQ7CisKKyAgICAgIG90aGVyLm1fcF9yb290ID0gcF9vdXQ7CisKKyAgICAgIG90aGVyLm1fcF9yb290ID0gb3RoZXIuZml4KG90aGVyLm1fcF9yb290KTsKKworICAgICAgcF9vdXQgPSBwX25leHQ7CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKHRydWUpOykKKworICAgIG5vZGVfcG9pbnRlciBwX2N1ciA9IGJhc2VfdHlwZTo6bV9wX3Jvb3Q7CisKKyAgYmFzZV90eXBlOjptX3Bfcm9vdCA9IE5VTEw7CisKKyAgd2hpbGUgKHBfY3VyICE9IE5VTEwpCisgICAgeworICAgICAgbm9kZV9wb2ludGVyIHBfbmV4dCA9IHBfY3VyLT5tX3BfbmV4dF9zaWJsaW5nOworCisgICAgICBwX2N1ci0+bV9wX2xfY2hpbGQgPSBwX2N1ci0+bV9wX3ByZXZfb3JfcGFyZW50ID0gTlVMTDsKKworICAgICAgcF9jdXItPm1fbWV0YWRhdGEgPSAwOworCisgICAgICBwX2N1ci0+bV9wX25leHRfc2libGluZyA9IGJhc2VfdHlwZTo6bV9wX3Jvb3Q7CisKKyAgICAgIGlmIChiYXNlX3R5cGU6Om1fcF9yb290ICE9IE5VTEwpCisJYmFzZV90eXBlOjptX3Bfcm9vdC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9jdXI7CisKKyAgICAgIGJhc2VfdHlwZTo6bV9wX3Jvb3QgPSBwX2N1cjsKKworICAgICAgYmFzZV90eXBlOjptX3Bfcm9vdCA9IGZpeChiYXNlX3R5cGU6Om1fcF9yb290KTsKKworICAgICAgcF9jdXIgPSBwX25leHQ7CisgICAgfQorCisgIG1fcF9tYXggPSBOVUxMOworCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKHRydWUpOykKKyAgICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCh0cnVlKTspCisgICAgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2pvaW4oUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCh0cnVlKTspCisgICAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQodHJ1ZSk7KQorCisgICAgbm9kZV9wb2ludGVyIHBfb3RoZXIgPSBvdGhlci5tX3Bfcm9vdDsKKworICBpZiAocF9vdGhlciAhPSBOVUxMKQorICAgIGRvCisgICAgICB7CisJbm9kZV9wb2ludGVyIHBfbmV4dCA9IHBfb3RoZXItPm1fcF9uZXh0X3NpYmxpbmc7CisKKwlzdGQ6OnN3YXAocF9vdGhlci0+bV9wX25leHRfc2libGluZywgcF9vdGhlci0+bV9wX3ByZXZfb3JfcGFyZW50KTsKKworCXBfb3RoZXIgPSBwX25leHQ7CisgICAgICB9CisgICAgd2hpbGUgKHBfb3RoZXIgIT0gTlVMTCk7CisKKyAgYmFzZV90eXBlOjptX3Bfcm9vdCA9IGpvaW4oYmFzZV90eXBlOjptX3Bfcm9vdCwgb3RoZXIubV9wX3Jvb3QpOworICBiYXNlX3R5cGU6Om1fc2l6ZSArPSBvdGhlci5tX3NpemU7CisgIG1fcF9tYXggPSBOVUxMOworCisgIG90aGVyLm1fcF9yb290ID0gTlVMTDsKKyAgb3RoZXIubV9zaXplID0gMDsKKyAgb3RoZXIubV9wX21heCA9IE5VTEw7CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQodHJ1ZSk7KQorICAgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKHRydWUpOykKKyAgICB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6Ogoram9pbihub2RlX3BvaW50ZXIgcF9saHMsIG5vZGVfcG9pbnRlciBwX3JocykgY29uc3QKK3sKKyAgbm9kZV9wb2ludGVyIHBfcmV0ID0gTlVMTDsKKworICBub2RlX3BvaW50ZXIgcF9jdXIgPSBOVUxMOworCisgIHdoaWxlIChwX2xocyAhPSBOVUxMIHx8IHBfcmhzICE9IE5VTEwpCisgICAgeworICAgICAgaWYgKHBfcmhzID09IE5VTEwpCisgICAgICAgIHsKKwkgIGlmIChwX2N1ciA9PSBOVUxMKQorCSAgICBwX3JldCA9IHBfY3VyID0gcF9saHM7CisJICBlbHNlCisgICAgICAgICAgICB7CisJICAgICAgcF9jdXItPm1fcF9uZXh0X3NpYmxpbmcgPSBwX2xoczsKKworCSAgICAgIHBfbGhzLT5tX3BfcHJldl9vcl9wYXJlbnQgPSBwX2N1cjsKKyAgICAgICAgICAgIH0KKworCSAgcF9jdXIgPSBwX2xocyA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHBfbGhzID09IE5VTEwgfHwgcF9yaHMtPm1fbWV0YWRhdGEgPCBwX2xocy0+bV9tZXRhZGF0YSkKKyAgICAgICAgeworCSAgaWYgKHBfY3VyID09IE5VTEwpCisgICAgICAgICAgICB7CisJICAgICAgcF9yZXQgPSBwX2N1ciA9IHBfcmhzOworCisJICAgICAgcF9yaHMgPSBwX3Jocy0+bV9wX3ByZXZfb3JfcGFyZW50OworICAgICAgICAgICAgfQorCSAgZWxzZQorICAgICAgICAgICAgeworCSAgICAgIHBfY3VyLT5tX3BfbmV4dF9zaWJsaW5nID0gcF9yaHM7CisKKwkgICAgICBwX3JocyA9IHBfcmhzLT5tX3BfcHJldl9vcl9wYXJlbnQ7CisKKwkgICAgICBwX2N1ci0+bV9wX25leHRfc2libGluZy0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9jdXI7CisKKwkgICAgICBwX2N1ciA9IHBfY3VyLT5tX3BfbmV4dF9zaWJsaW5nOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlIGlmIChwX2xocy0+bV9tZXRhZGF0YSA8IHBfcmhzLT5tX21ldGFkYXRhKQorICAgICAgICB7CisJICBpZiAocF9jdXIgPT0gTlVMTCkKKwkgICAgcF9yZXQgPSBwX2N1ciA9IHBfbGhzOworCSAgZWxzZQorICAgICAgICAgICAgeworCSAgICAgIHBfY3VyLT5tX3BfbmV4dF9zaWJsaW5nID0gcF9saHM7CisKKwkgICAgICBwX2xocy0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9jdXI7CisKKwkgICAgICBwX2N1ciA9IHBfY3VyLT5tX3BfbmV4dF9zaWJsaW5nOworICAgICAgICAgICAgfQorCisJICBwX2xocyA9IHBfY3VyLT5tX3BfbmV4dF9zaWJsaW5nOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKwkgIG5vZGVfcG9pbnRlciBwX25leHRfcmhzID0gcF9yaHMtPm1fcF9wcmV2X29yX3BhcmVudDsKKworCSAgcF9yaHMtPm1fcF9uZXh0X3NpYmxpbmcgPSBwX2xoczsKKworCSAgcF9saHMgPSBmaXgocF9yaHMpOworCisJICBwX3JocyA9IHBfbmV4dF9yaHM7CisgICAgICAgIH0KKyAgICB9CisKKyAgaWYgKHBfY3VyICE9IE5VTEwpCisgICAgcF9jdXItPm1fcF9uZXh0X3NpYmxpbmcgPSBOVUxMOworCisgIGlmIChwX3JldCAhPSBOVUxMKQorICAgIHBfcmV0LT5tX3BfcHJldl9vcl9wYXJlbnQgPSBOVUxMOworCisgIHJldHVybiBwX3JldDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9jY19odF9tYXBfLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vY2NfaHRfbWFwXy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVlZmFiZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vY2NfaHRfbWFwXy5ocHAKQEAgLTAsMCArMSw2MzYgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGNjX2h0X21hcF8uaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgY2NfaHRfbWFwXy4KKyAqLworCisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDxpdGVyYXRvcj4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2NvbmRfZGVhbHRvci5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL3RhZ19hbmRfdHJhaXQuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9yYW5nZWRfaGFzaF9mbi5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90eXBlc190cmFpdHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9leGNlcHRpb24uaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvZXFfZm4vaGFzaF9lcV9mbi5ocHA+CisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2RlYnVnX21hcF9iYXNlLmhwcD4KKyNlbmRpZiAKKyNpZmRlZiBQQl9EU19IVF9NQVBfVFJBQ0VfCisjaW5jbHVkZSA8aW9zdHJlYW0+CisjZW5kaWYgCisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0eXBlbmFtZSBIYXNoX0ZuLCBcCisJICAgICB0eXBlbmFtZSBFcV9GbiwgdHlwZW5hbWUgQWxsb2NhdG9yLCBib29sIFN0b3JlX0hhc2gsIFwKKwkgICAgIHR5cGVuYW1lIENvbWJfSGFzaF9GbiwgdHlwZW5hbWUgUmVzaXplX1BvbGljeT4KKworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfTkFNRSBjY19odF9tYXBfZGF0YV8KKyNlbmRpZiAKKworI2lmZGVmIFBCX0RTX0RBVEFfRkFMU0VfSU5ESUNBVE9SCisjZGVmaW5lIFBCX0RTX0NMQVNTX05BTUUgY2NfaHRfbWFwX25vX2RhdGFfCisjZW5kaWYgCisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfQ19ERUMgXAorICAgIFBCX0RTX0NMQVNTX05BTUU8S2V5LCBNYXBwZWQsIEhhc2hfRm4sIEVxX0ZuLCBBbGxvY2F0b3IsCVwKKwkJICAgICBTdG9yZV9IYXNoLCBDb21iX0hhc2hfRm4sIFJlc2l6ZV9Qb2xpY3k+CisKKyNkZWZpbmUgUEJfRFNfSEFTSF9FUV9GTl9DX0RFQyBcCisgICAgaGFzaF9lcV9mbjxLZXksIEVxX0ZuLCBBbGxvY2F0b3IsIFN0b3JlX0hhc2g+CisKKyNkZWZpbmUgUEJfRFNfUkFOR0VEX0hBU0hfRk5fQ19ERUMgXAorICAgIHJhbmdlZF9oYXNoX2ZuPEtleSwJSGFzaF9GbiwgQWxsb2NhdG9yLCBDb21iX0hhc2hfRm4sIFN0b3JlX0hhc2g+CisKKyNkZWZpbmUgUEJfRFNfVFlQRVNfVFJBSVRTX0NfREVDIFwKKyAgICB0eXBlc190cmFpdHM8S2V5LCBNYXBwZWQsIEFsbG9jYXRvciwgU3RvcmVfSGFzaD4KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisjZGVmaW5lIFBCX0RTX0RFQlVHX01BUF9CQVNFX0NfREVDIFwKKyAgICBkZWJ1Z19tYXBfYmFzZTxLZXksCUVxX0ZuLCB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxLZXk+OjpvdGhlcjo6Y29uc3RfcmVmZXJlbmNlPgorI2VuZGlmIAorCisjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorI2RlZmluZSBQQl9EU19WMkYoWCkgKFgpLmZpcnN0CisjZGVmaW5lIFBCX0RTX1YyUyhYKSAoWCkuc2Vjb25kCisjZW5kaWYgCisKKyNpZmRlZiBQQl9EU19EQVRBX0ZBTFNFX0lORElDQVRPUgorI2RlZmluZSBQQl9EU19WMkYoWCkgKFgpCisjZGVmaW5lIFBCX0RTX1YyUyhYKSBNYXBwZWRfRGF0YSgpCisjZW5kaWYgCisKKyAgICAvLyA8MDExaSRpMHxcfC08fC18NGl8XHxpfFx8ZyB8LXw0JHwtfCA3NDgxMy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksCisJICAgICB0eXBlbmFtZSBNYXBwZWQsCisJICAgICB0eXBlbmFtZSBIYXNoX0ZuLAorCSAgICAgdHlwZW5hbWUgRXFfRm4sCisJICAgICB0eXBlbmFtZSBBbGxvY2F0b3IsCisJICAgICBib29sIFN0b3JlX0hhc2gsCisJICAgICB0eXBlbmFtZSBDb21iX0hhc2hfRm4sCisJICAgICB0eXBlbmFtZSBSZXNpemVfUG9saWN5ID4KKyAgICBjbGFzcyBQQl9EU19DTEFTU19OQU1FOgorI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICBwcm90ZWN0ZWQgUEJfRFNfREVCVUdfTUFQX0JBU0VfQ19ERUMsCisjZW5kaWYgCisgICAgICBwdWJsaWMgUEJfRFNfSEFTSF9FUV9GTl9DX0RFQywKKyAgICAgIHB1YmxpYyBSZXNpemVfUG9saWN5LAorICAgICAgcHVibGljIFBCX0RTX1JBTkdFRF9IQVNIX0ZOX0NfREVDLAorICAgICAgcHVibGljIFBCX0RTX1RZUEVTX1RSQUlUU19DX0RFQworICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBQQl9EU19UWVBFU19UUkFJVFNfQ19ERUMgdHJhaXRzX2Jhc2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjpjb21wX2hhc2ggY29tcF9oYXNoOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlXzsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OnBvaW50ZXIgcG9pbnRlcl87CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXJfOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6cmVmZXJlbmNlIHJlZmVyZW5jZV87CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlXzsKKworICAgICAgc3RydWN0IGVudHJ5IDogcHVibGljIHRyYWl0c19iYXNlOjpzdG9yZWRfdmFsdWVfdHlwZQorICAgICAgeworCXR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPGVudHJ5Pjo6b3RoZXI6OnBvaW50ZXIgbV9wX25leHQ7CisgICAgICB9OworCisgICAgICB0eXBlZGVmIGNvbmRfZGVhbHRvcjxlbnRyeSwgQWxsb2NhdG9yPiBjb25kX2RlYWx0b3JfdDsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxlbnRyeT46Om90aGVyIGVudHJ5X2FsbG9jYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgZW50cnlfYWxsb2NhdG9yOjpwb2ludGVyIGVudHJ5X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGVudHJ5X2FsbG9jYXRvcjo6Y29uc3RfcG9pbnRlciBjb25zdF9lbnRyeV9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBlbnRyeV9hbGxvY2F0b3I6OnJlZmVyZW5jZSBlbnRyeV9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGVudHJ5X2FsbG9jYXRvcjo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X2VudHJ5X3JlZmVyZW5jZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxlbnRyeV9wb2ludGVyPjo6b3RoZXIgZW50cnlfcG9pbnRlcl9hbGxvY2F0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGVudHJ5X3BvaW50ZXJfYWxsb2NhdG9yOjpwb2ludGVyIGVudHJ5X3BvaW50ZXJfYXJyYXk7CisKKyAgICAgIHR5cGVkZWYgUEJfRFNfUkFOR0VEX0hBU0hfRk5fQ19ERUMgcmFuZ2VkX2hhc2hfZm5fYmFzZTsKKyAgICAgIHR5cGVkZWYgUEJfRFNfSEFTSF9FUV9GTl9DX0RFQyBoYXNoX2VxX2ZuX2Jhc2U7CisgICAgICB0eXBlZGVmIFJlc2l6ZV9Qb2xpY3kgcmVzaXplX2Jhc2U7CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgdHlwZWRlZiBQQl9EU19ERUJVR19NQVBfQkFTRV9DX0RFQyBkZWJ1Z19iYXNlOworI2VuZGlmIAorCisjZGVmaW5lIFBCX0RTX0dFTl9QT1Mgc3RkOjpwYWlyPGVudHJ5X3BvaW50ZXIsIHR5cGVuYW1lIEFsbG9jYXRvcjo6c2l6ZV90eXBlPgorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC91bm9yZGVyZWRfaXRlcmF0b3IvY29uc3RfcG9pbnRfaXRlcmF0b3IuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdW5vcmRlcmVkX2l0ZXJhdG9yL3BvaW50X2l0ZXJhdG9yLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3Vub3JkZXJlZF9pdGVyYXRvci9jb25zdF9pdGVyYXRvci5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC91bm9yZGVyZWRfaXRlcmF0b3IvaXRlcmF0b3IuaHBwPgorCisjdW5kZWYgUEJfRFNfR0VOX1BPUworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBBbGxvY2F0b3IgYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6c2l6ZV90eXBlIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBIYXNoX0ZuIGhhc2hfZm47CisgICAgICB0eXBlZGVmIEVxX0ZuIGVxX2ZuOworICAgICAgdHlwZWRlZiBDb21iX0hhc2hfRm4gY29tYl9oYXNoX2ZuOworICAgICAgdHlwZWRlZiBSZXNpemVfUG9saWN5IHJlc2l6ZV9wb2xpY3k7CisKKyAgICAgIGVudW0KKwl7CisJICBzdG9yZV9oYXNoID0gU3RvcmVfSGFzaAorCX07CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmtleV90eXBlIGtleV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6a2V5X3BvaW50ZXIga2V5X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjpjb25zdF9rZXlfcG9pbnRlciBjb25zdF9rZXlfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmtleV9yZWZlcmVuY2Uga2V5X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmNvbnN0X2tleV9yZWZlcmVuY2UgY29uc3Rfa2V5X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6Om1hcHBlZF90eXBlIG1hcHBlZF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6bWFwcGVkX3BvaW50ZXIgbWFwcGVkX3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjpjb25zdF9tYXBwZWRfcG9pbnRlciBjb25zdF9tYXBwZWRfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6Om1hcHBlZF9yZWZlcmVuY2UgbWFwcGVkX3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmNvbnN0X21hcHBlZF9yZWZlcmVuY2UgY29uc3RfbWFwcGVkX3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OnBvaW50ZXIgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OnJlZmVyZW5jZSByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOworCisjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorICAgICAgdHlwZWRlZiBwb2ludF9pdGVyYXRvcl8gcG9pbnRfaXRlcmF0b3I7CisjZW5kaWYgCisKKyNpZmRlZiBQQl9EU19EQVRBX0ZBTFNFX0lORElDQVRPUgorICAgICAgdHlwZWRlZiBjb25zdF9wb2ludF9pdGVyYXRvcl8gcG9pbnRfaXRlcmF0b3I7CisjZW5kaWYgCisKKyAgICAgIHR5cGVkZWYgY29uc3RfcG9pbnRfaXRlcmF0b3JfIGNvbnN0X3BvaW50X2l0ZXJhdG9yOworCisjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorICAgICAgdHlwZWRlZiBpdGVyYXRvcl8gaXRlcmF0b3I7CisjZW5kaWYgCisKKyNpZmRlZiBQQl9EU19EQVRBX0ZBTFNFX0lORElDQVRPUgorICAgICAgdHlwZWRlZiBjb25zdF9pdGVyYXRvcl8gaXRlcmF0b3I7CisjZW5kaWYgCisKKyAgICAgIHR5cGVkZWYgY29uc3RfaXRlcmF0b3JfIGNvbnN0X2l0ZXJhdG9yOworCisgICAgICBQQl9EU19DTEFTU19OQU1FKCk7CisKKyAgICAgIFBCX0RTX0NMQVNTX05BTUUoY29uc3QgSGFzaF9GbiYpOworCisgICAgICBQQl9EU19DTEFTU19OQU1FKGNvbnN0IEhhc2hfRm4mLCBjb25zdCBFcV9GbiYpOworCisgICAgICBQQl9EU19DTEFTU19OQU1FKGNvbnN0IEhhc2hfRm4mLCBjb25zdCBFcV9GbiYsIGNvbnN0IENvbWJfSGFzaF9GbiYpOworCisgICAgICBQQl9EU19DTEFTU19OQU1FKGNvbnN0IEhhc2hfRm4mLCBjb25zdCBFcV9GbiYsIGNvbnN0IENvbWJfSGFzaF9GbiYsIAorCQkgICAgICAgY29uc3QgUmVzaXplX1BvbGljeSYpOworCisgICAgICBQQl9EU19DTEFTU19OQU1FKGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJik7CisKKyAgICAgIHZpcnR1YWwKKyAgICAgIH5QQl9EU19DTEFTU19OQU1FKCk7CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXQ+CisgICAgICB2b2lkCisgICAgICBjb3B5X2Zyb21fcmFuZ2UoSXQsIEl0KTsKKworICAgICAgdm9pZAorICAgICAgaW5pdGlhbGl6ZSgpOworCisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBlbXB0eSgpIGNvbnN0OworCisgICAgICBIYXNoX0ZuJiAKKyAgICAgIGdldF9oYXNoX2ZuKCk7CisKKyAgICAgIGNvbnN0IEhhc2hfRm4mIAorICAgICAgZ2V0X2hhc2hfZm4oKSBjb25zdDsKKworICAgICAgRXFfRm4mIAorICAgICAgZ2V0X2VxX2ZuKCk7CisKKyAgICAgIGNvbnN0IEVxX0ZuJiAKKyAgICAgIGdldF9lcV9mbigpIGNvbnN0OworCisgICAgICBDb21iX0hhc2hfRm4mIAorICAgICAgZ2V0X2NvbWJfaGFzaF9mbigpOworCisgICAgICBjb25zdCBDb21iX0hhc2hfRm4mIAorICAgICAgZ2V0X2NvbWJfaGFzaF9mbigpIGNvbnN0OworCisgICAgICBSZXNpemVfUG9saWN5JiAKKyAgICAgIGdldF9yZXNpemVfcG9saWN5KCk7CisKKyAgICAgIGNvbnN0IFJlc2l6ZV9Qb2xpY3kmIAorICAgICAgZ2V0X3Jlc2l6ZV9wb2xpY3koKSBjb25zdDsKKworICAgICAgaW5saW5lIHN0ZDo6cGFpcjxwb2ludF9pdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydChjb25zdF9yZWZlcmVuY2Ugcl92YWwpCisgICAgICB7IHJldHVybiBpbnNlcnRfaW1wKHJfdmFsLCB0cmFpdHNfYmFzZTo6bV9zdG9yZV9leHRyYV9pbmRpY2F0b3IpOyB9CisKKyAgICAgIGlubGluZSBtYXBwZWRfcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpCisgICAgICB7CisjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorCXJldHVybiAoc3Vic2NyaXB0X2ltcChyX2tleSwgdHJhaXRzX2Jhc2U6Om1fc3RvcmVfZXh0cmFfaW5kaWNhdG9yKSk7CisjZWxzZSAKKwlpbnNlcnQocl9rZXkpOworCXJldHVybiB0cmFpdHNfYmFzZTo6c19udWxsX21hcHBlZDsKKyNlbmRpZiAKKyAgICAgIH0KKworICAgICAgaW5saW5lIHBvaW50X2l0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0X2tleV9yZWZlcmVuY2UpOworCisgICAgICBpbmxpbmUgY29uc3RfcG9pbnRfaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Rfa2V5X3JlZmVyZW5jZSkgY29uc3Q7CisKKyAgICAgIGlubGluZSBwb2ludF9pdGVyYXRvcgorICAgICAgZmluZF9lbmQoKTsKKworICAgICAgaW5saW5lIGNvbnN0X3BvaW50X2l0ZXJhdG9yCisgICAgICBmaW5kX2VuZCgpIGNvbnN0OworCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgZXJhc2UoY29uc3Rfa2V5X3JlZmVyZW5jZSk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFByZWQ+CisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBlcmFzZV9pZihQcmVkKTsKKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKTsKKworICAgICAgaW5saW5lIGl0ZXJhdG9yCisgICAgICBiZWdpbigpOworCisgICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBpdGVyYXRvcgorICAgICAgZW5kKCk7CisKKyAgICAgIGlubGluZSBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3Q7CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X3ZhbGlkKCkgY29uc3Q7CisjZW5kaWYgCisKKyNpZmRlZiBQQl9EU19IVF9NQVBfVFJBQ0VfCisgICAgICB2b2lkCisgICAgICB0cmFjZSgpIGNvbnN0OworI2VuZGlmIAorCisgICAgcHJpdmF0ZToKKyAgICAgIHZvaWQKKyAgICAgIGRlYWxsb2NhdGVfYWxsKCk7CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBkb19yZXNpemVfaWZfbmVlZGVkKCk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBkb19yZXNpemVfaWZfbmVlZGVkX25vX3Rocm93KCk7CisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZV9pbXAoc2l6ZV90eXBlIG5ld19zaXplKTsKKworICAgICAgdm9pZAorICAgICAgZG9fcmVzaXplKHNpemVfdHlwZSBuZXdfc2l6ZSk7CisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZV9pbXBfbm9fZXhjZXB0aW9ucyhzaXplX3R5cGUsIGVudHJ5X3BvaW50ZXJfYXJyYXksIHNpemVfdHlwZSk7CisKKyAgICAgIGlubGluZSBlbnRyeV9wb2ludGVyCisgICAgICByZXNpemVfaW1wX25vX2V4Y2VwdGlvbnNfcmVhc3NpZ25fcG9pbnRlcihlbnRyeV9wb2ludGVyLCBlbnRyeV9wb2ludGVyX2FycmF5LCBmYWxzZV90eXBlKTsKKworICAgICAgaW5saW5lIGVudHJ5X3BvaW50ZXIKKyAgICAgIHJlc2l6ZV9pbXBfbm9fZXhjZXB0aW9uc19yZWFzc2lnbl9wb2ludGVyKGVudHJ5X3BvaW50ZXIsIGVudHJ5X3BvaW50ZXJfYXJyYXksIHRydWVfdHlwZSk7CisKKyAgICAgIHZvaWQKKyAgICAgIGRlYWxsb2NhdGVfbGlua3NfaW5fbGlzdChlbnRyeV9wb2ludGVyKTsKKworICAgICAgaW5saW5lIGVudHJ5X3BvaW50ZXIKKyAgICAgIGdldF9lbnRyeShjb25zdF9yZWZlcmVuY2UsIGZhbHNlX3R5cGUpOworCisgICAgICBpbmxpbmUgZW50cnlfcG9pbnRlcgorICAgICAgZ2V0X2VudHJ5KGNvbnN0X3JlZmVyZW5jZSwgdHJ1ZV90eXBlKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIHJlbHNfZW50cnkoZW50cnlfcG9pbnRlcik7CisKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisgICAgICBpbmxpbmUgbWFwcGVkX3JlZmVyZW5jZQorICAgICAgc3Vic2NyaXB0X2ltcChjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5LCBmYWxzZV90eXBlKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgICAgICBjb25zdCBzaXplX3R5cGUgcG9zID0gcmFuZ2VkX2hhc2hfZm5fYmFzZTo6b3BlcmF0b3IoKShyX2tleSk7CisJZW50cnlfcG9pbnRlciBwX2UgPSBtX2VudHJpZXNbcG9zXTsKKwlyZXNpemVfYmFzZTo6bm90aWZ5X2luc2VydF9zZWFyY2hfc3RhcnQoKTsKKworCXdoaWxlIChwX2UgIT0gTlVMTCAKKwkgICAgICAgJiYgIWhhc2hfZXFfZm5fYmFzZTo6b3BlcmF0b3IoKShwX2UtPm1fdmFsdWUuZmlyc3QsIHJfa2V5KSkKKwkgIHsKKwkgICAgcmVzaXplX2Jhc2U6Om5vdGlmeV9pbnNlcnRfc2VhcmNoX2NvbGxpc2lvbigpOworCSAgICBwX2UgPSBwX2UtPm1fcF9uZXh0OworCSAgfQorCisJcmVzaXplX2Jhc2U6Om5vdGlmeV9pbnNlcnRfc2VhcmNoX2VuZCgpOworCWlmIChwX2UgIT0gTlVMTCkKKwkgIHsKKwkgICAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpjaGVja19rZXlfZXhpc3RzKHJfa2V5KTspCisJICAgIHJldHVybiAocF9lLT5tX3ZhbHVlLnNlY29uZCk7CisJICB9CisKKwlfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9kb2VzX25vdF9leGlzdChyX2tleSk7KQorCXJldHVybiBpbnNlcnRfbmV3X2ltcCh2YWx1ZV90eXBlKHJfa2V5LCBtYXBwZWRfdHlwZSgpKSwgcG9zKS0+c2Vjb25kOworICAgICAgfQorCisgICAgICBpbmxpbmUgbWFwcGVkX3JlZmVyZW5jZQorICAgICAgc3Vic2NyaXB0X2ltcChjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5LCB0cnVlX3R5cGUpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisJY29tcF9oYXNoIHBvc19oYXNoX3BhaXIgPSByYW5nZWRfaGFzaF9mbl9iYXNlOjpvcGVyYXRvcigpKHJfa2V5KTsKKwllbnRyeV9wb2ludGVyIHBfZSA9IG1fZW50cmllc1twb3NfaGFzaF9wYWlyLmZpcnN0XTsKKwlyZXNpemVfYmFzZTo6bm90aWZ5X2luc2VydF9zZWFyY2hfc3RhcnQoKTsKKwl3aGlsZSAocF9lICE9IE5VTEwgJiYgCisJICAgICAgICFoYXNoX2VxX2ZuX2Jhc2U6Om9wZXJhdG9yKCkocF9lLT5tX3ZhbHVlLmZpcnN0LCBwX2UtPm1faGFzaCwgcl9rZXksIHBvc19oYXNoX3BhaXIuc2Vjb25kKSkKKwkgIHsKKwkgICAgcmVzaXplX2Jhc2U6Om5vdGlmeV9pbnNlcnRfc2VhcmNoX2NvbGxpc2lvbigpOworCSAgICBwX2UgPSBwX2UtPm1fcF9uZXh0OworCSAgfQorCisJcmVzaXplX2Jhc2U6Om5vdGlmeV9pbnNlcnRfc2VhcmNoX2VuZCgpOworCWlmIChwX2UgIT0gTlVMTCkKKwkgIHsKKwkgICAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpjaGVja19rZXlfZXhpc3RzKHJfa2V5KTspCisJICAgIHJldHVybiBwX2UtPm1fdmFsdWUuc2Vjb25kOworCSAgfQorCisJX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpjaGVja19rZXlfZG9lc19ub3RfZXhpc3Qocl9rZXkpOykKKwlyZXR1cm4gaW5zZXJ0X25ld19pbXAodmFsdWVfdHlwZShyX2tleSwgbWFwcGVkX3R5cGUoKSksIAorCQkJICAgICAgcG9zX2hhc2hfcGFpciktPnNlY29uZDsKKyAgICAgIH0KKyNlbmRpZiAKKworICAgICAgaW5saW5lIHN0ZDo6cGFpcjxwb2ludF9pdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydF9pbXAoY29uc3RfcmVmZXJlbmNlLCBmYWxzZV90eXBlKTsKKworICAgICAgaW5saW5lIHN0ZDo6cGFpcjxwb2ludF9pdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydF9pbXAoY29uc3RfcmVmZXJlbmNlLCB0cnVlX3R5cGUpOworCisgICAgICBpbmxpbmUgcG9pbnRlcgorICAgICAgaW5zZXJ0X25ld19pbXAoY29uc3RfcmVmZXJlbmNlIHJfdmFsLCBzaXplX3R5cGUgcG9zKQorICAgICAgeworCWlmIChkb19yZXNpemVfaWZfbmVlZGVkKCkpCisJICBwb3MgPSByYW5nZWRfaGFzaF9mbl9iYXNlOjpvcGVyYXRvcigpKFBCX0RTX1YyRihyX3ZhbCkpOworCisJLy8gRm9sbG93aW5nIGxpbmVzIG1pZ2h0IHRocm93IGFuIGV4Y2VwdGlvbi4KKwllbnRyeV9wb2ludGVyIHBfZSA9IGdldF9lbnRyeShyX3ZhbCwgdHJhaXRzX2Jhc2U6Om1fbm9fdGhyb3dfY29waWVzX2luZGljYXRvcik7CisKKwkvLyBBdCB0aGlzIHBvaW50IG5vIGV4Y2VwdGlvbnMgY2FuIGJlIHRocm93bi4KKwlwX2UtPm1fcF9uZXh0ID0gbV9lbnRyaWVzW3Bvc107CisJbV9lbnRyaWVzW3Bvc10gPSBwX2U7CisJcmVzaXplX2Jhc2U6Om5vdGlmeV9pbnNlcnRlZCgrK21fbnVtX3VzZWRfZSk7CisKKwlfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6Omluc2VydF9uZXcoUEJfRFNfVjJGKHJfdmFsKSk7KQorCV9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorCXJldHVybiAmcF9lLT5tX3ZhbHVlOworICAgICAgfQorCisgICAgICBpbmxpbmUgcG9pbnRlcgorICAgICAgaW5zZXJ0X25ld19pbXAoY29uc3RfcmVmZXJlbmNlIHJfdmFsLCBjb21wX2hhc2gmIHJfcG9zX2hhc2hfcGFpcikKKyAgICAgIHsKKwkvLyBGb2xsb3dpbmcgbGluZXMgbWlnaHQgdGhyb3cgYW4gZXhjZXB0aW9uLgorCWlmIChkb19yZXNpemVfaWZfbmVlZGVkKCkpCisJICByX3Bvc19oYXNoX3BhaXIgPSByYW5nZWRfaGFzaF9mbl9iYXNlOjpvcGVyYXRvcigpKFBCX0RTX1YyRihyX3ZhbCkpOworCisJZW50cnlfcG9pbnRlciBwX2UgPSBnZXRfZW50cnkocl92YWwsIHRyYWl0c19iYXNlOjptX25vX3Rocm93X2NvcGllc19pbmRpY2F0b3IpOworCisJLy8gQXQgdGhpcyBwb2ludCBubyBleGNlcHRpb25zIGNhbiBiZSB0aHJvd24uCisJcF9lLT5tX2hhc2ggPSByX3Bvc19oYXNoX3BhaXIuc2Vjb25kOworCXBfZS0+bV9wX25leHQgPSBtX2VudHJpZXNbcl9wb3NfaGFzaF9wYWlyLmZpcnN0XTsKKwltX2VudHJpZXNbcl9wb3NfaGFzaF9wYWlyLmZpcnN0XSA9IHBfZTsKKwlyZXNpemVfYmFzZTo6bm90aWZ5X2luc2VydGVkKCsrbV9udW1fdXNlZF9lKTsKKwlfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6Omluc2VydF9uZXcoUEJfRFNfVjJGKHJfdmFsKSk7KQorCV9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorCXJldHVybiAmcF9lLT5tX3ZhbHVlOworICAgICAgfQorCisgICAgICBpbmxpbmUgcG9pbnRlcgorICAgICAgZmluZF9rZXlfcG9pbnRlcihjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5LCBmYWxzZV90eXBlKQorICAgICAgeworCWVudHJ5X3BvaW50ZXIgcF9lID0gbV9lbnRyaWVzW3JhbmdlZF9oYXNoX2ZuX2Jhc2U6Om9wZXJhdG9yKCkocl9rZXkpXTsKKwlyZXNpemVfYmFzZTo6bm90aWZ5X2ZpbmRfc2VhcmNoX3N0YXJ0KCk7CisJd2hpbGUgKHBfZSAhPSBOVUxMICYmIAorCSAgICAgICAhaGFzaF9lcV9mbl9iYXNlOjpvcGVyYXRvcigpKFBCX0RTX1YyRihwX2UtPm1fdmFsdWUpLCByX2tleSkpCisJICB7CisJICAgIHJlc2l6ZV9iYXNlOjpub3RpZnlfZmluZF9zZWFyY2hfY29sbGlzaW9uKCk7CisJICAgIHBfZSA9IHBfZS0+bV9wX25leHQ7CisJICB9CisKKwlyZXNpemVfYmFzZTo6bm90aWZ5X2ZpbmRfc2VhcmNoX2VuZCgpOworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKwlpZiAocF9lID09IE5VTEwpCisJICBkZWJ1Z19iYXNlOjpjaGVja19rZXlfZG9lc19ub3RfZXhpc3Qocl9rZXkpOworCWVsc2UKKwkgIGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9leGlzdHMocl9rZXkpOworI2VuZGlmIAorCXJldHVybiAmcF9lLT5tX3ZhbHVlOworICAgICAgfQorCisgICAgICBpbmxpbmUgcG9pbnRlcgorICAgICAgZmluZF9rZXlfcG9pbnRlcihjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5LCB0cnVlX3R5cGUpCisgICAgICB7CisJY29tcF9oYXNoIHBvc19oYXNoX3BhaXIgPSByYW5nZWRfaGFzaF9mbl9iYXNlOjpvcGVyYXRvcigpKHJfa2V5KTsKKwllbnRyeV9wb2ludGVyIHBfZSA9IG1fZW50cmllc1twb3NfaGFzaF9wYWlyLmZpcnN0XTsKKwlyZXNpemVfYmFzZTo6bm90aWZ5X2ZpbmRfc2VhcmNoX3N0YXJ0KCk7CisJd2hpbGUgKHBfZSAhPSBOVUxMICYmIAorCSAgICAgICAhaGFzaF9lcV9mbl9iYXNlOjpvcGVyYXRvcigpKFBCX0RTX1YyRihwX2UtPm1fdmFsdWUpLAorCQkJCQkgICAgcF9lLT5tX2hhc2gsCisJCQkJCSAgICByX2tleSwgcG9zX2hhc2hfcGFpci5zZWNvbmQpKQorCSAgeworCSAgICByZXNpemVfYmFzZTo6bm90aWZ5X2ZpbmRfc2VhcmNoX2NvbGxpc2lvbigpOworCSAgICBwX2UgPSBwX2UtPm1fcF9uZXh0OworCSAgfQorCisJcmVzaXplX2Jhc2U6Om5vdGlmeV9maW5kX3NlYXJjaF9lbmQoKTsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisJaWYgKHBfZSA9PSBOVUxMKQorCSAgZGVidWdfYmFzZTo6Y2hlY2tfa2V5X2RvZXNfbm90X2V4aXN0KHJfa2V5KTsKKwllbHNlCisJICBkZWJ1Z19iYXNlOjpjaGVja19rZXlfZXhpc3RzKHJfa2V5KTsKKyNlbmRpZiAKKwlyZXR1cm4gJnBfZS0+bV92YWx1ZTsKKyAgICAgIH0KKworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIGVyYXNlX2luX3Bvc19pbXAoY29uc3Rfa2V5X3JlZmVyZW5jZSwgc2l6ZV90eXBlKTsKKworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIGVyYXNlX2luX3Bvc19pbXAoY29uc3Rfa2V5X3JlZmVyZW5jZSwgY29uc3QgY29tcF9oYXNoJik7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBlcmFzZV9lbnRyeV9wb2ludGVyKGVudHJ5X3BvaW50ZXImKTsKKworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyAgICAgIHZvaWQKKyAgICAgIGluY19pdF9zdGF0ZShwb2ludGVyJiByX3BfdmFsdWUsIAorCQkgICBzdGQ6OnBhaXI8ZW50cnlfcG9pbnRlciwgc2l6ZV90eXBlPiYgcl9wb3MpIGNvbnN0CisgICAgICB7CisJaW5jX2l0X3N0YXRlKChjb25zdF9tYXBwZWRfcG9pbnRlciYgKXJfcF92YWx1ZSwgcl9wb3MpOworICAgICAgfQorI2VuZGlmIAorCisgICAgICB2b2lkCisgICAgICBpbmNfaXRfc3RhdGUoY29uc3RfcG9pbnRlciYgcl9wX3ZhbHVlLCAKKwkJICAgc3RkOjpwYWlyPGVudHJ5X3BvaW50ZXIsIHNpemVfdHlwZT4mIHJfcG9zKSBjb25zdAorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChyX3BfdmFsdWUgIT0gTlVMTCk7CisJcl9wb3MuZmlyc3QgPSByX3Bvcy5maXJzdC0+bV9wX25leHQ7CisJaWYgKHJfcG9zLmZpcnN0ICE9IE5VTEwpCisJICB7CisJICAgIHJfcF92YWx1ZSA9ICZyX3Bvcy5maXJzdC0+bV92YWx1ZTsKKwkgICAgcmV0dXJuOworCSAgfQorCisJZm9yICgrK3JfcG9zLnNlY29uZDsgcl9wb3Muc2Vjb25kIDwgbV9udW1fZTsgKytyX3Bvcy5zZWNvbmQpCisJICBpZiAobV9lbnRyaWVzW3JfcG9zLnNlY29uZF0gIT0gTlVMTCkKKwkgICAgeworCSAgICAgIHJfcG9zLmZpcnN0ID0gbV9lbnRyaWVzW3JfcG9zLnNlY29uZF07CisJICAgICAgcl9wX3ZhbHVlID0gJnJfcG9zLmZpcnN0LT5tX3ZhbHVlOworCSAgICAgIHJldHVybjsKKwkgICAgfQorCXJfcF92YWx1ZSA9IE5VTEw7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGdldF9zdGFydF9pdF9zdGF0ZShwb2ludGVyJiByX3BfdmFsdWUsIAorCQkJIHN0ZDo6cGFpcjxlbnRyeV9wb2ludGVyLCBzaXplX3R5cGU+JiByX3BvcykgY29uc3QKKyAgICAgIHsKKwlmb3IgKHJfcG9zLnNlY29uZCA9IDA7IHJfcG9zLnNlY29uZCA8IG1fbnVtX2U7ICsrcl9wb3Muc2Vjb25kKQorCSAgaWYgKG1fZW50cmllc1tyX3Bvcy5zZWNvbmRdICE9IE5VTEwpCisJICAgIHsKKwkgICAgICByX3Bvcy5maXJzdCA9IG1fZW50cmllc1tyX3Bvcy5zZWNvbmRdOworCSAgICAgIHJfcF92YWx1ZSA9ICZyX3Bvcy5maXJzdC0+bV92YWx1ZTsKKwkgICAgICByZXR1cm47CisJICAgIH0KKwlyX3BfdmFsdWUgPSBOVUxMOworICAgICAgfQorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF9lbnRyeV9wb2ludGVyX2FycmF5X3ZhbGlkKGNvbnN0IGVudHJ5X3BvaW50ZXJfYXJyYXkpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfZW50cnlfcG9pbnRlcl92YWxpZChjb25zdCBlbnRyeV9wb2ludGVyLCB0cnVlX3R5cGUpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfZW50cnlfcG9pbnRlcl92YWxpZChjb25zdCBlbnRyeV9wb2ludGVyLCBmYWxzZV90eXBlKSBjb25zdDsKKyNlbmRpZiAKKworI2lmZGVmIFBCX0RTX0hUX01BUF9UUkFDRV8KKyAgICAgIHZvaWQKKyAgICAgIHRyYWNlX2xpc3QoY29uc3RfZW50cnlfcG9pbnRlcikgY29uc3Q7CisjZW5kaWYgCisKKyAgICBwcml2YXRlOgorI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyAgICAgIGZyaWVuZCBjbGFzcyBpdGVyYXRvcl87CisjZW5kaWYgCisKKyAgICAgIGZyaWVuZCBjbGFzcyBjb25zdF9pdGVyYXRvcl87CisKKyAgICAgIHN0YXRpYyBlbnRyeV9hbGxvY2F0b3IgCQlzX2VudHJ5X2FsbG9jYXRvcjsKKyAgICAgIHN0YXRpYyBlbnRyeV9wb2ludGVyX2FsbG9jYXRvciAJc19lbnRyeV9wb2ludGVyX2FsbG9jYXRvcjsKKyAgICAgIHN0YXRpYyBpdGVyYXRvciAJCQlzX2VuZF9pdDsKKyAgICAgIHN0YXRpYyBjb25zdF9pdGVyYXRvciAJCXNfY29uc3RfZW5kX2l0OworICAgICAgc3RhdGljIHBvaW50X2l0ZXJhdG9yIAkJc19maW5kX2VuZF9pdDsKKyAgICAgIHN0YXRpYyBjb25zdF9wb2ludF9pdGVyYXRvciAJc19jb25zdF9maW5kX2VuZF9pdDsKKworICAgICAgc2l6ZV90eXBlIAkJCW1fbnVtX2U7CisgICAgICBzaXplX3R5cGUgCQkJbV9udW1fdXNlZF9lOworICAgICAgZW50cnlfcG9pbnRlcl9hcnJheSAJCW1fZW50cmllczsKKworICAgICAgZW51bQorCXsKKwkgIHN0b3JlX2hhc2hfb2sgPSAhU3RvcmVfSGFzaCAKKwkgICAgICAgICAgICAgICAgICB8fCAhaXNfc2FtZTxIYXNoX0ZuLCBfX2dudV9wYmRzOjpudWxsX2hhc2hfZm4+Ojp2YWx1ZQorCX07CisKKyAgICAgIFBCX0RTX1NUQVRJQ19BU1NFUlQoc3RoLCBzdG9yZV9oYXNoX29rKTsKKyAgICB9OworCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vY29uc3RydWN0b3JfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9lbnRyeV9saXN0X2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2ZpbmRfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vcmVzaXplX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2RlYnVnX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL3NpemVfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vcG9saWN5X2FjY2Vzc19mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9lcmFzZV9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9pdGVyYXRvcnNfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL3RyYWNlX2ZuX2ltcHMuaHBwPgorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworI3VuZGVmIFBCX0RTX0hBU0hfRVFfRk5fQ19ERUMKKyN1bmRlZiBQQl9EU19SQU5HRURfSEFTSF9GTl9DX0RFQworI3VuZGVmIFBCX0RTX1RZUEVTX1RSQUlUU19DX0RFQworI3VuZGVmIFBCX0RTX0RFQlVHX01BUF9CQVNFX0NfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfTkFNRQorI3VuZGVmIFBCX0RTX1YyRgorI3VuZGVmIFBCX0RTX1YyUworCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2NtcF9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vY21wX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNjE4OTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2NtcF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDgzIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBjbXBfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBjY19odF9tYXBfJ3MgZW50aXJlIGNvbnRhaW5lciBjb21wYXJpc29uIHJlbGF0ZWQKKyAqICAgIGZ1bmN0aW9ucy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJfSFRfTWFwX1R5cGU+Citib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitvcGVyYXRvcj09KGNvbnN0IE90aGVyX0hUX01hcF9UeXBlJiBvdGhlcikgY29uc3QKK3sgcmV0dXJuIGNtcF93aXRoX290aGVyKG90aGVyKTsgfQorCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJfTWFwX1R5cGU+Citib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitjbXBfd2l0aF9vdGhlcihjb25zdCBPdGhlcl9NYXBfVHlwZSYgb3RoZXIpIGNvbnN0Cit7CisgIGlmIChzaXplKCkgIT0gb3RoZXIuc2l6ZSgpKQorICAgIHJldHVybiBmYWxzZTsKKworICBmb3IgKHR5cGVuYW1lIE90aGVyX01hcF9UeXBlOjpjb25zdF9pdGVyYXRvciBpdCA9IG90aGVyLmJlZ2luKCk7CisgICAgICAgaXQgIT0gb3RoZXIuZW5kKCk7ICsraXQpCisgICAgeworICAgICAgY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSA9IGNvbnN0X2tleV9yZWZlcmVuY2UoUEJfRFNfVjJGKCppdCkpOworCisgICAgICBjb25zdF9tYXBwZWRfcG9pbnRlciBwX21hcHBlZF92YWx1ZSA9CisJY29uc3RfY2FzdDxQQl9EU19DTEFTU19DX0RFQyYgPigqdGhpcykuCisJZmluZF9rZXlfcG9pbnRlcihyX2tleSwgdHJhaXRzX2Jhc2U6Om1fc3RvcmVfZXh0cmFfaW5kaWNhdG9yKTsKKworICAgICAgaWYgKHBfbWFwcGVkX3ZhbHVlID09IE5VTEwpCisJcmV0dXJuIGZhbHNlOworCisjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorICAgICAgaWYgKHBfbWFwcGVkX3ZhbHVlLT5zZWNvbmQgIT0gaXQtPnNlY29uZCkKKwlyZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICB9CisgIHJldHVybiB0cnVlOworfQorCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJfSFRfTWFwX1R5cGU+Citib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitvcGVyYXRvciE9KGNvbnN0IE90aGVyX0hUX01hcF9UeXBlJiBvdGhlcikgY29uc3QKK3sgcmV0dXJuICFvcGVyYXRvcj09KG90aGVyKTsgfQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9jb25kX2tleV9kdG9yX2VudHJ5X2RlYWx0b3IuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9jb25kX2tleV9kdG9yX2VudHJ5X2RlYWx0b3IuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhM2YzMWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2NvbmRfa2V5X2R0b3JfZW50cnlfZGVhbHRvci5ocHAKQEAgLTAsMCArMSwxMTcgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGNvbmRfa2V5X2R0b3JfZW50cnlfZGVhbHRvci5ocHAKKyAqIENvbnRhaW5zIGEgY29uZGl0aW9uYWwga2V5IGRlc3RydWN0b3IsIHVzZWQgZm9yIGV4Y2VwdGlvbiBoYW5kbGluZy4KKyAqLworCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQyB0ZW1wbGF0ZTx0eXBlbmFtZSBIVF9NYXA+CisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFBCX0RTX0NLREVEX0NMQVNTX05BTUU8SFRfTWFwPgorCisgICAgLyoqCisgICAgICogQSBjb25kaXRpb25hbCBrZXkgZGVzdHJ1Y3RvciwgdXNlZCBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nLgorICAgICAqKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIVF9NYXA+CisgICAgY2xhc3MgUEJfRFNfQ0tERURfQ0xBU1NfTkFNRQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEhUX01hcDo6ZW50cnkgZW50cnk7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEhUX01hcDo6ZW50cnlfYWxsb2NhdG9yIGVudHJ5X2FsbG9jYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgSFRfTWFwOjprZXlfdHlwZSBrZXlfdHlwZTsKKworICAgICAgaW5saW5lCisgICAgICBQQl9EU19DS0RFRF9DTEFTU19OQU1FKGVudHJ5X2FsbG9jYXRvciogcF9hLCBlbnRyeSogcF9lKTsKKworICAgICAgaW5saW5lCisgICAgICB+UEJfRFNfQ0tERURfQ0xBU1NfTkFNRSgpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgc2V0X2tleV9kZXN0cnVjdCgpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgc2V0X25vX2FjdGlvbl9kZXN0cnVjdG9yKCk7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBlbnRyeV9hbGxvY2F0b3IqIGNvbnN0IG1fcF9hOworICAgICAgZW50cnkqIGNvbnN0IG1fcF9lOworCisgICAgICBib29sIG1fa2V5X2Rlc3RydWN0OworICAgICAgYm9vbCBtX25vX2FjdGlvbl9kZXN0cnVjdG9yOworICAgIH07CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIGlubGluZQorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBQQl9EU19DS0RFRF9DTEFTU19OQU1FKGVudHJ5X2FsbG9jYXRvciogcF9hLCBlbnRyeSogcF9lKSAKKyAgICA6IG1fcF9hKHBfYSksIG1fcF9lKHBfZSksIG1fa2V5X2Rlc3RydWN0KGZhbHNlKSwgCisgICAgICBtX25vX2FjdGlvbl9kZXN0cnVjdG9yKGZhbHNlKQorICAgIHsgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBpbmxpbmUgdm9pZAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBzZXRfa2V5X2Rlc3RydWN0KCkKKyAgICB7IG1fa2V5X2Rlc3RydWN0ID0gdHJ1ZTsgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBpbmxpbmUgdm9pZAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBzZXRfbm9fYWN0aW9uX2Rlc3RydWN0b3IoKQorICAgIHsgbV9ub19hY3Rpb25fZGVzdHJ1Y3RvciA9IHRydWU7IH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgaW5saW5lCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIH5QQl9EU19DS0RFRF9DTEFTU19OQU1FKCkKKyAgICB7CisgICAgICBpZiAobV9ub19hY3Rpb25fZGVzdHJ1Y3RvcikKKwlyZXR1cm47CisgICAgICBpZiAobV9rZXlfZGVzdHJ1Y3QpCisJbV9wX2UtPm1fdmFsdWUuZmlyc3QufmtleV90eXBlKCk7CisgICAgICBtX3BfYS0+ZGVhbGxvY2F0ZShtX3BfZSwgMSk7CisgICAgfQorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2NvbnN0cnVjdG9yX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2NvbnN0cnVjdG9yX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQyOTRhZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vY29uc3RydWN0b3JfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDE5MSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY29uc3RydWN0b3JfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGNjX2h0X21hcF8ncyBjb25zdHJ1Y3RvcnMsIGRlc3RydWN0b3IsCisgKiAgICBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjplbnRyeV9hbGxvY2F0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjpzX2VudHJ5X2FsbG9jYXRvcjsKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjplbnRyeV9wb2ludGVyX2FsbG9jYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OnNfZW50cnlfcG9pbnRlcl9hbGxvY2F0b3I7CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NvcHlfZnJvbV9yYW5nZShJdCBmaXJzdF9pdCwgSXQgbGFzdF9pdCkKK3sKKyAgd2hpbGUgKGZpcnN0X2l0ICE9IGxhc3RfaXQpCisgICAgaW5zZXJ0KCooZmlyc3RfaXQrKykpOworfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfQ0xBU1NfTkFNRSgpIDoKKyAgcmFuZ2VkX2hhc2hfZm5fYmFzZShyZXNpemVfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoMSkpLAorICBtX251bV9lKHJlc2l6ZV9iYXNlOjpnZXRfbmVhcmVzdF9sYXJnZXJfc2l6ZSgxKSksIG1fbnVtX3VzZWRfZSgwKSwKKyAgbV9lbnRyaWVzKHNfZW50cnlfcG9pbnRlcl9hbGxvY2F0b3IuYWxsb2NhdGUobV9udW1fZSkpCit7CisgIGluaXRpYWxpemUoKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShQQl9EU19DTEFTU19DX0RFQzo6YXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfQ0xBU1NfTkFNRShjb25zdCBIYXNoX0ZuJiByX2hhc2hfZm4pIDoKKyAgcmFuZ2VkX2hhc2hfZm5fYmFzZShyZXNpemVfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoMSksIHJfaGFzaF9mbiksCisgIG1fbnVtX2UocmVzaXplX2Jhc2U6OmdldF9uZWFyZXN0X2xhcmdlcl9zaXplKDEpKSwgbV9udW1fdXNlZF9lKDApLAorICBtX2VudHJpZXMoc19lbnRyeV9wb2ludGVyX2FsbG9jYXRvci5hbGxvY2F0ZShtX251bV9lKSkKK3sKKyAgaW5pdGlhbGl6ZSgpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKFBCX0RTX0NMQVNTX0NfREVDOjphc3NlcnRfdmFsaWQoKTspCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19DTEFTU19OQU1FKGNvbnN0IEhhc2hfRm4mIHJfaGFzaF9mbiwgY29uc3QgRXFfRm4mIHJfZXFfZm4pIDoKKyAgUEJfRFNfSEFTSF9FUV9GTl9DX0RFQyhyX2VxX2ZuKSwKKyAgcmFuZ2VkX2hhc2hfZm5fYmFzZShyZXNpemVfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoMSksIHJfaGFzaF9mbiksCisgIG1fbnVtX2UocmVzaXplX2Jhc2U6OmdldF9uZWFyZXN0X2xhcmdlcl9zaXplKDEpKSwgbV9udW1fdXNlZF9lKDApLAorICBtX2VudHJpZXMoc19lbnRyeV9wb2ludGVyX2FsbG9jYXRvci5hbGxvY2F0ZShtX251bV9lKSkKK3sKKyAgc3RkOjpmaWxsKG1fZW50cmllcywgbV9lbnRyaWVzICsgbV9udW1fZSwgKGVudHJ5X3BvaW50ZXIpTlVMTCk7CisgIFJlc2l6ZV9Qb2xpY3k6Om5vdGlmeV9jbGVhcmVkKCk7CisgIHJhbmdlZF9oYXNoX2ZuX2Jhc2U6Om5vdGlmeV9yZXNpemVkKG1fbnVtX2UpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKFBCX0RTX0NMQVNTX0NfREVDOjphc3NlcnRfdmFsaWQoKTspCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19DTEFTU19OQU1FKGNvbnN0IEhhc2hfRm4mIHJfaGFzaF9mbiwgY29uc3QgRXFfRm4mIHJfZXFfZm4sIGNvbnN0IENvbWJfSGFzaF9GbiYgcl9jb21iX2hhc2hfZm4pIDoKKyAgUEJfRFNfSEFTSF9FUV9GTl9DX0RFQyhyX2VxX2ZuKSwKKyAgcmFuZ2VkX2hhc2hfZm5fYmFzZShyZXNpemVfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoMSksCisJCSAgICAgIHJfaGFzaF9mbiwgcl9jb21iX2hhc2hfZm4pLAorICBtX251bV9lKHJlc2l6ZV9iYXNlOjpnZXRfbmVhcmVzdF9sYXJnZXJfc2l6ZSgxKSksIG1fbnVtX3VzZWRfZSgwKSwKKyAgbV9lbnRyaWVzKHNfZW50cnlfcG9pbnRlcl9hbGxvY2F0b3IuYWxsb2NhdGUobV9udW1fZSkpCit7CisgIGluaXRpYWxpemUoKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShQQl9EU19DTEFTU19DX0RFQzo6YXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfQ0xBU1NfTkFNRShjb25zdCBIYXNoX0ZuJiByX2hhc2hfZm4sIGNvbnN0IEVxX0ZuJiByX2VxX2ZuLCBjb25zdCBDb21iX0hhc2hfRm4mIHJfY29tYl9oYXNoX2ZuLCBjb25zdCBSZXNpemVfUG9saWN5JiByX3Jlc2l6ZV9wb2xpY3kpIDoKKyAgUEJfRFNfSEFTSF9FUV9GTl9DX0RFQyhyX2VxX2ZuKSwKKyAgUmVzaXplX1BvbGljeShyX3Jlc2l6ZV9wb2xpY3kpLAorICByYW5nZWRfaGFzaF9mbl9iYXNlKHJlc2l6ZV9iYXNlOjpnZXRfbmVhcmVzdF9sYXJnZXJfc2l6ZSgxKSwKKwkJICAgICAgcl9oYXNoX2ZuLCByX2NvbWJfaGFzaF9mbiksCisgIG1fbnVtX2UocmVzaXplX2Jhc2U6OmdldF9uZWFyZXN0X2xhcmdlcl9zaXplKDEpKSwgbV9udW1fdXNlZF9lKDApLAorICBtX2VudHJpZXMoc19lbnRyeV9wb2ludGVyX2FsbG9jYXRvci5hbGxvY2F0ZShtX251bV9lKSkKK3sKKyAgaW5pdGlhbGl6ZSgpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKFBCX0RTX0NMQVNTX0NfREVDOjphc3NlcnRfdmFsaWQoKTspCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19DTEFTU19OQU1FKGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikgOgorI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgIGRlYnVnX2Jhc2Uob3RoZXIpLAorI2VuZGlmIAorICBQQl9EU19IQVNIX0VRX0ZOX0NfREVDKG90aGVyKSwKKyAgcmVzaXplX2Jhc2Uob3RoZXIpLCByYW5nZWRfaGFzaF9mbl9iYXNlKG90aGVyKSwKKyAgbV9udW1fZShyZXNpemVfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoMSkpLCBtX251bV91c2VkX2UoMCksCisgIG1fZW50cmllcyhzX2VudHJ5X3BvaW50ZXJfYWxsb2NhdG9yLmFsbG9jYXRlKG1fbnVtX2UpKQoreworICBpbml0aWFsaXplKCk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoUEJfRFNfQ0xBU1NfQ19ERUM6OmFzc2VydF92YWxpZCgpOykKKyAgICBfX3RyeQorICAgICAgeworICAgICAgICBjb3B5X2Zyb21fcmFuZ2Uob3RoZXIuYmVnaW4oKSwgb3RoZXIuZW5kKCkpOworICAgICAgfQorICAgIF9fY2F0Y2goLi4uKQorICAgICAgeworICAgICAgICBkZWFsbG9jYXRlX2FsbCgpOworICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAgICAgIH0KKyAgX0dMSUJDWFhfREVCVUdfT05MWShQQl9EU19DTEFTU19DX0RFQzo6YXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorflBCX0RTX0NMQVNTX05BTUUoKQoreyBkZWFsbG9jYXRlX2FsbCgpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citzd2FwKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKSk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKCkpOworCisgIHN0ZDo6c3dhcChtX2VudHJpZXMsIG90aGVyLm1fZW50cmllcyk7CisgIHN0ZDo6c3dhcChtX251bV9lLCBvdGhlci5tX251bV9lKTsKKyAgc3RkOjpzd2FwKG1fbnVtX3VzZWRfZSwgb3RoZXIubV9udW1fdXNlZF9lKTsKKyAgcmFuZ2VkX2hhc2hfZm5fYmFzZTo6c3dhcChvdGhlcik7CisgIGhhc2hfZXFfZm5fYmFzZTo6c3dhcChvdGhlcik7CisgIHJlc2l6ZV9iYXNlOjpzd2FwKG90aGVyKTsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OnN3YXAob3RoZXIpKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKSk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKCkpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZGVhbGxvY2F0ZV9hbGwoKQoreworICBjbGVhcigpOworICBzX2VudHJ5X3BvaW50ZXJfYWxsb2NhdG9yLmRlYWxsb2NhdGUobV9lbnRyaWVzLCBtX251bV9lKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2luaXRpYWxpemUoKQoreworICBzdGQ6OmZpbGwobV9lbnRyaWVzLCBtX2VudHJpZXMgKyBtX251bV9lLCBlbnRyeV9wb2ludGVyKE5VTEwpKTsKKyAgUmVzaXplX1BvbGljeTo6bm90aWZ5X3Jlc2l6ZWQobV9udW1fZSk7CisgIFJlc2l6ZV9Qb2xpY3k6Om5vdGlmeV9jbGVhcmVkKCk7CisgIHJhbmdlZF9oYXNoX2ZuX2Jhc2U6Om5vdGlmeV9yZXNpemVkKG1fbnVtX2UpOworfQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9jb25zdHJ1Y3Rvcl9kZXN0cnVjdG9yX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2NvbnN0cnVjdG9yX2Rlc3RydWN0b3Jfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjFjY2U2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9jb25zdHJ1Y3Rvcl9kZXN0cnVjdG9yX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw1NSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY29uc3RydWN0b3JfZGVzdHJ1Y3Rvcl9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgY2NfaHRfbWFwXydzIGNvbnN0cnVjdG9ycywgZGVzdHJ1Y3RvciwKKyAqICAgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NvbnN0cnVjdG9yX2luc2VydF9uZXdfaW1wKGNvbnN0X21hcHBlZF9yZWZlcmVuY2Ugcl92YWwsIHNpemVfdHlwZSBwb3MsIAorCQkJICAgZmFsc2VfdHlwZSkKK3sKKyAgLy8gRm9sbG93aW5nIGxpbmVzIG1pZ2h0IHRocm93IGFuIGV4Y2VwdGlvbi4KKyAgZW50cnlfcG9pbnRlciBwID0gZ2V0X2VudHJ5KHJfdmFsLCB0cmFpdHNfYmFzZTo6c19ub190aHJvd19jb3BpZXNfaW5kaWNhdG9yKTsKKworICAvLyBBdCB0aGlzIHBvaW50IG5vIGV4Y2VwdGlvbnMgY2FuIGJlIHRocm93bi4KKyAgcC0+bV9wX25leHQgPSBtX2VudHJpZXNbcG9zXTsKKyAgbV9lbnRyaWVzW3Bvc10gPSBwOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6Omluc2VydF9uZXcocl9rZXkpOykKK30KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vY29uc3RydWN0b3JfZGVzdHJ1Y3Rvcl9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9jb25zdHJ1Y3Rvcl9kZXN0cnVjdG9yX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJiNmZhMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vY29uc3RydWN0b3JfZGVzdHJ1Y3Rvcl9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNTYgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGNvbnN0cnVjdG9yX2Rlc3RydWN0b3Jfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGNjX2h0X21hcF8ncyBjb25zdHJ1Y3RvcnMsIGRlc3RydWN0b3IsCisgKiAgICBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citjb25zdHJ1Y3Rvcl9pbnNlcnRfbmV3X2ltcChjb25zdF9yZWZlcmVuY2Ugcl92YWwsIHNpemVfdHlwZSBwb3MsIHRydWVfdHlwZSkKK3sKKyAgLy8gRm9sbG93aW5nIGxpbmVzIG1pZ2h0IHRocm93IGFuIGV4Y2VwdGlvbi4KKyAgZW50cnlfcG9pbnRlciBwID0gZ2V0X2VudHJ5KHJfdmFsLCB0cmFpdHNfYmFzZTo6c19ub190aHJvd19jb3BpZXNfaW5kaWNhdG9yKTsKKworICAvLyBBdCB0aGlzIHBvaW50IG5vIGV4Y2VwdGlvbnMgY2FuIGJlIHRocm93bi4KKyAgcC0+bV9wX25leHQgPSBtX2VudHJpZXNbcG9zXTsKKyAgcC0+bV9oYXNoID0gcmFuZ2VkX2hhc2hfZm5fYmFzZTo6b3BlcmF0b3IoKSgoY29uc3Rfa2V5X3JlZmVyZW5jZSkoUEJfRFNfVjJGKHAtPm1fdmFsdWUpKSkuc2Vjb25kOworCisgIG1fZW50cmllc1twb3NdID0gcDsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjppbnNlcnRfbmV3KHJfa2V5KTspCit9CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2RlYnVnX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9kZWJ1Z19mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjE5ZWVmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9kZWJ1Z19mbl9pbXBzLmhwcApAQCAtMCwwICsxLDc0IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBkZWJ1Z19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGNjX2h0X21hcF8ncyBkZWJ1Zy1tb2RlIGZ1bmN0aW9ucy4KKyAqLworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF92YWxpZCgpIGNvbnN0Cit7CisgIGRlYnVnX2Jhc2U6OmNoZWNrX3NpemUobV9udW1fdXNlZF9lKTsKKyAgYXNzZXJ0X2VudHJ5X3BvaW50ZXJfYXJyYXlfdmFsaWQobV9lbnRyaWVzKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9lbnRyeV9wb2ludGVyX2FycmF5X3ZhbGlkKGNvbnN0IGVudHJ5X3BvaW50ZXJfYXJyYXkgYV9wX2VudHJpZXMpIGNvbnN0Cit7CisgIHNpemVfdHlwZSBpdGVyYXRlZF9udW1fdXNlZF9lID0gMDsKKyAgZm9yIChzaXplX3R5cGUgcG9zID0gMDsgcG9zIDwgbV9udW1fZTsgKytwb3MpCisgICAgeworICAgICAgZW50cnlfcG9pbnRlciBwX2UgPSBhX3BfZW50cmllc1twb3NdOworICAgICAgd2hpbGUgKHBfZSAhPSBOVUxMKQorICAgICAgICB7CisJICArK2l0ZXJhdGVkX251bV91c2VkX2U7CisJICBhc3NlcnRfZW50cnlfcG9pbnRlcl92YWxpZChwX2UsIHRyYWl0c19iYXNlOjptX3N0b3JlX2V4dHJhX2luZGljYXRvcik7CisJICBwX2UgPSBwX2UtPm1fcF9uZXh0OworICAgICAgICB9CisgICAgfQorICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoaXRlcmF0ZWRfbnVtX3VzZWRfZSA9PSBtX251bV91c2VkX2UpOworfQorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vZGVidWdfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9kZWJ1Z19ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwPgorCisjZW5kaWYgCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2RlYnVnX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2RlYnVnX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcwYmVkMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vZGVidWdfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDQ5IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBkZWJ1Z19ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgY2NfaHRfbWFwXydzIGRlYnVnLW1vZGUgZnVuY3Rpb25zLgorICovCisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X2VudHJ5X3BvaW50ZXJfdmFsaWQoY29uc3QgZW50cnlfcG9pbnRlciBwLCBmYWxzZV90eXBlKSBjb25zdAoreyBkZWJ1Z19iYXNlOjpjaGVja19rZXlfZXhpc3RzKFBCX0RTX1YyRihwLT5tX3ZhbHVlKSk7IH0KKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9kZWJ1Z19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9kZWJ1Z19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMTc2NzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2RlYnVnX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw1MyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZGVidWdfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGNjX2h0X21hcF8ncyBkZWJ1Zy1tb2RlIGZ1bmN0aW9ucy4KKyAqLworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9lbnRyeV9wb2ludGVyX3ZhbGlkKGNvbnN0IGVudHJ5X3BvaW50ZXIgcF9lLCB0cnVlX3R5cGUpIGNvbnN0Cit7CisgIGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9leGlzdHMoUEJfRFNfVjJGKHBfZS0+bV92YWx1ZSkpOworICBjb21wX2hhc2ggcG9zX2hhc2hfcGFpciA9IHJhbmdlZF9oYXNoX2ZuX2Jhc2U6Om9wZXJhdG9yKCkoUEJfRFNfVjJGKHBfZS0+bV92YWx1ZSkpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9lLT5tX2hhc2ggPT0gcG9zX2hhc2hfcGFpci5zZWNvbmQpOworfQorCisjZW5kaWYgCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2VudHJ5X2xpc3RfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2VudHJ5X2xpc3RfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEwOWY3MwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vZW50cnlfbGlzdF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDkxIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBlbnRyeV9saXN0X2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgY2NfaHRfbWFwXydzIGVudHJ5LWxpc3QgcmVsYXRlZCBmdW5jdGlvbnMuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2RlYWxsb2NhdGVfbGlua3NfaW5fbGlzdChlbnRyeV9wb2ludGVyIHBfZSkKK3sKKyAgd2hpbGUgKHBfZSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGVudHJ5X3BvaW50ZXIgcF9kZWFsbG9jX2UgPSBwX2U7CisgICAgICBwX2UgPSBwX2UtPm1fcF9uZXh0OworICAgICAgc19lbnRyeV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShwX2RlYWxsb2NfZSwgMSk7CisgICAgfQorfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjplbnRyeV9wb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfZW50cnkoY29uc3RfcmVmZXJlbmNlIHJfdmFsLCB0cnVlX3R5cGUpCit7CisgIC8vIEZvbGxvd2luZyBsaW5lIG1pZ2h0IHRocm93IGFuIGV4Y2VwdGlvbi4KKyAgZW50cnlfcG9pbnRlciBwX2UgPSBzX2VudHJ5X2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsKKworICAvLyBGb2xsb3dpbmcgbGluZXMqIGNhbm5vdCogdGhyb3cgYW4gZXhjZXB0aW9uLgorICBuZXcgKCZwX2UtPm1fdmFsdWUpIHZhbHVlX3R5cGUocl92YWwpOworICByZXR1cm4gcF9lOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjplbnRyeV9wb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfZW50cnkoY29uc3RfcmVmZXJlbmNlIHJfdmFsLCBmYWxzZV90eXBlKQoreworICAvLyBGb2xsb3dpbmcgbGluZSBtaWdodCB0aHJvdyBhbiBleGNlcHRpb24uCisgIGVudHJ5X3BvaW50ZXIgcF9lID0gc19lbnRyeV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7CisgIGNvbmRfZGVhbHRvcl90IGNvbmQocF9lKTsKKworICAvLyBGb2xsb3dpbmcgbGluZXMgbWlnaHQgdGhyb3cgYW4gZXhjZXB0aW9uLgorICBuZXcgKCZwX2UtPm1fdmFsdWUpIHZhbHVlX3R5cGUocl92YWwpOworICBjb25kLnNldF9ub19hY3Rpb24oKTsKKyAgcmV0dXJuIHBfZTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CityZWxzX2VudHJ5KGVudHJ5X3BvaW50ZXIgcF9lKQoreworICAvLyBUaGUgZm9sbG93aW5nIGxpbmVzIGNhbm5vdCB0aHJvdyBleGNlcHRpb25zICh1bmxlc3MgaWYga2V5LWRhdGEgZHRvcnMgZG8pLgorICBwX2UtPm1fdmFsdWUufnZhbHVlX3R5cGUoKTsKKyAgc19lbnRyeV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShwX2UsIDEpOworfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2VyYXNlX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9lcmFzZV9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjkxNzhiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9lcmFzZV9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDEwMyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZXJhc2VfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBjY19odF9tYXBfJ3MgZXJhc2UgcmVsYXRlZCBmdW5jdGlvbnMuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZV9lbnRyeV9wb2ludGVyKGVudHJ5X3BvaW50ZXImIHJfcF9lKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmVyYXNlX2V4aXN0aW5nKFBCX0RTX1YyRihyX3BfZS0+bV92YWx1ZSkpKTsKKworICBlbnRyeV9wb2ludGVyIHBfZSA9IHJfcF9lOworICByX3BfZSA9IHJfcF9lLT5tX3BfbmV4dDsKKyAgcmVsc19lbnRyeShwX2UpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9udW1fdXNlZF9lID4gMCk7CisgIHJlc2l6ZV9iYXNlOjpub3RpZnlfZXJhc2VkKC0tbV9udW1fdXNlZF9lKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIFByZWQ+CitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2VfaWYoUHJlZCBwcmVkKQoreworICBzaXplX3R5cGUgbnVtX2Vyc2QgPSAwOworICBmb3IgKHNpemVfdHlwZSBwb3MgPSAwOyBwb3MgPCBtX251bV9lOyArK3BvcykKKyAgICB7CisgICAgICB3aGlsZSAobV9lbnRyaWVzW3Bvc10gIT0gTlVMTCAmJiBwcmVkKG1fZW50cmllc1twb3NdLT5tX3ZhbHVlKSkKKyAgICAgICAgeworCSAgKytudW1fZXJzZDsKKwkgIGVudHJ5X3BvaW50ZXIgcF9uZXh0X2UgPSBtX2VudHJpZXNbcG9zXS0+bV9wX25leHQ7CisJICBlcmFzZV9lbnRyeV9wb2ludGVyKG1fZW50cmllc1twb3NdKTsKKwkgIG1fZW50cmllc1twb3NdID0gcF9uZXh0X2U7CisgICAgICAgIH0KKworICAgICAgZW50cnlfcG9pbnRlciBwX2UgPSBtX2VudHJpZXNbcG9zXTsKKyAgICAgIHdoaWxlIChwX2UgIT0gTlVMTCAmJiBwX2UtPm1fcF9uZXh0ICE9IE5VTEwpCisgICAgICAgIHsKKwkgIGlmIChwcmVkKHBfZS0+bV9wX25leHQtPm1fdmFsdWUpKQorICAgICAgICAgICAgeworCSAgICAgICsrbnVtX2Vyc2Q7CisJICAgICAgZXJhc2VfZW50cnlfcG9pbnRlcihwX2UtPm1fcF9uZXh0KTsKKyAgICAgICAgICAgIH0KKwkgIGVsc2UKKwkgICAgcF9lID0gcF9lLT5tX3BfbmV4dDsKKyAgICAgICAgfQorICAgIH0KKworICBkb19yZXNpemVfaWZfbmVlZGVkX25vX3Rocm93KCk7CisgIHJldHVybiBudW1fZXJzZDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NsZWFyKCkKK3sKKyAgZm9yIChzaXplX3R5cGUgcG9zID0gMDsgcG9zIDwgbV9udW1fZTsgKytwb3MpCisgICAgd2hpbGUgKG1fZW50cmllc1twb3NdICE9IE5VTEwpCisgICAgICBlcmFzZV9lbnRyeV9wb2ludGVyKG1fZW50cmllc1twb3NdKTsKKyAgZG9fcmVzaXplX2lmX25lZWRlZF9ub190aHJvdygpOworICByZXNpemVfYmFzZTo6bm90aWZ5X2NsZWFyZWQoKTsKK30KKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2VyYXNlX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vZXJhc2Vfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcD4KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9lcmFzZV9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9lcmFzZV9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNGZjMzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2VyYXNlX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxMDEgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGVyYXNlX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBjY19odF9tYXBfJ3MgZXJhc2UgcmVsYXRlZCBmdW5jdGlvbnMsCisgKiB3aGVuIHRoZSBoYXNoIHZhbHVlIGlzIG5vdCBzdG9yZWQuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZShjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5KQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgcmV0dXJuIGVyYXNlX2luX3Bvc19pbXAocl9rZXksIHJhbmdlZF9oYXNoX2ZuX2Jhc2U6Om9wZXJhdG9yKCkocl9rZXkpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZV9pbl9wb3NfaW1wKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXksIHNpemVfdHlwZSBwb3MpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICBlbnRyeV9wb2ludGVyIHBfZSA9IG1fZW50cmllc1twb3NdOworICByZXNpemVfYmFzZTo6bm90aWZ5X2VyYXNlX3NlYXJjaF9zdGFydCgpOworICBpZiAocF9lID09IE5VTEwpCisgICAgeworICAgICAgcmVzaXplX2Jhc2U6Om5vdGlmeV9lcmFzZV9zZWFyY2hfZW5kKCk7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9kb2VzX25vdF9leGlzdChyX2tleSk7KQorICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgIGlmIChoYXNoX2VxX2ZuX2Jhc2U6Om9wZXJhdG9yKCkoUEJfRFNfVjJGKHBfZS0+bV92YWx1ZSksIHJfa2V5KSkKKyAgICB7CisgICAgICByZXNpemVfYmFzZTo6bm90aWZ5X2VyYXNlX3NlYXJjaF9lbmQoKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6IGNoZWNrX2tleV9leGlzdHMocl9rZXkpOykKKyAgICAgIGVyYXNlX2VudHJ5X3BvaW50ZXIobV9lbnRyaWVzW3Bvc10pOworICAgICAgZG9fcmVzaXplX2lmX25lZWRlZF9ub190aHJvdygpOworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgd2hpbGUgKHRydWUpCisgICAgeworICAgICAgZW50cnlfcG9pbnRlciBwX25leHRfZSA9IHBfZS0+bV9wX25leHQ7CisgICAgICBpZiAocF9uZXh0X2UgPT0gTlVMTCkKKyAgICAgICAgeworCSAgcmVzaXplX2Jhc2U6Om5vdGlmeV9lcmFzZV9zZWFyY2hfZW5kKCk7CisJICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9kb2VzX25vdF9leGlzdChyX2tleSk7KQorICAgICAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICBpZiAoaGFzaF9lcV9mbl9iYXNlOjpvcGVyYXRvcigpKFBCX0RTX1YyRihwX25leHRfZS0+bV92YWx1ZSksIHJfa2V5KSkKKyAgICAgICAgeworCSAgcmVzaXplX2Jhc2U6Om5vdGlmeV9lcmFzZV9zZWFyY2hfZW5kKCk7CisJICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9leGlzdHMocl9rZXkpOykKKyAgICAgICAgICBlcmFzZV9lbnRyeV9wb2ludGVyKHBfZS0+bV9wX25leHQpOworCSAgZG9fcmVzaXplX2lmX25lZWRlZF9ub190aHJvdygpOworCSAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIHJlc2l6ZV9iYXNlOjpub3RpZnlfZXJhc2Vfc2VhcmNoX2NvbGxpc2lvbigpOworICAgICAgcF9lID0gcF9uZXh0X2U7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2VyYXNlX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2VyYXNlX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcyZGY2OQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vZXJhc2Vfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDk1IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBlcmFzZV9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgY2NfaHRfbWFwXydzIGVyYXNlIHJlbGF0ZWQgZnVuY3Rpb25zLAorICogd2hlbiB0aGUgaGFzaCB2YWx1ZSBpcyBzdG9yZWQuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZV9pbl9wb3NfaW1wKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXksIGNvbnN0IGNvbXBfaGFzaCYgcl9wb3NfaGFzaF9wYWlyKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgZW50cnlfcG9pbnRlciBwX2UgPSBtX2VudHJpZXNbcl9wb3NfaGFzaF9wYWlyLmZpcnN0XTsKKyAgcmVzaXplX2Jhc2U6Om5vdGlmeV9lcmFzZV9zZWFyY2hfc3RhcnQoKTsKKyAgaWYgKHBfZSA9PSBOVUxMKQorICAgIHsKKyAgICAgIHJlc2l6ZV9iYXNlOjpub3RpZnlfZXJhc2Vfc2VhcmNoX2VuZCgpOworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjogY2hlY2tfa2V5X2RvZXNfbm90X2V4aXN0KHJfa2V5KTspCisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgaWYgKGhhc2hfZXFfZm5fYmFzZTo6b3BlcmF0b3IoKShQQl9EU19WMkYocF9lLT5tX3ZhbHVlKSwgcF9lLT5tX2hhc2gsCisJCQkJICByX2tleSwgcl9wb3NfaGFzaF9wYWlyLnNlY29uZCkpCisgICAgeworICAgICAgcmVzaXplX2Jhc2U6Om5vdGlmeV9lcmFzZV9zZWFyY2hfZW5kKCk7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9leGlzdHMocl9rZXkpOykKKyAgICAgIGVyYXNlX2VudHJ5X3BvaW50ZXIobV9lbnRyaWVzW3JfcG9zX2hhc2hfcGFpci5maXJzdF0pOworICAgICAgZG9fcmVzaXplX2lmX25lZWRlZF9ub190aHJvdygpOworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgd2hpbGUgKHRydWUpCisgICAgeworICAgICAgZW50cnlfcG9pbnRlciBwX25leHRfZSA9IHBfZS0+bV9wX25leHQ7CisgICAgICBpZiAocF9uZXh0X2UgPT0gTlVMTCkKKyAgICAgICAgeworCSAgcmVzaXplX2Jhc2U6Om5vdGlmeV9lcmFzZV9zZWFyY2hfZW5kKCk7CisJICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9kb2VzX25vdF9leGlzdChyX2tleSk7KQorICAgICAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICBpZiAoaGFzaF9lcV9mbl9iYXNlOjpvcGVyYXRvcigpKFBCX0RTX1YyRihwX25leHRfZS0+bV92YWx1ZSksCisJCQkJICAgICAgcF9uZXh0X2UtPm1faGFzaCwgcl9rZXksCisJCQkJICAgICAgcl9wb3NfaGFzaF9wYWlyLnNlY29uZCkpCisgICAgICAgIHsKKwkgIHJlc2l6ZV9iYXNlOjpub3RpZnlfZXJhc2Vfc2VhcmNoX2VuZCgpOworCSAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpjaGVja19rZXlfZXhpc3RzKHJfa2V5KTspCisgICAgICAgICAgZXJhc2VfZW50cnlfcG9pbnRlcihwX2UtPm1fcF9uZXh0KTsKKwkgIGRvX3Jlc2l6ZV9pZl9uZWVkZWRfbm9fdGhyb3coKTsKKwkgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICByZXNpemVfYmFzZTo6bm90aWZ5X2VyYXNlX3NlYXJjaF9jb2xsaXNpb24oKTsKKyAgICAgIHBfZSA9IHBfbmV4dF9lOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9maW5kX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9maW5kX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYTlhMDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2ZpbmRfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw3MSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZmluZF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGNjX2h0X21hcF8ncyBmaW5kIHJlbGF0ZWQgZnVuY3Rpb25zLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnBvaW50X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitmaW5kKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICByZXR1cm4gZmluZF9rZXlfcG9pbnRlcihyX2tleSwgdHJhaXRzX2Jhc2U6Om1fc3RvcmVfZXh0cmFfaW5kaWNhdG9yKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfcG9pbnRfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2ZpbmQoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSkgY29uc3QKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIHJldHVybiBjb25zdF9jYXN0PFBCX0RTX0NMQVNTX0NfREVDJiA+KCp0aGlzKS5maW5kX2tleV9wb2ludGVyKHJfa2V5LCAKKwkJCQkJdHJhaXRzX2Jhc2U6Om1fc3RvcmVfZXh0cmFfaW5kaWNhdG9yKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6cG9pbnRfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2ZpbmRfZW5kKCkKK3sgcmV0dXJuIE5VTEw7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfcG9pbnRfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2ZpbmRfZW5kKCkgY29uc3QKK3sgcmV0dXJuIE5VTEw7IH0KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9maW5kX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2ZpbmRfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGI1MWM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9maW5kX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw0MSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZmluZF9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgY2NfaHRfbWFwXydzIGZpbmQgcmVsYXRlZCBmdW5jdGlvbnMsCisgKiB3aGVuIHRoZSBoYXNoIHZhbHVlIGlzIHN0b3JlZC4KKyAqLworCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2luZm9fZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2luZm9fZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMxNTE5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vaW5mb19mbl9pbXBzLmhwcApAQCAtMCwwICsxLDEwMCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgaW5mb19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGNjX2h0X21hcF8ncyBlbnRpcmUgY29udGFpbmVyIGluZm8gcmVsYXRlZAorICogZnVuY3Rpb25zLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc2l6ZSgpIGNvbnN0Cit7IHJldHVybiBtX251bV91c2VkX2U7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CittYXhfc2l6ZSgpIGNvbnN0Cit7IHJldHVybiBtX2VudHJ5X2FsbG9jYXRvci5tYXhfc2l6ZSgpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgYm9vbAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZW1wdHkoKSBjb25zdAoreyByZXR1cm4gKHNpemUoKSA9PSAwKTsgfQorCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJfSFRfTWFwX1R5cGU+Citib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitvcGVyYXRvcj09KGNvbnN0IE90aGVyX0hUX01hcF9UeXBlJiBvdGhlcikgY29uc3QKK3sgcmV0dXJuIGNtcF93aXRoX290aGVyKG90aGVyKTsgfQorCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJfTWFwX1R5cGU+Citib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitjbXBfd2l0aF9vdGhlcihjb25zdCBPdGhlcl9NYXBfVHlwZSYgb3RoZXIpIGNvbnN0Cit7CisgIGlmIChzaXplKCkgIT0gb3RoZXIuc2l6ZSgpKQorICAgIHJldHVybiBmYWxzZTsKKworICBmb3IgKHR5cGVuYW1lIE90aGVyX01hcF9UeXBlOjpjb25zdF9pdGVyYXRvciBpdCA9IG90aGVyLmJlZ2luKCk7CisgICAgICAgaXQgIT0gb3RoZXIuZW5kKCk7ICsraXQpCisgICAgeworICAgICAgY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSA9KGNvbnN0X2tleV9yZWZlcmVuY2UpUEJfRFNfVjJGKCppdCk7CisgICAgICBjb25zdF9tYXBwZWRfcG9pbnRlciBwX21hcHBlZF92YWx1ZSA9CisJY29uc3RfY2FzdDxQQl9EU19DTEFTU19DX0RFQyYgPigqdGhpcykuCisJZmluZF9rZXlfcG9pbnRlcihyX2tleSwgdHJhaXRzX2Jhc2U6Om1fc3RvcmVfZXh0cmFfaW5kaWNhdG9yKTsKKworICAgICAgaWYgKHBfbWFwcGVkX3ZhbHVlID09IE5VTEwpCisJcmV0dXJuIGZhbHNlOworCisjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorICAgICAgaWYgKHBfbWFwcGVkX3ZhbHVlLT5zZWNvbmQgIT0gaXQtPnNlY29uZCkKKwlyZXR1cm4gZmFsc2U7CisjZW5kaWYgCisgICAgfQorICByZXR1cm4gdHJ1ZTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIE90aGVyX0hUX01hcF9UeXBlPgorYm9vbAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorb3BlcmF0b3IhPShjb25zdCBPdGhlcl9IVF9NYXBfVHlwZSYgb3RoZXIpIGNvbnN0Cit7IHJldHVybiAhb3BlcmF0b3I9PShvdGhlcik7IH0KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9pbnNlcnRfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY3OWRiZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNDMgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGluc2VydF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGNjX2h0X21hcF8ncyBpbnNlcnQgcmVsYXRlZCBmdW5jdGlvbnMuCisgKi8KKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2luc2VydF9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2luc2VydF9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwPgorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2luc2VydF9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9pbnNlcnRfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjE1Y2NkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9pbnNlcnRfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDcwIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBpbnNlcnRfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGNjX2h0X21hcF8ncyBpbnNlcnQgcmVsYXRlZCBmdW5jdGlvbnMsCisgKiB3aGVuIHRoZSBoYXNoIHZhbHVlIGlzIG5vdCBzdG9yZWQuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBzdGQ6OnBhaXI8dHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnBvaW50X2l0ZXJhdG9yLCBib29sPgorUEJfRFNfQ0xBU1NfQ19ERUM6OgoraW5zZXJ0X2ltcChjb25zdF9yZWZlcmVuY2Ugcl92YWwsIGZhbHNlX3R5cGUpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICBjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5ID0gUEJfRFNfVjJGKHJfdmFsKTsKKyAgY29uc3Qgc2l6ZV90eXBlIHBvcyA9IHJhbmdlZF9oYXNoX2ZuX2Jhc2U6Om9wZXJhdG9yKCkocl9rZXkpOworICBlbnRyeV9wb2ludGVyIHBfZSA9IG1fZW50cmllc1twb3NdOworICByZXNpemVfYmFzZTo6bm90aWZ5X2luc2VydF9zZWFyY2hfc3RhcnQoKTsKKworICB3aGlsZSAocF9lICE9IE5VTEwgJiYgIWhhc2hfZXFfZm5fYmFzZTo6b3BlcmF0b3IoKShQQl9EU19WMkYocF9lLT5tX3ZhbHVlKSwgCisJCQkJCQkgICAgIHJfa2V5KSkKKyAgICB7CisgICAgICByZXNpemVfYmFzZTo6bm90aWZ5X2luc2VydF9zZWFyY2hfY29sbGlzaW9uKCk7CisgICAgICBwX2UgPSBwX2UtPm1fcF9uZXh0OworICAgIH0KKworICByZXNpemVfYmFzZTo6bm90aWZ5X2luc2VydF9zZWFyY2hfZW5kKCk7CisgIGlmIChwX2UgIT0gTlVMTCkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9leGlzdHMocl9rZXkpOykKKyAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcigmcF9lLT5tX3ZhbHVlLCBmYWxzZSk7CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6Y2hlY2tfa2V5X2RvZXNfbm90X2V4aXN0KHJfa2V5KTspCisgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihpbnNlcnRfbmV3X2ltcChyX3ZhbCwgcG9zKSwgdHJ1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vaW5zZXJ0X3N0b3JlX2hhc2hfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2luc2VydF9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYzI4NGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2luc2VydF9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNzEgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGluc2VydF9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgY2NfaHRfbWFwXydzIGluc2VydCByZWxhdGVkIGZ1bmN0aW9ucywKKyAqIHdoZW4gdGhlIGhhc2ggdmFsdWUgaXMgc3RvcmVkLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgc3RkOjpwYWlyPHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludF9pdGVyYXRvciwgYm9vbD4KK1BCX0RTX0NMQVNTX0NfREVDOjoKK2luc2VydF9pbXAoY29uc3RfcmVmZXJlbmNlIHJfdmFsLCB0cnVlX3R5cGUpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICBjb25zdF9rZXlfcmVmZXJlbmNlIGtleSA9IFBCX0RTX1YyRihyX3ZhbCk7CisgIGNvbXBfaGFzaCBwb3NfaGFzaF9wYWlyID0gcmFuZ2VkX2hhc2hfZm5fYmFzZTo6b3BlcmF0b3IoKShrZXkpOworICBlbnRyeV9wb2ludGVyIHBfZSA9IG1fZW50cmllc1twb3NfaGFzaF9wYWlyLmZpcnN0XTsKKyAgcmVzaXplX2Jhc2U6Om5vdGlmeV9pbnNlcnRfc2VhcmNoX3N0YXJ0KCk7CisKKyAgd2hpbGUgKHBfZSAhPSBOVUxMICYmICFoYXNoX2VxX2ZuX2Jhc2U6Om9wZXJhdG9yKCkoUEJfRFNfVjJGKHBfZS0+bV92YWx1ZSksCisJCQkJCQkgICAgIHBfZS0+bV9oYXNoLAorCQkJCQkJICAgIGtleSwgcG9zX2hhc2hfcGFpci5zZWNvbmQpKQorICAgIHsKKyAgICAgIHJlc2l6ZV9iYXNlOjpub3RpZnlfaW5zZXJ0X3NlYXJjaF9jb2xsaXNpb24oKTsKKyAgICAgIHBfZSA9IHBfZS0+bV9wX25leHQ7CisgICAgfQorCisgIHJlc2l6ZV9iYXNlOjpub3RpZnlfaW5zZXJ0X3NlYXJjaF9lbmQoKTsKKyAgaWYgKHBfZSAhPSBOVUxMKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6Y2hlY2tfa2V5X2V4aXN0cyhrZXkpOykKKyAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcigmcF9lLT5tX3ZhbHVlLCBmYWxzZSk7CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6Y2hlY2tfa2V5X2RvZXNfbm90X2V4aXN0KGtleSk7KQorICByZXR1cm4gc3RkOjptYWtlX3BhaXIoaW5zZXJ0X25ld19pbXAocl92YWwsIHBvc19oYXNoX3BhaXIpLCB0cnVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9pdGVyYXRvcnNfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2l0ZXJhdG9yc19mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzU5MmI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9pdGVyYXRvcnNfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw4MyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgaXRlcmF0b3JzX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgY2NfaHRfbWFwXydzIGl0ZXJhdG9ycyByZWxhdGVkIGZ1bmN0aW9ucywgZS5nLiwKKyAqIGJlZ2luKCkuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjppdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OnNfZW5kX2l0OworCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6c19jb25zdF9lbmRfaXQ7CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitiZWdpbigpCit7CisgIHBvaW50ZXIgcF92YWx1ZTsKKyAgc3RkOjpwYWlyPGVudHJ5X3BvaW50ZXIsIHNpemVfdHlwZT4gcG9zOworICBnZXRfc3RhcnRfaXRfc3RhdGUocF92YWx1ZSwgcG9zKTsKKyAgcmV0dXJuIGl0ZXJhdG9yKHBfdmFsdWUsIHBvcywgdGhpcyk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitlbmQoKQoreyByZXR1cm4gc19lbmRfaXQ7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2JlZ2luKCkgY29uc3QKK3sKKyAgcG9pbnRlciBwX3ZhbHVlOworICBzdGQ6OnBhaXI8ZW50cnlfcG9pbnRlciwgc2l6ZV90eXBlPiBwb3M7CisgIGdldF9zdGFydF9pdF9zdGF0ZShwX3ZhbHVlLCBwb3MpOworICByZXR1cm4gY29uc3RfaXRlcmF0b3IocF92YWx1ZSwgcG9zLCB0aGlzKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VuZCgpIGNvbnN0Cit7IHJldHVybiBzX2NvbnN0X2VuZF9pdDsgfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL3BvbGljeV9hY2Nlc3NfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL3BvbGljeV9hY2Nlc3NfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2NjFiMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vcG9saWN5X2FjY2Vzc19mbl9pbXBzLmhwcApAQCAtMCwwICsxLDg4IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBwb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgY2NfaHRfbWFwXydzIHBvbGljeSBhY2Nlc3MKKyAqICAgIGZ1bmN0aW9ucy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworSGFzaF9GbiYgCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfaGFzaF9mbigpCit7IHJldHVybiAqdGhpczsgfQorCitQQl9EU19DTEFTU19UX0RFQworY29uc3QgSGFzaF9GbiYgCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfaGFzaF9mbigpIGNvbnN0Cit7IHJldHVybiAqdGhpczsgfQorCitQQl9EU19DTEFTU19UX0RFQworRXFfRm4mIAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X2VxX2ZuKCkKK3sgcmV0dXJuICp0aGlzOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitjb25zdCBFcV9GbiYgCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfZXFfZm4oKSBjb25zdAoreyByZXR1cm4gKnRoaXM7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK0NvbWJfSGFzaF9GbiYgCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfY29tYl9oYXNoX2ZuKCkKK3sgcmV0dXJuICp0aGlzOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitjb25zdCBDb21iX0hhc2hfRm4mIAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X2NvbWJfaGFzaF9mbigpIGNvbnN0Cit7IHJldHVybiAqdGhpczsgfQorCitQQl9EU19DTEFTU19UX0RFQworUmVzaXplX1BvbGljeSYgCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfcmVzaXplX3BvbGljeSgpCit7IHJldHVybiAqdGhpczsgfQorCitQQl9EU19DTEFTU19UX0RFQworY29uc3QgUmVzaXplX1BvbGljeSYgCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfcmVzaXplX3BvbGljeSgpIGNvbnN0Cit7IHJldHVybiAqdGhpczsgfQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9yZXNpemVfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL3Jlc2l6ZV9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjMzM2VjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9yZXNpemVfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxMzMgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHJlc2l6ZV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGNjX2h0X21hcF8ncyByZXNpemUgcmVsYXRlZCBmdW5jdGlvbnMuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBib29sCitQQl9EU19DTEFTU19DX0RFQzo6Citkb19yZXNpemVfaWZfbmVlZGVkKCkKK3sKKyAgaWYgKCFyZXNpemVfYmFzZTo6aXNfcmVzaXplX25lZWRlZCgpKQorICAgIHJldHVybiBmYWxzZTsKKyAgcmVzaXplX2ltcChyZXNpemVfYmFzZTo6Z2V0X25ld19zaXplKG1fbnVtX2UsIG1fbnVtX3VzZWRfZSkpOworICByZXR1cm4gdHJ1ZTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2RvX3Jlc2l6ZShzaXplX3R5cGUgbGVuKQoreyByZXNpemVfaW1wKHJlc2l6ZV9iYXNlOjpnZXRfbmVhcmVzdF9sYXJnZXJfc2l6ZShsZW4pKTsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2RvX3Jlc2l6ZV9pZl9uZWVkZWRfbm9fdGhyb3coKQoreworICBpZiAoIXJlc2l6ZV9iYXNlOjppc19yZXNpemVfbmVlZGVkKCkpCisgICAgcmV0dXJuOworCisgIF9fdHJ5CisgICAgeworICAgICAgcmVzaXplX2ltcChyZXNpemVfYmFzZTo6Z2V0X25ld19zaXplKG1fbnVtX2UsIG1fbnVtX3VzZWRfZSkpOworICAgIH0KKyAgX19jYXRjaCguLi4pCisgICAgeyB9CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CityZXNpemVfaW1wKHNpemVfdHlwZSBuZXdfc2l6ZSkKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIGlmIChuZXdfc2l6ZSA9PSBtX251bV9lKQorICAgIHJldHVybjsKKworICBjb25zdCBzaXplX3R5cGUgb2xkX3NpemUgPSBtX251bV9lOworICBlbnRyeV9wb2ludGVyX2FycmF5IGFfcF9lbnRyaWVzX3Jlc2l6ZWQ7CisKKyAgLy8gRm9sbG93aW5nIGxpbmUgbWlnaHQgdGhyb3cgYW4gZXhjZXB0aW9uLgorICByYW5nZWRfaGFzaF9mbl9iYXNlOjpub3RpZnlfcmVzaXplZChuZXdfc2l6ZSk7CisKKyAgX190cnkKKyAgICB7CisgICAgICAvLyBGb2xsb3dpbmcgbGluZSBtaWdodCB0aHJvdyBhbiBleGNlcHRpb24uCisgICAgICBhX3BfZW50cmllc19yZXNpemVkID0gc19lbnRyeV9wb2ludGVyX2FsbG9jYXRvci5hbGxvY2F0ZShuZXdfc2l6ZSk7CisgICAgICBtX251bV9lID0gbmV3X3NpemU7CisgICAgfQorICBfX2NhdGNoKC4uLikKKyAgICB7CisgICAgICByYW5nZWRfaGFzaF9mbl9iYXNlOjpub3RpZnlfcmVzaXplZChvbGRfc2l6ZSk7CisgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAgICB9CisKKyAgLy8gQXQgdGhpcyBwb2ludCBubyBleGNlcHRpb25zIGNhbiBiZSB0aHJvd24uCisgIHJlc2l6ZV9pbXBfbm9fZXhjZXB0aW9ucyhuZXdfc2l6ZSwgYV9wX2VudHJpZXNfcmVzaXplZCwgb2xkX3NpemUpOworICBSZXNpemVfUG9saWN5Ojpub3RpZnlfcmVzaXplZChuZXdfc2l6ZSk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVzaXplX2ltcF9ub19leGNlcHRpb25zKHNpemVfdHlwZSBuZXdfc2l6ZSwgZW50cnlfcG9pbnRlcl9hcnJheSBhX3BfZW50cmllc19yZXNpemVkLCBzaXplX3R5cGUgb2xkX3NpemUpCit7CisgIHN0ZDo6ZmlsbChhX3BfZW50cmllc19yZXNpemVkLCBhX3BfZW50cmllc19yZXNpemVkICsgbV9udW1fZSwKKwkgICAgZW50cnlfcG9pbnRlcihOVUxMKSk7CisKKyAgZm9yIChzaXplX3R5cGUgcG9zID0gMDsgcG9zIDwgb2xkX3NpemU7ICsrcG9zKQorICAgIHsKKyAgICAgIGVudHJ5X3BvaW50ZXIgcF9lID0gbV9lbnRyaWVzW3Bvc107CisgICAgICB3aGlsZSAocF9lICE9IE5VTEwpCisJcF9lID0gcmVzaXplX2ltcF9ub19leGNlcHRpb25zX3JlYXNzaWduX3BvaW50ZXIocF9lLCBhX3BfZW50cmllc19yZXNpemVkLCAgdHJhaXRzX2Jhc2U6Om1fc3RvcmVfZXh0cmFfaW5kaWNhdG9yKTsKKyAgICB9CisKKyAgbV9udW1fZSA9IG5ld19zaXplOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF9lbnRyeV9wb2ludGVyX2FycmF5X3ZhbGlkKGFfcF9lbnRyaWVzX3Jlc2l6ZWQpOykKKyAgc19lbnRyeV9wb2ludGVyX2FsbG9jYXRvci5kZWFsbG9jYXRlKG1fZW50cmllcywgb2xkX3NpemUpOworICBtX2VudHJpZXMgPSBhX3BfZW50cmllc19yZXNpemVkOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKK30KKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL3Jlc2l6ZV9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL3Jlc2l6ZV9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwPgorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL3Jlc2l6ZV9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9yZXNpemVfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTc3NjMwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9yZXNpemVfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDU0IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSByZXNpemVfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGNjX2h0X21hcF8ncyByZXNpemUgcmVsYXRlZCBmdW5jdGlvbnMsIHdoZW4gdGhlCisgKiAgICBoYXNoIHZhbHVlIGlzIG5vdCBzdG9yZWQuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6ZW50cnlfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVzaXplX2ltcF9ub19leGNlcHRpb25zX3JlYXNzaWduX3BvaW50ZXIoZW50cnlfcG9pbnRlciBwX2UsIGVudHJ5X3BvaW50ZXJfYXJyYXkgYV9wX2VudHJpZXNfcmVzaXplZCwgZmFsc2VfdHlwZSkKK3sKKyAgY29uc3Qgc2l6ZV90eXBlIGhhc2hfcG9zID0KKyAgICByYW5nZWRfaGFzaF9mbl9iYXNlOjpvcGVyYXRvcigpKFBCX0RTX1YyRihwX2UtPm1fdmFsdWUpKTsKKworICBlbnRyeV9wb2ludGVyIGNvbnN0IHBfbmV4dF9lID0gcF9lLT5tX3BfbmV4dDsKKyAgcF9lLT5tX3BfbmV4dCA9IGFfcF9lbnRyaWVzX3Jlc2l6ZWRbaGFzaF9wb3NdOworICBhX3BfZW50cmllc19yZXNpemVkW2hhc2hfcG9zXSA9IHBfZTsKKyAgcmV0dXJuIHBfbmV4dF9lOworfQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9yZXNpemVfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vcmVzaXplX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFhZGI2MQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vcmVzaXplX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw1NCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcmVzaXplX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBjY19odF9tYXBfJ3MgcmVzaXplIHJlbGF0ZWQgZnVuY3Rpb25zLCB3aGVuIHRoZQorICogICAgaGFzaCB2YWx1ZSBpcyBzdG9yZWQuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6ZW50cnlfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVzaXplX2ltcF9ub19leGNlcHRpb25zX3JlYXNzaWduX3BvaW50ZXIoZW50cnlfcG9pbnRlciBwX2UsIGVudHJ5X3BvaW50ZXJfYXJyYXkgYV9wX2VudHJpZXNfcmVzaXplZCwgdHJ1ZV90eXBlKQoreworICBjb25zdCBjb21wX2hhc2ggcG9zX2hhc2hfcGFpciA9CisgICAgcmFuZ2VkX2hhc2hfZm5fYmFzZTo6b3BlcmF0b3IoKShQQl9EU19WMkYocF9lLT5tX3ZhbHVlKSwgcF9lLT5tX2hhc2gpOworCisgIGVudHJ5X3BvaW50ZXIgY29uc3QgcF9uZXh0X2UgPSBwX2UtPm1fcF9uZXh0OworICBwX2UtPm1fcF9uZXh0ID0gYV9wX2VudHJpZXNfcmVzaXplZFtwb3NfaGFzaF9wYWlyLmZpcnN0XTsKKyAgYV9wX2VudHJpZXNfcmVzaXplZFtwb3NfaGFzaF9wYWlyLmZpcnN0XSA9IHBfZTsKKyAgcmV0dXJuIHBfbmV4dF9lOworfQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9zaXplX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9zaXplX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNWVjODUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL3NpemVfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw1OSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgc2l6ZV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGNjX2h0X21hcF8ncyBlbnRpcmUgY29udGFpbmVyIHNpemUgcmVsYXRlZAorICogICAgZnVuY3Rpb25zLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc2l6ZSgpIGNvbnN0Cit7IHJldHVybiBtX251bV91c2VkX2U7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitlbXB0eSgpIGNvbnN0Cit7IHJldHVybiAoc2l6ZSgpID09IDApOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6OgorbWF4X3NpemUoKSBjb25zdAoreyByZXR1cm4gc19lbnRyeV9hbGxvY2F0b3IubWF4X3NpemUoKTsgfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL3N0YW5kYXJkX3BvbGljaWVzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vc3RhbmRhcmRfcG9saWNpZXMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YzFlZTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL3N0YW5kYXJkX3BvbGljaWVzLmhwcApAQCAtMCwwICsxLDQ2IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBzdGFuZGFyZF9wb2xpY2llcy5ocHAKKyAqIENvbnRhaW5zIHN0YW5kYXJkIHBvbGljaWVzIGZvciBjY19odF9tYXAgdHlwZXMuCisgKi8KKworI2lmbmRlZiBQQl9EU19DQ19IVF9NQVBfU1RBTkRBUkRfUE9MSUNJRVNfSFBQCisjZGVmaW5lIFBCX0RTX0NDX0hUX01BUF9TVEFOREFSRF9QT0xJQ0lFU19IUFAKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvc3RhbmRhcmRfcG9saWNpZXMuaHBwPgorCisjZW5kaWYgLy8gI2lmbmRlZiBQQl9EU19DQ19IVF9NQVBfU1RBTkRBUkRfUE9MSUNJRVNfSFBQCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL3RyYWNlX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy90cmFjZV9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmE1Njc2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy90cmFjZV9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDcyIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSB0cmFjZV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGNjX2h0X21hcF8ncyB0cmFjZS1tb2RlIGZ1bmN0aW9ucy4KKyAqLworCisjaWZkZWYgUEJfRFNfSFRfTUFQX1RSQUNFXworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordHJhY2UoKSBjb25zdAoreworICBzdGQ6OmNlcnIgPDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obV9udW1fZSkgPDwgIiAiIAorCSAgICA8PCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihtX251bV91c2VkX2UpIDw8IHN0ZDo6ZW5kbDsKKworICBmb3IgKHNpemVfdHlwZSBpID0gMDsgaSA8IG1fbnVtX2U7ICsraSkKKyAgICB7CisgICAgICBzdGQ6OmNlcnIgPDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oaSkgPDwgIiAiOworICAgICAgdHJhY2VfbGlzdChtX2VudHJpZXNbaV0pOworICAgICAgc3RkOjpjZXJyIDw8IHN0ZDo6ZW5kbDsKKyAgICB9Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cit0cmFjZV9saXN0KGNvbnN0X2VudHJ5X3BvaW50ZXIgcF9sKSBjb25zdAoreworICBzaXplX3R5cGUgaXRlcmF0ZWRfbnVtX3VzZWRfZSA9IDA7CisgIHdoaWxlIChwX2wgIT0gTlVMTCkKKyAgICB7CisgICAgICBzdGQ6OmNlcnIgPDwgUEJfRFNfVjJGKHBfbC0+bV92YWx1ZSkgPDwgIiAiOworICAgICAgcF9sID0gcF9sLT5tX3BfbmV4dDsKKyAgICB9Cit9CisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9jb25kX2RlYWx0b3IuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NvbmRfZGVhbHRvci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVlNDhhMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9jb25kX2RlYWx0b3IuaHBwCkBAIC0wLDAgKzEsMTI1IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBjb25kX2RlYWx0b3IuaHBwCisgKiBDb250YWlucyBhIGNvbmRpdGlvbmFsIGRlYWxsb2NhdG9yLgorICovCisKKyNpZm5kZWYgUEJfRFNfQ09ORF9ERUFMVE9SX0hQUAorI2RlZmluZSBQQl9EU19DT05EX0RFQUxUT1JfSFBQCisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisKKyNkZWZpbmUgUEJfRFNfQ09ORF9ERUFMVE9SX0NMQVNTX1RfREVDCQlcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW50cnksIGNsYXNzIEFsbG9jYXRvcj4KKworI2RlZmluZSBQQl9EU19DT05EX0RFQUxUT1JfQ0xBU1NfQ19ERUMJCQkJXAorICAgIGNvbmRfZGVhbHRvcjwJCQkJCQlcCisJCQkJCQlFbnRyeSwJCVwKKwkJCQkJCUFsbG9jYXRvcj4KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5LCBjbGFzcyBBbGxvY2F0b3I+CisgICAgY2xhc3MgY29uZF9kZWFsdG9yCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPEVudHJ5Pjo6b3RoZXIKKyAgICAgIGVudHJ5X2FsbG9jYXRvcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBlbnRyeV9hbGxvY2F0b3I6OnBvaW50ZXIgZW50cnlfcG9pbnRlcjsKKworICAgIHB1YmxpYzoKKyAgICAgIGlubGluZQorICAgICAgY29uZF9kZWFsdG9yKGVudHJ5X3BvaW50ZXIgcF9lKTsKKworICAgICAgaW5saW5lCisgICAgICB+Y29uZF9kZWFsdG9yKCk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBzZXRfbm9fYWN0aW9uKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgZW50cnlfcG9pbnRlciBtX3BfZTsKKworICAgICAgYm9vbCBtX25vX2FjdGlvbl9kZXN0cnVjdG9yOworCisgICAgICBzdGF0aWMgZW50cnlfYWxsb2NhdG9yIHNfYWxsb2M7CisgICAgfTsKKworICAgIFBCX0RTX0NPTkRfREVBTFRPUl9DTEFTU19UX0RFQworICAgIHR5cGVuYW1lIFBCX0RTX0NPTkRfREVBTFRPUl9DTEFTU19DX0RFQzo6ZW50cnlfYWxsb2NhdG9yCisgICAgUEJfRFNfQ09ORF9ERUFMVE9SX0NMQVNTX0NfREVDOjpzX2FsbG9jOworCisgICAgUEJfRFNfQ09ORF9ERUFMVE9SX0NMQVNTX1RfREVDCisgICAgaW5saW5lCisgICAgUEJfRFNfQ09ORF9ERUFMVE9SX0NMQVNTX0NfREVDOjoKKyAgICBjb25kX2RlYWx0b3IoZW50cnlfcG9pbnRlciBwX2UpIDoKKyAgICAgIG1fcF9lKHBfZSksCisgICAgICBtX25vX2FjdGlvbl9kZXN0cnVjdG9yKGZhbHNlKQorICAgIHsgfQorCisgICAgUEJfRFNfQ09ORF9ERUFMVE9SX0NMQVNTX1RfREVDCisgICAgaW5saW5lIHZvaWQKKyAgICBQQl9EU19DT05EX0RFQUxUT1JfQ0xBU1NfQ19ERUM6OgorICAgIHNldF9ub19hY3Rpb24oKQorICAgIHsKKyAgICAgIG1fbm9fYWN0aW9uX2Rlc3RydWN0b3IgPSB0cnVlOworICAgIH0KKworICAgIFBCX0RTX0NPTkRfREVBTFRPUl9DTEFTU19UX0RFQworICAgIGlubGluZQorICAgIFBCX0RTX0NPTkRfREVBTFRPUl9DTEFTU19DX0RFQzo6CisgICAgfmNvbmRfZGVhbHRvcigpCisgICAgeworICAgICAgaWYgKG1fbm9fYWN0aW9uX2Rlc3RydWN0b3IpCisgICAgICAgIHJldHVybjsKKworICAgICAgc19hbGxvYy5kZWFsbG9jYXRlKG1fcF9lLCAxKTsKKyAgICB9CisKKyN1bmRlZiBQQl9EU19DT05EX0RFQUxUT1JfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DT05EX0RFQUxUT1JfQ0xBU1NfQ19ERUMKKworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKKworfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgLy8gI2lmbmRlZiBQQl9EU19DT05EX0RFQUxUT1JfSFBQCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGM5OTg4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTAzIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBjb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcyBhcHBsaWNhYmxlIHRvIGRpZmZlcmVudCBjb250YWluZXJzLgorICovCisKK2lubGluZQorUEJfRFNfQ0xBU1NfTkFNRSgpCit7IH0KKworaW5saW5lCitQQl9EU19DTEFTU19OQU1FKGNvbnN0IFBCX0RTX0NMQVNTX05BTUUmIG90aGVyKSAKKzogYmFzZV90eXBlKChjb25zdCBiYXNlX3R5cGUmKW90aGVyKQoreyB9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQwPgoraW5saW5lCitQQl9EU19DTEFTU19OQU1FKFQwIHQwKSA6IGJhc2VfdHlwZSh0MCkKK3sgfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDE+CitpbmxpbmUKK1BCX0RTX0NMQVNTX05BTUUoVDAgdDAsIFQxIHQxKSA6IGJhc2VfdHlwZSh0MCwgdDEpCit7IH0KKwordGVtcGxhdGU8dHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KK2lubGluZQorUEJfRFNfQ0xBU1NfTkFNRShUMCB0MCwgVDEgdDEsIFQyIHQyKSA6IGJhc2VfdHlwZSh0MCwgdDEsIHQyKQoreyB9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzPgoraW5saW5lCitQQl9EU19DTEFTU19OQU1FKFQwIHQwLCBUMSB0MSwgVDIgdDIsIFQzIHQzKSAKKzogYmFzZV90eXBlKHQwLCB0MSwgdDIsIHQzKQoreyB9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUND4KK2lubGluZQorUEJfRFNfQ0xBU1NfTkFNRShUMCB0MCwgVDEgdDEsIFQyIHQyLCBUMyB0MywgVDQgdDQpIAorOiBiYXNlX3R5cGUodDAsIHQxLCB0MiwgdDMsIHQ0KQoreyB9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwKKwkgdHlwZW5hbWUgVDU+CitpbmxpbmUKK1BCX0RTX0NMQVNTX05BTUUoVDAgdDAsIFQxIHQxLCBUMiB0MiwgVDMgdDMsIFQ0IHQ0LCBUNSB0NSkgCis6IGJhc2VfdHlwZSh0MCwgdDEsIHQyLCB0MywgdDQsIHQ1KQoreyB9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwKKwkgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2PgoraW5saW5lCitQQl9EU19DTEFTU19OQU1FKFQwIHQwLCBUMSB0MSwgVDIgdDIsIFQzIHQzLCBUNCB0NCwgVDUgdDUsIFQ2IHQ2KSAKKzogYmFzZV90eXBlKHQwLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2KQoreyB9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwKKwkgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNz4KK2lubGluZQorUEJfRFNfQ0xBU1NfTkFNRShUMCB0MCwgVDEgdDEsIFQyIHQyLCBUMyB0MywgVDQgdDQsIFQ1IHQ1LCBUNiB0NiwgVDcgdDcpIAorOiBiYXNlX3R5cGUodDAsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3KQoreyB9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwKKwkgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDg+CitpbmxpbmUKK1BCX0RTX0NMQVNTX05BTUUoVDAgdDAsIFQxIHQxLCBUMiB0MiwgVDMgdDMsIFQ0IHQ0LCBUNSB0NSwgVDYgdDYsIFQ3IHQ3LCBUOCB0OCkKKzogYmFzZV90eXBlKHQwLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgpCit7IH0KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9jb250YWluZXJfYmFzZV9kaXNwYXRjaC5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY29udGFpbmVyX2Jhc2VfZGlzcGF0Y2guaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmOGQ4N2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvY29udGFpbmVyX2Jhc2VfZGlzcGF0Y2guaHBwCkBAIC0wLDAgKzEsMzMyIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBjb250YWluZXJfYmFzZV9kaXNwYXRjaC5ocHAKKyAqIENvbnRhaW5zIGFuIGFzc29jaWF0aXZlIGNvbnRhaW5lciBkaXNwYXRjaGluZyBiYXNlLgorICovCisKKyNpZm5kZWYgUEJfRFNfQVNTT0NfQ05UTlJfQkFTRV9EU19ESVNQQVRDSEVSX0hQUAorI2RlZmluZSBQQl9EU19BU1NPQ19DTlROUl9CQVNFX0RTX0RJU1BBVENIRVJfSFBQCisKKyNpbmNsdWRlIDxleHQvdHlwZWxpc3QuaD4KKworI2RlZmluZSBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9tYXBfL2x1X21hcF8uaHBwPgorI3VuZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKworI2RlZmluZSBQQl9EU19EQVRBX0ZBTFNFX0lORElDQVRPUgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9sdV9tYXBfLmhwcD4KKyN1bmRlZiBQQl9EU19EQVRBX0ZBTFNFX0lORElDQVRPUgorCisjZGVmaW5lIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3JiX3RyZWVfbWFwXy9yYl90cmVlXy5ocHA+CisjdW5kZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorCisjZGVmaW5lIFBCX0RTX0RBVEFfRkFMU0VfSU5ESUNBVE9SCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vcmJfdHJlZV8uaHBwPgorI3VuZGVmIFBCX0RTX0RBVEFfRkFMU0VfSU5ESUNBVE9SCisKKyNkZWZpbmUgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vc3BsYXlfdHJlZV8uaHBwPgorI3VuZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKworI2RlZmluZSBQQl9EU19EQVRBX0ZBTFNFX0lORElDQVRPUgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vc3BsYXlfdHJlZV8uaHBwPgorI3VuZGVmIFBCX0RTX0RBVEFfRkFMU0VfSU5ESUNBVE9SCisKKyNkZWZpbmUgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL292X3RyZWVfbWFwXy5ocHA+CisjdW5kZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorCisjZGVmaW5lIFBCX0RTX0RBVEFfRkFMU0VfSU5ESUNBVE9SCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vb3ZfdHJlZV9tYXBfLmhwcD4KKyN1bmRlZiBQQl9EU19EQVRBX0ZBTFNFX0lORElDQVRPUgorCisjZGVmaW5lIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9jY19odF9tYXBfLmhwcD4KKyN1bmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisKKyNkZWZpbmUgUEJfRFNfREFUQV9GQUxTRV9JTkRJQ0FUT1IKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9jY19odF9tYXBfLmhwcD4KKyN1bmRlZiBQQl9EU19EQVRBX0ZBTFNFX0lORElDQVRPUgorCisjZGVmaW5lIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9ncF9odF9tYXBfLmhwcD4KKyN1bmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisKKyNkZWZpbmUgUEJfRFNfREFUQV9GQUxTRV9JTkRJQ0FUT1IKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9ncF9odF9tYXBfLmhwcD4KKyN1bmRlZiBQQl9EU19EQVRBX0ZBTFNFX0lORElDQVRPUgorCisjZGVmaW5lIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9wYXRfdHJpZV8uaHBwPgorI3VuZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKworI2RlZmluZSBQQl9EU19EQVRBX0ZBTFNFX0lORElDQVRPUgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3BhdF90cmllXy5ocHA+CisjdW5kZWYgUEJfRFNfREFUQV9GQUxTRV9JTkRJQ0FUT1IKKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKK25hbWVzcGFjZSBkZXRhaWwKK3sKKyAgLy8gUHJpbWFyeSB0ZW1wbGF0ZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBNYXBwZWQsIHR5cGVuYW1lIERhdGFfU3RydWN0dXJlX1RhcSwKKwkgICB0eXBlbmFtZSBQb2xpY3lfVGwsIHR5cGVuYW1lIEFsbG9jPgorICAgIHN0cnVjdCBjb250YWluZXJfYmFzZV9kaXNwYXRjaDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgUG9saWN5X1RsLCB0eXBlbmFtZSBBbGxvYz4KKyAgICBzdHJ1Y3QgY29udGFpbmVyX2Jhc2VfZGlzcGF0Y2g8S2V5LCBNYXBwZWQsIGxpc3RfdXBkYXRlX3RhZywgCisJCQkJICAgUG9saWN5X1RsLCBBbGxvYz4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCAwPglhdDA7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF0MDo6dHlwZQkJCSAgICAJYXQwdDsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCAxPiAJYXQxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDE6OnR5cGUJCQkgICAgCWF0MXQ7CisgICAgICAKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIGx1X21hcF9kYXRhXzxLZXksIE1hcHBlZCwgYXQwdCwgQWxsb2MsIGF0MXQ+CXR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFBvbGljeV9UbCwgdHlwZW5hbWUgQWxsb2M+CisgICAgc3RydWN0IGNvbnRhaW5lcl9iYXNlX2Rpc3BhdGNoPEtleSwgbnVsbF9tYXBwZWRfdHlwZSwgbGlzdF91cGRhdGVfdGFnLAorCQkJCSAgIFBvbGljeV9UbCwgQWxsb2M+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMD4JYXQwOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDA6OnR5cGUJCQkgICAgCWF0MHQ7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMT4gCWF0MTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQxOjp0eXBlCQkJICAgIAlhdDF0OworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBsdV9tYXBfbm9fZGF0YV88S2V5LCBudWxsX21hcHBlZF90eXBlLCBhdDB0LCBBbGxvYywgYXQxdD4gdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0eXBlbmFtZSBQb2xpY3lfVGwsIHR5cGVuYW1lIEFsbG9jPgorICAgIHN0cnVjdCBjb250YWluZXJfYmFzZV9kaXNwYXRjaDxLZXksIE1hcHBlZCwgcGF0X3RyaWVfdGFnLCBQb2xpY3lfVGwsIEFsbG9jPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBfX2dudV9jeHg6OnR5cGVsaXN0OjphdF9pbmRleDxQb2xpY3lfVGwsIDE+IAlhdDE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF0MTo6dHlwZQkJCSAgICAJYXQxdDsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgcGF0X3RyaWVfZGF0YV88S2V5LCBNYXBwZWQsIGF0MXQsIEFsbG9jPiAJCXR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFBvbGljeV9UbCwgdHlwZW5hbWUgQWxsb2M+CisgICAgc3RydWN0IGNvbnRhaW5lcl9iYXNlX2Rpc3BhdGNoPEtleSwgbnVsbF9tYXBwZWRfdHlwZSwgcGF0X3RyaWVfdGFnLAorCQkJCSAgIFBvbGljeV9UbCwgQWxsb2M+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMT4gCWF0MTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQxOjp0eXBlCQkJICAgIAlhdDF0OworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBwYXRfdHJpZV9ub19kYXRhXzxLZXksIG51bGxfbWFwcGVkX3R5cGUsIGF0MXQsIEFsbG9jPiB0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBNYXBwZWQsIHR5cGVuYW1lIFBvbGljeV9UbCwgdHlwZW5hbWUgQWxsb2M+CisgICAgc3RydWN0IGNvbnRhaW5lcl9iYXNlX2Rpc3BhdGNoPEtleSwgTWFwcGVkLCByYl90cmVlX3RhZywgUG9saWN5X1RsLCBBbGxvYz4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCAwPglhdDA7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF0MDo6dHlwZQkJCSAgICAJYXQwdDsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCAxPiAJYXQxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDE6OnR5cGUJCQkgICAgCWF0MXQ7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHJiX3RyZWVfZGF0YV88S2V5LCBNYXBwZWQsIGF0MHQsIGF0MXQsIEFsbG9jPiAJdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgUG9saWN5X1RsLCB0eXBlbmFtZSBBbGxvYz4KKyAgICBzdHJ1Y3QgY29udGFpbmVyX2Jhc2VfZGlzcGF0Y2g8S2V5LCBudWxsX21hcHBlZF90eXBlLCByYl90cmVlX3RhZywKKwkJCQkgICBQb2xpY3lfVGwsIEFsbG9jPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBfX2dudV9jeHg6OnR5cGVsaXN0OjphdF9pbmRleDxQb2xpY3lfVGwsIDA+CWF0MDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQwOjp0eXBlCQkJICAgIAlhdDB0OworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6OnR5cGVsaXN0OjphdF9pbmRleDxQb2xpY3lfVGwsIDE+IAlhdDE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF0MTo6dHlwZQkJCSAgICAJYXQxdDsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgcmJfdHJlZV9ub19kYXRhXzxLZXksIG51bGxfbWFwcGVkX3R5cGUsIGF0MHQsIGF0MXQsIEFsbG9jPiB0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBNYXBwZWQsIHR5cGVuYW1lIFBvbGljeV9UbCwgdHlwZW5hbWUgQWxsb2M+CisgICAgc3RydWN0IGNvbnRhaW5lcl9iYXNlX2Rpc3BhdGNoPEtleSwgTWFwcGVkLCBzcGxheV90cmVlX3RhZywgCisJCQkJICAgUG9saWN5X1RsLCBBbGxvYz4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCAwPglhdDA7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF0MDo6dHlwZQkJCSAgICAJYXQwdDsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCAxPiAJYXQxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDE6OnR5cGUJCQkgICAgCWF0MXQ7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHNwbGF5X3RyZWVfZGF0YV88S2V5LCBNYXBwZWQsIGF0MHQsIGF0MXQsIEFsbG9jPiAJdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgUG9saWN5X1RsLCB0eXBlbmFtZSBBbGxvYz4KKyAgICBzdHJ1Y3QgY29udGFpbmVyX2Jhc2VfZGlzcGF0Y2g8S2V5LCBudWxsX21hcHBlZF90eXBlLCBzcGxheV90cmVlX3RhZywKKwkJCQkgICBQb2xpY3lfVGwsIEFsbG9jPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBfX2dudV9jeHg6OnR5cGVsaXN0OjphdF9pbmRleDxQb2xpY3lfVGwsIDA+CWF0MDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQwOjp0eXBlCQkJICAgIAlhdDB0OworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6OnR5cGVsaXN0OjphdF9pbmRleDxQb2xpY3lfVGwsIDE+IAlhdDE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF0MTo6dHlwZQkJCSAgICAJYXQxdDsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgc3BsYXlfdHJlZV9ub19kYXRhXzxLZXksIG51bGxfbWFwcGVkX3R5cGUsIGF0MHQsIGF0MXQsIEFsbG9jPiB0eXBlOworICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0eXBlbmFtZSBQb2xpY3lfVGwsIHR5cGVuYW1lIEFsbG9jPgorICAgIHN0cnVjdCBjb250YWluZXJfYmFzZV9kaXNwYXRjaDxLZXksIE1hcHBlZCwgb3ZfdHJlZV90YWcsIFBvbGljeV9UbCwgQWxsb2M+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMD4JYXQwOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDA6OnR5cGUJCQkgICAgCWF0MHQ7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMT4gCWF0MTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQxOjp0eXBlCQkJICAgIAlhdDF0OworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBvdl90cmVlX2RhdGFfPEtleSwgTWFwcGVkLCBhdDB0LCBhdDF0LCBBbGxvYz4gCXR5cGU7CisgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBQb2xpY3lfVGwsIHR5cGVuYW1lIEFsbG9jPgorICAgIHN0cnVjdCBjb250YWluZXJfYmFzZV9kaXNwYXRjaDxLZXksIG51bGxfbWFwcGVkX3R5cGUsIG92X3RyZWVfdGFnLAorCQkJCSAgIFBvbGljeV9UbCwgQWxsb2M+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMD4JYXQwOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDA6OnR5cGUJCQkgICAgCWF0MHQ7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMT4gCWF0MTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQxOjp0eXBlCQkJICAgIAlhdDF0OworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBvdl90cmVlX25vX2RhdGFfPEtleSwgbnVsbF9tYXBwZWRfdHlwZSwgYXQwdCwgYXQxdCwgQWxsb2M+IHR5cGU7CisgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBNYXBwZWQsIHR5cGVuYW1lIFBvbGljeV9UbCwgdHlwZW5hbWUgQWxsb2M+CisgICAgc3RydWN0IGNvbnRhaW5lcl9iYXNlX2Rpc3BhdGNoPEtleSwgTWFwcGVkLCBjY19oYXNoX3RhZywgUG9saWN5X1RsLCBBbGxvYz4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCAwPglhdDA7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF0MDo6dHlwZQkJCSAgICAJYXQwdDsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCAxPiAJYXQxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDE6OnR5cGUJCQkgICAgCWF0MXQ7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMj4JYXQyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDI6OnR5cGUJCQkgICAgCWF0MnQ7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMz4JYXQzOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDM6OnR5cGUJCQkJYXQzdDsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCA0PiAJYXQ0OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDQ6OnR5cGUJCQkgICAgCWF0NHQ7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIGNjX2h0X21hcF9kYXRhXzxLZXksIE1hcHBlZCwgYXQwdCwgYXQxdCwgQWxsb2MsIGF0M3Q6OnZhbHVlLCAKKwkJCSAgICAgIGF0NHQsIGF0MnQ+IAkJCXR5cGU7CisgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBQb2xpY3lfVGwsIHR5cGVuYW1lIEFsbG9jPgorICAgIHN0cnVjdCBjb250YWluZXJfYmFzZV9kaXNwYXRjaDxLZXksIG51bGxfbWFwcGVkX3R5cGUsIGNjX2hhc2hfdGFnLCAKKwkJCQkgICBQb2xpY3lfVGwsIEFsbG9jPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBfX2dudV9jeHg6OnR5cGVsaXN0OjphdF9pbmRleDxQb2xpY3lfVGwsIDA+CWF0MDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQwOjp0eXBlCQkJICAgIAlhdDB0OworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6OnR5cGVsaXN0OjphdF9pbmRleDxQb2xpY3lfVGwsIDE+IAlhdDE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF0MTo6dHlwZQkJCSAgICAJYXQxdDsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCAyPglhdDI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF0Mjo6dHlwZQkJCSAgICAJYXQydDsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCAzPglhdDM7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF0Mzo6dHlwZQkJCQlhdDN0OworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6OnR5cGVsaXN0OjphdF9pbmRleDxQb2xpY3lfVGwsIDQ+IAlhdDQ7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF0NDo6dHlwZQkJCSAgICAJYXQ0dDsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgY2NfaHRfbWFwX25vX2RhdGFfPEtleSwgbnVsbF9tYXBwZWRfdHlwZSwgYXQwdCwgYXQxdCwgQWxsb2MsIAorCQkJCSBhdDN0Ojp2YWx1ZSwgYXQ0dCwgYXQydD4gICAgCXR5cGU7CisgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBNYXBwZWQsIHR5cGVuYW1lIFBvbGljeV9UbCwgdHlwZW5hbWUgQWxsb2M+CisgICAgc3RydWN0IGNvbnRhaW5lcl9iYXNlX2Rpc3BhdGNoPEtleSwgTWFwcGVkLCBncF9oYXNoX3RhZywgUG9saWN5X1RsLCBBbGxvYz4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCAwPglhdDA7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF0MDo6dHlwZQkJCSAgICAJYXQwdDsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCAxPiAJYXQxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDE6OnR5cGUJCQkgICAgCWF0MXQ7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMj4JYXQyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDI6OnR5cGUJCQkgICAgCWF0MnQ7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMz4JYXQzOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDM6OnR5cGUJCQkJYXQzdDsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCA0PiAJYXQ0OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDQ6OnR5cGUJCQkgICAgCWF0NHQ7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgNT4gCWF0NTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQ1Ojp0eXBlCQkJICAgIAlhdDV0OworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBncF9odF9tYXBfZGF0YV88S2V5LCBNYXBwZWQsIGF0MHQsIGF0MXQsIEFsbG9jLCBhdDN0Ojp2YWx1ZSwgCisJCQkgICAgICBhdDR0LCBhdDV0LCBhdDJ0PiAJCXR5cGU7CisgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBQb2xpY3lfVGwsIHR5cGVuYW1lIEFsbG9jPgorICAgIHN0cnVjdCBjb250YWluZXJfYmFzZV9kaXNwYXRjaDxLZXksIG51bGxfbWFwcGVkX3R5cGUsIGdwX2hhc2hfdGFnLAorCQkJCSAgIFBvbGljeV9UbCwgQWxsb2M+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMD4JYXQwOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDA6OnR5cGUJCQkgICAgCWF0MHQ7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMT4gCWF0MTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQxOjp0eXBlCQkJICAgIAlhdDF0OworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6OnR5cGVsaXN0OjphdF9pbmRleDxQb2xpY3lfVGwsIDI+CWF0MjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQyOjp0eXBlCQkJICAgIAlhdDJ0OworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6OnR5cGVsaXN0OjphdF9pbmRleDxQb2xpY3lfVGwsIDM+CWF0MzsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQzOjp0eXBlCQkJCWF0M3Q7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgND4gCWF0NDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQ0Ojp0eXBlCQkJICAgIAlhdDR0OworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6OnR5cGVsaXN0OjphdF9pbmRleDxQb2xpY3lfVGwsIDU+IAlhdDU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF0NTo6dHlwZQkJCSAgICAJYXQ1dDsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgZ3BfaHRfbWFwX25vX2RhdGFfPEtleSwgbnVsbF9tYXBwZWRfdHlwZSwgYXQwdCwgYXQxdCwgQWxsb2MsCisJCQkJIGF0M3Q6OnZhbHVlLCBhdDR0LCBhdDV0LCBhdDJ0Pgl0eXBlOworICB9OworfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9kZWJ1Z19tYXBfYmFzZS5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZGVidWdfbWFwX2Jhc2UuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZThkYzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZGVidWdfbWFwX2Jhc2UuaHBwCkBAIC0wLDAgKzEsMzY0IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisgCisvKioKKyAqIEBmaWxlIGRlYnVnX21hcF9iYXNlLmhwcAorICogQ29udGFpbnMgYSBkZWJ1Zy1tb2RlIGJhc2UgZm9yIGFsbCBtYXBzLgorICovCisKKyNpZm5kZWYgUEJfRFNfREVCVUdfTUFQX0JBU0VfSFBQCisjZGVmaW5lIFBCX0RTX0RFQlVHX01BUF9CQVNFX0hQUAorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKworI2luY2x1ZGUgPGxpc3Q+CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPGV4dC90aHJvd19hbGxvY2F0b3IuaD4KKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyAgICAvLyBOZWVkIHN0ZDo6cGFpciBvc3RyZWFtIGV4dHJhY3Rvci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9UcDI+CisgICAgaW5saW5lIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCAKKwkgICAgICAgY29uc3Qgc3RkOjpwYWlyPF9UcDEsIF9UcDI+JiBwKQorICAgIHsgcmV0dXJuIChfX291dCA8PCAnKCcgPDwgcC5maXJzdCA8PCAnLCcgPDwgcC5zZWNvbmQgPDwgJyknKTsgfQorCisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIGNsYXNzIEVxX0ZuLCB0eXBlbmFtZSBDb25zdF9LZXlfUmVmZXJlbmNlPgorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFwKKyAgICBkZWJ1Z19tYXBfYmFzZTxLZXksIEVxX0ZuLCBDb25zdF9LZXlfUmVmZXJlbmNlPgorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCBjbGFzcyBFcV9GbiwgdHlwZW5hbWUgQ29uc3RfS2V5X1JlZmVyZW5jZT4KKyAgICBjbGFzcyBkZWJ1Z19tYXBfYmFzZQorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OmFsbG9jYXRvcjwgS2V5PiBrZXlfYWxsb2NhdG9yOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGtleV9hbGxvY2F0b3I6OnNpemVfdHlwZSBzaXplX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgQ29uc3RfS2V5X1JlZmVyZW5jZSBjb25zdF9rZXlfcmVmZXJlbmNlOworCisgICAgcHJvdGVjdGVkOgorICAgICAgZGVidWdfbWFwX2Jhc2UoKTsKKworICAgICAgZGVidWdfbWFwX2Jhc2UoY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKTsKKworICAgICAgfmRlYnVnX21hcF9iYXNlKCk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBpbnNlcnRfbmV3KGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgZXJhc2VfZXhpc3RpbmcoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSk7CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBjaGVja19rZXlfZXhpc3RzKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpIGNvbnN0OworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgY2hlY2tfa2V5X2RvZXNfbm90X2V4aXN0KGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpIGNvbnN0OworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgY2hlY2tfc2l6ZShzaXplX3R5cGUgc2l6ZSkgY29uc3Q7CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ21wX0ZuPgorICAgICAgdm9pZAorICAgICAgc3BsaXQoY29uc3Rfa2V5X3JlZmVyZW5jZSwgQ21wX0ZuLCBQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgICB2b2lkCisgICAgICBqb2luKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcik7CisKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBzdGQ6Omxpc3Q8IEtleT4gCQkJa2V5X3NldDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUga2V5X3NldDo6aXRlcmF0b3IgCWtleV9zZXRfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGtleV9zZXQ6OmNvbnN0X2l0ZXJhdG9yIAljb25zdF9rZXlfc2V0X2l0ZXJhdG9yOworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF92YWxpZCgpIGNvbnN0OworI2VuZGlmIAorCisgICAgICBjb25zdF9rZXlfc2V0X2l0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpIGNvbnN0OworCisgICAgICBrZXlfc2V0X2l0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpOworCisgICAgICBrZXlfc2V0IAltX2tleV9zZXQ7CisgICAgICBFcV9GbiAJbV9lcTsKKyAgICB9OworCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgZGVidWdfbWFwX2Jhc2UoKQorICAgIHsgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIGRlYnVnX21hcF9iYXNlKGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikgOiBtX2tleV9zZXQob3RoZXIubV9rZXlfc2V0KQorICAgIHsgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIH5kZWJ1Z19tYXBfYmFzZSgpCisgICAgeyBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBpbmxpbmUgdm9pZAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBpbnNlcnRfbmV3KGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgICAvLyBYWFggRklYTUU6IEFkYXB0IGZvciBfX2dudV9jeHg6OnRocm93X2FsbG9jYXRvcl9yYW5kb20uCisgICAgICAvL19fZ251X2N4eDo6dGhyb3dfYWxsb2NhdG9yPGNoYXI+IGFsbG9jOworICAgICAgLy8gY29uc3QgZG91YmxlIG9yaWdfdGhyb3dfcHJvYiA9IGFsbG9jLmdldF9wcm9iYWJpbGl0eSgpOworICAgICAgLy8gYWxsb2Muc2V0X3Byb2JhYmlsaXR5KDApOworICAgICAgaWYgKGZpbmQocl9rZXkpICE9IG1fa2V5X3NldC5lbmQoKSkKKwl7CisJICBzdGQ6OmNlcnIgPDwgImluc2VydF9uZXciIDw8IHJfa2V5IDw8IHN0ZDo6ZW5kbDsKKwkgIHN0ZDo6YWJvcnQoKTsKKwl9CisKKyAgICAgIF9fdHJ5CisJeworCSAgbV9rZXlfc2V0LnB1c2hfYmFjayhyX2tleSk7CisJfQorICAgICAgX19jYXRjaCguLi4pCisJeworCSAgc3RkOjpjZXJyIDw8ICJpbnNlcnRfbmV3IiA8PCByX2tleSA8PCBzdGQ6OmVuZGw7CisJICBzdGQ6OmFib3J0KCk7CisJfQorICAgICAgLy8gYWxsb2Muc2V0X3Byb2JhYmlsaXR5KG9yaWdfdGhyb3dfcHJvYik7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIGlubGluZSB2b2lkCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIGVyYXNlX2V4aXN0aW5nKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgICBrZXlfc2V0X2l0ZXJhdG9yIGl0ID0gZmluZChyX2tleSk7CisgICAgICBpZiAoaXQgPT0gbV9rZXlfc2V0LmVuZCgpKQorCXsKKwkgIHN0ZDo6Y2VyciA8PCAiZXJhc2VfZXhpc3RpbmciIDw8IHJfa2V5IDw8IHN0ZDo6ZW5kbDsKKwkgIHN0ZDo6YWJvcnQoKTsKKwl9CisgICAgICBtX2tleV9zZXQuZXJhc2UoaXQpOworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB2b2lkCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIGNsZWFyKCkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICAgIG1fa2V5X3NldC5jbGVhcigpOworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBpbmxpbmUgdm9pZAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBjaGVja19rZXlfZXhpc3RzKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpIGNvbnN0CisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgICBpZiAoZmluZChyX2tleSkgPT0gbV9rZXlfc2V0LmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgc3RkOjpjZXJyIDw8ICJjaGVja19rZXlfZXhpc3RzIiA8PCByX2tleSA8PCBzdGQ6OmVuZGw7CisgICAgICAgICAgc3RkOjphYm9ydCgpOworICAgICAgICB9CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIGlubGluZSB2b2lkCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIGNoZWNrX2tleV9kb2VzX25vdF9leGlzdChjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5KSBjb25zdAorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgICAgaWYgKGZpbmQocl9rZXkpICE9IG1fa2V5X3NldC5lbmQoKSkKKyAgICAgICAgeworCSAgdXNpbmcgc3RkOjpjZXJyOworCSAgdXNpbmcgc3RkOjplbmRsOworCSAgY2VyciA8PCAiY2hlY2tfa2V5X2RvZXNfbm90X2V4aXN0IiA8PCByX2tleSA8PCBlbmRsOworICAgICAgICAgIHN0ZDo6YWJvcnQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgaW5saW5lIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgY2hlY2tfc2l6ZShzaXplX3R5cGUgc2l6ZSkgY29uc3QKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBrZXlfc2V0X3NpemUgPSBtX2tleV9zZXQuc2l6ZSgpOworICAgICAgaWYgKHNpemUgIT0ga2V5X3NldF9zaXplKQorCXsKKwkgIHN0ZDo6Y2VyciA8PCAiY2hlY2tfc2l6ZSAiIDw8IHNpemUgCisJCSAgICA8PCAiICIgPDwga2V5X3NldF9zaXplIDw8IHN0ZDo6ZW5kbDsKKwkgIHN0ZDo6YWJvcnQoKTsKKwl9CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB2b2lkCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgICAgbV9rZXlfc2V0LnN3YXAob3RoZXIubV9rZXlfc2V0KTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2tleV9zZXRfaXRlcmF0b3IKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgZmluZChjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5KSBjb25zdAorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgICAgdHlwZWRlZiBjb25zdF9rZXlfc2V0X2l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7CisgICAgICBmb3IgKGl0ZXJhdG9yX3R5cGUgaXQgPSBtX2tleV9zZXQuYmVnaW4oKTsgaXQgIT0gbV9rZXlfc2V0LmVuZCgpOyArK2l0KQorCWlmIChtX2VxKCppdCwgcl9rZXkpKQorICAgICAgICAgIHJldHVybiBpdDsKKyAgICAgIHJldHVybiBtX2tleV9zZXQuZW5kKCk7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6a2V5X3NldF9pdGVyYXRvcgorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBmaW5kKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgICBrZXlfc2V0X2l0ZXJhdG9yIGl0ID0gbV9rZXlfc2V0LmJlZ2luKCk7CisgICAgICB3aGlsZSAoaXQgIT0gbV9rZXlfc2V0LmVuZCgpKQorCXsKKwkgIGlmIChtX2VxKCppdCwgcl9rZXkpKQorICAgICAgICAgICAgcmV0dXJuIGl0OworCSAgKytpdDsKKwl9CisgICAgICByZXR1cm4gaXQ7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICAgfQorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgYXNzZXJ0X3ZhbGlkKCkgY29uc3QKKyAgICB7CisgICAgICBjb25zdF9rZXlfc2V0X2l0ZXJhdG9yIHByaW1lX2l0ID0gbV9rZXlfc2V0LmJlZ2luKCk7CisgICAgICB3aGlsZSAocHJpbWVfaXQgIT0gbV9rZXlfc2V0LmVuZCgpKQorCXsKKwkgIGNvbnN0X2tleV9zZXRfaXRlcmF0b3Igc2VjX2l0ID0gcHJpbWVfaXQ7CisJICArK3NlY19pdDsKKwkgIHdoaWxlIChzZWNfaXQgIT0gbV9rZXlfc2V0LmVuZCgpKQorCSAgICB7CisJICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKCFtX2VxKCpzZWNfaXQsICpwcmltZV9pdCkpOworCSAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCghbV9lcSgqcHJpbWVfaXQsICpzZWNfaXQpKTsKKwkgICAgICArK3NlY19pdDsKKwkgICAgfQorCSAgKytwcmltZV9pdDsKKwl9CisgICAgfQorI2VuZGlmIAorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbXBfRm4+CisgICAgdm9pZAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBzcGxpdChjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5LCBDbXBfRm4gY21wX2ZuLCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCisgICAgeworICAgICAgLy8gWFhYIEZJWE1FOiBBZGFwdCBmb3IgX19nbnVfY3h4Ojp0aHJvd19hbGxvY2F0b3JfcmFuZG9tLgorICAgICAgLy8gX19nbnVfY3h4Ojp0aHJvd19hbGxvY2F0b3I8Y2hhcj4gYWxsb2M7CisgICAgICAvLyBjb25zdCBkb3VibGUgb3JpZ190aHJvd19wcm9iID0gYWxsb2MuZ2V0X3Byb2JhYmlsaXR5KCk7CisgICAgICAvLyBhbGxvYy5zZXRfcHJvYmFiaWxpdHkoMCk7CisgICAgICBvdGhlci5jbGVhcigpOworICAgICAga2V5X3NldF9pdGVyYXRvciBpdCA9IG1fa2V5X3NldC5iZWdpbigpOworICAgICAgd2hpbGUgKGl0ICE9IG1fa2V5X3NldC5lbmQoKSkKKyAgICAgICAgaWYgKGNtcF9mbihyX2tleSwgKiBpdCkpCisJICB7CisgICAgICAgICAgICBvdGhlci5pbnNlcnRfbmV3KCppdCk7CisgICAgICAgICAgICBpdCA9IG1fa2V5X3NldC5lcmFzZShpdCk7CisJICB9CisgICAgICAgIGVsc2UKKwkgICsraXQ7CisgICAgICAvLyBhbGxvYy5zZXRfcHJvYmFiaWxpdHkob3JpZ190aHJvd19wcm9iKTsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgam9pbihQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCisgICAgeworICAgICAgLy8gWFhYIEZJWE1FOiBBZGFwdCBmb3IgX19nbnVfY3h4Ojp0aHJvd19hbGxvY2F0b3JfcmFuZG9tLgorICAgICAgLy8gX19nbnVfY3h4Ojp0aHJvd19hbGxvY2F0b3I8Y2hhcj4gYWxsb2M7CisgICAgICAvLyBjb25zdCBkb3VibGUgb3JpZ190aHJvd19wcm9iID0gYWxsb2MuZ2V0X3Byb2JhYmlsaXR5KCk7CisgICAgICAvLyBhbGxvYy5zZXRfcHJvYmFiaWxpdHkoMCk7CisgICAgICBrZXlfc2V0X2l0ZXJhdG9yIGl0ID0gb3RoZXIubV9rZXlfc2V0LmJlZ2luKCk7CisgICAgICB3aGlsZSAoaXQgIT0gb3RoZXIubV9rZXlfc2V0LmVuZCgpKQorCXsKKwkgIGluc2VydF9uZXcoKml0KTsKKwkgIGl0ID0gb3RoZXIubV9rZXlfc2V0LmVyYXNlKGl0KTsKKwl9CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQob3RoZXIubV9rZXlfc2V0LmVtcHR5KCkpOworICAgICAgLy8gYWxsb2Muc2V0X3Byb2JhYmlsaXR5KG9yaWdfdGhyb3dfcHJvYik7CisgICAgfQorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworCit9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmIAorCisjZW5kaWYgCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9lcV9mbi9lcV9ieV9sZXNzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9lcV9mbi9lcV9ieV9sZXNzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzk1YmNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2VxX2ZuL2VxX2J5X2xlc3MuaHBwCkBAIC0wLDAgKzEsNjggQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGVxX2J5X2xlc3MuaHBwCisgKiBDb250YWlucyBhbiBlcXVpdmFsZW5jZSBmdW5jdGlvbi4KKyAqLworCisjaWZuZGVmIFBCX0RTX0VRX0JZX0xFU1NfSFBQCisjZGVmaW5lIFBCX0RTX0VRX0JZX0xFU1NfSFBQCisKKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHlwZXNfdHJhaXRzLmhwcD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCBjbGFzcyBDbXBfRm4+CisgICAgc3RydWN0IGVxX2J5X2xlc3MgOiBwcml2YXRlIENtcF9GbgorICAgIHsKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgS2V5JiByX2xocywgY29uc3QgS2V5JiByX3JocykgY29uc3QKKyAgICAgIHsKKwljb25zdCBib29sIGwgPSBDbXBfRm46Om9wZXJhdG9yKCkocl9saHMsIHJfcmhzKTsKKwljb25zdCBib29sIGcgPSBDbXBfRm46Om9wZXJhdG9yKCkocl9yaHMsIHJfbGhzKTsKKwlyZXR1cm4gIShsIHx8IGcpOworICAgICAgfQorICAgIH07CisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgLy8gI2lmbmRlZiBQQl9EU19FUV9CWV9MRVNTX0hQUApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2VxX2ZuL2hhc2hfZXFfZm4uaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2VxX2ZuL2hhc2hfZXFfZm4uaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMWMyNTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZXFfZm4vaGFzaF9lcV9mbi5ocHAKQEAgLTAsMCArMSwxNzkgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGhhc2hfZXFfZm4uaHBwCisgKiBDb250YWlucyAyIGVxaXZhbGVuY2UgZnVuY3Rpb25zLCBvbmUgZW1wbG95aW5nIGEgaGFzaCB2YWx1ZSwKKyAqICAgIGFuZCBvbmUgaWdub3JpbmcgaXQuCisgKi8KKworI2lmbmRlZiBQQl9EU19IQVNIX0VRX0ZOX0hQUAorI2RlZmluZSBQQl9EU19IQVNIX0VRX0ZOX0hQUAorCisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIGNsYXNzIEVxX0ZuLCBjbGFzcyBBbGxvY2F0b3IsIGJvb2wgU3RvcmVfSGFzaD4KKyAgICBzdHJ1Y3QgaGFzaF9lcV9mbjsKKworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQyBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCBjbGFzcyBFcV9GbiwgY2xhc3MgQWxsb2NhdG9yPgorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFwKKyAgICBoYXNoX2VxX2ZuPEtleSwgRXFfRm4sIEFsbG9jYXRvciwgZmFsc2U+CisKKyAgICAvKioKKyAgICAgKiBTcGVjaWFsaXphdGlvbiAxLSBUaGUgY2xpZW50IHJlcXVlc3RzIHRoYXQgaGFzaCB2YWx1ZXMgbm90IGJlIHN0b3JlZC4KKyAgICAgKiovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCBjbGFzcyBFcV9GbiwgY2xhc3MgQWxsb2NhdG9yPgorICAgIHN0cnVjdCBoYXNoX2VxX2ZuPEtleSwgRXFfRm4sIEFsbG9jYXRvciwgZmFsc2U+IDogcHVibGljIEVxX0ZuCisgICAgeworICAgICAgdHlwZWRlZiBFcV9GbiBlcV9mbl9iYXNlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPEtleT46Om90aGVyIGtleV9hbGxvY2F0b3I7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUga2V5X2FsbG9jYXRvcjo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X2tleV9yZWZlcmVuY2U7CisKKyAgICAgIGhhc2hfZXFfZm4oKTsKKworICAgICAgaGFzaF9lcV9mbihjb25zdCBFcV9GbiYgcl9lcV9mbik7CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcigpKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9saHNfa2V5LCBjb25zdF9rZXlfcmVmZXJlbmNlIHJfcmhzX2tleSkgY29uc3Q7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBzd2FwKGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcik7CisgICAgfTsKKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIGhhc2hfZXFfZm4oKQorICAgIHsgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBpbmxpbmUgdm9pZAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBzd2FwKGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKKyAgICB7IHN0ZDo6c3dhcCgoRXFfRm4mICkoKnRoaXMpLCAoRXFfRm4mIClvdGhlcik7IH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIGhhc2hfZXFfZm4oY29uc3QgRXFfRm4mIHJfZXFfZm4pIDoKKyAgICAgIEVxX0ZuKHJfZXFfZm4pCisgICAgeyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIGlubGluZSBib29sCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIG9wZXJhdG9yKCkoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2xoc19rZXksIGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9yaHNfa2V5KSBjb25zdAorICAgIHsgcmV0dXJuIChlcV9mbl9iYXNlOjpvcGVyYXRvcigpKHJfbGhzX2tleSwgcl9yaHNfa2V5KSk7IH0KKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQyBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCBjbGFzcyBFcV9GbiwgY2xhc3MgQWxsb2NhdG9yPgorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFwKKyAgICBoYXNoX2VxX2ZuPEtleSwgRXFfRm4sIEFsbG9jYXRvciwgdHJ1ZT4KKworICAgIC8qKgorICAgICAqIFNwZWNpYWxpemF0aW9uIDItIFRoZSBjbGllbnQgcmVxdWVzdHMgdGhhdCBoYXNoIHZhbHVlcyBiZSBzdG9yZWQuCisgICAgICoqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgY2xhc3MgRXFfRm4sIGNsYXNzIEFsbG9jYXRvcj4KKyAgICBzdHJ1Y3QgaGFzaF9lcV9mbjxLZXksIEVxX0ZuLCBBbGxvY2F0b3IsIHRydWU+IDoKKyAgICAgIHB1YmxpYyBFcV9GbgorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjpzaXplX3R5cGUgc2l6ZV90eXBlOworCisgICAgICB0eXBlZGVmIEVxX0ZuIGVxX2ZuX2Jhc2U7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8S2V5Pjo6b3RoZXIga2V5X2FsbG9jYXRvcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBrZXlfYWxsb2NhdG9yOjpjb25zdF9yZWZlcmVuY2UgY29uc3Rfa2V5X3JlZmVyZW5jZTsKKworICAgICAgaGFzaF9lcV9mbigpOworCisgICAgICBoYXNoX2VxX2ZuKGNvbnN0IEVxX0ZuJiByX2VxX2ZuKTsKKworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2xoc19rZXksIHNpemVfdHlwZSBsaHNfaGFzaCwgCisJCSBjb25zdF9rZXlfcmVmZXJlbmNlIHJfcmhzX2tleSwgc2l6ZV90eXBlIHJoc19oYXNoKSBjb25zdDsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIHN3YXAoY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKTsKKyAgICB9OworCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgaGFzaF9lcV9mbigpCisgICAgeyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBoYXNoX2VxX2ZuKGNvbnN0IEVxX0ZuJiByX2VxX2ZuKSA6CisgICAgICBFcV9GbihyX2VxX2ZuKQorICAgIHsgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBpbmxpbmUgYm9vbAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBvcGVyYXRvcigpKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9saHNfa2V5LCBzaXplX3R5cGUgbGhzX2hhc2gsIAorCSAgICAgICBjb25zdF9rZXlfcmVmZXJlbmNlIHJfcmhzX2tleSwgc2l6ZV90eXBlIHJoc19oYXNoKSBjb25zdAorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCghZXFfZm5fYmFzZTo6b3BlcmF0b3IoKShyX2xoc19rZXksIHJfcmhzX2tleSkgCisJCSAgICAgICAgICAgIHx8IGxoc19oYXNoID09IHJoc19oYXNoKTsKKworICAgICAgcmV0dXJuIChsaHNfaGFzaCA9PSByaHNfaGFzaCAmJiAKKwkgICAgICBlcV9mbl9iYXNlOjpvcGVyYXRvcigpKHJfbGhzX2tleSwgcl9yaHNfa2V5KSk7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBpbmxpbmUgdm9pZAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBzd2FwKGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKKyAgICB7IHN0ZDo6c3dhcCgoRXFfRm4mICkoKnRoaXMpLCAoRXFfRm4mICkob3RoZXIpKTsgfQorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2NvbnN0cnVjdG9yX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2NvbnN0cnVjdG9yX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFjMTQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vY29uc3RydWN0b3JfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDIyMyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY29uc3RydWN0b3JfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGdwX2h0X21hcF8ncyBjb25zdHJ1Y3RvcnMsIGRlc3RydWN0b3IsCisgKiAgICBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjplbnRyeV9hbGxvY2F0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjpzX2VudHJ5X2FsbG9jYXRvcjsKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIEl0Pgordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY29weV9mcm9tX3JhbmdlKEl0IGZpcnN0X2l0LCBJdCBsYXN0X2l0KQoreworICB3aGlsZSAoZmlyc3RfaXQgIT0gbGFzdF9pdCkKKyAgICBpbnNlcnQoKihmaXJzdF9pdCsrKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19DTEFTU19OQU1FKCkgCis6IHJhbmdlZF9wcm9iZV9mbl9iYXNlKHJlc2l6ZV9iYXNlOjpnZXRfbmVhcmVzdF9sYXJnZXJfc2l6ZSgxKSksCisgIG1fbnVtX2UocmVzaXplX2Jhc2U6OmdldF9uZWFyZXN0X2xhcmdlcl9zaXplKDEpKSwgbV9udW1fdXNlZF9lKDApLAorICBtX2VudHJpZXMoc19lbnRyeV9hbGxvY2F0b3IuYWxsb2NhdGUobV9udW1fZSkpCit7CisgIGluaXRpYWxpemUoKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShQQl9EU19DTEFTU19DX0RFQzo6YXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfQ0xBU1NfTkFNRShjb25zdCBIYXNoX0ZuJiByX2hhc2hfZm4pICAgIAorOiByYW5nZWRfcHJvYmVfZm5fYmFzZShyZXNpemVfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoMSksIHJfaGFzaF9mbiksCisgIG1fbnVtX2UocmVzaXplX2Jhc2U6OmdldF9uZWFyZXN0X2xhcmdlcl9zaXplKDEpKSwgbV9udW1fdXNlZF9lKDApLAorICBtX2VudHJpZXMoc19lbnRyeV9hbGxvY2F0b3IuYWxsb2NhdGUobV9udW1fZSkpCit7CisgIGluaXRpYWxpemUoKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShQQl9EU19DTEFTU19DX0RFQzo6YXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfQ0xBU1NfTkFNRShjb25zdCBIYXNoX0ZuJiByX2hhc2hfZm4sIGNvbnN0IEVxX0ZuJiByX2VxX2ZuKSAKKzogaGFzaF9lcV9mbl9iYXNlKHJfZXFfZm4pLAorICByYW5nZWRfcHJvYmVfZm5fYmFzZShyZXNpemVfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoMSksIHJfaGFzaF9mbiksCisgIG1fbnVtX2UocmVzaXplX2Jhc2U6OmdldF9uZWFyZXN0X2xhcmdlcl9zaXplKDEpKSwgbV9udW1fdXNlZF9lKDApLAorICBtX2VudHJpZXMoc19lbnRyeV9hbGxvY2F0b3IuYWxsb2NhdGUobV9udW1fZSkpCit7CisgIGluaXRpYWxpemUoKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShQQl9EU19DTEFTU19DX0RFQzo6YXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfQ0xBU1NfTkFNRShjb25zdCBIYXNoX0ZuJiByX2hhc2hfZm4sIGNvbnN0IEVxX0ZuJiByX2VxX2ZuLCAKKwkJIGNvbnN0IENvbWJfUHJvYmVfRm4mIHJfY29tYl9oYXNoX2ZuKSAKKzogaGFzaF9lcV9mbl9iYXNlKHJfZXFfZm4pLAorICByYW5nZWRfcHJvYmVfZm5fYmFzZShyZXNpemVfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoMSksCisJCSAgICAgICByX2hhc2hfZm4sIHJfY29tYl9oYXNoX2ZuKSwKKyAgbV9udW1fZShyZXNpemVfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoMSkpLCBtX251bV91c2VkX2UoMCksCisgIG1fZW50cmllcyhzX2VudHJ5X2FsbG9jYXRvci5hbGxvY2F0ZShtX251bV9lKSkKK3sKKyAgaW5pdGlhbGl6ZSgpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKFBCX0RTX0NMQVNTX0NfREVDOjphc3NlcnRfdmFsaWQoKTspCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19DTEFTU19OQU1FKGNvbnN0IEhhc2hfRm4mIHJfaGFzaF9mbiwgY29uc3QgRXFfRm4mIHJfZXFfZm4sIAorCQkgY29uc3QgQ29tYl9Qcm9iZV9GbiYgY29tYl9oYXNoX2ZuLCBjb25zdCBQcm9iZV9GbiYgcHJvYmVyKSAKKzogaGFzaF9lcV9mbl9iYXNlKHJfZXFfZm4pLAorICByYW5nZWRfcHJvYmVfZm5fYmFzZShyZXNpemVfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoMSksCisJCSAgICAgICByX2hhc2hfZm4sIGNvbWJfaGFzaF9mbiwgcHJvYmVyKSwKKyAgbV9udW1fZShyZXNpemVfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoMSkpLCBtX251bV91c2VkX2UoMCksCisgIG1fZW50cmllcyhzX2VudHJ5X2FsbG9jYXRvci5hbGxvY2F0ZShtX251bV9lKSkKK3sKKyAgaW5pdGlhbGl6ZSgpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKFBCX0RTX0NMQVNTX0NfREVDOjphc3NlcnRfdmFsaWQoKTspCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19DTEFTU19OQU1FKGNvbnN0IEhhc2hfRm4mIHJfaGFzaF9mbiwgY29uc3QgRXFfRm4mIHJfZXFfZm4sIAorCQkgY29uc3QgQ29tYl9Qcm9iZV9GbiYgY29tYl9oYXNoX2ZuLCBjb25zdCBQcm9iZV9GbiYgcHJvYmVyLCAKKwkJIGNvbnN0IFJlc2l6ZV9Qb2xpY3kmIHJfcmVzaXplX3BvbGljeSkgCis6IGhhc2hfZXFfZm5fYmFzZShyX2VxX2ZuKSwgcmVzaXplX2Jhc2Uocl9yZXNpemVfcG9saWN5KSwKKyAgcmFuZ2VkX3Byb2JlX2ZuX2Jhc2UocmVzaXplX2Jhc2U6OmdldF9uZWFyZXN0X2xhcmdlcl9zaXplKDEpLAorCQkgICAgICAgcl9oYXNoX2ZuLCBjb21iX2hhc2hfZm4sIHByb2JlciksCisgIG1fbnVtX2UocmVzaXplX2Jhc2U6OmdldF9uZWFyZXN0X2xhcmdlcl9zaXplKDEpKSwgbV9udW1fdXNlZF9lKDApLAorICBtX2VudHJpZXMoc19lbnRyeV9hbGxvY2F0b3IuYWxsb2NhdGUobV9udW1fZSkpCit7CisgIGluaXRpYWxpemUoKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShQQl9EU19DTEFTU19DX0RFQzo6YXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfQ0xBU1NfTkFNRShjb25zdCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpIDoKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICBkZWJ1Z19iYXNlKG90aGVyKSwKKyNlbmRpZiAKKyAgaGFzaF9lcV9mbl9iYXNlKG90aGVyKSwKKyAgcmVzaXplX2Jhc2Uob3RoZXIpLAorICByYW5nZWRfcHJvYmVfZm5fYmFzZShvdGhlciksCisgIG1fbnVtX2Uob3RoZXIubV9udW1fZSksCisgIG1fbnVtX3VzZWRfZShvdGhlci5tX251bV91c2VkX2UpLAorICBtX2VudHJpZXMoc19lbnRyeV9hbGxvY2F0b3IuYWxsb2NhdGUobV9udW1fZSkpCit7CisgIGZvciAoc2l6ZV90eXBlIGkgPSAwOyBpIDwgbV9udW1fZTsgKytpKQorICAgIG1fZW50cmllc1tpXS5tX3N0YXQgPSAoZW50cnlfc3RhdHVzKWVtcHR5X2VudHJ5X3N0YXR1czsKKworICBfX3RyeQorICAgIHsKKyAgICAgIGZvciAoc2l6ZV90eXBlIGkgPSAwOyBpIDwgbV9udW1fZTsgKytpKQorICAgICAgICB7CisJICBtX2VudHJpZXNbaV0ubV9zdGF0ID0gb3RoZXIubV9lbnRyaWVzW2ldLm1fc3RhdDsKKwkgIGlmIChtX2VudHJpZXNbaV0ubV9zdGF0ID09IHZhbGlkX2VudHJ5X3N0YXR1cykKKwkgICAgbmV3IChtX2VudHJpZXMgKyBpKSBlbnRyeShvdGhlci5tX2VudHJpZXNbaV0pOworICAgICAgICB9CisgICAgfQorICBfX2NhdGNoKC4uLikKKyAgICB7CisgICAgICBkZWFsbG9jYXRlX2FsbCgpOworICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgICAgfQorICBfR0xJQkNYWF9ERUJVR19PTkxZKFBCX0RTX0NMQVNTX0NfREVDOjphc3NlcnRfdmFsaWQoKTspCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6Cit+UEJfRFNfQ0xBU1NfTkFNRSgpCit7IGRlYWxsb2NhdGVfYWxsKCk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKSk7CisgIHN0ZDo6c3dhcChtX251bV9lLCBvdGhlci5tX251bV9lKTsKKyAgc3RkOjpzd2FwKG1fbnVtX3VzZWRfZSwgb3RoZXIubV9udW1fdXNlZF9lKTsKKyAgc3RkOjpzd2FwKG1fZW50cmllcywgb3RoZXIubV9lbnRyaWVzKTsKKyAgcmFuZ2VkX3Byb2JlX2ZuX2Jhc2U6OnN3YXAob3RoZXIpOworICBoYXNoX2VxX2ZuX2Jhc2U6OnN3YXAob3RoZXIpOworICByZXNpemVfYmFzZTo6c3dhcChvdGhlcik7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6c3dhcChvdGhlcikpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitkZWFsbG9jYXRlX2FsbCgpCit7CisgIGNsZWFyKCk7CisgIGVyYXNlX2FsbF92YWxpZF9lbnRyaWVzKG1fZW50cmllcywgbV9udW1fZSk7CisgIHNfZW50cnlfYWxsb2NhdG9yLmRlYWxsb2NhdGUobV9lbnRyaWVzLCBtX251bV9lKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlX2FsbF92YWxpZF9lbnRyaWVzKGVudHJ5X2FycmF5IGFfZW50cmllc19yZXNpemVkLCBzaXplX3R5cGUgbGVuKQoreworICBmb3IgKHNpemVfdHlwZSBwb3MgPSAwOyBwb3MgPCBsZW47ICsrcG9zKQorICAgIHsKKyAgICAgIGVudHJ5X3BvaW50ZXIgcF9lID0gJmFfZW50cmllc19yZXNpemVkW3Bvc107CisgICAgICBpZiAocF9lLT5tX3N0YXQgPT0gdmFsaWRfZW50cnlfc3RhdHVzKQorCXBfZS0+bV92YWx1ZS5+dmFsdWVfdHlwZSgpOworICAgIH0KK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2luaXRpYWxpemUoKQoreworICBSZXNpemVfUG9saWN5Ojpub3RpZnlfcmVzaXplZChtX251bV9lKTsKKyAgUmVzaXplX1BvbGljeTo6bm90aWZ5X2NsZWFyZWQoKTsKKyAgcmFuZ2VkX3Byb2JlX2ZuX2Jhc2U6Om5vdGlmeV9yZXNpemVkKG1fbnVtX2UpOworICBmb3IgKHNpemVfdHlwZSBpID0gMDsgaSA8IG1fbnVtX2U7ICsraSkKKyAgICBtX2VudHJpZXNbaV0ubV9zdGF0ID0gZW1wdHlfZW50cnlfc3RhdHVzOworfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2NvbnN0cnVjdG9yX2Rlc3RydWN0b3Jfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vY29uc3RydWN0b3JfZGVzdHJ1Y3Rvcl9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjODA2OTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2NvbnN0cnVjdG9yX2Rlc3RydWN0b3Jfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDUzIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBjb25zdHJ1Y3Rvcl9kZXN0cnVjdG9yX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBncF9odF9tYXBfJ3MgY29uc3RydWN0b3JzLCBkZXN0cnVjdG9yLAorICogICAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY29uc3RydWN0b3JfaW5zZXJ0X25ld19pbXAoY29uc3RfbWFwcGVkX3JlZmVyZW5jZSByX3ZhbCwgc2l6ZV90eXBlIHBvcywgCisJCQkgICBmYWxzZV90eXBlKQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9lbnRyaWVzW3Bvc10ubV9zdGF0ICE9IHZhbGlkX2VudHJ5X3N0YXR1cylrOworICBlbnRyeSogY29uc3QgcF9lID0gbV9lbnRyaWVzICsgcG9zOworICBuZXcgKCZwX2UtPm1fdmFsdWUpIG1hcHBlZF92YWx1ZV90eXBlKHJfdmFsKTsKKyAgcF9lLT5tX3N0YXQgPSB2YWxpZF9lbnRyeV9zdGF0dXM7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6aW5zZXJ0X25ldyhwX2UtPm1fdmFsdWUuZmlyc3QpOykKK30KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vY29uc3RydWN0b3JfZGVzdHJ1Y3Rvcl9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9jb25zdHJ1Y3Rvcl9kZXN0cnVjdG9yX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYzMDQ4NwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vY29uc3RydWN0b3JfZGVzdHJ1Y3Rvcl9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNTQgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGNvbnN0cnVjdG9yX2Rlc3RydWN0b3Jfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGdwX2h0X21hcF8ncyBjb25zdHJ1Y3RvcnMsIGRlc3RydWN0b3IsCisgKiBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citjb25zdHJ1Y3Rvcl9pbnNlcnRfbmV3X2ltcChjb25zdF9tYXBwZWRfcmVmZXJlbmNlIHJfdmFsLCBzaXplX3R5cGUgcG9zLCAKKwkJCSAgIHRydWVfdHlwZSkKK3sKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fZW50cmllc1twb3NdLm1fc3RhdCAhPSB2YWxpZF9lbnRyeV9zdGF0dXMpOworICBlbnRyeSogY29uc3QgcF9lID0gbV9lbnRyaWVzICsgcG9zOworICBuZXcgKCZwX2UtPm1fdmFsdWUpIG1hcHBlZF92YWx1ZV90eXBlKHJfdmFsKTsKKyAgcF9lLT5tX2hhc2ggPSByYW5nZWRfcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShQQl9EU19WMkYocl92YWwpKS5zZWNvbmQ7CisgIHBfZS0+bV9zdGF0ID0gdmFsaWRfZW50cnlfc3RhdHVzOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6Omluc2VydF9uZXcocF9lLT5tX3ZhbHVlLmZpcnN0KTspCit9CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2RlYnVnX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9kZWJ1Z19mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzAxOGM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9kZWJ1Z19mbl9pbXBzLmhwcApAQCAtMCwwICsxLDU1IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBkZWJ1Z19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGdwX2h0X21hcF8ncyBkZWJ1Zy1tb2RlIGZ1bmN0aW9ucy4KKyAqLworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF92YWxpZCgpIGNvbnN0Cit7CisgIGRlYnVnX2Jhc2U6OmNoZWNrX3NpemUobV9udW1fdXNlZF9lKTsKKyAgYXNzZXJ0X2VudHJ5X2FycmF5X3ZhbGlkKG1fZW50cmllcywgdHJhaXRzX2Jhc2U6Om1fc3RvcmVfZXh0cmFfaW5kaWNhdG9yKTsKK30KKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2RlYnVnX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vZGVidWdfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcD4KKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9kZWJ1Z19ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9kZWJ1Z19ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YjRkN2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2RlYnVnX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw3MSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZGVidWdfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGdwX2h0X21hcF8ncyBkZWJ1Zy1tb2RlIGZ1bmN0aW9ucy4KKyAqLworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9lbnRyeV9hcnJheV92YWxpZChjb25zdCBlbnRyeV9hcnJheSBhX2VudHJpZXMsIGZhbHNlX3R5cGUpIGNvbnN0Cit7CisgIHNpemVfdHlwZSBpdGVyYXRlZF9udW1fdXNlZF9lID0gMDsKKyAgZm9yIChzaXplX3R5cGUgcG9zID0gMDsgcG9zIDwgbV9udW1fZTsgKytwb3MpCisgICAgeworICAgICAgY29uc3RfZW50cnlfcG9pbnRlciBwX2UgPSAmYV9lbnRyaWVzW3Bvc107CisgICAgICBzd2l0Y2gocF9lLT5tX3N0YXQpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBlbXB0eV9lbnRyeV9zdGF0dXM6CisgICAgICAgIGNhc2UgZXJhc2VkX2VudHJ5X3N0YXR1czoKKwkgIGJyZWFrOworICAgICAgICBjYXNlIHZhbGlkX2VudHJ5X3N0YXR1czoKKwkgIHsKKwkgICAgY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSA9IFBCX0RTX1YyRihwX2UtPm1fdmFsdWUpOworCSAgICBkZWJ1Z19iYXNlOjpjaGVja19rZXlfZXhpc3RzKHJfa2V5KTsKKwkgICAgKytpdGVyYXRlZF9udW1fdXNlZF9lOworCSAgICBicmVhazsKKwkgIH0KKyAgICAgICAgZGVmYXVsdDoKKwkgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCgwKTsKKyAgICAgICAgfTsKKyAgICB9CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChpdGVyYXRlZF9udW1fdXNlZF9lID09IG1fbnVtX3VzZWRfZSk7Cit9CisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vZGVidWdfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vZGVidWdfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjFmMTQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9kZWJ1Z19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNzcgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGRlYnVnX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBncF9odF9tYXBfJ3MgZGVidWctbW9kZSBmdW5jdGlvbnMuCisgKi8KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfZW50cnlfYXJyYXlfdmFsaWQoY29uc3QgZW50cnlfYXJyYXkgYV9lbnRyaWVzLCB0cnVlX3R5cGUpIGNvbnN0Cit7CisgIHNpemVfdHlwZSBpdGVyYXRlZF9udW1fdXNlZF9lID0gMDsKKworICBmb3IgKHNpemVfdHlwZSBwb3MgPSAwOyBwb3MgPCBtX251bV9lOyArK3BvcykKKyAgICB7CisgICAgICBjb25zdF9lbnRyeV9wb2ludGVyIHBfZSA9JiBhX2VudHJpZXNbcG9zXTsKKyAgICAgIHN3aXRjaChwX2UtPm1fc3RhdCkKKyAgICAgICAgeworICAgICAgICBjYXNlIGVtcHR5X2VudHJ5X3N0YXR1czoKKyAgICAgICAgY2FzZSBlcmFzZWRfZW50cnlfc3RhdHVzOgorCSAgYnJlYWs7CisgICAgICAgIGNhc2UgdmFsaWRfZW50cnlfc3RhdHVzOgorCSAgeworCSAgICBjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5ID0gUEJfRFNfVjJGKHBfZS0+bV92YWx1ZSk7CisJICAgIGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9leGlzdHMocl9rZXkpOworCisJICAgIGNvbnN0IGNvbXBfaGFzaCBwb3NfaGFzaF9wYWlyID0gcmFuZ2VkX3Byb2JlX2ZuX2Jhc2U6Om9wZXJhdG9yKCkocl9rZXkpOworCisJICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX2UtPm1faGFzaCA9PSBwb3NfaGFzaF9wYWlyLnNlY29uZCk7CisJICAgICsraXRlcmF0ZWRfbnVtX3VzZWRfZTsKKwkgICAgYnJlYWs7CisJICB9CisgICAgICAgIGRlZmF1bHQ6CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoMCk7CisgICAgICAgIH07CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChpdGVyYXRlZF9udW1fdXNlZF9lID09IG1fbnVtX3VzZWRfZSk7Cit9CisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vZXJhc2VfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2VyYXNlX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ODc4ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2VyYXNlX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTAwIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBlcmFzZV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGdwX2h0X21hcF8ncyBlcmFzZSByZWxhdGVkIGZ1bmN0aW9ucy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlX2VudHJ5KGVudHJ5X3BvaW50ZXIgcF9lKQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9lLT5tX3N0YXQgPSB2YWxpZF9lbnRyeV9zdGF0dXMpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmVyYXNlX2V4aXN0aW5nKFBCX0RTX1YyRihwX2UtPm1fdmFsdWUpKTspCisgIHBfZS0+bV92YWx1ZS5+dmFsdWVfdHlwZSgpOworICBwX2UtPm1fc3RhdCA9IGVyYXNlZF9lbnRyeV9zdGF0dXM7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX251bV91c2VkX2UgPiAwKTsKKyAgcmVzaXplX2Jhc2U6Om5vdGlmeV9lcmFzZWQoLS1tX251bV91c2VkX2UpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY2xlYXIoKQoreworICBmb3IgKHNpemVfdHlwZSBwb3MgPSAwOyBwb3MgPCBtX251bV9lOyArK3BvcykKKyAgICB7CisgICAgICBlbnRyeV9wb2ludGVyIHBfZSA9ICZtX2VudHJpZXNbcG9zXTsKKyAgICAgIGlmIChwX2UtPm1fc3RhdCA9PSB2YWxpZF9lbnRyeV9zdGF0dXMpCisJZXJhc2VfZW50cnkocF9lKTsKKyAgICB9CisgIGRvX3Jlc2l6ZV9pZl9uZWVkZWRfbm9fdGhyb3coKTsKKyAgcmVzaXplX2Jhc2U6Om5vdGlmeV9jbGVhcmVkKCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkPgoraW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlX2lmKFByZWQgcHJlZCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShQQl9EU19DTEFTU19DX0RFQzo6YXNzZXJ0X3ZhbGlkKCk7KQorICBzaXplX3R5cGUgbnVtX2Vyc2QgPSAwOworICBmb3IgKHNpemVfdHlwZSBwb3MgPSAwOyBwb3MgPCBtX251bV9lOyArK3BvcykKKyAgICB7CisgICAgICBlbnRyeV9wb2ludGVyIHBfZSA9ICZtX2VudHJpZXNbcG9zXTsKKyAgICAgIGlmIChwX2UtPm1fc3RhdCA9PSB2YWxpZF9lbnRyeV9zdGF0dXMpCisJaWYgKHByZWQocF9lLT5tX3ZhbHVlKSkKKwkgIHsKKwkgICAgKytudW1fZXJzZDsKKwkgICAgZXJhc2VfZW50cnkocF9lKTsKKwkgIH0KKyAgICB9CisKKyAgZG9fcmVzaXplX2lmX25lZWRlZF9ub190aHJvdygpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKFBCX0RTX0NMQVNTX0NfREVDOjphc3NlcnRfdmFsaWQoKTspCisgIHJldHVybiBudW1fZXJzZDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZShjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5KQoreyByZXR1cm4gZXJhc2VfaW1wKHJfa2V5LCB0cmFpdHNfYmFzZTo6bV9zdG9yZV9leHRyYV9pbmRpY2F0b3IpOyB9CisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9lcmFzZV9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2VyYXNlX3N0b3JlX2hhc2hfZm5faW1wcy5ocHA+CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2VyYXNlX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2VyYXNlX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBkNTc4ZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vZXJhc2Vfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDg1IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBlcmFzZV9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgZ3BfaHRfbWFwXydzIGVyYXNlIHJlbGF0ZWQgZnVuY3Rpb25zLAorICogd2hlbiB0aGUgaGFzaCB2YWx1ZSBpcyBub3Qgc3RvcmVkLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgYm9vbAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2VfaW1wKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXksICBmYWxzZV90eXBlKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKFBCX0RTX0NMQVNTX0NfREVDOjphc3NlcnRfdmFsaWQoKTspCisgIHNpemVfdHlwZSBoYXNoID0gcmFuZ2VkX3Byb2JlX2ZuX2Jhc2U6Om9wZXJhdG9yKCkocl9rZXkpOworICBzaXplX3R5cGUgaTsKKyAgcmVzaXplX2Jhc2U6Om5vdGlmeV9lcmFzZV9zZWFyY2hfc3RhcnQoKTsKKworICBmb3IgKGkgPSAwOyBpIDwgbV9udW1fZTsgKytpKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBwb3MgPSByYW5nZWRfcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShyX2tleSwgIGhhc2gsIGkpOworICAgICAgZW50cnkqIGNvbnN0IHBfZSA9IG1fZW50cmllcyArIHBvczsKKyAgICAgIHN3aXRjaChwX2UtPm1fc3RhdCkKKyAgICAgICAgeworICAgICAgICBjYXNlIGVtcHR5X2VudHJ5X3N0YXR1czoKKwkgIHsKKwkgICAgcmVzaXplX2Jhc2U6Om5vdGlmeV9lcmFzZV9zZWFyY2hfZW5kKCk7CisJICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6Y2hlY2tfa2V5X2RvZXNfbm90X2V4aXN0KAorCQkJCQkJCQkgICAgcl9rZXkpKTsKKwkgICAgcmV0dXJuIGZhbHNlOworCSAgfQorCSAgYnJlYWs7CisgICAgICAgIGNhc2UgdmFsaWRfZW50cnlfc3RhdHVzOgorCSAgaWYgKGhhc2hfZXFfZm5fYmFzZTo6b3BlcmF0b3IoKShQQl9EU19WMkYocF9lLT5tX3ZhbHVlKSwgcl9rZXkpKQorICAgICAgICAgICAgeworCSAgICAgIHJlc2l6ZV9iYXNlOjpub3RpZnlfZXJhc2Vfc2VhcmNoX2VuZCgpOworCSAgICAgIGVyYXNlX2VudHJ5KHBfZSk7CisJICAgICAgZG9fcmVzaXplX2lmX25lZWRlZF9ub190aHJvdygpOworCSAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorCSAgYnJlYWs7CisgICAgICAgIGNhc2UgZXJhc2VkX2VudHJ5X3N0YXR1czoKKwkgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKDApOworICAgICAgICB9OworICAgICAgcmVzaXplX2Jhc2U6Om5vdGlmeV9lcmFzZV9zZWFyY2hfY29sbGlzaW9uKCk7CisgICAgfQorICByZXNpemVfYmFzZTo6bm90aWZ5X2VyYXNlX3NlYXJjaF9lbmQoKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2VyYXNlX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2VyYXNlX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE1NWE1MgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vZXJhc2Vfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDg2IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBlcmFzZV9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgZ3BfaHRfbWFwXydzIGVyYXNlIHJlbGF0ZWQgZnVuY3Rpb25zLAorICogd2hlbiB0aGUgaGFzaCB2YWx1ZSBpcyBzdG9yZWQuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZV9pbXAoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSwgdHJ1ZV90eXBlKQoreworICBjb25zdCBjb21wX2hhc2ggcG9zX2hhc2hfcGFpciA9IHJhbmdlZF9wcm9iZV9mbl9iYXNlOjpvcGVyYXRvcigpKHJfa2V5KTsKKyAgc2l6ZV90eXBlIGk7CisgIHJlc2l6ZV9iYXNlOjpub3RpZnlfZXJhc2Vfc2VhcmNoX3N0YXJ0KCk7CisgIGZvciAoaSA9IDA7IGkgPCBtX251bV9lOyArK2kpCisgICAgeworICAgICAgY29uc3Qgc2l6ZV90eXBlIHBvcyA9IHJhbmdlZF9wcm9iZV9mbl9iYXNlOjpvcGVyYXRvcigpKHJfa2V5LCBwb3NfaGFzaF9wYWlyLnNlY29uZCwgaSk7CisKKyAgICAgIGVudHJ5KiBjb25zdCBwX2UgPSBtX2VudHJpZXMgKyBwb3M7CisgICAgICBzd2l0Y2gocF9lLT5tX3N0YXQpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBlbXB0eV9lbnRyeV9zdGF0dXM6CisJICB7CisJICAgIHJlc2l6ZV9iYXNlOjpub3RpZnlfZXJhc2Vfc2VhcmNoX2VuZCgpOworCSAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9kb2VzX25vdF9leGlzdCgKKwkJCQkJCQkJICAgIHJfa2V5KSk7CisJICAgIHJldHVybiBmYWxzZTsKKwkgIH0KKwkgIGJyZWFrOworICAgICAgICBjYXNlIHZhbGlkX2VudHJ5X3N0YXR1czoKKwkgIGlmIChoYXNoX2VxX2ZuX2Jhc2U6Om9wZXJhdG9yKCkoUEJfRFNfVjJGKHBfZS0+bV92YWx1ZSksIHBfZS0+bV9oYXNoLAorCQkJCQkgIHJfa2V5LCBwb3NfaGFzaF9wYWlyLnNlY29uZCkpCisgICAgICAgICAgICB7CisJICAgICAgcmVzaXplX2Jhc2U6Om5vdGlmeV9lcmFzZV9zZWFyY2hfZW5kKCk7CisJICAgICAgZXJhc2VfZW50cnkocF9lKTsKKwkgICAgICBkb19yZXNpemVfaWZfbmVlZGVkX25vX3Rocm93KCk7CisJICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisJICBicmVhazsKKyAgICAgICAgY2FzZSBlcmFzZWRfZW50cnlfc3RhdHVzOgorCSAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoMCk7CisgICAgICAgIH07CisKKyAgICAgIHJlc2l6ZV9iYXNlOjpub3RpZnlfZXJhc2Vfc2VhcmNoX2NvbGxpc2lvbigpOworICAgIH0KKyAgcmVzaXplX2Jhc2U6Om5vdGlmeV9lcmFzZV9zZWFyY2hfZW5kKCk7CisgIHJldHVybiBmYWxzZTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9maW5kX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9maW5kX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZDUzNzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2ZpbmRfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw3MCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZmluZF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGdwX2h0X21hcF8ncyBmaW5kIHJlbGF0ZWQgZnVuY3Rpb25zLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnBvaW50X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitmaW5kKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgcmV0dXJuIGZpbmRfa2V5X3BvaW50ZXIocl9rZXksIHRyYWl0c19iYXNlOjptX3N0b3JlX2V4dHJhX2luZGljYXRvcik7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X3BvaW50X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitmaW5kKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpIGNvbnN0Cit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICByZXR1cm4gY29uc3RfY2FzdDxQQl9EU19DTEFTU19DX0RFQyY+KCp0aGlzKS5maW5kX2tleV9wb2ludGVyKHJfa2V5LCB0cmFpdHNfYmFzZTo6bV9zdG9yZV9leHRyYV9pbmRpY2F0b3IpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZmluZF9lbmQoKQoreyByZXR1cm4gTlVMTDsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9wb2ludF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZmluZF9lbmQoKSBjb25zdAoreyByZXR1cm4gTlVMTDsgfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2ZpbmRfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vZmluZF9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ODYwNGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2ZpbmRfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDQ2IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBmaW5kX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBncF9odF9tYXBfJ3MgZmluZCByZWxhdGVkIGZ1bmN0aW9ucywKKyAqIHdoZW4gdGhlIGhhc2ggdmFsdWUgaXMgbm90IHN0b3JlZC4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6CitmaW5kX2tleV9wb2ludGVyKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXksIGZhbHNlX3R5cGUpCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vZmluZF9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9maW5kX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ0YjgzMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vZmluZF9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNDAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGZpbmRfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGdwX2h0X21hcF8ncyBpbnNlcnQgcmVsYXRlZCBmdW5jdGlvbnMsCisgKiB3aGVuIHRoZSBoYXNoIHZhbHVlIGlzIHN0b3JlZC4KKyAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9ncF9odF9tYXBfLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vZ3BfaHRfbWFwXy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc0MWFmZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vZ3BfaHRfbWFwXy5ocHAKQEAgLTAsMCArMSw2NzcgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGdwX2h0X21hcF8uaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgZ3BfaHRfbWFwXy4KKyAqLworCisjaW5jbHVkZSA8ZXh0L3BiX2RzL3RhZ19hbmRfdHJhaXQuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9yYW5nZWRfcHJvYmVfZm4uaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHlwZXNfdHJhaXRzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZXhjZXB0aW9uLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2VxX2ZuL2hhc2hfZXFfZm4uaHBwPgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaWZkZWYgUEJfRFNfSFRfTUFQX1RSQUNFXworI2luY2x1ZGUgPGlvc3RyZWFtPgorI2VuZGlmIAorI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9kZWJ1Z19tYXBfYmFzZS5ocHA+CisjZW5kaWYKKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0eXBlbmFtZSBIYXNoX0ZuLCB0eXBlbmFtZSBFcV9GbiwgXAorCSAgICAgdHlwZW5hbWUgQWxsb2NhdG9yLCBib29sIFN0b3JlX0hhc2gsIHR5cGVuYW1lIENvbWJfUHJvYmVfRm4sIFwKKwkgICAgIHR5cGVuYW1lIFByb2JlX0ZuLAl0eXBlbmFtZSBSZXNpemVfUG9saWN5PgorCisjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorI2RlZmluZSBQQl9EU19DTEFTU19OQU1FIGdwX2h0X21hcF9kYXRhXworI2VuZGlmCisKKyNpZmRlZiBQQl9EU19EQVRBX0ZBTFNFX0lORElDQVRPUgorI2RlZmluZSBQQl9EU19DTEFTU19OQU1FIGdwX2h0X21hcF9ub19kYXRhXworI2VuZGlmIAorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFwKKyAgICBQQl9EU19DTEFTU19OQU1FPEtleSwgTWFwcGVkLCBIYXNoX0ZuLCBFcV9GbiwgQWxsb2NhdG9yLAlcCisJCSAgICAgU3RvcmVfSGFzaCwgQ29tYl9Qcm9iZV9GbiwgUHJvYmVfRm4sIFJlc2l6ZV9Qb2xpY3k+CisKKyNkZWZpbmUgUEJfRFNfSEFTSF9FUV9GTl9DX0RFQyBcCisgICAgaGFzaF9lcV9mbjxLZXksIEVxX0ZuLCBBbGxvY2F0b3IsIFN0b3JlX0hhc2g+CisKKyNkZWZpbmUgUEJfRFNfUkFOR0VEX1BST0JFX0ZOX0NfREVDIFwKKyAgICByYW5nZWRfcHJvYmVfZm48S2V5LCBIYXNoX0ZuLCBBbGxvY2F0b3IsIENvbWJfUHJvYmVfRm4sIFByb2JlX0ZuLCBTdG9yZV9IYXNoPgorCisjZGVmaW5lIFBCX0RTX1RZUEVTX1RSQUlUU19DX0RFQyBcCisgICAgdHlwZXNfdHJhaXRzPEtleSwgTWFwcGVkLCBBbGxvY2F0b3IsIFN0b3JlX0hhc2g+CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworI2RlZmluZSBQQl9EU19ERUJVR19NQVBfQkFTRV9DX0RFQyBcCisgICAgZGVidWdfbWFwX2Jhc2U8S2V5LCBFcV9GbiwgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8S2V5Pjo6b3RoZXI6OmNvbnN0X3JlZmVyZW5jZT4KKyNlbmRpZiAKKworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyNkZWZpbmUgUEJfRFNfVjJGKFgpIChYKS5maXJzdAorI2RlZmluZSBQQl9EU19WMlMoWCkgKFgpLnNlY29uZAorI2VuZGlmIAorCisjaWZkZWYgUEJfRFNfREFUQV9GQUxTRV9JTkRJQ0FUT1IKKyNkZWZpbmUgUEJfRFNfVjJGKFgpIChYKQorI2RlZmluZSBQQl9EU19WMlMoWCkgTWFwcGVkKCkKKyNlbmRpZiAKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwKKwkgICAgIHR5cGVuYW1lIE1hcHBlZCwKKwkgICAgIHR5cGVuYW1lIEhhc2hfRm4sCisJICAgICB0eXBlbmFtZSBFcV9GbiwKKwkgICAgIHR5cGVuYW1lIEFsbG9jYXRvciwKKwkgICAgIGJvb2wgU3RvcmVfSGFzaCwKKwkgICAgIHR5cGVuYW1lIENvbWJfUHJvYmVfRm4sCisJICAgICB0eXBlbmFtZSBQcm9iZV9GbiwKKwkgICAgIHR5cGVuYW1lIFJlc2l6ZV9Qb2xpY3k+CisgICAgY2xhc3MgUEJfRFNfQ0xBU1NfTkFNRSA6CisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHByb3RlY3RlZCBQQl9EU19ERUJVR19NQVBfQkFTRV9DX0RFQywKKyNlbmRpZiAKKyAgICAgIHB1YmxpYyBQQl9EU19IQVNIX0VRX0ZOX0NfREVDLAorICAgICAgcHVibGljIFJlc2l6ZV9Qb2xpY3ksCisgICAgICBwdWJsaWMgUEJfRFNfUkFOR0VEX1BST0JFX0ZOX0NfREVDLAorICAgICAgcHVibGljIFBCX0RTX1RZUEVTX1RSQUlUU19DX0RFQworICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBQQl9EU19UWVBFU19UUkFJVFNfQ19ERUMgdHJhaXRzX2Jhc2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGVfOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6cG9pbnRlciBwb2ludGVyXzsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcl87CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjpyZWZlcmVuY2UgcmVmZXJlbmNlXzsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2VfOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6Y29tcF9oYXNoIGNvbXBfaGFzaDsKKworICAgICAgZW51bSBlbnRyeV9zdGF0dXMKKwl7CisJICBlbXB0eV9lbnRyeV9zdGF0dXMsCisJICB2YWxpZF9lbnRyeV9zdGF0dXMsCisJICBlcmFzZWRfZW50cnlfc3RhdHVzCisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyAgICAgIHN0cnVjdCBlbnRyeSA6IHB1YmxpYyB0cmFpdHNfYmFzZTo6c3RvcmVkX3ZhbHVlX3R5cGUKKyAgICAgIHsKKwllbnRyeV9zdGF0dXMgbV9zdGF0OworICAgICAgfTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxlbnRyeT46Om90aGVyIGVudHJ5X2FsbG9jYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgZW50cnlfYWxsb2NhdG9yOjpwb2ludGVyIGVudHJ5X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGVudHJ5X2FsbG9jYXRvcjo6Y29uc3RfcG9pbnRlciBjb25zdF9lbnRyeV9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBlbnRyeV9hbGxvY2F0b3I6OnJlZmVyZW5jZSBlbnRyeV9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGVudHJ5X2FsbG9jYXRvcjo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X2VudHJ5X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgZW50cnlfYWxsb2NhdG9yOjpwb2ludGVyIGVudHJ5X2FycmF5OworCisgICAgICB0eXBlZGVmIFBCX0RTX1JBTkdFRF9QUk9CRV9GTl9DX0RFQyByYW5nZWRfcHJvYmVfZm5fYmFzZTsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICB0eXBlZGVmIFBCX0RTX0RFQlVHX01BUF9CQVNFX0NfREVDIGRlYnVnX2Jhc2U7CisjZW5kaWYgCisKKyAgICAgIHR5cGVkZWYgUEJfRFNfSEFTSF9FUV9GTl9DX0RFQyBoYXNoX2VxX2ZuX2Jhc2U7CisgICAgICB0eXBlZGVmIFJlc2l6ZV9Qb2xpY3kgcmVzaXplX2Jhc2U7CisKKyNkZWZpbmUgUEJfRFNfR0VOX1BPUyB0eXBlbmFtZSBBbGxvY2F0b3I6OnNpemVfdHlwZQorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC91bm9yZGVyZWRfaXRlcmF0b3IvY29uc3RfcG9pbnRfaXRlcmF0b3IuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdW5vcmRlcmVkX2l0ZXJhdG9yL3BvaW50X2l0ZXJhdG9yLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3Vub3JkZXJlZF9pdGVyYXRvci9jb25zdF9pdGVyYXRvci5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC91bm9yZGVyZWRfaXRlcmF0b3IvaXRlcmF0b3IuaHBwPgorCisjdW5kZWYgUEJfRFNfR0VOX1BPUworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBBbGxvY2F0b3IgYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6c2l6ZV90eXBlIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBIYXNoX0ZuIGhhc2hfZm47CisgICAgICB0eXBlZGVmIEVxX0ZuIGVxX2ZuOworICAgICAgdHlwZWRlZiBQcm9iZV9GbiBwcm9iZV9mbjsKKyAgICAgIHR5cGVkZWYgQ29tYl9Qcm9iZV9GbiBjb21iX3Byb2JlX2ZuOworICAgICAgdHlwZWRlZiBSZXNpemVfUG9saWN5IHJlc2l6ZV9wb2xpY3k7CisKKyAgICAgIGVudW0KKwl7CisJICBzdG9yZV9oYXNoID0gU3RvcmVfSGFzaAorCX07CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmtleV90eXBlIGtleV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6a2V5X3BvaW50ZXIga2V5X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjpjb25zdF9rZXlfcG9pbnRlciBjb25zdF9rZXlfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmtleV9yZWZlcmVuY2Uga2V5X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmNvbnN0X2tleV9yZWZlcmVuY2UgY29uc3Rfa2V5X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6Om1hcHBlZF90eXBlIG1hcHBlZF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6bWFwcGVkX3BvaW50ZXIgbWFwcGVkX3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjpjb25zdF9tYXBwZWRfcG9pbnRlciBjb25zdF9tYXBwZWRfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6Om1hcHBlZF9yZWZlcmVuY2UgbWFwcGVkX3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmNvbnN0X21hcHBlZF9yZWZlcmVuY2UgY29uc3RfbWFwcGVkX3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OnBvaW50ZXIgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OnJlZmVyZW5jZSByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOworCisjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorICAgICAgdHlwZWRlZiBwb2ludF9pdGVyYXRvcl8gcG9pbnRfaXRlcmF0b3I7CisjZW5kaWYgCisKKyNpZmRlZiBQQl9EU19EQVRBX0ZBTFNFX0lORElDQVRPUgorICAgICAgdHlwZWRlZiBjb25zdF9wb2ludF9pdGVyYXRvcl8gcG9pbnRfaXRlcmF0b3I7CisjZW5kaWYgCisKKyAgICAgIHR5cGVkZWYgY29uc3RfcG9pbnRfaXRlcmF0b3JfIGNvbnN0X3BvaW50X2l0ZXJhdG9yOworCisjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorICAgICAgdHlwZWRlZiBpdGVyYXRvcl8gaXRlcmF0b3I7CisjZW5kaWYgCisKKyNpZmRlZiBQQl9EU19EQVRBX0ZBTFNFX0lORElDQVRPUgorICAgICAgdHlwZWRlZiBjb25zdF9pdGVyYXRvcl8gaXRlcmF0b3I7CisjZW5kaWYgCisKKyAgICAgIHR5cGVkZWYgY29uc3RfaXRlcmF0b3JfIGNvbnN0X2l0ZXJhdG9yOworCisgICAgICBQQl9EU19DTEFTU19OQU1FKCk7CisKKyAgICAgIFBCX0RTX0NMQVNTX05BTUUoY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgUEJfRFNfQ0xBU1NfTkFNRShjb25zdCBIYXNoX0ZuJik7CisKKyAgICAgIFBCX0RTX0NMQVNTX05BTUUoY29uc3QgSGFzaF9GbiYsIGNvbnN0IEVxX0ZuJik7CisKKyAgICAgIFBCX0RTX0NMQVNTX05BTUUoY29uc3QgSGFzaF9GbiYsIGNvbnN0IEVxX0ZuJiwgY29uc3QgQ29tYl9Qcm9iZV9GbiYpOworCisgICAgICBQQl9EU19DTEFTU19OQU1FKGNvbnN0IEhhc2hfRm4mLCBjb25zdCBFcV9GbiYsIGNvbnN0IENvbWJfUHJvYmVfRm4mLCAKKwkJICAgICAgIGNvbnN0IFByb2JlX0ZuJik7CisKKyAgICAgIFBCX0RTX0NMQVNTX05BTUUoY29uc3QgSGFzaF9GbiYsIGNvbnN0IEVxX0ZuJiwgY29uc3QgQ29tYl9Qcm9iZV9GbiYsIAorCQkgICAgICAgY29uc3QgUHJvYmVfRm4mLCBjb25zdCBSZXNpemVfUG9saWN5Jik7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0PgorICAgICAgdm9pZAorICAgICAgY29weV9mcm9tX3JhbmdlKEl0IGZpcnN0X2l0LCBJdCBsYXN0X2l0KTsKKworICAgICAgdmlydHVhbAorICAgICAgflBCX0RTX0NMQVNTX05BTUUoKTsKKworICAgICAgdm9pZAorICAgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpOworCisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBlbXB0eSgpIGNvbnN0OworCisgICAgICBIYXNoX0ZuJiAKKyAgICAgIGdldF9oYXNoX2ZuKCk7CisKKyAgICAgIGNvbnN0IEhhc2hfRm4mIAorICAgICAgZ2V0X2hhc2hfZm4oKSBjb25zdDsKKworICAgICAgRXFfRm4mIAorICAgICAgZ2V0X2VxX2ZuKCk7CisKKyAgICAgIGNvbnN0IEVxX0ZuJiAKKyAgICAgIGdldF9lcV9mbigpIGNvbnN0OworCisgICAgICBQcm9iZV9GbiYgCisgICAgICBnZXRfcHJvYmVfZm4oKTsKKworICAgICAgY29uc3QgUHJvYmVfRm4mIAorICAgICAgZ2V0X3Byb2JlX2ZuKCkgY29uc3Q7CisKKyAgICAgIENvbWJfUHJvYmVfRm4mIAorICAgICAgZ2V0X2NvbWJfcHJvYmVfZm4oKTsKKworICAgICAgY29uc3QgQ29tYl9Qcm9iZV9GbiYgCisgICAgICBnZXRfY29tYl9wcm9iZV9mbigpIGNvbnN0OworCisgICAgICBSZXNpemVfUG9saWN5JiAKKyAgICAgIGdldF9yZXNpemVfcG9saWN5KCk7CisKKyAgICAgIGNvbnN0IFJlc2l6ZV9Qb2xpY3kmIAorICAgICAgZ2V0X3Jlc2l6ZV9wb2xpY3koKSBjb25zdDsKKworICAgICAgaW5saW5lIHN0ZDo6cGFpcjxwb2ludF9pdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydChjb25zdF9yZWZlcmVuY2Ugcl92YWwpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfT05MWShQQl9EU19DTEFTU19DX0RFQzo6YXNzZXJ0X3ZhbGlkKCk7KQorICAgICAgICByZXR1cm4gaW5zZXJ0X2ltcChyX3ZhbCwgdHJhaXRzX2Jhc2U6Om1fc3RvcmVfZXh0cmFfaW5kaWNhdG9yKTsKKyAgICAgIH0KKworICAgICAgaW5saW5lIG1hcHBlZF9yZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yW10oY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSkKKyAgICAgIHsKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisJcmV0dXJuIHN1YnNjcmlwdF9pbXAocl9rZXksIHRyYWl0c19iYXNlOjptX3N0b3JlX2V4dHJhX2luZGljYXRvcik7CisjZWxzZSAKKwlpbnNlcnQocl9rZXkpOworICAgICAgICByZXR1cm4gdHJhaXRzX2Jhc2U6OnNfbnVsbF9tYXBwZWQ7CisjZW5kaWYKKyAgICAgIH0KKworICAgICAgaW5saW5lIHBvaW50X2l0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpOworCisgICAgICBpbmxpbmUgY29uc3RfcG9pbnRfaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSkgY29uc3Q7CisKKyAgICAgIGlubGluZSBwb2ludF9pdGVyYXRvcgorICAgICAgZmluZF9lbmQoKTsKKworICAgICAgaW5saW5lIGNvbnN0X3BvaW50X2l0ZXJhdG9yCisgICAgICBmaW5kX2VuZCgpIGNvbnN0OworCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgZXJhc2UoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFByZWQ+CisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBlcmFzZV9pZihQcmVkIHByZCk7CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCk7CisKKyAgICAgIGlubGluZSBpdGVyYXRvcgorICAgICAgYmVnaW4oKTsKKworICAgICAgaW5saW5lIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0OworCisgICAgICBpbmxpbmUgaXRlcmF0b3IKKyAgICAgIGVuZCgpOworCisgICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0OworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF92YWxpZCgpIGNvbnN0OworI2VuZGlmIAorCisjaWZkZWYgUEJfRFNfSFRfTUFQX1RSQUNFXworICAgICAgdm9pZAorICAgICAgdHJhY2UoKSBjb25zdDsKKyNlbmRpZiAKKworICAgIHByaXZhdGU6CisjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorICAgICAgZnJpZW5kIGNsYXNzIGl0ZXJhdG9yXzsKKyNlbmRpZiAKKworICAgICAgZnJpZW5kIGNsYXNzIGNvbnN0X2l0ZXJhdG9yXzsKKworICAgICAgdm9pZAorICAgICAgZGVhbGxvY2F0ZV9hbGwoKTsKKworICAgICAgdm9pZAorICAgICAgaW5pdGlhbGl6ZSgpOworCisgICAgICB2b2lkCisgICAgICBlcmFzZV9hbGxfdmFsaWRfZW50cmllcyhlbnRyeV9hcnJheSwgc2l6ZV90eXBlKTsKKworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIGRvX3Jlc2l6ZV9pZl9uZWVkZWQoKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIGRvX3Jlc2l6ZV9pZl9uZWVkZWRfbm9fdGhyb3coKTsKKworICAgICAgdm9pZAorICAgICAgcmVzaXplX2ltcChzaXplX3R5cGUpOworCisgICAgICB2aXJ0dWFsIHZvaWQKKyAgICAgIGRvX3Jlc2l6ZShzaXplX3R5cGUpOworCisgICAgICB2b2lkCisgICAgICByZXNpemVfaW1wKGVudHJ5X2FycmF5LCBzaXplX3R5cGUpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgcmVzaXplX2ltcF9yZWFzc2lnbihlbnRyeV9wb2ludGVyLCBlbnRyeV9hcnJheSwgZmFsc2VfdHlwZSk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICByZXNpemVfaW1wX3JlYXNzaWduKGVudHJ5X3BvaW50ZXIsIGVudHJ5X2FycmF5LCB0cnVlX3R5cGUpOworCisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBmaW5kX2luc19wb3MoY29uc3Rfa2V5X3JlZmVyZW5jZSwgZmFsc2VfdHlwZSk7CisKKyAgICAgIGlubGluZSBjb21wX2hhc2gKKyAgICAgIGZpbmRfaW5zX3Bvcyhjb25zdF9rZXlfcmVmZXJlbmNlLCB0cnVlX3R5cGUpOworCisgICAgICBpbmxpbmUgc3RkOjpwYWlyPHBvaW50X2l0ZXJhdG9yLCBib29sPgorICAgICAgaW5zZXJ0X2ltcChjb25zdF9yZWZlcmVuY2UsIGZhbHNlX3R5cGUpOworCisgICAgICBpbmxpbmUgc3RkOjpwYWlyPHBvaW50X2l0ZXJhdG9yLCBib29sPgorICAgICAgaW5zZXJ0X2ltcChjb25zdF9yZWZlcmVuY2UsIHRydWVfdHlwZSk7CisKKyAgICAgIGlubGluZSBwb2ludGVyCisgICAgICBpbnNlcnRfbmV3X2ltcChjb25zdF9yZWZlcmVuY2Ugcl92YWwsIHNpemVfdHlwZSBwb3MpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fZW50cmllc1twb3NdLm1fc3RhdCAhPSB2YWxpZF9lbnRyeV9zdGF0dXMpOworCisJaWYgKGRvX3Jlc2l6ZV9pZl9uZWVkZWQoKSkKKwkgIHBvcyA9IGZpbmRfaW5zX3BvcyhQQl9EU19WMkYocl92YWwpLAorCQkJICAgICB0cmFpdHNfYmFzZTo6bV9zdG9yZV9leHRyYV9pbmRpY2F0b3IpOworCisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fZW50cmllc1twb3NdLm1fc3RhdCAhPSB2YWxpZF9lbnRyeV9zdGF0dXMpOworCisJZW50cnkqIGNvbnN0IHBfZSA9IG1fZW50cmllcyArIHBvczsKKwluZXcgKCZwX2UtPm1fdmFsdWUpIHZhbHVlX3R5cGUocl92YWwpOworCXBfZS0+bV9zdGF0ID0gdmFsaWRfZW50cnlfc3RhdHVzOworCXJlc2l6ZV9iYXNlOjpub3RpZnlfaW5zZXJ0ZWQoKyttX251bV91c2VkX2UpOworCisJX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjppbnNlcnRfbmV3KFBCX0RTX1YyRihwX2UtPm1fdmFsdWUpKTspCisKKwlfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKwlyZXR1cm4gJnBfZS0+bV92YWx1ZTsKKyAgICAgIH0KKworICAgICAgaW5saW5lIHBvaW50ZXIKKyAgICAgIGluc2VydF9uZXdfaW1wKGNvbnN0X3JlZmVyZW5jZSByX3ZhbCwgY29tcF9oYXNoJiByX3Bvc19oYXNoX3BhaXIpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fZW50cmllc1tyX3Bvc19oYXNoX3BhaXIuZmlyc3RdLm1fc3RhdCAhPQorCQkJIHZhbGlkX2VudHJ5X3N0YXR1cyk7CisKKwlpZiAoZG9fcmVzaXplX2lmX25lZWRlZCgpKQorCSAgcl9wb3NfaGFzaF9wYWlyID0gZmluZF9pbnNfcG9zKFBCX0RTX1YyRihyX3ZhbCksCisJCQkJCSB0cmFpdHNfYmFzZTo6bV9zdG9yZV9leHRyYV9pbmRpY2F0b3IpOworCisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fZW50cmllc1tyX3Bvc19oYXNoX3BhaXIuZmlyc3RdLm1fc3RhdCAhPQorCQkJICAgICAgdmFsaWRfZW50cnlfc3RhdHVzKTsKKworCWVudHJ5KiBjb25zdCBwX2UgPSBtX2VudHJpZXMgKyByX3Bvc19oYXNoX3BhaXIuZmlyc3Q7CisJbmV3ICgmcF9lLT5tX3ZhbHVlKSB2YWx1ZV90eXBlKHJfdmFsKTsKKwlwX2UtPm1faGFzaCA9IHJfcG9zX2hhc2hfcGFpci5zZWNvbmQ7CisJcF9lLT5tX3N0YXQgPSB2YWxpZF9lbnRyeV9zdGF0dXM7CisKKwlyZXNpemVfYmFzZTo6bm90aWZ5X2luc2VydGVkKCsrbV9udW1fdXNlZF9lKTsKKworCV9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6aW5zZXJ0X25ldyhQQl9EU19WMkYocF9lLT5tX3ZhbHVlKSk7KQorCisJX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisJcmV0dXJuICZwX2UtPm1fdmFsdWU7CisgICAgICB9CisKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisgICAgICBpbmxpbmUgbWFwcGVkX3JlZmVyZW5jZQorICAgICAgc3Vic2NyaXB0X2ltcChjb25zdF9rZXlfcmVmZXJlbmNlIGtleSwgZmFsc2VfdHlwZSkKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKworCWNvbnN0IHNpemVfdHlwZSBwb3MgPSBmaW5kX2luc19wb3Moa2V5LCAKKwkJCQkJIHRyYWl0c19iYXNlOjptX3N0b3JlX2V4dHJhX2luZGljYXRvcik7CisKKwllbnRyeV9wb2ludGVyIHBfZSA9ICZtX2VudHJpZXNbcG9zXTsKKwlpZiAocF9lLT5tX3N0YXQgIT0gdmFsaWRfZW50cnlfc3RhdHVzKQorCSAgcmV0dXJuIGluc2VydF9uZXdfaW1wKHZhbHVlX3R5cGUoa2V5LCBtYXBwZWRfdHlwZSgpKSwgcG9zKS0+c2Vjb25kOworCisJX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpjaGVja19rZXlfZXhpc3RzKGtleSk7KQkgIAorCXJldHVybiBwX2UtPm1fdmFsdWUuc2Vjb25kOworICAgICAgfQorCisgICAgICBpbmxpbmUgbWFwcGVkX3JlZmVyZW5jZQorICAgICAgc3Vic2NyaXB0X2ltcChjb25zdF9rZXlfcmVmZXJlbmNlIGtleSwgdHJ1ZV90eXBlKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorCisJY29tcF9oYXNoIHBvc19oYXNoX3BhaXIgPQorCSAgZmluZF9pbnNfcG9zKGtleSwgdHJhaXRzX2Jhc2U6Om1fc3RvcmVfZXh0cmFfaW5kaWNhdG9yKTsKKworCWlmIChtX2VudHJpZXNbcG9zX2hhc2hfcGFpci5maXJzdF0ubV9zdGF0ICE9IHZhbGlkX2VudHJ5X3N0YXR1cykKKwkgIHJldHVybiBpbnNlcnRfbmV3X2ltcCh2YWx1ZV90eXBlKGtleSwgbWFwcGVkX3R5cGUoKSksCisJCQkJIHBvc19oYXNoX3BhaXIpLT5zZWNvbmQ7CisKKwlfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9leGlzdHMoa2V5KSk7CisJcmV0dXJuIChtX2VudHJpZXMgKyBwb3NfaGFzaF9wYWlyLmZpcnN0KS0+bV92YWx1ZS5zZWNvbmQ7CisgICAgICB9CisjZW5kaWYKKworICAgICAgaW5saW5lIHBvaW50ZXIKKyAgICAgIGZpbmRfa2V5X3BvaW50ZXIoY29uc3Rfa2V5X3JlZmVyZW5jZSBrZXksIGZhbHNlX3R5cGUpCisgICAgICB7CisJY29uc3Qgc2l6ZV90eXBlIGhhc2ggPSByYW5nZWRfcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShrZXkpOworCXNpemVfdHlwZSBpOworCXJlc2l6ZV9iYXNlOjpub3RpZnlfZmluZF9zZWFyY2hfc3RhcnQoKTsKKworCS8vIExvb3AgdW50aWwgZW50cnkgaXMgZm91bmQgb3IgdW50aWwgYWxsIHBvc3NpYmxlIGVudHJpZXMgYWNjZXNzZWQuCisJZm9yIChpID0gMDsgaSA8IG1fbnVtX2U7ICsraSkKKwkgIHsKKwkgICAgY29uc3Qgc2l6ZV90eXBlIHBvcyA9IHJhbmdlZF9wcm9iZV9mbl9iYXNlOjpvcGVyYXRvcigpKGtleSwgaGFzaCwgaSk7CisKKwkgICAgZW50cnkqIGNvbnN0IHBfZSA9IG1fZW50cmllcyArIHBvczsKKwkgICAgc3dpdGNoIChwX2UtPm1fc3RhdCkKKwkgICAgICB7CisJICAgICAgY2FzZSBlbXB0eV9lbnRyeV9zdGF0dXM6CisJCXsKKwkJICByZXNpemVfYmFzZTo6bm90aWZ5X2ZpbmRfc2VhcmNoX2VuZCgpOworCQkgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6Y2hlY2tfa2V5X2RvZXNfbm90X2V4aXN0KGtleSk7KQorCisJCSAgICByZXR1cm4gTlVMTDsKKwkJfQorCQlicmVhazsKKwkgICAgICBjYXNlIHZhbGlkX2VudHJ5X3N0YXR1czoKKwkJaWYgKGhhc2hfZXFfZm5fYmFzZTo6b3BlcmF0b3IoKShQQl9EU19WMkYocF9lLT5tX3ZhbHVlKSwga2V5KSkKKwkJICB7CisJCSAgICByZXNpemVfYmFzZTo6bm90aWZ5X2ZpbmRfc2VhcmNoX2VuZCgpOworCQkgICAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpjaGVja19rZXlfZXhpc3RzKGtleSk7KQorCisJCSAgICByZXR1cm4gcG9pbnRlcigmcF9lLT5tX3ZhbHVlKTsKKwkJICB9CisJCWJyZWFrOworCSAgICAgIGNhc2UgZXJhc2VkX2VudHJ5X3N0YXR1czoKKwkJYnJlYWs7CisJICAgICAgZGVmYXVsdDoKKwkJX0dMSUJDWFhfREVCVUdfQVNTRVJUKDApOworCSAgICAgIH07CisKKwkgICAgcmVzaXplX2Jhc2U6Om5vdGlmeV9maW5kX3NlYXJjaF9jb2xsaXNpb24oKTsKKwkgIH0KKworCV9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6Y2hlY2tfa2V5X2RvZXNfbm90X2V4aXN0KGtleSk7KQorCXJlc2l6ZV9iYXNlOjpub3RpZnlfZmluZF9zZWFyY2hfZW5kKCk7CisJcmV0dXJuIE5VTEw7CisgICAgICB9CisKKyAgICAgIGlubGluZSBwb2ludGVyCisgICAgICBmaW5kX2tleV9wb2ludGVyKGNvbnN0X2tleV9yZWZlcmVuY2Uga2V5LCB0cnVlX3R5cGUpCisgICAgICB7CisJY29tcF9oYXNoIHBvc19oYXNoX3BhaXIgPSByYW5nZWRfcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShrZXkpOworCXNpemVfdHlwZSBpOworCXJlc2l6ZV9iYXNlOjpub3RpZnlfZmluZF9zZWFyY2hfc3RhcnQoKTsKKworCS8vIExvb3AgdW50aWwgZW50cnkgaXMgZm91bmQgb3IgdW50aWwgYWxsIHBvc3NpYmxlIGVudHJpZXMgYWNjZXNzZWQuCisJZm9yIChpID0gMDsgaSA8IG1fbnVtX2U7ICsraSkKKwkgIHsKKwkgICAgY29uc3Qgc2l6ZV90eXBlIHBvcyA9CisJICAgICAgcmFuZ2VkX3Byb2JlX2ZuX2Jhc2U6Om9wZXJhdG9yKCkoa2V5LCBwb3NfaGFzaF9wYWlyLnNlY29uZCwgaSk7CisKKwkgICAgZW50cnkqIGNvbnN0IHBfZSA9IG1fZW50cmllcyArIHBvczsKKworCSAgICBzd2l0Y2gocF9lLT5tX3N0YXQpCisJICAgICAgeworCSAgICAgIGNhc2UgZW1wdHlfZW50cnlfc3RhdHVzOgorCQl7CisJCSAgcmVzaXplX2Jhc2U6Om5vdGlmeV9maW5kX3NlYXJjaF9lbmQoKTsKKwkJICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9kb2VzX25vdF9leGlzdChrZXkpOykKKworCQkgIHJldHVybiBOVUxMOworCQl9CisJCWJyZWFrOworCSAgICAgIGNhc2UgdmFsaWRfZW50cnlfc3RhdHVzOgorCQlpZiAoaGFzaF9lcV9mbl9iYXNlOjpvcGVyYXRvcigpKFBCX0RTX1YyRihwX2UtPm1fdmFsdWUpLAorCQkJCQkJcF9lLT5tX2hhc2gsCisJCQkJCQlrZXksIHBvc19oYXNoX3BhaXIuc2Vjb25kKSkKKwkJICB7CisJCSAgICByZXNpemVfYmFzZTo6bm90aWZ5X2ZpbmRfc2VhcmNoX2VuZCgpOworCQkgICAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpjaGVja19rZXlfZXhpc3RzKGtleSk7KQorCQkgICAgcmV0dXJuIHBvaW50ZXIoJnBfZS0+bV92YWx1ZSk7CisJCSAgfQorCQlicmVhazsKKwkgICAgICBjYXNlIGVyYXNlZF9lbnRyeV9zdGF0dXM6CisJCWJyZWFrOworCSAgICAgIGRlZmF1bHQ6CisJCV9HTElCQ1hYX0RFQlVHX0FTU0VSVCgwKTsKKwkgICAgICB9OworCisJICAgIHJlc2l6ZV9iYXNlOjpub3RpZnlfZmluZF9zZWFyY2hfY29sbGlzaW9uKCk7CisJICB9CisKKwlfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9kb2VzX25vdF9leGlzdChrZXkpOykKKwlyZXNpemVfYmFzZTo6bm90aWZ5X2ZpbmRfc2VhcmNoX2VuZCgpOworCXJldHVybiBOVUxMOworICAgICAgfQorCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgZXJhc2VfaW1wKGNvbnN0X2tleV9yZWZlcmVuY2UsIHRydWVfdHlwZSk7CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBlcmFzZV9pbXAoY29uc3Rfa2V5X3JlZmVyZW5jZSwgZmFsc2VfdHlwZSk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBlcmFzZV9lbnRyeShlbnRyeV9wb2ludGVyIHBfZSk7CisKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisgICAgICB2b2lkCisgICAgICBpbmNfaXRfc3RhdGUocG9pbnRlciYgcl9wX3ZhbHVlLCBzaXplX3R5cGUmIHJfcG9zKSBjb25zdAorICAgICAgeyBpbmNfaXRfc3RhdGUoKGNvbnN0X21hcHBlZF9wb2ludGVyJiApcl9wX3ZhbHVlLCByX3Bvcyk7IH0KKyNlbmRpZiAKKworICAgICAgdm9pZAorICAgICAgaW5jX2l0X3N0YXRlKGNvbnN0X3BvaW50ZXImIHJfcF92YWx1ZSwgc2l6ZV90eXBlJiByX3BvcykgY29uc3QKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQocl9wX3ZhbHVlICE9IE5VTEwpOworCWZvciAoKytyX3Bvczsgcl9wb3MgPCBtX251bV9lOyArK3JfcG9zKQorCSAgeworCSAgICBjb25zdF9lbnRyeV9wb2ludGVyIHBfZSA9JiBtX2VudHJpZXNbcl9wb3NdOworCSAgICBpZiAocF9lLT5tX3N0YXQgPT0gdmFsaWRfZW50cnlfc3RhdHVzKQorCSAgICAgIHsKKwkJcl9wX3ZhbHVlID0mIHBfZS0+bV92YWx1ZTsKKwkJcmV0dXJuOworCSAgICAgIH0KKwkgIH0KKwlyX3BfdmFsdWUgPSBOVUxMOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBnZXRfc3RhcnRfaXRfc3RhdGUoY29uc3RfcG9pbnRlciYgcl9wX3ZhbHVlLCBzaXplX3R5cGUmIHJfcG9zKSBjb25zdAorICAgICAgeworCWZvciAocl9wb3MgPSAwOyByX3BvcyA8IG1fbnVtX2U7ICsrcl9wb3MpCisJICB7CisJICAgIGNvbnN0X2VudHJ5X3BvaW50ZXIgcF9lID0gJm1fZW50cmllc1tyX3Bvc107CisJICAgIGlmIChwX2UtPm1fc3RhdCA9PSB2YWxpZF9lbnRyeV9zdGF0dXMpCisJICAgICAgeworCQlyX3BfdmFsdWUgPSAmcF9lLT5tX3ZhbHVlOworCQlyZXR1cm47CisJICAgICAgfQorCSAgfQorCXJfcF92YWx1ZSA9IE5VTEw7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGdldF9zdGFydF9pdF9zdGF0ZShwb2ludGVyJiByX3BfdmFsdWUsIHNpemVfdHlwZSYgcl9wb3MpCisgICAgICB7CisJZm9yIChyX3BvcyA9IDA7IHJfcG9zIDwgbV9udW1fZTsgKytyX3BvcykKKwkgIHsKKwkgICAgZW50cnlfcG9pbnRlciBwX2UgPSAmbV9lbnRyaWVzW3JfcG9zXTsKKwkgICAgaWYgKHBfZS0+bV9zdGF0ID09IHZhbGlkX2VudHJ5X3N0YXR1cykKKwkgICAgICB7CisJCXJfcF92YWx1ZSA9ICZwX2UtPm1fdmFsdWU7CisJCXJldHVybjsKKwkgICAgICB9CisJICB9CisJcl9wX3ZhbHVlID0gTlVMTDsKKyAgICAgIH0KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfZW50cnlfYXJyYXlfdmFsaWQoY29uc3QgZW50cnlfYXJyYXksIGZhbHNlX3R5cGUpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfZW50cnlfYXJyYXlfdmFsaWQoY29uc3QgZW50cnlfYXJyYXksIHRydWVfdHlwZSkgY29uc3Q7CisjZW5kaWYgCisKKyAgICAgIHN0YXRpYyBlbnRyeV9hbGxvY2F0b3IgCXNfZW50cnlfYWxsb2NhdG9yOworICAgICAgc3RhdGljIGl0ZXJhdG9yIAkJc19lbmRfaXQ7CisgICAgICBzdGF0aWMgY29uc3RfaXRlcmF0b3IgCXNfY29uc3RfZW5kX2l0OworCisgICAgICBzaXplX3R5cGUgCQltX251bV9lOworICAgICAgc2l6ZV90eXBlIAkJbV9udW1fdXNlZF9lOworICAgICAgZW50cnlfcG9pbnRlciAJCW1fZW50cmllczsKKworICAgICAgZW51bQorCXsKKwkgIHN0b3JlX2hhc2hfb2sgPSAhU3RvcmVfSGFzaCAKKwkgICAgICAgICAgICAgICAgICB8fCAhaXNfc2FtZTxIYXNoX0ZuLCBfX2dudV9wYmRzOjpudWxsX2hhc2hfZm4+Ojp2YWx1ZQorCX07CisKKyAgICAgIFBCX0RTX1NUQVRJQ19BU1NFUlQoc3RoLCBzdG9yZV9oYXNoX29rKTsKKyAgICB9OworCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vY29uc3RydWN0b3JfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9maW5kX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL3Jlc2l6ZV9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9kZWJ1Z19mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9pbmZvX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL3BvbGljeV9hY2Nlc3NfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vZXJhc2VfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vaXRlcmF0b3JfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL3RyYWNlX2ZuX2ltcHMuaHBwPgorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworI3VuZGVmIFBCX0RTX0hBU0hfRVFfRk5fQ19ERUMKKyN1bmRlZiBQQl9EU19SQU5HRURfUFJPQkVfRk5fQ19ERUMKKyN1bmRlZiBQQl9EU19UWVBFU19UUkFJVFNfQ19ERUMKKyN1bmRlZiBQQl9EU19ERUJVR19NQVBfQkFTRV9DX0RFQworI3VuZGVmIFBCX0RTX0NMQVNTX05BTUUKKyN1bmRlZiBQQl9EU19WMkYKKyN1bmRlZiBQQl9EU19WMlMKKworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9pbmZvX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9pbmZvX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyM2E5MjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2luZm9fZm5faW1wcy5ocHAKQEAgLTAsMCArMSw1OCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgaW5mb19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGdwX2h0X21hcF8ncyBlbnRpcmUgY29udGFpbmVyIGluZm8gcmVsYXRlZAorICogICAgZnVuY3Rpb25zLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc2l6ZSgpIGNvbnN0Cit7IHJldHVybiBtX251bV91c2VkX2U7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CittYXhfc2l6ZSgpIGNvbnN0Cit7IHJldHVybiBzX2VudHJ5X2FsbG9jYXRvci5tYXhfc2l6ZSgpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgYm9vbAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZW1wdHkoKSBjb25zdAoreyByZXR1cm4gKHNpemUoKSA9PSAwKTsgfQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9pbnNlcnRfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2luc2VydF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDFjZThjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9pbnNlcnRfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw0MyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgaW5zZXJ0X2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgZ3BfaHRfbWFwXydzIGluc2VydCByZWxhdGVkIGZ1bmN0aW9ucy4KKyAqLworCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vaW5zZXJ0X25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vaW5zZXJ0X3N0b3JlX2hhc2hfZm5faW1wcy5ocHA+CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vaW5zZXJ0X25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2luc2VydF9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMjdhNGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2luc2VydF9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTExIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBpbnNlcnRfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGdwX2h0X21hcF8ncyBpbnNlcnQgcmVsYXRlZCBmdW5jdGlvbnMsCisgKiB3aGVuIHRoZSBoYXNoIHZhbHVlIGlzIG5vdCBzdG9yZWQuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitmaW5kX2luc19wb3MoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSwgZmFsc2VfdHlwZSkKK3sKKyAgc2l6ZV90eXBlIGhhc2ggPSByYW5nZWRfcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShyX2tleSk7CisgIHNpemVfdHlwZSBpOworCisgIC8qIFRoZSBpbnNlcnRpb24gcG9zaXRpb24gaXMgaW5pdHRlZCB0byBhIG5vbi1sZWdhbCB2YWx1ZSB0byBpbmRpY2F0ZQorICAgKiAgICAgdGhhdCBpdCBoYXMgbm90IGJlZW4gaW5pdHRlZCB5ZXQuCisgICAqLworICBzaXplX3R5cGUgaW5zX3BvcyA9IG1fbnVtX2U7CisgIHJlc2l6ZV9iYXNlOjpub3RpZnlfaW5zZXJ0X3NlYXJjaF9zdGFydCgpOworICBmb3IgKGkgPSAwOyBpIDwgbV9udW1fZTsgKytpKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBwb3MgPSByYW5nZWRfcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShyX2tleSwgaGFzaCwgaSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocG9zIDwgbV9udW1fZSk7CisgICAgICBlbnRyeSogY29uc3QgcF9lID0gbV9lbnRyaWVzICsgcG9zOworICAgICAgc3dpdGNoKHBfZS0+bV9zdGF0KQorICAgICAgICB7CisgICAgICAgIGNhc2UgZW1wdHlfZW50cnlfc3RhdHVzOgorCSAgeworICAgICAgICAgICAgcmVzaXplX2Jhc2U6Om5vdGlmeV9pbnNlcnRfc2VhcmNoX2VuZCgpOworICAgICAgICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpjaGVja19rZXlfZG9lc19ub3RfZXhpc3Qocl9rZXkpOykKKwkgICAgcmV0dXJuIChpbnNfcG9zID09IG1fbnVtX2UpID8gcG9zIDogaW5zX3BvczsKKwkgIH0KKwkgIGJyZWFrOworICAgICAgICBjYXNlIGVyYXNlZF9lbnRyeV9zdGF0dXM6CisJICBpZiAoaW5zX3BvcyA9PSBtX251bV9lKQorCSAgICBpbnNfcG9zID0gcG9zOworCSAgYnJlYWs7CisgICAgICAgIGNhc2UgdmFsaWRfZW50cnlfc3RhdHVzOgorCSAgaWYgKGhhc2hfZXFfZm5fYmFzZTo6b3BlcmF0b3IoKShQQl9EU19WMkYocF9lLT5tX3ZhbHVlKSwgcl9rZXkpKQorICAgICAgICAgICAgeworCSAgICAgIHJlc2l6ZV9iYXNlOjpub3RpZnlfaW5zZXJ0X3NlYXJjaF9lbmQoKTsKKwkgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9leGlzdHMocl9rZXkpOykKKyAgICAgICAgICAgICAgICByZXR1cm4gcG9zOworICAgICAgICAgICAgfQorCSAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoMCk7CisgICAgICAgIH07CisKKyAgICAgIHJlc2l6ZV9iYXNlOjpub3RpZnlfaW5zZXJ0X3NlYXJjaF9jb2xsaXNpb24oKTsKKyAgICB9CisgIHJlc2l6ZV9iYXNlOjpub3RpZnlfaW5zZXJ0X3NlYXJjaF9lbmQoKTsKKyAgaWYgKGluc19wb3MgPT0gbV9udW1fZSkKKyAgICBfX3Rocm93X2luc2VydF9lcnJvcigpOworICByZXR1cm4gaW5zX3BvczsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBzdGQ6OnBhaXI8dHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnBvaW50X2l0ZXJhdG9yLCBib29sPgorUEJfRFNfQ0xBU1NfQ19ERUM6OgoraW5zZXJ0X2ltcChjb25zdF9yZWZlcmVuY2Ugcl92YWwsIGZhbHNlX3R5cGUpCit7CisgIGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkgPSBQQl9EU19WMkYocl92YWwpOworICBjb25zdCBzaXplX3R5cGUgcG9zID0gZmluZF9pbnNfcG9zKHJfa2V5LCAKKwkJCQkgICAgIHRyYWl0c19iYXNlOjptX3N0b3JlX2V4dHJhX2luZGljYXRvcik7CisKKyAgaWYgKG1fZW50cmllc1twb3NdLm1fc3RhdCA9PSB2YWxpZF9lbnRyeV9zdGF0dXMpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpjaGVja19rZXlfZXhpc3RzKHJfa2V5KTspCisgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoJihtX2VudHJpZXMgKyBwb3MpLT5tX3ZhbHVlLCBmYWxzZSk7CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6Y2hlY2tfa2V5X2RvZXNfbm90X2V4aXN0KHJfa2V5KSk7CisgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihpbnNlcnRfbmV3X2ltcChyX3ZhbCwgcG9zKSwgdHJ1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vaW5zZXJ0X3N0b3JlX2hhc2hfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2luc2VydF9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MzEwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2luc2VydF9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTE4IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBpbnNlcnRfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGdwX2h0X21hcF8ncyBmaW5kIHJlbGF0ZWQgZnVuY3Rpb25zLAorICogd2hlbiB0aGUgaGFzaCB2YWx1ZSBpcyBzdG9yZWQuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29tcF9oYXNoCitQQl9EU19DTEFTU19DX0RFQzo6CitmaW5kX2luc19wb3MoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSwgdHJ1ZV90eXBlKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKFBCX0RTX0NMQVNTX0NfREVDOjphc3NlcnRfdmFsaWQoKTspCisgIGNvbXBfaGFzaCBwb3NfaGFzaF9wYWlyID0gcmFuZ2VkX3Byb2JlX2ZuX2Jhc2U6Om9wZXJhdG9yKCkocl9rZXkpOworCisgIHNpemVfdHlwZSBpOworCisgIC8qIFRoZSBpbnNlcnRpb24gcG9zaXRpb24gaXMgaW5pdHRlZCB0byBhIG5vbi1sZWdhbCB2YWx1ZSB0byBpbmRpY2F0ZQorICAgKiAgICAgdGhhdCBpdCBoYXMgbm90IGJlZW4gaW5pdHRlZCB5ZXQuCisgICAqLworICBzaXplX3R5cGUgaW5zX3BvcyA9IG1fbnVtX2U7CisgIHJlc2l6ZV9iYXNlOjpub3RpZnlfaW5zZXJ0X3NlYXJjaF9zdGFydCgpOworICBmb3IgKGkgPSAwOyBpIDwgbV9udW1fZTsgKytpKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBwb3MgPSByYW5nZWRfcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShyX2tleSwgcG9zX2hhc2hfcGFpci5zZWNvbmQsIGkpOworCisgICAgICBlbnRyeSogY29uc3QgcF9lID0gbV9lbnRyaWVzICsgcG9zOworICAgICAgc3dpdGNoKHBfZS0+bV9zdGF0KQorICAgICAgICB7CisgICAgICAgIGNhc2UgZW1wdHlfZW50cnlfc3RhdHVzOgorCSAgeworICAgICAgICAgICAgcmVzaXplX2Jhc2U6Om5vdGlmeV9pbnNlcnRfc2VhcmNoX2VuZCgpOworICAgICAgICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpjaGVja19rZXlfZG9lc19ub3RfZXhpc3Qocl9rZXkpOykKKworCSAgICByZXR1cm4gKChpbnNfcG9zID09IG1fbnVtX2UpID8KKwkJICAgICBzdGQ6Om1ha2VfcGFpcihwb3MsIHBvc19oYXNoX3BhaXIuc2Vjb25kKSA6CisJCSAgICAgc3RkOjptYWtlX3BhaXIoaW5zX3BvcywgcG9zX2hhc2hfcGFpci5zZWNvbmQpKTsKKwkgIH0KKwkgIGJyZWFrOworICAgICAgICBjYXNlIGVyYXNlZF9lbnRyeV9zdGF0dXM6CisJICBpZiAoaW5zX3BvcyA9PSBtX251bV9lKQorCSAgICBpbnNfcG9zID0gcG9zOworCSAgYnJlYWs7CisgICAgICAgIGNhc2UgdmFsaWRfZW50cnlfc3RhdHVzOgorCSAgaWYgKGhhc2hfZXFfZm5fYmFzZTo6b3BlcmF0b3IoKShQQl9EU19WMkYocF9lLT5tX3ZhbHVlKSwgcF9lLT5tX2hhc2gsCisJCQkJCSAgcl9rZXksIHBvc19oYXNoX3BhaXIuc2Vjb25kKSkKKyAgICAgICAgICAgIHsKKwkgICAgICByZXNpemVfYmFzZTo6bm90aWZ5X2luc2VydF9zZWFyY2hfZW5kKCk7CisJICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpjaGVja19rZXlfZXhpc3RzKHJfa2V5KTspCisgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihwb3MsIHBvc19oYXNoX3BhaXIuc2Vjb25kKTsKKyAgICAgICAgICAgIH0KKwkgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKDApOworICAgICAgICB9OworICAgICAgcmVzaXplX2Jhc2U6Om5vdGlmeV9pbnNlcnRfc2VhcmNoX2NvbGxpc2lvbigpOworICAgIH0KKyAgcmVzaXplX2Jhc2U6Om5vdGlmeV9pbnNlcnRfc2VhcmNoX2VuZCgpOworICBpZiAoaW5zX3BvcyA9PSBtX251bV9lKQorICAgIF9fdGhyb3dfaW5zZXJ0X2Vycm9yKCk7CisgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihpbnNfcG9zLCBwb3NfaGFzaF9wYWlyLnNlY29uZCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgc3RkOjpwYWlyPHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludF9pdGVyYXRvciwgYm9vbD4KK1BCX0RTX0NMQVNTX0NfREVDOjoKK2luc2VydF9pbXAoY29uc3RfcmVmZXJlbmNlIHJfdmFsLCB0cnVlX3R5cGUpCit7CisgIGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkgPSBQQl9EU19WMkYocl92YWwpOworICBjb21wX2hhc2ggcG9zX2hhc2hfcGFpciA9IGZpbmRfaW5zX3BvcyhyX2tleSwgCisJCQkJCSB0cmFpdHNfYmFzZTo6bV9zdG9yZV9leHRyYV9pbmRpY2F0b3IpOworCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwb3NfaGFzaF9wYWlyLmZpcnN0IDwgbV9udW1fZSk7CisgIGVudHJ5X3BvaW50ZXIgcF9lID0mIG1fZW50cmllc1twb3NfaGFzaF9wYWlyLmZpcnN0XTsKKyAgaWYgKHBfZS0+bV9zdGF0ID09IHZhbGlkX2VudHJ5X3N0YXR1cykKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9leGlzdHMocl9rZXkpKTsKKyAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcigmcF9lLT5tX3ZhbHVlLCBmYWxzZSk7CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6Y2hlY2tfa2V5X2RvZXNfbm90X2V4aXN0KHJfa2V5KSk7CisgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihpbnNlcnRfbmV3X2ltcChyX3ZhbCwgcG9zX2hhc2hfcGFpciksIHRydWUpOworfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2l0ZXJhdG9yX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9pdGVyYXRvcl9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjFmODBmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9pdGVyYXRvcl9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDgzIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBpdGVyYXRvcl9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGdwX2h0X21hcF8ncyBpdGVyYXRvcnMgcmVsYXRlZCBmdW5jdGlvbnMsIGUuZy4sCisgKiAgICBiZWdpbigpLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6aXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjpzX2VuZF9pdDsKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OnNfY29uc3RfZW5kX2l0OworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjppdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYmVnaW4oKQoreworICBwb2ludGVyXyBwX3ZhbHVlOworICBzaXplX3R5cGUgcG9zOworICBnZXRfc3RhcnRfaXRfc3RhdGUocF92YWx1ZSwgcG9zKTsKKyAgcmV0dXJuIGl0ZXJhdG9yKHBfdmFsdWUsIHBvcywgdGhpcyk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitlbmQoKQoreyByZXR1cm4gc19lbmRfaXQ7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2JlZ2luKCkgY29uc3QKK3sKKyAgY29uc3RfcG9pbnRlcl8gcF92YWx1ZTsKKyAgc2l6ZV90eXBlIHBvczsKKyAgZ2V0X3N0YXJ0X2l0X3N0YXRlKHBfdmFsdWUsIHBvcyk7CisgIHJldHVybiBjb25zdF9pdGVyYXRvcihwX3ZhbHVlLCBwb3MsIHRoaXMpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZW5kKCkgY29uc3QKK3sgcmV0dXJuIHNfY29uc3RfZW5kX2l0OyB9CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vcG9saWN5X2FjY2Vzc19mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vcG9saWN5X2FjY2Vzc19mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWEzZjdhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9wb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTAwIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBwb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgZ3BfaHRfbWFwXydzIHBvbGljeSBhZ3Blc3MKKyAqICAgIGZ1bmN0aW9ucy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworSGFzaF9GbiYgCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfaGFzaF9mbigpCit7IHJldHVybiAqdGhpczsgfQorCitQQl9EU19DTEFTU19UX0RFQworY29uc3QgSGFzaF9GbiYgCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfaGFzaF9mbigpIGNvbnN0Cit7IHJldHVybiAqdGhpczsgfQorCitQQl9EU19DTEFTU19UX0RFQworRXFfRm4mIAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X2VxX2ZuKCkKK3sgcmV0dXJuICp0aGlzOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitjb25zdCBFcV9GbiYgCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfZXFfZm4oKSBjb25zdAoreyByZXR1cm4gKnRoaXM7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1Byb2JlX0ZuJiAKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9wcm9iZV9mbigpCit7IHJldHVybiAqdGhpczsgfQorCitQQl9EU19DTEFTU19UX0RFQworY29uc3QgUHJvYmVfRm4mIAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X3Byb2JlX2ZuKCkgY29uc3QKK3sgcmV0dXJuICp0aGlzOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitDb21iX1Byb2JlX0ZuJiAKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9jb21iX3Byb2JlX2ZuKCkKK3sgcmV0dXJuICp0aGlzOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitjb25zdCBDb21iX1Byb2JlX0ZuJiAKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9jb21iX3Byb2JlX2ZuKCkgY29uc3QKK3sgcmV0dXJuICp0aGlzOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitSZXNpemVfUG9saWN5JiAKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9yZXNpemVfcG9saWN5KCkKK3sgcmV0dXJuICp0aGlzOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitjb25zdCBSZXNpemVfUG9saWN5JiAKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9yZXNpemVfcG9saWN5KCkgY29uc3QKK3sgcmV0dXJuICp0aGlzOyB9CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL3Jlc2l6ZV9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vcmVzaXplX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0OTJhNDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL3Jlc2l6ZV9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDEzNyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcmVzaXplX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgZ3BfaHRfbWFwXydzIHJlc2l6ZSByZWxhdGVkIGZ1bmN0aW9ucy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIGJvb2wKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2RvX3Jlc2l6ZV9pZl9uZWVkZWQoKQoreworICBpZiAoIXJlc2l6ZV9iYXNlOjppc19yZXNpemVfbmVlZGVkKCkpCisgICAgcmV0dXJuIGZhbHNlOworICByZXNpemVfaW1wKHJlc2l6ZV9iYXNlOjpnZXRfbmV3X3NpemUobV9udW1fZSwgbV9udW1fdXNlZF9lKSk7CisgIHJldHVybiB0cnVlOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZG9fcmVzaXplKHNpemVfdHlwZSBuKQoreyByZXNpemVfaW1wKHJlc2l6ZV9iYXNlOjpnZXRfbmVhcmVzdF9sYXJnZXJfc2l6ZShuKSk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citkb19yZXNpemVfaWZfbmVlZGVkX25vX3Rocm93KCkKK3sKKyAgaWYgKCFyZXNpemVfYmFzZTo6aXNfcmVzaXplX25lZWRlZCgpKQorICAgIHJldHVybjsKKworICBfX3RyeQorICAgIHsKKyAgICAgIHJlc2l6ZV9pbXAocmVzaXplX2Jhc2U6OmdldF9uZXdfc2l6ZShtX251bV9lLCBtX251bV91c2VkX2UpKTsKKyAgICB9CisgIF9fY2F0Y2goLi4uKQorICAgIHsgfQorCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVzaXplX2ltcChzaXplX3R5cGUgbmV3X3NpemUpCit7CisjaWZkZWYgUEJfRFNfUkVHUkVTU0lPTgorICB0eXBlbmFtZSBBbGxvY2F0b3I6Omdyb3VwX2FkanVzdG9yIGFkanVzdChtX251bV9lKTsKKyNlbmRpZiAKKworICBpZiAobmV3X3NpemUgPT0gbV9udW1fZSkKKyAgICByZXR1cm47CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIGNvbnN0IHNpemVfdHlwZSBvbGRfc2l6ZSA9IG1fbnVtX2U7CisgIGVudHJ5X2FycmF5IGFfZW50cmllc19yZXNpemVkID0gTlVMTDsKKworICAvLyBGb2xsb3dpbmcgbGluZSBtaWdodCB0aHJvdyBhbiBleGNlcHRpb24uCisgIGFfZW50cmllc19yZXNpemVkID0gc19lbnRyeV9hbGxvY2F0b3IuYWxsb2NhdGUobmV3X3NpemUpOworCisgIHJhbmdlZF9wcm9iZV9mbl9iYXNlOjpub3RpZnlfcmVzaXplZChuZXdfc2l6ZSk7CisgIG1fbnVtX2UgPSBuZXdfc2l6ZTsKKworICBmb3IgKHNpemVfdHlwZSBpID0gMDsgaSA8IG1fbnVtX2U7ICsraSkKKyAgICBhX2VudHJpZXNfcmVzaXplZFtpXS5tX3N0YXQgPSBlbXB0eV9lbnRyeV9zdGF0dXM7CisKKyAgX190cnkKKyAgICB7CisgICAgICByZXNpemVfaW1wKGFfZW50cmllc19yZXNpemVkLCBvbGRfc2l6ZSk7CisgICAgfQorICBfX2NhdGNoKC4uLikKKyAgICB7CisgICAgICBlcmFzZV9hbGxfdmFsaWRfZW50cmllcyhhX2VudHJpZXNfcmVzaXplZCwgbmV3X3NpemUpOworICAgICAgbV9udW1fZSA9IG9sZF9zaXplOworICAgICAgc19lbnRyeV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShhX2VudHJpZXNfcmVzaXplZCwgbmV3X3NpemUpOworICAgICAgcmFuZ2VkX3Byb2JlX2ZuX2Jhc2U6Om5vdGlmeV9yZXNpemVkKG9sZF9zaXplKTsKKyAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworICAgIH0KKworICAvLyBBdCB0aGlzIHBvaW50IG5vIGV4Y2VwdGlvbnMgY2FuIGJlIHRocm93bi4KKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfZW50cnlfYXJyYXlfdmFsaWQoYV9lbnRyaWVzX3Jlc2l6ZWQsIHRyYWl0c19iYXNlOjptX3N0b3JlX2V4dHJhX2luZGljYXRvcik7KQorCisgIFJlc2l6ZV9Qb2xpY3k6Om5vdGlmeV9yZXNpemVkKG5ld19zaXplKTsKKyAgZXJhc2VfYWxsX3ZhbGlkX2VudHJpZXMobV9lbnRyaWVzLCBvbGRfc2l6ZSk7CisgIHNfZW50cnlfYWxsb2NhdG9yLmRlYWxsb2NhdGUobV9lbnRyaWVzLCBvbGRfc2l6ZSk7CisgIG1fZW50cmllcyA9IGFfZW50cmllc19yZXNpemVkOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3Jlc2l6ZV9pbXAoZW50cnlfYXJyYXkgYV9lbnRyaWVzX3Jlc2l6ZWQsIHNpemVfdHlwZSBvbGRfc2l6ZSkKK3sKKyAgZm9yIChzaXplX3R5cGUgcG9zID0gMDsgcG9zIDwgb2xkX3NpemU7ICsrcG9zKQorICAgIGlmIChtX2VudHJpZXNbcG9zXS5tX3N0YXQgPT0gdmFsaWRfZW50cnlfc3RhdHVzKQorICAgICAgcmVzaXplX2ltcF9yZWFzc2lnbihtX2VudHJpZXMgKyBwb3MsIGFfZW50cmllc19yZXNpemVkLCAKKwkJCSAgdHJhaXRzX2Jhc2U6Om1fc3RvcmVfZXh0cmFfaW5kaWNhdG9yKTsKK30KKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL3Jlc2l6ZV9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL3Jlc2l6ZV9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwPgorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL3Jlc2l6ZV9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9yZXNpemVfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDI4MzllCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9yZXNpemVfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDcyIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSByZXNpemVfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGdwX2h0X21hcF8ncyByZXNpemUgcmVsYXRlZCBmdW5jdGlvbnMsIHdoZW4gdGhlCisgKiAgICBoYXNoIHZhbHVlIGlzIG5vdCBzdG9yZWQuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CityZXNpemVfaW1wX3JlYXNzaWduKGVudHJ5X3BvaW50ZXIgcF9lLCBlbnRyeV9hcnJheSBhX2VudHJpZXNfcmVzaXplZCwgCisJCSAgICBmYWxzZV90eXBlKQoreworICBjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5ID0gUEJfRFNfVjJGKHBfZS0+bV92YWx1ZSk7CisgIHNpemVfdHlwZSBoYXNoID0gcmFuZ2VkX3Byb2JlX2ZuX2Jhc2U6Om9wZXJhdG9yKCkocl9rZXkpOworICBzaXplX3R5cGUgaTsKKyAgZm9yIChpID0gMDsgaSA8IG1fbnVtX2U7ICsraSkKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgcG9zID0gcmFuZ2VkX3Byb2JlX2ZuX2Jhc2U6Om9wZXJhdG9yKCkocl9rZXksIGhhc2gsIGkpOworICAgICAgZW50cnlfcG9pbnRlciBwX25ld19lID0gYV9lbnRyaWVzX3Jlc2l6ZWQgKyBwb3M7CisgICAgICBzd2l0Y2gocF9uZXdfZS0+bV9zdGF0KQorICAgICAgICB7CisgICAgICAgIGNhc2UgZW1wdHlfZW50cnlfc3RhdHVzOgorCSAgbmV3ICgmcF9uZXdfZS0+bV92YWx1ZSkgdmFsdWVfdHlwZShwX2UtPm1fdmFsdWUpOworCSAgcF9uZXdfZS0+bV9zdGF0ID0gdmFsaWRfZW50cnlfc3RhdHVzOworCSAgcmV0dXJuOworICAgICAgICBjYXNlIGVyYXNlZF9lbnRyeV9zdGF0dXM6CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoMCk7CisJICBicmVhazsKKyAgICAgICAgY2FzZSB2YWxpZF9lbnRyeV9zdGF0dXM6CisJICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKwkgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCgwKTsKKyAgICAgICAgfTsKKyAgICB9CisgIF9fdGhyb3dfaW5zZXJ0X2Vycm9yKCk7Cit9CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vcmVzaXplX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL3Jlc2l6ZV9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NWU5NjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL3Jlc2l6ZV9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNzQgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHJlc2l6ZV9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgZ3BfaHRfbWFwXydzIHJlc2l6ZSByZWxhdGVkIGZ1bmN0aW9ucywgd2hlbiB0aGUKKyAqICAgIGhhc2ggdmFsdWUgaXMgc3RvcmVkLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVzaXplX2ltcF9yZWFzc2lnbihlbnRyeV9wb2ludGVyIHBfZSwgZW50cnlfYXJyYXkgYV9lbnRyaWVzX3Jlc2l6ZWQsIAorCQkgICAgdHJ1ZV90eXBlKQoreworICBjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5ID0gUEJfRFNfVjJGKHBfZS0+bV92YWx1ZSk7CisgIHNpemVfdHlwZSBoYXNoID0gcmFuZ2VkX3Byb2JlX2ZuX2Jhc2U6Om9wZXJhdG9yKCkocl9rZXksIHBfZS0+bV9oYXNoKTsKKworICBzaXplX3R5cGUgaTsKKyAgZm9yIChpID0gMDsgaSA8IG1fbnVtX2U7ICsraSkKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgcG9zID0gcmFuZ2VkX3Byb2JlX2ZuX2Jhc2U6Om9wZXJhdG9yKCkocl9rZXksIGhhc2gsIGkpOworICAgICAgZW50cnlfcG9pbnRlciBwX25ld19lID0gYV9lbnRyaWVzX3Jlc2l6ZWQgKyBwb3M7CisgICAgICBzd2l0Y2gocF9uZXdfZS0+bV9zdGF0KQorICAgICAgICB7CisgICAgICAgIGNhc2UgZW1wdHlfZW50cnlfc3RhdHVzOgorCSAgbmV3ICgmcF9uZXdfZS0+bV92YWx1ZSkgdmFsdWVfdHlwZShwX2UtPm1fdmFsdWUpOworCSAgcF9uZXdfZS0+bV9oYXNoID0gaGFzaDsKKwkgIHBfbmV3X2UtPm1fc3RhdCA9IHZhbGlkX2VudHJ5X3N0YXR1czsKKwkgIHJldHVybjsKKyAgICAgICAgY2FzZSBlcmFzZWRfZW50cnlfc3RhdHVzOgorCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKDApOworCSAgYnJlYWs7CisgICAgICAgIGNhc2UgdmFsaWRfZW50cnlfc3RhdHVzOgorCSAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoMCk7CisgICAgICAgIH07CisgICAgfQorICBfX3Rocm93X2luc2VydF9lcnJvcigpOworfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL3N0YW5kYXJkX3BvbGljaWVzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vc3RhbmRhcmRfcG9saWNpZXMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3OTcyNWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL3N0YW5kYXJkX3BvbGljaWVzLmhwcApAQCAtMCwwICsxLDc0IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBzdGFuZGFyZF9wb2xpY2llcy5ocHAKKyAqIENvbnRhaW5zIHN0YW5kYXJkIHBvbGljaWVzIGZvciBncF9odF9tYXAgdHlwZXMuCisgKi8KKworI2lmbmRlZiBQQl9EU19HUF9IVF9NQVBfU1RBTkRBUkRfUE9MSUNJRVNfSFBQCisjZGVmaW5lIFBCX0RTX0dQX0hUX01BUF9TVEFOREFSRF9QT0xJQ0lFU19IUFAKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvc3RhbmRhcmRfcG9saWNpZXMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9odF9sb2FkX2NoZWNrX3Jlc2l6ZV90cmlnZ2VyLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvbGluZWFyX3Byb2JlX2ZuLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvcXVhZHJhdGljX3Byb2JlX2ZuLmhwcD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29tYl9Qcm9iZV9Gbj4KKyAgICBzdHJ1Y3QgZGVmYXVsdF9wcm9iZV9mbgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb21iX1Byb2JlX0ZuOjpzaXplX3R5cGUgc2l6ZV90eXBlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgX19jb25kaXRpb25hbF90eXBlPAorICAgICAgaXNfc2FtZTwKKyAgICAgIF9fZ251X3BiZHM6OmRpcmVjdF9tYXNrX3JhbmdlX2hhc2hpbmc8c2l6ZV90PiwKKyAgICAgIENvbWJfUHJvYmVfRm4+Ojp2YWx1ZSwKKyAgICAgIF9fZ251X3BiZHM6OmxpbmVhcl9wcm9iZV9mbjxzaXplX3R5cGU+LAorICAgICAgX19nbnVfcGJkczo6cXVhZHJhdGljX3Byb2JlX2ZuPHNpemVfdHlwZT4gPjo6X190eXBlCisgICAgICB0eXBlOworICAgIH07CisKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy90cmFjZV9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vdHJhY2VfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNmZTEzYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vdHJhY2VfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw3NCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgdHJhY2VfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBncF9odF9tYXBfJ3MgdHJhY2UtbW9kZSBmdW5jdGlvbnMuCisgKi8KKworI2lmZGVmIFBCX0RTX0hUX01BUF9UUkFDRV8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3RyYWNlKCkgY29uc3QKK3sKKyAgc3RkOjpjZXJyIDw8IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KG1fbnVtX2UpIDw8ICIgIiA8PAorICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KG1fbnVtX3VzZWRfZSkgPDwgc3RkOjplbmRsOworCisgIGZvciAoc2l6ZV90eXBlIGkgPSAwOyBpIDwgbV9udW1fZTsgKytpKQorICAgIHsKKyAgICAgIHN0ZDo6Y2VyciA8PCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihpKSA8PCAiICI7CisKKyAgICAgIHN3aXRjaChtX2VudHJpZXNbaV0ubV9zdGF0KQorICAgICAgICB7CisJY2FzZSBlbXB0eV9lbnRyeV9zdGF0dXM6CisJICBzdGQ6OmNlcnIgPDwgIjxlbXB0eT4iOworCSAgYnJlYWs7CisJY2FzZSBlcmFzZWRfZW50cnlfc3RhdHVzOgorCSAgc3RkOjpjZXJyIDw8ICI8ZXJhc2VkPiI7CisJICBicmVhazsKKwljYXNlIHZhbGlkX2VudHJ5X3N0YXR1czoKKwkgIHN0ZDo6Y2VyciA8PCBQQl9EU19WMkYobV9lbnRyaWVzW2ldLm1fdmFsdWUpOworCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCgwKTsKKwl9OworCisgICAgICBzdGQ6OmNlcnIgPDwgc3RkOjplbmRsOworICAgIH0KK30KKworI2VuZGlmIC8vICNpZmRlZiBQQl9EU19IVF9NQVBfVFJBQ0VfCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9kaXJlY3RfbWFza19yYW5nZV9oYXNoaW5nX2ltcC5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9kaXJlY3RfbWFza19yYW5nZV9oYXNoaW5nX2ltcC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FmNzg0OAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9oYXNoX2ZuL2RpcmVjdF9tYXNrX3JhbmdlX2hhc2hpbmdfaW1wLmhwcApAQCAtMCwwICsxLDU4IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBkaXJlY3RfbWFza19yYW5nZV9oYXNoaW5nX2ltcC5ocHAKKyAqIENvbnRhaW5zIGEgcmFuZ2UtaGFzaGluZyBwb2xpY3kgaW1wbGVtZW50YXRpb24KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7IG1hc2tfYmFzZWRfYmFzZTo6c3dhcChvdGhlcik7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vdGlmeV9yZXNpemVkKHNpemVfdHlwZSBzaXplKQoreyBtYXNrX2Jhc2VkX2Jhc2U6Om5vdGlmeV9yZXNpemVkKHNpemUpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorb3BlcmF0b3IoKShzaXplX3R5cGUgaGFzaCkgY29uc3QKK3sgcmV0dXJuIG1hc2tfYmFzZWRfYmFzZTo6cmFuZ2VfaGFzaChoYXNoKTsgfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9kaXJlY3RfbW9kX3JhbmdlX2hhc2hpbmdfaW1wLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9oYXNoX2ZuL2RpcmVjdF9tb2RfcmFuZ2VfaGFzaGluZ19pbXAuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZDU3YjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9kaXJlY3RfbW9kX3JhbmdlX2hhc2hpbmdfaW1wLmhwcApAQCAtMCwwICsxLDU4IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBkaXJlY3RfbW9kX3JhbmdlX2hhc2hpbmdfaW1wLmhwcAorICogQ29udGFpbnMgYSByYW5nZS1oYXNoaW5nIHBvbGljeSBpbXBsZW1lbnRhdGlvbgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citzd2FwKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sgbW9kX2Jhc2VkX2Jhc2U6OnN3YXAob3RoZXIpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfcmVzaXplZChzaXplX3R5cGUgbikKK3sgbW9kX2Jhc2VkX2Jhc2U6Om5vdGlmeV9yZXNpemVkKG4pOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorb3BlcmF0b3IoKShzaXplX3R5cGUgaGFzaCkgY29uc3QKK3sgcmV0dXJuIG1vZF9iYXNlZF9iYXNlOjpyYW5nZV9oYXNoKGhhc2gpOyB9CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9oYXNoX2ZuL2xpbmVhcl9wcm9iZV9mbl9pbXAuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vbGluZWFyX3Byb2JlX2ZuX2ltcC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdiMjY0NAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9oYXNoX2ZuL2xpbmVhcl9wcm9iZV9mbl9pbXAuaHBwCkBAIC0wLDAgKzEsNTMgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGxpbmVhcl9wcm9iZV9mbl9pbXAuaHBwCisgKiBDb250YWlucyBhIHByb2JlIHBvbGljeSBpbXBsZW1lbnRhdGlvbgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitvcGVyYXRvcigpKHNpemVfdHlwZSBpKSBjb25zdAoreworICByZXR1cm4gKGkpOworfQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vbWFza19iYXNlZF9yYW5nZV9oYXNoaW5nLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9oYXNoX2ZuL21hc2tfYmFzZWRfcmFuZ2VfaGFzaGluZy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM2YWJiZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9oYXNoX2ZuL21hc2tfYmFzZWRfcmFuZ2VfaGFzaGluZy5ocHAKQEAgLTAsMCArMSwxMDcgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIG1hc2tfYmFzZWRfcmFuZ2VfaGFzaGluZy5ocHAKKyAqIENvbnRhaW5zIGEgcmFuZ2UgaGFzaGluZyBwb2xpY3kgYmFzZS4KKyAqLworCisjaWZuZGVmIFBCX0RTX01BU0tfQkFTRURfUkFOR0VfSEFTSElOR19IUFAKKyNkZWZpbmUgUEJfRFNfTUFTS19CQVNFRF9SQU5HRV9IQVNISU5HX0hQUAorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgdGVtcGxhdGU8dHlwZW5hbWUgU2l6ZV9UeXBlPgorI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBtYXNrX2Jhc2VkX3JhbmdlX2hhc2hpbmc8U2l6ZV9UeXBlPgorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU2l6ZV9UeXBlPgorICAgIGNsYXNzIG1hc2tfYmFzZWRfcmFuZ2VfaGFzaGluZworICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmIFNpemVfVHlwZSBzaXplX3R5cGU7CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAobWFza19iYXNlZF9yYW5nZV9oYXNoaW5nJiBvdGhlcikKKyAgICAgIHsgc3RkOjpzd2FwKG1fbWFzaywgb3RoZXIubV9tYXNrKTsgfQorCisgICAgICB2b2lkCisgICAgICBub3RpZnlfcmVzaXplZChzaXplX3R5cGUgc2l6ZSk7CisKKyAgICAgIGlubGluZSBzaXplX3R5cGUKKyAgICAgIHJhbmdlX2hhc2goc2l6ZV90eXBlIGhhc2gpIGNvbnN0CisgICAgICB7IHJldHVybiBzaXplX3R5cGUoaGFzaCAmIG1fbWFzayk7IH0KKworICAgIHByaXZhdGU6CisgICAgICBzaXplX3R5cGUgCQltX21hc2s7CisgICAgICBjb25zdCBzdGF0aWMgc2l6ZV90eXBlIAlzX251bV9iaXRzX2luX3NpemVfdHlwZTsKKyAgICAgIGNvbnN0IHN0YXRpYyBzaXplX3R5cGUgCXNfaGlnaGVzdF9iaXRfMTsKKyAgICB9OworCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBjb25zdCB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OnNfbnVtX2JpdHNfaW5fc2l6ZV90eXBlID0KKyAgICAgIHNpemVvZih0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlKSA8PCAzOworCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBjb25zdCB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlIFBCX0RTX0NMQVNTX0NfREVDOjpzX2hpZ2hlc3RfYml0XzEgPSBzdGF0aWNfY2FzdDx0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlPigxKSA8PCAoc19udW1fYml0c19pbl9zaXplX3R5cGUgLSAxKTsKKworIAorICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgdm9pZAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBub3RpZnlfcmVzaXplZChzaXplX3R5cGUgc2l6ZSkKKyAgICB7CisgICAgICBzaXplX3R5cGUgaSA9IDA7CisgICAgICB3aGlsZSAoc2l6ZSBeIHNfaGlnaGVzdF9iaXRfMSkKKwl7CisJICBzaXplIDw8PSAxOworCSAgKytpOworCX0KKworICAgICAgbV9tYXNrID0gMTsKKyAgICAgIGkgKz0gMjsKKyAgICAgIHdoaWxlIChpKysgPCBzX251bV9iaXRzX2luX3NpemVfdHlwZSkKKyAgICAgICAgbV9tYXNrID0gKG1fbWFzayA8PCAxKSBeIDE7CisgICAgfQorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9oYXNoX2ZuL21vZF9iYXNlZF9yYW5nZV9oYXNoaW5nLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9oYXNoX2ZuL21vZF9iYXNlZF9yYW5nZV9oYXNoaW5nLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjEwZTA0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vbW9kX2Jhc2VkX3JhbmdlX2hhc2hpbmcuaHBwCkBAIC0wLDAgKzEsMTA4IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBtb2RfYmFzZWRfcmFuZ2VfaGFzaGluZy5ocHAKKyAqIENvbnRhaW5zIGEgcmFuZ2UgaGFzaGluZyBwb2xpY3kgYmFzZS4KKyAqLworCisjaWZuZGVmIFBCX0RTX01PRF9CQVNFRF9SQU5HRV9IQVNISU5HX0hQUAorI2RlZmluZSBQQl9EU19NT0RfQkFTRURfUkFOR0VfSEFTSElOR19IUFAKKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQwkJCVwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTaXplX1R5cGU+CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfQ19ERUMJCQkJCVwKKyAgICBtb2RfYmFzZWRfcmFuZ2VfaGFzaGluZzwJCQkJCVwKKwkJCQkJCVNpemVfVHlwZT4KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNpemVfVHlwZT4KKyAgICBjbGFzcyBtb2RfYmFzZWRfcmFuZ2VfaGFzaGluZworICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmIFNpemVfVHlwZSBzaXplX3R5cGU7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB2b2lkCisgICAgICBzd2FwKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcik7CisKKyAgICAgIHZvaWQKKyAgICAgIG5vdGlmeV9yZXNpemVkKHNpemVfdHlwZSBzaXplKTsKKworICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgcmFuZ2VfaGFzaChzaXplX3R5cGUgaGFzaCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgc2l6ZV90eXBlIG1fc2l6ZTsKKyAgICB9OworCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB2b2lkCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQorICAgIHsKKyAgICAgIHN0ZDo6c3dhcChtX3NpemUsIG90aGVyLm1fc2l6ZSk7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB2b2lkCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIG5vdGlmeV9yZXNpemVkKHNpemVfdHlwZSBzaXplKQorICAgIHsKKyAgICAgIG1fc2l6ZSA9IHNpemU7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICByYW5nZV9oYXNoKHNpemVfdHlwZSBoYXNoKSBjb25zdAorICAgIHsKKyAgICAgIHJldHVybiAoaGFzaCAlIG1fc2l6ZSk7CisgICAgfQorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAvLyAjaWZuZGVmIFBCX0RTX01PRF9CQVNFRF9SQU5HRV9IQVNISU5HX0hQUApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vcHJvYmVfZm5fYmFzZS5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9wcm9iZV9mbl9iYXNlLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzBjZmMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vcHJvYmVfZm5fYmFzZS5ocHAKQEAgLTAsMCArMSw1OSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcHJvYmVfZm5fYmFzZS5ocHAKKyAqIENvbnRhaW5zIGEgcHJvYmUgcG9saWN5IGJhc2UuCisgKi8KKworI2lmbmRlZiBQQl9EU19QUk9CRV9GTl9CQVNFX0hQUAorI2RlZmluZSBQQl9EU19QUk9CRV9GTl9CQVNFX0hQUAorCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQWxsb2NhdG9yPgorICAgIGNsYXNzIHByb2JlX2ZuX2Jhc2UKKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgfnByb2JlX2ZuX2Jhc2UoKSB7IH0KKyAgICB9OworfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9oYXNoX2ZuL3F1YWRyYXRpY19wcm9iZV9mbl9pbXAuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vcXVhZHJhdGljX3Byb2JlX2ZuX2ltcC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM3YTZjNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9oYXNoX2ZuL3F1YWRyYXRpY19wcm9iZV9mbl9pbXAuaHBwCkBAIC0wLDAgKzEsNTMgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHF1YWRyYXRpY19wcm9iZV9mbl9pbXAuaHBwCisgKiBDb250YWlucyBhIHByb2JlIHBvbGljeSBpbXBsZW1lbnRhdGlvbgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitvcGVyYXRvcigpKHNpemVfdHlwZSBpKSBjb25zdAoreworICByZXR1cm4gKGkqICBpKTsKK30KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9oYXNoX2ZuL3JhbmdlZF9oYXNoX2ZuLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9oYXNoX2ZuL3JhbmdlZF9oYXNoX2ZuLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDg5OTI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vcmFuZ2VkX2hhc2hfZm4uaHBwCkBAIC0wLDAgKzEsMzU5IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSByYW5nZWRfaGFzaF9mbi5ocHAKKyAqIENvbnRhaW5zIGEgdW5pZmllZCByYW5nZWQgaGFzaCBmdW5jdG9yLCBhbGxvd2luZyB0aGUgaGFzaCB0YWJsZXMKKyAqIHRvIGRlYWwgd2l0aCBhIHNpbmdsZSBjbGFzcyBmb3IgcmFuZ2VkIGhhc2hpbmcuCisgKi8KKworI2lmbmRlZiBQQl9EU19SQU5HRURfSEFTSF9GTl9IUFAKKyNkZWZpbmUgUEJfRFNfUkFOR0VEX0hBU0hfRk5fSFBQCisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2Jhc2ljX3R5cGVzLmhwcD4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgSGFzaF9GbiwgdHlwZW5hbWUgQWxsb2NhdG9yLCAKKwkgICAgIHR5cGVuYW1lIENvbWJfSGFzaF9GbiwgYm9vbCBTdG9yZV9IYXNoPgorICAgIGNsYXNzIHJhbmdlZF9oYXNoX2ZuOworCisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIEhhc2hfRm4sIHR5cGVuYW1lIEFsbG9jYXRvciwgXAorCSAgICAgdHlwZW5hbWUgQ29tYl9IYXNoX0ZuPgorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFwKKyAgICByYW5nZWRfaGFzaF9mbjxLZXksCUhhc2hfRm4sIEFsbG9jYXRvciwgQ29tYl9IYXNoX0ZuLCBmYWxzZT4KKworICAgIC8qKgorICAgICAqIFNwZWNpYWxpemF0aW9uIDEKKyAgICAgKiBUaGUgY2xpZW50IHN1cHBsaWVzIGEgaGFzaCBmdW5jdGlvbiBhbmQgYSByYW5nZWQgaGFzaCBmdW5jdGlvbiwKKyAgICAgKiBhbmQgcmVxdWVzdHMgdGhhdCBoYXNoIHZhbHVlcyBub3QgYmUgc3RvcmVkLgorICAgICAqKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIEhhc2hfRm4sIHR5cGVuYW1lIEFsbG9jYXRvciwgCisJICAgICB0eXBlbmFtZSBDb21iX0hhc2hfRm4+CisgICAgY2xhc3MgcmFuZ2VkX2hhc2hfZm48IEtleSwgSGFzaF9GbiwgQWxsb2NhdG9yLCBDb21iX0hhc2hfRm4sIGZhbHNlPiAKKyAgICA6IHB1YmxpYyBIYXNoX0ZuLCBwdWJsaWMgQ29tYl9IYXNoX0ZuCisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjpzaXplX3R5cGUgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiBIYXNoX0ZuIGhhc2hfZm5fYmFzZTsKKyAgICAgIHR5cGVkZWYgQ29tYl9IYXNoX0ZuIGNvbWJfaGFzaF9mbl9iYXNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwgS2V5Pjo6b3RoZXIga2V5X2FsbG9jYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUga2V5X2FsbG9jYXRvcjo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X2tleV9yZWZlcmVuY2U7CisKKyAgICAgIHJhbmdlZF9oYXNoX2ZuKHNpemVfdHlwZSk7CisKKyAgICAgIHJhbmdlZF9oYXNoX2ZuKHNpemVfdHlwZSwgY29uc3QgSGFzaF9GbiYpOworCisgICAgICByYW5nZWRfaGFzaF9mbihzaXplX3R5cGUsIGNvbnN0IEhhc2hfRm4mLCBjb25zdCBDb21iX0hhc2hfRm4mKTsKKworICAgICAgdm9pZAorICAgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgICB2b2lkCisgICAgICBub3RpZnlfcmVzaXplZChzaXplX3R5cGUpOworCisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBvcGVyYXRvcigpKGNvbnN0X2tleV9yZWZlcmVuY2UpIGNvbnN0OworICAgIH07CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICByYW5nZWRfaGFzaF9mbihzaXplX3R5cGUgc2l6ZSkKKyAgICB7IENvbWJfSGFzaF9Gbjo6bm90aWZ5X3Jlc2l6ZWQoc2l6ZSk7IH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHJhbmdlZF9oYXNoX2ZuKHNpemVfdHlwZSBzaXplLCBjb25zdCBIYXNoX0ZuJiByX2hhc2hfZm4pIAorICAgIDogSGFzaF9GbihyX2hhc2hfZm4pCisgICAgeyBDb21iX0hhc2hfRm46Om5vdGlmeV9yZXNpemVkKHNpemUpOyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICByYW5nZWRfaGFzaF9mbihzaXplX3R5cGUgc2l6ZSwgY29uc3QgSGFzaF9GbiYgcl9oYXNoX2ZuLCAKKwkJICAgY29uc3QgQ29tYl9IYXNoX0ZuJiByX2NvbWJfaGFzaF9mbikgCisgICAgOiBIYXNoX0ZuKHJfaGFzaF9mbiksIENvbWJfSGFzaF9GbihyX2NvbWJfaGFzaF9mbikKKyAgICB7IGNvbWJfaGFzaF9mbl9iYXNlOjpub3RpZnlfcmVzaXplZChzaXplKTsgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB2b2lkCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQorICAgIHsKKyAgICAgIGNvbWJfaGFzaF9mbl9iYXNlOjpzd2FwKG90aGVyKTsKKyAgICAgIHN0ZDo6c3dhcCgoSGFzaF9GbiYgKSgqdGhpcyksIChIYXNoX0ZuJiApb3RoZXIpOworICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgdm9pZAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBub3RpZnlfcmVzaXplZChzaXplX3R5cGUgc2l6ZSkKKyAgICB7IGNvbWJfaGFzaF9mbl9iYXNlOjpub3RpZnlfcmVzaXplZChzaXplKTsgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBvcGVyYXRvcigpKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpIGNvbnN0CisgICAgeyByZXR1cm4gKGNvbWJfaGFzaF9mbl9iYXNlOjpvcGVyYXRvcigpKGhhc2hfZm5fYmFzZTo6b3BlcmF0b3IoKShyX2tleSkpKTt9CisKKyN1bmRlZiBQQl9EU19DTEFTU19UX0RFQworI3VuZGVmIFBCX0RTX0NMQVNTX0NfREVDCisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgSGFzaF9GbiwgdHlwZW5hbWUgQWxsb2NhdG9yLCBcCisJICAgICB0eXBlbmFtZSBDb21iX0hhc2hfRm4+CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfQ19ERUMgXAorICAgIHJhbmdlZF9oYXNoX2ZuPEtleSxIYXNoX0ZuLAlBbGxvY2F0b3IsIENvbWJfSGFzaF9GbiwgdHJ1ZT4KKworICAgIC8qKgorICAgICAqIFNwZWNpYWxpemF0aW9uIDIKKyAgICAgKiBUaGUgY2xpZW50IHN1cHBsaWVzIGEgaGFzaCBmdW5jdGlvbiBhbmQgYSByYW5nZWQgaGFzaCBmdW5jdGlvbiwKKyAgICAgKiBhbmQgcmVxdWVzdHMgdGhhdCBoYXNoIHZhbHVlcyBiZSBzdG9yZWQuCisgICAgICoqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgSGFzaF9GbiwgdHlwZW5hbWUgQWxsb2NhdG9yLAorCSAgICAgdHlwZW5hbWUgQ29tYl9IYXNoX0ZuPgorICAgIGNsYXNzIHJhbmdlZF9oYXNoX2ZuPEtleSwgSGFzaF9GbiwgQWxsb2NhdG9yLCBDb21iX0hhc2hfRm4sIHRydWU+IAorICAgIDogcHVibGljIEhhc2hfRm4sIHB1YmxpYyBDb21iX0hhc2hfRm4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnNpemVfdHlwZSBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxzaXplX3R5cGUsIHNpemVfdHlwZT4gY29tcF9oYXNoOworICAgICAgdHlwZWRlZiBIYXNoX0ZuIGhhc2hfZm5fYmFzZTsKKyAgICAgIHR5cGVkZWYgQ29tYl9IYXNoX0ZuIGNvbWJfaGFzaF9mbl9iYXNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxLZXk+OjpvdGhlciBrZXlfYWxsb2NhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBrZXlfYWxsb2NhdG9yOjpjb25zdF9yZWZlcmVuY2UgY29uc3Rfa2V5X3JlZmVyZW5jZTsKKworICAgICAgcmFuZ2VkX2hhc2hfZm4oc2l6ZV90eXBlKTsKKworICAgICAgcmFuZ2VkX2hhc2hfZm4oc2l6ZV90eXBlLCBjb25zdCBIYXNoX0ZuJik7CisKKyAgICAgIHJhbmdlZF9oYXNoX2ZuKHNpemVfdHlwZSwgY29uc3QgSGFzaF9GbiYsIGNvbnN0IENvbWJfSGFzaF9GbiYpOworCisgICAgICB2b2lkCisgICAgICBzd2FwKFBCX0RTX0NMQVNTX0NfREVDJik7CisKKyAgICAgIHZvaWQKKyAgICAgIG5vdGlmeV9yZXNpemVkKHNpemVfdHlwZSk7CisKKyAgICAgIGlubGluZSBjb21wX2hhc2gKKyAgICAgIG9wZXJhdG9yKCkoY29uc3Rfa2V5X3JlZmVyZW5jZSkgY29uc3Q7CisKKyAgICAgIGlubGluZSBjb21wX2hhc2gKKyAgICAgIG9wZXJhdG9yKCkoY29uc3Rfa2V5X3JlZmVyZW5jZSwgc2l6ZV90eXBlKSBjb25zdDsKKyAgICB9OworCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcmFuZ2VkX2hhc2hfZm4oc2l6ZV90eXBlIHNpemUpCisgICAgeyBDb21iX0hhc2hfRm46Om5vdGlmeV9yZXNpemVkKHNpemUpOyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICByYW5nZWRfaGFzaF9mbihzaXplX3R5cGUgc2l6ZSwgY29uc3QgSGFzaF9GbiYgcl9oYXNoX2ZuKSA6CisgICAgICBIYXNoX0ZuKHJfaGFzaF9mbikKKyAgICB7IENvbWJfSGFzaF9Gbjo6bm90aWZ5X3Jlc2l6ZWQoc2l6ZSk7IH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHJhbmdlZF9oYXNoX2ZuKHNpemVfdHlwZSBzaXplLCBjb25zdCBIYXNoX0ZuJiByX2hhc2hfZm4sIAorCQkgICBjb25zdCBDb21iX0hhc2hfRm4mIHJfY29tYl9oYXNoX2ZuKSAKKyAgICA6IEhhc2hfRm4ocl9oYXNoX2ZuKSwgQ29tYl9IYXNoX0ZuKHJfY29tYl9oYXNoX2ZuKQorICAgIHsgY29tYl9oYXNoX2ZuX2Jhc2U6Om5vdGlmeV9yZXNpemVkKHNpemUpOyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCisgICAgeworICAgICAgY29tYl9oYXNoX2ZuX2Jhc2U6OnN3YXAob3RoZXIpOworICAgICAgc3RkOjpzd2FwKChIYXNoX0ZuJiApKCp0aGlzKSwgKEhhc2hfRm4mIClvdGhlcik7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB2b2lkCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIG5vdGlmeV9yZXNpemVkKHNpemVfdHlwZSBzaXplKQorICAgIHsgY29tYl9oYXNoX2ZuX2Jhc2U6Om5vdGlmeV9yZXNpemVkKHNpemUpOyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIGlubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29tcF9oYXNoCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIG9wZXJhdG9yKCkoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSkgY29uc3QKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgaGFzaCA9IGhhc2hfZm5fYmFzZTo6b3BlcmF0b3IoKShyX2tleSk7CisgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoY29tYl9oYXNoX2ZuX2Jhc2U6Om9wZXJhdG9yKCkoaGFzaCksIGhhc2gpOworICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb21wX2hhc2gKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgb3BlcmF0b3IoKQorI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICAoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSwgc2l6ZV90eXBlIGhhc2gpIGNvbnN0CisjZWxzZSAKKyAgICAgIChjb25zdF9rZXlfcmVmZXJlbmNlIC8qcl9rZXkqLywgc2l6ZV90eXBlIGhhc2gpIGNvbnN0CisjZW5kaWYKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoaGFzaCA9PSBoYXNoX2ZuX2Jhc2U6Om9wZXJhdG9yKCkocl9rZXkpKTsKKyAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihjb21iX2hhc2hfZm5fYmFzZTo6b3BlcmF0b3IoKShoYXNoKSwgaGFzaCk7CisgICAgfQorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworCisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIEFsbG9jYXRvciwgdHlwZW5hbWUgQ29tYl9IYXNoX0ZuPgorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFwKKyAgICByYW5nZWRfaGFzaF9mbjxLZXksCW51bGxfaGFzaF9mbiwgQWxsb2NhdG9yLCBDb21iX0hhc2hfRm4sIGZhbHNlPgorCisgICAgLyoqCisgICAgICogU3BlY2lhbGl6YXRpb24gMworICAgICAqIFRoZSBjbGllbnQgZG9lcyBub3Qgc3VwcGx5IGEgaGFzaCBmdW5jdGlvbiAoYnkgc3BlY2lmeWluZworICAgICAqIG51bGxfaGFzaF9mbiBhcyB0aGUgSGFzaF9GbiBwYXJhbWV0ZXIpLCBhbmQgcmVxdWVzdHMgdGhhdCBoYXNoCisgICAgICogdmFsdWVzIG5vdCBiZSBzdG9yZWQuCisgICAgICoqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgQWxsb2NhdG9yLCB0eXBlbmFtZSBDb21iX0hhc2hfRm4+CisgICAgY2xhc3MgcmFuZ2VkX2hhc2hfZm48S2V5LCBudWxsX2hhc2hfZm4sIEFsbG9jYXRvciwgQ29tYl9IYXNoX0ZuLCBmYWxzZT4gCisgICAgOiBwdWJsaWMgbnVsbF9oYXNoX2ZuLCBwdWJsaWMgQ29tYl9IYXNoX0ZuCisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjpzaXplX3R5cGUgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiBDb21iX0hhc2hfRm4gY29tYl9oYXNoX2ZuX2Jhc2U7CisKKyAgICAgIHJhbmdlZF9oYXNoX2ZuKHNpemVfdHlwZSk7CisKKyAgICAgIHJhbmdlZF9oYXNoX2ZuKHNpemVfdHlwZSwgY29uc3QgQ29tYl9IYXNoX0ZuJik7CisKKyAgICAgIHJhbmdlZF9oYXNoX2ZuKHNpemVfdHlwZSwgY29uc3QgbnVsbF9oYXNoX2ZuJiwgY29uc3QgQ29tYl9IYXNoX0ZuJik7CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKyAgICB9OworCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcmFuZ2VkX2hhc2hfZm4oc2l6ZV90eXBlIHNpemUpCisgICAgeyBDb21iX0hhc2hfRm46Om5vdGlmeV9yZXNpemVkKHNpemUpOyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICByYW5nZWRfaGFzaF9mbihzaXplX3R5cGUgc2l6ZSwgY29uc3QgQ29tYl9IYXNoX0ZuJiByX2NvbWJfaGFzaF9mbikgOgorICAgICAgQ29tYl9IYXNoX0ZuKHJfY29tYl9oYXNoX2ZuKQorICAgIHsgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcmFuZ2VkX2hhc2hfZm4oc2l6ZV90eXBlIHNpemUsIGNvbnN0IG51bGxfaGFzaF9mbiYgcl9udWxsX2hhc2hfZm4sIAorCQkgICBjb25zdCBDb21iX0hhc2hfRm4mIHJfY29tYl9oYXNoX2ZuKSAKKyAgICA6IENvbWJfSGFzaF9GbihyX2NvbWJfaGFzaF9mbikKKyAgICB7IH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgdm9pZAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBzd2FwKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKKyAgICB7IGNvbWJfaGFzaF9mbl9iYXNlOjpzd2FwKG90aGVyKTsgfQorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworCisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIEFsbG9jYXRvciwgdHlwZW5hbWUgQ29tYl9IYXNoX0ZuPgorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFwKKyAgICByYW5nZWRfaGFzaF9mbjxLZXksCW51bGxfaGFzaF9mbiwgQWxsb2NhdG9yLCBDb21iX0hhc2hfRm4sIHRydWU+CisKKyAgICAvKioKKyAgICAgKiBTcGVjaWFsaXphdGlvbiA0CisgICAgICogVGhlIGNsaWVudCBkb2VzIG5vdCBzdXBwbHkgYSBoYXNoIGZ1bmN0aW9uIChieSBzcGVjaWZ5aW5nCisgICAgICogbnVsbF9oYXNoX2ZuIGFzIHRoZSBIYXNoX0ZuIHBhcmFtZXRlciksIGFuZCByZXF1ZXN0cyB0aGF0IGhhc2gKKyAgICAgKiB2YWx1ZXMgYmUgc3RvcmVkLgorICAgICAqKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIEFsbG9jYXRvciwgdHlwZW5hbWUgQ29tYl9IYXNoX0ZuPgorICAgIGNsYXNzIHJhbmdlZF9oYXNoX2ZuPEtleSwgbnVsbF9oYXNoX2ZuLCBBbGxvY2F0b3IsIENvbWJfSGFzaF9GbiwgdHJ1ZT4gCisgICAgOiBwdWJsaWMgbnVsbF9oYXNoX2ZuLCBwdWJsaWMgQ29tYl9IYXNoX0ZuCisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjpzaXplX3R5cGUgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiBDb21iX0hhc2hfRm4gY29tYl9oYXNoX2ZuX2Jhc2U7CisKKyAgICAgIHJhbmdlZF9oYXNoX2ZuKHNpemVfdHlwZSk7CisKKyAgICAgIHJhbmdlZF9oYXNoX2ZuKHNpemVfdHlwZSwgY29uc3QgQ29tYl9IYXNoX0ZuJik7CisKKyAgICAgIHJhbmdlZF9oYXNoX2ZuKHNpemVfdHlwZSwgY29uc3QgbnVsbF9oYXNoX2ZuJiwgY29uc3QgQ29tYl9IYXNoX0ZuJik7CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKyAgICB9OworCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcmFuZ2VkX2hhc2hfZm4oc2l6ZV90eXBlIHNpemUpCisgICAgeyBDb21iX0hhc2hfRm46Om5vdGlmeV9yZXNpemVkKHNpemUpOyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICByYW5nZWRfaGFzaF9mbihzaXplX3R5cGUgc2l6ZSwgY29uc3QgQ29tYl9IYXNoX0ZuJiByX2NvbWJfaGFzaF9mbikgCisgICAgOiBDb21iX0hhc2hfRm4ocl9jb21iX2hhc2hfZm4pCisgICAgeyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICByYW5nZWRfaGFzaF9mbihzaXplX3R5cGUgc2l6ZSwgY29uc3QgbnVsbF9oYXNoX2ZuJiByX251bGxfaGFzaF9mbiwgCisJCSAgIGNvbnN0IENvbWJfSGFzaF9GbiYgcl9jb21iX2hhc2hfZm4pIAorICAgIDogQ29tYl9IYXNoX0ZuKHJfY29tYl9oYXNoX2ZuKQorICAgIHsgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB2b2lkCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQorICAgIHsgY29tYl9oYXNoX2ZuX2Jhc2U6OnN3YXAob3RoZXIpOyB9CisKKyN1bmRlZiBQQl9EU19DTEFTU19UX0RFQworI3VuZGVmIFBCX0RTX0NMQVNTX0NfREVDCisKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9oYXNoX2ZuL3JhbmdlZF9wcm9iZV9mbi5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9yYW5nZWRfcHJvYmVfZm4uaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZmJhOWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9yYW5nZWRfcHJvYmVfZm4uaHBwCkBAIC0wLDAgKzEsMzI3IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSByYW5nZWRfcHJvYmVfZm4uaHBwCisgKiBDb250YWlucyBhIHVuaWZpZWQgcmFuZ2VkIHByb2JlIGZ1bmN0b3IsIGFsbG93aW5nIHRoZSBwcm9iZSB0YWJsZXMgdG8gZGVhbCB3aXRoCisgKiAgICBhIHNpbmdsZSBjbGFzcyBmb3IgcmFuZ2VkIHByb2JlaW5nLgorICovCisKKyNpZm5kZWYgUEJfRFNfUkFOR0VEX1BST0JFX0ZOX0hQUAorI2RlZmluZSBQQl9EU19SQU5HRURfUFJPQkVfRk5fSFBQCisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2Jhc2ljX3R5cGVzLmhwcD4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgSGFzaF9GbiwgdHlwZW5hbWUgQWxsb2NhdG9yLAorCSAgICAgdHlwZW5hbWUgQ29tYl9Qcm9iZV9GbiwgdHlwZW5hbWUgUHJvYmVfRm4sIGJvb2wgU3RvcmVfSGFzaD4KKyAgICBjbGFzcyByYW5nZWRfcHJvYmVfZm47CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgSGFzaF9GbiwgdHlwZW5hbWUgQWxsb2NhdG9yLCBcCisJICAgICB0eXBlbmFtZSBDb21iX1Byb2JlX0ZuLCB0eXBlbmFtZSBQcm9iZV9Gbj4KKworI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBcCisgICAgcmFuZ2VkX3Byb2JlX2ZuPEtleSwgSGFzaF9GbiwgQWxsb2NhdG9yLCBDb21iX1Byb2JlX0ZuLCBQcm9iZV9GbiwgZmFsc2U+CisKKyAgICAvKioKKyAgICAgKiBTcGVjaWFsaXphdGlvbiAxICAgICAKKyAgICAgKiBUaGUgY2xpZW50IHN1cHBsaWVzIGEgcHJvYmUgZnVuY3Rpb24gYW5kIGEgcmFuZ2VkIHByb2JlCisgICAgICogZnVuY3Rpb24sIGFuZCByZXF1ZXN0cyB0aGF0IGhhc2ggdmFsdWVzIG5vdCBiZSBzdG9yZWQuCisgICAgICoqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgSGFzaF9GbiwgdHlwZW5hbWUgQWxsb2NhdG9yLAorCSAgICAgdHlwZW5hbWUgQ29tYl9Qcm9iZV9GbiwgdHlwZW5hbWUgUHJvYmVfRm4+CisgICAgY2xhc3MgcmFuZ2VkX3Byb2JlX2ZuPEtleSwgSGFzaF9GbiwgQWxsb2NhdG9yLCBDb21iX1Byb2JlX0ZuLAorCQkJICBQcm9iZV9GbiwgZmFsc2U+IAorICAgIDogcHVibGljIEhhc2hfRm4sIHB1YmxpYyBDb21iX1Byb2JlX0ZuLCBwdWJsaWMgUHJvYmVfRm4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnNpemVfdHlwZSBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIENvbWJfUHJvYmVfRm4gY29tYl9wcm9iZV9mbl9iYXNlOworICAgICAgdHlwZWRlZiBIYXNoX0ZuIGhhc2hfZm5fYmFzZTsKKyAgICAgIHR5cGVkZWYgUHJvYmVfRm4gcHJvYmVfZm5fYmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8S2V5Pjo6b3RoZXIga2V5X2FsbG9jYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUga2V5X2FsbG9jYXRvcjo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X2tleV9yZWZlcmVuY2U7CisKKyAgICAgIHJhbmdlZF9wcm9iZV9mbihzaXplX3R5cGUpOworCisgICAgICByYW5nZWRfcHJvYmVfZm4oc2l6ZV90eXBlLCBjb25zdCBIYXNoX0ZuJik7CisKKyAgICAgIHJhbmdlZF9wcm9iZV9mbihzaXplX3R5cGUsIGNvbnN0IEhhc2hfRm4mLCBjb25zdCBDb21iX1Byb2JlX0ZuJik7CisKKyAgICAgIHJhbmdlZF9wcm9iZV9mbihzaXplX3R5cGUsIGNvbnN0IEhhc2hfRm4mLCBjb25zdCBDb21iX1Byb2JlX0ZuJiwgCisJCSAgICAgIGNvbnN0IFByb2JlX0ZuJik7CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgdm9pZAorICAgICAgbm90aWZ5X3Jlc2l6ZWQoc2l6ZV90eXBlKTsKKworICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgb3BlcmF0b3IoKShjb25zdF9rZXlfcmVmZXJlbmNlKSBjb25zdDsKKworICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgb3BlcmF0b3IoKShjb25zdF9rZXlfcmVmZXJlbmNlLCBzaXplX3R5cGUsIHNpemVfdHlwZSkgY29uc3Q7CisgICAgfTsKKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHJhbmdlZF9wcm9iZV9mbihzaXplX3R5cGUgc2l6ZSkKKyAgICB7IENvbWJfUHJvYmVfRm46Om5vdGlmeV9yZXNpemVkKHNpemUpOyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICByYW5nZWRfcHJvYmVfZm4oc2l6ZV90eXBlIHNpemUsIGNvbnN0IEhhc2hfRm4mIHJfaGFzaF9mbikgCisgICAgOiBIYXNoX0ZuKHJfaGFzaF9mbikKKyAgICB7IENvbWJfUHJvYmVfRm46Om5vdGlmeV9yZXNpemVkKHNpemUpOyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICByYW5nZWRfcHJvYmVfZm4oc2l6ZV90eXBlIHNpemUsIGNvbnN0IEhhc2hfRm4mIHJfaGFzaF9mbiwgCisJCSAgICBjb25zdCBDb21iX1Byb2JlX0ZuJiByX2NvbWJfcHJvYmVfZm4pIAorICAgIDogSGFzaF9GbihyX2hhc2hfZm4pLCBDb21iX1Byb2JlX0ZuKHJfY29tYl9wcm9iZV9mbikKKyAgICB7IGNvbWJfcHJvYmVfZm5fYmFzZTo6bm90aWZ5X3Jlc2l6ZWQoc2l6ZSk7IH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHJhbmdlZF9wcm9iZV9mbihzaXplX3R5cGUgc2l6ZSwgY29uc3QgSGFzaF9GbiYgcl9oYXNoX2ZuLCAKKwkJICAgIGNvbnN0IENvbWJfUHJvYmVfRm4mIHJfY29tYl9wcm9iZV9mbiwgCisJCSAgICBjb25zdCBQcm9iZV9GbiYgcl9wcm9iZV9mbikgCisgICAgOiBIYXNoX0ZuKHJfaGFzaF9mbiksIENvbWJfUHJvYmVfRm4ocl9jb21iX3Byb2JlX2ZuKSwgUHJvYmVfRm4ocl9wcm9iZV9mbikKKyAgICB7IGNvbWJfcHJvYmVfZm5fYmFzZTo6bm90aWZ5X3Jlc2l6ZWQoc2l6ZSk7IH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgdm9pZAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBzd2FwKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKKyAgICB7CisgICAgICBjb21iX3Byb2JlX2ZuX2Jhc2U6OnN3YXAob3RoZXIpOworICAgICAgc3RkOjpzd2FwKChIYXNoX0ZuJiApKCp0aGlzKSwgKEhhc2hfRm4mKW90aGVyKTsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgbm90aWZ5X3Jlc2l6ZWQoc2l6ZV90eXBlIHNpemUpCisgICAgeyBjb21iX3Byb2JlX2ZuX2Jhc2U6Om5vdGlmeV9yZXNpemVkKHNpemUpOyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIGlubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIG9wZXJhdG9yKCkoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSkgY29uc3QKKyAgICB7IHJldHVybiBjb21iX3Byb2JlX2ZuX2Jhc2U6Om9wZXJhdG9yKCkoaGFzaF9mbl9iYXNlOjpvcGVyYXRvcigpKHJfa2V5KSk7IH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgb3BlcmF0b3IoKShjb25zdF9rZXlfcmVmZXJlbmNlLCBzaXplX3R5cGUgaGFzaCwgc2l6ZV90eXBlIGkpIGNvbnN0CisgICAgeworICAgICAgcmV0dXJuIGNvbWJfcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShoYXNoICsgcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShpKSk7CisgICAgfQorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworCisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIEhhc2hfRm4sIHR5cGVuYW1lIEFsbG9jYXRvciwgXAorCSAgICAgdHlwZW5hbWUgQ29tYl9Qcm9iZV9GbiwgdHlwZW5hbWUgUHJvYmVfRm4+CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfQ19ERUMgXAorICAgIHJhbmdlZF9wcm9iZV9mbjxLZXksIEhhc2hfRm4sIEFsbG9jYXRvciwgQ29tYl9Qcm9iZV9GbiwgUHJvYmVfRm4sIHRydWU+CisKKyAgICAvKioKKyAgICAgKiBTcGVjaWFsaXphdGlvbiAyLSBUaGUgY2xpZW50IHN1cHBsaWVzIGEgcHJvYmUgZnVuY3Rpb24gYW5kIGEgcmFuZ2VkCisgICAgICogICAgcHJvYmUgZnVuY3Rpb24sIGFuZCByZXF1ZXN0cyB0aGF0IGhhc2ggdmFsdWVzIG5vdCBiZSBzdG9yZWQuCisgICAgICoqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgSGFzaF9GbiwgdHlwZW5hbWUgQWxsb2NhdG9yLAorCSAgICAgdHlwZW5hbWUgQ29tYl9Qcm9iZV9GbiwgdHlwZW5hbWUgUHJvYmVfRm4+CisgICAgY2xhc3MgcmFuZ2VkX3Byb2JlX2ZuPEtleSwgSGFzaF9GbiwgQWxsb2NhdG9yLCBDb21iX1Byb2JlX0ZuLCAKKwkJCSAgUHJvYmVfRm4sIHRydWU+IAorICAgIDogcHVibGljIEhhc2hfRm4sIHB1YmxpYyBDb21iX1Byb2JlX0ZuLCBwdWJsaWMgUHJvYmVfRm4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnNpemVfdHlwZSBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxzaXplX3R5cGUsIHNpemVfdHlwZT4gY29tcF9oYXNoOworICAgICAgdHlwZWRlZiBDb21iX1Byb2JlX0ZuIGNvbWJfcHJvYmVfZm5fYmFzZTsKKyAgICAgIHR5cGVkZWYgSGFzaF9GbiBoYXNoX2ZuX2Jhc2U7CisgICAgICB0eXBlZGVmIFByb2JlX0ZuIHByb2JlX2ZuX2Jhc2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPEtleT46Om90aGVyIGtleV9hbGxvY2F0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGtleV9hbGxvY2F0b3I6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9rZXlfcmVmZXJlbmNlOworCisgICAgICByYW5nZWRfcHJvYmVfZm4oc2l6ZV90eXBlKTsKKworICAgICAgcmFuZ2VkX3Byb2JlX2ZuKHNpemVfdHlwZSwgY29uc3QgSGFzaF9GbiYpOworCisgICAgICByYW5nZWRfcHJvYmVfZm4oc2l6ZV90eXBlLCBjb25zdCBIYXNoX0ZuJiwgCisJCSAgICAgIGNvbnN0IENvbWJfUHJvYmVfRm4mKTsKKworICAgICAgcmFuZ2VkX3Byb2JlX2ZuKHNpemVfdHlwZSwgY29uc3QgSGFzaF9GbiYsIGNvbnN0IENvbWJfUHJvYmVfRm4mLCAKKwkJICAgICAgY29uc3QgUHJvYmVfRm4mKTsKKworICAgICAgdm9pZAorICAgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgICB2b2lkCisgICAgICBub3RpZnlfcmVzaXplZChzaXplX3R5cGUpOworCisgICAgICBpbmxpbmUgY29tcF9oYXNoCisgICAgICBvcGVyYXRvcigpKGNvbnN0X2tleV9yZWZlcmVuY2UpIGNvbnN0OworCisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBvcGVyYXRvcigpKGNvbnN0X2tleV9yZWZlcmVuY2UsIHNpemVfdHlwZSwgc2l6ZV90eXBlKSBjb25zdDsKKworICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgb3BlcmF0b3IoKShjb25zdF9rZXlfcmVmZXJlbmNlLCBzaXplX3R5cGUpIGNvbnN0OworICAgIH07CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICByYW5nZWRfcHJvYmVfZm4oc2l6ZV90eXBlIHNpemUpCisgICAgeyBDb21iX1Byb2JlX0ZuOjpub3RpZnlfcmVzaXplZChzaXplKTsgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcmFuZ2VkX3Byb2JlX2ZuKHNpemVfdHlwZSBzaXplLCBjb25zdCBIYXNoX0ZuJiByX2hhc2hfZm4pIAorICAgIDogSGFzaF9GbihyX2hhc2hfZm4pCisgICAgeyBDb21iX1Byb2JlX0ZuOjpub3RpZnlfcmVzaXplZChzaXplKTsgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcmFuZ2VkX3Byb2JlX2ZuKHNpemVfdHlwZSBzaXplLCBjb25zdCBIYXNoX0ZuJiByX2hhc2hfZm4sIAorCQkgICAgY29uc3QgQ29tYl9Qcm9iZV9GbiYgcl9jb21iX3Byb2JlX2ZuKSAKKyAgICA6IEhhc2hfRm4ocl9oYXNoX2ZuKSwgQ29tYl9Qcm9iZV9GbihyX2NvbWJfcHJvYmVfZm4pCisgICAgeyBjb21iX3Byb2JlX2ZuX2Jhc2U6Om5vdGlmeV9yZXNpemVkKHNpemUpOyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICByYW5nZWRfcHJvYmVfZm4oc2l6ZV90eXBlIHNpemUsIGNvbnN0IEhhc2hfRm4mIHJfaGFzaF9mbiwgCisJCSAgICBjb25zdCBDb21iX1Byb2JlX0ZuJiByX2NvbWJfcHJvYmVfZm4sIAorCQkgICAgY29uc3QgUHJvYmVfRm4mIHJfcHJvYmVfZm4pIAorICAgIDogSGFzaF9GbihyX2hhc2hfZm4pLCBDb21iX1Byb2JlX0ZuKHJfY29tYl9wcm9iZV9mbiksIFByb2JlX0ZuKHJfcHJvYmVfZm4pCisgICAgeyBjb21iX3Byb2JlX2ZuX2Jhc2U6Om5vdGlmeV9yZXNpemVkKHNpemUpOyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCisgICAgeworICAgICAgY29tYl9wcm9iZV9mbl9iYXNlOjpzd2FwKG90aGVyKTsKKyAgICAgIHN0ZDo6c3dhcCgoSGFzaF9GbiYgKSgqdGhpcyksIChIYXNoX0ZuJiApb3RoZXIpOworICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgdm9pZAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBub3RpZnlfcmVzaXplZChzaXplX3R5cGUgc2l6ZSkKKyAgICB7IGNvbWJfcHJvYmVfZm5fYmFzZTo6bm90aWZ5X3Jlc2l6ZWQoc2l6ZSk7IH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb21wX2hhc2gKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgb3BlcmF0b3IoKShjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5KSBjb25zdAorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBoYXNoID0gaGFzaF9mbl9iYXNlOjpvcGVyYXRvcigpKHJfa2V5KTsKKyAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihjb21iX3Byb2JlX2ZuX2Jhc2U6Om9wZXJhdG9yKCkoaGFzaCksIGhhc2gpOworICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgb3BlcmF0b3IoKShjb25zdF9rZXlfcmVmZXJlbmNlLCBzaXplX3R5cGUgaGFzaCwgc2l6ZV90eXBlIGkpIGNvbnN0CisgICAgeworICAgICAgcmV0dXJuIGNvbWJfcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShoYXNoICsgcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShpKSk7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBvcGVyYXRvcigpCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIChjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5LCBzaXplX3R5cGUgaGFzaCkgY29uc3QKKyNlbHNlIAorICAgICAgKGNvbnN0X2tleV9yZWZlcmVuY2UgLypyX2tleSovLCBzaXplX3R5cGUgaGFzaCkgY29uc3QKKyNlbmRpZiAKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoaGFzaCA9PSBoYXNoX2ZuX2Jhc2U6Om9wZXJhdG9yKCkocl9rZXkpKTsKKyAgICAgIHJldHVybiBoYXNoOworICAgIH0KKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKworICAgIC8qKgorICAgICAqIFNwZWNpYWxpemF0aW9uIDMgYW5kIDQKKyAgICAgKiBUaGUgY2xpZW50IGRvZXMgbm90IHN1cHBseSBhIGhhc2ggZnVuY3Rpb24gb3IgcHJvYmUgZnVuY3Rpb24sCisgICAgICogYW5kIHJlcXVlc3RzIHRoYXQgaGFzaCB2YWx1ZXMgbm90IGJlIHN0b3JlZC4KKyAgICAgKiovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBBbGxvY2F0b3IsIHR5cGVuYW1lIENvbWJfUHJvYmVfRm4+CisgICAgY2xhc3MgcmFuZ2VkX3Byb2JlX2ZuPEtleSwgbnVsbF9oYXNoX2ZuLCBBbGxvY2F0b3IsIENvbWJfUHJvYmVfRm4sIAorCQkJICBudWxsX3Byb2JlX2ZuLCBmYWxzZT4gCisgICAgOiBwdWJsaWMgQ29tYl9Qcm9iZV9GbiwgcHVibGljIG51bGxfaGFzaF9mbiwgcHVibGljIG51bGxfcHJvYmVfZm4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnNpemVfdHlwZSBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIENvbWJfUHJvYmVfRm4gY29tYl9wcm9iZV9mbl9iYXNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxLZXk+OjpvdGhlciBrZXlfYWxsb2NhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBrZXlfYWxsb2NhdG9yOjpjb25zdF9yZWZlcmVuY2UgY29uc3Rfa2V5X3JlZmVyZW5jZTsKKworICAgICAgcmFuZ2VkX3Byb2JlX2ZuKHNpemVfdHlwZSBzaXplKQorICAgICAgeyBDb21iX1Byb2JlX0ZuOjpub3RpZnlfcmVzaXplZChzaXplKTsgfQorCisgICAgICByYW5nZWRfcHJvYmVfZm4oc2l6ZV90eXBlLCBjb25zdCBDb21iX1Byb2JlX0ZuJiByX2NvbWJfcHJvYmVfZm4pCisgICAgICA6IENvbWJfUHJvYmVfRm4ocl9jb21iX3Byb2JlX2ZuKQorICAgICAgeyB9CisKKyAgICAgIHJhbmdlZF9wcm9iZV9mbihzaXplX3R5cGUsIGNvbnN0IG51bGxfaGFzaF9mbiYsIAorCQkgICAgICBjb25zdCBDb21iX1Byb2JlX0ZuJiByX2NvbWJfcHJvYmVfZm4sIAorCQkgICAgICBjb25zdCBudWxsX3Byb2JlX2ZuJikKKyAgICAgIDogQ29tYl9Qcm9iZV9GbihyX2NvbWJfcHJvYmVfZm4pCisgICAgICB7IH0KKworICAgICAgdm9pZAorICAgICAgc3dhcChyYW5nZWRfcHJvYmVfZm4mIG90aGVyKQorICAgICAgeyBjb21iX3Byb2JlX2ZuX2Jhc2U6OnN3YXAob3RoZXIpOyB9CisgICAgfTsKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9zYW1wbGVfcHJvYmVfZm4uaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vc2FtcGxlX3Byb2JlX2ZuLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWQ2NDUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vc2FtcGxlX3Byb2JlX2ZuLmhwcApAQCAtMCwwICsxLDczIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBzYW1wbGVfcHJvYmVfZm4uaHBwCisgKiBDb250YWlucyBhIHNhbXBsZSBwcm9iZSBwb2xpY3kuCisgKi8KKworI2lmbmRlZiBQQl9EU19TQU1QTEVfUFJPQkVfRk5fSFBQCisjZGVmaW5lIFBCX0RTX1NBTVBMRV9QUk9CRV9GTl9IUFAKKworLy8gQSBzYW1wbGUgcHJvYmUgcG9saWN5LgorY2xhc3Mgc2FtcGxlX3Byb2JlX2ZuCit7CisKK3B1YmxpYzoKKworICAvLyBTaXplIHR5cGUuCisgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKKworcHVibGljOgorCisgIC8vIERlZmF1bHQgY29uc3RydWN0b3IuCisgIHNhbXBsZV9wcm9iZV9mbigpOworCisgIC8vIENvcHkgY29uc3RydWN0b3IuCisgIHNhbXBsZV9wcm9iZV9mbihjb25zdCBzYW1wbGVfcHJvYmVfZm4mIG90aGVyKTsKKworICAvLyBTd2FwcyBjb250ZW50LgorICBpbmxpbmUgdm9pZAorICBzd2FwKHNhbXBsZV9wcm9iZV9mbiYgb3RoZXIpOworCitwcm90ZWN0ZWQ6CisKKyAgLy8gUmV0dXJucyB0aGUgaS10aCBvZmZzZXQgZnJvbSB0aGUgaGFzaCB2YWx1ZSBvZiBzb21lIGtleSByX2tleS4KKyAgaW5saW5lIHNpemVfdHlwZQorICBvcGVyYXRvcigpKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXksIHNpemVfdHlwZSBpKSBjb25zdDsKKworfTsKKworI2VuZGlmIC8vICNpZm5kZWYgUEJfRFNfU0FNUExFX1BST0JFX0ZOX0hQUApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vc2FtcGxlX3JhbmdlX2hhc2hpbmcuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vc2FtcGxlX3JhbmdlX2hhc2hpbmcuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MTJlN2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9zYW1wbGVfcmFuZ2VfaGFzaGluZy5ocHAKQEAgLTAsMCArMSw3NyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgc2FtcGxlX3JhbmdlX2hhc2hpbmcuaHBwCisgKiBDb250YWlucyBhIHJhbmdlIGhhc2hpbmcgcG9saWN5LgorICovCisKKyNpZm5kZWYgUEJfRFNfU0FNUExFX1JBTkdFX0hBU0hJTkdfSFBQCisjZGVmaW5lIFBCX0RTX1NBTVBMRV9SQU5HRV9IQVNISU5HX0hQUAorCisvLyBBIHNhbXBsZSByYW5nZS1oYXNoaW5nIGZ1bmN0b3IuCitjbGFzcyBzYW1wbGVfcmFuZ2VfaGFzaGluZworeworCitwdWJsaWM6CisKKyAgLy8gU2l6ZSB0eXBlLgorICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CisKK3B1YmxpYzoKKworICAvLyBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICBzYW1wbGVfcmFuZ2VfaGFzaGluZygpOworCisgIC8vIENvcHkgY29uc3RydWN0b3IuCisgIHNhbXBsZV9yYW5nZV9oYXNoaW5nKGNvbnN0IHNhbXBsZV9yYW5nZV9oYXNoaW5nJiBvdGhlcik7CisKKyAgLy8gU3dhcHMgY29udGVudC4KKyAgaW5saW5lIHZvaWQKKyAgc3dhcChzYW1wbGVfcmFuZ2VfaGFzaGluZyYgb3RoZXIpOworCitwcm90ZWN0ZWQ6CisKKyAgLy8gTm90aWZpZXMgdGhlIHBvbGljeSBvYmplY3QgdGhhdCB0aGUgY29udGFpbmVyJ3MgX19zaXplIGhhcyBjaGFuZ2VkIHRvIHNpemUuCisgIHZvaWQKKyAgbm90aWZ5X3Jlc2l6ZWQoc2l6ZV90eXBlIHNpemUpOworCisgIC8vIFRyYW5zZm9ybXMgdGhlIF9faGFzaCB2YWx1ZSBoYXNoIGludG8gYSByYW5nZWQtaGFzaCB2YWx1ZS4KKyAgaW5saW5lIHNpemVfdHlwZQorICBvcGVyYXRvcigpKHNpemVfdHlwZSBoYXNoKSBjb25zdDsKKworfTsKKworI2VuZGlmIC8vICNpZm5kZWYgUEJfRFNfU0FNUExFX1JBTkdFX0hBU0hJTkdfSFBQCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9zYW1wbGVfcmFuZ2VkX2hhc2hfZm4uaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vc2FtcGxlX3JhbmdlZF9oYXNoX2ZuLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTIwMjMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vc2FtcGxlX3JhbmdlZF9oYXNoX2ZuLmhwcApAQCAtMCwwICsxLDc3IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBzYW1wbGVfcmFuZ2VkX2hhc2hfZm4uaHBwCisgKiBDb250YWlucyBhIHJhbmdlZCBoYXNoIHBvbGljeS4KKyAqLworCisjaWZuZGVmIFBCX0RTX1NBTVBMRV9SQU5HRURfSEFTSF9GTl9IUFAKKyNkZWZpbmUgUEJfRFNfU0FNUExFX1JBTkdFRF9IQVNIX0ZOX0hQUAorCisvLyBBIHNhbXBsZSByYW5nZWQtaGFzaCBmdW5jdG9yLgorY2xhc3Mgc2FtcGxlX3JhbmdlZF9oYXNoX2ZuCit7CisKK3B1YmxpYzoKKworICAvLyBTaXplIHR5cGUuCisgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKKworcHVibGljOgorCisgIC8vIERlZmF1bHQgY29uc3RydWN0b3IuCisgIHNhbXBsZV9yYW5nZWRfaGFzaF9mbigpOworCisgIC8vIENvcHkgY29uc3RydWN0b3IuCisgIHNhbXBsZV9yYW5nZWRfaGFzaF9mbihjb25zdCBzYW1wbGVfcmFuZ2VkX2hhc2hfZm4mIG90aGVyKTsKKworICAvLyBTd2FwcyBjb250ZW50LgorICBpbmxpbmUgdm9pZAorICBzd2FwKHNhbXBsZV9yYW5nZWRfaGFzaF9mbiYgb3RoZXIpOworCitwcm90ZWN0ZWQ6CisKKyAgLy8gTm90aWZpZXMgdGhlIHBvbGljeSBvYmplY3QgdGhhdCB0aGUgY29udGFpbmVyJ3MgX19zaXplIGhhcyBjaGFuZ2VkIHRvIHNpemUuCisgIHZvaWQKKyAgbm90aWZ5X3Jlc2l6ZWQoc2l6ZV90eXBlIHNpemUpOworCisgIC8vIFRyYW5zZm9ybXMgcl9rZXkgaW50byBhIHBvc2l0aW9uIHdpdGhpbiB0aGUgdGFibGUuCisgIGlubGluZSBzaXplX3R5cGUKKyAgb3BlcmF0b3IoKShjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5KSBjb25zdDsKKworfTsKKworI2VuZGlmIC8vICNpZm5kZWYgUEJfRFNfU0FNUExFX1JBTkdFRF9IQVNIX0ZOX0hQUApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vc2FtcGxlX3JhbmdlZF9wcm9iZV9mbi5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9zYW1wbGVfcmFuZ2VkX3Byb2JlX2ZuLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTVmMTA4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vc2FtcGxlX3JhbmdlZF9wcm9iZV9mbi5ocHAKQEAgLTAsMCArMSw3NyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgc2FtcGxlX3JhbmdlZF9wcm9iZV9mbi5ocHAKKyAqIENvbnRhaW5zIGEgcmFuZ2VkIHByb2JlIHBvbGljeS4KKyAqLworCisjaWZuZGVmIFBCX0RTX1NBTVBMRV9SQU5HRURfUFJPQkVfRk5fSFBQCisjZGVmaW5lIFBCX0RTX1NBTVBMRV9SQU5HRURfUFJPQkVfRk5fSFBQCisKKy8vIEEgc2FtcGxlIHJhbmdlZC1wcm9iZSBmdW5jdG9yLgorY2xhc3Mgc2FtcGxlX3JhbmdlZF9wcm9iZV9mbgoreworCitwdWJsaWM6CisKKyAgLy8gU2l6ZSB0eXBlLgorICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CisKK3B1YmxpYzoKKworICAvLyBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICBzYW1wbGVfcmFuZ2VkX3Byb2JlX2ZuKCk7CisKKyAgLy8gQ29weSBjb25zdHJ1Y3Rvci4KKyAgc2FtcGxlX3JhbmdlZF9wcm9iZV9mbihjb25zdCBzYW1wbGVfcmFuZ2VkX3Byb2JlX2ZuJiBvdGhlcik7CisKKyAgLy8gU3dhcHMgY29udGVudC4KKyAgaW5saW5lIHZvaWQKKyAgc3dhcChzYW1wbGVfcmFuZ2VkX3Byb2JlX2ZuJiBvdGhlcik7CisKK3Byb3RlY3RlZDoKKworICAvLyBOb3RpZmllcyB0aGUgcG9saWN5IG9iamVjdCB0aGF0IHRoZSBjb250YWluZXIncyBfX3NpemUgaGFzIGNoYW5nZWQgdG8gc2l6ZS4KKyAgdm9pZAorICBub3RpZnlfcmVzaXplZChzaXplX3R5cGUgc2l6ZSk7CisKKyAgLy8gVHJhbnNmb3JtcyB0aGUgY29uc3Qga2V5IHJlZmVyZW5jZSByX2tleSBpbnRvIHRoZSBpLXRoIHBvc2l0aW9uIHdpdGhpbiB0aGUgdGFibGUuIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmb3IgZWFjaCBjb2xsaXNpb24gd2l0aGluIHRoZSBwcm9iZSBzZXF1ZW5jZS4KKyAgaW5saW5lIHNpemVfdHlwZQorICBvcGVyYXRvcigpKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXksIHNpemVfdCBoYXNoLCBzaXplX3R5cGUgaSkgY29uc3Q7CisKK307CisKKyNlbmRpZiAvLyAjaWZuZGVmIFBCX0RTX1NBTVBMRV9SQU5HRURfUFJPQkVfRk5fSFBQCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vY29uc3RfaXRlcmF0b3IuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2NvbnN0X2l0ZXJhdG9yLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTU1ZGYxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2NvbnN0X2l0ZXJhdG9yLmhwcApAQCAtMCwwICsxLDE2MiBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY29uc3RfaXRlcmF0b3IuaHBwCisgKiBDb250YWlucyBhbiBpdGVyYXRvciBjbGFzcyByZXR1cm5lZCBieSB0aGUgdGFibGUncyBjb25zdCBmaW5kIGFuZCBpbnNlcnQKKyAqICAgICBtZXRob2RzLgorICovCisKKyNpZm5kZWYgUEJfRFNfTEVGVF9DSElMRF9ORVhUX1NJQkxJTkdfSEVBUF9DT05TVF9JVEVSQVRPUl9IUFAKKyNkZWZpbmUgUEJfRFNfTEVGVF9DSElMRF9ORVhUX1NJQkxJTkdfSEVBUF9DT05TVF9JVEVSQVRPUl9IUFAKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vY29uc3RfcG9pbnRfaXRlcmF0b3IuaHBwPgorI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDCQkJCQkJXAorICAgIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfY29uc3RfaXRlcmF0b3JfPE5vZGUsIEFsbG9jYXRvcj4KKworI2RlZmluZSBQQl9EU19CQVNFX0NfREVDCQkJCQkJXAorICAgIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfbm9kZV9jb25zdF9wb2ludF9pdGVyYXRvcl88Tm9kZSwgQWxsb2NhdG9yPgorCisgICAgLy8gQ29uc3QgcG9pbnQtdHlwZSBpdGVyYXRvci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlLCBjbGFzcyBBbGxvY2F0b3I+CisgICAgY2xhc3MgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF9jb25zdF9pdGVyYXRvcl8gOiBwdWJsaWMgUEJfRFNfQkFTRV9DX0RFQworICAgIHsKKworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIFBCX0RTX0JBU0VfQ19ERUM6Om5vZGVfcG9pbnRlciBub2RlX3BvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYgUEJfRFNfQkFTRV9DX0RFQyBiYXNlX3R5cGU7CisKKyAgICBwdWJsaWM6CisKKyAgICAgIC8vIENhdGVnb3J5LgorICAgICAgdHlwZWRlZiBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OworCisgICAgICAvLyBEaWZmZXJlbmNlIHR5cGUuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKKworICAgICAgLy8gSXRlcmF0b3IncyB2YWx1ZSB0eXBlLgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKworICAgICAgLy8gSXRlcmF0b3IncyBwb2ludGVyIHR5cGUuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6cG9pbnRlciBwb2ludGVyOworCisgICAgICAvLyBJdGVyYXRvcidzIGNvbnN0IHBvaW50ZXIgdHlwZS4KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CisKKyAgICAgIC8vIEl0ZXJhdG9yJ3MgcmVmZXJlbmNlIHR5cGUuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKKworICAgICAgLy8gSXRlcmF0b3IncyBjb25zdCByZWZlcmVuY2UgdHlwZS4KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOworCisgICAgcHVibGljOgorCisgICAgICBpbmxpbmUKKyAgICAgIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfY29uc3RfaXRlcmF0b3JfKG5vZGVfcG9pbnRlciBwX25kKSA6IGJhc2VfdHlwZShwX25kKQorICAgICAgeyB9CisKKyAgICAgIC8vIERlZmF1bHQgY29uc3RydWN0b3IuCisgICAgICBpbmxpbmUKKyAgICAgIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfY29uc3RfaXRlcmF0b3JfKCkKKyAgICAgIHsgfQorCisgICAgICAvLyBDb3B5IGNvbnN0cnVjdG9yLgorICAgICAgaW5saW5lCisgICAgICBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwX2NvbnN0X2l0ZXJhdG9yXyhjb25zdCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpIDogYmFzZV90eXBlKG90aGVyKQorICAgICAgeyB9CisKKyAgICAgIC8vIENvbXBhcmVzIGNvbnRlbnQgdG8gYSBkaWZmZXJlbnQgaXRlcmF0b3Igb2JqZWN0LgorICAgICAgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKSBjb25zdAorICAgICAgeyByZXR1cm4gKGJhc2VfdHlwZTo6bV9wX25kID09IG90aGVyLm1fcF9uZCk7IH0KKworICAgICAgLy8gQ29tcGFyZXMgY29udGVudCAobmVnYXRpdmVseSkgdG8gYSBkaWZmZXJlbnQgaXRlcmF0b3Igb2JqZWN0LgorICAgICAgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yIT0oY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKSBjb25zdAorICAgICAgeyByZXR1cm4gKGJhc2VfdHlwZTo6bV9wX25kICE9IG90aGVyLm1fcF9uZCk7IH0KKworICAgICAgaW5saW5lIFBCX0RTX0NMQVNTX0NfREVDJiAKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChiYXNlX3R5cGU6Om1fcF9uZCAhPSBOVUxMKTsKKwlpbmMoKTsKKwlyZXR1cm4gKCp0aGlzKTsKKyAgICAgIH0KKworICAgICAgaW5saW5lIFBCX0RTX0NMQVNTX0NfREVDCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsKKwlQQl9EU19DTEFTU19DX0RFQyByZXRfaXQoYmFzZV90eXBlOjptX3BfbmQpOworCW9wZXJhdG9yKysoKTsKKwlyZXR1cm4gKHJldF9pdCk7CisgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgdm9pZAorICAgICAgaW5jKCkKKyAgICAgIHsKKwlpZiAoYmFzZV90eXBlOjptX3BfbmQtPm1fcF9uZXh0X3NpYmxpbmcgIT0gTlVMTCkKKwkgIHsKKwkgICAgYmFzZV90eXBlOjptX3BfbmQgPSBiYXNlX3R5cGU6Om1fcF9uZC0+bV9wX25leHRfc2libGluZzsKKwkgICAgd2hpbGUgKGJhc2VfdHlwZTo6bV9wX25kLT5tX3BfbF9jaGlsZCAhPSBOVUxMKQorCSAgICAgIGJhc2VfdHlwZTo6bV9wX25kID0gYmFzZV90eXBlOjptX3BfbmQtPm1fcF9sX2NoaWxkOworCSAgICByZXR1cm47CisJICB9CisKKwl3aGlsZSAodHJ1ZSkKKwkgIHsKKwkgICAgbm9kZV9wb2ludGVyIHBfbmV4dCA9IGJhc2VfdHlwZTo6bV9wX25kOworCSAgICBiYXNlX3R5cGU6Om1fcF9uZCA9IGJhc2VfdHlwZTo6bV9wX25kLT5tX3BfcHJldl9vcl9wYXJlbnQ7CisJICAgIGlmIChiYXNlX3R5cGU6Om1fcF9uZCA9PSBOVUxMIHx8IGJhc2VfdHlwZTo6bV9wX25kLT5tX3BfbF9jaGlsZCA9PSBwX25leHQpCisJICAgICAgcmV0dXJuOworCSAgfQorICAgICAgfQorICAgIH07CisKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworI3VuZGVmIFBCX0RTX0JBU0VfQ19ERUMKKworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2NvbnN0X3BvaW50X2l0ZXJhdG9yLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9jb25zdF9wb2ludF9pdGVyYXRvci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q2ODI1MgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9jb25zdF9wb2ludF9pdGVyYXRvci5ocHAKQEAgLTAsMCArMSwxNTQgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGNvbnN0X3BvaW50X2l0ZXJhdG9yLmhwcAorICogQ29udGFpbnMgYW4gaXRlcmF0b3IgY2xhc3MgcmV0dXJuZWQgYnkgdGhlIHRhYmxlJ3MgY29uc3QgZmluZCBhbmQgaW5zZXJ0CisgKiAgICAgbWV0aG9kcy4KKyAqLworCisjaWZuZGVmIFBCX0RTX0xFRlRfQ0hJTERfTkVYVF9TSUJMSU5HX0hFQVBfQ09OU1RfRklORF9JVEVSQVRPUl9IUFAKKyNkZWZpbmUgUEJfRFNfTEVGVF9DSElMRF9ORVhUX1NJQkxJTkdfSEVBUF9DT05TVF9GSU5EX0lURVJBVE9SX0hQUAorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL3RhZ19hbmRfdHJhaXQuaHBwPgorI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworCisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDCQkJXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGUsIGNsYXNzIEFsbG9jYXRvcj4KKworI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBcCisgICAgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF9ub2RlX2NvbnN0X3BvaW50X2l0ZXJhdG9yXzxOb2RlLCBBbGxvY2F0b3I+CisKKyAgICAvLyBDb25zdCBwb2ludC10eXBlIGl0ZXJhdG9yLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGUsIGNsYXNzIEFsbG9jYXRvcj4KKyAgICBjbGFzcyBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwX25vZGVfY29uc3RfcG9pbnRfaXRlcmF0b3JfCisgICAgeworCisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxOb2RlPjo6b3RoZXI6OnBvaW50ZXIgbm9kZV9wb2ludGVyOworCisgICAgcHVibGljOgorCisgICAgICAvLyBDYXRlZ29yeS4KKyAgICAgIHR5cGVkZWYgdHJpdmlhbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisKKyAgICAgIC8vIERpZmZlcmVuY2UgdHlwZS4KKyAgICAgIHR5cGVkZWYgdHJpdmlhbF9pdGVyYXRvcl9kaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworCisgICAgICAvLyBJdGVyYXRvcidzIHZhbHVlIHR5cGUuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIE5vZGU6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKworICAgICAgLy8gSXRlcmF0b3IncyBwb2ludGVyIHR5cGUuCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKwl2YWx1ZV90eXBlPjo6b3RoZXI6OnBvaW50ZXIKKyAgICAgIHBvaW50ZXI7CisKKyAgICAgIC8vIEl0ZXJhdG9yJ3MgY29uc3QgcG9pbnRlciB0eXBlLgorICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8CisJdmFsdWVfdHlwZT46Om90aGVyOjpjb25zdF9wb2ludGVyCisgICAgICBjb25zdF9wb2ludGVyOworCisgICAgICAvLyBJdGVyYXRvcidzIHJlZmVyZW5jZSB0eXBlLgorICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8CisJdmFsdWVfdHlwZT46Om90aGVyOjpyZWZlcmVuY2UKKyAgICAgIHJlZmVyZW5jZTsKKworICAgICAgLy8gSXRlcmF0b3IncyBjb25zdCByZWZlcmVuY2UgdHlwZS4KKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCXZhbHVlX3R5cGU+OjpvdGhlcjo6Y29uc3RfcmVmZXJlbmNlCisgICAgICBjb25zdF9yZWZlcmVuY2U7CisKKyAgICBwdWJsaWM6CisKKyAgICAgIGlubGluZQorICAgICAgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF9ub2RlX2NvbnN0X3BvaW50X2l0ZXJhdG9yXyhub2RlX3BvaW50ZXIgcF9uZCkgOiBtX3BfbmQocF9uZCkKKyAgICAgIHsgfQorCisgICAgICAvLyBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICAgICAgaW5saW5lCisgICAgICBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwX25vZGVfY29uc3RfcG9pbnRfaXRlcmF0b3JfKCkgOiBtX3BfbmQoTlVMTCkKKyAgICAgIHsgfQorCisgICAgICAvLyBDb3B5IGNvbnN0cnVjdG9yLgorICAgICAgaW5saW5lCisgICAgICBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwX25vZGVfY29uc3RfcG9pbnRfaXRlcmF0b3JfKGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikgOiBtX3BfbmQob3RoZXIubV9wX25kKQorICAgICAgeyB9CisKKyAgICAgIC8vIEFjY2Vzcy4KKyAgICAgIGlubGluZSBjb25zdF9wb2ludGVyCisgICAgICBvcGVyYXRvci0+KCkgY29uc3QKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9wX25kICE9IE5VTEwpOworCXJldHVybiAmbV9wX25kLT5tX3ZhbHVlOworICAgICAgfQorCisgICAgICAvLyBBY2Nlc3MuCisgICAgICBpbmxpbmUgY29uc3RfcmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3BfbmQgIT0gTlVMTCk7CisJcmV0dXJuIG1fcF9uZC0+bV92YWx1ZTsKKyAgICAgIH0KKworICAgICAgLy8gQ29tcGFyZXMgY29udGVudCB0byBhIGRpZmZlcmVudCBpdGVyYXRvciBvYmplY3QuCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpIGNvbnN0CisgICAgICB7IHJldHVybiBtX3BfbmQgPT0gb3RoZXIubV9wX25kOyB9CisKKyAgICAgIC8vIENvbXBhcmVzIGNvbnRlbnQgKG5lZ2F0aXZlbHkpIHRvIGEgZGlmZmVyZW50IGl0ZXJhdG9yIG9iamVjdC4KKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvciE9KGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikgY29uc3QKKyAgICAgIHsgcmV0dXJuIG1fcF9uZCAhPSBvdGhlci5tX3BfbmQ7IH0KKworICAgIHB1YmxpYzoKKyAgICAgIG5vZGVfcG9pbnRlciBtX3BfbmQ7CisgICAgfTsKKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMDU3MjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxNTIgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGNvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX2FsbG9jYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OnNfbm9kZV9hbGxvY2F0b3I7CisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9fdGhyb3dfY29waWVzX3QKK1BCX0RTX0NMQVNTX0NfREVDOjpzX25vX3Rocm93X2NvcGllc19pbmQ7CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXygpIDoKKyAgbV9wX3Jvb3QoTlVMTCksCisgIG1fc2l6ZSgwKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfKGNvbnN0IENtcF9GbiYgcl9jbXBfZm4pIDoKKyAgQ21wX0ZuKHJfY21wX2ZuKSwKKyAgbV9wX3Jvb3QoTlVMTCksCisgIG1fc2l6ZSgwKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfKGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikgCis6IENtcF9GbihvdGhlciksIG1fcF9yb290KE5VTEwpLCBtX3NpemUoMCkKK3sKKyAgbV9zaXplID0gb3RoZXIubV9zaXplOworICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpOykKKyAgbV9wX3Jvb3QgPSByZWN1cnNpdmVfY29weV9ub2RlKG90aGVyLm1fcF9yb290KTsKKyAgbV9zaXplID0gb3RoZXIubV9zaXplOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspCisgIHZhbHVlX3N3YXAob3RoZXIpOworICBzdGQ6OnN3YXAoKENtcF9GbiYgKSgqdGhpcyksIChDbXBfRm4mIClvdGhlcik7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3ZhbHVlX3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBzdGQ6OnN3YXAobV9wX3Jvb3QsIG90aGVyLm1fcF9yb290KTsKKyAgc3RkOjpzd2FwKG1fc2l6ZSwgb3RoZXIubV9zaXplKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK35sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXygpCit7CisgIGNsZWFyKCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9wb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6CityZWN1cnNpdmVfY29weV9ub2RlKGNvbnN0X25vZGVfcG9pbnRlciBwX25kKQoreworICBpZiAocF9uZCA9PSBOVUxMKQorICAgIHJldHVybiAoTlVMTCk7CisKKyAgbm9kZV9wb2ludGVyIHBfcmV0ID0gc19ub2RlX2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsKKworICBfX3RyeQorICAgIHsKKyAgICAgIG5ldyAocF9yZXQpIG5vZGUoKnBfbmQpOworICAgIH0KKyAgX19jYXRjaCguLi4pCisgICAgeworICAgICAgc19ub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKHBfcmV0LCAxKTsKKyAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworICAgIH0KKworICBwX3JldC0+bV9wX2xfY2hpbGQgPSBwX3JldC0+bV9wX25leHRfc2libGluZyA9CisgICAgcF9yZXQtPm1fcF9wcmV2X29yX3BhcmVudCA9IE5VTEw7CisKKyAgX190cnkKKyAgICB7CisgICAgICBwX3JldC0+bV9wX2xfY2hpbGQgPSByZWN1cnNpdmVfY29weV9ub2RlKHBfbmQtPm1fcF9sX2NoaWxkKTsKKyAgICAgIHBfcmV0LT5tX3BfbmV4dF9zaWJsaW5nID0gcmVjdXJzaXZlX2NvcHlfbm9kZShwX25kLT5tX3BfbmV4dF9zaWJsaW5nKTsKKyAgICB9CisgIF9fY2F0Y2goLi4uKQorICAgIHsKKyAgICAgIGNsZWFyX2ltcChwX3JldCk7CisgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAgICB9CisKKyAgaWYgKHBfcmV0LT5tX3BfbF9jaGlsZCAhPSBOVUxMKQorICAgIHBfcmV0LT5tX3BfbF9jaGlsZC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9yZXQ7CisKKyAgaWYgKHBfcmV0LT5tX3BfbmV4dF9zaWJsaW5nICE9IE5VTEwpCisgICAgcF9yZXQtPm1fcF9uZXh0X3NpYmxpbmctPm1fcF9wcmV2X29yX3BhcmVudCA9CisgICAgICBwX25kLT5tX3BfbmV4dF9zaWJsaW5nLT5tX3BfcHJldl9vcl9wYXJlbnQgPT0gcF9uZCA/IHBfcmV0IDogTlVMTDsKKworICByZXR1cm4gcF9yZXQ7Cit9CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9kZWJ1Z19mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9kZWJ1Z19mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Njg3MWFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2RlYnVnX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTQxIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBkZWJ1Z19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfLgorICovCisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X3ZhbGlkKCkgY29uc3QKK3sKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF9yb290ID09IE5VTEwgfHwgbV9wX3Jvb3QtPm1fcF9wcmV2X29yX3BhcmVudCA9PSBOVUxMKTsKKworICBpZiAobV9wX3Jvb3QgIT0gTlVMTCkKKyAgICBhc3NlcnRfbm9kZV9jb25zaXN0ZW50KG1fcF9yb290LCBTaW5nbGVfTGlua19Sb290cyk7CisgIGFzc2VydF9zaXplKCk7CisgIGFzc2VydF9pdGVyYXRvcnMoKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9ub2RlX2NvbnNpc3RlbnQoY29uc3Rfbm9kZV9wb2ludGVyIHBfbmQsIGJvb2wgc2luZ2xlX2xpbmspIGNvbnN0Cit7CisgIGlmIChwX25kID09IE5VTEwpCisgICAgcmV0dXJuOworCisgIGFzc2VydF9ub2RlX2NvbnNpc3RlbnQocF9uZC0+bV9wX2xfY2hpbGQsIGZhbHNlKTsKKyAgYXNzZXJ0X25vZGVfY29uc2lzdGVudChwX25kLT5tX3BfbmV4dF9zaWJsaW5nLCBzaW5nbGVfbGluayk7CisKKyAgaWYgKHNpbmdsZV9saW5rKQorICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQgPT0gTlVMTCk7CisgIGVsc2UgaWYgKHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgIT0gTlVMTCkKKyAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV9wX25leHRfc2libGluZy0+bV9wX3ByZXZfb3JfcGFyZW50ID09IHBfbmQpOworCisgIGlmIChwX25kLT5tX3BfbF9jaGlsZCA9PSBOVUxMKQorICAgIHJldHVybjsKKworICBjb25zdF9ub2RlX3BvaW50ZXIgcF9jaGlsZCA9IHBfbmQtPm1fcF9sX2NoaWxkOworICB3aGlsZSAocF9jaGlsZCAhPSBOVUxMKQorICAgIHsKKyAgICAgIGNvbnN0X25vZGVfcG9pbnRlciBwX25leHRfY2hpbGQgPSBwX2NoaWxkLT5tX3BfbmV4dF9zaWJsaW5nOworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKCFDbXBfRm46Om9wZXJhdG9yKCkocF9uZC0+bV92YWx1ZSwgcF9jaGlsZC0+bV92YWx1ZSkpOworICAgICAgcF9jaGlsZCA9IHBfbmV4dF9jaGlsZDsKKyAgICB9CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kLT5tX3BfbF9jaGlsZC0+bV9wX3ByZXZfb3JfcGFyZW50ID09IHBfbmQpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X2l0ZXJhdG9ycygpIGNvbnN0Cit7CisgIGNvbnN0IHNpemVfdHlwZSBjYWxjX3NpemUgPSBzdGQ6OmRpc3RhbmNlKGJlZ2luKCksIGVuZCgpKTsKKyAgaWYgKGNhbGNfc2l6ZSA9PSBzaXplKCkpCisgICAgcmV0dXJuOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoMCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfc2l6ZSgpIGNvbnN0Cit7CisgIGlmIChzaXplX2Zyb21fbm9kZShtX3Bfcm9vdCkgPT0gbV9zaXplKQorICAgIHJldHVybjsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKDApOworfQorCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc2l6ZV91bmRlcl9ub2RlKGNvbnN0X25vZGVfcG9pbnRlciBwX25kKQoreyByZXR1cm4gMSArIHNpemVfZnJvbV9ub2RlKHBfbmQtPm1fcF9sX2NoaWxkKTsgfQorCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc2l6ZV9mcm9tX25vZGUoY29uc3Rfbm9kZV9wb2ludGVyIHBfbmQpCit7CisgIHNpemVfdHlwZSByZXQgPSAwOworICB3aGlsZSAocF9uZCAhPSBOVUxMKQorICAgIHsKKyAgICAgIHJldCArPSAxICsgc2l6ZV9mcm9tX25vZGUocF9uZC0+bV9wX2xfY2hpbGQpOworICAgICAgcF9uZCA9IHBfbmQtPm1fcF9uZXh0X3NpYmxpbmc7CisgICAgfQorICByZXR1cm4gcmV0OworfQorCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZGVncmVlKGNvbnN0X25vZGVfcG9pbnRlciBwX25kKQoreworICBzaXplX3R5cGUgcmV0ID0gMDsKKyAgY29uc3Rfbm9kZV9wb2ludGVyIHBfY2hpbGQgPSBwX25kLT5tX3BfbF9jaGlsZDsKKyAgd2hpbGUgKHBfY2hpbGQgIT0gTlVMTCkKKyAgICB7CisgICAgICArK3JldDsKKyAgICAgIHBfY2hpbGQgPSBwX2NoaWxkLT5tX3BfbmV4dF9zaWJsaW5nOworICAgIH0KKyAgcmV0dXJuIHJldDsKK30KKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2VyYXNlX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2VyYXNlX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYTA5ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vZXJhc2VfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxNTAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGVyYXNlX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NsZWFyKCkKK3sKKyAgY2xlYXJfaW1wKG1fcF9yb290KTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fc2l6ZSA9PSAwKTsKKyAgbV9wX3Jvb3QgPSBOVUxMOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2FjdHVhbF9lcmFzZV9ub2RlKG5vZGVfcG9pbnRlciBwX25kKQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9zaXplID4gMCk7CisgIC0tbV9zaXplOworICBwX25kLT5+bm9kZSgpOworICBzX25vZGVfYWxsb2NhdG9yLmRlYWxsb2NhdGUocF9uZCwgMSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitjbGVhcl9pbXAobm9kZV9wb2ludGVyIHBfbmQpCit7CisgIHdoaWxlIChwX25kICE9IE5VTEwpCisgICAgeworICAgICAgY2xlYXJfaW1wKHBfbmQtPm1fcF9sX2NoaWxkKTsKKyAgICAgIG5vZGVfcG9pbnRlciBwX25leHQgPSBwX25kLT5tX3BfbmV4dF9zaWJsaW5nOworICAgICAgYWN0dWFsX2VyYXNlX25vZGUocF9uZCk7CisgICAgICBwX25kID0gcF9uZXh0OworICAgIH0KK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3RvX2xpbmtlZF9saXN0KCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIG5vZGVfcG9pbnRlciBwX2N1ciA9IG1fcF9yb290OworICB3aGlsZSAocF9jdXIgIT0gTlVMTCkKKyAgICBpZiAocF9jdXItPm1fcF9sX2NoaWxkICE9IE5VTEwpCisgICAgICB7CisJbm9kZV9wb2ludGVyIHBfY2hpbGRfbmV4dCA9IHBfY3VyLT5tX3BfbF9jaGlsZC0+bV9wX25leHRfc2libGluZzsKKwlwX2N1ci0+bV9wX2xfY2hpbGQtPm1fcF9uZXh0X3NpYmxpbmcgPSBwX2N1ci0+bV9wX25leHRfc2libGluZzsKKwlwX2N1ci0+bV9wX25leHRfc2libGluZyA9IHBfY3VyLT5tX3BfbF9jaGlsZDsKKwlwX2N1ci0+bV9wX2xfY2hpbGQgPSBwX2NoaWxkX25leHQ7CisgICAgICB9CisgICAgZWxzZQorICAgICAgcF9jdXIgPSBwX2N1ci0+bV9wX25leHRfc2libGluZzsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgIGNvbnN0X25vZGVfcG9pbnRlciBwX2NvdW50ZXIgPSBtX3Bfcm9vdDsKKyAgc2l6ZV90eXBlIGNvdW50ID0gMDsKKyAgd2hpbGUgKHBfY291bnRlciAhPSBOVUxMKQorICAgIHsKKyAgICAgICsrY291bnQ7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9jb3VudGVyLT5tX3BfbF9jaGlsZCA9PSBOVUxMKTsKKyAgICAgIHBfY291bnRlciA9IHBfY291bnRlci0+bV9wX25leHRfc2libGluZzsKKyAgICB9CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChjb3VudCA9PSBtX3NpemUpOworI2VuZGlmIAorfQorCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgUHJlZD4KK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3BydW5lKFByZWQgcHJlZCkKK3sKKyAgbm9kZV9wb2ludGVyIHBfY3VyID0gbV9wX3Jvb3Q7CisgIG1fcF9yb290ID0gTlVMTDsKKyAgbm9kZV9wb2ludGVyIHBfb3V0ID0gTlVMTDsKKyAgd2hpbGUgKHBfY3VyICE9IE5VTEwpCisgICAgeworICAgICAgbm9kZV9wb2ludGVyIHBfbmV4dCA9IHBfY3VyLT5tX3BfbmV4dF9zaWJsaW5nOworICAgICAgaWYgKHByZWQocF9jdXItPm1fdmFsdWUpKQorICAgICAgICB7CisJICBwX2N1ci0+bV9wX25leHRfc2libGluZyA9IHBfb3V0OworCSAgaWYgKHBfb3V0ICE9IE5VTEwpCisJICAgIHBfb3V0LT5tX3BfcHJldl9vcl9wYXJlbnQgPSBwX2N1cjsKKwkgIHBfb3V0ID0gcF9jdXI7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworCSAgcF9jdXItPm1fcF9uZXh0X3NpYmxpbmcgPSBtX3Bfcm9vdDsKKwkgIGlmIChtX3Bfcm9vdCAhPSBOVUxMKQorCSAgICBtX3Bfcm9vdC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9jdXI7CisJICBtX3Bfcm9vdCA9IHBfY3VyOworICAgICAgICB9CisgICAgICBwX2N1ciA9IHBfbmV4dDsKKyAgICB9CisgIHJldHVybiBwX291dDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2J1YmJsZV90b190b3Aobm9kZV9wb2ludGVyIHBfbmQpCit7CisgIG5vZGVfcG9pbnRlciBwX3BhcmVudCA9IHBhcmVudChwX25kKTsKKyAgd2hpbGUgKHBfcGFyZW50ICE9IE5VTEwpCisgICAgeworICAgICAgc3dhcF93aXRoX3BhcmVudChwX25kLCBwX3BhcmVudCk7CisgICAgICBwX3BhcmVudCA9IHBhcmVudChwX25kKTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9pbmZvX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2luZm9fZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVlNjU2MQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9pbmZvX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNjQgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGluZm9fZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIGJvb2wKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VtcHR5KCkgY29uc3QKK3sKKyAgcmV0dXJuIChtX3NpemUgPT0gMCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc2l6ZSgpIGNvbnN0Cit7CisgIHJldHVybiAobV9zaXplKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CittYXhfc2l6ZSgpIGNvbnN0Cit7CisgIHJldHVybiAoc19ub2RlX2FsbG9jYXRvci5tYXhfc2l6ZSgpKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2luc2VydF9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9pbnNlcnRfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI2Y2NkMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9pbnNlcnRfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxNzUgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGluc2VydF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X25ld19ub2RlX2Zvcl9pbnNlcnQoY29uc3RfcmVmZXJlbmNlIHJfdmFsKQoreworICByZXR1cm4gZ2V0X25ld19ub2RlX2Zvcl9pbnNlcnQocl92YWwsIHNfbm9fdGhyb3dfY29waWVzX2luZCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X25ld19ub2RlX2Zvcl9pbnNlcnQoY29uc3RfcmVmZXJlbmNlIHJfdmFsLCBmYWxzZV90eXBlKQoreworICBub2RlX3BvaW50ZXIgcF9uZXdfbmQgPSBzX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOworCisgIGNvbmRfZGVhbHRvcl90IGNvbmQocF9uZXdfbmQpOworCisgIG5ldyAoY29uc3RfY2FzdDx2b2lkKiA+KAorCQkJICBzdGF0aWNfY2FzdDxjb25zdCB2b2lkKiA+KCZwX25ld19uZC0+bV92YWx1ZSkpKQorICAgIHR5cGVuYW1lIG5vZGU6OnZhbHVlX3R5cGUocl92YWwpOworCisgIGNvbmQuc2V0X25vX2FjdGlvbigpOworCisgICsrbV9zaXplOworCisgIHJldHVybiAocF9uZXdfbmQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9uZXdfbm9kZV9mb3JfaW5zZXJ0KGNvbnN0X3JlZmVyZW5jZSByX3ZhbCwgdHJ1ZV90eXBlKQoreworICBub2RlX3BvaW50ZXIgcF9uZXdfbmQgPSBzX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOworCisgIG5ldyAoY29uc3RfY2FzdDx2b2lkKiA+KAorCQkJICBzdGF0aWNfY2FzdDxjb25zdCB2b2lkKiA+KCZwX25ld19uZC0+bV92YWx1ZSkpKQorICAgIHR5cGVuYW1lIG5vZGU6OnZhbHVlX3R5cGUocl92YWwpOworCisgICsrbV9zaXplOworCisgIHJldHVybiAocF9uZXdfbmQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK21ha2VfY2hpbGRfb2Yobm9kZV9wb2ludGVyIHBfbmQsIG5vZGVfcG9pbnRlciBwX25ld19wYXJlbnQpCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kICE9IE5VTEwpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZXdfcGFyZW50ICE9IE5VTEwpOworCisgIHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgPSBwX25ld19wYXJlbnQtPm1fcF9sX2NoaWxkOworCisgIGlmIChwX25ld19wYXJlbnQtPm1fcF9sX2NoaWxkICE9IE5VTEwpCisgICAgcF9uZXdfcGFyZW50LT5tX3BfbF9jaGlsZC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9uZDsKKworICBwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQgPSBwX25ld19wYXJlbnQ7CisKKyAgcF9uZXdfcGFyZW50LT5tX3BfbF9jaGlsZCA9IHBfbmQ7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcGFyZW50KG5vZGVfcG9pbnRlciBwX25kKQoreworICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICBub2RlX3BvaW50ZXIgcF9wb3QgPSBwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQ7CisKKyAgICAgIGlmIChwX3BvdCA9PSBOVUxMIHx8IHBfcG90LT5tX3BfbF9jaGlsZCA9PSBwX25kKQorCXJldHVybiBwX3BvdDsKKworICAgICAgcF9uZCA9IHBfcG90OworICAgIH0KK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citzd2FwX3dpdGhfcGFyZW50KG5vZGVfcG9pbnRlciBwX25kLCBub2RlX3BvaW50ZXIgcF9wYXJlbnQpCit7CisgIGlmIChwX3BhcmVudCA9PSBtX3Bfcm9vdCkKKyAgICBtX3Bfcm9vdCA9IHBfbmQ7CisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQgIT0gTlVMTCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3BhcmVudCAhPSBOVUxMKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBhcmVudChwX25kKSA9PSBwX3BhcmVudCk7CisKKyAgY29uc3QgYm9vbCBuZF9kaXJlY3RfY2hpbGQgPSBwX3BhcmVudC0+bV9wX2xfY2hpbGQgPT0gcF9uZDsKKyAgY29uc3QgYm9vbCBwYXJlbnRfcm9vdCA9IHBfcGFyZW50LT5tX3BfcHJldl9vcl9wYXJlbnQgPT0gTlVMTDsKKyAgY29uc3QgYm9vbCBwYXJlbnRfZGlyZWN0X2NoaWxkID0KKyAgICAhcGFyZW50X3Jvb3QmJiAgcF9wYXJlbnQtPm1fcF9wcmV2X29yX3BhcmVudC0+bV9wX2xfY2hpbGQgPT0gcF9wYXJlbnQ7CisKKyAgc3RkOjpzd2FwKHBfcGFyZW50LT5tX3BfcHJldl9vcl9wYXJlbnQsIHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudCk7CisgIHN0ZDo6c3dhcChwX3BhcmVudC0+bV9wX25leHRfc2libGluZywgcF9uZC0+bV9wX25leHRfc2libGluZyk7CisgIHN0ZDo6c3dhcChwX3BhcmVudC0+bV9wX2xfY2hpbGQsIHBfbmQtPm1fcF9sX2NoaWxkKTsKKyAgc3RkOjpzd2FwKHBfcGFyZW50LT5tX21ldGFkYXRhLCBwX25kLT5tX21ldGFkYXRhKTsKKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV9wX2xfY2hpbGQgIT0gTlVMTCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3BhcmVudC0+bV9wX3ByZXZfb3JfcGFyZW50ICE9IE5VTEwpOworCisgIGlmIChwX25kLT5tX3BfbmV4dF9zaWJsaW5nICE9IE5VTEwpCisgICAgcF9uZC0+bV9wX25leHRfc2libGluZy0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9uZDsKKworICBpZiAocF9wYXJlbnQtPm1fcF9uZXh0X3NpYmxpbmcgIT0gTlVMTCkKKyAgICBwX3BhcmVudC0+bV9wX25leHRfc2libGluZy0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9wYXJlbnQ7CisKKyAgaWYgKHBfcGFyZW50LT5tX3BfbF9jaGlsZCAhPSBOVUxMKQorICAgIHBfcGFyZW50LT5tX3BfbF9jaGlsZC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9wYXJlbnQ7CisKKyAgaWYgKHBhcmVudF9kaXJlY3RfY2hpbGQpCisgICAgcF9uZC0+bV9wX3ByZXZfb3JfcGFyZW50LT5tX3BfbF9jaGlsZCA9IHBfbmQ7CisgIGVsc2UgaWYgKCFwYXJlbnRfcm9vdCkKKyAgICBwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQtPm1fcF9uZXh0X3NpYmxpbmcgPSBwX25kOworCisgIGlmICghbmRfZGlyZWN0X2NoaWxkKQorICAgIHsKKyAgICAgIHBfbmQtPm1fcF9sX2NoaWxkLT5tX3BfcHJldl9vcl9wYXJlbnQgPSBwX25kOworCisgICAgICBwX3BhcmVudC0+bV9wX3ByZXZfb3JfcGFyZW50LT5tX3BfbmV4dF9zaWJsaW5nID0gcF9wYXJlbnQ7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQtPm1fcF9sX2NoaWxkID09IHBfbmQpOworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfcGFyZW50LT5tX3BfcHJldl9vcl9wYXJlbnQgPT0gcF9wYXJlbnQpOworCisgICAgICBwX25kLT5tX3BfbF9jaGlsZCA9IHBfcGFyZW50OworICAgICAgcF9wYXJlbnQtPm1fcF9wcmV2X29yX3BhcmVudCA9IHBfbmQ7CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwYXJlbnQocF9wYXJlbnQpID09IHBfbmQpOworfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vaXRlcmF0b3JzX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2l0ZXJhdG9yc19mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2E3MGZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2l0ZXJhdG9yc19mbl9pbXBzLmhwcApAQCAtMCwwICsxLDg4IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBpdGVyYXRvcnNfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjppdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYmVnaW4oKQoreworICBub2RlX3BvaW50ZXIgcF9uZCA9IG1fcF9yb290OworCisgIGlmIChwX25kID09IE5VTEwpCisgICAgcmV0dXJuIChpdGVyYXRvcihOVUxMKSk7CisKKyAgd2hpbGUgKHBfbmQtPm1fcF9sX2NoaWxkICE9IE5VTEwpCisgICAgcF9uZCA9IHBfbmQtPm1fcF9sX2NoaWxkOworCisgIHJldHVybiAoaXRlcmF0b3IocF9uZCkpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYmVnaW4oKSBjb25zdAoreworICBub2RlX3BvaW50ZXIgcF9uZCA9IG1fcF9yb290OworCisgIGlmIChwX25kID09IE5VTEwpCisgICAgcmV0dXJuIChjb25zdF9pdGVyYXRvcihOVUxMKSk7CisKKyAgd2hpbGUgKHBfbmQtPm1fcF9sX2NoaWxkICE9IE5VTEwpCisgICAgcF9uZCA9IHBfbmQtPm1fcF9sX2NoaWxkOworCisgIHJldHVybiAoY29uc3RfaXRlcmF0b3IocF9uZCkpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjppdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZW5kKCkKK3sKKyAgcmV0dXJuIChpdGVyYXRvcihOVUxMKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitlbmQoKSBjb25zdAoreworICByZXR1cm4gKGNvbnN0X2l0ZXJhdG9yKE5VTEwpKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRhZDRiZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy5ocHAKQEAgLTAsMCArMSwzNDkgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGEgYmFzaWMgaGVhcC4KKyAqLworCisjaWZuZGVmIFBCX0RTX0xFRlRfQ0hJTERfTkVYVF9TSUJMSU5HX0hFQVBfSFBQCisjZGVmaW5lIFBCX0RTX0xFRlRfQ0hJTERfTkVYVF9TSUJMSU5HX0hFQVBfSFBQCisKKy8qCisgKiBCYXNlZCBvbiBDTFJTLgorICovCisKKyNpbmNsdWRlIDxpdGVyYXRvcj4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2NvbmRfZGVhbHRvci5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90eXBlX3V0aWxzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL25vZGUuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vY29uc3RfcG9pbnRfaXRlcmF0b3IuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vY29uc3RfaXRlcmF0b3IuaHBwPgorI2lmZGVmIFBCX0RTX0xDX05TX0hFQVBfVFJBQ0VfCisjaW5jbHVkZSA8aW9zdHJlYW0+CisjZW5kaWYgCisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQwkJCQkJCVwKKyAgICB0ZW1wbGF0ZTwJCQkJCQkJCVwKKwkJCQkJCXR5cGVuYW1lIFZhbHVlX1R5cGUsCVwKKwkJCQkJCWNsYXNzIENtcF9GbiwJCVwKKwkJCQkJCXR5cGVuYW1lIE5vZGVfTWV0YWRhdGEsCVwKKwkJCQkJCWNsYXNzIEFsbG9jYXRvciwJXAorCQkJCQkJYm9vbCBTaW5nbGVfTGlua19Sb290cz4KKyNlbHNlIAorI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQwkJCQkJCVwKKyAgICB0ZW1wbGF0ZTwJCQkJCQkJCVwKKwkJCQkJCXR5cGVuYW1lIFZhbHVlX1R5cGUsCVwKKwkJCQkJCWNsYXNzIENtcF9GbiwJCVwKKwkJCQkJCXR5cGVuYW1lIE5vZGVfTWV0YWRhdGEsCVwKKwkJCQkJCWNsYXNzIEFsbG9jYXRvcj4KKyNlbmRpZiAKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDCQkJCQkJXAorICAgIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfPAkJCQkJXAorCQkJCQkJCVZhbHVlX1R5cGUsCVwKKwkJCQkJCQlDbXBfRm4sCQlcCisJCQkJCQkJTm9kZV9NZXRhZGF0YSwJXAorCQkJCQkJCUFsbG9jYXRvciwJXAorCQkJCQkJCVNpbmdsZV9MaW5rX1Jvb3RzPgorI2Vsc2UgCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDCQkJCQkJXAorICAgIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfPAkJCQkJXAorCQkJCQkJCVZhbHVlX1R5cGUsCVwKKwkJCQkJCQlDbXBfRm4sCQlcCisJCQkJCQkJTm9kZV9NZXRhZGF0YSwJXAorCQkJCQkJCUFsbG9jYXRvcj4KKyNlbmRpZiAKKworICAgIC8qKgorICAgICAqIGNsYXNzIGRlc2NyaXB0aW9uID0gIkJhc2UgY2xhc3MgZm9yIHNvbWUgdHlwZXMgb2YgaDNhcCQiPgorICAgICAqKi8KKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlX1R5cGUsCisJICAgICBjbGFzcyBDbXBfRm4sCisJICAgICB0eXBlbmFtZSBOb2RlX01ldGFkYXRhLAorCSAgICAgY2xhc3MgQWxsb2NhdG9yLAorCSAgICAgYm9vbCBTaW5nbGVfTGlua19Sb290cz4KKyNlbHNlIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlX1R5cGUsCisJICAgICBjbGFzcyBDbXBfRm4sCisJICAgICB0eXBlbmFtZSBOb2RlX01ldGFkYXRhLAorCSAgICAgY2xhc3MgQWxsb2NhdG9yPgorI2VuZGlmIAorICAgIGNsYXNzIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfIDogcHVibGljIENtcF9GbgorICAgIHsKKworICAgIHByb3RlY3RlZDoKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorICAgICAgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF9ub2RlXzwKKyAgICAgIFZhbHVlX1R5cGUsCisgICAgICBOb2RlX01ldGFkYXRhLAorICAgICAgQWxsb2NhdG9yPiA+OjpvdGhlcgorICAgICAgbm9kZV9hbGxvY2F0b3I7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbm9kZV9hbGxvY2F0b3I6OnZhbHVlX3R5cGUgbm9kZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBub2RlX2FsbG9jYXRvcjo6cG9pbnRlciBub2RlX3BvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbm9kZV9hbGxvY2F0b3I6OmNvbnN0X3BvaW50ZXIgY29uc3Rfbm9kZV9wb2ludGVyOworCisgICAgICB0eXBlZGVmIE5vZGVfTWV0YWRhdGEgbm9kZV9tZXRhZGF0YTsKKworICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8IG5vZGVfcG9pbnRlciwgbm9kZV9wb2ludGVyPiBub2RlX3BvaW50ZXJfcGFpcjsKKworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIGNvbmRfZGVhbHRvcjwgbm9kZSwgQWxsb2NhdG9yPiBjb25kX2RlYWx0b3JfdDsKKworICAgICAgZW51bQorCXsKKwkgIHNpbXBsZV92YWx1ZSA9IGlzX3NpbXBsZTxWYWx1ZV9UeXBlPjo6dmFsdWUKKwl9OworCisgICAgICB0eXBlZGVmIGludGVncmFsX2NvbnN0YW50PGludCwgc2ltcGxlX3ZhbHVlPiBub190aHJvd19jb3BpZXNfdDsKKworICAgIHB1YmxpYzoKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnNpemVfdHlwZSBzaXplX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworCisgICAgICB0eXBlZGVmIFZhbHVlX1R5cGUgdmFsdWVfdHlwZTsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8CisJdmFsdWVfdHlwZT46Om90aGVyOjpwb2ludGVyCisgICAgICBwb2ludGVyOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKwl2YWx1ZV90eXBlPjo6b3RoZXI6OmNvbnN0X3BvaW50ZXIKKyAgICAgIGNvbnN0X3BvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCXZhbHVlX3R5cGU+OjpvdGhlcjo6cmVmZXJlbmNlCisgICAgICByZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCXZhbHVlX3R5cGU+OjpvdGhlcjo6Y29uc3RfcmVmZXJlbmNlCisgICAgICBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfbm9kZV9jb25zdF9wb2ludF9pdGVyYXRvcl88CisJbm9kZSwKKwlBbGxvY2F0b3I+CisgICAgICBjb25zdF9wb2ludF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiBjb25zdF9wb2ludF9pdGVyYXRvciBwb2ludF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZgorICAgICAgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF9jb25zdF9pdGVyYXRvcl88CisJbm9kZSwKKwlBbGxvY2F0b3I+CisgICAgICBjb25zdF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiBjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiBDbXBfRm4gY21wX2ZuOworCisgICAgICB0eXBlZGVmIEFsbG9jYXRvciBhbGxvY2F0b3JfdHlwZTsKKworICAgIHB1YmxpYzoKKworICAgICAgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8oKTsKKworICAgICAgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8oY29uc3QgQ21wX0ZuJiByX2NtcF9mbik7CisKKyAgICAgIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfKGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcik7CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKTsKKworICAgICAgfmxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfKCk7CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBlbXB0eSgpIGNvbnN0OworCisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3Q7CisKKyAgICAgIENtcF9GbiYgCisgICAgICBnZXRfY21wX2ZuKCk7CisKKyAgICAgIGNvbnN0IENtcF9GbiYgCisgICAgICBnZXRfY21wX2ZuKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBpdGVyYXRvcgorICAgICAgYmVnaW4oKTsKKworICAgICAgaW5saW5lIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0OworCisgICAgICBpbmxpbmUgaXRlcmF0b3IKKyAgICAgIGVuZCgpOworCisgICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBjbGVhcigpOworCisjaWZkZWYgUEJfRFNfTENfTlNfSEVBUF9UUkFDRV8KKyAgICAgIHZvaWQKKyAgICAgIHRyYWNlKCkgY29uc3Q7CisjZW5kaWYgCisKKyAgICBwcm90ZWN0ZWQ6CisKKyAgICAgIGlubGluZSBub2RlX3BvaW50ZXIKKyAgICAgIGdldF9uZXdfbm9kZV9mb3JfaW5zZXJ0KGNvbnN0X3JlZmVyZW5jZSByX3ZhbCk7CisKKyAgICAgIGlubGluZSBzdGF0aWMgdm9pZAorICAgICAgbWFrZV9jaGlsZF9vZihub2RlX3BvaW50ZXIgcF9uZCwgbm9kZV9wb2ludGVyIHBfbmV3X3BhcmVudCk7CisKKyAgICAgIHZvaWQKKyAgICAgIHZhbHVlX3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKTsKKworICAgICAgaW5saW5lIHN0YXRpYyBub2RlX3BvaW50ZXIKKyAgICAgIHBhcmVudChub2RlX3BvaW50ZXIgcF9uZCk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBzd2FwX3dpdGhfcGFyZW50KG5vZGVfcG9pbnRlciBwX25kLCBub2RlX3BvaW50ZXIgcF9wYXJlbnQpOworCisgICAgICB2b2lkCisgICAgICBidWJibGVfdG9fdG9wKG5vZGVfcG9pbnRlciBwX25kKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIGFjdHVhbF9lcmFzZV9ub2RlKG5vZGVfcG9pbnRlciBwX25kKTsKKworICAgICAgdm9pZAorICAgICAgY2xlYXJfaW1wKG5vZGVfcG9pbnRlciBwX25kKTsKKworICAgICAgdm9pZAorICAgICAgdG9fbGlua2VkX2xpc3QoKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZD4KKyAgICAgIG5vZGVfcG9pbnRlcgorICAgICAgcHJ1bmUoUHJlZCBwcmVkKTsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfdmFsaWQoKSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X25vZGVfY29uc2lzdGVudChjb25zdF9ub2RlX3BvaW50ZXIgcF9uZCwgYm9vbCBzaW5nbGVfbGluaykgY29uc3Q7CisKKyAgICAgIHN0YXRpYyBzaXplX3R5cGUKKyAgICAgIHNpemVfdW5kZXJfbm9kZShjb25zdF9ub2RlX3BvaW50ZXIgcF9uZCk7CisKKyAgICAgIHN0YXRpYyBzaXplX3R5cGUKKyAgICAgIGRlZ3JlZShjb25zdF9ub2RlX3BvaW50ZXIgcF9uZCk7CisjZW5kaWYgCisKKyNpZmRlZiBQQl9EU19MQ19OU19IRUFQX1RSQUNFXworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIHRyYWNlX25vZGUoY29uc3Rfbm9kZV9wb2ludGVyLCBzaXplX3R5cGUgbGV2ZWwpOworI2VuZGlmIAorCisgICAgcHJvdGVjdGVkOgorICAgICAgbm9kZV9wb2ludGVyIG1fcF9yb290OworCisgICAgICBzaXplX3R5cGUgbV9zaXplOworCisgICAgcHJpdmF0ZToKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X2l0ZXJhdG9ycygpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfc2l6ZSgpIGNvbnN0OworCisgICAgICBzdGF0aWMgc2l6ZV90eXBlCisgICAgICBzaXplX2Zyb21fbm9kZShjb25zdF9ub2RlX3BvaW50ZXIgcF9uZCk7CisjZW5kaWYgCisKKyAgICAgIG5vZGVfcG9pbnRlcgorICAgICAgcmVjdXJzaXZlX2NvcHlfbm9kZShjb25zdF9ub2RlX3BvaW50ZXIgcF9uZCk7CisKKyAgICAgIGlubGluZSBub2RlX3BvaW50ZXIKKyAgICAgIGdldF9uZXdfbm9kZV9mb3JfaW5zZXJ0KGNvbnN0X3JlZmVyZW5jZSByX3ZhbCwgZmFsc2VfdHlwZSk7CisKKyAgICAgIGlubGluZSBub2RlX3BvaW50ZXIKKyAgICAgIGdldF9uZXdfbm9kZV9mb3JfaW5zZXJ0KGNvbnN0X3JlZmVyZW5jZSByX3ZhbCwgdHJ1ZV90eXBlKTsKKworI2lmZGVmIFBCX0RTX0xDX05TX0hFQVBfVFJBQ0VfCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YV8+CisgICAgICBzdGF0aWMgdm9pZAorICAgICAgdHJhY2Vfbm9kZV9tZXRhZGF0YShjb25zdF9ub2RlX3BvaW50ZXIgcF9uZCwgdHlwZV90b190eXBlPE1ldGFkYXRhXz4pOworCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgdHJhY2Vfbm9kZV9tZXRhZGF0YShjb25zdF9ub2RlX3BvaW50ZXIsIHR5cGVfdG9fdHlwZTxudWxsX2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfbm9kZV9tZXRhZGF0YT4pOworI2VuZGlmIAorCisgICAgcHJpdmF0ZToKKyAgICAgIHN0YXRpYyBub2RlX2FsbG9jYXRvciBzX25vZGVfYWxsb2NhdG9yOworCisgICAgICBzdGF0aWMgbm9fdGhyb3dfY29waWVzX3Qgc19ub190aHJvd19jb3BpZXNfaW5kOworICAgIH07CisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vaXRlcmF0b3JzX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vZGVidWdfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy90cmFjZV9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2luc2VydF9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2VyYXNlX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vaW5mb19mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL3BvbGljeV9hY2Nlc3NfZm5faW1wcy5ocHA+CisKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9ub2RlLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9ub2RlLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2RmZTI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL25vZGUuaHBwCkBAIC0wLDAgKzEsMTIzIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBub2RlLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gc3RydWN0IGZvciB0aGlzIHR5cGUgb2YgaGVhcCdzIG5vZGUuCisgKi8KKworI2lmbmRlZiBQQl9EU19MRUZUX0NISUxEX05FWFRfU0lCTElOR19IRUFQX05PREVfSFBQCisjZGVmaW5lIFBCX0RTX0xFRlRfQ0hJTERfTkVYVF9TSUJMSU5HX0hFQVBfTk9ERV9IUFAKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vbnVsbF9tZXRhZGF0YS5ocHA+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVfVHlwZSwgdHlwZW5hbWUgTWV0YWRhdGFfVHlwZSwgY2xhc3MgQWxsb2NhdG9yPgorICAgIHN0cnVjdCBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwX25vZGVfCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmCisgICAgICBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwX25vZGVfPAorICAgICAgVmFsdWVfVHlwZSwKKyAgICAgIE1ldGFkYXRhX1R5cGUsCisgICAgICBBbGxvY2F0b3I+CisgICAgICB0aGlzX3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6c2l6ZV90eXBlIHNpemVfdHlwZTsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8CisJdGhpc190eXBlPjo6b3RoZXI6OnBvaW50ZXIKKyAgICAgIG5vZGVfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZiBWYWx1ZV9UeXBlIHZhbHVlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgTWV0YWRhdGFfVHlwZSBtZXRhZGF0YV90eXBlOworCisgICAgcHVibGljOgorICAgICAgdmFsdWVfdHlwZSBtX3ZhbHVlOworCisgICAgICBtZXRhZGF0YV90eXBlIG1fbWV0YWRhdGE7CisKKyAgICAgIG5vZGVfcG9pbnRlciBtX3BfbF9jaGlsZDsKKworICAgICAgbm9kZV9wb2ludGVyIG1fcF9uZXh0X3NpYmxpbmc7CisKKyAgICAgIG5vZGVfcG9pbnRlciBtX3BfcHJldl9vcl9wYXJlbnQ7CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlX1R5cGUsIGNsYXNzIEFsbG9jYXRvcj4KKyAgICBzdHJ1Y3QgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF9ub2RlXzwKKyAgICAgIFZhbHVlX1R5cGUsCisgICAgICBudWxsX2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfbm9kZV9tZXRhZGF0YSwKKyAgICAgIEFsbG9jYXRvcj4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYKKyAgICAgIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfbm9kZV88CisgICAgICBWYWx1ZV9UeXBlLAorICAgICAgbnVsbF9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwX25vZGVfbWV0YWRhdGEsCisgICAgICBBbGxvY2F0b3I+CisgICAgICB0aGlzX3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6c2l6ZV90eXBlIHNpemVfdHlwZTsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8CisJdGhpc190eXBlPjo6b3RoZXI6OnBvaW50ZXIKKyAgICAgIG5vZGVfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZiBWYWx1ZV9UeXBlIHZhbHVlX3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICB2YWx1ZV90eXBlIG1fdmFsdWU7CisKKyAgICAgIG5vZGVfcG9pbnRlciBtX3BfbF9jaGlsZDsKKworICAgICAgbm9kZV9wb2ludGVyIG1fcF9uZXh0X3NpYmxpbmc7CisKKyAgICAgIG5vZGVfcG9pbnRlciBtX3BfcHJldl9vcl9wYXJlbnQ7CisgICAgfTsKKworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmIC8vICNpZm5kZWYgUEJfRFNfTEVGVF9DSElMRF9ORVhUX1NJQkxJTkdfSEVBUF9OT0RFX0hQUApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL251bGxfbWV0YWRhdGEuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL251bGxfbWV0YWRhdGEuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MDQ2NmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vbnVsbF9tZXRhZGF0YS5ocHAKQEAgLTAsMCArMSw1NSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgbnVsbF9tZXRhZGF0YS5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIHN0cnVjdCBmb3IgdGhpcyB0eXBlIG9mIGhlYXAncyBub2RlLgorICovCisKKyNpZm5kZWYgUEJfRFNfTEVGVF9DSElMRF9ORVhUX1NJQkxJTkdfSEVBUF9OVUxMX01FVEFEQVRBX0hQUAorI2RlZmluZSBQQl9EU19MRUZUX0NISUxEX05FWFRfU0lCTElOR19IRUFQX05VTExfTUVUQURBVEFfSFBQCisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworCisgICAgc3RydWN0IG51bGxfbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF9ub2RlX21ldGFkYXRhCisgICAgeyB9OworCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgLy8gI2lmbmRlZiBQQl9EU19MRUZUX0NISUxEX05FWFRfU0lCTElOR19IRUFQX05VTExfTUVUQURBVEFfSFBQCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vcG9saWN5X2FjY2Vzc19mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9wb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MGI0ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vcG9saWN5X2FjY2Vzc19mbl9pbXBzLmhwcApAQCAtMCwwICsxLDUyIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBwb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK0NtcF9GbiYgCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfY21wX2ZuKCkKK3sgcmV0dXJuICp0aGlzOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitjb25zdCBDbXBfRm4mIAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X2NtcF9mbigpIGNvbnN0Cit7IHJldHVybiAqdGhpczsgfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vdHJhY2VfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vdHJhY2VfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI5MGNmYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy90cmFjZV9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDk1IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSB0cmFjZV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfLgorICovCisKKyNpZmRlZiBQQl9EU19MQ19OU19IRUFQX1RSQUNFXworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordHJhY2UoKSBjb25zdAoreworICBzdGQ6OmNlcnIgPDwgc3RkOjplbmRsOworCisgIHRyYWNlX25vZGUobV9wX3Jvb3QsIDApOworCisgIHN0ZDo6Y2VyciA8PCBzdGQ6OmVuZGw7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cit0cmFjZV9ub2RlKGNvbnN0X25vZGVfcG9pbnRlciBwX25kLCBzaXplX3R5cGUgbGV2ZWwpCit7CisgIHdoaWxlIChwX25kICE9IE5VTEwpCisgICAgeworICAgICAgZm9yIChzaXplX3R5cGUgaSA9IDA7IGkgPCBsZXZlbDsgKytpKQorCXN0ZDo6Y2VyciA8PCAnICc7CisKKyAgICAgIHN0ZDo6Y2VyciA8PCBwX25kIDw8CisJIiBwcmV2ID0gIiA8PCBwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQgPDwKKwkiIG5leHQgIiA8PCBwX25kLT5tX3BfbmV4dF9zaWJsaW5nIDw8CisJIiBsZWZ0ID0gIiA8PCBwX25kLT5tX3BfbF9jaGlsZCA8PCAiICI7CisKKyAgICAgIHRyYWNlX25vZGVfbWV0YWRhdGEocF9uZCwgdHlwZV90b190eXBlPG5vZGVfbWV0YWRhdGE+KCkpOworCisgICAgICBzdGQ6OmNlcnIgPDwgcF9uZC0+bV92YWx1ZSA8PCBzdGQ6OmVuZGw7CisKKyAgICAgIHRyYWNlX25vZGUocF9uZC0+bV9wX2xfY2hpbGQsIGxldmVsICsgMSk7CisKKyAgICAgIHBfbmQgPSBwX25kLT5tX3BfbmV4dF9zaWJsaW5nOworICAgIH0KK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhXz4KK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3RyYWNlX25vZGVfbWV0YWRhdGEoY29uc3Rfbm9kZV9wb2ludGVyIHBfbmQsIHR5cGVfdG9fdHlwZTxNZXRhZGF0YV8+KQoreworICBzdGQ6OmNlcnIgPDwgIigiIDw8IHBfbmQtPm1fbWV0YWRhdGEgPDwgIikgIjsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3RyYWNlX25vZGVfbWV0YWRhdGEoY29uc3Rfbm9kZV9wb2ludGVyLCB0eXBlX3RvX3R5cGU8bnVsbF9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwX25vZGVfbWV0YWRhdGE+KQoreyB9CisKKyNlbmRpZiAvLyAjaWZkZWYgUEJfRFNfTENfTlNfSEVBUF9UUkFDRV8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9tYXBfL2NvbnN0cnVjdG9yX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9jb25zdHJ1Y3Rvcl9kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5OThjM2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9jb25zdHJ1Y3Rvcl9kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTQxIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBjb25zdHJ1Y3Rvcl9kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgUEJfRFNfQ0xBU1NfTkFNRS4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmVudHJ5X2FsbG9jYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OnNfZW50cnlfYWxsb2NhdG9yOworCitQQl9EU19DTEFTU19UX0RFQworRXFfRm4gUEJfRFNfQ0xBU1NfQ19ERUM6OnNfZXFfZm47CisKK1BCX0RTX0NMQVNTX1RfREVDCitudWxsX2x1X21ldGFkYXRhIFBCX0RTX0NMQVNTX0NfREVDOjpzX251bGxfbHVfbWV0YWRhdGE7CisKK1BCX0RTX0NMQVNTX1RfREVDCitVcGRhdGVfUG9saWN5IFBCX0RTX0NMQVNTX0NfREVDOjpzX3VwZGF0ZV9wb2xpY3k7CisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlX3RvX3R5cGU8CisgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjp1cGRhdGVfbWV0YWRhdGE+IFBCX0RTX0NMQVNTX0NfREVDOjpzX21ldGFkYXRhX3R5cGVfaW5kaWNhdG9yOworCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgSXQ+Cit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citjb3B5X2Zyb21fcmFuZ2UoSXQgZmlyc3RfaXQsIEl0IGxhc3RfaXQpCit7CisgIHdoaWxlIChmaXJzdF9pdCAhPSBsYXN0X2l0KQorICAgIGluc2VydCgqKGZpcnN0X2l0KyspKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK1BCX0RTX0NMQVNTX05BTUUoKSA6IG1fcF9sKE5VTEwpCit7IF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KSB9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KK1BCX0RTX0NMQVNTX0NfREVDOjoKK1BCX0RTX0NMQVNTX05BTUUoSXQgZmlyc3RfaXQsIEl0IGxhc3RfaXQpIDogbV9wX2woTlVMTCkKK3sKKyAgY29weV9mcm9tX3JhbmdlKGZpcnN0X2l0LCBsYXN0X2l0KTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspOworfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfQ0xBU1NfTkFNRShjb25zdCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpIDogCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgZGVidWdfYmFzZSgpLAorI2VuZGlmCittX3BfbChOVUxMKQoreworICBfX3RyeQorICAgIHsKKyAgICAgIGZvciAoY29uc3RfaXRlcmF0b3IgaXQgPSBvdGhlci5iZWdpbigpOyBpdCAhPSBvdGhlci5lbmQoKTsgKytpdCkKKyAgICAgICAgeworCSAgZW50cnlfcG9pbnRlciBwX2wgPSBhbGxvY2F0ZV9uZXdfZW50cnkoKml0LCAKKwkJCVBCX0RTX1RZUEVTX1RSQUlUU19DX0RFQzo6bV9ub190aHJvd19jb3BpZXNfaW5kaWNhdG9yKTsKKworCSAgcF9sLT5tX3BfbmV4dCA9IG1fcF9sOworCSAgbV9wX2wgPSBwX2w7CisgICAgICAgIH0KKyAgICB9CisgIF9fY2F0Y2goLi4uKQorICAgIHsKKyAgICAgIGRlYWxsb2NhdGVfYWxsKCk7CisgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAgICB9CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpOykKKyAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpzd2FwKG90aGVyKTspCisgIHN0ZDo6c3dhcChtX3BfbCwgb3RoZXIubV9wX2wpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitkZWFsbG9jYXRlX2FsbCgpCit7CisgIGVudHJ5X3BvaW50ZXIgcF9sID0gbV9wX2w7CisgIHdoaWxlIChwX2wgIT0gTlVMTCkKKyAgICB7CisgICAgICBlbnRyeV9wb2ludGVyIHBfbmV4dF9sID0gcF9sLT5tX3BfbmV4dDsKKyAgICAgIGFjdHVhbF9lcmFzZV9lbnRyeShwX2wpOworICAgICAgcF9sID0gcF9uZXh0X2w7CisgICAgfQorICBtX3BfbCA9IE5VTEw7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6Cit+UEJfRFNfQ0xBU1NfTkFNRSgpCit7IGRlYWxsb2NhdGVfYWxsKCk7IH0KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vZGVidWdfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9kZWJ1Z19mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWU5ZTIyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vZGVidWdfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw1NyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZGVidWdfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBjY19odF9tYXBfJ3MgZGVidWctbW9kZSBmdW5jdGlvbnMuCisgKi8KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfdmFsaWQoKSBjb25zdAoreworICBzaXplX3R5cGUgY2FsY19zaXplID0gMDsKKyAgZm9yIChjb25zdF9pdGVyYXRvciBpdCA9IGJlZ2luKCk7IGl0ICE9IGVuZCgpOyArK2l0KQorICAgIHsKKyAgICAgIGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9leGlzdHMoUEJfRFNfVjJGKCppdCkpOworICAgICAgKytjYWxjX3NpemU7CisgICAgfQorICBkZWJ1Z19iYXNlOjpjaGVja19zaXplKGNhbGNfc2l6ZSk7Cit9CisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9tYXBfL2VudHJ5X21ldGFkYXRhX2Jhc2UuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vZW50cnlfbWV0YWRhdGFfYmFzZS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIxZWY1MAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9tYXBfL2VudHJ5X21ldGFkYXRhX2Jhc2UuaHBwCkBAIC0wLDAgKzEsNjAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGVudHJ5X21ldGFkYXRhX2Jhc2UuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgYSBsaXN0IHVwZGF0ZSBtYXAuCisgKi8KKworI2lmbmRlZiBQQl9EU19MVV9NQVBfRU5UUllfTUVUQURBVEFfQkFTRV9IUFAKKyNkZWZpbmUgUEJfRFNfTFVfTUFQX0VOVFJZX01FVEFEQVRBX0JBU0VfSFBQCisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgorICAgIHN0cnVjdCBsdV9tYXBfZW50cnlfbWV0YWRhdGFfYmFzZQorICAgIHsKKyAgICAgIE1ldGFkYXRhIG1fdXBkYXRlX21ldGFkYXRhOworICAgIH07CisgICAgCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBsdV9tYXBfZW50cnlfbWV0YWRhdGFfYmFzZTxudWxsX2x1X21ldGFkYXRhPgorICAgIHsgfTsgIAorICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vZXJhc2VfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9lcmFzZV9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGM1OTIwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vZXJhc2VfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxMzUgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGVyYXNlX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgbHVfbWFwXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIGJvb2wKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoUEJfRFNfQ0xBU1NfQ19ERUM6OmFzc2VydF92YWxpZCgpOykKKyAgaWYgKG1fcF9sID09IE5VTEwpCisgICAgcmV0dXJuIGZhbHNlOworCisgIGlmIChzX2VxX2ZuKHJfa2V5LCBQQl9EU19WMkYobV9wX2wtPm1fdmFsdWUpKSkKKyAgICB7CisgICAgICBlbnRyeV9wb2ludGVyIHBfbmV4dCA9IG1fcF9sLT5tX3BfbmV4dDsKKyAgICAgIGFjdHVhbF9lcmFzZV9lbnRyeShtX3BfbCk7CisgICAgICBtX3BfbCA9IHBfbmV4dDsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICBlbnRyeV9wb2ludGVyIHBfbCA9IG1fcF9sOworICB3aGlsZSAocF9sLT5tX3BfbmV4dCAhPSBOVUxMKQorICAgIGlmIChzX2VxX2ZuKHJfa2V5LCBQQl9EU19WMkYocF9sLT5tX3BfbmV4dC0+bV92YWx1ZSkpKQorICAgICAgeworCWVyYXNlX25leHQocF9sKTsKKwlyZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBwX2wgPSBwX2wtPm1fcF9uZXh0OworICByZXR1cm4gZmFsc2U7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitjbGVhcigpCit7CisgIGRlYWxsb2NhdGVfYWxsKCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkPgoraW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlX2lmKFByZWQgcHJlZCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShQQl9EU19DTEFTU19DX0RFQzo6YXNzZXJ0X3ZhbGlkKCk7KQorICBzaXplX3R5cGUgbnVtX2Vyc2QgPSAwOworICB3aGlsZSAobV9wX2wgIT0gTlVMTCAmJiBwcmVkKG1fcF9sLT5tX3ZhbHVlKSkKKyAgICB7CisgICAgICBlbnRyeV9wb2ludGVyIHBfbmV4dCA9IG1fcF9sLT5tX3BfbmV4dDsKKyAgICAgICsrbnVtX2Vyc2Q7CisgICAgICBhY3R1YWxfZXJhc2VfZW50cnkobV9wX2wpOworICAgICAgbV9wX2wgPSBwX25leHQ7CisgICAgfQorCisgIGlmIChtX3BfbCA9PSBOVUxMKQorICAgIHJldHVybiBudW1fZXJzZDsKKworICBlbnRyeV9wb2ludGVyIHBfbCA9IG1fcF9sOworICB3aGlsZSAocF9sLT5tX3BfbmV4dCAhPSBOVUxMKQorICAgIHsKKyAgICAgIGlmIChwcmVkKHBfbC0+bV9wX25leHQtPm1fdmFsdWUpKQorICAgICAgICB7CisJICArK251bV9lcnNkOworCSAgZXJhc2VfbmV4dChwX2wpOworICAgICAgICB9CisgICAgICBlbHNlCisJcF9sID0gcF9sLT5tX3BfbmV4dDsKKyAgICB9CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShQQl9EU19DTEFTU19DX0RFQzo6YXNzZXJ0X3ZhbGlkKCk7KQorICByZXR1cm4gbnVtX2Vyc2Q7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZV9uZXh0KGVudHJ5X3BvaW50ZXIgcF9sKQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9sICE9IE5VTEwpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9sICE9IG1fcF9sKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbC0+bV9wX25leHQgIT0gTlVMTCk7CisgIGVudHJ5X3BvaW50ZXIgcF9uZXh0X2wgPSBwX2wtPm1fcF9uZXh0LT5tX3BfbmV4dDsKKyAgYWN0dWFsX2VyYXNlX2VudHJ5KHBfbC0+bV9wX25leHQpOworICBwX2wtPm1fcF9uZXh0ID0gcF9uZXh0X2w7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CithY3R1YWxfZXJhc2VfZW50cnkoZW50cnlfcG9pbnRlciBwX2wpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6ZXJhc2VfZXhpc3RpbmcoUEJfRFNfVjJGKHBfbC0+bV92YWx1ZSkpOykKKyAgcF9sLT5+ZW50cnkoKTsKKyAgc19lbnRyeV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShwX2wsIDEpOworfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9maW5kX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vZmluZF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDM0N2FjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vZmluZF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDkwIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBmaW5kX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgbHVfbWFwXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjplbnRyeV9wb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6CitmaW5kX2ltcChjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5KSBjb25zdAoreworICBpZiAobV9wX2wgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKyAgaWYgKHNfZXFfZm4ocl9rZXksIFBCX0RTX1YyRihtX3BfbC0+bV92YWx1ZSkpKQorICAgIHsKKyAgICAgIGFwcGx5X3VwZGF0ZShtX3BfbCwgc19tZXRhZGF0YV90eXBlX2luZGljYXRvcik7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9leGlzdHMocl9rZXkpOykKKyAgICAgIHJldHVybiBtX3BfbDsKKyAgICB9CisKKyAgZW50cnlfcG9pbnRlciBwX2wgPSBtX3BfbDsKKyAgd2hpbGUgKHBfbC0+bV9wX25leHQgIT0gTlVMTCkKKyAgICB7CisgICAgICBlbnRyeV9wb2ludGVyIHBfbmV4dCA9IHBfbC0+bV9wX25leHQ7CisgICAgICBpZiAoc19lcV9mbihyX2tleSwgUEJfRFNfVjJGKHBfbmV4dC0+bV92YWx1ZSkpKQorICAgICAgICB7CisJICBpZiAoYXBwbHlfdXBkYXRlKHBfbmV4dCwgc19tZXRhZGF0YV90eXBlX2luZGljYXRvcikpCisgICAgICAgICAgICB7CisJICAgICAgcF9sLT5tX3BfbmV4dCA9IHBfbmV4dC0+bV9wX25leHQ7CisJICAgICAgcF9uZXh0LT5tX3BfbmV4dCA9IG1fcF9sOworCSAgICAgIG1fcF9sID0gcF9uZXh0OworCSAgICAgIHJldHVybiBtX3BfbDsKKyAgICAgICAgICAgIH0KKwkgIHJldHVybiBwX25leHQ7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKwlwX2wgPSBwX25leHQ7CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6Y2hlY2tfa2V5X2RvZXNfbm90X2V4aXN0KHJfa2V5KTspCisgIHJldHVybiBOVUxMOworfQorCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+CitpbmxpbmUgYm9vbAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXBwbHlfdXBkYXRlKGVudHJ5X3BvaW50ZXIgcF9sLCB0eXBlX3RvX3R5cGU8TWV0YWRhdGE+KQoreyByZXR1cm4gc191cGRhdGVfcG9saWN5KHBfbC0+bV91cGRhdGVfbWV0YWRhdGEpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgYm9vbAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXBwbHlfdXBkYXRlKGVudHJ5X3BvaW50ZXIsIHR5cGVfdG9fdHlwZTxudWxsX2x1X21ldGFkYXRhPikKK3sgcmV0dXJuIHNfdXBkYXRlX3BvbGljeShzX251bGxfbHVfbWV0YWRhdGEpOyB9CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9tYXBfL2luZm9fZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9pbmZvX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZDM5NzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9pbmZvX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNTcgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGluZm9fZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBsdV9tYXBfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc2l6ZSgpIGNvbnN0Cit7IHJldHVybiBzdGQ6OmRpc3RhbmNlKGJlZ2luKCksIGVuZCgpKTsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK21heF9zaXplKCkgY29uc3QKK3sgcmV0dXJuIHNfZW50cnlfYWxsb2NhdG9yLm1heF9zaXplKCk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitlbXB0eSgpIGNvbnN0Cit7IHJldHVybiAobV9wX2wgPT0gTlVMTCk7IH0KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9tYXBfL2luc2VydF9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9tYXBfL2luc2VydF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWZlMmExCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTA2IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBpbnNlcnRfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBsdV9tYXBfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgc3RkOjpwYWlyPAorICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6cG9pbnRfaXRlcmF0b3IsCisgIGJvb2w+CitQQl9EU19DTEFTU19DX0RFQzo6CitpbnNlcnQoY29uc3RfcmVmZXJlbmNlIHJfdmFsKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgZW50cnlfcG9pbnRlciBwX2wgPSBmaW5kX2ltcChQQl9EU19WMkYocl92YWwpKTsKKworICBpZiAocF9sICE9IE5VTEwpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpjaGVja19rZXlfZXhpc3RzKFBCX0RTX1YyRihyX3ZhbCkpOykKKyAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihwb2ludF9pdGVyYXRvcigmcF9sLT5tX3ZhbHVlKSwgZmFsc2UpOworICAgIH0KKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9kb2VzX25vdF9leGlzdChQQl9EU19WMkYocl92YWwpKTspCisKKyAgcF9sID0gYWxsb2NhdGVfbmV3X2VudHJ5KHJfdmFsLCB0cmFpdHNfYmFzZTo6bV9ub190aHJvd19jb3BpZXNfaW5kaWNhdG9yKTsKKyAgcF9sLT5tX3BfbmV4dCA9IG1fcF9sOworICBtX3BfbCA9IHBfbDsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihwb2ludF9pdGVyYXRvcigmcF9sLT5tX3ZhbHVlKSwgdHJ1ZSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmVudHJ5X3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2FsbG9jYXRlX25ld19lbnRyeShjb25zdF9yZWZlcmVuY2Ugcl92YWwsIGZhbHNlX3R5cGUpCit7CisgIGVudHJ5X3BvaW50ZXIgcF9sID0gc19lbnRyeV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7CisgIGNvbmRfZGVhbHRvcl90IGNvbmQocF9sKTsKKyAgbmV3IChjb25zdF9jYXN0PHZvaWQqID4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCogPigmcF9sLT5tX3ZhbHVlKSkpCisgICAgdmFsdWVfdHlwZShyX3ZhbCk7CisKKyAgY29uZC5zZXRfbm9fYWN0aW9uKCk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6aW5zZXJ0X25ldyhQQl9EU19WMkYocl92YWwpKTspCisgIGluaXRfZW50cnlfbWV0YWRhdGEocF9sLCBzX21ldGFkYXRhX3R5cGVfaW5kaWNhdG9yKTsKKyAgcmV0dXJuIHBfbDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6ZW50cnlfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYWxsb2NhdGVfbmV3X2VudHJ5KGNvbnN0X3JlZmVyZW5jZSAgICByX3ZhbCwgdHJ1ZV90eXBlKQoreworICBlbnRyeV9wb2ludGVyIHBfbCA9IHNfZW50cnlfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOworICBuZXcgKCZwX2wtPm1fdmFsdWUpIHZhbHVlX3R5cGUocl92YWwpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6Omluc2VydF9uZXcoUEJfRFNfVjJGKHJfdmFsKSk7KQorICBpbml0X2VudHJ5X21ldGFkYXRhKHBfbCwgc19tZXRhZGF0YV90eXBlX2luZGljYXRvcik7CisgIHJldHVybiBwX2w7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citpbml0X2VudHJ5X21ldGFkYXRhKGVudHJ5X3BvaW50ZXIgcF9sLCB0eXBlX3RvX3R5cGU8TWV0YWRhdGE+KQoreyBuZXcgKCZwX2wtPm1fdXBkYXRlX21ldGFkYXRhKSBNZXRhZGF0YShzX3VwZGF0ZV9wb2xpY3koKSk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citpbml0X2VudHJ5X21ldGFkYXRhKGVudHJ5X3BvaW50ZXIsIHR5cGVfdG9fdHlwZTxudWxsX2x1X21ldGFkYXRhPikKK3sgfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9pdGVyYXRvcnNfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9pdGVyYXRvcnNfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMyNDdjNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9tYXBfL2l0ZXJhdG9yc19mbl9pbXBzLmhwcApAQCAtMCwwICsxLDgwIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBpdGVyYXRvcnNfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBsdV9tYXBfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitiZWdpbigpCit7CisgIGlmIChtX3BfbCA9PSBOVUxMKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChlbXB0eSgpKTsKKyAgICAgIHJldHVybiBlbmQoKTsKKyAgICB9CisgIHJldHVybiBpdGVyYXRvcigmbV9wX2wtPm1fdmFsdWUsIG1fcF9sLCB0aGlzKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2JlZ2luKCkgY29uc3QKK3sKKyAgaWYgKG1fcF9sID09IE5VTEwpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGVtcHR5KCkpOworICAgICAgcmV0dXJuIGVuZCgpOworICAgIH0KKyAgcmV0dXJuIGl0ZXJhdG9yKCZtX3BfbC0+bV92YWx1ZSwgbV9wX2wsIGNvbnN0X2Nhc3Q8UEJfRFNfQ0xBU1NfQ19ERUMqID4odGhpcykpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjppdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZW5kKCkKK3sgcmV0dXJuIGl0ZXJhdG9yKE5VTEwsIE5VTEwsIHRoaXMpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitlbmQoKSBjb25zdAoreworICByZXR1cm4gY29uc3RfaXRlcmF0b3IoTlVMTCwgTlVMTCwgY29uc3RfY2FzdDxQQl9EU19DTEFTU19DX0RFQyogY29uc3Q+KHRoaXMpKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vbHVfbWFwXy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9sdV9tYXBfLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTkzMzZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vbHVfbWFwXy5ocHAKQEAgLTAsMCArMSwzNTkgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGx1X21hcF8uaHBwCisgKiBDb250YWlucyBhIGxpc3QgdXBkYXRlIG1hcC4KKyAqLworCisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDxpdGVyYXRvcj4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2NvbmRfZGVhbHRvci5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL3RhZ19hbmRfdHJhaXQuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHlwZXNfdHJhaXRzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vZW50cnlfbWV0YWRhdGFfYmFzZS5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2V4Y2VwdGlvbi5ocHA+CisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2RlYnVnX21hcF9iYXNlLmhwcD4KKyNlbmRpZiAKKyNpZmRlZiBQQl9EU19MVV9NQVBfVFJBQ0VfCisjaW5jbHVkZSA8aW9zdHJlYW0+CisjZW5kaWYgCisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1hcHBlZCwgY2xhc3MgRXFfRm4sIFwKKwkgICAgIGNsYXNzIEFsbG9jYXRvciwgY2xhc3MgVXBkYXRlX1BvbGljeT4KKworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfTkFNRSBsdV9tYXBfZGF0YV8KKyNlbmRpZiAKKworI2lmZGVmIFBCX0RTX0RBVEFfRkFMU0VfSU5ESUNBVE9SCisjZGVmaW5lIFBCX0RTX0NMQVNTX05BTUUgbHVfbWFwX25vX2RhdGFfCisjZW5kaWYgCisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfQ19ERUMgXAorICAgIFBCX0RTX0NMQVNTX05BTUU8S2V5LCBNYXBwZWQsIEVxX0ZuLCBBbGxvY2F0b3IsIFVwZGF0ZV9Qb2xpY3k+CisKKyNkZWZpbmUgUEJfRFNfVFlQRVNfVFJBSVRTX0NfREVDIFwKKyAgICB0eXBlc190cmFpdHM8S2V5LCBNYXBwZWQsIEFsbG9jYXRvciwgZmFsc2U+CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworI2RlZmluZSBQQl9EU19ERUJVR19NQVBfQkFTRV9DX0RFQyBcCisgICAgZGVidWdfbWFwX2Jhc2U8S2V5LCBFcV9GbiwgXAorCSAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPEtleT46Om90aGVyOjpjb25zdF9yZWZlcmVuY2U+CisjZW5kaWYgCisKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisjZGVmaW5lIFBCX0RTX1YyRihYKSAoWCkuZmlyc3QKKyNkZWZpbmUgUEJfRFNfVjJTKFgpIChYKS5zZWNvbmQKKyNkZWZpbmUgUEJfRFNfRVAyVlAoWCkmICgoWCktPm1fdmFsdWUpCisjZW5kaWYgCisKKyNpZmRlZiBQQl9EU19EQVRBX0ZBTFNFX0lORElDQVRPUgorI2RlZmluZSBQQl9EU19WMkYoWCkgKFgpCisjZGVmaW5lIFBCX0RTX1YyUyhYKSBNYXBwZWRfRGF0YSgpCisjZGVmaW5lIFBCX0RTX0VQMlZQKFgpJiAoKFgpLT5tX3ZhbHVlLmZpcnN0KQorI2VuZGlmIAorCisgICAgLyogU2tpcCB0byB0aGUgbHUsIG15IGRhcmxpbmcuICovCisgICAgLy8gbGlzdC1iYXNlZCAod2l0aCB1cGRhdGVzKSBhc3NvY2lhdGl2ZSBjb250YWluZXIuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LAorCSAgICAgdHlwZW5hbWUgTWFwcGVkLAorCSAgICAgY2xhc3MgRXFfRm4sCisJICAgICBjbGFzcyBBbGxvY2F0b3IsCisJICAgICBjbGFzcyBVcGRhdGVfUG9saWN5PgorICAgIGNsYXNzIFBCX0RTX0NMQVNTX05BTUUgOgorI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICBwcm90ZWN0ZWQgUEJfRFNfREVCVUdfTUFQX0JBU0VfQ19ERUMsCisjZW5kaWYgCisgICAgICBwdWJsaWMgUEJfRFNfVFlQRVNfVFJBSVRTX0NfREVDCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIFBCX0RTX1RZUEVTX1RSQUlUU19DX0RFQyB0cmFpdHNfYmFzZTsKKworICAgICAgc3RydWN0IGVudHJ5IAorICAgICA6IHB1YmxpYyBsdV9tYXBfZW50cnlfbWV0YWRhdGFfYmFzZTx0eXBlbmFtZSBVcGRhdGVfUG9saWN5OjptZXRhZGF0YV90eXBlPgorICAgICAgeworCXR5cGVuYW1lIHRyYWl0c19iYXNlOjp2YWx1ZV90eXBlIG1fdmFsdWU7CisJdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8ZW50cnk+OjpvdGhlcjo6cG9pbnRlciBtX3BfbmV4dDsKKyAgICAgIH07CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8ZW50cnk+OjpvdGhlciBlbnRyeV9hbGxvY2F0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGVudHJ5X2FsbG9jYXRvcjo6cG9pbnRlciBlbnRyeV9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBlbnRyeV9hbGxvY2F0b3I6OmNvbnN0X3BvaW50ZXIgY29uc3RfZW50cnlfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgZW50cnlfYWxsb2NhdG9yOjpyZWZlcmVuY2UgZW50cnlfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBlbnRyeV9hbGxvY2F0b3I6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9lbnRyeV9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8ZW50cnlfcG9pbnRlcj46Om90aGVyIGVudHJ5X3BvaW50ZXJfYWxsb2NhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBlbnRyeV9wb2ludGVyX2FsbG9jYXRvcjo6cG9pbnRlciBlbnRyeV9wb2ludGVyX2FycmF5OworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGVfOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6cG9pbnRlciBwb2ludGVyXzsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcl87CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjpyZWZlcmVuY2UgcmVmZXJlbmNlXzsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2VfOworCisjZGVmaW5lIFBCX0RTX0dFTl9QT1MgZW50cnlfcG9pbnRlcgorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC91bm9yZGVyZWRfaXRlcmF0b3IvY29uc3RfcG9pbnRfaXRlcmF0b3IuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdW5vcmRlcmVkX2l0ZXJhdG9yL3BvaW50X2l0ZXJhdG9yLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3Vub3JkZXJlZF9pdGVyYXRvci9jb25zdF9pdGVyYXRvci5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC91bm9yZGVyZWRfaXRlcmF0b3IvaXRlcmF0b3IuaHBwPgorCisjdW5kZWYgUEJfRFNfR0VOX1BPUworCisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgdHlwZWRlZiBQQl9EU19ERUJVR19NQVBfQkFTRV9DX0RFQyBkZWJ1Z19iYXNlOworI2VuZGlmIAorCisgICAgICB0eXBlZGVmIGNvbmRfZGVhbHRvcjxlbnRyeSwgQWxsb2NhdG9yPiBjb25kX2RlYWx0b3JfdDsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgQWxsb2NhdG9yIGFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnNpemVfdHlwZSBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgRXFfRm4gZXFfZm47CisgICAgICB0eXBlZGVmIFVwZGF0ZV9Qb2xpY3kgdXBkYXRlX3BvbGljeTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgVXBkYXRlX1BvbGljeTo6bWV0YWRhdGFfdHlwZSB1cGRhdGVfbWV0YWRhdGE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjprZXlfdHlwZSBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmtleV9wb2ludGVyIGtleV9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6Y29uc3Rfa2V5X3BvaW50ZXIgY29uc3Rfa2V5X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjprZXlfcmVmZXJlbmNlIGtleV9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjpjb25zdF9rZXlfcmVmZXJlbmNlIGNvbnN0X2tleV9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjptYXBwZWRfdHlwZSBtYXBwZWRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6Om1hcHBlZF9wb2ludGVyIG1hcHBlZF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6Y29uc3RfbWFwcGVkX3BvaW50ZXIgY29uc3RfbWFwcGVkX3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjptYXBwZWRfcmVmZXJlbmNlIG1hcHBlZF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjpjb25zdF9tYXBwZWRfcmVmZXJlbmNlIGNvbnN0X21hcHBlZF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjpwb2ludGVyIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKKworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyAgICAgIHR5cGVkZWYgcG9pbnRfaXRlcmF0b3JfIHBvaW50X2l0ZXJhdG9yOworI2VuZGlmIAorCisjaWZkZWYgUEJfRFNfREFUQV9GQUxTRV9JTkRJQ0FUT1IKKyAgICAgIHR5cGVkZWYgY29uc3RfcG9pbnRfaXRlcmF0b3JfIHBvaW50X2l0ZXJhdG9yOworI2VuZGlmIAorCisgICAgICB0eXBlZGVmIGNvbnN0X3BvaW50X2l0ZXJhdG9yXyBjb25zdF9wb2ludF9pdGVyYXRvcjsKKworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyAgICAgIHR5cGVkZWYgaXRlcmF0b3JfIGl0ZXJhdG9yOworI2VuZGlmIAorCisjaWZkZWYgUEJfRFNfREFUQV9GQUxTRV9JTkRJQ0FUT1IKKyAgICAgIHR5cGVkZWYgY29uc3RfaXRlcmF0b3JfIGl0ZXJhdG9yOworI2VuZGlmIAorCisgICAgICB0eXBlZGVmIGNvbnN0X2l0ZXJhdG9yXyBjb25zdF9pdGVyYXRvcjsKKworICAgIHB1YmxpYzoKKyAgICAgIFBCX0RTX0NMQVNTX05BTUUoKTsKKworICAgICAgUEJfRFNfQ0xBU1NfTkFNRShjb25zdCBQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgICB2aXJ0dWFsCisgICAgICB+UEJfRFNfQ0xBU1NfTkFNRSgpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KKyAgICAgIFBCX0RTX0NMQVNTX05BTUUoSXQgZmlyc3RfaXQsIEl0IGxhc3RfaXQpOworCisgICAgICB2b2lkCisgICAgICBzd2FwKFBCX0RTX0NMQVNTX0NfREVDJik7CisKKyAgICAgIGlubGluZSBzaXplX3R5cGUKKyAgICAgIHNpemUoKSBjb25zdDsKKworICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdDsKKworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBtYXBwZWRfcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpCisgICAgICB7CisjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorCV9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorCXJldHVybiBpbnNlcnQoc3RkOjptYWtlX3BhaXIocl9rZXksIG1hcHBlZF90eXBlKCkpKS5maXJzdC0+c2Vjb25kOworI2Vsc2UgCisJaW5zZXJ0KHJfa2V5KTsKKwlyZXR1cm4gdHJhaXRzX2Jhc2U6OnNfbnVsbF9tYXBwZWQ7CisjZW5kaWYgCisgICAgICB9CisKKyAgICAgIGlubGluZSBzdGQ6OnBhaXI8cG9pbnRfaXRlcmF0b3IsIGJvb2w+CisgICAgICBpbnNlcnQoY29uc3RfcmVmZXJlbmNlKTsKKworICAgICAgaW5saW5lIHBvaW50X2l0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisJZW50cnlfcG9pbnRlciBwX2UgPSBmaW5kX2ltcChyX2tleSk7CisJcmV0dXJuIHBvaW50X2l0ZXJhdG9yKHBfZSA9PSBOVUxMID8gTlVMTDogJnBfZS0+bV92YWx1ZSk7CisgICAgICB9CisKKyAgICAgIGlubGluZSBjb25zdF9wb2ludF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5KSBjb25zdAorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorCWVudHJ5X3BvaW50ZXIgcF9lID0gZmluZF9pbXAocl9rZXkpOworCXJldHVybiBjb25zdF9wb2ludF9pdGVyYXRvcihwX2UgPT0gTlVMTCA/IE5VTEw6ICZwX2UtPm1fdmFsdWUpOworICAgICAgfQorCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgZXJhc2UoY29uc3Rfa2V5X3JlZmVyZW5jZSk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFByZWQ+CisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBlcmFzZV9pZihQcmVkKTsKKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKTsKKworICAgICAgaW5saW5lIGl0ZXJhdG9yCisgICAgICBiZWdpbigpOworCisgICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBpdGVyYXRvcgorICAgICAgZW5kKCk7CisKKyAgICAgIGlubGluZSBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3Q7CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X3ZhbGlkKCkgY29uc3Q7CisjZW5kaWYgCisKKyNpZmRlZiBQQl9EU19MVV9NQVBfVFJBQ0VfCisgICAgICB2b2lkCisgICAgICB0cmFjZSgpIGNvbnN0OworI2VuZGlmCisKKyAgICBwcm90ZWN0ZWQ6CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0PgorICAgICAgdm9pZAorICAgICAgY29weV9mcm9tX3JhbmdlKEl0LCBJdCk7CisKKyAgICBwcml2YXRlOgorI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyAgICAgIGZyaWVuZCBjbGFzcyBpdGVyYXRvcl87CisjZW5kaWYgCisKKyAgICAgIGZyaWVuZCBjbGFzcyBjb25zdF9pdGVyYXRvcl87CisKKyAgICAgIGlubGluZSBlbnRyeV9wb2ludGVyCisgICAgICBhbGxvY2F0ZV9uZXdfZW50cnkoY29uc3RfcmVmZXJlbmNlLCBmYWxzZV90eXBlKTsKKworICAgICAgaW5saW5lIGVudHJ5X3BvaW50ZXIKKyAgICAgIGFsbG9jYXRlX25ld19lbnRyeShjb25zdF9yZWZlcmVuY2UsIHRydWVfdHlwZSk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgorICAgICAgaW5saW5lIHN0YXRpYyB2b2lkCisgICAgICBpbml0X2VudHJ5X21ldGFkYXRhKGVudHJ5X3BvaW50ZXIsIHR5cGVfdG9fdHlwZTxNZXRhZGF0YT4pOworCisgICAgICBpbmxpbmUgc3RhdGljIHZvaWQKKyAgICAgIGluaXRfZW50cnlfbWV0YWRhdGEoZW50cnlfcG9pbnRlciwgdHlwZV90b190eXBlPG51bGxfbHVfbWV0YWRhdGE+KTsKKworICAgICAgdm9pZAorICAgICAgZGVhbGxvY2F0ZV9hbGwoKTsKKworICAgICAgdm9pZAorICAgICAgZXJhc2VfbmV4dChlbnRyeV9wb2ludGVyKTsKKworICAgICAgdm9pZAorICAgICAgYWN0dWFsX2VyYXNlX2VudHJ5KGVudHJ5X3BvaW50ZXIpOworCisgICAgICB2b2lkCisgICAgICBpbmNfaXRfc3RhdGUoY29uc3RfcG9pbnRlciYgcl9wX3ZhbHVlLCBlbnRyeV9wb2ludGVyJiByX3BvcykgY29uc3QKKyAgICAgIHsKKwlyX3BvcyA9IHJfcG9zLT5tX3BfbmV4dDsKKwlyX3BfdmFsdWUgPSAocl9wb3MgPT0gTlVMTCkgPyBOVUxMIDogJnJfcG9zLT5tX3ZhbHVlOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KKyAgICAgIGlubGluZSBzdGF0aWMgYm9vbAorICAgICAgYXBwbHlfdXBkYXRlKGVudHJ5X3BvaW50ZXIsIHR5cGVfdG9fdHlwZTxNZXRhZGF0YT4pOworCisgICAgICBpbmxpbmUgc3RhdGljIGJvb2wKKyAgICAgIGFwcGx5X3VwZGF0ZShlbnRyeV9wb2ludGVyLCB0eXBlX3RvX3R5cGU8bnVsbF9sdV9tZXRhZGF0YT4pOworCisgICAgICBpbmxpbmUgZW50cnlfcG9pbnRlcgorICAgICAgZmluZF9pbXAoY29uc3Rfa2V5X3JlZmVyZW5jZSkgY29uc3Q7CisKKyAgICAgIHN0YXRpYyBlbnRyeV9hbGxvY2F0b3Igc19lbnRyeV9hbGxvY2F0b3I7CisgICAgICBzdGF0aWMgRXFfRm4gc19lcV9mbjsKKyAgICAgIHN0YXRpYyBVcGRhdGVfUG9saWN5IHNfdXBkYXRlX3BvbGljeTsKKyAgICAgIHN0YXRpYyB0eXBlX3RvX3R5cGU8dXBkYXRlX21ldGFkYXRhPiBzX21ldGFkYXRhX3R5cGVfaW5kaWNhdG9yOworICAgICAgc3RhdGljIG51bGxfbHVfbWV0YWRhdGEgc19udWxsX2x1X21ldGFkYXRhOworCisgICAgICBtdXRhYmxlIGVudHJ5X3BvaW50ZXIgbV9wX2w7CisgICAgfTsKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9jb25zdHJ1Y3Rvcl9kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9pbmZvX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9kZWJ1Z19mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vaXRlcmF0b3JzX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9lcmFzZV9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vZmluZF9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy90cmFjZV9mbl9pbXBzLmhwcD4KKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKyN1bmRlZiAgUEJfRFNfVFlQRVNfVFJBSVRTX0NfREVDCisjdW5kZWYgUEJfRFNfREVCVUdfTUFQX0JBU0VfQ19ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19OQU1FCisjdW5kZWYgUEJfRFNfVjJGCisjdW5kZWYgUEJfRFNfRVAyVlAKKyN1bmRlZiBQQl9EU19WMlMKKworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9tYXBfL3RyYWNlX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vdHJhY2VfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA4YWFjYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9tYXBfL3RyYWNlX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNTkgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHRyYWNlX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgbHVfbWFwXy4KKyAqLworCisjaWZkZWYgUEJfRFNfTFVfTUFQX1RSQUNFXworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordHJhY2UoKSBjb25zdAoreworICBzdGQ6OmNlcnIgPDwgbV9wX2wgPDwgc3RkOjplbmRsIDw8IHN0ZDo6ZW5kbDsKKyAgY29uc3RfZW50cnlfcG9pbnRlciBwX2wgPSBtX3BfbDsKKyAgd2hpbGUgKHBfbCAhPSBOVUxMKQorICAgIHsKKyAgICAgIHN0ZDo6Y2VyciA8PCBQQl9EU19WMkYocF9sLT5tX3ZhbHVlKSA8PCBzdGQ6OmVuZGw7CisgICAgICBwX2wgPSBwX2wtPm1fcF9uZXh0OworICAgIH0KKyAgc3RkOjpjZXJyIDw8IHN0ZDo6ZW5kbDsKK30KKworI2VuZGlmIAorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfcG9saWN5L2NvdW50ZXJfbHVfbWV0YWRhdGEuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX3BvbGljeS9jb3VudGVyX2x1X21ldGFkYXRhLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWY3ZmU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX3BvbGljeS9jb3VudGVyX2x1X21ldGFkYXRhLmhwcApAQCAtMCwwICsxLDg2IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBjb3VudGVyX2x1X21ldGFkYXRhLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb24gb2YgYSBsdSBjb3VudGVyIHBvbGljeSdzIG1ldGFkYXRhLgorICovCisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNpemVfVHlwZT4KKyAgICBjbGFzcyBjb3VudGVyX2x1X3BvbGljeV9iYXNlOworCisgICAgLy8gQSBsaXN0LXVwZGF0ZSBtZXRhZGF0YSB0eXBlIHRoYXQgbW92ZXMgZWxlbWVudHMgdG8gdGhlIGZyb250IG9mCisgICAgLy8gdGhlIGxpc3QgYmFzZWQgb24gdGhlIGNvdW50ZXIgYWxnb3JpdGhtLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNpemVfVHlwZSA9IHNpemVfdD4KKyAgICBjbGFzcyBjb3VudGVyX2x1X21ldGFkYXRhCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgU2l6ZV9UeXBlIHNpemVfdHlwZTsKKworICAgIHByaXZhdGU6CisgICAgICBjb3VudGVyX2x1X21ldGFkYXRhKHNpemVfdHlwZSBpbml0X2NvdW50KSA6IG1fY291bnQoaW5pdF9jb3VudCkKKyAgICAgIHsgfQorCisgICAgICBmcmllbmQgY2xhc3MgY291bnRlcl9sdV9wb2xpY3lfYmFzZTxzaXplX3R5cGU+OworCisgICAgICBtdXRhYmxlIHNpemVfdHlwZSBtX2NvdW50OworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTaXplX1R5cGU+CisgICAgY2xhc3MgY291bnRlcl9sdV9wb2xpY3lfYmFzZQorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmIFNpemVfVHlwZSBzaXplX3R5cGU7CisKKyAgICAgIGNvdW50ZXJfbHVfbWV0YWRhdGE8c2l6ZV90eXBlPgorICAgICAgb3BlcmF0b3IoKShzaXplX3R5cGUgbWF4X3NpemUpIGNvbnN0CisgICAgICB7IHJldHVybiBjb3VudGVyX2x1X21ldGFkYXRhPFNpemVfVHlwZT4oc3RkOjpyYW5kKCkgJSBtYXhfc2l6ZSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGFfUmVmZXJlbmNlPgorICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IoKShNZXRhZGF0YV9SZWZlcmVuY2Ugcl9kYXRhLCBzaXplX3R5cGUgbV9tYXhfY291bnQpIGNvbnN0CisgICAgICB7CisJaWYgKCsrcl9kYXRhLm1fY291bnQgIT0gbV9tYXhfY291bnQpCisJICByZXR1cm4gZmFsc2U7CisJcl9kYXRhLm1fY291bnQgPSAwOworCXJldHVybiB0cnVlOworICAgICAgfQorICAgIH07CisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX3BvbGljeS9jb3VudGVyX2x1X3BvbGljeV9pbXAuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX3BvbGljeS9jb3VudGVyX2x1X3BvbGljeV9pbXAuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NGE5ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfcG9saWN5L2NvdW50ZXJfbHVfcG9saWN5X2ltcC5ocHAKQEAgLTAsMCArMSw1MSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY291bnRlcl9sdV9wb2xpY3lfaW1wLmhwcAorICogQ29udGFpbnMgYSBsdSBjb3VudGVyIHBvbGljeSBpbXBsZW1lbnRhdGlvbi4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworZGV0YWlsOjpjb3VudGVyX2x1X21ldGFkYXRhPHR5cGVuYW1lIEFsbG9jYXRvcjo6c2l6ZV90eXBlPgorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorb3BlcmF0b3IoKSgpIGNvbnN0Cit7IHJldHVybiAoYmFzZV90eXBlOjpvcGVyYXRvcigpKG1heF9jb3VudCkpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitvcGVyYXRvcigpKG1ldGFkYXRhX3JlZmVyZW5jZSByX2RhdGEpIGNvbnN0Cit7IHJldHVybiAoYmFzZV90eXBlOjpvcGVyYXRvcigpKHJfZGF0YSwgbWF4X2NvdW50KSk7IH0KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9wb2xpY3kvbXRmX2x1X3BvbGljeV9pbXAuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX3BvbGljeS9tdGZfbHVfcG9saWN5X2ltcC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ0MjZjNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9wb2xpY3kvbXRmX2x1X3BvbGljeV9pbXAuaHBwCkBAIC0wLDAgKzEsNTUgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIG10Zl9sdV9wb2xpY3lfaW1wLmhwcAorICogQ29udGFpbnMgYSBtb3ZlLXRvLWZyb250IHBvbGljeSBpbXBsZW1lbnRhdGlvbi4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworbnVsbF9sdV9tZXRhZGF0YSBQQl9EU19DTEFTU19DX0RFQzo6c19tZXRhZGF0YTsKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjptZXRhZGF0YV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitvcGVyYXRvcigpKCkgY29uc3QKK3sgcmV0dXJuIHNfbWV0YWRhdGE7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitvcGVyYXRvcigpKG1ldGFkYXRhX3JlZmVyZW5jZSAvKnJfZGF0YSovKSBjb25zdAoreyByZXR1cm4gdHJ1ZTsgfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfcG9saWN5L3NhbXBsZV91cGRhdGVfcG9saWN5LmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9wb2xpY3kvc2FtcGxlX3VwZGF0ZV9wb2xpY3kuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZGExZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfcG9saWN5L3NhbXBsZV91cGRhdGVfcG9saWN5LmhwcApAQCAtMCwwICsxLDc0IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBzYW1wbGVfdXBkYXRlX3BvbGljeS5ocHAKKyAqIENvbnRhaW5zIGEgc2FtcGxlIHBvbGljeSBmb3IgbGlzdCB1cGRhdGUgY29udGFpbmVycy4KKyAqLworCisjaWZuZGVmIFBCX0RTX1NBTVBMRV9VUERBVEVfUE9MSUNZX0hQUAorI2RlZmluZSBQQl9EU19TQU1QTEVfVVBEQVRFX1BPTElDWV9IUFAKKworLy8gQSBzYW1wbGUgbGlzdC11cGRhdGUgcG9saWN5Lgorc3RydWN0IHNhbXBsZV91cGRhdGVfcG9saWN5Cit7CisgIC8vIERlZmF1bHQgY29uc3RydWN0b3IuCisgIHNhbXBsZV91cGRhdGVfcG9saWN5KCk7CisKKyAgLy8gQ29weSBjb25zdHJ1Y3Rvci4KKyAgc2FtcGxlX3VwZGF0ZV9wb2xpY3koY29uc3Qgc2FtcGxlX3VwZGF0ZV9wb2xpY3kmKTsKKworICAvLyBTd2FwcyBjb250ZW50LgorICBpbmxpbmUgdm9pZAorICBzd2FwKHNhbXBsZV91cGRhdGVfcG9saWN5JiBvdGhlcik7CisKK3Byb3RlY3RlZDoKKyAgLy8gTWV0YWRhdGEgb24gd2hpY2ggdGhpcyBmdW5jdG9yIG9wZXJhdGVzLgorICB0eXBlZGVmIHNvbWVfbWV0YWRhdGFfdHlwZSBtZXRhZGF0YV90eXBlOworCisgIC8vIENyZWF0ZXMgYSBtZXRhZGF0YSBvYmplY3QuCisgIG1ldGFkYXRhX3R5cGUKKyAgb3BlcmF0b3IoKSgpIGNvbnN0OworCisgIC8vIERlY2lkZXMgd2hldGhlciBhIG1ldGFkYXRhIG9iamVjdCBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIGZyb250IG9mCisgIC8vIHRoZSBsaXN0LiBBIGxpc3QtdXBkYXRlIGJhc2VkIGNvbnRhaW5lcnMgb2JqZWN0IHdpbGwgY2FsbCB0aGlzCisgIC8vIG1ldGhvZCB0byBkZWNpZGUgd2hldGhlciB0byBtb3ZlIGEgbm9kZSB0byB0aGUgZnJvbnQgb2YgdGhlCisgIC8vIGxpc3QuIFRoZSBtZXRob2Qgc2hvdWxlIHJldHVybiB0cnVlIGlmIHRoZSBub2RlIHNob3VsZCBiZSBtb3ZlZAorICAvLyB0byB0aGUgZnJvbnQgb2YgdGhlIGxpc3QuCisgIGJvb2wKKyAgb3BlcmF0b3IoKShtZXRhZGF0YV9yZWZlcmVuY2UpIGNvbnN0OworfTsKKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9jb25kX2R0b3IuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9jb25kX2R0b3IuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYzRiOWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL2NvbmRfZHRvci5ocHAKQEAgLTAsMCArMSw3NCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY29uZF9kdG9yLmhwcAorICogQ29udGFpbnMgYSBjb25kaXRpb25hbCBkZXN0cnVjdG9yCisgKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgU2l6ZV9UeXBlPgorY2xhc3MgY29uZF9kdG9yCit7CitwdWJsaWM6CisgIGNvbmRfZHRvcih2YWx1ZV92ZWN0b3IgYV92ZWMsIGl0ZXJhdG9yJiByX2xhc3RfaXQsIFNpemVfVHlwZSB0b3RhbF9zaXplKSAKKyAgOiBtX2FfdmVjKGFfdmVjKSwgbV9yX2xhc3RfaXQocl9sYXN0X2l0KSwgbV9tYXhfc2l6ZSh0b3RhbF9zaXplKSwKKyAgICBtX25vX2FjdGlvbihmYWxzZSkKKyAgeyB9CisKKyAgfmNvbmRfZHRvcigpCisgIHsKKyAgICBpZiAobV9ub19hY3Rpb24pCisgICAgICByZXR1cm47CisgICAgaXRlcmF0b3IgaXQgPSBtX2FfdmVjOworICAgIHdoaWxlIChpdCAhPSBtX3JfbGFzdF9pdCkKKyAgICAgIHsKKwlpdC0+fnZhbHVlX3R5cGUoKTsKKwkrK2l0OworICAgICAgfQorCisgICAgaWYgKG1fbWF4X3NpemUgPiAwKQorICAgICAgdmFsdWVfYWxsb2NhdG9yKCkuZGVhbGxvY2F0ZShtX2FfdmVjLCBtX21heF9zaXplKTsKKyAgfQorCisgIGlubGluZSB2b2lkCisgIHNldF9ub19hY3Rpb24oKQorICB7IG1fbm9fYWN0aW9uID0gdHJ1ZTsgfQorCitwcm90ZWN0ZWQ6CisgIHZhbHVlX3ZlY3RvciBtX2FfdmVjOworICBpdGVyYXRvciYgbV9yX2xhc3RfaXQ7CisgIGNvbnN0IFNpemVfVHlwZSBtX21heF9zaXplOworICBib29sIG1fbm9fYWN0aW9uOworfTsKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NWI5ODEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMjczIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBjb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIG92X3RyZWVfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6dmFsdWVfYWxsb2NhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6c192YWx1ZV9hbGxvYzsKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjptZXRhZGF0YV9hbGxvY2F0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjpzX21ldGFkYXRhX2FsbG9jOworCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfT1ZfVFJFRV9DTEFTU19OQU1FKCkgOgorICBtX2FfdmFsdWVzKE5VTEwpLAorICBtX2FfbWV0YWRhdGEoTlVMTCksCisgIG1fZW5kX2l0KE5VTEwpLAorICBtX3NpemUoMCkKK3sgX0dMSUJDWFhfREVCVUdfT05MWShQQl9EU19DTEFTU19DX0RFQzo6YXNzZXJ0X3ZhbGlkKCk7KSB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19PVl9UUkVFX0NMQVNTX05BTUUoY29uc3QgQ21wX0ZuJiByX2NtcF9mbikgOgorICBjbXBfZm5fYmFzZShyX2NtcF9mbiksCisgIG1fYV92YWx1ZXMoTlVMTCksCisgIG1fYV9tZXRhZGF0YShOVUxMKSwKKyAgbV9lbmRfaXQoTlVMTCksCisgIG1fc2l6ZSgwKQoreyBfR0xJQkNYWF9ERUJVR19PTkxZKFBCX0RTX0NMQVNTX0NfREVDOjphc3NlcnRfdmFsaWQoKTspIH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK1BCX0RTX09WX1RSRUVfQ0xBU1NfTkFNRShjb25zdCBDbXBfRm4mIHJfY21wX2ZuLCBjb25zdCBub2RlX3VwZGF0ZSYgcl9ub2RlX3VwZGF0ZSkgOgorICBjbXBfZm5fYmFzZShyX2NtcF9mbiksCisgIG5vZGVfdXBkYXRlKHJfbm9kZV91cGRhdGUpLAorICBtX2FfdmFsdWVzKE5VTEwpLAorICBtX2FfbWV0YWRhdGEoTlVMTCksCisgIG1fZW5kX2l0KE5VTEwpLAorICBtX3NpemUoMCkKK3sgX0dMSUJDWFhfREVCVUdfT05MWShQQl9EU19DTEFTU19DX0RFQzo6YXNzZXJ0X3ZhbGlkKCk7KSB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19PVl9UUkVFX0NMQVNTX05BTUUoY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKSA6CisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgZGVidWdfYmFzZShvdGhlciksCisjZW5kaWYgCisjaWZkZWYgUEJfRFNfVFJFRV9UUkFDRQorICBQQl9EU19UUkVFX1RSQUNFX0JBU0VfQ19ERUMob3RoZXIpLAorI2VuZGlmIAorICBjbXBfZm5fYmFzZShvdGhlciksCisgIG5vZGVfdXBkYXRlKG90aGVyKSwKKyAgbV9hX3ZhbHVlcyhOVUxMKSwKKyAgbV9hX21ldGFkYXRhKE5VTEwpLAorICBtX2VuZF9pdChOVUxMKSwKKyAgbV9zaXplKDApCit7CisgIGNvcHlfZnJvbV9vcmRlcmVkX3JhbmdlKG90aGVyLmJlZ2luKCksIG90aGVyLmVuZCgpKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShQQl9EU19DTEFTU19DX0RFQzo6YXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgSXQ+CitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY29weV9mcm9tX3JhbmdlKEl0IGZpcnN0X2l0LCBJdCBsYXN0X2l0KQoreworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyAgdHlwZWRlZgorICAgIHN0ZDo6bWFwPAorICAgIGtleV90eXBlLAorICAgIG1hcHBlZF90eXBlLAorICAgIENtcF9GbiwKKyAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKyAgICB2YWx1ZV90eXBlPjo6b3RoZXI+CisgICAgbWFwX3R5cGU7CisjZWxzZSAKKyAgdHlwZWRlZgorICAgIHN0ZDo6c2V0PAorICAgIGtleV90eXBlLAorICAgIENtcF9GbiwKKyAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKyAgICBLZXk+OjpvdGhlcj4KKyAgICBtYXBfdHlwZTsKKyNlbmRpZiAKKworICBtYXBfdHlwZSBtKGZpcnN0X2l0LCBsYXN0X2l0KTsKKyAgY29weV9mcm9tX29yZGVyZWRfcmFuZ2UobS5iZWdpbigpLCBtLmVuZCgpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIEl0Pgordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY29weV9mcm9tX29yZGVyZWRfcmFuZ2UoSXQgZmlyc3RfaXQsIEl0IGxhc3RfaXQpCit7CisgIGNvbnN0IHNpemVfdHlwZSBsZW4gPSBzdGQ6OmRpc3RhbmNlKGZpcnN0X2l0LCBsYXN0X2l0KTsKKyAgaWYgKGxlbiA9PSAwKQorICAgIHJldHVybjsKKworICB2YWx1ZV92ZWN0b3IgYV92YWx1ZXMgPSBzX3ZhbHVlX2FsbG9jLmFsbG9jYXRlKGxlbik7CisgIGl0ZXJhdG9yIHRhcmdldF9pdCA9IGFfdmFsdWVzOworICBJdCBzb3VyY2VfaXQgPSBmaXJzdF9pdDsKKyAgSXQgc291cmNlX2VuZF9pdCA9IGxhc3RfaXQ7CisKKyAgY29uZF9kdG9yPHNpemVfdHlwZT4gY2QoYV92YWx1ZXMsIHRhcmdldF9pdCwgbGVuKTsKKyAgd2hpbGUgKHNvdXJjZV9pdCAhPSBzb3VyY2VfZW5kX2l0KQorICAgIHsKKyAgICAgIG5ldyAoY29uc3RfY2FzdDx2b2lkKiA+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqID4odGFyZ2V0X2l0KSkpCisJdmFsdWVfdHlwZSgqc291cmNlX2l0KyspOworCisgICAgICArK3RhcmdldF9pdDsKKyAgICB9CisKKyAgcmVhbGxvY2F0ZV9tZXRhZGF0YSgobm9kZV91cGRhdGUqICl0aGlzLCBsZW4pOworICBjZC5zZXRfbm9fYWN0aW9uKCk7CisgIG1fYV92YWx1ZXMgPSBhX3ZhbHVlczsKKyAgbV9zaXplID0gbGVuOworICBtX2VuZF9pdCA9IG1fYV92YWx1ZXMgKyBtX3NpemU7CisgIHVwZGF0ZShQQl9EU19ub2RlX2JlZ2luX2ltcCgpLCAobm9kZV91cGRhdGUqICl0aGlzKTsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgIGNvbnN0X2l0ZXJhdG9yIGRiZ19pdCA9IG1fYV92YWx1ZXM7CisgIHdoaWxlIChkYmdfaXQgIT0gbV9lbmRfaXQpCisgICAgeworICAgICAgZGVidWdfYmFzZTo6aW5zZXJ0X25ldyhQQl9EU19WMkYoKmRiZ19pdCkpOworICAgICAgZGJnX2l0Kys7CisgICAgfQorICBQQl9EU19DTEFTU19DX0RFQzo6YXNzZXJ0X3ZhbGlkKCk7CisjZW5kaWYgCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NvcHlfZnJvbV9vcmRlcmVkX3JhbmdlKEl0IGZpcnN0X2l0LCBJdCBsYXN0X2l0LCBJdCBvdGhlcl9maXJzdF9pdCwgCisJCQlJdCBvdGhlcl9sYXN0X2l0KQoreworICBjbGVhcigpOworICBjb25zdCBzaXplX3R5cGUgbGVuID0gc3RkOjpkaXN0YW5jZShmaXJzdF9pdCwgbGFzdF9pdCkgCisgICAgCQkgICAgICAgICArIHN0ZDo6ZGlzdGFuY2Uob3RoZXJfZmlyc3RfaXQsIG90aGVyX2xhc3RfaXQpOworCisgIHZhbHVlX3ZlY3RvciBhX3ZhbHVlcyA9IHNfdmFsdWVfYWxsb2MuYWxsb2NhdGUobGVuKTsKKworICBpdGVyYXRvciB0YXJnZXRfaXQgPSBhX3ZhbHVlczsKKyAgSXQgc291cmNlX2l0ID0gZmlyc3RfaXQ7CisgIEl0IHNvdXJjZV9lbmRfaXQgPSBsYXN0X2l0OworCisgIGNvbmRfZHRvcjxzaXplX3R5cGU+IGNkKGFfdmFsdWVzLCB0YXJnZXRfaXQsIGxlbik7CisgIHdoaWxlIChzb3VyY2VfaXQgIT0gc291cmNlX2VuZF9pdCkKKyAgICB7CisgICAgICBuZXcgKGNvbnN0X2Nhc3Q8dm9pZCogPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKiA+KHRhcmdldF9pdCkpKQorCXZhbHVlX3R5cGUoKnNvdXJjZV9pdCsrKTsKKyAgICAgICsrdGFyZ2V0X2l0OworICAgIH0KKworICBzb3VyY2VfaXQgPSBvdGhlcl9maXJzdF9pdDsKKyAgc291cmNlX2VuZF9pdCA9IG90aGVyX2xhc3RfaXQ7CisKKyAgd2hpbGUgKHNvdXJjZV9pdCAhPSBzb3VyY2VfZW5kX2l0KQorICAgIHsKKyAgICAgIG5ldyAoY29uc3RfY2FzdDx2b2lkKiA+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqID4odGFyZ2V0X2l0KSkpCisJdmFsdWVfdHlwZSgqc291cmNlX2l0KyspOworICAgICAgKyt0YXJnZXRfaXQ7CisgICAgfQorCisgIHJlYWxsb2NhdGVfbWV0YWRhdGEoKG5vZGVfdXBkYXRlKiApdGhpcywgbGVuKTsKKyAgY2Quc2V0X25vX2FjdGlvbigpOworICBtX2FfdmFsdWVzID0gYV92YWx1ZXM7CisgIG1fc2l6ZSA9IGxlbjsKKyAgbV9lbmRfaXQgPSBtX2FfdmFsdWVzICsgbV9zaXplOworICB1cGRhdGUoUEJfRFNfbm9kZV9iZWdpbl9pbXAoKSwgKG5vZGVfdXBkYXRlKiApdGhpcyk7CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICBjb25zdF9pdGVyYXRvciBkYmdfaXQgPSBtX2FfdmFsdWVzOworICB3aGlsZSAoZGJnX2l0ICE9IG1fZW5kX2l0KQorICAgIHsKKyAgICAgIGRlYnVnX2Jhc2U6Omluc2VydF9uZXcoUEJfRFNfVjJGKCpkYmdfaXQpKTsKKyAgICAgIGRiZ19pdCsrOworICAgIH0KKyAgUEJfRFNfQ0xBU1NfQ19ERUM6OmFzc2VydF92YWxpZCgpOworI2VuZGlmIAorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICB2YWx1ZV9zd2FwKG90aGVyKTsKKyAgc3RkOjpzd2FwKChDbXBfRm4mICkoKnRoaXMpLCAoQ21wX0ZuJiApb3RoZXIpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3ZhbHVlX3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBzdGQ6OnN3YXAobV9hX3ZhbHVlcywgb3RoZXIubV9hX3ZhbHVlcyk7CisgIHN0ZDo6c3dhcChtX2FfbWV0YWRhdGEsIG90aGVyLm1fYV9tZXRhZGF0YSk7CisgIHN0ZDo6c3dhcChtX3NpemUsIG90aGVyLm1fc2l6ZSk7CisgIHN0ZDo6c3dhcChtX2VuZF9pdCwgb3RoZXIubV9lbmRfaXQpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OnN3YXAob3RoZXIpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK35QQl9EU19PVl9UUkVFX0NMQVNTX05BTUUoKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgY29uZF9kdG9yPHNpemVfdHlwZT4gY2QobV9hX3ZhbHVlcywgbV9lbmRfaXQsIG1fc2l6ZSk7CisgIHJlYWxsb2NhdGVfbWV0YWRhdGEoKG5vZGVfdXBkYXRlKiApdGhpcywgMCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordXBkYXRlKG5vZGVfaXRlcmF0b3IgLyppdCovLCBudWxsX25vZGVfdXBkYXRlX3BvaW50ZXIpCit7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIE5vZGVfVXBkYXRlPgordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordXBkYXRlKG5vZGVfaXRlcmF0b3IgbmRfaXQsIE5vZGVfVXBkYXRlKiBwX3VwZGF0ZSkKK3sKKyAgY29uc3Rfbm9kZV9pdGVyYXRvciBlbmRfaXQgPSBQQl9EU19ub2RlX2VuZF9pbXAoKTsKKyAgaWYgKG5kX2l0ID09IGVuZF9pdCkKKyAgICByZXR1cm47CisgIHVwZGF0ZShuZF9pdC5nZXRfbF9jaGlsZCgpLCBwX3VwZGF0ZSk7CisgIHVwZGF0ZShuZF9pdC5nZXRfcl9jaGlsZCgpLCBwX3VwZGF0ZSk7CisgIG5vZGVfdXBkYXRlOjpvcGVyYXRvcigpKG5kX2l0LCBlbmRfaXQpOworfQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9kZWJ1Z19mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vZGVidWdfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMyYThhZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vZGVidWdfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw4NCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZGVidWdfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBvdl90cmVlXy4KKyAqLworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF92YWxpZCgpIGNvbnN0Cit7CisgIHN0ZDo6Y291dCA8PCAiYXYxIiA8PCBzdGQ6OmVuZGw7CisKKyAgaWYgKG1fYV92YWx1ZXMgPT0gTlVMTCB8fCBtX2VuZF9pdCA9PSBOVUxMIHx8IG1fc2l6ZSA9PSAwKQorICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX2FfdmFsdWVzID09IE5VTEwgJiYgIG1fZW5kX2l0ID09IE5VTEwgJiYgbV9zaXplID09IDApOworCisgIHN0ZDo6Y291dCA8PCAiYXYyIiA8PCBzdGQ6OmVuZGw7CisgIGFzc2VydF9pdGVyYXRvcnMoKTsKKyAgc3RkOjpjb3V0IDw8ICJhdjMiIDw8IHN0ZDo6ZW5kbDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9pdGVyYXRvcnMoKSBjb25zdAoreworICBkZWJ1Z19iYXNlOjpjaGVja19zaXplKG1fc2l6ZSk7CisgIHNpemVfdHlwZSBpdGVyYXRlZF9udW0gPSAwOworICBjb25zdF9pdGVyYXRvciBwcmV2X2l0ID0gZW5kKCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCggbV9lbmRfaXQgPT0gbV9hX3ZhbHVlcyArIG1fc2l6ZSk7CisgIGZvciAoY29uc3RfaXRlcmF0b3IgaXQgPSBiZWdpbigpOyBpdCAhPSBlbmQoKTsgKytpdCkKKyAgICB7CisgICAgICArK2l0ZXJhdGVkX251bTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6Y2hlY2tfa2V5X2V4aXN0cyhQQl9EU19WMkYoKml0KSk7KQorICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGxvd2VyX2JvdW5kKFBCX0RTX1YyRigqaXQpKSA9PSBpdCk7CisgICAgICBjb25zdF9pdGVyYXRvciB1cHBlcl9ib3VuZF9pdCA9IHVwcGVyX2JvdW5kKFBCX0RTX1YyRigqaXQpKTsKKyAgICAgIC0tdXBwZXJfYm91bmRfaXQ7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQodXBwZXJfYm91bmRfaXQgPT0gaXQpOworICAgICAgaWYgKHByZXZfaXQgIT0gZW5kKCkpCisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKENtcF9Gbjo6b3BlcmF0b3IoKShQQl9EU19WMkYoKnByZXZfaXQpLAorCQkJCQkJIFBCX0RTX1YyRigqaXQpKSk7CisgICAgICBwcmV2X2l0ID0gaXQ7CisgICAgfQorICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoaXRlcmF0ZWRfbnVtID09IG1fc2l6ZSk7Cit9CisKKyNlbmRpZiAKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9lcmFzZV9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vZXJhc2VfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVlN2QxYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vZXJhc2VfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxOTMgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGVyYXNlX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3Igb3ZfdHJlZV8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NsZWFyKCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIGlmIChtX3NpemUgPT0gMCkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICAgIHJldHVybjsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICByZWFsbG9jYXRlX21ldGFkYXRhKChub2RlX3VwZGF0ZSogKXRoaXMsIDApOworICAgICAgY29uZF9kdG9yPHNpemVfdHlwZT4gY2QobV9hX3ZhbHVlcywgbV9lbmRfaXQsIG1fc2l6ZSk7CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6Y2xlYXIoKTspCisgIG1fYV92YWx1ZXMgPSBOVUxMOworICBtX3NpemUgPSAwOworICBtX2VuZF9pdCA9IG1fYV92YWx1ZXM7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgUHJlZD4KK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZV9pZihQcmVkIHByZWQpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorCisjaWZkZWYgUEJfRFNfUkVHUkVTU0lPTgorICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6Z3JvdXBfYWRqdXN0b3IgYWRqdXN0KG1fc2l6ZSk7CisjZW5kaWYgCisKKyAgc2l6ZV90eXBlIG5ld19zaXplID0gMDsKKyAgc2l6ZV90eXBlIG51bV92YWxfZXJzZCA9IDA7CisgIGl0ZXJhdG9yIHNvdXJjZV9pdCA9IG1fYV92YWx1ZXM7CisgIGZvciAoc291cmNlX2l0ID0gYmVnaW4oKTsgc291cmNlX2l0ICE9IG1fZW5kX2l0OyArK3NvdXJjZV9pdCkKKyAgICBpZiAoIXByZWQoKnNvdXJjZV9pdCkpCisgICAgICArK25ld19zaXplOworICAgIGVsc2UKKyAgICAgICsrbnVtX3ZhbF9lcnNkOworCisgIGlmIChuZXdfc2l6ZSA9PSAwKQorICAgIHsKKyAgICAgIGNsZWFyKCk7CisgICAgICByZXR1cm4gbnVtX3ZhbF9lcnNkOworICAgIH0KKworICB2YWx1ZV92ZWN0b3IgYV9uZXdfdmFsdWVzID0gc192YWx1ZV9hbGxvYy5hbGxvY2F0ZShuZXdfc2l6ZSk7CisgIGl0ZXJhdG9yIHRhcmdldF9pdCA9IGFfbmV3X3ZhbHVlczsKKyAgY29uZF9kdG9yPHNpemVfdHlwZT4gY2QoYV9uZXdfdmFsdWVzLCB0YXJnZXRfaXQsIG5ld19zaXplKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpjbGVhcigpKTsKKyAgZm9yIChzb3VyY2VfaXQgPSBiZWdpbigpOyBzb3VyY2VfaXQgIT0gbV9lbmRfaXQ7ICsrc291cmNlX2l0KQorICAgIHsKKyAgICAgIGlmICghcHJlZCgqc291cmNlX2l0KSkKKyAgICAgICAgeworCSAgbmV3IChjb25zdF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKiA+KHRhcmdldF9pdCkpKQorCSAgICB2YWx1ZV90eXBlKCpzb3VyY2VfaXQpOworCisJICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6Omluc2VydF9uZXcoUEJfRFNfVjJGKCpzb3VyY2VfaXQpKSk7CisJICArK3RhcmdldF9pdDsKKyAgICAgICAgfQorICAgIH0KKworICByZWFsbG9jYXRlX21ldGFkYXRhKChub2RlX3VwZGF0ZSogKXRoaXMsIG5ld19zaXplKTsKKyAgY2Quc2V0X25vX2FjdGlvbigpOworCisgIHsKKyAgICBjb25kX2R0b3I8c2l6ZV90eXBlPiBjZDEobV9hX3ZhbHVlcywgbV9lbmRfaXQsIG1fc2l6ZSk7CisgIH0KKworICBtX2FfdmFsdWVzID0gYV9uZXdfdmFsdWVzOworICBtX3NpemUgPSBuZXdfc2l6ZTsKKyAgbV9lbmRfaXQgPSB0YXJnZXRfaXQ7CisgIHVwZGF0ZShub2RlX2JlZ2luKCksIChub2RlX3VwZGF0ZSogKXRoaXMpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgcmV0dXJuIG51bV92YWxfZXJzZDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIEl0PgorSXQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlX2ltcChJdCBpdCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIGlmIChpdCA9PSBlbmQoKSkKKyAgICByZXR1cm4gZW5kKCk7CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShQQl9EU19DTEFTU19DX0RFQzo6Y2hlY2tfa2V5X2V4aXN0cyhQQl9EU19WMkYoKml0KSk7KQorCisjaWZkZWYgUEJfRFNfUkVHUkVTU0lPTgorICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6Z3JvdXBfYWRqdXN0b3IgYWRqdXN0KG1fc2l6ZSk7CisjZW5kaWYgCisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fc2l6ZSA+IDApOworICB2YWx1ZV92ZWN0b3IgYV92YWx1ZXMgPSBzX3ZhbHVlX2FsbG9jLmFsbG9jYXRlKG1fc2l6ZSAtIDEpOworICBpdGVyYXRvciBzb3VyY2VfaXQgPSBiZWdpbigpOworICBpdGVyYXRvciBzb3VyY2VfZW5kX2l0ID0gZW5kKCk7CisgIGl0ZXJhdG9yIHRhcmdldF9pdCA9IGFfdmFsdWVzOworICBpdGVyYXRvciByZXRfaXQgPSBlbmQoKTsKKworICBjb25kX2R0b3I8c2l6ZV90eXBlPiBjZChhX3ZhbHVlcywgdGFyZ2V0X2l0LCBtX3NpemUgLSAxKTsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKHNpemVfdHlwZSBjbnQgPSAwOykKKworICB3aGlsZSAoc291cmNlX2l0ICE9IHNvdXJjZV9lbmRfaXQpCisgICAgeworICAgICAgaWYgKHNvdXJjZV9pdCAhPSBpdCkKKwl7CisgICAgICAgICAgX0dMSUJDWFhfREVCVUdfT05MWSgrK2NudDspCisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoY250ICE9IG1fc2l6ZSk7CisgICAgICAgICAgbmV3IChjb25zdF9jYXN0PHZvaWQqID4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCogPih0YXJnZXRfaXQpKSkKKwkgICAgICB2YWx1ZV90eXBlKCpzb3VyY2VfaXQpOworCisgICAgICAgICAgKyt0YXJnZXRfaXQ7CisJfQorICAgICAgZWxzZQorCXJldF9pdCA9IHRhcmdldF9pdDsKKyAgICArK3NvdXJjZV9pdDsKKyAgICB9CisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fc2l6ZSA+IDApOworICByZWFsbG9jYXRlX21ldGFkYXRhKChub2RlX3VwZGF0ZSogKXRoaXMsIG1fc2l6ZSAtIDEpOworICBjZC5zZXRfbm9fYWN0aW9uKCk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoUEJfRFNfQ0xBU1NfQ19ERUM6OmVyYXNlX2V4aXN0aW5nKFBCX0RTX1YyRigqaXQpKTspCisgIHsKKyAgICBjb25kX2R0b3I8c2l6ZV90eXBlPiBjZDEobV9hX3ZhbHVlcywgbV9lbmRfaXQsIG1fc2l6ZSk7CisgIH0KKworICBtX2FfdmFsdWVzID0gYV92YWx1ZXM7CisgIC0tbV9zaXplOworICBtX2VuZF9pdCA9IG1fYV92YWx1ZXMgKyBtX3NpemU7CisgIHVwZGF0ZShub2RlX2JlZ2luKCksIChub2RlX3VwZGF0ZSogKXRoaXMpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgcmV0dXJuIEl0KHJldF9pdCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZShjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5KQoreworICBwb2ludF9pdGVyYXRvciBpdCA9IGZpbmQocl9rZXkpOworICBpZiAoaXQgPT0gZW5kKCkpCisgICAgcmV0dXJuIGZhbHNlOworICBlcmFzZShpdCk7CisgIHJldHVybiB0cnVlOworfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL2luZm9fZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL2luZm9fZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk0MjFhZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vaW5mb19mbl9pbXBzLmhwcApAQCAtMCwwICsxLDYwIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBpbmZvX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3Igb3ZfdHJlZV8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitzaXplKCkgY29uc3QKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIHJldHVybiBtX3NpemU7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6OgorbWF4X3NpemUoKSBjb25zdAoreyByZXR1cm4gc192YWx1ZV9hbGxvYy5tYXhfc2l6ZSgpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgYm9vbAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZW1wdHkoKSBjb25zdAoreyByZXR1cm4gc2l6ZSgpID09IDA7IH0KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9pbnNlcnRfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFkMjc3YgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNjMgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGluc2VydF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIG92X3RyZWVfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CityZWFsbG9jYXRlX21ldGFkYXRhKG51bGxfbm9kZV91cGRhdGVfcG9pbnRlciwgc2l6ZV90eXBlKQoreyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX1VwZGF0ZV8+Cit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CityZWFsbG9jYXRlX21ldGFkYXRhKE5vZGVfVXBkYXRlXyogLCBzaXplX3R5cGUgbmV3X3NpemUpCit7CisgIG1ldGFkYXRhX3BvaW50ZXIgYV9uZXdfbWV0YWRhdGFfdmVjID0obmV3X3NpemUgPT0gMCkgPyBOVUxMIDogc19tZXRhZGF0YV9hbGxvYy5hbGxvY2F0ZShuZXdfc2l6ZSk7CisKKyAgaWYgKG1fYV9tZXRhZGF0YSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGZvciAoc2l6ZV90eXBlIGkgPSAwOyBpIDwgbV9zaXplOyArK2kpCisJbV9hX21ldGFkYXRhW2ldLn5tZXRhZGF0YV90eXBlKCk7CisgICAgICBzX21ldGFkYXRhX2FsbG9jLmRlYWxsb2NhdGUobV9hX21ldGFkYXRhLCBtX3NpemUpOworICAgIH0KKyAgc3RkOjpzd2FwKG1fYV9tZXRhZGF0YSwgYV9uZXdfbWV0YWRhdGFfdmVjKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9pdGVyYXRvcnNfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL2l0ZXJhdG9yc19mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjUyYzRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9pdGVyYXRvcnNfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxMDMgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGl0ZXJhdG9yc19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIG92X3RyZWVfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X25vZGVfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vZGVfYmVnaW4oKSBjb25zdAoreyByZXR1cm4gUEJfRFNfbm9kZV9iZWdpbl9pbXAoKTsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9ub2RlX2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6Citub2RlX2VuZCgpIGNvbnN0Cit7IHJldHVybiBQQl9EU19ub2RlX2VuZF9pbXAoKTsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6Citub2RlX2JlZ2luKCkKK3sgcmV0dXJuIFBCX0RTX25vZGVfYmVnaW5faW1wKCk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm9kZV9lbmQoKQoreyByZXR1cm4gUEJfRFNfbm9kZV9lbmRfaW1wKCk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3Rfbm9kZV9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfbm9kZV9iZWdpbl9pbXAoKSBjb25zdAoreworICByZXR1cm4gY29uc3Rfbm9kZV9pdGVyYXRvcihjb25zdF9jYXN0PHBvaW50ZXI+KG1pZF9wb2ludGVyKGJlZ2luKCksIGVuZCgpKSksCisJCQkgICAgICBjb25zdF9jYXN0PHBvaW50ZXI+KGJlZ2luKCkpLAorCQkJICAgICAgY29uc3RfY2FzdDxwb2ludGVyPihlbmQoKSksKG1fYV9tZXRhZGF0YSA9PSBOVUxMKT8KKwkJCSAgICAgIE5VTEwgOgorCQkJICAgICAgbWlkX3BvaW50ZXIobV9hX21ldGFkYXRhLCBtX2FfbWV0YWRhdGEgKyBtX3NpemUpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3Rfbm9kZV9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfbm9kZV9lbmRfaW1wKCkgY29uc3QKK3sKKyAgcmV0dXJuIGNvbnN0X25vZGVfaXRlcmF0b3IoZW5kKCksIGVuZCgpLCBlbmQoKSwKKwkJICAgICAobV9hX21ldGFkYXRhID09IE5VTEwpID8gTlVMTCA6IG1fYV9tZXRhZGF0YSArIG1fc2l6ZSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK1BCX0RTX25vZGVfYmVnaW5faW1wKCkKK3sKKyAgcmV0dXJuIG5vZGVfaXRlcmF0b3IobWlkX3BvaW50ZXIoYmVnaW4oKSwgZW5kKCkpLCBiZWdpbigpLCBlbmQoKSwKKwkJICAgICAgIChtX2FfbWV0YWRhdGEgPT0gTlVMTCkgPyBOVUxMIDogbWlkX3BvaW50ZXIobV9hX21ldGFkYXRhLCBtX2FfbWV0YWRhdGEgKyBtX3NpemUpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfbm9kZV9lbmRfaW1wKCkKK3sKKyAgcmV0dXJuIG5vZGVfaXRlcmF0b3IoZW5kKCksIGVuZCgpLAorCQkgIGVuZCgpLChtX2FfbWV0YWRhdGEgPT0gTlVMTCkgPyBOVUxMIDogbV9hX21ldGFkYXRhICsgbV9zaXplKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9ub2RlX2l0ZXJhdG9ycy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL25vZGVfaXRlcmF0b3JzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGZlZGMwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9ub2RlX2l0ZXJhdG9ycy5ocHAKQEAgLTAsMCArMSwyOTIgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIG5vZGVfaXRlcmF0b3JzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIG92X3RyZWVfLgorICovCisKKyNpZm5kZWYgUEJfRFNfT1ZfVFJFRV9OT0RFX0lURVJBVE9SU19IUFAKKyNkZWZpbmUgUEJfRFNfT1ZfVFJFRV9OT0RFX0lURVJBVE9SU19IUFAKKworI2luY2x1ZGUgPGV4dC9wYl9kcy90YWdfYW5kX3RyYWl0LmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3R5cGVfdXRpbHMuaHBwPgorI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworCisjZGVmaW5lIFBCX0RTX09WX1RSRUVfQ09OU1RfTk9ERV9JVEVSQVRPUl9DX0RFQwlcCisgICAgb3ZfdHJlZV9ub2RlX2NvbnN0X2l0XzxWYWx1ZV9UeXBlLCBNZXRhZGF0YV9UeXBlLCBBbGxvY2F0b3I+CisKKyAgICAvLyBDb25zdCBub2RlIHJlZmVyZW5jZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZV9UeXBlLCB0eXBlbmFtZSBNZXRhZGF0YV9UeXBlLCBjbGFzcyBBbGxvY2F0b3I+CisgICAgY2xhc3Mgb3ZfdHJlZV9ub2RlX2NvbnN0X2l0XworICAgIHsKKworICAgIHByb3RlY3RlZDoKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorICAgICAgVmFsdWVfVHlwZT46Om90aGVyOjpwb2ludGVyCisgICAgICBwb2ludGVyOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKwlWYWx1ZV9UeXBlPjo6b3RoZXI6OmNvbnN0X3BvaW50ZXIKKyAgICAgIGNvbnN0X3BvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCU1ldGFkYXRhX1R5cGU+OjpvdGhlcjo6Y29uc3RfcG9pbnRlcgorICAgICAgY29uc3RfbWV0YWRhdGFfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZiBQQl9EU19PVl9UUkVFX0NPTlNUX05PREVfSVRFUkFUT1JfQ19ERUMgdGhpc190eXBlOworCisgICAgcHJvdGVjdGVkOgorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQdHI+CisgICAgICBpbmxpbmUgc3RhdGljIFB0cgorICAgICAgbWlkX3BvaW50ZXIoUHRyIHBfYmVnaW4sIFB0ciBwX2VuZCkKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9lbmQgPj0gcF9iZWdpbik7CisJcmV0dXJuIChwX2JlZ2luICsgKHBfZW5kIC0gcF9iZWdpbikgLyAyKTsKKyAgICAgIH0KKworICAgIHB1YmxpYzoKKworICAgICAgdHlwZWRlZiB0cml2aWFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKKworICAgICAgdHlwZWRlZiB0cml2aWFsX2l0ZXJhdG9yX2RpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCVZhbHVlX1R5cGU+OjpvdGhlcjo6Y29uc3RfcG9pbnRlcgorICAgICAgdmFsdWVfdHlwZTsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8CisJdHlwZW5hbWUgcmVtb3ZlX2NvbnN0PAorCVZhbHVlX1R5cGU+Ojp0eXBlPjo6b3RoZXI6OmNvbnN0X3BvaW50ZXIKKyAgICAgIHJlZmVyZW5jZTsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8CisJdHlwZW5hbWUgcmVtb3ZlX2NvbnN0PAorCVZhbHVlX1R5cGU+Ojp0eXBlPjo6b3RoZXI6OmNvbnN0X3BvaW50ZXIKKyAgICAgIGNvbnN0X3JlZmVyZW5jZTsKKworICAgICAgdHlwZWRlZiBNZXRhZGF0YV9UeXBlIG1ldGFkYXRhX3R5cGU7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCW1ldGFkYXRhX3R5cGU+OjpvdGhlcjo6Y29uc3RfcmVmZXJlbmNlCisgICAgICBjb25zdF9tZXRhZGF0YV9yZWZlcmVuY2U7CisKKyAgICBwdWJsaWM6CisgICAgICBpbmxpbmUKKyAgICAgIG92X3RyZWVfbm9kZV9jb25zdF9pdF8oY29uc3RfcG9pbnRlciBwX25kID0gTlVMTCwgIGNvbnN0X3BvaW50ZXIgcF9iZWdpbl9uZCA9IE5VTEwsICBjb25zdF9wb2ludGVyIHBfZW5kX25kID0gTlVMTCwgIGNvbnN0X21ldGFkYXRhX3BvaW50ZXIgcF9tZXRhZGF0YSA9IE5VTEwpIDogbV9wX3ZhbHVlKGNvbnN0X2Nhc3Q8cG9pbnRlcj4ocF9uZCkpLCBtX3BfYmVnaW5fdmFsdWUoY29uc3RfY2FzdDxwb2ludGVyPihwX2JlZ2luX25kKSksIG1fcF9lbmRfdmFsdWUoY29uc3RfY2FzdDxwb2ludGVyPihwX2VuZF9uZCkpLCBtX3BfbWV0YWRhdGEocF9tZXRhZGF0YSkKKyAgICAgIHsgfQorCisgICAgICBpbmxpbmUgY29uc3RfcmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeyByZXR1cm4gbV9wX3ZhbHVlOyB9CisKKyAgICAgIGlubGluZSBjb25zdF9tZXRhZGF0YV9yZWZlcmVuY2UKKyAgICAgIGdldF9tZXRhZGF0YSgpIGNvbnN0CisgICAgICB7CisJZW51bQorCSAgeworCSAgICBoYXNfbWV0YWRhdGEgPSAhaXNfc2FtZTxNZXRhZGF0YV9UeXBlLCBudWxsX25vZGVfbWV0YWRhdGE+Ojp2YWx1ZQorCSAgfTsKKworCVBCX0RTX1NUQVRJQ19BU1NFUlQoc2hvdWxkX2hhdmVfbWV0YWRhdGEsIGhhc19tZXRhZGF0YSk7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF9tZXRhZGF0YSAhPSBOVUxMKTsKKwlyZXR1cm4gKm1fcF9tZXRhZGF0YTsKKyAgICAgIH0KKworICAgICAgaW5saW5lIHRoaXNfdHlwZQorICAgICAgZ2V0X2xfY2hpbGQoKSBjb25zdAorICAgICAgeworCWlmIChtX3BfYmVnaW5fdmFsdWUgPT0gbV9wX3ZhbHVlKQorCSAgcmV0dXJuICh0aGlzX3R5cGUobV9wX2JlZ2luX3ZhbHVlLCBtX3BfYmVnaW5fdmFsdWUsIG1fcF9iZWdpbl92YWx1ZSkpOworCisJY29uc3RfbWV0YWRhdGFfcG9pbnRlciBwX2JlZ2luX21ldGFkYXRhID0KKwkgIG1fcF9tZXRhZGF0YSAtIChtX3BfdmFsdWUgLSBtX3BfYmVnaW5fdmFsdWUpOworCisJcmV0dXJuICh0aGlzX3R5cGUobWlkX3BvaW50ZXIobV9wX2JlZ2luX3ZhbHVlLCBtX3BfdmFsdWUpLAorCQkJICBtX3BfYmVnaW5fdmFsdWUsCisJCQkgIG1fcF92YWx1ZSwKKwkJCSAgbWlkX3BvaW50ZXIocF9iZWdpbl9tZXRhZGF0YSwgbV9wX21ldGFkYXRhKSkpOworICAgICAgfQorCisgICAgICBpbmxpbmUgdGhpc190eXBlCisgICAgICBnZXRfcl9jaGlsZCgpIGNvbnN0CisgICAgICB7CisJaWYgKG1fcF92YWx1ZSA9PSBtX3BfZW5kX3ZhbHVlKQorCSAgcmV0dXJuICh0aGlzX3R5cGUobV9wX2VuZF92YWx1ZSwgIG1fcF9lbmRfdmFsdWUsICBtX3BfZW5kX3ZhbHVlKSk7CisKKwljb25zdF9tZXRhZGF0YV9wb2ludGVyIHBfZW5kX21ldGFkYXRhID0KKwkgIG1fcF9tZXRhZGF0YSArIChtX3BfZW5kX3ZhbHVlIC0gbV9wX3ZhbHVlKTsKKworCXJldHVybiAodGhpc190eXBlKG1pZF9wb2ludGVyKG1fcF92YWx1ZSArIDEsIG1fcF9lbmRfdmFsdWUpLAorCQkJICBtX3BfdmFsdWUgKyAxLAorCQkJICBtX3BfZW5kX3ZhbHVlLChtX3BfbWV0YWRhdGEgPT0gTlVMTCkgPworCQkJICBOVUxMIDogbWlkX3BvaW50ZXIobV9wX21ldGFkYXRhICsgMSwgcF9lbmRfbWV0YWRhdGEpKSk7CisgICAgICB9CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IHRoaXNfdHlwZSYgb3RoZXIpIGNvbnN0CisgICAgICB7CisJY29uc3QgYm9vbCBpc19lbmQgPSBtX3BfYmVnaW5fdmFsdWUgPT0gbV9wX2VuZF92YWx1ZTsKKwljb25zdCBib29sIGlzX290aGVyX2VuZCA9IG90aGVyLm1fcF9iZWdpbl92YWx1ZSA9PSBvdGhlci5tX3BfZW5kX3ZhbHVlOworCisJaWYgKGlzX2VuZCkKKwkgIHJldHVybiAoaXNfb3RoZXJfZW5kKTsKKworCWlmIChpc19vdGhlcl9lbmQpCisJICByZXR1cm4gKGlzX2VuZCk7CisKKwlyZXR1cm4gbV9wX3ZhbHVlID09IG90aGVyLm1fcF92YWx1ZTsKKyAgICAgIH0KKworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yIT0oY29uc3QgdGhpc190eXBlJiBvdGhlcikgY29uc3QKKyAgICAgIHsgcmV0dXJuICFvcGVyYXRvcj09KG90aGVyKTsgfQorCisgICAgcHVibGljOgorICAgICAgcG9pbnRlciBtX3BfdmFsdWU7CisgICAgICBwb2ludGVyIG1fcF9iZWdpbl92YWx1ZTsKKyAgICAgIHBvaW50ZXIgbV9wX2VuZF92YWx1ZTsKKworICAgICAgY29uc3RfbWV0YWRhdGFfcG9pbnRlciBtX3BfbWV0YWRhdGE7CisgICAgfTsKKworI2RlZmluZSBQQl9EU19PVl9UUkVFX05PREVfSVRFUkFUT1JfQ19ERUMgXAorICAgIG92X3RyZWVfbm9kZV9pdF88VmFsdWVfVHlwZSwgTWV0YWRhdGFfVHlwZSwgQWxsb2NhdG9yPgorCisgICAgLy8gTm9kZSByZWZlcmVuY2UuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVfVHlwZSwgdHlwZW5hbWUgTWV0YWRhdGFfVHlwZSwgY2xhc3MgQWxsb2NhdG9yPgorICAgIGNsYXNzIG92X3RyZWVfbm9kZV9pdF8gOiBwdWJsaWMgUEJfRFNfT1ZfVFJFRV9DT05TVF9OT0RFX0lURVJBVE9SX0NfREVDCisgICAgeworCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgUEJfRFNfT1ZfVFJFRV9OT0RFX0lURVJBVE9SX0NfREVDIHRoaXNfdHlwZTsKKworICAgICAgdHlwZWRlZiBQQl9EU19PVl9UUkVFX0NPTlNUX05PREVfSVRFUkFUT1JfQ19ERUMgYmFzZV90eXBlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6cG9pbnRlciBwb2ludGVyOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X21ldGFkYXRhX3BvaW50ZXIKKyAgICAgIGNvbnN0X21ldGFkYXRhX3BvaW50ZXI7CisKKyAgICBwdWJsaWM6CisKKyAgICAgIHR5cGVkZWYgdHJpdmlhbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisKKyAgICAgIHR5cGVkZWYgdHJpdmlhbF9pdGVyYXRvcl9kaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKwlWYWx1ZV9UeXBlPjo6b3RoZXI6OnBvaW50ZXIKKyAgICAgIHZhbHVlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCXR5cGVuYW1lIHJlbW92ZV9jb25zdDwKKwlWYWx1ZV9UeXBlPjo6dHlwZT46Om90aGVyOjpwb2ludGVyCisgICAgICByZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCXR5cGVuYW1lIHJlbW92ZV9jb25zdDwKKwlWYWx1ZV9UeXBlPjo6dHlwZT46Om90aGVyOjpwb2ludGVyCisgICAgICBjb25zdF9yZWZlcmVuY2U7CisKKyAgICBwdWJsaWM6CisgICAgICBpbmxpbmUKKyAgICAgIG92X3RyZWVfbm9kZV9pdF8oY29uc3RfcG9pbnRlciBwX25kID0gTlVMTCwgIGNvbnN0X3BvaW50ZXIgcF9iZWdpbl9uZCA9IE5VTEwsICBjb25zdF9wb2ludGVyIHBfZW5kX25kID0gTlVMTCwgIGNvbnN0X21ldGFkYXRhX3BvaW50ZXIgcF9tZXRhZGF0YSA9IE5VTEwpIDogYmFzZV90eXBlKHBfbmQsICBwX2JlZ2luX25kLCAgcF9lbmRfbmQsICBwX21ldGFkYXRhKQorICAgICAgeyB9CisKKyAgICAgIC8vIEFjY2Vzcy4KKyAgICAgIGlubGluZSByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICB7IHJldHVybiByZWZlcmVuY2UoYmFzZV90eXBlOjptX3BfdmFsdWUpOyB9CisKKyAgICAgIC8vIFJldHVybnMgdGhlIG5vZGUgcmVmZXJlbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGVmdCBub2RlLgorICAgICAgaW5saW5lIG92X3RyZWVfbm9kZV9pdF8KKyAgICAgIGdldF9sX2NoaWxkKCkgY29uc3QKKyAgICAgIHsKKwlpZiAoYmFzZV90eXBlOjptX3BfYmVnaW5fdmFsdWUgPT0gYmFzZV90eXBlOjptX3BfdmFsdWUpCisJICByZXR1cm4gKHRoaXNfdHlwZShiYXNlX3R5cGU6Om1fcF9iZWdpbl92YWx1ZSwgIGJhc2VfdHlwZTo6bV9wX2JlZ2luX3ZhbHVlLCAgYmFzZV90eXBlOjptX3BfYmVnaW5fdmFsdWUpKTsKKworCWNvbnN0X21ldGFkYXRhX3BvaW50ZXIgcF9iZWdpbl9tZXRhZGF0YSA9CisJICBiYXNlX3R5cGU6Om1fcF9tZXRhZGF0YSAtIChiYXNlX3R5cGU6Om1fcF92YWx1ZSAtIGJhc2VfdHlwZTo6bV9wX2JlZ2luX3ZhbHVlKTsKKworCXJldHVybiAodGhpc190eXBlKGJhc2VfdHlwZTo6bWlkX3BvaW50ZXIoYmFzZV90eXBlOjptX3BfYmVnaW5fdmFsdWUsIGJhc2VfdHlwZTo6bV9wX3ZhbHVlKSwKKwkJCSAgYmFzZV90eXBlOjptX3BfYmVnaW5fdmFsdWUsCisJCQkgIGJhc2VfdHlwZTo6bV9wX3ZhbHVlLAorCQkJICBiYXNlX3R5cGU6Om1pZF9wb2ludGVyKHBfYmVnaW5fbWV0YWRhdGEsIGJhc2VfdHlwZTo6bV9wX21ldGFkYXRhKSkpOworICAgICAgfQorCisgICAgICAvLyBSZXR1cm5zIHRoZSBub2RlIHJlZmVyZW5jZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJpZ2h0IG5vZGUuCisgICAgICBpbmxpbmUgb3ZfdHJlZV9ub2RlX2l0XworICAgICAgZ2V0X3JfY2hpbGQoKSBjb25zdAorICAgICAgeworCWlmIChiYXNlX3R5cGU6Om1fcF92YWx1ZSA9PSBiYXNlX3R5cGU6Om1fcF9lbmRfdmFsdWUpCisJICByZXR1cm4gKHRoaXNfdHlwZShiYXNlX3R5cGU6Om1fcF9lbmRfdmFsdWUsICBiYXNlX3R5cGU6Om1fcF9lbmRfdmFsdWUsICBiYXNlX3R5cGU6Om1fcF9lbmRfdmFsdWUpKTsKKworCWNvbnN0X21ldGFkYXRhX3BvaW50ZXIgcF9lbmRfbWV0YWRhdGEgPQorCSAgYmFzZV90eXBlOjptX3BfbWV0YWRhdGEgKyAoYmFzZV90eXBlOjptX3BfZW5kX3ZhbHVlIC0gYmFzZV90eXBlOjptX3BfdmFsdWUpOworCisJcmV0dXJuICh0aGlzX3R5cGUoYmFzZV90eXBlOjptaWRfcG9pbnRlcihiYXNlX3R5cGU6Om1fcF92YWx1ZSArIDEsIGJhc2VfdHlwZTo6bV9wX2VuZF92YWx1ZSksCisJCQkgIGJhc2VfdHlwZTo6bV9wX3ZhbHVlICsgMSwKKwkJCSAgYmFzZV90eXBlOjptX3BfZW5kX3ZhbHVlLChiYXNlX3R5cGU6Om1fcF9tZXRhZGF0YSA9PSBOVUxMKT8KKwkJCSAgTlVMTCA6IGJhc2VfdHlwZTo6bWlkX3BvaW50ZXIoYmFzZV90eXBlOjptX3BfbWV0YWRhdGEgKyAxLCBwX2VuZF9tZXRhZGF0YSkpKTsKKyAgICAgIH0KKworICAgIH07CisKKyN1bmRlZiBQQl9EU19PVl9UUkVFX05PREVfSVRFUkFUT1JfQ19ERUMKKyN1bmRlZiBQQl9EU19PVl9UUkVFX0NPTlNUX05PREVfSVRFUkFUT1JfQ19ERUMKKworfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vb3ZfdHJlZV9tYXBfLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vb3ZfdHJlZV9tYXBfLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDJlZDNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9vdl90cmVlX21hcF8uaHBwCkBAIC0wLDAgKzEsNTIyIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBvdl90cmVlX21hcF8uaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3Igb3ZfdHJlZV8uCisgKi8KKworI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxzZXQ+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2VxX2ZuL2VxX2J5X2xlc3MuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHlwZXNfdHJhaXRzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2RlYnVnX21hcF9iYXNlLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3R5cGVfdXRpbHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9leGNlcHRpb24uaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHJlZV90cmFjZV9iYXNlLmhwcD4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCBjbGFzcyBDbXBfRm4sIFwKKwkgICAgIGNsYXNzIE5vZGVfQW5kX0l0X1RyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgorCisjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorI2RlZmluZSBQQl9EU19PVl9UUkVFX0NMQVNTX05BTUUgb3ZfdHJlZV9kYXRhXworI2VuZGlmIAorCisjaWZkZWYgUEJfRFNfREFUQV9GQUxTRV9JTkRJQ0FUT1IKKyNkZWZpbmUgUEJfRFNfT1ZfVFJFRV9DTEFTU19OQU1FIG92X3RyZWVfbm9fZGF0YV8KKyNlbmRpZiAKKworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyNkZWZpbmUgUEJfRFNfQ09OU1RfTk9ERV9JVEVSQVRPUl9OQU1FIG92X3RyZWVfY29uc3Rfbm9kZV9pdGVyYXRvcl9kYXRhXworI2Vsc2UgCisjZGVmaW5lIFBCX0RTX0NPTlNUX05PREVfSVRFUkFUT1JfTkFNRSBvdl90cmVlX2NvbnN0X25vZGVfaXRlcmF0b3Jfbm9fZGF0YV8KKyNlbmRpZiAKKworI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBcCisgICBQQl9EU19PVl9UUkVFX0NMQVNTX05BTUU8S2V5LCBNYXBwZWQsIENtcF9GbiwgTm9kZV9BbmRfSXRfVHJhaXRzLCBBbGxvY2F0b3I+CisKKyNkZWZpbmUgUEJfRFNfVFlQRVNfVFJBSVRTX0NfREVDIFwKKyAgICB0eXBlc190cmFpdHM8S2V5LCBNYXBwZWQsIEFsbG9jYXRvciwgZmFsc2U+CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworI2RlZmluZSBQQl9EU19ERUJVR19NQVBfQkFTRV9DX0RFQyBcCisgICAgZGVidWdfbWFwX2Jhc2U8S2V5LCBlcV9ieV9sZXNzPEtleSwgQ21wX0ZuPiwgXAorICAgICAgIAl0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxLZXk+OjpvdGhlcjo6Y29uc3RfcmVmZXJlbmNlPgorI2VuZGlmIAorCisjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorI2RlZmluZSBQQl9EU19WMkYoWCkgKFgpLmZpcnN0CisjZGVmaW5lIFBCX0RTX1YyUyhYKSAoWCkuc2Vjb25kCisjZGVmaW5lIFBCX0RTX0VQMlZQKFgpJiAoKFgpLT5tX3ZhbHVlKQorI2VuZGlmIAorCisjaWZkZWYgUEJfRFNfREFUQV9GQUxTRV9JTkRJQ0FUT1IKKyNkZWZpbmUgUEJfRFNfVjJGKFgpIChYKQorI2RlZmluZSBQQl9EU19WMlMoWCkgTWFwcGVkX0RhdGEoKQorI2RlZmluZSBQQl9EU19FUDJWUChYKSYgKChYKS0+bV92YWx1ZS5maXJzdCkKKyNlbmRpZiAKKworI2lmZGVmIFBCX0RTX1RSRUVfVFJBQ0UKKyNkZWZpbmUgUEJfRFNfVFJFRV9UUkFDRV9CQVNFX0NfREVDIFwKKyAgICB0cmVlX3RyYWNlX2Jhc2U8dHlwZW5hbWUgTm9kZV9BbmRfSXRfVHJhaXRzOjpjb25zdF9ub2RlX2l0ZXJhdG9yLCBcCisJCSAgICB0eXBlbmFtZSBOb2RlX0FuZF9JdF9UcmFpdHM6Om5vZGVfaXRlcmF0b3IsIFwKKwkJICAgIENtcF9GbiwgZmFsc2UsIEFsbG9jYXRvcj4KKyNlbmRpZiAKKworICAgIC8vIE9yZGVyZWQtdmVjdG9yIHRyZWUgYXNzb2NpYXRpdmUtY29udGFpbmVyLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCBjbGFzcyBDbXBfRm4sCisJICAgICBjbGFzcyBOb2RlX0FuZF9JdF9UcmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KKyAgICBjbGFzcyBQQl9EU19PVl9UUkVFX0NMQVNTX05BTUUgOgorI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICBwcm90ZWN0ZWQgUEJfRFNfREVCVUdfTUFQX0JBU0VfQ19ERUMsCisjZW5kaWYgCisjaWZkZWYgUEJfRFNfVFJFRV9UUkFDRQorICAgICAgcHVibGljIFBCX0RTX1RSRUVfVFJBQ0VfQkFTRV9DX0RFQywKKyNlbmRpZiAKKyAgICAgIHB1YmxpYyBDbXBfRm4sCisgICAgICBwdWJsaWMgTm9kZV9BbmRfSXRfVHJhaXRzOjpub2RlX3VwZGF0ZSwKKyAgICAgIHB1YmxpYyBQQl9EU19UWVBFU19UUkFJVFNfQ19ERUMKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgUEJfRFNfVFlQRVNfVFJBSVRTX0NfREVDIHRyYWl0c19iYXNlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHJlbW92ZV9jb25zdDx0eXBlbmFtZSB0cmFpdHNfYmFzZTo6dmFsdWVfdHlwZT46OnR5cGUgbm9uX2NvbnN0X3ZhbHVlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8bm9uX2NvbnN0X3ZhbHVlX3R5cGU+OjpvdGhlciB2YWx1ZV9hbGxvY2F0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHZhbHVlX2FsbG9jYXRvcjo6cG9pbnRlciB2YWx1ZV92ZWN0b3I7CisKKworICAgICAgdHlwZWRlZiBDbXBfRm4gY21wX2ZuX2Jhc2U7CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgdHlwZWRlZiBQQl9EU19ERUJVR19NQVBfQkFTRV9DX0RFQyBkZWJ1Z19iYXNlOworI2VuZGlmIAorCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjpwb2ludGVyIG1hcHBlZF9wb2ludGVyXzsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmNvbnN0X3BvaW50ZXIgY29uc3RfbWFwcGVkX3BvaW50ZXJfOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIE5vZGVfQW5kX0l0X1RyYWl0czo6bWV0YWRhdGFfdHlwZSBtZXRhZGF0YV90eXBlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPG1ldGFkYXRhX3R5cGU+OjpvdGhlciBtZXRhZGF0YV9hbGxvY2F0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIG1ldGFkYXRhX2FsbG9jYXRvcjo6cG9pbnRlciBtZXRhZGF0YV9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBtZXRhZGF0YV9hbGxvY2F0b3I6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9tZXRhZGF0YV9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIG1ldGFkYXRhX2FsbG9jYXRvcjo6cmVmZXJlbmNlIG1ldGFkYXRhX3JlZmVyZW5jZTsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgTm9kZV9BbmRfSXRfVHJhaXRzOjpudWxsX25vZGVfdXBkYXRlX3BvaW50ZXIKKyAgICAgIG51bGxfbm9kZV91cGRhdGVfcG9pbnRlcjsKKworICAgIHB1YmxpYzoKKworICAgICAgdHlwZWRlZiBBbGxvY2F0b3IgYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6c2l6ZV90eXBlIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworCisgICAgICB0eXBlZGVmIENtcF9GbiBjbXBfZm47CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgTm9kZV9BbmRfSXRfVHJhaXRzOjpub2RlX3VwZGF0ZSBub2RlX3VwZGF0ZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6a2V5X3R5cGUga2V5X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjprZXlfcG9pbnRlciBrZXlfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmNvbnN0X2tleV9wb2ludGVyIGNvbnN0X2tleV9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6a2V5X3JlZmVyZW5jZSBrZXlfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6Y29uc3Rfa2V5X3JlZmVyZW5jZSBjb25zdF9rZXlfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6bWFwcGVkX3R5cGUgbWFwcGVkX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjptYXBwZWRfcG9pbnRlciBtYXBwZWRfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmNvbnN0X21hcHBlZF9wb2ludGVyIGNvbnN0X21hcHBlZF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6bWFwcGVkX3JlZmVyZW5jZSBtYXBwZWRfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6Y29uc3RfbWFwcGVkX3JlZmVyZW5jZSBjb25zdF9tYXBwZWRfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6cG9pbnRlciBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgY29uc3RfcG9pbnRlciBjb25zdF9wb2ludF9pdGVyYXRvcjsKKworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyAgICAgIHR5cGVkZWYgcG9pbnRlciBwb2ludF9pdGVyYXRvcjsKKyNlbHNlIAorICAgICAgdHlwZWRlZiBjb25zdF9wb2ludF9pdGVyYXRvciBwb2ludF9pdGVyYXRvcjsKKyNlbmRpZiAKKworICAgICAgdHlwZWRlZiBjb25zdF9wb2ludF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiBwb2ludF9pdGVyYXRvciBpdGVyYXRvcjsKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL2NvbmRfZHRvci5ocHA+CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIE5vZGVfQW5kX0l0X1RyYWl0czo6Y29uc3Rfbm9kZV9pdGVyYXRvcgorICAgICAgY29uc3Rfbm9kZV9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBOb2RlX0FuZF9JdF9UcmFpdHM6Om5vZGVfaXRlcmF0b3Igbm9kZV9pdGVyYXRvcjsKKworICAgIHB1YmxpYzoKKworICAgICAgUEJfRFNfT1ZfVFJFRV9DTEFTU19OQU1FKCk7CisKKyAgICAgIFBCX0RTX09WX1RSRUVfQ0xBU1NfTkFNRShjb25zdCBDbXBfRm4mKTsKKworICAgICAgUEJfRFNfT1ZfVFJFRV9DTEFTU19OQU1FKGNvbnN0IENtcF9GbiYsIGNvbnN0IG5vZGVfdXBkYXRlJik7CisKKyAgICAgIFBCX0RTX09WX1RSRUVfQ0xBU1NfTkFNRShjb25zdCBQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgICB+UEJfRFNfT1ZfVFJFRV9DTEFTU19OQU1FKCk7CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXQ+CisgICAgICB2b2lkCisgICAgICBjb3B5X2Zyb21fcmFuZ2UoSXQsIEl0KTsKKworICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdDsKKworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBzaXplX3R5cGUKKyAgICAgIHNpemUoKSBjb25zdDsKKworICAgICAgQ21wX0ZuJiAKKyAgICAgIGdldF9jbXBfZm4oKTsKKworICAgICAgY29uc3QgQ21wX0ZuJiAKKyAgICAgIGdldF9jbXBfZm4oKSBjb25zdDsKKworICAgICAgaW5saW5lIG1hcHBlZF9yZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yW10oY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSkKKyAgICAgIHsKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisJX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisJcG9pbnRfaXRlcmF0b3IgaXQgPSBsb3dlcl9ib3VuZChyX2tleSk7CisJaWYgKGl0ICE9IGVuZCgpICYmICFDbXBfRm46Om9wZXJhdG9yKCkocl9rZXksIFBCX0RTX1YyRigqaXQpKSkKKwkgIHsKKwkgICAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpjaGVja19rZXlfZXhpc3RzKHJfa2V5KSk7CisJICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorCSAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisJICB9CisKKwlfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKwlyZXR1cm4gKGluc2VydF9uZXdfdmFsKGl0LCBzdGQ6Om1ha2VfcGFpcihyX2tleSwgbWFwcGVkX3R5cGUoKSkpLT5zZWNvbmQpOworI2Vsc2UgCisJaW5zZXJ0KHJfa2V5KTsKKwlyZXR1cm4gdHJhaXRzX2Jhc2U6OnNfbnVsbF9tYXBwZWQ7CisjZW5kaWYgCisgICAgICB9CisKKyAgICAgIGlubGluZSBzdGQ6OnBhaXI8cG9pbnRfaXRlcmF0b3IsIGJvb2w+CisgICAgICBpbnNlcnQoY29uc3RfcmVmZXJlbmNlIHJfdmFsdWUpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisJY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSA9IFBCX0RTX1YyRihyX3ZhbHVlKTsKKwlwb2ludF9pdGVyYXRvciBpdCA9IGxvd2VyX2JvdW5kKHJfa2V5KTsKKworCWlmIChpdCAhPSBlbmQoKSYmICAhQ21wX0ZuOjpvcGVyYXRvcigpKHJfa2V5LCBQQl9EU19WMkYoKml0KSkpCisJICB7CisJICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorCSAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9leGlzdHMocl9rZXkpKTsKKwkgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGl0LCBmYWxzZSk7CisJICB9CisKKwlfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoaW5zZXJ0X25ld192YWwoaXQsIHJfdmFsdWUpLCB0cnVlKTsKKyAgICAgIH0KKworICAgICAgaW5saW5lIHBvaW50X2l0ZXJhdG9yCisgICAgICBsb3dlcl9ib3VuZChjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5KQorICAgICAgeworCXBvaW50ZXIgaXQgPSBtX2FfdmFsdWVzOworCXBvaW50ZXIgZV9pdCA9IG1fYV92YWx1ZXMgKyBtX3NpemU7CisJd2hpbGUgKGl0ICE9IGVfaXQpCisJICB7CisJICAgIHBvaW50ZXIgbWlkX2l0ID0gaXQgKyAoKGVfaXQgLSBpdCkgPj4gMSk7CisJICAgIGlmIChjbXBfZm5fYmFzZTo6b3BlcmF0b3IoKShQQl9EU19WMkYoKm1pZF9pdCksIHJfa2V5KSkKKwkgICAgICBpdCA9ICsrbWlkX2l0OworCSAgICBlbHNlCisJICAgICAgZV9pdCA9IG1pZF9pdDsKKwkgIH0KKwlyZXR1cm4gaXQ7CisgICAgICB9CisKKyAgICAgIGlubGluZSBjb25zdF9wb2ludF9pdGVyYXRvcgorICAgICAgbG93ZXJfYm91bmQoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8UEJfRFNfQ0xBU1NfQ19ERUMmID4oKnRoaXMpLmxvd2VyX2JvdW5kKHJfa2V5KTsgfQorCisgICAgICBpbmxpbmUgcG9pbnRfaXRlcmF0b3IKKyAgICAgIHVwcGVyX2JvdW5kKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpCisgICAgICB7CisJaXRlcmF0b3IgcG90X2l0ID0gbG93ZXJfYm91bmQocl9rZXkpOworCWlmIChwb3RfaXQgIT0gZW5kKCkmJiAgIUNtcF9Gbjo6b3BlcmF0b3IoKShyX2tleSwgUEJfRFNfVjJGKCpwb3RfaXQpKSkKKwkgIHsKKwkgICAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpjaGVja19rZXlfZXhpc3RzKHJfa2V5KSk7CisJICAgIHJldHVybiArK3BvdF9pdDsKKwkgIH0KKworCV9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6Y2hlY2tfa2V5X2RvZXNfbm90X2V4aXN0KHJfa2V5KSk7CisJcmV0dXJuIHBvdF9pdDsKKyAgICAgIH0KKworICAgICAgaW5saW5lIGNvbnN0X3BvaW50X2l0ZXJhdG9yCisgICAgICB1cHBlcl9ib3VuZChjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5KSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfY2FzdDxQQl9EU19DTEFTU19DX0RFQyY+KCp0aGlzKS51cHBlcl9ib3VuZChyX2tleSk7IH0KKworICAgICAgaW5saW5lIHBvaW50X2l0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisJaXRlcmF0b3IgcG90X2l0ID0gbG93ZXJfYm91bmQocl9rZXkpOworCWlmIChwb3RfaXQgIT0gZW5kKCkgJiYgIUNtcF9Gbjo6b3BlcmF0b3IoKShyX2tleSwgUEJfRFNfVjJGKCpwb3RfaXQpKSkKKwkgIHsKKwkgICAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpjaGVja19rZXlfZXhpc3RzKHJfa2V5KSk7CisJICAgIHJldHVybiBwb3RfaXQ7CisJICB9CisKKwlfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9kb2VzX25vdF9leGlzdChyX2tleSkpOworCXJldHVybiBlbmQoKTsKKyAgICAgIH0KKworICAgICAgaW5saW5lIGNvbnN0X3BvaW50X2l0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpIGNvbnN0CisgICAgICB7IHJldHVybiAoY29uc3RfY2FzdDxQQl9EU19DTEFTU19DX0RFQyYgPigqdGhpcykuZmluZChyX2tleSkpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIGVyYXNlKGNvbnN0X2tleV9yZWZlcmVuY2UpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkPgorICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgZXJhc2VfaWYoUHJlZCk7CisKKyAgICAgIGlubGluZSBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgaXQpCisgICAgICB7IHJldHVybiBlcmFzZV9pbXA8aXRlcmF0b3I+KGl0KTsgfQorCisgICAgICB2b2lkCisgICAgICBjbGVhcigpOworCisgICAgICB2b2lkCisgICAgICBqb2luKFBCX0RTX0NMQVNTX0NfREVDJik7CisKKyAgICAgIHZvaWQKKyAgICAgIHNwbGl0KGNvbnN0X2tleV9yZWZlcmVuY2UsIFBCX0RTX0NMQVNTX0NfREVDJik7CisKKyAgICAgIGlubGluZSBpdGVyYXRvcgorICAgICAgYmVnaW4oKQorICAgICAgeyByZXR1cm4gbV9hX3ZhbHVlczsgfQorCisgICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIG1fYV92YWx1ZXM7IH0KKworICAgICAgaW5saW5lIGl0ZXJhdG9yCisgICAgICBlbmQoKQorICAgICAgeyByZXR1cm4gbV9lbmRfaXQ7IH0KKworICAgICAgaW5saW5lIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gbV9lbmRfaXQ7IH0KKworICAgICAgaW5saW5lIGNvbnN0X25vZGVfaXRlcmF0b3IKKyAgICAgIG5vZGVfYmVnaW4oKSBjb25zdDsKKworICAgICAgaW5saW5lIGNvbnN0X25vZGVfaXRlcmF0b3IKKyAgICAgIG5vZGVfZW5kKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBub2RlX2l0ZXJhdG9yCisgICAgICBub2RlX2JlZ2luKCk7CisKKyAgICAgIGlubGluZSBub2RlX2l0ZXJhdG9yCisgICAgICBub2RlX2VuZCgpOworCisgICAgcHJpdmF0ZToKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIHVwZGF0ZShub2RlX2l0ZXJhdG9yIC8qaXQqLywgbnVsbF9ub2RlX3VwZGF0ZV9wb2ludGVyKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTm9kZV9VcGRhdGU+CisgICAgICB2b2lkCisgICAgICB1cGRhdGUobm9kZV9pdGVyYXRvciwgTm9kZV9VcGRhdGUqKTsKKworICAgICAgdm9pZAorICAgICAgcmVhbGxvY2F0ZV9tZXRhZGF0YShudWxsX25vZGVfdXBkYXRlX3BvaW50ZXIsIHNpemVfdHlwZSk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGVfVXBkYXRlXz4KKyAgICAgIHZvaWQKKyAgICAgIHJlYWxsb2NhdGVfbWV0YWRhdGEoTm9kZV9VcGRhdGVfKiwgc2l6ZV90eXBlKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXQ+CisgICAgICB2b2lkCisgICAgICBjb3B5X2Zyb21fb3JkZXJlZF9yYW5nZShJdCwgSXQpOworCisgICAgICB2b2lkCisgICAgICB2YWx1ZV9zd2FwKFBCX0RTX0NMQVNTX0NfREVDJik7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0PgorICAgICAgdm9pZAorICAgICAgY29weV9mcm9tX29yZGVyZWRfcmFuZ2UoSXQsIEl0LCBJdCwgSXQpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQdHI+CisgICAgICBpbmxpbmUgc3RhdGljIFB0cgorICAgICAgbWlkX3BvaW50ZXIoUHRyIHBfYmVnaW4sIFB0ciBwX2VuZCkKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9lbmQgPj0gcF9iZWdpbik7CisJcmV0dXJuIChwX2JlZ2luICsgKHBfZW5kIC0gcF9iZWdpbikgLyAyKTsKKyAgICAgIH0KKworICAgICAgaW5saW5lIGl0ZXJhdG9yCisgICAgICBpbnNlcnRfbmV3X3ZhbChpdGVyYXRvciBpdCwgY29uc3RfcmVmZXJlbmNlIHJfdmFsdWUpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisjaWZkZWYgUEJfRFNfUkVHUkVTU0lPTgorCSAgdHlwZW5hbWUgQWxsb2NhdG9yOjpncm91cF9hZGp1c3RvciBhZGp1c3QobV9zaXplKTsKKyNlbmRpZiAKKworCV9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6Y2hlY2tfa2V5X2RvZXNfbm90X2V4aXN0KFBCX0RTX1YyRihyX3ZhbHVlKSkpOworCisJdmFsdWVfdmVjdG9yIGFfdmFsdWVzID0gc192YWx1ZV9hbGxvYy5hbGxvY2F0ZShtX3NpemUgKyAxKTsKKworCWl0ZXJhdG9yIHNvdXJjZV9pdCA9IGJlZ2luKCk7CisJaXRlcmF0b3Igc291cmNlX2VuZF9pdCA9IGVuZCgpOworCWl0ZXJhdG9yIHRhcmdldF9pdCA9IGFfdmFsdWVzOworCWl0ZXJhdG9yIHJldF9pdDsKKworCWNvbmRfZHRvcjxzaXplX3R5cGU+IGNkKGFfdmFsdWVzLCB0YXJnZXRfaXQsIG1fc2l6ZSArIDEpOworCXdoaWxlIChzb3VyY2VfaXQgIT0gaXQpCisJICB7CisJICAgIG5ldyAoY29uc3RfY2FzdDx2b2lkKiA+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqID4odGFyZ2V0X2l0KSkpCisJICAgICAgdmFsdWVfdHlwZSgqc291cmNlX2l0KyspOworCSAgICArK3RhcmdldF9pdDsKKwkgIH0KKworCW5ldyAoY29uc3RfY2FzdDx2b2lkKiA+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqID4ocmV0X2l0ID0gdGFyZ2V0X2l0KSkpCisJICB2YWx1ZV90eXBlKHJfdmFsdWUpOworCSsrdGFyZ2V0X2l0OworCisJd2hpbGUgKHNvdXJjZV9pdCAhPSBzb3VyY2VfZW5kX2l0KQorCSAgeworCSAgICBuZXcgKGNvbnN0X2Nhc3Q8dm9pZCogPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKiA+KHRhcmdldF9pdCkpKQorCSAgICAgIHZhbHVlX3R5cGUoKnNvdXJjZV9pdCsrKTsKKwkgICAgKyt0YXJnZXRfaXQ7CisJICB9CisKKwlyZWFsbG9jYXRlX21ldGFkYXRhKChub2RlX3VwZGF0ZSogKXRoaXMsIG1fc2l6ZSArIDEpOworCWNkLnNldF9ub19hY3Rpb24oKTsKKwlpZiAobV9zaXplICE9IDApCisJICB7CisJICAgIGNvbmRfZHRvcjxzaXplX3R5cGU+IGNkMShtX2FfdmFsdWVzLCBtX2VuZF9pdCwgbV9zaXplKTsKKwkgIH0KKworCSsrbV9zaXplOworCW1fYV92YWx1ZXMgPSBhX3ZhbHVlczsKKwltX2VuZF9pdCA9IG1fYV92YWx1ZXMgKyBtX3NpemU7CisJX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjppbnNlcnRfbmV3KFBCX0RTX1YyRihyX3ZhbHVlKSkpOworCXVwZGF0ZShub2RlX2JlZ2luKCksIChub2RlX3VwZGF0ZSogKXRoaXMpOworCV9HTElCQ1hYX0RFQlVHX09OTFkoUEJfRFNfQ0xBU1NfQ19ERUM6OmFzc2VydF92YWxpZCgpOykKKwlyZXR1cm4gcmV0X2l0OworICAgICAgfQorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF92YWxpZCgpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfaXRlcmF0b3JzKCkgY29uc3Q7CisjZW5kaWYgCisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0PgorICAgICAgSXQKKyAgICAgIGVyYXNlX2ltcChJdCBpdCk7CisKKyAgICAgIGlubGluZSBjb25zdF9ub2RlX2l0ZXJhdG9yCisgICAgICBQQl9EU19ub2RlX2JlZ2luX2ltcCgpIGNvbnN0OworCisgICAgICBpbmxpbmUgY29uc3Rfbm9kZV9pdGVyYXRvcgorICAgICAgUEJfRFNfbm9kZV9lbmRfaW1wKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBub2RlX2l0ZXJhdG9yCisgICAgICBQQl9EU19ub2RlX2JlZ2luX2ltcCgpOworCisgICAgICBpbmxpbmUgbm9kZV9pdGVyYXRvcgorICAgICAgUEJfRFNfbm9kZV9lbmRfaW1wKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgc3RhdGljIHZhbHVlX2FsbG9jYXRvciBzX3ZhbHVlX2FsbG9jOworICAgICAgc3RhdGljIG1ldGFkYXRhX2FsbG9jYXRvciBzX21ldGFkYXRhX2FsbG9jOworCisgICAgICB2YWx1ZV92ZWN0b3IgbV9hX3ZhbHVlczsKKyAgICAgIG1ldGFkYXRhX3BvaW50ZXIgbV9hX21ldGFkYXRhOworICAgICAgaXRlcmF0b3IgbV9lbmRfaXQ7CisgICAgICBzaXplX3R5cGUgbV9zaXplOworICAgIH07CisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9pdGVyYXRvcnNfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vZGVidWdfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vZXJhc2VfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL2luZm9fZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vcG9saWN5X2FjY2Vzc19mbl9pbXBzLmhwcD4KKworI3VuZGVmIFBCX0RTX0NMQVNTX0NfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19PVl9UUkVFX0NMQVNTX05BTUUKKyN1bmRlZiBQQl9EU19UWVBFU19UUkFJVFNfQ19ERUMKKyN1bmRlZiBQQl9EU19ERUJVR19NQVBfQkFTRV9DX0RFQworI2lmZGVmIFBCX0RTX1RSRUVfVFJBQ0UKKyN1bmRlZiBQQl9EU19UUkVFX1RSQUNFX0JBU0VfQ19ERUMKKyNlbmRpZiAKKworI3VuZGVmIFBCX0RTX1YyRgorI3VuZGVmIFBCX0RTX0VQMlZQCisjdW5kZWYgUEJfRFNfVjJTCisjdW5kZWYgUEJfRFNfQ09OU1RfTk9ERV9JVEVSQVRPUl9OQU1FCisKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL3BvbGljeV9hY2Nlc3NfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL3BvbGljeV9hY2Nlc3NfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA2ZDZmOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vcG9saWN5X2FjY2Vzc19mbl9pbXBzLmhwcApAQCAtMCwwICsxLDUxIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBwb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYmluX3NlYXJjaF90cmVlXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworQ21wX0ZuJiAKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9jbXBfZm4oKQoreyByZXR1cm4gKnRoaXM7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2NvbnN0IENtcF9GbiYgCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfY21wX2ZuKCkgY29uc3QKK3sgcmV0dXJuICp0aGlzOyB9CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZiYjZmYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDEzNyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgc3BsaXRfam9pbl9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIG92X3RyZWVfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitzcGxpdChjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5LCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpOykKKworICBpZiAobV9zaXplID09IDApCisgICAgeworICAgICAgb3RoZXIuY2xlYXIoKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspCisgICAgICByZXR1cm47CisgICAgfQorCisgIGlmIChDbXBfRm46Om9wZXJhdG9yKCkocl9rZXksIFBCX0RTX1YyRigqYmVnaW4oKSkpKQorICAgIHsKKyAgICAgIHZhbHVlX3N3YXAob3RoZXIpOworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpOykKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKCFDbXBfRm46Om9wZXJhdG9yKCkocl9rZXksIFBCX0RTX1YyRigqKGVuZCgpIC0gMSkpKSkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKCk7KQorICAgICAgcmV0dXJuOworICAgIH0KKworICBpZiAobV9zaXplID09IDEpCisgICAgeworICAgICAgdmFsdWVfc3dhcChvdGhlcik7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKCk7KQorICAgICAgcmV0dXJuOworICAgIH0KKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmpvaW4ob3RoZXIpOykKKyAgaXRlcmF0b3IgaXQgPSB1cHBlcl9ib3VuZChyX2tleSk7CisgIFBCX0RTX0NMQVNTX0NfREVDIG5ld19vdGhlcihvdGhlciwgb3RoZXIpOworICBuZXdfb3RoZXIuY29weV9mcm9tX29yZGVyZWRfcmFuZ2UoaXQsIGVuZCgpKTsKKyAgUEJfRFNfQ0xBU1NfQ19ERUMgbmV3X3RoaXMoKnRoaXMsICogdGhpcyk7CisgIG5ld190aGlzLmNvcHlfZnJvbV9vcmRlcmVkX3JhbmdlKGJlZ2luKCksIGl0KTsKKworICAvLyBObyBleGNlcHRpb25zIGZyb20gdGhpcyBwb2ludC4KKyAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpzcGxpdChyX2tleSwoQ21wX0ZuJiApKCp0aGlzKSwgb3RoZXIpOykKKyAgb3RoZXIudXBkYXRlKG90aGVyLm5vZGVfYmVnaW4oKSwgKG5vZGVfdXBkYXRlKiApKCZvdGhlcikpOworICB1cGRhdGUobm9kZV9iZWdpbigpLCAobm9kZV91cGRhdGUqICl0aGlzKTsKKyAgb3RoZXIudmFsdWVfc3dhcChuZXdfb3RoZXIpOworICB2YWx1ZV9zd2FwKG5ld190aGlzKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogoram9pbihQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpOykKKyAgaWYgKG90aGVyLm1fc2l6ZSA9PSAwKQorICAgIHJldHVybjsKKworICBpZiAobV9zaXplID09IDApCisgICAgeworICAgICAgdmFsdWVfc3dhcChvdGhlcik7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGNvbnN0IGJvb2wgZ3JlYXRlciA9IENtcF9Gbjo6b3BlcmF0b3IoKShQQl9EU19WMkYoKihlbmQoKSAtIDEpKSwKKwkJCQkJICBQQl9EU19WMkYoKm90aGVyLmJlZ2luKCkpKTsKKworICBjb25zdCBib29sIGxlc3NlciA9IENtcF9Gbjo6b3BlcmF0b3IoKShQQl9EU19WMkYoKihvdGhlci5lbmQoKSAtIDEpKSwKKwkJCQkJIFBCX0RTX1YyRigqYmVnaW4oKSkpOworCisgIGlmICghZ3JlYXRlciAmJiAhbGVzc2VyKQorICAgIF9fdGhyb3dfam9pbl9lcnJvcigpOworCisgIFBCX0RTX0NMQVNTX0NfREVDIG5ld190aGlzKCp0aGlzLCAqdGhpcyk7CisKKyAgaWYgKGdyZWF0ZXIpCisgICAgbmV3X3RoaXMuY29weV9mcm9tX29yZGVyZWRfcmFuZ2UoYmVnaW4oKSwgZW5kKCksIAorCQkJCSAgICAgb3RoZXIuYmVnaW4oKSwgb3RoZXIuZW5kKCkpOworICBlbHNlCisgICAgbmV3X3RoaXMuY29weV9mcm9tX29yZGVyZWRfcmFuZ2Uob3RoZXIuYmVnaW4oKSwgb3RoZXIuZW5kKCksCisJCQkJICAgICBiZWdpbigpLCBlbmQoKSk7CisKKyAgLy8gTm8gZXhjZXB0aW9ucyBmcm9tIHRoaXMgcG9pbnQuCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6am9pbihvdGhlcik7KQorICB2YWx1ZV9zd2FwKG5ld190aGlzKTsKKyAgb3RoZXIuY2xlYXIoKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKCk7KQorfQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy90cmFpdHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy90cmFpdHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzY2IwZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL3RyYWl0cy5ocHAKQEAgLTAsMCArMSwxODMgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHRyYWl0cy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBvdl90cmVlXy4KKyAqLworCisjaWZuZGVmIFBCX0RTX09WX1RSRUVfTk9ERV9BTkRfSVRfVFJBSVRTX0hQUAorI2RlZmluZSBQQl9EU19PVl9UUkVFX05PREVfQU5EX0lUX1RSQUlUU19IUFAKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL25vZGVfaXRlcmF0b3JzLmhwcD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksCisJICAgICB0eXBlbmFtZSBNYXBwZWQsCisJICAgICBjbGFzcyBDbXBfRm4sCisJICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25zdF9Ob2RlX0l0ZXJhdG9yLAorCQkgICAgICBjbGFzcyBOb2RlX0l0ZXJhdG9yLAorCQkgICAgICBjbGFzcyBDbXBfRm5fLAorCQkgICAgICBjbGFzcyBBbGxvY2F0b3JfPgorICAgIGNsYXNzIE5vZGVfVXBkYXRlLAorCSAgICAgY2xhc3MgQWxsb2NhdG9yPgorICAgIHN0cnVjdCB0cmVlX3RyYWl0czwKKyAgICAgIEtleSwKKyAgICAgIE1hcHBlZCwKKyAgICAgIENtcF9GbiwKKyAgICAgIE5vZGVfVXBkYXRlLAorICAgICAgb3ZfdHJlZV90YWcsCisgICAgICBBbGxvY2F0b3I+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSB0eXBlc190cmFpdHM8CisgICAgICBLZXksCisgICAgICBNYXBwZWQsCisgICAgICBBbGxvY2F0b3IsCisgICAgICBmYWxzZT46OnZhbHVlX3R5cGUKKyAgICAgIHZhbHVlX3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSB0cmVlX25vZGVfbWV0YWRhdGFfc2VsZWN0b3I8CisgICAgICBLZXksCisgICAgICBNYXBwZWQsCisgICAgICBDbXBfRm4sCisgICAgICBOb2RlX1VwZGF0ZSwKKyAgICAgIEFsbG9jYXRvcj46OnR5cGUKKyAgICAgIG1ldGFkYXRhX3R5cGU7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIG92X3RyZWVfbm9kZV9jb25zdF9pdF88CisJdmFsdWVfdHlwZSwKKwltZXRhZGF0YV90eXBlLAorCUFsbG9jYXRvcj4KKyAgICAgIGNvbnN0X25vZGVfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIG92X3RyZWVfbm9kZV9pdF88CisJdmFsdWVfdHlwZSwKKwltZXRhZGF0YV90eXBlLAorCUFsbG9jYXRvcj4KKyAgICAgIG5vZGVfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIE5vZGVfVXBkYXRlPAorCWNvbnN0X25vZGVfaXRlcmF0b3IsCisJbm9kZV9pdGVyYXRvciwKKwlDbXBfRm4sCisJQWxsb2NhdG9yPgorICAgICAgbm9kZV91cGRhdGU7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIF9fZ251X3BiZHM6Om51bGxfdHJlZV9ub2RlX3VwZGF0ZTwKKwljb25zdF9ub2RlX2l0ZXJhdG9yLAorCW5vZGVfaXRlcmF0b3IsCisJQ21wX0ZuLAorCUFsbG9jYXRvcj4qIAorICAgICAgbnVsbF9ub2RlX3VwZGF0ZV9wb2ludGVyOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksCisJICAgICBjbGFzcyBDbXBfRm4sCisJICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25zdF9Ob2RlX0l0ZXJhdG9yLAorCQkgICAgICBjbGFzcyBOb2RlX0l0ZXJhdG9yLAorCQkgICAgICBjbGFzcyBDbXBfRm5fLAorCQkgICAgICBjbGFzcyBBbGxvY2F0b3JfPgorICAgIGNsYXNzIE5vZGVfVXBkYXRlLAorCSAgICAgY2xhc3MgQWxsb2NhdG9yPgorICAgIHN0cnVjdCB0cmVlX3RyYWl0czwKKyAgICAgIEtleSwKKyAgICAgIG51bGxfbWFwcGVkX3R5cGUsCisgICAgICBDbXBfRm4sCisgICAgICBOb2RlX1VwZGF0ZSwKKyAgICAgIG92X3RyZWVfdGFnLAorICAgICAgQWxsb2NhdG9yPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgdHlwZXNfdHJhaXRzPAorICAgICAgS2V5LAorICAgICAgbnVsbF9tYXBwZWRfdHlwZSwKKyAgICAgIEFsbG9jYXRvciwKKyAgICAgIGZhbHNlPjo6dmFsdWVfdHlwZQorICAgICAgdmFsdWVfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIHRyZWVfbm9kZV9tZXRhZGF0YV9zZWxlY3RvcjwKKyAgICAgIEtleSwKKyAgICAgIG51bGxfbWFwcGVkX3R5cGUsCisgICAgICBDbXBfRm4sCisgICAgICBOb2RlX1VwZGF0ZSwKKyAgICAgIEFsbG9jYXRvcj46OnR5cGUKKyAgICAgIG1ldGFkYXRhX3R5cGU7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIG92X3RyZWVfbm9kZV9jb25zdF9pdF88CisJdmFsdWVfdHlwZSwKKwltZXRhZGF0YV90eXBlLAorCUFsbG9jYXRvcj4KKyAgICAgIGNvbnN0X25vZGVfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgY29uc3Rfbm9kZV9pdGVyYXRvciBub2RlX2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmCisgICAgICBOb2RlX1VwZGF0ZTwKKwljb25zdF9ub2RlX2l0ZXJhdG9yLAorCWNvbnN0X25vZGVfaXRlcmF0b3IsCisJQ21wX0ZuLAorCUFsbG9jYXRvcj4KKyAgICAgIG5vZGVfdXBkYXRlOworCisgICAgICB0eXBlZGVmCisgICAgICBfX2dudV9wYmRzOjpudWxsX3RyZWVfbm9kZV91cGRhdGU8CisJY29uc3Rfbm9kZV9pdGVyYXRvciwKKwlub2RlX2l0ZXJhdG9yLAorCUNtcF9GbiwKKwlBbGxvY2F0b3I+KiAKKyAgICAgIG51bGxfbm9kZV91cGRhdGVfcG9pbnRlcjsKKyAgICB9OworCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgLy8gI2lmbmRlZiBQQl9EU19PVl9UUkVFX05PREVfQU5EX0lUX1RSQUlUU19IUFAKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhaXJpbmdfaGVhcF8vY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcGFpcmluZ19oZWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjkyZWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhaXJpbmdfaGVhcF8vY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw5MSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBhIHBhaXJpbmcgaGVhcC4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgSXQ+Cit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citjb3B5X2Zyb21fcmFuZ2UoSXQgZmlyc3RfaXQsIEl0IGxhc3RfaXQpCit7CisgIHdoaWxlIChmaXJzdF9pdCAhPSBsYXN0X2l0KQorICAgIHB1c2goKihmaXJzdF9pdCsrKSk7CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorcGFpcmluZ19oZWFwXygpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgIH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3BhaXJpbmdfaGVhcF8oY29uc3QgQ21wX0ZuJiByX2NtcF9mbikgOgorICBQQl9EU19CQVNFX0NfREVDKHJfY21wX2ZuKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitwYWlyaW5nX2hlYXBfKGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikgOgorICBQQl9EU19CQVNFX0NfREVDKG90aGVyKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICB9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citzd2FwKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisKKyAgICBQQl9EU19CQVNFX0NfREVDOjpzd2FwKG90aGVyKTsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6Cit+cGFpcmluZ19oZWFwXygpCit7IH0KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYWlyaW5nX2hlYXBfL2RlYnVnX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhaXJpbmdfaGVhcF8vZGVidWdfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M5ZmMxMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYWlyaW5nX2hlYXBfL2RlYnVnX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNTMgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGRlYnVnX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYSBwYWlyaW5nIGhlYXAuCisgKi8KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfdmFsaWQoKSBjb25zdAoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoYmFzZV90eXBlOjptX3Bfcm9vdCA9PSBOVUxMIAorCQkgICAgICAgIHx8IGJhc2VfdHlwZTo6bV9wX3Jvb3QtPm1fcF9uZXh0X3NpYmxpbmcgPT0gTlVMTCk7CisgIGJhc2VfdHlwZTo6YXNzZXJ0X3ZhbGlkKCk7Cit9CisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYWlyaW5nX2hlYXBfL2VyYXNlX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhaXJpbmdfaGVhcF8vZXJhc2VfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA1YmUxMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYWlyaW5nX2hlYXBfL2VyYXNlX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMjM2IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBlcmFzZV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGEgcGFpcmluZyBoZWFwLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citwb3AoKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKCFiYXNlX3R5cGU6OmVtcHR5KCkpOworCisgIG5vZGVfcG9pbnRlciBwX25ld19yb290ID0gam9pbl9ub2RlX2NoaWxkcmVuKGJhc2VfdHlwZTo6bV9wX3Jvb3QpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF9ub2RlX2NvbnNpc3RlbnQocF9uZXdfcm9vdCwgZmFsc2UpOykKKyAgaWYgKHBfbmV3X3Jvb3QgIT0gTlVMTCkKKyAgICBwX25ld19yb290LT5tX3BfcHJldl9vcl9wYXJlbnQgPSBOVUxMOworCisgIGJhc2VfdHlwZTo6YWN0dWFsX2VyYXNlX25vZGUoYmFzZV90eXBlOjptX3Bfcm9vdCk7CisgIGJhc2VfdHlwZTo6bV9wX3Jvb3QgPSBwX25ld19yb290OworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlKHBvaW50X2l0ZXJhdG9yIGl0KQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKCFiYXNlX3R5cGU6OmVtcHR5KCkpOworICByZW1vdmVfbm9kZShpdC5tX3BfbmQpOworICBiYXNlX3R5cGU6OmFjdHVhbF9lcmFzZV9ub2RlKGl0Lm1fcF9uZCk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVtb3ZlX25vZGUobm9kZV9wb2ludGVyIHBfbmQpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoIWJhc2VfdHlwZTo6ZW1wdHkoKSk7CisgIG5vZGVfcG9pbnRlciBwX25ld19jaGlsZCA9IGpvaW5fbm9kZV9jaGlsZHJlbihwX25kKTsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgIGlmIChwX25ld19jaGlsZCAhPSBOVUxMKQorICAgIGJhc2VfdHlwZTo6YXNzZXJ0X25vZGVfY29uc2lzdGVudChwX25ld19jaGlsZCwgZmFsc2UpOworI2VuZGlmIAorCisgIGlmIChwX25kID09IGJhc2VfdHlwZTo6bV9wX3Jvb3QpCisgICAgeworICAgICAgaWYgKHBfbmV3X2NoaWxkICE9IE5VTEwpCisJcF9uZXdfY2hpbGQtPm1fcF9wcmV2X29yX3BhcmVudCA9IE5VTEw7CisgICAgICBiYXNlX3R5cGU6Om1fcF9yb290ID0gcF9uZXdfY2hpbGQ7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGJhc2VfdHlwZTo6YXNzZXJ0X25vZGVfY29uc2lzdGVudChiYXNlX3R5cGU6Om1fcF9yb290LCBmYWxzZSk7KQorICAgICAgcmV0dXJuOworICAgIH0KKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV9wX3ByZXZfb3JfcGFyZW50ICE9IE5VTEwpOworICBpZiAocF9uZC0+bV9wX3ByZXZfb3JfcGFyZW50LT5tX3BfbF9jaGlsZCA9PSBwX25kKQorICAgIHsKKyAgICAgIGlmIChwX25ld19jaGlsZCAhPSBOVUxMKQorICAgICAgICB7CisJICBwX25ld19jaGlsZC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9uZC0+bV9wX3ByZXZfb3JfcGFyZW50OworCSAgcF9uZXdfY2hpbGQtPm1fcF9uZXh0X3NpYmxpbmcgPSBwX25kLT5tX3BfbmV4dF9zaWJsaW5nOworCSAgaWYgKHBfbmV3X2NoaWxkLT5tX3BfbmV4dF9zaWJsaW5nICE9IE5VTEwpCisJICAgIHBfbmV3X2NoaWxkLT5tX3BfbmV4dF9zaWJsaW5nLT5tX3BfcHJldl9vcl9wYXJlbnQgPSBwX25ld19jaGlsZDsKKwkgIHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudC0+bV9wX2xfY2hpbGQgPSBwX25ld19jaGlsZDsKKwkgIF9HTElCQ1hYX0RFQlVHX09OTFkoYmFzZV90eXBlOjphc3NlcnRfbm9kZV9jb25zaXN0ZW50KHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudCwgZmFsc2UpOykKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgcF9uZC0+bV9wX3ByZXZfb3JfcGFyZW50LT5tX3BfbF9jaGlsZCA9IHBfbmQtPm1fcF9uZXh0X3NpYmxpbmc7CisgICAgICBpZiAocF9uZC0+bV9wX25leHRfc2libGluZyAhPSBOVUxMKQorCXBfbmQtPm1fcF9uZXh0X3NpYmxpbmctPm1fcF9wcmV2X29yX3BhcmVudCA9IHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudDsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYmFzZV90eXBlOjphc3NlcnRfbm9kZV9jb25zaXN0ZW50KHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudCwgZmFsc2UpOykKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKHBfbmV3X2NoaWxkICE9IE5VTEwpCisgICAgeworICAgICAgcF9uZXdfY2hpbGQtPm1fcF9wcmV2X29yX3BhcmVudCA9IHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudDsKKyAgICAgIHBfbmV3X2NoaWxkLT5tX3BfbmV4dF9zaWJsaW5nID0gcF9uZC0+bV9wX25leHRfc2libGluZzsKKyAgICAgIGlmIChwX25ld19jaGlsZC0+bV9wX25leHRfc2libGluZyAhPSBOVUxMKQorCXBfbmV3X2NoaWxkLT5tX3BfbmV4dF9zaWJsaW5nLT5tX3BfcHJldl9vcl9wYXJlbnQgPSBwX25ld19jaGlsZDsKKyAgICAgIHBfbmV3X2NoaWxkLT5tX3BfcHJldl9vcl9wYXJlbnQtPm1fcF9uZXh0X3NpYmxpbmcgPSBwX25ld19jaGlsZDsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYmFzZV90eXBlOjphc3NlcnRfbm9kZV9jb25zaXN0ZW50KHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudCwgZmFsc2UpOykKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgcF9uZC0+bV9wX3ByZXZfb3JfcGFyZW50LT5tX3BfbmV4dF9zaWJsaW5nID0gcF9uZC0+bV9wX25leHRfc2libGluZzsKKyAgaWYgKHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgIT0gTlVMTCkKKyAgICBwX25kLT5tX3BfbmV4dF9zaWJsaW5nLT5tX3BfcHJldl9vcl9wYXJlbnQgPSBwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQ7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYmFzZV90eXBlOjphc3NlcnRfbm9kZV9jb25zaXN0ZW50KHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudCwgZmFsc2UpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2pvaW5fbm9kZV9jaGlsZHJlbihub2RlX3BvaW50ZXIgcF9uZCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQgIT0gTlVMTCk7CisgIG5vZGVfcG9pbnRlciBwX3JldCA9IHBfbmQtPm1fcF9sX2NoaWxkOworICBpZiAocF9yZXQgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKyAgd2hpbGUgKHBfcmV0LT5tX3BfbmV4dF9zaWJsaW5nICE9IE5VTEwpCisgICAgcF9yZXQgPSBmb3J3YXJkX2pvaW4ocF9yZXQsIHBfcmV0LT5tX3BfbmV4dF9zaWJsaW5nKTsKKyAgd2hpbGUgKHBfcmV0LT5tX3BfcHJldl9vcl9wYXJlbnQgIT0gcF9uZCkKKyAgICBwX3JldCA9IGJhY2tfam9pbihwX3JldC0+bV9wX3ByZXZfb3JfcGFyZW50LCBwX3JldCk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X25vZGVfY29uc2lzdGVudChwX3JldCwgZmFsc2UpOykKKyAgcmV0dXJuIHBfcmV0OworfQorCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZm9yd2FyZF9qb2luKG5vZGVfcG9pbnRlciBwX25kLCBub2RlX3BvaW50ZXIgcF9uZXh0KQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZCAhPSBOVUxMKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgPT0gcF9uZXh0KTsKKyAgaWYgKENtcF9Gbjo6b3BlcmF0b3IoKShwX25kLT5tX3ZhbHVlLCBwX25leHQtPm1fdmFsdWUpKQorICAgIHsKKyAgICAgIHBfbmV4dC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9uZC0+bV9wX3ByZXZfb3JfcGFyZW50OworICAgICAgYmFzZV90eXBlOjptYWtlX2NoaWxkX29mKHBfbmQsIHBfbmV4dCk7CisgICAgICByZXR1cm4gcF9uZXh0LT5tX3BfbmV4dF9zaWJsaW5nID09IE5VTEwgCisJPyBwX25leHQgOiBwX25leHQtPm1fcF9uZXh0X3NpYmxpbmc7CisgICAgfQorCisgIGlmIChwX25leHQtPm1fcF9uZXh0X3NpYmxpbmcgIT0gTlVMTCkKKyAgICB7CisgICAgICBwX25leHQtPm1fcF9uZXh0X3NpYmxpbmctPm1fcF9wcmV2X29yX3BhcmVudCA9IHBfbmQ7CisgICAgICBwX25kLT5tX3BfbmV4dF9zaWJsaW5nID0gcF9uZXh0LT5tX3BfbmV4dF9zaWJsaW5nOworICAgICAgYmFzZV90eXBlOjptYWtlX2NoaWxkX29mKHBfbmV4dCwgcF9uZCk7CisgICAgICByZXR1cm4gcF9uZC0+bV9wX25leHRfc2libGluZzsKKyAgICB9CisKKyAgcF9uZC0+bV9wX25leHRfc2libGluZyA9IE5VTEw7CisgIGJhc2VfdHlwZTo6bWFrZV9jaGlsZF9vZihwX25leHQsIHBfbmQpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGJhc2VfdHlwZTo6YXNzZXJ0X25vZGVfY29uc2lzdGVudChwX25kLCBmYWxzZSkpOworICByZXR1cm4gcF9uZDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2JhY2tfam9pbihub2RlX3BvaW50ZXIgcF9uZCwgbm9kZV9wb2ludGVyIHBfbmV4dCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQgIT0gTlVMTCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25leHQtPm1fcF9uZXh0X3NpYmxpbmcgPT0gTlVMTCk7CisKKyAgaWYgKENtcF9Gbjo6b3BlcmF0b3IoKShwX25kLT5tX3ZhbHVlLCBwX25leHQtPm1fdmFsdWUpKQorICAgIHsKKyAgICAgIHBfbmV4dC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9uZC0+bV9wX3ByZXZfb3JfcGFyZW50OworICAgICAgYmFzZV90eXBlOjptYWtlX2NoaWxkX29mKHBfbmQsIHBfbmV4dCk7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGJhc2VfdHlwZTo6YXNzZXJ0X25vZGVfY29uc2lzdGVudChwX25leHQsIGZhbHNlKSk7CisgICAgICByZXR1cm4gcF9uZXh0OworICAgIH0KKworICBwX25kLT5tX3BfbmV4dF9zaWJsaW5nID0gTlVMTDsKKyAgYmFzZV90eXBlOjptYWtlX2NoaWxkX29mKHBfbmV4dCwgcF9uZCk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYmFzZV90eXBlOjphc3NlcnRfbm9kZV9jb25zaXN0ZW50KHBfbmQsIGZhbHNlKSk7CisgIHJldHVybiBwX25kOworfQorCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgUHJlZD4KK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlX2lmKFByZWQgcHJlZCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgaWYgKGJhc2VfdHlwZTo6ZW1wdHkoKSkKKyAgICAgIHsKKyAgICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisJcmV0dXJuIDA7CisgICAgICB9CisgIGJhc2VfdHlwZTo6dG9fbGlua2VkX2xpc3QoKTsKKyAgbm9kZV9wb2ludGVyIHBfb3V0ID0gYmFzZV90eXBlOjpwcnVuZShwcmVkKTsKKyAgc2l6ZV90eXBlIGVyc2QgPSAwOworICB3aGlsZSAocF9vdXQgIT0gTlVMTCkKKyAgICB7CisgICAgICArK2Vyc2Q7CisgICAgICBub2RlX3BvaW50ZXIgcF9uZXh0ID0gcF9vdXQtPm1fcF9uZXh0X3NpYmxpbmc7CisgICAgICBiYXNlX3R5cGU6OmFjdHVhbF9lcmFzZV9ub2RlKHBfb3V0KTsKKyAgICAgIHBfb3V0ID0gcF9uZXh0OworICAgIH0KKworICBub2RlX3BvaW50ZXIgcF9jdXIgPSBiYXNlX3R5cGU6Om1fcF9yb290OworICBiYXNlX3R5cGU6Om1fcF9yb290ID0gTlVMTDsKKyAgd2hpbGUgKHBfY3VyICE9IE5VTEwpCisgICAgeworICAgICAgbm9kZV9wb2ludGVyIHBfbmV4dCA9IHBfY3VyLT5tX3BfbmV4dF9zaWJsaW5nOworICAgICAgcF9jdXItPm1fcF9sX2NoaWxkID0gcF9jdXItPm1fcF9uZXh0X3NpYmxpbmcgPSBwX2N1ci0+bV9wX3ByZXZfb3JfcGFyZW50ID0gTlVMTDsKKworICAgICAgcHVzaF9pbXAocF9jdXIpOworICAgICAgcF9jdXIgPSBwX25leHQ7CisgICAgfQorICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgcmV0dXJuIGVyc2Q7Cit9CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYWlyaW5nX2hlYXBfL2ZpbmRfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcGFpcmluZ19oZWFwXy9maW5kX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZWZkNzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcGFpcmluZ19oZWFwXy9maW5kX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNTAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGZpbmRfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBhIHBhaXJpbmcgaGVhcC4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9yZWZlcmVuY2UKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3RvcCgpIGNvbnN0Cit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCghYmFzZV90eXBlOjplbXB0eSgpKTsKKworICByZXR1cm4gYmFzZV90eXBlOjptX3Bfcm9vdC0+bV92YWx1ZTsKK30KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYWlyaW5nX2hlYXBfL2luc2VydF9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYWlyaW5nX2hlYXBfL2luc2VydF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDBlOWQxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhaXJpbmdfaGVhcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTAxIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBpbnNlcnRfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBhIHBhaXJpbmcgaGVhcC4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcHVzaChjb25zdF9yZWZlcmVuY2Ugcl92YWwpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorCisgICAgbm9kZV9wb2ludGVyIHBfbmV3X25kID0gYmFzZV90eXBlOjpnZXRfbmV3X25vZGVfZm9yX2luc2VydChyX3ZhbCk7CisKKyAgcHVzaF9pbXAocF9uZXdfbmQpOworCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorCisgICAgcmV0dXJuIHBvaW50X2l0ZXJhdG9yKHBfbmV3X25kKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitwdXNoX2ltcChub2RlX3BvaW50ZXIgcF9uZCkKK3sKKyAgcF9uZC0+bV9wX2xfY2hpbGQgPSBOVUxMOworCisgIGlmIChiYXNlX3R5cGU6Om1fcF9yb290ID09IE5VTEwpCisgICAgeworICAgICAgcF9uZC0+bV9wX25leHRfc2libGluZyA9IHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudCA9IE5VTEw7CisKKyAgICAgIGJhc2VfdHlwZTo6bV9wX3Jvb3QgPSBwX25kOworICAgIH0KKyAgZWxzZSBpZiAoQ21wX0ZuOjpvcGVyYXRvcigpKGJhc2VfdHlwZTo6bV9wX3Jvb3QtPm1fdmFsdWUsIHBfbmQtPm1fdmFsdWUpKQorICAgIHsKKyAgICAgIHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgPSBwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQgPSBOVUxMOworCisgICAgICBiYXNlX3R5cGU6Om1ha2VfY2hpbGRfb2YoYmFzZV90eXBlOjptX3Bfcm9vdCwgcF9uZCk7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGJhc2VfdHlwZTo6YXNzZXJ0X25vZGVfY29uc2lzdGVudChwX25kLCBmYWxzZSkpOworCisgICAgICBiYXNlX3R5cGU6Om1fcF9yb290ID0gcF9uZDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBiYXNlX3R5cGU6Om1ha2VfY2hpbGRfb2YocF9uZCwgYmFzZV90eXBlOjptX3Bfcm9vdCk7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGJhc2VfdHlwZTo6YXNzZXJ0X25vZGVfY29uc2lzdGVudChiYXNlX3R5cGU6Om1fcF9yb290LCBmYWxzZSkpOworICAgIH0KK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK21vZGlmeShwb2ludF9pdGVyYXRvciBpdCwgY29uc3RfcmVmZXJlbmNlIHJfbmV3X3ZhbCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisKKyAgICByZW1vdmVfbm9kZShpdC5tX3BfbmQpOworCisgIGl0Lm1fcF9uZC0+bV92YWx1ZSA9IHJfbmV3X3ZhbDsKKworICBwdXNoX2ltcChpdC5tX3BfbmQpOworCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgIH0KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhaXJpbmdfaGVhcF8vcGFpcmluZ19oZWFwXy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcGFpcmluZ19oZWFwXy9wYWlyaW5nX2hlYXBfLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTliY2I2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhaXJpbmdfaGVhcF8vcGFpcmluZ19oZWFwXy5ocHAKQEAgLTAsMCArMSwyMTYgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHBhaXJpbmdfaGVhcF8uaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYSBwYWlyaW5nIGhlYXAuCisgKi8KKworLyoKKyAqIFBhaXJpbmcgaGVhcDoKKyAqIE1pY2hhZWwgTC4gRnJlZG1hbiwgUm9iZXJ0IFNlZGdld2ljaywgRGFuaWVsIERvbWluaWMgU2xlYXRvciwKKyAqICAgIGFuZCBSb2JlcnQgRW5kcmUgVGFyamFuLCBUaGUgUGFpcmluZyBIZWFwOgorICogICAgQSBOZXcgRm9ybSBvZiBTZWxmLUFkanVzdGluZyBIZWFwLCBBbGdvcml0aG1pY2EsIDEoMSk6MTExLTEyOSwgMTk4Ni4KKyAqLworCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jb25kX2RlYWx0b3IuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHlwZV91dGlscy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9udWxsX21ldGFkYXRhLmhwcD4KKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQyBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVfVHlwZSwgY2xhc3MgQ21wX0ZuLCBjbGFzcyBBbGxvY2F0b3I+CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfQ19ERUMgXAorICAgIHBhaXJpbmdfaGVhcF88VmFsdWVfVHlwZSwgQ21wX0ZuLCBBbGxvY2F0b3I+CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworI2RlZmluZSBQQl9EU19CQVNFX0NfREVDIFwKKyAgICBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXzwJCQlcCisJCQkJCQkJCQlWYWx1ZV9UeXBlLCBcCisJCQkJCQkJCQlDbXBfRm4sCVwKKwkJCQkJCQkJCW51bGxfbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF9ub2RlX21ldGFkYXRhLCBcCisJCQkJCQkJCQlBbGxvY2F0b3IsIFwKKwkJCQkJCQkJCWZhbHNlPgorI2Vsc2UgCisjZGVmaW5lIFBCX0RTX0JBU0VfQ19ERUMJCQkJCQlcCisgICAgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF88CQkJXAorCQkJCQkJCQkJVmFsdWVfVHlwZSwgXAorCQkJCQkJCQkJQ21wX0ZuLAlcCisJCQkJCQkJCQludWxsX2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfbm9kZV9tZXRhZGF0YSwgXAorCQkJCQkJCQkJQWxsb2NhdG9yPgorI2VuZGlmIAorCisgICAgLyoqCisgICAgICogY2xhc3MgZGVzY3JpcHRpb24gPSAiUDRyaXxcfGcgaDNhcCQiPgorICAgICAqKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZV9UeXBlLCBjbGFzcyBDbXBfRm4sIGNsYXNzIEFsbG9jYXRvcj4KKyAgICBjbGFzcyBwYWlyaW5nX2hlYXBfIDogcHVibGljIFBCX0RTX0JBU0VfQ19ERUMKKyAgICB7CisKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBQQl9EU19CQVNFX0NfREVDIGJhc2VfdHlwZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Om5vZGVfcG9pbnRlciBub2RlX3BvaW50ZXI7CisKKyAgICBwdWJsaWM6CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjpzaXplX3R5cGUgc2l6ZV90eXBlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKKworICAgICAgdHlwZWRlZiBWYWx1ZV9UeXBlIHZhbHVlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCXZhbHVlX3R5cGU+OjpvdGhlcjo6cG9pbnRlcgorICAgICAgcG9pbnRlcjsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8CisJdmFsdWVfdHlwZT46Om90aGVyOjpjb25zdF9wb2ludGVyCisgICAgICBjb25zdF9wb2ludGVyOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKwl2YWx1ZV90eXBlPjo6b3RoZXI6OnJlZmVyZW5jZQorICAgICAgcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKwl2YWx1ZV90eXBlPjo6b3RoZXI6OmNvbnN0X3JlZmVyZW5jZQorICAgICAgY29uc3RfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBQQl9EU19CQVNFX0NfREVDOjpjb25zdF9wb2ludF9pdGVyYXRvcgorICAgICAgY29uc3RfcG9pbnRfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgUEJfRFNfQkFTRV9DX0RFQzo6cG9pbnRfaXRlcmF0b3IgcG9pbnRfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgUEJfRFNfQkFTRV9DX0RFQzo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgUEJfRFNfQkFTRV9DX0RFQzo6aXRlcmF0b3IgaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgQ21wX0ZuIGNtcF9mbjsKKworICAgICAgdHlwZWRlZiBBbGxvY2F0b3IgYWxsb2NhdG9yX3R5cGU7CisKKworICAgICAgcGFpcmluZ19oZWFwXygpOworCisgICAgICBwYWlyaW5nX2hlYXBfKGNvbnN0IENtcF9GbiYgcl9jbXBfZm4pOworCisgICAgICBwYWlyaW5nX2hlYXBfKGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcik7CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKTsKKworICAgICAgfnBhaXJpbmdfaGVhcF8oKTsKKworICAgICAgaW5saW5lIHBvaW50X2l0ZXJhdG9yCisgICAgICBwdXNoKGNvbnN0X3JlZmVyZW5jZSByX3ZhbCk7CisKKyAgICAgIHZvaWQKKyAgICAgIG1vZGlmeShwb2ludF9pdGVyYXRvciBpdCwgY29uc3RfcmVmZXJlbmNlIHJfbmV3X3ZhbCk7CisKKyAgICAgIGlubGluZSBjb25zdF9yZWZlcmVuY2UKKyAgICAgIHRvcCgpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBwb3AoKTsKKworICAgICAgdm9pZAorICAgICAgZXJhc2UocG9pbnRfaXRlcmF0b3IgaXQpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkPgorICAgICAgc2l6ZV90eXBlCisgICAgICBlcmFzZV9pZihQcmVkIHByZWQpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkPgorICAgICAgdm9pZAorICAgICAgc3BsaXQoUHJlZCBwcmVkLCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpOworCisgICAgICB2b2lkCisgICAgICBqb2luKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcik7CisKKyAgICBwcm90ZWN0ZWQ6CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0PgorICAgICAgdm9pZAorICAgICAgY29weV9mcm9tX3JhbmdlKEl0IGZpcnN0X2l0LCBJdCBsYXN0X2l0KTsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfdmFsaWQoKSBjb25zdDsKKyNlbmRpZgorCisgICAgcHJpdmF0ZToKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIHB1c2hfaW1wKG5vZGVfcG9pbnRlciBwX25kKTsKKworICAgICAgbm9kZV9wb2ludGVyCisgICAgICBqb2luX25vZGVfY2hpbGRyZW4obm9kZV9wb2ludGVyIHBfbmQpOworCisgICAgICBub2RlX3BvaW50ZXIKKyAgICAgIGZvcndhcmRfam9pbihub2RlX3BvaW50ZXIgcF9uZCwgbm9kZV9wb2ludGVyIHBfbmV4dCk7CisKKyAgICAgIG5vZGVfcG9pbnRlcgorICAgICAgYmFja19qb2luKG5vZGVfcG9pbnRlciBwX25kLCBub2RlX3BvaW50ZXIgcF9uZXh0KTsKKworICAgICAgdm9pZAorICAgICAgcmVtb3ZlX25vZGUobm9kZV9wb2ludGVyIHBfbmQpOworCisgICAgfTsKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcGFpcmluZ19oZWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3BhaXJpbmdfaGVhcF8vZGVidWdfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9wYWlyaW5nX2hlYXBfL2ZpbmRfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9wYWlyaW5nX2hlYXBfL2luc2VydF9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3BhaXJpbmdfaGVhcF8vZXJhc2VfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9wYWlyaW5nX2hlYXBfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHA+CisKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQkFTRV9DX0RFQworCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhaXJpbmdfaGVhcF8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYWlyaW5nX2hlYXBfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVkNGRkZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYWlyaW5nX2hlYXBfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxNDAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHNwbGl0X2pvaW5fZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBhIHBhaXJpbmcgaGVhcC4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgUHJlZD4KK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3NwbGl0KFByZWQgcHJlZCwgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpOykKKworICAgIG90aGVyLmNsZWFyKCk7CisKKyAgaWYgKGJhc2VfdHlwZTo6ZW1wdHkoKSkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspCisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICBiYXNlX3R5cGU6OnRvX2xpbmtlZF9saXN0KCk7CisKKyAgbm9kZV9wb2ludGVyIHBfb3V0ID0gYmFzZV90eXBlOjpwcnVuZShwcmVkKTsKKworICB3aGlsZSAocF9vdXQgIT0gTlVMTCkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoYmFzZV90eXBlOjptX3NpemUgPiAwKTsKKyAgICAgIC0tYmFzZV90eXBlOjptX3NpemU7CisKKyAgICAgICsrb3RoZXIubV9zaXplOworCisgICAgICBub2RlX3BvaW50ZXIgcF9uZXh0ID0gcF9vdXQtPm1fcF9uZXh0X3NpYmxpbmc7CisKKyAgICAgIHBfb3V0LT5tX3BfbF9jaGlsZCA9IHBfb3V0LT5tX3BfbmV4dF9zaWJsaW5nID0gcF9vdXQtPm1fcF9wcmV2X29yX3BhcmVudCA9IE5VTEw7CisKKyAgICAgIG90aGVyLnB1c2hfaW1wKHBfb3V0KTsKKworICAgICAgcF9vdXQgPSBwX25leHQ7CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKCk7KQorCisgICAgbm9kZV9wb2ludGVyIHBfY3VyID0gYmFzZV90eXBlOjptX3Bfcm9vdDsKKworICBiYXNlX3R5cGU6Om1fcF9yb290ID0gTlVMTDsKKworICB3aGlsZSAocF9jdXIgIT0gTlVMTCkKKyAgICB7CisgICAgICBub2RlX3BvaW50ZXIgcF9uZXh0ID0gcF9jdXItPm1fcF9uZXh0X3NpYmxpbmc7CisKKyAgICAgIHBfY3VyLT5tX3BfbF9jaGlsZCA9IHBfY3VyLT5tX3BfbmV4dF9zaWJsaW5nID0gcF9jdXItPm1fcF9wcmV2X29yX3BhcmVudCA9IE5VTEw7CisKKyAgICAgIHB1c2hfaW1wKHBfY3VyKTsKKworICAgICAgcF9jdXIgPSBwX25leHQ7CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKCk7KQorICAgIH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citqb2luKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspCisKKyAgICBpZiAob3RoZXIubV9wX3Jvb3QgPT0gTlVMTCkKKyAgICAgIHsKKyAgICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisJICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpOykKKworCSAgcmV0dXJuOworICAgICAgfQorCisgIGlmIChiYXNlX3R5cGU6Om1fcF9yb290ID09IE5VTEwpCisgICAgYmFzZV90eXBlOjptX3Bfcm9vdCA9IG90aGVyLm1fcF9yb290OworICBlbHNlIGlmIChDbXBfRm46Om9wZXJhdG9yKCkoYmFzZV90eXBlOjptX3Bfcm9vdC0+bV92YWx1ZSwgb3RoZXIubV9wX3Jvb3QtPm1fdmFsdWUpKQorICAgIHsKKyAgICAgIGJhc2VfdHlwZTo6bWFrZV9jaGlsZF9vZihiYXNlX3R5cGU6Om1fcF9yb290LCBvdGhlci5tX3Bfcm9vdCk7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGJhc2VfdHlwZTo6YXNzZXJ0X25vZGVfY29uc2lzdGVudChvdGhlci5tX3Bfcm9vdCwgZmFsc2UpKTsKKworICAgICAgYmFzZV90eXBlOjptX3Bfcm9vdCA9IG90aGVyLm1fcF9yb290OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGJhc2VfdHlwZTo6bWFrZV9jaGlsZF9vZihvdGhlci5tX3Bfcm9vdCwgYmFzZV90eXBlOjptX3Bfcm9vdCk7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGJhc2VfdHlwZTo6YXNzZXJ0X25vZGVfY29uc2lzdGVudChiYXNlX3R5cGU6Om1fcF9yb290LCBmYWxzZSkpOworICAgIH0KKworICBiYXNlX3R5cGU6Om1fc2l6ZSArPSBvdGhlci5tX3NpemU7CisKKyAgb3RoZXIubV9wX3Jvb3QgPSBOVUxMOworICBvdGhlci5tX3NpemUgPSAwOworCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKCk7KQorICAgIH0KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9jaGlsZF9pdGVyYXRvci5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL2NoaWxkX2l0ZXJhdG9yLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWYzNDllCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9jaGlsZF9pdGVyYXRvci5ocHAKQEAgLTAsMCArMSw5MyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY2hpbGRfaXRlcmF0b3IuaHBwCisgKiBDb250YWlucyBhIGl0ZXJhdG9yIGZvciBhIHBhdHJpY2lhIHRyZWUuCisgKi8KKworc3RydWN0IGl0ZXJhdG9yIDogcHVibGljIGNvbnN0X2l0ZXJhdG9yCit7CitwdWJsaWM6CisgIHR5cGVkZWYgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKKyAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisgIHR5cGVkZWYgbm9kZV9wb2ludGVyIHZhbHVlX3R5cGU7CisgIHR5cGVkZWYgbm9kZV9wb2ludGVyX3BvaW50ZXIgcG9pbnRlcjsKKyAgdHlwZWRlZiBub2RlX3BvaW50ZXJfcmVmZXJlbmNlIHJlZmVyZW5jZTsKKworICBpbmxpbmUKKyAgaXRlcmF0b3Iobm9kZV9wb2ludGVyX3BvaW50ZXIgcF9wX2N1ciA9IE5VTEwsICAKKwkgICBub2RlX3BvaW50ZXJfcG9pbnRlciBwX3BfZW5kID0gTlVMTCkgCisgIDogY29uc3RfaXRlcmF0b3IocF9wX2N1ciwgcF9wX2VuZCkKKyAgeyB9CisKKyAgaW5saW5lIGJvb2wKKyAgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yOjptX3BfcF9jdXIgPT0gb3RoZXIubV9wX3BfY3VyOyB9CisKKyAgaW5saW5lIGJvb2wKKyAgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yOjptX3BfcF9jdXIgIT0gb3RoZXIubV9wX3BfY3VyOyB9CisKKyAgaW5saW5lIGl0ZXJhdG9yJiAKKyAgb3BlcmF0b3IrKygpCisgIHsKKyAgICBjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3IrKygpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIGlubGluZSBpdGVyYXRvcgorICBvcGVyYXRvcisrKGludCkKKyAgeworICAgIGl0ZXJhdG9yIHJldF9pdCgqdGhpcyk7CisgICAgb3BlcmF0b3IrKygpOworICAgIHJldHVybiByZXRfaXQ7CisgIH0KKworICBub2RlX3BvaW50ZXJfcG9pbnRlcgorICBvcGVyYXRvci0+KCkKKyAgeworICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoY29uc3RfaXRlcmF0b3I6OmFzc2VydF9yZWZlcmVuY2libGUoKTspCisgICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yOjptX3BfcF9jdXI7CisgIH0KKworICBub2RlX3BvaW50ZXIKKyAgb3BlcmF0b3IqKCkKKyAgeworICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoY29uc3RfaXRlcmF0b3I6OmFzc2VydF9yZWZlcmVuY2libGUoKTspCisgICAgcmV0dXJuICpjb25zdF9pdGVyYXRvcjo6bV9wX3BfY3VyOworICB9Cit9OworCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL2NvbmRfZHRvcl9lbnRyeV9kZWFsdG9yLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vY29uZF9kdG9yX2VudHJ5X2RlYWx0b3IuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NGI5ODYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL2NvbmRfZHRvcl9lbnRyeV9kZWFsdG9yLmhwcApAQCAtMCwwICsxLDc5IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBjb25kX2R0b3JfZW50cnlfZGVhbHRvci5ocHAKKyAqIENvbnRhaW5zIGEgYmluYXJ5IHRyZWUgY29udGFpbmVyIGNvbmRpdGlvbmFsIGRlYWxsb2NhdG9yCisgKi8KKworY2xhc3MgY29uZF9kZWFsdG9yCit7CitwdWJsaWM6CisgIGlubGluZQorICBjb25kX2RlYWx0b3IobGVhZl9wb2ludGVyIHBfbmQpIDogbV9wX25kKHBfbmQpLAorCQkJCSAgICBtX25vX2FjdGlvbl9kdG9yKGZhbHNlKSwKKwkJCQkgICAgbV9jYWxsX2Rlc3RydWN0b3IoZmFsc2UpCisgIHsgfQorCisgIGlubGluZSB2b2lkCisgIHNldF9ub19hY3Rpb25fZHRvcigpCisgIHsKKyAgICBtX25vX2FjdGlvbl9kdG9yID0gdHJ1ZTsKKyAgfQorCisgIGlubGluZSB2b2lkCisgIHNldF9jYWxsX2Rlc3RydWN0b3IoKQorICB7CisgICAgbV9jYWxsX2Rlc3RydWN0b3IgPSB0cnVlOworICB9CisKKyAgaW5saW5lCisgIH5jb25kX2RlYWx0b3IoKQorICB7CisgICAgaWYgKG1fbm9fYWN0aW9uX2R0b3IpCisgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jYWxsX2Rlc3RydWN0b3IpCisgICAgICBtX3BfbmQtPn5sZWFmKCk7CisKKyAgICBzX2xlYWZfYWxsb2NhdG9yLmRlYWxsb2NhdGUobV9wX25kLCAxKTsKKyAgfQorCitwcm90ZWN0ZWQ6CisgIGxlYWZfcG9pbnRlciBtX3BfbmQ7CisgIGJvb2wgbV9ub19hY3Rpb25fZHRvcjsKKyAgYm9vbCBtX2NhbGxfZGVzdHJ1Y3RvcjsKK307CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vY29uc3RfY2hpbGRfaXRlcmF0b3IuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9jb25zdF9jaGlsZF9pdGVyYXRvci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMzNDljZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vY29uc3RfY2hpbGRfaXRlcmF0b3IuaHBwCkBAIC0wLDAgKzEsMTExIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBjb25zdF9jaGlsZF9pdGVyYXRvci5ocHAKKyAqIENvbnRhaW5zIGEgY29uc3RfaXRlcmF0b3IgZm9yIGEgcGF0cmljaWEgdHJlZS4KKyAqLworCitzdHJ1Y3QgY29uc3RfaXRlcmF0b3IKK3sKK3B1YmxpYzoKKyAgdHlwZWRlZiBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OworCisgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworCisgIHR5cGVkZWYgbm9kZV9wb2ludGVyIHZhbHVlX3R5cGU7CisKKyAgdHlwZWRlZiBub2RlX3BvaW50ZXJfcG9pbnRlciBwb2ludGVyOworCisgIHR5cGVkZWYgbm9kZV9wb2ludGVyX3JlZmVyZW5jZSByZWZlcmVuY2U7CisKK3B1YmxpYzoKKyAgaW5saW5lCisgIGNvbnN0X2l0ZXJhdG9yKG5vZGVfcG9pbnRlcl9wb2ludGVyIHBfcF9jdXIgPSBOVUxMLCAgCisJCSBub2RlX3BvaW50ZXJfcG9pbnRlciBwX3BfZW5kID0gTlVMTCkgCisgIDogbV9wX3BfY3VyKHBfcF9jdXIpLCBtX3BfcF9lbmQocF9wX2VuZCkKKyAgeyB9CisKKyAgaW5saW5lIGJvb2wKKyAgb3BlcmF0b3I9PShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgIHsgcmV0dXJuIG1fcF9wX2N1ciA9PSBvdGhlci5tX3BfcF9jdXI7IH0KKworICBpbmxpbmUgYm9vbAorICBvcGVyYXRvciE9KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgeyByZXR1cm4gbV9wX3BfY3VyICE9IG90aGVyLm1fcF9wX2N1cjsgfQorCisgIGlubGluZSBjb25zdF9pdGVyYXRvciYgCisgIG9wZXJhdG9yKysoKQorICB7CisgICAgZG8KKyAgICAgICsrbV9wX3BfY3VyOworICAgIHdoaWxlIChtX3BfcF9jdXIgIT0gbV9wX3BfZW5kJiYgKiBtX3BfcF9jdXIgPT0gTlVMTCk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgaW5saW5lIGNvbnN0X2l0ZXJhdG9yCisgIG9wZXJhdG9yKysoaW50KQorICB7CisgICAgY29uc3RfaXRlcmF0b3IgcmV0X2l0KCp0aGlzKTsKKyAgICBvcGVyYXRvcisrKCk7CisgICAgcmV0dXJuIHJldF9pdDsKKyAgfQorCisgIGNvbnN0IG5vZGVfcG9pbnRlcl9wb2ludGVyCisgIG9wZXJhdG9yLT4oKSBjb25zdAorICB7CisgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfcmVmZXJlbmNpYmxlKCk7KQorICAgIHJldHVybiAobV9wX3BfY3VyKTsKKyAgfQorCisgIGNvbnN0X25vZGVfcG9pbnRlcgorICBvcGVyYXRvciooKSBjb25zdAorICB7CisgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfcmVmZXJlbmNpYmxlKCk7KQorICAgIHJldHVybiAoKm1fcF9wX2N1cik7CisgIH0KKworcHJvdGVjdGVkOgorI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgIHZvaWQKKyAgYXNzZXJ0X3JlZmVyZW5jaWJsZSgpIGNvbnN0CisgIHsgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF9wX2N1ciAhPSBtX3BfcF9lbmQmJiAqIG1fcF9wX2N1ciAhPSBOVUxMKTsgfQorI2VuZGlmIAorCitwdWJsaWM6CisgIG5vZGVfcG9pbnRlcl9wb2ludGVyIG1fcF9wX2N1cjsKKyAgbm9kZV9wb2ludGVyX3BvaW50ZXIgbV9wX3BfZW5kOworfTsKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EzOGY5MwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwyMTQgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGNvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYmluX3NlYXJjaF90cmVlXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmhlYWRfYWxsb2NhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6c19oZWFkX2FsbG9jYXRvcjsKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjppbnRlcm5hbF9ub2RlX2FsbG9jYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OnNfaW50ZXJuYWxfbm9kZV9hbGxvY2F0b3I7CisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bGVhZl9hbGxvY2F0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjpzX2xlYWZfYWxsb2NhdG9yOworCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfQ0xBU1NfTkFNRSgpIDoKKyAgbV9wX2hlYWQoc19oZWFkX2FsbG9jYXRvci5hbGxvY2F0ZSgxKSksCisgIG1fc2l6ZSgwKQoreworICBpbml0aWFsaXplKCk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfQ0xBU1NfTkFNRShjb25zdCBlX2FjY2Vzc190cmFpdHMmIHJfZV9hY2Nlc3NfdHJhaXRzKSA6CisgIHN5bnRoX2VfYWNjZXNzX3RyYWl0cyhyX2VfYWNjZXNzX3RyYWl0cyksCisgIG1fcF9oZWFkKHNfaGVhZF9hbGxvY2F0b3IuYWxsb2NhdGUoMSkpLAorICBtX3NpemUoMCkKK3sKKyAgaW5pdGlhbGl6ZSgpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK1BCX0RTX0NMQVNTX05BTUUoY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKSA6CisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgZGVidWdfYmFzZShvdGhlciksCisjZW5kaWYgCisgIHN5bnRoX2VfYWNjZXNzX3RyYWl0cyhvdGhlciksCisgIG5vZGVfdXBkYXRlKG90aGVyKSwKKyAgbV9wX2hlYWQoc19oZWFkX2FsbG9jYXRvci5hbGxvY2F0ZSgxKSksCisgIG1fc2l6ZSgwKQoreworICBpbml0aWFsaXplKCk7CisgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspCisgICAgaWYgKG90aGVyLm1fcF9oZWFkLT5tX3BfcGFyZW50ID09IE5VTEwpCisgICAgICB7CisgICAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgICAgICByZXR1cm47CisgICAgICB9CisgIF9fdHJ5CisgICAgeworICAgICAgbV9wX2hlYWQtPm1fcF9wYXJlbnQgPSByZWN1cnNpdmVfY29weV9ub2RlKG90aGVyLm1fcF9oZWFkLT5tX3BfcGFyZW50KTsKKyAgICB9CisgIF9fY2F0Y2goLi4uKQorICAgIHsKKyAgICAgIHNfaGVhZF9hbGxvY2F0b3IuZGVhbGxvY2F0ZShtX3BfaGVhZCwgMSk7CisgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAgICB9CisKKyAgbV9wX2hlYWQtPm1fcF9taW4gPSBsZWZ0bW9zdF9kZXNjZW5kYW50KG1fcF9oZWFkLT5tX3BfcGFyZW50KTsKKyAgbV9wX2hlYWQtPm1fcF9tYXggPSByaWdodG1vc3RfZGVzY2VuZGFudChtX3BfaGVhZC0+bV9wX3BhcmVudCk7CisgIG1fcF9oZWFkLT5tX3BfcGFyZW50LT5tX3BfcGFyZW50ID0gbV9wX2hlYWQ7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpOykKKyAgdmFsdWVfc3dhcChvdGhlcik7CisgIHN0ZDo6c3dhcCgoZV9hY2Nlc3NfdHJhaXRzJiApKCp0aGlzKSwgKGVfYWNjZXNzX3RyYWl0cyYgKW90aGVyKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordmFsdWVfc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6c3dhcChvdGhlcik7KQorICBzdGQ6OnN3YXAobV9wX2hlYWQsIG90aGVyLm1fcF9oZWFkKTsKKyAgc3RkOjpzd2FwKG1fc2l6ZSwgb3RoZXIubV9zaXplKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK35QQl9EU19DTEFTU19OQU1FKCkKK3sKKyAgY2xlYXIoKTsKKyAgc19oZWFkX2FsbG9jYXRvci5kZWFsbG9jYXRlKG1fcF9oZWFkLCAxKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2luaXRpYWxpemUoKQoreworICBuZXcgKG1fcF9oZWFkKSBoZWFkKCk7CisgIG1fcF9oZWFkLT5tX3BfcGFyZW50ID0gTlVMTDsKKyAgbV9wX2hlYWQtPm1fcF9taW4gPSBtX3BfaGVhZDsKKyAgbV9wX2hlYWQtPm1fcF9tYXggPSBtX3BfaGVhZDsKKyAgbV9zaXplID0gMDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIEl0Pgordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY29weV9mcm9tX3JhbmdlKEl0IGZpcnN0X2l0LCBJdCBsYXN0X2l0KQoreworICB3aGlsZSAoZmlyc3RfaXQgIT0gbGFzdF9pdCkKKyAgICBpbnNlcnQoKihmaXJzdF9pdCsrKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9wb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6CityZWN1cnNpdmVfY29weV9ub2RlKGNvbnN0X25vZGVfcG9pbnRlciBwX290aGVyX25kKQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9vdGhlcl9uZCAhPSBOVUxMKTsKKyAgaWYgKHBfb3RoZXJfbmQtPm1fdHlwZSA9PSBwYXRfdHJpZV9sZWFmX25vZGVfdHlwZSkKKyAgICB7CisgICAgICBjb25zdF9sZWFmX3BvaW50ZXIgcF9vdGhlcl9sZWFmID0gc3RhdGljX2Nhc3Q8Y29uc3RfbGVhZl9wb2ludGVyPihwX290aGVyX25kKTsKKworICAgICAgbGVhZl9wb2ludGVyIHBfbmV3X2xmID0gc19sZWFmX2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsKKyAgICAgIGNvbmRfZGVhbHRvciBjb25kKHBfbmV3X2xmKTsKKyAgICAgIG5ldyAocF9uZXdfbGYpIGxlYWYocF9vdGhlcl9sZWFmLT52YWx1ZSgpKTsKKyAgICAgIGFwcGx5X3VwZGF0ZShwX25ld19sZiwgKG5vZGVfdXBkYXRlKiApdGhpcyk7CisgICAgICBjb25kLnNldF9ub19hY3Rpb25fZHRvcigpOworICAgICAgcmV0dXJuIChwX25ld19sZik7CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX290aGVyX25kLT5tX3R5cGUgPT0gcGF0X3RyaWVfaW50ZXJuYWxfbm9kZV90eXBlKTsKKyAgbm9kZV9wb2ludGVyIGFfcF9jaGlsZHJlbltpbnRlcm5hbF9ub2RlOjphcnJfc2l6ZV07CisgIHNpemVfdHlwZSBjaGlsZF9pID0gMDsKKyAgY29uc3RfaW50ZXJuYWxfbm9kZV9wb2ludGVyIHBfb3RoZXJfaW50ZXJuYWxfbmQgPQorICAgIHN0YXRpY19jYXN0PGNvbnN0X2ludGVybmFsX25vZGVfcG9pbnRlcj4ocF9vdGhlcl9uZCk7CisKKyAgdHlwZW5hbWUgaW50ZXJuYWxfbm9kZTo6Y29uc3RfaXRlcmF0b3IgY2hpbGRfaXQgPQorICAgIHBfb3RoZXJfaW50ZXJuYWxfbmQtPmJlZ2luKCk7CisKKyAgaW50ZXJuYWxfbm9kZV9wb2ludGVyIHBfcmV0OworICBfX3RyeQorICAgIHsKKyAgICAgIHdoaWxlIChjaGlsZF9pdCAhPSBwX290aGVyX2ludGVybmFsX25kLT5lbmQoKSkKKwlhX3BfY2hpbGRyZW5bY2hpbGRfaSsrXSA9IHJlY3Vyc2l2ZV9jb3B5X25vZGUoKihjaGlsZF9pdCsrKSk7CisgICAgICBwX3JldCA9IHNfaW50ZXJuYWxfbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7CisgICAgfQorICBfX2NhdGNoKC4uLikKKyAgICB7CisgICAgICB3aGlsZSAoY2hpbGRfaS0tID4gMCkKKwljbGVhcl9pbXAoYV9wX2NoaWxkcmVuW2NoaWxkX2ldKTsKKyAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworICAgIH0KKworICBuZXcgKHBfcmV0KSBpbnRlcm5hbF9ub2RlKHBfb3RoZXJfaW50ZXJuYWxfbmQtPmdldF9lX2luZCgpLAorCQkJICAgIHByZWZfYmVnaW4oYV9wX2NoaWxkcmVuWzBdKSk7CisKKyAgLS1jaGlsZF9pOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoY2hpbGRfaSA+IDEpOworICBkbworICAgIHBfcmV0LT5hZGRfY2hpbGQoYV9wX2NoaWxkcmVuW2NoaWxkX2ldLCBwcmVmX2JlZ2luKGFfcF9jaGlsZHJlbltjaGlsZF9pXSksCisJCSAgICAgcHJlZl9lbmQoYV9wX2NoaWxkcmVuW2NoaWxkX2ldKSwgdGhpcyk7CisgIHdoaWxlIChjaGlsZF9pLS0gPiAwKTsKKyAgYXBwbHlfdXBkYXRlKHBfcmV0LCAobm9kZV91cGRhdGUqICl0aGlzKTsKKyAgcmV0dXJuIHBfcmV0OworfQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9kZWJ1Z19mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vZGVidWdfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU3NTY1NwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vZGVidWdfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxMTcgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGRlYnVnX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgcGF0X3RyaWVfLgorICovCisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X3ZhbGlkKCkgY29uc3QKK3sKKyAgaWYgKG1fcF9oZWFkLT5tX3BfcGFyZW50ICE9IE5VTEwpCisgICAgbV9wX2hlYWQtPm1fcF9wYXJlbnQtPmFzc2VydF92YWxpZCh0aGlzKTsKKyAgYXNzZXJ0X2l0ZXJhdG9ycygpOworICBhc3NlcnRfcmV2ZXJzZV9pdGVyYXRvcnMoKTsKKyAgaWYgKG1fcF9oZWFkLT5tX3BfcGFyZW50ID09IE5VTEwpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF9oZWFkLT5tX3BfbWluID09IG1fcF9oZWFkKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3BfaGVhZC0+bV9wX21heCA9PSBtX3BfaGVhZCk7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoZW1wdHkoKSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3BfaGVhZC0+bV9wX21pbi0+bV90eXBlID09IHBhdF90cmllX2xlYWZfbm9kZV90eXBlKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF9oZWFkLT5tX3BfbWF4LT5tX3R5cGUgPT0gcGF0X3RyaWVfbGVhZl9ub2RlX3R5cGUpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoIWVtcHR5KCkpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X2l0ZXJhdG9ycygpIGNvbnN0Cit7CisgIHNpemVfdHlwZSBjYWxjX3NpemUgPSAwOworICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ID0gYmVnaW4oKTsgaXQgIT0gZW5kKCk7ICsraXQpCisgICAgeworICAgICAgKytjYWxjX3NpemU7CisgICAgICBkZWJ1Z19iYXNlOjpjaGVja19rZXlfZXhpc3RzKFBCX0RTX1YyRigqaXQpKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChsb3dlcl9ib3VuZChQQl9EU19WMkYoKml0KSkgPT0gaXQpOworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKC0tdXBwZXJfYm91bmQoUEJfRFNfVjJGKCppdCkpID09IGl0KTsKKyAgICB9CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChjYWxjX3NpemUgPT0gbV9zaXplKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9yZXZlcnNlX2l0ZXJhdG9ycygpIGNvbnN0Cit7CisgIHNpemVfdHlwZSBjYWxjX3NpemUgPSAwOworICBmb3IgKGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgaXQgPSByYmVnaW4oKTsgaXQgIT0gcmVuZCgpOyArK2l0KQorICAgIHsKKyAgICAgICsrY2FsY19zaXplOworICAgICAgY29uc3Rfbm9kZV9wb2ludGVyIHBfbmQgPQorCWNvbnN0X2Nhc3Q8UEJfRFNfQ0xBU1NfQ19ERUMqID4odGhpcyktPmZpbmRfaW1wKFBCX0RTX1YyRigqaXQpKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kID09IGl0Lm1fcF9uZCk7CisgICAgfQorICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoY2FsY19zaXplID09IG1fc2l6ZSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CityZWN1cnNpdmVfY291bnRfbGVhZnMoY29uc3Rfbm9kZV9wb2ludGVyIHBfbmQpCit7CisgIGlmIChwX25kID09IE5VTEwpCisgICAgcmV0dXJuICgwKTsKKyAgaWYgKHBfbmQtPm1fdHlwZSA9PSBwYXRfdHJpZV9sZWFmX25vZGVfdHlwZSkKKyAgICByZXR1cm4gKDEpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV90eXBlID09IHBhdF90cmllX2ludGVybmFsX25vZGVfdHlwZSk7CisgIHNpemVfdHlwZSByZXQgPSAwOworICBmb3IgKHR5cGVuYW1lIGludGVybmFsX25vZGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0KKwkgc3RhdGljX2Nhc3Q8Y29uc3RfaW50ZXJuYWxfbm9kZV9wb2ludGVyPihwX25kKS0+YmVnaW4oKTsKKyAgICAgICBpdCAhPSBzdGF0aWNfY2FzdDxjb25zdF9pbnRlcm5hbF9ub2RlX3BvaW50ZXI+KHBfbmQpLT5lbmQoKTsKKyAgICAgICArK2l0KQorICAgIHJldCArPSByZWN1cnNpdmVfY291bnRfbGVhZnMoKml0KTsKKyAgcmV0dXJuIHJldDsKK30KKworI2VuZGlmIAorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL2VyYXNlX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9lcmFzZV9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDk4ODE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9lcmFzZV9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDMxOSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZXJhc2VfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBiaW5fc2VhcmNoX3RyZWVfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgYm9vbAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2UoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSkKK3sKKyAgbm9kZV9wb2ludGVyIHBfbmQgPSBmaW5kX2ltcChyX2tleSk7CisgIGlmIChwX25kID09IE5VTEwgfHwgcF9uZC0+bV90eXBlID09IHBhdF90cmllX2ludGVybmFsX25vZGVfdHlwZSkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9kb2VzX25vdF9leGlzdChyX2tleSkpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV90eXBlID09IHBhdF90cmllX2xlYWZfbm9kZV90eXBlKTsKKyAgaWYgKCFzeW50aF9lX2FjY2Vzc190cmFpdHM6OmVxdWFsX2tleXMoUEJfRFNfVjJGKHJlaW50ZXJwcmV0X2Nhc3Q8bGVhZl9wb2ludGVyPihwX25kKS0+dmFsdWUoKSksIHJfa2V5KSkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9kb2VzX25vdF9leGlzdChyX2tleSkpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9leGlzdHMocl9rZXkpKTsKKyAgZXJhc2VfbGVhZihzdGF0aWNfY2FzdDxsZWFmX3BvaW50ZXI+KHBfbmQpKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIHJldHVybiB0cnVlOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2VfZml4dXAoaW50ZXJuYWxfbm9kZV9wb2ludGVyIHBfbmQpCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChzdGQ6OmRpc3RhbmNlKHBfbmQtPmJlZ2luKCksIHBfbmQtPmVuZCgpKSA+PSAxKTsKKyAgaWYgKHN0ZDo6ZGlzdGFuY2UocF9uZC0+YmVnaW4oKSwgcF9uZC0+ZW5kKCkpID09IDEpCisgICAgeworICAgICAgbm9kZV9wb2ludGVyIHBfcGFyZW50ID0gcF9uZC0+bV9wX3BhcmVudDsKKyAgICAgIGlmIChwX3BhcmVudCA9PSBtX3BfaGVhZCkKKwltX3BfaGVhZC0+bV9wX3BhcmVudCA9KiBwX25kLT5iZWdpbigpOworICAgICAgZWxzZQorICAgICAgICB7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9wYXJlbnQtPm1fdHlwZSA9PSBwYXRfdHJpZV9pbnRlcm5hbF9ub2RlX3R5cGUpOworCSAgbm9kZV9wb2ludGVyIHBfbmV3X2NoaWxkID0qIHBfbmQtPmJlZ2luKCk7CisJICBzdGF0aWNfY2FzdDxpbnRlcm5hbF9ub2RlX3BvaW50ZXI+KHBfcGFyZW50KS0+cmVwbGFjZV9jaGlsZCgKKwkJCQkJCQkJICAgICAgcF9uZXdfY2hpbGQsCisJCQkJCQkJCSAgICAgIHByZWZfYmVnaW4ocF9uZXdfY2hpbGQpLAorCQkJCQkJCQkgICAgICBwcmVmX2VuZChwX25ld19jaGlsZCksCisJCQkJCQkJCSAgICAgIHRoaXMpOworICAgICAgICB9CisgICAgICAoKnBfbmQtPmJlZ2luKCkpLT5tX3BfcGFyZW50ID0gcF9uZC0+bV9wX3BhcmVudDsKKyAgICAgIHBfbmQtPn5pbnRlcm5hbF9ub2RlKCk7CisgICAgICBzX2ludGVybmFsX25vZGVfYWxsb2NhdG9yLmRlYWxsb2NhdGUocF9uZCwgMSk7CisKKyAgICAgIGlmIChwX3BhcmVudCA9PSBtX3BfaGVhZCkKKwlyZXR1cm47CisKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3BhcmVudC0+bV90eXBlID09IHBhdF90cmllX2ludGVybmFsX25vZGVfdHlwZSk7CisgICAgICBwX25kID0gc3RhdGljX2Nhc3Q8aW50ZXJuYWxfbm9kZV9wb2ludGVyPihwX3BhcmVudCk7CisgICAgfQorCisgIHdoaWxlICh0cnVlKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChzdGQ6OmRpc3RhbmNlKHBfbmQtPmJlZ2luKCksIHBfbmQtPmVuZCgpKSA+IDEpOworICAgICAgcF9uZC0+dXBkYXRlX3ByZWZpeGVzKHRoaXMpOworICAgICAgYXBwbHlfdXBkYXRlKHBfbmQsIChub2RlX3VwZGF0ZSogKXRoaXMpOworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShwX25kLT5hc3NlcnRfdmFsaWQodGhpcyk7KQorICAgICAgaWYgKHBfbmQtPm1fcF9wYXJlbnQtPm1fdHlwZSA9PSBwYXRfdHJpZV9oZWFkX25vZGVfdHlwZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV9wX3BhcmVudC0+bV90eXBlID09CisJCSAgICAgICBwYXRfdHJpZV9pbnRlcm5hbF9ub2RlX3R5cGUpOworCisgICAgICBwX25kID0gc3RhdGljX2Nhc3Q8aW50ZXJuYWxfbm9kZV9wb2ludGVyPihwX25kLT5tX3BfcGFyZW50KTsKKyAgICB9Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYWN0dWFsX2VyYXNlX2xlYWYobGVhZl9wb2ludGVyIHBfbCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fc2l6ZSA+IDApOworICAtLW1fc2l6ZTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShlcmFzZV9leGlzdGluZyhQQl9EU19WMkYocF9sLT52YWx1ZSgpKSkpOworICBwX2wtPn5sZWFmKCk7CisgIHNfbGVhZl9hbGxvY2F0b3IuZGVhbGxvY2F0ZShwX2wsIDEpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY2xlYXIoKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgaWYgKGVtcHR5KCkpCisgICAgcmV0dXJuOworCisgIGNsZWFyX2ltcChtX3BfaGVhZC0+bV9wX3BhcmVudCk7CisgIG1fc2l6ZSA9IDA7CisgIGluaXRpYWxpemUoKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpjbGVhcigpOykKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitjbGVhcl9pbXAobm9kZV9wb2ludGVyIHBfbmQpCit7CisgIGlmIChwX25kLT5tX3R5cGUgPT0gcGF0X3RyaWVfaW50ZXJuYWxfbm9kZV90eXBlKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kLT5tX3R5cGUgPT0gcGF0X3RyaWVfaW50ZXJuYWxfbm9kZV90eXBlKTsKKyAgICAgIGZvciAodHlwZW5hbWUgaW50ZXJuYWxfbm9kZTo6aXRlcmF0b3IgaXQgPQorCSAgICAgc3RhdGljX2Nhc3Q8aW50ZXJuYWxfbm9kZV9wb2ludGVyPihwX25kKS0+YmVnaW4oKTsKKwkgICBpdCAhPSBzdGF0aWNfY2FzdDxpbnRlcm5hbF9ub2RlX3BvaW50ZXI+KHBfbmQpLT5lbmQoKTsKKwkgICArK2l0KQorICAgICAgICB7CisJICBub2RlX3BvaW50ZXIgcF9jaGlsZCA9KiBpdDsKKwkgIGNsZWFyX2ltcChwX2NoaWxkKTsKKyAgICAgICAgfQorICAgICAgc19pbnRlcm5hbF9ub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKHN0YXRpY19jYXN0PGludGVybmFsX25vZGVfcG9pbnRlcj4ocF9uZCksIDEpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV90eXBlID09IHBhdF90cmllX2xlYWZfbm9kZV90eXBlKTsKKyAgc3RhdGljX2Nhc3Q8bGVhZl9wb2ludGVyPihwX25kKS0+fmxlYWYoKTsKKyAgc19sZWFmX2FsbG9jYXRvci5kZWFsbG9jYXRlKHN0YXRpY19jYXN0PGxlYWZfcG9pbnRlcj4ocF9uZCksIDEpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2UoY29uc3RfaXRlcmF0b3IgaXQpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCkpOworCisgIGlmIChpdCA9PSBlbmQoKSkKKyAgICByZXR1cm4gaXQ7CisKKyAgY29uc3RfaXRlcmF0b3IgcmV0X2l0ID0gaXQ7CisgICsrcmV0X2l0OworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoaXQubV9wX25kLT5tX3R5cGUgPT0gcGF0X3RyaWVfbGVhZl9ub2RlX3R5cGUpOworICBlcmFzZV9sZWFmKHN0YXRpY19jYXN0PGxlYWZfcG9pbnRlcj4oaXQubV9wX25kKSk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCkpOworICByZXR1cm4gcmV0X2l0OworfQorCisjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6aXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlKGl0ZXJhdG9yIGl0KQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpKTsKKworICBpZiAoaXQgPT0gZW5kKCkpCisgICAgcmV0dXJuIGl0OworICBpdGVyYXRvciByZXRfaXQgPSBpdDsKKyAgKytyZXRfaXQ7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChpdC5tX3BfbmQtPm1fdHlwZSA9PSBwYXRfdHJpZV9sZWFmX25vZGVfdHlwZSk7CisgIGVyYXNlX2xlYWYoc3RhdGljX2Nhc3Q8bGVhZl9wb2ludGVyPihpdC5tX3BfbmQpKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKSk7CisgIHJldHVybiByZXRfaXQ7Cit9CisjZW5kaWYgLy8gI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2UoY29uc3RfcmV2ZXJzZV9pdGVyYXRvciBpdCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKSk7CisKKyAgaWYgKGl0Lm1fcF9uZCA9PSBtX3BfaGVhZCkKKyAgICByZXR1cm4gaXQ7CisgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmV0X2l0ID0gaXQ7CisgICsrcmV0X2l0OworCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChpdC5tX3BfbmQtPm1fdHlwZSA9PSBwYXRfdHJpZV9sZWFmX25vZGVfdHlwZSk7CisgIGVyYXNlX2xlYWYoc3RhdGljX2Nhc3Q8bGVhZl9wb2ludGVyPihpdC5tX3BfbmQpKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKSk7CisgIHJldHVybiByZXRfaXQ7Cit9CisKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpyZXZlcnNlX2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZShyZXZlcnNlX2l0ZXJhdG9yIGl0KQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpKTsKKworICBpZiAoaXQubV9wX25kID09IG1fcF9oZWFkKQorICAgIHJldHVybiBpdDsKKyAgcmV2ZXJzZV9pdGVyYXRvciByZXRfaXQgPSBpdDsKKyAgKytyZXRfaXQ7CisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGl0Lm1fcF9uZC0+bV90eXBlID09IHBhdF90cmllX2xlYWZfbm9kZV90eXBlKTsKKyAgZXJhc2VfbGVhZihzdGF0aWNfY2FzdDxsZWFmX3BvaW50ZXI+KGl0Lm1fcF9uZCkpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpKTsKKyAgcmV0dXJuIHJldF9pdDsKK30KKyNlbmRpZiAvLyAjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgUHJlZD4KK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZV9pZihQcmVkIHByZWQpCit7CisgIHNpemVfdHlwZSBudW1fZXJzZCA9IDA7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorCisgIGl0ZXJhdG9yIGl0ID0gYmVnaW4oKTsKKyAgd2hpbGUgKGl0ICE9IGVuZCgpKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgICAgICBpZiAocHJlZCgqaXQpKQorCSAgeworICAgICAgICAgICAgKytudW1fZXJzZDsKKyAgICAgICAgICAgIGl0ID0gZXJhc2UoaXQpOworCSAgfQorICAgICAgICBlbHNlCisJICArK2l0OworICAgIH0KKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgcmV0dXJuIG51bV9lcnNkOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2VfbGVhZihsZWFmX3BvaW50ZXIgcF9sKQoreworICB1cGRhdGVfbWluX21heF9mb3JfZXJhc2VkX2xlYWYocF9sKTsKKyAgaWYgKHBfbC0+bV9wX3BhcmVudC0+bV90eXBlID09IHBhdF90cmllX2hlYWRfbm9kZV90eXBlKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChzaXplKCkgPT0gMSk7CisgICAgICBjbGVhcigpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoc2l6ZSgpID4gMSk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX2wtPm1fcF9wYXJlbnQtPm1fdHlwZSA9PQorCQkgICBwYXRfdHJpZV9pbnRlcm5hbF9ub2RlX3R5cGUpOworCisgIGludGVybmFsX25vZGVfcG9pbnRlciBwX3BhcmVudCA9CisgICAgc3RhdGljX2Nhc3Q8aW50ZXJuYWxfbm9kZV9wb2ludGVyPihwX2wtPm1fcF9wYXJlbnQpOworCisgIHBfcGFyZW50LT5yZW1vdmVfY2hpbGQocF9sKTsKKyAgZXJhc2VfZml4dXAocF9wYXJlbnQpOworICBhY3R1YWxfZXJhc2VfbGVhZihwX2wpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordXBkYXRlX21pbl9tYXhfZm9yX2VyYXNlZF9sZWFmKGxlYWZfcG9pbnRlciBwX2wpCit7CisgIGlmIChtX3NpemUgPT0gMSkKKyAgICB7CisgICAgICBtX3BfaGVhZC0+bV9wX21pbiA9IG1fcF9oZWFkOworICAgICAgbV9wX2hlYWQtPm1fcF9tYXggPSBtX3BfaGVhZDsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKHBfbCA9PSBzdGF0aWNfY2FzdDxjb25zdF9sZWFmX3BvaW50ZXI+KG1fcF9oZWFkLT5tX3BfbWluKSkKKyAgICB7CisgICAgICBpdGVyYXRvciBpdChwX2wpOworICAgICAgKytpdDsKKyAgICAgIG1fcF9oZWFkLT5tX3BfbWluID0gaXQubV9wX25kOworICAgICAgcmV0dXJuOworICAgIH0KKworICBpZiAocF9sID09IHN0YXRpY19jYXN0PGNvbnN0X2xlYWZfcG9pbnRlcj4obV9wX2hlYWQtPm1fcF9tYXgpKQorICAgIHsKKyAgICAgIGl0ZXJhdG9yIGl0KHBfbCk7CisgICAgICAtLWl0OworICAgICAgbV9wX2hlYWQtPm1fcF9tYXggPSBpdC5tX3BfbmQ7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9maW5kX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9maW5kX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NTJlYWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL2ZpbmRfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwyNjkgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGZpbmRfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBiaW5fc2VhcmNoX3RyZWVfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnBvaW50X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitmaW5kKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICBub2RlX3BvaW50ZXIgcF9uZCA9IGZpbmRfaW1wKHJfa2V5KTsKKworICBpZiAocF9uZCA9PSBOVUxMIHx8IHBfbmQtPm1fdHlwZSAhPSBwYXRfdHJpZV9sZWFmX25vZGVfdHlwZSkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9kb2VzX25vdF9leGlzdChyX2tleSk7KQorICAgICAgcmV0dXJuIGVuZCgpOworICAgIH0KKworICBpZiAoc3ludGhfZV9hY2Nlc3NfdHJhaXRzOjplcXVhbF9rZXlzKFBCX0RTX1YyRihzdGF0aWNfY2FzdDxsZWFmX3BvaW50ZXI+KHBfbmQpLT52YWx1ZSgpKSwgcl9rZXkpKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6Y2hlY2tfa2V5X2V4aXN0cyhyX2tleSkpOworICAgICAgcmV0dXJuIGl0ZXJhdG9yKHBfbmQpOworICAgIH0KKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9kb2VzX25vdF9leGlzdChyX2tleSk7KQorICByZXR1cm4gZW5kKCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X3BvaW50X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitmaW5kKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpIGNvbnN0Cit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorCisgIGNvbnN0X25vZGVfcG9pbnRlciBwX25kID0gY29uc3RfY2FzdDxQQl9EU19DTEFTU19DX0RFQyogPih0aGlzKS0+ZmluZF9pbXAocl9rZXkpOworCisgIGlmIChwX25kID09IE5VTEwgfHwgcF9uZC0+bV90eXBlICE9IHBhdF90cmllX2xlYWZfbm9kZV90eXBlKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6Y2hlY2tfa2V5X2RvZXNfbm90X2V4aXN0KHJfa2V5KTspCisgICAgICByZXR1cm4gZW5kKCk7CisgICAgfQorCisgIGlmIChzeW50aF9lX2FjY2Vzc190cmFpdHM6OmVxdWFsX2tleXMoUEJfRFNfVjJGKHN0YXRpY19jYXN0PGNvbnN0X2xlYWZfcG9pbnRlcj4ocF9uZCktPnZhbHVlKCkpLCByX2tleSkpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpjaGVja19rZXlfZXhpc3RzKHJfa2V5KSk7CisgICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IoY29uc3RfY2FzdDxub2RlX3BvaW50ZXI+KHBfbmQpKTsKKyAgICB9CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpjaGVja19rZXlfZG9lc19ub3RfZXhpc3Qocl9rZXkpOykKKyAgcmV0dXJuIGVuZCgpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2ZpbmRfaW1wKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpCit7CisgIGlmIChlbXB0eSgpKQorICAgIHJldHVybiAoTlVMTCk7CisKKyAgdHlwZW5hbWUgc3ludGhfZV9hY2Nlc3NfdHJhaXRzOjpjb25zdF9pdGVyYXRvciBiX2l0ID0KKyAgICBzeW50aF9lX2FjY2Vzc190cmFpdHM6OmJlZ2luKHJfa2V5KTsKKyAgdHlwZW5hbWUgc3ludGhfZV9hY2Nlc3NfdHJhaXRzOjpjb25zdF9pdGVyYXRvciBlX2l0ID0KKyAgICBzeW50aF9lX2FjY2Vzc190cmFpdHM6OmVuZChyX2tleSk7CisKKyAgbm9kZV9wb2ludGVyIHBfbmQgPSBtX3BfaGVhZC0+bV9wX3BhcmVudDsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQgIT0gTlVMTCk7CisKKyAgd2hpbGUgKHBfbmQtPm1fdHlwZSAhPSBwYXRfdHJpZV9sZWFmX25vZGVfdHlwZSkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV90eXBlID09IHBhdF90cmllX2ludGVybmFsX25vZGVfdHlwZSk7CisgICAgICBub2RlX3BvaW50ZXIgcF9uZXh0X25kID0gc3RhdGljX2Nhc3Q8aW50ZXJuYWxfbm9kZV9wb2ludGVyPihwX25kKS0+Z2V0X2NoaWxkX25vZGUoYl9pdCwgIGVfaXQsICB0aGlzKTsKKworICAgICAgaWYgKHBfbmV4dF9uZCA9PSBOVUxMKQorCXJldHVybiBwX25kOworICAgICAgcF9uZCA9IHBfbmV4dF9uZDsKKyAgICB9CisgIHJldHVybiBwX25kOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2xvd2VyX2JvdW5kX2ltcChjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5KQoreworICBpZiAoZW1wdHkoKSkKKyAgICByZXR1cm4gKG1fcF9oZWFkKTsKKworICBub2RlX3BvaW50ZXIgcF9uZCA9IG1fcF9oZWFkLT5tX3BfcGFyZW50OworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZCAhPSBOVUxMKTsKKworICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfZV9pdGVyYXRvciBiX2l0ID0KKyAgICBzeW50aF9lX2FjY2Vzc190cmFpdHM6OmJlZ2luKHJfa2V5KTsKKworICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfZV9pdGVyYXRvciBlX2l0ID0KKyAgICBzeW50aF9lX2FjY2Vzc190cmFpdHM6OmVuZChyX2tleSk7CisKKyAgc2l6ZV90eXBlIGNoZWNrZWRfaW5kID0gMDsKKyAgd2hpbGUgKHRydWUpCisgICAgeworICAgICAgaWYgKHBfbmQtPm1fdHlwZSA9PSBwYXRfdHJpZV9sZWFmX25vZGVfdHlwZSkKKyAgICAgICAgeworCSAgaWYgKCFzeW50aF9lX2FjY2Vzc190cmFpdHM6OmNtcF9rZXlzKFBCX0RTX1YyRihzdGF0aWNfY2FzdDxjb25zdF9sZWFmX3BvaW50ZXI+KHBfbmQpLT52YWx1ZSgpKSwgcl9rZXkpKQorCSAgICByZXR1cm4gcF9uZDsKKwkgIGl0ZXJhdG9yIGl0KHBfbmQpOworCSAgKytpdDsKKwkgIHJldHVybiBpdC5tX3BfbmQ7CisgICAgICAgIH0KKworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQtPm1fdHlwZSA9PSBwYXRfdHJpZV9pbnRlcm5hbF9ub2RlX3R5cGUpOworICAgICAgY29uc3Qgc2l6ZV90eXBlIG5ld19jaGVja2VkX2luZCA9CisJc3RhdGljX2Nhc3Q8aW50ZXJuYWxfbm9kZV9wb2ludGVyPihwX25kKS0+Z2V0X2VfaW5kKCk7CisKKyAgICAgIHBfbmQgPQorCXN0YXRpY19jYXN0PGludGVybmFsX25vZGVfcG9pbnRlcj4ocF9uZCktPmdldF9sb3dlcl9ib3VuZF9jaGlsZF9ub2RlKCAgICAgICAgICAgICAgICBiX2l0LCBlX2l0LCBjaGVja2VkX2luZCwgdGhpcyk7CisgICAgICBjaGVja2VkX2luZCA9IG5ld19jaGVja2VkX2luZDsKKyAgICB9Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnBvaW50X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6Citsb3dlcl9ib3VuZChjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5KQoreyByZXR1cm4gcG9pbnRfaXRlcmF0b3IobG93ZXJfYm91bmRfaW1wKHJfa2V5KSk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfcG9pbnRfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2xvd2VyX2JvdW5kKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpIGNvbnN0Cit7CisgIHJldHVybiBjb25zdF9wb2ludF9pdGVyYXRvcihjb25zdF9jYXN0PFBCX0RTX0NMQVNTX0NfREVDKiA+KHRoaXMpLT5sb3dlcl9ib3VuZF9pbXAocl9rZXkpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6cG9pbnRfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3VwcGVyX2JvdW5kKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpCit7CisgIHBvaW50X2l0ZXJhdG9yIGxfYm91bmRfaXQgPSBsb3dlcl9ib3VuZChyX2tleSk7CisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGxfYm91bmRfaXQgPT0gZW5kKCkgfHwKKwkJICAgIXN5bnRoX2VfYWNjZXNzX3RyYWl0czo6Y21wX2tleXMoUEJfRFNfVjJGKCpsX2JvdW5kX2l0KSwKKwkJCQkJCSAgICByX2tleSkpOworCisgIGlmIChsX2JvdW5kX2l0ID09IGVuZCgpIHx8CisgICAgICBzeW50aF9lX2FjY2Vzc190cmFpdHM6OmNtcF9rZXlzKHJfa2V5LCBQQl9EU19WMkYoKmxfYm91bmRfaXQpKSkKKyAgICByZXR1cm4gbF9ib3VuZF9pdDsKKworICByZXR1cm4gKytsX2JvdW5kX2l0OworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9wb2ludF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgordXBwZXJfYm91bmQoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSkgY29uc3QKK3sKKyAgY29uc3RfcG9pbnRfaXRlcmF0b3IgbF9ib3VuZF9pdCA9IGxvd2VyX2JvdW5kKHJfa2V5KTsKKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobF9ib3VuZF9pdCA9PSBlbmQoKSB8fAorCQkgICAhc3ludGhfZV9hY2Nlc3NfdHJhaXRzOjpjbXBfa2V5cyhQQl9EU19WMkYoKmxfYm91bmRfaXQpLAorCQkJCQkJICAgIHJfa2V5KSk7CisKKyAgaWYgKGxfYm91bmRfaXQgPT0gZW5kKCkgfHwKKyAgICAgIHN5bnRoX2VfYWNjZXNzX3RyYWl0czo6Y21wX2tleXMocl9rZXksIFBCX0RTX1YyRigqbF9ib3VuZF9pdCkpKQorICAgIHJldHVybiBsX2JvdW5kX2l0OworICByZXR1cm4gKytsX2JvdW5kX2l0OworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9lX2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitwcmVmX2JlZ2luKGNvbnN0X25vZGVfcG9pbnRlciBwX25kKQoreworICBpZiAocF9uZC0+bV90eXBlID09IHBhdF90cmllX2xlYWZfbm9kZV90eXBlKQorICAgIHJldHVybiAoc3ludGhfZV9hY2Nlc3NfdHJhaXRzOjpiZWdpbihQQl9EU19WMkYoc3RhdGljX2Nhc3Q8Y29uc3RfbGVhZl9wb2ludGVyPihwX25kKS0+dmFsdWUoKSkpKTsKKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV90eXBlID09IHBhdF90cmllX2ludGVybmFsX25vZGVfdHlwZSk7CisgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdF9pbnRlcm5hbF9ub2RlX3BvaW50ZXI+KHBfbmQpLT5wcmVmX2JfaXQoKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfZV9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcHJlZl9lbmQoY29uc3Rfbm9kZV9wb2ludGVyIHBfbmQpCit7CisgIGlmIChwX25kLT5tX3R5cGUgPT0gcGF0X3RyaWVfbGVhZl9ub2RlX3R5cGUpCisgICAgcmV0dXJuIChzeW50aF9lX2FjY2Vzc190cmFpdHM6OmVuZChQQl9EU19WMkYoc3RhdGljX2Nhc3Q8Y29uc3RfbGVhZl9wb2ludGVyPihwX25kKS0+dmFsdWUoKSkpKTsKKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV90eXBlID09IHBhdF90cmllX2ludGVybmFsX25vZGVfdHlwZSk7CisgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdF9pbnRlcm5hbF9ub2RlX3BvaW50ZXI+KHBfbmQpLT5wcmVmX2VfaXQoKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfbGVhZl9wb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6CitsZWZ0bW9zdF9kZXNjZW5kYW50KGNvbnN0X25vZGVfcG9pbnRlciBwX25kKQoreworICBpZiAocF9uZC0+bV90eXBlID09IHBhdF90cmllX2xlYWZfbm9kZV90eXBlKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdF9sZWFmX3BvaW50ZXI+KHBfbmQpOworICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3RfaW50ZXJuYWxfbm9kZV9wb2ludGVyPihwX25kKS0+bGVmdG1vc3RfZGVzY2VuZGFudCgpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpsZWFmX3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2xlZnRtb3N0X2Rlc2NlbmRhbnQobm9kZV9wb2ludGVyIHBfbmQpCit7CisgIGlmIChwX25kLT5tX3R5cGUgPT0gcGF0X3RyaWVfbGVhZl9ub2RlX3R5cGUpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGxlYWZfcG9pbnRlcj4ocF9uZCk7CisgIHJldHVybiBzdGF0aWNfY2FzdDxpbnRlcm5hbF9ub2RlX3BvaW50ZXI+KHBfbmQpLT5sZWZ0bW9zdF9kZXNjZW5kYW50KCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2xlYWZfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmlnaHRtb3N0X2Rlc2NlbmRhbnQoY29uc3Rfbm9kZV9wb2ludGVyIHBfbmQpCit7CisgIGlmIChwX25kLT5tX3R5cGUgPT0gcGF0X3RyaWVfbGVhZl9ub2RlX3R5cGUpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0X2xlYWZfcG9pbnRlcj4ocF9uZCk7CisgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdF9pbnRlcm5hbF9ub2RlX3BvaW50ZXI+KHBfbmQpLT5yaWdodG1vc3RfZGVzY2VuZGFudCgpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpsZWFmX3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JpZ2h0bW9zdF9kZXNjZW5kYW50KG5vZGVfcG9pbnRlciBwX25kKQoreworICBpZiAocF9uZC0+bV90eXBlID09IHBhdF90cmllX2xlYWZfbm9kZV90eXBlKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxsZWFmX3BvaW50ZXI+KHBfbmQpOworICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50ZXJuYWxfbm9kZV9wb2ludGVyPihwX25kKS0+cmlnaHRtb3N0X2Rlc2NlbmRhbnQoKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9oZWFkLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vaGVhZC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM3MzgxMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vaGVhZC5ocHAKQEAgLTAsMCArMSwxMjQgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGhlYWQuaHBwCisgKiBDb250YWlucyBhIGxlYWYgZm9yIGEgcGF0cmljaWEgdHJlZS4KKyAqLworCisjaWZuZGVmIFBCX0RTX1BBVF9UUklFX0lIRUFEX0hQUAorI2RlZmluZSBQQl9EU19QQVRfVFJJRV9JSEVBRF9IUFAKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL25vZGVfYmFzZS5ocHA+CisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlX1RyYWl0cywgdHlwZW5hbWUgRV9BY2Nlc3NfVHJhaXRzLAlcCisJICAgICAgdHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lIEFsbG9jYXRvcj4KKworI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBcCisgICAgcGF0X3RyaWVfaGVhZDxUeXBlX1RyYWl0cywgRV9BY2Nlc3NfVHJhaXRzLAlNZXRhZGF0YSwgQWxsb2NhdG9yPgorCisjZGVmaW5lIFBCX0RTX0JBU0VfQ19ERUMgXAorICAgIHBhdF90cmllX25vZGVfYmFzZTxUeXBlX1RyYWl0cywgRV9BY2Nlc3NfVHJhaXRzLCBNZXRhZGF0YSwgQWxsb2NhdG9yPgorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZV9UcmFpdHMsCisJICAgICB0eXBlbmFtZSBFX0FjY2Vzc19UcmFpdHMsCisJICAgICB0eXBlbmFtZSBNZXRhZGF0YSwKKwkgICAgIHR5cGVuYW1lIEFsbG9jYXRvcj4KKyAgICBzdHJ1Y3QgcGF0X3RyaWVfaGVhZCA6IHB1YmxpYyBQQl9EU19CQVNFX0NfREVDCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIEVfQWNjZXNzX1RyYWl0cyBlX2FjY2Vzc190cmFpdHM7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCWVfYWNjZXNzX3RyYWl0cz46Om90aGVyOjpjb25zdF9wb2ludGVyCisgICAgICBjb25zdF9lX2FjY2Vzc190cmFpdHNfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8CisJUEJfRFNfQkFTRV9DX0RFQz46Om90aGVyOjpwb2ludGVyCisgICAgICBub2RlX3BvaW50ZXI7CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgUEJfRFNfQkFTRV9DX0RFQzo6c3VidHJlZV9kZWJ1Z19pbmZvCisgICAgICBzdWJ0cmVlX2RlYnVnX2luZm87CisjZW5kaWYgCisKKyAgICBwdWJsaWM6CisgICAgICBwYXRfdHJpZV9oZWFkKCk7CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgdmlydHVhbCBzdWJ0cmVlX2RlYnVnX2luZm8KKyAgICAgIGFzc2VydF92YWxpZF9pbXAoY29uc3RfZV9hY2Nlc3NfdHJhaXRzX3BvaW50ZXIgcF90cmFpdHMpIGNvbnN0OworI2VuZGlmIAorCisgICAgcHVibGljOgorICAgICAgbm9kZV9wb2ludGVyIG1fcF9taW47CisKKyAgICAgIG5vZGVfcG9pbnRlciBtX3BfbWF4OworICAgIH07CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBwYXRfdHJpZV9oZWFkKCkgOiBQQl9EU19CQVNFX0NfREVDKHBhdF90cmllX2hlYWRfbm9kZV90eXBlKQorICAgIHsgfQorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzdWJ0cmVlX2RlYnVnX2luZm8KKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgYXNzZXJ0X3ZhbGlkX2ltcChjb25zdF9lX2FjY2Vzc190cmFpdHNfcG9pbnRlciAvKnBfdHJhaXRzKi8pIGNvbnN0CisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGZhbHNlKTsKKyAgICAgIHJldHVybiBzdWJ0cmVlX2RlYnVnX2luZm8oKTsKKyAgICB9CisjZW5kaWYgCisKKyN1bmRlZiBQQl9EU19DTEFTU19UX0RFQworI3VuZGVmIFBCX0RTX0NMQVNTX0NfREVDCisjdW5kZWYgUEJfRFNfQkFTRV9DX0RFQworCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9pbmZvX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9pbmZvX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZDcwOTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL2luZm9fZm5faW1wcy5ocHAKQEAgLTAsMCArMSw1OCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgaW5mb19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGJpbl9zZWFyY2hfdHJlZV8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitlbXB0eSgpIGNvbnN0Cit7IHJldHVybiAobV9zaXplID09IDApOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc2l6ZSgpIGNvbnN0Cit7IHJldHVybiBtX3NpemU7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CittYXhfc2l6ZSgpIGNvbnN0Cit7IHJldHVybiBzX2ludGVybmFsX25vZGVfYWxsb2NhdG9yLm1heF9zaXplKCk7IH0KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9pbnNlcnRfam9pbl9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vaW5zZXJ0X2pvaW5fZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYwNDk3NAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vaW5zZXJ0X2pvaW5fZm5faW1wcy5ocHAKQEAgLTAsMCArMSw0NjUgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGluc2VydF9qb2luX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYmluX3NlYXJjaF90cmVlXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogoram9pbihQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspOworICBzcGxpdF9qb2luX2JyYW5jaF9iYWcgYmFnOworICBpZiAoIWpvaW5fcHJlcChvdGhlciwgYmFnKSkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOyk7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpOyk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIG1fcF9oZWFkLT5tX3BfcGFyZW50ID0gcmVjX2pvaW4obV9wX2hlYWQtPm1fcF9wYXJlbnQsIAorCQkJCSAgb3RoZXIubV9wX2hlYWQtPm1fcF9wYXJlbnQsIDAsIGJhZyk7CisKKyAgbV9wX2hlYWQtPm1fcF9wYXJlbnQtPm1fcF9wYXJlbnQgPSBtX3BfaGVhZDsKKyAgbV9zaXplICs9IG90aGVyLm1fc2l6ZTsKKyAgb3RoZXIuaW5pdGlhbGl6ZSgpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpOyk7CisgIG1fcF9oZWFkLT5tX3BfbWluID0gbGVmdG1vc3RfZGVzY2VuZGFudChtX3BfaGVhZC0+bV9wX3BhcmVudCk7CisgIG1fcF9oZWFkLT5tX3BfbWF4ID0gcmlnaHRtb3N0X2Rlc2NlbmRhbnQobV9wX2hlYWQtPm1fcF9wYXJlbnQpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOyk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitib29sCitQQl9EU19DTEFTU19DX0RFQzo6Citqb2luX3ByZXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyLCBzcGxpdF9qb2luX2JyYW5jaF9iYWcmIHJfYmFnKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspCisgIGlmIChvdGhlci5tX3NpemUgPT0gMCkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgaWYgKG1fc2l6ZSA9PSAwKQorICAgIHsKKyAgICAgIHZhbHVlX3N3YXAob3RoZXIpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICBjb25zdCBib29sIGdyZWF0ZXIgPSBzeW50aF9lX2FjY2Vzc190cmFpdHM6OmNtcF9rZXlzKFBCX0RTX1YyRihzdGF0aWNfY2FzdDxjb25zdF9sZWFmX3BvaW50ZXI+KAorCQkJCQkJCQkJCQkJIG1fcF9oZWFkLT5tX3BfbWF4KS0+dmFsdWUoKSksUEJfRFNfVjJGKHN0YXRpY19jYXN0PGNvbnN0X2xlYWZfcG9pbnRlcj4oCisJCQkJCQkJCQkJCQkgb3RoZXIubV9wX2hlYWQtPm1fcF9taW4pLT52YWx1ZSgpKSk7CisKKyAgY29uc3QgYm9vbCBsZXNzZXIgPSBzeW50aF9lX2FjY2Vzc190cmFpdHM6OmNtcF9rZXlzKFBCX0RTX1YyRihzdGF0aWNfY2FzdDxjb25zdF9sZWFmX3BvaW50ZXI+KAorCQkJCQkJCQkJCQkJb3RoZXIubV9wX2hlYWQtPm1fcF9tYXgpLT52YWx1ZSgpKSxQQl9EU19WMkYoc3RhdGljX2Nhc3Q8Y29uc3RfbGVhZl9wb2ludGVyPihtX3BfaGVhZC0+bV9wX21pbiktPnZhbHVlKCkpKTsKKworICBpZiAoIWdyZWF0ZXIgJiYgIWxlc3NlcikKKyAgICBfX3Rocm93X2pvaW5fZXJyb3IoKTsKKworICByZWNfam9pbl9wcmVwKG1fcF9oZWFkLT5tX3BfcGFyZW50LCBvdGhlci5tX3BfaGVhZC0+bV9wX3BhcmVudCwgcl9iYWcpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmpvaW4ob3RoZXIpOykKKyAgcmV0dXJuIHRydWU7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CityZWNfam9pbl9wcmVwKGNvbnN0X25vZGVfcG9pbnRlciBwX2wsIGNvbnN0X25vZGVfcG9pbnRlciBwX3IsIHNwbGl0X2pvaW5fYnJhbmNoX2JhZyYgcl9iYWcpCit7CisgIGlmIChwX2wtPm1fdHlwZSA9PSBwYXRfdHJpZV9sZWFmX25vZGVfdHlwZSkKKyAgICB7CisgICAgICBpZiAocF9yLT5tX3R5cGUgPT0gcGF0X3RyaWVfbGVhZl9ub2RlX3R5cGUpCisgICAgICAgIHsKKwkgIHJlY19qb2luX3ByZXAoc3RhdGljX2Nhc3Q8Y29uc3RfbGVhZl9wb2ludGVyPihwX2wpLAorCQkJc3RhdGljX2Nhc3Q8Y29uc3RfbGVhZl9wb2ludGVyPihwX3IpLCByX2JhZyk7CisJICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfci0+bV90eXBlID09IHBhdF90cmllX2ludGVybmFsX25vZGVfdHlwZSk7CisgICAgICByZWNfam9pbl9wcmVwKHN0YXRpY19jYXN0PGNvbnN0X2xlYWZfcG9pbnRlcj4ocF9sKSwKKwkJICAgIHN0YXRpY19jYXN0PGNvbnN0X2ludGVybmFsX25vZGVfcG9pbnRlcj4ocF9yKSwgcl9iYWcpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9sLT5tX3R5cGUgPT0gcGF0X3RyaWVfaW50ZXJuYWxfbm9kZV90eXBlKTsKKyAgaWYgKHBfci0+bV90eXBlID09IHBhdF90cmllX2xlYWZfbm9kZV90eXBlKQorICAgIHsKKyAgICAgIHJlY19qb2luX3ByZXAoc3RhdGljX2Nhc3Q8Y29uc3RfaW50ZXJuYWxfbm9kZV9wb2ludGVyPihwX2wpLAorCQkgICAgc3RhdGljX2Nhc3Q8Y29uc3RfbGVhZl9wb2ludGVyPihwX3IpLCByX2JhZyk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3ItPm1fdHlwZSA9PSBwYXRfdHJpZV9pbnRlcm5hbF9ub2RlX3R5cGUpOworCisgIHJlY19qb2luX3ByZXAoc3RhdGljX2Nhc3Q8Y29uc3RfaW50ZXJuYWxfbm9kZV9wb2ludGVyPihwX2wpLAorCQlzdGF0aWNfY2FzdDxjb25zdF9pbnRlcm5hbF9ub2RlX3BvaW50ZXI+KHBfciksIHJfYmFnKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JlY19qb2luX3ByZXAoY29uc3RfbGVhZl9wb2ludGVyIC8qcF9sKi8sIGNvbnN0X2xlYWZfcG9pbnRlciAvKnBfciovLCAKKwkgICAgICBzcGxpdF9qb2luX2JyYW5jaF9iYWcmIHJfYmFnKQoreyByX2JhZy5hZGRfYnJhbmNoKCk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JlY19qb2luX3ByZXAoY29uc3RfbGVhZl9wb2ludGVyIC8qcF9sKi8sIGNvbnN0X2ludGVybmFsX25vZGVfcG9pbnRlciAvKnBfciovLCAKKwkgICAgICBzcGxpdF9qb2luX2JyYW5jaF9iYWcmIHJfYmFnKQoreyByX2JhZy5hZGRfYnJhbmNoKCk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JlY19qb2luX3ByZXAoY29uc3RfaW50ZXJuYWxfbm9kZV9wb2ludGVyIC8qcF9sKi8sIGNvbnN0X2xlYWZfcG9pbnRlciAvKnBfciovLCAKKwkgICAgICBzcGxpdF9qb2luX2JyYW5jaF9iYWcmIHJfYmFnKQoreyByX2JhZy5hZGRfYnJhbmNoKCk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JlY19qb2luX3ByZXAoY29uc3RfaW50ZXJuYWxfbm9kZV9wb2ludGVyIHBfbCwgY29uc3RfaW50ZXJuYWxfbm9kZV9wb2ludGVyIHBfciwKKwkgICAgICBzcGxpdF9qb2luX2JyYW5jaF9iYWcmIHJfYmFnKQoreworICBpZiAocF9sLT5nZXRfZV9pbmQoKSA9PSBwX3ItPmdldF9lX2luZCgpICYmIAorICAgICAgc3ludGhfZV9hY2Nlc3NfdHJhaXRzOjplcXVhbF9wcmVmaXhlcyhwX2wtPnByZWZfYl9pdCgpLCBwX2wtPnByZWZfZV9pdCgpLAorCQkJCQkgICAgcF9yLT5wcmVmX2JfaXQoKSwgcF9yLT5wcmVmX2VfaXQoKSkpCisgICAgeworICAgICAgZm9yICh0eXBlbmFtZSBpbnRlcm5hbF9ub2RlOjpjb25zdF9pdGVyYXRvciBpdCA9IHBfci0+YmVnaW4oKTsKKwkgICBpdCAhPSBwX3ItPmVuZCgpOyArKyBpdCkKKyAgICAgICAgeworCSAgY29uc3Rfbm9kZV9wb2ludGVyIHBfbF9qb2luX2NoaWxkID0gcF9sLT5nZXRfam9pbl9jaGlsZCgqaXQsIHRoaXMpOworCSAgaWYgKHBfbF9qb2luX2NoaWxkICE9IE5VTEwpCisJICAgIHJlY19qb2luX3ByZXAocF9sX2pvaW5fY2hpbGQsICogaXQsIHJfYmFnKTsKKyAgICAgICAgfQorICAgICAgcmV0dXJuOworICAgIH0KKworICBpZiAocF9yLT5nZXRfZV9pbmQoKSA8IHBfbC0+Z2V0X2VfaW5kKCkgJiYgCisgICAgICBwX3ItPnNob3VsZF9iZV9taW5lKHBfbC0+cHJlZl9iX2l0KCksIHBfbC0+cHJlZl9lX2l0KCksIDAsIHRoaXMpKQorICAgIHsKKyAgICAgIGNvbnN0X25vZGVfcG9pbnRlciBwX3Jfam9pbl9jaGlsZCA9IHBfci0+Z2V0X2pvaW5fY2hpbGQocF9sLCB0aGlzKTsKKyAgICAgIGlmIChwX3Jfam9pbl9jaGlsZCAhPSBOVUxMKQorCXJlY19qb2luX3ByZXAocF9yX2pvaW5fY2hpbGQsIHBfbCwgcl9iYWcpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBpZiAocF9yLT5nZXRfZV9pbmQoKSA8IHBfbC0+Z2V0X2VfaW5kKCkgJiYgCisgICAgICBwX3ItPnNob3VsZF9iZV9taW5lKHBfbC0+cHJlZl9iX2l0KCksIHBfbC0+cHJlZl9lX2l0KCksIDAsIHRoaXMpKQorICAgIHsKKyAgICAgIGNvbnN0X25vZGVfcG9pbnRlciBwX3Jfam9pbl9jaGlsZCA9IHBfci0+Z2V0X2pvaW5fY2hpbGQocF9sLCB0aGlzKTsKKyAgICAgIGlmIChwX3Jfam9pbl9jaGlsZCAhPSBOVUxMKQorCXJlY19qb2luX3ByZXAocF9yX2pvaW5fY2hpbGQsIHBfbCwgcl9iYWcpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgcl9iYWcuYWRkX2JyYW5jaCgpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVjX2pvaW4obm9kZV9wb2ludGVyIHBfbCwgbm9kZV9wb2ludGVyIHBfciwgc2l6ZV90eXBlIGNoZWNrZWRfaW5kLCBzcGxpdF9qb2luX2JyYW5jaF9iYWcmIHJfYmFnKQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9yICE9IE5VTEwpOworICBpZiAocF9sID09IE5VTEwpCisgICAgeworICAgICAgYXBwbHlfdXBkYXRlKHBfciwgKG5vZGVfdXBkYXRlKiApdGhpcyk7CisgICAgICByZXR1cm4gKHBfcik7CisgICAgfQorCisgIGlmIChwX2wtPm1fdHlwZSA9PSBwYXRfdHJpZV9sZWFmX25vZGVfdHlwZSkKKyAgICB7CisgICAgICBpZiAocF9yLT5tX3R5cGUgPT0gcGF0X3RyaWVfbGVhZl9ub2RlX3R5cGUpCisgICAgICAgIHsKKwkgIG5vZGVfcG9pbnRlciBwX3JldCA9IHJlY19qb2luKHN0YXRpY19jYXN0PGxlYWZfcG9pbnRlcj4ocF9sKSwKKwkJCQkJc3RhdGljX2Nhc3Q8bGVhZl9wb2ludGVyPihwX3IpLCByX2JhZyk7CisJICBhcHBseV91cGRhdGUocF9yZXQsIChub2RlX3VwZGF0ZSogKXRoaXMpOworCSAgcmV0dXJuIHBfcmV0OworICAgICAgICB9CisKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3ItPm1fdHlwZSA9PSBwYXRfdHJpZV9pbnRlcm5hbF9ub2RlX3R5cGUpOworICAgICAgbm9kZV9wb2ludGVyIHBfcmV0ID0gcmVjX2pvaW4oc3RhdGljX2Nhc3Q8bGVhZl9wb2ludGVyPihwX2wpLAorCQkJCSAgICBzdGF0aWNfY2FzdDxpbnRlcm5hbF9ub2RlX3BvaW50ZXI+KHBfciksCisJCQkJICAgIGNoZWNrZWRfaW5kLCByX2JhZyk7CisgICAgICBhcHBseV91cGRhdGUocF9yZXQsIChub2RlX3VwZGF0ZSogKXRoaXMpOworICAgICAgcmV0dXJuIHBfcmV0OworICAgIH0KKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9sLT5tX3R5cGUgPT0gcGF0X3RyaWVfaW50ZXJuYWxfbm9kZV90eXBlKTsKKyAgaWYgKHBfci0+bV90eXBlID09IHBhdF90cmllX2xlYWZfbm9kZV90eXBlKQorICAgIHsKKyAgICAgIG5vZGVfcG9pbnRlciBwX3JldCA9IHJlY19qb2luKHN0YXRpY19jYXN0PGludGVybmFsX25vZGVfcG9pbnRlcj4ocF9sKSwKKwkJCQkgICAgc3RhdGljX2Nhc3Q8bGVhZl9wb2ludGVyPihwX3IpLAorCQkJCSAgICBjaGVja2VkX2luZCwgcl9iYWcpOworICAgICAgYXBwbHlfdXBkYXRlKHBfcmV0LCAobm9kZV91cGRhdGUqICl0aGlzKTsKKyAgICAgIHJldHVybiBwX3JldDsKKyAgICB9CisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfci0+bV90eXBlID09IHBhdF90cmllX2ludGVybmFsX25vZGVfdHlwZSk7CisgIG5vZGVfcG9pbnRlciBwX3JldCA9IHJlY19qb2luKHN0YXRpY19jYXN0PGludGVybmFsX25vZGVfcG9pbnRlcj4ocF9sKSwKKwkJCQlzdGF0aWNfY2FzdDxpbnRlcm5hbF9ub2RlX3BvaW50ZXI+KHBfciksIAorCQkJCXJfYmFnKTsKKworICBhcHBseV91cGRhdGUocF9yZXQsIChub2RlX3VwZGF0ZSogKXRoaXMpOworICByZXR1cm4gcF9yZXQ7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9wb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6CityZWNfam9pbihsZWFmX3BvaW50ZXIgcF9sLCBsZWFmX3BvaW50ZXIgcF9yLCBzcGxpdF9qb2luX2JyYW5jaF9iYWcmIHJfYmFnKQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9yICE9IE5VTEwpOworICBpZiAocF9sID09IE5VTEwpCisgICAgcmV0dXJuIChwX3IpOworICBub2RlX3BvaW50ZXIgcF9yZXQgPSBpbnNlcnRfYnJhbmNoKHBfbCwgcF9yLCByX2JhZyk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChyZWN1cnNpdmVfY291bnRfbGVhZnMocF9yZXQpID09IDIpOworICByZXR1cm4gcF9yZXQ7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9wb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6CityZWNfam9pbihsZWFmX3BvaW50ZXIgcF9sLCBpbnRlcm5hbF9ub2RlX3BvaW50ZXIgcF9yLCBzaXplX3R5cGUgY2hlY2tlZF9pbmQsIAorCSBzcGxpdF9qb2luX2JyYW5jaF9iYWcmIHJfYmFnKQoreworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgIGNvbnN0IHNpemVfdHlwZSBsaHNfbGVhZnMgPSByZWN1cnNpdmVfY291bnRfbGVhZnMocF9sKTsKKyAgY29uc3Qgc2l6ZV90eXBlIHJoc19sZWFmcyA9IHJlY3Vyc2l2ZV9jb3VudF9sZWFmcyhwX3IpOworI2VuZGlmIAorCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3IgIT0gTlVMTCk7CisgIG5vZGVfcG9pbnRlciBwX3JldCA9IHJlY19qb2luKHBfciwgcF9sLCBjaGVja2VkX2luZCwgcl9iYWcpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocmVjdXJzaXZlX2NvdW50X2xlYWZzKHBfcmV0KSA9PSBsaHNfbGVhZnMgKyByaHNfbGVhZnMpOworICByZXR1cm4gcF9yZXQ7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9wb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6CityZWNfam9pbihpbnRlcm5hbF9ub2RlX3BvaW50ZXIgcF9sLCBsZWFmX3BvaW50ZXIgcF9yLCBzaXplX3R5cGUgY2hlY2tlZF9pbmQsIHNwbGl0X2pvaW5fYnJhbmNoX2JhZyYgcl9iYWcpCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX2wgIT0gTlVMTCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3IgIT0gTlVMTCk7CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICBjb25zdCBzaXplX3R5cGUgbGhzX2xlYWZzID0gcmVjdXJzaXZlX2NvdW50X2xlYWZzKHBfbCk7CisgIGNvbnN0IHNpemVfdHlwZSByaHNfbGVhZnMgPSByZWN1cnNpdmVfY291bnRfbGVhZnMocF9yKTsKKyNlbmRpZiAKKworICBpZiAoIXBfbC0+c2hvdWxkX2JlX21pbmUocHJlZl9iZWdpbihwX3IpLCBwcmVmX2VuZChwX3IpLCBjaGVja2VkX2luZCwgdGhpcykpCisgICAgeworICAgICAgbm9kZV9wb2ludGVyIHBfcmV0ID0gaW5zZXJ0X2JyYW5jaChwX2wsIHBfciwgcl9iYWcpOworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShwX3JldC0+YXNzZXJ0X3ZhbGlkKHRoaXMpOykKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChyZWN1cnNpdmVfY291bnRfbGVhZnMocF9yZXQpID09CisgICAgICAgCQkgICAgICAgICAgICBsaHNfbGVhZnMgKyByaHNfbGVhZnMpOworICAgICAgcmV0dXJuIHBfcmV0OworICAgIH0KKworICBub2RlX3BvaW50ZXIgcF9wb3RfY2hpbGQgPSBwX2wtPmFkZF9jaGlsZChwX3IsIHByZWZfYmVnaW4ocF9yKSwKKwkJCQkJICAgIHByZWZfZW5kKHBfciksIHRoaXMpOworICBpZiAocF9wb3RfY2hpbGQgIT0gcF9yKQorICAgIHsKKyAgICAgIG5vZGVfcG9pbnRlciBwX25ld19jaGlsZCA9IHJlY19qb2luKHBfcG90X2NoaWxkLCBwX3IsIHBfbC0+Z2V0X2VfaW5kKCksCisJCQkJCSAgcl9iYWcpOworCisgICAgICBwX2wtPnJlcGxhY2VfY2hpbGQocF9uZXdfY2hpbGQsIHByZWZfYmVnaW4ocF9uZXdfY2hpbGQpLAorCQkJIHByZWZfZW5kKHBfbmV3X2NoaWxkKSwgdGhpcyk7CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX09OTFkocF9sLT5hc3NlcnRfdmFsaWQodGhpcykpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocmVjdXJzaXZlX2NvdW50X2xlYWZzKHBfbCkgPT0gbGhzX2xlYWZzICsgcmhzX2xlYWZzKTsKKyAgcmV0dXJuIHBfbDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JlY19qb2luKGludGVybmFsX25vZGVfcG9pbnRlciBwX2wsIGludGVybmFsX25vZGVfcG9pbnRlciBwX3IsIHNwbGl0X2pvaW5fYnJhbmNoX2JhZyYgcl9iYWcpCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX2wgIT0gTlVMTCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3IgIT0gTlVMTCk7CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICBjb25zdCBzaXplX3R5cGUgbGhzX2xlYWZzID0gcmVjdXJzaXZlX2NvdW50X2xlYWZzKHBfbCk7CisgIGNvbnN0IHNpemVfdHlwZSByaHNfbGVhZnMgPSByZWN1cnNpdmVfY291bnRfbGVhZnMocF9yKTsKKyNlbmRpZiAKKworICBpZiAocF9sLT5nZXRfZV9pbmQoKSA9PSBwX3ItPmdldF9lX2luZCgpICYmIAorICAgICAgc3ludGhfZV9hY2Nlc3NfdHJhaXRzOjplcXVhbF9wcmVmaXhlcyhwX2wtPnByZWZfYl9pdCgpLCBwX2wtPnByZWZfZV9pdCgpLAorCQkJCQkgICAgcF9yLT5wcmVmX2JfaXQoKSwgcF9yLT5wcmVmX2VfaXQoKSkpCisgICAgeworICAgICAgZm9yICh0eXBlbmFtZSBpbnRlcm5hbF9ub2RlOjppdGVyYXRvciBpdCA9IHBfci0+YmVnaW4oKTsKKwkgICBpdCAhPSBwX3ItPmVuZCgpOyArKyBpdCkKKyAgICAgICAgeworCSAgbm9kZV9wb2ludGVyIHBfbmV3X2NoaWxkID0gcmVjX2pvaW4ocF9sLT5nZXRfam9pbl9jaGlsZCgqaXQsIHRoaXMpLAorCQkJCQkgICAgICAqIGl0LCAwLCByX2JhZyk7CisJICBwX2wtPnJlcGxhY2VfY2hpbGQocF9uZXdfY2hpbGQsIHByZWZfYmVnaW4ocF9uZXdfY2hpbGQpLAorCQkJICAgICBwcmVmX2VuZChwX25ld19jaGlsZCksIHRoaXMpOworICAgICAgICB9CisKKyAgICAgIHBfci0+fmludGVybmFsX25vZGUoKTsKKyAgICAgIHNfaW50ZXJuYWxfbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShwX3IsIDEpOworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShwX2wtPmFzc2VydF92YWxpZCh0aGlzKTspCisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocmVjdXJzaXZlX2NvdW50X2xlYWZzKHBfbCkgPT0gbGhzX2xlYWZzICsgcmhzX2xlYWZzKTsKKyAgICAgIHJldHVybiBwX2w7CisgICAgfQorCisgIGlmIChwX2wtPmdldF9lX2luZCgpIDwgcF9yLT5nZXRfZV9pbmQoKSAmJiAKKyAgICAgIHBfbC0+c2hvdWxkX2JlX21pbmUocF9yLT5wcmVmX2JfaXQoKSwgcF9yLT5wcmVmX2VfaXQoKSwgMCwgdGhpcykpCisgICAgeworICAgICAgbm9kZV9wb2ludGVyIHBfbmV3X2NoaWxkID0gcmVjX2pvaW4ocF9sLT5nZXRfam9pbl9jaGlsZChwX3IsIHRoaXMpLAorCQkJCQkgIHBfciwgMCwgcl9iYWcpOworICAgICAgcF9sLT5yZXBsYWNlX2NoaWxkKHBfbmV3X2NoaWxkLCBwcmVmX2JlZ2luKHBfbmV3X2NoaWxkKSwKKwkJCSBwcmVmX2VuZChwX25ld19jaGlsZCksIHRoaXMpOworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShwX2wtPmFzc2VydF92YWxpZCh0aGlzKTspCisgICAgICByZXR1cm4gcF9sOworICAgIH0KKworICBpZiAocF9yLT5nZXRfZV9pbmQoKSA8IHBfbC0+Z2V0X2VfaW5kKCkgJiYgCisgICAgICBwX3ItPnNob3VsZF9iZV9taW5lKHBfbC0+cHJlZl9iX2l0KCksIHBfbC0+cHJlZl9lX2l0KCksIDAsIHRoaXMpKQorICAgIHsKKyAgICAgIG5vZGVfcG9pbnRlciBwX25ld19jaGlsZCA9IHJlY19qb2luKHBfci0+Z2V0X2pvaW5fY2hpbGQocF9sLCB0aGlzKSwgcF9sLAorCQkJCQkgIDAsIHJfYmFnKTsKKworICAgICAgcF9yLT5yZXBsYWNlX2NoaWxkKHBfbmV3X2NoaWxkLCBwcmVmX2JlZ2luKHBfbmV3X2NoaWxkKSwgCisJCQkgcHJlZl9lbmQocF9uZXdfY2hpbGQpLCB0aGlzKTsKKworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShwX3ItPmFzc2VydF92YWxpZCh0aGlzKTspCisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocmVjdXJzaXZlX2NvdW50X2xlYWZzKHBfcikgPT0gbGhzX2xlYWZzICsgcmhzX2xlYWZzKTsKKyAgICAgIHJldHVybiBwX3I7CisgICAgfQorCisgIG5vZGVfcG9pbnRlciBwX3JldCA9IGluc2VydF9icmFuY2gocF9sLCBwX3IsIHJfYmFnKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShwX3JldC0+YXNzZXJ0X3ZhbGlkKHRoaXMpOykKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHJlY3Vyc2l2ZV9jb3VudF9sZWFmcyhwX3JldCkgPT0gbGhzX2xlYWZzICsgcmhzX2xlYWZzKTsKKyAgcmV0dXJuIHBfcmV0OworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHN0ZDo6cGFpcjx0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6aXRlcmF0b3IsIGJvb2w+CitQQl9EU19DTEFTU19DX0RFQzo6CitpbnNlcnQoY29uc3RfcmVmZXJlbmNlIHJfdmFsKQoreworICBub2RlX3BvaW50ZXIgcF9sZiA9IGZpbmRfaW1wKFBCX0RTX1YyRihyX3ZhbCkpOworICBpZiAocF9sZiAhPSBOVUxMICYmIHBfbGYtPm1fdHlwZSA9PSBwYXRfdHJpZV9sZWFmX25vZGVfdHlwZSAmJiAKKyAgICAgIHN5bnRoX2VfYWNjZXNzX3RyYWl0czo6ZXF1YWxfa2V5cyhQQl9EU19WMkYoc3RhdGljX2Nhc3Q8bGVhZl9wb2ludGVyPihwX2xmKS0+dmFsdWUoKSksIFBCX0RTX1YyRihyX3ZhbCkpKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6Y2hlY2tfa2V5X2V4aXN0cyhQQl9EU19WMkYocl92YWwpKSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihpdGVyYXRvcihwX2xmKSwgZmFsc2UpOworICAgIH0KKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9kb2VzX25vdF9leGlzdChQQl9EU19WMkYocl92YWwpKSk7CisKKyAgbGVhZl9wb2ludGVyIHBfbmV3X2xmID0gc19sZWFmX2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsKKyAgY29uZF9kZWFsdG9yIGNvbmQocF9uZXdfbGYpOworCisgIG5ldyAocF9uZXdfbGYpIGxlYWYocl92YWwpOworICBhcHBseV91cGRhdGUocF9uZXdfbGYsIChub2RlX3VwZGF0ZSogKXRoaXMpOworICBjb25kLnNldF9jYWxsX2Rlc3RydWN0b3IoKTsKKyAgc3BsaXRfam9pbl9icmFuY2hfYmFnIGJhZzsKKyAgYmFnLmFkZF9icmFuY2goKTsKKyAgbV9wX2hlYWQtPm1fcF9wYXJlbnQgPSByZWNfam9pbihtX3BfaGVhZC0+bV9wX3BhcmVudCwgcF9uZXdfbGYsIDAsIGJhZyk7CisgIG1fcF9oZWFkLT5tX3BfcGFyZW50LT5tX3BfcGFyZW50ID0gbV9wX2hlYWQ7CisgIGNvbmQuc2V0X25vX2FjdGlvbl9kdG9yKCk7CisgICsrbV9zaXplOworICB1cGRhdGVfbWluX21heF9mb3JfaW5zZXJ0ZWRfbGVhZihwX25ld19sZik7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6aW5zZXJ0X25ldyhQQl9EU19WMkYocl92YWwpKTspICAgCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICByZXR1cm4gc3RkOjptYWtlX3BhaXIocG9pbnRfaXRlcmF0b3IocF9uZXdfbGYpLCB0cnVlKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2tleXNfZGlmZl9pbmQodHlwZW5hbWUgZV9hY2Nlc3NfdHJhaXRzOjpjb25zdF9pdGVyYXRvciBiX2wsIHR5cGVuYW1lIGVfYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IgZV9sLCB0eXBlbmFtZSBlX2FjY2Vzc190cmFpdHM6OmNvbnN0X2l0ZXJhdG9yIGJfciwgdHlwZW5hbWUgZV9hY2Nlc3NfdHJhaXRzOjpjb25zdF9pdGVyYXRvciBlX3IpCit7CisgIHNpemVfdHlwZSBkaWZmX3BvcyA9IDA7CisgIHdoaWxlIChiX2wgIT0gZV9sKQorICAgIHsKKyAgICAgIGlmIChiX3IgPT0gZV9yKQorCXJldHVybiAoZGlmZl9wb3MpOworICAgICAgaWYgKGVfYWNjZXNzX3RyYWl0czo6ZV9wb3MoKmJfbCkgIT0gZV9hY2Nlc3NfdHJhaXRzOjplX3BvcygqYl9yKSkKKwlyZXR1cm4gKGRpZmZfcG9zKTsKKyAgICAgICsrYl9sOworICAgICAgKytiX3I7CisgICAgICArK2RpZmZfcG9zOworICAgIH0KKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGJfciAhPSBlX3IpOworICByZXR1cm4gZGlmZl9wb3M7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6aW50ZXJuYWxfbm9kZV9wb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6CitpbnNlcnRfYnJhbmNoKG5vZGVfcG9pbnRlciBwX2wsIG5vZGVfcG9pbnRlciBwX3IsIHNwbGl0X2pvaW5fYnJhbmNoX2JhZyYgcl9iYWcpCit7CisgIHR5cGVuYW1lIHN5bnRoX2VfYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IgbGVmdF9iX2l0ID0gcHJlZl9iZWdpbihwX2wpOworICB0eXBlbmFtZSBzeW50aF9lX2FjY2Vzc190cmFpdHM6OmNvbnN0X2l0ZXJhdG9yIGxlZnRfZV9pdCA9IHByZWZfZW5kKHBfbCk7CisgIHR5cGVuYW1lIHN5bnRoX2VfYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IgcmlnaHRfYl9pdCA9IHByZWZfYmVnaW4ocF9yKTsKKyAgdHlwZW5hbWUgc3ludGhfZV9hY2Nlc3NfdHJhaXRzOjpjb25zdF9pdGVyYXRvciByaWdodF9lX2l0ID0gcHJlZl9lbmQocF9yKTsKKworICBjb25zdCBzaXplX3R5cGUgZGlmZl9pbmQgPSBrZXlzX2RpZmZfaW5kKGxlZnRfYl9pdCwgbGVmdF9lX2l0LCAKKwkJCQkJICAgcmlnaHRfYl9pdCwgcmlnaHRfZV9pdCk7CisKKyAgaW50ZXJuYWxfbm9kZV9wb2ludGVyIHBfbmV3X25kID0gcl9iYWcuZ2V0X2JyYW5jaCgpOworICBuZXcgKHBfbmV3X25kKSBpbnRlcm5hbF9ub2RlKGRpZmZfaW5kLCBsZWZ0X2JfaXQpOworICBwX25ld19uZC0+YWRkX2NoaWxkKHBfbCwgbGVmdF9iX2l0LCBsZWZ0X2VfaXQsIHRoaXMpOworICBwX25ld19uZC0+YWRkX2NoaWxkKHBfciwgcmlnaHRfYl9pdCwgcmlnaHRfZV9pdCwgdGhpcyk7CisgIHBfbC0+bV9wX3BhcmVudCA9IHBfbmV3X25kOworICBwX3ItPm1fcF9wYXJlbnQgPSBwX25ld19uZDsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShwX25ld19uZC0+YXNzZXJ0X3ZhbGlkKHRoaXMpOykKKyAgcmV0dXJuIChwX25ld19uZCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cit1cGRhdGVfbWluX21heF9mb3JfaW5zZXJ0ZWRfbGVhZihsZWFmX3BvaW50ZXIgcF9uZXdfbGYpCit7CisgIGlmIChtX3BfaGVhZC0+bV9wX21pbiA9PSBtX3BfaGVhZCB8fAorICAgICAgc3ludGhfZV9hY2Nlc3NfdHJhaXRzOjpjbXBfa2V5cyhQQl9EU19WMkYocF9uZXdfbGYtPnZhbHVlKCkpLAorCQkJCSAgICAgIFBCX0RTX1YyRihzdGF0aWNfY2FzdDxjb25zdF9sZWFmX3BvaW50ZXI+KG1fcF9oZWFkLT5tX3BfbWluKS0+dmFsdWUoKSkpKQorICAgIG1fcF9oZWFkLT5tX3BfbWluID0gcF9uZXdfbGY7CisKKyAgaWYgKG1fcF9oZWFkLT5tX3BfbWF4ID09IG1fcF9oZWFkIHx8CisgICAgICBzeW50aF9lX2FjY2Vzc190cmFpdHM6OmNtcF9rZXlzKFBCX0RTX1YyRihzdGF0aWNfY2FzdDxjb25zdF9sZWFmX3BvaW50ZXI+KG1fcF9oZWFkLT5tX3BfbWF4KS0+dmFsdWUoKSksIFBCX0RTX1YyRihwX25ld19sZi0+dmFsdWUoKSkpKQorICAgIG1fcF9oZWFkLT5tX3BfbWF4ID0gcF9uZXdfbGY7Cit9CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL2ludGVybmFsX25vZGUuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9pbnRlcm5hbF9ub2RlLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjJmNDI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9pbnRlcm5hbF9ub2RlLmhwcApAQCAtMCwwICsxLDU5OSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgaW50ZXJuYWxfbm9kZS5ocHAKKyAqIENvbnRhaW5zIGFuIGludGVybmFsIFBCX0RTX0JBU0VfQ19ERUMgZm9yIGEgcGF0cmljaWEgdHJlZS4KKyAqLworCisjaWZuZGVmIFBCX0RTX1BBVF9UUklFX0lOVEVSTkFMX05PREVfSFBQCisjZGVmaW5lIFBCX0RTX1BBVF9UUklFX0lOVEVSTkFMX05PREVfSFBQCisKKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGVfVHJhaXRzLCB0eXBlbmFtZSBFX0FjY2Vzc19UcmFpdHMsICBcCisJICAgICB0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUgQWxsb2NhdG9yPgorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFwKKyAgICBwYXRfdHJpZV9pbnRlcm5hbF9ub2RlPFR5cGVfVHJhaXRzLCBFX0FjY2Vzc19UcmFpdHMsIE1ldGFkYXRhLCBBbGxvY2F0b3I+CisKKyNkZWZpbmUgUEJfRFNfQkFTRV9DX0RFQyBcCisgICAgcGF0X3RyaWVfbm9kZV9iYXNlPFR5cGVfVHJhaXRzLCBFX0FjY2Vzc19UcmFpdHMsIE1ldGFkYXRhLCBBbGxvY2F0b3I+CisKKyNkZWZpbmUgUEJfRFNfTEVBRl9DX0RFQyBcCisgICAgcGF0X3RyaWVfbGVhZjxUeXBlX1RyYWl0cywgRV9BY2Nlc3NfVHJhaXRzLCBNZXRhZGF0YSwgQWxsb2NhdG9yPgorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZV9UcmFpdHMsCisJICAgICB0eXBlbmFtZSBFX0FjY2Vzc19UcmFpdHMsCisJICAgICB0eXBlbmFtZSBNZXRhZGF0YSwKKwkgICAgIHR5cGVuYW1lIEFsbG9jYXRvcj4KKyAgICBzdHJ1Y3QgcGF0X3RyaWVfaW50ZXJuYWxfbm9kZSA6IHB1YmxpYyBQQl9EU19CQVNFX0NfREVDCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIFBCX0RTX0JBU0VfQ19ERUMgCQkJYmFzZV90eXBlOworICAgICAgdHlwZWRlZiBUeXBlX1RyYWl0cyAJCQl0eXBlX3RyYWl0czsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHlwZV90cmFpdHM6OnZhbHVlX3R5cGUgCXZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6c2l6ZV90eXBlIAlzaXplX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgRV9BY2Nlc3NfVHJhaXRzIGVfYWNjZXNzX3RyYWl0czsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgZV9hY2Nlc3NfdHJhaXRzOjpjb25zdF9pdGVyYXRvciBjb25zdF9lX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxlX2FjY2Vzc190cmFpdHM+OjpvdGhlciBhY2Nlc3NfcmViaW5kOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhY2Nlc3NfcmViaW5kOjpjb25zdF9wb2ludGVyIGNvbnN0X2VfYWNjZXNzX3RyYWl0c19wb2ludGVyOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPGJhc2VfdHlwZT46Om90aGVyIGJhc2VfcmViaW5kOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3JlYmluZDo6cG9pbnRlciBub2RlX3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfcmViaW5kOjpjb25zdF9wb2ludGVyIGNvbnN0X25vZGVfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZiBQQl9EU19MRUFGX0NfREVDIGxlYWY7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPGxlYWY+OjpvdGhlciBsZWFmX3JlYmluZDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbGVhZl9yZWJpbmQ6OnBvaW50ZXIgbGVhZl9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBsZWFmX3JlYmluZDo6Y29uc3RfcG9pbnRlciBjb25zdF9sZWFmX3BvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8cGF0X3RyaWVfaW50ZXJuYWxfbm9kZT46Om90aGVyIGludGVybmFsX25vZGVfcmViaW5kOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpbnRlcm5hbF9ub2RlX3JlYmluZDo6cG9pbnRlciBpbnRlcm5hbF9ub2RlX3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGludGVybmFsX25vZGVfcmViaW5kOjpjb25zdF9wb2ludGVyIGNvbnN0X2ludGVybmFsX25vZGVfcG9pbnRlcjsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6c3VidHJlZV9kZWJ1Z19pbmZvIHN1YnRyZWVfZGVidWdfaW5mbzsKKworICAgICAgdmlydHVhbCBzdWJ0cmVlX2RlYnVnX2luZm8KKyAgICAgIGFzc2VydF92YWxpZF9pbXAoY29uc3RfZV9hY2Nlc3NfdHJhaXRzX3BvaW50ZXIpIGNvbnN0OworI2VuZGlmIAorCisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBnZXRfcHJlZl9wb3MoY29uc3RfZV9pdGVyYXRvciwgY29uc3RfZV9pdGVyYXRvciwgCisJCSAgIGNvbnN0X2VfYWNjZXNzX3RyYWl0c19wb2ludGVyKSBjb25zdDsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8bm9kZV9wb2ludGVyPjo6b3RoZXIgbm9kZV9wb2ludGVyX3JlYmluZDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbm9kZV9wb2ludGVyX3JlYmluZDo6cG9pbnRlciBub2RlX3BvaW50ZXJfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbm9kZV9wb2ludGVyX3JlYmluZDo6cmVmZXJlbmNlIG5vZGVfcG9pbnRlcl9yZWZlcmVuY2U7CisKKyAgICAgIGVudW0KKwl7CisJICBhcnJfc2l6ZSA9IEVfQWNjZXNzX1RyYWl0czo6bWF4X3NpemUgKyAxCisJfTsKKyAgICAgIFBCX0RTX1NUQVRJQ19BU1NFUlQobWluX2Fycl9zaXplLCBhcnJfc2l6ZSA+PSAyKTsKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL2NvbnN0X2NoaWxkX2l0ZXJhdG9yLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9jaGlsZF9pdGVyYXRvci5ocHA+CisKKyAgICAgIHBhdF90cmllX2ludGVybmFsX25vZGUoc2l6ZV90eXBlLCBjb25zdCBjb25zdF9lX2l0ZXJhdG9yKTsKKworICAgICAgdm9pZAorICAgICAgdXBkYXRlX3ByZWZpeGVzKGNvbnN0X2VfYWNjZXNzX3RyYWl0c19wb2ludGVyKTsKKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3Q7CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpOworCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3Q7CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKTsKKworICAgICAgaW5saW5lIG5vZGVfcG9pbnRlcgorICAgICAgZ2V0X2NoaWxkX25vZGUoY29uc3RfZV9pdGVyYXRvciwgY29uc3RfZV9pdGVyYXRvciwgCisJCSAgICAgY29uc3RfZV9hY2Nlc3NfdHJhaXRzX3BvaW50ZXIpOworCisgICAgICBpbmxpbmUgY29uc3Rfbm9kZV9wb2ludGVyCisgICAgICBnZXRfY2hpbGRfbm9kZShjb25zdF9lX2l0ZXJhdG9yLCBjb25zdF9lX2l0ZXJhdG9yLCAKKwkJICAgICBjb25zdF9lX2FjY2Vzc190cmFpdHNfcG9pbnRlcikgY29uc3Q7CisKKyAgICAgIGlubGluZSBpdGVyYXRvcgorICAgICAgZ2V0X2NoaWxkX2l0KGNvbnN0X2VfaXRlcmF0b3IsIGNvbnN0X2VfaXRlcmF0b3IsIAorCQkgICBjb25zdF9lX2FjY2Vzc190cmFpdHNfcG9pbnRlcik7CisKKyAgICAgIGlubGluZSBub2RlX3BvaW50ZXIKKyAgICAgIGdldF9sb3dlcl9ib3VuZF9jaGlsZF9ub2RlKGNvbnN0X2VfaXRlcmF0b3IsIGNvbnN0X2VfaXRlcmF0b3IsIAorCQkJCSBzaXplX3R5cGUsIGNvbnN0X2VfYWNjZXNzX3RyYWl0c19wb2ludGVyKTsKKworICAgICAgaW5saW5lIG5vZGVfcG9pbnRlcgorICAgICAgYWRkX2NoaWxkKG5vZGVfcG9pbnRlciwgY29uc3RfZV9pdGVyYXRvciwgY29uc3RfZV9pdGVyYXRvciwgCisJCWNvbnN0X2VfYWNjZXNzX3RyYWl0c19wb2ludGVyKTsKKworICAgICAgaW5saW5lIGNvbnN0X25vZGVfcG9pbnRlcgorICAgICAgZ2V0X2pvaW5fY2hpbGQoY29uc3Rfbm9kZV9wb2ludGVyLCBjb25zdF9lX2FjY2Vzc190cmFpdHNfcG9pbnRlcikgY29uc3Q7CisKKyAgICAgIGlubGluZSBub2RlX3BvaW50ZXIKKyAgICAgIGdldF9qb2luX2NoaWxkKG5vZGVfcG9pbnRlciwgY29uc3RfZV9hY2Nlc3NfdHJhaXRzX3BvaW50ZXIpOworCisgICAgICB2b2lkCisgICAgICByZW1vdmVfY2hpbGQobm9kZV9wb2ludGVyIHBfbmQpOworCisgICAgICBpdGVyYXRvcgorICAgICAgcmVtb3ZlX2NoaWxkKGl0ZXJhdG9yIGl0KTsKKworICAgICAgdm9pZAorICAgICAgcmVwbGFjZV9jaGlsZChub2RlX3BvaW50ZXIsIGNvbnN0X2VfaXRlcmF0b3IsIGNvbnN0X2VfaXRlcmF0b3IsIAorCQkgICAgY29uc3RfZV9hY2Nlc3NfdHJhaXRzX3BvaW50ZXIpOworCisgICAgICBpbmxpbmUgY29uc3RfZV9pdGVyYXRvcgorICAgICAgcHJlZl9iX2l0KCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBjb25zdF9lX2l0ZXJhdG9yCisgICAgICBwcmVmX2VfaXQoKSBjb25zdDsKKworICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgZ2V0X2VfaW5kKCkgY29uc3Q7CisKKyAgICAgIGJvb2wKKyAgICAgIHNob3VsZF9iZV9taW5lKGNvbnN0X2VfaXRlcmF0b3IsIGNvbnN0X2VfaXRlcmF0b3IsIHNpemVfdHlwZSwgCisJCSAgICAgY29uc3RfZV9hY2Nlc3NfdHJhaXRzX3BvaW50ZXIpIGNvbnN0OworCisgICAgICBsZWFmX3BvaW50ZXIKKyAgICAgIGxlZnRtb3N0X2Rlc2NlbmRhbnQoKTsKKworICAgICAgY29uc3RfbGVhZl9wb2ludGVyCisgICAgICBsZWZ0bW9zdF9kZXNjZW5kYW50KCkgY29uc3Q7CisKKyAgICAgIGxlYWZfcG9pbnRlcgorICAgICAgcmlnaHRtb3N0X2Rlc2NlbmRhbnQoKTsKKworICAgICAgY29uc3RfbGVhZl9wb2ludGVyCisgICAgICByaWdodG1vc3RfZGVzY2VuZGFudCgpIGNvbnN0OworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHNpemVfdHlwZQorICAgICAgZV9pbmQoKSBjb25zdDsKKyNlbmRpZiAKKworICAgIHByaXZhdGU6CisgICAgICBwYXRfdHJpZV9pbnRlcm5hbF9ub2RlKGNvbnN0IHBhdF90cmllX2ludGVybmFsX25vZGUmKTsKKworICAgICAgc2l6ZV90eXBlCisgICAgICBnZXRfYmVnaW5fcG9zKCkgY29uc3Q7CisKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBtX2VfaW5kOworICAgICAgY29uc3RfZV9pdGVyYXRvciBtX3ByZWZfYl9pdDsKKyAgICAgIGNvbnN0X2VfaXRlcmF0b3IgbV9wcmVmX2VfaXQ7CisgICAgICBub2RlX3BvaW50ZXIgbV9hX3BfY2hpbGRyZW5bYXJyX3NpemVdOworICAgICAgc3RhdGljIGxlYWZfcmViaW5kIHNfbGVhZl9hbGxvYzsKKyAgICAgIHN0YXRpYyBpbnRlcm5hbF9ub2RlX3JlYmluZCBzX2ludGVybmFsX25vZGVfYWxsb2M7CisgICAgfTsKKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmxlYWZfcmViaW5kCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OnNfbGVhZl9hbGxvYzsKKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmludGVybmFsX25vZGVfcmViaW5kCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OnNfaW50ZXJuYWxfbm9kZV9hbGxvYzsKKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgZ2V0X3ByZWZfcG9zKGNvbnN0X2VfaXRlcmF0b3IgYl9pdCwgY29uc3RfZV9pdGVyYXRvciBlX2l0LCAKKwkJIGNvbnN0X2VfYWNjZXNzX3RyYWl0c19wb2ludGVyIHBfdHJhaXRzKSBjb25zdAorICAgIHsKKyAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KHN0ZDo6ZGlzdGFuY2UoYl9pdCwgZV9pdCkpIDw9IG1fZV9pbmQpCisJcmV0dXJuIDA7CisgICAgICBzdGQ6OmFkdmFuY2UoYl9pdCwgbV9lX2luZCk7CisgICAgICByZXR1cm4gMSArIHBfdHJhaXRzLT5lX3BvcygqYl9pdCk7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcGF0X3RyaWVfaW50ZXJuYWxfbm9kZShzaXplX3R5cGUgbGVuLCBjb25zdCBjb25zdF9lX2l0ZXJhdG9yIGl0KSA6CisgICAgICBQQl9EU19CQVNFX0NfREVDKHBhdF90cmllX2ludGVybmFsX25vZGVfdHlwZSksCisgICAgICBtX2VfaW5kKGxlbiksIG1fcHJlZl9iX2l0KGl0KSwgbV9wcmVmX2VfaXQoaXQpCisgICAgeworICAgICAgc3RkOjphZHZhbmNlKG1fcHJlZl9lX2l0LCBtX2VfaW5kKTsKKyAgICAgIHN0ZDo6ZmlsbChtX2FfcF9jaGlsZHJlbiwgbV9hX3BfY2hpbGRyZW4gKyBhcnJfc2l6ZSwKKwkJc3RhdGljX2Nhc3Q8bm9kZV9wb2ludGVyPihOVUxMKSk7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB2b2lkCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHVwZGF0ZV9wcmVmaXhlcyhjb25zdF9lX2FjY2Vzc190cmFpdHNfcG9pbnRlciBwX3RyYWl0cykKKyAgICB7CisgICAgICBub2RlX3BvaW50ZXIgcF9maXJzdCA9ICpiZWdpbigpOworICAgICAgaWYgKHBfZmlyc3QtPm1fdHlwZSA9PSBwYXRfdHJpZV9sZWFmX25vZGVfdHlwZSkKKwl7CisJICBjb25zdF9sZWFmX3BvaW50ZXIgcCA9IHN0YXRpY19jYXN0PGNvbnN0X2xlYWZfcG9pbnRlcj4ocF9maXJzdCk7CisJICBtX3ByZWZfYl9pdCA9IHBfdHJhaXRzLT5iZWdpbihlX2FjY2Vzc190cmFpdHM6OmV4dHJhY3Rfa2V5KHAtPnZhbHVlKCkpKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfZmlyc3QtPm1fdHlwZSA9PSBwYXRfdHJpZV9pbnRlcm5hbF9ub2RlX3R5cGUpOworCSAgbV9wcmVmX2JfaXQgPSBzdGF0aWNfY2FzdDxpbnRlcm5hbF9ub2RlX3BvaW50ZXI+KHBfZmlyc3QpLT5wcmVmX2JfaXQoKTsKKwl9CisgICAgICBtX3ByZWZfZV9pdCA9IG1fcHJlZl9iX2l0OworICAgICAgc3RkOjphZHZhbmNlKG1fcHJlZl9lX2l0LCBtX2VfaW5kKTsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9pdGVyYXRvcgorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBiZWdpbigpIGNvbnN0CisgICAgeworICAgICAgdHlwZWRlZiBub2RlX3BvaW50ZXJfcG9pbnRlciBwb2ludGVyX3R5cGU7CisgICAgICBwb2ludGVyX3R5cGUgcCA9IGNvbnN0X2Nhc3Q8cG9pbnRlcl90eXBlPihtX2FfcF9jaGlsZHJlbik7CisgICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IocCArIGdldF9iZWdpbl9wb3MoKSwgcCArIGFycl9zaXplKTsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjppdGVyYXRvcgorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBiZWdpbigpCisgICAgeworICAgICAgcmV0dXJuIGl0ZXJhdG9yKG1fYV9wX2NoaWxkcmVuICsgZ2V0X2JlZ2luX3BvcygpLCAKKwkJICAgICAgbV9hX3BfY2hpbGRyZW4gKyBhcnJfc2l6ZSk7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfaXRlcmF0b3IKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgZW5kKCkgY29uc3QKKyAgICB7CisgICAgICB0eXBlZGVmIG5vZGVfcG9pbnRlcl9wb2ludGVyIHBvaW50ZXJfdHlwZTsKKyAgICAgIHBvaW50ZXJfdHlwZSBwID0gY29uc3RfY2FzdDxwb2ludGVyX3R5cGU+KG1fYV9wX2NoaWxkcmVuKSArIGFycl9zaXplOworICAgICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHAsIHApOworICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIGVuZCgpCisgICAgeyByZXR1cm4gaXRlcmF0b3IobV9hX3BfY2hpbGRyZW4gKyBhcnJfc2l6ZSwgbV9hX3BfY2hpbGRyZW4gKyBhcnJfc2l6ZSk7IH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX3BvaW50ZXIKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgZ2V0X2NoaWxkX25vZGUoY29uc3RfZV9pdGVyYXRvciBiX2l0LCBjb25zdF9lX2l0ZXJhdG9yIGVfaXQsIAorCQkgICBjb25zdF9lX2FjY2Vzc190cmFpdHNfcG9pbnRlciBwX3RyYWl0cykKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgaSA9IGdldF9wcmVmX3BvcyhiX2l0LCBlX2l0LCBwX3RyYWl0cyk7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoaSA8IGFycl9zaXplKTsKKyAgICAgIHJldHVybiBtX2FfcF9jaGlsZHJlbltpXTsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIGlubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6aXRlcmF0b3IKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgZ2V0X2NoaWxkX2l0KGNvbnN0X2VfaXRlcmF0b3IgYl9pdCwgY29uc3RfZV9pdGVyYXRvciBlX2l0LCAKKwkJIGNvbnN0X2VfYWNjZXNzX3RyYWl0c19wb2ludGVyIHBfdHJhaXRzKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBpID0gZ2V0X3ByZWZfcG9zKGJfaXQsIGVfaXQsIHBfdHJhaXRzKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChpIDwgYXJyX3NpemUpOworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fYV9wX2NoaWxkcmVuW2ldICE9IE5VTEwpOworICAgICAgcmV0dXJuIGl0ZXJhdG9yKG1fYV9wX2NoaWxkcmVuICsgaSwgbV9hX3BfY2hpbGRyZW4gKyBpKTsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIGlubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3Rfbm9kZV9wb2ludGVyCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIGdldF9jaGlsZF9ub2RlKGNvbnN0X2VfaXRlcmF0b3IgYl9pdCwgY29uc3RfZV9pdGVyYXRvciBlX2l0LCAKKwkJICAgY29uc3RfZV9hY2Nlc3NfdHJhaXRzX3BvaW50ZXIgcF90cmFpdHMpIGNvbnN0CisgICAgeyByZXR1cm4gY29uc3RfY2FzdDxub2RlX3BvaW50ZXI+KGdldF9jaGlsZF9ub2RlKGJfaXQsIGVfaXQsIHBfdHJhaXRzKSk7IH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBnZXRfbG93ZXJfYm91bmRfY2hpbGRfbm9kZShjb25zdF9lX2l0ZXJhdG9yIGJfaXQsIGNvbnN0X2VfaXRlcmF0b3IgZV9pdCwgCisJCQkgICAgICAgc2l6ZV90eXBlIGNoZWNrZWRfaW5kLCAKKwkJCSAgICAgICBjb25zdF9lX2FjY2Vzc190cmFpdHNfcG9pbnRlciBwX3RyYWl0cykKKyAgICB7CisgICAgICBpZiAoIXNob3VsZF9iZV9taW5lKGJfaXQsIGVfaXQsIGNoZWNrZWRfaW5kLCBwX3RyYWl0cykpCisJeworCSAgaWYgKHBfdHJhaXRzLT5jbXBfcHJlZml4ZXMoYl9pdCwgZV9pdCwgbV9wcmVmX2JfaXQsIG1fcHJlZl9lX2l0LCB0cnVlKSkKKwkgICAgcmV0dXJuIGxlZnRtb3N0X2Rlc2NlbmRhbnQoKTsKKwkgIHJldHVybiByaWdodG1vc3RfZGVzY2VuZGFudCgpOworCX0KKworICAgICAgc2l6ZV90eXBlIGkgPSBnZXRfcHJlZl9wb3MoYl9pdCwgZV9pdCwgcF90cmFpdHMpOworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGkgPCBhcnJfc2l6ZSk7CisKKyAgICAgIGlmIChtX2FfcF9jaGlsZHJlbltpXSAhPSBOVUxMKQorCXJldHVybiBtX2FfcF9jaGlsZHJlbltpXTsKKworICAgICAgd2hpbGUgKCsraSA8IGFycl9zaXplKQorCWlmIChtX2FfcF9jaGlsZHJlbltpXSAhPSBOVUxMKQorCSAgeworCSAgICBpZiAobV9hX3BfY2hpbGRyZW5baV0tPm1fdHlwZSA9PSBwYXRfdHJpZV9sZWFmX25vZGVfdHlwZSkKKwkgICAgICByZXR1cm4gbV9hX3BfY2hpbGRyZW5baV07CisKKwkgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fYV9wX2NoaWxkcmVuW2ldLT5tX3R5cGUgPT0gcGF0X3RyaWVfaW50ZXJuYWxfbm9kZV90eXBlKTsKKworCSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50ZXJuYWxfbm9kZV9wb2ludGVyPihtX2FfcF9jaGlsZHJlbltpXSktPmxlZnRtb3N0X2Rlc2NlbmRhbnQoKTsKKwkgIH0KKworICAgICAgcmV0dXJuIHJpZ2h0bW9zdF9kZXNjZW5kYW50KCk7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBhZGRfY2hpbGQobm9kZV9wb2ludGVyIHBfbmQsIGNvbnN0X2VfaXRlcmF0b3IgYl9pdCwgY29uc3RfZV9pdGVyYXRvciBlX2l0LCAKKwkgICAgICBjb25zdF9lX2FjY2Vzc190cmFpdHNfcG9pbnRlciBwX3RyYWl0cykKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgaSA9IGdldF9wcmVmX3BvcyhiX2l0LCBlX2l0LCBwX3RyYWl0cyk7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoaSA8IGFycl9zaXplKTsKKyAgICAgIGlmIChtX2FfcF9jaGlsZHJlbltpXSA9PSBOVUxMKQorCXsKKwkgIG1fYV9wX2NoaWxkcmVuW2ldID0gcF9uZDsKKwkgIHBfbmQtPm1fcF9wYXJlbnQgPSB0aGlzOworCSAgcmV0dXJuIHBfbmQ7CisJfQorICAgICAgcmV0dXJuIG1fYV9wX2NoaWxkcmVuW2ldOworICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X25vZGVfcG9pbnRlcgorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBnZXRfam9pbl9jaGlsZChjb25zdF9ub2RlX3BvaW50ZXIgcF9uZCwgY29uc3RfZV9hY2Nlc3NfdHJhaXRzX3BvaW50ZXIgcF90cmFpdHMpIGNvbnN0CisgICAgeworICAgICAgbm9kZV9wb2ludGVyIHAgPSBjb25zdF9jYXN0PG5vZGVfcG9pbnRlcj4ocF9uZCk7CisgICAgICByZXR1cm4gY29uc3RfY2FzdDxpbnRlcm5hbF9ub2RlX3BvaW50ZXI+KHRoaXMpLT5nZXRfam9pbl9jaGlsZChwLCBwX3RyYWl0cyk7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9wb2ludGVyCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIGdldF9qb2luX2NoaWxkKG5vZGVfcG9pbnRlciBwX25kLCBjb25zdF9lX2FjY2Vzc190cmFpdHNfcG9pbnRlciBwX3RyYWl0cykKKyAgICB7CisgICAgICBzaXplX3R5cGUgaTsKKyAgICAgIGNvbnN0X2VfaXRlcmF0b3IgYl9pdDsKKyAgICAgIGNvbnN0X2VfaXRlcmF0b3IgZV9pdDsKKyAgICAgIGlmIChwX25kLT5tX3R5cGUgPT0gcGF0X3RyaWVfbGVhZl9ub2RlX3R5cGUpCisJeworCSAgdHlwZW5hbWUgVHlwZV9UcmFpdHM6OmNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkgPQorCSAgICBlX2FjY2Vzc190cmFpdHM6OmV4dHJhY3Rfa2V5KHN0YXRpY19jYXN0PGNvbnN0X2xlYWZfcG9pbnRlcj4ocF9uZCktPnZhbHVlKCkpOworCisJICBiX2l0ID0gcF90cmFpdHMtPmJlZ2luKHJfa2V5KTsKKwkgIGVfaXQgPSBwX3RyYWl0cy0+ZW5kKHJfa2V5KTsKKwl9CisgICAgICBlbHNlCisJeworCSAgYl9pdCA9IHN0YXRpY19jYXN0PGludGVybmFsX25vZGVfcG9pbnRlcj4ocF9uZCktPnByZWZfYl9pdCgpOworCSAgZV9pdCA9IHN0YXRpY19jYXN0PGludGVybmFsX25vZGVfcG9pbnRlcj4ocF9uZCktPnByZWZfZV9pdCgpOworCX0KKyAgICAgIGkgPSBnZXRfcHJlZl9wb3MoYl9pdCwgZV9pdCwgcF90cmFpdHMpOworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGkgPCBhcnJfc2l6ZSk7CisgICAgICByZXR1cm4gbV9hX3BfY2hpbGRyZW5baV07CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB2b2lkCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHJlbW92ZV9jaGlsZChub2RlX3BvaW50ZXIgcF9uZCkKKyAgICB7CisgICAgICBzaXplX3R5cGUgaSA9IDA7CisgICAgICBmb3IgKDsgaSA8IGFycl9zaXplOyArK2kpCisJaWYgKG1fYV9wX2NoaWxkcmVuW2ldID09IHBfbmQpCisJICB7CisJICAgIG1fYV9wX2NoaWxkcmVuW2ldID0gTlVMTDsKKwkgICAgcmV0dXJuOworCSAgfQorICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGkgIT0gYXJyX3NpemUpOworICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHJlbW92ZV9jaGlsZChpdGVyYXRvciBpdCkKKyAgICB7CisgICAgICBpdGVyYXRvciByZXQgPSBpdDsKKyAgICAgICsrcmV0OworICAgICAgKiBpdC5tX3BfcF9jdXIgPSBOVUxMOworICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcmVwbGFjZV9jaGlsZChub2RlX3BvaW50ZXIgcF9uZCwgY29uc3RfZV9pdGVyYXRvciBiX2l0LCAKKwkJICBjb25zdF9lX2l0ZXJhdG9yIGVfaXQsIAorCQkgIGNvbnN0X2VfYWNjZXNzX3RyYWl0c19wb2ludGVyIHBfdHJhaXRzKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBpID0gZ2V0X3ByZWZfcG9zKGJfaXQsIGVfaXQsIHBfdHJhaXRzKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChpIDwgYXJyX3NpemUpOworICAgICAgbV9hX3BfY2hpbGRyZW5baV0gPSBwX25kOworICAgICAgcF9uZC0+bV9wX3BhcmVudCA9IHRoaXM7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2VfaXRlcmF0b3IKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcHJlZl9iX2l0KCkgY29uc3QKKyAgICB7IHJldHVybiBtX3ByZWZfYl9pdDsgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2VfaXRlcmF0b3IKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcHJlZl9lX2l0KCkgY29uc3QKKyAgICB7IHJldHVybiBtX3ByZWZfZV9pdDsgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBnZXRfZV9pbmQoKSBjb25zdAorICAgIHsgcmV0dXJuIG1fZV9pbmQ7IH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgYm9vbAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBzaG91bGRfYmVfbWluZShjb25zdF9lX2l0ZXJhdG9yIGJfaXQsIGNvbnN0X2VfaXRlcmF0b3IgZV9pdCwgCisJCSAgIHNpemVfdHlwZSBjaGVja2VkX2luZCwgCisJCSAgIGNvbnN0X2VfYWNjZXNzX3RyYWl0c19wb2ludGVyIHBfdHJhaXRzKSBjb25zdAorICAgIHsKKyAgICAgIGlmIChtX2VfaW5kID09IDApCisJcmV0dXJuIHRydWU7CisKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBudW1fZXMgPSBzdGQ6OmRpc3RhbmNlKGJfaXQsIGVfaXQpOworICAgICAgaWYgKG51bV9lcyA8IG1fZV9pbmQpCisJcmV0dXJuIGZhbHNlOworCisgICAgICBjb25zdF9lX2l0ZXJhdG9yIGtleV9iX2l0ID0gYl9pdDsKKyAgICAgIHN0ZDo6YWR2YW5jZShrZXlfYl9pdCwgY2hlY2tlZF9pbmQpOworICAgICAgY29uc3RfZV9pdGVyYXRvciBrZXlfZV9pdCA9IGJfaXQ7CisgICAgICBzdGQ6OmFkdmFuY2Uoa2V5X2VfaXQsIG1fZV9pbmQpOworCisgICAgICBjb25zdF9lX2l0ZXJhdG9yIHZhbHVlX2JfaXQgPSBtX3ByZWZfYl9pdDsKKyAgICAgIHN0ZDo6YWR2YW5jZSh2YWx1ZV9iX2l0LCBjaGVja2VkX2luZCk7CisgICAgICBjb25zdF9lX2l0ZXJhdG9yIHZhbHVlX2VfaXQgPSBtX3ByZWZfYl9pdDsKKyAgICAgIHN0ZDo6YWR2YW5jZSh2YWx1ZV9lX2l0LCBtX2VfaW5kKTsKKworICAgICAgcmV0dXJuIHBfdHJhaXRzLT5lcXVhbF9wcmVmaXhlcyhrZXlfYl9pdCwga2V5X2VfaXQsIHZhbHVlX2JfaXQsIAorCQkJCSAgICAgIHZhbHVlX2VfaXQpOworICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmxlYWZfcG9pbnRlcgorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBsZWZ0bW9zdF9kZXNjZW5kYW50KCkKKyAgICB7CisgICAgICBub2RlX3BvaW50ZXIgcF9wb3QgPSogYmVnaW4oKTsKKyAgICAgIGlmIChwX3BvdC0+bV90eXBlID09IHBhdF90cmllX2xlYWZfbm9kZV90eXBlKQorCXJldHVybiAoc3RhdGljX2Nhc3Q8bGVhZl9wb2ludGVyPihwX3BvdCkpOworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfcG90LT5tX3R5cGUgPT0gcGF0X3RyaWVfaW50ZXJuYWxfbm9kZV90eXBlKTsKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnRlcm5hbF9ub2RlX3BvaW50ZXI+KHBfcG90KS0+bGVmdG1vc3RfZGVzY2VuZGFudCgpOworICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2xlYWZfcG9pbnRlcgorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBsZWZ0bW9zdF9kZXNjZW5kYW50KCkgY29uc3QKKyAgICB7CisgICAgICByZXR1cm4gY29uc3RfY2FzdDxpbnRlcm5hbF9ub2RlX3BvaW50ZXI+KHRoaXMpLT5sZWZ0bW9zdF9kZXNjZW5kYW50KCk7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bGVhZl9wb2ludGVyCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHJpZ2h0bW9zdF9kZXNjZW5kYW50KCkKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgbnVtX2NoaWxkcmVuID0gc3RkOjpkaXN0YW5jZShiZWdpbigpLCBlbmQoKSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobnVtX2NoaWxkcmVuID49IDIpOworCisgICAgICBpdGVyYXRvciBpdCA9IGJlZ2luKCk7CisgICAgICBzdGQ6OmFkdmFuY2UoaXQsIG51bV9jaGlsZHJlbiAtIDEpOworICAgICAgbm9kZV9wb2ludGVyIHBfcG90ID0qIGl0OworICAgICAgaWYgKHBfcG90LT5tX3R5cGUgPT0gcGF0X3RyaWVfbGVhZl9ub2RlX3R5cGUpCisJcmV0dXJuIHN0YXRpY19jYXN0PGxlYWZfcG9pbnRlcj4ocF9wb3QpOworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfcG90LT5tX3R5cGUgPT0gcGF0X3RyaWVfaW50ZXJuYWxfbm9kZV90eXBlKTsKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnRlcm5hbF9ub2RlX3BvaW50ZXI+KHBfcG90KS0+cmlnaHRtb3N0X2Rlc2NlbmRhbnQoKTsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9sZWFmX3BvaW50ZXIKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcmlnaHRtb3N0X2Rlc2NlbmRhbnQoKSBjb25zdAorICAgIHsKKyAgICAgIHJldHVybiBjb25zdF9jYXN0PGludGVybmFsX25vZGVfcG9pbnRlcj4odGhpcyktPnJpZ2h0bW9zdF9kZXNjZW5kYW50KCk7CisgICAgfQorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgZV9pbmQoKSBjb25zdAorICAgIHsgcmV0dXJuIG1fZV9pbmQ7IH0KKyNlbmRpZiAKKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBnZXRfYmVnaW5fcG9zKCkgY29uc3QKKyAgICB7CisgICAgICBzaXplX3R5cGUgaTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnJfc2l6ZSAmJiBtX2FfcF9jaGlsZHJlbltpXSA9PSBOVUxMOyArK2kpCisJOworICAgICAgcmV0dXJuIGk7CisgICAgfQorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzdWJ0cmVlX2RlYnVnX2luZm8KKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgYXNzZXJ0X3ZhbGlkX2ltcChjb25zdF9lX2FjY2Vzc190cmFpdHNfcG9pbnRlciBwX3RyYWl0cykgY29uc3QKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoYmFzZV90eXBlOjptX3R5cGUgPT0gcGF0X3RyaWVfaW50ZXJuYWxfbm9kZV90eXBlKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KHN0ZDo6ZGlzdGFuY2UocHJlZl9iX2l0KCksIHByZWZfZV9pdCgpKSkgPT0gbV9lX2luZCk7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoc3RkOjpkaXN0YW5jZShiZWdpbigpLCBlbmQoKSkgPj0gMik7CisKKyAgICAgIGZvciAodHlwZW5hbWUgcGF0X3RyaWVfaW50ZXJuYWxfbm9kZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBiZWdpbigpOworCSAgIGl0ICE9IGVuZCgpOyArK2l0KQorCXsKKwkgIGNvbnN0X25vZGVfcG9pbnRlciBwX25kID0qIGl0OworCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQtPm1fcF9wYXJlbnQgPT0gdGhpcyk7CisJICBzdWJ0cmVlX2RlYnVnX2luZm8gY2hpbGRfcmV0ID0gcF9uZC0+YXNzZXJ0X3ZhbGlkX2ltcChwX3RyYWl0cyk7CisKKwkgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KHN0ZDo6ZGlzdGFuY2UoY2hpbGRfcmV0LmZpcnN0LCBjaGlsZF9yZXQuc2Vjb25kKSkgPj0gbV9lX2luZCk7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoc2hvdWxkX2JlX21pbmUoY2hpbGRfcmV0LmZpcnN0LCBjaGlsZF9yZXQuc2Vjb25kLCAwLCBwX3RyYWl0cykpOworCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGdldF9wcmVmX3BvcyhjaGlsZF9yZXQuZmlyc3QsIGNoaWxkX3JldC5zZWNvbmQsIHBfdHJhaXRzKSA9PSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KGl0Lm1fcF9wX2N1ciAtIG1fYV9wX2NoaWxkcmVuKSk7CisJfQorICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHByZWZfYl9pdCgpLCBwcmVmX2VfaXQoKSk7CisgICAgfQorI2VuZGlmIAorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworI3VuZGVmIFBCX0RTX0JBU0VfQ19ERUMKKyN1bmRlZiBQQl9EU19MRUFGX0NfREVDCisKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9pdGVyYXRvcnNfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL2l0ZXJhdG9yc19mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTAyZDk2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9pdGVyYXRvcnNfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxMjAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGl0ZXJhdG9yc19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGJpbl9zZWFyY2hfdHJlZV8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6aXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2JlZ2luKCkKK3sgcmV0dXJuIGl0ZXJhdG9yKG1fcF9oZWFkLT5tX3BfbWluKTsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYmVnaW4oKSBjb25zdAoreyByZXR1cm4gY29uc3RfaXRlcmF0b3IobV9wX2hlYWQtPm1fcF9taW4pOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitlbmQoKQoreyByZXR1cm4gaXRlcmF0b3IobV9wX2hlYWQpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitlbmQoKSBjb25zdAoreyByZXR1cm4gY29uc3RfaXRlcmF0b3IobV9wX2hlYWQpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JiZWdpbigpIGNvbnN0Cit7CisgIGlmIChlbXB0eSgpKQorICAgIHJldHVybiByZW5kKCk7CisgIHJldHVybiAtLWVuZCgpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpyZXZlcnNlX2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CityYmVnaW4oKQoreworICBpZiAoZW1wdHkoKSkKKyAgICByZXR1cm4gcmVuZCgpOworICByZXR1cm4gLS1lbmQoKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6cmV2ZXJzZV9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVuZCgpCit7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKG1fcF9oZWFkKTsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CityZW5kKCkgY29uc3QKK3sgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IobV9wX2hlYWQpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X25vZGVfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vZGVfYmVnaW4oKSBjb25zdAoreyByZXR1cm4gY29uc3Rfbm9kZV9pdGVyYXRvcihtX3BfaGVhZC0+bV9wX3BhcmVudCwgdGhpcyk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm9kZV9iZWdpbigpCit7IHJldHVybiBub2RlX2l0ZXJhdG9yKG1fcF9oZWFkLT5tX3BfcGFyZW50LCB0aGlzKTsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9ub2RlX2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6Citub2RlX2VuZCgpIGNvbnN0Cit7IHJldHVybiBjb25zdF9ub2RlX2l0ZXJhdG9yKE5VTEwsIHRoaXMpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vZGVfZW5kKCkKK3sgcmV0dXJuIG5vZGVfaXRlcmF0b3IoTlVMTCwgdGhpcyk7IH0KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9sZWFmLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vbGVhZi5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFjZjE0ZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vbGVhZi5ocHAKQEAgLTAsMCArMSwxNzEgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGxlYWYuaHBwCisgKiBDb250YWlucyBhIHBhdF90cmllX2xlYWYgZm9yIGEgcGF0cmljaWEgdHJlZS4KKyAqLworCisjaWZuZGVmIFBCX0RTX1BBVF9UUklFX0xFQUZfSFBQCisjZGVmaW5lIFBCX0RTX1BBVF9UUklFX0xFQUZfSFBQCisKKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQwkJCQkJCVwKKyAgICB0ZW1wbGF0ZTwJCQkJCQkJCVwKKwkJCQkJCWNsYXNzIFR5cGVfVHJhaXRzLAlcCisJCQkJCQljbGFzcyBFX0FjY2Vzc19UcmFpdHMsCVwKKwkJCQkJCWNsYXNzIE1ldGFkYXRhLAkJXAorCQkJCQkJY2xhc3MgQWxsb2NhdG9yPgorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDCQkJCQkJXAorICAgIHBhdF90cmllX2xlYWY8CQkJCQkJCVwKKwkJCQkJCVR5cGVfVHJhaXRzLAkJXAorCQkJCQkJRV9BY2Nlc3NfVHJhaXRzLAlcCisJCQkJCQlNZXRhZGF0YSwJCVwKKwkJCQkJCUFsbG9jYXRvcj4KKworI2RlZmluZSBQQl9EU19CQVNFX0NfREVDCQkJCQlcCisgICAgcGF0X3RyaWVfbm9kZV9iYXNlPAkJCQkJCVwKKwkJCQkJVHlwZV9UcmFpdHMsCQlcCisJCQkJCUVfQWNjZXNzX1RyYWl0cywJXAorCQkJCQlNZXRhZGF0YSwJCVwKKwkJCQkJQWxsb2NhdG9yPgorCisjZGVmaW5lIFBCX0RTX1BBVF9UUklFX1NVQlRSRUVfREVCVUdfSU5GT19DX0RFQwkJCQlcCisgICAgcGF0X3RyaWVfc3VidHJlZV9kZWJ1Z19pbmZvPAkJCQkJXAorCQkJCQkJCVR5cGVfVHJhaXRzLAlcCisJCQkJCQkJRV9BY2Nlc3NfVHJhaXRzLCBcCisJCQkJCQkJQWxsb2NhdG9yPgorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZV9UcmFpdHMsCisJICAgICBjbGFzcyBFX0FjY2Vzc19UcmFpdHMsCisJICAgICBjbGFzcyBNZXRhZGF0YSwKKwkgICAgIGNsYXNzIEFsbG9jYXRvcj4KKyAgICBzdHJ1Y3QgcGF0X3RyaWVfbGVhZiA6IHB1YmxpYyBQQl9EU19CQVNFX0NfREVDCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIFR5cGVfVHJhaXRzOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgVHlwZV9UcmFpdHM6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgVHlwZV9UcmFpdHM6OnJlZmVyZW5jZSByZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCUVfQWNjZXNzX1RyYWl0cz46Om90aGVyOjpjb25zdF9wb2ludGVyCisgICAgICBjb25zdF9lX2FjY2Vzc190cmFpdHNfcG9pbnRlcjsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBQQl9EU19CQVNFX0NfREVDOjpzdWJ0cmVlX2RlYnVnX2luZm8KKyAgICAgIHN1YnRyZWVfZGVidWdfaW5mbzsKKyNlbmRpZiAKKworICAgICAgdHlwZWRlZiBQQl9EU19CQVNFX0NfREVDIGJhc2VfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHBhdF90cmllX2xlYWYoY29uc3RfcmVmZXJlbmNlIHJfdmFsKTsKKworICAgICAgaW5saW5lIHJlZmVyZW5jZQorICAgICAgdmFsdWUoKTsKKworICAgICAgaW5saW5lIGNvbnN0X3JlZmVyZW5jZQorICAgICAgdmFsdWUoKSBjb25zdDsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICB2aXJ0dWFsIHN1YnRyZWVfZGVidWdfaW5mbworICAgICAgYXNzZXJ0X3ZhbGlkX2ltcChjb25zdF9lX2FjY2Vzc190cmFpdHNfcG9pbnRlciBwX3RyYWl0cykgY29uc3Q7CisKKyAgICAgIHZpcnR1YWwKKyAgICAgIH5wYXRfdHJpZV9sZWFmKCk7CisjZW5kaWYgCisKKyAgICBwcml2YXRlOgorICAgICAgcGF0X3RyaWVfbGVhZihjb25zdCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpOworCisgICAgICB2YWx1ZV90eXBlIG1fdmFsdWU7CisgICAgfTsKKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHBhdF90cmllX2xlYWYoY29uc3RfcmVmZXJlbmNlIHJfdmFsKSA6CisgICAgUEJfRFNfQkFTRV9DX0RFQyhwYXRfdHJpZV9sZWFmX25vZGVfdHlwZSksIG1fdmFsdWUocl92YWwpCisgICAgeyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIGlubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6cmVmZXJlbmNlCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHZhbHVlKCkKKyAgICB7IHJldHVybiBtX3ZhbHVlOyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIGlubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfcmVmZXJlbmNlCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHZhbHVlKCkgY29uc3QKKyAgICB7IHJldHVybiBtX3ZhbHVlOyB9CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnN1YnRyZWVfZGVidWdfaW5mbworICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBhc3NlcnRfdmFsaWRfaW1wKGNvbnN0X2VfYWNjZXNzX3RyYWl0c19wb2ludGVyIHBfdHJhaXRzKSBjb25zdAorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChiYXNlX3R5cGU6Om1fdHlwZSA9PSBwYXRfdHJpZV9sZWFmX25vZGVfdHlwZSk7CisgICAgICBzdWJ0cmVlX2RlYnVnX2luZm8gcmV0OworICAgICAgY29uc3RfcmVmZXJlbmNlIHJfdmFsID0gdmFsdWUoKTsKKyAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihwX3RyYWl0cy0+YmVnaW4ocF90cmFpdHMtPmV4dHJhY3Rfa2V5KHJfdmFsKSksCisJCQkgICAgIHBfdHJhaXRzLT5lbmQocF90cmFpdHMtPmV4dHJhY3Rfa2V5KHJfdmFsKSkpOworICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIH5wYXRfdHJpZV9sZWFmKCkgeyB9CisjZW5kaWYgCisKKyN1bmRlZiBQQl9EU19DTEFTU19UX0RFQworI3VuZGVmIFBCX0RTX0NMQVNTX0NfREVDCisjdW5kZWYgUEJfRFNfQkFTRV9DX0RFQworI3VuZGVmIFBCX0RTX1BBVF9UUklFX1NVQlRSRUVfREVCVUdfSU5GT19DX0RFQworCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL25vZGVfYmFzZS5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL25vZGVfYmFzZS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIxMzA2OAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vbm9kZV9iYXNlLmhwcApAQCAtMCwwICsxLDEyOCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgbm9kZV9iYXNlLmhwcAorICogQ29udGFpbnMgYSBwYXRfdHJpZV9ub2RlX2Jhc2UgYmFzZSBmb3IgYSBwYXRyaWNpYSB0cmVlLgorICovCisKKyNpZm5kZWYgUEJfRFNfUEFUX1RSSUVfTk9ERV9CQVNFX0hQUAorI2RlZmluZSBQQl9EU19QQVRfVFJJRV9OT0RFX0JBU0VfSFBQCisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9ub2RlX21ldGFkYXRhX2Jhc2UuaHBwPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGVfVHJhaXRzLCB0eXBlbmFtZSBFX0FjY2Vzc19UcmFpdHMsCVwKKwkgICAgIHR5cGVuYW1lIE1ldGFkYXRhLAl0eXBlbmFtZSBBbGxvY2F0b3I+CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfQ19ERUMgXAorICAgIHBhdF90cmllX25vZGVfYmFzZTxUeXBlX1RyYWl0cywgRV9BY2Nlc3NfVHJhaXRzLCBNZXRhZGF0YSwgQWxsb2NhdG9yPgorCisjZGVmaW5lIFBCX0RTX1BBVF9UUklFX1NVQlRSRUVfREVCVUdfSU5GT19DX0RFQwlcCisgICAgcGF0X3RyaWVfc3VidHJlZV9kZWJ1Z19pbmZvPFR5cGVfVHJhaXRzLCBFX0FjY2Vzc19UcmFpdHMsIEFsbG9jYXRvcj4KKworICAgIGVudW0gcGF0X3RyaWVfbm9kZV90eXBlCisgICAgICB7CisJcGF0X3RyaWVfaW50ZXJuYWxfbm9kZV90eXBlLAorCXBhdF90cmllX2xlYWZfbm9kZV90eXBlLAorCXBhdF90cmllX2hlYWRfbm9kZV90eXBlCisgICAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZV9UcmFpdHMsCisJICAgICB0eXBlbmFtZSBFX0FjY2Vzc19UcmFpdHMsCisJICAgICB0eXBlbmFtZSBNZXRhZGF0YSwKKwkgICAgIHR5cGVuYW1lIEFsbG9jYXRvcj4KKyAgICBzdHJ1Y3QgcGF0X3RyaWVfbm9kZV9iYXNlIDogcHVibGljIHBhdF90cmllX25vZGVfbWV0YWRhdGFfYmFzZTwKKyAgICAgIE1ldGFkYXRhLAorICAgICAgQWxsb2NhdG9yPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKyAgICAgIHBhdF90cmllX25vZGVfYmFzZT46Om90aGVyOjpwb2ludGVyCisgICAgICBub2RlX3BvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCUVfQWNjZXNzX1RyYWl0cz46Om90aGVyOjpjb25zdF9wb2ludGVyCisgICAgICBjb25zdF9lX2FjY2Vzc190cmFpdHNfcG9pbnRlcjsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICB0eXBlZGVmCisgICAgICBzdGQ6OnBhaXI8CisJdHlwZW5hbWUgRV9BY2Nlc3NfVHJhaXRzOjpjb25zdF9pdGVyYXRvciwKKwl0eXBlbmFtZSBFX0FjY2Vzc19UcmFpdHM6OmNvbnN0X2l0ZXJhdG9yPgorICAgICAgc3VidHJlZV9kZWJ1Z19pbmZvOworI2VuZGlmIAorCisgICAgICBwYXRfdHJpZV9ub2RlX2Jhc2UocGF0X3RyaWVfbm9kZV90eXBlIHR5cGUpOworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF92YWxpZChjb25zdF9lX2FjY2Vzc190cmFpdHNfcG9pbnRlciBwX3RyYWl0cykgY29uc3Q7CisKKyAgICAgIHZpcnR1YWwgc3VidHJlZV9kZWJ1Z19pbmZvCisgICAgICBhc3NlcnRfdmFsaWRfaW1wKGNvbnN0X2VfYWNjZXNzX3RyYWl0c19wb2ludGVyIHBfdHJhaXRzKSBjb25zdCA9IDA7CisjZW5kaWYgCisKKyAgICAgIG5vZGVfcG9pbnRlciBtX3BfcGFyZW50OworICAgICAgY29uc3QgcGF0X3RyaWVfbm9kZV90eXBlIG1fdHlwZTsKKyAgICB9OworCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcGF0X3RyaWVfbm9kZV9iYXNlKHBhdF90cmllX25vZGVfdHlwZSB0eXBlKSA6IG1fdHlwZSh0eXBlKQorICAgIHsgfQorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgYXNzZXJ0X3ZhbGlkKGNvbnN0X2VfYWNjZXNzX3RyYWl0c19wb2ludGVyIHBfdHJhaXRzKSBjb25zdAorICAgIHsgYXNzZXJ0X3ZhbGlkX2ltcChwX3RyYWl0cyk7IH0KKyNlbmRpZiAKKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKyN1bmRlZiBQQl9EU19QQVRfVFJJRV9TVUJUUkVFX0RFQlVHX0lORk9fQ19ERUMKKworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9ub2RlX2l0ZXJhdG9ycy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL25vZGVfaXRlcmF0b3JzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzI1MDA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9ub2RlX2l0ZXJhdG9ycy5ocHAKQEAgLTAsMCArMSwzMzggQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIG5vZGVfaXRlcmF0b3JzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIHBhdF90cmllXy4KKyAqLworCisjaWZuZGVmIFBCX0RTX1BBVF9UUklFX05PREVfSVRFUkFUT1JTX0hQUAorI2RlZmluZSBQQl9EU19QQVRfVFJJRV9OT0RFX0lURVJBVE9SU19IUFAKKworI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworCisjZGVmaW5lIFBCX0RTX1BBVF9UUklFX0NPTlNUX05PREVfSVRFUkFUT1JfQ19ERUMJCQlcCisgICAgcGF0X3RyaWVfY29uc3Rfbm9kZV9pdF88CQkJCQkJXAorCQkJCQkJCU5vZGUsCQlcCisJCQkJCQkJTGVhZiwJCVwKKwkJCQkJCQlIZWFkLAkJXAorCQkJCQkJCUludGVybmFsX05vZGUsCVwKKwkJCQkJCQlDb25zdF9JdGVyYXRvciwJXAorCQkJCQkJCUl0ZXJhdG9yLAlcCisJCQkJCQkJRV9BY2Nlc3NfVHJhaXRzLCBcCisJCQkJCQkJQWxsb2NhdG9yPgorCisjZGVmaW5lIFBCX0RTX1BBVF9UUklFX05PREVfSVRFUkFUT1JfQ19ERUMJCQlcCisgICAgcGF0X3RyaWVfbm9kZV9pdF88CQkJCQkJXAorCQkJCQlOb2RlLAkJCVwKKwkJCQkJTGVhZiwJCQlcCisJCQkJCUhlYWQsCQkJXAorCQkJCQlJbnRlcm5hbF9Ob2RlLAkJXAorCQkJCQlDb25zdF9JdGVyYXRvciwJCVwKKwkJCQkJSXRlcmF0b3IsCQlcCisJCQkJCUVfQWNjZXNzX1RyYWl0cywJXAorCQkJCQlBbGxvY2F0b3I+CisKKyAgICAvLyBDb25zdCBub2RlIGl0ZXJhdG9yLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGUsCisJICAgICBjbGFzcyBMZWFmLAorCSAgICAgY2xhc3MgSGVhZCwKKwkgICAgIGNsYXNzIEludGVybmFsX05vZGUsCisJICAgICBjbGFzcyBDb25zdF9JdGVyYXRvciwKKwkgICAgIGNsYXNzIEl0ZXJhdG9yLAorCSAgICAgY2xhc3MgRV9BY2Nlc3NfVHJhaXRzLAorCSAgICAgY2xhc3MgQWxsb2NhdG9yPgorICAgIGNsYXNzIHBhdF90cmllX2NvbnN0X25vZGVfaXRfCisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorICAgICAgTm9kZT46Om90aGVyOjpwb2ludGVyCisgICAgICBub2RlX3BvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCUxlYWY+OjpvdGhlcjo6Y29uc3RfcG9pbnRlcgorICAgICAgY29uc3RfbGVhZl9wb2ludGVyOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKwlMZWFmPjo6b3RoZXI6OnBvaW50ZXIKKyAgICAgIGxlYWZfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8CisJSW50ZXJuYWxfTm9kZT46Om90aGVyOjpwb2ludGVyCisgICAgICBpbnRlcm5hbF9ub2RlX3BvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCUludGVybmFsX05vZGU+OjpvdGhlcjo6Y29uc3RfcG9pbnRlcgorICAgICAgY29uc3RfaW50ZXJuYWxfbm9kZV9wb2ludGVyOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKwlFX0FjY2Vzc19UcmFpdHM+OjpvdGhlcjo6Y29uc3RfcG9pbnRlcgorICAgICAgY29uc3RfZV9hY2Nlc3NfdHJhaXRzX3BvaW50ZXI7CisKKyAgICBwcml2YXRlOgorICAgICAgaW5saW5lIHR5cGVuYW1lIEVfQWNjZXNzX1RyYWl0czo6Y29uc3RfaXRlcmF0b3IKKyAgICAgIHByZWZfYmVnaW4oKSBjb25zdAorICAgICAgeworCWlmIChtX3BfbmQtPm1fdHlwZSA9PSBwYXRfdHJpZV9sZWFmX25vZGVfdHlwZSkKKwkgIHJldHVybiAobV9wX3RyYWl0cy0+YmVnaW4oCisJCQkJICAgIG1fcF90cmFpdHMtPmV4dHJhY3Rfa2V5KAorCQkJCQkJCSAgICBzdGF0aWNfY2FzdDxjb25zdF9sZWFmX3BvaW50ZXI+KG1fcF9uZCktPnZhbHVlKCkpKSk7CisKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9wX25kLT5tX3R5cGUgPT0gcGF0X3RyaWVfaW50ZXJuYWxfbm9kZV90eXBlKTsKKworCXJldHVybiAoc3RhdGljX2Nhc3Q8Y29uc3RfaW50ZXJuYWxfbm9kZV9wb2ludGVyPihtX3BfbmQpLT5wcmVmX2JfaXQoKSk7CisgICAgICB9CisKKyAgICAgIGlubGluZSB0eXBlbmFtZSBFX0FjY2Vzc19UcmFpdHM6OmNvbnN0X2l0ZXJhdG9yCisgICAgICBwcmVmX2VuZCgpIGNvbnN0CisgICAgICB7CisJaWYgKG1fcF9uZC0+bV90eXBlID09IHBhdF90cmllX2xlYWZfbm9kZV90eXBlKQorCSAgcmV0dXJuIChtX3BfdHJhaXRzLT5lbmQoCisJCQkJICBtX3BfdHJhaXRzLT5leHRyYWN0X2tleSgKKwkJCQkJCQkgIHN0YXRpY19jYXN0PGNvbnN0X2xlYWZfcG9pbnRlcj4obV9wX25kKS0+dmFsdWUoKSkpKTsKKworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3BfbmQtPm1fdHlwZSA9PSBwYXRfdHJpZV9pbnRlcm5hbF9ub2RlX3R5cGUpOworCisJcmV0dXJuIChzdGF0aWNfY2FzdDxjb25zdF9pbnRlcm5hbF9ub2RlX3BvaW50ZXI+KG1fcF9uZCktPnByZWZfZV9pdCgpKTsKKyAgICAgIH0KKworICAgIHB1YmxpYzoKKworICAgICAgLy8gU2l6ZSB0eXBlLgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnNpemVfdHlwZSBzaXplX3R5cGU7CisKKyAgICAgIC8vIENhdGVnb3J5LgorICAgICAgdHlwZWRlZiB0cml2aWFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKKworICAgICAgLy8gRGlmZmVyZW5jZSB0eXBlLgorICAgICAgdHlwZWRlZiB0cml2aWFsX2l0ZXJhdG9yX2RpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisKKyAgICAgIC8vIF9fSXRlcmF0b3IncyB2YWx1ZSB0eXBlLgorICAgICAgdHlwZWRlZiBDb25zdF9JdGVyYXRvciB2YWx1ZV90eXBlOworCisgICAgICAvLyBfX0l0ZXJhdG9yJ3MgcmVmZXJlbmNlIHR5cGUuCisgICAgICB0eXBlZGVmIHZhbHVlX3R5cGUgcmVmZXJlbmNlOworCisgICAgICAvLyBfX0l0ZXJhdG9yJ3MgX19jb25zdCByZWZlcmVuY2UgdHlwZS4KKyAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIC8vIEVsZW1lbnQgYWNjZXNzIHRyYWl0cy4KKyAgICAgIHR5cGVkZWYgRV9BY2Nlc3NfVHJhaXRzIGVfYWNjZXNzX3RyYWl0czsKKworICAgICAgLy8gQSBrZXkncyBlbGVtZW50IF9fY29uc3QgaXRlcmF0b3IuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGVfYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IgY29uc3RfZV9pdGVyYXRvcjsKKworICAgICAgLy8gTWV0YWRhdGEgdHlwZS4KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgTm9kZTo6bWV0YWRhdGFfdHlwZSBtZXRhZGF0YV90eXBlOworCisgICAgICAvLyBDb25zdCBtZXRhZGF0YSByZWZlcmVuY2UgdHlwZS4KKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCW1ldGFkYXRhX3R5cGU+OjpvdGhlcjo6Y29uc3RfcmVmZXJlbmNlCisgICAgICBjb25zdF9tZXRhZGF0YV9yZWZlcmVuY2U7CisKKyAgICAgIC8vIERlZmF1bHQgY29uc3RydWN0b3IuCisgICAgICAvKgorCWlubGluZQorCXBhdF90cmllX2NvbnN0X25vZGVfaXRfKCkKKyAgICAgICovCisgICAgICBpbmxpbmUKKyAgICAgIHBhdF90cmllX2NvbnN0X25vZGVfaXRfKG5vZGVfcG9pbnRlciBwX25kID0gTlVMTCwgIAorCQkJICAgICAgY29uc3RfZV9hY2Nlc3NfdHJhaXRzX3BvaW50ZXIgcF90cmFpdHMgPSBOVUxMKSAKKyAgICAgIDogbV9wX25kKGNvbnN0X2Nhc3Q8bm9kZV9wb2ludGVyPihwX25kKSksIG1fcF90cmFpdHMocF90cmFpdHMpCisgICAgICB7IH0KKworICAgICAgLy8gU3VidHJlZSB2YWxpZCBwcmVmaXguCisgICAgICBpbmxpbmUgc3RkOjpwYWlyPGNvbnN0X2VfaXRlcmF0b3IsIGNvbnN0X2VfaXRlcmF0b3I+CisgICAgICB2YWxpZF9wcmVmaXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjptYWtlX3BhaXIocHJlZl9iZWdpbigpLCBwcmVmX2VuZCgpKTsgfQorCisgICAgICAvLyBDb25zdCBhY2Nlc3M7IHJldHVybnMgdGhlIF9fY29uc3QgaXRlcmF0b3IqIGFzc29jaWF0ZWQgd2l0aAorICAgICAgLy8gdGhlIGN1cnJlbnQgbGVhZi4KKyAgICAgIGlubGluZSBjb25zdF9yZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKG51bV9jaGlsZHJlbigpID09IDApOworCXJldHVybiBDb25zdF9JdGVyYXRvcihtX3BfbmQpOworICAgICAgfQorCisgICAgICAvLyBNZXRhZGF0YSBhY2Nlc3MuCisgICAgICBpbmxpbmUgY29uc3RfbWV0YWRhdGFfcmVmZXJlbmNlCisgICAgICBnZXRfbWV0YWRhdGEoKSBjb25zdAorICAgICAgeyByZXR1cm4gbV9wX25kLT5nZXRfbWV0YWRhdGEoKTsgfQorCisgICAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gaW4gdGhlIGNvcnJlc3BvbmRpbmcgbm9kZS4KKyAgICAgIGlubGluZSBzaXplX3R5cGUKKyAgICAgIG51bV9jaGlsZHJlbigpIGNvbnN0CisgICAgICB7CisJaWYgKG1fcF9uZC0+bV90eXBlID09IHBhdF90cmllX2xlYWZfbm9kZV90eXBlKQorCSAgcmV0dXJuIDA7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF9uZC0+bV90eXBlID09IHBhdF90cmllX2ludGVybmFsX25vZGVfdHlwZSk7CisJcmV0dXJuIHN0ZDo6ZGlzdGFuY2Uoc3RhdGljX2Nhc3Q8aW50ZXJuYWxfbm9kZV9wb2ludGVyPihtX3BfbmQpLT5iZWdpbigpLCAgc3RhdGljX2Nhc3Q8aW50ZXJuYWxfbm9kZV9wb2ludGVyPihtX3BfbmQpLT5lbmQoKSk7CisgICAgICB9CisKKyAgICAgIC8vIFJldHVybnMgYSBfX2NvbnN0IG5vZGUgX19pdGVyYXRvciB0byB0aGUgY29ycmVzcG9uZGluZyBub2RlJ3MKKyAgICAgIC8vIGktdGggY2hpbGQuCisgICAgICBQQl9EU19QQVRfVFJJRV9DT05TVF9OT0RFX0lURVJBVE9SX0NfREVDCisgICAgICBnZXRfY2hpbGQoc2l6ZV90eXBlIGkpIGNvbnN0CisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF9uZC0+bV90eXBlID09IHBhdF90cmllX2ludGVybmFsX25vZGVfdHlwZSk7CisJdHlwZW5hbWUgSW50ZXJuYWxfTm9kZTo6aXRlcmF0b3IgaXQgPQorCSAgc3RhdGljX2Nhc3Q8aW50ZXJuYWxfbm9kZV9wb2ludGVyPihtX3BfbmQpLT5iZWdpbigpOworCisJc3RkOjphZHZhbmNlKGl0LCBpKTsKKwlyZXR1cm4gUEJfRFNfUEFUX1RSSUVfQ09OU1RfTk9ERV9JVEVSQVRPUl9DX0RFQygqaXQsIG1fcF90cmFpdHMpOworICAgICAgfQorCisgICAgICAvLyBDb21wYXJlcyBjb250ZW50IHRvIGEgZGlmZmVyZW50IGl0ZXJhdG9yIG9iamVjdC4KKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IFBCX0RTX1BBVF9UUklFX0NPTlNUX05PREVfSVRFUkFUT1JfQ19ERUMmIG90aGVyKSBjb25zdAorICAgICAgeyByZXR1cm4gKG1fcF9uZCA9PSBvdGhlci5tX3BfbmQpOyB9CisKKyAgICAgIC8vIENvbXBhcmVzIGNvbnRlbnQgKG5lZ2F0aXZlbHkpIHRvIGEgZGlmZmVyZW50IGl0ZXJhdG9yIG9iamVjdC4KKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvciE9KGNvbnN0IFBCX0RTX1BBVF9UUklFX0NPTlNUX05PREVfSVRFUkFUT1JfQ19ERUMmIG90aGVyKSBjb25zdAorICAgICAgeyByZXR1cm4gbV9wX25kICE9IG90aGVyLm1fcF9uZDsgfQorCisgICAgcHJpdmF0ZToKKworICAgICAgZnJpZW5kIGNsYXNzIFBCX0RTX0NMQVNTX0NfREVDOworCisgICAgcHVibGljOgorICAgICAgbm9kZV9wb2ludGVyIG1fcF9uZDsKKworICAgICAgY29uc3RfZV9hY2Nlc3NfdHJhaXRzX3BvaW50ZXIgbV9wX3RyYWl0czsKKyAgICB9OworCisgICAgLy8gTm9kZSBpdGVyYXRvci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlLAorCSAgICAgY2xhc3MgTGVhZiwKKwkgICAgIGNsYXNzIEhlYWQsCisJICAgICBjbGFzcyBJbnRlcm5hbF9Ob2RlLAorCSAgICAgY2xhc3MgQ29uc3RfSXRlcmF0b3IsCisJICAgICBjbGFzcyBJdGVyYXRvciwKKwkgICAgIGNsYXNzIEVfQWNjZXNzX1RyYWl0cywKKwkgICAgIGNsYXNzIEFsbG9jYXRvcj4KKyAgICBjbGFzcyBwYXRfdHJpZV9ub2RlX2l0XyA6IAorICAgICAgcHVibGljIFBCX0RTX1BBVF9UUklFX0NPTlNUX05PREVfSVRFUkFUT1JfQ19ERUMKKworICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8CisgICAgICBOb2RlPjo6b3RoZXI6OnBvaW50ZXIKKyAgICAgIG5vZGVfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZiBJdGVyYXRvciBpdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiBQQl9EU19QQVRfVFJJRV9DT05TVF9OT0RFX0lURVJBVE9SX0NfREVDIGJhc2VfdHlwZTsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9lX2FjY2Vzc190cmFpdHNfcG9pbnRlcgorICAgICAgY29uc3RfZV9hY2Nlc3NfdHJhaXRzX3BvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjppbnRlcm5hbF9ub2RlX3BvaW50ZXIgaW50ZXJuYWxfbm9kZV9wb2ludGVyOworCisgICAgcHVibGljOgorCisgICAgICAvLyBTaXplIHR5cGUuCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBQQl9EU19QQVRfVFJJRV9DT05TVF9OT0RFX0lURVJBVE9SX0NfREVDOjpzaXplX3R5cGUKKyAgICAgIHNpemVfdHlwZTsKKworICAgICAgLy8gX19JdGVyYXRvcidzIHZhbHVlIHR5cGUuCisgICAgICB0eXBlZGVmIEl0ZXJhdG9yIHZhbHVlX3R5cGU7CisKKyAgICAgIC8vIF9fSXRlcmF0b3IncyByZWZlcmVuY2UgdHlwZS4KKyAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSByZWZlcmVuY2U7CisKKyAgICAgIC8vIF9fSXRlcmF0b3IncyBfX2NvbnN0IHJlZmVyZW5jZSB0eXBlLgorICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlIGNvbnN0X3JlZmVyZW5jZTsKKworICAgICAgLy8gRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgICAgIC8qCisJaW5saW5lCisJcGF0X3RyaWVfbm9kZV9pdF8oKSA7CisgICAgICAqLworCisgICAgICBpbmxpbmUKKyAgICAgIHBhdF90cmllX25vZGVfaXRfKG5vZGVfcG9pbnRlciBwX25kID0gTlVMTCwgIGNvbnN0X2VfYWNjZXNzX3RyYWl0c19wb2ludGVyIHBfdHJhaXRzID0gTlVMTCkgOiBiYXNlX3R5cGUocF9uZCwgcF90cmFpdHMpCisgICAgICB7IH0KKworICAgICAgLy8gQWNjZXNzOyByZXR1cm5zIHRoZSBpdGVyYXRvciogIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCBsZWFmLgorICAgICAgaW5saW5lIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoYmFzZV90eXBlOjpudW1fY2hpbGRyZW4oKSA9PSAwKTsKKwlyZXR1cm4gSXRlcmF0b3IoYmFzZV90eXBlOjptX3BfbmQpOworCisgICAgICB9CisKKyAgICAgIC8vIFJldHVybnMgYSBub2RlIF9faXRlcmF0b3IgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbm9kZSdzIGktdGggY2hpbGQuCisgICAgICBQQl9EU19QQVRfVFJJRV9OT0RFX0lURVJBVE9SX0NfREVDCisgICAgICBnZXRfY2hpbGQoc2l6ZV90eXBlIGkpIGNvbnN0CisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKGJhc2VfdHlwZTo6bV9wX25kLT5tX3R5cGUgPT0gcGF0X3RyaWVfaW50ZXJuYWxfbm9kZV90eXBlKTsKKworCXR5cGVuYW1lIEludGVybmFsX05vZGU6Oml0ZXJhdG9yIGl0ID0KKwkgIHN0YXRpY19jYXN0PGludGVybmFsX25vZGVfcG9pbnRlcj4oYmFzZV90eXBlOjptX3BfbmQpLT5iZWdpbigpOworCisJc3RkOjphZHZhbmNlKGl0LCBpKTsKKwlyZXR1cm4gUEJfRFNfUEFUX1RSSUVfTk9ERV9JVEVSQVRPUl9DX0RFQygqaXQsIGJhc2VfdHlwZTo6bV9wX3RyYWl0cyk7CisgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgZnJpZW5kIGNsYXNzIFBCX0RTX0NMQVNTX0NfREVDOworICAgIH07CisKKyN1bmRlZiBQQl9EU19QQVRfVFJJRV9DT05TVF9OT0RFX0lURVJBVE9SX0NfREVDCisjdW5kZWYgUEJfRFNfUEFUX1RSSUVfTk9ERV9JVEVSQVRPUl9DX0RFQworCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vbm9kZV9tZXRhZGF0YV9iYXNlLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vbm9kZV9tZXRhZGF0YV9iYXNlLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjI3MmVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9ub2RlX21ldGFkYXRhX2Jhc2UuaHBwCkBAIC0wLDAgKzEsODYgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIG5vZGVfbWV0YWRhdGFfYmFzZS5ocHAKKyAqIENvbnRhaW5zIGFuIGludGVybmFsIFBCX0RTX0JBU0VfQ19ERUMgZm9yIGEgcGF0cmljaWEgdHJlZS4KKyAqLworCisjaWZuZGVmIFBCX0RTX1BBVF9UUklFX05PREVfTUVUQURBVEFfQkFTRV9IUFAKKyNkZWZpbmUgUEJfRFNfUEFUX1RSSUVfTk9ERV9NRVRBREFUQV9CQVNFX0hQUAorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iYXNpY190cmVlX3BvbGljeS9udWxsX25vZGVfbWV0YWRhdGEuaHBwPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhLCBjbGFzcyBBbGxvY2F0b3I+CisgICAgc3RydWN0IHBhdF90cmllX25vZGVfbWV0YWRhdGFfYmFzZQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIE1ldGFkYXRhIG1ldGFkYXRhX3R5cGU7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCW1ldGFkYXRhX3R5cGU+OjpvdGhlcjo6Y29uc3RfcmVmZXJlbmNlCisgICAgICBjb25zdF9tZXRhZGF0YV9yZWZlcmVuY2U7CisKKyAgICBwdWJsaWM6CisgICAgICBpbmxpbmUgY29uc3RfbWV0YWRhdGFfcmVmZXJlbmNlCisgICAgICBnZXRfbWV0YWRhdGEoKSBjb25zdAorICAgICAgeworCXJldHVybiAobV9tZXRhZGF0YSk7CisgICAgICB9CisKKyAgICBwdWJsaWM6CisgICAgICBtZXRhZGF0YV90eXBlIG1fbWV0YWRhdGE7CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEFsbG9jYXRvcj4KKyAgICBzdHJ1Y3QgcGF0X3RyaWVfbm9kZV9tZXRhZGF0YV9iYXNlPAorICAgICAgbnVsbF9ub2RlX21ldGFkYXRhLAorICAgICAgQWxsb2NhdG9yPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIG51bGxfbm9kZV9tZXRhZGF0YSBtZXRhZGF0YV90eXBlOworICAgIH07CisKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAvLyAjaWZuZGVmIFBCX0RTX1BBVF9UUklFX05PREVfQkFTRV9IUFAKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9wYXRfdHJpZV8uaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9wYXRfdHJpZV8uaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyN2Y4YjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3BhdF90cmllXy5ocHAKQEAgLTAsMCArMSw1MTUgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHBhdF90cmllXy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBhIHBhdHJpY2lhIHRyZWUuCisgKi8KKworLyoqCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIGxvb3NlbHkgYm9ycm93cyBpZGVhcyBmcm9tOgorICogMSkgRmFzdCBNZXJnZWFibGUgSW50ZWdlciBNYXBzLCBPa2FzYWtpLCBHaWxsIDE5OTgKKyAqIDIpIFB0c2V0OiBTZXRzIG9mIGludGVnZXJzIGltcGxlbWVudGVkIGFzIFBhdHJpY2lhIHRyZWVzLAorICogICAgSmVhbi1DaHJpc3RvcGhlIEZpbGxpYXRyLCAyMDAwCisgKiovCisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9zeW50aF9lX2FjY2Vzc190cmFpdHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL25vZGVfYmFzZS5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2V4Y2VwdGlvbi5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL3RhZ19hbmRfdHJhaXQuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvZXFfZm4vZXFfYnlfbGVzcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90eXBlc190cmFpdHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jb25kX2RlYWx0b3IuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHlwZV91dGlscy5ocHA+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxsaXN0PgorI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9kZWJ1Z19tYXBfYmFzZS5ocHA+CisjZW5kaWYgCisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgTm9kZV9BbmRfSXRfVHJhaXRzLCBcCisJICAgICB0eXBlbmFtZSBBbGxvY2F0b3I+CisKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisjZGVmaW5lIFBCX0RTX0NMQVNTX05BTUUgcGF0X3RyaWVfZGF0YV8KKyNlbmRpZiAKKworI2lmZGVmIFBCX0RTX0RBVEFfRkFMU0VfSU5ESUNBVE9SCisjZGVmaW5lIFBCX0RTX0NMQVNTX05BTUUgcGF0X3RyaWVfbm9fZGF0YV8KKyNlbmRpZiAKKworI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBcCisgICAgUEJfRFNfQ0xBU1NfTkFNRTxLZXksIE1hcHBlZCwgTm9kZV9BbmRfSXRfVHJhaXRzLCBBbGxvY2F0b3I+CisKKyNkZWZpbmUgUEJfRFNfVFlQRVNfVFJBSVRTX0NfREVDIFwKKyAgICB0eXBlc190cmFpdHM8S2V5LCBNYXBwZWQsIEFsbG9jYXRvciwgZmFsc2U+CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworI2RlZmluZSBQQl9EU19ERUJVR19NQVBfQkFTRV9DX0RFQyBcCisgICAgZGVidWdfbWFwX2Jhc2U8S2V5LAllcV9ieV9sZXNzPEtleSwgXAorCQkJc3RkOjpsZXNzPEtleT4gPiwgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8S2V5Pjo6b3RoZXI6OmNvbnN0X3JlZmVyZW5jZT4KKyNlbmRpZiAKKworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyNkZWZpbmUgUEJfRFNfVjJGKFgpIChYKS5maXJzdAorI2RlZmluZSBQQl9EU19WMlMoWCkgKFgpLnNlY29uZAorI2RlZmluZSBQQl9EU19FUDJWUChYKSYgKChYKS0+bV92YWx1ZSkKKyNlbmRpZiAKKworI2lmZGVmIFBCX0RTX0RBVEFfRkFMU0VfSU5ESUNBVE9SCisjZGVmaW5lIFBCX0RTX1YyRihYKSAoWCkKKyNkZWZpbmUgUEJfRFNfVjJTKFgpIE1hcHBlZF9EYXRhKCkKKyNkZWZpbmUgUEJfRFNfRVAyVlAoWCkmICgoWCktPm1fdmFsdWUuZmlyc3QpCisjZW5kaWYgCisKKyAgICAvKioKKyAgICAgKiBjbGFzcyBkZXNjcmlwdGlvbiA9IFBBVFJJQ0lBIHRyaWUgaW1wbGVtZW50YXRpb24uIj4KKyAgICAgKiovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LAorCSAgICAgdHlwZW5hbWUgTWFwcGVkLAorCSAgICAgdHlwZW5hbWUgTm9kZV9BbmRfSXRfVHJhaXRzLAorCSAgICAgdHlwZW5hbWUgQWxsb2NhdG9yPgorICAgIGNsYXNzIFBCX0RTX0NMQVNTX05BTUUgOgorI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICBwdWJsaWMgUEJfRFNfREVCVUdfTUFQX0JBU0VfQ19ERUMsCisjZW5kaWYgCisgICAgICBwdWJsaWMgTm9kZV9BbmRfSXRfVHJhaXRzOjpzeW50aF9lX2FjY2Vzc190cmFpdHMsCisgICAgICBwdWJsaWMgTm9kZV9BbmRfSXRfVHJhaXRzOjpub2RlX3VwZGF0ZSwKKyAgICAgIHB1YmxpYyBQQl9EU19UWVBFU19UUkFJVFNfQ19ERUMKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgUEJfRFNfVFlQRVNfVFJBSVRTX0NfREVDIHRyYWl0c19iYXNlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIE5vZGVfQW5kX0l0X1RyYWl0czo6c3ludGhfZV9hY2Nlc3NfdHJhaXRzIHN5bnRoX2VfYWNjZXNzX3RyYWl0czsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8c3ludGhfZV9hY2Nlc3NfdHJhaXRzPjo6b3RoZXI6OmNvbnN0X3BvaW50ZXIgY29uc3RfZV9hY2Nlc3NfdHJhaXRzX3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN5bnRoX2VfYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IgY29uc3RfZV9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBOb2RlX0FuZF9JdF9UcmFpdHM6Om5vZGUgbm9kZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8bm9kZT46Om90aGVyOjpjb25zdF9wb2ludGVyIGNvbnN0X25vZGVfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxub2RlPjo6b3RoZXI6OnBvaW50ZXIgbm9kZV9wb2ludGVyOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIE5vZGVfQW5kX0l0X1RyYWl0czo6aGVhZCBoZWFkOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxoZWFkPjo6b3RoZXIgaGVhZF9hbGxvY2F0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGhlYWRfYWxsb2NhdG9yOjpwb2ludGVyIGhlYWRfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBOb2RlX0FuZF9JdF9UcmFpdHM6OmxlYWYgbGVhZjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8bGVhZj46Om90aGVyIGxlYWZfYWxsb2NhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBsZWFmX2FsbG9jYXRvcjo6Y29uc3RfcG9pbnRlciBjb25zdF9sZWFmX3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGxlYWZfYWxsb2NhdG9yOjpwb2ludGVyIGxlYWZfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBOb2RlX0FuZF9JdF9UcmFpdHM6OmludGVybmFsX25vZGUgaW50ZXJuYWxfbm9kZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8aW50ZXJuYWxfbm9kZT46Om90aGVyIGludGVybmFsX25vZGVfYWxsb2NhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpbnRlcm5hbF9ub2RlX2FsbG9jYXRvcjo6Y29uc3RfcG9pbnRlciBjb25zdF9pbnRlcm5hbF9ub2RlX3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGludGVybmFsX25vZGVfYWxsb2NhdG9yOjpwb2ludGVyIGludGVybmFsX25vZGVfcG9pbnRlcjsKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL2NvbmRfZHRvcl9lbnRyeV9kZWFsdG9yLmhwcD4KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICB0eXBlZGVmIFBCX0RTX0RFQlVHX01BUF9CQVNFX0NfREVDIGRlYnVnX2Jhc2U7CisjZW5kaWYgCisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9zcGxpdF9qb2luX2JyYW5jaF9iYWcuaHBwPgorCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIE5vZGVfQW5kX0l0X1RyYWl0czo6bnVsbF9ub2RlX3VwZGF0ZV9wb2ludGVyIG51bGxfbm9kZV91cGRhdGVfcG9pbnRlcjsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgcGF0X3RyaWVfdGFnIGNvbnRhaW5lcl9jYXRlZ29yeTsKKyAgICAgIHR5cGVkZWYgQWxsb2NhdG9yIGFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnNpemVfdHlwZSBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6a2V5X3R5cGUga2V5X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjprZXlfcG9pbnRlciBrZXlfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmNvbnN0X2tleV9wb2ludGVyIGNvbnN0X2tleV9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6a2V5X3JlZmVyZW5jZSBrZXlfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6Y29uc3Rfa2V5X3JlZmVyZW5jZSBjb25zdF9rZXlfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6bWFwcGVkX3R5cGUgbWFwcGVkX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjptYXBwZWRfcG9pbnRlciBtYXBwZWRfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmNvbnN0X21hcHBlZF9wb2ludGVyIGNvbnN0X21hcHBlZF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6bWFwcGVkX3JlZmVyZW5jZSBtYXBwZWRfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6Y29uc3RfbWFwcGVkX3JlZmVyZW5jZSBjb25zdF9tYXBwZWRfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6cG9pbnRlciBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgTm9kZV9BbmRfSXRfVHJhaXRzOjpjb25zdF9pdGVyYXRvciBjb25zdF9wb2ludF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgTm9kZV9BbmRfSXRfVHJhaXRzOjppdGVyYXRvciBwb2ludF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgY29uc3RfcG9pbnRfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHBvaW50X2l0ZXJhdG9yIGl0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIE5vZGVfQW5kX0l0X1RyYWl0czo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBOb2RlX0FuZF9JdF9UcmFpdHM6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgTm9kZV9BbmRfSXRfVHJhaXRzOjpjb25zdF9ub2RlX2l0ZXJhdG9yIGNvbnN0X25vZGVfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIE5vZGVfQW5kX0l0X1RyYWl0czo6bm9kZV9pdGVyYXRvciBub2RlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBOb2RlX0FuZF9JdF9UcmFpdHM6OmVfYWNjZXNzX3RyYWl0cyBlX2FjY2Vzc190cmFpdHM7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIE5vZGVfQW5kX0l0X1RyYWl0czo6bm9kZV91cGRhdGUgbm9kZV91cGRhdGU7CisKKyAgICAgIFBCX0RTX0NMQVNTX05BTUUoKTsKKworICAgICAgUEJfRFNfQ0xBU1NfTkFNRShjb25zdCBlX2FjY2Vzc190cmFpdHMmKTsKKworICAgICAgUEJfRFNfQ0xBU1NfTkFNRShjb25zdCBQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgICB2b2lkCisgICAgICBzd2FwKFBCX0RTX0NMQVNTX0NfREVDJik7CisKKyAgICAgIH5QQl9EU19DTEFTU19OQU1FKCk7CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBlbXB0eSgpIGNvbnN0OworCisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3Q7CisKKyAgICAgIGVfYWNjZXNzX3RyYWl0cyYgCisgICAgICBnZXRfZV9hY2Nlc3NfdHJhaXRzKCk7CisKKyAgICAgIGNvbnN0IGVfYWNjZXNzX3RyYWl0cyYgCisgICAgICBnZXRfZV9hY2Nlc3NfdHJhaXRzKCkgY29uc3Q7CisKKyAgICAgIG5vZGVfdXBkYXRlJiAKKyAgICAgIGdldF9ub2RlX3VwZGF0ZSgpOworCisgICAgICBjb25zdCBub2RlX3VwZGF0ZSYgCisgICAgICBnZXRfbm9kZV91cGRhdGUoKSBjb25zdDsKKworICAgICAgaW5saW5lIHN0ZDo6cGFpcjxwb2ludF9pdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydChjb25zdF9yZWZlcmVuY2UpOworCisgICAgICBpbmxpbmUgbWFwcGVkX3JlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5KQorICAgICAgeworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKwlyZXR1cm4gaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKHJfa2V5LCBtYXBwZWRfdHlwZSgpKSkuZmlyc3QtPnNlY29uZDsKKyNlbHNlIAorCWluc2VydChyX2tleSk7CisJcmV0dXJuIHRyYWl0c19iYXNlOjpzX251bGxfbWFwcGVkOworI2VuZGlmIAorICAgICAgfQorCisgICAgICBpbmxpbmUgcG9pbnRfaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Rfa2V5X3JlZmVyZW5jZSk7CisKKyAgICAgIGlubGluZSBjb25zdF9wb2ludF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdF9rZXlfcmVmZXJlbmNlKSBjb25zdDsKKworICAgICAgaW5saW5lIHBvaW50X2l0ZXJhdG9yCisgICAgICBsb3dlcl9ib3VuZChjb25zdF9rZXlfcmVmZXJlbmNlKTsKKworICAgICAgaW5saW5lIGNvbnN0X3BvaW50X2l0ZXJhdG9yCisgICAgICBsb3dlcl9ib3VuZChjb25zdF9rZXlfcmVmZXJlbmNlKSBjb25zdDsKKworICAgICAgaW5saW5lIHBvaW50X2l0ZXJhdG9yCisgICAgICB1cHBlcl9ib3VuZChjb25zdF9rZXlfcmVmZXJlbmNlKTsKKworICAgICAgaW5saW5lIGNvbnN0X3BvaW50X2l0ZXJhdG9yCisgICAgICB1cHBlcl9ib3VuZChjb25zdF9rZXlfcmVmZXJlbmNlKSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKTsKKworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIGVyYXNlKGNvbnN0X2tleV9yZWZlcmVuY2UpOworCisgICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yKTsKKworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyAgICAgIGlubGluZSBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IpOworI2VuZGlmIAorCisgICAgICBpbmxpbmUgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgZXJhc2UoY29uc3RfcmV2ZXJzZV9pdGVyYXRvcik7CisKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisgICAgICBpbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgZXJhc2UocmV2ZXJzZV9pdGVyYXRvcik7CisjZW5kaWYgCisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFByZWQ+CisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBlcmFzZV9pZihQcmVkKTsKKworICAgICAgdm9pZAorICAgICAgam9pbihQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgICB2b2lkCisgICAgICBzcGxpdChjb25zdF9rZXlfcmVmZXJlbmNlLCBQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgICBpbmxpbmUgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCk7CisKKyAgICAgIGlubGluZSBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdDsKKworICAgICAgaW5saW5lIGl0ZXJhdG9yCisgICAgICBlbmQoKTsKKworICAgICAgaW5saW5lIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdDsKKworICAgICAgaW5saW5lIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpOworCisgICAgICBpbmxpbmUgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCk7CisKKyAgICAgIGlubGluZSBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBjb25zdF9ub2RlX2l0ZXJhdG9yCisgICAgICBub2RlX2JlZ2luKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBub2RlX2l0ZXJhdG9yCisgICAgICBub2RlX2JlZ2luKCk7CisKKyAgICAgIGlubGluZSBjb25zdF9ub2RlX2l0ZXJhdG9yCisgICAgICBub2RlX2VuZCgpIGNvbnN0OworCisgICAgICBpbmxpbmUgbm9kZV9pdGVyYXRvcgorICAgICAgbm9kZV9lbmQoKTsKKworI2lmZGVmIFBCX0RTX1BBVF9UUklFX1RSQUNFXworICAgICAgdm9pZAorICAgICAgdHJhY2UoKSBjb25zdDsKKyNlbmRpZiAKKworICAgIHByb3RlY3RlZDoKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXQ+CisgICAgICB2b2lkCisgICAgICBjb3B5X2Zyb21fcmFuZ2UoSXQsIEl0KTsKKworICAgICAgdm9pZAorICAgICAgdmFsdWVfc3dhcChQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgICBub2RlX3BvaW50ZXIKKyAgICAgIHJlY3Vyc2l2ZV9jb3B5X25vZGUoY29uc3Rfbm9kZV9wb2ludGVyKTsKKworICAgIHByaXZhdGU6CisKKyAgICAgIHZvaWQKKyAgICAgIGluaXRpYWxpemUoKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIGFwcGx5X3VwZGF0ZShub2RlX3BvaW50ZXIsIG51bGxfbm9kZV91cGRhdGVfcG9pbnRlcik7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGVfVXBkYXRlXz4KKyAgICAgIGlubGluZSB2b2lkCisgICAgICBhcHBseV91cGRhdGUobm9kZV9wb2ludGVyLCBOb2RlX1VwZGF0ZV8qKTsKKworICAgICAgYm9vbAorICAgICAgam9pbl9wcmVwKFBCX0RTX0NMQVNTX0NfREVDJiwgc3BsaXRfam9pbl9icmFuY2hfYmFnJik7CisKKyAgICAgIHZvaWQKKyAgICAgIHJlY19qb2luX3ByZXAoY29uc3Rfbm9kZV9wb2ludGVyLCBjb25zdF9ub2RlX3BvaW50ZXIsIAorCQkgICAgc3BsaXRfam9pbl9icmFuY2hfYmFnJik7CisKKyAgICAgIHZvaWQKKyAgICAgIHJlY19qb2luX3ByZXAoY29uc3RfbGVhZl9wb2ludGVyLCBjb25zdF9sZWFmX3BvaW50ZXIsIAorCQkgICAgc3BsaXRfam9pbl9icmFuY2hfYmFnJik7CisKKyAgICAgIHZvaWQKKyAgICAgIHJlY19qb2luX3ByZXAoY29uc3RfbGVhZl9wb2ludGVyLCBjb25zdF9pbnRlcm5hbF9ub2RlX3BvaW50ZXIsIAorCQkgICAgc3BsaXRfam9pbl9icmFuY2hfYmFnJik7CisKKyAgICAgIHZvaWQKKyAgICAgIHJlY19qb2luX3ByZXAoY29uc3RfaW50ZXJuYWxfbm9kZV9wb2ludGVyLCBjb25zdF9sZWFmX3BvaW50ZXIsIAorCQkgICAgc3BsaXRfam9pbl9icmFuY2hfYmFnJik7CisKKyAgICAgIHZvaWQKKyAgICAgIHJlY19qb2luX3ByZXAoY29uc3RfaW50ZXJuYWxfbm9kZV9wb2ludGVyLCBjb25zdF9pbnRlcm5hbF9ub2RlX3BvaW50ZXIsIAorCQkgICAgc3BsaXRfam9pbl9icmFuY2hfYmFnJik7CisKKyAgICAgIG5vZGVfcG9pbnRlcgorICAgICAgcmVjX2pvaW4obm9kZV9wb2ludGVyLCBub2RlX3BvaW50ZXIsIHNpemVfdHlwZSwgc3BsaXRfam9pbl9icmFuY2hfYmFnJik7CisKKyAgICAgIG5vZGVfcG9pbnRlcgorICAgICAgcmVjX2pvaW4obGVhZl9wb2ludGVyLCBsZWFmX3BvaW50ZXIsIHNwbGl0X2pvaW5fYnJhbmNoX2JhZyYpOworCisgICAgICBub2RlX3BvaW50ZXIKKyAgICAgIHJlY19qb2luKGxlYWZfcG9pbnRlciwgaW50ZXJuYWxfbm9kZV9wb2ludGVyLCBzaXplX3R5cGUsIAorCSAgICAgICBzcGxpdF9qb2luX2JyYW5jaF9iYWcmKTsKKworICAgICAgbm9kZV9wb2ludGVyCisgICAgICByZWNfam9pbihpbnRlcm5hbF9ub2RlX3BvaW50ZXIsIGxlYWZfcG9pbnRlciwgc2l6ZV90eXBlLCAKKwkgICAgICAgc3BsaXRfam9pbl9icmFuY2hfYmFnJik7CisKKyAgICAgIG5vZGVfcG9pbnRlcgorICAgICAgcmVjX2pvaW4oaW50ZXJuYWxfbm9kZV9wb2ludGVyLCBpbnRlcm5hbF9ub2RlX3BvaW50ZXIsIAorCSAgICAgICBzcGxpdF9qb2luX2JyYW5jaF9iYWcmKTsKKworICAgICAgc2l6ZV90eXBlCisgICAgICBrZXlzX2RpZmZfaW5kKHR5cGVuYW1lIGVfYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IsIHR5cGVuYW1lIGVfYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IsIHR5cGVuYW1lIGVfYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IsIHR5cGVuYW1lIGVfYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IpOworCisgICAgICBpbnRlcm5hbF9ub2RlX3BvaW50ZXIKKyAgICAgIGluc2VydF9icmFuY2gobm9kZV9wb2ludGVyLCBub2RlX3BvaW50ZXIsIHNwbGl0X2pvaW5fYnJhbmNoX2JhZyYpOworCisgICAgICB2b2lkCisgICAgICB1cGRhdGVfbWluX21heF9mb3JfaW5zZXJ0ZWRfbGVhZihsZWFmX3BvaW50ZXIpOworCisgICAgICB2b2lkCisgICAgICBlcmFzZV9sZWFmKGxlYWZfcG9pbnRlcik7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBhY3R1YWxfZXJhc2VfbGVhZihsZWFmX3BvaW50ZXIpOworCisgICAgICB2b2lkCisgICAgICBjbGVhcl9pbXAobm9kZV9wb2ludGVyKTsKKworICAgICAgdm9pZAorICAgICAgZXJhc2VfZml4dXAoaW50ZXJuYWxfbm9kZV9wb2ludGVyKTsKKworICAgICAgdm9pZAorICAgICAgdXBkYXRlX21pbl9tYXhfZm9yX2VyYXNlZF9sZWFmKGxlYWZfcG9pbnRlcik7CisKKyAgICAgIHN0YXRpYyBpbmxpbmUgY29uc3RfZV9pdGVyYXRvcgorICAgICAgcHJlZl9iZWdpbihjb25zdF9ub2RlX3BvaW50ZXIpOworCisgICAgICBzdGF0aWMgaW5saW5lIGNvbnN0X2VfaXRlcmF0b3IKKyAgICAgIHByZWZfZW5kKGNvbnN0X25vZGVfcG9pbnRlcik7CisKKyAgICAgIGlubGluZSBub2RlX3BvaW50ZXIKKyAgICAgIGZpbmRfaW1wKGNvbnN0X2tleV9yZWZlcmVuY2UpOworCisgICAgICBpbmxpbmUgbm9kZV9wb2ludGVyCisgICAgICBsb3dlcl9ib3VuZF9pbXAoY29uc3Rfa2V5X3JlZmVyZW5jZSk7CisKKyAgICAgIGlubGluZSBub2RlX3BvaW50ZXIKKyAgICAgIHVwcGVyX2JvdW5kX2ltcChjb25zdF9rZXlfcmVmZXJlbmNlKTsKKworICAgICAgaW5saW5lIHN0YXRpYyBjb25zdF9sZWFmX3BvaW50ZXIKKyAgICAgIGxlZnRtb3N0X2Rlc2NlbmRhbnQoY29uc3Rfbm9kZV9wb2ludGVyKTsKKworICAgICAgaW5saW5lIHN0YXRpYyBsZWFmX3BvaW50ZXIKKyAgICAgIGxlZnRtb3N0X2Rlc2NlbmRhbnQobm9kZV9wb2ludGVyKTsKKworICAgICAgaW5saW5lIHN0YXRpYyBjb25zdF9sZWFmX3BvaW50ZXIKKyAgICAgIHJpZ2h0bW9zdF9kZXNjZW5kYW50KGNvbnN0X25vZGVfcG9pbnRlcik7CisKKyAgICAgIGlubGluZSBzdGF0aWMgbGVhZl9wb2ludGVyCisgICAgICByaWdodG1vc3RfZGVzY2VuZGFudChub2RlX3BvaW50ZXIpOworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF92YWxpZCgpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfaXRlcmF0b3JzKCkgY29uc3Q7CisKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF9yZXZlcnNlX2l0ZXJhdG9ycygpIGNvbnN0OworCisgICAgICBzdGF0aWMgc2l6ZV90eXBlCisgICAgICByZWN1cnNpdmVfY291bnRfbGVhZnMoY29uc3Rfbm9kZV9wb2ludGVyKTsKKyNlbmRpZiAKKworI2lmZGVmIFBCX0RTX1BBVF9UUklFX1RSQUNFXworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIHRyYWNlX25vZGUoY29uc3Rfbm9kZV9wb2ludGVyLCBzaXplX3R5cGUpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YV8+CisgICAgICBzdGF0aWMgdm9pZAorICAgICAgdHJhY2Vfbm9kZV9tZXRhZGF0YShjb25zdF9ub2RlX3BvaW50ZXIsIHR5cGVfdG9fdHlwZTxNZXRhZGF0YV8+KTsKKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIHRyYWNlX25vZGVfbWV0YWRhdGEoY29uc3Rfbm9kZV9wb2ludGVyLCB0eXBlX3RvX3R5cGU8bnVsbF9ub2RlX21ldGFkYXRhPik7CisjZW5kaWYgCisKKyAgICAgIGxlYWZfcG9pbnRlcgorICAgICAgc3BsaXRfcHJlcChjb25zdF9rZXlfcmVmZXJlbmNlLCBQQl9EU19DTEFTU19DX0RFQyYsIAorCQkgc3BsaXRfam9pbl9icmFuY2hfYmFnJik7CisKKyAgICAgIG5vZGVfcG9pbnRlcgorICAgICAgcmVjX3NwbGl0KG5vZGVfcG9pbnRlciwgY29uc3RfZV9pdGVyYXRvciwgY29uc3RfZV9pdGVyYXRvciwgCisJCVBCX0RTX0NMQVNTX0NfREVDJiwgc3BsaXRfam9pbl9icmFuY2hfYmFnJik7CisKKyAgICAgIHZvaWQKKyAgICAgIHNwbGl0X2luc2VydF9icmFuY2goc2l6ZV90eXBlLCBjb25zdF9lX2l0ZXJhdG9yLCAKKwkJCSAgdHlwZW5hbWUgaW50ZXJuYWxfbm9kZTo6aXRlcmF0b3IsIAorCQkJICBzaXplX3R5cGUsIHNwbGl0X2pvaW5fYnJhbmNoX2JhZyYpOworCisgICAgICBzdGF0aWMgaGVhZF9hbGxvY2F0b3Igc19oZWFkX2FsbG9jYXRvcjsKKyAgICAgIHN0YXRpYyBpbnRlcm5hbF9ub2RlX2FsbG9jYXRvciBzX2ludGVybmFsX25vZGVfYWxsb2NhdG9yOworICAgICAgc3RhdGljIGxlYWZfYWxsb2NhdG9yIHNfbGVhZl9hbGxvY2F0b3I7CisKKyAgICAgIGhlYWRfcG9pbnRlciBtX3BfaGVhZDsKKyAgICAgIHNpemVfdHlwZSBtX3NpemU7CisgICAgfTsKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL2l0ZXJhdG9yc19mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9pbnNlcnRfam9pbl9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9lcmFzZV9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9maW5kX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL2luZm9fZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vcG9saWN5X2FjY2Vzc19mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9zcGxpdF9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9kZWJ1Z19mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy90cmFjZV9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy91cGRhdGVfZm5faW1wcy5ocHA+CisKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfTkFNRQorI3VuZGVmIFBCX0RTX1RZUEVTX1RSQUlUU19DX0RFQworI3VuZGVmIFBCX0RTX0RFQlVHX01BUF9CQVNFX0NfREVDCisjdW5kZWYgUEJfRFNfVjJGCisjdW5kZWYgUEJfRFNfRVAyVlAKKyN1bmRlZiBQQl9EU19WMlMKKworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vcG9pbnRfaXRlcmF0b3JzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vcG9pbnRfaXRlcmF0b3JzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWRhOTA3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9wb2ludF9pdGVyYXRvcnMuaHBwCkBAIC0wLDAgKzEsNDg0IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBwb2ludF9pdGVyYXRvcnMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYmluX3NlYXJjaF90cmVlXy4KKyAqLworCisjaWZuZGVmIFBCX0RTX1BBVF9UUklFX0ZJTkRfSVRFUkFUT1JTX0hQUAorI2RlZmluZSBQQl9EU19QQVRfVFJJRV9GSU5EX0lURVJBVE9SU19IUFAKKworI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworCisjZGVmaW5lIFBCX0RTX0NPTlNUX0lUX0NfREVDCQkJCQlcCisgICAgcGF0X3RyaWVfY29uc3RfaXRfPAkJCQkJCVwKKwkJCQkJVHlwZV9UcmFpdHMsCQlcCisJCQkJCU5vZGUsCQkJXAorCQkJCQlMZWFmLAkJCVwKKwkJCQkJSGVhZCwJCQlcCisJCQkJCUludGVybmFsX05vZGUsCQlcCisJCQkJCUlzX0ZvcndhcmRfSXRlcmF0b3IsCVwKKwkJCQkJQWxsb2NhdG9yPgorCisjZGVmaW5lIFBCX0RTX0NPTlNUX09ESVJfSVRfQ19ERUMJCQkJXAorICAgIHBhdF90cmllX2NvbnN0X2l0XzwJCQkJCQlcCisJCQkJCVR5cGVfVHJhaXRzLAkJXAorCQkJCQlOb2RlLAkJCVwKKwkJCQkJTGVhZiwJCQlcCisJCQkJCUhlYWQsCQkJXAorCQkJCQlJbnRlcm5hbF9Ob2RlLAkJXAorCQkJCQkhSXNfRm9yd2FyZF9JdGVyYXRvciwJXAorCQkJCQlBbGxvY2F0b3I+CisKKyNkZWZpbmUgUEJfRFNfSVRfQ19ERUMJCQkJCQkJXAorICAgIHBhdF90cmllX2l0XzwJCQkJCQkJXAorCQkJCQkJVHlwZV9UcmFpdHMsCQlcCisJCQkJCQlOb2RlLAkJCVwKKwkJCQkJCUxlYWYsCQkJXAorCQkJCQkJSGVhZCwJCQlcCisJCQkJCQlJbnRlcm5hbF9Ob2RlLAkJXAorCQkJCQkJSXNfRm9yd2FyZF9JdGVyYXRvciwJXAorCQkJCQkJQWxsb2NhdG9yPgorCisjZGVmaW5lIFBCX0RTX09ESVJfSVRfQ19ERUMJCQkJCQlcCisgICAgcGF0X3RyaWVfaXRfPAkJCQkJCQlcCisJCQkJCQlUeXBlX1RyYWl0cywJCVwKKwkJCQkJCU5vZGUsCQkJXAorCQkJCQkJTGVhZiwJCQlcCisJCQkJCQlIZWFkLAkJCVwKKwkJCQkJCUludGVybmFsX05vZGUsCQlcCisJCQkJCQkhSXNfRm9yd2FyZF9JdGVyYXRvciwJXAorCQkJCQkJQWxsb2NhdG9yPgorCisKKyAgICAvLyBDb25zdCBpdGVyYXRvci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlX1RyYWl0cywKKwkgICAgIGNsYXNzIE5vZGUsCisJICAgICBjbGFzcyBMZWFmLAorCSAgICAgY2xhc3MgSGVhZCwKKwkgICAgIGNsYXNzIEludGVybmFsX05vZGUsCisJICAgICBib29sIElzX0ZvcndhcmRfSXRlcmF0b3IsCisJICAgICBjbGFzcyBBbGxvY2F0b3I+CisgICAgY2xhc3MgcGF0X3RyaWVfY29uc3RfaXRfCisgICAgeworCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorICAgICAgTm9kZT46Om90aGVyOjpwb2ludGVyCisgICAgICBub2RlX3BvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCUxlYWY+OjpvdGhlcjo6Y29uc3RfcG9pbnRlcgorICAgICAgY29uc3RfbGVhZl9wb2ludGVyOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKwlMZWFmPjo6b3RoZXI6OnBvaW50ZXIKKyAgICAgIGxlYWZfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8CisJSGVhZD46Om90aGVyOjpwb2ludGVyCisgICAgICBoZWFkX3BvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCUludGVybmFsX05vZGU+OjpvdGhlcjo6cG9pbnRlcgorICAgICAgaW50ZXJuYWxfbm9kZV9wb2ludGVyOworCisgICAgcHVibGljOgorCisgICAgICB0eXBlZGVmIHN0ZDo6YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIFR5cGVfVHJhaXRzOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgVHlwZV9UcmFpdHM6OnBvaW50ZXIgcG9pbnRlcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBUeXBlX1RyYWl0czo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIFR5cGVfVHJhaXRzOjpyZWZlcmVuY2UgcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIFR5cGVfVHJhaXRzOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOworCisgICAgcHVibGljOgorCisgICAgICBpbmxpbmUKKyAgICAgIHBhdF90cmllX2NvbnN0X2l0Xyhub2RlX3BvaW50ZXIgcF9uZCA9IE5VTEwpIDogbV9wX25kKHBfbmQpCisgICAgICB7IH0KKworICAgICAgaW5saW5lCisgICAgICBwYXRfdHJpZV9jb25zdF9pdF8oY29uc3QgUEJfRFNfQ09OU1RfT0RJUl9JVF9DX0RFQyYgb3RoZXIpIAorICAgICAgOiBtX3BfbmQob3RoZXIubV9wX25kKQorICAgICAgeyB9CisKKyAgICAgIGlubGluZQorICAgICAgUEJfRFNfQ09OU1RfSVRfQ19ERUMmIAorICAgICAgb3BlcmF0b3I9KGNvbnN0IFBCX0RTX0NPTlNUX0lUX0NfREVDJiBvdGhlcikKKyAgICAgIHsKKwltX3BfbmQgPSBvdGhlci5tX3BfbmQ7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBpbmxpbmUKKyAgICAgIFBCX0RTX0NPTlNUX0lUX0NfREVDJiAKKyAgICAgIG9wZXJhdG9yPShjb25zdCBQQl9EU19DT05TVF9PRElSX0lUX0NfREVDJiBvdGhlcikKKyAgICAgIHsKKwltX3BfbmQgPSBvdGhlci5tX3BfbmQ7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBpbmxpbmUgY29uc3RfcG9pbnRlcgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF9uZC0+bV90eXBlID09IHBhdF90cmllX2xlYWZfbm9kZV90eXBlKTsKKwlyZXR1cm4gJnN0YXRpY19jYXN0PGxlYWZfcG9pbnRlcj4obV9wX25kKS0+dmFsdWUoKTsKKyAgICAgIH0KKworICAgICAgaW5saW5lIGNvbnN0X3JlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9wX25kLT5tX3R5cGUgPT0gcGF0X3RyaWVfbGVhZl9ub2RlX3R5cGUpOworCXJldHVybiBzdGF0aWNfY2FzdDxsZWFmX3BvaW50ZXI+KG1fcF9uZCktPnZhbHVlKCk7CisgICAgICB9CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IFBCX0RTX0NPTlNUX0lUX0NfREVDJiBvdGhlcikgY29uc3QKKyAgICAgIHsgcmV0dXJuIChtX3BfbmQgPT0gb3RoZXIubV9wX25kKTsgfQorCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBQQl9EU19DT05TVF9PRElSX0lUX0NfREVDJiBvdGhlcikgY29uc3QKKyAgICAgIHsgcmV0dXJuIChtX3BfbmQgPT0gb3RoZXIubV9wX25kKTsgfQorCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCBQQl9EU19DT05TVF9JVF9DX0RFQyYgb3RoZXIpIGNvbnN0CisgICAgICB7IHJldHVybiAobV9wX25kICE9IG90aGVyLm1fcF9uZCk7IH0KKworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yIT0oY29uc3QgUEJfRFNfQ09OU1RfT0RJUl9JVF9DX0RFQyYgb3RoZXIpIGNvbnN0CisgICAgICB7IHJldHVybiAobV9wX25kICE9IG90aGVyLm1fcF9uZCk7IH0KKworICAgICAgaW5saW5lIFBCX0RTX0NPTlNUX0lUX0NfREVDJiAKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworCWluYyhpbnRlZ3JhbF9jb25zdGFudDxpbnQsSXNfRm9yd2FyZF9JdGVyYXRvcj4oKSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBpbmxpbmUgUEJfRFNfQ09OU1RfSVRfQ19ERUMKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeworCVBCX0RTX0NPTlNUX0lUX0NfREVDIHJldF9pdChtX3BfbmQpOworCW9wZXJhdG9yKysoKTsKKwlyZXR1cm4gcmV0X2l0OworICAgICAgfQorCisgICAgICBpbmxpbmUgUEJfRFNfQ09OU1RfSVRfQ19ERUMmIAorICAgICAgb3BlcmF0b3ItLSgpCisgICAgICB7CisJZGVjKGludGVncmFsX2NvbnN0YW50PGludCxJc19Gb3J3YXJkX0l0ZXJhdG9yPigpKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGlubGluZSBQQl9EU19DT05TVF9JVF9DX0RFQworICAgICAgb3BlcmF0b3ItLShpbnQpCisgICAgICB7CisJUEJfRFNfQ09OU1RfSVRfQ19ERUMgcmV0X2l0KG1fcF9uZCk7CisJb3BlcmF0b3ItLSgpOworCXJldHVybiByZXRfaXQ7CisgICAgICB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBpbmxpbmUgdm9pZAorICAgICAgaW5jKGZhbHNlX3R5cGUpCisgICAgICB7IGRlYyh0cnVlX3R5cGUoKSk7IH0KKworICAgICAgdm9pZAorICAgICAgaW5jKHRydWVfdHlwZSkKKyAgICAgIHsKKwlpZiAobV9wX25kLT5tX3R5cGUgPT0gcGF0X3RyaWVfaGVhZF9ub2RlX3R5cGUpCisJICB7CisJICAgIG1fcF9uZCA9IHN0YXRpY19jYXN0PGhlYWRfcG9pbnRlcj4obV9wX25kKS0+bV9wX21pbjsKKwkgICAgcmV0dXJuOworCSAgfQorCisJbm9kZV9wb2ludGVyIHBfeSA9IG1fcF9uZC0+bV9wX3BhcmVudDsKKwl3aGlsZSAocF95LT5tX3R5cGUgIT0gcGF0X3RyaWVfaGVhZF9ub2RlX3R5cGUgJiYgCisJICAgICAgIGdldF9sYXJnZXJfc2libGluZyhtX3BfbmQpID09IE5VTEwpCisJICB7CisJICAgIG1fcF9uZCA9IHBfeTsKKwkgICAgcF95ID0gcF95LT5tX3BfcGFyZW50OworCSAgfQorCisJaWYgKHBfeS0+bV90eXBlID09IHBhdF90cmllX2hlYWRfbm9kZV90eXBlKQorCSAgeworCSAgICBtX3BfbmQgPSBwX3k7CisJICAgIHJldHVybjsKKwkgIH0KKwltX3BfbmQgPSBsZWZ0bW9zdF9kZXNjZW5kYW50KGdldF9sYXJnZXJfc2libGluZyhtX3BfbmQpKTsKKyAgICAgIH0KKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIGRlYyhmYWxzZV90eXBlKQorICAgICAgeyBpbmModHJ1ZV90eXBlKCkpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGRlYyh0cnVlX3R5cGUpCisgICAgICB7CisJaWYgKG1fcF9uZC0+bV90eXBlID09IHBhdF90cmllX2hlYWRfbm9kZV90eXBlKQorCSAgeworCSAgICBtX3BfbmQgPSBzdGF0aWNfY2FzdDxoZWFkX3BvaW50ZXI+KG1fcF9uZCktPm1fcF9tYXg7CisJICAgIHJldHVybjsKKwkgIH0KKworCW5vZGVfcG9pbnRlciBwX3kgPSBtX3BfbmQtPm1fcF9wYXJlbnQ7CisJd2hpbGUgKHBfeS0+bV90eXBlICE9IHBhdF90cmllX2hlYWRfbm9kZV90eXBlICYmIAorCSAgICAgICBnZXRfc21hbGxlcl9zaWJsaW5nKG1fcF9uZCkgPT0gTlVMTCkKKwkgIHsKKwkgICAgbV9wX25kID0gcF95OworCSAgICBwX3kgPSBwX3ktPm1fcF9wYXJlbnQ7CisJICB9CisKKwlpZiAocF95LT5tX3R5cGUgPT0gcGF0X3RyaWVfaGVhZF9ub2RlX3R5cGUpCisJICB7CisJICAgIG1fcF9uZCA9IHBfeTsKKwkgICAgcmV0dXJuOworCSAgfQorCW1fcF9uZCA9IHJpZ2h0bW9zdF9kZXNjZW5kYW50KGdldF9zbWFsbGVyX3NpYmxpbmcobV9wX25kKSk7CisgICAgICB9CisKKyAgICAgIGlubGluZSBzdGF0aWMgbm9kZV9wb2ludGVyCisgICAgICBnZXRfbGFyZ2VyX3NpYmxpbmcobm9kZV9wb2ludGVyIHBfbmQpCisgICAgICB7CisJaW50ZXJuYWxfbm9kZV9wb2ludGVyIHBfcGFyZW50ID0KKwkgIHN0YXRpY19jYXN0PGludGVybmFsX25vZGVfcG9pbnRlcj4ocF9uZC0+bV9wX3BhcmVudCk7CisKKwl0eXBlbmFtZSBJbnRlcm5hbF9Ob2RlOjppdGVyYXRvciBpdCA9IHBfcGFyZW50LT5iZWdpbigpOworCXdoaWxlICgqaXQgIT0gcF9uZCkKKwkgICsraXQ7CisKKwl0eXBlbmFtZSBJbnRlcm5hbF9Ob2RlOjppdGVyYXRvciBuZXh0X2l0ID0gaXQ7CisJKytuZXh0X2l0OworCXJldHVybiAoKG5leHRfaXQgPT0gcF9wYXJlbnQtPmVuZCgpKT8gTlVMTCA6KiBuZXh0X2l0KTsKKyAgICAgIH0KKworICAgICAgaW5saW5lIHN0YXRpYyBub2RlX3BvaW50ZXIKKyAgICAgIGdldF9zbWFsbGVyX3NpYmxpbmcobm9kZV9wb2ludGVyIHBfbmQpCisgICAgICB7CisJaW50ZXJuYWxfbm9kZV9wb2ludGVyIHBfcGFyZW50ID0KKwkgIHN0YXRpY19jYXN0PGludGVybmFsX25vZGVfcG9pbnRlcj4ocF9uZC0+bV9wX3BhcmVudCk7CisKKwl0eXBlbmFtZSBJbnRlcm5hbF9Ob2RlOjppdGVyYXRvciBpdCA9IHBfcGFyZW50LT5iZWdpbigpOworCisJaWYgKCppdCA9PSBwX25kKQorCSAgcmV0dXJuIChOVUxMKTsKKwl0eXBlbmFtZSBJbnRlcm5hbF9Ob2RlOjppdGVyYXRvciBwcmV2X2l0OworCWRvCisJICB7CisJICAgIHByZXZfaXQgPSBpdDsKKwkgICAgKytpdDsKKwkgICAgaWYgKCppdCA9PSBwX25kKQorCSAgICAgIHJldHVybiAoKnByZXZfaXQpOworCSAgfQorCXdoaWxlICh0cnVlKTsKKworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChmYWxzZSk7CisJcmV0dXJuIChOVUxMKTsKKyAgICAgIH0KKworICAgICAgaW5saW5lIHN0YXRpYyBsZWFmX3BvaW50ZXIKKyAgICAgIGxlZnRtb3N0X2Rlc2NlbmRhbnQobm9kZV9wb2ludGVyIHBfbmQpCisgICAgICB7CisJaWYgKHBfbmQtPm1fdHlwZSA9PSBwYXRfdHJpZV9sZWFmX25vZGVfdHlwZSkKKwkgIHJldHVybiBzdGF0aWNfY2FzdDxsZWFmX3BvaW50ZXI+KHBfbmQpOworCXJldHVybiBzdGF0aWNfY2FzdDxpbnRlcm5hbF9ub2RlX3BvaW50ZXI+KHBfbmQpLT5sZWZ0bW9zdF9kZXNjZW5kYW50KCk7CisgICAgICB9CisKKyAgICAgIGlubGluZSBzdGF0aWMgbGVhZl9wb2ludGVyCisgICAgICByaWdodG1vc3RfZGVzY2VuZGFudChub2RlX3BvaW50ZXIgcF9uZCkKKyAgICAgIHsKKwlpZiAocF9uZC0+bV90eXBlID09IHBhdF90cmllX2xlYWZfbm9kZV90eXBlKQorCSAgcmV0dXJuIHN0YXRpY19jYXN0PGxlYWZfcG9pbnRlcj4ocF9uZCk7CisJcmV0dXJuIHN0YXRpY19jYXN0PGludGVybmFsX25vZGVfcG9pbnRlcj4ocF9uZCktPnJpZ2h0bW9zdF9kZXNjZW5kYW50KCk7CisgICAgICB9CisKKyAgICBwdWJsaWM6CisgICAgICBub2RlX3BvaW50ZXIgbV9wX25kOworICAgIH07CisKKyAgICAvLyBJdGVyYXRvci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlX1RyYWl0cywKKwkgICAgIGNsYXNzIE5vZGUsCisJICAgICBjbGFzcyBMZWFmLAorCSAgICAgY2xhc3MgSGVhZCwKKwkgICAgIGNsYXNzIEludGVybmFsX05vZGUsCisJICAgICBib29sIElzX0ZvcndhcmRfSXRlcmF0b3IsCisJICAgICBjbGFzcyBBbGxvY2F0b3I+CisgICAgY2xhc3MgcGF0X3RyaWVfaXRfIDogCisgICAgICBwdWJsaWMgUEJfRFNfQ09OU1RfSVRfQ19ERUMKKworICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8CisgICAgICBOb2RlPjo6b3RoZXI6OnBvaW50ZXIKKyAgICAgIG5vZGVfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8CisJTGVhZj46Om90aGVyOjpjb25zdF9wb2ludGVyCisgICAgICBjb25zdF9sZWFmX3BvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCUxlYWY+OjpvdGhlcjo6cG9pbnRlcgorICAgICAgbGVhZl9wb2ludGVyOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKwlIZWFkPjo6b3RoZXI6OnBvaW50ZXIKKyAgICAgIGhlYWRfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8CisJSW50ZXJuYWxfTm9kZT46Om90aGVyOjpwb2ludGVyCisgICAgICBpbnRlcm5hbF9ub2RlX3BvaW50ZXI7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIFR5cGVfVHJhaXRzOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgVHlwZV9UcmFpdHM6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBUeXBlX1RyYWl0czo6cG9pbnRlciBwb2ludGVyOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIFR5cGVfVHJhaXRzOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIFR5cGVfVHJhaXRzOjpyZWZlcmVuY2UgcmVmZXJlbmNlOworCisgICAgICBpbmxpbmUKKyAgICAgIHBhdF90cmllX2l0Xyhub2RlX3BvaW50ZXIgcF9uZCA9IE5VTEwpIDogUEJfRFNfQ09OU1RfSVRfQ19ERUMoKG5vZGVfcG9pbnRlcilwX25kKQorICAgICAgeyB9CisKKyAgICAgIGlubGluZQorICAgICAgcGF0X3RyaWVfaXRfKGNvbnN0IFBCX0RTX09ESVJfSVRfQ19ERUMmIG90aGVyKSA6IFBCX0RTX0NPTlNUX0lUX0NfREVDKG90aGVyLm1fcF9uZCkKKyAgICAgIHsgfQorCisgICAgICBpbmxpbmUKKyAgICAgIFBCX0RTX0lUX0NfREVDJiAKKyAgICAgIG9wZXJhdG9yPShjb25zdCBQQl9EU19JVF9DX0RFQyYgb3RoZXIpCisgICAgICB7CisJYmFzZV9pdF90eXBlOjptX3BfbmQgPSBvdGhlci5tX3BfbmQ7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBpbmxpbmUKKyAgICAgIFBCX0RTX0lUX0NfREVDJiAKKyAgICAgIG9wZXJhdG9yPShjb25zdCBQQl9EU19PRElSX0lUX0NfREVDJiBvdGhlcikKKyAgICAgIHsKKwliYXNlX2l0X3R5cGU6Om1fcF9uZCA9IG90aGVyLm1fcF9uZDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGlubGluZSBwb2ludGVyCisgICAgICBvcGVyYXRvci0+KCkgY29uc3QKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoYmFzZV9pdF90eXBlOjptX3BfbmQtPm1fdHlwZSA9PSBwYXRfdHJpZV9sZWFmX25vZGVfdHlwZSk7CisKKwlyZXR1cm4gJnN0YXRpY19jYXN0PGxlYWZfcG9pbnRlcj4oYmFzZV9pdF90eXBlOjptX3BfbmQpLT52YWx1ZSgpOworICAgICAgfQorCisgICAgICBpbmxpbmUgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChiYXNlX2l0X3R5cGU6Om1fcF9uZC0+bV90eXBlID09IHBhdF90cmllX2xlYWZfbm9kZV90eXBlKTsKKwlyZXR1cm4gc3RhdGljX2Nhc3Q8bGVhZl9wb2ludGVyPihiYXNlX2l0X3R5cGU6Om1fcF9uZCktPnZhbHVlKCk7CisgICAgICB9CisKKyAgICAgIGlubGluZSBQQl9EU19JVF9DX0RFQyYgCisgICAgICBvcGVyYXRvcisrKCkKKyAgICAgIHsKKwlQQl9EU19DT05TVF9JVF9DX0RFQzo6CisJICBvcGVyYXRvcisrKCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBpbmxpbmUgUEJfRFNfSVRfQ19ERUMKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeworCVBCX0RTX0lUX0NfREVDIHJldF9pdChiYXNlX2l0X3R5cGU6Om1fcF9uZCk7CisJb3BlcmF0b3IrKygpOworCXJldHVybiByZXRfaXQ7CisgICAgICB9CisKKyAgICAgIGlubGluZSBQQl9EU19JVF9DX0RFQyYgCisgICAgICBvcGVyYXRvci0tKCkKKyAgICAgIHsKKwlQQl9EU19DT05TVF9JVF9DX0RFQzo6b3BlcmF0b3ItLSgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgaW5saW5lIFBCX0RTX0lUX0NfREVDCisgICAgICBvcGVyYXRvci0tKGludCkKKyAgICAgIHsKKwlQQl9EU19JVF9DX0RFQyByZXRfaXQoYmFzZV9pdF90eXBlOjptX3BfbmQpOworCW9wZXJhdG9yLS0oKTsKKwlyZXR1cm4gcmV0X2l0OworICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiBQQl9EU19DT05TVF9JVF9DX0RFQyBiYXNlX2l0X3R5cGU7CisKKyAgICAgIGZyaWVuZCBjbGFzcyBQQl9EU19DTEFTU19DX0RFQzsKKyAgICB9OworCisjdW5kZWYgUEJfRFNfQ09OU1RfSVRfQ19ERUMKKyN1bmRlZiBQQl9EU19DT05TVF9PRElSX0lUX0NfREVDCisjdW5kZWYgUEJfRFNfSVRfQ19ERUMKKyN1bmRlZiBQQl9EU19PRElSX0lUX0NfREVDCisKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9wb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9wb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YmZlNDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3BvbGljeV9hY2Nlc3NfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw2MyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcG9saWN5X2FjY2Vzc19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGJpbl9zZWFyY2hfdHJlZV8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjplX2FjY2Vzc190cmFpdHMmIAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X2VfYWNjZXNzX3RyYWl0cygpCit7IHJldHVybiAqdGhpczsgfQorCitQQl9EU19DTEFTU19UX0RFQworY29uc3QgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmVfYWNjZXNzX3RyYWl0cyYgCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfZV9hY2Nlc3NfdHJhaXRzKCkgY29uc3QKK3sgcmV0dXJuICp0aGlzOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV91cGRhdGUmIAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X25vZGVfdXBkYXRlKCkKK3sgcmV0dXJuICp0aGlzOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitjb25zdCB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV91cGRhdGUmIAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X25vZGVfdXBkYXRlKCkgY29uc3QKK3sgcmV0dXJuICp0aGlzOyB9CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3JfZXJhc2VfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3JfZXJhc2VfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJlZGYyNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vcl9lcmFzZV9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDEwMyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcl9lcmFzZV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGJpbl9zZWFyY2hfdHJlZV8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CithY3R1YWxfZXJhc2Vfbm9kZShub2RlX3BvaW50ZXIgcF96KQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9zaXplID4gMCk7CisgIC0tbV9zaXplOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGVyYXNlX2V4aXN0aW5nKFBCX0RTX1YyRihwX3otPm1fdmFsdWUpKSk7CisgIHBfei0+fm5vZGUoKTsKKyAgc19ub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKHBfeiwgMSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordXBkYXRlX21pbl9tYXhfZm9yX2VyYXNlZF9ub2RlKG5vZGVfcG9pbnRlciBwX3opCit7CisgIGlmIChtX3NpemUgPT0gMSkKKyAgICB7CisgICAgICBtX3BfaGVhZC0+bV9wX2xlZnQgPSBtX3BfaGVhZC0+bV9wX3JpZ2h0ID0gbV9wX2hlYWQ7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGlmIChtX3BfaGVhZC0+bV9wX2xlZnQgPT0gcF96KQorICAgIHsKKyAgICAgIGl0ZXJhdG9yIGl0KHBfeik7CisgICAgICArK2l0OworICAgICAgbV9wX2hlYWQtPm1fcF9sZWZ0ID0gaXQubV9wX25kOworICAgIH0KKyAgZWxzZSBpZiAobV9wX2hlYWQtPm1fcF9yaWdodCA9PSBwX3opCisgICAgeworICAgICAgaXRlcmF0b3IgaXQocF96KTsKKyAgICAgIC0taXQ7CisgICAgICBtX3BfaGVhZC0+bV9wX3JpZ2h0ID0gaXQubV9wX25kOworICAgIH0KK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NsZWFyKCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQodHJ1ZSwgdHJ1ZSk7KQorICBjbGVhcl9pbXAobV9wX2hlYWQtPm1fcF9wYXJlbnQpOworICBtX3NpemUgPSAwOworICBpbml0aWFsaXplKCk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6Y2xlYXIoKTspCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKHRydWUsIHRydWUpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NsZWFyX2ltcChub2RlX3BvaW50ZXIgcF9uZCkKK3sKKyAgaWYgKHBfbmQgPT0gTlVMTCkKKyAgICByZXR1cm47CisgIGNsZWFyX2ltcChwX25kLT5tX3BfbGVmdCk7CisgIGNsZWFyX2ltcChwX25kLT5tX3BfcmlnaHQpOworICBwX25kLT5+Tm9kZSgpOworICBzX25vZGVfYWxsb2NhdG9yLmRlYWxsb2NhdGUocF9uZCwgMSk7Cit9CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vcm90YXRlX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9yb3RhdGVfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA4MDlmYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vcm90YXRlX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTUwIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSByb3RhdGVfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcHMgZm9yIHJvdGF0aW5nIG5vZGVzLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorcm90YXRlX2xlZnQobm9kZV9wb2ludGVyIHBfeCkKK3sKKyAgbm9kZV9wb2ludGVyIHBfeSA9IHBfeC0+bV9wX3JpZ2h0OworICBwX3gtPm1fcF9yaWdodCA9IHBfeS0+bV9wX2xlZnQ7CisKKyAgaWYgKHBfeS0+bV9wX2xlZnQgIT0gTlVMTCkKKyAgICBwX3ktPm1fcF9sZWZ0LT5tX3BfcGFyZW50ID0gcF94OworCisgIHBfeS0+bV9wX3BhcmVudCA9IHBfeC0+bV9wX3BhcmVudDsKKyAgaWYgKHBfeCA9PSBtX3BfaGVhZC0+bV9wX3BhcmVudCkKKyAgICBtX3BfaGVhZC0+bV9wX3BhcmVudCA9IHBfeTsKKyAgZWxzZSBpZiAocF94ID09IHBfeC0+bV9wX3BhcmVudC0+bV9wX2xlZnQpCisgICAgcF94LT5tX3BfcGFyZW50LT5tX3BfbGVmdCA9IHBfeTsKKyAgZWxzZQorICAgIHBfeC0+bV9wX3BhcmVudC0+bV9wX3JpZ2h0ID0gcF95OworCisgIHBfeS0+bV9wX2xlZnQgPSBwX3g7CisgIHBfeC0+bV9wX3BhcmVudCA9IHBfeTsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF9ub2RlX2NvbnNpc3RlbnQocF94KTspCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X25vZGVfY29uc2lzdGVudChwX3kpOykKKworICBhcHBseV91cGRhdGUocF94LCAoTm9kZV9VcGRhdGUqICl0aGlzKTsKKyAgYXBwbHlfdXBkYXRlKHBfeC0+bV9wX3BhcmVudCwgKE5vZGVfVXBkYXRlKiApdGhpcyk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorcm90YXRlX3JpZ2h0KG5vZGVfcG9pbnRlciBwX3gpCit7CisgIG5vZGVfcG9pbnRlciBwX3kgPSBwX3gtPm1fcF9sZWZ0OworICBwX3gtPm1fcF9sZWZ0ID0gcF95LT5tX3BfcmlnaHQ7CisKKyAgaWYgKHBfeS0+bV9wX3JpZ2h0ICE9IE5VTEwpCisgICAgcF95LT5tX3BfcmlnaHQtPm1fcF9wYXJlbnQgPSBwX3g7CisKKyAgcF95LT5tX3BfcGFyZW50ID0gcF94LT5tX3BfcGFyZW50OworICBpZiAocF94ID09IG1fcF9oZWFkLT5tX3BfcGFyZW50KQorICAgIG1fcF9oZWFkLT5tX3BfcGFyZW50ID0gcF95OworICBlbHNlIGlmIChwX3ggPT0gcF94LT5tX3BfcGFyZW50LT5tX3BfcmlnaHQpCisgICAgcF94LT5tX3BfcGFyZW50LT5tX3BfcmlnaHQgPSBwX3k7CisgIGVsc2UKKyAgICBwX3gtPm1fcF9wYXJlbnQtPm1fcF9sZWZ0ID0gcF95OworCisgIHBfeS0+bV9wX3JpZ2h0ID0gcF94OworICBwX3gtPm1fcF9wYXJlbnQgPSBwX3k7CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfbm9kZV9jb25zaXN0ZW50KHBfeCk7KQorICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF9ub2RlX2NvbnNpc3RlbnQocF95KTspCisKKyAgYXBwbHlfdXBkYXRlKHBfeCwgKE5vZGVfVXBkYXRlKiApdGhpcyk7CisgIGFwcGx5X3VwZGF0ZShwX3gtPm1fcF9wYXJlbnQsIChOb2RlX1VwZGF0ZSogKXRoaXMpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JvdGF0ZV9wYXJlbnQobm9kZV9wb2ludGVyIHBfbmQpCit7CisgIG5vZGVfcG9pbnRlciBwX3BhcmVudCA9IHBfbmQtPm1fcF9wYXJlbnQ7CisgIGlmIChwX25kID09IHBfcGFyZW50LT5tX3BfbGVmdCkKKyAgICByb3RhdGVfcmlnaHQocF9wYXJlbnQpOworICBlbHNlCisgICAgcm90YXRlX2xlZnQocF9wYXJlbnQpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9wYXJlbnQtPm1fcF9wYXJlbnQgPSBwX25kKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQtPm1fcF9sZWZ0ID09IHBfcGFyZW50IHx8IHBfbmQtPm1fcF9yaWdodCA9PSBwX3BhcmVudCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXBwbHlfdXBkYXRlKG5vZGVfcG9pbnRlciAvKnBfbmQqLywgX19nbnVfcGJkczo6bnVsbF9ub2RlX3VwZGF0ZSogIC8qcF91cGRhdGUqLykKK3sgfQorCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgTm9kZV9VcGRhdGVfPgoraW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2FwcGx5X3VwZGF0ZShub2RlX3BvaW50ZXIgcF9uZCwgTm9kZV9VcGRhdGVfKiBwX3VwZGF0ZSkKK3sKKyAgcF91cGRhdGUtPm9wZXJhdG9yKCkoJiBQQl9EU19WMkYocF9uZC0+bV92YWx1ZSksKHBfbmQtPm1fcF9sZWZ0ID09IE5VTEwpID8KKwkJCU5VTEwgOgorCQkJJiBQQl9EU19WMkYocF9uZC0+bV9wX2xlZnQtPm1fdmFsdWUpLChwX25kLT5tX3BfcmlnaHQgPT0gTlVMTCkgPworCQkJTlVMTCA6CisJCQkmIFBCX0RTX1YyRihwX25kLT5tX3BfcmlnaHQtPm1fdmFsdWUpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIE5vZGVfVXBkYXRlXz4KK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cit1cGRhdGVfdG9fdG9wKG5vZGVfcG9pbnRlciBwX25kLCBOb2RlX1VwZGF0ZV8qIHBfdXBkYXRlKQoreworICB3aGlsZSAocF9uZCAhPSBtX3BfaGVhZCkKKyAgICB7CisgICAgICBhcHBseV91cGRhdGUocF9uZCwgcF91cGRhdGUpOworICAgICAgcF9uZCA9IHBfbmQtPm1fcF9wYXJlbnQ7CisgICAgfQorfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3VwZGF0ZV90b190b3Aobm9kZV9wb2ludGVyIC8qcF9uZCovLCBfX2dudV9wYmRzOjpudWxsX25vZGVfdXBkYXRlKiAgLypwX3VwZGF0ZSovKQoreyB9CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vc3BsaXRfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3NwbGl0X2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NzlhNGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3NwbGl0X2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMjU0IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBzcGxpdF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGJpbl9zZWFyY2hfdHJlZV8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3NwbGl0KGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXksIFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspOworICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpOyk7CisgIHNwbGl0X2pvaW5fYnJhbmNoX2JhZyBiYWc7CisgIGxlYWZfcG9pbnRlciBwX3NwbGl0X2xmID0gc3BsaXRfcHJlcChyX2tleSwgb3RoZXIsIGJhZyk7CisgIGlmIChwX3NwbGl0X2xmID09IE5VTEwpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGJhZy5lbXB0eSgpKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspCisgICAgICByZXR1cm47CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCghYmFnLmVtcHR5KCkpOworICBvdGhlci5jbGVhcigpOworICBtX3BfaGVhZC0+bV9wX3BhcmVudCA9IHJlY19zcGxpdChtX3BfaGVhZC0+bV9wX3BhcmVudCwKKwkJCQkgICBwcmVmX2JlZ2luKHBfc3BsaXRfbGYpLAorCQkJCSAgIHByZWZfZW5kKHBfc3BsaXRfbGYpLAorCQkJCSAgIG90aGVyLAorCQkJCSAgIGJhZyk7CisKKyAgbV9wX2hlYWQtPm1fcF9wYXJlbnQtPm1fcF9wYXJlbnQgPSBtX3BfaGVhZDsKKworICBvdGhlci5tX3BfaGVhZC0+bV9wX21heCA9IG1fcF9oZWFkLT5tX3BfbWF4OworICBtX3BfaGVhZC0+bV9wX21heCA9IHJpZ2h0bW9zdF9kZXNjZW5kYW50KG1fcF9oZWFkLT5tX3BfcGFyZW50KTsKKyAgb3RoZXIubV9wX2hlYWQtPm1fcF9taW4gPQorICAgIG90aGVyLmxlZnRtb3N0X2Rlc2NlbmRhbnQob3RoZXIubV9wX2hlYWQtPm1fcF9wYXJlbnQpOworCisgIG90aGVyLm1fc2l6ZSA9IHN0ZDo6ZGlzdGFuY2Uob3RoZXIuUEJfRFNfQ0xBU1NfQ19ERUM6OmJlZ2luKCksCisJCQkgICAgICAgb3RoZXIuUEJfRFNfQ0xBU1NfQ19ERUM6OmVuZCgpKTsKKyAgbV9zaXplIC09IG90aGVyLm1fc2l6ZTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspOworICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpOyk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bGVhZl9wb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6CitzcGxpdF9wcmVwKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXksIFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlciwgc3BsaXRfam9pbl9icmFuY2hfYmFnJiByX2JhZykKK3sKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHJfYmFnLmVtcHR5KCkpOworICBpZiAobV9zaXplID09IDApCisgICAgeworICAgICAgb3RoZXIuY2xlYXIoKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKCk7KTsKKyAgICAgIHJldHVybiAoTlVMTCk7CisgICAgfQorCisgIGlmIChzeW50aF9lX2FjY2Vzc190cmFpdHM6OmNtcF9rZXlzKHJfa2V5LAorCQkJCSAgICAgIFBCX0RTX1YyRihzdGF0aWNfY2FzdDxjb25zdF9sZWFmX3BvaW50ZXI+KG1fcF9oZWFkLT5tX3BfbWluKS0+dmFsdWUoKSkpKQorICAgIHsKKyAgICAgIG90aGVyLmNsZWFyKCk7CisgICAgICB2YWx1ZV9zd2FwKG90aGVyKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKCk7KTsKKyAgICAgIHJldHVybiAoTlVMTCk7CisgICAgfQorCisgIGlmICghc3ludGhfZV9hY2Nlc3NfdHJhaXRzOjpjbXBfa2V5cyhyX2tleSwKKwkJCQkgICAgICAgUEJfRFNfVjJGKHN0YXRpY19jYXN0PGNvbnN0X2xlYWZfcG9pbnRlcj4obV9wX2hlYWQtPm1fcF9tYXgpLT52YWx1ZSgpKSkpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspOworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspOworICAgICAgcmV0dXJuIChOVUxMKTsKKyAgICB9CisKKyAgaXRlcmF0b3IgaXQgPSBsb3dlcl9ib3VuZChyX2tleSk7CisKKyAgaWYgKCFzeW50aF9lX2FjY2Vzc190cmFpdHM6OmVxdWFsX2tleXMoUEJfRFNfVjJGKCppdCksIHJfa2V5KSkKKyAgICAtLWl0OworCisgIG5vZGVfcG9pbnRlciBwX25kID0gaXQubV9wX25kOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV90eXBlID09IHBhdF90cmllX2xlYWZfbm9kZV90eXBlKTsKKyAgbGVhZl9wb2ludGVyIHBfcmV0X2wgPSBzdGF0aWNfY2FzdDxsZWFmX3BvaW50ZXI+KHBfbmQpOworICB3aGlsZSAocF9uZC0+bV90eXBlICE9IHBhdF90cmllX2hlYWRfbm9kZV90eXBlKQorICAgIHsKKyAgICAgIHJfYmFnLmFkZF9icmFuY2goKTsKKyAgICAgIHBfbmQgPSBwX25kLT5tX3BfcGFyZW50OworICAgIH0KKyAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpzcGxpdChyX2tleSwoc3ludGhfZV9hY2Nlc3NfdHJhaXRzJiApKCp0aGlzKSwgb3RoZXIpOykKKworICByZXR1cm4gKHBfcmV0X2wpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVjX3NwbGl0KG5vZGVfcG9pbnRlciBwX25kLCBjb25zdF9lX2l0ZXJhdG9yIGJfaXQsIGNvbnN0X2VfaXRlcmF0b3IgZV9pdCwgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyLCBzcGxpdF9qb2luX2JyYW5jaF9iYWcmIHJfYmFnKQoreworICBpZiAocF9uZC0+bV90eXBlID09IHBhdF90cmllX2xlYWZfbm9kZV90eXBlKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChvdGhlci5tX3BfaGVhZC0+bV9wX3BhcmVudCA9PSBOVUxMKTsKKyAgICAgIHJldHVybiAocF9uZCk7CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kLT5tX3R5cGUgPT0gcGF0X3RyaWVfaW50ZXJuYWxfbm9kZV90eXBlKTsKKyAgaW50ZXJuYWxfbm9kZV9wb2ludGVyIHBfaW50ZXJuYWxfbmQgPSBzdGF0aWNfY2FzdDxpbnRlcm5hbF9ub2RlX3BvaW50ZXI+KHBfbmQpOworCisgIG5vZGVfcG9pbnRlciBwX2NoaWxkX3JldCA9IHJlY19zcGxpdChwX2ludGVybmFsX25kLT5nZXRfY2hpbGRfbm9kZShiX2l0LCBlX2l0LCB0aGlzKSwgYl9pdCwgZV9pdCwgb3RoZXIsIHJfYmFnKTsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKHBfY2hpbGRfcmV0LT5hc3NlcnRfdmFsaWQodGhpcyk7KQorICBwX2ludGVybmFsX25kLT5yZXBsYWNlX2NoaWxkKHBfY2hpbGRfcmV0LCBiX2l0LCBlX2l0LCB0aGlzKTsKKyAgYXBwbHlfdXBkYXRlKHBfaW50ZXJuYWxfbmQsIChub2RlX3VwZGF0ZSogKXRoaXMpOworCisgIHR5cGVuYW1lIGludGVybmFsX25vZGU6Oml0ZXJhdG9yIGNoaWxkX2l0ICA9CisgICAgcF9pbnRlcm5hbF9uZC0+Z2V0X2NoaWxkX2l0KGJfaXQsIGVfaXQsIHRoaXMpOworCisgIGNvbnN0IHNpemVfdHlwZSBsaHNfbnVtX2NoaWxkcmVuID0KKyAgICBzdGQ6OmRpc3RhbmNlKHBfaW50ZXJuYWxfbmQtPmJlZ2luKCksIGNoaWxkX2l0KSArIDE7CisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGxoc19udW1fY2hpbGRyZW4gPiAwKTsKKworICBzaXplX3R5cGUgcmhzX251bV9jaGlsZHJlbiA9CisgICAgc3RkOjpkaXN0YW5jZShwX2ludGVybmFsX25kLT5iZWdpbigpLCBwX2ludGVybmFsX25kLT5lbmQoKSkgLQorICAgIGxoc19udW1fY2hpbGRyZW47CisKKyAgaWYgKHJoc19udW1fY2hpbGRyZW4gPT0gMCkKKyAgICB7CisgICAgICBhcHBseV91cGRhdGUocF9pbnRlcm5hbF9uZCwgKG5vZGVfdXBkYXRlKiApdGhpcyk7CisgICAgICByZXR1cm4gKHBfaW50ZXJuYWxfbmQpOworICAgIH0KKworICArK2NoaWxkX2l0OworICBvdGhlci5zcGxpdF9pbnNlcnRfYnJhbmNoKHBfaW50ZXJuYWxfbmQtPmdldF9lX2luZCgpLAorCQkJICAgIGJfaXQsIGNoaWxkX2l0LCByaHNfbnVtX2NoaWxkcmVuLCByX2JhZyk7CisKKyAgY2hpbGRfaXQgPSBwX2ludGVybmFsX25kLT5nZXRfY2hpbGRfaXQoYl9pdCwgZV9pdCwgdGhpcyk7CisgICsrY2hpbGRfaXQ7CisgIHdoaWxlIChyaHNfbnVtX2NoaWxkcmVuICE9IDApCisgICAgeworICAgICAgY2hpbGRfaXQgPSBwX2ludGVybmFsX25kLT5yZW1vdmVfY2hpbGQoY2hpbGRfaXQpOworICAgICAgLS1yaHNfbnVtX2NoaWxkcmVuOworICAgIH0KKworICBhcHBseV91cGRhdGUocF9pbnRlcm5hbF9uZCwgKG5vZGVfdXBkYXRlKiApdGhpcyk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChzdGQ6OmRpc3RhbmNlKHBfaW50ZXJuYWxfbmQtPmJlZ2luKCksCisJCQkJICAgICAgcF9pbnRlcm5hbF9uZC0+ZW5kKCkpID49IDEpOworCisgIGlmIChzdGQ6OmRpc3RhbmNlKHBfaW50ZXJuYWxfbmQtPmJlZ2luKCksIHBfaW50ZXJuYWxfbmQtPmVuZCgpKSA+IDEpCisgICAgeworICAgICAgcF9pbnRlcm5hbF9uZC0+dXBkYXRlX3ByZWZpeGVzKHRoaXMpOworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShwX2ludGVybmFsX25kLT5hc3NlcnRfdmFsaWQodGhpcyk7KQorICAgICAgYXBwbHlfdXBkYXRlKHBfaW50ZXJuYWxfbmQsIChub2RlX3VwZGF0ZSogKXRoaXMpOworICAgICAgcmV0dXJuIChwX2ludGVybmFsX25kKTsKKyAgICB9CisKKyAgbm9kZV9wb2ludGVyIHBfcmV0ID0qIHBfaW50ZXJuYWxfbmQtPmJlZ2luKCk7CisgIHBfaW50ZXJuYWxfbmQtPn5pbnRlcm5hbF9ub2RlKCk7CisgIHNfaW50ZXJuYWxfbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShwX2ludGVybmFsX25kLCAxKTsKKyAgYXBwbHlfdXBkYXRlKHBfcmV0LCAobm9kZV91cGRhdGUqICl0aGlzKTsKKyAgcmV0dXJuIChwX3JldCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitzcGxpdF9pbnNlcnRfYnJhbmNoKHNpemVfdHlwZSBlX2luZCwgY29uc3RfZV9pdGVyYXRvciBiX2l0LCB0eXBlbmFtZSBpbnRlcm5hbF9ub2RlOjppdGVyYXRvciBjaGlsZF9iX2l0LCBzaXplX3R5cGUgbnVtX2NoaWxkcmVuLCBzcGxpdF9qb2luX2JyYW5jaF9iYWcmIHJfYmFnKQoreworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgIGlmIChtX3BfaGVhZC0+bV9wX3BhcmVudCAhPSBOVUxMKQorICAgIG1fcF9oZWFkLT5tX3BfcGFyZW50LT5hc3NlcnRfdmFsaWQodGhpcyk7CisjZW5kaWYgCisKKyAgY29uc3Qgc2l6ZV90eXBlIHRvdGFsX251bV9jaGlsZHJlbiA9KChtX3BfaGVhZC0+bV9wX3BhcmVudCA9PSBOVUxMKT8gMCA6IDEpICsgbnVtX2NoaWxkcmVuOworCisgIGlmICh0b3RhbF9udW1fY2hpbGRyZW4gPT0gMCkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9wX2hlYWQtPm1fcF9wYXJlbnQgPT0gTlVMTCk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGlmICh0b3RhbF9udW1fY2hpbGRyZW4gPT0gMSkKKyAgICB7CisgICAgICBpZiAobV9wX2hlYWQtPm1fcF9wYXJlbnQgIT0gTlVMTCkKKyAgICAgICAgeworCSAgX0dMSUJDWFhfREVCVUdfT05MWShtX3BfaGVhZC0+bV9wX3BhcmVudC0+YXNzZXJ0X3ZhbGlkKHRoaXMpOykKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF9oZWFkLT5tX3BfcGFyZW50ID09IE5VTEwpOworICAgICAgbV9wX2hlYWQtPm1fcF9wYXJlbnQgPSogY2hpbGRfYl9pdDsKKyAgICAgIG1fcF9oZWFkLT5tX3BfcGFyZW50LT5tX3BfcGFyZW50ID0gbV9wX2hlYWQ7CisgICAgICBhcHBseV91cGRhdGUobV9wX2hlYWQtPm1fcF9wYXJlbnQsIChub2RlX3VwZGF0ZSogKXRoaXMpOworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShtX3BfaGVhZC0+bV9wX3BhcmVudC0+YXNzZXJ0X3ZhbGlkKHRoaXMpOykKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHRvdGFsX251bV9jaGlsZHJlbiA+IDEpOworICBpbnRlcm5hbF9ub2RlX3BvaW50ZXIgcF9uZXdfcm9vdCA9IHJfYmFnLmdldF9icmFuY2goKTsKKyAgbmV3IChwX25ld19yb290KSBpbnRlcm5hbF9ub2RlKGVfaW5kLCBiX2l0KTsKKyAgc2l6ZV90eXBlIG51bV9pbnNlcnRlZCA9IDA7CisgIHdoaWxlIChudW1faW5zZXJ0ZWQrKyA8IG51bV9jaGlsZHJlbikKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKCgqY2hpbGRfYl9pdCktPmFzc2VydF92YWxpZCh0aGlzKTspCisgICAgICAgIHBfbmV3X3Jvb3QtPmFkZF9jaGlsZCgqY2hpbGRfYl9pdCwgcHJlZl9iZWdpbigqY2hpbGRfYl9pdCksCisJCQkgICAgICBwcmVmX2VuZCgqY2hpbGRfYl9pdCksIHRoaXMpOworICAgICAgKytjaGlsZF9iX2l0OworICAgIH0KKworICBpZiAobV9wX2hlYWQtPm1fcF9wYXJlbnQgIT0gTlVMTCkKKyAgICBwX25ld19yb290LT5hZGRfY2hpbGQobV9wX2hlYWQtPm1fcF9wYXJlbnQsIAorCQkJICBwcmVmX2JlZ2luKG1fcF9oZWFkLT5tX3BfcGFyZW50KSwKKwkJCSAgcHJlZl9lbmQobV9wX2hlYWQtPm1fcF9wYXJlbnQpLCB0aGlzKTsKKworICBtX3BfaGVhZC0+bV9wX3BhcmVudCA9IHBfbmV3X3Jvb3Q7CisgIHBfbmV3X3Jvb3QtPm1fcF9wYXJlbnQgPSBtX3BfaGVhZDsKKyAgYXBwbHlfdXBkYXRlKG1fcF9oZWFkLT5tX3BfcGFyZW50LCAobm9kZV91cGRhdGUqICl0aGlzKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShtX3BfaGVhZC0+bV9wX3BhcmVudC0+YXNzZXJ0X3ZhbGlkKHRoaXMpOykKK30KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vc3BsaXRfam9pbl9icmFuY2hfYmFnLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vc3BsaXRfam9pbl9icmFuY2hfYmFnLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2VjYWU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9zcGxpdF9qb2luX2JyYW5jaF9iYWcuaHBwCkBAIC0wLDAgKzEsOTMgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHNwbGl0X2pvaW5fYnJhbmNoX2JhZy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBwYXRfdHJpZV8uCisgKi8KKworY2xhc3Mgc3BsaXRfam9pbl9icmFuY2hfYmFnCit7Citwcml2YXRlOgorICB0eXBlZGVmCisgIHN0ZDo6bGlzdDwKKyAgaW50ZXJuYWxfbm9kZV9wb2ludGVyLAorICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKyAgaW50ZXJuYWxfbm9kZV9wb2ludGVyPjo6b3RoZXI+CisgIGJhZ190OworCitwdWJsaWM6CisKKyAgdm9pZAorICBhZGRfYnJhbmNoKCkKKyAgeworICAgIGludGVybmFsX25vZGVfcG9pbnRlciBwX25kID0gc19pbnRlcm5hbF9ub2RlX2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsKKyAgICBfX3RyeQorICAgICAgeworCW1fYmFnLnB1c2hfYmFjayhwX25kKTsKKyAgICAgIH0KKyAgICBfX2NhdGNoKC4uLikKKyAgICAgIHsKKwlzX2ludGVybmFsX25vZGVfYWxsb2NhdG9yLmRlYWxsb2NhdGUocF9uZCwgMSk7CisJX190aHJvd19leGNlcHRpb25fYWdhaW47CisgICAgICB9CisgIH0KKworICBpbnRlcm5hbF9ub2RlX3BvaW50ZXIKKyAgZ2V0X2JyYW5jaCgpCisgIHsKKyAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoIW1fYmFnLmVtcHR5KCkpOworICAgIGludGVybmFsX25vZGVfcG9pbnRlciBwX25kID0qIG1fYmFnLmJlZ2luKCk7CisgICAgbV9iYWcucG9wX2Zyb250KCk7CisgICAgcmV0dXJuIHBfbmQ7CisgIH0KKworICB+c3BsaXRfam9pbl9icmFuY2hfYmFnKCkKKyAgeworICAgIHdoaWxlICghbV9iYWcuZW1wdHkoKSkKKyAgICAgIHsKKwlpbnRlcm5hbF9ub2RlX3BvaW50ZXIgcF9uZCA9KiBtX2JhZy5iZWdpbigpOworCXNfaW50ZXJuYWxfbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShwX25kLCAxKTsKKwltX2JhZy5wb3BfZnJvbnQoKTsKKyAgICAgIH0KKyAgfQorCisgIGlubGluZSBib29sCisgIGVtcHR5KCkgY29uc3QKKyAgeyByZXR1cm4gbV9iYWcuZW1wdHkoKTsgfQorCitwcml2YXRlOgorICBiYWdfdCBtX2JhZzsKK307CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3N5bnRoX2VfYWNjZXNzX3RyYWl0cy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3N5bnRoX2VfYWNjZXNzX3RyYWl0cy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJmNWYxMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vc3ludGhfZV9hY2Nlc3NfdHJhaXRzLmhwcApAQCAtMCwwICsxLDIyOSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgc3ludGhfZV9hY2Nlc3NfdHJhaXRzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGEgcGF0cmljaWEgdHJlZS4KKyAqLworCisjaWZuZGVmIFBCX0RTX1NZTlRIX0VfQUNDRVNTX1RSQUlUU19IUFAKKyNkZWZpbmUgUEJfRFNfU1lOVEhfRV9BQ0NFU1NfVFJBSVRTX0hQUAorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90eXBlX3V0aWxzLmhwcD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisKKyNkZWZpbmUgUEJfRFNfU1lOVEhfRV9BQ0NFU1NfVFJBSVRTX1RfREVDCQkJCVwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlX1RyYWl0cywgYm9vbCBTZXQsIGNsYXNzIEVfQWNjZXNzX1RyYWl0cz4KKworI2RlZmluZSBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfQ19ERUMJCQkJXAorICAgIHN5bnRoX2VfYWNjZXNzX3RyYWl0czwJCQkJCQlcCisJCQkJCQlUeXBlX1RyYWl0cywJCVwKKwkJCQkJCVNldCwJCQlcCisJCQkJCQlFX0FjY2Vzc19UcmFpdHM+CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlX1RyYWl0cywgYm9vbCBTZXQsIGNsYXNzIEVfQWNjZXNzX1RyYWl0cz4KKyAgICBzdHJ1Y3Qgc3ludGhfZV9hY2Nlc3NfdHJhaXRzIDogcHVibGljIEVfQWNjZXNzX1RyYWl0cworICAgIHsKKworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIEVfQWNjZXNzX1RyYWl0cyBiYXNlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgVHlwZV9UcmFpdHMgdHlwZV90cmFpdHM7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHlwZV90cmFpdHM6OmNvbnN0X2tleV9yZWZlcmVuY2UgY29uc3Rfa2V5X3JlZmVyZW5jZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0eXBlX3RyYWl0czo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHN5bnRoX2VfYWNjZXNzX3RyYWl0cygpOworCisgICAgICBzeW50aF9lX2FjY2Vzc190cmFpdHMoY29uc3QgRV9BY2Nlc3NfVHJhaXRzJiByX3RyYWl0cyk7CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBlcXVhbF9wcmVmaXhlcyh0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGJfbCwgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9pdGVyYXRvciBlX2wsIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfaXRlcmF0b3IgYl9yLCB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGVfciwgYm9vbCBjb21wYXJlX2FmdGVyID0gdHJ1ZSkgY29uc3Q7CisKKyAgICAgIGJvb2wKKyAgICAgIGVxdWFsX2tleXMoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2xoc19rZXksIGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9yaHNfa2V5KSBjb25zdDsKKworICAgICAgYm9vbAorICAgICAgY21wX3ByZWZpeGVzKHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfaXRlcmF0b3IgYl9sLCB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGVfbCwgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9pdGVyYXRvciBiX3IsIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfaXRlcmF0b3IgZV9yLCBib29sIGNvbXBhcmVfYWZ0ZXIgPSBmYWxzZSkgY29uc3Q7CisKKyAgICAgIGJvb2wKKyAgICAgIGNtcF9rZXlzKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9saHNfa2V5LCBjb25zdF9rZXlfcmVmZXJlbmNlIHJfcmhzX2tleSkgY29uc3Q7CisKKyAgICAgIGlubGluZSBzdGF0aWMgY29uc3Rfa2V5X3JlZmVyZW5jZQorICAgICAgZXh0cmFjdF9rZXkoY29uc3RfcmVmZXJlbmNlIHJfdmFsKTsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICBib29sCisgICAgICBvcGVyYXRvcigpKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9saHMsIGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9yaHMpOworI2VuZGlmCisKKyAgICBwcml2YXRlOgorICAgICAgaW5saW5lIHN0YXRpYyBjb25zdF9rZXlfcmVmZXJlbmNlCisgICAgICBleHRyYWN0X2tleShjb25zdF9yZWZlcmVuY2Ugcl92YWwsIHRydWVfdHlwZSk7CisKKyAgICAgIGlubGluZSBzdGF0aWMgY29uc3Rfa2V5X3JlZmVyZW5jZQorICAgICAgZXh0cmFjdF9rZXkoY29uc3RfcmVmZXJlbmNlIHJfdmFsLCBmYWxzZV90eXBlKTsKKworICAgIHByaXZhdGU6CisgICAgICBzdGF0aWMgaW50ZWdyYWxfY29uc3RhbnQ8aW50LFNldD4gc19zZXRfaW5kOworICAgIH07CisKKyAgICBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfVF9ERUMKKyAgICBpbnRlZ3JhbF9jb25zdGFudDxpbnQsU2V0PgorICAgIFBCX0RTX1NZTlRIX0VfQUNDRVNTX1RSQUlUU19DX0RFQzo6c19zZXRfaW5kOworCisgICAgUEJfRFNfU1lOVEhfRV9BQ0NFU1NfVFJBSVRTX1RfREVDCisgICAgUEJfRFNfU1lOVEhfRV9BQ0NFU1NfVFJBSVRTX0NfREVDOjoKKyAgICBzeW50aF9lX2FjY2Vzc190cmFpdHMoKQorICAgIHsgfQorCisgICAgUEJfRFNfU1lOVEhfRV9BQ0NFU1NfVFJBSVRTX1RfREVDCisgICAgUEJfRFNfU1lOVEhfRV9BQ0NFU1NfVFJBSVRTX0NfREVDOjoKKyAgICBzeW50aF9lX2FjY2Vzc190cmFpdHMoY29uc3QgRV9BY2Nlc3NfVHJhaXRzJiByX3RyYWl0cykgOgorICAgICAgRV9BY2Nlc3NfVHJhaXRzKHJfdHJhaXRzKQorICAgIHsgfQorCisgICAgUEJfRFNfU1lOVEhfRV9BQ0NFU1NfVFJBSVRTX1RfREVDCisgICAgaW5saW5lIGJvb2wKKyAgICBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfQ19ERUM6OgorICAgIGVxdWFsX3ByZWZpeGVzKHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfaXRlcmF0b3IgYl9sLCB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGVfbCwgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9pdGVyYXRvciBiX3IsIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfaXRlcmF0b3IgZV9yLCBib29sIGNvbXBhcmVfYWZ0ZXIgLyo9IGZhbHNlICovKSBjb25zdAorICAgIHsKKyAgICAgIHdoaWxlIChiX2wgIT0gZV9sKQorCXsKKwkgIGlmIChiX3IgPT0gZV9yKQorCSAgICByZXR1cm4gKGZhbHNlKTsKKwkgIGlmIChiYXNlX3R5cGU6OmVfcG9zKCpiX2wpICE9IGJhc2VfdHlwZTo6ZV9wb3MoKmJfcikpCisJICAgIHJldHVybiAoZmFsc2UpOworCSAgKytiX2w7CisJICArK2JfcjsKKwl9CisgICAgICByZXR1cm4gKCFjb21wYXJlX2FmdGVyIHx8IGJfciA9PSBlX3IpOworICAgIH0KKworICAgIFBCX0RTX1NZTlRIX0VfQUNDRVNTX1RSQUlUU19UX0RFQworICAgIGJvb2wKKyAgICBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfQ19ERUM6OgorICAgIGVxdWFsX2tleXMoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2xoc19rZXksIGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9yaHNfa2V5KSBjb25zdAorICAgIHsKKyAgICAgIHJldHVybiAoZXF1YWxfcHJlZml4ZXMoYmFzZV90eXBlOjpiZWdpbihyX2xoc19rZXkpLAorCQkJICAgICBiYXNlX3R5cGU6OmVuZChyX2xoc19rZXkpLAorCQkJICAgICBiYXNlX3R5cGU6OmJlZ2luKHJfcmhzX2tleSksCisJCQkgICAgIGJhc2VfdHlwZTo6ZW5kKHJfcmhzX2tleSksCisJCQkgICAgIHRydWUpKTsKKyAgICB9CisKKyAgICBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfVF9ERUMKKyAgICBib29sCisgICAgUEJfRFNfU1lOVEhfRV9BQ0NFU1NfVFJBSVRTX0NfREVDOjoKKyAgICBjbXBfcHJlZml4ZXModHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9pdGVyYXRvciBiX2wsIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfaXRlcmF0b3IgZV9sLCB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGJfciwgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9pdGVyYXRvciBlX3IsIGJvb2wgY29tcGFyZV9hZnRlciAvKiA9IGZhbHNlKi8pIGNvbnN0CisgICAgeworICAgICAgd2hpbGUgKGJfbCAhPSBlX2wpCisJeworCSAgaWYgKGJfciA9PSBlX3IpCisJICAgIHJldHVybiAoZmFsc2UpOworCSAgY29uc3QgdHlwZW5hbWUgYmFzZV90eXBlOjpzaXplX3R5cGUgbF9wb3MgPQorCSAgICBiYXNlX3R5cGU6OmVfcG9zKCpiX2wpOworCSAgY29uc3QgdHlwZW5hbWUgYmFzZV90eXBlOjpzaXplX3R5cGUgcl9wb3MgPQorCSAgICBiYXNlX3R5cGU6OmVfcG9zKCpiX3IpOworCSAgaWYgKGxfcG9zICE9IHJfcG9zKQorCSAgICByZXR1cm4gKGxfcG9zIDwgcl9wb3MpOworCSAgKytiX2w7CisJICArK2JfcjsKKwl9CisKKyAgICAgIGlmICghY29tcGFyZV9hZnRlcikKKwlyZXR1cm4gKGZhbHNlKTsKKyAgICAgIHJldHVybiAoYl9yICE9IGVfcik7CisgICAgfQorCisgICAgUEJfRFNfU1lOVEhfRV9BQ0NFU1NfVFJBSVRTX1RfREVDCisgICAgYm9vbAorICAgIFBCX0RTX1NZTlRIX0VfQUNDRVNTX1RSQUlUU19DX0RFQzo6CisgICAgY21wX2tleXMoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2xoc19rZXksIGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9yaHNfa2V5KSBjb25zdAorICAgIHsKKyAgICAgIHJldHVybiAoY21wX3ByZWZpeGVzKGJhc2VfdHlwZTo6YmVnaW4ocl9saHNfa2V5KSwKKwkJCSAgIGJhc2VfdHlwZTo6ZW5kKHJfbGhzX2tleSksCisJCQkgICBiYXNlX3R5cGU6OmJlZ2luKHJfcmhzX2tleSksCisJCQkgICBiYXNlX3R5cGU6OmVuZChyX3Joc19rZXkpLAorCQkJICAgdHJ1ZSkpOworICAgIH0KKworICAgIFBCX0RTX1NZTlRIX0VfQUNDRVNTX1RSQUlUU19UX0RFQworICAgIGlubGluZSB0eXBlbmFtZSBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfQ19ERUM6OmNvbnN0X2tleV9yZWZlcmVuY2UKKyAgICBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfQ19ERUM6OgorICAgIGV4dHJhY3Rfa2V5KGNvbnN0X3JlZmVyZW5jZSByX3ZhbCkKKyAgICB7CisgICAgICByZXR1cm4gKGV4dHJhY3Rfa2V5KHJfdmFsLCBzX3NldF9pbmQpKTsKKyAgICB9CisKKyAgICBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfVF9ERUMKKyAgICBpbmxpbmUgdHlwZW5hbWUgUEJfRFNfU1lOVEhfRV9BQ0NFU1NfVFJBSVRTX0NfREVDOjpjb25zdF9rZXlfcmVmZXJlbmNlCisgICAgUEJfRFNfU1lOVEhfRV9BQ0NFU1NfVFJBSVRTX0NfREVDOjoKKyAgICBleHRyYWN0X2tleShjb25zdF9yZWZlcmVuY2Ugcl92YWwsIHRydWVfdHlwZSkKKyAgICB7CisgICAgICByZXR1cm4gKHJfdmFsKTsKKyAgICB9CisKKyAgICBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfVF9ERUMKKyAgICBpbmxpbmUgdHlwZW5hbWUgUEJfRFNfU1lOVEhfRV9BQ0NFU1NfVFJBSVRTX0NfREVDOjpjb25zdF9rZXlfcmVmZXJlbmNlCisgICAgUEJfRFNfU1lOVEhfRV9BQ0NFU1NfVFJBSVRTX0NfREVDOjoKKyAgICBleHRyYWN0X2tleShjb25zdF9yZWZlcmVuY2Ugcl92YWwsIGZhbHNlX3R5cGUpCisgICAgeworICAgICAgcmV0dXJuIChyX3ZhbC5maXJzdCk7CisgICAgfQorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfVF9ERUMKKyAgICBib29sCisgICAgUEJfRFNfU1lOVEhfRV9BQ0NFU1NfVFJBSVRTX0NfREVDOjoKKyAgICBvcGVyYXRvcigpKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9saHMsIGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9yaHMpCisgICAgeworICAgICAgcmV0dXJuIChjbXBfa2V5cyhyX2xocywgcl9yaHMpKTsKKyAgICB9CisjZW5kaWYgCisKKyN1bmRlZiBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfVF9ERUMKKyN1bmRlZiBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfQ19ERUMKKworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy90cmFjZV9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vdHJhY2VfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRiMjA5NAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vdHJhY2VfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxMTMgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHRyYWNlX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgcGF0X3RyaWVfLgorICovCisKKyNpZmRlZiBQQl9EU19QQVRfVFJJRV9UUkFDRV8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3RyYWNlKCkgY29uc3QKK3sKKyAgc3RkOjpjZXJyIDw8IHN0ZDo6ZW5kbDsKKyAgaWYgKG1fcF9oZWFkLT5tX3BfcGFyZW50ID09IE5VTEwpCisgICAgcmV0dXJuOworICB0cmFjZV9ub2RlKG1fcF9oZWFkLT5tX3BfcGFyZW50LCAwKTsKKyAgc3RkOjpjZXJyIDw8IHN0ZDo6ZW5kbDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3RyYWNlX25vZGUoY29uc3Rfbm9kZV9wb2ludGVyIHBfbmQsIHNpemVfdHlwZSBsZXZlbCkKK3sKKyAgZm9yIChzaXplX3R5cGUgaSA9IDA7IGkgPCBsZXZlbDsgKytpKQorICAgIHN0ZDo6Y2VyciA8PCAnICc7CisgIHN0ZDo6Y2VyciA8PCBwX25kIDw8ICIgIjsKKyAgc3RkOjpjZXJyIDw8ICgocF9uZC0+bV90eXBlID09IHBhdF90cmllX2xlYWZfbm9kZV90eXBlKSA/ICJsICIgOiAiaSAiKTsKKworICB0cmFjZV9ub2RlX21ldGFkYXRhKHBfbmQsIHR5cGVfdG9fdHlwZTx0eXBlbmFtZSBub2RlOjptZXRhZGF0YV90eXBlPigpKTsKKyAgdHlwZW5hbWUgZV9hY2Nlc3NfdHJhaXRzOjpjb25zdF9pdGVyYXRvciBlbF9pdCA9IHByZWZfYmVnaW4ocF9uZCk7CisgIHdoaWxlIChlbF9pdCAhPSBwcmVmX2VuZChwX25kKSkKKyAgICB7CisgICAgICBzdGQ6OmNlcnIgPDwqIGVsX2l0OworICAgICAgKytlbF9pdDsKKyAgICB9CisKKyAgaWYgKHBfbmQtPm1fdHlwZSA9PSBwYXRfdHJpZV9sZWFmX25vZGVfdHlwZSkKKyAgICB7CisgICAgICBzdGQ6OmNlcnIgPDwgc3RkOjplbmRsOworICAgICAgcmV0dXJuOworICAgIH0KKworICBjb25zdF9pbnRlcm5hbF9ub2RlX3BvaW50ZXIgcF9pbnRlcm5hbCA9CisgICAgc3RhdGljX2Nhc3Q8Y29uc3RfaW50ZXJuYWxfbm9kZV9wb2ludGVyPihwX25kKTsKKworICBzdGQ6OmNlcnIgPDwgIiAiIDw8CisgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4ocF9pbnRlcm5hbC0+Z2V0X2VfaW5kKCkpIDw8IHN0ZDo6ZW5kbDsKKworICBjb25zdCBzaXplX3R5cGUgbnVtX2NoaWxkcmVuID0gc3RkOjpkaXN0YW5jZShwX2ludGVybmFsLT5iZWdpbigpLAorCQkJCQkgICAgICAgcF9pbnRlcm5hbC0+ZW5kKCkpOworCisgIGZvciAoc2l6ZV90eXBlIGNoaWxkX2kgPSAwOyBjaGlsZF9pIDwgbnVtX2NoaWxkcmVuOyArK2NoaWxkX2kpCisgICAgeworICAgICAgdHlwZW5hbWUgaW50ZXJuYWxfbm9kZTo6Y29uc3RfaXRlcmF0b3IgY2hpbGRfaXQgPQorCXBfaW50ZXJuYWwtPmJlZ2luKCk7CisgICAgICBzdGQ6OmFkdmFuY2UoY2hpbGRfaXQsIG51bV9jaGlsZHJlbiAtIGNoaWxkX2kgLSAxKTsKKyAgICAgIHRyYWNlX25vZGUoKmNoaWxkX2l0LCBsZXZlbCArIDEpOworICAgIH0KK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhXz4KK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3RyYWNlX25vZGVfbWV0YWRhdGEoY29uc3Rfbm9kZV9wb2ludGVyIHBfbmQsIHR5cGVfdG9fdHlwZTxNZXRhZGF0YV8+KQoreworICBzdGQ6OmNlcnIgPDwgIigiIDw8IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KHBfbmQtPmdldF9tZXRhZGF0YSgpKSA8PCAiKSAiOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordHJhY2Vfbm9kZV9tZXRhZGF0YShjb25zdF9ub2RlX3BvaW50ZXIsIHR5cGVfdG9fdHlwZTxudWxsX25vZGVfbWV0YWRhdGE+KQoreyB9CisKKyNlbmRpZiAKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy90cmFpdHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy90cmFpdHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZTdmNTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3RyYWl0cy5ocHAKQEAgLTAsMCArMSwzNTAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHRyYWl0cy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBwYXRfdHJpZV8uCisgKi8KKworI2lmbmRlZiBQQl9EU19QQVRfVFJJRV9OT0RFX0FORF9JVF9UUkFJVFNfSFBQCisjZGVmaW5lIFBCX0RTX1BBVF9UUklFX05PREVfQU5EX0lUX1RSQUlUU19IUFAKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL25vZGVfYmFzZS5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vaGVhZC5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vbGVhZi5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vaW50ZXJuYWxfbm9kZS5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vcG9pbnRfaXRlcmF0b3JzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9ub2RlX2l0ZXJhdG9ycy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vc3ludGhfZV9hY2Nlc3NfdHJhaXRzLmhwcD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksCisJICAgICB0eXBlbmFtZSBNYXBwZWQsCisJICAgICBjbGFzcyBFX0FjY2Vzc19UcmFpdHMsCisJICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25zdF9Ob2RlX0l0ZXJhdG9yLAorCQkgICAgICBjbGFzcyBOb2RlX0l0ZXJhdG9yLAorCQkgICAgICBjbGFzcyBDbXBfRm5fLAorCQkgICAgICBjbGFzcyBBbGxvY2F0b3JfPgorICAgIGNsYXNzIE5vZGVfVXBkYXRlLAorCSAgICAgY2xhc3MgQWxsb2NhdG9yPgorICAgIHN0cnVjdCB0cmllX3RyYWl0czwKKyAgICAgIEtleSwKKyAgICAgIE1hcHBlZCwKKyAgICAgIEVfQWNjZXNzX1RyYWl0cywKKyAgICAgIE5vZGVfVXBkYXRlLAorICAgICAgcGF0X3RyaWVfdGFnLAorICAgICAgQWxsb2NhdG9yPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiB0eXBlc190cmFpdHM8IEtleSwgTWFwcGVkLCBBbGxvY2F0b3IsIGZhbHNlPiB0eXBlX3RyYWl0czsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIHRyaWVfbm9kZV9tZXRhZGF0YV9zZWxlY3RvcjwKKyAgICAgIEtleSwKKyAgICAgIE1hcHBlZCwKKyAgICAgIEVfQWNjZXNzX1RyYWl0cywKKyAgICAgIE5vZGVfVXBkYXRlLAorICAgICAgQWxsb2NhdG9yPjo6dHlwZQorICAgICAgbWV0YWRhdGFfdHlwZTsKKworICAgICAgdHlwZWRlZiBFX0FjY2Vzc19UcmFpdHMgZV9hY2Nlc3NfdHJhaXRzOworCisgICAgICB0eXBlZGVmCisgICAgICBfX2dudV9wYmRzOjpkZXRhaWw6OnN5bnRoX2VfYWNjZXNzX3RyYWl0czwKKwl0eXBlX3RyYWl0cywKKwlmYWxzZSwKKwllX2FjY2Vzc190cmFpdHM+CisgICAgICBzeW50aF9lX2FjY2Vzc190cmFpdHM7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHBhdF90cmllX25vZGVfYmFzZTwKKwl0eXBlX3RyYWl0cywKKwlzeW50aF9lX2FjY2Vzc190cmFpdHMsCisJbWV0YWRhdGFfdHlwZSwKKwlBbGxvY2F0b3I+CisgICAgICBub2RlOworCisgICAgICB0eXBlZGVmCisgICAgICBwYXRfdHJpZV9sZWFmPAorCXR5cGVfdHJhaXRzLAorCXN5bnRoX2VfYWNjZXNzX3RyYWl0cywKKwltZXRhZGF0YV90eXBlLAorCUFsbG9jYXRvcj4KKyAgICAgIGxlYWY7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHBhdF90cmllX2hlYWQ8CisJdHlwZV90cmFpdHMsCisJc3ludGhfZV9hY2Nlc3NfdHJhaXRzLAorCW1ldGFkYXRhX3R5cGUsCisJQWxsb2NhdG9yPgorICAgICAgaGVhZDsKKworICAgICAgdHlwZWRlZgorICAgICAgcGF0X3RyaWVfaW50ZXJuYWxfbm9kZTwKKwl0eXBlX3RyYWl0cywKKwlzeW50aF9lX2FjY2Vzc190cmFpdHMsCisJbWV0YWRhdGFfdHlwZSwKKwlBbGxvY2F0b3I+CisgICAgICBpbnRlcm5hbF9ub2RlOworCisgICAgICB0eXBlZGVmCisgICAgICBwYXRfdHJpZV9jb25zdF9pdF88CisJdHlwZV90cmFpdHMsCisJbm9kZSwKKwlsZWFmLAorCWhlYWQsCisJaW50ZXJuYWxfbm9kZSwKKwl0cnVlLAorCUFsbG9jYXRvcj4KKyAgICAgIGNvbnN0X2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmCisgICAgICBwYXRfdHJpZV9pdF88CisJdHlwZV90cmFpdHMsCisJbm9kZSwKKwlsZWFmLAorCWhlYWQsCisJaW50ZXJuYWxfbm9kZSwKKwl0cnVlLAorCUFsbG9jYXRvcj4KKyAgICAgIGl0ZXJhdG9yOworCisgICAgICB0eXBlZGVmCisgICAgICBwYXRfdHJpZV9jb25zdF9pdF88CisJdHlwZV90cmFpdHMsCisJbm9kZSwKKwlsZWFmLAorCWhlYWQsCisJaW50ZXJuYWxfbm9kZSwKKwlmYWxzZSwKKwlBbGxvY2F0b3I+CisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmCisgICAgICBwYXRfdHJpZV9pdF88CisJdHlwZV90cmFpdHMsCisJbm9kZSwKKwlsZWFmLAorCWhlYWQsCisJaW50ZXJuYWxfbm9kZSwKKwlmYWxzZSwKKwlBbGxvY2F0b3I+CisgICAgICByZXZlcnNlX2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmCisgICAgICBwYXRfdHJpZV9jb25zdF9ub2RlX2l0XzwKKwlub2RlLAorCWxlYWYsCisJaGVhZCwKKwlpbnRlcm5hbF9ub2RlLAorCWNvbnN0X2l0ZXJhdG9yLAorCWl0ZXJhdG9yLAorCXN5bnRoX2VfYWNjZXNzX3RyYWl0cywKKwlBbGxvY2F0b3I+CisgICAgICBjb25zdF9ub2RlX2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmCisgICAgICBwYXRfdHJpZV9ub2RlX2l0XzwKKwlub2RlLAorCWxlYWYsCisJaGVhZCwKKwlpbnRlcm5hbF9ub2RlLAorCWNvbnN0X2l0ZXJhdG9yLAorCWl0ZXJhdG9yLAorCXN5bnRoX2VfYWNjZXNzX3RyYWl0cywKKwlBbGxvY2F0b3I+CisgICAgICBub2RlX2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmCisgICAgICBOb2RlX1VwZGF0ZTwKKwljb25zdF9ub2RlX2l0ZXJhdG9yLAorCW5vZGVfaXRlcmF0b3IsCisJRV9BY2Nlc3NfVHJhaXRzLAorCUFsbG9jYXRvcj4KKyAgICAgIG5vZGVfdXBkYXRlOworCisgICAgICB0eXBlZGVmCisgICAgICBfX2dudV9wYmRzOjpudWxsX3RyaWVfbm9kZV91cGRhdGU8CisJY29uc3Rfbm9kZV9pdGVyYXRvciwKKwlub2RlX2l0ZXJhdG9yLAorCUVfQWNjZXNzX1RyYWl0cywKKwlBbGxvY2F0b3I+KiAKKyAgICAgIG51bGxfbm9kZV91cGRhdGVfcG9pbnRlcjsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LAorCSAgICAgY2xhc3MgRV9BY2Nlc3NfVHJhaXRzLAorCSAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29uc3RfTm9kZV9JdGVyYXRvciwKKwkJICAgICAgY2xhc3MgTm9kZV9JdGVyYXRvciwKKwkJICAgICAgY2xhc3MgQ21wX0ZuXywKKwkJICAgICAgY2xhc3MgQWxsb2NhdG9yXz4KKyAgICBjbGFzcyBOb2RlX1VwZGF0ZSwKKwkgICAgIGNsYXNzIEFsbG9jYXRvcj4KKyAgICBzdHJ1Y3QgdHJpZV90cmFpdHM8CisgICAgICBLZXksCisgICAgICBudWxsX21hcHBlZF90eXBlLAorICAgICAgRV9BY2Nlc3NfVHJhaXRzLAorICAgICAgTm9kZV9VcGRhdGUsCisgICAgICBwYXRfdHJpZV90YWcsCisgICAgICBBbGxvY2F0b3I+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmCisgICAgICB0eXBlc190cmFpdHM8CisgICAgICBLZXksCisgICAgICBudWxsX21hcHBlZF90eXBlLAorICAgICAgQWxsb2NhdG9yLAorICAgICAgZmFsc2U+CisgICAgICB0eXBlX3RyYWl0czsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIHRyaWVfbm9kZV9tZXRhZGF0YV9zZWxlY3RvcjwKKyAgICAgIEtleSwKKyAgICAgIG51bGxfbWFwcGVkX3R5cGUsCisgICAgICBFX0FjY2Vzc19UcmFpdHMsCisgICAgICBOb2RlX1VwZGF0ZSwKKyAgICAgIEFsbG9jYXRvcj46OnR5cGUKKyAgICAgIG1ldGFkYXRhX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgRV9BY2Nlc3NfVHJhaXRzIGVfYWNjZXNzX3RyYWl0czsKKworICAgICAgdHlwZWRlZgorICAgICAgX19nbnVfcGJkczo6ZGV0YWlsOjpzeW50aF9lX2FjY2Vzc190cmFpdHM8CisJdHlwZV90cmFpdHMsCisJdHJ1ZSwKKwllX2FjY2Vzc190cmFpdHM+CisgICAgICBzeW50aF9lX2FjY2Vzc190cmFpdHM7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHBhdF90cmllX25vZGVfYmFzZTwKKwl0eXBlX3RyYWl0cywKKwlzeW50aF9lX2FjY2Vzc190cmFpdHMsCisJbWV0YWRhdGFfdHlwZSwKKwlBbGxvY2F0b3I+CisgICAgICBub2RlOworCisgICAgICB0eXBlZGVmCisgICAgICBwYXRfdHJpZV9sZWFmPAorCXR5cGVfdHJhaXRzLAorCXN5bnRoX2VfYWNjZXNzX3RyYWl0cywKKwltZXRhZGF0YV90eXBlLAorCUFsbG9jYXRvcj4KKyAgICAgIGxlYWY7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHBhdF90cmllX2hlYWQ8CisJdHlwZV90cmFpdHMsCisJc3ludGhfZV9hY2Nlc3NfdHJhaXRzLAorCW1ldGFkYXRhX3R5cGUsCisJQWxsb2NhdG9yPgorICAgICAgaGVhZDsKKworICAgICAgdHlwZWRlZgorICAgICAgcGF0X3RyaWVfaW50ZXJuYWxfbm9kZTwKKwl0eXBlX3RyYWl0cywKKwlzeW50aF9lX2FjY2Vzc190cmFpdHMsCisJbWV0YWRhdGFfdHlwZSwKKwlBbGxvY2F0b3I+CisgICAgICBpbnRlcm5hbF9ub2RlOworCisgICAgICB0eXBlZGVmCisgICAgICBwYXRfdHJpZV9jb25zdF9pdF88CisJdHlwZV90cmFpdHMsCisJbm9kZSwKKwlsZWFmLAorCWhlYWQsCisJaW50ZXJuYWxfbm9kZSwKKwl0cnVlLAorCUFsbG9jYXRvcj4KKyAgICAgIGNvbnN0X2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIGNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOworCisgICAgICB0eXBlZGVmCisgICAgICBwYXRfdHJpZV9jb25zdF9pdF88CisJdHlwZV90cmFpdHMsCisJbm9kZSwKKwlsZWFmLAorCWhlYWQsCisJaW50ZXJuYWxfbm9kZSwKKwlmYWxzZSwKKwlBbGxvY2F0b3I+CisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZgorICAgICAgcGF0X3RyaWVfY29uc3Rfbm9kZV9pdF88CisJbm9kZSwKKwlsZWFmLAorCWhlYWQsCisJaW50ZXJuYWxfbm9kZSwKKwljb25zdF9pdGVyYXRvciwKKwlpdGVyYXRvciwKKwlzeW50aF9lX2FjY2Vzc190cmFpdHMsCisJQWxsb2NhdG9yPgorICAgICAgY29uc3Rfbm9kZV9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiBjb25zdF9ub2RlX2l0ZXJhdG9yIG5vZGVfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIE5vZGVfVXBkYXRlPAorCWNvbnN0X25vZGVfaXRlcmF0b3IsCisJbm9kZV9pdGVyYXRvciwKKwlFX0FjY2Vzc19UcmFpdHMsCisJQWxsb2NhdG9yPgorICAgICAgbm9kZV91cGRhdGU7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIF9fZ251X3BiZHM6Om51bGxfdHJpZV9ub2RlX3VwZGF0ZTwKKwljb25zdF9ub2RlX2l0ZXJhdG9yLAorCWNvbnN0X25vZGVfaXRlcmF0b3IsCisJRV9BY2Nlc3NfVHJhaXRzLAorCUFsbG9jYXRvcj4qIAorICAgICAgbnVsbF9ub2RlX3VwZGF0ZV9wb2ludGVyOworICAgIH07CisKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAvLyAjaWZuZGVmIFBCX0RTX1BBVF9UUklFX05PREVfQU5EX0lUX1RSQUlUU19IUFAKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy91cGRhdGVfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3VwZGF0ZV9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDI3NWU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy91cGRhdGVfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw1NSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgdXBkYXRlX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgcGF0X3RyaWVfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXBwbHlfdXBkYXRlKG5vZGVfcG9pbnRlciAvKnBfbmQqLywgbnVsbF9ub2RlX3VwZGF0ZV9wb2ludGVyKQoreyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX1VwZGF0ZV8+CitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXBwbHlfdXBkYXRlKG5vZGVfcG9pbnRlciBwX25kLCBOb2RlX1VwZGF0ZV8qICAvKnBfdXBkYXRlKi8pCit7CisgIE5vZGVfVXBkYXRlXzo6b3BlcmF0b3IoKShub2RlX2l0ZXJhdG9yKHBfbmQsIHRoaXMpLAorCQkJICAgY29uc3Rfbm9kZV9pdGVyYXRvcihOVUxMLCB0aGlzKSk7Cit9CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcHJpb3JpdHlfcXVldWVfYmFzZV9kaXNwYXRjaC5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcHJpb3JpdHlfcXVldWVfYmFzZV9kaXNwYXRjaC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQwNWM0ZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9wcmlvcml0eV9xdWV1ZV9iYXNlX2Rpc3BhdGNoLmhwcApAQCAtMCwwICsxLDkxIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBwcmlvcml0eV9xdWV1ZV9iYXNlX2Rpc3BhdGNoLmhwcAorICogQ29udGFpbnMgYW4gcHFpYXRpdmUgY29udGFpbmVyIGRpc3BhdGNoaW5nIGJhc2UuCisgKi8KKworI2lmbmRlZiBQQl9EU19QUklPUklUWV9RVUVVRV9CQVNFX0RTX0RJU1BBVENIRVJfSFBQCisjZGVmaW5lIFBCX0RTX1BSSU9SSVRZX1FVRVVFX0JBU0VfRFNfRElTUEFUQ0hFUl9IUFAKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcGFpcmluZ19oZWFwXy9wYWlyaW5nX2hlYXBfLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfL2Jpbm9taWFsX2hlYXBfLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3JjX2Jpbm9taWFsX2hlYXBfL3JjX2Jpbm9taWFsX2hlYXBfLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9iaW5hcnlfaGVhcF8uaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdGhpbl9oZWFwXy90aGluX2hlYXBfLmhwcD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgICBuYW1lc3BhY2UgZGV0YWlsCisgICAgeworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZV9UeXBlLCB0eXBlbmFtZSBDbXBfRm4sIHR5cGVuYW1lIFRhZywgdHlwZW5hbWUgQWxsb2NhdG9yPgorICAgICAgc3RydWN0IHByaW9yaXR5X3F1ZXVlX2Jhc2VfZGlzcGF0Y2g7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlX1R5cGUsIHR5cGVuYW1lIENtcF9GbiwgdHlwZW5hbWUgQWxsb2NhdG9yPgorICAgICAgc3RydWN0IHByaW9yaXR5X3F1ZXVlX2Jhc2VfZGlzcGF0Y2g8VmFsdWVfVHlwZSwgQ21wX0ZuLCBwYWlyaW5nX2hlYXBfdGFnLCBBbGxvY2F0b3I+CisgICAgICB7CisJdHlwZWRlZiBwYWlyaW5nX2hlYXBfPCBWYWx1ZV9UeXBlLCBDbXBfRm4sIEFsbG9jYXRvcj4gdHlwZTsKKyAgICAgIH07CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlX1R5cGUsIHR5cGVuYW1lIENtcF9GbiwgdHlwZW5hbWUgQWxsb2NhdG9yPgorICAgICAgc3RydWN0IHByaW9yaXR5X3F1ZXVlX2Jhc2VfZGlzcGF0Y2g8VmFsdWVfVHlwZSwgQ21wX0ZuLCBiaW5vbWlhbF9oZWFwX3RhZywgQWxsb2NhdG9yPgorICAgICAgeworCXR5cGVkZWYgYmlub21pYWxfaGVhcF88IFZhbHVlX1R5cGUsIENtcF9GbiwgQWxsb2NhdG9yPiB0eXBlOworICAgICAgfTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVfVHlwZSwgdHlwZW5hbWUgQ21wX0ZuLCB0eXBlbmFtZSBBbGxvY2F0b3I+CisgICAgICBzdHJ1Y3QgcHJpb3JpdHlfcXVldWVfYmFzZV9kaXNwYXRjaDxWYWx1ZV9UeXBlLCBDbXBfRm4sIHJjX2Jpbm9taWFsX2hlYXBfdGFnLCBBbGxvY2F0b3I+CisgICAgICB7CisJdHlwZWRlZiByY19iaW5vbWlhbF9oZWFwXzwgVmFsdWVfVHlwZSwgQ21wX0ZuLCBBbGxvY2F0b3I+IHR5cGU7CisgICAgICB9OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZV9UeXBlLCB0eXBlbmFtZSBDbXBfRm4sIHR5cGVuYW1lIEFsbG9jYXRvcj4KKyAgICAgIHN0cnVjdCBwcmlvcml0eV9xdWV1ZV9iYXNlX2Rpc3BhdGNoPFZhbHVlX1R5cGUsIENtcF9GbiwgYmluYXJ5X2hlYXBfdGFnLCBBbGxvY2F0b3I+CisgICAgICB7CisJdHlwZWRlZiBiaW5hcnlfaGVhcF88IFZhbHVlX1R5cGUsIENtcF9GbiwgQWxsb2NhdG9yPiB0eXBlOworICAgICAgfTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVfVHlwZSwgdHlwZW5hbWUgQ21wX0ZuLCB0eXBlbmFtZSBBbGxvY2F0b3I+CisgICAgICBzdHJ1Y3QgcHJpb3JpdHlfcXVldWVfYmFzZV9kaXNwYXRjaDxWYWx1ZV9UeXBlLCBDbXBfRm4sIHRoaW5faGVhcF90YWcsIEFsbG9jYXRvcj4KKyAgICAgIHsKKwl0eXBlZGVmIHRoaW5faGVhcF88IFZhbHVlX1R5cGUsIENtcF9GbiwgQWxsb2NhdG9yPiB0eXBlOworICAgICAgfTsKKworICAgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgLy8gI2lmbmRlZiBQQl9EU19QUklPUklUWV9RVUVVRV9CQVNFX0RTX0RJU1BBVENIRVJfSFBQCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3JiX3RyZWVfbWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWJmZTIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3JiX3RyZWVfbWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDEwMCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGZvciByYl90cmVlXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgSXQ+Cit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citjb3B5X2Zyb21fcmFuZ2UoSXQgZmlyc3RfaXQsIEl0IGxhc3RfaXQpCit7CisgIHdoaWxlIChmaXJzdF9pdCAhPSBsYXN0X2l0KQorICAgIGluc2VydCgqKGZpcnN0X2l0KyspKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK1BCX0RTX0NMQVNTX05BTUUoKQoreworICBpbml0aWFsaXplKCk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfQ0xBU1NfTkFNRShjb25zdCBDbXBfRm4mIHJfY21wX2ZuKSA6CisgIGJhc2VfdHlwZShyX2NtcF9mbikKK3sKKyAgaW5pdGlhbGl6ZSgpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK1BCX0RTX0NMQVNTX05BTUUoY29uc3QgQ21wX0ZuJiByX2NtcF9mbiwgY29uc3Qgbm9kZV91cGRhdGUmIHJfbm9kZV91cGRhdGUpIDoKKyAgYmFzZV90eXBlKHJfY21wX2ZuLCByX25vZGVfdXBkYXRlKQoreworICBpbml0aWFsaXplKCk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfQ0xBU1NfTkFNRShjb25zdCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpIDoKKyAgYmFzZV90eXBlKG90aGVyKQoreworICBpbml0aWFsaXplKCk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICBiYXNlX3R5cGU6OnN3YXAob3RoZXIpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2luaXRpYWxpemUoKQoreyBiYXNlX3R5cGU6Om1fcF9oZWFkLT5tX3JlZCA9IHRydWU7IH0KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vZGVidWdfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL2RlYnVnX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZWNjNDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL2RlYnVnX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNzggQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGRlYnVnX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgcmJfdHJlZV8uCisgKi8KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfbm9kZV9jb25zaXN0ZW50KGNvbnN0IG5vZGVfcG9pbnRlciBwX25kKSBjb25zdAoreworICBpZiAocF9uZCA9PSBOVUxMKQorICAgIHJldHVybiAxOworCisgIGNvbnN0IHNpemVfdHlwZSBsX2hlaWdodCA9IGFzc2VydF9ub2RlX2NvbnNpc3RlbnQocF9uZC0+bV9wX2xlZnQpOworICBjb25zdCBzaXplX3R5cGUgcl9oZWlnaHQgPSBhc3NlcnRfbm9kZV9jb25zaXN0ZW50KHBfbmQtPm1fcF9yaWdodCk7CisgIGlmIChwX25kLT5tX3JlZCkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoaXNfZWZmZWN0aXZlbHlfYmxhY2socF9uZC0+bV9wX2xlZnQpKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChpc19lZmZlY3RpdmVseV9ibGFjayhwX25kLT5tX3BfcmlnaHQpKTsKKyAgICB9CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChsX2hlaWdodCA9PSByX2hlaWdodCk7CisgIHJldHVybiAocF9uZC0+bV9yZWQgPyAwIDogMSkgKyBsX2hlaWdodDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF92YWxpZCgpIGNvbnN0Cit7CisgIGJhc2VfdHlwZTo6YXNzZXJ0X3ZhbGlkKCk7CisgIGNvbnN0IG5vZGVfcG9pbnRlciBwX2hlYWQgPSBiYXNlX3R5cGU6Om1fcF9oZWFkOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9oZWFkLT5tX3JlZCk7CisgIGlmIChwX2hlYWQtPm1fcF9wYXJlbnQgIT0gTlVMTCkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoIXBfaGVhZC0+bV9wX3BhcmVudC0+bV9yZWQpOworICAgICAgYXNzZXJ0X25vZGVfY29uc2lzdGVudChwX2hlYWQtPm1fcF9wYXJlbnQpOworICAgIH0KK30KKworI2VuZGlmIAorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL2VyYXNlX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3JiX3RyZWVfbWFwXy9lcmFzZV9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODViOGE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3JiX3RyZWVfbWFwXy9lcmFzZV9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDI4OSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZXJhc2VfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGZvciByYl90cmVlXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIGJvb2wKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpCit7CisgIHBvaW50X2l0ZXJhdG9yIGl0ID0gZmluZChyX2tleSk7CisgIGlmIChpdCA9PSBiYXNlX3R5cGU6OmVuZCgpKQorICAgIHJldHVybiBmYWxzZTsKKyAgZXJhc2UoaXQpOworICByZXR1cm4gdHJ1ZTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6aXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlKGl0ZXJhdG9yIGl0KQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpKTsKKyAgaWYgKGl0ID09IGJhc2VfdHlwZTo6ZW5kKCkpCisgICAgcmV0dXJuIGl0OworCisgIGl0ZXJhdG9yIHJldF9pdCA9IGl0OworICArK3JldF9pdDsKKyAgZXJhc2Vfbm9kZShpdC5tX3BfbmQpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpKTsKKyAgcmV0dXJuIHJldF9pdDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6cmV2ZXJzZV9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2UocmV2ZXJzZV9pdGVyYXRvciBpdCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKSk7CisgIGlmIChpdC5tX3BfbmQgPT0gYmFzZV90eXBlOjptX3BfaGVhZCkKKyAgICByZXR1cm4gaXQ7CisKKyAgcmV2ZXJzZV9pdGVyYXRvciByZXRfaXQgPSBpdDsKKyAgKytyZXRfaXQ7CisgIGVyYXNlX25vZGUoaXQubV9wX25kKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKSk7CisgIHJldHVybiByZXRfaXQ7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkPgoraW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlX2lmKFByZWQgcHJlZCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIHNpemVfdHlwZSBudW1fZXJzZCA9IDA7CisgIGl0ZXJhdG9yIGl0ID0gYmFzZV90eXBlOjpiZWdpbigpOworICB3aGlsZSAoaXQgIT0gYmFzZV90eXBlOjplbmQoKSkKKyAgICB7CisgICAgICBpZiAocHJlZCgqaXQpKQorICAgICAgICB7CisJICArK251bV9lcnNkOworCSAgaXQgPSBlcmFzZShpdCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKwkrK2l0OworICAgIH0KKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgcmV0dXJuIG51bV9lcnNkOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2Vfbm9kZShub2RlX3BvaW50ZXIgcF9uZCkKK3sKKyAgcmVtb3ZlX25vZGUocF9uZCk7CisgIGJhc2VfdHlwZTo6YWN0dWFsX2VyYXNlX25vZGUocF9uZCk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCkpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVtb3ZlX25vZGUobm9kZV9wb2ludGVyIHBfeikKK3sKKyAgdXBkYXRlX21pbl9tYXhfZm9yX2VyYXNlZF9ub2RlKHBfeik7CisgIG5vZGVfcG9pbnRlciBwX3kgPSBwX3o7CisgIG5vZGVfcG9pbnRlciBwX3ggPSBOVUxMOworICBub2RlX3BvaW50ZXIgcF9uZXdfeF9wYXJlbnQgPSBOVUxMOworCisgIGlmIChwX3ktPm1fcF9sZWZ0ID09IE5VTEwpCisgICAgcF94ID0gcF95LT5tX3BfcmlnaHQ7CisgIGVsc2UgaWYgKHBfeS0+bV9wX3JpZ2h0ID09IE5VTEwpCisgICAgcF94ID0gcF95LT5tX3BfbGVmdDsKKyAgZWxzZQorICAgIHsKKyAgICAgIHBfeSA9IHBfeS0+bV9wX3JpZ2h0OworICAgICAgd2hpbGUgKHBfeS0+bV9wX2xlZnQgIT0gTlVMTCkKKwlwX3kgPSBwX3ktPm1fcF9sZWZ0OworICAgICAgcF94ID0gcF95LT5tX3BfcmlnaHQ7CisgICAgfQorCisgIGlmIChwX3kgPT0gcF96KQorICAgIHsKKyAgICAgIHBfbmV3X3hfcGFyZW50ID0gcF95LT5tX3BfcGFyZW50OworICAgICAgaWYgKHBfeCAhPSBOVUxMKQorCXBfeC0+bV9wX3BhcmVudCA9IHBfeS0+bV9wX3BhcmVudDsKKworICAgICAgaWYgKGJhc2VfdHlwZTo6bV9wX2hlYWQtPm1fcF9wYXJlbnQgPT0gcF96KQorCWJhc2VfdHlwZTo6bV9wX2hlYWQtPm1fcF9wYXJlbnQgPSBwX3g7CisgICAgICBlbHNlIGlmIChwX3otPm1fcF9wYXJlbnQtPm1fcF9sZWZ0ID09IHBfeikKKyAgICAgICAgeworCSAgcF95LT5tX3BfbGVmdCA9IHBfei0+bV9wX3BhcmVudDsKKwkgIHBfei0+bV9wX3BhcmVudC0+bV9wX2xlZnQgPSBwX3g7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworCSAgcF95LT5tX3BfbGVmdCA9IE5VTEw7CisJICBwX3otPm1fcF9wYXJlbnQtPm1fcF9yaWdodCA9IHBfeDsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHBfei0+bV9wX2xlZnQtPm1fcF9wYXJlbnQgPSBwX3k7CisgICAgICBwX3ktPm1fcF9sZWZ0ID0gcF96LT5tX3BfbGVmdDsKKyAgICAgIGlmIChwX3kgIT0gcF96LT5tX3BfcmlnaHQpCisgICAgICAgIHsKKwkgIHBfbmV3X3hfcGFyZW50ID0gcF95LT5tX3BfcGFyZW50OworCSAgaWYgKHBfeCAhPSBOVUxMKQorCSAgICBwX3gtPm1fcF9wYXJlbnQgPSBwX3ktPm1fcF9wYXJlbnQ7CisJICBwX3ktPm1fcF9wYXJlbnQtPm1fcF9sZWZ0ID0gcF94OworCSAgcF95LT5tX3BfcmlnaHQgPSBwX3otPm1fcF9yaWdodDsKKwkgIHBfei0+bV9wX3JpZ2h0LT5tX3BfcGFyZW50ID0gcF95OworICAgICAgICB9CisgICAgICBlbHNlCisJcF9uZXdfeF9wYXJlbnQgPSBwX3k7CisKKyAgICAgIGlmIChiYXNlX3R5cGU6Om1fcF9oZWFkLT5tX3BfcGFyZW50ID09IHBfeikKKwliYXNlX3R5cGU6Om1fcF9oZWFkLT5tX3BfcGFyZW50ID0gcF95OworICAgICAgZWxzZSBpZiAocF96LT5tX3BfcGFyZW50LT5tX3BfbGVmdCA9PSBwX3opCisJcF96LT5tX3BfcGFyZW50LT5tX3BfbGVmdCA9IHBfeTsKKyAgICAgIGVsc2UKKwlwX3otPm1fcF9wYXJlbnQtPm1fcF9yaWdodCA9IHBfeTsKKworICAgICAgcF95LT5tX3BfcGFyZW50ID0gcF96LT5tX3BfcGFyZW50OworICAgICAgc3RkOjpzd2FwKHBfeS0+bV9yZWQsIHBfei0+bV9yZWQpOworICAgICAgcF95ID0gcF96OworICAgIH0KKworICB1cGRhdGVfdG9fdG9wKHBfbmV3X3hfcGFyZW50LCAobm9kZV91cGRhdGUqICl0aGlzKTsKKworICBpZiAocF95LT5tX3JlZCkKKyAgICByZXR1cm47CisKKyAgcmVtb3ZlX2ZpeHVwKHBfeCwgcF9uZXdfeF9wYXJlbnQpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVtb3ZlX2ZpeHVwKG5vZGVfcG9pbnRlciBwX3gsIG5vZGVfcG9pbnRlciBwX25ld194X3BhcmVudCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfeCA9PSBOVUxMIHx8IHBfeC0+bV9wX3BhcmVudCA9PSBwX25ld194X3BhcmVudCk7CisKKyAgd2hpbGUgKHBfeCAhPSBiYXNlX3R5cGU6Om1fcF9oZWFkLT5tX3BfcGFyZW50ICYmIGlzX2VmZmVjdGl2ZWx5X2JsYWNrKHBfeCkpCisgICAgaWYgKHBfeCA9PSBwX25ld194X3BhcmVudC0+bV9wX2xlZnQpCisgICAgICB7CisJbm9kZV9wb2ludGVyIHBfdyA9IHBfbmV3X3hfcGFyZW50LT5tX3BfcmlnaHQ7CisJaWYgKHBfdy0+bV9yZWQpCisJICB7CisJICAgIHBfdy0+bV9yZWQgPSBmYWxzZTsKKwkgICAgcF9uZXdfeF9wYXJlbnQtPm1fcmVkID0gdHJ1ZTsKKwkgICAgYmFzZV90eXBlOjpyb3RhdGVfbGVmdChwX25ld194X3BhcmVudCk7CisJICAgIHBfdyA9IHBfbmV3X3hfcGFyZW50LT5tX3BfcmlnaHQ7CisJICB9CisKKwlpZiAoaXNfZWZmZWN0aXZlbHlfYmxhY2socF93LT5tX3BfbGVmdCkgCisJICAgICYmIGlzX2VmZmVjdGl2ZWx5X2JsYWNrKHBfdy0+bV9wX3JpZ2h0KSkKKwkgIHsKKwkgICAgcF93LT5tX3JlZCA9IHRydWU7CisJICAgIHBfeCA9IHBfbmV3X3hfcGFyZW50OworCSAgICBwX25ld194X3BhcmVudCA9IHBfbmV3X3hfcGFyZW50LT5tX3BfcGFyZW50OworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgaWYgKGlzX2VmZmVjdGl2ZWx5X2JsYWNrKHBfdy0+bV9wX3JpZ2h0KSkKKwkgICAgICB7CisJCWlmIChwX3ctPm1fcF9sZWZ0ICE9IE5VTEwpCisJCSAgcF93LT5tX3BfbGVmdC0+bV9yZWQgPSBmYWxzZTsKKworCQlwX3ctPm1fcmVkID0gdHJ1ZTsKKwkJYmFzZV90eXBlOjpyb3RhdGVfcmlnaHQocF93KTsKKwkJcF93ID0gcF9uZXdfeF9wYXJlbnQtPm1fcF9yaWdodDsKKwkgICAgICB9CisKKwkgICAgcF93LT5tX3JlZCA9IHBfbmV3X3hfcGFyZW50LT5tX3JlZDsKKwkgICAgcF9uZXdfeF9wYXJlbnQtPm1fcmVkID0gZmFsc2U7CisKKwkgICAgaWYgKHBfdy0+bV9wX3JpZ2h0ICE9IE5VTEwpCisJICAgICAgcF93LT5tX3BfcmlnaHQtPm1fcmVkID0gZmFsc2U7CisKKwkgICAgYmFzZV90eXBlOjpyb3RhdGVfbGVmdChwX25ld194X3BhcmVudCk7CisJICAgIHVwZGF0ZV90b190b3AocF9uZXdfeF9wYXJlbnQsIChub2RlX3VwZGF0ZSogKXRoaXMpOworCSAgICBicmVhazsKKwkgIH0KKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisJbm9kZV9wb2ludGVyIHBfdyA9IHBfbmV3X3hfcGFyZW50LT5tX3BfbGVmdDsKKwlpZiAocF93LT5tX3JlZCA9PSB0cnVlKQorCSAgeworCSAgICBwX3ctPm1fcmVkID0gZmFsc2U7CisJICAgIHBfbmV3X3hfcGFyZW50LT5tX3JlZCA9IHRydWU7CisJICAgIGJhc2VfdHlwZTo6cm90YXRlX3JpZ2h0KHBfbmV3X3hfcGFyZW50KTsKKwkgICAgcF93ID0gcF9uZXdfeF9wYXJlbnQtPm1fcF9sZWZ0OworCSAgfQorCisJaWYgKGlzX2VmZmVjdGl2ZWx5X2JsYWNrKHBfdy0+bV9wX3JpZ2h0KSAKKwkgICAgJiYgaXNfZWZmZWN0aXZlbHlfYmxhY2socF93LT5tX3BfbGVmdCkpCisJICB7CisJICAgIHBfdy0+bV9yZWQgPSB0cnVlOworCSAgICBwX3ggPSBwX25ld194X3BhcmVudDsKKwkgICAgcF9uZXdfeF9wYXJlbnQgPSBwX25ld194X3BhcmVudC0+bV9wX3BhcmVudDsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIGlmIChpc19lZmZlY3RpdmVseV9ibGFjayhwX3ctPm1fcF9sZWZ0KSkKKwkgICAgICB7CisJCWlmIChwX3ctPm1fcF9yaWdodCAhPSBOVUxMKQorCQkgIHBfdy0+bV9wX3JpZ2h0LT5tX3JlZCA9IGZhbHNlOworCisJCXBfdy0+bV9yZWQgPSB0cnVlOworCQliYXNlX3R5cGU6OnJvdGF0ZV9sZWZ0KHBfdyk7CisJCXBfdyA9IHBfbmV3X3hfcGFyZW50LT5tX3BfbGVmdDsKKwkgICAgICB9CisKKwkgICAgcF93LT5tX3JlZCA9IHBfbmV3X3hfcGFyZW50LT5tX3JlZDsKKwkgICAgcF9uZXdfeF9wYXJlbnQtPm1fcmVkID0gZmFsc2U7CisKKwkgICAgaWYgKHBfdy0+bV9wX2xlZnQgIT0gTlVMTCkKKwkgICAgICBwX3ctPm1fcF9sZWZ0LT5tX3JlZCA9IGZhbHNlOworCisJICAgIGJhc2VfdHlwZTo6cm90YXRlX3JpZ2h0KHBfbmV3X3hfcGFyZW50KTsKKwkgICAgdXBkYXRlX3RvX3RvcChwX25ld194X3BhcmVudCwgKG5vZGVfdXBkYXRlKiApdGhpcyk7CisJICAgIGJyZWFrOworCSAgfQorICAgICAgfQorCisgIGlmIChwX3ggIT0gTlVMTCkKKyAgICBwX3gtPm1fcmVkID0gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL2ZpbmRfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL2ZpbmRfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM3OGUxNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vZmluZF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDM5IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBmaW5kX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgcmJfdHJlZV8uCisgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vaW5mb19mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vaW5mb19mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjQzYjFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3JiX3RyZWVfbWFwXy9pbmZvX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNDYgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGluZm9fZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGZvciByYl90cmVlXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIGJvb2wKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2lzX2VmZmVjdGl2ZWx5X2JsYWNrKGNvbnN0IG5vZGVfcG9pbnRlciBwX25kKQoreyByZXR1cm4gKHBfbmQgPT0gTlVMTCB8fCAhcF9uZC0+bV9yZWQpOyB9CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3JiX3RyZWVfbWFwXy9pbnNlcnRfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZhNWQxZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTE1IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBpbnNlcnRfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGZvciByYl90cmVlXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHN0ZDo6cGFpcjx0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6cG9pbnRfaXRlcmF0b3IsIGJvb2w+CitQQl9EU19DTEFTU19DX0RFQzo6CitpbnNlcnQoY29uc3RfcmVmZXJlbmNlIHJfdmFsdWUpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICBzdGQ6OnBhaXI8cG9pbnRfaXRlcmF0b3IsIGJvb2w+IGluc19wYWlyID0gYmFzZV90eXBlOjppbnNlcnRfbGVhZihyX3ZhbHVlKTsKKyAgaWYgKGluc19wYWlyLnNlY29uZCA9PSB0cnVlKQorICAgIHsKKyAgICAgIGluc19wYWlyLmZpcnN0Lm1fcF9uZC0+bV9yZWQgPSB0cnVlOworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWSh0aGlzLT5zdHJ1Y3R1cmVfb25seV9hc3NlcnRfdmFsaWQoKTspCisgICAgICBpbnNlcnRfZml4dXAoaW5zX3BhaXIuZmlyc3QubV9wX25kKTsKKyAgICB9CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIHJldHVybiBpbnNfcGFpcjsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitpbnNlcnRfZml4dXAobm9kZV9wb2ludGVyIHBfbmQpCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kLT5tX3JlZCA9PSB0cnVlKTsKKyAgd2hpbGUgKHBfbmQgIT0gYmFzZV90eXBlOjptX3BfaGVhZC0+bV9wX3BhcmVudCAmJiBwX25kLT5tX3BfcGFyZW50LT5tX3JlZCkKKyAgICB7CisgICAgICBpZiAocF9uZC0+bV9wX3BhcmVudCA9PSBwX25kLT5tX3BfcGFyZW50LT5tX3BfcGFyZW50LT5tX3BfbGVmdCkKKyAgICAgICAgeworCSAgbm9kZV9wb2ludGVyIHBfeSA9IHBfbmQtPm1fcF9wYXJlbnQtPm1fcF9wYXJlbnQtPm1fcF9yaWdodDsKKwkgIGlmIChwX3kgIT0gTlVMTCAmJiBwX3ktPm1fcmVkKQorICAgICAgICAgICAgeworCSAgICAgIHBfbmQtPm1fcF9wYXJlbnQtPm1fcmVkID0gZmFsc2U7CisJICAgICAgcF95LT5tX3JlZCA9IGZhbHNlOworCSAgICAgIHBfbmQtPm1fcF9wYXJlbnQtPm1fcF9wYXJlbnQtPm1fcmVkID0gdHJ1ZTsKKwkgICAgICBwX25kID0gcF9uZC0+bV9wX3BhcmVudC0+bV9wX3BhcmVudDsKKyAgICAgICAgICAgIH0KKwkgIGVsc2UKKyAgICAgICAgICAgIHsKKwkgICAgICBpZiAocF9uZCA9PSBwX25kLT5tX3BfcGFyZW50LT5tX3BfcmlnaHQpCisgICAgICAgICAgICAgICAgeworCQkgIHBfbmQgPSBwX25kLT5tX3BfcGFyZW50OworCQkgIGJhc2VfdHlwZTo6cm90YXRlX2xlZnQocF9uZCk7CisgICAgICAgICAgICAgICAgfQorCSAgICAgIHBfbmQtPm1fcF9wYXJlbnQtPm1fcmVkID0gZmFsc2U7CisJICAgICAgcF9uZC0+bV9wX3BhcmVudC0+bV9wX3BhcmVudC0+bV9yZWQgPSB0cnVlOworCSAgICAgIGJhc2VfdHlwZTo6cm90YXRlX3JpZ2h0KHBfbmQtPm1fcF9wYXJlbnQtPm1fcF9wYXJlbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKwkgIG5vZGVfcG9pbnRlciBwX3kgPSBwX25kLT5tX3BfcGFyZW50LT5tX3BfcGFyZW50LT5tX3BfbGVmdDsKKwkgIGlmIChwX3kgIT0gTlVMTCAmJiBwX3ktPm1fcmVkKQorICAgICAgICAgICAgeworCSAgICAgIHBfbmQtPm1fcF9wYXJlbnQtPm1fcmVkID0gZmFsc2U7CisJICAgICAgcF95LT5tX3JlZCA9IGZhbHNlOworCSAgICAgIHBfbmQtPm1fcF9wYXJlbnQtPm1fcF9wYXJlbnQtPm1fcmVkID0gdHJ1ZTsKKwkgICAgICBwX25kID0gcF9uZC0+bV9wX3BhcmVudC0+bV9wX3BhcmVudDsKKyAgICAgICAgICAgIH0KKwkgIGVsc2UKKyAgICAgICAgICAgIHsKKwkgICAgICBpZiAocF9uZCA9PSBwX25kLT5tX3BfcGFyZW50LT5tX3BfbGVmdCkKKyAgICAgICAgICAgICAgICB7CisJCSAgcF9uZCA9IHBfbmQtPm1fcF9wYXJlbnQ7CisJCSAgYmFzZV90eXBlOjpyb3RhdGVfcmlnaHQocF9uZCk7CisgICAgICAgICAgICAgICAgfQorCSAgICAgIHBfbmQtPm1fcF9wYXJlbnQtPm1fcmVkID0gZmFsc2U7CisJICAgICAgcF9uZC0+bV9wX3BhcmVudC0+bV9wX3BhcmVudC0+bV9yZWQgPSB0cnVlOworCSAgICAgIGJhc2VfdHlwZTo6cm90YXRlX2xlZnQocF9uZC0+bV9wX3BhcmVudC0+bV9wX3BhcmVudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgYmFzZV90eXBlOjp1cGRhdGVfdG9fdG9wKHBfbmQsIChub2RlX3VwZGF0ZSogKXRoaXMpOworICBiYXNlX3R5cGU6Om1fcF9oZWFkLT5tX3BfcGFyZW50LT5tX3JlZCA9IGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3JiX3RyZWVfbWFwXy9ub2RlLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vbm9kZS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YyNGM3NgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vbm9kZS5ocHAKQEAgLTAsMCArMSwxMzggQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIG5vZGUuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgcmJfdHJlZV8uCisgKi8KKworI2lmbmRlZiBQQl9EU19SQl9UUkVFX05PREVfSFBQCisjZGVmaW5lIFBCX0RTX1JCX1RSRUVfTk9ERV9IUFAKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmFzaWNfdHJlZV9wb2xpY3kvbnVsbF9ub2RlX21ldGFkYXRhLmhwcD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVfVHlwZSwgY2xhc3MgTWV0YWRhdGEsIGNsYXNzIEFsbG9jYXRvcj4KKyAgICBzdHJ1Y3QgcmJfdHJlZV9ub2RlXworICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIFZhbHVlX1R5cGUgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgTWV0YWRhdGEgbWV0YWRhdGFfdHlwZTsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8CisgICAgICByYl90cmVlX25vZGVfPAorICAgICAgVmFsdWVfVHlwZSwKKyAgICAgIE1ldGFkYXRhLAorICAgICAgQWxsb2NhdG9yPiA+OjpvdGhlcjo6cG9pbnRlcgorICAgICAgbm9kZV9wb2ludGVyOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKwltZXRhZGF0YV90eXBlPjo6b3RoZXI6OnJlZmVyZW5jZQorICAgICAgbWV0YWRhdGFfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKwltZXRhZGF0YV90eXBlPjo6b3RoZXI6OmNvbnN0X3JlZmVyZW5jZQorICAgICAgY29uc3RfbWV0YWRhdGFfcmVmZXJlbmNlOworCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgc3BlY2lhbCgpIGNvbnN0CisgICAgICB7IHJldHVybiBtX3JlZDsgfQorCisgICAgICBpbmxpbmUgY29uc3RfbWV0YWRhdGFfcmVmZXJlbmNlCisgICAgICBnZXRfbWV0YWRhdGEoKSBjb25zdAorICAgICAgeyByZXR1cm4gbV9tZXRhZGF0YTsgfQorCisgICAgICBpbmxpbmUgbWV0YWRhdGFfcmVmZXJlbmNlCisgICAgICBnZXRfbWV0YWRhdGEoKQorICAgICAgeyByZXR1cm4gbV9tZXRhZGF0YTsgfQorCisjaWZkZWYgUEJfRFNfQklOX1NFQVJDSF9UUkVFX1RSQUNFXworICAgICAgdm9pZAorICAgICAgdHJhY2UoKSBjb25zdAorICAgICAgeworCXN0ZDo6Y291dCA8PCBQQl9EU19WMkYobV92YWx1ZSkgPDwobV9yZWQ/ICIgPHI+ICIgOiAiIDxiPiAiKSAKKwkJICA8PCAiKCIgPDwgbV9tZXRhZGF0YSA8PCAiKSI7CisgICAgICB9CisjZW5kaWYKKworICAgICAgbm9kZV9wb2ludGVyIG1fcF9sZWZ0OworICAgICAgbm9kZV9wb2ludGVyIG1fcF9yaWdodDsKKyAgICAgIG5vZGVfcG9pbnRlciBtX3BfcGFyZW50OworICAgICAgdmFsdWVfdHlwZSBtX3ZhbHVlOworICAgICAgYm9vbCBtX3JlZDsKKyAgICAgIG1ldGFkYXRhX3R5cGUgbV9tZXRhZGF0YTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVfVHlwZSwgY2xhc3MgQWxsb2NhdG9yPgorICAgIHN0cnVjdCByYl90cmVlX25vZGVfPFZhbHVlX1R5cGUsIG51bGxfbm9kZV9tZXRhZGF0YSwgQWxsb2NhdG9yPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIFZhbHVlX1R5cGUgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgbnVsbF9ub2RlX21ldGFkYXRhIG1ldGFkYXRhX3R5cGU7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorICAgICAgcmJfdHJlZV9ub2RlXzwKKyAgICAgIFZhbHVlX1R5cGUsCisgICAgICBudWxsX25vZGVfbWV0YWRhdGEsCisgICAgICBBbGxvY2F0b3I+ID46Om90aGVyOjpwb2ludGVyCisgICAgICBub2RlX3BvaW50ZXI7CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBzcGVjaWFsKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIG1fcmVkOyB9CisKKyNpZmRlZiBQQl9EU19CSU5fU0VBUkNIX1RSRUVfVFJBQ0VfCisgICAgICB2b2lkCisgICAgICB0cmFjZSgpIGNvbnN0CisgICAgICB7IHN0ZDo6Y291dCA8PCBQQl9EU19WMkYobV92YWx1ZSkgPDwobV9yZWQ/ICIgPHI+ICIgOiAiIDxiPiAiKTsgfQorI2VuZGlmIAorCisgICAgICBub2RlX3BvaW50ZXIgbV9wX2xlZnQ7CisgICAgICBub2RlX3BvaW50ZXIgbV9wX3JpZ2h0OworICAgICAgbm9kZV9wb2ludGVyIG1fcF9wYXJlbnQ7CisgICAgICB2YWx1ZV90eXBlIG1fdmFsdWU7CisgICAgICBib29sIG1fcmVkOworICAgIH07CisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL3JiX3RyZWVfLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vcmJfdHJlZV8uaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZjRiNGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL3JiX3RyZWVfLmhwcApAQCAtMCwwICsxLDI4MCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcmJfdHJlZV8uaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgcmJfdHJlZV8uCisgKi8KKy8qCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIHVzZXMgYW4gaWRlYSBmcm9tIHRoZSBTR0kgU1RMICh1c2luZyBhIEBhIGhlYWRlciBub2RlCisgKiAgICB3aGljaCBpcyBuZWVkZWQgZm9yIGVmZmljaWVudCBpdGVyYXRpb24pLgorICovCisKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisjaWZuZGVmIFBCX0RTX0JJTl9TRUFSQ0hfVFJFRV9IUFBfX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyNkZWZpbmUgUEJfRFNfQklOX1NFQVJDSF9UUkVFX0hQUF9fREFUQV9UUlVFX0lORElDQVRPUgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9iaW5fc2VhcmNoX3RyZWVfLmhwcD4KKyNlbmRpZiAKKyNlbmRpZiAKKworI2lmZGVmIFBCX0RTX0RBVEFfRkFMU0VfSU5ESUNBVE9SCisjaWZuZGVmIFBCX0RTX0JJTl9TRUFSQ0hfVFJFRV9IUFBfX0RBVEFfRkFMU0VfSU5ESUNBVE9SCisjZGVmaW5lIFBCX0RTX0JJTl9TRUFSQ0hfVFJFRV9IUFBfX0RBVEFfRkFMU0VfSU5ESUNBVE9SCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2Jpbl9zZWFyY2hfdHJlZV8uaHBwPgorI2VuZGlmIAorI2VuZGlmIAorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9zdGFuZGFyZF9wb2xpY2llcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iYXNpY190eXBlcy5ocHA+CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgQ21wX0ZuLCBcCisJICAgICB0eXBlbmFtZSBOb2RlX0FuZF9JdF9UcmFpdHMsIHR5cGVuYW1lIEFsbG9jYXRvcj4KKworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfTkFNRSByYl90cmVlX2RhdGFfCisjZW5kaWYgCisKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisjZGVmaW5lIFBCX0RTX0JBU0VfQ0xBU1NfTkFNRSBiaW5fc2VhcmNoX3RyZWVfZGF0YV8KKyNlbmRpZiAKKworI2lmZGVmIFBCX0RTX0RBVEFfRkFMU0VfSU5ESUNBVE9SCisjZGVmaW5lIFBCX0RTX0NMQVNTX05BTUUgcmJfdHJlZV9ub19kYXRhXworI2VuZGlmIAorCisjaWZkZWYgUEJfRFNfREFUQV9GQUxTRV9JTkRJQ0FUT1IKKyNkZWZpbmUgUEJfRFNfQkFTRV9DTEFTU19OQU1FIGJpbl9zZWFyY2hfdHJlZV9ub19kYXRhXworI2VuZGlmIAorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFwKKyAgICBQQl9EU19DTEFTU19OQU1FPEtleSwgTWFwcGVkLCBDbXBfRm4sIE5vZGVfQW5kX0l0X1RyYWl0cywgQWxsb2NhdG9yPgorCisjZGVmaW5lIFBCX0RTX0JBU0VfQ19ERUMgXAorICAgIFBCX0RTX0JBU0VfQ0xBU1NfTkFNRTxLZXksIE1hcHBlZCwgQ21wX0ZuLCBOb2RlX0FuZF9JdF9UcmFpdHMsIEFsbG9jYXRvcj4KKworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyNkZWZpbmUgUEJfRFNfVjJGKFgpIChYKS5maXJzdAorI2RlZmluZSBQQl9EU19WMlMoWCkgKFgpLnNlY29uZAorI2RlZmluZSBQQl9EU19FUDJWUChYKSYgKChYKS0+bV92YWx1ZSkKKyNlbmRpZiAKKworI2lmZGVmIFBCX0RTX0RBVEFfRkFMU0VfSU5ESUNBVE9SCisjZGVmaW5lIFBCX0RTX1YyRihYKSAoWCkKKyNkZWZpbmUgUEJfRFNfVjJTKFgpIE1hcHBlZF9EYXRhKCkKKyNkZWZpbmUgUEJfRFNfRVAyVlAoWCkmICgoWCktPm1fdmFsdWUuZmlyc3QpCisjZW5kaWYgCisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksCisJICAgICB0eXBlbmFtZSBNYXBwZWQsCisJICAgICB0eXBlbmFtZSBDbXBfRm4sCisJICAgICB0eXBlbmFtZSBOb2RlX0FuZF9JdF9UcmFpdHMsCisJICAgICB0eXBlbmFtZSBBbGxvY2F0b3I+CisgICAgY2xhc3MgUEJfRFNfQ0xBU1NfTkFNRSA6IHB1YmxpYyBQQl9EU19CQVNFX0NfREVDCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIFBCX0RTX0JBU0VfQ19ERUMgYmFzZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Om5vZGVfcG9pbnRlciBub2RlX3BvaW50ZXI7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIENtcF9GbiBjbXBfZm47CisgICAgICB0eXBlZGVmIEFsbG9jYXRvciBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjpzaXplX3R5cGUgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6a2V5X3R5cGUga2V5X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6a2V5X3BvaW50ZXIga2V5X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3Rfa2V5X3BvaW50ZXIgY29uc3Rfa2V5X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6a2V5X3JlZmVyZW5jZSBrZXlfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X2tleV9yZWZlcmVuY2UgY29uc3Rfa2V5X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjptYXBwZWRfdHlwZSBtYXBwZWRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjptYXBwZWRfcG9pbnRlciBtYXBwZWRfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9tYXBwZWRfcG9pbnRlciBjb25zdF9tYXBwZWRfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjptYXBwZWRfcmVmZXJlbmNlIG1hcHBlZF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfbWFwcGVkX3JlZmVyZW5jZSBjb25zdF9tYXBwZWRfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpwb2ludGVyIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OnJlZmVyZW5jZSByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpwb2ludF9pdGVyYXRvciBwb2ludF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9wb2ludF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjppdGVyYXRvciBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpyZXZlcnNlX2l0ZXJhdG9yIHJldmVyc2VfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Om5vZGVfdXBkYXRlIG5vZGVfdXBkYXRlOworCisKKyAgICAgIFBCX0RTX0NMQVNTX05BTUUoKTsKKworICAgICAgUEJfRFNfQ0xBU1NfTkFNRShjb25zdCBDbXBfRm4mKTsKKworICAgICAgUEJfRFNfQ0xBU1NfTkFNRShjb25zdCBDbXBfRm4mLCBjb25zdCBub2RlX3VwZGF0ZSYpOworCisgICAgICBQQl9EU19DTEFTU19OQU1FKGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJik7CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXQ+CisgICAgICB2b2lkCisgICAgICBjb3B5X2Zyb21fcmFuZ2UoSXQsIEl0KTsKKworICAgICAgaW5saW5lIHN0ZDo6cGFpcjxwb2ludF9pdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydChjb25zdF9yZWZlcmVuY2UpOworCisgICAgICBpbmxpbmUgbWFwcGVkX3JlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5KQorICAgICAgeworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKwlfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKwlzdGQ6OnBhaXI8cG9pbnRfaXRlcmF0b3IsIGJvb2w+IGluc19wYWlyID0KKwliYXNlX3R5cGU6Omluc2VydF9sZWFmKHZhbHVlX3R5cGUocl9rZXksIG1hcHBlZF90eXBlKCkpKTsKKworCWlmIChpbnNfcGFpci5zZWNvbmQgPT0gdHJ1ZSkKKwkgIHsKKwkgICAgaW5zX3BhaXIuZmlyc3QubV9wX25kLT5tX3JlZCA9IHRydWU7CisJICAgIF9HTElCQ1hYX0RFQlVHX09OTFkodGhpcy0+c3RydWN0dXJlX29ubHlfYXNzZXJ0X3ZhbGlkKCk7KQorCSAgICBpbnNlcnRfZml4dXAoaW5zX3BhaXIuZmlyc3QubV9wX25kKTsKKwkgIH0KKwlfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKwlyZXR1cm4gaW5zX3BhaXIuZmlyc3QubV9wX25kLT5tX3ZhbHVlLnNlY29uZDsKKyNlbHNlIAorCWluc2VydChyX2tleSk7CisJcmV0dXJuIGJhc2VfdHlwZTo6c19udWxsX21hcHBlZDsKKyNlbmRpZiAKKyAgICAgIH0KKworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIGVyYXNlKGNvbnN0X2tleV9yZWZlcmVuY2UpOworCisgICAgICBpbmxpbmUgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yKTsKKworICAgICAgaW5saW5lIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIGVyYXNlKHJldmVyc2VfaXRlcmF0b3IpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkPgorICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgZXJhc2VfaWYoUHJlZCk7CisKKyAgICAgIHZvaWQKKyAgICAgIGpvaW4oUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgdm9pZAorICAgICAgc3BsaXQoY29uc3Rfa2V5X3JlZmVyZW5jZSwgUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgIHByb3RlY3RlZDoKKworICAgIHByaXZhdGU6CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X3ZhbGlkKCkgY29uc3Q7CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgYXNzZXJ0X25vZGVfY29uc2lzdGVudChjb25zdCBub2RlX3BvaW50ZXIpIGNvbnN0OworI2VuZGlmIAorCisgICAgICBpbmxpbmUgc3RhdGljIGJvb2wKKyAgICAgIGlzX2VmZmVjdGl2ZWx5X2JsYWNrKGNvbnN0IG5vZGVfcG9pbnRlcik7CisKKyAgICAgIHZvaWQKKyAgICAgIGluaXRpYWxpemUoKTsKKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0X2ZpeHVwKG5vZGVfcG9pbnRlcik7CisKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlX25vZGUobm9kZV9wb2ludGVyKTsKKworICAgICAgdm9pZAorICAgICAgcmVtb3ZlX25vZGUobm9kZV9wb2ludGVyKTsKKworICAgICAgdm9pZAorICAgICAgcmVtb3ZlX2ZpeHVwKG5vZGVfcG9pbnRlciwgbm9kZV9wb2ludGVyKTsKKworICAgICAgdm9pZAorICAgICAgc3BsaXRfaW1wKG5vZGVfcG9pbnRlciwgUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgaW5saW5lIG5vZGVfcG9pbnRlcgorICAgICAgc3BsaXRfbWluKCk7CisKKyAgICAgIHN0ZDo6cGFpcjxub2RlX3BvaW50ZXIsIG5vZGVfcG9pbnRlcj4KKyAgICAgIHNwbGl0X21pbl9pbXAoKTsKKworICAgICAgdm9pZAorICAgICAgam9pbl9pbXAobm9kZV9wb2ludGVyLCBub2RlX3BvaW50ZXIpOworCisgICAgICBzdGQ6OnBhaXI8bm9kZV9wb2ludGVyLCBub2RlX3BvaW50ZXI+CisgICAgICBmaW5kX2pvaW5fcG9zX3JpZ2h0KG5vZGVfcG9pbnRlciwgc2l6ZV90eXBlLCBzaXplX3R5cGUpOworCisgICAgICBzdGQ6OnBhaXI8bm9kZV9wb2ludGVyLCBub2RlX3BvaW50ZXI+CisgICAgICBmaW5kX2pvaW5fcG9zX2xlZnQobm9kZV9wb2ludGVyLCBzaXplX3R5cGUsIHNpemVfdHlwZSk7CisKKyAgICAgIGlubGluZSBzaXplX3R5cGUKKyAgICAgIGJsYWNrX2hlaWdodChub2RlX3BvaW50ZXIpOworCisgICAgICB2b2lkCisgICAgICBzcGxpdF9hdF9ub2RlKG5vZGVfcG9pbnRlciwgUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKyAgICB9OworCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL2VyYXNlX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL2RlYnVnX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vaW5mb19mbl9pbXBzLmhwcD4KKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19OQU1FCisjdW5kZWYgUEJfRFNfQkFTRV9DTEFTU19OQU1FCisjdW5kZWYgUEJfRFNfQkFTRV9DX0RFQworI3VuZGVmIFBCX0RTX1YyRgorI3VuZGVmIFBCX0RTX0VQMlZQCisjdW5kZWYgUEJfRFNfVjJTCisKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Nzc2YThkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3JiX3RyZWVfbWFwXy9zcGxpdF9qb2luX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMzEzIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBzcGxpdF9qb2luX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgcmJfdHJlZV8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citqb2luKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKCk7KQorICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmJhc2VfdHlwZTo6YXNzZXJ0X3ZhbGlkKCk7KQorICBpZiAoYmFzZV90eXBlOjpqb2luX3ByZXAob3RoZXIpID09IGZhbHNlKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspCisgICAgICByZXR1cm47CisgICAgfQorCisgIGNvbnN0IG5vZGVfcG9pbnRlciBwX3ggPSBvdGhlci5zcGxpdF9taW4oKTsKKyAgam9pbl9pbXAocF94LCBvdGhlci5tX3BfaGVhZC0+bV9wX3BhcmVudCk7CisgIGJhc2VfdHlwZTo6am9pbl9maW5pc2gob3RoZXIpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgX0dMSUJDWFhfREVCVUdfT05MWShiYXNlX3R5cGU6OmFzc2VydF92YWxpZCgpOykKKyAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspCisgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYmFzZV90eXBlOjphc3NlcnRfdmFsaWQoKTspCisgfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogoram9pbl9pbXAobm9kZV9wb2ludGVyIHBfeCwgbm9kZV9wb2ludGVyIHBfcikKK3sKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfeCAhPSBOVUxMKTsKKyAgaWYgKHBfciAhPSBOVUxMKQorICAgIHBfci0+bV9yZWQgPSBmYWxzZTsKKworICBjb25zdCBzaXplX3R5cGUgaCA9IGJsYWNrX2hlaWdodChiYXNlX3R5cGU6Om1fcF9oZWFkLT5tX3BfcGFyZW50KTsKKyAgY29uc3Qgc2l6ZV90eXBlIG90aGVyX2ggPSBibGFja19oZWlnaHQocF9yKTsKKyAgbm9kZV9wb2ludGVyIHBfeF9sOworICBub2RlX3BvaW50ZXIgcF94X3I7CisgIHN0ZDo6cGFpcjxub2RlX3BvaW50ZXIsIG5vZGVfcG9pbnRlcj4gam9pbl9wb3M7CisgIGNvbnN0IGJvb2wgcmlnaHRfam9pbiA9IGggPj0gb3RoZXJfaDsKKyAgaWYgKHJpZ2h0X2pvaW4pCisgICAgeworICAgICAgam9pbl9wb3MgPSBmaW5kX2pvaW5fcG9zX3JpZ2h0KGJhc2VfdHlwZTo6bV9wX2hlYWQtPm1fcF9wYXJlbnQsIAorCQkJCSAgICAgaCwgb3RoZXJfaCk7CisgICAgICBwX3hfbCA9IGpvaW5fcG9zLmZpcnN0OworICAgICAgcF94X3IgPSBwX3I7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcF94X2wgPSBiYXNlX3R5cGU6Om1fcF9oZWFkLT5tX3BfcGFyZW50OworICAgICAgYmFzZV90eXBlOjptX3BfaGVhZC0+bV9wX3BhcmVudCA9IHBfcjsKKyAgICAgIGlmIChwX3IgIT0gTlVMTCkKKwlwX3ItPm1fcF9wYXJlbnQgPSBiYXNlX3R5cGU6Om1fcF9oZWFkOworCisgICAgICBqb2luX3BvcyA9IGZpbmRfam9pbl9wb3NfbGVmdChiYXNlX3R5cGU6Om1fcF9oZWFkLT5tX3BfcGFyZW50LCAKKwkJCQkgICAgaCwgb3RoZXJfaCk7CisgICAgICBwX3hfciA9IGpvaW5fcG9zLmZpcnN0OworICAgIH0KKworICBub2RlX3BvaW50ZXIgcF9wYXJlbnQgPSBqb2luX3Bvcy5zZWNvbmQ7CisgIGlmIChwX3BhcmVudCA9PSBiYXNlX3R5cGU6Om1fcF9oZWFkKQorICAgIHsKKyAgICAgIGJhc2VfdHlwZTo6bV9wX2hlYWQtPm1fcF9wYXJlbnQgPSBwX3g7CisgICAgICBwX3gtPm1fcF9wYXJlbnQgPSBiYXNlX3R5cGU6Om1fcF9oZWFkOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHBfeC0+bV9wX3BhcmVudCA9IHBfcGFyZW50OworICAgICAgaWYgKHJpZ2h0X2pvaW4pCisJcF94LT5tX3BfcGFyZW50LT5tX3BfcmlnaHQgPSBwX3g7CisgICAgICBlbHNlCisJcF94LT5tX3BfcGFyZW50LT5tX3BfbGVmdCA9IHBfeDsKKyAgICB9CisKKyAgcF94LT5tX3BfbGVmdCA9IHBfeF9sOworICBpZiAocF94X2wgIT0gTlVMTCkKKyAgICBwX3hfbC0+bV9wX3BhcmVudCA9IHBfeDsKKworICBwX3gtPm1fcF9yaWdodCA9IHBfeF9yOworICBpZiAocF94X3IgIT0gTlVMTCkKKyAgICBwX3hfci0+bV9wX3BhcmVudCA9IHBfeDsKKworICBwX3gtPm1fcmVkID0gdHJ1ZTsKKworICBiYXNlX3R5cGU6OmluaXRpYWxpemVfbWluX21heCgpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGJhc2VfdHlwZTo6c3RydWN0dXJlX29ubHlfYXNzZXJ0X3ZhbGlkKCk7KQorICBiYXNlX3R5cGU6OnVwZGF0ZV90b190b3AocF94LCAobm9kZV91cGRhdGUqICl0aGlzKTsKKyAgaW5zZXJ0X2ZpeHVwKHBfeCk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYmFzZV90eXBlOjpzdHJ1Y3R1cmVfb25seV9hc3NlcnRfdmFsaWQoKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3BsaXRfbWluKCkKK3sKKyAgbm9kZV9wb2ludGVyIHBfbWluID0gYmFzZV90eXBlOjptX3BfaGVhZC0+bV9wX2xlZnQ7CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICBjb25zdCBub2RlX3BvaW50ZXIgcF9oZWFkID0gYmFzZV90eXBlOjptX3BfaGVhZDsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbWluICE9IHBfaGVhZCk7CisjZW5kaWYgCisKKyAgcmVtb3ZlX25vZGUocF9taW4pOworICByZXR1cm4gcF9taW47Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitzdGQ6OnBhaXI8CisgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX3BvaW50ZXIsCisgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX3BvaW50ZXI+CitQQl9EU19DTEFTU19DX0RFQzo6CitmaW5kX2pvaW5fcG9zX3JpZ2h0KG5vZGVfcG9pbnRlciBwX2wsIHNpemVfdHlwZSBoX2wsIHNpemVfdHlwZSBoX3IpCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChoX2wgPj0gaF9yKTsKKworICBpZiAoYmFzZV90eXBlOjptX3BfaGVhZC0+bV9wX3BhcmVudCA9PSBOVUxMKQorICAgIHJldHVybiAoc3RkOjptYWtlX3BhaXIoKG5vZGVfcG9pbnRlcilOVUxMLCBiYXNlX3R5cGU6Om1fcF9oZWFkKSk7CisKKyAgbm9kZV9wb2ludGVyIHBfbF9wYXJlbnQgPSBiYXNlX3R5cGU6Om1fcF9oZWFkOworICB3aGlsZSAoaF9sID4gaF9yKQorICAgIHsKKyAgICAgIGlmIChwX2wtPm1fcmVkID09IGZhbHNlKQorICAgICAgICB7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoaF9sID4gMCk7CisJICAtLWhfbDsKKyAgICAgICAgfQorCisgICAgICBwX2xfcGFyZW50ID0gcF9sOworICAgICAgcF9sID0gcF9sLT5tX3BfcmlnaHQ7CisgICAgfQorCisgIGlmICghaXNfZWZmZWN0aXZlbHlfYmxhY2socF9sKSkKKyAgICB7CisgICAgICBwX2xfcGFyZW50ID0gcF9sOworICAgICAgcF9sID0gcF9sLT5tX3BfcmlnaHQ7CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChpc19lZmZlY3RpdmVseV9ibGFjayhwX2wpKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGJsYWNrX2hlaWdodChwX2wpID09IGhfcik7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX2wgPT0gTlVMTCB8fCBwX2wtPm1fcF9wYXJlbnQgPT0gcF9sX3BhcmVudCk7CisgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihwX2wsIHBfbF9wYXJlbnQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworc3RkOjpwYWlyPAorICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9wb2ludGVyLAorICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9wb2ludGVyPgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZmluZF9qb2luX3Bvc19sZWZ0KG5vZGVfcG9pbnRlciBwX3IsIHNpemVfdHlwZSBoX2wsIHNpemVfdHlwZSBoX3IpCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChoX3IgPiBoX2wpOworICBpZiAoYmFzZV90eXBlOjptX3BfaGVhZC0+bV9wX3BhcmVudCA9PSBOVUxMKQorICAgIHJldHVybiAoc3RkOjptYWtlX3BhaXIoKG5vZGVfcG9pbnRlcilOVUxMLAorCQkJICAgYmFzZV90eXBlOjptX3BfaGVhZCkpOworICBub2RlX3BvaW50ZXIgcF9yX3BhcmVudCA9IGJhc2VfdHlwZTo6bV9wX2hlYWQ7CisgIHdoaWxlIChoX3IgPiBoX2wpCisgICAgeworICAgICAgaWYgKHBfci0+bV9yZWQgPT0gZmFsc2UpCisgICAgICAgIHsKKwkgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChoX3IgPiAwKTsKKwkgIC0taF9yOworICAgICAgICB9CisKKyAgICAgIHBfcl9wYXJlbnQgPSBwX3I7CisgICAgICBwX3IgPSBwX3ItPm1fcF9sZWZ0OworICAgIH0KKworICBpZiAoIWlzX2VmZmVjdGl2ZWx5X2JsYWNrKHBfcikpCisgICAgeworICAgICAgcF9yX3BhcmVudCA9IHBfcjsKKyAgICAgIHBfciA9IHBfci0+bV9wX2xlZnQ7CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChpc19lZmZlY3RpdmVseV9ibGFjayhwX3IpKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGJsYWNrX2hlaWdodChwX3IpID09IGhfbCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3IgPT0gTlVMTCB8fCBwX3ItPm1fcF9wYXJlbnQgPT0gcF9yX3BhcmVudCk7CisgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihwX3IsIHBfcl9wYXJlbnQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2JsYWNrX2hlaWdodChub2RlX3BvaW50ZXIgcF9uZCkKK3sKKyAgc2l6ZV90eXBlIGggPSAxOworICB3aGlsZSAocF9uZCAhPSBOVUxMKQorICAgIHsKKyAgICAgIGlmIChwX25kLT5tX3JlZCA9PSBmYWxzZSkKKwkrK2g7CisgICAgICBwX25kID0gcF9uZC0+bV9wX2xlZnQ7CisgICAgfQorICByZXR1cm4gaDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3NwbGl0KGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXksIFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKSk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYmFzZV90eXBlOjphc3NlcnRfdmFsaWQoKTspCisKKyAgICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5iYXNlX3R5cGU6OmFzc2VydF92YWxpZCgpOykKKworICAgIGlmIChiYXNlX3R5cGU6OnNwbGl0X3ByZXAocl9rZXksIG90aGVyKSA9PSBmYWxzZSkKKyAgICAgIHsKKyAgICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKSk7CisgICAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKCkpOworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShiYXNlX3R5cGU6OnN0cnVjdHVyZV9vbmx5X2Fzc2VydF92YWxpZCgpOykKKyAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5iYXNlX3R5cGU6OnN0cnVjdHVyZV9vbmx5X2Fzc2VydF92YWxpZCgpOykKKyAgbm9kZV9wb2ludGVyIHBfbmQgPSB1cHBlcl9ib3VuZChyX2tleSkubV9wX25kOworICBkbworICAgIHsKKyAgICAgIG5vZGVfcG9pbnRlciBwX25leHRfbmQgPSBwX25kLT5tX3BfcGFyZW50OworICAgICAgaWYgKENtcF9Gbjo6b3BlcmF0b3IoKShyX2tleSwgUEJfRFNfVjJGKHBfbmQtPm1fdmFsdWUpKSkKKwlzcGxpdF9hdF9ub2RlKHBfbmQsIG90aGVyKTsKKworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShiYXNlX3R5cGU6OnN0cnVjdHVyZV9vbmx5X2Fzc2VydF92YWxpZCgpOykKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYmFzZV90eXBlOjpzdHJ1Y3R1cmVfb25seV9hc3NlcnRfdmFsaWQoKTspCisgICAgICBwX25kID0gcF9uZXh0X25kOworICAgIH0KKyAgd2hpbGUgKHBfbmQgIT0gYmFzZV90eXBlOjptX3BfaGVhZCk7CisKKyAgYmFzZV90eXBlOjpzcGxpdF9maW5pc2gob3RoZXIpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitzcGxpdF9hdF9ub2RlKG5vZGVfcG9pbnRlciBwX25kLCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kICE9IE5VTEwpOworCisgIG5vZGVfcG9pbnRlciBwX2wgPSBwX25kLT5tX3BfbGVmdDsKKyAgbm9kZV9wb2ludGVyIHBfciA9IHBfbmQtPm1fcF9yaWdodDsKKyAgbm9kZV9wb2ludGVyIHBfcGFyZW50ID0gcF9uZC0+bV9wX3BhcmVudDsKKyAgaWYgKHBfcGFyZW50ID09IGJhc2VfdHlwZTo6bV9wX2hlYWQpCisgICAgeworICAgICAgYmFzZV90eXBlOjptX3BfaGVhZC0+bV9wX3BhcmVudCA9IHBfbDsKKyAgICAgIGlmIChwX2wgIT0gTlVMTCkKKyAgICAgICAgeworCSAgcF9sLT5tX3BfcGFyZW50ID0gYmFzZV90eXBlOjptX3BfaGVhZDsKKwkgIHBfbC0+bV9yZWQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChwX3BhcmVudC0+bV9wX2xlZnQgPT0gcF9uZCkKKwlwX3BhcmVudC0+bV9wX2xlZnQgPSBwX2w7CisgICAgICBlbHNlCisJcF9wYXJlbnQtPm1fcF9yaWdodCA9IHBfbDsKKworICAgICAgaWYgKHBfbCAhPSBOVUxMKQorCXBfbC0+bV9wX3BhcmVudCA9IHBfcGFyZW50OworCisgICAgICB1cGRhdGVfdG9fdG9wKHBfcGFyZW50LCAobm9kZV91cGRhdGUqICl0aGlzKTsKKworICAgICAgaWYgKCFwX25kLT5tX3JlZCkKKwlyZW1vdmVfZml4dXAocF9sLCBwX3BhcmVudCk7CisgICAgfQorCisgIGJhc2VfdHlwZTo6aW5pdGlhbGl6ZV9taW5fbWF4KCk7CisgIG90aGVyLmpvaW5faW1wKHBfbmQsIHBfcik7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYmFzZV90eXBlOjpzdHJ1Y3R1cmVfb25seV9hc3NlcnRfdmFsaWQoKSk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYmFzZV90eXBlOjpzdHJ1Y3R1cmVfb25seV9hc3NlcnRfdmFsaWQoKSk7Cit9CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vdHJhaXRzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vdHJhaXRzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzFkOGU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3JiX3RyZWVfbWFwXy90cmFpdHMuaHBwCkBAIC0wLDAgKzEsMTI0IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSB0cmFpdHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgcmJfdHJlZV8uCisgKi8KKworI2lmbmRlZiBQQl9EU19SQl9UUkVFX05PREVfQU5EX0lUX1RSQUlUU19IUFAKKyNkZWZpbmUgUEJfRFNfUkJfVFJFRV9OT0RFX0FORF9JVF9UUkFJVFNfSFBQCisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3JiX3RyZWVfbWFwXy9ub2RlLmhwcD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LAorCSAgICAgdHlwZW5hbWUgTWFwcGVkLAorCSAgICAgdHlwZW5hbWUgQ21wX0ZuLAorCSAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29uc3RfTm9kZV9JdGVyYXRvciwKKwkJICAgICAgY2xhc3MgTm9kZV9JdGVyYXRvciwKKwkJICAgICAgY2xhc3MgQ21wX0ZuXywKKwkJICAgICAgY2xhc3MgQWxsb2NhdG9yXz4KKyAgICBjbGFzcyBOb2RlX1VwZGF0ZSwKKwkgICAgIHR5cGVuYW1lIEFsbG9jYXRvcj4KKyAgICBzdHJ1Y3QgdHJlZV90cmFpdHM8CisgICAgICBLZXksCisgICAgICBNYXBwZWQsCisgICAgICBDbXBfRm4sCisgICAgICBOb2RlX1VwZGF0ZSwKKyAgICAgIHJiX3RyZWVfdGFnLAorICAgICAgQWxsb2NhdG9yPiA6IHB1YmxpYyBiaW5fc2VhcmNoX3RyZWVfdHJhaXRzPAorICAgICAgS2V5LAorICAgICAgTWFwcGVkLAorICAgICAgQ21wX0ZuLAorICAgICAgTm9kZV9VcGRhdGUsCisgICAgICByYl90cmVlX25vZGVfPAorICAgICAgdHlwZW5hbWUgdHlwZXNfdHJhaXRzPAorICAgICAgS2V5LAorICAgICAgTWFwcGVkLAorICAgICAgQWxsb2NhdG9yLAorICAgICAgZmFsc2U+Ojp2YWx1ZV90eXBlLAorICAgICAgdHlwZW5hbWUgdHJlZV9ub2RlX21ldGFkYXRhX3NlbGVjdG9yPAorICAgICAgS2V5LAorICAgICAgTWFwcGVkLAorICAgICAgQ21wX0ZuLAorICAgICAgTm9kZV9VcGRhdGUsCisgICAgICBBbGxvY2F0b3I+Ojp0eXBlLAorICAgICAgQWxsb2NhdG9yPiwKKyAgICAgIEFsbG9jYXRvcj4KKyAgICB7IH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksCisJICAgICBjbGFzcyBDbXBfRm4sCisJICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25zdF9Ob2RlX0l0ZXJhdG9yLAorCQkgICAgICBjbGFzcyBOb2RlX0l0ZXJhdG9yLAorCQkgICAgICBjbGFzcyBDbXBfRm5fLAorCQkgICAgICBjbGFzcyBBbGxvY2F0b3JfPgorICAgIGNsYXNzIE5vZGVfVXBkYXRlLAorCSAgICAgY2xhc3MgQWxsb2NhdG9yPgorICAgIHN0cnVjdCB0cmVlX3RyYWl0czwKKyAgICAgIEtleSwKKyAgICAgIG51bGxfbWFwcGVkX3R5cGUsCisgICAgICBDbXBfRm4sCisgICAgICBOb2RlX1VwZGF0ZSwKKyAgICAgIHJiX3RyZWVfdGFnLAorICAgICAgQWxsb2NhdG9yPiA6IHB1YmxpYyBiaW5fc2VhcmNoX3RyZWVfdHJhaXRzPAorICAgICAgS2V5LAorICAgICAgbnVsbF9tYXBwZWRfdHlwZSwKKyAgICAgIENtcF9GbiwKKyAgICAgIE5vZGVfVXBkYXRlLAorICAgICAgcmJfdHJlZV9ub2RlXzwKKyAgICAgIHR5cGVuYW1lIHR5cGVzX3RyYWl0czwKKyAgICAgIEtleSwKKyAgICAgIG51bGxfbWFwcGVkX3R5cGUsCisgICAgICBBbGxvY2F0b3IsCisgICAgICBmYWxzZT46OnZhbHVlX3R5cGUsCisgICAgICB0eXBlbmFtZSB0cmVlX25vZGVfbWV0YWRhdGFfc2VsZWN0b3I8CisgICAgICBLZXksCisgICAgICBudWxsX21hcHBlZF90eXBlLAorICAgICAgQ21wX0ZuLAorICAgICAgTm9kZV9VcGRhdGUsCisgICAgICBBbGxvY2F0b3I+Ojp0eXBlLAorICAgICAgQWxsb2NhdG9yPiwKKyAgICAgIEFsbG9jYXRvcj4KKyAgICB7IH07CisKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9yY19iaW5vbWlhbF9oZWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9yY19iaW5vbWlhbF9oZWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjRkY2ZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3JjX2Jpbm9taWFsX2hlYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsODggQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGNvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgcmNfYmlub21pYWxfaGVhcF8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JjX2Jpbm9taWFsX2hlYXBfKCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmNfYmlub21pYWxfaGVhcF8oY29uc3QgQ21wX0ZuJiByX2NtcF9mbikgOgorICBQQl9EU19CQVNFX0NfREVDKHJfY21wX2ZuKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CityY19iaW5vbWlhbF9oZWFwXyhjb25zdCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpIDoKKyAgUEJfRFNfQkFTRV9DX0RFQyhvdGhlcikKK3sKKyAgbWFrZV9iaW5vbWlhbF9oZWFwKCk7CisKKyAgYmFzZV90eXBlOjpmaW5kX21heCgpOworCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgIH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK35yY19iaW5vbWlhbF9oZWFwXygpCit7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpOykKKworICAgIGJhc2VfdHlwZTo6c3dhcChvdGhlcik7CisKKyAgbV9yYy5zd2FwKG90aGVyLm1fcmMpOworCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKCk7KQorICAgIH0KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3JjX2Jpbm9taWFsX2hlYXBfL2RlYnVnX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3JjX2Jpbm9taWFsX2hlYXBfL2RlYnVnX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOTQ5MDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmNfYmlub21pYWxfaGVhcF8vZGVidWdfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxMjEgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGRlYnVnX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgcmNfYmlub21pYWxfaGVhcF8uCisgKi8KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfdmFsaWQoKSBjb25zdAoreworICBiYXNlX3R5cGU6OmFzc2VydF92YWxpZChmYWxzZSk7CisgIGlmICghYmFzZV90eXBlOjplbXB0eSgpKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChiYXNlX3R5cGU6Om1fcF9tYXggIT0gTlVMTCk7CisgICAgICBiYXNlX3R5cGU6OmFzc2VydF9tYXgoKTsKKyAgICB9CisKKyAgbV9yYy5hc3NlcnRfdmFsaWQoKTsKKworICBpZiAobV9yYy5lbXB0eSgpKQorICAgIHsKKyAgICAgIGJhc2VfdHlwZTo6YXNzZXJ0X3ZhbGlkKHRydWUpOworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG5leHRfMl9wb2ludGVyKGJhc2VfdHlwZTo6bV9wX3Jvb3QpID09IE5VTEwpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBjb25zdF9ub2RlX3BvaW50ZXIgcF9uZCA9IG5leHRfMl9wb2ludGVyKGJhc2VfdHlwZTo6bV9wX3Jvb3QpOworICB0eXBlbmFtZSByY190Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmMuZW5kKCk7CisgIC0taXQ7CisKKyAgd2hpbGUgKHBfbmQgIT0gTlVMTCkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoKml0ID09IHBfbmQpOworICAgICAgY29uc3Rfbm9kZV9wb2ludGVyIHBfbmV4dCA9IHBfbmQtPm1fcF9uZXh0X3NpYmxpbmc7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZXh0ICE9IE5VTEwpOworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQtPm1fbWV0YWRhdGEgPT0gcF9uZXh0LT5tX21ldGFkYXRhKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25leHQtPm1fcF9uZXh0X3NpYmxpbmcgPT0gTlVMTCB8fAorCQkgICAgICAgcF9uZXh0LT5tX21ldGFkYXRhIDwgcF9uZXh0LT5tX3BfbmV4dF9zaWJsaW5nLT5tX21ldGFkYXRhKTsKKworICAgICAgLS1pdDsKKyAgICAgIHBfbmQgPSBuZXh0XzJfcG9pbnRlcihuZXh0X2FmdGVyXzBfcG9pbnRlcihwX25kKSk7CisgICAgfQorICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoaXQgKyAxID09IG1fcmMuYmVnaW4oKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3Rfbm9kZV9wb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6CituZXh0XzJfcG9pbnRlcihjb25zdF9ub2RlX3BvaW50ZXIgcF9uZCkKK3sKKyAgaWYgKHBfbmQgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKworICBub2RlX3BvaW50ZXIgcF9uZXh0ID0gcF9uZC0+bV9wX25leHRfc2libGluZzsKKworICBpZiAocF9uZXh0ID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgaWYgKHBfbmQtPm1fbWV0YWRhdGEgPT0gcF9uZXh0LT5tX21ldGFkYXRhKQorICAgIHJldHVybiBwX25kOworCisgIHJldHVybiBuZXh0XzJfcG9pbnRlcihwX25leHQpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X25vZGVfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorbmV4dF9hZnRlcl8wX3BvaW50ZXIoY29uc3Rfbm9kZV9wb2ludGVyIHBfbmQpCit7CisgIGlmIChwX25kID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgbm9kZV9wb2ludGVyIHBfbmV4dCA9IHBfbmQtPm1fcF9uZXh0X3NpYmxpbmc7CisKKyAgaWYgKHBfbmV4dCA9PSBOVUxMKQorICAgIHJldHVybiBOVUxMOworCisgIGlmIChwX25kLT5tX21ldGFkYXRhIDwgcF9uZXh0LT5tX21ldGFkYXRhKQorICAgIHJldHVybiBwX25leHQ7CisKKyAgcmV0dXJuIG5leHRfYWZ0ZXJfMF9wb2ludGVyKHBfbmV4dCk7Cit9CisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9yY19iaW5vbWlhbF9oZWFwXy9lcmFzZV9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9yY19iaW5vbWlhbF9oZWFwXy9lcmFzZV9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTEzZmZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3JjX2Jpbm9taWFsX2hlYXBfL2VyYXNlX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTA3IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBlcmFzZV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gZm9yIHJjX2Jpbm9taWFsX2hlYXBfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcG9wKCkKK3sKKyAgbWFrZV9iaW5vbWlhbF9oZWFwKCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCghYmFzZV90eXBlOjplbXB0eSgpKTsKKyAgYmFzZV90eXBlOjpwb3AoKTsKKyAgYmFzZV90eXBlOjpmaW5kX21heCgpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY2xlYXIoKQoreworICBiYXNlX3R5cGU6OmNsZWFyKCk7CisgIG1fcmMuY2xlYXIoKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK21ha2VfYmlub21pYWxfaGVhcCgpCit7CisgIG5vZGVfcG9pbnRlciBwX25kID0gYmFzZV90eXBlOjptX3Bfcm9vdDsKKyAgd2hpbGUgKHBfbmQgIT0gTlVMTCkKKyAgICB7CisgICAgICBub2RlX3BvaW50ZXIgcF9uZXh0ID0gcF9uZC0+bV9wX25leHRfc2libGluZzsKKyAgICAgIGlmIChwX25leHQgPT0gTlVMTCkKKwlwX25kID0gcF9uZXh0OworICAgICAgZWxzZSBpZiAocF9uZC0+bV9tZXRhZGF0YSA9PSBwX25leHQtPm1fbWV0YWRhdGEpCisJcF9uZCA9IGxpbmtfd2l0aF9uZXh0X3NpYmxpbmcocF9uZCk7CisgICAgICBlbHNlIGlmIChwX25kLT5tX21ldGFkYXRhIDwgcF9uZXh0LT5tX21ldGFkYXRhKQorCXBfbmQgPSBwX25leHQ7CisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIGVsc2UKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoMCk7CisjZW5kaWYgCisgICAgfQorCisgIG1fcmMuY2xlYXIoKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIFByZWQ+Cit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZV9pZihQcmVkIHByZWQpCit7CisgIG1ha2VfYmlub21pYWxfaGVhcCgpOworICBjb25zdCBzaXplX3R5cGUgZXJzZCA9IGJhc2VfdHlwZTo6ZXJhc2VfaWYocHJlZCk7CisgIGJhc2VfdHlwZTo6ZmluZF9tYXgoKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIHJldHVybiBlcnNkOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2UocG9pbnRfaXRlcmF0b3IgaXQpCit7CisgIG1ha2VfYmlub21pYWxfaGVhcCgpOworICBiYXNlX3R5cGU6OmVyYXNlKGl0KTsKKyAgYmFzZV90eXBlOjpmaW5kX21heCgpOworfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmNfYmlub21pYWxfaGVhcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3JjX2Jpbm9taWFsX2hlYXBfL2luc2VydF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWY0YjkyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3JjX2Jpbm9taWFsX2hlYXBfL2luc2VydF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDE1NCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgaW5zZXJ0X2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgcmNfYmlub21pYWxfaGVhcF8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6cG9pbnRfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3B1c2goY29uc3RfcmVmZXJlbmNlIHJfdmFsKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKworICAgIG1ha2VfMF9leHBvc2VkKCk7CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisKKyAgICBub2RlX3BvaW50ZXIgcF9uZCA9IGJhc2VfdHlwZTo6Z2V0X25ld19ub2RlX2Zvcl9pbnNlcnQocl92YWwpOworCisgIHBfbmQtPm1fcF9sX2NoaWxkID0gcF9uZC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gTlVMTDsKKyAgcF9uZC0+bV9tZXRhZGF0YSA9IDA7CisKKyAgaWYgKGJhc2VfdHlwZTo6bV9wX21heCA9PSBOVUxMIHx8IENtcF9Gbjo6b3BlcmF0b3IoKShiYXNlX3R5cGU6Om1fcF9tYXgtPm1fdmFsdWUsIHJfdmFsKSkKKyAgICBiYXNlX3R5cGU6Om1fcF9tYXggPSBwX25kOworCisgIHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgPSBiYXNlX3R5cGU6Om1fcF9yb290OworCisgIGlmIChiYXNlX3R5cGU6Om1fcF9yb290ICE9IE5VTEwpCisgICAgYmFzZV90eXBlOjptX3Bfcm9vdC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9uZDsKKworICBiYXNlX3R5cGU6Om1fcF9yb290ID0gcF9uZDsKKworICBpZiAocF9uZC0+bV9wX25leHRfc2libGluZyAhPSBOVUxMJiYgIHBfbmQtPm1fcF9uZXh0X3NpYmxpbmctPm1fbWV0YWRhdGEgPT0gMCkKKyAgICBtX3JjLnB1c2gocF9uZCk7CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisKKyAgICByZXR1cm4gcG9pbnRfaXRlcmF0b3IocF9uZCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cittb2RpZnkocG9pbnRfaXRlcmF0b3IgaXQsIGNvbnN0X3JlZmVyZW5jZSByX25ld192YWwpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorCisgICAgbWFrZV9iaW5vbWlhbF9oZWFwKCk7CisKKyAgYmFzZV90eXBlOjptb2RpZnkoaXQsIHJfbmV3X3ZhbCk7CisKKyAgYmFzZV90eXBlOjpmaW5kX21heCgpOworCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgIH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9wb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6CitsaW5rX3dpdGhfbmV4dF9zaWJsaW5nKG5vZGVfcG9pbnRlciBwX25kKQoreworICBub2RlX3BvaW50ZXIgcF9uZXh0ID0gcF9uZC0+bV9wX25leHRfc2libGluZzsKKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZXh0ICE9IE5VTEwpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZXh0LT5tX3BfcHJldl9vcl9wYXJlbnQgPT0gcF9uZCk7CisKKyAgaWYgKENtcF9Gbjo6b3BlcmF0b3IoKShwX25kLT5tX3ZhbHVlLCBwX25leHQtPm1fdmFsdWUpKQorICAgIHsKKyAgICAgIHBfbmV4dC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9uZC0+bV9wX3ByZXZfb3JfcGFyZW50OworCisgICAgICBpZiAocF9uZXh0LT5tX3BfcHJldl9vcl9wYXJlbnQgPT0gTlVMTCkKKwliYXNlX3R5cGU6Om1fcF9yb290ID0gcF9uZXh0OworICAgICAgZWxzZQorCXBfbmV4dC0+bV9wX3ByZXZfb3JfcGFyZW50LT5tX3BfbmV4dF9zaWJsaW5nID0gcF9uZXh0OworCisgICAgICBpZiAoYmFzZV90eXBlOjptX3BfbWF4ID09IHBfbmQpCisJYmFzZV90eXBlOjptX3BfbWF4ID0gcF9uZXh0OworCisgICAgICBiYXNlX3R5cGU6Om1ha2VfY2hpbGRfb2YocF9uZCwgcF9uZXh0KTsKKworICAgICAgKytwX25leHQtPm1fbWV0YWRhdGE7CisKKyAgICAgIHJldHVybiBwX25leHQ7CisgICAgfQorCisgIHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgPSBwX25leHQtPm1fcF9uZXh0X3NpYmxpbmc7CisKKyAgaWYgKHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgIT0gTlVMTCkKKyAgICBwX25kLT5tX3BfbmV4dF9zaWJsaW5nLT5tX3BfcHJldl9vcl9wYXJlbnQgPSBwX25kOworCisgIGlmIChiYXNlX3R5cGU6Om1fcF9tYXggPT0gcF9uZXh0KQorICAgIGJhc2VfdHlwZTo6bV9wX21heCA9IHBfbmQ7CisKKyAgYmFzZV90eXBlOjptYWtlX2NoaWxkX29mKHBfbmV4dCwgcF9uZCk7CisKKyAgKytwX25kLT5tX21ldGFkYXRhOworCisgIHJldHVybiBwX25kOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorbWFrZV8wX2V4cG9zZWQoKQoreworICBpZiAobV9yYy5lbXB0eSgpKQorICAgIHJldHVybjsKKworICBub2RlX3BvaW50ZXIgcF9uZCA9IG1fcmMudG9wKCk7CisKKyAgbV9yYy5wb3AoKTsKKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV9wX25leHRfc2libGluZyAhPSBOVUxMKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQtPm1fbWV0YWRhdGEgPT0gcF9uZC0+bV9wX25leHRfc2libGluZy0+bV9tZXRhZGF0YSk7CisKKyAgbm9kZV9wb2ludGVyIHBfcmVzID0gbGlua193aXRoX25leHRfc2libGluZyhwX25kKTsKKworICBpZiAocF9yZXMtPm1fcF9uZXh0X3NpYmxpbmcgIT0gTlVMTCYmICBwX3Jlcy0+bV9tZXRhZGF0YSA9PSBwX3Jlcy0+bV9wX25leHRfc2libGluZy0+bV9tZXRhZGF0YSkKKyAgICBtX3JjLnB1c2gocF9yZXMpOworfQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3JjX2Jpbm9taWFsX2hlYXBfL3JjLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9yY19iaW5vbWlhbF9oZWFwXy9yYy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI3MGFjYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9yY19iaW5vbWlhbF9oZWFwXy9yYy5ocHAKQEAgLTAsMCArMSwyNjIgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHJjLmhwcAorICogQ29udGFpbnMgYSByZWR1bmRhbnQgKGJpbmFyeSBjb3VudGVyKS4KKyAqLworCisjaWZuZGVmIFBCX0RTX1JDX0hQUAorI2RlZmluZSBQQl9EU19SQ19IUFAKKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGUsIGNsYXNzIEFsbG9jYXRvcj4KKworI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBcCisgICAgcmM8Tm9kZSwgQWxsb2NhdG9yPgorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTm9kZSwgY2xhc3MgQWxsb2NhdG9yPgorICAgIGNsYXNzIHJjCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIEFsbG9jYXRvciBhbGxvY2F0b3JfdHlwZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhbGxvY2F0b3JfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKKworICAgICAgdHlwZWRlZiBOb2RlIG5vZGU7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIGFsbG9jYXRvcl90eXBlOjp0ZW1wbGF0ZSByZWJpbmQ8CisJbm9kZT46Om90aGVyOjpwb2ludGVyCisgICAgICBub2RlX3BvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIGFsbG9jYXRvcl90eXBlOjp0ZW1wbGF0ZSByZWJpbmQ8CisJbm9kZV9wb2ludGVyPjo6b3RoZXI6OnBvaW50ZXIKKyAgICAgIGVudHJ5X3BvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIGFsbG9jYXRvcl90eXBlOjp0ZW1wbGF0ZSByZWJpbmQ8CisJbm9kZV9wb2ludGVyPjo6b3RoZXI6OmNvbnN0X3BvaW50ZXIKKyAgICAgIGNvbnN0X2VudHJ5X3BvaW50ZXI7CisKKyAgICAgIGVudW0KKwl7CisJICBtYXhfZW50cmllcyA9IHNpemVvZihzaXplX3R5cGUpIDw8IDMKKwl9OworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBub2RlX3BvaW50ZXIgZW50cnk7CisKKyAgICAgIHR5cGVkZWYgY29uc3RfZW50cnlfcG9pbnRlciBjb25zdF9pdGVyYXRvcjsKKworICAgIHB1YmxpYzoKKyAgICAgIHJjKCk7CisKKyAgICAgIHJjKGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcik7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBzd2FwKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcik7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBwdXNoKGVudHJ5IHBfbmQpOworCisgICAgICBpbmxpbmUgbm9kZV9wb2ludGVyCisgICAgICB0b3AoKSBjb25zdDsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIHBvcCgpOworCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgZW1wdHkoKSBjb25zdDsKKworICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBjbGVhcigpOworCisgICAgICBjb25zdCBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdDsKKworICAgICAgY29uc3QgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0OworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF92YWxpZCgpIGNvbnN0OworI2VuZGlmIAorCisjaWZkZWYgUEJfRFNfUkNfQklOT01JQUxfSEVBUF9UUkFDRV8KKyAgICAgIHZvaWQKKyAgICAgIHRyYWNlKCkgY29uc3Q7CisjZW5kaWYgCisKKyAgICBwcml2YXRlOgorICAgICAgbm9kZV9wb2ludGVyIG1fYV9lbnRyaWVzW21heF9lbnRyaWVzXTsKKworICAgICAgc2l6ZV90eXBlIG1fb3Zlcl90b3A7CisgICAgfTsKKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHJjKCkgOiBtX292ZXJfdG9wKDApCisgICAgeyBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcmMoY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKSA6IG1fb3Zlcl90b3AoMCkKKyAgICB7IF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KSB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIGlubGluZSB2b2lkCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspCisKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBvdmVyX3RvcCA9IHN0ZDo6bWF4KG1fb3Zlcl90b3AsIG90aGVyLm1fb3Zlcl90b3ApOworCisgICAgICBmb3IgKHNpemVfdHlwZSBpID0gMDsgaSA8IG92ZXJfdG9wOyArK2kpCisJc3RkOjpzd2FwKG1fYV9lbnRyaWVzW2ldLCBvdGhlci5tX2FfZW50cmllc1tpXSk7CisKKyAgICAgIHN0ZDo6c3dhcChtX292ZXJfdG9wLCBvdGhlci5tX292ZXJfdG9wKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspCisgICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgaW5saW5lIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcHVzaChlbnRyeSBwX25kKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fb3Zlcl90b3AgPCBtYXhfZW50cmllcyk7CisgICAgICBtX2FfZW50cmllc1ttX292ZXJfdG9wKytdID0gcF9uZDsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgaW5saW5lIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcG9wKCkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCghZW1wdHkoKSk7CisgICAgICAtLW1fb3Zlcl90b3A7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIGlubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9wb2ludGVyCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHRvcCgpIGNvbnN0CisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoIWVtcHR5KCkpOworICAgICAgcmV0dXJuICoobV9hX2VudHJpZXMgKyBtX292ZXJfdG9wIC0gMSk7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBpbmxpbmUgYm9vbAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBlbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgICByZXR1cm4gbV9vdmVyX3RvcCA9PSAwOworICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgc2l6ZSgpIGNvbnN0CisgICAgeyByZXR1cm4gbV9vdmVyX3RvcDsgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB2b2lkCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIGNsZWFyKCkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICAgIG1fb3Zlcl90b3AgPSAwOworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBjb25zdCB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfaXRlcmF0b3IKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgYmVnaW4oKSBjb25zdAorICAgIHsgcmV0dXJuJiBtX2FfZW50cmllc1swXTsgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBjb25zdCB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfaXRlcmF0b3IKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgZW5kKCkgY29uc3QKKyAgICB7IHJldHVybiYgbV9hX2VudHJpZXNbbV9vdmVyX3RvcF07IH0KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB2b2lkCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIGFzc2VydF92YWxpZCgpIGNvbnN0CisgICAgeyBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9vdmVyX3RvcCA8IG1heF9lbnRyaWVzKTsgfQorI2VuZGlmIAorCisjaWZkZWYgUEJfRFNfUkNfQklOT01JQUxfSEVBUF9UUkFDRV8KKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgdHJhY2UoKSBjb25zdAorICAgIHsKKyAgICAgIHN0ZDo6Y291dCA8PCAicmMiIDw8IHN0ZDo6ZW5kbDsKKyAgICAgIGZvciAoc2l6ZV90eXBlIGkgPSAwOyBpIDwgbV9vdmVyX3RvcDsgKytpKQorCXN0ZDo6Y2VyciA8PCBtX2FfZW50cmllc1tpXSA8PCBzdGQ6OmVuZGw7CisgICAgICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOworICAgIH0KKyNlbmRpZiAKKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKworfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9yY19iaW5vbWlhbF9oZWFwXy9yY19iaW5vbWlhbF9oZWFwXy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmNfYmlub21pYWxfaGVhcF8vcmNfYmlub21pYWxfaGVhcF8uaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MmUyOWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmNfYmlub21pYWxfaGVhcF8vcmNfYmlub21pYWxfaGVhcF8uaHBwCkBAIC0wLDAgKzEsMTk4IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSByY19iaW5vbWlhbF9oZWFwXy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGZvciByY19iaW5vbWlhbF9oZWFwXy4KKyAqLworCisvKgorICogUmVkdW5kYW50LWNvdW50ZXIgYmlub21pYWwgaGVhcC4KKyAqLworCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jb25kX2RlYWx0b3IuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHlwZV91dGlscy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5vbWlhbF9oZWFwX2Jhc2VfL2Jpbm9taWFsX2hlYXBfYmFzZV8uaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcmNfYmlub21pYWxfaGVhcF8vcmMuaHBwPgorI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQyBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVfVHlwZSwgY2xhc3MgQ21wX0ZuLCBjbGFzcyBBbGxvY2F0b3I+CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfQ19ERUMgXAorICAgIHJjX2Jpbm9taWFsX2hlYXBfPFZhbHVlX1R5cGUsIENtcF9GbiwgQWxsb2NhdG9yPgorCisjZGVmaW5lIFBCX0RTX0JBU0VfQ19ERUMgXAorICAgIGJpbm9taWFsX2hlYXBfYmFzZV88VmFsdWVfVHlwZSwgQ21wX0ZuLCBBbGxvY2F0b3I+CisKKyNkZWZpbmUgUEJfRFNfUkNfQ19ERUMgXAorICAgIHJjPHR5cGVuYW1lIFBCX0RTX0JBU0VfQ19ERUM6Om5vZGUsIEFsbG9jYXRvcj4KKworICAgIC8qKgorICAgICAqIGNsYXNzIGRlc2NyaXB0aW9uID0gIjh5fFx8MHxcL3xpNDEgaDM0cCA3NDgxMyI+CisgICAgICoqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlX1R5cGUsIGNsYXNzIENtcF9GbiwgY2xhc3MgQWxsb2NhdG9yPgorICAgIGNsYXNzIHJjX2Jpbm9taWFsX2hlYXBfIDogcHVibGljIFBCX0RTX0JBU0VfQ19ERUMKKyAgICB7CisKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBQQl9EU19CQVNFX0NfREVDIGJhc2VfdHlwZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Om5vZGVfcG9pbnRlciBub2RlX3BvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9ub2RlX3BvaW50ZXIgY29uc3Rfbm9kZV9wb2ludGVyOworCisgICAgICB0eXBlZGVmIFBCX0RTX1JDX0NfREVDIHJjX3Q7CisKKyAgICBwdWJsaWM6CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjpzaXplX3R5cGUgc2l6ZV90eXBlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKKworICAgICAgdHlwZWRlZiBWYWx1ZV9UeXBlIHZhbHVlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpwb2ludGVyIHBvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X3BvaW50X2l0ZXJhdG9yIGNvbnN0X3BvaW50X2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6cG9pbnRfaXRlcmF0b3IgcG9pbnRfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y21wX2ZuIGNtcF9mbjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOworCisgICAgcHVibGljOgorCisgICAgICByY19iaW5vbWlhbF9oZWFwXygpOworCisgICAgICByY19iaW5vbWlhbF9oZWFwXyhjb25zdCBDbXBfRm4mIHJfY21wX2ZuKTsKKworICAgICAgcmNfYmlub21pYWxfaGVhcF8oY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKTsKKworICAgICAgfnJjX2Jpbm9taWFsX2hlYXBfKCk7CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKTsKKworICAgICAgaW5saW5lIHBvaW50X2l0ZXJhdG9yCisgICAgICBwdXNoKGNvbnN0X3JlZmVyZW5jZSByX3ZhbCk7CisKKyAgICAgIHZvaWQKKyAgICAgIG1vZGlmeShwb2ludF9pdGVyYXRvciBpdCwgY29uc3RfcmVmZXJlbmNlIHJfbmV3X3ZhbCk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBwb3AoKTsKKworICAgICAgdm9pZAorICAgICAgZXJhc2UocG9pbnRfaXRlcmF0b3IgaXQpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgY2xlYXIoKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZD4KKyAgICAgIHNpemVfdHlwZQorICAgICAgZXJhc2VfaWYoUHJlZCBwcmVkKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZD4KKyAgICAgIHZvaWQKKyAgICAgIHNwbGl0KFByZWQgcHJlZCwgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKTsKKworICAgICAgdm9pZAorICAgICAgam9pbihQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpOworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF92YWxpZCgpIGNvbnN0OworI2VuZGlmIAorCisjaWZkZWYgUEJfRFNfUkNfQklOT01JQUxfSEVBUF9UUkFDRV8KKyAgICAgIHZvaWQKKyAgICAgIHRyYWNlKCkgY29uc3Q7CisjZW5kaWYgCisKKyAgICBwcml2YXRlOgorCisgICAgICBpbmxpbmUgbm9kZV9wb2ludGVyCisgICAgICBsaW5rX3dpdGhfbmV4dF9zaWJsaW5nKG5vZGVfcG9pbnRlciBwX25kKTsKKworICAgICAgdm9pZAorICAgICAgbWFrZV8wX2V4cG9zZWQoKTsKKworICAgICAgdm9pZAorICAgICAgbWFrZV9iaW5vbWlhbF9oZWFwKCk7CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgc3RhdGljIGNvbnN0X25vZGVfcG9pbnRlcgorICAgICAgbmV4dF8yX3BvaW50ZXIoY29uc3Rfbm9kZV9wb2ludGVyIHBfbmQpOworCisgICAgICBzdGF0aWMgY29uc3Rfbm9kZV9wb2ludGVyCisgICAgICBuZXh0X2FmdGVyXzBfcG9pbnRlcihjb25zdF9ub2RlX3BvaW50ZXIgcF9uZCk7CisjZW5kaWYgCisKKyAgICBwcml2YXRlOgorICAgICAgcmNfdCBtX3JjOworICAgIH07CisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3JjX2Jpbm9taWFsX2hlYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcmNfYmlub21pYWxfaGVhcF8vZGVidWdfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9yY19iaW5vbWlhbF9oZWFwXy9lcmFzZV9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3JjX2Jpbm9taWFsX2hlYXBfL3RyYWNlX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcmNfYmlub21pYWxfaGVhcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcmNfYmlub21pYWxfaGVhcF8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcD4KKworI3VuZGVmIFBCX0RTX0NMQVNTX0NfREVDCisKKyN1bmRlZiBQQl9EU19DTEFTU19UX0RFQworCisjdW5kZWYgUEJfRFNfQkFTRV9DX0RFQworCisjdW5kZWYgUEJfRFNfUkNfQ19ERUMKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmNfYmlub21pYWxfaGVhcF8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9yY19iaW5vbWlhbF9oZWFwXy9zcGxpdF9qb2luX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2OTY1YWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmNfYmlub21pYWxfaGVhcF8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDgxIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBzcGxpdF9qb2luX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgcmNfYmlub21pYWxfaGVhcF8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIFByZWQ+Cit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitzcGxpdChQcmVkIHByZWQsIFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspCisKKyAgICBtYWtlX2Jpbm9taWFsX2hlYXAoKTsKKyAgb3RoZXIubWFrZV9iaW5vbWlhbF9oZWFwKCk7CisKKyAgYmFzZV90eXBlOjpzcGxpdChwcmVkLCBvdGhlcik7CisKKyAgYmFzZV90eXBlOjpmaW5kX21heCgpOworICBvdGhlci5maW5kX21heCgpOworCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKCk7KQorICAgIH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citqb2luKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspCisKKyAgICBtYWtlX2Jpbm9taWFsX2hlYXAoKTsKKyAgb3RoZXIubWFrZV9iaW5vbWlhbF9oZWFwKCk7CisKKyAgYmFzZV90eXBlOjpqb2luKG90aGVyKTsKKworICBiYXNlX3R5cGU6OmZpbmRfbWF4KCk7CisgIG90aGVyLmZpbmRfbWF4KCk7CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspCisgICAgfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmNfYmlub21pYWxfaGVhcF8vdHJhY2VfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmNfYmlub21pYWxfaGVhcF8vdHJhY2VfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZiM2I4YgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9yY19iaW5vbWlhbF9oZWFwXy90cmFjZV9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDUzIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSB0cmFjZV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gZm9yIHJjX2Jpbm9taWFsX2hlYXBfLgorICovCisKKyNpZmRlZiBQQl9EU19SQ19CSU5PTUlBTF9IRUFQX1RSQUNFXworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordHJhY2UoKSBjb25zdAoreworICBiYXNlX3R5cGU6OnRyYWNlKCk7CisKKyAgbV9yYy50cmFjZSgpOworfQorCisjZW5kaWYgLy8gI2lmZGVmIFBCX0RTX1JDX0JJTk9NSUFMX0hFQVBfVFJBQ0VfCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9jY19oYXNoX21heF9jb2xsaXNpb25fY2hlY2tfcmVzaXplX3RyaWdnZXJfaW1wLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9yZXNpemVfcG9saWN5L2NjX2hhc2hfbWF4X2NvbGxpc2lvbl9jaGVja19yZXNpemVfdHJpZ2dlcl9pbXAuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0Y2Q1MTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9jY19oYXNoX21heF9jb2xsaXNpb25fY2hlY2tfcmVzaXplX3RyaWdnZXJfaW1wLmhwcApAQCAtMCwwICsxLDIxMSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY2NfaGFzaF9tYXhfY29sbGlzaW9uX2NoZWNrX3Jlc2l6ZV90cmlnZ2VyX2ltcC5ocHAKKyAqIENvbnRhaW5zIGEgcmVzaXplIHRyaWdnZXIgaW1wbGVtZW50YXRpb24uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NjX2hhc2hfbWF4X2NvbGxpc2lvbl9jaGVja19yZXNpemVfdHJpZ2dlcihmbG9hdCBsb2FkKSA6CisgIG1fbG9hZChsb2FkKSwKKyAgbV9zaXplKDApLAorICBtX251bV9jb2woMCksCisgIG1fbWF4X2NvbCgwKSwKKyAgbV9yZXNpemVfbmVlZGVkKGZhbHNlKQoreyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2ZpbmRfc2VhcmNoX3N0YXJ0KCkKK3sgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vdGlmeV9maW5kX3NlYXJjaF9jb2xsaXNpb24oKQoreyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2ZpbmRfc2VhcmNoX2VuZCgpCit7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfaW5zZXJ0X3NlYXJjaF9zdGFydCgpCit7IG1fbnVtX2NvbCA9IDA7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfaW5zZXJ0X3NlYXJjaF9jb2xsaXNpb24oKQoreyArK21fbnVtX2NvbDsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vdGlmeV9pbnNlcnRfc2VhcmNoX2VuZCgpCit7IGNhbGNfcmVzaXplX25lZWRlZCgpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2VyYXNlX3NlYXJjaF9zdGFydCgpCit7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfZXJhc2Vfc2VhcmNoX2NvbGxpc2lvbigpCit7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfZXJhc2Vfc2VhcmNoX2VuZCgpCit7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfaW5zZXJ0ZWQoc2l6ZV90eXBlKQoreyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2VyYXNlZChzaXplX3R5cGUpCit7IG1fcmVzaXplX25lZWRlZCA9IHRydWU7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vdGlmeV9jbGVhcmVkKCkKK3sgbV9yZXNpemVfbmVlZGVkID0gZmFsc2U7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBib29sCitQQl9EU19DTEFTU19DX0RFQzo6Citpc19yZXNpemVfbmVlZGVkKCkgY29uc3QKK3sgcmV0dXJuIG1fcmVzaXplX25lZWRlZDsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIGJvb2wKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2lzX2dyb3dfbmVlZGVkKHNpemVfdHlwZSAvKnNpemUqLywgc2l6ZV90eXBlIC8qbnVtX3VzZWRfZSovKSBjb25zdAoreyByZXR1cm4gbV9udW1fY29sID49IG1fbWF4X2NvbDsgfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X3Jlc2l6ZWQoc2l6ZV90eXBlIG5ld19zaXplKQoreworICBtX3NpemUgPSBuZXdfc2l6ZTsKKworI2lmZGVmIFBCX0RTX0hUX01BUF9SRVNJWkVfVFJBQ0VfCisgIHN0ZDo6Y2VyciA8PCAiY2htY2NydDo6bm90aWZ5X3Jlc2l6ZWQgIiAKKwkgICAgPDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obmV3X3NpemUpIDw8IHN0ZDo6ZW5kbDsKKyNlbmRpZiAKKworICBjYWxjX21heF9udW1fY29sbCgpOworICBjYWxjX3Jlc2l6ZV9uZWVkZWQoKTsKKyAgbV9udW1fY29sID0gMDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NhbGNfbWF4X251bV9jb2xsKCkKK3sKKyAgLy8gbWF4X2NvbCA8LS0gXHNxcnR7MiBsb2FkIFxsbiggMiBtIFxsbiggbSApICkgfQorICBjb25zdCBkb3VibGUgbG5fYXJnID0gMiAqIG1fc2l6ZSAqIHN0ZDo6bG9nKGRvdWJsZShtX3NpemUpKTsKKyAgbV9tYXhfY29sID0gc2l6ZV90eXBlKHN0ZDo6Y2VpbChzdGQ6OnNxcnQoMiAqIG1fbG9hZCAqIHN0ZDo6bG9nKGxuX2FyZykpKSk7CisKKyNpZmRlZiBQQl9EU19IVF9NQVBfUkVTSVpFX1RSQUNFXworICBzdGQ6OmNlcnIgPDwgImNobWNjcnQ6OmNhbGNfbWF4X251bV9jb2xsICIgCisJICAgIDw8IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KG1fc2l6ZSkgPDwgICAgIiAgICAiIAorCSAgICA8PCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihtX21heF9jb2wpIDw8IHN0ZDo6ZW5kbDsKKyNlbmRpZiAKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vdGlmeV9leHRlcm5hbGx5X3Jlc2l6ZWQoc2l6ZV90eXBlIG5ld19zaXplKQoreyBub3RpZnlfcmVzaXplZChuZXdfc2l6ZSk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBzdGQ6OnN3YXAobV9sb2FkLCBvdGhlci5tX2xvYWQpOworICBzdGQ6OnN3YXAobV9zaXplLCBvdGhlci5tX3NpemUpOworICBzdGQ6OnN3YXAobV9udW1fY29sLCBvdGhlci5tX251bV9jb2wpOworICBzdGQ6OnN3YXAobV9tYXhfY29sLCBvdGhlci5tX21heF9jb2wpOworICBzdGQ6OnN3YXAobV9yZXNpemVfbmVlZGVkLCBvdGhlci5tX3Jlc2l6ZV9uZWVkZWQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIGZsb2F0CitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfbG9hZCgpIGNvbnN0Cit7CisgIFBCX0RTX1NUQVRJQ19BU1NFUlQoYWNjZXNzLCBleHRlcm5hbF9sb2FkX2FjY2Vzcyk7CisgIHJldHVybiBtX2xvYWQ7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY2FsY19yZXNpemVfbmVlZGVkKCkKK3sgbV9yZXNpemVfbmVlZGVkID0gbV9yZXNpemVfbmVlZGVkIHx8IG1fbnVtX2NvbCA+PSBtX21heF9jb2w7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3NldF9sb2FkKGZsb2F0IGxvYWQpCit7CisgIFBCX0RTX1NUQVRJQ19BU1NFUlQoYWNjZXNzLCBleHRlcm5hbF9sb2FkX2FjY2Vzcyk7CisgIG1fbG9hZCA9IGxvYWQ7CisgIGNhbGNfbWF4X251bV9jb2xsKCk7CisgIGNhbGNfcmVzaXplX25lZWRlZCgpOworfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9oYXNoX2V4cG9uZW50aWFsX3NpemVfcG9saWN5X2ltcC5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9oYXNoX2V4cG9uZW50aWFsX3NpemVfcG9saWN5X2ltcC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU4ZjJlYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9yZXNpemVfcG9saWN5L2hhc2hfZXhwb25lbnRpYWxfc2l6ZV9wb2xpY3lfaW1wLmhwcApAQCAtMCwwICsxLDkwIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBoYXNoX2V4cG9uZW50aWFsX3NpemVfcG9saWN5X2ltcC5ocHAKKyAqIENvbnRhaW5zIGEgcmVzaXplIHNpemUgcG9saWN5IGltcGxlbWVudGF0aW9uLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitoYXNoX2V4cG9uZW50aWFsX3NpemVfcG9saWN5KHNpemVfdHlwZSBzdGFydF9zaXplLCBzaXplX3R5cGUgZ3Jvd19mYWN0b3IpIDoKKyAgbV9zdGFydF9zaXplKHN0YXJ0X3NpemUpLAorICBtX2dyb3dfZmFjdG9yKGdyb3dfZmFjdG9yKQoreyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citzd2FwKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgc3RkOjpzd2FwKG1fc3RhcnRfc2l6ZSwgb3RoZXIubV9zdGFydF9zaXplKTsKKyAgc3RkOjpzd2FwKG1fZ3Jvd19mYWN0b3IsIG90aGVyLm1fZ3Jvd19mYWN0b3IpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoc2l6ZV90eXBlIHNpemUpIGNvbnN0Cit7CisgIHNpemVfdHlwZSByZXQgPSBtX3N0YXJ0X3NpemU7CisgIHdoaWxlIChyZXQgPD0gc2l6ZSkKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgbmV4dF9yZXQgPSByZXQqICBtX2dyb3dfZmFjdG9yOworICAgICAgaWYgKG5leHRfcmV0IDwgcmV0KQorCV9fdGhyb3dfaW5zZXJ0X2Vycm9yKCk7CisgICAgICByZXQgPSBuZXh0X3JldDsKKyAgICB9CisgIHJldHVybiByZXQ7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfbmVhcmVzdF9zbWFsbGVyX3NpemUoc2l6ZV90eXBlIHNpemUpIGNvbnN0Cit7CisgIHNpemVfdHlwZSByZXQgPSBtX3N0YXJ0X3NpemU7CisgIHdoaWxlICh0cnVlKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBuZXh0X3JldCA9IHJldCogIG1fZ3Jvd19mYWN0b3I7CisgICAgICBpZiAobmV4dF9yZXQgPCByZXQpCisJX190aHJvd19yZXNpemVfZXJyb3IoKTsKKyAgICAgIGlmIChuZXh0X3JldCA+PSBzaXplKQorCXJldHVybiAocmV0KTsKKyAgICAgIHJldCA9IG5leHRfcmV0OworICAgIH0KKyAgcmV0dXJuIHJldDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvaGFzaF9sb2FkX2NoZWNrX3Jlc2l6ZV90cmlnZ2VyX2ltcC5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9oYXNoX2xvYWRfY2hlY2tfcmVzaXplX3RyaWdnZXJfaW1wLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDAzYjA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvaGFzaF9sb2FkX2NoZWNrX3Jlc2l6ZV90cmlnZ2VyX2ltcC5ocHAKQEAgLTAsMCArMSwyODkgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGhhc2hfbG9hZF9jaGVja19yZXNpemVfdHJpZ2dlcl9pbXAuaHBwCisgKiBDb250YWlucyBhIHJlc2l6ZSB0cmlnZ2VyIGltcGxlbWVudGF0aW9uLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitoYXNoX2xvYWRfY2hlY2tfcmVzaXplX3RyaWdnZXIoZmxvYXQgbG9hZF9taW4sIGZsb2F0IGxvYWRfbWF4KSAKKzogbV9sb2FkX21pbihsb2FkX21pbiksIG1fbG9hZF9tYXgobG9hZF9tYXgpLCBtX25leHRfc2hyaW5rX3NpemUoMCksCisgIG1fbmV4dF9ncm93X3NpemUoMCksIG1fcmVzaXplX25lZWRlZChmYWxzZSkKK3sgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspIH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfZmluZF9zZWFyY2hfc3RhcnQoKQoreyBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vdGlmeV9maW5kX3NlYXJjaF9jb2xsaXNpb24oKQoreyBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vdGlmeV9maW5kX3NlYXJjaF9lbmQoKQoreyBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vdGlmeV9pbnNlcnRfc2VhcmNoX3N0YXJ0KCkKK3sgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspIH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfaW5zZXJ0X3NlYXJjaF9jb2xsaXNpb24oKQoreyBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vdGlmeV9pbnNlcnRfc2VhcmNoX2VuZCgpCit7IF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KSB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2VyYXNlX3NlYXJjaF9zdGFydCgpCit7IF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KSB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2VyYXNlX3NlYXJjaF9jb2xsaXNpb24oKQoreyBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vdGlmeV9lcmFzZV9zZWFyY2hfZW5kKCkKK3sgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspIH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfaW5zZXJ0ZWQoc2l6ZV90eXBlIG51bV9lbnRyaWVzKQoreworICBtX3Jlc2l6ZV9uZWVkZWQgPSAobnVtX2VudHJpZXMgPj0gbV9uZXh0X2dyb3dfc2l6ZSk7CisgIHNpemVfYmFzZTo6c2V0X3NpemUobnVtX2VudHJpZXMpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfZXJhc2VkKHNpemVfdHlwZSBudW1fZW50cmllcykKK3sKKyAgc2l6ZV9iYXNlOjpzZXRfc2l6ZShudW1fZW50cmllcyk7CisgIG1fcmVzaXplX25lZWRlZCA9IG51bV9lbnRyaWVzIDw9IG1fbmV4dF9zaHJpbmtfc2l6ZTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgYm9vbAorUEJfRFNfQ0xBU1NfQ19ERUM6OgoraXNfcmVzaXplX25lZWRlZCgpIGNvbnN0Cit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICByZXR1cm4gbV9yZXNpemVfbmVlZGVkOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIGJvb2wKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2lzX2dyb3dfbmVlZGVkKHNpemVfdHlwZSAvKnNpemUqLywgc2l6ZV90eXBlIG51bV9lbnRyaWVzKSBjb25zdAoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9yZXNpemVfbmVlZGVkKTsKKyAgcmV0dXJuIG51bV9lbnRyaWVzID49IG1fbmV4dF9ncm93X3NpemU7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6Cit+aGFzaF9sb2FkX2NoZWNrX3Jlc2l6ZV90cmlnZ2VyKCkgeyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfcmVzaXplZChzaXplX3R5cGUgbmV3X3NpemUpCit7CisgIG1fcmVzaXplX25lZWRlZCA9IGZhbHNlOworICBtX25leHRfZ3Jvd19zaXplID0gc2l6ZV90eXBlKG1fbG9hZF9tYXggKiBuZXdfc2l6ZSAtIDEpOworICBtX25leHRfc2hyaW5rX3NpemUgPSBzaXplX3R5cGUobV9sb2FkX21pbiAqIG5ld19zaXplKTsKKworI2lmZGVmIFBCX0RTX0hUX01BUF9SRVNJWkVfVFJBQ0VfCisgIHN0ZDo6Y2VyciA8PCAiaGxjcnQ6Om5vdGlmeV9yZXNpemVkICIgPDwKKyAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihuZXdfc2l6ZSkgPDwgIiAgICAiIDw8CisgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obV9sb2FkX21pbikgPDwgIiAgICAiIDw8CisgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obV9sb2FkX21heCkgPDwgIiAgICAiIDw8CisgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obV9uZXh0X3Nocmlua19zaXplKSA8PCAiICIgPDwKKyAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihtX25leHRfZ3Jvd19zaXplKSA8PCAiICAgICIgPDwgc3RkOjplbmRsOworI2VuZGlmIAorCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2V4dGVybmFsbHlfcmVzaXplZChzaXplX3R5cGUgbmV3X3NpemUpCit7CisgIG1fcmVzaXplX25lZWRlZCA9IGZhbHNlOworICBzaXplX3R5cGUgbmV3X2dyb3dfc2l6ZSA9IHNpemVfdHlwZShtX2xvYWRfbWF4ICogbmV3X3NpemUgLSAxKTsKKyAgc2l6ZV90eXBlIG5ld19zaHJpbmtfc2l6ZSA9IHNpemVfdHlwZShtX2xvYWRfbWluICogbmV3X3NpemUpOworICBpZiAobmV3X2dyb3dfc2l6ZSA+PSBtX25leHRfZ3Jvd19zaXplKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChuZXdfc2hyaW5rX3NpemUgPiBtX25leHRfc2hyaW5rX3NpemUpOworICAgICAgbV9uZXh0X2dyb3dfc2l6ZSA9IG5ld19ncm93X3NpemU7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKworI2lmZGVmIFBCX0RTX0hUX01BUF9SRVNJWkVfVFJBQ0VfCisJc3RkOjpjZXJyIDw8ICJobGNydDo6bm90aWZ5X2V4dGVybmFsbHlfcmVzaXplZDEgIiA8PAorICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihuZXdfc2l6ZSkgPDwgIiAgICAiIDw8CisgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KG1fbG9hZF9taW4pIDw8ICIgICAgIiA8PAorICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihtX2xvYWRfbWF4KSA8PCAiICAgICIgPDwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obV9uZXh0X3Nocmlua19zaXplKSA8PCAiICIgPDwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obV9uZXh0X2dyb3dfc2l6ZSkgPDwgIiAgICAiIDw8IHN0ZDo6ZW5kbDsKKyNlbmRpZiAKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG5ld19zaHJpbmtfc2l6ZSA8PSBtX25leHRfc2hyaW5rX3NpemUpOworICBtX25leHRfc2hyaW5rX3NpemUgPSBuZXdfc2hyaW5rX3NpemU7CisKKyNpZmRlZiBQQl9EU19IVF9NQVBfUkVTSVpFX1RSQUNFXworICBzdGQ6OmNlcnIgPDwgImhsY3J0Ojpub3RpZnlfZXh0ZXJuYWxseV9yZXNpemVkMiAiIDw8CisgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obmV3X3NpemUpIDw8ICIgICAgIiA8PAorICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KG1fbG9hZF9taW4pIDw8ICIgICAgIiA8PAorICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KG1fbG9hZF9tYXgpIDw8ICIgICAgIiA8PAorICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KG1fbmV4dF9zaHJpbmtfc2l6ZSkgPDwgIiAiIDw8CisgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obV9uZXh0X2dyb3dfc2l6ZSkgPDwgIiAgICAiIDw8IHN0ZDo6ZW5kbDsKKyNlbmRpZiAKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vdGlmeV9jbGVhcmVkKCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIHNpemVfYmFzZTo6c2V0X3NpemUoMCk7CisgIG1fcmVzaXplX25lZWRlZCA9ICgwIDwgbV9uZXh0X3Nocmlua19zaXplKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citzd2FwKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKCk7KQorICAgIAorICBzaXplX2Jhc2U6OnN3YXAob3RoZXIpOworICBzdGQ6OnN3YXAobV9sb2FkX21pbiwgb3RoZXIubV9sb2FkX21pbik7CisgIHN0ZDo6c3dhcChtX2xvYWRfbWF4LCBvdGhlci5tX2xvYWRfbWF4KTsKKyAgc3RkOjpzd2FwKG1fcmVzaXplX25lZWRlZCwgb3RoZXIubV9yZXNpemVfbmVlZGVkKTsKKyAgc3RkOjpzd2FwKG1fbmV4dF9ncm93X3NpemUsIG90aGVyLm1fbmV4dF9ncm93X3NpemUpOworICBzdGQ6OnN3YXAobV9uZXh0X3Nocmlua19zaXplLCBvdGhlci5tX25leHRfc2hyaW5rX3NpemUpOworCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X2xvYWRzKCkgY29uc3QKK3sKKyAgUEJfRFNfU1RBVElDX0FTU0VSVChhY2Nlc3MsIGV4dGVybmFsX2xvYWRfYWNjZXNzKTsKKyAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1fbG9hZF9taW4sIG1fbG9hZF9tYXgpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc2V0X2xvYWRzKHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IGxvYWRfcGFpcikKK3sKKyAgUEJfRFNfU1RBVElDX0FTU0VSVChhY2Nlc3MsIGV4dGVybmFsX2xvYWRfYWNjZXNzKTsKKyAgY29uc3QgZmxvYXQgb2xkX2xvYWRfbWluID0gbV9sb2FkX21pbjsKKyAgY29uc3QgZmxvYXQgb2xkX2xvYWRfbWF4ID0gbV9sb2FkX21heDsKKyAgY29uc3Qgc2l6ZV90eXBlIG9sZF9uZXh0X3Nocmlua19zaXplID0gbV9uZXh0X3Nocmlua19zaXplOworICBjb25zdCBzaXplX3R5cGUgb2xkX25leHRfZ3Jvd19zaXplID0gbV9uZXh0X2dyb3dfc2l6ZTsKKyAgY29uc3QgYm9vbCBvbGRfcmVzaXplX25lZWRlZCA9IG1fcmVzaXplX25lZWRlZDsKKworICBfX3RyeQorICAgIHsKKyAgICAgIG1fbG9hZF9taW4gPSBsb2FkX3BhaXIuZmlyc3Q7CisgICAgICBtX2xvYWRfbWF4ID0gbG9hZF9wYWlyLnNlY29uZDsKKyAgICAgIGRvX3Jlc2l6ZShzdGF0aWNfY2FzdDxzaXplX3R5cGU+KHNpemVfYmFzZTo6Z2V0X3NpemUoKSAvICgobV9sb2FkX21pbiArIG1fbG9hZF9tYXgpIC8gMikpKTsKKyAgICB9CisgIF9fY2F0Y2goLi4uKQorICAgIHsKKyAgICAgIG1fbG9hZF9taW4gPSBvbGRfbG9hZF9taW47CisgICAgICBtX2xvYWRfbWF4ID0gb2xkX2xvYWRfbWF4OworICAgICAgbV9uZXh0X3Nocmlua19zaXplID0gb2xkX25leHRfc2hyaW5rX3NpemU7CisgICAgICBtX25leHRfZ3Jvd19zaXplID0gb2xkX25leHRfZ3Jvd19zaXplOworICAgICAgbV9yZXNpemVfbmVlZGVkID0gb2xkX3Jlc2l6ZV9uZWVkZWQ7CisgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAgICB9Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citkb19yZXNpemUoc2l6ZV90eXBlKQoreyBzdGQ6OmFib3J0KCk7IH0KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X3ZhbGlkKCkgY29uc3QKK3sKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fbG9hZF9tYXggPiBtX2xvYWRfbWluKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fbmV4dF9ncm93X3NpemUgPj0gbV9uZXh0X3Nocmlua19zaXplKTsKK30KKyNlbmRpZiAKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvaGFzaF9sb2FkX2NoZWNrX3Jlc2l6ZV90cmlnZ2VyX3NpemVfYmFzZS5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9oYXNoX2xvYWRfY2hlY2tfcmVzaXplX3RyaWdnZXJfc2l6ZV9iYXNlLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjliM2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvaGFzaF9sb2FkX2NoZWNrX3Jlc2l6ZV90cmlnZ2VyX3NpemVfYmFzZS5ocHAKQEAgLTAsMCArMSw5NCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgaGFzaF9sb2FkX2NoZWNrX3Jlc2l6ZV90cmlnZ2VyX3NpemVfYmFzZS5ocHAKKyAqIENvbnRhaW5zIGFuIGJhc2UgaG9sZGluZyBzaXplIGZvciBzb21lIHJlc2l6ZSBwb2xpY2llcy4KKyAqLworCisjaWZuZGVmIFBCX0RTX0hBU0hfTE9BRF9DSEVDS19SRVNJWkVfVFJJR0dFUl9TSVpFX0JBU0VfSFBQCisjZGVmaW5lIFBCX0RTX0hBU0hfTE9BRF9DSEVDS19SRVNJWkVfVFJJR0dFUl9TSVpFX0JBU0VfSFBQCisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworICAgIC8vIFByaW1hcnkgdGVtcGxhdGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU2l6ZV9UeXBlLCBib29sIEhvbGRfU2l6ZT4KKyAgICBjbGFzcyBoYXNoX2xvYWRfY2hlY2tfcmVzaXplX3RyaWdnZXJfc2l6ZV9iYXNlOworCisgICAgLy8gU3BlY2lhbGl6YXRpb25zLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNpemVfVHlwZT4KKyAgICBjbGFzcyBoYXNoX2xvYWRfY2hlY2tfcmVzaXplX3RyaWdnZXJfc2l6ZV9iYXNlPFNpemVfVHlwZSwgdHJ1ZT4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiBTaXplX1R5cGUgc2l6ZV90eXBlOworCisgICAgICBoYXNoX2xvYWRfY2hlY2tfcmVzaXplX3RyaWdnZXJfc2l6ZV9iYXNlKCk6IG1fc2l6ZSgwKQorICAgICAgeyB9CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBzd2FwKGhhc2hfbG9hZF9jaGVja19yZXNpemVfdHJpZ2dlcl9zaXplX2Jhc2UmIG90aGVyKQorICAgICAgeyBzdGQ6OnN3YXAobV9zaXplLCBvdGhlci5tX3NpemUpOyB9CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBzZXRfc2l6ZShzaXplX3R5cGUgc2l6ZSkKKyAgICAgIHsgbV9zaXplID0gc2l6ZTsgfQorCisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBnZXRfc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBtX3NpemU7IH0KKworICAgIHByaXZhdGU6CisgICAgICBzaXplX3R5cGUgbV9zaXplOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTaXplX1R5cGU+CisgICAgY2xhc3MgaGFzaF9sb2FkX2NoZWNrX3Jlc2l6ZV90cmlnZ2VyX3NpemVfYmFzZTxTaXplX1R5cGUsIGZhbHNlPgorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmIFNpemVfVHlwZSBzaXplX3R5cGU7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBpbmxpbmUgdm9pZAorICAgICAgc3dhcChoYXNoX2xvYWRfY2hlY2tfcmVzaXplX3RyaWdnZXJfc2l6ZV9iYXNlJiBvdGhlcikgeyB9CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBzZXRfc2l6ZShzaXplX3R5cGUgc2l6ZSkgeyB9CisgICAgfTsKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvaGFzaF9wcmltZV9zaXplX3BvbGljeV9pbXAuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvaGFzaF9wcmltZV9zaXplX3BvbGljeV9pbXAuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyOGY1ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9oYXNoX3ByaW1lX3NpemVfcG9saWN5X2ltcC5ocHAKQEAgLTAsMCArMSwxNjEgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGhhc2hfcHJpbWVfc2l6ZV9wb2xpY3lfaW1wLmhwcAorICogQ29udGFpbnMgYSByZXNpemUgc2l6ZSBwb2xpY3kgaW1wbGVtZW50YXRpb24uCisgKi8KKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCituYW1lc3BhY2UgZGV0YWlsCit7CisgIGVudW0KKyAgICB7CisgICAgICBudW1fZGlzdGluY3Rfc2l6ZXNfMzJfYml0ID0gMzAsCisgICAgICBudW1fZGlzdGluY3Rfc2l6ZXNfNjRfYml0ID0gNjIsCisgICAgICBudW1fZGlzdGluY3Rfc2l6ZXMgPSBzaXplb2Yoc3RkOjpzaXplX3QpICE9IDggPyAKKyAgICAgICAgICAgIG51bV9kaXN0aW5jdF9zaXplc18zMl9iaXQgOiBudW1fZGlzdGluY3Rfc2l6ZXNfNjRfYml0LAkKKyAgICB9OworCisgIC8vIE9yaWdpbmFsbHkgdGFrZW4gZnJvbSB0aGUgU0dJIGltcGxlbWVudGF0aW9uOyBhY2tub3dsZWRnZWQgaW4gdGhlIGRvY3MuCisgIC8vIEZ1cnRoZXIgbW9kaWZpZWQgKGZvciA2NCBiaXRzKSBmcm9tIHRyMSdzIGhhc2h0YWJsZS4KKyAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGdfYV9zaXplc1tudW1fZGlzdGluY3Rfc2l6ZXNfNjRfYml0XSA9CisgICAgeworICAgICAgLyogMCAgICAgKi8gICAgICAgICAgICAgIDV1bCwKKyAgICAgIC8qIDEgICAgICovICAgICAgICAgICAgICAxMXVsLCAKKyAgICAgIC8qIDIgICAgICovICAgICAgICAgICAgICAyM3VsLCAKKyAgICAgIC8qIDMgICAgICovICAgICAgICAgICAgICA0N3VsLCAKKyAgICAgIC8qIDQgICAgICovICAgICAgICAgICAgICA5N3VsLCAKKyAgICAgIC8qIDUgICAgICovICAgICAgICAgICAgICAxOTl1bCwgCisgICAgICAvKiA2ICAgICAqLyAgICAgICAgICAgICAgNDA5dWwsIAorICAgICAgLyogNyAgICAgKi8gICAgICAgICAgICAgIDgyM3VsLCAKKyAgICAgIC8qIDggICAgICovICAgICAgICAgICAgICAxNzQxdWwsIAorICAgICAgLyogOSAgICAgKi8gICAgICAgICAgICAgIDM0Njl1bCwgCisgICAgICAvKiAxMCAgICAqLyAgICAgICAgICAgICAgNjk0OXVsLCAKKyAgICAgIC8qIDExICAgICovICAgICAgICAgICAgICAxNDAzM3VsLCAKKyAgICAgIC8qIDEyICAgICovICAgICAgICAgICAgICAyODQxMXVsLCAKKyAgICAgIC8qIDEzICAgICovICAgICAgICAgICAgICA1NzU1N3VsLCAKKyAgICAgIC8qIDE0ICAgICovICAgICAgICAgICAgICAxMTY3MzF1bCwgCisgICAgICAvKiAxNSAgICAqLyAgICAgICAgICAgICAgMjM2ODk3dWwsCisgICAgICAvKiAxNiAgICAqLyAgICAgICAgICAgICAgNDgwODgxdWwsIAorICAgICAgLyogMTcgICAgKi8gICAgICAgICAgICAgIDk3NjM2OXVsLAorICAgICAgLyogMTggICAgKi8gICAgICAgICAgICAgIDE5ODI2Mjd1bCwgCisgICAgICAvKiAxOSAgICAqLyAgICAgICAgICAgICAgNDAyNjAzMXVsLAorICAgICAgLyogMjAgICAgKi8gICAgICAgICAgICAgIDgxNzUzODN1bCwgCisgICAgICAvKiAyMSAgICAqLyAgICAgICAgICAgICAgMTY2MDE1OTN1bCwgCisgICAgICAvKiAyMiAgICAqLyAgICAgICAgICAgICAgMzM3MTI3Mjl1bCwKKyAgICAgIC8qIDIzICAgICovICAgICAgICAgICAgICA2ODQ2MDM5MXVsLCAKKyAgICAgIC8qIDI0ICAgICovICAgICAgICAgICAgICAxMzkwMjI0MTd1bCwgCisgICAgICAvKiAyNSAgICAqLyAgICAgICAgICAgICAgMjgyMzEyNzk5dWwsIAorICAgICAgLyogMjYgICAgKi8gICAgICAgICAgICAgIDU3MzI5MjgxN3VsLCAKKyAgICAgIC8qIDI3ICAgICovICAgICAgICAgICAgICAxMTY0MTg2MjE3dWwsCisgICAgICAvKiAyOCAgICAqLyAgICAgICAgICAgICAgMjM2NDExNDIxN3VsLCAKKyAgICAgIC8qIDI5ICAgICovICAgICAgICAgICAgICA0Mjk0OTY3MjkxdWwsCisgICAgICAvKiAzMCAgICAqLyAoc3RkOjpzaXplX3QpODU4OTkzNDU4M3VsbCwKKyAgICAgIC8qIDMxICAgICovIChzdGQ6OnNpemVfdCkxNzE3OTg2OTE0M3VsbCwKKyAgICAgIC8qIDMyICAgICovIChzdGQ6OnNpemVfdCkzNDM1OTczODMzN3VsbCwKKyAgICAgIC8qIDMzICAgICovIChzdGQ6OnNpemVfdCk2ODcxOTQ3NjczMXVsbCwKKyAgICAgIC8qIDM0ICAgICovIChzdGQ6OnNpemVfdCkxMzc0Mzg5NTM0NDd1bGwsCisgICAgICAvKiAzNSAgICAqLyAoc3RkOjpzaXplX3QpMjc0ODc3OTA2ODk5dWxsLAorICAgICAgLyogMzYgICAgKi8gKHN0ZDo6c2l6ZV90KTU0OTc1NTgxMzg4MXVsbCwKKyAgICAgIC8qIDM3ICAgICovIChzdGQ6OnNpemVfdCkxMDk5NTExNjI3Njg5dWxsLAorICAgICAgLyogMzggICAgKi8gKHN0ZDo6c2l6ZV90KTIxOTkwMjMyNTU1MzF1bGwsCisgICAgICAvKiAzOSAgICAqLyAoc3RkOjpzaXplX3QpNDM5ODA0NjUxMTA5M3VsbCwKKyAgICAgIC8qIDQwICAgICovIChzdGQ6OnNpemVfdCk4Nzk2MDkzMDIyMTUxdWxsLAorICAgICAgLyogNDEgICAgKi8gKHN0ZDo6c2l6ZV90KTE3NTkyMTg2MDQ0Mzk5dWxsLAorICAgICAgLyogNDIgICAgKi8gKHN0ZDo6c2l6ZV90KTM1MTg0MzcyMDg4Nzc3dWxsLAorICAgICAgLyogNDMgICAgKi8gKHN0ZDo6c2l6ZV90KTcwMzY4NzQ0MTc3NjQzdWxsLAorICAgICAgLyogNDQgICAgKi8gKHN0ZDo6c2l6ZV90KTE0MDczNzQ4ODM1NTIxM3VsbCwKKyAgICAgIC8qIDQ1ICAgICovIChzdGQ6OnNpemVfdCkyODE0NzQ5NzY3MTA1OTd1bGwsCisgICAgICAvKiA0NiAgICAqLyAoc3RkOjpzaXplX3QpNTYyOTQ5OTUzNDIxMjMxdWxsLCAKKyAgICAgIC8qIDQ3ICAgICovIChzdGQ6OnNpemVfdCkxMTI1ODk5OTA2ODQyNTk3dWxsLAorICAgICAgLyogNDggICAgKi8gKHN0ZDo6c2l6ZV90KTIyNTE3OTk4MTM2ODUxMTl1bGwsIAorICAgICAgLyogNDkgICAgKi8gKHN0ZDo6c2l6ZV90KTQ1MDM1OTk2MjczNzA0NDl1bGwsCisgICAgICAvKiA1MCAgICAqLyAoc3RkOjpzaXplX3QpOTAwNzE5OTI1NDc0MDg4MXVsbCwgCisgICAgICAvKiA1MSAgICAqLyAoc3RkOjpzaXplX3QpMTgwMTQzOTg1MDk0ODE5NTF1bGwsCisgICAgICAvKiA1MiAgICAqLyAoc3RkOjpzaXplX3QpMzYwMjg3OTcwMTg5NjM5MTN1bGwsIAorICAgICAgLyogNTMgICAgKi8gKHN0ZDo6c2l6ZV90KTcyMDU3NTk0MDM3OTI3OTMxdWxsLAorICAgICAgLyogNTQgICAgKi8gKHN0ZDo6c2l6ZV90KTE0NDExNTE4ODA3NTg1NTg1OXVsbCwKKyAgICAgIC8qIDU1ICAgICovIChzdGQ6OnNpemVfdCkyODgyMzAzNzYxNTE3MTE3MTd1bGwsCisgICAgICAvKiA1NiAgICAqLyAoc3RkOjpzaXplX3QpNTc2NDYwNzUyMzAzNDIzNDMzdWxsLAorICAgICAgLyogNTcgICAgKi8gKHN0ZDo6c2l6ZV90KTExNTI5MjE1MDQ2MDY4NDY4ODN1bGwsCisgICAgICAvKiA1OCAgICAqLyAoc3RkOjpzaXplX3QpMjMwNTg0MzAwOTIxMzY5Mzk1MXVsbCwKKyAgICAgIC8qIDU5ICAgICovIChzdGQ6OnNpemVfdCk0NjExNjg2MDE4NDI3Mzg3ODQ3dWxsLAorICAgICAgLyogNjAgICAgKi8gKHN0ZDo6c2l6ZV90KTkyMjMzNzIwMzY4NTQ3NzU3ODN1bGwsCisgICAgICAvKiA2MSAgICAqLyAoc3RkOjpzaXplX3QpMTg0NDY3NDQwNzM3MDk1NTE1NTd1bGwsCisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgZGV0YWlsCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2hhc2hfcHJpbWVfc2l6ZV9wb2xpY3koc2l6ZV90eXBlIG4pIDogbV9zdGFydF9zaXplKG4pCit7IG1fc3RhcnRfc2l6ZSA9IGdldF9uZWFyZXN0X2xhcmdlcl9zaXplKG4pOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7IHN0ZDo6c3dhcChtX3N0YXJ0X3NpemUsIG90aGVyLm1fc3RhcnRfc2l6ZSk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfbmVhcmVzdF9sYXJnZXJfc2l6ZShzaXplX3R5cGUgbikgY29uc3QKK3sKKyAgY29uc3Qgc3RkOjpzaXplX3QqIGNvbnN0IHBfdXBwZXIgPSBzdGQ6OnVwcGVyX2JvdW5kKGRldGFpbDo6Z19hX3NpemVzLCAKKwkJICAgICBkZXRhaWw6OmdfYV9zaXplcyArIGRldGFpbDo6bnVtX2Rpc3RpbmN0X3NpemVzLCBuKTsKKworICBpZiAocF91cHBlciA9PSBkZXRhaWw6OmdfYV9zaXplcyArIGRldGFpbDo6bnVtX2Rpc3RpbmN0X3NpemVzKQorICAgIF9fdGhyb3dfcmVzaXplX2Vycm9yKCk7CisgIHJldHVybiAqcF91cHBlcjsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfbmVhcmVzdF9zbWFsbGVyX3NpemUoc2l6ZV90eXBlIG4pIGNvbnN0Cit7CisgIGNvbnN0IHNpemVfdCogcF9sb3dlciA9IHN0ZDo6bG93ZXJfYm91bmQoZGV0YWlsOjpnX2Ffc2l6ZXMsIAorCQkgICAgICAgZGV0YWlsOjpnX2Ffc2l6ZXMgKyBkZXRhaWw6Om51bV9kaXN0aW5jdF9zaXplcywgbik7CisKKyAgaWYgKCpwX2xvd2VyID49IG4gJiYgIHBfbG93ZXIgIT0gZGV0YWlsOjpnX2Ffc2l6ZXMpCisgICAgLS1wX2xvd2VyOworICBpZiAoKnBfbG93ZXIgPCBtX3N0YXJ0X3NpemUpCisgICAgcmV0dXJuIG1fc3RhcnRfc2l6ZTsKKyAgcmV0dXJuICpwX2xvd2VyOworfQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvaGFzaF9zdGFuZGFyZF9yZXNpemVfcG9saWN5X2ltcC5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9oYXNoX3N0YW5kYXJkX3Jlc2l6ZV9wb2xpY3lfaW1wLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWNmN2RjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvaGFzaF9zdGFuZGFyZF9yZXNpemVfcG9saWN5X2ltcC5ocHAKQEAgLTAsMCArMSwyNDkgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGhhc2hfc3RhbmRhcmRfcmVzaXplX3BvbGljeV9pbXAuaHBwCisgKiBDb250YWlucyBhIHJlc2l6ZSBwb2xpY3kgaW1wbGVtZW50YXRpb24uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2hhc2hfc3RhbmRhcmRfcmVzaXplX3BvbGljeSgpIAorOiBtX3NpemUoU2l6ZV9Qb2xpY3k6OmdldF9uZWFyZXN0X2xhcmdlcl9zaXplKDEpKQoreyB0cmlnZ2VyX3BvbGljeV9iYXNlOjpub3RpZnlfZXh0ZXJuYWxseV9yZXNpemVkKG1fc2l6ZSk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2hhc2hfc3RhbmRhcmRfcmVzaXplX3BvbGljeShjb25zdCBTaXplX1BvbGljeSYgcl9zaXplX3BvbGljeSkgCis6IFNpemVfUG9saWN5KHJfc2l6ZV9wb2xpY3kpLCBtX3NpemUoU2l6ZV9Qb2xpY3k6OmdldF9uZWFyZXN0X2xhcmdlcl9zaXplKDEpKQoreyB0cmlnZ2VyX3BvbGljeV9iYXNlOjpub3RpZnlfZXh0ZXJuYWxseV9yZXNpemVkKG1fc2l6ZSk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2hhc2hfc3RhbmRhcmRfcmVzaXplX3BvbGljeShjb25zdCBTaXplX1BvbGljeSYgcl9zaXplX3BvbGljeSwgCisJCQkgICAgY29uc3QgVHJpZ2dlcl9Qb2xpY3kmIHJfdHJpZ2dlcl9wb2xpY3kpIAorOiBTaXplX1BvbGljeShyX3NpemVfcG9saWN5KSwgVHJpZ2dlcl9Qb2xpY3kocl90cmlnZ2VyX3BvbGljeSksCisgIG1fc2l6ZShTaXplX1BvbGljeTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoMSkpCit7IHRyaWdnZXJfcG9saWN5X2Jhc2U6Om5vdGlmeV9leHRlcm5hbGx5X3Jlc2l6ZWQobV9zaXplKTsgfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6Ogorfmhhc2hfc3RhbmRhcmRfcmVzaXplX3BvbGljeSgpCit7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICB0cmlnZ2VyX3BvbGljeV9iYXNlOjpzd2FwKG90aGVyKTsKKyAgc2l6ZV9wb2xpY3lfYmFzZTo6c3dhcChvdGhlcik7CisgIHN0ZDo6c3dhcChtX3NpemUsIG90aGVyLm1fc2l6ZSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2ZpbmRfc2VhcmNoX3N0YXJ0KCkKK3sgdHJpZ2dlcl9wb2xpY3lfYmFzZTo6bm90aWZ5X2ZpbmRfc2VhcmNoX3N0YXJ0KCk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfZmluZF9zZWFyY2hfY29sbGlzaW9uKCkKK3sgdHJpZ2dlcl9wb2xpY3lfYmFzZTo6bm90aWZ5X2ZpbmRfc2VhcmNoX2NvbGxpc2lvbigpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2ZpbmRfc2VhcmNoX2VuZCgpCit7IHRyaWdnZXJfcG9saWN5X2Jhc2U6Om5vdGlmeV9maW5kX3NlYXJjaF9lbmQoKTsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vdGlmeV9pbnNlcnRfc2VhcmNoX3N0YXJ0KCkKK3sgdHJpZ2dlcl9wb2xpY3lfYmFzZTo6bm90aWZ5X2luc2VydF9zZWFyY2hfc3RhcnQoKTsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vdGlmeV9pbnNlcnRfc2VhcmNoX2NvbGxpc2lvbigpCit7IHRyaWdnZXJfcG9saWN5X2Jhc2U6Om5vdGlmeV9pbnNlcnRfc2VhcmNoX2NvbGxpc2lvbigpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2luc2VydF9zZWFyY2hfZW5kKCkKK3sgdHJpZ2dlcl9wb2xpY3lfYmFzZTo6bm90aWZ5X2luc2VydF9zZWFyY2hfZW5kKCk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfZXJhc2Vfc2VhcmNoX3N0YXJ0KCkKK3sgdHJpZ2dlcl9wb2xpY3lfYmFzZTo6bm90aWZ5X2VyYXNlX3NlYXJjaF9zdGFydCgpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2VyYXNlX3NlYXJjaF9jb2xsaXNpb24oKQoreyB0cmlnZ2VyX3BvbGljeV9iYXNlOjpub3RpZnlfZXJhc2Vfc2VhcmNoX2NvbGxpc2lvbigpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2VyYXNlX3NlYXJjaF9lbmQoKQoreyB0cmlnZ2VyX3BvbGljeV9iYXNlOjpub3RpZnlfZXJhc2Vfc2VhcmNoX2VuZCgpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2luc2VydGVkKHNpemVfdHlwZSBudW1fZSkKK3sgdHJpZ2dlcl9wb2xpY3lfYmFzZTo6bm90aWZ5X2luc2VydGVkKG51bV9lKTsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vdGlmeV9lcmFzZWQoc2l6ZV90eXBlIG51bV9lKQoreyB0cmlnZ2VyX3BvbGljeV9iYXNlOjpub3RpZnlfZXJhc2VkKG51bV9lKTsgfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2NsZWFyZWQoKQoreyB0cmlnZ2VyX3BvbGljeV9iYXNlOjpub3RpZnlfY2xlYXJlZCgpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgYm9vbAorUEJfRFNfQ0xBU1NfQ19ERUM6OgoraXNfcmVzaXplX25lZWRlZCgpIGNvbnN0Cit7IHJldHVybiB0cmlnZ2VyX3BvbGljeV9iYXNlOjppc19yZXNpemVfbmVlZGVkKCk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9uZXdfc2l6ZShzaXplX3R5cGUgc2l6ZSwgc2l6ZV90eXBlIG51bV91c2VkX2UpIGNvbnN0Cit7CisgIGlmICh0cmlnZ2VyX3BvbGljeV9iYXNlOjppc19ncm93X25lZWRlZChzaXplLCBudW1fdXNlZF9lKSkKKyAgICByZXR1cm4gc2l6ZV9wb2xpY3lfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoc2l6ZSk7CisgIHJldHVybiBzaXplX3BvbGljeV9iYXNlOjpnZXRfbmVhcmVzdF9zbWFsbGVyX3NpemUoc2l6ZSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfcmVzaXplZChzaXplX3R5cGUgbmV3X3NpemUpCit7CisgIHRyaWdnZXJfcG9saWN5X2Jhc2U6Om5vdGlmeV9yZXNpemVkKG5ld19zaXplKTsKKyAgbV9zaXplID0gbmV3X3NpemU7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X2FjdHVhbF9zaXplKCkgY29uc3QKK3sKKyAgUEJfRFNfU1RBVElDX0FTU0VSVChhY2Nlc3MsIGV4dGVybmFsX3NpemVfYWNjZXNzKTsKKyAgcmV0dXJuIG1fc2l6ZTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3Jlc2l6ZShzaXplX3R5cGUgbmV3X3NpemUpCit7CisgIFBCX0RTX1NUQVRJQ19BU1NFUlQoYWNjZXNzLCBleHRlcm5hbF9zaXplX2FjY2Vzcyk7CisgIHNpemVfdHlwZSBhY3R1YWxfc2l6ZSA9IHNpemVfcG9saWN5X2Jhc2U6OmdldF9uZWFyZXN0X2xhcmdlcl9zaXplKDEpOworICB3aGlsZSAoYWN0dWFsX3NpemUgPCBuZXdfc2l6ZSkKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgcG90ID0gc2l6ZV9wb2xpY3lfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoYWN0dWFsX3NpemUpOworCisgICAgICBpZiAocG90ID09IGFjdHVhbF9zaXplICYmIHBvdCA8IG5ld19zaXplKQorCV9fdGhyb3dfcmVzaXplX2Vycm9yKCk7CisgICAgICBhY3R1YWxfc2l6ZSA9IHBvdDsKKyAgICB9CisKKyAgaWYgKGFjdHVhbF9zaXplID4gMCkKKyAgICAtLWFjdHVhbF9zaXplOworCisgIGNvbnN0IHNpemVfdHlwZSBvbGRfc2l6ZSA9IG1fc2l6ZTsKKyAgX190cnkKKyAgICB7CisgICAgICBkb19yZXNpemUoYWN0dWFsX3NpemUgLSAxKTsKKyAgICB9CisgIF9fY2F0Y2goaW5zZXJ0X2Vycm9yJiApCisgICAgeworICAgICAgbV9zaXplID0gb2xkX3NpemU7CisgICAgICBfX3Rocm93X3Jlc2l6ZV9lcnJvcigpOworICAgIH0KKyAgX19jYXRjaCguLi4pCisgICAgeworICAgICAgbV9zaXplID0gb2xkX3NpemU7CisgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAgICB9Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citkb19yZXNpemUoc2l6ZV90eXBlKQoreworICAvLyBEbyBub3RoaW5nCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitUcmlnZ2VyX1BvbGljeSYgCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfdHJpZ2dlcl9wb2xpY3koKQoreyByZXR1cm4gKnRoaXM7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2NvbnN0IFRyaWdnZXJfUG9saWN5JiAKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF90cmlnZ2VyX3BvbGljeSgpIGNvbnN0Cit7IHJldHVybiAqdGhpczsgfQorCitQQl9EU19DTEFTU19UX0RFQworU2l6ZV9Qb2xpY3kmIAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X3NpemVfcG9saWN5KCkKK3sgcmV0dXJuICp0aGlzOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitjb25zdCBTaXplX1BvbGljeSYgCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfc2l6ZV9wb2xpY3koKSBjb25zdAoreyByZXR1cm4gKnRoaXM7IH0KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvc2FtcGxlX3Jlc2l6ZV9wb2xpY3kuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvc2FtcGxlX3Jlc2l6ZV9wb2xpY3kuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNzBiOTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9zYW1wbGVfcmVzaXplX3BvbGljeS5ocHAKQEAgLTAsMCArMSwxMjUgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHNhbXBsZV9yZXNpemVfcG9saWN5LmhwcAorICogQ29udGFpbnMgYSBzYW1wbGUgcmVzaXplIHBvbGljeSBmb3IgaGFzaCB0YWJsZXMuCisgKi8KKworI2lmbmRlZiBQQl9EU19TQU1QTEVfUkVTSVpFX1BPTElDWV9IUFAKKyNkZWZpbmUgUEJfRFNfU0FNUExFX1JFU0laRV9QT0xJQ1lfSFBQCisKKy8vIEEgc2FtcGxlIHJlc2l6ZSBwb2xpY3kuCitjbGFzcyBzYW1wbGVfcmVzaXplX3BvbGljeQoreworcHVibGljOgorCisgIC8vIFNpemUgdHlwZS4KKyAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOworCisgIC8vIERlZmF1bHQgY29uc3RydWN0b3IuCisgIHNhbXBsZV9yZXNpemVfcG9saWN5KCk7CisKKyAgLy8gQ29weSBjb25zdHJ1Y3Rvci4KKyAgc2FtcGxlX3JhbmdlX2hhc2hpbmcoY29uc3Qgc2FtcGxlX3Jlc2l6ZV9wb2xpY3kmIG90aGVyKTsKKworICAvLyBTd2FwcyBjb250ZW50LgorICBpbmxpbmUgdm9pZAorICBzd2FwKHNhbXBsZV9yZXNpemVfcG9saWN5JiBvdGhlcik7CisKK3Byb3RlY3RlZDoKKworICAvLyBOb3RpZmllcyBhIHNlYXJjaCBzdGFydGVkLgorICBpbmxpbmUgdm9pZAorICBub3RpZnlfaW5zZXJ0X3NlYXJjaF9zdGFydCgpOworCisgIC8vIE5vdGlmaWVzIGEgc2VhcmNoIGVuY291bnRlcmVkIGEgY29sbGlzaW9uLgorICBpbmxpbmUgdm9pZAorICBub3RpZnlfaW5zZXJ0X3NlYXJjaF9jb2xsaXNpb24oKTsKKworICAvLyBOb3RpZmllcyBhIHNlYXJjaCBlbmRlZC4KKyAgaW5saW5lIHZvaWQKKyAgbm90aWZ5X2luc2VydF9zZWFyY2hfZW5kKCk7CisKKyAgLy8gTm90aWZpZXMgYSBzZWFyY2ggc3RhcnRlZC4KKyAgaW5saW5lIHZvaWQKKyAgbm90aWZ5X2ZpbmRfc2VhcmNoX3N0YXJ0KCk7CisKKyAgLy8gTm90aWZpZXMgYSBzZWFyY2ggZW5jb3VudGVyZWQgYSBjb2xsaXNpb24uCisgIGlubGluZSB2b2lkCisgIG5vdGlmeV9maW5kX3NlYXJjaF9jb2xsaXNpb24oKTsKKworICAvLyBOb3RpZmllcyBhIHNlYXJjaCBlbmRlZC4KKyAgaW5saW5lIHZvaWQKKyAgbm90aWZ5X2ZpbmRfc2VhcmNoX2VuZCgpOworCisgIC8vIE5vdGlmaWVzIGEgc2VhcmNoIHN0YXJ0ZWQuCisgIGlubGluZSB2b2lkCisgIG5vdGlmeV9lcmFzZV9zZWFyY2hfc3RhcnQoKTsKKworICAvLyBOb3RpZmllcyBhIHNlYXJjaCBlbmNvdW50ZXJlZCBhIGNvbGxpc2lvbi4KKyAgaW5saW5lIHZvaWQKKyAgbm90aWZ5X2VyYXNlX3NlYXJjaF9jb2xsaXNpb24oKTsKKworICAvLyBOb3RpZmllcyBhIHNlYXJjaCBlbmRlZC4KKyAgaW5saW5lIHZvaWQKKyAgbm90aWZ5X2VyYXNlX3NlYXJjaF9lbmQoKTsKKworICAvLyBOb3RpZmllcyBhbiBlbGVtZW50IHdhcyBpbnNlcnRlZC4KKyAgaW5saW5lIHZvaWQKKyAgbm90aWZ5X2luc2VydGVkKHNpemVfdHlwZSBudW1fZSk7CisKKyAgLy8gTm90aWZpZXMgYW4gZWxlbWVudCB3YXMgZXJhc2VkLgorICBpbmxpbmUgdm9pZAorICBub3RpZnlfZXJhc2VkKHNpemVfdHlwZSBudW1fZSk7CisKKyAgLy8gTm90aWZpZXMgdGhlIHRhYmxlIHdhcyBjbGVhcmVkLgorICB2b2lkCisgIG5vdGlmeV9jbGVhcmVkKCk7CisKKyAgLy8gTm90aWZpZXMgdGhlIHRhYmxlIHdhcyByZXNpemVkIHRvIG5ld19zaXplLgorICB2b2lkCisgIG5vdGlmeV9yZXNpemVkKHNpemVfdHlwZSBuZXdfc2l6ZSk7CisKKyAgLy8gUXVlcmllcyB3aGV0aGVyIGEgcmVzaXplIGlzIG5lZWRlZC4KKyAgaW5saW5lIGJvb2wKKyAgaXNfcmVzaXplX25lZWRlZCgpIGNvbnN0OworCisgIC8vIFF1ZXJpZXMgd2hhdCB0aGUgbmV3IHNpemUgc2hvdWxkIGJlLgorICBzaXplX3R5cGUKKyAgZ2V0X25ld19zaXplKHNpemVfdHlwZSBzaXplLCBzaXplX3R5cGUgbnVtX3VzZWRfZSkgY29uc3Q7Cit9OworCisjZW5kaWYgCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9zYW1wbGVfcmVzaXplX3RyaWdnZXIuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvc2FtcGxlX3Jlc2l6ZV90cmlnZ2VyLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjdkZDk0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvc2FtcGxlX3Jlc2l6ZV90cmlnZ2VyLmhwcApAQCAtMCwwICsxLDEzNyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgc2FtcGxlX3Jlc2l6ZV90cmlnZ2VyLmhwcAorICogQ29udGFpbnMgYSBzYW1wbGUgcmVzaXplIHRyaWdnZXIgcG9saWN5IGNsYXNzLgorICovCisKKyNpZm5kZWYgUEJfRFNfU0FNUExFX1JFU0laRV9UUklHR0VSX0hQUAorI2RlZmluZSBQQl9EU19TQU1QTEVfUkVTSVpFX1RSSUdHRVJfSFBQCisKKy8vIEEgc2FtcGxlIHJlc2l6ZSB0cmlnZ2VyIHBvbGljeS4KK2NsYXNzIHNhbXBsZV9yZXNpemVfdHJpZ2dlcgoreworcHVibGljOgorCisgIC8vIFNpemUgdHlwZS4KKyAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOworCisgIC8vIERlZmF1bHQgY29uc3RydWN0b3IuCisgIHNhbXBsZV9yZXNpemVfdHJpZ2dlcigpOworCisgIC8vIENvcHkgY29uc3RydWN0b3IuCisgIHNhbXBsZV9yYW5nZV9oYXNoaW5nKGNvbnN0IHNhbXBsZV9yZXNpemVfdHJpZ2dlciYgb3RoZXIpOworCisgIC8vIFN3YXBzIGNvbnRlbnQuCisgIGlubGluZSB2b2lkCisgIHN3YXAoc2FtcGxlX3Jlc2l6ZV90cmlnZ2VyJiBvdGhlcik7CisKK3Byb3RlY3RlZDoKKworICAvLyBOb3RpZmllcyBhIHNlYXJjaCBzdGFydGVkLgorICBpbmxpbmUgdm9pZAorICBub3RpZnlfaW5zZXJ0X3NlYXJjaF9zdGFydCgpOworCisgIC8vIE5vdGlmaWVzIGEgc2VhcmNoIGVuY291bnRlcmVkIGEgY29sbGlzaW9uLgorICBpbmxpbmUgdm9pZAorICBub3RpZnlfaW5zZXJ0X3NlYXJjaF9jb2xsaXNpb24oKTsKKworICAvLyBOb3RpZmllcyBhIHNlYXJjaCBlbmRlZC4KKyAgaW5saW5lIHZvaWQKKyAgbm90aWZ5X2luc2VydF9zZWFyY2hfZW5kKCk7CisKKyAgLy8gTm90aWZpZXMgYSBzZWFyY2ggc3RhcnRlZC4KKyAgaW5saW5lIHZvaWQKKyAgbm90aWZ5X2ZpbmRfc2VhcmNoX3N0YXJ0KCk7CisKKyAgLy8gTm90aWZpZXMgYSBzZWFyY2ggZW5jb3VudGVyZWQgYSBjb2xsaXNpb24uCisgIGlubGluZSB2b2lkCisgIG5vdGlmeV9maW5kX3NlYXJjaF9jb2xsaXNpb24oKTsKKworICAvLyBOb3RpZmllcyBhIHNlYXJjaCBlbmRlZC4KKyAgaW5saW5lIHZvaWQKKyAgbm90aWZ5X2ZpbmRfc2VhcmNoX2VuZCgpOworCisgIC8vIE5vdGlmaWVzIGEgc2VhcmNoIHN0YXJ0ZWQuCisgIGlubGluZSB2b2lkCisgIG5vdGlmeV9lcmFzZV9zZWFyY2hfc3RhcnQoKTsKKworICAvLyBOb3RpZmllcyBhIHNlYXJjaCBlbmNvdW50ZXJlZCBhIGNvbGxpc2lvbi4KKyAgaW5saW5lIHZvaWQKKyAgbm90aWZ5X2VyYXNlX3NlYXJjaF9jb2xsaXNpb24oKTsKKworICAvLyBOb3RpZmllcyBhIHNlYXJjaCBlbmRlZC4KKyAgaW5saW5lIHZvaWQKKyAgbm90aWZ5X2VyYXNlX3NlYXJjaF9lbmQoKTsKKworICAvLyBOb3RpZmllcyBhbiBlbGVtZW50IHdhcyBpbnNlcnRlZC4gdGhlIHRvdGFsIG51bWJlciBvZiBlbnRyaWVzIGluCisgIC8vIHRoZSB0YWJsZSBpcyBudW1fZW50cmllcy4KKyAgaW5saW5lIHZvaWQKKyAgbm90aWZ5X2luc2VydGVkKHNpemVfdHlwZSBudW1fZW50cmllcyk7CisKKyAgLy8gTm90aWZpZXMgYW4gZWxlbWVudCB3YXMgZXJhc2VkLgorICBpbmxpbmUgdm9pZAorICBub3RpZnlfZXJhc2VkKHNpemVfdHlwZSBudW1fZW50cmllcyk7CisKKyAgLy8gTm90aWZpZXMgdGhlIHRhYmxlIHdhcyBjbGVhcmVkLgorICB2b2lkCisgIG5vdGlmeV9jbGVhcmVkKCk7CisKKyAgLy8gTm90aWZpZXMgdGhlIHRhYmxlIHdhcyByZXNpemVkIGFzIGEgcmVzdWx0IG9mIHRoaXMgb2JqZWN0J3MKKyAgLy8gc2lnbmlmeWluZyB0aGF0IGEgcmVzaXplIGlzIG5lZWRlZC4KKyAgdm9pZAorICBub3RpZnlfcmVzaXplZChzaXplX3R5cGUgbmV3X3NpemUpOworCisgIC8vIE5vdGlmaWVzIHRoZSB0YWJsZSB3YXMgcmVzaXplZCBleHRlcm5hbGx5LgorICB2b2lkCisgIG5vdGlmeV9leHRlcm5hbGx5X3Jlc2l6ZWQoc2l6ZV90eXBlIG5ld19zaXplKTsKKworICAvLyBRdWVyaWVzIHdoZXRoZXIgYSByZXNpemUgaXMgbmVlZGVkLgorICBpbmxpbmUgYm9vbAorICBpc19yZXNpemVfbmVlZGVkKCkgY29uc3Q7CisKKyAgLy8gUXVlcmllcyB3aGV0aGVyIGEgZ3JvdyBpcyBuZWVkZWQuCisgIGlubGluZSBib29sCisgIGlzX2dyb3dfbmVlZGVkKHNpemVfdHlwZSBzaXplLCBzaXplX3R5cGUgbnVtX2VudHJpZXMpIGNvbnN0OworCitwcml2YXRlOgorCisgIC8vIFJlc2l6ZXMgdG8gbmV3X3NpemUuCisgIHZpcnR1YWwgdm9pZAorICBkb19yZXNpemUoc2l6ZV90eXBlIG5ld19zaXplKTsKK307CisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9yZXNpemVfcG9saWN5L3NhbXBsZV9zaXplX3BvbGljeS5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9zYW1wbGVfc2l6ZV9wb2xpY3kuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMmQzYTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9zYW1wbGVfc2l6ZV9wb2xpY3kuaHBwCkBAIC0wLDAgKzEsNzMgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHNhbXBsZV9zaXplX3BvbGljeS5ocHAKKyAqIENvbnRhaW5zIGEgc2FtcGxlIHNpemUgcmVzaXplLXBvbGljeS4KKyAqLworCisjaWZuZGVmIFBCX0RTX1NBTVBMRV9TSVpFX1BPTElDWV9IUFAKKyNkZWZpbmUgUEJfRFNfU0FNUExFX1NJWkVfUE9MSUNZX0hQUAorCisvLyBBIHNhbXBsZSBzaXplIHBvbGljeS4KK2NsYXNzIHNhbXBsZV9zaXplX3BvbGljeQoreworcHVibGljOgorCisgIC8vIFNpemUgdHlwZS4KKyAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOworCisgIC8vIERlZmF1bHQgY29uc3RydWN0b3IuCisgIHNhbXBsZV9zaXplX3BvbGljeSgpOworCisgIC8vIENvcHkgY29uc3RydWN0b3IuCisgIHNhbXBsZV9yYW5nZV9oYXNoaW5nKGNvbnN0IHNhbXBsZV9zaXplX3BvbGljeSYgb3RoZXIpOworCisgIC8vIFN3YXBzIGNvbnRlbnQuCisgIGlubGluZSB2b2lkCisgIHN3YXAoc2FtcGxlX3NpemVfcG9saWN5JiBvdGhlcik7CisKK3Byb3RlY3RlZDoKKworICAvLyBHaXZlbiBhIF9fc2l6ZSBzaXplLCByZXR1cm5zIGEgX19zaXplIHRoYXQgaXMgbGFyZ2VyLgorICBpbmxpbmUgc2l6ZV90eXBlCisgIGdldF9uZWFyZXN0X2xhcmdlcl9zaXplKHNpemVfdHlwZSBzaXplKSBjb25zdDsKKworICAvLyBHaXZlbiBhIF9fc2l6ZSBzaXplLCByZXR1cm5zIGEgX19zaXplIHRoYXQgaXMgc21hbGxlci4KKyAgaW5saW5lIHNpemVfdHlwZQorICBnZXRfbmVhcmVzdF9zbWFsbGVyX3NpemUoc2l6ZV90eXBlIHNpemUpIGNvbnN0OworfTsKKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMjU4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxMDIgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGNvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3Igc3BsYXlfdHJlZV8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIEl0Pgordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY29weV9mcm9tX3JhbmdlKEl0IGZpcnN0X2l0LCBJdCBsYXN0X2l0KQoreworICB3aGlsZSAoZmlyc3RfaXQgIT0gbGFzdF9pdCkKKyAgICBpbnNlcnQoKihmaXJzdF9pdCsrKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19DTEFTU19OQU1FKCkKK3sKKyAgaW5pdGlhbGl6ZSgpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK1BCX0RTX0NMQVNTX05BTUUoY29uc3QgQ21wX0ZuJiByX2NtcF9mbikgOgorICBiYXNlX3R5cGUocl9jbXBfZm4pCit7CisgIGluaXRpYWxpemUoKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19DTEFTU19OQU1FKGNvbnN0IENtcF9GbiYgcl9jbXBfZm4sIGNvbnN0IG5vZGVfdXBkYXRlJiByX25vZGVfdXBkYXRlKSA6CisgIGJhc2VfdHlwZShyX2NtcF9mbiwgcl9ub2RlX3VwZGF0ZSkKK3sKKyAgaW5pdGlhbGl6ZSgpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK1BCX0RTX0NMQVNTX05BTUUoY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKSA6CisgIGJhc2VfdHlwZShvdGhlcikKK3sKKyAgaW5pdGlhbGl6ZSgpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspCisgIGJhc2VfdHlwZTo6c3dhcChvdGhlcik7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2luaXRpYWxpemUoKQoreyBiYXNlX3R5cGU6Om1fcF9oZWFkLT5tX3NwZWNpYWwgPSB0cnVlOyB9CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vZGVidWdfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vZGVidWdfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg0ZTI1ZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9kZWJ1Z19mbl9pbXBzLmhwcApAQCAtMCwwICsxLDc0IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBkZWJ1Z19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIHNwbGF5X3RyZWVfLgorICovCisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X3ZhbGlkKCkgY29uc3QKK3sKKyAgYmFzZV90eXBlOjphc3NlcnRfdmFsaWQoKTsKKyAgY29uc3Qgbm9kZV9wb2ludGVyIHBfaGVhZCA9IGJhc2VfdHlwZTo6bV9wX2hlYWQ7CisgIGFzc2VydF9zcGVjaWFsX2ltcChwX2hlYWQpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X3NwZWNpYWxfaW1wKGNvbnN0IG5vZGVfcG9pbnRlciBwX25kKSBjb25zdAoreworICBpZiAocF9uZCA9PSBOVUxMKQorICAgIHJldHVybjsKKworICBpZiAocF9uZCA9PSBiYXNlX3R5cGU6Om1fcF9oZWFkKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kLT5tX3NwZWNpYWwpOworICAgICAgYXNzZXJ0X3NwZWNpYWxfaW1wKHBfbmQtPm1fcF9wYXJlbnQpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoIXBfbmQtPm1fc3BlY2lhbCk7CisgIGFzc2VydF9zcGVjaWFsX2ltcChwX25kLT5tX3BfbGVmdCk7CisgIGFzc2VydF9zcGVjaWFsX2ltcChwX25kLT5tX3BfcmlnaHQpOworfQorCisjZW5kaWYgCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9lcmFzZV9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9lcmFzZV9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDhmNTg2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL2VyYXNlX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTU3IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBlcmFzZV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIHNwbGF5X3RyZWVfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgYm9vbAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2UoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSkKK3sKKyAgcG9pbnRfaXRlcmF0b3IgaXQgPSBmaW5kKHJfa2V5KTsKKyAgaWYgKGl0ID09IGJhc2VfdHlwZTo6ZW5kKCkpCisgICAgcmV0dXJuIGZhbHNlOworICBlcmFzZShpdCk7CisgIHJldHVybiB0cnVlOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjppdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2UoaXRlcmF0b3IgaXQpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCkpOworICBpZiAoaXQgPT0gYmFzZV90eXBlOjplbmQoKSkKKyAgICByZXR1cm4gaXQ7CisgIGl0ZXJhdG9yIHJldF9pdCA9IGl0OworICArK3JldF9pdDsKKyAgZXJhc2Vfbm9kZShpdC5tX3BfbmQpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpKTsKKyAgcmV0dXJuIHJldF9pdDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6cmV2ZXJzZV9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2UocmV2ZXJzZV9pdGVyYXRvciBpdCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKSk7CisgIGlmIChpdC5tX3BfbmQgPT0gYmFzZV90eXBlOjptX3BfaGVhZCkKKyAgICByZXR1cm4gKGl0KTsKKyAgcmV2ZXJzZV9pdGVyYXRvciByZXRfaXQgPSBpdDsKKyAgKytyZXRfaXQ7CisgIGVyYXNlX25vZGUoaXQubV9wX25kKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKSk7CisgIHJldHVybiByZXRfaXQ7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkPgoraW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlX2lmKFByZWQgcHJlZCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIHNpemVfdHlwZSBudW1fZXJzZCA9IDA7CisgIGl0ZXJhdG9yIGl0ID0gYmFzZV90eXBlOjpiZWdpbigpOworICB3aGlsZSAoaXQgIT0gYmFzZV90eXBlOjplbmQoKSkKKyAgICB7CisgICAgICBpZiAocHJlZCgqaXQpKQorICAgICAgICB7CisJICArK251bV9lcnNkOworCSAgaXQgPSBlcmFzZShpdCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKwkrK2l0OworICAgIH0KKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIHJldHVybiBudW1fZXJzZDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlX25vZGUobm9kZV9wb2ludGVyIHBfbmQpCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kICE9IE5VTEwpOworICBzcGxheShwX25kKTsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQgPT0gdGhpcy0+bV9wX2hlYWQtPm1fcF9wYXJlbnQpOworCisgIG5vZGVfcG9pbnRlciBwX2wgPSBwX25kLT5tX3BfbGVmdDsKKyAgbm9kZV9wb2ludGVyIHBfciA9IHBfbmQtPm1fcF9yaWdodDsKKworICBiYXNlX3R5cGU6OnVwZGF0ZV9taW5fbWF4X2Zvcl9lcmFzZWRfbm9kZShwX25kKTsKKyAgYmFzZV90eXBlOjphY3R1YWxfZXJhc2Vfbm9kZShwX25kKTsKKyAgaWYgKHBfciA9PSBOVUxMKQorICAgIHsKKyAgICAgIGJhc2VfdHlwZTo6bV9wX2hlYWQtPm1fcF9wYXJlbnQgPSBwX2w7CisgICAgICBpZiAocF9sICE9IE5VTEwpCisJcF9sLT5tX3BfcGFyZW50ID0gYmFzZV90eXBlOjptX3BfaGVhZDsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgICAgcmV0dXJuOworICAgIH0KKworICBub2RlX3BvaW50ZXIgcF90YXJnZXRfciA9IGxlZnRtb3N0KHBfcik7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3RhcmdldF9yICE9IE5VTEwpOworICBwX3ItPm1fcF9wYXJlbnQgPSBiYXNlX3R5cGU6Om1fcF9oZWFkOworICBiYXNlX3R5cGU6Om1fcF9oZWFkLT5tX3BfcGFyZW50ID0gcF9yOworICBzcGxheShwX3RhcmdldF9yKTsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKHBfdGFyZ2V0X3ItPm1fcF9sZWZ0ID0gTlVMTCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3RhcmdldF9yLT5tX3BfcGFyZW50ID09IHRoaXMtPm1fcF9oZWFkKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHRoaXMtPm1fcF9oZWFkLT5tX3BfcGFyZW50ID09IHBfdGFyZ2V0X3IpOworCisgIHBfdGFyZ2V0X3ItPm1fcF9sZWZ0ID0gcF9sOworICBpZiAocF9sICE9IE5VTEwpCisgICAgcF9sLT5tX3BfcGFyZW50ID0gcF90YXJnZXRfcjsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIGFwcGx5X3VwZGF0ZShwX3RhcmdldF9yLCAobm9kZV91cGRhdGUqICl0aGlzKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9wb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6CitsZWZ0bW9zdChub2RlX3BvaW50ZXIgcF9uZCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQgIT0gTlVMTCk7CisgIHdoaWxlIChwX25kLT5tX3BfbGVmdCAhPSBOVUxMKQorICAgIHBfbmQgPSBwX25kLT5tX3BfbGVmdDsKKyAgcmV0dXJuIHBfbmQ7Cit9CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vZmluZF9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9maW5kX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MjQyNWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vZmluZF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDk5IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBmaW5kX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3Igc3BsYXlfdHJlZV8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6cG9pbnRfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2ZpbmQoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSkKK3sKKyAgbm9kZV9wb2ludGVyIHBfZm91bmQgPSBmaW5kX2ltcChyX2tleSk7CisgIGlmIChwX2ZvdW5kICE9IGJhc2VfdHlwZTo6bV9wX2hlYWQpCisgICAgc3BsYXkocF9mb3VuZCk7CisgIHJldHVybiBwb2ludF9pdGVyYXRvcihwX2ZvdW5kKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfcG9pbnRfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2ZpbmQoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSkgY29uc3QKK3sKKyAgY29uc3Qgbm9kZV9wb2ludGVyIHBfZm91bmQgPSBmaW5kX2ltcChyX2tleSk7CisgIGlmIChwX2ZvdW5kICE9IGJhc2VfdHlwZTo6bV9wX2hlYWQpCisgICAgY29uc3RfY2FzdDxQQl9EU19DTEFTU19DX0RFQyogPih0aGlzKS0+c3BsYXkocF9mb3VuZCk7CisgIHJldHVybiBwb2ludF9pdGVyYXRvcihwX2ZvdW5kKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9wb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6CitmaW5kX2ltcChjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5KQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGJhc2VfdHlwZTo6c3RydWN0dXJlX29ubHlfYXNzZXJ0X3ZhbGlkKCk7KQorICBub2RlX3BvaW50ZXIgcF9uZCA9IGJhc2VfdHlwZTo6bV9wX2hlYWQtPm1fcF9wYXJlbnQ7CisgIHdoaWxlIChwX25kICE9IE5VTEwpCisgICAgaWYgKCFDbXBfRm46Om9wZXJhdG9yKCkoUEJfRFNfVjJGKHBfbmQtPm1fdmFsdWUpLCByX2tleSkpCisgICAgICB7CisJaWYgKCFDbXBfRm46Om9wZXJhdG9yKCkocl9rZXksIFBCX0RTX1YyRihwX25kLT5tX3ZhbHVlKSkpCisJICByZXR1cm4gcF9uZDsKKwlwX25kID0gcF9uZC0+bV9wX2xlZnQ7CisgICAgICB9CisgICAgZWxzZQorICAgICAgcF9uZCA9IHBfbmQtPm1fcF9yaWdodDsKKyAgcmV0dXJuIGJhc2VfdHlwZTo6bV9wX2hlYWQ7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgY29uc3QgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZmluZF9pbXAoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSkgY29uc3QKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgIG5vZGVfcG9pbnRlciBwX25kID0gYmFzZV90eXBlOjptX3BfaGVhZC0+bV9wX3BhcmVudDsKKyAgd2hpbGUgKHBfbmQgIT0gTlVMTCkKKyAgICBpZiAoIUNtcF9Gbjo6b3BlcmF0b3IoKShQQl9EU19WMkYocF9uZC0+bV92YWx1ZSksIHJfa2V5KSkKKyAgICAgIHsKKwlpZiAoIUNtcF9Gbjo6b3BlcmF0b3IoKShyX2tleSwgUEJfRFNfVjJGKHBfbmQtPm1fdmFsdWUpKSkKKwkgIHJldHVybiBwX25kOworCXBfbmQgPSBwX25kLT5tX3BfbGVmdDsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBwX25kID0gcF9uZC0+bV9wX3JpZ2h0OworICByZXR1cm4gYmFzZV90eXBlOjptX3BfaGVhZDsKK30KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9pbmZvX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL2luZm9fZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM2YjlhYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9pbmZvX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMzkgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGluZm9fZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uLgorICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vaW5zZXJ0X2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL2luc2VydF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWFlOTg3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL2luc2VydF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDkzIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBpbnNlcnRfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBzcGxheV90cmVlXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHN0ZDo6cGFpcjx0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6cG9pbnRfaXRlcmF0b3IsIGJvb2w+CitQQl9EU19DTEFTU19DX0RFQzo6CitpbnNlcnQoY29uc3RfcmVmZXJlbmNlIHJfdmFsdWUpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICBzdGQ6OnBhaXI8cG9pbnRfaXRlcmF0b3IsIGJvb2w+IGluc19wYWlyID0gaW5zZXJ0X2xlYWZfaW1wKHJfdmFsdWUpOworICBpbnNfcGFpci5maXJzdC5tX3BfbmQtPm1fc3BlY2lhbCA9IGZhbHNlOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpKTsKKyAgc3BsYXkoaW5zX3BhaXIuZmlyc3QubV9wX25kKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKSk7CisgIHJldHVybiBpbnNfcGFpcjsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBzdGQ6OnBhaXI8dHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnBvaW50X2l0ZXJhdG9yLCBib29sPgorUEJfRFNfQ0xBU1NfQ19ERUM6OgoraW5zZXJ0X2xlYWZfaW1wKGNvbnN0X3JlZmVyZW5jZSByX3ZhbHVlKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGJhc2VfdHlwZTo6c3RydWN0dXJlX29ubHlfYXNzZXJ0X3ZhbGlkKCk7KQorICBpZiAoYmFzZV90eXBlOjptX3NpemUgPT0gMCkKKyAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoYmFzZV90eXBlOjppbnNlcnRfaW1wX2VtcHR5KHJfdmFsdWUpLCB0cnVlKTsKKworICBub2RlX3BvaW50ZXIgcF9uZCA9IGJhc2VfdHlwZTo6bV9wX2hlYWQtPm1fcF9wYXJlbnQ7CisgIG5vZGVfcG9pbnRlciBwX3BvdCA9IGJhc2VfdHlwZTo6bV9wX2hlYWQ7CisKKyAgd2hpbGUgKHBfbmQgIT0gTlVMTCkKKyAgICBpZiAoIUNtcF9Gbjo6b3BlcmF0b3IoKShQQl9EU19WMkYocF9uZC0+bV92YWx1ZSksIFBCX0RTX1YyRihyX3ZhbHVlKSkpCisgICAgICB7CisJaWYgKCFDbXBfRm46Om9wZXJhdG9yKCkoUEJfRFNfVjJGKHJfdmFsdWUpLCBQQl9EU19WMkYocF9uZC0+bV92YWx1ZSkpKQorCSAgeworCSAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocG9pbnRfaXRlcmF0b3IocF9uZCksIGZhbHNlKTsKKwkgIH0KKwlwX3BvdCA9IHBfbmQ7CisJcF9uZCA9IHBfbmQtPm1fcF9sZWZ0OworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHBfbmQgPSBwX25kLT5tX3BfcmlnaHQ7CisKKyAgaWYgKHBfcG90ID09IGJhc2VfdHlwZTo6bV9wX2hlYWQpCisgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGJhc2VfdHlwZTo6aW5zZXJ0X2xlYWZfbmV3KHJfdmFsdWUsIGJhc2VfdHlwZTo6bV9wX2hlYWQtPm1fcF9yaWdodCwgZmFsc2UpLCB0cnVlKTsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGJhc2VfdHlwZTo6Y2hlY2tfa2V5X2RvZXNfbm90X2V4aXN0KFBCX0RTX1YyRihyX3ZhbHVlKSkpOworCisgIHBfbmQgPSBwX3BvdC0+bV9wX2xlZnQ7CisgIGlmIChwX25kID09IE5VTEwpCisgICAgcmV0dXJuIChzdGQ6Om1ha2VfcGFpcihiYXNlX3R5cGU6Omluc2VydF9sZWFmX25ldyhyX3ZhbHVlLCBwX3BvdCwgdHJ1ZSksIHRydWUpKTsKKworICB3aGlsZSAocF9uZC0+bV9wX3JpZ2h0ICE9IE5VTEwpCisgICAgcF9uZCA9IHBfbmQtPm1fcF9yaWdodDsKKworICByZXR1cm4gc3RkOjptYWtlX3BhaXIoaW5zZXJ0X2xlYWZfbmV3KHJfdmFsdWUsIHBfbmQsIGZhbHNlKSwgdHJ1ZSk7Cit9CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vbm9kZS5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vbm9kZS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJmMzk4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9ub2RlLmhwcApAQCAtMCwwICsxLDEyNSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgbm9kZS5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIHN0cnVjdCBmb3Igc3BsYXlfdHJlZV8ncyBub2RlLgorICovCisKKyNpZm5kZWYgUEJfRFNfU1BMQVlfVFJFRV9OT0RFX0hQUAorI2RlZmluZSBQQl9EU19TUExBWV9UUkVFX05PREVfSFBQCisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlX1R5cGUsIGNsYXNzIE1ldGFkYXRhLCBjbGFzcyBBbGxvY2F0b3I+CisgICAgc3RydWN0IHNwbGF5X3RyZWVfbm9kZV8KKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBWYWx1ZV9UeXBlIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIE1ldGFkYXRhIG1ldGFkYXRhX3R5cGU7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorICAgICAgc3BsYXlfdHJlZV9ub2RlXzxWYWx1ZV9UeXBlLCBNZXRhZGF0YSwgQWxsb2NhdG9yPiA+OjpvdGhlcjo6cG9pbnRlcgorICAgICAgbm9kZV9wb2ludGVyOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxtZXRhZGF0YV90eXBlPjo6b3RoZXI6OnJlZmVyZW5jZQorICAgICAgbWV0YWRhdGFfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxtZXRhZGF0YV90eXBlPjo6b3RoZXI6OmNvbnN0X3JlZmVyZW5jZQorICAgICAgY29uc3RfbWV0YWRhdGFfcmVmZXJlbmNlOworCisjaWZkZWYgUEJfRFNfQklOX1NFQVJDSF9UUkVFX1RSQUNFXworICAgICAgdm9pZAorICAgICAgdHJhY2UoKSBjb25zdAorICAgICAgeyBzdGQ6OmNvdXQgPDwgUEJfRFNfVjJGKG1fdmFsdWUpIDw8ICIoIiA8PCBtX21ldGFkYXRhIDw8ICIpIjsgfQorI2VuZGlmCisKKyAgICAgIGlubGluZSBib29sCisgICAgICBzcGVjaWFsKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIG1fc3BlY2lhbDsgfQorCisgICAgICBpbmxpbmUgY29uc3RfbWV0YWRhdGFfcmVmZXJlbmNlCisgICAgICBnZXRfbWV0YWRhdGEoKSBjb25zdAorICAgICAgeyByZXR1cm4gbV9tZXRhZGF0YTsgfQorCisgICAgICBpbmxpbmUgbWV0YWRhdGFfcmVmZXJlbmNlCisgICAgICBnZXRfbWV0YWRhdGEoKQorICAgICAgeyByZXR1cm4gbV9tZXRhZGF0YTsgfQorCisgICAgICB2YWx1ZV90eXBlIG1fdmFsdWU7CisgICAgICBib29sIG1fc3BlY2lhbDsKKyAgICAgIG5vZGVfcG9pbnRlciBtX3BfbGVmdDsKKyAgICAgIG5vZGVfcG9pbnRlciBtX3BfcmlnaHQ7CisgICAgICBub2RlX3BvaW50ZXIgbV9wX3BhcmVudDsKKyAgICAgIG1ldGFkYXRhX3R5cGUgbV9tZXRhZGF0YTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVfVHlwZSwgdHlwZW5hbWUgQWxsb2NhdG9yPgorICAgIHN0cnVjdCBzcGxheV90cmVlX25vZGVfPFZhbHVlX1R5cGUsIG51bGxfbm9kZV9tZXRhZGF0YSwgQWxsb2NhdG9yPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIFZhbHVlX1R5cGUgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgbnVsbF9ub2RlX21ldGFkYXRhIG1ldGFkYXRhX3R5cGU7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorICAgICAgc3BsYXlfdHJlZV9ub2RlXzxWYWx1ZV9UeXBlLCBudWxsX25vZGVfbWV0YWRhdGEsIEFsbG9jYXRvcj4gPjo6b3RoZXI6OnBvaW50ZXIKKyAgICAgIG5vZGVfcG9pbnRlcjsKKworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIHNwZWNpYWwoKSBjb25zdAorICAgICAgeyByZXR1cm4gbV9zcGVjaWFsOyB9CisKKyNpZmRlZiBQQl9EU19CSU5fU0VBUkNIX1RSRUVfVFJBQ0VfCisgICAgICB2b2lkCisgICAgICB0cmFjZSgpIGNvbnN0CisgICAgICB7IHN0ZDo6Y291dCA8PCBQQl9EU19WMkYobV92YWx1ZSk7IH0KKyNlbmRpZiAKKworICAgICAgbm9kZV9wb2ludGVyIG1fcF9sZWZ0OworICAgICAgbm9kZV9wb2ludGVyIG1fcF9yaWdodDsKKyAgICAgIG5vZGVfcG9pbnRlciBtX3BfcGFyZW50OworICAgICAgdmFsdWVfdHlwZSBtX3ZhbHVlOworICAgICAgYm9vbCBtX3NwZWNpYWw7CisgICAgfTsKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9zcGxheV9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9zcGxheV9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGYzNTU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL3NwbGF5X2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMjgzIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBzcGxheV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIHNwbGF5X3RyZWVfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitzcGxheShub2RlX3BvaW50ZXIgcF9uZCkKK3sKKyAgd2hpbGUgKHBfbmQtPm1fcF9wYXJlbnQgIT0gYmFzZV90eXBlOjptX3BfaGVhZCkKKyAgICB7CisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHsKKwlub2RlX3BvaW50ZXIgcF9oZWFkID0gYmFzZV90eXBlOjptX3BfaGVhZDsKKwlhc3NlcnRfc3BlY2lhbF9pbXAocF9oZWFkKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGJhc2VfdHlwZTo6YXNzZXJ0X25vZGVfY29uc2lzdGVudChwX25kKTspCisKKyAgICAgICAgaWYgKHBfbmQtPm1fcF9wYXJlbnQtPm1fcF9wYXJlbnQgPT0gYmFzZV90eXBlOjptX3BfaGVhZCkKKwkgIHsKKyAgICAgICAgICAgIGJhc2VfdHlwZTo6cm90YXRlX3BhcmVudChwX25kKTsKKyAgICAgICAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kID09IHRoaXMtPm1fcF9oZWFkLT5tX3BfcGFyZW50KTsKKwkgIH0KKyAgICAgICAgZWxzZQorCSAgeworICAgICAgICAgICAgY29uc3Qgbm9kZV9wb2ludGVyIHBfcGFyZW50ID0gcF9uZC0+bV9wX3BhcmVudDsKKyAgICAgICAgICAgIGNvbnN0IG5vZGVfcG9pbnRlciBwX2dyYW5kcGFyZW50ID0gcF9wYXJlbnQtPm1fcF9wYXJlbnQ7CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIHRvdGFsID0KKwkgICAgICBiYXNlX3R5cGU6OnJlY3Vyc2l2ZV9jb3VudChwX2dyYW5kcGFyZW50KTsKKyAgICAgICAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCh0b3RhbCA+PSAzKTsKKyNlbmRpZiAKKworICAgICAgICAgICAgaWYgKHBfcGFyZW50LT5tX3BfbGVmdCA9PSBwX25kICYmIAorCQlwX2dyYW5kcGFyZW50LT5tX3BfcmlnaHQgPT0gcF9wYXJlbnQpCisJICAgICAgc3BsYXlfemlnX3phZ19sZWZ0KHBfbmQsIHBfcGFyZW50LCBwX2dyYW5kcGFyZW50KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHBfcGFyZW50LT5tX3BfcmlnaHQgPT0gcF9uZCAmJiAKKwkJICAgICBwX2dyYW5kcGFyZW50LT5tX3BfbGVmdCA9PSBwX3BhcmVudCkKKwkgICAgICBzcGxheV96aWdfemFnX3JpZ2h0KHBfbmQsIHBfcGFyZW50LCBwX2dyYW5kcGFyZW50KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHBfcGFyZW50LT5tX3BfbGVmdCA9PSBwX25kICYmIAorCQkgICAgIHBfZ3JhbmRwYXJlbnQtPm1fcF9sZWZ0ID09IHBfcGFyZW50KQorCSAgICAgIHNwbGF5X3ppZ196aWdfbGVmdChwX25kLCBwX3BhcmVudCwgcF9ncmFuZHBhcmVudCk7CisgICAgICAgICAgICBlbHNlCisJICAgICAgc3BsYXlfemlnX3ppZ19yaWdodChwX25kLCBwX3BhcmVudCwgcF9ncmFuZHBhcmVudCk7CisgICAgICAgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQodG90YWwgPT10aGlzLT5yZWN1cnNpdmVfY291bnQocF9uZCkpOworCSAgfQorCisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGJhc2VfdHlwZTo6YXNzZXJ0X25vZGVfY29uc2lzdGVudChwX25kKTspCisgIH0KK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitzcGxheV96aWdfemFnX2xlZnQobm9kZV9wb2ludGVyIHBfbmQsIG5vZGVfcG9pbnRlciBwX3BhcmVudCwgCisJCSAgIG5vZGVfcG9pbnRlciBwX2dyYW5kcGFyZW50KQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9wYXJlbnQgPT0gcF9uZC0+bV9wX3BhcmVudCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX2dyYW5kcGFyZW50ID09IHBfcGFyZW50LT5tX3BfcGFyZW50KTsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGJhc2VfdHlwZTo6YXNzZXJ0X25vZGVfY29uc2lzdGVudChwX2dyYW5kcGFyZW50KTspCisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfcGFyZW50LT5tX3BfbGVmdCA9PSBwX25kICYmIAorCQkgICAgICAgIHBfZ3JhbmRwYXJlbnQtPm1fcF9yaWdodCA9PSBwX3BhcmVudCk7CisKKyAgc3BsYXlfenpfc3RhcnQocF9uZCwgcF9wYXJlbnQsIHBfZ3JhbmRwYXJlbnQpOworCisgIG5vZGVfcG9pbnRlciBwX2IgPSBwX25kLT5tX3BfcmlnaHQ7CisgIG5vZGVfcG9pbnRlciBwX2MgPSBwX25kLT5tX3BfbGVmdDsKKworICBwX25kLT5tX3BfcmlnaHQgPSBwX3BhcmVudDsKKyAgcF9wYXJlbnQtPm1fcF9wYXJlbnQgPSBwX25kOworCisgIHBfbmQtPm1fcF9sZWZ0ID0gcF9ncmFuZHBhcmVudDsKKyAgcF9ncmFuZHBhcmVudC0+bV9wX3BhcmVudCA9IHBfbmQ7CisKKyAgcF9wYXJlbnQtPm1fcF9sZWZ0ID0gcF9iOworICBpZiAocF9iICE9IE5VTEwpCisgICAgcF9iLT5tX3BfcGFyZW50ID0gcF9wYXJlbnQ7CisKKyAgcF9ncmFuZHBhcmVudC0+bV9wX3JpZ2h0ID0gcF9jOworICBpZiAocF9jICE9IE5VTEwpCisgICAgcF9jLT5tX3BfcGFyZW50ID0gcF9ncmFuZHBhcmVudDsKKworICBzcGxheV96el9lbmQocF9uZCwgcF9wYXJlbnQsIHBfZ3JhbmRwYXJlbnQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3NwbGF5X3ppZ196YWdfcmlnaHQobm9kZV9wb2ludGVyIHBfbmQsIG5vZGVfcG9pbnRlciBwX3BhcmVudCwgCisJCSAgICBub2RlX3BvaW50ZXIgcF9ncmFuZHBhcmVudCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfcGFyZW50ID09IHBfbmQtPm1fcF9wYXJlbnQpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9ncmFuZHBhcmVudCA9PSBwX3BhcmVudC0+bV9wX3BhcmVudCk7CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShiYXNlX3R5cGU6OmFzc2VydF9ub2RlX2NvbnNpc3RlbnQocF9ncmFuZHBhcmVudCk7KQorCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3BhcmVudC0+bV9wX3JpZ2h0ID09IHBfbmQgJiYgCisJICAJICAgICAgICBwX2dyYW5kcGFyZW50LT5tX3BfbGVmdCA9PSBwX3BhcmVudCk7CisKKyAgc3BsYXlfenpfc3RhcnQocF9uZCwgcF9wYXJlbnQsIHBfZ3JhbmRwYXJlbnQpOworCisgIG5vZGVfcG9pbnRlciBwX2IgPSBwX25kLT5tX3BfbGVmdDsKKyAgbm9kZV9wb2ludGVyIHBfYyA9IHBfbmQtPm1fcF9yaWdodDsKKworICBwX25kLT5tX3BfbGVmdCA9IHBfcGFyZW50OworICBwX3BhcmVudC0+bV9wX3BhcmVudCA9IHBfbmQ7CisKKyAgcF9uZC0+bV9wX3JpZ2h0ID0gcF9ncmFuZHBhcmVudDsKKyAgcF9ncmFuZHBhcmVudC0+bV9wX3BhcmVudCA9IHBfbmQ7CisKKyAgcF9wYXJlbnQtPm1fcF9yaWdodCA9IHBfYjsKKyAgaWYgKHBfYiAhPSBOVUxMKQorICAgIHBfYi0+bV9wX3BhcmVudCA9IHBfcGFyZW50OworCisgIHBfZ3JhbmRwYXJlbnQtPm1fcF9sZWZ0ID0gcF9jOworICBpZiAocF9jICE9IE5VTEwpCisgICAgcF9jLT5tX3BfcGFyZW50ID0gcF9ncmFuZHBhcmVudDsKKworICBzcGxheV96el9lbmQocF9uZCwgcF9wYXJlbnQsIHBfZ3JhbmRwYXJlbnQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3NwbGF5X3ppZ196aWdfbGVmdChub2RlX3BvaW50ZXIgcF9uZCwgbm9kZV9wb2ludGVyIHBfcGFyZW50LCAKKwkJICAgbm9kZV9wb2ludGVyIHBfZ3JhbmRwYXJlbnQpCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3BhcmVudCA9PSBwX25kLT5tX3BfcGFyZW50KTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfZ3JhbmRwYXJlbnQgPT0gcF9wYXJlbnQtPm1fcF9wYXJlbnQpOworCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYmFzZV90eXBlOjphc3NlcnRfbm9kZV9jb25zaXN0ZW50KHBfZ3JhbmRwYXJlbnQpOykKKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9wYXJlbnQtPm1fcF9sZWZ0ID09IHBfbmQgJiYgCisJCSAgICAgcF9uZC0+bV9wX3BhcmVudC0+bV9wX3BhcmVudC0+bV9wX2xlZnQgPT0gcF9uZC0+bV9wX3BhcmVudCk7CisKKyAgc3BsYXlfenpfc3RhcnQocF9uZCwgcF9wYXJlbnQsIHBfZ3JhbmRwYXJlbnQpOworCisgIG5vZGVfcG9pbnRlciBwX2IgPSBwX25kLT5tX3BfcmlnaHQ7CisgIG5vZGVfcG9pbnRlciBwX2MgPSBwX3BhcmVudC0+bV9wX3JpZ2h0OworCisgIHBfbmQtPm1fcF9yaWdodCA9IHBfcGFyZW50OworICBwX3BhcmVudC0+bV9wX3BhcmVudCA9IHBfbmQ7CisKKyAgcF9wYXJlbnQtPm1fcF9yaWdodCA9IHBfZ3JhbmRwYXJlbnQ7CisgIHBfZ3JhbmRwYXJlbnQtPm1fcF9wYXJlbnQgPSBwX3BhcmVudDsKKworICBwX3BhcmVudC0+bV9wX2xlZnQgPSBwX2I7CisgIGlmIChwX2IgIT0gTlVMTCkKKyAgICBwX2ItPm1fcF9wYXJlbnQgPSBwX3BhcmVudDsKKworICBwX2dyYW5kcGFyZW50LT5tX3BfbGVmdCA9IHBfYzsKKyAgaWYgKHBfYyAhPSBOVUxMKQorICAgIHBfYy0+bV9wX3BhcmVudCA9IHBfZ3JhbmRwYXJlbnQ7CisKKyAgc3BsYXlfenpfZW5kKHBfbmQsIHBfcGFyZW50LCBwX2dyYW5kcGFyZW50KTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitzcGxheV96aWdfemlnX3JpZ2h0KG5vZGVfcG9pbnRlciBwX25kLCBub2RlX3BvaW50ZXIgcF9wYXJlbnQsIAorCQkgICAgbm9kZV9wb2ludGVyIHBfZ3JhbmRwYXJlbnQpCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3BhcmVudCA9PSBwX25kLT5tX3BfcGFyZW50KTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfZ3JhbmRwYXJlbnQgPT0gcF9wYXJlbnQtPm1fcF9wYXJlbnQpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGJhc2VfdHlwZTo6YXNzZXJ0X25vZGVfY29uc2lzdGVudChwX2dyYW5kcGFyZW50KTspCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3BhcmVudC0+bV9wX3JpZ2h0ID09IHBfbmQgJiYgCisJICAgICAgICAgIHBfbmQtPm1fcF9wYXJlbnQtPm1fcF9wYXJlbnQtPm1fcF9yaWdodCA9PSBwX25kLT5tX3BfcGFyZW50KTsKKworICBzcGxheV96el9zdGFydChwX25kLCBwX3BhcmVudCwgcF9ncmFuZHBhcmVudCk7CisKKyAgbm9kZV9wb2ludGVyIHBfYiA9IHBfbmQtPm1fcF9sZWZ0OworICBub2RlX3BvaW50ZXIgcF9jID0gcF9wYXJlbnQtPm1fcF9sZWZ0OworCisgIHBfbmQtPm1fcF9sZWZ0ID0gcF9wYXJlbnQ7CisgIHBfcGFyZW50LT5tX3BfcGFyZW50ID0gcF9uZDsKKworICBwX3BhcmVudC0+bV9wX2xlZnQgPSBwX2dyYW5kcGFyZW50OworICBwX2dyYW5kcGFyZW50LT5tX3BfcGFyZW50ID0gcF9wYXJlbnQ7CisKKyAgcF9wYXJlbnQtPm1fcF9yaWdodCA9IHBfYjsKKyAgaWYgKHBfYiAhPSBOVUxMKQorICAgIHBfYi0+bV9wX3BhcmVudCA9IHBfcGFyZW50OworCisgIHBfZ3JhbmRwYXJlbnQtPm1fcF9yaWdodCA9IHBfYzsKKyAgaWYgKHBfYyAhPSBOVUxMKQorICAgIHBfYy0+bV9wX3BhcmVudCA9IHBfZ3JhbmRwYXJlbnQ7CisKKyAgYmFzZV90eXBlOjp1cGRhdGVfdG9fdG9wKHBfZ3JhbmRwYXJlbnQsIChub2RlX3VwZGF0ZSogKXRoaXMpOworICBzcGxheV96el9lbmQocF9uZCwgcF9wYXJlbnQsIHBfZ3JhbmRwYXJlbnQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3NwbGF5X3p6X3N0YXJ0KG5vZGVfcG9pbnRlciBwX25kLAorI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisJICAgICAgIG5vZGVfcG9pbnRlciBwX3BhcmVudCwKKyNlbHNlIAorCSAgICAgICBub2RlX3BvaW50ZXIgLypwX3BhcmVudCovLAorI2VuZGlmCisJICAgICAgIG5vZGVfcG9pbnRlciBwX2dyYW5kcGFyZW50KQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZCAhPSBOVUxMKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfcGFyZW50ICE9IE5VTEwpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9ncmFuZHBhcmVudCAhPSBOVUxMKTsKKworICBjb25zdCBib29sIGdyYW5kcGFyZW50X2hlYWQgPSBwX2dyYW5kcGFyZW50LT5tX3BfcGFyZW50ID09IGJhc2VfdHlwZTo6bV9wX2hlYWQ7CisKKyAgaWYgKGdyYW5kcGFyZW50X2hlYWQpCisgICAgeworICAgICAgYmFzZV90eXBlOjptX3BfaGVhZC0+bV9wX3BhcmVudCA9IGJhc2VfdHlwZTo6bV9wX2hlYWQtPm1fcF9wYXJlbnQ7CisgICAgICBwX25kLT5tX3BfcGFyZW50ID0gYmFzZV90eXBlOjptX3BfaGVhZDsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgbm9kZV9wb2ludGVyIHBfZ3JlYXRncmFuZHBhcmVudCA9IHBfZ3JhbmRwYXJlbnQtPm1fcF9wYXJlbnQ7CisKKyAgcF9uZC0+bV9wX3BhcmVudCA9IHBfZ3JlYXRncmFuZHBhcmVudDsKKworICBpZiAocF9ncmFuZHBhcmVudCA9PSBwX2dyZWF0Z3JhbmRwYXJlbnQtPm1fcF9sZWZ0KQorICAgIHBfZ3JlYXRncmFuZHBhcmVudC0+bV9wX2xlZnQgPSBwX25kOworICBlbHNlCisgICAgcF9ncmVhdGdyYW5kcGFyZW50LT5tX3BfcmlnaHQgPSBwX25kOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3NwbGF5X3p6X2VuZChub2RlX3BvaW50ZXIgcF9uZCwgbm9kZV9wb2ludGVyIHBfcGFyZW50LCAKKwkgICAgIG5vZGVfcG9pbnRlciBwX2dyYW5kcGFyZW50KQoreworICBpZiAocF9uZC0+bV9wX3BhcmVudCA9PSBiYXNlX3R5cGU6Om1fcF9oZWFkKQorICAgIGJhc2VfdHlwZTo6bV9wX2hlYWQtPm1fcF9wYXJlbnQgPSBwX25kOworCisgIGFwcGx5X3VwZGF0ZShwX2dyYW5kcGFyZW50LCAobm9kZV91cGRhdGUqICl0aGlzKTsKKyAgYXBwbHlfdXBkYXRlKHBfcGFyZW50LCAobm9kZV91cGRhdGUqICl0aGlzKTsKKyAgYXBwbHlfdXBkYXRlKHBfbmQsIChub2RlX3VwZGF0ZSogKXRoaXMpOworCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYmFzZV90eXBlOjphc3NlcnRfbm9kZV9jb25zaXN0ZW50KHBfbmQpOykKK30KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL3NwbGF5X3RyZWVfLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9zcGxheV90cmVlXy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc0YzVjOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9zcGxheV90cmVlXy5ocHAKQEAgLTAsMCArMSwyOTggQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHNwbGF5X3RyZWVfLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIHNwbGF5X3RyZWVfLgorICovCisvKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiB1c2VzIGFuIGlkZWEgZnJvbSB0aGUgU0dJIFNUTCAodXNpbmcgYSBAYSBoZWFkZXIgbm9kZQorICogICAgd2hpY2ggaXMgbmVlZGVkIGZvciBlZmZpY2llbnQgaXRlcmF0aW9uKS4gRm9sbG93aW5nIGlzIHRoZSBTR0kgU1RMCisgKiAgICBjb3B5cmlnaHQuCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gICAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICAgIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqLworCisjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorI2lmbmRlZiBQQl9EU19CSU5fU0VBUkNIX1RSRUVfSFBQX19EQVRBX1RSVUVfSU5ESUNBVE9SCisjZGVmaW5lIFBCX0RTX0JJTl9TRUFSQ0hfVFJFRV9IUFBfX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vYmluX3NlYXJjaF90cmVlXy5ocHA+CisjZW5kaWYgCisjZW5kaWYgCisKKyNpZmRlZiBQQl9EU19EQVRBX0ZBTFNFX0lORElDQVRPUgorI2lmbmRlZiBQQl9EU19CSU5fU0VBUkNIX1RSRUVfSFBQX19EQVRBX0ZBTFNFX0lORElDQVRPUgorI2RlZmluZSBQQl9EU19CSU5fU0VBUkNIX1RSRUVfSFBQX19EQVRBX0ZBTFNFX0lORElDQVRPUgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9iaW5fc2VhcmNoX3RyZWVfLmhwcD4KKyNlbmRpZiAKKyNlbmRpZiAKKworI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQyBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBNYXBwZWQsIHR5cGVuYW1lIENtcF9GbiwgXAorCSAgICAgdHlwZW5hbWUgTm9kZV9BbmRfSXRfVHJhaXRzLCB0eXBlbmFtZSBBbGxvY2F0b3I+CisKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisjZGVmaW5lIFBCX0RTX0NMQVNTX05BTUUgc3BsYXlfdHJlZV9kYXRhXworI2VuZGlmIAorCisjaWZkZWYgUEJfRFNfREFUQV9GQUxTRV9JTkRJQ0FUT1IKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfTkFNRSBzcGxheV90cmVlX25vX2RhdGFfCisjZW5kaWYgCisKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisjZGVmaW5lIFBCX0RTX0JBU0VfQ0xBU1NfTkFNRSBiaW5fc2VhcmNoX3RyZWVfZGF0YV8KKyNlbmRpZiAKKworI2lmZGVmIFBCX0RTX0RBVEFfRkFMU0VfSU5ESUNBVE9SCisjZGVmaW5lIFBCX0RTX0JBU0VfQ0xBU1NfTkFNRSBiaW5fc2VhcmNoX3RyZWVfbm9fZGF0YV8KKyNlbmRpZiAKKworI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBcCisgICAgUEJfRFNfQ0xBU1NfTkFNRTxLZXksIE1hcHBlZCwgQ21wX0ZuLCBOb2RlX0FuZF9JdF9UcmFpdHMsIEFsbG9jYXRvcj4KKworI2RlZmluZSBQQl9EU19CQVNFX0NfREVDIFwKKyAgICBQQl9EU19CQVNFX0NMQVNTX05BTUU8S2V5LCBNYXBwZWQsIENtcF9GbiwgTm9kZV9BbmRfSXRfVHJhaXRzLCBBbGxvY2F0b3I+CisKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisjZGVmaW5lIFBCX0RTX1YyRihYKSAoWCkuZmlyc3QKKyNkZWZpbmUgUEJfRFNfVjJTKFgpIChYKS5zZWNvbmQKKyNkZWZpbmUgUEJfRFNfRVAyVlAoWCkmICgoWCktPm1fdmFsdWUpCisjZW5kaWYgCisKKyNpZmRlZiBQQl9EU19EQVRBX0ZBTFNFX0lORElDQVRPUgorI2RlZmluZSBQQl9EU19WMkYoWCkgKFgpCisjZGVmaW5lIFBCX0RTX1YyUyhYKSBNYXBwZWRfRGF0YSgpCisjZGVmaW5lIFBCX0RTX0VQMlZQKFgpJiAoKFgpLT5tX3ZhbHVlLmZpcnN0KQorI2VuZGlmIAorCisgICAgLy8gJHAxNHkgN3IzMyA3NDgxLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0eXBlbmFtZSBDbXBfRm4sCisJICAgICB0eXBlbmFtZSBOb2RlX0FuZF9JdF9UcmFpdHMsIHR5cGVuYW1lIEFsbG9jYXRvcj4KKyAgICBjbGFzcyBQQl9EU19DTEFTU19OQU1FIDogcHVibGljIFBCX0RTX0JBU0VfQ19ERUMKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgUEJfRFNfQkFTRV9DX0RFQyBiYXNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6bm9kZV9wb2ludGVyIG5vZGVfcG9pbnRlcjsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgQWxsb2NhdG9yIGFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnNpemVfdHlwZSBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgQ21wX0ZuIGNtcF9mbjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjprZXlfdHlwZSBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjprZXlfcG9pbnRlciBrZXlfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9rZXlfcG9pbnRlciBjb25zdF9rZXlfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjprZXlfcmVmZXJlbmNlIGtleV9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3Rfa2V5X3JlZmVyZW5jZSBjb25zdF9rZXlfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Om1hcHBlZF90eXBlIG1hcHBlZF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Om1hcHBlZF9wb2ludGVyIG1hcHBlZF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X21hcHBlZF9wb2ludGVyIGNvbnN0X21hcHBlZF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Om1hcHBlZF9yZWZlcmVuY2UgbWFwcGVkX3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9tYXBwZWRfcmVmZXJlbmNlIGNvbnN0X21hcHBlZF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OnBvaW50X2l0ZXJhdG9yIHBvaW50X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X3BvaW50X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6bm9kZV91cGRhdGUgbm9kZV91cGRhdGU7CisKKyAgICAgIFBCX0RTX0NMQVNTX05BTUUoKTsKKworICAgICAgUEJfRFNfQ0xBU1NfTkFNRShjb25zdCBDbXBfRm4mKTsKKworICAgICAgUEJfRFNfQ0xBU1NfTkFNRShjb25zdCBDbXBfRm4mLCBjb25zdCBub2RlX3VwZGF0ZSYpOworCisgICAgICBQQl9EU19DTEFTU19OQU1FKGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJik7CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXQ+CisgICAgICB2b2lkCisgICAgICBjb3B5X2Zyb21fcmFuZ2UoSXQsIEl0KTsKKworICAgICAgdm9pZAorICAgICAgaW5pdGlhbGl6ZSgpOworCisgICAgICBpbmxpbmUgc3RkOjpwYWlyPHBvaW50X2l0ZXJhdG9yLCBib29sPgorICAgICAgaW5zZXJ0KGNvbnN0X3JlZmVyZW5jZSByX3ZhbHVlKTsKKworICAgICAgaW5saW5lIG1hcHBlZF9yZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yW10oY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSkKKyAgICAgIHsKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisJX0dMSUJDWFhfREVCVUdfT05MWShQQl9EU19DTEFTU19DX0RFQzo6YXNzZXJ0X3ZhbGlkKCk7KQorCXN0ZDo6cGFpcjxwb2ludF9pdGVyYXRvciwgYm9vbD4gaW5zX3BhaXIgPQorCSAgaW5zZXJ0X2xlYWZfaW1wKHZhbHVlX3R5cGUocl9rZXksIG1hcHBlZF90eXBlKCkpKTsKKworCWluc19wYWlyLmZpcnN0Lm1fcF9uZC0+bV9zcGVjaWFsID0gZmFsc2U7CisJX0dMSUJDWFhfREVCVUdfT05MWShiYXNlX3R5cGU6OmFzc2VydF92YWxpZCgpKTsKKwlzcGxheShpbnNfcGFpci5maXJzdC5tX3BfbmQpOworCV9HTElCQ1hYX0RFQlVHX09OTFkoUEJfRFNfQ0xBU1NfQ19ERUM6OmFzc2VydF92YWxpZCgpOykKKwlyZXR1cm4gaW5zX3BhaXIuZmlyc3QubV9wX25kLT5tX3ZhbHVlLnNlY29uZDsKKyNlbHNlIAorCWluc2VydChyX2tleSk7CisJcmV0dXJuIGJhc2VfdHlwZTo6c19udWxsX21hcHBlZDsKKyNlbmRpZgorICAgICAgfQorCisgICAgICBpbmxpbmUgcG9pbnRfaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Rfa2V5X3JlZmVyZW5jZSk7CisKKyAgICAgIGlubGluZSBjb25zdF9wb2ludF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdF9rZXlfcmVmZXJlbmNlKSBjb25zdDsKKworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIGVyYXNlKGNvbnN0X2tleV9yZWZlcmVuY2UpOworCisgICAgICBpbmxpbmUgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIGl0KTsKKworICAgICAgaW5saW5lIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIGVyYXNlKHJldmVyc2VfaXRlcmF0b3IpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkPgorICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgZXJhc2VfaWYoUHJlZCk7CisKKyAgICAgIHZvaWQKKyAgICAgIGpvaW4oUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgdm9pZAorICAgICAgc3BsaXQoY29uc3Rfa2V5X3JlZmVyZW5jZSwgUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgIHByaXZhdGU6CisgICAgICBpbmxpbmUgc3RkOjpwYWlyPHBvaW50X2l0ZXJhdG9yLCBib29sPgorICAgICAgaW5zZXJ0X2xlYWZfaW1wKGNvbnN0X3JlZmVyZW5jZSk7CisKKyAgICAgIGlubGluZSBub2RlX3BvaW50ZXIKKyAgICAgIGZpbmRfaW1wKGNvbnN0X2tleV9yZWZlcmVuY2UpOworCisgICAgICBpbmxpbmUgY29uc3Qgbm9kZV9wb2ludGVyCisgICAgICBmaW5kX2ltcChjb25zdF9rZXlfcmVmZXJlbmNlKSBjb25zdDsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfdmFsaWQoKSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X3NwZWNpYWxfaW1wKGNvbnN0IG5vZGVfcG9pbnRlcikgY29uc3Q7CisjZW5kaWYgCisKKyAgICAgIHZvaWQKKyAgICAgIHNwbGF5KG5vZGVfcG9pbnRlcik7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBzcGxheV96aWdfemFnX2xlZnQobm9kZV9wb2ludGVyLCBub2RlX3BvaW50ZXIsIG5vZGVfcG9pbnRlcik7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBzcGxheV96aWdfemFnX3JpZ2h0KG5vZGVfcG9pbnRlciwgbm9kZV9wb2ludGVyLCBub2RlX3BvaW50ZXIpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgc3BsYXlfemlnX3ppZ19sZWZ0KG5vZGVfcG9pbnRlciwgbm9kZV9wb2ludGVyLCBub2RlX3BvaW50ZXIpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgc3BsYXlfemlnX3ppZ19yaWdodChub2RlX3BvaW50ZXIsIG5vZGVfcG9pbnRlciwgbm9kZV9wb2ludGVyKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIHNwbGF5X3p6X3N0YXJ0KG5vZGVfcG9pbnRlciwgbm9kZV9wb2ludGVyLCBub2RlX3BvaW50ZXIpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgc3BsYXlfenpfZW5kKG5vZGVfcG9pbnRlciwgbm9kZV9wb2ludGVyLCBub2RlX3BvaW50ZXIpOworCisgICAgICBpbmxpbmUgbm9kZV9wb2ludGVyCisgICAgICBsZWZ0bW9zdChub2RlX3BvaW50ZXIpOworCisgICAgICB2b2lkCisgICAgICBlcmFzZV9ub2RlKG5vZGVfcG9pbnRlcik7CisgICAgfTsKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9pbnNlcnRfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9zcGxheV9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL2VyYXNlX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vZmluZF9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL2RlYnVnX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcD4KKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19OQU1FCisjdW5kZWYgUEJfRFNfQkFTRV9DTEFTU19OQU1FCisjdW5kZWYgUEJfRFNfQkFTRV9DX0RFQworI3VuZGVmIFBCX0RTX1YyRgorI3VuZGVmIFBCX0RTX0VQMlZQCisjdW5kZWYgUEJfRFNfVjJTCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9zcGxpdF9qb2luX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMGIyY2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDExMiBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgc3BsaXRfam9pbl9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIHNwbGF5X3RyZWVfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogoram9pbihQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpOykKKyAgaWYgKGJhc2VfdHlwZTo6am9pbl9wcmVwKG90aGVyKSA9PSBmYWxzZSkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKCk7KQorICAgICAgcmV0dXJuOworICAgIH0KKworICBub2RlX3BvaW50ZXIgcF90YXJnZXRfciA9IG90aGVyLmxlZnRtb3N0KG90aGVyLm1fcF9oZWFkKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfdGFyZ2V0X3IgIT0gTlVMTCk7CisgIG90aGVyLnNwbGF5KHBfdGFyZ2V0X3IpOworCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3RhcmdldF9yID09IG90aGVyLm1fcF9oZWFkLT5tX3BfcGFyZW50KTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfdGFyZ2V0X3ItPm1fcF9sZWZ0ID09IE5VTEwpOworCisgIHBfdGFyZ2V0X3ItPm1fcF9sZWZ0ID0gYmFzZV90eXBlOjptX3BfaGVhZC0+bV9wX3BhcmVudDsKKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF90YXJnZXRfci0+bV9wX2xlZnQgIT0gTlVMTCk7CisgIHBfdGFyZ2V0X3ItPm1fcF9sZWZ0LT5tX3BfcGFyZW50ID0gcF90YXJnZXRfcjsKKworICBiYXNlX3R5cGU6Om1fcF9oZWFkLT5tX3BfcGFyZW50ID0gcF90YXJnZXRfcjsKKyAgcF90YXJnZXRfci0+bV9wX3BhcmVudCA9IGJhc2VfdHlwZTo6bV9wX2hlYWQ7CisgIGFwcGx5X3VwZGF0ZShwX3RhcmdldF9yLCAobm9kZV91cGRhdGUqICl0aGlzKTsKKworICBiYXNlX3R5cGU6OmpvaW5fZmluaXNoKG90aGVyKTsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitzcGxpdChjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5LCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCkpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpKTsKKworICBpZiAoYmFzZV90eXBlOjpzcGxpdF9wcmVwKHJfa2V5LCBvdGhlcikgPT0gZmFsc2UpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKG90aGVyLmFzc2VydF92YWxpZCgpKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgbm9kZV9wb2ludGVyIHBfdXBwZXJfYm91bmQgPSB1cHBlcl9ib3VuZChyX2tleSkubV9wX25kOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF91cHBlcl9ib3VuZCAhPSBOVUxMKTsKKworICBzcGxheShwX3VwcGVyX2JvdW5kKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfdXBwZXJfYm91bmQtPm1fcF9wYXJlbnQgPT0gdGhpcy0+bV9wX2hlYWQpOworCisgIG5vZGVfcG9pbnRlciBwX25ld19yb290ID0gcF91cHBlcl9ib3VuZC0+bV9wX2xlZnQ7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25ld19yb290ICE9IE5VTEwpOworCisgIGJhc2VfdHlwZTo6bV9wX2hlYWQtPm1fcF9wYXJlbnQgPSBwX25ld19yb290OworICBwX25ld19yb290LT5tX3BfcGFyZW50ID0gYmFzZV90eXBlOjptX3BfaGVhZDsKKyAgb3RoZXIubV9wX2hlYWQtPm1fcF9wYXJlbnQgPSBwX3VwcGVyX2JvdW5kOworICBwX3VwcGVyX2JvdW5kLT5tX3BfcGFyZW50ID0gb3RoZXIubV9wX2hlYWQ7CisgIHBfdXBwZXJfYm91bmQtPm1fcF9sZWZ0ID0gTlVMTDsKKyAgYXBwbHlfdXBkYXRlKHBfdXBwZXJfYm91bmQsIChub2RlX3VwZGF0ZSogKXRoaXMpOworICBiYXNlX3R5cGU6OnNwbGl0X2ZpbmlzaChvdGhlcik7CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKSk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKCkpOworfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vdHJhaXRzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy90cmFpdHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZWRjMzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vdHJhaXRzLmhwcApAQCAtMCwwICsxLDExMyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgdHJhaXRzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gZm9yIHNwbGF5X3RyZWVfLgorICovCisKKyNpZm5kZWYgUEJfRFNfU1BMQVlfVFJFRV9OT0RFX0FORF9JVF9UUkFJVFNfSFBQCisjZGVmaW5lIFBCX0RTX1NQTEFZX1RSRUVfTk9ERV9BTkRfSVRfVFJBSVRTX0hQUAorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9ub2RlLmhwcD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksCisJICAgICB0eXBlbmFtZSBNYXBwZWQsCisJICAgICBjbGFzcyBDbXBfRm4sCisJICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25zdF9Ob2RlX0l0ZXJhdG9yLAorCQkgICAgICBjbGFzcyBOb2RlX0l0ZXJhdG9yLAorCQkgICAgICBjbGFzcyBDbXBfRm5fLAorCQkgICAgICBjbGFzcyBBbGxvY2F0b3JfPgorICAgIGNsYXNzIE5vZGVfVXBkYXRlLAorCSAgICAgY2xhc3MgQWxsb2NhdG9yPgorICAgIHN0cnVjdCB0cmVlX3RyYWl0czwKKyAgICAgIEtleSwKKyAgICAgIE1hcHBlZCwKKyAgICAgIENtcF9GbiwKKyAgICAgIE5vZGVfVXBkYXRlLAorICAgICAgc3BsYXlfdHJlZV90YWcsCisgICAgICBBbGxvY2F0b3I+IDogcHVibGljIGJpbl9zZWFyY2hfdHJlZV90cmFpdHM8CisgICAgICBLZXksCisgICAgICBNYXBwZWQsCisgICAgICBDbXBfRm4sCisgICAgICBOb2RlX1VwZGF0ZSwKKyAgICAgIHNwbGF5X3RyZWVfbm9kZV88CisgICAgICB0eXBlbmFtZSB0eXBlc190cmFpdHM8CisgICAgICBLZXksCisgICAgICBNYXBwZWQsCisgICAgICBBbGxvY2F0b3IsCisgICAgICBmYWxzZT46OnZhbHVlX3R5cGUsCisgICAgICB0eXBlbmFtZSB0cmVlX25vZGVfbWV0YWRhdGFfc2VsZWN0b3I8CisgICAgICBLZXksCisgICAgICBNYXBwZWQsCisgICAgICBDbXBfRm4sCisgICAgICBOb2RlX1VwZGF0ZSwKKyAgICAgIEFsbG9jYXRvcj46OnR5cGUsCisgICAgICBBbGxvY2F0b3I+LAorICAgICAgQWxsb2NhdG9yPgorICAgIHsgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwKKwkgICAgIGNsYXNzIENtcF9GbiwKKwkgICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnN0X05vZGVfSXRlcmF0b3IsCisJCSAgICAgIGNsYXNzIE5vZGVfSXRlcmF0b3IsCisJCSAgICAgIGNsYXNzIENtcF9Gbl8sCisJCSAgICAgIGNsYXNzIEFsbG9jYXRvcl8+CisgICAgICAgICAgICAgY2xhc3MgTm9kZV9VcGRhdGUsCisJICAgICBjbGFzcyBBbGxvY2F0b3I+CisgICAgc3RydWN0IHRyZWVfdHJhaXRzPEtleSwgbnVsbF9tYXBwZWRfdHlwZSwgQ21wX0ZuLCBOb2RlX1VwZGF0ZSwKKwkJICAgICAgIHNwbGF5X3RyZWVfdGFnLCBBbGxvY2F0b3I+IAorICAgIDogcHVibGljIGJpbl9zZWFyY2hfdHJlZV90cmFpdHM8S2V5LCBudWxsX21hcHBlZF90eXBlLCBDbXBfRm4sCisJCQkJICAgIE5vZGVfVXBkYXRlLCAKKwkgICBzcGxheV90cmVlX25vZGVfPHR5cGVuYW1lIHR5cGVzX3RyYWl0czxLZXksIG51bGxfbWFwcGVkX3R5cGUsIEFsbG9jYXRvciwgZmFsc2U+Ojp2YWx1ZV90eXBlLAorCQkJICAgIHR5cGVuYW1lIHRyZWVfbm9kZV9tZXRhZGF0YV9zZWxlY3RvcjwKKyAgICAgIEtleSwKKyAgICAgIG51bGxfbWFwcGVkX3R5cGUsCisgICAgICBDbXBfRm4sCisgICAgICBOb2RlX1VwZGF0ZSwKKyAgICAgIEFsbG9jYXRvcj46OnR5cGUsCisgICAgICBBbGxvY2F0b3I+LAorICAgICAgQWxsb2NhdG9yPgorICAgIHsgfTsKKworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmIC8vICNpZm5kZWYgUEJfRFNfU1BMQVlfVFJFRV9OT0RFX0FORF9JVF9UUkFJVFNfSFBQCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvc3RhbmRhcmRfcG9saWNpZXMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3N0YW5kYXJkX3BvbGljaWVzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmJmYmIwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3N0YW5kYXJkX3BvbGljaWVzLmhwcApAQCAtMCwwICsxLDEzNiBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgc3RhbmRhcmRfcG9saWNpZXMuaHBwCisgKiBDb250YWlucyBzdGFuZGFyZCBwb2xpY2llcyBmb3IgY29udGFpbmVycy4KKyAqLworCisjaWZuZGVmIFBCX0RTX1NUQU5EQVJEX1BPTElDSUVTX0hQUAorI2RlZmluZSBQQl9EU19TVEFOREFSRF9QT0xJQ0lFU19IUFAKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxleHQvcGJfZHMvaGFzaF9wb2xpY3kuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9saXN0X3VwZGF0ZV9wb2xpY3kuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iYXNpY190cmVlX3BvbGljeS9udWxsX25vZGVfbWV0YWRhdGEuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy90cmllX3BvbGljeS5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL3RhZ19hbmRfdHJhaXQuaHBwPgorI2luY2x1ZGUgPHRyMS9mdW5jdGlvbmFsPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXk+CisgICAgc3RydWN0IGRlZmF1bHRfaGFzaF9mbgorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjp0cjE6Omhhc2g8S2V5PiB0eXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXk+CisgICAgc3RydWN0IGRlZmF1bHRfZXFfZm4KKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6ZXF1YWxfdG88S2V5PiB0eXBlOworICAgIH07CisKKyAgICBlbnVtCisgICAgICB7CisJZGVmYXVsdF9zdG9yZV9oYXNoID0gZmFsc2UKKyAgICAgIH07CisKKyAgICBzdHJ1Y3QgZGVmYXVsdF9jb21iX2hhc2hfZm4KKyAgICB7CisgICAgICB0eXBlZGVmIF9fZ251X3BiZHM6OmRpcmVjdF9tYXNrX3JhbmdlX2hhc2hpbmc8PiB0eXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb21iX0hhc2hfRm4+CisgICAgc3RydWN0IGRlZmF1bHRfcmVzaXplX3BvbGljeQorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb21iX0hhc2hfRm46OnNpemVfdHlwZSBzaXplX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgX19nbnVfcGJkczo6ZGlyZWN0X21hc2tfcmFuZ2VfaGFzaGluZzxzaXplX3R5cGU+IGRlZmF1bHRfZm47CisgICAgICB0eXBlZGVmIGlzX3NhbWU8ZGVmYXVsdF9mbiwgQ29tYl9IYXNoX0ZuPiBzYW1lX3R5cGU7CisgICAgICB0eXBlZGVmIF9fZ251X3BiZHM6Omhhc2hfZXhwb25lbnRpYWxfc2l6ZV9wb2xpY3k8c2l6ZV90eXBlPiBpZnRydWU7CisgICAgICB0eXBlZGVmIF9fZ251X3BiZHM6Omhhc2hfcHJpbWVfc2l6ZV9wb2xpY3kgaWZmYWxzZTsKKyAgICAgIHR5cGVkZWYgX19jb25kaXRpb25hbF90eXBlPHNhbWVfdHlwZTo6dmFsdWUsIGlmdHJ1ZSwgaWZmYWxzZT4gY29uZF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjb25kX3R5cGU6Ol9fdHlwZSBzaXplX3BvbGljeV90eXBlOworCisgICAgICB0eXBlZGVmIF9fZ251X3BiZHM6Omhhc2hfbG9hZF9jaGVja19yZXNpemVfdHJpZ2dlcjxmYWxzZSwgc2l6ZV90eXBlPiB0cmlnZ2VyOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfX2dudV9wYmRzOjpoYXNoX3N0YW5kYXJkX3Jlc2l6ZV9wb2xpY3k8c2l6ZV9wb2xpY3lfdHlwZSwgdHJpZ2dlciwgZmFsc2UsIHNpemVfdHlwZT4gdHlwZTsKKyAgICB9OworCisgICAgc3RydWN0IGRlZmF1bHRfdXBkYXRlX3BvbGljeQorICAgIHsKKyAgICAgIHR5cGVkZWYgX19nbnVfcGJkczo6bW92ZV90b19mcm9udF9sdV9wb2xpY3k8PiB0eXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb21iX1Byb2JlX0ZuPgorICAgIHN0cnVjdCBkZWZhdWx0X3Byb2JlX2ZuCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbWJfUHJvYmVfRm46OnNpemVfdHlwZSBzaXplX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgX19nbnVfcGJkczo6ZGlyZWN0X21hc2tfcmFuZ2VfaGFzaGluZzxzaXplX3R5cGU+IGRlZmF1bHRfZm47CisgICAgICB0eXBlZGVmIGlzX3NhbWU8ZGVmYXVsdF9mbiwgQ29tYl9Qcm9iZV9Gbj4gc2FtZV90eXBlOworICAgICAgdHlwZWRlZiBfX2dudV9wYmRzOjpsaW5lYXJfcHJvYmVfZm48c2l6ZV90eXBlPiBpZnRydWU7CisgICAgICB0eXBlZGVmIF9fZ251X3BiZHM6OnF1YWRyYXRpY19wcm9iZV9mbjxzaXplX3R5cGU+IGlmZmFsc2U7CisgICAgICB0eXBlZGVmIF9fY29uZGl0aW9uYWxfdHlwZTxzYW1lX3R5cGU6OnZhbHVlLCBpZnRydWUsIGlmZmFsc2U+IGNvbmRfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY29uZF90eXBlOjpfX3R5cGUgdHlwZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5PgorICAgIHN0cnVjdCBkZWZhdWx0X3RyaWVfZV9hY2Nlc3NfdHJhaXRzOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhciwgY2xhc3MgQ2hhcl9UcmFpdHM+CisgICAgc3RydWN0IGRlZmF1bHRfdHJpZV9lX2FjY2Vzc190cmFpdHM8c3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgQ2hhcl9UcmFpdHMsIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyLCBDaGFyX1RyYWl0cywgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBzdHJpbmdfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX19nbnVfcGJkczo6c3RyaW5nX3RyaWVfZV9hY2Nlc3NfdHJhaXRzPHN0cmluZ190eXBlPiB0eXBlOworICAgIH07CisKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAvLyAjaWZuZGVmIFBCX0RTX1NUQU5EQVJEX1BPTElDSUVTX0hQUAorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdGhpbl9oZWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC90aGluX2hlYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMmM0NWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdGhpbl9oZWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDEwNiBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGZvciB0aGluX2hlYXBfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NvcHlfZnJvbV9yYW5nZShJdCBmaXJzdF9pdCwgSXQgbGFzdF9pdCkKK3sKKyAgd2hpbGUgKGZpcnN0X2l0ICE9IGxhc3RfaXQpCisgICAgcHVzaCgqKGZpcnN0X2l0KyspKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6Cit0aGluX2hlYXBfKCkgOgorICBtX3BfbWF4KE5VTEwpCit7CisgIGluaXRpYWxpemUoKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6Cit0aGluX2hlYXBfKGNvbnN0IENtcF9GbiYgcl9jbXBfZm4pIDoKKyAgUEJfRFNfQkFTRV9DX0RFQyhyX2NtcF9mbiksCisgIG1fcF9tYXgoTlVMTCkKK3sKKyAgaW5pdGlhbGl6ZSgpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3RoaW5faGVhcF8oY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKSA6CisgIFBCX0RTX0JBU0VfQ19ERUMob3RoZXIpCit7CisgIGluaXRpYWxpemUoKTsKKyAgbV9wX21heCA9IGJhc2VfdHlwZTo6bV9wX3Jvb3Q7CisgIGZvciAobm9kZV9wb2ludGVyIHBfbmQgPSBiYXNlX3R5cGU6Om1fcF9yb290OyBwX25kICE9IE5VTEw7IHBfbmQgPSBwX25kLT5tX3BfbmV4dF9zaWJsaW5nKQorICAgIGlmIChDbXBfRm46Om9wZXJhdG9yKCkobV9wX21heC0+bV92YWx1ZSwgcF9uZC0+bV92YWx1ZSkpCisgICAgICBtX3BfbWF4ID0gcF9uZDsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgYmFzZV90eXBlOjpzd2FwKG90aGVyKTsKKyAgc3RkOjpzd2FwKG1fcF9tYXgsIG90aGVyLm1fcF9tYXgpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK350aGluX2hlYXBfKCkKK3sgfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgoraW5pdGlhbGl6ZSgpCit7IHN0ZDo6ZmlsbChtX2FfYXV4LCBtX2FfYXV4ICsgbWF4X3JhbmssIHN0YXRpY19jYXN0PG5vZGVfcG9pbnRlcj4oTlVMTCkpOyB9CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC90aGluX2hlYXBfL2RlYnVnX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3RoaW5faGVhcF8vZGVidWdfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdhYmUzNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC90aGluX2hlYXBfL2RlYnVnX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTEyIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBkZWJ1Z19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gZm9yIHRoaW5faGVhcF8uCisgKi8KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfdmFsaWQoKSBjb25zdAoreworICBiYXNlX3R5cGU6OmFzc2VydF92YWxpZCgpOworICBhc3NlcnRfbm9kZV9jb25zaXN0ZW50KGJhc2VfdHlwZTo6bV9wX3Jvb3QsIHRydWUpOworICBhc3NlcnRfbWF4KCk7CisgIGFzc2VydF9hdXhfbnVsbCgpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X2F1eF9udWxsKCkgY29uc3QKK3sKKyAgZm9yIChzaXplX3R5cGUgaSA9IDA7IGkgPCBtYXhfcmFuazsgKytpKQorICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX2FfYXV4W2ldID09IE5VTEwpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X21heCgpIGNvbnN0Cit7CisgIGlmIChtX3BfbWF4ID09IE5VTEwpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGJhc2VfdHlwZTo6ZW1wdHkoKSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCghYmFzZV90eXBlOjplbXB0eSgpKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGJhc2VfdHlwZTo6cGFyZW50KG1fcF9tYXgpID09IE5VTEwpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9wX21heC0+bV9wX3ByZXZfb3JfcGFyZW50ID09IE5VTEwpOworICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ID0gYmFzZV90eXBlOjpiZWdpbigpOyBpdCAhPSBiYXNlX3R5cGU6OmVuZCgpOyArK2l0KQorICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCghQ21wX0ZuOjpvcGVyYXRvcigpKG1fcF9tYXgtPm1fdmFsdWUsIGl0Lm1fcF9uZC0+bV92YWx1ZSkpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X25vZGVfY29uc2lzdGVudChjb25zdF9ub2RlX3BvaW50ZXIgcF9uZCwgYm9vbCByb290KSBjb25zdAoreworICBiYXNlX3R5cGU6OmFzc2VydF9ub2RlX2NvbnNpc3RlbnQocF9uZCwgcm9vdCk7CisgIGlmIChwX25kID09IE5VTEwpCisgICAgcmV0dXJuOworCisgIGFzc2VydF9ub2RlX2NvbnNpc3RlbnQocF9uZC0+bV9wX25leHRfc2libGluZywgcm9vdCk7CisgIGFzc2VydF9ub2RlX2NvbnNpc3RlbnQocF9uZC0+bV9wX2xfY2hpbGQsIGZhbHNlKTsKKyAgaWYgKCFyb290KQorICAgIHsKKyAgICAgIGlmIChwX25kLT5tX21ldGFkYXRhID09IDApCisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgPT0gTlVMTCk7CisgICAgICBlbHNlCisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQtPm1fbWV0YWRhdGEgPT0gcF9uZC0+bV9wX25leHRfc2libGluZy0+bV9tZXRhZGF0YSArIDEpOworICAgIH0KKworICBpZiAocF9uZC0+bV9wX2xfY2hpbGQgIT0gTlVMTCkKKyAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV9wX2xfY2hpbGQtPm1fbWV0YWRhdGEgKyAxID09IGJhc2VfdHlwZTo6ZGVncmVlKHBfbmQpKTsKKworICBjb25zdCBib29sIHVubWFya2VkX3ZhbGlkID0ocF9uZC0+bV9wX2xfY2hpbGQgPT0gTlVMTCYmICBwX25kLT5tX21ldGFkYXRhID09IDApIHx8KHBfbmQtPm1fcF9sX2NoaWxkICE9IE5VTEwmJiAgcF9uZC0+bV9tZXRhZGF0YSA9PSBwX25kLT5tX3BfbF9jaGlsZC0+bV9tZXRhZGF0YSArIDEpOworCisgIGNvbnN0IGJvb2wgbWFya2VkX3ZhbGlkID0ocF9uZC0+bV9wX2xfY2hpbGQgPT0gTlVMTCYmICBwX25kLT5tX21ldGFkYXRhID09IDEpIHx8KHBfbmQtPm1fcF9sX2NoaWxkICE9IE5VTEwmJiAgcF9uZC0+bV9tZXRhZGF0YSA9PSBwX25kLT5tX3BfbF9jaGlsZC0+bV9tZXRhZGF0YSArIDIpOworCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCh1bm1hcmtlZF92YWxpZCB8fCBtYXJrZWRfdmFsaWQpOworICBpZiAocm9vdCkKKyAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQodW5tYXJrZWRfdmFsaWQpOworfQorCisjZW5kaWYgCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdGhpbl9oZWFwXy9lcmFzZV9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC90aGluX2hlYXBfL2VyYXNlX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YWZjZDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdGhpbl9oZWFwXy9lcmFzZV9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDI5NiBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZXJhc2VfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGZvciB0aGluX2hlYXBfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citwb3AoKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoIWJhc2VfdHlwZTo6ZW1wdHkoKSk7CisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF9tYXggIT0gTlVMTCk7CisKKyAgbm9kZV9wb2ludGVyIHBfbmQgPSBtX3BfbWF4OworCisgIHJlbW92ZV9tYXhfbm9kZSgpOworCisgIGJhc2VfdHlwZTo6YWN0dWFsX2VyYXNlX25vZGUocF9uZCk7CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JlbW92ZV9tYXhfbm9kZSgpCit7CisgIHRvX2F1eF9leGNlcHRfbWF4KCk7CisKKyAgbWFrZV9mcm9tX2F1eCgpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordG9fYXV4X2V4Y2VwdF9tYXgoKQoreworICBub2RlX3BvaW50ZXIgcF9hZGQgPSBiYXNlX3R5cGU6Om1fcF9yb290OworCisgIHdoaWxlIChwX2FkZCAhPSBtX3BfbWF4KQorICAgIHsKKyAgICAgIG5vZGVfcG9pbnRlciBwX25leHRfYWRkID0gcF9hZGQtPm1fcF9uZXh0X3NpYmxpbmc7CisKKyAgICAgIGFkZF90b19hdXgocF9hZGQpOworCisgICAgICBwX2FkZCA9IHBfbmV4dF9hZGQ7CisgICAgfQorCisgIHBfYWRkID0gbV9wX21heC0+bV9wX2xfY2hpbGQ7CisKKyAgd2hpbGUgKHBfYWRkICE9IE5VTEwpCisgICAgeworICAgICAgbm9kZV9wb2ludGVyIHBfbmV4dF9hZGQgPSBwX2FkZC0+bV9wX25leHRfc2libGluZzsKKworICAgICAgcF9hZGQtPm1fbWV0YWRhdGEgPSBwX2FkZC0+bV9wX2xfY2hpbGQgPT0gTlVMTD8KKwkwIDoKKwlwX2FkZC0+bV9wX2xfY2hpbGQtPm1fbWV0YWRhdGEgKyAxOworCisgICAgICBhZGRfdG9fYXV4KHBfYWRkKTsKKworICAgICAgcF9hZGQgPSBwX25leHRfYWRkOworICAgIH0KKworICBwX2FkZCA9IG1fcF9tYXgtPm1fcF9uZXh0X3NpYmxpbmc7CisKKyAgd2hpbGUgKHBfYWRkICE9IE5VTEwpCisgICAgeworICAgICAgbm9kZV9wb2ludGVyIHBfbmV4dF9hZGQgPSBwX2FkZC0+bV9wX25leHRfc2libGluZzsKKworICAgICAgYWRkX3RvX2F1eChwX2FkZCk7CisKKyAgICAgIHBfYWRkID0gcF9uZXh0X2FkZDsKKyAgICB9Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYWRkX3RvX2F1eChub2RlX3BvaW50ZXIgcF9uZCkKK3sKKyAgc2l6ZV90eXBlIHIgPSBwX25kLT5tX21ldGFkYXRhOworCisgIHdoaWxlIChtX2FfYXV4W3JdICE9IE5VTEwpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQtPm1fbWV0YWRhdGEgPCByYW5rX2JvdW5kKCkpOworCisgICAgICBpZiAoQ21wX0ZuOjpvcGVyYXRvcigpKG1fYV9hdXhbcl0tPm1fdmFsdWUsIHBfbmQtPm1fdmFsdWUpKQorCW1ha2VfY2hpbGRfb2YobV9hX2F1eFtyXSwgcF9uZCk7CisgICAgICBlbHNlCisgICAgICAgIHsKKwkgIG1ha2VfY2hpbGRfb2YocF9uZCwgbV9hX2F1eFtyXSk7CisKKwkgIHBfbmQgPSBtX2FfYXV4W3JdOworICAgICAgICB9CisKKyAgICAgIG1fYV9hdXhbcl0gPSBOVUxMOworCisgICAgICArK3I7CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kLT5tX21ldGFkYXRhIDwgcmFua19ib3VuZCgpKTsKKworICBtX2FfYXV4W3JdID0gcF9uZDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CittYWtlX2NoaWxkX29mKG5vZGVfcG9pbnRlciBwX25kLCBub2RlX3BvaW50ZXIgcF9uZXdfcGFyZW50KQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV9tZXRhZGF0YSA9PSBwX25ld19wYXJlbnQtPm1fbWV0YWRhdGEpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9hX2F1eFtwX25kLT5tX21ldGFkYXRhXSA9PSBwX25kIHx8CisJCSAgIG1fYV9hdXhbcF9uZC0+bV9tZXRhZGF0YV0gPT0gcF9uZXdfcGFyZW50KTsKKworICArK3BfbmV3X3BhcmVudC0+bV9tZXRhZGF0YTsKKworICBiYXNlX3R5cGU6Om1ha2VfY2hpbGRfb2YocF9uZCwgcF9uZXdfcGFyZW50KTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CittYWtlX2Zyb21fYXV4KCkKK3sKKyAgYmFzZV90eXBlOjptX3Bfcm9vdCA9IG1fcF9tYXggPSBOVUxMOworCisgIGNvbnN0IHNpemVfdHlwZSBybmtfYm5kID0gcmFua19ib3VuZCgpOworCisgIHNpemVfdHlwZSBpID0gMDsKKworICB3aGlsZSAoaSA8IHJua19ibmQpCisgICAgeworICAgICAgaWYgKG1fYV9hdXhbaV0gIT0gTlVMTCkKKyAgICAgICAgeworCSAgbWFrZV9yb290X2FuZF9saW5rKG1fYV9hdXhbaV0pOworCisJICBtX2FfYXV4W2ldID0gTlVMTDsKKyAgICAgICAgfQorCisgICAgICArK2k7CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X2F1eF9udWxsKCk7KQorICAgIH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CityZW1vdmVfbm9kZShub2RlX3BvaW50ZXIgcF9uZCkKK3sKKyAgbm9kZV9wb2ludGVyIHBfcGFyZW50ID0gcF9uZDsKKyAgd2hpbGUgKGJhc2VfdHlwZTo6cGFyZW50KHBfcGFyZW50KSAhPSBOVUxMKQorICAgIHBfcGFyZW50ID0gYmFzZV90eXBlOjpwYXJlbnQocF9wYXJlbnQpOworCisgIGJhc2VfdHlwZTo6YnViYmxlX3RvX3RvcChwX25kKTsKKworICBtX3BfbWF4ID0gcF9uZDsKKworICBub2RlX3BvaW50ZXIgcF9maXggPSBiYXNlX3R5cGU6Om1fcF9yb290OworICB3aGlsZSAocF9maXggIT0gTlVMTCYmICBwX2ZpeC0+bV9wX25leHRfc2libGluZyAhPSBwX3BhcmVudCkKKyAgICBwX2ZpeCA9IHBfZml4LT5tX3BfbmV4dF9zaWJsaW5nOworCisgIGlmIChwX2ZpeCAhPSBOVUxMKQorICAgIHBfZml4LT5tX3BfbmV4dF9zaWJsaW5nID0gcF9uZDsKKworICByZW1vdmVfbWF4X25vZGUoKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitjbGVhcigpCit7CisgIGJhc2VfdHlwZTo6Y2xlYXIoKTsKKworICBtX3BfbWF4ID0gTlVMTDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlKHBvaW50X2l0ZXJhdG9yIGl0KQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoIWJhc2VfdHlwZTo6ZW1wdHkoKSk7CisKKyAgbm9kZV9wb2ludGVyIHBfbmQgPSBpdC5tX3BfbmQ7CisKKyAgcmVtb3ZlX25vZGUocF9uZCk7CisKKyAgYmFzZV90eXBlOjphY3R1YWxfZXJhc2Vfbm9kZShwX25kKTsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKyAgICB9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkPgordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2VfaWYoUHJlZCBwcmVkKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCgpOykKKworICAgIGlmIChiYXNlX3R5cGU6OmVtcHR5KCkpCisgICAgICB7CisgICAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorCisJICByZXR1cm4gMDsKKyAgICAgIH0KKworICBiYXNlX3R5cGU6OnRvX2xpbmtlZF9saXN0KCk7CisKKyAgbm9kZV9wb2ludGVyIHBfb3V0ID0gYmFzZV90eXBlOjpwcnVuZShwcmVkKTsKKworICBzaXplX3R5cGUgZXJzZCA9IDA7CisKKyAgd2hpbGUgKHBfb3V0ICE9IE5VTEwpCisgICAgeworICAgICAgKytlcnNkOworCisgICAgICBub2RlX3BvaW50ZXIgcF9uZXh0ID0gcF9vdXQtPm1fcF9uZXh0X3NpYmxpbmc7CisKKyAgICAgIGJhc2VfdHlwZTo6YWN0dWFsX2VyYXNlX25vZGUocF9vdXQpOworCisgICAgICBwX291dCA9IHBfbmV4dDsKKyAgICB9CisKKyAgbm9kZV9wb2ludGVyIHBfY3VyID0gYmFzZV90eXBlOjptX3Bfcm9vdDsKKworICBtX3BfbWF4ID0gYmFzZV90eXBlOjptX3Bfcm9vdCA9IE5VTEw7CisKKyAgd2hpbGUgKHBfY3VyICE9IE5VTEwpCisgICAgeworICAgICAgbm9kZV9wb2ludGVyIHBfbmV4dCA9IHBfY3VyLT5tX3BfbmV4dF9zaWJsaW5nOworCisgICAgICBtYWtlX3Jvb3RfYW5kX2xpbmsocF9jdXIpOworCisgICAgICBwX2N1ciA9IHBfbmV4dDsKKyAgICB9CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisKKyAgICByZXR1cm4gZXJzZDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CityYW5rX2JvdW5kKCkKK3sKKyAgY29uc3Qgc3RkOjpzaXplX3QqIGNvbnN0IHBfdXBwZXIgPQorICAgIHN0ZDo6dXBwZXJfYm91bmQoICAgICAgICAgICAgZ19hX3JhbmtfYm91bmRzLCBnX2FfcmFua19ib3VuZHMgKyBudW1fZGlzdGluY3RfcmFua19ib3VuZHMsIGJhc2VfdHlwZTo6bV9zaXplKTsKKworICBpZiAocF91cHBlciA9PSBnX2FfcmFua19ib3VuZHMgKyBudW1fZGlzdGluY3RfcmFua19ib3VuZHMpCisgICAgcmV0dXJuIG1heF9yYW5rOworCisgIHJldHVybiAocF91cHBlciAtIGdfYV9yYW5rX2JvdW5kcyk7Cit9CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC90aGluX2hlYXBfL2ZpbmRfZm5faW1wcy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdGhpbl9oZWFwXy9maW5kX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNDA3ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdGhpbl9oZWFwXy9maW5kX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNTEgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGZpbmRfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGZvciB0aGluX2hlYXBfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X3JlZmVyZW5jZQorUEJfRFNfQ0xBU1NfQ19ERUM6OgordG9wKCkgY29uc3QKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKCFiYXNlX3R5cGU6OmVtcHR5KCkpOworCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3BfbWF4ICE9IE5VTEwpOworICByZXR1cm4gbV9wX21heC0+bV92YWx1ZTsKK30KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC90aGluX2hlYXBfL2luc2VydF9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC90aGluX2hlYXBfL2luc2VydF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTY5NTJmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3RoaW5faGVhcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMzI2IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBpbnNlcnRfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGZvciB0aGluX2hlYXBfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnBvaW50X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitwdXNoKGNvbnN0X3JlZmVyZW5jZSByX3ZhbCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisKKyAgICBub2RlX3BvaW50ZXIgcF9uZCA9IGJhc2VfdHlwZTo6Z2V0X25ld19ub2RlX2Zvcl9pbnNlcnQocl92YWwpOworCisgIHBfbmQtPm1fbWV0YWRhdGEgPSAwOworCisgIHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudCA9IHBfbmQtPm1fcF9sX2NoaWxkID0gTlVMTDsKKworICBpZiAoYmFzZV90eXBlOjptX3Bfcm9vdCA9PSBOVUxMKQorICAgIHsKKyAgICAgIHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgPSBOVUxMOworCisgICAgICBtX3BfbWF4ID0gYmFzZV90eXBlOjptX3Bfcm9vdCA9IHBfbmQ7CisKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorCisgICAgICAgIHJldHVybiBwb2ludF9pdGVyYXRvcihwX25kKTsKKyAgICB9CisKKyAgcF9uZC0+bV9wX25leHRfc2libGluZyA9IGJhc2VfdHlwZTo6bV9wX3Jvb3Q7CisKKyAgYmFzZV90eXBlOjptX3Bfcm9vdC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gTlVMTDsKKworICBiYXNlX3R5cGU6Om1fcF9yb290ID0gcF9uZDsKKworICB1cGRhdGVfbWF4KHBfbmQpOworCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorCisgICAgcmV0dXJuIHBvaW50X2l0ZXJhdG9yKHBfbmQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK21ha2Vfcm9vdChub2RlX3BvaW50ZXIgcF9uZCkKK3sKKyAgcF9uZC0+bV9tZXRhZGF0YSA9CisgICAgcF9uZC0+bV9wX2xfY2hpbGQgPT0gTlVMTD8KKyAgICAwIDoKKyAgICAxICsgcF9uZC0+bV9wX2xfY2hpbGQtPm1fbWV0YWRhdGE7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorbWFrZV9yb290X2FuZF9saW5rKG5vZGVfcG9pbnRlciBwX25kKQoreworICBtYWtlX3Jvb3QocF9uZCk7CisKKyAgcF9uZC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gTlVMTDsKKworICBwX25kLT5tX3BfbmV4dF9zaWJsaW5nID0gYmFzZV90eXBlOjptX3Bfcm9vdDsKKworICBpZiAoYmFzZV90eXBlOjptX3Bfcm9vdCAhPSBOVUxMKQorICAgIGJhc2VfdHlwZTo6bV9wX3Jvb3QtPm1fcF9wcmV2X29yX3BhcmVudCA9IE5VTEw7CisKKyAgYmFzZV90eXBlOjptX3Bfcm9vdCA9IHBfbmQ7CisKKyAgdXBkYXRlX21heChwX25kKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitmaXgobm9kZV9wb2ludGVyIHBfeSkKK3sKKyAgd2hpbGUgKHRydWUpCisgICAgeworICAgICAgaWYgKHBfeS0+bV9wX3ByZXZfb3JfcGFyZW50ID09IE5VTEwpCisgICAgICAgIHsKKwkgIGZpeF9yb290KHBfeSk7CisKKwkgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAocF95LT5tX21ldGFkYXRhID09IDEmJiAgcF95LT5tX3BfbmV4dF9zaWJsaW5nID09IE5VTEwpCisgICAgICAgIHsKKwkgIGlmIChwX3ktPm1fcF9sX2NoaWxkICE9IE5VTEwpCisgICAgICAgICAgICB7CisJICAgICAgZml4X3NpYmxpbmdfcmFua18xX3VubWFya2VkKHBfeSk7CisKKwkgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKwkgIGZpeF9zaWJsaW5nX3JhbmtfMV9tYXJrZWQocF95KTsKKworCSAgcF95ID0gcF95LT5tX3BfcHJldl9vcl9wYXJlbnQ7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHBfeS0+bV9tZXRhZGF0YSA+IHBfeS0+bV9wX25leHRfc2libGluZy0+bV9tZXRhZGF0YSArIDEpCisgICAgICAgIHsKKwkgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3ktPm1fcF9sX2NoaWxkICE9IE5VTEwpOworCisJICBpZiAocF95LT5tX21ldGFkYXRhICE9IHBfeS0+bV9wX2xfY2hpbGQtPm1fbWV0YWRhdGEgKyAyKQorICAgICAgICAgICAgeworCSAgICAgIGZpeF9zaWJsaW5nX2dlbmVyYWxfdW5tYXJrZWQocF95KTsKKworCSAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworCSAgZml4X3NpYmxpbmdfZ2VuZXJhbF9tYXJrZWQocF95KTsKKworCSAgcF95ID0gcF95LT5tX3BfcHJldl9vcl9wYXJlbnQ7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKChwX3ktPm1fcF9sX2NoaWxkID09IE5VTEwmJiAKKyAgICAgICAgICAgICAgICBwX3ktPm1fbWV0YWRhdGEgPT0gMikgfHwocF95LT5tX3BfbF9jaGlsZCAhPSBOVUxMJiYgCisJCQkJCSBwX3ktPm1fbWV0YWRhdGEgPT0gcF95LT5tX3BfbF9jaGlsZC0+bV9tZXRhZGF0YSArIDMpKQorICAgICAgICB7CisJICBub2RlX3BvaW50ZXIgcF96ID0gcF95LT5tX3BfcHJldl9vcl9wYXJlbnQ7CisKKwkgIGZpeF9jaGlsZChwX3kpOworCisJICBwX3kgPSBwX3o7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKwlyZXR1cm47CisgICAgfQorfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2ZpeF9yb290KG5vZGVfcG9pbnRlciBwX3kpCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3ktPm1fcF9wcmV2X29yX3BhcmVudCA9PSBOVUxMKTsKKworICBtYWtlX3Jvb3QocF95KTsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF9ub2RlX2NvbnNpc3RlbnQocF95LCB0cnVlKTspCisgICAgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2ZpeF9zaWJsaW5nX3JhbmtfMV91bm1hcmtlZChub2RlX3BvaW50ZXIgcF95KQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF95LT5tX3BfcHJldl9vcl9wYXJlbnQgIT0gTlVMTCk7CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShub2RlX3BvaW50ZXIgcF93ID0gcF95LT5tX3BfbF9jaGlsZDspCisgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfdyAhPSBOVUxMKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfdy0+bV9wX25leHRfc2libGluZyA9PSBOVUxMKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfeS0+bV9wX25leHRfc2libGluZyA9PSBOVUxMKTsKKworICBwX3ktPm1fcF9uZXh0X3NpYmxpbmcgPSBwX3ktPm1fcF9sX2NoaWxkOworCisgIHBfeS0+bV9wX25leHRfc2libGluZy0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF95OworCisgIHBfeS0+bV9wX2xfY2hpbGQgPSBOVUxMOworCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X25vZGVfY29uc2lzdGVudChwX3ksIGZhbHNlKTspCisgICAgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2ZpeF9zaWJsaW5nX3JhbmtfMV9tYXJrZWQobm9kZV9wb2ludGVyIHBfeSkKK3sKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfeS0+bV9wX3ByZXZfb3JfcGFyZW50ICE9IE5VTEwpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF95LT5tX3BfbF9jaGlsZCA9PSBOVUxMKTsKKworICBwX3ktPm1fbWV0YWRhdGEgPSAwOworCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X25vZGVfY29uc2lzdGVudChwX3ksIGZhbHNlKTspCisgICAgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2ZpeF9zaWJsaW5nX2dlbmVyYWxfdW5tYXJrZWQobm9kZV9wb2ludGVyIHBfeSkKK3sKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfeS0+bV9wX3ByZXZfb3JfcGFyZW50ICE9IE5VTEwpOworCisgIG5vZGVfcG9pbnRlciBwX3cgPSBwX3ktPm1fcF9sX2NoaWxkOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF93ICE9IE5VTEwpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF93LT5tX3BfbmV4dF9zaWJsaW5nICE9IE5VTEwpOworCisgIHBfeS0+bV9wX2xfY2hpbGQgPSBwX3ctPm1fcF9uZXh0X3NpYmxpbmc7CisgIHBfdy0+bV9wX25leHRfc2libGluZy0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF95OworCisgIHBfdy0+bV9wX25leHRfc2libGluZyA9IHBfeS0+bV9wX25leHRfc2libGluZzsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfdy0+bV9wX25leHRfc2libGluZyAhPSBOVUxMKTsKKyAgcF93LT5tX3BfbmV4dF9zaWJsaW5nLT5tX3BfcHJldl9vcl9wYXJlbnQgPSBwX3c7CisKKyAgcF95LT5tX3BfbmV4dF9zaWJsaW5nID0gcF93OworICBwX3ctPm1fcF9wcmV2X29yX3BhcmVudCA9IHBfeTsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF9ub2RlX2NvbnNpc3RlbnQocF95LCBmYWxzZSk7KQorICAgIH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitmaXhfc2libGluZ19nZW5lcmFsX21hcmtlZChub2RlX3BvaW50ZXIgcF95KQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF95LT5tX3BfcHJldl9vcl9wYXJlbnQgIT0gTlVMTCk7CisKKyAgLS1wX3ktPm1fbWV0YWRhdGE7CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfbm9kZV9jb25zaXN0ZW50KHBfeSwgZmFsc2UpOykKKyAgICB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZml4X2NoaWxkKG5vZGVfcG9pbnRlciBwX3kpCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3ktPm1fcF9wcmV2X29yX3BhcmVudCAhPSBOVUxMKTsKKworICBpZiAocF95LT5tX3BfbmV4dF9zaWJsaW5nICE9IE5VTEwpCisgICAgcF95LT5tX3BfbmV4dF9zaWJsaW5nLT5tX3BfcHJldl9vcl9wYXJlbnQgPSBwX3ktPm1fcF9wcmV2X29yX3BhcmVudDsKKworICBpZiAocF95LT5tX3BfcHJldl9vcl9wYXJlbnQtPm1fcF9sX2NoaWxkID09IHBfeSkKKyAgICBwX3ktPm1fcF9wcmV2X29yX3BhcmVudC0+bV9wX2xfY2hpbGQgPSBwX3ktPm1fcF9uZXh0X3NpYmxpbmc7CisgIGVsc2UKKyAgICBwX3ktPm1fcF9wcmV2X29yX3BhcmVudC0+bV9wX25leHRfc2libGluZyA9IHBfeS0+bV9wX25leHRfc2libGluZzsKKworICBtYWtlX3Jvb3RfYW5kX2xpbmsocF95KTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK21vZGlmeShwb2ludF9pdGVyYXRvciBpdCwgY29uc3RfcmVmZXJlbmNlIHJfbmV3X3ZhbCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgbm9kZV9wb2ludGVyIHBfbmQgPSBpdC5tX3BfbmQ7CisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQgIT0gTlVMTCk7CisKKyAgY29uc3QgYm9vbCBzbWFsbGVyID0gQ21wX0ZuOjpvcGVyYXRvcigpKHJfbmV3X3ZhbCwgcF9uZC0+bV92YWx1ZSk7CisKKyAgcF9uZC0+bV92YWx1ZSA9IHJfbmV3X3ZhbDsKKworICBpZiAoc21hbGxlcikKKyAgICB7CisgICAgICByZW1vdmVfbm9kZShwX25kKTsKKworICAgICAgcF9uZC0+bV9wX2xfY2hpbGQgPSBOVUxMOworCisgICAgICBtYWtlX3Jvb3RfYW5kX2xpbmsocF9uZCk7CisKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudCA9PSBOVUxMKQorICAgIHsKKyAgICAgIHVwZGF0ZV9tYXgocF9uZCk7CisKKyAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgbm9kZV9wb2ludGVyIHBfeSA9IHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudDsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfeSAhPSBOVUxMKTsKKworICBpZiAocF9uZC0+bV9wX25leHRfc2libGluZyAhPSBOVUxMKQorICAgIHBfbmQtPm1fcF9uZXh0X3NpYmxpbmctPm1fcF9wcmV2X29yX3BhcmVudCA9IHBfeTsKKworICBpZiAocF95LT5tX3BfbF9jaGlsZCA9PSBwX25kKQorICAgIHBfeS0+bV9wX2xfY2hpbGQgPSBwX25kLT5tX3BfbmV4dF9zaWJsaW5nOworICBlbHNlCisgICAgcF95LT5tX3BfbmV4dF9zaWJsaW5nID0gcF9uZC0+bV9wX25leHRfc2libGluZzsKKworICBmaXgocF95KTsKKworICBtYWtlX3Jvb3RfYW5kX2xpbmsocF9uZCk7CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3VwZGF0ZV9tYXgobm9kZV9wb2ludGVyIHBfbmQpCit7CisgIGlmIChtX3BfbWF4ID09IE5VTEwgfHwgQ21wX0ZuOjpvcGVyYXRvcigpKG1fcF9tYXgtPm1fdmFsdWUsIHBfbmQtPm1fdmFsdWUpKQorICAgIG1fcF9tYXggPSBwX25kOworfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdGhpbl9oZWFwXy9zcGxpdF9qb2luX2ZuX2ltcHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3RoaW5faGVhcF8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWNiN2JkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3RoaW5faGVhcF8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDEyNiBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgc3BsaXRfam9pbl9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gZm9yIHRoaW5faGVhcF8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIFByZWQ+Cit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitzcGxpdChQcmVkIHByZWQsIFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspCisKKyAgICBvdGhlci5jbGVhcigpOworCisgIGlmIChiYXNlX3R5cGU6OmVtcHR5KCkpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKCk7KQorCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgYmFzZV90eXBlOjp0b19saW5rZWRfbGlzdCgpOworCisgIG5vZGVfcG9pbnRlciBwX291dCA9IGJhc2VfdHlwZTo6cHJ1bmUocHJlZCk7CisKKyAgd2hpbGUgKHBfb3V0ICE9IE5VTEwpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGJhc2VfdHlwZTo6bV9zaXplID4gMCk7CisgICAgICAtLWJhc2VfdHlwZTo6bV9zaXplOworCisgICAgICArK290aGVyLm1fc2l6ZTsKKworICAgICAgbm9kZV9wb2ludGVyIHBfbmV4dCA9IHBfb3V0LT5tX3BfbmV4dF9zaWJsaW5nOworCisgICAgICBvdGhlci5tYWtlX3Jvb3RfYW5kX2xpbmsocF9vdXQpOworCisgICAgICBwX291dCA9IHBfbmV4dDsKKyAgICB9CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspCisKKyAgICBub2RlX3BvaW50ZXIgcF9jdXIgPSBiYXNlX3R5cGU6Om1fcF9yb290OworCisgIG1fcF9tYXggPSBOVUxMOworCisgIGJhc2VfdHlwZTo6bV9wX3Jvb3QgPSBOVUxMOworCisgIHdoaWxlIChwX2N1ciAhPSBOVUxMKQorICAgIHsKKyAgICAgIG5vZGVfcG9pbnRlciBwX25leHQgPSBwX2N1ci0+bV9wX25leHRfc2libGluZzsKKworICAgICAgbWFrZV9yb290X2FuZF9saW5rKHBfY3VyKTsKKworICAgICAgcF9jdXIgPSBwX25leHQ7CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKCk7KQorICAgIF9HTElCQ1hYX0RFQlVHX09OTFkob3RoZXIuYXNzZXJ0X3ZhbGlkKCk7KQorICAgIH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citqb2luKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspCisKKyAgICBub2RlX3BvaW50ZXIgcF9vdGhlciA9IG90aGVyLm1fcF9yb290OworCisgIHdoaWxlIChwX290aGVyICE9IE5VTEwpCisgICAgeworICAgICAgbm9kZV9wb2ludGVyIHBfbmV4dCA9IHBfb3RoZXItPm1fcF9uZXh0X3NpYmxpbmc7CisKKyAgICAgIG1ha2Vfcm9vdF9hbmRfbGluayhwX290aGVyKTsKKworICAgICAgcF9vdGhlciA9IHBfbmV4dDsKKyAgICB9CisKKyAgYmFzZV90eXBlOjptX3NpemUgKz0gb3RoZXIubV9zaXplOworCisgIG90aGVyLm1fcF9yb290ID0gTlVMTDsKKyAgb3RoZXIubV9zaXplID0gMDsKKyAgb3RoZXIubV9wX21heCA9IE5VTEw7CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoKTspCisgICAgX0dMSUJDWFhfREVCVUdfT05MWShvdGhlci5hc3NlcnRfdmFsaWQoKTspCisgICAgfQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3RoaW5faGVhcF8vdGhpbl9oZWFwXy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdGhpbl9oZWFwXy90aGluX2hlYXBfLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGZhMDRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3RoaW5faGVhcF8vdGhpbl9oZWFwXy5ocHAKQEAgLTAsMCArMSwzNTEgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHRoaW5faGVhcF8uaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYSB0aGluIGhlYXAuCisgKi8KKworI2lmbmRlZiBQQl9EU19USElOX0hFQVBfSFBQCisjZGVmaW5lIFBCX0RTX1RISU5fSEVBUF9IUFAKKworLyoKKyAqIFRoaW4gaGVhcHMuCisgKiBUYXJqYW4gYW5kIEthcGxhbi4KKyAqLworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvY29uZF9kZWFsdG9yLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3R5cGVfdXRpbHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8uaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vbnVsbF9tZXRhZGF0YS5ocHA+CisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlX1R5cGUsIGNsYXNzIENtcF9GbiwgY2xhc3MgQWxsb2NhdG9yPgorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFwKKyAgICB0aGluX2hlYXBfPFZhbHVlX1R5cGUsIENtcF9GbiwgQWxsb2NhdG9yPgorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyNkZWZpbmUgUEJfRFNfQkFTRV9DX0RFQyBcCisgICAgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF88VmFsdWVfVHlwZSwgQ21wX0ZuLAlcCisJCQkgICAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6c2l6ZV90eXBlLCBBbGxvY2F0b3IsIHRydWU+CisjZWxzZSAKKyNkZWZpbmUgUEJfRFNfQkFTRV9DX0RFQwkJCQkJCVwKKyAgICBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXzxWYWx1ZV9UeXBlLCBDbXBfRm4sIFwKKwkJCQkgIHR5cGVuYW1lIEFsbG9jYXRvcjo6c2l6ZV90eXBlLCBBbGxvY2F0b3I+CisjZW5kaWYgCisKKyAgICAvKioKKyAgICAgKiBjbGFzcyBkZXNjcmlwdGlvbiA9ICJ0fC18aXxcfCBoMzRwIj4KKyAgICAgKiovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVfVHlwZSwgY2xhc3MgQ21wX0ZuLCBjbGFzcyBBbGxvY2F0b3I+CisgICAgY2xhc3MgdGhpbl9oZWFwXyA6IHB1YmxpYyBQQl9EU19CQVNFX0NfREVDCisgICAgeworCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgUEJfRFNfQkFTRV9DX0RFQyBiYXNlX3R5cGU7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6bm9kZSBub2RlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6bm9kZV9wb2ludGVyIG5vZGVfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X25vZGVfcG9pbnRlciBjb25zdF9ub2RlX3BvaW50ZXI7CisKKyAgICBwdWJsaWM6CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjpzaXplX3R5cGUgc2l6ZV90eXBlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKKworICAgICAgdHlwZWRlZiBWYWx1ZV9UeXBlIHZhbHVlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPAorCXZhbHVlX3R5cGU+OjpvdGhlcjo6cG9pbnRlcgorICAgICAgcG9pbnRlcjsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8CisJdmFsdWVfdHlwZT46Om90aGVyOjpjb25zdF9wb2ludGVyCisgICAgICBjb25zdF9wb2ludGVyOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKwl2YWx1ZV90eXBlPjo6b3RoZXI6OnJlZmVyZW5jZQorICAgICAgcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDwKKwl2YWx1ZV90eXBlPjo6b3RoZXI6OmNvbnN0X3JlZmVyZW5jZQorICAgICAgY29uc3RfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBQQl9EU19CQVNFX0NfREVDOjpjb25zdF9wb2ludF9pdGVyYXRvcgorICAgICAgY29uc3RfcG9pbnRfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgUEJfRFNfQkFTRV9DX0RFQzo6cG9pbnRfaXRlcmF0b3IgcG9pbnRfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgUEJfRFNfQkFTRV9DX0RFQzo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgUEJfRFNfQkFTRV9DX0RFQzo6aXRlcmF0b3IgaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgQ21wX0ZuIGNtcF9mbjsKKworICAgICAgdHlwZWRlZiBBbGxvY2F0b3IgYWxsb2NhdG9yX3R5cGU7CisKKyAgICBwdWJsaWM6CisKKyAgICAgIGlubGluZSBwb2ludF9pdGVyYXRvcgorICAgICAgcHVzaChjb25zdF9yZWZlcmVuY2Ugcl92YWwpOworCisgICAgICB2b2lkCisgICAgICBtb2RpZnkocG9pbnRfaXRlcmF0b3IgaXQsIGNvbnN0X3JlZmVyZW5jZSByX25ld192YWwpOworCisgICAgICBpbmxpbmUgY29uc3RfcmVmZXJlbmNlCisgICAgICB0b3AoKSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgcG9wKCk7CisKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKHBvaW50X2l0ZXJhdG9yIGl0KTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIGNsZWFyKCk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFByZWQ+CisgICAgICBzaXplX3R5cGUKKyAgICAgIGVyYXNlX2lmKFByZWQgcHJlZCk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFByZWQ+CisgICAgICB2b2lkCisgICAgICBzcGxpdChQcmVkIHByZWQsIFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcik7CisKKyAgICAgIHZvaWQKKyAgICAgIGpvaW4oUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKTsKKworICAgIHByb3RlY3RlZDoKKworICAgICAgdGhpbl9oZWFwXygpOworCisgICAgICB0aGluX2hlYXBfKGNvbnN0IENtcF9GbiYgcl9jbXBfZm4pOworCisgICAgICB0aGluX2hlYXBfKGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcik7CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKTsKKworICAgICAgfnRoaW5faGVhcF8oKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXQ+CisgICAgICB2b2lkCisgICAgICBjb3B5X2Zyb21fcmFuZ2UoSXQgZmlyc3RfaXQsIEl0IGxhc3RfaXQpOworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF92YWxpZCgpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfbWF4KCkgY29uc3Q7CisjZW5kaWYgCisKKyNpZmRlZiBQQl9EU19USElOX0hFQVBfVFJBQ0VfCisgICAgICB2b2lkCisgICAgICB0cmFjZSgpIGNvbnN0OworI2VuZGlmIAorCisgICAgcHJpdmF0ZToKKyAgICAgIGVudW0KKwl7CisJICBtYXhfcmFuayA9IChzaXplb2Yoc2l6ZV90eXBlKSA8PCA0KSArIDIKKwl9OworCisgICAgcHJpdmF0ZToKKworICAgICAgdm9pZAorICAgICAgaW5pdGlhbGl6ZSgpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgdXBkYXRlX21heChub2RlX3BvaW50ZXIgcF9uZCk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBmaXgobm9kZV9wb2ludGVyIHBfbmQpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgZml4X3Jvb3Qobm9kZV9wb2ludGVyIHBfeSk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBmaXhfc2libGluZ19yYW5rXzFfdW5tYXJrZWQobm9kZV9wb2ludGVyIHBfeSk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBmaXhfc2libGluZ19yYW5rXzFfbWFya2VkKG5vZGVfcG9pbnRlciBwX3kpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgZml4X3NpYmxpbmdfZ2VuZXJhbF91bm1hcmtlZChub2RlX3BvaW50ZXIgcF95KTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIGZpeF9zaWJsaW5nX2dlbmVyYWxfbWFya2VkKG5vZGVfcG9pbnRlciBwX3kpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgZml4X2NoaWxkKG5vZGVfcG9pbnRlciBwX3kpOworCisgICAgICBpbmxpbmUgc3RhdGljIHZvaWQKKyAgICAgIG1ha2Vfcm9vdChub2RlX3BvaW50ZXIgcF9uZCk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBtYWtlX3Jvb3RfYW5kX2xpbmsobm9kZV9wb2ludGVyIHBfbmQpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgcmVtb3ZlX21heF9ub2RlKCk7CisKKyAgICAgIHZvaWQKKyAgICAgIHRvX2F1eF9leGNlcHRfbWF4KCk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBhZGRfdG9fYXV4KG5vZGVfcG9pbnRlciBwX25kKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIG1ha2VfZnJvbV9hdXgoKTsKKworICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgcmFua19ib3VuZCgpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgbWFrZV9jaGlsZF9vZihub2RlX3BvaW50ZXIgcF9uZCwgbm9kZV9wb2ludGVyIHBfbmV3X3BhcmVudCk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICByZW1vdmVfbm9kZShub2RlX3BvaW50ZXIgcF9uZCk7CisKKyAgICAgIGlubGluZSBub2RlX3BvaW50ZXIKKyAgICAgIGpvaW4obm9kZV9wb2ludGVyIHBfbGhzLCBub2RlX3BvaW50ZXIgcF9yaHMpIGNvbnN0OworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF9ub2RlX2NvbnNpc3RlbnQoY29uc3Rfbm9kZV9wb2ludGVyIHBfbmQsIGJvb2wgcm9vdCkgY29uc3Q7CisKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF9hdXhfbnVsbCgpIGNvbnN0OworI2VuZGlmIAorCisgICAgcHJpdmF0ZToKKyAgICAgIG5vZGVfcG9pbnRlciBtX3BfbWF4OworCisgICAgICBub2RlX3BvaW50ZXIgbV9hX2F1eFttYXhfcmFua107CisgICAgfTsKKworICAgIGVudW0KKyAgICAgIHsKKwludW1fZGlzdGluY3RfcmFua19ib3VuZHMgPSA0OAorICAgICAgfTsKKworICAgIC8vIFRha2VuIGZyb20gdGhlIFNHSSBpbXBsZW1lbnRhdGlvbjsgYWNrbm93bGVkZ2VkIGluIHRoZSBkb2NzLgorICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBnX2FfcmFua19ib3VuZHNbbnVtX2Rpc3RpbmN0X3JhbmtfYm91bmRzXSA9CisgICAgICB7CisJLyogRGVhbGluZyBjYXJkcy4uLiAqLworCS8qIDAgICAgICovIDB1bCwKKwkvKiAxICAgICAqLyAxdWwsCisJLyogMiAgICAgKi8gMXVsLAorCS8qIDMgICAgICovIDJ1bCwKKwkvKiA0ICAgICAqLyA0dWwsCisJLyogNSAgICAgKi8gNnVsLAorCS8qIDYgICAgICovIDExdWwsCisJLyogNyAgICAgKi8gMTd1bCwKKwkvKiA4ICAgICAqLyAyOXVsLAorCS8qIDkgICAgICovIDQ2dWwsCisJLyogMTAgICAgKi8gNzZ1bCwKKwkvKiAxMSAgICAqLyAxMjJ1bCwKKwkvKiAxMiAgICAqLyAxOTl1bCwKKwkvKiAxMyAgICAqLyAzMjF1bCwKKwkvKiAxNCAgICAqLyA1MjF1bCwKKwkvKiAxNSAgICAqLyA4NDJ1bCwKKwkvKiAxNiAgICAqLyAxMzY0dWwsCisJLyogMTcgICAgKi8gMjIwNnVsLAorCS8qIDE4ICAgICovIDM1NzF1bCwKKwkvKiAxOSAgICAqLyA1Nzc3dWwsCisJLyogMjAgICAgKi8gOTM0OXVsLAorCS8qIDIxICAgICovIDE1MTI2dWwsCisJLyogMjIgICAgKi8gMjQ0NzZ1bCwKKwkvKiAyMyAgICAqLyAzOTYwMnVsLAorCS8qIDI0ICAgICovIDY0MDc5dWwsCisJLyogMjUgICAgKi8gMTAzNjgxdWwsCisJLyogMjYgICAgKi8gMTY3NzYxdWwsCisJLyogMjcgICAgKi8gMjcxNDQydWwsCisJLyogMjggICAgKi8gNDM5MjA0dWwsCisJLyogMjkgICAgKi8gNzEwNjQ2dWwsCisJLyogMzAgICAgKi8gMTE0OTg1MXVsLAorCS8qIDMxICAgICovIDE4NjA0OTd1bCwKKwkvKiAzMiAgICAqLyAzMDEwMzQ5dWwsCisJLyogMzMgICAgKi8gNDg3MDg0NnVsLAorCS8qIDM0ICAgICovIDc4ODExOTZ1bCwKKwkvKiAzNSAgICAqLyAxMjc1MjA0MnVsLAorCS8qIDM2ICAgICovIDIwNjMzMjM5dWwsCisJLyogMzcgICAgKi8gMzMzODUyODJ1bCwKKwkvKiAzOCAgICAqLyA1NDAxODUyMXVsLAorCS8qIDM5ICAgICovIDg3NDAzODAzdWwsCisJLyogNDAgICAgKi8gMTQxNDIyMzI0dWwsCisJLyogNDEgICAgKi8gMjI4ODI2MTI3dWwsCisJLyogNDIgICAgKi8gMzcwMjQ4NDUxdWwsCisJLyogNDMgICAgKi8gNTk5MDc0NTc4dWwsCisJLyogNDQgICAgKi8gOTY5MzIzMDI5dWwsCisJLyogNDUgICAgKi8gMTU2ODM5NzYwN3VsLAorCS8qIDQ2ICAgICovIDI1Mzc3MjA2MzZ1bCwKKwkvKiA0NyAgICAqLyA0MTA2MTE4MjQzdWwKKwkvKiBQb3QncyBnb29kLCBsZXQncyBwbGF5ICovCisgICAgICB9OworCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90aGluX2hlYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdGhpbl9oZWFwXy9kZWJ1Z19mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3RoaW5faGVhcF8vdHJhY2VfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90aGluX2hlYXBfL2ZpbmRfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90aGluX2hlYXBfL2luc2VydF9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3RoaW5faGVhcF8vZXJhc2VfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90aGluX2hlYXBfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHA+CisKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQkFTRV9DX0RFQworCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdGhpbl9oZWFwXy90cmFjZV9mbl9pbXBzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC90aGluX2hlYXBfL3RyYWNlX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMzA5ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdGhpbl9oZWFwXy90cmFjZV9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDU1IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSB0cmFjZV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfLgorICovCisKKyNpZmRlZiBQQl9EU19USElOX0hFQVBfVFJBQ0VfCisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cit0cmFjZSgpIGNvbnN0Cit7CisgIHN0ZDo6Y2VyciA8PCBzdGQ6OmVuZGw7CisKKyAgc3RkOjpjZXJyIDw8ICJtX3BfbWF4ICIgPDwgbV9wX21heCA8PCBzdGQ6OmVuZGw7CisKKyAgYmFzZV90eXBlOjp0cmFjZSgpOworfQorCisjZW5kaWYgLy8gI2lmZGVmIFBCX0RTX1RISU5fSEVBUF9UUkFDRV8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC90cmVlX3BvbGljeS9ub2RlX21ldGFkYXRhX3NlbGVjdG9yLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC90cmVlX3BvbGljeS9ub2RlX21ldGFkYXRhX3NlbGVjdG9yLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTgyODg2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3RyZWVfcG9saWN5L25vZGVfbWV0YWRhdGFfc2VsZWN0b3IuaHBwCkBAIC0wLDAgKzEsMTE2IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBub2RlX21ldGFkYXRhX3NlbGVjdG9yLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIHRyZWVzLgorICovCisKKyNpZm5kZWYgUEJfRFNfVFJFRV9OT0RFX01FVEFEQVRBX1NFTEVDVE9SX0hQUAorI2RlZmluZSBQQl9EU19UUkVFX05PREVfTUVUQURBVEFfU0VMRUNUT1JfSFBQCisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2Jhc2ljX3RyZWVfcG9saWN5L251bGxfbm9kZV9tZXRhZGF0YS5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90eXBlc190cmFpdHMuaHBwPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGVfVXBkYXRlLCBib29sIE51bGw+CisgICAgc3RydWN0IHRyZWVfbWV0YWRhdGFfaGVscGVyCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBOb2RlX1VwZGF0ZTo6bWV0YWRhdGFfdHlwZSB0eXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX1VwZGF0ZT4KKyAgICBzdHJ1Y3QgdHJlZV9tZXRhZGF0YV9oZWxwZXI8CisgICAgICBOb2RlX1VwZGF0ZSwKKyAgICAgIHRydWU+CisgICAgeworICAgICAgdHlwZWRlZiBudWxsX25vZGVfbWV0YWRhdGEgdHlwZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LAorCSAgICAgdHlwZW5hbWUgRGF0YSwKKwkgICAgIGNsYXNzIENtcF9GbiwKKwkgICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnN0X05vZGVfSXRlcmF0b3IsCisJCSAgICAgIGNsYXNzIENvbnN0X0l0ZXJhdG9yLAorCQkgICAgICBjbGFzcyBDbXBfRm5fLAorCQkgICAgICBjbGFzcyBBbGxvY2F0b3JfPgorICAgIGNsYXNzIE5vZGVfVXBkYXRlLAorCSAgICAgY2xhc3MgQWxsb2NhdG9yPgorICAgIHN0cnVjdCB0cmVlX25vZGVfbWV0YWRhdGFfc2VsZWN0b3IKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYKKyAgICAgIGR1bWNvbnN0X25vZGVfaXRlcmF0b3I8CisgICAgICBLZXksCisgICAgICBEYXRhLAorICAgICAgQWxsb2NhdG9yPgorICAgICAgZHVtY29uc3Rfbm9kZV9pdDsKKworICAgICAgZW51bQorCXsKKwkgIG51bGxfdXBkYXRlID0KKwkgIGlzX3NhbWU8CisJICBOb2RlX1VwZGF0ZTwKKwkgIGR1bWNvbnN0X25vZGVfaXQsCisJICBkdW1jb25zdF9ub2RlX2l0LAorCSAgQ21wX0ZuLAorCSAgQWxsb2NhdG9yPiwKKwkgIG51bGxfdHJlZV9ub2RlX3VwZGF0ZTwKKwkgIGR1bWNvbnN0X25vZGVfaXQsCisJICBkdW1jb25zdF9ub2RlX2l0LAorCSAgQ21wX0ZuLAorCSAgQWxsb2NhdG9yPiA+Ojp2YWx1ZQorCX07CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSB0cmVlX21ldGFkYXRhX2hlbHBlcjwKKyAgICAgIE5vZGVfVXBkYXRlPAorICAgICAgZHVtY29uc3Rfbm9kZV9pdCwKKyAgICAgIGR1bWNvbnN0X25vZGVfaXQsCisgICAgICBDbXBfRm4sCisgICAgICBBbGxvY2F0b3I+LAorICAgICAgbnVsbF91cGRhdGU+Ojp0eXBlCisgICAgICB0eXBlOworICAgIH07CisKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAvLyAjaWZuZGVmIFBCX0RTX1RSRUVfTk9ERV9NRVRBREFUQV9TRUxFQ1RPUl9IUFAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC90cmVlX3BvbGljeS9udWxsX25vZGVfdXBkYXRlX2ltcC5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdHJlZV9wb2xpY3kvbnVsbF9ub2RlX3VwZGF0ZV9pbXAuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNmEzZWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdHJlZV9wb2xpY3kvbnVsbF9ub2RlX3VwZGF0ZV9pbXAuaHBwCkBAIC0wLDAgKzEsNTAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIG51bGxfbm9kZV91cGRhdGVfaW1wLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gb2YgbnVsbF9ub2RlX3VwZGF0ZS4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgQ29uc3RfTm9kZV9JdGVyYXRvcl8sCisJIHR5cGVuYW1lIE5vZGVfSXRlcmF0b3JfLAorCSBjbGFzcyAgICBDbXBfRm5fLAorCSB0eXBlbmFtZSBBbGxvY2F0b3JfPgoraW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3N3YXAobnVsbF90cmVlX25vZGVfdXBkYXRlPCAgICAgICAgICAgIENvbnN0X05vZGVfSXRlcmF0b3JfLCBOb2RlX0l0ZXJhdG9yXywgQ21wX0ZuXywgQWxsb2NhdG9yXz4mIC8qb3RoZXIqLykKK3sgfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdHJlZV9wb2xpY3kvb3JkZXJfc3RhdGlzdGljc19pbXAuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3RyZWVfcG9saWN5L29yZGVyX3N0YXRpc3RpY3NfaW1wLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDMzNzY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3RyZWVfcG9saWN5L29yZGVyX3N0YXRpc3RpY3NfaW1wLmhwcApAQCAtMCwwICsxLDE0MSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgb3JkZXJfc3RhdGlzdGljc19pbXAuaHBwCisgKiBDb250YWlucyBmb3J3YXJkIGRlY2xhcmF0aW9ucyBmb3Igb3JkZXJfc3RhdGlzdGljc19rZXkKKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjppdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZmluZF9ieV9vcmRlcihzaXplX3R5cGUgb3JkZXIpCit7CisgIG5vZGVfaXRlcmF0b3IgaXQgPSBub2RlX2JlZ2luKCk7CisKKyAgbm9kZV9pdGVyYXRvciBlbmRfaXQgPSBub2RlX2VuZCgpOworCisgIHdoaWxlIChpdCAhPSBlbmRfaXQpCisgICAgeworICAgICAgbm9kZV9pdGVyYXRvciBsX2l0ID0gaXQuZ2V0X2xfY2hpbGQoKTsKKworICAgICAgY29uc3Qgc2l6ZV90eXBlIG8gPSAobF9pdCA9PSBlbmRfaXQpPworCTAgOgorCWxfaXQuZ2V0X21ldGFkYXRhKCk7CisKKyAgICAgIGlmIChvcmRlciA9PSBvKQorCXJldHVybiAoKml0KTsKKyAgICAgIGVsc2UgaWYgKG9yZGVyIDwgbykKKwlpdCA9IGxfaXQ7CisgICAgICBlbHNlCisgICAgICAgIHsKKwkgIG9yZGVyIC09IG8gKyAxOworCisJICBpdCA9IGl0LmdldF9yX2NoaWxkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgcmV0dXJuIChQQl9EU19CQVNFX0NfREVDOjplbmRfaXRlcmF0b3IoKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitmaW5kX2J5X29yZGVyKHNpemVfdHlwZSBvcmRlcikgY29uc3QKK3sKKyAgcmV0dXJuIChjb25zdF9jYXN0PFBCX0RTX0NMQVNTX0NfREVDKiA+KHRoaXMpLT5maW5kX2J5X29yZGVyKG9yZGVyKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorb3JkZXJfb2Zfa2V5KGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpIGNvbnN0Cit7CisgIGNvbnN0X25vZGVfaXRlcmF0b3IgaXQgPSBub2RlX2JlZ2luKCk7CisKKyAgY29uc3Rfbm9kZV9pdGVyYXRvciBlbmRfaXQgPSBub2RlX2VuZCgpOworCisgIGNvbnN0IGNtcF9mbiYgcl9jbXBfZm4gPQorICAgIGNvbnN0X2Nhc3Q8UEJfRFNfQ0xBU1NfQ19ERUMqID4odGhpcyktPmdldF9jbXBfZm4oKTsKKworICBzaXplX3R5cGUgb3JkID0gMDsKKworICB3aGlsZSAoaXQgIT0gZW5kX2l0KQorICAgIHsKKyAgICAgIGNvbnN0X25vZGVfaXRlcmF0b3IgbF9pdCA9IGl0LmdldF9sX2NoaWxkKCk7CisKKyAgICAgIGlmIChyX2NtcF9mbihyX2tleSwgZXh0cmFjdF9rZXkoKigqaXQpKSkpCisJaXQgPSBsX2l0OworICAgICAgZWxzZSBpZiAocl9jbXBfZm4oZXh0cmFjdF9rZXkoKigqaXQpKSwgcl9rZXkpKQorICAgICAgICB7CisKKwkgIG9yZCArPSAobF9pdCA9PSBlbmRfaXQpPworCSAgICAxIDoKKwkgICAgMSArIGxfaXQuZ2V0X21ldGFkYXRhKCk7CisKKwkgIGl0ID0gaXQuZ2V0X3JfY2hpbGQoKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisJICBvcmQgKz0gKGxfaXQgPT0gZW5kX2l0KT8KKwkgICAgMCA6CisJICAgIGxfaXQuZ2V0X21ldGFkYXRhKCk7CisKKwkgIGl0ID0gZW5kX2l0OworICAgICAgICB9CisgICAgfQorCisgIHJldHVybiAob3JkKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitvcGVyYXRvcigpKG5vZGVfaXRlcmF0b3Igbm9kZV9pdCwgY29uc3Rfbm9kZV9pdGVyYXRvciBlbmRfbmRfaXQpIGNvbnN0Cit7CisgIG5vZGVfaXRlcmF0b3IgbF9jaGlsZF9pdCA9IG5vZGVfaXQuZ2V0X2xfY2hpbGQoKTsKKyAgY29uc3Qgc2l6ZV90eXBlIGxfcmFuayA9KGxfY2hpbGRfaXQgPT0gZW5kX25kX2l0KT8gMCA6IGxfY2hpbGRfaXQuZ2V0X21ldGFkYXRhKCk7CisKKyAgbm9kZV9pdGVyYXRvciByX2NoaWxkX2l0ID0gbm9kZV9pdC5nZXRfcl9jaGlsZCgpOworICBjb25zdCBzaXplX3R5cGUgcl9yYW5rID0ocl9jaGlsZF9pdCA9PSBlbmRfbmRfaXQpPyAwIDogcl9jaGlsZF9pdC5nZXRfbWV0YWRhdGEoKTsKKworICBjb25zdF9jYXN0PG1ldGFkYXRhX3JlZmVyZW5jZT4obm9kZV9pdC5nZXRfbWV0YWRhdGEoKSk9CisgICAgMSArIGxfcmFuayArIHJfcmFuazsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK350cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGUoKQoreyB9CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdHJlZV9wb2xpY3kvc2FtcGxlX3RyZWVfbm9kZV91cGRhdGUuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3RyZWVfcG9saWN5L3NhbXBsZV90cmVlX25vZGVfdXBkYXRlLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWE2ODk5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3RyZWVfcG9saWN5L3NhbXBsZV90cmVlX25vZGVfdXBkYXRlLmhwcApAQCAtMCwwICsxLDcyIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBzYW1wbGVfdHJlZV9ub2RlX3VwZGF0ZS5ocHAKKyAqIENvbnRhaW5zIGEgc2FtbGUgbm9kZSB1cGRhdGUgZnVuY3Rvci4KKyAqLworCisjaWZuZGVmIFBCX0RTX1NBTVBMRV9UUkVFX05PREVfVVBEQVRPUl9IUFAKKyNkZWZpbmUgUEJfRFNfU0FNUExFX1RSRUVfTk9ERV9VUERBVE9SX0hQUAorCisvLyBBIHNhbXBsZSBub2RlIHVwZGF0b3IuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb25zdF9Ob2RlX0l0ZXJhdG9yLAorCisJIGNsYXNzIE5vZGVfSXRlcmF0b3IsCisKKwkgY2xhc3MgQ21wX0ZuLAorCisJIGNsYXNzIEFsbG9jYXRvcgorCSA+CitjbGFzcyBzYW1wbGVfdHJlZV9ub2RlX3VwZGF0ZQoreworCitwdWJsaWM6CisKKyAgLy8gTWV0YWRhdGEgdHlwZS4KKyAgdHlwZWRlZiBzaXplX3QgbWV0YWRhdGFfdHlwZTsKKworcHJvdGVjdGVkOgorCisgIC8vIERlZmF1bHQgY29uc3RydWN0b3IuCisgIHNhbXBsZV90cmVlX25vZGVfdXBkYXRlKCk7CisKKyAgLy8gVXBkYXRlcyB0aGUgcmFuayBvZiBhIG5vZGUgdGhyb3VnaCBhIG5vZGVfaXRlcmF0b3Igbm9kZV9pdDsgZW5kX25kX2l0IGlzIHRoZSBlbmQgbm9kZSBpdGVyYXRvci4KKyAgaW5saW5lIHZvaWQKKyAgb3BlcmF0b3IoKShub2RlX2l0ZXJhdG9yIG5vZGVfaXQsIGNvbnN0X25vZGVfaXRlcmF0b3IgZW5kX25kX2l0KSBjb25zdDsKKworfTsKKworI2VuZGlmIC8vICNpZm5kZWYgUEJfRFNfU0FNUExFX1RSRUVfTk9ERV9VUERBVE9SX0hQUApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3RyZWVfdHJhY2VfYmFzZS5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdHJlZV90cmFjZV9iYXNlLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGJkNjU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3RyZWVfdHJhY2VfYmFzZS5ocHAKQEAgLTAsMCArMSwyMDkgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHRyZWVfdHJhY2VfYmFzZS5ocHAKKyAqIENvbnRhaW5zIHRyZWUtcmVsYXRlZCBwb2xpY2llcy4KKyAqLworCisjaWZuZGVmIFBCX0RTX1RSRUVfVFJBQ0VfQkFTRV9IUFAKKyNkZWZpbmUgUEJfRFNfVFJFRV9UUkFDRV9CQVNFX0hQUAorCisjaWZkZWYgUEJfRFNfVFJFRV9UUkFDRQorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iYXNpY190cmVlX3BvbGljeS9iYXNpY190cmVlX3BvbGljeV9iYXNlLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2Jhc2ljX3RyZWVfcG9saWN5L251bGxfbm9kZV9tZXRhZGF0YS5ocHA+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisKKyNpZmRlZiBQQl9EU19UUkVFX1RSQUNFCisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMJCQkJCQlcCisgICAgdGVtcGxhdGU8CQkJCQkJCQlcCisJCQkJCQljbGFzcyBDb25zdF9Ob2RlX0l0ZXJhdG9yLCBcCisJCQkJCQljbGFzcyBOb2RlX0l0ZXJhdG9yLAlcCisJCQkJCQljbGFzcyBDbXBfRm4sCQlcCisJCQkJCQlib29sIE5vZGVfQmFzZWQsCVwKKwkJCQkJCWNsYXNzIEFsbG9jYXRvcj4KKworI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQwkJCQkJCVwKKyAgICB0cmVlX3RyYWNlX2Jhc2U8CQkJCQkJCVwKKwkJCQkJCUNvbnN0X05vZGVfSXRlcmF0b3IsCVwKKwkJCQkJCU5vZGVfSXRlcmF0b3IsCQlcCisJCQkJCQlDbXBfRm4sCQkJXAorCQkJCQkJTm9kZV9CYXNlZCwJCVwKKwkJCQkJCUFsbG9jYXRvcj4KKworI2RlZmluZSBQQl9EU19CQVNFX0NfREVDCQkJCQkJXAorICAgIGJhc2ljX3RyZWVfcG9saWN5X2Jhc2U8CQkJCVwKKwkJCQkJCQkJQ29uc3RfTm9kZV9JdGVyYXRvciwgXAorCQkJCQkJCQlOb2RlX0l0ZXJhdG9yLCBcCisJCQkJCQkJCUFsbG9jYXRvcj4KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnN0X05vZGVfSXRlcmF0b3IsCisJICAgICBjbGFzcyBOb2RlX0l0ZXJhdG9yLAorCSAgICAgY2xhc3MgQ21wX0ZuLAorCSAgICAgYm9vbCBOb2RlX0Jhc2VkLAorCSAgICAgY2xhc3MgQWxsb2NhdG9yPgorICAgIGNsYXNzIHRyZWVfdHJhY2VfYmFzZSA6IHByaXZhdGUgUEJfRFNfQkFTRV9DX0RFQworICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB2b2lkCisgICAgICB0cmFjZSgpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgUEJfRFNfQkFTRV9DX0RFQyBiYXNlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgQ29uc3RfTm9kZV9JdGVyYXRvciBjb25zdF9ub2RlX2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6c2l6ZV90eXBlIHNpemVfdHlwZTsKKworICAgIHByaXZhdGU6CisgICAgICB2b2lkCisgICAgICB0cmFjZV9ub2RlKGNvbnN0X25vZGVfaXRlcmF0b3IgbmRfaXQsIHNpemVfdHlwZSBsZXZlbCkgY29uc3Q7CisKKyAgICAgIHZpcnR1YWwgYm9vbAorICAgICAgZW1wdHkoKSBjb25zdCA9IDA7CisKKyAgICAgIHZpcnR1YWwgY29uc3Rfbm9kZV9pdGVyYXRvcgorICAgICAgbm9kZV9iZWdpbigpIGNvbnN0ID0gMDsKKworICAgICAgdmlydHVhbCBjb25zdF9ub2RlX2l0ZXJhdG9yCisgICAgICBub2RlX2VuZCgpIGNvbnN0ID0gMDsKKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIHByaW50X25vZGVfcG9pbnRlcihDb25zdF9Ob2RlX0l0ZXJhdG9yIG5kX2l0LCBpbnRlZ3JhbF9jb25zdGFudDxpbnQsdHJ1ZT4pOworCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgcHJpbnRfbm9kZV9wb2ludGVyKENvbnN0X05vZGVfSXRlcmF0b3IgbmRfaXQsIGludGVncmFsX2NvbnN0YW50PGludCxmYWxzZT4pOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YV8+CisgICAgICBzdGF0aWMgdm9pZAorICAgICAgdHJhY2VfaXRfbWV0YWRhdGEoQ29uc3RfTm9kZV9JdGVyYXRvciBuZF9pdCwgdHlwZV90b190eXBlPE1ldGFkYXRhXz4pOworCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgdHJhY2VfaXRfbWV0YWRhdGEoQ29uc3RfTm9kZV9JdGVyYXRvciwgdHlwZV90b190eXBlPG51bGxfbm9kZV9tZXRhZGF0YT4pOworICAgIH07CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgdHJhY2UoKSBjb25zdAorICAgIHsKKyAgICAgIGlmIChlbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAgIHRyYWNlX25vZGUobm9kZV9iZWdpbigpLCAwKTsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgdHJhY2Vfbm9kZShjb25zdF9ub2RlX2l0ZXJhdG9yIG5kX2l0LCBzaXplX3R5cGUgbGV2ZWwpIGNvbnN0CisgICAgeworICAgICAgaWYgKG5kX2l0LmdldF9yX2NoaWxkKCkgIT0gbm9kZV9lbmQoKSkKKyAgICAgICAgdHJhY2Vfbm9kZShuZF9pdC5nZXRfcl9jaGlsZCgpLCBsZXZlbCArIDEpOworCisgICAgICBmb3IgKHNpemVfdHlwZSBpID0gMDsgaSA8IGxldmVsOyArK2kpCisgICAgICAgIHN0ZDo6Y2VyciA8PCAnICc7CisKKyAgICAgIHByaW50X25vZGVfcG9pbnRlcihuZF9pdCwgaW50ZWdyYWxfY29uc3RhbnQ8aW50LE5vZGVfQmFzZWQ+KCkpOworICAgICAgc3RkOjpjZXJyIDw8IGJhc2VfdHlwZTo6ZXh0cmFjdF9rZXkoKigqbmRfaXQpKTsKKworICAgICAgdHlwZWRlZgorICAgICAgICB0eXBlX3RvX3R5cGU8CisJdHlwZW5hbWUgY29uc3Rfbm9kZV9pdGVyYXRvcjo6bWV0YWRhdGFfdHlwZT4KKyAgICAgICAgbV90eXBlX2luZF90OworCisgICAgICB0cmFjZV9pdF9tZXRhZGF0YShuZF9pdCwgbV90eXBlX2luZF90KCkpOworCisgICAgICBzdGQ6OmNlcnIgPDwgc3RkOjplbmRsOworCisgICAgICBpZiAobmRfaXQuZ2V0X2xfY2hpbGQoKSAhPSBub2RlX2VuZCgpKQorICAgICAgICB0cmFjZV9ub2RlKG5kX2l0LmdldF9sX2NoaWxkKCksIGxldmVsICsgMSk7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YV8+CisgICAgdm9pZAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICB0cmFjZV9pdF9tZXRhZGF0YShDb25zdF9Ob2RlX0l0ZXJhdG9yIG5kX2l0LCB0eXBlX3RvX3R5cGU8TWV0YWRhdGFfPikKKyAgICB7CisgICAgICBzdGQ6OmNlcnIgPDwgIiAoIiA8PAorICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihuZF9pdC5nZXRfbWV0YWRhdGEoKSkgPDwgIikgIjsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgdHJhY2VfaXRfbWV0YWRhdGEoQ29uc3RfTm9kZV9JdGVyYXRvciwgdHlwZV90b190eXBlPG51bGxfbm9kZV9tZXRhZGF0YT4pCisgICAgeyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcHJpbnRfbm9kZV9wb2ludGVyKENvbnN0X05vZGVfSXRlcmF0b3IgbmRfaXQsIGludGVncmFsX2NvbnN0YW50PGludCx0cnVlPikKKyAgICB7CisgICAgICBzdGQ6OmNlcnIgPDwgbmRfaXQubV9wX25kIDw8ICIgIjsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcHJpbnRfbm9kZV9wb2ludGVyKENvbnN0X05vZGVfSXRlcmF0b3IgbmRfaXQsIGludGVncmFsX2NvbnN0YW50PGludCxmYWxzZT4pCisgICAgeworICAgICAgc3RkOjpjZXJyIDw8KiBuZF9pdCA8PCAiICI7CisgICAgfQorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKworI3VuZGVmIFBCX0RTX0NMQVNTX0NfREVDCisKKyN1bmRlZiBQQl9EU19CQVNFX0NfREVDCisKKyNlbmRpZiAvLyAjaWZkZWYgICAgUEJfRFNfVFJFRV9UUkFDRQorCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAvLyAjaWZkZWYgUEJfRFNfVFJFRV9UUkFDRQorCisjZW5kaWYgLy8gI2lmbmRlZiBQQl9EU19UUkVFX1RSQUNFX0JBU0VfSFBQCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC90cmllX3BvbGljeS9ub2RlX21ldGFkYXRhX3NlbGVjdG9yLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC90cmllX3BvbGljeS9ub2RlX21ldGFkYXRhX3NlbGVjdG9yLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGRlMzFmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3RyaWVfcG9saWN5L25vZGVfbWV0YWRhdGFfc2VsZWN0b3IuaHBwCkBAIC0wLDAgKzEsMTE2IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBub2RlX21ldGFkYXRhX3NlbGVjdG9yLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIHRyaWVzLgorICovCisKKyNpZm5kZWYgUEJfRFNfVFJJRV9OT0RFX01FVEFEQVRBX1NFTEVDVE9SX0hQUAorI2RlZmluZSBQQl9EU19UUklFX05PREVfTUVUQURBVEFfU0VMRUNUT1JfSFBQCisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2Jhc2ljX3RyZWVfcG9saWN5L251bGxfbm9kZV9tZXRhZGF0YS5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90eXBlc190cmFpdHMuaHBwPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGVfVXBkYXRlLCBib29sIE51bGw+CisgICAgc3RydWN0IHRyaWVfbWV0YWRhdGFfaGVscGVyCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBOb2RlX1VwZGF0ZTo6bWV0YWRhdGFfdHlwZSB0eXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX1VwZGF0ZT4KKyAgICBzdHJ1Y3QgdHJpZV9tZXRhZGF0YV9oZWxwZXI8CisgICAgICBOb2RlX1VwZGF0ZSwKKyAgICAgIHRydWU+CisgICAgeworICAgICAgdHlwZWRlZiBudWxsX25vZGVfbWV0YWRhdGEgdHlwZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LAorCSAgICAgdHlwZW5hbWUgRGF0YSwKKwkgICAgIGNsYXNzIENtcF9GbiwKKwkgICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnN0X05vZGVfSXRlcmF0b3IsCisJCSAgICAgIGNsYXNzIENvbnN0X0l0ZXJhdG9yLAorCQkgICAgICBjbGFzcyBDbXBfRm5fLAorCQkgICAgICBjbGFzcyBBbGxvY2F0b3JfPgorICAgIGNsYXNzIE5vZGVfVXBkYXRlLAorCSAgICAgY2xhc3MgQWxsb2NhdG9yPgorICAgIHN0cnVjdCB0cmllX25vZGVfbWV0YWRhdGFfc2VsZWN0b3IKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYKKyAgICAgIGR1bWNvbnN0X25vZGVfaXRlcmF0b3I8CisgICAgICBLZXksCisgICAgICBEYXRhLAorICAgICAgQWxsb2NhdG9yPgorICAgICAgZHVtY29uc3Rfbm9kZV9pdDsKKworICAgICAgZW51bQorCXsKKwkgIG51bGxfdXBkYXRlID0KKwkgIGlzX3NhbWU8CisJICBOb2RlX1VwZGF0ZTwKKwkgIGR1bWNvbnN0X25vZGVfaXQsCisJICBkdW1jb25zdF9ub2RlX2l0LAorCSAgQ21wX0ZuLAorCSAgQWxsb2NhdG9yPiwKKwkgIG51bGxfdHJpZV9ub2RlX3VwZGF0ZTwKKwkgIGR1bWNvbnN0X25vZGVfaXQsCisJICBkdW1jb25zdF9ub2RlX2l0LAorCSAgQ21wX0ZuLAorCSAgQWxsb2NhdG9yPiA+Ojp2YWx1ZQorCX07CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSB0cmllX21ldGFkYXRhX2hlbHBlcjwKKyAgICAgIE5vZGVfVXBkYXRlPAorICAgICAgZHVtY29uc3Rfbm9kZV9pdCwKKyAgICAgIGR1bWNvbnN0X25vZGVfaXQsCisgICAgICBDbXBfRm4sCisgICAgICBBbGxvY2F0b3I+LAorICAgICAgbnVsbF91cGRhdGU+Ojp0eXBlCisgICAgICB0eXBlOworICAgIH07CisKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAvLyAjaWZuZGVmIFBCX0RTX1RSSUVfTk9ERV9NRVRBREFUQV9TRUxFQ1RPUl9IUFAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC90cmllX3BvbGljeS9udWxsX25vZGVfdXBkYXRlX2ltcC5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdHJpZV9wb2xpY3kvbnVsbF9ub2RlX3VwZGF0ZV9pbXAuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MjQ1ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdHJpZV9wb2xpY3kvbnVsbF9ub2RlX3VwZGF0ZV9pbXAuaHBwCkBAIC0wLDAgKzEsNTAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIG51bGxfbm9kZV91cGRhdGVfaW1wLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gb2YgbnVsbF9ub2RlX3VwZGF0ZS4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgQ29uc3RfTm9kZV9JdGVyYXRvcl8sCisJIHR5cGVuYW1lIE5vZGVfSXRlcmF0b3JfLAorCSBjbGFzcyAgICBFX0FjY2Vzc19UcmFpdHNfLAorCSB0eXBlbmFtZSBBbGxvY2F0b3JfPgoraW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3N3YXAobnVsbF90cmllX25vZGVfdXBkYXRlPCAgICAgICAgICAgIENvbnN0X05vZGVfSXRlcmF0b3JfLCBOb2RlX0l0ZXJhdG9yXywgRV9BY2Nlc3NfVHJhaXRzXywgQWxsb2NhdG9yXz4mIC8qb3RoZXIqLykKK3sgfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdHJpZV9wb2xpY3kvb3JkZXJfc3RhdGlzdGljc19pbXAuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3RyaWVfcG9saWN5L29yZGVyX3N0YXRpc3RpY3NfaW1wLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTI3YWMyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3RyaWVfcG9saWN5L29yZGVyX3N0YXRpc3RpY3NfaW1wLmhwcApAQCAtMCwwICsxLDE4MyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgb3JkZXJfc3RhdGlzdGljc19pbXAuaHBwCisgKiBDb250YWlucyBmb3J3YXJkIGRlY2xhcmF0aW9ucyBmb3Igb3JkZXJfc3RhdGlzdGljc19rZXkKKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjppdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZmluZF9ieV9vcmRlcihzaXplX3R5cGUgb3JkZXIpCit7CisgIGlmIChlbXB0eSgpKQorICAgIHJldHVybiAoZW5kKCkpOworCisgICsrb3JkZXI7CisKKyAgbm9kZV9pdGVyYXRvciBuZF9pdCA9IG5vZGVfYmVnaW4oKTsKKworICBub2RlX2l0ZXJhdG9yIGVuZF9uZF9pdCA9IG5vZGVfZW5kKCk7CisKKyAgd2hpbGUgKHRydWUpCisgICAgeworICAgICAgaWYgKG9yZGVyID4gbmRfaXQuZ2V0X21ldGFkYXRhKCkpCisJcmV0dXJuICgrK2Jhc2VfdHlwZTo6cmlnaHRtb3N0X2l0KG5kX2l0KSk7CisKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBudW1fY2hpbGRyZW4gPSBuZF9pdC5udW1fY2hpbGRyZW4oKTsKKworICAgICAgaWYgKG51bV9jaGlsZHJlbiA9PSAwKQorCXJldHVybiAoKm5kX2l0KTsKKworICAgICAgZm9yIChzaXplX3R5cGUgaSA9IDA7IGkgPCBudW1fY2hpbGRyZW47ICsraSkKKyAgICAgICAgeworCSAgbm9kZV9pdGVyYXRvciBjaGlsZF9uZF9pdCA9IG5kX2l0LmdldF9jaGlsZChpKTsKKworCSAgaWYgKG9yZGVyIDw9IGNoaWxkX25kX2l0LmdldF9tZXRhZGF0YSgpKQorICAgICAgICAgICAgeworCSAgICAgIGkgPSBudW1fY2hpbGRyZW47CisKKwkgICAgICBuZF9pdCA9IGNoaWxkX25kX2l0OworICAgICAgICAgICAgfQorCSAgZWxzZQorCSAgICBvcmRlciAtPSBjaGlsZF9uZF9pdC5nZXRfbWV0YWRhdGEoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2ZpbmRfYnlfb3JkZXIoc2l6ZV90eXBlIG9yZGVyKSBjb25zdAoreworICByZXR1cm4gKGNvbnN0X2Nhc3Q8UEJfRFNfQ0xBU1NfQ19ERUMqID4odGhpcyktPmZpbmRfYnlfb3JkZXIob3JkZXIpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitvcmRlcl9vZl9rZXkoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSkgY29uc3QKK3sKKyAgY29uc3QgRV9BY2Nlc3NfVHJhaXRzJiByX3RyYWl0cyA9CisgICAgY29uc3RfY2FzdDxQQl9EU19DTEFTU19DX0RFQyogPih0aGlzKS0+Z2V0X2VfYWNjZXNzX3RyYWl0cygpOworCisgIHJldHVybiAob3JkZXJfb2ZfcHJlZml4KAorCQkJICByX3RyYWl0cy5iZWdpbihyX2tleSksCisJCQkgIHJfdHJhaXRzLmVuZChyX2tleSkpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitvcmRlcl9vZl9wcmVmaXgodHlwZW5hbWUgZV9hY2Nlc3NfdHJhaXRzOjpjb25zdF9pdGVyYXRvciBiLCB0eXBlbmFtZSBlX2FjY2Vzc190cmFpdHM6OmNvbnN0X2l0ZXJhdG9yIGUpIGNvbnN0Cit7CisgIGlmIChlbXB0eSgpKQorICAgIHJldHVybiAoMCk7CisKKyAgY29uc3QgRV9BY2Nlc3NfVHJhaXRzJiByX3RyYWl0cyA9CisgICAgY29uc3RfY2FzdDxQQl9EU19DTEFTU19DX0RFQyogPih0aGlzKS0+Z2V0X2VfYWNjZXNzX3RyYWl0cygpOworCisgIGNvbnN0X25vZGVfaXRlcmF0b3IgbmRfaXQgPSBub2RlX2JlZ2luKCk7CisKKyAgY29uc3Rfbm9kZV9pdGVyYXRvciBlbmRfbmRfaXQgPSBub2RlX2VuZCgpOworCisgIHNpemVfdHlwZSBvcmQgPSAwOworCisgIHdoaWxlICh0cnVlKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBudW1fY2hpbGRyZW4gPSBuZF9pdC5udW1fY2hpbGRyZW4oKTsKKworICAgICAgaWYgKG51bV9jaGlsZHJlbiA9PSAwKQorICAgICAgICB7CisJICBjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5ID0KKwkgICAgYmFzZV90eXBlOjpleHRyYWN0X2tleSgqKCpuZF9pdCkpOworCisJICB0eXBlbmFtZSBlX2FjY2Vzc190cmFpdHM6OmNvbnN0X2l0ZXJhdG9yIGtleV9iID0KKwkgICAgcl90cmFpdHMuYmVnaW4ocl9rZXkpOworCisJICB0eXBlbmFtZSBlX2FjY2Vzc190cmFpdHM6OmNvbnN0X2l0ZXJhdG9yIGtleV9lID0KKwkgICAgcl90cmFpdHMuZW5kKHJfa2V5KTsKKworCSAgcmV0dXJuICgoYmFzZV90eXBlOjpsZXNzKCAgICAgICAgICAgICAgICAgICAga2V5X2IsIGtleV9lLCAgYiwgZSwgIHJfdHJhaXRzKSk/CisJCSAgb3JkICsgMSA6CisJCSAgb3JkKTsKKyAgICAgICAgfQorCisgICAgICBjb25zdF9ub2RlX2l0ZXJhdG9yIG5leHRfbmRfaXQgPSBlbmRfbmRfaXQ7CisKKyAgICAgIHNpemVfdHlwZSBpID0gbnVtX2NoaWxkcmVuIC0gMTsKKworICAgICAgZG8KKyAgICAgICAgeworCSAgY29uc3Rfbm9kZV9pdGVyYXRvciBjaGlsZF9uZF9pdCA9IG5kX2l0LmdldF9jaGlsZChpKTsKKworCSAgaWYgKG5leHRfbmRfaXQgIT0gZW5kX25kX2l0KQorCSAgICBvcmQgKz0gY2hpbGRfbmRfaXQuZ2V0X21ldGFkYXRhKCk7CisJICBlbHNlIGlmICghYmFzZV90eXBlOjpsZXNzKAorCQkJCSAgICBiLCBlLAorCQkJCSAgICBjaGlsZF9uZF9pdC52YWxpZF9wcmVmaXgoKS5maXJzdCwKKwkJCQkgICAgY2hpbGRfbmRfaXQudmFsaWRfcHJlZml4KCkuc2Vjb25kLAorCQkJCSAgICByX3RyYWl0cykpCisJICAgIG5leHRfbmRfaXQgPSBjaGlsZF9uZF9pdDsKKyAgICAgICAgfQorICAgICAgd2hpbGUgKGktLSA+IDApOworCisgICAgICBpZiAobmV4dF9uZF9pdCA9PSBlbmRfbmRfaXQpCisJcmV0dXJuIChvcmQpOworCisgICAgICBuZF9pdCA9IG5leHRfbmRfaXQ7CisgICAgfQorfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK29wZXJhdG9yKCkobm9kZV9pdGVyYXRvciBuZF9pdCwgY29uc3Rfbm9kZV9pdGVyYXRvciAvKmVuZF9uZF9pdCovKSBjb25zdAoreworICBjb25zdCBzaXplX3R5cGUgbnVtX2NoaWxkcmVuID0gbmRfaXQubnVtX2NoaWxkcmVuKCk7CisKKyAgc2l6ZV90eXBlIGNoaWxkcmVuX3JhbmsgPSAwOworCisgIGZvciAoc2l6ZV90eXBlIGkgPSAwOyBpIDwgbnVtX2NoaWxkcmVuOyArK2kpCisgICAgY2hpbGRyZW5fcmFuayArPSBuZF9pdC5nZXRfY2hpbGQoaSkuZ2V0X21ldGFkYXRhKCk7CisKKyAgY29uc3RfY2FzdDxzaXplX3R5cGUmID4obmRfaXQuZ2V0X21ldGFkYXRhKCkpID0obnVtX2NoaWxkcmVuID09IDApPyAxIDogY2hpbGRyZW5fcmFuazsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK350cmllX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGUoKQoreyB9CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdHJpZV9wb2xpY3kvcHJlZml4X3NlYXJjaF9ub2RlX3VwZGF0ZV9pbXAuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3RyaWVfcG9saWN5L3ByZWZpeF9zZWFyY2hfbm9kZV91cGRhdGVfaW1wLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGQ4OTg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3RyaWVfcG9saWN5L3ByZWZpeF9zZWFyY2hfbm9kZV91cGRhdGVfaW1wLmhwcApAQCAtMCwwICsxLDE1MSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcHJlZml4X3NlYXJjaF9ub2RlX3VwZGF0ZV9pbXAuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBwcmVmaXhfc2VhcmNoX25vZGVfdXBkYXRlLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitzdGQ6OnBhaXI8CisgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9pdGVyYXRvciwKKyAgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2l0ZXJhdG9yPgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcHJlZml4X3JhbmdlKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpIGNvbnN0Cit7CisgIGNvbnN0IGVfYWNjZXNzX3RyYWl0cyYgcl90cmFpdHMgPSBnZXRfZV9hY2Nlc3NfdHJhaXRzKCk7CisKKyAgcmV0dXJuIChwcmVmaXhfcmFuZ2UoCisJCSAgICAgICByX3RyYWl0cy5iZWdpbihyX2tleSksCisJCSAgICAgICByX3RyYWl0cy5lbmQocl9rZXkpKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitzdGQ6OnBhaXI8CisgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjppdGVyYXRvciwKKyAgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yPgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcHJlZml4X3JhbmdlKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpCit7CisgIHJldHVybiAocHJlZml4X3JhbmdlKAorCQkgICAgICAgZ2V0X2VfYWNjZXNzX3RyYWl0cygpLmJlZ2luKHJfa2V5KSwKKwkJICAgICAgIGdldF9lX2FjY2Vzc190cmFpdHMoKS5lbmQocl9rZXkpKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitzdGQ6OnBhaXI8CisgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9pdGVyYXRvciwKKyAgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2l0ZXJhdG9yPgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcHJlZml4X3JhbmdlKHR5cGVuYW1lIGVfYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IgYiwgdHlwZW5hbWUgZV9hY2Nlc3NfdHJhaXRzOjpjb25zdF9pdGVyYXRvciBlKSBjb25zdAoreworICBjb25zdCBzdGQ6OnBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPiBub25fY29uc3RfcmV0ID0KKyAgICBjb25zdF9jYXN0PFBCX0RTX0NMQVNTX0NfREVDKiA+KHRoaXMpLT5wcmVmaXhfcmFuZ2UoYiwgZSk7CisKKyAgcmV0dXJuIChzdGQ6Om1ha2VfcGFpcigKKwkJCSBjb25zdF9pdGVyYXRvcihub25fY29uc3RfcmV0LmZpcnN0KSwKKwkJCSBjb25zdF9pdGVyYXRvcihub25fY29uc3RfcmV0LnNlY29uZCkpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3N0ZDo6cGFpcjwKKyAgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yLAorICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6aXRlcmF0b3I+CitQQl9EU19DTEFTU19DX0RFQzo6CitwcmVmaXhfcmFuZ2UodHlwZW5hbWUgZV9hY2Nlc3NfdHJhaXRzOjpjb25zdF9pdGVyYXRvciBiLCB0eXBlbmFtZSBlX2FjY2Vzc190cmFpdHM6OmNvbnN0X2l0ZXJhdG9yIGUpCit7CisgIE5vZGVfSXRlcmF0b3IgbmRfaXQgPSBub2RlX2JlZ2luKCk7CisgIE5vZGVfSXRlcmF0b3IgZW5kX25kX2l0ID0gbm9kZV9lbmQoKTsKKworICBjb25zdCBlX2FjY2Vzc190cmFpdHMmIHJfdHJhaXRzID0KKyAgICBnZXRfZV9hY2Nlc3NfdHJhaXRzKCk7CisKKyAgY29uc3Qgc2l6ZV90eXBlIGdpdmVuX3JhbmdlX2xlbmd0aCA9IHN0ZDo6ZGlzdGFuY2UoYiwgZSk7CisKKyAgd2hpbGUgKHRydWUpCisgICAgeworICAgICAgaWYgKG5kX2l0ID09IGVuZF9uZF9pdCkKKwlyZXR1cm4gKHN0ZDo6bWFrZV9wYWlyKGVuZCgpLCBlbmQoKSkpOworCisgICAgICBjb25zdCBzaXplX3R5cGUgY29tbW9uX3JhbmdlX2xlbmd0aCA9CisJUEJfRFNfQkFTRV9DX0RFQzo6Y29tbW9uX3ByZWZpeF9sZW4obmRfaXQsIGIsIGUsIHJfdHJhaXRzKTsKKworICAgICAgaWYgKGNvbW1vbl9yYW5nZV9sZW5ndGggPj0gZ2l2ZW5fcmFuZ2VfbGVuZ3RoKQorICAgICAgICB7CisJICBpdGVyYXRvciByZXRfYiA9IGxlZnRtb3N0X2l0KG5kX2l0KTsKKworCSAgaXRlcmF0b3IgcmV0X2UgPSByaWdodG1vc3RfaXQobmRfaXQpOworCisJICByZXR1cm4gKHN0ZDo6bWFrZV9wYWlyKHJldF9iLCArK3JldF9lKSk7CisgICAgICAgIH0KKworICAgICAgbmRfaXQgPSBuZXh0X2NoaWxkKG5kX2l0LCBiLCBlLCBlbmRfbmRfaXQsIHJfdHJhaXRzKTsKKyAgICB9Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorbmV4dF9jaGlsZChub2RlX2l0ZXJhdG9yIG5kX2l0LCB0eXBlbmFtZSBlX2FjY2Vzc190cmFpdHM6OmNvbnN0X2l0ZXJhdG9yIGIsIHR5cGVuYW1lIGVfYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IgZSwgbm9kZV9pdGVyYXRvciBlbmRfbmRfaXQsIGNvbnN0IGVfYWNjZXNzX3RyYWl0cyYgcl90cmFpdHMpCit7CisgIGNvbnN0IHNpemVfdHlwZSBudW1fY2hpbGRyZW4gPSBuZF9pdC5udW1fY2hpbGRyZW4oKTsKKworICBub2RlX2l0ZXJhdG9yIHJldCA9IGVuZF9uZF9pdDsKKworICBzaXplX3R5cGUgbWF4X2xlbmd0aCA9IDA7CisKKyAgZm9yIChzaXplX3R5cGUgaSA9IDA7IGkgPCBudW1fY2hpbGRyZW47ICsraSkKKyAgICB7CisgICAgICBub2RlX2l0ZXJhdG9yIHBvdCA9IG5kX2l0LmdldF9jaGlsZChpKTsKKworICAgICAgY29uc3Qgc2l6ZV90eXBlIGNvbW1vbl9yYW5nZV9sZW5ndGggPQorCVBCX0RTX0JBU0VfQ19ERUM6OmNvbW1vbl9wcmVmaXhfbGVuKCAgICAgICAgICAgIHBvdCwgYiwgZSwgcl90cmFpdHMpOworCisgICAgICBpZiAoY29tbW9uX3JhbmdlX2xlbmd0aCA+IG1heF9sZW5ndGgpCisgICAgICAgIHsKKwkgIHJldCA9IHBvdDsKKworCSAgbWF4X2xlbmd0aCA9IGNvbW1vbl9yYW5nZV9sZW5ndGg7CisgICAgICAgIH0KKyAgICB9CisKKyAgcmV0dXJuIChyZXQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK29wZXJhdG9yKCkobm9kZV9pdGVyYXRvciAvKm5kX2l0Ki8sIGNvbnN0X25vZGVfaXRlcmF0b3IgLyplbmRfbmRfaXQqLykgY29uc3QKK3sgfQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3RyaWVfcG9saWN5L3NhbXBsZV90cmllX2VfYWNjZXNzX3RyYWl0cy5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdHJpZV9wb2xpY3kvc2FtcGxlX3RyaWVfZV9hY2Nlc3NfdHJhaXRzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGZiZTBjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3RyaWVfcG9saWN5L3NhbXBsZV90cmllX2VfYWNjZXNzX3RyYWl0cy5ocHAKQEAgLTAsMCArMSw4OSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgc2FtcGxlX3RyaWVfZV9hY2Nlc3NfdHJhaXRzLmhwcAorICogQ29udGFpbnMgYSBzYW1wbGUgcHJvYmUgcG9saWN5LgorICovCisKKyNpZm5kZWYgUEJfRFNfU0FNUExFX1RSSUVfRV9BQ0NFU1NfVFJBSVRTX0hQUAorI2RlZmluZSBQQl9EU19TQU1QTEVfVFJJRV9FX0FDQ0VTU19UUkFJVFNfSFBQCisKKy8vIEEgc2FtcGxlIHRyaWUgZWxlbWVudC1hY2Nlc3MgdHJhaXRzLgorY2xhc3Mgc2FtcGxlX3RyaWVfZV9hY2Nlc3NfdHJhaXRzCit7CisKK3B1YmxpYzoKKworICAvLyBTaXplIHR5cGUuCisgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKKworICAvLyBLZXkgdHlwZS4KKyAgdHlwZWRlZiBzdGQ6OnN0cmluZyBrZXlfdHlwZTsKKworICAvLyBDb25zdCBrZXkgcmVmZXJlbmNlIHR5cGUuCisgIHR5cGVkZWYKKyAgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8CisgICAga2V5X3R5cGU+OjpvdGhlcjo6Y29uc3RfcmVmZXJlbmNlCisgIGNvbnN0X2tleV9yZWZlcmVuY2U7CisKKyAgLy8gRWxlbWVudCBjb25zdCBpdGVyYXRvciB0eXBlLgorICB0eXBlZGVmIHN0ZDo6c3RyaW5nOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKworICAvLyBFbGVtZW50IHR5cGUuCisgIHR5cGVkZWYgY2hhciBlX3R5cGU7CisKKyAgZW51bQorICAgIHsKKyAgICAgIG1heF9zaXplID0gNAorICAgIH07CisKK3B1YmxpYzoKKworICAvLyBSZXR1cm5zIGEgY29uc3RfaXRlcmF0b3IgdG8gdGhlIGZpcnN0IGVsZW1lbnQgb2Ygcl9rZXkuCisgIGlubGluZSBzdGF0aWMgY29uc3RfaXRlcmF0b3IKKyAgYmVnaW4oY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSk7CisKKyAgLy8gUmV0dXJucyBhIGNvbnN0X2l0ZXJhdG9yIHRvIHRoZSBhZnRlci1sYXN0IGVsZW1lbnQgb2Ygcl9rZXkuCisgIGlubGluZSBzdGF0aWMgY29uc3RfaXRlcmF0b3IKKyAgZW5kKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpOworCisgIC8vIE1hcHMgYW4gZWxlbWVudCB0byBhIHBvc2l0aW9uLgorICBpbmxpbmUgc3RhdGljIHNpemVfdHlwZQorICBlX3BvcyhlX3R5cGUgZSk7CisKK307CisKKyNlbmRpZiAvLyAjaWZuZGVmIFBCX0RTX1NBTVBMRV9UUklFX0VfQUNDRVNTX1RSQUlUU19IUFAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC90cmllX3BvbGljeS9zYW1wbGVfdHJpZV9ub2RlX3VwZGF0ZS5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdHJpZV9wb2xpY3kvc2FtcGxlX3RyaWVfbm9kZV91cGRhdGUuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZmQ5OTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdHJpZV9wb2xpY3kvc2FtcGxlX3RyaWVfbm9kZV91cGRhdGUuaHBwCkBAIC0wLDAgKzEsNzIgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHNhbXBsZV90cmllX25vZGVfdXBkYXRlLmhwcAorICogQ29udGFpbnMgYSBzYW1sZSBub2RlIHVwZGF0ZSBmdW5jdG9yLgorICovCisKKyNpZm5kZWYgUEJfRFNfU0FNUExFX1RSSUVfTk9ERV9VUERBVE9SX0hQUAorI2RlZmluZSBQQl9EU19TQU1QTEVfVFJJRV9OT0RFX1VQREFUT1JfSFBQCisKKy8vIEEgc2FtcGxlIG5vZGUgdXBkYXRvci4KK3RlbXBsYXRlPHR5cGVuYW1lIENvbnN0X05vZGVfSXRlcmF0b3IsCisKKwkgY2xhc3MgTm9kZV9JdGVyYXRvciwKKworCSBjbGFzcyBFX0FjY2Vzc19UcmFpdHMsCisKKwkgY2xhc3MgQWxsb2NhdG9yCisJID4KK2NsYXNzIHNhbXBsZV90cmllX25vZGVfdXBkYXRlCit7CisKK3B1YmxpYzoKKworICAvLyBNZXRhZGF0YSB0eXBlLgorICB0eXBlZGVmIHNpemVfdCBtZXRhZGF0YV90eXBlOworCitwcm90ZWN0ZWQ6CisKKyAgLy8gRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgc2FtcGxlX3RyaWVfbm9kZV91cGRhdGUoKTsKKworICAvLyBVcGRhdGVzIHRoZSByYW5rIG9mIGEgbm9kZSB0aHJvdWdoIGEgbm9kZV9pdGVyYXRvciBub2RlX2l0OyBlbmRfbmRfaXQgaXMgdGhlIGVuZCBub2RlIGl0ZXJhdG9yLgorICBpbmxpbmUgdm9pZAorICBvcGVyYXRvcigpKG5vZGVfaXRlcmF0b3Igbm9kZV9pdCwgY29uc3Rfbm9kZV9pdGVyYXRvciBlbmRfbmRfaXQpIGNvbnN0OworCit9OworCisjZW5kaWYgLy8gI2lmbmRlZiBQQl9EU19TQU1QTEVfVFJJRV9OT0RFX1VQREFUT1JfSFBQCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdHJpZV9wb2xpY3kvc3RyaW5nX3RyaWVfZV9hY2Nlc3NfdHJhaXRzX2ltcC5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdHJpZV9wb2xpY3kvc3RyaW5nX3RyaWVfZV9hY2Nlc3NfdHJhaXRzX2ltcC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI4YTRhNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC90cmllX3BvbGljeS9zdHJpbmdfdHJpZV9lX2FjY2Vzc190cmFpdHNfaW1wLmhwcApAQCAtMCwwICsxLDk5IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBzdHJpbmdfdHJpZV9lX2FjY2Vzc190cmFpdHNfaW1wLmhwcAorICogQ29udGFpbnMgYSBwb2xpY3kgZm9yIGV4dHJhY3RpbmcgY2hhcmFjdGVyIHBvc2l0aW9ucyBmcm9tCisgKiAgICBhIHN0cmluZyBmb3IgYSB2ZWN0b3ItYmFzZWQgUEFUUklDSUEgdHJlZQorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitkZXRhaWw6OmludGVncmFsX2NvbnN0YW50PGludCwgUmV2ZXJzZT4gUEJfRFNfQ0xBU1NfQ19ERUM6OnNfcmV2X2luZDsKKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitlX3BvcyhlX3R5cGUgZSkKK3sKKyAgcmV0dXJuIChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KGUgLSBtaW5fZV92YWwpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2JlZ2luKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXkpCit7CisgIHJldHVybiAoYmVnaW5faW1wKHJfa2V5LCBzX3Jldl9pbmQpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VuZChjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5KQoreworICByZXR1cm4gKGVuZF9pbXAocl9rZXksIHNfcmV2X2luZCkpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYmVnaW5faW1wKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXksIGRldGFpbDo6ZmFsc2VfdHlwZSkKK3sKKyAgcmV0dXJuIChyX2tleS5iZWdpbigpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2JlZ2luX2ltcChjb25zdF9rZXlfcmVmZXJlbmNlIHJfa2V5LCBkZXRhaWw6OnRydWVfdHlwZSkKK3sKKyAgcmV0dXJuIChyX2tleS5yYmVnaW4oKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitlbmRfaW1wKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXksIGRldGFpbDo6ZmFsc2VfdHlwZSkKK3sKKyAgcmV0dXJuIChyX2tleS5lbmQoKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitlbmRfaW1wKGNvbnN0X2tleV9yZWZlcmVuY2Ugcl9rZXksIGRldGFpbDo6dHJ1ZV90eXBlKQoreworICByZXR1cm4gKHJfa2V5LnJlbmQoKSk7Cit9CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdHJpZV9wb2xpY3kvdHJpZV9wb2xpY3lfYmFzZS5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdHJpZV9wb2xpY3kvdHJpZV9wb2xpY3lfYmFzZS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI5MTJhMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC90cmllX3BvbGljeS90cmllX3BvbGljeV9iYXNlLmhwcApAQCAtMCwwICsxLDI0OSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgdHJpZV9wb2xpY3lfYmFzZS5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIG9mIHRyaWVfcG9saWN5X2Jhc2UuCisgKi8KKworI2lmbmRlZiBQQl9EU19UUklFX1BPTElDWV9CQVNFX0hQUAorI2RlZmluZSBQQl9EU19UUklFX1BPTElDWV9CQVNFX0hQUAorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iYXNpY190cmVlX3BvbGljeS9iYXNpY190cmVlX3BvbGljeV9iYXNlLmhwcD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMJCQkJCQlcCisgICAgdGVtcGxhdGU8CQkJCQkJCQlcCisJCQkJCQljbGFzcyBDb25zdF9Ob2RlX0l0ZXJhdG9yLCBcCisJCQkJCQljbGFzcyBOb2RlX0l0ZXJhdG9yLAlcCisJCQkJCQljbGFzcyBFX0FjY2Vzc19UcmFpdHMsCVwKKwkJCQkJCXR5cGVuYW1lIEFsbG9jYXRvcj4KKworI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQwkJCQkJCVwKKyAgICB0cmllX3BvbGljeV9iYXNlPAkJCQkJCQlcCisJCQkJCQlDb25zdF9Ob2RlX0l0ZXJhdG9yLAlcCisJCQkJCQlOb2RlX0l0ZXJhdG9yLAkJXAorCQkJCQkJRV9BY2Nlc3NfVHJhaXRzLAlcCisJCQkJCQlBbGxvY2F0b3I+CisKKyNkZWZpbmUgUEJfRFNfQkFTRV9DX0RFQwkJCQkJCVwKKyAgICBiYXNpY190cmVlX3BvbGljeV9iYXNlPAkJCQlcCisJCQkJCQkJCUNvbnN0X05vZGVfSXRlcmF0b3IsIFwKKwkJCQkJCQkJTm9kZV9JdGVyYXRvciwgXAorCQkJCQkJCQlBbGxvY2F0b3I+CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25zdF9Ob2RlX0l0ZXJhdG9yLAorCSAgICAgY2xhc3MgTm9kZV9JdGVyYXRvciwKKwkgICAgIGNsYXNzIEVfQWNjZXNzX1RyYWl0cywKKwkgICAgIGNsYXNzIEFsbG9jYXRvcj4KKyAgICBjbGFzcyB0cmllX3BvbGljeV9iYXNlIDogcHVibGljIFBCX0RTX0JBU0VfQ19ERUMKKyAgICB7CisKKyAgICBwdWJsaWM6CisKKyAgICAgIHR5cGVkZWYgRV9BY2Nlc3NfVHJhaXRzIGVfYWNjZXNzX3RyYWl0czsKKworICAgICAgdHlwZWRlZiBBbGxvY2F0b3IgYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYWxsb2NhdG9yX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgbnVsbF9ub2RlX21ldGFkYXRhIG1ldGFkYXRhX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgQ29uc3RfTm9kZV9JdGVyYXRvciBjb25zdF9ub2RlX2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIE5vZGVfSXRlcmF0b3Igbm9kZV9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjb25zdF9ub2RlX2l0ZXJhdG9yOjp2YWx1ZV90eXBlIGNvbnN0X2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIG5vZGVfaXRlcmF0b3I6OnZhbHVlX3R5cGUgaXRlcmF0b3I7CisKKyAgICBwdWJsaWM6CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgUEJfRFNfQkFTRV9DX0RFQzo6a2V5X3R5cGUga2V5X3R5cGU7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIFBCX0RTX0JBU0VfQ19ERUM6OmNvbnN0X2tleV9yZWZlcmVuY2UKKyAgICAgIGNvbnN0X2tleV9yZWZlcmVuY2U7CisKKyAgICBwcm90ZWN0ZWQ6CisKKyAgICAgIHZpcnR1YWwgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0ID0gMDsKKworICAgICAgdmlydHVhbCBpdGVyYXRvcgorICAgICAgZW5kKCkgPSAwOworCisgICAgICB2aXJ0dWFsIGNvbnN0X25vZGVfaXRlcmF0b3IKKyAgICAgIG5vZGVfYmVnaW4oKSBjb25zdCA9IDA7CisKKyAgICAgIHZpcnR1YWwgbm9kZV9pdGVyYXRvcgorICAgICAgbm9kZV9iZWdpbigpID0gMDsKKworICAgICAgdmlydHVhbCBjb25zdF9ub2RlX2l0ZXJhdG9yCisgICAgICBub2RlX2VuZCgpIGNvbnN0ID0gMDsKKworICAgICAgdmlydHVhbCBub2RlX2l0ZXJhdG9yCisgICAgICBub2RlX2VuZCgpID0gMDsKKworICAgICAgdmlydHVhbCBjb25zdCBlX2FjY2Vzc190cmFpdHMmIAorICAgICAgZ2V0X2VfYWNjZXNzX3RyYWl0cygpIGNvbnN0ID0gMDsKKworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmCisgICAgICBzdGQ6OnBhaXI8CisgICAgICB0eXBlbmFtZSBlX2FjY2Vzc190cmFpdHM6OmNvbnN0X2l0ZXJhdG9yLAorICAgICAgdHlwZW5hbWUgZV9hY2Nlc3NfdHJhaXRzOjpjb25zdF9pdGVyYXRvcj4KKyAgICAgIHByZWZpeF9yYW5nZV90OworCisgICAgICB0eXBlZGVmIFBCX0RTX0JBU0VfQ19ERUMgYmFzZV90eXBlOworCisgICAgcHJvdGVjdGVkOgorICAgICAgc3RhdGljIHNpemVfdHlwZQorICAgICAgY29tbW9uX3ByZWZpeF9sZW4obm9kZV9pdGVyYXRvciBuZF9pdCwgdHlwZW5hbWUgZV9hY2Nlc3NfdHJhaXRzOjpjb25zdF9pdGVyYXRvciBiX3IsIHR5cGVuYW1lIGVfYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IgZV9yLCBjb25zdCBlX2FjY2Vzc190cmFpdHMmIHJfdHJhaXRzKTsKKworICAgICAgc3RhdGljIGl0ZXJhdG9yCisgICAgICBsZWZ0bW9zdF9pdChub2RlX2l0ZXJhdG9yIG5kX2l0KTsKKworICAgICAgc3RhdGljIGl0ZXJhdG9yCisgICAgICByaWdodG1vc3RfaXQobm9kZV9pdGVyYXRvciBuZF9pdCk7CisKKyAgICAgIHN0YXRpYyBib29sCisgICAgICBsZXNzKHR5cGVuYW1lIGVfYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IgYl9sLCB0eXBlbmFtZSBlX2FjY2Vzc190cmFpdHM6OmNvbnN0X2l0ZXJhdG9yIGVfbCwgdHlwZW5hbWUgZV9hY2Nlc3NfdHJhaXRzOjpjb25zdF9pdGVyYXRvciBiX3IsIHR5cGVuYW1lIGVfYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IgZV9yLCBjb25zdCBlX2FjY2Vzc190cmFpdHMmIHJfdHJhaXRzKTsKKyAgICB9OworCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIGNvbW1vbl9wcmVmaXhfbGVuKG5vZGVfaXRlcmF0b3IgbmRfaXQsIHR5cGVuYW1lIGVfYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IgYl9yLCB0eXBlbmFtZSBlX2FjY2Vzc190cmFpdHM6OmNvbnN0X2l0ZXJhdG9yIGVfciwgY29uc3QgZV9hY2Nlc3NfdHJhaXRzJiByX3RyYWl0cykKKyAgICB7CisgICAgICBwcmVmaXhfcmFuZ2VfdCBwcmVmX3JhbmdlID0gbmRfaXQudmFsaWRfcHJlZml4KCk7CisKKyAgICAgIHR5cGVuYW1lIGVfYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IgYl9sID0gcHJlZl9yYW5nZS5maXJzdDsKKyAgICAgIHR5cGVuYW1lIGVfYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IgZV9sID0gcHJlZl9yYW5nZS5zZWNvbmQ7CisKKyAgICAgIGNvbnN0IHNpemVfdHlwZSByYW5nZV9sZW5ndGhfbCA9CisJc3RkOjpkaXN0YW5jZShiX2wsIGVfbCk7CisKKyAgICAgIGNvbnN0IHNpemVfdHlwZSByYW5nZV9sZW5ndGhfciA9CisJc3RkOjpkaXN0YW5jZShiX3IsIGVfcik7CisKKyAgICAgIGlmIChyYW5nZV9sZW5ndGhfciA8IHJhbmdlX2xlbmd0aF9sKQorCXsKKwkgIHN0ZDo6c3dhcChiX2wsIGJfcik7CisKKwkgIHN0ZDo6c3dhcChlX2wsIGVfcik7CisJfQorCisgICAgICBzaXplX3R5cGUgcmV0ID0gMDsKKworICAgICAgd2hpbGUgKGJfbCAhPSBlX2wpCisJeworCSAgaWYgKHJfdHJhaXRzLmVfcG9zKCpiX2wpICE9IHJfdHJhaXRzLmVfcG9zKCpiX3IpKQorCSAgICByZXR1cm4gKHJldCk7CisKKwkgICsrcmV0OworCisJICArK2JfbDsKKworCSAgKytiX3I7CisJfQorCisgICAgICByZXR1cm4gKHJldCk7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6aXRlcmF0b3IKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgbGVmdG1vc3RfaXQobm9kZV9pdGVyYXRvciBuZF9pdCkKKyAgICB7CisgICAgICBpZiAobmRfaXQubnVtX2NoaWxkcmVuKCkgPT0gMCkKKwlyZXR1cm4gKCpuZF9pdCk7CisKKyAgICAgIHJldHVybiAobGVmdG1vc3RfaXQobmRfaXQuZ2V0X2NoaWxkKDApKSk7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6aXRlcmF0b3IKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcmlnaHRtb3N0X2l0KG5vZGVfaXRlcmF0b3IgbmRfaXQpCisgICAgeworICAgICAgY29uc3Qgc2l6ZV90eXBlIG51bV9jaGlsZHJlbiA9IG5kX2l0Lm51bV9jaGlsZHJlbigpOworCisgICAgICBpZiAobnVtX2NoaWxkcmVuID09IDApCisJcmV0dXJuICgqbmRfaXQpOworCisgICAgICByZXR1cm4gKHJpZ2h0bW9zdF9pdChuZF9pdC5nZXRfY2hpbGQobnVtX2NoaWxkcmVuIC0gMSkpKTsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIGJvb2wKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgbGVzcyh0eXBlbmFtZSBlX2FjY2Vzc190cmFpdHM6OmNvbnN0X2l0ZXJhdG9yIGJfbCwgdHlwZW5hbWUgZV9hY2Nlc3NfdHJhaXRzOjpjb25zdF9pdGVyYXRvciBlX2wsIHR5cGVuYW1lIGVfYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IgYl9yLCB0eXBlbmFtZSBlX2FjY2Vzc190cmFpdHM6OmNvbnN0X2l0ZXJhdG9yIGVfciwgY29uc3QgZV9hY2Nlc3NfdHJhaXRzJiByX3RyYWl0cykKKyAgICB7CisgICAgICB3aGlsZSAoYl9sICE9IGVfbCkKKwl7CisJICBpZiAoYl9yID09IGVfcikKKwkgICAgcmV0dXJuIChmYWxzZSk7CisKKwkgIHNpemVfdHlwZSBsX3BvcyA9CisJICAgIHJfdHJhaXRzLmVfcG9zKCpiX2wpOworCSAgc2l6ZV90eXBlIHJfcG9zID0KKwkgICAgcl90cmFpdHMuZV9wb3MoKmJfcik7CisKKwkgIGlmIChsX3BvcyAhPSByX3BvcykKKwkgICAgcmV0dXJuIChsX3BvcyA8IHJfcG9zKTsKKworCSAgKytiX2w7CisJICArK2JfcjsKKwl9CisKKyAgICAgIHJldHVybiAoYl9yICE9IGVfcik7CisgICAgfQorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKworI3VuZGVmIFBCX0RTX0NMQVNTX0NfREVDCisKKyN1bmRlZiBQQl9EU19CQVNFX0NfREVDCisKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAvLyAjaWZuZGVmIFBCX0RTX1RSSUVfUE9MSUNZX0JBU0VfSFBQCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC90eXBlX3V0aWxzLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC90eXBlX3V0aWxzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODJkMjFiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3R5cGVfdXRpbHMuaHBwCkBAIC0wLDAgKzEsMTY3IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSB0eXBlX3V0aWxzLmhwcAorICogQ29udGFpbnMgdXRpbGl0aWVzIGZvciBoYW5kbmxpbmcgdHlwZXMuIEFsbCBvZiB0aGVzZSBjbGFzc2VzIGFyZSBiYXNlZCBvbgorICogTW9kZXJuIEMrKyBieSBBbmRyZWkgQWx4YW5kcmVzY3UuCisgKi8KKworI2lmbmRlZiBQQl9EU19UWVBFX1VUSUxTX0hQUAorI2RlZmluZSBQQl9EU19UWVBFX1VUSUxTX0hQUAorCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHRyMS90eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDxleHQvdHlwZV90cmFpdHMuaD4KKyNpbmNsdWRlIDxleHQvbnVtZXJpY190cmFpdHMuaD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisgICAgdXNpbmcgc3RkOjp0cjE6OmlzX3NhbWU7CisgICAgdXNpbmcgc3RkOjp0cjE6OmlzX2NvbnN0OworICAgIHVzaW5nIHN0ZDo6dHIxOjppc19wb2ludGVyOworICAgIHVzaW5nIHN0ZDo6dHIxOjppc19yZWZlcmVuY2U7CisgICAgdXNpbmcgc3RkOjp0cjE6OmlzX2Z1bmRhbWVudGFsOworICAgIHVzaW5nIHN0ZDo6dHIxOjppc19tZW1iZXJfb2JqZWN0X3BvaW50ZXI7CisgICAgdXNpbmcgc3RkOjp0cjE6OmlzX21lbWJlcl9wb2ludGVyOworICAgIHVzaW5nIHN0ZDo6dHIxOjppc19iYXNlX29mOworICAgIHVzaW5nIHN0ZDo6dHIxOjpyZW1vdmVfY29uc3Q7CisgICAgdXNpbmcgc3RkOjp0cjE6OnJlbW92ZV9yZWZlcmVuY2U7CisKKyAgICAvLyBOZWVkIGludGVncmFsX2NvbnN0PGJvb2wsIHRydWU+IDwtPiBpbnRlZ3JhbF9jb25zdDxpbnQsIDE+LCBzbworICAgIC8vIGJlY2F1c2Ugb2YgdGhpcyB1c2UgdGhlIGZvbGxvd2luZyB0eXBlZGVmcyBpbnN0ZWFkIG9mIGltcG9ydGluZworICAgIC8vIHN0ZDo6dHIxJ3MuCisgICAgdXNpbmcgc3RkOjp0cjE6OmludGVncmFsX2NvbnN0YW50OworICAgIHR5cGVkZWYgc3RkOjp0cjE6OmludGVncmFsX2NvbnN0YW50PGludCwgMT4gdHJ1ZV90eXBlOworICAgIHR5cGVkZWYgc3RkOjp0cjE6OmludGVncmFsX2NvbnN0YW50PGludCwgMD4gZmFsc2VfdHlwZTsKKworICAgIHVzaW5nIF9fZ251X2N4eDo6X19jb25kaXRpb25hbF90eXBlOworICAgIHVzaW5nIF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGlzX2NvbnN0X3BvaW50ZXIKKyAgICB7CisgICAgICBlbnVtCisJeworCSAgdmFsdWUgPSBpc19jb25zdDxUPjo6dmFsdWUgJiYgaXNfcG9pbnRlcjxUPjo6dmFsdWUKKwl9OworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBpc19jb25zdF9yZWZlcmVuY2UKKyAgICB7CisgICAgICBlbnVtCisJeworCSAgdmFsdWUgPSBpc19jb25zdDxUPjo6dmFsdWUgJiYgaXNfcmVmZXJlbmNlPFQ+Ojp2YWx1ZQorCX07CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGlzX3NpbXBsZQorICAgIHsKKyAgICAgIGVudW0KKwl7CisJICB2YWx1ZSA9IGlzX2Z1bmRhbWVudGFsPHR5cGVuYW1lIHJlbW92ZV9jb25zdDxUPjo6dHlwZT46OnZhbHVlIAorCSAgfHwgaXNfcG9pbnRlcjx0eXBlbmFtZSByZW1vdmVfY29uc3Q8VD46OnR5cGU+Ojp2YWx1ZSAKKwkgIHx8IGlzX21lbWJlcl9wb2ludGVyPFQ+Ojp2YWx1ZSAKKwl9OworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGNsYXNzIGlzX3BhaXIKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgICBzdHJ1Y3QgaXNfcGFpcl9pbXAKKyAgICAgIHsKKwllbnVtCisJICB7CisJICAgIHZhbHVlID0gMAorCSAgfTsKKyAgICAgIH07CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+CisgICAgICBzdHJ1Y3QgaXNfcGFpcl9pbXA8c3RkOjpwYWlyPFUsVj4gPgorICAgICAgeworCWVudW0KKwkgIHsKKwkgICAgdmFsdWUgPSAxCisJICB9OworICAgICAgfTsKKworICAgIHB1YmxpYzoKKyAgICAgIGVudW0KKwl7CisJICB2YWx1ZSA9IGlzX3BhaXJfaW1wPFQ+Ojp2YWx1ZQorCX07CisgICAgfTsKKworICAgIC8vIFVzZSBDKysweCdzIHN0YXRpY19hc3NlcnQgaWYgcG9zc2libGUuCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyNkZWZpbmUgUEJfRFNfU1RBVElDX0FTU0VSVChVTklRVUUsIEUpICBzdGF0aWNfYXNzZXJ0KEUsICNVTklRVUUpCisjZWxzZQorICAgIHRlbXBsYXRlPGJvb2w+CisgICAgc3RydWN0IF9fc3RhdGljX2Fzc2VydDsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19zdGF0aWNfYXNzZXJ0PHRydWU+CisgICAgeyB9OworCisgICAgdGVtcGxhdGU8aW50PgorICAgIHN0cnVjdCBfX3N0YXRpY19hc3NlcnRfZHVtY2xhc3MKKyAgICB7CisgICAgICBlbnVtCisJeworCSAgdiA9IDEKKwl9OworICAgIH07CisKKyNkZWZpbmUgUEJfRFNfU1RBVElDX0FTU0VSVChVTklRVUUsIEUpICBcCisgICAgdHlwZWRlZiBfX2dudV9wYmRzOjpkZXRhaWw6Ol9fc3RhdGljX2Fzc2VydF9kdW1jbGFzczxzaXplb2YoX19nbnVfcGJkczo6ZGV0YWlsOjpfX3N0YXRpY19hc3NlcnQ8Ym9vbChFKT4pPiBVTklRVUUjI19fc3RhdGljX2Fzc2VydF90eXBlCisKKyNlbmRpZgorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KKyAgICBzdHJ1Y3QgdHlwZV90b190eXBlCisgICAgeworICAgICAgdHlwZWRlZiBUeXBlIHR5cGU7CisgICAgfTsKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC90eXBlc190cmFpdHMuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3R5cGVzX3RyYWl0cy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ1YTA3OAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC90eXBlc190cmFpdHMuaHBwCkBAIC0wLDAgKzEsODIgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHR5cGVzX3RyYWl0cy5ocHAKKyAqIENvbnRhaW5zIGEgdHJhaXRzIGNsYXNzIG9mIHR5cGVzIHVzZWQgYnkgY29udGFpbmVycy4KKyAqLworCisjaWZuZGVmIFBCX0RTX1RZUEVTX1RSQUlUU19IUFAKKyNkZWZpbmUgUEJfRFNfVFlQRVNfVFJBSVRTX0hQUAorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iYXNpY190eXBlcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90eXBlX3V0aWxzLmhwcD4KKyNpbmNsdWRlIDx1dGlsaXR5PgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgQWxsb2MsIGJvb2wgU3RvcmVfRXh0cmE+CisgICAgc3RydWN0IHZ0X2Jhc2Vfc2VsZWN0b3IKKyAgICB7CisgICAgICB0eXBlZGVmIHZhbHVlX3R5cGVfYmFzZTxLZXksIE1hcHBlZCwgQWxsb2MsIFN0b3JlX0V4dHJhPiB0eXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgQWxsb2MsIGJvb2wgU3RvcmVfRXh0cmE+CisgICAgc3RydWN0IHR5cGVzX3RyYWl0cyAKKyAgICA6IHB1YmxpYyB2dF9iYXNlX3NlbGVjdG9yPEtleSwgTWFwcGVkLCBBbGxvYywgU3RvcmVfRXh0cmE+Ojp0eXBlCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvYzo6dGVtcGxhdGUgcmViaW5kPEtleT46Om90aGVyIGtleV9hbGxvY2F0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGtleV9hbGxvY2F0b3I6OnZhbHVlX3R5cGUga2V5X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGtleV9hbGxvY2F0b3I6OnBvaW50ZXIga2V5X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGtleV9hbGxvY2F0b3I6OmNvbnN0X3BvaW50ZXIgY29uc3Rfa2V5X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGtleV9hbGxvY2F0b3I6OnJlZmVyZW5jZSBrZXlfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBrZXlfYWxsb2NhdG9yOjpjb25zdF9yZWZlcmVuY2UgY29uc3Rfa2V5X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7CisKKyAgICAgIC8vIEV4dHJhIHZhbHVlICh1c2VkIHdoZW4gdGhlIGV4dHJhIHZhbHVlIGlzIHN0b3JlZCB3aXRoIGVhY2ggdmFsdWUpLgorICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8c2l6ZV90eXBlLCBzaXplX3R5cGU+IAljb21wX2hhc2g7CisKKyAgICAgIHR5cGVkZWYgaW50ZWdyYWxfY29uc3RhbnQ8aW50LCBTdG9yZV9FeHRyYT4gc3RvcmVfZXh0cmE7CisgICAgICBzdG9yZV9leHRyYQltX3N0b3JlX2V4dHJhX2luZGljYXRvcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBub190aHJvd19jb3BpZXM8S2V5LCBNYXBwZWQ+OjppbmRpY2F0b3Igbm9fdGhyb3dfY29waWVzOworICAgICAgbm9fdGhyb3dfY29waWVzIAltX25vX3Rocm93X2NvcGllc19pbmRpY2F0b3I7CisgICAgfTsKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC91bm9yZGVyZWRfaXRlcmF0b3IvY29uc3RfaXRlcmF0b3IuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3Vub3JkZXJlZF9pdGVyYXRvci9jb25zdF9pdGVyYXRvci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhkNGViMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC91bm9yZGVyZWRfaXRlcmF0b3IvY29uc3RfaXRlcmF0b3IuaHBwCkBAIC0wLDAgKzEsMTI5IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBjb25zdF9pdGVyYXRvci5ocHAKKyAqIENvbnRhaW5zIGFuIGl0ZXJhdG9yIGNsYXNzIHVzZWQgZm9yIGNvbnN0IHJhbmdpbmcgb3ZlciB0aGUgZWxlbWVudHMgb2YgdGhlCisgKiAgICAgdGFibGUuCisgKi8KKworLy8gQ29uc3QgcmFuZ2UtdHlwZSBpdGVyYXRvci4KK2NsYXNzIGNvbnN0X2l0ZXJhdG9yXyA6IAorICBwdWJsaWMgY29uc3RfcG9pbnRfaXRlcmF0b3JfCisKK3sKKworcHVibGljOgorCisgIC8vIENhdGVnb3J5LgorICB0eXBlZGVmIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisKKyAgLy8gRGlmZmVyZW5jZSB0eXBlLgorICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKKworICAvLyBJdGVyYXRvcidzIHZhbHVlIHR5cGUuCisgIHR5cGVkZWYgdmFsdWVfdHlwZV8gdmFsdWVfdHlwZTsKKworICAvLyBJdGVyYXRvcidzIHBvaW50ZXIgdHlwZS4KKyAgdHlwZWRlZiBwb2ludGVyXyBwb2ludGVyOworCisgIC8vIEl0ZXJhdG9yJ3MgY29uc3QgcG9pbnRlciB0eXBlLgorICB0eXBlZGVmIGNvbnN0X3BvaW50ZXJfIGNvbnN0X3BvaW50ZXI7CisKKyAgLy8gSXRlcmF0b3IncyByZWZlcmVuY2UgdHlwZS4KKyAgdHlwZWRlZiByZWZlcmVuY2VfIHJlZmVyZW5jZTsKKworICAvLyBJdGVyYXRvcidzIGNvbnN0IHJlZmVyZW5jZSB0eXBlLgorICB0eXBlZGVmIGNvbnN0X3JlZmVyZW5jZV8gY29uc3RfcmVmZXJlbmNlOworCitwdWJsaWM6CisKKyAgLy8gRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgaW5saW5lCisgIGNvbnN0X2l0ZXJhdG9yXygpCisKKyAgICA6IG1fcF90YmwoTlVMTCkKKyAgeyB9CisKKyAgLy8gSW5jcmVtZW50cy4KKyAgaW5saW5lIGNvbnN0X2l0ZXJhdG9yXyYgCisgIG9wZXJhdG9yKysoKQorICB7CisgICAgbV9wX3RibC0+aW5jX2l0X3N0YXRlKGJhc2VfdHlwZTo6bV9wX3ZhbHVlLCBtX3Bvcyk7CisKKyAgICByZXR1cm4gKCp0aGlzKTsKKyAgfQorCisgIC8vIEluY3JlbWVudHMuCisgIGlubGluZSBjb25zdF9pdGVyYXRvcl8KKyAgb3BlcmF0b3IrKyhpbnQpCisgIHsKKyAgICBjb25zdF9pdGVyYXRvcl8gcmV0ID0qIHRoaXM7CisKKyAgICBtX3BfdGJsLT5pbmNfaXRfc3RhdGUoYmFzZV90eXBlOjptX3BfdmFsdWUsIG1fcG9zKTsKKworICAgIHJldHVybiAocmV0KTsKKyAgfQorCitwcm90ZWN0ZWQ6CisKKyAgdHlwZWRlZiBjb25zdF9wb2ludF9pdGVyYXRvcl8gYmFzZV90eXBlOworCitwcm90ZWN0ZWQ6CisKKyAgLyoqCisgICAqICBDb25zdHJ1Y3RvciB1c2VkIGJ5IHRoZSB0YWJsZSB0byBpbml0aWF0ZSB0aGUgZ2VuZXJhbGl6ZWQKKyAgICogICAgICBwb2ludGVyIGFuZCBwb3NpdGlvbiAoZS5nLiwgdGhpcyBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gYSBmaW5kKCkKKyAgICogICAgICBvZiBhIHRhYmxlLgorICAgKiAqLworICBpbmxpbmUKKyAgY29uc3RfaXRlcmF0b3JfKGNvbnN0X3BvaW50ZXJfIHBfdmFsdWUsICBQQl9EU19HRU5fUE9TIHBvcywgIGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDKiBwX3RibCkgOiBjb25zdF9wb2ludF9pdGVyYXRvcl8ocF92YWx1ZSksCisJCQkJCQkJCQkJCQkgbV9wX3RibChwX3RibCksCisJCQkJCQkJCQkJCQkgbV9wb3MocG9zKQorICB7IH0KKworcHJvdGVjdGVkOgorCisgIC8qKgorICAgKiAgUG9pbnRlciB0byB0aGUgdGFibGUgb2JqZWN0IHdoaWNoIGNyZWF0ZWQgdGhlIGl0ZXJhdG9yICh1c2VkIGZvcgorICAgKiAgICAgIGluY3JlbWVudGluZyBpdHMgcG9zaXRpb24uCisgICAqICovCisgIGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDKiBtX3BfdGJsOworCisgIFBCX0RTX0dFTl9QT1MgbV9wb3M7CisKKyAgZnJpZW5kIGNsYXNzIFBCX0RTX0NMQVNTX0NfREVDOworfTsKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3Vub3JkZXJlZF9pdGVyYXRvci9jb25zdF9wb2ludF9pdGVyYXRvci5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdW5vcmRlcmVkX2l0ZXJhdG9yL2NvbnN0X3BvaW50X2l0ZXJhdG9yLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzBiMmFkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvZGV0YWlsL3Vub3JkZXJlZF9pdGVyYXRvci9jb25zdF9wb2ludF9pdGVyYXRvci5ocHAKQEAgLTAsMCArMSwxNTEgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGNvbnN0X3BvaW50X2l0ZXJhdG9yLmhwcAorICogQ29udGFpbnMgYW4gaXRlcmF0b3IgY2xhc3MgcmV0dXJuZWQgYnkgdGhlIHRhYmxlcycgY29uc3QgZmluZCBhbmQgaW5zZXJ0CisgKiAgICAgbWV0aG9kcy4KKyAqLworCitjbGFzcyBwb2ludF9pdGVyYXRvcl87CisKKy8vIENvbnN0IHBvaW50LXR5cGUgaXRlcmF0b3IuCitjbGFzcyBjb25zdF9wb2ludF9pdGVyYXRvcl8KK3sKKworcHVibGljOgorCisgIC8vIENhdGVnb3J5LgorICB0eXBlZGVmIHRyaXZpYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OworCisgIC8vIERpZmZlcmVuY2UgdHlwZS4KKyAgdHlwZWRlZiB0cml2aWFsX2l0ZXJhdG9yX2RpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisKKyAgLy8gSXRlcmF0b3IncyB2YWx1ZSB0eXBlLgorICB0eXBlZGVmIHZhbHVlX3R5cGVfIHZhbHVlX3R5cGU7CisKKyAgLy8gSXRlcmF0b3IncyBwb2ludGVyIHR5cGUuCisgIHR5cGVkZWYgcG9pbnRlcl8gcG9pbnRlcjsKKworICAvLyBJdGVyYXRvcidzIGNvbnN0IHBvaW50ZXIgdHlwZS4KKyAgdHlwZWRlZiBjb25zdF9wb2ludGVyXyBjb25zdF9wb2ludGVyOworCisgIC8vIEl0ZXJhdG9yJ3MgcmVmZXJlbmNlIHR5cGUuCisgIHR5cGVkZWYgcmVmZXJlbmNlXyByZWZlcmVuY2U7CisKKyAgLy8gSXRlcmF0b3IncyBjb25zdCByZWZlcmVuY2UgdHlwZS4KKyAgdHlwZWRlZiBjb25zdF9yZWZlcmVuY2VfIGNvbnN0X3JlZmVyZW5jZTsKKworcHVibGljOgorCisgIGlubGluZQorICBjb25zdF9wb2ludF9pdGVyYXRvcl8oY29uc3RfcG9pbnRlciBwX3ZhbHVlKSA6IG1fcF92YWx1ZShwX3ZhbHVlKQorICB7IH0KKworICAvLyBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICBpbmxpbmUKKyAgY29uc3RfcG9pbnRfaXRlcmF0b3JfKCkKKworICAgIDogbV9wX3ZhbHVlKE5VTEwpCisgIHsgfQorCisgIC8vIENvcHkgY29uc3RydWN0b3IuCisgIGlubGluZQorICBjb25zdF9wb2ludF9pdGVyYXRvcl8oY29uc3QgY29uc3RfcG9pbnRfaXRlcmF0b3JfJiBvdGhlcikKKworICAgIDogbV9wX3ZhbHVlKG90aGVyLm1fcF92YWx1ZSkKKyAgeyB9CisKKyAgLy8gQ29weSBjb25zdHJ1Y3Rvci4KKyAgaW5saW5lCisgIGNvbnN0X3BvaW50X2l0ZXJhdG9yXyhjb25zdCBwb2ludF9pdGVyYXRvcl8mIG90aGVyKQorCisgICAgOiBtX3BfdmFsdWUob3RoZXIubV9wX3ZhbHVlKQorICB7IH0KKworICAvLyBBY2Nlc3MuCisgIGlubGluZSBjb25zdF9wb2ludGVyCisgIG9wZXJhdG9yLT4oKSBjb25zdAorICB7CisgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF92YWx1ZSAhPSBOVUxMKTsKKworICAgIHJldHVybiAobV9wX3ZhbHVlKTsKKyAgfQorCisgIC8vIEFjY2Vzcy4KKyAgaW5saW5lIGNvbnN0X3JlZmVyZW5jZQorICBvcGVyYXRvciooKSBjb25zdAorICB7CisgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF92YWx1ZSAhPSBOVUxMKTsKKworICAgIHJldHVybiAoKm1fcF92YWx1ZSk7CisgIH0KKworICAvLyBDb21wYXJlcyBjb250ZW50IHRvIGEgZGlmZmVyZW50IGl0ZXJhdG9yIG9iamVjdC4KKyAgaW5saW5lIGJvb2wKKyAgb3BlcmF0b3I9PShjb25zdCBwb2ludF9pdGVyYXRvcl8mIG90aGVyKSBjb25zdAorICB7CisgICAgcmV0dXJuIChtX3BfdmFsdWUgPT0gb3RoZXIubV9wX3ZhbHVlKTsKKyAgfQorCisgIC8vIENvbXBhcmVzIGNvbnRlbnQgdG8gYSBkaWZmZXJlbnQgaXRlcmF0b3Igb2JqZWN0LgorICBpbmxpbmUgYm9vbAorICBvcGVyYXRvcj09KGNvbnN0IGNvbnN0X3BvaW50X2l0ZXJhdG9yXyYgb3RoZXIpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gKG1fcF92YWx1ZSA9PSBvdGhlci5tX3BfdmFsdWUpOworICB9CisKKyAgLy8gQ29tcGFyZXMgY29udGVudCAobmVnYXRpdmVseSkgdG8gYSBkaWZmZXJlbnQgaXRlcmF0b3Igb2JqZWN0LgorICBpbmxpbmUgYm9vbAorICBvcGVyYXRvciE9KGNvbnN0IHBvaW50X2l0ZXJhdG9yXyYgb3RoZXIpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gKG1fcF92YWx1ZSAhPSBvdGhlci5tX3BfdmFsdWUpOworICB9CisKKyAgLy8gQ29tcGFyZXMgY29udGVudCAobmVnYXRpdmVseSkgdG8gYSBkaWZmZXJlbnQgaXRlcmF0b3Igb2JqZWN0LgorICBpbmxpbmUgYm9vbAorICBvcGVyYXRvciE9KGNvbnN0IGNvbnN0X3BvaW50X2l0ZXJhdG9yXyYgb3RoZXIpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gKG1fcF92YWx1ZSAhPSBvdGhlci5tX3BfdmFsdWUpOworICB9CisKK3Byb3RlY3RlZDoKKyAgY29uc3RfcG9pbnRlciBtX3BfdmFsdWU7CisKKyAgZnJpZW5kIGNsYXNzIHBvaW50X2l0ZXJhdG9yXzsKKworICBmcmllbmQgY2xhc3MgUEJfRFNfQ0xBU1NfQ19ERUM7Cit9OworCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdW5vcmRlcmVkX2l0ZXJhdG9yL2l0ZXJhdG9yLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC91bm9yZGVyZWRfaXRlcmF0b3IvaXRlcmF0b3IuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMjFhYmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdW5vcmRlcmVkX2l0ZXJhdG9yL2l0ZXJhdG9yLmhwcApAQCAtMCwwICsxLDE1MCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgaXRlcmF0b3IuaHBwCisgKiBDb250YWlucyBhbiBpdGVyYXRvcl8gY2xhc3MgdXNlZCBmb3IgcmFuZ2luZyBvdmVyIHRoZSBlbGVtZW50cyBvZiB0aGUKKyAqICAgIHRhYmxlLgorICovCisKKy8vIFJhbmdlLXR5cGUgaXRlcmF0b3IuCitjbGFzcyBpdGVyYXRvcl8gOiAKKyAgcHVibGljIGNvbnN0X2l0ZXJhdG9yXworCit7CisKK3B1YmxpYzoKKworICAvLyBDYXRlZ29yeS4KKyAgdHlwZWRlZiBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OworCisgIC8vIERpZmZlcmVuY2UgdHlwZS4KKyAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisKKyAgLy8gSXRlcmF0b3IncyB2YWx1ZSB0eXBlLgorICB0eXBlZGVmIHZhbHVlX3R5cGVfIHZhbHVlX3R5cGU7CisKKyAgLy8gSXRlcmF0b3IncyBwb2ludGVyIHR5cGUuCisgIHR5cGVkZWYgcG9pbnRlcl8gcG9pbnRlcjsKKworICAvLyBJdGVyYXRvcidzIGNvbnN0IHBvaW50ZXIgdHlwZS4KKyAgdHlwZWRlZiBjb25zdF9wb2ludGVyXyBjb25zdF9wb2ludGVyOworCisgIC8vIEl0ZXJhdG9yJ3MgcmVmZXJlbmNlIHR5cGUuCisgIHR5cGVkZWYgcmVmZXJlbmNlXyByZWZlcmVuY2U7CisKKyAgLy8gSXRlcmF0b3IncyBjb25zdCByZWZlcmVuY2UgdHlwZS4KKyAgdHlwZWRlZiBjb25zdF9yZWZlcmVuY2VfIGNvbnN0X3JlZmVyZW5jZTsKKworcHVibGljOgorCisgIC8vIERlZmF1bHQgY29uc3RydWN0b3IuCisgIGlubGluZQorICBpdGVyYXRvcl8oKQorCisgICAgOiBjb25zdF9pdGVyYXRvcl8oTlVMTCwgUEJfRFNfR0VOX1BPUygpLCBOVUxMKQorICB7IH0KKworICAvLyBDb252ZXJzaW9uIHRvIGEgcG9pbnQtdHlwZSBpdGVyYXRvci4KKyAgaW5saW5lCisgIG9wZXJhdG9yIHBvaW50X2l0ZXJhdG9yXygpCisgIHsKKyAgICByZXR1cm4gKHBvaW50X2l0ZXJhdG9yXygKKwkJCSAgICBjb25zdF9jYXN0PHBvaW50ZXI+KGNvbnN0X2l0ZXJhdG9yXzo6bV9wX3ZhbHVlKSkpOworICB9CisKKyAgLy8gQ29udmVyc2lvbiB0byBhIHBvaW50LXR5cGUgaXRlcmF0b3IuCisgIGlubGluZQorICBvcGVyYXRvciBjb25zdCBwb2ludF9pdGVyYXRvcl8oKSBjb25zdAorICB7CisgICAgcmV0dXJuIChwb2ludF9pdGVyYXRvcl8oCisJCQkgICAgY29uc3RfY2FzdDxwb2ludGVyPihjb25zdF9pdGVyYXRvcl86Om1fcF92YWx1ZSkpKTsKKyAgfQorCisgIC8vIEFjY2Vzcy4KKyAgaW5saW5lIHBvaW50ZXIKKyAgb3BlcmF0b3ItPigpIGNvbnN0CisgIHsKKyAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoYmFzZV90eXBlOjptX3BfdmFsdWUgIT0gTlVMTCk7CisKKyAgICByZXR1cm4gKGNvbnN0X2Nhc3Q8cG9pbnRlcj4oYmFzZV90eXBlOjptX3BfdmFsdWUpKTsKKyAgfQorCisgIC8vIEFjY2Vzcy4KKyAgaW5saW5lIHJlZmVyZW5jZQorICBvcGVyYXRvciooKSBjb25zdAorICB7CisgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGJhc2VfdHlwZTo6bV9wX3ZhbHVlICE9IE5VTEwpOworCisgICAgcmV0dXJuIChjb25zdF9jYXN0PHJlZmVyZW5jZT4oKmJhc2VfdHlwZTo6bV9wX3ZhbHVlKSk7CisgIH0KKworICAvLyBJbmNyZW1lbnRzLgorICBpbmxpbmUgaXRlcmF0b3JfJiAKKyAgb3BlcmF0b3IrKygpCisgIHsKKyAgICBiYXNlX3R5cGU6Om1fcF90YmwtPmluY19pdF9zdGF0ZShiYXNlX3R5cGU6Om1fcF92YWx1ZSwgYmFzZV90eXBlOjptX3Bvcyk7CisKKyAgICByZXR1cm4gKCp0aGlzKTsKKyAgfQorCisgIC8vIEluY3JlbWVudHMuCisgIGlubGluZSBpdGVyYXRvcl8KKyAgb3BlcmF0b3IrKyhpbnQpCisgIHsKKyAgICBpdGVyYXRvcl8gcmV0ID0qIHRoaXM7CisKKyAgICBiYXNlX3R5cGU6Om1fcF90YmwtPmluY19pdF9zdGF0ZShiYXNlX3R5cGU6Om1fcF92YWx1ZSwgYmFzZV90eXBlOjptX3Bvcyk7CisKKyAgICByZXR1cm4gKHJldCk7CisgIH0KKworcHJvdGVjdGVkOgorICB0eXBlZGVmIGNvbnN0X2l0ZXJhdG9yXyBiYXNlX3R5cGU7CisKK3Byb3RlY3RlZDoKKworICAvKioKKyAgICogIENvbnN0cnVjdG9yIHVzZWQgYnkgdGhlIHRhYmxlIHRvIGluaXRpYXRlIHRoZSBnZW5lcmFsaXplZAorICAgKiAgICAgIHBvaW50ZXIgYW5kIHBvc2l0aW9uIChlLmcuLCB0aGlzIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiBhIGZpbmQoKQorICAgKiAgICAgIG9mIGEgdGFibGUuCisgICAqICovCisgIGlubGluZQorICBpdGVyYXRvcl8ocG9pbnRlciBwX3ZhbHVlLCBQQl9EU19HRU5fUE9TIHBvcywgUEJfRFNfQ0xBU1NfQ19ERUMqIHBfdGJsKSA6IGNvbnN0X2l0ZXJhdG9yXyhwX3ZhbHVlLCBwb3MsIHBfdGJsKQorICB7IH0KKworICBmcmllbmQgY2xhc3MgUEJfRFNfQ0xBU1NfQ19ERUM7Cit9OworCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdW5vcmRlcmVkX2l0ZXJhdG9yL3BvaW50X2l0ZXJhdG9yLmhwcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2RldGFpbC91bm9yZGVyZWRfaXRlcmF0b3IvcG9pbnRfaXRlcmF0b3IuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3Y2U5MDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9kZXRhaWwvdW5vcmRlcmVkX2l0ZXJhdG9yL3BvaW50X2l0ZXJhdG9yLmhwcApAQCAtMCwwICsxLDE0MyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcG9pbnRfaXRlcmF0b3IuaHBwCisgKiBDb250YWlucyBhbiBpdGVyYXRvciBjbGFzcyByZXR1cm5lZCBieSB0aGUgdGFibGVzJyBmaW5kIGFuZCBpbnNlcnQKKyAqICAgICBtZXRob2RzLgorICovCisKKy8vIEZpbmQgdHlwZSBpdGVyYXRvci4KK2NsYXNzIHBvaW50X2l0ZXJhdG9yXworeworCitwdWJsaWM6CisKKyAgLy8gQ2F0ZWdvcnkuCisgIHR5cGVkZWYgdHJpdmlhbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisKKyAgLy8gRGlmZmVyZW5jZSB0eXBlLgorICB0eXBlZGVmIHRyaXZpYWxfaXRlcmF0b3JfZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKKworICAvLyBJdGVyYXRvcidzIHZhbHVlIHR5cGUuCisgIHR5cGVkZWYgdmFsdWVfdHlwZV8gdmFsdWVfdHlwZTsKKworICAvLyBJdGVyYXRvcidzIHBvaW50ZXIgdHlwZS4KKyAgdHlwZWRlZiBwb2ludGVyXyBwb2ludGVyOworCisgIC8vIEl0ZXJhdG9yJ3MgY29uc3QgcG9pbnRlciB0eXBlLgorICB0eXBlZGVmIGNvbnN0X3BvaW50ZXJfIGNvbnN0X3BvaW50ZXI7CisKKyAgLy8gSXRlcmF0b3IncyByZWZlcmVuY2UgdHlwZS4KKyAgdHlwZWRlZiByZWZlcmVuY2VfIHJlZmVyZW5jZTsKKworICAvLyBJdGVyYXRvcidzIGNvbnN0IHJlZmVyZW5jZSB0eXBlLgorICB0eXBlZGVmIGNvbnN0X3JlZmVyZW5jZV8gY29uc3RfcmVmZXJlbmNlOworCitwdWJsaWM6CisKKyAgLy8gRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgaW5saW5lCisgIHBvaW50X2l0ZXJhdG9yXygpCisKKyAgICA6IG1fcF92YWx1ZShOVUxMKQorICB7IH0KKworICAvLyBDb3B5IGNvbnN0cnVjdG9yLgorICBpbmxpbmUKKyAgcG9pbnRfaXRlcmF0b3JfKGNvbnN0IHBvaW50X2l0ZXJhdG9yXyYgb3RoZXIpCisKKyAgICA6IG1fcF92YWx1ZShvdGhlci5tX3BfdmFsdWUpCisgIHsgfQorCisgIC8vIEFjY2Vzcy4KKyAgaW5saW5lIHBvaW50ZXIKKyAgb3BlcmF0b3ItPigpIGNvbnN0CisgIHsKKyAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9wX3ZhbHVlICE9IE5VTEwpOworCisgICAgcmV0dXJuIChtX3BfdmFsdWUpOworICB9CisKKyAgLy8gQWNjZXNzLgorICBpbmxpbmUgcmVmZXJlbmNlCisgIG9wZXJhdG9yKigpIGNvbnN0CisgIHsKKyAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9wX3ZhbHVlICE9IE5VTEwpOworCisgICAgcmV0dXJuICgqbV9wX3ZhbHVlKTsKKyAgfQorCisgIC8vIENvbXBhcmVzIGNvbnRlbnQgdG8gYSBkaWZmZXJlbnQgaXRlcmF0b3Igb2JqZWN0LgorICBpbmxpbmUgYm9vbAorICBvcGVyYXRvcj09KGNvbnN0IHBvaW50X2l0ZXJhdG9yXyYgb3RoZXIpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gKG1fcF92YWx1ZSA9PSBvdGhlci5tX3BfdmFsdWUpOworICB9CisKKyAgLy8gQ29tcGFyZXMgY29udGVudCB0byBhIGRpZmZlcmVudCBpdGVyYXRvciBvYmplY3QuCisgIGlubGluZSBib29sCisgIG9wZXJhdG9yPT0oY29uc3QgY29uc3RfcG9pbnRfaXRlcmF0b3JfJiBvdGhlcikgY29uc3QKKyAgeworICAgIHJldHVybiAobV9wX3ZhbHVlID09IG90aGVyLm1fcF92YWx1ZSk7CisgIH0KKworICAvLyBDb21wYXJlcyBjb250ZW50IHRvIGEgZGlmZmVyZW50IGl0ZXJhdG9yIG9iamVjdC4KKyAgaW5saW5lIGJvb2wKKyAgb3BlcmF0b3IhPShjb25zdCBwb2ludF9pdGVyYXRvcl8mIG90aGVyKSBjb25zdAorICB7CisgICAgcmV0dXJuIChtX3BfdmFsdWUgIT0gb3RoZXIubV9wX3ZhbHVlKTsKKyAgfQorCisgIC8vIENvbXBhcmVzIGNvbnRlbnQgKG5lZ2F0aXZlbHkpIHRvIGEgZGlmZmVyZW50IGl0ZXJhdG9yIG9iamVjdC4KKyAgaW5saW5lIGJvb2wKKyAgb3BlcmF0b3IhPShjb25zdCBjb25zdF9wb2ludF9pdGVyYXRvcl8mIG90aGVyKSBjb25zdAorICB7CisgICAgcmV0dXJuIChtX3BfdmFsdWUgIT0gb3RoZXIubV9wX3ZhbHVlKTsKKyAgfQorCisgIGlubGluZQorICBwb2ludF9pdGVyYXRvcl8ocG9pbnRlciBwX3ZhbHVlKSA6IG1fcF92YWx1ZShwX3ZhbHVlKQorICB7IH0KKworcHJvdGVjdGVkOgorICBmcmllbmQgY2xhc3MgY29uc3RfcG9pbnRfaXRlcmF0b3JfOworCisgIGZyaWVuZCBjbGFzcyBQQl9EU19DTEFTU19DX0RFQzsKKworcHJvdGVjdGVkOgorICBwb2ludGVyIG1fcF92YWx1ZTsKK307CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2V4Y2VwdGlvbi5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9leGNlcHRpb24uaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNzk2YjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9leGNlcHRpb24uaHBwCkBAIC0wLDAgKzEsMTAzIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBleGNlcHRpb24uaHBwCisgKiBDb250YWlucyBleGNlcHRpb24gY2xhc3Nlcy4KKyAqLworCisjaWZuZGVmIFBCX0RTX0VYQ0VQVElPTl9IUFAKKyNkZWZpbmUgUEJfRFNfRVhDRVBUSU9OX0hQUAorCisjaW5jbHVkZSA8c3RkZXhjZXB0PgorI2luY2x1ZGUgPGNzdGRsaWI+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIC8vIEJhc2UgY2xhc3MgZm9yIGV4Y2VwdGlvbnMuCisgIHN0cnVjdCBjb250YWluZXJfZXJyb3IgOiBwdWJsaWMgc3RkOjpsb2dpY19lcnJvcgorICB7CisgICAgY29udGFpbmVyX2Vycm9yKCkgCisgICAgOiBzdGQ6OmxvZ2ljX2Vycm9yKF9fTigiX19nbnVfcGJkczo6Y29udGFpbmVyX2Vycm9yIikpIHsgfQorICB9OworCisgIC8vIEFuIGVudHJ5IGNhbm5vdCBiZSBpbnNlcnRlZCBpbnRvIGEgY29udGFpbmVyIG9iamVjdCBmb3IgbG9naWNhbAorICAvLyByZWFzb25zIChub3QsIGUuZy4sIGlmIG1lbW9yeSBpcyB1bmFidmFpbGFibGUsIGluIHdoaWNoIGNhc2UKKyAgLy8gdGhlIGFsbG9jYXRvcl90eXBlJ3MgZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duKS4KKyAgc3RydWN0IGluc2VydF9lcnJvciA6IHB1YmxpYyBjb250YWluZXJfZXJyb3IgeyB9OworCisgIC8vIEEgam9pbiBjYW5ub3QgYmUgcGVyZm9ybWVkIGxvZ2ljYWwgcmVhc29ucyAoaS5lLiwgdGhlIHJhbmdlcyBvZgorICAvLyB0aGUgdHdvIGNvbnRhaW5lciBvYmplY3RzIGJlaW5nIGpvaW5lZCBvdmVybGFwcy4KKyAgc3RydWN0IGpvaW5fZXJyb3IgOiBwdWJsaWMgY29udGFpbmVyX2Vycm9yIHsgfTsKKworICAvLyBBIGNvbnRhaW5lciBjYW5ub3QgYmUgcmVzaXplZC4KKyAgc3RydWN0IHJlc2l6ZV9lcnJvciA6IHB1YmxpYyBjb250YWluZXJfZXJyb3IgeyB9OworCisjaWYgX19FWENFUFRJT05TCisgIGlubGluZSB2b2lkCisgIF9fdGhyb3dfY29udGFpbmVyX2Vycm9yKHZvaWQpCisgIHsgdGhyb3cgY29udGFpbmVyX2Vycm9yKCk7IH0KKworICBpbmxpbmUgdm9pZAorICBfX3Rocm93X2luc2VydF9lcnJvcih2b2lkKQorICB7IHRocm93IGluc2VydF9lcnJvcigpOyB9CisKKyAgaW5saW5lIHZvaWQKKyAgX190aHJvd19qb2luX2Vycm9yKHZvaWQpCisgIHsgdGhyb3cgam9pbl9lcnJvcigpOyB9CisKKyAgaW5saW5lIHZvaWQKKyAgX190aHJvd19yZXNpemVfZXJyb3Iodm9pZCkKKyAgeyB0aHJvdyByZXNpemVfZXJyb3IoKTsgfQorI2Vsc2UKKyAgaW5saW5lIHZvaWQKKyAgX190aHJvd19jb250YWluZXJfZXJyb3Iodm9pZCkKKyAgeyBzdGQ6OmFib3J0KCk7IH0KKworICBpbmxpbmUgdm9pZAorICBfX3Rocm93X2luc2VydF9lcnJvcih2b2lkKQorICB7IHN0ZDo6YWJvcnQoKTsgfQorCisgIGlubGluZSB2b2lkCisgIF9fdGhyb3dfam9pbl9lcnJvcih2b2lkKQorICB7IHN0ZDo6YWJvcnQoKTsgfQorCisgIGlubGluZSB2b2lkCisgIF9fdGhyb3dfcmVzaXplX2Vycm9yKHZvaWQpCisgIHsgc3RkOjphYm9ydCgpOyB9CisjZW5kaWYKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9oYXNoX3BvbGljeS5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9oYXNoX3BvbGljeS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRjMGM0NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2hhc2hfcG9saWN5LmhwcApAQCAtMCwwICsxLDYwNCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgaGFzaF9wb2xpY3kuaHBwCisgKiBDb250YWlucyBoYXNoLXJlbGF0ZWQgcG9saWNpZXMuCisgKi8KKworI2lmbmRlZiBQQl9EU19IQVNIX1BPTElDWV9IUFAKKyNkZWZpbmUgUEJfRFNfSEFTSF9QT0xJQ1lfSFBQCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPGNtYXRoPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9leGNlcHRpb24uaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHlwZV91dGlscy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9oYXNoX2ZuL21hc2tfYmFzZWRfcmFuZ2VfaGFzaGluZy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9oYXNoX2ZuL21vZF9iYXNlZF9yYW5nZV9oYXNoaW5nLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvaGFzaF9sb2FkX2NoZWNrX3Jlc2l6ZV90cmlnZ2VyX3NpemVfYmFzZS5ocHA+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIC8vIEEgbnVsbCBoYXNoIGZ1bmN0aW9uLCBpbmRpY2F0aW5nIHRoYXQgdGhlIGNvbWJpbmluZyBoYXNoIGZ1bmN0aW9uCisgIC8vIGlzIGFjdHVhbGx5IGEgcmFuZ2VkIGhhc2ggZnVuY3Rpb24uCisgIHN0cnVjdCBudWxsX2hhc2hfZm4KKyAgeyB9OworCisgIC8vIEEgbnVsbCBwcm9iZSBmdW5jdGlvbiwgaW5kaWNhdGluZyB0aGF0IHRoZSBjb21iaW5pbmcgcHJvYmUKKyAgLy8gZnVuY3Rpb24gaXMgYWN0dWFsbHkgYSByYW5nZWQgcHJvYmUgZnVuY3Rpb24uCisgIHN0cnVjdCBudWxsX3Byb2JlX2ZuCisgIHsgfTsKKworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQyB0ZW1wbGF0ZTx0eXBlbmFtZSBTaXplX1R5cGU+CisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIGxpbmVhcl9wcm9iZV9mbjxTaXplX1R5cGU+CisKKyAgLy8gQSBwcm9iZSBzZXF1ZW5jZSBwb2xpY3kgdXNpbmcgZml4ZWQgaW5jcmVtZW50cy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgU2l6ZV9UeXBlID0gc2l6ZV90PgorICBjbGFzcyBsaW5lYXJfcHJvYmVfZm4KKyAgeworICBwdWJsaWM6CisgICAgdHlwZWRlZiBTaXplX1R5cGUgc2l6ZV90eXBlOworCisgICAgdm9pZAorICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKTsKKworICBwcm90ZWN0ZWQ6CisgICAgLy8gUmV0dXJucyB0aGUgaS10aCBvZmZzZXQgZnJvbSB0aGUgaGFzaCB2YWx1ZS4KKyAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgb3BlcmF0b3IoKShzaXplX3R5cGUgaSkgY29uc3Q7CisgIH07CisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vbGluZWFyX3Byb2JlX2ZuX2ltcC5ocHA+CisKKyN1bmRlZiBQQl9EU19DTEFTU19UX0RFQworI3VuZGVmIFBCX0RTX0NMQVNTX0NfREVDCisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgdGVtcGxhdGU8dHlwZW5hbWUgU2l6ZV9UeXBlPgorI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBxdWFkcmF0aWNfcHJvYmVfZm48U2l6ZV9UeXBlPgorCisgIC8vIEEgcHJvYmUgc2VxdWVuY2UgcG9saWN5IHVzaW5nIHNxdWFyZSBpbmNyZW1lbnRzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBTaXplX1R5cGUgPSBzaXplX3Q+CisgIGNsYXNzIHF1YWRyYXRpY19wcm9iZV9mbgorICB7CisgIHB1YmxpYzoKKyAgICB0eXBlZGVmIFNpemVfVHlwZSBzaXplX3R5cGU7CisKKyAgICB2b2lkCisgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpOworCisgIHByb3RlY3RlZDoKKyAgICAvLyBSZXR1cm5zIHRoZSBpLXRoIG9mZnNldCBmcm9tIHRoZSBoYXNoIHZhbHVlLgorICAgIGlubGluZSBzaXplX3R5cGUKKyAgICBvcGVyYXRvcigpKHNpemVfdHlwZSBpKSBjb25zdDsKKyAgfTsKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9xdWFkcmF0aWNfcHJvYmVfZm5faW1wLmhwcD4KKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQyB0ZW1wbGF0ZTx0eXBlbmFtZSBTaXplX1R5cGU+CisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIGRpcmVjdF9tYXNrX3JhbmdlX2hhc2hpbmc8U2l6ZV9UeXBlPgorCisgIC8vIEEgbWFzayByYW5nZS1oYXNoaW5nIGNsYXNzICh1c2VzIGEgYml0LW1hc2spLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBTaXplX1R5cGUgPSBzaXplX3Q+CisgIGNsYXNzIGRpcmVjdF9tYXNrX3JhbmdlX2hhc2hpbmcgCisgIDogcHVibGljIGRldGFpbDo6bWFza19iYXNlZF9yYW5nZV9oYXNoaW5nPFNpemVfVHlwZT4KKyAgeworICBwcml2YXRlOgorICAgIHR5cGVkZWYgZGV0YWlsOjptYXNrX2Jhc2VkX3JhbmdlX2hhc2hpbmc8U2l6ZV9UeXBlPiBtYXNrX2Jhc2VkX2Jhc2U7CisKKyAgcHVibGljOgorICAgIHR5cGVkZWYgU2l6ZV9UeXBlIHNpemVfdHlwZTsKKworICAgIHZvaWQKKyAgICBzd2FwKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcik7CisKKyAgcHJvdGVjdGVkOgorICAgIHZvaWQKKyAgICBub3RpZnlfcmVzaXplZChzaXplX3R5cGUgc2l6ZSk7CisKKyAgICAvLyBUcmFuc2Zvcm1zIHRoZSBfX2hhc2ggdmFsdWUgaGFzaCBpbnRvIGEgcmFuZ2VkLWhhc2ggdmFsdWUKKyAgICAvLyAodXNpbmcgYSBiaXQtbWFzaykuCisgICAgaW5saW5lIHNpemVfdHlwZQorICAgIG9wZXJhdG9yKCkoc2l6ZV90eXBlIGhhc2gpIGNvbnN0OworICB9OworCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9oYXNoX2ZuL2RpcmVjdF9tYXNrX3JhbmdlX2hhc2hpbmdfaW1wLmhwcD4KKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQyB0ZW1wbGF0ZTx0eXBlbmFtZSBTaXplX1R5cGU+CisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIGRpcmVjdF9tb2RfcmFuZ2VfaGFzaGluZzxTaXplX1R5cGU+CisKKyAgLy8gQSBtb2QgcmFuZ2UtaGFzaGluZyBjbGFzcyAodXNlcyB0aGUgbW9kdWxvIGZ1bmN0aW9uKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgU2l6ZV9UeXBlID0gc2l6ZV90PgorICBjbGFzcyBkaXJlY3RfbW9kX3JhbmdlX2hhc2hpbmcgCisgIDogcHVibGljIGRldGFpbDo6bW9kX2Jhc2VkX3JhbmdlX2hhc2hpbmc8U2l6ZV9UeXBlPgorICB7CisgIHB1YmxpYzoKKyAgICB0eXBlZGVmIFNpemVfVHlwZSBzaXplX3R5cGU7CisgICAgICAKKyAgICB2b2lkCisgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpOworCisgIHByb3RlY3RlZDoKKyAgICB2b2lkCisgICAgbm90aWZ5X3Jlc2l6ZWQoc2l6ZV90eXBlIHNpemUpOworICAgICAgCisgICAgLy8gVHJhbnNmb3JtcyB0aGUgX19oYXNoIHZhbHVlIGhhc2ggaW50byBhIHJhbmdlZC1oYXNoIHZhbHVlCisgICAgLy8gKHVzaW5nIGEgbW9kdWxvIG9wZXJhdGlvbikuCisgICAgaW5saW5lIHNpemVfdHlwZQorICAgIG9wZXJhdG9yKCkoc2l6ZV90eXBlIGhhc2gpIGNvbnN0OworICAgICAgCisgIHByaXZhdGU6CisgICAgdHlwZWRlZiBkZXRhaWw6Om1vZF9iYXNlZF9yYW5nZV9oYXNoaW5nPHNpemVfdHlwZT4gbW9kX2Jhc2VkX2Jhc2U7CisgIH07CisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vZGlyZWN0X21vZF9yYW5nZV9oYXNoaW5nX2ltcC5ocHA+CisKKyN1bmRlZiBQQl9EU19DTEFTU19UX0RFQworI3VuZGVmIFBCX0RTX0NMQVNTX0NfREVDCisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgdGVtcGxhdGU8Ym9vbCBFeHRlcm5hbF9Mb2FkX0FjY2VzcywgdHlwZW5hbWUgU2l6ZV9UeXBlPgorI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBoYXNoX2xvYWRfY2hlY2tfcmVzaXplX3RyaWdnZXI8RXh0ZXJuYWxfTG9hZF9BY2Nlc3MsIFNpemVfVHlwZT4KKyNkZWZpbmUgUEJfRFNfU0laRV9CQVNFX0NfREVDIGRldGFpbDo6aGFzaF9sb2FkX2NoZWNrX3Jlc2l6ZV90cmlnZ2VyX3NpemVfYmFzZTxTaXplX1R5cGUsIEV4dGVybmFsX0xvYWRfQWNjZXNzPgorCisgIC8vIEEgcmVzaXplIHRyaWdnZXIgcG9saWN5IGJhc2VkIG9uIGEgbG9hZCBjaGVjay4gSXQga2VlcHMgdGhlCisgIC8vIGxvYWQgZmFjdG9yIGJldHdlZW4gc29tZSBsb2FkIGZhY3RvcnMgbG9hZF9taW4gYW5kIGxvYWRfbWF4LgorICB0ZW1wbGF0ZTxib29sIEV4dGVybmFsX0xvYWRfQWNjZXNzID0gZmFsc2UsIHR5cGVuYW1lIFNpemVfVHlwZSA9IHNpemVfdD4KKyAgY2xhc3MgaGFzaF9sb2FkX2NoZWNrX3Jlc2l6ZV90cmlnZ2VyIDogcHJpdmF0ZSBQQl9EU19TSVpFX0JBU0VfQ19ERUMKKyAgeworICBwdWJsaWM6CisgICAgdHlwZWRlZiBTaXplX1R5cGUgc2l6ZV90eXBlOworCisgICAgZW51bQorICAgICAgeworCWV4dGVybmFsX2xvYWRfYWNjZXNzID0gRXh0ZXJuYWxfTG9hZF9BY2Nlc3MKKyAgICAgIH07CisKKyAgICAvLyBEZWZhdWx0IGNvbnN0cnVjdG9yLCBvciBjb25zdHJ1Y3RvciB0YWtpbmcgbG9hZF9taW4gYW5kCisgICAgLy8gbG9hZF9tYXggbG9hZCBmYWN0b3JzIGJldHdlZW4gd2hpY2ggdGhpcyBwb2xpY3kgd2lsbCBrZWVwIHRoZQorICAgIC8vIGFjdHVhbCBsb2FkLgorICAgIGhhc2hfbG9hZF9jaGVja19yZXNpemVfdHJpZ2dlcihmbG9hdCBsb2FkX21pbiA9IDAuMTI1LAorCQkJCSAgIGZsb2F0IGxvYWRfbWF4ID0gMC41KTsKKworICAgIHZvaWQKKyAgICBzd2FwKGhhc2hfbG9hZF9jaGVja19yZXNpemVfdHJpZ2dlciYgb3RoZXIpOworCisgICAgdmlydHVhbAorICAgIH5oYXNoX2xvYWRfY2hlY2tfcmVzaXplX3RyaWdnZXIoKTsKKworICAgIC8vIFJldHVybnMgYSBwYWlyIG9mIHRoZSBtaW5pbWFsIGFuZCBtYXhpbWFsIGxvYWRzLCByZXNwZWN0aXZlbHkuCisgICAgaW5saW5lIHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+CisgICAgZ2V0X2xvYWRzKCkgY29uc3Q7CisKKyAgICAvLyBTZXRzIHRoZSBsb2FkcyB0aHJvdWdoIGEgcGFpciBvZiB0aGUgbWluaW1hbCBhbmQgbWF4aW1hbAorICAgIC8vIGxvYWRzLCByZXNwZWN0aXZlbHkuCisgICAgdm9pZAorICAgIHNldF9sb2FkcyhzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiBsb2FkX3BhaXIpOworCisgIHByb3RlY3RlZDoKKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9pbnNlcnRfc2VhcmNoX3N0YXJ0KCk7CisKKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9pbnNlcnRfc2VhcmNoX2NvbGxpc2lvbigpOworCisgICAgaW5saW5lIHZvaWQKKyAgICBub3RpZnlfaW5zZXJ0X3NlYXJjaF9lbmQoKTsKKworICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2ZpbmRfc2VhcmNoX3N0YXJ0KCk7CisKKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9maW5kX3NlYXJjaF9jb2xsaXNpb24oKTsKKworICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2ZpbmRfc2VhcmNoX2VuZCgpOworCisgICAgaW5saW5lIHZvaWQKKyAgICBub3RpZnlfZXJhc2Vfc2VhcmNoX3N0YXJ0KCk7CisKKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9lcmFzZV9zZWFyY2hfY29sbGlzaW9uKCk7CisKKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9lcmFzZV9zZWFyY2hfZW5kKCk7CisKKyAgICAvLyBOb3RpZmllcyBhbiBlbGVtZW50IHdhcyBpbnNlcnRlZC4gVGhlIHRvdGFsIG51bWJlciBvZiBlbnRyaWVzCisgICAgLy8gaW4gdGhlIHRhYmxlIGlzIG51bV9lbnRyaWVzLgorICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2luc2VydGVkKHNpemVfdHlwZSBudW1fZW50cmllcyk7CisKKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9lcmFzZWQoc2l6ZV90eXBlIG51bV9lbnRyaWVzKTsKKworICAgIC8vIE5vdGlmaWVzIHRoZSB0YWJsZSB3YXMgY2xlYXJlZC4KKyAgICB2b2lkCisgICAgbm90aWZ5X2NsZWFyZWQoKTsKKworICAgIC8vIE5vdGlmaWVzIHRoZSB0YWJsZSB3YXMgcmVzaXplZCBhcyBhIHJlc3VsdCBvZiB0aGlzIG9iamVjdCdzCisgICAgLy8gc2lnbmlmeWluZyB0aGF0IGEgcmVzaXplIGlzIG5lZWRlZC4KKyAgICB2b2lkCisgICAgbm90aWZ5X3Jlc2l6ZWQoc2l6ZV90eXBlIG5ld19zaXplKTsKKworICAgIHZvaWQKKyAgICBub3RpZnlfZXh0ZXJuYWxseV9yZXNpemVkKHNpemVfdHlwZSBuZXdfc2l6ZSk7CisKKyAgICBpbmxpbmUgYm9vbAorICAgIGlzX3Jlc2l6ZV9uZWVkZWQoKSBjb25zdDsKKworICAgIGlubGluZSBib29sCisgICAgaXNfZ3Jvd19uZWVkZWQoc2l6ZV90eXBlIHNpemUsIHNpemVfdHlwZSBudW1fZW50cmllcykgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQKKyAgICBkb19yZXNpemUoc2l6ZV90eXBlIG5ld19zaXplKTsKKworICAgIHR5cGVkZWYgUEJfRFNfU0laRV9CQVNFX0NfREVDIHNpemVfYmFzZTsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgdm9pZAorICAgIGFzc2VydF92YWxpZCgpIGNvbnN0OworI2VuZGlmIAorCisgICAgZmxvYXQgCW1fbG9hZF9taW47CisgICAgZmxvYXQgCW1fbG9hZF9tYXg7CisgICAgc2l6ZV90eXBlIAltX25leHRfc2hyaW5rX3NpemU7CisgICAgc2l6ZV90eXBlIAltX25leHRfZ3Jvd19zaXplOworICAgIGJvb2wgCW1fcmVzaXplX25lZWRlZDsKKyAgfTsKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9oYXNoX2xvYWRfY2hlY2tfcmVzaXplX3RyaWdnZXJfaW1wLmhwcD4KKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKyN1bmRlZiBQQl9EU19TSVpFX0JBU0VfQ19ERUMKKworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQyB0ZW1wbGF0ZTxib29sIEV4dGVybmFsX0xvYWRfQWNjZXNzLCB0eXBlbmFtZSBTaXplX1R5cGU+CisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIGNjX2hhc2hfbWF4X2NvbGxpc2lvbl9jaGVja19yZXNpemVfdHJpZ2dlcjxFeHRlcm5hbF9Mb2FkX0FjY2VzcywgU2l6ZV9UeXBlPgorCisgIC8vIEEgcmVzaXplIHRyaWdnZXIgcG9saWN5IGJhc2VkIG9uIGNvbGxpc2lvbiBjaGVja3MuIEl0IGtlZXBzIHRoZQorICAvLyBzaW11bGF0ZWQgbG9hZCBmYWN0b3IgbG93ZXIgdGhhbiBzb21lIGdpdmVuIGxvYWQgZmFjdG9yLgorICB0ZW1wbGF0ZTxib29sIEV4dGVybmFsX0xvYWRfQWNjZXNzID0gZmFsc2UsIHR5cGVuYW1lIFNpemVfVHlwZSA9IHNpemVfdD4KKyAgY2xhc3MgY2NfaGFzaF9tYXhfY29sbGlzaW9uX2NoZWNrX3Jlc2l6ZV90cmlnZ2VyCisgIHsKKyAgcHVibGljOgorICAgIHR5cGVkZWYgU2l6ZV9UeXBlIHNpemVfdHlwZTsKKworICAgIGVudW0KKyAgICAgIHsKKwlleHRlcm5hbF9sb2FkX2FjY2VzcyA9IEV4dGVybmFsX0xvYWRfQWNjZXNzCisgICAgICB9OworCisgICAgLy8gRGVmYXVsdCBjb25zdHJ1Y3Rvciwgb3IgY29uc3RydWN0b3IgdGFraW5nIGxvYWQsIGEgX19sb2FkCisgICAgLy8gZmFjdG9yIHdoaWNoIGl0IHdpbGwgYXR0ZW1wdCB0byBtYWludGFpbi4KKyAgICBjY19oYXNoX21heF9jb2xsaXNpb25fY2hlY2tfcmVzaXplX3RyaWdnZXIoZmxvYXQgbG9hZCA9IDAuNSk7CisKKyAgICB2b2lkCisgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpOworCisgICAgLy8gUmV0dXJucyB0aGUgY3VycmVudCBsb2FkLgorICAgIGlubGluZSBmbG9hdAorICAgIGdldF9sb2FkKCkgY29uc3Q7CisKKyAgICAvLyBTZXRzIHRoZSBsb2FkOyBkb2VzIG5vdCByZXNpemUgdGhlIGNvbnRhaW5lci4KKyAgICB2b2lkCisgICAgc2V0X2xvYWQoZmxvYXQgbG9hZCk7CisKKyAgcHJvdGVjdGVkOgorICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2luc2VydF9zZWFyY2hfc3RhcnQoKTsKKworICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2luc2VydF9zZWFyY2hfY29sbGlzaW9uKCk7CisKKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9pbnNlcnRfc2VhcmNoX2VuZCgpOworCisgICAgaW5saW5lIHZvaWQKKyAgICBub3RpZnlfZmluZF9zZWFyY2hfc3RhcnQoKTsKKworICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2ZpbmRfc2VhcmNoX2NvbGxpc2lvbigpOworCisgICAgaW5saW5lIHZvaWQKKyAgICBub3RpZnlfZmluZF9zZWFyY2hfZW5kKCk7CisKKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9lcmFzZV9zZWFyY2hfc3RhcnQoKTsKKworICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2VyYXNlX3NlYXJjaF9jb2xsaXNpb24oKTsKKworICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2VyYXNlX3NlYXJjaF9lbmQoKTsKKworICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2luc2VydGVkKHNpemVfdHlwZSBudW1fZW50cmllcyk7CisKKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9lcmFzZWQoc2l6ZV90eXBlIG51bV9lbnRyaWVzKTsKKworICAgIHZvaWQKKyAgICBub3RpZnlfY2xlYXJlZCgpOworCisgICAgLy8gTm90aWZpZXMgdGhlIHRhYmxlIHdhcyByZXNpemVkIGFzIGEgcmVzdWx0IG9mIHRoaXMgb2JqZWN0J3MKKyAgICAvLyBzaWduaWZ5aW5nIHRoYXQgYSByZXNpemUgaXMgbmVlZGVkLgorICAgIHZvaWQKKyAgICBub3RpZnlfcmVzaXplZChzaXplX3R5cGUgbmV3X3NpemUpOworCisgICAgdm9pZAorICAgIG5vdGlmeV9leHRlcm5hbGx5X3Jlc2l6ZWQoc2l6ZV90eXBlIG5ld19zaXplKTsKKworICAgIGlubGluZSBib29sCisgICAgaXNfcmVzaXplX25lZWRlZCgpIGNvbnN0OworCisgICAgaW5saW5lIGJvb2wKKyAgICBpc19ncm93X25lZWRlZChzaXplX3R5cGUgc2l6ZSwgc2l6ZV90eXBlIG51bV9lbnRyaWVzKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIHZvaWQKKyAgICBjYWxjX21heF9udW1fY29sbCgpOworCisgICAgaW5saW5lIHZvaWQKKyAgICBjYWxjX3Jlc2l6ZV9uZWVkZWQoKTsKKworICAgIGZsb2F0IAltX2xvYWQ7CisgICAgc2l6ZV90eXBlIAltX3NpemU7CisgICAgc2l6ZV90eXBlIAltX251bV9jb2w7CisgICAgc2l6ZV90eXBlIAltX21heF9jb2w7CisgICAgYm9vbCAJbV9yZXNpemVfbmVlZGVkOworICB9OworCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9yZXNpemVfcG9saWN5L2NjX2hhc2hfbWF4X2NvbGxpc2lvbl9jaGVja19yZXNpemVfdHJpZ2dlcl9pbXAuaHBwPgorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworCisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIHRlbXBsYXRlPHR5cGVuYW1lIFNpemVfVHlwZT4KKyNkZWZpbmUgUEJfRFNfQ0xBU1NfQ19ERUMgaGFzaF9leHBvbmVudGlhbF9zaXplX3BvbGljeTxTaXplX1R5cGU+CisKKyAgLy8gQSBzaXplIHBvbGljeSB3aG9zZSBzZXF1ZW5jZSBvZiBzaXplcyBmb3JtIGFuIGV4cG9uZW50aWFsCisgIC8vIHNlcXVlbmNlICh0eXBpY2FsbHkgcG93ZXJzIG9mIDIuCisgIHRlbXBsYXRlPHR5cGVuYW1lIFNpemVfVHlwZSA9IHNpemVfdD4KKyAgY2xhc3MgaGFzaF9leHBvbmVudGlhbF9zaXplX3BvbGljeQorICB7CisgIHB1YmxpYzoKKyAgICB0eXBlZGVmIFNpemVfVHlwZSBzaXplX3R5cGU7CisKKyAgICAvLyBEZWZhdWx0IGNvbnN0cnVjdG9yLCBvciBvbnN0cnVjdG9yIHRha2luZyBhIHN0YXJ0X3NpemUsIG9yCisgICAgLy8gY29uc3RydWN0b3IgdGFraW5nIGEgc3RhcnQgc2l6ZSBhbmQgZ3Jvd19mYWN0b3IuIFRoZSBwb2xpY3kKKyAgICAvLyB3aWxsIHVzZSB0aGUgc2VxdWVuY2Ugb2Ygc2l6ZXMgc3RhcnRfc2l6ZSwgc3RhcnRfc2l6ZSoKKyAgICAvLyBncm93X2ZhY3Rvciwgc3RhcnRfc2l6ZSogZ3Jvd19mYWN0b3JeMiwgLi4uCisgICAgaGFzaF9leHBvbmVudGlhbF9zaXplX3BvbGljeShzaXplX3R5cGUgc3RhcnRfc2l6ZSA9IDgsCisJCQkJIHNpemVfdHlwZSBncm93X2ZhY3RvciA9IDIpOworCisgICAgdm9pZAorICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKTsKKworICBwcm90ZWN0ZWQ6CisgICAgc2l6ZV90eXBlCisgICAgZ2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoc2l6ZV90eXBlIHNpemUpIGNvbnN0OworCisgICAgc2l6ZV90eXBlCisgICAgZ2V0X25lYXJlc3Rfc21hbGxlcl9zaXplKHNpemVfdHlwZSBzaXplKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIHNpemVfdHlwZSBtX3N0YXJ0X3NpemU7CisgICAgc2l6ZV90eXBlIG1fZ3Jvd19mYWN0b3I7CisgIH07CisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvaGFzaF9leHBvbmVudGlhbF9zaXplX3BvbGljeV9pbXAuaHBwPgorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworCisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIGhhc2hfcHJpbWVfc2l6ZV9wb2xpY3kKKworICAvLyBBIHNpemUgcG9saWN5IHdob3NlIHNlcXVlbmNlIG9mIHNpemVzIGZvcm0gYSBuZWFybHktZXhwb25lbnRpYWwKKyAgLy8gc2VxdWVuY2Ugb2YgcHJpbWVzLgorICBjbGFzcyBoYXNoX3ByaW1lX3NpemVfcG9saWN5CisgIHsKKyAgcHVibGljOgorICAgIC8vIFNpemUgdHlwZS4KKyAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CisKKyAgICAvLyBEZWZhdWx0IGNvbnN0cnVjdG9yLCBvciBvbnN0cnVjdG9yIHRha2luZyBhIHN0YXJ0X3NpemUgVGhlCisgICAgLy8gcG9saWN5IHdpbGwgdXNlIHRoZSBzZXF1ZW5jZSBvZiBzaXplcyBhcHByb3hpbWF0ZWx5CisgICAgLy8gc3RhcnRfc2l6ZSwgc3RhcnRfc2l6ZSogMiwgc3RhcnRfc2l6ZSogMl4yLCAuLi4KKyAgICBoYXNoX3ByaW1lX3NpemVfcG9saWN5KHNpemVfdHlwZSBzdGFydF9zaXplID0gOCk7CisKKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKTsKKworICBwcm90ZWN0ZWQ6CisgICAgc2l6ZV90eXBlCisgICAgZ2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoc2l6ZV90eXBlIHNpemUpIGNvbnN0OworCisgICAgc2l6ZV90eXBlCisgICAgZ2V0X25lYXJlc3Rfc21hbGxlcl9zaXplKHNpemVfdHlwZSBzaXplKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIHNpemVfdHlwZSBtX3N0YXJ0X3NpemU7CisgIH07CisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvaGFzaF9wcmltZV9zaXplX3BvbGljeV9pbXAuaHBwPgorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworCisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIHRlbXBsYXRlPHR5cGVuYW1lIFNpemVfUG9saWN5LCB0eXBlbmFtZSBUcmlnZ2VyX1BvbGljeSwgYm9vbCBFeHRlcm5hbF9TaXplX0FjY2VzcywgdHlwZW5hbWUgU2l6ZV9UeXBlPgorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIGhhc2hfc3RhbmRhcmRfcmVzaXplX3BvbGljeTxTaXplX1BvbGljeSwgVHJpZ2dlcl9Qb2xpY3ksIEV4dGVybmFsX1NpemVfQWNjZXNzLCBTaXplX1R5cGU+CisKKyAgLy8gQSByZXNpemUgcG9saWN5IHdoaWNoIGRlbGVnYXRlcyBvcGVyYXRpb25zIHRvIHNpemUgYW5kIHRyaWdnZXIgcG9saWNpZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIFNpemVfUG9saWN5ID0gaGFzaF9leHBvbmVudGlhbF9zaXplX3BvbGljeTw+LAorCSAgIHR5cGVuYW1lIFRyaWdnZXJfUG9saWN5ID0gaGFzaF9sb2FkX2NoZWNrX3Jlc2l6ZV90cmlnZ2VyPD4sCisJICAgYm9vbCBFeHRlcm5hbF9TaXplX0FjY2VzcyA9IGZhbHNlLAorCSAgIHR5cGVuYW1lIFNpemVfVHlwZSA9IHNpemVfdD4KKyAgY2xhc3MgaGFzaF9zdGFuZGFyZF9yZXNpemVfcG9saWN5IAorICA6IHB1YmxpYyBTaXplX1BvbGljeSwgcHVibGljIFRyaWdnZXJfUG9saWN5CisgIHsKKyAgcHVibGljOgorICAgIHR5cGVkZWYgU2l6ZV9UeXBlIAkJc2l6ZV90eXBlOworICAgIHR5cGVkZWYgVHJpZ2dlcl9Qb2xpY3kgCXRyaWdnZXJfcG9saWN5OworICAgIHR5cGVkZWYgU2l6ZV9Qb2xpY3kgCXNpemVfcG9saWN5OworCisgICAgZW51bQorICAgICAgeworCWV4dGVybmFsX3NpemVfYWNjZXNzID0gRXh0ZXJuYWxfU2l6ZV9BY2Nlc3MKKyAgICAgIH07CisKKyAgICAvLyBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICAgIGhhc2hfc3RhbmRhcmRfcmVzaXplX3BvbGljeSgpOworCisgICAgLy8gY29uc3RydWN0b3IgdGFraW5nIHNvbWUgcG9saWNpZXMgcl9zaXplX3BvbGljeSB3aWxsIGJlIGNvcGllZAorICAgIC8vIGJ5IHRoZSBTaXplX1BvbGljeSBvYmplY3Qgb2YgdGhpcyBvYmplY3QuCisgICAgaGFzaF9zdGFuZGFyZF9yZXNpemVfcG9saWN5KGNvbnN0IFNpemVfUG9saWN5JiByX3NpemVfcG9saWN5KTsKKworICAgIC8vIGNvbnN0cnVjdG9yIHRha2luZyBzb21lIHBvbGljaWVzLiByX3NpemVfcG9saWN5IHdpbGwgYmUKKyAgICAvLyBjb3BpZWQgYnkgdGhlIFNpemVfUG9saWN5IG9iamVjdCBvZiB0aGlzCisgICAgLy8gb2JqZWN0LiByX3RyaWdnZXJfcG9saWN5IHdpbGwgYmUgY29waWVkIGJ5IHRoZSBUcmlnZ2VyX1BvbGljeQorICAgIC8vIG9iamVjdCBvZiB0aGlzIG9iamVjdC4KKyAgICBoYXNoX3N0YW5kYXJkX3Jlc2l6ZV9wb2xpY3koY29uc3QgU2l6ZV9Qb2xpY3kmIHJfc2l6ZV9wb2xpY3ksIAorCQkJCWNvbnN0IFRyaWdnZXJfUG9saWN5JiByX3RyaWdnZXJfcG9saWN5KTsKKworICAgIHZpcnR1YWwKKyAgICB+aGFzaF9zdGFuZGFyZF9yZXNpemVfcG9saWN5KCk7CisKKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKTsKKworICAgIC8vIEFjY2VzcyB0byB0aGUgU2l6ZV9Qb2xpY3kgb2JqZWN0IHVzZWQuCisgICAgU2l6ZV9Qb2xpY3kmIAorICAgIGdldF9zaXplX3BvbGljeSgpOworCisgICAgLy8gQ29uc3QgYWNjZXNzIHRvIHRoZSBTaXplX1BvbGljeSBvYmplY3QgdXNlZC4KKyAgICBjb25zdCBTaXplX1BvbGljeSYgCisgICAgZ2V0X3NpemVfcG9saWN5KCkgY29uc3Q7CisKKyAgICAvLyBBY2Nlc3MgdG8gdGhlIFRyaWdnZXJfUG9saWN5IG9iamVjdCB1c2VkLgorICAgIFRyaWdnZXJfUG9saWN5JiAKKyAgICBnZXRfdHJpZ2dlcl9wb2xpY3koKTsKKworICAgIC8vIEFjY2VzcyB0byB0aGUgVHJpZ2dlcl9Qb2xpY3kgb2JqZWN0IHVzZWQuCisgICAgY29uc3QgVHJpZ2dlcl9Qb2xpY3kmIAorICAgIGdldF90cmlnZ2VyX3BvbGljeSgpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGNvbnRhaW5lci4KKyAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgZ2V0X2FjdHVhbF9zaXplKCkgY29uc3Q7CisKKyAgICAvLyBSZXNpemVzIHRoZSBjb250YWluZXIgdG8gc3VnZ2VzdGVkX25ld19zaXplLCBhIHN1Z2dlc3RlZCBzaXplCisgICAgLy8gKHRoZSBhY3R1YWwgc2l6ZSB3aWxsIGJlIGRldGVybWluZWQgYnkgdGhlIFNpemVfUG9saWN5CisgICAgLy8gb2JqZWN0KS4KKyAgICB2b2lkCisgICAgcmVzaXplKHNpemVfdHlwZSBzdWdnZXN0ZWRfbmV3X3NpemUpOworCisgIHByb3RlY3RlZDoKKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9pbnNlcnRfc2VhcmNoX3N0YXJ0KCk7CisKKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9pbnNlcnRfc2VhcmNoX2NvbGxpc2lvbigpOworCisgICAgaW5saW5lIHZvaWQKKyAgICBub3RpZnlfaW5zZXJ0X3NlYXJjaF9lbmQoKTsKKworICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2ZpbmRfc2VhcmNoX3N0YXJ0KCk7CisKKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9maW5kX3NlYXJjaF9jb2xsaXNpb24oKTsKKworICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2ZpbmRfc2VhcmNoX2VuZCgpOworCisgICAgaW5saW5lIHZvaWQKKyAgICBub3RpZnlfZXJhc2Vfc2VhcmNoX3N0YXJ0KCk7CisKKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9lcmFzZV9zZWFyY2hfY29sbGlzaW9uKCk7CisKKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9lcmFzZV9zZWFyY2hfZW5kKCk7CisKKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9pbnNlcnRlZChzaXplX3R5cGUgbnVtX2UpOworCisgICAgaW5saW5lIHZvaWQKKyAgICBub3RpZnlfZXJhc2VkKHNpemVfdHlwZSBudW1fZSk7CisKKyAgICB2b2lkCisgICAgbm90aWZ5X2NsZWFyZWQoKTsKKworICAgIHZvaWQKKyAgICBub3RpZnlfcmVzaXplZChzaXplX3R5cGUgbmV3X3NpemUpOworCisgICAgaW5saW5lIGJvb2wKKyAgICBpc19yZXNpemVfbmVlZGVkKCkgY29uc3Q7CisKKyAgICAvLyBRdWVyaWVzIHdoYXQgdGhlIG5ldyBzaXplIHNob3VsZCBiZSwgd2hlbiB0aGUgY29udGFpbmVyIGlzCisgICAgLy8gcmVzaXplZCBuYXR1cmFsbHkuIFRoZSBjdXJyZW50IF9fc2l6ZSBvZiB0aGUgY29udGFpbmVyIGlzCisgICAgLy8gc2l6ZSwgYW5kIHRoZSBudW1iZXIgb2YgdXNlZCBlbnRyaWVzIHdpdGhpbiB0aGUgY29udGFpbmVyIGlzCisgICAgLy8gbnVtX3VzZWRfZS4KKyAgICBzaXplX3R5cGUKKyAgICBnZXRfbmV3X3NpemUoc2l6ZV90eXBlIHNpemUsIHNpemVfdHlwZSBudW1fdXNlZF9lKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIC8vIFJlc2l6ZXMgdG8gbmV3X3NpemUuCisgICAgdmlydHVhbCB2b2lkCisgICAgZG9fcmVzaXplKHNpemVfdHlwZSBuZXdfc2l6ZSk7CisKKyAgICB0eXBlZGVmIFRyaWdnZXJfUG9saWN5IHRyaWdnZXJfcG9saWN5X2Jhc2U7CisKKyAgICB0eXBlZGVmIFNpemVfUG9saWN5IHNpemVfcG9saWN5X2Jhc2U7CisKKyAgICBzaXplX3R5cGUgbV9zaXplOworICB9OworCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9yZXNpemVfcG9saWN5L2hhc2hfc3RhbmRhcmRfcmVzaXplX3BvbGljeV9pbXAuaHBwPgorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL2xpc3RfdXBkYXRlX3BvbGljeS5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9saXN0X3VwZGF0ZV9wb2xpY3kuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMDViNjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9saXN0X3VwZGF0ZV9wb2xpY3kuaHBwCkBAIC0wLDAgKzEsMTM2IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBsaXN0X3VwZGF0ZV9wb2xpY3kuaHBwCisgKiBDb250YWlucyBwb2xpY2llcyBmb3IgbGlzdCB1cGRhdGUgY29udGFpbmVycy4KKyAqLworCisjaWZuZGVmIFBCX0RTX0xVX1BPTElDWV9IUFAKKyNkZWZpbmUgUEJfRFNfTFVfUE9MSUNZX0hQUAorCisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX3BvbGljeS9jb3VudGVyX2x1X21ldGFkYXRhLmhwcD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgLy8gQSBudWxsIHR5cGUgdGhhdCBtZWFucyB0aGF0IGVhY2ggbGluayBpbiBhIGxpc3QtYmFzZWQgY29udGFpbmVyCisgIC8vIGRvZXMgbm90IGFjdHVhbGx5IG5lZWQgbWV0YWRhdGEuCisgIHN0cnVjdCBudWxsX2x1X21ldGFkYXRhCisgIHsgfTsKKworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQyB0ZW1wbGF0ZTx0eXBlbmFtZSBBbGxvY2F0b3I+CisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIG1vdmVfdG9fZnJvbnRfbHVfcG9saWN5PEFsbG9jYXRvcj4KKworICAvLyBBIGxpc3QtdXBkYXRlIHBvbGljeSB0aGF0IHVuY29uZGl0aW9uYWxseSBtb3ZlcyBlbGVtZW50cyB0byB0aGUKKyAgLy8gZnJvbnQgb2YgdGhlIGxpc3QuCisgIHRlbXBsYXRlPHR5cGVuYW1lIEFsbG9jYXRvciA9IHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4KKyAgY2xhc3MgbW92ZV90b19mcm9udF9sdV9wb2xpY3kKKyAgeworICBwdWJsaWM6CisgICAgdHlwZWRlZiBBbGxvY2F0b3IgYWxsb2NhdG9yX3R5cGU7CisgICAgICAKKyAgICAvLyBNZXRhZGF0YSBvbiB3aGljaCB0aGlzIGZ1bmN0b3Igb3BlcmF0ZXMuCisgICAgdHlwZWRlZiBudWxsX2x1X21ldGFkYXRhIG1ldGFkYXRhX3R5cGU7CisgICAgICAKKyAgICAvLyBSZWZlcmVuY2UgdG8gbWV0YWRhdGEgb24gd2hpY2ggdGhpcyBmdW5jdG9yIG9wZXJhdGVzLgorICAgIHR5cGVkZWYgdHlwZW5hbWUgYWxsb2NhdG9yX3R5cGU6OnRlbXBsYXRlIHJlYmluZDxtZXRhZGF0YV90eXBlPjo6b3RoZXIgbWV0YWRhdGFfcmViaW5kOworICAgIHR5cGVkZWYgdHlwZW5hbWUgbWV0YWRhdGFfcmViaW5kOjpyZWZlcmVuY2UgbWV0YWRhdGFfcmVmZXJlbmNlOworICAgICAgCisgICAgLy8gQ3JlYXRlcyBhIG1ldGFkYXRhIG9iamVjdC4KKyAgICBtZXRhZGF0YV90eXBlCisgICAgb3BlcmF0b3IoKSgpIGNvbnN0OworICAgICAgCisgICAgLy8gRGVjaWRlcyB3aGV0aGVyIGEgbWV0YWRhdGEgb2JqZWN0IHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgZnJvbnQKKyAgICAvLyBvZiB0aGUgbGlzdC4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yKCkobWV0YWRhdGFfcmVmZXJlbmNlIHJfbWV0YWRhdGEpIGNvbnN0OworICAgICAgCisgIHByaXZhdGU6CisgICAgc3RhdGljIG51bGxfbHVfbWV0YWRhdGEgc19tZXRhZGF0YTsKKyAgfTsKKyAgCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9wb2xpY3kvbXRmX2x1X3BvbGljeV9pbXAuaHBwPgorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworCisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIHRlbXBsYXRlPHNpemVfdCBNYXhfQ291bnQsIGNsYXNzIEFsbG9jYXRvcj4KKyNkZWZpbmUgUEJfRFNfQ0xBU1NfQ19ERUMgY291bnRlcl9sdV9wb2xpY3k8TWF4X0NvdW50LCBBbGxvY2F0b3I+CisKKyAgLy8gQSBsaXN0LXVwZGF0ZSBwb2xpY3kgdGhhdCBtb3ZlcyBlbGVtZW50cyB0byB0aGUgZnJvbnQgb2YgdGhlIGxpc3QKKyAgLy8gYmFzZWQgb24gdGhlIGNvdW50ZXIgYWxnb3JpdGhtLgorICB0ZW1wbGF0ZTxzaXplX3QgTWF4X0NvdW50ID0gNSwgdHlwZW5hbWUgQWxsb2NhdG9yID0gc3RkOjphbGxvY2F0b3I8Y2hhcj4gPgorICBjbGFzcyBjb3VudGVyX2x1X3BvbGljeSAKKyAgOiBwcml2YXRlIGRldGFpbDo6Y291bnRlcl9sdV9wb2xpY3lfYmFzZTx0eXBlbmFtZSBBbGxvY2F0b3I6OnNpemVfdHlwZT4KKyAgeworICBwdWJsaWM6CisgICAgdHlwZWRlZiBBbGxvY2F0b3IgYWxsb2NhdG9yX3R5cGU7CisKKyAgICBlbnVtCisgICAgICB7CisJbWF4X2NvdW50ID0gTWF4X0NvdW50CisgICAgICB9OworCisgICAgdHlwZWRlZiB0eXBlbmFtZSBhbGxvY2F0b3JfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKKworICAgIC8vIE1ldGFkYXRhIG9uIHdoaWNoIHRoaXMgZnVuY3RvciBvcGVyYXRlcy4KKyAgICB0eXBlZGVmIGRldGFpbDo6Y291bnRlcl9sdV9tZXRhZGF0YTxzaXplX3R5cGU+IG1ldGFkYXRhX3R5cGU7CisKKyAgICAvLyBSZWZlcmVuY2UgdG8gbWV0YWRhdGEgb24gd2hpY2ggdGhpcyBmdW5jdG9yIG9wZXJhdGVzLgorICAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8bWV0YWRhdGFfdHlwZT46Om90aGVyIG1ldGFkYXRhX3JlYmluZDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIG1ldGFkYXRhX3JlYmluZDo6cmVmZXJlbmNlIG1ldGFkYXRhX3JlZmVyZW5jZTsKKworICAgIC8vIENyZWF0ZXMgYSBtZXRhZGF0YSBvYmplY3QuCisgICAgbWV0YWRhdGFfdHlwZQorICAgIG9wZXJhdG9yKCkoKSBjb25zdDsKKworICAgIC8vIERlY2lkZXMgd2hldGhlciBhIG1ldGFkYXRhIG9iamVjdCBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIGZyb250CisgICAgLy8gb2YgdGhlIGxpc3QuCisgICAgYm9vbAorICAgIG9wZXJhdG9yKCkobWV0YWRhdGFfcmVmZXJlbmNlIHJfbWV0YWRhdGEpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgdHlwZWRlZiBkZXRhaWw6OmNvdW50ZXJfbHVfcG9saWN5X2Jhc2U8dHlwZW5hbWUgQWxsb2NhdG9yOjpzaXplX3R5cGU+IGJhc2VfdHlwZTsKKyAgfTsKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfcG9saWN5L2NvdW50ZXJfbHVfcG9saWN5X2ltcC5ocHA+CisKKyN1bmRlZiBQQl9EU19DTEFTU19UX0RFQworI3VuZGVmIFBCX0RTX0NMQVNTX0NfREVDCisKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9wcmlvcml0eV9xdWV1ZS5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy9wcmlvcml0eV9xdWV1ZS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMxZjcwYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL3ByaW9yaXR5X3F1ZXVlLmhwcApAQCAtMCwwICsxLDEyNSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcHJpb3JpdHlfcXVldWUuaHBwCisgKiBDb250YWlucyBwcmlvcml0eV9xdWV1ZXMuCisgKi8KKworI2lmbmRlZiBQQl9EU19QUklPUklUWV9RVUVVRV9IUFAKKyNkZWZpbmUgUEJfRFNfUFJJT1JJVFlfUVVFVUVfSFBQCisKKyNpbmNsdWRlIDxleHQvcGJfZHMvdGFnX2FuZF90cmFpdC5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9wcmlvcml0eV9xdWV1ZV9iYXNlX2Rpc3BhdGNoLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3N0YW5kYXJkX3BvbGljaWVzLmhwcD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgLy8gQSBwcmlvcml0eSBxdWV1ZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVfVHlwZSwgCisJICAgdHlwZW5hbWUgQ21wX0ZuID0gc3RkOjpsZXNzPFZhbHVlX1R5cGU+LAorCSAgIHR5cGVuYW1lIFRhZyA9IHBhaXJpbmdfaGVhcF90YWcsCisJICAgdHlwZW5hbWUgQWxsb2NhdG9yID0gc3RkOjphbGxvY2F0b3I8Y2hhcj4gPgorICBjbGFzcyBwcmlvcml0eV9xdWV1ZSAKKyAgOiBwdWJsaWMgZGV0YWlsOjpwcmlvcml0eV9xdWV1ZV9iYXNlX2Rpc3BhdGNoPFZhbHVlX1R5cGUsQ21wX0ZuLFRhZyxBbGxvY2F0b3I+Ojp0eXBlCisgIHsKKyAgcHJpdmF0ZToKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6cHJpb3JpdHlfcXVldWVfYmFzZV9kaXNwYXRjaDxWYWx1ZV9UeXBlLENtcF9GbixUYWcsQWxsb2NhdG9yPjo6dHlwZSBiYXNlX3R5cGU7CisKKyAgcHVibGljOgorICAgIHR5cGVkZWYgVmFsdWVfVHlwZSAJCQkJCXZhbHVlX3R5cGU7CisgICAgdHlwZWRlZiBDbXBfRm4gCQkJCQljbXBfZm47CisgICAgdHlwZWRlZiBUYWcgCQkJCQljb250YWluZXJfY2F0ZWdvcnk7CisgICAgdHlwZWRlZiBBbGxvY2F0b3IgCQkJCQlhbGxvY2F0b3JfdHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGFsbG9jYXRvcl90eXBlOjpzaXplX3R5cGUgCQlzaXplX3R5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBhbGxvY2F0b3JfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIAlkaWZmZXJlbmNlX3R5cGU7CisKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGFsbG9jYXRvcl90eXBlOjp0ZW1wbGF0ZSByZWJpbmQ8dmFsdWVfdHlwZT46Om90aGVyIHZhbHVlX3JlYmluZDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIHZhbHVlX3JlYmluZDo6cmVmZXJlbmNlIAkJcmVmZXJlbmNlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgdmFsdWVfcmViaW5kOjpjb25zdF9yZWZlcmVuY2UgCWNvbnN0X3JlZmVyZW5jZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIHZhbHVlX3JlYmluZDo6cG9pbnRlciAJICAgCXBvaW50ZXI7CisgICAgdHlwZWRlZiB0eXBlbmFtZSB2YWx1ZV9yZWJpbmQ6OmNvbnN0X3BvaW50ZXIgCWNvbnN0X3BvaW50ZXI7CisKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfcG9pbnRfaXRlcmF0b3IgY29uc3RfcG9pbnRfaXRlcmF0b3I7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OnBvaW50X2l0ZXJhdG9yIAkJcG9pbnRfaXRlcmF0b3I7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIAkJY29uc3RfaXRlcmF0b3I7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Oml0ZXJhdG9yIAkJaXRlcmF0b3I7CisKKyAgICBwcmlvcml0eV9xdWV1ZSgpIHsgfQorCisgICAgLy8gQ29uc3RydWN0b3IgdGFraW5nIHNvbWUgcG9saWN5IG9iamVjdHMuIHJfY21wX2ZuIHdpbGwgYmUgY29waWVkCisgICAgLy8gYnkgdGhlIENtcF9GbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lciBvYmplY3QuCisgICAgcHJpb3JpdHlfcXVldWUoY29uc3QgY21wX2ZuJiByX2NtcF9mbikgOiBiYXNlX3R5cGUocl9jbXBfZm4pIHsgfQorCisgICAgLy8gQ29uc3RydWN0b3IgdGFraW5nIF9faXRlcmF0b3JzIHRvIGEgcmFuZ2Ugb2YgdmFsdWVfdHlwZXMuIFRoZQorICAgIC8vIHZhbHVlX3R5cGVzIGJldHdlZW4gZmlyc3RfaXQgYW5kIGxhc3RfaXQgd2lsbCBiZSBpbnNlcnRlZCBpbnRvCisgICAgLy8gdGhlIGNvbnRhaW5lciBvYmplY3QuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXQ+CisgICAgcHJpb3JpdHlfcXVldWUoSXQgZmlyc3RfaXQsIEl0IGxhc3RfaXQpCisgICAgeyBiYXNlX3R5cGU6OmNvcHlfZnJvbV9yYW5nZShmaXJzdF9pdCwgbGFzdF9pdCk7IH0KKworICAgIC8vIENvbnN0cnVjdG9yIHRha2luZyBfX2l0ZXJhdG9ycyB0byBhIHJhbmdlIG9mIHZhbHVlX3R5cGVzIGFuZAorICAgIC8vIHNvbWUgcG9saWN5IG9iamVjdHMgVGhlIHZhbHVlX3R5cGVzIGJldHdlZW4gZmlyc3RfaXQgYW5kCisgICAgLy8gbGFzdF9pdCB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlIGNvbnRhaW5lciBvYmplY3QuIHJfY21wX2ZuCisgICAgLy8gd2lsbCBiZSBjb3BpZWQgYnkgdGhlIGNtcF9mbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lciBvYmplY3QuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXQ+CisgICAgcHJpb3JpdHlfcXVldWUoSXQgZmlyc3RfaXQsIEl0IGxhc3RfaXQsIGNvbnN0IGNtcF9mbiYgcl9jbXBfZm4pCisgICAgOiBiYXNlX3R5cGUocl9jbXBfZm4pCisgICAgeyBiYXNlX3R5cGU6OmNvcHlfZnJvbV9yYW5nZShmaXJzdF9pdCwgbGFzdF9pdCk7IH0KKworICAgIHByaW9yaXR5X3F1ZXVlKGNvbnN0IHByaW9yaXR5X3F1ZXVlJiBvdGhlcikKKyAgICA6IGJhc2VfdHlwZSgoY29uc3QgYmFzZV90eXBlJiApb3RoZXIpIHsgfQorCisgICAgdmlydHVhbAorICAgIH5wcmlvcml0eV9xdWV1ZSgpIHsgfQorCisgICAgcHJpb3JpdHlfcXVldWUmIAorICAgIG9wZXJhdG9yPShjb25zdCBwcmlvcml0eV9xdWV1ZSYgb3RoZXIpCisgICAgeworICAgICAgaWYgKHRoaXMgIT0gJm90aGVyKQorCXsKKwkgIHByaW9yaXR5X3F1ZXVlIHRtcChvdGhlcik7CisJICBzd2FwKHRtcCk7CisJfQorICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIHZvaWQKKyAgICBzd2FwKHByaW9yaXR5X3F1ZXVlJiBvdGhlcikKKyAgICB7IGJhc2VfdHlwZTo6c3dhcChvdGhlcik7IH0KKyAgfTsKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvdGFnX2FuZF90cmFpdC5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy90YWdfYW5kX3RyYWl0LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2QyNTMzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvdGFnX2FuZF90cmFpdC5ocHAKQEAgLTAsMCArMSwzNjMgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHRhZ19hbmRfdHJhaXQuaHBwCisgKiBDb250YWlucyB0YWdzIGFuZCB0cmFpdHMsIGUuZy4sIG9uZXMgZGVzY3JpYmluZyB1bmRlcmx5aW5nCisgKiAgICBkYXRhIHN0cnVjdHVyZXMuCisgKi8KKworI2lmbmRlZiBQQl9EU19UQUdfQU5EX1RSQUlUX0hQUAorI2RlZmluZSBQQl9EU19UQUdfQU5EX1RSQUlUX0hQUAorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90eXBlX3V0aWxzLmhwcD4KKworLyoqCisgKiBAbmFtZXNwYWNlIF9fZ251X3BiZHMKKyAqIEBicmllZiBHTlUgZXh0ZW5zaW9ucyBmb3IgcG9saWN5LWJhc2VkIGRhdGEgc3RydWN0dXJlcyBmb3IgcHVibGljIHVzZS4KKyAqLworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgLy8gQSB0cml2aWFsIGl0ZXJhdG9yIHRhZy4gU2lnbmlmaWVzIHRoYXQgdGhlIGl0ZXJhdG9ycyBoYXMgbm9uZSBvZgorICAvLyB0aGUgU1RMJ3MgbW92ZW1lbnQgYWJpbGl0aWVzLgorICBzdHJ1Y3QgdHJpdmlhbF9pdGVyYXRvcl90YWcKKyAgeyB9OworCisgIC8vIFByb2hpYml0IG1vdmluZyB0cml2aWFsIGl0ZXJhdG9ycy4KKyAgdHlwZWRlZiB2b2lkIHRyaXZpYWxfaXRlcmF0b3JfZGlmZmVyZW5jZV90eXBlOworCisKKyAgLy8gU2lnbmlmaWVzIGEgYmFzaWMgaW52YWxpZGF0aW9uIGd1YXJhbnRlZSB0aGF0IGFueSBpdGVyYXRvciwKKyAgLy8gcG9pbnRlciwgb3IgcmVmZXJlbmNlIHRvIGEgY29udGFpbmVyIG9iamVjdCdzIG1hcHBlZCB2YWx1ZSB0eXBlCisgIC8vIGlzIHZhbGlkIGFzIGxvbmcgYXMgdGhlIGNvbnRhaW5lciBpcyBub3QgbW9kaWZpZWQuCisgIHN0cnVjdCBiYXNpY19pbnZhbGlkYXRpb25fZ3VhcmFudGVlCisgIHsgfTsKKworICAvLyBTaWduaWZpZXMgYW4gaW52YWxpZGF0aW9uIGd1YXJhbnRlZSB0aGF0IGluY2x1ZGVzIGFsbCB0aG9zZSBvZgorICAvLyBpdHMgYmFzZSwgYW5kIGFkZGl0aW9uYWxseSwgdGhhdCBhbnkgcG9pbnQtdHlwZSBpdGVyYXRvciwKKyAgLy8gcG9pbnRlciwgb3IgcmVmZXJlbmNlIHRvIGEgY29udGFpbmVyIG9iamVjdCdzIG1hcHBlZCB2YWx1ZSB0eXBlCisgIC8vIGlzIHZhbGlkIGFzIGxvbmcgYXMgaXRzIGNvcnJlc3BvbmRpbmcgZW50cnkgaGFzIG5vdCBiZSBlcmFzZWQsCisgIC8vIHJlZ2FyZGxlc3Mgb2YgbW9kaWZpY2F0aW9ucyB0byB0aGUgY29udGFpbmVyIG9iamVjdC4KKyAgc3RydWN0IHBvaW50X2ludmFsaWRhdGlvbl9ndWFyYW50ZWUgOiBwdWJsaWMgYmFzaWNfaW52YWxpZGF0aW9uX2d1YXJhbnRlZQorICB7IH07CisKKyAgLy8gU2lnbmlmaWVzIGFuIGludmFsaWRhdGlvbiBndWFyYW50ZWUgdGhhdCBpbmNsdWRlcyBhbGwgdGhvc2Ugb2YKKyAgLy8gaXRzIGJhc2UsIGFuZCBhZGRpdGlvbmFsbHksIHRoYXQgYW55IHJhbmdlLXR5cGUgaXRlcmF0b3IKKyAgLy8gKGluY2x1ZGluZyB0aGUgcmV0dXJucyBvZiBiZWdpbigpIGFuZCBlbmQoKSkgaXMgaW4gdGhlIGNvcnJlY3QKKyAgLy8gcmVsYXRpdmUgcG9zaXRpb25zIHRvIG90aGVyIHJhbmdlLXR5cGUgaXRlcmF0b3JzIGFzIGxvbmcgYXMgaXRzCisgIC8vIGNvcnJlc3BvbmRpbmcgZW50cnkgaGFzIG5vdCBiZSBlcmFzZWQsIHJlZ2FyZGxlc3Mgb2YKKyAgLy8gbW9kaWZpY2F0aW9ucyB0byB0aGUgY29udGFpbmVyIG9iamVjdC4KKyAgc3RydWN0IHJhbmdlX2ludmFsaWRhdGlvbl9ndWFyYW50ZWUgOiBwdWJsaWMgcG9pbnRfaW52YWxpZGF0aW9uX2d1YXJhbnRlZQorICB7IH07CisKKworICAvLy8gQSBtYXBwZWQtcG9saWN5IGluZGljYXRpbmcgdGhhdCBhbiBhc3NvY2lhdGl2ZSBjb250YWluZXIgaXMgYSBzZXQuCisgIC8vIFhYWCBzaG91bGQgdGhpcyBiZSBhIHRyYWl0IG9mIHRoZSBmb3JtIGlzX3NldDxUPiA/PworICBzdHJ1Y3QgbnVsbF9tYXBwZWRfdHlwZSB7IH07CisKKworICAvLy8gQmFzZSBkYXRhIHN0cnVjdHVyZSB0YWcuCisgIHN0cnVjdCBjb250YWluZXJfdGFnCisgIHsgfTsKKworICAvLy8gQmFzaWMgc3RyaW5nIGNvbnRhaW5lciwgaW5jbHVzaXZlIG9mIHN0cmluZ3MsIHJvcGVzLCBldGMuCisgIHN0cnVjdCBzdHJpbmdfdGFnIDogcHVibGljIGNvbnRhaW5lcl90YWcgeyB9OworCisgIC8vLyBCYXNpYyBzZXF1ZW5jZS4KKyAgc3RydWN0IHNlcXVlbmNlX3RhZyA6IHB1YmxpYyBjb250YWluZXJfdGFnIHsgfTsKKworICAvLy8gQmFzaWMgYXNzb2NpYXRpdmUtY29udGFpbmVyLgorICBzdHJ1Y3QgYXNzb2NpYXRpdmVfY29udGFpbmVyX3RhZyA6IHB1YmxpYyBjb250YWluZXJfdGFnIHsgfTsKKworICAvLy8gQmFzaWMgaGFzaC4KKyAgc3RydWN0IGJhc2ljX2hhc2hfdGFnIDogcHVibGljIGFzc29jaWF0aXZlX2NvbnRhaW5lcl90YWcgeyB9OworCisgIC8vLyBDb2xsaXNpb24tY2hhaW5pbmcgaGFzaC4KKyAgc3RydWN0IGNjX2hhc2hfdGFnIDogcHVibGljIGJhc2ljX2hhc2hfdGFnIHsgfTsKKworICAvLy8gR2VuZXJhbC1wcm9iaW5nIGhhc2guCisgIHN0cnVjdCBncF9oYXNoX3RhZyA6IHB1YmxpYyBiYXNpY19oYXNoX3RhZyB7IH07CisKKyAgLy8vIEJhc2ljIHRyZWUuCisgIHN0cnVjdCBiYXNpY190cmVlX3RhZyA6IHB1YmxpYyBhc3NvY2lhdGl2ZV9jb250YWluZXJfdGFnIHsgfTsKKworICAvLy8gdHJlZS4KKyAgc3RydWN0IHRyZWVfdGFnIDogcHVibGljIGJhc2ljX3RyZWVfdGFnIHsgfTsKKworICAvLy8gUmVkLWJsYWNrIHRyZWUuCisgIHN0cnVjdCByYl90cmVlX3RhZyA6IHB1YmxpYyB0cmVlX3RhZyB7IH07CisKKyAgLy8vIFNwbGF5IHRyZWUuCisgIHN0cnVjdCBzcGxheV90cmVlX3RhZyA6IHB1YmxpYyB0cmVlX3RhZyB7IH07CisKKyAgLy8vIE9yZGVyZWQtdmVjdG9yIHRyZWUuCisgIHN0cnVjdCBvdl90cmVlX3RhZyA6IHB1YmxpYyB0cmVlX3RhZyB7IH07CisKKyAgLy8vIHRyaWUuCisgIHN0cnVjdCB0cmllX3RhZyA6IHB1YmxpYyBiYXNpY190cmVlX3RhZyB7IH07CisKKyAgLy8vIFBBVFJJQ0lBIHRyaWUuCisgIHN0cnVjdCBwYXRfdHJpZV90YWcgOiBwdWJsaWMgdHJpZV90YWcgeyB9OworCisgIC8vLyBMaXN0LXVwZGF0ZS4KKyAgc3RydWN0IGxpc3RfdXBkYXRlX3RhZyA6IHB1YmxpYyBhc3NvY2lhdGl2ZV9jb250YWluZXJfdGFnIHsgfTsKKworICAvLy8gQmFzaWMgcHJpb3JpdHktcXVldWUuCisgIHN0cnVjdCBwcmlvcml0eV9xdWV1ZV90YWcgOiBwdWJsaWMgY29udGFpbmVyX3RhZyB7IH07CisKKyAgLy8vIFBhaXJpbmctaGVhcC4KKyAgc3RydWN0IHBhaXJpbmdfaGVhcF90YWcgOiBwdWJsaWMgcHJpb3JpdHlfcXVldWVfdGFnIHsgfTsKKworICAvLy8gQmlub21pYWwtaGVhcC4KKyAgc3RydWN0IGJpbm9taWFsX2hlYXBfdGFnIDogcHVibGljIHByaW9yaXR5X3F1ZXVlX3RhZyB7IH07CisKKyAgLy8vIFJlZHVuZGFudC1jb3VudGVyIGJpbm9taWFsLWhlYXAuCisgIHN0cnVjdCByY19iaW5vbWlhbF9oZWFwX3RhZyA6IHB1YmxpYyBwcmlvcml0eV9xdWV1ZV90YWcgeyB9OworCisgIC8vLyBCaW5hcnktaGVhcCAoYXJyYXktYmFzZWQpLgorICBzdHJ1Y3QgYmluYXJ5X2hlYXBfdGFnIDogcHVibGljIHByaW9yaXR5X3F1ZXVlX3RhZyB7IH07CisKKyAgLy8vIFRoaW4gaGVhcC4KKyAgc3RydWN0IHRoaW5faGVhcF90YWcgOiBwdWJsaWMgcHJpb3JpdHlfcXVldWVfdGFnIHsgfTsKKworCisgIC8vLyBCYXNlIHRyYWl0cyB0eXBlIGZvciBjb250YWluZXJzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBUYWc+CisgIHN0cnVjdCBjb250YWluZXJfdHJhaXRzX2Jhc2U7CisKKyAgdGVtcGxhdGU8PgorICBzdHJ1Y3QgY29udGFpbmVyX3RyYWl0c19iYXNlPGNjX2hhc2hfdGFnPgorICB7CisgICAgdHlwZWRlZiBjY19oYXNoX3RhZyBjb250YWluZXJfY2F0ZWdvcnk7CisgICAgdHlwZWRlZiBwb2ludF9pbnZhbGlkYXRpb25fZ3VhcmFudGVlIGludmFsaWRhdGlvbl9ndWFyYW50ZWU7CisKKyAgICBlbnVtCisgICAgICB7CisgICAgICAgIG9yZGVyX3ByZXNlcnZpbmcgPSBmYWxzZSwKKyAgICAgICAgZXJhc2VfY2FuX3Rocm93ID0gZmFsc2UsCisJc3BsaXRfam9pbl9jYW5fdGhyb3cgPSBmYWxzZSwKKwlyZXZlcnNlX2l0ZXJhdGlvbiA9IGZhbHNlCisgICAgICB9OworICB9OworCisgIHRlbXBsYXRlPD4KKyAgc3RydWN0IGNvbnRhaW5lcl90cmFpdHNfYmFzZTxncF9oYXNoX3RhZz4KKyAgeworICAgIHR5cGVkZWYgZ3BfaGFzaF90YWcgY29udGFpbmVyX2NhdGVnb3J5OworICAgIHR5cGVkZWYgYmFzaWNfaW52YWxpZGF0aW9uX2d1YXJhbnRlZSBpbnZhbGlkYXRpb25fZ3VhcmFudGVlOworCisgICAgZW51bQorICAgICAgeworICAgICAgICBvcmRlcl9wcmVzZXJ2aW5nID0gZmFsc2UsCisJZXJhc2VfY2FuX3Rocm93ID0gZmFsc2UsCisJc3BsaXRfam9pbl9jYW5fdGhyb3cgPSBmYWxzZSwKKwlyZXZlcnNlX2l0ZXJhdGlvbiA9IGZhbHNlCisgICAgICB9OworICB9OworCisgIHRlbXBsYXRlPD4KKyAgc3RydWN0IGNvbnRhaW5lcl90cmFpdHNfYmFzZTxyYl90cmVlX3RhZz4KKyAgeworICAgIHR5cGVkZWYgcmJfdHJlZV90YWcgY29udGFpbmVyX2NhdGVnb3J5OworICAgIHR5cGVkZWYgcmFuZ2VfaW52YWxpZGF0aW9uX2d1YXJhbnRlZSBpbnZhbGlkYXRpb25fZ3VhcmFudGVlOworCisgICAgZW51bQorICAgICAgeworICAgICAgICBvcmRlcl9wcmVzZXJ2aW5nID0gdHJ1ZSwKKyAgICAgICAgZXJhc2VfY2FuX3Rocm93ID0gZmFsc2UsCisJc3BsaXRfam9pbl9jYW5fdGhyb3cgPSBmYWxzZSwKKyAgICAgICAgcmV2ZXJzZV9pdGVyYXRpb24gPSB0cnVlCisgICAgICB9OworICB9OworCisgIHRlbXBsYXRlPD4KKyAgc3RydWN0IGNvbnRhaW5lcl90cmFpdHNfYmFzZTxzcGxheV90cmVlX3RhZz4KKyAgeworICAgIHR5cGVkZWYgc3BsYXlfdHJlZV90YWcgY29udGFpbmVyX2NhdGVnb3J5OworICAgIHR5cGVkZWYgcmFuZ2VfaW52YWxpZGF0aW9uX2d1YXJhbnRlZSBpbnZhbGlkYXRpb25fZ3VhcmFudGVlOworCisgICAgZW51bQorICAgICAgeworICAgICAgICBvcmRlcl9wcmVzZXJ2aW5nID0gdHJ1ZSwKKyAgICAgICAgZXJhc2VfY2FuX3Rocm93ID0gZmFsc2UsCisgICAgICAgIHNwbGl0X2pvaW5fY2FuX3Rocm93ID0gZmFsc2UsCisgICAgICAgIHJldmVyc2VfaXRlcmF0aW9uID0gdHJ1ZQorICAgICAgfTsKKyAgfTsKKworICB0ZW1wbGF0ZTw+CisgIHN0cnVjdCBjb250YWluZXJfdHJhaXRzX2Jhc2U8b3ZfdHJlZV90YWc+CisgIHsKKyAgICB0eXBlZGVmIG92X3RyZWVfdGFnIGNvbnRhaW5lcl9jYXRlZ29yeTsKKyAgICB0eXBlZGVmIGJhc2ljX2ludmFsaWRhdGlvbl9ndWFyYW50ZWUgaW52YWxpZGF0aW9uX2d1YXJhbnRlZTsKKworICAgIGVudW0KKyAgICAgIHsKKyAgICAgICAgb3JkZXJfcHJlc2VydmluZyA9IHRydWUsCisgICAgICAgIGVyYXNlX2Nhbl90aHJvdyA9IHRydWUsCisgICAgICAgIHNwbGl0X2pvaW5fY2FuX3Rocm93ID0gdHJ1ZSwKKyAgICAgICAgcmV2ZXJzZV9pdGVyYXRpb24gPSBmYWxzZQorICAgICAgfTsKKyAgfTsKKworICB0ZW1wbGF0ZTw+CisgIHN0cnVjdCBjb250YWluZXJfdHJhaXRzX2Jhc2U8cGF0X3RyaWVfdGFnPgorICB7CisgICAgdHlwZWRlZiBwYXRfdHJpZV90YWcgY29udGFpbmVyX2NhdGVnb3J5OworICAgIHR5cGVkZWYgcmFuZ2VfaW52YWxpZGF0aW9uX2d1YXJhbnRlZSBpbnZhbGlkYXRpb25fZ3VhcmFudGVlOworCisgICAgZW51bQorICAgICAgeworICAgICAgICBvcmRlcl9wcmVzZXJ2aW5nID0gdHJ1ZSwKKyAgICAgICAgZXJhc2VfY2FuX3Rocm93ID0gZmFsc2UsCisgICAgICAgIHNwbGl0X2pvaW5fY2FuX3Rocm93ID0gdHJ1ZSwKKyAgICAgICAgcmV2ZXJzZV9pdGVyYXRpb24gPSB0cnVlCisgICAgICB9OworICB9OworCisgIHRlbXBsYXRlPD4KKyAgc3RydWN0IGNvbnRhaW5lcl90cmFpdHNfYmFzZTxsaXN0X3VwZGF0ZV90YWc+CisgIHsKKyAgICB0eXBlZGVmIGxpc3RfdXBkYXRlX3RhZyBjb250YWluZXJfY2F0ZWdvcnk7CisgICAgdHlwZWRlZiBwb2ludF9pbnZhbGlkYXRpb25fZ3VhcmFudGVlIGludmFsaWRhdGlvbl9ndWFyYW50ZWU7CisKKyAgICBlbnVtCisgICAgICB7CisgICAgICAgIG9yZGVyX3ByZXNlcnZpbmcgPSBmYWxzZSwKKyAgICAgICAgZXJhc2VfY2FuX3Rocm93ID0gZmFsc2UsCisJc3BsaXRfam9pbl9jYW5fdGhyb3cgPSBmYWxzZSwKKyAgICAgICAgcmV2ZXJzZV9pdGVyYXRpb24gPSBmYWxzZQorICAgICAgfTsKKyAgfTsKKworCisgIHRlbXBsYXRlPD4KKyAgc3RydWN0IGNvbnRhaW5lcl90cmFpdHNfYmFzZTxwYWlyaW5nX2hlYXBfdGFnPgorICB7CisgICAgdHlwZWRlZiBwYWlyaW5nX2hlYXBfdGFnIGNvbnRhaW5lcl9jYXRlZ29yeTsKKyAgICB0eXBlZGVmIHBvaW50X2ludmFsaWRhdGlvbl9ndWFyYW50ZWUgaW52YWxpZGF0aW9uX2d1YXJhbnRlZTsKKworICAgIGVudW0KKyAgICAgIHsKKyAgICAgICAgb3JkZXJfcHJlc2VydmluZyA9IGZhbHNlLAorICAgICAgICBlcmFzZV9jYW5fdGhyb3cgPSBmYWxzZSwKKwlzcGxpdF9qb2luX2Nhbl90aHJvdyA9IGZhbHNlLAorICAgICAgICByZXZlcnNlX2l0ZXJhdGlvbiA9IGZhbHNlCisgICAgICB9OworICB9OworCisgIHRlbXBsYXRlPD4KKyAgc3RydWN0IGNvbnRhaW5lcl90cmFpdHNfYmFzZTx0aGluX2hlYXBfdGFnPgorICB7CisgICAgdHlwZWRlZiB0aGluX2hlYXBfdGFnIGNvbnRhaW5lcl9jYXRlZ29yeTsKKyAgICB0eXBlZGVmIHBvaW50X2ludmFsaWRhdGlvbl9ndWFyYW50ZWUgaW52YWxpZGF0aW9uX2d1YXJhbnRlZTsKKworICAgIGVudW0KKyAgICAgIHsKKyAgICAgICAgb3JkZXJfcHJlc2VydmluZyA9IGZhbHNlLAorICAgICAgICBlcmFzZV9jYW5fdGhyb3cgPSBmYWxzZSwKKwlzcGxpdF9qb2luX2Nhbl90aHJvdyA9IGZhbHNlLAorICAgICAgICByZXZlcnNlX2l0ZXJhdGlvbiA9IGZhbHNlCisgICAgICB9OworICB9OworCisgIHRlbXBsYXRlPD4KKyAgc3RydWN0IGNvbnRhaW5lcl90cmFpdHNfYmFzZTxiaW5vbWlhbF9oZWFwX3RhZz4KKyAgeworICAgIHR5cGVkZWYgYmlub21pYWxfaGVhcF90YWcgY29udGFpbmVyX2NhdGVnb3J5OworICAgIHR5cGVkZWYgcG9pbnRfaW52YWxpZGF0aW9uX2d1YXJhbnRlZSBpbnZhbGlkYXRpb25fZ3VhcmFudGVlOworCisgICAgZW51bQorICAgICAgeworICAgICAgICBvcmRlcl9wcmVzZXJ2aW5nID0gZmFsc2UsCisgICAgICAgIGVyYXNlX2Nhbl90aHJvdyA9IGZhbHNlLAorCXNwbGl0X2pvaW5fY2FuX3Rocm93ID0gZmFsc2UsCisgICAgICAgIHJldmVyc2VfaXRlcmF0aW9uID0gZmFsc2UKKyAgICAgIH07CisgIH07CisKKyAgdGVtcGxhdGU8PgorICBzdHJ1Y3QgY29udGFpbmVyX3RyYWl0c19iYXNlPHJjX2Jpbm9taWFsX2hlYXBfdGFnPgorICB7CisgICAgdHlwZWRlZiByY19iaW5vbWlhbF9oZWFwX3RhZyBjb250YWluZXJfY2F0ZWdvcnk7CisgICAgdHlwZWRlZiBwb2ludF9pbnZhbGlkYXRpb25fZ3VhcmFudGVlIGludmFsaWRhdGlvbl9ndWFyYW50ZWU7CisKKyAgICBlbnVtCisgICAgICB7CisgICAgICAgIG9yZGVyX3ByZXNlcnZpbmcgPSBmYWxzZSwKKyAgICAgICAgZXJhc2VfY2FuX3Rocm93ID0gZmFsc2UsCisJc3BsaXRfam9pbl9jYW5fdGhyb3cgPSBmYWxzZSwKKyAgICAgICAgcmV2ZXJzZV9pdGVyYXRpb24gPSBmYWxzZQorICAgICAgfTsKKyAgfTsKKworICB0ZW1wbGF0ZTw+CisgIHN0cnVjdCBjb250YWluZXJfdHJhaXRzX2Jhc2U8YmluYXJ5X2hlYXBfdGFnPgorICB7CisgICAgdHlwZWRlZiBiaW5hcnlfaGVhcF90YWcgY29udGFpbmVyX2NhdGVnb3J5OworICAgIHR5cGVkZWYgYmFzaWNfaW52YWxpZGF0aW9uX2d1YXJhbnRlZSBpbnZhbGlkYXRpb25fZ3VhcmFudGVlOworCisgICAgZW51bQorICAgICAgeworICAgICAgICBvcmRlcl9wcmVzZXJ2aW5nID0gZmFsc2UsCisgICAgICAgIGVyYXNlX2Nhbl90aHJvdyA9IGZhbHNlLAorCXNwbGl0X2pvaW5fY2FuX3Rocm93ID0gdHJ1ZSwKKyAgICAgICAgcmV2ZXJzZV9pdGVyYXRpb24gPSBmYWxzZQorICAgICAgfTsKKyAgfTsKKworCisgIC8vLyBjb250YWluZXJfdHJhaXRzCisgIC8vIFNlZSBNYXR0IEF1c3Rlcm4gZm9yIHRoZSBuYW1lLCBTLiBNZXllcnMgTUVGQysrICMyLCBvdGhlcnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIENudG5yPgorICBzdHJ1Y3QgY29udGFpbmVyX3RyYWl0cyAKKyAgOiBwdWJsaWMgY29udGFpbmVyX3RyYWl0c19iYXNlPHR5cGVuYW1lIENudG5yOjpjb250YWluZXJfY2F0ZWdvcnk+CisgIHsKKyAgICB0eXBlZGVmIENudG5yIGNvbnRhaW5lcl90eXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ250bnI6OmNvbnRhaW5lcl9jYXRlZ29yeSBjb250YWluZXJfY2F0ZWdvcnk7CisgICAgdHlwZWRlZiBjb250YWluZXJfdHJhaXRzX2Jhc2U8Y29udGFpbmVyX2NhdGVnb3J5PiBiYXNlX3R5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmludmFsaWRhdGlvbl9ndWFyYW50ZWUgaW52YWxpZGF0aW9uX2d1YXJhbnRlZTsKKworICAgIGVudW0KKyAgICAgIHsKKwlvcmRlcl9wcmVzZXJ2aW5nID0gYmFzZV90eXBlOjpvcmRlcl9wcmVzZXJ2aW5nLAorCWVyYXNlX2Nhbl90aHJvdyA9IGJhc2VfdHlwZTo6ZXJhc2VfY2FuX3Rocm93LAorCXNwbGl0X2pvaW5fY2FuX3Rocm93ID0gYmFzZV90eXBlOjpzcGxpdF9qb2luX2Nhbl90aHJvdywKKwlyZXZlcnNlX2l0ZXJhdGlvbiA9IGJhc2VfdHlwZTo6cmV2ZXJzZV9pdGVyYXRpb24KKyAgICAgIH07CisgIH07Cit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvdHJlZV9wb2xpY3kuaHBwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcGJfZHMvdHJlZV9wb2xpY3kuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MDg2MGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy90cmVlX3BvbGljeS5ocHAKQEAgLTAsMCArMSwxNjIgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHRyZWVfcG9saWN5LmhwcAorICogQ29udGFpbnMgdHJlZS1yZWxhdGVkIHBvbGljaWVzLgorICovCisKKyNpZm5kZWYgUEJfRFNfVFJFRV9QT0xJQ1lfSFBQCisjZGVmaW5lIFBCX0RTX1RSRUVfUE9MSUNZX0hQUAorCisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90eXBlX3V0aWxzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2Jhc2ljX3RyZWVfcG9saWN5L2Jhc2ljX3RyZWVfcG9saWN5X2Jhc2UuaHBwPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICAvLyBBIG51bGwgbm9kZSB1cGRhdG9yLCBpbmRpY2F0aW5nIHRoYXQgbm8gbm9kZSB1cGRhdGVzIGFyZSByZXF1aXJlZC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgQ29uc3RfTm9kZV9JdGVyYXRvciwKKwkgICB0eXBlbmFtZSBOb2RlX0l0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIENtcF9GbiwKKwkgICB0eXBlbmFtZSBBbGxvY2F0b3I+CisgIHN0cnVjdCBudWxsX3RyZWVfbm9kZV91cGRhdGUKKyAgeyB9OworCisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIFwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgQ29uc3RfTm9kZV9JdGVyYXRvciwgY2xhc3MgTm9kZV9JdGVyYXRvciwgY2xhc3MgQ21wX0ZuLCBjbGFzcyBBbGxvY2F0b3I+CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfQ19ERUMgXAorICB0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU8Q29uc3RfTm9kZV9JdGVyYXRvciwgTm9kZV9JdGVyYXRvciwgQ21wX0ZuLCBBbGxvY2F0b3I+CisKKyNkZWZpbmUgUEJfRFNfQkFTRV9DX0RFQwkJCQkJCVwKKyAgZGV0YWlsOjpiYXNpY190cmVlX3BvbGljeV9iYXNlPENvbnN0X05vZGVfSXRlcmF0b3IsIE5vZGVfSXRlcmF0b3IsIEFsbG9jYXRvcj4KKworICAvLyBGdW5jdG9yIHVwZGF0aW5nIHJhbmtzIG9mIGVudHJlZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnN0X05vZGVfSXRlcmF0b3IsIHR5cGVuYW1lIE5vZGVfSXRlcmF0b3IsIAorCSAgIHR5cGVuYW1lIENtcF9GbiwgdHlwZW5hbWUgQWxsb2NhdG9yPgorICBjbGFzcyB0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGUgOiBwcml2YXRlIFBCX0RTX0JBU0VfQ19ERUMKKyAgeworICBwcml2YXRlOgorICAgIHR5cGVkZWYgUEJfRFNfQkFTRV9DX0RFQyBiYXNlX3R5cGU7CisKKyAgcHVibGljOgorICAgIHR5cGVkZWYgQ21wX0ZuIGNtcF9mbjsKKyAgICB0eXBlZGVmIEFsbG9jYXRvciBhbGxvY2F0b3JfdHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGFsbG9jYXRvcl90eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjprZXlfdHlwZSBrZXlfdHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3Rfa2V5X3JlZmVyZW5jZSBjb25zdF9rZXlfcmVmZXJlbmNlOworCisgICAgdHlwZWRlZiBzaXplX3R5cGUgbWV0YWRhdGFfdHlwZTsKKyAgICB0eXBlZGVmIENvbnN0X05vZGVfSXRlcmF0b3IgY29uc3Rfbm9kZV9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIE5vZGVfSXRlcmF0b3Igbm9kZV9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGNvbnN0X25vZGVfaXRlcmF0b3I6OnZhbHVlX3R5cGUgY29uc3RfaXRlcmF0b3I7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBub2RlX2l0ZXJhdG9yOjp2YWx1ZV90eXBlIGl0ZXJhdG9yOworCisgICAgLy8gRmluZHMgYW4gZW50cnkgYnkgX19vcmRlci4gUmV0dXJucyBhIGNvbnN0X2l0ZXJhdG9yIHRvIHRoZQorICAgIC8vIGVudHJ5IHdpdGggdGhlIF9fb3JkZXIgb3JkZXIsIG9yIGEgY29uc3RfaXRlcmF0b3IgdG8gdGhlCisgICAgLy8gY29udGFpbmVyIG9iamVjdCdzIGVuZCBpZiBvcmRlciBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiB0aGUKKyAgICAvLyBjb250YWluZXIgb2JqZWN0LgorICAgIGlubGluZSBjb25zdF9pdGVyYXRvcgorICAgIGZpbmRfYnlfb3JkZXIoc2l6ZV90eXBlIG9yZGVyKSBjb25zdDsKKworICAgIC8vIEZpbmRzIGFuIGVudHJ5IGJ5IF9fb3JkZXIuIFJldHVybnMgYW4gaXRlcmF0b3IgdG8gdGhlIGVudHJ5CisgICAgLy8gd2l0aCB0aGUgX19vcmRlciBvcmRlciwgb3IgYW4gaXRlcmF0b3IgdG8gdGhlIGNvbnRhaW5lcgorICAgIC8vIG9iamVjdCdzIGVuZCBpZiBvcmRlciBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiB0aGUgY29udGFpbmVyCisgICAgLy8gb2JqZWN0LgorICAgIGlubGluZSBpdGVyYXRvcgorICAgIGZpbmRfYnlfb3JkZXIoc2l6ZV90eXBlIG9yZGVyKTsKKworICAgIC8vIFJldHVybnMgdGhlIG9yZGVyIG9mIGEga2V5IHdpdGhpbiBhIHNlcXVlbmNlLiBGb3IgZXhhcG1sZSwgaWYKKyAgICAvLyByX2tleSBpcyB0aGUgc21hbGxlc3Qga2V5LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiAwOyBpZiByX2tleQorICAgIC8vIGlzIGEga2V5IGJldHdlZW4gdGhlIHNtYWxsZXN0IGFuZCBuZXh0IGtleSwgdGhpcyBtZXRob2Qgd2lsbAorICAgIC8vIHJldHVybiAxOyBpZiByX2tleSBpcyBhIGtleSBsYXJnZXIgdGhhbiB0aGUgbGFyZ2VzdCBrZXksIHRoaXMKKyAgICAvLyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIHNpemUgb2Ygcl9jLgorICAgIGlubGluZSBzaXplX3R5cGUKKyAgICBvcmRlcl9vZl9rZXkoY29uc3Rfa2V5X3JlZmVyZW5jZSByX2tleSkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICAvLyBDb25zdCByZWZlcmVuY2UgdG8gdGhlIGNvbnRhaW5lcidzIHZhbHVlLXR5cGUuCisgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAvLyBDb25zdCBwb2ludGVyIHRvIHRoZSBjb250YWluZXIncyB2YWx1ZS10eXBlLgorICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CisKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGFsbG9jYXRvcl90eXBlOjp0ZW1wbGF0ZSByZWJpbmQ8bWV0YWRhdGFfdHlwZT46Om90aGVyIG1ldGFkYXRhX3JlYmluZDsKKyAgICAvLyBDb25zdCBtZXRhZGF0YSByZWZlcmVuY2UuCisgICAgdHlwZWRlZiB0eXBlbmFtZSBtZXRhZGF0YV9yZWJpbmQ6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9tZXRhZGF0YV9yZWZlcmVuY2U7CisKKyAgICAvLyBNZXRhZGF0YSByZWZlcmVuY2UuCisgICAgdHlwZWRlZiB0eXBlbmFtZSBtZXRhZGF0YV9yZWJpbmQ6OnJlZmVyZW5jZSBtZXRhZGF0YV9yZWZlcmVuY2U7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBjb25zdF9ub2RlX2l0ZXJhdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgdHJlZSdzIHJvb3Qgbm9kZS4KKyAgICB2aXJ0dWFsIGNvbnN0X25vZGVfaXRlcmF0b3IKKyAgICBub2RlX2JlZ2luKCkgY29uc3QgPSAwOworCisgICAgLy8gUmV0dXJucyB0aGUgbm9kZV9pdGVyYXRvciBhc3NvY2lhdGVkIHdpdGggdGhlIHRyZWUncyByb290IG5vZGUuCisgICAgdmlydHVhbCBub2RlX2l0ZXJhdG9yCisgICAgbm9kZV9iZWdpbigpID0gMDsKKworICAgIC8vIFJldHVybnMgdGhlIGNvbnN0X25vZGVfaXRlcmF0b3IgYXNzb2NpYXRlZCB3aXRoIGEganVzdC1hZnRlciBsZWFmIG5vZGUuCisgICAgdmlydHVhbCBjb25zdF9ub2RlX2l0ZXJhdG9yCisgICAgbm9kZV9lbmQoKSBjb25zdCA9IDA7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBub2RlX2l0ZXJhdG9yIGFzc29jaWF0ZWQgd2l0aCBhIGp1c3QtYWZ0ZXIgbGVhZiBub2RlLgorICAgIHZpcnR1YWwgbm9kZV9pdGVyYXRvcgorICAgIG5vZGVfZW5kKCkgPSAwOworCisgICAgLy8gQWNjZXNzIHRvIHRoZSBjbXBfZm4gb2JqZWN0LgorICAgIHZpcnR1YWwgY21wX2ZuJiAKKyAgICBnZXRfY21wX2ZuKCkgPSAwOworCisgIHByb3RlY3RlZDoKKyAgICAvLyBVcGRhdGVzIHRoZSByYW5rIG9mIGEgbm9kZSB0aHJvdWdoIGEgbm9kZV9pdGVyYXRvciBub2RlX2l0OworICAgIC8vIGVuZF9uZF9pdCBpcyB0aGUgZW5kIG5vZGUgaXRlcmF0b3IuCisgICAgaW5saW5lIHZvaWQKKyAgICBvcGVyYXRvcigpKG5vZGVfaXRlcmF0b3Igbm9kZV9pdCwgY29uc3Rfbm9kZV9pdGVyYXRvciBlbmRfbmRfaXQpIGNvbnN0OworCisgICAgdmlydHVhbAorICAgIH50cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGUoKTsKKyAgfTsKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHJlZV9wb2xpY3kvb3JkZXJfc3RhdGlzdGljc19pbXAuaHBwPgorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworI3VuZGVmIFBCX0RTX0JBU0VfQ19ERUMKKworfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy90cmllX3BvbGljeS5ocHAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9wYl9kcy90cmllX3BvbGljeS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEwNTkxYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BiX2RzL3RyaWVfcG9saWN5LmhwcApAQCAtMCwwICsxLDM1NSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgdHJpZV9wb2xpY3kuaHBwCisgKiBDb250YWlucyB0cmllLXJlbGF0ZWQgcG9saWNpZXMuCisgKi8KKworI2lmbmRlZiBQQl9EU19UUklFX1BPTElDWV9IUFAKKyNkZWZpbmUgUEJfRFNfVFJJRV9QT0xJQ1lfSFBQCisKKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90eXBlX3V0aWxzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3RyaWVfcG9saWN5L3RyaWVfcG9saWN5X2Jhc2UuaHBwPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICAvLyBBIG51bGwgbm9kZSB1cGRhdG9yLCBpbmRpY2F0aW5nIHRoYXQgbm8gbm9kZSB1cGRhdGVzIGFyZSByZXF1aXJlZC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgQ29uc3RfTm9kZV9JdGVyYXRvciwKKwkgICB0eXBlbmFtZSBOb2RlX0l0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIEVfQWNjZXNzX1RyYWl0cywKKwkgICB0eXBlbmFtZSBBbGxvY2F0b3I+CisgIHN0cnVjdCBudWxsX3RyaWVfbm9kZV91cGRhdGUKKyAgeyB9OworCisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDCQkJCQkJXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmcsIHR5cGVuYW1lIFN0cmluZzo6dmFsdWVfdHlwZSBNaW5fRV9WYWwsIHR5cGVuYW1lIFN0cmluZzo6dmFsdWVfdHlwZSBNYXhfRV9WYWwsIGJvb2wgUmV2ZXJzZSwgdHlwZW5hbWUgQWxsb2NhdG9yPgorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDCQkJCQkJXAorICBzdHJpbmdfdHJpZV9lX2FjY2Vzc190cmFpdHM8U3RyaW5nLCBNaW5fRV9WYWwsTWF4X0VfVmFsLFJldmVyc2UsQWxsb2NhdG9yPgorCisgIC8vIEVsZW1lbnQgYWNjZXNzIHRyYWl0cyBmb3Igc3RyaW5nIHR5cGVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmcgPSBzdGQ6OnN0cmluZywKKwkgICB0eXBlbmFtZSBTdHJpbmc6OnZhbHVlX3R5cGUgTWluX0VfVmFsID0gZGV0YWlsOjpfX251bWVyaWNfdHJhaXRzPHR5cGVuYW1lIFN0cmluZzo6dmFsdWVfdHlwZT46Ol9fbWluLCAKKwkgICB0eXBlbmFtZSBTdHJpbmc6OnZhbHVlX3R5cGUgTWF4X0VfVmFsID0gZGV0YWlsOjpfX251bWVyaWNfdHJhaXRzPHR5cGVuYW1lIFN0cmluZzo6dmFsdWVfdHlwZT46Ol9fbWF4LCAKKwkgICBib29sIFJldmVyc2UgPSBmYWxzZSwKKwkgICB0eXBlbmFtZSBBbGxvY2F0b3IgPSBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+CisgIHN0cnVjdCBzdHJpbmdfdHJpZV9lX2FjY2Vzc190cmFpdHMKKyAgeworICBwdWJsaWM6CisgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnNpemVfdHlwZSBzaXplX3R5cGU7CisgICAgdHlwZWRlZiBTdHJpbmcga2V5X3R5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxrZXlfdHlwZT46Om90aGVyIGtleV9yZWJpbmQ7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBrZXlfcmViaW5kOjpjb25zdF9yZWZlcmVuY2UgY29uc3Rfa2V5X3JlZmVyZW5jZTsKKworICAgIGVudW0KKyAgICAgIHsKKwlyZXZlcnNlID0gUmV2ZXJzZQorICAgICAgfTsKKworICAgIC8vIEVsZW1lbnQgY29uc3QgaXRlcmF0b3IgdHlwZS4KKyAgICB0eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6X19jb25kaXRpb25hbF90eXBlPFJldmVyc2UsIHR5cGVuYW1lIFN0cmluZzo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciwgdHlwZW5hbWUgU3RyaW5nOjpjb25zdF9pdGVyYXRvcj46Ol9fdHlwZSBjb25zdF9pdGVyYXRvcjsKKworICAgIC8vIEVsZW1lbnQgdHlwZS4KKyAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPGNvbnN0X2l0ZXJhdG9yPjo6dmFsdWVfdHlwZSBlX3R5cGU7CisKKyAgICBlbnVtCisgICAgICB7CisJbWluX2VfdmFsID0gTWluX0VfVmFsLAorCW1heF9lX3ZhbCA9IE1heF9FX1ZhbCwKKwltYXhfc2l6ZSA9IG1heF9lX3ZhbCAtIG1pbl9lX3ZhbCArIDEKKyAgICAgIH07CisgICAgUEJfRFNfU1RBVElDX0FTU0VSVChtaW5fbWF4X3NpemUsIG1heF9zaXplID49IDIpOworCisgICAgLy8gUmV0dXJucyBhIGNvbnN0X2l0ZXJhdG9yIHRvIHRoZSBmaXJzdCBlbGVtZW50IG9mCisgICAgLy8gY29uc3Rfa2V5X3JlZmVyZW5jZSBhZ3VtbmV0LgorICAgIGlubGluZSBzdGF0aWMgY29uc3RfaXRlcmF0b3IKKyAgICBiZWdpbihjb25zdF9rZXlfcmVmZXJlbmNlKTsKKworICAgIC8vIFJldHVybnMgYSBjb25zdF9pdGVyYXRvciB0byB0aGUgYWZ0ZXItbGFzdCBlbGVtZW50IG9mCisgICAgLy8gY29uc3Rfa2V5X3JlZmVyZW5jZSBhcmd1bWVudC4KKyAgICBpbmxpbmUgc3RhdGljIGNvbnN0X2l0ZXJhdG9yCisgICAgZW5kKGNvbnN0X2tleV9yZWZlcmVuY2UpOworCisgICAgLy8gTWFwcyBhbiBlbGVtZW50IHRvIGEgcG9zaXRpb24uCisgICAgaW5saW5lIHN0YXRpYyBzaXplX3R5cGUKKyAgICBlX3BvcyhlX3R5cGUgZSk7CisKKyAgcHJpdmF0ZToKKworICAgIGlubGluZSBzdGF0aWMgY29uc3RfaXRlcmF0b3IKKyAgICBiZWdpbl9pbXAoY29uc3Rfa2V5X3JlZmVyZW5jZSwgZGV0YWlsOjpmYWxzZV90eXBlKTsKKworICAgIGlubGluZSBzdGF0aWMgY29uc3RfaXRlcmF0b3IKKyAgICBiZWdpbl9pbXAoY29uc3Rfa2V5X3JlZmVyZW5jZSwgZGV0YWlsOjp0cnVlX3R5cGUpOworCisgICAgaW5saW5lIHN0YXRpYyBjb25zdF9pdGVyYXRvcgorICAgIGVuZF9pbXAoY29uc3Rfa2V5X3JlZmVyZW5jZSwgZGV0YWlsOjpmYWxzZV90eXBlKTsKKworICAgIGlubGluZSBzdGF0aWMgY29uc3RfaXRlcmF0b3IKKyAgICBlbmRfaW1wKGNvbnN0X2tleV9yZWZlcmVuY2UsIGRldGFpbDo6dHJ1ZV90eXBlKTsKKworICAgIHN0YXRpYyBkZXRhaWw6OmludGVncmFsX2NvbnN0YW50PGludCwgUmV2ZXJzZT4gc19yZXZfaW5kOworICB9OworCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90cmllX3BvbGljeS9zdHJpbmdfdHJpZV9lX2FjY2Vzc190cmFpdHNfaW1wLmhwcD4KKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQyBcCisgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnN0X05vZGVfSXRlcmF0b3IsdHlwZW5hbWUgTm9kZV9JdGVyYXRvcixjbGFzcyBFX0FjY2Vzc19UcmFpdHMsIHR5cGVuYW1lIEFsbG9jYXRvcj4KKworI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBcCisgIHRyaWVfcHJlZml4X3NlYXJjaF9ub2RlX3VwZGF0ZTxDb25zdF9Ob2RlX0l0ZXJhdG9yLCBOb2RlX0l0ZXJhdG9yLCBFX0FjY2Vzc19UcmFpdHMsQWxsb2NhdG9yPgorCisjZGVmaW5lIFBCX0RTX0JBU0VfQ19ERUMgXAorICBkZXRhaWw6OnRyaWVfcG9saWN5X2Jhc2U8Q29uc3RfTm9kZV9JdGVyYXRvcixOb2RlX0l0ZXJhdG9yLEVfQWNjZXNzX1RyYWl0cywgQWxsb2NhdG9yPgorCisgIC8vIEEgbm9kZSB1cGRhdG9yIHRoYXQgYWxsb3dzIHRyaWVzIHRvIGJlIHNlYXJjaGVkIGZvciB0aGUgcmFuZ2Ugb2YKKyAgLy8gdmFsdWVzIHRoYXQgbWF0Y2ggYSBjZXJ0YWluIHByZWZpeC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgQ29uc3RfTm9kZV9JdGVyYXRvciwKKwkgICB0eXBlbmFtZSBOb2RlX0l0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIEVfQWNjZXNzX1RyYWl0cywKKwkgICB0eXBlbmFtZSBBbGxvY2F0b3I+CisgIGNsYXNzIHRyaWVfcHJlZml4X3NlYXJjaF9ub2RlX3VwZGF0ZSA6IHByaXZhdGUgUEJfRFNfQkFTRV9DX0RFQworICB7CisgIHByaXZhdGU6CisgICAgdHlwZWRlZiBQQl9EU19CQVNFX0NfREVDIGJhc2VfdHlwZTsKKworICBwdWJsaWM6CisgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmtleV90eXBlIGtleV90eXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9rZXlfcmVmZXJlbmNlIGNvbnN0X2tleV9yZWZlcmVuY2U7CisKKyAgICAvLyBFbGVtZW50IGFjY2VzcyB0cmFpdHMuCisgICAgdHlwZWRlZiBFX0FjY2Vzc19UcmFpdHMgZV9hY2Nlc3NfdHJhaXRzOworCisgICAgLy8gQ29uc3QgZWxlbWVudCBpdGVyYXRvci4KKyAgICB0eXBlZGVmIHR5cGVuYW1lIGVfYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IgY29uc3RfZV9pdGVyYXRvcjsKKworICAgIC8vIEFsbG9jYXRvciB0eXBlLgorICAgIHR5cGVkZWYgQWxsb2NhdG9yIGFsbG9jYXRvcl90eXBlOworCisgICAgLy8gU2l6ZSB0eXBlLgorICAgIHR5cGVkZWYgdHlwZW5hbWUgYWxsb2NhdG9yX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CisgICAgdHlwZWRlZiBkZXRhaWw6Om51bGxfbm9kZV9tZXRhZGF0YSBtZXRhZGF0YV90eXBlOworICAgIHR5cGVkZWYgQ29uc3RfTm9kZV9JdGVyYXRvciBjb25zdF9ub2RlX2l0ZXJhdG9yOworICAgIHR5cGVkZWYgTm9kZV9JdGVyYXRvciBub2RlX2l0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgY29uc3Rfbm9kZV9pdGVyYXRvcjo6dmFsdWVfdHlwZSBjb25zdF9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIG5vZGVfaXRlcmF0b3I6OnZhbHVlX3R5cGUgaXRlcmF0b3I7CisKKyAgICAvLyBGaW5kcyB0aGUgY29uc3QgaXRlcmF0b3IgcmFuZ2UgY29ycmVzcG9uZGluZyB0byBhbGwgdmFsdWVzCisgICAgLy8gd2hvc2UgcHJlZml4ZXMgbWF0Y2ggcl9rZXkuCisgICAgc3RkOjpwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4KKyAgICBwcmVmaXhfcmFuZ2UoY29uc3Rfa2V5X3JlZmVyZW5jZSkgY29uc3Q7CisKKyAgICAvLyBGaW5kcyB0aGUgaXRlcmF0b3IgcmFuZ2UgY29ycmVzcG9uZGluZyB0byBhbGwgdmFsdWVzIHdob3NlCisgICAgLy8gcHJlZml4ZXMgbWF0Y2ggcl9rZXkuCisgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4KKyAgICBwcmVmaXhfcmFuZ2UoY29uc3Rfa2V5X3JlZmVyZW5jZSk7CisKKyAgICAvLyBGaW5kcyB0aGUgY29uc3QgaXRlcmF0b3IgcmFuZ2UgY29ycmVzcG9uZGluZyB0byBhbGwgdmFsdWVzCisgICAgLy8gd2hvc2UgcHJlZml4ZXMgbWF0Y2ggW2IsIGUpLgorICAgIHN0ZDo6cGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+CisgICAgcHJlZml4X3JhbmdlKGNvbnN0X2VfaXRlcmF0b3IsIGNvbnN0X2VfaXRlcmF0b3IpIGNvbnN0OworCisgICAgLy8gRmluZHMgdGhlIGl0ZXJhdG9yIHJhbmdlIGNvcnJlc3BvbmRpbmcgdG8gYWxsIHZhbHVlcyB3aG9zZQorICAgIC8vIHByZWZpeGVzIG1hdGNoIFtiLCBlKS4KKyAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPgorICAgIHByZWZpeF9yYW5nZShjb25zdF9lX2l0ZXJhdG9yLCBjb25zdF9lX2l0ZXJhdG9yKTsKKworICBwcm90ZWN0ZWQ6CisgICAgLy8gQ2FsbGVkIHRvIHVwZGF0ZSBhIG5vZGUncyBtZXRhZGF0YS4KKyAgICBpbmxpbmUgdm9pZAorICAgIG9wZXJhdG9yKCkobm9kZV9pdGVyYXRvciBub2RlX2l0LCBjb25zdF9ub2RlX2l0ZXJhdG9yIGVuZF9uZF9pdCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICAvLyBSZXR1cm5zIHRoZSBjb25zdCBpdGVyYXRvciBhc3NvY2lhdGVkIHdpdGggdGhlIGp1c3QtYWZ0ZXIgbGFzdCBlbGVtZW50LgorICAgIHZpcnR1YWwgY29uc3RfaXRlcmF0b3IKKyAgICBlbmQoKSBjb25zdCA9IDA7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBpdGVyYXRvciBhc3NvY2lhdGVkIHdpdGggdGhlIGp1c3QtYWZ0ZXIgbGFzdCBlbGVtZW50LgorICAgIHZpcnR1YWwgaXRlcmF0b3IKKyAgICBlbmQoKSA9IDA7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBjb25zdF9ub2RlX2l0ZXJhdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgdHJpZSdzIHJvb3Qgbm9kZS4KKyAgICB2aXJ0dWFsIGNvbnN0X25vZGVfaXRlcmF0b3IKKyAgICBub2RlX2JlZ2luKCkgY29uc3QgPSAwOworCisgICAgLy8gUmV0dXJucyB0aGUgbm9kZV9pdGVyYXRvciBhc3NvY2lhdGVkIHdpdGggdGhlIHRyaWUncyByb290IG5vZGUuCisgICAgdmlydHVhbCBub2RlX2l0ZXJhdG9yCisgICAgbm9kZV9iZWdpbigpID0gMDsKKworICAgIC8vIFJldHVybnMgdGhlIGNvbnN0X25vZGVfaXRlcmF0b3IgYXNzb2NpYXRlZCB3aXRoIGEganVzdC1hZnRlciBsZWFmIG5vZGUuCisgICAgdmlydHVhbCBjb25zdF9ub2RlX2l0ZXJhdG9yCisgICAgbm9kZV9lbmQoKSBjb25zdCA9IDA7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBub2RlX2l0ZXJhdG9yIGFzc29jaWF0ZWQgd2l0aCBhIGp1c3QtYWZ0ZXIgbGVhZiBub2RlLgorICAgIHZpcnR1YWwgbm9kZV9pdGVyYXRvcgorICAgIG5vZGVfZW5kKCkgPSAwOworCisgICAgLy8gQWNjZXNzIHRvIHRoZSBjbXBfZm4gb2JqZWN0LgorICAgIHZpcnR1YWwgY29uc3QgZV9hY2Nlc3NfdHJhaXRzJiAKKyAgICBnZXRfZV9hY2Nlc3NfdHJhaXRzKCkgY29uc3QgPSAwOworCisgICAgbm9kZV9pdGVyYXRvcgorICAgIG5leHRfY2hpbGQobm9kZV9pdGVyYXRvciwgY29uc3RfZV9pdGVyYXRvciwgY29uc3RfZV9pdGVyYXRvciwgCisJICAgICAgIG5vZGVfaXRlcmF0b3IsIGNvbnN0IGVfYWNjZXNzX3RyYWl0cyYpOworICB9OworCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90cmllX3BvbGljeS9wcmVmaXhfc2VhcmNoX25vZGVfdXBkYXRlX2ltcC5ocHA+CisKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFwKKyAgdHJpZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPENvbnN0X05vZGVfSXRlcmF0b3IsIE5vZGVfSXRlcmF0b3IsRV9BY2Nlc3NfVHJhaXRzLCBBbGxvY2F0b3I+CisKKyAgLy8gRnVuY3RvciB1cGRhdGluZyByYW5rcyBvZiBlbnRyZWVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25zdF9Ob2RlX0l0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIE5vZGVfSXRlcmF0b3IsCisJICAgdHlwZW5hbWUgRV9BY2Nlc3NfVHJhaXRzLAorCSAgIHR5cGVuYW1lIEFsbG9jYXRvcj4KKyAgY2xhc3MgdHJpZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlIDogcHJpdmF0ZSBQQl9EU19CQVNFX0NfREVDCisgIHsKKyAgcHJpdmF0ZToKKyAgICB0eXBlZGVmIFBCX0RTX0JBU0VfQ19ERUMgYmFzZV90eXBlOworCisgIHB1YmxpYzoKKyAgICB0eXBlZGVmIEVfQWNjZXNzX1RyYWl0cyBlX2FjY2Vzc190cmFpdHM7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBlX2FjY2Vzc190cmFpdHM6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2VfaXRlcmF0b3I7CisgICAgdHlwZWRlZiBBbGxvY2F0b3IgYWxsb2NhdG9yX3R5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBhbGxvY2F0b3JfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6a2V5X3R5cGUga2V5X3R5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X2tleV9yZWZlcmVuY2UgY29uc3Rfa2V5X3JlZmVyZW5jZTsKKworICAgIHR5cGVkZWYgc2l6ZV90eXBlIG1ldGFkYXRhX3R5cGU7CisgICAgdHlwZWRlZiBDb25zdF9Ob2RlX0l0ZXJhdG9yIGNvbnN0X25vZGVfaXRlcmF0b3I7CisgICAgdHlwZWRlZiBOb2RlX0l0ZXJhdG9yIG5vZGVfaXRlcmF0b3I7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBjb25zdF9ub2RlX2l0ZXJhdG9yOjp2YWx1ZV90eXBlIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgbm9kZV9pdGVyYXRvcjo6dmFsdWVfdHlwZSBpdGVyYXRvcjsKKworICAgIC8vIEZpbmRzIGFuIGVudHJ5IGJ5IF9fb3JkZXIuIFJldHVybnMgYSBjb25zdF9pdGVyYXRvciB0byB0aGUKKyAgICAvLyBlbnRyeSB3aXRoIHRoZSBfX29yZGVyIG9yZGVyLCBvciBhIGNvbnN0X2l0ZXJhdG9yIHRvIHRoZQorICAgIC8vIGNvbnRhaW5lciBvYmplY3QncyBlbmQgaWYgb3JkZXIgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlCisgICAgLy8gY29udGFpbmVyIG9iamVjdC4KKyAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3IKKyAgICBmaW5kX2J5X29yZGVyKHNpemVfdHlwZSkgY29uc3Q7CisKKyAgICAvLyBGaW5kcyBhbiBlbnRyeSBieSBfX29yZGVyLiBSZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIHRoZSBlbnRyeQorICAgIC8vIHdpdGggdGhlIF9fb3JkZXIgb3JkZXIsIG9yIGFuIGl0ZXJhdG9yIHRvIHRoZSBjb250YWluZXIKKyAgICAvLyBvYmplY3QncyBlbmQgaWYgb3JkZXIgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlIGNvbnRhaW5lcgorICAgIC8vIG9iamVjdC4KKyAgICBpbmxpbmUgaXRlcmF0b3IKKyAgICBmaW5kX2J5X29yZGVyKHNpemVfdHlwZSk7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBvcmRlciBvZiBhIGtleSB3aXRoaW4gYSBzZXF1ZW5jZS4gRm9yIGV4YXBtbGUsIGlmCisgICAgLy8gcl9rZXkgaXMgdGhlIHNtYWxsZXN0IGtleSwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gMDsgaWYgcl9rZXkKKyAgICAvLyBpcyBhIGtleSBiZXR3ZWVuIHRoZSBzbWFsbGVzdCBhbmQgbmV4dCBrZXksIHRoaXMgbWV0aG9kIHdpbGwKKyAgICAvLyByZXR1cm4gMTsgaWYgcl9rZXkgaXMgYSBrZXkgbGFyZ2VyIHRoYW4gdGhlIGxhcmdlc3Qga2V5LCB0aGlzCisgICAgLy8gbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBzaXplIG9mIHJfYy4KKyAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgb3JkZXJfb2Zfa2V5KGNvbnN0X2tleV9yZWZlcmVuY2UpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0aGUgb3JkZXIgb2YgYSBwcmVmaXggd2l0aGluIGEgc2VxdWVuY2UuIEZvciBleGFwbWxlLAorICAgIC8vIGlmIFtiLCBlXSBpcyB0aGUgc21hbGxlc3QgcHJlZml4LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiAwOyBpZgorICAgIC8vIHJfa2V5IGlzIGEga2V5IGJldHdlZW4gdGhlIHNtYWxsZXN0IGFuZCBuZXh0IGtleSwgdGhpcyBtZXRob2QKKyAgICAvLyB3aWxsIHJldHVybiAxOyBpZiByX2tleSBpcyBhIGtleSBsYXJnZXIgdGhhbiB0aGUgbGFyZ2VzdCBrZXksCisgICAgLy8gdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIHNpemUgb2Ygcl9jLgorICAgIGlubGluZSBzaXplX3R5cGUKKyAgICBvcmRlcl9vZl9wcmVmaXgoY29uc3RfZV9pdGVyYXRvciwgY29uc3RfZV9pdGVyYXRvcikgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOworCisgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxtZXRhZGF0YV90eXBlPjo6b3RoZXIgbWV0YWRhdGFfcmViaW5kOworICAgIHR5cGVkZWYgdHlwZW5hbWUgbWV0YWRhdGFfcmViaW5kOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfbWV0YWRhdGFfcmVmZXJlbmNlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgbWV0YWRhdGFfcmViaW5kOjpyZWZlcmVuY2UgbWV0YWRhdGFfcmVmZXJlbmNlOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb250YWluZXIgaXMgZW1wdHkuCisgICAgdmlydHVhbCBib29sCisgICAgZW1wdHkoKSBjb25zdCA9IDA7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBpdGVyYXRvciBhc3NvY2lhdGVkIHdpdGggdGhlIHRyaWUncyBmaXJzdCBlbGVtZW50LgorICAgIHZpcnR1YWwgaXRlcmF0b3IKKyAgICBiZWdpbigpID0gMDsKKworICAgIC8vIFJldHVybnMgdGhlIGl0ZXJhdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgdHJpZSdzCisgICAgLy8ganVzdC1hZnRlci1sYXN0IGVsZW1lbnQuCisgICAgdmlydHVhbCBpdGVyYXRvcgorICAgIGVuZCgpID0gMDsKKworICAgIC8vIFJldHVybnMgdGhlIGNvbnN0X25vZGVfaXRlcmF0b3IgYXNzb2NpYXRlZCB3aXRoIHRoZSB0cmllJ3Mgcm9vdCBub2RlLgorICAgIHZpcnR1YWwgY29uc3Rfbm9kZV9pdGVyYXRvcgorICAgIG5vZGVfYmVnaW4oKSBjb25zdCA9IDA7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBub2RlX2l0ZXJhdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgdHJpZSdzIHJvb3Qgbm9kZS4KKyAgICB2aXJ0dWFsIG5vZGVfaXRlcmF0b3IKKyAgICBub2RlX2JlZ2luKCkgPSAwOworCisgICAgLy8gUmV0dXJucyB0aGUgY29uc3Rfbm9kZV9pdGVyYXRvciBhc3NvY2lhdGVkIHdpdGggYSBqdXN0LWFmdGVyCisgICAgLy8gbGVhZiBub2RlLgorICAgIHZpcnR1YWwgY29uc3Rfbm9kZV9pdGVyYXRvcgorICAgIG5vZGVfZW5kKCkgY29uc3QgPSAwOworCisgICAgLy8gUmV0dXJucyB0aGUgbm9kZV9pdGVyYXRvciBhc3NvY2lhdGVkIHdpdGggYSBqdXN0LWFmdGVyIGxlYWYgbm9kZS4KKyAgICB2aXJ0dWFsIG5vZGVfaXRlcmF0b3IKKyAgICBub2RlX2VuZCgpID0gMDsKKworICAgIC8vIEFjY2VzcyB0byB0aGUgY21wX2ZuIG9iamVjdC4KKyAgICB2aXJ0dWFsIGVfYWNjZXNzX3RyYWl0cyYgCisgICAgZ2V0X2VfYWNjZXNzX3RyYWl0cygpID0gMDsKKworICBwcm90ZWN0ZWQ6CisgICAgLy8gVXBkYXRlcyB0aGUgcmFuayBvZiBhIG5vZGUgdGhyb3VnaCBhIG5vZGVfaXRlcmF0b3Igbm9kZV9pdDsKKyAgICAvLyBlbmRfbmRfaXQgaXMgdGhlIGVuZCBub2RlIGl0ZXJhdG9yLgorICAgIGlubGluZSB2b2lkCisgICAgb3BlcmF0b3IoKShub2RlX2l0ZXJhdG9yLCBjb25zdF9ub2RlX2l0ZXJhdG9yKSBjb25zdDsKKworICAgIC8vIERlc3RydWN0b3IuCisgICAgdmlydHVhbAorICAgIH50cmllX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGUoKTsKKyAgfTsKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHJpZV9wb2xpY3kvb3JkZXJfc3RhdGlzdGljc19pbXAuaHBwPgorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworI3VuZGVmIFBCX0RTX0JBU0VfQ19ERUMKKworfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BvZF9jaGFyX3RyYWl0cy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcG9kX2NoYXJfdHJhaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc5N2MxYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BvZF9jaGFyX3RyYWl0cy5oCkBAIC0wLDAgKzEsMTgyIEBACisvLyBQT0QgY2hhcmFjdGVyLCBzdGQ6OmNoYXJfdHJhaXRzIHNwZWNpYWxpemF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZXh0L3BvZF9jaGFyX3RyYWl0cy5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworLy8gR2FicmllbCBEb3MgUmVpcyA8Z2RyQGludGVncmFibGUtc29sdXRpb25zLm5ldD4KKy8vIEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorCisjaWZuZGVmIF9QT0RfQ0hBUl9UUkFJVFNfSAorI2RlZmluZSBfUE9EX0NIQVJfVFJBSVRTX0ggMQorCisjaW5jbHVkZSA8c3RyaW5nPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorCisgIC8vIFBPRCBjaGFyYWN0ZXIgYWJzdHJhY3Rpb24uCisgIC8vIE5COiBUaGUgY2hhcl90eXBlIHBhcmFtZXRlciBpcyBhIHN1YnNldCBvZiBpbnRfdHlwZSwgYXMgdG8gYWxsb3cKKyAgLy8gaW50X3R5cGUgdG8gcHJvcGVybHkgaG9sZCB0aGUgZnVsbCByYW5nZSBvZiBjaGFyX3R5cGUgdmFsdWVzIGFzCisgIC8vIHdlbGwgYXMgRU9GLgorICAvLy8gQGJyaWVmIEEgUE9EIGNsYXNzIHRoYXQgc2VydmVzIGFzIGEgY2hhcmFjdGVyIGFic3RyYWN0aW9uIGNsYXNzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBWLCB0eXBlbmFtZSBJLCB0eXBlbmFtZSBTID0gc3RkOjptYnN0YXRlX3Q+CisgICAgc3RydWN0IGNoYXJhY3RlcgorICAgIHsKKyAgICAgIHR5cGVkZWYgVgkJCQl2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBJCQkJCWludF90eXBlOworICAgICAgdHlwZWRlZiBTCQkJCXN0YXRlX3R5cGU7CisgICAgICB0eXBlZGVmIGNoYXJhY3RlcjxWLCBJLCBTPgljaGFyX3R5cGU7CisKKyAgICAgIHZhbHVlX3R5cGUJdmFsdWU7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFYyPgorICAgICAgICBzdGF0aWMgY2hhcl90eXBlCisgICAgICAgIGZyb20oY29uc3QgVjImIHYpCisgICAgICAgIHsKKwkgIGNoYXJfdHlwZSByZXQgPSB7IHN0YXRpY19jYXN0PHZhbHVlX3R5cGU+KHYpIH07CisJICByZXR1cm4gcmV0OworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVjI+CisgICAgICAgIHN0YXRpYyBWMgorICAgICAgICB0byhjb25zdCBjaGFyX3R5cGUmIGMpCisgICAgICAgIHsKKwkgIFYyIHJldCA9IHsgc3RhdGljX2Nhc3Q8VjI+KGMudmFsdWUpIH07CisJICByZXR1cm4gcmV0OworCX0KKworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgViwgdHlwZW5hbWUgSSwgdHlwZW5hbWUgUz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgY2hhcmFjdGVyPFYsIEksIFM+JiBsaHMsIGNvbnN0IGNoYXJhY3RlcjxWLCBJLCBTPiYgcmhzKQorICAgIHsgcmV0dXJuIGxocy52YWx1ZSA9PSByaHMudmFsdWU7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBWLCB0eXBlbmFtZSBJLCB0eXBlbmFtZSBTPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IGNoYXJhY3RlcjxWLCBJLCBTPiYgbGhzLCBjb25zdCBjaGFyYWN0ZXI8ViwgSSwgUz4mIHJocykKKyAgICB7IHJldHVybiBsaHMudmFsdWUgPCByaHMudmFsdWU7IH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8vLyBjaGFyX3RyYWl0czxfX2dudV9jeHg6OmNoYXJhY3Rlcj4gc3BlY2lhbGl6YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIFYsIHR5cGVuYW1lIEksIHR5cGVuYW1lIFM+CisgICAgc3RydWN0IGNoYXJfdHJhaXRzPF9fZ251X2N4eDo6Y2hhcmFjdGVyPFYsIEksIFM+ID4KKyAgICB7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6Y2hhcmFjdGVyPFYsIEksIFM+CWNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY2hhcl90eXBlOjppbnRfdHlwZQlpbnRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY2hhcl90eXBlOjpzdGF0ZV90eXBlCXN0YXRlX3R5cGU7CisgICAgICB0eXBlZGVmIGZwb3M8c3RhdGVfdHlwZT4JCQlwb3NfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmCQkJCW9mZl90eXBlOworCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQorICAgICAgeyBfX2MxID0gX19jMjsgfQorCisgICAgICBzdGF0aWMgYm9vbAorICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCisgICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KKworICAgICAgc3RhdGljIGJvb2wKKyAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQorICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KKworICAgICAgc3RhdGljIGludAorICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKKyAgICAgIHsKKwlmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX247ICsrX19pKQorCSAgaWYgKCFlcShfX3MxW19faV0sIF9fczJbX19pXSkpCisJICAgIHJldHVybiBsdChfX3MxW19faV0sIF9fczJbX19pXSkgPyAtMSA6IDE7CisJcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIHN0YXRpYyBzaXplX3QKKyAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKKyAgICAgIHsKKwljb25zdCBjaGFyX3R5cGUqIF9fcCA9IF9fczsKKwl3aGlsZSAoX19wLT52YWx1ZSkKKwkgICsrX19wOworCXJldHVybiAoX19wIC0gX19zKTsKKyAgICAgIH0KKworICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKQorICAgICAgeworCWZvciAoY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3M7IHNpemVfdChfX3AgLSBfX3MpIDwgX19uOyArK19fcCkKKwkgIGlmICgqX19wID09IF9fYSkKKwkgICAgcmV0dXJuIF9fcDsKKwlyZXR1cm4gMDsKKyAgICAgIH0KKworICAgICAgc3RhdGljIGNoYXJfdHlwZSoKKyAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCisgICAgICB7IAorCXJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPgorCSAgKF9fYnVpbHRpbl9tZW1tb3ZlKF9fczEsIF9fczIsIF9fbiAqIHNpemVvZihjaGFyX3R5cGUpKSk7CisgICAgICB9CisKKyAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCisgICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQorICAgICAgeworCXN0ZDo6Y29weShfX3MyLCBfX3MyICsgX19uLCBfX3MxKTsKKwlyZXR1cm4gX19zMTsKKyAgICAgIH0KKworICAgICAgc3RhdGljIGNoYXJfdHlwZSoKKyAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKKyAgICAgIHsKKwlzdGQ6OmZpbGxfbihfX3MsIF9fbiwgX19hKTsKKyAgICAgICAgcmV0dXJuIF9fczsKKyAgICAgIH0KKworICAgICAgc3RhdGljIGNoYXJfdHlwZQorICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2kpCisgICAgICB7IHJldHVybiBjaGFyX3R5cGU6OnRlbXBsYXRlIGZyb20oX19pKTsgfQorCisgICAgICBzdGF0aWMgaW50X3R5cGUKKyAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKQorICAgICAgeyByZXR1cm4gY2hhcl90eXBlOjp0ZW1wbGF0ZSB0bzxpbnRfdHlwZT4oX19jKTsgfQorCisgICAgICBzdGF0aWMgYm9vbAorICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQorICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CisKKyAgICAgIHN0YXRpYyBpbnRfdHlwZQorICAgICAgZW9mKCkgCisgICAgICB7CisJaW50X3R5cGUgX19yID0geyAtMSB9OworCXJldHVybiBfX3I7CisgICAgICB9CisKKyAgICAgIHN0YXRpYyBpbnRfdHlwZQorICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQorICAgICAgeyByZXR1cm4gZXFfaW50X3R5cGUoX19jLCBlb2YoKSkgPyBpbnRfdHlwZSgpIDogX19jOyB9CisgICAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BvaW50ZXIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3BvaW50ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGI1ZjNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcG9pbnRlci5oCkBAIC0wLDAgKzEsNTY1IEBACisvLyBDdXN0b20gcG9pbnRlciBhZGFwdGVyIGFuZCBzYW1wbGUgc3RvcmFnZSBwb2xpY2llcworCisvLyBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqCisgKiBAZmlsZSBleHQvcG9pbnRlci5oCisgKiBAYXV0aG9yIEJvYiBXYWx0ZXJzCisgKgorICogUHJvdmlkZXMgcmV1c2FibGUgX1BvaW50ZXJfYWRhcHRlciBmb3IgYXNzaXN0aW5nIGluIHRoZSBkZXZlbG9wbWVudCBvZgorICogY3VzdG9tIHBvaW50ZXIgdHlwZXMgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIHRoZSBzdGFuZGFyZCBjb250YWluZXJzIHZpYQorICogdGhlIGFsbG9jYXRvcjo6cG9pbnRlciBhbmQgYWxsb2NhdG9yOjpjb25zdF9wb2ludGVyIHR5cGVkZWZzLgorICovCisKKyNpZm5kZWYgX1BPSU5URVJfSAorI2RlZmluZSBfUE9JTlRFUl9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPGJpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaD4KKyNpbmNsdWRlIDxleHQvY2FzdC5oPgorI2luY2x1ZGUgPGV4dC90eXBlX3RyYWl0cy5oPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorCisgIC8qKiAKKyAgICogQGJyaWVmIEEgc3RvcmFnZSBwb2xpY3kgZm9yIHVzZSB3aXRoIF9Qb2ludGVyX2FkYXB0ZXI8PiB3aGljaCB5aWVsZHMgYQorICAgKiAgICAgICAgc3RhbmRhcmQgcG9pbnRlci4KKyAgICogCisgICAqICBBIF9TdG9yYWdlX3BvbGljeSBpcyByZXF1aXJlZCB0byBwcm92aWRlIDQgdGhpbmdzOgorICAgKiAgICAxKSBBIGdldCgpIEFQSSBmb3IgcmV0dXJuaW5nIHRoZSBzdG9yZWQgcG9pbnRlciB2YWx1ZS4KKyAgICogICAgMikgQW4gc2V0KCkgQVBJIGZvciBzdG9yaW5nIGEgcG9pbnRlciB2YWx1ZS4KKyAgICogICAgMykgQW4gZWxlbWVudF90eXBlIHR5cGVkZWYgdG8gZGVmaW5lIHRoZSB0eXBlIHRoaXMgcG9pbnRzIHRvLgorICAgKiAgICA0KSBBbiBvcGVyYXRvcjwoKSB0byBzdXBwb3J0IHBvaW50ZXIgY29tcGFyaXNvbi4KKyAgICogICAgNSkgQW4gb3BlcmF0b3I9PSgpIHRvIHN1cHBvcnQgcG9pbnRlciBjb21wYXJpc29uLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiAKKyAgICBjbGFzcyBfU3RkX3BvaW50ZXJfaW1wbCAKKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gdGhlIHR5cGUgdGhpcyBwb2ludGVyIHBvaW50cyB0by4KKyAgICAgIHR5cGVkZWYgX1RwIGVsZW1lbnRfdHlwZTsKKyAgCisgICAgICAvLyBBIG1ldGhvZCB0byBmZXRjaCB0aGUgcG9pbnRlciB2YWx1ZSBhcyBhIHN0YW5kYXJkIFQqIHZhbHVlOworICAgICAgaW5saW5lIF9UcCogCisgICAgICBnZXQoKSBjb25zdCAKKyAgICAgIHsgcmV0dXJuIF9NX3ZhbHVlOyB9CisgIAorICAgICAgLy8gQSBtZXRob2QgdG8gc2V0IHRoZSBwb2ludGVyIHZhbHVlLCBmcm9tIGEgc3RhbmRhcmQgVCogdmFsdWU7CisgICAgICBpbmxpbmUgdm9pZCAKKyAgICAgIHNldChlbGVtZW50X3R5cGUqIF9fYXJnKSAKKyAgICAgIHsgX01fdmFsdWUgPSBfX2FyZzsgfQorICAKKyAgICAgIC8vIENvbXBhcmlzb24gb2YgcG9pbnRlcnMKKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcjwoY29uc3QgX1N0ZF9wb2ludGVyX2ltcGwmIF9fcmFyZykgY29uc3QKKyAgICAgIHsgcmV0dXJuIChfTV92YWx1ZSA8IF9fcmFyZy5fTV92YWx1ZSk7IH0KKyAgCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBfU3RkX3BvaW50ZXJfaW1wbCYgX19yYXJnKSBjb25zdAorICAgICAgeyByZXR1cm4gKF9NX3ZhbHVlID09IF9fcmFyZy5fTV92YWx1ZSk7IH0KKworICAgIHByaXZhdGU6CisgICAgICBlbGVtZW50X3R5cGUqIF9NX3ZhbHVlOworICAgIH07CisKKyAgLyoqCisgICAqIEBicmllZiBBIHN0b3JhZ2UgcG9saWN5IGZvciB1c2Ugd2l0aCBfUG9pbnRlcl9hZGFwdGVyPD4gd2hpY2ggc3RvcmVzCisgICAqICAgICAgICB0aGUgcG9pbnRlcidzIGFkZHJlc3MgYXMgYW4gb2Zmc2V0IHZhbHVlIHdoaWNoIGlzIHJlbGF0aXZlIHRvCisgICAqICAgICAgICBpdHMgb3duIGFkZHJlc3MuCisgICAqIAorICAgKiBUaGlzIGlzIGludGVuZGVkIGZvciBwb2ludGVycyB3aXRoaW4gc2hhcmVkIG1lbW9yeSByZWdpb25zIHdoaWNoCisgICAqIG1pZ2h0IGJlIG1hcHBlZCBhdCBkaWZmZXJlbnQgYWRkcmVzc2VzIGJ5IGRpZmZlcmVudCBwcm9jZXNzZXMuCisgICAqIEZvciBudWxsIHBvaW50ZXJzLCBhIHZhbHVlIG9mIDEgaXMgdXNlZC4gICgwIGlzIGxlZ2l0aW1hdGUKKyAgICogc29tZXRpbWVzIGZvciBub2RlcyBpbiBjaXJjdWxhcmx5IGxpbmtlZCBsaXN0cykgVGhpcyB2YWx1ZSB3YXMKKyAgICogY2hvc2VuIGFzIHRoZSBsZWFzdCBsaWtlbHkgdG8gZ2VuZXJhdGUgYW4gaW5jb3JyZWN0IG51bGwsIEFzCisgICAqIHRoZXJlIGlzIG5vIHJlYXNvbiB3aHkgYW55IG5vcm1hbCBwb2ludGVyIHdvdWxkIHBvaW50IDEgYnl0ZSBpbnRvCisgICAqIGl0cyBvd24gcG9pbnRlciBhZGRyZXNzLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiAKKyAgICBjbGFzcyBfUmVsYXRpdmVfcG9pbnRlcl9pbXBsIAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9UcCBlbGVtZW50X3R5cGU7CisgIAorICAgICAgX1RwKgorICAgICAgZ2V0KCkgY29uc3QgCisgICAgICB7CisgICAgICAgIGlmIChfTV9kaWZmID09IDEpCisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxfVHAqPihyZWludGVycHJldF9jYXN0PF9VSW50UHRyVHlwZT4odGhpcykKKwkJCQkJKyBfTV9kaWZmKTsKKyAgICAgIH0KKyAgCisgICAgICB2b2lkIAorICAgICAgc2V0KF9UcCogX19hcmcpCisgICAgICB7CisgICAgICAgIGlmICghX19hcmcpCisgICAgICAgICAgX01fZGlmZiA9IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBfTV9kaWZmID0gcmVpbnRlcnByZXRfY2FzdDxfVUludFB0clR5cGU+KF9fYXJnKSAKKyAgICAgICAgICAgICAgICAgICAgLSByZWludGVycHJldF9jYXN0PF9VSW50UHRyVHlwZT4odGhpcyk7CisgICAgICB9CisgIAorICAgICAgLy8gQ29tcGFyaXNvbiBvZiBwb2ludGVycworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yPChjb25zdCBfUmVsYXRpdmVfcG9pbnRlcl9pbXBsJiBfX3JhcmcpIGNvbnN0CisgICAgICB7IHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxfVUludFB0clR5cGU+KHRoaXMtPmdldCgpKQorCQk8IHJlaW50ZXJwcmV0X2Nhc3Q8X1VJbnRQdHJUeXBlPihfX3JhcmcuZ2V0KCkpKTsgfQorCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBfUmVsYXRpdmVfcG9pbnRlcl9pbXBsJiBfX3JhcmcpIGNvbnN0CisgICAgICB7IHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxfVUludFB0clR5cGU+KHRoaXMtPmdldCgpKQorCQk9PSByZWludGVycHJldF9jYXN0PF9VSW50UHRyVHlwZT4oX19yYXJnLmdldCgpKSk7IH0KKworICAgIHByaXZhdGU6CisjaWZkZWYgX0dMSUJDWFhfVVNFX0xPTkdfTE9ORworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fY29uZGl0aW9uYWxfdHlwZTwKKwkgKHNpemVvZih1bnNpZ25lZCBsb25nKSA+PSBzaXplb2Yodm9pZCopKSwKKwkgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nPjo6X190eXBlIF9VSW50UHRyVHlwZTsKKyNlbHNlCisgICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX1VJbnRQdHJUeXBlOworI2VuZGlmCisgICAgICBfVUludFB0clR5cGUgX01fZGlmZjsKKyAgICB9OworICAKKyAgLyoqCisgICAqIFJlbGF0aXZlX3BvaW50ZXJfaW1wbCBuZWVkcyBhIHNwZWNpYWxpemF0aW9uIGZvciBjb25zdCBUIGJlY2F1c2Ugb2YKKyAgICogdGhlIGNhc3RpbmcgZG9uZSBkdXJpbmcgcG9pbnRlciBhcml0aG1ldGljLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiAKKyAgICBjbGFzcyBfUmVsYXRpdmVfcG9pbnRlcl9pbXBsPGNvbnN0IF9UcD4gCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgY29uc3QgX1RwIGVsZW1lbnRfdHlwZTsKKyAgCisgICAgICBjb25zdCBfVHAqCisgICAgICBnZXQoKSBjb25zdAorICAgICAgeworICAgICAgICBpZiAoX01fZGlmZiA9PSAxKQorICAgICAgICAgIHJldHVybiAwOworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgX1RwKj4KKwkgICAgICAocmVpbnRlcnByZXRfY2FzdDxfVUludFB0clR5cGU+KHRoaXMpICsgX01fZGlmZik7CisgICAgICB9CisgIAorICAgICAgdm9pZCAKKyAgICAgIHNldChjb25zdCBfVHAqIF9fYXJnKQorICAgICAgeworICAgICAgICBpZiAoIV9fYXJnKQorICAgICAgICAgIF9NX2RpZmYgPSAxOworICAgICAgICBlbHNlCisgICAgICAgICAgX01fZGlmZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8X1VJbnRQdHJUeXBlPihfX2FyZykgCisgICAgICAgICAgICAgICAgICAgIC0gcmVpbnRlcnByZXRfY2FzdDxfVUludFB0clR5cGU+KHRoaXMpOworICAgICAgfQorICAKKyAgICAgIC8vIENvbXBhcmlzb24gb2YgcG9pbnRlcnMKKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcjwoY29uc3QgX1JlbGF0aXZlX3BvaW50ZXJfaW1wbCYgX19yYXJnKSBjb25zdAorICAgICAgeyByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8X1VJbnRQdHJUeXBlPih0aGlzLT5nZXQoKSkKKwkJPCByZWludGVycHJldF9jYXN0PF9VSW50UHRyVHlwZT4oX19yYXJnLmdldCgpKSk7IH0KKworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgX1JlbGF0aXZlX3BvaW50ZXJfaW1wbCYgX19yYXJnKSBjb25zdAorICAgICAgeyByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8X1VJbnRQdHJUeXBlPih0aGlzLT5nZXQoKSkKKwkJPT0gcmVpbnRlcnByZXRfY2FzdDxfVUludFB0clR5cGU+KF9fcmFyZy5nZXQoKSkpOyB9CisgIAorICAgIHByaXZhdGU6CisjaWZkZWYgX0dMSUJDWFhfVVNFX0xPTkdfTE9ORworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fY29uZGl0aW9uYWxfdHlwZTwKKwkgKHNpemVvZih1bnNpZ25lZCBsb25nKSA+PSBzaXplb2Yodm9pZCopKSwKKwkgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nPjo6X190eXBlIF9VSW50UHRyVHlwZTsKKyNlbHNlCisgICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX1VJbnRQdHJUeXBlOworI2VuZGlmCisgICAgICAgX1VJbnRQdHJUeXBlIF9NX2RpZmY7CisgICAgfTsKKworICAvKioKKyAgICogVGhlIHNwZWNpYWxpemF0aW9uIG9uIHRoaXMgdHlwZSBoZWxwcyByZXNvbHZlIHRoZSBwcm9ibGVtIG9mCisgICAqIHJlZmVyZW5jZSB0byB2b2lkLCBhbmQgZWxpbWluYXRlcyB0aGUgbmVlZCB0byBzcGVjaWFsaXplCisgICAqIF9Qb2ludGVyX2FkYXB0ZXIgZm9yIGNhc2VzIG9mIHZvaWQqLCBjb25zdCB2b2lkKiwgYW5kIHNvIG9uLgorICAgKi8KKyAgc3RydWN0IF9JbnZhbGlkX3R5cGUgeyB9OworICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfUmVmZXJlbmNlX3R5cGUgCisgICAgeyB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOyB9OworCisgIHRlbXBsYXRlPD4gCisgICAgc3RydWN0IF9SZWZlcmVuY2VfdHlwZTx2b2lkPiAKKyAgICB7IHR5cGVkZWYgX0ludmFsaWRfdHlwZSYgcmVmZXJlbmNlOyB9OworCisgIHRlbXBsYXRlPD4gCisgICAgc3RydWN0IF9SZWZlcmVuY2VfdHlwZTxjb25zdCB2b2lkPiAKKyAgICB7IHR5cGVkZWYgY29uc3QgX0ludmFsaWRfdHlwZSYgcmVmZXJlbmNlOyB9OworCisgIHRlbXBsYXRlPD4gCisgICAgc3RydWN0IF9SZWZlcmVuY2VfdHlwZTx2b2xhdGlsZSB2b2lkPiAKKyAgICB7IHR5cGVkZWYgdm9sYXRpbGUgX0ludmFsaWRfdHlwZSYgIHJlZmVyZW5jZTsgfTsKKworICB0ZW1wbGF0ZTw+IAorICAgIHN0cnVjdCBfUmVmZXJlbmNlX3R5cGU8dm9sYXRpbGUgY29uc3Qgdm9pZD4gCisgICAgeyB0eXBlZGVmIGNvbnN0IHZvbGF0aWxlIF9JbnZhbGlkX3R5cGUmICByZWZlcmVuY2U7IH07CisKKyAgLyoqCisgICAqIFRoaXMgc3RydWN0dXJlIGFjY29tb2RhdGVzIHRoZSB3YXkgaW4gd2hpY2gKKyAgICogc3RkOjppdGVyYXRvcl90cmFpdHM8PiBpcyBub3JtYWxseSBzcGVjaWFsaXplZCBmb3IgY29uc3QgVCosIHNvCisgICAqIHRoYXQgdmFsdWVfdHlwZSBpcyBzdGlsbCBULgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiAKKyAgICBzdHJ1Y3QgX1VucXVhbGlmaWVkX3R5cGUgCisgICAgeyB0eXBlZGVmIF9UcCB0eXBlOyB9OworICAgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IAorICAgIHN0cnVjdCBfVW5xdWFsaWZpZWRfdHlwZTxjb25zdCBfVHA+IAorICAgIHsgdHlwZWRlZiBfVHAgdHlwZTsgfTsKKyAgICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiAKKyAgICBzdHJ1Y3QgX1VucXVhbGlmaWVkX3R5cGU8dm9sYXRpbGUgX1RwPiAKKyAgICB7IHR5cGVkZWYgdm9sYXRpbGUgX1RwIHR5cGU7IH07CisgICAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gCisgICAgc3RydWN0IF9VbnF1YWxpZmllZF90eXBlPHZvbGF0aWxlIGNvbnN0IF9UcD4gCisgICAgeyB0eXBlZGVmIHZvbGF0aWxlIF9UcCB0eXBlOyB9OworICAKKyAgLyoqCisgICAqIFRoZSBmb2xsb3dpbmcgcHJvdmlkZXMgYW4gJ2FsdGVybmF0aXZlIHBvaW50ZXInIHRoYXQgd29ya3Mgd2l0aAorICAgKiB0aGUgY29udGFpbmVycyB3aGVuIHNwZWNpZmllZCBhcyB0aGUgcG9pbnRlciB0eXBlZGVmIG9mIHRoZQorICAgKiBhbGxvY2F0b3IuCisgICAqCisgICAqIFRoZSBwb2ludGVyIHR5cGUgdXNlZCB3aXRoIHRoZSBjb250YWluZXJzIGRvZXNuJ3QgaGF2ZSB0byBiZSB0aGlzCisgICAqIGNsYXNzLCBidXQgaXQgbXVzdCBzdXBwb3J0IHRoZSBpbXBsaWNpdCBjb252ZXJzaW9ucywgcG9pbnRlcgorICAgKiBhcml0aG1ldGljLCBjb21wYXJpc29uIG9wZXJhdG9ycywgZXRjLiB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhpcworICAgKiBjbGFzcywgYW5kIGF2b2lkIHJhaXNpbmcgY29tcGlsZS10aW1lIGFtYmlndWl0aWVzLiAgQmVjYXVzZQorICAgKiBjcmVhdGluZyBhIHdvcmtpbmcgcG9pbnRlciBjYW4gYmUgY2hhbGxlbmdpbmcsIHRoaXMgcG9pbnRlcgorICAgKiB0ZW1wbGF0ZSB3YXMgZGVzaWduZWQgdG8gd3JhcHBlciBhbiBlYXNpZXIgc3RvcmFnZSBwb2xpY3kgdHlwZSwKKyAgICogc28gdGhhdCBpdCBiZWNvbWVzIHJldXNhYmxlIGZvciBjcmVhdGluZyBvdGhlciBwb2ludGVyIHR5cGVzLgorICAgKgorICAgKiBBIGtleSBwb2ludCBvZiB0aGlzIGNsYXNzIGlzIGFsc28gdGhhdCBpdCBhbGxvd3MgY29udGFpbmVyCisgICAqIHdyaXRlcnMgdG8gJ2Fzc3VtZScgQWxvY2F0b3I6OnBvaW50ZXIgaXMgYSB0eXBlZGVmIGZvciBhIG5vcm1hbAorICAgKiBwb2ludGVyLiAgVGhpcyBjbGFzcyBzdXBwb3J0cyBtb3N0IG9mIHRoZSBjb252ZW50aW9ucyBvZiBhIHRydWUKKyAgICogcG9pbnRlciwgYW5kIGNhbiwgZm9yIGluc3RhbmNlIGhhbmRsZSBpbXBsaWNpdCBjb252ZXJzaW9uIHRvCisgICAqIGNvbnN0IGFuZCBiYXNlIGNsYXNzIHBvaW50ZXIgdHlwZXMuICBUaGUgb25seSBpbXBvc2l0aW9ucyBvbgorICAgKiBjb250YWluZXIgd3JpdGVycyB0byBzdXBwb3J0IGV4dGVuZGVkIHBvaW50ZXJzIGFyZTogMSkgdXNlIHRoZQorICAgKiBBbGxvY2F0b3I6OnBvaW50ZXIgdHlwZWRlZiBhcHByb3ByaWF0ZWx5IGZvciBwb2ludGVyIHR5cGVzLiAgMikKKyAgICogaWYgeW91IG5lZWQgcG9pbnRlciBjYXN0aW5nLCB1c2UgdGhlIF9fcG9pbnRlcl9jYXN0PD4gZnVuY3Rpb25zCisgICAqIGZyb20gZXh0L2Nhc3QuaC4gIFRoaXMgYWxsb3dzIHBvaW50ZXIgY2FzdCBvcGVyYXRpb25zIHRvIGJlCisgICAqIG92ZXJsb2FkZWQgaXMgbmVjZXNzYXJ5IGJ5IGN1c3RvbSBwb2ludGVycy4KKyAgICoKKyAgICogTm90ZTogVGhlIGNvbnN0IHF1YWxpZmllciB3b3JrcyB3aXRoIHRoaXMgcG9pbnRlciBhZGFwdGVyIGFzCisgICAqIGZvbGxvd3M6CisgICAqCisgICAqIF9UcCogICAgICAgICAgICAgPT0gX1BvaW50ZXJfYWRhcHRlcjxfU3RkX3BvaW50ZXJfaW1wbDxfVHA+ID47CisgICAqIGNvbnN0IF9UcCogICAgICAgPT0gX1BvaW50ZXJfYWRhcHRlcjxfU3RkX3BvaW50ZXJfaW1wbDxjb25zdCBfVHA+ID47CisgICAqIF9UcCogY29uc3QgICAgICAgPT0gY29uc3QgX1BvaW50ZXJfYWRhcHRlcjxfU3RkX3BvaW50ZXJfaW1wbDxfVHA+ID47CisgICAqIGNvbnN0IF9UcCogY29uc3QgPT0gY29uc3QgX1BvaW50ZXJfYWRhcHRlcjxfU3RkX3BvaW50ZXJfaW1wbDxjb25zdCBfVHA+ID47CisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RvcmFnZV9wb2xpY3k+CisgICAgY2xhc3MgX1BvaW50ZXJfYWRhcHRlciA6IHB1YmxpYyBfU3RvcmFnZV9wb2xpY3kgCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1N0b3JhZ2VfcG9saWN5OjplbGVtZW50X3R5cGUgZWxlbWVudF90eXBlOworCisgICAgICAvLyBUaGVzZSBhcmUgbmVlZGVkIGZvciBpdGVyYXRvcl90cmFpdHMKKyAgICAgIHR5cGVkZWYgc3RkOjpyYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyAgICAgICAgICAgICAgICBpdGVyYXRvcl9jYXRlZ29yeTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1VucXVhbGlmaWVkX3R5cGU8ZWxlbWVudF90eXBlPjo6dHlwZSB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OnB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1BvaW50ZXJfYWRhcHRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVmZXJlbmNlX3R5cGU8ZWxlbWVudF90eXBlPjo6cmVmZXJlbmNlICByZWZlcmVuY2U7CisKKyAgICAgIC8vIFJlbWluZGVyOiAnY29uc3QnIG1ldGhvZHMgbWVhbiB0aGF0IHRoZSBtZXRob2QgaXMgdmFsaWQgd2hlbiB0aGUgCisgICAgICAvLyBwb2ludGVyIGlzIGltbXV0YWJsZSwgYW5kIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggd2hldGhlciB0aGUgCisgICAgICAvLyAncG9pbnRlZScgaXMgY29uc3QuCisKKyAgICAgIC8vIERlZmF1bHQgQ29uc3RydWN0b3IgKENvbnZlcnQgZnJvbSBlbGVtZW50X3R5cGUqKQorICAgICAgX1BvaW50ZXJfYWRhcHRlcihlbGVtZW50X3R5cGUqIF9fYXJnID0gMCkKKyAgICAgIHsgX1N0b3JhZ2VfcG9saWN5OjpzZXQoX19hcmcpOyB9CisKKyAgICAgIC8vIENvcHkgY29uc3RydWN0b3IgZnJvbSBfUG9pbnRlcl9hZGFwdGVyIG9mIHNhbWUgdHlwZS4KKyAgICAgIF9Qb2ludGVyX2FkYXB0ZXIoY29uc3QgX1BvaW50ZXJfYWRhcHRlciYgX19hcmcpIAorICAgICAgeyBfU3RvcmFnZV9wb2xpY3k6OnNldChfX2FyZy5nZXQoKSk7IH0KKworICAgICAgLy8gQ29udmVydCBmcm9tIF9VcCogaWYgY29udmVyc2lvbiB0byBlbGVtZW50X3R5cGUqIGlzIHZhbGlkLgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorICAgICAgICBfUG9pbnRlcl9hZGFwdGVyKF9VcCogX19hcmcpCisgICAgICAgIHsgX1N0b3JhZ2VfcG9saWN5OjpzZXQoX19hcmcpOyB9CisKKyAgICAgIC8vIENvbnZlcnNpb24gZnJvbSBhbm90aGVyIF9Qb2ludGVyX2FkYXB0ZXIgaWYgX1VwIGlmIHN0YXRpYyBjYXN0IGlzCisgICAgICAvLyB2YWxpZC4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICAgICAgX1BvaW50ZXJfYWRhcHRlcihjb25zdCBfUG9pbnRlcl9hZGFwdGVyPF9VcD4mIF9fYXJnKQorICAgICAgICB7IF9TdG9yYWdlX3BvbGljeTo6c2V0KF9fYXJnLmdldCgpKTsgfQorCisgICAgICAvLyBEZXN0cnVjdG9yCisgICAgICB+X1BvaW50ZXJfYWRhcHRlcigpIHsgfQorICAKKyAgICAgIC8vIEFzc2lnbm1lbnQgb3BlcmF0b3IKKyAgICAgIF9Qb2ludGVyX2FkYXB0ZXImCisgICAgICBvcGVyYXRvcj0oY29uc3QgX1BvaW50ZXJfYWRhcHRlciYgX19hcmcpIAorICAgICAgeworICAgICAgICBfU3RvcmFnZV9wb2xpY3k6OnNldChfX2FyZy5nZXQoKSk7IAorICAgICAgICByZXR1cm4gKnRoaXM7IAorICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgICAgIF9Qb2ludGVyX2FkYXB0ZXImCisgICAgICAgIG9wZXJhdG9yPShjb25zdCBfUG9pbnRlcl9hZGFwdGVyPF9VcD4mIF9fYXJnKQorICAgICAgICB7CisgICAgICAgICAgX1N0b3JhZ2VfcG9saWN5OjpzZXQoX19hcmcuZ2V0KCkpOyAKKyAgICAgICAgICByZXR1cm4gKnRoaXM7IAorICAgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICAgICAgX1BvaW50ZXJfYWRhcHRlciYKKyAgICAgICAgb3BlcmF0b3I9KF9VcCogX19hcmcpCisgICAgICAgIHsKKyAgICAgICAgICBfU3RvcmFnZV9wb2xpY3k6OnNldChfX2FyZyk7IAorICAgICAgICAgIHJldHVybiAqdGhpczsgCisgICAgICAgIH0KKworICAgICAgLy8gT3BlcmF0b3IqLCByZXR1cm5zIGVsZW1lbnRfdHlwZSYKKyAgICAgIGlubGluZSByZWZlcmVuY2UgCisgICAgICBvcGVyYXRvciooKSBjb25zdCAKKyAgICAgIHsgcmV0dXJuICooX1N0b3JhZ2VfcG9saWN5OjpnZXQoKSk7IH0KKworICAgICAgLy8gT3BlcmF0b3ItPiwgcmV0dXJucyBlbGVtZW50X3R5cGUqCisgICAgICBpbmxpbmUgZWxlbWVudF90eXBlKiAKKyAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCAKKyAgICAgIHsgcmV0dXJuIF9TdG9yYWdlX3BvbGljeTo6Z2V0KCk7IH0KKworICAgICAgLy8gT3BlcmF0b3JbXSwgcmV0dXJucyBhIGVsZW1lbnRfdHlwZSYgdG8gdGhlIGl0ZW0gYXQgdGhhdCBsb2MuCisgICAgICBpbmxpbmUgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKHN0ZDo6cHRyZGlmZl90IF9faW5kZXgpIGNvbnN0CisgICAgICB7IHJldHVybiBfU3RvcmFnZV9wb2xpY3k6OmdldCgpW19faW5kZXhdOyB9CisKKyAgICAgIC8vIFRvIGFsbG93IGltcGxpY2l0IGNvbnZlcnNpb24gdG8gImJvb2wiLCBmb3IgImlmIChwdHIpLi4uIgorICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIGVsZW1lbnRfdHlwZSooX1BvaW50ZXJfYWRhcHRlcjo6Kl9fdW5zcGVjaWZpZWRfYm9vbF90eXBlKSgpIGNvbnN0OworCisgICAgcHVibGljOgorICAgICAgb3BlcmF0b3IgX191bnNwZWNpZmllZF9ib29sX3R5cGUoKSBjb25zdAorICAgICAgeworICAgICAgICByZXR1cm4gX1N0b3JhZ2VfcG9saWN5OjpnZXQoKSA9PSAwID8gMCA6IAorICAgICAgICAgICAgICAgICAgICAgICAgICZfUG9pbnRlcl9hZGFwdGVyOjpvcGVyYXRvci0+OyAKKyAgICAgIH0KKworICAgICAgLy8gISBvcGVyYXRvciAoZm9yOiBpZiAoIXB0cikuLi4pCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgb3BlcmF0b3IhKCkgY29uc3QgCisgICAgICB7IHJldHVybiAoX1N0b3JhZ2VfcG9saWN5OjpnZXQoKSA9PSAwKTsgfQorICAKKyAgICAgIC8vIFBvaW50ZXIgZGlmZmVyZW5jZXMKKyAgICAgIGlubGluZSBmcmllbmQgc3RkOjpwdHJkaWZmX3QgCisgICAgICBvcGVyYXRvci0oY29uc3QgX1BvaW50ZXJfYWRhcHRlciYgX19saHMsIGVsZW1lbnRfdHlwZSogX19yaHMpIAorICAgICAgeyByZXR1cm4gKF9fbGhzLmdldCgpIC0gX19yaHMpOyB9CisgIAorICAgICAgaW5saW5lIGZyaWVuZCBzdGQ6OnB0cmRpZmZfdCAKKyAgICAgIG9wZXJhdG9yLShlbGVtZW50X3R5cGUqIF9fbGhzLCBjb25zdCBfUG9pbnRlcl9hZGFwdGVyJiBfX3JocykgCisgICAgICB7IHJldHVybiAoX19saHMgLSBfX3Jocy5nZXQoKSk7IH0KKyAgCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgICAgIGlubGluZSBmcmllbmQgc3RkOjpwdHJkaWZmX3QgCisgICAgICAgIG9wZXJhdG9yLShjb25zdCBfUG9pbnRlcl9hZGFwdGVyJiBfX2xocywgX1VwKiBfX3JocykgCisgICAgICAgIHsgcmV0dXJuIChfX2xocy5nZXQoKSAtIF9fcmhzKTsgfQorICAgIAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorICAgICAgICBpbmxpbmUgZnJpZW5kIHN0ZDo6cHRyZGlmZl90IAorICAgICAgICBvcGVyYXRvci0oX1VwKiBfX2xocywgY29uc3QgX1BvaW50ZXJfYWRhcHRlciYgX19yaHMpCisgICAgICAgIHsgcmV0dXJuIChfX2xocyAtIF9fcmhzLmdldCgpKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgICAgIGlubGluZSBzdGQ6OnB0cmRpZmZfdCAKKyAgICAgICAgb3BlcmF0b3ItKGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXI8X1VwPiYgX19yaHMpIGNvbnN0IAorICAgICAgICB7IHJldHVybiAoX1N0b3JhZ2VfcG9saWN5OjpnZXQoKSAtIF9fcmhzLmdldCgpKTsgfQorICAKKyAgICAgIC8vIFBvaW50ZXIgbWF0aAorICAgICAgLy8gTm90ZTogVGhlcmUgaXMgYSByZWFzb24gZm9yIGFsbCB0aGlzIG92ZXJsb2FkaW5nIGJhc2VkIG9uIGRpZmZlcmVudAorICAgICAgLy8gaW50ZWdlciB0eXBlcy4gIEluIHNvbWUgbGlic3RkYysrLXYzIHRlc3QgY2FzZXMsIGEgdGVtcGxhdGVkCisgICAgICAvLyBvcGVyYXRvcisgaXMgZGVjbGFyZWQgd2hpY2ggY2FuIG1hdGNoIGFueSB0eXBlcy4gIFRoaXMgb3BlcmF0b3IKKyAgICAgIC8vIHRlbmRzIHRvICJzdGVhbCIgdGhlIHJlY29nbml0aW9uIG9mIF9Qb2ludGVyX2FkYXB0ZXIncyBvd24gb3BlcmF0b3IrIAorICAgICAgLy8gdW5sZXNzIHRoZSBpbnRlZ2VyIHR5cGUgbWF0Y2hlcyBwZXJmZWN0bHkuCisKKyNkZWZpbmUgX0NYWF9QT0lOVEVSX0FSSVRIX09QRVJBVE9SX1NFVChJTlRfVFlQRSkgXAorICAgICAgaW5saW5lIGZyaWVuZCBfUG9pbnRlcl9hZGFwdGVyIFwKKyAgICAgIG9wZXJhdG9yKyhjb25zdCBfUG9pbnRlcl9hZGFwdGVyJiBfX2xocywgSU5UX1RZUEUgX19vZmZzZXQpIFwKKyAgICAgIHsgcmV0dXJuIF9Qb2ludGVyX2FkYXB0ZXIoX19saHMuZ2V0KCkgKyBfX29mZnNldCk7IH0gXAorXAorICAgICAgaW5saW5lIGZyaWVuZCBfUG9pbnRlcl9hZGFwdGVyIFwKKyAgICAgIG9wZXJhdG9yKyhJTlRfVFlQRSBfX29mZnNldCwgY29uc3QgX1BvaW50ZXJfYWRhcHRlciYgX19yaHMpIFwKKyAgICAgIHsgcmV0dXJuIF9Qb2ludGVyX2FkYXB0ZXIoX19yaHMuZ2V0KCkgKyBfX29mZnNldCk7IH0gXAorXAorICAgICAgaW5saW5lIGZyaWVuZCBfUG9pbnRlcl9hZGFwdGVyIFwKKyAgICAgIG9wZXJhdG9yLShjb25zdCBfUG9pbnRlcl9hZGFwdGVyJiBfX2xocywgSU5UX1RZUEUgX19vZmZzZXQpIFwKKyAgICAgIHsgcmV0dXJuIF9Qb2ludGVyX2FkYXB0ZXIoX19saHMuZ2V0KCkgLSBfX29mZnNldCk7IH0gXAorXAorICAgICAgaW5saW5lIF9Qb2ludGVyX2FkYXB0ZXImIFwKKyAgICAgIG9wZXJhdG9yKz0oSU5UX1RZUEUgX19vZmZzZXQpIFwKKyAgICAgIHsgXAorICAgICAgICBfU3RvcmFnZV9wb2xpY3k6OnNldChfU3RvcmFnZV9wb2xpY3k6OmdldCgpICsgX19vZmZzZXQpOyBcCisgICAgICAgIHJldHVybiAqdGhpczsgXAorICAgICAgfSBcCitcCisgICAgICBpbmxpbmUgX1BvaW50ZXJfYWRhcHRlciYgXAorICAgICAgb3BlcmF0b3ItPShJTlRfVFlQRSBfX29mZnNldCkgXAorICAgICAgeyBcCisgICAgICAgIF9TdG9yYWdlX3BvbGljeTo6c2V0KF9TdG9yYWdlX3BvbGljeTo6Z2V0KCkgLSBfX29mZnNldCk7IFwKKyAgICAgICAgcmV0dXJuICp0aGlzOyBcCisgICAgICB9IFwKKy8vIEVORCBvZiBfQ1hYX1BPSU5URVJfQVJJVEhfT1BFUkFUT1JfU0VUIG1hY3JvCisgIAorICAgICAgLy8gRXhwYW5kIGludG8gdGhlIHZhcmlvdXMgcG9pbnRlciBhcml0aG1hdGljIG9wZXJhdG9ycyBuZWVkZWQuCisgICAgICBfQ1hYX1BPSU5URVJfQVJJVEhfT1BFUkFUT1JfU0VUKHNob3J0KTsKKyAgICAgIF9DWFhfUE9JTlRFUl9BUklUSF9PUEVSQVRPUl9TRVQodW5zaWduZWQgc2hvcnQpOworICAgICAgX0NYWF9QT0lOVEVSX0FSSVRIX09QRVJBVE9SX1NFVChpbnQpOworICAgICAgX0NYWF9QT0lOVEVSX0FSSVRIX09QRVJBVE9SX1NFVCh1bnNpZ25lZCBpbnQpOworICAgICAgX0NYWF9QT0lOVEVSX0FSSVRIX09QRVJBVE9SX1NFVChsb25nKTsKKyAgICAgIF9DWFhfUE9JTlRFUl9BUklUSF9PUEVSQVRPUl9TRVQodW5zaWduZWQgbG9uZyk7CisKKyAgICAgIC8vIE1hdGhlbWF0aWNhbCBNYW5pcHVsYXRvcnMKKyAgICAgIGlubGluZSBfUG9pbnRlcl9hZGFwdGVyJiAKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworICAgICAgICBfU3RvcmFnZV9wb2xpY3k6OnNldChfU3RvcmFnZV9wb2xpY3k6OmdldCgpICsgMSk7IAorICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICB9CisgIAorICAgICAgaW5saW5lIF9Qb2ludGVyX2FkYXB0ZXIgCisgICAgICBvcGVyYXRvcisrKGludCBfX3VudXNlZCkgCisgICAgICB7CisgICAgICAgIF9Qb2ludGVyX2FkYXB0ZXIgdG1wKCp0aGlzKTsKKyAgICAgICAgX1N0b3JhZ2VfcG9saWN5OjpzZXQoX1N0b3JhZ2VfcG9saWN5OjpnZXQoKSArIDEpOworICAgICAgICByZXR1cm4gdG1wOworICAgICAgfQorICAKKyAgICAgIGlubGluZSBfUG9pbnRlcl9hZGFwdGVyJiAKKyAgICAgIG9wZXJhdG9yLS0oKSAKKyAgICAgIHsKKyAgICAgICAgX1N0b3JhZ2VfcG9saWN5OjpzZXQoX1N0b3JhZ2VfcG9saWN5OjpnZXQoKSAtIDEpOyAKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorICAKKyAgICAgIGlubGluZSBfUG9pbnRlcl9hZGFwdGVyCisgICAgICBvcGVyYXRvci0tKGludCkgCisgICAgICB7CisgICAgICAgIF9Qb2ludGVyX2FkYXB0ZXIgdG1wKCp0aGlzKTsKKyAgICAgICAgX1N0b3JhZ2VfcG9saWN5OjpzZXQoX1N0b3JhZ2VfcG9saWN5OjpnZXQoKSAtIDEpOworICAgICAgICByZXR1cm4gdG1wOworICAgICAgfQorICAKKyAgICB9OyAvLyBjbGFzcyBfUG9pbnRlcl9hZGFwdGVyCisKKworI2RlZmluZSBfR0NDX0NYWF9QT0lOVEVSX0NPTVBBUklTT05fT1BFUkFUSU9OX1NFVChPUEVSQVRPUikgXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyPiBcCisgICAgaW5saW5lIGJvb2wgXAorICAgIG9wZXJhdG9yIE9QRVJBVE9SKGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXI8X1RwMT4mIF9fbGhzLCBfVHAyIF9fcmhzKSBcCisgICAgeyByZXR1cm4gX19saHMuZ2V0KCkgT1BFUkFUT1IgX19yaHM7IH0gXAorXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyPiBcCisgICAgaW5saW5lIGJvb2wgXAorICAgIG9wZXJhdG9yIE9QRVJBVE9SKF9UcDEgX19saHMsIGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXI8X1RwMj4mIF9fcmhzKSBcCisgICAgeyByZXR1cm4gX19saHMgT1BFUkFUT1IgX19yaHMuZ2V0KCk7IH0gXAorXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyPiBcCisgICAgaW5saW5lIGJvb2wgXAorICAgIG9wZXJhdG9yIE9QRVJBVE9SKGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXI8X1RwMT4mIF9fbGhzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfUG9pbnRlcl9hZGFwdGVyPF9UcDI+JiBfX3JocykgXAorICAgIHsgcmV0dXJuIF9fbGhzLmdldCgpIE9QRVJBVE9SIF9fcmhzLmdldCgpOyB9IFwKK1wKKy8vIEVuZCBHQ0NfQ1hYX1BPSU5URVJfQ09NUEFSSVNPTl9PUEVSQVRJT05fU0VUIE1hY3JvCisgIAorICAvLyBFeHBhbmQgaW50byB0aGUgdmFyaW91cyBjb21wYXJpc29uIG9wZXJhdG9ycyBuZWVkZWQuCisgIF9HQ0NfQ1hYX1BPSU5URVJfQ09NUEFSSVNPTl9PUEVSQVRJT05fU0VUKD09KQorICBfR0NDX0NYWF9QT0lOVEVSX0NPTVBBUklTT05fT1BFUkFUSU9OX1NFVCghPSkKKyAgX0dDQ19DWFhfUE9JTlRFUl9DT01QQVJJU09OX09QRVJBVElPTl9TRVQoPCkKKyAgX0dDQ19DWFhfUE9JTlRFUl9DT01QQVJJU09OX09QRVJBVElPTl9TRVQoPD0pCisgIF9HQ0NfQ1hYX1BPSU5URVJfQ09NUEFSSVNPTl9PUEVSQVRJT05fU0VUKD4pCisgIF9HQ0NfQ1hYX1BPSU5URVJfQ09NUEFSSVNPTl9PUEVSQVRJT05fU0VUKD49KQorCisgIC8vIFRoZXNlIGFyZSBoZXJlIGZvciBleHByZXNzaW9ucyBsaWtlICJwdHIgPT0gMCIsICJwdHIgIT0gMCIKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBfUG9pbnRlcl9hZGFwdGVyPF9UcD4mIF9fbGhzLCBpbnQgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuZ2V0KCkgPT0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oX19yaHMpOyB9IAorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oaW50IF9fbGhzLCBjb25zdCBfUG9pbnRlcl9hZGFwdGVyPF9UcD4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fcmhzLmdldCgpID09IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KF9fbGhzKTsgfSAKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXI8X1RwPiYgX19saHMsIGludCBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5nZXQoKSAhPSByZWludGVycHJldF9jYXN0PHZvaWQqPihfX3Jocyk7IH0gCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShpbnQgX19saHMsIGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXI8X1RwPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19yaHMuZ2V0KCkgIT0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oX19saHMpOyB9IAorCisgIC8qKgorICAgKiBDb21wYXJpc29uIG9wZXJhdG9ycyBmb3IgX1BvaW50ZXJfYWRhcHRlciBkZWZlciB0byB0aGUgYmFzZSBjbGFzcydlcworICAgKiBjb21wYXJpc29uIG9wZXJhdG9ycywgd2hlbiBwb3NzaWJsZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX1BvaW50ZXJfYWRhcHRlcjxfVHA+JiBfX2xocywgCisgICAgICAgICAgICAgICBjb25zdCBfUG9pbnRlcl9hZGFwdGVyPF9UcD4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9UcDo6b3BlcmF0b3I9PShfX3Jocyk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXI8X1RwPiYgX19saHMsIAorICAgICAgICAgICAgICAgY29uc3QgX1BvaW50ZXJfYWRhcHRlcjxfVHA+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fVHA6Om9wZXJhdG9yPChfX3JocykgfHwgX19saHMuX1RwOjpvcGVyYXRvcj09KF9fcmhzKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX1BvaW50ZXJfYWRhcHRlcjxfVHA+JiBfX2xocywgCisgICAgICAgICAgICAgICBjb25zdCBfUG9pbnRlcl9hZGFwdGVyPF9UcD4mIF9fcmhzKQorICAgIHsgcmV0dXJuICEoX19saHMuX1RwOjpvcGVyYXRvcj09KF9fcmhzKSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgX1BvaW50ZXJfYWRhcHRlcjxfVHA+JiBfX2xocywgCisgICAgICAgICAgICAgIGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXI8X1RwPiYgX19yaHMpCisgICAgeyByZXR1cm4gIShfX2xocy5fVHA6Om9wZXJhdG9yPChfX3JocykgfHwgX19saHMuX1RwOjpvcGVyYXRvcj09KF9fcmhzKSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXI8X1RwPiYgX19saHMsIAorICAgICAgICAgICAgICAgY29uc3QgX1BvaW50ZXJfYWRhcHRlcjxfVHA+JiBfX3JocykKKyAgICB7IHJldHVybiAhKF9fbGhzLl9UcDo6b3BlcmF0b3I8KF9fcmhzKSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9TdG9yZVQ+CisgICAgaW5saW5lIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsIAorICAgICAgICAgICAgICAgY29uc3QgX1BvaW50ZXJfYWRhcHRlcjxfU3RvcmVUPiYgX19wKQorICAgIHsgcmV0dXJuIChfX29zIDw8IF9fcC5nZXQoKSk7IH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYgLy8gX1BPSU5URVJfSApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcG9vbF9hbGxvY2F0b3IuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3Bvb2xfYWxsb2NhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFlNjE4NAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3Bvb2xfYWxsb2NhdG9yLmgKQEAgLTAsMCArMSwyNjMgQEAKKy8vIEFsbG9jYXRvcnMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBleHQvcG9vbF9hbGxvY2F0b3IuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX1BPT0xfQUxMT0NBVE9SX0gKKyNkZWZpbmUgX1BPT0xfQUxMT0NBVE9SX0ggMQorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPG5ldz4KKyNpbmNsdWRlIDxiaXRzL2Z1bmN0ZXhjZXB0Lmg+CisjaW5jbHVkZSA8ZXh0L2F0b21pY2l0eS5oPgorI2luY2x1ZGUgPGV4dC9jb25jdXJyZW5jZS5oPgorI2luY2x1ZGUgPGJpdHMvbW92ZS5oPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorCisgIHVzaW5nIHN0ZDo6c2l6ZV90OworICB1c2luZyBzdGQ6OnB0cmRpZmZfdDsKKworICAvKioKKyAgICogIEBicmllZiAgQmFzZSBjbGFzcyBmb3IgX19wb29sX2FsbG9jLgorICAgKgorICAgKiAgVXNlcyB2YXJpb3VzIGFsbG9jYXRvcnMgdG8gZnVsZmlsbCB1bmRlcmx5aW5nIHJlcXVlc3RzIChhbmQgbWFrZXMgYXMKKyAgICogIGZldyByZXF1ZXN0cyBhcyBwb3NzaWJsZSB3aGVuIGluIGRlZmF1bHQgaGlnaC1zcGVlZCBwb29sIG1vZGUpLgorICAgKgorICAgKiAgSW1wb3J0YW50IGltcGxlbWVudGF0aW9uIHByb3BlcnRpZXM6CisgICAqICAwLiBJZiBnbG9iYWxseSBtYW5kYXRlZCwgdGhlbiBhbGxvY2F0ZSBvYmplY3RzIGZyb20gbmV3CisgICAqICAxLiBJZiB0aGUgY2xpZW50cyByZXF1ZXN0IGFuIG9iamVjdCBvZiBzaXplID4gX1NfbWF4X2J5dGVzLCB0aGUgcmVzdWx0aW5nCisgICAqICAgICBvYmplY3Qgd2lsbCBiZSBvYnRhaW5lZCBkaXJlY3RseSBmcm9tIG5ldworICAgKiAgMi4gSW4gYWxsIG90aGVyIGNhc2VzLCB3ZSBhbGxvY2F0ZSBhbiBvYmplY3Qgb2Ygc2l6ZSBleGFjdGx5CisgICAqICAgICBfU19yb3VuZF91cChyZXF1ZXN0ZWRfc2l6ZSkuICBUaHVzIHRoZSBjbGllbnQgaGFzIGVub3VnaCBzaXplCisgICAqICAgICBpbmZvcm1hdGlvbiB0aGF0IHdlIGNhbiByZXR1cm4gdGhlIG9iamVjdCB0byB0aGUgcHJvcGVyIGZyZWUgbGlzdAorICAgKiAgICAgd2l0aG91dCBwZXJtYW5lbnRseSBsb3NpbmcgcGFydCBvZiB0aGUgb2JqZWN0LgorICAgKi8KKyAgICBjbGFzcyBfX3Bvb2xfYWxsb2NfYmFzZQorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisKKyAgICAgIGVudW0geyBfU19hbGlnbiA9IDggfTsKKyAgICAgIGVudW0geyBfU19tYXhfYnl0ZXMgPSAxMjggfTsKKyAgICAgIGVudW0geyBfU19mcmVlX2xpc3Rfc2l6ZSA9IChzaXplX3QpX1NfbWF4X2J5dGVzIC8gKHNpemVfdClfU19hbGlnbiB9OworICAgICAgCisgICAgICB1bmlvbiBfT2JqCisgICAgICB7CisJdW5pb24gX09iaiogX01fZnJlZV9saXN0X2xpbms7CisJY2hhciAgICAgICAgX01fY2xpZW50X2RhdGFbMV07ICAgIC8vIFRoZSBjbGllbnQgc2VlcyB0aGlzLgorICAgICAgfTsKKyAgICAgIAorICAgICAgc3RhdGljIF9PYmoqIHZvbGF0aWxlICAgICAgICAgX1NfZnJlZV9saXN0W19TX2ZyZWVfbGlzdF9zaXplXTsKKworICAgICAgLy8gQ2h1bmsgYWxsb2NhdGlvbiBzdGF0ZS4KKyAgICAgIHN0YXRpYyBjaGFyKiAgICAgICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWU7CisgICAgICBzdGF0aWMgY2hhciogICAgICAgICAgICAgICAgICBfU19lbmRfZnJlZTsKKyAgICAgIHN0YXRpYyBzaXplX3QgICAgICAgICAgICAgICAgIF9TX2hlYXBfc2l6ZTsgICAgIAorICAgICAgCisgICAgICBzaXplX3QKKyAgICAgIF9NX3JvdW5kX3VwKHNpemVfdCBfX2J5dGVzKQorICAgICAgeyByZXR1cm4gKChfX2J5dGVzICsgKHNpemVfdClfU19hbGlnbiAtIDEpICYgfigoc2l6ZV90KV9TX2FsaWduIC0gMSkpOyB9CisgICAgICAKKyAgICAgIF9HTElCQ1hYX0NPTlNUIF9PYmoqIHZvbGF0aWxlKgorICAgICAgX01fZ2V0X2ZyZWVfbGlzdChzaXplX3QgX19ieXRlcykgdGhyb3cgKCk7CisgICAgCisgICAgICBfX211dGV4JgorICAgICAgX01fZ2V0X211dGV4KCkgdGhyb3cgKCk7CisKKyAgICAgIC8vIFJldHVybnMgYW4gb2JqZWN0IG9mIHNpemUgX19uLCBhbmQgb3B0aW9uYWxseSBhZGRzIHRvIHNpemUgX19uCisgICAgICAvLyBmcmVlIGxpc3QuCisgICAgICB2b2lkKgorICAgICAgX01fcmVmaWxsKHNpemVfdCBfX24pOworICAgICAgCisgICAgICAvLyBBbGxvY2F0ZXMgYSBjaHVuayBmb3Igbm9ianMgb2Ygc2l6ZSBzaXplLiAgbm9ianMgbWF5IGJlIHJlZHVjZWQKKyAgICAgIC8vIGlmIGl0IGlzIGluY29udmVuaWVudCB0byBhbGxvY2F0ZSB0aGUgcmVxdWVzdGVkIG51bWJlci4KKyAgICAgIGNoYXIqCisgICAgICBfTV9hbGxvY2F0ZV9jaHVuayhzaXplX3QgX19uLCBpbnQmIF9fbm9ianMpOworICAgIH07CisKKworICAvKioKKyAgICogQGJyaWVmICBBbGxvY2F0b3IgdXNpbmcgYSBtZW1vcnkgcG9vbCB3aXRoIGEgc2luZ2xlIGxvY2suCisgICAqIEBpbmdyb3VwIGFsbG9jYXRvcnMKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyBfX3Bvb2xfYWxsb2MgOiBwcml2YXRlIF9fcG9vbF9hbGxvY19iYXNlCisgICAgeworICAgIHByaXZhdGU6CisgICAgICBzdGF0aWMgX0F0b21pY193b3JkCSAgICBfU19mb3JjZV9uZXc7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHNpemVfdCAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RwKiAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIF9UcCYgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgX1RwICAgICAgICB2YWx1ZV90eXBlOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorICAgICAgICBzdHJ1Y3QgcmViaW5kCisgICAgICAgIHsgdHlwZWRlZiBfX3Bvb2xfYWxsb2M8X1RwMT4gb3RoZXI7IH07CisKKyAgICAgIF9fcG9vbF9hbGxvYygpIHRocm93KCkgeyB9CisKKyAgICAgIF9fcG9vbF9hbGxvYyhjb25zdCBfX3Bvb2xfYWxsb2MmKSB0aHJvdygpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorICAgICAgICBfX3Bvb2xfYWxsb2MoY29uc3QgX19wb29sX2FsbG9jPF9UcDE+JikgdGhyb3coKSB7IH0KKworICAgICAgfl9fcG9vbF9hbGxvYygpIHRocm93KCkgeyB9CisKKyAgICAgIHBvaW50ZXIKKyAgICAgIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQorCisgICAgICBjb25zdF9wb2ludGVyCisgICAgICBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkgCisgICAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNDAyLiB3cm9uZyBuZXcgZXhwcmVzc2lvbiBpbiBbc29tZV9dIGFsbG9jYXRvcjo6Y29uc3RydWN0CisgICAgICB2b2lkIAorICAgICAgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSAKKyAgICAgIHsgOjpuZXcoKHZvaWQgKilfX3ApIF9UcChfX3ZhbCk7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgdm9pZAorICAgICAgICBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIF9BcmdzJiYuLi4gX19hcmdzKQorCXsgOjpuZXcoKHZvaWQgKilfX3ApIF9UcChzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOyB9CisjZW5kaWYKKworICAgICAgdm9pZCAKKyAgICAgIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KKworICAgICAgcG9pbnRlcgorICAgICAgYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAwKTsKKworICAgICAgdm9pZAorICAgICAgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbik7ICAgICAgCisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9fcG9vbF9hbGxvYzxfVHA+JiwgY29uc3QgX19wb29sX2FsbG9jPF9UcD4mKQorICAgIHsgcmV0dXJuIHRydWU7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9fcG9vbF9hbGxvYzxfVHA+JiwgY29uc3QgX19wb29sX2FsbG9jPF9UcD4mKQorICAgIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9BdG9taWNfd29yZAorICAgIF9fcG9vbF9hbGxvYzxfVHA+OjpfU19mb3JjZV9uZXc7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcCoKKyAgICBfX3Bvb2xfYWxsb2M8X1RwPjo6YWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCopCisgICAgeworICAgICAgcG9pbnRlciBfX3JldCA9IDA7CisgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX24gIT0gMCwgdHJ1ZSkpCisJeworCSAgaWYgKF9fbiA+IHRoaXMtPm1heF9zaXplKCkpCisJICAgIHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsKKworCSAgLy8gSWYgdGhlcmUgaXMgYSByYWNlIHRocm91Z2ggaGVyZSwgYXNzdW1lIGFuc3dlciBmcm9tIGdldGVudgorCSAgLy8gd2lsbCByZXNvbHZlIGluIHNhbWUgZGlyZWN0aW9uLiAgSW5zcGlyZWQgYnkgdGVjaG5pcXVlcworCSAgLy8gdG8gZWZmaWNpZW50bHkgc3VwcG9ydCB0aHJlYWRpbmcgZm91bmQgaW4gYmFzaWNfc3RyaW5nLmguCisJICBpZiAoX1NfZm9yY2VfbmV3ID09IDApCisJICAgIHsKKwkgICAgICBpZiAoc3RkOjpnZXRlbnYoIkdMSUJDWFhfRk9SQ0VfTkVXIikpCisJCV9fYXRvbWljX2FkZF9kaXNwYXRjaCgmX1NfZm9yY2VfbmV3LCAxKTsKKwkgICAgICBlbHNlCisJCV9fYXRvbWljX2FkZF9kaXNwYXRjaCgmX1NfZm9yY2VfbmV3LCAtMSk7CisJICAgIH0KKworCSAgY29uc3Qgc2l6ZV90IF9fYnl0ZXMgPSBfX24gKiBzaXplb2YoX1RwKTsJICAgICAgCisJICBpZiAoX19ieXRlcyA+IHNpemVfdChfU19tYXhfYnl0ZXMpIHx8IF9TX2ZvcmNlX25ldyA+IDApCisJICAgIF9fcmV0ID0gc3RhdGljX2Nhc3Q8X1RwKj4oOjpvcGVyYXRvciBuZXcoX19ieXRlcykpOworCSAgZWxzZQorCSAgICB7CisJICAgICAgX09iaiogdm9sYXRpbGUqIF9fZnJlZV9saXN0ID0gX01fZ2V0X2ZyZWVfbGlzdChfX2J5dGVzKTsKKwkgICAgICAKKwkgICAgICBfX3Njb3BlZF9sb2NrIHNlbnRyeShfTV9nZXRfbXV0ZXgoKSk7CisJICAgICAgX09iaiogX19yZXN0cmljdF9fIF9fcmVzdWx0ID0gKl9fZnJlZV9saXN0OworCSAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fcmVzdWx0ID09IDAsIDApKQorCQlfX3JldCA9IHN0YXRpY19jYXN0PF9UcCo+KF9NX3JlZmlsbChfTV9yb3VuZF91cChfX2J5dGVzKSkpOworCSAgICAgIGVsc2UKKwkJeworCQkgICpfX2ZyZWVfbGlzdCA9IF9fcmVzdWx0LT5fTV9mcmVlX2xpc3RfbGluazsKKwkJICBfX3JldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8X1RwKj4oX19yZXN1bHQpOworCQl9CisJICAgICAgaWYgKF9fcmV0ID09IDApCisJCXN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiBfX3JldDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICBfX3Bvb2xfYWxsb2M8X1RwPjo6ZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKKyAgICB7CisgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX24gIT0gMCAmJiBfX3AgIT0gMCwgdHJ1ZSkpCisJeworCSAgY29uc3Qgc2l6ZV90IF9fYnl0ZXMgPSBfX24gKiBzaXplb2YoX1RwKTsKKwkgIGlmIChfX2J5dGVzID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihfU19tYXhfYnl0ZXMpIHx8IF9TX2ZvcmNlX25ldyA+IDApCisJICAgIDo6b3BlcmF0b3IgZGVsZXRlKF9fcCk7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBfT2JqKiB2b2xhdGlsZSogX19mcmVlX2xpc3QgPSBfTV9nZXRfZnJlZV9saXN0KF9fYnl0ZXMpOworCSAgICAgIF9PYmoqIF9fcSA9IHJlaW50ZXJwcmV0X2Nhc3Q8X09iaio+KF9fcCk7CisKKwkgICAgICBfX3Njb3BlZF9sb2NrIHNlbnRyeShfTV9nZXRfbXV0ZXgoKSk7CisJICAgICAgX19xIC0+X01fZnJlZV9saXN0X2xpbmsgPSAqX19mcmVlX2xpc3Q7CisJICAgICAgKl9fZnJlZV9saXN0ID0gX19xOworCSAgICB9CisJfQorICAgIH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3JiX3RyZWUgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9yYl90cmVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NWQwMmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9yYl90cmVlCkBAIC0wLDAgKzEsOTMgQEAKKy8vIHJiX3RyZWUgZXh0ZW5zaW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NgorICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGV4dC9yYl90cmVlCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkgKHBvc3NpYmx5CisgKiAgY29udGFpbmluZyBleHRlbnNpb25zIGZyb20gdGhlIEhQL1NHSSBTVEwgc3Vic2V0KS4gCisgKi8KKworI2lmbmRlZiBfUkJfVFJFRQorI2RlZmluZSBfUkJfVFJFRSAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvc3RsX3RyZWUuaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKworICB1c2luZyBzdGQ6Ol9SYl90cmVlOworICB1c2luZyBzdGQ6OmFsbG9jYXRvcjsKKworICAvLyBDbGFzcyByYl90cmVlIGlzIG5vdCBwYXJ0IG9mIHRoZSBDKysgc3RhbmRhcmQuICBJdCBpcyBwcm92aWRlZCBmb3IKKyAgLy8gY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBIUCBTVEwuCisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIFNHSSBleHRlbnNpb24uCisgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICAqICBAZG9jdG9kbworICAgKi8KKyAgdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIGNsYXNzIF9Db21wYXJlLAorCSAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X1ZhbHVlPiA+CisgICAgc3RydWN0IHJiX3RyZWUKKyAgICA6IHB1YmxpYyBfUmJfdHJlZTxfS2V5LCBfVmFsdWUsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4gX0Jhc2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKKworICAgICAgcmJfdHJlZShjb25zdCBfQ29tcGFyZSYgX19jb21wID0gX0NvbXBhcmUoKSwKKwkgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19jb21wLCBfX2EpIHsgfQorCisgICAgICB+cmJfdHJlZSgpIHsgfQorICAgIH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9yY19zdHJpbmdfYmFzZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcmNfc3RyaW5nX2Jhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMThiMjc0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvcmNfc3RyaW5nX2Jhc2UuaApAQCAtMCwwICsxLDcyNCBAQAorLy8gUmVmZXJlbmNlLWNvdW50ZWQgdmVyc2F0aWxlIHN0cmluZyBiYXNlIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGV4dC9yY19zdHJpbmdfYmFzZS5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKyNpZm5kZWYgX1JDX1NUUklOR19CQVNFX0gKKyNkZWZpbmUgX1JDX1NUUklOR19CQVNFX0ggMQorCisjaW5jbHVkZSA8ZXh0L2F0b21pY2l0eS5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKworICAvKioKKyAgICogIERvY3VtZW50YXRpb24/ICBXaGF0J3MgdGhhdD8KKyAgICogIE5hdGhhbiBNeWVycyA8bmNtQGNhbnRyaXAub3JnPi4KKyAgICoKKyAgICogIEEgc3RyaW5nIGxvb2tzIGxpa2UgdGhpczoKKyAgICoKKyAgICogIEBjb2RlCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtfUmVwXQorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9sZW5ndGgKKyAgICogICBbX19yY19zdHJpbmdfYmFzZTxjaGFyX3R5cGU+XSAgICAgICAgX01fY2FwYWNpdHkKKyAgICogICBfTV9kYXRhcGx1cyAgICAgICAgICAgICAgICAgICAgICAgICAgX01fcmVmY291bnQKKyAgICogICBfTV9wIC0tLS0tLS0tLS0tLS0tLS0+ICAgICAgICAgICAgICAgdW5uYW1lZCBhcnJheSBvZiBjaGFyX3R5cGUKKyAgICogIEBlbmRjb2RlCisgICAqCisgICAqICBXaGVyZSB0aGUgX01fcCBwb2ludHMgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLCBhbmQKKyAgICogIHlvdSBjYXN0IGl0IHRvIGEgcG9pbnRlci10by1fUmVwIGFuZCBzdWJ0cmFjdCAxIHRvIGdldCBhCisgICAqICBwb2ludGVyIHRvIHRoZSBoZWFkZXIuCisgICAqCisgICAqICBUaGlzIGFwcHJvYWNoIGhhcyB0aGUgZW5vcm1vdXMgYWR2YW50YWdlIHRoYXQgYSBzdHJpbmcgb2JqZWN0CisgICAqICByZXF1aXJlcyBvbmx5IG9uZSBhbGxvY2F0aW9uLiAgQWxsIHRoZSB1Z2xpbmVzcyBpcyBjb25maW5lZAorICAgKiAgd2l0aGluIGEgc2luZ2xlIHBhaXIgb2YgaW5saW5lIGZ1bmN0aW9ucywgd2hpY2ggZWFjaCBjb21waWxlIHRvCisgICAqICBhIHNpbmdsZSBAYSBhZGQgaW5zdHJ1Y3Rpb246IF9SZXA6Ol9NX3JlZmRhdGEoKSwgYW5kCisgICAqICBfX3JjX3N0cmluZ19iYXNlOjpfTV9yZXAoKTsgYW5kIHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uIHdoaWNoIGdldHMgYQorICAgKiAgYmxvY2sgb2YgcmF3IGJ5dGVzIGFuZCB3aXRoIHJvb20gZW5vdWdoIGFuZCBjb25zdHJ1Y3RzIGEgX1JlcAorICAgKiAgb2JqZWN0IGF0IHRoZSBmcm9udC4KKyAgICoKKyAgICogIFRoZSByZWFzb24geW91IHdhbnQgX01fZGF0YSBwb2ludGluZyB0byB0aGUgY2hhcmFjdGVyIGFycmF5IGFuZAorICAgKiAgbm90IHRoZSBfUmVwIGlzIHNvIHRoYXQgdGhlIGRlYnVnZ2VyIGNhbiBzZWUgdGhlIHN0cmluZworICAgKiAgY29udGVudHMuIChQcm9iYWJseSB3ZSBzaG91bGQgYWRkIGEgbm9uLWlubGluZSBtZW1iZXIgdG8gZ2V0CisgICAqICB0aGUgX1JlcCBmb3IgdGhlIGRlYnVnZ2VyIHRvIHVzZSwgc28gdXNlcnMgY2FuIGNoZWNrIHRoZSBhY3R1YWwKKyAgICogIHN0cmluZyBsZW5ndGguKQorICAgKgorICAgKiAgTm90ZSB0aGF0IHRoZSBfUmVwIG9iamVjdCBpcyBhIFBPRCBzbyB0aGF0IHlvdSBjYW4gaGF2ZSBhCisgICAqICBzdGF0aWMgPGVtPmVtcHR5IHN0cmluZzwvZW0+IF9SZXAgb2JqZWN0IGFscmVhZHkgQGEgY29uc3RydWN0ZWQgYmVmb3JlCisgICAqICBzdGF0aWMgY29uc3RydWN0b3JzIGhhdmUgcnVuLiAgVGhlIHJlZmVyZW5jZS1jb3VudCBlbmNvZGluZyBpcworICAgKiAgY2hvc2VuIHNvIHRoYXQgYSAwIGluZGljYXRlcyBvbmUgcmVmZXJlbmNlLCBzbyB5b3UgbmV2ZXIgdHJ5IHRvCisgICAqICBkZXN0cm95IHRoZSBlbXB0eS1zdHJpbmcgX1JlcCBvYmplY3QuCisgICAqCisgICAqICBBbGwgYnV0IHRoZSBsYXN0IHBhcmFncmFwaCBpcyBjb25zaWRlcmVkIHByZXR0eSBjb252ZW50aW9uYWwKKyAgICogIGZvciBhIEMrKyBzdHJpbmcgaW1wbGVtZW50YXRpb24uCisgICovCisgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgY2xhc3MgX19yY19zdHJpbmdfYmFzZQorICAgIDogcHJvdGVjdGVkIF9fdnN0cmluZ191dGlsaXR5PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9UcmFpdHMJCQkJCSAgICB0cmFpdHNfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6Y2hhcl90eXBlCQkgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0FsbG9jCQkJCQkgICAgYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgX192c3RyaW5nX3V0aWxpdHk8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ICAgIF9VdGlsX0Jhc2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9VdGlsX0Jhc2U6Ol9DaGFyVF9hbGxvY190eXBlICAgICAgICBfQ2hhclRfYWxsb2NfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0NoYXJUX2FsbG9jX3R5cGU6OnNpemVfdHlwZQkgICAgc2l6ZV90eXBlOworCisgICAgcHJpdmF0ZToKKyAgICAgIC8vIF9SZXA6IHN0cmluZyByZXByZXNlbnRhdGlvbgorICAgICAgLy8gICBJbnZhcmlhbnRzOgorICAgICAgLy8gICAxLiBTdHJpbmcgcmVhbGx5IGNvbnRhaW5zIF9NX2xlbmd0aCArIDEgY2hhcmFjdGVyczogZHVlIHRvIDIxLjMuNAorICAgICAgLy8gICAgICBtdXN0IGJlIGtlcHQgbnVsbC10ZXJtaW5hdGVkLgorICAgICAgLy8gICAyLiBfTV9jYXBhY2l0eSA+PSBfTV9sZW5ndGgKKyAgICAgIC8vICAgICAgQWxsb2NhdGVkIG1lbW9yeSBpcyBhbHdheXMgKF9NX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKS4KKyAgICAgIC8vICAgMy4gX01fcmVmY291bnQgaGFzIHRocmVlIHN0YXRlczoKKyAgICAgIC8vICAgICAgLTE6IGxlYWtlZCwgb25lIHJlZmVyZW5jZSwgbm8gcmVmLWNvcGllcyBhbGxvd2VkLCBub24tY29uc3QuCisgICAgICAvLyAgICAgICAwOiBvbmUgcmVmZXJlbmNlLCBub24tY29uc3QuCisgICAgICAvLyAgICAgbj4wOiBuICsgMSByZWZlcmVuY2VzLCBvcGVyYXRpb25zIHJlcXVpcmUgYSBsb2NrLCBjb25zdC4KKyAgICAgIC8vICAgNC4gQWxsIGZpZWxkcyA9PSAwIGlzIGFuIGVtcHR5IHN0cmluZywgZ2l2ZW4gdGhlIGV4dHJhIHN0b3JhZ2UKKyAgICAgIC8vICAgICAgYmV5b25kLXRoZS1lbmQgZm9yIGEgbnVsbCB0ZXJtaW5hdG9yOyB0aHVzLCB0aGUgc2hhcmVkCisgICAgICAvLyAgICAgIGVtcHR5IHN0cmluZyByZXByZXNlbnRhdGlvbiBuZWVkcyBubyBjb25zdHJ1Y3Rvci4KKyAgICAgIHN0cnVjdCBfUmVwCisgICAgICB7CisJdW5pb24KKwl7CisJICBzdHJ1Y3QKKwkgIHsKKwkgICAgc2l6ZV90eXBlCSAgICBfTV9sZW5ndGg7CisJICAgIHNpemVfdHlwZQkgICAgX01fY2FwYWNpdHk7CisJICAgIF9BdG9taWNfd29yZCAgICBfTV9yZWZjb3VudDsKKwkgIH0gICAgICAgICAgICAgICAgIF9NX2luZm87CisJICAKKwkgIC8vIE9ubHkgZm9yIGFsaWdubWVudCBwdXJwb3Nlcy4KKwkgIF9DaGFyVCAgICAgICAgICAgIF9NX2FsaWduOworCX07CisKKwl0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPF9SZXA+OjpvdGhlciBfUmVwX2FsbG9jX3R5cGU7CisKKyAJX0NoYXJUKgorCV9NX3JlZmRhdGEoKSB0aHJvdygpCisJeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxfQ2hhclQqPih0aGlzICsgMSk7IH0KKworCV9DaGFyVCoKKwlfTV9yZWZjb3B5KCkgdGhyb3coKQorCXsKKwkgIF9fYXRvbWljX2FkZF9kaXNwYXRjaCgmX01faW5mby5fTV9yZWZjb3VudCwgMSk7CisJICByZXR1cm4gX01fcmVmZGF0YSgpOworCX0gIC8vIFhYWCBNVAorCQorCXZvaWQKKwlfTV9zZXRfbGVuZ3RoKHNpemVfdHlwZSBfX24pCisJeyAKKwkgIF9NX2luZm8uX01fcmVmY291bnQgPSAwOyAgLy8gT25lIHJlZmVyZW5jZS4KKwkgIF9NX2luZm8uX01fbGVuZ3RoID0gX19uOworCSAgLy8gZ3Jyci4gKHBlciAyMS4zLjQpCisJICAvLyBZb3UgY2Fubm90IGxlYXZlIHRob3NlIExXRyBwZW9wbGUgYWxvbmUgZm9yIGEgc2Vjb25kLgorCSAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9yZWZkYXRhKClbX19uXSwgX0NoYXJUKCkpOworCX0KKworCS8vIENyZWF0ZSAmIERlc3Ryb3kKKwlzdGF0aWMgX1JlcCoKKwlfU19jcmVhdGUoc2l6ZV90eXBlLCBzaXplX3R5cGUsIGNvbnN0IF9BbGxvYyYpOworCisJdm9pZAorCV9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJikgdGhyb3coKTsKKworCV9DaGFyVCoKKwlfTV9jbG9uZShjb25zdCBfQWxsb2MmLCBzaXplX3R5cGUgX19yZXMgPSAwKTsKKyAgICAgIH07CisKKyAgICAgIHN0cnVjdCBfUmVwX2VtcHR5CisgICAgICA6IHB1YmxpYyBfUmVwCisgICAgICB7CisJX0NoYXJUICAgICAgICAgICAgICBfTV90ZXJtaW5hbDsKKyAgICAgIH07CisKKyAgICAgIHN0YXRpYyBfUmVwX2VtcHR5ICAgICBfU19lbXB0eV9yZXA7CisKKyAgICAgIC8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbmRpdmlkdWFsIGNoYXJfdHlwZSBlbGVtZW50cyBvZiBhbgorICAgICAgLy8gaW5kaXZpZHVhbCBzdHJpbmcgaXMgZGV0ZXJtaW5lZCBieSBfU19tYXhfc2l6ZS4gVGhpcyBpcyB0aGUKKyAgICAgIC8vIHZhbHVlIHRoYXQgd2lsbCBiZSByZXR1cm5lZCBieSBtYXhfc2l6ZSgpLiAgKFdoZXJlYXMgbnBvcworICAgICAgLy8gaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoZSBhbGxvY2F0b3IgY2FuIGFsbG9jYXRlLikKKyAgICAgIC8vIElmIG9uZSB3YXMgdG8gZGl2dnkgdXAgdGhlIHRoZW9yZXRpY2FsIGxhcmdlc3Qgc2l6ZSBzdHJpbmcsCisgICAgICAvLyB3aXRoIGEgdGVybWluYXRpbmcgY2hhcmFjdGVyIGFuZCBtIF9DaGFyVCBlbGVtZW50cywgaXQnZAorICAgICAgLy8gbG9vayBsaWtlIHRoaXM6CisgICAgICAvLyBucG9zID0gc2l6ZW9mKF9SZXApICsgKG0gKiBzaXplb2YoX0NoYXJUKSkgKyBzaXplb2YoX0NoYXJUKQorICAgICAgLy8gICAgICAgICsgc2l6ZW9mKF9SZXApIC0gMQorICAgICAgLy8gKE5COiBsYXN0IHR3byB0ZXJtcyBmb3Igcm91bmRpbmcgcmVhc29ucywgc2VlIF9NX2NyZWF0ZSBiZWxvdykKKyAgICAgIC8vIFNvbHZpbmcgZm9yIG06CisgICAgICAvLyBtID0gKChucG9zIC0gMiAqIHNpemVvZihfUmVwKSArIDEpIC8gc2l6ZW9mKF9DaGFyVCkpIC0gMQorICAgICAgLy8gSW4gYWRkaXRpb24sIHRoaXMgaW1wbGVtZW50YXRpb24gaGFsdmVzIHRoaXMgYW1vdW50LgorICAgICAgZW51bSB7IF9TX21heF9zaXplID0gKCgoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPigtMSkgLSAyICogc2l6ZW9mKF9SZXApCisJCQkgICAgICArIDEpIC8gc2l6ZW9mKF9DaGFyVCkpIC0gMSkgLyAyIH07CisKKyAgICAgIC8vIERhdGEgTWVtYmVyIChwcml2YXRlKToKKyAgICAgIG11dGFibGUgdHlwZW5hbWUgX1V0aWxfQmFzZTo6dGVtcGxhdGUgX0FsbG9jX2hpZGVyPF9BbGxvYz4gIF9NX2RhdGFwbHVzOworCisgICAgICB2b2lkCisgICAgICBfTV9kYXRhKF9DaGFyVCogX19wKQorICAgICAgeyBfTV9kYXRhcGx1cy5fTV9wID0gX19wOyB9CisKKyAgICAgIF9SZXAqCisgICAgICBfTV9yZXAoKSBjb25zdAorICAgICAgeyByZXR1cm4gJigocmVpbnRlcnByZXRfY2FzdDxfUmVwKj4oX01fZGF0YSgpKSlbLTFdKTsgfQorCisgICAgICBfQ2hhclQqCisgICAgICBfTV9ncmFiKGNvbnN0IF9BbGxvYyYgX19hbGxvYykgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gKCFfTV9pc19sZWFrZWQoKSAmJiBfTV9nZXRfYWxsb2NhdG9yKCkgPT0gX19hbGxvYykKKwkgICAgICAgID8gX01fcmVwKCktPl9NX3JlZmNvcHkoKSA6IF9NX3JlcCgpLT5fTV9jbG9uZShfX2FsbG9jKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01fZGlzcG9zZSgpCisgICAgICB7CisJaWYgKF9fZXhjaGFuZ2VfYW5kX2FkZF9kaXNwYXRjaCgmX01fcmVwKCktPl9NX2luZm8uX01fcmVmY291bnQsCisJCQkJCS0xKSA8PSAwKQorCSAgX01fcmVwKCktPl9NX2Rlc3Ryb3koX01fZ2V0X2FsbG9jYXRvcigpKTsKKyAgICAgIH0gIC8vIFhYWCBNVAorCisgICAgICBib29sCisgICAgICBfTV9pc19sZWFrZWQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcmVwKCktPl9NX2luZm8uX01fcmVmY291bnQgPCAwOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3NldF9zaGFyYWJsZSgpCisgICAgICB7IF9NX3JlcCgpLT5fTV9pbmZvLl9NX3JlZmNvdW50ID0gMDsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9sZWFrX2hhcmQoKTsKKworICAgICAgLy8gX1NfY29uc3RydWN0X2F1eCBpcyB1c2VkIHRvIGltcGxlbWVudCB0aGUgMjEuMy4xIHBhcmEgMTUgd2hpY2gKKyAgICAgIC8vIHJlcXVpcmVzIHNwZWNpYWwgYmVoYXZpb3VyIGlmIF9Jbkl0ZXJhdG9yIGlzIGFuIGludGVncmFsIHR5cGUKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXJhdG9yPgorICAgICAgICBzdGF0aWMgX0NoYXJUKgorICAgICAgICBfU19jb25zdHJ1Y3RfYXV4KF9Jbkl0ZXJhdG9yIF9fYmVnLCBfSW5JdGVyYXRvciBfX2VuZCwKKwkJCSBjb25zdCBfQWxsb2MmIF9fYSwgc3RkOjpfX2ZhbHNlX3R5cGUpCisJeworICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Jbkl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX1RhZzsKKyAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0KF9fYmVnLCBfX2VuZCwgX19hLCBfVGFnKCkpOworCX0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNDM4LiBBbWJpZ3VpdHkgaW4gdGhlICJkbyB0aGUgcmlnaHQgdGhpbmciIGNsYXVzZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVnZXI+CisgICAgICAgIHN0YXRpYyBfQ2hhclQqCisgICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0ludGVnZXIgX19iZWcsIF9JbnRlZ2VyIF9fZW5kLAorCQkJIGNvbnN0IF9BbGxvYyYgX19hLCBzdGQ6Ol9fdHJ1ZV90eXBlKQorCXsgcmV0dXJuIF9TX2NvbnN0cnVjdF9hdXhfMihzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fYmVnKSwKKwkJCQkgICAgX19lbmQsIF9fYSk7IH0KKworICAgICAgc3RhdGljIF9DaGFyVCoKKyAgICAgIF9TX2NvbnN0cnVjdF9hdXhfMihzaXplX3R5cGUgX19yZXEsIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKQorICAgICAgeyByZXR1cm4gX1NfY29uc3RydWN0KF9fcmVxLCBfX2MsIF9fYSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlcmF0b3I+CisgICAgICAgIHN0YXRpYyBfQ2hhclQqCisgICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyYXRvciBfX2JlZywgX0luSXRlcmF0b3IgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQorCXsKKwkgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpfX2lzX2ludGVnZXI8X0luSXRlcmF0b3I+OjpfX3R5cGUgX0ludGVncmFsOworCSAgcmV0dXJuIF9TX2NvbnN0cnVjdF9hdXgoX19iZWcsIF9fZW5kLCBfX2EsIF9JbnRlZ3JhbCgpKTsKKyAgICAgICAgfQorCisgICAgICAvLyBGb3IgSW5wdXQgSXRlcmF0b3JzLCB1c2VkIGluIGlzdHJlYW1idWZfaXRlcmF0b3JzLCBldGMuCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyYXRvcj4KKyAgICAgICAgc3RhdGljIF9DaGFyVCoKKyAgICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyYXRvciBfX2JlZywgX0luSXRlcmF0b3IgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAorCQkgICAgICBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZyk7CisgICAgICAKKyAgICAgIC8vIEZvciBmb3J3YXJkX2l0ZXJhdG9ycyB1cCB0byByYW5kb21fYWNjZXNzX2l0ZXJhdG9ycywgdXNlZCBmb3IKKyAgICAgIC8vIHN0cmluZzo6aXRlcmF0b3IsIF9DaGFyVCosIGV0Yy4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gd2RJdGVyYXRvcj4KKyAgICAgICAgc3RhdGljIF9DaGFyVCoKKyAgICAgICAgX1NfY29uc3RydWN0KF9Gd2RJdGVyYXRvciBfX2JlZywgX0Z3ZEl0ZXJhdG9yIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKKwkJICAgICBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnKTsKKworICAgICAgc3RhdGljIF9DaGFyVCoKKyAgICAgIF9TX2NvbnN0cnVjdChzaXplX3R5cGUgX19yZXEsIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKTsKKworICAgIHB1YmxpYzoKKyAgICAgIHNpemVfdHlwZQorICAgICAgX01fbWF4X3NpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gc2l6ZV90eXBlKF9TX21heF9zaXplKTsgfQorCisgICAgICBfQ2hhclQqCisgICAgICBfTV9kYXRhKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2RhdGFwbHVzLl9NX3A7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBfTV9sZW5ndGgoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcmVwKCktPl9NX2luZm8uX01fbGVuZ3RoOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgX01fY2FwYWNpdHkoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcmVwKCktPl9NX2luZm8uX01fY2FwYWNpdHk7IH0KKworICAgICAgYm9vbAorICAgICAgX01faXNfc2hhcmVkKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9pbmZvLl9NX3JlZmNvdW50ID4gMDsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9zZXRfbGVha2VkKCkKKyAgICAgIHsgX01fcmVwKCktPl9NX2luZm8uX01fcmVmY291bnQgPSAtMTsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9sZWFrKCkgICAgLy8gZm9yIHVzZSBpbiBiZWdpbigpICYgbm9uLWNvbnN0IG9wW10KKyAgICAgIHsKKwlpZiAoIV9NX2lzX2xlYWtlZCgpKQorCSAgX01fbGVha19oYXJkKCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3NldF9sZW5ndGgoc2l6ZV90eXBlIF9fbikKKyAgICAgIHsgX01fcmVwKCktPl9NX3NldF9sZW5ndGgoX19uKTsgfQorCisgICAgICBfX3JjX3N0cmluZ19iYXNlKCkKKyAgICAgIDogX01fZGF0YXBsdXMoX1NfZW1wdHlfcmVwLl9NX3JlZmNvcHkoKSkgeyB9CisKKyAgICAgIF9fcmNfc3RyaW5nX2Jhc2UoY29uc3QgX0FsbG9jJiBfX2EpOworCisgICAgICBfX3JjX3N0cmluZ19iYXNlKGNvbnN0IF9fcmNfc3RyaW5nX2Jhc2UmIF9fcmNzKTsKKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBfX3JjX3N0cmluZ19iYXNlKF9fcmNfc3RyaW5nX2Jhc2UmJiBfX3JjcykKKyAgICAgIDogX01fZGF0YXBsdXMoX19yY3MuX01fZGF0YXBsdXMpCisgICAgICB7IF9fcmNzLl9NX2RhdGEoX1NfZW1wdHlfcmVwLl9NX3JlZmNvcHkoKSk7IH0KKyNlbmRpZgorCisgICAgICBfX3JjX3N0cmluZ19iYXNlKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIF9fcmNfc3RyaW5nX2Jhc2UoX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kLAorCQkJIGNvbnN0IF9BbGxvYyYgX19hKTsKKworICAgICAgfl9fcmNfc3RyaW5nX2Jhc2UoKQorICAgICAgeyBfTV9kaXNwb3NlKCk7IH0gICAgICAKKworICAgICAgYWxsb2NhdG9yX3R5cGUmCisgICAgICBfTV9nZXRfYWxsb2NhdG9yKCkKKyAgICAgIHsgcmV0dXJuIF9NX2RhdGFwbHVzOyB9CisKKyAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJgorICAgICAgX01fZ2V0X2FsbG9jYXRvcigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9kYXRhcGx1czsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9zd2FwKF9fcmNfc3RyaW5nX2Jhc2UmIF9fcmNzKTsKKworICAgICAgdm9pZAorICAgICAgX01fYXNzaWduKGNvbnN0IF9fcmNfc3RyaW5nX2Jhc2UmIF9fcmNzKTsKKworICAgICAgdm9pZAorICAgICAgX01fcmVzZXJ2ZShzaXplX3R5cGUgX19yZXMpOworCisgICAgICB2b2lkCisgICAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBjb25zdCBfQ2hhclQqIF9fcywKKwkJc2l6ZV90eXBlIF9fbGVuMik7CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIF9NX2VyYXNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbik7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2NsZWFyKCkKKyAgICAgIHsgX01fZXJhc2Uoc2l6ZV90eXBlKDApLCBfTV9sZW5ndGgoKSk7IH0KKworICAgICAgYm9vbAorICAgICAgX01fY29tcGFyZShjb25zdCBfX3JjX3N0cmluZ19iYXNlJikgY29uc3QKKyAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBfX3JjX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcF9lbXB0eQorICAgIF9fcmNfc3RyaW5nX2Jhc2U8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfU19lbXB0eV9yZXA7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgX19yY19zdHJpbmdfYmFzZTxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXAqCisgICAgX19yY19zdHJpbmdfYmFzZTxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgorICAgIF9TX2NyZWF0ZShzaXplX3R5cGUgX19jYXBhY2l0eSwgc2l6ZV90eXBlIF9fb2xkX2NhcGFjaXR5LAorCSAgICAgIGNvbnN0IF9BbGxvYyYgX19hbGxvYykKKyAgICB7CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA4My4gIFN0cmluZzo6bnBvcyB2cy4gc3RyaW5nOjptYXhfc2l6ZSgpCisgICAgICBpZiAoX19jYXBhY2l0eSA+IHNpemVfdHlwZShfU19tYXhfc2l6ZSkpCisJc3RkOjpfX3Rocm93X2xlbmd0aF9lcnJvcihfX04oIl9fcmNfc3RyaW5nX2Jhc2U6Ol9SZXA6Ol9TX2NyZWF0ZSIpKTsKKworICAgICAgLy8gVGhlIHN0YW5kYXJkIHBsYWNlcyBubyByZXN0cmljdGlvbiBvbiBhbGxvY2F0aW5nIG1vcmUgbWVtb3J5CisgICAgICAvLyB0aGFuIGlzIHN0cmljdGx5IG5lZWRlZCB3aXRoaW4gdGhpcyBsYXllciBhdCB0aGUgbW9tZW50IG9yIGFzCisgICAgICAvLyByZXF1ZXN0ZWQgYnkgYW4gZXhwbGljaXQgYXBwbGljYXRpb24gY2FsbCB0byByZXNlcnZlKCkuCisKKyAgICAgIC8vIE1hbnkgbWFsbG9jIGltcGxlbWVudGF0aW9ucyBwZXJmb3JtIHF1aXRlIHBvb3JseSB3aGVuIGFuCisgICAgICAvLyBhcHBsaWNhdGlvbiBhdHRlbXB0cyB0byBhbGxvY2F0ZSBtZW1vcnkgaW4gYSBzdGVwd2lzZSBmYXNoaW9uCisgICAgICAvLyBncm93aW5nIGVhY2ggYWxsb2NhdGlvbiBzaXplIGJ5IG9ubHkgMSBjaGFyLiAgQWRkaXRpb25hbGx5LAorICAgICAgLy8gaXQgbWFrZXMgbGl0dGxlIHNlbnNlIHRvIGFsbG9jYXRlIGxlc3MgbGluZWFyIG1lbW9yeSB0aGFuIHRoZQorICAgICAgLy8gbmF0dXJhbCBibG9ja2luZyBzaXplIG9mIHRoZSBtYWxsb2MgaW1wbGVtZW50YXRpb24uCisgICAgICAvLyBVbmZvcnR1bmF0ZWx5LCB3ZSB3b3VsZCBuZWVkIGEgc29tZXdoYXQgbG93LWxldmVsIGNhbGN1bGF0aW9uCisgICAgICAvLyB3aXRoIHR1bmVkIHBhcmFtZXRlcnMgdG8gZ2V0IHRoaXMgcGVyZmVjdCBmb3IgYW55IHBhcnRpY3VsYXIKKyAgICAgIC8vIG1hbGxvYyBpbXBsZW1lbnRhdGlvbi4gIEZvcnR1bmF0ZWx5LCBnZW5lcmFsaXphdGlvbnMgYWJvdXQKKyAgICAgIC8vIGNvbW1vbiBmZWF0dXJlcyBzZWVuIGFtb25nIGltcGxlbWVudGF0aW9ucyBzZWVtcyB0byBzdWZmaWNlLgorCisgICAgICAvLyBfX3BhZ2VzaXplIG5lZWQgbm90IG1hdGNoIHRoZSBhY3R1YWwgVk0gcGFnZSBzaXplIGZvciBnb29kCisgICAgICAvLyByZXN1bHRzIGluIHByYWN0aWNlLCB0aHVzIHdlIHBpY2sgYSBjb21tb24gdmFsdWUgb24gdGhlIGxvdworICAgICAgLy8gc2lkZS4gIF9fbWFsbG9jX2hlYWRlcl9zaXplIGlzIGFuIGVzdGltYXRlIG9mIHRoZSBhbW91bnQgb2YKKyAgICAgIC8vIG92ZXJoZWFkIHBlciBtZW1vcnkgYWxsb2NhdGlvbiAoaW4gcHJhY3RpY2Ugc2VlbiBOICogc2l6ZW9mCisgICAgICAvLyAodm9pZCopIHdoZXJlIE4gaXMgMCwgMiBvciA0KS4gIEFjY29yZGluZyB0byBmb2xrbG9yZSwKKyAgICAgIC8vIHBpY2tpbmcgdGhpcyB2YWx1ZSBvbiB0aGUgaGlnaCBzaWRlIGlzIGJldHRlciB0aGFuCisgICAgICAvLyBsb3ctYmFsbGluZyBpdCAoZXNwZWNpYWxseSB3aGVuIHRoaXMgYWxnb3JpdGhtIGlzIHVzZWQgd2l0aAorICAgICAgLy8gbWFsbG9jIGltcGxlbWVudGF0aW9ucyB0aGF0IGFsbG9jYXRlIG1lbW9yeSBibG9ja3Mgcm91bmRlZCB1cAorICAgICAgLy8gdG8gYSBzaXplIHdoaWNoIGlzIGEgcG93ZXIgb2YgMikuCisgICAgICBjb25zdCBzaXplX3R5cGUgX19wYWdlc2l6ZSA9IDQwOTY7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19tYWxsb2NfaGVhZGVyX3NpemUgPSA0ICogc2l6ZW9mKHZvaWQqKTsKKworICAgICAgLy8gVGhlIGJlbG93IGltcGxlbWVudHMgYW4gZXhwb25lbnRpYWwgZ3Jvd3RoIHBvbGljeSwgbmVjZXNzYXJ5IHRvCisgICAgICAvLyBtZWV0IGFtb3J0aXplZCBsaW5lYXIgdGltZSByZXF1aXJlbWVudHMgb2YgdGhlIGxpYnJhcnk6IHNlZQorICAgICAgLy8gaHR0cDovL2djYy5nbnUub3JnL21sL2xpYnN0ZGMrKy8yMDAxLTA3L21zZzAwMDg1Lmh0bWwuCisgICAgICBpZiAoX19jYXBhY2l0eSA+IF9fb2xkX2NhcGFjaXR5ICYmIF9fY2FwYWNpdHkgPCAyICogX19vbGRfY2FwYWNpdHkpCisJeworCSAgX19jYXBhY2l0eSA9IDIgKiBfX29sZF9jYXBhY2l0eTsKKwkgIC8vIE5ldmVyIGFsbG9jYXRlIGEgc3RyaW5nIGJpZ2dlciB0aGFuIF9TX21heF9zaXplLgorCSAgaWYgKF9fY2FwYWNpdHkgPiBzaXplX3R5cGUoX1NfbWF4X3NpemUpKQorCSAgICBfX2NhcGFjaXR5ID0gc2l6ZV90eXBlKF9TX21heF9zaXplKTsKKwl9CisKKyAgICAgIC8vIE5COiBOZWVkIGFuIGFycmF5IG9mIGNoYXJfdHlwZVtfX2NhcGFjaXR5XSwgcGx1cyBhIHRlcm1pbmF0aW5nCisgICAgICAvLyBudWxsIGNoYXJfdHlwZSgpIGVsZW1lbnQsIHBsdXMgZW5vdWdoIGZvciB0aGUgX1JlcCBkYXRhIHN0cnVjdHVyZSwKKyAgICAgIC8vIHBsdXMgc2l6ZW9mKF9SZXApIC0gMSB0byB1cHBlciByb3VuZCB0byBhIHNpemUgbXVsdGlwbGUgb2YKKyAgICAgIC8vIHNpemVvZihfUmVwKS4KKyAgICAgIC8vIFdoZXcuIFNlZW1pbmdseSBzbyBuZWVkeSwgeWV0IHNvIGVsZW1lbnRhbC4KKyAgICAgIHNpemVfdHlwZSBfX3NpemUgPSAoKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpCisJCQkgICsgMiAqIHNpemVvZihfUmVwKSAtIDEpOworCisgICAgICBjb25zdCBzaXplX3R5cGUgX19hZGpfc2l6ZSA9IF9fc2l6ZSArIF9fbWFsbG9jX2hlYWRlcl9zaXplOworICAgICAgaWYgKF9fYWRqX3NpemUgPiBfX3BhZ2VzaXplICYmIF9fY2FwYWNpdHkgPiBfX29sZF9jYXBhY2l0eSkKKwl7CisJICBjb25zdCBzaXplX3R5cGUgX19leHRyYSA9IF9fcGFnZXNpemUgLSBfX2Fkal9zaXplICUgX19wYWdlc2l6ZTsKKwkgIF9fY2FwYWNpdHkgKz0gX19leHRyYSAvIHNpemVvZihfQ2hhclQpOworCSAgaWYgKF9fY2FwYWNpdHkgPiBzaXplX3R5cGUoX1NfbWF4X3NpemUpKQorCSAgICBfX2NhcGFjaXR5ID0gc2l6ZV90eXBlKF9TX21heF9zaXplKTsKKwkgIF9fc2l6ZSA9IChfX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKSArIDIgKiBzaXplb2YoX1JlcCkgLSAxOworCX0KKworICAgICAgLy8gTkI6IE1pZ2h0IHRocm93LCBidXQgbm8gd29ycmllcyBhYm91dCBhIGxlYWssIG1hdGU6IF9SZXAoKQorICAgICAgLy8gZG9lcyBub3QgdGhyb3cuCisgICAgICBfUmVwKiBfX3BsYWNlID0gX1JlcF9hbGxvY190eXBlKF9fYWxsb2MpLmFsbG9jYXRlKF9fc2l6ZSAvIHNpemVvZihfUmVwKSk7CisgICAgICBfUmVwKiBfX3AgPSBuZXcgKF9fcGxhY2UpIF9SZXA7CisgICAgICBfX3AtPl9NX2luZm8uX01fY2FwYWNpdHkgPSBfX2NhcGFjaXR5OworICAgICAgcmV0dXJuIF9fcDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIF9fcmNfc3RyaW5nX2Jhc2U8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKKyAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYgX19hKSB0aHJvdyAoKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSAoKF9NX2luZm8uX01fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpCisJCQkJKyAyICogc2l6ZW9mKF9SZXApIC0gMSk7CisgICAgICBfUmVwX2FsbG9jX3R5cGUoX19hKS5kZWFsbG9jYXRlKHRoaXMsIF9fc2l6ZSAvIHNpemVvZihfUmVwKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIF9DaGFyVCoKKyAgICBfX3JjX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CisgICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiBfX2FsbG9jLCBzaXplX3R5cGUgX19yZXMpCisgICAgeworICAgICAgLy8gUmVxdWVzdGVkIGNhcGFjaXR5IG9mIHRoZSBjbG9uZS4KKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3JlcXVlc3RlZF9jYXAgPSBfTV9pbmZvLl9NX2xlbmd0aCArIF9fcmVzOworICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fcmVxdWVzdGVkX2NhcCwgX01faW5mby5fTV9jYXBhY2l0eSwKKwkJCQkgIF9fYWxsb2MpOworCisgICAgICBpZiAoX01faW5mby5fTV9sZW5ndGgpCisJX1NfY29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fcmVmZGF0YSgpLCBfTV9pbmZvLl9NX2xlbmd0aCk7CisKKyAgICAgIF9fci0+X01fc2V0X2xlbmd0aChfTV9pbmZvLl9NX2xlbmd0aCk7CisgICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIF9fcmNfc3RyaW5nX2Jhc2U8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBfX3JjX3N0cmluZ19iYXNlKGNvbnN0IF9BbGxvYyYgX19hKQorICAgIDogX01fZGF0YXBsdXMoX19hLCBfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlKCksIF9DaGFyVCgpLCBfX2EpKSB7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBfX3JjX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgX19yY19zdHJpbmdfYmFzZShjb25zdCBfX3JjX3N0cmluZ19iYXNlJiBfX3JjcykKKyAgICA6IF9NX2RhdGFwbHVzKF9fcmNzLl9NX2dldF9hbGxvY2F0b3IoKSwKKwkJICBfX3Jjcy5fTV9ncmFiKF9fcmNzLl9NX2dldF9hbGxvY2F0b3IoKSkpIHsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIF9fcmNfc3RyaW5nX2Jhc2U8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBfX3JjX3N0cmluZ19iYXNlKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKQorICAgIDogX01fZGF0YXBsdXMoX19hLCBfU19jb25zdHJ1Y3QoX19uLCBfX2MsIF9fYSkpIHsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgIF9fcmNfc3RyaW5nX2Jhc2U8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBfX3JjX3N0cmluZ19iYXNlKF9JbnB1dEl0ZXJhdG9yIF9fYmVnLCBfSW5wdXRJdGVyYXRvciBfX2VuZCwKKwkJICAgICBjb25zdCBfQWxsb2MmIF9fYSkKKyAgICA6IF9NX2RhdGFwbHVzKF9fYSwgX1NfY29uc3RydWN0KF9fYmVnLCBfX2VuZCwgX19hKSkgeyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIF9fcmNfc3RyaW5nX2Jhc2U8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBfTV9sZWFrX2hhcmQoKQorICAgIHsKKyAgICAgIGlmIChfTV9pc19zaGFyZWQoKSkKKwlfTV9lcmFzZSgwLCAwKTsKKyAgICAgIF9NX3NldF9sZWFrZWQoKTsKKyAgICB9CisKKyAgLy8gTkI6IFRoaXMgaXMgdGhlIHNwZWNpYWwgY2FzZSBmb3IgSW5wdXQgSXRlcmF0b3JzLCB1c2VkIGluCisgIC8vIGlzdHJlYW1idWZfaXRlcmF0b3JzLCBldGMuCisgIC8vIElucHV0IEl0ZXJhdG9ycyBoYXZlIGEgY29zdCBzdHJ1Y3R1cmUgdmVyeSBkaWZmZXJlbnQgZnJvbQorICAvLyBwb2ludGVycywgY2FsbGluZyBmb3IgYSBkaWZmZXJlbnQgY29kaW5nIHN0eWxlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyYXRvcj4KKyAgICAgIF9DaGFyVCoKKyAgICAgIF9fcmNfc3RyaW5nX2Jhc2U8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyYXRvciBfX2JlZywgX0luSXRlcmF0b3IgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAorCQkgICBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZykKKyAgICAgIHsKKwlpZiAoX19iZWcgPT0gX19lbmQgJiYgX19hID09IF9BbGxvYygpKQorCSAgcmV0dXJuIF9TX2VtcHR5X3JlcC5fTV9yZWZjb3B5KCk7CisKKwkvLyBBdm9pZCByZWFsbG9jYXRpb24gZm9yIGNvbW1vbiBjYXNlLgorCV9DaGFyVCBfX2J1ZlsxMjhdOworCXNpemVfdHlwZSBfX2xlbiA9IDA7CisJd2hpbGUgKF9fYmVnICE9IF9fZW5kICYmIF9fbGVuIDwgc2l6ZW9mKF9fYnVmKSAvIHNpemVvZihfQ2hhclQpKQorCSAgeworCSAgICBfX2J1ZltfX2xlbisrXSA9ICpfX2JlZzsKKwkgICAgKytfX2JlZzsKKwkgIH0KKwlfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19sZW4sIHNpemVfdHlwZSgwKSwgX19hKTsKKwlfU19jb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfX2J1ZiwgX19sZW4pOworCV9fdHJ5CisJICB7CisJICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCkKKwkgICAgICB7CisJCWlmIChfX2xlbiA9PSBfX3ItPl9NX2luZm8uX01fY2FwYWNpdHkpCisJCSAgeworCQkgICAgLy8gQWxsb2NhdGUgbW9yZSBzcGFjZS4KKwkJICAgIF9SZXAqIF9fYW5vdGhlciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiArIDEsIF9fbGVuLCBfX2EpOworCQkgICAgX1NfY29weShfX2Fub3RoZXItPl9NX3JlZmRhdGEoKSwgX19yLT5fTV9yZWZkYXRhKCksIF9fbGVuKTsKKwkJICAgIF9fci0+X01fZGVzdHJveShfX2EpOworCQkgICAgX19yID0gX19hbm90aGVyOworCQkgIH0KKwkJX19yLT5fTV9yZWZkYXRhKClbX19sZW4rK10gPSAqX19iZWc7CisJCSsrX19iZWc7CisJICAgICAgfQorCSAgfQorCV9fY2F0Y2goLi4uKQorCSAgeworCSAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKKwkgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICB9CisJX19yLT5fTV9zZXRfbGVuZ3RoKF9fbGVuKTsKKwlyZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlcmF0b3I+CisgICAgICBfQ2hhclQqCisgICAgICBfX3JjX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlcmF0b3IgX19iZWcsIF9Jbkl0ZXJhdG9yIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKKwkJICAgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZykKKyAgICAgIHsKKwlpZiAoX19iZWcgPT0gX19lbmQgJiYgX19hID09IF9BbGxvYygpKQorCSAgcmV0dXJuIF9TX2VtcHR5X3JlcC5fTV9yZWZjb3B5KCk7CisKKwkvLyBOQjogTm90IHJlcXVpcmVkLCBidXQgY29uc2lkZXJlZCBiZXN0IHByYWN0aWNlLgorCWlmIChfX2lzX251bGxfcG9pbnRlcihfX2JlZykgJiYgX19iZWcgIT0gX19lbmQpCisJICBzdGQ6Ol9fdGhyb3dfbG9naWNfZXJyb3IoX19OKCJfX3JjX3N0cmluZ19iYXNlOjoiCisJCQkJICAgICAgICJfU19jb25zdHJ1Y3QgTlVMTCBub3QgdmFsaWQiKSk7CisKKwljb25zdCBzaXplX3R5cGUgX19kbmV3ID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihzdGQ6OmRpc3RhbmNlKF9fYmVnLAorCQkJCQkJCQkgICAgICBfX2VuZCkpOworCS8vIENoZWNrIGZvciBvdXRfb2ZfcmFuZ2UgYW5kIGxlbmd0aF9lcnJvciBleGNlcHRpb25zLgorCV9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2RuZXcsIHNpemVfdHlwZSgwKSwgX19hKTsKKwlfX3RyeQorCSAgeyBfU19jb3B5X2NoYXJzKF9fci0+X01fcmVmZGF0YSgpLCBfX2JlZywgX19lbmQpOyB9CisJX19jYXRjaCguLi4pCisJICB7CisJICAgIF9fci0+X01fZGVzdHJveShfX2EpOworCSAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgIH0KKwlfX3ItPl9NX3NldF9sZW5ndGgoX19kbmV3KTsKKwlyZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgX0NoYXJUKgorICAgIF9fcmNfc3RyaW5nX2Jhc2U8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCisgICAgeworICAgICAgaWYgKF9fbiA9PSAwICYmIF9fYSA9PSBfQWxsb2MoKSkKKwlyZXR1cm4gX1NfZW1wdHlfcmVwLl9NX3JlZmNvcHkoKTsKKworICAgICAgLy8gQ2hlY2sgZm9yIG91dF9vZl9yYW5nZSBhbmQgbGVuZ3RoX2Vycm9yIGV4Y2VwdGlvbnMuCisgICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uLCBzaXplX3R5cGUoMCksIF9fYSk7CisgICAgICBpZiAoX19uKQorCV9TX2Fzc2lnbihfX3ItPl9NX3JlZmRhdGEoKSwgX19uLCBfX2MpOworCisgICAgICBfX3ItPl9NX3NldF9sZW5ndGgoX19uKTsKKyAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIF9fcmNfc3RyaW5nX2Jhc2U8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBfTV9zd2FwKF9fcmNfc3RyaW5nX2Jhc2UmIF9fcmNzKQorICAgIHsKKyAgICAgIGlmIChfTV9pc19sZWFrZWQoKSkKKwlfTV9zZXRfc2hhcmFibGUoKTsKKyAgICAgIGlmIChfX3Jjcy5fTV9pc19sZWFrZWQoKSkKKwlfX3Jjcy5fTV9zZXRfc2hhcmFibGUoKTsKKyAgICAgIAorICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX2RhdGEoKTsKKyAgICAgIF9NX2RhdGEoX19yY3MuX01fZGF0YSgpKTsKKyAgICAgIF9fcmNzLl9NX2RhdGEoX190bXApOworCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA0MzEuIFN3YXBwaW5nIGNvbnRhaW5lcnMgd2l0aCB1bmVxdWFsIGFsbG9jYXRvcnMuCisgICAgICBzdGQ6Ol9fYWxsb2Nfc3dhcDxhbGxvY2F0b3JfdHlwZT46Ol9TX2RvX2l0KF9NX2dldF9hbGxvY2F0b3IoKSwKKwkJCQkJCSAgX19yY3MuX01fZ2V0X2FsbG9jYXRvcigpKTsKKyAgICB9IAorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBfX3JjX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgX01fYXNzaWduKGNvbnN0IF9fcmNfc3RyaW5nX2Jhc2UmIF9fcmNzKQorICAgIHsKKyAgICAgIGlmIChfTV9yZXAoKSAhPSBfX3Jjcy5fTV9yZXAoKSkKKwl7CisJICBfQ2hhclQqIF9fdG1wID0gX19yY3MuX01fZ3JhYihfTV9nZXRfYWxsb2NhdG9yKCkpOworCSAgX01fZGlzcG9zZSgpOworCSAgX01fZGF0YShfX3RtcCk7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgX19yY19zdHJpbmdfYmFzZTxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIF9NX3Jlc2VydmUoc2l6ZV90eXBlIF9fcmVzKQorICAgIHsKKyAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBzaHJpbmsgYmVsb3cgdGhlIGN1cnJlbnQgc2l6ZS4KKyAgICAgIGlmIChfX3JlcyA8IF9NX2xlbmd0aCgpKQorCV9fcmVzID0gX01fbGVuZ3RoKCk7CisgICAgICAKKyAgICAgIGlmIChfX3JlcyAhPSBfTV9jYXBhY2l0eSgpIHx8IF9NX2lzX3NoYXJlZCgpKQorCXsKKwkgIF9DaGFyVCogX190bXAgPSBfTV9yZXAoKS0+X01fY2xvbmUoX01fZ2V0X2FsbG9jYXRvcigpLAorCQkJCQkgICAgIF9fcmVzIC0gX01fbGVuZ3RoKCkpOworCSAgX01fZGlzcG9zZSgpOworCSAgX01fZGF0YShfX3RtcCk7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgX19yY19zdHJpbmdfYmFzZTxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIF9NX211dGF0ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIGNvbnN0IF9DaGFyVCogX19zLAorCSAgICAgIHNpemVfdHlwZSBfX2xlbjIpCisgICAgeworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9faG93X211Y2ggPSBfTV9sZW5ndGgoKSAtIF9fcG9zIC0gX19sZW4xOworICAgICAgCisgICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX01fbGVuZ3RoKCkgKyBfX2xlbjIgLSBfX2xlbjEsCisJCQkJICBfTV9jYXBhY2l0eSgpLCBfTV9nZXRfYWxsb2NhdG9yKCkpOworICAgICAgCisgICAgICBpZiAoX19wb3MpCisJX1NfY29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fZGF0YSgpLCBfX3Bvcyk7CisgICAgICBpZiAoX19zICYmIF9fbGVuMikKKwlfU19jb3B5KF9fci0+X01fcmVmZGF0YSgpICsgX19wb3MsIF9fcywgX19sZW4yKTsKKyAgICAgIGlmIChfX2hvd19tdWNoKQorCV9TX2NvcHkoX19yLT5fTV9yZWZkYXRhKCkgKyBfX3BvcyArIF9fbGVuMiwKKwkJX01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjEsIF9faG93X211Y2gpOworICAgICAgCisgICAgICBfTV9kaXNwb3NlKCk7CisgICAgICBfTV9kYXRhKF9fci0+X01fcmVmZGF0YSgpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIF9fcmNfc3RyaW5nX2Jhc2U8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBfTV9lcmFzZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3X3NpemUgPSBfTV9sZW5ndGgoKSAtIF9fbjsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2hvd19tdWNoID0gX01fbGVuZ3RoKCkgLSBfX3BvcyAtIF9fbjsKKyAgICAgIAorICAgICAgaWYgKF9NX2lzX3NoYXJlZCgpKQorCXsKKwkgIC8vIE11c3QgcmVhbGxvY2F0ZS4KKwkgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplLCBfTV9jYXBhY2l0eSgpLAorCQkJCSAgICAgIF9NX2dldF9hbGxvY2F0b3IoKSk7CisKKwkgIGlmIChfX3BvcykKKwkgICAgX1NfY29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fZGF0YSgpLCBfX3Bvcyk7CisJICBpZiAoX19ob3dfbXVjaCkKKwkgICAgX1NfY29weShfX3ItPl9NX3JlZmRhdGEoKSArIF9fcG9zLAorCQkgICAgX01fZGF0YSgpICsgX19wb3MgKyBfX24sIF9faG93X211Y2gpOworCisJICBfTV9kaXNwb3NlKCk7CisJICBfTV9kYXRhKF9fci0+X01fcmVmZGF0YSgpKTsKKwl9CisgICAgICBlbHNlIGlmIChfX2hvd19tdWNoICYmIF9fbikKKwl7CisJICAvLyBXb3JrIGluLXBsYWNlLgorCSAgX1NfbW92ZShfTV9kYXRhKCkgKyBfX3BvcywKKwkJICBfTV9kYXRhKCkgKyBfX3BvcyArIF9fbiwgX19ob3dfbXVjaCk7CisJfQorCisgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlbmd0aChfX25ld19zaXplKTsgICAgICAKKyAgICB9CisKKyAgdGVtcGxhdGU8PgorICAgIGlubGluZSBib29sCisgICAgX19yY19zdHJpbmdfYmFzZTxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LAorCQkgICAgIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID46OgorICAgIF9NX2NvbXBhcmUoY29uc3QgX19yY19zdHJpbmdfYmFzZSYgX19yY3MpIGNvbnN0CisgICAgeworICAgICAgaWYgKF9NX3JlcCgpID09IF9fcmNzLl9NX3JlcCgpKQorCXJldHVybiB0cnVlOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIHRlbXBsYXRlPD4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9fcmNfc3RyaW5nX2Jhc2U8d2NoYXJfdCwgc3RkOjpjaGFyX3RyYWl0czx3Y2hhcl90PiwKKwkJICAgICBzdGQ6OmFsbG9jYXRvcjx3Y2hhcl90PiA+OjoKKyAgICBfTV9jb21wYXJlKGNvbnN0IF9fcmNfc3RyaW5nX2Jhc2UmIF9fcmNzKSBjb25zdAorICAgIHsKKyAgICAgIGlmIChfTV9yZXAoKSA9PSBfX3Jjcy5fTV9yZXAoKSkKKwlyZXR1cm4gdHJ1ZTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisjZW5kaWYKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYgLyogX1JDX1NUUklOR19CQVNFX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3JvcGUgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9yb3BlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MmM4ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9yb3BlCkBAIC0wLDAgKzEsMjk1OCBAQAorLy8gU0dJJ3Mgcm9wZSBjbGFzcyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBleHQvcm9wZQorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IChwb3NzaWJseQorICogIGNvbnRhaW5pbmcgZXh0ZW5zaW9ucyBmcm9tIHRoZSBIUC9TR0kgU1RMIHN1YnNldCkuIAorICovCisKKyNpZm5kZWYgX1JPUEUKKyNkZWZpbmUgX1JPUEUgMQorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9jb25zdHJ1Y3QuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF91bmluaXRpYWxpemVkLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfZnVuY3Rpb24uaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9udW1lcmljLmg+CisjaW5jbHVkZSA8Yml0cy9hbGxvY2F0b3IuaD4KKyNpbmNsdWRlIDxiaXRzL2d0aHIuaD4KKyNpbmNsdWRlIDx0cjEvZnVuY3Rpb25hbD4KKworIyBpZmRlZiBfX0dDCisjICAgZGVmaW5lIF9fR0NfQ09OU1QgY29uc3QKKyMgZWxzZQorIyAgIGRlZmluZSBfX0dDX0NPTlNUICAgLy8gY29uc3RhbnQgZXhjZXB0IGZvciBkZWFsbG9jYXRpb24KKyMgZW5kaWYKKworI2luY2x1ZGUgPGV4dC9tZW1vcnk+IC8vIEZvciB1bmluaXRpYWxpemVkX2NvcHlfbgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorCisgIG5hbWVzcGFjZSBfX2RldGFpbAorICB7CisgICAgZW51bSB7IF9TX21heF9yb3BlX2RlcHRoID0gNDUgfTsKKyAgICBlbnVtIF9UYWcge19TX2xlYWYsIF9TX2NvbmNhdCwgX1Nfc3Vic3RyaW5nZm4sIF9TX2Z1bmN0aW9ufTsKKyAgfSAvLyBuYW1lc3BhY2UgX19kZXRhaWwKKworICB1c2luZyBzdGQ6OnNpemVfdDsKKyAgdXNpbmcgc3RkOjpwdHJkaWZmX3Q7CisgIHVzaW5nIHN0ZDo6YWxsb2NhdG9yOworICB1c2luZyBzdGQ6Ol9EZXN0cm95OworCisgIC8vIFNlZSBsaWJzdGRjKysvMzY4MzIuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgdm9pZAorICAgIF9EZXN0cm95X2NvbnN0KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKKwkJICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9BbGxvY2F0b3IgX19hbGxvYykKKyAgICB7CisgICAgICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwlfX2FsbG9jLmRlc3Ryb3koJipfX2ZpcnN0KTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX0Rlc3Ryb3lfY29uc3QoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAorCQkgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgYWxsb2NhdG9yPF9UcD4pCisgICAgeyBfRGVzdHJveShfX2ZpcnN0LCBfX2xhc3QpOyB9CisKKyAgLy8gVGhlIF9TX2VvcyBmdW5jdGlvbiBpcyB1c2VkIGZvciB0aG9zZSBmdW5jdGlvbnMgdGhhdAorICAvLyBjb252ZXJ0IHRvL2Zyb20gQy1saWtlIHN0cmluZ3MgdG8gZGV0ZWN0IHRoZSBlbmQgb2YgdGhlIHN0cmluZy4KKyAgCisgIC8vIFRoZSBlbmQtb2YtQy1zdHJpbmcgY2hhcmFjdGVyLgorICAvLyBUaGlzIGlzIHdoYXQgdGhlIGRyYWZ0IHN0YW5kYXJkIHNheXMgaXQgc2hvdWxkIGJlLgorICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJUPgorICAgIGlubGluZSBfQ2hhclQKKyAgICBfU19lb3MoX0NoYXJUKikKKyAgICB7IHJldHVybiBfQ2hhclQoKTsgfQorCisgIC8vIFRlc3QgZm9yIGJhc2ljIGNoYXJhY3RlciB0eXBlcy4KKyAgLy8gRm9yIGJhc2ljIGNoYXJhY3RlciB0eXBlcyBsZWF2ZXMgaGF2aW5nIGEgdHJhaWxpbmcgZW9zLgorICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJUPgorICAgIGlubGluZSBib29sCisgICAgX1NfaXNfYmFzaWNfY2hhcl90eXBlKF9DaGFyVCopCisgICAgeyByZXR1cm4gZmFsc2U7IH0KKyAgCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQ+CisgICAgaW5saW5lIGJvb2wKKyAgICBfU19pc19vbmVfYnl0ZV9jaGFyX3R5cGUoX0NoYXJUKikKKyAgICB7IHJldHVybiBmYWxzZTsgfQorCisgIGlubGluZSBib29sCisgIF9TX2lzX2Jhc2ljX2NoYXJfdHlwZShjaGFyKikKKyAgeyByZXR1cm4gdHJ1ZTsgfQorICAKKyAgaW5saW5lIGJvb2wKKyAgX1NfaXNfb25lX2J5dGVfY2hhcl90eXBlKGNoYXIqKQorICB7IHJldHVybiB0cnVlOyB9CisgIAorICBpbmxpbmUgYm9vbAorICBfU19pc19iYXNpY19jaGFyX3R5cGUod2NoYXJfdCopCisgIHsgcmV0dXJuIHRydWU7IH0KKworICAvLyBTdG9yZSBhbiBlb3MgaWZmIF9DaGFyVCBpcyBhIGJhc2ljIGNoYXJhY3RlciB0eXBlLgorICAvLyBEbyBub3QgcmVmZXJlbmNlIF9TX2VvcyBpZiBpdCBpc24ndC4KKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9TX2NvbmRfc3RvcmVfZW9zKF9DaGFyVCYpIHsgfQorCisgIGlubGluZSB2b2lkCisgIF9TX2NvbmRfc3RvcmVfZW9zKGNoYXImIF9fYykKKyAgeyBfX2MgPSAwOyB9CisKKyAgaW5saW5lIHZvaWQKKyAgX1NfY29uZF9zdG9yZV9lb3Mod2NoYXJfdCYgX19jKQorICB7IF9fYyA9IDA7IH0KKworICAvLyBjaGFyX3Byb2R1Y2VycyBhcmUgbG9naWNhbGx5IGZ1bmN0aW9ucyB0aGF0IGdlbmVyYXRlIGEgc2VjdGlvbiBvZgorICAvLyBhIHN0cmluZy4gIFRoZXNlIGNhbiBiZSBjb252ZXJ0ZWQgdG8gcm9wZXMuICBUaGUgcmVzdWx0aW5nIHJvcGUKKyAgLy8gaW52b2tlcyB0aGUgY2hhcl9wcm9kdWNlciBvbiBkZW1hbmQuICBUaGlzIGFsbG93cywgZm9yIGV4YW1wbGUsCisgIC8vIGZpbGVzIHRvIGJlIHZpZXdlZCBhcyByb3BlcyB3aXRob3V0IHJlYWRpbmcgdGhlIGVudGlyZSBmaWxlLgorICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJUPgorICAgIGNsYXNzIGNoYXJfcHJvZHVjZXIKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdmlydHVhbCB+Y2hhcl9wcm9kdWNlcigpIHsgfTsKKworICAgICAgdmlydHVhbCB2b2lkCisgICAgICBvcGVyYXRvcigpKHNpemVfdCBfX3N0YXJ0X3Bvcywgc2l6ZV90IF9fbGVuLAorCQkgX0NoYXJUKiBfX2J1ZmZlcikgPSAwOworICAgICAgLy8gQnVmZmVyIHNob3VsZCByZWFsbHkgYmUgYW4gYXJiaXRyYXJ5IG91dHB1dCBpdGVyYXRvci4KKyAgICAgIC8vIFRoYXQgd2F5IHdlIGNvdWxkIGZsYXR0ZW4gZGlyZWN0bHkgaW50byBhbiBvc3RyZWFtLCBldGMuCisgICAgICAvLyBUaGlzIGlzIHRob3JvdWdobHkgaW1wb3NzaWJsZSwgc2luY2UgaXRlcmF0b3IgdHlwZXMgZG9uJ3QKKyAgICAgIC8vIGhhdmUgcnVudGltZSBkZXNjcmlwdGlvbnMuCisgICAgfTsKKworICAvLyBTZXF1ZW5jZSBidWZmZXJzOgorICAvLworICAvLyBTZXF1ZW5jZSBtdXN0IHByb3ZpZGUgYW4gYXBwZW5kIG9wZXJhdGlvbiB0aGF0IGFwcGVuZHMgYW4KKyAgLy8gYXJyYXkgdG8gdGhlIHNlcXVlbmNlLiAgU2VxdWVuY2UgYnVmZmVycyBhcmUgdXNlZnVsIG9ubHkgaWYKKyAgLy8gYXBwZW5kaW5nIGFuIGVudGlyZSBhcnJheSBpcyBjaGVhcGVyIHRoYW4gYXBwZW5kaW5nIGVsZW1lbnQgYnkgZWxlbWVudC4KKyAgLy8gVGhpcyBpcyB0cnVlIGZvciBtYW55IHN0cmluZyByZXByZXNlbnRhdGlvbnMuCisgIC8vIFRoaXMgc2hvdWxkICBwZXJoYXBzIGluaGVyaXQgZnJvbSBvc3RyZWFtPHNlcXVlbmNlOjp2YWx1ZV90eXBlPgorICAvLyBhbmQgYmUgaW1wbGVtZW50ZWQgY29ycmVzcG9uZGluZ2x5LCBzbyB0aGF0IHRoZXkgY2FuIGJlIHVzZWQKKyAgLy8gZm9yIGZvcm1hdHRlZC4gIEZvciB0aGUgc2FrZSBvZiBwb3J0YWJpbGl0eSwgd2UgZG9uJ3QgZG8gdGhpcyB5ZXQuCisgIC8vCisgIC8vIEZvciBub3csIHNlcXVlbmNlIGJ1ZmZlcnMgYmVoYXZlIGFzIG91dHB1dCBpdGVyYXRvcnMuICBCdXQgdGhleSBhbHNvCisgIC8vIGJlaGF2ZSBhIGxpdHRsZSBsaWtlIGJhc2ljX29zdHJpbmdzdHJlYW08c2VxdWVuY2U6OnZhbHVlX3R5cGU+IGFuZCBhCisgIC8vIGxpdHRsZSBsaWtlIGNvbnRhaW5lcnMuCisKKyAgdGVtcGxhdGU8Y2xhc3MgX1NlcXVlbmNlLCBzaXplX3QgX0J1Zl9zeiA9IDEwMD4KKyAgICBjbGFzcyBzZXF1ZW5jZV9idWZmZXIKKyAgICA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfU2VxdWVuY2UqIF9NX3ByZWZpeDsKKyAgICAgIHZhbHVlX3R5cGUgX01fYnVmZmVyW19CdWZfc3pdOworICAgICAgc2l6ZV90ICAgICBfTV9idWZfY291bnQ7CisgICAgcHVibGljOgorCisgICAgICB2b2lkCisgICAgICBmbHVzaCgpCisgICAgICB7CisJX01fcHJlZml4LT5hcHBlbmQoX01fYnVmZmVyLCBfTV9idWZmZXIgKyBfTV9idWZfY291bnQpOworCV9NX2J1Zl9jb3VudCA9IDA7CisgICAgICB9CisgICAgICAKKyAgICAgIH5zZXF1ZW5jZV9idWZmZXIoKQorICAgICAgeyBmbHVzaCgpOyB9CisgICAgICAKKyAgICAgIHNlcXVlbmNlX2J1ZmZlcigpCisgICAgICA6IF9NX3ByZWZpeCgwKSwgX01fYnVmX2NvdW50KDApIHsgfQorCisgICAgICBzZXF1ZW5jZV9idWZmZXIoY29uc3Qgc2VxdWVuY2VfYnVmZmVyJiBfX3gpCisgICAgICB7CisJX01fcHJlZml4ID0gX194Ll9NX3ByZWZpeDsKKwlfTV9idWZfY291bnQgPSBfX3guX01fYnVmX2NvdW50OworCXN0ZDo6Y29weShfX3guX01fYnVmZmVyLCBfX3guX01fYnVmZmVyICsgX194Ll9NX2J1Zl9jb3VudCwgX01fYnVmZmVyKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgc2VxdWVuY2VfYnVmZmVyKHNlcXVlbmNlX2J1ZmZlciYgX194KQorICAgICAgeworCV9feC5mbHVzaCgpOworCV9NX3ByZWZpeCA9IF9feC5fTV9wcmVmaXg7CisJX01fYnVmX2NvdW50ID0gMDsKKyAgICAgIH0KKyAgICAgIAorICAgICAgc2VxdWVuY2VfYnVmZmVyKF9TZXF1ZW5jZSYgX19zKQorICAgICAgOiBfTV9wcmVmaXgoJl9fcyksIF9NX2J1Zl9jb3VudCgwKSB7IH0KKyAgICAgIAorICAgICAgc2VxdWVuY2VfYnVmZmVyJgorICAgICAgb3BlcmF0b3I9KHNlcXVlbmNlX2J1ZmZlciYgX194KQorICAgICAgeworCV9feC5mbHVzaCgpOworCV9NX3ByZWZpeCA9IF9feC5fTV9wcmVmaXg7CisJX01fYnVmX2NvdW50ID0gMDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHNlcXVlbmNlX2J1ZmZlciYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBzZXF1ZW5jZV9idWZmZXImIF9feCkKKyAgICAgIHsKKwlfTV9wcmVmaXggPSBfX3guX01fcHJlZml4OworCV9NX2J1Zl9jb3VudCA9IF9feC5fTV9idWZfY291bnQ7CisJc3RkOjpjb3B5KF9feC5fTV9idWZmZXIsIF9feC5fTV9idWZmZXIgKyBfX3guX01fYnVmX2NvdW50LCBfTV9idWZmZXIpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyAgICAgIAorICAgICAgdm9pZAorICAgICAgcHVzaF9iYWNrKHZhbHVlX3R5cGUgX194KQorICAgICAgeworCWlmIChfTV9idWZfY291bnQgPCBfQnVmX3N6KQorCSAgeworCSAgICBfTV9idWZmZXJbX01fYnVmX2NvdW50XSA9IF9feDsKKwkgICAgKytfTV9idWZfY291bnQ7CisJICB9CisJZWxzZQorCSAgeworCSAgICBmbHVzaCgpOworCSAgICBfTV9idWZmZXJbMF0gPSBfX3g7CisJICAgIF9NX2J1Zl9jb3VudCA9IDE7CisJICB9CisgICAgICB9CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIGFwcGVuZCh2YWx1ZV90eXBlKiBfX3MsIHNpemVfdCBfX2xlbikKKyAgICAgIHsKKwlpZiAoX19sZW4gKyBfTV9idWZfY291bnQgPD0gX0J1Zl9zeikKKwkgIHsKKwkgICAgc2l6ZV90IF9faSA9IF9NX2J1Zl9jb3VudDsKKwkgICAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19sZW47IF9faSsrLCBfX2orKykKKwkgICAgICBfTV9idWZmZXJbX19pXSA9IF9fc1tfX2pdOworCSAgICBfTV9idWZfY291bnQgKz0gX19sZW47CisJICB9CisJZWxzZSBpZiAoMCA9PSBfTV9idWZfY291bnQpCisJICBfTV9wcmVmaXgtPmFwcGVuZChfX3MsIF9fcyArIF9fbGVuKTsKKwllbHNlCisJICB7CisJICAgIGZsdXNoKCk7CisJICAgIGFwcGVuZChfX3MsIF9fbGVuKTsKKwkgIH0KKyAgICAgIH0KKworICAgICAgc2VxdWVuY2VfYnVmZmVyJgorICAgICAgd3JpdGUodmFsdWVfdHlwZSogX19zLCBzaXplX3QgX19sZW4pCisgICAgICB7CisJYXBwZW5kKF9fcywgX19sZW4pOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyAgICAgIAorICAgICAgc2VxdWVuY2VfYnVmZmVyJgorICAgICAgcHV0KHZhbHVlX3R5cGUgX194KQorICAgICAgeworCXB1c2hfYmFjayhfX3gpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyAgICAgIAorICAgICAgc2VxdWVuY2VfYnVmZmVyJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHZhbHVlX3R5cGUmIF9fcmhzKQorICAgICAgeworCXB1c2hfYmFjayhfX3Jocyk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorICAgICAgCisgICAgICBzZXF1ZW5jZV9idWZmZXImCisgICAgICBvcGVyYXRvciooKQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKyAgICAgIAorICAgICAgc2VxdWVuY2VfYnVmZmVyJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorICAgICAgCisgICAgICBzZXF1ZW5jZV9idWZmZXIKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKyAgICB9OworICAKKyAgLy8gVGhlIGZvbGxvd2luZyBzaG91bGQgYmUgdHJlYXRlZCBhcyBwcml2YXRlLCBhdCBsZWFzdCBmb3Igbm93LgorICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CisgICAgY2xhc3MgX1JvcGVfY2hhcl9jb25zdW1lcgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBJZiB3ZSBoYWQgbWVtYmVyIHRlbXBsYXRlcywgdGhlc2Ugc2hvdWxkIG5vdCBiZSB2aXJ0dWFsLgorICAgICAgLy8gRm9yIG5vdyB3ZSBuZWVkIHRvIHVzZSBydW4tdGltZSBwYXJhbWV0cml6YXRpb24gd2hlcmUKKyAgICAgIC8vIGNvbXBpbGUtdGltZSB3b3VsZCBkby4gIEhlbmNlIHRoaXMgc2hvdWxkIGFsbCBiZSBwcml2YXRlCisgICAgICAvLyBmb3Igbm93LgorICAgICAgLy8gVGhlIHN5bW1ldHJ5IHdpdGggY2hhcl9wcm9kdWNlciBpcyBhY2NpZGVudGFsIGFuZCB0ZW1wb3JhcnkuCisgICAgICB2aXJ0dWFsIH5fUm9wZV9jaGFyX2NvbnN1bWVyKCkgeyB9OworICAKKyAgICAgIHZpcnR1YWwgYm9vbAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfQ2hhclQqIF9fYnVmZmVyLCBzaXplX3QgX19sZW4pID0gMDsKKyAgICB9OworICAKKyAgLy8gRmlyc3QgYSBsb3Qgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuICBUaGUgc3RhbmRhcmQgc2VlbXMgdG8gcmVxdWlyZQorICAvLyBtdWNoIHN0cmljdGVyICJkZWNsYXJhdGlvbiBiZWZvcmUgdXNlIiB0aGFuIG1hbnkgb2YgdGhlIGltcGxlbWVudGF0aW9ucworICAvLyB0aGF0IHByZWNlZGVkIGl0LgorICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KKyAgICBjbGFzcyByb3BlOworICAKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgc3RydWN0IF9Sb3BlX1JvcGVDb25jYXRlbmF0aW9uOworCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHN0cnVjdCBfUm9wZV9Sb3BlTGVhZjsKKyAgCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHN0cnVjdCBfUm9wZV9Sb3BlRnVuY3Rpb247CisgIAorICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBzdHJ1Y3QgX1JvcGVfUm9wZVN1YnN0cmluZzsKKyAgCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGNsYXNzIF9Sb3BlX2l0ZXJhdG9yOworICAKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgY2xhc3MgX1JvcGVfY29uc3RfaXRlcmF0b3I7CisgIAorICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBjbGFzcyBfUm9wZV9jaGFyX3JlZl9wcm94eTsKKyAgCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGNsYXNzIF9Sb3BlX2NoYXJfcHRyX3Byb3h5OworCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9Sb3BlX2NoYXJfcHRyX3Byb3h5PF9DaGFyVCwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCBfUm9wZV9jaGFyX3B0cl9wcm94eTxfQ2hhclQsIF9BbGxvYz4mIF9feSk7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+CisgICAgb3BlcmF0b3ItKGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX194LAorCSAgICAgIHB0cmRpZmZfdCBfX24pOworCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPgorICAgIG9wZXJhdG9yKyhjb25zdCBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feCwKKwkgICAgICBwdHJkaWZmX3QgX19uKTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4KKyAgICBvcGVyYXRvcisocHRyZGlmZl90IF9fbiwKKwkgICAgICBjb25zdCBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feCk7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX195KTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX194LAorCSAgICAgIGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX195KTsKKyAgCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHB0cmRpZmZfdAorICAgIG9wZXJhdG9yLShjb25zdCBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feCwKKwkgICAgICBjb25zdCBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feSk7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+CisgICAgb3BlcmF0b3ItKGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX194LCBwdHJkaWZmX3QgX19uKTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4KKyAgICBvcGVyYXRvcisoY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3gsIHB0cmRpZmZfdCBfX24pOworCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPgorICAgIG9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feCk7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX195KTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX194LAorCSAgICAgIGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX195KTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBwdHJkaWZmX3QKKyAgICBvcGVyYXRvci0oY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3gsCisJICAgICAgY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3kpOworCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+CisgICAgb3BlcmF0b3IrKGNvbnN0IHJvcGU8X0NoYXJULCBfQWxsb2M+JiBfX2xlZnQsCisJICAgICAgY29uc3Qgcm9wZTxfQ2hhclQsIF9BbGxvYz4mIF9fcmlnaHQpOworCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+CisgICAgb3BlcmF0b3IrKGNvbnN0IHJvcGU8X0NoYXJULCBfQWxsb2M+JiBfX2xlZnQsIGNvbnN0IF9DaGFyVCogX19yaWdodCk7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz4KKyAgICBvcGVyYXRvcisoY29uc3Qgcm9wZTxfQ2hhclQsIF9BbGxvYz4mIF9fbGVmdCwgX0NoYXJUIF9fcmlnaHQpOworCisgIC8vIFNvbWUgaGVscGVycywgc28gd2UgY2FuIHVzZSBwb3dlciBvbiByb3Blcy4KKyAgLy8gU2VlIGJlbG93IGZvciB3aHkgdGhpcyBpc24ndCBsb2NhbCB0byB0aGUgaW1wbGVtZW50YXRpb24uCisgIAorICAvLyBUaGlzIHVzZXMgYSBub25zdGFuZGFyZCByZWZjb3VudCBjb252ZW50aW9uLgorICAvLyBUaGUgcmVzdWx0IGhhcyByZWZjb3VudCAwLgorICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBzdHJ1Y3QgX1JvcGVfQ29uY2F0X2ZuCisgICAgOiBwdWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rpb248cm9wZTxfQ2hhclQsIF9BbGxvYz4sIHJvcGU8X0NoYXJULCBfQWxsb2M+LAorCQkJCSAgcm9wZTxfQ2hhclQsIF9BbGxvYz4gPgorICAgIHsKKyAgICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+CisgICAgICBvcGVyYXRvcigpKGNvbnN0IHJvcGU8X0NoYXJULCBfQWxsb2M+JiBfX3gsCisJCSBjb25zdCByb3BlPF9DaGFyVCwgX0FsbG9jPiYgX195KQorICAgICAgeyByZXR1cm4gX194ICsgX195OyB9CisgICAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHJvcGU8X0NoYXJULCBfQWxsb2M+CisgICAgaWRlbnRpdHlfZWxlbWVudChfUm9wZV9Db25jYXRfZm48X0NoYXJULCBfQWxsb2M+KQorICAgIHsgcmV0dXJuIHJvcGU8X0NoYXJULCBfQWxsb2M+KCk7IH0KKworICAvLyBDbGFzcyBfUmVmY291bnRfQmFzZSBwcm92aWRlcyBhIHR5cGUsIF9SQ190LCBhIGRhdGEgbWVtYmVyLAorICAvLyBfTV9yZWZfY291bnQsIGFuZCBtZW1iZXIgZnVuY3Rpb25zIF9NX2luY3IgYW5kIF9NX2RlY3IsIHdoaWNoIHBlcmZvcm0KKyAgLy8gYXRvbWljIHByZWluY3JlbWVudC9wcmVkZWNyZW1lbnQuICBUaGUgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMKKyAgLy8gX01fcmVmX2NvdW50LgorICBzdHJ1Y3QgX1JlZmNvdW50X0Jhc2UKKyAgeworICAgIC8vIFRoZSB0eXBlIF9SQ190CisgICAgdHlwZWRlZiBzaXplX3QgX1JDX3Q7CisgICAgCisgICAgLy8gVGhlIGRhdGEgbWVtYmVyIF9NX3JlZl9jb3VudAorICAgIHZvbGF0aWxlIF9SQ190IF9NX3JlZl9jb3VudDsKKworICAgIC8vIENvbnN0cnVjdG9yCisgICAgX19ndGhyZWFkX211dGV4X3QgX01fcmVmX2NvdW50X2xvY2s7CisKKyAgICBfUmVmY291bnRfQmFzZShfUkNfdCBfX24pIDogX01fcmVmX2NvdW50KF9fbiksIF9NX3JlZl9jb3VudF9sb2NrKCkKKyAgICB7CisjaWZkZWYgX19HVEhSRUFEX01VVEVYX0lOSVQKKyAgICAgIF9fZ3RocmVhZF9tdXRleF90IF9fdG1wID0gX19HVEhSRUFEX01VVEVYX0lOSVQ7CisgICAgICBfTV9yZWZfY291bnRfbG9jayA9IF9fdG1wOworI2VsaWYgZGVmaW5lZChfX0dUSFJFQURfTVVURVhfSU5JVF9GVU5DVElPTikKKyAgICAgIF9fR1RIUkVBRF9NVVRFWF9JTklUX0ZVTkNUSU9OICgmX01fcmVmX2NvdW50X2xvY2spOworI2Vsc2UKKyNlcnJvciBfX0dUSFJFQURfTVVURVhfSU5JVCBvciBfX0dUSFJFQURfTVVURVhfSU5JVF9GVU5DVElPTiBzaG91bGQgYmUgZGVmaW5lZCBieSBndGhyLmggYWJzdHJhY3Rpb24gbGF5ZXIsIHJlcG9ydCBwcm9ibGVtIHRvIGxpYnN0ZGMrK0BnY2MuZ251Lm9yZy4KKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQKKyAgICBfTV9pbmNyKCkKKyAgICB7CisgICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2spOworICAgICAgKytfTV9yZWZfY291bnQ7CisgICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CisgICAgfQorCisgICAgX1JDX3QKKyAgICBfTV9kZWNyKCkKKyAgICB7CisgICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2spOworICAgICAgdm9sYXRpbGUgX1JDX3QgX190bXAgPSAtLV9NX3JlZl9jb3VudDsKKyAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKKyAgICAgIHJldHVybiBfX3RtcDsKKyAgICB9CisgIH07CisKKyAgLy8KKyAgLy8gV2hhdCBmb2xsb3dzIHNob3VsZCByZWFsbHkgYmUgbG9jYWwgdG8gcm9wZS4gIFVuZm9ydHVuYXRlbHksCisgIC8vIHRoYXQgZG9lc24ndCB3b3JrLCBzaW5jZSBpdCBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIGRlZmluZSBnZW5lcmljCisgIC8vIGVxdWFsaXR5IG9uIHJvcGUgaXRlcmF0b3JzLiAgQWNjb3JkaW5nIHRvIHRoZSBkcmFmdCBzdGFuZGFyZCwgdGhlCisgIC8vIHRlbXBsYXRlIHBhcmFtZXRlcnMgZm9yIHN1Y2ggYW4gZXF1YWxpdHkgb3BlcmF0b3IgY2Fubm90IGJlIGluZmVycmVkCisgIC8vIGZyb20gdGhlIG9jY3VycmVuY2Ugb2YgYSBtZW1iZXIgY2xhc3MgYXMgYSBwYXJhbWV0ZXIuCisgIC8vIChTR0kgY29tcGlsZXJzIGluIGZhY3QgYWxsb3cgdGhpcywgYnV0IHRoZSBfX3Jlc3VsdCB3b3VsZG4ndCBiZQorICAvLyBwb3J0YWJsZS4pCisgIC8vIFNpbWlsYXJseSwgc29tZSBvZiB0aGUgc3RhdGljIG1lbWJlciBmdW5jdGlvbnMgYXJlIG1lbWJlciBmdW5jdGlvbnMKKyAgLy8gb25seSB0byBhdm9pZCBwb2xsdXRpbmcgdGhlIGdsb2JhbCBuYW1lc3BhY2UsIGFuZCB0byBjaXJjdW12ZW50CisgIC8vIHJlc3RyaWN0aW9ucyBvbiB0eXBlIGluZmVyZW5jZSBmb3IgdGVtcGxhdGUgZnVuY3Rpb25zLgorICAvLworCisgIC8vCisgIC8vIFRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSBmb3IgcmVwcmVzZW50aW5nIGEgcm9wZS4gIFRoaXMgaXMKKyAgLy8gcHJpdmF0ZSB0byB0aGUgaW1wbGVtZW50YXRpb24uICBBIHJvcGUgaXMgcmVhbGx5IGp1c3QgYSBwb2ludGVyCisgIC8vIHRvIG9uZSBvZiB0aGVzZS4KKyAgLy8KKyAgLy8gQSBmZXcgYmFzaWMgZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgdGhpcyBkYXRhIHN0cnVjdHVyZQorICAvLyBhcmUgbWVtYmVycyBvZiBfUm9wZVJlcC4gIE1vc3Qgb2YgdGhlIG1vcmUgY29tcGxleCBhbGdvcml0aG1zCisgIC8vIGFyZSBpbXBsZW1lbnRlZCBhcyByb3BlIG1lbWJlcnMuCisgIC8vCisgIC8vIFNvbWUgb2YgdGhlIHN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zIG9mIF9Sb3BlUmVwIGhhdmUgaWRlbnRpY2FsbHkKKyAgLy8gbmFtZWQgZnVuY3Rpb25zIGluIHJvcGUgdGhhdCBzaW1wbHkgaW52b2tlIHRoZSBfUm9wZVJlcCB2ZXJzaW9ucy4KKworI2RlZmluZSBfX1JPUEVfREVGSU5FX0FMTE9DUyhfX2EpIFwKKyAgICAgICAgX19ST1BFX0RFRklORV9BTExPQyhfQ2hhclQsX0RhdGEpIC8qIGNoYXJhY3RlciBkYXRhICovIFwKKyAgICAgICAgdHlwZWRlZiBfUm9wZV9Sb3BlQ29uY2F0ZW5hdGlvbjxfQ2hhclQsX19hPiBfX0M7IFwKKyAgICAgICAgX19ST1BFX0RFRklORV9BTExPQyhfX0MsX0MpIFwKKyAgICAgICAgdHlwZWRlZiBfUm9wZV9Sb3BlTGVhZjxfQ2hhclQsX19hPiBfX0w7IFwKKyAgICAgICAgX19ST1BFX0RFRklORV9BTExPQyhfX0wsX0wpIFwKKyAgICAgICAgdHlwZWRlZiBfUm9wZV9Sb3BlRnVuY3Rpb248X0NoYXJULF9fYT4gX19GOyBcCisgICAgICAgIF9fUk9QRV9ERUZJTkVfQUxMT0MoX19GLF9GKSBcCisgICAgICAgIHR5cGVkZWYgX1JvcGVfUm9wZVN1YnN0cmluZzxfQ2hhclQsX19hPiBfX1M7IFwKKyAgICAgICAgX19ST1BFX0RFRklORV9BTExPQyhfX1MsX1MpCisKKyAgLy8gIEludGVybmFsIHJvcGUgbm9kZXMgcG90ZW50aWFsbHkgc3RvcmUgYSBjb3B5IG9mIHRoZSBhbGxvY2F0b3IKKyAgLy8gIGluc3RhbmNlIHVzZWQgdG8gYWxsb2NhdGUgdGhlbS4gIFRoaXMgaXMgbW9zdGx5IHJlZHVuZGFudC4KKyAgLy8gIEJ1dCB0aGUgYWx0ZXJuYXRpdmUgd291bGQgYmUgdG8gcGFzcyBhbGxvY2F0b3IgaW5zdGFuY2VzIGFyb3VuZAorICAvLyAgaW4gc29tZSBmb3JtIHRvIG5lYXJseSBhbGwgaW50ZXJuYWwgZnVuY3Rpb25zLCBzaW5jZSBhbnkgcG9pbnRlcgorICAvLyAgYXNzaWdubWVudCBtYXkgcmVzdWx0IGluIGEgemVybyByZWZlcmVuY2UgY291bnQgYW5kIHRodXMgcmVxdWlyZQorICAvLyAgZGVhbGxvY2F0aW9uLgorCisjZGVmaW5lIF9fU1RBVElDX0lGX1NHSV9BTExPQyAgLyogbm90IHN0YXRpYyAqLworCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBzdHJ1Y3QgX1JvcGVfcmVwX2Jhc2UKKyAgICA6IHB1YmxpYyBfQWxsb2MKKyAgICB7CisgICAgICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKKworICAgICAgYWxsb2NhdG9yX3R5cGUKKyAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdAorICAgICAgeyByZXR1cm4gKnN0YXRpY19jYXN0PGNvbnN0IF9BbGxvYyo+KHRoaXMpOyB9CisKKyAgICAgIGFsbG9jYXRvcl90eXBlJgorICAgICAgX01fZ2V0X2FsbG9jYXRvcigpCisgICAgICB7IHJldHVybiAqc3RhdGljX2Nhc3Q8X0FsbG9jKj4odGhpcyk7IH0KKworICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmCisgICAgICBfTV9nZXRfYWxsb2NhdG9yKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICpzdGF0aWNfY2FzdDxjb25zdCBfQWxsb2MqPih0aGlzKTsgfQorCisgICAgICBfUm9wZV9yZXBfYmFzZShzaXplX3QgX19zaXplLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYpCisgICAgICA6IF9NX3NpemUoX19zaXplKSB7IH0KKworICAgICAgc2l6ZV90IF9NX3NpemU7CisKKyMgZGVmaW5lIF9fUk9QRV9ERUZJTkVfQUxMT0MoX1RwLCBfX25hbWUpIFwKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBcCisgICAgICAgICAgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3RoZXIgX19uYW1lIyNBbGxvYzsgXAorICAgICAgICBzdGF0aWMgX1RwKiBfX25hbWUjI19hbGxvY2F0ZShzaXplX3QgX19uKSBcCisgICAgICAgICAgeyByZXR1cm4gX19uYW1lIyNBbGxvYygpLmFsbG9jYXRlKF9fbik7IH0gXAorICAgICAgICBzdGF0aWMgdm9pZCBfX25hbWUjI19kZWFsbG9jYXRlKF9UcCAqX19wLCBzaXplX3QgX19uKSBcCisgICAgICAgICAgeyBfX25hbWUjI0FsbG9jKCkuZGVhbGxvY2F0ZShfX3AsIF9fbik7IH0KKyAgICAgIF9fUk9QRV9ERUZJTkVfQUxMT0NTKF9BbGxvYykKKyMgdW5kZWYgX19ST1BFX0RFRklORV9BTExPQworICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgc3RydWN0IF9Sb3BlX1JvcGVSZXAKKyAgICA6IHB1YmxpYyBfUm9wZV9yZXBfYmFzZTxfQ2hhclQsIF9BbGxvYz4KKyMgaWZuZGVmIF9fR0MKKwkgICAgICwgX1JlZmNvdW50X0Jhc2UKKyMgZW5kaWYKKyAgICB7CisgICAgcHVibGljOgorICAgICAgX19kZXRhaWw6Ol9UYWcgX01fdGFnOjg7CisgICAgICBib29sIF9NX2lzX2JhbGFuY2VkOjg7CisgICAgICB1bnNpZ25lZCBjaGFyIF9NX2RlcHRoOworICAgICAgX19HQ19DT05TVCBfQ2hhclQqIF9NX2Nfc3RyaW5nOworICAgICAgX19ndGhyZWFkX211dGV4X3QgX01fY19zdHJpbmdfbG9jazsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYXR0ZW5lZCB2ZXJzaW9uIG9mIHN0cmluZywgaWYgbmVlZGVkLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHR5cGljYWxseSAwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGl0J3Mgbm90IDAsIHRoZW4gdGhlIG1lbW9yeSBpcyBvd25lZCAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJ5IHRoaXMgbm9kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluIHRoZSBjYXNlIG9mIGEgbGVhZiwgdGhpcyBtYXkgcG9pbnQgdG8gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoZSBzYW1lIG1lbW9yeSBhcyB0aGUgZGF0YSBmaWVsZC4gICAgICAgKi8KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JvcGVfcmVwX2Jhc2U8X0NoYXJULCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZQorICAgICAgICBhbGxvY2F0b3JfdHlwZTsKKworICAgICAgdXNpbmcgX1JvcGVfcmVwX2Jhc2U8X0NoYXJULCBfQWxsb2M+OjpnZXRfYWxsb2NhdG9yOworICAgICAgdXNpbmcgX1JvcGVfcmVwX2Jhc2U8X0NoYXJULCBfQWxsb2M+OjpfTV9nZXRfYWxsb2NhdG9yOworCisgICAgICBfUm9wZV9Sb3BlUmVwKF9fZGV0YWlsOjpfVGFnIF9fdCwgaW50IF9fZCwgYm9vbCBfX2IsIHNpemVfdCBfX3NpemUsCisJCSAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQorICAgICAgOiBfUm9wZV9yZXBfYmFzZTxfQ2hhclQsIF9BbGxvYz4oX19zaXplLCBfX2EpLAorI2lmbmRlZiBfX0dDCisJX1JlZmNvdW50X0Jhc2UoMSksCisjZW5kaWYKKwlfTV90YWcoX190KSwgX01faXNfYmFsYW5jZWQoX19iKSwgX01fZGVwdGgoX19kKSwgX01fY19zdHJpbmcoMCkKKyNpZmRlZiBfX0dUSFJFQURfTVVURVhfSU5JVAorICAgIHsKKyAgICAgIC8vIERvIG5vdCBjb3B5IGEgUE9TSVgvZ3RociBtdXRleCBvbmNlIGluIHVzZS4gIEhvd2V2ZXIsIGJpdHMgYXJlIGJpdHMuCisgICAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfX3RtcCA9IF9fR1RIUkVBRF9NVVRFWF9JTklUOworICAgICAgX01fY19zdHJpbmdfbG9jayA9IF9fdG1wOworICAgIH0KKyNlbHNlCisgICAgeyBfX0dUSFJFQURfTVVURVhfSU5JVF9GVU5DVElPTiAoJl9NX2Nfc3RyaW5nX2xvY2spOyB9CisjZW5kaWYKKyNpZmRlZiBfX0dDCisgICAgICB2b2lkCisgICAgICBfTV9pbmNyICgpIHsgfQorI2VuZGlmCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX1NfZnJlZV9zdHJpbmcoX19HQ19DT05TVCBfQ2hhclQqLCBzaXplX3QgX19sZW4sCisJCSAgICAgYWxsb2NhdG9yX3R5cGUmIF9fYSk7CisjZGVmaW5lIF9fU1RMX0ZSRUVfU1RSSU5HKF9fcywgX19sLCBfX2EpIF9TX2ZyZWVfc3RyaW5nKF9fcywgX19sLCBfX2EpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVhbGxvY2F0ZSBkYXRhIHNlY3Rpb24gb2YgYSBsZWFmLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgYmUgYSBtZW1iZXIgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBCdXQgaXRzIGhhcmQgdG8gZG8gYW55dGhpbmcgZWxzZSBhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vbWVudCwgYmVjYXVzZSBpdCdzIHRlbXBsYXRpemVkIHcuci50LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW4gYWxsb2NhdG9yLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9lcyBub3RoaW5nIGlmIF9fR0MgaXMgZGVmaW5lZC4KKyNpZm5kZWYgX19HQworICAgICAgdm9pZCBfTV9mcmVlX2Nfc3RyaW5nKCk7CisgICAgICB2b2lkIF9NX2ZyZWVfdHJlZSgpOworICAgICAgLy8gRGVhbGxvY2F0ZSB0LiBBc3N1bWVzIHQgaXMgbm90IDAuCisgICAgICB2b2lkCisgICAgICBfTV91bnJlZl9ub25uaWwoKQorICAgICAgeworCWlmICgwID09IF9NX2RlY3IoKSkKKwkgIF9NX2ZyZWVfdHJlZSgpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9yZWZfbm9ubmlsKCkKKyAgICAgIHsgX01faW5jcigpOyB9CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfU191bnJlZihfUm9wZV9Sb3BlUmVwKiBfX3QpCisgICAgICB7CisJaWYgKDAgIT0gX190KQorCSAgX190LT5fTV91bnJlZl9ub25uaWwoKTsKKyAgICAgIH0KKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIF9TX3JlZihfUm9wZV9Sb3BlUmVwKiBfX3QpCisgICAgICB7CisJaWYgKDAgIT0gX190KQorCSAgX190LT5fTV9pbmNyKCk7CisgICAgICB9CisgICAgICAKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfU19mcmVlX2lmX3VucmVmKF9Sb3BlX1JvcGVSZXAqIF9fdCkKKyAgICAgIHsKKwlpZiAoMCAhPSBfX3QgJiYgMCA9PSBfX3QtPl9NX3JlZl9jb3VudCkKKwkgIF9fdC0+X01fZnJlZV90cmVlKCk7CisgICAgICB9CisjICAgZWxzZSAvKiBfX0dDICovCisgICAgICB2b2lkIF9NX3VucmVmX25vbm5pbCgpIHsgfQorICAgICAgdm9pZCBfTV9yZWZfbm9ubmlsKCkgeyB9CisgICAgICBzdGF0aWMgdm9pZCBfU191bnJlZihfUm9wZV9Sb3BlUmVwKikgeyB9CisgICAgICBzdGF0aWMgdm9pZCBfU19yZWYoX1JvcGVfUm9wZVJlcCopIHsgfQorICAgICAgc3RhdGljIHZvaWQgX1NfZnJlZV9pZl91bnJlZihfUm9wZV9Sb3BlUmVwKikgeyB9CisjICAgZW5kaWYKK3Byb3RlY3RlZDoKKyAgICAgIF9Sb3BlX1JvcGVSZXAmCisgICAgICBvcGVyYXRvcj0oY29uc3QgX1JvcGVfUm9wZVJlcCYpOworCisgICAgICBfUm9wZV9Sb3BlUmVwKGNvbnN0IF9Sb3BlX1JvcGVSZXAmKTsKKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHN0cnVjdCBfUm9wZV9Sb3BlTGVhZgorICAgIDogcHVibGljIF9Sb3BlX1JvcGVSZXA8X0NoYXJULCBfQWxsb2M+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIEFwcGFyZW50bHkgbmVlZGVkIGJ5IFZDKysKKyAgICAgIC8vIFRoZSBkYXRhIGZpZWxkcyBvZiBsZWF2ZXMgYXJlIGFsbG9jYXRlZCB3aXRoIHNvbWUKKyAgICAgIC8vIGV4dHJhIHNwYWNlLCB0byBhY2NvbW1vZGF0ZSBmdXR1cmUgZ3Jvd3RoIGFuZCBmb3IgYmFzaWMKKyAgICAgIC8vIGNoYXJhY3RlciB0eXBlcywgdG8gaG9sZCBhIHRyYWlsaW5nIGVvcyBjaGFyYWN0ZXIuCisgICAgICBlbnVtIHsgX1NfYWxsb2NfZ3JhbnVsYXJpdHkgPSA4IH07CisgICAgICAKKyAgICAgIHN0YXRpYyBzaXplX3QKKyAgICAgIF9TX3JvdW5kZWRfdXBfc2l6ZShzaXplX3QgX19uKQorICAgICAgeworICAgICAgICBzaXplX3QgX19zaXplX3dpdGhfZW9zOworCQorICAgICAgICBpZiAoX1NfaXNfYmFzaWNfY2hhcl90eXBlKChfQ2hhclQqKTApKQorCSAgX19zaXplX3dpdGhfZW9zID0gX19uICsgMTsKKwllbHNlCisJICBfX3NpemVfd2l0aF9lb3MgPSBfX247CisjaWZkZWYgX19HQworCXJldHVybiBfX3NpemVfd2l0aF9lb3M7CisjZWxzZQorCS8vIEFsbG93IHNsb3AgZm9yIGluLXBsYWNlIGV4cGFuc2lvbi4KKwlyZXR1cm4gKChfX3NpemVfd2l0aF9lb3MgKyBzaXplX3QoX1NfYWxsb2NfZ3JhbnVsYXJpdHkpIC0gMSkKKwkJJn4gKHNpemVfdChfU19hbGxvY19ncmFudWxhcml0eSkgLSAxKSk7CisjZW5kaWYKKyAgICAgIH0KKyAgICAgIF9fR0NfQ09OU1QgX0NoYXJUKiBfTV9kYXRhOyAvKiBOb3QgbmVjZXNzYXJpbHkgMCB0ZXJtaW5hdGVkLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBhbGxvY2F0ZWQgc2l6ZSBpcyAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX1Nfcm91bmRlZF91cF9zaXplKHNpemUpLCBleGNlcHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbiB0aGUgR0MgY2FzZSwgaW4gd2hpY2ggaXQgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvZXNuJ3QgbWF0dGVyLiAgICAgICAgICAgICAgICovCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Sb3BlX3JlcF9iYXNlPF9DaGFyVCxfQWxsb2M+OjphbGxvY2F0b3JfdHlwZQorICAgICAgICBhbGxvY2F0b3JfdHlwZTsKKworICAgICAgX1JvcGVfUm9wZUxlYWYoX19HQ19DT05TVCBfQ2hhclQqIF9fZCwgc2l6ZV90IF9fc2l6ZSwKKwkJICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQorICAgICAgOiBfUm9wZV9Sb3BlUmVwPF9DaGFyVCwgX0FsbG9jPihfX2RldGFpbDo6X1NfbGVhZiwgMCwgdHJ1ZSwKKwkJCQkgICAgICBfX3NpemUsIF9fYSksIF9NX2RhdGEoX19kKQorICAgICAgeworICAgICAgICBpZiAoX1NfaXNfYmFzaWNfY2hhcl90eXBlKChfQ2hhclQgKikwKSkKKwkgIHsKKyAgICAgICAgICAgIC8vIGFscmVhZHkgZW9zIHRlcm1pbmF0ZWQuCisgICAgICAgICAgICB0aGlzLT5fTV9jX3N0cmluZyA9IF9fZDsKKwkgIH0KKyAgICAgIH0KKyAgICAgIC8vIFRoZSBjb25zdHJ1Y3RvciBhc3N1bWVzIHRoYXQgZCBoYXMgYmVlbiBhbGxvY2F0ZWQgd2l0aAorICAgICAgLy8gdGhlIHByb3BlciBhbGxvY2F0b3IgYW5kIHRoZSBwcm9wZXJseSBwYWRkZWQgc2l6ZS4KKyAgICAgIC8vIEluIGNvbnRyYXN0LCB0aGUgZGVzdHJ1Y3RvciBkZWFsbG9jYXRlcyB0aGUgZGF0YToKKyNpZm5kZWYgX19HQworICAgICAgfl9Sb3BlX1JvcGVMZWFmKCkgdGhyb3coKQorICAgICAgeworICAgICAgICBpZiAoX01fZGF0YSAhPSB0aGlzLT5fTV9jX3N0cmluZykKKwkgIHRoaXMtPl9NX2ZyZWVfY19zdHJpbmcoKTsKKwkKKyAgICAgICAgX19TVExfRlJFRV9TVFJJTkcoX01fZGF0YSwgdGhpcy0+X01fc2l6ZSwgdGhpcy0+X01fZ2V0X2FsbG9jYXRvcigpKTsKKyAgICAgIH0KKyNlbmRpZgorcHJvdGVjdGVkOgorICAgICAgX1JvcGVfUm9wZUxlYWYmCisgICAgICBvcGVyYXRvcj0oY29uc3QgX1JvcGVfUm9wZUxlYWYmKTsKKworICAgICAgX1JvcGVfUm9wZUxlYWYoY29uc3QgX1JvcGVfUm9wZUxlYWYmKTsKKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHN0cnVjdCBfUm9wZV9Sb3BlQ29uY2F0ZW5hdGlvbgorICAgIDogcHVibGljIF9Sb3BlX1JvcGVSZXA8X0NoYXJULCBfQWxsb2M+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIF9Sb3BlX1JvcGVSZXA8X0NoYXJULCBfQWxsb2M+KiBfTV9sZWZ0OworICAgICAgX1JvcGVfUm9wZVJlcDxfQ2hhclQsIF9BbGxvYz4qIF9NX3JpZ2h0OworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Sb3BlX3JlcF9iYXNlPF9DaGFyVCwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUKKyAgICAgICAgYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIF9Sb3BlX1JvcGVDb25jYXRlbmF0aW9uKF9Sb3BlX1JvcGVSZXA8X0NoYXJULCBfQWxsb2M+KiBfX2wsCisJCQkgICAgICBfUm9wZV9Sb3BlUmVwPF9DaGFyVCwgX0FsbG9jPiogX19yLAorCQkJICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKKwk6IF9Sb3BlX1JvcGVSZXA8X0NoYXJULCBfQWxsb2M+KF9fZGV0YWlsOjpfU19jb25jYXQsCisJCQkJICAgICAgc3RkOjptYXgoX19sLT5fTV9kZXB0aCwKKwkJCQkJICAgICAgIF9fci0+X01fZGVwdGgpICsgMSwKKwkJCQkgICAgICBmYWxzZSwKKwkJCQkgICAgICBfX2wtPl9NX3NpemUgKyBfX3ItPl9NX3NpemUsIF9fYSksCisgICAgICAgIF9NX2xlZnQoX19sKSwgX01fcmlnaHQoX19yKQorICAgICAgeyB9CisjaWZuZGVmIF9fR0MKKyAgICAgIH5fUm9wZV9Sb3BlQ29uY2F0ZW5hdGlvbigpIHRocm93KCkKKyAgICAgIHsKKwl0aGlzLT5fTV9mcmVlX2Nfc3RyaW5nKCk7CisJX01fbGVmdC0+X01fdW5yZWZfbm9ubmlsKCk7CisJX01fcmlnaHQtPl9NX3VucmVmX25vbm5pbCgpOworICAgICAgfQorI2VuZGlmCitwcm90ZWN0ZWQ6CisgICAgICBfUm9wZV9Sb3BlQ29uY2F0ZW5hdGlvbiYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfUm9wZV9Sb3BlQ29uY2F0ZW5hdGlvbiYpOworICAgICAgCisgICAgICBfUm9wZV9Sb3BlQ29uY2F0ZW5hdGlvbihjb25zdCBfUm9wZV9Sb3BlQ29uY2F0ZW5hdGlvbiYpOworICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgc3RydWN0IF9Sb3BlX1JvcGVGdW5jdGlvbgorICAgIDogcHVibGljIF9Sb3BlX1JvcGVSZXA8X0NoYXJULCBfQWxsb2M+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIGNoYXJfcHJvZHVjZXI8X0NoYXJUPiogX01fZm47CisjaWZuZGVmIF9fR0MKKyAgICAgIGJvb2wgX01fZGVsZXRlX3doZW5fZG9uZTsgLy8gQ2hhcl9wcm9kdWNlciBpcyBvd25lZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcm9wZSBhbmQgc2hvdWxkIGJlIGV4cGxpY2l0bHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVsZXRlZCB3aGVuIHRoZSByb3BlIGJlY29tZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5hY2Nlc3NpYmxlLgorI2Vsc2UKKyAgICAgIC8vIEluIHRoZSBHQyBjYXNlLCB3ZSBlaXRoZXIgcmVnaXN0ZXIgdGhlIHJvcGUgZm9yCisgICAgICAvLyBmaW5hbGl6YXRpb24sIG9yIG5vdC4gIFRodXMgdGhlIGZpZWxkIGlzIHVubmVjZXNzYXJ5OworICAgICAgLy8gdGhlIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBpbiB0aGUgY29sbGVjdG9yIGRhdGEgc3RydWN0dXJlcy4KKyAgICAgIC8vIFdlIGRvIG5lZWQgYSBmaW5hbGl6YXRpb24gcHJvY2VkdXJlIHRvIGJlIGludm9rZWQgYnkgdGhlCisgICAgICAvLyBjb2xsZWN0b3IuCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX1NfZm5fZmluYWxpemF0aW9uX3Byb2Modm9pZCAqIF9fdHJlZSwgdm9pZCAqKQorICAgICAgeyBkZWxldGUgKChfUm9wZV9Sb3BlRnVuY3Rpb24gKilfX3RyZWUpIC0+IF9NX2ZuOyB9CisjZW5kaWYKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9Sb3BlX3JlcF9iYXNlPF9DaGFyVCwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUKKyAgICAgIGFsbG9jYXRvcl90eXBlOworCisgICAgICBfUm9wZV9Sb3BlRnVuY3Rpb24oY2hhcl9wcm9kdWNlcjxfQ2hhclQ+KiBfX2YsIHNpemVfdCBfX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIF9fZCwgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKKyAgICAgIDogX1JvcGVfUm9wZVJlcDxfQ2hhclQsIF9BbGxvYz4oX19kZXRhaWw6Ol9TX2Z1bmN0aW9uLCAwLCB0cnVlLCBfX3NpemUsIF9fYSkKKwksIF9NX2ZuKF9fZikKKyNpZm5kZWYgX19HQworCSwgX01fZGVsZXRlX3doZW5fZG9uZShfX2QpCisjZW5kaWYKKyAgICAgIHsKKyNpZmRlZiBfX0dDCisJaWYgKF9fZCkKKwkgIHsKKwkgICAgR0NfUkVHSVNURVJfRklOQUxJWkVSKHRoaXMsIF9Sb3BlX1JvcGVGdW5jdGlvbjo6CisJCQkJICBfU19mbl9maW5hbGl6YXRpb25fcHJvYywgMCwgMCwgMCk7CisJICB9CisjZW5kaWYKKyAgICAgIH0KKyNpZm5kZWYgX19HQworICAgICAgfl9Sb3BlX1JvcGVGdW5jdGlvbigpIHRocm93KCkKKyAgICAgIHsKKwl0aGlzLT5fTV9mcmVlX2Nfc3RyaW5nKCk7CisJaWYgKF9NX2RlbGV0ZV93aGVuX2RvbmUpCisJICBkZWxldGUgX01fZm47CisgICAgICB9CisjIGVuZGlmCisgICAgcHJvdGVjdGVkOgorICAgICAgX1JvcGVfUm9wZUZ1bmN0aW9uJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9Sb3BlX1JvcGVGdW5jdGlvbiYpOworCisgICAgICBfUm9wZV9Sb3BlRnVuY3Rpb24oY29uc3QgX1JvcGVfUm9wZUZ1bmN0aW9uJik7CisgICAgfTsKKyAgLy8gU3Vic3RyaW5nIHJlc3VsdHMgYXJlIHVzdWFsbHkgcmVwcmVzZW50ZWQgdXNpbmcganVzdAorICAvLyBjb25jYXRlbmF0aW9uIG5vZGVzLiAgQnV0IGluIHRoZSBjYXNlIG9mIHZlcnkgbG9uZyBmbGF0IHJvcGVzCisgIC8vIG9yIHJvcGVzIHdpdGggYSBmdW5jdGlvbmFsIHJlcHJlc2VudGF0aW9uIHRoYXQgaXNuJ3QgcHJhY3RpY2FsLgorICAvLyBJbiB0aGF0IGNhc2UsIHdlIHJlcHJlc2VudCB0aGUgX19yZXN1bHQgYXMgYSBzcGVjaWFsIGNhc2Ugb2YKKyAgLy8gUm9wZUZ1bmN0aW9uLCB3aG9zZSBjaGFyX3Byb2R1Y2VyIHBvaW50cyBiYWNrIHRvIHRoZSByb3BlIGl0c2VsZi4KKyAgLy8gSW4gYWxsIGNhc2VzIGV4Y2VwdCByZXBlYXRlZCBzdWJzdHJpbmcgb3BlcmF0aW9ucyBhbmQKKyAgLy8gZGVhbGxvY2F0aW9uLCB3ZSB0cmVhdCB0aGUgX19yZXN1bHQgYXMgYSBSb3BlRnVuY3Rpb24uCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHN0cnVjdCBfUm9wZV9Sb3BlU3Vic3RyaW5nCisgICAgOiBwdWJsaWMgX1JvcGVfUm9wZUZ1bmN0aW9uPF9DaGFyVCwgX0FsbG9jPiwKKyAgICAgIHB1YmxpYyBjaGFyX3Byb2R1Y2VyPF9DaGFyVD4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gWFhYIHRoaXMgd2hvbGUgY2xhc3Mgc2hvdWxkIGJlIHJld3JpdHRlbi4KKyAgICAgIF9Sb3BlX1JvcGVSZXA8X0NoYXJULF9BbGxvYz4qIF9NX2Jhc2U7ICAgICAgLy8gbm90IDAKKyAgICAgIHNpemVfdCBfTV9zdGFydDsKKworICAgICAgdmlydHVhbCB2b2lkCisgICAgICBvcGVyYXRvcigpKHNpemVfdCBfX3N0YXJ0X3Bvcywgc2l6ZV90IF9fcmVxX2xlbiwKKwkJIF9DaGFyVCogX19idWZmZXIpCisgICAgICB7CisgICAgICAgIHN3aXRjaChfTV9iYXNlLT5fTV90YWcpCisJICB7CisJICBjYXNlIF9fZGV0YWlsOjpfU19mdW5jdGlvbjoKKwkgIGNhc2UgX19kZXRhaWw6Ol9TX3N1YnN0cmluZ2ZuOgorCSAgICB7CisJICAgICAgY2hhcl9wcm9kdWNlcjxfQ2hhclQ+KiBfX2ZuID0KKwkJKChfUm9wZV9Sb3BlRnVuY3Rpb248X0NoYXJULF9BbGxvYz4qKV9NX2Jhc2UpLT5fTV9mbjsKKwkgICAgICAoKl9fZm4pKF9fc3RhcnRfcG9zICsgX01fc3RhcnQsIF9fcmVxX2xlbiwgX19idWZmZXIpOworCSAgICB9CisJICAgIGJyZWFrOworCSAgY2FzZSBfX2RldGFpbDo6X1NfbGVhZjoKKwkgICAgeworCSAgICAgIF9fR0NfQ09OU1QgX0NoYXJUKiBfX3MgPQorCQkoKF9Sb3BlX1JvcGVMZWFmPF9DaGFyVCxfQWxsb2M+KilfTV9iYXNlKS0+X01fZGF0YTsKKwkgICAgICB1bmluaXRpYWxpemVkX2NvcHlfbihfX3MgKyBfX3N0YXJ0X3BvcyArIF9NX3N0YXJ0LCBfX3JlcV9sZW4sCisJCQkJICAgX19idWZmZXIpOworCSAgICB9CisJICAgIGJyZWFrOworCSAgZGVmYXVsdDoKKwkgICAgYnJlYWs7CisJICB9CisgICAgICB9CisgICAgICAKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JvcGVfcmVwX2Jhc2U8X0NoYXJULCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZQorICAgICAgICBhbGxvY2F0b3JfdHlwZTsKKworICAgICAgX1JvcGVfUm9wZVN1YnN0cmluZyhfUm9wZV9Sb3BlUmVwPF9DaGFyVCwgX0FsbG9jPiogX19iLCBzaXplX3QgX19zLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQorICAgICAgOiBfUm9wZV9Sb3BlRnVuY3Rpb248X0NoYXJULCBfQWxsb2M+KHRoaXMsIF9fbCwgZmFsc2UsIF9fYSksCisgICAgICAgIGNoYXJfcHJvZHVjZXI8X0NoYXJUPigpLCBfTV9iYXNlKF9fYiksIF9NX3N0YXJ0KF9fcykKKyAgICAgIHsKKyNpZm5kZWYgX19HQworCV9NX2Jhc2UtPl9NX3JlZl9ub25uaWwoKTsKKyNlbmRpZgorICAgICAgICB0aGlzLT5fTV90YWcgPSBfX2RldGFpbDo6X1Nfc3Vic3RyaW5nZm47CisgICAgICB9CisgICAgdmlydHVhbCB+X1JvcGVfUm9wZVN1YnN0cmluZygpIHRocm93KCkKKyAgICAgIHsKKyNpZm5kZWYgX19HQworCV9NX2Jhc2UtPl9NX3VucmVmX25vbm5pbCgpOworCS8vIF9NX2ZyZWVfY19zdHJpbmcoKTsgIC0tIGRvbmUgYnkgcGFyZW50IGNsYXNzCisjZW5kaWYKKyAgICAgIH0KKyAgICB9OworCisgIC8vIFNlbGYtZGVzdHJ1Y3RpbmcgcG9pbnRlcnMgdG8gUm9wZV9yZXAuCisgIC8vIFRoZXNlIGFyZSBub3QgY29udmVudGlvbmFsIHNtYXJ0IHBvaW50ZXJzLiAgVGhlaXIKKyAgLy8gb25seSBwdXJwb3NlIGluIGxpZmUgaXMgdG8gZW5zdXJlIHRoYXQgdW5yZWYgaXMgY2FsbGVkCisgIC8vIG9uIHRoZSBwb2ludGVyIGVpdGhlciBhdCBub3JtYWwgZXhpdCBvciBpZiBhbiBleGNlcHRpb24KKyAgLy8gaXMgcmFpc2VkLiAgSXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvCisgIC8vIGFkanVzdCByZWZlcmVuY2UgY291bnRzIHdoZW4gdGhlc2UgcG9pbnRlcnMgYXJlIGluaXRpYWxpemVkCisgIC8vIG9yIGFzc2lnbmVkIHRvLiAgKFRoaXMgY29udmVudGlvbiBzaWduaWZpY2FudGx5IHJlZHVjZXMKKyAgLy8gdGhlIG51bWJlciBvZiBwb3RlbnRpYWxseSBleHBlbnNpdmUgcmVmZXJlbmNlIGNvdW50CisgIC8vIHVwZGF0ZXMuKQorI2lmbmRlZiBfX0dDCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHN0cnVjdCBfUm9wZV9zZWxmX2Rlc3RydWN0X3B0cgorICAgIHsKKyAgICAgIF9Sb3BlX1JvcGVSZXA8X0NoYXJULCBfQWxsb2M+KiBfTV9wdHI7CisKKyAgICAgIH5fUm9wZV9zZWxmX2Rlc3RydWN0X3B0cigpCisgICAgICB7IF9Sb3BlX1JvcGVSZXA8X0NoYXJULCBfQWxsb2M+OjpfU191bnJlZihfTV9wdHIpOyB9CisjaWZkZWYgX19FWENFUFRJT05TCisgICAgICBfUm9wZV9zZWxmX2Rlc3RydWN0X3B0cigpIDogX01fcHRyKDApIHsgfTsKKyNlbHNlCisgICAgICBfUm9wZV9zZWxmX2Rlc3RydWN0X3B0cigpIHsgfTsKKyNlbmRpZgorICAgICAgX1JvcGVfc2VsZl9kZXN0cnVjdF9wdHIoX1JvcGVfUm9wZVJlcDxfQ2hhclQsIF9BbGxvYz4qIF9fcCkKKyAgICAgIDogX01fcHRyKF9fcCkgeyB9CisgICAgCisgICAgICBfUm9wZV9Sb3BlUmVwPF9DaGFyVCwgX0FsbG9jPiYKKyAgICAgIG9wZXJhdG9yKigpCisgICAgICB7IHJldHVybiAqX01fcHRyOyB9CisgICAgCisgICAgICBfUm9wZV9Sb3BlUmVwPF9DaGFyVCwgX0FsbG9jPioKKyAgICAgIG9wZXJhdG9yLT4oKQorICAgICAgeyByZXR1cm4gX01fcHRyOyB9CisgICAgCisgICAgICBvcGVyYXRvciBfUm9wZV9Sb3BlUmVwPF9DaGFyVCwgX0FsbG9jPiooKQorICAgICAgeyByZXR1cm4gX01fcHRyOyB9CisgICAgCisgICAgICBfUm9wZV9zZWxmX2Rlc3RydWN0X3B0ciYKKyAgICAgIG9wZXJhdG9yPShfUm9wZV9Sb3BlUmVwPF9DaGFyVCwgX0FsbG9jPiogX194KQorICAgICAgeyBfTV9wdHIgPSBfX3g7IHJldHVybiAqdGhpczsgfQorICAgIH07CisjZW5kaWYKKworICAvLyBEZXJlZmVyZW5jaW5nIGEgbm9uY29uc3QgaXRlcmF0b3IgaGFzIHRvIHJldHVybiBzb21ldGhpbmcKKyAgLy8gdGhhdCBiZWhhdmVzIGFsbW9zdCBsaWtlIGEgcmVmZXJlbmNlLiAgSXQncyBub3QgcG9zc2libGUgdG8KKyAgLy8gcmV0dXJuIGFuIGFjdHVhbCByZWZlcmVuY2Ugc2luY2UgYXNzaWdubWVudCByZXF1aXJlcyBleHRyYQorICAvLyB3b3JrLiAgQW5kIHdlIHdvdWxkIGdldCBpbnRvIHRoZSBzYW1lIHByb2JsZW1zIGFzIHdpdGggdGhlCisgIC8vIENEMiB2ZXJzaW9uIG9mIGJhc2ljX3N0cmluZy4KKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgY2xhc3MgX1JvcGVfY2hhcl9yZWZfcHJveHkKKyAgICB7CisgICAgICBmcmllbmQgY2xhc3Mgcm9wZTxfQ2hhclQsIF9BbGxvYz47CisgICAgICBmcmllbmQgY2xhc3MgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+OworICAgICAgZnJpZW5kIGNsYXNzIF9Sb3BlX2NoYXJfcHRyX3Byb3h5PF9DaGFyVCwgX0FsbG9jPjsKKyNpZmRlZiBfX0dDCisgICAgICB0eXBlZGVmIF9Sb3BlX1JvcGVSZXA8X0NoYXJULCBfQWxsb2M+KiBfU2VsZl9kZXN0cnVjdF9wdHI7CisjZWxzZQorICAgICAgdHlwZWRlZiBfUm9wZV9zZWxmX2Rlc3RydWN0X3B0cjxfQ2hhclQsIF9BbGxvYz4gX1NlbGZfZGVzdHJ1Y3RfcHRyOworI2VuZGlmCisgICAgICB0eXBlZGVmIF9Sb3BlX1JvcGVSZXA8X0NoYXJULCBfQWxsb2M+IF9Sb3BlUmVwOworICAgICAgdHlwZWRlZiByb3BlPF9DaGFyVCwgX0FsbG9jPiBfTXlfcm9wZTsKKyAgICAgIHNpemVfdCBfTV9wb3M7CisgICAgICBfQ2hhclQgX01fY3VycmVudDsKKyAgICAgIGJvb2wgX01fY3VycmVudF92YWxpZDsKKyAgICAgIF9NeV9yb3BlKiBfTV9yb290OyAgICAgLy8gVGhlIHdob2xlIHJvcGUuCisgICAgcHVibGljOgorICAgICAgX1JvcGVfY2hhcl9yZWZfcHJveHkoX015X3JvcGUqIF9fciwgc2l6ZV90IF9fcCkKKyAgICAgIDogIF9NX3BvcyhfX3ApLCBfTV9jdXJyZW50KCksIF9NX2N1cnJlbnRfdmFsaWQoZmFsc2UpLCBfTV9yb290KF9fcikgeyB9CisKKyAgICAgIF9Sb3BlX2NoYXJfcmVmX3Byb3h5KGNvbnN0IF9Sb3BlX2NoYXJfcmVmX3Byb3h5JiBfX3gpCisgICAgICA6IF9NX3BvcyhfX3guX01fcG9zKSwgX01fY3VycmVudChfX3guX01fY3VycmVudCksIAorCV9NX2N1cnJlbnRfdmFsaWQoZmFsc2UpLCBfTV9yb290KF9feC5fTV9yb290KSB7IH0KKworICAgICAgLy8gRG9uJ3QgcHJlc2VydmUgY2FjaGUgaWYgdGhlIHJlZmVyZW5jZSBjYW4gb3V0bGl2ZSB0aGUKKyAgICAgIC8vIGV4cHJlc3Npb24uICBXZSBjbGFpbSB0aGF0J3Mgbm90IHBvc3NpYmxlIHdpdGhvdXQgY2FsbGluZworICAgICAgLy8gYSBjb3B5IGNvbnN0cnVjdG9yIG9yIGdlbmVyYXRpbmcgcmVmZXJlbmNlIHRvIGEgcHJveHkKKyAgICAgIC8vIHJlZmVyZW5jZS4gIFdlIGRlY2xhcmUgdGhlIGxhdHRlciB0byBoYXZlIHVuZGVmaW5lZCBzZW1hbnRpY3MuCisgICAgICBfUm9wZV9jaGFyX3JlZl9wcm94eShfTXlfcm9wZSogX19yLCBzaXplX3QgX19wLCBfQ2hhclQgX19jKQorICAgICAgOiBfTV9wb3MoX19wKSwgX01fY3VycmVudChfX2MpLCBfTV9jdXJyZW50X3ZhbGlkKHRydWUpLCBfTV9yb290KF9fcikgeyB9CisKKyAgICAgIGlubGluZSBvcGVyYXRvciBfQ2hhclQgKCkgY29uc3Q7CisKKyAgICAgIF9Sb3BlX2NoYXJfcmVmX3Byb3h5JgorICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpOworICAgIAorICAgICAgX1JvcGVfY2hhcl9wdHJfcHJveHk8X0NoYXJULCBfQWxsb2M+IG9wZXJhdG9yJigpIGNvbnN0OworICAgICAgCisgICAgICBfUm9wZV9jaGFyX3JlZl9wcm94eSYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfUm9wZV9jaGFyX3JlZl9wcm94eSYgX19jKQorICAgICAgeyByZXR1cm4gb3BlcmF0b3I9KChfQ2hhclQpX19jKTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChfUm9wZV9jaGFyX3JlZl9wcm94eSA8X0NoYXJULCBfX0FsbG9jID4gX19hLAorCSBfUm9wZV9jaGFyX3JlZl9wcm94eSA8X0NoYXJULCBfX0FsbG9jID4gX19iKQorICAgIHsKKyAgICAgIF9DaGFyVCBfX3RtcCA9IF9fYTsKKyAgICAgIF9fYSA9IF9fYjsKKyAgICAgIF9fYiA9IF9fdG1wOworICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBjbGFzcyBfUm9wZV9jaGFyX3B0cl9wcm94eQorICAgIHsKKyAgICAgIC8vIFhYWCB0aGlzIGNsYXNzIHNob3VsZCBiZSByZXdyaXR0ZW4uCisgICAgICBmcmllbmQgY2xhc3MgX1JvcGVfY2hhcl9yZWZfcHJveHk8X0NoYXJULCBfQWxsb2M+OworICAgICAgc2l6ZV90IF9NX3BvczsKKyAgICAgIHJvcGU8X0NoYXJULF9BbGxvYz4qIF9NX3Jvb3Q7ICAgICAvLyBUaGUgd2hvbGUgcm9wZS4KKyAgICBwdWJsaWM6CisgICAgICBfUm9wZV9jaGFyX3B0cl9wcm94eShjb25zdCBfUm9wZV9jaGFyX3JlZl9wcm94eTxfQ2hhclQsX0FsbG9jPiYgX194KQorICAgICAgOiBfTV9wb3MoX194Ll9NX3BvcyksIF9NX3Jvb3QoX194Ll9NX3Jvb3QpIHsgfQorCisgICAgICBfUm9wZV9jaGFyX3B0cl9wcm94eShjb25zdCBfUm9wZV9jaGFyX3B0cl9wcm94eSYgX194KQorICAgICAgOiBfTV9wb3MoX194Ll9NX3BvcyksIF9NX3Jvb3QoX194Ll9NX3Jvb3QpIHsgfQorCisgICAgICBfUm9wZV9jaGFyX3B0cl9wcm94eSgpIHsgfQorICAgICAgCisgICAgICBfUm9wZV9jaGFyX3B0cl9wcm94eShfQ2hhclQqIF9feCkKKyAgICAgIDogX01fcm9vdCgwKSwgX01fcG9zKDApIHsgfQorCisgICAgICBfUm9wZV9jaGFyX3B0cl9wcm94eSYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfUm9wZV9jaGFyX3B0cl9wcm94eSYgX194KQorICAgICAgeworICAgICAgICBfTV9wb3MgPSBfX3guX01fcG9zOworICAgICAgICBfTV9yb290ID0gX194Ll9NX3Jvb3Q7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUMiwgY2xhc3MgX0FsbG9jMj4KKyAgICAgICAgZnJpZW5kIGJvb2wKKyAgICAgICAgb3BlcmF0b3I9PShjb25zdCBfUm9wZV9jaGFyX3B0cl9wcm94eTxfQ2hhclQyLCBfQWxsb2MyPiYgX194LAorCQkgICBjb25zdCBfUm9wZV9jaGFyX3B0cl9wcm94eTxfQ2hhclQyLCBfQWxsb2MyPiYgX195KTsKKworICAgICAgX1JvcGVfY2hhcl9yZWZfcHJveHk8X0NoYXJULCBfQWxsb2M+IG9wZXJhdG9yKigpIGNvbnN0CisgICAgICB7IHJldHVybiBfUm9wZV9jaGFyX3JlZl9wcm94eTxfQ2hhclQsIF9BbGxvYz4oX01fcm9vdCwgX01fcG9zKTsgfQorICAgIH07CisKKyAgLy8gUm9wZSBpdGVyYXRvcnM6CisgIC8vIFVubGlrZSBpbiB0aGUgQyB2ZXJzaW9uLCB3ZSBjYWNoZSBvbmx5IHBhcnQgb2YgdGhlIHN0YWNrCisgIC8vIGZvciByb3BlIGl0ZXJhdG9ycywgc2luY2UgdGhleSBtdXN0IGJlIGVmZmljaWVudGx5IGNvcHlhYmxlLgorICAvLyBXaGVuIHdlIHJ1biBvdXQgb2YgY2FjaGUsIHdlIGhhdmUgdG8gcmVjb25zdHJ1Y3QgdGhlIGl0ZXJhdG9yCisgIC8vIHZhbHVlLgorICAvLyBQb2ludGVycyBmcm9tIGl0ZXJhdG9ycyBhcmUgbm90IGluY2x1ZGVkIGluIHJlZmVyZW5jZSBjb3VudHMuCisgIC8vIEl0ZXJhdG9ycyBhcmUgYXNzdW1lZCB0byBiZSB0aHJlYWQgcHJpdmF0ZS4gIFJvcGVzIGNhbgorICAvLyBiZSBzaGFyZWQuCisgIAorICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBjbGFzcyBfUm9wZV9pdGVyYXRvcl9iYXNlCisgICAgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCBfQ2hhclQ+CisgICAgeworICAgICAgZnJpZW5kIGNsYXNzIHJvcGU8X0NoYXJULCBfQWxsb2M+OworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0FsbG9jIF9hbGxvY2F0b3JfdHlwZTsgLy8gdXNlZCBpbiBfUm9wZV9yb3RhdGUsIFZDKysgd29ya2Fyb3VuZAorICAgICAgdHlwZWRlZiBfUm9wZV9Sb3BlUmVwPF9DaGFyVCwgX0FsbG9jPiBfUm9wZVJlcDsKKyAgICAgIC8vIEJvcmxhbmQgZG9lc24ndCB3YW50IHRoaXMgdG8gYmUgcHJvdGVjdGVkLgorICAgIHByb3RlY3RlZDoKKyAgICAgIGVudW0geyBfU19wYXRoX2NhY2hlX2xlbiA9IDQgfTsgLy8gTXVzdCBiZSA8PSA5LgorICAgICAgZW51bSB7IF9TX2l0ZXJhdG9yX2J1Zl9sZW4gPSAxNSB9OworICAgICAgc2l6ZV90IF9NX2N1cnJlbnRfcG9zOworICAgICAgX1JvcGVSZXAqIF9NX3Jvb3Q7ICAgICAvLyBUaGUgd2hvbGUgcm9wZS4KKyAgICAgIHNpemVfdCBfTV9sZWFmX3BvczsgICAgLy8gU3RhcnRpbmcgcG9zaXRpb24gZm9yIGN1cnJlbnQgbGVhZgorICAgICAgX19HQ19DT05TVCBfQ2hhclQqIF9NX2J1Zl9zdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnVmZmVyIHBvc3NpYmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRhaW5pbmcgY3VycmVudCBjaGFyLgorICAgICAgX19HQ19DT05TVCBfQ2hhclQqIF9NX2J1Zl9wdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBvaW50ZXIgdG8gY3VycmVudCBjaGFyIGluIGJ1ZmZlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIT0gMCA9PT4gYnVmZmVyIHZhbGlkLgorICAgICAgX19HQ19DT05TVCBfQ2hhclQqIF9NX2J1Zl9lbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9uZSBwYXN0IF9fbGFzdCB2YWxpZCBjaGFyIGluIGJ1ZmZlci4KKyAgICAgIC8vIFdoYXQgZm9sbG93cyBpcyB0aGUgcGF0aCBjYWNoZS4gIFdlIGdvIG91dCBvZiBvdXIKKyAgICAgIC8vIHdheSB0byBtYWtlIHRoaXMgY29tcGFjdC4KKyAgICAgIC8vIFBhdGhfZW5kIGNvbnRhaW5zIHRoZSBib3R0b20gc2VjdGlvbiBvZiB0aGUgcGF0aCBmcm9tCisgICAgICAvLyB0aGUgcm9vdCB0byB0aGUgY3VycmVudCBsZWFmLgorICAgICAgY29uc3QgX1JvcGVSZXAqIF9NX3BhdGhfZW5kW19TX3BhdGhfY2FjaGVfbGVuXTsKKyAgICAgIGludCBfTV9sZWFmX2luZGV4OyAgICAgLy8gTGFzdCB2YWxpZCBfX3BvcyBpbiBwYXRoX2VuZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gX01fcGF0aF9lbmRbMF0gLi4uIF9NX3BhdGhfZW5kW2xlYWZfaW5kZXgtMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9pbnQgdG8gY29uY2F0ZW5hdGlvbiBub2Rlcy4KKyAgICAgIHVuc2lnbmVkIGNoYXIgX01fcGF0aF9kaXJlY3Rpb25zOworICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAocGF0aF9kaXJlY3Rpb25zID4+IF9faSkgJiAxIGlzIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWZmIHdlIGdvdCBmcm9tIF9NX3BhdGhfZW5kW2xlYWZfaW5kZXggLSBfX2kgLSAxXQorICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBfTV9wYXRoX2VuZFtsZWFmX2luZGV4IC0gX19pXSBieSBnb2luZyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gX19yaWdodC4gQXNzdW1lcyBwYXRoX2NhY2hlX2xlbiA8PSA5LgorICAgICAgX0NoYXJUIF9NX3RtcF9idWZbX1NfaXRlcmF0b3JfYnVmX2xlbl07CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaG9ydCBidWZmZXIgZm9yIHN1cnJvdW5kaW5nIGNoYXJzLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB1c2VmdWwgcHJpbWFyaWx5IGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gUm9wZUZ1bmN0aW9ucy4gIFdlIHB1dCB0aGUgYnVmZmVyCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBoZXJlIHRvIGF2b2lkIGxvY2tpbmcgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBtdWx0aXRocmVhZGVkIGNhc2UuCisgICAgICAvLyBUaGUgY2FjaGVkIHBhdGggaXMgZ2VuZXJhbGx5IGFzc3VtZWQgdG8gYmUgdmFsaWQKKyAgICAgIC8vIG9ubHkgaWYgdGhlIGJ1ZmZlciBpcyB2YWxpZC4KKyAgICAgIHN0YXRpYyB2b2lkIF9TX3NldGJ1ZihfUm9wZV9pdGVyYXRvcl9iYXNlJiBfX3gpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCBidWZmZXIgY29udGVudHMgZ2l2ZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwYXRoIGNhY2hlLgorICAgICAgc3RhdGljIHZvaWQgX1Nfc2V0Y2FjaGUoX1JvcGVfaXRlcmF0b3JfYmFzZSYgX194KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgYnVmZmVyIGNvbnRlbnRzIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhdGggY2FjaGUuCisgICAgICBzdGF0aWMgdm9pZCBfU19zZXRjYWNoZV9mb3JfaW5jcihfUm9wZV9pdGVyYXRvcl9iYXNlJiBfX3gpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFzIGFib3ZlLCBidXQgYXNzdW1lcyBwYXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FjaGUgaXMgdmFsaWQgZm9yIHByZXZpb3VzIHBvc24uCisgICAgICBfUm9wZV9pdGVyYXRvcl9iYXNlKCkgeyB9CisKKyAgICAgIF9Sb3BlX2l0ZXJhdG9yX2Jhc2UoX1JvcGVSZXAqIF9fcm9vdCwgc2l6ZV90IF9fcG9zKQorICAgICAgOiBfTV9jdXJyZW50X3BvcyhfX3BvcyksIF9NX3Jvb3QoX19yb290KSwgX01fYnVmX3B0cigwKSB7IH0KKworICAgICAgdm9pZCBfTV9pbmNyKHNpemVfdCBfX24pOworICAgICAgdm9pZCBfTV9kZWNyKHNpemVfdCBfX24pOworICAgIHB1YmxpYzoKKyAgICAgIHNpemVfdAorICAgICAgaW5kZXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fY3VycmVudF9wb3M7IH0KKyAgICAKKyAgICAgIF9Sb3BlX2l0ZXJhdG9yX2Jhc2UoY29uc3QgX1JvcGVfaXRlcmF0b3JfYmFzZSYgX194KQorICAgICAgeworICAgICAgICBpZiAoMCAhPSBfX3guX01fYnVmX3B0cikKKwkgICp0aGlzID0gX194OworCWVsc2UKKwkgIHsKKyAgICAgICAgICAgIF9NX2N1cnJlbnRfcG9zID0gX194Ll9NX2N1cnJlbnRfcG9zOworICAgICAgICAgICAgX01fcm9vdCA9IF9feC5fTV9yb290OworICAgICAgICAgICAgX01fYnVmX3B0ciA9IDA7CisJICB9CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBjbGFzcyBfUm9wZV9pdGVyYXRvcjsKKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBjbGFzcyBfUm9wZV9jb25zdF9pdGVyYXRvcgorICAgIDogcHVibGljIF9Sb3BlX2l0ZXJhdG9yX2Jhc2U8X0NoYXJULCBfQWxsb2M+CisgICAgeworICAgICAgZnJpZW5kIGNsYXNzIHJvcGU8X0NoYXJULCBfQWxsb2M+OworICAgIHByb3RlY3RlZDoKKyAgICAgIHR5cGVkZWYgX1JvcGVfUm9wZVJlcDxfQ2hhclQsIF9BbGxvYz4gX1JvcGVSZXA7CisgICAgICAvLyBUaGUgb25lIGZyb20gdGhlIGJhc2UgY2xhc3MgbWF5IG5vdCBiZSBkaXJlY3RseSB2aXNpYmxlLgorICAgICAgX1JvcGVfY29uc3RfaXRlcmF0b3IoY29uc3QgX1JvcGVSZXAqIF9fcm9vdCwgc2l6ZV90IF9fcG9zKQorICAgICAgOiBfUm9wZV9pdGVyYXRvcl9iYXNlPF9DaGFyVCwgX0FsbG9jPihjb25zdF9jYXN0PF9Sb3BlUmVwKj4oX19yb290KSwKKwkJCQkJICAgIF9fcG9zKQorICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgbm9uY29uc3QgaXRlcmF0b3JzIG1vZGlmeSByb290IHJlZiBjb3VudAorICAgICAgeyB9CisgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0NoYXJUIHJlZmVyZW5jZTsgICAvLyBSZWFsbHkgYSB2YWx1ZS4gIFJldHVybmluZyBhIHJlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdvdWxkIGJlIGEgbWVzcywgc2luY2UgaXQgd291bGQgaGF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGJlIGluY2x1ZGVkIGluIHJlZmNvdW50LgorICAgICAgdHlwZWRlZiBjb25zdCBfQ2hhclQqIHBvaW50ZXI7CisKKyAgICBwdWJsaWM6CisgICAgICBfUm9wZV9jb25zdF9pdGVyYXRvcigpIHsgfTsKKworICAgICAgX1JvcGVfY29uc3RfaXRlcmF0b3IoY29uc3QgX1JvcGVfY29uc3RfaXRlcmF0b3ImIF9feCkKKyAgICAgIDogX1JvcGVfaXRlcmF0b3JfYmFzZTxfQ2hhclQsX0FsbG9jPihfX3gpIHsgfQorCisgICAgICBfUm9wZV9jb25zdF9pdGVyYXRvcihjb25zdCBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsX0FsbG9jPiYgX194KTsKKyAgICAKKyAgICAgIF9Sb3BlX2NvbnN0X2l0ZXJhdG9yKGNvbnN0IHJvcGU8X0NoYXJULCBfQWxsb2M+JiBfX3IsIHNpemVfdCBfX3BvcykKKyAgICAgIDogX1JvcGVfaXRlcmF0b3JfYmFzZTxfQ2hhclQsX0FsbG9jPihfX3IuX01fdHJlZV9wdHIsIF9fcG9zKSB7IH0KKworICAgICAgX1JvcGVfY29uc3RfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcj0oY29uc3QgX1JvcGVfY29uc3RfaXRlcmF0b3ImIF9feCkKKyAgICAgIHsKKyAgICAgICAgaWYgKDAgIT0gX194Ll9NX2J1Zl9wdHIpCisJICAqKHN0YXRpY19jYXN0PF9Sb3BlX2l0ZXJhdG9yX2Jhc2U8X0NoYXJULCBfQWxsb2M+Kj4odGhpcykpID0gX194OworCWVsc2UKKwkgIHsKKyAgICAgICAgICAgIHRoaXMtPl9NX2N1cnJlbnRfcG9zID0gX194Ll9NX2N1cnJlbnRfcG9zOworICAgICAgICAgICAgdGhpcy0+X01fcm9vdCA9IF9feC5fTV9yb290OworICAgICAgICAgICAgdGhpcy0+X01fYnVmX3B0ciA9IDA7CisJICB9CisgICAgICAgIHJldHVybigqdGhpcyk7CisgICAgICB9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkKKyAgICAgIHsKKyAgICAgICAgaWYgKDAgPT0gdGhpcy0+X01fYnVmX3B0cikKKwkgIF9TX3NldGNhY2hlKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuICp0aGlzLT5fTV9idWZfcHRyOworICAgICAgfQorCisgICAgICAvLyBXaXRob3V0IHRoaXMgY29uc3QgdmVyc2lvbiwgUm9wZSBpdGVyYXRvcnMgZG8gbm90IG1lZXQgdGhlCisgICAgICAvLyByZXF1aXJlbWVudHMgb2YgYW4gSW5wdXQgSXRlcmF0b3IuCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICB7CisJcmV0dXJuICpjb25zdF9jYXN0PF9Sb3BlX2NvbnN0X2l0ZXJhdG9yJj4oKnRoaXMpOworICAgICAgfQorCisgICAgICBfUm9wZV9jb25zdF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworICAgICAgICBfX0dDX0NPTlNUIF9DaGFyVCogX19uZXh0OworICAgICAgICBpZiAoMCAhPSB0aGlzLT5fTV9idWZfcHRyCisJICAgICYmIChfX25leHQgPSB0aGlzLT5fTV9idWZfcHRyICsgMSkgPCB0aGlzLT5fTV9idWZfZW5kKQorCSAgeworICAgICAgICAgICAgdGhpcy0+X01fYnVmX3B0ciA9IF9fbmV4dDsKKyAgICAgICAgICAgICsrdGhpcy0+X01fY3VycmVudF9wb3M7CisJICB9CisJZWxzZQorCSAgdGhpcy0+X01faW5jcigxKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIF9Sb3BlX2NvbnN0X2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrPShwdHJkaWZmX3QgX19uKQorICAgICAgeworICAgICAgICBpZiAoX19uID49IDApCisJICB0aGlzLT5fTV9pbmNyKF9fbik7CisJZWxzZQorCSAgdGhpcy0+X01fZGVjcigtX19uKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIF9Sb3BlX2NvbnN0X2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3ItLSgpCisgICAgICB7CisgICAgICAgIHRoaXMtPl9NX2RlY3IoMSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX1JvcGVfY29uc3RfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvci09KHB0cmRpZmZfdCBfX24pCisgICAgICB7CisgICAgICAgIGlmIChfX24gPj0gMCkKKwkgIHRoaXMtPl9NX2RlY3IoX19uKTsKKwllbHNlCisJICB0aGlzLT5fTV9pbmNyKC1fX24pOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX1JvcGVfY29uc3RfaXRlcmF0b3IKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeworICAgICAgICBzaXplX3QgX19vbGRfcG9zID0gdGhpcy0+X01fY3VycmVudF9wb3M7CisgICAgICAgIHRoaXMtPl9NX2luY3IoMSk7CisgICAgICAgIHJldHVybiBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsX0FsbG9jPih0aGlzLT5fTV9yb290LCBfX29sZF9wb3MpOworICAgICAgICAvLyBUaGlzIG1ha2VzIGEgc3Vic2VxdWVudCBkZXJlZmVyZW5jZSBleHBlbnNpdmUuCisgICAgICAgIC8vIFBlcmhhcHMgd2Ugc2hvdWxkIGluc3RlYWQgY29weSB0aGUgaXRlcmF0b3IKKyAgICAgICAgLy8gaWYgaXQgaGFzIGEgdmFsaWQgY2FjaGU/CisgICAgICB9CisKKyAgICAgIF9Sb3BlX2NvbnN0X2l0ZXJhdG9yCisgICAgICBvcGVyYXRvci0tKGludCkKKyAgICAgIHsKKyAgICAgICAgc2l6ZV90IF9fb2xkX3BvcyA9IHRoaXMtPl9NX2N1cnJlbnRfcG9zOworICAgICAgICB0aGlzLT5fTV9kZWNyKDEpOworICAgICAgICByZXR1cm4gX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJULF9BbGxvYz4odGhpcy0+X01fcm9vdCwgX19vbGRfcG9zKTsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUMiwgY2xhc3MgX0FsbG9jMj4KKyAgICAgICAgZnJpZW5kIF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVDIsIF9BbGxvYzI+CisgICAgICAgIG9wZXJhdG9yLShjb25zdCBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQyLCBfQWxsb2MyPiYgX194LAorCQkgIHB0cmRpZmZfdCBfX24pOworCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQyLCBjbGFzcyBfQWxsb2MyPgorICAgICAgICBmcmllbmQgX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJUMiwgX0FsbG9jMj4KKyAgICAgICAgb3BlcmF0b3IrKGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVDIsIF9BbGxvYzI+JiBfX3gsCisJCSAgcHRyZGlmZl90IF9fbik7CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVDIsIGNsYXNzIF9BbGxvYzI+CisgICAgICAgIGZyaWVuZCBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQyLCBfQWxsb2MyPgorICAgICAgICBvcGVyYXRvcisocHRyZGlmZl90IF9fbiwKKwkJICBjb25zdCBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQyLCBfQWxsb2MyPiYgX194KTsKKworICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKHNpemVfdCBfX24pCisgICAgICB7IHJldHVybiByb3BlPF9DaGFyVCwgX0FsbG9jPjo6X1NfZmV0Y2godGhpcy0+X01fcm9vdCwKKwkJCQkJICAgICAgdGhpcy0+X01fY3VycmVudF9wb3MgKyBfX24pOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVDIsIGNsYXNzIF9BbGxvYzI+CisgICAgICAgIGZyaWVuZCBib29sCisgICAgICAgIG9wZXJhdG9yPT0oY29uc3QgX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJUMiwgX0FsbG9jMj4mIF9feCwKKwkJICAgY29uc3QgX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJUMiwgX0FsbG9jMj4mIF9feSk7CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVDIsIGNsYXNzIF9BbGxvYzI+CisgICAgICAgIGZyaWVuZCBib29sCisgICAgICAgIG9wZXJhdG9yPChjb25zdCBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQyLCBfQWxsb2MyPiYgX194LAorCQkgIGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVDIsIF9BbGxvYzI+JiBfX3kpOworCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQyLCBjbGFzcyBfQWxsb2MyPgorICAgICAgICBmcmllbmQgcHRyZGlmZl90CisgICAgICAgIG9wZXJhdG9yLShjb25zdCBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQyLCBfQWxsb2MyPiYgX194LAorCQkgIGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVDIsIF9BbGxvYzI+JiBfX3kpOworICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgY2xhc3MgX1JvcGVfaXRlcmF0b3IKKyAgICA6IHB1YmxpYyBfUm9wZV9pdGVyYXRvcl9iYXNlPF9DaGFyVCwgX0FsbG9jPgorICAgIHsKKyAgICAgIGZyaWVuZCBjbGFzcyByb3BlPF9DaGFyVCwgX0FsbG9jPjsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Sb3BlX2l0ZXJhdG9yX2Jhc2U8X0NoYXJULCBfQWxsb2M+OjpfUm9wZVJlcCBfUm9wZVJlcDsKKyAgICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+KiBfTV9yb290X3JvcGU7CisKKyAgICAgIC8vIHJvb3QgaXMgdHJlYXRlZCBhcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoaXMsIGFuZCBpcyB1c2VkIHRvCisgICAgICAvLyBkZXRlY3QgY2hhbmdlcyB0byB0aGUgdW5kZXJseWluZyByb3BlLgorCisgICAgICAvLyBSb290IGlzIGluY2x1ZGVkIGluIHRoZSByZWZlcmVuY2UgY291bnQuICBUaGlzIGlzIG5lY2Vzc2FyeQorICAgICAgLy8gc28gdGhhdCB3ZSBjYW4gZGV0ZWN0IGNoYW5nZXMgcmVsaWFibHkuICBVbmZvcnR1bmF0ZWx5LCBpdAorICAgICAgLy8gcmVxdWlyZXMgY2FyZWZ1bCBib29ra2VlcGluZyBmb3IgdGhlIG5vbkdDIGNhc2UuCisgICAgICBfUm9wZV9pdGVyYXRvcihyb3BlPF9DaGFyVCwgX0FsbG9jPiogX19yLCBzaXplX3QgX19wb3MpCisgICAgICA6IF9Sb3BlX2l0ZXJhdG9yX2Jhc2U8X0NoYXJULCBfQWxsb2M+KF9fci0+X01fdHJlZV9wdHIsIF9fcG9zKSwKKyAgICAgICAgX01fcm9vdF9yb3BlKF9fcikKKyAgICAgIHsgX1JvcGVSZXA6Ol9TX3JlZih0aGlzLT5fTV9yb290KTsKKyAgICAgICAgaWYgKCEoX19yIC0+IGVtcHR5KCkpKQorCSAgX1Nfc2V0Y2FjaGUoKnRoaXMpOworICAgICAgfQorCisgICAgICB2b2lkIF9NX2NoZWNrKCk7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfUm9wZV9jaGFyX3JlZl9wcm94eTxfQ2hhclQsIF9BbGxvYz4gIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgX1JvcGVfY2hhcl9yZWZfcHJveHk8X0NoYXJULCBfQWxsb2M+KiBwb2ludGVyOworCisgICAgICByb3BlPF9DaGFyVCwgX0FsbG9jPiYKKyAgICAgIGNvbnRhaW5lcigpCisgICAgICB7IHJldHVybiAqX01fcm9vdF9yb3BlOyB9CisKKyAgICAgIF9Sb3BlX2l0ZXJhdG9yKCkKKyAgICAgIHsKKyAgICAgICAgdGhpcy0+X01fcm9vdCA9IDA7ICAvLyBOZWVkZWQgZm9yIHJlZmVyZW5jZSBjb3VudGluZy4KKyAgICAgIH07CisKKyAgICAgIF9Sb3BlX2l0ZXJhdG9yKGNvbnN0IF9Sb3BlX2l0ZXJhdG9yJiBfX3gpCisgICAgICA6IF9Sb3BlX2l0ZXJhdG9yX2Jhc2U8X0NoYXJULCBfQWxsb2M+KF9feCkKKyAgICAgIHsKKyAgICAgICAgX01fcm9vdF9yb3BlID0gX194Ll9NX3Jvb3Rfcm9wZTsKKyAgICAgICAgX1JvcGVSZXA6Ol9TX3JlZih0aGlzLT5fTV9yb290KTsKKyAgICAgIH0KKworICAgICAgX1JvcGVfaXRlcmF0b3Iocm9wZTxfQ2hhclQsIF9BbGxvYz4mIF9fciwgc2l6ZV90IF9fcG9zKTsKKworICAgICAgfl9Sb3BlX2l0ZXJhdG9yKCkKKyAgICAgIHsgX1JvcGVSZXA6Ol9TX3VucmVmKHRoaXMtPl9NX3Jvb3QpOyB9CisKKyAgICAgIF9Sb3BlX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9Sb3BlX2l0ZXJhdG9yJiBfX3gpCisgICAgICB7CisgICAgICAgIF9Sb3BlUmVwKiBfX29sZCA9IHRoaXMtPl9NX3Jvb3Q7CisJCisgICAgICAgIF9Sb3BlUmVwOjpfU19yZWYoX194Ll9NX3Jvb3QpOworICAgICAgICBpZiAoMCAhPSBfX3guX01fYnVmX3B0cikKKwkgIHsKKyAgICAgICAgICAgIF9NX3Jvb3Rfcm9wZSA9IF9feC5fTV9yb290X3JvcGU7CisgICAgICAgICAgICAqKHN0YXRpY19jYXN0PF9Sb3BlX2l0ZXJhdG9yX2Jhc2U8X0NoYXJULCBfQWxsb2M+Kj4odGhpcykpID0gX194OworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgdGhpcy0+X01fY3VycmVudF9wb3MgPSBfX3guX01fY3VycmVudF9wb3M7CisgICAgICAgICAgICB0aGlzLT5fTV9yb290ID0gX194Ll9NX3Jvb3Q7CisgICAgICAgICAgICBfTV9yb290X3JvcGUgPSBfX3guX01fcm9vdF9yb3BlOworICAgICAgICAgICAgdGhpcy0+X01fYnVmX3B0ciA9IDA7CisJICB9CisgICAgICAgIF9Sb3BlUmVwOjpfU191bnJlZihfX29sZCk7CisgICAgICAgIHJldHVybigqdGhpcyk7CisgICAgICB9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkKKyAgICAgIHsKKyAgICAgICAgX01fY2hlY2soKTsKKyAgICAgICAgaWYgKDAgPT0gdGhpcy0+X01fYnVmX3B0cikKKwkgIHJldHVybiBfUm9wZV9jaGFyX3JlZl9wcm94eTxfQ2hhclQsIF9BbGxvYz4oX01fcm9vdF9yb3BlLAorCQkJCQkJICAgICAgdGhpcy0+X01fY3VycmVudF9wb3MpOworCWVsc2UKKwkgIHJldHVybiBfUm9wZV9jaGFyX3JlZl9wcm94eTxfQ2hhclQsIF9BbGxvYz4oX01fcm9vdF9yb3BlLAorCQkJCQkJICAgICAgdGhpcy0+X01fY3VycmVudF9wb3MsCisJCQkJCQkgICAgICAqdGhpcy0+X01fYnVmX3B0cik7CisgICAgICB9CisKKyAgICAgIC8vIFNlZSBhYm92ZSBjb21tZW50LgorICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeworCXJldHVybiAqY29uc3RfY2FzdDxfUm9wZV9pdGVyYXRvciY+KCp0aGlzKTsKKyAgICAgIH0KKworICAgICAgX1JvcGVfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcisrKCkKKyAgICAgIHsKKyAgICAgICAgdGhpcy0+X01faW5jcigxKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfUm9wZV9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKz0ocHRyZGlmZl90IF9fbikKKyAgICAgIHsKKyAgICAgICAgaWYgKF9fbiA+PSAwKQorCSAgdGhpcy0+X01faW5jcihfX24pOworCWVsc2UKKwkgIHRoaXMtPl9NX2RlY3IoLV9fbik7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfUm9wZV9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yLS0oKQorICAgICAgeworICAgICAgICB0aGlzLT5fTV9kZWNyKDEpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIF9Sb3BlX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3ItPShwdHJkaWZmX3QgX19uKQorICAgICAgeworICAgICAgICBpZiAoX19uID49IDApCisJICB0aGlzLT5fTV9kZWNyKF9fbik7CisJZWxzZQorCSAgdGhpcy0+X01faW5jcigtX19uKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIF9Sb3BlX2l0ZXJhdG9yCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsKKyAgICAgICAgc2l6ZV90IF9fb2xkX3BvcyA9IHRoaXMtPl9NX2N1cnJlbnRfcG9zOworICAgICAgICB0aGlzLT5fTV9pbmNyKDEpOworICAgICAgICByZXR1cm4gX1JvcGVfaXRlcmF0b3I8X0NoYXJULF9BbGxvYz4oX01fcm9vdF9yb3BlLCBfX29sZF9wb3MpOworICAgICAgfQorCisgICAgICBfUm9wZV9pdGVyYXRvcgorICAgICAgb3BlcmF0b3ItLShpbnQpCisgICAgICB7CisgICAgICAgIHNpemVfdCBfX29sZF9wb3MgPSB0aGlzLT5fTV9jdXJyZW50X3BvczsKKyAgICAgICAgdGhpcy0+X01fZGVjcigxKTsKKyAgICAgICAgcmV0dXJuIF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCxfQWxsb2M+KF9NX3Jvb3Rfcm9wZSwgX19vbGRfcG9zKTsKKyAgICAgIH0KKworICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKHB0cmRpZmZfdCBfX24pCisgICAgICB7IHJldHVybiBfUm9wZV9jaGFyX3JlZl9wcm94eTxfQ2hhclQsIF9BbGxvYz4oX01fcm9vdF9yb3BlLAorCQkJCQkJICAgIHRoaXMtPl9NX2N1cnJlbnRfcG9zCisJCQkJCQkgICAgKyBfX24pOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVDIsIGNsYXNzIF9BbGxvYzI+CisgICAgICAgIGZyaWVuZCBib29sCisgICAgICAgIG9wZXJhdG9yPT0oY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJUMiwgX0FsbG9jMj4mIF9feCwKKwkJICAgY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJUMiwgX0FsbG9jMj4mIF9feSk7CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVDIsIGNsYXNzIF9BbGxvYzI+CisgICAgICAgIGZyaWVuZCBib29sCisgICAgICAgIG9wZXJhdG9yPChjb25zdCBfUm9wZV9pdGVyYXRvcjxfQ2hhclQyLCBfQWxsb2MyPiYgX194LAorCQkgIGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVDIsIF9BbGxvYzI+JiBfX3kpOworCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQyLCBjbGFzcyBfQWxsb2MyPgorICAgICAgICBmcmllbmQgcHRyZGlmZl90CisgICAgICAgIG9wZXJhdG9yLShjb25zdCBfUm9wZV9pdGVyYXRvcjxfQ2hhclQyLCBfQWxsb2MyPiYgX194LAorCQkgIGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVDIsIF9BbGxvYzI+JiBfX3kpOworCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQyLCBjbGFzcyBfQWxsb2MyPgorICAgICAgICBmcmllbmQgX1JvcGVfaXRlcmF0b3I8X0NoYXJUMiwgX0FsbG9jMj4KKyAgICAgICAgb3BlcmF0b3ItKGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVDIsIF9BbGxvYzI+JiBfX3gsIHB0cmRpZmZfdCBfX24pOworCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQyLCBjbGFzcyBfQWxsb2MyPgorICAgICAgICBmcmllbmQgX1JvcGVfaXRlcmF0b3I8X0NoYXJUMiwgX0FsbG9jMj4KKyAgICAgICAgb3BlcmF0b3IrKGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVDIsIF9BbGxvYzI+JiBfX3gsIHB0cmRpZmZfdCBfX24pOworCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQyLCBjbGFzcyBfQWxsb2MyPgorICAgICAgICBmcmllbmQgX1JvcGVfaXRlcmF0b3I8X0NoYXJUMiwgX0FsbG9jMj4KKyAgICAgICAgb3BlcmF0b3IrKHB0cmRpZmZfdCBfX24sIGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVDIsIF9BbGxvYzI+JiBfX3gpOworICAgIH07CisKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgc3RydWN0IF9Sb3BlX2Jhc2UKKyAgICA6IHB1YmxpYyBfQWxsb2MKKyAgICB7CisgICAgICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKKworICAgICAgYWxsb2NhdG9yX3R5cGUKKyAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdAorICAgICAgeyByZXR1cm4gKnN0YXRpY19jYXN0PGNvbnN0IF9BbGxvYyo+KHRoaXMpOyB9CisKKyAgICAgIGFsbG9jYXRvcl90eXBlJgorICAgICAgX01fZ2V0X2FsbG9jYXRvcigpCisgICAgICB7IHJldHVybiAqc3RhdGljX2Nhc3Q8X0FsbG9jKj4odGhpcyk7IH0KKworICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmCisgICAgICBfTV9nZXRfYWxsb2NhdG9yKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICpzdGF0aWNfY2FzdDxjb25zdCBfQWxsb2MqPih0aGlzKTsgfQorCisgICAgICB0eXBlZGVmIF9Sb3BlX1JvcGVSZXA8X0NoYXJULCBfQWxsb2M+IF9Sb3BlUmVwOworICAgICAgLy8gVGhlIG9uZSBpbiBfQmFzZSBtYXkgbm90IGJlIHZpc2libGUgZHVlIHRvIHRlbXBsYXRlIHJ1bGVzLgorCisgICAgICBfUm9wZV9iYXNlKF9Sb3BlUmVwKiBfX3QsIGNvbnN0IGFsbG9jYXRvcl90eXBlJikKKyAgICAgIDogX01fdHJlZV9wdHIoX190KSB7IH0KKworICAgICAgX1JvcGVfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpIHsgfQorCisgICAgICAvLyBUaGUgb25seSBkYXRhIG1lbWJlciBvZiBhIHJvcGU6CisgICAgICBfUm9wZVJlcCAqX01fdHJlZV9wdHI7CisKKyNkZWZpbmUgX19ST1BFX0RFRklORV9BTExPQyhfVHAsIF9fbmFtZSkgXAorICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIFwKKyAgICAgICAgICBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxfVHA+OjpvdGhlciBfX25hbWUjI0FsbG9jOyBcCisgICAgICAgIHN0YXRpYyBfVHAqIF9fbmFtZSMjX2FsbG9jYXRlKHNpemVfdCBfX24pIFwKKyAgICAgICAgICB7IHJldHVybiBfX25hbWUjI0FsbG9jKCkuYWxsb2NhdGUoX19uKTsgfSBcCisgICAgICAgIHN0YXRpYyB2b2lkIF9fbmFtZSMjX2RlYWxsb2NhdGUoX1RwICpfX3AsIHNpemVfdCBfX24pIFwKKyAgICAgICAgICB7IF9fbmFtZSMjQWxsb2MoKS5kZWFsbG9jYXRlKF9fcCwgX19uKTsgfQorICAgICAgX19ST1BFX0RFRklORV9BTExPQ1MoX0FsbG9jKQorI3VuZGVmIF9fUk9QRV9ERUZJTkVfQUxMT0MKKworCXByb3RlY3RlZDoKKyAgICAgIF9Sb3BlX2Jhc2UmCisgICAgICBvcGVyYXRvcj0oY29uc3QgX1JvcGVfYmFzZSYpOworICAgICAgCisgICAgICBfUm9wZV9iYXNlKGNvbnN0IF9Sb3BlX2Jhc2UmKTsKKyAgICB9OworCisgIC8qKgorICAgKiAgVGhpcyBpcyBhbiBTR0kgZXh0ZW5zaW9uLgorICAgKiAgQGluZ3JvdXAgU0dJZXh0ZW5zaW9ucworICAgKiAgQGRvY3RvZG8KKyAgICovCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBjbGFzcyByb3BlIDogcHVibGljIF9Sb3BlX2Jhc2U8X0NoYXJULCBfQWxsb2M+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0NoYXJUIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIF9DaGFyVCBjb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIGNvbnN0IF9DaGFyVCogY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+IGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4gY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIF9Sb3BlX2NoYXJfcmVmX3Byb3h5PF9DaGFyVCwgX0FsbG9jPiByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIF9Sb3BlX2NoYXJfcHRyX3Byb3h5PF9DaGFyVCwgX0FsbG9jPiBwb2ludGVyOworCisgICAgICBmcmllbmQgY2xhc3MgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+OworICAgICAgZnJpZW5kIGNsYXNzIF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPjsKKyAgICAgIGZyaWVuZCBzdHJ1Y3QgX1JvcGVfUm9wZVJlcDxfQ2hhclQsIF9BbGxvYz47CisgICAgICBmcmllbmQgY2xhc3MgX1JvcGVfaXRlcmF0b3JfYmFzZTxfQ2hhclQsIF9BbGxvYz47CisgICAgICBmcmllbmQgY2xhc3MgX1JvcGVfY2hhcl9wdHJfcHJveHk8X0NoYXJULCBfQWxsb2M+OworICAgICAgZnJpZW5kIGNsYXNzIF9Sb3BlX2NoYXJfcmVmX3Byb3h5PF9DaGFyVCwgX0FsbG9jPjsKKyAgICAgIGZyaWVuZCBzdHJ1Y3QgX1JvcGVfUm9wZVN1YnN0cmluZzxfQ2hhclQsIF9BbGxvYz47CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmIF9Sb3BlX2Jhc2U8X0NoYXJULCBfQWxsb2M+IF9CYXNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CisgICAgICB1c2luZyBfQmFzZTo6X01fdHJlZV9wdHI7CisgICAgICB1c2luZyBfQmFzZTo6Z2V0X2FsbG9jYXRvcjsKKyAgICAgIHVzaW5nIF9CYXNlOjpfTV9nZXRfYWxsb2NhdG9yOyAgICAgIAorICAgICAgdHlwZWRlZiBfX0dDX0NPTlNUIF9DaGFyVCogX0NzdHJwdHI7CisgICAgICAKKyAgICAgIHN0YXRpYyBfQ2hhclQgX1NfZW1wdHlfY19zdHJbMV07CisgICAgICAKKyAgICAgIHN0YXRpYyBib29sCisgICAgICBfU19pczAoX0NoYXJUIF9fYykKKyAgICAgIHsgcmV0dXJuIF9fYyA9PSBfU19lb3MoKF9DaGFyVCopMCk7IH0KKyAgICAgIAorICAgICAgZW51bSB7IF9TX2NvcHlfbWF4ID0gMjMgfTsKKyAgICAgICAgICAgICAgICAvLyBGb3Igc3RyaW5ncyBzaG9ydGVyIHRoYW4gX1NfY29weV9tYXgsIHdlIGNvcHkgdG8KKyAgICAgICAgICAgICAgICAvLyBjb25jYXRlbmF0ZS4KKworICAgICAgdHlwZWRlZiBfUm9wZV9Sb3BlUmVwPF9DaGFyVCwgX0FsbG9jPiBfUm9wZVJlcDsKKyAgICAgIHR5cGVkZWYgX1JvcGVfUm9wZUNvbmNhdGVuYXRpb248X0NoYXJULCBfQWxsb2M+IF9Sb3BlQ29uY2F0ZW5hdGlvbjsKKyAgICAgIHR5cGVkZWYgX1JvcGVfUm9wZUxlYWY8X0NoYXJULCBfQWxsb2M+IF9Sb3BlTGVhZjsKKyAgICAgIHR5cGVkZWYgX1JvcGVfUm9wZUZ1bmN0aW9uPF9DaGFyVCwgX0FsbG9jPiBfUm9wZUZ1bmN0aW9uOworICAgICAgdHlwZWRlZiBfUm9wZV9Sb3BlU3Vic3RyaW5nPF9DaGFyVCwgX0FsbG9jPiBfUm9wZVN1YnN0cmluZzsKKworICAgICAgLy8gUmV0cmlldmUgYSBjaGFyYWN0ZXIgYXQgdGhlIGluZGljYXRlZCBwb3NpdGlvbi4KKyAgICAgIHN0YXRpYyBfQ2hhclQgX1NfZmV0Y2goX1JvcGVSZXAqIF9fciwgc2l6ZV90eXBlIF9fcG9zKTsKKworI2lmbmRlZiBfX0dDCisgICAgICAvLyBPYnRhaW4gYSBwb2ludGVyIHRvIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIGluZGljYXRlZCBwb3NpdGlvbi4KKyAgICAgIC8vIFRoZSBwb2ludGVyIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgY2hhcmFjdGVyLgorICAgICAgLy8gSWYgc3VjaCBhIHBvaW50ZXIgY2Fubm90IGJlIHByb2R1Y2VkLCBhcyBpcyBmcmVxdWVudGx5IHRoZQorICAgICAgLy8gY2FzZSwgMCBpcyByZXR1cm5lZCBpbnN0ZWFkLgorICAgICAgLy8gKFJldHVybnMgbm9uemVybyBvbmx5IGlmIGFsbCBub2RlcyBpbiB0aGUgcGF0aCBoYXZlIGEgcmVmY291bnQKKyAgICAgIC8vIG9mIDEuKQorICAgICAgc3RhdGljIF9DaGFyVCogX1NfZmV0Y2hfcHRyKF9Sb3BlUmVwKiBfX3IsIHNpemVfdHlwZSBfX3Bvcyk7CisjZW5kaWYKKworICAgICAgc3RhdGljIGJvb2wKKyAgICAgIF9TX2FwcGx5X3RvX3BpZWNlcygvLyBzaG91bGQgYmUgdGVtcGxhdGUgcGFyYW1ldGVyCisJCQkgX1JvcGVfY2hhcl9jb25zdW1lcjxfQ2hhclQ+JiBfX2MsCisJCQkgY29uc3QgX1JvcGVSZXAqIF9fciwKKwkJCSBzaXplX3QgX19iZWdpbiwgc2l6ZV90IF9fZW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWdpbiBhbmQgZW5kIGFyZSBhc3N1bWVkIHRvIGJlIGluIHJhbmdlLgorCisjaWZuZGVmIF9fR0MKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfU191bnJlZihfUm9wZVJlcCogX190KQorICAgICAgeyBfUm9wZVJlcDo6X1NfdW5yZWYoX190KTsgfQorCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX1NfcmVmKF9Sb3BlUmVwKiBfX3QpCisgICAgICB7IF9Sb3BlUmVwOjpfU19yZWYoX190KTsgfQorCisjZWxzZSAvKiBfX0dDICovCisgICAgICBzdGF0aWMgdm9pZCBfU191bnJlZihfUm9wZVJlcCopIHsgfQorICAgICAgc3RhdGljIHZvaWQgX1NfcmVmKF9Sb3BlUmVwKikgeyB9CisjZW5kaWYKKworI2lmZGVmIF9fR0MKKyAgICAgIHR5cGVkZWYgX1JvcGVfUm9wZVJlcDxfQ2hhclQsIF9BbGxvYz4qIF9TZWxmX2Rlc3RydWN0X3B0cjsKKyNlbHNlCisgICAgICB0eXBlZGVmIF9Sb3BlX3NlbGZfZGVzdHJ1Y3RfcHRyPF9DaGFyVCwgX0FsbG9jPiBfU2VsZl9kZXN0cnVjdF9wdHI7CisjZW5kaWYKKworICAgICAgLy8gX1Jlc3VsdCBpcyBjb3VudGVkIGluIHJlZmNvdW50LgorICAgICAgc3RhdGljIF9Sb3BlUmVwKiBfU19zdWJzdHJpbmcoX1JvcGVSZXAqIF9fYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXJ0LCBzaXplX3QgX19lbmRwMSk7CisKKyAgICAgIHN0YXRpYyBfUm9wZVJlcCogX1NfY29uY2F0X2NoYXJfaXRlcihfUm9wZVJlcCogX19yLAorCQkJCQkgICBjb25zdCBfQ2hhclQqIF9faXRlciwgc2l6ZV90IF9fc2xlbik7CisgICAgICAvLyBDb25jYXRlbmF0ZSByb3BlIGFuZCBjaGFyIHB0ciwgY29weWluZyBfX3MuCisgICAgICAvLyBTaG91bGQgcmVhbGx5IHRha2UgYW4gYXJiaXRyYXJ5IGl0ZXJhdG9yLgorICAgICAgLy8gUmVzdWx0IGlzIGNvdW50ZWQgaW4gcmVmY291bnQuCisgICAgICBzdGF0aWMgX1JvcGVSZXAqIF9TX2Rlc3RyX2NvbmNhdF9jaGFyX2l0ZXIoX1JvcGVSZXAqIF9fciwKKwkJCQkJCSBjb25zdCBfQ2hhclQqIF9faXRlciwKKwkJCQkJCSBzaXplX3QgX19zbGVuKQorCS8vIEFzIGFib3ZlLCBidXQgb25lIHJlZmVyZW5jZSB0byBfX3IgaXMgYWJvdXQgdG8gYmUKKwkvLyBkZXN0cm95ZWQuICBUaHVzIHRoZSBwaWVjZXMgbWF5IGJlIHJlY3ljbGVkIGlmIGFsbAorCS8vIHJlbGV2YW50IHJlZmVyZW5jZSBjb3VudHMgYXJlIDEuCisjaWZkZWYgX19HQworCS8vIFdlIGNhbid0IHJlYWxseSBkbyBhbnl0aGluZyBzaW5jZSByZWZjb3VudHMgYXJlIHVuYXZhaWxhYmxlLgorICAgICAgeyByZXR1cm4gX1NfY29uY2F0X2NoYXJfaXRlcihfX3IsIF9faXRlciwgX19zbGVuKTsgfQorI2Vsc2UKKyAgICAgIDsKKyNlbmRpZgorCisgICAgICBzdGF0aWMgX1JvcGVSZXAqIF9TX2NvbmNhdChfUm9wZVJlcCogX19sZWZ0LCBfUm9wZVJlcCogX19yaWdodCk7CisgICAgICAvLyBHZW5lcmFsIGNvbmNhdGVuYXRpb24gb24gX1JvcGVSZXAuICBfUmVzdWx0CisgICAgICAvLyBoYXMgcmVmY291bnQgb2YgMS4gIEFkanVzdHMgYXJndW1lbnQgcmVmY291bnRzLgorCisgICBwdWJsaWM6CisgICAgICB2b2lkCisgICAgICBhcHBseV90b19waWVjZXMoc2l6ZV90IF9fYmVnaW4sIHNpemVfdCBfX2VuZCwKKwkJICAgICAgX1JvcGVfY2hhcl9jb25zdW1lcjxfQ2hhclQ+JiBfX2MpIGNvbnN0CisgICAgICB7IF9TX2FwcGx5X3RvX3BpZWNlcyhfX2MsIHRoaXMtPl9NX3RyZWVfcHRyLCBfX2JlZ2luLCBfX2VuZCk7IH0KKworICAgcHJvdGVjdGVkOgorCisgICAgICBzdGF0aWMgc2l6ZV90CisgICAgICBfU19yb3VuZGVkX3VwX3NpemUoc2l6ZV90IF9fbikKKyAgICAgIHsgcmV0dXJuIF9Sb3BlTGVhZjo6X1Nfcm91bmRlZF91cF9zaXplKF9fbik7IH0KKworICAgICAgc3RhdGljIHNpemVfdAorICAgICAgX1NfYWxsb2NhdGVkX2NhcGFjaXR5KHNpemVfdCBfX24pCisgICAgICB7CisJaWYgKF9TX2lzX2Jhc2ljX2NoYXJfdHlwZSgoX0NoYXJUKikwKSkKKwkgIHJldHVybiBfU19yb3VuZGVkX3VwX3NpemUoX19uKSAtIDE7CisJZWxzZQorCSAgcmV0dXJuIF9TX3JvdW5kZWRfdXBfc2l6ZShfX24pOworCQorICAgICAgfQorCisgICAgICAvLyBBbGxvY2F0ZSBhbmQgY29uc3RydWN0IGEgUm9wZUxlYWYgdXNpbmcgdGhlIHN1cHBsaWVkIGFsbG9jYXRvcgorICAgICAgLy8gVGFrZXMgb3duZXJzaGlwIG9mIHMgaW5zdGVhZCBvZiBjb3B5aW5nLgorICAgICAgc3RhdGljIF9Sb3BlTGVhZioKKyAgICAgIF9TX25ld19Sb3BlTGVhZihfX0dDX0NPTlNUIF9DaGFyVCAqX19zLAorCQkgICAgICBzaXplX3QgX19zaXplLCBhbGxvY2F0b3JfdHlwZSYgX19hKQorICAgICAgeworCV9Sb3BlTGVhZiogX19zcGFjZSA9IHR5cGVuYW1lIF9CYXNlOjpfTEFsbG9jKF9fYSkuYWxsb2NhdGUoMSk7CisJcmV0dXJuIG5ldyhfX3NwYWNlKSBfUm9wZUxlYWYoX19zLCBfX3NpemUsIF9fYSk7CisgICAgICB9CisKKyAgICAgIHN0YXRpYyBfUm9wZUNvbmNhdGVuYXRpb24qCisgICAgICBfU19uZXdfUm9wZUNvbmNhdGVuYXRpb24oX1JvcGVSZXAqIF9fbGVmdCwgX1JvcGVSZXAqIF9fcmlnaHQsCisJCQkgICAgICAgYWxsb2NhdG9yX3R5cGUmIF9fYSkKKyAgICAgIHsKKwlfUm9wZUNvbmNhdGVuYXRpb24qIF9fc3BhY2UgPSB0eXBlbmFtZSBfQmFzZTo6X0NBbGxvYyhfX2EpLmFsbG9jYXRlKDEpOworCXJldHVybiBuZXcoX19zcGFjZSkgX1JvcGVDb25jYXRlbmF0aW9uKF9fbGVmdCwgX19yaWdodCwgX19hKTsKKyAgICAgIH0KKworICAgICAgc3RhdGljIF9Sb3BlRnVuY3Rpb24qCisgICAgICBfU19uZXdfUm9wZUZ1bmN0aW9uKGNoYXJfcHJvZHVjZXI8X0NoYXJUPiogX19mLAorCQkJICBzaXplX3QgX19zaXplLCBib29sIF9fZCwgYWxsb2NhdG9yX3R5cGUmIF9fYSkKKyAgICAgIHsKKwlfUm9wZUZ1bmN0aW9uKiBfX3NwYWNlID0gdHlwZW5hbWUgX0Jhc2U6Ol9GQWxsb2MoX19hKS5hbGxvY2F0ZSgxKTsKKwlyZXR1cm4gbmV3KF9fc3BhY2UpIF9Sb3BlRnVuY3Rpb24oX19mLCBfX3NpemUsIF9fZCwgX19hKTsKKyAgICAgIH0KKworICAgICAgc3RhdGljIF9Sb3BlU3Vic3RyaW5nKgorICAgICAgX1NfbmV3X1JvcGVTdWJzdHJpbmcoX1JvcGVfUm9wZVJlcDxfQ2hhclQsX0FsbG9jPiogX19iLCBzaXplX3QgX19zLAorCQkJICAgc2l6ZV90IF9fbCwgYWxsb2NhdG9yX3R5cGUmIF9fYSkKKyAgICAgIHsKKwlfUm9wZVN1YnN0cmluZyogX19zcGFjZSA9IHR5cGVuYW1lIF9CYXNlOjpfU0FsbG9jKF9fYSkuYWxsb2NhdGUoMSk7CisJcmV0dXJuIG5ldyhfX3NwYWNlKSBfUm9wZVN1YnN0cmluZyhfX2IsIF9fcywgX19sLCBfX2EpOworICAgICAgfQorICAgICAgCisgICAgICBzdGF0aWMgX1JvcGVMZWFmKgorICAgICAgX1NfUm9wZUxlYWZfZnJvbV91bm93bmVkX2NoYXJfcHRyKGNvbnN0IF9DaGFyVCAqX19zLAorCQkJCQlzaXplX3QgX19zaXplLCBhbGxvY2F0b3JfdHlwZSYgX19hKQorI2RlZmluZSBfX1NUTF9ST1BFX0ZST01fVU5PV05FRF9DSEFSX1BUUihfX3MsIF9fc2l6ZSwgX19hKSBcCisgICAgICAgICAgICAgICAgX1NfUm9wZUxlYWZfZnJvbV91bm93bmVkX2NoYXJfcHRyKF9fcywgX19zaXplLCBfX2EpCisgICAgICB7CisJaWYgKDAgPT0gX19zaXplKQorCSAgcmV0dXJuIDA7CisJX0NoYXJUKiBfX2J1ZiA9IF9fYS5hbGxvY2F0ZShfU19yb3VuZGVkX3VwX3NpemUoX19zaXplKSk7CisJCisJX191bmluaXRpYWxpemVkX2NvcHlfbl9hKF9fcywgX19zaXplLCBfX2J1ZiwgX19hKTsKKwlfU19jb25kX3N0b3JlX2VvcyhfX2J1ZltfX3NpemVdKTsKKwlfX3RyeQorCSAgeyByZXR1cm4gX1NfbmV3X1JvcGVMZWFmKF9fYnVmLCBfX3NpemUsIF9fYSk7IH0KKwlfX2NhdGNoKC4uLikKKwkgIHsKKwkgICAgX1JvcGVSZXA6Ol9fU1RMX0ZSRUVfU1RSSU5HKF9fYnVmLCBfX3NpemUsIF9fYSk7CisJICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgfQorICAgICAgfQorCisgICAgICAvLyBDb25jYXRlbmF0aW9uIG9mIG5vbmVtcHR5IHN0cmluZ3MuCisgICAgICAvLyBBbHdheXMgYnVpbGRzIGEgY29uY2F0ZW5hdGlvbiBub2RlLgorICAgICAgLy8gUmViYWxhbmNlcyBpZiB0aGUgcmVzdWx0IGlzIHRvbyBkZWVwLgorICAgICAgLy8gUmVzdWx0IGhhcyByZWZjb3VudCAxLgorICAgICAgLy8gRG9lcyBub3QgaW5jcmVtZW50IGxlZnQgYW5kIHJpZ2h0IHJlZiBjb3VudHMgZXZlbiB0aG91Z2gKKyAgICAgIC8vIHRoZXkgYXJlIHJlZmVyZW5jZWQuCisgICAgICBzdGF0aWMgX1JvcGVSZXAqCisgICAgICBfU190cmVlX2NvbmNhdChfUm9wZVJlcCogX19sZWZ0LCBfUm9wZVJlcCogX19yaWdodCk7CisKKyAgICAgIC8vIENvbmNhdGVuYXRpb24gaGVscGVyIGZ1bmN0aW9ucworICAgICAgc3RhdGljIF9Sb3BlTGVhZioKKyAgICAgIF9TX2xlYWZfY29uY2F0X2NoYXJfaXRlcihfUm9wZUxlYWYqIF9fciwKKwkJCSAgICAgICBjb25zdCBfQ2hhclQqIF9faXRlciwgc2l6ZV90IF9fc2xlbik7CisgICAgICAvLyBDb25jYXRlbmF0ZSBieSBjb3B5aW5nIGxlYWYuCisgICAgICAvLyBzaG91bGQgdGFrZSBhbiBhcmJpdHJhcnkgaXRlcmF0b3IKKyAgICAgIC8vIHJlc3VsdCBoYXMgcmVmY291bnQgMS4KKyNpZm5kZWYgX19HQworICAgICAgc3RhdGljIF9Sb3BlTGVhZioKKyAgICAgIF9TX2Rlc3RyX2xlYWZfY29uY2F0X2NoYXJfaXRlcihfUm9wZUxlYWYqIF9fciwKKwkJCQkgICAgIGNvbnN0IF9DaGFyVCogX19pdGVyLCBzaXplX3QgX19zbGVuKTsKKyAgICAgIC8vIEEgdmVyc2lvbiB0aGF0IHBvdGVudGlhbGx5IGNsb2JiZXJzIF9fciBpZiBfX3ItPl9NX3JlZl9jb3VudCA9PSAxLgorI2VuZGlmCisKKyAgICBwcml2YXRlOgorICAgICAgCisgICAgICBzdGF0aWMgc2l6ZV90IF9TX2NoYXJfcHRyX2xlbihjb25zdCBfQ2hhclQqIF9fcyk7CisgICAgICAvLyBzbGlnaHRseSBnZW5lcmFsaXplZCBzdHJsZW4KKworICAgICAgcm9wZShfUm9wZVJlcCogX190LCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX190LCBfX2EpIHsgfQorCisKKyAgICAgIC8vIENvcHkgX19yIHRvIHRoZSBfQ2hhclQgYnVmZmVyLgorICAgICAgLy8gUmV0dXJucyBfX2J1ZmZlciArIF9fci0+X01fc2l6ZS4KKyAgICAgIC8vIEFzc3VtZXMgdGhhdCBidWZmZXIgaXMgdW5pbml0aWFsaXplZC4KKyAgICAgIHN0YXRpYyBfQ2hhclQqIF9TX2ZsYXR0ZW4oX1JvcGVSZXAqIF9fciwgX0NoYXJUKiBfX2J1ZmZlcik7CisKKyAgICAgIC8vIEFnYWluLCB3aXRoIGV4cGxpY2l0IHN0YXJ0aW5nIHBvc2l0aW9uIGFuZCBsZW5ndGguCisgICAgICAvLyBBc3N1bWVzIHRoYXQgYnVmZmVyIGlzIHVuaW5pdGlhbGl6ZWQuCisgICAgICBzdGF0aWMgX0NoYXJUKiBfU19mbGF0dGVuKF9Sb3BlUmVwKiBfX3IsCisJCQkJc2l6ZV90IF9fc3RhcnQsIHNpemVfdCBfX2xlbiwKKwkJCQlfQ2hhclQqIF9fYnVmZmVyKTsKKworICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcKKyAgICAgIF9TX21pbl9sZW5bX19kZXRhaWw6Ol9TX21heF9yb3BlX2RlcHRoICsgMV07CisgICAgICAKKyAgICAgIHN0YXRpYyBib29sCisgICAgICBfU19pc19iYWxhbmNlZChfUm9wZVJlcCogX19yKQorICAgICAgeyByZXR1cm4gKF9fci0+X01fc2l6ZSA+PSBfU19taW5fbGVuW19fci0+X01fZGVwdGhdKTsgfQorCisgICAgICBzdGF0aWMgYm9vbAorICAgICAgX1NfaXNfYWxtb3N0X2JhbGFuY2VkKF9Sb3BlUmVwKiBfX3IpCisgICAgICB7IHJldHVybiAoX19yLT5fTV9kZXB0aCA9PSAwCisJCXx8IF9fci0+X01fc2l6ZSA+PSBfU19taW5fbGVuW19fci0+X01fZGVwdGggLSAxXSk7IH0KKworICAgICAgc3RhdGljIGJvb2wKKyAgICAgIF9TX2lzX3JvdWdobHlfYmFsYW5jZWQoX1JvcGVSZXAqIF9fcikKKyAgICAgIHsgcmV0dXJuIChfX3ItPl9NX2RlcHRoIDw9IDEKKwkJfHwgX19yLT5fTV9zaXplID49IF9TX21pbl9sZW5bX19yLT5fTV9kZXB0aCAtIDJdKTsgfQorCisgICAgICAvLyBBc3N1bWVzIHRoZSByZXN1bHQgaXMgbm90IGVtcHR5LgorICAgICAgc3RhdGljIF9Sb3BlUmVwKgorICAgICAgX1NfY29uY2F0X2FuZF9zZXRfYmFsYW5jZWQoX1JvcGVSZXAqIF9fbGVmdCwgX1JvcGVSZXAqIF9fcmlnaHQpCisgICAgICB7CisJX1JvcGVSZXAqIF9fcmVzdWx0ID0gX1NfY29uY2F0KF9fbGVmdCwgX19yaWdodCk7CisJaWYgKF9TX2lzX2JhbGFuY2VkKF9fcmVzdWx0KSkKKwkgIF9fcmVzdWx0LT5fTV9pc19iYWxhbmNlZCA9IHRydWU7CisJcmV0dXJuIF9fcmVzdWx0OworICAgICAgfQorCisgICAgICAvLyBUaGUgYmFzaWMgcmViYWxhbmNpbmcgb3BlcmF0aW9uLiAgTG9naWNhbGx5IGNvcGllcyB0aGUKKyAgICAgIC8vIHJvcGUuICBUaGUgcmVzdWx0IGhhcyByZWZjb3VudCBvZiAxLiAgVGhlIGNsaWVudCB3aWxsCisgICAgICAvLyB1c3VhbGx5IGRlY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIF9fci4KKyAgICAgIC8vIFRoZSByZXN1bHQgaXMgd2l0aGluIGhlaWdodCAyIG9mIGJhbGFuY2VkIGJ5IHRoZSBhYm92ZQorICAgICAgLy8gZGVmaW5pdGlvbi4KKyAgICAgIHN0YXRpYyBfUm9wZVJlcCogX1NfYmFsYW5jZShfUm9wZVJlcCogX19yKTsKKworICAgICAgLy8gQWRkIGFsbCB1bmJhbGFuY2VkIHN1YnRyZWVzIHRvIHRoZSBmb3Jlc3Qgb2YgYmFsYW5jZWQgdHJlZXMuCisgICAgICAvLyBVc2VkIG9ubHkgYnkgYmFsYW5jZS4KKyAgICAgIHN0YXRpYyB2b2lkIF9TX2FkZF90b19mb3Jlc3QoX1JvcGVSZXAqX19yLCBfUm9wZVJlcCoqIF9fZm9yZXN0KTsKKworICAgICAgLy8gQWRkIF9fciB0byBmb3Jlc3QsIGFzc3VtaW5nIF9fciBpcyBhbHJlYWR5IGJhbGFuY2VkLgorICAgICAgc3RhdGljIHZvaWQgX1NfYWRkX2xlYWZfdG9fZm9yZXN0KF9Sb3BlUmVwKiBfX3IsIF9Sb3BlUmVwKiogX19mb3Jlc3QpOworICAgICAgCisgICAgICAvLyBQcmludCB0byBzdGRvdXQsIGV4cG9zaW5nIHN0cnVjdHVyZQorICAgICAgc3RhdGljIHZvaWQgX1NfZHVtcChfUm9wZVJlcCogX19yLCBpbnQgX19pbmRlbnQgPSAwKTsKKyAgICAgIAorICAgICAgLy8gUmV0dXJuIC0xLCAwLCBvciAxIGlmIF9feCA8IF9feSwgX194ID09IF9feSwgb3IgX194ID4gX195IHJlc3AuCisgICAgICBzdGF0aWMgaW50IF9TX2NvbXBhcmUoY29uc3QgX1JvcGVSZXAqIF9feCwgY29uc3QgX1JvcGVSZXAqIF9feSk7CisgICAgICAKKyAgICBwdWJsaWM6CisgICAgICBib29sCisgICAgICBlbXB0eSgpIGNvbnN0CisgICAgICB7IHJldHVybiAwID09IHRoaXMtPl9NX3RyZWVfcHRyOyB9CisgICAgICAKKyAgICAgIC8vIENvbXBhcmlzb24gbWVtYmVyIGZ1bmN0aW9uLiAgVGhpcyBpcyBwdWJsaWMgb25seSBmb3IgdGhvc2UKKyAgICAgIC8vIGNsaWVudHMgdGhhdCBuZWVkIGEgdGVybmFyeSBjb21wYXJpc29uLiAgT3RoZXJzCisgICAgICAvLyBzaG91bGQgdXNlIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycyBiZWxvdy4KKyAgICAgIGludAorICAgICAgY29tcGFyZShjb25zdCByb3BlJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfU19jb21wYXJlKHRoaXMtPl9NX3RyZWVfcHRyLCBfX3kuX01fdHJlZV9wdHIpOyB9CisKKyAgICAgIHJvcGUoY29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2EpCisgICAgICB7CisJdGhpcy0+X01fdHJlZV9wdHIgPQorCSAgX19TVExfUk9QRV9GUk9NX1VOT1dORURfQ0hBUl9QVFIoX19zLCBfU19jaGFyX3B0cl9sZW4oX19zKSwKKwkJCQkJICAgX01fZ2V0X2FsbG9jYXRvcigpKTsKKyAgICAgIH0KKworICAgICAgcm9wZShjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90IF9fbGVuLAorCSAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2EpCisgICAgICB7CisJdGhpcy0+X01fdHJlZV9wdHIgPQorCSAgX19TVExfUk9QRV9GUk9NX1VOT1dORURfQ0hBUl9QVFIoX19zLCBfX2xlbiwgX01fZ2V0X2FsbG9jYXRvcigpKTsKKyAgICAgIH0KKworICAgICAgLy8gU2hvdWxkIHBlcmhhcHMgYmUgdGVtcGxhdGl6ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBpdGVyYXRvciB0eXBlCisgICAgICAvLyBhbmQgdXNlIFNlcXVlbmNlX2J1ZmZlci4gIChJdCBzaG91bGQgcGVyaGFwcyB1c2Ugc2VxdWVuY2VfYnVmZmVyCisgICAgICAvLyBldmVuIG5vdy4pCisgICAgICByb3BlKGNvbnN0IF9DaGFyVCogX19zLCBjb25zdCBfQ2hhclQqIF9fZSwKKwkgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19hKQorICAgICAgeworCXRoaXMtPl9NX3RyZWVfcHRyID0KKwkgIF9fU1RMX1JPUEVfRlJPTV9VTk9XTkVEX0NIQVJfUFRSKF9fcywgX19lIC0gX19zLCBfTV9nZXRfYWxsb2NhdG9yKCkpOworICAgICAgfQorCisgICAgICByb3BlKGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX3MsIGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX2UsCisJICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9TX3N1YnN0cmluZyhfX3MuX01fcm9vdCwgX19zLl9NX2N1cnJlbnRfcG9zLAorCQkJICAgX19lLl9NX2N1cnJlbnRfcG9zKSwgX19hKQorICAgICAgeyB9CisKKyAgICAgIHJvcGUoY29uc3QgaXRlcmF0b3ImIF9fcywgY29uc3QgaXRlcmF0b3ImIF9fZSwKKwkgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX1Nfc3Vic3RyaW5nKF9fcy5fTV9yb290LCBfX3MuX01fY3VycmVudF9wb3MsCisJCQkgICBfX2UuX01fY3VycmVudF9wb3MpLCBfX2EpCisgICAgICB7IH0KKworICAgICAgcm9wZShfQ2hhclQgX19jLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19hKQorICAgICAgeworCV9DaGFyVCogX19idWYgPSB0aGlzLT5fRGF0YV9hbGxvY2F0ZShfU19yb3VuZGVkX3VwX3NpemUoMSkpOworCQorCV9NX2dldF9hbGxvY2F0b3IoKS5jb25zdHJ1Y3QoX19idWYsIF9fYyk7CisJX190cnkKKwkgIHsKKwkgICAgdGhpcy0+X01fdHJlZV9wdHIgPSBfU19uZXdfUm9wZUxlYWYoX19idWYsIDEsCisJCQkJCQlfTV9nZXRfYWxsb2NhdG9yKCkpOworCSAgfQorCV9fY2F0Y2goLi4uKQorCSAgeworCSAgICBfUm9wZVJlcDo6X19TVExfRlJFRV9TVFJJTkcoX19idWYsIDEsIF9NX2dldF9hbGxvY2F0b3IoKSk7CisJICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgfQorICAgICAgfQorCisgICAgICByb3BlKHNpemVfdCBfX24sIF9DaGFyVCBfX2MsCisJICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpOworCisgICAgICByb3BlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZSgwLCBfX2EpIHsgfQorCisgICAgICAvLyBDb25zdHJ1Y3QgYSByb3BlIGZyb20gYSBmdW5jdGlvbiB0aGF0IGNhbiBjb21wdXRlIGl0cyBtZW1iZXJzCisgICAgICByb3BlKGNoYXJfcHJvZHVjZXI8X0NoYXJUPiAqX19mbiwgc2l6ZV90IF9fbGVuLCBib29sIF9fZGVsZXRlX2ZuLAorCSAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2EpCisgICAgICB7CisJdGhpcy0+X01fdHJlZV9wdHIgPSAoMCA9PSBfX2xlbikgPworCSAgMCA6IF9TX25ld19Sb3BlRnVuY3Rpb24oX19mbiwgX19sZW4sIF9fZGVsZXRlX2ZuLCBfX2EpOworICAgICAgfQorCisgICAgICByb3BlKGNvbnN0IHJvcGUmIF9feCwgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9feC5fTV90cmVlX3B0ciwgX19hKQorICAgICAgeyBfU19yZWYodGhpcy0+X01fdHJlZV9wdHIpOyB9CisKKyAgICAgIH5yb3BlKCkgdGhyb3coKQorICAgICAgeyBfU191bnJlZih0aGlzLT5fTV90cmVlX3B0cik7IH0KKworICAgICAgcm9wZSYKKyAgICAgIG9wZXJhdG9yPShjb25zdCByb3BlJiBfX3gpCisgICAgICB7CisJX1JvcGVSZXAqIF9fb2xkID0gdGhpcy0+X01fdHJlZV9wdHI7CisJdGhpcy0+X01fdHJlZV9wdHIgPSBfX3guX01fdHJlZV9wdHI7CisJX1NfcmVmKHRoaXMtPl9NX3RyZWVfcHRyKTsKKwlfU191bnJlZihfX29sZCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBjbGVhcigpCisgICAgICB7CisJX1NfdW5yZWYodGhpcy0+X01fdHJlZV9wdHIpOworCXRoaXMtPl9NX3RyZWVfcHRyID0gMDsKKyAgICAgIH0KKyAgICAgIAorICAgICAgdm9pZAorICAgICAgcHVzaF9iYWNrKF9DaGFyVCBfX3gpCisgICAgICB7CisJX1JvcGVSZXAqIF9fb2xkID0gdGhpcy0+X01fdHJlZV9wdHI7CisJdGhpcy0+X01fdHJlZV9wdHIKKwkgID0gX1NfZGVzdHJfY29uY2F0X2NoYXJfaXRlcih0aGlzLT5fTV90cmVlX3B0ciwgJl9feCwgMSk7CisJX1NfdW5yZWYoX19vbGQpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBwb3BfYmFjaygpCisgICAgICB7CisJX1JvcGVSZXAqIF9fb2xkID0gdGhpcy0+X01fdHJlZV9wdHI7CisJdGhpcy0+X01fdHJlZV9wdHIgPSBfU19zdWJzdHJpbmcodGhpcy0+X01fdHJlZV9wdHIsCisJCQkJCSAwLCB0aGlzLT5fTV90cmVlX3B0ci0+X01fc2l6ZSAtIDEpOworCV9TX3VucmVmKF9fb2xkKTsKKyAgICAgIH0KKworICAgICAgX0NoYXJUCisgICAgICBiYWNrKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9TX2ZldGNoKHRoaXMtPl9NX3RyZWVfcHRyLCB0aGlzLT5fTV90cmVlX3B0ci0+X01fc2l6ZSAtIDEpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfZnJvbnQoX0NoYXJUIF9feCkKKyAgICAgIHsKKwlfUm9wZVJlcCogX19vbGQgPSB0aGlzLT5fTV90cmVlX3B0cjsKKwlfUm9wZVJlcCogX19sZWZ0ID0KKwkgIF9fU1RMX1JPUEVfRlJPTV9VTk9XTkVEX0NIQVJfUFRSKCZfX3gsIDEsIF9NX2dldF9hbGxvY2F0b3IoKSk7CisJX190cnkKKwkgIHsKKwkgICAgdGhpcy0+X01fdHJlZV9wdHIgPSBfU19jb25jYXQoX19sZWZ0LCB0aGlzLT5fTV90cmVlX3B0cik7CisJICAgIF9TX3VucmVmKF9fb2xkKTsKKwkgICAgX1NfdW5yZWYoX19sZWZ0KTsKKwkgIH0KKwlfX2NhdGNoKC4uLikKKwkgIHsKKwkgICAgX1NfdW5yZWYoX19sZWZ0KTsKKwkgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICB9CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHBvcF9mcm9udCgpCisgICAgICB7CisJX1JvcGVSZXAqIF9fb2xkID0gdGhpcy0+X01fdHJlZV9wdHI7CisJdGhpcy0+X01fdHJlZV9wdHIKKwkgID0gX1Nfc3Vic3RyaW5nKHRoaXMtPl9NX3RyZWVfcHRyLCAxLCB0aGlzLT5fTV90cmVlX3B0ci0+X01fc2l6ZSk7CisJX1NfdW5yZWYoX19vbGQpOworICAgICAgfQorCisgICAgICBfQ2hhclQKKyAgICAgIGZyb250KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9TX2ZldGNoKHRoaXMtPl9NX3RyZWVfcHRyLCAwKTsgfQorCisgICAgICB2b2lkCisgICAgICBiYWxhbmNlKCkKKyAgICAgIHsKKwlfUm9wZVJlcCogX19vbGQgPSB0aGlzLT5fTV90cmVlX3B0cjsKKwl0aGlzLT5fTV90cmVlX3B0ciA9IF9TX2JhbGFuY2UodGhpcy0+X01fdHJlZV9wdHIpOworCV9TX3VucmVmKF9fb2xkKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgY29weShfQ2hhclQqIF9fYnVmZmVyKSBjb25zdAorICAgICAgeworCV9EZXN0cm95X2NvbnN0KF9fYnVmZmVyLCBfX2J1ZmZlciArIHNpemUoKSwgX01fZ2V0X2FsbG9jYXRvcigpKTsKKwlfU19mbGF0dGVuKHRoaXMtPl9NX3RyZWVfcHRyLCBfX2J1ZmZlcik7CisgICAgICB9CisKKyAgICAgIC8vIFRoaXMgaXMgdGhlIGNvcHkgZnVuY3Rpb24gZnJvbSB0aGUgc3RhbmRhcmQsIGJ1dAorICAgICAgLy8gd2l0aCB0aGUgYXJndW1lbnRzIHJlb3JkZXJlZCB0byBtYWtlIGl0IGNvbnNpc3RlbnQgd2l0aCB0aGUKKyAgICAgIC8vIHJlc3Qgb2YgdGhlIGludGVyZmFjZS4KKyAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGd1YXJhbnRlZWQgbm90IHRvIGNvbXBpbGUgaWYgdGhlIGRyYWZ0IHN0YW5kYXJkCisgICAgICAvLyBvcmRlciBpcyBhc3N1bWVkLgorICAgICAgc2l6ZV90eXBlCisgICAgICBjb3B5KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgX0NoYXJUKiBfX2J1ZmZlcikgY29uc3QKKyAgICAgIHsKKwlzaXplX3QgX19zaXplID0gc2l6ZSgpOworCXNpemVfdCBfX2xlbiA9IChfX3BvcyArIF9fbiA+IF9fc2l6ZT8gX19zaXplIC0gX19wb3MgOiBfX24pOworCisJX0Rlc3Ryb3lfY29uc3QoX19idWZmZXIsIF9fYnVmZmVyICsgX19sZW4sIF9NX2dldF9hbGxvY2F0b3IoKSk7CisJX1NfZmxhdHRlbih0aGlzLT5fTV90cmVlX3B0ciwgX19wb3MsIF9fbGVuLCBfX2J1ZmZlcik7CisJcmV0dXJuIF9fbGVuOworICAgICAgfQorCisgICAgICAvLyBQcmludCB0byBzdGRvdXQsIGV4cG9zaW5nIHN0cnVjdHVyZS4gIE1heSBiZSB1c2VmdWwgZm9yCisgICAgICAvLyBwZXJmb3JtYW5jZSBkZWJ1Z2dpbmcuCisgICAgICB2b2lkCisgICAgICBkdW1wKCkKKyAgICAgIHsgX1NfZHVtcCh0aGlzLT5fTV90cmVlX3B0cik7IH0KKyAgICAgIAorICAgICAgLy8gQ29udmVydCB0byAwIHRlcm1pbmF0ZWQgc3RyaW5nIGluIG5ldyBhbGxvY2F0ZWQgbWVtb3J5LgorICAgICAgLy8gRW1iZWRkZWQgMHMgaW4gdGhlIGlucHV0IGRvIG5vdCB0ZXJtaW5hdGUgdGhlIGNvcHkuCisgICAgICBjb25zdCBfQ2hhclQqIGNfc3RyKCkgY29uc3Q7CisKKyAgICAgIC8vIEFzIGFib3ZlLCBidXQgYWxzbyB1c2UgdGhlIGZsYXR0ZW5lZCByZXByZXNlbnRhdGlvbiBhcworICAgICAgLy8gdGhlIG5ldyByb3BlIHJlcHJlc2VudGF0aW9uLgorICAgICAgY29uc3QgX0NoYXJUKiByZXBsYWNlX3dpdGhfY19zdHIoKTsKKyAgICAgIAorICAgICAgLy8gUmVjbGFpbSBtZW1vcnkgZm9yIHRoZSBjX3N0ciBnZW5lcmF0ZWQgZmxhdHRlbmVkIHN0cmluZy4KKyAgICAgIC8vIEludGVudGlvbmFsbHkgdW5kb2N1bWVudGVkLCBzaW5jZSBpdCdzIGhhcmQgdG8gc2F5IHdoZW4gdGhpcworICAgICAgLy8gaXMgc2FmZSBmb3IgbXVsdGlwbGUgdGhyZWFkcy4KKyAgICAgIHZvaWQKKyAgICAgIGRlbGV0ZV9jX3N0ciAoKQorICAgICAgeworCWlmICgwID09IHRoaXMtPl9NX3RyZWVfcHRyKQorCSAgcmV0dXJuOworCWlmIChfX2RldGFpbDo6X1NfbGVhZiA9PSB0aGlzLT5fTV90cmVlX3B0ci0+X01fdGFnICYmCisJICAgICgoX1JvcGVMZWFmKil0aGlzLT5fTV90cmVlX3B0ciktPl9NX2RhdGEgPT0KKwkgICAgdGhpcy0+X01fdHJlZV9wdHItPl9NX2Nfc3RyaW5nKQorCSAgeworCSAgICAvLyBSZXByZXNlbnRhdGlvbiBzaGFyZWQKKwkgICAgcmV0dXJuOworCSAgfQorI2lmbmRlZiBfX0dDCisJdGhpcy0+X01fdHJlZV9wdHItPl9NX2ZyZWVfY19zdHJpbmcoKTsKKyNlbmRpZgorCXRoaXMtPl9NX3RyZWVfcHRyLT5fTV9jX3N0cmluZyA9IDA7CisgICAgICB9CisKKyAgICAgIF9DaGFyVAorICAgICAgb3BlcmF0b3JbXSAoc2l6ZV90eXBlIF9fcG9zKSBjb25zdAorICAgICAgeyByZXR1cm4gX1NfZmV0Y2godGhpcy0+X01fdHJlZV9wdHIsIF9fcG9zKTsgfQorCisgICAgICBfQ2hhclQKKyAgICAgIGF0KHNpemVfdHlwZSBfX3BvcykgY29uc3QKKyAgICAgIHsKKwkvLyBpZiAoX19wb3MgPj0gc2l6ZSgpKSB0aHJvdyBvdXRfb2ZfcmFuZ2U7ICAvLyBYWFgKKwlyZXR1cm4gKCp0aGlzKVtfX3Bvc107CisgICAgICB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybihjb25zdF9pdGVyYXRvcih0aGlzLT5fTV90cmVlX3B0ciwgMCkpOyB9CisKKyAgICAgIC8vIEFuIGVhc3kgd2F5IHRvIGdldCBhIGNvbnN0IGl0ZXJhdG9yIGZyb20gYSBub24tY29uc3QgY29udGFpbmVyLgorICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNvbnN0X2JlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuKGNvbnN0X2l0ZXJhdG9yKHRoaXMtPl9NX3RyZWVfcHRyLCAwKSk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybihjb25zdF9pdGVyYXRvcih0aGlzLT5fTV90cmVlX3B0ciwgc2l6ZSgpKSk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNvbnN0X2VuZCgpIGNvbnN0CisgICAgICB7IHJldHVybihjb25zdF9pdGVyYXRvcih0aGlzLT5fTV90cmVlX3B0ciwgc2l6ZSgpKSk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3QKKyAgICAgIHsJcmV0dXJuKDAgPT0gdGhpcy0+X01fdHJlZV9wdHI/IDAgOiB0aGlzLT5fTV90cmVlX3B0ci0+X01fc2l6ZSk7IH0KKyAgICAgIAorICAgICAgc2l6ZV90eXBlCisgICAgICBsZW5ndGgoKSBjb25zdAorICAgICAgewlyZXR1cm4gc2l6ZSgpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdAorICAgICAgeworCXJldHVybiBfU19taW5fbGVuW2ludChfX2RldGFpbDo6X1NfbWF4X3JvcGVfZGVwdGgpIC0gMV0gLSAxOworCS8vICBHdWFyYW50ZWVzIHRoYXQgdGhlIHJlc3VsdCBjYW4gYmUgc3VmZmljaWVudGx5CisJLy8gIGJhbGFuY2VkLiAgTG9uZ2VyIHJvcGVzIHdpbGwgcHJvYmFibHkgc3RpbGwgd29yaywKKwkvLyAgYnV0IGl0J3MgaGFyZGVyIHRvIG1ha2UgZ3VhcmFudGVlcy4KKyAgICAgIH0KKworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjb25zdF9yYmVnaW4oKSBjb25zdAorICAgICAgewlyZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisgICAgICAKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNvbnN0X3JlbmQoKSBjb25zdAorICAgICAgewlyZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQyLCBjbGFzcyBfQWxsb2MyPgorICAgICAgICBmcmllbmQgcm9wZTxfQ2hhclQyLCBfQWxsb2MyPgorICAgICAgICBvcGVyYXRvcisoY29uc3Qgcm9wZTxfQ2hhclQyLCBfQWxsb2MyPiYgX19sZWZ0LAorCQkgIGNvbnN0IHJvcGU8X0NoYXJUMiwgX0FsbG9jMj4mIF9fcmlnaHQpOworCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQyLCBjbGFzcyBfQWxsb2MyPgorICAgICAgICBmcmllbmQgcm9wZTxfQ2hhclQyLCBfQWxsb2MyPgorICAgICAgICBvcGVyYXRvcisoY29uc3Qgcm9wZTxfQ2hhclQyLCBfQWxsb2MyPiYgX19sZWZ0LCBjb25zdCBfQ2hhclQyKiBfX3JpZ2h0KTsKKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUMiwgY2xhc3MgX0FsbG9jMj4KKyAgICAgICAgZnJpZW5kIHJvcGU8X0NoYXJUMiwgX0FsbG9jMj4KKyAgICAgICAgb3BlcmF0b3IrKGNvbnN0IHJvcGU8X0NoYXJUMiwgX0FsbG9jMj4mIF9fbGVmdCwgX0NoYXJUMiBfX3JpZ2h0KTsKKworICAgICAgLy8gVGhlIHN5bW1ldHJpYyBjYXNlcyBhcmUgaW50ZW50aW9uYWxseSBvbWl0dGVkLCBzaW5jZSB0aGV5J3JlCisgICAgICAvLyBwcmVzdW1lZCB0byBiZSBsZXNzIGNvbW1vbiwgYW5kIHdlIGRvbid0IGhhbmRsZSB0aGVtIGFzIHdlbGwuCisKKyAgICAgIC8vIFRoZSBmb2xsb3dpbmcgc2hvdWxkIHJlYWxseSBiZSB0ZW1wbGF0aXplZC4gIFRoZSBmaXJzdAorICAgICAgLy8gYXJndW1lbnQgc2hvdWxkIGJlIGFuIGlucHV0IGl0ZXJhdG9yIG9yIGZvcndhcmQgaXRlcmF0b3Igd2l0aAorICAgICAgLy8gdmFsdWVfdHlwZSBfQ2hhclQuCisgICAgICByb3BlJgorICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19pdGVyLCBzaXplX3QgX19uKQorICAgICAgeworCV9Sb3BlUmVwKiBfX3Jlc3VsdCA9CisJICBfU19kZXN0cl9jb25jYXRfY2hhcl9pdGVyKHRoaXMtPl9NX3RyZWVfcHRyLCBfX2l0ZXIsIF9fbik7CisJX1NfdW5yZWYodGhpcy0+X01fdHJlZV9wdHIpOworCXRoaXMtPl9NX3RyZWVfcHRyID0gX19yZXN1bHQ7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICByb3BlJgorICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19jX3N0cmluZykKKyAgICAgIHsKKwlzaXplX3QgX19sZW4gPSBfU19jaGFyX3B0cl9sZW4oX19jX3N0cmluZyk7CisJYXBwZW5kKF9fY19zdHJpbmcsIF9fbGVuKTsKKwlyZXR1cm4oKnRoaXMpOworICAgICAgfQorCisgICAgICByb3BlJgorICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBjb25zdCBfQ2hhclQqIF9fZSkKKyAgICAgIHsKKwlfUm9wZVJlcCogX19yZXN1bHQgPQorCSAgX1NfZGVzdHJfY29uY2F0X2NoYXJfaXRlcih0aGlzLT5fTV90cmVlX3B0ciwgX19zLCBfX2UgLSBfX3MpOworCV9TX3VucmVmKHRoaXMtPl9NX3RyZWVfcHRyKTsKKwl0aGlzLT5fTV90cmVlX3B0ciA9IF9fcmVzdWx0OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgcm9wZSYKKyAgICAgIGFwcGVuZChjb25zdF9pdGVyYXRvciBfX3MsIGNvbnN0X2l0ZXJhdG9yIF9fZSkKKyAgICAgIHsKKwlfU2VsZl9kZXN0cnVjdF9wdHIgX19hcHBlbmRlZShfU19zdWJzdHJpbmcoX19zLl9NX3Jvb3QsCisJCQkJCQkgICBfX3MuX01fY3VycmVudF9wb3MsCisJCQkJCQkgICBfX2UuX01fY3VycmVudF9wb3MpKTsKKwlfUm9wZVJlcCogX19yZXN1bHQgPSBfU19jb25jYXQodGhpcy0+X01fdHJlZV9wdHIsIAorCQkJCSAgICAgICAoX1JvcGVSZXAqKV9fYXBwZW5kZWUpOworCV9TX3VucmVmKHRoaXMtPl9NX3RyZWVfcHRyKTsKKwl0aGlzLT5fTV90cmVlX3B0ciA9IF9fcmVzdWx0OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgcm9wZSYKKyAgICAgIGFwcGVuZChfQ2hhclQgX19jKQorICAgICAgeworCV9Sb3BlUmVwKiBfX3Jlc3VsdCA9CisJICBfU19kZXN0cl9jb25jYXRfY2hhcl9pdGVyKHRoaXMtPl9NX3RyZWVfcHRyLCAmX19jLCAxKTsKKwlfU191bnJlZih0aGlzLT5fTV90cmVlX3B0cik7CisJdGhpcy0+X01fdHJlZV9wdHIgPSBfX3Jlc3VsdDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHJvcGUmCisgICAgICBhcHBlbmQoKQorICAgICAgeyByZXR1cm4gYXBwZW5kKF9DaGFyVCgpKTsgfSAgLy8gWFhYIHdoeT8KKworICAgICAgcm9wZSYKKyAgICAgIGFwcGVuZChjb25zdCByb3BlJiBfX3kpCisgICAgICB7CisJX1JvcGVSZXAqIF9fcmVzdWx0ID0gX1NfY29uY2F0KHRoaXMtPl9NX3RyZWVfcHRyLCBfX3kuX01fdHJlZV9wdHIpOworCV9TX3VucmVmKHRoaXMtPl9NX3RyZWVfcHRyKTsKKwl0aGlzLT5fTV90cmVlX3B0ciA9IF9fcmVzdWx0OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgcm9wZSYKKyAgICAgIGFwcGVuZChzaXplX3QgX19uLCBfQ2hhclQgX19jKQorICAgICAgeworCXJvcGU8X0NoYXJULF9BbGxvYz4gX19sYXN0KF9fbiwgX19jKTsKKwlyZXR1cm4gYXBwZW5kKF9fbGFzdCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAocm9wZSYgX19iKQorICAgICAgeworCV9Sb3BlUmVwKiBfX3RtcCA9IHRoaXMtPl9NX3RyZWVfcHRyOworCXRoaXMtPl9NX3RyZWVfcHRyID0gX19iLl9NX3RyZWVfcHRyOworCV9fYi5fTV90cmVlX3B0ciA9IF9fdG1wOworICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgLy8gUmVzdWx0IGlzIGluY2x1ZGVkIGluIHJlZmNvdW50LgorICAgICAgc3RhdGljIF9Sb3BlUmVwKgorICAgICAgcmVwbGFjZShfUm9wZVJlcCogX19vbGQsIHNpemVfdCBfX3BvczEsCisJICAgICAgc2l6ZV90IF9fcG9zMiwgX1JvcGVSZXAqIF9fcikKKyAgICAgIHsKKwlpZiAoMCA9PSBfX29sZCkKKwkgIHsKKwkgICAgX1NfcmVmKF9fcik7CisJICAgIHJldHVybiBfX3I7CisJICB9CisJX1NlbGZfZGVzdHJ1Y3RfcHRyIF9fbGVmdChfU19zdWJzdHJpbmcoX19vbGQsIDAsIF9fcG9zMSkpOworCV9TZWxmX2Rlc3RydWN0X3B0ciBfX3JpZ2h0KF9TX3N1YnN0cmluZyhfX29sZCwgX19wb3MyLCBfX29sZC0+X01fc2l6ZSkpOworCV9Sb3BlUmVwKiBfX3Jlc3VsdDsKKworCWlmICgwID09IF9fcikKKwkgIF9fcmVzdWx0ID0gX1NfY29uY2F0KF9fbGVmdCwgX19yaWdodCk7CisJZWxzZQorCSAgeworCSAgICBfU2VsZl9kZXN0cnVjdF9wdHIgX19sZWZ0X3Jlc3VsdChfU19jb25jYXQoX19sZWZ0LCBfX3IpKTsKKwkgICAgX19yZXN1bHQgPSBfU19jb25jYXQoX19sZWZ0X3Jlc3VsdCwgX19yaWdodCk7CisJICB9CisJcmV0dXJuIF9fcmVzdWx0OworICAgICAgfQorCisgICAgcHVibGljOgorICAgICAgdm9pZAorICAgICAgaW5zZXJ0KHNpemVfdCBfX3AsIGNvbnN0IHJvcGUmIF9fcikKKyAgICAgIHsKKwlfUm9wZVJlcCogX19yZXN1bHQgPQorCSAgcmVwbGFjZSh0aGlzLT5fTV90cmVlX3B0ciwgX19wLCBfX3AsIF9fci5fTV90cmVlX3B0cik7CisJX1NfdW5yZWYodGhpcy0+X01fdHJlZV9wdHIpOworCXRoaXMtPl9NX3RyZWVfcHRyID0gX19yZXN1bHQ7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChzaXplX3QgX19wLCBzaXplX3QgX19uLCBfQ2hhclQgX19jKQorICAgICAgeworCXJvcGU8X0NoYXJULF9BbGxvYz4gX19yKF9fbixfX2MpOworCWluc2VydChfX3AsIF9fcik7CisgICAgICB9CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChzaXplX3QgX19wLCBjb25zdCBfQ2hhclQqIF9faSwgc2l6ZV90IF9fbikKKyAgICAgIHsKKwlfU2VsZl9kZXN0cnVjdF9wdHIgX19sZWZ0KF9TX3N1YnN0cmluZyh0aGlzLT5fTV90cmVlX3B0ciwgMCwgX19wKSk7CisJX1NlbGZfZGVzdHJ1Y3RfcHRyIF9fcmlnaHQoX1Nfc3Vic3RyaW5nKHRoaXMtPl9NX3RyZWVfcHRyLAorCQkJCQkJX19wLCBzaXplKCkpKTsKKwlfU2VsZl9kZXN0cnVjdF9wdHIgX19sZWZ0X3Jlc3VsdChfU19jb25jYXRfY2hhcl9pdGVyKF9fbGVmdCwgX19pLCBfX24pKTsKKwkvLyBfU18gZGVzdHJfY29uY2F0X2NoYXJfaXRlciBzaG91bGQgYmUgc2FmZSBoZXJlLgorCS8vIEJ1dCBhcyBpdCBzdGFuZHMgaXQncyBwcm9iYWJseSBub3QgYSB3aW4sIHNpbmNlIF9fbGVmdAorCS8vIGlzIGxpa2VseSB0byBoYXZlIGFkZGl0aW9uYWwgcmVmZXJlbmNlcy4KKwlfUm9wZVJlcCogX19yZXN1bHQgPSBfU19jb25jYXQoX19sZWZ0X3Jlc3VsdCwgX19yaWdodCk7CisJX1NfdW5yZWYodGhpcy0+X01fdHJlZV9wdHIpOworCXRoaXMtPl9NX3RyZWVfcHRyID0gX19yZXN1bHQ7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChzaXplX3QgX19wLCBjb25zdCBfQ2hhclQqIF9fY19zdHJpbmcpCisgICAgICB7CWluc2VydChfX3AsIF9fY19zdHJpbmcsIF9TX2NoYXJfcHRyX2xlbihfX2Nfc3RyaW5nKSk7IH0KKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KHNpemVfdCBfX3AsIF9DaGFyVCBfX2MpCisgICAgICB7IGluc2VydChfX3AsICZfX2MsIDEpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChzaXplX3QgX19wKQorICAgICAgeworCV9DaGFyVCBfX2MgPSBfQ2hhclQoKTsKKwlpbnNlcnQoX19wLCAmX19jLCAxKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KHNpemVfdCBfX3AsIGNvbnN0IF9DaGFyVCogX19pLCBjb25zdCBfQ2hhclQqIF9faikKKyAgICAgIHsKKwlyb3BlIF9fcihfX2ksIF9faik7CisJaW5zZXJ0KF9fcCwgX19yKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KHNpemVfdCBfX3AsIGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX2ksCisJICAgICBjb25zdCBjb25zdF9pdGVyYXRvciYgX19qKQorICAgICAgeworCXJvcGUgX19yKF9faSwgX19qKTsKKwlpbnNlcnQoX19wLCBfX3IpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoc2l6ZV90IF9fcCwgY29uc3QgaXRlcmF0b3ImIF9faSwKKwkgICAgIGNvbnN0IGl0ZXJhdG9yJiBfX2opCisgICAgICB7CisJcm9wZSBfX3IoX19pLCBfX2opOworCWluc2VydChfX3AsIF9fcik7CisgICAgICB9CisKKyAgICAgIC8vIChwb3NpdGlvbiwgbGVuZ3RoKSB2ZXJzaW9ucyBvZiByZXBsYWNlIG9wZXJhdGlvbnM6CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIHJlcGxhY2Uoc2l6ZV90IF9fcCwgc2l6ZV90IF9fbiwgY29uc3Qgcm9wZSYgX19yKQorICAgICAgeworCV9Sb3BlUmVwKiBfX3Jlc3VsdCA9CisJICByZXBsYWNlKHRoaXMtPl9NX3RyZWVfcHRyLCBfX3AsIF9fcCArIF9fbiwgX19yLl9NX3RyZWVfcHRyKTsKKwlfU191bnJlZih0aGlzLT5fTV90cmVlX3B0cik7CisJdGhpcy0+X01fdHJlZV9wdHIgPSBfX3Jlc3VsdDsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgcmVwbGFjZShzaXplX3QgX19wLCBzaXplX3QgX19uLAorCSAgICAgIGNvbnN0IF9DaGFyVCogX19pLCBzaXplX3QgX19pX2xlbikKKyAgICAgIHsKKwlyb3BlIF9fcihfX2ksIF9faV9sZW4pOworCXJlcGxhY2UoX19wLCBfX24sIF9fcik7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHJlcGxhY2Uoc2l6ZV90IF9fcCwgc2l6ZV90IF9fbiwgX0NoYXJUIF9fYykKKyAgICAgIHsKKwlyb3BlIF9fcihfX2MpOworCXJlcGxhY2UoX19wLCBfX24sIF9fcik7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHJlcGxhY2Uoc2l6ZV90IF9fcCwgc2l6ZV90IF9fbiwgY29uc3QgX0NoYXJUKiBfX2Nfc3RyaW5nKQorICAgICAgeworCXJvcGUgX19yKF9fY19zdHJpbmcpOworCXJlcGxhY2UoX19wLCBfX24sIF9fcik7CisgICAgICB9CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIHJlcGxhY2Uoc2l6ZV90IF9fcCwgc2l6ZV90IF9fbiwKKwkgICAgICBjb25zdCBfQ2hhclQqIF9faSwgY29uc3QgX0NoYXJUKiBfX2opCisgICAgICB7CisJcm9wZSBfX3IoX19pLCBfX2opOworCXJlcGxhY2UoX19wLCBfX24sIF9fcik7CisgICAgICB9CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIHJlcGxhY2Uoc2l6ZV90IF9fcCwgc2l6ZV90IF9fbiwKKwkgICAgICBjb25zdCBjb25zdF9pdGVyYXRvciYgX19pLCBjb25zdCBjb25zdF9pdGVyYXRvciYgX19qKQorICAgICAgeworCXJvcGUgX19yKF9faSwgX19qKTsKKwlyZXBsYWNlKF9fcCwgX19uLCBfX3IpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICByZXBsYWNlKHNpemVfdCBfX3AsIHNpemVfdCBfX24sCisJICAgICAgY29uc3QgaXRlcmF0b3ImIF9faSwgY29uc3QgaXRlcmF0b3ImIF9faikKKyAgICAgIHsKKwlyb3BlIF9fcihfX2ksIF9faik7CisJcmVwbGFjZShfX3AsIF9fbiwgX19yKTsKKyAgICAgIH0KKworICAgICAgLy8gU2luZ2xlIGNoYXJhY3RlciB2YXJpYW50czoKKyAgICAgIHZvaWQKKyAgICAgIHJlcGxhY2Uoc2l6ZV90IF9fcCwgX0NoYXJUIF9fYykKKyAgICAgIHsKKwlpdGVyYXRvciBfX2kodGhpcywgX19wKTsKKwkqX19pID0gX19jOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICByZXBsYWNlKHNpemVfdCBfX3AsIGNvbnN0IHJvcGUmIF9fcikKKyAgICAgIHsgcmVwbGFjZShfX3AsIDEsIF9fcik7IH0KKworICAgICAgdm9pZAorICAgICAgcmVwbGFjZShzaXplX3QgX19wLCBjb25zdCBfQ2hhclQqIF9faSwgc2l6ZV90IF9faV9sZW4pCisgICAgICB7IHJlcGxhY2UoX19wLCAxLCBfX2ksIF9faV9sZW4pOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHJlcGxhY2Uoc2l6ZV90IF9fcCwgY29uc3QgX0NoYXJUKiBfX2Nfc3RyaW5nKQorICAgICAgewlyZXBsYWNlKF9fcCwgMSwgX19jX3N0cmluZyk7IH0KKworICAgICAgdm9pZAorICAgICAgcmVwbGFjZShzaXplX3QgX19wLCBjb25zdCBfQ2hhclQqIF9faSwgY29uc3QgX0NoYXJUKiBfX2opCisgICAgICB7CXJlcGxhY2UoX19wLCAxLCBfX2ksIF9faik7IH0KKworICAgICAgdm9pZAorICAgICAgcmVwbGFjZShzaXplX3QgX19wLCBjb25zdCBjb25zdF9pdGVyYXRvciYgX19pLAorCSAgICAgIGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX2opCisgICAgICB7IHJlcGxhY2UoX19wLCAxLCBfX2ksIF9faik7IH0KKworICAgICAgdm9pZAorICAgICAgcmVwbGFjZShzaXplX3QgX19wLCBjb25zdCBpdGVyYXRvciYgX19pLAorCSAgICAgIGNvbnN0IGl0ZXJhdG9yJiBfX2opCisgICAgICB7IHJlcGxhY2UoX19wLCAxLCBfX2ksIF9faik7IH0KKworICAgICAgLy8gRXJhc2UsIChwb3NpdGlvbiwgc2l6ZSkgdmFyaWFudC4KKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKHNpemVfdCBfX3AsIHNpemVfdCBfX24pCisgICAgICB7CisJX1JvcGVSZXAqIF9fcmVzdWx0ID0gcmVwbGFjZSh0aGlzLT5fTV90cmVlX3B0ciwgX19wLAorCQkJCSAgICAgX19wICsgX19uLCAwKTsKKwlfU191bnJlZih0aGlzLT5fTV90cmVlX3B0cik7CisJdGhpcy0+X01fdHJlZV9wdHIgPSBfX3Jlc3VsdDsKKyAgICAgIH0KKworICAgICAgLy8gRXJhc2UsIHNpbmdsZSBjaGFyYWN0ZXIKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKHNpemVfdCBfX3ApCisgICAgICB7IGVyYXNlKF9fcCwgX19wICsgMSk7IH0KKworICAgICAgLy8gSW5zZXJ0LCBpdGVyYXRvciB2YXJpYW50cy4KKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3QgaXRlcmF0b3ImIF9fcCwgY29uc3Qgcm9wZSYgX19yKQorICAgICAgeworCWluc2VydChfX3AuaW5kZXgoKSwgX19yKTsKKwlyZXR1cm4gX19wOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0IGl0ZXJhdG9yJiBfX3AsIHNpemVfdCBfX24sIF9DaGFyVCBfX2MpCisgICAgICB7CisJaW5zZXJ0KF9fcC5pbmRleCgpLCBfX24sIF9fYyk7CisJcmV0dXJuIF9fcDsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IgaW5zZXJ0KGNvbnN0IGl0ZXJhdG9yJiBfX3AsIF9DaGFyVCBfX2MpCisgICAgICB7CisJaW5zZXJ0KF9fcC5pbmRleCgpLCBfX2MpOworCXJldHVybiBfX3A7CisgICAgICB9CisgICAgICAKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3QgaXRlcmF0b3ImIF9fcCApCisgICAgICB7CisJaW5zZXJ0KF9fcC5pbmRleCgpKTsKKwlyZXR1cm4gX19wOworICAgICAgfQorICAgICAgCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0IGl0ZXJhdG9yJiBfX3AsIGNvbnN0IF9DaGFyVCogY19zdHJpbmcpCisgICAgICB7CisJaW5zZXJ0KF9fcC5pbmRleCgpLCBjX3N0cmluZyk7CisJcmV0dXJuIF9fcDsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdCBpdGVyYXRvciYgX19wLCBjb25zdCBfQ2hhclQqIF9faSwgc2l6ZV90IF9fbikKKyAgICAgIHsKKwlpbnNlcnQoX19wLmluZGV4KCksIF9faSwgX19uKTsKKwlyZXR1cm4gX19wOworICAgICAgfQorICAgICAgCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0IGl0ZXJhdG9yJiBfX3AsIGNvbnN0IF9DaGFyVCogX19pLAorCSAgICAgY29uc3QgX0NoYXJUKiBfX2opCisgICAgICB7CisJaW5zZXJ0KF9fcC5pbmRleCgpLCBfX2ksIF9faik7IAorCXJldHVybiBfX3A7CisgICAgICB9CisgICAgICAKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3QgaXRlcmF0b3ImIF9fcCwKKwkgICAgIGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX2ksIGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX2opCisgICAgICB7CisJaW5zZXJ0KF9fcC5pbmRleCgpLCBfX2ksIF9faik7CisJcmV0dXJuIF9fcDsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdCBpdGVyYXRvciYgX19wLAorCSAgICAgY29uc3QgaXRlcmF0b3ImIF9faSwgY29uc3QgaXRlcmF0b3ImIF9faikKKyAgICAgIHsKKwlpbnNlcnQoX19wLmluZGV4KCksIF9faSwgX19qKTsKKwlyZXR1cm4gX19wOworICAgICAgfQorCisgICAgICAvLyBSZXBsYWNlLCByYW5nZSB2YXJpYW50cy4KKyAgICAgIHZvaWQKKyAgICAgIHJlcGxhY2UoY29uc3QgaXRlcmF0b3ImIF9fcCwgY29uc3QgaXRlcmF0b3ImIF9fcSwgY29uc3Qgcm9wZSYgX19yKQorICAgICAgewlyZXBsYWNlKF9fcC5pbmRleCgpLCBfX3EuaW5kZXgoKSAtIF9fcC5pbmRleCgpLCBfX3IpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHJlcGxhY2UoY29uc3QgaXRlcmF0b3ImIF9fcCwgY29uc3QgaXRlcmF0b3ImIF9fcSwgX0NoYXJUIF9fYykKKyAgICAgIHsgcmVwbGFjZShfX3AuaW5kZXgoKSwgX19xLmluZGV4KCkgLSBfX3AuaW5kZXgoKSwgX19jKTsgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICByZXBsYWNlKGNvbnN0IGl0ZXJhdG9yJiBfX3AsIGNvbnN0IGl0ZXJhdG9yJiBfX3EsCisJICAgICAgY29uc3QgX0NoYXJUKiBfX2Nfc3RyaW5nKQorICAgICAgeyByZXBsYWNlKF9fcC5pbmRleCgpLCBfX3EuaW5kZXgoKSAtIF9fcC5pbmRleCgpLCBfX2Nfc3RyaW5nKTsgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICByZXBsYWNlKGNvbnN0IGl0ZXJhdG9yJiBfX3AsIGNvbnN0IGl0ZXJhdG9yJiBfX3EsCisJICAgICAgY29uc3QgX0NoYXJUKiBfX2ksIHNpemVfdCBfX24pCisgICAgICB7IHJlcGxhY2UoX19wLmluZGV4KCksIF9fcS5pbmRleCgpIC0gX19wLmluZGV4KCksIF9faSwgX19uKTsgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICByZXBsYWNlKGNvbnN0IGl0ZXJhdG9yJiBfX3AsIGNvbnN0IGl0ZXJhdG9yJiBfX3EsCisJICAgICAgY29uc3QgX0NoYXJUKiBfX2ksIGNvbnN0IF9DaGFyVCogX19qKQorICAgICAgeyByZXBsYWNlKF9fcC5pbmRleCgpLCBfX3EuaW5kZXgoKSAtIF9fcC5pbmRleCgpLCBfX2ksIF9faik7IH0KKyAgICAgIAorICAgICAgdm9pZAorICAgICAgcmVwbGFjZShjb25zdCBpdGVyYXRvciYgX19wLCBjb25zdCBpdGVyYXRvciYgX19xLAorCSAgICAgIGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX2ksIGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX2opCisgICAgICB7IHJlcGxhY2UoX19wLmluZGV4KCksIF9fcS5pbmRleCgpIC0gX19wLmluZGV4KCksIF9faSwgX19qKTsgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICByZXBsYWNlKGNvbnN0IGl0ZXJhdG9yJiBfX3AsIGNvbnN0IGl0ZXJhdG9yJiBfX3EsCisJICAgICAgY29uc3QgaXRlcmF0b3ImIF9faSwgY29uc3QgaXRlcmF0b3ImIF9faikKKyAgICAgIHsgcmVwbGFjZShfX3AuaW5kZXgoKSwgX19xLmluZGV4KCkgLSBfX3AuaW5kZXgoKSwgX19pLCBfX2opOyB9CisKKyAgICAgIC8vIFJlcGxhY2UsIGl0ZXJhdG9yIHZhcmlhbnRzLgorICAgICAgdm9pZAorICAgICAgcmVwbGFjZShjb25zdCBpdGVyYXRvciYgX19wLCBjb25zdCByb3BlJiBfX3IpCisgICAgICB7IHJlcGxhY2UoX19wLmluZGV4KCksIF9fcik7IH0KKyAgICAgIAorICAgICAgdm9pZAorICAgICAgcmVwbGFjZShjb25zdCBpdGVyYXRvciYgX19wLCBfQ2hhclQgX19jKQorICAgICAgeyByZXBsYWNlKF9fcC5pbmRleCgpLCBfX2MpOyB9CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIHJlcGxhY2UoY29uc3QgaXRlcmF0b3ImIF9fcCwgY29uc3QgX0NoYXJUKiBfX2Nfc3RyaW5nKQorICAgICAgeyByZXBsYWNlKF9fcC5pbmRleCgpLCBfX2Nfc3RyaW5nKTsgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICByZXBsYWNlKGNvbnN0IGl0ZXJhdG9yJiBfX3AsIGNvbnN0IF9DaGFyVCogX19pLCBzaXplX3QgX19uKQorICAgICAgeyByZXBsYWNlKF9fcC5pbmRleCgpLCBfX2ksIF9fbik7IH0KKyAgICAgIAorICAgICAgdm9pZAorICAgICAgcmVwbGFjZShjb25zdCBpdGVyYXRvciYgX19wLCBjb25zdCBfQ2hhclQqIF9faSwgY29uc3QgX0NoYXJUKiBfX2opCisgICAgICB7IHJlcGxhY2UoX19wLmluZGV4KCksIF9faSwgX19qKTsgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICByZXBsYWNlKGNvbnN0IGl0ZXJhdG9yJiBfX3AsIGNvbnN0X2l0ZXJhdG9yIF9faSwgY29uc3RfaXRlcmF0b3IgX19qKQorICAgICAgeyByZXBsYWNlKF9fcC5pbmRleCgpLCBfX2ksIF9faik7IH0KKyAgICAgIAorICAgICAgdm9pZAorICAgICAgcmVwbGFjZShjb25zdCBpdGVyYXRvciYgX19wLCBpdGVyYXRvciBfX2ksIGl0ZXJhdG9yIF9faikKKyAgICAgIHsgcmVwbGFjZShfX3AuaW5kZXgoKSwgX19pLCBfX2opOyB9CisKKyAgICAgIC8vIEl0ZXJhdG9yIGFuZCByYW5nZSB2YXJpYW50cyBvZiBlcmFzZQorICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGNvbnN0IGl0ZXJhdG9yJiBfX3AsIGNvbnN0IGl0ZXJhdG9yJiBfX3EpCisgICAgICB7CisJc2l6ZV90IF9fcF9pbmRleCA9IF9fcC5pbmRleCgpOworCWVyYXNlKF9fcF9pbmRleCwgX19xLmluZGV4KCkgLSBfX3BfaW5kZXgpOworCXJldHVybiBpdGVyYXRvcih0aGlzLCBfX3BfaW5kZXgpOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoY29uc3QgaXRlcmF0b3ImIF9fcCkKKyAgICAgIHsKKwlzaXplX3QgX19wX2luZGV4ID0gX19wLmluZGV4KCk7CisJZXJhc2UoX19wX2luZGV4LCAxKTsKKwlyZXR1cm4gaXRlcmF0b3IodGhpcywgX19wX2luZGV4KTsKKyAgICAgIH0KKworICAgICAgcm9wZQorICAgICAgc3Vic3RyKHNpemVfdCBfX3N0YXJ0LCBzaXplX3QgX19sZW4gPSAxKSBjb25zdAorICAgICAgeworCXJldHVybiByb3BlPF9DaGFyVCwgX0FsbG9jPihfU19zdWJzdHJpbmcodGhpcy0+X01fdHJlZV9wdHIsCisJCQkJCQkgX19zdGFydCwKKwkJCQkJCSBfX3N0YXJ0ICsgX19sZW4pKTsKKyAgICAgIH0KKworICAgICAgcm9wZQorICAgICAgc3Vic3RyKGl0ZXJhdG9yIF9fc3RhcnQsIGl0ZXJhdG9yIF9fZW5kKSBjb25zdAorICAgICAgeworCXJldHVybiByb3BlPF9DaGFyVCwgX0FsbG9jPihfU19zdWJzdHJpbmcodGhpcy0+X01fdHJlZV9wdHIsCisJCQkJCQkgX19zdGFydC5pbmRleCgpLAorCQkJCQkJIF9fZW5kLmluZGV4KCkpKTsKKyAgICAgIH0KKworICAgICAgcm9wZQorICAgICAgc3Vic3RyKGl0ZXJhdG9yIF9fc3RhcnQpIGNvbnN0CisgICAgICB7CisJc2l6ZV90IF9fcG9zID0gX19zdGFydC5pbmRleCgpOworCXJldHVybiByb3BlPF9DaGFyVCwgX0FsbG9jPihfU19zdWJzdHJpbmcodGhpcy0+X01fdHJlZV9wdHIsCisJCQkJCQkgX19wb3MsIF9fcG9zICsgMSkpOworICAgICAgfQorCisgICAgICByb3BlCisgICAgICBzdWJzdHIoY29uc3RfaXRlcmF0b3IgX19zdGFydCwgY29uc3RfaXRlcmF0b3IgX19lbmQpIGNvbnN0CisgICAgICB7CisJLy8gVGhpcyBtaWdodCBldmVudHVhbGx5IHRha2UgYWR2YW50YWdlIG9mIHRoZSBjYWNoZSBpbiB0aGUKKwkvLyBpdGVyYXRvci4KKwlyZXR1cm4gcm9wZTxfQ2hhclQsIF9BbGxvYz4oX1Nfc3Vic3RyaW5nKHRoaXMtPl9NX3RyZWVfcHRyLAorCQkJCQkJIF9fc3RhcnQuaW5kZXgoKSwKKwkJCQkJCSBfX2VuZC5pbmRleCgpKSk7CisgICAgICB9CisKKyAgICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+CisgICAgICBzdWJzdHIoY29uc3RfaXRlcmF0b3IgX19zdGFydCkKKyAgICAgIHsKKwlzaXplX3QgX19wb3MgPSBfX3N0YXJ0LmluZGV4KCk7CisJcmV0dXJuIHJvcGU8X0NoYXJULCBfQWxsb2M+KF9TX3N1YnN0cmluZyh0aGlzLT5fTV90cmVlX3B0ciwKKwkJCQkJCSBfX3BvcywgX19wb3MgKyAxKSk7CisgICAgICB9CisKKyAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgbnBvczsKKworICAgICAgc2l6ZV90eXBlIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKKyAgICAgIHsKKwlzaXplX3R5cGUgX19yZXN1bHRfcG9zOworCWNvbnN0X2l0ZXJhdG9yIF9fcmVzdWx0ID0KKwkgIHN0ZDo6c2VhcmNoKGNvbnN0X2JlZ2luKCkgKyBfX3BvcywgY29uc3RfZW5kKCksCisJCSAgICAgIF9fcywgX19zICsgX1NfY2hhcl9wdHJfbGVuKF9fcykpOworCV9fcmVzdWx0X3BvcyA9IF9fcmVzdWx0LmluZGV4KCk7CisjaWZuZGVmIF9fU1RMX09MRF9ST1BFX1NFTUFOVElDUworCWlmIChfX3Jlc3VsdF9wb3MgPT0gc2l6ZSgpKQorCSAgX19yZXN1bHRfcG9zID0gbnBvczsKKyNlbmRpZgorCXJldHVybiBfX3Jlc3VsdF9wb3M7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBtdXRhYmxlX2JlZ2luKCkKKyAgICAgIHsgcmV0dXJuKGl0ZXJhdG9yKHRoaXMsIDApKTsgfQorICAgICAgCisgICAgICBpdGVyYXRvcgorICAgICAgbXV0YWJsZV9lbmQoKQorICAgICAgeyByZXR1cm4oaXRlcmF0b3IodGhpcywgc2l6ZSgpKSk7IH0KKworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CisgICAgICAKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIG11dGFibGVfcmJlZ2luKCkKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IobXV0YWJsZV9lbmQoKSk7IH0KKworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgbXV0YWJsZV9yZW5kKCkKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IobXV0YWJsZV9iZWdpbigpKTsgfQorCisgICAgICByZWZlcmVuY2UKKyAgICAgIG11dGFibGVfcmVmZXJlbmNlX2F0KHNpemVfdHlwZSBfX3BvcykKKyAgICAgIHsgcmV0dXJuIHJlZmVyZW5jZSh0aGlzLCBfX3Bvcyk7IH0KKworI2lmZGVmIF9fU1REX1NUVUZGCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yW10gKHNpemVfdHlwZSBfX3BvcykKKyAgICAgIHsgcmV0dXJuIF9jaGFyX3JlZl9wcm94eSh0aGlzLCBfX3Bvcyk7IH0KKworICAgICAgcmVmZXJlbmNlCisgICAgICBhdChzaXplX3R5cGUgX19wb3MpCisgICAgICB7CisJLy8gaWYgKF9fcG9zID49IHNpemUoKSkgdGhyb3cgb3V0X29mX3JhbmdlOyAgLy8gWFhYCisJcmV0dXJuICgqdGhpcylbX19wb3NdOworICAgICAgfQorICAgICAgCisgICAgICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKSB7IH0KKyAgICAgIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX24pIHsgfQorICAgICAgdm9pZCByZXNlcnZlKHNpemVfdHlwZSBfX3Jlc19hcmcgPSAwKSB7IH0KKyAgICAgIAorICAgICAgc2l6ZV90eXBlCisgICAgICBjYXBhY2l0eSgpIGNvbnN0CisgICAgICB7IHJldHVybiBtYXhfc2l6ZSgpOyB9CisKKyAgICAgIC8vIFN0dWZmIGJlbG93IHRoaXMgbGluZSBpcyBkYW5nZXJvdXMgYmVjYXVzZSBpdCdzIGVycm9yIHByb25lLgorICAgICAgLy8gSSB3b3VsZCByZWFsbHkgbGlrZSB0byBnZXQgcmlkIG9mIGl0LgorICAgICAgLy8gY29weSBmdW5jdGlvbiB3aXRoIGZ1bm55IGFyZyBvcmRlcmluZy4KKyAgICAgIHNpemVfdHlwZQorICAgICAgY29weShfQ2hhclQqIF9fYnVmZmVyLCBzaXplX3R5cGUgX19uLAorCSAgIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CisgICAgICB7IHJldHVybiBjb3B5KF9fcG9zLCBfX24sIF9fYnVmZmVyKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkKKyAgICAgIHsgcmV0dXJuIG11dGFibGVfZW5kKCk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkKKyAgICAgIHsgcmV0dXJuIG11dGFibGVfYmVnaW4oKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkKKyAgICAgIHsgcmV0dXJuIG11dGFibGVfcmVuZCgpOyB9CisgICAgICAKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpCisgICAgICB7IHJldHVybiBtdXRhYmxlX3JiZWdpbigpOyB9CisKKyNlbHNlCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2VuZCgpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpCisgICAgICB7IHJldHVybiBjb25zdF9iZWdpbigpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKQorICAgICAgeyByZXR1cm4gY29uc3RfcmVuZCgpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpCisgICAgICB7IHJldHVybiBjb25zdF9yYmVnaW4oKTsgfQorCisjZW5kaWYKKyAgICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBjb25zdCB0eXBlbmFtZSByb3BlPF9DaGFyVCwgX0FsbG9jPjo6c2l6ZV90eXBlCisgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz46Om5wb3MgPSAoc2l6ZV90eXBlKSgtMSk7CisgIAorICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feCwKKwkJCSAgIGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuIChfX3guX01fY3VycmVudF9wb3MgPT0gX195Ll9NX2N1cnJlbnRfcG9zCisJICAgICAgJiYgX194Ll9NX3Jvb3QgPT0gX195Ll9NX3Jvb3QpOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feCwKKwkJCSAgY29uc3QgX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gKF9feC5fTV9jdXJyZW50X3BvcyA8IF9feS5fTV9jdXJyZW50X3Bvcyk7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feCwKKwkJCSAgIGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX194LAorCQkJICBjb25zdCBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHB0cmRpZmZfdAorICAgIG9wZXJhdG9yLShjb25zdCBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feCwKKwkgICAgICBjb25zdCBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAocHRyZGlmZl90KV9feC5fTV9jdXJyZW50X3BvcyAtIChwdHJkaWZmX3QpX195Ll9NX2N1cnJlbnRfcG9zOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4KKyAgICBvcGVyYXRvci0oY29uc3QgX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3gsIHB0cmRpZmZfdCBfX24pCisgICAgeyByZXR1cm4gX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+KF9feC5fTV9yb290LAorCQkJCQkJICBfX3guX01fY3VycmVudF9wb3MgLSBfX24pOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4KKyAgICBvcGVyYXRvcisoY29uc3QgX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3gsIHB0cmRpZmZfdCBfX24pCisgICAgeyByZXR1cm4gX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+KF9feC5fTV9yb290LAorCQkJCQkJICBfX3guX01fY3VycmVudF9wb3MgKyBfX24pOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4KKyAgICBvcGVyYXRvcisocHRyZGlmZl90IF9fbiwgY29uc3QgX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3gpCisgIHsgcmV0dXJuIF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPihfX3guX01fcm9vdCwKKwkJCQkJCV9feC5fTV9jdXJyZW50X3BvcyArIF9fbik7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feSkKKyAgICB7cmV0dXJuIChfX3guX01fY3VycmVudF9wb3MgPT0gX195Ll9NX2N1cnJlbnRfcG9zCisJICAgICAmJiBfX3guX01fcm9vdF9yb3BlID09IF9feS5fTV9yb290X3JvcGUpOyB9CisgIAorICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3gsCisJICAgICAgY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gKF9feC5fTV9jdXJyZW50X3BvcyA8IF9feS5fTV9jdXJyZW50X3Bvcyk7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX194LAorCSAgICAgIGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX194IDwgX195KTsgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgcHRyZGlmZl90CisgICAgb3BlcmF0b3ItKGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX194LAorCSAgICAgIGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICgocHRyZGlmZl90KV9feC5fTV9jdXJyZW50X3BvcworCSAgICAgIC0gKHB0cmRpZmZfdClfX3kuX01fY3VycmVudF9wb3MpOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4KKyAgICBvcGVyYXRvci0oY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3gsCisJICAgICAgcHRyZGlmZl90IF9fbikKKyAgICB7IHJldHVybiBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4oX194Ll9NX3Jvb3Rfcm9wZSwKKwkJCQkJICAgIF9feC5fTV9jdXJyZW50X3BvcyAtIF9fbik7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPgorICAgIG9wZXJhdG9yKyhjb25zdCBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feCwgcHRyZGlmZl90IF9fbikKKyAgICB7IHJldHVybiBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4oX194Ll9NX3Jvb3Rfcm9wZSwKKwkJCQkJICAgIF9feC5fTV9jdXJyZW50X3BvcyArIF9fbik7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPgorICAgIG9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feCkKKyAgICB7IHJldHVybiBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4oX194Ll9NX3Jvb3Rfcm9wZSwKKwkJCQkJICAgIF9feC5fTV9jdXJyZW50X3BvcyArIF9fbik7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHJvcGU8X0NoYXJULCBfQWxsb2M+CisgICAgb3BlcmF0b3IrKGNvbnN0IHJvcGU8X0NoYXJULCBfQWxsb2M+JiBfX2xlZnQsCisJICAgICAgY29uc3Qgcm9wZTxfQ2hhclQsIF9BbGxvYz4mIF9fcmlnaHQpCisgICAgeworICAgICAgLy8gSW5saW5pbmcgdGhpcyBzaG91bGQgbWFrZSBpdCBwb3NzaWJsZSB0byBrZWVwIF9fbGVmdCBhbmQKKyAgICAgIC8vIF9fcmlnaHQgaW4gcmVnaXN0ZXJzLgorICAgICAgdHlwZWRlZiByb3BlPF9DaGFyVCwgX0FsbG9jPiByb3BlX3R5cGU7CisgICAgICByZXR1cm4gcm9wZV90eXBlKHJvcGVfdHlwZTo6X1NfY29uY2F0KF9fbGVmdC5fTV90cmVlX3B0ciwgCisJCQkJCSAgICBfX3JpZ2h0Ll9NX3RyZWVfcHRyKSk7CisgICAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgcm9wZTxfQ2hhclQsIF9BbGxvYz4mCisgICAgb3BlcmF0b3IrPShyb3BlPF9DaGFyVCwgX0FsbG9jPiYgX19sZWZ0LAorCSAgICAgICBjb25zdCByb3BlPF9DaGFyVCwgX0FsbG9jPiYgX19yaWdodCkKKyAgICB7CisgICAgICBfX2xlZnQuYXBwZW5kKF9fcmlnaHQpOworICAgICAgcmV0dXJuIF9fbGVmdDsKKyAgICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSByb3BlPF9DaGFyVCwgX0FsbG9jPgorICAgIG9wZXJhdG9yKyhjb25zdCByb3BlPF9DaGFyVCwgX0FsbG9jPiYgX19sZWZ0LAorCSAgICAgIGNvbnN0IF9DaGFyVCogX19yaWdodCkKKyAgICB7CisgICAgICB0eXBlZGVmIHJvcGU8X0NoYXJULCBfQWxsb2M+IHJvcGVfdHlwZTsKKyAgICAgIHNpemVfdCBfX3JsZW4gPSByb3BlX3R5cGU6Ol9TX2NoYXJfcHRyX2xlbihfX3JpZ2h0KTsKKyAgICAgIHJldHVybiByb3BlX3R5cGUocm9wZV90eXBlOjpfU19jb25jYXRfY2hhcl9pdGVyKF9fbGVmdC5fTV90cmVlX3B0ciwKKwkJCQkJCSAgICAgIF9fcmlnaHQsIF9fcmxlbikpOworICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHJvcGU8X0NoYXJULCBfQWxsb2M+JgorICAgIG9wZXJhdG9yKz0ocm9wZTxfQ2hhclQsIF9BbGxvYz4mIF9fbGVmdCwKKwkgICAgICAgY29uc3QgX0NoYXJUKiBfX3JpZ2h0KQorICAgIHsKKyAgICAgIF9fbGVmdC5hcHBlbmQoX19yaWdodCk7CisgICAgICByZXR1cm4gX19sZWZ0OworICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHJvcGU8X0NoYXJULCBfQWxsb2M+CisgICAgb3BlcmF0b3IrKGNvbnN0IHJvcGU8X0NoYXJULCBfQWxsb2M+JiBfX2xlZnQsIF9DaGFyVCBfX3JpZ2h0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgcm9wZTxfQ2hhclQsIF9BbGxvYz4gcm9wZV90eXBlOworICAgICAgcmV0dXJuIHJvcGVfdHlwZShyb3BlX3R5cGU6Ol9TX2NvbmNhdF9jaGFyX2l0ZXIoX19sZWZ0Ll9NX3RyZWVfcHRyLAorCQkJCQkJICAgICAgJl9fcmlnaHQsIDEpKTsKKyAgICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSByb3BlPF9DaGFyVCwgX0FsbG9jPiYKKyAgICBvcGVyYXRvcis9KHJvcGU8X0NoYXJULCBfQWxsb2M+JiBfX2xlZnQsIF9DaGFyVCBfX3JpZ2h0KQorICAgIHsKKyAgICAgIF9fbGVmdC5hcHBlbmQoX19yaWdodCk7CisgICAgICByZXR1cm4gX19sZWZ0OworICAgIH0KKyAgCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IHJvcGU8X0NoYXJULCBfQWxsb2M+JiBfX2xlZnQsCisJICAgICAgY29uc3Qgcm9wZTxfQ2hhclQsIF9BbGxvYz4mIF9fcmlnaHQpCisgICAgeyByZXR1cm4gX19sZWZ0LmNvbXBhcmUoX19yaWdodCkgPCAwOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IHJvcGU8X0NoYXJULCBfQWxsb2M+JiBfX2xlZnQsCisJICAgICAgIGNvbnN0IHJvcGU8X0NoYXJULCBfQWxsb2M+JiBfX3JpZ2h0KQorICAgIHsgcmV0dXJuIF9fbGVmdC5jb21wYXJlKF9fcmlnaHQpID09IDA7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9Sb3BlX2NoYXJfcHRyX3Byb3h5PF9DaGFyVCwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCBfUm9wZV9jaGFyX3B0cl9wcm94eTxfQ2hhclQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAoX194Ll9NX3BvcyA9PSBfX3kuX01fcG9zICYmIF9feC5fTV9yb290ID09IF9feS5fTV9yb290KTsgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgcm9wZTxfQ2hhclQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3Qgcm9wZTxfQ2hhclQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IHJvcGU8X0NoYXJULCBfQWxsb2M+JiBfX3gsCisJICAgICAgY29uc3Qgcm9wZTxfQ2hhclQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IHJvcGU8X0NoYXJULCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IHJvcGU8X0NoYXJULCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCByb3BlPF9DaGFyVCwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCByb3BlPF9DaGFyVCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX194IDwgX195KTsgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX1JvcGVfY2hhcl9wdHJfcHJveHk8X0NoYXJULCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IF9Sb3BlX2NoYXJfcHRyX3Byb3h5PF9DaGFyVCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX28sCisJICAgICAgIGNvbnN0IHJvcGU8X0NoYXJULCBfQWxsb2M+JiBfX3IpOworCisgIHR5cGVkZWYgcm9wZTxjaGFyPiBjcm9wZTsKKyAgdHlwZWRlZiByb3BlPHdjaGFyX3Q+IHdyb3BlOworCisgIGlubGluZSBjcm9wZTo6cmVmZXJlbmNlCisgIF9fbXV0YWJsZV9yZWZlcmVuY2VfYXQoY3JvcGUmIF9fYywgc2l6ZV90IF9faSkKKyAgeyByZXR1cm4gX19jLm11dGFibGVfcmVmZXJlbmNlX2F0KF9faSk7IH0KKworICBpbmxpbmUgd3JvcGU6OnJlZmVyZW5jZQorICBfX211dGFibGVfcmVmZXJlbmNlX2F0KHdyb3BlJiBfX2MsIHNpemVfdCBfX2kpCisgIHsgcmV0dXJuIF9fYy5tdXRhYmxlX3JlZmVyZW5jZV9hdChfX2kpOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChyb3BlPF9DaGFyVCwgX0FsbG9jPiYgX194LCByb3BlPF9DaGFyVCwgX0FsbG9jPiYgX195KQorICAgIHsgX194LnN3YXAoX195KTsgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKworbmFtZXNwYWNlIHN0ZAoreyAKK25hbWVzcGFjZSB0cjEKK3sKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBoYXNoPF9fZ251X2N4eDo6Y3JvcGU+CisgICAgeworICAgICAgc2l6ZV90CisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9fZ251X2N4eDo6Y3JvcGUmIF9fc3RyKSBjb25zdAorICAgICAgeworCXNpemVfdCBfX3NpemUgPSBfX3N0ci5zaXplKCk7CisJaWYgKDAgPT0gX19zaXplKQorCSAgcmV0dXJuIDA7CisJcmV0dXJuIDEzICogX19zdHJbMF0gKyA1ICogX19zdHJbX19zaXplIC0gMV0gKyBfX3NpemU7CisgICAgICB9CisgICAgfTsKKworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgaGFzaDxfX2dudV9jeHg6Ondyb3BlPgorICAgIHsKKyAgICAgIHNpemVfdAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfX2dudV9jeHg6Ondyb3BlJiBfX3N0cikgY29uc3QKKyAgICAgIHsKKwlzaXplX3QgX19zaXplID0gX19zdHIuc2l6ZSgpOworCWlmICgwID09IF9fc2l6ZSkKKwkgIHJldHVybiAwOworCXJldHVybiAxMyAqIF9fc3RyWzBdICsgNSAqIF9fc3RyW19fc2l6ZSAtIDFdICsgX19zaXplOworICAgICAgfQorICAgIH07Cit9IC8vIG5hbWVzcGFjZSB0cjEKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjIGluY2x1ZGUgPGV4dC9yb3BlaW1wbC5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3JvcGVpbXBsLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9yb3BlaW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3OWJjYTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9yb3BlaW1wbC5oCkBAIC0wLDAgKzEsMTcwMSBAQAorLy8gU0dJJ3Mgcm9wZSBjbGFzcyBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSByb3BlaW1wbC5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8b3N0cmVhbT4KKyNpbmNsdWRlIDxiaXRzL2Z1bmN0ZXhjZXB0Lmg+CisKKyNpbmNsdWRlIDxleHQvYWxnb3JpdGhtPiAvLyBGb3IgY29weV9uIGFuZCBsZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5CisjaW5jbHVkZSA8ZXh0L21lbW9yeT4gLy8gRm9yIHVuaW5pdGlhbGl6ZWRfY29weV9uCisjaW5jbHVkZSA8ZXh0L251bWVyaWM+IC8vIEZvciBwb3dlcgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorCisgIHVzaW5nIHN0ZDo6c2l6ZV90OworICB1c2luZyBzdGQ6OnByaW50ZjsKKyAgdXNpbmcgc3RkOjpiYXNpY19vc3RyZWFtOworICB1c2luZyBzdGQ6Ol9fdGhyb3dfbGVuZ3RoX2Vycm9yOworICB1c2luZyBzdGQ6Ol9EZXN0cm95OworICB1c2luZyBzdGQ6OnVuaW5pdGlhbGl6ZWRfZmlsbF9uOworCisgIC8vIFNldCBidWZfc3RhcnQsIGJ1Zl9lbmQsIGFuZCBidWZfcHRyIGFwcHJvcHJpYXRlbHksIGZpbGxpbmcgdG1wX2J1ZgorICAvLyBpZiBuZWNlc3NhcnkuICBBc3N1bWVzIF9NX3BhdGhfZW5kW2xlYWZfaW5kZXhdIGFuZCBsZWFmX3BvcyBhcmUgY29ycmVjdC4KKyAgLy8gUmVzdWx0cyBpbiBhIHZhbGlkIGJ1Zl9wdHIgaWYgdGhlIGl0ZXJhdG9yIGNhbiBiZSBsZWdpdGltYXRlbHkKKyAgLy8gZGVyZWZlcmVuY2VkLgorICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgdm9pZAorICAgIF9Sb3BlX2l0ZXJhdG9yX2Jhc2U8X0NoYXJULCBfQWxsb2M+OjoKKyAgICBfU19zZXRidWYoX1JvcGVfaXRlcmF0b3JfYmFzZTxfQ2hhclQsIF9BbGxvYz4mIF9feCkKKyAgICB7CisgICAgICBjb25zdCBfUm9wZVJlcCogX19sZWFmID0gX194Ll9NX3BhdGhfZW5kW19feC5fTV9sZWFmX2luZGV4XTsKKyAgICAgIHNpemVfdCBfX2xlYWZfcG9zID0gX194Ll9NX2xlYWZfcG9zOworICAgICAgc2l6ZV90IF9fcG9zID0gX194Ll9NX2N1cnJlbnRfcG9zOworCisgICAgICBzd2l0Y2goX19sZWFmLT5fTV90YWcpCisJeworCWNhc2UgX19kZXRhaWw6Ol9TX2xlYWY6CisJICBfX3guX01fYnVmX3N0YXJ0ID0gKChfUm9wZV9Sb3BlTGVhZjxfQ2hhclQsIF9BbGxvYz4qKV9fbGVhZiktPl9NX2RhdGE7CisJICBfX3guX01fYnVmX3B0ciA9IF9feC5fTV9idWZfc3RhcnQgKyAoX19wb3MgLSBfX2xlYWZfcG9zKTsKKwkgIF9feC5fTV9idWZfZW5kID0gX194Ll9NX2J1Zl9zdGFydCArIF9fbGVhZi0+X01fc2l6ZTsKKwkgIGJyZWFrOworCWNhc2UgX19kZXRhaWw6Ol9TX2Z1bmN0aW9uOgorCWNhc2UgX19kZXRhaWw6Ol9TX3N1YnN0cmluZ2ZuOgorCSAgeworCSAgICBzaXplX3QgX19sZW4gPSBfU19pdGVyYXRvcl9idWZfbGVuOworCSAgICBzaXplX3QgX19idWZfc3RhcnRfcG9zID0gX19sZWFmX3BvczsKKwkgICAgc2l6ZV90IF9fbGVhZl9lbmQgPSBfX2xlYWZfcG9zICsgX19sZWFmLT5fTV9zaXplOworCSAgICBjaGFyX3Byb2R1Y2VyPF9DaGFyVD4qIF9fZm4gPSAoKF9Sb3BlX1JvcGVGdW5jdGlvbjxfQ2hhclQsCisJCQkJCSAgICBfQWxsb2M+KilfX2xlYWYpLT5fTV9mbjsKKwkgICAgaWYgKF9fYnVmX3N0YXJ0X3BvcyArIF9fbGVuIDw9IF9fcG9zKQorCSAgICAgIHsKKwkJX19idWZfc3RhcnRfcG9zID0gX19wb3MgLSBfX2xlbiAvIDQ7CisJCWlmIChfX2J1Zl9zdGFydF9wb3MgKyBfX2xlbiA+IF9fbGVhZl9lbmQpCisJCSAgX19idWZfc3RhcnRfcG9zID0gX19sZWFmX2VuZCAtIF9fbGVuOworCSAgICAgIH0KKwkgICAgaWYgKF9fYnVmX3N0YXJ0X3BvcyArIF9fbGVuID4gX19sZWFmX2VuZCkKKwkgICAgICBfX2xlbiA9IF9fbGVhZl9lbmQgLSBfX2J1Zl9zdGFydF9wb3M7CisJICAgICgqX19mbikoX19idWZfc3RhcnRfcG9zIC0gX19sZWFmX3BvcywgX19sZW4sIF9feC5fTV90bXBfYnVmKTsKKwkgICAgX194Ll9NX2J1Zl9wdHIgPSBfX3guX01fdG1wX2J1ZiArIChfX3BvcyAtIF9fYnVmX3N0YXJ0X3Bvcyk7CisJICAgIF9feC5fTV9idWZfc3RhcnQgPSBfX3guX01fdG1wX2J1ZjsKKwkgICAgX194Ll9NX2J1Zl9lbmQgPSBfX3guX01fdG1wX2J1ZiArIF9fbGVuOworCSAgfQorCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIGJyZWFrOworCX0KKyAgICB9CisKKyAgLy8gU2V0IHBhdGggYW5kIGJ1ZmZlciBpbnNpZGUgYSByb3BlIGl0ZXJhdG9yLiAgV2UgYXNzdW1lIHRoYXQKKyAgLy8gcG9zIGFuZCByb290IGFyZSBhbHJlYWR5IHNldC4KKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHZvaWQKKyAgICBfUm9wZV9pdGVyYXRvcl9iYXNlPF9DaGFyVCwgX0FsbG9jPjo6CisgICAgX1Nfc2V0Y2FjaGUoX1JvcGVfaXRlcmF0b3JfYmFzZTxfQ2hhclQsIF9BbGxvYz4mIF9feCkKKyAgICB7CisgICAgICBjb25zdCBfUm9wZVJlcCogX19wYXRoW2ludChfX2RldGFpbDo6X1NfbWF4X3JvcGVfZGVwdGgpICsgMV07CisgICAgICBjb25zdCBfUm9wZVJlcCogX19jdXJyX3JvcGU7CisgICAgICBpbnQgX19jdXJyX2RlcHRoID0gLTE7ICAvKiBpbmRleCBpbnRvIHBhdGggICAgKi8KKyAgICAgIHNpemVfdCBfX2N1cnJfc3RhcnRfcG9zID0gMDsKKyAgICAgIHNpemVfdCBfX3BvcyA9IF9feC5fTV9jdXJyZW50X3BvczsKKyAgICAgIHVuc2lnbmVkIGNoYXIgX19kaXJucyA9IDA7IC8vIEJpdCB2ZWN0b3IgbWFya2luZyByaWdodCB0dXJucyBpbiB0aGUgcGF0aAorCisgICAgICBpZiAoX19wb3MgPj0gX194Ll9NX3Jvb3QtPl9NX3NpemUpCisJeworCSAgX194Ll9NX2J1Zl9wdHIgPSAwOworCSAgcmV0dXJuOworCX0KKyAgICAgIF9fY3Vycl9yb3BlID0gX194Ll9NX3Jvb3Q7CisgICAgICBpZiAoMCAhPSBfX2N1cnJfcm9wZS0+X01fY19zdHJpbmcpCisJeworCSAgLyogVHJlYXQgdGhlIHJvb3QgYXMgYSBsZWFmLiAqLworCSAgX194Ll9NX2J1Zl9zdGFydCA9IF9fY3Vycl9yb3BlLT5fTV9jX3N0cmluZzsKKwkgIF9feC5fTV9idWZfZW5kID0gX19jdXJyX3JvcGUtPl9NX2Nfc3RyaW5nICsgX19jdXJyX3JvcGUtPl9NX3NpemU7CisJICBfX3guX01fYnVmX3B0ciA9IF9fY3Vycl9yb3BlLT5fTV9jX3N0cmluZyArIF9fcG9zOworCSAgX194Ll9NX3BhdGhfZW5kWzBdID0gX19jdXJyX3JvcGU7CisJICBfX3guX01fbGVhZl9pbmRleCA9IDA7CisJICBfX3guX01fbGVhZl9wb3MgPSAwOworCSAgcmV0dXJuOworCX0KKyAgICAgIGZvcig7OykKKwl7CisJICArK19fY3Vycl9kZXB0aDsKKwkgIF9fcGF0aFtfX2N1cnJfZGVwdGhdID0gX19jdXJyX3JvcGU7CisJICBzd2l0Y2goX19jdXJyX3JvcGUtPl9NX3RhZykKKwkgICAgeworCSAgICBjYXNlIF9fZGV0YWlsOjpfU19sZWFmOgorCSAgICBjYXNlIF9fZGV0YWlsOjpfU19mdW5jdGlvbjoKKwkgICAgY2FzZSBfX2RldGFpbDo6X1Nfc3Vic3RyaW5nZm46CisJICAgICAgX194Ll9NX2xlYWZfcG9zID0gX19jdXJyX3N0YXJ0X3BvczsKKwkgICAgICBnb3RvIGRvbmU7CisJICAgIGNhc2UgX19kZXRhaWw6Ol9TX2NvbmNhdDoKKwkgICAgICB7CisJCV9Sb3BlX1JvcGVDb25jYXRlbmF0aW9uPF9DaGFyVCwgX0FsbG9jPiogX19jID0KKwkJICAoX1JvcGVfUm9wZUNvbmNhdGVuYXRpb248X0NoYXJULCBfQWxsb2M+KilfX2N1cnJfcm9wZTsKKwkJX1JvcGVSZXAqIF9fbGVmdCA9IF9fYy0+X01fbGVmdDsKKwkJc2l6ZV90IF9fbGVmdF9sZW4gPSBfX2xlZnQtPl9NX3NpemU7CisKKwkJX19kaXJucyA8PD0gMTsKKwkJaWYgKF9fcG9zID49IF9fY3Vycl9zdGFydF9wb3MgKyBfX2xlZnRfbGVuKQorCQkgIHsKKwkJICAgIF9fZGlybnMgfD0gMTsKKwkJICAgIF9fY3Vycl9yb3BlID0gX19jLT5fTV9yaWdodDsKKwkJICAgIF9fY3Vycl9zdGFydF9wb3MgKz0gX19sZWZ0X2xlbjsKKwkJICB9CisJCWVsc2UKKwkJICBfX2N1cnJfcm9wZSA9IF9fbGVmdDsKKwkgICAgICB9CisJICAgICAgYnJlYWs7CisJICAgIH0KKwl9CisgICAgZG9uZToKKyAgICAgIC8vIENvcHkgbGFzdCBzZWN0aW9uIG9mIHBhdGggaW50byBfTV9wYXRoX2VuZC4KKyAgICAgIHsKKwlpbnQgX19pID0gLTE7CisJaW50IF9faiA9IF9fY3Vycl9kZXB0aCArIDEgLSBpbnQoX1NfcGF0aF9jYWNoZV9sZW4pOworCisJaWYgKF9faiA8IDApIF9faiA9IDA7CisJd2hpbGUgKF9faiA8PSBfX2N1cnJfZGVwdGgpCisJICBfX3guX01fcGF0aF9lbmRbKytfX2ldID0gX19wYXRoW19faisrXTsKKwlfX3guX01fbGVhZl9pbmRleCA9IF9faTsKKyAgICAgIH0KKyAgICAgIF9feC5fTV9wYXRoX2RpcmVjdGlvbnMgPSBfX2Rpcm5zOworICAgICAgX1Nfc2V0YnVmKF9feCk7CisgICAgfQorCisgIC8vIFNwZWNpYWxpemVkIHZlcnNpb24gb2YgdGhlIGFib3ZlLiAgQXNzdW1lcyB0aGF0CisgIC8vIHRoZSBwYXRoIGNhY2hlIGlzIHZhbGlkIGZvciB0aGUgcHJldmlvdXMgcG9zaXRpb24uCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICB2b2lkCisgICAgX1JvcGVfaXRlcmF0b3JfYmFzZTxfQ2hhclQsIF9BbGxvYz46OgorICAgIF9TX3NldGNhY2hlX2Zvcl9pbmNyKF9Sb3BlX2l0ZXJhdG9yX2Jhc2U8X0NoYXJULCBfQWxsb2M+JiBfX3gpCisgICAgeworICAgICAgaW50IF9fY3VycmVudF9pbmRleCA9IF9feC5fTV9sZWFmX2luZGV4OworICAgICAgY29uc3QgX1JvcGVSZXAqIF9fY3VycmVudF9ub2RlID0gX194Ll9NX3BhdGhfZW5kW19fY3VycmVudF9pbmRleF07CisgICAgICBzaXplX3QgX19sZW4gPSBfX2N1cnJlbnRfbm9kZS0+X01fc2l6ZTsKKyAgICAgIHNpemVfdCBfX25vZGVfc3RhcnRfcG9zID0gX194Ll9NX2xlYWZfcG9zOworICAgICAgdW5zaWduZWQgY2hhciBfX2Rpcm5zID0gX194Ll9NX3BhdGhfZGlyZWN0aW9uczsKKyAgICAgIF9Sb3BlX1JvcGVDb25jYXRlbmF0aW9uPF9DaGFyVCwgX0FsbG9jPiogX19jOworCisgICAgICBpZiAoX194Ll9NX2N1cnJlbnRfcG9zIC0gX19ub2RlX3N0YXJ0X3BvcyA8IF9fbGVuKQorCXsKKwkgIC8qIE1vcmUgc3R1ZmYgaW4gdGhpcyBsZWFmLCB3ZSBqdXN0IGRpZG4ndCBjYWNoZSBpdC4gKi8KKwkgIF9TX3NldGJ1ZihfX3gpOworCSAgcmV0dXJuOworCX0KKyAgICAgIC8vICBub2RlX3N0YXJ0X3BvcyBpcyBzdGFydGluZyBwb3NpdGlvbiBvZiBsYXN0X25vZGUuCisgICAgICB3aGlsZSAoLS1fX2N1cnJlbnRfaW5kZXggPj0gMCkKKwl7CisJICBpZiAoIShfX2Rpcm5zICYgMSkgLyogUGF0aCB0dXJuZWQgbGVmdCAqLykKKwkgICAgYnJlYWs7CisJICBfX2N1cnJlbnRfbm9kZSA9IF9feC5fTV9wYXRoX2VuZFtfX2N1cnJlbnRfaW5kZXhdOworCSAgX19jID0gKF9Sb3BlX1JvcGVDb25jYXRlbmF0aW9uPF9DaGFyVCwgX0FsbG9jPiopX19jdXJyZW50X25vZGU7CisJICAvLyBPdGhlcndpc2Ugd2Ugd2VyZSBpbiB0aGUgcmlnaHQgY2hpbGQuICBUaHVzIHdlIHNob3VsZCBwb3AKKwkgIC8vIHRoZSBjb25jYXRlbmF0aW9uIG5vZGUuCisJICBfX25vZGVfc3RhcnRfcG9zIC09IF9fYy0+X01fbGVmdC0+X01fc2l6ZTsKKwkgIF9fZGlybnMgPj49IDE7CisJfQorICAgICAgaWYgKF9fY3VycmVudF9pbmRleCA8IDApCisJeworCSAgLy8gV2UgdW5kZXJmbG93ZWQgdGhlIGNhY2hlLiBQdW50LgorCSAgX1Nfc2V0Y2FjaGUoX194KTsKKwkgIHJldHVybjsKKwl9CisgICAgICBfX2N1cnJlbnRfbm9kZSA9IF9feC5fTV9wYXRoX2VuZFtfX2N1cnJlbnRfaW5kZXhdOworICAgICAgX19jID0gKF9Sb3BlX1JvcGVDb25jYXRlbmF0aW9uPF9DaGFyVCwgX0FsbG9jPiopX19jdXJyZW50X25vZGU7CisgICAgICAvLyBjdXJyZW50X25vZGUgaXMgYSBjb25jYXRlbmF0aW9uIG5vZGUuICBXZSBhcmUgcG9zaXRpb25lZCBvbiB0aGUgZmlyc3QKKyAgICAgIC8vIGNoYXJhY3RlciBpbiBpdHMgcmlnaHQgY2hpbGQuCisgICAgICAvLyBub2RlX3N0YXJ0X3BvcyBpcyBzdGFydGluZyBwb3NpdGlvbiBvZiBjdXJyZW50X25vZGUuCisgICAgICBfX25vZGVfc3RhcnRfcG9zICs9IF9fYy0+X01fbGVmdC0+X01fc2l6ZTsKKyAgICAgIF9fY3VycmVudF9ub2RlID0gX19jLT5fTV9yaWdodDsKKyAgICAgIF9feC5fTV9wYXRoX2VuZFsrK19fY3VycmVudF9pbmRleF0gPSBfX2N1cnJlbnRfbm9kZTsKKyAgICAgIF9fZGlybnMgfD0gMTsKKyAgICAgIHdoaWxlIChfX2RldGFpbDo6X1NfY29uY2F0ID09IF9fY3VycmVudF9ub2RlLT5fTV90YWcpCisJeworCSAgKytfX2N1cnJlbnRfaW5kZXg7CisJICBpZiAoaW50KF9TX3BhdGhfY2FjaGVfbGVuKSA9PSBfX2N1cnJlbnRfaW5kZXgpCisJICAgIHsKKwkgICAgICBpbnQgX19pOworCSAgICAgIGZvciAoX19pID0gMDsgX19pIDwgaW50KF9TX3BhdGhfY2FjaGVfbGVuKSAtIDE7IF9faSsrKQorCQlfX3guX01fcGF0aF9lbmRbX19pXSA9IF9feC5fTV9wYXRoX2VuZFtfX2krMV07CisJICAgICAgLS1fX2N1cnJlbnRfaW5kZXg7CisJICAgIH0KKwkgIF9fY3VycmVudF9ub2RlID0KKwkgICAgKChfUm9wZV9Sb3BlQ29uY2F0ZW5hdGlvbjxfQ2hhclQsIF9BbGxvYz4qKV9fY3VycmVudF9ub2RlKS0+X01fbGVmdDsKKwkgIF9feC5fTV9wYXRoX2VuZFtfX2N1cnJlbnRfaW5kZXhdID0gX19jdXJyZW50X25vZGU7CisJICBfX2Rpcm5zIDw8PSAxOworCSAgLy8gbm9kZV9zdGFydF9wb3MgaXMgdW5jaGFuZ2VkLgorCX0KKyAgICAgIF9feC5fTV9sZWFmX2luZGV4ID0gX19jdXJyZW50X2luZGV4OworICAgICAgX194Ll9NX2xlYWZfcG9zID0gX19ub2RlX3N0YXJ0X3BvczsKKyAgICAgIF9feC5fTV9wYXRoX2RpcmVjdGlvbnMgPSBfX2Rpcm5zOworICAgICAgX1Nfc2V0YnVmKF9feCk7CisgICAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICB2b2lkCisgICAgX1JvcGVfaXRlcmF0b3JfYmFzZTxfQ2hhclQsIF9BbGxvYz46OgorICAgIF9NX2luY3Ioc2l6ZV90IF9fbikKKyAgICB7CisgICAgICBfTV9jdXJyZW50X3BvcyArPSBfX247CisgICAgICBpZiAoMCAhPSBfTV9idWZfcHRyKQorCXsKKwkgIHNpemVfdCBfX2NoYXJzX2xlZnQgPSBfTV9idWZfZW5kIC0gX01fYnVmX3B0cjsKKwkgIGlmIChfX2NoYXJzX2xlZnQgPiBfX24pCisJICAgIF9NX2J1Zl9wdHIgKz0gX19uOworCSAgZWxzZSBpZiAoX19jaGFyc19sZWZ0ID09IF9fbikKKwkgICAgeworCSAgICAgIF9NX2J1Zl9wdHIgKz0gX19uOworCSAgICAgIF9TX3NldGNhY2hlX2Zvcl9pbmNyKCp0aGlzKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICBfTV9idWZfcHRyID0gMDsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICB2b2lkCisgICAgX1JvcGVfaXRlcmF0b3JfYmFzZTxfQ2hhclQsIF9BbGxvYz46OgorICAgIF9NX2RlY3Ioc2l6ZV90IF9fbikKKyAgICB7CisgICAgICBpZiAoMCAhPSBfTV9idWZfcHRyKQorCXsKKwkgIHNpemVfdCBfX2NoYXJzX2xlZnQgPSBfTV9idWZfcHRyIC0gX01fYnVmX3N0YXJ0OworCSAgaWYgKF9fY2hhcnNfbGVmdCA+PSBfX24pCisJICAgIF9NX2J1Zl9wdHIgLT0gX19uOworCSAgZWxzZQorCSAgICBfTV9idWZfcHRyID0gMDsKKwl9CisgICAgICBfTV9jdXJyZW50X3BvcyAtPSBfX247CisgICAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICB2b2lkCisgICAgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+OjoKKyAgICBfTV9jaGVjaygpCisgICAgeworICAgICAgaWYgKF9NX3Jvb3Rfcm9wZS0+X01fdHJlZV9wdHIgIT0gdGhpcy0+X01fcm9vdCkKKwl7CisJICAvLyBfUm9wZSB3YXMgbW9kaWZpZWQuICBHZXQgdGhpbmdzIGZpeGVkIHVwLgorCSAgX1JvcGVSZXA6Ol9TX3VucmVmKHRoaXMtPl9NX3Jvb3QpOworCSAgdGhpcy0+X01fcm9vdCA9IF9NX3Jvb3Rfcm9wZS0+X01fdHJlZV9wdHI7CisJICBfUm9wZVJlcDo6X1NfcmVmKHRoaXMtPl9NX3Jvb3QpOworCSAgdGhpcy0+X01fYnVmX3B0ciA9IDA7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lCisgICAgX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+OjoKKyAgICBfUm9wZV9jb25zdF9pdGVyYXRvcihjb25zdCBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feCkKKyAgICA6IF9Sb3BlX2l0ZXJhdG9yX2Jhc2U8X0NoYXJULCBfQWxsb2M+KF9feCkKKyAgICB7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lCisgICAgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+OjoKKyAgICBfUm9wZV9pdGVyYXRvcihyb3BlPF9DaGFyVCwgX0FsbG9jPiYgX19yLCBzaXplX3QgX19wb3MpCisgICAgOiBfUm9wZV9pdGVyYXRvcl9iYXNlPF9DaGFyVCxfQWxsb2M+KF9fci5fTV90cmVlX3B0ciwgX19wb3MpLAorICAgICAgX01fcm9vdF9yb3BlKCZfX3IpCisgICAgeyBfUm9wZVJlcDo6X1NfcmVmKHRoaXMtPl9NX3Jvb3QpOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBzaXplX3QKKyAgICByb3BlPF9DaGFyVCwgX0FsbG9jPjo6CisgICAgX1NfY2hhcl9wdHJfbGVuKGNvbnN0IF9DaGFyVCogX19zKQorICAgIHsKKyAgICAgIGNvbnN0IF9DaGFyVCogX19wID0gX19zOworICAgICAgCisgICAgICB3aGlsZSAoIV9TX2lzMCgqX19wKSkKKwkrK19fcDsKKyAgICAgIHJldHVybiAoX19wIC0gX19zKTsKKyAgICB9CisKKworI2lmbmRlZiBfX0dDCisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgX1JvcGVfUm9wZVJlcDxfQ2hhclQsIF9BbGxvYz46OgorICAgIF9NX2ZyZWVfY19zdHJpbmcoKQorICAgIHsKKyAgICAgIF9DaGFyVCogX19jc3RyID0gX01fY19zdHJpbmc7CisgICAgICBpZiAoMCAhPSBfX2NzdHIpCisJeworCSAgc2l6ZV90IF9fc2l6ZSA9IHRoaXMtPl9NX3NpemUgKyAxOworCSAgX0Rlc3Ryb3koX19jc3RyLCBfX2NzdHIgKyBfX3NpemUsIF9NX2dldF9hbGxvY2F0b3IoKSk7CisJICB0aGlzLT5fRGF0YV9kZWFsbG9jYXRlKF9fY3N0ciwgX19zaXplKTsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9Sb3BlX1JvcGVSZXA8X0NoYXJULCBfQWxsb2M+OjoKKyAgICBfU19mcmVlX3N0cmluZyhfQ2hhclQqIF9fcywgc2l6ZV90IF9fbiwgYWxsb2NhdG9yX3R5cGUmIF9fYSkKKyAgICB7CisgICAgICBpZiAoIV9TX2lzX2Jhc2ljX2NoYXJfdHlwZSgoX0NoYXJUKikwKSkKKwlfRGVzdHJveShfX3MsIF9fcyArIF9fbiwgX19hKTsKKyAgICAgIAorICAgICAgLy8gIFRoaXMgaGFzIHRvIGJlIGEgc3RhdGljIG1lbWJlciwgc28gdGhpcyBnZXRzIGEgYml0IG1lc3N5CisgICAgICBfX2EuZGVhbGxvY2F0ZShfX3MsCisJCSAgICAgX1JvcGVfUm9wZUxlYWY8X0NoYXJULCBfQWxsb2M+OjpfU19yb3VuZGVkX3VwX3NpemUoX19uKSk7CisgICAgfQorCisgIC8vICBUaGVyZSBhcmUgc2V2ZXJhbCByZWFzb25zIGZvciBub3QgZG9pbmcgdGhpcyB3aXRoIHZpcnR1YWwgZGVzdHJ1Y3RvcnMKKyAgLy8gIGFuZCBhIGNsYXNzIHNwZWNpZmljIGRlbGV0ZSBvcGVyYXRvcjoKKyAgLy8gIC0gQSBjbGFzcyBzcGVjaWZpYyBkZWxldGUgb3BlcmF0b3IgY2FuJ3QgZWFzaWx5IGdldCBhY2Nlc3MgdG8KKyAgLy8gICAgYWxsb2NhdG9yIGluc3RhbmNlcyBpZiB3ZSBuZWVkIHRoZW0uCisgIC8vICAtIEFueSB2aXJ0dWFsIGZ1bmN0aW9uIHdvdWxkIG5lZWQgYSA0IG9yIGJ5dGUgdnRhYmxlIHBvaW50ZXI7CisgIC8vICAgIHRoaXMgb25seSByZXF1aXJlcyBhIG9uZSBieXRlIHRhZyBwZXIgb2JqZWN0LgorICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgdm9pZAorICAgIF9Sb3BlX1JvcGVSZXA8X0NoYXJULCBfQWxsb2M+OjoKKyAgICBfTV9mcmVlX3RyZWUoKQorICAgIHsKKyAgICAgIHN3aXRjaChfTV90YWcpCisJeworCWNhc2UgX19kZXRhaWw6Ol9TX2xlYWY6CisJICB7CisJICAgIF9Sb3BlX1JvcGVMZWFmPF9DaGFyVCwgX0FsbG9jPiogX19sCisJICAgICAgPSAoX1JvcGVfUm9wZUxlYWY8X0NoYXJULCBfQWxsb2M+Kil0aGlzOworCSAgICBfX2wtPl9Sb3BlX1JvcGVMZWFmPF9DaGFyVCwgX0FsbG9jPjo6fl9Sb3BlX1JvcGVMZWFmKCk7CisJICAgIF9MX2RlYWxsb2NhdGUoX19sLCAxKTsKKwkgICAgYnJlYWs7CisJICB9CisJY2FzZSBfX2RldGFpbDo6X1NfY29uY2F0OgorCSAgeworCSAgICBfUm9wZV9Sb3BlQ29uY2F0ZW5hdGlvbjxfQ2hhclQsX0FsbG9jPiogX19jCisJICAgICAgPSAoX1JvcGVfUm9wZUNvbmNhdGVuYXRpb248X0NoYXJULCBfQWxsb2M+Kil0aGlzOworCSAgICBfX2MtPl9Sb3BlX1JvcGVDb25jYXRlbmF0aW9uPF9DaGFyVCwgX0FsbG9jPjo6CisJICAgICAgfl9Sb3BlX1JvcGVDb25jYXRlbmF0aW9uKCk7CisJICAgIF9DX2RlYWxsb2NhdGUoX19jLCAxKTsKKwkgICAgYnJlYWs7CisJICB9CisJY2FzZSBfX2RldGFpbDo6X1NfZnVuY3Rpb246CisJICB7CisJICAgIF9Sb3BlX1JvcGVGdW5jdGlvbjxfQ2hhclQsIF9BbGxvYz4qIF9fZgorCSAgICAgID0gKF9Sb3BlX1JvcGVGdW5jdGlvbjxfQ2hhclQsIF9BbGxvYz4qKXRoaXM7CisJICAgIF9fZi0+X1JvcGVfUm9wZUZ1bmN0aW9uPF9DaGFyVCwgX0FsbG9jPjo6fl9Sb3BlX1JvcGVGdW5jdGlvbigpOworCSAgICBfRl9kZWFsbG9jYXRlKF9fZiwgMSk7CisJICAgIGJyZWFrOworCSAgfQorCWNhc2UgX19kZXRhaWw6Ol9TX3N1YnN0cmluZ2ZuOgorCSAgeworCSAgICBfUm9wZV9Sb3BlU3Vic3RyaW5nPF9DaGFyVCwgX0FsbG9jPiogX19zcyA9CisJICAgICAgKF9Sb3BlX1JvcGVTdWJzdHJpbmc8X0NoYXJULCBfQWxsb2M+Kil0aGlzOworCSAgICBfX3NzLT5fUm9wZV9Sb3BlU3Vic3RyaW5nPF9DaGFyVCwgX0FsbG9jPjo6CisJICAgICAgfl9Sb3BlX1JvcGVTdWJzdHJpbmcoKTsKKwkgICAgX1NfZGVhbGxvY2F0ZShfX3NzLCAxKTsKKwkgICAgYnJlYWs7CisJICB9CisJfQorICAgIH0KKyNlbHNlCisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgX1JvcGVfUm9wZVJlcDxfQ2hhclQsIF9BbGxvYz46OgorICAgIF9TX2ZyZWVfc3RyaW5nKGNvbnN0IF9DaGFyVCosIHNpemVfdCwgYWxsb2NhdG9yX3R5cGUpCisgICAgeyB9CisKKyNlbmRpZgorCisgIC8vIENvbmNhdGVuYXRlIGEgQyBzdHJpbmcgb250byBhIGxlYWYgcm9wZSBieSBjb3B5aW5nIHRoZSByb3BlIGRhdGEuCisgIC8vIFVzZWQgZm9yIHNob3J0IHJvcGVzLgorICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgdHlwZW5hbWUgcm9wZTxfQ2hhclQsIF9BbGxvYz46Ol9Sb3BlTGVhZioKKyAgICByb3BlPF9DaGFyVCwgX0FsbG9jPjo6CisgICAgX1NfbGVhZl9jb25jYXRfY2hhcl9pdGVyKF9Sb3BlTGVhZiogX19yLCBjb25zdCBfQ2hhclQqIF9faXRlciwgc2l6ZV90IF9fbGVuKQorICAgIHsKKyAgICAgIHNpemVfdCBfX29sZF9sZW4gPSBfX3ItPl9NX3NpemU7CisgICAgICBfQ2hhclQqIF9fbmV3X2RhdGEgPSAoX0NoYXJUKikKKwlfRGF0YV9hbGxvY2F0ZShfU19yb3VuZGVkX3VwX3NpemUoX19vbGRfbGVuICsgX19sZW4pKTsKKyAgICAgIF9Sb3BlTGVhZiogX19yZXN1bHQ7CisKKyAgICAgIHVuaW5pdGlhbGl6ZWRfY29weV9uKF9fci0+X01fZGF0YSwgX19vbGRfbGVuLCBfX25ld19kYXRhKTsKKyAgICAgIHVuaW5pdGlhbGl6ZWRfY29weV9uKF9faXRlciwgX19sZW4sIF9fbmV3X2RhdGEgKyBfX29sZF9sZW4pOworICAgICAgX1NfY29uZF9zdG9yZV9lb3MoX19uZXdfZGF0YVtfX29sZF9sZW4gKyBfX2xlbl0pOworICAgICAgX190cnkKKwl7CisJICBfX3Jlc3VsdCA9IF9TX25ld19Sb3BlTGVhZihfX25ld19kYXRhLCBfX29sZF9sZW4gKyBfX2xlbiwKKwkJCQkgICAgIF9fci0+X01fZ2V0X2FsbG9jYXRvcigpKTsKKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBfUm9wZVJlcDo6X19TVExfRlJFRV9TVFJJTkcoX19uZXdfZGF0YSwgX19vbGRfbGVuICsgX19sZW4sCisJCQkJICAgICAgX19yLT5fTV9nZXRfYWxsb2NhdG9yKCkpOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgICAgcmV0dXJuIF9fcmVzdWx0OworICAgIH0KKworI2lmbmRlZiBfX0dDCisgIC8vIEFzIGFib3ZlLCBidXQgaXQncyBPSyB0byBjbG9iYmVyIG9yaWdpbmFsIGlmIHJlZmNvdW50IGlzIDEKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHR5cGVuYW1lIHJvcGU8X0NoYXJULF9BbGxvYz46Ol9Sb3BlTGVhZioKKyAgICByb3BlPF9DaGFyVCwgX0FsbG9jPjo6CisgICAgX1NfZGVzdHJfbGVhZl9jb25jYXRfY2hhcl9pdGVyKF9Sb3BlTGVhZiogX19yLCBjb25zdCBfQ2hhclQqIF9faXRlciwKKwkJCQkgICBzaXplX3QgX19sZW4pCisgICAgeworICAgICAgaWYgKF9fci0+X01fcmVmX2NvdW50ID4gMSkKKwlyZXR1cm4gX1NfbGVhZl9jb25jYXRfY2hhcl9pdGVyKF9fciwgX19pdGVyLCBfX2xlbik7CisgICAgICBzaXplX3QgX19vbGRfbGVuID0gX19yLT5fTV9zaXplOworICAgICAgaWYgKF9TX2FsbG9jYXRlZF9jYXBhY2l0eShfX29sZF9sZW4pID49IF9fb2xkX2xlbiArIF9fbGVuKQorCXsKKwkgIC8vIFRoZSBzcGFjZSBoYXMgYmVlbiBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZm9yIHRoZSBzdGFuZGFyZAorCSAgLy8gY2hhcmFjdGVyIHR5cGVzLiAgQnV0IHRoYXQgZG9lc24ndCBtYXR0ZXIgZm9yIHRob3NlIHR5cGVzLgorCSAgdW5pbml0aWFsaXplZF9jb3B5X24oX19pdGVyLCBfX2xlbiwgX19yLT5fTV9kYXRhICsgX19vbGRfbGVuKTsKKwkgIGlmIChfU19pc19iYXNpY19jaGFyX3R5cGUoKF9DaGFyVCopMCkpCisJICAgIF9TX2NvbmRfc3RvcmVfZW9zKF9fci0+X01fZGF0YVtfX29sZF9sZW4gKyBfX2xlbl0pOworCSAgZWxzZSBpZiAoX19yLT5fTV9jX3N0cmluZyAhPSBfX3ItPl9NX2RhdGEgJiYgMCAhPSBfX3ItPl9NX2Nfc3RyaW5nKQorCSAgICB7CisJICAgICAgX19yLT5fTV9mcmVlX2Nfc3RyaW5nKCk7CisJICAgICAgX19yLT5fTV9jX3N0cmluZyA9IDA7CisJICAgIH0KKwkgIF9fci0+X01fc2l6ZSA9IF9fb2xkX2xlbiArIF9fbGVuOworCSAgX19yLT5fTV9yZWZfY291bnQgPSAyOworCSAgcmV0dXJuIF9fcjsKKwl9CisgICAgICBlbHNlCisJeworCSAgX1JvcGVMZWFmKiBfX3Jlc3VsdCA9IF9TX2xlYWZfY29uY2F0X2NoYXJfaXRlcihfX3IsIF9faXRlciwgX19sZW4pOworCSAgcmV0dXJuIF9fcmVzdWx0OworCX0KKyAgICB9CisjZW5kaWYKKworICAvLyBBc3N1bWVzIGxlZnQgYW5kIHJpZ2h0IGFyZSBub3QgMC4KKyAgLy8gRG9lcyBub3QgaW5jcmVtZW50IChub3IgZGVjcmVtZW50IG9uIGV4Y2VwdGlvbikgY2hpbGQgcmVmZXJlbmNlIGNvdW50cy4KKyAgLy8gUmVzdWx0IGhhcyByZWYgY291bnQgMS4KKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHR5cGVuYW1lIHJvcGU8X0NoYXJULCBfQWxsb2M+OjpfUm9wZVJlcCoKKyAgICByb3BlPF9DaGFyVCwgX0FsbG9jPjo6CisgICAgX1NfdHJlZV9jb25jYXQoX1JvcGVSZXAqIF9fbGVmdCwgX1JvcGVSZXAqIF9fcmlnaHQpCisgICAgeworICAgICAgX1JvcGVDb25jYXRlbmF0aW9uKiBfX3Jlc3VsdCA9IF9TX25ld19Sb3BlQ29uY2F0ZW5hdGlvbihfX2xlZnQsIF9fcmlnaHQsCisJCQkJCQkJICAgICAgX19sZWZ0LT4KKwkJCQkJCQkgICAgICBfTV9nZXRfYWxsb2NhdG9yKCkpOworICAgICAgc2l6ZV90IF9fZGVwdGggPSBfX3Jlc3VsdC0+X01fZGVwdGg7CisgICAgICAKKyAgICAgIGlmIChfX2RlcHRoID4gMjAKKwkgICYmIChfX3Jlc3VsdC0+X01fc2l6ZSA8IDEwMDAKKwkgICAgICB8fCBfX2RlcHRoID4gc2l6ZV90KF9fZGV0YWlsOjpfU19tYXhfcm9wZV9kZXB0aCkpKQorCXsKKwkgIF9Sb3BlUmVwKiBfX2JhbGFuY2VkOworCisJICBfX3RyeQorCSAgICB7CisJICAgICAgX19iYWxhbmNlZCA9IF9TX2JhbGFuY2UoX19yZXN1bHQpOworCSAgICAgIF9fcmVzdWx0LT5fTV91bnJlZl9ub25uaWwoKTsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsKKwkgICAgICBfQ19kZWFsbG9jYXRlKF9fcmVzdWx0LDEpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJICAvLyBJbiBjYXNlIG9mIGV4Y2VwdGlvbiwgd2UgbmVlZCB0byBkZWFsbG9jYXRlCisJICAvLyBvdGhlcndpc2UgZGFuZ2xpbmcgcmVzdWx0IG5vZGUuICBCdXQgY2FsbGVyCisJICAvLyBzdGlsbCBvd25zIGl0cyBjaGlsZHJlbi4gIFRodXMgdW5yZWYgaXMKKwkgIC8vIGluYXBwcm9wcmlhdGUuCisJICByZXR1cm4gX19iYWxhbmNlZDsKKwl9CisgICAgICBlbHNlCisJcmV0dXJuIF9fcmVzdWx0OworICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgdHlwZW5hbWUgcm9wZTxfQ2hhclQsIF9BbGxvYz46Ol9Sb3BlUmVwKgorICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+OjoKKyAgICBfU19jb25jYXRfY2hhcl9pdGVyKF9Sb3BlUmVwKiBfX3IsIGNvbnN0IF9DaGFyVCpfX3MsIHNpemVfdCBfX3NsZW4pCisgICAgeworICAgICAgX1JvcGVSZXAqIF9fcmVzdWx0OworICAgICAgaWYgKDAgPT0gX19zbGVuKQorCXsKKwkgIF9TX3JlZihfX3IpOworCSAgcmV0dXJuIF9fcjsKKwl9CisgICAgICBpZiAoMCA9PSBfX3IpCisJcmV0dXJuIF9fU1RMX1JPUEVfRlJPTV9VTk9XTkVEX0NIQVJfUFRSKF9fcywgX19zbGVuLAorCQkJCQkJX19yLT5fTV9nZXRfYWxsb2NhdG9yKCkpOworICAgICAgaWYgKF9fci0+X01fdGFnID09IF9fZGV0YWlsOjpfU19sZWFmCisJICAmJiBfX3ItPl9NX3NpemUgKyBfX3NsZW4gPD0gc2l6ZV90KF9TX2NvcHlfbWF4KSkKKwl7CisJICBfX3Jlc3VsdCA9IF9TX2xlYWZfY29uY2F0X2NoYXJfaXRlcigoX1JvcGVMZWFmKilfX3IsIF9fcywgX19zbGVuKTsKKwkgIHJldHVybiBfX3Jlc3VsdDsKKwl9CisgICAgICBpZiAoX19kZXRhaWw6Ol9TX2NvbmNhdCA9PSBfX3ItPl9NX3RhZworCSAgJiYgX19kZXRhaWw6Ol9TX2xlYWYgPT0gKChfUm9wZUNvbmNhdGVuYXRpb24qKSBfX3IpLT5fTV9yaWdodC0+X01fdGFnKQorCXsKKwkgIF9Sb3BlTGVhZiogX19yaWdodCA9CisJICAgIChfUm9wZUxlYWYqICkoKChfUm9wZUNvbmNhdGVuYXRpb24qIClfX3IpLT5fTV9yaWdodCk7CisJICBpZiAoX19yaWdodC0+X01fc2l6ZSArIF9fc2xlbiA8PSBzaXplX3QoX1NfY29weV9tYXgpKQorCSAgICB7CisJICAgICAgX1JvcGVSZXAqIF9fbGVmdCA9ICgoX1JvcGVDb25jYXRlbmF0aW9uKilfX3IpLT5fTV9sZWZ0OworCSAgICAgIF9Sb3BlUmVwKiBfX25yaWdodCA9CisJCV9TX2xlYWZfY29uY2F0X2NoYXJfaXRlcigoX1JvcGVMZWFmKilfX3JpZ2h0LCBfX3MsIF9fc2xlbik7CisJICAgICAgX19sZWZ0LT5fTV9yZWZfbm9ubmlsKCk7CisJICAgICAgX190cnkKKwkJeyBfX3Jlc3VsdCA9IF9TX3RyZWVfY29uY2F0KF9fbGVmdCwgX19ucmlnaHQpOyB9CisJICAgICAgX19jYXRjaCguLi4pCisJCXsKKwkJICBfU191bnJlZihfX2xlZnQpOworCQkgIF9TX3VucmVmKF9fbnJpZ2h0KTsKKwkJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkJfQorCSAgICAgIHJldHVybiBfX3Jlc3VsdDsKKwkgICAgfQorCX0KKyAgICAgIF9Sb3BlUmVwKiBfX25yaWdodCA9CisJX19TVExfUk9QRV9GUk9NX1VOT1dORURfQ0hBUl9QVFIoX19zLCBfX3NsZW4sIF9fci0+X01fZ2V0X2FsbG9jYXRvcigpKTsKKyAgICAgIF9fdHJ5CisJeworCSAgX19yLT5fTV9yZWZfbm9ubmlsKCk7CisJICBfX3Jlc3VsdCA9IF9TX3RyZWVfY29uY2F0KF9fciwgX19ucmlnaHQpOworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIF9TX3VucmVmKF9fcik7CisJICBfU191bnJlZihfX25yaWdodCk7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisjaWZuZGVmIF9fR0MKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHR5cGVuYW1lIHJvcGU8X0NoYXJULF9BbGxvYz46Ol9Sb3BlUmVwKgorICAgIHJvcGU8X0NoYXJULF9BbGxvYz46OgorICAgIF9TX2Rlc3RyX2NvbmNhdF9jaGFyX2l0ZXIoX1JvcGVSZXAqIF9fciwgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdCBfX3NsZW4pCisgICAgeworICAgICAgX1JvcGVSZXAqIF9fcmVzdWx0OworICAgICAgaWYgKDAgPT0gX19yKQorCXJldHVybiBfX1NUTF9ST1BFX0ZST01fVU5PV05FRF9DSEFSX1BUUihfX3MsIF9fc2xlbiwKKwkJCQkJCV9fci0+X01fZ2V0X2FsbG9jYXRvcigpKTsKKyAgICAgIHNpemVfdCBfX2NvdW50ID0gX19yLT5fTV9yZWZfY291bnQ7CisgICAgICBzaXplX3QgX19vcmlnX3NpemUgPSBfX3ItPl9NX3NpemU7CisgICAgICBpZiAoX19jb3VudCA+IDEpCisJcmV0dXJuIF9TX2NvbmNhdF9jaGFyX2l0ZXIoX19yLCBfX3MsIF9fc2xlbik7CisgICAgICBpZiAoMCA9PSBfX3NsZW4pCisJeworCSAgX19yLT5fTV9yZWZfY291bnQgPSAyOyAgICAgIC8vIE9uZSBtb3JlIHRoYW4gYmVmb3JlCisJICByZXR1cm4gX19yOworCX0KKyAgICAgIGlmIChfX29yaWdfc2l6ZSArIF9fc2xlbiA8PSBzaXplX3QoX1NfY29weV9tYXgpCisJICAmJiBfX2RldGFpbDo6X1NfbGVhZiA9PSBfX3ItPl9NX3RhZykKKwl7CisJICBfX3Jlc3VsdCA9IF9TX2Rlc3RyX2xlYWZfY29uY2F0X2NoYXJfaXRlcigoX1JvcGVMZWFmKilfX3IsIF9fcywgCisJCQkJCQkgICAgX19zbGVuKTsKKwkgIHJldHVybiBfX3Jlc3VsdDsKKwl9CisgICAgICBpZiAoX19kZXRhaWw6Ol9TX2NvbmNhdCA9PSBfX3ItPl9NX3RhZykKKwl7CisJICBfUm9wZUxlYWYqIF9fcmlnaHQgPSAoX1JvcGVMZWFmKikoKChfUm9wZUNvbmNhdGVuYXRpb24qKQorCQkJCQkgICAgIF9fciktPl9NX3JpZ2h0KTsKKwkgIGlmIChfX2RldGFpbDo6X1NfbGVhZiA9PSBfX3JpZ2h0LT5fTV90YWcKKwkgICAgICAmJiBfX3JpZ2h0LT5fTV9zaXplICsgX19zbGVuIDw9IHNpemVfdChfU19jb3B5X21heCkpCisJICAgIHsKKwkgICAgICBfUm9wZVJlcCogX19uZXdfcmlnaHQgPQorCQlfU19kZXN0cl9sZWFmX2NvbmNhdF9jaGFyX2l0ZXIoX19yaWdodCwgX19zLCBfX3NsZW4pOworCSAgICAgIGlmIChfX3JpZ2h0ID09IF9fbmV3X3JpZ2h0KQorCQlfX25ld19yaWdodC0+X01fcmVmX2NvdW50ID0gMTsKKwkgICAgICBlbHNlCisJCV9fcmlnaHQtPl9NX3VucmVmX25vbm5pbCgpOworCSAgICAgIF9fci0+X01fcmVmX2NvdW50ID0gMjsgICAgLy8gT25lIG1vcmUgdGhhbiBiZWZvcmUuCisJICAgICAgKChfUm9wZUNvbmNhdGVuYXRpb24qKV9fciktPl9NX3JpZ2h0ID0gX19uZXdfcmlnaHQ7CisJICAgICAgX19yLT5fTV9zaXplID0gX19vcmlnX3NpemUgKyBfX3NsZW47CisJICAgICAgaWYgKDAgIT0gX19yLT5fTV9jX3N0cmluZykKKwkJeworCQkgIF9fci0+X01fZnJlZV9jX3N0cmluZygpOworCQkgIF9fci0+X01fY19zdHJpbmcgPSAwOworCQl9CisJICAgICAgcmV0dXJuIF9fcjsKKwkgICAgfQorCX0KKyAgICAgIF9Sb3BlUmVwKiBfX3JpZ2h0ID0KKwlfX1NUTF9ST1BFX0ZST01fVU5PV05FRF9DSEFSX1BUUihfX3MsIF9fc2xlbiwgX19yLT5fTV9nZXRfYWxsb2NhdG9yKCkpOworICAgICAgX19yLT5fTV9yZWZfbm9ubmlsKCk7CisgICAgICBfX3RyeQorCXsgX19yZXN1bHQgPSBfU190cmVlX2NvbmNhdChfX3IsIF9fcmlnaHQpOyB9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBfU191bnJlZihfX3IpOworCSAgX1NfdW5yZWYoX19yaWdodCk7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorI2VuZGlmIC8qICFfX0dDICovCisgIAorICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgdHlwZW5hbWUgcm9wZTxfQ2hhclQsIF9BbGxvYz46Ol9Sb3BlUmVwKgorICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+OjoKKyAgICBfU19jb25jYXQoX1JvcGVSZXAqIF9fbGVmdCwgX1JvcGVSZXAqIF9fcmlnaHQpCisgICAgeworICAgICAgaWYgKDAgPT0gX19sZWZ0KQorCXsKKwkgIF9TX3JlZihfX3JpZ2h0KTsKKwkgIHJldHVybiBfX3JpZ2h0OworCX0KKyAgICAgIGlmICgwID09IF9fcmlnaHQpCisJeworCSAgX19sZWZ0LT5fTV9yZWZfbm9ubmlsKCk7CisJICByZXR1cm4gX19sZWZ0OworCX0KKyAgICAgIGlmIChfX2RldGFpbDo6X1NfbGVhZiA9PSBfX3JpZ2h0LT5fTV90YWcpCisJeworCSAgaWYgKF9fZGV0YWlsOjpfU19sZWFmID09IF9fbGVmdC0+X01fdGFnKQorCSAgICB7CisJICAgICAgaWYgKF9fcmlnaHQtPl9NX3NpemUgKyBfX2xlZnQtPl9NX3NpemUgPD0gc2l6ZV90KF9TX2NvcHlfbWF4KSkKKwkJcmV0dXJuIF9TX2xlYWZfY29uY2F0X2NoYXJfaXRlcigoX1JvcGVMZWFmKilfX2xlZnQsCisJCQkJCQkoKF9Sb3BlTGVhZiopX19yaWdodCktPl9NX2RhdGEsCisJCQkJCQlfX3JpZ2h0LT5fTV9zaXplKTsKKwkgICAgfQorCSAgZWxzZSBpZiAoX19kZXRhaWw6Ol9TX2NvbmNhdCA9PSBfX2xlZnQtPl9NX3RhZworCQkgICAmJiBfX2RldGFpbDo6X1NfbGVhZiA9PSAoKF9Sb3BlQ29uY2F0ZW5hdGlvbiopCisJCQkJCQkgICBfX2xlZnQpLT5fTV9yaWdodC0+X01fdGFnKQorCSAgICB7CisJICAgICAgX1JvcGVMZWFmKiBfX2xlZnRyaWdodCA9CisJCShfUm9wZUxlYWYqKSgoKF9Sb3BlQ29uY2F0ZW5hdGlvbiopX19sZWZ0KS0+X01fcmlnaHQpOworCSAgICAgIGlmIChfX2xlZnRyaWdodC0+X01fc2l6ZQorCQkgICsgX19yaWdodC0+X01fc2l6ZSA8PSBzaXplX3QoX1NfY29weV9tYXgpKQorCQl7CisJCSAgX1JvcGVSZXAqIF9fbGVmdGxlZnQgPSAoKF9Sb3BlQ29uY2F0ZW5hdGlvbiopX19sZWZ0KS0+X01fbGVmdDsKKwkJICBfUm9wZVJlcCogX19yZXN0ID0gX1NfbGVhZl9jb25jYXRfY2hhcl9pdGVyKF9fbGVmdHJpZ2h0LAorCQkJCQkJCSAgICAgICgoX1JvcGVMZWFmKikKKwkJCQkJCQkgICAgICAgX19yaWdodCktPgorCQkJCQkJCSAgICAgIF9NX2RhdGEsCisJCQkJCQkJICAgICAgX19yaWdodC0+X01fc2l6ZSk7CisJCSAgX19sZWZ0bGVmdC0+X01fcmVmX25vbm5pbCgpOworCQkgIF9fdHJ5CisJCSAgICB7IHJldHVybihfU190cmVlX2NvbmNhdChfX2xlZnRsZWZ0LCBfX3Jlc3QpKTsgfQorCQkgIF9fY2F0Y2goLi4uKQorCQkgICAgeworCQkgICAgICBfU191bnJlZihfX2xlZnRsZWZ0KTsKKwkJICAgICAgX1NfdW5yZWYoX19yZXN0KTsKKwkJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKyAgICAgIF9fbGVmdC0+X01fcmVmX25vbm5pbCgpOworICAgICAgX19yaWdodC0+X01fcmVmX25vbm5pbCgpOworICAgICAgX190cnkKKwl7IHJldHVybihfU190cmVlX2NvbmNhdChfX2xlZnQsIF9fcmlnaHQpKTsgfQorICAgICAgX19jYXRjaCguLi4pCisJeworCSAgX1NfdW5yZWYoX19sZWZ0KTsKKwkgIF9TX3VucmVmKF9fcmlnaHQpOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgdHlwZW5hbWUgcm9wZTxfQ2hhclQsIF9BbGxvYz46Ol9Sb3BlUmVwKgorICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+OjoKKyAgICBfU19zdWJzdHJpbmcoX1JvcGVSZXAqIF9fYmFzZSwgc2l6ZV90IF9fc3RhcnQsIHNpemVfdCBfX2VuZHAxKQorICAgIHsKKyAgICAgIGlmICgwID09IF9fYmFzZSkKKwlyZXR1cm4gMDsKKyAgICAgIHNpemVfdCBfX2xlbiA9IF9fYmFzZS0+X01fc2l6ZTsKKyAgICAgIHNpemVfdCBfX2Fkal9lbmRwMTsKKyAgICAgIGNvbnN0IHNpemVfdCBfX2xhenlfdGhyZXNob2xkID0gMTI4OworICAgICAgCisgICAgICBpZiAoX19lbmRwMSA+PSBfX2xlbikKKwl7CisJICBpZiAoMCA9PSBfX3N0YXJ0KQorCSAgICB7CisJICAgICAgX19iYXNlLT5fTV9yZWZfbm9ubmlsKCk7CisJICAgICAgcmV0dXJuIF9fYmFzZTsKKwkgICAgfQorCSAgZWxzZQorCSAgICBfX2Fkal9lbmRwMSA9IF9fbGVuOworCSAgCisJfQorICAgICAgZWxzZQorCV9fYWRqX2VuZHAxID0gX19lbmRwMTsKKworICAgICAgc3dpdGNoKF9fYmFzZS0+X01fdGFnKQorCXsKKwljYXNlIF9fZGV0YWlsOjpfU19jb25jYXQ6CisJICAgIHsKKwkgICAgICBfUm9wZUNvbmNhdGVuYXRpb24qIF9fYyA9IChfUm9wZUNvbmNhdGVuYXRpb24qKV9fYmFzZTsKKwkgICAgICBfUm9wZVJlcCogX19sZWZ0ID0gX19jLT5fTV9sZWZ0OworCSAgICAgIF9Sb3BlUmVwKiBfX3JpZ2h0ID0gX19jLT5fTV9yaWdodDsKKwkgICAgICBzaXplX3QgX19sZWZ0X2xlbiA9IF9fbGVmdC0+X01fc2l6ZTsKKwkgICAgICBfUm9wZVJlcCogX19yZXN1bHQ7CisJICAgICAgCisJICAgICAgaWYgKF9fYWRqX2VuZHAxIDw9IF9fbGVmdF9sZW4pCisJCXJldHVybiBfU19zdWJzdHJpbmcoX19sZWZ0LCBfX3N0YXJ0LCBfX2VuZHAxKTsKKwkgICAgICBlbHNlIGlmIChfX3N0YXJ0ID49IF9fbGVmdF9sZW4pCisJCXJldHVybiBfU19zdWJzdHJpbmcoX19yaWdodCwgX19zdGFydCAtIF9fbGVmdF9sZW4sCisJCQkJICAgIF9fYWRqX2VuZHAxIC0gX19sZWZ0X2xlbik7CisJICAgICAgX1NlbGZfZGVzdHJ1Y3RfcHRyIF9fbGVmdF9yZXN1bHQoX1Nfc3Vic3RyaW5nKF9fbGVmdCwKKwkJCQkJCQkgICAgX19zdGFydCwKKwkJCQkJCQkgICAgX19sZWZ0X2xlbikpOworCSAgICAgIF9TZWxmX2Rlc3RydWN0X3B0ciBfX3JpZ2h0X3Jlc3VsdChfU19zdWJzdHJpbmcoX19yaWdodCwgMCwKKwkJCQkJCQkgICAgIF9fZW5kcDEgCisJCQkJCQkJICAgICAtIF9fbGVmdF9sZW4pKTsKKwkgICAgICBfX3Jlc3VsdCA9IF9TX2NvbmNhdChfX2xlZnRfcmVzdWx0LCBfX3JpZ2h0X3Jlc3VsdCk7CisJICAgICAgcmV0dXJuIF9fcmVzdWx0OworCSAgICB9CisJY2FzZSBfX2RldGFpbDo6X1NfbGVhZjoKKwkgIHsKKwkgICAgX1JvcGVMZWFmKiBfX2wgPSAoX1JvcGVMZWFmKilfX2Jhc2U7CisJICAgIF9Sb3BlTGVhZiogX19yZXN1bHQ7CisJICAgIHNpemVfdCBfX3Jlc3VsdF9sZW47CisJICAgIGlmIChfX3N0YXJ0ID49IF9fYWRqX2VuZHAxKQorCSAgICAgIHJldHVybiAwOworCSAgICBfX3Jlc3VsdF9sZW4gPSBfX2Fkal9lbmRwMSAtIF9fc3RhcnQ7CisJICAgIGlmIChfX3Jlc3VsdF9sZW4gPiBfX2xhenlfdGhyZXNob2xkKQorCSAgICAgIGdvdG8gbGF6eTsKKyNpZmRlZiBfX0dDCisJICAgIGNvbnN0IF9DaGFyVCogX19zZWN0aW9uID0gX19sLT5fTV9kYXRhICsgX19zdGFydDsKKwkgICAgX19yZXN1bHQgPSBfU19uZXdfUm9wZUxlYWYoX19zZWN0aW9uLCBfX3Jlc3VsdF9sZW4sCisJCQkJICAgICAgIF9fYmFzZS0+X01fZ2V0X2FsbG9jYXRvcigpKTsKKwkgICAgX19yZXN1bHQtPl9NX2Nfc3RyaW5nID0gMDsgIC8vIE5vdCBlb3MgdGVybWluYXRlZC4KKyNlbHNlCisJICAgIC8vIFdlIHNob3VsZCBzb21ldGltZXMgY3JlYXRlIHN1YnN0cmluZyBub2RlIGluc3RlYWQuCisJICAgIF9fcmVzdWx0ID0gX19TVExfUk9QRV9GUk9NX1VOT1dORURfQ0hBUl9QVFIoX19sLT5fTV9kYXRhICsgX19zdGFydCwKKwkJCQkJCQlfX3Jlc3VsdF9sZW4sCisJCQkJCQkJX19iYXNlLT4KKwkJCQkJCQlfTV9nZXRfYWxsb2NhdG9yKCkpOworI2VuZGlmCisJICAgIHJldHVybiBfX3Jlc3VsdDsKKwkgIH0KKwljYXNlIF9fZGV0YWlsOjpfU19zdWJzdHJpbmdmbjoKKwkgIC8vIEF2b2lkIGludHJvZHVjaW5nIG11bHRpcGxlIGxheWVycyBvZiBzdWJzdHJpbmcgbm9kZXMuCisJICB7CisJICAgIF9Sb3BlU3Vic3RyaW5nKiBfX29sZCA9IChfUm9wZVN1YnN0cmluZyopX19iYXNlOworCSAgICBzaXplX3QgX19yZXN1bHRfbGVuOworCSAgICBpZiAoX19zdGFydCA+PSBfX2Fkal9lbmRwMSkKKwkgICAgICByZXR1cm4gMDsKKwkgICAgX19yZXN1bHRfbGVuID0gX19hZGpfZW5kcDEgLSBfX3N0YXJ0OworCSAgICBpZiAoX19yZXN1bHRfbGVuID4gX19sYXp5X3RocmVzaG9sZCkKKwkgICAgICB7CisJCV9Sb3BlU3Vic3RyaW5nKiBfX3Jlc3VsdCA9CisJCSAgX1NfbmV3X1JvcGVTdWJzdHJpbmcoX19vbGQtPl9NX2Jhc2UsCisJCQkJICAgICAgIF9fc3RhcnQgKyBfX29sZC0+X01fc3RhcnQsCisJCQkJICAgICAgIF9fYWRqX2VuZHAxIC0gX19zdGFydCwKKwkJCQkgICAgICAgX19iYXNlLT5fTV9nZXRfYWxsb2NhdG9yKCkpOworCQlyZXR1cm4gX19yZXN1bHQ7CisJCQorCSAgICAgIH0gLy8gKioqIGVsc2UgZmFsbCB0aHJvdWdoOiAqKioKKwkgIH0KKwljYXNlIF9fZGV0YWlsOjpfU19mdW5jdGlvbjoKKwkgIHsKKwkgICAgX1JvcGVGdW5jdGlvbiogX19mID0gKF9Sb3BlRnVuY3Rpb24qKV9fYmFzZTsKKwkgICAgX0NoYXJUKiBfX3NlY3Rpb247CisJICAgIHNpemVfdCBfX3Jlc3VsdF9sZW47CisJICAgIGlmIChfX3N0YXJ0ID49IF9fYWRqX2VuZHAxKQorCSAgICAgIHJldHVybiAwOworCSAgICBfX3Jlc3VsdF9sZW4gPSBfX2Fkal9lbmRwMSAtIF9fc3RhcnQ7CisJICAgIAorCSAgICBpZiAoX19yZXN1bHRfbGVuID4gX19sYXp5X3RocmVzaG9sZCkKKwkgICAgICBnb3RvIGxhenk7CisJICAgIF9fc2VjdGlvbiA9IChfQ2hhclQqKQorCSAgICAgIF9EYXRhX2FsbG9jYXRlKF9TX3JvdW5kZWRfdXBfc2l6ZShfX3Jlc3VsdF9sZW4pKTsKKwkgICAgX190cnkKKwkgICAgICB7CSgqKF9fZi0+X01fZm4pKShfX3N0YXJ0LCBfX3Jlc3VsdF9sZW4sIF9fc2VjdGlvbik7IH0KKwkgICAgX19jYXRjaCguLi4pCisJICAgICAgeworCQlfUm9wZVJlcDo6X19TVExfRlJFRV9TVFJJTkcoX19zZWN0aW9uLCBfX3Jlc3VsdF9sZW4sCisJCQkJCSAgICBfX2Jhc2UtPl9NX2dldF9hbGxvY2F0b3IoKSk7CisJCV9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICAgIH0KKwkgICAgX1NfY29uZF9zdG9yZV9lb3MoX19zZWN0aW9uW19fcmVzdWx0X2xlbl0pOworCSAgICByZXR1cm4gX1NfbmV3X1JvcGVMZWFmKF9fc2VjdGlvbiwgX19yZXN1bHRfbGVuLAorCQkJCSAgIF9fYmFzZS0+X01fZ2V0X2FsbG9jYXRvcigpKTsKKwkgIH0KKwl9CisgICAgbGF6eToKKyAgICAgIHsKKwkvLyBDcmVhdGUgc3Vic3RyaW5nIG5vZGUuCisJcmV0dXJuIF9TX25ld19Sb3BlU3Vic3RyaW5nKF9fYmFzZSwgX19zdGFydCwgX19hZGpfZW5kcDEgLSBfX3N0YXJ0LAorCQkJCSAgICBfX2Jhc2UtPl9NX2dldF9hbGxvY2F0b3IoKSk7CisgICAgICB9CisgICAgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KKyAgICBjbGFzcyBfUm9wZV9mbGF0dGVuX2NoYXJfY29uc3VtZXIKKyAgICA6IHB1YmxpYyBfUm9wZV9jaGFyX2NvbnN1bWVyPF9DaGFyVD4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIF9DaGFyVCogX01fYnVmX3B0cjsKKyAgICBwdWJsaWM6CisgICAgICAKKyAgICAgIF9Sb3BlX2ZsYXR0ZW5fY2hhcl9jb25zdW1lcihfQ2hhclQqIF9fYnVmZmVyKQorICAgICAgeyBfTV9idWZfcHRyID0gX19idWZmZXI7IH07CisKKyAgICAgIH5fUm9wZV9mbGF0dGVuX2NoYXJfY29uc3VtZXIoKSB7fQorICAgICAgCisgICAgICBib29sCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9DaGFyVCogX19sZWFmLCBzaXplX3QgX19uKQorICAgICAgeworCXVuaW5pdGlhbGl6ZWRfY29weV9uKF9fbGVhZiwgX19uLCBfTV9idWZfcHRyKTsKKwlfTV9idWZfcHRyICs9IF9fbjsKKwlyZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KKyAgICBjbGFzcyBfUm9wZV9maW5kX2NoYXJfY2hhcl9jb25zdW1lcgorICAgIDogcHVibGljIF9Sb3BlX2NoYXJfY29uc3VtZXI8X0NoYXJUPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgX0NoYXJUIF9NX3BhdHRlcm47CisgICAgcHVibGljOgorICAgICAgc2l6ZV90IF9NX2NvdW50OyAgLy8gTnVtYmVyIG9mIG5vbm1hdGNoaW5nIGNoYXJhY3RlcnMKKyAgICAgIAorICAgICAgX1JvcGVfZmluZF9jaGFyX2NoYXJfY29uc3VtZXIoX0NoYXJUIF9fcCkKKyAgICAgIDogX01fcGF0dGVybihfX3ApLCBfTV9jb3VudCgwKSB7fQorCQorICAgICAgfl9Sb3BlX2ZpbmRfY2hhcl9jaGFyX2NvbnN1bWVyKCkge30KKyAgICAgIAorICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfQ2hhclQqIF9fbGVhZiwgc2l6ZV90IF9fbikKKyAgICAgIHsKKwlzaXplX3QgX19pOworCWZvciAoX19pID0gMDsgX19pIDwgX19uOyBfX2krKykKKwkgIHsKKwkgICAgaWYgKF9fbGVhZltfX2ldID09IF9NX3BhdHRlcm4pCisJICAgICAgeworCQlfTV9jb3VudCArPSBfX2k7CisJCXJldHVybiBmYWxzZTsKKwkgICAgICB9CisJICB9CisJX01fY291bnQgKz0gX19uOyByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KKyAgLy8gSGVyZSBfQ2hhclQgaXMgYm90aCB0aGUgc3RyZWFtIGFuZCByb3BlIGNoYXJhY3RlciB0eXBlLgorICAgIGNsYXNzIF9Sb3BlX2luc2VydF9jaGFyX2NvbnN1bWVyCisgICAgOiBwdWJsaWMgX1JvcGVfY2hhcl9jb25zdW1lcjxfQ2hhclQ+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+IF9JbnNlcnRfb3N0cmVhbTsKKyAgICAgIF9JbnNlcnRfb3N0cmVhbSYgX01fbzsKKyAgICBwdWJsaWM6CisgICAgICBfUm9wZV9pbnNlcnRfY2hhcl9jb25zdW1lcihfSW5zZXJ0X29zdHJlYW0mIF9fd3JpdGVyKQorCTogX01fbyhfX3dyaXRlcikge307CisgICAgICB+X1JvcGVfaW5zZXJ0X2NoYXJfY29uc3VtZXIoKSB7IH07CisgICAgICAvLyBDYWxsZXIgaXMgcHJlc3VtZWQgdG8gb3duIHRoZSBvc3RyZWFtCisgICAgICBib29sIG9wZXJhdG9yKCkgKGNvbnN0IF9DaGFyVCogX19sZWFmLCBzaXplX3QgX19uKTsKKyAgICAgIC8vIFJldHVybnMgdHJ1ZSB0byBjb250aW51ZSB0cmF2ZXJzYWwuCisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CisgICAgYm9vbAorICAgIF9Sb3BlX2luc2VydF9jaGFyX2NvbnN1bWVyPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIG9wZXJhdG9yKCkoY29uc3QgX0NoYXJUKiBfX2xlYWYsIHNpemVfdCBfX24pCisgICAgeworICAgICAgc2l6ZV90IF9faTsKKyAgICAgIC8vICBXZSBhc3N1bWUgdGhhdCBmb3JtYXR0aW5nIGlzIHNldCB1cCBjb3JyZWN0bHkgZm9yIGVhY2ggZWxlbWVudC4KKyAgICAgIGZvciAoX19pID0gMDsgX19pIDwgX19uOyBfX2krKykKKwlfTV9vLnB1dChfX2xlYWZbX19pXSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGJvb2wKKyAgICByb3BlPF9DaGFyVCwgX0FsbG9jPjo6CisgICAgX1NfYXBwbHlfdG9fcGllY2VzKF9Sb3BlX2NoYXJfY29uc3VtZXI8X0NoYXJUPiYgX19jLAorCQkgICAgICAgY29uc3QgX1JvcGVSZXAqIF9fciwgc2l6ZV90IF9fYmVnaW4sIHNpemVfdCBfX2VuZCkKKyAgICB7CisgICAgICBpZiAoMCA9PSBfX3IpCisJcmV0dXJuIHRydWU7CisgICAgICBzd2l0Y2goX19yLT5fTV90YWcpCisJeworCWNhc2UgX19kZXRhaWw6Ol9TX2NvbmNhdDoKKwkgIHsKKwkgICAgX1JvcGVDb25jYXRlbmF0aW9uKiBfX2NvbmMgPSAoX1JvcGVDb25jYXRlbmF0aW9uKilfX3I7CisJICAgIF9Sb3BlUmVwKiBfX2xlZnQgPSAgX19jb25jLT5fTV9sZWZ0OworCSAgICBzaXplX3QgX19sZWZ0X2xlbiA9IF9fbGVmdC0+X01fc2l6ZTsKKwkgICAgaWYgKF9fYmVnaW4gPCBfX2xlZnRfbGVuKQorCSAgICAgIHsKKwkJc2l6ZV90IF9fbGVmdF9lbmQgPSBzdGQ6Om1pbihfX2xlZnRfbGVuLCBfX2VuZCk7CisJCWlmICghX1NfYXBwbHlfdG9fcGllY2VzKF9fYywgX19sZWZ0LCBfX2JlZ2luLCBfX2xlZnRfZW5kKSkKKwkJICByZXR1cm4gZmFsc2U7CisJICAgICAgfQorCSAgICBpZiAoX19lbmQgPiBfX2xlZnRfbGVuKQorCSAgICAgIHsKKwkJX1JvcGVSZXAqIF9fcmlnaHQgPSAgX19jb25jLT5fTV9yaWdodDsKKwkJc2l6ZV90IF9fcmlnaHRfc3RhcnQgPSBzdGQ6Om1heChfX2xlZnRfbGVuLCBfX2JlZ2luKTsKKwkJaWYgKCFfU19hcHBseV90b19waWVjZXMoX19jLCBfX3JpZ2h0LAorCQkJCQlfX3JpZ2h0X3N0YXJ0IC0gX19sZWZ0X2xlbiwKKwkJCQkJX19lbmQgLSBfX2xlZnRfbGVuKSkKKwkJICByZXR1cm4gZmFsc2U7CisJICAgICAgfQorCSAgfQorCSAgcmV0dXJuIHRydWU7CisJY2FzZSBfX2RldGFpbDo6X1NfbGVhZjoKKwkgIHsKKwkgICAgX1JvcGVMZWFmKiBfX2wgPSAoX1JvcGVMZWFmKilfX3I7CisJICAgIHJldHVybiBfX2MoX19sLT5fTV9kYXRhICsgX19iZWdpbiwgX19lbmQgLSBfX2JlZ2luKTsKKwkgIH0KKwljYXNlIF9fZGV0YWlsOjpfU19mdW5jdGlvbjoKKwljYXNlIF9fZGV0YWlsOjpfU19zdWJzdHJpbmdmbjoKKwkgICAgeworCSAgICAgIF9Sb3BlRnVuY3Rpb24qIF9fZiA9IChfUm9wZUZ1bmN0aW9uKilfX3I7CisJICAgICAgc2l6ZV90IF9fbGVuID0gX19lbmQgLSBfX2JlZ2luOworCSAgICAgIGJvb2wgX19yZXN1bHQ7CisJICAgICAgX0NoYXJUKiBfX2J1ZmZlciA9CisJCShfQ2hhclQqKV9BbGxvYygpLmFsbG9jYXRlKF9fbGVuICogc2l6ZW9mKF9DaGFyVCkpOworCSAgICAgIF9fdHJ5CisJCXsKKwkJICAoKihfX2YtPl9NX2ZuKSkoX19iZWdpbiwgX19sZW4sIF9fYnVmZmVyKTsKKwkJICBfX3Jlc3VsdCA9IF9fYyhfX2J1ZmZlciwgX19sZW4pOworICAgICAgICAgICAgICAgICAgX0FsbG9jKCkuZGVhbGxvY2F0ZShfX2J1ZmZlciwgX19sZW4gKiBzaXplb2YoX0NoYXJUKSk7CisgICAgICAgICAgICAgICAgfQorCSAgICAgIF9fY2F0Y2goLi4uKQorCQl7CisJCSAgX0FsbG9jKCkuZGVhbGxvY2F0ZShfX2J1ZmZlciwgX19sZW4gKiBzaXplb2YoX0NoYXJUKSk7CisJCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJCX0KKwkgICAgICByZXR1cm4gX19yZXN1bHQ7CisJICAgIH0KKwlkZWZhdWx0OgorCSAgcmV0dXJuIGZhbHNlOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgorICAgIGlubGluZSB2b2lkCisgICAgX1JvcGVfZmlsbChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fbywgc2l6ZV90IF9fbikKKyAgICB7CisgICAgICBjaGFyIF9fZiA9IF9fby5maWxsKCk7CisgICAgICBzaXplX3QgX19pOworICAgICAgCisgICAgICBmb3IgKF9faSA9IDA7IF9faSA8IF9fbjsgX19pKyspCisJX19vLnB1dChfX2YpOworICAgIH0KKworCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQ+CisgICAgaW5saW5lIGJvb2wKKyAgICBfUm9wZV9pc19zaW1wbGUoX0NoYXJUKikKKyAgICB7IHJldHVybiBmYWxzZTsgfQorCisgIGlubGluZSBib29sCisgIF9Sb3BlX2lzX3NpbXBsZShjaGFyKikKKyAgeyByZXR1cm4gdHJ1ZTsgfQorCisgIGlubGluZSBib29sCisgIF9Sb3BlX2lzX3NpbXBsZSh3Y2hhcl90KikKKyAgeyByZXR1cm4gdHJ1ZTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgorICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vLAorCSAgICAgICBjb25zdCByb3BlPF9DaGFyVCwgX0FsbG9jPiYgX19yKQorICAgIHsKKyAgICAgIHNpemVfdCBfX3cgPSBfX28ud2lkdGgoKTsKKyAgICAgIGJvb2wgX19sZWZ0ID0gYm9vbChfX28uZmxhZ3MoKSAmIHN0ZDo6aW9zOjpsZWZ0KTsKKyAgICAgIHNpemVfdCBfX3BhZF9sZW47CisgICAgICBzaXplX3QgX19yb3BlX2xlbiA9IF9fci5zaXplKCk7CisgICAgICBfUm9wZV9pbnNlcnRfY2hhcl9jb25zdW1lcjxfQ2hhclQsIF9UcmFpdHM+IF9fYyhfX28pOworICAgICAgYm9vbCBfX2lzX3NpbXBsZSA9IF9Sb3BlX2lzX3NpbXBsZSgoX0NoYXJUKikwKTsKKyAgICAgIAorICAgICAgaWYgKF9fcm9wZV9sZW4gPCBfX3cpCisJX19wYWRfbGVuID0gX193IC0gX19yb3BlX2xlbjsKKyAgICAgIGVsc2UKKwlfX3BhZF9sZW4gPSAwOworCisgICAgICBpZiAoIV9faXNfc2ltcGxlKQorCV9fby53aWR0aChfX3cgLyBfX3JvcGVfbGVuKTsKKyAgICAgIF9fdHJ5CisJeworCSAgaWYgKF9faXNfc2ltcGxlICYmICFfX2xlZnQgJiYgX19wYWRfbGVuID4gMCkKKwkgICAgX1JvcGVfZmlsbChfX28sIF9fcGFkX2xlbik7CisJICBfX3IuYXBwbHlfdG9fcGllY2VzKDAsIF9fci5zaXplKCksIF9fYyk7CisJICBpZiAoX19pc19zaW1wbGUgJiYgX19sZWZ0ICYmIF9fcGFkX2xlbiA+IDApCisJICAgIF9Sb3BlX2ZpbGwoX19vLCBfX3BhZF9sZW4pOworCSAgaWYgKCFfX2lzX3NpbXBsZSkKKwkgICAgX19vLndpZHRoKF9fdyk7CisJfQorICAgICAgX19jYXRjaCguLi4pCisJeworCSAgaWYgKCFfX2lzX3NpbXBsZSkKKwkgICAgX19vLndpZHRoKF9fdyk7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgICByZXR1cm4gX19vOworICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgX0NoYXJUKgorICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+OjoKKyAgICBfU19mbGF0dGVuKF9Sb3BlUmVwKiBfX3IsIHNpemVfdCBfX3N0YXJ0LCBzaXplX3QgX19sZW4sCisJICAgICAgIF9DaGFyVCogX19idWZmZXIpCisgICAgeworICAgICAgX1JvcGVfZmxhdHRlbl9jaGFyX2NvbnN1bWVyPF9DaGFyVD4gX19jKF9fYnVmZmVyKTsKKyAgICAgIF9TX2FwcGx5X3RvX3BpZWNlcyhfX2MsIF9fciwgX19zdGFydCwgX19zdGFydCArIF9fbGVuKTsKKyAgICAgIHJldHVybihfX2J1ZmZlciArIF9fbGVuKTsKKyAgICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHNpemVfdAorICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+OjoKKyAgICBmaW5kKF9DaGFyVCBfX3BhdHRlcm4sIHNpemVfdCBfX3N0YXJ0KSBjb25zdAorICAgIHsKKyAgICAgIF9Sb3BlX2ZpbmRfY2hhcl9jaGFyX2NvbnN1bWVyPF9DaGFyVD4gX19jKF9fcGF0dGVybik7CisgICAgICBfU19hcHBseV90b19waWVjZXMoX19jLCB0aGlzLT5fTV90cmVlX3B0ciwgX19zdGFydCwgc2l6ZSgpKTsKKyAgICAgIHNpemVfdHlwZSBfX3Jlc3VsdF9wb3MgPSBfX3N0YXJ0ICsgX19jLl9NX2NvdW50OworI2lmbmRlZiBfX1NUTF9PTERfUk9QRV9TRU1BTlRJQ1MKKyAgICAgIGlmIChfX3Jlc3VsdF9wb3MgPT0gc2l6ZSgpKQorCV9fcmVzdWx0X3BvcyA9IG5wb3M7CisjZW5kaWYKKyAgICAgIHJldHVybiBfX3Jlc3VsdF9wb3M7CisgICAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBfQ2hhclQqCisgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz46OgorICAgIF9TX2ZsYXR0ZW4oX1JvcGVSZXAqIF9fciwgX0NoYXJUKiBfX2J1ZmZlcikKKyAgICB7CisgICAgICBpZiAoMCA9PSBfX3IpCisJcmV0dXJuIF9fYnVmZmVyOworICAgICAgc3dpdGNoKF9fci0+X01fdGFnKQorCXsKKwljYXNlIF9fZGV0YWlsOjpfU19jb25jYXQ6CisJICB7CisJICAgIF9Sb3BlQ29uY2F0ZW5hdGlvbiogX19jID0gKF9Sb3BlQ29uY2F0ZW5hdGlvbiopX19yOworCSAgICBfUm9wZVJlcCogX19sZWZ0ID0gX19jLT5fTV9sZWZ0OworCSAgICBfUm9wZVJlcCogX19yaWdodCA9IF9fYy0+X01fcmlnaHQ7CisJICAgIF9DaGFyVCogX19yZXN0ID0gX1NfZmxhdHRlbihfX2xlZnQsIF9fYnVmZmVyKTsKKwkgICAgcmV0dXJuIF9TX2ZsYXR0ZW4oX19yaWdodCwgX19yZXN0KTsKKwkgIH0KKwljYXNlIF9fZGV0YWlsOjpfU19sZWFmOgorCSAgeworCSAgICBfUm9wZUxlYWYqIF9fbCA9IChfUm9wZUxlYWYqKV9fcjsKKwkgICAgcmV0dXJuIGNvcHlfbihfX2wtPl9NX2RhdGEsIF9fbC0+X01fc2l6ZSwgX19idWZmZXIpLnNlY29uZDsKKwkgIH0KKwljYXNlIF9fZGV0YWlsOjpfU19mdW5jdGlvbjoKKwljYXNlIF9fZGV0YWlsOjpfU19zdWJzdHJpbmdmbjoKKwkgIC8vIFdlIGRvbid0IHlldCBkbyBhbnl0aGluZyB3aXRoIHN1YnN0cmluZyBub2Rlcy4KKwkgIC8vIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgYmVmb3JlIHJvcGVmaWxlcyB3aWxsIHdvcmsgd2VsbC4KKwkgIHsKKwkgICAgX1JvcGVGdW5jdGlvbiogX19mID0gKF9Sb3BlRnVuY3Rpb24qKV9fcjsKKwkgICAgKCooX19mLT5fTV9mbikpKDAsIF9fZi0+X01fc2l6ZSwgX19idWZmZXIpOworCSAgICByZXR1cm4gX19idWZmZXIgKyBfX2YtPl9NX3NpemU7CisJICB9CisJZGVmYXVsdDoKKwkgIHJldHVybiAwOworCX0KKyAgICB9CisKKyAgLy8gVGhpcyBuZWVkcyB3b3JrIGZvciBfQ2hhclQgIT0gY2hhcgorICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgdm9pZAorICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+OjoKKyAgICBfU19kdW1wKF9Sb3BlUmVwKiBfX3IsIGludCBfX2luZGVudCkKKyAgICB7CisgICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCBfX2luZGVudDsgX19pKyspCisJcHV0Y2hhcignICcpOworICAgICAgaWYgKDAgPT0gX19yKQorCXsKKwkgIHByaW50ZigiTlVMTFxuIik7CisJICByZXR1cm47CisJfQorICAgICAgaWYgKF9TX2NvbmNhdCA9PSBfX3ItPl9NX3RhZykKKwl7CisJICBfUm9wZUNvbmNhdGVuYXRpb24qIF9fYyA9IChfUm9wZUNvbmNhdGVuYXRpb24qKV9fcjsKKwkgIF9Sb3BlUmVwKiBfX2xlZnQgPSBfX2MtPl9NX2xlZnQ7CisJICBfUm9wZVJlcCogX19yaWdodCA9IF9fYy0+X01fcmlnaHQ7CisJICAKKyNpZmRlZiBfX0dDCisJICBwcmludGYoIkNvbmNhdGVuYXRpb24gJXAgKGRlcHRoID0gJWQsIGxlbiA9ICVsZCwgJXMgYmFsYW5jZWQpXG4iLAorCQkgX19yLCBfX3ItPl9NX2RlcHRoLCBfX3ItPl9NX3NpemUsCisJCSBfX3ItPl9NX2lzX2JhbGFuY2VkPyAiIiA6ICJub3QiKTsKKyNlbHNlCisJICBwcmludGYoIkNvbmNhdGVuYXRpb24gJXAgKHJjID0gJWxkLCBkZXB0aCA9ICVkLCAiCisJCSAibGVuID0gJWxkLCAlcyBiYWxhbmNlZClcbiIsCisJCSBfX3IsIF9fci0+X01fcmVmX2NvdW50LCBfX3ItPl9NX2RlcHRoLCBfX3ItPl9NX3NpemUsCisJCSBfX3ItPl9NX2lzX2JhbGFuY2VkPyAiIiA6ICJub3QiKTsKKyNlbmRpZgorCSAgX1NfZHVtcChfX2xlZnQsIF9faW5kZW50ICsgMik7CisJICBfU19kdW1wKF9fcmlnaHQsIF9faW5kZW50ICsgMik7CisJICByZXR1cm47CisJfQorICAgICAgZWxzZQorCXsKKwkgIGNoYXIqIF9fa2luZDsKKwkgIAorCSAgc3dpdGNoIChfX3ItPl9NX3RhZykKKwkgICAgeworCSAgICBjYXNlIF9fZGV0YWlsOjpfU19sZWFmOgorCSAgICAgIF9fa2luZCA9ICJMZWFmIjsKKwkgICAgICBicmVhazsKKwkgICAgY2FzZSBfX2RldGFpbDo6X1NfZnVuY3Rpb246CisJICAgICAgX19raW5kID0gIkZ1bmN0aW9uIjsKKwkgICAgICBicmVhazsKKwkgICAgY2FzZSBfX2RldGFpbDo6X1Nfc3Vic3RyaW5nZm46CisJICAgICAgX19raW5kID0gIkZ1bmN0aW9uIHJlcHJlc2VudGluZyBzdWJzdHJpbmciOworCSAgICAgIGJyZWFrOworCSAgICBkZWZhdWx0OgorCSAgICAgIF9fa2luZCA9ICIoY29ycnVwdGVkIGtpbmQgZmllbGQhKSI7CisJICAgIH0KKyNpZmRlZiBfX0dDCisJICBwcmludGYoIiVzICVwIChkZXB0aCA9ICVkLCBsZW4gPSAlbGQpICIsCisJCSBfX2tpbmQsIF9fciwgX19yLT5fTV9kZXB0aCwgX19yLT5fTV9zaXplKTsKKyNlbHNlCisJICBwcmludGYoIiVzICVwIChyYyA9ICVsZCwgZGVwdGggPSAlZCwgbGVuID0gJWxkKSAiLAorCQkgX19raW5kLCBfX3IsIF9fci0+X01fcmVmX2NvdW50LCBfX3ItPl9NX2RlcHRoLCBfX3ItPl9NX3NpemUpOworI2VuZGlmCisJICBpZiAoX1NfaXNfb25lX2J5dGVfY2hhcl90eXBlKChfQ2hhclQqKTApKQorCSAgICB7CisJICAgICAgY29uc3QgaW50IF9fbWF4X2xlbiA9IDQwOworCSAgICAgIF9TZWxmX2Rlc3RydWN0X3B0ciBfX3ByZWZpeChfU19zdWJzdHJpbmcoX19yLCAwLCBfX21heF9sZW4pKTsKKwkgICAgICBfQ2hhclQgX19idWZmZXJbX19tYXhfbGVuICsgMV07CisJICAgICAgYm9vbCBfX3Rvb19iaWcgPSBfX3ItPl9NX3NpemUgPiBfX3ByZWZpeC0+X01fc2l6ZTsKKwkgICAgICAKKwkgICAgICBfU19mbGF0dGVuKF9fcHJlZml4LCBfX2J1ZmZlcik7CisJICAgICAgX19idWZmZXJbX19wcmVmaXgtPl9NX3NpemVdID0gX1NfZW9zKChfQ2hhclQqKTApOworCSAgICAgIHByaW50ZigiJXMlc1xuIiwgKGNoYXIqKV9fYnVmZmVyLAorCQkgICAgIF9fdG9vX2JpZz8gIi4uLlxuIiA6ICJcbiIpOworCSAgICB9CisJICBlbHNlCisJICAgIHByaW50ZigiXG4iKTsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBjb25zdCB1bnNpZ25lZCBsb25nCisgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz46OgorICAgIF9TX21pbl9sZW5baW50KF9fZGV0YWlsOjpfU19tYXhfcm9wZV9kZXB0aCkgKyAxXSA9IHsKKyAgICAgIC8qIDAgKi8xLCAvKiAxICovMiwgLyogMiAqLzMsIC8qIDMgKi81LCAvKiA0ICovOCwgLyogNSAqLzEzLCAvKiA2ICovMjEsCisgICAgICAvKiA3ICovMzQsIC8qIDggKi81NSwgLyogOSAqLzg5LCAvKiAxMCAqLzE0NCwgLyogMTEgKi8yMzMsIC8qIDEyICovMzc3LAorICAgICAgLyogMTMgKi82MTAsIC8qIDE0ICovOTg3LCAvKiAxNSAqLzE1OTcsIC8qIDE2ICovMjU4NCwgLyogMTcgKi80MTgxLAorICAgICAgLyogMTggKi82NzY1LCAvKiAxOSAqLzEwOTQ2LCAvKiAyMCAqLzE3NzExLCAvKiAyMSAqLzI4NjU3LCAvKiAyMiAqLzQ2MzY4LAorICAgICAgLyogMjMgKi83NTAyNSwgLyogMjQgKi8xMjEzOTMsIC8qIDI1ICovMTk2NDE4LCAvKiAyNiAqLzMxNzgxMSwKKyAgICAgIC8qIDI3ICovNTE0MjI5LCAvKiAyOCAqLzgzMjA0MCwgLyogMjkgKi8xMzQ2MjY5LCAvKiAzMCAqLzIxNzgzMDksCisgICAgICAvKiAzMSAqLzM1MjQ1NzgsIC8qIDMyICovNTcwMjg4NywgLyogMzMgKi85MjI3NDY1LCAvKiAzNCAqLzE0OTMwMzUyLAorICAgICAgLyogMzUgKi8yNDE1NzgxNywgLyogMzYgKi8zOTA4ODE2OSwgLyogMzcgKi82MzI0NTk4NiwgLyogMzggKi8xMDIzMzQxNTUsCisgICAgICAvKiAzOSAqLzE2NTU4MDE0MSwgLyogNDAgKi8yNjc5MTQyOTYsIC8qIDQxICovNDMzNDk0NDM3LAorICAgICAgLyogNDIgKi83MDE0MDg3MzMsIC8qIDQzICovMTEzNDkwMzE3MCwgLyogNDQgKi8xODM2MzExOTAzLAorICAgICAgLyogNDUgKi8yOTcxMjE1MDczdSB9OworICAvLyBUaGVzZSBhcmUgRmlib25hY2NpIG51bWJlcnMgPCAyKiozMi4KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgdHlwZW5hbWUgcm9wZTxfQ2hhclQsIF9BbGxvYz46Ol9Sb3BlUmVwKgorICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+OjoKKyAgICBfU19iYWxhbmNlKF9Sb3BlUmVwKiBfX3IpCisgICAgeworICAgICAgX1JvcGVSZXAqIF9fZm9yZXN0W2ludChfX2RldGFpbDo6X1NfbWF4X3JvcGVfZGVwdGgpICsgMV07CisgICAgICBfUm9wZVJlcCogX19yZXN1bHQgPSAwOworICAgICAgaW50IF9faTsKKyAgICAgIC8vIEludmFyaWFudDoKKyAgICAgIC8vIFRoZSBjb25jYXRlbmF0aW9uIG9mIGZvcmVzdCBpbiBkZXNjZW5kaW5nIG9yZGVyIGlzIGVxdWFsIHRvIF9fci4KKyAgICAgIC8vIF9fZm9yZXN0W19faV0uX01fc2l6ZSA+PSBfU19taW5fbGVuW19faV0KKyAgICAgIC8vIF9fZm9yZXN0W19faV0uX01fZGVwdGggPSBfX2kKKyAgICAgIC8vIFJlZmVyZW5jZXMgZnJvbSBmb3Jlc3QgYXJlIGluY2x1ZGVkIGluIHJlZmNvdW50LgorICAgICAgCisgICAgICBmb3IgKF9faSA9IDA7IF9faSA8PSBpbnQoX19kZXRhaWw6Ol9TX21heF9yb3BlX2RlcHRoKTsgKytfX2kpCisJX19mb3Jlc3RbX19pXSA9IDA7CisgICAgICBfX3RyeQorCXsKKwkgIF9TX2FkZF90b19mb3Jlc3QoX19yLCBfX2ZvcmVzdCk7CisJICBmb3IgKF9faSA9IDA7IF9faSA8PSBpbnQoX19kZXRhaWw6Ol9TX21heF9yb3BlX2RlcHRoKTsgKytfX2kpCisJICAgIGlmICgwICE9IF9fZm9yZXN0W19faV0pCisJICAgICAgeworI2lmbmRlZiBfX0dDCisJCV9TZWxmX2Rlc3RydWN0X3B0ciBfX29sZChfX3Jlc3VsdCk7CisjZW5kaWYKKwkJX19yZXN1bHQgPSBfU19jb25jYXQoX19mb3Jlc3RbX19pXSwgX19yZXN1bHQpOworCQlfX2ZvcmVzdFtfX2ldLT5fTV91bnJlZl9ub25uaWwoKTsKKyNpZiAhZGVmaW5lZChfX0dDKSAmJiBkZWZpbmVkKF9fRVhDRVBUSU9OUykKKwkJX19mb3Jlc3RbX19pXSA9IDA7CisjZW5kaWYKKwkgICAgICB9CisJfQorICAgICAgX19jYXRjaCguLi4pCisJeworCSAgZm9yKF9faSA9IDA7IF9faSA8PSBpbnQoX19kZXRhaWw6Ol9TX21heF9yb3BlX2RlcHRoKTsgX19pKyspCisJICAgIF9TX3VucmVmKF9fZm9yZXN0W19faV0pOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgICAgCisgICAgICBpZiAoX19yZXN1bHQtPl9NX2RlcHRoID4gaW50KF9fZGV0YWlsOjpfU19tYXhfcm9wZV9kZXB0aCkpCisJX190aHJvd19sZW5ndGhfZXJyb3IoX19OKCJyb3BlOjpfU19iYWxhbmNlIikpOworICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKKyAgICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHZvaWQKKyAgICByb3BlPF9DaGFyVCwgX0FsbG9jPjo6CisgICAgX1NfYWRkX3RvX2ZvcmVzdChfUm9wZVJlcCogX19yLCBfUm9wZVJlcCoqIF9fZm9yZXN0KQorICAgIHsKKyAgICAgIGlmIChfX3ItPl9NX2lzX2JhbGFuY2VkKQorCXsKKwkgIF9TX2FkZF9sZWFmX3RvX2ZvcmVzdChfX3IsIF9fZm9yZXN0KTsKKwkgIHJldHVybjsKKwl9CisKKyAgICAgIHsKKwlfUm9wZUNvbmNhdGVuYXRpb24qIF9fYyA9IChfUm9wZUNvbmNhdGVuYXRpb24qKV9fcjsKKwkKKwlfU19hZGRfdG9fZm9yZXN0KF9fYy0+X01fbGVmdCwgX19mb3Jlc3QpOworCV9TX2FkZF90b19mb3Jlc3QoX19jLT5fTV9yaWdodCwgX19mb3Jlc3QpOworICAgICAgfQorICAgIH0KKworCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICB2b2lkCisgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz46OgorICAgIF9TX2FkZF9sZWFmX3RvX2ZvcmVzdChfUm9wZVJlcCogX19yLCBfUm9wZVJlcCoqIF9fZm9yZXN0KQorICAgIHsKKyAgICAgIF9Sb3BlUmVwKiBfX2luc2VydGVlOwkJLy8gaW5jbHVkZWQgaW4gcmVmY291bnQKKyAgICAgIF9Sb3BlUmVwKiBfX3Rvb190aW55ID0gMDsJCS8vIGluY2x1ZGVkIGluIHJlZmNvdW50CisgICAgICBpbnQgX19pOwkJCQkvLyBmb3Jlc3RbMC4uX19pLTFdIGlzIGVtcHR5CisgICAgICBzaXplX3QgX19zID0gX19yLT5fTV9zaXplOworICAgICAgCisgICAgICBmb3IgKF9faSA9IDA7IF9fcyA+PSBfU19taW5fbGVuW19faSsxXS8qIG5vdCB0aGlzIGJ1Y2tldCAqLzsgKytfX2kpCisJeworCSAgaWYgKDAgIT0gX19mb3Jlc3RbX19pXSkKKwkgICAgeworI2lmbmRlZiBfX0dDCisJICAgICAgX1NlbGZfZGVzdHJ1Y3RfcHRyIF9fb2xkKF9fdG9vX3RpbnkpOworI2VuZGlmCisJICAgICAgX190b29fdGlueSA9IF9TX2NvbmNhdF9hbmRfc2V0X2JhbGFuY2VkKF9fZm9yZXN0W19faV0sCisJCQkJCQkgICAgICBfX3Rvb190aW55KTsKKwkgICAgICBfX2ZvcmVzdFtfX2ldLT5fTV91bnJlZl9ub25uaWwoKTsKKwkgICAgICBfX2ZvcmVzdFtfX2ldID0gMDsKKwkgICAgfQorCX0KKyAgICAgIHsKKyNpZm5kZWYgX19HQworCV9TZWxmX2Rlc3RydWN0X3B0ciBfX29sZChfX3Rvb190aW55KTsKKyNlbmRpZgorCV9faW5zZXJ0ZWUgPSBfU19jb25jYXRfYW5kX3NldF9iYWxhbmNlZChfX3Rvb190aW55LCBfX3IpOworICAgICAgfQorICAgICAgLy8gVG9vX3RpbnkgZGVhZCwgYW5kIG5vIGxvbmdlciBpbmNsdWRlZCBpbiByZWZjb3VudC4KKyAgICAgIC8vIEluc2VydGVlIGlzIGxpdmUgYW5kIGluY2x1ZGVkLgorICAgICAgZm9yICg7OyArK19faSkKKwl7CisJICBpZiAoMCAhPSBfX2ZvcmVzdFtfX2ldKQorCSAgICB7CisjaWZuZGVmIF9fR0MKKwkgICAgICBfU2VsZl9kZXN0cnVjdF9wdHIgX19vbGQoX19pbnNlcnRlZSk7CisjZW5kaWYKKwkgICAgICBfX2luc2VydGVlID0gX1NfY29uY2F0X2FuZF9zZXRfYmFsYW5jZWQoX19mb3Jlc3RbX19pXSwKKwkJCQkJCSAgICAgIF9faW5zZXJ0ZWUpOworCSAgICAgIF9fZm9yZXN0W19faV0tPl9NX3VucmVmX25vbm5pbCgpOworCSAgICAgIF9fZm9yZXN0W19faV0gPSAwOworCSAgICB9CisJICBpZiAoX19pID09IGludChfX2RldGFpbDo6X1NfbWF4X3JvcGVfZGVwdGgpCisJICAgICAgfHwgX19pbnNlcnRlZS0+X01fc2l6ZSA8IF9TX21pbl9sZW5bX19pKzFdKQorCSAgICB7CisJICAgICAgX19mb3Jlc3RbX19pXSA9IF9faW5zZXJ0ZWU7CisJICAgICAgLy8gcmVmY291bnQgaXMgT0sgc2luY2UgX19pbnNlcnRlZSBpcyBub3cgZGVhZC4KKwkgICAgICByZXR1cm47CisJICAgIH0KKwl9CisgICAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBfQ2hhclQKKyAgICByb3BlPF9DaGFyVCwgX0FsbG9jPjo6CisgICAgX1NfZmV0Y2goX1JvcGVSZXAqIF9fciwgc2l6ZV90eXBlIF9faSkKKyAgICB7CisgICAgICBfX0dDX0NPTlNUIF9DaGFyVCogX19jc3RyID0gX19yLT5fTV9jX3N0cmluZzsKKyAgICAgIAorICAgICAgaWYgKDAgIT0gX19jc3RyKQorCXJldHVybiBfX2NzdHJbX19pXTsKKyAgICAgIGZvcig7OykKKwl7CisJICBzd2l0Y2goX19yLT5fTV90YWcpCisJICAgIHsKKwkgICAgY2FzZSBfX2RldGFpbDo6X1NfY29uY2F0OgorCSAgICAgIHsKKwkJX1JvcGVDb25jYXRlbmF0aW9uKiBfX2MgPSAoX1JvcGVDb25jYXRlbmF0aW9uKilfX3I7CisJCV9Sb3BlUmVwKiBfX2xlZnQgPSBfX2MtPl9NX2xlZnQ7CisJCXNpemVfdCBfX2xlZnRfbGVuID0gX19sZWZ0LT5fTV9zaXplOworCQkKKwkJaWYgKF9faSA+PSBfX2xlZnRfbGVuKQorCQkgIHsKKwkJICAgIF9faSAtPSBfX2xlZnRfbGVuOworCQkgICAgX19yID0gX19jLT5fTV9yaWdodDsKKwkJICB9IAorCQllbHNlCisJCSAgX19yID0gX19sZWZ0OworCSAgICAgIH0KKwkgICAgICBicmVhazsKKwkgICAgY2FzZSBfX2RldGFpbDo6X1NfbGVhZjoKKwkgICAgICB7CisJCV9Sb3BlTGVhZiogX19sID0gKF9Sb3BlTGVhZiopX19yOworCQlyZXR1cm4gX19sLT5fTV9kYXRhW19faV07CisJICAgICAgfQorCSAgICBjYXNlIF9fZGV0YWlsOjpfU19mdW5jdGlvbjoKKwkgICAgY2FzZSBfX2RldGFpbDo6X1Nfc3Vic3RyaW5nZm46CisJICAgICAgeworCQlfUm9wZUZ1bmN0aW9uKiBfX2YgPSAoX1JvcGVGdW5jdGlvbiopX19yOworCQlfQ2hhclQgX19yZXN1bHQ7CisJCQorCQkoKihfX2YtPl9NX2ZuKSkoX19pLCAxLCAmX19yZXN1bHQpOworCQlyZXR1cm4gX19yZXN1bHQ7CisJICAgICAgfQorCSAgICB9CisJfQorICAgIH0KKyAgCisjaWZuZGVmIF9fR0MKKyAgLy8gUmV0dXJuIGEgdW5pcXVlbHkgcmVmZXJlbmNlZCBjaGFyYWN0ZXIgc2xvdCBmb3IgdGhlIGdpdmVuCisgIC8vIHBvc2l0aW9uLCBvciAwIGlmIHRoYXQncyBub3QgcG9zc2libGUuCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBfQ2hhclQqCisgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz46OgorICAgIF9TX2ZldGNoX3B0cihfUm9wZVJlcCogX19yLCBzaXplX3R5cGUgX19pKQorICAgIHsKKyAgICAgIF9Sb3BlUmVwKiBfX2NscnN0YWNrW19fZGV0YWlsOjpfU19tYXhfcm9wZV9kZXB0aF07CisgICAgICBzaXplX3QgX19jc3B0ciA9IDA7CisgICAgICAKKyAgICAgIGZvcig7OykKKwl7CisJICBpZiAoX19yLT5fTV9yZWZfY291bnQgPiAxKQorCSAgICByZXR1cm4gMDsKKwkgIHN3aXRjaChfX3ItPl9NX3RhZykKKwkgICAgeworCSAgICBjYXNlIF9fZGV0YWlsOjpfU19jb25jYXQ6CisJICAgICAgeworCQlfUm9wZUNvbmNhdGVuYXRpb24qIF9fYyA9IChfUm9wZUNvbmNhdGVuYXRpb24qKV9fcjsKKwkJX1JvcGVSZXAqIF9fbGVmdCA9IF9fYy0+X01fbGVmdDsKKwkJc2l6ZV90IF9fbGVmdF9sZW4gPSBfX2xlZnQtPl9NX3NpemU7CisJCQorCQlpZiAoX19jLT5fTV9jX3N0cmluZyAhPSAwKQorCQkgIF9fY2xyc3RhY2tbX19jc3B0cisrXSA9IF9fYzsKKwkJaWYgKF9faSA+PSBfX2xlZnRfbGVuKQorCQkgIHsKKwkJICAgIF9faSAtPSBfX2xlZnRfbGVuOworCQkgICAgX19yID0gX19jLT5fTV9yaWdodDsKKwkJICB9IAorCQllbHNlCisJCSAgX19yID0gX19sZWZ0OworCSAgICAgIH0KKwkgICAgICBicmVhazsKKwkgICAgY2FzZSBfX2RldGFpbDo6X1NfbGVhZjoKKwkgICAgICB7CisJCV9Sb3BlTGVhZiogX19sID0gKF9Sb3BlTGVhZiopX19yOworCQlpZiAoX19sLT5fTV9jX3N0cmluZyAhPSBfX2wtPl9NX2RhdGEgJiYgX19sLT5fTV9jX3N0cmluZyAhPSAwKQorCQkgIF9fY2xyc3RhY2tbX19jc3B0cisrXSA9IF9fbDsKKwkJd2hpbGUgKF9fY3NwdHIgPiAwKQorCQkgIHsKKwkJICAgIC0tIF9fY3NwdHI7CisJCSAgICBfUm9wZVJlcCogX19kID0gX19jbHJzdGFja1tfX2NzcHRyXTsKKwkJICAgIF9fZC0+X01fZnJlZV9jX3N0cmluZygpOworCQkgICAgX19kLT5fTV9jX3N0cmluZyA9IDA7CisJCSAgfQorCQlyZXR1cm4gX19sLT5fTV9kYXRhICsgX19pOworCSAgICAgIH0KKwkgICAgY2FzZSBfX2RldGFpbDo6X1NfZnVuY3Rpb246CisJICAgIGNhc2UgX19kZXRhaWw6Ol9TX3N1YnN0cmluZ2ZuOgorCSAgICAgIHJldHVybiAwOworCSAgICB9CisJfQorICAgIH0KKyNlbmRpZiAvKiBfX0dDICovCisKKyAgLy8gVGhlIGZvbGxvd2luZyBjb3VsZCBiZSBpbXBsZW1lbnRlZCB0cml2aWFsbHkgdXNpbmcKKyAgLy8gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheS4KKyAgLy8gV2UgZG8gYSBsaXR0bGUgbW9yZSB3b3JrIHRvIGF2b2lkIGRlYWxpbmcgd2l0aCByb3BlIGl0ZXJhdG9ycyBmb3IKKyAgLy8gZmxhdCBzdHJpbmdzLgorICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW50CisgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz46OgorICAgIF9TX2NvbXBhcmUgKGNvbnN0IF9Sb3BlUmVwKiBfX2xlZnQsIGNvbnN0IF9Sb3BlUmVwKiBfX3JpZ2h0KQorICAgIHsKKyAgICAgIHNpemVfdCBfX2xlZnRfbGVuOworICAgICAgc2l6ZV90IF9fcmlnaHRfbGVuOworICAgICAgCisgICAgICBpZiAoMCA9PSBfX3JpZ2h0KQorCXJldHVybiAwICE9IF9fbGVmdDsKKyAgICAgIGlmICgwID09IF9fbGVmdCkKKwlyZXR1cm4gLTE7CisgICAgICBfX2xlZnRfbGVuID0gX19sZWZ0LT5fTV9zaXplOworICAgICAgX19yaWdodF9sZW4gPSBfX3JpZ2h0LT5fTV9zaXplOworICAgICAgaWYgKF9fZGV0YWlsOjpfU19sZWFmID09IF9fbGVmdC0+X01fdGFnKQorCXsKKwkgIF9Sb3BlTGVhZiogX19sID0gKF9Sb3BlTGVhZiopIF9fbGVmdDsKKwkgIGlmIChfX2RldGFpbDo6X1NfbGVhZiA9PSBfX3JpZ2h0LT5fTV90YWcpCisJICAgIHsKKwkgICAgICBfUm9wZUxlYWYqIF9fciA9IChfUm9wZUxlYWYqKSBfX3JpZ2h0OworCSAgICAgIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9fbC0+X01fZGF0YSwKKwkJCQkJCSAgX19sLT5fTV9kYXRhICsgX19sZWZ0X2xlbiwKKwkJCQkJCSAgX19yLT5fTV9kYXRhLCBfX3ItPl9NX2RhdGEKKwkJCQkJCSAgKyBfX3JpZ2h0X2xlbik7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fcnN0YXJ0KF9fcmlnaHQsIDApOworCSAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fcmVuZChfX3JpZ2h0LCBfX3JpZ2h0X2xlbik7CisJICAgICAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX19sLT5fTV9kYXRhLCBfX2wtPl9NX2RhdGEKKwkJCQkJCSAgKyBfX2xlZnRfbGVuLAorCQkJCQkJICBfX3JzdGFydCwgX19yZW5kKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICBjb25zdF9pdGVyYXRvciBfX2xzdGFydChfX2xlZnQsIDApOworCSAgY29uc3RfaXRlcmF0b3IgX19sZW5kKF9fbGVmdCwgX19sZWZ0X2xlbik7CisJICBpZiAoX19kZXRhaWw6Ol9TX2xlYWYgPT0gX19yaWdodC0+X01fdGFnKQorCSAgICB7CisJICAgICAgX1JvcGVMZWFmKiBfX3IgPSAoX1JvcGVMZWFmKikgX19yaWdodDsKKwkgICAgICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfX2xzdGFydCwgX19sZW5kLAorCQkJCQkJICBfX3ItPl9NX2RhdGEsIF9fci0+X01fZGF0YQorCQkJCQkJICArIF9fcmlnaHRfbGVuKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgY29uc3RfaXRlcmF0b3IgX19yc3RhcnQoX19yaWdodCwgMCk7CisJICAgICAgY29uc3RfaXRlcmF0b3IgX19yZW5kKF9fcmlnaHQsIF9fcmlnaHRfbGVuKTsKKwkgICAgICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfX2xzdGFydCwgX19sZW5kLAorCQkJCQkJICBfX3JzdGFydCwgX19yZW5kKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgLy8gQXNzaWdubWVudCB0byByZWZlcmVuY2UgcHJveGllcy4KKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIF9Sb3BlX2NoYXJfcmVmX3Byb3h5PF9DaGFyVCwgX0FsbG9jPiYKKyAgICBfUm9wZV9jaGFyX3JlZl9wcm94eTxfQ2hhclQsIF9BbGxvYz46OgorICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKQorICAgIHsKKyAgICAgIF9Sb3BlUmVwKiBfX29sZCA9IF9NX3Jvb3QtPl9NX3RyZWVfcHRyOworI2lmbmRlZiBfX0dDCisgICAgICAvLyBGaXJzdCBjaGVjayBmb3IgdGhlIGNhc2UgaW4gd2hpY2ggZXZlcnl0aGluZyBpcyB1bmlxdWVseQorICAgICAgLy8gcmVmZXJlbmNlZC4gIEluIHRoYXQgY2FzZSB3ZSBjYW4gZG8gdGhpcyBkZXN0cnVjdGl2ZWx5LgorICAgICAgX0NoYXJUKiBfX3B0ciA9IF9NeV9yb3BlOjpfU19mZXRjaF9wdHIoX19vbGQsIF9NX3Bvcyk7CisgICAgICBpZiAoMCAhPSBfX3B0cikKKwl7CisJICAqX19wdHIgPSBfX2M7CisJICByZXR1cm4gKnRoaXM7CisJfQorI2VuZGlmCisgICAgICBfU2VsZl9kZXN0cnVjdF9wdHIgX19sZWZ0KF9NeV9yb3BlOjpfU19zdWJzdHJpbmcoX19vbGQsIDAsIF9NX3BvcykpOworICAgICAgX1NlbGZfZGVzdHJ1Y3RfcHRyIF9fcmlnaHQoX015X3JvcGU6Ol9TX3N1YnN0cmluZyhfX29sZCwgX01fcG9zICsgMSwKKwkJCQkJCQlfX29sZC0+X01fc2l6ZSkpOworICAgICAgX1NlbGZfZGVzdHJ1Y3RfcHRyIF9fcmVzdWx0X2xlZnQoX015X3JvcGU6OgorCQkJCSAgICAgICBfU19kZXN0cl9jb25jYXRfY2hhcl9pdGVyKF9fbGVmdCwKKwkJCQkJCQkJICZfX2MsIDEpKTsKKworICAgICAgX1JvcGVSZXAqIF9fcmVzdWx0ID0gX015X3JvcGU6Ol9TX2NvbmNhdChfX3Jlc3VsdF9sZWZ0LCBfX3JpZ2h0KTsKKyNpZm5kZWYgX19HQworICAgICAgX1JvcGVSZXA6Ol9TX3VucmVmKF9fb2xkKTsKKyNlbmRpZgorICAgICAgX01fcm9vdC0+X01fdHJlZV9wdHIgPSBfX3Jlc3VsdDsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBfUm9wZV9jaGFyX3JlZl9wcm94eTxfQ2hhclQsIF9BbGxvYz46OgorICAgIG9wZXJhdG9yIF9DaGFyVCgpIGNvbnN0CisgICAgeworICAgICAgaWYgKF9NX2N1cnJlbnRfdmFsaWQpCisJcmV0dXJuIF9NX2N1cnJlbnQ7CisgICAgICBlbHNlCisJcmV0dXJuIF9NeV9yb3BlOjpfU19mZXRjaChfTV9yb290LT5fTV90cmVlX3B0ciwgX01fcG9zKTsKKyAgICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIF9Sb3BlX2NoYXJfcHRyX3Byb3h5PF9DaGFyVCwgX0FsbG9jPgorICAgIF9Sb3BlX2NoYXJfcmVmX3Byb3h5PF9DaGFyVCwgX0FsbG9jPjo6CisgICAgb3BlcmF0b3ImKCkgY29uc3QKKyAgICB7IHJldHVybiBfUm9wZV9jaGFyX3B0cl9wcm94eTxfQ2hhclQsIF9BbGxvYz4oKnRoaXMpOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+OjoKKyAgICByb3BlKHNpemVfdCBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCisgICAgOiBfQmFzZShfX2EpCisgICAgeworICAgICAgcm9wZTxfQ2hhclQsX0FsbG9jPiBfX3Jlc3VsdDsKKyAgICAgIGNvbnN0IHNpemVfdCBfX2V4cG9uZW50aWF0ZV90aHJlc2hvbGQgPSAzMjsKKyAgICAgIHNpemVfdCBfX2V4cG9uZW50OworICAgICAgc2l6ZV90IF9fcmVzdDsKKyAgICAgIF9DaGFyVCogX19yZXN0X2J1ZmZlcjsKKyAgICAgIF9Sb3BlUmVwKiBfX3JlbWFpbmRlcjsKKyAgICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+IF9fcmVtYWluZGVyX3JvcGU7CisKKyAgICAgIGlmICgwID09IF9fbikKKwlyZXR1cm47CisKKyAgICAgIF9fZXhwb25lbnQgPSBfX24gLyBfX2V4cG9uZW50aWF0ZV90aHJlc2hvbGQ7CisgICAgICBfX3Jlc3QgPSBfX24gJSBfX2V4cG9uZW50aWF0ZV90aHJlc2hvbGQ7CisgICAgICBpZiAoMCA9PSBfX3Jlc3QpCisJX19yZW1haW5kZXIgPSAwOworICAgICAgZWxzZQorCXsKKwkgIF9fcmVzdF9idWZmZXIgPSB0aGlzLT5fRGF0YV9hbGxvY2F0ZShfU19yb3VuZGVkX3VwX3NpemUoX19yZXN0KSk7CisJICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2EoX19yZXN0X2J1ZmZlciwgX19yZXN0LCBfX2MsCisJCQkJICAgX01fZ2V0X2FsbG9jYXRvcigpKTsKKwkgIF9TX2NvbmRfc3RvcmVfZW9zKF9fcmVzdF9idWZmZXJbX19yZXN0XSk7CisJICBfX3RyeQorCSAgICB7IF9fcmVtYWluZGVyID0gX1NfbmV3X1JvcGVMZWFmKF9fcmVzdF9idWZmZXIsIF9fcmVzdCwKKwkJCQkJICAgIF9NX2dldF9hbGxvY2F0b3IoKSk7IH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7CisJICAgICAgX1JvcGVSZXA6Ol9fU1RMX0ZSRUVfU1RSSU5HKF9fcmVzdF9idWZmZXIsIF9fcmVzdCwKKwkJCQkJICBfTV9nZXRfYWxsb2NhdG9yKCkpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJfQorICAgICAgX19yZW1haW5kZXJfcm9wZS5fTV90cmVlX3B0ciA9IF9fcmVtYWluZGVyOworICAgICAgaWYgKF9fZXhwb25lbnQgIT0gMCkKKwl7CisJICBfQ2hhclQqIF9fYmFzZV9idWZmZXIgPQorCSAgICB0aGlzLT5fRGF0YV9hbGxvY2F0ZShfU19yb3VuZGVkX3VwX3NpemUoX19leHBvbmVudGlhdGVfdGhyZXNob2xkKSk7CisJICBfUm9wZUxlYWYqIF9fYmFzZV9sZWFmOworCSAgcm9wZSBfX2Jhc2Vfcm9wZTsKKwkgIF9fdW5pbml0aWFsaXplZF9maWxsX25fYShfX2Jhc2VfYnVmZmVyLCBfX2V4cG9uZW50aWF0ZV90aHJlc2hvbGQsIF9fYywKKwkJCQkgICBfTV9nZXRfYWxsb2NhdG9yKCkpOworCSAgX1NfY29uZF9zdG9yZV9lb3MoX19iYXNlX2J1ZmZlcltfX2V4cG9uZW50aWF0ZV90aHJlc2hvbGRdKTsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICBfX2Jhc2VfbGVhZiA9IF9TX25ld19Sb3BlTGVhZihfX2Jhc2VfYnVmZmVyLAorCQkJCQkgICAgX19leHBvbmVudGlhdGVfdGhyZXNob2xkLAorCQkJCQkgICAgX01fZ2V0X2FsbG9jYXRvcigpKTsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsKKwkgICAgICBfUm9wZVJlcDo6X19TVExfRlJFRV9TVFJJTkcoX19iYXNlX2J1ZmZlciwKKwkJCQkJICBfX2V4cG9uZW50aWF0ZV90aHJlc2hvbGQsCisJCQkJCSAgX01fZ2V0X2FsbG9jYXRvcigpKTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCSAgX19iYXNlX3JvcGUuX01fdHJlZV9wdHIgPSBfX2Jhc2VfbGVhZjsKKwkgIGlmICgxID09IF9fZXhwb25lbnQpCisJICAgIF9fcmVzdWx0ID0gX19iYXNlX3JvcGU7CisJICBlbHNlCisJICAgIF9fcmVzdWx0ID0gcG93ZXIoX19iYXNlX3JvcGUsIF9fZXhwb25lbnQsCisJCQkgICAgIF9Sb3BlX0NvbmNhdF9mbjxfQ2hhclQsIF9BbGxvYz4oKSk7CisJICAgIAorCSAgaWYgKDAgIT0gX19yZW1haW5kZXIpCisJICAgIF9fcmVzdWx0ICs9IF9fcmVtYWluZGVyX3JvcGU7CisJfQorICAgICAgZWxzZQorCV9fcmVzdWx0ID0gX19yZW1haW5kZXJfcm9wZTsKKwkgIAorICAgICAgdGhpcy0+X01fdHJlZV9wdHIgPSBfX3Jlc3VsdC5fTV90cmVlX3B0cjsKKyAgICAgIHRoaXMtPl9NX3RyZWVfcHRyLT5fTV9yZWZfbm9ubmlsKCk7CisgICAgfQorICAgICAgCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIF9DaGFyVAorICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+OjpfU19lbXB0eV9jX3N0clsxXTsKKyAgICAgIAorICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBjb25zdCBfQ2hhclQqCisgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz46OgorICAgIGNfc3RyKCkgY29uc3QKKyAgICB7CisgICAgICBpZiAoMCA9PSB0aGlzLT5fTV90cmVlX3B0cikKKwl7CisJICBfU19lbXB0eV9jX3N0clswXSA9IF9TX2VvcygoX0NoYXJUKikwKTsgIC8vIFBvc3NpYmx5IHJlZHVuZGFudCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnV0IHByb2JhYmx5IGZhc3QuCisJICByZXR1cm4gX1NfZW1wdHlfY19zdHI7CisJfQorICAgICAgX19ndGhyZWFkX211dGV4X2xvY2sgKCZ0aGlzLT5fTV90cmVlX3B0ci0+X01fY19zdHJpbmdfbG9jayk7CisgICAgICBfX0dDX0NPTlNUIF9DaGFyVCogX19yZXN1bHQgPSB0aGlzLT5fTV90cmVlX3B0ci0+X01fY19zdHJpbmc7CisgICAgICBpZiAoMCA9PSBfX3Jlc3VsdCkKKwl7CisJICBzaXplX3QgX19zID0gc2l6ZSgpOworCSAgX19yZXN1bHQgPSB0aGlzLT5fRGF0YV9hbGxvY2F0ZShfX3MgKyAxKTsKKwkgIF9TX2ZsYXR0ZW4odGhpcy0+X01fdHJlZV9wdHIsIF9fcmVzdWx0KTsKKwkgIF9fcmVzdWx0W19fc10gPSBfU19lb3MoKF9DaGFyVCopMCk7CisJICB0aGlzLT5fTV90cmVlX3B0ci0+X01fY19zdHJpbmcgPSBfX3Jlc3VsdDsKKwl9CisgICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrICgmdGhpcy0+X01fdHJlZV9wdHItPl9NX2Nfc3RyaW5nX2xvY2spOworICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKKyAgICB9CisgIAorICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBjb25zdCBfQ2hhclQqIHJvcGU8X0NoYXJULCBfQWxsb2M+OjoKKyAgICByZXBsYWNlX3dpdGhfY19zdHIoKQorICAgIHsKKyAgICAgIGlmICgwID09IHRoaXMtPl9NX3RyZWVfcHRyKQorCXsKKwkgIF9TX2VtcHR5X2Nfc3RyWzBdID0gX1NfZW9zKChfQ2hhclQqKTApOworCSAgcmV0dXJuIF9TX2VtcHR5X2Nfc3RyOworCX0KKyAgICAgIF9fR0NfQ09OU1QgX0NoYXJUKiBfX29sZF9jX3N0cmluZyA9IHRoaXMtPl9NX3RyZWVfcHRyLT5fTV9jX3N0cmluZzsKKyAgICAgIGlmIChfX2RldGFpbDo6X1NfbGVhZiA9PSB0aGlzLT5fTV90cmVlX3B0ci0+X01fdGFnCisJICAmJiAwICE9IF9fb2xkX2Nfc3RyaW5nKQorCXJldHVybihfX29sZF9jX3N0cmluZyk7CisgICAgICBzaXplX3QgX19zID0gc2l6ZSgpOworICAgICAgX0NoYXJUKiBfX3Jlc3VsdCA9IHRoaXMtPl9EYXRhX2FsbG9jYXRlKF9TX3JvdW5kZWRfdXBfc2l6ZShfX3MpKTsKKyAgICAgIF9TX2ZsYXR0ZW4odGhpcy0+X01fdHJlZV9wdHIsIF9fcmVzdWx0KTsKKyAgICAgIF9fcmVzdWx0W19fc10gPSBfU19lb3MoKF9DaGFyVCopMCk7CisgICAgICB0aGlzLT5fTV90cmVlX3B0ci0+X01fdW5yZWZfbm9ubmlsKCk7CisgICAgICB0aGlzLT5fTV90cmVlX3B0ciA9IF9TX25ld19Sb3BlTGVhZihfX3Jlc3VsdCwgX19zLAorCQkJCQkgIHRoaXMtPl9NX2dldF9hbGxvY2F0b3IoKSk7CisgICAgICByZXR1cm4oX19yZXN1bHQpOworICAgIH0KKworICAvLyBBbGdvcml0aG0gc3BlY2lhbGl6YXRpb25zLiAgTW9yZSBzaG91bGQgYmUgYWRkZWQuCisgIAorICB0ZW1wbGF0ZTxjbGFzcyBfUm9wZV9pdGVyYXRvcj4gIC8vIHdhcyB0ZW1wbGF0ZWQgb24gQ2hhclQgYW5kIEFsbG9jCisgICAgdm9pZAkJICAgICAgICAgIC8vIFZDKysgd29ya2Fyb3VuZAorICAgIF9Sb3BlX3JvdGF0ZShfUm9wZV9pdGVyYXRvciBfX2ZpcnN0LAorCQkgX1JvcGVfaXRlcmF0b3IgX19taWRkbGUsCisJCSBfUm9wZV9pdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUm9wZV9pdGVyYXRvcjo6dmFsdWVfdHlwZSBfQ2hhclQ7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Sb3BlX2l0ZXJhdG9yOjpfYWxsb2NhdG9yX3R5cGUgX0FsbG9jOworICAgICAgCisgICAgICByb3BlPF9DaGFyVCwgX0FsbG9jPiYgX19yKF9fZmlyc3QuY29udGFpbmVyKCkpOworICAgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz4gX19wcmVmaXggPSBfX3Iuc3Vic3RyKDAsIF9fZmlyc3QuaW5kZXgoKSk7CisgICAgICByb3BlPF9DaGFyVCwgX0FsbG9jPiBfX3N1ZmZpeCA9CisJX19yLnN1YnN0cihfX2xhc3QuaW5kZXgoKSwgX19yLnNpemUoKSAtIF9fbGFzdC5pbmRleCgpKTsKKyAgICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+IF9fcGFydDEgPQorCV9fci5zdWJzdHIoX19taWRkbGUuaW5kZXgoKSwgX19sYXN0LmluZGV4KCkgLSBfX21pZGRsZS5pbmRleCgpKTsKKyAgICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+IF9fcGFydDIgPQorCV9fci5zdWJzdHIoX19maXJzdC5pbmRleCgpLCBfX21pZGRsZS5pbmRleCgpIC0gX19maXJzdC5pbmRleCgpKTsKKyAgICAgIF9fciA9IF9fcHJlZml4OworICAgICAgX19yICs9IF9fcGFydDE7CisgICAgICBfX3IgKz0gX19wYXJ0MjsKKyAgICAgIF9fciArPSBfX3N1ZmZpeDsKKyAgICB9CisKKyNpZiAhZGVmaW5lZChfX0dOVUNfXykKKyAgLy8gQXBwZWFycyB0byBjb25mdXNlIGcrKworICBpbmxpbmUgdm9pZAorICByb3RhdGUoX1JvcGVfaXRlcmF0b3I8Y2hhciwgX19TVExfREVGQVVMVF9BTExPQ0FUT1IoY2hhcik+IF9fZmlyc3QsCisJIF9Sb3BlX2l0ZXJhdG9yPGNoYXIsIF9fU1RMX0RFRkFVTFRfQUxMT0NBVE9SKGNoYXIpPiBfX21pZGRsZSwKKwkgX1JvcGVfaXRlcmF0b3I8Y2hhciwgX19TVExfREVGQVVMVF9BTExPQ0FUT1IoY2hhcik+IF9fbGFzdCkKKyAgeyBfUm9wZV9yb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7IH0KKyNlbmRpZgorCisjIGlmIDAKKyAgLy8gUHJvYmFibHkgbm90IHVzZWZ1bCBmb3Igc2V2ZXJhbCByZWFzb25zOgorICAvLyAtIGZvciBTR0lzIDcuMSBjb21waWxlciBhbmQgcHJvYmFibHkgc29tZSBvdGhlcnMsCisgIC8vICAgdGhpcyBmb3JjZXMgbG90cyBvZiByb3BlPHdjaGFyX3QsIC4uLj4gaW5zdGFudGlhdGlvbnMsIGNyZWF0aW5nIGEKKyAgLy8gICBjb2RlIGJsb2F0IGFuZCBjb21waWxlIHRpbWUgcHJvYmxlbS4gIChGaXhlZCBpbiA3LjIuKQorICAvLyAtIHdjaGFyX3QgaXMgNCBieXRlcyB3aWRlIG9uIG1vc3QgVU5JWCBwbGF0Zm9ybXMsIG1ha2luZyBpdAorICAvLyAgIHVuYXR0cmFjdGl2ZSBmb3IgdW5pY29kZSBzdHJpbmdzLiAgVW5zaWduZWQgc2hvcnQgbWF5IGJlIGEgYmV0dGVyCisgIC8vICAgY2hhcmFjdGVyIHR5cGUuCisgIGlubGluZSB2b2lkCisgIHJvdGF0ZShfUm9wZV9pdGVyYXRvcjx3Y2hhcl90LCBfX1NUTF9ERUZBVUxUX0FMTE9DQVRPUihjaGFyKT4gX19maXJzdCwKKwkgX1JvcGVfaXRlcmF0b3I8d2NoYXJfdCwgX19TVExfREVGQVVMVF9BTExPQ0FUT1IoY2hhcik+IF9fbWlkZGxlLAorCSBfUm9wZV9pdGVyYXRvcjx3Y2hhcl90LCBfX1NUTF9ERUZBVUxUX0FMTE9DQVRPUihjaGFyKT4gX19sYXN0KQorICB7IF9Sb3BlX3JvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsgfQorIyBlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9zbGlzdCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3NsaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNGUzNmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9zbGlzdApAQCAtMCwwICsxLDEwNzcgQEAKKy8vIFNpbmdseS1saW5rZWQgbGlzdCBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDgsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqLworCisvKiogQGZpbGUgZXh0L3NsaXN0CisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkgKHBvc3NpYmx5CisgKiAgY29udGFpbmluZyBleHRlbnNpb25zIGZyb20gdGhlIEhQL1NHSSBTVEwgc3Vic2V0KS4gCisgKi8KKworI2lmbmRlZiBfU0xJU1QKKyNkZWZpbmUgX1NMSVNUIDEKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxiaXRzL2FsbG9jYXRvci5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2NvbnN0cnVjdC5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaD4KKyNpbmNsdWRlIDxiaXRzL2NvbmNlcHRfY2hlY2suaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKworICB1c2luZyBzdGQ6OnNpemVfdDsKKyAgdXNpbmcgc3RkOjpwdHJkaWZmX3Q7CisgIHVzaW5nIHN0ZDo6X0NvbnN0cnVjdDsKKyAgdXNpbmcgc3RkOjpfRGVzdHJveTsKKyAgdXNpbmcgc3RkOjphbGxvY2F0b3I7CisgIHVzaW5nIHN0ZDo6X190cnVlX3R5cGU7CisgIHVzaW5nIHN0ZDo6X19mYWxzZV90eXBlOworCisgIHN0cnVjdCBfU2xpc3Rfbm9kZV9iYXNlCisgIHsKKyAgICBfU2xpc3Rfbm9kZV9iYXNlKiBfTV9uZXh0OworICB9OworICAKKyAgaW5saW5lIF9TbGlzdF9ub2RlX2Jhc2UqCisgIF9fc2xpc3RfbWFrZV9saW5rKF9TbGlzdF9ub2RlX2Jhc2UqIF9fcHJldl9ub2RlLAorCQkgICAgX1NsaXN0X25vZGVfYmFzZSogX19uZXdfbm9kZSkKKyAgeworICAgIF9fbmV3X25vZGUtPl9NX25leHQgPSBfX3ByZXZfbm9kZS0+X01fbmV4dDsKKyAgICBfX3ByZXZfbm9kZS0+X01fbmV4dCA9IF9fbmV3X25vZGU7CisgICAgcmV0dXJuIF9fbmV3X25vZGU7CisgIH0KKworICBpbmxpbmUgX1NsaXN0X25vZGVfYmFzZSoKKyAgX19zbGlzdF9wcmV2aW91cyhfU2xpc3Rfbm9kZV9iYXNlKiBfX2hlYWQsCisJCSAgIGNvbnN0IF9TbGlzdF9ub2RlX2Jhc2UqIF9fbm9kZSkKKyAgeworICAgIHdoaWxlIChfX2hlYWQgJiYgX19oZWFkLT5fTV9uZXh0ICE9IF9fbm9kZSkKKyAgICAgIF9faGVhZCA9IF9faGVhZC0+X01fbmV4dDsKKyAgICByZXR1cm4gX19oZWFkOworICB9CisKKyAgaW5saW5lIGNvbnN0IF9TbGlzdF9ub2RlX2Jhc2UqCisgIF9fc2xpc3RfcHJldmlvdXMoY29uc3QgX1NsaXN0X25vZGVfYmFzZSogX19oZWFkLAorCQkgICBjb25zdCBfU2xpc3Rfbm9kZV9iYXNlKiBfX25vZGUpCisgIHsKKyAgICB3aGlsZSAoX19oZWFkICYmIF9faGVhZC0+X01fbmV4dCAhPSBfX25vZGUpCisgICAgICBfX2hlYWQgPSBfX2hlYWQtPl9NX25leHQ7CisgICAgcmV0dXJuIF9faGVhZDsKKyAgfQorCisgIGlubGluZSB2b2lkCisgIF9fc2xpc3Rfc3BsaWNlX2FmdGVyKF9TbGlzdF9ub2RlX2Jhc2UqIF9fcG9zLAorCQkgICAgICAgX1NsaXN0X25vZGVfYmFzZSogX19iZWZvcmVfZmlyc3QsCisJCSAgICAgICBfU2xpc3Rfbm9kZV9iYXNlKiBfX2JlZm9yZV9sYXN0KQorICB7CisgICAgaWYgKF9fcG9zICE9IF9fYmVmb3JlX2ZpcnN0ICYmIF9fcG9zICE9IF9fYmVmb3JlX2xhc3QpCisgICAgICB7CisJX1NsaXN0X25vZGVfYmFzZSogX19maXJzdCA9IF9fYmVmb3JlX2ZpcnN0LT5fTV9uZXh0OworCV9TbGlzdF9ub2RlX2Jhc2UqIF9fYWZ0ZXIgPSBfX3Bvcy0+X01fbmV4dDsKKwlfX2JlZm9yZV9maXJzdC0+X01fbmV4dCA9IF9fYmVmb3JlX2xhc3QtPl9NX25leHQ7CisJX19wb3MtPl9NX25leHQgPSBfX2ZpcnN0OworCV9fYmVmb3JlX2xhc3QtPl9NX25leHQgPSBfX2FmdGVyOworICAgICAgfQorICB9CisKKyAgaW5saW5lIHZvaWQKKyAgX19zbGlzdF9zcGxpY2VfYWZ0ZXIoX1NsaXN0X25vZGVfYmFzZSogX19wb3MsIF9TbGlzdF9ub2RlX2Jhc2UqIF9faGVhZCkKKyAgeworICAgIF9TbGlzdF9ub2RlX2Jhc2UqIF9fYmVmb3JlX2xhc3QgPSBfX3NsaXN0X3ByZXZpb3VzKF9faGVhZCwgMCk7CisgICAgaWYgKF9fYmVmb3JlX2xhc3QgIT0gX19oZWFkKQorICAgICAgeworCV9TbGlzdF9ub2RlX2Jhc2UqIF9fYWZ0ZXIgPSBfX3Bvcy0+X01fbmV4dDsKKwlfX3Bvcy0+X01fbmV4dCA9IF9faGVhZC0+X01fbmV4dDsKKwlfX2hlYWQtPl9NX25leHQgPSAwOworCV9fYmVmb3JlX2xhc3QtPl9NX25leHQgPSBfX2FmdGVyOworICAgICAgfQorICB9CisKKyAgaW5saW5lIF9TbGlzdF9ub2RlX2Jhc2UqCisgIF9fc2xpc3RfcmV2ZXJzZShfU2xpc3Rfbm9kZV9iYXNlKiBfX25vZGUpCisgIHsKKyAgICBfU2xpc3Rfbm9kZV9iYXNlKiBfX3Jlc3VsdCA9IF9fbm9kZTsKKyAgICBfX25vZGUgPSBfX25vZGUtPl9NX25leHQ7CisgICAgX19yZXN1bHQtPl9NX25leHQgPSAwOworICAgIHdoaWxlKF9fbm9kZSkKKyAgICAgIHsKKwlfU2xpc3Rfbm9kZV9iYXNlKiBfX25leHQgPSBfX25vZGUtPl9NX25leHQ7CisJX19ub2RlLT5fTV9uZXh0ID0gX19yZXN1bHQ7CisJX19yZXN1bHQgPSBfX25vZGU7CisJX19ub2RlID0gX19uZXh0OworICAgICAgfQorICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgfQorCisgIGlubGluZSBzaXplX3QKKyAgX19zbGlzdF9zaXplKF9TbGlzdF9ub2RlX2Jhc2UqIF9fbm9kZSkKKyAgeworICAgIHNpemVfdCBfX3Jlc3VsdCA9IDA7CisgICAgZm9yICg7IF9fbm9kZSAhPSAwOyBfX25vZGUgPSBfX25vZGUtPl9NX25leHQpCisgICAgICArK19fcmVzdWx0OworICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfVHA+CisgICAgc3RydWN0IF9TbGlzdF9ub2RlIDogcHVibGljIF9TbGlzdF9ub2RlX2Jhc2UKKyAgICB7CisgICAgICBfVHAgX01fZGF0YTsKKyAgICB9OworCisgIHN0cnVjdCBfU2xpc3RfaXRlcmF0b3JfYmFzZQorICB7CisgICAgdHlwZWRlZiBzaXplX3QgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICB0eXBlZGVmIHB0cmRpZmZfdCAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgIHR5cGVkZWYgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKKworICAgIF9TbGlzdF9ub2RlX2Jhc2UqIF9NX25vZGU7CisgICAgCisgICAgX1NsaXN0X2l0ZXJhdG9yX2Jhc2UoX1NsaXN0X25vZGVfYmFzZSogX194KQorICAgIDogX01fbm9kZShfX3gpIHt9CisKKyAgICB2b2lkCisgICAgX01faW5jcigpCisgICAgeyBfTV9ub2RlID0gX01fbm9kZS0+X01fbmV4dDsgfQorCisgICAgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX1NsaXN0X2l0ZXJhdG9yX2Jhc2UmIF9feCkgY29uc3QKKyAgICB7IHJldHVybiBfTV9ub2RlID09IF9feC5fTV9ub2RlOyB9CisKKyAgICBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBfU2xpc3RfaXRlcmF0b3JfYmFzZSYgX194KSBjb25zdAorICAgIHsgcmV0dXJuIF9NX25vZGUgIT0gX194Ll9NX25vZGU7IH0KKyAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfUmVmLCBjbGFzcyBfUHRyPgorICAgIHN0cnVjdCBfU2xpc3RfaXRlcmF0b3IgOiBwdWJsaWMgX1NsaXN0X2l0ZXJhdG9yX2Jhc2UKKyAgICB7CisgICAgICB0eXBlZGVmIF9TbGlzdF9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+ICAgICAgICAgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfU2xpc3RfaXRlcmF0b3I8X1RwLCBjb25zdCBfVHAmLCBjb25zdCBfVHAqPiBjb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX1NsaXN0X2l0ZXJhdG9yPF9UcCwgX1JlZiwgX1B0cj4gICAgICAgICAgICAgX1NlbGY7CisKKyAgICAgIHR5cGVkZWYgX1RwICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBfUHRyICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIF9SZWYgICAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBfU2xpc3Rfbm9kZTxfVHA+IF9Ob2RlOworCisgICAgICBleHBsaWNpdAorICAgICAgX1NsaXN0X2l0ZXJhdG9yKF9Ob2RlKiBfX3gpCisgICAgICA6IF9TbGlzdF9pdGVyYXRvcl9iYXNlKF9feCkge30KKworICAgICAgX1NsaXN0X2l0ZXJhdG9yKCkKKyAgICAgIDogX1NsaXN0X2l0ZXJhdG9yX2Jhc2UoMCkge30KKworICAgICAgX1NsaXN0X2l0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJiBfX3gpCisgICAgICA6IF9TbGlzdF9pdGVyYXRvcl9iYXNlKF9feC5fTV9ub2RlKSB7fQorCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICB7IHJldHVybiAoKF9Ob2RlKikgX01fbm9kZSktPl9NX2RhdGE7IH0KKworICAgICAgcG9pbnRlcgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CisgICAgICB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQorCisgICAgICBfU2VsZiYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworCV9NX2luY3IoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIF9TZWxmCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsKKwlfU2VsZiBfX3RtcCA9ICp0aGlzOworCV9NX2luY3IoKTsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CisgICAgc3RydWN0IF9TbGlzdF9iYXNlCisgICAgOiBwdWJsaWMgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8X1NsaXN0X25vZGU8X1RwPiA+OjpvdGhlcgorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8X1NsaXN0X25vZGU8X1RwPiA+OjpvdGhlcgorICAgICAgICBfTm9kZV9hbGxvYzsKKyAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOworCisgICAgICBhbGxvY2F0b3JfdHlwZQorICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0CisgICAgICB7IHJldHVybiAqc3RhdGljX2Nhc3Q8Y29uc3QgX05vZGVfYWxsb2MqPih0aGlzKTsgfQorCisgICAgICBfU2xpc3RfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQorICAgICAgOiBfTm9kZV9hbGxvYyhfX2EpCisgICAgICB7IHRoaXMtPl9NX2hlYWQuX01fbmV4dCA9IDA7IH0KKworICAgICAgfl9TbGlzdF9iYXNlKCkKKyAgICAgIHsgX01fZXJhc2VfYWZ0ZXIoJnRoaXMtPl9NX2hlYWQsIDApOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfU2xpc3Rfbm9kZV9iYXNlIF9NX2hlYWQ7CisKKyAgICAgIF9TbGlzdF9ub2RlPF9UcD4qCisgICAgICBfTV9nZXRfbm9kZSgpCisgICAgICB7IHJldHVybiBfTm9kZV9hbGxvYzo6YWxsb2NhdGUoMSk7IH0KKyAgCisgICAgICB2b2lkCisgICAgICBfTV9wdXRfbm9kZShfU2xpc3Rfbm9kZTxfVHA+KiBfX3ApCisgICAgICB7IF9Ob2RlX2FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgMSk7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIF9TbGlzdF9ub2RlX2Jhc2UqIF9NX2VyYXNlX2FmdGVyKF9TbGlzdF9ub2RlX2Jhc2UqIF9fcG9zKQorICAgICAgeworCV9TbGlzdF9ub2RlPF9UcD4qIF9fbmV4dCA9IChfU2xpc3Rfbm9kZTxfVHA+KikgKF9fcG9zLT5fTV9uZXh0KTsKKwlfU2xpc3Rfbm9kZV9iYXNlKiBfX25leHRfbmV4dCA9IF9fbmV4dC0+X01fbmV4dDsKKwlfX3Bvcy0+X01fbmV4dCA9IF9fbmV4dF9uZXh0OworCWdldF9hbGxvY2F0b3IoKS5kZXN0cm95KCZfX25leHQtPl9NX2RhdGEpOworCV9NX3B1dF9ub2RlKF9fbmV4dCk7CisJcmV0dXJuIF9fbmV4dF9uZXh0OworICAgICAgfQorICAgICAgX1NsaXN0X25vZGVfYmFzZSogX01fZXJhc2VfYWZ0ZXIoX1NsaXN0X25vZGVfYmFzZSosIF9TbGlzdF9ub2RlX2Jhc2UqKTsKKyAgICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KKyAgICBfU2xpc3Rfbm9kZV9iYXNlKgorICAgIF9TbGlzdF9iYXNlPF9UcCxfQWxsb2M+OjpfTV9lcmFzZV9hZnRlcihfU2xpc3Rfbm9kZV9iYXNlKiBfX2JlZm9yZV9maXJzdCwKKwkJCQkJICAgIF9TbGlzdF9ub2RlX2Jhc2UqIF9fbGFzdF9ub2RlKQorICAgIHsKKyAgICAgIF9TbGlzdF9ub2RlPF9UcD4qIF9fY3VyID0gKF9TbGlzdF9ub2RlPF9UcD4qKSAoX19iZWZvcmVfZmlyc3QtPl9NX25leHQpOworICAgICAgd2hpbGUgKF9fY3VyICE9IF9fbGFzdF9ub2RlKQorCXsKKwkgIF9TbGlzdF9ub2RlPF9UcD4qIF9fdG1wID0gX19jdXI7CisJICBfX2N1ciA9IChfU2xpc3Rfbm9kZTxfVHA+KikgX19jdXItPl9NX25leHQ7CisJICBnZXRfYWxsb2NhdG9yKCkuZGVzdHJveSgmX190bXAtPl9NX2RhdGEpOworCSAgX01fcHV0X25vZGUoX190bXApOworCX0KKyAgICAgIF9fYmVmb3JlX2ZpcnN0LT5fTV9uZXh0ID0gX19sYXN0X25vZGU7CisgICAgICByZXR1cm4gX19sYXN0X25vZGU7CisgICAgfQorCisgIC8qKgorICAgKiAgVGhpcyBpcyBhbiBTR0kgZXh0ZW5zaW9uLgorICAgKiAgQGluZ3JvdXAgU0dJZXh0ZW5zaW9ucworICAgKiAgQGRvY3RvZG8KKyAgICovCisgIHRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfVHA+ID4KKyAgICBjbGFzcyBzbGlzdCA6IHByaXZhdGUgX1NsaXN0X2Jhc2U8X1RwLF9BbGxvYz4KKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzKF9UcCwgX1NHSUFzc2lnbmFibGVDb25jZXB0KQorCQorICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIF9TbGlzdF9iYXNlPF9UcCxfQWxsb2M+IF9CYXNlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlKiAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlJiAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgc2l6ZV90ICAgICAgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICAKKyAgICAgIHR5cGVkZWYgX1NsaXN0X2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4gICAgICAgICAgICAgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIF9TbGlzdF9pdGVyYXRvcjxfVHAsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCo+IGNvbnN0X2l0ZXJhdG9yOworICAgICAgCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKKworICAgICAgYWxsb2NhdG9yX3R5cGUKKyAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdAorICAgICAgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX1NsaXN0X25vZGU8X1RwPiAgICAgIF9Ob2RlOworICAgICAgdHlwZWRlZiBfU2xpc3Rfbm9kZV9iYXNlICAgICAgX05vZGVfYmFzZTsKKyAgICAgIHR5cGVkZWYgX1NsaXN0X2l0ZXJhdG9yX2Jhc2UgIF9JdGVyYXRvcl9iYXNlOworICAgICAgCisgICAgICBfTm9kZSoKKyAgICAgIF9NX2NyZWF0ZV9ub2RlKGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsKKwlfTm9kZSogX19ub2RlID0gdGhpcy0+X01fZ2V0X25vZGUoKTsKKwlfX3RyeQorCSAgeworCSAgICBnZXRfYWxsb2NhdG9yKCkuY29uc3RydWN0KCZfX25vZGUtPl9NX2RhdGEsIF9feCk7CisJICAgIF9fbm9kZS0+X01fbmV4dCA9IDA7CisJICB9CisJX19jYXRjaCguLi4pCisJICB7CisJICAgIHRoaXMtPl9NX3B1dF9ub2RlKF9fbm9kZSk7CisJICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgfQorCXJldHVybiBfX25vZGU7CisgICAgICB9CisKKyAgICAgIF9Ob2RlKgorICAgICAgX01fY3JlYXRlX25vZGUoKQorICAgICAgeworCV9Ob2RlKiBfX25vZGUgPSB0aGlzLT5fTV9nZXRfbm9kZSgpOworCV9fdHJ5CisJICB7CisJICAgIGdldF9hbGxvY2F0b3IoKS5jb25zdHJ1Y3QoJl9fbm9kZS0+X01fZGF0YSwgdmFsdWVfdHlwZSgpKTsKKwkgICAgX19ub2RlLT5fTV9uZXh0ID0gMDsKKwkgIH0KKwlfX2NhdGNoKC4uLikKKwkgIHsKKwkgICAgdGhpcy0+X01fcHV0X25vZGUoX19ub2RlKTsKKwkgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICB9CisJcmV0dXJuIF9fbm9kZTsKKyAgICAgIH0KKworICAgIHB1YmxpYzoKKyAgICAgIGV4cGxpY2l0CisgICAgICBzbGlzdChjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19hKSB7fQorCisgICAgICBzbGlzdChzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gsCisJICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSAgYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19hKQorICAgICAgeyBfTV9pbnNlcnRfYWZ0ZXJfZmlsbCgmdGhpcy0+X01faGVhZCwgX19uLCBfX3gpOyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBzbGlzdChzaXplX3R5cGUgX19uKQorICAgICAgOiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgeyBfTV9pbnNlcnRfYWZ0ZXJfZmlsbCgmdGhpcy0+X01faGVhZCwgX19uLCB2YWx1ZV90eXBlKCkpOyB9CisKKyAgICAgIC8vIFdlIGRvbid0IG5lZWQgYW55IGRpc3BhdGNoaW5nIHRyaWNrcyBoZXJlLCBiZWNhdXNlCisgICAgICAvLyBfTV9pbnNlcnRfYWZ0ZXJfcmFuZ2UgYWxyZWFkeSBkb2VzIHRoZW0uCisgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHNsaXN0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gIGFsbG9jYXRvcl90eXBlKCkpCisJOiBfQmFzZShfX2EpCisgICAgICAgIHsgX01faW5zZXJ0X2FmdGVyX3JhbmdlKCZ0aGlzLT5fTV9oZWFkLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CisKKyAgICAgIHNsaXN0KGNvbnN0IHNsaXN0JiBfX3gpCisgICAgICA6IF9CYXNlKF9feC5nZXRfYWxsb2NhdG9yKCkpCisgICAgICB7IF9NX2luc2VydF9hZnRlcl9yYW5nZSgmdGhpcy0+X01faGVhZCwgX194LmJlZ2luKCksIF9feC5lbmQoKSk7IH0KKworICAgICAgc2xpc3QmCisgICAgICBvcGVyYXRvcj0gKGNvbnN0IHNsaXN0JiBfX3gpOworCisgICAgICB+c2xpc3QoKSB7fQorCisgICAgcHVibGljOgorICAgICAgLy8gYXNzaWduKCksIGEgZ2VuZXJhbGl6ZWQgYXNzaWdubWVudCBtZW1iZXIgZnVuY3Rpb24uICBUd28KKyAgICAgIC8vIHZlcnNpb25zOiBvbmUgdGhhdCB0YWtlcyBhIGNvdW50LCBhbmQgb25lIHRoYXQgdGFrZXMgYSByYW5nZS4KKyAgICAgIC8vIFRoZSByYW5nZSB2ZXJzaW9uIGlzIGEgbWVtYmVyIHRlbXBsYXRlLCBzbyB3ZSBkaXNwYXRjaCBvbiB3aGV0aGVyCisgICAgICAvLyBvciBub3QgdGhlIHR5cGUgaXMgYW4gaW50ZWdlci4KKyAgICAgIAorICAgICAgdm9pZAorICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpCisgICAgICB7IF9NX2ZpbGxfYXNzaWduKF9fbiwgX192YWwpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2ZpbGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpOworCisgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeworCSAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Ol9faXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9fdHlwZSBfSW50ZWdyYWw7CisJICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CisJfQorCisgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CisgICAgICB2b2lkCisgICAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCisgICAgICB7IF9NX2ZpbGxfYXNzaWduKChzaXplX3R5cGUpIF9fbiwgKF9UcCkgX192YWwpOyB9CisKKyAgICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCQkgX19mYWxzZV90eXBlKTsKKworICAgIHB1YmxpYzoKKworICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKChfTm9kZSopdGhpcy0+X01faGVhZC5fTV9uZXh0KTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoKF9Ob2RlKil0aGlzLT5fTV9oZWFkLl9NX25leHQpO30KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpCisgICAgICB7IHJldHVybiBpdGVyYXRvcigwKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKDApOyB9CisKKyAgICAgIC8vIEV4cGVyaW1lbnRhbCBuZXcgZmVhdHVyZTogYmVmb3JlX2JlZ2luKCkgcmV0dXJucyBhCisgICAgICAvLyBub24tZGVyZWZlcmVuY2VhYmxlIGl0ZXJhdG9yIHRoYXQsIHdoZW4gaW5jcmVtZW50ZWQsIHlpZWxkcworICAgICAgLy8gYmVnaW4oKS4gIFRoaXMgaXRlcmF0b3IgbWF5IGJlIHVzZWQgYXMgdGhlIGFyZ3VtZW50IHRvCisgICAgICAvLyBpbnNlcnRfYWZ0ZXIsIGVyYXNlX2FmdGVyLCBldGMuICBOb3RlIHRoYXQgZXZlbiBmb3IgYW4gZW1wdHkKKyAgICAgIC8vIHNsaXN0LCBiZWZvcmVfYmVnaW4oKSBpcyBub3QgdGhlIHNhbWUgaXRlcmF0b3IgYXMgZW5kKCkuICBJdAorICAgICAgLy8gaXMgYWx3YXlzIG5lY2Vzc2FyeSB0byBpbmNyZW1lbnQgYmVmb3JlX2JlZ2luKCkgYXQgbGVhc3Qgb25jZSB0bworICAgICAgLy8gb2J0YWluIGVuZCgpLgorICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZm9yZV9iZWdpbigpCisgICAgICB7IHJldHVybiBpdGVyYXRvcigoX05vZGUqKSAmdGhpcy0+X01faGVhZCk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZm9yZV9iZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcigoX05vZGUqKSAmdGhpcy0+X01faGVhZCk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fc2xpc3Rfc2l6ZSh0aGlzLT5fTV9oZWFkLl9NX25leHQpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQorCisgICAgICBib29sCisgICAgICBlbXB0eSgpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5fTV9oZWFkLl9NX25leHQgPT0gMDsgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKHNsaXN0JiBfX3gpCisgICAgICB7IHN0ZDo6c3dhcCh0aGlzLT5fTV9oZWFkLl9NX25leHQsIF9feC5fTV9oZWFkLl9NX25leHQpOyB9CisKKyAgICBwdWJsaWM6CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgZnJvbnQoKQorICAgICAgeyByZXR1cm4gKChfTm9kZSopIHRoaXMtPl9NX2hlYWQuX01fbmV4dCktPl9NX2RhdGE7IH0KKworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBmcm9udCgpIGNvbnN0CisgICAgICB7IHJldHVybiAoKF9Ob2RlKikgdGhpcy0+X01faGVhZC5fTV9uZXh0KS0+X01fZGF0YTsgfQorCisgICAgICB2b2lkCisgICAgICBwdXNoX2Zyb250KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsgX19zbGlzdF9tYWtlX2xpbmsoJnRoaXMtPl9NX2hlYWQsIF9NX2NyZWF0ZV9ub2RlKF9feCkpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfZnJvbnQoKQorICAgICAgeyBfX3NsaXN0X21ha2VfbGluaygmdGhpcy0+X01faGVhZCwgX01fY3JlYXRlX25vZGUoKSk7IH0KKworICAgICAgdm9pZAorICAgICAgcG9wX2Zyb250KCkKKyAgICAgIHsKKwlfTm9kZSogX19ub2RlID0gKF9Ob2RlKikgdGhpcy0+X01faGVhZC5fTV9uZXh0OworCXRoaXMtPl9NX2hlYWQuX01fbmV4dCA9IF9fbm9kZS0+X01fbmV4dDsKKwlnZXRfYWxsb2NhdG9yKCkuZGVzdHJveSgmX19ub2RlLT5fTV9kYXRhKTsKKwl0aGlzLT5fTV9wdXRfbm9kZShfX25vZGUpOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgcHJldmlvdXMoY29uc3RfaXRlcmF0b3IgX19wb3MpCisgICAgICB7IHJldHVybiBpdGVyYXRvcigoX05vZGUqKSBfX3NsaXN0X3ByZXZpb3VzKCZ0aGlzLT5fTV9oZWFkLAorCQkJCQkJICBfX3Bvcy5fTV9ub2RlKSk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIHByZXZpb3VzKGNvbnN0X2l0ZXJhdG9yIF9fcG9zKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoKF9Ob2RlKikgX19zbGlzdF9wcmV2aW91cygmdGhpcy0+X01faGVhZCwKKwkJCQkJCQlfX3Bvcy5fTV9ub2RlKSk7IH0KKworICAgIHByaXZhdGU6CisgICAgICBfTm9kZSoKKyAgICAgIF9NX2luc2VydF9hZnRlcihfTm9kZV9iYXNlKiBfX3BvcywgY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gKF9Ob2RlKikgKF9fc2xpc3RfbWFrZV9saW5rKF9fcG9zLCBfTV9jcmVhdGVfbm9kZShfX3gpKSk7IH0KKworICAgICAgX05vZGUqCisgICAgICBfTV9pbnNlcnRfYWZ0ZXIoX05vZGVfYmFzZSogX19wb3MpCisgICAgICB7IHJldHVybiAoX05vZGUqKSAoX19zbGlzdF9tYWtlX2xpbmsoX19wb3MsIF9NX2NyZWF0ZV9ub2RlKCkpKTsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9pbnNlcnRfYWZ0ZXJfZmlsbChfTm9kZV9iYXNlKiBfX3BvcywKKwkJCSAgIHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsKKwlmb3IgKHNpemVfdHlwZSBfX2kgPSAwOyBfX2kgPCBfX247ICsrX19pKQorCSAgX19wb3MgPSBfX3NsaXN0X21ha2VfbGluayhfX3BvcywgX01fY3JlYXRlX25vZGUoX194KSk7CisgICAgICB9CisKKyAgICAgIC8vIENoZWNrIHdoZXRoZXIgaXQncyBhbiBpbnRlZ3JhbCB0eXBlLiAgSWYgc28sIGl0J3Mgbm90IGFuIGl0ZXJhdG9yLgorICAgICAgdGVtcGxhdGUgPGNsYXNzIF9Jbkl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX2luc2VydF9hZnRlcl9yYW5nZShfTm9kZV9iYXNlKiBfX3BvcywKKwkJCSAgICAgIF9Jbkl0ZXJhdG9yIF9fZmlyc3QsIF9Jbkl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeworCSAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Ol9faXNfaW50ZWdlcjxfSW5JdGVyYXRvcj46Ol9fdHlwZSBfSW50ZWdyYWw7CisJICBfTV9pbnNlcnRfYWZ0ZXJfcmFuZ2UoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOworCX0KKworICAgICAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX2luc2VydF9hZnRlcl9yYW5nZShfTm9kZV9iYXNlKiBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsCisJCQkgICAgICBfX3RydWVfdHlwZSkKKyAgICAgICAgeyBfTV9pbnNlcnRfYWZ0ZXJfZmlsbChfX3BvcywgX19uLCBfX3gpOyB9CisKKyAgICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5JdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9pbnNlcnRfYWZ0ZXJfcmFuZ2UoX05vZGVfYmFzZSogX19wb3MsCisJCQkgICAgICBfSW5JdGVyYXRvciBfX2ZpcnN0LCBfSW5JdGVyYXRvciBfX2xhc3QsCisJCQkgICAgICBfX2ZhbHNlX3R5cGUpCisgICAgICAgIHsKKwkgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwkgICAgeworCSAgICAgIF9fcG9zID0gX19zbGlzdF9tYWtlX2xpbmsoX19wb3MsIF9NX2NyZWF0ZV9ub2RlKCpfX2ZpcnN0KSk7CisJICAgICAgKytfX2ZpcnN0OworCSAgICB9CisJfQorCisgICAgcHVibGljOgorICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydF9hZnRlcihpdGVyYXRvciBfX3BvcywgY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX01faW5zZXJ0X2FmdGVyKF9fcG9zLl9NX25vZGUsIF9feCkpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnRfYWZ0ZXIoaXRlcmF0b3IgX19wb3MpCisgICAgICB7IHJldHVybiBpbnNlcnRfYWZ0ZXIoX19wb3MsIHZhbHVlX3R5cGUoKSk7IH0KKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0X2FmdGVyKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7IF9NX2luc2VydF9hZnRlcl9maWxsKF9fcG9zLl9NX25vZGUsIF9fbiwgX194KTsgfQorCisgICAgICAvLyBXZSBkb24ndCBuZWVkIGFueSBkaXNwYXRjaGluZyB0cmlja3MgaGVyZSwgYmVjYXVzZQorICAgICAgLy8gX01faW5zZXJ0X2FmdGVyX3JhbmdlIGFscmVhZHkgZG9lcyB0aGVtLgorICAgICAgdGVtcGxhdGUgPGNsYXNzIF9Jbkl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydF9hZnRlcihpdGVyYXRvciBfX3BvcywgX0luSXRlcmF0b3IgX19maXJzdCwgX0luSXRlcmF0b3IgX19sYXN0KQorICAgICAgICB7IF9NX2luc2VydF9hZnRlcl9yYW5nZShfX3Bvcy5fTV9ub2RlLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9NX2luc2VydF9hZnRlcihfX3NsaXN0X3ByZXZpb3VzKCZ0aGlzLT5fTV9oZWFkLAorCQkJCQkJCSBfX3Bvcy5fTV9ub2RlKSwKKwkJCQkJX194KSk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3BvcykKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9NX2luc2VydF9hZnRlcihfX3NsaXN0X3ByZXZpb3VzKCZ0aGlzLT5fTV9oZWFkLAorCQkJCQkJCSBfX3Bvcy5fTV9ub2RlKSwKKwkJCQkJdmFsdWVfdHlwZSgpKSk7IH0KKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7IF9NX2luc2VydF9hZnRlcl9maWxsKF9fc2xpc3RfcHJldmlvdXMoJnRoaXMtPl9NX2hlYWQsIF9fcG9zLl9NX25vZGUpLAorCQkJICAgICBfX24sIF9feCk7IH0KKworICAgICAgLy8gV2UgZG9uJ3QgbmVlZCBhbnkgZGlzcGF0Y2hpbmcgdHJpY2tzIGhlcmUsIGJlY2F1c2UKKyAgICAgIC8vIF9NX2luc2VydF9hZnRlcl9yYW5nZSBhbHJlYWR5IGRvZXMgdGhlbS4KKyAgICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5JdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIF9Jbkl0ZXJhdG9yIF9fZmlyc3QsIF9Jbkl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeyBfTV9pbnNlcnRfYWZ0ZXJfcmFuZ2UoX19zbGlzdF9wcmV2aW91cygmdGhpcy0+X01faGVhZCwgX19wb3MuX01fbm9kZSksCisJCQkJX19maXJzdCwgX19sYXN0KTsgfQorCisgICAgcHVibGljOgorICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlX2FmdGVyKGl0ZXJhdG9yIF9fcG9zKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoKF9Ob2RlKikgdGhpcy0+X01fZXJhc2VfYWZ0ZXIoX19wb3MuX01fbm9kZSkpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZV9hZnRlcihpdGVyYXRvciBfX2JlZm9yZV9maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICAgeyAKKwlyZXR1cm4gaXRlcmF0b3IoKF9Ob2RlKikgdGhpcy0+X01fZXJhc2VfYWZ0ZXIoX19iZWZvcmVfZmlyc3QuX01fbm9kZSwKKwkJCQkJCSAgICAgIF9fbGFzdC5fTV9ub2RlKSk7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX3BvcykKKyAgICAgIHsgCisJcmV0dXJuIGl0ZXJhdG9yKChfTm9kZSopIHRoaXMtPl9NX2VyYXNlX2FmdGVyCisJCQkoX19zbGlzdF9wcmV2aW91cygmdGhpcy0+X01faGVhZCwgX19wb3MuX01fbm9kZSkpKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsgCisJcmV0dXJuIGl0ZXJhdG9yKChfTm9kZSopIHRoaXMtPl9NX2VyYXNlX2FmdGVyCisJCQkoX19zbGlzdF9wcmV2aW91cygmdGhpcy0+X01faGVhZCwgX19maXJzdC5fTV9ub2RlKSwKKwkJCSBfX2xhc3QuX01fbm9kZSkpOworICAgICAgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICByZXNpemUoc2l6ZV90eXBlIG5ld19zaXplLCBjb25zdCBfVHAmIF9feCk7CisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZShzaXplX3R5cGUgbmV3X3NpemUpCisgICAgICB7IHJlc2l6ZShuZXdfc2l6ZSwgX1RwKCkpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCkKKyAgICAgIHsgdGhpcy0+X01fZXJhc2VfYWZ0ZXIoJnRoaXMtPl9NX2hlYWQsIDApOyB9CisKKyAgICBwdWJsaWM6CisgICAgICAvLyBNb3ZlcyB0aGUgcmFuZ2UgW19fYmVmb3JlX2ZpcnN0ICsgMSwgX19iZWZvcmVfbGFzdCArIDEpIHRvICp0aGlzLAorICAgICAgLy8gIGluc2VydGluZyBpdCBpbW1lZGlhdGVseSBhZnRlciBfX3Bvcy4gIFRoaXMgaXMgY29uc3RhbnQgdGltZS4KKyAgICAgIHZvaWQKKyAgICAgIHNwbGljZV9hZnRlcihpdGVyYXRvciBfX3BvcywKKwkJICAgaXRlcmF0b3IgX19iZWZvcmVfZmlyc3QsIGl0ZXJhdG9yIF9fYmVmb3JlX2xhc3QpCisgICAgICB7CisJaWYgKF9fYmVmb3JlX2ZpcnN0ICE9IF9fYmVmb3JlX2xhc3QpCisJICBfX3NsaXN0X3NwbGljZV9hZnRlcihfX3Bvcy5fTV9ub2RlLCBfX2JlZm9yZV9maXJzdC5fTV9ub2RlLAorCQkJICAgICAgIF9fYmVmb3JlX2xhc3QuX01fbm9kZSk7CisgICAgICB9CisKKyAgICAgIC8vIE1vdmVzIHRoZSBlbGVtZW50IHRoYXQgZm9sbG93cyBfX3ByZXYgdG8gKnRoaXMsIGluc2VydGluZyBpdAorICAgICAgLy8gaW1tZWRpYXRlbHkgYWZ0ZXIgX19wb3MuICBUaGlzIGlzIGNvbnN0YW50IHRpbWUuCisgICAgICB2b2lkCisgICAgICBzcGxpY2VfYWZ0ZXIoaXRlcmF0b3IgX19wb3MsIGl0ZXJhdG9yIF9fcHJldikKKyAgICAgIHsgX19zbGlzdF9zcGxpY2VfYWZ0ZXIoX19wb3MuX01fbm9kZSwKKwkJCSAgICAgX19wcmV2Ll9NX25vZGUsIF9fcHJldi5fTV9ub2RlLT5fTV9uZXh0KTsgfQorCisgICAgICAvLyBSZW1vdmVzIGFsbCBvZiB0aGUgZWxlbWVudHMgZnJvbSB0aGUgbGlzdCBfX3ggdG8gKnRoaXMsIGluc2VydGluZworICAgICAgLy8gdGhlbSBpbW1lZGlhdGVseSBhZnRlciBfX3Bvcy4gIF9feCBtdXN0IG5vdCBiZSAqdGhpcy4gIENvbXBsZXhpdHk6CisgICAgICAvLyBsaW5lYXIgaW4gX194LnNpemUoKS4KKyAgICAgIHZvaWQKKyAgICAgIHNwbGljZV9hZnRlcihpdGVyYXRvciBfX3Bvcywgc2xpc3QmIF9feCkKKyAgICAgIHsgX19zbGlzdF9zcGxpY2VfYWZ0ZXIoX19wb3MuX01fbm9kZSwgJl9feC5fTV9oZWFkKTsgfQorCisgICAgICAvLyBMaW5lYXIgaW4gZGlzdGFuY2UoYmVnaW4oKSwgX19wb3MpLCBhbmQgbGluZWFyIGluIF9feC5zaXplKCkuCisgICAgICB2b2lkCisgICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3MsIHNsaXN0JiBfX3gpCisgICAgICB7CisJaWYgKF9feC5fTV9oZWFkLl9NX25leHQpCisJICBfX3NsaXN0X3NwbGljZV9hZnRlcihfX3NsaXN0X3ByZXZpb3VzKCZ0aGlzLT5fTV9oZWFkLCBfX3Bvcy5fTV9ub2RlKSwKKwkJCSAgICAgICAmX194Ll9NX2hlYWQsCisJCQkgICAgICAgX19zbGlzdF9wcmV2aW91cygmX194Ll9NX2hlYWQsIDApKTsgfQorCisgICAgICAvLyBMaW5lYXIgaW4gZGlzdGFuY2UoYmVnaW4oKSwgX19wb3MpLCBhbmQgaW4gZGlzdGFuY2UoX194LmJlZ2luKCksIF9faSkuCisgICAgICB2b2lkCisgICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3MsIHNsaXN0JiBfX3gsIGl0ZXJhdG9yIF9faSkKKyAgICAgIHsgX19zbGlzdF9zcGxpY2VfYWZ0ZXIoX19zbGlzdF9wcmV2aW91cygmdGhpcy0+X01faGVhZCwgX19wb3MuX01fbm9kZSksCisJCQkgICAgIF9fc2xpc3RfcHJldmlvdXMoJl9feC5fTV9oZWFkLCBfX2kuX01fbm9kZSksCisJCQkgICAgIF9faS5fTV9ub2RlKTsgfQorCisgICAgICAvLyBMaW5lYXIgaW4gZGlzdGFuY2UoYmVnaW4oKSwgX19wb3MpLCBpbiBkaXN0YW5jZShfX3guYmVnaW4oKSwgX19maXJzdCksCisgICAgICAvLyBhbmQgaW4gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KS4KKyAgICAgIHZvaWQKKyAgICAgIHNwbGljZShpdGVyYXRvciBfX3Bvcywgc2xpc3QmIF9feCwgaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICAgeworCWlmIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwkgIF9fc2xpc3Rfc3BsaWNlX2FmdGVyKF9fc2xpc3RfcHJldmlvdXMoJnRoaXMtPl9NX2hlYWQsIF9fcG9zLl9NX25vZGUpLAorCQkJICAgICAgIF9fc2xpc3RfcHJldmlvdXMoJl9feC5fTV9oZWFkLCBfX2ZpcnN0Ll9NX25vZGUpLAorCQkJICAgICAgIF9fc2xpc3RfcHJldmlvdXMoX19maXJzdC5fTV9ub2RlLAorCQkJCQkJX19sYXN0Ll9NX25vZGUpKTsKKyAgICAgIH0KKworICAgIHB1YmxpYzoKKyAgICAgIHZvaWQKKyAgICAgIHJldmVyc2UoKQorICAgICAgeworCWlmICh0aGlzLT5fTV9oZWFkLl9NX25leHQpCisJICB0aGlzLT5fTV9oZWFkLl9NX25leHQgPSBfX3NsaXN0X3JldmVyc2UodGhpcy0+X01faGVhZC5fTV9uZXh0KTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgcmVtb3ZlKGNvbnN0IF9UcCYgX192YWwpOworCisgICAgICB2b2lkCisgICAgICB1bmlxdWUoKTsKKyAgICAgIAorICAgICAgdm9pZAorICAgICAgbWVyZ2Uoc2xpc3QmIF9feCk7CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIHNvcnQoKTsKKworICAgICAgdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CisgICAgICAgIHZvaWQKKyAgICAgICAgcmVtb3ZlX2lmKF9QcmVkaWNhdGUgX19wcmVkKTsKKworICAgICAgdGVtcGxhdGUgPGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgICAgIHZvaWQKKyAgICAgICAgdW5pcXVlKF9CaW5hcnlQcmVkaWNhdGUgX19wcmVkKTsKKworICAgICAgdGVtcGxhdGUgPGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+CisgICAgICAgIHZvaWQKKyAgICAgICAgbWVyZ2Uoc2xpc3QmLCBfU3RyaWN0V2Vha09yZGVyaW5nKTsKKworICAgICAgdGVtcGxhdGUgPGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+CisgICAgICAgIHZvaWQKKyAgICAgICAgc29ydChfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCk7CisgICAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CisgICAgc2xpc3Q8X1RwLCBfQWxsb2M+JgorICAgIHNsaXN0PF9UcCwgX0FsbG9jPjo6b3BlcmF0b3I9KGNvbnN0IHNsaXN0PF9UcCwgX0FsbG9jPiYgX194KQorICAgIHsKKyAgICAgIGlmICgmX194ICE9IHRoaXMpCisJeworCSAgX05vZGVfYmFzZSogX19wMSA9ICZ0aGlzLT5fTV9oZWFkOworCSAgX05vZGUqIF9fbjEgPSAoX05vZGUqKSB0aGlzLT5fTV9oZWFkLl9NX25leHQ7CisJICBjb25zdCBfTm9kZSogX19uMiA9IChjb25zdCBfTm9kZSopIF9feC5fTV9oZWFkLl9NX25leHQ7CisJICB3aGlsZSAoX19uMSAmJiBfX24yKQorCSAgICB7CisJICAgICAgX19uMS0+X01fZGF0YSA9IF9fbjItPl9NX2RhdGE7CisJICAgICAgX19wMSA9IF9fbjE7CisJICAgICAgX19uMSA9IChfTm9kZSopIF9fbjEtPl9NX25leHQ7CisJICAgICAgX19uMiA9IChjb25zdCBfTm9kZSopIF9fbjItPl9NX25leHQ7CisJICAgIH0KKwkgIGlmIChfX24yID09IDApCisJICAgIHRoaXMtPl9NX2VyYXNlX2FmdGVyKF9fcDEsIDApOworCSAgZWxzZQorCSAgICBfTV9pbnNlcnRfYWZ0ZXJfcmFuZ2UoX19wMSwgY29uc3RfaXRlcmF0b3IoKF9Ob2RlKilfX24yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvcigwKSk7CisJfQorICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CisgICAgdm9pZAorICAgIHNsaXN0PF9UcCwgX0FsbG9jPjo6X01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkKKyAgICB7CisgICAgICBfTm9kZV9iYXNlKiBfX3ByZXYgPSAmdGhpcy0+X01faGVhZDsKKyAgICAgIF9Ob2RlKiBfX25vZGUgPSAoX05vZGUqKSB0aGlzLT5fTV9oZWFkLl9NX25leHQ7CisgICAgICBmb3IgKDsgX19ub2RlICE9IDAgJiYgX19uID4gMDsgLS1fX24pCisJeworCSAgX19ub2RlLT5fTV9kYXRhID0gX192YWw7CisJICBfX3ByZXYgPSBfX25vZGU7CisJICBfX25vZGUgPSAoX05vZGUqKSBfX25vZGUtPl9NX25leHQ7CisJfQorICAgICAgaWYgKF9fbiA+IDApCisJX01faW5zZXJ0X2FmdGVyX2ZpbGwoX19wcmV2LCBfX24sIF9fdmFsKTsKKyAgICAgIGVsc2UKKwl0aGlzLT5fTV9lcmFzZV9hZnRlcihfX3ByZXYsIDApOworICAgIH0KKyAgCisgIHRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICB2b2lkCisgICAgICBzbGlzdDxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAorCQkJCQkgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJCQkJICAgICBfX2ZhbHNlX3R5cGUpCisgICAgICB7CisJX05vZGVfYmFzZSogX19wcmV2ID0gJnRoaXMtPl9NX2hlYWQ7CisJX05vZGUqIF9fbm9kZSA9IChfTm9kZSopIHRoaXMtPl9NX2hlYWQuX01fbmV4dDsKKwl3aGlsZSAoX19ub2RlICE9IDAgJiYgX19maXJzdCAhPSBfX2xhc3QpCisJICB7CisJICAgIF9fbm9kZS0+X01fZGF0YSA9ICpfX2ZpcnN0OworCSAgICBfX3ByZXYgPSBfX25vZGU7CisJICAgIF9fbm9kZSA9IChfTm9kZSopIF9fbm9kZS0+X01fbmV4dDsKKwkgICAgKytfX2ZpcnN0OworCSAgfQorCWlmIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwkgIF9NX2luc2VydF9hZnRlcl9yYW5nZShfX3ByZXYsIF9fZmlyc3QsIF9fbGFzdCk7CisJZWxzZQorCSAgdGhpcy0+X01fZXJhc2VfYWZ0ZXIoX19wcmV2LCAwKTsKKyAgICAgIH0KKyAgCisgIHRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3Qgc2xpc3Q8X1RwLCBfQWxsb2M+JiBfU0wxLCBjb25zdCBzbGlzdDxfVHAsIF9BbGxvYz4mIF9TTDIpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzbGlzdDxfVHAsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgICBjb25zdF9pdGVyYXRvciBfX2VuZDEgPSBfU0wxLmVuZCgpOworICAgICAgY29uc3RfaXRlcmF0b3IgX19lbmQyID0gX1NMMi5lbmQoKTsKKyAgICAgIAorICAgICAgY29uc3RfaXRlcmF0b3IgX19pMSA9IF9TTDEuYmVnaW4oKTsKKyAgICAgIGNvbnN0X2l0ZXJhdG9yIF9faTIgPSBfU0wyLmJlZ2luKCk7CisgICAgICB3aGlsZSAoX19pMSAhPSBfX2VuZDEgJiYgX19pMiAhPSBfX2VuZDIgJiYgKl9faTEgPT0gKl9faTIpCisJeworCSAgKytfX2kxOworCSAgKytfX2kyOworCX0KKyAgICAgIHJldHVybiBfX2kxID09IF9fZW5kMSAmJiBfX2kyID09IF9fZW5kMjsKKyAgICB9CisKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3Qgc2xpc3Q8X1RwLCBfQWxsb2M+JiBfU0wxLCBjb25zdCBzbGlzdDxfVHAsIF9BbGxvYz4mIF9TTDIpCisgICAgeyByZXR1cm4gc3RkOjpsZXhpY29ncmFwaGljYWxfY29tcGFyZShfU0wxLmJlZ2luKCksIF9TTDEuZW5kKCksCisJCQkJCSAgX1NMMi5iZWdpbigpLCBfU0wyLmVuZCgpKTsgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc2xpc3Q8X1RwLCBfQWxsb2M+JiBfU0wxLCBjb25zdCBzbGlzdDxfVHAsIF9BbGxvYz4mIF9TTDIpCisgICAgeyByZXR1cm4gIShfU0wxID09IF9TTDIpOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IHNsaXN0PF9UcCwgX0FsbG9jPiYgX1NMMSwgY29uc3Qgc2xpc3Q8X1RwLCBfQWxsb2M+JiBfU0wyKQorICAgIHsgcmV0dXJuIF9TTDIgPCBfU0wxOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBzbGlzdDxfVHAsIF9BbGxvYz4mIF9TTDEsIGNvbnN0IHNsaXN0PF9UcCwgX0FsbG9jPiYgX1NMMikKKyAgICB7IHJldHVybiAhKF9TTDIgPCBfU0wxKTsgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3Qgc2xpc3Q8X1RwLCBfQWxsb2M+JiBfU0wxLCBjb25zdCBzbGlzdDxfVHAsIF9BbGxvYz4mIF9TTDIpCisgICAgeyByZXR1cm4gIShfU0wxIDwgX1NMMik7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHNsaXN0PF9UcCwgX0FsbG9jPiYgX194LCBzbGlzdDxfVHAsIF9BbGxvYz4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CisgICAgdm9pZAorICAgIHNsaXN0PF9UcCwgX0FsbG9jPjo6cmVzaXplKHNpemVfdHlwZSBfX2xlbiwgY29uc3QgX1RwJiBfX3gpCisgICAgeworICAgICAgX05vZGVfYmFzZSogX19jdXIgPSAmdGhpcy0+X01faGVhZDsKKyAgICAgIHdoaWxlIChfX2N1ci0+X01fbmV4dCAhPSAwICYmIF9fbGVuID4gMCkKKwl7CisJICAtLV9fbGVuOworCSAgX19jdXIgPSBfX2N1ci0+X01fbmV4dDsKKwl9CisgICAgICBpZiAoX19jdXItPl9NX25leHQpCisJdGhpcy0+X01fZXJhc2VfYWZ0ZXIoX19jdXIsIDApOworICAgICAgZWxzZQorCV9NX2luc2VydF9hZnRlcl9maWxsKF9fY3VyLCBfX2xlbiwgX194KTsKKyAgICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgorICAgIHZvaWQKKyAgICBzbGlzdDxfVHAsIF9BbGxvYz46OnJlbW92ZShjb25zdCBfVHAmIF9fdmFsKQorICAgIHsgCisgICAgICBfTm9kZV9iYXNlKiBfX2N1ciA9ICZ0aGlzLT5fTV9oZWFkOworICAgICAgd2hpbGUgKF9fY3VyICYmIF9fY3VyLT5fTV9uZXh0KQorCXsKKwkgIGlmICgoKF9Ob2RlKikgX19jdXItPl9NX25leHQpLT5fTV9kYXRhID09IF9fdmFsKQorCSAgICB0aGlzLT5fTV9lcmFzZV9hZnRlcihfX2N1cik7CisJICBlbHNlCisJICAgIF9fY3VyID0gX19jdXItPl9NX25leHQ7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CisgICAgdm9pZAorICAgIHNsaXN0PF9UcCwgX0FsbG9jPjo6dW5pcXVlKCkKKyAgICB7CisgICAgICBfTm9kZV9iYXNlKiBfX2N1ciA9IHRoaXMtPl9NX2hlYWQuX01fbmV4dDsKKyAgICAgIGlmIChfX2N1cikKKwl7CisJICB3aGlsZSAoX19jdXItPl9NX25leHQpCisJICAgIHsKKwkgICAgICBpZiAoKChfTm9kZSopX19jdXIpLT5fTV9kYXRhCisJCSAgPT0gKChfTm9kZSopKF9fY3VyLT5fTV9uZXh0KSktPl9NX2RhdGEpCisJCXRoaXMtPl9NX2VyYXNlX2FmdGVyKF9fY3VyKTsKKwkgICAgICBlbHNlCisJCV9fY3VyID0gX19jdXItPl9NX25leHQ7CisJICAgIH0KKwl9CisgICAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KKyAgICB2b2lkCisgICAgc2xpc3Q8X1RwLCBfQWxsb2M+OjptZXJnZShzbGlzdDxfVHAsIF9BbGxvYz4mIF9feCkKKyAgICB7CisgICAgICBfTm9kZV9iYXNlKiBfX24xID0gJnRoaXMtPl9NX2hlYWQ7CisgICAgICB3aGlsZSAoX19uMS0+X01fbmV4dCAmJiBfX3guX01faGVhZC5fTV9uZXh0KQorCXsKKwkgIGlmICgoKF9Ob2RlKikgX194Ll9NX2hlYWQuX01fbmV4dCktPl9NX2RhdGEKKwkgICAgICA8ICgoX05vZGUqKSBfX24xLT5fTV9uZXh0KS0+X01fZGF0YSkKKwkgICAgX19zbGlzdF9zcGxpY2VfYWZ0ZXIoX19uMSwgJl9feC5fTV9oZWFkLCBfX3guX01faGVhZC5fTV9uZXh0KTsKKwkgIF9fbjEgPSBfX24xLT5fTV9uZXh0OworCX0KKyAgICAgIGlmIChfX3guX01faGVhZC5fTV9uZXh0KQorCXsKKwkgIF9fbjEtPl9NX25leHQgPSBfX3guX01faGVhZC5fTV9uZXh0OworCSAgX194Ll9NX2hlYWQuX01fbmV4dCA9IDA7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CisgICAgdm9pZAorICAgIHNsaXN0PF9UcCwgX0FsbG9jPjo6c29ydCgpCisgICAgeworICAgICAgaWYgKHRoaXMtPl9NX2hlYWQuX01fbmV4dCAmJiB0aGlzLT5fTV9oZWFkLl9NX25leHQtPl9NX25leHQpCisJeworCSAgc2xpc3QgX19jYXJyeTsKKwkgIHNsaXN0IF9fY291bnRlcls2NF07CisJICBpbnQgX19maWxsID0gMDsKKwkgIHdoaWxlICghZW1wdHkoKSkKKwkgICAgeworCSAgICAgIF9fc2xpc3Rfc3BsaWNlX2FmdGVyKCZfX2NhcnJ5Ll9NX2hlYWQsCisJCQkJICAgJnRoaXMtPl9NX2hlYWQsIHRoaXMtPl9NX2hlYWQuX01fbmV4dCk7CisJICAgICAgaW50IF9faSA9IDA7CisJICAgICAgd2hpbGUgKF9faSA8IF9fZmlsbCAmJiAhX19jb3VudGVyW19faV0uZW1wdHkoKSkKKwkJeworCQkgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY2FycnkpOworCQkgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19pXSk7CisJCSAgKytfX2k7CisJCX0KKwkgICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faV0pOworCSAgICAgIGlmIChfX2kgPT0gX19maWxsKQorCQkrK19fZmlsbDsKKwkgICAgfQorCSAgCisJICBmb3IgKGludCBfX2kgPSAxOyBfX2kgPCBfX2ZpbGw7ICsrX19pKQorCSAgICBfX2NvdW50ZXJbX19pXS5tZXJnZShfX2NvdW50ZXJbX19pLTFdKTsKKwkgIHRoaXMtPnN3YXAoX19jb3VudGVyW19fZmlsbC0xXSk7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CisgICAgdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CisgICAgICB2b2lkIHNsaXN0PF9UcCwgX0FsbG9jPjo6cmVtb3ZlX2lmKF9QcmVkaWNhdGUgX19wcmVkKQorICAgICAgeworCV9Ob2RlX2Jhc2UqIF9fY3VyID0gJnRoaXMtPl9NX2hlYWQ7CisJd2hpbGUgKF9fY3VyLT5fTV9uZXh0KQorCSAgeworCSAgICBpZiAoX19wcmVkKCgoX05vZGUqKSBfX2N1ci0+X01fbmV4dCktPl9NX2RhdGEpKQorCSAgICAgIHRoaXMtPl9NX2VyYXNlX2FmdGVyKF9fY3VyKTsKKwkgICAgZWxzZQorCSAgICAgIF9fY3VyID0gX19jdXItPl9NX25leHQ7CisJICB9CisgICAgICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgorICAgIHRlbXBsYXRlIDxjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgorICAgICAgdm9pZAorICAgICAgc2xpc3Q8X1RwLCBfQWxsb2M+Ojp1bmlxdWUoX0JpbmFyeVByZWRpY2F0ZSBfX3ByZWQpCisgICAgICB7CisJX05vZGUqIF9fY3VyID0gKF9Ob2RlKikgdGhpcy0+X01faGVhZC5fTV9uZXh0OworCWlmIChfX2N1cikKKwkgIHsKKwkgICAgd2hpbGUgKF9fY3VyLT5fTV9uZXh0KQorCSAgICAgIHsKKwkJaWYgKF9fcHJlZCgoKF9Ob2RlKilfX2N1ciktPl9NX2RhdGEsCisJCQkgICAoKF9Ob2RlKikoX19jdXItPl9NX25leHQpKS0+X01fZGF0YSkpCisJCSAgdGhpcy0+X01fZXJhc2VfYWZ0ZXIoX19jdXIpOworCQllbHNlCisJCSAgX19jdXIgPSAoX05vZGUqKSBfX2N1ci0+X01fbmV4dDsKKwkgICAgICB9CisJICB9CisgICAgICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgorICAgIHRlbXBsYXRlIDxjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPgorICAgICAgdm9pZAorICAgICAgc2xpc3Q8X1RwLCBfQWxsb2M+OjptZXJnZShzbGlzdDxfVHAsIF9BbGxvYz4mIF9feCwKKwkJCSAgICAgICBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkKKyAgICAgIHsKKwlfTm9kZV9iYXNlKiBfX24xID0gJnRoaXMtPl9NX2hlYWQ7CisJd2hpbGUgKF9fbjEtPl9NX25leHQgJiYgX194Ll9NX2hlYWQuX01fbmV4dCkKKwkgIHsKKwkgICAgaWYgKF9fY29tcCgoKF9Ob2RlKikgX194Ll9NX2hlYWQuX01fbmV4dCktPl9NX2RhdGEsCisJCSAgICAgICAoKF9Ob2RlKikgX19uMS0+X01fbmV4dCktPl9NX2RhdGEpKQorCSAgICAgIF9fc2xpc3Rfc3BsaWNlX2FmdGVyKF9fbjEsICZfX3guX01faGVhZCwgX194Ll9NX2hlYWQuX01fbmV4dCk7CisJICAgIF9fbjEgPSBfX24xLT5fTV9uZXh0OworCSAgfQorCWlmIChfX3guX01faGVhZC5fTV9uZXh0KQorCSAgeworCSAgICBfX24xLT5fTV9uZXh0ID0gX194Ll9NX2hlYWQuX01fbmV4dDsKKwkgICAgX194Ll9NX2hlYWQuX01fbmV4dCA9IDA7CisJICB9CisgICAgICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgorICAgIHRlbXBsYXRlIDxjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPgorICAgICAgdm9pZAorICAgICAgc2xpc3Q8X1RwLCBfQWxsb2M+Ojpzb3J0KF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQorICAgICAgeworCWlmICh0aGlzLT5fTV9oZWFkLl9NX25leHQgJiYgdGhpcy0+X01faGVhZC5fTV9uZXh0LT5fTV9uZXh0KQorCSAgeworCSAgICBzbGlzdCBfX2NhcnJ5OworCSAgICBzbGlzdCBfX2NvdW50ZXJbNjRdOworCSAgICBpbnQgX19maWxsID0gMDsKKwkgICAgd2hpbGUgKCFlbXB0eSgpKQorCSAgICAgIHsKKwkJX19zbGlzdF9zcGxpY2VfYWZ0ZXIoJl9fY2FycnkuX01faGVhZCwKKwkJCQkgICAgICZ0aGlzLT5fTV9oZWFkLCB0aGlzLT5fTV9oZWFkLl9NX25leHQpOworCQlpbnQgX19pID0gMDsKKwkJd2hpbGUgKF9faSA8IF9fZmlsbCAmJiAhX19jb3VudGVyW19faV0uZW1wdHkoKSkKKwkJICB7CisJCSAgICBfX2NvdW50ZXJbX19pXS5tZXJnZShfX2NhcnJ5LCBfX2NvbXApOworCQkgICAgX19jYXJyeS5zd2FwKF9fY291bnRlcltfX2ldKTsKKwkJICAgICsrX19pOworCQkgIH0KKwkJX19jYXJyeS5zd2FwKF9fY291bnRlcltfX2ldKTsKKwkJaWYgKF9faSA9PSBfX2ZpbGwpCisJCSAgKytfX2ZpbGw7CisJICAgICAgfQorCisJICAgIGZvciAoaW50IF9faSA9IDE7IF9faSA8IF9fZmlsbDsgKytfX2kpCisJICAgICAgX19jb3VudGVyW19faV0ubWVyZ2UoX19jb3VudGVyW19faS0xXSwgX19jb21wKTsKKwkgICAgdGhpcy0+c3dhcChfX2NvdW50ZXJbX19maWxsLTFdKTsKKwkgIH0KKyAgICAgIH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8vIFNwZWNpYWxpemF0aW9uIG9mIGluc2VydF9pdGVyYXRvciBzbyB0aGF0IGluc2VydGlvbnMgd2lsbCBiZSBjb25zdGFudAorICAvLyB0aW1lIHJhdGhlciB0aGFuIGxpbmVhciB0aW1lLgorICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CisgICAgY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yPF9fZ251X2N4eDo6c2xpc3Q8X1RwLCBfQWxsb2M+ID4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiBfX2dudV9jeHg6OnNsaXN0PF9UcCwgX0FsbG9jPiBfQ29udGFpbmVyOworICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOworICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgaXRlcjsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWluZXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pKQorICAgICAgOiBjb250YWluZXIoJl9feCkKKyAgICAgIHsKKwlpZiAoX19pID09IF9feC5iZWdpbigpKQorCSAgaXRlciA9IF9feC5iZWZvcmVfYmVnaW4oKTsKKwllbHNlCisJICBpdGVyID0gX194LnByZXZpb3VzKF9faSk7CisgICAgICB9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKQorICAgICAgeworCWl0ZXIgPSBjb250YWluZXItPmluc2VydF9hZnRlcihpdGVyLCBfX3ZhbHVlKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yKigpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorCisgICAgICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCisgICAgICBvcGVyYXRvcisrKCkKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvc3NvX3N0cmluZ19iYXNlLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9zc29fc3RyaW5nX2Jhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDUwMGNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvc3NvX3N0cmluZ19iYXNlLmgKQEAgLTAsMCArMSw1NzIgQEAKKy8vIFNob3J0LXN0cmluZy1vcHRpbWl6ZWQgdmVyc2F0aWxlIHN0cmluZyBiYXNlIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZXh0L3Nzb19zdHJpbmdfYmFzZS5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKyNpZm5kZWYgX1NTT19TVFJJTkdfQkFTRV9ICisjZGVmaW5lIF9TU09fU1RSSU5HX0JBU0VfSCAxCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgY2xhc3MgX19zc29fc3RyaW5nX2Jhc2UKKyAgICA6IHByb3RlY3RlZCBfX3ZzdHJpbmdfdXRpbGl0eTxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfVHJhaXRzCQkJCQkgICAgdHJhaXRzX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZQkJICAgIHZhbHVlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgX192c3RyaW5nX3V0aWxpdHk8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ICAgIF9VdGlsX0Jhc2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9VdGlsX0Jhc2U6Ol9DaGFyVF9hbGxvY190eXBlICAgICAgICBfQ2hhclRfYWxsb2NfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0NoYXJUX2FsbG9jX3R5cGU6OnNpemVfdHlwZQkgICAgc2l6ZV90eXBlOworICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgIC8vIERhdGEgTWVtYmVyczoKKyAgICAgIHR5cGVuYW1lIF9VdGlsX0Jhc2U6OnRlbXBsYXRlIF9BbGxvY19oaWRlcjxfQ2hhclRfYWxsb2NfdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2RhdGFwbHVzOworICAgICAgc2l6ZV90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fc3RyaW5nX2xlbmd0aDsKKworICAgICAgZW51bSB7IF9TX2xvY2FsX2NhcGFjaXR5ID0gMTUgfTsKKyAgICAgIAorICAgICAgdW5pb24KKyAgICAgIHsKKwlfQ2hhclQgICAgICAgICAgIF9NX2xvY2FsX2RhdGFbX1NfbG9jYWxfY2FwYWNpdHkgKyAxXTsKKwlzaXplX3R5cGUgICAgICAgIF9NX2FsbG9jYXRlZF9jYXBhY2l0eTsKKyAgICAgIH07CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RhdGEoX0NoYXJUKiBfX3ApCisgICAgICB7IF9NX2RhdGFwbHVzLl9NX3AgPSBfX3A7IH0KKworICAgICAgdm9pZAorICAgICAgX01fbGVuZ3RoKHNpemVfdHlwZSBfX2xlbmd0aCkKKyAgICAgIHsgX01fc3RyaW5nX2xlbmd0aCA9IF9fbGVuZ3RoOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2NhcGFjaXR5KHNpemVfdHlwZSBfX2NhcGFjaXR5KQorICAgICAgeyBfTV9hbGxvY2F0ZWRfY2FwYWNpdHkgPSBfX2NhcGFjaXR5OyB9CisKKyAgICAgIGJvb2wKKyAgICAgIF9NX2lzX2xvY2FsKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2RhdGEoKSA9PSBfTV9sb2NhbF9kYXRhOyB9CisKKyAgICAgIC8vIENyZWF0ZSAmIERlc3Ryb3kKKyAgICAgIF9DaGFyVCoKKyAgICAgIF9NX2NyZWF0ZShzaXplX3R5cGUmLCBzaXplX3R5cGUpOworICAgICAgCisgICAgICB2b2lkCisgICAgICBfTV9kaXNwb3NlKCkKKyAgICAgIHsKKwlpZiAoIV9NX2lzX2xvY2FsKCkpCisJICBfTV9kZXN0cm95KF9NX2FsbG9jYXRlZF9jYXBhY2l0eSk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2Rlc3Ryb3koc2l6ZV90eXBlIF9fc2l6ZSkgdGhyb3coKQorICAgICAgeyBfTV9nZXRfYWxsb2NhdG9yKCkuZGVhbGxvY2F0ZShfTV9kYXRhKCksIF9fc2l6ZSArIDEpOyB9CisKKyAgICAgIC8vIF9NX2NvbnN0cnVjdF9hdXggaXMgdXNlZCB0byBpbXBsZW1lbnQgdGhlIDIxLjMuMSBwYXJhIDE1IHdoaWNoCisgICAgICAvLyByZXF1aXJlcyBzcGVjaWFsIGJlaGF2aW91ciBpZiBfSW5JdGVyYXRvciBpcyBhbiBpbnRlZ3JhbCB0eXBlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9jb25zdHJ1Y3RfYXV4KF9Jbkl0ZXJhdG9yIF9fYmVnLCBfSW5JdGVyYXRvciBfX2VuZCwgCisJCQkgc3RkOjpfX2ZhbHNlX3R5cGUpCisJeworICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Jbkl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX1RhZzsKKyAgICAgICAgICBfTV9jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfVGFnKCkpOworCX0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNDM4LiBBbWJpZ3VpdHkgaW4gdGhlICJkbyB0aGUgcmlnaHQgdGhpbmciIGNsYXVzZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVnZXI+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01fY29uc3RydWN0X2F1eChfSW50ZWdlciBfX2JlZywgX0ludGVnZXIgX19lbmQsIHN0ZDo6X190cnVlX3R5cGUpCisJeyBfTV9jb25zdHJ1Y3RfYXV4XzIoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2JlZyksIF9fZW5kKTsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9jb25zdHJ1Y3RfYXV4XzIoc2l6ZV90eXBlIF9fcmVxLCBfQ2hhclQgX19jKQorICAgICAgeyBfTV9jb25zdHJ1Y3QoX19yZXEsIF9fYyk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01fY29uc3RydWN0KF9Jbkl0ZXJhdG9yIF9fYmVnLCBfSW5JdGVyYXRvciBfX2VuZCkKKwl7CisJICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6X19pc19pbnRlZ2VyPF9Jbkl0ZXJhdG9yPjo6X190eXBlIF9JbnRlZ3JhbDsKKwkgIF9NX2NvbnN0cnVjdF9hdXgoX19iZWcsIF9fZW5kLCBfSW50ZWdyYWwoKSk7CisgICAgICAgIH0KKworICAgICAgLy8gRm9yIElucHV0IEl0ZXJhdG9ycywgdXNlZCBpbiBpc3RyZWFtYnVmX2l0ZXJhdG9ycywgZXRjLgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01fY29uc3RydWN0KF9Jbkl0ZXJhdG9yIF9fYmVnLCBfSW5JdGVyYXRvciBfX2VuZCwKKwkJICAgICBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZyk7CisgICAgICAKKyAgICAgIC8vIEZvciBmb3J3YXJkX2l0ZXJhdG9ycyB1cCB0byByYW5kb21fYWNjZXNzX2l0ZXJhdG9ycywgdXNlZCBmb3IKKyAgICAgIC8vIHN0cmluZzo6aXRlcmF0b3IsIF9DaGFyVCosIGV0Yy4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gd2RJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9jb25zdHJ1Y3QoX0Z3ZEl0ZXJhdG9yIF9fYmVnLCBfRndkSXRlcmF0b3IgX19lbmQsCisJCSAgICAgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2NvbnN0cnVjdChzaXplX3R5cGUgX19yZXEsIF9DaGFyVCBfX2MpOworCisgICAgcHVibGljOgorICAgICAgc2l6ZV90eXBlCisgICAgICBfTV9tYXhfc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiAoX01fZ2V0X2FsbG9jYXRvcigpLm1heF9zaXplKCkgLSAxKSAvIDI7IH0KKworICAgICAgX0NoYXJUKgorICAgICAgX01fZGF0YSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9kYXRhcGx1cy5fTV9wOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgX01fbGVuZ3RoKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3N0cmluZ19sZW5ndGg7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBfTV9jYXBhY2l0eSgpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIF9NX2lzX2xvY2FsKCkgPyBzaXplX3R5cGUoX1NfbG9jYWxfY2FwYWNpdHkpCisJICAgICAgICAgICAgICAgICAgICAgOiBfTV9hbGxvY2F0ZWRfY2FwYWNpdHk7IAorICAgICAgfQorCisgICAgICBib29sCisgICAgICBfTV9pc19zaGFyZWQoKSBjb25zdAorICAgICAgeyByZXR1cm4gZmFsc2U7IH0KKworICAgICAgdm9pZAorICAgICAgX01fc2V0X2xlYWtlZCgpIHsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9sZWFrKCkgeyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3NldF9sZW5ndGgoc2l6ZV90eXBlIF9fbikKKyAgICAgIHsKKwlfTV9sZW5ndGgoX19uKTsKKwl0cmFpdHNfdHlwZTo6YXNzaWduKF9NX2RhdGEoKVtfX25dLCBfQ2hhclQoKSk7CisgICAgICB9CisKKyAgICAgIF9fc3NvX3N0cmluZ19iYXNlKCkKKyAgICAgIDogX01fZGF0YXBsdXMoX01fbG9jYWxfZGF0YSkKKyAgICAgIHsgX01fc2V0X2xlbmd0aCgwKTsgfQorCisgICAgICBfX3Nzb19zdHJpbmdfYmFzZShjb25zdCBfQWxsb2MmIF9fYSk7CisKKyAgICAgIF9fc3NvX3N0cmluZ19iYXNlKGNvbnN0IF9fc3NvX3N0cmluZ19iYXNlJiBfX3Jjcyk7CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgX19zc29fc3RyaW5nX2Jhc2UoX19zc29fc3RyaW5nX2Jhc2UmJiBfX3Jjcyk7CisjZW5kaWYKKworICAgICAgX19zc29fc3RyaW5nX2Jhc2Uoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgX19zc29fc3RyaW5nX2Jhc2UoX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kLAorCQkJICBjb25zdCBfQWxsb2MmIF9fYSk7CisKKyAgICAgIH5fX3Nzb19zdHJpbmdfYmFzZSgpCisgICAgICB7IF9NX2Rpc3Bvc2UoKTsgfQorCisgICAgICBfQ2hhclRfYWxsb2NfdHlwZSYKKyAgICAgIF9NX2dldF9hbGxvY2F0b3IoKQorICAgICAgeyByZXR1cm4gX01fZGF0YXBsdXM7IH0KKworICAgICAgY29uc3QgX0NoYXJUX2FsbG9jX3R5cGUmCisgICAgICBfTV9nZXRfYWxsb2NhdG9yKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2RhdGFwbHVzOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3N3YXAoX19zc29fc3RyaW5nX2Jhc2UmIF9fcmNzKTsKKworICAgICAgdm9pZAorICAgICAgX01fYXNzaWduKGNvbnN0IF9fc3NvX3N0cmluZ19iYXNlJiBfX3Jjcyk7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3Jlc2VydmUoc2l6ZV90eXBlIF9fcmVzKTsKKworICAgICAgdm9pZAorICAgICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgY29uc3QgX0NoYXJUKiBfX3MsCisJCXNpemVfdHlwZSBfX2xlbjIpOworCisgICAgICB2b2lkCisgICAgICBfTV9lcmFzZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pOworCisgICAgICB2b2lkCisgICAgICBfTV9jbGVhcigpCisgICAgICB7IF9NX3NldF9sZW5ndGgoMCk7IH0KKworICAgICAgYm9vbAorICAgICAgX01fY29tcGFyZShjb25zdCBfX3Nzb19zdHJpbmdfYmFzZSYpIGNvbnN0CisgICAgICB7IHJldHVybiBmYWxzZTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIF9fc3NvX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgX01fc3dhcChfX3Nzb19zdHJpbmdfYmFzZSYgX19yY3MpCisgICAgeworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNDMxLiBTd2FwcGluZyBjb250YWluZXJzIHdpdGggdW5lcXVhbCBhbGxvY2F0b3JzLgorICAgICAgc3RkOjpfX2FsbG9jX3N3YXA8X0NoYXJUX2FsbG9jX3R5cGU+OjpfU19kb19pdChfTV9nZXRfYWxsb2NhdG9yKCksCisJCQkJCQkgICAgIF9fcmNzLl9NX2dldF9hbGxvY2F0b3IoKSk7CisKKyAgICAgIGlmIChfTV9pc19sb2NhbCgpKQorCWlmIChfX3Jjcy5fTV9pc19sb2NhbCgpKQorCSAgeworCSAgICBpZiAoX01fbGVuZ3RoKCkgJiYgX19yY3MuX01fbGVuZ3RoKCkpCisJICAgICAgeworCQlfQ2hhclQgX190bXBfZGF0YVtfU19sb2NhbF9jYXBhY2l0eSArIDFdOworCQl0cmFpdHNfdHlwZTo6Y29weShfX3RtcF9kYXRhLCBfX3Jjcy5fTV9sb2NhbF9kYXRhLAorCQkJCSAgX1NfbG9jYWxfY2FwYWNpdHkgKyAxKTsKKwkJdHJhaXRzX3R5cGU6OmNvcHkoX19yY3MuX01fbG9jYWxfZGF0YSwgX01fbG9jYWxfZGF0YSwKKwkJCQkgIF9TX2xvY2FsX2NhcGFjaXR5ICsgMSk7CisJCXRyYWl0c190eXBlOjpjb3B5KF9NX2xvY2FsX2RhdGEsIF9fdG1wX2RhdGEsCisJCQkJICBfU19sb2NhbF9jYXBhY2l0eSArIDEpOworCSAgICAgIH0KKwkgICAgZWxzZSBpZiAoX19yY3MuX01fbGVuZ3RoKCkpCisJICAgICAgeworCQl0cmFpdHNfdHlwZTo6Y29weShfTV9sb2NhbF9kYXRhLCBfX3Jjcy5fTV9sb2NhbF9kYXRhLAorCQkJCSAgX1NfbG9jYWxfY2FwYWNpdHkgKyAxKTsKKwkJX01fbGVuZ3RoKF9fcmNzLl9NX2xlbmd0aCgpKTsKKwkJX19yY3MuX01fc2V0X2xlbmd0aCgwKTsKKwkJcmV0dXJuOworCSAgICAgIH0KKwkgICAgZWxzZSBpZiAoX01fbGVuZ3RoKCkpCisJICAgICAgeworCQl0cmFpdHNfdHlwZTo6Y29weShfX3Jjcy5fTV9sb2NhbF9kYXRhLCBfTV9sb2NhbF9kYXRhLAorCQkJCSAgX1NfbG9jYWxfY2FwYWNpdHkgKyAxKTsKKwkJX19yY3MuX01fbGVuZ3RoKF9NX2xlbmd0aCgpKTsKKwkJX01fc2V0X2xlbmd0aCgwKTsKKwkJcmV0dXJuOworCSAgICAgIH0KKwkgIH0KKwllbHNlCisJICB7CisJICAgIGNvbnN0IHNpemVfdHlwZSBfX3RtcF9jYXBhY2l0eSA9IF9fcmNzLl9NX2FsbG9jYXRlZF9jYXBhY2l0eTsKKwkgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yY3MuX01fbG9jYWxfZGF0YSwgX01fbG9jYWxfZGF0YSwKKwkJCSAgICAgIF9TX2xvY2FsX2NhcGFjaXR5ICsgMSk7CisJICAgIF9NX2RhdGEoX19yY3MuX01fZGF0YSgpKTsKKwkgICAgX19yY3MuX01fZGF0YShfX3Jjcy5fTV9sb2NhbF9kYXRhKTsKKwkgICAgX01fY2FwYWNpdHkoX190bXBfY2FwYWNpdHkpOworCSAgfQorICAgICAgZWxzZQorCXsKKwkgIGNvbnN0IHNpemVfdHlwZSBfX3RtcF9jYXBhY2l0eSA9IF9NX2FsbG9jYXRlZF9jYXBhY2l0eTsKKwkgIGlmIChfX3Jjcy5fTV9pc19sb2NhbCgpKQorCSAgICB7CisJICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fbG9jYWxfZGF0YSwgX19yY3MuX01fbG9jYWxfZGF0YSwKKwkJCQlfU19sb2NhbF9jYXBhY2l0eSArIDEpOworCSAgICAgIF9fcmNzLl9NX2RhdGEoX01fZGF0YSgpKTsKKwkgICAgICBfTV9kYXRhKF9NX2xvY2FsX2RhdGEpOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBfQ2hhclQqIF9fdG1wX3B0ciA9IF9NX2RhdGEoKTsKKwkgICAgICBfTV9kYXRhKF9fcmNzLl9NX2RhdGEoKSk7CisJICAgICAgX19yY3MuX01fZGF0YShfX3RtcF9wdHIpOworCSAgICAgIF9NX2NhcGFjaXR5KF9fcmNzLl9NX2FsbG9jYXRlZF9jYXBhY2l0eSk7CisJICAgIH0KKwkgIF9fcmNzLl9NX2NhcGFjaXR5KF9fdG1wX2NhcGFjaXR5KTsKKwl9CisKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3RtcF9sZW5ndGggPSBfTV9sZW5ndGgoKTsKKyAgICAgIF9NX2xlbmd0aChfX3Jjcy5fTV9sZW5ndGgoKSk7CisgICAgICBfX3Jjcy5fTV9sZW5ndGgoX190bXBfbGVuZ3RoKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgX0NoYXJUKgorICAgIF9fc3NvX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgX01fY3JlYXRlKHNpemVfdHlwZSYgX19jYXBhY2l0eSwgc2l6ZV90eXBlIF9fb2xkX2NhcGFjaXR5KQorICAgIHsKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDgzLiAgU3RyaW5nOjpucG9zIHZzLiBzdHJpbmc6Om1heF9zaXplKCkKKyAgICAgIGlmIChfX2NhcGFjaXR5ID4gX01fbWF4X3NpemUoKSkKKwlzdGQ6Ol9fdGhyb3dfbGVuZ3RoX2Vycm9yKF9fTigiX19zc29fc3RyaW5nX2Jhc2U6Ol9NX2NyZWF0ZSIpKTsKKworICAgICAgLy8gVGhlIGJlbG93IGltcGxlbWVudHMgYW4gZXhwb25lbnRpYWwgZ3Jvd3RoIHBvbGljeSwgbmVjZXNzYXJ5IHRvCisgICAgICAvLyBtZWV0IGFtb3J0aXplZCBsaW5lYXIgdGltZSByZXF1aXJlbWVudHMgb2YgdGhlIGxpYnJhcnk6IHNlZQorICAgICAgLy8gaHR0cDovL2djYy5nbnUub3JnL21sL2xpYnN0ZGMrKy8yMDAxLTA3L21zZzAwMDg1Lmh0bWwuCisgICAgICBpZiAoX19jYXBhY2l0eSA+IF9fb2xkX2NhcGFjaXR5ICYmIF9fY2FwYWNpdHkgPCAyICogX19vbGRfY2FwYWNpdHkpCisJeworCSAgX19jYXBhY2l0eSA9IDIgKiBfX29sZF9jYXBhY2l0eTsKKwkgIC8vIE5ldmVyIGFsbG9jYXRlIGEgc3RyaW5nIGJpZ2dlciB0aGFuIG1heF9zaXplLgorCSAgaWYgKF9fY2FwYWNpdHkgPiBfTV9tYXhfc2l6ZSgpKQorCSAgICBfX2NhcGFjaXR5ID0gX01fbWF4X3NpemUoKTsKKwl9CisKKyAgICAgIC8vIE5COiBOZWVkIGFuIGFycmF5IG9mIGNoYXJfdHlwZVtfX2NhcGFjaXR5XSwgcGx1cyBhIHRlcm1pbmF0aW5nCisgICAgICAvLyBudWxsIGNoYXJfdHlwZSgpIGVsZW1lbnQuCisgICAgICByZXR1cm4gX01fZ2V0X2FsbG9jYXRvcigpLmFsbG9jYXRlKF9fY2FwYWNpdHkgKyAxKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgX19zc29fc3RyaW5nX2Jhc2U8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBfX3Nzb19zdHJpbmdfYmFzZShjb25zdCBfQWxsb2MmIF9fYSkKKyAgICA6IF9NX2RhdGFwbHVzKF9fYSwgX01fbG9jYWxfZGF0YSkKKyAgICB7IF9NX3NldF9sZW5ndGgoMCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBfX3Nzb19zdHJpbmdfYmFzZTxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIF9fc3NvX3N0cmluZ19iYXNlKGNvbnN0IF9fc3NvX3N0cmluZ19iYXNlJiBfX3JjcykKKyAgICA6IF9NX2RhdGFwbHVzKF9fcmNzLl9NX2dldF9hbGxvY2F0b3IoKSwgX01fbG9jYWxfZGF0YSkKKyAgICB7IF9NX2NvbnN0cnVjdChfX3Jjcy5fTV9kYXRhKCksIF9fcmNzLl9NX2RhdGEoKSArIF9fcmNzLl9NX2xlbmd0aCgpKTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgX19zc29fc3RyaW5nX2Jhc2U8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBfX3Nzb19zdHJpbmdfYmFzZShfX3Nzb19zdHJpbmdfYmFzZSYmIF9fcmNzKQorICAgIDogX01fZGF0YXBsdXMoX19yY3MuX01fZ2V0X2FsbG9jYXRvcigpLCBfTV9sb2NhbF9kYXRhKQorICAgIHsKKyAgICAgIGlmIChfX3Jjcy5fTV9pc19sb2NhbCgpKQorCXsKKwkgIGlmIChfX3Jjcy5fTV9sZW5ndGgoKSkKKwkgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fbG9jYWxfZGF0YSwgX19yY3MuX01fbG9jYWxfZGF0YSwKKwkJCSAgICAgIF9TX2xvY2FsX2NhcGFjaXR5ICsgMSk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIF9NX2RhdGEoX19yY3MuX01fZGF0YSgpKTsKKwkgIF9NX2NhcGFjaXR5KF9fcmNzLl9NX2FsbG9jYXRlZF9jYXBhY2l0eSk7CisJfQorCisgICAgICBfTV9sZW5ndGgoX19yY3MuX01fbGVuZ3RoKCkpOworICAgICAgX19yY3MuX01fbGVuZ3RoKDApOworICAgICAgX19yY3MuX01fZGF0YShfX3Jjcy5fTV9sb2NhbF9kYXRhKTsKKyAgICB9CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBfX3Nzb19zdHJpbmdfYmFzZTxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIF9fc3NvX3N0cmluZ19iYXNlKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKQorICAgIDogX01fZGF0YXBsdXMoX19hLCBfTV9sb2NhbF9kYXRhKQorICAgIHsgX01fY29uc3RydWN0KF9fbiwgX19jKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgIF9fc3NvX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgX19zc29fc3RyaW5nX2Jhc2UoX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kLAorCQkgICAgICBjb25zdCBfQWxsb2MmIF9fYSkKKyAgICA6IF9NX2RhdGFwbHVzKF9fYSwgX01fbG9jYWxfZGF0YSkKKyAgICB7IF9NX2NvbnN0cnVjdChfX2JlZywgX19lbmQpOyB9CisKKyAgLy8gTkI6IFRoaXMgaXMgdGhlIHNwZWNpYWwgY2FzZSBmb3IgSW5wdXQgSXRlcmF0b3JzLCB1c2VkIGluCisgIC8vIGlzdHJlYW1idWZfaXRlcmF0b3JzLCBldGMuCisgIC8vIElucHV0IEl0ZXJhdG9ycyBoYXZlIGEgY29zdCBzdHJ1Y3R1cmUgdmVyeSBkaWZmZXJlbnQgZnJvbQorICAvLyBwb2ludGVycywgY2FsbGluZyBmb3IgYSBkaWZmZXJlbnQgY29kaW5nIHN0eWxlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIF9fc3NvX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgICBfTV9jb25zdHJ1Y3QoX0luSXRlcmF0b3IgX19iZWcsIF9Jbkl0ZXJhdG9yIF9fZW5kLAorCQkgICBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZykKKyAgICAgIHsKKwlzaXplX3R5cGUgX19sZW4gPSAwOworCXNpemVfdHlwZSBfX2NhcGFjaXR5ID0gc2l6ZV90eXBlKF9TX2xvY2FsX2NhcGFjaXR5KTsKKworCXdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2xlbiA8IF9fY2FwYWNpdHkpCisJICB7CisJICAgIF9NX2RhdGEoKVtfX2xlbisrXSA9ICpfX2JlZzsKKwkgICAgKytfX2JlZzsKKwkgIH0KKwkKKwlfX3RyeQorCSAgeworCSAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQpCisJICAgICAgeworCQlpZiAoX19sZW4gPT0gX19jYXBhY2l0eSkKKwkJICB7CisJCSAgICAvLyBBbGxvY2F0ZSBtb3JlIHNwYWNlLgorCQkgICAgX19jYXBhY2l0eSA9IF9fbGVuICsgMTsKKwkJICAgIF9DaGFyVCogX19hbm90aGVyID0gX01fY3JlYXRlKF9fY2FwYWNpdHksIF9fbGVuKTsKKwkJICAgIF9TX2NvcHkoX19hbm90aGVyLCBfTV9kYXRhKCksIF9fbGVuKTsKKwkJICAgIF9NX2Rpc3Bvc2UoKTsKKwkJICAgIF9NX2RhdGEoX19hbm90aGVyKTsKKwkJICAgIF9NX2NhcGFjaXR5KF9fY2FwYWNpdHkpOworCQkgIH0KKwkJX01fZGF0YSgpW19fbGVuKytdID0gKl9fYmVnOworCQkrK19fYmVnOworCSAgICAgIH0KKwkgIH0KKwlfX2NhdGNoKC4uLikKKwkgIHsKKwkgICAgX01fZGlzcG9zZSgpOworCSAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgIH0KKworCV9NX3NldF9sZW5ndGgoX19sZW4pOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgX19zc29fc3RyaW5nX2Jhc2U8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICAgIF9NX2NvbnN0cnVjdChfSW5JdGVyYXRvciBfX2JlZywgX0luSXRlcmF0b3IgX19lbmQsCisJCSAgIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcpCisgICAgICB7CisJLy8gTkI6IE5vdCByZXF1aXJlZCwgYnV0IGNvbnNpZGVyZWQgYmVzdCBwcmFjdGljZS4KKwlpZiAoX19pc19udWxsX3BvaW50ZXIoX19iZWcpICYmIF9fYmVnICE9IF9fZW5kKQorCSAgc3RkOjpfX3Rocm93X2xvZ2ljX2Vycm9yKF9fTigiX19zc29fc3RyaW5nX2Jhc2U6OiIKKwkJCQkgICAgICAgIl9NX2NvbnN0cnVjdCBOVUxMIG5vdCB2YWxpZCIpKTsKKworCXNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KHN0ZDo6ZGlzdGFuY2UoX19iZWcsIF9fZW5kKSk7CisKKwlpZiAoX19kbmV3ID4gc2l6ZV90eXBlKF9TX2xvY2FsX2NhcGFjaXR5KSkKKwkgIHsKKwkgICAgX01fZGF0YShfTV9jcmVhdGUoX19kbmV3LCBzaXplX3R5cGUoMCkpKTsKKwkgICAgX01fY2FwYWNpdHkoX19kbmV3KTsKKwkgIH0KKworCS8vIENoZWNrIGZvciBvdXRfb2ZfcmFuZ2UgYW5kIGxlbmd0aF9lcnJvciBleGNlcHRpb25zLgorCV9fdHJ5CisJICB7IF9TX2NvcHlfY2hhcnMoX01fZGF0YSgpLCBfX2JlZywgX19lbmQpOyB9CisJX19jYXRjaCguLi4pCisJICB7CisJICAgIF9NX2Rpc3Bvc2UoKTsKKwkgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICB9CisKKwlfTV9zZXRfbGVuZ3RoKF9fZG5ldyk7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIF9fc3NvX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgX01fY29uc3RydWN0KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCisgICAgeworICAgICAgaWYgKF9fbiA+IHNpemVfdHlwZShfU19sb2NhbF9jYXBhY2l0eSkpCisJeworCSAgX01fZGF0YShfTV9jcmVhdGUoX19uLCBzaXplX3R5cGUoMCkpKTsKKwkgIF9NX2NhcGFjaXR5KF9fbik7CisJfQorCisgICAgICBpZiAoX19uKQorCV9TX2Fzc2lnbihfTV9kYXRhKCksIF9fbiwgX19jKTsKKworICAgICAgX01fc2V0X2xlbmd0aChfX24pOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgX19zc29fc3RyaW5nX2Jhc2U8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBfTV9hc3NpZ24oY29uc3QgX19zc29fc3RyaW5nX2Jhc2UmIF9fcmNzKQorICAgIHsKKyAgICAgIGlmICh0aGlzICE9ICZfX3JjcykKKwl7CisJICBjb25zdCBzaXplX3R5cGUgX19yc2l6ZSA9IF9fcmNzLl9NX2xlbmd0aCgpOworCSAgY29uc3Qgc2l6ZV90eXBlIF9fY2FwYWNpdHkgPSBfTV9jYXBhY2l0eSgpOworCisJICBpZiAoX19yc2l6ZSA+IF9fY2FwYWNpdHkpCisJICAgIHsKKwkgICAgICBzaXplX3R5cGUgX19uZXdfY2FwYWNpdHkgPSBfX3JzaXplOworCSAgICAgIF9DaGFyVCogX190bXAgPSBfTV9jcmVhdGUoX19uZXdfY2FwYWNpdHksIF9fY2FwYWNpdHkpOworCSAgICAgIF9NX2Rpc3Bvc2UoKTsKKwkgICAgICBfTV9kYXRhKF9fdG1wKTsKKwkgICAgICBfTV9jYXBhY2l0eShfX25ld19jYXBhY2l0eSk7CisJICAgIH0KKworCSAgaWYgKF9fcnNpemUpCisJICAgIF9TX2NvcHkoX01fZGF0YSgpLCBfX3Jjcy5fTV9kYXRhKCksIF9fcnNpemUpOworCisJICBfTV9zZXRfbGVuZ3RoKF9fcnNpemUpOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIF9fc3NvX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgX01fcmVzZXJ2ZShzaXplX3R5cGUgX19yZXMpCisgICAgeworICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IHNocmluayBiZWxvdyB0aGUgY3VycmVudCBzaXplLgorICAgICAgaWYgKF9fcmVzIDwgX01fbGVuZ3RoKCkpCisJX19yZXMgPSBfTV9sZW5ndGgoKTsKKworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fY2FwYWNpdHkgPSBfTV9jYXBhY2l0eSgpOworICAgICAgaWYgKF9fcmVzICE9IF9fY2FwYWNpdHkpCisJeworCSAgaWYgKF9fcmVzID4gX19jYXBhY2l0eQorCSAgICAgIHx8IF9fcmVzID4gc2l6ZV90eXBlKF9TX2xvY2FsX2NhcGFjaXR5KSkKKwkgICAgeworCSAgICAgIF9DaGFyVCogX190bXAgPSBfTV9jcmVhdGUoX19yZXMsIF9fY2FwYWNpdHkpOworCSAgICAgIF9TX2NvcHkoX190bXAsIF9NX2RhdGEoKSwgX01fbGVuZ3RoKCkgKyAxKTsKKwkgICAgICBfTV9kaXNwb3NlKCk7CisJICAgICAgX01fZGF0YShfX3RtcCk7CisJICAgICAgX01fY2FwYWNpdHkoX19yZXMpOworCSAgICB9CisJICBlbHNlIGlmICghX01faXNfbG9jYWwoKSkKKwkgICAgeworCSAgICAgIF9TX2NvcHkoX01fbG9jYWxfZGF0YSwgX01fZGF0YSgpLCBfTV9sZW5ndGgoKSArIDEpOworCSAgICAgIF9NX2Rlc3Ryb3koX19jYXBhY2l0eSk7CisJICAgICAgX01fZGF0YShfTV9sb2NhbF9kYXRhKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIF9fc3NvX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgY29uc3QgX0NoYXJUKiBfX3MsCisJICAgICAgc2l6ZV90eXBlIF9fbGVuMikKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19ob3dfbXVjaCA9IF9NX2xlbmd0aCgpIC0gX19wb3MgLSBfX2xlbjE7CisgICAgICAKKyAgICAgIHNpemVfdHlwZSBfX25ld19jYXBhY2l0eSA9IF9NX2xlbmd0aCgpICsgX19sZW4yIC0gX19sZW4xOworICAgICAgX0NoYXJUKiBfX3IgPSBfTV9jcmVhdGUoX19uZXdfY2FwYWNpdHksIF9NX2NhcGFjaXR5KCkpOworCisgICAgICBpZiAoX19wb3MpCisJX1NfY29weShfX3IsIF9NX2RhdGEoKSwgX19wb3MpOworICAgICAgaWYgKF9fcyAmJiBfX2xlbjIpCisJX1NfY29weShfX3IgKyBfX3BvcywgX19zLCBfX2xlbjIpOworICAgICAgaWYgKF9faG93X211Y2gpCisJX1NfY29weShfX3IgKyBfX3BvcyArIF9fbGVuMiwKKwkJX01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjEsIF9faG93X211Y2gpOworICAgICAgCisgICAgICBfTV9kaXNwb3NlKCk7CisgICAgICBfTV9kYXRhKF9fcik7CisgICAgICBfTV9jYXBhY2l0eShfX25ld19jYXBhY2l0eSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBfX3Nzb19zdHJpbmdfYmFzZTxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIF9NX2VyYXNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19ob3dfbXVjaCA9IF9NX2xlbmd0aCgpIC0gX19wb3MgLSBfX247CisKKyAgICAgIGlmIChfX2hvd19tdWNoICYmIF9fbikKKwlfU19tb3ZlKF9NX2RhdGEoKSArIF9fcG9zLCBfTV9kYXRhKCkgKyBfX3BvcyArIF9fbiwKKwkJX19ob3dfbXVjaCk7CisKKyAgICAgIF9NX3NldF9sZW5ndGgoX01fbGVuZ3RoKCkgLSBfX24pOworICAgIH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYgLyogX1NTT19TVFJJTkdfQkFTRV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9zdGRpb19maWxlYnVmLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9zdGRpb19maWxlYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDljM2MyNgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3N0ZGlvX2ZpbGVidWYuaApAQCAtMCwwICsxLDE1OSBAQAorLy8gRmlsZSBkZXNjcmlwdG9yIGxheWVyIGZvciBmaWxlYnVmIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGV4dC9zdGRpb19maWxlYnVmLmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9TVERJT19GSUxFQlVGX0gKKyNkZWZpbmUgX1NURElPX0ZJTEVCVUZfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGZzdHJlYW0+CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisKKyAgLyoqCisgICAqICBAYnJpZWYgUHJvdmlkZXMgYSBsYXllciBvZiBjb21wYXRpYmlsaXR5IGZvciBDL1BPU0lYLgorICAgKiAgQGluZ3JvdXAgaW8KKyAgICoKKyAgICogIFRoaXMgR05VIGV4dGVuc2lvbiBwcm92aWRlcyBleHRlbnNpb25zIGZvciB3b3JraW5nIHdpdGggc3RhbmRhcmQgQworICAgKiAgRklMRSoncyBhbmQgUE9TSVggZmlsZSBkZXNjcmlwdG9ycy4gIEl0IG11c3QgYmUgaW5zdGFudGlhdGVkIGJ5IHRoZQorICAgKiAgdXNlciB3aXRoIHRoZSB0eXBlIG9mIGNoYXJhY3RlciB1c2VkIGluIHRoZSBmaWxlIHN0cmVhbSwgZS5nLiwKKyAgICogIHN0ZGlvX2ZpbGVidWY8Y2hhcj4uCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IHN0ZDo6Y2hhcl90cmFpdHM8X0NoYXJUPiA+CisgICAgY2xhc3Mgc3RkaW9fZmlsZWJ1ZiA6IHB1YmxpYyBzdGQ6OmJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlczoKKyAgICAgIHR5cGVkZWYgX0NoYXJUCQkJCSAgICAgICAgY2hhcl90eXBlOworICAgICAgdHlwZWRlZiBfVHJhaXRzCQkJCSAgICAgICAgdHJhaXRzX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZQkJaW50X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZQkJcG9zX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZQkJb2ZmX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6c2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdDsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKgorICAgICAgICogZGVmZXJyZWQgaW5pdGlhbGl6YXRpb24KKyAgICAgICovCisgICAgICBzdGRpb19maWxlYnVmKCkgOiBzdGQ6OmJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPigpIHt9CisKKyAgICAgIC8qKgorICAgICAgICogIEBwYXJhbSAgZmQgIEFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLgorICAgICAgICogIEBwYXJhbSAgbW9kZSAgU2FtZSBtZWFuaW5nIGFzIGluIGEgc3RhbmRhcmQgZmlsZWJ1Zi4KKyAgICAgICAqICBAcGFyYW0gIHNpemUgIE9wdGltYWwgb3IgcHJlZmVycmVkIHNpemUgb2YgaW50ZXJuYWwgYnVmZmVyLCBpbiBjaGFycy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBjb25zdHJ1Y3RvciBhc3NvY2lhdGVzIGEgZmlsZSBzdHJlYW0gYnVmZmVyIHdpdGggYW4gb3BlbgorICAgICAgICogIFBPU0lYIGZpbGUgZGVzY3JpcHRvci4gVGhlIGZpbGUgZGVzY3JpcHRvciB3aWxsIGJlIGF1dG9tYXRpY2FsbHkKKyAgICAgICAqICBjbG9zZWQgd2hlbiB0aGUgc3RkaW9fZmlsZWJ1ZiBpcyBjbG9zZWQvZGVzdHJveWVkLgorICAgICAgKi8KKyAgICAgIHN0ZGlvX2ZpbGVidWYoaW50IF9fZmQsIHN0ZDo6aW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwKKwkJICAgIHNpemVfdCBfX3NpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KEJVRlNJWikpOworCisgICAgICAvKioKKyAgICAgICAqICBAcGFyYW0gIGYgIEFuIG9wZW4gQGMgRklMRSouCisgICAgICAgKiAgQHBhcmFtICBtb2RlICBTYW1lIG1lYW5pbmcgYXMgaW4gYSBzdGFuZGFyZCBmaWxlYnVmLgorICAgICAgICogIEBwYXJhbSAgc2l6ZSAgT3B0aW1hbCBvciBwcmVmZXJyZWQgc2l6ZSBvZiBpbnRlcm5hbCBidWZmZXIsIGluIGNoYXJzLgorICAgICAgICogICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gc3lzdGVtJ3MgQGMgQlVGU0laLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGNvbnN0cnVjdG9yIGFzc29jaWF0ZXMgYSBmaWxlIHN0cmVhbSBidWZmZXIgd2l0aCBhbiBvcGVuCisgICAgICAgKiAgQyBAYyBGSUxFKi4gIFRoZSBAYyBGSUxFKiB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IGNsb3NlZCB3aGVuIHRoZQorICAgICAgICogIHN0ZGlvX2ZpbGVidWYgaXMgY2xvc2VkL2Rlc3Ryb3llZC4KKyAgICAgICovCisgICAgICBzdGRpb19maWxlYnVmKHN0ZDo6X19jX2ZpbGUqIF9fZiwgc3RkOjppb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlLAorCQkgICAgc2l6ZV90IF9fc2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4oQlVGU0laKSk7CisKKyAgICAgIC8qKgorICAgICAgICogIENsb3NlcyB0aGUgZXh0ZXJuYWwgZGF0YSBzdHJlYW0gaWYgdGhlIGZpbGUgZGVzY3JpcHRvciBjb25zdHJ1Y3RvcgorICAgICAgICogIHdhcyB1c2VkLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwKKyAgICAgIH5zdGRpb19maWxlYnVmKCk7CisKKyAgICAgIC8qKgorICAgICAgICogIEByZXR1cm4gIFRoZSB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvci4KKyAgICAgICAqCisgICAgICAgKiAgT25jZSBhc3NvY2lhdGVkIHdpdGggYW4gZXh0ZXJuYWwgZGF0YSBzdHJlYW0sIHRoaXMgZnVuY3Rpb24gY2FuIGJlCisgICAgICAgKiAgdXNlZCB0byBhY2Nlc3MgdGhlIHVuZGVybHlpbmcgUE9TSVggZmlsZSBkZXNjcmlwdG9yLiAgTm90ZSB0aGF0CisgICAgICAgKiAgdGhlcmUgaXMgbm8gd2F5IGZvciB0aGUgbGlicmFyeSB0byB0cmFjayB3aGF0IHlvdSBkbyB3aXRoIHRoZQorICAgICAgICogIGRlc2NyaXB0b3IsIHNvIGJlIGNhcmVmdWwuCisgICAgICAqLworICAgICAgaW50CisgICAgICBmZCgpIHsgcmV0dXJuIHRoaXMtPl9NX2ZpbGUuZmQoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAcmV0dXJuICBUaGUgdW5kZXJseWluZyBGSUxFKi4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBhY2Nlc3MgdGhlIHVuZGVybHlpbmcgIkMiIGZpbGUgcG9pbnRlci4KKyAgICAgICAqICBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gd2F5IGZvciB0aGUgbGlicmFyeSB0byB0cmFjayB3aGF0IHlvdSBkbworICAgICAgICogIHdpdGggdGhlIGZpbGUsIHNvIGJlIGNhcmVmdWwuCisgICAgICAgKi8KKyAgICAgIHN0ZDo6X19jX2ZpbGUqCisgICAgICBmaWxlKCkgeyByZXR1cm4gdGhpcy0+X01fZmlsZS5maWxlKCk7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGRpb19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46On5zdGRpb19maWxlYnVmKCkKKyAgICB7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkaW9fZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBzdGRpb19maWxlYnVmKGludCBfX2ZkLCBzdGQ6Omlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUsIHNpemVfdCBfX3NpemUpCisgICAgeworICAgICAgdGhpcy0+X01fZmlsZS5zeXNfb3BlbihfX2ZkLCBfX21vZGUpOworICAgICAgaWYgKHRoaXMtPmlzX29wZW4oKSkKKwl7CisJICB0aGlzLT5fTV9tb2RlID0gX19tb2RlOworCSAgdGhpcy0+X01fYnVmX3NpemUgPSBfX3NpemU7CisJICB0aGlzLT5fTV9hbGxvY2F0ZV9pbnRlcm5hbF9idWZmZXIoKTsKKwkgIHRoaXMtPl9NX3JlYWRpbmcgPSBmYWxzZTsKKwkgIHRoaXMtPl9NX3dyaXRpbmcgPSBmYWxzZTsKKwkgIHRoaXMtPl9NX3NldF9idWZmZXIoLTEpOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZGlvX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CisgICAgc3RkaW9fZmlsZWJ1ZihzdGQ6Ol9fY19maWxlKiBfX2YsIHN0ZDo6aW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwKKwkJICBzaXplX3QgX19zaXplKQorICAgIHsKKyAgICAgIHRoaXMtPl9NX2ZpbGUuc3lzX29wZW4oX19mLCBfX21vZGUpOworICAgICAgaWYgKHRoaXMtPmlzX29wZW4oKSkKKwl7CisJICB0aGlzLT5fTV9tb2RlID0gX19tb2RlOworCSAgdGhpcy0+X01fYnVmX3NpemUgPSBfX3NpemU7CisJICB0aGlzLT5fTV9hbGxvY2F0ZV9pbnRlcm5hbF9idWZmZXIoKTsKKwkgIHRoaXMtPl9NX3JlYWRpbmcgPSBmYWxzZTsKKwkgIHRoaXMtPl9NX3dyaXRpbmcgPSBmYWxzZTsKKwkgIHRoaXMtPl9NX3NldF9idWZmZXIoLTEpOworCX0KKyAgICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9zdGRpb19zeW5jX2ZpbGVidWYuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3N0ZGlvX3N5bmNfZmlsZWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YThjMjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC9zdGRpb19zeW5jX2ZpbGVidWYuaApAQCAtMCwwICsxLDI4NyBAQAorLy8gSW9zdHJlYW1zIHdyYXBwZXIgZm9yIHN0ZGlvIEZJTEUqIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGV4dC9zdGRpb19zeW5jX2ZpbGVidWYuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX1NURElPX1NZTkNfRklMRUJVRl9ICisjZGVmaW5lIF9TVERJT19TWU5DX0ZJTEVCVUZfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPHN0cmVhbWJ1Zj4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8Yml0cy9jKytpby5oPiAgLy8gRm9yIF9fY19maWxlCisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorI2luY2x1ZGUgPGN3Y2hhcj4KKyNlbmRpZgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorCisgIC8qKgorICAgKiAgQGJyaWVmIFByb3ZpZGVzIGEgbGF5ZXIgb2YgY29tcGF0aWJpbGl0eSBmb3IgQy4KKyAgICogIEBpbmdyb3VwIGlvCisgICAqCisgICAqICBUaGlzIEdOVSBleHRlbnNpb24gcHJvdmlkZXMgZXh0ZW5zaW9ucyBmb3Igd29ya2luZyB3aXRoIHN0YW5kYXJkCisgICAqICBDIEZJTEUqJ3MuICBJdCBtdXN0IGJlIGluc3RhbnRpYXRlZCBieSB0aGUgdXNlciB3aXRoIHRoZSB0eXBlIG9mCisgICAqICBjaGFyYWN0ZXIgdXNlZCBpbiB0aGUgZmlsZSBzdHJlYW0sIGUuZy4sIHN0ZGlvX2ZpbGVidWY8Y2hhcj4uCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IHN0ZDo6Y2hhcl90cmFpdHM8X0NoYXJUPiA+CisgICAgY2xhc3Mgc3RkaW9fc3luY19maWxlYnVmIDogcHVibGljIHN0ZDo6YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gVHlwZXM6CisgICAgICB0eXBlZGVmIF9DaGFyVAkJCQkJY2hhcl90eXBlOworICAgICAgdHlwZWRlZiBfVHJhaXRzCQkJCQl0cmFpdHNfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlCQlpbnRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlCQlwb3NfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlCQlvZmZfdHlwZTsKKworICAgIHByaXZhdGU6CisgICAgICAvLyBVbmRlcmx5aW5nIHN0ZGlvIEZJTEUKKyAgICAgIHN0ZDo6X19jX2ZpbGUqIGNvbnN0IF9NX2ZpbGU7CisKKyAgICAgIC8vIExhc3QgY2hhcmFjdGVyIGdvdHRlbi4gVGhpcyBpcyB1c2VkIHdoZW4gcGJhY2tmYWlsIGlzCisgICAgICAvLyBjYWxsZWQgZnJvbSBiYXNpY19zdHJlYW1idWY6OnN1bmdldGMoKQorICAgICAgaW50X3R5cGUgX01fdW5nZXRfYnVmOworCisgICAgcHVibGljOgorICAgICAgZXhwbGljaXQKKyAgICAgIHN0ZGlvX3N5bmNfZmlsZWJ1ZihzdGQ6Ol9fY19maWxlKiBfX2YpCisgICAgICA6IF9NX2ZpbGUoX19mKSwgX01fdW5nZXRfYnVmKHRyYWl0c190eXBlOjplb2YoKSkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAcmV0dXJuICBUaGUgdW5kZXJseWluZyBGSUxFKi4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBhY2Nlc3MgdGhlIHVuZGVybHlpbmcgQyBmaWxlIHBvaW50ZXIuCisgICAgICAgKiAgTm90ZSB0aGF0IHRoZXJlIGlzIG5vIHdheSBmb3IgdGhlIGxpYnJhcnkgdG8gdHJhY2sgd2hhdCB5b3UgZG8KKyAgICAgICAqICB3aXRoIHRoZSBmaWxlLCBzbyBiZSBjYXJlZnVsLgorICAgICAgICovCisgICAgICBzdGQ6Ol9fY19maWxlKiBjb25zdAorICAgICAgZmlsZSgpIHsgcmV0dXJuIHRoaXMtPl9NX2ZpbGU7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIGludF90eXBlCisgICAgICBzeW5jZ2V0YygpOworCisgICAgICBpbnRfdHlwZQorICAgICAgc3luY3VuZ2V0YyhpbnRfdHlwZSBfX2MpOworCisgICAgICBpbnRfdHlwZQorICAgICAgc3luY3B1dGMoaW50X3R5cGUgX19jKTsKKworICAgICAgdmlydHVhbCBpbnRfdHlwZQorICAgICAgdW5kZXJmbG93KCkKKyAgICAgIHsKKwlpbnRfdHlwZSBfX2MgPSB0aGlzLT5zeW5jZ2V0YygpOworCXJldHVybiB0aGlzLT5zeW5jdW5nZXRjKF9fYyk7CisgICAgICB9CisKKyAgICAgIHZpcnR1YWwgaW50X3R5cGUKKyAgICAgIHVmbG93KCkKKyAgICAgIHsKKwkvLyBTdG9yZSB0aGUgZ290dGVuIGNoYXJhY3RlciBpbiBjYXNlIHdlIG5lZWQgdG8gdW5nZXQgaXQuCisJX01fdW5nZXRfYnVmID0gdGhpcy0+c3luY2dldGMoKTsKKwlyZXR1cm4gX01fdW5nZXRfYnVmOworICAgICAgfQorCisgICAgICB2aXJ0dWFsIGludF90eXBlCisgICAgICBwYmFja2ZhaWwoaW50X3R5cGUgX19jID0gdHJhaXRzX3R5cGU6OmVvZigpKQorICAgICAgeworCWludF90eXBlIF9fcmV0OworCWNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOworCisJLy8gQ2hlY2sgaWYgdGhlIHVuZ2V0IG9yIHB1dGJhY2sgd2FzIHJlcXVlc3RlZAorCWlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpIC8vIHVuZ2V0CisJICB7CisJICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9NX3VuZ2V0X2J1ZiwgX19lb2YpKQorCSAgICAgIF9fcmV0ID0gdGhpcy0+c3luY3VuZ2V0YyhfTV91bmdldF9idWYpOworCSAgICBlbHNlIC8vIGJ1ZmZlciBpbnZhbGlkLCBmYWlsLgorCSAgICAgIF9fcmV0ID0gX19lb2Y7CisJICB9CisJZWxzZSAvLyBwdXRiYWNrCisJICBfX3JldCA9IHRoaXMtPnN5bmN1bmdldGMoX19jKTsKKworCS8vIFRoZSBidWZmZXJlZCBjaGFyYWN0ZXIgaXMgbm8gbG9uZ2VyIHZhbGlkLCBkaXNjYXJkIGl0LgorCV9NX3VuZ2V0X2J1ZiA9IF9fZW9mOworCXJldHVybiBfX3JldDsKKyAgICAgIH0KKworICAgICAgdmlydHVhbCBzdGQ6OnN0cmVhbXNpemUKKyAgICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RkOjpzdHJlYW1zaXplIF9fbik7CisKKyAgICAgIHZpcnR1YWwgaW50X3R5cGUKKyAgICAgIG92ZXJmbG93KGludF90eXBlIF9fYyA9IHRyYWl0c190eXBlOjplb2YoKSkKKyAgICAgIHsKKwlpbnRfdHlwZSBfX3JldDsKKwlpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgdHJhaXRzX3R5cGU6OmVvZigpKSkKKwkgIHsKKwkgICAgaWYgKHN0ZDo6ZmZsdXNoKF9NX2ZpbGUpKQorCSAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOworCSAgICBlbHNlCisJICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2MpOworCSAgfQorCWVsc2UKKwkgIF9fcmV0ID0gdGhpcy0+c3luY3B1dGMoX19jKTsKKwlyZXR1cm4gX19yZXQ7CisgICAgICB9CisKKyAgICAgIHZpcnR1YWwgc3RkOjpzdHJlYW1zaXplCisgICAgICB4c3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0ZDo6c3RyZWFtc2l6ZSBfX24pOworCisgICAgICB2aXJ0dWFsIGludAorICAgICAgc3luYygpCisgICAgICB7IHJldHVybiBzdGQ6OmZmbHVzaChfTV9maWxlKTsgfQorCisgICAgICB2aXJ0dWFsIHN0ZDo6c3RyZWFtcG9zCisgICAgICBzZWVrb2ZmKHN0ZDo6c3RyZWFtb2ZmIF9fb2ZmLCBzdGQ6Omlvc19iYXNlOjpzZWVrZGlyIF9fZGlyLAorCSAgICAgIHN0ZDo6aW9zX2Jhc2U6Om9wZW5tb2RlID0gc3RkOjppb3NfYmFzZTo6aW4gfCBzdGQ6Omlvc19iYXNlOjpvdXQpCisgICAgICB7CisJc3RkOjpzdHJlYW1wb3MgX19yZXQoc3RkOjpzdHJlYW1vZmYoLTEpKTsKKwlpbnQgX193aGVuY2U7CisJaWYgKF9fZGlyID09IHN0ZDo6aW9zX2Jhc2U6OmJlZykKKwkgIF9fd2hlbmNlID0gU0VFS19TRVQ7CisJZWxzZSBpZiAoX19kaXIgPT0gc3RkOjppb3NfYmFzZTo6Y3VyKQorCSAgX193aGVuY2UgPSBTRUVLX0NVUjsKKwllbHNlCisJICBfX3doZW5jZSA9IFNFRUtfRU5EOworI2lmZGVmIF9HTElCQ1hYX1VTRV9MRlMKKwlpZiAoIWZzZWVrbzY0KF9NX2ZpbGUsIF9fb2ZmLCBfX3doZW5jZSkpCisJICBfX3JldCA9IHN0ZDo6c3RyZWFtcG9zKGZ0ZWxsbzY0KF9NX2ZpbGUpKTsKKyNlbHNlCisJaWYgKCFmc2VlayhfTV9maWxlLCBfX29mZiwgX193aGVuY2UpKQorCSAgX19yZXQgPSBzdGQ6OnN0cmVhbXBvcyhzdGQ6OmZ0ZWxsKF9NX2ZpbGUpKTsKKyNlbmRpZgorCXJldHVybiBfX3JldDsKKyAgICAgIH0KKworICAgICAgdmlydHVhbCBzdGQ6OnN0cmVhbXBvcworICAgICAgc2Vla3BvcyhzdGQ6OnN0cmVhbXBvcyBfX3BvcywKKwkgICAgICBzdGQ6Omlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPQorCSAgICAgIHN0ZDo6aW9zX2Jhc2U6OmluIHwgc3RkOjppb3NfYmFzZTo6b3V0KQorICAgICAgeyByZXR1cm4gc2Vla29mZihzdGQ6OnN0cmVhbW9mZihfX3BvcyksIHN0ZDo6aW9zX2Jhc2U6OmJlZywgX19tb2RlKTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIGlubGluZSBzdGRpb19zeW5jX2ZpbGVidWY8Y2hhcj46OmludF90eXBlCisgICAgc3RkaW9fc3luY19maWxlYnVmPGNoYXI+OjpzeW5jZ2V0YygpCisgICAgeyByZXR1cm4gc3RkOjpnZXRjKF9NX2ZpbGUpOyB9CisKKyAgdGVtcGxhdGU8PgorICAgIGlubGluZSBzdGRpb19zeW5jX2ZpbGVidWY8Y2hhcj46OmludF90eXBlCisgICAgc3RkaW9fc3luY19maWxlYnVmPGNoYXI+OjpzeW5jdW5nZXRjKGludF90eXBlIF9fYykKKyAgICB7IHJldHVybiBzdGQ6OnVuZ2V0YyhfX2MsIF9NX2ZpbGUpOyB9CisKKyAgdGVtcGxhdGU8PgorICAgIGlubGluZSBzdGRpb19zeW5jX2ZpbGVidWY8Y2hhcj46OmludF90eXBlCisgICAgc3RkaW9fc3luY19maWxlYnVmPGNoYXI+OjpzeW5jcHV0YyhpbnRfdHlwZSBfX2MpCisgICAgeyByZXR1cm4gc3RkOjpwdXRjKF9fYywgX01fZmlsZSk7IH0KKworICB0ZW1wbGF0ZTw+CisgICAgaW5saW5lIHN0ZDo6c3RyZWFtc2l6ZQorICAgIHN0ZGlvX3N5bmNfZmlsZWJ1ZjxjaGFyPjo6eHNnZXRuKGNoYXIqIF9fcywgc3RkOjpzdHJlYW1zaXplIF9fbikKKyAgICB7CisgICAgICBzdGQ6OnN0cmVhbXNpemUgX19yZXQgPSBzdGQ6OmZyZWFkKF9fcywgMSwgX19uLCBfTV9maWxlKTsKKyAgICAgIGlmIChfX3JldCA+IDApCisJX01fdW5nZXRfYnVmID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fc1tfX3JldCAtIDFdKTsKKyAgICAgIGVsc2UKKwlfTV91bmdldF9idWYgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisgIHRlbXBsYXRlPD4KKyAgICBpbmxpbmUgc3RkOjpzdHJlYW1zaXplCisgICAgc3RkaW9fc3luY19maWxlYnVmPGNoYXI+Ojp4c3B1dG4oY29uc3QgY2hhciogX19zLCBzdGQ6OnN0cmVhbXNpemUgX19uKQorICAgIHsgcmV0dXJuIHN0ZDo6ZndyaXRlKF9fcywgMSwgX19uLCBfTV9maWxlKTsgfQorCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgdGVtcGxhdGU8PgorICAgIGlubGluZSBzdGRpb19zeW5jX2ZpbGVidWY8d2NoYXJfdD46OmludF90eXBlCisgICAgc3RkaW9fc3luY19maWxlYnVmPHdjaGFyX3Q+OjpzeW5jZ2V0YygpCisgICAgeyByZXR1cm4gc3RkOjpnZXR3YyhfTV9maWxlKTsgfQorCisgIHRlbXBsYXRlPD4KKyAgICBpbmxpbmUgc3RkaW9fc3luY19maWxlYnVmPHdjaGFyX3Q+OjppbnRfdHlwZQorICAgIHN0ZGlvX3N5bmNfZmlsZWJ1Zjx3Y2hhcl90Pjo6c3luY3VuZ2V0YyhpbnRfdHlwZSBfX2MpCisgICAgeyByZXR1cm4gc3RkOjp1bmdldHdjKF9fYywgX01fZmlsZSk7IH0KKworICB0ZW1wbGF0ZTw+CisgICAgaW5saW5lIHN0ZGlvX3N5bmNfZmlsZWJ1Zjx3Y2hhcl90Pjo6aW50X3R5cGUKKyAgICBzdGRpb19zeW5jX2ZpbGVidWY8d2NoYXJfdD46OnN5bmNwdXRjKGludF90eXBlIF9fYykKKyAgICB7IHJldHVybiBzdGQ6OnB1dHdjKF9fYywgX01fZmlsZSk7IH0KKworICB0ZW1wbGF0ZTw+CisgICAgaW5saW5lIHN0ZDo6c3RyZWFtc2l6ZQorICAgIHN0ZGlvX3N5bmNfZmlsZWJ1Zjx3Y2hhcl90Pjo6eHNnZXRuKHdjaGFyX3QqIF9fcywgc3RkOjpzdHJlYW1zaXplIF9fbikKKyAgICB7CisgICAgICBzdGQ6OnN0cmVhbXNpemUgX19yZXQgPSAwOworICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CisgICAgICB3aGlsZSAoX19uLS0pCisJeworCSAgaW50X3R5cGUgX19jID0gdGhpcy0+c3luY2dldGMoKTsKKwkgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCisJICAgIGJyZWFrOworCSAgX19zW19fcmV0XSA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKKwkgICsrX19yZXQ7CisJfQorCisgICAgICBpZiAoX19yZXQgPiAwKQorCV9NX3VuZ2V0X2J1ZiA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX3NbX19yZXQgLSAxXSk7CisgICAgICBlbHNlCisJX01fdW5nZXRfYnVmID0gdHJhaXRzX3R5cGU6OmVvZigpOworICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZTw+CisgICAgaW5saW5lIHN0ZDo6c3RyZWFtc2l6ZQorICAgIHN0ZGlvX3N5bmNfZmlsZWJ1Zjx3Y2hhcl90Pjo6eHNwdXRuKGNvbnN0IHdjaGFyX3QqIF9fcywKKwkJCQkJc3RkOjpzdHJlYW1zaXplIF9fbikKKyAgICB7CisgICAgICBzdGQ6OnN0cmVhbXNpemUgX19yZXQgPSAwOworICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CisgICAgICB3aGlsZSAoX19uLS0pCisJeworCSAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZSh0aGlzLT5zeW5jcHV0YygqX19zKyspLCBfX2VvZikpCisJICAgIGJyZWFrOworCSAgKytfX3JldDsKKwl9CisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorI2VuZGlmCisKKyNpZiBfR0xJQkNYWF9FWFRFUk5fVEVNUExBVEUKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHN0ZGlvX3N5bmNfZmlsZWJ1ZjxjaGFyPjsKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mgc3RkaW9fc3luY19maWxlYnVmPHdjaGFyX3Q+OworI2VuZGlmCisjZW5kaWYKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3N0cmluZ19jb252ZXJzaW9ucy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvc3RyaW5nX2NvbnZlcnNpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjMTllMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3N0cmluZ19jb252ZXJzaW9ucy5oCkBAIC0wLDAgKzEsOTQgQEAKKy8vIFN0cmluZyBDb252ZXJzaW9ucyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworI2lmbmRlZiBfU1RSSU5HX0NPTlZFUlNJT05TX0gKKyNkZWZpbmUgX1NUUklOR19DT05WRVJTSU9OU19IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8ZXh0L251bWVyaWNfdHJhaXRzLmg+CisjaW5jbHVkZSA8Yml0cy9mdW5jdGV4Y2VwdC5oPgorI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxjd2NoYXI+CisjaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPGNlcnJubz4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKworICAvLyBIZWxwZXIgZm9yIGFsbCB0aGUgc3RvKiBmdW5jdGlvbnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UUmV0LCB0eXBlbmFtZSBfUmV0ID0gX1RSZXQsIHR5cGVuYW1lIF9DaGFyVCwKKwkgICB0eXBlbmFtZS4uLiBfQmFzZT4KKyAgICBfUmV0CisgICAgX19zdG9hKF9UUmV0ICgqX19jb252ZikgKGNvbnN0IF9DaGFyVCosIF9DaGFyVCoqLCBfQmFzZS4uLiksCisJICAgY29uc3QgY2hhciogX19uYW1lLCBjb25zdCBfQ2hhclQqIF9fc3RyLCBzdGQ6OnNpemVfdCogX19pZHgsCisJICAgX0Jhc2UuLi4gX19iYXNlKQorICAgIHsKKyAgICAgIF9SZXQgX19yZXQ7CisKKyAgICAgIF9DaGFyVCogX19lbmRwdHI7CisgICAgICBlcnJubyA9IDA7CisgICAgICBjb25zdCBfVFJldCBfX3RtcCA9IF9fY29udmYoX19zdHIsICZfX2VuZHB0ciwgX19iYXNlLi4uKTsKKworICAgICAgaWYgKF9fZW5kcHRyID09IF9fc3RyKQorCXN0ZDo6X190aHJvd19pbnZhbGlkX2FyZ3VtZW50KF9fbmFtZSk7CisgICAgICBlbHNlIGlmIChlcnJubyA9PSBFUkFOR0UKKwkgICAgICAgfHwgKHN0ZDo6X19hcmVfc2FtZTxfUmV0LCBpbnQ+OjpfX3ZhbHVlCisJCSAgICYmIChfX3RtcCA8IF9fbnVtZXJpY190cmFpdHM8aW50Pjo6X19taW4KKwkJICAgICAgIHx8IF9fdG1wID4gX19udW1lcmljX3RyYWl0czxpbnQ+OjpfX21heCkpKQorCXN0ZDo6X190aHJvd19vdXRfb2ZfcmFuZ2UoX19uYW1lKTsKKyAgICAgIGVsc2UKKwlfX3JldCA9IF9fdG1wOworCisgICAgICBpZiAoX19pZHgpCisJKl9faWR4ID0gX19lbmRwdHIgLSBfX3N0cjsKKworICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICAvLyBIZWxwZXIgZm9yIHRoZSB0b19zdHJpbmcgLyB0b193c3RyaW5nIGZ1bmN0aW9ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0cmluZywgdHlwZW5hbWUgX0NoYXJUID0gdHlwZW5hbWUgX1N0cmluZzo6dmFsdWVfdHlwZT4KKyAgICBfU3RyaW5nCisgICAgX190b194c3RyaW5nKGludCAoKl9fY29udmYpIChfQ2hhclQqLCBzdGQ6OnNpemVfdCwgY29uc3QgX0NoYXJUKiwKKwkJCQkgX19idWlsdGluX3ZhX2xpc3QpLCBzdGQ6OnNpemVfdCBfX24sCisJCSBjb25zdCBfQ2hhclQqIF9fZm10LCAuLi4pCisgICAgeworICAgICAgLy8gWFhYIEV2ZW50dWFsbHkgdGhlIHJlc3VsdCB3aWxsIGJlIGNvbnN0cnVjdGVkIGluIHBsYWNlIGluCisgICAgICAvLyB0aGUgQysrMHggc3RyaW5nLCBsaWtlbHkgd2l0aCB0aGUgaGVscCBvZiBpbnRlcm5hbCBob29rcy4KKyAgICAgIF9DaGFyVCogX19zID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQorCQkJCQkJCSAgKiBfX24pKTsKKworICAgICAgX19idWlsdGluX3ZhX2xpc3QgX19hcmdzOworICAgICAgX19idWlsdGluX3ZhX3N0YXJ0KF9fYXJncywgX19mbXQpOworCisgICAgICBjb25zdCBpbnQgX19sZW4gPSBfX2NvbnZmKF9fcywgX19uLCBfX2ZtdCwgX19hcmdzKTsKKworICAgICAgX19idWlsdGluX3ZhX2VuZChfX2FyZ3MpOworCisgICAgICByZXR1cm4gX1N0cmluZyhfX3MsIF9fcyArIF9fbGVuKTsKKyAgICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmIC8vIF9TVFJJTkdfQ09OVkVSU0lPTlNfSApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvdGhyb3dfYWxsb2NhdG9yLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC90aHJvd19hbGxvY2F0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODA4OWJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvdGhyb3dfYWxsb2NhdG9yLmgKQEAgLTAsMCArMSw3NTYgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqIEBmaWxlIGV4dC90aHJvd19hbGxvY2F0b3IuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICoKKyAqICBDb250YWlucyB0d28gZXhjZXB0aW9uLWdlbmVyYXRpbmcgdHlwZXMgKHRocm93X3ZhbHVlLCB0aHJvd19hbGxvY2F0b3IpCisgKiAgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyB2YWx1ZSBhbmQgYWxsb2NhdG9yIHR5cGVzIHdoaWxlIHRlc3RpbmcKKyAqICBleGNlcHRpb24gc2FmZXR5IGluIHRlbXBsYXRpemVkIGNvbnRhaW5lcnMgYW5kIGFsZ29yaXRobXMuIFRoZQorICogIGFsbG9jYXRvciBoYXMgYWRkaXRpb25hbCBsb2cgYW5kIGRlYnVnIGZlYXR1cmVzLiBUaGUgZXhjZXB0aW9uCisgKiAgZ2VuZXJhdGVkIGlzIG9mIHR5cGUgZm9yY2VkX2V4Y2VwdGlvbl9lcnJvci4KKyAqLworCisjaWZuZGVmIF9USFJPV19BTExPQ0FUT1JfSAorI2RlZmluZSBfVEhST1dfQUxMT0NBVE9SX0ggMQorCisjaW5jbHVkZSA8Y21hdGg+CisjaW5jbHVkZSA8Y3RpbWU+CisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxvc3RyZWFtPgorI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPGJpdHMvZnVuY3RleGNlcHQuaD4KKyNpbmNsdWRlIDxiaXRzL21vdmUuaD4KKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworIyBpbmNsdWRlIDxmdW5jdGlvbmFsPgorIyBpbmNsdWRlIDxyYW5kb20+CisjZWxzZQorIyBpbmNsdWRlIDx0cjEvZnVuY3Rpb25hbD4KKyMgaW5jbHVkZSA8dHIxL3JhbmRvbT4KKyNlbmRpZgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorCisgIC8qKgorICAgKiAgQGJyaWVmIFRob3duIGJ5IGV4Y2VwdGlvbiBzYWZldHkgbWFjaGluZXJ5LgorICAgKiAgQGluZ3JvdXAgZXhjZXB0aW9ucworICAgKi8KKyAgc3RydWN0IGZvcmNlZF9lcnJvciA6IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbgorICB7IH07CisKKyAgLy8gU3Vic3RpdHV0ZSBmb3IgZm9yY2VkX2Vycm9yIG9iamVjdCB3aGVuIC1mbm8tZXhjZXB0aW9ucy4KKyAgaW5saW5lIHZvaWQKKyAgX190aHJvd19mb3JjZWRfZXJyb3IoKQorICB7CisjaWYgX19FWENFUFRJT05TCisgICAgdGhyb3cgZm9yY2VkX2Vycm9yKCk7CisjZWxzZQorICAgIF9fYnVpbHRpbl9hYm9ydCgpOworI2VuZGlmCisgIH0KKworCisgIC8qKgorICAgKiAgQGJyaWVmIEJhc2UgY2xhc3MgZm9yIGNoZWNraW5nIGFkZHJlc3MgYW5kIGxhYmVsIGluZm9ybWF0aW9uCisgICAqICBhYm91dCBhbGxvY2F0aW9ucy4gQ3JlYXRlIGEgc3RkOjptYXAgYmV0d2VlbiB0aGUgYWxsb2NhdGVkCisgICAqICBhZGRyZXNzICh2b2lkKikgYW5kIGEgZGF0dW0gZm9yIGFubm90YXRpb25zLCB3aGljaCBhcmUgYSBwYWlyIG9mCisgICAqICBudW1iZXJzIGNvcnJlc3BvbmRpbmcgdG8gbGFiZWwgYW5kIGFsbG9jYXRlZCBzaXplLgorICAgKi8KKyAgc3RydWN0IGFubm90YXRlX2Jhc2UKKyAgeworICAgIGFubm90YXRlX2Jhc2UoKQorICAgIHsKKyAgICAgIGxhYmVsKCk7CisgICAgICBtYXAoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZAorICAgIHNldF9sYWJlbChzaXplX3QgbCkKKyAgICB7IGxhYmVsKCkgPSBsOyB9CisKKyAgICBzdGF0aWMgc2l6ZV90CisgICAgZ2V0X2xhYmVsKCkKKyAgICB7IHJldHVybiBsYWJlbCgpOyB9CisKKyAgICB2b2lkCisgICAgaW5zZXJ0KHZvaWQqIHAsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgIGlmIChwID09IE5VTEwpCisJeworCSAgc3RkOjpzdHJpbmcgZXJyb3IoImFubm90YXRlX2Jhc2U6Omluc2VydCBudWxsIGluc2VydCFcbiIpOworCSAgbG9nX3RvX3N0cmluZyhlcnJvciwgbWFrZV9lbnRyeShwLCBzaXplKSk7CisJICBzdGQ6Ol9fdGhyb3dfbG9naWNfZXJyb3IoZXJyb3IuY19zdHIoKSk7CisJfQorCisgICAgICBjb25zdF9pdGVyYXRvciBmb3VuZCA9IG1hcCgpLmZpbmQocCk7CisgICAgICBpZiAoZm91bmQgIT0gbWFwKCkuZW5kKCkpCisJeworCSAgc3RkOjpzdHJpbmcgZXJyb3IoImFubm90YXRlX2Jhc2U6Omluc2VydCBkb3VibGUgaW5zZXJ0IVxuIik7CisJICBsb2dfdG9fc3RyaW5nKGVycm9yLCBtYWtlX2VudHJ5KHAsIHNpemUpKTsKKwkgIGxvZ190b19zdHJpbmcoZXJyb3IsICpmb3VuZCk7CisJICBzdGQ6Ol9fdGhyb3dfbG9naWNfZXJyb3IoZXJyb3IuY19zdHIoKSk7CisJfQorCisgICAgICBtYXAoKS5pbnNlcnQobWFrZV9lbnRyeShwLCBzaXplKSk7CisgICAgfQorCisgICAgdm9pZAorICAgIGVyYXNlKHZvaWQqIHAsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgIGNoZWNrX2FsbG9jYXRlZChwLCBzaXplKTsKKyAgICAgIG1hcCgpLmVyYXNlKHApOworICAgIH0KKworICAgIC8vIFNlZSBpZiBhIHBhcnRpY3VsYXIgYWRkcmVzcyBhbmQgYWxsb2NhdGlvbiBzaXplIGhhcyBiZWVuIHNhdmVkLgorICAgIGlubGluZSB2b2lkCisgICAgY2hlY2tfYWxsb2NhdGVkKHZvaWQqIHAsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgIGNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gbWFwKCkuZmluZChwKTsKKyAgICAgIGlmIChmb3VuZCA9PSBtYXAoKS5lbmQoKSkKKwl7CisJICBzdGQ6OnN0cmluZyBlcnJvcigiYW5ub3RhdGVfYmFzZTo6Y2hlY2tfYWxsb2NhdGVkIGJ5IHZhbHVlICIKKwkJCSAgICAibnVsbCBlcmFzZSFcbiIpOworCSAgbG9nX3RvX3N0cmluZyhlcnJvciwgbWFrZV9lbnRyeShwLCBzaXplKSk7CisJICBzdGQ6Ol9fdGhyb3dfbG9naWNfZXJyb3IoZXJyb3IuY19zdHIoKSk7CisJfQorCisgICAgICBpZiAoZm91bmQtPnNlY29uZC5zZWNvbmQgIT0gc2l6ZSkKKwl7CisJICBzdGQ6OnN0cmluZyBlcnJvcigiYW5ub3RhdGVfYmFzZTo6Y2hlY2tfYWxsb2NhdGVkIGJ5IHZhbHVlICIKKwkJCSAgICAid3Jvbmctc2l6ZSBlcmFzZSFcbiIpOworCSAgbG9nX3RvX3N0cmluZyhlcnJvciwgbWFrZV9lbnRyeShwLCBzaXplKSk7CisJICBsb2dfdG9fc3RyaW5nKGVycm9yLCAqZm91bmQpOworCSAgc3RkOjpfX3Rocm93X2xvZ2ljX2Vycm9yKGVycm9yLmNfc3RyKCkpOworCX0KKyAgICB9CisKKyAgICAvLyBTZWUgaWYgYSBnaXZlbiBsYWJlbCBoYXMgYmVlbiBhbGxvY2F0ZWQuCisgICAgaW5saW5lIHZvaWQKKyAgICBjaGVja19hbGxvY2F0ZWQoc2l6ZV90IGxhYmVsKQorICAgIHsKKyAgICAgIGNvbnN0X2l0ZXJhdG9yIGJlZyA9IG1hcCgpLmJlZ2luKCk7CisgICAgICBjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAoKS5lbmQoKTsKKyAgICAgIHN0ZDo6c3RyaW5nIGZvdW5kOworICAgICAgd2hpbGUgKGJlZyAhPSBlbmQpCisJeworCSAgaWYgKGJlZy0+c2Vjb25kLmZpcnN0ID09IGxhYmVsKQorCSAgICBsb2dfdG9fc3RyaW5nKGZvdW5kLCAqYmVnKTsKKwkgICsrYmVnOworCX0KKworICAgICAgaWYgKCFmb3VuZC5lbXB0eSgpKQorCXsKKwkgIHN0ZDo6c3RyaW5nIGVycm9yKCJhbm5vdGF0ZV9iYXNlOjpjaGVja19hbGxvY2F0ZWQgYnkgbGFiZWxcbiIpOworCSAgZXJyb3IgKz0gZm91bmQ7CisJICBzdGQ6Ol9fdGhyb3dfbG9naWNfZXJyb3IoZXJyb3IuY19zdHIoKSk7CisJfQorICAgIH0KKworICBwcml2YXRlOgorICAgIHR5cGVkZWYgc3RkOjpwYWlyPHNpemVfdCwgc2l6ZV90PiAJCWRhdGFfdHlwZTsKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPHZvaWQqLCBkYXRhX3R5cGU+IAkJbWFwX3R5cGU7CisgICAgdHlwZWRlZiBtYXBfdHlwZTo6dmFsdWVfdHlwZSAJCWVudHJ5X3R5cGU7CisgICAgdHlwZWRlZiBtYXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgCQljb25zdF9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIG1hcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgCQljb25zdF9yZWZlcmVuY2U7CisKKyAgICBmcmllbmQgc3RkOjpvc3RyZWFtJgorICAgIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiwgY29uc3QgYW5ub3RhdGVfYmFzZSYpOworCisgICAgZW50cnlfdHlwZQorICAgIG1ha2VfZW50cnkodm9pZCogcCwgc2l6ZV90IHNpemUpCisgICAgeyByZXR1cm4gc3RkOjptYWtlX3BhaXIocCwgZGF0YV90eXBlKGdldF9sYWJlbCgpLCBzaXplKSk7IH0KKworICAgIHZvaWQKKyAgICBsb2dfdG9fc3RyaW5nKHN0ZDo6c3RyaW5nJiBzLCBjb25zdF9yZWZlcmVuY2UgcmVmKSBjb25zdAorICAgIHsKKyAgICAgIGNoYXIgYnVmWzQwXTsKKyAgICAgIGNvbnN0IGNoYXIgdGFiKCdcdCcpOworICAgICAgcyArPSAibGFiZWw6ICI7CisgICAgICB1bnNpZ25lZCBsb25nIGwgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihyZWYuc2Vjb25kLmZpcnN0KTsKKyAgICAgIF9fYnVpbHRpbl9zcHJpbnRmKGJ1ZiwgIiVsdSIsIGwpOworICAgICAgcyArPSBidWY7CisgICAgICBzICs9IHRhYjsKKyAgICAgIHMgKz0gInNpemU6ICI7CisgICAgICBsID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4ocmVmLnNlY29uZC5zZWNvbmQpOworICAgICAgX19idWlsdGluX3NwcmludGYoYnVmLCAiJWx1IiwgbCk7CisgICAgICBzICs9IGJ1ZjsKKyAgICAgIHMgKz0gdGFiOworICAgICAgcyArPSAiYWRkcmVzczogIjsKKyAgICAgIF9fYnVpbHRpbl9zcHJpbnRmKGJ1ZiwgIiVwIiwgcmVmLmZpcnN0KTsKKyAgICAgIHMgKz0gYnVmOworICAgICAgcyArPSAnXG4nOworICAgIH0KKworICAgIHN0YXRpYyBzaXplX3QmCisgICAgbGFiZWwoKQorICAgIHsKKyAgICAgIHN0YXRpYyBzaXplX3QgX1NfbGFiZWwoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSk7CisgICAgICByZXR1cm4gX1NfbGFiZWw7CisgICAgfQorCisgICAgc3RhdGljIG1hcF90eXBlJgorICAgIG1hcCgpCisgICAgeworICAgICAgc3RhdGljIG1hcF90eXBlIF9TX21hcDsKKyAgICAgIHJldHVybiBfU19tYXA7CisgICAgfQorICB9OworCisgIGlubGluZSBzdGQ6Om9zdHJlYW0mCisgIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgYW5ub3RhdGVfYmFzZSYgX19iKQorICB7CisgICAgc3RkOjpzdHJpbmcgZXJyb3I7CisgICAgdHlwZWRlZiBhbm5vdGF0ZV9iYXNlIGJhc2VfdHlwZTsKKyAgICBiYXNlX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGJlZyA9IF9fYi5tYXAoKS5iZWdpbigpOworICAgIGJhc2VfdHlwZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gX19iLm1hcCgpLmVuZCgpOworICAgIGZvciAoOyBiZWcgIT0gZW5kOyArK2JlZykKKyAgICAgIF9fYi5sb2dfdG9fc3RyaW5nKGVycm9yLCAqYmVnKTsKKyAgICByZXR1cm4gb3MgPDwgZXJyb3I7CisgIH0KKworCisgIC8qKgorICAgKiAgQGJyaWVmIEJhc2Ugc3RydWN0IGZvciBjb25kaXRpb24gcG9saWN5LgorICAgKgorICAgKiBSZXF1aXJlcyBhIHB1YmxpYyBtZW1iZXIgZnVuY3Rpb24gd2l0aCB0aGUgc2lnbmF0dXJlCisgICAqIHZvaWQgdGhyb3dfY29uZGl0aW9uYWxseSgpCisgICAqLworICBzdHJ1Y3QgY29uZGl0aW9uX2Jhc2UKKyAgeworICAgIHZpcnR1YWwgfmNvbmRpdGlvbl9iYXNlKCkgeyB9OworICB9OworCisKKyAgLyoqCisgICAqICBAYnJpZWYgQmFzZSBjbGFzcyBmb3IgaW5jcmVtZW50YWwgY29udHJvbCBhbmQgdGhyb3cuCisgICAqLworICBzdHJ1Y3QgbGltaXRfY29uZGl0aW9uIDogcHVibGljIGNvbmRpdGlvbl9iYXNlCisgIHsKKyAgICAvLyBTY29wZS1sZXZlbCBhZGp1c3RvciBvYmplY3RzOiBzZXQgbGltaXQgZm9yIHRocm93IGF0IHRoZQorICAgIC8vIGJlZ2lubmluZyBvZiBhIHNjb3BlIGJsb2NrLCBhbmQgcmVzdG9yZXMgdG8gcHJldmlvdXMgbGltaXQgd2hlbgorICAgIC8vIG9iamVjdCBpcyBkZXN0cm95ZWQgb24gZXhpdGluZyB0aGUgYmxvY2suCisgICAgc3RydWN0IGFkanVzdG9yX2Jhc2UKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIGNvbnN0IHNpemVfdCBfTV9vcmlnOworCisgICAgcHVibGljOgorICAgICAgYWRqdXN0b3JfYmFzZSgpIDogX01fb3JpZyhsaW1pdCgpKSB7IH0KKworICAgICAgdmlydHVhbAorICAgICAgfmFkanVzdG9yX2Jhc2UoKSB7IHNldF9saW1pdChfTV9vcmlnKTsgfQorICAgIH07CisKKyAgICAvLy8gTmV2ZXIgZW50ZXIgdGhlIGNvbmRpdGlvbi4KKyAgICBzdHJ1Y3QgbmV2ZXJfYWRqdXN0b3IgOiBwdWJsaWMgYWRqdXN0b3JfYmFzZQorICAgIHsKKyAgICAgIG5ldmVyX2FkanVzdG9yKCkgeyBzZXRfbGltaXQoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSk7IH0KKyAgICB9OworCisgICAgLy8vIEFsd2F5cyBlbnRlciB0aGUgY29uZGl0aW9uLgorICAgIHN0cnVjdCBhbHdheXNfYWRqdXN0b3IgOiBwdWJsaWMgYWRqdXN0b3JfYmFzZQorICAgIHsKKyAgICAgIGFsd2F5c19hZGp1c3RvcigpIHsgc2V0X2xpbWl0KGNvdW50KCkpOyB9CisgICAgfTsKKworICAgIC8vLyBFbnRlciB0aGUgbnRoIGNvbmRpdGlvbi4KKyAgICBzdHJ1Y3QgbGltaXRfYWRqdXN0b3IgOiBwdWJsaWMgYWRqdXN0b3JfYmFzZQorICAgIHsKKyAgICAgIGxpbWl0X2FkanVzdG9yKGNvbnN0IHNpemVfdCBfX2wpIHsgc2V0X2xpbWl0KF9fbCk7IH0KKyAgICB9OworCisgICAgLy8gSW5jcmVtZW50IF9TX2NvdW50IGV2ZXJ5IHRpbWUgY2FsbGVkLgorICAgIC8vIElmIF9TX2NvdW50IG1hdGNoZXMgdGhlIGxpbWl0IGNvdW50LCB0aHJvdy4KKyAgICBzdGF0aWMgdm9pZAorICAgIHRocm93X2NvbmRpdGlvbmFsbHkoKQorICAgIHsKKyAgICAgIGlmIChjb3VudCgpID09IGxpbWl0KCkpCisJX190aHJvd19mb3JjZWRfZXJyb3IoKTsKKyAgICAgICsrY291bnQoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgc2l6ZV90JgorICAgIGNvdW50KCkKKyAgICB7CisgICAgICBzdGF0aWMgc2l6ZV90IF9TX2NvdW50KDApOworICAgICAgcmV0dXJuIF9TX2NvdW50OworICAgIH0KKworICAgIHN0YXRpYyBzaXplX3QmCisgICAgbGltaXQoKQorICAgIHsKKyAgICAgIHN0YXRpYyBzaXplX3QgX1NfbGltaXQoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSk7CisgICAgICByZXR1cm4gX1NfbGltaXQ7CisgICAgfQorCisgICAgLy8gWmVybyB0aGUgdGhyb3cgY291bnRlciwgc2V0IGxpbWl0IHRvIGFyZ3VtZW50LgorICAgIHN0YXRpYyB2b2lkCisgICAgc2V0X2xpbWl0KGNvbnN0IHNpemVfdCBfX2wpCisgICAgeworICAgICAgbGltaXQoKSA9IF9fbDsKKyAgICAgIGNvdW50KCkgPSAwOworICAgIH0KKyAgfTsKKworCisgIC8qKgorICAgKiAgQGJyaWVmIEJhc2UgY2xhc3MgZm9yIHJhbmRvbSBwcm9iYWJpbGl0eSBjb250cm9sIGFuZCB0aHJvdy4KKyAgICovCisgIHN0cnVjdCByYW5kb21fY29uZGl0aW9uIDogcHVibGljIGNvbmRpdGlvbl9iYXNlCisgIHsKKyAgICAvLyBTY29wZS1sZXZlbCBhZGp1c3RvciBvYmplY3RzOiBzZXQgcHJvYmFiaWxpdHkgZm9yIHRocm93IGF0IHRoZQorICAgIC8vIGJlZ2lubmluZyBvZiBhIHNjb3BlIGJsb2NrLCBhbmQgcmVzdG9yZXMgdG8gcHJldmlvdXMKKyAgICAvLyBwcm9iYWJpbGl0eSB3aGVuIG9iamVjdCBpcyBkZXN0cm95ZWQgb24gZXhpdGluZyB0aGUgYmxvY2suCisgICAgc3RydWN0IGFkanVzdG9yX2Jhc2UKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIGNvbnN0IGRvdWJsZSBfTV9vcmlnOworCisgICAgcHVibGljOgorICAgICAgYWRqdXN0b3JfYmFzZSgpIDogX01fb3JpZyhwcm9iYWJpbGl0eSgpKSB7IH0KKworICAgICAgdmlydHVhbCB+YWRqdXN0b3JfYmFzZSgpCisgICAgICB7IHNldF9wcm9iYWJpbGl0eShfTV9vcmlnKTsgfQorICAgIH07CisKKyAgICAvLy8gR3JvdXAgY29uZGl0aW9uLgorICAgIHN0cnVjdCBncm91cF9hZGp1c3RvciA6IHB1YmxpYyBhZGp1c3Rvcl9iYXNlCisgICAgeworICAgICAgZ3JvdXBfYWRqdXN0b3Ioc2l6ZV90IHNpemUpCisgICAgICB7IHNldF9wcm9iYWJpbGl0eSgxIC0gc3RkOjpwb3coZG91YmxlKDEgLSBwcm9iYWJpbGl0eSgpKSwKKwkJCQkgICAgIGRvdWJsZSgwLjUgLyAoc2l6ZSArIDEpKSkpOworICAgICAgfQorICAgIH07CisKKyAgICAvLy8gTmV2ZXIgZW50ZXIgdGhlIGNvbmRpdGlvbi4KKyAgICBzdHJ1Y3QgbmV2ZXJfYWRqdXN0b3IgOiBwdWJsaWMgYWRqdXN0b3JfYmFzZQorICAgIHsKKyAgICAgIG5ldmVyX2FkanVzdG9yKCkgeyBzZXRfcHJvYmFiaWxpdHkoMCk7IH0KKyAgICB9OworCisgICAgLy8vIEFsd2F5cyBlbnRlciB0aGUgY29uZGl0aW9uLgorICAgIHN0cnVjdCBhbHdheXNfYWRqdXN0b3IgOiBwdWJsaWMgYWRqdXN0b3JfYmFzZQorICAgIHsKKyAgICAgIGFsd2F5c19hZGp1c3RvcigpIHsgc2V0X3Byb2JhYmlsaXR5KDEpOyB9CisgICAgfTsKKworICAgIHJhbmRvbV9jb25kaXRpb24oKQorICAgIHsKKyAgICAgIHByb2JhYmlsaXR5KCk7CisgICAgICBlbmdpbmUoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZAorICAgIHNldF9wcm9iYWJpbGl0eShkb3VibGUgX19wKQorICAgIHsgcHJvYmFiaWxpdHkoKSA9IF9fcDsgfQorCisgICAgc3RhdGljIHZvaWQKKyAgICB0aHJvd19jb25kaXRpb25hbGx5KCkKKyAgICB7CisgICAgICBpZiAoZ2VuZXJhdGUoKSA8IHByb2JhYmlsaXR5KCkpCisJX190aHJvd19mb3JjZWRfZXJyb3IoKTsKKyAgICB9CisKKyAgICB2b2lkCisgICAgc2VlZCh1bnNpZ25lZCBsb25nIF9fcykKKyAgICB7IGVuZ2luZSgpLnNlZWQoX19zKTsgfQorCisgIHByaXZhdGU6CisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICB0eXBlZGVmIHN0ZDo6dW5pZm9ybV9yZWFsX2Rpc3RyaWJ1dGlvbjxkb3VibGU+IAlkaXN0cmlidXRpb25fdHlwZTsKKyAgICB0eXBlZGVmIHN0ZDo6bXQxOTkzNyAJCQkJZW5naW5lX3R5cGU7CisjZWxzZQorICAgIHR5cGVkZWYgc3RkOjp0cjE6OnVuaWZvcm1fcmVhbDxkb3VibGU+IAkJZGlzdHJpYnV0aW9uX3R5cGU7CisgICAgdHlwZWRlZiBzdGQ6OnRyMTo6bXQxOTkzNyAJCQkJZW5naW5lX3R5cGU7CisjZW5kaWYKKworICAgIHN0YXRpYyBkb3VibGUKKyAgICBnZW5lcmF0ZSgpCisgICAgeworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBjb25zdCBkaXN0cmlidXRpb25fdHlwZSBkaXN0cmlidXRpb24oMCwgMSk7CisgICAgICBzdGF0aWMgYXV0byBnZW5lcmF0b3IgPSBzdGQ6OmJpbmQoZGlzdHJpYnV0aW9uLCBlbmdpbmUoKSk7CisjZWxzZQorICAgICAgLy8gVXNlIHZhcmlhdGVfZ2VuZXJhdG9yIHRvIGdldCBub3JtYWxpemVkIHJlc3VsdHMuCisgICAgICB0eXBlZGVmIHN0ZDo6dHIxOjp2YXJpYXRlX2dlbmVyYXRvcjxlbmdpbmVfdHlwZSwgZGlzdHJpYnV0aW9uX3R5cGU+IGdlbl90OworICAgICAgZGlzdHJpYnV0aW9uX3R5cGUgZGlzdHJpYnV0aW9uKDAsIDEpOworICAgICAgc3RhdGljIGdlbl90IGdlbmVyYXRvcihlbmdpbmUoKSwgZGlzdHJpYnV0aW9uKTsKKyNlbmRpZgorCisgICAgICBkb3VibGUgcmFuZG9tID0gZ2VuZXJhdG9yKCk7CisgICAgICBpZiAocmFuZG9tIDwgZGlzdHJpYnV0aW9uLm1pbigpIHx8IHJhbmRvbSA+IGRpc3RyaWJ1dGlvbi5tYXgoKSkKKwl7CisJICBzdGQ6OnN0cmluZyBfX3MoInJhbmRvbV9jb25kaXRpb246OmdlbmVyYXRlIik7CisJICBfX3MgKz0gIlxuIjsKKwkgIF9fcyArPSAicmFuZG9tIG51bWJlciBnZW5lcmF0ZWQgaXM6ICI7CisJICBjaGFyIGJ1Zls0MF07CisJICBfX2J1aWx0aW5fc3ByaW50ZihidWYsICIlZiIsIHJhbmRvbSk7CisJICBfX3MgKz0gYnVmOworCSAgc3RkOjpfX3Rocm93X291dF9vZl9yYW5nZShfX3MuY19zdHIoKSk7CisJfQorCisgICAgICByZXR1cm4gcmFuZG9tOworICAgIH0KKworICAgIHN0YXRpYyBkb3VibGUmCisgICAgcHJvYmFiaWxpdHkoKQorICAgIHsKKyAgICAgIHN0YXRpYyBkb3VibGUgX1NfcDsKKyAgICAgIHJldHVybiBfU19wOworICAgIH0KKworICAgIHN0YXRpYyBlbmdpbmVfdHlwZSYKKyAgICBlbmdpbmUoKQorICAgIHsKKyAgICAgIHN0YXRpYyBlbmdpbmVfdHlwZSBfU19lOworICAgICAgcmV0dXJuIF9TX2U7CisgICAgfQorICB9OworCisKKyAgLyoqCisgICAqICBAYnJpZWYgQ2xhc3Mgd2l0aCBleGNlcHRpb24gZ2VuZXJhdGlvbiBjb250cm9sLiBJbnRlbmRlZCB0byBiZQorICAgKiAgdXNlZCBhcyBhIHZhbHVlX3R5cGUgaW4gdGVtcGxhdGl6ZWQgY29kZS4KKyAgICoKKyAgICogIE5vdGU6IERlc3RydWN0b3Igbm90IGFsbG93ZWQgdG8gdGhyb3cuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29uZD4KKyAgICBzdHJ1Y3QgdGhyb3dfdmFsdWVfYmFzZSA6IHB1YmxpYyBfQ29uZAorICAgIHsKKyAgICAgIHR5cGVkZWYgX0NvbmQgIAkJCQljb25kaXRpb25fdHlwZTsKKworICAgICAgdXNpbmcgY29uZGl0aW9uX3R5cGU6OnRocm93X2NvbmRpdGlvbmFsbHk7CisKKyAgICAgIHN0ZDo6c2l6ZV90CQkJICAgICAgIAlfTV9pOworCisjaWZuZGVmIF9HTElCQ1hYX0lTX0FHR1JFR0FURQorICAgICAgdGhyb3dfdmFsdWVfYmFzZSgpIDogX01faSgwKQorICAgICAgeyB0aHJvd19jb25kaXRpb25hbGx5KCk7IH0KKworICAgICAgdGhyb3dfdmFsdWVfYmFzZShjb25zdCB0aHJvd192YWx1ZV9iYXNlJiBfX3YpIDogX01faShfX3YuX01faSkKKyAgICAgIHsgdGhyb3dfY29uZGl0aW9uYWxseSgpOyB9CisKKyAgICAgIGV4cGxpY2l0IHRocm93X3ZhbHVlX2Jhc2UoY29uc3Qgc3RkOjpzaXplX3QgX19pKSA6IF9NX2koX19pKQorICAgICAgeyB0aHJvd19jb25kaXRpb25hbGx5KCk7IH0KKyNlbmRpZgorCisgICAgICB0aHJvd192YWx1ZV9iYXNlJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHRocm93X3ZhbHVlX2Jhc2UmIF9fdikKKyAgICAgIHsKKwl0aHJvd19jb25kaXRpb25hbGx5KCk7CisJX01faSA9IF9fdi5fTV9pOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgdGhyb3dfdmFsdWVfYmFzZSYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworCXRocm93X2NvbmRpdGlvbmFsbHkoKTsKKwkrK19NX2k7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbmQ+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHRocm93X3ZhbHVlX2Jhc2U8X0NvbmQ+JiBfX2EsIHRocm93X3ZhbHVlX2Jhc2U8X0NvbmQ+JiBfX2IpCisgICAgeworICAgICAgdHlwZWRlZiB0aHJvd192YWx1ZV9iYXNlPF9Db25kPiB0aHJvd192YWx1ZTsKKyAgICAgIHRocm93X3ZhbHVlOjp0aHJvd19jb25kaXRpb25hbGx5KCk7CisgICAgICB0aHJvd192YWx1ZSBvcmlnKF9fYSk7CisgICAgICBfX2EgPSBfX2I7CisgICAgICBfX2IgPSBvcmlnOworICAgIH0KKworICAvLyBHZW5lcmFsIGluc3RhbnRpYWJsZSB0eXBlcyByZXF1aXJlbWVudHMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Db25kPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCB0aHJvd192YWx1ZV9iYXNlPF9Db25kPiYgX19hLAorCSAgICAgICBjb25zdCB0aHJvd192YWx1ZV9iYXNlPF9Db25kPiYgX19iKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdGhyb3dfdmFsdWVfYmFzZTxfQ29uZD4gdGhyb3dfdmFsdWU7CisgICAgICB0aHJvd192YWx1ZTo6dGhyb3dfY29uZGl0aW9uYWxseSgpOworICAgICAgYm9vbCBfX3JldCA9IF9fYS5fTV9pID09IF9fYi5fTV9pOworICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29uZD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCB0aHJvd192YWx1ZV9iYXNlPF9Db25kPiYgX19hLAorCSAgICAgIGNvbnN0IHRocm93X3ZhbHVlX2Jhc2U8X0NvbmQ+JiBfX2IpCisgICAgeworICAgICAgdHlwZWRlZiB0aHJvd192YWx1ZV9iYXNlPF9Db25kPiB0aHJvd192YWx1ZTsKKyAgICAgIHRocm93X3ZhbHVlOjp0aHJvd19jb25kaXRpb25hbGx5KCk7CisgICAgICBib29sIF9fcmV0ID0gX19hLl9NX2kgPCBfX2IuX01faTsKKyAgICAgIHJldHVybiBfX3JldDsKKyAgICB9CisKKyAgLy8gTnVtZXJpYyBhbGdvcml0aG1zIGluc3RhbnRpYWJsZSB0eXBlcyByZXF1aXJlbWVudHMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Db25kPgorICAgIGlubGluZSB0aHJvd192YWx1ZV9iYXNlPF9Db25kPgorICAgIG9wZXJhdG9yKyhjb25zdCB0aHJvd192YWx1ZV9iYXNlPF9Db25kPiYgX19hLAorCSAgICAgIGNvbnN0IHRocm93X3ZhbHVlX2Jhc2U8X0NvbmQ+JiBfX2IpCisgICAgeworICAgICAgdHlwZWRlZiB0aHJvd192YWx1ZV9iYXNlPF9Db25kPiB0aHJvd192YWx1ZTsKKyAgICAgIHRocm93X3ZhbHVlOjp0aHJvd19jb25kaXRpb25hbGx5KCk7CisgICAgICB0aHJvd192YWx1ZSBfX3JldChfX2EuX01faSArIF9fYi5fTV9pKTsKKyAgICAgIHJldHVybiBfX3JldDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbmQ+CisgICAgaW5saW5lIHRocm93X3ZhbHVlX2Jhc2U8X0NvbmQ+CisgICAgb3BlcmF0b3ItKGNvbnN0IHRocm93X3ZhbHVlX2Jhc2U8X0NvbmQ+JiBfX2EsCisJICAgICAgY29uc3QgdGhyb3dfdmFsdWVfYmFzZTxfQ29uZD4mIF9fYikKKyAgICB7CisgICAgICB0eXBlZGVmIHRocm93X3ZhbHVlX2Jhc2U8X0NvbmQ+IHRocm93X3ZhbHVlOworICAgICAgdGhyb3dfdmFsdWU6OnRocm93X2NvbmRpdGlvbmFsbHkoKTsKKyAgICAgIHRocm93X3ZhbHVlIF9fcmV0KF9fYS5fTV9pIC0gX19iLl9NX2kpOworICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29uZD4KKyAgICBpbmxpbmUgdGhyb3dfdmFsdWVfYmFzZTxfQ29uZD4KKyAgICBvcGVyYXRvciooY29uc3QgdGhyb3dfdmFsdWVfYmFzZTxfQ29uZD4mIF9fYSwKKwkgICAgICBjb25zdCB0aHJvd192YWx1ZV9iYXNlPF9Db25kPiYgX19iKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdGhyb3dfdmFsdWVfYmFzZTxfQ29uZD4gdGhyb3dfdmFsdWU7CisgICAgICB0aHJvd192YWx1ZTo6dGhyb3dfY29uZGl0aW9uYWxseSgpOworICAgICAgdGhyb3dfdmFsdWUgX19yZXQoX19hLl9NX2kgKiBfX2IuX01faSk7CisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisKKyAgLy8vIFR5cGUgdGhyb3dpbmcgdmlhIGxpbWl0IGNvbmRpdGlvbi4KKyAgc3RydWN0IHRocm93X3ZhbHVlX2xpbWl0IDogcHVibGljIHRocm93X3ZhbHVlX2Jhc2U8bGltaXRfY29uZGl0aW9uPgorICB7CisgICAgdHlwZWRlZiB0aHJvd192YWx1ZV9iYXNlPGxpbWl0X2NvbmRpdGlvbj4gYmFzZV90eXBlOworCisjaWZuZGVmIF9HTElCQ1hYX0lTX0FHR1JFR0FURQorICAgIHRocm93X3ZhbHVlX2xpbWl0KCkgeyB9CisKKyAgICB0aHJvd192YWx1ZV9saW1pdChjb25zdCB0aHJvd192YWx1ZV9saW1pdCYgX19vdGhlcikKKyAgICA6IGJhc2VfdHlwZShfX290aGVyLl9NX2kpIHsgfQorCisgICAgZXhwbGljaXQgdGhyb3dfdmFsdWVfbGltaXQoY29uc3Qgc3RkOjpzaXplX3QgX19pKSA6IGJhc2VfdHlwZShfX2kpIHsgfQorI2VuZGlmCisgIH07CisKKyAgLy8vIFR5cGUgdGhyb3dpbmcgdmlhIHJhbmRvbSBjb25kaXRpb24uCisgIHN0cnVjdCB0aHJvd192YWx1ZV9yYW5kb20gOiBwdWJsaWMgdGhyb3dfdmFsdWVfYmFzZTxyYW5kb21fY29uZGl0aW9uPgorICB7CisgICAgdHlwZWRlZiB0aHJvd192YWx1ZV9iYXNlPHJhbmRvbV9jb25kaXRpb24+IGJhc2VfdHlwZTsKKworI2lmbmRlZiBfR0xJQkNYWF9JU19BR0dSRUdBVEUKKyAgICB0aHJvd192YWx1ZV9yYW5kb20oKSB7IH0KKworICAgIHRocm93X3ZhbHVlX3JhbmRvbShjb25zdCB0aHJvd192YWx1ZV9yYW5kb20mIF9fb3RoZXIpCisgICAgOiBiYXNlX3R5cGUoX19vdGhlci5fTV9pKSB7IH0KKworCisgICAgZXhwbGljaXQgdGhyb3dfdmFsdWVfcmFuZG9tKGNvbnN0IHN0ZDo6c2l6ZV90IF9faSkgOiBiYXNlX3R5cGUoX19pKSB7IH0KKyNlbmRpZgorICB9OworCisKKyAgLyoqCisgICAqICBAYnJpZWYgQWxsb2NhdG9yIGNsYXNzIHdpdGggbG9nZ2luZyBhbmQgZXhjZXB0aW9uIGdlbmVyYXRpb24gY29udHJvbC4KKyAgICogSW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBhbiBhbGxvY2F0b3JfdHlwZSBpbiB0ZW1wbGF0aXplZCBjb2RlLgorICAgKiAgQGluZ3JvdXAgYWxsb2NhdG9ycworICAgKgorICAgKiAgTm90ZTogRGVhbGxvY2F0ZSBub3QgYWxsb3dlZCB0byB0aHJvdy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbmQ+CisgICAgY2xhc3MgdGhyb3dfYWxsb2NhdG9yX2Jhc2UKKyAgICA6IHB1YmxpYyBhbm5vdGF0ZV9iYXNlLCBwdWJsaWMgX0NvbmQKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBzaXplX3QgCQkJCXNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgcHRyZGlmZl90IAkJCWRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RwIAkJCQl2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlKiAJCQlwb2ludGVyOworICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiAJCWNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHZhbHVlX3R5cGUmIAkJCXJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgCQljb25zdF9yZWZlcmVuY2U7CisKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBfQ29uZAkJCQljb25kaXRpb25fdHlwZTsKKworICAgICAgc3RkOjphbGxvY2F0b3I8dmFsdWVfdHlwZT4gCQlfTV9hbGxvY2F0b3I7CisKKyAgICAgIHVzaW5nIGNvbmRpdGlvbl90eXBlOjp0aHJvd19jb25kaXRpb25hbGx5OworCisgICAgcHVibGljOgorICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKKyAgICAgIHsgcmV0dXJuIF9NX2FsbG9jYXRvci5tYXhfc2l6ZSgpOyB9CisKKyAgICAgIHBvaW50ZXIKKyAgICAgIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIHN0ZDo6YWxsb2NhdG9yPHZvaWQ+Ojpjb25zdF9wb2ludGVyIGhpbnQgPSAwKQorICAgICAgeworCWlmIChfX24gPiB0aGlzLT5tYXhfc2l6ZSgpKQorCSAgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOworCisJdGhyb3dfY29uZGl0aW9uYWxseSgpOworCXBvaW50ZXIgY29uc3QgYSA9IF9NX2FsbG9jYXRvci5hbGxvY2F0ZShfX24sIGhpbnQpOworCWluc2VydChhLCBzaXplb2YodmFsdWVfdHlwZSkgKiBfX24pOworCXJldHVybiBhOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IHZhbHVlX3R5cGUmIHZhbCkKKyAgICAgIHsgcmV0dXJuIF9NX2FsbG9jYXRvci5jb25zdHJ1Y3QoX19wLCB2YWwpOyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJdm9pZAorCWNvbnN0cnVjdChwb2ludGVyIF9fcCwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeyByZXR1cm4gX01fYWxsb2NhdG9yLmNvbnN0cnVjdChfX3AsIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7IH0KKyNlbmRpZgorCisgICAgICB2b2lkCisgICAgICBkZXN0cm95KHBvaW50ZXIgX19wKQorICAgICAgeyBfTV9hbGxvY2F0b3IuZGVzdHJveShfX3ApOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCisgICAgICB7CisJZXJhc2UoX19wLCBzaXplb2YodmFsdWVfdHlwZSkgKiBfX24pOworCV9NX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgX19uKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgY2hlY2tfYWxsb2NhdGVkKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQorICAgICAgeworCXNpemVfdHlwZSBfX3QgPSBzaXplb2YodmFsdWVfdHlwZSkgKiBfX247CisJYW5ub3RhdGVfYmFzZTo6Y2hlY2tfYWxsb2NhdGVkKF9fcCwgX190KTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgY2hlY2tfYWxsb2NhdGVkKHNpemVfdHlwZSBfX24pCisgICAgICB7IGFubm90YXRlX2Jhc2U6OmNoZWNrX2FsbG9jYXRlZChfX24pOyB9CisgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29uZD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgdGhyb3dfYWxsb2NhdG9yX2Jhc2U8X1RwLCBfQ29uZD4mLAorCSAgICAgICBjb25zdCB0aHJvd19hbGxvY2F0b3JfYmFzZTxfVHAsIF9Db25kPiYpCisgICAgeyByZXR1cm4gdHJ1ZTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbmQ+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHRocm93X2FsbG9jYXRvcl9iYXNlPF9UcCwgX0NvbmQ+JiwKKwkgICAgICAgY29uc3QgdGhyb3dfYWxsb2NhdG9yX2Jhc2U8X1RwLCBfQ29uZD4mKQorICAgIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgLy8vIEFsbG9jYXRvciB0aHJvd2luZyB2aWEgbGltaXQgY29uZGl0aW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IHRocm93X2FsbG9jYXRvcl9saW1pdAorICAgIDogcHVibGljIHRocm93X2FsbG9jYXRvcl9iYXNlPF9UcCwgbGltaXRfY29uZGl0aW9uPgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisJc3RydWN0IHJlYmluZAorCXsgdHlwZWRlZiB0aHJvd19hbGxvY2F0b3JfbGltaXQ8X1RwMT4gb3RoZXI7IH07CisKKyAgICAgIHRocm93X2FsbG9jYXRvcl9saW1pdCgpIHRocm93KCkgeyB9CisKKyAgICAgIHRocm93X2FsbG9jYXRvcl9saW1pdChjb25zdCB0aHJvd19hbGxvY2F0b3JfbGltaXQmKSB0aHJvdygpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCXRocm93X2FsbG9jYXRvcl9saW1pdChjb25zdCB0aHJvd19hbGxvY2F0b3JfbGltaXQ8X1RwMT4mKSB0aHJvdygpIHsgfQorCisgICAgICB+dGhyb3dfYWxsb2NhdG9yX2xpbWl0KCkgdGhyb3coKSB7IH0KKyAgICB9OworCisgIC8vLyBBbGxvY2F0b3IgdGhyb3dpbmcgdmlhIHJhbmRvbSBjb25kaXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgdGhyb3dfYWxsb2NhdG9yX3JhbmRvbQorICAgIDogcHVibGljIHRocm93X2FsbG9jYXRvcl9iYXNlPF9UcCwgcmFuZG9tX2NvbmRpdGlvbj4KKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCXN0cnVjdCByZWJpbmQKKwl7IHR5cGVkZWYgdGhyb3dfYWxsb2NhdG9yX3JhbmRvbTxfVHAxPiBvdGhlcjsgfTsKKworICAgICAgdGhyb3dfYWxsb2NhdG9yX3JhbmRvbSgpIHRocm93KCkgeyB9CisKKyAgICAgIHRocm93X2FsbG9jYXRvcl9yYW5kb20oY29uc3QgdGhyb3dfYWxsb2NhdG9yX3JhbmRvbSYpIHRocm93KCkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisJdGhyb3dfYWxsb2NhdG9yX3JhbmRvbShjb25zdCB0aHJvd19hbGxvY2F0b3JfcmFuZG9tPF9UcDE+JikgdGhyb3coKSB7IH0KKworICAgICAgfnRocm93X2FsbG9jYXRvcl9yYW5kb20oKSB0aHJvdygpIHsgfQorICAgIH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisKKyMgaW5jbHVkZSA8Yml0cy9mdW5jdGlvbmFsX2hhc2guaD4KKworbmFtZXNwYWNlIHN0ZAoreworICAvLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb24gb2Ygc3RkOjpoYXNoIGZvciBfX2dudV9jeHg6OnRocm93X3ZhbHVlX2xpbWl0LgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGhhc2g8X19nbnVfY3h4Ojp0aHJvd192YWx1ZV9saW1pdD4KKyAgICA6IHB1YmxpYyBzdGQ6OnVuYXJ5X2Z1bmN0aW9uPF9fZ251X2N4eDo6dGhyb3dfdmFsdWVfbGltaXQsIHNpemVfdD4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX19nbnVfY3h4Ojp0aHJvd192YWx1ZV9saW1pdCYgX192YWwpIGNvbnN0CisgICAgICB7CisJc3RkOjpoYXNoPHN0ZDo6c2l6ZV90PiBoOworCXNpemVfdCBfX3Jlc3VsdCA9IGgoX192YWwuX01faSk7CisJcmV0dXJuIF9fcmVzdWx0OworICAgICAgfQorICAgIH07CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIG9mIHN0ZDo6aGFzaCBmb3IgX19nbnVfY3h4Ojp0aHJvd192YWx1ZV9saW1pdC4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBoYXNoPF9fZ251X2N4eDo6dGhyb3dfdmFsdWVfcmFuZG9tPgorICAgIDogcHVibGljIHN0ZDo6dW5hcnlfZnVuY3Rpb248X19nbnVfY3h4Ojp0aHJvd192YWx1ZV9yYW5kb20sIHNpemVfdD4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX19nbnVfY3h4Ojp0aHJvd192YWx1ZV9yYW5kb20mIF9fdmFsKSBjb25zdAorICAgICAgeworCXN0ZDo6aGFzaDxzdGQ6OnNpemVfdD4gaDsKKwlzaXplX3QgX19yZXN1bHQgPSBoKF9fdmFsLl9NX2kpOworCXJldHVybiBfX3Jlc3VsdDsKKyAgICAgIH0KKyAgICB9OworfSAvLyBlbmQgbmFtZXNwYWNlIHN0ZAorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvdHlwZV90cmFpdHMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3R5cGVfdHJhaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI0Y2U0ZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3R5cGVfdHJhaXRzLmgKQEAgLTAsMCArMSwyMDQgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZXh0L3R5cGVfdHJhaXRzLmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9FWFRfVFlQRV9UUkFJVFMKKyNkZWZpbmUgX0VYVF9UWVBFX1RSQUlUUyAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Yml0cy9jcHBfdHlwZV90cmFpdHMuaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKworICAvLyBEZWZpbmUgYSBuZXN0ZWQgdHlwZSBpZiBzb21lIHByZWRpY2F0ZSBob2xkcy4KKyAgdGVtcGxhdGU8Ym9vbCwgdHlwZW5hbWU+CisgICAgc3RydWN0IF9fZW5hYmxlX2lmIAorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fZW5hYmxlX2lmPHRydWUsIF9UcD4KKyAgICB7IHR5cGVkZWYgX1RwIF9fdHlwZTsgfTsKKworCisgIC8vIENvbmRpdGlvbmFsIGV4cHJlc3Npb24gZm9yIHR5cGVzLiBJZiB0cnVlLCBmaXJzdCwgaWYgZmFsc2UsIHNlY29uZC4KKyAgdGVtcGxhdGU8Ym9vbCBfQ29uZCwgdHlwZW5hbWUgX0lmdHJ1ZSwgdHlwZW5hbWUgX0lmZmFsc2U+CisgICAgc3RydWN0IF9fY29uZGl0aW9uYWxfdHlwZQorICAgIHsgdHlwZWRlZiBfSWZ0cnVlIF9fdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSWZ0cnVlLCB0eXBlbmFtZSBfSWZmYWxzZT4KKyAgICBzdHJ1Y3QgX19jb25kaXRpb25hbF90eXBlPGZhbHNlLCBfSWZ0cnVlLCBfSWZmYWxzZT4KKyAgICB7IHR5cGVkZWYgX0lmZmFsc2UgX190eXBlOyB9OworCisKKyAgLy8gR2l2ZW4gYW4gaW50ZWdyYWwgYnVpbHRpbiB0eXBlLCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgdW5zaWduZWQgdHlwZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2FkZF91bnNpZ25lZAorICAgIHsgCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX19lbmFibGVfaWY8c3RkOjpfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgX1RwPiBfX2lmX3R5cGU7CisgICAgICAKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faWZfdHlwZTo6X190eXBlIF9fdHlwZTsgCisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fYWRkX3Vuc2lnbmVkPGNoYXI+CisgICAgeyB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX190eXBlOyB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19hZGRfdW5zaWduZWQ8c2lnbmVkIGNoYXI+CisgICAgeyB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX190eXBlOyB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19hZGRfdW5zaWduZWQ8c2hvcnQ+CisgICAgeyB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdHlwZTsgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fYWRkX3Vuc2lnbmVkPGludD4KKyAgICB7IHR5cGVkZWYgdW5zaWduZWQgaW50IF9fdHlwZTsgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fYWRkX3Vuc2lnbmVkPGxvbmc+CisgICAgeyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX190eXBlOyB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19hZGRfdW5zaWduZWQ8bG9uZyBsb25nPgorICAgIHsgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgX190eXBlOyB9OworCisgIC8vIERlY2xhcmUgYnV0IGRvbid0IGRlZmluZS4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2FkZF91bnNpZ25lZDxib29sPjsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fYWRkX3Vuc2lnbmVkPHdjaGFyX3Q+OworCisKKyAgLy8gR2l2ZW4gYW4gaW50ZWdyYWwgYnVpbHRpbiB0eXBlLCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgc2lnbmVkIHR5cGUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19yZW1vdmVfdW5zaWduZWQKKyAgICB7IAorICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIF9fZW5hYmxlX2lmPHN0ZDo6X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIF9UcD4gX19pZl90eXBlOworICAgICAgCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lmX3R5cGU6Ol9fdHlwZSBfX3R5cGU7IAorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX3JlbW92ZV91bnNpZ25lZDxjaGFyPgorICAgIHsgdHlwZWRlZiBzaWduZWQgY2hhciBfX3R5cGU7IH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX3JlbW92ZV91bnNpZ25lZDx1bnNpZ25lZCBjaGFyPgorICAgIHsgdHlwZWRlZiBzaWduZWQgY2hhciBfX3R5cGU7IH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX3JlbW92ZV91bnNpZ25lZDx1bnNpZ25lZCBzaG9ydD4KKyAgICB7IHR5cGVkZWYgc2hvcnQgX190eXBlOyB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19yZW1vdmVfdW5zaWduZWQ8dW5zaWduZWQgaW50PgorICAgIHsgdHlwZWRlZiBpbnQgX190eXBlOyB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19yZW1vdmVfdW5zaWduZWQ8dW5zaWduZWQgbG9uZz4KKyAgICB7IHR5cGVkZWYgbG9uZyBfX3R5cGU7IH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX3JlbW92ZV91bnNpZ25lZDx1bnNpZ25lZCBsb25nIGxvbmc+CisgICAgeyB0eXBlZGVmIGxvbmcgbG9uZyBfX3R5cGU7IH07CisKKyAgLy8gRGVjbGFyZSBidXQgZG9uJ3QgZGVmaW5lLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fcmVtb3ZlX3Vuc2lnbmVkPGJvb2w+OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19yZW1vdmVfdW5zaWduZWQ8d2NoYXJfdD47CisKKworICAvLyBGb3IgdXNlIGluIHN0cmluZyBhbmQgdnN0cmluZy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX2lzX251bGxfcG9pbnRlcihfVHlwZSogX19wdHIpCisgICAgeyByZXR1cm4gX19wdHIgPT0gMDsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgorICAgIGlubGluZSBib29sCisgICAgX19pc19udWxsX3BvaW50ZXIoX1R5cGUpCisgICAgeyByZXR1cm4gZmFsc2U7IH0KKworCisgIC8vIEZvciBjb21wbGV4IGFuZCBjbWF0aAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJvb2wgPSBzdGQ6Ol9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlPgorICAgIHN0cnVjdCBfX3Byb21vdGUKKyAgICB7IHR5cGVkZWYgZG91YmxlIF9fdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fcHJvbW90ZTxfVHAsIGZhbHNlPgorICAgIHsgdHlwZWRlZiBfVHAgX190eXBlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIHN0cnVjdCBfX3Byb21vdGVfMgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcHJvbW90ZTxfVXA+OjpfX3R5cGUgX190eXBlMjsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX190eXBlb2ZfXyhfX3R5cGUxKCkgKyBfX3R5cGUyKCkpIF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwLCB0eXBlbmFtZSBfVnA+CisgICAgc3RydWN0IF9fcHJvbW90ZV8zCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19wcm9tb3RlPF9VcD46Ol9fdHlwZSBfX3R5cGUyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3Byb21vdGU8X1ZwPjo6X190eXBlIF9fdHlwZTM7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9fdHlwZW9mX18oX190eXBlMSgpICsgX190eXBlMigpICsgX190eXBlMygpKSBfX3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcCwgdHlwZW5hbWUgX1ZwLCB0eXBlbmFtZSBfV3A+CisgICAgc3RydWN0IF9fcHJvbW90ZV80CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19wcm9tb3RlPF9VcD46Ol9fdHlwZSBfX3R5cGUyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3Byb21vdGU8X1ZwPjo6X190eXBlIF9fdHlwZTM7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcHJvbW90ZTxfV3A+OjpfX3R5cGUgX190eXBlNDsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX190eXBlb2ZfXyhfX3R5cGUxKCkgKyBfX3R5cGUyKCkgKyBfX3R5cGUzKCkgKyBfX3R5cGU0KCkpIF9fdHlwZTsKKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3R5cGVsaXN0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC90eXBlbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMWNhYzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC90eXBlbGlzdC5oCkBAIC0wLDAgKzEsNTQ0IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZAorLy8gdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lIG9mCisvLyB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHR5cGVsaXN0LmgKKyAqIENvbnRhaW5zIHR5cGVsaXN0X2NoYWluIGRlZmluaXRpb25zLgorICogVHlwZWxpc3RzIGFyZSBhbiBpZGVhIGJ5IEFuZHJlaSBBbGV4YW5kcmVzY3UuCisgKi8KKworI2lmbmRlZiBfVFlQRUxJU1RfSAorI2RlZmluZSBfVFlQRUxJU1RfSCAxCisKKyNpbmNsdWRlIDxleHQvdHlwZV90cmFpdHMuaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKworLyoqIEBuYW1lc3BhY2UgX19nbnVfY3h4Ojp0eXBlbGlzdAorICogIEBicmllZiBHTlUgdHlwZWxpc3QgZXh0ZW5zaW9ucyBmb3IgcHVibGljIGNvbXBpbGUtdGltZSB1c2UuCisqLworbmFtZXNwYWNlIHR5cGVsaXN0Cit7CisgIHN0cnVjdCBudWxsX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIFJvb3Q+CisgICAgc3RydWN0IG5vZGUKKyAgICB7CisgICAgICB0eXBlZGVmIFJvb3QgCXJvb3Q7CisgICAgfTsKKworICAvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucyBvZiBmdW5jdG9ycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgSGQsIHR5cGVuYW1lIFR5cGVsaXN0PgorICAgIHN0cnVjdCBjaGFpbgorICAgIHsKKyAgICAgIHR5cGVkZWYgSGQgCWhlYWQ7CisgICAgICB0eXBlZGVmIFR5cGVsaXN0IAl0YWlsOworICAgIH07CisKKyAgLy8gQXBwbHkgYWxsIHR5cGVsaXN0IHR5cGVzIHRvIHVuYXJ5IGZ1bmN0b3IuCisgIHRlbXBsYXRlPHR5cGVuYW1lIEZuLCB0eXBlbmFtZSBUeXBlbGlzdD4KKyAgICB2b2lkCisgICAgYXBwbHkoRm4mLCBUeXBlbGlzdCk7CisKKyAgLy8vIEFwcGx5IGFsbCB0eXBlbGlzdCB0eXBlcyB0byBnZW5lcmF0b3IgZnVuY3Rvci4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgR24sIHR5cGVuYW1lIFR5cGVsaXN0PgorICAgIHZvaWQKKyAgICBhcHBseV9nZW5lcmF0b3IoR24mLCBUeXBlbGlzdCk7CisKKyAgLy8gQXBwbHkgYWxsIHR5cGVsaXN0IHR5cGVzIGFuZCB2YWx1ZXMgdG8gZ2VuZXJhdG9yIGZ1bmN0b3IuCisgIHRlbXBsYXRlPHR5cGVuYW1lIEduLCB0eXBlbmFtZSBUeXBlbGlzdFQsIHR5cGVuYW1lIFR5cGVsaXN0Vj4KKyAgICB2b2lkCisgICAgYXBwbHlfZ2VuZXJhdG9yKEduJiwgVHlwZWxpc3RULCBUeXBlbGlzdFYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGVsaXN0MCwgdHlwZW5hbWUgVHlwZWxpc3QxPgorICAgIHN0cnVjdCBhcHBlbmQ7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZWxpc3RfVHlwZWxpc3Q+CisgICAgc3RydWN0IGFwcGVuZF90eXBlbGlzdDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlbGlzdCwgdHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgY29udGFpbnM7CisgCisgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGVsaXN0LCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBQcmVkPgorICAgIHN0cnVjdCBmaWx0ZXI7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZWxpc3QsIGludCBpPgorICAgIHN0cnVjdCBhdF9pbmRleDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlbGlzdCwgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgVHJhbnNmb3JtPgorICAgIHN0cnVjdCB0cmFuc2Zvcm07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZWxpc3RfVHlwZWxpc3Q+CisgICAgc3RydWN0IGZsYXR0ZW47CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZWxpc3Q+CisgICAgc3RydWN0IGZyb21fZmlyc3Q7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVDE+CisgICAgc3RydWN0IGNyZWF0ZTE7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgorICAgIHN0cnVjdCBjcmVhdGUyOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDM+CisgICAgc3RydWN0IGNyZWF0ZTM7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQ+CisgICAgc3RydWN0IGNyZWF0ZTQ7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1PgorICAgIHN0cnVjdCBjcmVhdGU1OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIAorCSAgIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDY+CisgICAgc3RydWN0IGNyZWF0ZTY7Cit9IC8vIG5hbWVzcGFjZSB0eXBlbGlzdAorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKworbmFtZXNwYWNlIHR5cGVsaXN0IAoreworbmFtZXNwYWNlIGRldGFpbAoreworICB0ZW1wbGF0ZTx0eXBlbmFtZSBGbiwgdHlwZW5hbWUgVHlwZWxpc3RfQ2hhaW4+CisgICAgc3RydWN0IGFwcGx5XzsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBGbiwgdHlwZW5hbWUgSGQsIHR5cGVuYW1lIFRsPgorICAgIHN0cnVjdCBhcHBseV88Rm4sIGNoYWluPEhkLCBUbD4gPgorICAgIHsKKyAgICAgIHZvaWQKKyAgICAgIG9wZXJhdG9yKCkoRm4mIGYpCisgICAgICB7CisJZi5vcGVyYXRvcigpKEhkKCkpOworCWFwcGx5XzxGbiwgVGw+IG5leHQ7CisJbmV4dChmKTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIEZuPgorICAgIHN0cnVjdCBhcHBseV88Rm4sIG51bGxfdHlwZT4KKyAgICB7CisgICAgICB2b2lkCisgICAgICBvcGVyYXRvcigpKEZuJikgeyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBHbiwgdHlwZW5hbWUgVHlwZWxpc3RfQ2hhaW4+CisgICAgc3RydWN0IGFwcGx5X2dlbmVyYXRvcjFfOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIEduLCB0eXBlbmFtZSBIZCwgdHlwZW5hbWUgVGw+CisgICAgc3RydWN0IGFwcGx5X2dlbmVyYXRvcjFfPEduLCBjaGFpbjxIZCwgVGw+ID4KKyAgICB7CisgICAgICB2b2lkCisgICAgICBvcGVyYXRvcigpKEduJiBnKQorICAgICAgeworCWcudGVtcGxhdGUgb3BlcmF0b3IoKTxIZD4oKTsKKwlhcHBseV9nZW5lcmF0b3IxXzxHbiwgVGw+IG5leHQ7CisJbmV4dChnKTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIEduPgorICAgIHN0cnVjdCBhcHBseV9nZW5lcmF0b3IxXzxHbiwgbnVsbF90eXBlPgorICAgIHsKKyAgICAgIHZvaWQKKyAgICAgIG9wZXJhdG9yKCkoR24mKSB7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIEduLCB0eXBlbmFtZSBUeXBlbGlzdFRfQ2hhaW4sIHR5cGVuYW1lIFR5cGVsaXN0Vl9DaGFpbj4KKyAgICBzdHJ1Y3QgYXBwbHlfZ2VuZXJhdG9yMl87CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgR24sIHR5cGVuYW1lIEhkMSwgdHlwZW5hbWUgVGxULCB0eXBlbmFtZSBIZDIsIHR5cGVuYW1lIFRsVj4KKyAgICBzdHJ1Y3QgYXBwbHlfZ2VuZXJhdG9yMl88R24sIGNoYWluPEhkMSwgVGxUPiwgY2hhaW48SGQyLCBUbFY+ID4KKyAgICB7CisgICAgICB2b2lkCisgICAgICBvcGVyYXRvcigpKEduJiBnKQorICAgICAgeworCWcudGVtcGxhdGUgb3BlcmF0b3IoKTxIZDEsIEhkMj4oKTsKKwlhcHBseV9nZW5lcmF0b3IyXzxHbiwgVGxULCBUbFY+IG5leHQ7CisJbmV4dChnKTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIEduPgorICAgIHN0cnVjdCBhcHBseV9nZW5lcmF0b3IyXzxHbiwgbnVsbF90eXBlLCBudWxsX3R5cGU+CisgICAgeworICAgICAgdm9pZAorICAgICAgb3BlcmF0b3IoKShHbiYpIHsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZWxpc3RfQ2hhaW4wLCB0eXBlbmFtZSBUeXBlbGlzdF9DaGFpbjE+CisgICAgc3RydWN0IGFwcGVuZF87CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgSGQsIHR5cGVuYW1lIFRsLCB0eXBlbmFtZSBUeXBlbGlzdF9DaGFpbj4KKyAgICBzdHJ1Y3QgYXBwZW5kXzxjaGFpbjxIZCwgVGw+LCBUeXBlbGlzdF9DaGFpbj4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgYXBwZW5kXzxUbCwgVHlwZWxpc3RfQ2hhaW4+IAkJCWFwcGVuZF90eXBlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBjaGFpbjxIZCwgdHlwZW5hbWUgYXBwZW5kX3R5cGU6OnR5cGU+IAkJdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGVsaXN0X0NoYWluPgorICAgIHN0cnVjdCBhcHBlbmRfPG51bGxfdHlwZSwgVHlwZWxpc3RfQ2hhaW4+CisgICAgeworICAgICAgdHlwZWRlZiBUeXBlbGlzdF9DaGFpbiAJCQkgICAgICAJCXR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlbGlzdF9DaGFpbj4KKyAgICBzdHJ1Y3QgYXBwZW5kXzxUeXBlbGlzdF9DaGFpbiwgbnVsbF90eXBlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgVHlwZWxpc3RfQ2hhaW4gCQkJCQl0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBhcHBlbmRfPG51bGxfdHlwZSwgbnVsbF90eXBlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgbnVsbF90eXBlIAkJCQkJdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGVsaXN0X1R5cGVsaXN0X0NoYWluPgorICAgIHN0cnVjdCBhcHBlbmRfdHlwZWxpc3RfOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIEhkPgorICAgIHN0cnVjdCBhcHBlbmRfdHlwZWxpc3RfPGNoYWluPEhkLCBudWxsX3R5cGU+ID4KKyAgICB7CisgICAgICB0eXBlZGVmIGNoYWluPEhkLCBudWxsX3R5cGU+IAkJCQl0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgSGQsIHR5cGVuYW1lIFRsPgorICAgIHN0cnVjdCBhcHBlbmRfdHlwZWxpc3RfPGNoYWluPCBIZCwgVGw+ID4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXBwZW5kX3R5cGVsaXN0XzxUbD46OnR5cGUgCQlyZXN0X3R5cGU7CisgICAgICAKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGFwcGVuZDxIZCwgbm9kZTxyZXN0X3R5cGU+ID46OnR5cGU6OnJvb3QJdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGVsaXN0X0NoYWluLCB0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBjb250YWluc187CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgY29udGFpbnNfPG51bGxfdHlwZSwgVD4KKyAgICB7CisgICAgICBlbnVtCisJeworCSAgdmFsdWUgPSBmYWxzZQorCX07CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBIZCwgdHlwZW5hbWUgVGwsIHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGNvbnRhaW5zXzxjaGFpbjxIZCwgVGw+LCBUPgorICAgIHsKKyAgICAgIGVudW0KKwl7CisJICB2YWx1ZSA9IGNvbnRhaW5zXzxUbCwgVD46OnZhbHVlCisJfTsKKyAgICB9OworICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVGwsIHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGNvbnRhaW5zXzxjaGFpbjxULCBUbD4sIFQ+CisgICAgeworICAgICAgZW51bQorCXsKKwkgIHZhbHVlID0gdHJ1ZQorCX07CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlbGlzdF9DaGFpbiwgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUHJlZD4KKyAgICBzdHJ1Y3QgY2hhaW5fZmlsdGVyXzsKKworICB0ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBQcmVkPgorICAgIHN0cnVjdCBjaGFpbl9maWx0ZXJfPG51bGxfdHlwZSwgUHJlZD4KKyAgICB7CisgICAgICB0eXBlZGVmIG51bGxfdHlwZSAJCQkJCXR5cGU7CisgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgSGQsIHR5cGVuYW1lIFRsLCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBQcmVkPgorICAgIHN0cnVjdCBjaGFpbl9maWx0ZXJfPGNoYWluPEhkLCBUbD4sIFByZWQ+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICBlbnVtCisJeworCSAgaW5jbHVkZV9oZCA9IFByZWQ8SGQ+Ojp2YWx1ZQorCX07CisgICAgICAKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY2hhaW5fZmlsdGVyXzxUbCwgUHJlZD46OnR5cGUgCQlyZXN0X3R5cGU7CisgICAgICB0eXBlZGVmIGNoYWluPEhkLCByZXN0X3R5cGU+IAkJCQljaGFpbl90eXBlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2NvbmRpdGlvbmFsX3R5cGU8aW5jbHVkZV9oZCwgY2hhaW5fdHlwZSwgcmVzdF90eXBlPjo6X190eXBlIHR5cGU7CisgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZWxpc3RfQ2hhaW4sIGludCBpPgorICAgIHN0cnVjdCBjaGFpbl9hdF9pbmRleF87CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgSGQsIHR5cGVuYW1lIFRsPgorICAgIHN0cnVjdCBjaGFpbl9hdF9pbmRleF88Y2hhaW48SGQsIFRsPiwgMD4KKyAgICB7CisgICAgICB0eXBlZGVmIEhkIAkJCQkJCXR5cGU7CisgICAgfTsKKyAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIEhkLCB0eXBlbmFtZSBUbCwgaW50IGk+CisgICAgc3RydWN0IGNoYWluX2F0X2luZGV4XzxjaGFpbjxIZCwgVGw+LCBpPgorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY2hhaW5fYXRfaW5kZXhfPFRsLCBpIC0gMT46OnR5cGUgCXR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBUeXBlbGlzdF9DaGFpbiwgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgVHJhbnNmb3JtPgorICAgIHN0cnVjdCBjaGFpbl90cmFuc2Zvcm1fOworCisgIHRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFRyYW5zZm9ybT4KKyAgICBzdHJ1Y3QgY2hhaW5fdHJhbnNmb3JtXzxudWxsX3R5cGUsIFRyYW5zZm9ybT4KKyAgICB7CisgICAgICB0eXBlZGVmIG51bGxfdHlwZSAJCQkJCXR5cGU7CisgICAgfTsKKyAgCisgIHRlbXBsYXRlPGNsYXNzIEhkLCBjbGFzcyBUbCwgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgVHJhbnNmb3JtPgorICAgIHN0cnVjdCBjaGFpbl90cmFuc2Zvcm1fPGNoYWluPEhkLCBUbD4sIFRyYW5zZm9ybT4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY2hhaW5fdHJhbnNmb3JtXzxUbCwgVHJhbnNmb3JtPjo6dHlwZSAJcmVzdF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBUcmFuc2Zvcm08SGQ+Ojp0eXBlIAkJCXRyYW5zZm9ybV90eXBlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBjaGFpbjx0cmFuc2Zvcm1fdHlwZSwgcmVzdF90eXBlPiAJCQl0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZWxpc3RfVHlwZWxpc3RfQ2hhaW4+CisgICAgc3RydWN0IGNoYWluX2ZsYXR0ZW5fOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIEhkX1RsPgorICAgIHN0cnVjdCBjaGFpbl9mbGF0dGVuXzxjaGFpbjxIZF9UbCwgbnVsbF90eXBlPiA+CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBIZF9UbDo6cm9vdCAJCQkJdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIEhkX1R5cGVsaXN0LCBjbGFzcyBUbF9UeXBlbGlzdD4KKyAgICBzdHJ1Y3QgY2hhaW5fZmxhdHRlbl88Y2hhaW48SGRfVHlwZWxpc3QsIFRsX1R5cGVsaXN0PiA+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGNoYWluX2ZsYXR0ZW5fPFRsX1R5cGVsaXN0Pjo6dHlwZSAJcmVzdF90eXBlOworICAgICAgdHlwZWRlZiBhcHBlbmQ8SGRfVHlwZWxpc3QsIG5vZGU8cmVzdF90eXBlPiA+CQlhcHBlbmRfdHlwZTsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGFwcGVuZF90eXBlOjp0eXBlOjpyb290IAkJCXR5cGU7CisgICAgfTsKK30gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgdHlwZWxpc3QKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZGVmaW5lIF9HTElCQ1hYX1RZUEVMSVNUX0NIQUlOMShYMCkgX19nbnVfY3h4Ojp0eXBlbGlzdDo6Y2hhaW48WDAsIF9fZ251X2N4eDo6dHlwZWxpc3Q6Om51bGxfdHlwZT4KKyNkZWZpbmUgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU4yKFgwLCBYMSkgX19nbnVfY3h4Ojp0eXBlbGlzdDo6Y2hhaW48WDAsIF9HTElCQ1hYX1RZUEVMSVNUX0NIQUlOMShYMSkgPgorI2RlZmluZSBfR0xJQkNYWF9UWVBFTElTVF9DSEFJTjMoWDAsIFgxLCBYMikgX19nbnVfY3h4Ojp0eXBlbGlzdDo6Y2hhaW48WDAsIF9HTElCQ1hYX1RZUEVMSVNUX0NIQUlOMihYMSwgWDIpID4KKyNkZWZpbmUgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU40KFgwLCBYMSwgWDIsIFgzKSBfX2dudV9jeHg6OnR5cGVsaXN0OjpjaGFpbjxYMCwgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU4zKFgxLCBYMiwgWDMpID4KKyNkZWZpbmUgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU41KFgwLCBYMSwgWDIsIFgzLCBYNCkgX19nbnVfY3h4Ojp0eXBlbGlzdDo6Y2hhaW48WDAsIF9HTElCQ1hYX1RZUEVMSVNUX0NIQUlONChYMSwgWDIsIFgzLCBYNCkgPgorI2RlZmluZSBfR0xJQkNYWF9UWVBFTElTVF9DSEFJTjYoWDAsIFgxLCBYMiwgWDMsIFg0LCBYNSkgX19nbnVfY3h4Ojp0eXBlbGlzdDo6Y2hhaW48WDAsIF9HTElCQ1hYX1RZUEVMSVNUX0NIQUlONShYMSwgWDIsIFgzLCBYNCwgWDUpID4KKyNkZWZpbmUgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU43KFgwLCBYMSwgWDIsIFgzLCBYNCwgWDUsIFg2KSBfX2dudV9jeHg6OnR5cGVsaXN0OjpjaGFpbjxYMCwgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU42KFgxLCBYMiwgWDMsIFg0LCBYNSwgWDYpID4KKyNkZWZpbmUgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU44KFgwLCBYMSwgWDIsIFgzLCBYNCwgWDUsIFg2LCBYNykgX19nbnVfY3h4Ojp0eXBlbGlzdDo6Y2hhaW48WDAsIF9HTElCQ1hYX1RZUEVMSVNUX0NIQUlONyhYMSwgWDIsIFgzLCBYNCwgWDUsIFg2LCBYNykgPgorI2RlZmluZSBfR0xJQkNYWF9UWVBFTElTVF9DSEFJTjkoWDAsIFgxLCBYMiwgWDMsIFg0LCBYNSwgWDYsIFg3LCBYOCkgX19nbnVfY3h4Ojp0eXBlbGlzdDo6Y2hhaW48WDAsIF9HTElCQ1hYX1RZUEVMSVNUX0NIQUlOOChYMSwgWDIsIFgzLCBYNCwgWDUsIFg2LCBYNywgWDgpID4KKyNkZWZpbmUgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU4xMChYMCwgWDEsIFgyLCBYMywgWDQsIFg1LCBYNiwgWDcsIFg4LCBYOSkgX19nbnVfY3h4Ojp0eXBlbGlzdDo6Y2hhaW48WDAsIF9HTElCQ1hYX1RZUEVMSVNUX0NIQUlOOShYMSwgWDIsIFgzLCBYNCwgWDUsIFg2LCBYNywgWDgsIFg5KSA+CisjZGVmaW5lIF9HTElCQ1hYX1RZUEVMSVNUX0NIQUlOMTEoWDAsIFgxLCBYMiwgWDMsIFg0LCBYNSwgWDYsIFg3LCBYOCwgWDksIFgxMCkgX19nbnVfY3h4Ojp0eXBlbGlzdDo6Y2hhaW48WDAsIF9HTElCQ1hYX1RZUEVMSVNUX0NIQUlOMTAoWDEsIFgyLCBYMywgWDQsIFg1LCBYNiwgWDcsIFg4LCBYOSwgWDEwKSA+CisjZGVmaW5lIF9HTElCQ1hYX1RZUEVMSVNUX0NIQUlOMTIoWDAsIFgxLCBYMiwgWDMsIFg0LCBYNSwgWDYsIFg3LCBYOCwgWDksIFgxMCwgWDExKSBfX2dudV9jeHg6OnR5cGVsaXN0OjpjaGFpbjxYMCwgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU4xMShYMSwgWDIsIFgzLCBYNCwgWDUsIFg2LCBYNywgWDgsIFg5LCBYMTAsIFgxMSkgPgorI2RlZmluZSBfR0xJQkNYWF9UWVBFTElTVF9DSEFJTjEzKFgwLCBYMSwgWDIsIFgzLCBYNCwgWDUsIFg2LCBYNywgWDgsIFg5LCBYMTAsIFgxMSwgWDEyKSBfX2dudV9jeHg6OnR5cGVsaXN0OjpjaGFpbjxYMCwgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU4xMihYMSwgWDIsIFgzLCBYNCwgWDUsIFg2LCBYNywgWDgsIFg5LCBYMTAsIFgxMSwgWDEyKSA+CisjZGVmaW5lIF9HTElCQ1hYX1RZUEVMSVNUX0NIQUlOMTQoWDAsIFgxLCBYMiwgWDMsIFg0LCBYNSwgWDYsIFg3LCBYOCwgWDksIFgxMCwgWDExLCBYMTIsIFgxMykgX19nbnVfY3h4Ojp0eXBlbGlzdDo6Y2hhaW48WDAsIF9HTElCQ1hYX1RZUEVMSVNUX0NIQUlOMTMoWDEsIFgyLCBYMywgWDQsIFg1LCBYNiwgWDcsIFg4LCBYOSwgWDEwLCBYMTEsIFgxMiwgWDEzKSA+CisjZGVmaW5lIF9HTElCQ1hYX1RZUEVMSVNUX0NIQUlOMTUoWDAsIFgxLCBYMiwgWDMsIFg0LCBYNSwgWDYsIFg3LCBYOCwgWDksIFgxMCwgWDExLCBYMTIsIFgxMywgWDE0KSBfX2dudV9jeHg6OnR5cGVsaXN0OjpjaGFpbjxYMCwgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU4xNChYMSwgWDIsIFgzLCBYNCwgWDUsIFg2LCBYNywgWDgsIFg5LCBYMTAsIFgxMSwgWDEyLCBYMTMsIFgxNCkgPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorCituYW1lc3BhY2UgdHlwZWxpc3QKK3sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgRm4sIHR5cGVuYW1lIFR5cGVsaXN0PgorICAgIHZvaWQKKyAgICBhcHBseShGbiYgZm4sIFR5cGVsaXN0KQorICAgIHsKKyAgICAgIGRldGFpbDo6YXBwbHlfPEZuLCB0eXBlbmFtZSBUeXBlbGlzdDo6cm9vdD4gYTsKKyAgICAgIGEoZm4pOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBGbiwgdHlwZW5hbWUgVHlwZWxpc3Q+CisgICAgdm9pZAorICAgIGFwcGx5X2dlbmVyYXRvcihGbiYgZm4sIFR5cGVsaXN0KQorICAgIHsKKyAgICAgIGRldGFpbDo6YXBwbHlfZ2VuZXJhdG9yMV88Rm4sIHR5cGVuYW1lIFR5cGVsaXN0Ojpyb290PiBhOworICAgICAgYShmbik7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIEZuLCB0eXBlbmFtZSBUeXBlbGlzdFQsIHR5cGVuYW1lIFR5cGVsaXN0Vj4KKyAgICB2b2lkCisgICAgYXBwbHlfZ2VuZXJhdG9yKEZuJiBmbiwgVHlwZWxpc3RULCBUeXBlbGlzdFYpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBUeXBlbGlzdFQ6OnJvb3Qgcm9vdFQ7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIFR5cGVsaXN0Vjo6cm9vdCByb290VjsKKyAgICAgIGRldGFpbDo6YXBwbHlfZ2VuZXJhdG9yMl88Rm4sIHJvb3RULCByb290Vj4gYTsKKyAgICAgIGEoZm4pOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlbGlzdDAsIHR5cGVuYW1lIFR5cGVsaXN0MT4KKyAgICBzdHJ1Y3QgYXBwZW5kCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIFR5cGVsaXN0MDo6cm9vdCAJCQkJcm9vdDBfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgVHlwZWxpc3QxOjpyb290IAkJCQlyb290MV90eXBlOworICAgICAgdHlwZWRlZiBkZXRhaWw6OmFwcGVuZF88cm9vdDBfdHlwZSwgcm9vdDFfdHlwZT4gCQlhcHBlbmRfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgbm9kZTx0eXBlbmFtZSBhcHBlbmRfdHlwZTo6dHlwZT4gCQkJdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGVsaXN0X1R5cGVsaXN0PgorICAgIHN0cnVjdCBhcHBlbmRfdHlwZWxpc3QKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgVHlwZWxpc3RfVHlwZWxpc3Q6OnJvb3QgCQkgICAgICAJcm9vdF90eXBlOworICAgICAgdHlwZWRlZiBkZXRhaWw6OmFwcGVuZF90eXBlbGlzdF88cm9vdF90eXBlPiAJCWFwcGVuZF90eXBlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBub2RlPHR5cGVuYW1lIGFwcGVuZF90eXBlOjp0eXBlPiAJCQl0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZWxpc3QsIHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGNvbnRhaW5zCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIFR5cGVsaXN0Ojpyb290IAkJCQlyb290X3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICBlbnVtCisJeworCSAgdmFsdWUgPSBkZXRhaWw6OmNvbnRhaW5zXzxyb290X3R5cGUsIFQ+Ojp2YWx1ZQorCX07CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlbGlzdCwgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUHJlZD4KKyAgICBzdHJ1Y3QgZmlsdGVyCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIFR5cGVsaXN0Ojpyb290IAkJCQlyb290X3R5cGU7CisgICAgICB0eXBlZGVmIGRldGFpbDo6Y2hhaW5fZmlsdGVyXzxyb290X3R5cGUsIFByZWQ+IAkJZmlsdGVyX3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIG5vZGU8dHlwZW5hbWUgZmlsdGVyX3R5cGU6OnR5cGU+IAkgICAgICAgCQl0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZWxpc3QsIGludCBpPgorICAgIHN0cnVjdCBhdF9pbmRleAorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBUeXBlbGlzdDo6cm9vdCAJCQkJcm9vdF90eXBlOworICAgICAgdHlwZWRlZiBkZXRhaWw6OmNoYWluX2F0X2luZGV4Xzxyb290X3R5cGUsIGk+IAkJaW5kZXhfdHlwZTsKKyAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaW5kZXhfdHlwZTo6dHlwZSAJCQl0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZWxpc3QsIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFRyYW5zZm9ybT4KKyAgICBzdHJ1Y3QgdHJhbnNmb3JtCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIFR5cGVsaXN0Ojpyb290IAkJCQlyb290X3R5cGU7CisgICAgICB0eXBlZGVmIGRldGFpbDo6Y2hhaW5fdHJhbnNmb3JtXzxyb290X3R5cGUsIFRyYW5zZm9ybT4gCXRyYW5zZm9ybV90eXBlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBub2RlPHR5cGVuYW1lIHRyYW5zZm9ybV90eXBlOjp0eXBlPiAJCXR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlbGlzdF9UeXBlbGlzdD4KKyAgICBzdHJ1Y3QgZmxhdHRlbgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBUeXBlbGlzdF9UeXBlbGlzdDo6cm9vdCAJCSAgICAgIAlyb290X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6Y2hhaW5fZmxhdHRlbl88cm9vdF90eXBlPjo6dHlwZSAJZmxhdHRlbl90eXBlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBub2RlPGZsYXR0ZW5fdHlwZT4gCQkJCXR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlbGlzdD4KKyAgICBzdHJ1Y3QgZnJvbV9maXJzdAorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdF9pbmRleDxUeXBlbGlzdCwgMD46OnR5cGUgCQlmaXJzdF90eXBlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBub2RlPGNoYWluPGZpcnN0X3R5cGUsIG51bGxfdHlwZT4gPiAJCXR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMT4KKyAgICBzdHJ1Y3QgY3JlYXRlMQorICAgIHsKKyAgICAgIHR5cGVkZWYgbm9kZTxfR0xJQkNYWF9UWVBFTElTVF9DSEFJTjEoVDEpPiAJCXR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+CisgICAgc3RydWN0IGNyZWF0ZTIKKyAgICB7CisgICAgICB0eXBlZGVmIG5vZGU8X0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU4yKFQxLFQyKT4gCQl0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMz4KKyAgICBzdHJ1Y3QgY3JlYXRlMworICAgIHsKKyAgICAgIHR5cGVkZWYgbm9kZTxfR0xJQkNYWF9UWVBFTElTVF9DSEFJTjMoVDEsVDIsVDMpPgkJdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0PgorICAgIHN0cnVjdCBjcmVhdGU0CisgICAgeworICAgICAgdHlwZWRlZiBub2RlPF9HTElCQ1hYX1RZUEVMSVNUX0NIQUlONChUMSxUMixUMyxUNCk+CXR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCAKKwkgICB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDU+CisgICAgc3RydWN0IGNyZWF0ZTUKKyAgICB7CisgICAgICB0eXBlZGVmIG5vZGU8X0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU41KFQxLFQyLFQzLFQ0LFQ1KT4JdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIAorCSAgIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDY+CisgICAgc3RydWN0IGNyZWF0ZTYKKyAgICB7CisgICAgICB0eXBlZGVmIG5vZGU8X0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU42KFQxLFQyLFQzLFQ0LFQ1LFQ2KT4JdHlwZTsKKyAgICB9OworfSAvLyBuYW1lc3BhY2UgdHlwZWxpc3QKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvdnN0cmluZy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvdnN0cmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNDY5Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC92c3RyaW5nLmgKQEAgLTAsMCArMSwyNjcyIEBACisvLyBWZXJzYXRpbGUgc3RyaW5nIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGV4dC92c3RyaW5nLmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9WU1RSSU5HX0gKKyNkZWZpbmUgX1ZTVFJJTkdfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisjaW5jbHVkZSA8ZXh0L3ZzdHJpbmdfdXRpbC5oPgorI2luY2x1ZGUgPGV4dC9yY19zdHJpbmdfYmFzZS5oPgorI2luY2x1ZGUgPGV4dC9zc29fc3RyaW5nX2Jhc2UuaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKworICAvKioKKyAgICogIEBjbGFzcyBfX3ZlcnNhX3N0cmluZyB2c3RyaW5nLmgKKyAgICogIEBicmllZiAgVGVtcGxhdGUgY2xhc3MgX192ZXJzYV9zdHJpbmcuIAorICAgKiAgQGluZ3JvdXAgZXh0ZW5zaW9ucworICAgKgorICAgKiAgRGF0YSBzdHJ1Y3R1cmUgbWFuYWdpbmcgc2VxdWVuY2VzIG9mIGNoYXJhY3RlcnMgYW5kCisgICAqICBjaGFyYWN0ZXItbGlrZSBvYmplY3RzLiAKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBjbGFzcyBfX3ZlcnNhX3N0cmluZworICAgIDogcHJpdmF0ZSBfQmFzZTxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KKyAgICB7CisgICAgICB0eXBlZGVmIF9CYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiAgICAgICAgICAgICAgICBfX3ZzdHJpbmdfYmFzZTsgICAgCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdnN0cmluZ19iYXNlOjpfQ2hhclRfYWxsb2NfdHlwZSAgICBfQ2hhclRfYWxsb2NfdHlwZTsKKworICAgICAgLy8gVHlwZXM6CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfVHJhaXRzCQkJCQkgICAgdHJhaXRzX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZQkJICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9BbGxvYwkJCQkJICAgIGFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQ2hhclRfYWxsb2NfdHlwZTo6c2l6ZV90eXBlCSAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9DaGFyVF9hbGxvY190eXBlOjpkaWZmZXJlbmNlX3R5cGUgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9DaGFyVF9hbGxvY190eXBlOjpyZWZlcmVuY2UJICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0NoYXJUX2FsbG9jX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSAgIGNvbnN0X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0NoYXJUX2FsbG9jX3R5cGU6OnBvaW50ZXIJICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9DaGFyVF9hbGxvY190eXBlOjpjb25zdF9wb2ludGVyCSAgICBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPHBvaW50ZXIsIF9fdmVyc2Ffc3RyaW5nPiAgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwgX192ZXJzYV9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPgljb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+CQkgICAgcmV2ZXJzZV9pdGVyYXRvcjsKKworICAgICAgLy8gRGF0YSBNZW1iZXIgKHB1YmxpYyk6CisgICAgICAvLy8gIFZhbHVlIHJldHVybmVkIGJ5IHZhcmlvdXMgbWVtYmVyIGZ1bmN0aW9ucyB3aGVuIHRoZXkgZmFpbC4KKyAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUJbnBvcyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHNpemVfdHlwZQorICAgICAgX01fY2hlY2soc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBjaGFyKiBfX3MpIGNvbnN0CisgICAgICB7CisJaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQorCSAgc3RkOjpfX3Rocm93X291dF9vZl9yYW5nZShfX04oX19zKSk7CisJcmV0dXJuIF9fcG9zOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9jaGVja19sZW5ndGgoc2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBfX24yLCBjb25zdCBjaGFyKiBfX3MpIGNvbnN0CisgICAgICB7CisJaWYgKHRoaXMtPm1heF9zaXplKCkgLSAodGhpcy0+c2l6ZSgpIC0gX19uMSkgPCBfX24yKQorCSAgc3RkOjpfX3Rocm93X2xlbmd0aF9lcnJvcihfX04oX19zKSk7CisgICAgICB9CisKKyAgICAgIC8vIE5COiBfTV9saW1pdCBkb2Vzbid0IGNoZWNrIGZvciBhIGJhZCBfX3BvcyB2YWx1ZS4KKyAgICAgIHNpemVfdHlwZQorICAgICAgX01fbGltaXQoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19vZmYpIGNvbnN0CisgICAgICB7CisJY29uc3QgYm9vbCBfX3Rlc3RvZmYgPSAgX19vZmYgPCB0aGlzLT5zaXplKCkgLSBfX3BvczsKKwlyZXR1cm4gX190ZXN0b2ZmID8gX19vZmYgOiB0aGlzLT5zaXplKCkgLSBfX3BvczsKKyAgICAgIH0KKworICAgICAgLy8gVHJ1ZSBpZiBfUmVwIGFuZCBzb3VyY2UgZG8gbm90IG92ZXJsYXAuCisgICAgICBib29sCisgICAgICBfTV9kaXNqdW5jdChjb25zdCBfQ2hhclQqIF9fcykgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gKHN0ZDo6bGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgdGhpcy0+X01fZGF0YSgpKQorCQl8fCBzdGQ6Omxlc3M8Y29uc3QgX0NoYXJUKj4oKSh0aGlzLT5fTV9kYXRhKCkKKwkJCQkJICAgICAgKyB0aGlzLT5zaXplKCksIF9fcykpOworICAgICAgfQorCisgICAgICAvLyBGb3IgdGhlIGludGVybmFsIHVzZSB3ZSBoYXZlIGZ1bmN0aW9ucyBzaW1pbGFyIHRvIGBiZWdpbicvYGVuZCcKKyAgICAgIC8vIGJ1dCB0aGV5IGRvIG5vdCBjYWxsIF9NX2xlYWsuCisgICAgICBpdGVyYXRvcgorICAgICAgX01faWJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMtPl9NX2RhdGEoKSk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIF9NX2llbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gaXRlcmF0b3IodGhpcy0+X01fZGF0YSgpICsgdGhpcy0+X01fbGVuZ3RoKCkpOyB9CisKKyAgICBwdWJsaWM6CisgICAgICAvLyBDb25zdHJ1Y3QvY29weS9kZXN0cm95OgorICAgICAgLy8gTkI6IFdlIG92ZXJsb2FkIGN0b3JzIGluIHNvbWUgY2FzZXMgaW5zdGVhZCBvZiB1c2luZyBkZWZhdWx0CisgICAgICAvLyBhcmd1bWVudHMsIHBlciAxNy40LjQuNCBwYXJhLiAyIGl0ZW0gMi4KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBEZWZhdWx0IGNvbnN0cnVjdG9yIGNyZWF0ZXMgYW4gZW1wdHkgc3RyaW5nLgorICAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZygpCisgICAgICA6IF9fdnN0cmluZ19iYXNlKCkgeyB9CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0IGFuIGVtcHR5IHN0cmluZyB1c2luZyBhbGxvY2F0b3IgQGEgYS4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIF9fdmVyc2Ffc3RyaW5nKGNvbnN0IF9BbGxvYyYgX19hKQorICAgICAgOiBfX3ZzdHJpbmdfYmFzZShfX2EpIHsgfQorCisgICAgICAvLyBOQjogcGVyIExXRyBpc3N1ZSA0Miwgc2VtYW50aWNzIGRpZmZlcmVudCBmcm9tIElTOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3Qgc3RyaW5nIHdpdGggY29weSBvZiB2YWx1ZSBvZiBAYSBzdHIuCisgICAgICAgKiAgQHBhcmFtICBfX3N0ciAgU291cmNlIHN0cmluZy4KKyAgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcoY29uc3QgX192ZXJzYV9zdHJpbmcmIF9fc3RyKQorICAgICAgOiBfX3ZzdHJpbmdfYmFzZShfX3N0cikgeyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTdHJpbmcgbW92ZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqICBAcGFyYW0gIF9fc3RyICBTb3VyY2Ugc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGUgbmV3bHktY29uc3RydWN0ZWQgJXN0cmluZyBjb250YWlucyB0aGUgZXhhY3QgY29udGVudHMgb2YKKyAgICAgICAqICBAYSBzdHIuICBUaGUgY29udGVudHMgb2YgQGEgc3RyIGFyZSBhIHZhbGlkLCBidXQgdW5zcGVjaWZpZWQKKyAgICAgICAqICBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nKF9fdmVyc2Ffc3RyaW5nJiYgX19zdHIpCisgICAgICA6IF9fdnN0cmluZ19iYXNlKHN0ZDo6Zm9yd2FyZDxfX3ZzdHJpbmdfYmFzZT4oX19zdHIpKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3Qgc3RyaW5nIGZyb20gYW4gaW5pdGlhbGl6ZXIgbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIF9fbCAgc3RkOjppbml0aWFsaXplcl9saXN0IG9mIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtICBfX2EgIEFsbG9jYXRvciB0byB1c2UgKGRlZmF1bHQgaXMgZGVmYXVsdCBhbGxvY2F0b3IpLgorICAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X0NoYXJUPiBfX2wsCisJCSAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSkKKyAgICAgIDogX192c3RyaW5nX2Jhc2UoX19sLmJlZ2luKCksIF9fbC5lbmQoKSwgX19hKSB7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdCBzdHJpbmcgYXMgY29weSBvZiBhIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gIF9fc3RyICBTb3VyY2Ugc3RyaW5nLgorICAgICAgICogIEBwYXJhbSAgX19wb3MgIEluZGV4IG9mIGZpcnN0IGNoYXJhY3RlciB0byBjb3B5IGZyb20uCisgICAgICAgKiAgQHBhcmFtICBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGNvcHkgKGRlZmF1bHQgcmVtYWluZGVyKS4KKyAgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcoY29uc3QgX192ZXJzYV9zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCisJCSAgICAgc2l6ZV90eXBlIF9fbiA9IG5wb3MpCisgICAgICA6IF9fdnN0cmluZ19iYXNlKF9fc3RyLl9NX2RhdGEoKQorCQkgICAgICAgKyBfX3N0ci5fTV9jaGVjayhfX3BvcywKKwkJCQkJIl9fdmVyc2Ffc3RyaW5nOjpfX3ZlcnNhX3N0cmluZyIpLAorCQkgICAgICAgX19zdHIuX01fZGF0YSgpICsgX19zdHIuX01fbGltaXQoX19wb3MsIF9fbikKKwkJICAgICAgICsgX19wb3MsIF9BbGxvYygpKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3Qgc3RyaW5nIGFzIGNvcHkgb2YgYSBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtICBfX3N0ciAgU291cmNlIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gIF9fcG9zICBJbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXIgdG8gY29weSBmcm9tLgorICAgICAgICogIEBwYXJhbSAgX19uICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byBjb3B5LgorICAgICAgICogIEBwYXJhbSAgX19hICBBbGxvY2F0b3IgdG8gdXNlLgorICAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyhjb25zdCBfX3ZlcnNhX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKKwkJICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkKKyAgICAgIDogX192c3RyaW5nX2Jhc2UoX19zdHIuX01fZGF0YSgpCisJCSAgICAgICArIF9fc3RyLl9NX2NoZWNrKF9fcG9zLAorCQkJCQkiX192ZXJzYV9zdHJpbmc6Ol9fdmVyc2Ffc3RyaW5nIiksCisJCSAgICAgICBfX3N0ci5fTV9kYXRhKCkgKyBfX3N0ci5fTV9saW1pdChfX3BvcywgX19uKQorCQkgICAgICAgKyBfX3BvcywgX19hKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3Qgc3RyaW5nIGluaXRpYWxpemVkIGJ5IGEgY2hhcmFjdGVyIGFycmF5LgorICAgICAgICogIEBwYXJhbSAgX19zICBTb3VyY2UgY2hhcmFjdGVyIGFycmF5LgorICAgICAgICogIEBwYXJhbSAgX19uICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byBjb3B5LgorICAgICAgICogIEBwYXJhbSAgX19hICBBbGxvY2F0b3IgdG8gdXNlIChkZWZhdWx0IGlzIGRlZmF1bHQgYWxsb2NhdG9yKS4KKyAgICAgICAqCisgICAgICAgKiAgTkI6IEBhIF9fcyBtdXN0IGhhdmUgYXQgbGVhc3QgQGEgX19uIGNoYXJhY3RlcnMsICdcXDAnIGhhcyBubyBzcGVjaWFsCisgICAgICAgKiAgbWVhbmluZy4KKyAgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sCisJCSAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSkKKyAgICAgIDogX192c3RyaW5nX2Jhc2UoX19zLCBfX3MgKyBfX24sIF9fYSkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0IHN0cmluZyBhcyBjb3B5IG9mIGEgQyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtICBfX3MgIFNvdXJjZSBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gIF9fYSAgQWxsb2NhdG9yIHRvIHVzZSAoZGVmYXVsdCBpcyBkZWZhdWx0IGFsbG9jYXRvcikuCisgICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKQorICAgICAgOiBfX3ZzdHJpbmdfYmFzZShfX3MsIF9fcyA/IF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSA6CisJCSAgICAgICBfX3MgKyBucG9zLCBfX2EpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdCBzdHJpbmcgYXMgbXVsdGlwbGUgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gIF9fbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtICBfX2MgIENoYXJhY3RlciB0byB1c2UuCisgICAgICAgKiAgQHBhcmFtICBfX2EgIEFsbG9jYXRvciB0byB1c2UgKGRlZmF1bHQgaXMgZGVmYXVsdCBhbGxvY2F0b3IpLgorICAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKQorICAgICAgOiBfX3ZzdHJpbmdfYmFzZShfX24sIF9fYywgX19hKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3Qgc3RyaW5nIGFzIGNvcHkgb2YgYSByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gIF9fYmVnICBTdGFydCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gIF9fZW5kICBFbmQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtICBfX2EgIEFsbG9jYXRvciB0byB1c2UgKGRlZmF1bHQgaXMgZGVmYXVsdCBhbGxvY2F0b3IpLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgX192ZXJzYV9zdHJpbmcoX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kLAorCQkgICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSkKKwk6IF9fdnN0cmluZ19iYXNlKF9fYmVnLCBfX2VuZCwgX19hKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBEZXN0cm95IHRoZSBzdHJpbmcgaW5zdGFuY2UuCisgICAgICAgKi8KKyAgICAgIH5fX3ZlcnNhX3N0cmluZygpIHsgfQkKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBc3NpZ24gdGhlIHZhbHVlIG9mIEBhIHN0ciB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gIF9fc3RyICBTb3VyY2Ugc3RyaW5nLgorICAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfX3ZlcnNhX3N0cmluZyYgX19zdHIpIAorICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fc3RyKTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU3RyaW5nIG1vdmUgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9fc3RyICBTb3VyY2Ugc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGUgY29udGVudHMgb2YgQGEgX19zdHIgYXJlIG1vdmVkIGludG8gdGhpcyBzdHJpbmcgKHdpdGhvdXQKKyAgICAgICAqICBjb3B5aW5nKS4gIEBhIF9fc3RyIGlzIGEgdmFsaWQsIGJ1dCB1bnNwZWNpZmllZCBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgb3BlcmF0b3I9KF9fdmVyc2Ffc3RyaW5nJiYgX19zdHIpCisgICAgICB7CisJLy8gTkI6IERSIDEyMDQuCisJdGhpcy0+c3dhcChfX3N0cik7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNldCB2YWx1ZSB0byBzdHJpbmcgY29uc3RydWN0ZWQgZnJvbSBpbml0aWFsaXplciBsaXN0LgorICAgICAgICogIEBwYXJhbSAgX19sICBzdGQ6OmluaXRpYWxpemVyX2xpc3QuCisgICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgb3BlcmF0b3I9KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfQ2hhclQ+IF9fbCkKKyAgICAgIHsKKwl0aGlzLT5hc3NpZ24oX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29weSBjb250ZW50cyBvZiBAYSBfX3MgaW50byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gIF9fcyAgU291cmNlIG51bGwtdGVybWluYXRlZCBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9DaGFyVCogX19zKSAKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU2V0IHZhbHVlIHRvIHN0cmluZyBvZiBsZW5ndGggMS4KKyAgICAgICAqICBAcGFyYW0gIF9fYyAgU291cmNlIGNoYXJhY3Rlci4KKyAgICAgICAqCisgICAgICAgKiAgQXNzaWduaW5nIHRvIGEgY2hhcmFjdGVyIG1ha2VzIHRoaXMgc3RyaW5nIGxlbmd0aCAxIGFuZAorICAgICAgICogICgqdGhpcylbMF0gPT0gQGEgX19jLgorICAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKSAKKyAgICAgIHsgCisJdGhpcy0+YXNzaWduKDEsIF9fYyk7IAorCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLy8gSXRlcmF0b3JzOgorICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBpbgorICAgICAgICogIHRoZSAlc3RyaW5nLiAgVW5zaGFyZXMgdGhlIHN0cmluZy4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkKKyAgICAgIHsKKwl0aGlzLT5fTV9sZWFrKCk7CisJcmV0dXJuIGl0ZXJhdG9yKHRoaXMtPl9NX2RhdGEoKSk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgZmlyc3QKKyAgICAgICAqICBjaGFyYWN0ZXIgaW4gdGhlICVzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlzLT5fTV9kYXRhKCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIG9uZSBwYXN0IHRoZSBsYXN0CisgICAgICAgKiAgY2hhcmFjdGVyIGluIHRoZSAlc3RyaW5nLiAgVW5zaGFyZXMgdGhlIHN0cmluZy4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpCisgICAgICB7CisJdGhpcy0+X01fbGVhaygpOworCXJldHVybiBpdGVyYXRvcih0aGlzLT5fTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgb25lIHBhc3QgdGhlCisgICAgICAgKiAgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlICVzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcy0+X01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBsYXN0CisgICAgICAgKiAgY2hhcmFjdGVyIGluIHRoZSAlc3RyaW5nLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gcmV2ZXJzZSBlbGVtZW50CisgICAgICAgKiAgb3JkZXIuICBVbnNoYXJlcyB0aGUgc3RyaW5nLgorICAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMKKyAgICAgICAqICB0byB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlICVzdHJpbmcuICBJdGVyYXRpb24gaXMgZG9uZSBpbgorICAgICAgICogIHJldmVyc2UgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+ZW5kKCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gb25lIGJlZm9yZSB0aGUKKyAgICAgICAqICBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlICVzdHJpbmcuICBJdGVyYXRpb24gaXMgZG9uZSBpbiByZXZlcnNlCisgICAgICAgKiAgZWxlbWVudCBvcmRlci4gIFVuc2hhcmVzIHRoZSBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cworICAgICAgICogIHRvIG9uZSBiZWZvcmUgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgJXN0cmluZy4gIEl0ZXJhdGlvbgorICAgICAgICogIGlzIGRvbmUgaW4gcmV2ZXJzZSBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGZpcnN0CisgICAgICAgKiAgY2hhcmFjdGVyIGluIHRoZSAlc3RyaW5nLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHRoaXMtPl9NX2RhdGEoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIG9uZSBwYXN0IHRoZQorICAgICAgICogIGxhc3QgY2hhcmFjdGVyIGluIHRoZSAlc3RyaW5nLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlzLT5fTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzCisgICAgICAgKiAgdG8gdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSAlc3RyaW5nLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4KKyAgICAgICAqICByZXZlcnNlIGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMKKyAgICAgICAqICB0byBvbmUgYmVmb3JlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlICVzdHJpbmcuICBJdGVyYXRpb24KKyAgICAgICAqICBpcyBkb25lIGluIHJldmVyc2UgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQorI2VuZGlmCisKKyAgICBwdWJsaWM6CisgICAgICAvLyBDYXBhY2l0eToKKyAgICAgIC8vLyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZywgbm90IGluY2x1ZGluZyBhbnkKKyAgICAgIC8vLyAgbnVsbC10ZXJtaW5hdGlvbi4KKyAgICAgIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5fTV9sZW5ndGgoKTsgfQorCisgICAgICAvLy8gIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcsIG5vdCBpbmNsdWRpbmcgYW55CisgICAgICAvLy8gIG51bGwtdGVybWluYXRpb24uCisgICAgICBzaXplX3R5cGUKKyAgICAgIGxlbmd0aCgpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5fTV9sZW5ndGgoKTsgfQorCisgICAgICAvLy8gUmV0dXJucyB0aGUgc2l6ZSgpIG9mIHRoZSBsYXJnZXN0IHBvc3NpYmxlICVzdHJpbmcuCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX21heF9zaXplKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXNpemVzIHRoZSAlc3RyaW5nIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtICBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRoZSAlc3RyaW5nIHNob3VsZCBjb250YWluLgorICAgICAgICogIEBwYXJhbSAgX19jICBDaGFyYWN0ZXIgdG8gZmlsbCBhbnkgbmV3IGVsZW1lbnRzLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgJXJlc2l6ZSB0aGUgJXN0cmluZyB0byB0aGUgc3BlY2lmaWVkCisgICAgICAgKiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMuICBJZiB0aGUgbnVtYmVyIGlzIHNtYWxsZXIgdGhhbiB0aGUKKyAgICAgICAqICAlc3RyaW5nJ3MgY3VycmVudCBzaXplIHRoZSAlc3RyaW5nIGlzIHRydW5jYXRlZCwgb3RoZXJ3aXNlCisgICAgICAgKiAgdGhlICVzdHJpbmcgaXMgZXh0ZW5kZWQgYW5kIG5ldyBlbGVtZW50cyBhcmUgc2V0IHRvIEBhIF9fYy4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlc2l6ZXMgdGhlICVzdHJpbmcgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gIF9fbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhlICVzdHJpbmcgc2hvdWxkIGNvbnRhaW4uCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCByZXNpemUgdGhlICVzdHJpbmcgdG8gdGhlIHNwZWNpZmllZAorICAgICAgICogIGxlbmd0aC4gIElmIHRoZSBuZXcgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gdGhlICVzdHJpbmcncworICAgICAgICogIGN1cnJlbnQgc2l6ZSB0aGUgJXN0cmluZyBpcyB0cnVuY2F0ZWQsIG90aGVyd2lzZSB0aGUgJXN0cmluZworICAgICAgICogIGlzIGV4dGVuZGVkIGFuZCBuZXcgY2hhcmFjdGVycyBhcmUgZGVmYXVsdC1jb25zdHJ1Y3RlZC4gIEZvcgorICAgICAgICogIGJhc2ljIHR5cGVzIHN1Y2ggYXMgY2hhciwgdGhpcyBtZWFucyBzZXR0aW5nIHRoZW0gdG8gMC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24pCisgICAgICB7IHRoaXMtPnJlc2l6ZShfX24sIF9DaGFyVCgpKTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8vLyBBIG5vbi1iaW5kaW5nIHJlcXVlc3QgdG8gcmVkdWNlIGNhcGFjaXR5KCkgdG8gc2l6ZSgpLgorICAgICAgdm9pZAorICAgICAgc2hyaW5rX3RvX2ZpdCgpCisgICAgICB7CisJX190cnkKKwkgIHsgdGhpcy0+cmVzZXJ2ZSgwKTsgfQorCV9fY2F0Y2goLi4uKQorCSAgeyB9CisgICAgICB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCB0aGUgJXN0cmluZyBjYW4KKyAgICAgICAqICBob2xkIGJlZm9yZSBuZWVkaW5nIHRvIGFsbG9jYXRlIG1vcmUgbWVtb3J5LgorICAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGNhcGFjaXR5KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2NhcGFjaXR5KCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBdHRlbXB0IHRvIHByZWFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIHNwZWNpZmllZCBudW1iZXIgb2YKKyAgICAgICAqICAgICAgICAgIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtICBfX3Jlc19hcmcgIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlcXVpcmVkLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIEBhIF9fcmVzX2FyZyBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gYXR0ZW1wdHMgdG8gcmVzZXJ2ZSBlbm91Z2ggbWVtb3J5IGZvciB0aGUKKyAgICAgICAqICAlc3RyaW5nIHRvIGhvbGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgY2hhcmFjdGVycy4gIElmIHRoZQorICAgICAgICogIG51bWJlciByZXF1ZXN0ZWQgaXMgbW9yZSB0aGFuIG1heF9zaXplKCksIGxlbmd0aF9lcnJvciBpcworICAgICAgICogIHRocm93bi4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGFkdmFudGFnZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRoYXQgaWYgb3B0aW1hbCBjb2RlIGlzIGEKKyAgICAgICAqICBuZWNlc3NpdHkgYW5kIHRoZSB1c2VyIGNhbiBkZXRlcm1pbmUgdGhlIHN0cmluZyBsZW5ndGggdGhhdAorICAgICAgICogIHdpbGwgYmUgcmVxdWlyZWQsIHRoZSB1c2VyIGNhbiByZXNlcnZlIHRoZSBtZW1vcnkgaW4KKyAgICAgICAqICAlYWR2YW5jZSwgYW5kIHRodXMgcHJldmVudCBhIHBvc3NpYmxlIHJlYWxsb2NhdGlvbiBvZiBtZW1vcnkKKyAgICAgICAqICBhbmQgY29weWluZyBvZiAlc3RyaW5nIGRhdGEuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2VydmUoc2l6ZV90eXBlIF9fcmVzX2FyZyA9IDApCisgICAgICB7IHRoaXMtPl9NX3Jlc2VydmUoX19yZXNfYXJnKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBFcmFzZXMgdGhlIHN0cmluZywgbWFraW5nIGl0IGVtcHR5LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBjbGVhcigpCisgICAgICB7IHRoaXMtPl9NX2NsZWFyKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyB0cnVlIGlmIHRoZSAlc3RyaW5nIGlzIGVtcHR5LiAgRXF1aXZhbGVudCB0byAKKyAgICAgICAqICA8Y29kZT4qdGhpcyA9PSAiIjwvY29kZT4uCisgICAgICAgKi8KKyAgICAgIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPnNpemUoKSA9PSAwOyB9CisKKyAgICAgIC8vIEVsZW1lbnQgYWNjZXNzOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTdWJzY3JpcHQgYWNjZXNzIHRvIHRoZSBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgJXN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gIF9fcG9zICBUaGUgaW5kZXggb2YgdGhlIGNoYXJhY3RlciB0byBhY2Nlc3MuCisgICAgICAgKiAgQHJldHVybiAgUmVhZC1vbmx5IChjb25zdGFudCkgcmVmZXJlbmNlIHRvIHRoZSBjaGFyYWN0ZXIuCisgICAgICAgKgorICAgICAgICogIFRoaXMgb3BlcmF0b3IgYWxsb3dzIGZvciBlYXN5LCBhcnJheS1zdHlsZSwgZGF0YSBhY2Nlc3MuCisgICAgICAgKiAgTm90ZSB0aGF0IGRhdGEgYWNjZXNzIHdpdGggdGhpcyBvcGVyYXRvciBpcyB1bmNoZWNrZWQgYW5kCisgICAgICAgKiAgb3V0X29mX3JhbmdlIGxvb2t1cHMgYXJlIG5vdCBkZWZpbmVkLiAoRm9yIGNoZWNrZWQgbG9va3VwcworICAgICAgICogIHNlZSBhdCgpLikKKyAgICAgICAqLworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdIChzaXplX3R5cGUgX19wb3MpIGNvbnN0CisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9fcG9zIDw9IHRoaXMtPnNpemUoKSk7CisJcmV0dXJuIHRoaXMtPl9NX2RhdGEoKVtfX3Bvc107CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU3Vic2NyaXB0IGFjY2VzcyB0byB0aGUgZGF0YSBjb250YWluZWQgaW4gdGhlICVzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtICBfX3BvcyAgVGhlIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgdG8gYWNjZXNzLgorICAgICAgICogIEByZXR1cm4gIFJlYWQvd3JpdGUgcmVmZXJlbmNlIHRvIHRoZSBjaGFyYWN0ZXIuCisgICAgICAgKgorICAgICAgICogIFRoaXMgb3BlcmF0b3IgYWxsb3dzIGZvciBlYXN5LCBhcnJheS1zdHlsZSwgZGF0YSBhY2Nlc3MuCisgICAgICAgKiAgTm90ZSB0aGF0IGRhdGEgYWNjZXNzIHdpdGggdGhpcyBvcGVyYXRvciBpcyB1bmNoZWNrZWQgYW5kCisgICAgICAgKiAgb3V0X29mX3JhbmdlIGxvb2t1cHMgYXJlIG5vdCBkZWZpbmVkLiAoRm9yIGNoZWNrZWQgbG9va3VwcworICAgICAgICogIHNlZSBhdCgpLikgIFVuc2hhcmVzIHRoZSBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19wb3MpCisgICAgICB7CisgICAgICAgIC8vIGFsbG93IHBvcyA9PSBzaXplKCkgYXMgdjMgZXh0ZW5zaW9uOgorCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChfX3BvcyA8PSB0aGlzLT5zaXplKCkpOworICAgICAgICAvLyBidXQgYmUgc3RyaWN0IGluIHBlZGFudGljIG1vZGU6CisJX0dMSUJDWFhfREVCVUdfUEVEQVNTRVJUKF9fcG9zIDwgdGhpcy0+c2l6ZSgpKTsKKwl0aGlzLT5fTV9sZWFrKCk7CisJcmV0dXJuIHRoaXMtPl9NX2RhdGEoKVtfX3Bvc107CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgJXN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19uIFRoZSBpbmRleCBvZiB0aGUgY2hhcmFjdGVyIHRvIGFjY2Vzcy4KKyAgICAgICAqICBAcmV0dXJuICBSZWFkLW9ubHkgKGNvbnN0KSByZWZlcmVuY2UgdG8gdGhlIGNoYXJhY3Rlci4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBfX24gaXMgYW4gaW52YWxpZCBpbmRleC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBmb3Igc2FmZXIgZGF0YSBhY2Nlc3MuICBUaGUgcGFyYW1ldGVyCisgICAgICAgKiAgaXMgZmlyc3QgY2hlY2tlZCB0aGF0IGl0IGlzIGluIHRoZSByYW5nZSBvZiB0aGUgc3RyaW5nLiAgVGhlCisgICAgICAgKiAgZnVuY3Rpb24gdGhyb3dzIG91dF9vZl9yYW5nZSBpZiB0aGUgY2hlY2sgZmFpbHMuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsKKwlpZiAoX19uID49IHRoaXMtPnNpemUoKSkKKwkgIHN0ZDo6X190aHJvd19vdXRfb2ZfcmFuZ2UoX19OKCJfX3ZlcnNhX3N0cmluZzo6YXQiKSk7CisJcmV0dXJuIHRoaXMtPl9NX2RhdGEoKVtfX25dOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgZGF0YSBjb250YWluZWQgaW4gdGhlICVzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fbiBUaGUgaW5kZXggb2YgdGhlIGNoYXJhY3RlciB0byBhY2Nlc3MuCisgICAgICAgKiAgQHJldHVybiAgUmVhZC93cml0ZSByZWZlcmVuY2UgdG8gdGhlIGNoYXJhY3Rlci4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBfX24gaXMgYW4gaW52YWxpZCBpbmRleC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBmb3Igc2FmZXIgZGF0YSBhY2Nlc3MuICBUaGUgcGFyYW1ldGVyCisgICAgICAgKiAgaXMgZmlyc3QgY2hlY2tlZCB0aGF0IGl0IGlzIGluIHRoZSByYW5nZSBvZiB0aGUgc3RyaW5nLiAgVGhlCisgICAgICAgKiAgZnVuY3Rpb24gdGhyb3dzIG91dF9vZl9yYW5nZSBpZiB0aGUgY2hlY2sgZmFpbHMuICBTdWNjZXNzCisgICAgICAgKiAgcmVzdWx0cyBpbiB1bnNoYXJpbmcgdGhlIHN0cmluZy4KKyAgICAgICAqLworICAgICAgcmVmZXJlbmNlCisgICAgICBhdChzaXplX3R5cGUgX19uKQorICAgICAgeworCWlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQorCSAgc3RkOjpfX3Rocm93X291dF9vZl9yYW5nZShfX04oIl9fdmVyc2Ffc3RyaW5nOjphdCIpKTsKKwl0aGlzLT5fTV9sZWFrKCk7CisJcmV0dXJuIHRoaXMtPl9NX2RhdGEoKVtfX25dOworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIHJlZmVyZW5jZSB0byB0aGUgZGF0YSBhdCB0aGUgZmlyc3QKKyAgICAgICAqICBlbGVtZW50IG9mIHRoZSAlc3RyaW5nLgorICAgICAgICovCisgICAgICByZWZlcmVuY2UKKyAgICAgIGZyb250KCkKKyAgICAgIHsgcmV0dXJuICpiZWdpbigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgYXQgdGhlIGZpcnN0CisgICAgICAgKiAgZWxlbWVudCBvZiB0aGUgJXN0cmluZy4KKyAgICAgICAqLworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBmcm9udCgpIGNvbnN0CisgICAgICB7IHJldHVybiAqYmVnaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgYXQgdGhlIGxhc3QKKyAgICAgICAqICBlbGVtZW50IG9mIHRoZSAlc3RyaW5nLgorICAgICAgICovCisgICAgICByZWZlcmVuY2UKKyAgICAgIGJhY2soKQorICAgICAgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgYXQgdGhlCisgICAgICAgKiAgbGFzdCBlbGVtZW50IG9mIHRoZSAlc3RyaW5nLgorICAgICAgICovCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIGJhY2soKSBjb25zdAorICAgICAgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CisjZW5kaWYKKworICAgICAgLy8gTW9kaWZpZXJzOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBcHBlbmQgYSBzdHJpbmcgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fc3RyICBUaGUgc3RyaW5nIHRvIGFwcGVuZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgb3BlcmF0b3IrPShjb25zdCBfX3ZlcnNhX3N0cmluZyYgX19zdHIpCisgICAgICB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zdHIpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXBwZW5kIGEgQyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgVGhlIEMgc3RyaW5nIHRvIGFwcGVuZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgb3BlcmF0b3IrPShjb25zdCBfQ2hhclQqIF9fcykKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3MpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXBwZW5kIGEgY2hhcmFjdGVyLgorICAgICAgICogIEBwYXJhbSBfX2MgIFRoZSBjaGFyYWN0ZXIgdG8gYXBwZW5kLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICBvcGVyYXRvcis9KF9DaGFyVCBfX2MpCisgICAgICB7IAorCXRoaXMtPnB1c2hfYmFjayhfX2MpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFwcGVuZCBhbiBpbml0aWFsaXplcl9saXN0IG9mIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtIF9fbCAgVGhlIGluaXRpYWxpemVyX2xpc3Qgb2YgY2hhcmFjdGVycyB0byBiZSBhcHBlbmRlZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgb3BlcmF0b3IrPShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X0NoYXJUPiBfX2wpCisgICAgICB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7IH0KKyNlbmRpZiAvLyBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFwcGVuZCBhIHN0cmluZyB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zdHIgIFRoZSBzdHJpbmcgdG8gYXBwZW5kLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICBhcHBlbmQoY29uc3QgX192ZXJzYV9zdHJpbmcmIF9fc3RyKQorICAgICAgeyByZXR1cm4gX01fYXBwZW5kKF9fc3RyLl9NX2RhdGEoKSwgX19zdHIuc2l6ZSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFwcGVuZCBhIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zdHIgIFRoZSBzdHJpbmcgdG8gYXBwZW5kLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBzdHIgdG8gYXBwZW5kLgorICAgICAgICogIEBwYXJhbSBfX24gIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBhcHBlbmQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgaWYgQGEgcG9zIGlzIG5vdCBhIHZhbGlkIGluZGV4LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGFwcGVuZHMgQGEgX19uIGNoYXJhY3RlcnMgZnJvbSBAYSBfX3N0cgorICAgICAgICogIHN0YXJ0aW5nIGF0IEBhIF9fcG9zIHRvIHRoaXMgc3RyaW5nLiAgSWYgQGEgX19uIGlzIGlzIGxhcmdlcgorICAgICAgICogIHRoYW4gdGhlIG51bWJlciBvZiBhdmFpbGFibGUgY2hhcmFjdGVycyBpbiBAYSBfX3N0ciwgdGhlCisgICAgICAgKiAgcmVtYWluZGVyIG9mIEBhIF9fc3RyIGlzIGFwcGVuZGVkLgorICAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIGFwcGVuZChjb25zdCBfX3ZlcnNhX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKKyAgICAgIHsgcmV0dXJuIF9NX2FwcGVuZChfX3N0ci5fTV9kYXRhKCkKKwkJCSArIF9fc3RyLl9NX2NoZWNrKF9fcG9zLCAiX192ZXJzYV9zdHJpbmc6OmFwcGVuZCIpLAorCQkJIF9fc3RyLl9NX2xpbWl0KF9fcG9zLCBfX24pKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFwcGVuZCBhIEMgc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3MgIFRoZSBDIHN0cmluZyB0byBhcHBlbmQuCisgICAgICAgKiAgQHBhcmFtIF9fbiAgVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGFwcGVuZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmdfbGVuKF9fcywgX19uKTsKKwlfTV9jaGVja19sZW5ndGgoc2l6ZV90eXBlKDApLCBfX24sICJfX3ZlcnNhX3N0cmluZzo6YXBwZW5kIik7CisJcmV0dXJuIF9NX2FwcGVuZChfX3MsIF9fbik7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXBwZW5kIGEgQyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgVGhlIEMgc3RyaW5nIHRvIGFwcGVuZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zKQorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmcoX19zKTsKKwljb25zdCBzaXplX3R5cGUgX19uID0gdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOworCV9NX2NoZWNrX2xlbmd0aChzaXplX3R5cGUoMCksIF9fbiwgIl9fdmVyc2Ffc3RyaW5nOjphcHBlbmQiKTsKKwlyZXR1cm4gX01fYXBwZW5kKF9fcywgX19uKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBcHBlbmQgbXVsdGlwbGUgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gX19uICBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gYXBwZW5kLgorICAgICAgICogIEBwYXJhbSBfX2MgIFRoZSBjaGFyYWN0ZXIgdG8gdXNlLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiAgQXBwZW5kcyBuIGNvcGllcyBvZiBjIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIGFwcGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQorICAgICAgeyByZXR1cm4gX01fcmVwbGFjZV9hdXgodGhpcy0+c2l6ZSgpLCBzaXplX3R5cGUoMCksIF9fbiwgX19jKTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXBwZW5kIGFuIGluaXRpYWxpemVyX2xpc3Qgb2YgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gX19sICBUaGUgaW5pdGlhbGl6ZXJfbGlzdCBvZiBjaGFyYWN0ZXJzIHRvIGFwcGVuZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgYXBwZW5kKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfQ2hhclQ+IF9fbCkKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX2wuYmVnaW4oKSwgX19sLmVuZCgpKTsgfQorI2VuZGlmIC8vIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXBwZW5kIGEgcmFuZ2Ugb2YgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gX19maXJzdCAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgdGhlIGZpcnN0IGNoYXJhY3RlciB0byBhcHBlbmQuCisgICAgICAgKiAgQHBhcmFtIF9fbGFzdCAgSXRlcmF0b3IgbWFya2luZyB0aGUgZW5kIG9mIHRoZSByYW5nZS4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIEFwcGVuZHMgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW2ZpcnN0LGxhc3QpIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICAgIGFwcGVuZChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBcHBlbmQgYSBzaW5nbGUgY2hhcmFjdGVyLgorICAgICAgICogIEBwYXJhbSBfX2MgIENoYXJhY3RlciB0byBhcHBlbmQuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfYmFjayhfQ2hhclQgX19jKQorICAgICAgeyAKKwljb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOworCWlmIChfX3NpemUgKyAxID4gdGhpcy0+Y2FwYWNpdHkoKSB8fCB0aGlzLT5fTV9pc19zaGFyZWQoKSkKKwkgIHRoaXMtPl9NX211dGF0ZShfX3NpemUsIHNpemVfdHlwZSgwKSwgMCwgc2l6ZV90eXBlKDEpKTsKKwl0cmFpdHNfdHlwZTo6YXNzaWduKHRoaXMtPl9NX2RhdGEoKVtfX3NpemVdLCBfX2MpOworCXRoaXMtPl9NX3NldF9sZW5ndGgoX19zaXplICsgMSk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU2V0IHZhbHVlIHRvIGNvbnRlbnRzIG9mIGFub3RoZXIgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSAgX19zdHIgIFNvdXJjZSBzdHJpbmcgdG8gdXNlLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICBhc3NpZ24oY29uc3QgX192ZXJzYV9zdHJpbmcmIF9fc3RyKQorICAgICAgeworCXRoaXMtPl9NX2Fzc2lnbihfX3N0cik7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU2V0IHZhbHVlIHRvIGNvbnRlbnRzIG9mIGFub3RoZXIgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSAgX19zdHIgIFNvdXJjZSBzdHJpbmcgdG8gdXNlLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoaXMgc3RyaW5nIHRvIHRoZSBleGFjdCBjb250ZW50cyBvZiBAYSBfX3N0ci4KKyAgICAgICAqICBAYSBfX3N0ciBpcyBhIHZhbGlkLCBidXQgdW5zcGVjaWZpZWQgc3RyaW5nLgorICAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIGFzc2lnbihfX3ZlcnNhX3N0cmluZyYmIF9fc3RyKQorICAgICAgeworCXRoaXMtPnN3YXAoX19zdHIpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyNlbmRpZiAvLyBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNldCB2YWx1ZSB0byBhIHN1YnN0cmluZyBvZiBhIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zdHIgIFRoZSBzdHJpbmcgdG8gdXNlLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBzdHIuCisgICAgICAgKiAgQHBhcmFtIF9fbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gdXNlLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlIGlmIEBhIF9fcG9zIGlzIG5vdCBhIHZhbGlkIGluZGV4LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhpcyBzdHJpbmcgdG8gdGhlIHN1YnN0cmluZyBvZiBAYSBfX3N0cgorICAgICAgICogIGNvbnNpc3Rpbmcgb2YgQGEgX19uIGNoYXJhY3RlcnMgYXQgQGEgX19wb3MuICBJZiBAYSBfX24gaXMKKyAgICAgICAqICBpcyBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBjaGFyYWN0ZXJzIGluIEBhCisgICAgICAgKiAgX19zdHIsIHRoZSByZW1haW5kZXIgb2YgQGEgX19zdHIgaXMgdXNlZC4KKyAgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICBhc3NpZ24oY29uc3QgX192ZXJzYV9zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCisgICAgICB7IHJldHVybiBfTV9yZXBsYWNlKHNpemVfdHlwZSgwKSwgdGhpcy0+c2l6ZSgpLCBfX3N0ci5fTV9kYXRhKCkKKwkJCSAgKyBfX3N0ci5fTV9jaGVjayhfX3BvcywgIl9fdmVyc2Ffc3RyaW5nOjphc3NpZ24iKSwKKwkJCSAgX19zdHIuX01fbGltaXQoX19wb3MsIF9fbikpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU2V0IHZhbHVlIHRvIGEgQyBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgVGhlIEMgc3RyaW5nIHRvIHVzZS4KKyAgICAgICAqICBAcGFyYW0gX19uICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byB1c2UuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHZhbHVlIG9mIHRoaXMgc3RyaW5nIHRvIHRoZSBmaXJzdCBAYQorICAgICAgICogIF9fbiBjaGFyYWN0ZXJzIG9mIEBhIF9fcy4gIElmIEBhIF9fbiBpcyBpcyBsYXJnZXIgdGhhbiB0aGUKKyAgICAgICAqICBudW1iZXIgb2YgYXZhaWxhYmxlIGNoYXJhY3RlcnMgaW4gQGEgX19zLCB0aGUgcmVtYWluZGVyIG9mCisgICAgICAgKiAgQGEgX19zIGlzIHVzZWQuCisgICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgYXNzaWduKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmdfbGVuKF9fcywgX19uKTsKKwlyZXR1cm4gX01fcmVwbGFjZShzaXplX3R5cGUoMCksIHRoaXMtPnNpemUoKSwgX19zLCBfX24pOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNldCB2YWx1ZSB0byBjb250ZW50cyBvZiBhIEMgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3MgIFRoZSBDIHN0cmluZyB0byB1c2UuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHZhbHVlIG9mIHRoaXMgc3RyaW5nIHRvIHRoZSB2YWx1ZSBvZgorICAgICAgICogIEBhIF9fcy4gIFRoZSBkYXRhIGlzIGNvcGllZCwgc28gdGhlcmUgaXMgbm8gZGVwZW5kZW5jZSBvbiBAYQorICAgICAgICogIF9fcyBvbmNlIHRoZSBmdW5jdGlvbiByZXR1cm5zLgorICAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIGFzc2lnbihjb25zdCBfQ2hhclQqIF9fcykKKyAgICAgIHsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nKF9fcyk7CisJcmV0dXJuIF9NX3JlcGxhY2Uoc2l6ZV90eXBlKDApLCB0aGlzLT5zaXplKCksIF9fcywKKwkJCSAgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTZXQgdmFsdWUgdG8gbXVsdGlwbGUgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gX19uICBMZW5ndGggb2YgdGhlIHJlc3VsdGluZyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fYyAgVGhlIGNoYXJhY3RlciB0byB1c2UuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHZhbHVlIG9mIHRoaXMgc3RyaW5nIHRvIEBhIF9fbiBjb3BpZXMgb2YKKyAgICAgICAqICBjaGFyYWN0ZXIgQGEgX19jLgorICAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIGFzc2lnbihzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQorICAgICAgeyByZXR1cm4gX01fcmVwbGFjZV9hdXgoc2l6ZV90eXBlKDApLCB0aGlzLT5zaXplKCksIF9fbiwgX19jKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNldCB2YWx1ZSB0byBhIHJhbmdlIG9mIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtIF9fZmlyc3QgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIHRoZSBmaXJzdCBjaGFyYWN0ZXIgdG8gYXBwZW5kLgorICAgICAgICogIEBwYXJhbSBfX2xhc3QgIEl0ZXJhdG9yIG1hcmtpbmcgdGhlIGVuZCBvZiB0aGUgcmFuZ2UuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBTZXRzIHZhbHVlIG9mIHN0cmluZyB0byBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZQorICAgICAgICogIFtmaXJzdCxsYXN0KS4KKyAgICAgICovCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19maXJzdCwgX19sYXN0KTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU2V0IHZhbHVlIHRvIGFuIGluaXRpYWxpemVyX2xpc3Qgb2YgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gX19sICBUaGUgaW5pdGlhbGl6ZXJfbGlzdCBvZiBjaGFyYWN0ZXJzIHRvIGFzc2lnbi4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgYXNzaWduKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfQ2hhclQ+IF9fbCkKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX2wuYmVnaW4oKSwgX19sLmVuZCgpKTsgfQorI2VuZGlmIC8vIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW5zZXJ0IG11bHRpcGxlIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtIF9fcCAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgbG9jYXRpb24gaW4gc3RyaW5nIHRvIGluc2VydCBhdC4KKyAgICAgICAqICBAcGFyYW0gX19uICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byBpbnNlcnQKKyAgICAgICAqICBAcGFyYW0gX19jICBUaGUgY2hhcmFjdGVyIHRvIGluc2VydC4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgSW5zZXJ0cyBAYSBfX24gY29waWVzIG9mIGNoYXJhY3RlciBAYSBfX2Mgc3RhcnRpbmcgYXQgdGhlCisgICAgICAgKiAgcG9zaXRpb24gcmVmZXJlbmNlZCBieSBpdGVyYXRvciBAYSBfX3AuICBJZiBhZGRpbmcKKyAgICAgICAqICBjaGFyYWN0ZXJzIGNhdXNlcyB0aGUgbGVuZ3RoIHRvIGV4Y2VlZCBtYXhfc2l6ZSgpLAorICAgICAgICogIGxlbmd0aF9lcnJvciBpcyB0aHJvd24uICBUaGUgdmFsdWUgb2YgdGhlIHN0cmluZyBkb2Vzbid0CisgICAgICAgKiAgY2hhbmdlIGlmIGFuIGVycm9yIGlzIHRocm93bi4KKyAgICAgICovCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQorICAgICAgewl0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX24sIF9fYyk7ICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW5zZXJ0IGEgcmFuZ2Ugb2YgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gX19wICBJdGVyYXRvciByZWZlcmVuY2luZyBsb2NhdGlvbiBpbiBzdHJpbmcgdG8gaW5zZXJ0IGF0LgorICAgICAgICogIEBwYXJhbSBfX2JlZyAgU3RhcnQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIF9fZW5kICBFbmQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKgorICAgICAgICogIEluc2VydHMgY2hhcmFjdGVycyBpbiByYW5nZSBbYmVnLGVuZCkuICBJZiBhZGRpbmcgY2hhcmFjdGVycworICAgICAgICogIGNhdXNlcyB0aGUgbGVuZ3RoIHRvIGV4Y2VlZCBtYXhfc2l6ZSgpLCBsZW5ndGhfZXJyb3IgaXMKKyAgICAgICAqICB0aHJvd24uICBUaGUgdmFsdWUgb2YgdGhlIHN0cmluZyBkb2Vzbid0IGNoYW5nZSBpZiBhbiBlcnJvcgorICAgICAgICogIGlzIHRocm93bi4KKyAgICAgICovCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19lbmQpCisgICAgICAgIHsgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19iZWcsIF9fZW5kKTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW5zZXJ0IGFuIGluaXRpYWxpemVyX2xpc3Qgb2YgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gX19wICBJdGVyYXRvciByZWZlcmVuY2luZyBsb2NhdGlvbiBpbiBzdHJpbmcgdG8gaW5zZXJ0IGF0LgorICAgICAgICogIEBwYXJhbSBfX2wgIFRoZSBpbml0aWFsaXplcl9saXN0IG9mIGNoYXJhY3RlcnMgdG8gaW5zZXJ0LgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIG5ldyBsZW5ndGggZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X0NoYXJUPiBfX2wpCisgICAgICB7IHRoaXMtPmluc2VydChfX3AsIF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOyB9CisjZW5kaWYgLy8gX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnQgdmFsdWUgb2YgYSBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zMSAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgbG9jYXRpb24gaW4gc3RyaW5nIHRvIGluc2VydCBhdC4KKyAgICAgICAqICBAcGFyYW0gX19zdHIgIFRoZSBzdHJpbmcgdG8gaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgSW5zZXJ0cyB2YWx1ZSBvZiBAYSBfX3N0ciBzdGFydGluZyBhdCBAYSBfX3BvczEuICBJZiBhZGRpbmcKKyAgICAgICAqICBjaGFyYWN0ZXJzIGNhdXNlcyB0aGUgbGVuZ3RoIHRvIGV4Y2VlZCBtYXhfc2l6ZSgpLAorICAgICAgICogIGxlbmd0aF9lcnJvciBpcyB0aHJvd24uICBUaGUgdmFsdWUgb2YgdGhlIHN0cmluZyBkb2Vzbid0CisgICAgICAgKiAgY2hhbmdlIGlmIGFuIGVycm9yIGlzIHRocm93bi4KKyAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBfX3ZlcnNhX3N0cmluZyYgX19zdHIpCisgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zMSwgc2l6ZV90eXBlKDApLAorCQkJICAgICBfX3N0ci5fTV9kYXRhKCksIF9fc3RyLnNpemUoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnQgYSBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zMSAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgbG9jYXRpb24gaW4gc3RyaW5nIHRvIGluc2VydCBhdC4KKyAgICAgICAqICBAcGFyYW0gX19zdHIgIFRoZSBzdHJpbmcgdG8gaW5zZXJ0LgorICAgICAgICogIEBwYXJhbSBfX3BvczIgIFN0YXJ0IG9mIGNoYXJhY3RlcnMgaW4gc3RyIHRvIGluc2VydC4KKyAgICAgICAqICBAcGFyYW0gX19uICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIG5ldyBsZW5ndGggZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgIElmIEBhIF9fcG9zMSA+IHNpemUoKSBvcgorICAgICAgICogIEBhIF9fcG9zMiA+IEBhIF9fc3RyLnNpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgYXQgQGEgX19wb3MxLCBpbnNlcnQgQGEgX19uIGNoYXJhY3RlciBvZiBAYSBfX3N0cgorICAgICAgICogIGJlZ2lubmluZyB3aXRoIEBhIF9fcG9zMi4gIElmIGFkZGluZyBjaGFyYWN0ZXJzIGNhdXNlcyB0aGUKKyAgICAgICAqICBsZW5ndGggdG8gZXhjZWVkIG1heF9zaXplKCksIGxlbmd0aF9lcnJvciBpcyB0aHJvd24uICBJZiBAYQorICAgICAgICogIF9fcG9zMSBpcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGlzIHN0cmluZyBvciBAYSBfX3BvczIgaXMKKyAgICAgICAqICBiZXlvbmQgdGhlIGVuZCBvZiBAYSBfX3N0ciwgb3V0X29mX3JhbmdlIGlzIHRocm93bi4gIFRoZQorICAgICAgICogIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndCBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNvbnN0IF9fdmVyc2Ffc3RyaW5nJiBfX3N0ciwKKwkgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24pCisgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zMSwgc2l6ZV90eXBlKDApLCBfX3N0ci5fTV9kYXRhKCkKKwkJCSAgICAgKyBfX3N0ci5fTV9jaGVjayhfX3BvczIsICJfX3ZlcnNhX3N0cmluZzo6aW5zZXJ0IiksCisJCQkgICAgIF9fc3RyLl9NX2xpbWl0KF9fcG9zMiwgX19uKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnQgYSBDIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIGxvY2F0aW9uIGluIHN0cmluZyB0byBpbnNlcnQgYXQuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgVGhlIEMgc3RyaW5nIHRvIGluc2VydC4KKyAgICAgICAqICBAcGFyYW0gX19uICBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBfX3BvcyBpcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGlzCisgICAgICAgKiAgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBJbnNlcnRzIHRoZSBmaXJzdCBAYSBfX24gY2hhcmFjdGVycyBvZiBAYSBfX3Mgc3RhcnRpbmcgYXQgQGEKKyAgICAgICAqICBfX3Bvcy4gIElmIGFkZGluZyBjaGFyYWN0ZXJzIGNhdXNlcyB0aGUgbGVuZ3RoIHRvIGV4Y2VlZAorICAgICAgICogIG1heF9zaXplKCksIGxlbmd0aF9lcnJvciBpcyB0aHJvd24uICBJZiBAYSBfX3BvcyBpcyBiZXlvbmQKKyAgICAgICAqICBlbmQoKSwgb3V0X29mX3JhbmdlIGlzIHRocm93bi4gIFRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nCisgICAgICAgKiAgZG9lc24ndCBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCisgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBzaXplX3R5cGUoMCksIF9fcywgX19uKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydCBhIEMgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgbG9jYXRpb24gaW4gc3RyaW5nIHRvIGluc2VydCBhdC4KKyAgICAgICAqICBAcGFyYW0gX19zICBUaGUgQyBzdHJpbmcgdG8gaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBfX3BvcyBpcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGlzCisgICAgICAgKiAgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBJbnNlcnRzIHRoZSBmaXJzdCBAYSBfX24gY2hhcmFjdGVycyBvZiBAYSBfX3Mgc3RhcnRpbmcgYXQgQGEKKyAgICAgICAqICBfX3Bvcy4gIElmIGFkZGluZyBjaGFyYWN0ZXJzIGNhdXNlcyB0aGUgbGVuZ3RoIHRvIGV4Y2VlZAorICAgICAgICogIG1heF9zaXplKCksIGxlbmd0aF9lcnJvciBpcyB0aHJvd24uICBJZiBAYSBfX3BvcyBpcyBiZXlvbmQKKyAgICAgICAqICBlbmQoKSwgb3V0X29mX3JhbmdlIGlzIHRocm93bi4gIFRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nCisgICAgICAgKiAgZG9lc24ndCBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MpCisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfX3MpOworCXJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBzaXplX3R5cGUoMCksIF9fcywKKwkJCSAgICAgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnQgbXVsdGlwbGUgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IGluIHN0cmluZyB0byBpbnNlcnQgYXQuCisgICAgICAgKiAgQHBhcmFtIF9fbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gaW5zZXJ0CisgICAgICAgKiAgQHBhcmFtIF9fYyAgVGhlIGNoYXJhY3RlciB0byBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIG5ldyBsZW5ndGggZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgIElmIEBhIF9fcG9zIGlzIGJleW9uZCB0aGUgZW5kIG9mIHRoaXMKKyAgICAgICAqICBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIEluc2VydHMgQGEgX19uIGNvcGllcyBvZiBjaGFyYWN0ZXIgQGEgX19jIHN0YXJ0aW5nIGF0IGluZGV4CisgICAgICAgKiAgQGEgX19wb3MuICBJZiBhZGRpbmcgY2hhcmFjdGVycyBjYXVzZXMgdGhlIGxlbmd0aCB0byBleGNlZWQKKyAgICAgICAqICBtYXhfc2l6ZSgpLCBsZW5ndGhfZXJyb3IgaXMgdGhyb3duLiAgSWYgQGEgX19wb3MgPiBsZW5ndGgoKSwKKyAgICAgICAqICBvdXRfb2ZfcmFuZ2UgaXMgdGhyb3duLiAgVGhlIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndAorICAgICAgICogIGNoYW5nZSBpZiBhbiBlcnJvciBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQorICAgICAgeyByZXR1cm4gX01fcmVwbGFjZV9hdXgoX01fY2hlY2soX19wb3MsICJfX3ZlcnNhX3N0cmluZzo6aW5zZXJ0IiksCisJCQkgICAgICBzaXplX3R5cGUoMCksIF9fbiwgX19jKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydCBvbmUgY2hhcmFjdGVyLgorICAgICAgICogIEBwYXJhbSBfX3AgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIHBvc2l0aW9uIGluIHN0cmluZyB0byBpbnNlcnQgYXQuCisgICAgICAgKiAgQHBhcmFtIF9fYyAgVGhlIGNoYXJhY3RlciB0byBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgbmV3bHkgaW5zZXJ0ZWQgY2hhci4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgSW5zZXJ0cyBjaGFyYWN0ZXIgQGEgX19jIGF0IHBvc2l0aW9uIHJlZmVyZW5jZWQgYnkgQGEgX19wLgorICAgICAgICogIElmIGFkZGluZyBjaGFyYWN0ZXIgY2F1c2VzIHRoZSBsZW5ndGggdG8gZXhjZWVkIG1heF9zaXplKCksCisgICAgICAgKiAgbGVuZ3RoX2Vycm9yIGlzIHRocm93bi4gIElmIEBhIF9fcCBpcyBiZXlvbmQgZW5kIG9mIHN0cmluZywKKyAgICAgICAqICBvdXRfb2ZfcmFuZ2UgaXMgdGhyb3duLiAgVGhlIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndAorICAgICAgICogIGNoYW5nZSBpZiBhbiBlcnJvciBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9DaGFyVCBfX2MpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfUEVEQVNTRVJUKF9fcCA+PSBfTV9pYmVnaW4oKSAmJiBfX3AgPD0gX01faWVuZCgpKTsKKwljb25zdCBzaXplX3R5cGUgX19wb3MgPSBfX3AgLSBfTV9pYmVnaW4oKTsKKwlfTV9yZXBsYWNlX2F1eChfX3Bvcywgc2l6ZV90eXBlKDApLCBzaXplX3R5cGUoMSksIF9fYyk7CisJdGhpcy0+X01fc2V0X2xlYWtlZCgpOworCXJldHVybiBpdGVyYXRvcih0aGlzLT5fTV9kYXRhKCkgKyBfX3Bvcyk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVtb3ZlIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXIgdG8gcmVtb3ZlIChkZWZhdWx0IDApLgorICAgICAgICogIEBwYXJhbSBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHJlbW92ZSAoZGVmYXVsdCByZW1haW5kZXIpLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBfX3BvcyBpcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGlzCisgICAgICAgKiAgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBSZW1vdmVzIEBhIF9fbiBjaGFyYWN0ZXJzIGZyb20gdGhpcyBzdHJpbmcgc3RhcnRpbmcgYXQgQGEKKyAgICAgICAqICBfX3Bvcy4gIFRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBpcyByZWR1Y2VkIGJ5IEBhIF9fbi4gIElmCisgICAgICAgKiAgdGhlcmUgYXJlIDwgQGEgX19uIGNoYXJhY3RlcnMgdG8gcmVtb3ZlLCB0aGUgcmVtYWluZGVyIG9mCisgICAgICAgKiAgdGhlIHN0cmluZyBpcyB0cnVuY2F0ZWQuICBJZiBAYSBfX3AgaXMgYmV5b25kIGVuZCBvZiBzdHJpbmcsCisgICAgICAgKiAgb3V0X29mX3JhbmdlIGlzIHRocm93bi4gIFRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nIGRvZXNuJ3QKKyAgICAgICAqICBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgZXJhc2Uoc2l6ZV90eXBlIF9fcG9zID0gMCwgc2l6ZV90eXBlIF9fbiA9IG5wb3MpCisgICAgICB7IAorCXRoaXMtPl9NX2VyYXNlKF9NX2NoZWNrKF9fcG9zLCAiX192ZXJzYV9zdHJpbmc6OmVyYXNlIiksCisJCSAgICAgICBfTV9saW1pdChfX3BvcywgX19uKSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZSBvbmUgY2hhcmFjdGVyLgorICAgICAgICogIEBwYXJhbSBfX3Bvc2l0aW9uICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgY2hhcmFjdGVyIHRvIHJlbW92ZS4KKyAgICAgICAqICBAcmV0dXJuICBpdGVyYXRvciByZWZlcmVuY2luZyBzYW1lIGxvY2F0aW9uIGFmdGVyIHJlbW92YWwuCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgdGhlIGNoYXJhY3RlciBhdCBAYSBfX3Bvc2l0aW9uIGZyb20gdGhpcyBzdHJpbmcuIFRoZQorICAgICAgICogIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndCBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1BFREFTU0VSVChfX3Bvc2l0aW9uID49IF9NX2liZWdpbigpCisJCQkJICYmIF9fcG9zaXRpb24gPCBfTV9pZW5kKCkpOworCWNvbnN0IHNpemVfdHlwZSBfX3BvcyA9IF9fcG9zaXRpb24gLSBfTV9pYmVnaW4oKTsKKwl0aGlzLT5fTV9lcmFzZShfX3Bvcywgc2l6ZV90eXBlKDEpKTsKKwl0aGlzLT5fTV9zZXRfbGVha2VkKCk7CisJcmV0dXJuIGl0ZXJhdG9yKHRoaXMtPl9NX2RhdGEoKSArIF9fcG9zKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZW1vdmUgYSByYW5nZSBvZiBjaGFyYWN0ZXJzLgorICAgICAgICogIEBwYXJhbSBfX2ZpcnN0ICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgZmlyc3QgY2hhcmFjdGVyIHRvIHJlbW92ZS4KKyAgICAgICAqICBAcGFyYW0gX19sYXN0ICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgZW5kIG9mIHRoZSByYW5nZS4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciByZWZlcmVuY2luZyBsb2NhdGlvbiBvZiBmaXJzdCBhZnRlciByZW1vdmFsLgorICAgICAgICoKKyAgICAgICAqICBSZW1vdmVzIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbZmlyc3QsbGFzdCkgZnJvbSB0aGlzCisgICAgICAgKiAgc3RyaW5nLiAgVGhlIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndCBjaGFuZ2UgaWYgYW4gZXJyb3IKKyAgICAgICAqICBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19QRURBU1NFUlQoX19maXJzdCA+PSBfTV9pYmVnaW4oKSAmJiBfX2ZpcnN0IDw9IF9fbGFzdAorCQkJCSAmJiBfX2xhc3QgPD0gX01faWVuZCgpKTsKKyAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcG9zID0gX19maXJzdCAtIF9NX2liZWdpbigpOworCXRoaXMtPl9NX2VyYXNlKF9fcG9zLCBfX2xhc3QgLSBfX2ZpcnN0KTsKKwl0aGlzLT5fTV9zZXRfbGVha2VkKCk7CisJcmV0dXJuIGl0ZXJhdG9yKHRoaXMtPl9NX2RhdGEoKSArIF9fcG9zKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXBsYWNlIGNoYXJhY3RlcnMgd2l0aCB2YWx1ZSBmcm9tIGFub3RoZXIgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIF9fbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gYmUgcmVwbGFjZWQuCisgICAgICAgKiAgQHBhcmFtIF9fc3RyICBTdHJpbmcgdG8gaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBfX3BvcyBpcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGlzCisgICAgICAgKiAgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIG5ldyBsZW5ndGggZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICoKKyAgICAgICAqICBSZW1vdmVzIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbcG9zLHBvcytuKSBmcm9tIHRoaXMKKyAgICAgICAqICBzdHJpbmcuICBJbiBwbGFjZSwgdGhlIHZhbHVlIG9mIEBhIF9fc3RyIGlzIGluc2VydGVkLiAgSWYgQGEKKyAgICAgICAqICBfX3BvcyBpcyBiZXlvbmQgZW5kIG9mIHN0cmluZywgb3V0X29mX3JhbmdlIGlzIHRocm93bi4gIElmCisgICAgICAgKiAgdGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0IGV4Y2VlZHMgbWF4X3NpemUoKSwgbGVuZ3RoX2Vycm9yIGlzCisgICAgICAgKiAgdGhyb3duLiAgVGhlIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndCBjaGFuZ2UgaWYgYW4gZXJyb3IKKyAgICAgICAqICBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX192ZXJzYV9zdHJpbmcmIF9fc3RyKQorICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvcywgX19uLCBfX3N0ci5fTV9kYXRhKCksIF9fc3RyLnNpemUoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXBsYWNlIGNoYXJhY3RlcnMgd2l0aCB2YWx1ZSBmcm9tIGFub3RoZXIgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3BvczEgIEluZGV4IG9mIGZpcnN0IGNoYXJhY3RlciB0byByZXBsYWNlLgorICAgICAgICogIEBwYXJhbSBfX24xICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byBiZSByZXBsYWNlZC4KKyAgICAgICAqICBAcGFyYW0gX19zdHIgIFN0cmluZyB0byBpbnNlcnQuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zMiAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIG9mIHN0ciB0byB1c2UuCisgICAgICAgKiAgQHBhcmFtIF9fbjIgIE51bWJlciBvZiBjaGFyYWN0ZXJzIGZyb20gc3RyIHRvIHVzZS4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgQGEgX19wb3MxID4gc2l6ZSgpIG9yIEBhIF9fcG9zMiA+CisgICAgICAgKiAgc3RyLnNpemUoKS4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgUmVtb3ZlcyB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW3BvczEscG9zMSArIG4pIGZyb20KKyAgICAgICAqICB0aGlzIHN0cmluZy4gIEluIHBsYWNlLCB0aGUgdmFsdWUgb2YgQGEgX19zdHIgaXMgaW5zZXJ0ZWQuCisgICAgICAgKiAgSWYgQGEgX19wb3MgaXMgYmV5b25kIGVuZCBvZiBzdHJpbmcsIG91dF9vZl9yYW5nZSBpcyB0aHJvd24uCisgICAgICAgKiAgSWYgdGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0IGV4Y2VlZHMgbWF4X3NpemUoKSwgbGVuZ3RoX2Vycm9yCisgICAgICAgKiAgaXMgdGhyb3duLiAgVGhlIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndCBjaGFuZ2UgaWYgYW4KKyAgICAgICAqICBlcnJvciBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfX3ZlcnNhX3N0cmluZyYgX19zdHIsCisJICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpCisgICAgICB7CisJcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MxLCBfX24xLCBfX3N0ci5fTV9kYXRhKCkKKwkJCSAgICAgKyBfX3N0ci5fTV9jaGVjayhfX3BvczIsCisJCQkJCSAgICAgICJfX3ZlcnNhX3N0cmluZzo6cmVwbGFjZSIpLAorCQkJICAgICBfX3N0ci5fTV9saW1pdChfX3BvczIsIF9fbjIpKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXBsYWNlIGNoYXJhY3RlcnMgd2l0aCB2YWx1ZSBvZiBhIEMgc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIF9fbjEgIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlcGxhY2VkLgorICAgICAgICogIEBwYXJhbSBfX3MgIEMgc3RyaW5nIHRvIGluc2VydC4KKyAgICAgICAqICBAcGFyYW0gX19uMiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgZnJvbSBAYSBfX3MgdG8gdXNlLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBfX3BvczEgPiBzaXplKCkuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFtwb3MscG9zICsgbjEpIGZyb20gdGhpcworICAgICAgICogIHN0cmluZy4gIEluIHBsYWNlLCB0aGUgZmlyc3QgQGEgX19uMiBjaGFyYWN0ZXJzIG9mIEBhIF9fcworICAgICAgICogIGFyZSBpbnNlcnRlZCwgb3IgYWxsIG9mIEBhIF9fcyBpZiBAYSBfX24yIGlzIHRvbyBsYXJnZS4gIElmCisgICAgICAgKiAgQGEgX19wb3MgaXMgYmV5b25kIGVuZCBvZiBzdHJpbmcsIG91dF9vZl9yYW5nZSBpcyB0aHJvd24uCisgICAgICAgKiAgSWYgdGhlIGxlbmd0aCBvZiByZXN1bHQgZXhjZWVkcyBtYXhfc2l6ZSgpLCBsZW5ndGhfZXJyb3IgaXMKKyAgICAgICAqICB0aHJvd24uICBUaGUgdmFsdWUgb2YgdGhlIHN0cmluZyBkb2Vzbid0IGNoYW5nZSBpZiBhbiBlcnJvcgorICAgICAgICogIGlzIHRocm93bi4KKyAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCisJICAgICAgc2l6ZV90eXBlIF9fbjIpCisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZ19sZW4oX19zLCBfX24yKTsKKwlyZXR1cm4gX01fcmVwbGFjZShfTV9jaGVjayhfX3BvcywgIl9fdmVyc2Ffc3RyaW5nOjpyZXBsYWNlIiksCisJCQkgIF9NX2xpbWl0KF9fcG9zLCBfX24xKSwgX19zLCBfX24yKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXBsYWNlIGNoYXJhY3RlcnMgd2l0aCB2YWx1ZSBvZiBhIEMgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIF9fbjEgIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlcGxhY2VkLgorICAgICAgICogIEBwYXJhbSBfX3MgIEMgc3RyaW5nIHRvIGluc2VydC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgQGEgX19wb3MgPiBzaXplKCkuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFtwb3MscG9zICsgbjEpIGZyb20gdGhpcworICAgICAgICogIHN0cmluZy4gIEluIHBsYWNlLCB0aGUgY2hhcmFjdGVycyBvZiBAYSBfX3MgYXJlIGluc2VydGVkLiAgSWYKKyAgICAgICAqICBAYSBwb3MgaXMgYmV5b25kIGVuZCBvZiBzdHJpbmcsIG91dF9vZl9yYW5nZSBpcyB0aHJvd24uICBJZgorICAgICAgICogIHRoZSBsZW5ndGggb2YgcmVzdWx0IGV4Y2VlZHMgbWF4X3NpemUoKSwgbGVuZ3RoX2Vycm9yIGlzIHRocm93bi4gIAorICAgICAgICogIFRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nIGRvZXNuJ3QgY2hhbmdlIGlmIGFuIGVycm9yIGlzIHRocm93bi4KKyAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpCisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfX3MpOworCXJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBfX24xLCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVwbGFjZSBjaGFyYWN0ZXJzIHdpdGggbXVsdGlwbGUgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGZpcnN0IGNoYXJhY3RlciB0byByZXBsYWNlLgorICAgICAgICogIEBwYXJhbSBfX24xICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byBiZSByZXBsYWNlZC4KKyAgICAgICAqICBAcGFyYW0gX19uMiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gaW5zZXJ0LgorICAgICAgICogIEBwYXJhbSBfX2MgIENoYXJhY3RlciB0byBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgIElmIEBhIF9fcG9zID4gc2l6ZSgpLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIG5ldyBsZW5ndGggZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICoKKyAgICAgICAqICBSZW1vdmVzIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbcG9zLHBvcyArIG4xKSBmcm9tIHRoaXMKKyAgICAgICAqICBzdHJpbmcuICBJbiBwbGFjZSwgQGEgX19uMiBjb3BpZXMgb2YgQGEgX19jIGFyZSBpbnNlcnRlZC4KKyAgICAgICAqICBJZiBAYSBfX3BvcyBpcyBiZXlvbmQgZW5kIG9mIHN0cmluZywgb3V0X29mX3JhbmdlIGlzIHRocm93bi4KKyAgICAgICAqICBJZiB0aGUgbGVuZ3RoIG9mIHJlc3VsdCBleGNlZWRzIG1heF9zaXplKCksIGxlbmd0aF9lcnJvciBpcworICAgICAgICogIHRocm93bi4gIFRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nIGRvZXNuJ3QgY2hhbmdlIGlmIGFuIGVycm9yCisgICAgICAgKiAgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykKKyAgICAgIHsgcmV0dXJuIF9NX3JlcGxhY2VfYXV4KF9NX2NoZWNrKF9fcG9zLCAiX192ZXJzYV9zdHJpbmc6OnJlcGxhY2UiKSwKKwkJCSAgICAgIF9NX2xpbWl0KF9fcG9zLCBfX24xKSwgX19uMiwgX19jKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlcGxhY2UgcmFuZ2Ugb2YgY2hhcmFjdGVycyB3aXRoIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19pMSAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgc3RhcnQgb2YgcmFuZ2UgdG8gcmVwbGFjZS4KKyAgICAgICAqICBAcGFyYW0gX19pMiAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgZW5kIG9mIHJhbmdlIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIF9fc3RyICBTdHJpbmcgdmFsdWUgdG8gaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgUmVtb3ZlcyB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW2kxLGkyKS4gIEluIHBsYWNlLCB0aGUKKyAgICAgICAqICB2YWx1ZSBvZiBAYSBfX3N0ciBpcyBpbnNlcnRlZC4gIElmIHRoZSBsZW5ndGggb2YgcmVzdWx0CisgICAgICAgKiAgZXhjZWVkcyBtYXhfc2l6ZSgpLCBsZW5ndGhfZXJyb3IgaXMgdGhyb3duLiAgVGhlIHZhbHVlIG9mCisgICAgICAgKiAgdGhlIHN0cmluZyBkb2Vzbid0IGNoYW5nZSBpZiBhbiBlcnJvciBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9fdmVyc2Ffc3RyaW5nJiBfX3N0cikKKyAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zdHIuX01fZGF0YSgpLCBfX3N0ci5zaXplKCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVwbGFjZSByYW5nZSBvZiBjaGFyYWN0ZXJzIHdpdGggQyBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9faTEgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIHN0YXJ0IG9mIHJhbmdlIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIF9faTIgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIGVuZCBvZiByYW5nZSB0byByZXBsYWNlLgorICAgICAgICogIEBwYXJhbSBfX3MgIEMgc3RyaW5nIHZhbHVlIHRvIGluc2VydC4KKyAgICAgICAqICBAcGFyYW0gX19uICBOdW1iZXIgb2YgY2hhcmFjdGVycyBmcm9tIHMgdG8gaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgUmVtb3ZlcyB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW2kxLGkyKS4gIEluIHBsYWNlLCB0aGUKKyAgICAgICAqICBmaXJzdCBAYSBuIGNoYXJhY3RlcnMgb2YgQGEgX19zIGFyZSBpbnNlcnRlZC4gIElmIHRoZSBsZW5ndGgKKyAgICAgICAqICBvZiByZXN1bHQgZXhjZWVkcyBtYXhfc2l6ZSgpLCBsZW5ndGhfZXJyb3IgaXMgdGhyb3duLiAgVGhlCisgICAgICAgKiAgdmFsdWUgb2YgdGhlIHN0cmluZyBkb2Vzbid0IGNoYW5nZSBpZiBhbiBlcnJvciBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1BFREFTU0VSVChfTV9pYmVnaW4oKSA8PSBfX2kxICYmIF9faTEgPD0gX19pMgorCQkJCSAmJiBfX2kyIDw9IF9NX2llbmQoKSk7CisJcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwgX19zLCBfX24pOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlcGxhY2UgcmFuZ2Ugb2YgY2hhcmFjdGVycyB3aXRoIEMgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX2kxICBJdGVyYXRvciByZWZlcmVuY2luZyBzdGFydCBvZiByYW5nZSB0byByZXBsYWNlLgorICAgICAgICogIEBwYXJhbSBfX2kyICBJdGVyYXRvciByZWZlcmVuY2luZyBlbmQgb2YgcmFuZ2UgdG8gcmVwbGFjZS4KKyAgICAgICAqICBAcGFyYW0gX19zICBDIHN0cmluZyB2YWx1ZSB0byBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIG5ldyBsZW5ndGggZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICoKKyAgICAgICAqICBSZW1vdmVzIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbaTEsaTIpLiAgSW4gcGxhY2UsIHRoZQorICAgICAgICogIGNoYXJhY3RlcnMgb2YgQGEgX19zIGFyZSBpbnNlcnRlZC4gIElmIHRoZSBsZW5ndGggb2YgcmVzdWx0CisgICAgICAgKiAgZXhjZWVkcyBtYXhfc2l6ZSgpLCBsZW5ndGhfZXJyb3IgaXMgdGhyb3duLiAgVGhlIHZhbHVlIG9mCisgICAgICAgKiAgdGhlIHN0cmluZyBkb2Vzbid0IGNoYW5nZSBpZiBhbiBlcnJvciBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19zKQorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmcoX19zKTsKKwlyZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVwbGFjZSByYW5nZSBvZiBjaGFyYWN0ZXJzIHdpdGggbXVsdGlwbGUgY2hhcmFjdGVycworICAgICAgICogIEBwYXJhbSBfX2kxICBJdGVyYXRvciByZWZlcmVuY2luZyBzdGFydCBvZiByYW5nZSB0byByZXBsYWNlLgorICAgICAgICogIEBwYXJhbSBfX2kyICBJdGVyYXRvciByZWZlcmVuY2luZyBlbmQgb2YgcmFuZ2UgdG8gcmVwbGFjZS4KKyAgICAgICAqICBAcGFyYW0gX19uICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byBpbnNlcnQuCisgICAgICAgKiAgQHBhcmFtIF9fYyAgQ2hhcmFjdGVyIHRvIGluc2VydC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFtpMSxpMikuICBJbiBwbGFjZSwgQGEKKyAgICAgICAqICBfX24gY29waWVzIG9mIEBhIF9fYyBhcmUgaW5zZXJ0ZWQuICBJZiB0aGUgbGVuZ3RoIG9mIHJlc3VsdAorICAgICAgICogIGV4Y2VlZHMgbWF4X3NpemUoKSwgbGVuZ3RoX2Vycm9yIGlzIHRocm93bi4gIFRoZSB2YWx1ZSBvZgorICAgICAgICogIHRoZSBzdHJpbmcgZG9lc24ndCBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1BFREFTU0VSVChfTV9pYmVnaW4oKSA8PSBfX2kxICYmIF9faTEgPD0gX19pMgorCQkJCSAmJiBfX2kyIDw9IF9NX2llbmQoKSk7CisJcmV0dXJuIF9NX3JlcGxhY2VfYXV4KF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsIF9fbiwgX19jKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXBsYWNlIHJhbmdlIG9mIGNoYXJhY3RlcnMgd2l0aCByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gX19pMSAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgc3RhcnQgb2YgcmFuZ2UgdG8gcmVwbGFjZS4KKyAgICAgICAqICBAcGFyYW0gX19pMiAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgZW5kIG9mIHJhbmdlIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIF9fazEgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIHN0YXJ0IG9mIHJhbmdlIHRvIGluc2VydC4KKyAgICAgICAqICBAcGFyYW0gX19rMiAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgZW5kIG9mIHJhbmdlIHRvIGluc2VydC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFtpMSxpMikuICBJbiBwbGFjZSwKKyAgICAgICAqICBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbazEsazIpIGFyZSBpbnNlcnRlZC4gIElmIHRoZSBsZW5ndGgKKyAgICAgICAqICBvZiByZXN1bHQgZXhjZWVkcyBtYXhfc2l6ZSgpLCBsZW5ndGhfZXJyb3IgaXMgdGhyb3duLiAgVGhlCisgICAgICAgKiAgdmFsdWUgb2YgdGhlIHN0cmluZyBkb2Vzbid0IGNoYW5nZSBpZiBhbiBlcnJvciBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsCisJCV9JbnB1dEl0ZXJhdG9yIF9fazEsIF9JbnB1dEl0ZXJhdG9yIF9fazIpCisgICAgICAgIHsKKwkgIF9HTElCQ1hYX0RFQlVHX1BFREFTU0VSVChfTV9pYmVnaW4oKSA8PSBfX2kxICYmIF9faTEgPD0gX19pMgorCQkJCSAgICYmIF9faTIgPD0gX01faWVuZCgpKTsKKwkgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2sxLCBfX2syKTsKKwkgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpfX2lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfX3R5cGUgX0ludGVncmFsOworCSAgcmV0dXJuIF9NX3JlcGxhY2VfZGlzcGF0Y2goX19pMSwgX19pMiwgX19rMSwgX19rMiwgX0ludGVncmFsKCkpOworCX0KKworICAgICAgLy8gU3BlY2lhbGl6YXRpb25zIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgcG9pbnRlciBhbmQgaXRlcmF0b3I6CisgICAgICAvLyB1c2VmdWwgdG8gYXZvaWQgdGhlIG92ZXJoZWFkIG9mIHRlbXBvcmFyeSBidWZmZXJpbmcgaW4gX01fcmVwbGFjZS4KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfQ2hhclQqIF9fazEsIF9DaGFyVCogX19rMikKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19QRURBU1NFUlQoX01faWJlZ2luKCkgPD0gX19pMSAmJiBfX2kxIDw9IF9faTIKKwkJCQkgJiYgX19pMiA8PSBfTV9pZW5kKCkpOworCV9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2sxLCBfX2syKTsKKwlyZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLAorCQkJICAgICBfX2sxLCBfX2syIC0gX19rMSk7CisgICAgICB9CisKKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLAorCSAgICAgIGNvbnN0IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1BFREFTU0VSVChfTV9pYmVnaW4oKSA8PSBfX2kxICYmIF9faTEgPD0gX19pMgorCQkJCSAmJiBfX2kyIDw9IF9NX2llbmQoKSk7CisJX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fazEsIF9fazIpOworCXJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsCisJCQkgICAgIF9fazEsIF9fazIgLSBfX2sxKTsKKyAgICAgIH0KKworICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGl0ZXJhdG9yIF9fazEsIGl0ZXJhdG9yIF9fazIpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfUEVEQVNTRVJUKF9NX2liZWdpbigpIDw9IF9faTEgJiYgX19pMSA8PSBfX2kyCisJCQkJICYmIF9faTIgPD0gX01faWVuZCgpKTsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19rMSwgX19rMik7CisJcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKKwkJCSAgICAgX19rMS5iYXNlKCksIF9fazIgLSBfX2sxKTsKKyAgICAgIH0KKworICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsCisJICAgICAgY29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19QRURBU1NFUlQoX01faWJlZ2luKCkgPD0gX19pMSAmJiBfX2kxIDw9IF9faTIKKwkJCQkgJiYgX19pMiA8PSBfTV9pZW5kKCkpOworCV9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2sxLCBfX2syKTsKKwlyZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLAorCQkJICAgICBfX2sxLmJhc2UoKSwgX19rMiAtIF9fazEpOworICAgICAgfQorICAgICAgCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVwbGFjZSByYW5nZSBvZiBjaGFyYWN0ZXJzIHdpdGggaW5pdGlhbGl6ZXJfbGlzdC4KKyAgICAgICAqICBAcGFyYW0gX19pMSAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgc3RhcnQgb2YgcmFuZ2UgdG8gcmVwbGFjZS4KKyAgICAgICAqICBAcGFyYW0gX19pMiAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgZW5kIG9mIHJhbmdlIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIF9fbCAgVGhlIGluaXRpYWxpemVyX2xpc3Qgb2YgY2hhcmFjdGVycyB0byBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIG5ldyBsZW5ndGggZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICoKKyAgICAgICAqICBSZW1vdmVzIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbaTEsaTIpLiAgSW4gcGxhY2UsCisgICAgICAgKiAgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW2sxLGsyKSBhcmUgaW5zZXJ0ZWQuICBJZiB0aGUgbGVuZ3RoCisgICAgICAgKiAgb2YgcmVzdWx0IGV4Y2VlZHMgbWF4X3NpemUoKSwgbGVuZ3RoX2Vycm9yIGlzIHRocm93bi4gIFRoZQorICAgICAgICogIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndCBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJiByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsCisJCQkgICAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X0NoYXJUPiBfX2wpCisgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOyB9CisjZW5kaWYgLy8gX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKworICAgIHByaXZhdGU6CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW50ZWdlcj4KKwlfX3ZlcnNhX3N0cmluZyYKKwlfTV9yZXBsYWNlX2Rpc3BhdGNoKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9JbnRlZ2VyIF9fbiwKKwkJCSAgICBfSW50ZWdlciBfX3ZhbCwgc3RkOjpfX3RydWVfdHlwZSkKKyAgICAgICAgeyByZXR1cm4gX01fcmVwbGFjZV9hdXgoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwgX19uLCBfX3ZhbCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisJX192ZXJzYV9zdHJpbmcmCisJX01fcmVwbGFjZV9kaXNwYXRjaChpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyYXRvciBfX2sxLAorCQkJICAgIF9JbnB1dEl0ZXJhdG9yIF9fazIsIHN0ZDo6X19mYWxzZV90eXBlKTsKKworICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICBfTV9yZXBsYWNlX2F1eChzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgc2l6ZV90eXBlIF9fbjIsCisJCSAgICAgX0NoYXJUIF9fYyk7CisKKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgX01fcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIGNvbnN0IF9DaGFyVCogX19zLAorCQkgY29uc3Qgc2l6ZV90eXBlIF9fbGVuMik7CisKKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgX01fYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKTsKKworICAgIHB1YmxpYzoKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb3B5IHN1YnN0cmluZyBpbnRvIEMgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3MgIEMgc3RyaW5nIHRvIGNvcHkgdmFsdWUgaW50by4KKyAgICAgICAqICBAcGFyYW0gX19uICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byBjb3B5LgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIHRvIGNvcHkuCisgICAgICAgKiAgQHJldHVybiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgYWN0dWFsbHkgY29waWVkCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgcG9zID4gc2l6ZSgpLgorICAgICAgICoKKyAgICAgICAqICBDb3BpZXMgdXAgdG8gQGEgX19uIGNoYXJhY3RlcnMgc3RhcnRpbmcgYXQgQGEgX19wb3MgaW50byB0aGUKKyAgICAgICAqICBDIHN0cmluZyBAYSBzLiAgSWYgQGEgX19wb3MgaXMgZ3JlYXRlciB0aGFuIHNpemUoKSwKKyAgICAgICAqICBvdXRfb2ZfcmFuZ2UgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU3dhcCBjb250ZW50cyB3aXRoIGFub3RoZXIgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3MgIFN0cmluZyB0byBzd2FwIHdpdGguCisgICAgICAgKgorICAgICAgICogIEV4Y2hhbmdlcyB0aGUgY29udGVudHMgb2YgdGhpcyBzdHJpbmcgd2l0aCB0aGF0IG9mIEBhIF9fcyBpbgorICAgICAgICogIGNvbnN0YW50IHRpbWUuCisgICAgICAqLworICAgICAgdm9pZAorICAgICAgc3dhcChfX3ZlcnNhX3N0cmluZyYgX19zKQorICAgICAgeyB0aGlzLT5fTV9zd2FwKF9fcyk7IH0KKworICAgICAgLy8gU3RyaW5nIG9wZXJhdGlvbnM6CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBjb25zdCBwb2ludGVyIHRvIG51bGwtdGVybWluYXRlZCBjb250ZW50cy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyBhIGhhbmRsZSB0byBpbnRlcm5hbCBkYXRhLiAgRG8gbm90IG1vZGlmeSBvciBkaXJlIHRoaW5ncyBtYXkKKyAgICAgICAqICBoYXBwZW4uCisgICAgICAqLworICAgICAgY29uc3QgX0NoYXJUKgorICAgICAgY19zdHIoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01fZGF0YSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIGNvbnN0IHBvaW50ZXIgdG8gY29udGVudHMuCisgICAgICAgKgorICAgICAgICogIFRoaXMgaXMgYSBoYW5kbGUgdG8gaW50ZXJuYWwgZGF0YS4gIERvIG5vdCBtb2RpZnkgb3IgZGlyZSB0aGluZ3MgbWF5CisgICAgICAgKiAgaGFwcGVuLgorICAgICAgKi8KKyAgICAgIGNvbnN0IF9DaGFyVCoKKyAgICAgIGRhdGEoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01fZGF0YSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIGNvcHkgb2YgYWxsb2NhdG9yIHVzZWQgdG8gY29uc3RydWN0IHRoaXMgc3RyaW5nLgorICAgICAgKi8KKyAgICAgIGFsbG9jYXRvcl90eXBlCisgICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKHRoaXMtPl9NX2dldF9hbGxvY2F0b3IoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIHBvc2l0aW9uIG9mIGEgQyBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgQyBzdHJpbmcgdG8gbG9jYXRlLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBmcm9tLgorICAgICAgICogIEBwYXJhbSBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIGZyb20gQGEgX19zIHRvIHNlYXJjaCBmb3IuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2Ygc3RhcnQgb2YgZmlyc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgZm9yd2FyZCBmb3IgdGhlIGZpcnN0IEBhCisgICAgICAgKiAgX19uIGNoYXJhY3RlcnMgaW4gQGEgX19zIHdpdGhpbiB0aGlzIHN0cmluZy4gIElmIGZvdW5kLAorICAgICAgICogIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0IGJlZ2lucy4gIElmIG5vdCBmb3VuZCwgcmV0dXJucworICAgICAgICogIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgcG9zaXRpb24gb2YgYSBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fc3RyICBTdHJpbmcgdG8gbG9jYXRlLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBmcm9tIChkZWZhdWx0IDApLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIHN0YXJ0IG9mIGZpcnN0IG9jY3VycmVuY2UuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGZyb20gQGEgX19wb3MsIHNlYXJjaGVzIGZvcndhcmQgZm9yIHZhbHVlIG9mIEBhCisgICAgICAgKiAgX19zdHIgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4IHdoZXJlCisgICAgICAgKiAgaXQgYmVnaW5zLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kKGNvbnN0IF9fdmVyc2Ffc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgcG9zaXRpb24gb2YgYSBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zICBDIHN0cmluZyB0byBsb2NhdGUuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGZyb20gKGRlZmF1bHQgMCkuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2Ygc3RhcnQgb2YgZmlyc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgZm9yd2FyZCBmb3IgdGhlIHZhbHVlIG9mIEBhCisgICAgICAgKiAgX19zIHdpdGhpbiB0aGlzIHN0cmluZy4gIElmIGZvdW5kLCByZXR1cm5zIHRoZSBpbmRleCB3aGVyZQorICAgICAgICogIGl0IGJlZ2lucy4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBucG9zLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKKyAgICAgIHsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nKF9fcyk7CisJcmV0dXJuIHRoaXMtPmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIHBvc2l0aW9uIG9mIGEgY2hhcmFjdGVyLgorICAgICAgICogIEBwYXJhbSBfX2MgIENoYXJhY3RlciB0byBsb2NhdGUuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGZyb20gKGRlZmF1bHQgMCkuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2YgZmlyc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgZm9yd2FyZCBmb3IgQGEgX19jIHdpdGhpbgorICAgICAgICogIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0IHdhcworICAgICAgICogIGZvdW5kLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgbGFzdCBwb3NpdGlvbiBvZiBhIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zdHIgIFN0cmluZyB0byBsb2NhdGUuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGJhY2sgZnJvbSAoZGVmYXVsdCBlbmQpLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIHN0YXJ0IG9mIGxhc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgYmFja3dhcmQgZm9yIHZhbHVlIG9mIEBhCisgICAgICAgKiAgX19zdHIgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4IHdoZXJlCisgICAgICAgKiAgaXQgYmVnaW5zLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICByZmluZChjb25zdCBfX3ZlcnNhX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBsYXN0IHBvc2l0aW9uIG9mIGEgQyBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgQyBzdHJpbmcgdG8gbG9jYXRlLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBiYWNrIGZyb20uCisgICAgICAgKiAgQHBhcmFtIF9fbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgZnJvbSBzIHRvIHNlYXJjaCBmb3IuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2Ygc3RhcnQgb2YgbGFzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIF9fcG9zLCBzZWFyY2hlcyBiYWNrd2FyZCBmb3IgdGhlIGZpcnN0IEBhCisgICAgICAgKiAgX19uIGNoYXJhY3RlcnMgaW4gQGEgX19zIHdpdGhpbiB0aGlzIHN0cmluZy4gIElmIGZvdW5kLAorICAgICAgICogIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0IGJlZ2lucy4gIElmIG5vdCBmb3VuZCwgcmV0dXJucworICAgICAgICogIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIGxhc3QgcG9zaXRpb24gb2YgYSBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zICBDIHN0cmluZyB0byBsb2NhdGUuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc3RhcnQgc2VhcmNoIGF0IChkZWZhdWx0IGVuZCkuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2Ygc3RhcnQgb2YgIGxhc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgYmFja3dhcmQgZm9yIHRoZSB2YWx1ZSBvZgorICAgICAgICogIEBhIF9fcyB3aXRoaW4gdGhpcyBzdHJpbmcuICBJZiBmb3VuZCwgcmV0dXJucyB0aGUgaW5kZXgKKyAgICAgICAqICB3aGVyZSBpdCBiZWdpbnMuICBJZiBub3QgZm91bmQsIHJldHVybnMgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmcoX19zKTsKKwlyZXR1cm4gdGhpcy0+cmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIGxhc3QgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIuCisgICAgICAgKiAgQHBhcmFtIF9fYyAgQ2hhcmFjdGVyIHRvIGxvY2F0ZS4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggYmFjayBmcm9tIChkZWZhdWx0IGVuZCkuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2YgbGFzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIF9fcG9zLCBzZWFyY2hlcyBiYWNrd2FyZCBmb3IgQGEgX19jIHdpdGhpbgorICAgICAgICogIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0IHdhcworICAgICAgICogIGZvdW5kLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIHBvc2l0aW9uIG9mIGEgY2hhcmFjdGVyIG9mIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zdHIgIFN0cmluZyBjb250YWluaW5nIGNoYXJhY3RlcnMgdG8gbG9jYXRlLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBmcm9tIChkZWZhdWx0IDApLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGZpcnN0IG9jY3VycmVuY2UuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGZyb20gQGEgX19wb3MsIHNlYXJjaGVzIGZvcndhcmQgZm9yIG9uZSBvZiB0aGUgY2hhcmFjdGVycyBvZgorICAgICAgICogIEBhIF9fc3RyIHdpdGhpbiB0aGlzIHN0cmluZy4gIElmIGZvdW5kLCByZXR1cm5zIHRoZSBpbmRleCB3aGVyZSBpdCB3YXMKKyAgICAgICAqICBmb3VuZC4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBucG9zLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfX3ZlcnNhX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIHBvc2l0aW9uIG9mIGEgY2hhcmFjdGVyIG9mIEMgc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3MgIFN0cmluZyBjb250YWluaW5nIGNoYXJhY3RlcnMgdG8gbG9jYXRlLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBmcm9tLgorICAgICAgICogIEBwYXJhbSBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIGZyb20gcyB0byBzZWFyY2ggZm9yLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGZpcnN0IG9jY3VycmVuY2UuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGZyb20gQGEgX19wb3MsIHNlYXJjaGVzIGZvcndhcmQgZm9yIG9uZSBvZiB0aGUKKyAgICAgICAqICBmaXJzdCBAYSBfX24gY2hhcmFjdGVycyBvZiBAYSBfX3Mgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYKKyAgICAgICAqICBmb3VuZCwgcmV0dXJucyB0aGUgaW5kZXggd2hlcmUgaXQgd2FzIGZvdW5kLiAgSWYgbm90IGZvdW5kLAorICAgICAgICogIHJldHVybnMgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBwb3NpdGlvbiBvZiBhIGNoYXJhY3RlciBvZiBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zICBTdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGxvY2F0ZS4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggZnJvbSAoZGVmYXVsdCAwKS4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBmaXJzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIF9fcG9zLCBzZWFyY2hlcyBmb3J3YXJkIGZvciBvbmUgb2YgdGhlCisgICAgICAgKiAgY2hhcmFjdGVycyBvZiBAYSBfX3Mgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMKKyAgICAgICAqICB0aGUgaW5kZXggd2hlcmUgaXQgd2FzIGZvdW5kLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmcoX19zKTsKKwlyZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIuCisgICAgICAgKiAgQHBhcmFtIF9fYyAgQ2hhcmFjdGVyIHRvIGxvY2F0ZS4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggZnJvbSAoZGVmYXVsdCAwKS4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBmaXJzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIF9fcG9zLCBzZWFyY2hlcyBmb3J3YXJkIGZvciB0aGUgY2hhcmFjdGVyCisgICAgICAgKiAgQGEgX19jIHdpdGhpbiB0aGlzIHN0cmluZy4gIElmIGZvdW5kLCByZXR1cm5zIHRoZSBpbmRleAorICAgICAgICogIHdoZXJlIGl0IHdhcyBmb3VuZC4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBucG9zLgorICAgICAgICoKKyAgICAgICAqICBOb3RlOiBlcXVpdmFsZW50IHRvIGZpbmQoYywgcG9zKS4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfZmlyc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19jLCBfX3Bvcyk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIGxhc3QgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIgb2Ygc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3N0ciAgU3RyaW5nIGNvbnRhaW5pbmcgY2hhcmFjdGVycyB0byBsb2NhdGUuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGJhY2sgZnJvbSAoZGVmYXVsdCBlbmQpLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGxhc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgYmFja3dhcmQgZm9yIG9uZSBvZiB0aGUKKyAgICAgICAqICBjaGFyYWN0ZXJzIG9mIEBhIF9fc3RyIHdpdGhpbiB0aGlzIHN0cmluZy4gIElmIGZvdW5kLAorICAgICAgICogIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0IHdhcyBmb3VuZC4gIElmIG5vdCBmb3VuZCwgcmV0dXJucworICAgICAgICogIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX192ZXJzYV9zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIGxhc3QgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIgb2YgQyBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgQyBzdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGxvY2F0ZS4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggYmFjayBmcm9tLgorICAgICAgICogIEBwYXJhbSBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIGZyb20gcyB0byBzZWFyY2ggZm9yLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGxhc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgYmFja3dhcmQgZm9yIG9uZSBvZiB0aGUKKyAgICAgICAqICBmaXJzdCBAYSBfX24gY2hhcmFjdGVycyBvZiBAYSBfX3Mgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYKKyAgICAgICAqICBmb3VuZCwgcmV0dXJucyB0aGUgaW5kZXggd2hlcmUgaXQgd2FzIGZvdW5kLiAgSWYgbm90IGZvdW5kLAorICAgICAgICogIHJldHVybnMgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIGxhc3QgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIgb2YgQyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgQyBzdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGxvY2F0ZS4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggYmFjayBmcm9tIChkZWZhdWx0IGVuZCkuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2YgbGFzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIF9fcG9zLCBzZWFyY2hlcyBiYWNrd2FyZCBmb3Igb25lIG9mIHRoZQorICAgICAgICogIGNoYXJhY3RlcnMgb2YgQGEgX19zIHdpdGhpbiB0aGlzIHN0cmluZy4gIElmIGZvdW5kLCByZXR1cm5zCisgICAgICAgKiAgdGhlIGluZGV4IHdoZXJlIGl0IHdhcyBmb3VuZC4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBucG9zLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmcoX19zKTsKKwlyZXR1cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBsYXN0IHBvc2l0aW9uIG9mIGEgY2hhcmFjdGVyLgorICAgICAgICogIEBwYXJhbSBfX2MgIENoYXJhY3RlciB0byBsb2NhdGUuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGJhY2sgZnJvbSAoZGVmYXVsdCBlbmQpLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGxhc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgYmFja3dhcmQgZm9yIEBhIF9fYyB3aXRoaW4KKyAgICAgICAqICB0aGlzIHN0cmluZy4gIElmIGZvdW5kLCByZXR1cm5zIHRoZSBpbmRleCB3aGVyZSBpdCB3YXMKKyAgICAgICAqICBmb3VuZC4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBucG9zLgorICAgICAgICoKKyAgICAgICAqICBOb3RlOiBlcXVpdmFsZW50IHRvIHJmaW5kKGMsIHBvcykuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kX2xhc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fYywgX19wb3MpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBwb3NpdGlvbiBvZiBhIGNoYXJhY3RlciBub3QgaW4gc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3N0ciAgU3RyaW5nIGNvbnRhaW5pbmcgY2hhcmFjdGVycyB0byBhdm9pZC4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggZnJvbSAoZGVmYXVsdCAwKS4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBmaXJzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIF9fcG9zLCBzZWFyY2hlcyBmb3J3YXJkIGZvciBhIGNoYXJhY3RlciBub3QKKyAgICAgICAqICBjb250YWluZWQgaW4gQGEgX19zdHIgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMKKyAgICAgICAqICB0aGUgaW5kZXggd2hlcmUgaXQgd2FzIGZvdW5kLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfX3ZlcnNhX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBwb3NpdGlvbiBvZiBhIGNoYXJhY3RlciBub3QgaW4gQyBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgQyBzdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGF2b2lkLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBmcm9tLgorICAgICAgICogIEBwYXJhbSBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIGZyb20gcyB0byBjb25zaWRlci4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBmaXJzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIF9fcG9zLCBzZWFyY2hlcyBmb3J3YXJkIGZvciBhIGNoYXJhY3RlciBub3QKKyAgICAgICAqICBjb250YWluZWQgaW4gdGhlIGZpcnN0IEBhIF9fbiBjaGFyYWN0ZXJzIG9mIEBhIF9fcyB3aXRoaW4KKyAgICAgICAqICB0aGlzIHN0cmluZy4gIElmIGZvdW5kLCByZXR1cm5zIHRoZSBpbmRleCB3aGVyZSBpdCB3YXMKKyAgICAgICAqICBmb3VuZC4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBucG9zLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKKwkJCXNpemVfdHlwZSBfX24pIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIgbm90IGluIEMgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3MgIEMgc3RyaW5nIGNvbnRhaW5pbmcgY2hhcmFjdGVycyB0byBhdm9pZC4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggZnJvbSAoZGVmYXVsdCAwKS4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBmaXJzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIF9fcG9zLCBzZWFyY2hlcyBmb3J3YXJkIGZvciBhIGNoYXJhY3RlciBub3QKKyAgICAgICAqICBjb250YWluZWQgaW4gQGEgX19zIHdpdGhpbiB0aGlzIHN0cmluZy4gIElmIGZvdW5kLCByZXR1cm5zCisgICAgICAgKiAgdGhlIGluZGV4IHdoZXJlIGl0IHdhcyBmb3VuZC4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBucG9zLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfX3MpOworCXJldHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgcG9zaXRpb24gb2YgYSBkaWZmZXJlbnQgY2hhcmFjdGVyLgorICAgICAgICogIEBwYXJhbSBfX2MgIENoYXJhY3RlciB0byBhdm9pZC4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggZnJvbSAoZGVmYXVsdCAwKS4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBmaXJzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIF9fcG9zLCBzZWFyY2hlcyBmb3J3YXJkIGZvciBhIGNoYXJhY3RlcgorICAgICAgICogIG90aGVyIHRoYW4gQGEgX19jIHdpdGhpbiB0aGlzIHN0cmluZy4gIElmIGZvdW5kLCByZXR1cm5zIHRoZQorICAgICAgICogIGluZGV4IHdoZXJlIGl0IHdhcyBmb3VuZC4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBucG9zLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBsYXN0IHBvc2l0aW9uIG9mIGEgY2hhcmFjdGVyIG5vdCBpbiBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fc3RyICBTdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGF2b2lkLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBiYWNrIGZyb20gKGRlZmF1bHQgZW5kKS4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBsYXN0IG9jY3VycmVuY2UuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGZyb20gQGEgX19wb3MsIHNlYXJjaGVzIGJhY2t3YXJkIGZvciBhIGNoYXJhY3RlcgorICAgICAgICogIG5vdCBjb250YWluZWQgaW4gQGEgX19zdHIgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsCisgICAgICAgKiAgcmV0dXJucyB0aGUgaW5kZXggd2hlcmUgaXQgd2FzIGZvdW5kLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zCisgICAgICAgKiAgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX192ZXJzYV9zdHJpbmcmIF9fc3RyLAorCQkgICAgICAgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgbGFzdCBwb3NpdGlvbiBvZiBhIGNoYXJhY3RlciBub3QgaW4gQyBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgQyBzdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGF2b2lkLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBiYWNrIGZyb20uCisgICAgICAgKiAgQHBhcmFtIF9fbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgZnJvbSBzIHRvIGNvbnNpZGVyLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGxhc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgYmFja3dhcmQgZm9yIGEgY2hhcmFjdGVyCisgICAgICAgKiAgbm90IGNvbnRhaW5lZCBpbiB0aGUgZmlyc3QgQGEgX19uIGNoYXJhY3RlcnMgb2YgQGEgX19zCisgICAgICAgKiAgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0CisgICAgICAgKiAgd2FzIGZvdW5kLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsCisJCSAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBsYXN0IHBvc2l0aW9uIG9mIGEgY2hhcmFjdGVyIG5vdCBpbiBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zICBDIHN0cmluZyBjb250YWluaW5nIGNoYXJhY3RlcnMgdG8gYXZvaWQuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGJhY2sgZnJvbSAoZGVmYXVsdCBlbmQpLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGxhc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgYmFja3dhcmQgZm9yIGEgY2hhcmFjdGVyCisgICAgICAgKiAgbm90IGNvbnRhaW5lZCBpbiBAYSBfX3Mgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsCisgICAgICAgKiAgcmV0dXJucyB0aGUgaW5kZXggd2hlcmUgaXQgd2FzIGZvdW5kLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zCisgICAgICAgKiAgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfX3MpOworCXJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBsYXN0IHBvc2l0aW9uIG9mIGEgZGlmZmVyZW50IGNoYXJhY3Rlci4KKyAgICAgICAqICBAcGFyYW0gX19jICBDaGFyYWN0ZXIgdG8gYXZvaWQuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGJhY2sgZnJvbSAoZGVmYXVsdCBlbmQpLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGxhc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgYmFja3dhcmQgZm9yIGEgY2hhcmFjdGVyCisgICAgICAgKiAgb3RoZXIgdGhhbiBAYSBfX2Mgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMgdGhlCisgICAgICAgKiAgaW5kZXggd2hlcmUgaXQgd2FzIGZvdW5kLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEdldCBhIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGZpcnN0IGNoYXJhY3RlciAoZGVmYXVsdCAwKS4KKyAgICAgICAqICBAcGFyYW0gX19uICBOdW1iZXIgb2YgY2hhcmFjdGVycyBpbiBzdWJzdHJpbmcgKGRlZmF1bHQgcmVtYWluZGVyKS4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgbmV3IHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBwb3MgPiBzaXplKCkuCisgICAgICAgKgorICAgICAgICogIENvbnN0cnVjdCBhbmQgcmV0dXJuIGEgbmV3IHN0cmluZyB1c2luZyB0aGUgQGEgX19uCisgICAgICAgKiAgY2hhcmFjdGVycyBzdGFydGluZyBhdCBAYSBfX3Bvcy4gIElmIHRoZSBzdHJpbmcgaXMgdG9vCisgICAgICAgKiAgc2hvcnQsIHVzZSB0aGUgcmVtYWluZGVyIG9mIHRoZSBjaGFyYWN0ZXJzLiAgSWYgQGEgX19wb3MgaXMKKyAgICAgICAqICBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBvdXRfb2ZfcmFuZ2UgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nCisgICAgICBzdWJzdHIoc2l6ZV90eXBlIF9fcG9zID0gMCwgc2l6ZV90eXBlIF9fbiA9IG5wb3MpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIF9fdmVyc2Ffc3RyaW5nKCp0aGlzLCBfTV9jaGVjayhfX3BvcywgIl9fdmVyc2Ffc3RyaW5nOjpzdWJzdHIiKSwKKwkJCSAgICAgIF9fbik7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29tcGFyZSB0byBhIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zdHIgIFN0cmluZyB0byBjb21wYXJlIGFnYWluc3QuCisgICAgICAgKiAgQHJldHVybiAgSW50ZWdlciA8IDAsIDAsIG9yID4gMC4KKyAgICAgICAqCisgICAgICAgKiAgUmV0dXJucyBhbiBpbnRlZ2VyIDwgMCBpZiB0aGlzIHN0cmluZyBpcyBvcmRlcmVkIGJlZm9yZSBAYQorICAgICAgICogIF9fc3RyLCAwIGlmIHRoZWlyIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgb3IgPiAwIGlmIHRoaXMKKyAgICAgICAqICBzdHJpbmcgaXMgb3JkZXJlZCBhZnRlciBAYSBfX3N0ci4gIERldGVybWluZXMgdGhlIGVmZmVjdGl2ZQorICAgICAgICogIGxlbmd0aCBybGVuIG9mIHRoZSBzdHJpbmdzIHRvIGNvbXBhcmUgYXMgdGhlIHNtYWxsZXN0IG9mCisgICAgICAgKiAgc2l6ZSgpIGFuZCBzdHIuc2l6ZSgpLiAgVGhlIGZ1bmN0aW9uIHRoZW4gY29tcGFyZXMgdGhlIHR3bworICAgICAgICogIHN0cmluZ3MgYnkgY2FsbGluZyB0cmFpdHM6OmNvbXBhcmUoZGF0YSgpLCBzdHIuZGF0YSgpLHJsZW4pLgorICAgICAgICogIElmIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24gaXMgbm9uemVybyByZXR1cm5zIGl0LAorICAgICAgICogIG90aGVyd2lzZSB0aGUgc2hvcnRlciBvbmUgaXMgb3JkZXJlZCBmaXJzdC4KKyAgICAgICovCisgICAgICBpbnQKKyAgICAgIGNvbXBhcmUoY29uc3QgX192ZXJzYV9zdHJpbmcmIF9fc3RyKSBjb25zdAorICAgICAgeworCWlmICh0aGlzLT5fTV9jb21wYXJlKF9fc3RyKSkKKwkgIHJldHVybiAwOworCisJY29uc3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKKwljb25zdCBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKKwljb25zdCBzaXplX3R5cGUgX19sZW4gPSBzdGQ6Om1pbihfX3NpemUsIF9fb3NpemUpOworCisJaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKHRoaXMtPl9NX2RhdGEoKSwgX19zdHIuZGF0YSgpLCBfX2xlbik7CisJaWYgKCFfX3IpCisJICBfX3IgPSBfU19jb21wYXJlKF9fc2l6ZSwgX19vc2l6ZSk7CisJcmV0dXJuIF9fcjsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb21wYXJlIHN1YnN0cmluZyB0byBhIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGZpcnN0IGNoYXJhY3RlciBvZiBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3N0ciAgU3RyaW5nIHRvIGNvbXBhcmUgYWdhaW5zdC4KKyAgICAgICAqICBAcmV0dXJuICBJbnRlZ2VyIDwgMCwgMCwgb3IgPiAwLgorICAgICAgICoKKyAgICAgICAqICBGb3JtIHRoZSBzdWJzdHJpbmcgb2YgdGhpcyBzdHJpbmcgZnJvbSB0aGUgQGEgX19uIGNoYXJhY3RlcnMKKyAgICAgICAqICBzdGFydGluZyBhdCBAYSBfX3Bvcy4gIFJldHVybnMgYW4gaW50ZWdlciA8IDAgaWYgdGhlCisgICAgICAgKiAgc3Vic3RyaW5nIGlzIG9yZGVyZWQgYmVmb3JlIEBhIF9fc3RyLCAwIGlmIHRoZWlyIHZhbHVlcyBhcmUKKyAgICAgICAqICBlcXVpdmFsZW50LCBvciA+IDAgaWYgdGhlIHN1YnN0cmluZyBpcyBvcmRlcmVkIGFmdGVyIEBhCisgICAgICAgKiAgX19zdHIuICBEZXRlcm1pbmVzIHRoZSBlZmZlY3RpdmUgbGVuZ3RoIHJsZW4gb2YgdGhlIHN0cmluZ3MKKyAgICAgICAqICB0byBjb21wYXJlIGFzIHRoZSBzbWFsbGVzdCBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBzdWJzdHJpbmcKKyAgICAgICAqICBhbmQgQGEgX19zdHIuc2l6ZSgpLiAgVGhlIGZ1bmN0aW9uIHRoZW4gY29tcGFyZXMgdGhlIHR3bworICAgICAgICogIHN0cmluZ3MgYnkgY2FsbGluZworICAgICAgICogIHRyYWl0czo6Y29tcGFyZShzdWJzdHJpbmcuZGF0YSgpLHN0ci5kYXRhKCkscmxlbikuICBJZiB0aGUKKyAgICAgICAqICByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24gaXMgbm9uemVybyByZXR1cm5zIGl0LCBvdGhlcndpc2UKKyAgICAgICAqICB0aGUgc2hvcnRlciBvbmUgaXMgb3JkZXJlZCBmaXJzdC4KKyAgICAgICovCisgICAgICBpbnQKKyAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLAorCSAgICAgIGNvbnN0IF9fdmVyc2Ffc3RyaW5nJiBfX3N0cikgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29tcGFyZSBzdWJzdHJpbmcgdG8gYSBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zMSAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIG9mIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19uMSAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3N0ciAgU3RyaW5nIHRvIGNvbXBhcmUgYWdhaW5zdC4KKyAgICAgICAqICBAcGFyYW0gX19wb3MyICBJbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXIgb2Ygc3Vic3RyaW5nIG9mIHN0ci4KKyAgICAgICAqICBAcGFyYW0gX19uMiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gc3Vic3RyaW5nIG9mIHN0ci4KKyAgICAgICAqICBAcmV0dXJuICBJbnRlZ2VyIDwgMCwgMCwgb3IgPiAwLgorICAgICAgICoKKyAgICAgICAqICBGb3JtIHRoZSBzdWJzdHJpbmcgb2YgdGhpcyBzdHJpbmcgZnJvbSB0aGUgQGEgX19uMQorICAgICAgICogIGNoYXJhY3RlcnMgc3RhcnRpbmcgYXQgQGEgX19wb3MxLiAgRm9ybSB0aGUgc3Vic3RyaW5nIG9mIEBhCisgICAgICAgKiAgX19zdHIgZnJvbSB0aGUgQGEgX19uMiBjaGFyYWN0ZXJzIHN0YXJ0aW5nIGF0IEBhIF9fcG9zMi4KKyAgICAgICAqICBSZXR1cm5zIGFuIGludGVnZXIgPCAwIGlmIHRoaXMgc3Vic3RyaW5nIGlzIG9yZGVyZWQgYmVmb3JlCisgICAgICAgKiAgdGhlIHN1YnN0cmluZyBvZiBAYSBfX3N0ciwgMCBpZiB0aGVpciB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsCisgICAgICAgKiAgb3IgPiAwIGlmIHRoaXMgc3Vic3RyaW5nIGlzIG9yZGVyZWQgYWZ0ZXIgdGhlIHN1YnN0cmluZyBvZgorICAgICAgICogIEBhIF9fc3RyLiAgRGV0ZXJtaW5lcyB0aGUgZWZmZWN0aXZlIGxlbmd0aCBybGVuIG9mIHRoZQorICAgICAgICogIHN0cmluZ3MgdG8gY29tcGFyZSBhcyB0aGUgc21hbGxlc3Qgb2YgdGhlIGxlbmd0aHMgb2YgdGhlCisgICAgICAgKiAgc3Vic3RyaW5ncy4gIFRoZSBmdW5jdGlvbiB0aGVuIGNvbXBhcmVzIHRoZSB0d28gc3RyaW5ncyBieQorICAgICAgICogIGNhbGxpbmcKKyAgICAgICAqICB0cmFpdHM6OmNvbXBhcmUoc3Vic3RyaW5nLmRhdGEoKSxzdHIuc3Vic3RyKHBvczIsbjIpLmRhdGEoKSxybGVuKS4KKyAgICAgICAqICBJZiB0aGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIGlzIG5vbnplcm8gcmV0dXJucyBpdCwKKyAgICAgICAqICBvdGhlcndpc2UgdGhlIHNob3J0ZXIgb25lIGlzIG9yZGVyZWQgZmlyc3QuCisgICAgICAqLworICAgICAgaW50CisgICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfX3ZlcnNhX3N0cmluZyYgX19zdHIsCisJICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbXBhcmUgdG8gYSBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zICBDIHN0cmluZyB0byBjb21wYXJlIGFnYWluc3QuCisgICAgICAgKiAgQHJldHVybiAgSW50ZWdlciA8IDAsIDAsIG9yID4gMC4KKyAgICAgICAqCisgICAgICAgKiAgUmV0dXJucyBhbiBpbnRlZ2VyIDwgMCBpZiB0aGlzIHN0cmluZyBpcyBvcmRlcmVkIGJlZm9yZSBAYQorICAgICAgICogIF9fcywgMCBpZiB0aGVpciB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIG9yID4gMCBpZiB0aGlzIHN0cmluZworICAgICAgICogIGlzIG9yZGVyZWQgYWZ0ZXIgQGEgX19zLiAgRGV0ZXJtaW5lcyB0aGUgZWZmZWN0aXZlIGxlbmd0aAorICAgICAgICogIHJsZW4gb2YgdGhlIHN0cmluZ3MgdG8gY29tcGFyZSBhcyB0aGUgc21hbGxlc3Qgb2Ygc2l6ZSgpIGFuZAorICAgICAgICogIHRoZSBsZW5ndGggb2YgYSBzdHJpbmcgY29uc3RydWN0ZWQgZnJvbSBAYSBfX3MuICBUaGUKKyAgICAgICAqICBmdW5jdGlvbiB0aGVuIGNvbXBhcmVzIHRoZSB0d28gc3RyaW5ncyBieSBjYWxsaW5nCisgICAgICAgKiAgdHJhaXRzOjpjb21wYXJlKGRhdGEoKSxzLHJsZW4pLiAgSWYgdGhlIHJlc3VsdCBvZiB0aGUKKyAgICAgICAqICBjb21wYXJpc29uIGlzIG5vbnplcm8gcmV0dXJucyBpdCwgb3RoZXJ3aXNlIHRoZSBzaG9ydGVyIG9uZQorICAgICAgICogIGlzIG9yZGVyZWQgZmlyc3QuCisgICAgICAqLworICAgICAgaW50CisgICAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNSBTdHJpbmc6OmNvbXBhcmUgc3BlY2lmaWNhdGlvbiBxdWVzdGlvbmFibGUKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29tcGFyZSBzdWJzdHJpbmcgdG8gYSBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGZpcnN0IGNoYXJhY3RlciBvZiBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fbjEgIE51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zICBDIHN0cmluZyB0byBjb21wYXJlIGFnYWluc3QuCisgICAgICAgKiAgQHJldHVybiAgSW50ZWdlciA8IDAsIDAsIG9yID4gMC4KKyAgICAgICAqCisgICAgICAgKiAgRm9ybSB0aGUgc3Vic3RyaW5nIG9mIHRoaXMgc3RyaW5nIGZyb20gdGhlIEBhIF9fbjEKKyAgICAgICAqICBjaGFyYWN0ZXJzIHN0YXJ0aW5nIGF0IEBhIF9fcG9zLiAgUmV0dXJucyBhbiBpbnRlZ2VyIDwgMCBpZgorICAgICAgICogIHRoZSBzdWJzdHJpbmcgaXMgb3JkZXJlZCBiZWZvcmUgQGEgX19zLCAwIGlmIHRoZWlyIHZhbHVlcworICAgICAgICogIGFyZSBlcXVpdmFsZW50LCBvciA+IDAgaWYgdGhlIHN1YnN0cmluZyBpcyBvcmRlcmVkIGFmdGVyIEBhCisgICAgICAgKiAgX19zLiAgRGV0ZXJtaW5lcyB0aGUgZWZmZWN0aXZlIGxlbmd0aCBybGVuIG9mIHRoZSBzdHJpbmdzIHRvCisgICAgICAgKiAgY29tcGFyZSBhcyB0aGUgc21hbGxlc3Qgb2YgdGhlIGxlbmd0aCBvZiB0aGUgc3Vic3RyaW5nIGFuZAorICAgICAgICogIHRoZSBsZW5ndGggb2YgYSBzdHJpbmcgY29uc3RydWN0ZWQgZnJvbSBAYSBfX3MuICBUaGUKKyAgICAgICAqICBmdW5jdGlvbiB0aGVuIGNvbXBhcmVzIHRoZSB0d28gc3RyaW5nIGJ5IGNhbGxpbmcKKyAgICAgICAqICB0cmFpdHM6OmNvbXBhcmUoc3Vic3RyaW5nLmRhdGEoKSxzLHJsZW4pLiAgSWYgdGhlIHJlc3VsdCBvZgorICAgICAgICogIHRoZSBjb21wYXJpc29uIGlzIG5vbnplcm8gcmV0dXJucyBpdCwgb3RoZXJ3aXNlIHRoZSBzaG9ydGVyCisgICAgICAgKiAgb25lIGlzIG9yZGVyZWQgZmlyc3QuCisgICAgICAqLworICAgICAgaW50CisgICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb21wYXJlIHN1YnN0cmluZyBhZ2FpbnN0IGEgY2hhcmFjdGVyIGFycmF5LgorICAgICAgICogIEBwYXJhbSBfX3BvczEgIEluZGV4IG9mIGZpcnN0IGNoYXJhY3RlciBvZiBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fbjEgIE51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zICBjaGFyYWN0ZXIgYXJyYXkgdG8gY29tcGFyZSBhZ2FpbnN0LgorICAgICAgICogIEBwYXJhbSBfX24yICBOdW1iZXIgb2YgY2hhcmFjdGVycyBvZiBzLgorICAgICAgICogIEByZXR1cm4gIEludGVnZXIgPCAwLCAwLCBvciA+IDAuCisgICAgICAgKgorICAgICAgICogIEZvcm0gdGhlIHN1YnN0cmluZyBvZiB0aGlzIHN0cmluZyBmcm9tIHRoZSBAYSBfX24xCisgICAgICAgKiAgY2hhcmFjdGVycyBzdGFydGluZyBhdCBAYSBfX3BvczEuICBGb3JtIGEgc3RyaW5nIGZyb20gdGhlCisgICAgICAgKiAgZmlyc3QgQGEgX19uMiBjaGFyYWN0ZXJzIG9mIEBhIF9fcy4gIFJldHVybnMgYW4gaW50ZWdlciA8IDAKKyAgICAgICAqICBpZiB0aGlzIHN1YnN0cmluZyBpcyBvcmRlcmVkIGJlZm9yZSB0aGUgc3RyaW5nIGZyb20gQGEgX19zLAorICAgICAgICogIDAgaWYgdGhlaXIgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBvciA+IDAgaWYgdGhpcyBzdWJzdHJpbmcKKyAgICAgICAqICBpcyBvcmRlcmVkIGFmdGVyIHRoZSBzdHJpbmcgZnJvbSBAYSBfX3MuICBEZXRlcm1pbmVzIHRoZQorICAgICAgICogIGVmZmVjdGl2ZSBsZW5ndGggcmxlbiBvZiB0aGUgc3RyaW5ncyB0byBjb21wYXJlIGFzIHRoZQorICAgICAgICogIHNtYWxsZXN0IG9mIHRoZSBsZW5ndGggb2YgdGhlIHN1YnN0cmluZyBhbmQgQGEgX19uMi4gIFRoZQorICAgICAgICogIGZ1bmN0aW9uIHRoZW4gY29tcGFyZXMgdGhlIHR3byBzdHJpbmdzIGJ5IGNhbGxpbmcKKyAgICAgICAqICB0cmFpdHM6OmNvbXBhcmUoc3Vic3RyaW5nLmRhdGEoKSxzLHJsZW4pLiAgSWYgdGhlIHJlc3VsdCBvZgorICAgICAgICogIHRoZSBjb21wYXJpc29uIGlzIG5vbnplcm8gcmV0dXJucyBpdCwgb3RoZXJ3aXNlIHRoZSBzaG9ydGVyCisgICAgICAgKiAgb25lIGlzIG9yZGVyZWQgZmlyc3QuCisgICAgICAgKgorICAgICAgICogIE5COiBzIG11c3QgaGF2ZSBhdCBsZWFzdCBuMiBjaGFyYWN0ZXJzLCA8ZW0+XFwwPC9lbT4gaGFzIG5vIHNwZWNpYWwKKyAgICAgICAqICBtZWFuaW5nLgorICAgICAgKi8KKyAgICAgIGludAorICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKKwkgICAgICBzaXplX3R5cGUgX19uMikgY29uc3Q7CisgICAgfTsKKworICAvLyBvcGVyYXRvcisKKyAgLyoqCisgICAqICBAYnJpZWYgIENvbmNhdGVuYXRlIHR3byBzdHJpbmdzLgorICAgKiAgQHBhcmFtIF9fbGhzICBGaXJzdCBzdHJpbmcuCisgICAqICBAcGFyYW0gX19yaHMgIExhc3Qgc3RyaW5nLgorICAgKiAgQHJldHVybiAgTmV3IHN0cmluZyB3aXRoIHZhbHVlIG9mIEBhIF9fbGhzIGZvbGxvd2VkIGJ5IEBhIF9fcmhzLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4KKyAgICBvcGVyYXRvcisoY29uc3QgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYgX19saHMsCisJICAgICAgY29uc3QgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYgX19yaHMpOworCisgIC8qKgorICAgKiAgQGJyaWVmICBDb25jYXRlbmF0ZSBDIHN0cmluZyBhbmQgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fbGhzICBGaXJzdCBzdHJpbmcuCisgICAqICBAcGFyYW0gX19yaHMgIExhc3Qgc3RyaW5nLgorICAgKiAgQHJldHVybiAgTmV3IHN0cmluZyB3aXRoIHZhbHVlIG9mIEBhIF9fbGhzIGZvbGxvd2VkIGJ5IEBhIF9fcmhzLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4KKyAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywKKwkgICAgICBjb25zdCBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiBfX3Jocyk7CisKKyAgLyoqCisgICAqICBAYnJpZWYgIENvbmNhdGVuYXRlIGNoYXJhY3RlciBhbmQgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fbGhzICBGaXJzdCBzdHJpbmcuCisgICAqICBAcGFyYW0gX19yaHMgIExhc3Qgc3RyaW5nLgorICAgKiAgQHJldHVybiAgTmV3IHN0cmluZyB3aXRoIEBhIF9fbGhzIGZvbGxvd2VkIGJ5IEBhIF9fcmhzLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4KKyAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLAorCSAgICAgIGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fcmhzKTsKKworICAvKioKKyAgICogIEBicmllZiAgQ29uY2F0ZW5hdGUgc3RyaW5nIGFuZCBDIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX2xocyAgRmlyc3Qgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBMYXN0IHN0cmluZy4KKyAgICogIEByZXR1cm4gIE5ldyBzdHJpbmcgd2l0aCBAYSBfX2xocyBmb2xsb3dlZCBieSBAYSBfX3Jocy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+CisgICAgb3BlcmF0b3IrKGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fbGhzLAorCSAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpOworCisgIC8qKgorICAgKiAgQGJyaWVmICBDb25jYXRlbmF0ZSBzdHJpbmcgYW5kIGNoYXJhY3Rlci4KKyAgICogIEBwYXJhbSBfX2xocyAgRmlyc3Qgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBMYXN0IHN0cmluZy4KKyAgICogIEByZXR1cm4gIE5ldyBzdHJpbmcgd2l0aCBAYSBfX2xocyBmb2xsb3dlZCBieSBAYSBfX3Jocy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+CisgICAgb3BlcmF0b3IrKGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fbGhzLAorCSAgICAgIF9DaGFyVCBfX3Jocyk7CisKKyAgLy8gb3BlcmF0b3IgPT0KKyAgLyoqCisgICAqICBAYnJpZWYgIFRlc3QgZXF1aXZhbGVuY2Ugb2YgdHdvIHN0cmluZ3MuCisgICAqICBAcGFyYW0gX19saHMgIEZpcnN0IHN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgU2Vjb25kIHN0cmluZy4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgX19saHMuY29tcGFyZShAYSBfX3JocykgPT0gMC4gIEZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYgX19saHMsCisJICAgICAgIGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2VuYWJsZV9pZjxzdGQ6Ol9faXNfY2hhcjxfQ2hhclQ+OjpfX3ZhbHVlLCBib29sPjo6X190eXBlCisgICAgb3BlcmF0b3I9PShjb25zdCBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIHN0ZDo6Y2hhcl90cmFpdHM8X0NoYXJUPiwKKwkgICAgICAgc3RkOjphbGxvY2F0b3I8X0NoYXJUPiwgX0Jhc2U+JiBfX2xocywKKwkgICAgICAgY29uc3QgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBzdGQ6OmNoYXJfdHJhaXRzPF9DaGFyVD4sCisJICAgICAgIHN0ZDo6YWxsb2NhdG9yPF9DaGFyVD4sIF9CYXNlPiYgX19yaHMpCisgICAgeyByZXR1cm4gKF9fbGhzLnNpemUoKSA9PSBfX3Jocy5zaXplKCkKKwkgICAgICAmJiAhc3RkOjpjaGFyX3RyYWl0czxfQ2hhclQ+Ojpjb21wYXJlKF9fbGhzLmRhdGEoKSwgX19yaHMuZGF0YSgpLAorCQkJCQkJICAgIF9fbGhzLnNpemUoKSkpOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFRlc3QgZXF1aXZhbGVuY2Ugb2YgQyBzdHJpbmcgYW5kIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX2xocyAgQyBzdHJpbmcuCisgICAqICBAcGFyYW0gX19yaHMgIFN0cmluZy4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgX19yaHMuY29tcGFyZShAYSBfX2xocykgPT0gMC4gIEZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX0NoYXJUKiBfX2xocywKKwkgICAgICAgY29uc3QgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPT0gMDsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGVxdWl2YWxlbmNlIG9mIHN0cmluZyBhbmQgQyBzdHJpbmcuCisgICAqICBAcGFyYW0gX19saHMgIFN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgQyBzdHJpbmcuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIEBhIF9fbGhzLmNvbXBhcmUoQGEgX19yaHMpID09IDAuICBGYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0KKworICAvLyBvcGVyYXRvciAhPQorICAvKioKKyAgICogIEBicmllZiAgVGVzdCBkaWZmZXJlbmNlIG9mIHR3byBzdHJpbmdzLgorICAgKiAgQHBhcmFtIF9fbGhzICBGaXJzdCBzdHJpbmcuCisgICAqICBAcGFyYW0gX19yaHMgIFNlY29uZCBzdHJpbmcuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIEBhIF9fbGhzLmNvbXBhcmUoQGEgX19yaHMpICE9IDAuICBGYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiBfX3JocykKKyAgICB7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGRpZmZlcmVuY2Ugb2YgQyBzdHJpbmcgYW5kIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX2xocyAgQyBzdHJpbmcuCisgICAqICBAcGFyYW0gX19yaHMgIFN0cmluZy4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgX19yaHMuY29tcGFyZShAYSBfX2xocykgIT0gMC4gIEZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX0NoYXJUKiBfX2xocywKKwkgICAgICAgY29uc3QgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYgX19yaHMpCisgICAgeyByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7IH0KKworICAvKioKKyAgICogIEBicmllZiAgVGVzdCBkaWZmZXJlbmNlIG9mIHN0cmluZyBhbmQgQyBzdHJpbmcuCisgICAqICBAcGFyYW0gX19saHMgIFN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgQyBzdHJpbmcuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIEBhIF9fbGhzLmNvbXBhcmUoQGEgX19yaHMpICE9IDAuICBGYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQorICAgIHsgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOyB9CisKKyAgLy8gb3BlcmF0b3IgPAorICAvKioKKyAgICogIEBicmllZiAgVGVzdCBpZiBzdHJpbmcgcHJlY2VkZXMgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fbGhzICBGaXJzdCBzdHJpbmcuCisgICAqICBAcGFyYW0gX19yaHMgIFNlY29uZCBzdHJpbmcuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIEBhIF9fbGhzIHByZWNlZGVzIEBhIF9fcmhzLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fbGhzLAorCSAgICAgIGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwgMDsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGlmIHN0cmluZyBwcmVjZWRlcyBDIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX2xocyAgU3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBDIHN0cmluZy4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgX19saHMgcHJlY2VkZXMgQGEgX19yaHMuICBGYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYgX19saHMsCisJICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KKworICAvKioKKyAgICogIEBicmllZiAgVGVzdCBpZiBDIHN0cmluZyBwcmVjZWRlcyBzdHJpbmcuCisgICAqICBAcGFyYW0gX19saHMgIEMgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBTdHJpbmcuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIEBhIF9fbGhzIHByZWNlZGVzIEBhIF9fcmhzLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IF9DaGFyVCogX19saHMsCisJICAgICAgY29uc3QgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPiAwOyB9CisKKyAgLy8gb3BlcmF0b3IgPgorICAvKioKKyAgICogIEBicmllZiAgVGVzdCBpZiBzdHJpbmcgZm9sbG93cyBzdHJpbmcuCisgICAqICBAcGFyYW0gX19saHMgIEZpcnN0IHN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgU2Vjb25kIHN0cmluZy4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgX19saHMgZm9sbG93cyBAYSBfX3Jocy4gIEZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiBfX2xocywKKwkgICAgICBjb25zdCBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+IDA7IH0KKworICAvKioKKyAgICogIEBicmllZiAgVGVzdCBpZiBzdHJpbmcgZm9sbG93cyBDIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX2xocyAgU3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBDIHN0cmluZy4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgX19saHMgZm9sbG93cyBAYSBfX3Jocy4gIEZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiBfX2xocywKKwkgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGlmIEMgc3RyaW5nIGZvbGxvd3Mgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fbGhzICBDIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgU3RyaW5nLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBAYSBfX2xocyBmb2xsb3dzIEBhIF9fcmhzLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IF9DaGFyVCogX19saHMsCisJICAgICAgY29uc3QgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPCAwOyB9CisKKyAgLy8gb3BlcmF0b3IgPD0KKyAgLyoqCisgICAqICBAYnJpZWYgIFRlc3QgaWYgc3RyaW5nIGRvZXNuJ3QgZm9sbG93IHN0cmluZy4KKyAgICogIEBwYXJhbSBfX2xocyAgRmlyc3Qgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBTZWNvbmQgc3RyaW5nLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBAYSBfX2xocyBkb2Vzbid0IGZvbGxvdyBAYSBfX3Jocy4gIEZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYgX19saHMsCisJICAgICAgIGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KKworICAvKioKKyAgICogIEBicmllZiAgVGVzdCBpZiBzdHJpbmcgZG9lc24ndCBmb2xsb3cgQyBzdHJpbmcuCisgICAqICBAcGFyYW0gX19saHMgIFN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgQyBzdHJpbmcuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIEBhIF9fbGhzIGRvZXNuJ3QgZm9sbG93IEBhIF9fcmhzLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiBfX2xocywKKwkgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFRlc3QgaWYgQyBzdHJpbmcgZG9lc24ndCBmb2xsb3cgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fbGhzICBDIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgU3RyaW5nLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBAYSBfX2xocyBkb2Vzbid0IGZvbGxvdyBAYSBfX3Jocy4gIEZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgX0NoYXJUKiBfX2xocywKKwkgICAgICAgY29uc3QgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPj0gMDsgfQorCisgIC8vIG9wZXJhdG9yID49CisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGlmIHN0cmluZyBkb2Vzbid0IHByZWNlZGUgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fbGhzICBGaXJzdCBzdHJpbmcuCisgICAqICBAcGFyYW0gX19yaHMgIFNlY29uZCBzdHJpbmcuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIEBhIF9fbGhzIGRvZXNuJ3QgcHJlY2VkZSBAYSBfX3Jocy4gIEZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYgX19saHMsCisJICAgICAgIGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0KKworICAvKioKKyAgICogIEBicmllZiAgVGVzdCBpZiBzdHJpbmcgZG9lc24ndCBwcmVjZWRlIEMgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fbGhzICBTdHJpbmcuCisgICAqICBAcGFyYW0gX19yaHMgIEMgc3RyaW5nLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBAYSBfX2xocyBkb2Vzbid0IHByZWNlZGUgQGEgX19yaHMuICBGYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0KKworICAvKioKKyAgICogIEBicmllZiAgVGVzdCBpZiBDIHN0cmluZyBkb2Vzbid0IHByZWNlZGUgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fbGhzICBDIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgU3RyaW5nLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBAYSBfX2xocyBkb2Vzbid0IHByZWNlZGUgQGEgX19yaHMuICBGYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IF9DaGFyVCogX19saHMsCisJICAgICAgIGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDw9IDA7IH0KKworICAvKioKKyAgICogIEBicmllZiAgU3dhcCBjb250ZW50cyBvZiB0d28gc3RyaW5ncy4KKyAgICogIEBwYXJhbSBfX2xocyAgRmlyc3Qgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBTZWNvbmQgc3RyaW5nLgorICAgKgorICAgKiAgRXhjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBAYSBfX2xocyBhbmQgQGEgX19yaHMgaW4gY29uc3RhbnQgdGltZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYgX19saHMsCisJIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fcmhzKQorICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8qKgorICAgKiAgQGJyaWVmICBSZWFkIHN0cmVhbSBpbnRvIGEgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9faXMgIElucHV0IHN0cmVhbS4KKyAgICogIEBwYXJhbSBfX3N0ciAgQnVmZmVyIHRvIHN0b3JlIGludG8uCisgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhlIGlucHV0IHN0cmVhbS4KKyAgICoKKyAgICogIFN0b3JlcyBjaGFyYWN0ZXJzIGZyb20gQGEgX19pcyBpbnRvIEBhIF9fc3RyIHVudGlsIHdoaXRlc3BhY2UgaXMKKyAgICogIGZvdW5kLCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gaXMgZW5jb3VudGVyZWQsIG9yIHN0ci5tYXhfc2l6ZSgpCisgICAqICBpcyByZWFjaGVkLiAgSWYgaXMud2lkdGgoKSBpcyBub24temVybywgdGhhdCBpcyB0aGUgbGltaXQgb24gdGhlCisgICAqICBudW1iZXIgb2YgY2hhcmFjdGVycyBzdG9yZWQgaW50byBAYSBfX3N0ci4gIEFueSBwcmV2aW91cworICAgKiAgY29udGVudHMgb2YgQGEgX19zdHIgYXJlIGVyYXNlZC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICBfX2dudV9jeHg6Ol9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2MsIF9CYXNlPiYgX19zdHIpOworCisgIC8qKgorICAgKiAgQGJyaWVmICBXcml0ZSBzdHJpbmcgdG8gYSBzdHJlYW0uCisgICAqICBAcGFyYW0gX19vcyAgT3V0cHV0IHN0cmVhbS4KKyAgICogIEBwYXJhbSBfX3N0ciAgU3RyaW5nIHRvIHdyaXRlIG91dC4KKyAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGUgb3V0cHV0IHN0cmVhbS4KKyAgICoKKyAgICogIE91dHB1dCBjaGFyYWN0ZXJzIG9mIEBhIF9fc3RyIGludG8gb3MgZm9sbG93aW5nIHRoZSBzYW1lIHJ1bGVzIGFzIGZvcgorICAgKiAgd3JpdGluZyBhIEMgc3RyaW5nLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IF9fZ251X2N4eDo6X192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsCisJICAgICAgIF9CYXNlPiYgX19zdHIpCisgICAgeworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNTg2LiBzdHJpbmcgaW5zZXJ0ZXIgbm90IGEgZm9ybWF0dGVkIGZ1bmN0aW9uCisgICAgICByZXR1cm4gX19vc3RyZWFtX2luc2VydChfX29zLCBfX3N0ci5kYXRhKCksIF9fc3RyLnNpemUoKSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBSZWFkIGEgbGluZSBmcm9tIHN0cmVhbSBpbnRvIGEgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9faXMgIElucHV0IHN0cmVhbS4KKyAgICogIEBwYXJhbSBfX3N0ciAgQnVmZmVyIHRvIHN0b3JlIGludG8uCisgICAqICBAcGFyYW0gX19kZWxpbSAgQ2hhcmFjdGVyIG1hcmtpbmcgZW5kIG9mIGxpbmUuCisgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhlIGlucHV0IHN0cmVhbS4KKyAgICoKKyAgICogIFN0b3JlcyBjaGFyYWN0ZXJzIGZyb20gQGEgX19pcyBpbnRvIEBhIF9fc3RyIHVudGlsIEBhIF9fZGVsaW0gaXMKKyAgICogIGZvdW5kLCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gaXMgZW5jb3VudGVyZWQsIG9yIHN0ci5tYXhfc2l6ZSgpCisgICAqICBpcyByZWFjaGVkLiAgSWYgaXMud2lkdGgoKSBpcyBub24temVybywgdGhhdCBpcyB0aGUgbGltaXQgb24gdGhlCisgICAqICBudW1iZXIgb2YgY2hhcmFjdGVycyBzdG9yZWQgaW50byBAYSBfX3N0ci4gIEFueSBwcmV2aW91cworICAgKiAgY29udGVudHMgb2YgQGEgX19zdHIgYXJlIGVyYXNlZC4gIElmIEBhIGRlbGltIHdhcyBlbmNvdW50ZXJlZCwKKyAgICogIGl0IGlzIGV4dHJhY3RlZCBidXQgbm90IHN0b3JlZCBpbnRvIEBhIF9fc3RyLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgIF9fZ251X2N4eDo6X192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYgX19zdHIsCisJICAgIF9DaGFyVCBfX2RlbGltKTsKKworICAvKioKKyAgICogIEBicmllZiAgUmVhZCBhIGxpbmUgZnJvbSBzdHJlYW0gaW50byBhIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX2lzICBJbnB1dCBzdHJlYW0uCisgICAqICBAcGFyYW0gX19zdHIgIEJ1ZmZlciB0byBzdG9yZSBpbnRvLgorICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoZSBpbnB1dCBzdHJlYW0uCisgICAqCisgICAqICBTdG9yZXMgY2hhcmFjdGVycyBmcm9tIGlzIGludG8gQGEgX19zdHIgdW50aWwgJmFwb3M7XG4mYXBvczsgaXMKKyAgICogIGZvdW5kLCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gaXMgZW5jb3VudGVyZWQsIG9yIHN0ci5tYXhfc2l6ZSgpCisgICAqICBpcyByZWFjaGVkLiAgSWYgaXMud2lkdGgoKSBpcyBub24temVybywgdGhhdCBpcyB0aGUgbGltaXQgb24gdGhlCisgICAqICBudW1iZXIgb2YgY2hhcmFjdGVycyBzdG9yZWQgaW50byBAYSBfX3N0ci4gIEFueSBwcmV2aW91cworICAgKiAgY29udGVudHMgb2YgQGEgX19zdHIgYXJlIGVyYXNlZC4gIElmIGVuZCBvZiBsaW5lIHdhcworICAgKiAgZW5jb3VudGVyZWQsIGl0IGlzIGV4dHJhY3RlZCBidXQgbm90IHN0b3JlZCBpbnRvIEBhIF9fc3RyLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICBfX2dudV9jeHg6Ol9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fc3RyKQorICAgIHsgcmV0dXJuIGdldGxpbmUoX19pcywgX19zdHIsIF9faXMud2lkZW4oJ1xuJykpOyB9ICAgICAgCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2lmIChkZWZpbmVkKF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fKSAmJiBkZWZpbmVkKF9HTElCQ1hYX1VTRV9DOTkpKQorCisjaW5jbHVkZSA8ZXh0L3N0cmluZ19jb252ZXJzaW9ucy5oPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorCisgIC8vIDIxLjQgTnVtZXJpYyBDb252ZXJzaW9ucyBbc3RyaW5nLmNvbnZlcnNpb25zXS4KKyAgaW5saW5lIGludAorICBzdG9pKGNvbnN0IF9fdnN0cmluZyYgX19zdHIsIHN0ZDo6c2l6ZV90KiBfX2lkeCA9IDAsIGludCBfX2Jhc2UgPSAxMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2E8bG9uZywgaW50Pigmc3RkOjpzdHJ0b2wsICJzdG9pIiwgX19zdHIuY19zdHIoKSwKKwkJCQkJX19pZHgsIF9fYmFzZSk7IH0KKworICBpbmxpbmUgbG9uZworICBzdG9sKGNvbnN0IF9fdnN0cmluZyYgX19zdHIsIHN0ZDo6c2l6ZV90KiBfX2lkeCA9IDAsIGludCBfX2Jhc2UgPSAxMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2EoJnN0ZDo6c3RydG9sLCAic3RvbCIsIF9fc3RyLmNfc3RyKCksCisJCQkgICAgIF9faWR4LCBfX2Jhc2UpOyB9CisKKyAgaW5saW5lIHVuc2lnbmVkIGxvbmcKKyAgc3RvdWwoY29uc3QgX192c3RyaW5nJiBfX3N0ciwgc3RkOjpzaXplX3QqIF9faWR4ID0gMCwgaW50IF9fYmFzZSA9IDEwKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fc3RvYSgmc3RkOjpzdHJ0b3VsLCAic3RvdWwiLCBfX3N0ci5jX3N0cigpLAorCQkJICAgICBfX2lkeCwgX19iYXNlKTsgfQorCisgIGlubGluZSBsb25nIGxvbmcKKyAgc3RvbGwoY29uc3QgX192c3RyaW5nJiBfX3N0ciwgc3RkOjpzaXplX3QqIF9faWR4ID0gMCwJaW50IF9fYmFzZSA9IDEwKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fc3RvYSgmc3RkOjpzdHJ0b2xsLCAic3RvbGwiLCBfX3N0ci5jX3N0cigpLAorCQkJICAgICBfX2lkeCwgX19iYXNlKTsgfQorCisgIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcKKyAgc3RvdWxsKGNvbnN0IF9fdnN0cmluZyYgX19zdHIsIHN0ZDo6c2l6ZV90KiBfX2lkeCwgaW50IF9fYmFzZSA9IDEwKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fc3RvYSgmc3RkOjpzdHJ0b3VsbCwgInN0b3VsbCIsIF9fc3RyLmNfc3RyKCksCisJCQkgICAgIF9faWR4LCBfX2Jhc2UpOyB9CisKKyAgLy8gTkI6IHN0cnRvZiB2cyBzdHJ0b2QuCisgIGlubGluZSBmbG9hdAorICBzdG9mKGNvbnN0IF9fdnN0cmluZyYgX19zdHIsIHN0ZDo6c2l6ZV90KiBfX2lkeCA9IDApCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X19zdG9hKCZzdGQ6OnN0cnRvZiwgInN0b2YiLCBfX3N0ci5jX3N0cigpLCBfX2lkeCk7IH0KKworICBpbmxpbmUgZG91YmxlCisgIHN0b2QoY29uc3QgX192c3RyaW5nJiBfX3N0ciwgc3RkOjpzaXplX3QqIF9faWR4ID0gMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2EoJnN0ZDo6c3RydG9kLCAic3RvZCIsIF9fc3RyLmNfc3RyKCksIF9faWR4KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBzdG9sZChjb25zdCBfX3ZzdHJpbmcmIF9fc3RyLCBzdGQ6OnNpemVfdCogX19pZHggPSAwKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fc3RvYSgmc3RkOjpzdHJ0b2xkLCAic3RvbGQiLCBfX3N0ci5jX3N0cigpLCBfX2lkeCk7IH0KKworICAvLyBOQjogKHYpc25wcmludGYgdnMgc3ByaW50Zi4KKworICAvLyBEUiAxMjYxLgorICBpbmxpbmUgX192c3RyaW5nCisgIHRvX3N0cmluZyhpbnQgX192YWwpCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X190b194c3RyaW5nPF9fdnN0cmluZz4oJnN0ZDo6dnNucHJpbnRmLCA0ICogc2l6ZW9mKGludCksCisJCQkJCSAgICAgICIlZCIsIF9fdmFsKTsgfQorCisgIGlubGluZSBfX3ZzdHJpbmcKKyAgdG9fc3RyaW5nKHVuc2lnbmVkIF9fdmFsKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fdG9feHN0cmluZzxfX3ZzdHJpbmc+KCZzdGQ6OnZzbnByaW50ZiwKKwkJCQkJICAgICAgNCAqIHNpemVvZih1bnNpZ25lZCksCisJCQkJCSAgICAgICIldSIsIF9fdmFsKTsgfQorCisgIGlubGluZSBfX3ZzdHJpbmcKKyAgdG9fc3RyaW5nKGxvbmcgX192YWwpCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X190b194c3RyaW5nPF9fdnN0cmluZz4oJnN0ZDo6dnNucHJpbnRmLAorCQkJCQkgICAgICA0ICogc2l6ZW9mKGxvbmcpLAorCQkJCQkgICAgICAiJWxkIiwgX192YWwpOyB9CisKKyAgaW5saW5lIF9fdnN0cmluZworICB0b19zdHJpbmcodW5zaWduZWQgbG9uZyBfX3ZhbCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8X192c3RyaW5nPigmc3RkOjp2c25wcmludGYsCisJCQkJCSAgICAgIDQgKiBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCQkJCSAgICAgICIlbHUiLCBfX3ZhbCk7IH0KKworCisgIGlubGluZSBfX3ZzdHJpbmcKKyAgdG9fc3RyaW5nKGxvbmcgbG9uZyBfX3ZhbCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8X192c3RyaW5nPigmc3RkOjp2c25wcmludGYsCisJCQkJCSAgICAgIDQgKiBzaXplb2YobG9uZyBsb25nKSwKKwkJCQkJICAgICAgIiVsbGQiLCBfX3ZhbCk7IH0KKworICBpbmxpbmUgX192c3RyaW5nCisgIHRvX3N0cmluZyh1bnNpZ25lZCBsb25nIGxvbmcgX192YWwpCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X190b194c3RyaW5nPF9fdnN0cmluZz4oJnN0ZDo6dnNucHJpbnRmLAorCQkJCQkgICAgICA0ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZyksCisJCQkJCSAgICAgICIlbGx1IiwgX192YWwpOyB9CisKKyAgaW5saW5lIF9fdnN0cmluZworICB0b19zdHJpbmcoZmxvYXQgX192YWwpCisgIHsKKyAgICBjb25zdCBpbnQgX19uID0gX19udW1lcmljX3RyYWl0czxmbG9hdD46Ol9fbWF4X2V4cG9uZW50MTAgKyAyMDsKKyAgICByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8X192c3RyaW5nPigmc3RkOjp2c25wcmludGYsIF9fbiwKKwkJCQkJICAgICAgIiVmIiwgX192YWwpOworICB9CisKKyAgaW5saW5lIF9fdnN0cmluZworICB0b19zdHJpbmcoZG91YmxlIF9fdmFsKQorICB7CisgICAgY29uc3QgaW50IF9fbiA9IF9fbnVtZXJpY190cmFpdHM8ZG91YmxlPjo6X19tYXhfZXhwb25lbnQxMCArIDIwOworICAgIHJldHVybiBfX2dudV9jeHg6Ol9fdG9feHN0cmluZzxfX3ZzdHJpbmc+KCZzdGQ6OnZzbnByaW50ZiwgX19uLAorCQkJCQkgICAgICAiJWYiLCBfX3ZhbCk7CisgIH0KKworICBpbmxpbmUgX192c3RyaW5nCisgIHRvX3N0cmluZyhsb25nIGRvdWJsZSBfX3ZhbCkKKyAgeworICAgIGNvbnN0IGludCBfX24gPSBfX251bWVyaWNfdHJhaXRzPGxvbmcgZG91YmxlPjo6X19tYXhfZXhwb25lbnQxMCArIDIwOworICAgIHJldHVybiBfX2dudV9jeHg6Ol9fdG9feHN0cmluZzxfX3ZzdHJpbmc+KCZzdGQ6OnZzbnByaW50ZiwgX19uLAorCQkJCQkgICAgICAiJUxmIiwgX192YWwpOworICB9CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICBpbmxpbmUgaW50IAorICBzdG9pKGNvbnN0IF9fd3ZzdHJpbmcmIF9fc3RyLCBzdGQ6OnNpemVfdCogX19pZHggPSAwLCBpbnQgX19iYXNlID0gMTApCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X19zdG9hPGxvbmcsIGludD4oJnN0ZDo6d2NzdG9sLCAic3RvaSIsIF9fc3RyLmNfc3RyKCksCisJCQkJCV9faWR4LCBfX2Jhc2UpOyB9CisKKyAgaW5saW5lIGxvbmcgCisgIHN0b2woY29uc3QgX193dnN0cmluZyYgX19zdHIsIHN0ZDo6c2l6ZV90KiBfX2lkeCA9IDAsIGludCBfX2Jhc2UgPSAxMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2EoJnN0ZDo6d2NzdG9sLCAic3RvbCIsIF9fc3RyLmNfc3RyKCksCisJCQkgICAgIF9faWR4LCBfX2Jhc2UpOyB9CisKKyAgaW5saW5lIHVuc2lnbmVkIGxvbmcKKyAgc3RvdWwoY29uc3QgX193dnN0cmluZyYgX19zdHIsIHN0ZDo6c2l6ZV90KiBfX2lkeCA9IDAsIGludCBfX2Jhc2UgPSAxMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2EoJnN0ZDo6d2NzdG91bCwgInN0b3VsIiwgX19zdHIuY19zdHIoKSwKKwkJCSAgICAgX19pZHgsIF9fYmFzZSk7IH0KKworICBpbmxpbmUgbG9uZyBsb25nCisgIHN0b2xsKGNvbnN0IF9fd3ZzdHJpbmcmIF9fc3RyLCBzdGQ6OnNpemVfdCogX19pZHggPSAwLCBpbnQgX19iYXNlID0gMTApCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X19zdG9hKCZzdGQ6Ondjc3RvbGwsICJzdG9sbCIsIF9fc3RyLmNfc3RyKCksCisJCQkgICAgIF9faWR4LCBfX2Jhc2UpOyB9CisKKyAgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZworICBzdG91bGwoY29uc3QgX193dnN0cmluZyYgX19zdHIsIHN0ZDo6c2l6ZV90KiBfX2lkeCA9IDAsIGludCBfX2Jhc2UgPSAxMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2EoJnN0ZDo6d2NzdG91bGwsICJzdG91bGwiLCBfX3N0ci5jX3N0cigpLAorCQkJICAgICBfX2lkeCwgX19iYXNlKTsgfQorCisgIC8vIE5COiB3Y3N0b2YgdnMgd2NzdG9kLgorICBpbmxpbmUgZmxvYXQKKyAgc3RvZihjb25zdCBfX3d2c3RyaW5nJiBfX3N0ciwgc3RkOjpzaXplX3QqIF9faWR4ID0gMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2EoJnN0ZDo6d2NzdG9mLCAic3RvZiIsIF9fc3RyLmNfc3RyKCksIF9faWR4KTsgfQorCisgIGlubGluZSBkb3VibGUKKyAgc3RvZChjb25zdCBfX3d2c3RyaW5nJiBfX3N0ciwgc3RkOjpzaXplX3QqIF9faWR4ID0gMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2EoJnN0ZDo6d2NzdG9kLCAic3RvZCIsIF9fc3RyLmNfc3RyKCksIF9faWR4KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBzdG9sZChjb25zdCBfX3d2c3RyaW5nJiBfX3N0ciwgc3RkOjpzaXplX3QqIF9faWR4ID0gMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2EoJnN0ZDo6d2NzdG9sZCwgInN0b2xkIiwgX19zdHIuY19zdHIoKSwgX19pZHgpOyB9CisKKyNpZm5kZWYgX0dMSUJDWFhfSEFWRV9CUk9LRU5fVlNXUFJJTlRGCisgIC8vIERSIDEyNjEuCisgIGlubGluZSBfX3d2c3RyaW5nCisgIHRvX3dzdHJpbmcoaW50IF9fdmFsKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fdG9feHN0cmluZzxfX3d2c3RyaW5nPigmc3RkOjp2c3dwcmludGYsCisJCQkJCSAgICAgICA0ICogc2l6ZW9mKGludCksCisJCQkJCSAgICAgICBMIiVkIiwgX192YWwpOyB9CisKKyAgaW5saW5lIF9fd3ZzdHJpbmcKKyAgdG9fd3N0cmluZyh1bnNpZ25lZCBfX3ZhbCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8X193dnN0cmluZz4oJnN0ZDo6dnN3cHJpbnRmLAorCQkJCQkgICAgICAgNCAqIHNpemVvZih1bnNpZ25lZCksCisJCQkJCSAgICAgICBMIiV1IiwgX192YWwpOyB9CisKKyAgaW5saW5lIF9fd3ZzdHJpbmcKKyAgdG9fd3N0cmluZyhsb25nIF9fdmFsKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fdG9feHN0cmluZzxfX3d2c3RyaW5nPigmc3RkOjp2c3dwcmludGYsCisJCQkJCSAgICAgICA0ICogc2l6ZW9mKGxvbmcpLAorCQkJCQkgICAgICAgTCIlbGQiLCBfX3ZhbCk7IH0KKworICBpbmxpbmUgX193dnN0cmluZworICB0b193c3RyaW5nKHVuc2lnbmVkIGxvbmcgX192YWwpCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X190b194c3RyaW5nPF9fd3ZzdHJpbmc+KCZzdGQ6OnZzd3ByaW50ZiwKKwkJCQkJICAgICAgIDQgKiBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCQkJCSAgICAgICBMIiVsdSIsIF9fdmFsKTsgfQorCisgIGlubGluZSBfX3d2c3RyaW5nCisgIHRvX3dzdHJpbmcobG9uZyBsb25nIF9fdmFsKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fdG9feHN0cmluZzxfX3d2c3RyaW5nPigmc3RkOjp2c3dwcmludGYsCisJCQkJCSAgICAgICA0ICogc2l6ZW9mKGxvbmcgbG9uZyksCisJCQkJCSAgICAgICBMIiVsbGQiLCBfX3ZhbCk7IH0KKworICBpbmxpbmUgX193dnN0cmluZworICB0b193c3RyaW5nKHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZhbCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8X193dnN0cmluZz4oJnN0ZDo6dnN3cHJpbnRmLAorCQkJCQkgICAgICAgNCAqIHNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpLAorCQkJCQkgICAgICAgTCIlbGx1IiwgX192YWwpOyB9CisKKyAgaW5saW5lIF9fd3ZzdHJpbmcKKyAgdG9fd3N0cmluZyhmbG9hdCBfX3ZhbCkKKyAgeworICAgIGNvbnN0IGludCBfX24gPSBfX251bWVyaWNfdHJhaXRzPGZsb2F0Pjo6X19tYXhfZXhwb25lbnQxMCArIDIwOworICAgIHJldHVybiBfX2dudV9jeHg6Ol9fdG9feHN0cmluZzxfX3d2c3RyaW5nPigmc3RkOjp2c3dwcmludGYsIF9fbiwKKwkJCQkJICAgICAgIEwiJWYiLCBfX3ZhbCk7CisgIH0KKworICBpbmxpbmUgX193dnN0cmluZworICB0b193c3RyaW5nKGRvdWJsZSBfX3ZhbCkKKyAgeworICAgIGNvbnN0IGludCBfX24gPSBfX251bWVyaWNfdHJhaXRzPGRvdWJsZT46Ol9fbWF4X2V4cG9uZW50MTAgKyAyMDsKKyAgICByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8X193dnN0cmluZz4oJnN0ZDo6dnN3cHJpbnRmLCBfX24sCisJCQkJCSAgICAgICBMIiVmIiwgX192YWwpOworICB9CisKKyAgaW5saW5lIF9fd3ZzdHJpbmcKKyAgdG9fd3N0cmluZyhsb25nIGRvdWJsZSBfX3ZhbCkKKyAgeworICAgIGNvbnN0IGludCBfX24gPSBfX251bWVyaWNfdHJhaXRzPGxvbmcgZG91YmxlPjo6X19tYXhfZXhwb25lbnQxMCArIDIwOworICAgIHJldHVybiBfX2dudV9jeHg6Ol9fdG9feHN0cmluZzxfX3d2c3RyaW5nPigmc3RkOjp2c3dwcmludGYsIF9fbiwKKwkJCQkJICAgICAgIEwiJUxmIiwgX192YWwpOworICB9CisjZW5kaWYKKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZgorCisjaWZuZGVmIF9HTElCQ1hYX0VYUE9SVF9URU1QTEFURQorIyBpbmNsdWRlICJ2c3RyaW5nLnRjYyIgCisjZW5kaWYKKworI2VuZGlmIC8qIF9WU1RSSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3ZzdHJpbmcudGNjIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvdnN0cmluZy50Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkxOTM4OQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3ZzdHJpbmcudGNjCkBAIC0wLDAgKzEsNjk2IEBACisvLyBWZXJzYXRpbGUgc3RyaW5nIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZXh0L3ZzdHJpbmcudGNjCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKyNpZm5kZWYgX1ZTVFJJTkdfVENDCisjZGVmaW5lIF9WU1RSSU5HX1RDQyAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGN4eGFiaS1mb3JjZWQuaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgY29uc3QgdHlwZW5hbWUgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6c2l6ZV90eXBlCisgICAgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6bnBvczsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgdm9pZAorICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT46OgorICAgIHJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CisgICAgICBpZiAoX19zaXplIDwgX19uKQorCXRoaXMtPmFwcGVuZChfX24gLSBfX3NpemUsIF9fYyk7CisgICAgICBlbHNlIGlmIChfX24gPCBfX3NpemUpCisJdGhpcy0+X01fZXJhc2UoX19uLCBfX3NpemUgLSBfX24pOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYKKyAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+OjoKKyAgICBfTV9hcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOworCisgICAgICBpZiAoX19sZW4gPD0gdGhpcy0+Y2FwYWNpdHkoKSAmJiAhdGhpcy0+X01faXNfc2hhcmVkKCkpCisJeworCSAgaWYgKF9fbikKKwkgICAgdGhpcy0+X1NfY29weSh0aGlzLT5fTV9kYXRhKCkgKyB0aGlzLT5zaXplKCksIF9fcywgX19uKTsKKwl9CisgICAgICBlbHNlCisJdGhpcy0+X01fbXV0YXRlKHRoaXMtPnNpemUoKSwgc2l6ZV90eXBlKDApLCBfX3MsIF9fbik7CisKKyAgICAgIHRoaXMtPl9NX3NldF9sZW5ndGgoX19sZW4pOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JgorICAgICAgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6CisgICAgICBfTV9yZXBsYWNlX2Rpc3BhdGNoKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9JbnB1dEl0ZXJhdG9yIF9fazEsCisJCQkgIF9JbnB1dEl0ZXJhdG9yIF9fazIsIHN0ZDo6X19mYWxzZV90eXBlKQorICAgICAgeworCWNvbnN0IF9fdmVyc2Ffc3RyaW5nIF9fcyhfX2sxLCBfX2syKTsKKwljb25zdCBzaXplX3R5cGUgX19uMSA9IF9faTIgLSBfX2kxOworCXJldHVybiBfTV9yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19uMSwgX19zLl9NX2RhdGEoKSwKKwkJCSAgX19zLnNpemUoKSk7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mCisgICAgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6CisgICAgX01fcmVwbGFjZV9hdXgoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBfX24yLAorCQkgICBfQ2hhclQgX19jKQorICAgIHsKKyAgICAgIF9NX2NoZWNrX2xlbmd0aChfX24xLCBfX24yLCAiX192ZXJzYV9zdHJpbmc6Ol9NX3JlcGxhY2VfYXV4Iik7CisKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gdGhpcy0+c2l6ZSgpOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3X3NpemUgPSBfX29sZF9zaXplICsgX19uMiAtIF9fbjE7CisKKyAgICAgIGlmIChfX25ld19zaXplIDw9IHRoaXMtPmNhcGFjaXR5KCkgJiYgIXRoaXMtPl9NX2lzX3NoYXJlZCgpKQorCXsKKwkgIF9DaGFyVCogX19wID0gdGhpcy0+X01fZGF0YSgpICsgX19wb3MxOworCisJICBjb25zdCBzaXplX3R5cGUgX19ob3dfbXVjaCA9IF9fb2xkX3NpemUgLSBfX3BvczEgLSBfX24xOworCSAgaWYgKF9faG93X211Y2ggJiYgX19uMSAhPSBfX24yKQorCSAgICB0aGlzLT5fU19tb3ZlKF9fcCArIF9fbjIsIF9fcCArIF9fbjEsIF9faG93X211Y2gpOworCX0KKyAgICAgIGVsc2UKKwl0aGlzLT5fTV9tdXRhdGUoX19wb3MxLCBfX24xLCAwLCBfX24yKTsKKworICAgICAgaWYgKF9fbjIpCisJdGhpcy0+X1NfYXNzaWduKHRoaXMtPl9NX2RhdGEoKSArIF9fcG9zMSwgX19uMiwgX19jKTsKKworICAgICAgdGhpcy0+X01fc2V0X2xlbmd0aChfX25ld19zaXplKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mCisgICAgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6CisgICAgX01fcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIGNvbnN0IF9DaGFyVCogX19zLAorCSAgICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4yKQorICAgIHsKKyAgICAgIF9NX2NoZWNrX2xlbmd0aChfX2xlbjEsIF9fbGVuMiwgIl9fdmVyc2Ffc3RyaW5nOjpfTV9yZXBsYWNlIik7CisKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gdGhpcy0+c2l6ZSgpOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3X3NpemUgPSBfX29sZF9zaXplICsgX19sZW4yIC0gX19sZW4xOworICAgICAgCisgICAgICBpZiAoX19uZXdfc2l6ZSA8PSB0aGlzLT5jYXBhY2l0eSgpICYmICF0aGlzLT5fTV9pc19zaGFyZWQoKSkKKwl7CisJICBfQ2hhclQqIF9fcCA9IHRoaXMtPl9NX2RhdGEoKSArIF9fcG9zOworCisJICBjb25zdCBzaXplX3R5cGUgX19ob3dfbXVjaCA9IF9fb2xkX3NpemUgLSBfX3BvcyAtIF9fbGVuMTsKKwkgIGlmIChfTV9kaXNqdW5jdChfX3MpKQorCSAgICB7CisJICAgICAgaWYgKF9faG93X211Y2ggJiYgX19sZW4xICE9IF9fbGVuMikKKwkJdGhpcy0+X1NfbW92ZShfX3AgKyBfX2xlbjIsIF9fcCArIF9fbGVuMSwgX19ob3dfbXVjaCk7CisJICAgICAgaWYgKF9fbGVuMikKKwkJdGhpcy0+X1NfY29weShfX3AsIF9fcywgX19sZW4yKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgLy8gV29yayBpbi1wbGFjZS4KKwkgICAgICBpZiAoX19sZW4yICYmIF9fbGVuMiA8PSBfX2xlbjEpCisJCXRoaXMtPl9TX21vdmUoX19wLCBfX3MsIF9fbGVuMik7CisJICAgICAgaWYgKF9faG93X211Y2ggJiYgX19sZW4xICE9IF9fbGVuMikKKwkJdGhpcy0+X1NfbW92ZShfX3AgKyBfX2xlbjIsIF9fcCArIF9fbGVuMSwgX19ob3dfbXVjaCk7CisJICAgICAgaWYgKF9fbGVuMiA+IF9fbGVuMSkKKwkJeworCQkgIGlmIChfX3MgKyBfX2xlbjIgPD0gX19wICsgX19sZW4xKQorCQkgICAgdGhpcy0+X1NfbW92ZShfX3AsIF9fcywgX19sZW4yKTsKKwkJICBlbHNlIGlmIChfX3MgPj0gX19wICsgX19sZW4xKQorCQkgICAgdGhpcy0+X1NfY29weShfX3AsIF9fcyArIF9fbGVuMiAtIF9fbGVuMSwgX19sZW4yKTsKKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25sZWZ0ID0gKF9fcCArIF9fbGVuMSkgLSBfX3M7CisJCSAgICAgIHRoaXMtPl9TX21vdmUoX19wLCBfX3MsIF9fbmxlZnQpOworCQkgICAgICB0aGlzLT5fU19jb3B5KF9fcCArIF9fbmxlZnQsIF9fcCArIF9fbGVuMiwKKwkJCQkgICAgX19sZW4yIC0gX19ubGVmdCk7CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl0aGlzLT5fTV9tdXRhdGUoX19wb3MsIF9fbGVuMSwgX19zLCBfX2xlbjIpOworCisgICAgICB0aGlzLT5fTV9zZXRfbGVuZ3RoKF9fbmV3X3NpemUpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+CisgICAgb3BlcmF0b3IrKGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fbGhzLAorCSAgICAgIGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fcmhzKQorICAgIHsKKyAgICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4gX19zdHI7CisgICAgICBfX3N0ci5yZXNlcnZlKF9fbGhzLnNpemUoKSArIF9fcmhzLnNpemUoKSk7CisgICAgICBfX3N0ci5hcHBlbmQoX19saHMpOworICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKKyAgICAgIHJldHVybiBfX3N0cjsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4KKyAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywKKwkgICAgICBjb25zdCBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiBfX3JocykKKyAgICB7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nKF9fbGhzKTsKKyAgICAgIHR5cGVkZWYgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiBfX3N0cmluZ190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUJICBfX3NpemVfdHlwZTsKKyAgICAgIGNvbnN0IF9fc2l6ZV90eXBlIF9fbGVuID0gX1RyYWl0czo6bGVuZ3RoKF9fbGhzKTsKKyAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7CisgICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgX19yaHMuc2l6ZSgpKTsKKyAgICAgIF9fc3RyLmFwcGVuZChfX2xocywgX19sZW4pOworICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKKyAgICAgIHJldHVybiBfX3N0cjsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4KKyAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLAorCSAgICAgIGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fcmhzKQorICAgIHsKKyAgICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4gX19zdHI7CisgICAgICBfX3N0ci5yZXNlcnZlKF9fcmhzLnNpemUoKSArIDEpOworICAgICAgX19zdHIucHVzaF9iYWNrKF9fbGhzKTsKKyAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CisgICAgICByZXR1cm4gX19zdHI7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+CisgICAgb3BlcmF0b3IrKGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fbGhzLAorCSAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCisgICAgeworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfX3Jocyk7CisgICAgICB0eXBlZGVmIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4gX19zdHJpbmdfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlCSAgX19zaXplX3R5cGU7CisgICAgICBjb25zdCBfX3NpemVfdHlwZSBfX2xlbiA9IF9UcmFpdHM6Omxlbmd0aChfX3Jocyk7CisgICAgICBfX3N0cmluZ190eXBlIF9fc3RyOworICAgICAgX19zdHIucmVzZXJ2ZShfX2xocy5zaXplKCkgKyBfX2xlbik7CisgICAgICBfX3N0ci5hcHBlbmQoX19saHMpOworICAgICAgX19zdHIuYXBwZW5kKF9fcmhzLCBfX2xlbik7CisgICAgICByZXR1cm4gX19zdHI7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+CisgICAgb3BlcmF0b3IrKGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fbGhzLAorCSAgICAgIF9DaGFyVCBfX3JocykKKyAgICB7CisgICAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+IF9fc3RyOworICAgICAgX19zdHIucmVzZXJ2ZShfX2xocy5zaXplKCkgKyAxKTsKKyAgICAgIF9fc3RyLmFwcGVuZChfX2xocyk7CisgICAgICBfX3N0ci5wdXNoX2JhY2soX19yaHMpOworICAgICAgcmV0dXJuIF9fc3RyOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgdHlwZW5hbWUgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6c2l6ZV90eXBlCisgICAgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6CisgICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAorICAgIHsKKyAgICAgIF9NX2NoZWNrKF9fcG9zLCAiX192ZXJzYV9zdHJpbmc6OmNvcHkiKTsKKyAgICAgIF9fbiA9IF9NX2xpbWl0KF9fcG9zLCBfX24pOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZ19sZW4oX19zLCBfX24pOworICAgICAgaWYgKF9fbikKKwl0aGlzLT5fU19jb3B5KF9fcywgdGhpcy0+X01fZGF0YSgpICsgX19wb3MsIF9fbik7CisgICAgICAvLyAyMS4zLjUuNyBwYXIgMzogZG8gbm90IGFwcGVuZCBudWxsLiAgKGdvb2QuKQorICAgICAgcmV0dXJuIF9fbjsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIHR5cGVuYW1lIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT46OnNpemVfdHlwZQorICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT46OgorICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nX2xlbihfX3MsIF9fbik7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOworICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSB0aGlzLT5fTV9kYXRhKCk7CisKKyAgICAgIGlmIChfX24gPT0gMCkKKwlyZXR1cm4gX19wb3MgPD0gX19zaXplID8gX19wb3MgOiBucG9zOworCisgICAgICBpZiAoX19uIDw9IF9fc2l6ZSkKKwl7CisJICBmb3IgKDsgX19wb3MgPD0gX19zaXplIC0gX19uOyArK19fcG9zKQorCSAgICBpZiAodHJhaXRzX3R5cGU6OmVxKF9fZGF0YVtfX3Bvc10sIF9fc1swXSkKKwkJJiYgdHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsgX19wb3MgKyAxLAorCQkJCQlfX3MgKyAxLCBfX24gLSAxKSA9PSAwKQorCSAgICAgIHJldHVybiBfX3BvczsKKwl9CisgICAgICByZXR1cm4gbnBvczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIHR5cGVuYW1lIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT46OnNpemVfdHlwZQorICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT46OgorICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAorICAgIHsKKyAgICAgIHNpemVfdHlwZSBfX3JldCA9IG5wb3M7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOworICAgICAgaWYgKF9fcG9zIDwgX19zaXplKQorCXsKKwkgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gdGhpcy0+X01fZGF0YSgpOworCSAgY29uc3Qgc2l6ZV90eXBlIF9fbiA9IF9fc2l6ZSAtIF9fcG9zOworCSAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX2RhdGEgKyBfX3BvcywgX19uLCBfX2MpOworCSAgaWYgKF9fcCkKKwkgICAgX19yZXQgPSBfX3AgLSBfX2RhdGE7CisJfQorICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgdHlwZW5hbWUgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6c2l6ZV90eXBlCisgICAgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6CisgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nX2xlbihfX3MsIF9fbik7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOworICAgICAgaWYgKF9fbiA8PSBfX3NpemUpCisJeworCSAgX19wb3MgPSBzdGQ6Om1pbihzaXplX3R5cGUoX19zaXplIC0gX19uKSwgX19wb3MpOworCSAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSB0aGlzLT5fTV9kYXRhKCk7CisJICBkbworCSAgICB7CisJICAgICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9fcG9zLCBfX3MsIF9fbikgPT0gMCkKKwkJcmV0dXJuIF9fcG9zOworCSAgICB9CisJICB3aGlsZSAoX19wb3MtLSA+IDApOworCX0KKyAgICAgIHJldHVybiBucG9zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgdHlwZW5hbWUgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6c2l6ZV90eXBlCisgICAgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6CisgICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAorICAgIHsKKyAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CisgICAgICBpZiAoX19zaXplKQorCXsKKwkgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQorCSAgICBfX3NpemUgPSBfX3BvczsKKwkgIGZvciAoKytfX3NpemU7IF9fc2l6ZS0tID4gMDsgKQorCSAgICBpZiAodHJhaXRzX3R5cGU6OmVxKHRoaXMtPl9NX2RhdGEoKVtfX3NpemVdLCBfX2MpKQorCSAgICAgIHJldHVybiBfX3NpemU7CisJfQorICAgICAgcmV0dXJuIG5wb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICB0eXBlbmFtZSBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+OjpzaXplX3R5cGUKKyAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+OjoKKyAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgeworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZ19sZW4oX19zLCBfX24pOworICAgICAgZm9yICg7IF9fbiAmJiBfX3BvcyA8IHRoaXMtPnNpemUoKTsgKytfX3BvcykKKwl7CisJICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLAorCQkJCQkJdGhpcy0+X01fZGF0YSgpW19fcG9zXSk7CisJICBpZiAoX19wKQorCSAgICByZXR1cm4gX19wb3M7CisJfQorICAgICAgcmV0dXJuIG5wb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICB0eXBlbmFtZSBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+OjpzaXplX3R5cGUKKyAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+OjoKKyAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nX2xlbihfX3MsIF9fbik7CisgICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOworICAgICAgaWYgKF9fc2l6ZSAmJiBfX24pCisJeworCSAgaWYgKC0tX19zaXplID4gX19wb3MpCisJICAgIF9fc2l6ZSA9IF9fcG9zOworCSAgZG8KKwkgICAgeworCSAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgdGhpcy0+X01fZGF0YSgpW19fc2l6ZV0pKQorCQlyZXR1cm4gX19zaXplOworCSAgICB9CisJICB3aGlsZSAoX19zaXplLS0gIT0gMCk7CisJfQorICAgICAgcmV0dXJuIG5wb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICB0eXBlbmFtZSBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+OjpzaXplX3R5cGUKKyAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+OjoKKyAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmdfbGVuKF9fcywgX19uKTsKKyAgICAgIGZvciAoOyBfX3BvcyA8IHRoaXMtPnNpemUoKTsgKytfX3BvcykKKwlpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCB0aGlzLT5fTV9kYXRhKClbX19wb3NdKSkKKwkgIHJldHVybiBfX3BvczsKKyAgICAgIHJldHVybiBucG9zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgdHlwZW5hbWUgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6c2l6ZV90eXBlCisgICAgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6CisgICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAorICAgIHsKKyAgICAgIGZvciAoOyBfX3BvcyA8IHRoaXMtPnNpemUoKTsgKytfX3BvcykKKwlpZiAoIXRyYWl0c190eXBlOjplcSh0aGlzLT5fTV9kYXRhKClbX19wb3NdLCBfX2MpKQorCSAgcmV0dXJuIF9fcG9zOworICAgICAgcmV0dXJuIG5wb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICB0eXBlbmFtZSBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+OjpzaXplX3R5cGUKKyAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+OjoKKyAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgeworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZ19sZW4oX19zLCBfX24pOworICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKKyAgICAgIGlmIChfX3NpemUpCisJeworCSAgaWYgKC0tX19zaXplID4gX19wb3MpCisJICAgIF9fc2l6ZSA9IF9fcG9zOworCSAgZG8KKwkgICAgeworCSAgICAgIGlmICghdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIHRoaXMtPl9NX2RhdGEoKVtfX3NpemVdKSkKKwkJcmV0dXJuIF9fc2l6ZTsKKwkgICAgfQorCSAgd2hpbGUgKF9fc2l6ZS0tKTsKKwl9CisgICAgICByZXR1cm4gbnBvczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIHR5cGVuYW1lIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT46OnNpemVfdHlwZQorICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT46OgorICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAorICAgIHsKKyAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CisgICAgICBpZiAoX19zaXplKQorCXsKKwkgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQorCSAgICBfX3NpemUgPSBfX3BvczsKKwkgIGRvCisJICAgIHsKKwkgICAgICBpZiAoIXRyYWl0c190eXBlOjplcSh0aGlzLT5fTV9kYXRhKClbX19zaXplXSwgX19jKSkKKwkJcmV0dXJuIF9fc2l6ZTsKKwkgICAgfQorCSAgd2hpbGUgKF9fc2l6ZS0tKTsKKwl9CisgICAgICByZXR1cm4gbnBvczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIGludAorICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT46OgorICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfX3ZlcnNhX3N0cmluZyYgX19zdHIpIGNvbnN0CisgICAgeworICAgICAgX01fY2hlY2soX19wb3MsICJfX3ZlcnNhX3N0cmluZzo6Y29tcGFyZSIpOworICAgICAgX19uID0gX01fbGltaXQoX19wb3MsIF9fbik7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IHN0ZDo6bWluKF9fbiwgX19vc2l6ZSk7CisgICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUodGhpcy0+X01fZGF0YSgpICsgX19wb3MsCisJCQkJICAgICBfX3N0ci5kYXRhKCksIF9fbGVuKTsKKyAgICAgIGlmICghX19yKQorCV9fciA9IF9TX2NvbXBhcmUoX19uLCBfX29zaXplKTsKKyAgICAgIHJldHVybiBfX3I7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBpbnQKKyAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+OjoKKyAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfX3ZlcnNhX3N0cmluZyYgX19zdHIsCisJICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdAorICAgIHsKKyAgICAgIF9NX2NoZWNrKF9fcG9zMSwgIl9fdmVyc2Ffc3RyaW5nOjpjb21wYXJlIik7CisgICAgICBfX3N0ci5fTV9jaGVjayhfX3BvczIsICJfX3ZlcnNhX3N0cmluZzo6Y29tcGFyZSIpOworICAgICAgX19uMSA9IF9NX2xpbWl0KF9fcG9zMSwgX19uMSk7CisgICAgICBfX24yID0gX19zdHIuX01fbGltaXQoX19wb3MyLCBfX24yKTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IHN0ZDo6bWluKF9fbjEsIF9fbjIpOworICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKHRoaXMtPl9NX2RhdGEoKSArIF9fcG9zMSwKKwkJCQkgICAgIF9fc3RyLmRhdGEoKSArIF9fcG9zMiwgX19sZW4pOworICAgICAgaWYgKCFfX3IpCisJX19yID0gX1NfY29tcGFyZShfX24xLCBfX24yKTsKKyAgICAgIHJldHVybiBfX3I7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBpbnQKKyAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+OjoKKyAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25zdAorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmcoX19zKTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19vc2l6ZSA9IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IHN0ZDo6bWluKF9fc2l6ZSwgX19vc2l6ZSk7CisgICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUodGhpcy0+X01fZGF0YSgpLCBfX3MsIF9fbGVuKTsKKyAgICAgIGlmICghX19yKQorCV9fciA9IF9TX2NvbXBhcmUoX19zaXplLCBfX29zaXplKTsKKyAgICAgIHJldHVybiBfX3I7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBpbnQKKyAgICBfX3ZlcnNhX3N0cmluZyA8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6CisgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nKF9fcyk7CisgICAgICBfTV9jaGVjayhfX3BvcywgIl9fdmVyc2Ffc3RyaW5nOjpjb21wYXJlIik7CisgICAgICBfX24xID0gX01fbGltaXQoX19wb3MsIF9fbjEpOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb3NpemUgPSB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBzdGQ6Om1pbihfX24xLCBfX29zaXplKTsKKyAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZSh0aGlzLT5fTV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7CisgICAgICBpZiAoIV9fcikKKwlfX3IgPSBfU19jb21wYXJlKF9fbjEsIF9fb3NpemUpOworICAgICAgcmV0dXJuIF9fcjsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIGludAorICAgIF9fdmVyc2Ffc3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+OjoKKyAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAorCSAgICBzaXplX3R5cGUgX19uMikgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nX2xlbihfX3MsIF9fbjIpOworICAgICAgX01fY2hlY2soX19wb3MsICJfX3ZlcnNhX3N0cmluZzo6Y29tcGFyZSIpOworICAgICAgX19uMSA9IF9NX2xpbWl0KF9fcG9zLCBfX24xKTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IHN0ZDo6bWluKF9fbjEsIF9fbjIpOworICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKHRoaXMtPl9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsKKyAgICAgIGlmICghX19yKQorCV9fciA9IF9TX2NvbXBhcmUoX19uMSwgX19uMik7CisgICAgICByZXR1cm4gX19yOworICAgIH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAorCSAgICAgICBfX2dudV9jeHg6Ol9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2MsIF9CYXNlPiYgX19zdHIpCisgICAgeworICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gICAgICAgICAgICBfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgICAgICAgX19pb3NfYmFzZTsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHJpbmdfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlCQlfX2ludF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUJCV9fc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+CQkJCV9fY3R5cGVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19jdHlwZV90eXBlOjpjdHlwZV9iYXNlICAgICAgICAgX19jdHlwZV9iYXNlOworCisgICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9IDA7CisgICAgICB0eXBlbmFtZSBfX2lvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gX19pb3NfYmFzZTo6Z29vZGJpdDsKKyAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKKyAgICAgIGlmIChfX2NlcmIpCisJeworCSAgX190cnkKKwkgICAgeworCSAgICAgIC8vIEF2b2lkIHJlYWxsb2NhdGlvbiBmb3IgY29tbW9uIGNhc2UuCisJICAgICAgX19zdHIuZXJhc2UoKTsKKwkgICAgICBfQ2hhclQgX19idWZbMTI4XTsKKwkgICAgICBfX3NpemVfdHlwZSBfX2xlbiA9IDA7CisJICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX3cgPSBfX2luLndpZHRoKCk7CisJICAgICAgY29uc3QgX19zaXplX3R5cGUgX19uID0gX193ID4gMCA/IHN0YXRpY19jYXN0PF9fc2l6ZV90eXBlPihfX3cpCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19zdHIubWF4X3NpemUoKTsKKwkgICAgICBjb25zdCBfX2N0eXBlX3R5cGUmIF9fY3QgPSB1c2VfZmFjZXQ8X19jdHlwZV90eXBlPihfX2luLmdldGxvYygpKTsKKwkgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CisJICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX2luLnJkYnVmKCktPnNnZXRjKCk7CisKKwkgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPCBfX24KKwkJICAgICAmJiAhX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKKwkJICAgICAmJiAhX19jdC5pcyhfX2N0eXBlX2Jhc2U6OnNwYWNlLAorCQkJCSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKSkpCisJCXsKKwkJICBpZiAoX19sZW4gPT0gc2l6ZW9mKF9fYnVmKSAvIHNpemVvZihfQ2hhclQpKQorCQkgICAgeworCQkgICAgICBfX3N0ci5hcHBlbmQoX19idWYsIHNpemVvZihfX2J1ZikgLyBzaXplb2YoX0NoYXJUKSk7CisJCSAgICAgIF9fbGVuID0gMDsKKwkJICAgIH0KKwkJICBfX2J1ZltfX2xlbisrXSA9IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpOworCQkgICsrX19leHRyYWN0ZWQ7CisJCSAgX19jID0gX19pbi5yZGJ1ZigpLT5zbmV4dGMoKTsKKwkJfQorCSAgICAgIF9fc3RyLmFwcGVuZChfX2J1ZiwgX19sZW4pOworCisJICAgICAgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQorCQlfX2VyciB8PSBfX2lvc19iYXNlOjplb2ZiaXQ7CisJICAgICAgX19pbi53aWR0aCgwKTsKKwkgICAgfQorCSAgX19jYXRjaChfX2N4eGFiaXYxOjpfX2ZvcmNlZF91bndpbmQmKQorCSAgICB7CisJICAgICAgX19pbi5fTV9zZXRzdGF0ZShfX2lvc19iYXNlOjpiYWRiaXQpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeworCSAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkgICAgICAvLyA5MS4gRGVzY3JpcHRpb24gb2Ygb3BlcmF0b3I+PiBhbmQgZ2V0bGluZSgpIGZvciBzdHJpbmc8PgorCSAgICAgIC8vIG1pZ2h0IGNhdXNlIGVuZGxlc3MgbG9vcAorCSAgICAgIF9faW4uX01fc2V0c3RhdGUoX19pb3NfYmFzZTo6YmFkYml0KTsKKwkgICAgfQorCX0KKyAgICAgIC8vIDIxMS4gIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHN0cmluZyYpIGRvZXNuJ3Qgc2V0IGZhaWxiaXQKKyAgICAgIGlmICghX19leHRyYWN0ZWQpCisJX19lcnIgfD0gX19pb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgIGlmIChfX2VycikKKwlfX2luLnNldHN0YXRlKF9fZXJyKTsKKyAgICAgIHJldHVybiBfX2luOworICAgIH0gICAgICAKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKyAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKKwkgICAgX19nbnVfY3h4OjpfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiBfX3N0ciwKKwkgICAgX0NoYXJUIF9fZGVsaW0pCisgICAgeworICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4JICAgICAgICBfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgICAgICAgX19pb3NfYmFzZTsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHJpbmdfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlCQlfX2ludF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUJCV9fc2l6ZV90eXBlOworCisgICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9IDA7CisgICAgICBjb25zdCBfX3NpemVfdHlwZSBfX24gPSBfX3N0ci5tYXhfc2l6ZSgpOworICAgICAgdHlwZW5hbWUgX19pb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IF9faW9zX2Jhc2U6Omdvb2RiaXQ7CisgICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCB0cnVlKTsKKyAgICAgIGlmIChfX2NlcmIpCisJeworCSAgX190cnkKKwkgICAgeworCSAgICAgIC8vIEF2b2lkIHJlYWxsb2NhdGlvbiBmb3IgY29tbW9uIGNhc2UuCisJICAgICAgX19zdHIuZXJhc2UoKTsKKwkgICAgICBfQ2hhclQgX19idWZbMTI4XTsKKwkgICAgICBfX3NpemVfdHlwZSBfX2xlbiA9IDA7CisJICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2lkZWxpbSA9IF9UcmFpdHM6OnRvX2ludF90eXBlKF9fZGVsaW0pOworCSAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKKwkgICAgICBfX2ludF90eXBlIF9fYyA9IF9faW4ucmRidWYoKS0+c2dldGMoKTsKKworCSAgICAgIHdoaWxlIChfX2V4dHJhY3RlZCA8IF9fbgorCQkgICAgICYmICFfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQorCQkgICAgICYmICFfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKSkKKwkJeworCQkgIGlmIChfX2xlbiA9PSBzaXplb2YoX19idWYpIC8gc2l6ZW9mKF9DaGFyVCkpCisJCSAgICB7CisJCSAgICAgIF9fc3RyLmFwcGVuZChfX2J1Ziwgc2l6ZW9mKF9fYnVmKSAvIHNpemVvZihfQ2hhclQpKTsKKwkJICAgICAgX19sZW4gPSAwOworCQkgICAgfQorCQkgIF9fYnVmW19fbGVuKytdID0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYyk7CisJCSAgKytfX2V4dHJhY3RlZDsKKwkJICBfX2MgPSBfX2luLnJkYnVmKCktPnNuZXh0YygpOworCQl9CisJICAgICAgX19zdHIuYXBwZW5kKF9fYnVmLCBfX2xlbik7CisKKwkgICAgICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCisJCV9fZXJyIHw9IF9faW9zX2Jhc2U6OmVvZmJpdDsKKwkgICAgICBlbHNlIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKSkKKwkJeworCQkgICsrX19leHRyYWN0ZWQ7CQkgIAorCQkgIF9faW4ucmRidWYoKS0+c2J1bXBjKCk7CisJCX0KKwkgICAgICBlbHNlCisJCV9fZXJyIHw9IF9faW9zX2Jhc2U6OmZhaWxiaXQ7CisJICAgIH0KKwkgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwkgICAgeworCSAgICAgIF9faW4uX01fc2V0c3RhdGUoX19pb3NfYmFzZTo6YmFkYml0KTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsKKwkgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJICAgICAgLy8gOTEuIERlc2NyaXB0aW9uIG9mIG9wZXJhdG9yPj4gYW5kIGdldGxpbmUoKSBmb3Igc3RyaW5nPD4KKwkgICAgICAvLyBtaWdodCBjYXVzZSBlbmRsZXNzIGxvb3AKKwkgICAgICBfX2luLl9NX3NldHN0YXRlKF9faW9zX2Jhc2U6OmJhZGJpdCk7CisJICAgIH0KKwl9CisgICAgICBpZiAoIV9fZXh0cmFjdGVkKQorCV9fZXJyIHw9IF9faW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgICBpZiAoX19lcnIpCisJX19pbi5zZXRzdGF0ZShfX2Vycik7CisgICAgICByZXR1cm4gX19pbjsKKyAgICB9ICAgICAgCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmIC8vIF9WU1RSSU5HX1RDQwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvdnN0cmluZ19md2QuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3ZzdHJpbmdfZndkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJhMzFkNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZXh0L3ZzdHJpbmdfZndkLmgKQEAgLTAsMCArMSw4NyBAQAorLy8gVmVyc2F0aWxlIHN0cmluZyBmb3J3YXJkIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZXh0L3ZzdHJpbmdfZndkLmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfVlNUUklOR19GV0RfSAorI2RlZmluZSBfVlNUUklOR19GV0RfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Yml0cy9jaGFyX3RyYWl0cy5oPgorI2luY2x1ZGUgPGJpdHMvYWxsb2NhdG9yLmg+CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgY2xhc3MgX19zc29fc3RyaW5nX2Jhc2U7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgY2xhc3MgX19yY19zdHJpbmdfYmFzZTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBzdGQ6OmNoYXJfdHJhaXRzPF9DaGFyVD4sCisgICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPF9DaGFyVD4sCisJICAgdGVtcGxhdGUKKwkgICA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2UgPSBfX3Nzb19zdHJpbmdfYmFzZT4KKyAgICBjbGFzcyBfX3ZlcnNhX3N0cmluZzsKKworICB0eXBlZGVmIF9fdmVyc2Ffc3RyaW5nPGNoYXI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192c3RyaW5nOworICB0eXBlZGVmIF9fdnN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zc29fc3RyaW5nOworICB0eXBlZGVmIAorICBfX3ZlcnNhX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LAorCQkgc3RkOjphbGxvY2F0b3I8Y2hhcj4sIF9fcmNfc3RyaW5nX2Jhc2U+ICAgIF9fcmNfc3RyaW5nOworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgdHlwZWRlZiBfX3ZlcnNhX3N0cmluZzx3Y2hhcl90PiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd3ZzdHJpbmc7CisgIHR5cGVkZWYgX193dnN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3dzc29fc3RyaW5nOworICB0eXBlZGVmCisgIF9fdmVyc2Ffc3RyaW5nPHdjaGFyX3QsIHN0ZDo6Y2hhcl90cmFpdHM8d2NoYXJfdD4sCisJCSBzdGQ6OmFsbG9jYXRvcjx3Y2hhcl90PiwgX19yY19zdHJpbmdfYmFzZT4gX193cmNfc3RyaW5nOworI2VuZGlmICAKKworI2lmIChkZWZpbmVkKF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fKSBcCisgICAgICYmIGRlZmluZWQoX0dMSUJDWFhfVVNFX0M5OV9TVERJTlRfVFIxKSkKKworICB0eXBlZGVmIF9fdmVyc2Ffc3RyaW5nPGNoYXIxNl90PiAgICAgICAgICAgICAgICAgICAgICAgICAgX191MTZ2c3RyaW5nOworICB0eXBlZGVmIF9fdTE2dnN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191MTZzc29fc3RyaW5nOworICB0eXBlZGVmIAorICBfX3ZlcnNhX3N0cmluZzxjaGFyMTZfdCwgc3RkOjpjaGFyX3RyYWl0czxjaGFyMTZfdD4sCisJCSBzdGQ6OmFsbG9jYXRvcjxjaGFyMTZfdD4sIF9fcmNfc3RyaW5nX2Jhc2U+IF9fdTE2cmNfc3RyaW5nOworCisgIHR5cGVkZWYgX192ZXJzYV9zdHJpbmc8Y2hhcjMyX3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UzMnZzdHJpbmc7CisgIHR5cGVkZWYgX191MzJ2c3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UzMnNzb19zdHJpbmc7CisgIHR5cGVkZWYgCisgIF9fdmVyc2Ffc3RyaW5nPGNoYXIzMl90LCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXIzMl90PiwKKwkJIHN0ZDo6YWxsb2NhdG9yPGNoYXIzMl90PiwgX19yY19zdHJpbmdfYmFzZT4gX191MzJyY19zdHJpbmc7CisKKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZiAvKiBfVlNUUklOR19GV0RfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvdnN0cmluZ191dGlsLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2V4dC92c3RyaW5nX3V0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDQyZjcwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9leHQvdnN0cmluZ191dGlsLmgKQEAgLTAsMCArMSwxODAgQEAKKy8vIFZlcnNhdGlsZSBzdHJpbmcgdXRpbGl0eSAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGV4dC92c3RyaW5nX3V0aWwuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWZuZGVmIF9WU1RSSU5HX1VUSUxfSAorI2RlZmluZSBfVlNUUklOR19VVElMX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxleHQvdnN0cmluZ19md2QuaD4KKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2Z1bmN0aW9uLmg+ICAvLyBGb3IgbGVzcworI2luY2x1ZGUgPGJpdHMvZnVuY3RleGNlcHQuaD4KKyNpbmNsdWRlIDxiaXRzL2xvY2FsZWZ3ZC5oPgorI2luY2x1ZGUgPGJpdHMvb3N0cmVhbV9pbnNlcnQuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9pdGVyYXRvci5oPgorI2luY2x1ZGUgPGV4dC9udW1lcmljX3RyYWl0cy5oPgorI2luY2x1ZGUgPGJpdHMvbW92ZS5oPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHN0cnVjdCBfX3ZzdHJpbmdfdXRpbGl0eQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8X0NoYXJUPjo6b3RoZXIgX0NoYXJUX2FsbG9jX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgX1RyYWl0cwkJCQkJICAgIHRyYWl0c190eXBlOyAgICAgIAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpjaGFyX3R5cGUJCSAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQ2hhclRfYWxsb2NfdHlwZTo6c2l6ZV90eXBlCSAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9DaGFyVF9hbGxvY190eXBlOjpkaWZmZXJlbmNlX3R5cGUgICBkaWZmZXJlbmNlX3R5cGU7ICAgICAgCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9DaGFyVF9hbGxvY190eXBlOjpwb2ludGVyCSAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQ2hhclRfYWxsb2NfdHlwZTo6Y29uc3RfcG9pbnRlcgkgICAgY29uc3RfcG9pbnRlcjsKKworICAgICAgLy8gRm9yIF9fc3NvX3N0cmluZy4KKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjoKKyAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yPHBvaW50ZXIsIF9fZ251X2N4eDo6CisJCQlfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywKKwkJCQkgICAgICAgX19zc29fc3RyaW5nX2Jhc2U+ID4KKyAgICAgICAgX19zc29faXRlcmF0b3I7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6CisgICAgICBfX25vcm1hbF9pdGVyYXRvcjxjb25zdF9wb2ludGVyLCBfX2dudV9jeHg6OgorCQkJX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsCisJCQkJICAgICAgIF9fc3NvX3N0cmluZ19iYXNlPiA+CisgICAgICAgIF9fY29uc3Rfc3NvX2l0ZXJhdG9yOworCisgICAgICAvLyBGb3IgX19yY19zdHJpbmcuCisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6CisgICAgICBfX25vcm1hbF9pdGVyYXRvcjxwb2ludGVyLCBfX2dudV9jeHg6OgorCQkJX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsCisJCQkJICAgICAgIF9fcmNfc3RyaW5nX2Jhc2U+ID4KKyAgICAgICAgX19yY19pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjoKKyAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIF9fZ251X2N4eDo6CisJCQlfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywKKwkJCQkgICAgICAgX19yY19zdHJpbmdfYmFzZT4gPgorICAgICAgICBfX2NvbnN0X3JjX2l0ZXJhdG9yOworCisgICAgICAvLyBOQjogIFdoZW4gdGhlIGFsbG9jYXRvciBpcyBlbXB0eSwgZGVyaXZpbmcgZnJvbSBpdCBzYXZlcyBzcGFjZSAKKyAgICAgIC8vIChodHRwOi8vd3d3LmNhbnRyaXAub3JnL2VtcHR5b3B0Lmh0bWwpLgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jMT4KKyAgICAgICAgc3RydWN0IF9BbGxvY19oaWRlcgorCTogcHVibGljIF9BbGxvYzEKKwl7CisJICBfQWxsb2NfaGlkZXIoX0NoYXJUKiBfX3B0cikKKwkgIDogX0FsbG9jMSgpLCBfTV9wKF9fcHRyKSB7IH0KKworCSAgX0FsbG9jX2hpZGVyKGNvbnN0IF9BbGxvYzEmIF9fYSwgX0NoYXJUKiBfX3B0cikKKwkgIDogX0FsbG9jMShfX2EpLCBfTV9wKF9fcHRyKSB7IH0KKworCSAgX0NoYXJUKiAgX01fcDsgLy8gVGhlIGFjdHVhbCBkYXRhLgorCX07CisKKyAgICAgIC8vIFdoZW4gX19uID0gMSB3YXkgZmFzdGVyIHRoYW4gdGhlIGdlbmVyYWwgbXVsdGljaGFyCisgICAgICAvLyB0cmFpdHNfdHlwZTo6Y29weS9tb3ZlL2Fzc2lnbi4KKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfU19jb3B5KF9DaGFyVCogX19kLCBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKKyAgICAgIHsKKwlpZiAoX19uID09IDEpCisJICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX2QsICpfX3MpOworCWVsc2UKKwkgIHRyYWl0c190eXBlOjpjb3B5KF9fZCwgX19zLCBfX24pOworICAgICAgfQorCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX1NfbW92ZShfQ2hhclQqIF9fZCwgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCisgICAgICB7CisJaWYgKF9fbiA9PSAxKQorCSAgdHJhaXRzX3R5cGU6OmFzc2lnbigqX19kLCAqX19zKTsKKwllbHNlCisJICB0cmFpdHNfdHlwZTo6bW92ZShfX2QsIF9fcywgX19uKTsJICAKKyAgICAgIH0KKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIF9TX2Fzc2lnbihfQ2hhclQqIF9fZCwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKKyAgICAgIHsKKwlpZiAoX19uID09IDEpCisJICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX2QsIF9fYyk7CisJZWxzZQorCSAgdHJhaXRzX3R5cGU6OmFzc2lnbihfX2QsIF9fbiwgX19jKTsJICAKKyAgICAgIH0KKworICAgICAgLy8gX1NfY29weV9jaGFycyBpcyBhIHNlcGFyYXRlIHRlbXBsYXRlIHRvIHBlcm1pdCBzcGVjaWFsaXphdGlvbgorICAgICAgLy8gdG8gb3B0aW1pemUgZm9yIHRoZSBjb21tb24gY2FzZSBvZiBwb2ludGVycyBhcyBpdGVyYXRvcnMuCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CisgICAgICAgIHN0YXRpYyB2b2lkCisgICAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9JdGVyYXRvciBfX2sxLCBfSXRlcmF0b3IgX19rMikKKyAgICAgICAgeworCSAgZm9yICg7IF9fazEgIT0gX19rMjsgKytfX2sxLCArK19fcCkKKwkgICAgdHJhaXRzX3R5cGU6OmFzc2lnbigqX19wLCAqX19rMSk7IC8vIFRoZXNlIHR5cGVzIGFyZSBvZmYuCisJfQorCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX19zc29faXRlcmF0b3IgX19rMSwgX19zc29faXRlcmF0b3IgX19rMikKKyAgICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7IH0KKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9fY29uc3Rfc3NvX2l0ZXJhdG9yIF9fazEsCisJCSAgICBfX2NvbnN0X3Nzb19pdGVyYXRvciBfX2syKQorICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQorCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX19yY19pdGVyYXRvciBfX2sxLCBfX3JjX2l0ZXJhdG9yIF9fazIpCisgICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfX2NvbnN0X3JjX2l0ZXJhdG9yIF9fazEsCisJCSAgICBfX2NvbnN0X3JjX2l0ZXJhdG9yIF9fazIpCisgICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfQ2hhclQqIF9fazEsIF9DaGFyVCogX19rMikKKyAgICAgIHsgX1NfY29weShfX3AsIF9fazEsIF9fazIgLSBfX2sxKTsgfQorCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgY29uc3QgX0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hhclQqIF9fazIpCisgICAgICB7IF9TX2NvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0KKworICAgICAgc3RhdGljIGludAorICAgICAgX1NfY29tcGFyZShzaXplX3R5cGUgX19uMSwgc2l6ZV90eXBlIF9fbjIpCisgICAgICB7CisJY29uc3QgZGlmZmVyZW5jZV90eXBlIF9fZCA9IGRpZmZlcmVuY2VfdHlwZShfX24xIC0gX19uMik7CisKKwlpZiAoX19kID4gX19udW1lcmljX3RyYWl0c19pbnRlZ2VyPGludD46Ol9fbWF4KQorCSAgcmV0dXJuIF9fbnVtZXJpY190cmFpdHNfaW50ZWdlcjxpbnQ+OjpfX21heDsKKwllbHNlIGlmIChfX2QgPCBfX251bWVyaWNfdHJhaXRzX2ludGVnZXI8aW50Pjo6X19taW4pCisJICByZXR1cm4gX19udW1lcmljX3RyYWl0c19pbnRlZ2VyPGludD46Ol9fbWluOworCWVsc2UKKwkgIHJldHVybiBpbnQoX19kKTsKKyAgICAgIH0KKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZiAvKiBfVlNUUklOR19VVElMX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZmVudi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9mZW52LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRiNmQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZmVudi5oCkBAIC0wLDAgKzEsNTggQEAKKy8vIC0qLSBDKysgLSotIGNvbXBhdGliaWxpdHkgaGVhZGVyLgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGZlbnYuaAorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9GRU5WX0gKKyNkZWZpbmUgX0dMSUJDWFhfRkVOVl9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpZiBfR0xJQkNYWF9IQVZFX0ZFTlZfSAorIyBpbmNsdWRlX25leHQgPGZlbnYuaD4KKyNlbmRpZgorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyMgIGlmIGRlZmluZWQoX0dMSUJDWFhfSU5DTFVERV9BU19UUjEpCisjICAgIGVycm9yIEMrKzB4IGhlYWRlciBjYW5ub3QgYmUgaW5jbHVkZWQgZnJvbSBUUjEgaGVhZGVyCisjICBlbmRpZgorIyAgaWYgZGVmaW5lZChfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYKQorIyAgICBpbmNsdWRlIDx0cjFfaW1wbC9jZmVudj4KKyMgIGVsc2UKKyMgICAgZGVmaW5lIF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgKKyMgICAgZGVmaW5lIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9UUjEKKyMgICAgZGVmaW5lIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVFIxCisjICAgIGRlZmluZSBfR0xJQkNYWF9UUjEKKyMgICAgaW5jbHVkZSA8dHIxX2ltcGwvY2ZlbnY+CisjICAgIHVuZGVmIF9HTElCQ1hYX1RSMQorIyAgICB1bmRlZiBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorIyAgICB1bmRlZiBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxCisjICAgIHVuZGVmIF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgKKyMgIGVuZGlmCisjZW5kaWYKKworI2VuZGlmIC8vIF9HTElCQ1hYX0ZFTlZfSApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9mb3J3YXJkX2xpc3QgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2ZvcndhcmRfbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmZkY2MyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9mb3J3YXJkX2xpc3QKQEAgLTAsMCArMSw0NiBAQAorLy8gPGZvcndhcmRfbGlzdD4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBmb3J3YXJkX2xpc3QKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfRk9SV0FSRF9MSVNUCisjZGVmaW5lIF9HTElCQ1hYX0ZPUldBUkRfTElTVCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2lmbmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworIyBpbmNsdWRlIDxiaXRzL2MrKzB4X3dhcm5pbmcuaD4KKyNlbHNlCisKKyNpbmNsdWRlIDxiaXRzL2ZvcndhcmRfbGlzdC5oPgorCisjaWZuZGVmIF9HTElCQ1hYX0VYUE9SVF9URU1QTEFURQorIyBpbmNsdWRlIDxiaXRzL2ZvcndhcmRfbGlzdC50Y2M+CisjZW5kaWYKKworI2VuZGlmIC8vIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9GT1JXQVJEX0xJU1QKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZnN0cmVhbSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZnN0cmVhbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWE0ZjFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9mc3RyZWFtCkBAIC0wLDAgKzEsOTE5IEBACisvLyBGaWxlIGJhc2VkIHN0cmVhbXMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LAorLy8gMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGZzdHJlYW0KKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyNy44ICBGaWxlLWJhc2VkIHN0cmVhbXMKKy8vCisKKyNpZm5kZWYgX0dMSUJDWFhfRlNUUkVBTQorI2RlZmluZSBfR0xJQkNYWF9GU1RSRUFNIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8aXN0cmVhbT4KKyNpbmNsdWRlIDxvc3RyZWFtPgorI2luY2x1ZGUgPGJpdHMvY29kZWN2dC5oPgorI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgLy8gRm9yIEJVRlNJWgorI2luY2x1ZGUgPGJpdHMvYmFzaWNfZmlsZS5oPiAgLy8gRm9yIF9fYmFzaWNfZmlsZSwgX19jX2xvY2sKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworI2luY2x1ZGUgPHN0cmluZz4gICAgICAgICAgICAgLy8gRm9yIHN0ZDo6c3RyaW5nIG92ZXJsb2Fkcy4KKyNlbmRpZgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8vIFsyNy44LjEuMV0gdGVtcGxhdGUgY2xhc3MgYmFzaWNfZmlsZWJ1ZgorICAvKioKKyAgICogIEBicmllZiAgVGhlIGFjdHVhbCB3b3JrIG9mIGlucHV0IGFuZCBvdXRwdXQgKGZvciBmaWxlcykuCisgICAqICBAaW5ncm91cCBpbworICAgKgorICAgKiAgVGhpcyBjbGFzcyBhc3NvY2lhdGVzIGJvdGggaXRzIGlucHV0IGFuZCBvdXRwdXQgc2VxdWVuY2Ugd2l0aCBhbgorICAgKiAgZXh0ZXJuYWwgZGlzayBmaWxlLCBhbmQgbWFpbnRhaW5zIGEgam9pbnQgZmlsZSBwb3NpdGlvbiBmb3IgYm90aAorICAgKiAgc2VxdWVuY2VzLiAgTWFueSBvZiBpdHMgc2VtYW50aWNzIGFyZSBkZXNjcmliZWQgaW4gdGVybXMgb2Ygc2ltaWxhcgorICAgKiAgYmVoYXZpb3IgaW4gdGhlIFN0YW5kYXJkIEMgTGlicmFyeSdzIEBjIEZJTEUgc3RyZWFtcy4KKyAgICovCisgIC8vIFJlcXVpcmVtZW50cyBvbiB0cmFpdHNfdHlwZSwgc3BlY2lmaWMgdG8gdGhpcyBjbGFzczoKKyAgLy8gdHJhaXRzX3R5cGU6OnBvc190eXBlIG11c3QgYmUgZnBvczx0cmFpdHNfdHlwZTo6c3RhdGVfdHlwZT4KKyAgLy8gdHJhaXRzX3R5cGU6Om9mZl90eXBlIG11c3QgYmUgc3RyZWFtb2ZmCisgIC8vIHRyYWl0c190eXBlOjpzdGF0ZV90eXBlIG11c3QgYmUgQXNzaWduYWJsZSBhbmQgRGVmYXVsdENvbnN0cnVjdGlibGUsCisgIC8vIGFuZCB0cmFpdHNfdHlwZTo6c3RhdGVfdHlwZSgpIG11c3QgYmUgdGhlIGluaXRpYWwgc3RhdGUgZm9yIGNvZGVjdnQuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBjbGFzcyBiYXNpY19maWxlYnVmIDogcHVibGljIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIFR5cGVzOgorICAgICAgdHlwZWRlZiBfQ2hhclQgICAgICAgICAgICAgICAgICAgICAJICAgICAgICBjaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcmFpdHMgICAgICAgICAgICAgICAgICAgIAkgICAgICAgIHRyYWl0c190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgCQlpbnRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIAkJcG9zX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZSAJCW9mZl90eXBlOworCisgICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiAgCV9fc3RyZWFtYnVmX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gICAgIF9fZmlsZWJ1Zl90eXBlOworICAgICAgdHlwZWRlZiBfX2Jhc2ljX2ZpbGU8Y2hhcj4JCSAgICAgICAgX19maWxlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpzdGF0ZV90eXBlICAgICAgICAgIF9fc3RhdGVfdHlwZTsKKyAgICAgIHR5cGVkZWYgY29kZWN2dDxjaGFyX3R5cGUsIGNoYXIsIF9fc3RhdGVfdHlwZT4gICAgX19jb2RlY3Z0X3R5cGU7CisKKyAgICAgIGZyaWVuZCBjbGFzcyBpb3NfYmFzZTsgLy8gRm9yIHN5bmNfd2l0aF9zdGRpby4KKworICAgIHByb3RlY3RlZDoKKyAgICAgIC8vIERhdGEgTWVtYmVyczoKKyAgICAgIC8vIE1UIGxvY2sgaW5oZXJpdGVkIGZyb20gbGliaW8gb3Igb3RoZXIgbG93LWxldmVsIGlvIGxpYnJhcnkuCisgICAgICBfX2NfbG9jayAgICAgICAgICAJX01fbG9jazsKKworICAgICAgLy8gRXh0ZXJuYWwgYnVmZmVyLgorICAgICAgX19maWxlX3R5cGUgCQlfTV9maWxlOworCisgICAgICAvLy8gUGxhY2UgdG8gc3Rhc2ggaW4gfHwgb3V0IHx8IGluIHwgb3V0IHNldHRpbmdzIGZvciBjdXJyZW50IGZpbGVidWYuCisgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgCV9NX21vZGU7CisKKyAgICAgIC8vIEJlZ2lubmluZyBzdGF0ZSB0eXBlIGZvciBjb2RlY3Z0LgorICAgICAgX19zdGF0ZV90eXBlIAkJX01fc3RhdGVfYmVnOworCisgICAgICAvLyBEdXJpbmcgb3V0cHV0LCB0aGUgc3RhdGUgdGhhdCBjb3JyZXNwb25kcyB0byBwcHRyKCksCisgICAgICAvLyBkdXJpbmcgaW5wdXQsIHRoZSBzdGF0ZSB0aGF0IGNvcnJlc3BvbmRzIHRvIGVncHRyKCkgYW5kCisgICAgICAvLyBfTV9leHRfbmV4dC4KKyAgICAgIF9fc3RhdGVfdHlwZQkJX01fc3RhdGVfY3VyOworCisgICAgICAvLyBOb3QgdXNlZCBmb3Igb3V0cHV0LiBEdXJpbmcgaW5wdXQsIHRoZSBzdGF0ZSB0aGF0IGNvcnJlc3BvbmRzCisgICAgICAvLyB0byBlYmFjaygpIGFuZCBfTV9leHRfYnVmLgorICAgICAgX19zdGF0ZV90eXBlCQlfTV9zdGF0ZV9sYXN0OworCisgICAgICAvLy8gUG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIGludGVybmFsIGJ1ZmZlci4KKyAgICAgIGNoYXJfdHlwZSoJCV9NX2J1ZjsgCQorCisgICAgICAvKioKKyAgICAgICAqICBBY3R1YWwgc2l6ZSBvZiBpbnRlcm5hbCBidWZmZXIuIFRoaXMgbnVtYmVyIGlzIGVxdWFsIHRvIHRoZSBzaXplCisgICAgICAgKiAgb2YgdGhlIHB1dCBhcmVhICsgMSBwb3NpdGlvbiwgcmVzZXJ2ZWQgZm9yIHRoZSBvdmVyZmxvdyBjaGFyIG9mCisgICAgICAgKiAgYSBmdWxsIGFyZWEuCisgICAgICAgKi8KKyAgICAgIHNpemVfdAkJCV9NX2J1Zl9zaXplOworCisgICAgICAvLyBTZXQgaWZmIF9NX2J1ZiBpcyBhbGxvY2F0ZWQgbWVtb3J5IGZyb20gX01fYWxsb2NhdGVfaW50ZXJuYWxfYnVmZmVyLgorICAgICAgYm9vbAkJCV9NX2J1Zl9hbGxvY2F0ZWQ7CisKKyAgICAgIC8qKgorICAgICAgICogIF9NX3JlYWRpbmcgPT0gZmFsc2UgJiYgX01fd3JpdGluZyA9PSBmYWxzZSBmb3IgQGIgdW5jb21taXR0ZWQgbW9kZTsKKyAgICAgICAqICBfTV9yZWFkaW5nID09IHRydWUgZm9yIEBiIHJlYWQgbW9kZTsKKyAgICAgICAqICBfTV93cml0aW5nID09IHRydWUgZm9yIEBiIHdyaXRlIG1vZGU7CisgICAgICAgKgorICAgICAgICogIE5COiBfTV9yZWFkaW5nID09IHRydWUgJiYgX01fd3JpdGluZyA9PSB0cnVlIGlzIHVudXNlZC4KKyAgICAgICAqLworICAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICBfTV9yZWFkaW5nOworICAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICBfTV93cml0aW5nOworCisgICAgICAvL0B7CisgICAgICAvKioKKyAgICAgICAqICBOZWNlc3NhcnkgYml0cyBmb3IgcHV0YmFjayBidWZmZXIgbWFuYWdlbWVudC4KKyAgICAgICAqCisgICAgICAgKiAgQG5vdGUgcGJhY2tzIG9mIG92ZXIgb25lIGNoYXJhY3RlciBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCisgICAgICAgKi8KKyAgICAgIGNoYXJfdHlwZQkJCV9NX3BiYWNrOworICAgICAgY2hhcl90eXBlKgkJX01fcGJhY2tfY3VyX3NhdmU7CisgICAgICBjaGFyX3R5cGUqCQlfTV9wYmFja19lbmRfc2F2ZTsKKyAgICAgIGJvb2wJCQlfTV9wYmFja19pbml0OworICAgICAgLy9AfQorCisgICAgICAvLyBDYWNoZWQgY29kZWN2dCBmYWNldC4KKyAgICAgIGNvbnN0IF9fY29kZWN2dF90eXBlKiAJX01fY29kZWN2dDsKKworICAgICAgLyoqCisgICAgICAgKiAgQnVmZmVyIGZvciBleHRlcm5hbCBjaGFyYWN0ZXJzLiBVc2VkIGZvciBpbnB1dCB3aGVuCisgICAgICAgKiAgY29kZWN2dDo6YWx3YXlzX25vY29udigpID09IGZhbHNlLiBXaGVuIHZhbGlkLCB0aGlzIGNvcnJlc3BvbmRzCisgICAgICAgKiAgdG8gZWJhY2soKS4KKyAgICAgICAqLworICAgICAgY2hhcioJCQlfTV9leHRfYnVmOworCisgICAgICAvKioKKyAgICAgICAqICBTaXplIG9mIGJ1ZmZlciBoZWxkIGJ5IF9NX2V4dF9idWYuCisgICAgICAgKi8KKyAgICAgIHN0cmVhbXNpemUJCV9NX2V4dF9idWZfc2l6ZTsKKworICAgICAgLyoqCisgICAgICAgKiAgUG9pbnRlcnMgaW50byB0aGUgYnVmZmVyIGhlbGQgYnkgX01fZXh0X2J1ZiB0aGF0IGRlbGltaXQgYQorICAgICAgICogIHN1YnNlcXVlbmNlIG9mIGJ5dGVzIHRoYXQgaGF2ZSBiZWVuIHJlYWQgYnV0IG5vdCB5ZXQgY29udmVydGVkLgorICAgICAgICogIFdoZW4gdmFsaWQsIF9NX2V4dF9uZXh0IGNvcnJlc3BvbmRzIHRvIGVncHRyKCkuCisgICAgICAgKi8KKyAgICAgIGNvbnN0IGNoYXIqCQlfTV9leHRfbmV4dDsKKyAgICAgIGNoYXIqCQkJX01fZXh0X2VuZDsKKworICAgICAgLyoqCisgICAgICAgKiAgSW5pdGlhbGl6ZXMgcGJhY2sgYnVmZmVycywgYW5kIG1vdmVzIG5vcm1hbCBidWZmZXJzIHRvIHNhZmV0eS4KKyAgICAgICAqICBBc3N1bXB0aW9uczoKKyAgICAgICAqICBfTV9pbl9jdXIgaGFzIGFscmVhZHkgYmVlbiBtb3ZlZCBiYWNrCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIF9NX2NyZWF0ZV9wYmFjaygpCisgICAgICB7CisJaWYgKCFfTV9wYmFja19pbml0KQorCSAgeworCSAgICBfTV9wYmFja19jdXJfc2F2ZSA9IHRoaXMtPmdwdHIoKTsKKwkgICAgX01fcGJhY2tfZW5kX3NhdmUgPSB0aGlzLT5lZ3B0cigpOworCSAgICB0aGlzLT5zZXRnKCZfTV9wYmFjaywgJl9NX3BiYWNrLCAmX01fcGJhY2sgKyAxKTsKKwkgICAgX01fcGJhY2tfaW5pdCA9IHRydWU7CisJICB9CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIERlYWN0aXZhdGVzIHBiYWNrIGJ1ZmZlciBjb250ZW50cywgYW5kIHJlc3RvcmVzIG5vcm1hbCBidWZmZXIuCisgICAgICAgKiAgQXNzdW1wdGlvbnM6CisgICAgICAgKiAgVGhlIHBiYWNrIGJ1ZmZlciBoYXMgb25seSBtb3ZlZCBmb3J3YXJkLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBfTV9kZXN0cm95X3BiYWNrKCkgdGhyb3coKQorICAgICAgeworCWlmIChfTV9wYmFja19pbml0KQorCSAgeworCSAgICAvLyBMZW5ndGggX01faW5fY3VyIG1vdmVkIGluIHRoZSBwYmFjayBidWZmZXIuCisJICAgIF9NX3BiYWNrX2N1cl9zYXZlICs9IHRoaXMtPmdwdHIoKSAhPSB0aGlzLT5lYmFjaygpOworCSAgICB0aGlzLT5zZXRnKF9NX2J1ZiwgX01fcGJhY2tfY3VyX3NhdmUsIF9NX3BiYWNrX2VuZF9zYXZlKTsKKwkgICAgX01fcGJhY2tfaW5pdCA9IGZhbHNlOworCSAgfQorICAgICAgfQorCisgICAgcHVibGljOgorICAgICAgLy8gQ29uc3RydWN0b3JzL2Rlc3RydWN0b3I6CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIERvZXMgbm90IG9wZW4gYW55IGZpbGVzLgorICAgICAgICoKKyAgICAgICAqICBUaGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgcGFyZW50IGNsYXNzIHVzaW5nIGl0cworICAgICAgICogIG93biBkZWZhdWx0IGN0b3IuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX2ZpbGVidWYoKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBUaGUgZGVzdHJ1Y3RvciBjbG9zZXMgdGhlIGZpbGUgZmlyc3QuCisgICAgICAgKi8KKyAgICAgIHZpcnR1YWwKKyAgICAgIH5iYXNpY19maWxlYnVmKCkKKyAgICAgIHsgdGhpcy0+Y2xvc2UoKTsgfQorCisgICAgICAvLyBNZW1iZXJzOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm5zIHRydWUgaWYgdGhlIGV4dGVybmFsIGZpbGUgaXMgb3Blbi4KKyAgICAgICAqLworICAgICAgYm9vbAorICAgICAgaXNfb3BlbigpIGNvbnN0IHRocm93KCkKKyAgICAgIHsgcmV0dXJuIF9NX2ZpbGUuaXNfb3BlbigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgT3BlbnMgYW4gZXh0ZXJuYWwgZmlsZS4KKyAgICAgICAqICBAcGFyYW0gIHMgIFRoZSBuYW1lIG9mIHRoZSBmaWxlLgorICAgICAgICogIEBwYXJhbSAgbW9kZSAgVGhlIG9wZW4gbW9kZSBmbGFncy4KKyAgICAgICAqICBAcmV0dXJuICBAYyB0aGlzIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZQorICAgICAgICoKKyAgICAgICAqICBJZiBhIGZpbGUgaXMgYWxyZWFkeSBvcGVuLCB0aGlzIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IGZhaWxzLgorICAgICAgICogIE90aGVyd2lzZSBpdCB0cmllcyB0byBvcGVuIHRoZSBmaWxlIG5hbWVkIEBhIHMgdXNpbmcgdGhlIGZsYWdzCisgICAgICAgKiAgZ2l2ZW4gaW4gQGEgbW9kZS4KKyAgICAgICAqCisgICAgICAgKiAgVGFibGUgOTIsIGFkYXB0ZWQgaGVyZSwgZ2l2ZXMgdGhlIHJlbGF0aW9uIGJldHdlZW4gb3Blbm1vZGUKKyAgICAgICAqICBjb21iaW5hdGlvbnMgYW5kIHRoZSBlcXVpdmFsZW50IGZvcGVuKCkgZmxhZ3MuCisgICAgICAgKiAgKE5COiBsaW5lcyBhcHAsIGlufG91dHxhcHAsIGlufGFwcCwgYmluYXJ5fGFwcCwgYmluYXJ5fGlufG91dHxhcHAsCisgICAgICAgKiAgYW5kIGJpbmFyeXxpbnxhcHAgcGVyIERSIDU5NikKKyAgICAgICAqICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICogIHwgaW9zX2Jhc2UgRmxhZyBjb21iaW5hdGlvbiAgICAgICAgICAgIHN0ZGlvIGVxdWl2YWxlbnQgICB8CisgICAgICAgKiAgfGJpbmFyeSAgaW4gIG91dCAgdHJ1bmMgIGFwcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAqICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICogIHwgICAgICAgICAgICAgKyAgICAgICAgICAgICAgICAgICAgICAgIHcgICAgICAgICAgICAgICAgICB8CisgICAgICAgKiAgfCAgICAgICAgICAgICArICAgICAgICAgICArICAgICAgICAgICAgYSAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAqICB8ICAgICAgICAgICAgICAgICAgICAgICAgICsgICAgICAgICAgICBhICAgICAgICAgICAgICAgICAgfAorICAgICAgICogIHwgICAgICAgICAgICAgKyAgICAgKyAgICAgICAgICAgICAgICAgIHcgICAgICAgICAgICAgICAgICB8CisgICAgICAgKiAgfCAgICAgICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgciAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAqICB8ICAgICAgICAgKyAgICsgICAgICAgICAgICAgICAgICAgICAgICByKyAgICAgICAgICAgICAgICAgfAorICAgICAgICogIHwgICAgICAgICArICAgKyAgICAgKyAgICAgICAgICAgICAgICAgIHcrICAgICAgICAgICAgICAgICB8CisgICAgICAgKiAgfCAgICAgICAgICsgICArICAgICAgICAgICArICAgICAgICAgICAgYSsgICAgICAgICAgICAgICAgIHwKKyAgICAgICAqICB8ICAgICAgICAgKyAgICAgICAgICAgICAgICsgICAgICAgICAgICBhKyAgICAgICAgICAgICAgICAgfAorICAgICAgICogICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgKiAgfCAgICsgICAgICAgICArICAgICAgICAgICAgICAgICAgICAgICAgd2IgICAgICAgICAgICAgICAgIHwKKyAgICAgICAqICB8ICAgKyAgICAgICAgICsgICAgICAgICAgICsgICAgICAgICAgICBhYiAgICAgICAgICAgICAgICAgfAorICAgICAgICogIHwgICArICAgICAgICAgICAgICAgICAgICAgKyAgICAgICAgICAgIGFiICAgICAgICAgICAgICAgICB8CisgICAgICAgKiAgfCAgICsgICAgICAgICArICAgICArICAgICAgICAgICAgICAgICAgd2IgICAgICAgICAgICAgICAgIHwKKyAgICAgICAqICB8ICAgKyAgICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYiAgICAgICAgICAgICAgICAgfAorICAgICAgICogIHwgICArICAgICArICAgKyAgICAgICAgICAgICAgICAgICAgICAgIHIrYiAgICAgICAgICAgICAgICB8CisgICAgICAgKiAgfCAgICsgICAgICsgICArICAgICArICAgICAgICAgICAgICAgICAgdytiICAgICAgICAgICAgICAgIHwKKyAgICAgICAqICB8ICAgKyAgICAgKyAgICsgICAgICAgICAgICsgICAgICAgICAgICBhK2IgICAgICAgICAgICAgICAgfAorICAgICAgICogIHwgICArICAgICArICAgICAgICAgICAgICAgKyAgICAgICAgICAgIGErYiAgICAgICAgICAgICAgICB8CisgICAgICAgKiAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAqLworICAgICAgX19maWxlYnVmX3R5cGUqCisgICAgICBvcGVuKGNvbnN0IGNoYXIqIF9fcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSk7CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBPcGVucyBhbiBleHRlcm5hbCBmaWxlLgorICAgICAgICogIEBwYXJhbSAgcyAgVGhlIG5hbWUgb2YgdGhlIGZpbGUuCisgICAgICAgKiAgQHBhcmFtICBtb2RlICBUaGUgb3BlbiBtb2RlIGZsYWdzLgorICAgICAgICogIEByZXR1cm4gIEBjIHRoaXMgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlCisgICAgICAgKi8KKyAgICAgIF9fZmlsZWJ1Zl90eXBlKgorICAgICAgb3Blbihjb25zdCBzdGQ6OnN0cmluZyYgX19zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQorICAgICAgeyByZXR1cm4gb3BlbihfX3MuY19zdHIoKSwgX19tb2RlKTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ2xvc2VzIHRoZSBjdXJyZW50bHkgYXNzb2NpYXRlZCBmaWxlLgorICAgICAgICogIEByZXR1cm4gIEBjIHRoaXMgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlCisgICAgICAgKgorICAgICAgICogIElmIG5vIGZpbGUgaXMgY3VycmVudGx5IG9wZW4sIHRoaXMgZnVuY3Rpb24gaW1tZWRpYXRlbHkgZmFpbHMuCisgICAgICAgKgorICAgICAgICogIElmIGEgPGVtPnB1dCBidWZmZXIgYXJlYTwvZW0+IGV4aXN0cywgQGMgb3ZlcmZsb3coZW9mKSBpcworICAgICAgICogIGNhbGxlZCB0byBmbHVzaCBhbGwgdGhlIGNoYXJhY3RlcnMuICBUaGUgZmlsZSBpcyB0aGVuCisgICAgICAgKiAgY2xvc2VkLgorICAgICAgICoKKyAgICAgICAqICBJZiBhbnkgb3BlcmF0aW9ucyBmYWlsLCB0aGlzIGZ1bmN0aW9uIGFsc28gZmFpbHMuCisgICAgICAgKi8KKyAgICAgIF9fZmlsZWJ1Zl90eXBlKgorICAgICAgY2xvc2UoKTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgIHZvaWQKKyAgICAgIF9NX2FsbG9jYXRlX2ludGVybmFsX2J1ZmZlcigpOworCisgICAgICB2b2lkCisgICAgICBfTV9kZXN0cm95X2ludGVybmFsX2J1ZmZlcigpIHRocm93KCk7CisKKyAgICAgIC8vIFsyNy44LjEuNF0gb3ZlcnJpZGRlbiB2aXJ0dWFsIGZ1bmN0aW9ucworICAgICAgdmlydHVhbCBzdHJlYW1zaXplCisgICAgICBzaG93bWFueWMoKTsKKworICAgICAgLy8gU3Ryb3VzdHJ1cCwgMTk5OCwgcC4gNjI4CisgICAgICAvLyB1bmRlcmZsb3coKSBhbmQgdWZsb3coKSBmdW5jdGlvbnMgYXJlIGNhbGxlZCB0byBnZXQgdGhlIG5leHQKKyAgICAgIC8vIGNoYXJhY3RlciBmcm9tIHRoZSByZWFsIGlucHV0IHNvdXJjZSB3aGVuIHRoZSBidWZmZXIgaXMgZW1wdHkuCisgICAgICAvLyBCdWZmZXJlZCBpbnB1dCB1c2VzIHVuZGVyZmxvdygpCisKKyAgICAgIHZpcnR1YWwgaW50X3R5cGUKKyAgICAgIHVuZGVyZmxvdygpOworCisgICAgICB2aXJ0dWFsIGludF90eXBlCisgICAgICBwYmFja2ZhaWwoaW50X3R5cGUgX19jID0gX1RyYWl0czo6ZW9mKCkpOworCisgICAgICAvLyBTdHJvdXN0cnVwLCAxOTk4LCBwIDY0OAorICAgICAgLy8gVGhlIG92ZXJmbG93KCkgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHRyYW5zZmVyIGNoYXJhY3RlcnMgdG8gdGhlCisgICAgICAvLyByZWFsIG91dHB1dCBkZXN0aW5hdGlvbiB3aGVuIHRoZSBidWZmZXIgaXMgZnVsbC4gQSBjYWxsIHRvCisgICAgICAvLyBvdmVyZmxvdyhjKSBvdXRwdXRzIHRoZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyIHBsdXMgdGhlCisgICAgICAvLyBjaGFyYWN0ZXIgYy4KKyAgICAgIC8vIDI3LjUuMi40LjUKKyAgICAgIC8vIENvbnN1bWUgc29tZSBzZXF1ZW5jZSBvZiB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcGVuZGluZyBzZXF1ZW5jZS4KKyAgICAgIHZpcnR1YWwgaW50X3R5cGUKKyAgICAgIG92ZXJmbG93KGludF90eXBlIF9fYyA9IF9UcmFpdHM6OmVvZigpKTsKKworICAgICAgLy8gQ29udmVydCBpbnRlcm5hbCBieXRlIHNlcXVlbmNlIHRvIGV4dGVybmFsLCBjaGFyLWJhc2VkCisgICAgICAvLyBzZXF1ZW5jZSB2aWEgY29kZWN2dC4KKyAgICAgIGJvb2wKKyAgICAgIF9NX2NvbnZlcnRfdG9fZXh0ZXJuYWwoY2hhcl90eXBlKiwgc3RyZWFtc2l6ZSk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTWFuaXB1bGF0ZXMgdGhlIGJ1ZmZlci4KKyAgICAgICAqICBAcGFyYW0gIHMgIFBvaW50ZXIgdG8gYSBidWZmZXIgYXJlYS4KKyAgICAgICAqICBAcGFyYW0gIG4gIFNpemUgb2YgQGEgcy4KKyAgICAgICAqICBAcmV0dXJuICBAYyB0aGlzCisgICAgICAgKgorICAgICAgICogIElmIG5vIGZpbGUgaGFzIGJlZW4gb3BlbmVkLCBhbmQgYm90aCBAYSBzIGFuZCBAYSBuIGFyZSB6ZXJvLCB0aGVuCisgICAgICAgKiAgdGhlIHN0cmVhbSBiZWNvbWVzIHVuYnVmZmVyZWQuICBPdGhlcndpc2UsIEBjIHMgaXMgdXNlZCBhcyBhCisgICAgICAgKiAgYnVmZmVyOyBzZWUKKyAgICAgICAqICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9saWJzdGRjKysvbWFudWFsL2JrMDFwdDExY2gyNXMwMi5odG1sCisgICAgICAgKiAgZm9yIG1vcmUuCisgICAgICAgKi8KKyAgICAgIHZpcnR1YWwgX19zdHJlYW1idWZfdHlwZSoKKyAgICAgIHNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOworCisgICAgICB2aXJ0dWFsIHBvc190eXBlCisgICAgICBzZWVrb2ZmKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwKKwkgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCk7CisKKyAgICAgIHZpcnR1YWwgcG9zX3R5cGUKKyAgICAgIHNlZWtwb3MocG9zX3R5cGUgX19wb3MsCisJICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpOworCisgICAgICAvLyBDb21tb24gY29kZSBmb3Igc2Vla29mZiBhbmQgc2Vla3BvcworICAgICAgcG9zX3R5cGUKKyAgICAgIF9NX3NlZWsob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LCBfX3N0YXRlX3R5cGUgX19zdGF0ZSk7CisKKyAgICAgIHZpcnR1YWwgaW50CisgICAgICBzeW5jKCk7CisKKyAgICAgIHZpcnR1YWwgdm9pZAorICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CisKKyAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQorICAgICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CisKKyAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQorICAgICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CisKKyAgICAgIC8vIEZsdXNoZXMgb3V0cHV0IGJ1ZmZlciwgdGhlbiB3cml0ZXMgdW5zaGlmdCBzZXF1ZW5jZS4KKyAgICAgIGJvb2wKKyAgICAgIF9NX3Rlcm1pbmF0ZV9vdXRwdXQoKTsKKworICAgICAgLyoqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBwb2ludGVycyBvZiB0aGUgaW50ZXJuYWwgYnVmZmVyLCBib3RoIGdldAorICAgICAgICogIGFuZCBwdXQgYXJlYXMuIFR5cGljYWxseToKKyAgICAgICAqCisgICAgICAgKiAgIF9fb2ZmID09IGVncHRyKCkgLSBlYmFjaygpIHVwb24gdW5kZXJmbG93L3VmbG93IChAYiByZWFkIG1vZGUpOworICAgICAgICogICBfX29mZiA9PSAwIHVwb24gb3ZlcmZsb3cgKEBiIHdyaXRlIG1vZGUpOworICAgICAgICogICBfX29mZiA9PSAtMSB1cG9uIG9wZW4sIHNldGJ1Ziwgc2Vla29mZi9wb3MgKEBiIHVuY29tbWl0dGVkIG1vZGUpLgorICAgICAgICoKKyAgICAgICAqICBOQjogZXBwdHIoKSAtIHBiYXNlKCkgPT0gX01fYnVmX3NpemUgLSAxLCBzaW5jZSBfTV9idWZfc2l6ZQorICAgICAgICogIHJlZmxlY3RzIHRoZSBhY3R1YWwgYWxsb2NhdGVkIG1lbW9yeSBhbmQgdGhlIGxhc3QgY2VsbCBpcyByZXNlcnZlZAorICAgICAgICogIGZvciB0aGUgb3ZlcmZsb3cgY2hhciBvZiBhIGZ1bGwgcHV0IGFyZWEuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIF9NX3NldF9idWZmZXIoc3RyZWFtc2l6ZSBfX29mZikKKyAgICAgIHsKKyAJY29uc3QgYm9vbCBfX3Rlc3RpbiA9IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47CisgCWNvbnN0IGJvb2wgX190ZXN0b3V0ID0gX01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CisJCisJaWYgKF9fdGVzdGluICYmIF9fb2ZmID4gMCkKKwkgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9idWYsIF9NX2J1ZiArIF9fb2ZmKTsKKwllbHNlCisJICB0aGlzLT5zZXRnKF9NX2J1ZiwgX01fYnVmLCBfTV9idWYpOworCisJaWYgKF9fdGVzdG91dCAmJiBfX29mZiA9PSAwICYmIF9NX2J1Zl9zaXplID4gMSApCisJICB0aGlzLT5zZXRwKF9NX2J1ZiwgX01fYnVmICsgX01fYnVmX3NpemUgLSAxKTsKKwllbHNlCisJICB0aGlzLT5zZXRwKE5VTEwsIE5VTEwpOworICAgICAgfQorICAgIH07CisKKyAgLy8gWzI3LjguMS41XSBUZW1wbGF0ZSBjbGFzcyBiYXNpY19pZnN0cmVhbQorICAvKioKKyAgICogIEBicmllZiAgQ29udHJvbGxpbmcgaW5wdXQgZm9yIGZpbGVzLgorICAgKiAgQGluZ3JvdXAgaW8KKyAgICoKKyAgICogIFRoaXMgY2xhc3Mgc3VwcG9ydHMgcmVhZGluZyBmcm9tIG5hbWVkIGZpbGVzLCB1c2luZyB0aGUgaW5oZXJpdGVkCisgICAqICBmdW5jdGlvbnMgZnJvbSBzdGQ6OmJhc2ljX2lzdHJlYW0uICBUbyBjb250cm9sIHRoZSBhc3NvY2lhdGVkCisgICAqICBzZXF1ZW5jZSwgYW4gaW5zdGFuY2Ugb2Ygc3RkOjpiYXNpY19maWxlYnVmIGlzIHVzZWQsIHdoaWNoIHRoaXMgcGFnZQorICAgKiAgcmVmZXJzIHRvIGFzIEBjIHNiLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGNsYXNzIGJhc2ljX2lmc3RyZWFtIDogcHVibGljIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlczoKKyAgICAgIHR5cGVkZWYgX0NoYXJUIAkJCQkJY2hhcl90eXBlOworICAgICAgdHlwZWRlZiBfVHJhaXRzIAkJCQkJdHJhaXRzX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSAJCWludF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgCQlwb3NfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIAkJb2ZmX3R5cGU7CisKKyAgICAgIC8vIE5vbi1zdGFuZGFyZCB0eXBlczoKKyAgICAgIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiAJX19maWxlYnVmX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4JX19pc3RyZWFtX3R5cGU7CisKKyAgICBwcml2YXRlOgorICAgICAgX19maWxlYnVmX3R5cGUJX01fZmlsZWJ1ZjsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vIENvbnN0cnVjdG9ycy9EZXN0cnVjdG9yczoKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgICAgICAqCisgICAgICAgKiAgSW5pdGlhbGl6ZXMgQGMgc2IgdXNpbmcgaXRzIGRlZmF1bHQgY29uc3RydWN0b3IsIGFuZCBwYXNzZXMKKyAgICAgICAqICBAYyAmc2IgdG8gdGhlIGJhc2UgY2xhc3MgaW5pdGlhbGl6ZXIuICBEb2VzIG5vdCBvcGVuIGFueSBmaWxlcworICAgICAgICogICh5b3UgaGF2ZW4ndCBnaXZlbiBpdCBhIGZpbGVuYW1lIHRvIG9wZW4pLgorICAgICAgICovCisgICAgICBiYXNpY19pZnN0cmVhbSgpIDogX19pc3RyZWFtX3R5cGUoKSwgX01fZmlsZWJ1ZigpCisgICAgICB7IHRoaXMtPmluaXQoJl9NX2ZpbGVidWYpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ3JlYXRlIGFuIGlucHV0IGZpbGUgc3RyZWFtLgorICAgICAgICogIEBwYXJhbSAgcyAgTnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBmaWxlbmFtZS4KKyAgICAgICAqICBAcGFyYW0gIG1vZGUgIE9wZW4gZmlsZSBpbiBzcGVjaWZpZWQgbW9kZSAoc2VlIHN0ZDo6aW9zX2Jhc2UpLgorICAgICAgICoKKyAgICAgICAqICBAYyBpb3NfYmFzZTo6aW4gaXMgYXV0b21hdGljYWxseSBpbmNsdWRlZCBpbiBAYSBtb2RlLgorICAgICAgICoKKyAgICAgICAqICBUaXA6ICBXaGVuIHVzaW5nIHN0ZDo6c3RyaW5nIHRvIGhvbGQgdGhlIGZpbGVuYW1lLCB5b3UgbXVzdCB1c2UKKyAgICAgICAqICAuY19zdHIoKSBiZWZvcmUgcGFzc2luZyBpdCB0byB0aGlzIGNvbnN0cnVjdG9yLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgYmFzaWNfaWZzdHJlYW0oY29uc3QgY2hhciogX19zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluKQorICAgICAgOiBfX2lzdHJlYW1fdHlwZSgpLCBfTV9maWxlYnVmKCkKKyAgICAgIHsKKwl0aGlzLT5pbml0KCZfTV9maWxlYnVmKTsKKwl0aGlzLT5vcGVuKF9fcywgX19tb2RlKTsKKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENyZWF0ZSBhbiBpbnB1dCBmaWxlIHN0cmVhbS4KKyAgICAgICAqICBAcGFyYW0gIHMgIHN0ZDo6c3RyaW5nIHNwZWNpZnlpbmcgdGhlIGZpbGVuYW1lLgorICAgICAgICogIEBwYXJhbSAgbW9kZSAgT3BlbiBmaWxlIGluIHNwZWNpZmllZCBtb2RlIChzZWUgc3RkOjppb3NfYmFzZSkuCisgICAgICAgKgorICAgICAgICogIEBjIGlvc19iYXNlOjppbiBpcyBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIGluIEBhIG1vZGUuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBiYXNpY19pZnN0cmVhbShjb25zdCBzdGQ6OnN0cmluZyYgX19zLAorCQkgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4pCisgICAgICA6IF9faXN0cmVhbV90eXBlKCksIF9NX2ZpbGVidWYoKQorICAgICAgeworCXRoaXMtPmluaXQoJl9NX2ZpbGVidWYpOworCXRoaXMtPm9wZW4oX19zLCBfX21vZGUpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgVGhlIGRlc3RydWN0b3IgZG9lcyBub3RoaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGUgZmlsZSBpcyBjbG9zZWQgYnkgdGhlIGZpbGVidWYgb2JqZWN0LCBub3QgdGhlIGZvcm1hdHRpbmcKKyAgICAgICAqICBzdHJlYW0uCisgICAgICAgKi8KKyAgICAgIH5iYXNpY19pZnN0cmVhbSgpCisgICAgICB7IH0KKworICAgICAgLy8gTWVtYmVyczoKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQWNjZXNzaW5nIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlci4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgY3VycmVudCBiYXNpY19maWxlYnVmIGJ1ZmZlci4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBoaWRlcyBib3RoIHNpZ25hdHVyZXMgb2Ygc3RkOjpiYXNpY19pb3M6OnJkYnVmKCkuCisgICAgICAgKi8KKyAgICAgIF9fZmlsZWJ1Zl90eXBlKgorICAgICAgcmRidWYoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfY2FzdDxfX2ZpbGVidWZfdHlwZSo+KCZfTV9maWxlYnVmKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFdyYXBwZXIgdG8gdGVzdCBmb3IgYW4gb3BlbiBmaWxlLgorICAgICAgICogIEByZXR1cm4gIEBjIHJkYnVmKCktPmlzX29wZW4oKQorICAgICAgICovCisgICAgICBib29sCisgICAgICBpc19vcGVuKCkKKyAgICAgIHsgcmV0dXJuIF9NX2ZpbGVidWYuaXNfb3BlbigpOyB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDM2NS4gTGFjayBvZiBjb25zdC1xdWFsaWZpY2F0aW9uIGluIGNsYXVzZSAyNworICAgICAgYm9vbAorICAgICAgaXNfb3BlbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9maWxlYnVmLmlzX29wZW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE9wZW5zIGFuIGV4dGVybmFsIGZpbGUuCisgICAgICAgKiAgQHBhcmFtICBzICBUaGUgbmFtZSBvZiB0aGUgZmlsZS4KKyAgICAgICAqICBAcGFyYW0gIG1vZGUgIFRoZSBvcGVuIG1vZGUgZmxhZ3MuCisgICAgICAgKgorICAgICAgICogIENhbGxzIEBjIHN0ZDo6YmFzaWNfZmlsZWJ1Zjo6b3BlbihzLG1vZGV8aW4pLiAgSWYgdGhhdCBmdW5jdGlvbgorICAgICAgICogIGZhaWxzLCBAYyBmYWlsYml0IGlzIHNldCBpbiB0aGUgc3RyZWFtJ3MgZXJyb3Igc3RhdGUuCisgICAgICAgKgorICAgICAgICogIFRpcDogIFdoZW4gdXNpbmcgc3RkOjpzdHJpbmcgdG8gaG9sZCB0aGUgZmlsZW5hbWUsIHlvdSBtdXN0IHVzZQorICAgICAgICogIC5jX3N0cigpIGJlZm9yZSBwYXNzaW5nIGl0IHRvIHRoaXMgY29uc3RydWN0b3IuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIG9wZW4oY29uc3QgY2hhciogX19zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluKQorICAgICAgeworCWlmICghX01fZmlsZWJ1Zi5vcGVuKF9fcywgX19tb2RlIHwgaW9zX2Jhc2U6OmluKSkKKwkgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKKwllbHNlCisJICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJICAvLyA0MDkuIENsb3NpbmcgYW4gZnN0cmVhbSBzaG91bGQgY2xlYXIgZXJyb3Igc3RhdGUKKwkgIHRoaXMtPmNsZWFyKCk7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBPcGVucyBhbiBleHRlcm5hbCBmaWxlLgorICAgICAgICogIEBwYXJhbSAgcyAgVGhlIG5hbWUgb2YgdGhlIGZpbGUuCisgICAgICAgKiAgQHBhcmFtICBtb2RlICBUaGUgb3BlbiBtb2RlIGZsYWdzLgorICAgICAgICoKKyAgICAgICAqICBDYWxscyBAYyBzdGQ6OmJhc2ljX2ZpbGVidWY6Om9wZW4ocyxtb2RlfGluKS4gIElmIHRoYXQgZnVuY3Rpb24KKyAgICAgICAqICBmYWlscywgQGMgZmFpbGJpdCBpcyBzZXQgaW4gdGhlIHN0cmVhbSdzIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBvcGVuKGNvbnN0IHN0ZDo6c3RyaW5nJiBfX3MsIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4pCisgICAgICB7CisJaWYgKCFfTV9maWxlYnVmLm9wZW4oX19zLCBfX21vZGUgfCBpb3NfYmFzZTo6aW4pKQorCSAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOworCWVsc2UKKwkgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkgIC8vIDQwOS4gQ2xvc2luZyBhbiBmc3RyZWFtIHNob3VsZCBjbGVhciBlcnJvciBzdGF0ZQorCSAgdGhpcy0+Y2xlYXIoKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENsb3NlIHRoZSBmaWxlLgorICAgICAgICoKKyAgICAgICAqICBDYWxscyBAYyBzdGQ6OmJhc2ljX2ZpbGVidWY6OmNsb3NlKCkuICBJZiB0aGF0IGZ1bmN0aW9uCisgICAgICAgKiAgZmFpbHMsIEBjIGZhaWxiaXQgaXMgc2V0IGluIHRoZSBzdHJlYW0ncyBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgY2xvc2UoKQorICAgICAgeworCWlmICghX01fZmlsZWJ1Zi5jbG9zZSgpKQorCSAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOworICAgICAgfQorICAgIH07CisKKworICAvLyBbMjcuOC4xLjhdIFRlbXBsYXRlIGNsYXNzIGJhc2ljX29mc3RyZWFtCisgIC8qKgorICAgKiAgQGJyaWVmICBDb250cm9sbGluZyBvdXRwdXQgZm9yIGZpbGVzLgorICAgKiAgQGluZ3JvdXAgaW8KKyAgICoKKyAgICogIFRoaXMgY2xhc3Mgc3VwcG9ydHMgcmVhZGluZyBmcm9tIG5hbWVkIGZpbGVzLCB1c2luZyB0aGUgaW5oZXJpdGVkCisgICAqICBmdW5jdGlvbnMgZnJvbSBzdGQ6OmJhc2ljX29zdHJlYW0uICBUbyBjb250cm9sIHRoZSBhc3NvY2lhdGVkCisgICAqICBzZXF1ZW5jZSwgYW4gaW5zdGFuY2Ugb2Ygc3RkOjpiYXNpY19maWxlYnVmIGlzIHVzZWQsIHdoaWNoIHRoaXMgcGFnZQorICAgKiAgcmVmZXJzIHRvIGFzIEBjIHNiLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGNsYXNzIGJhc2ljX29mc3RyZWFtIDogcHVibGljIGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIFR5cGVzOgorICAgICAgdHlwZWRlZiBfQ2hhclQgCQkJCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcmFpdHMgCQkJCQl0cmFpdHNfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIAkJaW50X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSAJCXBvc190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgCQlvZmZfdHlwZTsKKworICAgICAgLy8gTm9uLXN0YW5kYXJkIHR5cGVzOgorICAgICAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IAlfX2ZpbGVidWZfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPglfX29zdHJlYW1fdHlwZTsKKworICAgIHByaXZhdGU6CisgICAgICBfX2ZpbGVidWZfdHlwZQlfTV9maWxlYnVmOworCisgICAgcHVibGljOgorICAgICAgLy8gQ29uc3RydWN0b3JzOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICAgICAgICoKKyAgICAgICAqICBJbml0aWFsaXplcyBAYyBzYiB1c2luZyBpdHMgZGVmYXVsdCBjb25zdHJ1Y3RvciwgYW5kIHBhc3NlcworICAgICAgICogIEBjICZzYiB0byB0aGUgYmFzZSBjbGFzcyBpbml0aWFsaXplci4gIERvZXMgbm90IG9wZW4gYW55IGZpbGVzCisgICAgICAgKiAgKHlvdSBoYXZlbid0IGdpdmVuIGl0IGEgZmlsZW5hbWUgdG8gb3BlbikuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX29mc3RyZWFtKCk6IF9fb3N0cmVhbV90eXBlKCksIF9NX2ZpbGVidWYoKQorICAgICAgeyB0aGlzLT5pbml0KCZfTV9maWxlYnVmKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENyZWF0ZSBhbiBvdXRwdXQgZmlsZSBzdHJlYW0uCisgICAgICAgKiAgQHBhcmFtICBzICBOdWxsIHRlcm1pbmF0ZWQgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGZpbGVuYW1lLgorICAgICAgICogIEBwYXJhbSAgbW9kZSAgT3BlbiBmaWxlIGluIHNwZWNpZmllZCBtb2RlIChzZWUgc3RkOjppb3NfYmFzZSkuCisgICAgICAgKgorICAgICAgICogIEBjIGlvc19iYXNlOjpvdXR8aW9zX2Jhc2U6OnRydW5jIGlzIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgaW4KKyAgICAgICAqICBAYSBtb2RlLgorICAgICAgICoKKyAgICAgICAqICBUaXA6ICBXaGVuIHVzaW5nIHN0ZDo6c3RyaW5nIHRvIGhvbGQgdGhlIGZpbGVuYW1lLCB5b3UgbXVzdCB1c2UKKyAgICAgICAqICAuY19zdHIoKSBiZWZvcmUgcGFzc2luZyBpdCB0byB0aGlzIGNvbnN0cnVjdG9yLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgYmFzaWNfb2ZzdHJlYW0oY29uc3QgY2hhciogX19zLAorCQkgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6b3V0fGlvc19iYXNlOjp0cnVuYykKKyAgICAgIDogX19vc3RyZWFtX3R5cGUoKSwgX01fZmlsZWJ1ZigpCisgICAgICB7CisJdGhpcy0+aW5pdCgmX01fZmlsZWJ1Zik7CisJdGhpcy0+b3BlbihfX3MsIF9fbW9kZSk7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDcmVhdGUgYW4gb3V0cHV0IGZpbGUgc3RyZWFtLgorICAgICAgICogIEBwYXJhbSAgcyAgc3RkOjpzdHJpbmcgc3BlY2lmeWluZyB0aGUgZmlsZW5hbWUuCisgICAgICAgKiAgQHBhcmFtICBtb2RlICBPcGVuIGZpbGUgaW4gc3BlY2lmaWVkIG1vZGUgKHNlZSBzdGQ6Omlvc19iYXNlKS4KKyAgICAgICAqCisgICAgICAgKiAgQGMgaW9zX2Jhc2U6Om91dHxpb3NfYmFzZTo6dHJ1bmMgaXMgYXV0b21hdGljYWxseSBpbmNsdWRlZCBpbgorICAgICAgICogIEBhIG1vZGUuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBiYXNpY19vZnN0cmVhbShjb25zdCBzdGQ6OnN0cmluZyYgX19zLAorCQkgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6b3V0fGlvc19iYXNlOjp0cnVuYykKKyAgICAgIDogX19vc3RyZWFtX3R5cGUoKSwgX01fZmlsZWJ1ZigpCisgICAgICB7CisJdGhpcy0+aW5pdCgmX01fZmlsZWJ1Zik7CisJdGhpcy0+b3BlbihfX3MsIF9fbW9kZSk7CisgICAgICB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBUaGUgZGVzdHJ1Y3RvciBkb2VzIG5vdGhpbmcuCisgICAgICAgKgorICAgICAgICogIFRoZSBmaWxlIGlzIGNsb3NlZCBieSB0aGUgZmlsZWJ1ZiBvYmplY3QsIG5vdCB0aGUgZm9ybWF0dGluZworICAgICAgICogIHN0cmVhbS4KKyAgICAgICAqLworICAgICAgfmJhc2ljX29mc3RyZWFtKCkKKyAgICAgIHsgfQorCisgICAgICAvLyBNZW1iZXJzOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBY2Nlc3NpbmcgdGhlIHVuZGVybHlpbmcgYnVmZmVyLgorICAgICAgICogIEByZXR1cm4gIFRoZSBjdXJyZW50IGJhc2ljX2ZpbGVidWYgYnVmZmVyLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGhpZGVzIGJvdGggc2lnbmF0dXJlcyBvZiBzdGQ6OmJhc2ljX2lvczo6cmRidWYoKS4KKyAgICAgICAqLworICAgICAgX19maWxlYnVmX3R5cGUqCisgICAgICByZGJ1ZigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fZmlsZWJ1Zl90eXBlKj4oJl9NX2ZpbGVidWYpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgV3JhcHBlciB0byB0ZXN0IGZvciBhbiBvcGVuIGZpbGUuCisgICAgICAgKiAgQHJldHVybiAgQGMgcmRidWYoKS0+aXNfb3BlbigpCisgICAgICAgKi8KKyAgICAgIGJvb2wKKyAgICAgIGlzX29wZW4oKQorICAgICAgeyByZXR1cm4gX01fZmlsZWJ1Zi5pc19vcGVuKCk7IH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMzY1LiBMYWNrIG9mIGNvbnN0LXF1YWxpZmljYXRpb24gaW4gY2xhdXNlIDI3CisgICAgICBib29sCisgICAgICBpc19vcGVuKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2ZpbGVidWYuaXNfb3BlbigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgT3BlbnMgYW4gZXh0ZXJuYWwgZmlsZS4KKyAgICAgICAqICBAcGFyYW0gIHMgIFRoZSBuYW1lIG9mIHRoZSBmaWxlLgorICAgICAgICogIEBwYXJhbSAgbW9kZSAgVGhlIG9wZW4gbW9kZSBmbGFncy4KKyAgICAgICAqCisgICAgICAgKiAgQ2FsbHMgQGMgc3RkOjpiYXNpY19maWxlYnVmOjpvcGVuKHMsbW9kZXxvdXR8dHJ1bmMpLiAgSWYgdGhhdAorICAgICAgICogIGZ1bmN0aW9uIGZhaWxzLCBAYyBmYWlsYml0IGlzIHNldCBpbiB0aGUgc3RyZWFtJ3MgZXJyb3Igc3RhdGUuCisgICAgICAgKgorICAgICAgICogIFRpcDogIFdoZW4gdXNpbmcgc3RkOjpzdHJpbmcgdG8gaG9sZCB0aGUgZmlsZW5hbWUsIHlvdSBtdXN0IHVzZQorICAgICAgICogIC5jX3N0cigpIGJlZm9yZSBwYXNzaW5nIGl0IHRvIHRoaXMgY29uc3RydWN0b3IuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIG9wZW4oY29uc3QgY2hhciogX19zLAorCSAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6b3V0IHwgaW9zX2Jhc2U6OnRydW5jKQorICAgICAgeworCWlmICghX01fZmlsZWJ1Zi5vcGVuKF9fcywgX19tb2RlIHwgaW9zX2Jhc2U6Om91dCkpCisJICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CisJZWxzZQorCSAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCSAgLy8gNDA5LiBDbG9zaW5nIGFuIGZzdHJlYW0gc2hvdWxkIGNsZWFyIGVycm9yIHN0YXRlCisJICB0aGlzLT5jbGVhcigpOworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgT3BlbnMgYW4gZXh0ZXJuYWwgZmlsZS4KKyAgICAgICAqICBAcGFyYW0gIHMgIFRoZSBuYW1lIG9mIHRoZSBmaWxlLgorICAgICAgICogIEBwYXJhbSAgbW9kZSAgVGhlIG9wZW4gbW9kZSBmbGFncy4KKyAgICAgICAqCisgICAgICAgKiAgQ2FsbHMgQGMgc3RkOjpiYXNpY19maWxlYnVmOjpvcGVuKHMsbW9kZXxvdXR8dHJ1bmMpLiAgSWYgdGhhdAorICAgICAgICogIGZ1bmN0aW9uIGZhaWxzLCBAYyBmYWlsYml0IGlzIHNldCBpbiB0aGUgc3RyZWFtJ3MgZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIG9wZW4oY29uc3Qgc3RkOjpzdHJpbmcmIF9fcywKKwkgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6Om91dCB8IGlvc19iYXNlOjp0cnVuYykKKyAgICAgIHsKKwlpZiAoIV9NX2ZpbGVidWYub3BlbihfX3MsIF9fbW9kZSB8IGlvc19iYXNlOjpvdXQpKQorCSAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOworCWVsc2UKKwkgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkgIC8vIDQwOS4gQ2xvc2luZyBhbiBmc3RyZWFtIHNob3VsZCBjbGVhciBlcnJvciBzdGF0ZQorCSAgdGhpcy0+Y2xlYXIoKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENsb3NlIHRoZSBmaWxlLgorICAgICAgICoKKyAgICAgICAqICBDYWxscyBAYyBzdGQ6OmJhc2ljX2ZpbGVidWY6OmNsb3NlKCkuICBJZiB0aGF0IGZ1bmN0aW9uCisgICAgICAgKiAgZmFpbHMsIEBjIGZhaWxiaXQgaXMgc2V0IGluIHRoZSBzdHJlYW0ncyBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgY2xvc2UoKQorICAgICAgeworCWlmICghX01fZmlsZWJ1Zi5jbG9zZSgpKQorCSAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOworICAgICAgfQorICAgIH07CisKKworICAvLyBbMjcuOC4xLjExXSBUZW1wbGF0ZSBjbGFzcyBiYXNpY19mc3RyZWFtCisgIC8qKgorICAgKiAgQGJyaWVmICBDb250cm9sbGluZyBpbnB1dCBhbmQgb3V0cHV0IGZvciBmaWxlcy4KKyAgICogIEBpbmdyb3VwIGlvCisgICAqCisgICAqICBUaGlzIGNsYXNzIHN1cHBvcnRzIHJlYWRpbmcgZnJvbSBhbmQgd3JpdGluZyB0byBuYW1lZCBmaWxlcywgdXNpbmcKKyAgICogIHRoZSBpbmhlcml0ZWQgZnVuY3Rpb25zIGZyb20gc3RkOjpiYXNpY19pb3N0cmVhbS4gIFRvIGNvbnRyb2wgdGhlCisgICAqICBhc3NvY2lhdGVkIHNlcXVlbmNlLCBhbiBpbnN0YW5jZSBvZiBzdGQ6OmJhc2ljX2ZpbGVidWYgaXMgdXNlZCwgd2hpY2gKKyAgICogIHRoaXMgcGFnZSByZWZlcnMgdG8gYXMgQGMgc2IuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgY2xhc3MgYmFzaWNfZnN0cmVhbSA6IHB1YmxpYyBiYXNpY19pb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIFR5cGVzOgorICAgICAgdHlwZWRlZiBfQ2hhclQgCQkJCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcmFpdHMgCQkJCQl0cmFpdHNfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIAkJaW50X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSAJCXBvc190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgCQlvZmZfdHlwZTsKKworICAgICAgLy8gTm9uLXN0YW5kYXJkIHR5cGVzOgorICAgICAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IAlfX2ZpbGVidWZfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+CQlfX2lvc190eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPglfX2lvc3RyZWFtX3R5cGU7CisKKyAgICBwcml2YXRlOgorICAgICAgX19maWxlYnVmX3R5cGUJX01fZmlsZWJ1ZjsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vIENvbnN0cnVjdG9ycy9kZXN0cnVjdG9yOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICAgICAgICoKKyAgICAgICAqICBJbml0aWFsaXplcyBAYyBzYiB1c2luZyBpdHMgZGVmYXVsdCBjb25zdHJ1Y3RvciwgYW5kIHBhc3NlcworICAgICAgICogIEBjICZzYiB0byB0aGUgYmFzZSBjbGFzcyBpbml0aWFsaXplci4gIERvZXMgbm90IG9wZW4gYW55IGZpbGVzCisgICAgICAgKiAgKHlvdSBoYXZlbid0IGdpdmVuIGl0IGEgZmlsZW5hbWUgdG8gb3BlbikuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX2ZzdHJlYW0oKQorICAgICAgOiBfX2lvc3RyZWFtX3R5cGUoKSwgX01fZmlsZWJ1ZigpCisgICAgICB7IHRoaXMtPmluaXQoJl9NX2ZpbGVidWYpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ3JlYXRlIGFuIGlucHV0L291dHB1dCBmaWxlIHN0cmVhbS4KKyAgICAgICAqICBAcGFyYW0gIHMgIE51bGwgdGVybWluYXRlZCBzdHJpbmcgc3BlY2lmeWluZyB0aGUgZmlsZW5hbWUuCisgICAgICAgKiAgQHBhcmFtICBtb2RlICBPcGVuIGZpbGUgaW4gc3BlY2lmaWVkIG1vZGUgKHNlZSBzdGQ6Omlvc19iYXNlKS4KKyAgICAgICAqCisgICAgICAgKiAgVGlwOiAgV2hlbiB1c2luZyBzdGQ6OnN0cmluZyB0byBob2xkIHRoZSBmaWxlbmFtZSwgeW91IG11c3QgdXNlCisgICAgICAgKiAgLmNfc3RyKCkgYmVmb3JlIHBhc3NpbmcgaXQgdG8gdGhpcyBjb25zdHJ1Y3Rvci4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGJhc2ljX2ZzdHJlYW0oY29uc3QgY2hhciogX19zLAorCQkgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCisgICAgICA6IF9faW9zdHJlYW1fdHlwZShOVUxMKSwgX01fZmlsZWJ1ZigpCisgICAgICB7CisJdGhpcy0+aW5pdCgmX01fZmlsZWJ1Zik7CisJdGhpcy0+b3BlbihfX3MsIF9fbW9kZSk7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDcmVhdGUgYW4gaW5wdXQvb3V0cHV0IGZpbGUgc3RyZWFtLgorICAgICAgICogIEBwYXJhbSAgcyAgTnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBmaWxlbmFtZS4KKyAgICAgICAqICBAcGFyYW0gIG1vZGUgIE9wZW4gZmlsZSBpbiBzcGVjaWZpZWQgbW9kZSAoc2VlIHN0ZDo6aW9zX2Jhc2UpLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgYmFzaWNfZnN0cmVhbShjb25zdCBzdGQ6OnN0cmluZyYgX19zLAorCQkgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCisgICAgICA6IF9faW9zdHJlYW1fdHlwZShOVUxMKSwgX01fZmlsZWJ1ZigpCisgICAgICB7CisJdGhpcy0+aW5pdCgmX01fZmlsZWJ1Zik7CisJdGhpcy0+b3BlbihfX3MsIF9fbW9kZSk7CisgICAgICB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBUaGUgZGVzdHJ1Y3RvciBkb2VzIG5vdGhpbmcuCisgICAgICAgKgorICAgICAgICogIFRoZSBmaWxlIGlzIGNsb3NlZCBieSB0aGUgZmlsZWJ1ZiBvYmplY3QsIG5vdCB0aGUgZm9ybWF0dGluZworICAgICAgICogIHN0cmVhbS4KKyAgICAgICAqLworICAgICAgfmJhc2ljX2ZzdHJlYW0oKQorICAgICAgeyB9CisKKyAgICAgIC8vIE1lbWJlcnM6CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFjY2Vzc2luZyB0aGUgdW5kZXJseWluZyBidWZmZXIuCisgICAgICAgKiAgQHJldHVybiAgVGhlIGN1cnJlbnQgYmFzaWNfZmlsZWJ1ZiBidWZmZXIuCisgICAgICAgKgorICAgICAgICogIFRoaXMgaGlkZXMgYm90aCBzaWduYXR1cmVzIG9mIHN0ZDo6YmFzaWNfaW9zOjpyZGJ1ZigpLgorICAgICAgICovCisgICAgICBfX2ZpbGVidWZfdHlwZSoKKyAgICAgIHJkYnVmKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8X19maWxlYnVmX3R5cGUqPigmX01fZmlsZWJ1Zik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBXcmFwcGVyIHRvIHRlc3QgZm9yIGFuIG9wZW4gZmlsZS4KKyAgICAgICAqICBAcmV0dXJuICBAYyByZGJ1ZigpLT5pc19vcGVuKCkKKyAgICAgICAqLworICAgICAgYm9vbAorICAgICAgaXNfb3BlbigpCisgICAgICB7IHJldHVybiBfTV9maWxlYnVmLmlzX29wZW4oKTsgfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAzNjUuIExhY2sgb2YgY29uc3QtcXVhbGlmaWNhdGlvbiBpbiBjbGF1c2UgMjcKKyAgICAgIGJvb2wKKyAgICAgIGlzX29wZW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZmlsZWJ1Zi5pc19vcGVuKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBPcGVucyBhbiBleHRlcm5hbCBmaWxlLgorICAgICAgICogIEBwYXJhbSAgcyAgVGhlIG5hbWUgb2YgdGhlIGZpbGUuCisgICAgICAgKiAgQHBhcmFtICBtb2RlICBUaGUgb3BlbiBtb2RlIGZsYWdzLgorICAgICAgICoKKyAgICAgICAqICBDYWxscyBAYyBzdGQ6OmJhc2ljX2ZpbGVidWY6Om9wZW4ocyxtb2RlKS4gIElmIHRoYXQKKyAgICAgICAqICBmdW5jdGlvbiBmYWlscywgQGMgZmFpbGJpdCBpcyBzZXQgaW4gdGhlIHN0cmVhbSdzIGVycm9yIHN0YXRlLgorICAgICAgICoKKyAgICAgICAqICBUaXA6ICBXaGVuIHVzaW5nIHN0ZDo6c3RyaW5nIHRvIGhvbGQgdGhlIGZpbGVuYW1lLCB5b3UgbXVzdCB1c2UKKyAgICAgICAqICAuY19zdHIoKSBiZWZvcmUgcGFzc2luZyBpdCB0byB0aGlzIGNvbnN0cnVjdG9yLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBvcGVuKGNvbnN0IGNoYXIqIF9fcywKKwkgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKKyAgICAgIHsKKwlpZiAoIV9NX2ZpbGVidWYub3BlbihfX3MsIF9fbW9kZSkpCisJICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CisJZWxzZQorCSAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCSAgLy8gNDA5LiBDbG9zaW5nIGFuIGZzdHJlYW0gc2hvdWxkIGNsZWFyIGVycm9yIHN0YXRlCisJICB0aGlzLT5jbGVhcigpOworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgT3BlbnMgYW4gZXh0ZXJuYWwgZmlsZS4KKyAgICAgICAqICBAcGFyYW0gIHMgIFRoZSBuYW1lIG9mIHRoZSBmaWxlLgorICAgICAgICogIEBwYXJhbSAgbW9kZSAgVGhlIG9wZW4gbW9kZSBmbGFncy4KKyAgICAgICAqCisgICAgICAgKiAgQ2FsbHMgQGMgc3RkOjpiYXNpY19maWxlYnVmOjpvcGVuKHMsbW9kZSkuICBJZiB0aGF0CisgICAgICAgKiAgZnVuY3Rpb24gZmFpbHMsIEBjIGZhaWxiaXQgaXMgc2V0IGluIHRoZSBzdHJlYW0ncyBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgb3Blbihjb25zdCBzdGQ6OnN0cmluZyYgX19zLAorCSAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQorICAgICAgeworCWlmICghX01fZmlsZWJ1Zi5vcGVuKF9fcywgX19tb2RlKSkKKwkgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKKwllbHNlCisJICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJICAvLyA0MDkuIENsb3NpbmcgYW4gZnN0cmVhbSBzaG91bGQgY2xlYXIgZXJyb3Igc3RhdGUKKwkgIHRoaXMtPmNsZWFyKCk7CisgICAgICB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDbG9zZSB0aGUgZmlsZS4KKyAgICAgICAqCisgICAgICAgKiAgQ2FsbHMgQGMgc3RkOjpiYXNpY19maWxlYnVmOjpjbG9zZSgpLiAgSWYgdGhhdCBmdW5jdGlvbgorICAgICAgICogIGZhaWxzLCBAYyBmYWlsYml0IGlzIHNldCBpbiB0aGUgc3RyZWFtJ3MgZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGNsb3NlKCkKKyAgICAgIHsKKwlpZiAoIV9NX2ZpbGVidWYuY2xvc2UoKSkKKwkgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKKyAgICAgIH0KKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNpZm5kZWYgX0dMSUJDWFhfRVhQT1JUX1RFTVBMQVRFCisjIGluY2x1ZGUgPGJpdHMvZnN0cmVhbS50Y2M+CisjZW5kaWYKKworI2VuZGlmIC8qIF9HTElCQ1hYX0ZTVFJFQU0gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZnVuY3Rpb25hbCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvZnVuY3Rpb25hbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWQ0YmVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9mdW5jdGlvbmFsCkBAIC0wLDAgKzEsMjIyNCBAQAorLy8gPGZ1bmN0aW9uYWw+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NworICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICovCisKKy8qKiBAZmlsZSBpbmNsdWRlL2Z1bmN0aW9uYWwKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfRlVOQ1RJT05BTAorI2RlZmluZSBfR0xJQkNYWF9GVU5DVElPTkFMIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9mdW5jdGlvbi5oPgorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKworI2luY2x1ZGUgPHR5cGVpbmZvPgorI2luY2x1ZGUgPG5ldz4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDxiaXRzL2Z1bmN0ZXhjZXB0Lmg+CisjaW5jbHVkZSA8Yml0cy9mdW5jdGlvbmFsX2hhc2guaD4KKworbmFtZXNwYWNlIHN0ZAoreworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTWVtYmVyUG9pbnRlcj4KKyAgICBjbGFzcyBfTWVtX2ZuOworCisgIC8qKgorICAgKiAgQWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIF9IYXNfcmVzdWx0X3R5cGUsIHdoaWNoIHVzZXMgU0ZJTkFFIHRvCisgICAqICBkZXRlcm1pbmUgaWYgdGhlIHR5cGUgX1RwIGhhcyBhIHB1YmxpY2x5LWFjY2Vzc2libGUgbWVtYmVyIHR5cGUKKyAgICogIHJlc3VsdF90eXBlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgX0hhc19yZXN1bHRfdHlwZV9oZWxwZXIgOiBfX3NmaW5hZV90eXBlcworICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICAgICAgc3RydWN0IF9XcmFwX3R5cGUKKwl7IH07CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICAgICAgc3RhdGljIF9fb25lIF9fdGVzdChfV3JhcF90eXBlPHR5cGVuYW1lIF9VcDo6cmVzdWx0X3R5cGU+Kik7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICAgICAgc3RhdGljIF9fdHdvIF9fdGVzdCguLi4pOworCisgICAgcHVibGljOgorICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBzaXplb2YoX190ZXN0PF9UcD4oMCkpID09IDE7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9IYXNfcmVzdWx0X3R5cGUKKyAgICA6IGludGVncmFsX2NvbnN0YW50PGJvb2wsCisJICAgICAgX0hhc19yZXN1bHRfdHlwZV9oZWxwZXI8dHlwZW5hbWUgcmVtb3ZlX2N2PF9UcD46OnR5cGU+Ojp2YWx1ZT4KKyAgICB7IH07CisKKyAgLy8vIElmIHdlIGhhdmUgZm91bmQgYSByZXN1bHRfdHlwZSwgZXh0cmFjdCBpdC4KKyAgdGVtcGxhdGU8Ym9vbCBfSGFzX3Jlc3VsdF90eXBlLCB0eXBlbmFtZSBfRnVuY3Rvcj4KKyAgICBzdHJ1Y3QgX01heWJlX2dldF9yZXN1bHRfdHlwZQorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3Rvcj4KKyAgICBzdHJ1Y3QgX01heWJlX2dldF9yZXN1bHRfdHlwZTx0cnVlLCBfRnVuY3Rvcj4KKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9GdW5jdG9yOjpyZXN1bHRfdHlwZSByZXN1bHRfdHlwZTsKKyAgICB9OworCisgIC8qKgorICAgKiAgQmFzZSBjbGFzcyBmb3IgYW55IGZ1bmN0aW9uIG9iamVjdCB0aGF0IGhhcyBhIHdlYWsgcmVzdWx0IHR5cGUsIGFzCisgICAqICBkZWZpbmVkIGluIDMuMy8zIG9mIFRSMS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3I+CisgICAgc3RydWN0IF9XZWFrX3Jlc3VsdF90eXBlX2ltcGwKKyAgICA6IF9NYXliZV9nZXRfcmVzdWx0X3R5cGU8X0hhc19yZXN1bHRfdHlwZTxfRnVuY3Rvcj46OnZhbHVlLCBfRnVuY3Rvcj4KKyAgICB7IH07CisKKyAgLy8vIFJldHJpZXZlIHRoZSByZXN1bHQgdHlwZSBmb3IgYSBmdW5jdGlvbiB0eXBlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+IAorICAgIHN0cnVjdCBfV2Vha19yZXN1bHRfdHlwZV9pbXBsPF9SZXMoX0FyZ1R5cGVzLi4uKT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9SZXMgcmVzdWx0X3R5cGU7CisgICAgfTsKKworICAvLy8gUmV0cmlldmUgdGhlIHJlc3VsdCB0eXBlIGZvciBhIGZ1bmN0aW9uIHJlZmVyZW5jZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPiAKKyAgICBzdHJ1Y3QgX1dlYWtfcmVzdWx0X3R5cGVfaW1wbDxfUmVzKCYpKF9BcmdUeXBlcy4uLik+CisgICAgeworICAgICAgdHlwZWRlZiBfUmVzIHJlc3VsdF90eXBlOworICAgIH07CisKKyAgLy8vIFJldHJpZXZlIHRoZSByZXN1bHQgdHlwZSBmb3IgYSBmdW5jdGlvbiBwb2ludGVyLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+IAorICAgIHN0cnVjdCBfV2Vha19yZXN1bHRfdHlwZV9pbXBsPF9SZXMoKikoX0FyZ1R5cGVzLi4uKT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9SZXMgcmVzdWx0X3R5cGU7CisgICAgfTsKKworICAvLy8gUmV0cmlldmUgcmVzdWx0IHR5cGUgZm9yIGEgbWVtYmVyIGZ1bmN0aW9uIHBvaW50ZXIuIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfQ2xhc3MsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4gCisgICAgc3RydWN0IF9XZWFrX3Jlc3VsdF90eXBlX2ltcGw8X1JlcyAoX0NsYXNzOjoqKShfQXJnVHlwZXMuLi4pPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1JlcyByZXN1bHRfdHlwZTsKKyAgICB9OworCisgIC8vLyBSZXRyaWV2ZSByZXN1bHQgdHlwZSBmb3IgYSBjb25zdCBtZW1iZXIgZnVuY3Rpb24gcG9pbnRlci4gCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9DbGFzcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPiAKKyAgICBzdHJ1Y3QgX1dlYWtfcmVzdWx0X3R5cGVfaW1wbDxfUmVzIChfQ2xhc3M6OiopKF9BcmdUeXBlcy4uLikgY29uc3Q+CisgICAgeworICAgICAgdHlwZWRlZiBfUmVzIHJlc3VsdF90eXBlOworICAgIH07CisKKyAgLy8vIFJldHJpZXZlIHJlc3VsdCB0eXBlIGZvciBhIHZvbGF0aWxlIG1lbWJlciBmdW5jdGlvbiBwb2ludGVyLiAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0NsYXNzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+IAorICAgIHN0cnVjdCBfV2Vha19yZXN1bHRfdHlwZV9pbXBsPF9SZXMgKF9DbGFzczo6KikoX0FyZ1R5cGVzLi4uKSB2b2xhdGlsZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9SZXMgcmVzdWx0X3R5cGU7CisgICAgfTsKKworICAvLy8gUmV0cmlldmUgcmVzdWx0IHR5cGUgZm9yIGEgY29uc3Qgdm9sYXRpbGUgbWVtYmVyIGZ1bmN0aW9uIHBvaW50ZXIuIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfQ2xhc3MsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4gCisgICAgc3RydWN0IF9XZWFrX3Jlc3VsdF90eXBlX2ltcGw8X1JlcyAoX0NsYXNzOjoqKShfQXJnVHlwZXMuLi4pY29uc3Qgdm9sYXRpbGU+CisgICAgeworICAgICAgdHlwZWRlZiBfUmVzIHJlc3VsdF90eXBlOworICAgIH07CisKKyAgLyoqCisgICAqICBTdHJpcCB0b3AtbGV2ZWwgY3YtcXVhbGlmaWVycyBmcm9tIHRoZSBmdW5jdGlvbiBvYmplY3QgYW5kIGxldAorICAgKiAgX1dlYWtfcmVzdWx0X3R5cGVfaW1wbCBwZXJmb3JtIHRoZSByZWFsIHdvcmsuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yPgorICAgIHN0cnVjdCBfV2Vha19yZXN1bHRfdHlwZQorICAgIDogX1dlYWtfcmVzdWx0X3R5cGVfaW1wbDx0eXBlbmFtZSByZW1vdmVfY3Y8X0Z1bmN0b3I+Ojp0eXBlPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2lnbmF0dXJlPgorICAgIGNsYXNzIHJlc3VsdF9vZjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3RvciwgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIHN0cnVjdCByZXN1bHRfb2Y8X0Z1bmN0b3IoX0FyZ1R5cGVzLi4uKT4KKyAgICB7CisgICAgICB0eXBlZGVmCisgICAgICAgIGRlY2x0eXBlKCBzdGQ6OmRlY2x2YWw8X0Z1bmN0b3I+KCkoc3RkOjpkZWNsdmFsPF9BcmdUeXBlcz4oKS4uLikgKQorICAgICAgICB0eXBlOworICAgIH07CisKKyAgLy8vIERldGVybWluZXMgaWYgdGhlIHR5cGUgX1RwIGRlcml2ZXMgZnJvbSB1bmFyeV9mdW5jdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfRGVyaXZlc19mcm9tX3VuYXJ5X2Z1bmN0aW9uIDogX19zZmluYWVfdHlwZXMKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1Jlcz4KKyAgICAgICAgc3RhdGljIF9fb25lIF9fdGVzdChjb25zdCB2b2xhdGlsZSB1bmFyeV9mdW5jdGlvbjxfVDEsIF9SZXM+Kik7CisKKyAgICAgIC8vIEl0J3MgdGVtcHRpbmcgdG8gY2hhbmdlICIuLi4iIHRvIGNvbnN0IHZvbGF0aWxlIHZvaWQqLCBidXQKKyAgICAgIC8vIHRoYXQgZmFpbHMgd2hlbiBfVHAgaXMgYSBmdW5jdGlvbiB0eXBlLgorICAgICAgc3RhdGljIF9fdHdvIF9fdGVzdCguLi4pOworCisgICAgcHVibGljOgorICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBzaXplb2YoX190ZXN0KChfVHAqKTApKSA9PSAxOworICAgIH07CisKKyAgLy8vIERldGVybWluZXMgaWYgdGhlIHR5cGUgX1RwIGRlcml2ZXMgZnJvbSBiaW5hcnlfZnVuY3Rpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX0Rlcml2ZXNfZnJvbV9iaW5hcnlfZnVuY3Rpb24gOiBfX3NmaW5hZV90eXBlcworICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDIsIHR5cGVuYW1lIF9SZXM+CisgICAgICAgIHN0YXRpYyBfX29uZSBfX3Rlc3QoY29uc3Qgdm9sYXRpbGUgYmluYXJ5X2Z1bmN0aW9uPF9UMSwgX1QyLCBfUmVzPiopOworCisgICAgICAvLyBJdCdzIHRlbXB0aW5nIHRvIGNoYW5nZSAiLi4uIiB0byBjb25zdCB2b2xhdGlsZSB2b2lkKiwgYnV0CisgICAgICAvLyB0aGF0IGZhaWxzIHdoZW4gX1RwIGlzIGEgZnVuY3Rpb24gdHlwZS4KKyAgICAgIHN0YXRpYyBfX3R3byBfX3Rlc3QoLi4uKTsKKworICAgIHB1YmxpYzoKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gc2l6ZW9mKF9fdGVzdCgoX1RwKikwKSkgPT0gMTsKKyAgICB9OworCisgIC8vLyBUdXJucyBhIGZ1bmN0aW9uIHR5cGUgaW50byBhIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJvb2wgX0lzRnVuY3Rpb25UeXBlID0gaXNfZnVuY3Rpb248X1RwPjo6dmFsdWU+CisgICAgc3RydWN0IF9GdW5jdGlvbl90b19mdW5jdGlvbl9wb2ludGVyCisgICAgeworICAgICAgdHlwZWRlZiBfVHAgdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX0Z1bmN0aW9uX3RvX2Z1bmN0aW9uX3BvaW50ZXI8X1RwLCB0cnVlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1RwKiB0eXBlOworICAgIH07CisKKyAgLyoqCisgICAqIEludm9rZSBhIGZ1bmN0aW9uIG9iamVjdCwgd2hpY2ggbWF5IGJlIGVpdGhlciBhIG1lbWJlciBwb2ludGVyIG9yIGEKKyAgICogZnVuY3Rpb24gb2JqZWN0LiBUaGUgZmlyc3QgcGFyYW1ldGVyIHdpbGwgdGVsbCB3aGljaC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICBpbmxpbmUKKyAgICB0eXBlbmFtZSBlbmFibGVfaWY8CisgICAgICAgICAgICAgKCFpc19tZW1iZXJfcG9pbnRlcjxfRnVuY3Rvcj46OnZhbHVlCisgICAgICAgICAgICAgICYmICFpc19mdW5jdGlvbjxfRnVuY3Rvcj46OnZhbHVlCisgICAgICAgICAgICAgICYmICFpc19mdW5jdGlvbjx0eXBlbmFtZSByZW1vdmVfcG9pbnRlcjxfRnVuY3Rvcj46OnR5cGU+Ojp2YWx1ZSksCisgICAgICAgICAgICAgdHlwZW5hbWUgcmVzdWx0X29mPF9GdW5jdG9yKF9BcmdzLi4uKT46OnR5cGUKKyAgICAgICAgICAgPjo6dHlwZQorICAgIF9faW52b2tlKF9GdW5jdG9yJiBfX2YsIF9BcmdzJiYuLi4gX19hcmdzKQorICAgIHsKKyAgICAgIHJldHVybiBfX2Yoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKyAgICB9CisKKyAgLy8gVG8gcGljayB1cCBmdW5jdGlvbiByZWZlcmVuY2VzICh0aGF0IHdpbGwgYmVjb21lIGZ1bmN0aW9uIHBvaW50ZXJzKQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3RvciwgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgaW5saW5lCisgICAgdHlwZW5hbWUgZW5hYmxlX2lmPAorICAgICAgICAgICAgIChpc19wb2ludGVyPF9GdW5jdG9yPjo6dmFsdWUKKyAgICAgICAgICAgICAgJiYgaXNfZnVuY3Rpb248dHlwZW5hbWUgcmVtb3ZlX3BvaW50ZXI8X0Z1bmN0b3I+Ojp0eXBlPjo6dmFsdWUpLAorICAgICAgICAgICAgIHR5cGVuYW1lIHJlc3VsdF9vZjxfRnVuY3RvcihfQXJncy4uLik+Ojp0eXBlCisgICAgICAgICAgID46OnR5cGUKKyAgICBfX2ludm9rZShfRnVuY3RvciBfX2YsIF9BcmdzJiYuLi4gX19hcmdzKQorICAgIHsKKyAgICAgIHJldHVybiBfX2Yoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBLbm93aW5nIHdoaWNoIG9mIHVuYXJ5X2Z1bmN0aW9uIGFuZCBiaW5hcnlfZnVuY3Rpb24gX1RwIGRlcml2ZXMKKyAgICogIGZyb20sIGRlcml2ZXMgZnJvbSB0aGUgc2FtZSBhbmQgZW5zdXJlcyB0aGF0IHJlZmVyZW5jZV93cmFwcGVyCisgICAqICB3aWxsIGhhdmUgYSB3ZWFrIHJlc3VsdCB0eXBlLiBTZWUgY2FzZXMgYmVsb3cuCisgICAqLworICB0ZW1wbGF0ZTxib29sIF9VbmFyeSwgYm9vbCBfQmluYXJ5LCB0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlX2ltcGw7CisKKyAgLy8gTm90IGEgdW5hcnlfZnVuY3Rpb24gb3IgYmluYXJ5X2Z1bmN0aW9uLCBzbyB0cnkgYSB3ZWFrIHJlc3VsdCB0eXBlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlX2ltcGw8ZmFsc2UsIGZhbHNlLCBfVHA+CisgICAgOiBfV2Vha19yZXN1bHRfdHlwZTxfVHA+CisgICAgeyB9OworCisgIC8vIHVuYXJ5X2Z1bmN0aW9uIGJ1dCBub3QgYmluYXJ5X2Z1bmN0aW9uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2VfaW1wbDx0cnVlLCBmYWxzZSwgX1RwPgorICAgIDogdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1RwOjphcmd1bWVudF90eXBlLAorCQkgICAgIHR5cGVuYW1lIF9UcDo6cmVzdWx0X3R5cGU+CisgICAgeyB9OworCisgIC8vIGJpbmFyeV9mdW5jdGlvbiBidXQgbm90IHVuYXJ5X2Z1bmN0aW9uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2VfaW1wbDxmYWxzZSwgdHJ1ZSwgX1RwPgorICAgIDogYmluYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9UcDo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKKwkJICAgICAgdHlwZW5hbWUgX1RwOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKKwkJICAgICAgdHlwZW5hbWUgX1RwOjpyZXN1bHRfdHlwZT4KKyAgICB7IH07CisKKyAgLy8gQm90aCB1bmFyeV9mdW5jdGlvbiBhbmQgYmluYXJ5X2Z1bmN0aW9uLiBJbXBvcnQgcmVzdWx0X3R5cGUgdG8KKyAgLy8gYXZvaWQgY29uZmxpY3RzLgorICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZV9pbXBsPHRydWUsIHRydWUsIF9UcD4KKyAgICA6IHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9UcDo6YXJndW1lbnRfdHlwZSwKKwkJICAgICB0eXBlbmFtZSBfVHA6OnJlc3VsdF90eXBlPiwKKyAgICAgIGJpbmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfVHA6OmZpcnN0X2FyZ3VtZW50X3R5cGUsCisJCSAgICAgIHR5cGVuYW1lIF9UcDo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCisJCSAgICAgIHR5cGVuYW1lIF9UcDo6cmVzdWx0X3R5cGU+CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHA6OnJlc3VsdF90eXBlIHJlc3VsdF90eXBlOworICAgIH07CisKKyAgLyoqCisgICAqICBEZXJpdmVzIGZyb20gdW5hcnlfZnVuY3Rpb24gb3IgYmluYXJ5X2Z1bmN0aW9uIHdoZW4gaXQKKyAgICogIGNhbi4gU3BlY2lhbGl6YXRpb25zIGhhbmRsZSBhbGwgb2YgdGhlIGVhc3kgY2FzZXMuIFRoZSBwcmltYXJ5CisgICAqICB0ZW1wbGF0ZSBkZXRlcm1pbmVzIHdoYXQgdG8gZG8gd2l0aCBhIGNsYXNzIHR5cGUsIHdoaWNoIG1heQorICAgKiAgZGVyaXZlIGZyb20gYm90aCB1bmFyeV9mdW5jdGlvbiBhbmQgYmluYXJ5X2Z1bmN0aW9uLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlCisgICAgOiBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZV9pbXBsPAorICAgICAgX0Rlcml2ZXNfZnJvbV91bmFyeV9mdW5jdGlvbjxfVHA+Ojp2YWx1ZSwKKyAgICAgIF9EZXJpdmVzX2Zyb21fYmluYXJ5X2Z1bmN0aW9uPF9UcD46OnZhbHVlLAorICAgICAgX1RwPgorICAgIHsgfTsKKworICAvLyAtIGEgZnVuY3Rpb24gdHlwZSAodW5hcnkpCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9UMT4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2U8X1JlcyhfVDEpPgorICAgIDogdW5hcnlfZnVuY3Rpb248X1QxLCBfUmVzPgorICAgIHsgfTsKKworICAvLyAtIGEgZnVuY3Rpb24gdHlwZSAoYmluYXJ5KQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9UMj4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2U8X1JlcyhfVDEsIF9UMik+CisgICAgOiBiaW5hcnlfZnVuY3Rpb248X1QxLCBfVDIsIF9SZXM+CisgICAgeyB9OworCisgIC8vIC0gYSBmdW5jdGlvbiBwb2ludGVyIHR5cGUgKHVuYXJ5KQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfVDE+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlPF9SZXMoKikoX1QxKT4KKyAgICA6IHVuYXJ5X2Z1bmN0aW9uPF9UMSwgX1Jlcz4KKyAgICB7IH07CisKKyAgLy8gLSBhIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZSAoYmluYXJ5KQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9UMj4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2U8X1JlcygqKShfVDEsIF9UMik+CisgICAgOiBiaW5hcnlfZnVuY3Rpb248X1QxLCBfVDIsIF9SZXM+CisgICAgeyB9OworCisgIC8vIC0gYSBwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbiB0eXBlICh1bmFyeSwgbm8gcXVhbGlmaWVycykKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX1QxPgorICAgIHN0cnVjdCBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZTxfUmVzIChfVDE6OiopKCk+CisgICAgOiB1bmFyeV9mdW5jdGlvbjxfVDEqLCBfUmVzPgorICAgIHsgfTsKKworICAvLyAtIGEgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb24gdHlwZSAoYmluYXJ5LCBubyBxdWFsaWZpZXJzKQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9UMj4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2U8X1JlcyAoX1QxOjoqKShfVDIpPgorICAgIDogYmluYXJ5X2Z1bmN0aW9uPF9UMSosIF9UMiwgX1Jlcz4KKyAgICB7IH07CisKKyAgLy8gLSBhIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9uIHR5cGUgKHVuYXJ5LCBjb25zdCkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX1QxPgorICAgIHN0cnVjdCBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZTxfUmVzIChfVDE6OiopKCkgY29uc3Q+CisgICAgOiB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVDEqLCBfUmVzPgorICAgIHsgfTsKKworICAvLyAtIGEgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb24gdHlwZSAoYmluYXJ5LCBjb25zdCkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlPF9SZXMgKF9UMTo6KikoX1QyKSBjb25zdD4KKyAgICA6IGJpbmFyeV9mdW5jdGlvbjxjb25zdCBfVDEqLCBfVDIsIF9SZXM+CisgICAgeyB9OworCisgIC8vIC0gYSBwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbiB0eXBlICh1bmFyeSwgdm9sYXRpbGUpCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9UMT4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2U8X1JlcyAoX1QxOjoqKSgpIHZvbGF0aWxlPgorICAgIDogdW5hcnlfZnVuY3Rpb248dm9sYXRpbGUgX1QxKiwgX1Jlcz4KKyAgICB7IH07CisKKyAgLy8gLSBhIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9uIHR5cGUgKGJpbmFyeSwgdm9sYXRpbGUpCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyPgorICAgIHN0cnVjdCBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZTxfUmVzIChfVDE6OiopKF9UMikgdm9sYXRpbGU+CisgICAgOiBiaW5hcnlfZnVuY3Rpb248dm9sYXRpbGUgX1QxKiwgX1QyLCBfUmVzPgorICAgIHsgfTsKKworICAvLyAtIGEgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb24gdHlwZSAodW5hcnksIGNvbnN0IHZvbGF0aWxlKQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfVDE+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlPF9SZXMgKF9UMTo6KikoKSBjb25zdCB2b2xhdGlsZT4KKyAgICA6IHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IHZvbGF0aWxlIF9UMSosIF9SZXM+CisgICAgeyB9OworCisgIC8vIC0gYSBwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbiB0eXBlIChiaW5hcnksIGNvbnN0IHZvbGF0aWxlKQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9UMj4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2U8X1JlcyAoX1QxOjoqKShfVDIpIGNvbnN0IHZvbGF0aWxlPgorICAgIDogYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IHZvbGF0aWxlIF9UMSosIF9UMiwgX1Jlcz4KKyAgICB7IH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgUHJpbWFyeSBjbGFzcyB0ZW1wbGF0ZSBmb3IgcmVmZXJlbmNlX3dyYXBwZXIuCisgICAqICBAaW5ncm91cCBmdW5jdG9ycworICAgKiAgQHsKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyByZWZlcmVuY2Vfd3JhcHBlcgorICAgIDogcHVibGljIF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlPHR5cGVuYW1lIHJlbW92ZV9jdjxfVHA+Ojp0eXBlPgorICAgIHsKKyAgICAgIC8vIElmIF9UcCBpcyBhIGZ1bmN0aW9uIHR5cGUsIHdlIGNhbid0IGZvcm0gcmVzdWx0X29mPF9UcCguLi4pPiwKKyAgICAgIC8vIHNvIHR1cm4gaXQgaW50byBhIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZS4KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Z1bmN0aW9uX3RvX2Z1bmN0aW9uX3BvaW50ZXI8X1RwPjo6dHlwZQorICAgICAgICBfTV9mdW5jX3R5cGU7CisKKyAgICAgIF9UcCogX01fZGF0YTsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9UcCB0eXBlOworCisgICAgICByZWZlcmVuY2Vfd3JhcHBlcihfVHAmIF9faW5kYXRhKTogX01fZGF0YSgmX19pbmRhdGEpCisgICAgICB7IH0KKworICAgICAgcmVmZXJlbmNlX3dyYXBwZXIoX1RwJiYpID0gZGVsZXRlOworCisgICAgICByZWZlcmVuY2Vfd3JhcHBlcihjb25zdCByZWZlcmVuY2Vfd3JhcHBlcjxfVHA+JiBfX2lucmVmKToKKyAgICAgIF9NX2RhdGEoX19pbnJlZi5fTV9kYXRhKQorICAgICAgeyB9CisKKyAgICAgIHJlZmVyZW5jZV93cmFwcGVyJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHJlZmVyZW5jZV93cmFwcGVyPF9UcD4mIF9faW5yZWYpCisgICAgICB7CisgICAgICAgIF9NX2RhdGEgPSBfX2lucmVmLl9NX2RhdGE7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgb3BlcmF0b3IgX1RwJigpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5nZXQoKTsgfQorCisgICAgICBfVHAmCisgICAgICBnZXQoKSBjb25zdAorICAgICAgeyByZXR1cm4gKl9NX2RhdGE7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHR5cGVuYW1lIHJlc3VsdF9vZjxfTV9mdW5jX3R5cGUoX0FyZ3MuLi4pPjo6dHlwZQorICAgICAgICBvcGVyYXRvcigpKF9BcmdzJiYuLi4gX19hcmdzKSBjb25zdAorICAgICAgICB7CisJICByZXR1cm4gX19pbnZva2UoZ2V0KCksIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJfQorICAgIH07CisKKworICAvLy8gRGVub3RlcyBhIHJlZmVyZW5jZSBzaG91bGQgYmUgdGFrZW4gdG8gYSB2YXJpYWJsZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSByZWZlcmVuY2Vfd3JhcHBlcjxfVHA+CisgICAgcmVmKF9UcCYgX190KQorICAgIHsgcmV0dXJuIHJlZmVyZW5jZV93cmFwcGVyPF9UcD4oX190KTsgfQorCisgIC8vLyBEZW5vdGVzIGEgY29uc3QgcmVmZXJlbmNlIHNob3VsZCBiZSB0YWtlbiB0byBhIHZhcmlhYmxlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHJlZmVyZW5jZV93cmFwcGVyPGNvbnN0IF9UcD4KKyAgICBjcmVmKGNvbnN0IF9UcCYgX190KQorICAgIHsgcmV0dXJuIHJlZmVyZW5jZV93cmFwcGVyPGNvbnN0IF9UcD4oX190KTsgfQorCisgIC8vLyBQYXJ0aWFsIHNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHJlZmVyZW5jZV93cmFwcGVyPF9UcD4KKyAgICByZWYocmVmZXJlbmNlX3dyYXBwZXI8X1RwPiBfX3QpCisgICAgeyByZXR1cm4gcmVmKF9fdC5nZXQoKSk7IH0KKworICAvLy8gUGFydGlhbCBzcGVjaWFsaXphdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSByZWZlcmVuY2Vfd3JhcHBlcjxjb25zdCBfVHA+CisgICAgY3JlZihyZWZlcmVuY2Vfd3JhcHBlcjxfVHA+IF9fdCkKKyAgICB7IHJldHVybiBjcmVmKF9fdC5nZXQoKSk7IH0KKworICAvLyBAfSBncm91cCBmdW5jdG9ycworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgYm9vbD4KKyAgICBzdHJ1Y3QgX01lbV9mbl9jb25zdF9vcl9ub24KKyAgICB7CisgICAgICB0eXBlZGVmIGNvbnN0IF9UcCYgdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX01lbV9mbl9jb25zdF9vcl9ub248X1RwLCBmYWxzZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9UcCYgdHlwZTsKKyAgICB9OworCisgIC8qKgorICAgKiBEZXJpdmVzIGZyb20gQGMgdW5hcnlfZnVuY3Rpb24gb3IgQGMgYmluYXJ5X2Z1bmN0aW9uLCBvciBwZXJoYXBzCisgICAqIG5vdGhpbmcsIGRlcGVuZGluZyBvbiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBwcm92aWRlZC4gVGhlCisgICAqIHByaW1hcnkgdGVtcGxhdGUgaXMgdGhlIGJhc2lzIGNhc2UsIHdoaWNoIGRlcml2ZXMgbm90aGluZy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4gCisgICAgc3RydWN0IF9NYXliZV91bmFyeV9vcl9iaW5hcnlfZnVuY3Rpb24geyB9OworCisgIC8vLyBEZXJpdmVzIGZyb20gQGMgdW5hcnlfZnVuY3Rpb24sIGFzIGFwcHJvcHJpYXRlLiAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX1QxPiAKKyAgICBzdHJ1Y3QgX01heWJlX3VuYXJ5X29yX2JpbmFyeV9mdW5jdGlvbjxfUmVzLCBfVDE+CisgICAgOiBzdGQ6OnVuYXJ5X2Z1bmN0aW9uPF9UMSwgX1Jlcz4geyB9OworCisgIC8vLyBEZXJpdmVzIGZyb20gQGMgYmluYXJ5X2Z1bmN0aW9uLCBhcyBhcHByb3ByaWF0ZS4gCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyPiAKKyAgICBzdHJ1Y3QgX01heWJlX3VuYXJ5X29yX2JpbmFyeV9mdW5jdGlvbjxfUmVzLCBfVDEsIF9UMj4KKyAgICA6IHN0ZDo6YmluYXJ5X2Z1bmN0aW9uPF9UMSwgX1QyLCBfUmVzPiB7IH07CisKKyAgLy8vIEltcGxlbWVudGF0aW9uIG9mIEBjIG1lbV9mbiBmb3IgbWVtYmVyIGZ1bmN0aW9uIHBvaW50ZXJzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfQ2xhc3MsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBjbGFzcyBfTWVtX2ZuPF9SZXMgKF9DbGFzczo6KikoX0FyZ1R5cGVzLi4uKT4KKyAgICA6IHB1YmxpYyBfTWF5YmVfdW5hcnlfb3JfYmluYXJ5X2Z1bmN0aW9uPF9SZXMsIF9DbGFzcyosIF9BcmdUeXBlcy4uLj4KKyAgICB7CisgICAgICB0eXBlZGVmIF9SZXMgKF9DbGFzczo6Kl9GdW5jdG9yKShfQXJnVHlwZXMuLi4pOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIF9SZXMKKyAgICAgICAgX01fY2FsbChfVHAmIF9fb2JqZWN0LCBjb25zdCB2b2xhdGlsZSBfQ2xhc3MgKiwgCisgICAgICAgICAgICAgICAgX0FyZ1R5cGVzLi4uIF9fYXJncykgY29uc3QKKyAgICAgICAgeyByZXR1cm4gKF9fb2JqZWN0LipfX3BtZikoc3RkOjpmb3J3YXJkPF9BcmdUeXBlcz4oX19hcmdzKS4uLik7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBfUmVzCisgICAgICAgIF9NX2NhbGwoX1RwJiBfX3B0ciwgY29uc3Qgdm9sYXRpbGUgdm9pZCAqLCBfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgICAgICB7IHJldHVybiAoKCpfX3B0cikuKl9fcG1mKShzdGQ6OmZvcndhcmQ8X0FyZ1R5cGVzPihfX2FyZ3MpLi4uKTsgfQorCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfUmVzIHJlc3VsdF90eXBlOworCisgICAgICBleHBsaWNpdCBfTWVtX2ZuKF9GdW5jdG9yIF9fcG1mKSA6IF9fcG1mKF9fcG1mKSB7IH0KKworICAgICAgLy8gSGFuZGxlIG9iamVjdHMKKyAgICAgIF9SZXMKKyAgICAgIG9wZXJhdG9yKCkoX0NsYXNzJiBfX29iamVjdCwgX0FyZ1R5cGVzLi4uIF9fYXJncykgY29uc3QKKyAgICAgIHsgcmV0dXJuIChfX29iamVjdC4qX19wbWYpKHN0ZDo6Zm9yd2FyZDxfQXJnVHlwZXM+KF9fYXJncykuLi4pOyB9CisKKyAgICAgIC8vIEhhbmRsZSBwb2ludGVycworICAgICAgX1JlcworICAgICAgb3BlcmF0b3IoKShfQ2xhc3MqIF9fb2JqZWN0LCBfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgICAgeyByZXR1cm4gKF9fb2JqZWN0LT4qX19wbWYpKHN0ZDo6Zm9yd2FyZDxfQXJnVHlwZXM+KF9fYXJncykuLi4pOyB9CisKKyAgICAgIC8vIEhhbmRsZSBzbWFydCBwb2ludGVycywgcmVmZXJlbmNlcyBhbmQgcG9pbnRlcnMgdG8gZGVyaXZlZAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBfUmVzCisJb3BlcmF0b3IoKShfVHAmIF9fb2JqZWN0LCBfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgcmV0dXJuIF9NX2NhbGwoX19vYmplY3QsICZfX29iamVjdCwKKyAgICAgICAgICAgICAgc3RkOjpmb3J3YXJkPF9BcmdUeXBlcz4oX19hcmdzKS4uLik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICBfRnVuY3RvciBfX3BtZjsKKyAgICB9OworCisgIC8vLyBJbXBsZW1lbnRhdGlvbiBvZiBAYyBtZW1fZm4gZm9yIGNvbnN0IG1lbWJlciBmdW5jdGlvbiBwb2ludGVycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0NsYXNzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgY2xhc3MgX01lbV9mbjxfUmVzIChfQ2xhc3M6OiopKF9BcmdUeXBlcy4uLikgY29uc3Q+CisgICAgOiBwdWJsaWMgX01heWJlX3VuYXJ5X29yX2JpbmFyeV9mdW5jdGlvbjxfUmVzLCBjb25zdCBfQ2xhc3MqLCAKKwkJCQkJICAgICBfQXJnVHlwZXMuLi4+CisgICAgeworICAgICAgdHlwZWRlZiBfUmVzIChfQ2xhc3M6OipfRnVuY3RvcikoX0FyZ1R5cGVzLi4uKSBjb25zdDsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBfUmVzCisgICAgICAgIF9NX2NhbGwoX1RwJiBfX29iamVjdCwgY29uc3Qgdm9sYXRpbGUgX0NsYXNzICosIAorICAgICAgICAgICAgICAgIF9BcmdUeXBlcy4uLiBfX2FyZ3MpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIChfX29iamVjdC4qX19wbWYpKHN0ZDo6Zm9yd2FyZDxfQXJnVHlwZXM+KF9fYXJncykuLi4pOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgX1JlcworICAgICAgICBfTV9jYWxsKF9UcCYgX19wdHIsIGNvbnN0IHZvbGF0aWxlIHZvaWQgKiwgX0FyZ1R5cGVzLi4uIF9fYXJncykgY29uc3QKKyAgICAgICAgeyByZXR1cm4gKCgqX19wdHIpLipfX3BtZikoc3RkOjpmb3J3YXJkPF9BcmdUeXBlcz4oX19hcmdzKS4uLik7IH0KKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1JlcyByZXN1bHRfdHlwZTsKKworICAgICAgZXhwbGljaXQgX01lbV9mbihfRnVuY3RvciBfX3BtZikgOiBfX3BtZihfX3BtZikgeyB9CisKKyAgICAgIC8vIEhhbmRsZSBvYmplY3RzCisgICAgICBfUmVzCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9DbGFzcyYgX19vYmplY3QsIF9BcmdUeXBlcy4uLiBfX2FyZ3MpIGNvbnN0CisgICAgICB7IHJldHVybiAoX19vYmplY3QuKl9fcG1mKShzdGQ6OmZvcndhcmQ8X0FyZ1R5cGVzPihfX2FyZ3MpLi4uKTsgfQorCisgICAgICAvLyBIYW5kbGUgcG9pbnRlcnMKKyAgICAgIF9SZXMKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX0NsYXNzKiBfX29iamVjdCwgX0FyZ1R5cGVzLi4uIF9fYXJncykgY29uc3QKKyAgICAgIHsgcmV0dXJuIChfX29iamVjdC0+Kl9fcG1mKShzdGQ6OmZvcndhcmQ8X0FyZ1R5cGVzPihfX2FyZ3MpLi4uKTsgfQorCisgICAgICAvLyBIYW5kbGUgc21hcnQgcG9pbnRlcnMsIHJlZmVyZW5jZXMgYW5kIHBvaW50ZXJzIHRvIGRlcml2ZWQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgX1JlcyBvcGVyYXRvcigpKF9UcCYgX19vYmplY3QsIF9BcmdUeXBlcy4uLiBfX2FyZ3MpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gX01fY2FsbChfX29iamVjdCwgJl9fb2JqZWN0LAorICAgICAgICAgICAgICBzdGQ6OmZvcndhcmQ8X0FyZ1R5cGVzPihfX2FyZ3MpLi4uKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIF9GdW5jdG9yIF9fcG1mOworICAgIH07CisKKyAgLy8vIEltcGxlbWVudGF0aW9uIG9mIEBjIG1lbV9mbiBmb3Igdm9sYXRpbGUgbWVtYmVyIGZ1bmN0aW9uIHBvaW50ZXJzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfQ2xhc3MsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBjbGFzcyBfTWVtX2ZuPF9SZXMgKF9DbGFzczo6KikoX0FyZ1R5cGVzLi4uKSB2b2xhdGlsZT4KKyAgICA6IHB1YmxpYyBfTWF5YmVfdW5hcnlfb3JfYmluYXJ5X2Z1bmN0aW9uPF9SZXMsIHZvbGF0aWxlIF9DbGFzcyosIAorCQkJCQkgICAgIF9BcmdUeXBlcy4uLj4KKyAgICB7CisgICAgICB0eXBlZGVmIF9SZXMgKF9DbGFzczo6Kl9GdW5jdG9yKShfQXJnVHlwZXMuLi4pIHZvbGF0aWxlOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIF9SZXMKKyAgICAgICAgX01fY2FsbChfVHAmIF9fb2JqZWN0LCBjb25zdCB2b2xhdGlsZSBfQ2xhc3MgKiwgCisgICAgICAgICAgICAgICAgX0FyZ1R5cGVzLi4uIF9fYXJncykgY29uc3QKKyAgICAgICAgeyByZXR1cm4gKF9fb2JqZWN0LipfX3BtZikoc3RkOjpmb3J3YXJkPF9BcmdUeXBlcz4oX19hcmdzKS4uLik7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBfUmVzCisgICAgICAgIF9NX2NhbGwoX1RwJiBfX3B0ciwgY29uc3Qgdm9sYXRpbGUgdm9pZCAqLCBfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgICAgICB7IHJldHVybiAoKCpfX3B0cikuKl9fcG1mKShzdGQ6OmZvcndhcmQ8X0FyZ1R5cGVzPihfX2FyZ3MpLi4uKTsgfQorCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfUmVzIHJlc3VsdF90eXBlOworCisgICAgICBleHBsaWNpdCBfTWVtX2ZuKF9GdW5jdG9yIF9fcG1mKSA6IF9fcG1mKF9fcG1mKSB7IH0KKworICAgICAgLy8gSGFuZGxlIG9iamVjdHMKKyAgICAgIF9SZXMKKyAgICAgIG9wZXJhdG9yKCkodm9sYXRpbGUgX0NsYXNzJiBfX29iamVjdCwgX0FyZ1R5cGVzLi4uIF9fYXJncykgY29uc3QKKyAgICAgIHsgcmV0dXJuIChfX29iamVjdC4qX19wbWYpKHN0ZDo6Zm9yd2FyZDxfQXJnVHlwZXM+KF9fYXJncykuLi4pOyB9CisKKyAgICAgIC8vIEhhbmRsZSBwb2ludGVycworICAgICAgX1JlcworICAgICAgb3BlcmF0b3IoKSh2b2xhdGlsZSBfQ2xhc3MqIF9fb2JqZWN0LCBfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgICAgeyByZXR1cm4gKF9fb2JqZWN0LT4qX19wbWYpKHN0ZDo6Zm9yd2FyZDxfQXJnVHlwZXM+KF9fYXJncykuLi4pOyB9CisKKyAgICAgIC8vIEhhbmRsZSBzbWFydCBwb2ludGVycywgcmVmZXJlbmNlcyBhbmQgcG9pbnRlcnMgdG8gZGVyaXZlZAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBfUmVzCisJb3BlcmF0b3IoKShfVHAmIF9fb2JqZWN0LCBfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgcmV0dXJuIF9NX2NhbGwoX19vYmplY3QsICZfX29iamVjdCwKKyAgICAgICAgICAgICAgc3RkOjpmb3J3YXJkPF9BcmdUeXBlcz4oX19hcmdzKS4uLik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICBfRnVuY3RvciBfX3BtZjsKKyAgICB9OworCisgIC8vLyBJbXBsZW1lbnRhdGlvbiBvZiBAYyBtZW1fZm4gZm9yIGNvbnN0IHZvbGF0aWxlIG1lbWJlciBmdW5jdGlvbiBwb2ludGVycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0NsYXNzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgY2xhc3MgX01lbV9mbjxfUmVzIChfQ2xhc3M6OiopKF9BcmdUeXBlcy4uLikgY29uc3Qgdm9sYXRpbGU+CisgICAgOiBwdWJsaWMgX01heWJlX3VuYXJ5X29yX2JpbmFyeV9mdW5jdGlvbjxfUmVzLCBjb25zdCB2b2xhdGlsZSBfQ2xhc3MqLCAKKwkJCQkJICAgICBfQXJnVHlwZXMuLi4+CisgICAgeworICAgICAgdHlwZWRlZiBfUmVzIChfQ2xhc3M6OipfRnVuY3RvcikoX0FyZ1R5cGVzLi4uKSBjb25zdCB2b2xhdGlsZTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBfUmVzCisgICAgICAgIF9NX2NhbGwoX1RwJiBfX29iamVjdCwgY29uc3Qgdm9sYXRpbGUgX0NsYXNzICosIAorICAgICAgICAgICAgICAgIF9BcmdUeXBlcy4uLiBfX2FyZ3MpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIChfX29iamVjdC4qX19wbWYpKHN0ZDo6Zm9yd2FyZDxfQXJnVHlwZXM+KF9fYXJncykuLi4pOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgX1JlcworICAgICAgICBfTV9jYWxsKF9UcCYgX19wdHIsIGNvbnN0IHZvbGF0aWxlIHZvaWQgKiwgX0FyZ1R5cGVzLi4uIF9fYXJncykgY29uc3QKKyAgICAgICAgeyByZXR1cm4gKCgqX19wdHIpLipfX3BtZikoc3RkOjpmb3J3YXJkPF9BcmdUeXBlcz4oX19hcmdzKS4uLik7IH0KKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1JlcyByZXN1bHRfdHlwZTsKKworICAgICAgZXhwbGljaXQgX01lbV9mbihfRnVuY3RvciBfX3BtZikgOiBfX3BtZihfX3BtZikgeyB9CisKKyAgICAgIC8vIEhhbmRsZSBvYmplY3RzCisgICAgICBfUmVzIAorICAgICAgb3BlcmF0b3IoKShjb25zdCB2b2xhdGlsZSBfQ2xhc3MmIF9fb2JqZWN0LCBfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgICAgeyByZXR1cm4gKF9fb2JqZWN0LipfX3BtZikoc3RkOjpmb3J3YXJkPF9BcmdUeXBlcz4oX19hcmdzKS4uLik7IH0KKworICAgICAgLy8gSGFuZGxlIHBvaW50ZXJzCisgICAgICBfUmVzIAorICAgICAgb3BlcmF0b3IoKShjb25zdCB2b2xhdGlsZSBfQ2xhc3MqIF9fb2JqZWN0LCBfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgICAgeyByZXR1cm4gKF9fb2JqZWN0LT4qX19wbWYpKHN0ZDo6Zm9yd2FyZDxfQXJnVHlwZXM+KF9fYXJncykuLi4pOyB9CisKKyAgICAgIC8vIEhhbmRsZSBzbWFydCBwb2ludGVycywgcmVmZXJlbmNlcyBhbmQgcG9pbnRlcnMgdG8gZGVyaXZlZAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBfUmVzIG9wZXJhdG9yKCkoX1RwJiBfX29iamVjdCwgX0FyZ1R5cGVzLi4uIF9fYXJncykgY29uc3QKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiBfTV9jYWxsKF9fb2JqZWN0LCAmX19vYmplY3QsCisgICAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJnVHlwZXM+KF9fYXJncykuLi4pOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgX0Z1bmN0b3IgX19wbWY7CisgICAgfTsKKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9DbGFzcz4KKyAgICBjbGFzcyBfTWVtX2ZuPF9SZXMgX0NsYXNzOjoqPgorICAgIHsKKyAgICAgIC8vIFRoaXMgYml0IG9mIGdlbml1cyBpcyBkdWUgdG8gUGV0ZXIgRGltb3YsIGltcHJvdmVkIHNsaWdodGx5IGJ5CisgICAgICAvLyBEb3VnbGFzIEdyZWdvci4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgX1JlcyYKKyAgICAgICAgX01fY2FsbChfVHAmIF9fb2JqZWN0LCBfQ2xhc3MgKikgY29uc3QKKyAgICAgICAgeyByZXR1cm4gX19vYmplY3QuKl9fcG07IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgICAgIF9SZXMmCisgICAgICAgIF9NX2NhbGwoX1RwJiBfX29iamVjdCwgX1VwICogY29uc3QgKikgY29uc3QKKyAgICAgICAgeyByZXR1cm4gKCpfX29iamVjdCkuKl9fcG07IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgICAgIGNvbnN0IF9SZXMmCisgICAgICAgIF9NX2NhbGwoX1RwJiBfX29iamVjdCwgY29uc3QgX1VwICogY29uc3QgKikgY29uc3QKKyAgICAgICAgeyByZXR1cm4gKCpfX29iamVjdCkuKl9fcG07IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBjb25zdCBfUmVzJgorICAgICAgICBfTV9jYWxsKF9UcCYgX19vYmplY3QsIGNvbnN0IF9DbGFzcyAqKSBjb25zdAorICAgICAgICB7IHJldHVybiBfX29iamVjdC4qX19wbTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIGNvbnN0IF9SZXMmCisgICAgICAgIF9NX2NhbGwoX1RwJiBfX3B0ciwgY29uc3Qgdm9sYXRpbGUgdm9pZCopIGNvbnN0CisgICAgICAgIHsgcmV0dXJuICgqX19wdHIpLipfX3BtOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RhdGljIF9UcCYgX19nZXRfcmVmKCk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RhdGljIF9fc2ZpbmFlX3R5cGVzOjpfX29uZSBfX2NoZWNrX2NvbnN0KF9UcCYsIF9DbGFzcyopOworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgICAgIHN0YXRpYyBfX3NmaW5hZV90eXBlczo6X19vbmUgX19jaGVja19jb25zdChfVHAmLCBfVXAgKiBjb25zdCAqKTsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgICAgICBzdGF0aWMgX19zZmluYWVfdHlwZXM6Ol9fdHdvIF9fY2hlY2tfY29uc3QoX1RwJiwgY29uc3QgX1VwICogY29uc3QgKik7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIHN0YXRpYyBfX3NmaW5hZV90eXBlczo6X190d28gX19jaGVja19jb25zdChfVHAmLCBjb25zdCBfQ2xhc3MqKTsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RhdGljIF9fc2ZpbmFlX3R5cGVzOjpfX3R3byBfX2NoZWNrX2NvbnN0KF9UcCYsIGNvbnN0IHZvbGF0aWxlIHZvaWQqKTsKKworICAgIHB1YmxpYzoKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RydWN0IF9SZXN1bHRfdHlwZQorCTogX01lbV9mbl9jb25zdF9vcl9ub248X1JlcywKKwkgIChzaXplb2YoX19zZmluYWVfdHlwZXM6Ol9fdHdvKQorCSAgID09IHNpemVvZihfX2NoZWNrX2NvbnN0PF9UcD4oX19nZXRfcmVmPF9UcD4oKSwgKF9UcCopMCkpKT4KKyAgICAgICAgeyB9OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2lnbmF0dXJlPgorICAgICAgICBzdHJ1Y3QgcmVzdWx0OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ1ZNZW0sIHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RydWN0IHJlc3VsdDxfQ1ZNZW0oX1RwKT4KKwk6IHB1YmxpYyBfUmVzdWx0X3R5cGU8X1RwPiB7IH07CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DVk1lbSwgdHlwZW5hbWUgX1RwPgorICAgICAgICBzdHJ1Y3QgcmVzdWx0PF9DVk1lbShfVHAmKT4KKwk6IHB1YmxpYyBfUmVzdWx0X3R5cGU8X1RwPiB7IH07CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfTWVtX2ZuKF9SZXMgX0NsYXNzOjoqX19wbSkgOiBfX3BtKF9fcG0pIHsgfQorCisgICAgICAvLyBIYW5kbGUgb2JqZWN0cworICAgICAgX1JlcyYKKyAgICAgIG9wZXJhdG9yKCkoX0NsYXNzJiBfX29iamVjdCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fb2JqZWN0LipfX3BtOyB9CisKKyAgICAgIGNvbnN0IF9SZXMmCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9DbGFzcyYgX19vYmplY3QpIGNvbnN0CisgICAgICB7IHJldHVybiBfX29iamVjdC4qX19wbTsgfQorCisgICAgICAvLyBIYW5kbGUgcG9pbnRlcnMKKyAgICAgIF9SZXMmCisgICAgICBvcGVyYXRvcigpKF9DbGFzcyogX19vYmplY3QpIGNvbnN0CisgICAgICB7IHJldHVybiBfX29iamVjdC0+Kl9fcG07IH0KKworICAgICAgY29uc3QgX1JlcyYKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX0NsYXNzKiBfX29iamVjdCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fb2JqZWN0LT4qX19wbTsgfQorCisgICAgICAvLyBIYW5kbGUgc21hcnQgcG9pbnRlcnMgYW5kIGRlcml2ZWQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgdHlwZW5hbWUgX1Jlc3VsdF90eXBlPF9UcD46OnR5cGUKKyAgICAgICAgb3BlcmF0b3IoKShfVHAmIF9fdW5rbm93bikgY29uc3QKKyAgICAgICAgeyByZXR1cm4gX01fY2FsbChfX3Vua25vd24sICZfX3Vua25vd24pOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgX1JlcyBfQ2xhc3M6OipfX3BtOworICAgIH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgUmV0dXJucyBhIGZ1bmN0aW9uIG9iamVjdCB0aGF0IGZvcndhcmRzIHRvIHRoZSBtZW1iZXIKKyAgICogIHBvaW50ZXIgQGEgcG0uCisgICAqICBAaW5ncm91cCBmdW5jdG9ycworICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ2xhc3M+CisgICAgaW5saW5lIF9NZW1fZm48X1RwIF9DbGFzczo6Kj4KKyAgICBtZW1fZm4oX1RwIF9DbGFzczo6KiBfX3BtKQorICAgIHsKKyAgICAgIHJldHVybiBfTWVtX2ZuPF9UcCBfQ2xhc3M6Oio+KF9fcG0pOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiB0eXBlIF9UcCBpcyBhIGZ1bmN0aW9uIG9iamVjdAorICAgKiAgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzdWJleHByZXNzaW9uIHdoZW4gZXZhbHVhdGluZyBjYWxscyB0bworICAgKiAgZnVuY3Rpb24gb2JqZWN0cyByZXR1cm5lZCBieSBiaW5kKCkuIFtUUjEgMy42LjFdCisgICAqICBAaW5ncm91cCBiaW5kZXJzCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX2JpbmRfZXhwcmVzc2lvbgorICAgIDogcHVibGljIGZhbHNlX3R5cGUgeyB9OworCisgIC8qKgorICAgKiAgQGJyaWVmIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHR5cGUgX1RwIGlzIGEgcGxhY2Vob2xkZXIgaW4gYQorICAgKiAgYmluZCgpIGV4cHJlc3Npb24gYW5kLCBpZiBzbywgd2hpY2ggcGxhY2Vob2xkZXIgaXQgaXMuIFtUUjEgMy42LjJdCisgICAqICBAaW5ncm91cCBiaW5kZXJzCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX3BsYWNlaG9sZGVyCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8aW50LCAwPgorICAgIHsgfTsKKworICAvLy8gVGhlIHR5cGUgb2YgcGxhY2Vob2xkZXIgb2JqZWN0cyBkZWZpbmVkIGJ5IGxpYnN0ZGMrKy4KKyAgdGVtcGxhdGU8aW50IF9OdW0+IHN0cnVjdCBfUGxhY2Vob2xkZXIgeyB9OworCisgIC8qKiBAbmFtZXNwYWNlIHN0ZDo6cGxhY2Vob2xkZXJzCisgICAqICBAYnJpZWYgSVNPIEMrKyAweCBlbnRpdGllcyBzdWIgbmFtZXNwYWNlIGZvciBmdW5jdGlvbmFsLgorICAgKiAgQGluZ3JvdXAgYmluZGVycworICAgKgorICAgKiAgRGVmaW5lIGEgbGFyZ2UgbnVtYmVyIG9mIHBsYWNlaG9sZGVycy4gVGhlcmUgaXMgbm8gd2F5IHRvCisgICAqICBzaW1wbGlmeSB0aGlzIHdpdGggdmFyaWFkaWMgdGVtcGxhdGVzLCBiZWNhdXNlIHdlJ3JlIGludHJvZHVjaW5nCisgICAqICB1bmlxdWUgbmFtZXMgZm9yIGVhY2guCisgICAqLworICBuYW1lc3BhY2UgcGxhY2Vob2xkZXJzIAorICB7IAorICAgIG5hbWVzcGFjZSAKKyAgICB7CisgICAgICBfUGxhY2Vob2xkZXI8MT4gXzE7CisgICAgICBfUGxhY2Vob2xkZXI8Mj4gXzI7CisgICAgICBfUGxhY2Vob2xkZXI8Mz4gXzM7CisgICAgICBfUGxhY2Vob2xkZXI8ND4gXzQ7CisgICAgICBfUGxhY2Vob2xkZXI8NT4gXzU7CisgICAgICBfUGxhY2Vob2xkZXI8Nj4gXzY7CisgICAgICBfUGxhY2Vob2xkZXI8Nz4gXzc7CisgICAgICBfUGxhY2Vob2xkZXI8OD4gXzg7CisgICAgICBfUGxhY2Vob2xkZXI8OT4gXzk7CisgICAgICBfUGxhY2Vob2xkZXI8MTA+IF8xMDsKKyAgICAgIF9QbGFjZWhvbGRlcjwxMT4gXzExOworICAgICAgX1BsYWNlaG9sZGVyPDEyPiBfMTI7CisgICAgICBfUGxhY2Vob2xkZXI8MTM+IF8xMzsKKyAgICAgIF9QbGFjZWhvbGRlcjwxND4gXzE0OworICAgICAgX1BsYWNlaG9sZGVyPDE1PiBfMTU7CisgICAgICBfUGxhY2Vob2xkZXI8MTY+IF8xNjsKKyAgICAgIF9QbGFjZWhvbGRlcjwxNz4gXzE3OworICAgICAgX1BsYWNlaG9sZGVyPDE4PiBfMTg7CisgICAgICBfUGxhY2Vob2xkZXI8MTk+IF8xOTsKKyAgICAgIF9QbGFjZWhvbGRlcjwyMD4gXzIwOworICAgICAgX1BsYWNlaG9sZGVyPDIxPiBfMjE7CisgICAgICBfUGxhY2Vob2xkZXI8MjI+IF8yMjsKKyAgICAgIF9QbGFjZWhvbGRlcjwyMz4gXzIzOworICAgICAgX1BsYWNlaG9sZGVyPDI0PiBfMjQ7CisgICAgICBfUGxhY2Vob2xkZXI8MjU+IF8yNTsKKyAgICAgIF9QbGFjZWhvbGRlcjwyNj4gXzI2OworICAgICAgX1BsYWNlaG9sZGVyPDI3PiBfMjc7CisgICAgICBfUGxhY2Vob2xkZXI8Mjg+IF8yODsKKyAgICAgIF9QbGFjZWhvbGRlcjwyOT4gXzI5OworICAgIH0gCisgIH0KKworICAvKioKKyAgICogIFBhcnRpYWwgc3BlY2lhbGl6YXRpb24gb2YgaXNfcGxhY2Vob2xkZXIgdGhhdCBwcm92aWRlcyB0aGUgcGxhY2Vob2xkZXIKKyAgICogIG51bWJlciBmb3IgdGhlIHBsYWNlaG9sZGVyIG9iamVjdHMgZGVmaW5lZCBieSBsaWJzdGRjKysuCisgICAqICBAaW5ncm91cCBiaW5kZXJzCisgICAqLworICB0ZW1wbGF0ZTxpbnQgX051bT4KKyAgICBzdHJ1Y3QgaXNfcGxhY2Vob2xkZXI8X1BsYWNlaG9sZGVyPF9OdW0+ID4KKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxpbnQsIF9OdW0+CisgICAgeyB9OworCisgIC8qKgorICAgKiBTdG9yZXMgYSB0dXBsZSBvZiBpbmRpY2VzLiBVc2VkIGJ5IGJpbmQoKSB0byBleHRyYWN0IHRoZSBlbGVtZW50cworICAgKiBpbiBhIHR1cGxlLiAKKyAgICovCisgIHRlbXBsYXRlPGludC4uLiBfSW5kZXhlcz4KKyAgICBzdHJ1Y3QgX0luZGV4X3R1cGxlCisgICAgeworICAgICAgdHlwZWRlZiBfSW5kZXhfdHVwbGU8X0luZGV4ZXMuLi4sIHNpemVvZi4uLihfSW5kZXhlcyk+IF9fbmV4dDsKKyAgICB9OworCisgIC8vLyBCdWlsZHMgYW4gX0luZGV4X3R1cGxlPDAsIDEsIDIsIC4uLiwgX051bS0xPi4KKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX051bT4KKyAgICBzdHJ1Y3QgX0J1aWxkX2luZGV4X3R1cGxlCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQnVpbGRfaW5kZXhfdHVwbGU8X051bS0xPjo6X190eXBlOjpfX25leHQgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfQnVpbGRfaW5kZXhfdHVwbGU8MD4KKyAgICB7CisgICAgICB0eXBlZGVmIF9JbmRleF90dXBsZTw+IF9fdHlwZTsKKyAgICB9OworCisgIC8qKiAKKyAgICogVXNlZCBieSBfU2FmZV90dXBsZV9lbGVtZW50IHRvIGluZGljYXRlIHRoYXQgdGhlcmUgaXMgbm8gdHVwbGUKKyAgICogZWxlbWVudCBhdCB0aGlzIHBvc2l0aW9uLgorICAgKi8KKyAgc3RydWN0IF9Ob190dXBsZV9lbGVtZW50OworCisgIC8qKgorICAgKiBJbXBsZW1lbnRhdGlvbiBoZWxwZXIgZm9yIF9TYWZlX3R1cGxlX2VsZW1lbnQuIFRoaXMgcHJpbWFyeQorICAgKiB0ZW1wbGF0ZSBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIGl0IGlzIHNhZmUgdG8gdXNlIEBjCisgICAqIHR1cGxlX2VsZW1lbnQuCisgICAqLworICB0ZW1wbGF0ZTxpbnQgX19pLCB0eXBlbmFtZSBfVHVwbGUsIGJvb2wgX0lzU2FmZT4KKyAgICBzdHJ1Y3QgX1NhZmVfdHVwbGVfZWxlbWVudF9pbXBsCisgICAgOiB0dXBsZV9lbGVtZW50PF9faSwgX1R1cGxlPiB7IH07CisKKyAgLyoqCisgICAqIEltcGxlbWVudGF0aW9uIGhlbHBlciBmb3IgX1NhZmVfdHVwbGVfZWxlbWVudC4gVGhpcyBwYXJ0aWFsCisgICAqIHNwZWNpYWxpemF0aW9uIGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgaXQgaXMgbm90IHNhZmUgdG8gdXNlIEBjCisgICAqIHR1cGxlX2VsZW1lbnQuIFdlIGp1c3QgcmV0dXJuIEBjIF9Ob190dXBsZV9lbGVtZW50LgorICAgKi8KKyAgdGVtcGxhdGU8aW50IF9faSwgdHlwZW5hbWUgX1R1cGxlPgorICAgIHN0cnVjdCBfU2FmZV90dXBsZV9lbGVtZW50X2ltcGw8X19pLCBfVHVwbGUsIGZhbHNlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX05vX3R1cGxlX2VsZW1lbnQgdHlwZTsKKyAgICB9OworCisgIC8qKgorICAgKiBMaWtlIHR1cGxlX2VsZW1lbnQsIGJ1dCByZXR1cm5zIEBjIF9Ob190dXBsZV9lbGVtZW50IHdoZW4KKyAgICogdHVwbGVfZWxlbWVudCB3b3VsZCByZXR1cm4gYW4gZXJyb3IuCisgICAqLworIHRlbXBsYXRlPGludCBfX2ksIHR5cGVuYW1lIF9UdXBsZT4KKyAgIHN0cnVjdCBfU2FmZV90dXBsZV9lbGVtZW50CisgICA6IF9TYWZlX3R1cGxlX2VsZW1lbnRfaW1wbDxfX2ksIF9UdXBsZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19pID49IDAgJiYgX19pIDwgdHVwbGVfc2l6ZTxfVHVwbGU+Ojp2YWx1ZSk+CisgICB7IH07CisKKyAgLyoqCisgICAqICBNYXBzIGFuIGFyZ3VtZW50IHRvIGJpbmQoKSBpbnRvIGFuIGFjdHVhbCBhcmd1bWVudCB0byB0aGUgYm91bmQKKyAgICogIGZ1bmN0aW9uIG9iamVjdCBbVFIxIDMuNi4zLzVdLiBPbmx5IHRoZSBmaXJzdCBwYXJhbWV0ZXIgc2hvdWxkCisgICAqICBiZSBzcGVjaWZpZWQ6IHRoZSByZXN0IGFyZSB1c2VkIHRvIGRldGVybWluZSBhbW9uZyB0aGUgdmFyaW91cworICAgKiAgaW1wbGVtZW50YXRpb25zLiBOb3RlIHRoYXQsIGFsdGhvdWdoIHRoaXMgY2xhc3MgaXMgYSBmdW5jdGlvbgorICAgKiAgb2JqZWN0LCBpdCBpc24ndCBlbnRpcmVseSBub3JtYWwgYmVjYXVzZSBpdCB0YWtlcyBvbmx5IHR3bworICAgKiAgcGFyYW1ldGVycyByZWdhcmRsZXNzIG9mIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhlCisgICAqICBiaW5kIGV4cHJlc3Npb24uIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdGhlIGJvdW5kIGFyZ3VtZW50IGFuZAorICAgKiAgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgYSB0dXBsZSBjb250YWluaW5nIHJlZmVyZW5jZXMgdG8gdGhlCisgICAqICByZXN0IG9mIHRoZSBhcmd1bWVudHMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQXJnLAorICAgICAgICAgICBib29sIF9Jc0JpbmRFeHAgPSBpc19iaW5kX2V4cHJlc3Npb248X0FyZz46OnZhbHVlLAorICAgICAgICAgICBib29sIF9Jc1BsYWNlaG9sZGVyID0gKGlzX3BsYWNlaG9sZGVyPF9Bcmc+Ojp2YWx1ZSA+IDApPgorICAgIGNsYXNzIF9NdTsKKworICAvKioKKyAgICogIElmIHRoZSBhcmd1bWVudCBpcyByZWZlcmVuY2Vfd3JhcHBlcjxfVHA+LCByZXR1cm5zIHRoZQorICAgKiAgdW5kZXJseWluZyByZWZlcmVuY2UuIFtUUjEgMy42LjMvNSBidWxsZXQgMV0KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyBfTXU8cmVmZXJlbmNlX3dyYXBwZXI8X1RwPiwgZmFsc2UsIGZhbHNlPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9UcCYgcmVzdWx0X3R5cGU7CisKKyAgICAgIC8qIE5vdGU6IFRoaXMgd29uJ3QgYWN0dWFsbHkgd29yayBmb3IgY29uc3Qgdm9sYXRpbGUKKyAgICAgICAqIHJlZmVyZW5jZV93cmFwcGVycywgYmVjYXVzZSByZWZlcmVuY2Vfd3JhcHBlcjo6Z2V0KCkgaXMgY29uc3QKKyAgICAgICAqIGJ1dCBub3Qgdm9sYXRpbGUtcXVhbGlmaWVkLiBUaGlzIG1pZ2h0IGJlIGEgZGVmZWN0IGluIHRoZSBUUi4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NWUmVmLCB0eXBlbmFtZSBfVHVwbGU+CisgICAgICAgIHJlc3VsdF90eXBlCisgICAgICAgIG9wZXJhdG9yKCkoX0NWUmVmJiBfX2FyZywgX1R1cGxlJiYpIGNvbnN0IHZvbGF0aWxlCisgICAgICAgIHsgcmV0dXJuIF9fYXJnLmdldCgpOyB9CisgICAgfTsKKworICAvKioKKyAgICogIElmIHRoZSBhcmd1bWVudCBpcyBhIGJpbmQgZXhwcmVzc2lvbiwgd2UgaW52b2tlIHRoZSB1bmRlcmx5aW5nCisgICAqICBmdW5jdGlvbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBjdi1xdWFsaWZpZXJzIGFzIHdlIGFyZSBnaXZlbiBhbmQKKyAgICogIHBhc3MgYWxvbmcgYWxsIG9mIG91ciBhcmd1bWVudHMgKHVud3JhcHBlZCkuIFtUUjEgMy42LjMvNSBidWxsZXQgMl0KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Bcmc+CisgICAgY2xhc3MgX011PF9BcmcsIHRydWUsIGZhbHNlPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2lnbmF0dXJlPiBjbGFzcyByZXN1bHQ7CisKKyAgICAgIC8vIERldGVybWluZSB0aGUgcmVzdWx0IHR5cGUgd2hlbiB3ZSBwYXNzIHRoZSBhcmd1bWVudHMgYWxvbmcuIFRoaXMKKyAgICAgIC8vIGludm9sdmVzIHBhc3NpbmcgYWxvbmcgdGhlIGN2LXF1YWxpZmllcnMgcGxhY2VkIG9uIF9NdSBhbmQKKyAgICAgIC8vIHVud3JhcHBpbmcgdGhlIGFyZ3VtZW50IGJ1bmRsZS4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DVk11LCB0eXBlbmFtZSBfQ1ZBcmcsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICBjbGFzcyByZXN1bHQ8X0NWTXUoX0NWQXJnLCB0dXBsZTxfQXJncy4uLj4pPgorCTogcHVibGljIHJlc3VsdF9vZjxfQ1ZBcmcoX0FyZ3MuLi4pPiB7IH07CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DVkFyZywgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHR5cGVuYW1lIHJlc3VsdF9vZjxfQ1ZBcmcoX0FyZ3MuLi4pPjo6dHlwZQorICAgICAgICBvcGVyYXRvcigpKF9DVkFyZyYgX19hcmcsCisJCSAgIHR1cGxlPF9BcmdzLi4uPiYmIF9fdHVwbGUpIGNvbnN0IHZvbGF0aWxlCisgICAgICAgIHsKKwkgIC8vIENvbnN0cnVjdCBhbiBpbmRleCB0dXBsZSBhbmQgZm9yd2FyZCB0byBfX2NhbGwKKwkgIHR5cGVkZWYgdHlwZW5hbWUgX0J1aWxkX2luZGV4X3R1cGxlPHNpemVvZi4uLihfQXJncyk+OjpfX3R5cGUKKwkgICAgX0luZGV4ZXM7CisJICByZXR1cm4gdGhpcy0+X19jYWxsKF9fYXJnLCBzdGQ6Om1vdmUoX190dXBsZSksIF9JbmRleGVzKCkpOworCX0KKworICAgIHByaXZhdGU6CisgICAgICAvLyBJbnZva2VzIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIG9iamVjdCBfX2FyZyBieSB1bnBhY2tpbmcgYWxsCisgICAgICAvLyBvZiB0aGUgYXJndW1lbnRzIGluIHRoZSB0dXBsZS4gCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ1ZBcmcsIHR5cGVuYW1lLi4uIF9BcmdzLCBpbnQuLi4gX0luZGV4ZXM+CisgICAgICAgIHR5cGVuYW1lIHJlc3VsdF9vZjxfQ1ZBcmcoX0FyZ3MuLi4pPjo6dHlwZQorICAgICAgICBfX2NhbGwoX0NWQXJnJiBfX2FyZywgdHVwbGU8X0FyZ3MuLi4+JiYgX190dXBsZSwKKwkgICAgICAgY29uc3QgX0luZGV4X3R1cGxlPF9JbmRleGVzLi4uPiYpIGNvbnN0IHZvbGF0aWxlCisgICAgICAgIHsKKwkgIHJldHVybiBfX2FyZyhzdGQ6OmZvcndhcmQ8X0FyZ3M+KGdldDxfSW5kZXhlcz4oX190dXBsZSkpLi4uKTsKKwl9CisgICAgfTsKKworICAvKioKKyAgICogIElmIHRoZSBhcmd1bWVudCBpcyBhIHBsYWNlaG9sZGVyIGZvciB0aGUgTnRoIGFyZ3VtZW50LCByZXR1cm5zCisgICAqICBhIHJlZmVyZW5jZSB0byB0aGUgTnRoIGFyZ3VtZW50IHRvIHRoZSBiaW5kIGZ1bmN0aW9uIG9iamVjdC4KKyAgICogIFtUUjEgMy42LjMvNSBidWxsZXQgM10KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Bcmc+CisgICAgY2xhc3MgX011PF9BcmcsIGZhbHNlLCB0cnVlPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2lnbmF0dXJlPiBjbGFzcyByZXN1bHQ7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DVk11LCB0eXBlbmFtZSBfQ1ZBcmcsIHR5cGVuYW1lIF9UdXBsZT4KKyAgICAgICAgY2xhc3MgcmVzdWx0PF9DVk11KF9DVkFyZywgX1R1cGxlKT4KKyAgICAgICAgeworCSAgLy8gQWRkIGEgcmVmZXJlbmNlLCBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGRvbmUgZm9yIHVzLgorCSAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gYmUgYSBsaXR0bGUgYml0IHNsb3BweSBpbiBjb25zdHJ1Y3RpbmcKKwkgIC8vIHRoZSB0dXBsZSB0aGF0IHdlIHBhc3MgdG8gcmVzdWx0X29mPC4uLj4uCisJICB0eXBlZGVmIHR5cGVuYW1lIF9TYWZlX3R1cGxlX2VsZW1lbnQ8KGlzX3BsYWNlaG9sZGVyPF9Bcmc+Ojp2YWx1ZQorCQkJCQkJLSAxKSwgX1R1cGxlPjo6dHlwZQorCSAgICBfX2Jhc2VfdHlwZTsKKworCXB1YmxpYzoKKwkgIHR5cGVkZWYgdHlwZW5hbWUgYWRkX3J2YWx1ZV9yZWZlcmVuY2U8X19iYXNlX3R5cGU+Ojp0eXBlIHR5cGU7CisJfTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R1cGxlPgorICAgICAgICB0eXBlbmFtZSByZXN1bHQ8X011KF9BcmcsIF9UdXBsZSk+Ojp0eXBlCisgICAgICAgIG9wZXJhdG9yKCkoY29uc3Qgdm9sYXRpbGUgX0FyZyYsIF9UdXBsZSYmIF9fdHVwbGUpIGNvbnN0IHZvbGF0aWxlCisgICAgICAgIHsKKwkgIHJldHVybiBzdGQ6OmZvcndhcmQ8dHlwZW5hbWUgcmVzdWx0PF9NdShfQXJnLCBfVHVwbGUpPjo6dHlwZT4oCisgICAgICAgICAgICAgIDo6c3RkOjpnZXQ8KGlzX3BsYWNlaG9sZGVyPF9Bcmc+Ojp2YWx1ZSAtIDEpPihfX3R1cGxlKSk7CisJfQorICAgIH07CisKKyAgLyoqCisgICAqICBJZiB0aGUgYXJndW1lbnQgaXMganVzdCBhIHZhbHVlLCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoYXQKKyAgICogIHZhbHVlLiBUaGUgY3YtcXVhbGlmaWVycyBvbiB0aGUgcmVmZXJlbmNlIGFyZSB0aGUgc2FtZSBhcyB0aGUKKyAgICogIGN2LXF1YWxpZmllcnMgb24gdGhlIF9NdSBvYmplY3QuIFtUUjEgMy42LjMvNSBidWxsZXQgNF0KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Bcmc+CisgICAgY2xhc3MgX011PF9BcmcsIGZhbHNlLCBmYWxzZT4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZT4gc3RydWN0IHJlc3VsdDsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NWTXUsIHR5cGVuYW1lIF9DVkFyZywgdHlwZW5hbWUgX1R1cGxlPgorICAgICAgICBzdHJ1Y3QgcmVzdWx0PF9DVk11KF9DVkFyZywgX1R1cGxlKT4KKyAgICAgICAgeworCSAgdHlwZWRlZiB0eXBlbmFtZSBhZGRfbHZhbHVlX3JlZmVyZW5jZTxfQ1ZBcmc+Ojp0eXBlIHR5cGU7CisJfTsKKworICAgICAgLy8gUGljayB1cCB0aGUgY3YtcXVhbGlmaWVycyBvZiB0aGUgYXJndW1lbnQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DVkFyZywgdHlwZW5hbWUgX1R1cGxlPgorICAgICAgICBfQ1ZBcmcmJgorICAgICAgICBvcGVyYXRvcigpKF9DVkFyZyYmIF9fYXJnLCBfVHVwbGUmJikgY29uc3Qgdm9sYXRpbGUKKyAgICAgICAgeyByZXR1cm4gc3RkOjpmb3J3YXJkPF9DVkFyZz4oX19hcmcpOyB9CisgICAgfTsKKworICAvKioKKyAgICogIE1hcHMgbWVtYmVyIHBvaW50ZXJzIGludG8gaW5zdGFuY2VzIG9mIF9NZW1fZm4gYnV0IGxlYXZlcyBhbGwKKyAgICogIG90aGVyIGZ1bmN0aW9uIG9iamVjdHMgdW50b3VjaGVkLiBVc2VkIGJ5IHRyMTo6YmluZCgpLiBUaGUKKyAgICogIHByaW1hcnkgdGVtcGxhdGUgaGFuZGxlcyB0aGUgbm9uLS1tZW1iZXItcG9pbnRlciBjYXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfTWF5YmVfd3JhcF9tZW1iZXJfcG9pbnRlcgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1RwIHR5cGU7CisgICAgICAKKyAgICAgIHN0YXRpYyBjb25zdCBfVHAmCisgICAgICBfX2RvX3dyYXAoY29uc3QgX1RwJiBfX3gpCisgICAgICB7IHJldHVybiBfX3g7IH0KKyAgICB9OworCisgIC8qKgorICAgKiAgTWFwcyBtZW1iZXIgcG9pbnRlcnMgaW50byBpbnN0YW5jZXMgb2YgX01lbV9mbiBidXQgbGVhdmVzIGFsbAorICAgKiAgb3RoZXIgZnVuY3Rpb24gb2JqZWN0cyB1bnRvdWNoZWQuIFVzZWQgYnkgdHIxOjpiaW5kKCkuIFRoaXMKKyAgICogIHBhcnRpYWwgc3BlY2lhbGl6YXRpb24gaGFuZGxlcyB0aGUgbWVtYmVyIHBvaW50ZXIgY2FzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NsYXNzPgorICAgIHN0cnVjdCBfTWF5YmVfd3JhcF9tZW1iZXJfcG9pbnRlcjxfVHAgX0NsYXNzOjoqPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX01lbV9mbjxfVHAgX0NsYXNzOjoqPiB0eXBlOworICAgICAgCisgICAgICBzdGF0aWMgdHlwZQorICAgICAgX19kb193cmFwKF9UcCBfQ2xhc3M6OiogX19wbSkKKyAgICAgIHsgcmV0dXJuIHR5cGUoX19wbSk7IH0KKyAgICB9OworCisgIC8vIFNwZWNpYWxpemF0aW9uIG5lZWRlZCB0byBwcmV2ZW50ICJmb3JtaW5nIHJlZmVyZW5jZSB0byB2b2lkIiBlcnJvcnMgd2hlbgorICAvLyBiaW5kPHZvaWQ+KCkgaXMgY2FsbGVkLCBiZWNhdXNlIGFyZ3VtZW50IGRlZHVjdGlvbiBpbnN0YW50aWF0ZXMKKyAgLy8gX01heWJlX3dyYXBfbWVtYmVyX3BvaW50ZXI8dm9pZD4gb3V0c2lkZSB0aGUgaW1tZWRpYXRlIGNvbnRleHQgd2hlcmUKKyAgLy8gU0ZJTkFFIGFwcGxpZXMuCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX01heWJlX3dyYXBfbWVtYmVyX3BvaW50ZXI8dm9pZD4KKyAgICB7CisgICAgICB0eXBlZGVmIHZvaWQgdHlwZTsKKyAgICB9OworCisgIC8vLyBUeXBlIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QgcmV0dXJuZWQgZnJvbSBiaW5kKCkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgc3RydWN0IF9CaW5kOworCisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3RvciwgdHlwZW5hbWUuLi4gX0JvdW5kX2FyZ3M+CisgICAgY2xhc3MgX0JpbmQ8X0Z1bmN0b3IoX0JvdW5kX2FyZ3MuLi4pPgorICAgIDogcHVibGljIF9XZWFrX3Jlc3VsdF90eXBlPF9GdW5jdG9yPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0JpbmQgX19zZWxmX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CdWlsZF9pbmRleF90dXBsZTxzaXplb2YuLi4oX0JvdW5kX2FyZ3MpPjo6X190eXBlIAorICAgICAgICBfQm91bmRfaW5kZXhlczsKKworICAgICAgX0Z1bmN0b3IgX01fZjsKKyAgICAgIHR1cGxlPF9Cb3VuZF9hcmdzLi4uPiBfTV9ib3VuZF9hcmdzOworCisgICAgICAvLyBDYWxsIHVucXVhbGlmaWVkCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzdWx0LCB0eXBlbmFtZS4uLiBfQXJncywgaW50Li4uIF9JbmRleGVzPgorICAgICAgICBfUmVzdWx0CisgICAgICAgIF9fY2FsbCh0dXBsZTxfQXJncy4uLj4mJiBfX2FyZ3MsIF9JbmRleF90dXBsZTxfSW5kZXhlcy4uLj4pCisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gX01fZihfTXU8X0JvdW5kX2FyZ3M+KCkKKyAgICAgICAgICAgICAgICAgICAgICAoZ2V0PF9JbmRleGVzPihfTV9ib3VuZF9hcmdzKSwgc3RkOjptb3ZlKF9fYXJncykpLi4uKTsKKyAgICAgICAgfQorCisgICAgICAvLyBDYWxsIGFzIGNvbnN0CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzdWx0LCB0eXBlbmFtZS4uLiBfQXJncywgaW50Li4uIF9JbmRleGVzPgorICAgICAgICBfUmVzdWx0CisgICAgICAgIF9fY2FsbF9jKHR1cGxlPF9BcmdzLi4uPiYmIF9fYXJncywgX0luZGV4X3R1cGxlPF9JbmRleGVzLi4uPikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiBfTV9mKF9NdTxfQm91bmRfYXJncz4oKQorICAgICAgICAgICAgICAgICAgICAgIChnZXQ8X0luZGV4ZXM+KF9NX2JvdW5kX2FyZ3MpLCBzdGQ6Om1vdmUoX19hcmdzKSkuLi4pOworICAgICAgICB9CisKKyNpZiAwCisgICAgICAvLyBDYWxsIGFzIHZvbGF0aWxlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzdWx0LCB0eXBlbmFtZS4uLiBfQXJncywgaW50Li4uIF9JbmRleGVzPgorICAgICAgICBfUmVzdWx0CisgICAgICAgIF9fY2FsbF92KHR1cGxlPF9BcmdzLi4uPiYmIF9fYXJncywgCisJCSBfSW5kZXhfdHVwbGU8X0luZGV4ZXMuLi4+KSB2b2xhdGlsZQorICAgICAgICB7CisgICAgICAgICAgcmV0dXJuIF9NX2YoX011PF9Cb3VuZF9hcmdzPigpCisgICAgICAgICAgICAgICAgICAgICAgKGdldDxfSW5kZXhlcz4oX01fYm91bmRfYXJncyksIHN0ZDo6bW92ZShfX2FyZ3MpKS4uLik7CisgICAgICAgIH0KKworICAgICAgLy8gQ2FsbCBhcyBjb25zdCB2b2xhdGlsZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlc3VsdCwgdHlwZW5hbWUuLi4gX0FyZ3MsIGludC4uLiBfSW5kZXhlcz4KKyAgICAgICAgX1Jlc3VsdAorICAgICAgICBfX2NhbGxfY192KHR1cGxlPF9BcmdzLi4uPiYmIF9fYXJncywgCisJCSAgIF9JbmRleF90dXBsZTxfSW5kZXhlcy4uLj4pIGNvbnN0IHZvbGF0aWxlCisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gX01fZihfTXU8X0JvdW5kX2FyZ3M+KCkKKyAgICAgICAgICAgICAgICAgICAgICAoZ2V0PF9JbmRleGVzPihfTV9ib3VuZF9hcmdzKSwgc3RkOjptb3ZlKF9fYXJncykpLi4uKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgcHVibGljOgorICAgICAgZXhwbGljaXQgX0JpbmQoX0Z1bmN0b3IgX19mLCBfQm91bmRfYXJncy4uLiBfX2JvdW5kX2FyZ3MpCisgICAgICA6IF9NX2Yoc3RkOjpmb3J3YXJkPF9GdW5jdG9yPihfX2YpKSwKKwlfTV9ib3VuZF9hcmdzKHN0ZDo6Zm9yd2FyZDxfQm91bmRfYXJncz4oX19ib3VuZF9hcmdzKS4uLikKKyAgICAgIHsgfQorCisgICAgICAvLyBDYWxsIHVucXVhbGlmaWVkCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncywgdHlwZW5hbWUgX1Jlc3VsdAorICAgICAgICA9IGRlY2x0eXBlKCBzdGQ6OmRlY2x2YWw8X0Z1bmN0b3I+KCkoCisgICAgICAgICAgICAgIF9NdTxfQm91bmRfYXJncz4oKSggc3RkOjpkZWNsdmFsPF9Cb3VuZF9hcmdzJj4oKSwKKwkJCQkgIHN0ZDo6ZGVjbHZhbDx0dXBsZTxfQXJncy4uLj4mJj4oKSApLi4uICkgKT4KKyAgICAgICAgX1Jlc3VsdAorICAgICAgICBvcGVyYXRvcigpKF9BcmdzJiYuLi4gX19hcmdzKQorICAgICAgICB7CisgICAgICAgICAgcmV0dXJuIHRoaXMtPl9fY2FsbDxfUmVzdWx0Pih0dXBsZTxfQXJncy4uLj4KKwkJCQkgICAgICAgKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQm91bmRfaW5kZXhlcygpKTsKKyAgICAgICAgfQorCisgICAgICAvLyBDYWxsIGFzIGNvbnN0CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncywgdHlwZW5hbWUgX1Jlc3VsdAorICAgICAgICA9IGRlY2x0eXBlKCBzdGQ6OmRlY2x2YWw8Y29uc3QgX0Z1bmN0b3I+KCkoCisJICAgICAgX011PF9Cb3VuZF9hcmdzPigpKCBzdGQ6OmRlY2x2YWw8Y29uc3QgX0JvdW5kX2FyZ3MmPigpLAorCQkJCSAgc3RkOjpkZWNsdmFsPHR1cGxlPF9BcmdzLi4uPiYmPigpICkuLi4gKSApPgorICAgICAgICBfUmVzdWx0CisgICAgICAgIG9wZXJhdG9yKCkoX0FyZ3MmJi4uLiBfX2FyZ3MpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gdGhpcy0+X19jYWxsX2M8X1Jlc3VsdD4odHVwbGU8X0FyZ3MuLi4+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQm91bmRfaW5kZXhlcygpKTsKKyAgICAgICAgfQorCisjaWYgMAorICAgICAgLy8gQ2FsbCBhcyB2b2xhdGlsZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3MsIHR5cGVuYW1lIF9SZXN1bHQKKyAgICAgICAgPSBkZWNsdHlwZSggc3RkOjpkZWNsdmFsPHZvbGF0aWxlIF9GdW5jdG9yPigpKAorICAgICAgICAgICAgICBfTXU8X0JvdW5kX2FyZ3M+KCkoIHN0ZDo6ZGVjbHZhbDx2b2xhdGlsZSBfQm91bmRfYXJncyY+KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpkZWNsdmFsPHR1cGxlPF9BcmdzLi4uPiYmPigpICkuLi4gKSApPgorICAgICAgICBfUmVzdWx0CisgICAgICAgIG9wZXJhdG9yKCkoX0FyZ3MmJi4uLiBfX2FyZ3MpIHZvbGF0aWxlCisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gdGhpcy0+X19jYWxsX3Y8X1Jlc3VsdD4odHVwbGU8X0FyZ3MuLi4+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQm91bmRfaW5kZXhlcygpKTsKKyAgICAgICAgfQorCisgICAgICAvLyBDYWxsIGFzIGNvbnN0IHZvbGF0aWxlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncywgdHlwZW5hbWUgX1Jlc3VsdAorICAgICAgICA9IGRlY2x0eXBlKCBzdGQ6OmRlY2x2YWw8Y29uc3Qgdm9sYXRpbGUgX0Z1bmN0b3I+KCkoCisgICAgICAgICAgICAgIF9NdTxfQm91bmRfYXJncz4oKSggc3RkOjpkZWNsdmFsPGNvbnN0IHZvbGF0aWxlIF9Cb3VuZF9hcmdzJj4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmRlY2x2YWw8dHVwbGU8X0FyZ3MuLi4+JiY+KCkgKS4uLiApICk+CisgICAgICAgIF9SZXN1bHQKKyAgICAgICAgb3BlcmF0b3IoKShfQXJncyYmLi4uIF9fYXJncykgY29uc3Qgdm9sYXRpbGUKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiB0aGlzLT5fX2NhbGxfY192PF9SZXN1bHQ+KHR1cGxlPF9BcmdzLi4uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Cb3VuZF9pbmRleGVzKCkpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9OworCisgIC8vLyBUeXBlIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QgcmV0dXJuZWQgZnJvbSBiaW5kPFI+KCkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXN1bHQsIHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgc3RydWN0IF9CaW5kX3Jlc3VsdDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzdWx0LCB0eXBlbmFtZSBfRnVuY3RvciwgdHlwZW5hbWUuLi4gX0JvdW5kX2FyZ3M+CisgICAgY2xhc3MgX0JpbmRfcmVzdWx0PF9SZXN1bHQsIF9GdW5jdG9yKF9Cb3VuZF9hcmdzLi4uKT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9CaW5kX3Jlc3VsdCBfX3NlbGZfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0J1aWxkX2luZGV4X3R1cGxlPHNpemVvZi4uLihfQm91bmRfYXJncyk+OjpfX3R5cGUgCisgICAgICAgIF9Cb3VuZF9pbmRleGVzOworCisgICAgICBfRnVuY3RvciBfTV9mOworICAgICAgdHVwbGU8X0JvdW5kX2FyZ3MuLi4+IF9NX2JvdW5kX2FyZ3M7CisKKyAgICAgIC8vIHNmaW5hZSB0eXBlcworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlcz4KKyAgICAgICAgc3RydWN0IF9fZW5hYmxlX2lmX3ZvaWQgOiBlbmFibGVfaWY8aXNfdm9pZDxfUmVzPjo6dmFsdWUsIGludD4geyB9OworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlcz4KKyAgICAgICAgc3RydWN0IF9fZGlzYWJsZV9pZl92b2lkIDogZW5hYmxlX2lmPCFpc192b2lkPF9SZXM+Ojp2YWx1ZSwgaW50PiB7IH07CisKKyAgICAgIC8vIENhbGwgdW5xdWFsaWZpZWQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdzLCBpbnQuLi4gX0luZGV4ZXM+CisgICAgICAgIF9SZXN1bHQKKyAgICAgICAgX19jYWxsKHR1cGxlPF9BcmdzLi4uPiYmIF9fYXJncywgX0luZGV4X3R1cGxlPF9JbmRleGVzLi4uPiwKKyAgICAgICAgICAgIHR5cGVuYW1lIF9fZGlzYWJsZV9pZl92b2lkPF9SZXM+Ojp0eXBlID0gMCkKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiBfTV9mKF9NdTxfQm91bmRfYXJncz4oKQorICAgICAgICAgICAgICAgICAgICAgIChnZXQ8X0luZGV4ZXM+KF9NX2JvdW5kX2FyZ3MpLCBzdGQ6Om1vdmUoX19hcmdzKSkuLi4pOworICAgICAgICB9CisKKyAgICAgIC8vIENhbGwgdW5xdWFsaWZpZWQsIHJldHVybiB2b2lkCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJncywgaW50Li4uIF9JbmRleGVzPgorICAgICAgICB2b2lkCisgICAgICAgIF9fY2FsbCh0dXBsZTxfQXJncy4uLj4mJiBfX2FyZ3MsIF9JbmRleF90dXBsZTxfSW5kZXhlcy4uLj4sCisgICAgICAgICAgICB0eXBlbmFtZSBfX2VuYWJsZV9pZl92b2lkPF9SZXM+Ojp0eXBlID0gMCkKKyAgICAgICAgeworICAgICAgICAgIF9NX2YoX011PF9Cb3VuZF9hcmdzPigpCisJICAgICAgIChnZXQ8X0luZGV4ZXM+KF9NX2JvdW5kX2FyZ3MpLCBzdGQ6Om1vdmUoX19hcmdzKSkuLi4pOworICAgICAgICB9CisKKyAgICAgIC8vIENhbGwgYXMgY29uc3QKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdzLCBpbnQuLi4gX0luZGV4ZXM+CisgICAgICAgIF9SZXN1bHQKKyAgICAgICAgX19jYWxsKHR1cGxlPF9BcmdzLi4uPiYmIF9fYXJncywgX0luZGV4X3R1cGxlPF9JbmRleGVzLi4uPiwKKyAgICAgICAgICAgIHR5cGVuYW1lIF9fZGlzYWJsZV9pZl92b2lkPF9SZXM+Ojp0eXBlID0gMCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiBfTV9mKF9NdTxfQm91bmRfYXJncz4oKQorICAgICAgICAgICAgICAgICAgICAgIChnZXQ8X0luZGV4ZXM+KF9NX2JvdW5kX2FyZ3MpLCBzdGQ6Om1vdmUoX19hcmdzKSkuLi4pOworICAgICAgICB9CisKKyAgICAgIC8vIENhbGwgYXMgY29uc3QsIHJldHVybiB2b2lkCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJncywgaW50Li4uIF9JbmRleGVzPgorICAgICAgICB2b2lkCisgICAgICAgIF9fY2FsbCh0dXBsZTxfQXJncy4uLj4mJiBfX2FyZ3MsIF9JbmRleF90dXBsZTxfSW5kZXhlcy4uLj4sCisgICAgICAgICAgICB0eXBlbmFtZSBfX2VuYWJsZV9pZl92b2lkPF9SZXM+Ojp0eXBlID0gMCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgIF9NX2YoX011PF9Cb3VuZF9hcmdzPigpCisJICAgICAgIChnZXQ8X0luZGV4ZXM+KF9NX2JvdW5kX2FyZ3MpLCAgc3RkOjptb3ZlKF9fYXJncykpLi4uKTsKKyAgICAgICAgfQorCisgICAgICAvLyBDYWxsIGFzIHZvbGF0aWxlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJncywgaW50Li4uIF9JbmRleGVzPgorICAgICAgICBfUmVzdWx0CisgICAgICAgIF9fY2FsbCh0dXBsZTxfQXJncy4uLj4mJiBfX2FyZ3MsIF9JbmRleF90dXBsZTxfSW5kZXhlcy4uLj4sCisgICAgICAgICAgICB0eXBlbmFtZSBfX2Rpc2FibGVfaWZfdm9pZDxfUmVzPjo6dHlwZSA9IDApIHZvbGF0aWxlCisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gX01fZihfTXU8X0JvdW5kX2FyZ3M+KCkKKyAgICAgICAgICAgICAgICAgICAgICAoZ2V0PF9JbmRleGVzPihfTV9ib3VuZF9hcmdzKSwgc3RkOjptb3ZlKF9fYXJncykpLi4uKTsKKyAgICAgICAgfQorCisgICAgICAvLyBDYWxsIGFzIHZvbGF0aWxlLCByZXR1cm4gdm9pZAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ3MsIGludC4uLiBfSW5kZXhlcz4KKyAgICAgICAgdm9pZAorICAgICAgICBfX2NhbGwodHVwbGU8X0FyZ3MuLi4+JiYgX19hcmdzLCBfSW5kZXhfdHVwbGU8X0luZGV4ZXMuLi4+LAorICAgICAgICAgICAgdHlwZW5hbWUgX19lbmFibGVfaWZfdm9pZDxfUmVzPjo6dHlwZSA9IDApIHZvbGF0aWxlCisgICAgICAgIHsKKyAgICAgICAgICBfTV9mKF9NdTxfQm91bmRfYXJncz4oKQorCSAgICAgICAoZ2V0PF9JbmRleGVzPihfTV9ib3VuZF9hcmdzKSwgc3RkOjptb3ZlKF9fYXJncykpLi4uKTsKKyAgICAgICAgfQorCisgICAgICAvLyBDYWxsIGFzIGNvbnN0IHZvbGF0aWxlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJncywgaW50Li4uIF9JbmRleGVzPgorICAgICAgICBfUmVzdWx0CisgICAgICAgIF9fY2FsbCh0dXBsZTxfQXJncy4uLj4mJiBfX2FyZ3MsIF9JbmRleF90dXBsZTxfSW5kZXhlcy4uLj4sCisgICAgICAgICAgICB0eXBlbmFtZSBfX2Rpc2FibGVfaWZfdm9pZDxfUmVzPjo6dHlwZSA9IDApIGNvbnN0IHZvbGF0aWxlCisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gX01fZihfTXU8X0JvdW5kX2FyZ3M+KCkKKyAgICAgICAgICAgICAgICAgICAgICAoZ2V0PF9JbmRleGVzPihfTV9ib3VuZF9hcmdzKSwgc3RkOjptb3ZlKF9fYXJncykpLi4uKTsKKyAgICAgICAgfQorCisgICAgICAvLyBDYWxsIGFzIGNvbnN0IHZvbGF0aWxlLCByZXR1cm4gdm9pZAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ3MsIGludC4uLiBfSW5kZXhlcz4KKyAgICAgICAgdm9pZAorICAgICAgICBfX2NhbGwodHVwbGU8X0FyZ3MuLi4+JiYgX19hcmdzLCAKKyAgICAgICAgICAgICAgIF9JbmRleF90dXBsZTxfSW5kZXhlcy4uLj4sCisgICAgICAgICAgICB0eXBlbmFtZSBfX2VuYWJsZV9pZl92b2lkPF9SZXM+Ojp0eXBlID0gMCkgY29uc3Qgdm9sYXRpbGUKKyAgICAgICAgeworICAgICAgICAgIF9NX2YoX011PF9Cb3VuZF9hcmdzPigpCisJICAgICAgIChnZXQ8X0luZGV4ZXM+KF9NX2JvdW5kX2FyZ3MpLCBzdGQ6Om1vdmUoX19hcmdzKSkuLi4pOworICAgICAgICB9CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfQmluZF9yZXN1bHQoX0Z1bmN0b3IgX19mLCBfQm91bmRfYXJncy4uLiBfX2JvdW5kX2FyZ3MpCisgICAgICA6IF9NX2Yoc3RkOjpmb3J3YXJkPF9GdW5jdG9yPihfX2YpKSwKKwlfTV9ib3VuZF9hcmdzKHN0ZDo6Zm9yd2FyZDxfQm91bmRfYXJncz4oX19ib3VuZF9hcmdzKS4uLikKKyAgICAgIHsgfQorCisgICAgICAvLyBDYWxsIHVucXVhbGlmaWVkCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgcmVzdWx0X3R5cGUKKyAgICAgICAgb3BlcmF0b3IoKShfQXJncyYmLi4uIF9fYXJncykKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiB0aGlzLT5fX2NhbGw8X1Jlc3VsdD4oCisgICAgICAgICAgICAgIHR1cGxlPF9BcmdzLi4uPihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pLAorICAgICAgICAgICAgICBfQm91bmRfaW5kZXhlcygpKTsKKyAgICAgICAgfQorCisgICAgICAvLyBDYWxsIGFzIGNvbnN0CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgcmVzdWx0X3R5cGUKKyAgICAgICAgb3BlcmF0b3IoKShfQXJncyYmLi4uIF9fYXJncykgY29uc3QKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiB0aGlzLT5fX2NhbGw8X1Jlc3VsdD4oCisgICAgICAgICAgICAgIHR1cGxlPF9BcmdzLi4uPihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pLAorICAgICAgICAgICAgICBfQm91bmRfaW5kZXhlcygpKTsKKyAgICAgICAgfQorCisgICAgICAvLyBDYWxsIGFzIHZvbGF0aWxlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgcmVzdWx0X3R5cGUKKyAgICAgICAgb3BlcmF0b3IoKShfQXJncyYmLi4uIF9fYXJncykgdm9sYXRpbGUKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiB0aGlzLT5fX2NhbGw8X1Jlc3VsdD4oCisgICAgICAgICAgICAgIHR1cGxlPF9BcmdzLi4uPihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pLAorICAgICAgICAgICAgICBfQm91bmRfaW5kZXhlcygpKTsKKyAgICAgICAgfQorCisgICAgICAvLyBDYWxsIGFzIGNvbnN0IHZvbGF0aWxlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgcmVzdWx0X3R5cGUKKyAgICAgICAgb3BlcmF0b3IoKShfQXJncyYmLi4uIF9fYXJncykgY29uc3Qgdm9sYXRpbGUKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiB0aGlzLT5fX2NhbGw8X1Jlc3VsdD4oCisgICAgICAgICAgICAgIHR1cGxlPF9BcmdzLi4uPihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pLAorICAgICAgICAgICAgICBfQm91bmRfaW5kZXhlcygpKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgQ2xhc3MgdGVtcGxhdGUgX0JpbmQgaXMgYWx3YXlzIGEgYmluZCBleHByZXNzaW9uLgorICAgKiAgQGluZ3JvdXAgYmluZGVycworICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBzdHJ1Y3QgaXNfYmluZF9leHByZXNzaW9uPF9CaW5kPF9TaWduYXR1cmU+ID4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworCisgIC8qKgorICAgKiAgQGJyaWVmIENsYXNzIHRlbXBsYXRlIF9CaW5kIGlzIGFsd2F5cyBhIGJpbmQgZXhwcmVzc2lvbi4KKyAgICogIEBpbmdyb3VwIGJpbmRlcnMKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXN1bHQsIHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgc3RydWN0IGlzX2JpbmRfZXhwcmVzc2lvbjxfQmluZF9yZXN1bHQ8X1Jlc3VsdCwgX1NpZ25hdHVyZT4gPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgRnVuY3Rpb24gdGVtcGxhdGUgZm9yIHN0ZDo6YmluZC4KKyAgICogIEBpbmdyb3VwIGJpbmRlcnMKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgaW5saW5lCisgICAgX0JpbmQ8dHlwZW5hbWUgX01heWJlX3dyYXBfbWVtYmVyX3BvaW50ZXI8X0Z1bmN0b3I+Ojp0eXBlKF9BcmdUeXBlcy4uLik+CisgICAgYmluZChfRnVuY3RvciBfX2YsIF9BcmdUeXBlcy4uLiBfX2FyZ3MpCisgICAgeworICAgICAgdHlwZWRlZiBfTWF5YmVfd3JhcF9tZW1iZXJfcG9pbnRlcjxfRnVuY3Rvcj4gX19tYXliZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX21heWJlX3R5cGU6OnR5cGUgX19mdW5jdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIF9CaW5kPF9fZnVuY3Rvcl90eXBlKF9BcmdUeXBlcy4uLik+IF9fcmVzdWx0X3R5cGU7CisgICAgICByZXR1cm4gX19yZXN1bHRfdHlwZShfX21heWJlX3R5cGU6Ol9fZG9fd3JhcChfX2YpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpmb3J3YXJkPF9BcmdUeXBlcz4oX19hcmdzKS4uLik7CisgICAgfSAKKworICAvKioKKyAgICogIEBicmllZiBGdW5jdGlvbiB0ZW1wbGF0ZSBmb3Igc3RkOjpiaW5kLgorICAgKiAgQGluZ3JvdXAgYmluZGVycworICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlc3VsdCwgdHlwZW5hbWUgX0Z1bmN0b3IsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBpbmxpbmUKKyAgICBfQmluZF9yZXN1bHQ8X1Jlc3VsdCwKKwkJIHR5cGVuYW1lIF9NYXliZV93cmFwX21lbWJlcl9wb2ludGVyPF9GdW5jdG9yPjo6dHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfQXJnVHlwZXMuLi4pPgorICAgIGJpbmQoX0Z1bmN0b3IgX19mLCBfQXJnVHlwZXMuLi4gX19hcmdzKQorICAgIHsKKyAgICAgIHR5cGVkZWYgX01heWJlX3dyYXBfbWVtYmVyX3BvaW50ZXI8X0Z1bmN0b3I+IF9fbWF5YmVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19tYXliZV90eXBlOjp0eXBlIF9fZnVuY3Rvcl90eXBlOworICAgICAgdHlwZWRlZiBfQmluZF9yZXN1bHQ8X1Jlc3VsdCwgX19mdW5jdG9yX3R5cGUoX0FyZ1R5cGVzLi4uKT4KKwlfX3Jlc3VsdF90eXBlOworICAgICAgcmV0dXJuIF9fcmVzdWx0X3R5cGUoX19tYXliZV90eXBlOjpfX2RvX3dyYXAoX19mKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJnVHlwZXM+KF9fYXJncykuLi4pOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBFeGNlcHRpb24gY2xhc3MgdGhyb3duIHdoZW4gY2xhc3MgdGVtcGxhdGUgZnVuY3Rpb24ncworICAgKiAgb3BlcmF0b3IoKSBpcyBjYWxsZWQgd2l0aCBhbiBlbXB0eSB0YXJnZXQuCisgICAqICBAaW5ncm91cCBleGNlcHRpb25zCisgICAqLworICBjbGFzcyBiYWRfZnVuY3Rpb25fY2FsbCA6IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbiB7IH07CisKKyAgLyoqCisgICAqICBUaGUgaW50ZWdyYWwgY29uc3RhbnQgZXhwcmVzc2lvbiAwIGNhbiBiZSBjb252ZXJ0ZWQgaW50byBhCisgICAqICBwb2ludGVyIHRvIHRoaXMgdHlwZS4gSXQgaXMgdXNlZCBieSB0aGUgZnVuY3Rpb24gdGVtcGxhdGUgdG8KKyAgICogIGFjY2VwdCBOVUxMIHBvaW50ZXJzLgorICAgKi8KKyAgc3RydWN0IF9NX2NsZWFyX3R5cGU7CisKKyAgLyoqCisgICAqICBUcmFpdCBpZGVudGlmeWluZyAibG9jYXRpb24taW52YXJpYW50IiB0eXBlcywgbWVhbmluZyB0aGF0IHRoZQorICAgKiAgYWRkcmVzcyBvZiB0aGUgb2JqZWN0IChvciBhbnkgb2YgaXRzIG1lbWJlcnMpIHdpbGwgbm90IGVzY2FwZS4KKyAgICogIEFsc28gaW1wbGllcyBhIHRyaXZpYWwgY29weSBjb25zdHJ1Y3RvciBhbmQgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19sb2NhdGlvbl9pbnZhcmlhbnQKKyAgICA6IGludGVncmFsX2NvbnN0YW50PGJvb2wsIChpc19wb2ludGVyPF9UcD46OnZhbHVlCisJCQkgICAgICAgfHwgaXNfbWVtYmVyX3BvaW50ZXI8X1RwPjo6dmFsdWUpPgorICAgIHsgfTsKKworICBjbGFzcyBfVW5kZWZpbmVkX2NsYXNzOworCisgIHVuaW9uIF9Ob2NvcHlfdHlwZXMKKyAgeworICAgIHZvaWQqICAgICAgIF9NX29iamVjdDsKKyAgICBjb25zdCB2b2lkKiBfTV9jb25zdF9vYmplY3Q7CisgICAgdm9pZCAoKl9NX2Z1bmN0aW9uX3BvaW50ZXIpKCk7CisgICAgdm9pZCAoX1VuZGVmaW5lZF9jbGFzczo6Kl9NX21lbWJlcl9wb2ludGVyKSgpOworICB9OworCisgIHVuaW9uIF9BbnlfZGF0YQorICB7CisgICAgdm9pZCogICAgICAgX01fYWNjZXNzKCkgICAgICAgeyByZXR1cm4gJl9NX3BvZF9kYXRhWzBdOyB9CisgICAgY29uc3Qgdm9pZCogX01fYWNjZXNzKCkgY29uc3QgeyByZXR1cm4gJl9NX3BvZF9kYXRhWzBdOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBfVHAmCisgICAgICBfTV9hY2Nlc3MoKQorICAgICAgeyByZXR1cm4gKnN0YXRpY19jYXN0PF9UcCo+KF9NX2FjY2VzcygpKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgY29uc3QgX1RwJgorICAgICAgX01fYWNjZXNzKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICpzdGF0aWNfY2FzdDxjb25zdCBfVHAqPihfTV9hY2Nlc3MoKSk7IH0KKworICAgIF9Ob2NvcHlfdHlwZXMgX01fdW51c2VkOworICAgIGNoYXIgX01fcG9kX2RhdGFbc2l6ZW9mKF9Ob2NvcHlfdHlwZXMpXTsKKyAgfTsKKworICBlbnVtIF9NYW5hZ2VyX29wZXJhdGlvbgorICB7CisgICAgX19nZXRfdHlwZV9pbmZvLAorICAgIF9fZ2V0X2Z1bmN0b3JfcHRyLAorICAgIF9fY2xvbmVfZnVuY3RvciwKKyAgICBfX2Rlc3Ryb3lfZnVuY3RvcgorICB9OworCisgIC8vIFNpbXBsZSB0eXBlIHdyYXBwZXIgdGhhdCBoZWxwcyBhdm9pZCBhbm5veWluZyBjb25zdCBwcm9ibGVtcworICAvLyB3aGVuIGNhc3RpbmcgYmV0d2VlbiB2b2lkIHBvaW50ZXJzIGFuZCBwb2ludGVycy10by1wb2ludGVycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfU2ltcGxlX3R5cGVfd3JhcHBlcgorICAgIHsKKyAgICAgIF9TaW1wbGVfdHlwZV93cmFwcGVyKF9UcCBfX3ZhbHVlKSA6IF9fdmFsdWUoX192YWx1ZSkgeyB9CisKKyAgICAgIF9UcCBfX3ZhbHVlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX2xvY2F0aW9uX2ludmFyaWFudDxfU2ltcGxlX3R5cGVfd3JhcHBlcjxfVHA+ID4KKyAgICA6IF9faXNfbG9jYXRpb25faW52YXJpYW50PF9UcD4KKyAgICB7IH07CisKKyAgLy8gQ29udmVydHMgYSByZWZlcmVuY2UgdG8gYSBmdW5jdGlvbiBvYmplY3QgaW50byBhIGNhbGxhYmxlCisgIC8vIGZ1bmN0aW9uIG9iamVjdC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3I+CisgICAgaW5saW5lIF9GdW5jdG9yJgorICAgIF9fY2FsbGFibGVfZnVuY3RvcihfRnVuY3RvciYgX19mKQorICAgIHsgcmV0dXJuIF9fZjsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9NZW1iZXIsIHR5cGVuYW1lIF9DbGFzcz4KKyAgICBpbmxpbmUgX01lbV9mbjxfTWVtYmVyIF9DbGFzczo6Kj4KKyAgICBfX2NhbGxhYmxlX2Z1bmN0b3IoX01lbWJlciBfQ2xhc3M6OiogJl9fcCkKKyAgICB7IHJldHVybiBtZW1fZm4oX19wKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9NZW1iZXIsIHR5cGVuYW1lIF9DbGFzcz4KKyAgICBpbmxpbmUgX01lbV9mbjxfTWVtYmVyIF9DbGFzczo6Kj4KKyAgICBfX2NhbGxhYmxlX2Z1bmN0b3IoX01lbWJlciBfQ2xhc3M6OiogY29uc3QgJl9fcCkKKyAgICB7IHJldHVybiBtZW1fZm4oX19wKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgY2xhc3MgZnVuY3Rpb247CisKKyAgLy8vIEJhc2UgY2xhc3Mgb2YgYWxsIHBvbHltb3JwaGljIGZ1bmN0aW9uIG9iamVjdCB3cmFwcGVycy4KKyAgY2xhc3MgX0Z1bmN0aW9uX2Jhc2UKKyAgeworICBwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IF9NX21heF9zaXplID0gc2l6ZW9mKF9Ob2NvcHlfdHlwZXMpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBfTV9tYXhfYWxpZ24gPSBfX2FsaWdub2ZfXyhfTm9jb3B5X3R5cGVzKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yPgorICAgICAgY2xhc3MgX0Jhc2VfbWFuYWdlcgorICAgICAgeworICAgICAgcHJvdGVjdGVkOgorCXN0YXRpYyBjb25zdCBib29sIF9fc3RvcmVkX2xvY2FsbHkgPQorICAgICAgICAoX19pc19sb2NhdGlvbl9pbnZhcmlhbnQ8X0Z1bmN0b3I+Ojp2YWx1ZQorICAgICAgICAgJiYgc2l6ZW9mKF9GdW5jdG9yKSA8PSBfTV9tYXhfc2l6ZQorICAgICAgICAgJiYgX19hbGlnbm9mX18oX0Z1bmN0b3IpIDw9IF9NX21heF9hbGlnbgorICAgICAgICAgJiYgKF9NX21heF9hbGlnbiAlIF9fYWxpZ25vZl9fKF9GdW5jdG9yKSA9PSAwKSk7CisJCisJdHlwZWRlZiBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBfX3N0b3JlZF9sb2NhbGx5PiBfTG9jYWxfc3RvcmFnZTsKKworCS8vIFJldHJpZXZlIGEgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gb2JqZWN0CisJc3RhdGljIF9GdW5jdG9yKgorCV9NX2dldF9wb2ludGVyKGNvbnN0IF9BbnlfZGF0YSYgX19zb3VyY2UpCisJeworCSAgY29uc3QgX0Z1bmN0b3IqIF9fcHRyID0KKwkgICAgX19zdG9yZWRfbG9jYWxseT8gJl9fc291cmNlLl9NX2FjY2VzczxfRnVuY3Rvcj4oKQorCSAgICAvKiBoYXZlIHN0b3JlZCBhIHBvaW50ZXIgKi8gOiBfX3NvdXJjZS5fTV9hY2Nlc3M8X0Z1bmN0b3IqPigpOworCSAgcmV0dXJuIGNvbnN0X2Nhc3Q8X0Z1bmN0b3IqPihfX3B0cik7CisJfQorCisJLy8gQ2xvbmUgYSBsb2NhdGlvbi1pbnZhcmlhbnQgZnVuY3Rpb24gb2JqZWN0IHRoYXQgZml0cyB3aXRoaW4KKwkvLyBhbiBfQW55X2RhdGEgc3RydWN0dXJlLgorCXN0YXRpYyB2b2lkCisJX01fY2xvbmUoX0FueV9kYXRhJiBfX2Rlc3QsIGNvbnN0IF9BbnlfZGF0YSYgX19zb3VyY2UsIHRydWVfdHlwZSkKKwl7CisJICBuZXcgKF9fZGVzdC5fTV9hY2Nlc3MoKSkgX0Z1bmN0b3IoX19zb3VyY2UuX01fYWNjZXNzPF9GdW5jdG9yPigpKTsKKwl9CisKKwkvLyBDbG9uZSBhIGZ1bmN0aW9uIG9iamVjdCB0aGF0IGlzIG5vdCBsb2NhdGlvbi1pbnZhcmlhbnQgb3IKKwkvLyB0aGF0IGNhbm5vdCBmaXQgaW50byBhbiBfQW55X2RhdGEgc3RydWN0dXJlLgorCXN0YXRpYyB2b2lkCisJX01fY2xvbmUoX0FueV9kYXRhJiBfX2Rlc3QsIGNvbnN0IF9BbnlfZGF0YSYgX19zb3VyY2UsIGZhbHNlX3R5cGUpCisJeworCSAgX19kZXN0Ll9NX2FjY2VzczxfRnVuY3Rvcio+KCkgPQorCSAgICBuZXcgX0Z1bmN0b3IoKl9fc291cmNlLl9NX2FjY2VzczxfRnVuY3Rvcio+KCkpOworCX0KKworCS8vIERlc3Ryb3lpbmcgYSBsb2NhdGlvbi1pbnZhcmlhbnQgb2JqZWN0IG1heSBzdGlsbCByZXF1aXJlCisJLy8gZGVzdHJ1Y3Rpb24uCisJc3RhdGljIHZvaWQKKwlfTV9kZXN0cm95KF9BbnlfZGF0YSYgX192aWN0aW0sIHRydWVfdHlwZSkKKwl7CisJICBfX3ZpY3RpbS5fTV9hY2Nlc3M8X0Z1bmN0b3I+KCkufl9GdW5jdG9yKCk7CisJfQorCQorCS8vIERlc3Ryb3lpbmcgYW4gb2JqZWN0IGxvY2F0ZWQgb24gdGhlIGhlYXAuCisJc3RhdGljIHZvaWQKKwlfTV9kZXN0cm95KF9BbnlfZGF0YSYgX192aWN0aW0sIGZhbHNlX3R5cGUpCisJeworCSAgZGVsZXRlIF9fdmljdGltLl9NX2FjY2VzczxfRnVuY3Rvcio+KCk7CisJfQorCQorICAgICAgcHVibGljOgorCXN0YXRpYyBib29sCisJX01fbWFuYWdlcihfQW55X2RhdGEmIF9fZGVzdCwgY29uc3QgX0FueV9kYXRhJiBfX3NvdXJjZSwKKwkJICAgX01hbmFnZXJfb3BlcmF0aW9uIF9fb3ApCisJeworCSAgc3dpdGNoIChfX29wKQorCSAgICB7CisjaWZkZWYgX19HWFhfUlRUSQorCSAgICBjYXNlIF9fZ2V0X3R5cGVfaW5mbzoKKwkgICAgICBfX2Rlc3QuX01fYWNjZXNzPGNvbnN0IHR5cGVfaW5mbyo+KCkgPSAmdHlwZWlkKF9GdW5jdG9yKTsKKwkgICAgICBicmVhazsKKyNlbmRpZgorCSAgICBjYXNlIF9fZ2V0X2Z1bmN0b3JfcHRyOgorCSAgICAgIF9fZGVzdC5fTV9hY2Nlc3M8X0Z1bmN0b3IqPigpID0gX01fZ2V0X3BvaW50ZXIoX19zb3VyY2UpOworCSAgICAgIGJyZWFrOworCSAgICAgIAorCSAgICBjYXNlIF9fY2xvbmVfZnVuY3RvcjoKKwkgICAgICBfTV9jbG9uZShfX2Rlc3QsIF9fc291cmNlLCBfTG9jYWxfc3RvcmFnZSgpKTsKKwkgICAgICBicmVhazsKKworCSAgICBjYXNlIF9fZGVzdHJveV9mdW5jdG9yOgorCSAgICAgIF9NX2Rlc3Ryb3koX19kZXN0LCBfTG9jYWxfc3RvcmFnZSgpKTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgcmV0dXJuIGZhbHNlOworCX0KKworCXN0YXRpYyB2b2lkCisJX01faW5pdF9mdW5jdG9yKF9BbnlfZGF0YSYgX19mdW5jdG9yLCBfRnVuY3RvciYmIF9fZikKKwl7IF9NX2luaXRfZnVuY3RvcihfX2Z1bmN0b3IsIHN0ZDo6bW92ZShfX2YpLCBfTG9jYWxfc3RvcmFnZSgpKTsgfQorCQorCXRlbXBsYXRlPHR5cGVuYW1lIF9TaWduYXR1cmU+CisJICBzdGF0aWMgYm9vbAorCSAgX01fbm90X2VtcHR5X2Z1bmN0aW9uKGNvbnN0IGZ1bmN0aW9uPF9TaWduYXR1cmU+JiBfX2YpCisgICAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oX19mKTsgfQorCisJdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorCSAgc3RhdGljIGJvb2wKKwkgIF9NX25vdF9lbXB0eV9mdW5jdGlvbihjb25zdCBfVHAqJiBfX2ZwKQorCSAgeyByZXR1cm4gX19mcDsgfQorCisJdGVtcGxhdGU8dHlwZW5hbWUgX0NsYXNzLCB0eXBlbmFtZSBfVHA+CisJICBzdGF0aWMgYm9vbAorCSAgX01fbm90X2VtcHR5X2Z1bmN0aW9uKF9UcCBfQ2xhc3M6OiogY29uc3QmIF9fbXApCisJICB7IHJldHVybiBfX21wOyB9CisKKwl0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisJICBzdGF0aWMgYm9vbAorCSAgX01fbm90X2VtcHR5X2Z1bmN0aW9uKGNvbnN0IF9UcCYpCisJICB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgIHByaXZhdGU6CisgICAgICAgIHN0YXRpYyB2b2lkCisJX01faW5pdF9mdW5jdG9yKF9BbnlfZGF0YSYgX19mdW5jdG9yLCBfRnVuY3RvciYmIF9fZiwgdHJ1ZV90eXBlKQorCXsgbmV3IChfX2Z1bmN0b3IuX01fYWNjZXNzKCkpIF9GdW5jdG9yKHN0ZDo6bW92ZShfX2YpKTsgfQorCisJc3RhdGljIHZvaWQKKwlfTV9pbml0X2Z1bmN0b3IoX0FueV9kYXRhJiBfX2Z1bmN0b3IsIF9GdW5jdG9yJiYgX19mLCBmYWxzZV90eXBlKQorCXsgX19mdW5jdG9yLl9NX2FjY2VzczxfRnVuY3Rvcio+KCkgPSBuZXcgX0Z1bmN0b3Ioc3RkOjptb3ZlKF9fZikpOyB9CisgICAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3I+CisgICAgICBjbGFzcyBfUmVmX21hbmFnZXIgOiBwdWJsaWMgX0Jhc2VfbWFuYWdlcjxfRnVuY3Rvcio+CisgICAgICB7CisJdHlwZWRlZiBfRnVuY3Rpb25fYmFzZTo6X0Jhc2VfbWFuYWdlcjxfRnVuY3Rvcio+IF9CYXNlOworCisgICAgcHVibGljOgorCXN0YXRpYyBib29sCisJX01fbWFuYWdlcihfQW55X2RhdGEmIF9fZGVzdCwgY29uc3QgX0FueV9kYXRhJiBfX3NvdXJjZSwKKwkJICAgX01hbmFnZXJfb3BlcmF0aW9uIF9fb3ApCisJeworCSAgc3dpdGNoIChfX29wKQorCSAgICB7CisjaWZkZWYgX19HWFhfUlRUSQorCSAgICBjYXNlIF9fZ2V0X3R5cGVfaW5mbzoKKwkgICAgICBfX2Rlc3QuX01fYWNjZXNzPGNvbnN0IHR5cGVfaW5mbyo+KCkgPSAmdHlwZWlkKF9GdW5jdG9yKTsKKwkgICAgICBicmVhazsKKyNlbmRpZgorCSAgICBjYXNlIF9fZ2V0X2Z1bmN0b3JfcHRyOgorCSAgICAgIF9fZGVzdC5fTV9hY2Nlc3M8X0Z1bmN0b3IqPigpID0gKl9CYXNlOjpfTV9nZXRfcG9pbnRlcihfX3NvdXJjZSk7CisJICAgICAgcmV0dXJuIGlzX2NvbnN0PF9GdW5jdG9yPjo6dmFsdWU7CisJICAgICAgYnJlYWs7CisJICAgICAgCisJICAgIGRlZmF1bHQ6CisJICAgICAgX0Jhc2U6Ol9NX21hbmFnZXIoX19kZXN0LCBfX3NvdXJjZSwgX19vcCk7CisJICAgIH0KKwkgIHJldHVybiBmYWxzZTsKKwl9CisKKwlzdGF0aWMgdm9pZAorCV9NX2luaXRfZnVuY3RvcihfQW55X2RhdGEmIF9fZnVuY3RvciwgcmVmZXJlbmNlX3dyYXBwZXI8X0Z1bmN0b3I+IF9fZikKKwl7CisJICAvLyBUQkQ6IFVzZSBhZGRyZXNzX29mIGZ1bmN0aW9uIGluc3RlYWQuCisJICBfQmFzZTo6X01faW5pdF9mdW5jdG9yKF9fZnVuY3RvciwgJl9fZi5nZXQoKSk7CisJfQorICAgICAgfTsKKworICAgIF9GdW5jdGlvbl9iYXNlKCkgOiBfTV9tYW5hZ2VyKDApIHsgfQorICAgIAorICAgIH5fRnVuY3Rpb25fYmFzZSgpCisgICAgeworICAgICAgaWYgKF9NX21hbmFnZXIpCisJX01fbWFuYWdlcihfTV9mdW5jdG9yLCBfTV9mdW5jdG9yLCBfX2Rlc3Ryb3lfZnVuY3Rvcik7CisgICAgfQorCisKKyAgICBib29sIF9NX2VtcHR5KCkgY29uc3QgeyByZXR1cm4gIV9NX21hbmFnZXI7IH0KKworICAgIHR5cGVkZWYgYm9vbCAoKl9NYW5hZ2VyX3R5cGUpKF9BbnlfZGF0YSYsIGNvbnN0IF9BbnlfZGF0YSYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01hbmFnZXJfb3BlcmF0aW9uKTsKKworICAgIF9BbnlfZGF0YSAgICAgX01fZnVuY3RvcjsKKyAgICBfTWFuYWdlcl90eXBlIF9NX21hbmFnZXI7CisgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZSwgdHlwZW5hbWUgX0Z1bmN0b3I+CisgICAgY2xhc3MgX0Z1bmN0aW9uX2hhbmRsZXI7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0Z1bmN0b3IsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBjbGFzcyBfRnVuY3Rpb25faGFuZGxlcjxfUmVzKF9BcmdUeXBlcy4uLiksIF9GdW5jdG9yPgorICAgIDogcHVibGljIF9GdW5jdGlvbl9iYXNlOjpfQmFzZV9tYW5hZ2VyPF9GdW5jdG9yPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0Z1bmN0aW9uX2Jhc2U6Ol9CYXNlX21hbmFnZXI8X0Z1bmN0b3I+IF9CYXNlOworCisgICAgcHVibGljOgorICAgICAgc3RhdGljIF9SZXMKKyAgICAgIF9NX2ludm9rZShjb25zdCBfQW55X2RhdGEmIF9fZnVuY3RvciwgX0FyZ1R5cGVzLi4uIF9fYXJncykKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuICgqX0Jhc2U6Ol9NX2dldF9wb2ludGVyKF9fZnVuY3RvcikpKAorICAgICAgICAgICAgc3RkOjpmb3J3YXJkPF9BcmdUeXBlcz4oX19hcmdzKS4uLik7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3RvciwgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIGNsYXNzIF9GdW5jdGlvbl9oYW5kbGVyPHZvaWQoX0FyZ1R5cGVzLi4uKSwgX0Z1bmN0b3I+CisgICAgOiBwdWJsaWMgX0Z1bmN0aW9uX2Jhc2U6Ol9CYXNlX21hbmFnZXI8X0Z1bmN0b3I+CisgICAgeworICAgICAgdHlwZWRlZiBfRnVuY3Rpb25fYmFzZTo6X0Jhc2VfbWFuYWdlcjxfRnVuY3Rvcj4gX0Jhc2U7CisKKyAgICAgcHVibGljOgorICAgICAgc3RhdGljIHZvaWQKKyAgICAgIF9NX2ludm9rZShjb25zdCBfQW55X2RhdGEmIF9fZnVuY3RvciwgX0FyZ1R5cGVzLi4uIF9fYXJncykKKyAgICAgIHsKKyAgICAgICAgKCpfQmFzZTo6X01fZ2V0X3BvaW50ZXIoX19mdW5jdG9yKSkoCisgICAgICAgICAgICBzdGQ6OmZvcndhcmQ8X0FyZ1R5cGVzPihfX2FyZ3MpLi4uKTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9GdW5jdG9yLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgY2xhc3MgX0Z1bmN0aW9uX2hhbmRsZXI8X1JlcyhfQXJnVHlwZXMuLi4pLCByZWZlcmVuY2Vfd3JhcHBlcjxfRnVuY3Rvcj4gPgorICAgIDogcHVibGljIF9GdW5jdGlvbl9iYXNlOjpfUmVmX21hbmFnZXI8X0Z1bmN0b3I+CisgICAgeworICAgICAgdHlwZWRlZiBfRnVuY3Rpb25fYmFzZTo6X1JlZl9tYW5hZ2VyPF9GdW5jdG9yPiBfQmFzZTsKKworICAgICBwdWJsaWM6CisgICAgICBzdGF0aWMgX1JlcworICAgICAgX01faW52b2tlKGNvbnN0IF9BbnlfZGF0YSYgX19mdW5jdG9yLCBfQXJnVHlwZXMuLi4gX19hcmdzKQorICAgICAgeworICAgICAgICByZXR1cm4gX19jYWxsYWJsZV9mdW5jdG9yKCoqX0Jhc2U6Ol9NX2dldF9wb2ludGVyKF9fZnVuY3RvcikpKAorICAgICAgICAgICAgICBzdGQ6OmZvcndhcmQ8X0FyZ1R5cGVzPihfX2FyZ3MpLi4uKTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgY2xhc3MgX0Z1bmN0aW9uX2hhbmRsZXI8dm9pZChfQXJnVHlwZXMuLi4pLCByZWZlcmVuY2Vfd3JhcHBlcjxfRnVuY3Rvcj4gPgorICAgIDogcHVibGljIF9GdW5jdGlvbl9iYXNlOjpfUmVmX21hbmFnZXI8X0Z1bmN0b3I+CisgICAgeworICAgICAgdHlwZWRlZiBfRnVuY3Rpb25fYmFzZTo6X1JlZl9tYW5hZ2VyPF9GdW5jdG9yPiBfQmFzZTsKKworICAgICBwdWJsaWM6CisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX01faW52b2tlKGNvbnN0IF9BbnlfZGF0YSYgX19mdW5jdG9yLCBfQXJnVHlwZXMuLi4gX19hcmdzKQorICAgICAgeworICAgICAgICBfX2NhbGxhYmxlX2Z1bmN0b3IoKipfQmFzZTo6X01fZ2V0X3BvaW50ZXIoX19mdW5jdG9yKSkoCisgICAgICAgICAgICBzdGQ6OmZvcndhcmQ8X0FyZ1R5cGVzPihfX2FyZ3MpLi4uKTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DbGFzcywgdHlwZW5hbWUgX01lbWJlciwgdHlwZW5hbWUgX1JlcywgCisgICAgICAgICAgIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBjbGFzcyBfRnVuY3Rpb25faGFuZGxlcjxfUmVzKF9BcmdUeXBlcy4uLiksIF9NZW1iZXIgX0NsYXNzOjoqPgorICAgIDogcHVibGljIF9GdW5jdGlvbl9oYW5kbGVyPHZvaWQoX0FyZ1R5cGVzLi4uKSwgX01lbWJlciBfQ2xhc3M6Oio+CisgICAgeworICAgICAgdHlwZWRlZiBfRnVuY3Rpb25faGFuZGxlcjx2b2lkKF9BcmdUeXBlcy4uLiksIF9NZW1iZXIgX0NsYXNzOjoqPgorICAgICAgICBfQmFzZTsKKworICAgICBwdWJsaWM6CisgICAgICBzdGF0aWMgX1JlcworICAgICAgX01faW52b2tlKGNvbnN0IF9BbnlfZGF0YSYgX19mdW5jdG9yLCBfQXJnVHlwZXMuLi4gX19hcmdzKQorICAgICAgeworICAgICAgICByZXR1cm4gbWVtX2ZuKF9CYXNlOjpfTV9nZXRfcG9pbnRlcihfX2Z1bmN0b3IpLT5fX3ZhbHVlKSgKKyAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJnVHlwZXM+KF9fYXJncykuLi4pOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NsYXNzLCB0eXBlbmFtZSBfTWVtYmVyLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgY2xhc3MgX0Z1bmN0aW9uX2hhbmRsZXI8dm9pZChfQXJnVHlwZXMuLi4pLCBfTWVtYmVyIF9DbGFzczo6Kj4KKyAgICA6IHB1YmxpYyBfRnVuY3Rpb25fYmFzZTo6X0Jhc2VfbWFuYWdlcjwKKyAgICAgICAgICAgICAgICAgX1NpbXBsZV90eXBlX3dyYXBwZXI8IF9NZW1iZXIgX0NsYXNzOjoqID4gPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX01lbWJlciBfQ2xhc3M6OiogX0Z1bmN0b3I7CisgICAgICB0eXBlZGVmIF9TaW1wbGVfdHlwZV93cmFwcGVyPF9GdW5jdG9yPiBfV3JhcHBlcjsKKyAgICAgIHR5cGVkZWYgX0Z1bmN0aW9uX2Jhc2U6Ol9CYXNlX21hbmFnZXI8X1dyYXBwZXI+IF9CYXNlOworCisgICAgIHB1YmxpYzoKKyAgICAgIHN0YXRpYyBib29sCisgICAgICBfTV9tYW5hZ2VyKF9BbnlfZGF0YSYgX19kZXN0LCBjb25zdCBfQW55X2RhdGEmIF9fc291cmNlLAorICAgICAgICAgICAgICAgICBfTWFuYWdlcl9vcGVyYXRpb24gX19vcCkKKyAgICAgIHsKKyAgICAgICAgc3dpdGNoIChfX29wKQorCSAgeworI2lmZGVmIF9fR1hYX1JUVEkKKwkgIGNhc2UgX19nZXRfdHlwZV9pbmZvOgorCSAgICBfX2Rlc3QuX01fYWNjZXNzPGNvbnN0IHR5cGVfaW5mbyo+KCkgPSAmdHlwZWlkKF9GdW5jdG9yKTsKKwkgICAgYnJlYWs7CisjZW5kaWYJICAgIAorCSAgY2FzZSBfX2dldF9mdW5jdG9yX3B0cjoKKwkgICAgX19kZXN0Ll9NX2FjY2VzczxfRnVuY3Rvcio+KCkgPQorCSAgICAgICZfQmFzZTo6X01fZ2V0X3BvaW50ZXIoX19zb3VyY2UpLT5fX3ZhbHVlOworCSAgICBicmVhazsKKwkgICAgCisJICBkZWZhdWx0OgorCSAgICBfQmFzZTo6X01fbWFuYWdlcihfX2Rlc3QsIF9fc291cmNlLCBfX29wKTsKKwkgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX01faW52b2tlKGNvbnN0IF9BbnlfZGF0YSYgX19mdW5jdG9yLCBfQXJnVHlwZXMuLi4gX19hcmdzKQorICAgICAgeworCW1lbV9mbihfQmFzZTo6X01fZ2V0X3BvaW50ZXIoX19mdW5jdG9yKS0+X192YWx1ZSkoCisgICAgICAgICAgICBzdGQ6OmZvcndhcmQ8X0FyZ1R5cGVzPihfX2FyZ3MpLi4uKTsKKyAgICAgIH0KKyAgICB9OworCisgIC8qKgorICAgKiAgQGJyaWVmIFByaW1hcnkgY2xhc3MgdGVtcGxhdGUgZm9yIHN0ZDo6ZnVuY3Rpb24uCisgICAqICBAaW5ncm91cCBmdW5jdG9ycworICAgKgorICAgKiAgUG9seW1vcnBoaWMgZnVuY3Rpb24gd3JhcHBlci4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBjbGFzcyBmdW5jdGlvbjxfUmVzKF9BcmdUeXBlcy4uLik+CisgICAgOiBwdWJsaWMgX01heWJlX3VuYXJ5X29yX2JpbmFyeV9mdW5jdGlvbjxfUmVzLCBfQXJnVHlwZXMuLi4+LAorICAgICAgcHJpdmF0ZSBfRnVuY3Rpb25fYmFzZQorICAgIHsKKyAgICAgIHR5cGVkZWYgX1JlcyBfU2lnbmF0dXJlX3R5cGUoX0FyZ1R5cGVzLi4uKTsKKyAgICAgIAorICAgICAgc3RydWN0IF9Vc2VsZXNzIHsgfTsKKyAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1JlcyByZXN1bHRfdHlwZTsKKyAgICAgIAorICAgICAgLy8gWzMuNy4yLjFdIGNvbnN0cnVjdC9jb3B5L2Rlc3Ryb3kKKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIERlZmF1bHQgY29uc3RydWN0IGNyZWF0ZXMgYW4gZW1wdHkgZnVuY3Rpb24gY2FsbCB3cmFwcGVyLgorICAgICAgICogIEBwb3N0IEBjICEoYm9vbCkqdGhpcworICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgZnVuY3Rpb24oKSA6IF9GdW5jdGlvbl9iYXNlKCkgeyB9CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBEZWZhdWx0IGNvbnN0cnVjdCBjcmVhdGVzIGFuIGVtcHR5IGZ1bmN0aW9uIGNhbGwgd3JhcHBlci4KKyAgICAgICAqICBAcG9zdCBAYyAhKGJvb2wpKnRoaXMKKyAgICAgICAqLworICAgICAgZnVuY3Rpb24oX01fY2xlYXJfdHlwZSopIDogX0Z1bmN0aW9uX2Jhc2UoKSB7IH0KKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICVGdW5jdGlvbiBjb3B5IGNvbnN0cnVjdG9yLgorICAgICAgICogIEBwYXJhbSB4IEEgJWZ1bmN0aW9uIG9iamVjdCB3aXRoIGlkZW50aWNhbCBjYWxsIHNpZ25hdHVyZS4KKyAgICAgICAqICBAcG9zdCBAYyAoYm9vbCkqdGhpcyA9PSAoYm9vbCl4CisgICAgICAgKgorICAgICAgICogIFRoZSBuZXdseS1jcmVhdGVkICVmdW5jdGlvbiBjb250YWlucyBhIGNvcHkgb2YgdGhlIHRhcmdldCBvZiBAYQorICAgICAgICogIHggKGlmIGl0IGhhcyBvbmUpLgorICAgICAgICovCisgICAgICBmdW5jdGlvbihjb25zdCBmdW5jdGlvbiYgX194KTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICVGdW5jdGlvbiBtb3ZlIGNvbnN0cnVjdG9yLgorICAgICAgICogIEBwYXJhbSB4IEEgJWZ1bmN0aW9uIG9iamVjdCBydmFsdWUgd2l0aCBpZGVudGljYWwgY2FsbCBzaWduYXR1cmUuCisgICAgICAgKgorICAgICAgICogIFRoZSBuZXdseS1jcmVhdGVkICVmdW5jdGlvbiBjb250YWlucyB0aGUgdGFyZ2V0IG9mIEBhIHgKKyAgICAgICAqICAoaWYgaXQgaGFzIG9uZSkuCisgICAgICAgKi8KKyAgICAgIGZ1bmN0aW9uKGZ1bmN0aW9uJiYgX194KSA6IF9GdW5jdGlvbl9iYXNlKCkKKyAgICAgIHsKKyAgICAgICAgX194LnN3YXAoKnRoaXMpOworICAgICAgfQorCisgICAgICAvLyBUT0RPOiBuZWVkcyBhbGxvY2F0b3JfYXJnX3QKKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEJ1aWxkcyBhICVmdW5jdGlvbiB0aGF0IHRhcmdldHMgYSBjb3B5IG9mIHRoZSBpbmNvbWluZworICAgICAgICogIGZ1bmN0aW9uIG9iamVjdC4KKyAgICAgICAqICBAcGFyYW0gZiBBICVmdW5jdGlvbiBvYmplY3QgdGhhdCBpcyBjYWxsYWJsZSB3aXRoIHBhcmFtZXRlcnMgb2YKKyAgICAgICAqICB0eXBlIEBjIFQxLCBAYyBUMiwgLi4uLCBAYyBUTiBhbmQgcmV0dXJucyBhIHZhbHVlIGNvbnZlcnRpYmxlCisgICAgICAgKiAgdG8gQGMgUmVzLgorICAgICAgICoKKyAgICAgICAqICBUaGUgbmV3bHktY3JlYXRlZCAlZnVuY3Rpb24gb2JqZWN0IHdpbGwgdGFyZ2V0IGEgY29weSBvZiBAYQorICAgICAgICogIGYuIElmIEBhIGYgaXMgQGMgcmVmZXJlbmNlX3dyYXBwZXI8Rj4sIHRoZW4gdGhpcyBmdW5jdGlvbgorICAgICAgICogIG9iamVjdCB3aWxsIGNvbnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlIGZ1bmN0aW9uIG9iamVjdCBAYworICAgICAgICogIGYuZ2V0KCkuIElmIEBhIGYgaXMgYSBOVUxMIGZ1bmN0aW9uIHBvaW50ZXIgb3IgTlVMTAorICAgICAgICogIHBvaW50ZXItdG8tbWVtYmVyLCB0aGUgbmV3bHktY3JlYXRlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgQGEgZiBpcyBhIG5vbi1OVUxMIGZ1bmN0aW9uIHBvaW50ZXIgb3IgYW4gb2JqZWN0IG9mIHR5cGUgQGMKKyAgICAgICAqICByZWZlcmVuY2Vfd3JhcHBlcjxGPiwgdGhpcyBmdW5jdGlvbiB3aWxsIG5vdCB0aHJvdy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3I+CisgICAgICAgIGZ1bmN0aW9uKF9GdW5jdG9yIF9fZiwKKyAgICAgICAgICAgICAgICAgdHlwZW5hbWUgZW5hYmxlX2lmPAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIWlzX2ludGVncmFsPF9GdW5jdG9yPjo6dmFsdWUsIF9Vc2VsZXNzPjo6dHlwZQorICAgICAgICAgICAgICAgICAgID0gX1VzZWxlc3MoKSk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAlRnVuY3Rpb24gYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0geCBBICVmdW5jdGlvbiB3aXRoIGlkZW50aWNhbCBjYWxsIHNpZ25hdHVyZS4KKyAgICAgICAqICBAcG9zdCBAYyAoYm9vbCkqdGhpcyA9PSAoYm9vbCl4CisgICAgICAgKiAgQHJldHVybnMgQGMgKnRoaXMKKyAgICAgICAqCisgICAgICAgKiAgVGhlIHRhcmdldCBvZiBAYSB4IGlzIGNvcGllZCB0byBAYyAqdGhpcy4gSWYgQGEgeCBoYXMgbm8KKyAgICAgICAqICB0YXJnZXQsIHRoZW4gQGMgKnRoaXMgd2lsbCBiZSBlbXB0eS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgQGEgeCB0YXJnZXRzIGEgZnVuY3Rpb24gcG9pbnRlciBvciBhIHJlZmVyZW5jZSB0byBhIGZ1bmN0aW9uCisgICAgICAgKiAgb2JqZWN0LCB0aGVuIHRoaXMgb3BlcmF0aW9uIHdpbGwgbm90IHRocm93IGFuICVleGNlcHRpb24uCisgICAgICAgKi8KKyAgICAgIGZ1bmN0aW9uJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IGZ1bmN0aW9uJiBfX3gpCisgICAgICB7CisgICAgICAgIGZ1bmN0aW9uKF9feCkuc3dhcCgqdGhpcyk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICVGdW5jdGlvbiBtb3ZlLWFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtIHggQSAlZnVuY3Rpb24gcnZhbHVlIHdpdGggaWRlbnRpY2FsIGNhbGwgc2lnbmF0dXJlLgorICAgICAgICogIEByZXR1cm5zIEBjICp0aGlzCisgICAgICAgKgorICAgICAgICogIFRoZSB0YXJnZXQgb2YgQGEgeCBpcyBtb3ZlZCB0byBAYyAqdGhpcy4gSWYgQGEgeCBoYXMgbm8KKyAgICAgICAqICB0YXJnZXQsIHRoZW4gQGMgKnRoaXMgd2lsbCBiZSBlbXB0eS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgQGEgeCB0YXJnZXRzIGEgZnVuY3Rpb24gcG9pbnRlciBvciBhIHJlZmVyZW5jZSB0byBhIGZ1bmN0aW9uCisgICAgICAgKiAgb2JqZWN0LCB0aGVuIHRoaXMgb3BlcmF0aW9uIHdpbGwgbm90IHRocm93IGFuICVleGNlcHRpb24uCisgICAgICAgKi8KKyAgICAgIGZ1bmN0aW9uJgorICAgICAgb3BlcmF0b3I9KGZ1bmN0aW9uJiYgX194KQorICAgICAgeworICAgICAgICBmdW5jdGlvbihzdGQ6Om1vdmUoX194KSkuc3dhcCgqdGhpcyk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICVGdW5jdGlvbiBhc3NpZ25tZW50IHRvIHplcm8uCisgICAgICAgKiAgQHBvc3QgQGMgIShib29sKSp0aGlzCisgICAgICAgKiAgQHJldHVybnMgQGMgKnRoaXMKKyAgICAgICAqCisgICAgICAgKiAgVGhlIHRhcmdldCBvZiBAYyAqdGhpcyBpcyBkZWFsbG9jYXRlZCwgbGVhdmluZyBpdCBlbXB0eS4KKyAgICAgICAqLworICAgICAgZnVuY3Rpb24mCisgICAgICBvcGVyYXRvcj0oX01fY2xlYXJfdHlwZSopCisgICAgICB7CisgICAgICAgIGlmIChfTV9tYW5hZ2VyKQorCSAgeworCSAgICBfTV9tYW5hZ2VyKF9NX2Z1bmN0b3IsIF9NX2Z1bmN0b3IsIF9fZGVzdHJveV9mdW5jdG9yKTsKKwkgICAgX01fbWFuYWdlciA9IDA7CisJICAgIF9NX2ludm9rZXIgPSAwOworCSAgfQorICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAlRnVuY3Rpb24gYXNzaWdubWVudCB0byBhIG5ldyB0YXJnZXQuCisgICAgICAgKiAgQHBhcmFtIGYgQSAlZnVuY3Rpb24gb2JqZWN0IHRoYXQgaXMgY2FsbGFibGUgd2l0aCBwYXJhbWV0ZXJzIG9mCisgICAgICAgKiAgdHlwZSBAYyBUMSwgQGMgVDIsIC4uLiwgQGMgVE4gYW5kIHJldHVybnMgYSB2YWx1ZSBjb252ZXJ0aWJsZQorICAgICAgICogIHRvIEBjIFJlcy4KKyAgICAgICAqICBAcmV0dXJuIEBjICp0aGlzCisgICAgICAgKgorICAgICAgICogIFRoaXMgICVmdW5jdGlvbiBvYmplY3Qgd3JhcHBlciB3aWxsIHRhcmdldCBhIGNvcHkgb2YgQGEKKyAgICAgICAqICBmLiBJZiBAYSBmIGlzIEBjIHJlZmVyZW5jZV93cmFwcGVyPEY+LCB0aGVuIHRoaXMgZnVuY3Rpb24KKyAgICAgICAqICBvYmplY3Qgd2lsbCBjb250YWluIGEgcmVmZXJlbmNlIHRvIHRoZSBmdW5jdGlvbiBvYmplY3QgQGMKKyAgICAgICAqICBmLmdldCgpLiBJZiBAYSBmIGlzIGEgTlVMTCBmdW5jdGlvbiBwb2ludGVyIG9yIE5VTEwKKyAgICAgICAqICBwb2ludGVyLXRvLW1lbWJlciwgQGMgdGhpcyBvYmplY3Qgd2lsbCBiZSBlbXB0eS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgQGEgZiBpcyBhIG5vbi1OVUxMIGZ1bmN0aW9uIHBvaW50ZXIgb3IgYW4gb2JqZWN0IG9mIHR5cGUgQGMKKyAgICAgICAqICByZWZlcmVuY2Vfd3JhcHBlcjxGPiwgdGhpcyBmdW5jdGlvbiB3aWxsIG5vdCB0aHJvdy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3I+CisgICAgICAgIHR5cGVuYW1lIGVuYWJsZV9pZjwhaXNfaW50ZWdyYWw8X0Z1bmN0b3I+Ojp2YWx1ZSwgZnVuY3Rpb24mPjo6dHlwZQorCW9wZXJhdG9yPShfRnVuY3RvciYmIF9fZikKKwl7CisJICBmdW5jdGlvbihzdGQ6OmZvcndhcmQ8X0Z1bmN0b3I+KF9fZikpLnN3YXAoKnRoaXMpOworCSAgcmV0dXJuICp0aGlzOworCX0KKworICAgICAgLy8vIEBvdmVybG9hZAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3I+CisgICAgICAgIHR5cGVuYW1lIGVuYWJsZV9pZjwhaXNfaW50ZWdyYWw8X0Z1bmN0b3I+Ojp2YWx1ZSwgZnVuY3Rpb24mPjo6dHlwZQorCW9wZXJhdG9yPShyZWZlcmVuY2Vfd3JhcHBlcjxfRnVuY3Rvcj4gX19mKQorCXsKKwkgIGZ1bmN0aW9uKF9fZikuc3dhcCgqdGhpcyk7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICAvLyBbMy43LjIuMl0gZnVuY3Rpb24gbW9kaWZpZXJzCisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBTd2FwIHRoZSB0YXJnZXRzIG9mIHR3byAlZnVuY3Rpb24gb2JqZWN0cy4KKyAgICAgICAqICBAcGFyYW0gZiBBICVmdW5jdGlvbiB3aXRoIGlkZW50aWNhbCBjYWxsIHNpZ25hdHVyZS4KKyAgICAgICAqCisgICAgICAgKiAgU3dhcCB0aGUgdGFyZ2V0cyBvZiBAYyB0aGlzIGZ1bmN0aW9uIG9iamVjdCBhbmQgQGEgZi4gVGhpcworICAgICAgICogIGZ1bmN0aW9uIHdpbGwgbm90IHRocm93IGFuICVleGNlcHRpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQgc3dhcChmdW5jdGlvbiYgX194KQorICAgICAgeworCS8qIFdlIGNhbm5vdCBwZXJmb3JtIGRpcmVjdCBhc3NpZ25tZW50cyBvZiB0aGUgX01fZnVuY3RvcgorCSAgIHBhcnRzIGFzIHRoZXkgYXJlIG9mIHR5cGUgX0FueV9kYXRhIGFuZCBoYXZlIGEgZGlmZmVyZW50CisJICAgZHluYW1pYyB0eXBlLiAgRG9pbmcgc28gd291bGQgdmlvbGF0ZSB0eXBlLWJhc2VkIGFsaWFzaW5nCisJICAgcnVsZXMgYW5kIGxlYWQgdG8gc3B1cmlvdXMgbWlzY29tcGlsYXRpb25zLgorCSAgIEluc3RlYWQgcGVyZm9ybSBhIGJ5dGV3aXNlIGV4Y2hhbmdlIG9mIHRoZSBtZW1vcnkgb2YKKwkgICBib3RoIFBPRCBvYmplY3RzLgorCSAgID8/PyAgQSB3b3Jkd2lzZSBleGNoYW5nZSBob25vcmluZyBhbGlnbm1lbnQgb2YgX01fZnVuY3RvcgorCSAgIHdvdWxkIGJlIG1vcmUgZWZmaWNpZW50LiAgU2VlIFBSNDI4NDUuICAqLworCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplb2YgKF9NX2Z1bmN0b3IuX01fcG9kX2RhdGEpOyArK2kpCisJICBzdGQ6OnN3YXAgKF9NX2Z1bmN0b3IuX01fcG9kX2RhdGFbaV0sIF9feC5fTV9mdW5jdG9yLl9NX3BvZF9kYXRhW2ldKTsKKwlfTWFuYWdlcl90eXBlIF9fb2xkX21hbmFnZXIgPSBfTV9tYW5hZ2VyOworCV9NX21hbmFnZXIgPSBfX3guX01fbWFuYWdlcjsKKwlfX3guX01fbWFuYWdlciA9IF9fb2xkX21hbmFnZXI7CisJX0ludm9rZXJfdHlwZSBfX29sZF9pbnZva2VyID0gX01faW52b2tlcjsKKwlfTV9pbnZva2VyID0gX194Ll9NX2ludm9rZXI7CisJX194Ll9NX2ludm9rZXIgPSBfX29sZF9pbnZva2VyOworICAgICAgfQorCisgICAgICAvLyBUT0RPOiBuZWVkcyBhbGxvY2F0b3JfYXJnX3QKKyAgICAgIC8qCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3RvciwgdHlwZW5hbWUgX0FsbG9jPgorICAgICAgICB2b2lkCisgICAgICAgIGFzc2lnbihfRnVuY3RvciYmIF9fZiwgY29uc3QgX0FsbG9jJiBfX2EpCisgICAgICAgIHsKKyAgICAgICAgICBmdW5jdGlvbihhbGxvY2F0b3JfYXJnLCBfX2EsCisgICAgICAgICAgICAgICAgICAgc3RkOjpmb3J3YXJkPF9GdW5jdG9yPihfX2YpKS5zd2FwKCp0aGlzKTsKKyAgICAgICAgfQorICAgICAgKi8KKyAgICAgIAorICAgICAgLy8gWzMuNy4yLjNdIGZ1bmN0aW9uIGNhcGFjaXR5CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBEZXRlcm1pbmUgaWYgdGhlICVmdW5jdGlvbiB3cmFwcGVyIGhhcyBhIHRhcmdldC4KKyAgICAgICAqCisgICAgICAgKiAgQHJldHVybiBAYyB0cnVlIHdoZW4gdGhpcyAlZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGEgdGFyZ2V0LAorICAgICAgICogIG9yIEBjIGZhbHNlIHdoZW4gaXQgaXMgZW1wdHkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBub3QgdGhyb3cgYW4gJWV4Y2VwdGlvbi4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgICB7IHJldHVybiAhX01fZW1wdHkoKTsgfQorCisgICAgICAvLyBbMy43LjIuNF0gZnVuY3Rpb24gaW52b2NhdGlvbgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgSW52b2tlcyB0aGUgZnVuY3Rpb24gdGFyZ2V0ZWQgYnkgQGMgKnRoaXMuCisgICAgICAgKiAgQHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgdGFyZ2V0LgorICAgICAgICogIEB0aHJvd3MgYmFkX2Z1bmN0aW9uX2NhbGwgd2hlbiBAYyAhKGJvb2wpKnRoaXMKKyAgICAgICAqCisgICAgICAgKiAgVGhlIGZ1bmN0aW9uIGNhbGwgb3BlcmF0b3IgaW52b2tlcyB0aGUgdGFyZ2V0IGZ1bmN0aW9uIG9iamVjdAorICAgICAgICogIHN0b3JlZCBieSBAYyB0aGlzLgorICAgICAgICovCisgICAgICBfUmVzIG9wZXJhdG9yKCkoX0FyZ1R5cGVzLi4uIF9fYXJncykgY29uc3Q7CisKKyNpZmRlZiBfX0dYWF9SVFRJCisgICAgICAvLyBbMy43LjIuNV0gZnVuY3Rpb24gdGFyZ2V0IGFjY2VzcworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIERldGVybWluZSB0aGUgdHlwZSBvZiB0aGUgdGFyZ2V0IG9mIHRoaXMgZnVuY3Rpb24gb2JqZWN0CisgICAgICAgKiAgd3JhcHBlci4KKyAgICAgICAqCisgICAgICAgKiAgQHJldHVybnMgdGhlIHR5cGUgaWRlbnRpZmllciBvZiB0aGUgdGFyZ2V0IGZ1bmN0aW9uIG9iamVjdCwgb3IKKyAgICAgICAqICBAYyB0eXBlaWQodm9pZCkgaWYgQGMgIShib29sKSp0aGlzLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IHRocm93IGFuICVleGNlcHRpb24uCisgICAgICAgKi8KKyAgICAgIGNvbnN0IHR5cGVfaW5mbyYgdGFyZ2V0X3R5cGUoKSBjb25zdDsKKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEFjY2VzcyB0aGUgc3RvcmVkIHRhcmdldCBmdW5jdGlvbiBvYmplY3QuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHN0b3JlZCB0YXJnZXQgZnVuY3Rpb24gb2JqZWN0LAorICAgICAgICogIGlmIEBjIHR5cGVpZChGdW5jdG9yKS5lcXVhbHModGFyZ2V0X3R5cGUoKSk7IG90aGVyd2lzZSwgYSBOVUxMCisgICAgICAgKiAgcG9pbnRlci4KKyAgICAgICAqCisgICAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IHRocm93IGFuICVleGNlcHRpb24uCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yPiAgICAgICBfRnVuY3RvciogdGFyZ2V0KCk7CisgICAgICAKKyAgICAgIC8vLyBAb3ZlcmxvYWQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yPiBjb25zdCBfRnVuY3RvciogdGFyZ2V0KCkgY29uc3Q7CisjZW5kaWYKKworICAgICAgLy8gZGVsZXRlZCBvdmVybG9hZHMKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMyLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXMyPgorCXZvaWQgb3BlcmF0b3I9PShjb25zdCBmdW5jdGlvbjxfUmVzMihfQXJnVHlwZXMyLi4uKT4mKSBjb25zdCA9IGRlbGV0ZTsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMyLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXMyPgorCXZvaWQgb3BlcmF0b3IhPShjb25zdCBmdW5jdGlvbjxfUmVzMihfQXJnVHlwZXMyLi4uKT4mKSBjb25zdCA9IGRlbGV0ZTsKKworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIF9SZXMgKCpfSW52b2tlcl90eXBlKShjb25zdCBfQW55X2RhdGEmLCBfQXJnVHlwZXMuLi4pOworICAgICAgX0ludm9rZXJfdHlwZSBfTV9pbnZva2VyOworICB9OworCisgIC8vIE91dC1vZi1saW5lIG1lbWJlciBkZWZpbml0aW9ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIGZ1bmN0aW9uPF9SZXMoX0FyZ1R5cGVzLi4uKT46OgorICAgIGZ1bmN0aW9uKGNvbnN0IGZ1bmN0aW9uJiBfX3gpCisgICAgOiBfRnVuY3Rpb25fYmFzZSgpCisgICAgeworICAgICAgaWYgKHN0YXRpY19jYXN0PGJvb2w+KF9feCkpCisJeworCSAgX01faW52b2tlciA9IF9feC5fTV9pbnZva2VyOworCSAgX01fbWFuYWdlciA9IF9feC5fTV9tYW5hZ2VyOworCSAgX194Ll9NX21hbmFnZXIoX01fZnVuY3RvciwgX194Ll9NX2Z1bmN0b3IsIF9fY2xvbmVfZnVuY3Rvcik7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3I+CisgICAgICBmdW5jdGlvbjxfUmVzKF9BcmdUeXBlcy4uLik+OjoKKyAgICAgIGZ1bmN0aW9uKF9GdW5jdG9yIF9fZiwKKwkgICAgICAgdHlwZW5hbWUgZW5hYmxlX2lmPAorCSAgICAgICAgICAgICAgICAhaXNfaW50ZWdyYWw8X0Z1bmN0b3I+Ojp2YWx1ZSwgX1VzZWxlc3M+Ojp0eXBlKQorICAgICAgOiBfRnVuY3Rpb25fYmFzZSgpCisgICAgICB7CisJdHlwZWRlZiBfRnVuY3Rpb25faGFuZGxlcjxfU2lnbmF0dXJlX3R5cGUsIF9GdW5jdG9yPiBfTXlfaGFuZGxlcjsKKworCWlmIChfTXlfaGFuZGxlcjo6X01fbm90X2VtcHR5X2Z1bmN0aW9uKF9fZikpCisJICB7CisJICAgIF9NX2ludm9rZXIgPSAmX015X2hhbmRsZXI6Ol9NX2ludm9rZTsKKwkgICAgX01fbWFuYWdlciA9ICZfTXlfaGFuZGxlcjo6X01fbWFuYWdlcjsKKwkgICAgX015X2hhbmRsZXI6Ol9NX2luaXRfZnVuY3RvcihfTV9mdW5jdG9yLCBzdGQ6Om1vdmUoX19mKSk7CisJICB9CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIF9SZXMKKyAgICBmdW5jdGlvbjxfUmVzKF9BcmdUeXBlcy4uLik+OjoKKyAgICBvcGVyYXRvcigpKF9BcmdUeXBlcy4uLiBfX2FyZ3MpIGNvbnN0CisgICAgeworICAgICAgaWYgKF9NX2VtcHR5KCkpCisgICAgICAgIF9fdGhyb3dfYmFkX2Z1bmN0aW9uX2NhbGwoKTsKKyAgICAgIHJldHVybiBfTV9pbnZva2VyKF9NX2Z1bmN0b3IsIHN0ZDo6Zm9yd2FyZDxfQXJnVHlwZXM+KF9fYXJncykuLi4pOworICAgIH0KKworI2lmZGVmIF9fR1hYX1JUVEkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIGNvbnN0IHR5cGVfaW5mbyYKKyAgICBmdW5jdGlvbjxfUmVzKF9BcmdUeXBlcy4uLik+OjoKKyAgICB0YXJnZXRfdHlwZSgpIGNvbnN0CisgICAgeworICAgICAgaWYgKF9NX21hbmFnZXIpCisgICAgICAgIHsKKyAgICAgICAgICBfQW55X2RhdGEgX190eXBlaW5mb19yZXN1bHQ7CisgICAgICAgICAgX01fbWFuYWdlcihfX3R5cGVpbmZvX3Jlc3VsdCwgX01fZnVuY3RvciwgX19nZXRfdHlwZV9pbmZvKTsKKyAgICAgICAgICByZXR1cm4gKl9fdHlwZWluZm9fcmVzdWx0Ll9NX2FjY2Vzczxjb25zdCB0eXBlX2luZm8qPigpOworICAgICAgICB9CisgICAgICBlbHNlCisJcmV0dXJuIHR5cGVpZCh2b2lkKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yPgorICAgICAgX0Z1bmN0b3IqCisgICAgICBmdW5jdGlvbjxfUmVzKF9BcmdUeXBlcy4uLik+OjoKKyAgICAgIHRhcmdldCgpCisgICAgICB7CisJaWYgKHR5cGVpZChfRnVuY3RvcikgPT0gdGFyZ2V0X3R5cGUoKSAmJiBfTV9tYW5hZ2VyKQorCSAgeworCSAgICBfQW55X2RhdGEgX19wdHI7CisJICAgIGlmIChfTV9tYW5hZ2VyKF9fcHRyLCBfTV9mdW5jdG9yLCBfX2dldF9mdW5jdG9yX3B0cikKKwkJJiYgIWlzX2NvbnN0PF9GdW5jdG9yPjo6dmFsdWUpCisJICAgICAgcmV0dXJuIDA7CisJICAgIGVsc2UKKwkgICAgICByZXR1cm4gX19wdHIuX01fYWNjZXNzPF9GdW5jdG9yKj4oKTsKKwkgIH0KKwllbHNlCisJICByZXR1cm4gMDsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3I+CisgICAgICBjb25zdCBfRnVuY3RvcioKKyAgICAgIGZ1bmN0aW9uPF9SZXMoX0FyZ1R5cGVzLi4uKT46OgorICAgICAgdGFyZ2V0KCkgY29uc3QKKyAgICAgIHsKKwlpZiAodHlwZWlkKF9GdW5jdG9yKSA9PSB0YXJnZXRfdHlwZSgpICYmIF9NX21hbmFnZXIpCisJICB7CisJICAgIF9BbnlfZGF0YSBfX3B0cjsKKwkgICAgX01fbWFuYWdlcihfX3B0ciwgX01fZnVuY3RvciwgX19nZXRfZnVuY3Rvcl9wdHIpOworCSAgICByZXR1cm4gX19wdHIuX01fYWNjZXNzPGNvbnN0IF9GdW5jdG9yKj4oKTsKKwkgIH0KKwllbHNlCisJICByZXR1cm4gMDsKKyAgICAgIH0KKyNlbmRpZgorCisgIC8vIFsyMC43LjE1LjIuNl0gbnVsbCBwb2ludGVyIGNvbXBhcmlzb25zCisKKyAgLyoqCisgICAqICBAYnJpZWYgQ29tcGFyZXMgYSBwb2x5bW9ycGhpYyBmdW5jdGlvbiBvYmplY3Qgd3JhcHBlciBhZ2FpbnN0IDAKKyAgICogICh0aGUgTlVMTCBwb2ludGVyKS4KKyAgICogIEByZXR1cm5zIEBjIHRydWUgaWYgdGhlIHdyYXBwZXIgaGFzIG5vIHRhcmdldCwgQGMgZmFsc2Ugb3RoZXJ3aXNlCisgICAqCisgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IHRocm93IGFuICVleGNlcHRpb24uCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgZnVuY3Rpb248X1JlcyhfQXJncy4uLik+JiBfX2YsIF9NX2NsZWFyX3R5cGUqKQorICAgIHsgcmV0dXJuICFzdGF0aWNfY2FzdDxib29sPihfX2YpOyB9CisKKyAgLy8vIEBvdmVybG9hZAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oX01fY2xlYXJfdHlwZSosIGNvbnN0IGZ1bmN0aW9uPF9SZXMoX0FyZ3MuLi4pPiYgX19mKQorICAgIHsgcmV0dXJuICFzdGF0aWNfY2FzdDxib29sPihfX2YpOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgQ29tcGFyZXMgYSBwb2x5bW9ycGhpYyBmdW5jdGlvbiBvYmplY3Qgd3JhcHBlciBhZ2FpbnN0IDAKKyAgICogICh0aGUgTlVMTCBwb2ludGVyKS4KKyAgICogIEByZXR1cm5zIEBjIGZhbHNlIGlmIHRoZSB3cmFwcGVyIGhhcyBubyB0YXJnZXQsIEBjIHRydWUgb3RoZXJ3aXNlCisgICAqCisgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IHRocm93IGFuICVleGNlcHRpb24uCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgZnVuY3Rpb248X1JlcyhfQXJncy4uLik+JiBfX2YsIF9NX2NsZWFyX3R5cGUqKQorICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KF9fZik7IH0KKworICAvLy8gQG92ZXJsb2FkCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShfTV9jbGVhcl90eXBlKiwgY29uc3QgZnVuY3Rpb248X1JlcyhfQXJncy4uLik+JiBfX2YpCisgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oX19mKTsgfQorCisgIC8vIFsyMC43LjE1LjIuN10gc3BlY2lhbGl6ZWQgYWxnb3JpdGhtcworCisgIC8qKgorICAgKiAgQGJyaWVmIFN3YXAgdGhlIHRhcmdldHMgb2YgdHdvIHBvbHltb3JwaGljIGZ1bmN0aW9uIG9iamVjdCB3cmFwcGVycy4KKyAgICoKKyAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBub3QgdGhyb3cgYW4gJWV4Y2VwdGlvbi4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChmdW5jdGlvbjxfUmVzKF9BcmdzLi4uKT4mIF9feCwgZnVuY3Rpb248X1JlcyhfQXJncy4uLik+JiBfX3kpCisgICAgeyBfX3guc3dhcChfX3kpOyB9Cit9CisKKyNlbmRpZiAvLyBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworCisjZW5kaWYgLy8gX0dMSUJDWFhfRlVOQ1RJT05BTApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9mdXR1cmUgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2Z1dHVyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTc2ODJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9mdXR1cmUKQEAgLTAsMCArMSwxMzY3IEBACisvLyA8ZnV0dXJlPiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGZ1dHVyZQorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9GVVRVUkUKKyNkZWZpbmUgX0dMSUJDWFhfRlVUVVJFIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaWZuZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisjIGluY2x1ZGUgPGJpdHMvYysrMHhfd2FybmluZy5oPgorI2Vsc2UKKworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHRocmVhZD4KKyNpbmNsdWRlIDxjb25kaXRpb25fdmFyaWFibGU+CisjaW5jbHVkZSA8c3lzdGVtX2Vycm9yPgorI2luY2x1ZGUgPGV4Y2VwdGlvbj4KKyNpbmNsdWRlIDxhdG9taWM+CisjaW5jbHVkZSA8Yml0cy9mdW5jdGV4Y2VwdC5oPgorCituYW1lc3BhY2Ugc3RkCit7CisgIC8qKgorICAgKiBAZGVmZ3JvdXAgZnV0dXJlcyBGdXR1cmVzCisgICAqIEBpbmdyb3VwIGNvbmN1cnJlbmN5CisgICAqCisgICAqIENsYXNzZXMgZm9yIGZ1dHVyZXMgc3VwcG9ydC4KKyAgICogQHsKKyAgICovCisKKyAgLy8vIEVycm9yIGNvZGUgZm9yIGZ1dHVyZXMKKyAgZW51bSBjbGFzcyBmdXR1cmVfZXJyYworICB7CisgICAgYnJva2VuX3Byb21pc2UsCisgICAgZnV0dXJlX2FscmVhZHlfcmV0cmlldmVkLAorICAgIHByb21pc2VfYWxyZWFkeV9zYXRpc2ZpZWQsCisgICAgbm9fc3RhdGUKKyAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGlzX2Vycm9yX2NvZGVfZW51bTxmdXR1cmVfZXJyYz4gOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKworICAvLy8gUG9pbnRzIHRvIGEgc3RhdGljYWxseS1hbGxvY2F0ZWQgb2JqZWN0IGRlcml2ZWQgZnJvbSBlcnJvcl9jYXRlZ29yeS4KKyAgZXh0ZXJuIGNvbnN0IGVycm9yX2NhdGVnb3J5KiBjb25zdCBmdXR1cmVfY2F0ZWdvcnk7CisKKyAgLy8gVE9ETzogcmVxdWlyZXMgY29uc3RleHByCisgIGlubGluZSBlcnJvcl9jb2RlIG1ha2VfZXJyb3JfY29kZShmdXR1cmVfZXJyYyBfX2VycmMpCisgIHsgcmV0dXJuIGVycm9yX2NvZGUoc3RhdGljX2Nhc3Q8aW50PihfX2VycmMpLCAqZnV0dXJlX2NhdGVnb3J5KTsgfQorCisgIC8vIFRPRE86IHJlcXVpcmVzIGNvbnN0ZXhwcgorICBpbmxpbmUgZXJyb3JfY29uZGl0aW9uIG1ha2VfZXJyb3JfY29uZGl0aW9uKGZ1dHVyZV9lcnJjIF9fZXJyYykKKyAgeyByZXR1cm4gZXJyb3JfY29uZGl0aW9uKHN0YXRpY19jYXN0PGludD4oX19lcnJjKSwgKmZ1dHVyZV9jYXRlZ29yeSk7IH0KKworICAvKioKKyAgICogIEBicmllZiBFeGNlcHRpb24gdHlwZSB0aHJvd24gYnkgZnV0dXJlcy4KKyAgICogIEBpbmdyb3VwIGV4Y2VwdGlvbnMKKyAgICovCisgIGNsYXNzIGZ1dHVyZV9lcnJvciA6IHB1YmxpYyBsb2dpY19lcnJvcgorICB7CisgICAgZXJyb3JfY29kZSAJCQlfTV9jb2RlOworCisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBmdXR1cmVfZXJyb3IoZXJyb3JfY29kZSBfX2VjKQorICAgIDogbG9naWNfZXJyb3IoInN0ZDo6ZnV0dXJlX2Vycm9yIiksIF9NX2NvZGUoX19lYykKKyAgICB7IH0KKworICAgIHZpcnR1YWwgfmZ1dHVyZV9lcnJvcigpIHRocm93KCk7CisKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIAorICAgIHdoYXQoKSBjb25zdCB0aHJvdygpOworCisgICAgY29uc3QgZXJyb3JfY29kZSYgCisgICAgY29kZSgpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gX01fY29kZTsgfQorICB9OworCisgIC8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzPgorICAgIGNsYXNzIGZ1dHVyZTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzPgorICAgIGNsYXNzIHNoYXJlZF9mdXR1cmU7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlcz4KKyAgICBjbGFzcyBhdG9taWNfZnV0dXJlOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TaWduYXR1cmU+IAorICAgIGNsYXNzIHBhY2thZ2VkX3Rhc2s7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlcz4KKyAgICBjbGFzcyBwcm9taXNlOworCisgIGVudW0gY2xhc3MgbGF1bmNoIHsgYW55LCBhc3luYywgc3luYyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GbiwgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgZnV0dXJlPHR5cGVuYW1lIHJlc3VsdF9vZjxfRm4oX0FyZ3MuLi4pPjo6dHlwZT4KKyAgICBhc3luYyhsYXVuY2ggX19wb2xpY3ksIF9GbiYmIF9fZm4sIF9BcmdzJiYuLi4gX19hcmdzKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm4sIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIHR5cGVuYW1lCisgICAgZW5hYmxlX2lmPCFpc19zYW1lPHR5cGVuYW1lIGRlY2F5PF9Gbj46OnR5cGUsIGxhdW5jaD46OnZhbHVlLAorICAgICAgICAgICAgICBmdXR1cmU8ZGVjbHR5cGUoc3RkOjpkZWNsdmFsPF9Gbj4oKShzdGQ6OmRlY2x2YWw8X0FyZ3M+KCkuLi4pKT4KKyAgICAgICAgICAgICA+Ojp0eXBlCisgICAgYXN5bmMoX0ZuJiYgX19mbiwgX0FyZ3MmJi4uLiBfX2FyZ3MpOworCisjaWYgZGVmaW5lZChfR0xJQkNYWF9IQVNfR1RIUkVBRFMpICYmIGRlZmluZWQoX0dMSUJDWFhfVVNFX0M5OV9TVERJTlRfVFIxKSBcCisgICYmIGRlZmluZWQoX0dMSUJDWFhfQVRPTUlDX0JVSUxUSU5TXzQpCisKKyAgLy8vIEJhc2UgY2xhc3MgYW5kIGVuY2xvc2luZyBzY29wZS4KKyAgc3RydWN0IF9fZnV0dXJlX2Jhc2UKKyAgeworICAgIC8vLyBCYXNlIGNsYXNzIGZvciByZXN1bHRzLgorICAgIHN0cnVjdCBfUmVzdWx0X2Jhc2UKKyAgICB7CisgICAgICBleGNlcHRpb25fcHRyCQlfTV9lcnJvcjsKKworICAgICAgX1Jlc3VsdF9iYXNlKCkgPSBkZWZhdWx0OworICAgICAgX1Jlc3VsdF9iYXNlKGNvbnN0IF9SZXN1bHRfYmFzZSYpID0gZGVsZXRlOworICAgICAgX1Jlc3VsdF9iYXNlJiBvcGVyYXRvcj0oY29uc3QgX1Jlc3VsdF9iYXNlJikgPSBkZWxldGU7CisKKyAgICAgIC8vIF9NX2Rlc3Ryb3koKSBhbGxvd3MgZGVyaXZlZCBjbGFzc2VzIHRvIGNvbnRyb2wgZGVhbGxvY2F0aW9uCisgICAgICB2aXJ0dWFsIHZvaWQgX01fZGVzdHJveSgpID0gMDsKKworICAgICAgc3RydWN0IF9EZWxldGVyCisgICAgICB7CisJdm9pZCBvcGVyYXRvcigpKF9SZXN1bHRfYmFzZSogX19mcikgY29uc3QgeyBfX2ZyLT5fTV9kZXN0cm95KCk7IH0KKyAgICAgIH07CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB+X1Jlc3VsdF9iYXNlKCk7CisgICAgfTsKKworICAgIC8vLyBSZXN1bHQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlcz4KKyAgICAgIHN0cnVjdCBfUmVzdWx0IDogX1Jlc3VsdF9iYXNlCisgICAgICB7CisgICAgICBwcml2YXRlOgorCXR5cGVkZWYgYWxpZ25tZW50X29mPF9SZXM+CQkJCV9fYV9vZjsKKwl0eXBlZGVmIGFsaWduZWRfc3RvcmFnZTxzaXplb2YoX1JlcyksIF9fYV9vZjo6dmFsdWU+CV9fYWxpZ25fc3RvcmFnZTsKKwl0eXBlZGVmIHR5cGVuYW1lIF9fYWxpZ25fc3RvcmFnZTo6dHlwZQkJCV9fYWxpZ25fdHlwZTsKKworCV9fYWxpZ25fdHlwZQkJX01fc3RvcmFnZTsKKwlib29sIAkJCV9NX2luaXRpYWxpemVkOworCisgICAgICBwdWJsaWM6CisJX1Jlc3VsdCgpIDogX01faW5pdGlhbGl6ZWQoKSB7IH0KKwkKKwl+X1Jlc3VsdCgpCisJeworCSAgaWYgKF9NX2luaXRpYWxpemVkKQorCSAgICBfTV92YWx1ZSgpLn5fUmVzKCk7CisJfQorCisJLy8gUmV0dXJuIGx2YWx1ZSwgZnV0dXJlIHdpbGwgYWRkIGNvbnN0IG9yIHJ2YWx1ZS1yZWZlcmVuY2UKKwlfUmVzJiAKKwlfTV92YWx1ZSgpIHsgcmV0dXJuICpzdGF0aWNfY2FzdDxfUmVzKj4oX01fYWRkcigpKTsgfQorCisJdm9pZAorCV9NX3NldChjb25zdCBfUmVzJiBfX3JlcykKKwl7CisJICA6Om5ldyAoX01fYWRkcigpKSBfUmVzKF9fcmVzKTsKKwkgIF9NX2luaXRpYWxpemVkID0gdHJ1ZTsKKwl9CisKKwl2b2lkCisJX01fc2V0KF9SZXMmJiBfX3JlcykKKwl7CisJICA6Om5ldyAoX01fYWRkcigpKSBfUmVzKHN0ZDo6bW92ZShfX3JlcykpOworCSAgX01faW5pdGlhbGl6ZWQgPSB0cnVlOworCX0KKworICAgICAgcHJpdmF0ZToKKwl2b2lkIF9NX2Rlc3Ryb3koKSB7IGRlbGV0ZSB0aGlzOyB9CisKKwl2b2lkKiBfTV9hZGRyKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dm9pZCo+KCZfTV9zdG9yYWdlKTsgfQorICAgIH07CisKKyAgICAvLyBUT0RPOiB1c2UgdGVtcGxhdGUgYWxpYXMgd2hlbiBhdmFpbGFibGUKKyAgICAvKgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlcz4KKyAgICAgIHVzaW5nIF9QdHIgPSB1bmlxdWVfcHRyPF9SZXMsIF9SZXN1bHRfYmFzZTo6X0RlbGV0ZXI+OworICAgICovCisgICAgLy8vIEEgdW5pcXVlX3B0ciBiYXNlZCBvbiB0aGUgaW5zdGFudGlhdGluZyB0eXBlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXM+CisgICAgICBzdHJ1Y3QgX1B0cgorICAgICAgeworCXR5cGVkZWYgdW5pcXVlX3B0cjxfUmVzLCBfUmVzdWx0X2Jhc2U6Ol9EZWxldGVyPiB0eXBlOworICAgICAgfTsKKworICAgIC8vIFRPRE86IHVzZSB3aGVuIGFsbG9jYXRvcl9hcmdfdCBhdmFpbGFibGUKKyAgICAvKgorICAgIC8vLyBSZXN1bHRfYWxsb2MuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0FsbG9jPgorICAgICAgc3RydWN0IF9SZXN1bHRfYWxsb2MgOiBfUmVzdWx0PF9SZXM+CisgICAgICB7CisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8X1Jlc3VsdF9hbGxvYz46Om90aGVyCisgICAgICAgICAgX19hbGxvY2F0b3JfdHlwZTsKKworICAgICAgICBleHBsaWNpdAorCV9SZXN1bHRfYWxsb2MoY29uc3QgX0FsbG9jJiBfX2EpIDogX1Jlc3VsdDxfUmVzPigpLCBfTV9hbGxvYyhfX2EpCisgICAgICAgIHsgfQorCQorICAgICAgcHJpdmF0ZToKKwl2b2lkIF9NX2Rlc3Ryb3koKQorICAgICAgICB7CisgICAgICAgICAgX19hbGxvY2F0b3JfdHlwZSBfX2EoX01fYWxsb2MpOworICAgICAgICAgIF9fYS5kZXN0cm95KHRoaXMpOworICAgICAgICAgIF9fYS5kZWFsbG9jYXRlKHRoaXMsIDEpOworICAgICAgICB9CisKKyAgICAgICAgX19hbGxvY2F0b3JfdHlwZSBfTV9hbGxvYzsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICAgIHN0YXRpYyB0eXBlbmFtZSBfUHRyPF9SZXN1bHRfYWxsb2M8X1JlcywgX0FsbG9jYXRvcj4+Ojp0eXBlCisgICAgICBfU19hbGxvY2F0ZV9yZXN1bHQoY29uc3QgX0FsbG9jYXRvciYgX19hKQorICAgICAgeworICAgICAgICB0eXBlZGVmIF9SZXN1bHRfYWxsb2M8X1JlcywgX0FsbG9jYXRvcj4JX19yZXN1bHRfdHlwZTsKKyAgICAgICAgdHlwZW5hbWUgX19yZXN1bHRfdHlwZTo6X19hbGxvY2F0b3JfdHlwZSBfX2EyKF9fYSk7CisgICAgICAgIF9fcmVzdWx0X3R5cGUqIF9fcCA9IF9fYTIuYWxsb2NhdGUoMSk7CisgICAgICAgIF9fdHJ5CisgICAgICAgIHsKKyAgICAgICAgICBfX2EyLmNvbnN0cnVjdChfX3AsIF9fYSk7CisgICAgICAgIH0KKyAgICAgICAgX19jYXRjaCguLi4pCisgICAgICAgIHsKKyAgICAgICAgICBfX2EyLmRlYWxsb2NhdGUoX19wLCAxKTsKKyAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHlwZW5hbWUgX1B0cjxfX3Jlc3VsdF90eXBlPjo6dHlwZShfX3ApOworICAgICAgfQorICAgICovCisKKworICAgIC8vLyBTaGFyZWQgc3RhdGUgYmV0d2VlbiBhIHByb21pc2UgYW5kIG9uZSBvciBtb3JlIGFzc29jaWF0ZWQgZnV0dXJlcy4KKyAgICBjbGFzcyBfU3RhdGUKKyAgICB7CisgICAgICB0eXBlZGVmIF9QdHI8X1Jlc3VsdF9iYXNlPjo6dHlwZSBfUHRyX3R5cGU7CisKKyAgICAgIF9QdHJfdHlwZQkJCV9NX3Jlc3VsdDsKKyAgICAgIG11dGV4ICAgICAgICAgICAgICAgCV9NX211dGV4OworICAgICAgY29uZGl0aW9uX3ZhcmlhYmxlICAJX01fY29uZDsKKyAgICAgIGF0b21pY19mbGFnICAgICAgICAgCV9NX3JldHJpZXZlZDsKKyAgICAgIG9uY2VfZmxhZwkJCV9NX29uY2U7CisKKyAgICBwdWJsaWM6CisgICAgICBfU3RhdGUoKSA6IF9NX3Jlc3VsdCgpLCBfTV9yZXRyaWV2ZWQoQVRPTUlDX0ZMQUdfSU5JVCkgeyB9CisKKyAgICAgIF9TdGF0ZShjb25zdCBfU3RhdGUmKSA9IGRlbGV0ZTsKKyAgICAgIF9TdGF0ZSYgb3BlcmF0b3I9KGNvbnN0IF9TdGF0ZSYpID0gZGVsZXRlOworCisgICAgICBfUmVzdWx0X2Jhc2UmCisgICAgICB3YWl0KCkKKyAgICAgIHsKKwlfTV9ydW5fZGVmZXJyZWQoKTsKKwl1bmlxdWVfbG9jazxtdXRleD4gX19sb2NrKF9NX211dGV4KTsKKwlpZiAoIV9NX3JlYWR5KCkpCisJICBfTV9jb25kLndhaXQoX19sb2NrLCBzdGQ6OmJpbmQ8Ym9vbD4oJl9TdGF0ZTo6X01fcmVhZHksIHRoaXMpKTsKKwlyZXR1cm4gKl9NX3Jlc3VsdDsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcCwgdHlwZW5hbWUgX1BlcmlvZD4KKyAgICAgICAgYm9vbAorICAgICAgICB3YWl0X2Zvcihjb25zdCBjaHJvbm86OmR1cmF0aW9uPF9SZXAsIF9QZXJpb2Q+JiBfX3JlbCkKKyAgICAgICAgeworCSAgdW5pcXVlX2xvY2s8bXV0ZXg+IF9fbG9jayhfTV9tdXRleCk7CisJICBhdXRvIF9fYm91bmQgPSBzdGQ6OmJpbmQ8Ym9vbD4oJl9TdGF0ZTo6X01fcmVhZHksIHRoaXMpOworCSAgcmV0dXJuIF9NX3JlYWR5KCkgfHwgX01fY29uZC53YWl0X2ZvcihfX2xvY2ssIF9fcmVsLCBfX2JvdW5kKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DbG9jaywgdHlwZW5hbWUgX0R1cmF0aW9uPgorICAgICAgICBib29sCisgICAgICAgIHdhaXRfdW50aWwoY29uc3QgY2hyb25vOjp0aW1lX3BvaW50PF9DbG9jaywgX0R1cmF0aW9uPiYgX19hYnMpCisgICAgICAgIHsKKwkgIHVuaXF1ZV9sb2NrPG11dGV4PiBfX2xvY2soX01fbXV0ZXgpOworCSAgYXV0byBfX2JvdW5kID0gc3RkOjpiaW5kPGJvb2w+KCZfU3RhdGU6Ol9NX3JlYWR5LCB0aGlzKTsKKwkgIHJldHVybiBfTV9yZWFkeSgpIHx8IF9NX2NvbmQud2FpdF91bnRpbChfX2xvY2ssIF9fYWJzLCBfX2JvdW5kKTsKKwl9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3NldF9yZXN1bHQoZnVuY3Rpb248X1B0cl90eXBlKCk+IF9fcmVzLCBib29sIF9faWdub3JlX2ZhaWx1cmUgPSBmYWxzZSkKKyAgICAgIHsKKyAgICAgICAgYm9vbCBfX3NldCA9IF9faWdub3JlX2ZhaWx1cmU7CisgICAgICAgIC8vIGFsbCBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIGFyZSBzZXJpYWxpemVkLAorICAgICAgICAvLyBzaWRlLWVmZmVjdHMgb2YgaW52b2tpbmcgX19yZXMgb25seSBoYXBwZW4gb25jZQorICAgICAgICBjYWxsX29uY2UoX01fb25jZSwgbWVtX2ZuKCZfU3RhdGU6Ol9NX2RvX3NldCksIHRoaXMsIHJlZihfX3JlcyksCisgICAgICAgICAgICByZWYoX19zZXQpKTsKKyAgICAgICAgaWYgKCFfX3NldCkKKyAgICAgICAgICBfX3Rocm93X2Z1dHVyZV9lcnJvcihpbnQoZnV0dXJlX2VycmM6OnByb21pc2VfYWxyZWFkeV9zYXRpc2ZpZWQpKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01fYnJlYWtfcHJvbWlzZShfUHRyX3R5cGUgX19yZXMpCisgICAgICB7CisJaWYgKHN0YXRpY19jYXN0PGJvb2w+KF9fcmVzKSkKKwkgIHsKKwkgICAgZXJyb3JfY29kZSBfX2VjKG1ha2VfZXJyb3JfY29kZShmdXR1cmVfZXJyYzo6YnJva2VuX3Byb21pc2UpKTsKKwkgICAgX19yZXMtPl9NX2Vycm9yID0gY29weV9leGNlcHRpb24oZnV0dXJlX2Vycm9yKF9fZWMpKTsKKwkgICAgeworCSAgICAgIGxvY2tfZ3VhcmQ8bXV0ZXg+IF9fbG9jayhfTV9tdXRleCk7CisJICAgICAgX01fcmVzdWx0LnN3YXAoX19yZXMpOworCSAgICB9CisJICAgIF9NX2NvbmQubm90aWZ5X2FsbCgpOworCSAgfQorICAgICAgfQorCisgICAgICAvLyBDYWxsZWQgd2hlbiB0aGlzIG9iamVjdCBpcyBwYXNzZWQgdG8gYSBmdXR1cmUuCisgICAgICB2b2lkCisgICAgICBfTV9zZXRfcmV0cmlldmVkX2ZsYWcoKQorICAgICAgeworCWlmIChfTV9yZXRyaWV2ZWQudGVzdF9hbmRfc2V0KCkpCisJICBfX3Rocm93X2Z1dHVyZV9lcnJvcihpbnQoZnV0dXJlX2VycmM6OmZ1dHVyZV9hbHJlYWR5X3JldHJpZXZlZCkpOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfQXJnPgorICAgICAgICBzdHJ1Y3QgX1NldHRlcjsKKworICAgICAgLy8gc2V0IGx2YWx1ZXMKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9Bcmc+CisgICAgICAgIHN0cnVjdCBfU2V0dGVyPF9SZXMsIF9BcmcmPgorICAgICAgICB7CisgICAgICAgICAgLy8gY2hlY2sgdGhpcyBpcyBvbmx5IHVzZWQgYnkgcHJvbWlzZTxSPjo6c2V0X3ZhbHVlKGNvbnN0IFImKQorICAgICAgICAgIC8vIG9yIHByb21pc2U8Uj46OnNldF92YWx1ZShSJikKKyAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGlzX3NhbWU8X1JlcywgX0FyZyY+Ojp2YWx1ZSAgLy8gcHJvbWlzZTxSJj4KKyAgICAgICAgICAgICAgfHwgaXNfc2FtZTxjb25zdCBfUmVzLCBfQXJnPjo6dmFsdWUsICAvLyBwcm9taXNlPFI+CisgICAgICAgICAgICAgICJJbnZhbGlkIHNwZWNpYWxpc2F0aW9uIik7CisKKyAgICAgICAgICB0eXBlbmFtZSBwcm9taXNlPF9SZXM+OjpfUHRyX3R5cGUgb3BlcmF0b3IoKSgpCisgICAgICAgICAgeworICAgICAgICAgICAgX1N0YXRlOjpfU19jaGVjayhfTV9wcm9taXNlLT5fTV9mdXR1cmUpOworICAgICAgICAgICAgX01fcHJvbWlzZS0+X01fc3RvcmFnZS0+X01fc2V0KF9NX2FyZyk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9NX3Byb21pc2UtPl9NX3N0b3JhZ2UpOworICAgICAgICAgIH0KKyAgICAgICAgICBwcm9taXNlPF9SZXM+KiAgICBfTV9wcm9taXNlOworICAgICAgICAgIF9BcmcmICAgICAgICAgICAgIF9NX2FyZzsKKyAgICAgICAgfTsKKworICAgICAgLy8gc2V0IHJ2YWx1ZXMKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXM+CisgICAgICAgIHN0cnVjdCBfU2V0dGVyPF9SZXMsIF9SZXMmJj4KKyAgICAgICAgeworICAgICAgICAgIHR5cGVuYW1lIHByb21pc2U8X1Jlcz46Ol9QdHJfdHlwZSBvcGVyYXRvcigpKCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBfU3RhdGU6Ol9TX2NoZWNrKF9NX3Byb21pc2UtPl9NX2Z1dHVyZSk7CisgICAgICAgICAgICBfTV9wcm9taXNlLT5fTV9zdG9yYWdlLT5fTV9zZXQoc3RkOjptb3ZlKF9NX2FyZykpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShfTV9wcm9taXNlLT5fTV9zdG9yYWdlKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcHJvbWlzZTxfUmVzPiogICAgX01fcHJvbWlzZTsKKyAgICAgICAgICBfUmVzJiAgICAgICAgICAgICBfTV9hcmc7CisgICAgICAgIH07CisKKyAgICAgIHN0cnVjdCBfX2V4Y2VwdGlvbl9wdHJfdGFnIHsgfTsKKworICAgICAgLy8gc2V0IGV4Y2VwdGlvbnMKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXM+CisgICAgICAgIHN0cnVjdCBfU2V0dGVyPF9SZXMsIF9fZXhjZXB0aW9uX3B0cl90YWc+CisgICAgICAgIHsKKyAgICAgICAgICB0eXBlbmFtZSBwcm9taXNlPF9SZXM+OjpfUHRyX3R5cGUgb3BlcmF0b3IoKSgpCisgICAgICAgICAgeworICAgICAgICAgICAgX1N0YXRlOjpfU19jaGVjayhfTV9wcm9taXNlLT5fTV9mdXR1cmUpOworICAgICAgICAgICAgX01fcHJvbWlzZS0+X01fc3RvcmFnZS0+X01fZXJyb3IgPSBfTV9leDsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmUoX01fcHJvbWlzZS0+X01fc3RvcmFnZSk7CisgICAgICAgICAgfQorCisgICAgICAgICAgcHJvbWlzZTxfUmVzPiogICBfTV9wcm9taXNlOworICAgICAgICAgIGV4Y2VwdGlvbl9wdHImICAgIF9NX2V4OworICAgICAgICB9OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfQXJnPgorICAgICAgICBzdGF0aWMgX1NldHRlcjxfUmVzLCBfQXJnJiY+CisgICAgICAgIF9fc2V0dGVyKHByb21pc2U8X1Jlcz4qIF9fcHJvbSwgX0FyZyYmIF9fYXJnKQorICAgICAgICB7CisgICAgICAgICAgcmV0dXJuIF9TZXR0ZXI8X1JlcywgX0FyZyYmPnsgX19wcm9tLCBfX2FyZyB9OworICAgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXM+CisgICAgICAgIHN0YXRpYyBfU2V0dGVyPF9SZXMsIF9fZXhjZXB0aW9uX3B0cl90YWc+CisgICAgICAgIF9fc2V0dGVyKGV4Y2VwdGlvbl9wdHImIF9fZXgsIHByb21pc2U8X1Jlcz4qIF9fcHJvbSkKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiBfU2V0dGVyPF9SZXMsIF9fZXhjZXB0aW9uX3B0cl90YWc+eyBfX3Byb20sIF9fZXggfTsKKyAgICAgICAgfQorCisgICAgICBzdGF0aWMgX1NldHRlcjx2b2lkLCB2b2lkPgorICAgICAgX19zZXR0ZXIocHJvbWlzZTx2b2lkPiogX19wcm9tKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBzdGF0aWMgYm9vbAorICAgICAgICBfU19jaGVjayhjb25zdCBzaGFyZWRfcHRyPF9UcD4mIF9fcCkKKyAgICAgICAgeworICAgICAgICAgIGlmICghc3RhdGljX2Nhc3Q8Ym9vbD4oX19wKSkKKyAgICAgICAgICAgIF9fdGhyb3dfZnV0dXJlX2Vycm9yKChpbnQpZnV0dXJlX2VycmM6Om5vX3N0YXRlKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RvX3NldChmdW5jdGlvbjxfUHRyX3R5cGUoKT4mIF9fZiwgYm9vbCYgX19zZXQpCisgICAgICB7CisgICAgICAgIF9QdHJfdHlwZSBfX3JlcyA9IF9fZigpOworICAgICAgICB7CisgICAgICAgICAgbG9ja19ndWFyZDxtdXRleD4gX19sb2NrKF9NX211dGV4KTsKKyAgICAgICAgICBfTV9yZXN1bHQuc3dhcChfX3Jlcyk7CisgICAgICAgIH0KKyAgICAgICAgX01fY29uZC5ub3RpZnlfYWxsKCk7CisgICAgICAgIF9fc2V0ID0gdHJ1ZTsKKyAgICAgIH0KKworICAgICAgYm9vbCBfTV9yZWFkeSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KF9NX3Jlc3VsdCk7IH0KKworICAgICAgdmlydHVhbCB2b2lkIF9NX3J1bl9kZWZlcnJlZCgpIHsgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzPgorICAgICAgY2xhc3MgX0RlZmVycmVkX3N0YXRlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlcz4KKyAgICAgIGNsYXNzIF9Bc3luY19zdGF0ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgICBjbGFzcyBfVGFza19zdGF0ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9TdGF0ZVQsIHR5cGVuYW1lIF9SZXMgPSB0eXBlbmFtZSBfU3RhdGVUOjpfUmVzX3R5cGU+CisgICAgICBzdHJ1Y3QgX1Rhc2tfc2V0dGVyOworICB9OworCisgIGlubGluZSBfX2Z1dHVyZV9iYXNlOjpfUmVzdWx0X2Jhc2U6On5fUmVzdWx0X2Jhc2UoKSA9IGRlZmF1bHQ7CisKKyAgLy8vIFBhcnRpYWwgc3BlY2lhbGl6YXRpb24gZm9yIHJlZmVyZW5jZSB0eXBlcy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlcz4KKyAgICBzdHJ1Y3QgX19mdXR1cmVfYmFzZTo6X1Jlc3VsdDxfUmVzJj4gOiBfX2Z1dHVyZV9iYXNlOjpfUmVzdWx0X2Jhc2UKKyAgICB7CisgICAgICBfUmVzdWx0KCkgOiBfTV92YWx1ZV9wdHIoKSB7IH0KKworICAgICAgdm9pZCBfTV9zZXQoX1JlcyYgX19yZXMpIHsgX01fdmFsdWVfcHRyID0gJl9fcmVzOyB9CisKKyAgICAgIF9SZXMmIF9NX2dldCgpIHsgcmV0dXJuICpfTV92YWx1ZV9wdHI7IH0KKworICAgIHByaXZhdGU6CisgICAgICBfUmVzKiAJCQlfTV92YWx1ZV9wdHI7CisgICAgICAKKyAgICAgIHZvaWQgX01fZGVzdHJveSgpIHsgZGVsZXRlIHRoaXM7IH0KKyAgICB9OworCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBmb3Igdm9pZC4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2Z1dHVyZV9iYXNlOjpfUmVzdWx0PHZvaWQ+IDogX19mdXR1cmVfYmFzZTo6X1Jlc3VsdF9iYXNlCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB2b2lkIF9NX2Rlc3Ryb3koKSB7IGRlbGV0ZSB0aGlzOyB9CisgICAgfTsKKworCisgIC8vLyBDb21tb24gaW1wbGVtZW50YXRpb24gZm9yIGZ1dHVyZSBhbmQgc2hhcmVkX2Z1dHVyZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlcz4KKyAgICBjbGFzcyBfX2Jhc2ljX2Z1dHVyZSA6IHB1YmxpYyBfX2Z1dHVyZV9iYXNlCisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIHR5cGVkZWYgc2hhcmVkX3B0cjxfU3RhdGU+CQlfX3N0YXRlX3R5cGU7CisgICAgICB0eXBlZGVmIF9fZnV0dXJlX2Jhc2U6Ol9SZXN1bHQ8X1Jlcz4mCV9fcmVzdWx0X3R5cGU7CisKKyAgICBwcml2YXRlOgorICAgICAgX19zdGF0ZV90eXBlIAkJX01fc3RhdGU7CisKKyAgICBwdWJsaWM6CisgICAgICAvLyBEaXNhYmxlIGNvcHlpbmcuCisgICAgICBfX2Jhc2ljX2Z1dHVyZShjb25zdCBfX2Jhc2ljX2Z1dHVyZSYpID0gZGVsZXRlOworICAgICAgX19iYXNpY19mdXR1cmUmIG9wZXJhdG9yPShjb25zdCBfX2Jhc2ljX2Z1dHVyZSYpID0gZGVsZXRlOworCisgICAgICBib29sIAorICAgICAgdmFsaWQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPihfTV9zdGF0ZSk7IH0KKworICAgICAgdm9pZCAKKyAgICAgIHdhaXQoKSBjb25zdCB7IF9NX3N0YXRlLT53YWl0KCk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcCwgdHlwZW5hbWUgX1BlcmlvZD4KKyAgICAgICAgYm9vbAorICAgICAgICB3YWl0X2Zvcihjb25zdCBjaHJvbm86OmR1cmF0aW9uPF9SZXAsIF9QZXJpb2Q+JiBfX3JlbCkgY29uc3QKKyAgICAgICAgeyByZXR1cm4gX01fc3RhdGUtPndhaXRfZm9yKF9fcmVsKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2xvY2ssIHR5cGVuYW1lIF9EdXJhdGlvbj4KKyAgICAgICAgYm9vbAorICAgICAgICB3YWl0X3VudGlsKGNvbnN0IGNocm9ubzo6dGltZV9wb2ludDxfQ2xvY2ssIF9EdXJhdGlvbj4mIF9fYWJzKSBjb25zdAorICAgICAgICB7IHJldHVybiBfTV9zdGF0ZS0+d2FpdF91bnRpbChfX2Ficyk7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIC8vLyBXYWl0IGZvciB0aGUgc3RhdGUgdG8gYmUgcmVhZHkgYW5kIHJldGhyb3cgYW55IHN0b3JlZCBleGNlcHRpb24KKyAgICAgIF9fcmVzdWx0X3R5cGUKKyAgICAgIF9NX2dldF9yZXN1bHQoKQorICAgICAgeworICAgICAgICBfUmVzdWx0X2Jhc2UmIF9fcmVzID0gX01fc3RhdGUtPndhaXQoKTsKKyAgICAgICAgaWYgKCEoX19yZXMuX01fZXJyb3IgPT0gMCkpCisgICAgICAgICAgcmV0aHJvd19leGNlcHRpb24oX19yZXMuX01fZXJyb3IpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8X19yZXN1bHRfdHlwZT4oX19yZXMpOworICAgICAgfQorCisgICAgICB2b2lkIF9NX3N3YXAoX19iYXNpY19mdXR1cmUmIF9fdGhhdCkKKyAgICAgIHsKKyAgICAgICAgX01fc3RhdGUuc3dhcChfX3RoYXQuX01fc3RhdGUpOworICAgICAgfQorCisgICAgICAvLyBDb25zdHJ1Y3Rpb24gb2YgYSBmdXR1cmUgYnkgcHJvbWlzZTo6Z2V0X2Z1dHVyZSgpCisgICAgICBleHBsaWNpdAorICAgICAgX19iYXNpY19mdXR1cmUoY29uc3QgX19zdGF0ZV90eXBlJiBfX3N0YXRlKSA6IF9NX3N0YXRlKF9fc3RhdGUpCisgICAgICB7CisgICAgICAgIF9TdGF0ZTo6X1NfY2hlY2soX01fc3RhdGUpOworICAgICAgICBfTV9zdGF0ZS0+X01fc2V0X3JldHJpZXZlZF9mbGFnKCk7CisgICAgICB9CisKKyAgICAgIC8vIENvcHkgY29uc3RydWN0aW9uIGZyb20gYSBzaGFyZWRfZnV0dXJlCisgICAgICBleHBsaWNpdAorICAgICAgX19iYXNpY19mdXR1cmUoY29uc3Qgc2hhcmVkX2Z1dHVyZTxfUmVzPiYpOworCisgICAgICAvLyBNb3ZlIGNvbnN0cnVjdGlvbiBmcm9tIGEgc2hhcmVkX2Z1dHVyZQorICAgICAgZXhwbGljaXQKKyAgICAgIF9fYmFzaWNfZnV0dXJlKHNoYXJlZF9mdXR1cmU8X1Jlcz4mJik7CisKKyAgICAgIC8vIE1vdmUgY29uc3RydWN0aW9uIGZyb20gYSBmdXR1cmUKKyAgICAgIGV4cGxpY2l0CisgICAgICBfX2Jhc2ljX2Z1dHVyZShmdXR1cmU8X1Jlcz4mJik7CisKKyAgICAgIF9fYmFzaWNfZnV0dXJlKCkgeyB9CisKKyAgICAgIHN0cnVjdCBfUmVzZXQKKyAgICAgIHsKKyAgICAgICAgZXhwbGljaXQgX1Jlc2V0KF9fYmFzaWNfZnV0dXJlJiBfX2Z1dCkgOiBfTV9mdXQoX19mdXQpIHsgfQorICAgICAgICB+X1Jlc2V0KCkgeyBfTV9mdXQuX01fc3RhdGUucmVzZXQoKTsgfQorICAgICAgICBfX2Jhc2ljX2Z1dHVyZSYgX01fZnV0OworICAgICAgfTsKKyAgICB9OworCisKKyAgLy8vIFByaW1hcnkgdGVtcGxhdGUgZm9yIGZ1dHVyZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlcz4KKyAgICBjbGFzcyBmdXR1cmUgOiBwdWJsaWMgX19iYXNpY19mdXR1cmU8X1Jlcz4KKyAgICB7CisgICAgICBmcmllbmQgY2xhc3MgcHJvbWlzZTxfUmVzPjsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lPiBmcmllbmQgY2xhc3MgcGFja2FnZWRfdGFzazsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GbiwgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIGZyaWVuZCBmdXR1cmU8dHlwZW5hbWUgcmVzdWx0X29mPF9GbihfQXJncy4uLik+Ojp0eXBlPgorICAgICAgICBhc3luYyhsYXVuY2gsIF9GbiYmLCBfQXJncyYmLi4uKTsKKworICAgICAgdHlwZWRlZiBfX2Jhc2ljX2Z1dHVyZTxfUmVzPiBfQmFzZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZV90eXBlOjpfX3N0YXRlX3R5cGUgX19zdGF0ZV90eXBlOworCisgICAgICBleHBsaWNpdAorICAgICAgZnV0dXJlKGNvbnN0IF9fc3RhdGVfdHlwZSYgX19zdGF0ZSkgOiBfQmFzZV90eXBlKF9fc3RhdGUpIHsgfQorCisgICAgcHVibGljOgorICAgICAgZnV0dXJlKCkgOiBfQmFzZV90eXBlKCkgeyB9CisKKyAgICAgIC8vLyBNb3ZlIGNvbnN0cnVjdG9yCisgICAgICBmdXR1cmUoZnV0dXJlJiYgX191ZikgOiBfQmFzZV90eXBlKHN0ZDo6bW92ZShfX3VmKSkgeyB9CisKKyAgICAgIC8vIERpc2FibGUgY29weWluZworICAgICAgZnV0dXJlKGNvbnN0IGZ1dHVyZSYpID0gZGVsZXRlOworICAgICAgZnV0dXJlJiBvcGVyYXRvcj0oY29uc3QgZnV0dXJlJikgPSBkZWxldGU7CisKKyAgICAgIGZ1dHVyZSYgb3BlcmF0b3I9KGZ1dHVyZSYmIF9fZnV0KQorICAgICAgeworICAgICAgICBmdXR1cmUoc3RkOjptb3ZlKF9fZnV0KSkuX01fc3dhcCgqdGhpcyk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLy8vIFJldHJpZXZpbmcgdGhlIHZhbHVlCisgICAgICBfUmVzCisgICAgICBnZXQoKQorICAgICAgeworICAgICAgICB0eXBlbmFtZSBfQmFzZV90eXBlOjpfUmVzZXQgX19yZXNldCgqdGhpcyk7CisgICAgICAgIHJldHVybiBzdGQ6Om1vdmUodGhpcy0+X01fZ2V0X3Jlc3VsdCgpLl9NX3ZhbHVlKCkpOworICAgICAgfQorICAgIH07CisgCisgIC8vLyBQYXJ0aWFsIHNwZWNpYWxpemF0aW9uIGZvciBmdXR1cmU8UiY+CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXM+CisgICAgY2xhc3MgZnV0dXJlPF9SZXMmPiA6IHB1YmxpYyBfX2Jhc2ljX2Z1dHVyZTxfUmVzJj4KKyAgICB7CisgICAgICBmcmllbmQgY2xhc3MgcHJvbWlzZTxfUmVzJj47CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZT4gZnJpZW5kIGNsYXNzIHBhY2thZ2VkX3Rhc2s7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm4sIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICBmcmllbmQgZnV0dXJlPHR5cGVuYW1lIHJlc3VsdF9vZjxfRm4oX0FyZ3MuLi4pPjo6dHlwZT4KKyAgICAgICAgYXN5bmMobGF1bmNoLCBfRm4mJiwgX0FyZ3MmJi4uLik7CisKKyAgICAgIHR5cGVkZWYgX19iYXNpY19mdXR1cmU8X1JlcyY+IF9CYXNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlX3R5cGU6Ol9fc3RhdGVfdHlwZSBfX3N0YXRlX3R5cGU7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBmdXR1cmUoY29uc3QgX19zdGF0ZV90eXBlJiBfX3N0YXRlKSA6IF9CYXNlX3R5cGUoX19zdGF0ZSkgeyB9CisKKyAgICBwdWJsaWM6CisgICAgICBmdXR1cmUoKSA6IF9CYXNlX3R5cGUoKSB7IH0KKworICAgICAgLy8vIE1vdmUgY29uc3RydWN0b3IKKyAgICAgIGZ1dHVyZShmdXR1cmUmJiBfX3VmKSA6IF9CYXNlX3R5cGUoc3RkOjptb3ZlKF9fdWYpKSB7IH0KKworICAgICAgLy8gRGlzYWJsZSBjb3B5aW5nCisgICAgICBmdXR1cmUoY29uc3QgZnV0dXJlJikgPSBkZWxldGU7CisgICAgICBmdXR1cmUmIG9wZXJhdG9yPShjb25zdCBmdXR1cmUmKSA9IGRlbGV0ZTsKKworICAgICAgZnV0dXJlJiBvcGVyYXRvcj0oZnV0dXJlJiYgX19mdXQpCisgICAgICB7CisgICAgICAgIGZ1dHVyZShzdGQ6Om1vdmUoX19mdXQpKS5fTV9zd2FwKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvLy8gUmV0cmlldmluZyB0aGUgdmFsdWUKKyAgICAgIF9SZXMmIAorICAgICAgZ2V0KCkKKyAgICAgIHsKKyAgICAgICAgdHlwZW5hbWUgX0Jhc2VfdHlwZTo6X1Jlc2V0IF9fcmVzZXQoKnRoaXMpOworICAgICAgICByZXR1cm4gdGhpcy0+X01fZ2V0X3Jlc3VsdCgpLl9NX2dldCgpOworICAgICAgfQorICAgIH07CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciBmdXR1cmU8dm9pZD4KKyAgdGVtcGxhdGU8PgorICAgIGNsYXNzIGZ1dHVyZTx2b2lkPiA6IHB1YmxpYyBfX2Jhc2ljX2Z1dHVyZTx2b2lkPgorICAgIHsKKyAgICAgIGZyaWVuZCBjbGFzcyBwcm9taXNlPHZvaWQ+OworICAgICAgdGVtcGxhdGU8dHlwZW5hbWU+IGZyaWVuZCBjbGFzcyBwYWNrYWdlZF90YXNrOworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZuLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgZnJpZW5kIGZ1dHVyZTx0eXBlbmFtZSByZXN1bHRfb2Y8X0ZuKF9BcmdzLi4uKT46OnR5cGU+CisgICAgICAgIGFzeW5jKGxhdW5jaCwgX0ZuJiYsIF9BcmdzJiYuLi4pOworCisgICAgICB0eXBlZGVmIF9fYmFzaWNfZnV0dXJlPHZvaWQ+IF9CYXNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlX3R5cGU6Ol9fc3RhdGVfdHlwZSBfX3N0YXRlX3R5cGU7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBmdXR1cmUoY29uc3QgX19zdGF0ZV90eXBlJiBfX3N0YXRlKSA6IF9CYXNlX3R5cGUoX19zdGF0ZSkgeyB9CisKKyAgICBwdWJsaWM6CisgICAgICBmdXR1cmUoKSA6IF9CYXNlX3R5cGUoKSB7IH0KKworICAgICAgLy8vIE1vdmUgY29uc3RydWN0b3IKKyAgICAgIGZ1dHVyZShmdXR1cmUmJiBfX3VmKSA6IF9CYXNlX3R5cGUoc3RkOjptb3ZlKF9fdWYpKSB7IH0KKworICAgICAgLy8gRGlzYWJsZSBjb3B5aW5nCisgICAgICBmdXR1cmUoY29uc3QgZnV0dXJlJikgPSBkZWxldGU7CisgICAgICBmdXR1cmUmIG9wZXJhdG9yPShjb25zdCBmdXR1cmUmKSA9IGRlbGV0ZTsKKworICAgICAgZnV0dXJlJiBvcGVyYXRvcj0oZnV0dXJlJiYgX19mdXQpCisgICAgICB7CisgICAgICAgIGZ1dHVyZShzdGQ6Om1vdmUoX19mdXQpKS5fTV9zd2FwKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvLy8gUmV0cmlldmluZyB0aGUgdmFsdWUKKyAgICAgIHZvaWQgCisgICAgICBnZXQoKQorICAgICAgeworICAgICAgICB0eXBlbmFtZSBfQmFzZV90eXBlOjpfUmVzZXQgX19yZXNldCgqdGhpcyk7CisgICAgICAgIHRoaXMtPl9NX2dldF9yZXN1bHQoKTsKKyAgICAgIH0KKyAgICB9OworCisKKyAgLy8vIFByaW1hcnkgdGVtcGxhdGUgZm9yIHNoYXJlZF9mdXR1cmUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXM+CisgICAgY2xhc3Mgc2hhcmVkX2Z1dHVyZSA6IHB1YmxpYyBfX2Jhc2ljX2Z1dHVyZTxfUmVzPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX19iYXNpY19mdXR1cmU8X1Jlcz4gX0Jhc2VfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHNoYXJlZF9mdXR1cmUoKSA6IF9CYXNlX3R5cGUoKSB7IH0KKworICAgICAgLy8vIENvcHkgY29uc3RydWN0b3IKKyAgICAgIHNoYXJlZF9mdXR1cmUoY29uc3Qgc2hhcmVkX2Z1dHVyZSYgX19zZikgOiBfQmFzZV90eXBlKF9fc2YpIHsgfQorCisgICAgICAvLy8gQ29uc3RydWN0IGZyb20gYSBmdXR1cmUgcnZhbHVlCisgICAgICBzaGFyZWRfZnV0dXJlKGZ1dHVyZTxfUmVzPiYmIF9fdWYpCisgICAgICA6IF9CYXNlX3R5cGUoc3RkOjptb3ZlKF9fdWYpKQorICAgICAgeyB9CisKKyAgICAgIC8vLyBDb25zdHJ1Y3QgZnJvbSBhIHNoYXJlZF9mdXR1cmUgcnZhbHVlCisgICAgICBzaGFyZWRfZnV0dXJlKHNoYXJlZF9mdXR1cmUmJiBfX3NmKQorICAgICAgOiBfQmFzZV90eXBlKHN0ZDo6bW92ZShfX3NmKSkKKyAgICAgIHsgfQorCisgICAgICBzaGFyZWRfZnV0dXJlJiBvcGVyYXRvcj0oY29uc3Qgc2hhcmVkX2Z1dHVyZSYgX19zZikKKyAgICAgIHsKKyAgICAgICAgc2hhcmVkX2Z1dHVyZShfX3NmKS5fTV9zd2FwKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBzaGFyZWRfZnV0dXJlJiBvcGVyYXRvcj0oc2hhcmVkX2Z1dHVyZSYmIF9fc2YpCisgICAgICB7CisgICAgICAgIHNoYXJlZF9mdXR1cmUoc3RkOjptb3ZlKF9fc2YpKS5fTV9zd2FwKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvLy8gUmV0cmlldmluZyB0aGUgdmFsdWUKKyAgICAgIGNvbnN0IF9SZXMmCisgICAgICBnZXQoKQorICAgICAgeworCXR5cGVuYW1lIF9CYXNlX3R5cGU6Ol9fcmVzdWx0X3R5cGUgX19yID0gdGhpcy0+X01fZ2V0X3Jlc3VsdCgpOworCV9SZXMmIF9fcnMoX19yLl9NX3ZhbHVlKCkpOworCXJldHVybiBfX3JzOworICAgICAgfQorICAgIH07CisgCisgIC8vLyBQYXJ0aWFsIHNwZWNpYWxpemF0aW9uIGZvciBzaGFyZWRfZnV0dXJlPFImPgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzPgorICAgIGNsYXNzIHNoYXJlZF9mdXR1cmU8X1JlcyY+IDogcHVibGljIF9fYmFzaWNfZnV0dXJlPF9SZXMmPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX19iYXNpY19mdXR1cmU8X1JlcyY+ICAgICAgICAgICBfQmFzZV90eXBlOworCisgICAgcHVibGljOgorICAgICAgc2hhcmVkX2Z1dHVyZSgpIDogX0Jhc2VfdHlwZSgpIHsgfQorCisgICAgICAvLy8gQ29weSBjb25zdHJ1Y3RvcgorICAgICAgc2hhcmVkX2Z1dHVyZShjb25zdCBzaGFyZWRfZnV0dXJlJiBfX3NmKSA6IF9CYXNlX3R5cGUoX19zZikgeyB9CisKKyAgICAgIC8vLyBDb25zdHJ1Y3QgZnJvbSBhIGZ1dHVyZSBydmFsdWUKKyAgICAgIHNoYXJlZF9mdXR1cmUoZnV0dXJlPF9SZXMmPiYmIF9fdWYpCisgICAgICA6IF9CYXNlX3R5cGUoc3RkOjptb3ZlKF9fdWYpKQorICAgICAgeyB9CisKKyAgICAgIC8vLyBDb25zdHJ1Y3QgZnJvbSBhIHNoYXJlZF9mdXR1cmUgcnZhbHVlCisgICAgICBzaGFyZWRfZnV0dXJlKHNoYXJlZF9mdXR1cmUmJiBfX3NmKQorICAgICAgOiBfQmFzZV90eXBlKHN0ZDo6bW92ZShfX3NmKSkKKyAgICAgIHsgfQorCisgICAgICBzaGFyZWRfZnV0dXJlJiBvcGVyYXRvcj0oY29uc3Qgc2hhcmVkX2Z1dHVyZSYgX19zZikKKyAgICAgIHsKKyAgICAgICAgc2hhcmVkX2Z1dHVyZShfX3NmKS5fTV9zd2FwKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBzaGFyZWRfZnV0dXJlJiBvcGVyYXRvcj0oc2hhcmVkX2Z1dHVyZSYmIF9fc2YpCisgICAgICB7CisgICAgICAgIHNoYXJlZF9mdXR1cmUoc3RkOjptb3ZlKF9fc2YpKS5fTV9zd2FwKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvLy8gUmV0cmlldmluZyB0aGUgdmFsdWUKKyAgICAgIF9SZXMmIAorICAgICAgZ2V0KCkgeyByZXR1cm4gdGhpcy0+X01fZ2V0X3Jlc3VsdCgpLl9NX2dldCgpOyB9CisgICAgfTsKKworICAvLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb24gZm9yIHNoYXJlZF9mdXR1cmU8dm9pZD4KKyAgdGVtcGxhdGU8PgorICAgIGNsYXNzIHNoYXJlZF9mdXR1cmU8dm9pZD4gOiBwdWJsaWMgX19iYXNpY19mdXR1cmU8dm9pZD4KKyAgICB7CisgICAgICB0eXBlZGVmIF9fYmFzaWNfZnV0dXJlPHZvaWQ+IF9CYXNlX3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICBzaGFyZWRfZnV0dXJlKCkgOiBfQmFzZV90eXBlKCkgeyB9CisKKyAgICAgIC8vLyBDb3B5IGNvbnN0cnVjdG9yCisgICAgICBzaGFyZWRfZnV0dXJlKGNvbnN0IHNoYXJlZF9mdXR1cmUmIF9fc2YpIDogX0Jhc2VfdHlwZShfX3NmKSB7IH0KKworICAgICAgLy8vIENvbnN0cnVjdCBmcm9tIGEgZnV0dXJlIHJ2YWx1ZQorICAgICAgc2hhcmVkX2Z1dHVyZShmdXR1cmU8dm9pZD4mJiBfX3VmKQorICAgICAgOiBfQmFzZV90eXBlKHN0ZDo6bW92ZShfX3VmKSkKKyAgICAgIHsgfQorCisgICAgICAvLy8gQ29uc3RydWN0IGZyb20gYSBzaGFyZWRfZnV0dXJlIHJ2YWx1ZQorICAgICAgc2hhcmVkX2Z1dHVyZShzaGFyZWRfZnV0dXJlJiYgX19zZikKKyAgICAgIDogX0Jhc2VfdHlwZShzdGQ6Om1vdmUoX19zZikpCisgICAgICB7IH0KKworICAgICAgc2hhcmVkX2Z1dHVyZSYgb3BlcmF0b3I9KGNvbnN0IHNoYXJlZF9mdXR1cmUmIF9fc2YpCisgICAgICB7CisgICAgICAgIHNoYXJlZF9mdXR1cmUoX19zZikuX01fc3dhcCgqdGhpcyk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgc2hhcmVkX2Z1dHVyZSYgb3BlcmF0b3I9KHNoYXJlZF9mdXR1cmUmJiBfX3NmKQorICAgICAgeworICAgICAgICBzaGFyZWRfZnV0dXJlKHN0ZDo6bW92ZShfX3NmKSkuX01fc3dhcCgqdGhpcyk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLy8gUmV0cmlldmluZyB0aGUgdmFsdWUKKyAgICAgIHZvaWQgCisgICAgICBnZXQoKSB7IHRoaXMtPl9NX2dldF9yZXN1bHQoKTsgfQorICAgIH07CisKKyAgLy8gTm93IHdlIGNhbiBkZWZpbmUgdGhlIHByb3RlY3RlZCBfX2Jhc2ljX2Z1dHVyZSBjb25zdHJ1Y3RvcnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXM+CisgICAgaW5saW5lIF9fYmFzaWNfZnV0dXJlPF9SZXM+OjoKKyAgICBfX2Jhc2ljX2Z1dHVyZShjb25zdCBzaGFyZWRfZnV0dXJlPF9SZXM+JiBfX3NmKQorICAgIDogX01fc3RhdGUoX19zZi5fTV9zdGF0ZSkKKyAgICB7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzPgorICAgIGlubGluZSBfX2Jhc2ljX2Z1dHVyZTxfUmVzPjo6CisgICAgX19iYXNpY19mdXR1cmUoc2hhcmVkX2Z1dHVyZTxfUmVzPiYmIF9fc2YpCisgICAgOiBfTV9zdGF0ZShzdGQ6Om1vdmUoX19zZi5fTV9zdGF0ZSkpCisgICAgeyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlcz4KKyAgICBpbmxpbmUgX19iYXNpY19mdXR1cmU8X1Jlcz46OgorICAgIF9fYmFzaWNfZnV0dXJlKGZ1dHVyZTxfUmVzPiYmIF9fdWYpCisgICAgOiBfTV9zdGF0ZShzdGQ6Om1vdmUoX191Zi5fTV9zdGF0ZSkpCisgICAgeyB9CisKKworICAvLy8gUHJpbWFyeSB0ZW1wbGF0ZSBmb3IgcHJvbWlzZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzPgorICAgIGNsYXNzIHByb21pc2UKKyAgICB7CisgICAgICB0eXBlZGVmIF9fZnV0dXJlX2Jhc2U6Ol9TdGF0ZSAJCV9TdGF0ZTsKKyAgICAgIHR5cGVkZWYgX19mdXR1cmVfYmFzZTo6X1Jlc3VsdDxfUmVzPglfUmVzX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZnV0dXJlX2Jhc2U6Ol9QdHI8X1Jlc190eXBlPjo6dHlwZSBfUHRyX3R5cGU7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWU+IGZyaWVuZCBjbGFzcyBfU3RhdGU6Ol9TZXR0ZXI7CisgICAgICAKKyAgICAgIHNoYXJlZF9wdHI8X1N0YXRlPiAgICAgICAgICAgICAgICAgICAgICAgIF9NX2Z1dHVyZTsKKyAgICAgIF9QdHJfdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX3N0b3JhZ2U7CisKKyAgICBwdWJsaWM6CisgICAgICBwcm9taXNlKCkKKyAgICAgIDogX01fZnV0dXJlKHN0ZDo6bWFrZV9zaGFyZWQ8X1N0YXRlPigpKSwKKwlfTV9zdG9yYWdlKG5ldyBfUmVzX3R5cGUoKSkKKyAgICAgIHsgfQorCisgICAgICBwcm9taXNlKHByb21pc2UmJiBfX3JocykKKyAgICAgIDogX01fZnV0dXJlKHN0ZDo6bW92ZShfX3Jocy5fTV9mdXR1cmUpKSwKKwlfTV9zdG9yYWdlKHN0ZDo6bW92ZShfX3Jocy5fTV9zdG9yYWdlKSkKKyAgICAgIHsgfQorCisgICAgICAvLyBUT0RPOiBuZWVkcyBhbGxvY2F0b3JfYXJnX3QKKyAgICAgIC8qCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgICAgICBwcm9taXNlKGFsbG9jYXRvcl9hcmdfdCwgY29uc3QgX0FsbG9jYXRvciYgX19hKQorICAgICAgICA6IF9NX2Z1dHVyZShzdGQ6OmFsbG9jYXRlX3NoYXJlZDxfU3RhdGU+KF9fYSkpLAorICAgICAgICBfTV9zdG9yYWdlKF9fZnV0dXJlX2Jhc2U6Ol9TX2FsbG9jYXRlX3Jlc3VsdDxfUmVzPihfX2EpKQorICAgICAgICB7IH0KKyAgICAgICovCisKKyAgICAgIHByb21pc2UoY29uc3QgcHJvbWlzZSYpID0gZGVsZXRlOworCisgICAgICB+cHJvbWlzZSgpCisgICAgICB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxib29sPihfTV9mdXR1cmUpICYmICFfTV9mdXR1cmUudW5pcXVlKCkpCisgICAgICAgICAgX01fZnV0dXJlLT5fTV9icmVha19wcm9taXNlKHN0ZDo6bW92ZShfTV9zdG9yYWdlKSk7CisgICAgICB9CisKKyAgICAgIC8vIEFzc2lnbm1lbnQKKyAgICAgIHByb21pc2UmCisgICAgICBvcGVyYXRvcj0ocHJvbWlzZSYmIF9fcmhzKQorICAgICAgeworICAgICAgICBwcm9taXNlKHN0ZDo6bW92ZShfX3JocykpLnN3YXAoKnRoaXMpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHByb21pc2UmIG9wZXJhdG9yPShjb25zdCBwcm9taXNlJikgPSBkZWxldGU7CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAocHJvbWlzZSYgX19yaHMpCisgICAgICB7CisgICAgICAgIF9NX2Z1dHVyZS5zd2FwKF9fcmhzLl9NX2Z1dHVyZSk7CisgICAgICAgIF9NX3N0b3JhZ2Uuc3dhcChfX3Jocy5fTV9zdG9yYWdlKTsKKyAgICAgIH0KKworICAgICAgLy8gUmV0cmlldmluZyB0aGUgcmVzdWx0CisgICAgICBmdXR1cmU8X1Jlcz4KKyAgICAgIGdldF9mdXR1cmUoKQorICAgICAgeyByZXR1cm4gZnV0dXJlPF9SZXM+KF9NX2Z1dHVyZSk7IH0KKworICAgICAgLy8gU2V0dGluZyB0aGUgcmVzdWx0CisgICAgICB2b2lkCisgICAgICBzZXRfdmFsdWUoY29uc3QgX1JlcyYgX19yKQorICAgICAgeworICAgICAgICBhdXRvIF9fc2V0dGVyID0gX1N0YXRlOjpfX3NldHRlcih0aGlzLCBfX3IpOworICAgICAgICBfTV9mdXR1cmUtPl9NX3NldF9yZXN1bHQoc3RkOjptb3ZlKF9fc2V0dGVyKSk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHNldF92YWx1ZShfUmVzJiYgX19yKQorICAgICAgeworICAgICAgICBhdXRvIF9fc2V0dGVyID0gX1N0YXRlOjpfX3NldHRlcih0aGlzLCBzdGQ6Om1vdmUoX19yKSk7CisgICAgICAgIF9NX2Z1dHVyZS0+X01fc2V0X3Jlc3VsdChzdGQ6Om1vdmUoX19zZXR0ZXIpKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgc2V0X2V4Y2VwdGlvbihleGNlcHRpb25fcHRyIF9fcCkKKyAgICAgIHsKKyAgICAgICAgYXV0byBfX3NldHRlciA9IF9TdGF0ZTo6X19zZXR0ZXIoX19wLCB0aGlzKTsKKyAgICAgICAgX01fZnV0dXJlLT5fTV9zZXRfcmVzdWx0KHN0ZDo6bW92ZShfX3NldHRlcikpOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlcz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAocHJvbWlzZTxfUmVzPiYgX194LCBwcm9taXNlPF9SZXM+JiBfX3kpCisgICAgeyBfX3guc3dhcChfX3kpOyB9CisKKyAgLy8vIFBhcnRpYWwgc3BlY2lhbGl6YXRpb24gZm9yIHByb21pc2U8UiY+CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXM+CisgICAgY2xhc3MgcHJvbWlzZTxfUmVzJj4KKyAgICB7CisgICAgICB0eXBlZGVmIF9fZnV0dXJlX2Jhc2U6Ol9TdGF0ZSAJCV9TdGF0ZTsKKyAgICAgIHR5cGVkZWYgX19mdXR1cmVfYmFzZTo6X1Jlc3VsdDxfUmVzJj4JX1Jlc190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2Z1dHVyZV9iYXNlOjpfUHRyPF9SZXNfdHlwZT46OnR5cGUgX1B0cl90eXBlOworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lPiBmcmllbmQgY2xhc3MgX1N0YXRlOjpfU2V0dGVyOworCisgICAgICBzaGFyZWRfcHRyPF9TdGF0ZT4gICAgICAgICAgICAgICAgICAgICAgICBfTV9mdXR1cmU7CisgICAgICBfUHRyX3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9zdG9yYWdlOworCisgICAgcHVibGljOgorICAgICAgcHJvbWlzZSgpCisgICAgICA6IF9NX2Z1dHVyZShzdGQ6Om1ha2Vfc2hhcmVkPF9TdGF0ZT4oKSksCisJX01fc3RvcmFnZShuZXcgX1Jlc190eXBlKCkpCisgICAgICB7IH0KKworICAgICAgcHJvbWlzZShwcm9taXNlJiYgX19yaHMpCisgICAgICA6IF9NX2Z1dHVyZShzdGQ6Om1vdmUoX19yaHMuX01fZnV0dXJlKSksIAorCV9NX3N0b3JhZ2Uoc3RkOjptb3ZlKF9fcmhzLl9NX3N0b3JhZ2UpKQorICAgICAgeyB9CisKKyAgICAgIC8vIFRPRE86IG5lZWRzIGFsbG9jYXRvcl9hcmdfdAorICAgICAgLyoKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgICAgIHByb21pc2UoYWxsb2NhdG9yX2FyZ190LCBjb25zdCBfQWxsb2NhdG9yJiBfX2EpCisgICAgICAgIDogX01fZnV0dXJlKHN0ZDo6YWxsb2NhdGVfc2hhcmVkPF9TdGF0ZT4oX19hKSksCisgICAgICAgIF9NX3N0b3JhZ2UoX19mdXR1cmVfYmFzZTo6X1NfYWxsb2NhdGVfcmVzdWx0PF9SZXMmPihfX2EpKQorICAgICAgICB7IH0KKyAgICAgICovCisKKyAgICAgIHByb21pc2UoY29uc3QgcHJvbWlzZSYpID0gZGVsZXRlOworCisgICAgICB+cHJvbWlzZSgpCisgICAgICB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxib29sPihfTV9mdXR1cmUpICYmICFfTV9mdXR1cmUudW5pcXVlKCkpCisgICAgICAgICAgX01fZnV0dXJlLT5fTV9icmVha19wcm9taXNlKHN0ZDo6bW92ZShfTV9zdG9yYWdlKSk7CisgICAgICB9CisKKyAgICAgIC8vIEFzc2lnbm1lbnQKKyAgICAgIHByb21pc2UmCisgICAgICBvcGVyYXRvcj0ocHJvbWlzZSYmIF9fcmhzKQorICAgICAgeworICAgICAgICBwcm9taXNlKHN0ZDo6bW92ZShfX3JocykpLnN3YXAoKnRoaXMpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHByb21pc2UmIG9wZXJhdG9yPShjb25zdCBwcm9taXNlJikgPSBkZWxldGU7CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAocHJvbWlzZSYgX19yaHMpCisgICAgICB7CisgICAgICAgIF9NX2Z1dHVyZS5zd2FwKF9fcmhzLl9NX2Z1dHVyZSk7CisgICAgICAgIF9NX3N0b3JhZ2Uuc3dhcChfX3Jocy5fTV9zdG9yYWdlKTsKKyAgICAgIH0KKworICAgICAgLy8gUmV0cmlldmluZyB0aGUgcmVzdWx0CisgICAgICBmdXR1cmU8X1JlcyY+CisgICAgICBnZXRfZnV0dXJlKCkKKyAgICAgIHsgcmV0dXJuIGZ1dHVyZTxfUmVzJj4oX01fZnV0dXJlKTsgfQorCisgICAgICAvLyBTZXR0aW5nIHRoZSByZXN1bHQKKyAgICAgIHZvaWQKKyAgICAgIHNldF92YWx1ZShfUmVzJiBfX3IpCisgICAgICB7CisgICAgICAgIGF1dG8gX19zZXR0ZXIgPSBfU3RhdGU6Ol9fc2V0dGVyKHRoaXMsIF9fcik7CisgICAgICAgIF9NX2Z1dHVyZS0+X01fc2V0X3Jlc3VsdChzdGQ6Om1vdmUoX19zZXR0ZXIpKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgc2V0X2V4Y2VwdGlvbihleGNlcHRpb25fcHRyIF9fcCkKKyAgICAgIHsKKyAgICAgICAgYXV0byBfX3NldHRlciA9IF9TdGF0ZTo6X19zZXR0ZXIoX19wLCB0aGlzKTsKKyAgICAgICAgX01fZnV0dXJlLT5fTV9zZXRfcmVzdWx0KHN0ZDo6bW92ZShfX3NldHRlcikpOworICAgICAgfQorICAgIH07CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciBwcm9taXNlPHZvaWQ+CisgIHRlbXBsYXRlPD4KKyAgICBjbGFzcyBwcm9taXNlPHZvaWQ+CisgICAgeworICAgICAgdHlwZWRlZiBfX2Z1dHVyZV9iYXNlOjpfU3RhdGUgCQlfU3RhdGU7CisgICAgICB0eXBlZGVmIF9fZnV0dXJlX2Jhc2U6Ol9SZXN1bHQ8dm9pZD4JX1Jlc190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2Z1dHVyZV9iYXNlOjpfUHRyPF9SZXNfdHlwZT46OnR5cGUgX1B0cl90eXBlOworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lPiBmcmllbmQgY2xhc3MgX1N0YXRlOjpfU2V0dGVyOworCisgICAgICBzaGFyZWRfcHRyPF9TdGF0ZT4gICAgICAgICAgICAgICAgICAgICAgICBfTV9mdXR1cmU7CisgICAgICBfUHRyX3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9zdG9yYWdlOworCisgICAgcHVibGljOgorICAgICAgcHJvbWlzZSgpCisgICAgICA6IF9NX2Z1dHVyZShzdGQ6Om1ha2Vfc2hhcmVkPF9TdGF0ZT4oKSksCisJX01fc3RvcmFnZShuZXcgX1Jlc190eXBlKCkpCisgICAgICB7IH0KKworICAgICAgcHJvbWlzZShwcm9taXNlJiYgX19yaHMpCisgICAgICA6IF9NX2Z1dHVyZShzdGQ6Om1vdmUoX19yaHMuX01fZnV0dXJlKSksCisJX01fc3RvcmFnZShzdGQ6Om1vdmUoX19yaHMuX01fc3RvcmFnZSkpCisgICAgICB7IH0KKworCisgICAgICAvLyBUT0RPOiBuZWVkcyBhbGxvY2F0b3JfYXJnX3QKKyAgICAgIC8qCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgICAgICBwcm9taXNlKGFsbG9jYXRvcl9hcmdfdCwgY29uc3QgX0FsbG9jYXRvciYgX19hKQorICAgICAgICA6IF9NX2Z1dHVyZShzdGQ6OmFsbG9jYXRlX3NoYXJlZDxfU3RhdGU+KF9fYSkpLAorICAgICAgICBfTV9zdG9yYWdlKF9fZnV0dXJlX2Jhc2U6Ol9TX2FsbG9jYXRlX3Jlc3VsdDx2b2lkPihfX2EpKQorICAgICAgICB7IH0KKyAgICAgICovCisKKyAgICAgIHByb21pc2UoY29uc3QgcHJvbWlzZSYpID0gZGVsZXRlOworCisgICAgICB+cHJvbWlzZSgpCisgICAgICB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxib29sPihfTV9mdXR1cmUpICYmICFfTV9mdXR1cmUudW5pcXVlKCkpCisgICAgICAgICAgX01fZnV0dXJlLT5fTV9icmVha19wcm9taXNlKHN0ZDo6bW92ZShfTV9zdG9yYWdlKSk7CisgICAgICB9CisKKyAgICAgIC8vIEFzc2lnbm1lbnQKKyAgICAgIHByb21pc2UmCisgICAgICBvcGVyYXRvcj0ocHJvbWlzZSYmIF9fcmhzKQorICAgICAgeworICAgICAgICBwcm9taXNlKHN0ZDo6bW92ZShfX3JocykpLnN3YXAoKnRoaXMpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHByb21pc2UmIG9wZXJhdG9yPShjb25zdCBwcm9taXNlJikgPSBkZWxldGU7CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAocHJvbWlzZSYgX19yaHMpCisgICAgICB7CisgICAgICAgIF9NX2Z1dHVyZS5zd2FwKF9fcmhzLl9NX2Z1dHVyZSk7CisgICAgICAgIF9NX3N0b3JhZ2Uuc3dhcChfX3Jocy5fTV9zdG9yYWdlKTsKKyAgICAgIH0KKworICAgICAgLy8gUmV0cmlldmluZyB0aGUgcmVzdWx0CisgICAgICBmdXR1cmU8dm9pZD4KKyAgICAgIGdldF9mdXR1cmUoKQorICAgICAgeyByZXR1cm4gZnV0dXJlPHZvaWQ+KF9NX2Z1dHVyZSk7IH0KKworICAgICAgLy8gU2V0dGluZyB0aGUgcmVzdWx0CisgICAgICB2b2lkIHNldF92YWx1ZSgpOworCisgICAgICB2b2lkCisgICAgICBzZXRfZXhjZXB0aW9uKGV4Y2VwdGlvbl9wdHIgX19wKQorICAgICAgeworICAgICAgICBhdXRvIF9fc2V0dGVyID0gX1N0YXRlOjpfX3NldHRlcihfX3AsIHRoaXMpOworICAgICAgICBfTV9mdXR1cmUtPl9NX3NldF9yZXN1bHQoc3RkOjptb3ZlKF9fc2V0dGVyKSk7CisgICAgICB9CisgICAgfTsKKworICAvLyBzZXQgdm9pZAorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fZnV0dXJlX2Jhc2U6Ol9TdGF0ZTo6X1NldHRlcjx2b2lkLCB2b2lkPgorICAgIHsKKyAgICAgIHByb21pc2U8dm9pZD46Ol9QdHJfdHlwZSBvcGVyYXRvcigpKCkKKyAgICAgIHsKKyAgICAgICAgX1N0YXRlOjpfU19jaGVjayhfTV9wcm9taXNlLT5fTV9mdXR1cmUpOworICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9NX3Byb21pc2UtPl9NX3N0b3JhZ2UpOworICAgICAgfQorCisgICAgICBwcm9taXNlPHZvaWQ+KiAgICBfTV9wcm9taXNlOworICAgIH07CisKKyAgaW5saW5lIF9fZnV0dXJlX2Jhc2U6Ol9TdGF0ZTo6X1NldHRlcjx2b2lkLCB2b2lkPgorICBfX2Z1dHVyZV9iYXNlOjpfU3RhdGU6Ol9fc2V0dGVyKHByb21pc2U8dm9pZD4qIF9fcHJvbSkKKyAgeworICAgIHJldHVybiBfU2V0dGVyPHZvaWQsIHZvaWQ+eyBfX3Byb20gfTsKKyAgfQorCisgIGlubGluZSB2b2lkCisgIHByb21pc2U8dm9pZD46OnNldF92YWx1ZSgpCisgIHsKKyAgICBhdXRvIF9fc2V0dGVyID0gX1N0YXRlOjpfX3NldHRlcih0aGlzKTsKKyAgICBfTV9mdXR1cmUtPl9NX3NldF9yZXN1bHQoc3RkOjptb3ZlKF9fc2V0dGVyKSk7CisgIH0KKworICAvLyBUT0RPOiBuZWVkcyBhbGxvY2F0b3JzCisgIC8qCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIGNsYXNzIEFsbG9jPgorICAgIHN0cnVjdCB1c2VzX2FsbG9jYXRvcjxwcm9taXNlPF9SZXM+LCBBbGxvYz4gOiB0cnVlX3R5cGUgIHsgfTsKKyAgKi8KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TdGF0ZVQsIHR5cGVuYW1lIF9SZXM+CisgICAgc3RydWN0IF9fZnV0dXJlX2Jhc2U6Ol9UYXNrX3NldHRlcgorICAgIHsKKyAgICAgIHR5cGVuYW1lIF9TdGF0ZVQ6Ol9QdHJfdHlwZSBvcGVyYXRvcigpKCkKKyAgICAgIHsKKyAgICAgICAgX190cnkKKwkgIHsKKwkgICAgX01fc3RhdGUtPl9NX3Jlc3VsdC0+X01fc2V0KF9NX2ZuKCkpOworCSAgfQorCV9fY2F0Y2goLi4uKQorCSAgeworCSAgICBfTV9zdGF0ZS0+X01fcmVzdWx0LT5fTV9lcnJvciA9IGN1cnJlbnRfZXhjZXB0aW9uKCk7CisJICB9CisgICAgICAgIHJldHVybiBzdGQ6Om1vdmUoX01fc3RhdGUtPl9NX3Jlc3VsdCk7CisgICAgICB9CisgICAgICBfU3RhdGVUKiAgICAgICAgICAgICAgICAgIF9NX3N0YXRlOworICAgICAgc3RkOjpmdW5jdGlvbjxfUmVzKCk+ICAgICBfTV9mbjsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TdGF0ZVQ+CisgICAgc3RydWN0IF9fZnV0dXJlX2Jhc2U6Ol9UYXNrX3NldHRlcjxfU3RhdGVULCB2b2lkPgorICAgIHsKKyAgICAgIHR5cGVuYW1lIF9TdGF0ZVQ6Ol9QdHJfdHlwZSBvcGVyYXRvcigpKCkKKyAgICAgIHsKKyAgICAgICAgX190cnkKKwkgIHsKKwkgICAgX01fZm4oKTsKKwkgIH0KKwlfX2NhdGNoKC4uLikKKwkgIHsKKwkgICAgX01fc3RhdGUtPl9NX3Jlc3VsdC0+X01fZXJyb3IgPSBjdXJyZW50X2V4Y2VwdGlvbigpOworCSAgfQorCXJldHVybiBzdGQ6Om1vdmUoX01fc3RhdGUtPl9NX3Jlc3VsdCk7CisgICAgICB9CisgICAgICBfU3RhdGVUKiAgICAgICAgICAgICAgICAgIF9NX3N0YXRlOworICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+ICAgICBfTV9mbjsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIHN0cnVjdCBfX2Z1dHVyZV9iYXNlOjpfVGFza19zdGF0ZTxfUmVzKF9BcmdzLi4uKT4gOiBfX2Z1dHVyZV9iYXNlOjpfU3RhdGUKKyAgICB7CisgICAgICB0eXBlZGVmIF9SZXMgX1Jlc190eXBlOworCisgICAgICBfVGFza19zdGF0ZShzdGQ6OmZ1bmN0aW9uPF9SZXMoX0FyZ3MuLi4pPiBfX3Rhc2spCisgICAgICA6IF9NX3Jlc3VsdChuZXcgX1Jlc3VsdDxfUmVzPigpKSwgX01fdGFzayhzdGQ6Om1vdmUoX190YXNrKSkKKyAgICAgIHsgfQorCisgICAgICAvLyBUT0RPOiBuZWVkcyBhbGxvY2F0b3JfYXJnX3QKKyAgICAgIC8qCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuYywgdHlwZW5hbWUgX0FsbG9jPgorICAgICAgICBfVGFza19zdGF0ZShfRnVuYyYmIF9fdGFzaywgY29uc3QgX0FsbG9jJiBfX2EpCisgICAgICAgIDogX01fcmVzdWx0KF9TX2FsbG9jYXRlX3Jlc3VsdDxfUmVzPihfX2EpKQorICAgICAgICAsIF9NX3Rhc2soYWxsb2NhdG9yX2FyZywgX19hLCBzdGQ6Om1vdmUoX190YXNrKSkKKyAgICAgICAgeyB9CisgICAgICAqLworCisgICAgICB2b2lkCisgICAgICBfTV9ydW4oX0FyZ3MuLi4gX19hcmdzKQorICAgICAgeworICAgICAgICAvLyBib3VuZCBhcmd1bWVudHMgZGVjYXkgc28gd3JhcCBsdmFsdWUgcmVmZXJlbmNlcworICAgICAgICBhdXRvIF9fYm91bmQgPSBzdGQ6OmJpbmQ8X1Jlcz4oX01fdGFzaywKKyAgICAgICAgICAgIF9TX21heWJlX3dyYXBfcmVmKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKSkuLi4pOworICAgICAgICBfVGFza19zZXR0ZXI8X1Rhc2tfc3RhdGU+IF9fc2V0dGVyeyB0aGlzLCBzdGQ6Om1vdmUoX19ib3VuZCkgfTsKKyAgICAgICAgX01fc2V0X3Jlc3VsdChzdGQ6Om1vdmUoX19zZXR0ZXIpKTsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lPiBmcmllbmQgY2xhc3MgX1Rhc2tfc2V0dGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2Z1dHVyZV9iYXNlOjpfUHRyPF9SZXN1bHQ8X1Jlcz4+Ojp0eXBlIF9QdHJfdHlwZTsKKyAgICAgIF9QdHJfdHlwZSBfTV9yZXN1bHQ7CisgICAgICBzdGQ6OmZ1bmN0aW9uPF9SZXMoX0FyZ3MuLi4pPiBfTV90YXNrOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIHN0YXRpYyByZWZlcmVuY2Vfd3JhcHBlcjxfVHA+CisgICAgICAgIF9TX21heWJlX3dyYXBfcmVmKF9UcCYgX190KQorICAgICAgICB7IHJldHVybiBzdGQ6OnJlZihfX3QpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RhdGljIHR5cGVuYW1lIGVuYWJsZV9pZjwhaXNfbHZhbHVlX3JlZmVyZW5jZTxfVHA+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9UcD46OnR5cGUmJgorICAgICAgICBfU19tYXliZV93cmFwX3JlZihfVHAmJiBfX3QpCisgICAgICAgIHsgcmV0dXJuIHN0ZDo6Zm9yd2FyZDxfVHA+KF9fdCk7IH0KKyAgICB9OworCisgIC8vLyBwYWNrYWdlZF90YXNrCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBjbGFzcyBwYWNrYWdlZF90YXNrPF9SZXMoX0FyZ1R5cGVzLi4uKT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9fZnV0dXJlX2Jhc2U6Ol9UYXNrX3N0YXRlPF9SZXMoX0FyZ1R5cGVzLi4uKT4gIF9TdGF0ZV90eXBlOworICAgICAgc2hhcmVkX3B0cjxfU3RhdGVfdHlwZT4gICAgICAgICAgICAgICAgICAgX01fc3RhdGU7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9SZXMgcmVzdWx0X3R5cGU7CisKKyAgICAgIC8vIENvbnN0cnVjdGlvbiBhbmQgZGVzdHJ1Y3Rpb24KKyAgICAgIHBhY2thZ2VkX3Rhc2soKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZuPgorICAgICAgICBleHBsaWNpdAorICAgICAgICBwYWNrYWdlZF90YXNrKGNvbnN0IF9GbiYgX19mbikKKyAgICAgICAgOiBfTV9zdGF0ZShzdGQ6Om1ha2Vfc2hhcmVkPF9TdGF0ZV90eXBlPihfX2ZuKSkKKyAgICAgICAgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gbj4KKyAgICAgICAgZXhwbGljaXQKKyAgICAgICAgcGFja2FnZWRfdGFzayhfRm4mJiBfX2ZuKQorICAgICAgICA6IF9NX3N0YXRlKHN0ZDo6bWFrZV9zaGFyZWQ8X1N0YXRlX3R5cGU+KHN0ZDo6bW92ZShfX2ZuKSkpCisgICAgICAgIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgcGFja2FnZWRfdGFzayhfUmVzKCpfX2ZuKShfQXJnVHlwZXMuLi4pKQorICAgICAgOiBfTV9zdGF0ZShzdGQ6Om1ha2Vfc2hhcmVkPF9TdGF0ZV90eXBlPihfX2ZuKSkKKyAgICAgIHsgfQorCisgICAgICAvLyBUT0RPOiBuZWVkcyBhbGxvY2F0b3JfYXJnX3QKKyAgICAgIC8qCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm4sIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgICAgIGV4cGxpY2l0CisgICAgICAgIHBhY2thZ2VkX3Rhc2soYWxsb2NhdG9yX2FyZ190IF9fdGFnLCBjb25zdCBfQWxsb2NhdG9yJiBfX2EsIF9GbiBfX2ZuKQorICAgICAgICA6IF9NX3N0YXRlKHN0ZDo6YWxsb2NhdGVfc2hhcmVkPF9TdGF0ZV90eXBlPihfX2EsIHN0ZDo6bW92ZShfX2ZuKSkpCisgICAgICAgIHsgfQorICAgICAgKi8KKworICAgICAgfnBhY2thZ2VkX3Rhc2soKQorICAgICAgeworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8Ym9vbD4oX01fc3RhdGUpICYmICFfTV9zdGF0ZS51bmlxdWUoKSkKKyAgICAgICAgICBfTV9zdGF0ZS0+X01fYnJlYWtfcHJvbWlzZShzdGQ6Om1vdmUoX01fc3RhdGUtPl9NX3Jlc3VsdCkpOworICAgICAgfQorCisgICAgICAvLyBObyBjb3B5CisgICAgICBwYWNrYWdlZF90YXNrKHBhY2thZ2VkX3Rhc2smKSA9IGRlbGV0ZTsKKyAgICAgIHBhY2thZ2VkX3Rhc2smIG9wZXJhdG9yPShwYWNrYWdlZF90YXNrJikgPSBkZWxldGU7CisKKyAgICAgIC8vIE1vdmUgc3VwcG9ydAorICAgICAgcGFja2FnZWRfdGFzayhwYWNrYWdlZF90YXNrJiYgX19vdGhlcikKKyAgICAgIHsgdGhpcy0+c3dhcChfX290aGVyKTsgfQorCisgICAgICBwYWNrYWdlZF90YXNrJiBvcGVyYXRvcj0ocGFja2FnZWRfdGFzayYmIF9fb3RoZXIpCisgICAgICB7CisgICAgICAgIHBhY2thZ2VkX3Rhc2soc3RkOjptb3ZlKF9fb3RoZXIpKS5zd2FwKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKHBhY2thZ2VkX3Rhc2smIF9fb3RoZXIpCisgICAgICB7IF9NX3N0YXRlLnN3YXAoX19vdGhlci5fTV9zdGF0ZSk7IH0KKworICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KF9NX3N0YXRlKTsgfQorCisgICAgICAvLyBSZXN1bHQgcmV0cmlldmFsCisgICAgICBmdXR1cmU8X1Jlcz4KKyAgICAgIGdldF9mdXR1cmUoKQorICAgICAgeyByZXR1cm4gZnV0dXJlPF9SZXM+KF9NX3N0YXRlKTsgfQorCisgICAgICAvLyBFeGVjdXRpb24KKyAgICAgIHZvaWQKKyAgICAgIG9wZXJhdG9yKCkoX0FyZ1R5cGVzLi4uIF9fYXJncykKKyAgICAgIHsKKyAgICAgICAgX19mdXR1cmVfYmFzZTo6X1N0YXRlOjpfU19jaGVjayhfTV9zdGF0ZSk7CisgICAgICAgIF9NX3N0YXRlLT5fTV9ydW4oc3RkOjpmb3J3YXJkPF9BcmdUeXBlcz4oX19hcmdzKS4uLik7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkKKyAgICAgIHsKKyAgICAgICAgX19mdXR1cmVfYmFzZTo6X1N0YXRlOjpfU19jaGVjayhfTV9zdGF0ZSk7CisgICAgICAgIHBhY2thZ2VkX3Rhc2soc3RkOjptb3ZlKF9NX3N0YXRlLT5fTV90YXNrKSkuc3dhcCgqdGhpcyk7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHBhY2thZ2VkX3Rhc2s8X1JlcyhfQXJnVHlwZXMuLi4pPiYgX194LAorCSBwYWNrYWdlZF90YXNrPF9SZXMoX0FyZ1R5cGVzLi4uKT4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKyAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlcz4KKyAgICBjbGFzcyBfX2Z1dHVyZV9iYXNlOjpfRGVmZXJyZWRfc3RhdGUgOiBwdWJsaWMgX19mdXR1cmVfYmFzZTo6X1N0YXRlCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1JlcyBfUmVzX3R5cGU7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfRGVmZXJyZWRfc3RhdGUoc3RkOjpmdW5jdGlvbjxfUmVzKCk+JiYgX19mbikKKyAgICAgIDogX01fcmVzdWx0KG5ldyBfUmVzdWx0PF9SZXM+KCkpLCBfTV9mbihzdGQ6Om1vdmUoX19mbikpCisgICAgICB7IH0KKworICAgIHByaXZhdGU6CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWU+IGZyaWVuZCBjbGFzcyBfVGFza19zZXR0ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZnV0dXJlX2Jhc2U6Ol9QdHI8X1Jlc3VsdDxfUmVzPj46OnR5cGUgX1B0cl90eXBlOworICAgICAgX1B0cl90eXBlIF9NX3Jlc3VsdDsKKyAgICAgIHN0ZDo6ZnVuY3Rpb248X1JlcygpPiBfTV9mbjsKKworICAgICAgdmlydHVhbCB2b2lkCisgICAgICBfTV9ydW5fZGVmZXJyZWQoKQorICAgICAgeworICAgICAgICBfVGFza19zZXR0ZXI8X0RlZmVycmVkX3N0YXRlPiBfX3NldHRlcnsgdGhpcywgX01fZm4gfTsKKyAgICAgICAgLy8gc2FmZSB0byBjYWxsIG11bHRpcGxlIHRpbWVzIHNvIGlnbm9yZSBmYWlsdXJlCisgICAgICAgIF9NX3NldF9yZXN1bHQoc3RkOjptb3ZlKF9fc2V0dGVyKSwgdHJ1ZSk7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzPgorICAgIGNsYXNzIF9fZnV0dXJlX2Jhc2U6Ol9Bc3luY19zdGF0ZSA6IHB1YmxpYyBfX2Z1dHVyZV9iYXNlOjpfU3RhdGUKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfUmVzIF9SZXNfdHlwZTsKKworICAgICAgZXhwbGljaXQgCisgICAgICBfQXN5bmNfc3RhdGUoc3RkOjpmdW5jdGlvbjxfUmVzKCk+JiYgX19mbikKKyAgICAgIDogX01fcmVzdWx0KG5ldyBfUmVzdWx0PF9SZXM+KCkpLCBfTV9mbihzdGQ6Om1vdmUoX19mbikpLAorCV9NX3RocmVhZChtZW1fZm4oJl9Bc3luY19zdGF0ZTo6X01fZG9fcnVuKSwgdGhpcykKKyAgICAgIHsgfQorCisgICAgICB+X0FzeW5jX3N0YXRlKCkgeyBfTV90aHJlYWQuam9pbigpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgdm9pZCBfTV9kb19ydW4oKQorICAgICAgeworICAgICAgICBfVGFza19zZXR0ZXI8X0FzeW5jX3N0YXRlPiBfX3NldHRlcnsgdGhpcywgc3RkOjptb3ZlKF9NX2ZuKSB9OworICAgICAgICBfTV9zZXRfcmVzdWx0KHN0ZDo6bW92ZShfX3NldHRlcikpOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWU+IGZyaWVuZCBjbGFzcyBfVGFza19zZXR0ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZnV0dXJlX2Jhc2U6Ol9QdHI8X1Jlc3VsdDxfUmVzPj46OnR5cGUgX1B0cl90eXBlOworICAgICAgX1B0cl90eXBlIF9NX3Jlc3VsdDsKKyAgICAgIHN0ZDo6ZnVuY3Rpb248X1JlcygpPiBfTV9mbjsKKyAgICAgIHRocmVhZCBfTV90aHJlYWQ7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm4sIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIGZ1dHVyZTx0eXBlbmFtZSByZXN1bHRfb2Y8X0ZuKF9BcmdzLi4uKT46OnR5cGU+CisgICAgYXN5bmMobGF1bmNoIF9fcG9saWN5LCBfRm4mJiBfX2ZuLCBfQXJncyYmLi4uIF9fYXJncykKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHJlc3VsdF9vZjxfRm4oX0FyZ3MuLi4pPjo6dHlwZSByZXN1bHRfdHlwZTsKKyAgICAgIHN0ZDo6c2hhcmVkX3B0cjxfX2Z1dHVyZV9iYXNlOjpfU3RhdGU+IF9fc3RhdGU7CisgICAgICBpZiAoX19wb2xpY3kgPT0gbGF1bmNoOjphc3luYykKKwl7CisJICB0eXBlZGVmIHR5cGVuYW1lIF9fZnV0dXJlX2Jhc2U6Ol9Bc3luY19zdGF0ZTxyZXN1bHRfdHlwZT4gX1N0YXRlOworCSAgX19zdGF0ZSA9IHN0ZDo6bWFrZV9zaGFyZWQ8X1N0YXRlPihzdGQ6OmJpbmQ8cmVzdWx0X3R5cGU+KAorICAgICAgICAgICAgICBzdGQ6OmZvcndhcmQ8X0ZuPihfX2ZuKSwgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKSk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHR5cGVkZWYgdHlwZW5hbWUgX19mdXR1cmVfYmFzZTo6X0RlZmVycmVkX3N0YXRlPHJlc3VsdF90eXBlPiBfU3RhdGU7CisJICBfX3N0YXRlID0gc3RkOjptYWtlX3NoYXJlZDxfU3RhdGU+KHN0ZDo6YmluZDxyZXN1bHRfdHlwZT4oCisgICAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfRm4+KF9fZm4pLCBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pKTsKKwl9CisgICAgICByZXR1cm4gZnV0dXJlPHJlc3VsdF90eXBlPihfX3N0YXRlKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZuLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICBpbmxpbmUgdHlwZW5hbWUKKyAgICBlbmFibGVfaWY8IWlzX3NhbWU8dHlwZW5hbWUgZGVjYXk8X0ZuPjo6dHlwZSwgbGF1bmNoPjo6dmFsdWUsCisgICAgICAgICAgICAgIGZ1dHVyZTxkZWNsdHlwZShzdGQ6OmRlY2x2YWw8X0ZuPigpKHN0ZDo6ZGVjbHZhbDxfQXJncz4oKS4uLikpPgorICAgICAgICAgICAgID46OnR5cGUKKyAgICBhc3luYyhfRm4mJiBfX2ZuLCBfQXJncyYmLi4uIF9fYXJncykKKyAgICB7CisgICAgICByZXR1cm4gYXN5bmMobGF1bmNoOjphbnksIHN0ZDo6Zm9yd2FyZDxfRm4+KF9fZm4pLAorCQkgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworICAgIH0KKworI2VuZGlmIC8vIF9HTElCQ1hYX0hBU19HVEhSRUFEUyAmJiBfR0xJQkNYWF9VU0VfQzk5X1NURElOVF9UUjEKKyAgICAgICAvLyAmJiBfR0xJQkNYWF9BVE9NSUNfQlVJTFRJTlNfNAorCisgIC8vIEB9IGdyb3VwIGZ1dHVyZXMKK30KKworI2VuZGlmIC8vIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9GVVRVUkUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvaW5pdGlhbGl6ZXJfbGlzdCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvaW5pdGlhbGl6ZXJfbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODEwNzA2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9pbml0aWFsaXplcl9saXN0CkBAIC0wLDAgKzEsODIgQEAKKy8vIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdCBzdXBwb3J0IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisvLworLy8gR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisvLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLy8KKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbml0aWFsaXplcl9saXN0CisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjaWZuZGVmIF9JTklUSUFMSVpFUl9MSVNUCisjZGVmaW5lIF9JTklUSUFMSVpFUl9MSVNUCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisKKyNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcHVzaChkZWZhdWx0KQorCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKworbmFtZXNwYWNlIHN0ZAoreworICAvLy8gaW5pdGlhbGl6ZXJfbGlzdAorICB0ZW1wbGF0ZTxjbGFzcyBfRT4KKyAgICBjbGFzcyBpbml0aWFsaXplcl9saXN0CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0UgCQl2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBjb25zdCBfRSYgCXJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgY29uc3QgX0UmIAljb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHNpemVfdCAJCXNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgY29uc3QgX0UqIAlpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgY29uc3QgX0UqIAljb25zdF9pdGVyYXRvcjsKKworICAgIHByaXZhdGU6CisgICAgICBpdGVyYXRvcgkJCV9NX2FycmF5OworICAgICAgc2l6ZV90eXBlCQkJX01fbGVuOworCisgICAgICAvLyBUaGUgY29tcGlsZXIgY2FuIGNhbGwgYSBwcml2YXRlIGNvbnN0cnVjdG9yLgorICAgICAgaW5pdGlhbGl6ZXJfbGlzdChjb25zdF9pdGVyYXRvciBfX2EsIHNpemVfdHlwZSBfX2wpCisgICAgICA6IF9NX2FycmF5KF9fYSksIF9NX2xlbihfX2wpIHsgfQorCisgICAgcHVibGljOgorICAgICAgaW5pdGlhbGl6ZXJfbGlzdCgpIDogX01fYXJyYXkoTlVMTCksIF9NX2xlbigwKSB7IH0KKworICAgICAgLy8gTnVtYmVyIG9mIGVsZW1lbnRzLgorICAgICAgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fbGVuOyB9CisKKyAgICAgIC8vIEZpcnN0IGVsZW1lbnQuCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV9hcnJheTsgfQorCisgICAgICAvLyBPbmUgcGFzdCB0aGUgbGFzdCBlbGVtZW50LgorICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgKyBzaXplKCk7IH0KKyAgfTsKK30KKworI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwb3AKKyNlbmRpZiAvLyBDKysweAorI2VuZGlmIC8vIF9JTklUSUFMSVpFUl9MSVNUCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2lvbWFuaXAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2lvbWFuaXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RmYTJhNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvaW9tYW5pcApAQCAtMCwwICsxLDM0OSBAQAorLy8gU3RhbmRhcmQgc3RyZWFtIG1hbmlwdWxhdG9ycyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUKKy8vIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpb21hbmlwCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjcuNi4zICBTdGFuZGFyZCBtYW5pcHVsYXRvcnMKKy8vCisKKyNpZm5kZWYgX0dMSUJDWFhfSU9NQU5JUAorI2RlZmluZSBfR0xJQkNYWF9JT01BTklQIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxpb3Nmd2Q+CisjaW5jbHVkZSA8Yml0cy9pb3NfYmFzZS5oPgorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyNpbmNsdWRlIDxsb2NhbGU+CisjZW5kaWYKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvLyBbMjcuNi4zXSBzdGFuZGFyZCBtYW5pcHVsYXRvcnMKKyAgLy8gQWxzbyBzZWUgRFIgMTgzLgorCisgIHN0cnVjdCBfUmVzZXRpb3NmbGFncyB7IGlvc19iYXNlOjpmbXRmbGFncyBfTV9tYXNrOyB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBNYW5pcHVsYXRvciBmb3IgQGMgc2V0Zi4KKyAgICogIEBwYXJhbSAgbWFzayAgQSBmb3JtYXQgZmxhZ3MgbWFzay4KKyAgICoKKyAgICogIFNlbnQgdG8gYSBzdHJlYW0gb2JqZWN0LCB0aGlzIG1hbmlwdWxhdG9yIHJlc2V0cyB0aGUgc3BlY2lmaWVkIGZsYWdzLAorICAgKiAgdmlhIEBlIHN0cmVhbS5zZXRmKDAsbWFzaykuCisgICovCisgIGlubGluZSBfUmVzZXRpb3NmbGFncyAKKyAgcmVzZXRpb3NmbGFncyhpb3NfYmFzZTo6Zm10ZmxhZ3MgX19tYXNrKQorICB7IHJldHVybiB7IF9fbWFzayB9OyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGlubGluZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIAorICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLCBfUmVzZXRpb3NmbGFncyBfX2YpCisgICAgeyAKKyAgICAgIF9faXMuc2V0Zihpb3NfYmFzZTo6Zm10ZmxhZ3MoMCksIF9fZi5fTV9tYXNrKTsgCisgICAgICByZXR1cm4gX19pczsgCisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiAKKyAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywgX1Jlc2V0aW9zZmxhZ3MgX19mKQorICAgIHsgCisgICAgICBfX29zLnNldGYoaW9zX2Jhc2U6OmZtdGZsYWdzKDApLCBfX2YuX01fbWFzayk7IAorICAgICAgcmV0dXJuIF9fb3M7IAorICAgIH0KKworCisgIHN0cnVjdCBfU2V0aW9zZmxhZ3MgeyBpb3NfYmFzZTo6Zm10ZmxhZ3MgX01fbWFzazsgfTsKKworICAvKioKKyAgICogIEBicmllZiAgTWFuaXB1bGF0b3IgZm9yIEBjIHNldGYuCisgICAqICBAcGFyYW0gIG1hc2sgIEEgZm9ybWF0IGZsYWdzIG1hc2suCisgICAqCisgICAqICBTZW50IHRvIGEgc3RyZWFtIG9iamVjdCwgdGhpcyBtYW5pcHVsYXRvciBzZXRzIHRoZSBmb3JtYXQgZmxhZ3MKKyAgICogIHRvIEBhIG1hc2suCisgICovCisgIGlubGluZSBfU2V0aW9zZmxhZ3MgCisgIHNldGlvc2ZsYWdzKGlvc19iYXNlOjpmbXRmbGFncyBfX21hc2spCisgIHsgcmV0dXJuIHsgX19tYXNrIH07IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgCisgICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsIF9TZXRpb3NmbGFncyBfX2YpCisgICAgeyAKKyAgICAgIF9faXMuc2V0ZihfX2YuX01fbWFzayk7IAorICAgICAgcmV0dXJuIF9faXM7IAorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsIF9TZXRpb3NmbGFncyBfX2YpCisgICAgeyAKKyAgICAgIF9fb3Muc2V0ZihfX2YuX01fbWFzayk7IAorICAgICAgcmV0dXJuIF9fb3M7IAorICAgIH0KKworCisgIHN0cnVjdCBfU2V0YmFzZSB7IGludCBfTV9iYXNlOyB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBNYW5pcHVsYXRvciBmb3IgQGMgc2V0Zi4KKyAgICogIEBwYXJhbSAgYmFzZSAgQSBudW1lcmljIGJhc2UuCisgICAqCisgICAqICBTZW50IHRvIGEgc3RyZWFtIG9iamVjdCwgdGhpcyBtYW5pcHVsYXRvciBjaGFuZ2VzIHRoZQorICAgKiAgQGMgaW9zX2Jhc2U6OmJhc2VmaWVsZCBmbGFncyB0byBAYyBvY3QsIEBjIGRlYywgb3IgQGMgaGV4IHdoZW4gQGEgYmFzZQorICAgKiAgaXMgOCwgMTAsIG9yIDE2LCBhY2NvcmRpbmdseSwgYW5kIHRvIDAgaWYgQGEgYmFzZSBpcyBhbnkgb3RoZXIgdmFsdWUuCisgICovCisgIGlubGluZSBfU2V0YmFzZSAKKyAgc2V0YmFzZShpbnQgX19iYXNlKQorICB7IHJldHVybiB7IF9fYmFzZSB9OyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGlubGluZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIAorICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLCBfU2V0YmFzZSBfX2YpCisgICAgeworICAgICAgX19pcy5zZXRmKF9fZi5fTV9iYXNlID09ICA4ID8gaW9zX2Jhc2U6Om9jdCA6IAorCQlfX2YuX01fYmFzZSA9PSAxMCA/IGlvc19iYXNlOjpkZWMgOiAKKwkJX19mLl9NX2Jhc2UgPT0gMTYgPyBpb3NfYmFzZTo6aGV4IDogCisJCWlvc19iYXNlOjpmbXRmbGFncygwKSwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CisgICAgICByZXR1cm4gX19pczsgCisgICAgfQorICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIAorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLCBfU2V0YmFzZSBfX2YpCisgICAgeworICAgICAgX19vcy5zZXRmKF9fZi5fTV9iYXNlID09ICA4ID8gaW9zX2Jhc2U6Om9jdCA6IAorCQlfX2YuX01fYmFzZSA9PSAxMCA/IGlvc19iYXNlOjpkZWMgOiAKKwkJX19mLl9NX2Jhc2UgPT0gMTYgPyBpb3NfYmFzZTo6aGV4IDogCisJCWlvc19iYXNlOjpmbXRmbGFncygwKSwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CisgICAgICByZXR1cm4gX19vczsgCisgICAgfQorICAKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgc3RydWN0IF9TZXRmaWxsIHsgX0NoYXJUIF9NX2M7IH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgIE1hbmlwdWxhdG9yIGZvciBAYyBmaWxsLgorICAgKiAgQHBhcmFtICBjICBUaGUgbmV3IGZpbGwgY2hhcmFjdGVyLgorICAgKgorICAgKiAgU2VudCB0byBhIHN0cmVhbSBvYmplY3QsIHRoaXMgbWFuaXB1bGF0b3IgY2FsbHMgQGMgZmlsbChjKSBmb3IgdGhhdAorICAgKiAgb2JqZWN0LgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgaW5saW5lIF9TZXRmaWxsPF9DaGFyVD4KKyAgICBzZXRmaWxsKF9DaGFyVCBfX2MpCisgICAgeyByZXR1cm4geyBfX2MgfTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiAKKyAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywgX1NldGZpbGw8X0NoYXJUPiBfX2YpCisgICAgeyAKKyAgICAgIF9faXMuZmlsbChfX2YuX01fYyk7IAorICAgICAgcmV0dXJuIF9faXM7IAorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsIF9TZXRmaWxsPF9DaGFyVD4gX19mKQorICAgIHsgCisgICAgICBfX29zLmZpbGwoX19mLl9NX2MpOyAKKyAgICAgIHJldHVybiBfX29zOyAKKyAgICB9CisKKworICBzdHJ1Y3QgX1NldHByZWNpc2lvbiB7IGludCBfTV9uOyB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBNYW5pcHVsYXRvciBmb3IgQGMgcHJlY2lzaW9uLgorICAgKiAgQHBhcmFtICBuICBUaGUgbmV3IHByZWNpc2lvbi4KKyAgICoKKyAgICogIFNlbnQgdG8gYSBzdHJlYW0gb2JqZWN0LCB0aGlzIG1hbmlwdWxhdG9yIGNhbGxzIEBjIHByZWNpc2lvbihuKSBmb3IKKyAgICogIHRoYXQgb2JqZWN0LgorICAqLworICBpbmxpbmUgX1NldHByZWNpc2lvbiAKKyAgc2V0cHJlY2lzaW9uKGludCBfX24pCisgIHsgcmV0dXJuIHsgX19uIH07IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgCisgICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsIF9TZXRwcmVjaXNpb24gX19mKQorICAgIHsgCisgICAgICBfX2lzLnByZWNpc2lvbihfX2YuX01fbik7IAorICAgICAgcmV0dXJuIF9faXM7IAorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsIF9TZXRwcmVjaXNpb24gX19mKQorICAgIHsgCisgICAgICBfX29zLnByZWNpc2lvbihfX2YuX01fbik7IAorICAgICAgcmV0dXJuIF9fb3M7IAorICAgIH0KKworCisgIHN0cnVjdCBfU2V0dyB7IGludCBfTV9uOyB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBNYW5pcHVsYXRvciBmb3IgQGMgd2lkdGguCisgICAqICBAcGFyYW0gIG4gIFRoZSBuZXcgd2lkdGguCisgICAqCisgICAqICBTZW50IHRvIGEgc3RyZWFtIG9iamVjdCwgdGhpcyBtYW5pcHVsYXRvciBjYWxscyBAYyB3aWR0aChuKSBmb3IKKyAgICogIHRoYXQgb2JqZWN0LgorICAqLworICBpbmxpbmUgX1NldHcgCisgIHNldHcoaW50IF9fbikKKyAgeyByZXR1cm4geyBfX24gfTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiAKKyAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywgX1NldHcgX19mKQorICAgIHsKKyAgICAgIF9faXMud2lkdGgoX19mLl9NX24pOworICAgICAgcmV0dXJuIF9faXM7IAorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsIF9TZXR3IF9fZikKKyAgICB7CisgICAgICBfX29zLndpZHRoKF9fZi5fTV9uKTsKKyAgICAgIHJldHVybiBfX29zOyAKKyAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX01vbmV5VD4KKyAgICBzdHJ1Y3QgX0dldF9tb25leSB7IF9Nb25leVQmIF9NX21vbjsgYm9vbCBfTV9pbnRsOyB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBFeHRlbmRlZCBtYW5pcHVsYXRvciBmb3IgZXh0cmFjdGluZyBtb25leS4KKyAgICogIEBwYXJhbSAgbW9uICBFaXRoZXIgbG9uZyBkb3VibGUgb3IgYSBzcGVjaWFsaXphdGlvbiBvZiBAYyBiYXNpY19zdHJpbmcuCisgICAqICBAcGFyYW0gIGludGwgQSBib29sIGluZGljYXRpbmcgd2hldGhlciBpbnRlcm5hdGlvbmFsIGZvcm1hdCAKKyAgICogICAgICAgICAgICAgICBpcyB0byBiZSB1c2VkLgorICAgKgorICAgKiAgU2VudCB0byBhIHN0cmVhbSBvYmplY3QsIHRoaXMgbWFuaXB1bGF0b3IgZXh0cmFjdHMgQGEgbW9uLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTW9uZXlUPgorICAgIGlubGluZSBfR2V0X21vbmV5PF9Nb25leVQ+CisgICAgZ2V0X21vbmV5KF9Nb25leVQmIF9fbW9uLCBib29sIF9faW50bCA9IGZhbHNlKQorICAgIHsgcmV0dXJuIHsgX19tb24sIF9faW50bCB9OyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfTW9uZXlUPgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywgX0dldF9tb25leTxfTW9uZXlUPiBfX2YpCisgICAgeworICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX0l0ZXI7CisgICAgICB0eXBlZGVmIG1vbmV5X2dldDxfQ2hhclQsIF9JdGVyPiBfTW9uZXlHZXQ7CisgICAgICAKKyAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisgICAgICBjb25zdCBfTW9uZXlHZXQmIF9fbWcgPSB1c2VfZmFjZXQ8X01vbmV5R2V0PihfX2lzLmdldGxvYygpKTsKKworICAgICAgX19tZy5nZXQoX0l0ZXIoX19pcy5yZGJ1ZigpKSwgX0l0ZXIoKSwgX19mLl9NX2ludGwsCisJICAgICAgIF9faXMsIF9fZXJyLCBfX2YuX01fbW9uKTsKKworICAgICAgaWYgKGlvc19iYXNlOjpnb29kYml0ICE9IF9fZXJyKQorCV9faXMuc2V0c3RhdGUoX19lcnIpOworCisgICAgICByZXR1cm4gX19pczsgCisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX01vbmV5VD4KKyAgICBzdHJ1Y3QgX1B1dF9tb25leSB7IGNvbnN0IF9Nb25leVQmIF9NX21vbjsgYm9vbCBfTV9pbnRsOyB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBFeHRlbmRlZCBtYW5pcHVsYXRvciBmb3IgaW5zZXJ0aW5nIG1vbmV5LgorICAgKiAgQHBhcmFtICBtb24gIEVpdGhlciBsb25nIGRvdWJsZSBvciBhIHNwZWNpYWxpemF0aW9uIG9mIEBjIGJhc2ljX3N0cmluZy4KKyAgICogIEBwYXJhbSAgaW50bCBBIGJvb2wgaW5kaWNhdGluZyB3aGV0aGVyIGludGVybmF0aW9uYWwgZm9ybWF0IAorICAgKiAgICAgICAgICAgICAgIGlzIHRvIGJlIHVzZWQuCisgICAqCisgICAqICBTZW50IHRvIGEgc3RyZWFtIG9iamVjdCwgdGhpcyBtYW5pcHVsYXRvciBpbnNlcnRzIEBhIG1vbi4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX01vbmV5VD4KKyAgICBpbmxpbmUgX1B1dF9tb25leTxfTW9uZXlUPgorICAgIHB1dF9tb25leShjb25zdCBfTW9uZXlUJiBfX21vbiwgYm9vbCBfX2ludGwgPSBmYWxzZSkKKyAgICB7IHJldHVybiB7IF9fbW9uLCBfX2ludGwgfTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX01vbmV5VD4KKyAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIAorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLCBfUHV0X21vbmV5PF9Nb25leVQ+IF9fZikKKyAgICB7CisgICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfSXRlcjsKKyAgICAgIHR5cGVkZWYgbW9uZXlfcHV0PF9DaGFyVCwgX0l0ZXI+IF9Nb25leVB1dDsKKyAgICAgIAorICAgICAgY29uc3QgX01vbmV5UHV0JiBfX21wID0gdXNlX2ZhY2V0PF9Nb25leVB1dD4oX19vcy5nZXRsb2MoKSk7CisgICAgICBjb25zdCBfSXRlciBfX2VuZCA9IF9fbXAucHV0KF9JdGVyKF9fb3MucmRidWYoKSksIF9fZi5fTV9pbnRsLAorCQkJCSAgIF9fb3MsIF9fb3MuZmlsbCgpLCBfX2YuX01fbW9uKTsKKworICAgICAgaWYgKF9fZW5kLmZhaWxlZCgpKQorCV9fb3Muc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CisKKyAgICAgIHJldHVybiBfX29zOyAKKyAgICB9CisKKyNlbmRpZgorCisgIC8vIEluaGliaXQgaW1wbGljaXQgaW5zdGFudGlhdGlvbnMgZm9yIHJlcXVpcmVkIGluc3RhbnRpYXRpb25zLAorICAvLyB3aGljaCBhcmUgZGVmaW5lZCB2aWEgZXhwbGljaXQgaW5zdGFudGlhdGlvbnMgZWxzZXdoZXJlLiAgCisgIC8vIE5COiAgVGhpcyBzeW50YXggaXMgYSBHTlUgZXh0ZW5zaW9uLgorI2lmIF9HTElCQ1hYX0VYVEVSTl9URU1QTEFURQorICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgX1NldGZpbGw8Y2hhcj4pOworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgX1NldGlvc2ZsYWdzKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIF9SZXNldGlvc2ZsYWdzKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIF9TZXRiYXNlKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIF9TZXRwcmVjaXNpb24pOworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgX1NldHcpOworICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgX1NldGZpbGw8Y2hhcj4pOworICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgX1NldGlvc2ZsYWdzKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIF9SZXNldGlvc2ZsYWdzKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIF9TZXRiYXNlKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIF9TZXRwcmVjaXNpb24pOworICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgX1NldHcpOworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgX1NldGZpbGw8d2NoYXJfdD4pOworICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBfU2V0aW9zZmxhZ3MpOworICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBfUmVzZXRpb3NmbGFncyk7CisgIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIF9TZXRiYXNlKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgX1NldHByZWNpc2lvbik7CisgIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIF9TZXR3KTsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFtJiwgX1NldGZpbGw8d2NoYXJfdD4pOworICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJlYW0mLCBfU2V0aW9zZmxhZ3MpOworICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJlYW0mLCBfUmVzZXRpb3NmbGFncyk7CisgIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgb3BlcmF0b3I+Pih3aXN0cmVhbSYsIF9TZXRiYXNlKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFtJiwgX1NldHByZWNpc2lvbik7CisgIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgb3BlcmF0b3I+Pih3aXN0cmVhbSYsIF9TZXR3KTsKKyNlbmRpZgorI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmIC8qIF9HTElCQ1hYX0lPTUFOSVAgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvaW9zIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9pb3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2MWFjNgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvaW9zCkBAIC0wLDAgKzEsNDcgQEAKKy8vIElvc3RyZWFtcyBiYXNlIGNsYXNzZXMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LAorLy8gMjAwNSwgMjAwNiwgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgaW9zCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjcuNCAgSW9zdHJlYW1zIGJhc2UgY2xhc3NlcworLy8KKworI2lmbmRlZiBfR0xJQkNYWF9JT1MKKyNkZWZpbmUgX0dMSUJDWFhfSU9TIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPGV4Y2VwdGlvbj4gCQkvLyBGb3IgaW9zX2Jhc2U6OmZhaWx1cmUKKyNpbmNsdWRlIDxiaXRzL2NoYXJfdHJhaXRzLmg+IAkvLyBGb3IgY2hhcl90cmFpdHMsIHN0cmVhbW9mZiwgc3RyZWFtc2l6ZSwgZnBvcworI2luY2x1ZGUgPGJpdHMvbG9jYWxlZndkLmg+CS8vIEZvciBjbGFzcyBsb2NhbGUKKyNpbmNsdWRlIDxiaXRzL2lvc19iYXNlLmg+CS8vIEZvciBpb3NfYmFzZSBkZWNsYXJhdGlvbnMuCisjaW5jbHVkZSA8c3RyZWFtYnVmPiAKKyNpbmNsdWRlIDxiaXRzL2Jhc2ljX2lvcy5oPgorCisjZW5kaWYJLyogX0dMSUJDWFhfSU9TICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2lvc2Z3ZCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvaW9zZndkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYzcyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2lvc2Z3ZApAQCAtMCwwICsxLDE2MSBAQAorLy8gRm9yd2FyZGluZyBkZWNsYXJhdGlvbnMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LAorLy8gMjAwNiwgMjAwNywgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGlvc2Z3ZAorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDI3LjIgIEZvcndhcmQgZGVjbGFyYXRpb25zCisvLworCisjaWZuZGVmIF9HTElCQ1hYX0lPU0ZXRAorI2RlZmluZSBfR0xJQkNYWF9JT1NGV0QgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGJpdHMvc3RyaW5nZndkLmg+IAkvLyBGb3Igc3RyaW5nIGZvcndhcmQgZGVjbGFyYXRpb25zLgorI2luY2x1ZGUgPGJpdHMvcG9zdHlwZXMuaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvKiogCisgICAqICBAZGVmZ3JvdXAgaW8gSS9PCisgICAqCisgICAqICBOZWFybHkgYWxsIG9mIHRoZSBJL08gY2xhc3NlcyBhcmUgcGFyYW1ldGVyaXplZCBvbiB0aGUgdHlwZSBvZgorICAgKiAgY2hhcmFjdGVycyB0aGV5IHJlYWQgYW5kIHdyaXRlLiAgKFRoZSBtYWpvciBleGNlcHRpb24gaXMgaW9zX2Jhc2UgYXQKKyAgICogIHRoZSB0b3Agb2YgdGhlIGhpZXJhcmNoeS4pICBUaGlzIGlzIGEgY2hhbmdlIGZyb20gcHJlLVN0YW5kYXJkCisgICAqICBzdHJlYW1zLCB3aGljaCB3ZXJlIG5vdCB0ZW1wbGF0ZXMuCisgICAqCisgICAqICBGb3IgZWFzZSBvZiB1c2UgYW5kIGNvbXBhdGliaWxpdHksIGFsbCBvZiB0aGUgYmFzaWNfKiBJL08tcmVsYXRlZAorICAgKiAgY2xhc3NlcyBhcmUgZ2l2ZW4gdHlwZWRlZiBuYW1lcyBmb3IgYm90aCBvZiB0aGUgYnVpbHRpbiBjaGFyYWN0ZXIKKyAgICogIHdpZHRocyAod2lkZSBhbmQgbmFycm93KS4gIFRoZSB0eXBlZGVmcyBhcmUgdGhlIHNhbWUgYXMgdGhlCisgICAqICBwcmUtU3RhbmRhcmQgbmFtZXMsIGZvciBleGFtcGxlOgorICAgKgorICAgKiAgQGNvZGUKKyAgICogICAgIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08Y2hhcj4gIGlmc3RyZWFtOworICAgKiAgQGVuZGNvZGUKKyAgICoKKyAgICogIEJlY2F1c2UgcHJvcGVybHkgZm9yd2FyZC1kZWNsYXJpbmcgdGhlc2UgY2xhc3NlcyBjYW4gYmUgZGlmZmljdWx0LCB5b3UKKyAgICogIHNob3VsZCBub3QgZG8gaXQgeW91cnNlbGYuICBJbnN0ZWFkLCBpbmNsdWRlIHRoZSAmbHQ7aW9zZndkJmd0OworICAgKiAgaGVhZGVyLCB3aGljaCBjb250YWlucyBvbmx5IGRlY2xhcmF0aW9ucyBvZiBhbGwgdGhlIEkvTyBjbGFzc2VzIGFzCisgICAqICB3ZWxsIGFzIHRoZSB0eXBlZGVmcy4gIFRyeWluZyB0byBmb3J3YXJkLWRlY2xhcmUgdGhlIHR5cGVkZWZzCisgICAqICB0aGVtc2VsdmVzIChlLmcuLCA8Y29kZT5jbGFzcyBvc3RyZWFtOzwvY29kZT4pIGlzIG5vdCB2YWxpZCBJU08gQysrLgorICAgKgorICAgKiAgRm9yIG1vcmUgc3BlY2lmaWMgZGVjbGFyYXRpb25zLCBzZWUKKyAgICogIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2xpYnN0ZGMrKy9tYW51YWwvYmswMXB0MTFjaDI0Lmh0bWwKKyAgICoKKyAgICogIEB7CisgICovCisgIGNsYXNzIGlvc19iYXNlOyAKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KKyAgICBjbGFzcyBiYXNpY19pb3M7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CisgICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVmOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgorICAgIGNsYXNzIGJhc2ljX2lzdHJlYW07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CisgICAgY2xhc3MgYmFzaWNfb3N0cmVhbTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KKyAgICBjbGFzcyBiYXNpY19pb3N0cmVhbTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAorCSAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CisgICAgY2xhc3MgYmFzaWNfc3RyaW5nYnVmOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCisJICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgorICAgIGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKKwkgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CisgICAgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAorCSAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KKyAgICBjbGFzcyBiYXNpY19zdHJpbmdzdHJlYW07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CisgICAgY2xhc3MgYmFzaWNfZmlsZWJ1ZjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KKyAgICBjbGFzcyBiYXNpY19pZnN0cmVhbTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KKyAgICBjbGFzcyBiYXNpY19vZnN0cmVhbTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KKyAgICBjbGFzcyBiYXNpY19mc3RyZWFtOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgorICAgIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3I7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CisgICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjsKKworICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgIC8vIE5vdCBpbmNsdWRlZC4gICAoPz8/IEFwcGFyZW50bHkgbm8gTFdHIG51bWJlcj8pCisKKyAgdHlwZWRlZiBiYXNpY19pb3M8Y2hhcj4gCQlpb3M7CQkvLy88IEBpc2lvc2Z3ZAorICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPiAJc3RyZWFtYnVmOwkvLy88IEBpc2lvc2Z3ZAorICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcj4gCQlpc3RyZWFtOwkvLy88IEBpc2lvc2Z3ZAorICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcj4gCQlvc3RyZWFtOwkvLy88IEBpc2lvc2Z3ZAorICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPGNoYXI+IAkJaW9zdHJlYW07CS8vLzwgQGlzaW9zZndkCisgIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+IAlzdHJpbmdidWY7CS8vLzwgQGlzaW9zZndkCisgIHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0cmVhbTxjaGFyPiAJaXN0cmluZ3N0cmVhbTsJLy8vPCBAaXNpb3Nmd2QKKyAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXI+IAlvc3RyaW5nc3RyZWFtOwkvLy88IEBpc2lvc2Z3ZAorICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTxjaGFyPiAJc3RyaW5nc3RyZWFtOwkvLy88IEBpc2lvc2Z3ZAorICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcj4gCQlmaWxlYnVmOwkvLy88IEBpc2lvc2Z3ZAorICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPGNoYXI+IAkJaWZzdHJlYW07CS8vLzwgQGlzaW9zZndkCisgIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08Y2hhcj4gCQlvZnN0cmVhbTsJLy8vPCBAaXNpb3Nmd2QKKyAgdHlwZWRlZiBiYXNpY19mc3RyZWFtPGNoYXI+IAkJZnN0cmVhbTsJLy8vPCBAaXNpb3Nmd2QKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIHR5cGVkZWYgYmFzaWNfaW9zPHdjaGFyX3Q+IAkJd2lvczsJCS8vLzwgQGlzaW9zZndkCisgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+IAl3c3RyZWFtYnVmOwkvLy88IEBpc2lvc2Z3ZAorICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4gCXdpc3RyZWFtOwkvLy88IEBpc2lvc2Z3ZAorICB0eXBlZGVmIGJhc2ljX29zdHJlYW08d2NoYXJfdD4gCXdvc3RyZWFtOwkvLy88IEBpc2lvc2Z3ZAorICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPHdjaGFyX3Q+IAl3aW9zdHJlYW07CS8vLzwgQGlzaW9zZndkCisgIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPHdjaGFyX3Q+IAl3c3RyaW5nYnVmOwkvLy88IEBpc2lvc2Z3ZAorICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08d2NoYXJfdD4gCXdpc3RyaW5nc3RyZWFtOwkvLy88IEBpc2lvc2Z3ZAorICB0eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJlYW08d2NoYXJfdD4gCXdvc3RyaW5nc3RyZWFtOwkvLy88IEBpc2lvc2Z3ZAorICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTx3Y2hhcl90PiAJd3N0cmluZ3N0cmVhbTsJLy8vPCBAaXNpb3Nmd2QKKyAgdHlwZWRlZiBiYXNpY19maWxlYnVmPHdjaGFyX3Q+IAl3ZmlsZWJ1ZjsJLy8vPCBAaXNpb3Nmd2QKKyAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTx3Y2hhcl90PiAJd2lmc3RyZWFtOwkvLy88IEBpc2lvc2Z3ZAorICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPHdjaGFyX3Q+IAl3b2ZzdHJlYW07CS8vLzwgQGlzaW9zZndkCisgIHR5cGVkZWYgYmFzaWNfZnN0cmVhbTx3Y2hhcl90PiAJd2ZzdHJlYW07CS8vLzwgQGlzaW9zZndkCisjZW5kaWYKKyAgLyoqIEB9ICAqLworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9JT1NGV0QgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvaW9zdHJlYW0gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2lvc3RyZWFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMTJlYTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2lvc3RyZWFtCkBAIC0wLDAgKzEsNzcgQEAKKy8vIFN0YW5kYXJkIGlvc3RyZWFtIG9iamVjdHMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAxLCAyMDAyLCAyMDA1LCAyMDA4LCAyMDA5LCAyMDEwCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgaW9zdHJlYW0KKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjcuMyAgU3RhbmRhcmQgaW9zdHJlYW0gb2JqZWN0cworLy8KKworI2lmbmRlZiBfR0xJQkNYWF9JT1NUUkVBTQorI2RlZmluZSBfR0xJQkNYWF9JT1NUUkVBTSAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8b3N0cmVhbT4KKyNpbmNsdWRlIDxpc3RyZWFtPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8qKgorICAgKiAgQG5hbWUgU3RhbmRhcmQgU3RyZWFtIE9iamVjdHMKKyAgICoKKyAgICogIFRoZSAmbHQ7aW9zdHJlYW0mZ3Q7IGhlYWRlciBkZWNsYXJlcyB0aGUgZWlnaHQgPGVtPnN0YW5kYXJkIHN0cmVhbQorICAgKiAgb2JqZWN0czwvZW0+LiAgRm9yIG90aGVyIGRlY2xhcmF0aW9ucywgc2VlCisgICAqICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9saWJzdGRjKysvbWFudWFsL2JrMDFwdDExY2gyNC5odG1sCisgICAqICBhbmQgdGhlIEBsaW5rIGlvc2Z3ZCBJL08gZm9yd2FyZCBkZWNsYXJhdGlvbnMgQGVuZGxpbmsKKyAgICoKKyAgICogIFRoZXkgYXJlIHJlcXVpcmVkIGJ5IGRlZmF1bHQgdG8gY29vcGVyYXRlIHdpdGggdGhlIGdsb2JhbCBDCisgICAqICBsaWJyYXJ5J3MgQGMgRklMRSBzdHJlYW1zLCBhbmQgdG8gYmUgYXZhaWxhYmxlIGR1cmluZyBwcm9ncmFtCisgICAqICBzdGFydHVwIGFuZCB0ZXJtaW5hdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgSE9XVE8KKyAgICogIGxpbmtlZCB0byBhYm92ZS4KKyAgKi8KKyAgLy9AeworICBleHRlcm4gaXN0cmVhbSBjaW47CQkvLy88IExpbmtlZCB0byBzdGFuZGFyZCBpbnB1dAorICBleHRlcm4gb3N0cmVhbSBjb3V0OwkJLy8vPCBMaW5rZWQgdG8gc3RhbmRhcmQgb3V0cHV0CisgIGV4dGVybiBvc3RyZWFtIGNlcnI7CQkvLy88IExpbmtlZCB0byBzdGFuZGFyZCBlcnJvciAodW5idWZmZXJlZCkKKyAgZXh0ZXJuIG9zdHJlYW0gY2xvZzsJCS8vLzwgTGlua2VkIHRvIHN0YW5kYXJkIGVycm9yIChidWZmZXJlZCkKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIGV4dGVybiB3aXN0cmVhbSB3Y2luOwkJLy8vPCBMaW5rZWQgdG8gc3RhbmRhcmQgaW5wdXQKKyAgZXh0ZXJuIHdvc3RyZWFtIHdjb3V0OwkvLy88IExpbmtlZCB0byBzdGFuZGFyZCBvdXRwdXQKKyAgZXh0ZXJuIHdvc3RyZWFtIHdjZXJyOwkvLy88IExpbmtlZCB0byBzdGFuZGFyZCBlcnJvciAodW5idWZmZXJlZCkKKyAgZXh0ZXJuIHdvc3RyZWFtIHdjbG9nOwkvLy88IExpbmtlZCB0byBzdGFuZGFyZCBlcnJvciAoYnVmZmVyZWQpCisjZW5kaWYKKyAgLy9AfQorCisgIC8vIEZvciBjb25zdHJ1Y3Rpb24gb2YgZmlsZWJ1ZmZlcnMgZm9yIGNvdXQsIGNpbiwgY2VyciwgY2xvZyBldC4gYWwuCisgIHN0YXRpYyBpb3NfYmFzZTo6SW5pdCBfX2lvaW5pdDsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYgLyogX0dMSUJDWFhfSU9TVFJFQU0gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvaXN0cmVhbSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvaXN0cmVhbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDIzOTZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9pc3RyZWFtCkBAIC0wLDAgKzEsODU3IEBACisvLyBJbnB1dCBzdHJlYW1zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwKKy8vIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyNy42LjEgIElucHV0IHN0cmVhbXMKKy8vCisKKy8qKiBAZmlsZSBpc3RyZWFtCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0lTVFJFQU0KKyNkZWZpbmUgX0dMSUJDWFhfSVNUUkVBTSAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGlvcz4KKyNpbmNsdWRlIDxvc3RyZWFtPgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIC8vIFsyNy42LjEuMV0gVGVtcGxhdGUgY2xhc3MgYmFzaWNfaXN0cmVhbQorICAvKioKKyAgICogIEBicmllZiAgQ29udHJvbGxpbmcgaW5wdXQuCisgICAqICBAaW5ncm91cCBpbworICAgKgorICAgKiAgVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgYWxsIGlucHV0IHN0cmVhbXMuICBJdCBwcm92aWRlcyB0ZXh0CisgICAqICBmb3JtYXR0aW5nIG9mIGFsbCBidWlsdGluIHR5cGVzLCBhbmQgY29tbXVuaWNhdGVzIHdpdGggYW55IGNsYXNzCisgICAqICBkZXJpdmVkIGZyb20gYmFzaWNfc3RyZWFtYnVmIHRvIGRvIHRoZSBhY3R1YWwgaW5wdXQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBjbGFzcyBiYXNpY19pc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gVHlwZXMgKGluaGVyaXRlZCBmcm9tIGJhc2ljX2lvcyAoMjcuNC40KSk6CisgICAgICB0eXBlZGVmIF9DaGFyVCAgICAgICAgICAgICAgICAgICAgIAkJY2hhcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSAJCWludF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSAJCXBvc190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSAJCW9mZl90eXBlOworICAgICAgdHlwZWRlZiBfVHJhaXRzICAgICAgICAgICAgICAgICAgICAJCXRyYWl0c190eXBlOworICAgICAgCisgICAgICAvLyBOb24tc3RhbmRhcmQgVHlwZXM6CisgICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IAkJX19zdHJlYW1idWZfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4JCV9faW9zX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPgkJX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIG51bV9nZXQ8X0NoYXJULCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gPiAgICAgICAgCisgCQkJCQkJCV9fbnVtX2dldF90eXBlOworICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+ICAgICAgICAgICAJCQlfX2N0eXBlX3R5cGU7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvLyBEYXRhIE1lbWJlcnM6CisgICAgICAvKioKKyAgICAgICAqICBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZXh0cmFjdGVkIGluIHRoZSBwcmV2aW91cyB1bmZvcm1hdHRlZAorICAgICAgICogIGZ1bmN0aW9uOyBzZWUgZ2NvdW50KCkuCisgICAgICAqLworICAgICAgc3RyZWFtc2l6ZSAJCV9NX2djb3VudDsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vIFsyNy42LjEuMS4xXSBjb25zdHJ1Y3Rvci9kZXN0cnVjdG9yCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEJhc2UgY29uc3RydWN0b3IuCisgICAgICAgKgorICAgICAgICogIFRoaXMgY3RvciBpcyBhbG1vc3QgbmV2ZXIgY2FsbGVkIGJ5IHRoZSB1c2VyIGRpcmVjdGx5LCByYXRoZXIgZnJvbQorICAgICAgICogIGRlcml2ZWQgY2xhc3NlcycgaW5pdGlhbGl6YXRpb24gbGlzdHMsIHdoaWNoIHBhc3MgYSBwb2ludGVyIHRvCisgICAgICAgKiAgdGhlaXIgb3duIHN0cmVhbSBidWZmZXIuCisgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGJhc2ljX2lzdHJlYW0oX19zdHJlYW1idWZfdHlwZSogX19zYikKKyAgICAgIDogX01fZ2NvdW50KHN0cmVhbXNpemUoMCkpCisgICAgICB7IHRoaXMtPmluaXQoX19zYik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBCYXNlIGRlc3RydWN0b3IuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZG9lcyB2ZXJ5IGxpdHRsZSBhcGFydCBmcm9tIHByb3ZpZGluZyBhIHZpcnR1YWwgYmFzZSBkdG9yLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgCisgICAgICB+YmFzaWNfaXN0cmVhbSgpIAorICAgICAgeyBfTV9nY291bnQgPSBzdHJlYW1zaXplKDApOyB9CisKKyAgICAgIC8vIFsyNy42LjEuMS4yXSBwcmVmaXgvc3VmZml4CisgICAgICBjbGFzcyBzZW50cnk7CisgICAgICBmcmllbmQgY2xhc3Mgc2VudHJ5OworCisgICAgICAvLyBbMjcuNi4xLjJdIGZvcm1hdHRlZCBpbnB1dAorICAgICAgLy8gWzI3LjYuMS4yLjNdIGJhc2ljX2lzdHJlYW06Om9wZXJhdG9yPj4KKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW50ZXJmYWNlIGZvciBtYW5pcHVsYXRvcnMuCisgICAgICAgKgorICAgICAgICogIE1hbmlwdWxhdG9ycyBzdWNoIGFzIEBjIHN0ZDo6d3MgYW5kIEBjIHN0ZDo6ZGVjIHVzZSB0aGVzZQorICAgICAgICogIGZ1bmN0aW9ucyBpbiBjb25zdHJ1Y3RzIGxpa2UgCisgICAgICAgKiAgPGNvZGU+c3RkOjpjaW4gPj4gc3RkOjp3czwvY29kZT4uIAorICAgICAgICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIGlvbWFuaXAgaGVhZGVyLgorICAgICAgKi8KKyAgICAgIF9faXN0cmVhbV90eXBlJgorICAgICAgb3BlcmF0b3I+PihfX2lzdHJlYW1fdHlwZSYgKCpfX3BmKShfX2lzdHJlYW1fdHlwZSYpKQorICAgICAgeyByZXR1cm4gX19wZigqdGhpcyk7IH0KKworICAgICAgX19pc3RyZWFtX3R5cGUmCisgICAgICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKQorICAgICAgeyAKKwlfX3BmKCp0aGlzKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIF9faXN0cmVhbV90eXBlJgorICAgICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKQorICAgICAgeworCV9fcGYoKnRoaXMpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyAgICAgIC8vQH0KKyAgICAgIAorICAgICAgLy8gWzI3LjYuMS4yLjJdIGFyaXRobWV0aWMgZXh0cmFjdG9ycworICAgICAgLyoqCisgICAgICAgKiAgQG5hbWUgQXJpdGhtZXRpYyBFeHRyYWN0b3JzCisgICAgICAgKgorICAgICAgICogIEFsbCB0aGUgQGMgb3BlcmF0b3I+PiBmdW5jdGlvbnMgKGFrYSA8ZW0+Zm9ybWF0dGVkIGlucHV0CisgICAgICAgKiAgZnVuY3Rpb25zPC9lbT4pIGhhdmUgc29tZSBjb21tb24gYmVoYXZpb3IuICBFYWNoIHN0YXJ0cyBieQorICAgICAgICogIGNvbnN0cnVjdGluZyBhIHRlbXBvcmFyeSBvYmplY3Qgb2YgdHlwZSBzdGQ6OmJhc2ljX2lzdHJlYW06OnNlbnRyeQorICAgICAgICogIHdpdGggdGhlIHNlY29uZCBhcmd1bWVudCAobm9za2lwd3MpIHNldCB0byBmYWxzZS4gIFRoaXMgaGFzIHNldmVyYWwKKyAgICAgICAqICBlZmZlY3RzLCBjb25jbHVkaW5nIHdpdGggdGhlIHNldHRpbmcgb2YgYSBzdGF0dXMgZmxhZzsgc2VlIHRoZQorICAgICAgICogIHNlbnRyeSBkb2N1bWVudGF0aW9uIGZvciBtb3JlLgorICAgICAgICoKKyAgICAgICAqICBJZiB0aGUgc2VudHJ5IHN0YXR1cyBpcyBnb29kLCB0aGUgZnVuY3Rpb24gdHJpZXMgdG8gZXh0cmFjdAorICAgICAgICogIHdoYXRldmVyIGRhdGEgaXMgYXBwcm9wcmlhdGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBhcmd1bWVudC4KKyAgICAgICAqCisgICAgICAgKiAgSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBkdXJpbmcgZXh0cmFjdGlvbiwgaW9zX2Jhc2U6OmJhZGJpdAorICAgICAgICogIHdpbGwgYmUgdHVybmVkIG9uIGluIHRoZSBzdHJlYW0ncyBlcnJvciBzdGF0ZSB3aXRob3V0IGNhdXNpbmcgYW4KKyAgICAgICAqICBpb3NfYmFzZTo6ZmFpbHVyZSB0byBiZSB0aHJvd24uICBUaGUgb3JpZ2luYWwgZXhjZXB0aW9uIHdpbGwgdGhlbgorICAgICAgICogIGJlIHJldGhyb3duLgorICAgICAgKi8KKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQmFzaWMgYXJpdGhtZXRpYyBleHRyYWN0b3JzCisgICAgICAgKiAgQHBhcmFtICBBIHZhcmlhYmxlIG9mIGJ1aWx0aW4gdHlwZS4KKyAgICAgICAqICBAcmV0dXJuICBAYyAqdGhpcyBpZiBzdWNjZXNzZnVsCisgICAgICAgKgorICAgICAgICogIFRoZXNlIGZ1bmN0aW9ucyB1c2UgdGhlIHN0cmVhbSdzIGN1cnJlbnQgbG9jYWxlIChzcGVjaWZpY2FsbHksIHRoZQorICAgICAgICogIEBjIG51bV9nZXQgZmFjZXQpIHRvIHBhcnNlIHRoZSBpbnB1dCBkYXRhLgorICAgICAgKi8KKyAgICAgIF9faXN0cmVhbV90eXBlJiAKKyAgICAgIG9wZXJhdG9yPj4oYm9vbCYgX19uKQorICAgICAgeyByZXR1cm4gX01fZXh0cmFjdChfX24pOyB9CisgICAgICAKKyAgICAgIF9faXN0cmVhbV90eXBlJiAKKyAgICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9fbik7CisgICAgICAKKyAgICAgIF9faXN0cmVhbV90eXBlJiAKKyAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQmIF9fbikKKyAgICAgIHsgcmV0dXJuIF9NX2V4dHJhY3QoX19uKTsgfQorCisgICAgICBfX2lzdHJlYW1fdHlwZSYgCisgICAgICBvcGVyYXRvcj4+KGludCYgX19uKTsKKyAgICAKKyAgICAgIF9faXN0cmVhbV90eXBlJiAKKyAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgaW50JiBfX24pCisgICAgICB7IHJldHVybiBfTV9leHRyYWN0KF9fbik7IH0KKworICAgICAgX19pc3RyZWFtX3R5cGUmIAorICAgICAgb3BlcmF0b3I+Pihsb25nJiBfX24pCisgICAgICB7IHJldHVybiBfTV9leHRyYWN0KF9fbik7IH0KKyAgICAgIAorICAgICAgX19pc3RyZWFtX3R5cGUmIAorICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pCisgICAgICB7IHJldHVybiBfTV9leHRyYWN0KF9fbik7IH0KKworI2lmZGVmIF9HTElCQ1hYX1VTRV9MT05HX0xPTkcKKyAgICAgIF9faXN0cmVhbV90eXBlJiAKKyAgICAgIG9wZXJhdG9yPj4obG9uZyBsb25nJiBfX24pCisgICAgICB7IHJldHVybiBfTV9leHRyYWN0KF9fbik7IH0KKworICAgICAgX19pc3RyZWFtX3R5cGUmIAorICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcmIF9fbikKKyAgICAgIHsgcmV0dXJuIF9NX2V4dHJhY3QoX19uKTsgfQorI2VuZGlmCisKKyAgICAgIF9faXN0cmVhbV90eXBlJiAKKyAgICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9fZikKKyAgICAgIHsgcmV0dXJuIF9NX2V4dHJhY3QoX19mKTsgfQorCisgICAgICBfX2lzdHJlYW1fdHlwZSYgCisgICAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19mKQorICAgICAgeyByZXR1cm4gX01fZXh0cmFjdChfX2YpOyB9CisKKyAgICAgIF9faXN0cmVhbV90eXBlJiAKKyAgICAgIG9wZXJhdG9yPj4obG9uZyBkb3VibGUmIF9fZikKKyAgICAgIHsgcmV0dXJuIF9NX2V4dHJhY3QoX19mKTsgfQorCisgICAgICBfX2lzdHJlYW1fdHlwZSYgCisgICAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX3ApCisgICAgICB7IHJldHVybiBfTV9leHRyYWN0KF9fcCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBFeHRyYWN0aW5nIGludG8gYW5vdGhlciBzdHJlYW1idWYuCisgICAgICAgKiAgQHBhcmFtICBzYiAgQSBwb2ludGVyIHRvIGEgc3RyZWFtYnVmCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gYmVoYXZlcyBsaWtlIG9uZSBvZiB0aGUgYmFzaWMgYXJpdGhtZXRpYyBleHRyYWN0b3JzLAorICAgICAgICogIGluIHRoYXQgaXQgYWxzbyBjb25zdHJ1Y3RzIGEgc2VudHJ5IG9iamVjdCBhbmQgaGFzIHRoZSBzYW1lIGVycm9yCisgICAgICAgKiAgaGFuZGxpbmcgYmVoYXZpb3IuCisgICAgICAgKgorICAgICAgICogIElmIEBhIHNiIGlzIE5VTEwsIHRoZSBzdHJlYW0gd2lsbCBzZXQgZmFpbGJpdCBpbiBpdHMgZXJyb3Igc3RhdGUuCisgICAgICAgKgorICAgICAgICogIENoYXJhY3RlcnMgYXJlIGV4dHJhY3RlZCBmcm9tIHRoaXMgc3RyZWFtIGFuZCBpbnNlcnRlZCBpbnRvIHRoZQorICAgICAgICogIEBhIHNiIHN0cmVhbWJ1ZiB1bnRpbCBvbmUgb2YgdGhlIGZvbGxvd2luZyBvY2N1cnM6CisgICAgICAgKgorICAgICAgICogIC0gdGhlIGlucHV0IHN0cmVhbSByZWFjaGVzIGVuZC1vZi1maWxlLAorICAgICAgICogIC0gaW5zZXJ0aW9uIGludG8gdGhlIG91dHB1dCBidWZmZXIgZmFpbHMgKGluIHRoaXMgY2FzZSwgdGhlCisgICAgICAgKiAgICBjaGFyYWN0ZXIgdGhhdCB3b3VsZCBoYXZlIGJlZW4gaW5zZXJ0ZWQgaXMgbm90IGV4dHJhY3RlZCksIG9yCisgICAgICAgKiAgLSBhbiBleGNlcHRpb24gb2NjdXJzIChhbmQgaW4gdGhpcyBjYXNlIGlzIGNhdWdodCkKKyAgICAgICAqCisgICAgICAgKiAgSWYgdGhlIGZ1bmN0aW9uIGluc2VydHMgbm8gY2hhcmFjdGVycywgZmFpbGJpdCBpcyBzZXQuCisgICAgICAqLworICAgICAgX19pc3RyZWFtX3R5cGUmIAorICAgICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsKKyAgICAgIC8vQH0KKyAgICAgIAorICAgICAgLy8gWzI3LjYuMS4zXSB1bmZvcm1hdHRlZCBpbnB1dAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDaGFyYWN0ZXIgY291bnRpbmcKKyAgICAgICAqICBAcmV0dXJuICBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZXh0cmFjdGVkIGJ5IHRoZSBwcmV2aW91cworICAgICAgICogICAgICAgICAgIHVuZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uIGRpc3BhdGNoZWQgZm9yIHRoaXMgc3RyZWFtLgorICAgICAgKi8KKyAgICAgIHN0cmVhbXNpemUgCisgICAgICBnY291bnQoKSBjb25zdCAKKyAgICAgIHsgcmV0dXJuIF9NX2djb3VudDsgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqICBAbmFtZSBVbmZvcm1hdHRlZCBJbnB1dCBGdW5jdGlvbnMKKyAgICAgICAqCisgICAgICAgKiAgQWxsIHRoZSB1bmZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbnMgaGF2ZSBzb21lIGNvbW1vbiBiZWhhdmlvci4KKyAgICAgICAqICBFYWNoIHN0YXJ0cyBieSBjb25zdHJ1Y3RpbmcgYSB0ZW1wb3Jhcnkgb2JqZWN0IG9mIHR5cGUKKyAgICAgICAqICBzdGQ6OmJhc2ljX2lzdHJlYW06OnNlbnRyeSB3aXRoIHRoZSBzZWNvbmQgYXJndW1lbnQgKG5vc2tpcHdzKQorICAgICAgICogIHNldCB0byB0cnVlLiAgVGhpcyBoYXMgc2V2ZXJhbCBlZmZlY3RzLCBjb25jbHVkaW5nIHdpdGggdGhlCisgICAgICAgKiAgc2V0dGluZyBvZiBhIHN0YXR1cyBmbGFnOyBzZWUgdGhlIHNlbnRyeSBkb2N1bWVudGF0aW9uIGZvciBtb3JlLgorICAgICAgICoKKyAgICAgICAqICBJZiB0aGUgc2VudHJ5IHN0YXR1cyBpcyBnb29kLCB0aGUgZnVuY3Rpb24gdHJpZXMgdG8gZXh0cmFjdAorICAgICAgICogIHdoYXRldmVyIGRhdGEgaXMgYXBwcm9wcmlhdGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBhcmd1bWVudC4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGV4dHJhY3RlZCBpcyBzdG9yZWQgZm9yIGxhdGVyIHJldHJpZXZhbAorICAgICAgICogIGJ5IGdjb3VudCgpLgorICAgICAgICoKKyAgICAgICAqICBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGR1cmluZyBleHRyYWN0aW9uLCBpb3NfYmFzZTo6YmFkYml0CisgICAgICAgKiAgd2lsbCBiZSB0dXJuZWQgb24gaW4gdGhlIHN0cmVhbSdzIGVycm9yIHN0YXRlIHdpdGhvdXQgY2F1c2luZyBhbgorICAgICAgICogIGlvc19iYXNlOjpmYWlsdXJlIHRvIGJlIHRocm93bi4gIFRoZSBvcmlnaW5hbCBleGNlcHRpb24gd2lsbCB0aGVuCisgICAgICAgKiAgYmUgcmV0aHJvd24uCisgICAgICAqLworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTaW1wbGUgZXh0cmFjdGlvbi4KKyAgICAgICAqICBAcmV0dXJuICBBIGNoYXJhY3Rlciwgb3IgZW9mKCkuCisgICAgICAgKgorICAgICAgICogIFRyaWVzIHRvIGV4dHJhY3QgYSBjaGFyYWN0ZXIuICBJZiBub25lIGFyZSBhdmFpbGFibGUsIHNldHMgZmFpbGJpdAorICAgICAgICogIGFuZCByZXR1cm5zIHRyYWl0czo6ZW9mKCkuCisgICAgICAqLworICAgICAgaW50X3R5cGUgCisgICAgICBnZXQoKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTaW1wbGUgZXh0cmFjdGlvbi4KKyAgICAgICAqICBAcGFyYW0gIGMgIFRoZSBjaGFyYWN0ZXIgaW4gd2hpY2ggdG8gc3RvcmUgZGF0YS4KKyAgICAgICAqICBAcmV0dXJuICAqdGhpcworICAgICAgICoKKyAgICAgICAqICBUcmllcyB0byBleHRyYWN0IGEgY2hhcmFjdGVyIGFuZCBzdG9yZSBpdCBpbiBAYSBjLiAgSWYgbm9uZSBhcmUKKyAgICAgICAqICBhdmFpbGFibGUsIHNldHMgZmFpbGJpdCBhbmQgcmV0dXJucyB0cmFpdHM6OmVvZigpLgorICAgICAgICoKKyAgICAgICAqICBAbm90ZSAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgb3ZlcmxvYWRlZCBvbiBzaWduZWQgY2hhciBhbmQKKyAgICAgICAqICAgICAgICAgdW5zaWduZWQgY2hhci4KKyAgICAgICovCisgICAgICBfX2lzdHJlYW1fdHlwZSYgCisgICAgICBnZXQoY2hhcl90eXBlJiBfX2MpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNpbXBsZSBtdWx0aXBsZS1jaGFyYWN0ZXIgZXh0cmFjdGlvbi4KKyAgICAgICAqICBAcGFyYW0gIHMgIFBvaW50ZXIgdG8gYW4gYXJyYXkuCisgICAgICAgKiAgQHBhcmFtICBuICBNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHN0b3JlIGluIEBhIHMuCisgICAgICAgKiAgQHBhcmFtICBkZWxpbSAgQSAic3RvcCIgY2hhcmFjdGVyLgorICAgICAgICogIEByZXR1cm4gICp0aGlzCisgICAgICAgKgorICAgICAgICogIENoYXJhY3RlcnMgYXJlIGV4dHJhY3RlZCBhbmQgc3RvcmVkIGludG8gQGEgcyB1bnRpbCBvbmUgb2YgdGhlCisgICAgICAgKiAgZm9sbG93aW5nIGhhcHBlbnM6CisgICAgICAgKgorICAgICAgICogIC0gQGMgbi0xIGNoYXJhY3RlcnMgYXJlIHN0b3JlZAorICAgICAgICogIC0gdGhlIGlucHV0IHNlcXVlbmNlIHJlYWNoZXMgRU9GCisgICAgICAgKiAgLSB0aGUgbmV4dCBjaGFyYWN0ZXIgZXF1YWxzIEBhIGRlbGltLCBpbiB3aGljaCBjYXNlIHRoZSBjaGFyYWN0ZXIKKyAgICAgICAqICAgIGlzIG5vdCBleHRyYWN0ZWQKKyAgICAgICAqCisgICAgICAgKiBJZiBubyBjaGFyYWN0ZXJzIGFyZSBzdG9yZWQsIGZhaWxiaXQgaXMgc2V0IGluIHRoZSBzdHJlYW0ncyBlcnJvcgorICAgICAgICogc3RhdGUuCisgICAgICAgKgorICAgICAgICogSW4gYW55IGNhc2UsIGEgbnVsbCBjaGFyYWN0ZXIgaXMgc3RvcmVkIGludG8gdGhlIG5leHQgbG9jYXRpb24gaW4KKyAgICAgICAqIHRoZSBhcnJheS4KKyAgICAgICAqCisgICAgICAgKiAgQG5vdGUgIFRoaXMgZnVuY3Rpb24gaXMgbm90IG92ZXJsb2FkZWQgb24gc2lnbmVkIGNoYXIgYW5kCisgICAgICAgKiAgICAgICAgIHVuc2lnbmVkIGNoYXIuCisgICAgICAqLworICAgICAgX19pc3RyZWFtX3R5cGUmIAorICAgICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNpbXBsZSBtdWx0aXBsZS1jaGFyYWN0ZXIgZXh0cmFjdGlvbi4KKyAgICAgICAqICBAcGFyYW0gIHMgIFBvaW50ZXIgdG8gYW4gYXJyYXkuCisgICAgICAgKiAgQHBhcmFtICBuICBNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHN0b3JlIGluIEBhIHMuCisgICAgICAgKiAgQHJldHVybiAgKnRoaXMKKyAgICAgICAqCisgICAgICAgKiAgUmV0dXJucyBAYyBnZXQocyxuLHdpZGVuKCZhcG9zO1xcbiZhcG9zOykpLgorICAgICAgKi8KKyAgICAgIF9faXN0cmVhbV90eXBlJiAKKyAgICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCisgICAgICB7IHJldHVybiB0aGlzLT5nZXQoX19zLCBfX24sIHRoaXMtPndpZGVuKCdcbicpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEV4dHJhY3Rpb24gaW50byBhbm90aGVyIHN0cmVhbWJ1Zi4KKyAgICAgICAqICBAcGFyYW0gIHNiICBBIHN0cmVhbWJ1ZiBpbiB3aGljaCB0byBzdG9yZSBkYXRhLgorICAgICAgICogIEBwYXJhbSAgZGVsaW0gIEEgInN0b3AiIGNoYXJhY3Rlci4KKyAgICAgICAqICBAcmV0dXJuICAqdGhpcworICAgICAgICoKKyAgICAgICAqICBDaGFyYWN0ZXJzIGFyZSBleHRyYWN0ZWQgYW5kIGluc2VydGVkIGludG8gQGEgc2IgdW50aWwgb25lIG9mIHRoZQorICAgICAgICogIGZvbGxvd2luZyBoYXBwZW5zOgorICAgICAgICoKKyAgICAgICAqICAtIHRoZSBpbnB1dCBzZXF1ZW5jZSByZWFjaGVzIEVPRgorICAgICAgICogIC0gaW5zZXJ0aW9uIGludG8gdGhlIG91dHB1dCBidWZmZXIgZmFpbHMgKGluIHRoaXMgY2FzZSwgdGhlCisgICAgICAgKiAgICBjaGFyYWN0ZXIgdGhhdCB3b3VsZCBoYXZlIGJlZW4gaW5zZXJ0ZWQgaXMgbm90IGV4dHJhY3RlZCkKKyAgICAgICAqICAtIHRoZSBuZXh0IGNoYXJhY3RlciBlcXVhbHMgQGEgZGVsaW0gKGluIHRoaXMgY2FzZSwgdGhlIGNoYXJhY3RlcgorICAgICAgICogICAgaXMgbm90IGV4dHJhY3RlZCkKKyAgICAgICAqICAtIGFuIGV4Y2VwdGlvbiBvY2N1cnMgKGFuZCBpbiB0aGlzIGNhc2UgaXMgY2F1Z2h0KQorICAgICAgICoKKyAgICAgICAqIElmIG5vIGNoYXJhY3RlcnMgYXJlIHN0b3JlZCwgZmFpbGJpdCBpcyBzZXQgaW4gdGhlIHN0cmVhbSdzIGVycm9yCisgICAgICAgKiBzdGF0ZS4KKyAgICAgICovCisgICAgICBfX2lzdHJlYW1fdHlwZSYKKyAgICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5cGUgX19kZWxpbSk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRXh0cmFjdGlvbiBpbnRvIGFub3RoZXIgc3RyZWFtYnVmLgorICAgICAgICogIEBwYXJhbSAgc2IgIEEgc3RyZWFtYnVmIGluIHdoaWNoIHRvIHN0b3JlIGRhdGEuCisgICAgICAgKiAgQHJldHVybiAgKnRoaXMKKyAgICAgICAqCisgICAgICAgKiAgUmV0dXJucyBAYyBnZXQoc2Isd2lkZW4oJmFwb3M7XFxuJmFwb3M7KSkuCisgICAgICAqLworICAgICAgX19pc3RyZWFtX3R5cGUmCisgICAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19zYikKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmdldChfX3NiLCB0aGlzLT53aWRlbignXG4nKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTdHJpbmcgZXh0cmFjdGlvbi4KKyAgICAgICAqICBAcGFyYW0gIHMgIEEgY2hhcmFjdGVyIGFycmF5IGluIHdoaWNoIHRvIHN0b3JlIHRoZSBkYXRhLgorICAgICAgICogIEBwYXJhbSAgbiAgTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBleHRyYWN0LgorICAgICAgICogIEBwYXJhbSAgZGVsaW0gIEEgInN0b3AiIGNoYXJhY3Rlci4KKyAgICAgICAqICBAcmV0dXJuICAqdGhpcworICAgICAgICoKKyAgICAgICAqICBFeHRyYWN0cyBhbmQgc3RvcmVzIGNoYXJhY3RlcnMgaW50byBAYSBzIHVudGlsIG9uZSBvZiB0aGUKKyAgICAgICAqICBmb2xsb3dpbmcgaGFwcGVucy4gIE5vdGUgdGhhdCB0aGVzZSBjcml0ZXJpYSBhcmUgcmVxdWlyZWQgdG8gYmUKKyAgICAgICAqICB0ZXN0ZWQgaW4gdGhlIG9yZGVyIGxpc3RlZCBoZXJlLCB0byBhbGxvdyBhbiBpbnB1dCBsaW5lIHRvIGV4YWN0bHkKKyAgICAgICAqICBmaWxsIHRoZSBAYSBzIGFycmF5IHdpdGhvdXQgc2V0dGluZyBmYWlsYml0LgorICAgICAgICoKKyAgICAgICAqICAtIyB0aGUgaW5wdXQgc2VxdWVuY2UgcmVhY2hlcyBlbmQtb2YtZmlsZSwgaW4gd2hpY2ggY2FzZSBlb2ZiaXQKKyAgICAgICAqICAgICBpcyBzZXQgaW4gdGhlIHN0cmVhbSBlcnJvciBzdGF0ZQorICAgICAgICogIC0jIHRoZSBuZXh0IGNoYXJhY3RlciBlcXVhbHMgQGMgZGVsaW0sIGluIHdoaWNoIGNhc2UgdGhlIGNoYXJhY3RlcgorICAgICAgICogICAgIGlzIGV4dHJhY3RlZCAoYW5kIHRoZXJlZm9yZSBjb3VudGVkIGluIEBjIGdjb3VudCgpKSBidXQgbm90IHN0b3JlZAorICAgICAgICogIC0jIEBjIG4tMSBjaGFyYWN0ZXJzIGFyZSBzdG9yZWQsIGluIHdoaWNoIGNhc2UgZmFpbGJpdCBpcyBzZXQKKyAgICAgICAqICAgICBpbiB0aGUgc3RyZWFtIGVycm9yIHN0YXRlCisgICAgICAgKgorICAgICAgICogIElmIG5vIGNoYXJhY3RlcnMgYXJlIGV4dHJhY3RlZCwgZmFpbGJpdCBpcyBzZXQuICAoQW4gZW1wdHkgbGluZSBvZgorICAgICAgICogIGlucHV0IHNob3VsZCB0aGVyZWZvcmUgbm90IGNhdXNlIGZhaWxiaXQgdG8gYmUgc2V0LikKKyAgICAgICAqCisgICAgICAgKiAgSW4gYW55IGNhc2UsIGEgbnVsbCBjaGFyYWN0ZXIgaXMgc3RvcmVkIGluIHRoZSBuZXh0IGxvY2F0aW9uIGluCisgICAgICAgKiAgdGhlIGFycmF5LgorICAgICAgKi8KKyAgICAgIF9faXN0cmVhbV90eXBlJiAKKyAgICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU3RyaW5nIGV4dHJhY3Rpb24uCisgICAgICAgKiAgQHBhcmFtICBzICBBIGNoYXJhY3RlciBhcnJheSBpbiB3aGljaCB0byBzdG9yZSB0aGUgZGF0YS4KKyAgICAgICAqICBAcGFyYW0gIG4gIE1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gZXh0cmFjdC4KKyAgICAgICAqICBAcmV0dXJuICAqdGhpcworICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIEBjIGdldGxpbmUocyxuLHdpZGVuKCZhcG9zO1xcbiZhcG9zOykpLgorICAgICAgKi8KKyAgICAgIF9faXN0cmVhbV90eXBlJiAKKyAgICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQorICAgICAgeyByZXR1cm4gdGhpcy0+Z2V0bGluZShfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRGlzY2FyZGluZyBjaGFyYWN0ZXJzCisgICAgICAgKiAgQHBhcmFtICBuICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byBkaXNjYXJkLgorICAgICAgICogIEBwYXJhbSAgZGVsaW0gIEEgInN0b3AiIGNoYXJhY3Rlci4KKyAgICAgICAqICBAcmV0dXJuICAqdGhpcworICAgICAgICoKKyAgICAgICAqICBFeHRyYWN0cyBjaGFyYWN0ZXJzIGFuZCB0aHJvd3MgdGhlbSBhd2F5IHVudGlsIG9uZSBvZiB0aGUKKyAgICAgICAqICBmb2xsb3dpbmcgaGFwcGVuczoKKyAgICAgICAqICAtIGlmIEBhIG4gQGMgIT0gQGMgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSwgQGEgbgorICAgICAgICogICAgY2hhcmFjdGVycyBhcmUgZXh0cmFjdGVkCisgICAgICAgKiAgLSB0aGUgaW5wdXQgc2VxdWVuY2UgcmVhY2hlcyBlbmQtb2YtZmlsZQorICAgICAgICogIC0gdGhlIG5leHQgY2hhcmFjdGVyIGVxdWFscyBAYSBkZWxpbSAoaW4gdGhpcyBjYXNlLCB0aGUgY2hhcmFjdGVyCisgICAgICAgKiAgICBpcyBleHRyYWN0ZWQpOyBub3RlIHRoYXQgdGhpcyBjb25kaXRpb24gd2lsbCBuZXZlciBvY2N1ciBpZgorICAgICAgICogICAgQGEgZGVsaW0gZXF1YWxzIEBjIHRyYWl0czo6ZW9mKCkuCisgICAgICAgKgorICAgICAgICogIE5COiBQcm92aWRlIHRocmVlIG92ZXJsb2FkcywgaW5zdGVhZCBvZiB0aGUgc2luZ2xlIGZ1bmN0aW9uCisgICAgICAgKiAgKHdpdGggZGVmYXVsdHMpIG1hbmRhdGVkIGJ5IHRoZSBTdGFuZGFyZDogdGhpcyBsZWFkcyB0byBhCisgICAgICAgKiAgYmV0dGVyIHBlcmZvcm1pbmcgaW1wbGVtZW50YXRpb24sIHdoaWxlIHN0aWxsIGNvbmZvcm1pbmcgdG8KKyAgICAgICAqICB0aGUgU3RhbmRhcmQuCisgICAgICAqLworICAgICAgX19pc3RyZWFtX3R5cGUmIAorICAgICAgaWdub3JlKCk7CisKKyAgICAgIF9faXN0cmVhbV90eXBlJiAKKyAgICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbik7CisKKyAgICAgIF9faXN0cmVhbV90eXBlJiAKKyAgICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiwgaW50X3R5cGUgX19kZWxpbSk7CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTG9va2luZyBhaGVhZCBpbiB0aGUgc3RyZWFtCisgICAgICAgKiAgQHJldHVybiAgVGhlIG5leHQgY2hhcmFjdGVyLCBvciBlb2YoKS4KKyAgICAgICAqCisgICAgICAgKiAgSWYsIGFmdGVyIGNvbnN0cnVjdGluZyB0aGUgc2VudHJ5IG9iamVjdCwgQGMgZ29vZCgpIGlzIGZhbHNlLAorICAgICAgICogIHJldHVybnMgQGMgdHJhaXRzOjplb2YoKS4gIE90aGVyd2lzZSByZWFkcyBidXQgZG9lcyBub3QgZXh0cmFjdAorICAgICAgICogIHRoZSBuZXh0IGlucHV0IGNoYXJhY3Rlci4KKyAgICAgICovCisgICAgICBpbnRfdHlwZSAKKyAgICAgIHBlZWsoKTsKKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBFeHRyYWN0aW9uIHdpdGhvdXQgZGVsaW1pdGVycy4KKyAgICAgICAqICBAcGFyYW0gIHMgIEEgY2hhcmFjdGVyIGFycmF5LgorICAgICAgICogIEBwYXJhbSAgbiAgTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBzdG9yZS4KKyAgICAgICAqICBAcmV0dXJuICAqdGhpcworICAgICAgICoKKyAgICAgICAqICBJZiB0aGUgc3RyZWFtIHN0YXRlIGlzIEBjIGdvb2QoKSwgZXh0cmFjdHMgY2hhcmFjdGVycyBhbmQgc3RvcmVzCisgICAgICAgKiAgdGhlbSBpbnRvIEBhIHMgdW50aWwgb25lIG9mIHRoZSBmb2xsb3dpbmcgaGFwcGVuczoKKyAgICAgICAqICAtIEBhIG4gY2hhcmFjdGVycyBhcmUgc3RvcmVkCisgICAgICAgKiAgLSB0aGUgaW5wdXQgc2VxdWVuY2UgcmVhY2hlcyBlbmQtb2YtZmlsZSwgaW4gd2hpY2ggY2FzZSB0aGUgZXJyb3IKKyAgICAgICAqICAgIHN0YXRlIGlzIHNldCB0byBAYyBmYWlsYml0fGVvZmJpdC4KKyAgICAgICAqCisgICAgICAgKiAgQG5vdGUgIFRoaXMgZnVuY3Rpb24gaXMgbm90IG92ZXJsb2FkZWQgb24gc2lnbmVkIGNoYXIgYW5kCisgICAgICAgKiAgICAgICAgIHVuc2lnbmVkIGNoYXIuCisgICAgICAqLworICAgICAgX19pc3RyZWFtX3R5cGUmIAorICAgICAgcmVhZChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEV4dHJhY3Rpb24gdW50aWwgdGhlIGJ1ZmZlciBpcyBleGhhdXN0ZWQsIGJ1dCBubyBtb3JlLgorICAgICAgICogIEBwYXJhbSAgcyAgQSBjaGFyYWN0ZXIgYXJyYXkuCisgICAgICAgKiAgQHBhcmFtICBuICBNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHN0b3JlLgorICAgICAgICogIEByZXR1cm4gIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBleHRyYWN0ZWQuCisgICAgICAgKgorICAgICAgICogIEV4dHJhY3RzIGNoYXJhY3RlcnMgYW5kIHN0b3JlcyB0aGVtIGludG8gQGEgcyBkZXBlbmRpbmcgb24gdGhlCisgICAgICAgKiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVtYWluaW5nIGluIHRoZSBzdHJlYW1idWYncyBidWZmZXIsCisgICAgICAgKiAgQGMgcmRidWYoKS0+aW5fYXZhaWwoKSwgY2FsbGVkIEBjIEEgaGVyZToKKyAgICAgICAqICAtIGlmIEBjIEEgQGMgPT0gQGMgLTEsIHNldHMgZW9mYml0IGFuZCBleHRyYWN0cyBubyBjaGFyYWN0ZXJzCisgICAgICAgKiAgLSBpZiBAYyBBIEBjID09IEBjIDAsIGV4dHJhY3RzIG5vIGNoYXJhY3RlcnMKKyAgICAgICAqICAtIGlmIEBjIEEgQGMgPiBAYyAwLCBleHRyYWN0cyBAYyBtaW4oQSxuKQorICAgICAgICoKKyAgICAgICAqICBUaGUgZ29hbCBpcyB0byBlbXB0eSB0aGUgY3VycmVudCBidWZmZXIsIGFuZCB0byBub3QgcmVxdWVzdCBhbnkKKyAgICAgICAqICBtb3JlIGZyb20gdGhlIGV4dGVybmFsIGlucHV0IHNlcXVlbmNlIGNvbnRyb2xsZWQgYnkgdGhlIHN0cmVhbWJ1Zi4KKyAgICAgICovCisgICAgICBzdHJlYW1zaXplIAorICAgICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBVbmV4dHJhY3RpbmcgYSBzaW5nbGUgY2hhcmFjdGVyLgorICAgICAgICogIEBwYXJhbSAgYyAgVGhlIGNoYXJhY3RlciB0byBwdXNoIGJhY2sgaW50byB0aGUgaW5wdXQgc3RyZWFtLgorICAgICAgICogIEByZXR1cm4gICp0aGlzCisgICAgICAgKgorICAgICAgICogIElmIEBjIHJkYnVmKCkgaXMgbm90IG51bGwsIGNhbGxzIEBjIHJkYnVmKCktPnNwdXRiYWNrYyhjKS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgQGMgcmRidWYoKSBpcyBudWxsIG9yIGlmIEBjIHNwdXRiYWNrYygpIGZhaWxzLCBzZXRzIGJhZGJpdCBpbgorICAgICAgICogIHRoZSBlcnJvciBzdGF0ZS4KKyAgICAgICAqCisgICAgICAgKiAgQG5vdGUgIFNpbmNlIG5vIGNoYXJhY3RlcnMgYXJlIGV4dHJhY3RlZCwgdGhlIG5leHQgY2FsbCB0bworICAgICAgICogICAgICAgICBAYyBnY291bnQoKSB3aWxsIHJldHVybiAwLCBhcyByZXF1aXJlZCBieSBEUiA2MC4KKyAgICAgICovCisgICAgICBfX2lzdHJlYW1fdHlwZSYgCisgICAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFVuZXh0cmFjdGluZyB0aGUgcHJldmlvdXMgY2hhcmFjdGVyLgorICAgICAgICogIEByZXR1cm4gICp0aGlzCisgICAgICAgKgorICAgICAgICogIElmIEBjIHJkYnVmKCkgaXMgbm90IG51bGwsIGNhbGxzIEBjIHJkYnVmKCktPnN1bmdldGMoYykuCisgICAgICAgKgorICAgICAgICogIElmIEBjIHJkYnVmKCkgaXMgbnVsbCBvciBpZiBAYyBzdW5nZXRjKCkgZmFpbHMsIHNldHMgYmFkYml0IGluCisgICAgICAgKiAgdGhlIGVycm9yIHN0YXRlLgorICAgICAgICoKKyAgICAgICAqICBAbm90ZSAgU2luY2Ugbm8gY2hhcmFjdGVycyBhcmUgZXh0cmFjdGVkLCB0aGUgbmV4dCBjYWxsIHRvCisgICAgICAgKiAgICAgICAgIEBjIGdjb3VudCgpIHdpbGwgcmV0dXJuIDAsIGFzIHJlcXVpcmVkIGJ5IERSIDYwLgorICAgICAgKi8KKyAgICAgIF9faXN0cmVhbV90eXBlJiAKKyAgICAgIHVuZ2V0KCk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU3luY2hyb25pemluZyB0aGUgc3RyZWFtIGJ1ZmZlci4KKyAgICAgICAqICBAcmV0dXJuICAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUKKyAgICAgICAqCisgICAgICAgKiAgSWYgQGMgcmRidWYoKSBpcyBhIG51bGwgcG9pbnRlciwgcmV0dXJucyAtMS4KKyAgICAgICAqCisgICAgICAgKiAgT3RoZXJ3aXNlLCBjYWxscyBAYyByZGJ1ZigpLT5wdWJzeW5jKCksIGFuZCBpZiB0aGF0IHJldHVybnMgLTEsCisgICAgICAgKiAgc2V0cyBiYWRiaXQgYW5kIHJldHVybnMgLTEuCisgICAgICAgKgorICAgICAgICogIE90aGVyd2lzZSwgcmV0dXJucyAwLgorICAgICAgICoKKyAgICAgICAqICBAbm90ZSAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjb3VudCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMKKyAgICAgICAqICAgICAgICAgZXh0cmFjdGVkLCBpZiBhbnksIGFuZCB0aGVyZWZvcmUgZG9lcyBub3QgYWZmZWN0IHRoZSBuZXh0CisgICAgICAgKiAgICAgICAgIGNhbGwgdG8gQGMgZ2NvdW50KCkuCisgICAgICAqLworICAgICAgaW50IAorICAgICAgc3luYygpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEdldHRpbmcgdGhlIGN1cnJlbnQgcmVhZCBwb3NpdGlvbi4KKyAgICAgICAqICBAcmV0dXJuICBBIGZpbGUgcG9zaXRpb24gb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqICBJZiBAYyBmYWlsKCkgaXMgbm90IGZhbHNlLCByZXR1cm5zIEBjIHBvc190eXBlKC0xKSB0byBpbmRpY2F0ZQorICAgICAgICogIGZhaWx1cmUuICBPdGhlcndpc2UgcmV0dXJucyBAYyByZGJ1ZigpLT5wdWJzZWVrb2ZmKDAsY3VyLGluKS4KKyAgICAgICAqCisgICAgICAgKiAgQG5vdGUgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY291bnQgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzCisgICAgICAgKiAgICAgICAgIGV4dHJhY3RlZCwgaWYgYW55LCBhbmQgdGhlcmVmb3JlIGRvZXMgbm90IGFmZmVjdCB0aGUgbmV4dAorICAgICAgICogICAgICAgICBjYWxsIHRvIEBjIGdjb3VudCgpLgorICAgICAgKi8KKyAgICAgIHBvc190eXBlIAorICAgICAgdGVsbGcoKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDaGFuZ2luZyB0aGUgY3VycmVudCByZWFkIHBvc2l0aW9uLgorICAgICAgICogIEBwYXJhbSAgcG9zICBBIGZpbGUgcG9zaXRpb24gb2JqZWN0LgorICAgICAgICogIEByZXR1cm4gICp0aGlzCisgICAgICAgKgorICAgICAgICogIElmIEBjIGZhaWwoKSBpcyBub3QgdHJ1ZSwgY2FsbHMgQGMgcmRidWYoKS0+cHVic2Vla3Bvcyhwb3MpLiAgSWYKKyAgICAgICAqICB0aGF0IGZ1bmN0aW9uIGZhaWxzLCBzZXRzIGZhaWxiaXQuCisgICAgICAgKgorICAgICAgICogIEBub3RlICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNvdW50IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycworICAgICAgICogICAgICAgICBleHRyYWN0ZWQsIGlmIGFueSwgYW5kIHRoZXJlZm9yZSBkb2VzIG5vdCBhZmZlY3QgdGhlIG5leHQKKyAgICAgICAqICAgICAgICAgY2FsbCB0byBAYyBnY291bnQoKS4KKyAgICAgICovCisgICAgICBfX2lzdHJlYW1fdHlwZSYgCisgICAgICBzZWVrZyhwb3NfdHlwZSk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ2hhbmdpbmcgdGhlIGN1cnJlbnQgcmVhZCBwb3NpdGlvbi4KKyAgICAgICAqICBAcGFyYW0gIG9mZiAgQSBmaWxlIG9mZnNldCBvYmplY3QuCisgICAgICAgKiAgQHBhcmFtICBkaXIgIFRoZSBkaXJlY3Rpb24gaW4gd2hpY2ggdG8gc2Vlay4KKyAgICAgICAqICBAcmV0dXJuICAqdGhpcworICAgICAgICoKKyAgICAgICAqICBJZiBAYyBmYWlsKCkgaXMgbm90IHRydWUsIGNhbGxzIEBjIHJkYnVmKCktPnB1YnNlZWtvZmYob2ZmLGRpcikuCisgICAgICAgKiAgSWYgdGhhdCBmdW5jdGlvbiBmYWlscywgc2V0cyBmYWlsYml0LgorICAgICAgICoKKyAgICAgICAqICBAbm90ZSAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjb3VudCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMKKyAgICAgICAqICAgICAgICAgZXh0cmFjdGVkLCBpZiBhbnksIGFuZCB0aGVyZWZvcmUgZG9lcyBub3QgYWZmZWN0IHRoZSBuZXh0CisgICAgICAgKiAgICAgICAgIGNhbGwgdG8gQGMgZ2NvdW50KCkuCisgICAgICAqLworICAgICAgX19pc3RyZWFtX3R5cGUmIAorICAgICAgc2Vla2cob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKKyAgICAgIC8vQH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIGJhc2ljX2lzdHJlYW0oKQorICAgICAgOiBfTV9nY291bnQoc3RyZWFtc2l6ZSgwKSkKKyAgICAgIHsgdGhpcy0+aW5pdCgwKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgorICAgICAgICBfX2lzdHJlYW1fdHlwZSYKKyAgICAgICAgX01fZXh0cmFjdChfVmFsdWVUJiBfX3YpOworICAgIH07CisKKyAgLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb24gZGVjbGFyYXRpb25zLCBkZWZpbmVkIGluIHNyYy9pc3RyZWFtLmNjLgorICB0ZW1wbGF0ZTw+IAorICAgIGJhc2ljX2lzdHJlYW08Y2hhcj4mIAorICAgIGJhc2ljX2lzdHJlYW08Y2hhcj46OgorICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSk7CisgIAorICB0ZW1wbGF0ZTw+CisgICAgYmFzaWNfaXN0cmVhbTxjaGFyPiYKKyAgICBiYXNpY19pc3RyZWFtPGNoYXI+OjoKKyAgICBpZ25vcmUoc3RyZWFtc2l6ZSBfX24pOworICAKKyAgdGVtcGxhdGU8PgorICAgIGJhc2ljX2lzdHJlYW08Y2hhcj4mCisgICAgYmFzaWNfaXN0cmVhbTxjaGFyPjo6CisgICAgaWdub3JlKHN0cmVhbXNpemUgX19uLCBpbnRfdHlwZSBfX2RlbGltKTsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIHRlbXBsYXRlPD4gCisgICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYgCisgICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90Pjo6CisgICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsKKworICB0ZW1wbGF0ZTw+CisgICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYKKyAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+OjoKKyAgICBpZ25vcmUoc3RyZWFtc2l6ZSBfX24pOworICAKKyAgdGVtcGxhdGU8PgorICAgIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mCisgICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90Pjo6CisgICAgaWdub3JlKHN0cmVhbXNpemUgX19uLCBpbnRfdHlwZSBfX2RlbGltKTsKKyNlbmRpZgorCisgIC8qKgorICAgKiAgQGJyaWVmICBQZXJmb3JtcyBzZXR1cCB3b3JrIGZvciBpbnB1dCBzdHJlYW1zLgorICAgKgorICAgKiAgT2JqZWN0cyBvZiB0aGlzIGNsYXNzIGFyZSBjcmVhdGVkIGJlZm9yZSBhbGwgb2YgdGhlIHN0YW5kYXJkCisgICAqICBleHRyYWN0b3JzIGFyZSBydW4uICBJdCBpcyByZXNwb25zaWJsZSBmb3IgPGVtPmV4Y2VwdGlvbi1zYWZlCisgICAqICBwcmVmaXggYW5kIHN1ZmZpeCBvcGVyYXRpb25zLDwvZW0+IGFsdGhvdWdoIG9ubHkgcHJlZml4IGFjdGlvbnMKKyAgICogIGFyZSBjdXJyZW50bHkgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgY2xhc3MgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnkKKyAgICB7CisgICAgICAvLyBEYXRhIE1lbWJlcnMuCisgICAgICBib29sIF9NX29rOworCisgICAgcHVibGljOgorICAgICAgLy8vIEVhc3kgYWNjZXNzIHRvIGRlcGVuZGFudCB0eXBlcy4KKyAgICAgIHR5cGVkZWYgX1RyYWl0cyAJCQkJCXRyYWl0c190eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiAJCV9fc3RyZWFtYnVmX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAJCV9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIAlfX2N0eXBlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlCQlfX2ludF90eXBlOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFRoZSBjb25zdHJ1Y3RvciBwZXJmb3JtcyBhbGwgdGhlIHdvcmsuCisgICAgICAgKiAgQHBhcmFtICBpcyAgVGhlIGlucHV0IHN0cmVhbSB0byBndWFyZC4KKyAgICAgICAqICBAcGFyYW0gIG5vc2tpcHdzICBXaGV0aGVyIHRvIGNvbnN1bWUgd2hpdGVzcGFjZSBvciBub3QuCisgICAgICAgKgorICAgICAgICogIElmIHRoZSBzdHJlYW0gc3RhdGUgaXMgZ29vZCAoQGEgaXMuZ29vZCgpIGlzIHRydWUpLCB0aGVuIHRoZQorICAgICAgICogIGZvbGxvd2luZyBhY3Rpb25zIGFyZSBwZXJmb3JtZWQsIG90aGVyd2lzZSB0aGUgc2VudHJ5IHN0YXRlCisgICAgICAgKiAgaXMgZmFsc2UgKDxlbT5ub3Qgb2theTwvZW0+KSBhbmQgZmFpbGJpdCBpcyBzZXQgaW4gdGhlCisgICAgICAgKiAgc3RyZWFtIHN0YXRlLgorICAgICAgICoKKyAgICAgICAqICBUaGUgc2VudHJ5J3MgcHJlcGFyYXRvcnkgYWN0aW9ucyBhcmU6CisgICAgICAgKgorICAgICAgICogIC0jIGlmIHRoZSBzdHJlYW0gaXMgdGllZCB0byBhbiBvdXRwdXQgc3RyZWFtLCBAYyBpcy50aWUoKS0+Zmx1c2goKQorICAgICAgICogICAgIGlzIGNhbGxlZCB0byBzeW5jaHJvbml6ZSB0aGUgb3V0cHV0IHNlcXVlbmNlCisgICAgICAgKiAgLSMgaWYgQGEgbm9za2lwd3MgaXMgZmFsc2UsIGFuZCBAYyBpb3NfYmFzZTo6c2tpcHdzIGlzIHNldCBpbgorICAgICAgICogICAgIEBjIGlzLmZsYWdzKCksIHRoZSBzZW50cnkgZXh0cmFjdHMgYW5kIGRpc2NhcmRzIHdoaXRlc3BhY2UKKyAgICAgICAqICAgICBjaGFyYWN0ZXJzIGZyb20gdGhlIHN0cmVhbS4gIFRoZSBjdXJyZW50bHkgaW1idWVkIGxvY2FsZSBpcworICAgICAgICogICAgIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgZWFjaCBjaGFyYWN0ZXIgaXMgd2hpdGVzcGFjZS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgdGhlIHN0cmVhbSBzdGF0ZSBpcyBzdGlsbCBnb29kLCB0aGVuIHRoZSBzZW50cnkgc3RhdGUgYmVjb21lcworICAgICAgICogIHRydWUgKEBhIG9rYXkpLgorICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBzZW50cnkoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLCBib29sIF9fbm9za2lwd3MgPSBmYWxzZSk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUXVpY2sgc3RhdHVzIGNoZWNraW5nLgorICAgICAgICogIEByZXR1cm4gIFRoZSBzZW50cnkgc3RhdGUuCisgICAgICAgKgorICAgICAgICogIEZvciBlYXNlIG9mIHVzZSwgc2VudHJpZXMgbWF5IGJlIGNvbnZlcnRlZCB0byBib29sZWFucy4gIFRoZQorICAgICAgICogIHJldHVybiB2YWx1ZSBpcyB0aGF0IG9mIHRoZSBzZW50cnkgc3RhdGUgKHRydWUgPT0gb2theSkuCisgICAgICAqLworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBleHBsaWNpdAorI2VuZGlmCisgICAgICBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX29rOyB9CisgICAgfTsKKworICAvLyBbMjcuNi4xLjIuM10gY2hhcmFjdGVyIGV4dHJhY3Rpb24gdGVtcGxhdGVzCisgIC8vQHsKKyAgLyoqCisgICAqICBAYnJpZWYgIENoYXJhY3RlciBleHRyYWN0b3JzCisgICAqICBAcGFyYW0gIGluICBBbiBpbnB1dCBzdHJlYW0uCisgICAqICBAcGFyYW0gIGMgIEEgY2hhcmFjdGVyIHJlZmVyZW5jZS4KKyAgICogIEByZXR1cm4gIGluCisgICAqCisgICAqICBCZWhhdmVzIGxpa2Ugb25lIG9mIHRoZSBmb3JtYXR0ZWQgYXJpdGhtZXRpYyBleHRyYWN0b3JzIGRlc2NyaWJlZCBpbgorICAgKiAgc3RkOjpiYXNpY19pc3RyZWFtLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCB3aXRoIGdvb2QKKyAgICogIHN0YXR1cywgdGhpcyBmdW5jdGlvbiBleHRyYWN0cyBhIGNoYXJhY3RlciAoaWYgb25lIGlzIGF2YWlsYWJsZSkgYW5kCisgICAqICBzdG9yZXMgaXQgaW4gQGEgYy4gIE90aGVyd2lzZSwgc2V0cyBmYWlsYml0IGluIHRoZSBpbnB1dCBzdHJlYW0uCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgorICAgIGlubGluZSBiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19pbiwgdW5zaWduZWQgY2hhciYgX19jKQorICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciY+KF9fYykpOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KKyAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyJiBfX2MpCisgICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KKyAgLy9AfQorCisgIC8vQHsKKyAgLyoqCisgICAqICBAYnJpZWYgIENoYXJhY3RlciBzdHJpbmcgZXh0cmFjdG9ycworICAgKiAgQHBhcmFtICBpbiAgQW4gaW5wdXQgc3RyZWFtLgorICAgKiAgQHBhcmFtICBzICBBIHBvaW50ZXIgdG8gYSBjaGFyYWN0ZXIgYXJyYXkuCisgICAqICBAcmV0dXJuICBpbgorICAgKgorICAgKiAgQmVoYXZlcyBsaWtlIG9uZSBvZiB0aGUgZm9ybWF0dGVkIGFyaXRobWV0aWMgZXh0cmFjdG9ycyBkZXNjcmliZWQgaW4KKyAgICogIHN0ZDo6YmFzaWNfaXN0cmVhbS4gIEFmdGVyIGNvbnN0cnVjdGluZyBhIHNlbnRyeSBvYmplY3Qgd2l0aCBnb29kCisgICAqICBzdGF0dXMsIHRoaXMgZnVuY3Rpb24gZXh0cmFjdHMgdXAgdG8gQGMgbiBjaGFyYWN0ZXJzIGFuZCBzdG9yZXMgdGhlbQorICAgKiAgaW50byB0aGUgYXJyYXkgc3RhcnRpbmcgYXQgQGEgcy4gIEBjIG4gaXMgZGVmaW5lZCBhczoKKyAgICoKKyAgICogIC0gaWYgQGMgd2lkdGgoKSBpcyBncmVhdGVyIHRoYW4gemVybywgQGMgbiBpcyB3aWR0aCgpIG90aGVyd2lzZQorICAgKiAgLSBAYyBuIGlzIDxlbT50aGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9mIHRoZSBsYXJnZXN0IGFycmF5IG9mICoKKyAgICogIC0gQGMgY2hhcl90eXBlIHRoYXQgY2FuIHN0b3JlIGEgdGVybWluYXRpbmcgQGMgZW9zLjwvZW0+CisgICAqICAtIFsyNy42LjEuMi4zXS82CisgICAqCisgICAqICBDaGFyYWN0ZXJzIGFyZSBleHRyYWN0ZWQgYW5kIHN0b3JlZCB1bnRpbCBvbmUgb2YgdGhlIGZvbGxvd2luZyBoYXBwZW5zOgorICAgKiAgLSBAYyBuLTEgY2hhcmFjdGVycyBhcmUgc3RvcmVkCisgICAqICAtIEVPRiBpcyByZWFjaGVkCisgICAqICAtIHRoZSBuZXh0IGNoYXJhY3RlciBpcyB3aGl0ZXNwYWNlIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBsb2NhbGUKKyAgICogIC0gdGhlIG5leHQgY2hhcmFjdGVyIGlzIGEgbnVsbCBieXRlIChpLmUuLCBAYyBjaGFyVCgpICkKKyAgICoKKyAgICogIEBjIHdpZHRoKDApIGlzIHRoZW4gY2FsbGVkIGZvciB0aGUgaW5wdXQgc3RyZWFtLgorICAgKgorICAgKiAgSWYgbm8gY2hhcmFjdGVycyBhcmUgZXh0cmFjdGVkLCBzZXRzIGZhaWxiaXQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCogX19zKTsKKworICAvLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBkZWNsYXJhdGlvbiwgZGVmaW5lZCBpbiBzcmMvaXN0cmVhbS5jYy4KKyAgdGVtcGxhdGU8PgorICAgIGJhc2ljX2lzdHJlYW08Y2hhcj4mCisgICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXI+JiBfX2luLCBjaGFyKiBfX3MpOworCisgIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CisgICAgaW5saW5lIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX2luLCB1bnNpZ25lZCBjaGFyKiBfX3MpCisgICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19zKSk7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgorICAgIGlubGluZSBiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXIqIF9fcykKKyAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3MpKTsgfQorICAvL0B9CisKKyAgLy8gMjcuNi4xLjUgVGVtcGxhdGUgY2xhc3MgYmFzaWNfaW9zdHJlYW0KKyAgLyoqCisgICAqICBAYnJpZWYgIE1lcmdpbmcgaXN0cmVhbSBhbmQgb3N0cmVhbSBjYXBhYmlsaXRpZXMuCisgICAqICBAaW5ncm91cCBpbworICAgKgorICAgKiAgVGhpcyBjbGFzcyBtdWx0aXBseSBpbmhlcml0cyBmcm9tIHRoZSBpbnB1dCBhbmQgb3V0cHV0IHN0cmVhbSBjbGFzc2VzCisgICAqICBzaW1wbHkgdG8gcHJvdmlkZSBhIHNpbmdsZSBpbnRlcmZhY2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBjbGFzcyBiYXNpY19pb3N0cmVhbQorICAgIDogcHVibGljIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiwgCisgICAgICBwdWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDI3MS4gYmFzaWNfaW9zdHJlYW0gbWlzc2luZyB0eXBlZGVmcworICAgICAgLy8gVHlwZXMgKGluaGVyaXRlZCk6CisgICAgICB0eXBlZGVmIF9DaGFyVCAgICAgICAgICAgICAgICAgICAgIAkJY2hhcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSAJCWludF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSAJCXBvc190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSAJCW9mZl90eXBlOworICAgICAgdHlwZWRlZiBfVHJhaXRzICAgICAgICAgICAgICAgICAgICAJCXRyYWl0c190eXBlOworCisgICAgICAvLyBOb24tc3RhbmRhcmQgVHlwZXM6CisgICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPgkJX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPgkJX19vc3RyZWFtX3R5cGU7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0b3IgZG9lcyBub3RoaW5nLgorICAgICAgICoKKyAgICAgICAqICBCb3RoIG9mIHRoZSBwYXJlbnQgY2xhc3NlcyBhcmUgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgc2FtZQorICAgICAgICogIHN0cmVhbWJ1ZiBwb2ludGVyIHBhc3NlZCB0byB0aGlzIGNvbnN0cnVjdG9yLgorICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBiYXNpY19pb3N0cmVhbShiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKKyAgICAgIDogX19pc3RyZWFtX3R5cGUoX19zYiksIF9fb3N0cmVhbV90eXBlKF9fc2IpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIERlc3RydWN0b3IgZG9lcyBub3RoaW5nLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgCisgICAgICB+YmFzaWNfaW9zdHJlYW0oKSB7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIGJhc2ljX2lvc3RyZWFtKCkKKyAgICAgIDogX19pc3RyZWFtX3R5cGUoKSwgX19vc3RyZWFtX3R5cGUoKSB7IH0KKyAgICB9OworCisgIC8vIFsyNy42LjEuNF0gc3RhbmRhcmQgYmFzaWNfaXN0cmVhbSBtYW5pcHVsYXRvcnMKKyAgLyoqCisgICAqICBAYnJpZWYgIFF1aWNrIGFuZCBlYXN5IHdheSB0byBlYXQgd2hpdGVzcGFjZQorICAgKgorICAgKiAgVGhpcyBtYW5pcHVsYXRvciBleHRyYWN0cyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMsIHN0b3BwaW5nIHdoZW4gdGhlCisgICAqICBuZXh0IGNoYXJhY3RlciBpcyBub24td2hpdGVzcGFjZSwgb3Igd2hlbiB0aGUgaW5wdXQgc2VxdWVuY2UgaXMgZW1wdHkuCisgICAqICBJZiB0aGUgc2VxdWVuY2UgaXMgZW1wdHksIEBjIGVvZmJpdCBpcyBzZXQgaW4gdGhlIHN0cmVhbSwgYnV0IG5vdAorICAgKiAgQGMgZmFpbGJpdC4KKyAgICoKKyAgICogIFRoZSBjdXJyZW50IGxvY2FsZSBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIHdoaXRlc3BhY2UgY2hhcmFjdGVycy4KKyAgICoKKyAgICogIEV4YW1wbGU6CisgICAqICBAY29kZQorICAgKiAgICAgTXlDbGFzcyAgIG1jOworICAgKgorICAgKiAgICAgc3RkOjpjaW4gPj4gc3RkOjp3cyA+PiBtYzsKKyAgICogIEBlbmRjb2RlCisgICAqICB3aWxsIHNraXAgbGVhZGluZyB3aGl0ZXNwYWNlIGJlZm9yZSBjYWxsaW5nIG9wZXJhdG9yPj4gb24gY2luIGFuZCB5b3VyCisgICAqICBvYmplY3QuICBOb3RlIHRoYXQgdGhlIHNhbWUgZWZmZWN0IGNhbiBiZSBhY2hpZXZlZCBieSBjcmVhdGluZyBhCisgICAqICBzdGQ6OmJhc2ljX2lzdHJlYW06OnNlbnRyeSBpbnNpZGUgeW91ciBkZWZpbml0aW9uIG9mIG9wZXJhdG9yPj4uCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIAorICAgIHdzKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcyk7CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAvLyBbMjcuNy4xLjZdIFJ2YWx1ZSBzdHJlYW0gZXh0cmFjdGlvbgorICAvKioKKyAgICogIEBicmllZiAgR2VuZXJpYyBleHRyYWN0b3IgZm9yIHJ2YWx1ZSBzdHJlYW0KKyAgICogIEBwYXJhbSAgaXMgIEFuIGlucHV0IHN0cmVhbS4KKyAgICogIEBwYXJhbSAgeCAgQSByZWZlcmVuY2UgdG8gdGhlIGV4dHJhY3Rpb24gdGFyZ2V0LgorICAgKiAgQHJldHVybiAgaXMKKyAgICoKKyAgICogIFRoaXMgaXMganVzdCBhIGZvcndhcmRpbmcgZnVuY3Rpb24gdG8gYWxsb3cgZXh0cmFjdGlvbiBmcm9tCisgICAqICBydmFsdWUgc3RyZWFtcyBzaW5jZSB0aGV5IHdvbid0IGJpbmQgdG8gdGhlIGV4dHJhY3RvciBmdW5jdGlvbnMKKyAgICogIHRoYXQgdGFrZSBhbiBsdmFsdWUgcmVmZXJlbmNlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiYgX19pcywgX1RwJiBfX3gpCisgICAgeyByZXR1cm4gKF9faXMgPj4gX194KTsgfQorI2VuZGlmIC8vIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2lmbmRlZiBfR0xJQkNYWF9FWFBPUlRfVEVNUExBVEUKKyMgaW5jbHVkZSA8Yml0cy9pc3RyZWFtLnRjYz4KKyNlbmRpZgorCisjZW5kaWYJLyogX0dMSUJDWFhfSVNUUkVBTSAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9pdGVyYXRvciBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvaXRlcmF0b3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE1YmRmOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvaXRlcmF0b3IKQEAgLTAsMCArMSw3MCBAQAorLy8gPGl0ZXJhdG9yPiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5NworICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGluY2x1ZGUvaXRlcmF0b3IKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfSVRFUkFUT1IKKyNkZWZpbmUgX0dMSUJDWFhfSVRFUkFUT1IgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8Yml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9pdGVyYXRvci5oPgorI2luY2x1ZGUgPG9zdHJlYW0+CisjaW5jbHVkZSA8aXN0cmVhbT4KKyNpbmNsdWRlIDxiaXRzL3N0cmVhbV9pdGVyYXRvci5oPgorI2luY2x1ZGUgPGJpdHMvc3RyZWFtYnVmX2l0ZXJhdG9yLmg+CisKKyNlbmRpZiAvKiBfR0xJQkNYWF9JVEVSQVRPUiAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9saW1pdHMgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2xpbWl0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWI2MjNlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9saW1pdHMKQEAgLTAsMCArMSwxNDEyIEBACisvLyBUaGUgdGVtcGxhdGUgYW5kIGlubGluZXMgZm9yIHRoZSBudW1lcmljX2xpbWl0cyBjbGFzc2VzLiAtKi0gQysrIC0qLSAKKworLy8gQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LAorLy8gMjAwOCwgMjAwOSwgMjAxMCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGxpbWl0cworICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworLy8gTm90ZTogdGhpcyBpcyBub3QgYSBjb25mb3JtaW5nIGltcGxlbWVudGF0aW9uLgorLy8gV3JpdHRlbiBieSBHYWJyaWVsIERvcyBSZWlzIDxnZHJAY29kZXNvdXJjZXJ5LmNvbT4KKworLy8KKy8vIElTTyAxNDg4MjoxOTk4CisvLyAxOC4yLjEKKy8vCisKKyNpZm5kZWYgX0dMSUJDWFhfTlVNRVJJQ19MSU1JVFMKKyNkZWZpbmUgX0dMSUJDWFhfTlVNRVJJQ19MSU1JVFMgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorCisvLworLy8gVGhlIG51bWVyaWNfbGltaXRzPD4gdHJhaXRzIGRvY3VtZW50IGltcGxlbWVudGF0aW9uLWRlZmluZWQgYXNwZWN0cworLy8gb2YgZnVuZGFtZW50YWwgYXJpdGhtZXRpYyBkYXRhIHR5cGVzIChpbnRlZ2VycyBhbmQgZmxvYXRpbmcgcG9pbnRzKS4KKy8vIEZyb20gU3RhbmRhcmQgQysrIHBvaW50IG9mIHZpZXcsIHRoZXJlIGFyZSAxNCBzdWNoIHR5cGVzOgorLy8gICAqIGludGVnZXJzCisvLyAgICAgICAgIGJvb2wJCQkJCQkgICAgICAgICgxKQorLy8gICAgICAgICBjaGFyLCBzaWduZWQgY2hhciwgdW5zaWduZWQgY2hhciwgd2NoYXJfdCAgICAgICAgICAgICg0KQorLy8gICAgICAgICBzaG9ydCwgdW5zaWduZWQgc2hvcnQJCQkJKDIpCisvLyAgICAgICAgIGludCwgdW5zaWduZWQJCQkJCSgyKQorLy8gICAgICAgICBsb25nLCB1bnNpZ25lZCBsb25nCQkJCQkoMikKKy8vCisvLyAgICogZmxvYXRpbmcgcG9pbnRzCisvLyAgICAgICAgIGZsb2F0CQkJCQkJKDEpCisvLyAgICAgICAgIGRvdWJsZQkJCQkJCSgxKQorLy8gICAgICAgICBsb25nIGRvdWJsZQkJCQkJCSgxKQorLy8KKy8vIEdOVSBDKysgdW5kZXJzdGFuZHMgKHdoZXJlIHN1cHBvcnRlZCBieSB0aGUgaG9zdCBDLWxpYnJhcnkpCisvLyAgICogaW50ZWdlcgorLy8gICAgICAgICBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZwkJCSgyKQorLy8KKy8vIHdoaWNoIGJyaW5ncyB1cyB0byAxNiBmdW5kYW1lbnRhbCBhcml0aG1ldGljIGRhdGEgdHlwZXMgaW4gR05VIEMrKy4KKy8vCisvLworLy8gU2luY2UgYSBudW1lcmljX2xpbWl0czw+IGlzIGEgYml0IHRyaWNreSB0byBnZXQgcmlnaHQsIHdlIHJlbHkgb24KKy8vIGFuIGludGVyZmFjZSBjb21wb3NlZCBvZiBtYWNyb3Mgd2hpY2ggc2hvdWxkIGJlIGRlZmluZWQgaW4gY29uZmlnL29zCisvLyBvciBjb25maWcvY3B1IHdoZW4gdGhleSBkaWZmZXIgZnJvbSB0aGUgZ2VuZXJpYyAocmVhZCBhcmJpdHJhcnkpCisvLyBkZWZpbml0aW9ucyBnaXZlbiBoZXJlLgorLy8KKworLy8gVGhlc2UgdmFsdWVzIGNhbiBiZSBvdmVycmlkZGVuIGluIHRoZSB0YXJnZXQgY29uZmlndXJhdGlvbiBmaWxlLgorLy8gVGhlIGRlZmF1bHQgdmFsdWVzIGFyZSBhcHByb3ByaWF0ZSBmb3IgbWFueSAzMi1iaXQgdGFyZ2V0cy4KKworLy8gR0NDIG9ubHkgaW50cmluc2ljYWxseSBzdXBwb3J0cyBtb2R1bG8gaW50ZWdyYWwgdHlwZXMuICBUaGUgb25seSByZW1haW5pbmcKKy8vIGludGVncmFsIGV4Y2VwdGlvbmFsIHZhbHVlcyBpcyBkaXZpc2lvbiBieSB6ZXJvLiAgT25seSB0YXJnZXRzIHRoYXQgZG8gbm90CisvLyBzaWduYWwgZGl2aXNpb24gYnkgemVybyBpbiBzb21lICJoYXJkIHRvIGlnbm9yZSIgd2F5IHNob3VsZCB1c2UgZmFsc2UuCisjaWZuZGVmIF9fZ2xpYmN4eF9pbnRlZ3JhbF90cmFwcworIyBkZWZpbmUgX19nbGliY3h4X2ludGVncmFsX3RyYXBzIHRydWUKKyNlbmRpZgorCisvLyBmbG9hdAorLy8KKworLy8gRGVmYXVsdCB2YWx1ZXMuICBTaG91bGQgYmUgb3ZlcnJpZGRlbiBpbiBjb25maWd1cmF0aW9uIGZpbGVzIGlmIG5lY2Vzc2FyeS4KKworI2lmbmRlZiBfX2dsaWJjeHhfZmxvYXRfaGFzX2Rlbm9ybV9sb3NzCisjICBkZWZpbmUgX19nbGliY3h4X2Zsb2F0X2hhc19kZW5vcm1fbG9zcyBmYWxzZQorI2VuZGlmCisjaWZuZGVmIF9fZ2xpYmN4eF9mbG9hdF90cmFwcworIyAgZGVmaW5lIF9fZ2xpYmN4eF9mbG9hdF90cmFwcyBmYWxzZQorI2VuZGlmCisjaWZuZGVmIF9fZ2xpYmN4eF9mbG9hdF90aW55bmVzc19iZWZvcmUKKyMgIGRlZmluZSBfX2dsaWJjeHhfZmxvYXRfdGlueW5lc3NfYmVmb3JlIGZhbHNlCisjZW5kaWYKKworLy8gZG91YmxlCisKKy8vIERlZmF1bHQgdmFsdWVzLiAgU2hvdWxkIGJlIG92ZXJyaWRkZW4gaW4gY29uZmlndXJhdGlvbiBmaWxlcyBpZiBuZWNlc3NhcnkuCisKKyNpZm5kZWYgX19nbGliY3h4X2RvdWJsZV9oYXNfZGVub3JtX2xvc3MKKyMgIGRlZmluZSBfX2dsaWJjeHhfZG91YmxlX2hhc19kZW5vcm1fbG9zcyBmYWxzZQorI2VuZGlmCisjaWZuZGVmIF9fZ2xpYmN4eF9kb3VibGVfdHJhcHMKKyMgIGRlZmluZSBfX2dsaWJjeHhfZG91YmxlX3RyYXBzIGZhbHNlCisjZW5kaWYKKyNpZm5kZWYgX19nbGliY3h4X2RvdWJsZV90aW55bmVzc19iZWZvcmUKKyMgIGRlZmluZSBfX2dsaWJjeHhfZG91YmxlX3RpbnluZXNzX2JlZm9yZSBmYWxzZQorI2VuZGlmCisKKy8vIGxvbmcgZG91YmxlCisKKy8vIERlZmF1bHQgdmFsdWVzLiAgU2hvdWxkIGJlIG92ZXJyaWRkZW4gaW4gY29uZmlndXJhdGlvbiBmaWxlcyBpZiBuZWNlc3NhcnkuCisKKyNpZm5kZWYgX19nbGliY3h4X2xvbmdfZG91YmxlX2hhc19kZW5vcm1fbG9zcworIyAgZGVmaW5lIF9fZ2xpYmN4eF9sb25nX2RvdWJsZV9oYXNfZGVub3JtX2xvc3MgZmFsc2UKKyNlbmRpZgorI2lmbmRlZiBfX2dsaWJjeHhfbG9uZ19kb3VibGVfdHJhcHMKKyMgIGRlZmluZSBfX2dsaWJjeHhfbG9uZ19kb3VibGVfdHJhcHMgZmFsc2UKKyNlbmRpZgorI2lmbmRlZiBfX2dsaWJjeHhfbG9uZ19kb3VibGVfdGlueW5lc3NfYmVmb3JlCisjICBkZWZpbmUgX19nbGliY3h4X2xvbmdfZG91YmxlX3RpbnluZXNzX2JlZm9yZSBmYWxzZQorI2VuZGlmCisKKy8vIFlvdSBzaG91bGQgbm90IG5lZWQgdG8gZGVmaW5lIGFueSBtYWNyb3MgYmVsb3cgdGhpcyBwb2ludC4KKworI2RlZmluZSBfX2dsaWJjeHhfc2lnbmVkKFQpCSgoVCkoLTEpIDwgMCkKKworI2RlZmluZSBfX2dsaWJjeHhfbWluKFQpIFwKKyAgKF9fZ2xpYmN4eF9zaWduZWQgKFQpID8gKFQpMSA8PCBfX2dsaWJjeHhfZGlnaXRzIChUKSA6IChUKTApCisKKyNkZWZpbmUgX19nbGliY3h4X21heChUKSBcCisgIChfX2dsaWJjeHhfc2lnbmVkIChUKSA/IFwKKyAgICgoKCgoVCkxIDw8IChfX2dsaWJjeHhfZGlnaXRzIChUKSAtIDEpKSAtIDEpIDw8IDEpICsgMSkgOiB+KFQpMCkKKworI2RlZmluZSBfX2dsaWJjeHhfZGlnaXRzKFQpIFwKKyAgKHNpemVvZihUKSAqIF9fQ0hBUl9CSVRfXyAtIF9fZ2xpYmN4eF9zaWduZWQgKFQpKQorCisvLyBUaGUgZnJhY3Rpb24gNjQzLzIxMzYgYXBwcm94aW1hdGVzIGxvZzEwKDIpIHRvIDcgc2lnbmlmaWNhbnQgZGlnaXRzLgorI2RlZmluZSBfX2dsaWJjeHhfZGlnaXRzMTAoVCkgXAorICAoX19nbGliY3h4X2RpZ2l0cyAoVCkgKiA2NDMgLyAyMTM2KQorCisjZGVmaW5lIF9fZ2xpYmN4eF9tYXhfZGlnaXRzMTAoVCkgXAorICAoMiArIChUKSAqIDY0MyAvIDIxMzYpCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgLyoqCisgICAqICBAYnJpZWYgRGVzY3JpYmVzIHRoZSByb3VuZGluZyBzdHlsZSBmb3IgZmxvYXRpbmctcG9pbnQgdHlwZXMuCisgICAqCisgICAqICBUaGlzIGlzIHVzZWQgaW4gdGhlIHN0ZDo6bnVtZXJpY19saW1pdHMgY2xhc3MuCisgICovCisgIGVudW0gZmxvYXRfcm91bmRfc3R5bGUKKyAgeworICAgIHJvdW5kX2luZGV0ZXJtaW5hdGUgICAgICAgPSAtMSwgICAgLy8vPCBTZWxmLWV4cGxhbmF0b3J5LgorICAgIHJvdW5kX3Rvd2FyZF96ZXJvICAgICAgICAgPSAwLCAgICAgLy8vPCBTZWxmLWV4cGxhbmF0b3J5LgorICAgIHJvdW5kX3RvX25lYXJlc3QgICAgICAgICAgPSAxLCAgICAgLy8vPCBUbyB0aGUgbmVhcmVzdCByZXByZXNlbnRhYmxlIHZhbHVlLgorICAgIHJvdW5kX3Rvd2FyZF9pbmZpbml0eSAgICAgPSAyLCAgICAgLy8vPCBTZWxmLWV4cGxhbmF0b3J5LgorICAgIHJvdW5kX3Rvd2FyZF9uZWdfaW5maW5pdHkgPSAzICAgICAgLy8vPCBTZWxmLWV4cGxhbmF0b3J5LgorICB9OworCisgIC8qKgorICAgKiAgQGJyaWVmIERlc2NyaWJlcyB0aGUgZGVub3JtYWxpemF0aW9uIGZvciBmbG9hdGluZy1wb2ludCB0eXBlcy4KKyAgICoKKyAgICogIFRoZXNlIHZhbHVlcyByZXByZXNlbnQgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgYSB2YXJpYWJsZSBudW1iZXIKKyAgICogIG9mIGV4cG9uZW50IGJpdHMuICBUaGlzIHR5cGUgaXMgdXNlZCBpbiB0aGUgc3RkOjpudW1lcmljX2xpbWl0cyBjbGFzcy4KKyAgKi8KKyAgZW51bSBmbG9hdF9kZW5vcm1fc3R5bGUKKyAgeworICAgIC8vLyBJbmRldGVybWluYXRlIGF0IGNvbXBpbGUgdGltZSB3aGV0aGVyIGRlbm9ybWFsaXplZCB2YWx1ZXMgYXJlIGFsbG93ZWQuCisgICAgZGVub3JtX2luZGV0ZXJtaW5hdGUgPSAtMSwKKyAgICAvLy8gVGhlIHR5cGUgZG9lcyBub3QgYWxsb3cgZGVub3JtYWxpemVkIHZhbHVlcy4KKyAgICBkZW5vcm1fYWJzZW50ICAgICAgICA9IDAsCisgICAgLy8vIFRoZSB0eXBlIGFsbG93cyBkZW5vcm1hbGl6ZWQgdmFsdWVzLgorICAgIGRlbm9ybV9wcmVzZW50ICAgICAgID0gMQorICB9OworCisgIC8qKgorICAgKiAgQGJyaWVmIFBhcnQgb2Ygc3RkOjpudW1lcmljX2xpbWl0cy4KKyAgICoKKyAgICogIFRoZSBAYyBzdGF0aWMgQGMgY29uc3QgbWVtYmVycyBhcmUgdXNhYmxlIGFzIGludGVncmFsIGNvbnN0YW50CisgICAqICBleHByZXNzaW9ucy4KKyAgICoKKyAgICogIEBub3RlIFRoaXMgaXMgYSBzZXBhcmF0ZSBjbGFzcyBmb3IgcHVycG9zZXMgb2YgZWZmaWNpZW5jeTsgeW91CisgICAqICAgICAgICBzaG91bGQgb25seSBhY2Nlc3MgdGhlc2UgbWVtYmVycyBhcyBwYXJ0IG9mIGFuIGluc3RhbnRpYXRpb24KKyAgICogICAgICAgIG9mIHRoZSBzdGQ6Om51bWVyaWNfbGltaXRzIGNsYXNzLgorICAqLworICBzdHJ1Y3QgX19udW1lcmljX2xpbWl0c19iYXNlCisgIHsKKyAgICAvKiogVGhpcyB3aWxsIGJlIHRydWUgZm9yIGFsbCBmdW5kYW1lbnRhbCB0eXBlcyAod2hpY2ggaGF2ZQorICAgICAgICBzcGVjaWFsaXphdGlvbnMpLCBhbmQgZmFsc2UgZm9yIGV2ZXJ5dGhpbmcgZWxzZS4gICovCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSBmYWxzZTsKKworICAgIC8qKiBUaGUgbnVtYmVyIG9mIEBjIHJhZGl4IGRpZ2l0cyB0aGF0IGJlIHJlcHJlc2VudGVkIHdpdGhvdXQgY2hhbmdlOiAgZm9yCisgICAgICAgIGludGVnZXIgdHlwZXMsIHRoZSBudW1iZXIgb2Ygbm9uLXNpZ24gYml0cyBpbiB0aGUgbWFudGlzc2E7IGZvcgorICAgICAgICBmbG9hdGluZyB0eXBlcywgdGhlIG51bWJlciBvZiBAYyByYWRpeCBkaWdpdHMgaW4gdGhlIG1hbnRpc3NhLiAgKi8KKyAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDA7CisgICAgLyoqIFRoZSBudW1iZXIgb2YgYmFzZSAxMCBkaWdpdHMgdGhhdCBjYW4gYmUgcmVwcmVzZW50ZWQgd2l0aG91dCBjaGFuZ2UuICovCisgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDA7CisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAvKiogVGhlIG51bWJlciBvZiBiYXNlIDEwIGRpZ2l0cyByZXF1aXJlZCB0byBlbnN1cmUgdGhhdCB2YWx1ZXMgd2hpY2gKKwlkaWZmZXIgYXJlIGFsd2F5cyBkaWZmZXJlbnRpYXRlZC4gICovCisgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZGlnaXRzMTAgPSAwOworI2VuZGlmCisgICAgLyoqIFRydWUgaWYgdGhlIHR5cGUgaXMgc2lnbmVkLiAgKi8KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKKyAgICAvKiogVHJ1ZSBpZiB0aGUgdHlwZSBpcyBpbnRlZ2VyLgorICAgICAqICBJcyB0aGlzIHN1cHBvc2VkIHRvIGJlIDxlbT5pZiB0aGUgdHlwZSBpcyBpbnRlZ3JhbD88L2VtPiAgKi8KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CisgICAgLyoqIFRydWUgaWYgdGhlIHR5cGUgdXNlcyBhbiBleGFjdCByZXByZXNlbnRhdGlvbi4gPGVtPkFsbCBpbnRlZ2VyIHR5cGVzIGFyZQorICAgICAgICBleGFjdCwgYnV0IG5vdCBhbGwgZXhhY3QgdHlwZXMgYXJlIGludGVnZXIuICBGb3IgZXhhbXBsZSwgcmF0aW9uYWwgYW5kCisgICAgICAgIGZpeGVkLWV4cG9uZW50IHJlcHJlc2VudGF0aW9ucyBhcmUgZXhhY3QgYnV0IG5vdCBpbnRlZ2VyLjwvZW0+CisgICAgICAgIFsxOC4yLjEuMl0vMTUgICovCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKKyAgICAvKiogRm9yIGludGVnZXIgdHlwZXMsIHNwZWNpZmllcyB0aGUgYmFzZSBvZiB0aGUgcmVwcmVzZW50YXRpb24uICBGb3IKKyAgICAgICAgZmxvYXRpbmcgdHlwZXMsIHNwZWNpZmllcyB0aGUgYmFzZSBvZiB0aGUgZXhwb25lbnQgcmVwcmVzZW50YXRpb24uICAqLworICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAwOworCisgICAgLyoqIFRoZSBtaW5pbXVtIG5lZ2F0aXZlIGludGVnZXIgc3VjaCB0aGF0IEBjIHJhZGl4IHJhaXNlZCB0byB0aGUgcG93ZXIgb2YKKyAgICAgICAgKG9uZSBsZXNzIHRoYW4gdGhhdCBpbnRlZ2VyKSBpcyBhIG5vcm1hbGl6ZWQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLiAgKi8KKyAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CisgICAgLyoqIFRoZSBtaW5pbXVtIG5lZ2F0aXZlIGludGVnZXIgc3VjaCB0aGF0IDEwIHJhaXNlZCB0byB0aGF0IHBvd2VyIGlzIGluCisgICAgICAgIHRoZSByYW5nZSBvZiBub3JtYWxpemVkIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuICAqLworICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOworICAgIC8qKiBUaGUgbWF4aW11bSBwb3NpdGl2ZSBpbnRlZ2VyIHN1Y2ggdGhhdCBAYyByYWRpeCByYWlzZWQgdG8gdGhlIHBvd2VyIG9mCisgICAgICAgIChvbmUgbGVzcyB0aGFuIHRoYXQgaW50ZWdlcikgaXMgYSByZXByZXNlbnRhYmxlIGZpbml0ZSBmbG9hdGluZyBwb2ludAorCW51bWJlci4gICovCisgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOworICAgIC8qKiBUaGUgbWF4aW11bSBwb3NpdGl2ZSBpbnRlZ2VyIHN1Y2ggdGhhdCAxMCByYWlzZWQgdG8gdGhhdCBwb3dlciBpcyBpbgorICAgICAgICB0aGUgcmFuZ2Ugb2YgcmVwcmVzZW50YWJsZSBmaW5pdGUgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gICovCisgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CisKKyAgICAvKiogVHJ1ZSBpZiB0aGUgdHlwZSBoYXMgYSByZXByZXNlbnRhdGlvbiBmb3IgcG9zaXRpdmUgaW5maW5pdHkuICAqLworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOworICAgIC8qKiBUcnVlIGlmIHRoZSB0eXBlIGhhcyBhIHJlcHJlc2VudGF0aW9uIGZvciBhIHF1aWV0IChub24tc2lnbmFsaW5nKQorICAgICAgICA8ZW0+Tm90IGEgTnVtYmVyPC9lbT4uICAqLworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKKyAgICAvKiogVHJ1ZSBpZiB0aGUgdHlwZSBoYXMgYSByZXByZXNlbnRhdGlvbiBmb3IgYSBzaWduYWxpbmcKKyAgICAgICAgPGVtPk5vdCBhIE51bWJlcjwvZW0+LiAgKi8KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOworICAgIC8qKiBTZWUgc3RkOjpmbG9hdF9kZW5vcm1fc3R5bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uICAqLworICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CisgICAgLyoqIDxlbT5UcnVlIGlmIGxvc3Mgb2YgYWNjdXJhY3kgaXMgZGV0ZWN0ZWQgYXMgYSBkZW5vcm1hbGl6YXRpb24gbG9zcywKKyAgICAgICAgcmF0aGVyIHRoYW4gYXMgYW4gaW5leGFjdCByZXN1bHQuPC9lbT4gWzE4LjIuMS4yXS80MiAgKi8KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKKworICAgIC8qKiBUcnVlIGlmLWFuZC1vbmx5LWlmIHRoZSB0eXBlIGFkaGVyZXMgdG8gdGhlIElFQyA1NTkgc3RhbmRhcmQsIGFsc28KKyAgICAgICAga25vd24gYXMgSUVFRSA3NTQuICAoT25seSBtYWtlcyBzZW5zZSBmb3IgZmxvYXRpbmcgcG9pbnQgdHlwZXMuKSAgKi8KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKKyAgICAvKiogPGVtPlRydWUgaWYgdGhlIHNldCBvZiB2YWx1ZXMgcmVwcmVzZW50YWJsZSBieSB0aGUgdHlwZSBpcworICAgICAgICBmaW5pdGUuICBBbGwgYnVpbHQtaW4gdHlwZXMgYXJlIGJvdW5kZWQsIHRoaXMgbWVtYmVyIHdvdWxkIGJlCisgICAgICAgIGZhbHNlIGZvciBhcmJpdHJhcnkgcHJlY2lzaW9uIHR5cGVzLjwvZW0+IFsxOC4yLjEuMl0vNTQgICovCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IGZhbHNlOworICAgIC8qKiBUcnVlIGlmIHRoZSB0eXBlIGlzIEBlIG1vZHVsbywgdGhhdCBpcywgaWYgaXQgaXMgcG9zc2libGUgdG8gYWRkIHR3bworICAgICAgICBwb3NpdGl2ZSBudW1iZXJzIGFuZCBoYXZlIGEgcmVzdWx0IHRoYXQgd3JhcHMgYXJvdW5kIHRvIGEgdGhpcmQgbnVtYmVyCisgICAgICAgIHRoYXQgaXMgbGVzcy4gIFR5cGljYWxseSBmYWxzZSBmb3IgZmxvYXRpbmcgdHlwZXMsIHRydWUgZm9yIHVuc2lnbmVkCisgICAgICAgIGludGVnZXJzLCBhbmQgdHJ1ZSBmb3Igc2lnbmVkIGludGVnZXJzLiAgKi8KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKKworICAgIC8qKiBUcnVlIGlmIHRyYXBwaW5nIGlzIGltcGxlbWVudGVkIGZvciB0aGlzIHR5cGUuICAqLworICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CisgICAgLyoqIFRydWUgaWYgdGluaW5lc3MgaXMgZGV0ZWN0ZWQgYmVmb3JlIHJvdW5kaW5nLiAgKHNlZSBJRUMgNTU5KSAgKi8KKyAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKKyAgICAvKiogU2VlIHN0ZDo6ZmxvYXRfcm91bmRfc3R5bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uICBUaGlzIGlzIG9ubHkKKyAgICAgICAgbWVhbmluZ2Z1bCBmb3IgZmxvYXRpbmcgdHlwZXM7IGludGVnZXIgdHlwZXMgd2lsbCBhbGwgYmUKKwlyb3VuZF90b3dhcmRfemVyby4gICovCisgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CisgIH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgUHJvcGVydGllcyBvZiBmdW5kYW1lbnRhbCB0eXBlcy4KKyAgICoKKyAgICogIFRoaXMgY2xhc3MgYWxsb3dzIGEgcHJvZ3JhbSB0byBvYnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgICAqICByZXByZXNlbnRhdGlvbiBvZiBhIGZ1bmRhbWVudGFsIHR5cGUgb24gYSBnaXZlbiBwbGF0Zm9ybS4gIEZvcgorICAgKiAgbm9uLWZ1bmRhbWVudGFsIHR5cGVzLCB0aGUgZnVuY3Rpb25zIHdpbGwgcmV0dXJuIDAgYW5kIHRoZSBkYXRhCisgICAqICBtZW1iZXJzIHdpbGwgYWxsIGJlIEBjIGZhbHNlLgorICAgKgorICAgKiAgX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUzogIERScyAyMDEgYW5kIDE4NCAoaGkgR2FieSEpIGFyZQorICAgKiAgbm90ZWQsIGJ1dCBub3QgaW5jb3Jwb3JhdGVkIGluIHRoaXMgZG9jdW1lbnRlZCAoeWV0KS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBudW1lcmljX2xpbWl0cyA6IHB1YmxpYyBfX251bWVyaWNfbGltaXRzX2Jhc2UKKyAgICB7CisgICAgICAvKiogVGhlIG1pbmltdW0gZmluaXRlIHZhbHVlLCBvciBmb3IgZmxvYXRpbmcgdHlwZXMgd2l0aAorICAgICAgICAgIGRlbm9ybWFsaXphdGlvbiwgdGhlIG1pbmltdW0gcG9zaXRpdmUgbm9ybWFsaXplZCB2YWx1ZS4gICovCisgICAgICBzdGF0aWMgX1RwIG1pbigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQorICAgICAgLyoqIFRoZSBtYXhpbXVtIGZpbml0ZSB2YWx1ZS4gICovCisgICAgICBzdGF0aWMgX1RwIG1heCgpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQorI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAvKiogQSBmaW5pdGUgdmFsdWUgeCBzdWNoIHRoYXQgdGhlcmUgaXMgbm8gb3RoZXIgZmluaXRlIHZhbHVlIHkKKyAgICAgICAqICB3aGVyZSB5IDwgeC4gICovCisgICAgICBzdGF0aWMgX1RwIGxvd2VzdCgpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQorI2VuZGlmCisgICAgICAvKiogVGhlIEBlIG1hY2hpbmUgQGUgZXBzaWxvbjogIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gMSBhbmQgdGhlIGxlYXN0CisgICAgICAgICAgdmFsdWUgZ3JlYXRlciB0aGFuIDEgdGhhdCBpcyByZXByZXNlbnRhYmxlLiAgKi8KKyAgICAgIHN0YXRpYyBfVHAgZXBzaWxvbigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQorICAgICAgLyoqIFRoZSBtYXhpbXVtIHJvdW5kaW5nIGVycm9yIG1lYXN1cmVtZW50IChzZWUgTElBLTEpLiAgKi8KKyAgICAgIHN0YXRpYyBfVHAgcm91bmRfZXJyb3IoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KKyAgICAgIC8qKiBUaGUgcmVwcmVzZW50YXRpb24gb2YgcG9zaXRpdmUgaW5maW5pdHksIGlmIEBjIGhhc19pbmZpbml0eS4gICovCisgICAgICBzdGF0aWMgX1RwIGluZmluaXR5KCkgdGhyb3coKSAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQorCisgICAgICAvKiogVGhlIHJlcHJlc2VudGF0aW9uIG9mIGEgcXVpZXQgPGVtPk5vdCBhIE51bWJlcjwvZW0+LCAKKwkgIGlmIEBjIGhhc19xdWlldF9OYU4uICovCisgICAgICBzdGF0aWMgX1RwIHF1aWV0X05hTigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQorICAgICAgLyoqIFRoZSByZXByZXNlbnRhdGlvbiBvZiBhIHNpZ25hbGluZyA8ZW0+Tm90IGEgTnVtYmVyPC9lbT4sIGlmCisgICAgICAgICAgQGMgaGFzX3NpZ25hbGluZ19OYU4uICovCisgICAgICBzdGF0aWMgX1RwIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KKyAgICAgIC8qKiBUaGUgbWluaW11bSBwb3NpdGl2ZSBkZW5vcm1hbGl6ZWQgdmFsdWUuICBGb3IgdHlwZXMgd2hlcmUKKyAgICAgICAgICBAYyBoYXNfZGVub3JtIGlzIGZhbHNlLCB0aGlzIGlzIHRoZSBtaW5pbXVtIHBvc2l0aXZlIG5vcm1hbGl6ZWQKKwkgIHZhbHVlLiAgKi8KKyAgICAgIHN0YXRpYyBfVHAgZGVub3JtX21pbigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQorICAgIH07CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGNvbnN0IF9UcD4KKyAgICA6IHB1YmxpYyBudW1lcmljX2xpbWl0czxfVHA+IHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHZvbGF0aWxlIF9UcD4KKyAgICA6IHB1YmxpYyBudW1lcmljX2xpbWl0czxfVHA+IHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGNvbnN0IHZvbGF0aWxlIF9UcD4KKyAgICA6IHB1YmxpYyBudW1lcmljX2xpbWl0czxfVHA+IHsgfTsKKyNlbmRpZgorCisgIC8vIE5vdyB0aGVyZSBmb2xsb3cgMTYgZXhwbGljaXQgc3BlY2lhbGl6YXRpb25zLiAgWWVzLCAxNi4gIE1ha2Ugc3VyZQorICAvLyB5b3UgZ2V0IHRoZSBjb3VudCByaWdodC4gKDE4IGluIGMrKzB4IG1vZGUpCisKKyAgLy8vIG51bWVyaWNfbGltaXRzPGJvb2w+IHNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGJvb2w+CisgICAgeworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOworCisgICAgICBzdGF0aWMgYm9vbCBtaW4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiBmYWxzZTsgfQorICAgICAgc3RhdGljIGJvb2wgbWF4KCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gdHJ1ZTsgfQorI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBzdGF0aWMgYm9vbCBsb3dlc3QoKSB0aHJvdygpCisgICAgICB7IHJldHVybiBtaW4oKTsgfQorI2VuZGlmCisgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDE7CisgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMDsKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZGlnaXRzMTAgPSAwOworI2VuZGlmCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOworICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CisgICAgICBzdGF0aWMgYm9vbCBlcHNpbG9uKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgIHN0YXRpYyBib29sIHJvdW5kX2Vycm9yKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gZmFsc2U7IH0KKworICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOworICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CisgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKKworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOworICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOworCisgICAgICBzdGF0aWMgYm9vbCBpbmZpbml0eSgpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICBzdGF0aWMgYm9vbCBxdWlldF9OYU4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiBmYWxzZTsgfQorICAgICAgc3RhdGljIGJvb2wgc2lnbmFsaW5nX05hTigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICBzdGF0aWMgYm9vbCBkZW5vcm1fbWluKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gZmFsc2U7IH0KKworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOworCisgICAgICAvLyBJdCBpcyBub3QgY2xlYXIgd2hhdCBpdCBtZWFucyBmb3IgYSBib29sZWFuIHR5cGUgdG8gdHJhcC4KKyAgICAgIC8vIFRoaXMgaXMgYSBEUiBvbiB0aGUgTFdHIGlzc3VlIGxpc3QuICBIZXJlLCBJIHVzZSBpbnRlZ2VyCisgICAgICAvLyBwcm9tb3Rpb24gc2VtYW50aWNzLgorICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBfX2dsaWJjeHhfaW50ZWdyYWxfdHJhcHM7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOworICAgIH07CisKKyAgLy8vIG51bWVyaWNfbGltaXRzPGNoYXI+IHNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGNoYXI+CisgICAgeworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOworCisgICAgICBzdGF0aWMgY2hhciBtaW4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiBfX2dsaWJjeHhfbWluKGNoYXIpOyB9CisgICAgICBzdGF0aWMgY2hhciBtYXgoKSB0aHJvdygpCisgICAgICB7IHJldHVybiBfX2dsaWJjeHhfbWF4KGNoYXIpOyB9CisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHN0YXRpYyBjaGFyIGxvd2VzdCgpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIG1pbigpOyB9CisjZW5kaWYKKworICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSBfX2dsaWJjeHhfZGlnaXRzIChjaGFyKTsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSBfX2dsaWJjeHhfZGlnaXRzMTAgKGNoYXIpOworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9kaWdpdHMxMCA9IDA7CisjZW5kaWYKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IF9fZ2xpYmN4eF9zaWduZWQgKGNoYXIpOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CisgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKKyAgICAgIHN0YXRpYyBjaGFyIGVwc2lsb24oKSB0aHJvdygpCisgICAgICB7IHJldHVybiAwOyB9CisgICAgICBzdGF0aWMgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIDA7IH0KKworICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOworICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CisgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKKworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOworICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOworCisgICAgICBzdGF0aWMgY2hhciBpbmZpbml0eSgpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQorICAgICAgc3RhdGljIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gY2hhcigpOyB9CisgICAgICBzdGF0aWMgY2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gY2hhcigpOyB9CisgICAgICBzdGF0aWMgY2hhciBkZW5vcm1fbWluKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcj4oMCk7IH0KKworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CisKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gX19nbGliY3h4X2ludGVncmFsX3RyYXBzOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKKyAgICB9OworCisgIC8vLyBudW1lcmljX2xpbWl0czxzaWduZWQgY2hhcj4gc3BlY2lhbGl6YXRpb24uCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8c2lnbmVkIGNoYXI+CisgICAgeworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOworCisgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgbWluKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gLV9fU0NIQVJfTUFYX18gLSAxOyB9CisgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgbWF4KCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gX19TQ0hBUl9NQVhfXzsgfQorI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgbG93ZXN0KCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gbWluKCk7IH0KKyNlbmRpZgorCisgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IF9fZ2xpYmN4eF9kaWdpdHMgKHNpZ25lZCBjaGFyKTsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSBfX2dsaWJjeHhfZGlnaXRzMTAgKHNpZ25lZCBjaGFyKTsKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZGlnaXRzMTAgPSAwOworI2VuZGlmCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CisgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKKyAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBlcHNpbG9uKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gMDsgfQorICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gMDsgfQorCisgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOworCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CisKKyAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBpbmZpbml0eSgpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQorICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHF1aWV0X05hTigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQorICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KKyAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBkZW5vcm1fbWluKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOworCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IF9fZ2xpYmN4eF9pbnRlZ3JhbF90cmFwczsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOworICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CisgICAgfTsKKworICAvLy8gbnVtZXJpY19saW1pdHM8dW5zaWduZWQgY2hhcj4gc3BlY2lhbGl6YXRpb24uCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgY2hhcj4KKyAgICB7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CisKKyAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIDA7IH0KKyAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1heCgpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIF9fU0NIQVJfTUFYX18gKiAyVSArIDE7IH0KKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbG93ZXN0KCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gbWluKCk7IH0KKyNlbmRpZgorCisgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IF9fZ2xpYmN4eF9kaWdpdHMgKHVuc2lnbmVkIGNoYXIpOworICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IF9fZ2xpYmN4eF9kaWdpdHMxMCAodW5zaWduZWQgY2hhcik7CisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2RpZ2l0czEwID0gMDsKKyNlbmRpZgorICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOworICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIDA7IH0KKyAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gMDsgfQorCisgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOworCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CisKKyAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGluZmluaXR5KCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KKyAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHF1aWV0X05hTigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CisgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KKyAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGRlbm9ybV9taW4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQorCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKKworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBfX2dsaWJjeHhfaW50ZWdyYWxfdHJhcHM7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOworICAgIH07CisKKyAgLy8vIG51bWVyaWNfbGltaXRzPHdjaGFyX3Q+IHNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHdjaGFyX3Q+CisgICAgeworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOworCisgICAgICBzdGF0aWMgd2NoYXJfdCBtaW4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiBfX2dsaWJjeHhfbWluICh3Y2hhcl90KTsgfQorICAgICAgc3RhdGljIHdjaGFyX3QgbWF4KCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gX19nbGliY3h4X21heCAod2NoYXJfdCk7IH0KKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgc3RhdGljIHdjaGFyX3QgbG93ZXN0KCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gbWluKCk7IH0KKyNlbmRpZgorCisgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IF9fZ2xpYmN4eF9kaWdpdHMgKHdjaGFyX3QpOworICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IF9fZ2xpYmN4eF9kaWdpdHMxMCAod2NoYXJfdCk7CisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2RpZ2l0czEwID0gMDsKKyNlbmRpZgorICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gX19nbGliY3h4X3NpZ25lZCAod2NoYXJfdCk7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOworICAgICAgc3RhdGljIHdjaGFyX3QgZXBzaWxvbigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIDA7IH0KKyAgICAgIHN0YXRpYyB3Y2hhcl90IHJvdW5kX2Vycm9yKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gMDsgfQorCisgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOworCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CisKKyAgICAgIHN0YXRpYyB3Y2hhcl90IGluZmluaXR5KCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gd2NoYXJfdCgpOyB9CisgICAgICBzdGF0aWMgd2NoYXJfdCBxdWlldF9OYU4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KKyAgICAgIHN0YXRpYyB3Y2hhcl90IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KKyAgICAgIHN0YXRpYyB3Y2hhcl90IGRlbm9ybV9taW4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KKworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CisKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gX19nbGliY3h4X2ludGVncmFsX3RyYXBzOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKKyAgICB9OworCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgLy8vIG51bWVyaWNfbGltaXRzPGNoYXIxNl90PiBzcGVjaWFsaXphdGlvbi4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxjaGFyMTZfdD4KKyAgICB7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CisKKyAgICAgIHN0YXRpYyBjaGFyMTZfdCBtaW4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiBfX2dsaWJjeHhfbWluIChjaGFyMTZfdCk7IH0KKyAgICAgIHN0YXRpYyBjaGFyMTZfdCBtYXgoKSB0aHJvdygpCisgICAgICB7IHJldHVybiBfX2dsaWJjeHhfbWF4IChjaGFyMTZfdCk7IH0KKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgc3RhdGljIGNoYXIxNl90IGxvd2VzdCgpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIG1pbigpOyB9CisjZW5kaWYKKworICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSBfX2dsaWJjeHhfZGlnaXRzIChjaGFyMTZfdCk7CisgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gX19nbGliY3h4X2RpZ2l0czEwIChjaGFyMTZfdCk7CisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2RpZ2l0czEwID0gMDsKKyNlbmRpZgorICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gX19nbGliY3h4X3NpZ25lZCAoY2hhcjE2X3QpOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CisgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKKyAgICAgIHN0YXRpYyBjaGFyMTZfdCBlcHNpbG9uKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gMDsgfQorICAgICAgc3RhdGljIGNoYXIxNl90IHJvdW5kX2Vycm9yKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gMDsgfQorCisgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOworCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CisKKyAgICAgIHN0YXRpYyBjaGFyMTZfdCBpbmZpbml0eSgpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIGNoYXIxNl90KCk7IH0KKyAgICAgIHN0YXRpYyBjaGFyMTZfdCBxdWlldF9OYU4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiBjaGFyMTZfdCgpOyB9CisgICAgICBzdGF0aWMgY2hhcjE2X3Qgc2lnbmFsaW5nX05hTigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIGNoYXIxNl90KCk7IH0KKyAgICAgIHN0YXRpYyBjaGFyMTZfdCBkZW5vcm1fbWluKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gY2hhcjE2X3QoKTsgfQorCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKKworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBfX2dsaWJjeHhfaW50ZWdyYWxfdHJhcHM7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOworICAgIH07CisKKyAgLy8vIG51bWVyaWNfbGltaXRzPGNoYXIzMl90PiBzcGVjaWFsaXphdGlvbi4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxjaGFyMzJfdD4KKyAgICB7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CisKKyAgICAgIHN0YXRpYyBjaGFyMzJfdCBtaW4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiBfX2dsaWJjeHhfbWluIChjaGFyMzJfdCk7IH0KKyAgICAgIHN0YXRpYyBjaGFyMzJfdCBtYXgoKSB0aHJvdygpCisgICAgICB7IHJldHVybiBfX2dsaWJjeHhfbWF4IChjaGFyMzJfdCk7IH0KKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgc3RhdGljIGNoYXIzMl90IGxvd2VzdCgpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIG1pbigpOyB9CisjZW5kaWYKKworICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSBfX2dsaWJjeHhfZGlnaXRzIChjaGFyMzJfdCk7CisgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gX19nbGliY3h4X2RpZ2l0czEwIChjaGFyMzJfdCk7CisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2RpZ2l0czEwID0gMDsKKyNlbmRpZgorICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gX19nbGliY3h4X3NpZ25lZCAoY2hhcjMyX3QpOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CisgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKKyAgICAgIHN0YXRpYyBjaGFyMzJfdCBlcHNpbG9uKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gMDsgfQorICAgICAgc3RhdGljIGNoYXIzMl90IHJvdW5kX2Vycm9yKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gMDsgfQorCisgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOworCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CisKKyAgICAgIHN0YXRpYyBjaGFyMzJfdCBpbmZpbml0eSgpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIGNoYXIzMl90KCk7IH0KKyAgICAgIHN0YXRpYyBjaGFyMzJfdCBxdWlldF9OYU4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiBjaGFyMzJfdCgpOyB9CisgICAgICBzdGF0aWMgY2hhcjMyX3Qgc2lnbmFsaW5nX05hTigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIGNoYXIzMl90KCk7IH0KKyAgICAgIHN0YXRpYyBjaGFyMzJfdCBkZW5vcm1fbWluKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gY2hhcjMyX3QoKTsgfQorCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKKworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBfX2dsaWJjeHhfaW50ZWdyYWxfdHJhcHM7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOworICAgIH07CisjZW5kaWYKKworICAvLy8gbnVtZXJpY19saW1pdHM8c2hvcnQ+IHNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHNob3J0PgorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKKworICAgICAgc3RhdGljIHNob3J0IG1pbigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIC1fX1NIUlRfTUFYX18gLSAxOyB9CisgICAgICBzdGF0aWMgc2hvcnQgbWF4KCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gX19TSFJUX01BWF9fOyB9CisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHN0YXRpYyBzaG9ydCBsb3dlc3QoKSB0aHJvdygpCisgICAgICB7IHJldHVybiBtaW4oKTsgfQorI2VuZGlmCisKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gX19nbGliY3h4X2RpZ2l0cyAoc2hvcnQpOworICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IF9fZ2xpYmN4eF9kaWdpdHMxMCAoc2hvcnQpOworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9kaWdpdHMxMCA9IDA7CisjZW5kaWYKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOworICAgICAgc3RhdGljIHNob3J0IGVwc2lsb24oKSB0aHJvdygpCisgICAgICB7IHJldHVybiAwOyB9CisgICAgICBzdGF0aWMgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCisgICAgICB7IHJldHVybiAwOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOworICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOworICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CisKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKKworICAgICAgc3RhdGljIHNob3J0IGluZmluaXR5KCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQorICAgICAgc3RhdGljIHNob3J0IHF1aWV0X05hTigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIHNob3J0KCk7IH0KKyAgICAgIHN0YXRpYyBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQorICAgICAgc3RhdGljIHNob3J0IGRlbm9ybV9taW4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiBzaG9ydCgpOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOworCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IF9fZ2xpYmN4eF9pbnRlZ3JhbF90cmFwczsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOworICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CisgICAgfTsKKworICAvLy8gbnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hvcnQ+IHNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0PgorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKKworICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1pbigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIDA7IH0KKyAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtYXgoKSB0aHJvdygpCisgICAgICB7IHJldHVybiBfX1NIUlRfTUFYX18gKiAyVSArIDE7IH0KKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGxvd2VzdCgpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIG1pbigpOyB9CisjZW5kaWYKKworICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSBfX2dsaWJjeHhfZGlnaXRzICh1bnNpZ25lZCBzaG9ydCk7CisgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gX19nbGliY3h4X2RpZ2l0czEwICh1bnNpZ25lZCBzaG9ydCk7CisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2RpZ2l0czEwID0gMDsKKyNlbmRpZgorICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOworICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGVwc2lsb24oKSB0aHJvdygpCisgICAgICB7IHJldHVybiAwOyB9CisgICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCisgICAgICB7IHJldHVybiAwOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOworICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOworICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CisKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKKworICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGluZmluaXR5KCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CisgICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CisgICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQorICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGRlbm9ybV9taW4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KKworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CisKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gX19nbGliY3h4X2ludGVncmFsX3RyYXBzOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKKyAgICB9OworCisgIC8vLyBudW1lcmljX2xpbWl0czxpbnQ+IHNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGludD4KKyAgICB7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CisKKyAgICAgIHN0YXRpYyBpbnQgbWluKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gLV9fSU5UX01BWF9fIC0gMTsgfQorICAgICAgc3RhdGljIGludCBtYXgoKSB0aHJvdygpCisgICAgICB7IHJldHVybiBfX0lOVF9NQVhfXzsgfQorI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBzdGF0aWMgaW50IGxvd2VzdCgpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIG1pbigpOyB9CisjZW5kaWYKKworICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSBfX2dsaWJjeHhfZGlnaXRzIChpbnQpOworICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IF9fZ2xpYmN4eF9kaWdpdHMxMCAoaW50KTsKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZGlnaXRzMTAgPSAwOworI2VuZGlmCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CisgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKKyAgICAgIHN0YXRpYyBpbnQgZXBzaWxvbigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIDA7IH0KKyAgICAgIHN0YXRpYyBpbnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCisgICAgICB7IHJldHVybiAwOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOworICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOworICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CisKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKKworICAgICAgc3RhdGljIGludCBpbmZpbml0eSgpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KKyAgICAgIHN0YXRpYyBpbnQgcXVpZXRfTmFOKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQorICAgICAgc3RhdGljIGludCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQorICAgICAgc3RhdGljIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQorCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKKworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBfX2dsaWJjeHhfaW50ZWdyYWxfdHJhcHM7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOworICAgIH07CisKKyAgLy8vIG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD4gc3BlY2lhbGl6YXRpb24uCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50PgorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKKworICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtaW4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiAwOyB9CisgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1heCgpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIF9fSU5UX01BWF9fICogMlUgKyAxOyB9CisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbG93ZXN0KCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gbWluKCk7IH0KKyNlbmRpZgorCisgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IF9fZ2xpYmN4eF9kaWdpdHMgKHVuc2lnbmVkIGludCk7CisgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gX19nbGliY3h4X2RpZ2l0czEwICh1bnNpZ25lZCBpbnQpOworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9kaWdpdHMxMCA9IDA7CisjZW5kaWYKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CisgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKKyAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZXBzaWxvbigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIDA7IH0KKyAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCisgICAgICB7IHJldHVybiAwOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOworICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOworICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CisKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKKworICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBpbmZpbml0eSgpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KKyAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgcXVpZXRfTmFOKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQorICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQorICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQorCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKKworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBfX2dsaWJjeHhfaW50ZWdyYWxfdHJhcHM7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOworICAgIH07CisKKyAgLy8vIG51bWVyaWNfbGltaXRzPGxvbmc+IHNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmc+CisgICAgeworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOworCisgICAgICBzdGF0aWMgbG9uZyBtaW4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiAtX19MT05HX01BWF9fIC0gMTsgfQorICAgICAgc3RhdGljIGxvbmcgbWF4KCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gX19MT05HX01BWF9fOyB9CisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHN0YXRpYyBsb25nIGxvd2VzdCgpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIG1pbigpOyB9CisjZW5kaWYKKworICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSBfX2dsaWJjeHhfZGlnaXRzIChsb25nKTsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSBfX2dsaWJjeHhfZGlnaXRzMTAgKGxvbmcpOworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9kaWdpdHMxMCA9IDA7CisjZW5kaWYKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOworICAgICAgc3RhdGljIGxvbmcgZXBzaWxvbigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIDA7IH0KKyAgICAgIHN0YXRpYyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gMDsgfQorCisgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOworCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CisKKyAgICAgIHN0YXRpYyBsb25nIGluZmluaXR5KCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KKyAgICAgIHN0YXRpYyBsb25nIHF1aWV0X05hTigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CisgICAgICBzdGF0aWMgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KKyAgICAgIHN0YXRpYyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQorCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKKworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBfX2dsaWJjeHhfaW50ZWdyYWxfdHJhcHM7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOworICAgIH07CisKKyAgLy8vIG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+IHNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+CisgICAgeworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOworCisgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaW4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiAwOyB9CisgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtYXgoKSB0aHJvdygpCisgICAgICB7IHJldHVybiBfX0xPTkdfTUFYX18gKiAyVUwgKyAxOyB9CisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvd2VzdCgpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIG1pbigpOyB9CisjZW5kaWYKKworICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSBfX2dsaWJjeHhfZGlnaXRzICh1bnNpZ25lZCBsb25nKTsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSBfX2dsaWJjeHhfZGlnaXRzMTAgKHVuc2lnbmVkIGxvbmcpOworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9kaWdpdHMxMCA9IDA7CisjZW5kaWYKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CisgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKKyAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVwc2lsb24oKSB0aHJvdygpCisgICAgICB7IHJldHVybiAwOyB9CisgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIDA7IH0KKworICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOworICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CisgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKKworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOworICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOworCisgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CisgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQorICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CisgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KKworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CisKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gX19nbGliY3h4X2ludGVncmFsX3RyYXBzOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKKyAgICB9OworCisgIC8vLyBudW1lcmljX2xpbWl0czxsb25nIGxvbmc+IHNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcgbG9uZz4KKyAgICB7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CisKKyAgICAgIHN0YXRpYyBsb25nIGxvbmcgbWluKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gLV9fTE9OR19MT05HX01BWF9fIC0gMTsgfQorICAgICAgc3RhdGljIGxvbmcgbG9uZyBtYXgoKSB0aHJvdygpCisgICAgICB7IHJldHVybiBfX0xPTkdfTE9OR19NQVhfXzsgfQorI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBzdGF0aWMgbG9uZyBsb25nIGxvd2VzdCgpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIG1pbigpOyB9CisjZW5kaWYKKworICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSBfX2dsaWJjeHhfZGlnaXRzIChsb25nIGxvbmcpOworICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IF9fZ2xpYmN4eF9kaWdpdHMxMCAobG9uZyBsb25nKTsKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZGlnaXRzMTAgPSAwOworI2VuZGlmCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CisgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKKyAgICAgIHN0YXRpYyBsb25nIGxvbmcgZXBzaWxvbigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIDA7IH0KKyAgICAgIHN0YXRpYyBsb25nIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCisgICAgICB7IHJldHVybiAwOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOworICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOworICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CisKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKKworICAgICAgc3RhdGljIGxvbmcgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KKyAgICAgIHN0YXRpYyBsb25nIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQorICAgICAgc3RhdGljIGxvbmcgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQorICAgICAgc3RhdGljIGxvbmcgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQorCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKKworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBfX2dsaWJjeHhfaW50ZWdyYWxfdHJhcHM7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOworICAgIH07CisKKyAgLy8vIG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4gc3BlY2lhbGl6YXRpb24uCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZyBsb25nPgorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKKworICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBtaW4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiAwOyB9CisgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG1heCgpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIF9fTE9OR19MT05HX01BWF9fICogMlVMTCArIDE7IH0KKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBsb3dlc3QoKSB0aHJvdygpCisgICAgICB7IHJldHVybiBtaW4oKTsgfQorI2VuZGlmCisKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gX19nbGliY3h4X2RpZ2l0cyAodW5zaWduZWQgbG9uZyBsb25nKTsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSBfX2dsaWJjeHhfZGlnaXRzMTAgKHVuc2lnbmVkIGxvbmcgbG9uZyk7CisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2RpZ2l0czEwID0gMDsKKyNlbmRpZgorICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOworICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gMDsgfQorICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIDA7IH0KKworICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOworICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CisgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKKworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOworICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOworCisgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGluZmluaXR5KCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQorICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CisgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CisgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOworCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IF9fZ2xpYmN4eF9pbnRlZ3JhbF90cmFwczsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOworICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CisgICAgfTsKKworICAvLy8gbnVtZXJpY19saW1pdHM8ZmxvYXQ+IHNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGZsb2F0PgorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKKworICAgICAgc3RhdGljIGZsb2F0IG1pbigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIF9fRkxUX01JTl9fOyB9CisgICAgICBzdGF0aWMgZmxvYXQgbWF4KCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gX19GTFRfTUFYX187IH0KKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgc3RhdGljIGZsb2F0IGxvd2VzdCgpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIC1fX0ZMVF9NQVhfXzsgfQorI2VuZGlmCisKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gX19GTFRfTUFOVF9ESUdfXzsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSBfX0ZMVF9ESUdfXzsKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZGlnaXRzMTAKKwkgPSBfX2dsaWJjeHhfbWF4X2RpZ2l0czEwIChfX0ZMVF9NQU5UX0RJR19fKTsKKyNlbmRpZgorICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gX19GTFRfUkFESVhfXzsKKyAgICAgIHN0YXRpYyBmbG9hdCBlcHNpbG9uKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gX19GTFRfRVBTSUxPTl9fOyB9CisgICAgICBzdGF0aWMgZmxvYXQgcm91bmRfZXJyb3IoKSB0aHJvdygpCisgICAgICB7IHJldHVybiAwLjVGOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gX19GTFRfTUlOX0VYUF9fOworICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IF9fRkxUX01JTl8xMF9FWFBfXzsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gX19GTFRfTUFYX0VYUF9fOworICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IF9fRkxUX01BWF8xMF9FWFBfXzsKKworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gX19GTFRfSEFTX0lORklOSVRZX187CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gX19GTFRfSEFTX1FVSUVUX05BTl9fOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBoYXNfcXVpZXRfTmFOOworICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtCisJPSBib29sKF9fRkxUX0hBU19ERU5PUk1fXykgPyBkZW5vcm1fcHJlc2VudCA6IGRlbm9ybV9hYnNlbnQ7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBfX2dsaWJjeHhfZmxvYXRfaGFzX2Rlbm9ybV9sb3NzOworCisgICAgICBzdGF0aWMgZmxvYXQgaW5maW5pdHkoKSB0aHJvdygpCisgICAgICB7IHJldHVybiBfX2J1aWx0aW5faHVnZV92YWxmICgpOyB9CisgICAgICBzdGF0aWMgZmxvYXQgcXVpZXRfTmFOKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gX19idWlsdGluX25hbmYgKCIiKTsgfQorICAgICAgc3RhdGljIGZsb2F0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiBfX2J1aWx0aW5fbmFuc2YgKCIiKTsgfQorICAgICAgc3RhdGljIGZsb2F0IGRlbm9ybV9taW4oKSB0aHJvdygpCisgICAgICB7IHJldHVybiBfX0ZMVF9ERU5PUk1fTUlOX187IH0KKworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5CisJPSBoYXNfaW5maW5pdHkgJiYgaGFzX3F1aWV0X05hTiAmJiBoYXNfZGVub3JtID09IGRlbm9ybV9wcmVzZW50OworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKKworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBfX2dsaWJjeHhfZmxvYXRfdHJhcHM7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBfX2dsaWJjeHhfZmxvYXRfdGlueW5lc3NfYmVmb3JlOworICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG9fbmVhcmVzdDsKKyAgICB9OworCisjdW5kZWYgX19nbGliY3h4X2Zsb2F0X2hhc19kZW5vcm1fbG9zcworI3VuZGVmIF9fZ2xpYmN4eF9mbG9hdF90cmFwcworI3VuZGVmIF9fZ2xpYmN4eF9mbG9hdF90aW55bmVzc19iZWZvcmUKKworICAvLy8gbnVtZXJpY19saW1pdHM8ZG91YmxlPiBzcGVjaWFsaXphdGlvbi4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxkb3VibGU+CisgICAgeworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOworCisgICAgICBzdGF0aWMgZG91YmxlIG1pbigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIF9fREJMX01JTl9fOyB9CisgICAgICBzdGF0aWMgZG91YmxlIG1heCgpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIF9fREJMX01BWF9fOyB9CisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHN0YXRpYyBkb3VibGUgbG93ZXN0KCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gLV9fREJMX01BWF9fOyB9CisjZW5kaWYKKworICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSBfX0RCTF9NQU5UX0RJR19fOworICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IF9fREJMX0RJR19fOworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9kaWdpdHMxMAorCSA9IF9fZ2xpYmN4eF9tYXhfZGlnaXRzMTAgKF9fREJMX01BTlRfRElHX18pOworI2VuZGlmCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSBfX0ZMVF9SQURJWF9fOworICAgICAgc3RhdGljIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gX19EQkxfRVBTSUxPTl9fOyB9CisgICAgICBzdGF0aWMgZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gMC41OyB9CisKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gX19EQkxfTUlOX0VYUF9fOworICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IF9fREJMX01JTl8xMF9FWFBfXzsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gX19EQkxfTUFYX0VYUF9fOworICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IF9fREJMX01BWF8xMF9FWFBfXzsKKworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gX19EQkxfSEFTX0lORklOSVRZX187CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gX19EQkxfSEFTX1FVSUVUX05BTl9fOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBoYXNfcXVpZXRfTmFOOworICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtCisJPSBib29sKF9fREJMX0hBU19ERU5PUk1fXykgPyBkZW5vcm1fcHJlc2VudCA6IGRlbm9ybV9hYnNlbnQ7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBfX2dsaWJjeHhfZG91YmxlX2hhc19kZW5vcm1fbG9zczsKKworICAgICAgc3RhdGljIGRvdWJsZSBpbmZpbml0eSgpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9odWdlX3ZhbCgpOyB9CisgICAgICBzdGF0aWMgZG91YmxlIHF1aWV0X05hTigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9uYW4gKCIiKTsgfQorICAgICAgc3RhdGljIGRvdWJsZSBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gX19idWlsdGluX25hbnMgKCIiKTsgfQorICAgICAgc3RhdGljIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gX19EQkxfREVOT1JNX01JTl9fOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OQorCT0gaGFzX2luZmluaXR5ICYmIGhhc19xdWlldF9OYU4gJiYgaGFzX2Rlbm9ybSA9PSBkZW5vcm1fcHJlc2VudDsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CisKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gX19nbGliY3h4X2RvdWJsZV90cmFwczsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IF9fZ2xpYmN4eF9kb3VibGVfdGlueW5lc3NfYmVmb3JlOworICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG9fbmVhcmVzdDsKKyAgICB9OworCisjdW5kZWYgX19nbGliY3h4X2RvdWJsZV9oYXNfZGVub3JtX2xvc3MKKyN1bmRlZiBfX2dsaWJjeHhfZG91YmxlX3RyYXBzCisjdW5kZWYgX19nbGliY3h4X2RvdWJsZV90aW55bmVzc19iZWZvcmUKKworICAvLy8gbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+IHNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPgorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKKworICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1pbigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIF9fTERCTF9NSU5fXzsgfQorICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1heCgpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIF9fTERCTF9NQVhfXzsgfQorI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgbG93ZXN0KCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gLV9fTERCTF9NQVhfXzsgfQorI2VuZGlmCisKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gX19MREJMX01BTlRfRElHX187CisgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gX19MREJMX0RJR19fOworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9kaWdpdHMxMAorCSA9IF9fZ2xpYmN4eF9tYXhfZGlnaXRzMTAgKF9fTERCTF9NQU5UX0RJR19fKTsKKyNlbmRpZgorICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gX19GTFRfUkFESVhfXzsKKyAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gX19MREJMX0VQU0lMT05fXzsgfQorICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gMC41TDsgfQorCisgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IF9fTERCTF9NSU5fRVhQX187CisgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gX19MREJMX01JTl8xMF9FWFBfXzsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gX19MREJMX01BWF9FWFBfXzsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSBfX0xEQkxfTUFYXzEwX0VYUF9fOworCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBfX0xEQkxfSEFTX0lORklOSVRZX187CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gX19MREJMX0hBU19RVUlFVF9OQU5fXzsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gaGFzX3F1aWV0X05hTjsKKyAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybQorCT0gYm9vbChfX0xEQkxfSEFTX0RFTk9STV9fKSA/IGRlbm9ybV9wcmVzZW50IDogZGVub3JtX2Fic2VudDsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcworCT0gX19nbGliY3h4X2xvbmdfZG91YmxlX2hhc19kZW5vcm1fbG9zczsKKworICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGluZmluaXR5KCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gX19idWlsdGluX2h1Z2VfdmFsbCAoKTsgfQorICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHF1aWV0X05hTigpIHRocm93KCkKKyAgICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9uYW5sICgiIik7IH0KKyAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gX19idWlsdGluX25hbnNsICgiIik7IH0KKyAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhyb3coKQorICAgICAgeyByZXR1cm4gX19MREJMX0RFTk9STV9NSU5fXzsgfQorCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkKKwk9IGhhc19pbmZpbml0eSAmJiBoYXNfcXVpZXRfTmFOICYmIGhhc19kZW5vcm0gPT0gZGVub3JtX3ByZXNlbnQ7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOworCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IF9fZ2xpYmN4eF9sb25nX2RvdWJsZV90cmFwczsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IF9fZ2xpYmN4eF9sb25nX2RvdWJsZV90aW55bmVzc19iZWZvcmU7CisgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b19uZWFyZXN0OworICAgIH07CisKKyN1bmRlZiBfX2dsaWJjeHhfbG9uZ19kb3VibGVfaGFzX2Rlbm9ybV9sb3NzCisjdW5kZWYgX19nbGliY3h4X2xvbmdfZG91YmxlX3RyYXBzCisjdW5kZWYgX19nbGliY3h4X2xvbmdfZG91YmxlX3RpbnluZXNzX2JlZm9yZQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyN1bmRlZiBfX2dsaWJjeHhfc2lnbmVkCisjdW5kZWYgX19nbGliY3h4X21pbgorI3VuZGVmIF9fZ2xpYmN4eF9tYXgKKyN1bmRlZiBfX2dsaWJjeHhfZGlnaXRzCisjdW5kZWYgX19nbGliY3h4X2RpZ2l0czEwCisjdW5kZWYgX19nbGliY3h4X21heF9kaWdpdHMxMAorCisjZW5kaWYgLy8gX0dMSUJDWFhfTlVNRVJJQ19MSU1JVFMKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvbGlzdCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2YxNjRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9saXN0CkBAIC0wLDAgKzEsNzggQEAKKy8vIDxsaXN0PiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBpbmNsdWRlL2xpc3QKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfTElTVAorI2RlZmluZSBfR0xJQkNYWF9MSVNUIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9zdGxfYWxnb2Jhc2UuaD4KKyNpbmNsdWRlIDxiaXRzL2FsbG9jYXRvci5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2xpc3QuaD4KKworI2lmbmRlZiBfR0xJQkNYWF9FWFBPUlRfVEVNUExBVEUKKyMgaW5jbHVkZSA8Yml0cy9saXN0LnRjYz4KKyNlbmRpZgorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyMgaW5jbHVkZSA8ZGVidWcvbGlzdD4KKyNlbmRpZgorCisjaWZkZWYgX0dMSUJDWFhfUFJPRklMRQorIyBpbmNsdWRlIDxwcm9maWxlL2xpc3Q+CisjZW5kaWYKKworI2VuZGlmIC8qIF9HTElCQ1hYX0xJU1QgKi8KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9sb2NhbGUgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL2xvY2FsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTA0Yjc3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9sb2NhbGUKQEAgLTAsMCArMSw0NSBAQAorLy8gTG9jYWxlIHN1cHBvcnQgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1CisvLyAyMDA2LCAyMDA3LCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjIuMSAgTG9jYWxlcworLy8KKworLyoqIEBmaWxlIGxvY2FsZQorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9MT0NBTEUKKyNkZWZpbmUgX0dMSUJDWFhfTE9DQUxFCTEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9sb2NhbGVmd2QuaD4KKyNpbmNsdWRlIDxiaXRzL2xvY2FsZV9jbGFzc2VzLmg+CisjaW5jbHVkZSA8Yml0cy9sb2NhbGVfZmFjZXRzLmg+CisjaW5jbHVkZSA8Yml0cy9sb2NhbGVfZmFjZXRzX25vbmlvLmg+CisKKyNlbmRpZiAvKiBfR0xJQkNYWF9MT0NBTEUgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvbWFwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVmODZkZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvbWFwCkBAIC0wLDAgKzEsNzIgQEAKKy8vIDxtYXA+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk3CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgaW5jbHVkZS9tYXAKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfTUFQCisjZGVmaW5lIF9HTElCQ1hYX01BUCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvc3RsX3RyZWUuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9tYXAuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9tdWx0aW1hcC5oPgorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyMgaW5jbHVkZSA8ZGVidWcvbWFwPgorI2VuZGlmCisKKyNpZmRlZiBfR0xJQkNYWF9QUk9GSUxFCisjIGluY2x1ZGUgPHByb2ZpbGUvbWFwPgorI2VuZGlmCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9NQVAgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvbWVtb3J5IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9tZW1vcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U3ZDRlOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvbWVtb3J5CkBAIC0wLDAgKzEsMTA2IEBACisvLyA8bWVtb3J5PiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTctMTk5OQorICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICovCisKKy8qKiBAZmlsZSBpbmNsdWRlL21lbW9yeQorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9NRU1PUlkKKyNkZWZpbmUgX0dMSUJDWFhfTUVNT1JZIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisvKioKKyAqIEBkZWZncm91cCBtZW1vcnkgTWVtb3J5CisgKiBAaW5ncm91cCB1dGlsaXRpZXMKKyAqCisgKiBDb21wb25lbnRzIGZvciBtZW1vcnkgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBhbmQgbWFuYWdlbWVudC4KKyAqLworCisvKioKKyAqIEBkZWZncm91cCBwb2ludGVyX2Fic3RyYWN0aW9ucyBQb2ludGVyIEFic3RyYWN0aW9ucworICogQGluZ3JvdXAgbWVtb3J5CisgKgorICogU21hcnQgcG9pbnRlcnMsIGV0Yy4KKyAqLworCisjaW5jbHVkZSA8Yml0cy9zdGxfYWxnb2Jhc2UuaD4KKyNpbmNsdWRlIDxiaXRzL2FsbG9jYXRvci5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2NvbnN0cnVjdC5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF90ZW1wYnVmLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oPgorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyMgIGlmIGRlZmluZWQoX0dMSUJDWFhfSU5DTFVERV9BU19UUjEpCisjICAgIGVycm9yIEMrKzB4IGhlYWRlciBjYW5ub3QgYmUgaW5jbHVkZWQgZnJvbSBUUjEgaGVhZGVyCisjICBlbmRpZgorIyAgaW5jbHVkZSA8ZXhjZXB0aW9uPiAgICAgICAgCSAgLy8gc3RkOjpleGNlcHRpb24KKyMgIGluY2x1ZGUgPHR5cGVpbmZvPiAgICAgICAgIAkgIC8vIHN0ZDo6dHlwZV9pbmZvIGluIGdldF9kZWxldGVyCisjICBpbmNsdWRlIDxpb3Nmd2Q+ICAgICAgICAgICAJICAvLyBzdGQ6OmJhc2ljX29zdHJlYW0KKyMgIGluY2x1ZGUgPGV4dC9hdG9taWNpdHkuaD4KKyMgIGluY2x1ZGUgPGV4dC9jb25jdXJyZW5jZS5oPgorIyAgaW5jbHVkZSA8Yml0cy9mdW5jdGV4Y2VwdC5oPgorIyAgaW5jbHVkZSA8Yml0cy9zdGxfZnVuY3Rpb24uaD4gIC8vIHN0ZDo6bGVzcworIyAgaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjICBpbmNsdWRlIDxmdW5jdGlvbmFsPgorIyAgaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKyMgIGluY2x1ZGUgPGJpdHMvdW5pcXVlX3B0ci5oPgorIyAgaWYgX0dMSUJDWFhfREVQUkVDQVRFRAorIyAgICBpbmNsdWRlIDxiYWNrd2FyZC9hdXRvX3B0ci5oPgorIyAgZW5kaWYKKyMgIGlmIGRlZmluZWQoX0dMSUJDWFhfSU5DTFVERV9BU19DWFgwWCkKKyMgICAgaW5jbHVkZSA8dHIxX2ltcGwvYm9vc3Rfc3BfY291bnRlZF9iYXNlLmg+CisjICBlbHNlCisjICAgIGRlZmluZSBfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYCisjICAgIGRlZmluZSBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxCisjICAgIGRlZmluZSBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorIyAgICBkZWZpbmUgX0dMSUJDWFhfVFIxCisjICAgIGluY2x1ZGUgPHRyMV9pbXBsL2Jvb3N0X3NwX2NvdW50ZWRfYmFzZS5oPgorIyAgICB1bmRlZiBfR0xJQkNYWF9UUjEKKyMgICAgdW5kZWYgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9UUjEKKyMgICAgdW5kZWYgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMQorIyAgICB1bmRlZiBfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYCisjICBlbmRpZgorIyAgaW5jbHVkZSA8Yml0cy9zaGFyZWRfcHRyLmg+CisjZWxzZQorIyAgaW5jbHVkZSA8YmFja3dhcmQvYXV0b19wdHIuaD4KKyNlbmRpZgorCisjZW5kaWYgLyogX0dMSUJDWFhfTUVNT1JZICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL211dGV4IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9tdXRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTQzNWNkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9tdXRleApAQCAtMCwwICsxLDc1MiBAQAorLy8gPG11dGV4PiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBtdXRleAorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9NVVRFWAorI2RlZmluZSBfR0xJQkNYWF9NVVRFWCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2lmbmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworIyBpbmNsdWRlIDxiaXRzL2MrKzB4X3dhcm5pbmcuaD4KKyNlbHNlCisKKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGNocm9ubz4KKyNpbmNsdWRlIDxleGNlcHRpb24+CisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDxzeXN0ZW1fZXJyb3I+CisjaW5jbHVkZSA8Yml0cy9mdW5jdGV4Y2VwdC5oPgorI2luY2x1ZGUgPGJpdHMvZ3Roci5oPgorI2luY2x1ZGUgPGJpdHMvbW92ZS5oPiAvLyBmb3Igc3RkOjpzd2FwCisKKyNpZiBkZWZpbmVkKF9HTElCQ1hYX0hBU19HVEhSRUFEUykgJiYgZGVmaW5lZChfR0xJQkNYWF9VU0VfQzk5X1NURElOVF9UUjEpCisKK25hbWVzcGFjZSBzdGQKK3sKKyAgLyoqCisgICAqIEBkZWZncm91cCBtdXRleGVzIE11dGV4ZXMKKyAgICogQGluZ3JvdXAgY29uY3VycmVuY3kKKyAgICoKKyAgICogQ2xhc3NlcyBmb3IgbXV0ZXggc3VwcG9ydC4KKyAgICogQHsKKyAgICovCisKKyAgLy8vIG11dGV4CisgIGNsYXNzIG11dGV4CisgIHsKKyAgICB0eXBlZGVmIF9fZ3RocmVhZF9tdXRleF90CQkJX19uYXRpdmVfdHlwZTsKKyAgICBfX25hdGl2ZV90eXBlICBfTV9tdXRleDsKKworICBwdWJsaWM6CisgICAgdHlwZWRlZiBfX25hdGl2ZV90eXBlKiAJCQluYXRpdmVfaGFuZGxlX3R5cGU7CisKKyAgICBtdXRleCgpCisgICAgeworICAgICAgLy8gWFhYIEVBR0FJTiwgRU5PTUVNLCBFUEVSTSwgRUJVU1kobWF5KSwgRUlOVkFMKG1heSkKKyNpZmRlZiBfX0dUSFJFQURfTVVURVhfSU5JVAorICAgICAgX19uYXRpdmVfdHlwZSBfX3RtcCA9IF9fR1RIUkVBRF9NVVRFWF9JTklUOworICAgICAgX01fbXV0ZXggPSBfX3RtcDsKKyNlbHNlCisgICAgICBfX0dUSFJFQURfTVVURVhfSU5JVF9GVU5DVElPTigmX01fbXV0ZXgpOworI2VuZGlmCisgICAgfQorCisgICAgbXV0ZXgoY29uc3QgbXV0ZXgmKSA9IGRlbGV0ZTsKKyAgICBtdXRleCYgb3BlcmF0b3I9KGNvbnN0IG11dGV4JikgPSBkZWxldGU7CisKKyAgICB2b2lkCisgICAgbG9jaygpCisgICAgeworICAgICAgaW50IF9fZSA9IF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9tdXRleCk7CisKKyAgICAgIC8vIEVJTlZBTCwgRUFHQUlOLCBFQlVTWSwgRUlOVkFMLCBFREVBRExLKG1heSkKKyAgICAgIGlmIChfX2UpCisJX190aHJvd19zeXN0ZW1fZXJyb3IoX19lKTsKKyAgICB9CisKKyAgICBib29sCisgICAgdHJ5X2xvY2soKQorICAgIHsKKyAgICAgIC8vIFhYWCBFSU5WQUwsIEVBR0FJTiwgRUJVU1kKKyAgICAgIHJldHVybiAhX19ndGhyZWFkX211dGV4X3RyeWxvY2soJl9NX211dGV4KTsKKyAgICB9CisKKyAgICB2b2lkCisgICAgdW5sb2NrKCkKKyAgICB7CisgICAgICAvLyBYWFggRUlOVkFMLCBFQUdBSU4sIEVQRVJNCisgICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9tdXRleCk7CisgICAgfQorCisgICAgbmF0aXZlX2hhbmRsZV90eXBlCisgICAgbmF0aXZlX2hhbmRsZSgpCisgICAgeyByZXR1cm4gJl9NX211dGV4OyB9CisgIH07CisKKyAgLy8vIHJlY3Vyc2l2ZV9tdXRleAorICBjbGFzcyByZWN1cnNpdmVfbXV0ZXgKKyAgeworICAgIHR5cGVkZWYgX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90CQlfX25hdGl2ZV90eXBlOworICAgIF9fbmF0aXZlX3R5cGUgIF9NX211dGV4OworCisgIHB1YmxpYzoKKyAgICB0eXBlZGVmIF9fbmF0aXZlX3R5cGUqIAkJCW5hdGl2ZV9oYW5kbGVfdHlwZTsKKworICAgIHJlY3Vyc2l2ZV9tdXRleCgpCisgICAgeworICAgICAgLy8gWFhYIEVBR0FJTiwgRU5PTUVNLCBFUEVSTSwgRUJVU1kobWF5KSwgRUlOVkFMKG1heSkKKyNpZmRlZiBfX0dUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVQKKyAgICAgIF9fbmF0aXZlX3R5cGUgX190bXAgPSBfX0dUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVQ7CisgICAgICBfTV9tdXRleCA9IF9fdG1wOworI2Vsc2UKKyAgICAgIF9fR1RIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVF9GVU5DVElPTigmX01fbXV0ZXgpOworI2VuZGlmCisgICAgfQorCisgICAgcmVjdXJzaXZlX211dGV4KGNvbnN0IHJlY3Vyc2l2ZV9tdXRleCYpID0gZGVsZXRlOworICAgIHJlY3Vyc2l2ZV9tdXRleCYgb3BlcmF0b3I9KGNvbnN0IHJlY3Vyc2l2ZV9tdXRleCYpID0gZGVsZXRlOworCisgICAgdm9pZAorICAgIGxvY2soKQorICAgIHsKKyAgICAgIGludCBfX2UgPSBfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X2xvY2soJl9NX211dGV4KTsKKworICAgICAgLy8gRUlOVkFMLCBFQUdBSU4sIEVCVVNZLCBFSU5WQUwsIEVERUFETEsobWF5KQorICAgICAgaWYgKF9fZSkKKwlfX3Rocm93X3N5c3RlbV9lcnJvcihfX2UpOworICAgIH0KKworICAgIGJvb2wKKyAgICB0cnlfbG9jaygpCisgICAgeworICAgICAgLy8gWFhYIEVJTlZBTCwgRUFHQUlOLCBFQlVTWQorICAgICAgcmV0dXJuICFfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3RyeWxvY2soJl9NX211dGV4KTsKKyAgICB9CisKKyAgICB2b2lkCisgICAgdW5sb2NrKCkKKyAgICB7CisgICAgICAvLyBYWFggRUlOVkFMLCBFQUdBSU4sIEVCVVNZCisgICAgICBfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3VubG9jaygmX01fbXV0ZXgpOworICAgIH0KKworICAgIG5hdGl2ZV9oYW5kbGVfdHlwZQorICAgIG5hdGl2ZV9oYW5kbGUoKQorICAgIHsgcmV0dXJuICZfTV9tdXRleDsgfQorICB9OworCisgIC8vLyB0aW1lZF9tdXRleAorICBjbGFzcyB0aW1lZF9tdXRleAorICB7CisgICAgdHlwZWRlZiBfX2d0aHJlYWRfbXV0ZXhfdCAJCSAgCV9fbmF0aXZlX3R5cGU7CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfQ0xPQ0tfTU9OT1RPTklDCisgICAgdHlwZWRlZiBjaHJvbm86Om1vbm90b25pY19jbG9jayAJICAJX19jbG9ja190OworI2Vsc2UKKyAgICB0eXBlZGVmIGNocm9ubzo6aGlnaF9yZXNvbHV0aW9uX2Nsb2NrIAlfX2Nsb2NrX3Q7CisjZW5kaWYKKworICAgIF9fbmF0aXZlX3R5cGUgIF9NX211dGV4OworCisgIHB1YmxpYzoKKyAgICB0eXBlZGVmIF9fbmF0aXZlX3R5cGUqIAkJICAJbmF0aXZlX2hhbmRsZV90eXBlOworCisgICAgdGltZWRfbXV0ZXgoKQorICAgIHsKKyNpZmRlZiBfX0dUSFJFQURfTVVURVhfSU5JVAorICAgICAgX19uYXRpdmVfdHlwZSBfX3RtcCA9IF9fR1RIUkVBRF9NVVRFWF9JTklUOworICAgICAgX01fbXV0ZXggPSBfX3RtcDsKKyNlbHNlCisgICAgICBfX0dUSFJFQURfTVVURVhfSU5JVF9GVU5DVElPTigmX01fbXV0ZXgpOworI2VuZGlmCisgICAgfQorCisgICAgdGltZWRfbXV0ZXgoY29uc3QgdGltZWRfbXV0ZXgmKSA9IGRlbGV0ZTsKKyAgICB0aW1lZF9tdXRleCYgb3BlcmF0b3I9KGNvbnN0IHRpbWVkX211dGV4JikgPSBkZWxldGU7CisKKyAgICB2b2lkCisgICAgbG9jaygpCisgICAgeworICAgICAgaW50IF9fZSA9IF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9tdXRleCk7CisKKyAgICAgIC8vIEVJTlZBTCwgRUFHQUlOLCBFQlVTWSwgRUlOVkFMLCBFREVBRExLKG1heSkKKyAgICAgIGlmIChfX2UpCisJX190aHJvd19zeXN0ZW1fZXJyb3IoX19lKTsKKyAgICB9CisKKyAgICBib29sCisgICAgdHJ5X2xvY2soKQorICAgIHsKKyAgICAgIC8vIFhYWCBFSU5WQUwsIEVBR0FJTiwgRUJVU1kKKyAgICAgIHJldHVybiAhX19ndGhyZWFkX211dGV4X3RyeWxvY2soJl9NX211dGV4KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgX1JlcCwgY2xhc3MgX1BlcmlvZD4KKyAgICAgIGJvb2wKKyAgICAgIHRyeV9sb2NrX2Zvcihjb25zdCBjaHJvbm86OmR1cmF0aW9uPF9SZXAsIF9QZXJpb2Q+JiBfX3J0aW1lKQorICAgICAgeyByZXR1cm4gX190cnlfbG9ja19mb3JfaW1wbChfX3J0aW1lKTsgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIF9DbG9jaywgY2xhc3MgX0R1cmF0aW9uPgorICAgICAgYm9vbAorICAgICAgdHJ5X2xvY2tfdW50aWwoY29uc3QgY2hyb25vOjp0aW1lX3BvaW50PF9DbG9jaywgX0R1cmF0aW9uPiYgX19hdGltZSkKKyAgICAgIHsKKwljaHJvbm86OnRpbWVfcG9pbnQ8X0Nsb2NrLCBjaHJvbm86OnNlY29uZHM+IF9fcyA9CisJICBjaHJvbm86OnRpbWVfcG9pbnRfY2FzdDxjaHJvbm86OnNlY29uZHM+KF9fYXRpbWUpOworCisJY2hyb25vOjpuYW5vc2Vjb25kcyBfX25zID0KKwkgIGNocm9ubzo6ZHVyYXRpb25fY2FzdDxjaHJvbm86Om5hbm9zZWNvbmRzPihfX2F0aW1lIC0gX19zKTsKKworCV9fZ3RocmVhZF90aW1lX3QgX190cyA9IHsKKwkgIHN0YXRpY19jYXN0PHN0ZDo6dGltZV90PihfX3MudGltZV9zaW5jZV9lcG9jaCgpLmNvdW50KCkpLAorCSAgc3RhdGljX2Nhc3Q8bG9uZz4oX19ucy5jb3VudCgpKQorCX07CisKKwlyZXR1cm4gIV9fZ3RocmVhZF9tdXRleF90aW1lZGxvY2soJl9NX211dGV4LCAmX190cyk7CisgICAgICB9CisKKyAgICB2b2lkCisgICAgdW5sb2NrKCkKKyAgICB7CisgICAgICAvLyBYWFggRUlOVkFMLCBFQUdBSU4sIEVCVVNZCisgICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9tdXRleCk7CisgICAgfQorCisgICAgbmF0aXZlX2hhbmRsZV90eXBlCisgICAgbmF0aXZlX2hhbmRsZSgpCisgICAgeyByZXR1cm4gJl9NX211dGV4OyB9CisKKyAgcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVwLCB0eXBlbmFtZSBfUGVyaW9kPgorICAgICAgdHlwZW5hbWUgZW5hYmxlX2lmPAorCXJhdGlvX2xlc3NfZXF1YWw8X19jbG9ja190OjpwZXJpb2QsIF9QZXJpb2Q+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKKyAgICAgIF9fdHJ5X2xvY2tfZm9yX2ltcGwoY29uc3QgY2hyb25vOjpkdXJhdGlvbjxfUmVwLCBfUGVyaW9kPiYgX19ydGltZSkKKyAgICAgIHsKKwlfX2Nsb2NrX3Q6OnRpbWVfcG9pbnQgX19hdGltZSA9IF9fY2xvY2tfdDo6bm93KCkKKwkgICsgY2hyb25vOjpkdXJhdGlvbl9jYXN0PF9fY2xvY2tfdDo6ZHVyYXRpb24+KF9fcnRpbWUpOworCisJcmV0dXJuIHRyeV9sb2NrX3VudGlsKF9fYXRpbWUpOworICAgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9SZXAsIHR5cGVuYW1lIF9QZXJpb2Q+CisgICAgICB0eXBlbmFtZSBlbmFibGVfaWY8CisJIXJhdGlvX2xlc3NfZXF1YWw8X19jbG9ja190OjpwZXJpb2QsIF9QZXJpb2Q+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKKyAgICAgIF9fdHJ5X2xvY2tfZm9yX2ltcGwoY29uc3QgY2hyb25vOjpkdXJhdGlvbjxfUmVwLCBfUGVyaW9kPiYgX19ydGltZSkKKyAgICAgIHsKKwlfX2Nsb2NrX3Q6OnRpbWVfcG9pbnQgX19hdGltZSA9IF9fY2xvY2tfdDo6bm93KCkKKwkgICsgKytjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8X19jbG9ja190OjpkdXJhdGlvbj4oX19ydGltZSk7CisKKwlyZXR1cm4gdHJ5X2xvY2tfdW50aWwoX19hdGltZSk7CisgICAgICB9CisgIH07CisKKyAgLy8vIHJlY3Vyc2l2ZV90aW1lZF9tdXRleAorICBjbGFzcyByZWN1cnNpdmVfdGltZWRfbXV0ZXgKKyAgeworICAgIHR5cGVkZWYgX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90CQlfX25hdGl2ZV90eXBlOworCisjaWZkZWYgX0dMSUJDWFhfVVNFX0NMT0NLX01PTk9UT05JQworICAgIHR5cGVkZWYgY2hyb25vOjptb25vdG9uaWNfY2xvY2sgCQlfX2Nsb2NrX3Q7CisjZWxzZQorICAgIHR5cGVkZWYgY2hyb25vOjpoaWdoX3Jlc29sdXRpb25fY2xvY2sgCV9fY2xvY2tfdDsKKyNlbmRpZgorCisgICAgX19uYXRpdmVfdHlwZSAgX01fbXV0ZXg7CisKKyAgcHVibGljOgorICAgIHR5cGVkZWYgX19uYXRpdmVfdHlwZSogCQkJbmF0aXZlX2hhbmRsZV90eXBlOworCisgICAgcmVjdXJzaXZlX3RpbWVkX211dGV4KCkKKyAgICB7CisgICAgICAvLyBYWFggRUFHQUlOLCBFTk9NRU0sIEVQRVJNLCBFQlVTWShtYXkpLCBFSU5WQUwobWF5KQorI2lmZGVmIF9fR1RIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVAorICAgICAgX19uYXRpdmVfdHlwZSBfX3RtcCA9IF9fR1RIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVDsKKyAgICAgIF9NX211dGV4ID0gX190bXA7CisjZWxzZQorICAgICAgX19HVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUX0ZVTkNUSU9OKCZfTV9tdXRleCk7CisjZW5kaWYKKyAgICB9CisKKyAgICByZWN1cnNpdmVfdGltZWRfbXV0ZXgoY29uc3QgcmVjdXJzaXZlX3RpbWVkX211dGV4JikgPSBkZWxldGU7CisgICAgcmVjdXJzaXZlX3RpbWVkX211dGV4JiBvcGVyYXRvcj0oY29uc3QgcmVjdXJzaXZlX3RpbWVkX211dGV4JikgPSBkZWxldGU7CisKKyAgICB2b2lkCisgICAgbG9jaygpCisgICAgeworICAgICAgaW50IF9fZSA9IF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfbG9jaygmX01fbXV0ZXgpOworCisgICAgICAvLyBFSU5WQUwsIEVBR0FJTiwgRUJVU1ksIEVJTlZBTCwgRURFQURMSyhtYXkpCisgICAgICBpZiAoX19lKQorCV9fdGhyb3dfc3lzdGVtX2Vycm9yKF9fZSk7CisgICAgfQorCisgICAgYm9vbAorICAgIHRyeV9sb2NrKCkKKyAgICB7CisgICAgICAvLyBYWFggRUlOVkFMLCBFQUdBSU4sIEVCVVNZCisgICAgICByZXR1cm4gIV9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdHJ5bG9jaygmX01fbXV0ZXgpOworICAgIH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBfUmVwLCBjbGFzcyBfUGVyaW9kPgorICAgICAgYm9vbAorICAgICAgdHJ5X2xvY2tfZm9yKGNvbnN0IGNocm9ubzo6ZHVyYXRpb248X1JlcCwgX1BlcmlvZD4mIF9fcnRpbWUpCisgICAgICB7IHJldHVybiBfX3RyeV9sb2NrX2Zvcl9pbXBsKF9fcnRpbWUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0Nsb2NrLCBjbGFzcyBfRHVyYXRpb24+CisgICAgICBib29sCisgICAgICB0cnlfbG9ja191bnRpbChjb25zdCBjaHJvbm86OnRpbWVfcG9pbnQ8X0Nsb2NrLCBfRHVyYXRpb24+JiBfX2F0aW1lKQorICAgICAgeworCWNocm9ubzo6dGltZV9wb2ludDxfQ2xvY2ssIGNocm9ubzo6c2Vjb25kcz4gIF9fcyA9CisJICBjaHJvbm86OnRpbWVfcG9pbnRfY2FzdDxjaHJvbm86OnNlY29uZHM+KF9fYXRpbWUpOworCisJY2hyb25vOjpuYW5vc2Vjb25kcyBfX25zID0KKwkgIGNocm9ubzo6ZHVyYXRpb25fY2FzdDxjaHJvbm86Om5hbm9zZWNvbmRzPihfX2F0aW1lIC0gX19zKTsKKworCV9fZ3RocmVhZF90aW1lX3QgX190cyA9IHsKKwkgIHN0YXRpY19jYXN0PHN0ZDo6dGltZV90PihfX3MudGltZV9zaW5jZV9lcG9jaCgpLmNvdW50KCkpLAorCSAgc3RhdGljX2Nhc3Q8bG9uZz4oX19ucy5jb3VudCgpKQorCX07CisKKwlyZXR1cm4gIV9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdGltZWRsb2NrKCZfTV9tdXRleCwgJl9fdHMpOworICAgICAgfQorCisgICAgdm9pZAorICAgIHVubG9jaygpCisgICAgeworICAgICAgLy8gWFhYIEVJTlZBTCwgRUFHQUlOLCBFQlVTWQorICAgICAgX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF91bmxvY2soJl9NX211dGV4KTsKKyAgICB9CisKKyAgICBuYXRpdmVfaGFuZGxlX3R5cGUKKyAgICBuYXRpdmVfaGFuZGxlKCkKKyAgICB7IHJldHVybiAmX01fbXV0ZXg7IH0KKworICBwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAsIHR5cGVuYW1lIF9QZXJpb2Q+CisgICAgICB0eXBlbmFtZSBlbmFibGVfaWY8CisJcmF0aW9fbGVzc19lcXVhbDxfX2Nsb2NrX3Q6OnBlcmlvZCwgX1BlcmlvZD46OnZhbHVlLCBib29sPjo6dHlwZQorICAgICAgX190cnlfbG9ja19mb3JfaW1wbChjb25zdCBjaHJvbm86OmR1cmF0aW9uPF9SZXAsIF9QZXJpb2Q+JiBfX3J0aW1lKQorICAgICAgeworCV9fY2xvY2tfdDo6dGltZV9wb2ludCBfX2F0aW1lID0gX19jbG9ja190Ojpub3coKQorCSAgKyBjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8X19jbG9ja190OjpkdXJhdGlvbj4oX19ydGltZSk7CisKKwlyZXR1cm4gdHJ5X2xvY2tfdW50aWwoX19hdGltZSk7CisgICAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1JlcCwgdHlwZW5hbWUgX1BlcmlvZD4KKyAgICAgIHR5cGVuYW1lIGVuYWJsZV9pZjwKKwkhcmF0aW9fbGVzc19lcXVhbDxfX2Nsb2NrX3Q6OnBlcmlvZCwgX1BlcmlvZD46OnZhbHVlLCBib29sPjo6dHlwZQorICAgICAgX190cnlfbG9ja19mb3JfaW1wbChjb25zdCBjaHJvbm86OmR1cmF0aW9uPF9SZXAsIF9QZXJpb2Q+JiBfX3J0aW1lKQorICAgICAgeworCV9fY2xvY2tfdDo6dGltZV9wb2ludCBfX2F0aW1lID0gX19jbG9ja190Ojpub3coKQorCSAgKyArK2Nocm9ubzo6ZHVyYXRpb25fY2FzdDxfX2Nsb2NrX3Q6OmR1cmF0aW9uPihfX3J0aW1lKTsKKworCXJldHVybiB0cnlfbG9ja191bnRpbChfX2F0aW1lKTsKKyAgICAgIH0KKyAgfTsKKworICAvLy8gRG8gbm90IGFjcXVpcmUgb3duZXJzaGlwIG9mIHRoZSBtdXRleC4KKyAgc3RydWN0IGRlZmVyX2xvY2tfdCB7IH07CisKKyAgLy8vIFRyeSB0byBhY3F1aXJlIG93bmVyc2hpcCBvZiB0aGUgbXV0ZXggd2l0aG91dCBibG9ja2luZy4KKyAgc3RydWN0IHRyeV90b19sb2NrX3QgeyB9OworCisgIC8vLyBBc3N1bWUgdGhlIGNhbGxpbmcgdGhyZWFkIGhhcyBhbHJlYWR5IG9idGFpbmVkIG11dGV4IG93bmVyc2hpcAorICAvLy8gYW5kIG1hbmFnZSBpdC4KKyAgc3RydWN0IGFkb3B0X2xvY2tfdCB7IH07CisKKyAgZXh0ZXJuIGNvbnN0IGRlZmVyX2xvY2tfdAlkZWZlcl9sb2NrOworICBleHRlcm4gY29uc3QgdHJ5X3RvX2xvY2tfdAl0cnlfdG9fbG9jazsKKyAgZXh0ZXJuIGNvbnN0IGFkb3B0X2xvY2tfdAlhZG9wdF9sb2NrOworCisgIC8vLyBAYnJpZWYgIFNjb3BlZCBsb2NrIGlkaW9tLgorICAvLyBBY3F1aXJlIHRoZSBtdXRleCBoZXJlIHdpdGggYSBjb25zdHJ1Y3RvciBjYWxsLCB0aGVuIHJlbGVhc2Ugd2l0aAorICAvLyB0aGUgZGVzdHJ1Y3RvciBjYWxsIGluIGFjY29yZGFuY2Ugd2l0aCBSQUlJIHN0eWxlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTXV0ZXg+CisgICAgY2xhc3MgbG9ja19ndWFyZAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9NdXRleCBtdXRleF90eXBlOworCisgICAgICBleHBsaWNpdCBsb2NrX2d1YXJkKG11dGV4X3R5cGUmIF9fbSkgOiBfTV9kZXZpY2UoX19tKQorICAgICAgeyBfTV9kZXZpY2UubG9jaygpOyB9CisKKyAgICAgIGxvY2tfZ3VhcmQobXV0ZXhfdHlwZSYgX19tLCBhZG9wdF9sb2NrX3QpIDogX01fZGV2aWNlKF9fbSkKKyAgICAgIHsgfSAvLyBjYWxsaW5nIHRocmVhZCBvd25zIG11dGV4CisKKyAgICAgIH5sb2NrX2d1YXJkKCkKKyAgICAgIHsgX01fZGV2aWNlLnVubG9jaygpOyB9CisKKyAgICAgIGxvY2tfZ3VhcmQoY29uc3QgbG9ja19ndWFyZCYpID0gZGVsZXRlOworICAgICAgbG9ja19ndWFyZCYgb3BlcmF0b3I9KGNvbnN0IGxvY2tfZ3VhcmQmKSA9IGRlbGV0ZTsKKworICAgIHByaXZhdGU6CisgICAgICBtdXRleF90eXBlJiAgX01fZGV2aWNlOworICAgIH07CisKKyAgLy8vIHVuaXF1ZV9sb2NrCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9NdXRleD4KKyAgICBjbGFzcyB1bmlxdWVfbG9jaworICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9NdXRleCBtdXRleF90eXBlOworCisgICAgICB1bmlxdWVfbG9jaygpCisgICAgICA6IF9NX2RldmljZSgwKSwgX01fb3ducyhmYWxzZSkKKyAgICAgIHsgfQorCisgICAgICBleHBsaWNpdCB1bmlxdWVfbG9jayhtdXRleF90eXBlJiBfX20pCisgICAgICA6IF9NX2RldmljZSgmX19tKSwgX01fb3ducyhmYWxzZSkKKyAgICAgIHsKKwlsb2NrKCk7CisJX01fb3ducyA9IHRydWU7CisgICAgICB9CisKKyAgICAgIHVuaXF1ZV9sb2NrKG11dGV4X3R5cGUmIF9fbSwgZGVmZXJfbG9ja190KQorICAgICAgOiBfTV9kZXZpY2UoJl9fbSksIF9NX293bnMoZmFsc2UpCisgICAgICB7IH0KKworICAgICAgdW5pcXVlX2xvY2sobXV0ZXhfdHlwZSYgX19tLCB0cnlfdG9fbG9ja190KQorICAgICAgOiBfTV9kZXZpY2UoJl9fbSksIF9NX293bnMoX01fZGV2aWNlLT50cnlfbG9jaygpKQorICAgICAgeyB9CisKKyAgICAgIHVuaXF1ZV9sb2NrKG11dGV4X3R5cGUmIF9fbSwgYWRvcHRfbG9ja190KQorICAgICAgOiBfTV9kZXZpY2UoJl9fbSksIF9NX293bnModHJ1ZSkKKyAgICAgIHsKKwkvLyBYWFggY2FsbGluZyB0aHJlYWQgb3ducyBtdXRleAorICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2xvY2ssIHR5cGVuYW1lIF9EdXJhdGlvbj4KKwl1bmlxdWVfbG9jayhtdXRleF90eXBlJiBfX20sCisJCSAgICBjb25zdCBjaHJvbm86OnRpbWVfcG9pbnQ8X0Nsb2NrLCBfRHVyYXRpb24+JiBfX2F0aW1lKQorCTogX01fZGV2aWNlKCZfX20pLCBfTV9vd25zKF9NX2RldmljZS0+dHJ5X2xvY2tfdW50aWwoX19hdGltZSkpCisJeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAsIHR5cGVuYW1lIF9QZXJpb2Q+CisJdW5pcXVlX2xvY2sobXV0ZXhfdHlwZSYgX19tLAorCQkgICAgY29uc3QgY2hyb25vOjpkdXJhdGlvbjxfUmVwLCBfUGVyaW9kPiYgX19ydGltZSkKKwk6IF9NX2RldmljZSgmX19tKSwgX01fb3ducyhfTV9kZXZpY2UtPnRyeV9sb2NrX2ZvcihfX3J0aW1lKSkKKwl7IH0KKworICAgICAgfnVuaXF1ZV9sb2NrKCkKKyAgICAgIHsKKwlpZiAoX01fb3ducykKKwkgIHVubG9jaygpOworICAgICAgfQorCisgICAgICB1bmlxdWVfbG9jayhjb25zdCB1bmlxdWVfbG9jayYpID0gZGVsZXRlOworICAgICAgdW5pcXVlX2xvY2smIG9wZXJhdG9yPShjb25zdCB1bmlxdWVfbG9jayYpID0gZGVsZXRlOworCisgICAgICB1bmlxdWVfbG9jayh1bmlxdWVfbG9jayYmIF9fdSkKKyAgICAgIDogX01fZGV2aWNlKF9fdS5fTV9kZXZpY2UpLCBfTV9vd25zKF9fdS5fTV9vd25zKQorICAgICAgeworCV9fdS5fTV9kZXZpY2UgPSAwOworCV9fdS5fTV9vd25zID0gZmFsc2U7CisgICAgICB9CisKKyAgICAgIHVuaXF1ZV9sb2NrJiBvcGVyYXRvcj0odW5pcXVlX2xvY2smJiBfX3UpCisgICAgICB7CisJaWYoX01fb3ducykKKwkgIHVubG9jaygpOworCisJdW5pcXVlX2xvY2soc3RkOjptb3ZlKF9fdSkpLnN3YXAoKnRoaXMpOworCisJX191Ll9NX2RldmljZSA9IDA7CisJX191Ll9NX293bnMgPSBmYWxzZTsKKworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgbG9jaygpCisgICAgICB7CisJaWYgKCFfTV9kZXZpY2UpCisJICBfX3Rocm93X3N5c3RlbV9lcnJvcihpbnQoZXJyYzo6b3BlcmF0aW9uX25vdF9wZXJtaXR0ZWQpKTsKKwllbHNlIGlmIChfTV9vd25zKQorCSAgX190aHJvd19zeXN0ZW1fZXJyb3IoaW50KGVycmM6OnJlc291cmNlX2RlYWRsb2NrX3dvdWxkX29jY3VyKSk7CisJZWxzZQorCSAgeworCSAgICBfTV9kZXZpY2UtPmxvY2soKTsKKwkgICAgX01fb3ducyA9IHRydWU7CisJICB9CisgICAgICB9CisKKyAgICAgIGJvb2wKKyAgICAgIHRyeV9sb2NrKCkKKyAgICAgIHsKKwlpZiAoIV9NX2RldmljZSkKKwkgIF9fdGhyb3dfc3lzdGVtX2Vycm9yKGludChlcnJjOjpvcGVyYXRpb25fbm90X3Blcm1pdHRlZCkpOworCWVsc2UgaWYgKF9NX293bnMpCisJICBfX3Rocm93X3N5c3RlbV9lcnJvcihpbnQoZXJyYzo6cmVzb3VyY2VfZGVhZGxvY2tfd291bGRfb2NjdXIpKTsKKwllbHNlCisJICB7CisJICAgIF9NX293bnMgPSBfTV9kZXZpY2UtPnRyeV9sb2NrKCk7CisJICAgIHJldHVybiBfTV9vd25zOworCSAgfQorICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2xvY2ssIHR5cGVuYW1lIF9EdXJhdGlvbj4KKwlib29sCisJdHJ5X2xvY2tfdW50aWwoY29uc3QgY2hyb25vOjp0aW1lX3BvaW50PF9DbG9jaywgX0R1cmF0aW9uPiYgX19hdGltZSkKKwl7CisJICBpZiAoIV9NX2RldmljZSkKKwkgICAgX190aHJvd19zeXN0ZW1fZXJyb3IoaW50KGVycmM6Om9wZXJhdGlvbl9ub3RfcGVybWl0dGVkKSk7CisJICBlbHNlIGlmIChfTV9vd25zKQorCSAgICBfX3Rocm93X3N5c3RlbV9lcnJvcihpbnQoZXJyYzo6cmVzb3VyY2VfZGVhZGxvY2tfd291bGRfb2NjdXIpKTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIF9NX293bnMgPSBfTV9kZXZpY2UtPnRyeV9sb2NrX3VudGlsKF9fYXRpbWUpOworCSAgICAgIHJldHVybiBfTV9vd25zOworCSAgICB9CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVwLCB0eXBlbmFtZSBfUGVyaW9kPgorCWJvb2wKKwl0cnlfbG9ja19mb3IoY29uc3QgY2hyb25vOjpkdXJhdGlvbjxfUmVwLCBfUGVyaW9kPiYgX19ydGltZSkKKwl7CisJICBpZiAoIV9NX2RldmljZSkKKwkgICAgX190aHJvd19zeXN0ZW1fZXJyb3IoaW50KGVycmM6Om9wZXJhdGlvbl9ub3RfcGVybWl0dGVkKSk7CisJICBlbHNlIGlmIChfTV9vd25zKQorCSAgICBfX3Rocm93X3N5c3RlbV9lcnJvcihpbnQoZXJyYzo6cmVzb3VyY2VfZGVhZGxvY2tfd291bGRfb2NjdXIpKTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIF9NX293bnMgPSBfTV9kZXZpY2UtPnRyeV9sb2NrX2ZvcihfX3J0aW1lKTsKKwkgICAgICByZXR1cm4gX01fb3duczsKKwkgICAgfQorCSB9CisKKyAgICAgIHZvaWQKKyAgICAgIHVubG9jaygpCisgICAgICB7CisJaWYgKCFfTV9vd25zKQorCSAgX190aHJvd19zeXN0ZW1fZXJyb3IoaW50KGVycmM6Om9wZXJhdGlvbl9ub3RfcGVybWl0dGVkKSk7CisJZWxzZSBpZiAoX01fZGV2aWNlKQorCSAgeworCSAgICBfTV9kZXZpY2UtPnVubG9jaygpOworCSAgICBfTV9vd25zID0gZmFsc2U7CisJICB9CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAodW5pcXVlX2xvY2smIF9fdSkKKyAgICAgIHsKKwlzdGQ6OnN3YXAoX01fZGV2aWNlLCBfX3UuX01fZGV2aWNlKTsKKwlzdGQ6OnN3YXAoX01fb3ducywgX191Ll9NX293bnMpOworICAgICAgfQorCisgICAgICBtdXRleF90eXBlKgorICAgICAgcmVsZWFzZSgpCisgICAgICB7CisJbXV0ZXhfdHlwZSogX19yZXQgPSBfTV9kZXZpY2U7CisJX01fZGV2aWNlID0gMDsKKwlfTV9vd25zID0gZmFsc2U7CisJcmV0dXJuIF9fcmV0OworICAgICAgfQorCisgICAgICBib29sCisgICAgICBvd25zX2xvY2soKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fb3duczsgfQorCisgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIG93bnNfbG9jaygpOyB9CisKKyAgICAgIG11dGV4X3R5cGUqCisgICAgICBtdXRleCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9kZXZpY2U7IH0KKworICAgIHByaXZhdGU6CisgICAgICBtdXRleF90eXBlKglfTV9kZXZpY2U7CisgICAgICBib29sCQlfTV9vd25zOyAvLyBYWFggdXNlIGF0b21pY19ib29sCisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTXV0ZXg+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHVuaXF1ZV9sb2NrPF9NdXRleD4mIF9feCwgdW5pcXVlX2xvY2s8X011dGV4PiYgX195KQorICAgIHsgX194LnN3YXAoX195KTsgfQorCisgIHRlbXBsYXRlPGludCBfSWR4PgorICAgIHN0cnVjdCBfX3VubG9ja19pbXBsCisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0xvY2s+CisJc3RhdGljIHZvaWQKKwlfX2RvX3VubG9jayh0dXBsZTxfTG9jayYuLi4+JiBfX2xvY2tzKQorCXsKKwkgIHN0ZDo6Z2V0PF9JZHg+KF9fbG9ja3MpLnVubG9jaygpOworCSAgX191bmxvY2tfaW1wbDxfSWR4IC0gMT46Ol9fZG9fdW5sb2NrKF9fbG9ja3MpOworCX0KKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX191bmxvY2tfaW1wbDwtMT4KKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfTG9jaz4KKwlzdGF0aWMgdm9pZAorCV9fZG9fdW5sb2NrKHR1cGxlPF9Mb2NrJi4uLj4mKQorCXsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8aW50IF9JZHgsIGJvb2wgX0NvbnRpbnVlID0gdHJ1ZT4KKyAgICBzdHJ1Y3QgX190cnlfbG9ja19pbXBsCisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0xvY2s+CisJc3RhdGljIGludAorCV9fZG9fdHJ5X2xvY2sodHVwbGU8X0xvY2smLi4uPiYgX19sb2NrcykKKwl7CisJICBpZihzdGQ6OmdldDxfSWR4PihfX2xvY2tzKS50cnlfbG9jaygpKQorCSAgICB7CisJICAgICAgcmV0dXJuIF9fdHJ5X2xvY2tfaW1wbDxfSWR4ICsgMSwKKwkJX0lkeCArIDIgPCBzaXplb2YuLi4oX0xvY2spPjo6X19kb190cnlfbG9jayhfX2xvY2tzKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgX191bmxvY2tfaW1wbDxfSWR4Pjo6X19kb191bmxvY2soX19sb2Nrcyk7CisJICAgICAgcmV0dXJuIF9JZHg7CisJICAgIH0KKwl9CisgICAgfTsKKworICB0ZW1wbGF0ZTxpbnQgX0lkeD4KKyAgICBzdHJ1Y3QgX190cnlfbG9ja19pbXBsPF9JZHgsIGZhbHNlPgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9Mb2NrPgorCXN0YXRpYyBpbnQKKwlfX2RvX3RyeV9sb2NrKHR1cGxlPF9Mb2NrJi4uLj4mIF9fbG9ja3MpCisJeworCSAgaWYoc3RkOjpnZXQ8X0lkeD4oX19sb2NrcykudHJ5X2xvY2soKSkKKwkgICAgcmV0dXJuIC0xOworCSAgZWxzZQorCSAgICB7CisJICAgICAgX191bmxvY2tfaW1wbDxfSWR4Pjo6X19kb191bmxvY2soX19sb2Nrcyk7CisJICAgICAgcmV0dXJuIF9JZHg7CisJICAgIH0KKwl9CisgICAgfTsKKworICAvKiogQGJyaWVmIEdlbmVyaWMgdHJ5X2xvY2suCisgICAqICBAcGFyYW0gX19sMSBNZWV0cyBNdXRleCByZXF1aXJlbWVudHMgKHRyeV9sb2NrKCkgbWF5IHRocm93KS4KKyAgICogIEBwYXJhbSBfX2wyIE1lZXRzIE11dGV4IHJlcXVpcmVtZW50cyAodHJ5X2xvY2soKSBtYXkgdGhyb3cpLgorICAgKiAgQHBhcmFtIF9fbDMgTWVldHMgTXV0ZXggcmVxdWlyZW1lbnRzICh0cnlfbG9jaygpIG1heSB0aHJvdykuCisgICAqICBAcmV0dXJuIFJldHVybnMgLTEgaWYgYWxsIHRyeV9sb2NrKCkgY2FsbHMgcmV0dXJuIHRydWUuIE90aGVyd2lzZSByZXR1cm5zCisgICAqICAgICAgICAgIGEgMC1iYXNlZCBpbmRleCBjb3JyZXNwb25kaW5nIHRvIHRoZSBhcmd1bWVudCB0aGF0IHJldHVybmVkIGZhbHNlLgorICAgKiAgQHBvc3QgRWl0aGVyIGFsbCBhcmd1bWVudHMgYXJlIGxvY2tlZCwgb3Igbm9uZSB3aWxsIGJlLgorICAgKgorICAgKiAgU2VxdWVudGlhbGx5IGNhbGxzIHRyeV9sb2NrKCkgb24gZWFjaCBhcmd1bWVudC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Mb2NrMSwgdHlwZW5hbWUgX0xvY2syLCB0eXBlbmFtZS4uLiBfTG9jazM+CisgICAgaW50CisgICAgdHJ5X2xvY2soX0xvY2sxJiBfX2wxLCBfTG9jazImIF9fbDIsIF9Mb2NrMyYuLi4gX19sMykKKyAgICB7CisgICAgICB0dXBsZTxfTG9jazEmLCBfTG9jazImLCBfTG9jazMmLi4uPiBfX2xvY2tzKF9fbDEsIF9fbDIsIF9fbDMuLi4pOworICAgICAgcmV0dXJuIF9fdHJ5X2xvY2tfaW1wbDwwPjo6X19kb190cnlfbG9jayhfX2xvY2tzKTsKKyAgICB9CisKKyAgLy8vIGxvY2sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0wxLCB0eXBlbmFtZSBfTDIsIHR5cGVuYW1lIC4uLl9MMz4KKyAgICB2b2lkCisgICAgbG9jayhfTDEmLCBfTDImLCBfTDMmLi4uKTsKKworICAvLy8gb25jZV9mbGFnCisgIHN0cnVjdCBvbmNlX2ZsYWcKKyAgeworICBwcml2YXRlOgorICAgIHR5cGVkZWYgX19ndGhyZWFkX29uY2VfdCBfX25hdGl2ZV90eXBlOworICAgIF9fbmF0aXZlX3R5cGUgIF9NX29uY2U7CisKKyAgcHVibGljOgorICAgIG9uY2VfZmxhZygpCisgICAgeworICAgICAgX19uYXRpdmVfdHlwZSBfX3RtcCA9IF9fR1RIUkVBRF9PTkNFX0lOSVQ7CisgICAgICBfTV9vbmNlID0gX190bXA7CisgICAgfQorCisgICAgb25jZV9mbGFnKGNvbnN0IG9uY2VfZmxhZyYpID0gZGVsZXRlOworICAgIG9uY2VfZmxhZyYgb3BlcmF0b3I9KGNvbnN0IG9uY2VfZmxhZyYpID0gZGVsZXRlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NhbGxhYmxlLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgIGZyaWVuZCB2b2lkCisgICAgICBjYWxsX29uY2Uob25jZV9mbGFnJiBfX29uY2UsIF9DYWxsYWJsZSBfX2YsIF9BcmdzJiYuLi4gX19hcmdzKTsKKyAgfTsKKworI2lmZGVmIF9HTElCQ1hYX0hBVkVfVExTCisgIGV4dGVybiBfX3RocmVhZCB2b2lkKiBfX29uY2VfY2FsbGFibGU7CisgIGV4dGVybiBfX3RocmVhZCB2b2lkICgqX19vbmNlX2NhbGwpKCk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NhbGxhYmxlPgorICAgIGlubGluZSB2b2lkCisgICAgX19vbmNlX2NhbGxfaW1wbCgpCisgICAgeworICAgICAgKCooX0NhbGxhYmxlKilfX29uY2VfY2FsbGFibGUpKCk7CisgICAgfQorI2Vsc2UKKyAgZXh0ZXJuIGZ1bmN0aW9uPHZvaWQoKT4gX19vbmNlX2Z1bmN0b3I7CisKKyAgZXh0ZXJuIHZvaWQKKyAgX19zZXRfb25jZV9mdW5jdG9yX2xvY2tfcHRyKHVuaXF1ZV9sb2NrPG11dGV4PiopOworCisgIGV4dGVybiBtdXRleCYKKyAgX19nZXRfb25jZV9tdXRleCgpOworI2VuZGlmCisKKyAgZXh0ZXJuICJDIiB2b2lkIF9fb25jZV9wcm94eSgpOworCisgIC8vLyBjYWxsX29uY2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NhbGxhYmxlLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICB2b2lkCisgICAgY2FsbF9vbmNlKG9uY2VfZmxhZyYgX19vbmNlLCBfQ2FsbGFibGUgX19mLCBfQXJncyYmLi4uIF9fYXJncykKKyAgICB7CisjaWZkZWYgX0dMSUJDWFhfSEFWRV9UTFMKKyAgICAgIGF1dG8gX19ib3VuZF9mdW5jdG9yID0gc3RkOjpiaW5kPHZvaWQ+KF9fZiwgX19hcmdzLi4uKTsKKyAgICAgIF9fb25jZV9jYWxsYWJsZSA9ICZfX2JvdW5kX2Z1bmN0b3I7CisgICAgICBfX29uY2VfY2FsbCA9ICZfX29uY2VfY2FsbF9pbXBsPGRlY2x0eXBlKF9fYm91bmRfZnVuY3Rvcik+OworI2Vsc2UKKyAgICAgIHVuaXF1ZV9sb2NrPG11dGV4PiBfX2Z1bmN0b3JfbG9jayhfX2dldF9vbmNlX211dGV4KCkpOworICAgICAgX19vbmNlX2Z1bmN0b3IgPSBzdGQ6OmJpbmQ8dm9pZD4oX19mLCBfX2FyZ3MuLi4pOworICAgICAgX19zZXRfb25jZV9mdW5jdG9yX2xvY2tfcHRyKCZfX2Z1bmN0b3JfbG9jayk7CisjZW5kaWYKKworICAgICAgaW50IF9fZSA9IF9fZ3RocmVhZF9vbmNlKCYoX19vbmNlLl9NX29uY2UpLCAmX19vbmNlX3Byb3h5KTsKKworI2lmbmRlZiBfR0xJQkNYWF9IQVZFX1RMUworICAgICAgaWYgKF9fZnVuY3Rvcl9sb2NrKQorICAgICAgICBfX3NldF9vbmNlX2Z1bmN0b3JfbG9ja19wdHIoMCk7CisjZW5kaWYKKworICAgICAgaWYgKF9fZSkKKwlfX3Rocm93X3N5c3RlbV9lcnJvcihfX2UpOworICAgIH0KKworICAvLyBAfSBncm91cCBtdXRleGVzCit9CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9IQVNfR1RIUkVBRFMgJiYgX0dMSUJDWFhfVVNFX0M5OV9TVERJTlRfVFIxCisKKyNlbmRpZiAvLyBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworCisjZW5kaWYgLy8gX0dMSUJDWFhfTVVURVgKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvbmVzdGVkX2V4Y2VwdGlvbi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9uZXN0ZWRfZXhjZXB0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk2NjVkYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvbmVzdGVkX2V4Y2VwdGlvbi5oCkBAIC0wLDAgKzEsMTY4IEBACisvLyBOZXN0ZWQgRXhjZXB0aW9uIHN1cHBvcnQgaGVhZGVyIChuZXN0ZWRfZXhjZXB0aW9uIGNsYXNzKSBmb3IgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBuZXN0ZWRfZXhjZXB0aW9uLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBoZWFkZXJzIGFuZCB0aGUKKyAqICBpbXBsZW1lbnRhdGlvbi4gWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9ORVNURURfRVhDRVBUSU9OX0gKKyNkZWZpbmUgX0dMSUJDWFhfTkVTVEVEX0VYQ0VQVElPTl9IIDEKKworI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGRlZmF1bHQpCisKKyNpZm5kZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyMgaW5jbHVkZSA8Yml0cy9jKysweF93YXJuaW5nLmg+CisjZWxzZQorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKworI2lmICFkZWZpbmVkKF9HTElCQ1hYX0FUT01JQ19CVUlMVElOU180KQorIyAgZXJyb3IgVGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IGV4Y2VwdGlvbiBwcm9wYWdhdGlvbi4KKyNlbmRpZgorCitleHRlcm4gIkMrKyIgeworCituYW1lc3BhY2Ugc3RkCit7CisgIC8qKgorICAgKiBAYWRkdG9ncm91cCBleGNlcHRpb25zCisgICAqIEB7CisgICAqLworCisgIC8vLyBFeGNlcHRpb24gY2xhc3Mgd2l0aCBleGNlcHRpb25fcHRyIGRhdGEgbWVtYmVyLgorICBjbGFzcyBuZXN0ZWRfZXhjZXB0aW9uCisgIHsKKyAgICBleGNlcHRpb25fcHRyIF9NX3B0cjsKKworICBwdWJsaWM6CisgICAgbmVzdGVkX2V4Y2VwdGlvbigpIHRocm93KCkgOiBfTV9wdHIoY3VycmVudF9leGNlcHRpb24oKSkgeyB9CisKKyAgICBuZXN0ZWRfZXhjZXB0aW9uKGNvbnN0IG5lc3RlZF9leGNlcHRpb24mKSA9IGRlZmF1bHQ7CisKKyAgICBuZXN0ZWRfZXhjZXB0aW9uJiBvcGVyYXRvcj0oY29uc3QgbmVzdGVkX2V4Y2VwdGlvbiYpID0gZGVmYXVsdDsKKworICAgIGlubGluZSB2aXJ0dWFsIH5uZXN0ZWRfZXhjZXB0aW9uKCk7CisKKyAgICB2b2lkCisgICAgcmV0aHJvd19uZXN0ZWQoKSBjb25zdCBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSkKKyAgICB7IHJldGhyb3dfZXhjZXB0aW9uKF9NX3B0cik7IH0KKworICAgIGV4Y2VwdGlvbl9wdHIKKyAgICBuZXN0ZWRfcHRyKCkgY29uc3QKKyAgICB7IHJldHVybiBfTV9wdHI7IH0KKyAgfTsKKworICBpbmxpbmUgbmVzdGVkX2V4Y2VwdGlvbjo6fm5lc3RlZF9leGNlcHRpb24oKSA9IGRlZmF1bHQ7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0V4Y2VwdD4KKyAgICBzdHJ1Y3QgX05lc3RlZF9leGNlcHRpb24gOiBwdWJsaWMgX0V4Y2VwdCwgcHVibGljIG5lc3RlZF9leGNlcHRpb24KKyAgICB7CisgICAgICBleHBsaWNpdCBfTmVzdGVkX2V4Y2VwdGlvbihfRXhjZXB0JiYgX19leCkKKyAgICAgIDogX0V4Y2VwdChzdGF0aWNfY2FzdDxfRXhjZXB0JiY+KF9fZXgpKQorICAgICAgeyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRXg+CisgICAgc3RydWN0IF9fZ2V0X25lc3RlZF9oZWxwZXIKKyAgICB7CisgICAgICBzdGF0aWMgY29uc3QgbmVzdGVkX2V4Y2VwdGlvbioKKyAgICAgIF9TX2dldChjb25zdCBfRXgmIF9fZXgpCisgICAgICB7IHJldHVybiBkeW5hbWljX2Nhc3Q8Y29uc3QgbmVzdGVkX2V4Y2VwdGlvbio+KCZfX2V4KTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0V4PgorICAgIHN0cnVjdCBfX2dldF9uZXN0ZWRfaGVscGVyPF9FeCo+CisgICAgeworICAgICAgc3RhdGljIGNvbnN0IG5lc3RlZF9leGNlcHRpb24qCisgICAgICBfU19nZXQoY29uc3QgX0V4KiBfX2V4KQorICAgICAgeyByZXR1cm4gZHluYW1pY19jYXN0PGNvbnN0IG5lc3RlZF9leGNlcHRpb24qPihfX2V4KTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0V4PgorICAgIGlubGluZSBjb25zdCBuZXN0ZWRfZXhjZXB0aW9uKgorICAgIF9fZ2V0X25lc3RlZF9leGNlcHRpb24oY29uc3QgX0V4JiBfX2V4KQorICAgIHsgcmV0dXJuIF9fZ2V0X25lc3RlZF9oZWxwZXI8X0V4Pjo6X1NfZ2V0KF9fZXgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0V4PgorICAgIHZvaWQKKyAgICBfX3Rocm93X3dpdGhfbmVzdGVkKF9FeCYmLCBjb25zdCBuZXN0ZWRfZXhjZXB0aW9uKiA9IDApCisgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9FeD4KKyAgICB2b2lkCisgICAgX190aHJvd193aXRoX25lc3RlZChfRXgmJiwgLi4uKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CisKKyAgLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkLCBidXQgaXMgbmVlZGVkIHRvIGF2b2lkIGEgd2FybmluZworICAvLyBhYm91dCBhbWJpZ3VvdXMgYmFzZSBjbGFzc2VzIHdoZW4gaW5zdGFudGlhdGluZyB0aHJvd193aXRoX25lc3RlZDxfRXg+KCkKKyAgLy8gd2l0aCBhIHR5cGUgdGhhdCBoYXMgYW4gYWNjZXNzaWJsZSBuZXN0ZWRfZXhjZXB0aW9uIGJhc2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9FeD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdGhyb3dfd2l0aF9uZXN0ZWQoX0V4JiYgX19leCwgY29uc3QgbmVzdGVkX2V4Y2VwdGlvbiogPSAwKQorICAgIHsgdGhyb3cgX19leDsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9FeD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdGhyb3dfd2l0aF9uZXN0ZWQoX0V4JiYgX19leCwgLi4uKQorICAgIHsgdGhyb3cgX05lc3RlZF9leGNlcHRpb248X0V4PihzdGF0aWNfY2FzdDxfRXgmJj4oX19leCkpOyB9CisgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRXg+CisgICAgdm9pZAorICAgIHRocm93X3dpdGhfbmVzdGVkKF9FeCBfX2V4KSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CisKKyAgLy8vIElmIEBwIF9fZXggaXMgZGVyaXZlZCBmcm9tIG5lc3RlZF9leGNlcHRpb24sIEBwIF9fZXguIAorICAvLy8gRWxzZSwgYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBvYmplY3QgZGVyaXZlZCBmcm9tIGJvdGguCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9FeD4KKyAgICBpbmxpbmUgdm9pZAorICAgIHRocm93X3dpdGhfbmVzdGVkKF9FeCBfX2V4KQorICAgIHsKKyAgICAgIGlmIChfX2dldF9uZXN0ZWRfZXhjZXB0aW9uKF9fZXgpKQorICAgICAgICB0aHJvdyBfX2V4OworICAgICAgX190aHJvd193aXRoX25lc3RlZChzdGF0aWNfY2FzdDxfRXgmJj4oX19leCksICZfX2V4KTsKKyAgICB9CisKKyAgLy8vIElmIEBwIF9fZXggaXMgZGVyaXZlZCBmcm9tIG5lc3RlZF9leGNlcHRpb24sIEBwIF9fZXgucmV0aHJvd19uZXN0ZWQoKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0V4PgorICAgIGlubGluZSB2b2lkCisgICAgcmV0aHJvd19pZl9uZXN0ZWQoY29uc3QgX0V4JiBfX2V4KQorICAgIHsKKyAgICAgIGlmIChjb25zdCBuZXN0ZWRfZXhjZXB0aW9uKiBfX25lc3RlZCA9IF9fZ2V0X25lc3RlZF9leGNlcHRpb24oX19leCkpCisgICAgICAgIF9fbmVzdGVkLT5yZXRocm93X25lc3RlZCgpOworICAgIH0KKworICAvLy8gT3ZlcmxvYWQsIFNlZSBOMjYxOQorICBpbmxpbmUgdm9pZAorICByZXRocm93X2lmX25lc3RlZChjb25zdCBuZXN0ZWRfZXhjZXB0aW9uJiBfX2V4KQorICB7IF9fZXgucmV0aHJvd19uZXN0ZWQoKTsgfQorCisgIC8vIEB9IGdyb3VwIGV4Y2VwdGlvbnMKK30gLy8gbmFtZXNwYWNlIHN0ZAorCit9IC8vIGV4dGVybiAiQysrIgorCisjZW5kaWYgLy8gX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKworI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwb3AKKworI2VuZGlmIC8vIF9HTElCQ1hYX05FU1RFRF9FWENFUFRJT05fSApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9uZXcgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL25ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjUxNTMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9uZXcKQEAgLTAsMCArMSwxMTQgQEAKKy8vIFRoZSAtKi0gQysrIC0qLSBkeW5hbWljIG1lbW9yeSBtYW5hZ2VtZW50IGhlYWRlci4KKworLy8gQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorLy8gMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisKKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKy8vCisvLyBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorLy8gCisvLyBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLy8gCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgbmV3CisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqCisgKiAgVGhlIGhlYWRlciBAYyBuZXcgZGVmaW5lcyBzZXZlcmFsIGZ1bmN0aW9ucyB0byBtYW5hZ2UgZHluYW1pYyBtZW1vcnkgYW5kCisgKiAgaGFuZGxpbmcgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3JzOyBzZWUKKyAqICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9saWJzdGRjKysvMThfc3VwcG9ydC9ob3d0by5odG1sIzQgZm9yIG1vcmUuCisgKi8KKworI2lmbmRlZiBfTkVXCisjZGVmaW5lIF9ORVcKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxleGNlcHRpb24+CisKKyNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcHVzaChkZWZhdWx0KQorCitleHRlcm4gIkMrKyIgeworCituYW1lc3BhY2Ugc3RkIAoreworICAvKioKKyAgICogIEBicmllZiAgRXhjZXB0aW9uIHBvc3NpYmx5IHRocm93biBieSBAYyBuZXcuCisgICAqICBAaW5ncm91cCBleGNlcHRpb25zCisgICAqCisgICAqICBAYyBiYWRfYWxsb2MgKG9yIGNsYXNzZXMgZGVyaXZlZCBmcm9tIGl0KSBpcyB1c2VkIHRvIHJlcG9ydCBhbGxvY2F0aW9uCisgICAqICBlcnJvcnMgZnJvbSB0aGUgdGhyb3dpbmcgZm9ybXMgb2YgQGMgbmV3LiAgKi8KKyAgY2xhc3MgYmFkX2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbiAKKyAgeworICBwdWJsaWM6CisgICAgYmFkX2FsbG9jKCkgdGhyb3coKSB7IH0KKworICAgIC8vIFRoaXMgZGVjbGFyYXRpb24gaXMgbm90IHVzZWxlc3M6CisgICAgLy8gaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjLTMuMC4yL2djY182Lmh0bWwjU0VDMTE4CisgICAgdmlydHVhbCB+YmFkX2FsbG9jKCkgdGhyb3coKTsKKworICAgIC8vIFNlZSBjb21tZW50IGluIGVoX2V4Y2VwdGlvbi5jYy4KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCB0aHJvdygpOworICB9OworCisgIHN0cnVjdCBub3Rocm93X3QgeyB9OworCisgIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKKworICAvKiogSWYgeW91IHdyaXRlIHlvdXIgb3duIGVycm9yIGhhbmRsZXIgdG8gYmUgY2FsbGVkIGJ5IEBjIG5ldywgaXQgbXVzdAorICAgKiAgYmUgb2YgdGhpcyB0eXBlLiAgKi8KKyAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CisKKyAgLy8vIFRha2VzIGEgcmVwbGFjZW1lbnQgaGFuZGxlciBhcyB0aGUgYXJndW1lbnQsIHJldHVybnMgdGhlCisgIC8vLyBwcmV2aW91cyBoYW5kbGVyLgorICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIobmV3X2hhbmRsZXIpIHRocm93KCk7Cit9IC8vIG5hbWVzcGFjZSBzdGQKKworLy9AeworLyoqIFRoZXNlIGFyZSByZXBsYWNlYWJsZSBzaWduYXR1cmVzOgorICogIC0gbm9ybWFsIHNpbmdsZSBuZXcgYW5kIGRlbGV0ZSAobm8gYXJndW1lbnRzLCB0aHJvdyBAYyBiYWRfYWxsb2Mgb24gZXJyb3IpCisgKiAgLSBub3JtYWwgYXJyYXkgbmV3IGFuZCBkZWxldGUgKHNhbWUpCisgKiAgLSBAYyBub3Rocm93IHNpbmdsZSBuZXcgYW5kIGRlbGV0ZSAodGFrZSBhIEBjIG5vdGhyb3cgYXJndW1lbnQsIHJldHVybgorICogICAgQGMgTlVMTCBvbiBlcnJvcikKKyAqICAtIEBjIG5vdGhyb3cgYXJyYXkgbmV3IGFuZCBkZWxldGUgKHNhbWUpCisgKgorICogIFBsYWNlbWVudCBuZXcgYW5kIGRlbGV0ZSBzaWduYXR1cmVzICh0YWtlIGEgbWVtb3J5IGFkZHJlc3MgYXJndW1lbnQsCisgKiAgZG9lcyBub3RoaW5nKSBtYXkgbm90IGJlIHJlcGxhY2VkIGJ5IGEgdXNlcidzIHByb2dyYW0uCisqLwordm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwordm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7Cit2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKikgdGhyb3coKTsKK3ZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCopIHRocm93KCk7Cit2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKK3ZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7Cit2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwordm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOworCisvLyBEZWZhdWx0IHBsYWNlbWVudCB2ZXJzaW9ucyBvZiBvcGVyYXRvciBuZXcuCitpbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCB2b2lkKiBfX3ApIHRocm93KCkgeyByZXR1cm4gX19wOyB9CitpbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7IHJldHVybiBfX3A7IH0KKworLy8gRGVmYXVsdCBwbGFjZW1lbnQgdmVyc2lvbnMgb2Ygb3BlcmF0b3IgZGVsZXRlLgoraW5saW5lIHZvaWQgIG9wZXJhdG9yIGRlbGV0ZSAgKHZvaWQqLCB2b2lkKikgdGhyb3coKSB7IH0KK2lubGluZSB2b2lkICBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiwgdm9pZCopIHRocm93KCkgeyB9CisvL0B9Cit9IC8vIGV4dGVybiAiQysrIgorCisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHBvcAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvbnVtZXJpYyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvbnVtZXJpYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWNlZGY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9udW1lcmljCkBAIC0wLDAgKzEsNzcgQEAKKy8vIDxudW1lcmljPiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5NworICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGluY2x1ZGUvbnVtZXJpYworICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9OVU1FUklDCisjZGVmaW5lIF9HTElCQ1hYX05VTUVSSUMgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9udW1lcmljLmg+CisKKyNpZmRlZiBfR0xJQkNYWF9QQVJBTExFTAorIyBpbmNsdWRlIDxwYXJhbGxlbC9udW1lcmljPgorI2VuZGlmCisKKy8qKgorICogQGRlZmdyb3VwIG51bWVyaWNzIE51bWVyaWNzCisgKgorICogQ29tcG9uZW50cyBmb3IgcGVyZm9ybWluZyBudW1lcmljIG9wZXJhdGlvbnMuIEluY2x1ZGVzIHN1cHBvcnQgZm9yCisgKiBmb3IgY29tcGxleCBudW1iZXIgdHlwZXMsIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiwgbnVtZXJpYworICogKG4tYXQtYS10aW1lKSBhcnJheXMsIGdlbmVyYWxpemVkIG51bWVyaWMgYWxnb3JpdGhtcywgYW5kIHNwZWNpYWwKKyAqIG1hdGggZnVuY3Rpb25zLgorICovCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9OVU1FUklDICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL29zdHJlYW0gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL29zdHJlYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc0MjZmNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvb3N0cmVhbQpAQCAtMCwwICsxLDU4OSBAQAorLy8gT3V0cHV0IHN0cmVhbXMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LAorLy8gMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIG9zdHJlYW0KKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyNy42LjIgIE91dHB1dCBzdHJlYW1zCisvLworCisjaWZuZGVmIF9HTElCQ1hYX09TVFJFQU0KKyNkZWZpbmUgX0dMSUJDWFhfT1NUUkVBTSAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGlvcz4KKyNpbmNsdWRlIDxiaXRzL29zdHJlYW1faW5zZXJ0Lmg+CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgLy8gWzI3LjYuMi4xXSBUZW1wbGF0ZSBjbGFzcyBiYXNpY19vc3RyZWFtCisgIC8qKgorICAgKiAgQGJyaWVmICBDb250cm9sbGluZyBvdXRwdXQuCisgICAqICBAaW5ncm91cCBpbworICAgKgorICAgKiAgVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgYWxsIG91dHB1dCBzdHJlYW1zLiAgSXQgcHJvdmlkZXMgdGV4dAorICAgKiAgZm9ybWF0dGluZyBvZiBhbGwgYnVpbHRpbiB0eXBlcywgYW5kIGNvbW11bmljYXRlcyB3aXRoIGFueSBjbGFzcworICAgKiAgZGVyaXZlZCBmcm9tIGJhc2ljX3N0cmVhbWJ1ZiB0byBkbyB0aGUgYWN0dWFsIG91dHB1dC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGNsYXNzIGJhc2ljX29zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlcyAoaW5oZXJpdGVkIGZyb20gYmFzaWNfaW9zICgyNy40LjQpKToKKyAgICAgIHR5cGVkZWYgX0NoYXJUICAgICAgICAgICAgICAgICAgICAgCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIAkJaW50X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIAkJcG9zX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIAkJb2ZmX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcmFpdHMgICAgICAgICAgICAgICAgICAgIAkJdHJhaXRzX3R5cGU7CisgICAgICAKKyAgICAgIC8vIE5vbi1zdGFuZGFyZCBUeXBlczoKKyAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gCQlfX3N0cmVhbWJ1Zl90eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPgkJX19pb3NfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CQlfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgbnVtX3B1dDxfQ2hhclQsIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiA+ICAgICAgICAKKyAgICAgIAkJCQkJCQlfX251bV9wdXRfdHlwZTsKKyAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiAgICAgICAgICAgCQkJX19jdHlwZV90eXBlOworCisgICAgICAvLyBbMjcuNi4yLjJdIGNvbnN0cnVjdG9yL2Rlc3RydWN0b3IKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQmFzZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBjdG9yIGlzIGFsbW9zdCBuZXZlciBjYWxsZWQgYnkgdGhlIHVzZXIgZGlyZWN0bHksIHJhdGhlciBmcm9tCisgICAgICAgKiAgZGVyaXZlZCBjbGFzc2VzJyBpbml0aWFsaXphdGlvbiBsaXN0cywgd2hpY2ggcGFzcyBhIHBvaW50ZXIgdG8KKyAgICAgICAqICB0aGVpciBvd24gc3RyZWFtIGJ1ZmZlci4KKyAgICAgICovCisgICAgICBleHBsaWNpdCAKKyAgICAgIGJhc2ljX29zdHJlYW0oX19zdHJlYW1idWZfdHlwZSogX19zYikKKyAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEJhc2UgZGVzdHJ1Y3Rvci4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBkb2VzIHZlcnkgbGl0dGxlIGFwYXJ0IGZyb20gcHJvdmlkaW5nIGEgdmlydHVhbCBiYXNlIGR0b3IuCisgICAgICAqLworICAgICAgdmlydHVhbCAKKyAgICAgIH5iYXNpY19vc3RyZWFtKCkgeyB9CisKKyAgICAgIC8vIFsyNy42LjIuM10gcHJlZml4L3N1ZmZpeAorICAgICAgY2xhc3Mgc2VudHJ5OworICAgICAgZnJpZW5kIGNsYXNzIHNlbnRyeTsKKyAgICAgIAorICAgICAgLy8gWzI3LjYuMi41XSBmb3JtYXR0ZWQgb3V0cHV0CisgICAgICAvLyBbMjcuNi4yLjUuM10gIGJhc2ljX29zdHJlYW06Om9wZXJhdG9yPDwKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW50ZXJmYWNlIGZvciBtYW5pcHVsYXRvcnMuCisgICAgICAgKgorICAgICAgICogIE1hbmlwdWxhdG9ycyBzdWNoIGFzIEBjIHN0ZDo6ZW5kbCBhbmQgQGMgc3RkOjpoZXggdXNlIHRoZXNlCisgICAgICAgKiAgZnVuY3Rpb25zIGluIGNvbnN0cnVjdHMgbGlrZSAic3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbCIuICBGb3IgbW9yZQorICAgICAgICogIGluZm9ybWF0aW9uLCBzZWUgdGhlIGlvbWFuaXAgaGVhZGVyLgorICAgICAgKi8KKyAgICAgIF9fb3N0cmVhbV90eXBlJgorICAgICAgb3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpfX3BmKShfX29zdHJlYW1fdHlwZSYpKQorICAgICAgeworCS8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkvLyBEUiA2MC4gV2hhdCBpcyBhIGZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbj8KKwkvLyBUaGUgaW5zZXJ0ZXJzIGZvciBtYW5pcHVsYXRvcnMgYXJlICpub3QqIGZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb25zLgorCXJldHVybiBfX3BmKCp0aGlzKTsKKyAgICAgIH0KKworICAgICAgX19vc3RyZWFtX3R5cGUmCisgICAgICBvcGVyYXRvcjw8KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKQorICAgICAgeworCS8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkvLyBEUiA2MC4gV2hhdCBpcyBhIGZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbj8KKwkvLyBUaGUgaW5zZXJ0ZXJzIGZvciBtYW5pcHVsYXRvcnMgYXJlICpub3QqIGZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb25zLgorCV9fcGYoKnRoaXMpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX19vc3RyZWFtX3R5cGUmCisgICAgICBvcGVyYXRvcjw8KGlvc19iYXNlJiAoKl9fcGYpIChpb3NfYmFzZSYpKQorICAgICAgeworCS8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkvLyBEUiA2MC4gV2hhdCBpcyBhIGZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbj8KKwkvLyBUaGUgaW5zZXJ0ZXJzIGZvciBtYW5pcHVsYXRvcnMgYXJlICpub3QqIGZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb25zLgorCV9fcGYoKnRoaXMpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyAgICAgIC8vQH0KKworICAgICAgLy8gWzI3LjYuMi41LjJdIGFyaXRobWV0aWMgaW5zZXJ0ZXJzCisgICAgICAvKioKKyAgICAgICAqICBAbmFtZSBBcml0aG1ldGljIEluc2VydGVycworICAgICAgICoKKyAgICAgICAqICBBbGwgdGhlIEBjIG9wZXJhdG9yPDwgZnVuY3Rpb25zIChha2EgPGVtPmZvcm1hdHRlZCBvdXRwdXQKKyAgICAgICAqICBmdW5jdGlvbnM8L2VtPikgaGF2ZSBzb21lIGNvbW1vbiBiZWhhdmlvci4gIEVhY2ggc3RhcnRzIGJ5CisgICAgICAgKiAgY29uc3RydWN0aW5nIGEgdGVtcG9yYXJ5IG9iamVjdCBvZiB0eXBlIHN0ZDo6YmFzaWNfb3N0cmVhbTo6c2VudHJ5LgorICAgICAgICogIFRoaXMgY2FuIGhhdmUgc2V2ZXJhbCBlZmZlY3RzLCBjb25jbHVkaW5nIHdpdGggdGhlIHNldHRpbmcgb2YgYQorICAgICAgICogIHN0YXR1cyBmbGFnOyBzZWUgdGhlIHNlbnRyeSBkb2N1bWVudGF0aW9uIGZvciBtb3JlLgorICAgICAgICoKKyAgICAgICAqICBJZiB0aGUgc2VudHJ5IHN0YXR1cyBpcyBnb29kLCB0aGUgZnVuY3Rpb24gdHJpZXMgdG8gZ2VuZXJhdGUKKyAgICAgICAqICB3aGF0ZXZlciBkYXRhIGlzIGFwcHJvcHJpYXRlIGZvciB0aGUgdHlwZSBvZiB0aGUgYXJndW1lbnQuCisgICAgICAgKgorICAgICAgICogIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZHVyaW5nIGluc2VydGlvbiwgaW9zX2Jhc2U6OmJhZGJpdAorICAgICAgICogIHdpbGwgYmUgdHVybmVkIG9uIGluIHRoZSBzdHJlYW0ncyBlcnJvciBzdGF0ZSB3aXRob3V0IGNhdXNpbmcgYW4KKyAgICAgICAqICBpb3NfYmFzZTo6ZmFpbHVyZSB0byBiZSB0aHJvd24uICBUaGUgb3JpZ2luYWwgZXhjZXB0aW9uIHdpbGwgdGhlbgorICAgICAgICogIGJlIHJldGhyb3duLgorICAgICAgKi8KKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQmFzaWMgYXJpdGhtZXRpYyBpbnNlcnRlcnMKKyAgICAgICAqICBAcGFyYW0gIEEgdmFyaWFibGUgb2YgYnVpbHRpbiB0eXBlLgorICAgICAgICogIEByZXR1cm4gIEBjICp0aGlzIGlmIHN1Y2Nlc3NmdWwKKyAgICAgICAqCisgICAgICAgKiAgVGhlc2UgZnVuY3Rpb25zIHVzZSB0aGUgc3RyZWFtJ3MgY3VycmVudCBsb2NhbGUgKHNwZWNpZmljYWxseSwgdGhlCisgICAgICAgKiAgQGMgbnVtX2dldCBmYWNldCkgdG8gcGVyZm9ybSBudW1lcmljIGZvcm1hdHRpbmcuCisgICAgICAqLworICAgICAgX19vc3RyZWFtX3R5cGUmIAorICAgICAgb3BlcmF0b3I8PChsb25nIF9fbikKKyAgICAgIHsgcmV0dXJuIF9NX2luc2VydChfX24pOyB9CisgICAgICAKKyAgICAgIF9fb3N0cmVhbV90eXBlJiAKKyAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24pCisgICAgICB7IHJldHVybiBfTV9pbnNlcnQoX19uKTsgfQkKKworICAgICAgX19vc3RyZWFtX3R5cGUmIAorICAgICAgb3BlcmF0b3I8PChib29sIF9fbikKKyAgICAgIHsgcmV0dXJuIF9NX2luc2VydChfX24pOyB9CisKKyAgICAgIF9fb3N0cmVhbV90eXBlJiAKKyAgICAgIG9wZXJhdG9yPDwoc2hvcnQgX19uKTsKKworICAgICAgX19vc3RyZWFtX3R5cGUmIAorICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBzaG9ydCBfX24pCisgICAgICB7CisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDExNy4gYmFzaWNfb3N0cmVhbSB1c2VzIG5vbmV4aXN0ZW50IG51bV9wdXQgbWVtYmVyIGZ1bmN0aW9ucy4KKwlyZXR1cm4gX01faW5zZXJ0KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KF9fbikpOworICAgICAgfQorCisgICAgICBfX29zdHJlYW1fdHlwZSYgCisgICAgICBvcGVyYXRvcjw8KGludCBfX24pOworCisgICAgICBfX29zdHJlYW1fdHlwZSYgCisgICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGludCBfX24pCisgICAgICB7CisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDExNy4gYmFzaWNfb3N0cmVhbSB1c2VzIG5vbmV4aXN0ZW50IG51bV9wdXQgbWVtYmVyIGZ1bmN0aW9ucy4KKwlyZXR1cm4gX01faW5zZXJ0KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KF9fbikpOworICAgICAgfQorCisjaWZkZWYgX0dMSUJDWFhfVVNFX0xPTkdfTE9ORworICAgICAgX19vc3RyZWFtX3R5cGUmIAorICAgICAgb3BlcmF0b3I8PChsb25nIGxvbmcgX19uKQorICAgICAgeyByZXR1cm4gX01faW5zZXJ0KF9fbik7IH0KKworICAgICAgX19vc3RyZWFtX3R5cGUmIAorICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcgX19uKQorICAgICAgeyByZXR1cm4gX01faW5zZXJ0KF9fbik7IH0JCisjZW5kaWYKKworICAgICAgX19vc3RyZWFtX3R5cGUmIAorICAgICAgb3BlcmF0b3I8PChkb3VibGUgX19mKQorICAgICAgeyByZXR1cm4gX01faW5zZXJ0KF9fZik7IH0KKworICAgICAgX19vc3RyZWFtX3R5cGUmIAorICAgICAgb3BlcmF0b3I8PChmbG9hdCBfX2YpCisgICAgICB7CisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDExNy4gYmFzaWNfb3N0cmVhbSB1c2VzIG5vbmV4aXN0ZW50IG51bV9wdXQgbWVtYmVyIGZ1bmN0aW9ucy4KKwlyZXR1cm4gX01faW5zZXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oX19mKSk7CisgICAgICB9CisKKyAgICAgIF9fb3N0cmVhbV90eXBlJiAKKyAgICAgIG9wZXJhdG9yPDwobG9uZyBkb3VibGUgX19mKQorICAgICAgeyByZXR1cm4gX01faW5zZXJ0KF9fZik7IH0KKworICAgICAgX19vc3RyZWFtX3R5cGUmIAorICAgICAgb3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX3ApCisgICAgICB7IHJldHVybiBfTV9pbnNlcnQoX19wKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEV4dHJhY3RpbmcgZnJvbSBhbm90aGVyIHN0cmVhbWJ1Zi4KKyAgICAgICAqICBAcGFyYW0gIHNiICBBIHBvaW50ZXIgdG8gYSBzdHJlYW1idWYKKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBiZWhhdmVzIGxpa2Ugb25lIG9mIHRoZSBiYXNpYyBhcml0aG1ldGljIGV4dHJhY3RvcnMsCisgICAgICAgKiAgaW4gdGhhdCBpdCBhbHNvIGNvbnN0cnVjdHMgYSBzZW50cnkgb2JqZWN0IGFuZCBoYXMgdGhlIHNhbWUgZXJyb3IKKyAgICAgICAqICBoYW5kbGluZyBiZWhhdmlvci4KKyAgICAgICAqCisgICAgICAgKiAgSWYgQGEgc2IgaXMgTlVMTCwgdGhlIHN0cmVhbSB3aWxsIHNldCBmYWlsYml0IGluIGl0cyBlcnJvciBzdGF0ZS4KKyAgICAgICAqCisgICAgICAgKiAgQ2hhcmFjdGVycyBhcmUgZXh0cmFjdGVkIGZyb20gQGEgc2IgYW5kIGluc2VydGVkIGludG8gQGMgKnRoaXMKKyAgICAgICAqICB1bnRpbCBvbmUgb2YgdGhlIGZvbGxvd2luZyBvY2N1cnM6CisgICAgICAgKgorICAgICAgICogIC0gdGhlIGlucHV0IHN0cmVhbSByZWFjaGVzIGVuZC1vZi1maWxlLAorICAgICAgICogIC0gaW5zZXJ0aW9uIGludG8gdGhlIG91dHB1dCBzZXF1ZW5jZSBmYWlscyAoaW4gdGhpcyBjYXNlLCB0aGUKKyAgICAgICAqICAgIGNoYXJhY3RlciB0aGF0IHdvdWxkIGhhdmUgYmVlbiBpbnNlcnRlZCBpcyBub3QgZXh0cmFjdGVkKSwgb3IKKyAgICAgICAqICAtIGFuIGV4Y2VwdGlvbiBvY2N1cnMgd2hpbGUgZ2V0dGluZyBhIGNoYXJhY3RlciBmcm9tIEBhIHNiLCB3aGljaAorICAgICAgICogICAgc2V0cyBmYWlsYml0IGluIHRoZSBlcnJvciBzdGF0ZQorICAgICAgICoKKyAgICAgICAqICBJZiB0aGUgZnVuY3Rpb24gaW5zZXJ0cyBubyBjaGFyYWN0ZXJzLCBmYWlsYml0IGlzIHNldC4KKyAgICAgICovCisgICAgICBfX29zdHJlYW1fdHlwZSYgCisgICAgICBvcGVyYXRvcjw8KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpOworICAgICAgLy9AfQorCisgICAgICAvLyBbMjcuNi4yLjZdIHVuZm9ybWF0dGVkIG91dHB1dCBmdW5jdGlvbnMKKyAgICAgIC8qKgorICAgICAgICogIEBuYW1lIFVuZm9ybWF0dGVkIE91dHB1dCBGdW5jdGlvbnMKKyAgICAgICAqCisgICAgICAgKiAgQWxsIHRoZSB1bmZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb25zIGhhdmUgc29tZSBjb21tb24gYmVoYXZpb3IuCisgICAgICAgKiAgRWFjaCBzdGFydHMgYnkgY29uc3RydWN0aW5nIGEgdGVtcG9yYXJ5IG9iamVjdCBvZiB0eXBlCisgICAgICAgKiAgc3RkOjpiYXNpY19vc3RyZWFtOjpzZW50cnkuICBUaGlzIGhhcyBzZXZlcmFsIGVmZmVjdHMsIGNvbmNsdWRpbmcKKyAgICAgICAqICB3aXRoIHRoZSBzZXR0aW5nIG9mIGEgc3RhdHVzIGZsYWc7IHNlZSB0aGUgc2VudHJ5IGRvY3VtZW50YXRpb24KKyAgICAgICAqICBmb3IgbW9yZS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgdGhlIHNlbnRyeSBzdGF0dXMgaXMgZ29vZCwgdGhlIGZ1bmN0aW9uIHRyaWVzIHRvIGdlbmVyYXRlCisgICAgICAgKiAgd2hhdGV2ZXIgZGF0YSBpcyBhcHByb3ByaWF0ZSBmb3IgdGhlIHR5cGUgb2YgdGhlIGFyZ3VtZW50LgorICAgICAgICoKKyAgICAgICAqICBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGR1cmluZyBpbnNlcnRpb24sIGlvc19iYXNlOjpiYWRiaXQKKyAgICAgICAqICB3aWxsIGJlIHR1cm5lZCBvbiBpbiB0aGUgc3RyZWFtJ3MgZXJyb3Igc3RhdGUuICBJZiBiYWRiaXQgaXMgb24gaW4KKyAgICAgICAqICB0aGUgc3RyZWFtJ3MgZXhjZXB0aW9ucyBtYXNrLCB0aGUgZXhjZXB0aW9uIHdpbGwgYmUgcmV0aHJvd24KKyAgICAgICAqICB3aXRob3V0IGNvbXBsZXRpbmcgaXRzIGFjdGlvbnMuCisgICAgICAqLworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTaW1wbGUgaW5zZXJ0aW9uLgorICAgICAgICogIEBwYXJhbSAgYyAgVGhlIGNoYXJhY3RlciB0byBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgKnRoaXMKKyAgICAgICAqCisgICAgICAgKiAgVHJpZXMgdG8gaW5zZXJ0IEBhIGMuCisgICAgICAgKgorICAgICAgICogIEBub3RlICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBvdmVybG9hZGVkIG9uIHNpZ25lZCBjaGFyIGFuZAorICAgICAgICogICAgICAgICB1bnNpZ25lZCBjaGFyLgorICAgICAgKi8KKyAgICAgIF9fb3N0cmVhbV90eXBlJiAKKyAgICAgIHB1dChjaGFyX3R5cGUgX19jKTsKKworICAgICAgLy8gQ29yZSB3cml0ZSBmdW5jdGlvbmFsaXR5LCB3aXRob3V0IHNlbnRyeS4KKyAgICAgIHZvaWQKKyAgICAgIF9NX3dyaXRlKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKKyAgICAgIHsKKwljb25zdCBzdHJlYW1zaXplIF9fcHV0ID0gdGhpcy0+cmRidWYoKS0+c3B1dG4oX19zLCBfX24pOworCWlmIChfX3B1dCAhPSBfX24pCisJICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDaGFyYWN0ZXIgc3RyaW5nIGluc2VydGlvbi4KKyAgICAgICAqICBAcGFyYW0gIHMgIFRoZSBhcnJheSB0byBpbnNlcnQuCisgICAgICAgKiAgQHBhcmFtICBuICBNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGluc2VydC4KKyAgICAgICAqICBAcmV0dXJuICAqdGhpcworICAgICAgICoKKyAgICAgICAqICBDaGFyYWN0ZXJzIGFyZSBjb3BpZWQgZnJvbSBAYSBzIGFuZCBpbnNlcnRlZCBpbnRvIHRoZSBzdHJlYW0gdW50aWwKKyAgICAgICAqICBvbmUgb2YgdGhlIGZvbGxvd2luZyBoYXBwZW5zOgorICAgICAgICoKKyAgICAgICAqICAtIEBhIG4gY2hhcmFjdGVycyBhcmUgaW5zZXJ0ZWQKKyAgICAgICAqICAtIGluc2VydGluZyBpbnRvIHRoZSBvdXRwdXQgc2VxdWVuY2UgZmFpbHMgKGluIHRoaXMgY2FzZSwgYmFkYml0CisgICAgICAgKiAgICB3aWxsIGJlIHNldCBpbiB0aGUgc3RyZWFtJ3MgZXJyb3Igc3RhdGUpCisgICAgICAgKgorICAgICAgICogIEBub3RlICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBvdmVybG9hZGVkIG9uIHNpZ25lZCBjaGFyIGFuZAorICAgICAgICogICAgICAgICB1bnNpZ25lZCBjaGFyLgorICAgICAgKi8KKyAgICAgIF9fb3N0cmVhbV90eXBlJiAKKyAgICAgIHdyaXRlKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CisgICAgICAvL0B9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU3luY2hyb25pemluZyB0aGUgc3RyZWFtIGJ1ZmZlci4KKyAgICAgICAqICBAcmV0dXJuICAqdGhpcworICAgICAgICoKKyAgICAgICAqICBJZiBAYyByZGJ1ZigpIGlzIGEgbnVsbCBwb2ludGVyLCBjaGFuZ2VzIG5vdGhpbmcuCisgICAgICAgKgorICAgICAgICogIE90aGVyd2lzZSwgY2FsbHMgQGMgcmRidWYoKS0+cHVic3luYygpLCBhbmQgaWYgdGhhdCByZXR1cm5zIC0xLAorICAgICAgICogIHNldHMgYmFkYml0LgorICAgICAgKi8KKyAgICAgIF9fb3N0cmVhbV90eXBlJiAKKyAgICAgIGZsdXNoKCk7CisKKyAgICAgIC8vIFsyNy42LjIuNF0gc2VlayBtZW1iZXJzCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEdldHRpbmcgdGhlIGN1cnJlbnQgd3JpdGUgcG9zaXRpb24uCisgICAgICAgKiAgQHJldHVybiAgQSBmaWxlIHBvc2l0aW9uIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiAgSWYgQGMgZmFpbCgpIGlzIG5vdCBmYWxzZSwgcmV0dXJucyBAYyBwb3NfdHlwZSgtMSkgdG8gaW5kaWNhdGUKKyAgICAgICAqICBmYWlsdXJlLiAgT3RoZXJ3aXNlIHJldHVybnMgQGMgcmRidWYoKS0+cHVic2Vla29mZigwLGN1cixvdXQpLgorICAgICAgKi8KKyAgICAgIHBvc190eXBlIAorICAgICAgdGVsbHAoKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDaGFuZ2luZyB0aGUgY3VycmVudCB3cml0ZSBwb3NpdGlvbi4KKyAgICAgICAqICBAcGFyYW0gIHBvcyAgQSBmaWxlIHBvc2l0aW9uIG9iamVjdC4KKyAgICAgICAqICBAcmV0dXJuICAqdGhpcworICAgICAgICoKKyAgICAgICAqICBJZiBAYyBmYWlsKCkgaXMgbm90IHRydWUsIGNhbGxzIEBjIHJkYnVmKCktPnB1YnNlZWtwb3MocG9zKS4gIElmCisgICAgICAgKiAgdGhhdCBmdW5jdGlvbiBmYWlscywgc2V0cyBmYWlsYml0LgorICAgICAgKi8KKyAgICAgIF9fb3N0cmVhbV90eXBlJiAKKyAgICAgIHNlZWtwKHBvc190eXBlKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDaGFuZ2luZyB0aGUgY3VycmVudCB3cml0ZSBwb3NpdGlvbi4KKyAgICAgICAqICBAcGFyYW0gIG9mZiAgQSBmaWxlIG9mZnNldCBvYmplY3QuCisgICAgICAgKiAgQHBhcmFtICBkaXIgIFRoZSBkaXJlY3Rpb24gaW4gd2hpY2ggdG8gc2Vlay4KKyAgICAgICAqICBAcmV0dXJuICAqdGhpcworICAgICAgICoKKyAgICAgICAqICBJZiBAYyBmYWlsKCkgaXMgbm90IHRydWUsIGNhbGxzIEBjIHJkYnVmKCktPnB1YnNlZWtvZmYob2ZmLGRpcikuCisgICAgICAgKiAgSWYgdGhhdCBmdW5jdGlvbiBmYWlscywgc2V0cyBmYWlsYml0LgorICAgICAgKi8KKyAgICAgICBfX29zdHJlYW1fdHlwZSYgCisgICAgICBzZWVrcChvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIpOworICAgICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgYmFzaWNfb3N0cmVhbSgpCisgICAgICB7IHRoaXMtPmluaXQoMCk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KKyAgICAgICAgX19vc3RyZWFtX3R5cGUmCisgICAgICAgIF9NX2luc2VydChfVmFsdWVUIF9fdik7CisgICAgfTsKKworICAvKioKKyAgICogIEBicmllZiAgUGVyZm9ybXMgc2V0dXAgd29yayBmb3Igb3V0cHV0IHN0cmVhbXMuCisgICAqCisgICAqICBPYmplY3RzIG9mIHRoaXMgY2xhc3MgYXJlIGNyZWF0ZWQgYmVmb3JlIGFsbCBvZiB0aGUgc3RhbmRhcmQKKyAgICogIGluc2VydGVycyBhcmUgcnVuLiAgSXQgaXMgcmVzcG9uc2libGUgZm9yIDxlbT5leGNlcHRpb24tc2FmZSBwcmVmaXggYW5kCisgICAqICBzdWZmaXggb3BlcmF0aW9uczwvZW0+LgorICAqLworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGNsYXNzIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5CisgICAgeworICAgICAgLy8gRGF0YSBNZW1iZXJzLgorICAgICAgYm9vbCAJCQkJX01fb2s7CisgICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIAlfTV9vczsKKyAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgVGhlIGNvbnN0cnVjdG9yIHBlcmZvcm1zIHByZXBhcmF0b3J5IHdvcmsuCisgICAgICAgKiAgQHBhcmFtICBvcyAgVGhlIG91dHB1dCBzdHJlYW0gdG8gZ3VhcmQuCisgICAgICAgKgorICAgICAgICogIElmIHRoZSBzdHJlYW0gc3RhdGUgaXMgZ29vZCAoQGEgb3MuZ29vZCgpIGlzIHRydWUpLCB0aGVuIGlmIHRoZQorICAgICAgICogIHN0cmVhbSBpcyB0aWVkIHRvIGFub3RoZXIgb3V0cHV0IHN0cmVhbSwgQGMgaXMudGllKCktPmZsdXNoKCkKKyAgICAgICAqICBpcyBjYWxsZWQgdG8gc3luY2hyb25pemUgdGhlIG91dHB1dCBzZXF1ZW5jZXMuCisgICAgICAgKgorICAgICAgICogIElmIHRoZSBzdHJlYW0gc3RhdGUgaXMgc3RpbGwgZ29vZCwgdGhlbiB0aGUgc2VudHJ5IHN0YXRlIGJlY29tZXMKKyAgICAgICAqICB0cnVlIChAYSBva2F5KS4KKyAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgc2VudHJ5KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcyk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUG9zc2libHkgZmx1c2hlcyB0aGUgc3RyZWFtLgorICAgICAgICoKKyAgICAgICAqICBJZiBAYyBpb3NfYmFzZTo6dW5pdGJ1ZiBpcyBzZXQgaW4gQGMgb3MuZmxhZ3MoKSwgYW5kCisgICAgICAgKiAgQGMgc3RkOjp1bmNhdWdodF9leGNlcHRpb24oKSBpcyB0cnVlLCB0aGUgc2VudHJ5IGRlc3RydWN0b3IgY2FsbHMKKyAgICAgICAqICBAYyBmbHVzaCgpIG9uIHRoZSBvdXRwdXQgc3RyZWFtLgorICAgICAgKi8KKyAgICAgIH5zZW50cnkoKQorICAgICAgeworCS8vIFhYWCBNVAorCWlmIChib29sKF9NX29zLmZsYWdzKCkgJiBpb3NfYmFzZTo6dW5pdGJ1ZikgJiYgIXVuY2F1Z2h0X2V4Y2VwdGlvbigpKQorCSAgeworCSAgICAvLyBDYW4ndCBjYWxsIGZsdXNoIGRpcmVjdGx5IG9yIGVsc2Ugd2lsbCBnZXQgaW50byByZWN1cnNpdmUgbG9jay4KKwkgICAgaWYgKF9NX29zLnJkYnVmKCkgJiYgX01fb3MucmRidWYoKS0+cHVic3luYygpID09IC0xKQorCSAgICAgIF9NX29zLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOworCSAgfQorICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFF1aWNrIHN0YXR1cyBjaGVja2luZy4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgc2VudHJ5IHN0YXRlLgorICAgICAgICoKKyAgICAgICAqICBGb3IgZWFzZSBvZiB1c2UsIHNlbnRyaWVzIG1heSBiZSBjb252ZXJ0ZWQgdG8gYm9vbGVhbnMuICBUaGUKKyAgICAgICAqICByZXR1cm4gdmFsdWUgaXMgdGhhdCBvZiB0aGUgc2VudHJ5IHN0YXRlICh0cnVlID09IG9rYXkpLgorICAgICAgKi8KKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgZXhwbGljaXQKKyNlbmRpZgorICAgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9vazsgfQorICAgIH07CisKKyAgLy8gWzI3LjYuMi41LjRdIGNoYXJhY3RlciBpbnNlcnRpb24gdGVtcGxhdGVzCisgIC8vQHsKKyAgLyoqCisgICAqICBAYnJpZWYgIENoYXJhY3RlciBpbnNlcnRlcnMKKyAgICogIEBwYXJhbSAgb3V0ICBBbiBvdXRwdXQgc3RyZWFtLgorICAgKiAgQHBhcmFtICBjICBBIGNoYXJhY3Rlci4KKyAgICogIEByZXR1cm4gIG91dAorICAgKgorICAgKiAgQmVoYXZlcyBsaWtlIG9uZSBvZiB0aGUgZm9ybWF0dGVkIGFyaXRobWV0aWMgaW5zZXJ0ZXJzIGRlc2NyaWJlZCBpbgorICAgKiAgc3RkOjpiYXNpY19vc3RyZWFtLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCB3aXRoIGdvb2QKKyAgICogIHN0YXR1cywgdGhpcyBmdW5jdGlvbiBpbnNlcnRzIGEgc2luZ2xlIGNoYXJhY3RlciBhbmQgYW55IHJlcXVpcmVkCisgICAqICBwYWRkaW5nIChhcyBkZXRlcm1pbmVkIGJ5IFsyMi4yLjIuMi4yXSkuICBAYyBvdXQud2lkdGgoMCkgaXMgdGhlbgorICAgKiAgY2FsbGVkLgorICAgKgorICAgKiAgSWYgQGEgYyBpcyBvZiB0eXBlIEBjIGNoYXIgYW5kIHRoZSBjaGFyYWN0ZXIgdHlwZSBvZiB0aGUgc3RyZWFtIGlzIG5vdAorICAgKiAgQGMgY2hhciwgdGhlIGNoYXJhY3RlciBpcyB3aWRlbmVkIGJlZm9yZSBpbnNlcnRpb24uCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgX0NoYXJUIF9fYykKKyAgICB7IHJldHVybiBfX29zdHJlYW1faW5zZXJ0KF9fb3V0LCAmX19jLCAxKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpCisgICAgeyByZXR1cm4gKF9fb3V0IDw8IF9fb3V0LndpZGVuKF9fYykpOyB9CisKKyAgLy8gU3BlY2lhbGl6YXRpb24KKyAgdGVtcGxhdGUgPGNsYXNzIF9UcmFpdHM+IAorICAgIGlubGluZSBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKQorICAgIHsgcmV0dXJuIF9fb3N0cmVhbV9pbnNlcnQoX19vdXQsICZfX2MsIDEpOyB9CisKKyAgLy8gU2lnbmVkIGFuZCB1bnNpZ25lZAorICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgorICAgIGlubGluZSBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIHNpZ25lZCBjaGFyIF9fYykKKyAgICB7IHJldHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7IH0KKyAgCisgIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CisgICAgaW5saW5lIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgdW5zaWduZWQgY2hhciBfX2MpCisgICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9CisgIC8vQH0KKyAgCisgIC8vQHsKKyAgLyoqCisgICAqICBAYnJpZWYgIFN0cmluZyBpbnNlcnRlcnMKKyAgICogIEBwYXJhbSAgb3V0ICBBbiBvdXRwdXQgc3RyZWFtLgorICAgKiAgQHBhcmFtICBzICBBIGNoYXJhY3RlciBzdHJpbmcuCisgICAqICBAcmV0dXJuICBvdXQKKyAgICogIEBwcmUgIEBhIHMgbXVzdCBiZSBhIG5vbi1OVUxMIHBvaW50ZXIKKyAgICoKKyAgICogIEJlaGF2ZXMgbGlrZSBvbmUgb2YgdGhlIGZvcm1hdHRlZCBhcml0aG1ldGljIGluc2VydGVycyBkZXNjcmliZWQgaW4KKyAgICogIHN0ZDo6YmFzaWNfb3N0cmVhbS4gIEFmdGVyIGNvbnN0cnVjdGluZyBhIHNlbnRyeSBvYmplY3Qgd2l0aCBnb29kCisgICAqICBzdGF0dXMsIHRoaXMgZnVuY3Rpb24gaW5zZXJ0cyBAYyB0cmFpdHM6Omxlbmd0aChzKSBjaGFyYWN0ZXJzIHN0YXJ0aW5nCisgICAqICBhdCBAYSBzLCB3aWRlbmVkIGlmIG5lY2Vzc2FyeSwgZm9sbG93ZWQgYnkgYW55IHJlcXVpcmVkIHBhZGRpbmcgKGFzCisgICAqICBkZXRlcm1pbmVkIGJ5IFsyMi4yLjIuMi4yXSkuICBAYyBvdXQud2lkdGgoMCkgaXMgdGhlbiBjYWxsZWQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgX0NoYXJUKiBfX3MpCisgICAgeworICAgICAgaWYgKCFfX3MpCisJX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CisgICAgICBlbHNlCisJX19vc3RyZWFtX2luc2VydChfX291dCwgX19zLAorCQkJIHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKSk7CisgICAgICByZXR1cm4gX19vdXQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gJgorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKTsKKworICAvLyBQYXJ0aWFsIHNwZWNpYWxpemF0aW9ucworICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgorICAgIGlubGluZSBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcykKKyAgICB7CisgICAgICBpZiAoIV9fcykKKwlfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKKyAgICAgIGVsc2UKKwlfX29zdHJlYW1faW5zZXJ0KF9fb3V0LCBfX3MsCisJCQkgc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX1RyYWl0czo6bGVuZ3RoKF9fcykpKTsKKyAgICAgIHJldHVybiBfX291dDsKKyAgICB9CisKKyAgLy8gU2lnbmVkIGFuZCB1bnNpZ25lZAorICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgorICAgIGlubGluZSBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHNpZ25lZCBjaGFyKiBfX3MpCisgICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KKyAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiAmCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgdW5zaWduZWQgY2hhciogX19zKQorICAgIHsgcmV0dXJuIChfX291dCA8PCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihfX3MpKTsgfQorICAvL0B9CisKKyAgLy8gWzI3LjYuMi43XSBzdGFuZGFyZCBiYXNpY19vc3RyZWFtIG1hbmlwdWxhdG9ycworICAvKioKKyAgICogIEBicmllZiAgV3JpdGUgYSBuZXdsaW5lIGFuZCBmbHVzaCB0aGUgc3RyZWFtLgorICAgKgorICAgKiAgVGhpcyBtYW5pcHVsYXRvciBpcyBvZnRlbiBtaXN0YWtlbmx5IHVzZWQgd2hlbiBhIHNpbXBsZSBuZXdsaW5lIGlzCisgICAqICBkZXNpcmVkLCBsZWFkaW5nIHRvIHBvb3IgYnVmZmVyaW5nIHBlcmZvcm1hbmNlLiAgU2VlCisgICAqICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9saWJzdGRjKysvbWFudWFsL2JrMDFwdDExY2gyNXMwMi5odG1sCisgICAqICBmb3IgbW9yZSBvbiB0aGlzIHN1YmplY3QuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiAKKyAgICBlbmRsKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKKyAgICB7IHJldHVybiBmbHVzaChfX29zLnB1dChfX29zLndpZGVuKCdcbicpKSk7IH0KKworICAvKioKKyAgICogIEBicmllZiAgV3JpdGUgYSBudWxsIGNoYXJhY3RlciBpbnRvIHRoZSBvdXRwdXQgc2VxdWVuY2UuCisgICAqCisgICAqICA8ZW0+TnVsbCBjaGFyYWN0ZXI8L2VtPiBpcyBAYyBDaGFyVCgpIGJ5IGRlZmluaXRpb24uICBGb3IgQ2hhclQgb2YgQGMgY2hhciwKKyAgICogIHRoaXMgY29ycmVjdGx5IHdyaXRlcyB0aGUgQVNDSUkgQGMgTlVMIGNoYXJhY3RlciBzdHJpbmcgdGVybWluYXRvci4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIAorICAgIGVuZHMoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQorICAgIHsgcmV0dXJuIF9fb3MucHV0KF9DaGFyVCgpKTsgfQorICAKKyAgLyoqCisgICAqICBAYnJpZWYgIEZsdXNoZXMgdGhlIG91dHB1dCBzdHJlYW0uCisgICAqCisgICAqICBUaGlzIG1hbmlwdWxhdG9yIHNpbXBseSBjYWxscyB0aGUgc3RyZWFtJ3MgQGMgZmx1c2goKSBtZW1iZXIgZnVuY3Rpb24uCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiAKKyAgICBmbHVzaChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCisgICAgeyByZXR1cm4gX19vcy5mbHVzaCgpOyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAvLyBbMjcuNy4yLjldIFJ2YWx1ZSBzdHJlYW0gaW5zZXJ0aW9uCisgIC8qKgorICAgKiAgQGJyaWVmICBHZW5lcmljIGluc2VydGVyIGZvciBydmFsdWUgc3RyZWFtCisgICAqICBAcGFyYW0gIG9zICBBbiBpbnB1dCBzdHJlYW0uCisgICAqICBAcGFyYW0gIHggIEEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgYmVpbmcgaW5zZXJ0ZWQuCisgICAqICBAcmV0dXJuICBvcworICAgKgorICAgKiAgVGhpcyBpcyBqdXN0IGEgZm9yd2FyZGluZyBmdW5jdGlvbiB0byBhbGxvdyBpbnNlcnRpb24gdG8KKyAgICogIHJ2YWx1ZSBzdHJlYW1zIHNpbmNlIHRoZXkgd29uJ3QgYmluZCB0byB0aGUgaW5zZXJ0ZXIgZnVuY3Rpb25zCisgICAqICB0aGF0IHRha2UgYW4gbHZhbHVlIHJlZmVyZW5jZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYmIF9fb3MsIGNvbnN0IF9UcCYgX194KQorICAgIHsgcmV0dXJuIChfX29zIDw8IF9feCk7IH0KKyNlbmRpZiAvLyBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisKKyNpZm5kZWYgX0dMSUJDWFhfRVhQT1JUX1RFTVBMQVRFCisjIGluY2x1ZGUgPGJpdHMvb3N0cmVhbS50Y2M+CisjZW5kaWYKKworI2VuZGlmCS8qIF9HTElCQ1hYX09TVFJFQU0gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcHJvZmlsZS9iYXNlLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Byb2ZpbGUvYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlN2JmZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Byb2ZpbGUvYmFzZS5oCkBAIC0wLDAgKzEsNjggQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLy8gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bworLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCisvLyBNQSAwMjExMS0xMzA3LCBVU0EuCisKKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZQorLy8gc29mdHdhcmUgbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcworLy8gaW5zdGFudGlhdGUgdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMKKy8vIGZpbGUsIG9yIHlvdSBjb21waWxlIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvCisvLyBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMgZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlCisvLyByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKy8vIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyIGludmFsaWRhdGUgYW55IG90aGVyCisvLyByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsCisvLyBQdWJsaWMgTGljZW5zZS4KKworLyoqIEBmaWxlIHByb2ZpbGUvYmFzZS5oCisgKiAgQGJyaWVmIFNlcXVlbnRpYWwgaGVscGVyIGZ1bmN0aW9ucy4KKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgcHJvZmlsZSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKy8vIFdyaXR0ZW4gYnkgTGl4aWEgTGl1CisKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9CQVNFX0gKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9CQVNFX0ggMQorCisjaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxwcm9maWxlL2ltcGwvcHJvZmlsZXIuaD4KKworLy8gUHJvZmlsaW5nIG1vZGUgbmFtZXNwYWNlcy4KKworLyoqCisgKiBAbmFtZXNwYWNlIHN0ZDo6X19wcm9maWxlCisgKiBAYnJpZWYgR05VIHByb2ZpbGUgY29kZSwgcmVwbGFjZXMgc3RhbmRhcmQgYmVoYXZpb3Igd2l0aCBwcm9maWxlIGJlaGF2aW9yLgorICovCituYW1lc3BhY2Ugc3RkIAoreyAKKyAgbmFtZXNwYWNlIF9fcHJvZmlsZSB7IH0gCit9CisKKy8qKgorICogQG5hbWVzcGFjZSBfX2dudV9wcm9maWxlCisgKiBAYnJpZWYgR05VIHByb2ZpbGUgY29kZSBmb3IgcHVibGljIHVzZS4KKyAqLworbmFtZXNwYWNlIF9fZ251X3Byb2ZpbGUKK3sKKyAgLy8gSW1wb3J0IGFsbCB0aGUgcHJvZmlsZSB2ZXJzaW9ucyBvZiBjb21wb25lbnRzIGluIG5hbWVzcGFjZSBzdGQuCisgIHVzaW5nIG5hbWVzcGFjZSBzdGQ6Ol9fcHJvZmlsZTsKK30KKworCisjZW5kaWYgLyogX0dMSUJDWFhfUFJPRklMRV9CQVNFX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcHJvZmlsZS9iaXRzZXQgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Byb2ZpbGUvYml0c2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YjgyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Byb2ZpbGUvYml0c2V0CkBAIC0wLDAgKzEsMzcyIEBACisvLyBQcm9maWxpbmcgYml0c2V0IGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcHJvZmlsZS9iaXRzZXQKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgcHJvZmlsZSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9CSVRTRVQKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9CSVRTRVQKKworI2luY2x1ZGUgPGJpdHNldD4KKworbmFtZXNwYWNlIHN0ZAoreworbmFtZXNwYWNlIF9fcHJvZmlsZQoreworICAvLy8gQ2xhc3Mgc3RkOjpiaXRzZXQgd3JhcHBlciB3aXRoIHBlcmZvcm1hbmNlIGluc3RydW1lbnRhdGlvbi4KKyAgdGVtcGxhdGU8c2l6ZV90IF9OYj4KKyAgICBjbGFzcyBiaXRzZXQKKyAgICA6IHB1YmxpYyBfR0xJQkNYWF9TVERfRDo6Yml0c2V0PF9OYj4KKyAgICB7CisgICAgICB0eXBlZGVmIF9HTElCQ1hYX1NURF9EOjpiaXRzZXQ8X05iPiBfQmFzZTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vIGJpdCByZWZlcmVuY2U6CisgICAgICBjbGFzcyByZWZlcmVuY2UKKyAgICAgIDogcHJpdmF0ZSBfQmFzZTo6cmVmZXJlbmNlCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cmVmZXJlbmNlIF9CYXNlX3JlZjsKKworCWZyaWVuZCBjbGFzcyBiaXRzZXQ7CisJcmVmZXJlbmNlKCk7CisKKwlyZWZlcmVuY2UoY29uc3QgX0Jhc2VfcmVmJiBfX2Jhc2UsIGJpdHNldCogX19zZXEpCisJOiBfQmFzZV9yZWYoX19iYXNlKQorCXsgfQorCisgICAgICBwdWJsaWM6CisJcmVmZXJlbmNlKGNvbnN0IHJlZmVyZW5jZSYgX194KQorCTogX0Jhc2VfcmVmKF9feCkKKwl7IH0KKworCXJlZmVyZW5jZSYKKwlvcGVyYXRvcj0oYm9vbCBfX3gpCisJeworCSAgKnN0YXRpY19jYXN0PF9CYXNlX3JlZio+KHRoaXMpID0gX194OworCSAgcmV0dXJuICp0aGlzOworCX0KKworCXJlZmVyZW5jZSYKKwlvcGVyYXRvcj0oY29uc3QgcmVmZXJlbmNlJiBfX3gpCisJeworCSAgKnN0YXRpY19jYXN0PF9CYXNlX3JlZio+KHRoaXMpID0gX194OworCSAgcmV0dXJuICp0aGlzOworCX0KKworCWJvb2wKKwlvcGVyYXRvcn4oKSBjb25zdAorCXsKKwkgIHJldHVybiB+KCpzdGF0aWNfY2FzdDxjb25zdCBfQmFzZV9yZWYqPih0aGlzKSk7CisJfQorCisJb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisJeworCSAgcmV0dXJuICpzdGF0aWNfY2FzdDxjb25zdCBfQmFzZV9yZWYqPih0aGlzKTsKKwl9CisKKwlyZWZlcmVuY2UmCisJZmxpcCgpCisJeworCSAgX0Jhc2VfcmVmOjpmbGlwKCk7CisJICByZXR1cm4gKnRoaXM7CisJfQorICAgICAgfTsKKworICAgICAgLy8gMjMuMy41LjEgY29uc3RydWN0b3JzOgorICAgICAgYml0c2V0KCkgOiBfQmFzZSgpIHsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIGJpdHNldCh1bnNpZ25lZCBsb25nIGxvbmcgX192YWwpCisjZWxzZQorICAgICAgYml0c2V0KHVuc2lnbmVkIGxvbmcgX192YWwpCisjZW5kaWYKKyAgICAgIDogX0Jhc2UoX192YWwpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICAgICAgZXhwbGljaXQKKyAgICAgICAgYml0c2V0KGNvbnN0IHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsCisJICAgICAgIHR5cGVuYW1lIHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCisJICAgICAgIF9fcG9zID0gMCwKKwkgICAgICAgdHlwZW5hbWUgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKKwkgICAgICAgX19uID0gKHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6bnBvcykpCisJOiBfQmFzZShfX3N0ciwgX19wb3MsIF9fbikgeyB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDM5Ni4gd2hhdCBhcmUgY2hhcmFjdGVycyB6ZXJvIGFuZCBvbmUuCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KKwliaXRzZXQoY29uc3Qgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwKKwkgICAgICAgdHlwZW5hbWUgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKKwkgICAgICAgX19wb3MsCisJICAgICAgIHR5cGVuYW1lIHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCisJICAgICAgIF9fbiwKKwkgICAgICAgX0NoYXJUIF9femVybywgX0NoYXJUIF9fb25lID0gX0NoYXJUKCcxJykpCisJOiBfQmFzZShfX3N0ciwgX19wb3MsIF9fbiwgX196ZXJvLCBfX29uZSkgeyB9CisKKyAgICAgIGJpdHNldChjb25zdCBfQmFzZSYgX194KSA6IF9CYXNlKF9feCkgeyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgZXhwbGljaXQKKyAgICAgIGJpdHNldChjb25zdCBjaGFyKiBfX3N0cikgOiBfQmFzZShfX3N0cikgeyB9CisjZW5kaWYKKworICAgICAgLy8gMjMuMy41LjIgYml0c2V0IG9wZXJhdGlvbnM6CisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIG9wZXJhdG9yJj0oY29uc3QgYml0c2V0PF9OYj4mIF9fcmhzKQorICAgICAgeworCV9NX2Jhc2UoKSAmPSBfX3JoczsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgb3BlcmF0b3J8PShjb25zdCBiaXRzZXQ8X05iPiYgX19yaHMpCisgICAgICB7CisJX01fYmFzZSgpIHw9IF9fcmhzOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgYml0c2V0PF9OYj4mCisgICAgICBvcGVyYXRvcl49KGNvbnN0IGJpdHNldDxfTmI+JiBfX3JocykKKyAgICAgIHsKKwlfTV9iYXNlKCkgXj0gX19yaHM7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIG9wZXJhdG9yPDw9KHNpemVfdCBfX3BvcykKKyAgICAgIHsKKwlfTV9iYXNlKCkgPDw9IF9fcG9zOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgYml0c2V0PF9OYj4mCisgICAgICBvcGVyYXRvcj4+PShzaXplX3QgX19wb3MpCisgICAgICB7CisJX01fYmFzZSgpID4+PSBfX3BvczsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgc2V0KCkKKyAgICAgIHsKKwlfQmFzZTo6c2V0KCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAxODYuIGJpdHNldDo6c2V0KCkgc2Vjb25kIHBhcmFtZXRlciBzaG91bGQgYmUgYm9vbAorICAgICAgYml0c2V0PF9OYj4mCisgICAgICBzZXQoc2l6ZV90IF9fcG9zLCBib29sIF9fdmFsID0gdHJ1ZSkKKyAgICAgIHsKKwlfQmFzZTo6c2V0KF9fcG9zLCBfX3ZhbCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIHJlc2V0KCkKKyAgICAgIHsKKwlfQmFzZTo6cmVzZXQoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgcmVzZXQoc2l6ZV90IF9fcG9zKQorICAgICAgeworCV9CYXNlOjpyZXNldChfX3Bvcyk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBiaXRzZXQ8X05iPiBvcGVyYXRvcn4oKSBjb25zdCB7IHJldHVybiBiaXRzZXQofl9NX2Jhc2UoKSk7IH0KKworICAgICAgYml0c2V0PF9OYj4mCisgICAgICBmbGlwKCkKKyAgICAgIHsKKwlfQmFzZTo6ZmxpcCgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgYml0c2V0PF9OYj4mCisgICAgICBmbGlwKHNpemVfdCBfX3BvcykKKyAgICAgIHsKKwlfQmFzZTo6ZmxpcChfX3Bvcyk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvLyBlbGVtZW50IGFjY2VzczoKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDExLiBCaXRzZXQgbWlub3IgcHJvYmxlbXMKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShzaXplX3QgX19wb3MpCisgICAgICB7CisJcmV0dXJuIHJlZmVyZW5jZShfTV9iYXNlKClbX19wb3NdLCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMTEuIEJpdHNldCBtaW5vciBwcm9ibGVtcworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3JbXShzaXplX3QgX19wb3MpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIF9NX2Jhc2UoKVtfX3Bvc107CisgICAgICB9CisKKyAgICAgIHVzaW5nIF9CYXNlOjp0b191bG9uZzsKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdXNpbmcgX0Jhc2U6OnRvX3VsbG9uZzsKKyNlbmRpZgorCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgICAgIHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgorICAgICAgICB0b19zdHJpbmcoKSBjb25zdAorICAgICAgICB7IHJldHVybiBfTV9iYXNlKCkudGVtcGxhdGUgdG9fc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPigpOyB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDM5Ni4gd2hhdCBhcmUgY2hhcmFjdGVycyB6ZXJvIGFuZCBvbmUuCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KKwlzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KKwl0b19zdHJpbmcoX0NoYXJUIF9femVybywgX0NoYXJUIF9fb25lID0gX0NoYXJUKCcxJykpIGNvbnN0CisJeworCSAgcmV0dXJuIF9NX2Jhc2UoKS50ZW1wbGF0ZQorCSAgICB0b19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+KF9femVybywgX19vbmUpOworCX0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNDM0LiBiaXRzZXQ6OnRvX3N0cmluZygpIGhhcmQgdG8gdXNlLgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgICAgICBzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIHN0ZDo6YWxsb2NhdG9yPF9DaGFyVD4gPgorICAgICAgICB0b19zdHJpbmcoKSBjb25zdAorICAgICAgICB7IHJldHVybiB0b19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBzdGQ6OmFsbG9jYXRvcjxfQ2hhclQ+ID4oKTsgfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA4NTMuIHRvX3N0cmluZyBuZWVkcyB1cGRhdGluZyB3aXRoIHplcm8gYW5kIG9uZS4KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KKwlzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIHN0ZDo6YWxsb2NhdG9yPF9DaGFyVD4gPgorCXRvX3N0cmluZyhfQ2hhclQgX196ZXJvLCBfQ2hhclQgX19vbmUgPSBfQ2hhclQoJzEnKSkgY29uc3QKKwl7IHJldHVybiB0b19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLAorCSAgICAgICAgICAgICAgICAgICBzdGQ6OmFsbG9jYXRvcjxfQ2hhclQ+ID4oX196ZXJvLCBfX29uZSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgICAgICBzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIHN0ZDo6Y2hhcl90cmFpdHM8X0NoYXJUPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjphbGxvY2F0b3I8X0NoYXJUPiA+CisgICAgICAgIHRvX3N0cmluZygpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gdG9fc3RyaW5nPF9DaGFyVCwgc3RkOjpjaGFyX3RyYWl0czxfQ2hhclQ+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjphbGxvY2F0b3I8X0NoYXJUPiA+KCk7CisgICAgICAgIH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgorCXN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgc3RkOjpjaGFyX3RyYWl0czxfQ2hhclQ+LAorCSAgICAgICAgICAgICAgICAgIHN0ZDo6YWxsb2NhdG9yPF9DaGFyVD4gPgorCXRvX3N0cmluZyhfQ2hhclQgX196ZXJvLCBfQ2hhclQgX19vbmUgPSBfQ2hhclQoJzEnKSkgY29uc3QKKwl7CisJICByZXR1cm4gdG9fc3RyaW5nPF9DaGFyVCwgc3RkOjpjaGFyX3RyYWl0czxfQ2hhclQ+LAorCSAgICAgICAgICAgICAgICAgICBzdGQ6OmFsbG9jYXRvcjxfQ2hhclQ+ID4oX196ZXJvLCBfX29uZSk7CisJfQorCisgICAgICBzdGQ6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+CisgICAgICB0b19zdHJpbmcoKSBjb25zdAorICAgICAgeworCXJldHVybiB0b19zdHJpbmc8Y2hhcixzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4oKTsKKyAgICAgIH0KKworICAgICAgc3RkOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPgorICAgICAgdG9fc3RyaW5nKGNoYXIgX196ZXJvLCBjaGFyIF9fb25lID0gJzEnKSBjb25zdAorICAgICAgeworCXJldHVybiB0b19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwKKwkgICAgICAgICAgICAgICAgIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4oX196ZXJvLCBfX29uZSk7CisgICAgICB9CisKKyAgICAgIHVzaW5nIF9CYXNlOjpjb3VudDsKKyAgICAgIHVzaW5nIF9CYXNlOjpzaXplOworCisgICAgICBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IGJpdHNldDxfTmI+JiBfX3JocykgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2Jhc2UoKSA9PSBfX3JoczsgfQorCisgICAgICBib29sCisgICAgICBvcGVyYXRvciE9KGNvbnN0IGJpdHNldDxfTmI+JiBfX3JocykgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2Jhc2UoKSAhPSBfX3JoczsgfQorCisgICAgICB1c2luZyBfQmFzZTo6dGVzdDsKKyAgICAgIHVzaW5nIF9CYXNlOjphbGw7CisgICAgICB1c2luZyBfQmFzZTo6YW55OworICAgICAgdXNpbmcgX0Jhc2U6Om5vbmU7CisKKyAgICAgIGJpdHNldDxfTmI+CisgICAgICBvcGVyYXRvcjw8KHNpemVfdCBfX3BvcykgY29uc3QKKyAgICAgIHsgcmV0dXJuIGJpdHNldDxfTmI+KF9NX2Jhc2UoKSA8PCBfX3Bvcyk7IH0KKworICAgICAgYml0c2V0PF9OYj4KKyAgICAgIG9wZXJhdG9yPj4oc2l6ZV90IF9fcG9zKSBjb25zdAorICAgICAgeyByZXR1cm4gYml0c2V0PF9OYj4oX01fYmFzZSgpID4+IF9fcG9zKTsgfQorCisgICAgICBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSB7IHJldHVybiAqdGhpczsgfQorCisgICAgICBjb25zdCBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8c2l6ZV90IF9OYj4KKyAgICBiaXRzZXQ8X05iPgorICAgIG9wZXJhdG9yJihjb25zdCBiaXRzZXQ8X05iPiYgX194LCBjb25zdCBiaXRzZXQ8X05iPiYgX195KQorICAgIHsgcmV0dXJuIGJpdHNldDxfTmI+KF9feCkgJj0gX195OyB9CisKKyAgdGVtcGxhdGU8c2l6ZV90IF9OYj4KKyAgICBiaXRzZXQ8X05iPgorICAgIG9wZXJhdG9yfChjb25zdCBiaXRzZXQ8X05iPiYgX194LCBjb25zdCBiaXRzZXQ8X05iPiYgX195KQorICAgIHsgcmV0dXJuIGJpdHNldDxfTmI+KF9feCkgfD0gX195OyB9CisKKyAgdGVtcGxhdGU8c2l6ZV90IF9OYj4KKyAgICBiaXRzZXQ8X05iPgorICAgIG9wZXJhdG9yXihjb25zdCBiaXRzZXQ8X05iPiYgX194LCBjb25zdCBiaXRzZXQ8X05iPiYgX195KQorICAgIHsgcmV0dXJuIGJpdHNldDxfTmI+KF9feCkgXj0gX195OyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCBzaXplX3QgX05iPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsIGJpdHNldDxfTmI+JiBfX3gpCisgICAgeyByZXR1cm4gX19pcyA+PiBfX3guX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCBzaXplX3QgX05iPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IGJpdHNldDxfTmI+JiBfX3gpCisgICAgeyByZXR1cm4gX19vcyA8PCBfX3guX01fYmFzZSgpOyB9Cit9IC8vIG5hbWVzcGFjZSBfX3Byb2ZpbGUKKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgIC8vIERSIDExODIuCisgIC8vLyBzdGQ6Omhhc2ggc3BlY2lhbGl6YXRpb24gZm9yIGJpdHNldC4KKyAgdGVtcGxhdGU8c2l6ZV90IF9OYj4KKyAgICBzdHJ1Y3QgaGFzaDxfX3Byb2ZpbGU6OmJpdHNldDxfTmI+PgorICAgIDogcHVibGljIHN0ZDo6dW5hcnlfZnVuY3Rpb248X19wcm9maWxlOjpiaXRzZXQ8X05iPiwgc2l6ZV90PgorICAgIHsKKyAgICAgIHNpemVfdAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfX3Byb2ZpbGU6OmJpdHNldDxfTmI+JiBfX2IpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGQ6Omhhc2g8X0dMSUJDWFhfU1REX0Q6OmJpdHNldDxfTmI+PigpKF9fYi5fTV9iYXNlKCkpOyB9CisgICAgfTsKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Byb2ZpbGUvZGVxdWUgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Byb2ZpbGUvZGVxdWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVlOGQ0OQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcHJvZmlsZS9kZXF1ZQpAQCAtMCwwICsxLDQyNSBAQAorLy8gUHJvZmlsaW5nIGRlcXVlIGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcHJvZmlsZS9kZXF1ZQorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBwcm9maWxlIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9QUk9GSUxFX0RFUVVFCisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfREVRVUUgMQorCisjaW5jbHVkZSA8ZGVxdWU+CisKK25hbWVzcGFjZSBzdGQKK3sKK25hbWVzcGFjZSBfX3Byb2ZpbGUKK3sKKyAgLy8vIENsYXNzIHN0ZDo6ZGVxdWUgd3JhcHBlciB3aXRoIHBlcmZvcm1hbmNlIGluc3RydW1lbnRhdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2NhdG9yID0gc3RkOjphbGxvY2F0b3I8X1RwPiA+CisgICAgY2xhc3MgZGVxdWUKKyAgICA6IHB1YmxpYyBfR0xJQkNYWF9TVERfRDo6ZGVxdWU8X1RwLCBfQWxsb2NhdG9yPgorICAgIHsKKyAgICAgIHR5cGVkZWYgIF9HTElCQ1hYX1NURF9EOjpkZXF1ZTxfVHAsIF9BbGxvY2F0b3I+IF9CYXNlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cmVmZXJlbmNlICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3JlZmVyZW5jZSAgICAgICBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yICAgICAgICAgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IgICAgICAgY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpyZXZlcnNlX2l0ZXJhdG9yICAgICByZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6ZGlmZmVyZW5jZV90eXBlICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKworICAgICAgdHlwZWRlZiBfVHAJCQkJICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9BbGxvY2F0b3IJCQkgICAgYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpwb2ludGVyICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3BvaW50ZXIgICAgICAgICBjb25zdF9wb2ludGVyOworCisgICAgICAvLyAyMy4yLjEuMSBjb25zdHJ1Y3QvY29weS9kZXN0cm95OgorICAgICAgZXhwbGljaXQgZGVxdWUoY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorICAgICAgOiBfQmFzZShfX2EpIHsgfQorCisgICAgICBleHBsaWNpdCBkZXF1ZShzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUgPSBfVHAoKSwKKwkJICAgICBjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICA6IF9CYXNlKF9fbiwgX192YWx1ZSwgX19hKSB7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGRlcXVlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgICBjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisJOiBfQmFzZShfX2ZpcnN0LCBfX2xhc3QsIF9fYSkKKyAgICAgICAgeyB9CisKKyAgICAgIGRlcXVlKGNvbnN0IGRlcXVlJiBfX3gpCisgICAgICA6IF9CYXNlKF9feCkgeyB9CisKKyAgICAgIGRlcXVlKGNvbnN0IF9CYXNlJiBfX3gpCisgICAgICA6IF9CYXNlKF9feCkgeyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgZGVxdWUoZGVxdWUmJiBfX3gpCisgICAgICA6IF9CYXNlKHN0ZDo6Zm9yd2FyZDxkZXF1ZT4oX194KSkKKyAgICAgIHsgfQorCisgICAgICBkZXF1ZShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCwKKwkgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fbCwgX19hKSB7IH0KKyNlbmRpZgorCisgICAgICB+ZGVxdWUoKSB7IH0KKworICAgICAgZGVxdWUmCisgICAgICBvcGVyYXRvcj0oY29uc3QgZGVxdWUmIF9feCkKKyAgICAgIHsKKwkqc3RhdGljX2Nhc3Q8X0Jhc2UqPih0aGlzKSA9IF9feDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgZGVxdWUmCisgICAgICBvcGVyYXRvcj0oZGVxdWUmJiBfX3gpCisgICAgICB7CisJLy8gTkI6IERSIDEyMDQuCisJLy8gTkI6IERSIDY3NS4KKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPnN3YXAoX194KTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGRlcXVlJgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCSpzdGF0aWNfY2FzdDxfQmFzZSo+KHRoaXMpID0gX19sOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgICB7CisJICBfQmFzZTo6YXNzaWduKF9fZmlyc3QsIF9fbGFzdCk7CisJfQorCisgICAgICB2b2lkCisgICAgICBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3QpCisgICAgICB7CisJX0Jhc2U6OmFzc2lnbihfX24sIF9fdCk7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdm9pZAorICAgICAgYXNzaWduKGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCV9CYXNlOjphc3NpZ24oX19sKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICB1c2luZyBfQmFzZTo6Z2V0X2FsbG9jYXRvcjsKKworICAgICAgLy8gaXRlcmF0b3JzOgorICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpiZWdpbigpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCkpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVuZCgpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjplbmQoKSk7IH0KKworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oKSk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmVuZCgpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjcmJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKyNlbmRpZgorCisgICAgICAvLyAyMy4yLjEuMiBjYXBhY2l0eToKKyAgICAgIHVzaW5nIF9CYXNlOjpzaXplOworICAgICAgdXNpbmcgX0Jhc2U6Om1heF9zaXplOworCisgICAgICB2b2lkCisgICAgICByZXNpemUoc2l6ZV90eXBlIF9fc3osIF9UcCBfX2MgPSBfVHAoKSkKKyAgICAgIHsKKwlfQmFzZTo6cmVzaXplKF9fc3osIF9fYyk7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdXNpbmcgX0Jhc2U6OnNocmlua190b19maXQ7CisjZW5kaWYKKworICAgICAgdXNpbmcgX0Jhc2U6OmVtcHR5OworCisgICAgICAvLyBlbGVtZW50IGFjY2VzczoKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKQorICAgICAgeworCXJldHVybiBfTV9iYXNlKClbX19uXTsKKyAgICAgIH0KKworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7CisJcmV0dXJuIF9NX2Jhc2UoKVtfX25dOworICAgICAgfQorCisgICAgICB1c2luZyBfQmFzZTo6YXQ7CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgZnJvbnQoKQorICAgICAgeworCXJldHVybiBfQmFzZTo6ZnJvbnQoKTsKKyAgICAgIH0KKworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBmcm9udCgpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIF9CYXNlOjpmcm9udCgpOworICAgICAgfQorCisgICAgICByZWZlcmVuY2UKKyAgICAgIGJhY2soKQorICAgICAgeworCXJldHVybiBfQmFzZTo6YmFjaygpOworICAgICAgfQorCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIGJhY2soKSBjb25zdAorICAgICAgeworCXJldHVybiBfQmFzZTo6YmFjaygpOworICAgICAgfQorCisgICAgICAvLyAyMy4yLjEuMyBtb2RpZmllcnM6CisgICAgICB2b2lkCisgICAgICBwdXNoX2Zyb250KGNvbnN0IF9UcCYgX194KQorICAgICAgeworCV9CYXNlOjpwdXNoX2Zyb250KF9feCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfYmFjayhjb25zdCBfVHAmIF9feCkKKyAgICAgIHsKKwlfQmFzZTo6cHVzaF9iYWNrKF9feCk7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdm9pZAorICAgICAgcHVzaF9mcm9udChfVHAmJiBfX3gpCisgICAgICB7IGVtcGxhY2VfZnJvbnQoc3RkOjptb3ZlKF9feCkpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfYmFjayhfVHAmJiBfX3gpCisgICAgICB7IGVtcGxhY2VfYmFjayhzdGQ6Om1vdmUoX194KSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHZvaWQKKyAgICAgICAgZW1wbGFjZV9mcm9udChfQXJncyYmLi4uIF9fYXJncykKKwl7CisJICBfQmFzZTo6ZW1wbGFjZV9mcm9udChzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHZvaWQKKyAgICAgICAgZW1wbGFjZV9iYWNrKF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIF9CYXNlOjplbXBsYWNlX2JhY2soc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICBpdGVyYXRvcgorICAgICAgICBlbXBsYWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBfX3JlcyA9IF9CYXNlOjplbXBsYWNlKF9fcG9zaXRpb24sCisJCQkJCSAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCSAgcmV0dXJuIGl0ZXJhdG9yKF9fcmVzKTsKKwl9CisjZW5kaWYKKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkKKyAgICAgIHsKKwl0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgX19yZXMgPSBfQmFzZTo6aW5zZXJ0KF9fcG9zaXRpb24sIF9feCk7CisJcmV0dXJuIGl0ZXJhdG9yKF9fcmVzKTsKKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIF9UcCYmIF9feCkKKyAgICAgIHsgcmV0dXJuIGVtcGxhY2UoX19wb3NpdGlvbiwgc3RkOjptb3ZlKF9feCkpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCV9CYXNlOjppbnNlcnQoX19wLCBfX2wpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCkKKyAgICAgIHsKKwlfQmFzZTo6aW5zZXJ0KF9fcG9zaXRpb24sIF9fbiwgX194KTsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sCisJICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeworCSAgX0Jhc2U6Omluc2VydChfX3Bvc2l0aW9uLCBfX2ZpcnN0LCBfX2xhc3QpOworCX0KKworICAgICAgdm9pZAorICAgICAgcG9wX2Zyb250KCkKKyAgICAgIHsKKwlfQmFzZTo6cG9wX2Zyb250KCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHBvcF9iYWNrKCkKKyAgICAgIHsKKwlfQmFzZTo6cG9wX2JhY2soKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7CisJaWYgKF9fcG9zaXRpb24gPT0gYmVnaW4oKSB8fCBfX3Bvc2l0aW9uID09IGVuZCgpLTEpCisJICB7CisJICAgIHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZXJhc2UoX19wb3NpdGlvbikpOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIF9fcmVzID0gX0Jhc2U6OmVyYXNlKF9fcG9zaXRpb24pOworCSAgICByZXR1cm4gaXRlcmF0b3IoX19yZXMpOworCSAgfQorICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICAgeworCS8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkvLyAxNTEuIGNhbid0IGN1cnJlbnRseSBjbGVhcigpIGVtcHR5IGNvbnRhaW5lcgorICAgICAgICByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVyYXNlKF9fZmlyc3QsIF9fbGFzdCkpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKGRlcXVlJiBfX3gpCisgICAgICB7CisJX0Jhc2U6OnN3YXAoX194KTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKQorICAgICAgeworCV9CYXNlOjpjbGVhcigpOworICAgICAgfQorCisgICAgICBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSAgICAgICB7IHJldHVybiAqdGhpczsgfQorCisgICAgICBjb25zdCBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX19saHMsCisJICAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID09IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgICBjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSAhPSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpIDwgX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX19saHMsCisJICAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpIDw9IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgICBjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA+PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID4gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKGRlcXVlPF9UcCwgX0FsbG9jPiYgX19saHMsIGRlcXVlPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyBfX2xocy5zd2FwKF9fcmhzKTsgfQorCit9IC8vIG5hbWVzcGFjZSBfX3Byb2ZpbGUKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcHJvZmlsZS9pbXBsL3Byb2ZpbGVyLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Byb2ZpbGUvaW1wbC9wcm9maWxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZDVjMzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Byb2ZpbGUvaW1wbC9wcm9maWxlci5oCkBAIC0wLDAgKzEsNDEwIEBACisvLyAtKi0gQysrIC0qLQorLy8KKy8vIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLy8gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bworLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCisvLyBNQSAwMjExMS0xMzA3LCBVU0EuCisKKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZQorLy8gc29mdHdhcmUgbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcworLy8gaW5zdGFudGlhdGUgdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMKKy8vIGZpbGUsIG9yIHlvdSBjb21waWxlIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvCisvLyBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMgZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlCisvLyByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKy8vIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyIGludmFsaWRhdGUgYW55IG90aGVyCisvLyByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsCisvLyBQdWJsaWMgTGljZW5zZS4KKworLyoqIEBmaWxlIHByb2ZpbGUvaW1wbC9wcm9maWxlci5oCisgKiAgQGJyaWVmIEludGVyZmFjZSBvZiB0aGUgcHJvZmlsaW5nIHJ1bnRpbWUgbGlicmFyeS4KKyAqLworCisvLyBXcml0dGVuIGJ5IExpeGlhIExpdSBhbmQgU2lsdml1cyBSdXMuCisKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9ICisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfUFJPRklMRVJfSCAxCisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworI2luY2x1ZGUgPGNzdGRkZWY+CisjZWxzZQorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2VuZGlmCisKKy8vIE1lY2hhbmlzbSB0byBkZWZpbmUgZGF0YSB3aXRoIGlubGluZSBsaW5rYWdlLgorI2RlZmluZSBfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9VTklOSVRfREFUQShfX3R5cGUsIF9fbmFtZSkgICAgICAgICAgICAgXAorICBpbmxpbmUgX190eXBlJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2dldF8jI19fbmFtZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0YXRpYyBfX3R5cGUgX19uYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybiBfX25hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfREVGSU5FX0RBVEEoX190eXBlLCBfX25hbWUsIF9faW5pdGlhbF92YWx1ZS4uLikgXAorICBpbmxpbmUgX190eXBlJiBfX2dldF8jI19fbmFtZSgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzdGF0aWMgX190eXBlIF9fbmFtZShfX2luaXRpYWxfdmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmV0dXJuIF9fbmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX25hbWUpIFwKKyAgX19nZXRfIyNfX25hbWUoKQorCituYW1lc3BhY2UgX19nbnVfcHJvZmlsZQoreworICAvKiogQGJyaWVmIFJlZW50cmFuY2UgZ3VhcmQuCisgICAqCisgICAqIE1lY2hhbmlzbSB0byBwcm90ZWN0IGFsbCBfX2dudV9wcm9maWxlIG9wZXJhdGlvbnMgYWdhaW5zdCByZWN1cnNpb24sCisgICAqIG11bHRpdGhyZWFkZWQgYW5kIGV4Y2VwdGlvbiByZWVudHJhbmNlLgorICAgKi8KKyAgc3RydWN0IF9fcmVlbnRyYW5jZV9ndWFyZAorICB7CisgICAgc3RhdGljIGJvb2wKKyAgICBfX2dldF9pbigpCisgICAgeworICAgICAgaWYgKF9faW5zaWRlKCkgPT0gdHJ1ZSkKKwlyZXR1cm4gZmFsc2U7CisgICAgICBlbHNlCisJeworCSAgX19pbnNpZGUoKSA9IHRydWU7CisJICByZXR1cm4gdHJ1ZTsKKwl9CisgICAgfQorCisgICAgc3RhdGljIGJvb2wmCisgICAgX19pbnNpZGUoKQorICAgIHsKKyAgICAgIHN0YXRpYyBfX3RocmVhZCBib29sIF9TX2luc2lkZShmYWxzZSk7CisgICAgICByZXR1cm4gX1NfaW5zaWRlOworICAgIH0KKworICAgIF9fcmVlbnRyYW5jZV9ndWFyZCgpIHsgfQorICAgIH5fX3JlZW50cmFuY2VfZ3VhcmQoKSB7IF9faW5zaWRlKCkgPSBmYWxzZTsgfQorICB9OworCisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfUkVFTlRSQU5DRV9HVUFSRChfX3guLi4pCSAgICAgIAlcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChfX2dudV9wcm9maWxlOjpfX3JlZW50cmFuY2VfZ3VhcmQ6Ol9fZ2V0X2luKCkpICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3JlZW50cmFuY2VfZ3VhcmQgX19nZXRfb3V0OyAJCVwKKyAgICAgIF9feDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKKyAgLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMgb2YgaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zLgorICAvLyBEb24ndCB1c2UgYW55IF9fZ251X3Byb2ZpbGU6OiBpbiB1c2VyIGNvZGUuCisgIC8vIEluc3RlYWQsIHVzZSB0aGUgX19wcm9mY3h4Li4uIG1hY3Jvcywgd2hpY2ggb2ZmZXIgZ3VhcmRlZCBhY2Nlc3MuCisgIGJvb2wgX190dXJuX29uKCk7CisgIGJvb2wgX190dXJuX29mZigpOworICBib29sIF9faXNfaW52YWxpZCgpOworICBib29sIF9faXNfb24oKTsKKyAgYm9vbCBfX2lzX29mZigpOworICB2b2lkIF9fcmVwb3J0KHZvaWQpOworICB2b2lkIF9fdHJhY2VfaGFzaHRhYmxlX3NpemVfcmVzaXplKGNvbnN0IHZvaWQqLCBzaXplX3QsIHNpemVfdCk7CisgIHZvaWQgX190cmFjZV9oYXNodGFibGVfc2l6ZV9kZXN0cnVjdChjb25zdCB2b2lkKiwgc2l6ZV90LCBzaXplX3QpOworICB2b2lkIF9fdHJhY2VfaGFzaHRhYmxlX3NpemVfY29uc3RydWN0KGNvbnN0IHZvaWQqLCBzaXplX3QpOworICB2b2lkIF9fdHJhY2VfdmVjdG9yX3NpemVfcmVzaXplKGNvbnN0IHZvaWQqLCBzaXplX3QsIHNpemVfdCk7CisgIHZvaWQgX190cmFjZV92ZWN0b3Jfc2l6ZV9kZXN0cnVjdChjb25zdCB2b2lkKiwgc2l6ZV90LCBzaXplX3QpOworICB2b2lkIF9fdHJhY2VfdmVjdG9yX3NpemVfY29uc3RydWN0KGNvbnN0IHZvaWQqLCBzaXplX3QpOworICB2b2lkIF9fdHJhY2VfaGFzaF9mdW5jX2Rlc3RydWN0KGNvbnN0IHZvaWQqLCBzaXplX3QsIHNpemVfdCwgc2l6ZV90KTsKKyAgdm9pZCBfX3RyYWNlX2hhc2hfZnVuY19jb25zdHJ1Y3QoY29uc3Qgdm9pZCopOworICB2b2lkIF9fdHJhY2VfdmVjdG9yX3RvX2xpc3RfZGVzdHJ1Y3QoY29uc3Qgdm9pZCopOworICB2b2lkIF9fdHJhY2VfdmVjdG9yX3RvX2xpc3RfY29uc3RydWN0KGNvbnN0IHZvaWQqKTsKKyAgdm9pZCBfX3RyYWNlX3ZlY3Rvcl90b19saXN0X2luc2VydChjb25zdCB2b2lkKiwgc2l6ZV90LCBzaXplX3QpOworICB2b2lkIF9fdHJhY2VfdmVjdG9yX3RvX2xpc3RfaXRlcmF0ZShjb25zdCB2b2lkKiwgc2l6ZV90KTsKKyAgdm9pZCBfX3RyYWNlX3ZlY3Rvcl90b19saXN0X2ludmFsaWRfb3BlcmF0b3IoY29uc3Qgdm9pZCopOworICB2b2lkIF9fdHJhY2VfdmVjdG9yX3RvX2xpc3RfcmVzaXplKGNvbnN0IHZvaWQqLCBzaXplX3QsIHNpemVfdCk7CisgIHZvaWQgX190cmFjZV92ZWN0b3JfdG9fbGlzdF9maW5kKGNvbnN0IHZvaWQqLCBzaXplX3QpOworCisgIHZvaWQgX190cmFjZV9saXN0X3RvX3NsaXN0X2Rlc3RydWN0KGNvbnN0IHZvaWQqKTsKKyAgdm9pZCBfX3RyYWNlX2xpc3RfdG9fc2xpc3RfY29uc3RydWN0KGNvbnN0IHZvaWQqKTsKKyAgdm9pZCBfX3RyYWNlX2xpc3RfdG9fc2xpc3RfcmV3aW5kKGNvbnN0IHZvaWQqKTsgCisgIHZvaWQgX190cmFjZV9saXN0X3RvX3NsaXN0X29wZXJhdGlvbihjb25zdCB2b2lkKik7CisKKyAgdm9pZCBfX3RyYWNlX2xpc3RfdG9fdmVjdG9yX2Rlc3RydWN0KGNvbnN0IHZvaWQqKTsKKyAgdm9pZCBfX3RyYWNlX2xpc3RfdG9fdmVjdG9yX2NvbnN0cnVjdChjb25zdCB2b2lkKik7CisgIHZvaWQgX190cmFjZV9saXN0X3RvX3ZlY3Rvcl9pbnNlcnQoY29uc3Qgdm9pZCosIHNpemVfdCwgc2l6ZV90KTsgCisgIHZvaWQgX190cmFjZV9saXN0X3RvX3ZlY3Rvcl9pdGVyYXRlKGNvbnN0IHZvaWQqLCBzaXplX3QpOworICB2b2lkIF9fdHJhY2VfbGlzdF90b192ZWN0b3JfaW52YWxpZF9vcGVyYXRvcihjb25zdCB2b2lkKik7CisgIHZvaWQgX190cmFjZV9saXN0X3RvX3ZlY3Rvcl9yZXNpemUoY29uc3Qgdm9pZCosIHNpemVfdCwgc2l6ZV90KTsgCisKKyAgdm9pZCBfX3RyYWNlX2xpc3RfdG9fc2V0X2Rlc3RydWN0KGNvbnN0IHZvaWQqKTsKKyAgdm9pZCBfX3RyYWNlX2xpc3RfdG9fc2V0X2NvbnN0cnVjdChjb25zdCB2b2lkKik7CisgIHZvaWQgX190cmFjZV9saXN0X3RvX3NldF9pbnNlcnQoY29uc3Qgdm9pZCosIHNpemVfdCwgc2l6ZV90KTsgCisgIHZvaWQgX190cmFjZV9saXN0X3RvX3NldF9pdGVyYXRlKGNvbnN0IHZvaWQqLCBzaXplX3QpOworICB2b2lkIF9fdHJhY2VfbGlzdF90b19zZXRfaW52YWxpZF9vcGVyYXRvcihjb25zdCB2b2lkKik7CisgIHZvaWQgX190cmFjZV9saXN0X3RvX3NldF9maW5kKGNvbnN0IHZvaWQqLCBzaXplX3QpOyAKKworICB2b2lkIF9fdHJhY2VfbWFwX3RvX3Vub3JkZXJlZF9tYXBfY29uc3RydWN0KGNvbnN0IHZvaWQqKTsKKyAgdm9pZCBfX3RyYWNlX21hcF90b191bm9yZGVyZWRfbWFwX2ludmFsaWRhdGUoY29uc3Qgdm9pZCopOworICB2b2lkIF9fdHJhY2VfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaW5zZXJ0KGNvbnN0IHZvaWQqLCBzaXplX3QsIHNpemVfdCk7CisgIHZvaWQgX190cmFjZV9tYXBfdG9fdW5vcmRlcmVkX21hcF9lcmFzZShjb25zdCB2b2lkKiwgc2l6ZV90LCBzaXplX3QpOworICB2b2lkIF9fdHJhY2VfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaXRlcmF0ZShjb25zdCB2b2lkKiwgc2l6ZV90KTsKKyAgdm9pZCBfX3RyYWNlX21hcF90b191bm9yZGVyZWRfbWFwX2ZpbmQoY29uc3Qgdm9pZCosIHNpemVfdCk7CisgIHZvaWQgX190cmFjZV9tYXBfdG9fdW5vcmRlcmVkX21hcF9kZXN0cnVjdChjb25zdCB2b2lkKik7Cit9IC8vIG5hbWVzcGFjZSBfX2dudV9wcm9maWxlCisKKy8vIE1hc3RlciBzd2l0Y2ggdHVybnMgb24gYWxsIGRpYWdub3N0aWNzIHRoYXQgYXJlIG5vdCBleHBsaWNpdGx5IHR1cm5lZCBvZmYuCisjaWZkZWYgX0dMSUJDWFhfUFJPRklMRQorI2lmbmRlZiBfR0xJQkNYWF9QUk9GSUxFX05PX0hBU0hUQUJMRV9UT09fU01BTEwKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9IQVNIVEFCTEVfVE9PX1NNQUxMCisjZW5kaWYKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9OT19IQVNIVEFCTEVfVE9PX0xBUkdFCisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfSEFTSFRBQkxFX1RPT19MQVJHRQorI2VuZGlmCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfTk9fVkVDVE9SX1RPT19TTUFMTAorI2RlZmluZSBfR0xJQkNYWF9QUk9GSUxFX1ZFQ1RPUl9UT09fU01BTEwKKyNlbmRpZgorI2lmbmRlZiBfR0xJQkNYWF9QUk9GSUxFX05PX1ZFQ1RPUl9UT09fTEFSR0UKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9WRUNUT1JfVE9PX0xBUkdFCisjZW5kaWYKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9OT19JTkVGRklDSUVOVF9IQVNICisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfSU5FRkZJQ0lFTlRfSEFTSAorI2VuZGlmCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfTk9fVkVDVE9SX1RPX0xJU1QKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9WRUNUT1JfVE9fTElTVAorI2VuZGlmCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfTk9fTElTVF9UT19TTElTVAorI2RlZmluZSBfR0xJQkNYWF9QUk9GSUxFX0xJU1RfVE9fU0xJU1QKKyNlbmRpZgorI2lmbmRlZiBfR0xJQkNYWF9QUk9GSUxFX05PX0xJU1RfVE9fVkVDVE9SCisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfTElTVF9UT19WRUNUT1IKKyNlbmRpZgorI2lmbmRlZiBfR0xJQkNYWF9QUk9GSUxFX05PX01BUF9UT19VTk9SREVSRURfTUFQCisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfTUFQX1RPX1VOT1JERVJFRF9NQVAKKyNlbmRpZgorI2VuZGlmCisKKy8vIEV4cG9zZSBnbG9iYWwgbWFuYWdlbWVudCByb3V0aW5lcyB0byB1c2VyIGNvZGUuCisjaWZkZWYgX0dMSUJDWFhfUFJPRklMRQorI2RlZmluZSBfX3Byb2ZjeHhfcmVwb3J0KCkgXAorICBfR0xJQkNYWF9QUk9GSUxFX1JFRU5UUkFOQ0VfR1VBUkQoX19nbnVfcHJvZmlsZTo6X19yZXBvcnQoKSkKKyNkZWZpbmUgX19wcm9mY3h4X3R1cm5fb24oKSBcCisgIF9HTElCQ1hYX1BST0ZJTEVfUkVFTlRSQU5DRV9HVUFSRChfX2dudV9wcm9maWxlOjpfX3R1cm5fb24oKSkKKyNkZWZpbmUgX19wcm9mY3h4X3R1cm5fb2ZmKCkgXAorICBfR0xJQkNYWF9QUk9GSUxFX1JFRU5UUkFOQ0VfR1VBUkQoX19nbnVfcHJvZmlsZTo6X190dXJuX29mZigpKQorI2RlZmluZSBfX3Byb2ZjeHhfaXNfaW52YWxpZCgpIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKF9fZ251X3Byb2ZpbGU6Ol9faXNfaW52YWxpZCgpKQorI2RlZmluZSBfX3Byb2ZjeHhfaXNfb24oKSBcCisgIF9HTElCQ1hYX1BST0ZJTEVfUkVFTlRSQU5DRV9HVUFSRChfX2dudV9wcm9maWxlOjpfX2lzX29uKCkpCisjZGVmaW5lIF9fcHJvZmN4eF9faXNfb2ZmKCkgXAorICBfR0xJQkNYWF9QUk9GSUxFX1JFRU5UUkFOQ0VfR1VBUkQoX19nbnVfcHJvZmlsZTo6X19pc19vZmYoKSkKKyNlbHNlCisjZGVmaW5lIF9fcHJvZmN4eF9yZXBvcnQoKQorI2RlZmluZSBfX3Byb2ZjeHhfdHVybl9vbigpCisjZGVmaW5lIF9fcHJvZmN4eF90dXJuX29mZigpCisjZGVmaW5lIF9fcHJvZmN4eF9pc19pbnZhbGlkKCkKKyNkZWZpbmUgX19wcm9mY3h4X2lzX29uKCkKKyNkZWZpbmUgX19wcm9mY3h4X2lzX29mZigpCisjZW5kaWYKKworLy8gVHVybiBvbi9vZmYgaW5zdHJ1bWVudGF0aW9uIGZvciBIQVNIVEFCTEVfVE9PX1NNQUxMIGFuZCBIQVNIVEFCTEVfVE9PX0xBUkdFLgorI2lmIChkZWZpbmVkKF9HTElCQ1hYX1BST0ZJTEVfSEFTSFRBQkxFX1RPT19TTUFMTCkgXAorICAgICB8fCBkZWZpbmVkKF9HTElCQ1hYX1BST0ZJTEVfSEFTSFRBQkxFX1RPT19MQVJHRSkpCisjZGVmaW5lIF9fcHJvZmN4eF9oYXNodGFibGVfcmVzaXplKF9feC4uLikgXAorICBfR0xJQkNYWF9QUk9GSUxFX1JFRU5UUkFOQ0VfR1VBUkQoIFwKKyAgICAgIF9fZ251X3Byb2ZpbGU6Ol9fdHJhY2VfaGFzaHRhYmxlX3NpemVfcmVzaXplKF9feCkpCisjZGVmaW5lIF9fcHJvZmN4eF9oYXNodGFibGVfZGVzdHJ1Y3QoX194Li4uKSBcCisgIF9HTElCQ1hYX1BST0ZJTEVfUkVFTlRSQU5DRV9HVUFSRCggXAorICAgICAgX19nbnVfcHJvZmlsZTo6X190cmFjZV9oYXNodGFibGVfc2l6ZV9kZXN0cnVjdChfX3gpKQorI2RlZmluZSBfX3Byb2ZjeHhfaGFzaHRhYmxlX2NvbnN0cnVjdChfX3guLi4pIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKCBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3RyYWNlX2hhc2h0YWJsZV9zaXplX2NvbnN0cnVjdChfX3gpKQorI2Vsc2UKKyNkZWZpbmUgX19wcm9mY3h4X2hhc2h0YWJsZV9yZXNpemUoX194Li4uKSAgCisjZGVmaW5lIF9fcHJvZmN4eF9oYXNodGFibGVfZGVzdHJ1Y3QoX194Li4uKSAKKyNkZWZpbmUgX19wcm9mY3h4X2hhc2h0YWJsZV9jb25zdHJ1Y3QoX194Li4uKSAgCisjZW5kaWYKKworLy8gVHVybiBvbi9vZmYgaW5zdHJ1bWVudGF0aW9uIGZvciBWRUNUT1JfVE9PX1NNQUxMIGFuZCBWRUNUT1JfVE9PX0xBUkdFLgorI2lmIChkZWZpbmVkKF9HTElCQ1hYX1BST0ZJTEVfVkVDVE9SX1RPT19TTUFMTCkgXAorICAgICB8fCBkZWZpbmVkKF9HTElCQ1hYX1BST0ZJTEVfVkVDVE9SX1RPT19MQVJHRSkpCisjZGVmaW5lIF9fcHJvZmN4eF92ZWN0b3JfcmVzaXplKF9feC4uLikgXAorICBfR0xJQkNYWF9QUk9GSUxFX1JFRU5UUkFOQ0VfR1VBUkQoIFwKKyAgICAgIF9fZ251X3Byb2ZpbGU6Ol9fdHJhY2VfdmVjdG9yX3NpemVfcmVzaXplKF9feCkpCisjZGVmaW5lIF9fcHJvZmN4eF92ZWN0b3JfZGVzdHJ1Y3QoX194Li4uKSBcCisgIF9HTElCQ1hYX1BST0ZJTEVfUkVFTlRSQU5DRV9HVUFSRCggXAorICAgICAgX19nbnVfcHJvZmlsZTo6X190cmFjZV92ZWN0b3Jfc2l6ZV9kZXN0cnVjdChfX3gpKQorI2RlZmluZSBfX3Byb2ZjeHhfdmVjdG9yX2NvbnN0cnVjdChfX3guLi4pIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKCBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3RyYWNlX3ZlY3Rvcl9zaXplX2NvbnN0cnVjdChfX3gpKQorI2Vsc2UKKyNkZWZpbmUgX19wcm9mY3h4X3ZlY3Rvcl9yZXNpemUoX194Li4uKSAgCisjZGVmaW5lIF9fcHJvZmN4eF92ZWN0b3JfZGVzdHJ1Y3QoX194Li4uKSAKKyNkZWZpbmUgX19wcm9mY3h4X3ZlY3Rvcl9jb25zdHJ1Y3QoX194Li4uKSAgCisjZW5kaWYgCisKKy8vIFR1cm4gb24vb2ZmIGluc3RydW1lbnRhdGlvbiBmb3IgSU5FRkZJQ0lFTlRfSEFTSC4KKyNpZiBkZWZpbmVkKF9HTElCQ1hYX1BST0ZJTEVfSU5FRkZJQ0lFTlRfSEFTSCkKKyNkZWZpbmUgX19wcm9mY3h4X2hhc2h0YWJsZV9jb25zdHJ1Y3QyKF9feC4uLikgXAorICBfR0xJQkNYWF9QUk9GSUxFX1JFRU5UUkFOQ0VfR1VBUkQoIFwKKyAgICAgIF9fZ251X3Byb2ZpbGU6Ol9fdHJhY2VfaGFzaF9mdW5jX2NvbnN0cnVjdChfX3gpKQorI2RlZmluZSBfX3Byb2ZjeHhfaGFzaHRhYmxlX2Rlc3RydWN0MihfX3guLi4pIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKCBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3RyYWNlX2hhc2hfZnVuY19kZXN0cnVjdChfX3gpKQorI2Vsc2UKKyNkZWZpbmUgX19wcm9mY3h4X2hhc2h0YWJsZV9kZXN0cnVjdDIoX194Li4uKSAKKyNkZWZpbmUgX19wcm9mY3h4X2hhc2h0YWJsZV9jb25zdHJ1Y3QyKF9feC4uLikgIAorI2VuZGlmCisKKy8vIFR1cm4gb24vb2ZmIGluc3RydW1lbnRhdGlvbiBmb3IgVkVDVE9SX1RPX0xJU1QuCisjaWYgZGVmaW5lZChfR0xJQkNYWF9QUk9GSUxFX1ZFQ1RPUl9UT19MSVNUKQorI2RlZmluZSBfX3Byb2ZjeHhfdmVjdG9yX2NvbnN0cnVjdDIoX194Li4uKSBcCisgIF9HTElCQ1hYX1BST0ZJTEVfUkVFTlRSQU5DRV9HVUFSRCggXAorICAgICAgX19nbnVfcHJvZmlsZTo6X190cmFjZV92ZWN0b3JfdG9fbGlzdF9jb25zdHJ1Y3QoX194KSkKKyNkZWZpbmUgX19wcm9mY3h4X3ZlY3Rvcl9kZXN0cnVjdDIoX194Li4uKSBcCisgIF9HTElCQ1hYX1BST0ZJTEVfUkVFTlRSQU5DRV9HVUFSRCggXAorICAgICAgX19nbnVfcHJvZmlsZTo6X190cmFjZV92ZWN0b3JfdG9fbGlzdF9kZXN0cnVjdChfX3gpKQorI2RlZmluZSBfX3Byb2ZjeHhfdmVjdG9yX2luc2VydChfX3guLi4pIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKCBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3RyYWNlX3ZlY3Rvcl90b19saXN0X2luc2VydChfX3gpKQorI2RlZmluZSBfX3Byb2ZjeHhfdmVjdG9yX2l0ZXJhdGUoX194Li4uKSBcCisgIF9HTElCQ1hYX1BST0ZJTEVfUkVFTlRSQU5DRV9HVUFSRCggXAorICAgICAgX19nbnVfcHJvZmlsZTo6X190cmFjZV92ZWN0b3JfdG9fbGlzdF9pdGVyYXRlKF9feCkpCisjZGVmaW5lIF9fcHJvZmN4eF92ZWN0b3JfaW52YWxpZF9vcGVyYXRvcihfX3guLi4pIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKCBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3RyYWNlX3ZlY3Rvcl90b19saXN0X2ludmFsaWRfb3BlcmF0b3IoX194KSkKKyNkZWZpbmUgX19wcm9mY3h4X3ZlY3Rvcl9yZXNpemUyKF9feC4uLikgXAorICBfR0xJQkNYWF9QUk9GSUxFX1JFRU5UUkFOQ0VfR1VBUkQoIFwKKyAgICAgIF9fZ251X3Byb2ZpbGU6Ol9fdHJhY2VfdmVjdG9yX3RvX2xpc3RfcmVzaXplKF9feCkpCisjZGVmaW5lIF9fcHJvZmN4eF92ZWN0b3JfZmluZChfX3guLi4pIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKCBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3RyYWNlX3ZlY3Rvcl90b19saXN0X2ZpbmQoX194KSkKKyNlbHNlCisjZGVmaW5lIF9fcHJvZmN4eF92ZWN0b3JfZGVzdHJ1Y3QyKF9feC4uLikKKyNkZWZpbmUgX19wcm9mY3h4X3ZlY3Rvcl9jb25zdHJ1Y3QyKF9feC4uLikKKyNkZWZpbmUgX19wcm9mY3h4X3ZlY3Rvcl9pbnNlcnQoX194Li4uKQorI2RlZmluZSBfX3Byb2ZjeHhfdmVjdG9yX2l0ZXJhdGUoX194Li4uKQorI2RlZmluZSBfX3Byb2ZjeHhfdmVjdG9yX2ludmFsaWRfb3BlcmF0b3IoX194Li4uKQorI2RlZmluZSBfX3Byb2ZjeHhfdmVjdG9yX3Jlc2l6ZTIoX194Li4uKQorI2RlZmluZSBfX3Byb2ZjeHhfdmVjdG9yX2ZpbmQoX194Li4uKQorI2VuZGlmCisKKy8vIFR1cm4gb24vb2ZmIGluc3RydW1lbnRhdGlvbiBmb3IgTElTVF9UT19WRUNUT1IuIAorI2lmIGRlZmluZWQoX0dMSUJDWFhfUFJPRklMRV9MSVNUX1RPX1ZFQ1RPUikKKyNkZWZpbmUgX19wcm9mY3h4X2xpc3RfY29uc3RydWN0MihfX3guLi4pIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKCBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3RyYWNlX2xpc3RfdG9fdmVjdG9yX2NvbnN0cnVjdChfX3gpKQorI2RlZmluZSBfX3Byb2ZjeHhfbGlzdF9kZXN0cnVjdDIoX194Li4uKSBcCisgIF9HTElCQ1hYX1BST0ZJTEVfUkVFTlRSQU5DRV9HVUFSRCggXAorICAgICAgX19nbnVfcHJvZmlsZTo6X190cmFjZV9saXN0X3RvX3ZlY3Rvcl9kZXN0cnVjdChfX3gpKQorI2RlZmluZSBfX3Byb2ZjeHhfbGlzdF9pbnNlcnQoX194Li4uKSBcCisgIF9HTElCQ1hYX1BST0ZJTEVfUkVFTlRSQU5DRV9HVUFSRCggXAorICAgICAgX19nbnVfcHJvZmlsZTo6X190cmFjZV9saXN0X3RvX3ZlY3Rvcl9pbnNlcnQoX194KSkKKyNkZWZpbmUgX19wcm9mY3h4X2xpc3RfaXRlcmF0ZShfX3guLi4pIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKCBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3RyYWNlX2xpc3RfdG9fdmVjdG9yX2l0ZXJhdGUoX194KSkKKyNkZWZpbmUgX19wcm9mY3h4X2xpc3RfaW52YWxpZF9vcGVyYXRvcihfX3guLi4pIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKCBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3RyYWNlX2xpc3RfdG9fdmVjdG9yX2ludmFsaWRfb3BlcmF0b3IoX194KSkKKyNlbHNlCisjZGVmaW5lIF9fcHJvZmN4eF9saXN0X2Rlc3RydWN0MihfX3guLi4pCisjZGVmaW5lIF9fcHJvZmN4eF9saXN0X2NvbnN0cnVjdDIoX194Li4uKQorI2RlZmluZSBfX3Byb2ZjeHhfbGlzdF9pbnNlcnQoX194Li4uKQorI2RlZmluZSBfX3Byb2ZjeHhfbGlzdF9pdGVyYXRlKF9feC4uLikKKyNkZWZpbmUgX19wcm9mY3h4X2xpc3RfaW52YWxpZF9vcGVyYXRvcihfX3guLi4pCisjZW5kaWYKKworLy8gVHVybiBvbi9vZmYgaW5zdHJ1bWVudGF0aW9uIGZvciBMSVNUX1RPX1NMSVNULiAgCisjaWYgZGVmaW5lZChfR0xJQkNYWF9QUk9GSUxFX0xJU1RfVE9fU0xJU1QpCisjZGVmaW5lIF9fcHJvZmN4eF9saXN0X3Jld2luZChfX3guLi4pIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKCBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3RyYWNlX2xpc3RfdG9fc2xpc3RfcmV3aW5kKF9feCkpCisjZGVmaW5lIF9fcHJvZmN4eF9saXN0X29wZXJhdGlvbihfX3guLi4pIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKCBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3RyYWNlX2xpc3RfdG9fc2xpc3Rfb3BlcmF0aW9uKF9feCkpCisjZGVmaW5lIF9fcHJvZmN4eF9saXN0X2Rlc3RydWN0KF9feC4uLikgXAorICBfR0xJQkNYWF9QUk9GSUxFX1JFRU5UUkFOQ0VfR1VBUkQoIFwKKyAgICAgIF9fZ251X3Byb2ZpbGU6Ol9fdHJhY2VfbGlzdF90b19zbGlzdF9kZXN0cnVjdChfX3gpKQorI2RlZmluZSBfX3Byb2ZjeHhfbGlzdF9jb25zdHJ1Y3QoX194Li4uKSBcCisgIF9HTElCQ1hYX1BST0ZJTEVfUkVFTlRSQU5DRV9HVUFSRCggXAorICAgICAgX19nbnVfcHJvZmlsZTo6X190cmFjZV9saXN0X3RvX3NsaXN0X2NvbnN0cnVjdChfX3gpKQorI2Vsc2UKKyNkZWZpbmUgX19wcm9mY3h4X2xpc3RfcmV3aW5kKF9feC4uLikgIAorI2RlZmluZSBfX3Byb2ZjeHhfbGlzdF9vcGVyYXRpb24oX194Li4uKQorI2RlZmluZSBfX3Byb2ZjeHhfbGlzdF9kZXN0cnVjdChfX3guLi4pIAorI2RlZmluZSBfX3Byb2ZjeHhfbGlzdF9jb25zdHJ1Y3QoX194Li4uKSAgCisjZW5kaWYgCisKKy8vIFR1cm4gb24vb2ZmIGluc3RydW1lbnRhdGlvbiBmb3IgTUFQX1RPX1VOT1JERVJFRF9NQVAuCisjaWYgZGVmaW5lZChfR0xJQkNYWF9QUk9GSUxFX01BUF9UT19VTk9SREVSRURfTUFQKQorI2RlZmluZSBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfY29uc3RydWN0KF9feC4uLikgXAorICBfR0xJQkNYWF9QUk9GSUxFX1JFRU5UUkFOQ0VfR1VBUkQoIFwKKyAgICAgIF9fZ251X3Byb2ZpbGU6Ol9fdHJhY2VfbWFwX3RvX3Vub3JkZXJlZF9tYXBfY29uc3RydWN0KF9feCkpCisjZGVmaW5lIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9kZXN0cnVjdChfX3guLi4pIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKCBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3RyYWNlX21hcF90b191bm9yZGVyZWRfbWFwX2Rlc3RydWN0KF9feCkpCisjZGVmaW5lIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnNlcnQoX194Li4uKSBcCisgIF9HTElCQ1hYX1BST0ZJTEVfUkVFTlRSQU5DRV9HVUFSRCggXAorICAgICAgX19nbnVfcHJvZmlsZTo6X190cmFjZV9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnNlcnQoX194KSkKKyNkZWZpbmUgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2VyYXNlKF9feC4uLikgXAorICBfR0xJQkNYWF9QUk9GSUxFX1JFRU5UUkFOQ0VfR1VBUkQoIFwKKyAgICAgIF9fZ251X3Byb2ZpbGU6Ol9fdHJhY2VfbWFwX3RvX3Vub3JkZXJlZF9tYXBfZXJhc2UoX194KSkKKyNkZWZpbmUgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2l0ZXJhdGUoX194Li4uKSBcCisgIF9HTElCQ1hYX1BST0ZJTEVfUkVFTlRSQU5DRV9HVUFSRCggXAorICAgICAgX19nbnVfcHJvZmlsZTo6X190cmFjZV9tYXBfdG9fdW5vcmRlcmVkX21hcF9pdGVyYXRlKF9feCkpCisjZGVmaW5lIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnZhbGlkYXRlKF9feC4uLikgXAorICBfR0xJQkNYWF9QUk9GSUxFX1JFRU5UUkFOQ0VfR1VBUkQoIFwKKyAgICAgIF9fZ251X3Byb2ZpbGU6Ol9fdHJhY2VfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaW52YWxpZGF0ZShfX3gpKQorI2RlZmluZSBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfZmluZChfX3guLi4pIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKCBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3RyYWNlX21hcF90b191bm9yZGVyZWRfbWFwX2ZpbmQoX194KSkKKyNlbHNlCisjZGVmaW5lIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9jb25zdHJ1Y3QoX194Li4uKSBcCisgIAorI2RlZmluZSBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfZGVzdHJ1Y3QoX194Li4uKQorI2RlZmluZSBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaW5zZXJ0KF9feC4uLikKKyNkZWZpbmUgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2VyYXNlKF9feC4uLikKKyNkZWZpbmUgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2l0ZXJhdGUoX194Li4uKQorI2RlZmluZSBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaW52YWxpZGF0ZShfX3guLi4pCisjZGVmaW5lIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9maW5kKF9feC4uLikKKyNlbmRpZgorCisvLyBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGNvbXBpbGUtdGltZSBjdXN0b21pemFibGUgdmFyaWFibGVzLgorI2lmbmRlZiBfR0xJQkNYWF9QUk9GSUxFX1RSQUNFX1BBVEhfUk9PVAorI2RlZmluZSBfR0xJQkNYWF9QUk9GSUxFX1RSQUNFX1BBVEhfUk9PVCAibGlic3RkY3h4LXByb2ZpbGUiCisjZW5kaWYKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9UUkFDRV9FTlZfVkFSCisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfVFJBQ0VfRU5WX1ZBUiAiX0dMSUJDWFhfUFJPRklMRV9UUkFDRV9QQVRIX1JPT1QiCisjZW5kaWYKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9NQVhfV0FSTl9DT1VOVF9FTlZfVkFSCisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfTUFYX1dBUk5fQ09VTlRfRU5WX1ZBUiBcCisgICJfR0xJQkNYWF9QUk9GSUxFX01BWF9XQVJOX0NPVU5UIgorI2VuZGlmCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfTUFYX1dBUk5fQ09VTlQKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9NQVhfV0FSTl9DT1VOVCAxMAorI2VuZGlmCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfTUFYX1NUQUNLX0RFUFRICisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfTUFYX1NUQUNLX0RFUFRIIDMyCisjZW5kaWYKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9NQVhfU1RBQ0tfREVQVEhfRU5WX1ZBUgorI2RlZmluZSBfR0xJQkNYWF9QUk9GSUxFX01BWF9TVEFDS19ERVBUSF9FTlZfVkFSIFwKKyAgIl9HTElCQ1hYX1BST0ZJTEVfTUFYX1NUQUNLX0RFUFRIIgorI2VuZGlmCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfTUVNX1BFUl9ESUFHTk9TVElDCisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfTUVNX1BFUl9ESUFHTk9TVElDIDIgPDwgMjcKKyNlbmRpZgorI2lmbmRlZiBfR0xJQkNYWF9QUk9GSUxFX01FTV9QRVJfRElBR05PU1RJQ19FTlZfVkFSCisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfTUVNX1BFUl9ESUFHTk9TVElDX0VOVl9WQVIgXAorICAiX0dMSUJDWFhfUFJPRklMRV9NRU1fUEVSX0RJQUdOT1NUSUMiCisjZW5kaWYKKworLy8gSW5zdHJ1bWVudGF0aW9uIGhvb2sgaW1wbGVtZW50YXRpb25zLgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl9oYXNoX2Z1bmMuaCIKKyNpbmNsdWRlICJwcm9maWxlL2ltcGwvcHJvZmlsZXJfaGFzaHRhYmxlX3NpemUuaCIKKyNpbmNsdWRlICJwcm9maWxlL2ltcGwvcHJvZmlsZXJfbWFwX3RvX3Vub3JkZXJlZF9tYXAuaCIKKyNpbmNsdWRlICJwcm9maWxlL2ltcGwvcHJvZmlsZXJfdmVjdG9yX3NpemUuaCIKKyNpbmNsdWRlICJwcm9maWxlL2ltcGwvcHJvZmlsZXJfdmVjdG9yX3RvX2xpc3QuaCIKKyNpbmNsdWRlICJwcm9maWxlL2ltcGwvcHJvZmlsZXJfbGlzdF90b19zbGlzdC5oIgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl9saXN0X3RvX3ZlY3Rvci5oIgorCisjZW5kaWYgLy8gX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9ICmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Byb2ZpbGUvaW1wbC9wcm9maWxlcl9jb250YWluZXJfc2l6ZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfY29udGFpbmVyX3NpemUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzA0NjNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfY29udGFpbmVyX3NpemUuaApAQCAtMCwwICsxLDI0MiBAQAorLy8gLSotIEMrKyAtKi0KKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy8vIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KKy8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAorLy8gTUEgMDIxMTEtMTMwNywgVVNBLgorCisvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUKKy8vIHNvZnR3YXJlIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMKKy8vIGluc3RhbnRpYXRlIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzCisvLyBmaWxlLCBvciB5b3UgY29tcGlsZSB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0bworLy8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZQorLy8gcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisvLyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlciBpbnZhbGlkYXRlIGFueSBvdGhlcgorLy8gcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbAorLy8gUHVibGljIExpY2Vuc2UuCisKKy8qKiBAZmlsZSBwcm9maWxlL2ltcGwvcHJvZmlsZXJfdHJhY2UuaAorICogIEBicmllZiBEaWFnbm9zdGljcyBmb3IgY29udGFpbmVyIHNpemVzLgorICovCisKKy8vIFdyaXR0ZW4gYnkgTGl4aWEgTGl1IGFuZCBTaWx2aXVzIFJ1cy4KKworI2lmbmRlZiBfR0xJQkNYWF9QUk9GSUxFX1BST0ZJTEVSX0NPTlRBSU5FUl9TSVpFX0gKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9DT05UQUlORVJfU0laRV9IIDEKKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNlbHNlCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlci5oIgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl9ub2RlLmgiCisjaW5jbHVkZSAicHJvZmlsZS9pbXBsL3Byb2ZpbGVyX3RyYWNlLmgiCisKK25hbWVzcGFjZSBfX2dudV9wcm9maWxlCit7CisKKy8qKiBAYnJpZWYgQSBjb250YWluZXIgc2l6ZSBpbnN0cnVtZW50YXRpb24gbGluZSBpbiB0aGUgb2JqZWN0IHRhYmxlLiAgKi8KK2NsYXNzIF9fY29udGFpbmVyX3NpemVfaW5mbzogcHVibGljIF9fb2JqZWN0X2luZm9fYmFzZSAKK3sKKyBwdWJsaWM6CisgIF9fY29udGFpbmVyX3NpemVfaW5mbygpOworICBfX2NvbnRhaW5lcl9zaXplX2luZm8oY29uc3QgX19jb250YWluZXJfc2l6ZV9pbmZvJiBfX28pOworICBfX2NvbnRhaW5lcl9zaXplX2luZm8oX19zdGFja190IF9fc3RhY2ssIHNpemVfdCBfX251bSk7CisgIHZpcnR1YWwgfl9fY29udGFpbmVyX3NpemVfaW5mbygpIHt9CisKKyAgdm9pZCBfX3dyaXRlKEZJTEUqIGYpIGNvbnN0OworICBmbG9hdCBfX21hZ25pdHVkZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihfTV9jb3N0KTsgfQorICBjb25zdCBjaGFyKiBfX2FkdmljZSgpIGNvbnN0OworCisgIHZvaWQgX19tZXJnZShjb25zdCBfX2NvbnRhaW5lcl9zaXplX2luZm8mIF9fbyk7CisgIC8vIENhbGwgaWYgYSBjb250YWluZXIgaXMgZGVzdHJ1Y3RlZCBvciBjbGVhbmVkLgorICB2b2lkIF9fZGVzdHJ1Y3Qoc2l6ZV90IF9fbnVtLCBzaXplX3QgX19pbnVtKTsKKyAgLy8gRXN0aW1hdGUgdGhlIGNvc3Qgb2YgcmVzaXplL3JlaGFzaC4gCisgIGZsb2F0IF9fcmVzaXplX2Nvc3Qoc2l6ZV90IF9fZnJvbSwgc2l6ZV90IF9fdG8pIHsgcmV0dXJuIF9fZnJvbTsgfQorICAvLyBDYWxsIGlmIGNvbnRhaW5lciBpcyByZXNpemVkLgorICB2b2lkIF9fcmVzaXplKHNpemVfdCBfX2Zyb20sIHNpemVfdCBfX3RvKTsKKworIHByaXZhdGU6CisgIHNpemVfdCBfTV9pbml0OworICBzaXplX3QgX01fbWF4OyAgLy8gcmFuZ2Ugb2YgIyBidWNrZXRzCisgIHNpemVfdCBfTV9taW47CisgIHNpemVfdCBfTV90b3RhbDsKKyAgc2l6ZV90IF9NX2l0ZW1fbWluOyAgLy8gcmFuZ2Ugb2YgIyBpdGVtcworICBzaXplX3QgX01faXRlbV9tYXg7CisgIHNpemVfdCBfTV9pdGVtX3RvdGFsOworICBzaXplX3QgX01fY291bnQ7CisgIHNpemVfdCBfTV9yZXNpemU7CisgIHNpemVfdCBfTV9jb3N0OworfTsKKworaW5saW5lIGNvbnN0IGNoYXIqIF9fY29udGFpbmVyX3NpemVfaW5mbzo6X19hZHZpY2UoKSBjb25zdAoreworICBzdGQ6OnN0cmluZ3N0cmVhbSBfX21lc3NhZ2U7CisgIGlmIChfTV9pbml0IDwgX01faXRlbV9tYXgpCisgICAgX19tZXNzYWdlIDw8ICJjaGFuZ2UgaW5pdGlhbCBjb250YWluZXIgc2l6ZSBmcm9tICIgPDwgX01faW5pdAorICAgICAgICAgICAgICA8PCAiIHRvICIgPDwgX01faXRlbV9tYXg7CisKKyAgcmV0dXJuIHN0cmR1cChfX21lc3NhZ2Uuc3RyKCkuY19zdHIoKSk7Cit9CisKK2lubGluZSB2b2lkIF9fY29udGFpbmVyX3NpemVfaW5mbzo6X19kZXN0cnVjdChzaXplX3QgX19udW0sIHNpemVfdCBfX2ludW0pIAoreworICBfTV9tYXggPSBzdGQ6Om1heChfTV9tYXgsIF9fbnVtKTsKKyAgX01faXRlbV9tYXggPSBzdGQ6Om1heChfTV9pdGVtX21heCwgX19pbnVtKTsKKyAgaWYgKF9NX21pbiA9PSAwKSB7CisgICAgX01fbWluID0gX19udW07IAorICAgIF9NX2l0ZW1fbWluID0gX19pbnVtOworICB9IGVsc2UgeworICAgIF9NX21pbiA9IHN0ZDo6bWluKF9NX21pbiwgX19udW0pOworICAgIF9NX2l0ZW1fbWluID0gc3RkOjptaW4oX01faXRlbV9taW4sIF9faW51bSk7CisgIH0KKyAgX01fdG90YWwgKz0gX19udW07CisgIF9NX2l0ZW1fdG90YWwgKz0gX19pbnVtOworICBfTV9jb3VudCArPSAxOworfQorCitpbmxpbmUgdm9pZCBfX2NvbnRhaW5lcl9zaXplX2luZm86Ol9fcmVzaXplKHNpemVfdCBfX2Zyb20sIHNpemVfdCBfX3RvKSAKK3sKKyAgX01fY29zdCArPSB0aGlzLT5fX3Jlc2l6ZV9jb3N0KF9fZnJvbSwgX190byk7CisgIF9NX3Jlc2l6ZSArPSAxOworICBfTV9tYXggPSBzdGQ6Om1heChfTV9tYXgsIF9fdG8pOworfQorCitpbmxpbmUgX19jb250YWluZXJfc2l6ZV9pbmZvOjpfX2NvbnRhaW5lcl9zaXplX2luZm8oX19zdGFja190IF9fc3RhY2ssIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX251bSkKKyAgICA6IF9fb2JqZWN0X2luZm9fYmFzZShfX3N0YWNrKSwgX01faW5pdCgwKSwgX01fbWF4KDApLCBfTV9pdGVtX21heCgwKSwgCisgICAgICBfTV9taW4oMCksIF9NX2l0ZW1fbWluKDApLCBfTV90b3RhbCgwKSwgX01faXRlbV90b3RhbCgwKSwgX01fY29zdCgwKSwgCisgICAgICBfTV9jb3VudCgwKSwgX01fcmVzaXplKDApCit7CisgIF9NX2luaXQgPSBfTV9tYXggPSBfX251bTsKKyAgX01faXRlbV9taW4gPSBfTV9pdGVtX21heCA9IF9NX2l0ZW1fdG90YWwgPSBfTV90b3RhbCA9IDA7CisgIF9NX21pbiA9IDA7CisgIF9NX2NvdW50ID0gMDsKKyAgX01fcmVzaXplID0gMDsKK30KKworaW5saW5lIHZvaWQgX19jb250YWluZXJfc2l6ZV9pbmZvOjpfX21lcmdlKGNvbnN0IF9fY29udGFpbmVyX3NpemVfaW5mbyYgX19vKQoreworICBfTV9pbml0ICAgICAgICA9IHN0ZDo6bWF4KF9NX2luaXQsIF9fby5fTV9pbml0KTsKKyAgX01fbWF4ICAgICAgICAgPSBzdGQ6Om1heChfTV9tYXgsIF9fby5fTV9tYXgpOworICBfTV9pdGVtX21heCAgICA9IHN0ZDo6bWF4KF9NX2l0ZW1fbWF4LCBfX28uX01faXRlbV9tYXgpOworICBfTV9taW4gICAgICAgICA9IHN0ZDo6bWluKF9NX21pbiwgX19vLl9NX21pbik7CisgIF9NX2l0ZW1fbWluICAgID0gc3RkOjptaW4oX01faXRlbV9taW4sIF9fby5fTV9pdGVtX21pbik7CisgIF9NX3RvdGFsICAgICAgKz0gX19vLl9NX3RvdGFsOworICBfTV9pdGVtX3RvdGFsICs9IF9fby5fTV9pdGVtX3RvdGFsOworICBfTV9jb3VudCAgICAgICs9IF9fby5fTV9jb3VudDsKKyAgX01fY29zdCAgICAgICArPSBfX28uX01fY29zdDsKKyAgX01fcmVzaXplICAgICArPSBfX28uX01fcmVzaXplOworfQorCitpbmxpbmUgX19jb250YWluZXJfc2l6ZV9pbmZvOjpfX2NvbnRhaW5lcl9zaXplX2luZm8oKQorICAgIDogX01faW5pdCgwKSwgX01fbWF4KDApLCBfTV9pdGVtX21heCgwKSwgX01fbWluKDApLCBfTV9pdGVtX21pbigwKSwKKyAgICAgIF9NX3RvdGFsKDApLCBfTV9pdGVtX3RvdGFsKDApLCBfTV9jb3N0KDApLCBfTV9jb3VudCgwKSwgX01fcmVzaXplKDApCit7Cit9CisKK2lubGluZSBfX2NvbnRhaW5lcl9zaXplX2luZm86Ol9fY29udGFpbmVyX3NpemVfaW5mbygKKyAgICBjb25zdCBfX2NvbnRhaW5lcl9zaXplX2luZm8mIF9fbykKKyAgICA6IF9fb2JqZWN0X2luZm9fYmFzZShfX28pCit7CisgIF9NX2luaXQgICAgICAgID0gX19vLl9NX2luaXQ7CisgIF9NX21heCAgICAgICAgID0gX19vLl9NX21heDsKKyAgX01faXRlbV9tYXggICAgPSBfX28uX01faXRlbV9tYXg7CisgIF9NX21pbiAgICAgICAgID0gX19vLl9NX21pbjsKKyAgX01faXRlbV9taW4gICAgPSBfX28uX01faXRlbV9taW47CisgIF9NX3RvdGFsICAgICAgID0gX19vLl9NX3RvdGFsOworICBfTV9pdGVtX3RvdGFsICA9IF9fby5fTV9pdGVtX3RvdGFsOworICBfTV9jb3N0ICAgICAgICA9IF9fby5fTV9jb3N0OworICBfTV9jb3VudCAgICAgICA9IF9fby5fTV9jb3VudDsKKyAgX01fcmVzaXplICAgICAgPSBfX28uX01fcmVzaXplOworfQorCisvKiogQGJyaWVmIEEgY29udGFpbmVyIHNpemUgaW5zdHJ1bWVudGF0aW9uIGxpbmUgaW4gdGhlIHN0YWNrIHRhYmxlLiAgKi8KK2NsYXNzIF9fY29udGFpbmVyX3NpemVfc3RhY2tfaW5mbzogcHVibGljIF9fY29udGFpbmVyX3NpemVfaW5mbworeworIHB1YmxpYzoKKyAgX19jb250YWluZXJfc2l6ZV9zdGFja19pbmZvKGNvbnN0IF9fY29udGFpbmVyX3NpemVfaW5mbyYgX19vKQorICAgICAgOiBfX2NvbnRhaW5lcl9zaXplX2luZm8oX19vKSB7fQorfTsKKworLyoqIEBicmllZiBDb250YWluZXIgc2l6ZSBpbnN0cnVtZW50YXRpb24gdHJhY2UgcHJvZHVjZXIuICAqLworY2xhc3MgX190cmFjZV9jb250YWluZXJfc2l6ZQorICAgIDogcHVibGljIF9fdHJhY2VfYmFzZTxfX2NvbnRhaW5lcl9zaXplX2luZm8sIF9fY29udGFpbmVyX3NpemVfc3RhY2tfaW5mbz4gCit7CisgcHVibGljOgorICB+X190cmFjZV9jb250YWluZXJfc2l6ZSgpIHt9CisgIF9fdHJhY2VfY29udGFpbmVyX3NpemUoKQorICAgICAgOiBfX3RyYWNlX2Jhc2U8X19jb250YWluZXJfc2l6ZV9pbmZvLCBfX2NvbnRhaW5lcl9zaXplX3N0YWNrX2luZm8+KCkge307CisKKyAgLy8gSW5zZXJ0IGEgbmV3IG5vZGUgYXQgY29uc3RydWN0IHdpdGggb2JqZWN0LCBjYWxsc3RhY2sgYW5kIGluaXRpYWwgc2l6ZS4gCisgIHZvaWQgX19pbnNlcnQoY29uc3QgX19vYmplY3RfdCBfX29iaiwgX19zdGFja190IF9fc3RhY2ssIHNpemVfdCBfX251bSk7CisgIC8vIENhbGwgYXQgZGVzdHJ1Y3Rpb24vY2xlYW4gdG8gc2V0IGNvbnRhaW5lciBmaW5hbCBzaXplLgorICB2b2lkIF9fZGVzdHJ1Y3QoY29uc3Qgdm9pZCogX19vYmosIHNpemVfdCBfX251bSwgc2l6ZV90IF9faW51bSk7CisgIHZvaWQgX19jb25zdHJ1Y3QoY29uc3Qgdm9pZCogX19vYmosIHNpemVfdCBfX2ludW0pOworICAvLyBDYWxsIGF0IHJlc2l6ZSB0byBzZXQgcmVzaXplL2Nvc3QgaW5mb3JtYXRpb24uCisgIHZvaWQgX19yZXNpemUoY29uc3Qgdm9pZCogX19vYmosIGludCBfX2Zyb20sIGludCBfX3RvKTsKK307CisKK2lubGluZSB2b2lkIF9fdHJhY2VfY29udGFpbmVyX3NpemU6Ol9faW5zZXJ0KGNvbnN0IF9fb2JqZWN0X3QgX19vYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0YWNrX3QgX19zdGFjaywgc2l6ZV90IF9fbnVtKQoreworICBfX2FkZF9vYmplY3QoX19vYmosIF9fY29udGFpbmVyX3NpemVfaW5mbyhfX3N0YWNrLCBfX251bSkpOworfQorCitpbmxpbmUgdm9pZCBfX2NvbnRhaW5lcl9zaXplX2luZm86Ol9fd3JpdGUoRklMRSogX19mKSBjb25zdAoreworICBmcHJpbnRmKF9fZiwgIiVadSAlWnUgJVp1ICVadSAlWnUgJVp1ICVadSAlWnUgJVp1ICVadVxuIiwgCisgICAgICAgICAgX01faW5pdCwgX01fY291bnQsIF9NX2Nvc3QsIF9NX3Jlc2l6ZSwgX01fbWluLCBfTV9tYXgsIF9NX3RvdGFsLAorICAgICAgICAgIF9NX2l0ZW1fbWluLCBfTV9pdGVtX21heCwgX01faXRlbV90b3RhbCk7Cit9CisKK2lubGluZSB2b2lkIF9fdHJhY2VfY29udGFpbmVyX3NpemU6Ol9fZGVzdHJ1Y3QoY29uc3Qgdm9pZCogX19vYmosIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19udW0sIHNpemVfdCBfX2ludW0pCit7CisgIGlmICghX19pc19vbigpKSByZXR1cm47CisKKyAgX19vYmplY3RfdCBfX29ial9oYW5kbGUgPSBzdGF0aWNfY2FzdDxfX29iamVjdF90PihfX29iaik7CisKKyAgX19jb250YWluZXJfc2l6ZV9pbmZvKiBfX29iamVjdF9pbmZvID0gX19nZXRfb2JqZWN0X2luZm8oX19vYmpfaGFuZGxlKTsKKyAgaWYgKCFfX29iamVjdF9pbmZvKQorICAgIHJldHVybjsKKworICBfX29iamVjdF9pbmZvLT5fX2Rlc3RydWN0KF9fbnVtLCBfX2ludW0pOworICBfX3JldGlyZV9vYmplY3QoX19vYmpfaGFuZGxlKTsKK30KKworaW5saW5lIHZvaWQgX190cmFjZV9jb250YWluZXJfc2l6ZTo6X19yZXNpemUoY29uc3Qgdm9pZCogX19vYmosIGludCBfX2Zyb20sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fdG8pCit7CisgIGlmICghX19pc19vbigpKSByZXR1cm47CisKKyAgX19jb250YWluZXJfc2l6ZV9pbmZvKiBfX29iamVjdF9pbmZvID0gX19nZXRfb2JqZWN0X2luZm8oX19vYmopOworICBpZiAoIV9fb2JqZWN0X2luZm8pCisgICAgcmV0dXJuOworCisgIF9fb2JqZWN0X2luZm8tPl9fcmVzaXplKF9fZnJvbSwgX190byk7Cit9CisKK30gLy8gbmFtZXNwYWNlIF9fZ251X3Byb2ZpbGUKKyNlbmRpZiAvKiBfR0xJQkNYWF9QUk9GSUxFX1BST0ZJTEVSX0NPTlRBSU5FUl9TSVpFX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX2hhc2hfZnVuYy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfaGFzaF9mdW5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJjMjZiZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX2hhc2hfZnVuYy5oCkBAIC0wLDAgKzEsMTg1IEBACisvLyAtKi0gQysrIC0qLQorLy8KKy8vIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLy8gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bworLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCisvLyBNQSAwMjExMS0xMzA3LCBVU0EuCisKKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZQorLy8gc29mdHdhcmUgbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcworLy8gaW5zdGFudGlhdGUgdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMKKy8vIGZpbGUsIG9yIHlvdSBjb21waWxlIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvCisvLyBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMgZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlCisvLyByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKy8vIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyIGludmFsaWRhdGUgYW55IG90aGVyCisvLyByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsCisvLyBQdWJsaWMgTGljZW5zZS4KKworLyoqIEBmaWxlIHByb2ZpbGUvaW1wbC9wcm9maWxlcl90cmFjZS5oCisgKiAgQGJyaWVmIERhdGEgc3RydWN0dXJlcyB0byByZXByZXNlbnQgcHJvZmlsaW5nIHRyYWNlcy4KKyAqLworCisvLyBXcml0dGVuIGJ5IExpeGlhIExpdSBhbmQgU2lsdml1cyBSdXMuCisKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9IQVNIX0ZVTkNfSAorI2RlZmluZSBfR0xJQkNYWF9QUk9GSUxFX1BST0ZJTEVSX0hBU0hfRlVOQ19IIDEKKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNlbHNlCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlci5oIgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl9ub2RlLmgiCisjaW5jbHVkZSAicHJvZmlsZS9pbXBsL3Byb2ZpbGVyX3RyYWNlLmgiCisKK25hbWVzcGFjZSBfX2dudV9wcm9maWxlCit7CisKKy8qKiBAYnJpZWYgQSBoYXNoIHBlcmZvcm1hbmNlIGluc3RydW1lbnRhdGlvbiBsaW5lIGluIHRoZSBvYmplY3QgdGFibGUuICAqLworY2xhc3MgX19oYXNoZnVuY19pbmZvOiBwdWJsaWMgX19vYmplY3RfaW5mb19iYXNlCit7CisgcHVibGljOgorICBfX2hhc2hmdW5jX2luZm8oKQorICAgICAgOl9NX2xvbmdlc3RfY2hhaW4oMCksIF9NX2FjY2Vzc2VzKDApLCBfTV9ob3BzKDApIHt9CisgIF9faGFzaGZ1bmNfaW5mbyhjb25zdCBfX2hhc2hmdW5jX2luZm8mIG8pOworICBfX2hhc2hmdW5jX2luZm8oX19zdGFja190IF9fc3RhY2spCisgICAgICA6IF9fb2JqZWN0X2luZm9fYmFzZShfX3N0YWNrKSwKKyAgICAgICAgX01fbG9uZ2VzdF9jaGFpbigwKSwgX01fYWNjZXNzZXMoMCksIF9NX2hvcHMoMCl7fSAKKyAgdmlydHVhbCB+X19oYXNoZnVuY19pbmZvKCkge30KKworICB2b2lkIF9fbWVyZ2UoY29uc3QgX19oYXNoZnVuY19pbmZvJiBfX28pOworICB2b2lkIF9fZGVzdHJ1Y3Qoc2l6ZV90IF9fY2hhaW4sIHNpemVfdCBfX2FjY2Vzc2VzLCBzaXplX3QgX19ob3BzKTsKKyAgdm9pZCBfX3dyaXRlKEZJTEUqIF9fZikgY29uc3Q7CisgIGZsb2F0IF9fbWFnbml0dWRlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KF9NX2hvcHMpOyB9CisgIGNvbnN0IGNoYXIqIF9fYWR2aWNlKCkgY29uc3QgeyByZXR1cm4gc3RyZHVwKCJjaGFuZ2UgaGFzaCBmdW5jdGlvbiIpOyB9CisKK3ByaXZhdGU6CisgIHNpemVfdCBfTV9sb25nZXN0X2NoYWluOworICBzaXplX3QgX01fYWNjZXNzZXM7CisgIHNpemVfdCBfTV9ob3BzOworfTsKKworaW5saW5lIF9faGFzaGZ1bmNfaW5mbzo6X19oYXNoZnVuY19pbmZvKGNvbnN0IF9faGFzaGZ1bmNfaW5mbyYgX19vKQorICAgIDogX19vYmplY3RfaW5mb19iYXNlKF9fbykKK3sKKyAgX01fbG9uZ2VzdF9jaGFpbiA9IF9fby5fTV9sb25nZXN0X2NoYWluOworICBfTV9hY2Nlc3NlcyAgICAgID0gX19vLl9NX2FjY2Vzc2VzOworICBfTV9ob3BzICAgICAgICAgID0gX19vLl9NX2hvcHM7Cit9CisKK2lubGluZSB2b2lkIF9faGFzaGZ1bmNfaW5mbzo6X19tZXJnZShjb25zdCBfX2hhc2hmdW5jX2luZm8mIF9fbykKK3sKKyAgX01fbG9uZ2VzdF9jaGFpbiAgPSBzdGQ6Om1heChfTV9sb25nZXN0X2NoYWluLCBfX28uX01fbG9uZ2VzdF9jaGFpbik7CisgIF9NX2FjY2Vzc2VzICAgICAgKz0gX19vLl9NX2FjY2Vzc2VzOworICBfTV9ob3BzICAgICAgICAgICs9IF9fby5fTV9ob3BzOworfQorCitpbmxpbmUgdm9pZCBfX2hhc2hmdW5jX2luZm86Ol9fZGVzdHJ1Y3Qoc2l6ZV90IF9fY2hhaW4sIHNpemVfdCBfX2FjY2Vzc2VzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ob3BzKQoreyAKKyAgX01fbG9uZ2VzdF9jaGFpbiAgPSBzdGQ6Om1heChfTV9sb25nZXN0X2NoYWluLCBfX2NoYWluKTsKKyAgX01fYWNjZXNzZXMgICAgICArPSBfX2FjY2Vzc2VzOworICBfTV9ob3BzICAgICAgICAgICs9IF9faG9wczsKK30KKworLyoqIEBicmllZiBBIGhhc2ggcGVyZm9ybWFuY2UgaW5zdHJ1bWVudGF0aW9uIGxpbmUgaW4gdGhlIHN0YWNrIHRhYmxlLiAgKi8KK2NsYXNzIF9faGFzaGZ1bmNfc3RhY2tfaW5mbzogcHVibGljIF9faGFzaGZ1bmNfaW5mbyB7CisgcHVibGljOgorICBfX2hhc2hmdW5jX3N0YWNrX2luZm8oY29uc3QgX19oYXNoZnVuY19pbmZvJiBfX28pIDogX19oYXNoZnVuY19pbmZvKF9fbykge30KK307CisKKy8qKiBAYnJpZWYgSGFzaCBwZXJmb3JtYW5jZSBpbnN0cnVtZW50YXRpb24gcHJvZHVjZXIuICAqLworY2xhc3MgX190cmFjZV9oYXNoX2Z1bmMKKyAgICA6IHB1YmxpYyBfX3RyYWNlX2Jhc2U8X19oYXNoZnVuY19pbmZvLCBfX2hhc2hmdW5jX3N0YWNrX2luZm8+IAoreworIHB1YmxpYzoKKyAgX190cmFjZV9oYXNoX2Z1bmMoKTsKKyAgfl9fdHJhY2VfaGFzaF9mdW5jKCkge30KKworICAvLyBJbnNlcnQgYSBuZXcgbm9kZSBhdCBjb25zdHJ1Y3Qgd2l0aCBvYmplY3QsIGNhbGxzdGFjayBhbmQgaW5pdGlhbCBzaXplLiAKKyAgdm9pZCBfX2luc2VydChfX29iamVjdF90IF9fb2JqLCBfX3N0YWNrX3QgX19zdGFjayk7CisgIC8vIENhbGwgYXQgZGVzdHJ1Y3Rpb24vY2xlYW4gdG8gc2V0IGNvbnRhaW5lciBmaW5hbCBzaXplLgorICB2b2lkIF9fZGVzdHJ1Y3QoY29uc3Qgdm9pZCogX19vYmosIHNpemVfdCBfX2NoYWluLAorICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fYWNjZXNzZXMsIHNpemVfdCBfX2hvcHMpOworfTsKKworaW5saW5lIF9fdHJhY2VfaGFzaF9mdW5jOjpfX3RyYWNlX2hhc2hfZnVuYygpCisgICAgOiBfX3RyYWNlX2Jhc2U8X19oYXNoZnVuY19pbmZvLCBfX2hhc2hmdW5jX3N0YWNrX2luZm8+KCkKK3sKKyAgX19pZCA9ICJoYXNoLWRpc3RyIjsKK30KKworaW5saW5lIHZvaWQgX190cmFjZV9oYXNoX2Z1bmM6Ol9faW5zZXJ0KF9fb2JqZWN0X3QgX19vYmosIF9fc3RhY2tfdCBfX3N0YWNrKQoreworICBfX2FkZF9vYmplY3QoX19vYmosIF9faGFzaGZ1bmNfaW5mbyhfX3N0YWNrKSk7Cit9CisKK2lubGluZSB2b2lkIF9faGFzaGZ1bmNfaW5mbzo6X193cml0ZShGSUxFKiBfX2YpIGNvbnN0Cit7CisgIGZwcmludGYoX19mLCAiJVp1ICVadSAlWnVcbiIsIF9NX2hvcHMsIF9NX2FjY2Vzc2VzLCBfTV9sb25nZXN0X2NoYWluKTsKK30KKworaW5saW5lIHZvaWQgX190cmFjZV9oYXNoX2Z1bmM6Ol9fZGVzdHJ1Y3QoY29uc3Qgdm9pZCogX19vYmosIHNpemVfdCBfX2NoYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fYWNjZXNzZXMsIHNpemVfdCBfX2hvcHMpCit7CisgIGlmICghX19pc19vbigpKSByZXR1cm47CisKKyAgLy8gRmlyc3QgZmluZCB0aGUgaXRlbSBmcm9tIHRoZSBsaXZlIG9iamVjdHMgYW5kIHVwZGF0ZSB0aGUgaW5mb3JtYXRpb25zLgorICBfX2hhc2hmdW5jX2luZm8qIF9fb2JqcyA9IF9fZ2V0X29iamVjdF9pbmZvKF9fb2JqKTsKKyAgaWYgKCFfX29ianMpCisgICAgcmV0dXJuOworCisgIF9fb2Jqcy0+X19kZXN0cnVjdChfX2NoYWluLCBfX2FjY2Vzc2VzLCBfX2hvcHMpOworICBfX3JldGlyZV9vYmplY3QoX19vYmopOworfQorCitpbmxpbmUgdm9pZCBfX3RyYWNlX2hhc2hfZnVuY19pbml0KCkKK3sKKyAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX2hhc2hfZnVuYykgPSBuZXcgX190cmFjZV9oYXNoX2Z1bmMoKTsKK30KKworaW5saW5lIHZvaWQgX190cmFjZV9oYXNoX2Z1bmNfcmVwb3J0KEZJTEUqIF9fZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3dhcm5pbmdfdmVjdG9yX3QmIF9fd2FybmluZ3MpCit7CisgIGlmIChfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfaGFzaF9mdW5jKSkgeworICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19oYXNoX2Z1bmMpLT5fX2NvbGxlY3Rfd2FybmluZ3MoX193YXJuaW5ncyk7CisgICAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX2hhc2hfZnVuYyktPl9fd3JpdGUoX19mKTsKKyAgfQorfQorCitpbmxpbmUgdm9pZCBfX3RyYWNlX2hhc2hfZnVuY19jb25zdHJ1Y3QoY29uc3Qgdm9pZCogX19vYmopCit7CisgIGlmICghX19wcm9mY3h4X2luaXQoKSkgcmV0dXJuOworCisgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19oYXNoX2Z1bmMpLT5fX2luc2VydChfX29iaiwgX19nZXRfc3RhY2soKSk7Cit9CisKK2lubGluZSB2b2lkIF9fdHJhY2VfaGFzaF9mdW5jX2Rlc3RydWN0KGNvbnN0IHZvaWQqIF9fb2JqLCBzaXplX3QgX19jaGFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2FjY2Vzc2VzLCBzaXplX3QgX19ob3BzKQoreworICBpZiAoIV9fcHJvZmN4eF9pbml0KCkpIHJldHVybjsKKworICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfaGFzaF9mdW5jKS0+X19kZXN0cnVjdChfX29iaiwgX19jaGFpbiwgX19hY2Nlc3NlcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faG9wcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIF9fZ251X3Byb2ZpbGUKKyNlbmRpZiAvKiBfR0xJQkNYWF9QUk9GSUxFX1BST0ZJTEVSX0hBU0hfRlVOQ19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Byb2ZpbGUvaW1wbC9wcm9maWxlcl9oYXNodGFibGVfc2l6ZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfaGFzaHRhYmxlX3NpemUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjQ4ZjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfaGFzaHRhYmxlX3NpemUuaApAQCAtMCwwICsxLDEwOCBAQAorLy8gLSotIEMrKyAtKi0KKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy8vIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KKy8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAorLy8gTUEgMDIxMTEtMTMwNywgVVNBLgorCisvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUKKy8vIHNvZnR3YXJlIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMKKy8vIGluc3RhbnRpYXRlIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzCisvLyBmaWxlLCBvciB5b3UgY29tcGlsZSB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0bworLy8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZQorLy8gcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisvLyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlciBpbnZhbGlkYXRlIGFueSBvdGhlcgorLy8gcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbAorLy8gUHVibGljIExpY2Vuc2UuCisKKy8qKiBAZmlsZSBwcm9maWxlL2ltcGwvcHJvZmlsZXJfaGFzaHRhYmxlX3NpemUuaAorICogIEBicmllZiBDb2xsZWN0aW9uIG9mIGhhc2h0YWJsZSBzaXplIHRyYWNlcy4KKyAqLworCisvLyBXcml0dGVuIGJ5IExpeGlhIExpdSBhbmQgU2lsdml1cyBSdXMuCisKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9IQVNIVEFCTEVfU0laRV9ICisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfUFJPRklMRVJfSEFTSFRBQkxFX1NJWkVfSCAxCisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPGNzdHJpbmc+CisjZWxzZQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKyNpbmNsdWRlICJwcm9maWxlL2ltcGwvcHJvZmlsZXIuaCIKKyNpbmNsdWRlICJwcm9maWxlL2ltcGwvcHJvZmlsZXJfbm9kZS5oIgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl90cmFjZS5oIgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl9zdGF0ZS5oIgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl9jb250YWluZXJfc2l6ZS5oIgorCituYW1lc3BhY2UgX19nbnVfcHJvZmlsZQoreworCisvKiogQGJyaWVmIEhhc2h0YWJsZSBzaXplIGluc3RydW1lbnRhdGlvbiB0cmFjZSBwcm9kdWNlci4gICovCitjbGFzcyBfX3RyYWNlX2hhc2h0YWJsZV9zaXplIDogcHVibGljIF9fdHJhY2VfY29udGFpbmVyX3NpemUKK3sKKyBwdWJsaWM6CisgIF9fdHJhY2VfaGFzaHRhYmxlX3NpemUoKSA6IF9fdHJhY2VfY29udGFpbmVyX3NpemUoKQorICB7CisgICAgX19pZCA9ICJoYXNodGFibGUtc2l6ZSI7CisgIH0KK307CisKK2lubGluZSB2b2lkIF9fdHJhY2VfaGFzaHRhYmxlX3NpemVfaW5pdCgpCit7CisgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19oYXNodGFibGVfc2l6ZSkgPSBuZXcgX190cmFjZV9oYXNodGFibGVfc2l6ZSgpOworfQorCitpbmxpbmUgdm9pZCBfX3RyYWNlX2hhc2h0YWJsZV9zaXplX3JlcG9ydChGSUxFKiBfX2YsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193YXJuaW5nX3ZlY3Rvcl90JiBfX3dhcm5pbmdzKQoreworICBpZiAoX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX2hhc2h0YWJsZV9zaXplKSkgeworICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19oYXNodGFibGVfc2l6ZSktPl9fY29sbGVjdF93YXJuaW5ncyhfX3dhcm5pbmdzKTsKKyAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfaGFzaHRhYmxlX3NpemUpLT5fX3dyaXRlKF9fZik7CisgIH0KK30KKworaW5saW5lIHZvaWQgX190cmFjZV9oYXNodGFibGVfc2l6ZV9jb25zdHJ1Y3QoY29uc3Qgdm9pZCogX19vYmosIHNpemVfdCBfX251bSkKK3sKKyAgaWYgKCFfX3Byb2ZjeHhfaW5pdCgpKSByZXR1cm47CisgIAorICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfaGFzaHRhYmxlX3NpemUpLT5fX2luc2VydChfX29iaiwgX19nZXRfc3RhY2soKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19udW0pOworfQorCitpbmxpbmUgdm9pZCBfX3RyYWNlX2hhc2h0YWJsZV9zaXplX2Rlc3RydWN0KGNvbnN0IHZvaWQqIF9fb2JqLCBzaXplX3QgX19udW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19pbnVtKQoreworICBpZiAoIV9fcHJvZmN4eF9pbml0KCkpIHJldHVybjsKKworICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfaGFzaHRhYmxlX3NpemUpLT5fX2Rlc3RydWN0KF9fb2JqLCBfX251bSwgX19pbnVtKTsKK30KKworaW5saW5lIHZvaWQgX190cmFjZV9oYXNodGFibGVfc2l6ZV9yZXNpemUoY29uc3Qgdm9pZCogX19vYmosIHNpemVfdCBfX2Zyb20sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fdG8pCit7CisgIGlmICghX19wcm9mY3h4X2luaXQoKSkgcmV0dXJuOworCisgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19oYXNodGFibGVfc2l6ZSktPl9fcmVzaXplKF9fb2JqLCBfX2Zyb20sIF9fdG8pOworfQorCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wcm9maWxlCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9QUk9GSUxFX1BST0ZJTEVSX0hBU0hUQUJMRV9TSVpFX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX2xpc3RfdG9fc2xpc3QuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX2xpc3RfdG9fc2xpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzNiZGYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfbGlzdF90b19zbGlzdC5oCkBAIC0wLDAgKzEsMTgyIEBACisvLyAtKi0gQysrIC0qLQorLy8KKy8vIENvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLy8gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bworLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCisvLyBNQSAwMjExMS0xMzA3LCBVU0EuCisKKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZQorLy8gc29mdHdhcmUgbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcworLy8gaW5zdGFudGlhdGUgdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMKKy8vIGZpbGUsIG9yIHlvdSBjb21waWxlIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvCisvLyBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMgZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlCisvLyByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKy8vIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyIGludmFsaWRhdGUgYW55IG90aGVyCisvLyByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsCisvLyBQdWJsaWMgTGljZW5zZS4KKworLyoqIEBmaWxlIHByb2ZpbGUvaW1wbC9wcm9maWxlcl9saXN0X3RvX3NsaXN0LmgKKyAqICBAYnJpZWYgRGlhZ25vc3RpY3MgZm9yIGxpc3QgdG8gc2xpc3QuCisgKi8KKworLy8gV3JpdHRlbiBieSBDaGFuZ2hlZSBKdW5nLgorCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfUFJPRklMRVJfTElTVF9UT19TTElTVF9ICisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfUFJPRklMRVJfTElTVF9UT19TTElTVF9IIDEKKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNlbHNlCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlci5oIgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl9ub2RlLmgiCisjaW5jbHVkZSAicHJvZmlsZS9pbXBsL3Byb2ZpbGVyX3RyYWNlLmgiCisKK25hbWVzcGFjZSBfX2dudV9wcm9maWxlCit7CisKK2NsYXNzIF9fbGlzdDJzbGlzdF9pbmZvOiBwdWJsaWMgX19vYmplY3RfaW5mb19iYXNlCit7CisgcHVibGljOgorICBfX2xpc3Qyc2xpc3RfaW5mbygpIDogX01fcmV3aW5kKGZhbHNlKSwgX01fb3BlcmF0aW9ucygwKSB7fQorICBfX2xpc3Qyc2xpc3RfaW5mbyhfX3N0YWNrX3QgX19zdGFjaykgCisgICAgICA6IF9NX3Jld2luZChmYWxzZSksIF9NX29wZXJhdGlvbnMoMCksX19vYmplY3RfaW5mb19iYXNlKF9fc3RhY2spIHt9CisgIHZpcnR1YWwgfl9fbGlzdDJzbGlzdF9pbmZvKCkge30KKyAgX19saXN0MnNsaXN0X2luZm8oY29uc3QgX19saXN0MnNsaXN0X2luZm8mIF9fbykgOiBfX29iamVjdF9pbmZvX2Jhc2UoX19vKQorICB7IF9NX3Jld2luZCA9IF9fby5fTV9yZXdpbmQ7IF9NX29wZXJhdGlvbnMgPSBfX28uX01fb3BlcmF0aW9uczsgfQorICAvLyBYWFg6IHRoZSBtYWduaXR1ZGUgc2hvdWxkIGJlIG11bHRpcGxpZWQgd2l0aCBhIGNvbnN0YW50IGZhY3RvciBGLAorICAvLyB3aGVyZSBGIGlzIDEgd2hlbiB0aGUgbWFsbG9jIHNpemUgY2xhc3Mgb2YgbGlzdCBub2RlcyBpcyBkaWZmZXJlbnQKKyAgLy8gZnJvbSB0aGUgbWFsbG9jIHNpemUgY2xhc3Mgb2Ygc2xpc3Qgbm9kZXMuICBXaGVuIHRoZXkgZmFsbCBpbnRvIHRoZSBzYW1lCisgIC8vIGNsYXNzLCB0aGUgb25seSBzbGlzdCBiZW5lZml0IGlzIGZyb20gaGF2aW5nIHRvIHNldCBmZXdlciBsaW5rcywgc28KKyAgLy8gdGhlIGZhY3RvciBGIHNob3VsZCBiZSBtdWNoIHNtYWxsZXIsIGNsb3NlciB0byAwIHRoYW4gdG8gMS4KKyAgLy8gVGhpcyBjb3VsZCBiZSBpbXBsZW1lbnRlZCBieSBwYXNzaW5nIHRoZSBzaXplIGNsYXNzZXMgaW4gdGhlIGNvbmZpZyBmaWxlLgorICAvLyBGb3Igbm93LCB3ZSBhbHdheXMgYXNzdW1lIEYgdG8gYmUgMS4KKyAgZmxvYXQgX19tYWduaXR1ZGUoKSBjb25zdAorICB7IGlmICghX01fcmV3aW5kKSByZXR1cm4gX01fb3BlcmF0aW9uczsgZWxzZSByZXR1cm4gMDsgfQorICB2b2lkIF9fbWVyZ2UoY29uc3QgX19saXN0MnNsaXN0X2luZm8mIF9fbykge307CisgIHZvaWQgX193cml0ZShGSUxFKiBfX2YpIGNvbnN0OworICBjb25zdCBjaGFyKiBfX2FkdmljZSgpIGNvbnN0CisgIHsgcmV0dXJuIHN0cmR1cCgiY2hhbmdlIHN0ZDo6bGlzdCB0byBzdGQ6OmZvcndhcmRfbGlzdCIpOyB9CisgIHZvaWQgX19vcHJfcmV3aW5kKCkgeyBfTV9yZXdpbmQgPSB0cnVlOyBfTV92YWxpZCA9IGZhbHNlO30KKyAgdm9pZCBfX3JlY29yZF9vcGVyYXRpb24oKSB7IF9NX29wZXJhdGlvbnMrKzsgfQorICBib29sIF9faGFzX3Jld2luZCgpIHsgcmV0dXJuIF9NX3Jld2luZDsgfQorCitwcml2YXRlOgorICBib29sIF9NX3Jld2luZDsKKyAgc2l6ZV90IF9NX29wZXJhdGlvbnM7Cit9OworCitjbGFzcyBfX2xpc3Qyc2xpc3Rfc3RhY2tfaW5mbzogcHVibGljIF9fbGlzdDJzbGlzdF9pbmZvIHsKKyBwdWJsaWM6CisgIF9fbGlzdDJzbGlzdF9zdGFja19pbmZvKGNvbnN0IF9fbGlzdDJzbGlzdF9pbmZvJiBfX28pIAorICAgICAgOiBfX2xpc3Qyc2xpc3RfaW5mbyhfX28pIHt9Cit9OworCitjbGFzcyBfX3RyYWNlX2xpc3RfdG9fc2xpc3QKKyAgICA6IHB1YmxpYyBfX3RyYWNlX2Jhc2U8X19saXN0MnNsaXN0X2luZm8sIF9fbGlzdDJzbGlzdF9zdGFja19pbmZvPiAKK3sKKyBwdWJsaWM6CisgIH5fX3RyYWNlX2xpc3RfdG9fc2xpc3QoKSB7fQorICBfX3RyYWNlX2xpc3RfdG9fc2xpc3QoKSAKKyAgICAgIDogX190cmFjZV9iYXNlPF9fbGlzdDJzbGlzdF9pbmZvLCBfX2xpc3Qyc2xpc3Rfc3RhY2tfaW5mbz4oKQorICB7IF9faWQgPSAibGlzdC10by1zbGlzdCI7IH0KKyAgdm9pZCBfX29wcl9yZXdpbmQoY29uc3Qgdm9pZCogX19vYmopOworICB2b2lkIF9fcmVjb3JkX29wZXJhdGlvbihjb25zdCB2b2lkKiBfX29iaik7CisgIHZvaWQgX19pbnNlcnQoY29uc3QgX19vYmplY3RfdCBfX29iaiwgX19zdGFja190IF9fc3RhY2spCisgIHsgX19hZGRfb2JqZWN0KF9fb2JqLCBfX2xpc3Qyc2xpc3RfaW5mbyhfX3N0YWNrKSk7IH0KKyAgdm9pZCBfX2Rlc3RydWN0KGNvbnN0IHZvaWQqIF9fb2JqKTsKK307CisKK2lubGluZSB2b2lkIF9fbGlzdDJzbGlzdF9pbmZvOjpfX3dyaXRlKEZJTEUqIF9fZikgY29uc3QKK3sKKyAgZnByaW50ZihfX2YsICIlc1xuIiwgX01fcmV3aW5kID8gImludmFsaWQiIDogInZhbGlkIik7Cit9CisKK2lubGluZSB2b2lkIF9fdHJhY2VfbGlzdF90b19zbGlzdDo6X19kZXN0cnVjdChjb25zdCB2b2lkKiBfX29iaikKK3sKKyAgaWYgKCFfX2lzX29uKCkpCisgICAgcmV0dXJuOworCisgIF9fbGlzdDJzbGlzdF9pbmZvKiBfX3JlcyA9IF9fZ2V0X29iamVjdF9pbmZvKF9fb2JqKTsKKyAgaWYgKCFfX3JlcykKKyAgICByZXR1cm47CisKKyAgX19yZXRpcmVfb2JqZWN0KF9fb2JqKTsKK30KKworaW5saW5lIHZvaWQgX190cmFjZV9saXN0X3RvX3NsaXN0X2luaXQoKQoreworICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbGlzdF90b19zbGlzdCkgPSBuZXcgX190cmFjZV9saXN0X3RvX3NsaXN0KCk7Cit9CisKK2lubGluZSB2b2lkIF9fdHJhY2VfbGlzdF90b19zbGlzdF9yZXBvcnQoRklMRSogX19mLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd2FybmluZ192ZWN0b3JfdCYgX193YXJuaW5ncykKK3sKKyAgaWYgKF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19saXN0X3RvX3NsaXN0KSkgeworICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19saXN0X3RvX3NsaXN0KS0+X19jb2xsZWN0X3dhcm5pbmdzKF9fd2FybmluZ3MpOworICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19saXN0X3RvX3NsaXN0KS0+X193cml0ZShfX2YpOworICB9Cit9CisKK2lubGluZSB2b2lkIF9fdHJhY2VfbGlzdF90b19zbGlzdDo6X19vcHJfcmV3aW5kKGNvbnN0IHZvaWQqIF9fb2JqKQoreworICBfX2xpc3Qyc2xpc3RfaW5mbyogX19yZXMgPSBfX2dldF9vYmplY3RfaW5mbyhfX29iaik7CisgIGlmIChfX3JlcykKKyAgICBfX3Jlcy0+X19vcHJfcmV3aW5kKCk7Cit9CisKK2lubGluZSB2b2lkIF9fdHJhY2VfbGlzdF90b19zbGlzdDo6X19yZWNvcmRfb3BlcmF0aW9uKGNvbnN0IHZvaWQqIF9fb2JqKQoreworICBfX2xpc3Qyc2xpc3RfaW5mbyogX19yZXMgPSBfX2dldF9vYmplY3RfaW5mbyhfX29iaik7CisgIGlmIChfX3JlcykKKyAgICBfX3Jlcy0+X19yZWNvcmRfb3BlcmF0aW9uKCk7Cit9CisKK2lubGluZSB2b2lkIF9fdHJhY2VfbGlzdF90b19zbGlzdF9yZXdpbmQoY29uc3Qgdm9pZCogX19vYmopIAoreworICBpZiAoIV9fcHJvZmN4eF9pbml0KCkpIHJldHVybjsKKworICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbGlzdF90b19zbGlzdCktPl9fb3ByX3Jld2luZChfX29iaik7Cit9CisKK2lubGluZSB2b2lkIF9fdHJhY2VfbGlzdF90b19zbGlzdF9vcGVyYXRpb24oY29uc3Qgdm9pZCogX19vYmopIAoreworICBpZiAoIV9fcHJvZmN4eF9pbml0KCkpIHJldHVybjsKKworICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbGlzdF90b19zbGlzdCktPl9fcmVjb3JkX29wZXJhdGlvbihfX29iaik7Cit9CisKK2lubGluZSB2b2lkIF9fdHJhY2VfbGlzdF90b19zbGlzdF9jb25zdHJ1Y3QoY29uc3Qgdm9pZCogX19vYmopCit7CisgIGlmICghX19wcm9mY3h4X2luaXQoKSkgcmV0dXJuOworCisgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19saXN0X3RvX3NsaXN0KS0+X19pbnNlcnQoX19vYmosIF9fZ2V0X3N0YWNrKCkpOworfQorCitpbmxpbmUgdm9pZCBfX3RyYWNlX2xpc3RfdG9fc2xpc3RfZGVzdHJ1Y3QoY29uc3Qgdm9pZCogX19vYmopCit7CisgIGlmICghX19wcm9mY3h4X2luaXQoKSkgcmV0dXJuOworCisgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19saXN0X3RvX3NsaXN0KS0+X19kZXN0cnVjdChfX29iaik7Cit9CisKK30gLy8gbmFtZXNwYWNlIF9fZ251X3Byb2ZpbGUKKyNlbmRpZiAvKiBfR0xJQkNYWF9QUk9GSUxFX1BST0ZJTEVSX0xJU1RfVE9fU0xJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfbGlzdF90b192ZWN0b3IuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX2xpc3RfdG9fdmVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkwZDMzNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX2xpc3RfdG9fdmVjdG9yLmgKQEAgLTAsMCArMSwzMTMgQEAKKy8vIC0qLSBDKysgLSotCisvLworLy8gQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisvLyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCisvLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwKKy8vIE1BIDAyMTExLTEzMDcsIFVTQS4KKworLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlCisvLyBzb2Z0d2FyZSBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzCisvLyBpbnN0YW50aWF0ZSB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcworLy8gZmlsZSwgb3IgeW91IGNvbXBpbGUgdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8KKy8vIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUKKy8vIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworLy8gTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIgaW52YWxpZGF0ZSBhbnkgb3RoZXIKKy8vIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwKKy8vIFB1YmxpYyBMaWNlbnNlLgorCisvKiogQGZpbGUgcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX2xpc3RfdG9fdmVjdG9yLmgKKyAqICBAYnJpZWYgZGlhZ25vc3RpY3MgZm9yIGxpc3QgdG8gdmVjdG9yLgorICovCisKKy8vIFdyaXR0ZW4gYnkgQ2hhbmdoZWUgSnVuZy4KKworI2lmbmRlZiBfR0xJQkNYWF9QUk9GSUxFX1BST0ZJTEVSX0xJU1RfVE9fVkVDVE9SX0gKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9MSVNUX1RPX1ZFQ1RPUl9IIDEKKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisjaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlci5oIgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl9ub2RlLmgiCisjaW5jbHVkZSAicHJvZmlsZS9pbXBsL3Byb2ZpbGVyX3RyYWNlLmgiCisKK25hbWVzcGFjZSBfX2dudV9wcm9maWxlCit7CisKKy8qKiBAYnJpZWYgQSBsaXN0LXRvLXZlY3RvciBpbnN0cnVtZW50YXRpb24gbGluZSBpbiB0aGUgb2JqZWN0IHRhYmxlLiAgKi8KK2NsYXNzIF9fbGlzdDJ2ZWN0b3JfaW5mbzogcHVibGljIF9fb2JqZWN0X2luZm9fYmFzZQoreworIHB1YmxpYzoKKyAgX19saXN0MnZlY3Rvcl9pbmZvKCkKKyAgICAgIDpfTV9zaGlmdF9jb3VudCgwKSwgX01faXRlcmF0ZSgwKSwgX01fcmVzaXplKDApLCBfTV9saXN0X2Nvc3QoMCksCisgICAgICAgX01fdmVjdG9yX2Nvc3QoMCksIF9NX3ZhbGlkKHRydWUpLCBfTV9tYXhfc2l6ZSgwKSB7fQorICBfX2xpc3QydmVjdG9yX2luZm8oX19zdGFja190IF9fc3RhY2spCisgICAgICA6IF9fb2JqZWN0X2luZm9fYmFzZShfX3N0YWNrKSwgX01fc2hpZnRfY291bnQoMCksIF9NX2l0ZXJhdGUoMCksCisgICAgICAgIF9NX3Jlc2l6ZSgwKSwgX01fbGlzdF9jb3N0KDApLCBfTV92ZWN0b3JfY29zdCgwKSwgX01fdmFsaWQodHJ1ZSksCisgICAgICAgIF9NX21heF9zaXplKDApIHt9CisgIHZpcnR1YWwgfl9fbGlzdDJ2ZWN0b3JfaW5mbygpIHt9CisgIF9fbGlzdDJ2ZWN0b3JfaW5mbyhjb25zdCBfX2xpc3QydmVjdG9yX2luZm8mIF9fbyk7CisgIHZvaWQgX19tZXJnZShjb25zdCBfX2xpc3QydmVjdG9yX2luZm8mIF9fbyk7CisgIHZvaWQgX193cml0ZShGSUxFKiBfX2YpIGNvbnN0OworICBmbG9hdCBfX21hZ25pdHVkZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2xpc3RfY29zdCAtIF9NX3ZlY3Rvcl9jb3N0OyB9CisgIGNvbnN0IGNoYXIqIF9fYWR2aWNlKCkgY29uc3Q7CisgIHNpemVfdCBfX3NoaWZ0X2NvdW50KCkgeyByZXR1cm4gX01fc2hpZnRfY291bnQ7IH0KKyAgc2l6ZV90IF9faXRlcmF0ZSgpICAgeyByZXR1cm4gX01faXRlcmF0ZTsgfQorICBmbG9hdCBfX2xpc3RfY29zdCgpIHsgcmV0dXJuIF9NX2xpc3RfY29zdDsgfQorICBzaXplX3QgX19yZXNpemUoKSB7IHJldHVybiBfTV9yZXNpemU7IH0KKyAgdm9pZCBfX3NldF9saXN0X2Nvc3QoZmxvYXQgX19sYykgeyBfTV9saXN0X2Nvc3QgPSBfX2xjOyB9CisgIHZvaWQgX19zZXRfdmVjdG9yX2Nvc3QoZmxvYXQgX192YykgeyBfTV92ZWN0b3JfY29zdCA9IF9fdmM7IH0KKyAgYm9vbCBfX2lzX3ZhbGlkKCkgeyByZXR1cm4gX01fdmFsaWQ7IH0KKyAgdm9pZCBfX3NldF9pbnZhbGlkKCkgeyBfTV92YWxpZCA9IGZhbHNlOyB9CisKKyAgdm9pZCBfX29wcl9pbnNlcnQoc2l6ZV90IF9fc2hpZnQsIHNpemVfdCBfX3NpemUpOworICB2b2lkIF9fb3ByX2l0ZXJhdGUoc2l6ZV90IF9fbnVtKSB7IF9NX2l0ZXJhdGUgKz0gX19udW07fQorCisgIHZvaWQgX19yZXNpemUoc2l6ZV90IF9fZnJvbSwgc2l6ZV90IF9fdG8pOworCitwcml2YXRlOgorICBzaXplX3QgX01fc2hpZnRfY291bnQ7CisgIHNpemVfdCBfTV9pdGVyYXRlOworICBzaXplX3QgX01fcmVzaXplOworICBmbG9hdCBfTV9saXN0X2Nvc3Q7CisgIGZsb2F0IF9NX3ZlY3Rvcl9jb3N0OworICBib29sICBfTV92YWxpZDsKKyAgc2l6ZV90IF9NX21heF9zaXplOworfTsKKworaW5saW5lIF9fbGlzdDJ2ZWN0b3JfaW5mbzo6X19saXN0MnZlY3Rvcl9pbmZvKGNvbnN0IF9fbGlzdDJ2ZWN0b3JfaW5mbyYgX19vKQorICAgIDogX19vYmplY3RfaW5mb19iYXNlKF9fbykKK3sKKyAgX01fc2hpZnRfY291bnQgID0gX19vLl9NX3NoaWZ0X2NvdW50OworICBfTV9pdGVyYXRlICAgICAgPSBfX28uX01faXRlcmF0ZTsKKyAgX01fdmVjdG9yX2Nvc3QgID0gX19vLl9NX3ZlY3Rvcl9jb3N0OworICBfTV9saXN0X2Nvc3QgICAgPSBfX28uX01fbGlzdF9jb3N0OworICBfTV92YWxpZCAgICAgICAgPSBfX28uX01fdmFsaWQ7CisgIF9NX3Jlc2l6ZSAgICAgICA9IF9fby5fTV9yZXNpemU7CisgIF9NX21heF9zaXplICAgICA9IF9fby5fTV9tYXhfc2l6ZTsKK30KKworaW5saW5lIGNvbnN0IGNoYXIqIF9fbGlzdDJ2ZWN0b3JfaW5mbzo6X19hZHZpY2UoKSBjb25zdCB7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIF9fc3N0cmVhbTsKKyAgX19zc3RyZWFtIAorICAgICAgPDwgImNoYW5nZSBzdGQ6Omxpc3QgdG8gc3RkOjp2ZWN0b3IgYW5kIGl0cyBpbml0aWFsIHNpemUgZnJvbSAwIHRvICIKKyAgICAgIDw8IF9NX21heF9zaXplOworICByZXR1cm4gc3RyZHVwKF9fc3N0cmVhbS5zdHIoKS5jX3N0cigpKTsKK30KKworaW5saW5lIHZvaWQgX19saXN0MnZlY3Rvcl9pbmZvOjpfX21lcmdlKGNvbnN0IF9fbGlzdDJ2ZWN0b3JfaW5mbyYgX19vKQoreworICBfTV9zaGlmdF9jb3VudCAgKz0gX19vLl9NX3NoaWZ0X2NvdW50OworICBfTV9pdGVyYXRlICAgICAgKz0gX19vLl9NX2l0ZXJhdGU7CisgIF9NX3ZlY3Rvcl9jb3N0ICArPSBfX28uX01fdmVjdG9yX2Nvc3Q7CisgIF9NX2xpc3RfY29zdCAgICArPSBfX28uX01fbGlzdF9jb3N0OworICBfTV92YWxpZCAgICAgICAgJj0gX19vLl9NX3ZhbGlkOworICBfTV9yZXNpemUgICAgICAgKz0gX19vLl9NX3Jlc2l6ZTsKKyAgX01fbWF4X3NpemUgICAgID0gc3RkOjptYXgoIF9NX21heF9zaXplLCBfX28uX01fbWF4X3NpemUpOworfQorCitpbmxpbmUgdm9pZCBfX2xpc3QydmVjdG9yX2luZm86Ol9fb3ByX2luc2VydChzaXplX3QgX19zaGlmdCwgc2l6ZV90IF9fc2l6ZSkgCit7CisgIF9NX3NoaWZ0X2NvdW50ICs9IF9fc2hpZnQ7CisgIF9NX21heF9zaXplID0gc3RkOjptYXgoX01fbWF4X3NpemUsIF9fc2l6ZSk7Cit9CisKK2lubGluZSB2b2lkIF9fbGlzdDJ2ZWN0b3JfaW5mbzo6X19yZXNpemUoc2l6ZV90IF9fZnJvbSwgc2l6ZV90IF9fdG8pCit7CisgIF9NX3Jlc2l6ZSArPSBfX2Zyb207Cit9CisKK2NsYXNzIF9fbGlzdDJ2ZWN0b3Jfc3RhY2tfaW5mbzogcHVibGljIF9fbGlzdDJ2ZWN0b3JfaW5mbyB7CisgcHVibGljOgorICBfX2xpc3QydmVjdG9yX3N0YWNrX2luZm8oY29uc3QgX19saXN0MnZlY3Rvcl9pbmZvJiBfX28pIAorICAgICAgOiBfX2xpc3QydmVjdG9yX2luZm8oX19vKSB7fQorfTsKKworY2xhc3MgX190cmFjZV9saXN0X3RvX3ZlY3RvcgorICAgIDogcHVibGljIF9fdHJhY2VfYmFzZTxfX2xpc3QydmVjdG9yX2luZm8sIF9fbGlzdDJ2ZWN0b3Jfc3RhY2tfaW5mbz4gCit7CisgcHVibGljOgorICBfX3RyYWNlX2xpc3RfdG9fdmVjdG9yKCk7CisgIH5fX3RyYWNlX2xpc3RfdG9fdmVjdG9yKCkge30KKworICAvLyBJbnNlcnQgYSBuZXcgbm9kZSBhdCBjb25zdHJ1Y3Qgd2l0aCBvYmplY3QsIGNhbGxzdGFjayBhbmQgaW5pdGlhbCBzaXplLiAKKyAgdm9pZCBfX2luc2VydChfX29iamVjdF90IF9fb2JqLCBfX3N0YWNrX3QgX19zdGFjayk7CisgIC8vIENhbGwgYXQgZGVzdHJ1Y3Rpb24vY2xlYW4gdG8gc2V0IGNvbnRhaW5lciBmaW5hbCBzaXplLgorICB2b2lkIF9fZGVzdHJ1Y3QoY29uc3Qgdm9pZCogX19vYmopOworCisgIC8vIEZpbmQgdGhlIG5vZGUgaW4gdGhlIGxpdmUgbWFwLgorICBfX2xpc3QydmVjdG9yX2luZm8qIF9fZmluZChjb25zdCB2b2lkKiBfX29iaik7CisKKyAgLy8gQ29sbGVjdCBjb3N0IG9mIG9wZXJhdGlvbnMuCisgIHZvaWQgX19vcHJfaW5zZXJ0KGNvbnN0IHZvaWQqIF9fb2JqLCBzaXplX3QgX19zaGlmdCwgc2l6ZV90IF9fc2l6ZSk7CisgIHZvaWQgX19vcHJfaXRlcmF0ZShjb25zdCB2b2lkKiBfX29iaiwgc2l6ZV90IF9fbnVtKTsKKyAgdm9pZCBfX2ludmFsaWRfb3BlcmF0b3IoY29uc3Qgdm9pZCogX19vYmopOworICB2b2lkIF9fcmVzaXplKGNvbnN0IHZvaWQqIF9fb2JqLCBzaXplX3QgX19mcm9tLCBzaXplX3QgX190byk7CisgIGZsb2F0IF9fdmVjdG9yX2Nvc3Qoc2l6ZV90IF9fc2hpZnQsIHNpemVfdCBfX2l0ZXJhdGUpOworICBmbG9hdCBfX2xpc3RfY29zdChzaXplX3QgX19zaGlmdCwgc2l6ZV90IF9faXRlcmF0ZSk7Cit9OworCitpbmxpbmUgX190cmFjZV9saXN0X3RvX3ZlY3Rvcjo6X190cmFjZV9saXN0X3RvX3ZlY3RvcigpCisgICAgOiBfX3RyYWNlX2Jhc2U8X19saXN0MnZlY3Rvcl9pbmZvLCBfX2xpc3QydmVjdG9yX3N0YWNrX2luZm8+KCkKK3sKKyAgX19pZCA9ICJsaXN0LXRvLXZlY3RvciI7Cit9CisKK2lubGluZSB2b2lkIF9fdHJhY2VfbGlzdF90b192ZWN0b3I6Ol9faW5zZXJ0KF9fb2JqZWN0X3QgX19vYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0YWNrX3QgX19zdGFjaykKK3sKKyAgX19hZGRfb2JqZWN0KF9fb2JqLCBfX2xpc3QydmVjdG9yX2luZm8oX19zdGFjaykpOworfQorCitpbmxpbmUgdm9pZCBfX2xpc3QydmVjdG9yX2luZm86Ol9fd3JpdGUoRklMRSogX19mKSBjb25zdAoreworICBmcHJpbnRmKF9fZiwgIiVadSAlWnUgJVp1ICUuMGYgJS4wZlxuIiwKKyAgICAgICAgICBfTV9zaGlmdF9jb3VudCwgX01fcmVzaXplLCBfTV9pdGVyYXRlLCBfTV92ZWN0b3JfY29zdCwgX01fbGlzdF9jb3N0KTsKK30KKworaW5saW5lIGZsb2F0IF9fdHJhY2VfbGlzdF90b192ZWN0b3I6Ol9fdmVjdG9yX2Nvc3Qoc2l6ZV90IF9fc2hpZnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9faXRlcmF0ZSkKK3sKKyAgLy8gVGhlIHJlc3VsdGluZyB2ZWN0b3Igd2lsbCB1c2UgYSAncmVzZXJ2ZScgbWV0aG9kLgorICByZXR1cm4gX19zaGlmdCAqIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX3ZlY3Rvcl9zaGlmdF9jb3N0X2ZhY3RvcikuX192YWx1ZSArIAorICAgICAgX19pdGVyYXRlICogX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fdmVjdG9yX2l0ZXJhdGVfY29zdF9mYWN0b3IpLl9fdmFsdWU7IAorfQorCitpbmxpbmUgZmxvYXQgX190cmFjZV9saXN0X3RvX3ZlY3Rvcjo6X19saXN0X2Nvc3Qoc2l6ZV90IF9fc2hpZnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2l0ZXJhdGUpCit7CisgIHJldHVybiBfX3NoaWZ0ICogX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fbGlzdF9zaGlmdF9jb3N0X2ZhY3RvcikuX192YWx1ZSArIAorICAgICAgX19pdGVyYXRlICogX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fbGlzdF9pdGVyYXRlX2Nvc3RfZmFjdG9yKS5fX3ZhbHVlOyAKK30KKworaW5saW5lIHZvaWQgX190cmFjZV9saXN0X3RvX3ZlY3Rvcjo6X19kZXN0cnVjdChjb25zdCB2b2lkKiBfX29iaikKK3sKKyAgaWYgKCFfX2lzX29uKCkpCisgICAgcmV0dXJuOworCisgX19saXN0MnZlY3Rvcl9pbmZvKiBfX3JlcyA9IF9fZ2V0X29iamVjdF9pbmZvKF9fb2JqKTsKKyAgaWYgKCFfX3JlcykKKyAgICByZXR1cm47CisKKyAgZmxvYXQgX192YyA9IF9fdmVjdG9yX2Nvc3QoX19yZXMtPl9fc2hpZnRfY291bnQoKSwgX19yZXMtPl9faXRlcmF0ZSgpKTsKKyAgZmxvYXQgX19sYyA9IF9fbGlzdF9jb3N0KF9fcmVzLT5fX3NoaWZ0X2NvdW50KCksIF9fcmVzLT5fX2l0ZXJhdGUoKSk7CisgIF9fcmVzLT5fX3NldF92ZWN0b3JfY29zdChfX3ZjKTsKKyAgX19yZXMtPl9fc2V0X2xpc3RfY29zdChfX2xjKTsKKyAgX19yZXRpcmVfb2JqZWN0KF9fb2JqKTsKK30KKworaW5saW5lIHZvaWQgX190cmFjZV9saXN0X3RvX3ZlY3Rvcjo6X19vcHJfaW5zZXJ0KGNvbnN0IHZvaWQqIF9fb2JqLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zaGlmdCwgc2l6ZV90IF9fc2l6ZSkKK3sKKyAgX19saXN0MnZlY3Rvcl9pbmZvKiBfX3JlcyA9IF9fZ2V0X29iamVjdF9pbmZvKF9fb2JqKTsKKyAgaWYgKF9fcmVzKQorICAgIF9fcmVzLT5fX29wcl9pbnNlcnQoX19zaGlmdCwgX19zaXplKTsKK30KKworaW5saW5lIHZvaWQgX190cmFjZV9saXN0X3RvX3ZlY3Rvcjo6X19vcHJfaXRlcmF0ZShjb25zdCB2b2lkKiBfX29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbnVtKQoreworICBfX2xpc3QydmVjdG9yX2luZm8qIF9fcmVzID0gX19nZXRfb2JqZWN0X2luZm8oX19vYmopOworICBpZiAoX19yZXMpIHsKKyAgICBfX3Jlcy0+X19vcHJfaXRlcmF0ZShfX251bSk7CisgIH0KK30KKworaW5saW5lIHZvaWQgX190cmFjZV9saXN0X3RvX3ZlY3Rvcjo6X19pbnZhbGlkX29wZXJhdG9yKGNvbnN0IHZvaWQqIF9fb2JqKQoreworICBfX2xpc3QydmVjdG9yX2luZm8qIF9fcmVzID0gX19nZXRfb2JqZWN0X2luZm8oX19vYmopOworICBpZiAoX19yZXMpCisgICAgX19yZXMtPl9fc2V0X2ludmFsaWQoKTsKK30KKworaW5saW5lIHZvaWQgX190cmFjZV9saXN0X3RvX3ZlY3Rvcjo6X19yZXNpemUoY29uc3Qgdm9pZCogX19vYmosIHNpemVfdCBfX2Zyb20sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fdG8pCit7CisgIF9fbGlzdDJ2ZWN0b3JfaW5mbyogX19yZXMgPSBfX2dldF9vYmplY3RfaW5mbyhfX29iaik7CisgIGlmIChfX3JlcykKKyAgICBfX3Jlcy0+X19yZXNpemUoX19mcm9tLCBfX3RvKTsKK30KKworaW5saW5lIHZvaWQgX190cmFjZV9saXN0X3RvX3ZlY3Rvcl9pbml0KCkKK3sKKyAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX2xpc3RfdG9fdmVjdG9yKSA9IG5ldyBfX3RyYWNlX2xpc3RfdG9fdmVjdG9yKCk7Cit9CisKK2lubGluZSB2b2lkIF9fdHJhY2VfbGlzdF90b192ZWN0b3JfcmVwb3J0KEZJTEUqIF9fZiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3dhcm5pbmdfdmVjdG9yX3QmIF9fd2FybmluZ3MpCit7CisgIGlmIChfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbGlzdF90b192ZWN0b3IpKSB7CisgICAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX2xpc3RfdG9fdmVjdG9yKS0+X19jb2xsZWN0X3dhcm5pbmdzKF9fd2FybmluZ3MpOworICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19saXN0X3RvX3ZlY3RvciktPl9fd3JpdGUoX19mKTsKKyAgfQorfQorCitpbmxpbmUgdm9pZCBfX3RyYWNlX2xpc3RfdG9fdmVjdG9yX2NvbnN0cnVjdChjb25zdCB2b2lkKiBfX29iaikKK3sKKyAgaWYgKCFfX3Byb2ZjeHhfaW5pdCgpKSByZXR1cm47CisKKyAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX2xpc3RfdG9fdmVjdG9yKS0+X19pbnNlcnQoX19vYmosIF9fZ2V0X3N0YWNrKCkpOworfQorCitpbmxpbmUgdm9pZCBfX3RyYWNlX2xpc3RfdG9fdmVjdG9yX2Rlc3RydWN0KGNvbnN0IHZvaWQqIF9fb2JqKQoreworICBpZiAoIV9fcHJvZmN4eF9pbml0KCkpIHJldHVybjsKKworICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbGlzdF90b192ZWN0b3IpLT5fX2Rlc3RydWN0KF9fb2JqKTsKK30KKworaW5saW5lIHZvaWQgX190cmFjZV9saXN0X3RvX3ZlY3Rvcl9pbnNlcnQoY29uc3Qgdm9pZCogX19vYmosIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc2hpZnQsIHNpemVfdCBfX3NpemUpCit7CisgIGlmICghX19wcm9mY3h4X2luaXQoKSkgcmV0dXJuOworCisgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19saXN0X3RvX3ZlY3RvciktPl9fb3ByX2luc2VydChfX29iaiwgX19zaGlmdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NpemUpOworfQorCisKK2lubGluZSB2b2lkIF9fdHJhY2VfbGlzdF90b192ZWN0b3JfaXRlcmF0ZShjb25zdCB2b2lkKiBfX29iaiwgc2l6ZV90IF9fbnVtID0gMSkKK3sKKyAgaWYgKCFfX3Byb2ZjeHhfaW5pdCgpKSByZXR1cm47CisKKyAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX2xpc3RfdG9fdmVjdG9yKS0+X19vcHJfaXRlcmF0ZShfX29iaiwgX19udW0pOworfQorCitpbmxpbmUgdm9pZCBfX3RyYWNlX2xpc3RfdG9fdmVjdG9yX2ludmFsaWRfb3BlcmF0b3IoY29uc3Qgdm9pZCogX19vYmopCit7CisgIGlmICghX19wcm9mY3h4X2luaXQoKSkgcmV0dXJuOworCisgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19saXN0X3RvX3ZlY3RvciktPl9faW52YWxpZF9vcGVyYXRvcihfX29iaik7Cit9CisKK2lubGluZSB2b2lkIF9fdHJhY2VfbGlzdF90b192ZWN0b3JfcmVzaXplKGNvbnN0IHZvaWQqIF9fb2JqLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2Zyb20sIHNpemVfdCBfX3RvKQoreworICBpZiAoIV9fcHJvZmN4eF9pbml0KCkpIHJldHVybjsKKworICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbGlzdF90b192ZWN0b3IpLT5fX3Jlc2l6ZShfX29iaiwgX19mcm9tLCBfX3RvKTsKK30KKworfSAvLyBuYW1lc3BhY2UgX19nbnVfcHJvZmlsZQorI2VuZGlmIC8qIF9HTElCQ1hYX1BST0ZJTEVfUFJPRklMRVJfTElTVF9UT19WRUNUT1JfSF9fICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Byb2ZpbGUvaW1wbC9wcm9maWxlcl9tYXBfdG9fdW5vcmRlcmVkX21hcC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfbWFwX3RvX3Vub3JkZXJlZF9tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzE1ZTRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfbWFwX3RvX3Vub3JkZXJlZF9tYXAuaApAQCAtMCwwICsxLDI5MiBAQAorLy8gLSotIEMrKyAtKi0KKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy8vIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KKy8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAorLy8gTUEgMDIxMTEtMTMwNywgVVNBLgorCisvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUKKy8vIHNvZnR3YXJlIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMKKy8vIGluc3RhbnRpYXRlIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzCisvLyBmaWxlLCBvciB5b3UgY29tcGlsZSB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0bworLy8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZQorLy8gcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisvLyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlciBpbnZhbGlkYXRlIGFueSBvdGhlcgorLy8gcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbAorLy8gUHVibGljIExpY2Vuc2UuCisKKy8qKiBAZmlsZSBwcm9maWxlL2ltcGwvcHJvZmlsZXJfbWFwX3RvX3Vub3JkZXJlZF9tYXAuaAorICogIEBicmllZiBEaWFnbm9zdGljcyBmb3IgbWFwIHRvIHVub3JkZXJlZF9tYXAuCisgKi8KKworLy8gV3JpdHRlbiBieSBTaWx2aXVzIFJ1cy4KKworI2lmbmRlZiBfR0xJQkNYWF9QUk9GSUxFX1BST0ZJTEVSX01BUF9UT19VTk9SREVSRURfTUFQX0gKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9NQVBfVE9fVU5PUkRFUkVEX01BUF9IIDEKKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNlbHNlCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlci5oIgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl9ub2RlLmgiCisjaW5jbHVkZSAicHJvZmlsZS9pbXBsL3Byb2ZpbGVyX3RyYWNlLmgiCisKK25hbWVzcGFjZSBfX2dudV9wcm9maWxlCit7CisKK2lubGluZSBpbnQgX19sb2cyKHNpemVfdCBfX3NpemUpCit7CisgIGZvciAoaW50IF9fYml0X2NvdW50ID0gc2l6ZW9mKHNpemVfdCkgLSAxOyBfX2JpdF9jb3VudCA+PSAwOyAtLSBfX2JpdF9jb3VudCkgCisgIHsKKyAgICBpZiAoKDIgPDwgX19iaXRfY291bnQpICYgX19zaXplKSB7CisgICAgICByZXR1cm4gX19iaXRfY291bnQ7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCitpbmxpbmUgZmxvYXQgX19tYXBfaW5zZXJ0X2Nvc3Qoc2l6ZV90IF9fc2l6ZSkKK3sKKyAgcmV0dXJuIChfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19tYXBfaW5zZXJ0X2Nvc3RfZmFjdG9yKS5fX3ZhbHVlIAorICAgICAgICAgICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KF9fbG9nMihfX3NpemUpKSk7Cit9CisKK2lubGluZSBmbG9hdCBfX21hcF9lcmFzZV9jb3N0KHNpemVfdCBfX3NpemUpCit7CisgIHJldHVybiAoX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fbWFwX2VyYXNlX2Nvc3RfZmFjdG9yKS5fX3ZhbHVlCisgICAgICAgICAgKiBzdGF0aWNfY2FzdDxmbG9hdD4oX19sb2cyKF9fc2l6ZSkpKTsKK30KKworaW5saW5lIGZsb2F0IF9fbWFwX2ZpbmRfY29zdChzaXplX3QgX19zaXplKQoreworICByZXR1cm4gKF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX21hcF9maW5kX2Nvc3RfZmFjdG9yKS5fX3ZhbHVlCisgICAgICAgICAgKiBzdGF0aWNfY2FzdDxmbG9hdD4oX19sb2cyKF9fc2l6ZSkpKTsKK30KKworLyoqIEBicmllZiBBIG1hcC10by11bm9yZGVyZWRfbWFwIGluc3RydW1lbnRhdGlvbiBsaW5lIGluIHRoZSBvYmplY3QgdGFibGUuICAqLworY2xhc3MgX19tYXAydW1hcF9pbmZvOiBwdWJsaWMgX19vYmplY3RfaW5mb19iYXNlCit7CisgcHVibGljOgorICBfX21hcDJ1bWFwX2luZm8oKQorICAgICAgOiBfTV9pbnNlcnQoMCksIF9NX2VyYXNlKDApLCBfTV9maW5kKDApLCBfTV9pdGVyYXRlKDApLAorICAgICAgICBfTV9tYXBfY29zdCgwLjApLCBfTV91bWFwX2Nvc3QoMC4wKSwgX01fdmFsaWQodHJ1ZSkge30KKyAgX19tYXAydW1hcF9pbmZvKF9fc3RhY2tfdCBfX3N0YWNrKQorICAgICAgOiBfX29iamVjdF9pbmZvX2Jhc2UoX19zdGFjayksIF9NX2luc2VydCgwKSwgX01fZXJhc2UoMCksIF9NX2ZpbmQoMCksIAorICAgICAgICBfTV9pdGVyYXRlKDApLCBfTV9tYXBfY29zdCgwLjApLCBfTV91bWFwX2Nvc3QoMC4wKSwgX01fdmFsaWQodHJ1ZSkge30gCisgIHZpcnR1YWwgfl9fbWFwMnVtYXBfaW5mbygpIHt9CisgIF9fbWFwMnVtYXBfaW5mbyhjb25zdCBfX21hcDJ1bWFwX2luZm8mIG8pOworICB2b2lkIF9fbWVyZ2UoY29uc3QgX19tYXAydW1hcF9pbmZvJiBvKTsKKyAgdm9pZCBfX3dyaXRlKEZJTEUqIF9fZikgY29uc3Q7CisgIGZsb2F0IF9fbWFnbml0dWRlKCkgY29uc3QgeyByZXR1cm4gX01fbWFwX2Nvc3QgLSBfTV91bWFwX2Nvc3Q7IH0KKyAgY29uc3QgY2hhciogX19hZHZpY2UoKSBjb25zdDsKKworICB2b2lkIF9fcmVjb3JkX2luc2VydChzaXplX3QgX19zaXplLCBzaXplX3QgX19jb3VudCk7CisgIHZvaWQgX19yZWNvcmRfZXJhc2Uoc2l6ZV90IF9fc2l6ZSwgc2l6ZV90IF9fY291bnQpOworICB2b2lkIF9fcmVjb3JkX2ZpbmQoc2l6ZV90IF9fc2l6ZSk7CisgIHZvaWQgX19yZWNvcmRfaXRlcmF0ZShzaXplX3QgX19jb3VudCk7CisgIHZvaWQgX19yZWNvcmRfaW52YWxpZGF0ZSgpOworCisgcHJpdmF0ZToKKyAgc2l6ZV90IF9NX2luc2VydDsKKyAgc2l6ZV90IF9NX2VyYXNlOworICBzaXplX3QgX01fZmluZDsKKyAgc2l6ZV90IF9NX2l0ZXJhdGU7CisgIGZsb2F0IF9NX3VtYXBfY29zdDsKKyAgZmxvYXQgX01fbWFwX2Nvc3Q7CisgIGJvb2wgIF9NX3ZhbGlkOworfTsKKworaW5saW5lIGNvbnN0IGNoYXIqIF9fbWFwMnVtYXBfaW5mbzo6X19hZHZpY2UoKSBjb25zdAoreworICByZXR1cm4gc3RyZHVwKCJjaGFuZ2Ugc3RkOjptYXAgdG8gc3RkOjp1bm9yZGVyZWRfbWFwIik7Cit9CisKK2lubGluZSBfX21hcDJ1bWFwX2luZm86Ol9fbWFwMnVtYXBfaW5mbyhjb25zdCBfX21hcDJ1bWFwX2luZm8mIF9fbykKKyAgICA6IF9fb2JqZWN0X2luZm9fYmFzZShfX28pLCAKKyAgICAgIF9NX2luc2VydChfX28uX01faW5zZXJ0KSwKKyAgICAgIF9NX2VyYXNlKF9fby5fTV9lcmFzZSksCisgICAgICBfTV9maW5kKF9fby5fTV9maW5kKSwKKyAgICAgIF9NX2l0ZXJhdGUoX19vLl9NX2l0ZXJhdGUpLAorICAgICAgX01fbWFwX2Nvc3QoX19vLl9NX21hcF9jb3N0KSwKKyAgICAgIF9NX3VtYXBfY29zdChfX28uX01fdW1hcF9jb3N0KSwKKyAgICAgIF9NX3ZhbGlkKF9fby5fTV92YWxpZCkKK3t9CisKK2lubGluZSB2b2lkIF9fbWFwMnVtYXBfaW5mbzo6X19tZXJnZShjb25zdCBfX21hcDJ1bWFwX2luZm8mIF9fbykKK3sKKyAgX01faW5zZXJ0ICAgICs9IF9fby5fTV9pbnNlcnQ7CisgIF9NX2VyYXNlICAgICArPSBfX28uX01fZXJhc2U7CisgIF9NX2ZpbmQgICAgICArPSBfX28uX01fZmluZDsKKyAgX01fbWFwX2Nvc3QgICs9IF9fby5fTV9tYXBfY29zdDsKKyAgX01fdW1hcF9jb3N0ICs9IF9fby5fTV91bWFwX2Nvc3Q7CisgIF9NX3ZhbGlkICAgICAmPSBfX28uX01fdmFsaWQ7Cit9CisKK2lubGluZSB2b2lkIF9fbWFwMnVtYXBfaW5mbzo6IF9fcmVjb3JkX2luc2VydChzaXplX3QgX19zaXplLCBzaXplX3QgX19jb3VudCkKK3sKKyAgX01faW5zZXJ0ICs9IF9fY291bnQ7CisgIF9NX21hcF9jb3N0ICs9IF9fY291bnQgKiBfX21hcF9pbnNlcnRfY29zdChfX3NpemUpOworICBfTV91bWFwX2Nvc3QgKz0gKF9fY291bnQKKyAgICAgICAgICAgICAgICAgICAqIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX3VtYXBfaW5zZXJ0X2Nvc3RfZmFjdG9yKS5fX3ZhbHVlKTsKK30KKworaW5saW5lIHZvaWQgX19tYXAydW1hcF9pbmZvOjogX19yZWNvcmRfZXJhc2Uoc2l6ZV90IF9fc2l6ZSwgc2l6ZV90IF9fY291bnQpCit7CisgIF9NX2VyYXNlICs9IF9fY291bnQ7CisgIF9NX21hcF9jb3N0ICs9IF9fY291bnQgKiBfX21hcF9lcmFzZV9jb3N0KF9fc2l6ZSk7CisgIF9NX3VtYXBfY29zdCArPSAoX19jb3VudAorICAgICAgICAgICAgICAgICAgICogX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fdW1hcF9lcmFzZV9jb3N0X2ZhY3RvcikuX192YWx1ZSk7Cit9CisKK2lubGluZSB2b2lkIF9fbWFwMnVtYXBfaW5mbzo6IF9fcmVjb3JkX2ZpbmQoc2l6ZV90IF9fc2l6ZSkKK3sKKyAgX01fZmluZCArPSAxOworICBfTV9tYXBfY29zdCArPSBfX21hcF9maW5kX2Nvc3QoX19zaXplKTsKKyAgX01fdW1hcF9jb3N0ICs9IF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX3VtYXBfZmluZF9jb3N0X2ZhY3RvcikuX192YWx1ZTsKK30KKworaW5saW5lIHZvaWQgX19tYXAydW1hcF9pbmZvOjogX19yZWNvcmRfaXRlcmF0ZShzaXplX3QgX19jb3VudCkKK3sKKyAgX01faXRlcmF0ZSArPSBfX2NvdW50OworICBfTV9tYXBfY29zdCArPSAoX19jb3VudAorICAgICAgICAgICAgICAgICAgKiBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19tYXBfaXRlcmF0ZV9jb3N0X2ZhY3RvcikuX192YWx1ZSk7CisgIF9NX3VtYXBfY29zdCArPSAoCisgICAgICBfX2NvdW50ICogX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fdW1hcF9pdGVyYXRlX2Nvc3RfZmFjdG9yKS5fX3ZhbHVlKTsKK30KKworaW5saW5lIHZvaWQgX19tYXAydW1hcF9pbmZvOjogX19yZWNvcmRfaW52YWxpZGF0ZSgpCit7CisgIF9NX3ZhbGlkID0gZmFsc2U7Cit9CisKK2lubGluZSB2b2lkIF9fbWFwMnVtYXBfaW5mbzo6X193cml0ZShGSUxFKiBfX2YpIGNvbnN0Cit7CisgIGZwcmludGYoX19mLCAiJVp1ICVadSAlWnUgJVp1ICUuMGYgJS4wZiAlc1xuIiwKKyAgICAgICAgICBfTV9pbnNlcnQsIF9NX2VyYXNlLCBfTV9maW5kLCBfTV9pdGVyYXRlLCBfTV9tYXBfY29zdCwgX01fdW1hcF9jb3N0LAorICAgICAgICAgIF9NX3ZhbGlkID8gInZhbGlkIiA6ICJpbnZhbGlkIik7Cit9CisKKy8qKiBAYnJpZWYgQSBtYXAtdG8tdW5vcmRlcmVkX21hcCBpbnN0cnVtZW50YXRpb24gbGluZSBpbiB0aGUgc3RhY2sgdGFibGUuICAqLworY2xhc3MgX19tYXAydW1hcF9zdGFja19pbmZvOiBwdWJsaWMgX19tYXAydW1hcF9pbmZvCit7CisgcHVibGljOgorICBfX21hcDJ1bWFwX3N0YWNrX2luZm8oY29uc3QgX19tYXAydW1hcF9pbmZvJiBvKSA6IF9fbWFwMnVtYXBfaW5mbyhvKSB7fQorfTsKKworLyoqIEBicmllZiBNYXAtdG8tdW5vcmRlcmVkX21hcCBpbnN0cnVtZW50YXRpb24gcHJvZHVjZXIuICAqLworY2xhc3MgX190cmFjZV9tYXAydW1hcAorICAgIDogcHVibGljIF9fdHJhY2VfYmFzZTxfX21hcDJ1bWFwX2luZm8sIF9fbWFwMnVtYXBfc3RhY2tfaW5mbz4gCit7CisgcHVibGljOgorICBfX3RyYWNlX21hcDJ1bWFwKCk7Cit9OworCitpbmxpbmUgX190cmFjZV9tYXAydW1hcDo6X190cmFjZV9tYXAydW1hcCgpCisgICAgOiBfX3RyYWNlX2Jhc2U8X19tYXAydW1hcF9pbmZvLCBfX21hcDJ1bWFwX3N0YWNrX2luZm8+KCkKK3sKKyAgX19pZCA9ICJtYXAtdG8tdW5vcmRlcmVkLW1hcCI7Cit9CisKK2lubGluZSB2b2lkIF9fdHJhY2VfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaW5pdCgpCit7CisgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19tYXAydW1hcCkgPSBuZXcgX190cmFjZV9tYXAydW1hcCgpOworfQorCitpbmxpbmUgdm9pZCBfX3RyYWNlX21hcF90b191bm9yZGVyZWRfbWFwX3JlcG9ydCgKKyAgICBGSUxFKiBfX2YsIF9fd2FybmluZ192ZWN0b3JfdCYgX193YXJuaW5ncykKK3sKKyAgaWYgKF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19tYXAydW1hcCkpIHsKKyAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbWFwMnVtYXApLT5fX2NvbGxlY3Rfd2FybmluZ3MoX193YXJuaW5ncyk7CisgICAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX21hcDJ1bWFwKS0+X193cml0ZShfX2YpOworICB9Cit9CisKK2lubGluZSB2b2lkIF9fdHJhY2VfbWFwX3RvX3Vub3JkZXJlZF9tYXBfY29uc3RydWN0KGNvbnN0IHZvaWQqIF9fb2JqKQoreworICBpZiAoIV9fcHJvZmN4eF9pbml0KCkpIHJldHVybjsKKworICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbWFwMnVtYXApLT5fX2FkZF9vYmplY3QoCisgICAgICBfX29iaiwgX19tYXAydW1hcF9pbmZvKF9fZ2V0X3N0YWNrKCkpKTsKK30KKworaW5saW5lIHZvaWQgX190cmFjZV9tYXBfdG9fdW5vcmRlcmVkX21hcF9kZXN0cnVjdChjb25zdCB2b2lkKiBfX29iaikKK3sKKyAgaWYgKCFfX3Byb2ZjeHhfaW5pdCgpKSByZXR1cm47CisKKyAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX21hcDJ1bWFwKS0+X19yZXRpcmVfb2JqZWN0KF9fb2JqKTsKK30KKworaW5saW5lIHZvaWQgX190cmFjZV9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnNlcnQoY29uc3Qgdm9pZCogX19vYmosIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSwgc2l6ZV90IF9fY291bnQpCit7CisgIGlmICghX19wcm9mY3h4X2luaXQoKSkgcmV0dXJuOworCisgIF9fbWFwMnVtYXBfaW5mbyogX19pbmZvID0KKyAgICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19tYXAydW1hcCktPl9fZ2V0X29iamVjdF9pbmZvKF9fb2JqKTsKKworICBpZiAoX19pbmZvKSBfX2luZm8tPl9fcmVjb3JkX2luc2VydChfX3NpemUsIF9fY291bnQpOworfQorCitpbmxpbmUgdm9pZCBfX3RyYWNlX21hcF90b191bm9yZGVyZWRfbWFwX2VyYXNlKGNvbnN0IHZvaWQqIF9fb2JqLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSwgc2l6ZV90IF9fY291bnQpCit7CisgIGlmICghX19wcm9mY3h4X2luaXQoKSkgcmV0dXJuOworCisgIF9fbWFwMnVtYXBfaW5mbyogX19pbmZvID0KKyAgICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19tYXAydW1hcCktPl9fZ2V0X29iamVjdF9pbmZvKF9fb2JqKTsKKworICBpZiAoX19pbmZvKSBfX2luZm8tPl9fcmVjb3JkX2VyYXNlKF9fc2l6ZSwgX19jb3VudCk7Cit9CisKK2lubGluZSB2b2lkIF9fdHJhY2VfbWFwX3RvX3Vub3JkZXJlZF9tYXBfZmluZChjb25zdCB2b2lkKiBfX29iaiwgc2l6ZV90IF9fc2l6ZSkKK3sKKyAgaWYgKCFfX3Byb2ZjeHhfaW5pdCgpKSByZXR1cm47CisKKyAgX19tYXAydW1hcF9pbmZvKiBfX2luZm8gPQorICAgICAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX21hcDJ1bWFwKS0+X19nZXRfb2JqZWN0X2luZm8oX19vYmopOworCisgIGlmIChfX2luZm8pIF9faW5mby0+X19yZWNvcmRfZmluZChfX3NpemUpOworfQorCitpbmxpbmUgdm9pZCBfX3RyYWNlX21hcF90b191bm9yZGVyZWRfbWFwX2l0ZXJhdGUoY29uc3Qgdm9pZCogX19vYmosIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2NvdW50KQoreworICBpZiAoIV9fcHJvZmN4eF9pbml0KCkpIHJldHVybjsKKworICBfX21hcDJ1bWFwX2luZm8qIF9faW5mbyA9CisgICAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbWFwMnVtYXApLT5fX2dldF9vYmplY3RfaW5mbyhfX29iaik7CisKKyAgaWYgKF9faW5mbykgX19pbmZvLT5fX3JlY29yZF9pdGVyYXRlKF9fY291bnQpOworfQorCitpbmxpbmUgdm9pZCBfX3RyYWNlX21hcF90b191bm9yZGVyZWRfbWFwX2ludmFsaWRhdGUoY29uc3Qgdm9pZCogX19vYmopCit7CisgIGlmICghX19wcm9mY3h4X2luaXQoKSkgcmV0dXJuOworCisgIF9fbWFwMnVtYXBfaW5mbyogX19pbmZvID0KKyAgICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19tYXAydW1hcCktPl9fZ2V0X29iamVjdF9pbmZvKF9fb2JqKTsKKworICBpZiAoX19pbmZvKSBfX2luZm8tPl9fcmVjb3JkX2ludmFsaWRhdGUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgX19nbnVfcHJvZmlsZQorI2VuZGlmIC8qIF9HTElCQ1hYX1BST0ZJTEVfUFJPRklMRVJfTUFQX1RPX1VOT1JERVJFRF9NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfbm9kZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfbm9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NjU0YTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Byb2ZpbGUvaW1wbC9wcm9maWxlcl9ub2RlLmgKQEAgLTAsMCArMSwxNzIgQEAKKy8vIC0qLSBDKysgLSotCisvLworLy8gQ29weXJpZ2h0IChDKSAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisvLyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCisvLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwKKy8vIE1BIDAyMTExLTEzMDcsIFVTQS4KKworLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlCisvLyBzb2Z0d2FyZSBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzCisvLyBpbnN0YW50aWF0ZSB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcworLy8gZmlsZSwgb3IgeW91IGNvbXBpbGUgdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8KKy8vIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUKKy8vIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworLy8gTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIgaW52YWxpZGF0ZSBhbnkgb3RoZXIKKy8vIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwKKy8vIFB1YmxpYyBMaWNlbnNlLgorCisvKiogQGZpbGUgcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX25vZGUuaAorICogIEBicmllZiBEYXRhIHN0cnVjdHVyZXMgdG8gcmVwcmVzZW50IGEgc2luZ2xlIHByb2ZpbGluZyBldmVudC4KKyAqLworCisvLyBXcml0dGVuIGJ5IExpeGlhIExpdSBhbmQgU2lsdml1cyBSdXMuCisKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9OT0RFX0gKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9OT0RFX0ggMQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8Y3N0ZGludD4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisjaW5jbHVkZSA8dmVjdG9yPgorI2lmIGRlZmluZWQgX0dMSUJDWFhfSEFWRV9FWEVDSU5GT19ICisjaW5jbHVkZSA8ZXhlY2luZm8uaD4KKyNlbmRpZgorCituYW1lc3BhY2UgX19nbnVfcHJvZmlsZQorewordHlwZWRlZiBjb25zdCB2b2lkKiBfX29iamVjdF90OwordHlwZWRlZiB2b2lkKiBfX2luc3RydWN0aW9uX2FkZHJlc3NfdDsKK3R5cGVkZWYgc3RkOjpfR0xJQkNYWF9TVERfUFI6OnZlY3RvcjxfX2luc3RydWN0aW9uX2FkZHJlc3NfdD4gX19zdGFja19ucHQ7Cit0eXBlZGVmIF9fc3RhY2tfbnB0KiBfX3N0YWNrX3Q7CisKK3NpemVfdCBfX3N0YWNrX21heF9kZXB0aCgpOworCitpbmxpbmUgX19zdGFja190IF9fZ2V0X3N0YWNrKCkKK3sKKyNpZiBkZWZpbmVkIF9HTElCQ1hYX0hBVkVfRVhFQ0lORk9fSAorICBzaXplX3QgX19tYXhfZGVwdGggPSBfX3N0YWNrX21heF9kZXB0aCgpOworICBpZiAoX19tYXhfZGVwdGggPT0gMCkKKyAgICByZXR1cm4gTlVMTDsKKyAgX19zdGFja19ucHQgX19idWZmZXIoX19tYXhfZGVwdGgpOworICBpbnQgX19kZXB0aCA9IGJhY2t0cmFjZSgmX19idWZmZXJbMF0sIF9fbWF4X2RlcHRoKTsKKyAgX19zdGFja190IF9fc3RhY2sgPSBuZXcgX19zdGFja19ucHQoX19kZXB0aCk7CisgIG1lbWNweSgmKCpfX3N0YWNrKVswXSwgJl9fYnVmZmVyWzBdLCBfX2RlcHRoICogc2l6ZW9mKF9fb2JqZWN0X3QpKTsKKyAgcmV0dXJuIF9fc3RhY2s7CisjZWxzZQorICByZXR1cm4gTlVMTDsKKyNlbmRpZgorfQorCitpbmxpbmUgX19zaXplKGNvbnN0IF9fc3RhY2tfdCYgX19zdGFjaykKK3sKKyAgaWYgKCFfX3N0YWNrKSB7CisgICAgcmV0dXJuIDA7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIF9fc3RhY2stPnNpemUoKTsKKyAgfQorfQorCitpbmxpbmUgdm9pZCBfX3dyaXRlKEZJTEUqIF9fZiwgY29uc3QgX19zdGFja190IF9fc3RhY2spCit7CisgIGlmICghX19zdGFjaykgeworICAgIHJldHVybjsKKyAgfQorCisgIF9fc3RhY2tfbnB0Ojpjb25zdF9pdGVyYXRvciBfX2l0OworICBmb3IgKF9faXQgPSBfX3N0YWNrLT5iZWdpbigpOyBfX2l0ICE9IF9fc3RhY2stPmVuZCgpOyArK19faXQpIHsKKyAgICBmcHJpbnRmKF9fZiwgIiVwICIsICpfX2l0KTsKKyAgfQorfQorCisvKiogQGJyaWVmIEhhc2ggZnVuY3Rpb24gZm9yIHN1bW1hcnkgdHJhY2UgdXNpbmcgY2FsbCBzdGFjayBhcyBpbmRleC4gICovCitjbGFzcyBfX3N0YWNrX2hhc2ggCit7CisgcHVibGljOgorICBzaXplX3Qgb3BlcmF0b3IoKShjb25zdCBfX3N0YWNrX3QgX19zKSBjb25zdAorICB7CisgICAgaWYgKCFfX3MpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHVpbnRwdHJfdCBfX2luZGV4ID0gMDsKKyAgICBfX3N0YWNrX25wdDo6Y29uc3RfaXRlcmF0b3IgX19pdDsKKyAgICBmb3IgKF9faXQgPSBfX3MtPmJlZ2luKCk7IF9faXQgIT0gX19zLT5lbmQoKTsgKytfX2l0KSB7CisgICAgICBfX2luZGV4ICs9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PigqX19pdCk7CisgICAgfSAKKyAgICByZXR1cm4gX19pbmRleDsKKyAgfQorCisgIGJvb2wgb3BlcmF0b3IoKSAoY29uc3QgX19zdGFja190IF9fc3RhY2sxLCBjb25zdCBfX3N0YWNrX3QgX19zdGFjazIpIGNvbnN0CisgIHsKKyAgICBpZiAoIV9fc3RhY2sxICYmICFfX3N0YWNrMikgcmV0dXJuIHRydWU7CisgICAgaWYgKCFfX3N0YWNrMSB8fCAhX19zdGFjazIpIHJldHVybiBmYWxzZTsKKyAgICBpZiAoX19zdGFjazEtPnNpemUoKSAhPSBfX3N0YWNrMi0+c2l6ZSgpKSByZXR1cm4gZmFsc2U7CisKKyAgICBzaXplX3QgX19ieXRlX3NpemUgPSBfX3N0YWNrMS0+c2l6ZSgpICogc2l6ZW9mKF9fc3RhY2tfbnB0Ojp2YWx1ZV90eXBlKTsKKyAgICByZXR1cm4gbWVtY21wKCYoKl9fc3RhY2sxKVswXSwgJigqX19zdGFjazIpWzBdLCBfX2J5dGVfc2l6ZSkgPT0gMDsKKyAgfQorfTsKKworLyoqIEBicmllZiBCYXNlIGNsYXNzIGZvciBhIGxpbmUgaW4gdGhlIG9iamVjdCB0YWJsZS4gICovCitjbGFzcyBfX29iamVjdF9pbmZvX2Jhc2UKK3sKKyBwdWJsaWM6CisgIF9fb2JqZWN0X2luZm9fYmFzZSgpIHt9CisgIF9fb2JqZWN0X2luZm9fYmFzZShfX3N0YWNrX3QgX19zdGFjayk7CisgIF9fb2JqZWN0X2luZm9fYmFzZShjb25zdCBfX29iamVjdF9pbmZvX2Jhc2UmIG8pOworICB2aXJ0dWFsIH5fX29iamVjdF9pbmZvX2Jhc2UoKSB7fQorICBib29sIF9faXNfdmFsaWQoKSBjb25zdCB7IHJldHVybiBfTV92YWxpZDsgfQorICBfX3N0YWNrX3QgX19zdGFjaygpIGNvbnN0IHsgcmV0dXJuIF9NX3N0YWNrOyB9CisgIHZpcnR1YWwgdm9pZCBfX3dyaXRlKEZJTEUqIGYpIGNvbnN0ID0gMDsKKworIHByb3RlY3RlZDoKKyAgX19zdGFja190IF9NX3N0YWNrOworICBib29sIF9NX3ZhbGlkOworfTsKKworaW5saW5lIF9fb2JqZWN0X2luZm9fYmFzZTo6X19vYmplY3RfaW5mb19iYXNlKF9fc3RhY2tfdCBfX3N0YWNrKQoreworICBfTV9zdGFjayA9IF9fc3RhY2s7CisgIF9NX3ZhbGlkID0gdHJ1ZTsKK30KKworaW5saW5lIF9fb2JqZWN0X2luZm9fYmFzZTo6X19vYmplY3RfaW5mb19iYXNlKGNvbnN0IF9fb2JqZWN0X2luZm9fYmFzZSYgX19vKQoreworICBfTV9zdGFjayA9IF9fby5fTV9zdGFjazsKKyAgX01fdmFsaWQgPSBfX28uX01fdmFsaWQ7Cit9CisKKy8qKiBAYnJpZWYgQmFzZSBjbGFzcyBmb3IgYSBsaW5lIGluIHRoZSBzdGFjayB0YWJsZS4gICovCit0ZW1wbGF0ZTx0eXBlbmFtZSBfX29iamVjdF9pbmZvPgorY2xhc3MgX19zdGFja19pbmZvX2Jhc2UKK3sKKyBwdWJsaWM6CisgIF9fc3RhY2tfaW5mb19iYXNlKCkge30KKyAgX19zdGFja19pbmZvX2Jhc2UoY29uc3QgX19vYmplY3RfaW5mbyYgX19pbmZvKSA9IDA7CisgIHZpcnR1YWwgfl9fc3RhY2tfaW5mb19iYXNlKCkge30KKyAgdm9pZCBfX21lcmdlKGNvbnN0IF9fb2JqZWN0X2luZm8mIF9faW5mbykgPSAwOworICB2aXJ0dWFsIGZsb2F0IF9fbWFnbml0dWRlKCkgY29uc3QgPSAwOworICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9fZ2V0X2lkKCkgY29uc3QgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgX19nbnVfcHJvZmlsZQorI2VuZGlmIC8qIF9HTElCQ1hYX1BST0ZJTEVfUFJPRklMRVJfTk9ERV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Byb2ZpbGUvaW1wbC9wcm9maWxlcl9zdGF0ZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfc3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDBjM2U0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfc3RhdGUuaApAQCAtMCwwICsxLDcwIEBACisvLyAtKi0gQysrIC0qLQorLy8KKy8vIENvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLy8gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bworLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCisvLyBNQSAwMjExMS0xMzA3LCBVU0EuCisKKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZQorLy8gc29mdHdhcmUgbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcworLy8gaW5zdGFudGlhdGUgdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMKKy8vIGZpbGUsIG9yIHlvdSBjb21waWxlIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvCisvLyBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMgZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlCisvLyByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKy8vIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyIGludmFsaWRhdGUgYW55IG90aGVyCisvLyByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsCisvLyBQdWJsaWMgTGljZW5zZS4KKworLyoqIEBmaWxlIHByb2ZpbGUvaW1wbC9wcm9maWxlcl9zdGF0ZS5oCisgKiAgQGJyaWVmIEdsb2JhbCBwcm9maWxlciBzdGF0ZS4KKyAqLworCisvLyBXcml0dGVuIGJ5IExpeGlhIExpdSBhbmQgU2lsdml1cyBSdXMuCisKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9TVEFURV9ICisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfUFJPRklMRVJfU1RBVEVfSCAxCisKK25hbWVzcGFjZSBfX2dudV9wcm9maWxlCit7CisKK2VudW0gX19zdGF0ZV90eXBlIHsgX19PTiwgX19PRkYsIF9fSU5WQUxJRCB9OworCitfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9EQVRBKF9fc3RhdGVfdHlwZSwgX19zdGF0ZSwgX19JTlZBTElEKTsKKworaW5saW5lIGJvb2wgX190dXJuKF9fc3RhdGVfdHlwZSBfX3MpCit7CisgIHJldHVybiAoX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fc3RhdGUpCisgICAgICAgICAgPT0gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwKCZfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19zdGF0ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU5WQUxJRCwgX19zKSk7Cit9CisKK2lubGluZSBib29sIF9fdHVybl9vbigpCit7IHJldHVybiBfX3R1cm4oX19PTik7IH0KKworaW5saW5lIGJvb2wgX190dXJuX29mZigpCit7IHJldHVybiBfX3R1cm4oX19PRkYpOyB9CisKK2lubGluZSBib29sIF9faXNfb24oKQoreyByZXR1cm4gX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fc3RhdGUpID09IF9fT047IH0KKworaW5saW5lIGJvb2wgX19pc19vZmYoKQoreyByZXR1cm4gX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fc3RhdGUpID09IF9fT0ZGOyB9CisKK2lubGluZSBib29sIF9faXNfaW52YWxpZCgpCit7IHJldHVybiBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19zdGF0ZSkgPT0gX19JTlZBTElEOyB9CisKK30gLy8gZW5kIG5hbWVzcGFjZSBfX2dudV9wcm9maWxlCisjZW5kaWYgLyogX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9TVEFURV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Byb2ZpbGUvaW1wbC9wcm9maWxlcl90cmFjZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmI3ZDE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfdHJhY2UuaApAQCAtMCwwICsxLDYyOCBAQAorLy8gLSotIEMrKyAtKi0KKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy8vIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KKy8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAorLy8gTUEgMDIxMTEtMTMwNywgVVNBLgorCisvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUKKy8vIHNvZnR3YXJlIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMKKy8vIGluc3RhbnRpYXRlIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzCisvLyBmaWxlLCBvciB5b3UgY29tcGlsZSB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0bworLy8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZQorLy8gcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisvLyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlciBpbnZhbGlkYXRlIGFueSBvdGhlcgorLy8gcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbAorLy8gUHVibGljIExpY2Vuc2UuCisKKy8qKiBAZmlsZSBwcm9maWxlL2ltcGwvcHJvZmlsZXJfdHJhY2UuaAorICogIEBicmllZiBEYXRhIHN0cnVjdHVyZXMgdG8gcmVwcmVzZW50IHByb2ZpbGluZyB0cmFjZXMuCisgKi8KKworLy8gV3JpdHRlbiBieSBMaXhpYSBMaXUgYW5kIFNpbHZpdXMgUnVzLgorCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfUFJPRklMRVJfVFJBQ0VfSAorI2RlZmluZSBfR0xJQkNYWF9QUk9GSUxFX1BST0ZJTEVSX1RSQUNFX0ggMQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyNpbmNsdWRlIDxjZXJybm8+CisjaW5jbHVkZSA8Y3N0ZGludD4KKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNkZWZpbmUgX0dMSUJDWFhfSU1QTF9VTk9SREVSRURfTUFQIHN0ZDo6X0dMSUJDWFhfU1REX1BSOjp1bm9yZGVyZWRfbWFwCisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNlbHNlCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHRyMS91bm9yZGVyZWRfbWFwPgorI2RlZmluZSBfR0xJQkNYWF9JTVBMX1VOT1JERVJFRF9NQVAgc3RkOjp0cjE6OnVub3JkZXJlZF9tYXAKKyNlbmRpZgorCisjaW5jbHVkZSA8ZXh0L2NvbmN1cnJlbmNlLmg+CisjaW5jbHVkZSA8ZnN0cmVhbT4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDxiaXRzL3N0bF9oZWFwLmg+IC8vIGZvciBzdGQ6Om1ha2VfaGVhcCwgc3RkOjpzb3J0X2hlYXAKKworI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl9zdGF0ZS5oIgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl9ub2RlLmgiCisKK25hbWVzcGFjZSBfX2dudV9wcm9maWxlCit7CisvKiogQGJyaWVmIEludGVybmFsIGVudmlyb25tZW50LiAgVmFsdWVzIGNhbiBiZSBzZXQgb25lIG9mIHR3byB3YXlzOgorICAgIDEuIEluIGNvbmZpZyBmaWxlICJ2YXIgPSB2YWx1ZSIuICBUaGUgZGVmYXVsdCBjb25maWcgZmlsZSBwYXRoIGlzIAorICAgICAgIGxpYnN0ZGN4eC1wcm9maWxlLmNvbmYuCisgICAgMi4gQnkgc2V0dGluZyBwcm9jZXNzIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIEZvciBpbnN0YW5jZSwgaW4gYSBCYXNoCisgICAgICAgc2hlbGwgeW91IGNhbiBzZXQgdGhlIHVuaXQgY29zdCBvZiBpdGVyYXRpbmcgdGhyb3VnaCBhIG1hcCBsaWtlIHRoaXM6CisgICAgICAgZXhwb3J0IF9fbWFwX2l0ZXJhdGVfY29zdF9mYWN0b3I9NS4wLgorICAgIElmIGEgdmFsdWUgaXMgc2V0IGJvdGggaW4gdGhlIGlucHV0IGZpbGUgYW5kIHRocm91Z2ggYW4gZW52aXJvbm1lbnQKKyAgICB2YXJpYWJsZSwgdGhlIGVudmlyb25tZW50IHZhbHVlIHRha2VzIHByZWNlZGVuY2UuICAqLwordHlwZWRlZiBfR0xJQkNYWF9JTVBMX1VOT1JERVJFRF9NQVA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBfX2Vudl90OworX0dMSUJDWFhfUFJPRklMRV9ERUZJTkVfVU5JTklUX0RBVEEoX19lbnZfdCwgX19lbnYpOworCisvKiogQGJyaWVmIE1hc3RlciBsb2NrLiAgKi8KK19HTElCQ1hYX1BST0ZJTEVfREVGSU5FX1VOSU5JVF9EQVRBKF9fZ251X2N4eDo6X19tdXRleCwgX19nbG9iYWxfbG9jayk7CisKKy8qKiBAYnJpZWYgUmVwcmVzZW50YXRpb24gb2YgYSB3YXJuaW5nLiAgKi8KK3N0cnVjdCBfX3dhcm5pbmdfZGF0YQoreworICBmbG9hdCBfX21hZ25pdHVkZTsKKyAgX19zdGFja190IF9fY29udGV4dDsKKyAgY29uc3QgY2hhciogX193YXJuaW5nX2lkOworICBjb25zdCBjaGFyKiBfX3dhcm5pbmdfbWVzc2FnZTsKKworICBfX3dhcm5pbmdfZGF0YSgpCisgIDogX19tYWduaXR1ZGUoMC4wKSwgX19jb250ZXh0KE5VTEwpLCBfX3dhcm5pbmdfaWQoTlVMTCksCisgICAgX193YXJuaW5nX21lc3NhZ2UoTlVMTCkgeyB9CisKKyAgX193YXJuaW5nX2RhdGEoZmxvYXQgX19tLCBfX3N0YWNrX3QgX19jLCBjb25zdCBjaGFyKiBfX2lkLCAKKyAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19tc2cpCisgIDogX19tYWduaXR1ZGUoX19tKSwgX19jb250ZXh0KF9fYyksIF9fd2FybmluZ19pZChfX2lkKSwKKyAgICBfX3dhcm5pbmdfbWVzc2FnZShfX21zZykgeyB9CisKKyAgYm9vbAorICBvcGVyYXRvcj4oY29uc3Qgc3RydWN0IF9fd2FybmluZ19kYXRhJiBfX290aGVyKSBjb25zdAorICB7IHJldHVybiBfX21hZ25pdHVkZSA+IF9fb3RoZXIuX19tYWduaXR1ZGU7IH0KK307CisKK3R5cGVkZWYgc3RkOjpfR0xJQkNYWF9TVERfUFI6OnZlY3RvcjxfX3dhcm5pbmdfZGF0YT4gX193YXJuaW5nX3ZlY3Rvcl90OworCisvLyBEZWZpbmVkIGluIHByb2ZpbGVyXzxkaWFnbm9zdGljIG5hbWU+LmguCitjbGFzcyBfX3RyYWNlX2hhc2hfZnVuYzsKK2NsYXNzIF9fdHJhY2VfaGFzaHRhYmxlX3NpemU7CitjbGFzcyBfX3RyYWNlX21hcDJ1bWFwOworY2xhc3MgX190cmFjZV92ZWN0b3Jfc2l6ZTsKK2NsYXNzIF9fdHJhY2VfdmVjdG9yX3RvX2xpc3Q7CitjbGFzcyBfX3RyYWNlX2xpc3RfdG9fc2xpc3Q7IAorY2xhc3MgX190cmFjZV9saXN0X3RvX3ZlY3RvcjsgCit2b2lkIF9fdHJhY2VfdmVjdG9yX3NpemVfaW5pdCgpOwordm9pZCBfX3RyYWNlX2hhc2h0YWJsZV9zaXplX2luaXQoKTsKK3ZvaWQgX190cmFjZV9oYXNoX2Z1bmNfaW5pdCgpOwordm9pZCBfX3RyYWNlX3ZlY3Rvcl90b19saXN0X2luaXQoKTsKK3ZvaWQgX190cmFjZV9saXN0X3RvX3NsaXN0X2luaXQoKTsgIAordm9pZCBfX3RyYWNlX2xpc3RfdG9fdmVjdG9yX2luaXQoKTsgIAordm9pZCBfX3RyYWNlX21hcF90b191bm9yZGVyZWRfbWFwX2luaXQoKTsKK3ZvaWQgX190cmFjZV92ZWN0b3Jfc2l6ZV9yZXBvcnQoRklMRSosIF9fd2FybmluZ192ZWN0b3JfdCYpOwordm9pZCBfX3RyYWNlX2hhc2h0YWJsZV9zaXplX3JlcG9ydChGSUxFKiwgX193YXJuaW5nX3ZlY3Rvcl90Jik7Cit2b2lkIF9fdHJhY2VfaGFzaF9mdW5jX3JlcG9ydChGSUxFKiwgX193YXJuaW5nX3ZlY3Rvcl90Jik7Cit2b2lkIF9fdHJhY2VfdmVjdG9yX3RvX2xpc3RfcmVwb3J0KEZJTEUqLCBfX3dhcm5pbmdfdmVjdG9yX3QmKTsKK3ZvaWQgX190cmFjZV9saXN0X3RvX3NsaXN0X3JlcG9ydChGSUxFKiwgX193YXJuaW5nX3ZlY3Rvcl90Jik7IAordm9pZCBfX3RyYWNlX2xpc3RfdG9fdmVjdG9yX3JlcG9ydChGSUxFKiwgX193YXJuaW5nX3ZlY3Rvcl90Jik7Cit2b2lkIF9fdHJhY2VfbWFwX3RvX3Vub3JkZXJlZF9tYXBfcmVwb3J0KEZJTEUqLCBfX3dhcm5pbmdfdmVjdG9yX3QmKTsKKworc3RydWN0IF9fY29zdF9mYWN0b3IKK3sKKyAgY29uc3QgY2hhciogX19lbnZfdmFyOworICBmbG9hdCBfX3ZhbHVlOworfTsKKwordHlwZWRlZiBzdGQ6Ol9HTElCQ1hYX1NURF9QUjo6dmVjdG9yPF9fY29zdF9mYWN0b3IqPiBfX2Nvc3RfZmFjdG9yX3ZlY3RvcjsKKworX0dMSUJDWFhfUFJPRklMRV9ERUZJTkVfREFUQShfX3RyYWNlX2hhc2hfZnVuYyosIF9TX2hhc2hfZnVuYywgTlVMTCk7CitfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9EQVRBKF9fdHJhY2VfaGFzaHRhYmxlX3NpemUqLCBfU19oYXNodGFibGVfc2l6ZSwgTlVMTCk7CitfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9EQVRBKF9fdHJhY2VfbWFwMnVtYXAqLCBfU19tYXAydW1hcCwgTlVMTCk7CitfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9EQVRBKF9fdHJhY2VfdmVjdG9yX3NpemUqLCBfU192ZWN0b3Jfc2l6ZSwgTlVMTCk7CitfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9EQVRBKF9fdHJhY2VfdmVjdG9yX3RvX2xpc3QqLCBfU192ZWN0b3JfdG9fbGlzdCwgTlVMTCk7CitfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9EQVRBKF9fdHJhY2VfbGlzdF90b19zbGlzdCosIF9TX2xpc3RfdG9fc2xpc3QsIE5VTEwpOyAKK19HTElCQ1hYX1BST0ZJTEVfREVGSU5FX0RBVEEoX190cmFjZV9saXN0X3RvX3ZlY3RvciosIF9TX2xpc3RfdG9fdmVjdG9yLCBOVUxMKTsKKworX0dMSUJDWFhfUFJPRklMRV9ERUZJTkVfREFUQShfX2Nvc3RfZmFjdG9yLCBfX3ZlY3Rvcl9zaGlmdF9jb3N0X2ZhY3RvciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiX192ZWN0b3Jfc2hpZnRfY29zdF9mYWN0b3IiLCAxLjB9KTsKK19HTElCQ1hYX1BST0ZJTEVfREVGSU5FX0RBVEEoX19jb3N0X2ZhY3RvciwgX192ZWN0b3JfaXRlcmF0ZV9jb3N0X2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJfX3ZlY3Rvcl9pdGVyYXRlX2Nvc3RfZmFjdG9yIiwgMS4wfSk7CitfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9EQVRBKF9fY29zdF9mYWN0b3IsIF9fdmVjdG9yX3Jlc2l6ZV9jb3N0X2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJfX3ZlY3Rvcl9yZXNpemVfY29zdF9mYWN0b3IiLCAxLjB9KTsgCitfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9EQVRBKF9fY29zdF9mYWN0b3IsIF9fbGlzdF9zaGlmdF9jb3N0X2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJfX2xpc3Rfc2hpZnRfY29zdF9mYWN0b3IiLCAwLjB9KTsKK19HTElCQ1hYX1BST0ZJTEVfREVGSU5FX0RBVEEoX19jb3N0X2ZhY3RvciwgX19saXN0X2l0ZXJhdGVfY29zdF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiX19saXN0X2l0ZXJhdGVfY29zdF9mYWN0b3IiLCAxMC4wfSk7IAorX0dMSUJDWFhfUFJPRklMRV9ERUZJTkVfREFUQShfX2Nvc3RfZmFjdG9yLCBfX2xpc3RfcmVzaXplX2Nvc3RfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Il9fbGlzdF9yZXNpemVfY29zdF9mYWN0b3IiLCAwLjB9KTsgCitfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9EQVRBKF9fY29zdF9mYWN0b3IsIF9fbWFwX2luc2VydF9jb3N0X2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJfX21hcF9pbnNlcnRfY29zdF9mYWN0b3IiLCAxLjV9KTsKK19HTElCQ1hYX1BST0ZJTEVfREVGSU5FX0RBVEEoX19jb3N0X2ZhY3RvciwgX19tYXBfZXJhc2VfY29zdF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiX19tYXBfZXJhc2VfY29zdF9mYWN0b3IiLCAxLjV9KTsKK19HTElCQ1hYX1BST0ZJTEVfREVGSU5FX0RBVEEoX19jb3N0X2ZhY3RvciwgX19tYXBfZmluZF9jb3N0X2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJfX21hcF9maW5kX2Nvc3RfZmFjdG9yIiwgMX0pOworX0dMSUJDWFhfUFJPRklMRV9ERUZJTkVfREFUQShfX2Nvc3RfZmFjdG9yLCBfX21hcF9pdGVyYXRlX2Nvc3RfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Il9fbWFwX2l0ZXJhdGVfY29zdF9mYWN0b3IiLCAyLjN9KTsKK19HTElCQ1hYX1BST0ZJTEVfREVGSU5FX0RBVEEoX19jb3N0X2ZhY3RvciwgX191bWFwX2luc2VydF9jb3N0X2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJfX3VtYXBfaW5zZXJ0X2Nvc3RfZmFjdG9yIiwgMTIuMH0pOworX0dMSUJDWFhfUFJPRklMRV9ERUZJTkVfREFUQShfX2Nvc3RfZmFjdG9yLCBfX3VtYXBfZXJhc2VfY29zdF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiX191bWFwX2VyYXNlX2Nvc3RfZmFjdG9yIiwgMTIuMH0pOworX0dMSUJDWFhfUFJPRklMRV9ERUZJTkVfREFUQShfX2Nvc3RfZmFjdG9yLCBfX3VtYXBfZmluZF9jb3N0X2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJfX3VtYXBfZmluZF9jb3N0X2ZhY3RvciIsIDEwLjB9KTsKK19HTElCQ1hYX1BST0ZJTEVfREVGSU5FX0RBVEEoX19jb3N0X2ZhY3RvciwgX191bWFwX2l0ZXJhdGVfY29zdF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiX191bWFwX2l0ZXJhdGVfY29zdF9mYWN0b3IiLCAxLjd9KTsKK19HTElCQ1hYX1BST0ZJTEVfREVGSU5FX0RBVEEoX19jb3N0X2ZhY3Rvcl92ZWN0b3IqLCBfX2Nvc3RfZmFjdG9ycywgTlVMTCk7CisKK19HTElCQ1hYX1BST0ZJTEVfREVGSU5FX0RBVEEoY29uc3QgY2hhciosIF9TX3RyYWNlX2ZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMSUJDWFhfUFJPRklMRV9UUkFDRV9QQVRIX1JPT1QpOworX0dMSUJDWFhfUFJPRklMRV9ERUZJTkVfREFUQShzaXplX3QsIF9TX21heF93YXJuX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xJQkNYWF9QUk9GSUxFX01BWF9XQVJOX0NPVU5UKTsKK19HTElCQ1hYX1BST0ZJTEVfREVGSU5FX0RBVEEoc2l6ZV90LCBfU19tYXhfc3RhY2tfZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTElCQ1hYX1BST0ZJTEVfTUFYX1NUQUNLX0RFUFRIKTsKK19HTElCQ1hYX1BST0ZJTEVfREVGSU5FX0RBVEEoc2l6ZV90LCBfU19tYXhfbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xJQkNYWF9QUk9GSUxFX01FTV9QRVJfRElBR05PU1RJQyk7CisKK2lubGluZSBzaXplX3QgX19zdGFja19tYXhfZGVwdGgoKQoreworICByZXR1cm4gX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX21heF9zdGFja19kZXB0aCk7Cit9CisKK2lubGluZSBzaXplX3QgX19tYXhfbWVtKCkKK3sKKyAgcmV0dXJuIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19tYXhfbWVtKTsKK30KKworLyoqIEBicmllZiBCYXNlIGNsYXNzIGZvciBhbGwgdHJhY2UgcHJvZHVjZXJzLiAgKi8KK3RlbXBsYXRlIDx0eXBlbmFtZSBfX29iamVjdF9pbmZvLCB0eXBlbmFtZSBfX3N0YWNrX2luZm8+CitjbGFzcyBfX3RyYWNlX2Jhc2UKK3sKKyBwdWJsaWM6CisgIF9fdHJhY2VfYmFzZSgpOworICB2aXJ0dWFsIH5fX3RyYWNlX2Jhc2UoKSB7fQorCisgIHZvaWQgX19hZGRfb2JqZWN0KF9fb2JqZWN0X3Qgb2JqZWN0LCBfX29iamVjdF9pbmZvIF9faW5mbyk7CisgIF9fb2JqZWN0X2luZm8qIF9fZ2V0X29iamVjdF9pbmZvKF9fb2JqZWN0X3QgX19vYmplY3QpOworICB2b2lkIF9fcmV0aXJlX29iamVjdChfX29iamVjdF90IF9fb2JqZWN0KTsKKyAgdm9pZCBfX3dyaXRlKEZJTEUqIGYpOworICB2b2lkIF9fY29sbGVjdF93YXJuaW5ncyhfX3dhcm5pbmdfdmVjdG9yX3QmIF9fd2FybmluZ3MpOworCisgcHJpdmF0ZToKKyAgX19nbnVfY3h4OjpfX211dGV4IF9fb2JqZWN0X3RhYmxlX2xvY2s7CisgIF9fZ251X2N4eDo6X19tdXRleCBfX3N0YWNrX3RhYmxlX2xvY2s7CisgIHR5cGVkZWYgX0dMSUJDWFhfSU1QTF9VTk9SREVSRURfTUFQPF9fb2JqZWN0X3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX29iamVjdF9pbmZvPiBfX29iamVjdF90YWJsZV90OworICB0eXBlZGVmIF9HTElCQ1hYX0lNUExfVU5PUkRFUkVEX01BUDxfX3N0YWNrX3QsIF9fc3RhY2tfaW5mbywgX19zdGFja19oYXNoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdGFja19oYXNoPiBfX3N0YWNrX3RhYmxlX3Q7CisgIF9fb2JqZWN0X3RhYmxlX3QgX19vYmplY3RfdGFibGU7CisgIF9fc3RhY2tfdGFibGVfdCBfX3N0YWNrX3RhYmxlOworICBzaXplX3QgX19zdGFja190YWJsZV9ieXRlX3NpemU7CisKKyBwcm90ZWN0ZWQ6CisgIGNvbnN0IGNoYXIqIF9faWQ7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgX19vYmplY3RfaW5mbywgdHlwZW5hbWUgX19zdGFja19pbmZvPgordm9pZCBfX3RyYWNlX2Jhc2U8X19vYmplY3RfaW5mbywgX19zdGFja19pbmZvPjo6X19jb2xsZWN0X3dhcm5pbmdzKAorICAgIF9fd2FybmluZ192ZWN0b3JfdCYgX193YXJuaW5ncykKK3sKKyAgdHlwZW5hbWUgX19zdGFja190YWJsZV90OjppdGVyYXRvciBfX2kgPSBfX3N0YWNrX3RhYmxlLmJlZ2luKCk7CisgIGZvciAoIDsgX19pICE9IF9fc3RhY2tfdGFibGUuZW5kKCk7ICsrX19pICkKKyAgeworICAgIF9fd2FybmluZ3MucHVzaF9iYWNrKF9fd2FybmluZ19kYXRhKCgqX19pKS5zZWNvbmQuX19tYWduaXR1ZGUoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpfX2kpLmZpcnN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqX19pKS5zZWNvbmQuX19hZHZpY2UoKSkpOworICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBfX29iamVjdF9pbmZvLCB0eXBlbmFtZSBfX3N0YWNrX2luZm8+CitfX3RyYWNlX2Jhc2U8X19vYmplY3RfaW5mbywgX19zdGFja19pbmZvPjo6X190cmFjZV9iYXNlKCkKK3sKKyAgLy8gRG8gbm90IHBpY2sgdGhlIGluaXRpYWwgc2l6ZSB0b28gbGFyZ2UsIGFzIHdlIGRvbid0IGtub3cgd2hpY2ggZGlhZ25vc3RpY3MKKyAgLy8gYXJlIG1vcmUgYWN0aXZlLgorICBfX29iamVjdF90YWJsZS5yZWhhc2goMTAwMDApOworICBfX3N0YWNrX3RhYmxlLnJlaGFzaCgxMDAwMCk7CisgIF9fc3RhY2tfdGFibGVfYnl0ZV9zaXplID0gMDsKKyAgX19pZCA9IE5VTEw7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBfX29iamVjdF9pbmZvLCB0eXBlbmFtZSBfX3N0YWNrX2luZm8+Cit2b2lkIF9fdHJhY2VfYmFzZTxfX29iamVjdF9pbmZvLCBfX3N0YWNrX2luZm8+OjpfX2FkZF9vYmplY3QoCisgICAgX19vYmplY3RfdCBfX29iamVjdCwgX19vYmplY3RfaW5mbyBfX2luZm8pCit7CisgIGlmIChfX21heF9tZW0oKSA9PSAwIAorICAgICAgfHwgX19vYmplY3RfdGFibGUuc2l6ZSgpICogc2l6ZW9mKF9fb2JqZWN0X2luZm8pIDw9IF9fbWF4X21lbSgpKSB7CisgICAgdGhpcy0+X19vYmplY3RfdGFibGVfbG9jay5sb2NrKCk7CisgICAgX19vYmplY3RfdGFibGUuaW5zZXJ0KAorICAgICAgICB0eXBlbmFtZSBfX29iamVjdF90YWJsZV90Ojp2YWx1ZV90eXBlKF9fb2JqZWN0LCBfX2luZm8pKTsKKyAgICB0aGlzLT5fX29iamVjdF90YWJsZV9sb2NrLnVubG9jaygpOworICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBfX29iamVjdF9pbmZvLCB0eXBlbmFtZSBfX3N0YWNrX2luZm8+CitfX29iamVjdF9pbmZvKiBfX3RyYWNlX2Jhc2U8X19vYmplY3RfaW5mbywgX19zdGFja19pbmZvPjo6X19nZXRfb2JqZWN0X2luZm8oCisgICAgX19vYmplY3RfdCBfX29iamVjdCkKK3sKKyAgLy8gWFhYOiBSZXZpc2l0IHRoaXMgdG8gc2VlIGlmIHdlIGNhbiBkZWNyZWFzZSBtdXRleCBzcGFucy4KKyAgLy8gV2l0aG91dCB0aGlzIG11dGV4LCB0aGUgb2JqZWN0IHRhYmxlIGNvdWxkIGJlIHJlaGFzaGVkIGR1cmluZyBhbgorICAvLyBpbnNlcnRpb24gb24gYW5vdGhlciB0aHJlYWQsIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBhIHNlZ2ZhdWx0LgorICB0aGlzLT5fX29iamVjdF90YWJsZV9sb2NrLmxvY2soKTsKKyAgdHlwZW5hbWUgX19vYmplY3RfdGFibGVfdDo6aXRlcmF0b3IgX19vYmplY3RfaXQgPSAKKyAgICAgIF9fb2JqZWN0X3RhYmxlLmZpbmQoX19vYmplY3QpOworICBpZiAoX19vYmplY3RfaXQgPT0gX19vYmplY3RfdGFibGUuZW5kKCkpeworICAgIHRoaXMtPl9fb2JqZWN0X3RhYmxlX2xvY2sudW5sb2NrKCk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0gZWxzZSB7CisgICAgdGhpcy0+X19vYmplY3RfdGFibGVfbG9jay51bmxvY2soKTsKKyAgICByZXR1cm4gJl9fb2JqZWN0X2l0LT5zZWNvbmQ7CisgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIF9fb2JqZWN0X2luZm8sIHR5cGVuYW1lIF9fc3RhY2tfaW5mbz4KK3ZvaWQgX190cmFjZV9iYXNlPF9fb2JqZWN0X2luZm8sIF9fc3RhY2tfaW5mbz46Ol9fcmV0aXJlX29iamVjdCgKKyAgICBfX29iamVjdF90IF9fb2JqZWN0KQoreworICB0aGlzLT5fX29iamVjdF90YWJsZV9sb2NrLmxvY2soKTsKKyAgdGhpcy0+X19zdGFja190YWJsZV9sb2NrLmxvY2soKTsKKyAgdHlwZW5hbWUgX19vYmplY3RfdGFibGVfdDo6aXRlcmF0b3IgX19vYmplY3RfaXQgPQorICAgICAgX19vYmplY3RfdGFibGUuZmluZChfX29iamVjdCk7CisgIGlmIChfX29iamVjdF9pdCAhPSBfX29iamVjdF90YWJsZS5lbmQoKSl7CisgICAgY29uc3QgX19vYmplY3RfaW5mbyYgX19pbmZvID0gX19vYmplY3RfaXQtPnNlY29uZDsKKyAgICBjb25zdCBfX3N0YWNrX3QmIF9fc3RhY2sgPSBfX2luZm8uX19zdGFjaygpOworICAgIHR5cGVuYW1lIF9fc3RhY2tfdGFibGVfdDo6aXRlcmF0b3IgX19zdGFja19pdCA9IAorICAgICAgICBfX3N0YWNrX3RhYmxlLmZpbmQoX19zdGFjayk7CisgICAgaWYgKF9fc3RhY2tfaXQgPT0gX19zdGFja190YWJsZS5lbmQoKSkgeworICAgICAgLy8gRmlyc3Qgb2NjdXJlbmNlIG9mIHRoaXMgY2FsbCBjb250ZXh0LgorICAgICAgaWYgKF9fbWF4X21lbSgpID09IDAgfHwgX19zdGFja190YWJsZV9ieXRlX3NpemUgPCBfX21heF9tZW0oKSkgeworICAgICAgICBfX3N0YWNrX3RhYmxlX2J5dGVfc2l6ZSArPSAKKyAgICAgICAgICAgIChzaXplb2YoX19pbnN0cnVjdGlvbl9hZGRyZXNzX3QpICogX19zaXplKF9fc3RhY2spCisgICAgICAgICAgICAgKyBzaXplb2YoX19zdGFjaykgKyBzaXplb2YoX19zdGFja19pbmZvKSk7CisgICAgICAgIF9fc3RhY2tfdGFibGUuaW5zZXJ0KG1ha2VfcGFpcihfX3N0YWNrLCBfX3N0YWNrX2luZm8oX19pbmZvKSkpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAvLyBNZXJnZSBvYmplY3QgaW5mbyBpbnRvIGluZm8gc3VtbWFyeSBmb3IgdGhpcyBjYWxsIGNvbnRleHQuCisgICAgICBfX3N0YWNrX2l0LT5zZWNvbmQuX19tZXJnZShfX2luZm8pOworICAgICAgZGVsZXRlIF9fc3RhY2s7CisgICAgfQorICAgIF9fb2JqZWN0X3RhYmxlLmVyYXNlKF9fb2JqZWN0KTsKKyAgfQorICB0aGlzLT5fX29iamVjdF90YWJsZV9sb2NrLnVubG9jaygpOworICB0aGlzLT5fX3N0YWNrX3RhYmxlX2xvY2sudW5sb2NrKCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBfX29iamVjdF9pbmZvLCB0eXBlbmFtZSBfX3N0YWNrX2luZm8+Cit2b2lkIF9fdHJhY2VfYmFzZTxfX29iamVjdF9pbmZvLCBfX3N0YWNrX2luZm8+OjpfX3dyaXRlKEZJTEUqIF9fZikKK3sKKyAgdHlwZW5hbWUgX19zdGFja190YWJsZV90OjppdGVyYXRvciBfX2l0OworCisgIGZvciAoX19pdCA9IF9fc3RhY2tfdGFibGUuYmVnaW4oKTsgX19pdCAhPSBfX3N0YWNrX3RhYmxlLmVuZCgpOyBfX2l0KyspIHsKKyAgICBpZiAoX19pdC0+c2Vjb25kLl9faXNfdmFsaWQoKSkgeworICAgICAgZnByaW50ZihfX2YsIF9faWQpOworICAgICAgZnByaW50ZihfX2YsICJ8Iik7CisgICAgICBfX2dudV9wcm9maWxlOjpfX3dyaXRlKF9fZiwgX19pdC0+Zmlyc3QpOworICAgICAgZnByaW50ZihfX2YsICJ8Iik7CisgICAgICBfX2l0LT5zZWNvbmQuX193cml0ZShfX2YpOworICAgIH0KKyAgfQorfQorCitpbmxpbmUgc2l6ZV90IF9fZW52X3RvX3NpemVfdChjb25zdCBjaGFyKiBfX2Vudl92YXIsIHNpemVfdCBfX2RlZmF1bHRfdmFsdWUpCit7CisgIGNoYXIqIF9fZW52X3ZhbHVlID0gZ2V0ZW52KF9fZW52X3Zhcik7CisgIGlmIChfX2Vudl92YWx1ZSkgeworICAgIGxvbmcgaW50IF9fY29udmVydGVkX3ZhbHVlID0gc3RydG9sKF9fZW52X3ZhbHVlLCBOVUxMLCAxMCk7CisgICAgaWYgKGVycm5vIHx8IF9fY29udmVydGVkX3ZhbHVlIDwgMCkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJCYWQgdmFsdWUgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlICclcycuXG4iLCBfX2Vudl92YXIpOworICAgICAgYWJvcnQoKTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oX19jb252ZXJ0ZWRfdmFsdWUpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gX19kZWZhdWx0X3ZhbHVlOworICB9Cit9CisKK2lubGluZSB2b2lkIF9fc2V0X21heF9zdGFja190cmFjZV9kZXB0aCgpCit7CisgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19tYXhfc3RhY2tfZGVwdGgpID0gX19lbnZfdG9fc2l6ZV90KAorICAgICAgX0dMSUJDWFhfUFJPRklMRV9NQVhfU1RBQ0tfREVQVEhfRU5WX1ZBUiwKKyAgICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19tYXhfc3RhY2tfZGVwdGgpKTsKK30KKworaW5saW5lIHZvaWQgX19zZXRfbWF4X21lbSgpCit7CisgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19tYXhfbWVtKSA9IF9fZW52X3RvX3NpemVfdCgKKyAgICAgIF9HTElCQ1hYX1BST0ZJTEVfTUVNX1BFUl9ESUFHTk9TVElDX0VOVl9WQVIsCisgICAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbWF4X21lbSkpOworfQorCitpbmxpbmUgaW50IF9fbG9nX21hZ25pdHVkZShmbG9hdCBfX2YpCit7CisgIGNvbnN0IGZsb2F0IF9fbG9nX2Jhc2UgPSAxMC4wOworICBpbnQgX19yZXN1bHQgPSAwOworICBpbnQgX19zaWduID0gMTsKKyAgaWYgKF9fZiA8IDApIHsKKyAgICBfX2YgPSAtX19mOworICAgIF9fc2lnbiA9IC0xOworICB9CisgIHdoaWxlIChfX2YgPiBfX2xvZ19iYXNlKSB7CisgICAgKytfX3Jlc3VsdDsKKyAgICBfX2YgLz0gMTAuMDsKKyAgfQorICByZXR1cm4gX19zaWduICogX19yZXN1bHQ7Cit9CisKK2lubGluZSBGSUxFKiBfX29wZW5fb3V0cHV0X2ZpbGUoY29uc3QgY2hhciogX19leHRlbnNpb24pCit7CisgIC8vIFRoZSBwYXRoIGlzIG1hZGUgb2YgX1NfdHJhY2VfZmlsZV9uYW1lICsgIi4iICsgZXh0ZW5zaW9uLgorICBzaXplX3QgX19yb290X2xlbiA9IHN0cmxlbihfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfdHJhY2VfZmlsZV9uYW1lKSk7CisgIHNpemVfdCBfX2V4dF9sZW4gPSBzdHJsZW4oX19leHRlbnNpb24pOworICBjaGFyKiBfX2ZpbGVfbmFtZSA9IG5ldyBjaGFyW19fcm9vdF9sZW4gKyAxICsgX19leHRfbGVuICsgMV07CisgIG1lbWNweShfX2ZpbGVfbmFtZSwgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX3RyYWNlX2ZpbGVfbmFtZSksIF9fcm9vdF9sZW4pOworICAqKF9fZmlsZV9uYW1lICsgX19yb290X2xlbikgPSAnLic7CisgIG1lbWNweShfX2ZpbGVfbmFtZSArIF9fcm9vdF9sZW4gKyAxLCBfX2V4dGVuc2lvbiwgX19leHRfbGVuICsgMSk7CisgIEZJTEUqIF9fb3V0X2ZpbGUgPSBmb3BlbihfX2ZpbGVfbmFtZSwgInciKTsKKyAgaWYgKF9fb3V0X2ZpbGUpIHsKKyAgICByZXR1cm4gX19vdXRfZmlsZTsKKyAgfSBlbHNlIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBvcGVuIHRyYWNlIGZpbGUgJyVzJy5cbiIsIF9fZmlsZV9uYW1lKTsKKyAgICBhYm9ydCgpOworICB9Cit9CisKKy8qKiBAYnJpZWYgRmluYWwgcmVwb3J0IG1ldGhvZCwgcmVnaXN0ZXJlZCB3aXRoIEBiIGF0ZXhpdC4KKyAqCisgKiBUaGlzIGNhbiBhbHNvIGJlIGNhbGxlZCBkaXJlY3RseSBieSB1c2VyIGNvZGUsIGluY2x1ZGluZyBzaWduYWwgaGFuZGxlcnMuCisgKiBJdCBpcyBwcm90ZWN0ZWQgYWdhaW5zdCBkZWFkbG9ja3MgYnkgdGhlIHJlZW50cmFuY2UgZ3VhcmQgaW4gcHJvZmlsZXIuaC4KKyAqIEhvd2V2ZXIsIHdoZW4gY2FsbGVkIGZyb20gYSBzaWduYWwgaGFuZGxlciB0aGF0IHRyaWdnZXJzIHdoaWxlIHdpdGhpbgorICogX19nbnVfcHJvZmlsZSAodW5kZXIgdGhlIGd1YXJkZWQgem9uZSksIG5vIG91dHB1dCB3aWxsIGJlIHByb2R1Y2VkLgorICovCitpbmxpbmUgdm9pZCBfX3JlcG9ydCh2b2lkKQoreworICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19nbG9iYWxfbG9jaykubG9jaygpOworCisgIF9fd2FybmluZ192ZWN0b3JfdCBfX3dhcm5pbmdzOworCisgIEZJTEUqIF9fcmF3X2ZpbGUgPSBfX29wZW5fb3V0cHV0X2ZpbGUoInJhdyIpOworICBfX3RyYWNlX3ZlY3Rvcl9zaXplX3JlcG9ydChfX3Jhd19maWxlLCBfX3dhcm5pbmdzKTsKKyAgX190cmFjZV9oYXNodGFibGVfc2l6ZV9yZXBvcnQoX19yYXdfZmlsZSwgX193YXJuaW5ncyk7CisgIF9fdHJhY2VfaGFzaF9mdW5jX3JlcG9ydChfX3Jhd19maWxlLCBfX3dhcm5pbmdzKTsKKyAgX190cmFjZV92ZWN0b3JfdG9fbGlzdF9yZXBvcnQoX19yYXdfZmlsZSwgX193YXJuaW5ncyk7CisgIF9fdHJhY2VfbGlzdF90b19zbGlzdF9yZXBvcnQoX19yYXdfZmlsZSwgX193YXJuaW5ncyk7CisgIF9fdHJhY2VfbGlzdF90b192ZWN0b3JfcmVwb3J0KF9fcmF3X2ZpbGUsIF9fd2FybmluZ3MpOworICBfX3RyYWNlX21hcF90b191bm9yZGVyZWRfbWFwX3JlcG9ydChfX3Jhd19maWxlLCBfX3dhcm5pbmdzKTsKKyAgZmNsb3NlKF9fcmF3X2ZpbGUpOworCisgIC8vIFNvcnQgZGF0YSBieSBtYWduaXR1ZGUuCisgIC8vIFhYWDogaW5zdGVhZCBvZiBzb3J0aW5nLCBzaG91bGQgY29sbGVjdCBvbmx5IHRvcCBOIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCisgIHNpemVfdCBfX2N1dG9mZiA9IHN0ZDo6bWluKF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19tYXhfd2Fybl9jb3VudCksCisJCQkgICAgIF9fd2FybmluZ3Muc2l6ZSgpKTsKKworICBzdGQ6Om1ha2VfaGVhcChfX3dhcm5pbmdzLmJlZ2luKCksIF9fd2FybmluZ3MuZW5kKCksCisJCSBzdGQ6OmdyZWF0ZXI8X193YXJuaW5nX3ZlY3Rvcl90Ojp2YWx1ZV90eXBlPigpKTsKKyAgc3RkOjpzb3J0X2hlYXAoX193YXJuaW5ncy5iZWdpbigpLCBfX3dhcm5pbmdzLmVuZCgpLAorCQkgc3RkOjpncmVhdGVyPF9fd2FybmluZ192ZWN0b3JfdDo6dmFsdWVfdHlwZT4oKSk7CisgIF9fd2FybmluZ3MucmVzaXplKF9fY3V0b2ZmKTsKKworICBGSUxFKiBfX3dhcm5fZmlsZSA9IF9fb3Blbl9vdXRwdXRfZmlsZSgidHh0Iik7CisKKyAgZm9yIChfX3dhcm5pbmdfdmVjdG9yX3Q6Oml0ZXJhdG9yIF9faXQgPSBfX3dhcm5pbmdzLmJlZ2luKCk7CisgICAgICAgX19pdCAhPSBfX3dhcm5pbmdzLmVuZCgpOyArK19faXQpCisgICAgeworICAgICAgZnByaW50ZihfX3dhcm5fZmlsZSwgIF9faXQtPl9fd2FybmluZ19pZCk7CisgICAgICBmcHJpbnRmKF9fd2Fybl9maWxlLCAiOiBpbXByb3ZlbWVudCA9ICVkIiwKKwkgICAgICBfX2xvZ19tYWduaXR1ZGUoX19pdC0+X19tYWduaXR1ZGUpKTsKKyAgICAgIGZwcmludGYoX193YXJuX2ZpbGUsICI6IGNhbGwgc3RhY2sgPSAiKTsKKyAgICAgIF9fZ251X3Byb2ZpbGU6Ol9fd3JpdGUoX193YXJuX2ZpbGUsIF9faXQtPl9fY29udGV4dCk7CisgICAgICBmcHJpbnRmKF9fd2Fybl9maWxlLCAiOiBhZHZpY2UgPSAlc1xuIiwgX19pdC0+X193YXJuaW5nX21lc3NhZ2UpOworICAgICAgZnJlZShjb25zdF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQqPgorCQkJICAgICAoX19pdC0+X193YXJuaW5nX21lc3NhZ2UpKSk7CisgICAgfQorCisgIGZjbG9zZShfX3dhcm5fZmlsZSk7CisKKyAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fZ2xvYmFsX2xvY2spLnVubG9jaygpOworfQorCitpbmxpbmUgdm9pZCBfX3NldF90cmFjZV9wYXRoKCkKK3sKKyAgY2hhciogX19lbnZfdHJhY2VfZmlsZV9uYW1lID0gZ2V0ZW52KF9HTElCQ1hYX1BST0ZJTEVfVFJBQ0VfRU5WX1ZBUik7CisKKyAgaWYgKF9fZW52X3RyYWNlX2ZpbGVfbmFtZSkgeyAKKyAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfdHJhY2VfZmlsZV9uYW1lKSA9IF9fZW52X3RyYWNlX2ZpbGVfbmFtZTsgCisgIH0KKworICAvLyBNYWtlIHN1cmUgZWFybHkgdGhhdCB3ZSBjYW4gY3JlYXRlIHRoZSB0cmFjZSBmaWxlLgorICBmY2xvc2UoX19vcGVuX291dHB1dF9maWxlKCJ0eHQiKSk7Cit9CisKK2lubGluZSB2b2lkIF9fc2V0X21heF93YXJuX2NvdW50KCkKK3sKKyAgY2hhciogX19lbnZfbWF4X3dhcm5fY291bnRfc3RyID0gZ2V0ZW52KAorICAgICAgX0dMSUJDWFhfUFJPRklMRV9NQVhfV0FSTl9DT1VOVF9FTlZfVkFSKTsKKworICBpZiAoX19lbnZfbWF4X3dhcm5fY291bnRfc3RyKSB7CisgICAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX21heF93YXJuX2NvdW50KSA9IHN0YXRpY19jYXN0PHNpemVfdD4oCisgICAgICAgIGF0b2koX19lbnZfbWF4X3dhcm5fY291bnRfc3RyKSk7CisgIH0KK30KKworaW5saW5lIHZvaWQgX19yZWFkX2Nvc3RfZmFjdG9ycygpCit7CisgIHN0ZDo6c3RyaW5nIF9fY29uZl9maWxlX25hbWUoX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX3RyYWNlX2ZpbGVfbmFtZSkpOworICBfX2NvbmZfZmlsZV9uYW1lICs9ICIuY29uZiI7CisKKyAgc3RkOjppZnN0cmVhbSBfX2NvbmZfZmlsZShfX2NvbmZfZmlsZV9uYW1lLmNfc3RyKCkpOworCisgIGlmIChfX2NvbmZfZmlsZS5pc19vcGVuKCkpCisgICAgeworICAgICAgc3RkOjpzdHJpbmcgX19saW5lOworCisgICAgICB3aGlsZSAoZ2V0bGluZShfX2NvbmZfZmlsZSwgX19saW5lKSkKKwl7CisJICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIF9faSA9IF9fbGluZS5maW5kX2ZpcnN0X25vdF9vZigiIFx0XG5cdiIpOworCisJICBpZiAoX19saW5lLmxlbmd0aCgpIDw9IDAgfHwgX19saW5lW19faV0gPT0gJyMnKSB7CisJICAgIC8vIFNraXAgZW1wdHkgbGluZXMgb3IgY29tbWVudHMuCisJICAgIGNvbnRpbnVlOworCSAgfQorCisJICAvLyBUcmltLgorCSAgaWYgKF9fbGluZS5iZWdpbigpICE9IF9fbGluZS5lbmQoKSkKKwkgICAgeworCSAgICAgIC8vIEEgc2ltcGxlIHJlbW92ZSBvcGVyYXRpb24uCisJICAgICAgc3RkOjpzdHJpbmc6Oml0ZXJhdG9yIF9fZmlyc3QgPSBfX2xpbmUuYmVnaW4oKTsKKwkgICAgICBzdGQ6OnN0cmluZzo6aXRlcmF0b3IgX19yZXN1bHQgPSBfX2ZpcnN0OworCSAgICAgICsrX19maXJzdDsKKwkgICAgICBmb3IoOyBfX2ZpcnN0ICE9IF9fbGluZS5lbmQoKTsgKytfX2ZpcnN0KQorCQlpZighKCpfX2ZpcnN0ID09ICcgJykpCisJCSAgeworCQkgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CisJCSAgICArK19fcmVzdWx0OworCQkgIH0KKwkgICAgICBfX2xpbmUuZXJhc2UoX19yZXN1bHQsIF9fbGluZS5lbmQoKSk7CisJICAgIH0KKwkgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgX19wb3MgPSBfX2xpbmUuZmluZCgiPSIpOworCSAgc3RkOjpzdHJpbmcgX19mYWN0b3JfbmFtZSA9IF9fbGluZS5zdWJzdHIoMCwgX19wb3MpOworCSAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBfX2VuZCA9IF9fbGluZS5maW5kX2ZpcnN0X29mKCI7XG4iKTsKKwkgIHN0ZDo6c3RyaW5nIF9fZmFjdG9yX3ZhbHVlID0gX19saW5lLnN1YnN0cihfX3BvcyArIDEsIF9fZW5kIC0gX19wb3MpOworCisgICAgICAgICAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fZW52KVtfX2ZhY3Rvcl9uYW1lXSA9IF9fZmFjdG9yX3ZhbHVlOworCX0KKyAgICB9Cit9CisKK2lubGluZSB2b2lkIF9fd3JpdGVfY29zdF9mYWN0b3JzKCkKK3sKKyAgRklMRSogX19maWxlID0gX19vcGVuX291dHB1dF9maWxlKCJjb25mLm91dCIpOworCisgIGZvciAoX19kZWNsdHlwZShfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19jb3N0X2ZhY3RvcnMpLT5iZWdpbigpKSBfX2l0CisJID0gX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fY29zdF9mYWN0b3JzKS0+YmVnaW4oKTsKKyAgICAgICBfX2l0ICE9IF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX2Nvc3RfZmFjdG9ycyktPmVuZCgpOyArK19faXQpCisgICAgZnByaW50ZihfX2ZpbGUsICIlcyA9ICVmXG4iLCAoKl9faXQpLT5fX2Vudl92YXIsICgqX19pdCktPl9fdmFsdWUpOworCisgIGZjbG9zZShfX2ZpbGUpOworfQorCitpbmxpbmUgdm9pZCBfX3NldF9jb3N0X2ZhY3RvcnMoKQoreworICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19jb3N0X2ZhY3RvcnMpID0gbmV3IF9fY29zdF9mYWN0b3JfdmVjdG9yOworICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19jb3N0X2ZhY3RvcnMpLT5wdXNoX2JhY2soCisgICAgICAmX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fdmVjdG9yX3NoaWZ0X2Nvc3RfZmFjdG9yKSk7CisgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX2Nvc3RfZmFjdG9ycyktPnB1c2hfYmFjaygKKyAgICAgICZfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX192ZWN0b3JfaXRlcmF0ZV9jb3N0X2ZhY3RvcikpOworICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19jb3N0X2ZhY3RvcnMpLT5wdXNoX2JhY2soCisgICAgICAmX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fdmVjdG9yX3Jlc2l6ZV9jb3N0X2ZhY3RvcikpOworICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19jb3N0X2ZhY3RvcnMpLT5wdXNoX2JhY2soCisgICAgICAmX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fbGlzdF9zaGlmdF9jb3N0X2ZhY3RvcikpOworICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19jb3N0X2ZhY3RvcnMpLT5wdXNoX2JhY2soCisgICAgICAmX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fbGlzdF9pdGVyYXRlX2Nvc3RfZmFjdG9yKSk7CisgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX2Nvc3RfZmFjdG9ycyktPnB1c2hfYmFjaygKKyAgICAgICZfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19saXN0X3Jlc2l6ZV9jb3N0X2ZhY3RvcikpOworICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19jb3N0X2ZhY3RvcnMpLT5wdXNoX2JhY2soCisgICAgICAmX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fbWFwX2luc2VydF9jb3N0X2ZhY3RvcikpOworICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19jb3N0X2ZhY3RvcnMpLT5wdXNoX2JhY2soCisgICAgICAmX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fbWFwX2VyYXNlX2Nvc3RfZmFjdG9yKSk7CisgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX2Nvc3RfZmFjdG9ycyktPnB1c2hfYmFjaygKKyAgICAgICZfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19tYXBfZmluZF9jb3N0X2ZhY3RvcikpOworICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19jb3N0X2ZhY3RvcnMpLT5wdXNoX2JhY2soCisgICAgICAmX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fbWFwX2l0ZXJhdGVfY29zdF9mYWN0b3IpKTsKKyAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fY29zdF9mYWN0b3JzKS0+cHVzaF9iYWNrKAorICAgICAgJl9HTElCQ1hYX1BST0ZJTEVfREFUQShfX3VtYXBfaW5zZXJ0X2Nvc3RfZmFjdG9yKSk7CisgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX2Nvc3RfZmFjdG9ycyktPnB1c2hfYmFjaygKKyAgICAgICZfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX191bWFwX2VyYXNlX2Nvc3RfZmFjdG9yKSk7CisgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX2Nvc3RfZmFjdG9ycyktPnB1c2hfYmFjaygKKyAgICAgICZfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX191bWFwX2ZpbmRfY29zdF9mYWN0b3IpKTsKKyAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fY29zdF9mYWN0b3JzKS0+cHVzaF9iYWNrKAorICAgICAgJl9HTElCQ1hYX1BST0ZJTEVfREFUQShfX3VtYXBfaXRlcmF0ZV9jb3N0X2ZhY3RvcikpOworCisgIGZvciAoX19kZWNsdHlwZShfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19jb3N0X2ZhY3RvcnMpLT5iZWdpbigpKSBfX2l0CisJID0gX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fY29zdF9mYWN0b3JzKS0+YmVnaW4oKTsKKyAgICAgICBfX2l0ICE9IF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX2Nvc3RfZmFjdG9ycyktPmVuZCgpOyArK19faXQpCisgICAgeworICAgICAgY29uc3QgY2hhciogX19lbnZfY29zdF9mYWN0b3IgPSBnZXRlbnYoKCpfX2l0KS0+X19lbnZfdmFyKTsKKyAgICAgIGlmICghX19lbnZfY29zdF9mYWN0b3IpCisgICAgICAgIHsKKyAgICAgICAgICBfX2Vudl90OjppdGVyYXRvciBfX2ZvdW5kID0gX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fZW52KS5maW5kKAorICAgICAgICAgICAgICAoKl9faXQpLT5fX2Vudl92YXIpOworICAgICAgICAgIGlmIChfX2ZvdW5kICE9IF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX2VudikuZW5kKCkpCisgICAgICAgICAgICBfX2Vudl9jb3N0X2ZhY3RvciA9ICgqX19mb3VuZCkuc2Vjb25kLmNfc3RyKCk7CisgICAgICAgIH0KKyAgICAgIGlmIChfX2Vudl9jb3N0X2ZhY3RvcikKKyAgICAgICAgKCpfX2l0KS0+X192YWx1ZSA9IGF0b2YoX19lbnZfY29zdF9mYWN0b3IpOworICAgIH0KK30KKworaW5saW5lIHZvaWQgX19wcm9mY3h4X2luaXRfdW5jb25kaXRpb25hbCgpCit7CisgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX2dsb2JhbF9sb2NrKS5sb2NrKCk7CisKKyAgaWYgKF9faXNfaW52YWxpZCgpKSB7CisKKyAgICBfX3NldF9tYXhfd2Fybl9jb3VudCgpOworCisgICAgaWYgKF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19tYXhfd2Fybl9jb3VudCkgPT0gMCkgeworCisgICAgICBfX3R1cm5fb2ZmKCk7CisKKyAgICB9IGVsc2UgeworCisgICAgICBfX3NldF9tYXhfc3RhY2tfdHJhY2VfZGVwdGgoKTsKKyAgICAgIF9fc2V0X21heF9tZW0oKTsKKyAgICAgIF9fc2V0X3RyYWNlX3BhdGgoKTsKKyAgICAgIF9fcmVhZF9jb3N0X2ZhY3RvcnMoKTsgCisgICAgICBfX3NldF9jb3N0X2ZhY3RvcnMoKTsKKyAgICAgIF9fd3JpdGVfY29zdF9mYWN0b3JzKCk7CisKKyAgICAgIF9fdHJhY2VfdmVjdG9yX3NpemVfaW5pdCgpOworICAgICAgX190cmFjZV9oYXNodGFibGVfc2l6ZV9pbml0KCk7CisgICAgICBfX3RyYWNlX2hhc2hfZnVuY19pbml0KCk7CisgICAgICBfX3RyYWNlX3ZlY3Rvcl90b19saXN0X2luaXQoKTsKKyAgICAgIF9fdHJhY2VfbGlzdF90b19zbGlzdF9pbml0KCk7IAorICAgICAgX190cmFjZV9saXN0X3RvX3ZlY3Rvcl9pbml0KCk7CisgICAgICBfX3RyYWNlX21hcF90b191bm9yZGVyZWRfbWFwX2luaXQoKTsKKworICAgICAgYXRleGl0KF9fcmVwb3J0KTsKKworICAgICAgX190dXJuX29uKCk7CisKKyAgICB9CisgIH0KKworICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19nbG9iYWxfbG9jaykudW5sb2NrKCk7Cit9CisKKy8qKiBAYnJpZWYgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBieSBlYWNoIGluc3RydW1lbnRhdGlvbiBwb2ludC4KKyAqCisgKiBUaGUgY29tbW9uIHBhdGggaXMgaW5saW5lZCBmdWxseS4KKyAqLworaW5saW5lIGJvb2wgX19wcm9mY3h4X2luaXQodm9pZCkKK3sKKyAgaWYgKF9faXNfaW52YWxpZCgpKSB7CisgICAgX19wcm9mY3h4X2luaXRfdW5jb25kaXRpb25hbCgpOworICB9CisKKyAgcmV0dXJuIF9faXNfb24oKTsKK30KKworfSAvLyBuYW1lc3BhY2UgX19nbnVfcHJvZmlsZQorCisjZW5kaWYgLyogX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9UUkFDRV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Byb2ZpbGUvaW1wbC9wcm9maWxlcl92ZWN0b3Jfc2l6ZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfdmVjdG9yX3NpemUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDYzMGU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfdmVjdG9yX3NpemUuaApAQCAtMCwwICsxLDEwNCBAQAorLy8gLSotIEMrKyAtKi0KKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy8vIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KKy8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAorLy8gTUEgMDIxMTEtMTMwNywgVVNBLgorCisvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUKKy8vIHNvZnR3YXJlIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMKKy8vIGluc3RhbnRpYXRlIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzCisvLyBmaWxlLCBvciB5b3UgY29tcGlsZSB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0bworLy8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZQorLy8gcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisvLyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlciBpbnZhbGlkYXRlIGFueSBvdGhlcgorLy8gcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbAorLy8gUHVibGljIExpY2Vuc2UuCisKKy8qKiBAZmlsZSBwcm9maWxlL2ltcGwvcHJvZmlsZXJfdmVjdG9yX3NpemUuaAorICogIEBicmllZiBDb2xsZWN0aW9uIG9mIHZlY3RvciBzaXplIHRyYWNlcy4KKyAqLworCisvLyBXcml0dGVuIGJ5IExpeGlhIExpdSBhbmQgU2lsdml1cyBSdXMuCisKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9WRUNUT1JfU0laRV9ICisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfUFJPRklMRVJfVkVDVE9SX1NJWkVfSCAxCisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPGNzdHJpbmc+CisjZWxzZQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKyNpbmNsdWRlICJwcm9maWxlL2ltcGwvcHJvZmlsZXIuaCIKKyNpbmNsdWRlICJwcm9maWxlL2ltcGwvcHJvZmlsZXJfbm9kZS5oIgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl90cmFjZS5oIgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl9zdGF0ZS5oIgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl9jb250YWluZXJfc2l6ZS5oIgorCituYW1lc3BhY2UgX19nbnVfcHJvZmlsZQoreworCisvKiogQGJyaWVmIEhhc2h0YWJsZSBzaXplIGluc3RydW1lbnRhdGlvbiB0cmFjZSBwcm9kdWNlci4gICovCitjbGFzcyBfX3RyYWNlX3ZlY3Rvcl9zaXplIDogcHVibGljIF9fdHJhY2VfY29udGFpbmVyX3NpemUKK3sKKyBwdWJsaWM6CisgIF9fdHJhY2VfdmVjdG9yX3NpemUoKSA6IF9fdHJhY2VfY29udGFpbmVyX3NpemUoKSB7IF9faWQgPSAidmVjdG9yLXNpemUiOyB9Cit9OworCitpbmxpbmUgdm9pZCBfX3RyYWNlX3ZlY3Rvcl9zaXplX2luaXQoKQoreworICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfdmVjdG9yX3NpemUpID0gbmV3IF9fdHJhY2VfdmVjdG9yX3NpemUoKTsKK30KKworaW5saW5lIHZvaWQgX190cmFjZV92ZWN0b3Jfc2l6ZV9yZXBvcnQoRklMRSogX19mLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd2FybmluZ192ZWN0b3JfdCYgX193YXJuaW5ncykKK3sKKyAgaWYgKF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU192ZWN0b3Jfc2l6ZSkpIHsKKyAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfdmVjdG9yX3NpemUpLT5fX2NvbGxlY3Rfd2FybmluZ3MoX193YXJuaW5ncyk7CisgICAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX3ZlY3Rvcl9zaXplKS0+X193cml0ZShfX2YpOworICB9Cit9CisKK2lubGluZSB2b2lkIF9fdHJhY2VfdmVjdG9yX3NpemVfY29uc3RydWN0KGNvbnN0IHZvaWQqIF9fb2JqLCBzaXplX3QgX19udW0pCit7CisgIGlmICghX19wcm9mY3h4X2luaXQoKSkgcmV0dXJuOworCisgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU192ZWN0b3Jfc2l6ZSktPl9faW5zZXJ0KF9fb2JqLCBfX2dldF9zdGFjaygpLCBfX251bSk7Cit9CisKK2lubGluZSB2b2lkIF9fdHJhY2VfdmVjdG9yX3NpemVfZGVzdHJ1Y3QoY29uc3Qgdm9pZCogX19vYmosIHNpemVfdCBfX251bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9faW51bSkKK3sKKyAgaWYgKCFfX3Byb2ZjeHhfaW5pdCgpKSByZXR1cm47CisKKyAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX3ZlY3Rvcl9zaXplKS0+X19kZXN0cnVjdChfX29iaiwgX19udW0sIF9faW51bSk7Cit9CisKK2lubGluZSB2b2lkIF9fdHJhY2VfdmVjdG9yX3NpemVfcmVzaXplKGNvbnN0IHZvaWQqIF9fb2JqLCBzaXplX3QgX19mcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fdG8pCit7CisgIGlmICghX19wcm9mY3h4X2luaXQoKSkgcmV0dXJuOworCisgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU192ZWN0b3Jfc2l6ZSktPl9fcmVzaXplKF9fb2JqLCBfX2Zyb20sIF9fdG8pOworfQorCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wcm9maWxlCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9QUk9GSUxFX1BST0ZJTEVSX1ZFQ1RPUl9TSVpFX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX3ZlY3Rvcl90b19saXN0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Byb2ZpbGUvaW1wbC9wcm9maWxlcl92ZWN0b3JfdG9fbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MTEzZGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Byb2ZpbGUvaW1wbC9wcm9maWxlcl92ZWN0b3JfdG9fbGlzdC5oCkBAIC0wLDAgKzEsMzM2IEBACisvLyAtKi0gQysrIC0qLQorLy8KKy8vIENvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLy8gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bworLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCisvLyBNQSAwMjExMS0xMzA3LCBVU0EuCisKKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZQorLy8gc29mdHdhcmUgbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcworLy8gaW5zdGFudGlhdGUgdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMKKy8vIGZpbGUsIG9yIHlvdSBjb21waWxlIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvCisvLyBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMgZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlCisvLyByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKy8vIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyIGludmFsaWRhdGUgYW55IG90aGVyCisvLyByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsCisvLyBQdWJsaWMgTGljZW5zZS4KKworLyoqIEBmaWxlIHByb2ZpbGUvaW1wbC9wcm9maWxlcl92ZWN0b3JfdG9fbGlzdC5oCisgKiAgQGJyaWVmIGRpYWdub3N0aWNzIGZvciB2ZWN0b3IgdG8gbGlzdC4KKyAqLworCisvLyBXcml0dGVuIGJ5IExpeGlhIExpdSBhbmQgU2lsdml1cyBSdXMuCisKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9WRUNUT1JfVE9fTElTVF9ICisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfUFJPRklMRVJfVkVDVE9SX1RPX0xJU1RfSCAxCisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGNzdHJpbmc+CisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKyNpbmNsdWRlICJwcm9maWxlL2ltcGwvcHJvZmlsZXIuaCIKKyNpbmNsdWRlICJwcm9maWxlL2ltcGwvcHJvZmlsZXJfbm9kZS5oIgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl90cmFjZS5oIgorCituYW1lc3BhY2UgX19nbnVfcHJvZmlsZQoreworCisvKiogQGJyaWVmIEEgdmVjdG9yLXRvLWxpc3QgaW5zdHJ1bWVudGF0aW9uIGxpbmUgaW4gdGhlIG9iamVjdCB0YWJsZS4gICovCitjbGFzcyBfX3ZlY3RvcjJsaXN0X2luZm86IHB1YmxpYyBfX29iamVjdF9pbmZvX2Jhc2UKK3sKKyBwdWJsaWM6CisgIF9fdmVjdG9yMmxpc3RfaW5mbygpCisgICAgICA6X01fc2hpZnRfY291bnQoMCksIF9NX2l0ZXJhdGUoMCksIF9NX3Jlc2l6ZSgwKSwgX01fbGlzdF9jb3N0KDApLAorICAgICAgIF9NX3ZlY3Rvcl9jb3N0KDApLCBfTV92YWxpZCh0cnVlKSB7fQorICBfX3ZlY3RvcjJsaXN0X2luZm8oX19zdGFja190IF9fc3RhY2spCisgICAgICA6IF9fb2JqZWN0X2luZm9fYmFzZShfX3N0YWNrKSwgX01fc2hpZnRfY291bnQoMCksIF9NX2l0ZXJhdGUoMCksCisgICAgICAgIF9NX3Jlc2l6ZSgwKSwgX01fbGlzdF9jb3N0KDApLCBfTV92ZWN0b3JfY29zdCgwKSwgX01fdmFsaWQodHJ1ZSkge30gCisgIHZpcnR1YWwgfl9fdmVjdG9yMmxpc3RfaW5mbygpIHt9CisgIF9fdmVjdG9yMmxpc3RfaW5mbyhjb25zdCBfX3ZlY3RvcjJsaXN0X2luZm8mIF9fbyk7CisgIHZvaWQgX19tZXJnZShjb25zdCBfX3ZlY3RvcjJsaXN0X2luZm8mIF9fbyk7CisgIHZvaWQgX193cml0ZShGSUxFKiBfX2YpIGNvbnN0OworICBmbG9hdCBfX21hZ25pdHVkZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3ZlY3Rvcl9jb3N0IC0gX01fbGlzdF9jb3N0OyB9CisgIGNvbnN0IGNoYXIqIF9fYWR2aWNlKCkgY29uc3QgCisgIHsgcmV0dXJuIHN0cmR1cCgiY2hhbmdlIHN0ZDo6dmVjdG9yIHRvIHN0ZDo6bGlzdCIpOyB9CisKKyAgc2l6ZV90IF9fc2hpZnRfY291bnQoKSB7IHJldHVybiBfTV9zaGlmdF9jb3VudDsgfQorICBzaXplX3QgX19pdGVyYXRlKCkgICB7IHJldHVybiBfTV9pdGVyYXRlOyB9CisgIGZsb2F0IF9fbGlzdF9jb3N0KCkgeyByZXR1cm4gX01fbGlzdF9jb3N0OyB9CisgIHNpemVfdCBfX3Jlc2l6ZSgpIHsgcmV0dXJuIF9NX3Jlc2l6ZTsgfQorICB2b2lkIF9fc2V0X2xpc3RfY29zdChmbG9hdCBfX2xjKSB7IF9NX2xpc3RfY29zdCA9IF9fbGM7IH0KKyAgdm9pZCBfX3NldF92ZWN0b3JfY29zdChmbG9hdCBfX3ZjKSB7IF9NX3ZlY3Rvcl9jb3N0ID0gX192YzsgfQorICBib29sIF9faXNfdmFsaWQoKSB7IHJldHVybiBfTV92YWxpZDsgfQorICB2b2lkIF9fc2V0X2ludmFsaWQoKSB7IF9NX3ZhbGlkID0gZmFsc2U7IH0KKworICB2b2lkIF9fb3ByX2luc2VydChzaXplX3QgX19wb3MsIHNpemVfdCBfX251bSk7CisgIHZvaWQgX19vcHJfaXRlcmF0ZShzaXplX3QgX19udW0pOworICB2b2lkIF9fcmVzaXplKHNpemVfdCBfX2Zyb20sIHNpemVfdCBfX3RvKTsKKyAgdm9pZCBfX29wcl9maW5kKHNpemVfdCBfX3NpemUpOworCitwcml2YXRlOgorICBzaXplX3QgX01fc2hpZnRfY291bnQ7CisgIHNpemVfdCBfTV9pdGVyYXRlOworICBzaXplX3QgX01fcmVzaXplOworICBmbG9hdCBfTV9saXN0X2Nvc3Q7CisgIGZsb2F0IF9NX3ZlY3Rvcl9jb3N0OworICBib29sICBfTV92YWxpZDsKK307CisKK2lubGluZSBfX3ZlY3RvcjJsaXN0X2luZm86Ol9fdmVjdG9yMmxpc3RfaW5mbyhjb25zdCBfX3ZlY3RvcjJsaXN0X2luZm8mIF9fbykKKyAgICA6IF9fb2JqZWN0X2luZm9fYmFzZShfX28pCit7CisgIF9NX3NoaWZ0X2NvdW50ICA9IF9fby5fTV9zaGlmdF9jb3VudDsKKyAgX01faXRlcmF0ZSAgICAgID0gX19vLl9NX2l0ZXJhdGU7CisgIF9NX3ZlY3Rvcl9jb3N0ICA9IF9fby5fTV92ZWN0b3JfY29zdDsKKyAgX01fbGlzdF9jb3N0ICAgID0gX19vLl9NX2xpc3RfY29zdDsKKyAgX01fdmFsaWQgICAgICAgID0gX19vLl9NX3ZhbGlkOworICBfTV9yZXNpemUgICAgICAgPSBfX28uX01fcmVzaXplOworfQorCitpbmxpbmUgdm9pZCBfX3ZlY3RvcjJsaXN0X2luZm86Ol9fbWVyZ2UoY29uc3QgX192ZWN0b3IybGlzdF9pbmZvJiBfX28pCit7CisgIF9NX3NoaWZ0X2NvdW50ICArPSBfX28uX01fc2hpZnRfY291bnQ7CisgIF9NX2l0ZXJhdGUgICAgICArPSBfX28uX01faXRlcmF0ZTsKKyAgX01fdmVjdG9yX2Nvc3QgICs9IF9fby5fTV92ZWN0b3JfY29zdDsKKyAgX01fbGlzdF9jb3N0ICAgICs9IF9fby5fTV9saXN0X2Nvc3Q7CisgIF9NX3ZhbGlkICAgICAgICAmPSBfX28uX01fdmFsaWQ7CisgIF9NX3Jlc2l6ZSAgICAgICArPSBfX28uX01fcmVzaXplOworfQorCitpbmxpbmUgdm9pZCBfX3ZlY3RvcjJsaXN0X2luZm86Ol9fb3ByX2luc2VydChzaXplX3QgX19wb3MsIHNpemVfdCBfX251bSkKK3sKKyAgX01fc2hpZnRfY291bnQgKz0gX19udW0gLSBfX3BvczsKK30KKworaW5saW5lIHZvaWQgX192ZWN0b3IybGlzdF9pbmZvOjpfX3Jlc2l6ZShzaXplX3QgX19mcm9tLCBzaXplX3QgX190bykKK3sKKyAgX01fcmVzaXplICs9IF9fZnJvbTsKK30KKworaW5saW5lIHZvaWQgX192ZWN0b3IybGlzdF9pbmZvOjpfX29wcl9pdGVyYXRlKHNpemVfdCBfX251bSkKK3sgCisgIF9NX2l0ZXJhdGUgKz0gX19udW07IAorfQorCitpbmxpbmUgdm9pZCBfX3ZlY3RvcjJsaXN0X2luZm86Ol9fb3ByX2ZpbmQoc2l6ZV90IF9fc2l6ZSkKK3sKKyAgLy8gVXNlIGF2ZXJhZ2UgY2FzZSBjb21wbGV4aXR5LgorICBfTV9pdGVyYXRlICs9IDMuMCAvIDQuMCAqIF9fc2l6ZTsKK30KKworLyoqIEBicmllZiBBIHZlY3Rvci10by1saXN0IGluc3RydW1lbnRhdGlvbiBsaW5lIGluIHRoZSBzdGFjayB0YWJsZS4gICovCitjbGFzcyBfX3ZlY3RvcjJsaXN0X3N0YWNrX2luZm86IHB1YmxpYyBfX3ZlY3RvcjJsaXN0X2luZm8geworIHB1YmxpYzoKKyAgX192ZWN0b3IybGlzdF9zdGFja19pbmZvKGNvbnN0IF9fdmVjdG9yMmxpc3RfaW5mbyYgX19vKSAKKyAgICAgIDogX192ZWN0b3IybGlzdF9pbmZvKF9fbykge30KK307CisKKy8qKiBAYnJpZWYgVmVjdG9yLXRvLWxpc3QgaW5zdHJ1bWVudGF0aW9uIHByb2R1Y2VyLiAgKi8KK2NsYXNzIF9fdHJhY2VfdmVjdG9yX3RvX2xpc3QKKyAgICA6IHB1YmxpYyBfX3RyYWNlX2Jhc2U8X192ZWN0b3IybGlzdF9pbmZvLCBfX3ZlY3RvcjJsaXN0X3N0YWNrX2luZm8+IAoreworIHB1YmxpYzoKKyAgX190cmFjZV92ZWN0b3JfdG9fbGlzdCgpOworICB+X190cmFjZV92ZWN0b3JfdG9fbGlzdCgpIHt9CisKKyAgLy8gSW5zZXJ0IGEgbmV3IG5vZGUgYXQgY29uc3RydWN0IHdpdGggb2JqZWN0LCBjYWxsc3RhY2sgYW5kIGluaXRpYWwgc2l6ZS4gCisgIHZvaWQgX19pbnNlcnQoX19vYmplY3RfdCBfX29iaiwgX19zdGFja190IF9fc3RhY2spOworICAvLyBDYWxsIGF0IGRlc3RydWN0aW9uL2NsZWFuIHRvIHNldCBjb250YWluZXIgZmluYWwgc2l6ZS4KKyAgdm9pZCBfX2Rlc3RydWN0KGNvbnN0IHZvaWQqIF9fb2JqKTsKKworICAvLyBGaW5kIHRoZSBub2RlIGluIHRoZSBsaXZlIG1hcC4KKyAgX192ZWN0b3IybGlzdF9pbmZvKiBfX2ZpbmQoY29uc3Qgdm9pZCogX19vYmopOworCisgIC8vIENvbGxlY3QgY29zdCBvZiBvcGVyYXRpb25zLgorICB2b2lkIF9fb3ByX2luc2VydChjb25zdCB2b2lkKiBfX29iaiwgc2l6ZV90IF9fcG9zLCBzaXplX3QgX19udW0pOworICB2b2lkIF9fb3ByX2l0ZXJhdGUoY29uc3Qgdm9pZCogX19vYmosIHNpemVfdCBfX251bSk7CisgIHZvaWQgX19pbnZhbGlkX29wZXJhdG9yKGNvbnN0IHZvaWQqIF9fb2JqKTsKKyAgdm9pZCBfX3Jlc2l6ZShjb25zdCB2b2lkKiBfX29iaiwgc2l6ZV90IF9fZnJvbSwgc2l6ZV90IF9fdG8pOworICBmbG9hdCBfX3ZlY3Rvcl9jb3N0KHNpemVfdCBfX3NoaWZ0LCBzaXplX3QgX19pdGVyYXRlLCBzaXplX3QgX19yZXNpemUpOworICBmbG9hdCBfX2xpc3RfY29zdChzaXplX3QgX19zaGlmdCwgc2l6ZV90IF9faXRlcmF0ZSwgc2l6ZV90IF9fcmVzaXplKTsKKyAgdm9pZCBfX29wcl9maW5kKGNvbnN0IHZvaWQqIF9fb2JqLCBzaXplX3QgX19zaXplKTsKK307CisKK2lubGluZSBfX3RyYWNlX3ZlY3Rvcl90b19saXN0OjpfX3RyYWNlX3ZlY3Rvcl90b19saXN0KCkKKyAgICA6IF9fdHJhY2VfYmFzZTxfX3ZlY3RvcjJsaXN0X2luZm8sIF9fdmVjdG9yMmxpc3Rfc3RhY2tfaW5mbz4oKQoreworICBfX2lkID0gInZlY3Rvci10by1saXN0IjsKK30KKworaW5saW5lIHZvaWQgX190cmFjZV92ZWN0b3JfdG9fbGlzdDo6X19pbnNlcnQoX19vYmplY3RfdCBfX29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RhY2tfdCBfX3N0YWNrKQoreworICBfX2FkZF9vYmplY3QoX19vYmosIF9fdmVjdG9yMmxpc3RfaW5mbyhfX3N0YWNrKSk7Cit9CisKK2lubGluZSB2b2lkIF9fdmVjdG9yMmxpc3RfaW5mbzo6X193cml0ZShGSUxFKiBfX2YpIGNvbnN0Cit7CisgIGZwcmludGYoX19mLCAiJVp1ICVadSAlWnUgJS4wZiAlLjBmXG4iLAorICAgICAgICAgIF9NX3NoaWZ0X2NvdW50LCBfTV9yZXNpemUsIF9NX2l0ZXJhdGUsIF9NX3ZlY3Rvcl9jb3N0LCBfTV9saXN0X2Nvc3QpOworfQorCitpbmxpbmUgZmxvYXQgX190cmFjZV92ZWN0b3JfdG9fbGlzdDo6X192ZWN0b3JfY29zdChzaXplX3QgX19zaGlmdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19pdGVyYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fcmVzaXplKQoreworICByZXR1cm4gKAorICAgICAgX19zaGlmdCAqIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX3ZlY3Rvcl9zaGlmdF9jb3N0X2ZhY3RvcikuX192YWx1ZQorICAgICAgKyBfX2l0ZXJhdGUgKiBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX192ZWN0b3JfaXRlcmF0ZV9jb3N0X2ZhY3RvcikuX192YWx1ZQorICAgICAgKyBfX3Jlc2l6ZSAqIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX3ZlY3Rvcl9yZXNpemVfY29zdF9mYWN0b3IpLl9fdmFsdWUKKyAgICAgICk7Cit9CisKK2lubGluZSBmbG9hdCBfX3RyYWNlX3ZlY3Rvcl90b19saXN0OjpfX2xpc3RfY29zdChzaXplX3QgX19zaGlmdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9faXRlcmF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19yZXNpemUpCit7CisgIHJldHVybiAoCisgICAgICBfX3NoaWZ0ICogX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fbGlzdF9zaGlmdF9jb3N0X2ZhY3RvcikuX192YWx1ZQorICAgICAgKyBfX2l0ZXJhdGUgKiBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19saXN0X2l0ZXJhdGVfY29zdF9mYWN0b3IpLl9fdmFsdWUKKyAgICAgICsgX19yZXNpemUgKiBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19saXN0X3Jlc2l6ZV9jb3N0X2ZhY3RvcikuX192YWx1ZSk7Cit9CisKK2lubGluZSB2b2lkIF9fdHJhY2VfdmVjdG9yX3RvX2xpc3Q6Ol9fZGVzdHJ1Y3QoY29uc3Qgdm9pZCogX19vYmopCit7CisgIGlmICghX19pc19vbigpKQorICAgIHJldHVybjsKKworIF9fdmVjdG9yMmxpc3RfaW5mbyogX19yZXMgPSBfX2dldF9vYmplY3RfaW5mbyhfX29iaik7CisgIGlmICghX19yZXMpCisgICAgcmV0dXJuOworCisgIGZsb2F0IF9fdmMgPSBfX3ZlY3Rvcl9jb3N0KF9fcmVzLT5fX3NoaWZ0X2NvdW50KCksIF9fcmVzLT5fX2l0ZXJhdGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXMtPl9fcmVzaXplKCkpOworICBmbG9hdCBfX2xjID0gX19saXN0X2Nvc3QoX19yZXMtPl9fc2hpZnRfY291bnQoKSwgX19yZXMtPl9faXRlcmF0ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXMtPl9fcmVzaXplKCkpOworICBfX3Jlcy0+X19zZXRfdmVjdG9yX2Nvc3QoX192Yyk7CisgIF9fcmVzLT5fX3NldF9saXN0X2Nvc3QoX19sYyk7CisKKyAgX19yZXRpcmVfb2JqZWN0KF9fb2JqKTsKK30KKworaW5saW5lIHZvaWQgX190cmFjZV92ZWN0b3JfdG9fbGlzdDo6X19vcHJfaW5zZXJ0KGNvbnN0IHZvaWQqIF9fb2JqLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19wb3MsIHNpemVfdCBfX251bSkKK3sKKyAgX192ZWN0b3IybGlzdF9pbmZvKiBfX3JlcyA9IF9fZ2V0X29iamVjdF9pbmZvKF9fb2JqKTsKKyAgaWYgKF9fcmVzKQorICAgIF9fcmVzLT5fX29wcl9pbnNlcnQoX19wb3MsIF9fbnVtKTsKK30KKworaW5saW5lIHZvaWQgX190cmFjZV92ZWN0b3JfdG9fbGlzdDo6X19vcHJfaXRlcmF0ZShjb25zdCB2b2lkKiBfX29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbnVtKQoreworICBfX3ZlY3RvcjJsaXN0X2luZm8qIF9fcmVzID0gX19nZXRfb2JqZWN0X2luZm8oX19vYmopOworICBpZiAoX19yZXMpCisgICAgX19yZXMtPl9fb3ByX2l0ZXJhdGUoX19udW0pOworfQorCitpbmxpbmUgdm9pZCBfX3RyYWNlX3ZlY3Rvcl90b19saXN0OjpfX2ludmFsaWRfb3BlcmF0b3IoY29uc3Qgdm9pZCogX19vYmopCit7CisgIF9fdmVjdG9yMmxpc3RfaW5mbyogX19yZXMgPSBfX2dldF9vYmplY3RfaW5mbyhfX29iaik7CisgIGlmIChfX3JlcykKKyAgICBfX3Jlcy0+X19zZXRfaW52YWxpZCgpOworfQorCitpbmxpbmUgdm9pZCBfX3RyYWNlX3ZlY3Rvcl90b19saXN0OjpfX3Jlc2l6ZShjb25zdCB2b2lkKiBfX29iaiwgc2l6ZV90IF9fZnJvbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX190bykKK3sKKyAgX192ZWN0b3IybGlzdF9pbmZvKiBfX3JlcyA9IF9fZ2V0X29iamVjdF9pbmZvKF9fb2JqKTsKKyAgaWYgKF9fcmVzKQorICAgIF9fcmVzLT5fX3Jlc2l6ZShfX2Zyb20sIF9fdG8pOworfQorCitpbmxpbmUgdm9pZCBfX3RyYWNlX3ZlY3Rvcl90b19saXN0OjpfX29wcl9maW5kKGNvbnN0IHZvaWQqIF9fb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zaXplKQoreworICBfX3ZlY3RvcjJsaXN0X2luZm8qIF9fcmVzID0gX19nZXRfb2JqZWN0X2luZm8oX19vYmopOworICBpZiAoX19yZXMpCisgICAgX19yZXMtPl9fb3ByX2ZpbmQoX19zaXplKTsKK30KKworaW5saW5lIHZvaWQgX190cmFjZV92ZWN0b3JfdG9fbGlzdF9pbml0KCkKK3sKKyAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX3ZlY3Rvcl90b19saXN0KSA9IG5ldyBfX3RyYWNlX3ZlY3Rvcl90b19saXN0KCk7Cit9CisKK2lubGluZSB2b2lkIF9fdHJhY2VfdmVjdG9yX3RvX2xpc3RfcmVwb3J0KEZJTEUqIF9fZiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3dhcm5pbmdfdmVjdG9yX3QmIF9fd2FybmluZ3MpCit7CisgIGlmIChfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfdmVjdG9yX3RvX2xpc3QpKSB7CisgICAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX3ZlY3Rvcl90b19saXN0KS0+X19jb2xsZWN0X3dhcm5pbmdzKF9fd2FybmluZ3MpOworICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU192ZWN0b3JfdG9fbGlzdCktPl9fd3JpdGUoX19mKTsKKyAgfQorfQorCitpbmxpbmUgdm9pZCBfX3RyYWNlX3ZlY3Rvcl90b19saXN0X2NvbnN0cnVjdChjb25zdCB2b2lkKiBfX29iaikKK3sKKyAgaWYgKCFfX3Byb2ZjeHhfaW5pdCgpKSByZXR1cm47CisKKyAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX3ZlY3Rvcl90b19saXN0KS0+X19pbnNlcnQoX19vYmosIF9fZ2V0X3N0YWNrKCkpOworfQorCitpbmxpbmUgdm9pZCBfX3RyYWNlX3ZlY3Rvcl90b19saXN0X2Rlc3RydWN0KGNvbnN0IHZvaWQqIF9fb2JqKQoreworICBpZiAoIV9fcHJvZmN4eF9pbml0KCkpIHJldHVybjsKKworICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfdmVjdG9yX3RvX2xpc3QpLT5fX2Rlc3RydWN0KF9fb2JqKTsKK30KKworaW5saW5lIHZvaWQgX190cmFjZV92ZWN0b3JfdG9fbGlzdF9pbnNlcnQoY29uc3Qgdm9pZCogX19vYmosIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fcG9zLCBzaXplX3QgX19udW0pCit7CisgIGlmICghX19wcm9mY3h4X2luaXQoKSkgcmV0dXJuOworCisgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU192ZWN0b3JfdG9fbGlzdCktPl9fb3ByX2luc2VydChfX29iaiwgX19wb3MsIF9fbnVtKTsKK30KKworCitpbmxpbmUgdm9pZCBfX3RyYWNlX3ZlY3Rvcl90b19saXN0X2l0ZXJhdGUoY29uc3Qgdm9pZCogX19vYmosIHNpemVfdCBfX251bSA9IDEpCit7CisgIGlmICghX19wcm9mY3h4X2luaXQoKSkgcmV0dXJuOworCisgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU192ZWN0b3JfdG9fbGlzdCktPl9fb3ByX2l0ZXJhdGUoX19vYmosIF9fbnVtKTsKK30KKworaW5saW5lIHZvaWQgX190cmFjZV92ZWN0b3JfdG9fbGlzdF9pbnZhbGlkX29wZXJhdG9yKGNvbnN0IHZvaWQqIF9fb2JqKQoreworICBpZiAoIV9fcHJvZmN4eF9pbml0KCkpIHJldHVybjsKKworICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfdmVjdG9yX3RvX2xpc3QpLT5fX2ludmFsaWRfb3BlcmF0b3IoX19vYmopOworfQorCitpbmxpbmUgdm9pZCBfX3RyYWNlX3ZlY3Rvcl90b19saXN0X3Jlc2l6ZShjb25zdCB2b2lkKiBfX29iaiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19mcm9tLCBzaXplX3QgX190bykKK3sKKyAgaWYgKCFfX3Byb2ZjeHhfaW5pdCgpKSByZXR1cm47CisKKyAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX3ZlY3Rvcl90b19saXN0KS0+X19yZXNpemUoX19vYmosIF9fZnJvbSwgX190byk7Cit9CisKK2lubGluZSB2b2lkIF9fdHJhY2VfdmVjdG9yX3RvX2xpc3RfZmluZChjb25zdCB2b2lkKiBfX29iaiwgc2l6ZV90IF9fc2l6ZSkKK3sKKyAgaWYgKCFfX3Byb2ZjeHhfaW5pdCgpKSByZXR1cm47CisKKyAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX3ZlY3Rvcl90b19saXN0KS0+X19vcHJfZmluZChfX29iaiwgX19zaXplKTsKK30KKworfSAvLyBuYW1lc3BhY2UgX19nbnVfcHJvZmlsZQorI2VuZGlmIC8qIF9HTElCQ1hYX1BST0ZJTEVfUFJPRklMRVJfVkVDVE9SX1RPX0xJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL2l0ZXJhdG9yX3RyYWNrZXIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcHJvZmlsZS9pdGVyYXRvcl90cmFja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZlYmI5YgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcHJvZmlsZS9pdGVyYXRvcl90cmFja2VyLmgKQEAgLTAsMCArMSwzMDEgQEAKKy8vIFByb2ZpbGluZyBpdGVyYXRvciBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHByb2ZpbGUvaXRlcmF0b3JfdHJhY2tlci5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIHByb2ZpbGUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfSVRFUkFUT1JfVFJBQ0tFUgorI2RlZmluZSBfR0xJQkNYWF9QUk9GSUxFX0lURVJBVE9SX1RSQUNLRVIgMQorCisjaW5jbHVkZSA8ZXh0L3R5cGVfdHJhaXRzLmg+CisKK25hbWVzcGFjZSBzdGQKK3sKK25hbWVzcGFjZSBfX3Byb2ZpbGUKK3sKKwordGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CitjbGFzcyBfX2l0ZXJhdG9yX3RyYWNrZXIgCit7CisgIHR5cGVkZWYgX19pdGVyYXRvcl90cmFja2VyIF9TZWxmOworICAvLyBUaGUgdW5kZXJseWluZyBpdGVyYXRvcgorICBfSXRlcmF0b3IgX01fY3VycmVudDsKKyAgLy8gVGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmUKKyAgY29uc3QgX1NlcXVlbmNlKiBfTV9kczsKKyAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+IF9UcmFpdHM7CisKKyBwdWJsaWM6CisgIHR5cGVkZWYgX0l0ZXJhdG9yCQkgICAgICAgICAgICAgIF9CYXNlX2l0ZXJhdG9yOworICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OyAKKyAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjp2YWx1ZV90eXBlICAgICAgICB2YWx1ZV90eXBlOworICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmRpZmZlcmVuY2VfdHlwZSAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpyZWZlcmVuY2UgICAgICAgICByZWZlcmVuY2U7CisgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9pbnRlciAgICAgICAgICAgcG9pbnRlcjsKKworICBfX2l0ZXJhdG9yX3RyYWNrZXIoKSA6IF9NX2N1cnJlbnQoKSwgX01fZHMoMCkgeyB9CisgIF9faXRlcmF0b3JfdHJhY2tlcihjb25zdCBfSXRlcmF0b3ImIF9faSwgY29uc3QgX1NlcXVlbmNlKiBzZXEpIAorICAgICAgOiBfTV9jdXJyZW50KF9faSksIF9NX2RzKHNlcSkgeyB9CisgIF9faXRlcmF0b3JfdHJhY2tlcihjb25zdCBfX2l0ZXJhdG9yX3RyYWNrZXImIF9feCkgCisgICAgICA6IF9NX2N1cnJlbnQoX194Ll9NX2N1cnJlbnQpLCBfTV9kcyhfX3guX01fZHMpIHsgfQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTXV0YWJsZUl0ZXJhdG9yPgorICBfX2l0ZXJhdG9yX3RyYWNrZXIoY29uc3QgX19pdGVyYXRvcl90cmFja2VyPF9NdXRhYmxlSXRlcmF0b3IsIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8KHN0ZDo6X19hcmVfc2FtZTxfTXV0YWJsZUl0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U6Oml0ZXJhdG9yOjpfQmFzZV9pdGVyYXRvcj46Ol9fdmFsdWUpLCBfU2VxdWVuY2U+OjpfX3R5cGU+JiBfX3gpCisgICAgICA6ICBfTV9jdXJyZW50KF9feC5iYXNlKCkpLCBfTV9kcyhfX3guX01fZ2V0X3NlcXVlbmNlKCkpIHsgfQorCisgIF9JdGVyYXRvcgorICBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQorICAvKioKKyAgICogQGJyaWVmIENvbnZlcnNpb24gdG8gdW5kZXJseWluZyBub24tZGVidWcgaXRlcmF0b3IgdG8gYWxsb3cKKyAgICogYmV0dGVyIGludGVyYWN0aW9uIHdpdGggbm9uLXByb2ZpbGUgY29udGFpbmVycy4KKyAgICovCisgIG9wZXJhdG9yIF9JdGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KKworICBwb2ludGVyCisgIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKl9NX2N1cnJlbnQ7IH0KKworICBfX2l0ZXJhdG9yX3RyYWNrZXImCisgIG9wZXJhdG9yKysoKQorICB7CisgICAgX01fZHMtPl9NX3Byb2ZpbGVfaXRlcmF0ZSgpOworICAgICsrX01fY3VycmVudDsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBfX2l0ZXJhdG9yX3RyYWNrZXImCisgIG9wZXJhdG9yKysoaW50KQorICB7CisgICAgX01fZHMtPl9NX3Byb2ZpbGVfaXRlcmF0ZSgpOworICAgIF9faXRlcmF0b3JfdHJhY2tlciBfX3RtcCgqdGhpcyk7CisgICAgKytfTV9jdXJyZW50OworICAgIHJldHVybiBfX3RtcDsKKyAgfQorCisgIF9faXRlcmF0b3JfdHJhY2tlciYKKyAgb3BlcmF0b3ItLSgpCisgIHsKKyAgICBfTV9kcy0+X01fcHJvZmlsZV9pdGVyYXRlKDEpOworICAgIC0tX01fY3VycmVudDsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBfX2l0ZXJhdG9yX3RyYWNrZXImCisgIG9wZXJhdG9yLS0oaW50KQorICB7CisgICAgX01fZHMtPl9NX3Byb2ZpbGVfaXRlcmF0ZSgxKTsKKyAgICBfX2l0ZXJhdG9yX3RyYWNrZXIgX190bXAoKnRoaXMpOworICAgIC0tX01fY3VycmVudDsKKyAgICByZXR1cm4gX190bXA7CisgIH0KKworICBfX2l0ZXJhdG9yX3RyYWNrZXImCisgIG9wZXJhdG9yPShjb25zdCBfX2l0ZXJhdG9yX3RyYWNrZXImIF9feCkKKyAgeworICAgIF9NX2N1cnJlbnQgPSBfX3guX01fY3VycmVudDsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICByZWZlcmVuY2UKKyAgb3BlcmF0b3IqKCkgY29uc3QKKyAgeworICAgIHJldHVybiAqX01fY3VycmVudDsKKyAgfQorCisgLy8gLS0tLS0tIFJhbmRvbSBhY2Nlc3MgaXRlcmF0b3IgcmVxdWlyZW1lbnRzIC0tLS0tLQorICByZWZlcmVuY2UKKyAgb3BlcmF0b3JbXShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QgCisgIHsKKyAgICByZXR1cm4gX01fY3VycmVudFtfX25dOworICB9CisKKyAgX19pdGVyYXRvcl90cmFja2VyJgorICBvcGVyYXRvcis9KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQorICB7CisgICAgX01fY3VycmVudCArPSBfX247CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgX19pdGVyYXRvcl90cmFja2VyCisgIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKKyAgeworICAgIF9faXRlcmF0b3JfdHJhY2tlciBfX3RtcCgqdGhpcyk7CisgICAgX190bXAgKz0gX19uOworICAgIHJldHVybiBfX3RtcDsKKyAgfQorCisgIF9faXRlcmF0b3JfdHJhY2tlciYKKyAgb3BlcmF0b3ItPShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikKKyAgeworICAgIF9NX2N1cnJlbnQgKz0gLV9fbjsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBfX2l0ZXJhdG9yX3RyYWNrZXIKKyAgb3BlcmF0b3ItKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAorICB7CisgICAgX19pdGVyYXRvcl90cmFja2VyIF9fdG1wKCp0aGlzKTsKKyAgICBfX3RtcCAtPSBfX247CisgICAgcmV0dXJuIF9fdG1wOworICB9CisKKyAgdm9pZAorICBfTV9maW5kKCkKKyAgeworICAgIF9NX2RzLT5fTV9wcm9maWxlX2ZpbmQoKTsKKyAgfQorCisgIGNvbnN0IF9TZXF1ZW5jZSoKKyAgX01fZ2V0X3NlcXVlbmNlKCkgY29uc3QKKyAgeworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBfU2VxdWVuY2UqPihfTV9kcyk7CisgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9TZXF1ZW5jZT4KK2lubGluZSBib29sCitvcGVyYXRvcj09KGNvbnN0IF9faXRlcmF0b3JfdHJhY2tlcjxfSXRlcmF0b3JMLCBfU2VxdWVuY2U+JiBfX2xocywKKyAgICAgICAgICAgY29uc3QgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvclIsIF9TZXF1ZW5jZT4mIF9fcmhzKQoreworICByZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CitpbmxpbmUgYm9vbAorb3BlcmF0b3I9PShjb25zdCBfX2l0ZXJhdG9yX3RyYWNrZXI8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX2xocywKKyAgICAgICAgICAgY29uc3QgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19yaHMpCit7CisgIHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfU2VxdWVuY2U+CitpbmxpbmUgYm9vbAorb3BlcmF0b3IhPShjb25zdCBfX2l0ZXJhdG9yX3RyYWNrZXI8X0l0ZXJhdG9yTCwgX1NlcXVlbmNlPiYgX19saHMsCisgICAgICAgICAgIGNvbnN0IF9faXRlcmF0b3JfdHJhY2tlcjxfSXRlcmF0b3JSLCBfU2VxdWVuY2U+JiBfX3JocykKK3sKKyAgcmV0dXJuIF9fbGhzLmJhc2UoKSAhPSBfX3Jocy5iYXNlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX1NlcXVlbmNlPgoraW5saW5lIGJvb2wKK29wZXJhdG9yIT0oY29uc3QgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19saHMsCisgICAgICAgICAgICAgICBjb25zdCBfX2l0ZXJhdG9yX3RyYWNrZXI8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX3JocykKK3sKKyAgcmV0dXJuIF9fbGhzLmJhc2UoKSAhPSBfX3Jocy5iYXNlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9TZXF1ZW5jZT4KK2lubGluZSBib29sCitvcGVyYXRvcjwoY29uc3QgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvckwsIF9TZXF1ZW5jZT4mIF9fbGhzLAorICAgICAgICAgIGNvbnN0IF9faXRlcmF0b3JfdHJhY2tlcjxfSXRlcmF0b3JSLCBfU2VxdWVuY2U+JiBfX3JocykKK3sKKyAgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhzLmJhc2UoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CitpbmxpbmUgYm9vbAorb3BlcmF0b3I8KGNvbnN0IF9faXRlcmF0b3JfdHJhY2tlcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9fbGhzLAorICAgICAgICAgIGNvbnN0IF9faXRlcmF0b3JfdHJhY2tlcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9fcmhzKQoreworICByZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFzZSgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfU2VxdWVuY2U+CitpbmxpbmUgYm9vbAorb3BlcmF0b3I8PShjb25zdCBfX2l0ZXJhdG9yX3RyYWNrZXI8X0l0ZXJhdG9yTCwgX1NlcXVlbmNlPiYgX19saHMsCisgICAgICAgICAgIGNvbnN0IF9faXRlcmF0b3JfdHJhY2tlcjxfSXRlcmF0b3JSLCBfU2VxdWVuY2U+JiBfX3JocykKK3sKKyAgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX1NlcXVlbmNlPgoraW5saW5lIGJvb2wKK29wZXJhdG9yPD0oY29uc3QgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19saHMsCisgICAgICAgICAgIGNvbnN0IF9faXRlcmF0b3JfdHJhY2tlcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9fcmhzKQoreworICByZXR1cm4gX19saHMuYmFzZSgpIDw9IF9fcmhzLmJhc2UoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX1NlcXVlbmNlPgoraW5saW5lIGJvb2wKK29wZXJhdG9yPihjb25zdCBfX2l0ZXJhdG9yX3RyYWNrZXI8X0l0ZXJhdG9yTCwgX1NlcXVlbmNlPiYgX19saHMsCisgICAgICAgICAgY29uc3QgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvclIsIF9TZXF1ZW5jZT4mIF9fcmhzKQoreworICByZXR1cm4gX19saHMuYmFzZSgpID4gX19yaHMuYmFzZSgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9TZXF1ZW5jZT4KK2lubGluZSBib29sCitvcGVyYXRvcj4oY29uc3QgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19saHMsCisgICAgICAgICAgY29uc3QgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19yaHMpCit7CisgIHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9TZXF1ZW5jZT4KK2lubGluZSBib29sCitvcGVyYXRvcj49KGNvbnN0IF9faXRlcmF0b3JfdHJhY2tlcjxfSXRlcmF0b3JMLCBfU2VxdWVuY2U+JiBfX2xocywKKyAgICAgICAgICAgY29uc3QgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvclIsIF9TZXF1ZW5jZT4mIF9fcmhzKQoreworICByZXR1cm4gX19saHMuYmFzZSgpID49IF9fcmhzLmJhc2UoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CitpbmxpbmUgYm9vbAorb3BlcmF0b3I+PShjb25zdCBfX2l0ZXJhdG9yX3RyYWNrZXI8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX2xocywKKyAgICAgICAgICAgY29uc3QgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19yaHMpCit7CisgIHJldHVybiBfX2xocy5iYXNlKCkgPj0gX19yaHMuYmFzZSgpOworfQorCisvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisvLyBBY2NvcmRpbmcgdG8gdGhlIHJlc29sdXRpb24gb2YgRFIxNzkgbm90IG9ubHkgdGhlIHZhcmlvdXMgY29tcGFyaXNvbgorLy8gb3BlcmF0b3JzIGJ1dCBhbHNvIG9wZXJhdG9yLSBtdXN0IGFjY2VwdCBtaXhlZCBpdGVyYXRvci9jb25zdF9pdGVyYXRvcgorLy8gcGFyYW1ldGVycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICBpbmxpbmUgdHlwZW5hbWUgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvckwsIF9TZXF1ZW5jZT46OmRpZmZlcmVuY2VfdHlwZQorICBvcGVyYXRvci0oY29uc3QgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvckwsIF9TZXF1ZW5jZT4mIF9fbGhzLAorICAgICAgICAgICAgY29uc3QgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvclIsIF9TZXF1ZW5jZT4mIF9fcmhzKQoreworICByZXR1cm4gX19saHMuYmFzZSgpIC0gX19yaHMuYmFzZSgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9TZXF1ZW5jZT4KK2lubGluZSB0eXBlbmFtZSBfX2l0ZXJhdG9yX3RyYWNrZXI8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+OjpkaWZmZXJlbmNlX3R5cGUKK29wZXJhdG9yLShjb25zdCBfX2l0ZXJhdG9yX3RyYWNrZXI8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX2xocywKKyAgICAgICAgICBjb25zdCBfX2l0ZXJhdG9yX3RyYWNrZXI8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX3JocykKK3sKKyAgcmV0dXJuIF9fbGhzLmJhc2UoKSAtIF9fcmhzLmJhc2UoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CitpbmxpbmUgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvciwgX1NlcXVlbmNlPgorb3BlcmF0b3IrKHR5cGVuYW1lIF9faXRlcmF0b3JfdHJhY2tlcjxfSXRlcmF0b3IsX1NlcXVlbmNlPjo6ZGlmZmVyZW5jZV90eXBlCisgICAgICAgICAgX19uLAorICAgICAgICAgIGNvbnN0IF9faXRlcmF0b3JfdHJhY2tlcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9faSkKK3sKKyAgcmV0dXJuIF9faSArIF9fbjsKK30KKwkJCit9ICAvLyBuYW1lc3BhY2UgX19wcm9maWxlCit9ICAvLyBuYW1lc3BhY2Ugc3RkCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcHJvZmlsZS9saXN0IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL2xpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFlZGQyOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcHJvZmlsZS9saXN0CkBAIC0wLDAgKzEsNjEwIEBACisvLyBQcm9maWxpbmcgbGlzdCBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHByb2ZpbGUvbGlzdAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBwcm9maWxlIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9QUk9GSUxFX0xJU1QKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9MSVNUIDEKKworI2luY2x1ZGUgPGxpc3Q+CisjaW5jbHVkZSA8cHJvZmlsZS9iYXNlLmg+IAorI2luY2x1ZGUgPHByb2ZpbGUvaXRlcmF0b3JfdHJhY2tlci5oPiAKKworbmFtZXNwYWNlIHN0ZAoreworbmFtZXNwYWNlIF9fcHJvZmlsZQoreworICAvKiogQGJyaWVmIExpc3Qgd3JhcHBlciB3aXRoIHBlcmZvcm1hbmNlIGluc3RydW1lbnRhdGlvbi4gICovCit0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvY2F0b3IgPSBzdGQ6OmFsbG9jYXRvcjxfVHA+ID4KKyAgICBjbGFzcyBsaXN0CisgICAgOiBwdWJsaWMgX0dMSUJDWFhfU1REX0Q6Omxpc3Q8X1RwLCBfQWxsb2NhdG9yPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0dMSUJDWFhfU1REX0Q6Omxpc3Q8X1RwLCBfQWxsb2NhdG9yPiBfQmFzZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnJlZmVyZW5jZSAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9yZWZlcmVuY2UgICAgICAgY29uc3RfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIF9faXRlcmF0b3JfdHJhY2tlcjx0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IsIGxpc3Q+ICAgICAgICAKKwkJCQkgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfX2l0ZXJhdG9yX3RyYWNrZXI8dHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yLCBsaXN0PiAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSAgICAgICAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpkaWZmZXJlbmNlX3R5cGUgICAgICAgZGlmZmVyZW5jZV90eXBlOworCisgICAgICB0eXBlZGVmIF9UcAkJCQkgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0FsbG9jYXRvcgkJCSAgICBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnBvaW50ZXIgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfcG9pbnRlciAgICAgICAgIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworCisgICAgICAvLyAyMy4yLjIuMSBjb25zdHJ1Y3QvY29weS9kZXN0cm95OgorICAgICAgZXhwbGljaXQgbGlzdChjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICA6IF9CYXNlKF9fYSkgCisgICAgICB7IAorICAgICAgICBfX3Byb2ZjeHhfbGlzdF9jb25zdHJ1Y3QodGhpcyk7IAkvLyBsaXN0MnNsaXN0CisgICAgICAgIF9fcHJvZmN4eF9saXN0X2NvbnN0cnVjdDIodGhpcyk7IAkvLyBsaXN0MnZlY3RvcgorICAgICAgfQorCisgICAgICBleHBsaWNpdCBsaXN0KHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSA9IF9UcCgpLAorCQkgICAgY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorICAgICAgOiBfQmFzZShfX24sIF9fdmFsdWUsIF9fYSkgCisgICAgICB7IAorICAgICAgICBfX3Byb2ZjeHhfbGlzdF9jb25zdHJ1Y3QodGhpcyk7IAorICAgICAgICBfX3Byb2ZjeHhfbGlzdF9jb25zdHJ1Y3QyKHRoaXMpOyAKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICBsaXN0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkgICBjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICA6IF9CYXNlKF9fZmlyc3QsIF9fbGFzdCwgX19hKQorICAgICAgewkgCisgICAgICAgIF9fcHJvZmN4eF9saXN0X2NvbnN0cnVjdCh0aGlzKTsgCisgICAgICAgIF9fcHJvZmN4eF9saXN0X2NvbnN0cnVjdDIodGhpcyk7IAorICAgICAgfQorCisgICAgICBsaXN0KGNvbnN0IGxpc3QmIF9feCkKKyAgICAgIDogX0Jhc2UoX194KSAKKyAgICAgIHsgCisgICAgICAgIF9fcHJvZmN4eF9saXN0X2NvbnN0cnVjdCh0aGlzKTsgCisgICAgICAgIF9fcHJvZmN4eF9saXN0X2NvbnN0cnVjdDIodGhpcyk7IAorICAgICAgfQorCisgICAgICBsaXN0KGNvbnN0IF9CYXNlJiBfX3gpCisgICAgICA6IF9CYXNlKF9feCkgCisgICAgICB7IAkKKyAgICAgICAgX19wcm9mY3h4X2xpc3RfY29uc3RydWN0KHRoaXMpOyAKKyAgICAgICAgX19wcm9mY3h4X2xpc3RfY29uc3RydWN0Mih0aGlzKTsgCisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgbGlzdChsaXN0JiYgX194KQorICAgICAgOiBfQmFzZShzdGQ6OmZvcndhcmQ8bGlzdD4oX194KSkKKyAgICAgIHsgCisgICAgICAgIF9fcHJvZmN4eF9saXN0X2NvbnN0cnVjdCh0aGlzKTsgCisgICAgICAgIF9fcHJvZmN4eF9saXN0X2NvbnN0cnVjdDIodGhpcyk7IAorICAgICAgfQorCisgICAgICBsaXN0KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sLAorICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgICAgOiBfQmFzZShfX2wsIF9fYSkgeyB9CisjZW5kaWYKKworICAgICAgfmxpc3QoKSB7IAorICAgICAgICBfX3Byb2ZjeHhfbGlzdF9kZXN0cnVjdCh0aGlzKTsgCisgICAgICAgIF9fcHJvZmN4eF9saXN0X2Rlc3RydWN0Mih0aGlzKTsgCisgICAgICB9CisKKyAgICAgIGxpc3QmCisgICAgICBvcGVyYXRvcj0oY29uc3QgbGlzdCYgX194KQorICAgICAgeworCXN0YXRpY19jYXN0PF9CYXNlJj4oKnRoaXMpID0gX194OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBsaXN0JgorICAgICAgb3BlcmF0b3I9KGxpc3QmJiBfX3gpCisgICAgICB7CisJLy8gTkI6IERSIDEyMDQuCisJLy8gTkI6IERSIDY3NS4KKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPnN3YXAoX194KTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGxpc3QmCisgICAgICBvcGVyYXRvcj0oaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7CisJc3RhdGljX2Nhc3Q8X0Jhc2UmPigqdGhpcykgPSBfX2w7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBhc3NpZ24oaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7CV9CYXNlOjphc3NpZ24oX19sKTsgfQorI2VuZGlmCisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICAgIHsgX0Jhc2U6OmFzc2lnbihfX2ZpcnN0LCBfX2xhc3QpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGFzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdCkKKyAgICAgIHsJX0Jhc2U6OmFzc2lnbihfX24sIF9fdCk7IH0KKworICAgICAgdXNpbmcgX0Jhc2U6OmdldF9hbGxvY2F0b3I7CisKKyAgICAgIC8vIGl0ZXJhdG9yczoKKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X2xpc3RfcmV3aW5kKHRoaXMpOworICAgICAgICByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0CisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF9saXN0X3Jld2luZCh0aGlzKTsKKyAgICAgICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjplbmQoKSwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF9saXN0X3Jld2luZCh0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOworICAgICAgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKSBjb25zdAorICAgICAgeyAKKyAgICAgICAgX19wcm9mY3h4X2xpc3RfcmV3aW5kKHRoaXMpOworICAgICAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7CisgICAgICB9CisKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorI2VuZGlmCisKKyAgICAgIC8vIDIzLjIuMi4yIGNhcGFjaXR5OgorICAgICAgdXNpbmcgX0Jhc2U6OmVtcHR5OworICAgICAgdXNpbmcgX0Jhc2U6OnNpemU7CisgICAgICB1c2luZyBfQmFzZTo6bWF4X3NpemU7CisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19zeiwgX1RwIF9fYyA9IF9UcCgpKQorICAgICAgeyBfQmFzZTo6cmVzaXplKF9fc3osIF9fYyk7IH0KKworICAgICAgLy8gZWxlbWVudCBhY2Nlc3M6CisgICAgICByZWZlcmVuY2UKKyAgICAgIGZyb250KCkKKyAgICAgIHsgcmV0dXJuIF9CYXNlOjpmcm9udCgpOyB9CisKKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgZnJvbnQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX0Jhc2U6OmZyb250KCk7IH0KKworICAgICAgcmVmZXJlbmNlCisgICAgICBiYWNrKCkKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X2xpc3RfcmV3aW5kKHRoaXMpOworCXJldHVybiBfQmFzZTo6YmFjaygpOworICAgICAgfQorCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIGJhY2soKSBjb25zdAorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfbGlzdF9yZXdpbmQodGhpcyk7CisJcmV0dXJuIF9CYXNlOjpiYWNrKCk7CisgICAgICB9CisKKyAgICAgIC8vIDIzLjIuMi4zIG1vZGlmaWVyczoKKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfZnJvbnQoY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfbGlzdF9pbnZhbGlkX29wZXJhdG9yKHRoaXMpOworICAgICAgICBfX3Byb2ZjeHhfbGlzdF9vcGVyYXRpb24odGhpcyk7CisgICAgICAgIF9CYXNlOjpwdXNoX2Zyb250KF9feCk7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdXNpbmcgX0Jhc2U6OmVtcGxhY2VfZnJvbnQ7CisjZW5kaWYKKworICAgICAgdm9pZAorICAgICAgcG9wX2Zyb250KCkKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X2xpc3Rfb3BlcmF0aW9uKHRoaXMpOworCV9CYXNlOjpwb3BfZnJvbnQoKTsKKyAgICAgIH0KKworICAgICAgdXNpbmcgX0Jhc2U6OnB1c2hfYmFjazsKKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICB1c2luZyBfQmFzZTo6ZW1wbGFjZV9iYWNrOworI2VuZGlmCisKKyAgICAgIHZvaWQKKyAgICAgIHBvcF9iYWNrKCkKKyAgICAgIHsKKwlpdGVyYXRvciBfX3ZpY3RpbSA9IGVuZCgpOworCS0tX192aWN0aW07CisJX0Jhc2U6OnBvcF9iYWNrKCk7CisgICAgICAgIF9fcHJvZmN4eF9saXN0X3Jld2luZCh0aGlzKTsKKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgaXRlcmF0b3IKKyAgICAgICAgZW1wbGFjZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBfQXJncyYmLi4uIF9fYXJncykKKwl7CisJICByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVtcGxhY2UoX19wb3NpdGlvbi5iYXNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLikpOworCX0KKyNlbmRpZgorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KQorICAgICAgeworICAgICAgICBfTV9wcm9maWxlX2luc2VydCh0aGlzLCBfX3Bvc2l0aW9uLCBzaXplKCkpOworICAgICAgICByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6Omluc2VydChfX3Bvc2l0aW9uLmJhc2UoKSwgX194KSwgdGhpcyk7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBfVHAmJiBfX3gpCisgICAgICB7IAorICAgICAgICBfTV9wcm9maWxlX2luc2VydCh0aGlzLCBfX3Bvc2l0aW9uLCBzaXplKCkpOworICAgICAgICByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVtcGxhY2UoX19wb3NpdGlvbi5iYXNlKCksIHN0ZDo6bW92ZShfX3gpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMpOyAKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworICAgICAgICBfTV9wcm9maWxlX2luc2VydCh0aGlzLCBfX3Bvc2l0aW9uLCBzaXplKCkpOworICAgICAgICBfQmFzZTo6aW5zZXJ0KF9fcG9zaXRpb24uYmFzZSgpLCBfX2wpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCkKKyAgICAgIHsKKyAgICAgICAgX01fcHJvZmlsZV9pbnNlcnQodGhpcywgX19wb3NpdGlvbiwgc2l6ZSgpKTsKKwlfQmFzZTo6aW5zZXJ0KF9fcG9zaXRpb24uYmFzZSgpLCBfX24sIF9feCk7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAorCSAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICB7CisgICAgICAgIF9NX3Byb2ZpbGVfaW5zZXJ0KHRoaXMsIF9fcG9zaXRpb24sIHNpemUoKSk7CisgICAgICAgIF9CYXNlOjppbnNlcnQoX19wb3NpdGlvbi5iYXNlKCksIF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgewlyZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVyYXNlKF9fcG9zaXRpb24uYmFzZSgpKSwgdGhpcyk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwkvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJLy8gMTUxLiBjYW4ndCBjdXJyZW50bHkgY2xlYXIoKSBlbXB0eSBjb250YWluZXIKKwlyZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVyYXNlKF9fcG9zaXRpb24uYmFzZSgpLCBfX2xhc3QuYmFzZSgpKSwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAobGlzdCYgX194KQorICAgICAgewlfQmFzZTo6c3dhcChfX3gpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCkKKyAgICAgIHsJX0Jhc2U6OmNsZWFyKCk7IH0KKworICAgICAgLy8gMjMuMi4yLjQgbGlzdCBvcGVyYXRpb25zOgorICAgICAgdm9pZAorI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYmIF9feCkKKyNlbHNlCisgICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYgX194KQorI2VuZGlmCisgICAgICB7IHRoaXMtPnNwbGljZShfX3Bvc2l0aW9uLCBfR0xJQkNYWF9NT1ZFKF9feCksIF9feC5iZWdpbigpLCBfX3guZW5kKCkpOyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdm9pZAorICAgICAgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmIF9feCkKKyAgICAgIHsgdGhpcy0+c3BsaWNlKF9fcG9zaXRpb24sIHN0ZDo6bW92ZShfX3gpKTsgfQorI2VuZGlmCisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdm9pZAorICAgICAgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmIF9feCwgaXRlcmF0b3IgX19pKQorICAgICAgeyB0aGlzLT5zcGxpY2UoX19wb3NpdGlvbiwgc3RkOjptb3ZlKF9feCksIF9faSk7IH0KKyNlbmRpZgorCisgICAgICB2b2lkCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiYgX194LCBpdGVyYXRvciBfX2kpCisjZWxzZQorICAgICAgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmIF9feCwgaXRlcmF0b3IgX19pKQorI2VuZGlmCisgICAgICB7CisJLy8gV2UgdXNlZCB0byBwZXJmb3JtIHRoZSBzcGxpY2VfYWxsb2MgY2hlY2s6ICBub3QgYW55bW9yZSwgcmVkdW5kYW50CisJLy8gYWZ0ZXIgaW1wbGVtZW50aW5nIHRoZSByZWxldmFudCBiaXRzIG9mIE4xNTk5LgorCisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCV9CYXNlOjpzcGxpY2UoX19wb3NpdGlvbi5iYXNlKCksIF9HTElCQ1hYX01PVkUoX194Ll9NX2Jhc2UoKSksCisJCSAgICAgIF9faS5iYXNlKCkpOworICAgICAgfQorCisgICAgICB2b2lkCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiYgX194LCBpdGVyYXRvciBfX2ZpcnN0LAorCSAgICAgaXRlcmF0b3IgX19sYXN0KQorI2Vsc2UKKyAgICAgIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiBfX3gsIGl0ZXJhdG9yIF9fZmlyc3QsCisJICAgICBpdGVyYXRvciBfX2xhc3QpCisjZW5kaWYKKyAgICAgIHsKKwkvLyBXZSB1c2VkIHRvIHBlcmZvcm0gdGhlIHNwbGljZV9hbGxvYyBjaGVjazogIG5vdCBhbnltb3JlLCByZWR1bmRhbnQKKwkvLyBhZnRlciBpbXBsZW1lbnRpbmcgdGhlIHJlbGV2YW50IGJpdHMgb2YgTjE1OTkuCisKKwlfQmFzZTo6c3BsaWNlKF9fcG9zaXRpb24uYmFzZSgpLCBfR0xJQkNYWF9NT1ZFKF9feC5fTV9iYXNlKCkpLAorCQkgICAgICBfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSk7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdm9pZAorICAgICAgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmIF9feCwgaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICAgeyB0aGlzLT5zcGxpY2UoX19wb3NpdGlvbiwgc3RkOjptb3ZlKF9feCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KKyNlbmRpZgorCisgICAgICB2b2lkCisgICAgICByZW1vdmUoY29uc3QgX1RwJiBfX3ZhbHVlKQorICAgICAgeworCWZvciAoaXRlcmF0b3IgX194ID0gYmVnaW4oKTsgX194ICE9IGVuZCgpOyApCisJICB7CisJICAgIGlmICgqX194ID09IF9fdmFsdWUpCisJICAgICAgX194ID0gZXJhc2UoX194KTsKKwkgICAgZWxzZQorCSAgICAgICsrX194OworCSAgfQorICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfUHJlZGljYXRlPgorICAgICAgICB2b2lkCisgICAgICAgIHJlbW92ZV9pZihfUHJlZGljYXRlIF9fcHJlZCkKKyAgICAgICAgeworCSAgZm9yIChpdGVyYXRvciBfX3ggPSBiZWdpbigpOyBfX3ggIT0gZW5kKCk7ICkKKwkgICAgeworICAgICAgICAgICAgICBfX3Byb2ZjeHhfbGlzdF9vcGVyYXRpb24odGhpcyk7CisJICAgICAgaWYgKF9fcHJlZCgqX194KSkKKwkJX194ID0gZXJhc2UoX194KTsKKwkgICAgICBlbHNlCisJCSsrX194OworCSAgICB9CisJfQorCisgICAgICB2b2lkCisgICAgICB1bmlxdWUoKQorICAgICAgeworCWl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOworCWl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOworCWlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwkgIHJldHVybjsKKwlpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OworCXdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3QpCisJICB7CisgICAgICAgICAgICBfX3Byb2ZjeHhfbGlzdF9vcGVyYXRpb24odGhpcyk7CisJICAgIGlmICgqX19maXJzdCA9PSAqX19uZXh0KQorCSAgICAgIGVyYXNlKF9fbmV4dCk7CisJICAgIGVsc2UKKwkgICAgICBfX2ZpcnN0ID0gX19uZXh0OworCSAgICBfX25leHQgPSBfX2ZpcnN0OworCSAgfQorICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgorICAgICAgICB2b2lkCisgICAgICAgIHVuaXF1ZShfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCisgICAgICAgIHsKKwkgIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOworCSAgaXRlcmF0b3IgX19sYXN0ID0gZW5kKCk7CisJICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCisJICAgIHJldHVybjsKKwkgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CisJICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KQorCSAgICB7CisgICAgICAgICAgICAgIF9fcHJvZmN4eF9saXN0X29wZXJhdGlvbih0aGlzKTsKKwkgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCisJCWVyYXNlKF9fbmV4dCk7CisJICAgICAgZWxzZQorCQlfX2ZpcnN0ID0gX19uZXh0OworCSAgICAgIF9fbmV4dCA9IF9fZmlyc3Q7CisJICAgIH0KKwl9CisKKyAgICAgIHZvaWQKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgbWVyZ2UobGlzdCYmIF9feCkKKyNlbHNlCisgICAgICBtZXJnZShsaXN0JiBfX3gpCisjZW5kaWYKKyAgICAgIHsKKwkvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJLy8gMzAwLiBsaXN0OjptZXJnZSgpIHNwZWNpZmljYXRpb24gaW5jb21wbGV0ZQorCWlmICh0aGlzICE9ICZfX3gpCisJICB7IF9CYXNlOjptZXJnZShfR0xJQkNYWF9NT1ZFKF9feC5fTV9iYXNlKCkpKTsgfQorICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHZvaWQKKyAgICAgIG1lcmdlKGxpc3QmIF9feCkKKyAgICAgIHsgdGhpcy0+bWVyZ2Uoc3RkOjptb3ZlKF9feCkpOyB9CisjZW5kaWYKKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0NvbXBhcmU+CisgICAgICAgIHZvaWQKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgICBtZXJnZShsaXN0JiYgX194LCBfQ29tcGFyZSBfX2NvbXApCisjZWxzZQorICAgICAgICBtZXJnZShsaXN0JiBfX3gsIF9Db21wYXJlIF9fY29tcCkKKyNlbmRpZgorICAgICAgICB7CisJICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJICAvLyAzMDAuIGxpc3Q6Om1lcmdlKCkgc3BlY2lmaWNhdGlvbiBpbmNvbXBsZXRlCisJICBpZiAodGhpcyAhPSAmX194KQorCSAgICB7IF9CYXNlOjptZXJnZShfR0xJQkNYWF9NT1ZFKF9feC5fTV9iYXNlKCkpLCBfX2NvbXApOyB9CisJfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Db21wYXJlPgorICAgICAgICB2b2lkCisgICAgICAgIG1lcmdlKGxpc3QmIF9feCwgX0NvbXBhcmUgX19jb21wKQorICAgICAgICB7IHRoaXMtPm1lcmdlKHN0ZDo6bW92ZShfX3gpLCBfX2NvbXApOyB9CisjZW5kaWYKKworICAgICAgdm9pZAorICAgICAgc29ydCgpIHsgX0Jhc2U6OnNvcnQoKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RyaWN0V2Vha09yZGVyaW5nPgorICAgICAgICB2b2lkCisgICAgICAgIHNvcnQoX1N0cmljdFdlYWtPcmRlcmluZyBfX3ByZWQpIHsgX0Jhc2U6OnNvcnQoX19wcmVkKTsgfQorCisgICAgICB1c2luZyBfQmFzZTo6cmV2ZXJzZTsKKworICAgICAgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgY29uc3QgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgaW5saW5lIHZvaWQgX01fcHJvZmlsZV9maW5kKCkgY29uc3QgCisgICAgICB7IH0KKworICAgICAgaW5saW5lIHZvaWQgX01fcHJvZmlsZV9pdGVyYXRlKGludCBfX3Jld2luZCA9IDApIGNvbnN0IAorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfbGlzdF9vcGVyYXRpb24odGhpcyk7CisgICAgICAgIF9fcHJvZmN4eF9saXN0X2l0ZXJhdGUodGhpcyk7IAorICAgICAgICBpZiAoX19yZXdpbmQpCisgICAgICAgICAgX19wcm9mY3h4X2xpc3RfcmV3aW5kKHRoaXMpOworICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHNpemVfdHlwZSBfTV9wcm9maWxlX2luc2VydCh2b2lkKiBvYmosIGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19zaXplKQorICAgICAgeworICAgICAgICBzaXplX3R5cGUgX19zaGlmdCA9IDA7CisgICAgICAgIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBfX2l0ID0gX19wb3MuYmFzZSgpOworICAgICAgICBmb3IgKCA7IF9faXQhPV9CYXNlOjplbmQoKTsgX19pdCsrKQorICAgICAgICAgIF9fc2hpZnQrKzsKKyAgICAgICAgX19wcm9mY3h4X2xpc3RfcmV3aW5kKHRoaXMpOworICAgICAgICBfX3Byb2ZjeHhfbGlzdF9vcGVyYXRpb24odGhpcyk7CisgICAgICAgIF9fcHJvZmN4eF9saXN0X2luc2VydCh0aGlzLCBfX3NoaWZ0LCBfX3NpemUpOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICAgY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA9PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgICBjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpICE9IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICBjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpIDwgX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICAgY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA8PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgICBjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID49IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICBjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID4gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKGxpc3Q8X1RwLCBfQWxsb2M+JiBfX2xocywgbGlzdDxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0KKworfSAvLyBuYW1lc3BhY2UgX19wcm9maWxlCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Byb2ZpbGUvbWFwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL21hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzk2Yjg1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL21hcApAQCAtMCwwICsxLDQxIEBACisvLyBQcm9maWxpbmcgbWFwL211bHRpbWFwIGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorLy8gVVNBLgorCisvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworLyoqIEBmaWxlIHByb2ZpbGUvbWFwCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIHByb2ZpbGUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfTUFQCisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfTUFQIDEKKworI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxwcm9maWxlL21hcC5oPgorI2luY2x1ZGUgPHByb2ZpbGUvbXVsdGltYXAuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Byb2ZpbGUvbWFwLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Byb2ZpbGUvbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM2OThhOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcHJvZmlsZS9tYXAuaApAQCAtMCwwICsxLDUwMiBAQAorLy8gUHJvZmlsaW5nIG1hcCBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKy8vIFVTQS4KKworLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKKy8qKiBAZmlsZSBwcm9maWxlL21hcC5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIHByb2ZpbGUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfTUFQX0gKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9NQVBfSCAxCisKKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHByb2ZpbGUvYmFzZS5oPgorCituYW1lc3BhY2Ugc3RkCit7CituYW1lc3BhY2UgX19wcm9maWxlCit7CisgIC8vLyBDbGFzcyBzdGQ6Om1hcCB3cmFwcGVyIHdpdGggcGVyZm9ybWFuY2UgaW5zdHJ1bWVudGF0aW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlID0gc3RkOjpsZXNzPF9LZXk+LAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IgPSBzdGQ6OmFsbG9jYXRvcjxzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiA+ID4KKyAgICBjbGFzcyBtYXAKKyAgICA6IHB1YmxpYyBfR0xJQkNYWF9TVERfRDo6bWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+CisgICAgeworICAgICAgdHlwZWRlZiBfR0xJQkNYWF9TVERfRDo6bWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+IF9CYXNlOworCisgICAgcHVibGljOgorICAgICAgLy8gdHlwZXM6CisgICAgICB0eXBlZGVmIF9LZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X3R5cGU7CisgICAgICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGVkX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0NvbXBhcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfY29tcGFyZTsKKyAgICAgIHR5cGVkZWYgX0FsbG9jYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnJlZmVyZW5jZSAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9yZWZlcmVuY2UgICAgICAgY29uc3RfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciAgICAgICBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yICAgICAgIGNvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6c2l6ZV90eXBlICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmRpZmZlcmVuY2VfdHlwZSAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpwb2ludGVyICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3BvaW50ZXIgICAgICAgICBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+ICAgICAgIHJldmVyc2VfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKKworICAgICAgdXNpbmcgX0Jhc2U6OnZhbHVlX2NvbXBhcmU7CisKKyAgICAgIC8vIDIzLjMuMS4xIGNvbnN0cnVjdC9jb3B5L2Rlc3Ryb3k6CisgICAgICBleHBsaWNpdCBtYXAoY29uc3QgX0NvbXBhcmUmIF9fY29tcCA9IF9Db21wYXJlKCksCisJCSAgIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKyAgICAgIDogX0Jhc2UoX19jb21wLCBfX2EpIHsKKyAgICAgICAgICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfY29uc3RydWN0KHRoaXMpOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgY29uc3QgX0NvbXBhcmUmIF9fY29tcCA9IF9Db21wYXJlKCksCisJICAgIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKwk6IF9CYXNlKF9fZmlyc3QsIF9fbGFzdCwgX19jb21wLCBfX2EpIHsKKyAgICAgICAgICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfY29uc3RydWN0KHRoaXMpOworICAgICAgICB9CisKKyAgICAgIG1hcChjb25zdCBtYXAmIF9feCkKKyAgICAgIDogX0Jhc2UoX194KSB7CisgICAgICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2NvbnN0cnVjdCh0aGlzKTsKKyAgICAgIH0KKworICAgICAgbWFwKGNvbnN0IF9CYXNlJiBfX3gpCisgICAgICA6IF9CYXNlKF9feCkgeworICAgICAgICAgIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9jb25zdHJ1Y3QodGhpcyk7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgbWFwKG1hcCYmIF9feCkKKyAgICAgIDogX0Jhc2Uoc3RkOjpmb3J3YXJkPG1hcD4oX194KSkKKyAgICAgIHsgfQorCisgICAgICBtYXAoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJICBjb25zdCBfQ29tcGFyZSYgX19jID0gX0NvbXBhcmUoKSwKKwkgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2wsIF9fYywgX19hKSB7IH0KKyNlbmRpZgorCisgICAgICB+bWFwKCkgeworICAgICAgICAgIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9kZXN0cnVjdCh0aGlzKTsKKyAgICAgIH0KKworICAgICAgbWFwJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IG1hcCYgX194KQorICAgICAgeworCSpzdGF0aWNfY2FzdDxfQmFzZSo+KHRoaXMpID0gX194OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBtYXAmCisgICAgICBvcGVyYXRvcj0obWFwJiYgX194KQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorCS8vIE5COiBEUiA2NzUuCisJdGhpcy0+Y2xlYXIoKTsKKwl0aGlzLT5zd2FwKF9feCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBtYXAmCisgICAgICBvcGVyYXRvcj0oaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7CisJdGhpcy0+Y2xlYXIoKTsKKwl0aGlzLT5pbnNlcnQoX19sKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisjZW5kaWYKKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMTMzLiBtYXAgbWlzc2luZyBnZXRfYWxsb2NhdG9yKCkKKyAgICAgIHVzaW5nIF9CYXNlOjpnZXRfYWxsb2NhdG9yOworCisgICAgICAvLyBpdGVyYXRvcnM6CisgICAgICBpdGVyYXRvciAKKyAgICAgIGJlZ2luKCkKKyAgICAgIHsgcmV0dXJuIF9CYXNlOjpiZWdpbigpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfQmFzZTo6YmVnaW4oKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkKKyAgICAgIHsgcmV0dXJuIF9CYXNlOjplbmQoKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9CYXNlOjplbmQoKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKQorICAgICAgeyAKKyAgICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2ludmFsaWRhdGUodGhpcyk7CisgICAgICAgIHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgCisgICAgICB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIGNvbnN0CisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnZhbGlkYXRlKHRoaXMpOworICAgICAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7CisgICAgICB9CisKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKQorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaW52YWxpZGF0ZSh0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7CisgICAgICB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKSBjb25zdAorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaW52YWxpZGF0ZSh0aGlzKTsKKyAgICAgICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oKSk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmVuZCgpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjcmJlZ2luKCkgY29uc3QKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2ludmFsaWRhdGUodGhpcyk7CisgICAgICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsKKyAgICAgIH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JlbmQoKSBjb25zdAorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaW52YWxpZGF0ZSh0aGlzKTsKKyAgICAgICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7CisgICAgICB9CisjZW5kaWYKKworICAgICAgLy8gY2FwYWNpdHk6CisgICAgICB1c2luZyBfQmFzZTo6ZW1wdHk7CisgICAgICB1c2luZyBfQmFzZTo6c2l6ZTsKKyAgICAgIHVzaW5nIF9CYXNlOjptYXhfc2l6ZTsKKworICAgICAgLy8gMjMuMy4xLjIgZWxlbWVudCBhY2Nlc3M6CisgICAgICBtYXBwZWRfdHlwZSYKKyAgICAgIG9wZXJhdG9yW10oY29uc3Qga2V5X3R5cGUmIF9faykKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2ZpbmQodGhpcywgc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIF9CYXNlOjpvcGVyYXRvcltdKF9fayk7CisgICAgICB9CisKKyAgICAgIG1hcHBlZF90eXBlJgorICAgICAgYXQoY29uc3Qga2V5X3R5cGUmIF9faykKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2ZpbmQodGhpcywgc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIF9CYXNlOjphdChfX2spOworICAgICAgfQorCisgICAgICBjb25zdCBtYXBwZWRfdHlwZSYKKyAgICAgIGF0KGNvbnN0IGtleV90eXBlJiBfX2spIGNvbnN0CisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9maW5kKHRoaXMsIHNpemUoKSk7CisgICAgICAgIHJldHVybiBfQmFzZTo6YXQoX19rKTsKKyAgICAgIH0KKworICAgICAgLy8gbW9kaWZpZXJzOgorICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPgorICAgICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2luc2VydCh0aGlzLCBzaXplKCksIDEpOworCXR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIF9CYXNlX2l0ZXJhdG9yOworCXN0ZDo6cGFpcjxfQmFzZV9pdGVyYXRvciwgYm9vbD4gX19yZXMgPSBfQmFzZTo6aW5zZXJ0KF9feCk7CisJcmV0dXJuIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4oaXRlcmF0b3IoX19yZXMuZmlyc3QpLAorCQkJCQkgX19yZXMuc2Vjb25kKTsKKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoc3RkOjppbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbGlzdCkKKyAgICAgIHsgCisgICAgICAgIHNpemVfdHlwZSBzaXplX2JlZm9yZSA9IHNpemUoKTsKKyAgICAgICAgX0Jhc2U6Omluc2VydChfX2xpc3QpOyAKKyAgICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2luc2VydCh0aGlzLCBzaXplX2JlZm9yZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplKCkgLSBzaXplX2JlZm9yZSk7CisgICAgICB9CisjZW5kaWYKKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7CisgICAgICAgIHNpemVfdHlwZSBzaXplX2JlZm9yZSA9IHNpemUoKTsKKwlyZXR1cm4gaXRlcmF0b3IoX0Jhc2U6Omluc2VydChfX3Bvc2l0aW9uLCBfX3gpKTsKKyAgICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2luc2VydCh0aGlzLCBzaXplX2JlZm9yZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplKCkgLSBzaXplX2JlZm9yZSk7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICAgIHsKKyAgICAgICAgICBzaXplX3R5cGUgc2l6ZV9iZWZvcmUgPSBzaXplKCk7CisJICBfQmFzZTo6aW5zZXJ0KF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2luc2VydCh0aGlzLCBzaXplX2JlZm9yZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplKCkgLSBzaXplX2JlZm9yZSk7CisJfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeworCWl0ZXJhdG9yIF9faSA9IF9CYXNlOjplcmFzZShfX3Bvc2l0aW9uKTsKKyAgICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2VyYXNlKHRoaXMsIHNpemUoKSwgMSk7CisgICAgICAgIHJldHVybiBfX2k7CisgICAgICB9CisjZWxzZQorICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICAgIHsKKwlfQmFzZTo6ZXJhc2UoX19wb3NpdGlvbik7CisgICAgICAgIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9lcmFzZSh0aGlzLCBzaXplKCksIDEpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIHNpemVfdHlwZQorICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsKKwlpdGVyYXRvciBfX3ZpY3RpbSA9IGZpbmQoX194KTsKKwlpZiAoX192aWN0aW0gPT0gZW5kKCkpCisJICByZXR1cm4gMDsKKwllbHNlCisJeworCSAgX0Jhc2U6OmVyYXNlKF9fdmljdGltKTsKKwkgIHJldHVybiAxOworCX0KKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICAgeworCS8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkvLyAxNTEuIGNhbid0IGN1cnJlbnRseSBjbGVhcigpIGVtcHR5IGNvbnRhaW5lcgorCXdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwkgIHRoaXMtPmVyYXNlKF9fZmlyc3QrKyk7CisJcmV0dXJuIF9fbGFzdDsKKyAgICAgIH0KKyNlbHNlCisgICAgICB2b2lkCisgICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCisgICAgICB7CisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDE1MS4gY2FuJ3QgY3VycmVudGx5IGNsZWFyKCkgZW1wdHkgY29udGFpbmVyCisJd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQorCSAgdGhpcy0+ZXJhc2UoX19maXJzdCsrKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICB2b2lkCisKKyAgICAgIHN3YXAobWFwJiBfX3gpCisgICAgICB7CisJX0Jhc2U6OnN3YXAoX194KTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKQorICAgICAgeyB0aGlzLT5lcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KKworICAgICAgLy8gb2JzZXJ2ZXJzOgorICAgICAgdXNpbmcgX0Jhc2U6OmtleV9jb21wOworICAgICAgdXNpbmcgX0Jhc2U6OnZhbHVlX2NvbXA7CisKKyAgICAgIC8vIDIzLjMuMS4zIG1hcCBvcGVyYXRpb25zOgorICAgICAgaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2ZpbmQodGhpcywgc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpmaW5kKF9feCkpOworICAgICAgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfZmluZCh0aGlzLCBzaXplKCkpOworICAgICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmZpbmQoX194KSk7CisgICAgICB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2ZpbmQodGhpcywgc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIF9CYXNlOjpjb3VudChfX3gpOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgCisgICAgICAgIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnZhbGlkYXRlKHRoaXMpOworICAgICAgICByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6Omxvd2VyX2JvdW5kKF9feCkpOyAKKyAgICAgIH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IAorICAgICAgICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaW52YWxpZGF0ZSh0aGlzKTsKKyAgICAgICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpsb3dlcl9ib3VuZChfX3gpKTsgCisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyAKKyAgICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2ludmFsaWRhdGUodGhpcyk7CisgICAgICAgIHJldHVybiBpdGVyYXRvcihfQmFzZTo6dXBwZXJfYm91bmQoX194KSk7IAorICAgICAgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgCisgICAgICAgIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnZhbGlkYXRlKHRoaXMpOworICAgICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OnVwcGVyX2JvdW5kKF9feCkpOyAKKyAgICAgIH0KKworICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsKKwl0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBfQmFzZV9pdGVyYXRvcjsKKwlzdGQ6OnBhaXI8X0Jhc2VfaXRlcmF0b3IsIF9CYXNlX2l0ZXJhdG9yPiBfX3JlcyA9CisJX0Jhc2U6OmVxdWFsX3JhbmdlKF9feCk7CisJcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGl0ZXJhdG9yKF9fcmVzLmZpcnN0KSwKKwkJCSAgICAgIGl0ZXJhdG9yKF9fcmVzLnNlY29uZCkpOworICAgICAgfQorCisgICAgICBzdGQ6OnBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfZmluZCh0aGlzLCBzaXplKCkpOworCXR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yIF9CYXNlX2NvbnN0X2l0ZXJhdG9yOworCXN0ZDo6cGFpcjxfQmFzZV9jb25zdF9pdGVyYXRvciwgX0Jhc2VfY29uc3RfaXRlcmF0b3I+IF9fcmVzID0KKwlfQmFzZTo6ZXF1YWxfcmFuZ2UoX194KTsKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoY29uc3RfaXRlcmF0b3IoX19yZXMuZmlyc3QpLAorCQkJICAgICAgY29uc3RfaXRlcmF0b3IoX19yZXMuc2Vjb25kKSk7CisgICAgICB9CisKKyAgICAgIF9CYXNlJiAKKyAgICAgIF9NX2Jhc2UoKSB7IHJldHVybiAqdGhpczsgfQorCisgICAgICBjb25zdCBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorCisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyAKKyAgICAgIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnZhbGlkYXRlKCZfX2xocyk7CisgICAgICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaW52YWxpZGF0ZSgmX19yaHMpOworICAgICAgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA9PSBfX3Jocy5fTV9iYXNlKCk7IAorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyAKKyAgICAgIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnZhbGlkYXRlKCZfX2xocyk7CisgICAgICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaW52YWxpZGF0ZSgmX19yaHMpOworICAgICAgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSAhPSBfX3Jocy5fTV9iYXNlKCk7IAorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICBjb25zdCBtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsKKyAgICAgIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnZhbGlkYXRlKCZfX2xocyk7CisgICAgICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaW52YWxpZGF0ZSgmX19yaHMpOworICAgICAgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA8IF9fcmhzLl9NX2Jhc2UoKTsgCisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICAgY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7CisgICAgICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaW52YWxpZGF0ZSgmX19saHMpOworICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2ludmFsaWRhdGUoJl9fcmhzKTsKKyAgICAgIHJldHVybiBfX2xocy5fTV9iYXNlKCkgPD0gX19yaHMuX01fYmFzZSgpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeworICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2ludmFsaWRhdGUoJl9fbGhzKTsKKyAgICAgIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnZhbGlkYXRlKCZfX3Jocyk7CisgICAgICByZXR1cm4gX19saHMuX01fYmFzZSgpID49IF9fcmhzLl9NX2Jhc2UoKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLAorCSAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7CisgICAgICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaW52YWxpZGF0ZSgmX19saHMpOworICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2ludmFsaWRhdGUoJl9fcmhzKTsKKyAgICAgIHJldHVybiBfX2xocy5fTV9iYXNlKCkgPiBfX3Jocy5fTV9iYXNlKCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAobWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CisKK30gLy8gbmFtZXNwYWNlIF9fcHJvZmlsZQorfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL211bHRpbWFwLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Byb2ZpbGUvbXVsdGltYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTYyN2FkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL211bHRpbWFwLmgKQEAgLTAsMCArMSwzNzIgQEAKKy8vIFByb2ZpbGluZyBtdWx0aW1hcCBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHByb2ZpbGUvbXVsdGltYXAuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBwcm9maWxlIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9QUk9GSUxFX01VTFRJTUFQX0gKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9NVUxUSU1BUF9IIDEKKworI2luY2x1ZGUgPHV0aWxpdHk+CisKK25hbWVzcGFjZSBzdGQKK3sKK25hbWVzcGFjZSBfX3Byb2ZpbGUKK3sKKyAgLy8vIENsYXNzIHN0ZDo6bXVsdGltYXAgd3JhcHBlciB3aXRoIHBlcmZvcm1hbmNlIGluc3RydW1lbnRhdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSA9IHN0ZDo6bGVzczxfS2V5PiwKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yID0gc3RkOjphbGxvY2F0b3I8c3RkOjpwYWlyPGNvbnN0IF9LZXksIF9UcD4gPiA+CisgICAgY2xhc3MgbXVsdGltYXAKKyAgICA6IHB1YmxpYyBfR0xJQkNYWF9TVERfRDo6bXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4KKyAgICB7CisgICAgICB0eXBlZGVmIF9HTElCQ1hYX1NURF9EOjptdWx0aW1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiBfQmFzZTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vIHR5cGVzOgorICAgICAgdHlwZWRlZiBfS2V5CQkJCSAgICAga2V5X3R5cGU7CisgICAgICB0eXBlZGVmIF9UcAkJCQkgICAgIG1hcHBlZF90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBfQ29tcGFyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfY29tcGFyZTsKKyAgICAgIHR5cGVkZWYgX0FsbG9jYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpyZWZlcmVuY2UgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3JlZmVyZW5jZSAgICAgICAgY29uc3RfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciAgICAgICAgICAgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IgICAgICAgICBjb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnJldmVyc2VfaXRlcmF0b3IgICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6c2l6ZV90eXBlICAgICAgICAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpkaWZmZXJlbmNlX3R5cGUgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnBvaW50ZXIgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3BvaW50ZXIgICAgICAgICAgY29uc3RfcG9pbnRlcjsKKworICAgICAgdXNpbmcgX0Jhc2U6OnZhbHVlX2NvbXBhcmU7CisKKyAgICAgIC8vIDIzLjMuMS4xIGNvbnN0cnVjdC9jb3B5L2Rlc3Ryb3k6CisgICAgICBleHBsaWNpdCBtdWx0aW1hcChjb25zdCBfQ29tcGFyZSYgX19jb21wID0gX0NvbXBhcmUoKSwKKwkJCWNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKyAgICAgIDogX0Jhc2UoX19jb21wLCBfX2EpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgIG11bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgICAgY29uc3QgX0NvbXBhcmUmIF9fY29tcCA9IF9Db21wYXJlKCksCisJICAgICAgIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKyAgICAgIDogX0Jhc2UoX19maXJzdCwgX19sYXN0LCBfX2NvbXAsIF9fYSkgeyB9CisKKyAgICAgIG11bHRpbWFwKGNvbnN0IG11bHRpbWFwJiBfX3gpCisgICAgICA6IF9CYXNlKF9feCkgeyB9CisKKyAgICAgIG11bHRpbWFwKGNvbnN0IF9CYXNlJiBfX3gpCisgICAgICA6IF9CYXNlKF9feCkgeyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgbXVsdGltYXAobXVsdGltYXAmJiBfX3gpCisgICAgICA6IF9CYXNlKHN0ZDo6Zm9yd2FyZDxtdWx0aW1hcD4oX194KSkKKyAgICAgIHsgfQorCisgICAgICBtdWx0aW1hcChpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCwKKwkgICAgICAgY29uc3QgX0NvbXBhcmUmIF9fYyA9IF9Db21wYXJlKCksCisJICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2wsIF9fYywgX19hKSB7IH0KKyNlbmRpZgorCisgICAgICB+bXVsdGltYXAoKSB7IH0KKworICAgICAgbXVsdGltYXAmCisgICAgICBvcGVyYXRvcj0oY29uc3QgbXVsdGltYXAmIF9feCkKKyAgICAgIHsKKwkqc3RhdGljX2Nhc3Q8X0Jhc2UqPih0aGlzKSA9IF9feDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgbXVsdGltYXAmCisgICAgICBvcGVyYXRvcj0obXVsdGltYXAmJiBfX3gpCisgICAgICB7CisJLy8gTkI6IERSIDEyMDQuCisJLy8gTkI6IERSIDY3NS4KKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPnN3YXAoX194KTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIG11bHRpbWFwJgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+aW5zZXJ0KF9fbCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIHVzaW5nIF9CYXNlOjpnZXRfYWxsb2NhdG9yOworCisgICAgICAvLyBpdGVyYXRvcnM6CisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCkpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oKSk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmVuZCgpKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorI2VuZGlmCisKKyAgICAgIC8vIGNhcGFjaXR5OgorICAgICAgdXNpbmcgX0Jhc2U6OmVtcHR5OworICAgICAgdXNpbmcgX0Jhc2U6OnNpemU7CisgICAgICB1c2luZyBfQmFzZTo6bWF4X3NpemU7CisKKyAgICAgIC8vIG1vZGlmaWVyczoKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6Omluc2VydChfX3gpKTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19saXN0KQorICAgICAgeyBfQmFzZTo6aW5zZXJ0KF9fbGlzdCk7IH0KKyNlbmRpZgorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsKKwlyZXR1cm4gaXRlcmF0b3IoX0Jhc2U6Omluc2VydChfX3Bvc2l0aW9uLCBfX3gpKTsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeworCSAgX0Jhc2U6Omluc2VydChfX2ZpcnN0LCBfX2xhc3QpOworCX0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICAgIHsgcmV0dXJuIF9CYXNlOjplcmFzZShfX3Bvc2l0aW9uKTsgfQorI2Vsc2UKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7IF9CYXNlOjplcmFzZShfX3Bvc2l0aW9uKTsgfQorI2VuZGlmCisKKyAgICAgIHNpemVfdHlwZQorICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsKKwlzdGQ6OnBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPiBfX3ZpY3RpbXMgPSB0aGlzLT5lcXVhbF9yYW5nZShfX3gpOworCXNpemVfdHlwZSBfX2NvdW50ID0gMDsKKwl3aGlsZSAoX192aWN0aW1zLmZpcnN0ICE9IF9fdmljdGltcy5zZWNvbmQpCisJeworCSAgaXRlcmF0b3IgX192aWN0aW0gPSBfX3ZpY3RpbXMuZmlyc3QrKzsKKwkgIF9CYXNlOjplcmFzZShfX3ZpY3RpbSk7CisJICArK19fY291bnQ7CisJfQorCXJldHVybiBfX2NvdW50OworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCisgICAgICB7CisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDE1MS4gY2FuJ3QgY3VycmVudGx5IGNsZWFyKCkgZW1wdHkgY29udGFpbmVyCisJd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQorCSAgdGhpcy0+ZXJhc2UoX19maXJzdCsrKTsKKwlyZXR1cm4gX19sYXN0OworICAgICAgfQorI2Vsc2UKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwkvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJLy8gMTUxLiBjYW4ndCBjdXJyZW50bHkgY2xlYXIoKSBlbXB0eSBjb250YWluZXIKKwl3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCisJICB0aGlzLT5lcmFzZShfX2ZpcnN0KyspOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAobXVsdGltYXAmIF9feCkKKyAgICAgIHsKKwlfQmFzZTo6c3dhcChfX3gpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBjbGVhcigpCisgICAgICB7IHRoaXMtPmVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQorCisgICAgICAvLyBvYnNlcnZlcnM6CisgICAgICB1c2luZyBfQmFzZTo6a2V5X2NvbXA7CisgICAgICB1c2luZyBfQmFzZTo6dmFsdWVfY29tcDsKKworICAgICAgLy8gMjMuMy4xLjMgbXVsdGltYXAgb3BlcmF0aW9uczoKKyAgICAgIGl0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZmluZChfX3gpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmZpbmQoX194KSk7IH0KKworICAgICAgdXNpbmcgX0Jhc2U6OmNvdW50OworCisgICAgICBpdGVyYXRvcgorICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpsb3dlcl9ib3VuZChfX3gpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpsb3dlcl9ib3VuZChfX3gpKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjp1cHBlcl9ib3VuZChfX3gpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjp1cHBlcl9ib3VuZChfX3gpKTsgfQorCisgICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIF9CYXNlX2l0ZXJhdG9yOworCXN0ZDo6cGFpcjxfQmFzZV9pdGVyYXRvciwgX0Jhc2VfaXRlcmF0b3I+IF9fcmVzID0KKwlfQmFzZTo6ZXF1YWxfcmFuZ2UoX194KTsKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoaXRlcmF0b3IoX19yZXMuZmlyc3QpLAorCQkJICAgICAgaXRlcmF0b3IoX19yZXMuc2Vjb25kKSk7CisgICAgICB9CisKKyAgICAgIHN0ZDo6cGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IgX0Jhc2VfY29uc3RfaXRlcmF0b3I7CisJc3RkOjpwYWlyPF9CYXNlX2NvbnN0X2l0ZXJhdG9yLCBfQmFzZV9jb25zdF9pdGVyYXRvcj4gX19yZXMgPQorCV9CYXNlOjplcXVhbF9yYW5nZShfX3gpOworCXJldHVybiBzdGQ6Om1ha2VfcGFpcihjb25zdF9pdGVyYXRvcihfX3Jlcy5maXJzdCksCisJCQkgICAgICBjb25zdF9pdGVyYXRvcihfX3Jlcy5zZWNvbmQpKTsKKyAgICAgIH0KKworICAgICAgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgY29uc3QgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID09IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpICE9IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBtdWx0aW1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA8IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpIDw9IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID49IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBtdWx0aW1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA+IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAobXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSBtdWx0aW1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyBfX2xocy5zd2FwKF9fcmhzKTsgfQorCit9IC8vIG5hbWVzcGFjZSBfX3Byb2ZpbGUKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcHJvZmlsZS9tdWx0aXNldC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL211bHRpc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUzYmE1YgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcHJvZmlsZS9tdWx0aXNldC5oCkBAIC0wLDAgKzEsMzcyIEBACisvLyBQcm9maWxpbmcgbXVsdGlzZXQgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBwcm9maWxlL211bHRpc2V0LmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgcHJvZmlsZSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9NVUxUSVNFVF9ICisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfTVVMVElTRVRfSCAxCisKKyNpbmNsdWRlIDx1dGlsaXR5PgorCituYW1lc3BhY2Ugc3RkCit7CituYW1lc3BhY2UgX19wcm9maWxlCit7CisgIC8vLyBDbGFzcyBzdGQ6Om11bHRpc2V0IHdyYXBwZXIgd2l0aCBwZXJmb3JtYW5jZSBpbnN0cnVtZW50YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlID0gc3RkOjpsZXNzPF9LZXk+LAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IgPSBzdGQ6OmFsbG9jYXRvcjxfS2V5PiA+CisgICAgY2xhc3MgbXVsdGlzZXQKKyAgICA6IHB1YmxpYyBfR0xJQkNYWF9TVERfRDo6bXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+CisgICAgeworICAgICAgdHlwZWRlZiBfR0xJQkNYWF9TVERfRDo6bXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+IF9CYXNlOworCisgICAgcHVibGljOgorICAgICAgLy8gdHlwZXM6CisgICAgICB0eXBlZGVmIF9LZXkJCQkJICAgICBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0tleQkJCQkgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9Db21wYXJlCQkJCSAgICAga2V5X2NvbXBhcmU7CisgICAgICB0eXBlZGVmIF9Db21wYXJlCQkJCSAgICAgdmFsdWVfY29tcGFyZTsKKyAgICAgIHR5cGVkZWYgX0FsbG9jYXRvcgkJCSAgICAgYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpyZWZlcmVuY2UJICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3JlZmVyZW5jZSAgICAgICAgY29uc3RfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciAgICAgICAgICAgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IgICAgICAgICBjb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnJldmVyc2VfaXRlcmF0b3IgICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6c2l6ZV90eXBlICAgICAgICAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpkaWZmZXJlbmNlX3R5cGUgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnBvaW50ZXIgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3BvaW50ZXIgICAgICAgICAgY29uc3RfcG9pbnRlcjsKKworICAgICAgLy8gMjMuMy4zLjEgY29uc3RydWN0L2NvcHkvZGVzdHJveToKKyAgICAgIGV4cGxpY2l0IG11bHRpc2V0KGNvbnN0IF9Db21wYXJlJiBfX2NvbXAgPSBfQ29tcGFyZSgpLAorCQkJY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorICAgICAgOiBfQmFzZShfX2NvbXAsIF9fYSkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBtdWx0aXNldChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCSBjb25zdCBfQ29tcGFyZSYgX19jb21wID0gX0NvbXBhcmUoKSwKKwkJIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKwk6IF9CYXNlKF9fZmlyc3QsIF9fbGFzdCwgX19jb21wLCBfX2EpIHsgfQorCisgICAgICBtdWx0aXNldChjb25zdCBtdWx0aXNldCYgX194KQorICAgICAgOiBfQmFzZShfX3gpIHsgfQorCisgICAgICBtdWx0aXNldChjb25zdCBfQmFzZSYgX194KQorICAgICAgOiBfQmFzZShfX3gpIHsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIG11bHRpc2V0KG11bHRpc2V0JiYgX194KQorICAgICAgOiBfQmFzZShzdGQ6OmZvcndhcmQ8bXVsdGlzZXQ+KF9feCkpCisgICAgICB7IH0KKworICAgICAgbXVsdGlzZXQoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJICAgICAgIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAgPSBfQ29tcGFyZSgpLAorCSAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19sLCBfX2NvbXAsIF9fYSkgeyB9CisjZW5kaWYKKworICAgICAgfm11bHRpc2V0KCkgeyB9CisKKyAgICAgIG11bHRpc2V0JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IG11bHRpc2V0JiBfX3gpCisgICAgICB7CisJKnN0YXRpY19jYXN0PF9CYXNlKj4odGhpcykgPSBfX3g7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIG11bHRpc2V0JgorICAgICAgb3BlcmF0b3I9KG11bHRpc2V0JiYgX194KQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorCS8vIE5COiBEUiA2NzUuCisJdGhpcy0+Y2xlYXIoKTsKKwl0aGlzLT5zd2FwKF9feCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBtdWx0aXNldCYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPmluc2VydChfX2wpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICB1c2luZyBfQmFzZTo6Z2V0X2FsbG9jYXRvcjsKKworICAgICAgLy8gaXRlcmF0b3JzOgorICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpiZWdpbigpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCkpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVuZCgpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjplbmQoKSk7IH0KKworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oKSk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmVuZCgpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjcmJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKyNlbmRpZgorCisgICAgICAvLyBjYXBhY2l0eToKKyAgICAgIHVzaW5nIF9CYXNlOjplbXB0eTsKKyAgICAgIHVzaW5nIF9CYXNlOjpzaXplOworICAgICAgdXNpbmcgX0Jhc2U6Om1heF9zaXplOworCisgICAgICAvLyBtb2RpZmllcnM6CisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjppbnNlcnQoX194KSk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7CisJcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjppbnNlcnQoX19wb3NpdGlvbiwgX194KSk7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwlfQmFzZTo6aW5zZXJ0KF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeyBfQmFzZTo6aW5zZXJ0KF9fbCk7IH0KKyNlbmRpZgorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeyByZXR1cm4gX0Jhc2U6OmVyYXNlKF9fcG9zaXRpb24pOyB9CisjZWxzZQorICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICAgIHsgX0Jhc2U6OmVyYXNlKF9fcG9zaXRpb24pOyB9CisjZW5kaWYKKworICAgICAgc2l6ZV90eXBlCisgICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeworCXN0ZDo6cGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+IF9fdmljdGltcyA9IHRoaXMtPmVxdWFsX3JhbmdlKF9feCk7CisJc2l6ZV90eXBlIF9fY291bnQgPSAwOworCXdoaWxlIChfX3ZpY3RpbXMuZmlyc3QgIT0gX192aWN0aW1zLnNlY29uZCkKKwl7CisJICBpdGVyYXRvciBfX3ZpY3RpbSA9IF9fdmljdGltcy5maXJzdCsrOworCSAgX0Jhc2U6OmVyYXNlKF9fdmljdGltKTsKKwkgICsrX19jb3VudDsKKwl9CisJcmV0dXJuIF9fY291bnQ7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwkvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJLy8gMTUxLiBjYW4ndCBjdXJyZW50bHkgY2xlYXIoKSBlbXB0eSBjb250YWluZXIKKwl3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCisJICB0aGlzLT5lcmFzZShfX2ZpcnN0KyspOworCXJldHVybiBfX2xhc3Q7CisgICAgICB9CisjZWxzZQorICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICAgeworCS8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkvLyAxNTEuIGNhbid0IGN1cnJlbnRseSBjbGVhcigpIGVtcHR5IGNvbnRhaW5lcgorCXdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwkgIHRoaXMtPmVyYXNlKF9fZmlyc3QrKyk7CisgICAgICB9CisjZW5kaWYKKworICAgICAgdm9pZAorICAgICAgc3dhcChtdWx0aXNldCYgX194KQorICAgICAgeworCV9CYXNlOjpzd2FwKF9feCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCkKKyAgICAgIHsgdGhpcy0+ZXJhc2UoYmVnaW4oKSwgZW5kKCkpOyB9CisKKyAgICAgIC8vIG9ic2VydmVyczoKKyAgICAgIHVzaW5nIF9CYXNlOjprZXlfY29tcDsKKyAgICAgIHVzaW5nIF9CYXNlOjp2YWx1ZV9jb21wOworCisgICAgICAvLyBtdWx0aXNldCBvcGVyYXRpb25zOgorICAgICAgaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpmaW5kKF9feCkpOyB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDIxNC4gc2V0OjpmaW5kKCkgbWlzc2luZyBjb25zdCBvdmVybG9hZAorICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpmaW5kKF9feCkpOyB9CisKKyAgICAgIHVzaW5nIF9CYXNlOjpjb3VudDsKKworICAgICAgaXRlcmF0b3IKKyAgICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6bG93ZXJfYm91bmQoX194KSk7IH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMjE0LiBzZXQ6OmZpbmQoKSBtaXNzaW5nIGNvbnN0IG92ZXJsb2FkCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpsb3dlcl9ib3VuZChfX3gpKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjp1cHBlcl9ib3VuZChfX3gpKTsgfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyMTQuIHNldDo6ZmluZCgpIG1pc3NpbmcgY29uc3Qgb3ZlcmxvYWQKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OnVwcGVyX2JvdW5kKF9feCkpOyB9CisKKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvcixpdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgX0Jhc2VfaXRlcmF0b3I7CisJc3RkOjpwYWlyPF9CYXNlX2l0ZXJhdG9yLCBfQmFzZV9pdGVyYXRvcj4gX19yZXMgPQorICAgICAgICBfQmFzZTo6ZXF1YWxfcmFuZ2UoX194KTsKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoaXRlcmF0b3IoX19yZXMuZmlyc3QpLAorCQkJICAgICAgaXRlcmF0b3IoX19yZXMuc2Vjb25kKSk7CisgICAgICB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDIxNC4gc2V0OjpmaW5kKCkgbWlzc2luZyBjb25zdCBvdmVybG9hZAorICAgICAgc3RkOjpwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsKKwl0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciBfQmFzZV9pdGVyYXRvcjsKKwlzdGQ6OnBhaXI8X0Jhc2VfaXRlcmF0b3IsIF9CYXNlX2l0ZXJhdG9yPiBfX3JlcyA9CisgICAgICAgIF9CYXNlOjplcXVhbF9yYW5nZShfX3gpOworCXJldHVybiBzdGQ6Om1ha2VfcGFpcihjb25zdF9pdGVyYXRvcihfX3Jlcy5maXJzdCksCisJCQkgICAgICBjb25zdF9pdGVyYXRvcihfX3Jlcy5zZWNvbmQpKTsKKyAgICAgIH0KKworICAgICAgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgY29uc3QgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KKworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID09IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBtdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBtdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSAhPSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBtdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpIDwgX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpIDw9IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBtdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBtdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA+PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBtdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID4gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgdm9pZAorICAgIHN3YXAobXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3gsCisJIG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5zd2FwKF9feSk7IH0KKworfSAvLyBuYW1lc3BhY2UgX19wcm9maWxlCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Byb2ZpbGUvc2V0IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL3NldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTYwM2E4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL3NldApAQCAtMCwwICsxLDQxIEBACisvLyBQcm9maWxpbmcgc2V0L211bHRpc2V0IGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorLy8gVVNBLgorCisvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworLyoqIEBmaWxlIHByb2ZpbGUvc2V0CisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIHByb2ZpbGUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfU0VUCisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfU0VUIDEKKworI2luY2x1ZGUgPHNldD4KKyNpbmNsdWRlIDxwcm9maWxlL3NldC5oPgorI2luY2x1ZGUgPHByb2ZpbGUvbXVsdGlzZXQuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Byb2ZpbGUvc2V0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Byb2ZpbGUvc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJlMzU3MwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcHJvZmlsZS9zZXQuaApAQCAtMCwwICsxLDM3NiBAQAorLy8gUHJvZmlsaW5nIHNldCBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHByb2ZpbGUvc2V0LmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgcHJvZmlsZSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9TRVRfSAorI2RlZmluZSBfR0xJQkNYWF9QUk9GSUxFX1NFVF9IIDEKKworI2luY2x1ZGUgPHV0aWxpdHk+CisKK25hbWVzcGFjZSBzdGQgCit7CituYW1lc3BhY2UgX19wcm9maWxlCit7CisgIC8vLyBDbGFzcyBzdGQ6OnNldCB3cmFwcGVyIHdpdGggcGVyZm9ybWFuY2UgaW5zdHJ1bWVudGF0aW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSA9IHN0ZDo6bGVzczxfS2V5PiwKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yID0gc3RkOjphbGxvY2F0b3I8X0tleT4gPgorICAgIGNsYXNzIHNldAorICAgIDogcHVibGljIF9HTElCQ1hYX1NURF9EOjpzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2NhdG9yPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0dMSUJDWFhfU1REX0Q6OnNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4gX0Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICAvLyB0eXBlczoKKyAgICAgIHR5cGVkZWYgX0tleQkJCQkgICAga2V5X3R5cGU7CisgICAgICB0eXBlZGVmIF9LZXkJCQkJICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9Db21wYXJlCQkJCSAgICBrZXlfY29tcGFyZTsKKyAgICAgIHR5cGVkZWYgX0NvbXBhcmUJCQkJICAgIHZhbHVlX2NvbXBhcmU7CisgICAgICB0eXBlZGVmIF9BbGxvY2F0b3IJCQkgICAgYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpyZWZlcmVuY2UgICAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfcmVmZXJlbmNlICAgICAgIGNvbnN0X3JlZmVyZW5jZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgICAgICAgICAgICAgICBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yICAgICAgICAgY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpyZXZlcnNlX2l0ZXJhdG9yICAgICAgIHJldmVyc2VfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSAgICAgICAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpkaWZmZXJlbmNlX3R5cGUgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cG9pbnRlciAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9wb2ludGVyICAgICAgICAgY29uc3RfcG9pbnRlcjsKKworICAgICAgLy8gMjMuMy4zLjEgY29uc3RydWN0L2NvcHkvZGVzdHJveToKKyAgICAgIGV4cGxpY2l0IHNldChjb25zdCBfQ29tcGFyZSYgX19jb21wID0gX0NvbXBhcmUoKSwKKwkJICAgY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorICAgICAgOiBfQmFzZShfX2NvbXAsIF9fYSkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBzZXQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCSAgICBjb25zdCBfQ29tcGFyZSYgX19jb21wID0gX0NvbXBhcmUoKSwKKwkgICAgY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorCTogX0Jhc2UoX19maXJzdCwgX19sYXN0LCBfX2NvbXAsIF9fYSkgeyB9CisKKyAgICAgIHNldChjb25zdCBzZXQmIF9feCkKKyAgICAgIDogX0Jhc2UoX194KSB7IH0KKworICAgICAgc2V0KGNvbnN0IF9CYXNlJiBfX3gpCisgICAgICA6IF9CYXNlKF9feCkgeyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgc2V0KHNldCYmIF9feCkKKyAgICAgIDogX0Jhc2Uoc3RkOjpmb3J3YXJkPHNldD4oX194KSkKKyAgICAgIHsgfQorCisgICAgICBzZXQoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJICBjb25zdCBfQ29tcGFyZSYgX19jb21wID0gX0NvbXBhcmUoKSwKKwkgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2wsIF9fY29tcCwgX19hKSB7IH0KKyNlbmRpZgorCisgICAgICB+c2V0KCkgeyB9CisKKyAgICAgIHNldCYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBzZXQmIF9feCkKKyAgICAgIHsKKwkqc3RhdGljX2Nhc3Q8X0Jhc2UqPih0aGlzKSA9IF9feDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgc2V0JgorICAgICAgb3BlcmF0b3I9KHNldCYmIF9feCkKKyAgICAgIHsKKwkvLyBOQjogRFIgMTIwNC4KKwkvLyBOQjogRFIgNjc1LgorCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+c3dhcChfX3gpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgc2V0JgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+aW5zZXJ0KF9fbCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIHVzaW5nIF9CYXNlOjpnZXRfYWxsb2NhdG9yOworCisgICAgICAvLyBpdGVyYXRvcnM6CisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCkpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oKSk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmVuZCgpKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorI2VuZGlmCisKKyAgICAgIC8vIGNhcGFjaXR5OgorICAgICAgdXNpbmcgX0Jhc2U6OmVtcHR5OworICAgICAgdXNpbmcgX0Jhc2U6OnNpemU7CisgICAgICB1c2luZyBfQmFzZTo6bWF4X3NpemU7CisKKyAgICAgIC8vIG1vZGlmaWVyczoKKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgX0Jhc2VfaXRlcmF0b3I7CisJc3RkOjpwYWlyPF9CYXNlX2l0ZXJhdG9yLCBib29sPiBfX3JlcyA9IF9CYXNlOjppbnNlcnQoX194KTsKKwlyZXR1cm4gc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPihpdGVyYXRvcihfX3Jlcy5maXJzdCksCisJCQkJCSBfX3Jlcy5zZWNvbmQpOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsKKwlyZXR1cm4gaXRlcmF0b3IoX0Jhc2U6Omluc2VydChfX3Bvc2l0aW9uLCBfX3gpKTsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICAgIHsKKwkgIF9CYXNlOjppbnNlcnQoX19maXJzdCwgX19sYXN0KTsKKwl9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeyBfQmFzZTo6aW5zZXJ0KF9fbCk7IH0KKyNlbmRpZgorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeyByZXR1cm4gX0Jhc2U6OmVyYXNlKF9fcG9zaXRpb24pOyB9CisjZWxzZQorICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICAgIHsgX0Jhc2U6OmVyYXNlKF9fcG9zaXRpb24pOyB9CisjZW5kaWYKKworICAgICAgc2l6ZV90eXBlCisgICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeworCWl0ZXJhdG9yIF9fdmljdGltID0gZmluZChfX3gpOworCWlmIChfX3ZpY3RpbSA9PSBlbmQoKSkKKyAgICAgICAgICByZXR1cm4gMDsKKwllbHNlCisgICAgICAgIHsKKwkgIF9CYXNlOjplcmFzZShfX3ZpY3RpbSk7CisJICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCisgICAgICB7CisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDE1MS4gY2FuJ3QgY3VycmVudGx5IGNsZWFyKCkgZW1wdHkgY29udGFpbmVyCisJd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQorCSAgdGhpcy0+ZXJhc2UoX19maXJzdCsrKTsKKwlyZXR1cm4gX19sYXN0OworICAgICAgfQorI2Vsc2UKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwkvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJLy8gMTUxLiBjYW4ndCBjdXJyZW50bHkgY2xlYXIoKSBlbXB0eSBjb250YWluZXIKKwl3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCisJICB0aGlzLT5lcmFzZShfX2ZpcnN0KyspOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoc2V0JiBfX3gpCisgICAgICB7CisJX0Jhc2U6OnN3YXAoX194KTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKQorICAgICAgeyB0aGlzLT5lcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KKworICAgICAgLy8gb2JzZXJ2ZXJzOgorICAgICAgdXNpbmcgX0Jhc2U6OmtleV9jb21wOworICAgICAgdXNpbmcgX0Jhc2U6OnZhbHVlX2NvbXA7CisKKyAgICAgIC8vIHNldCBvcGVyYXRpb25zOgorICAgICAgaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpmaW5kKF9feCkpOyB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDIxNC4gc2V0OjpmaW5kKCkgbWlzc2luZyBjb25zdCBvdmVybG9hZAorICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpmaW5kKF9feCkpOyB9CisKKyAgICAgIHVzaW5nIF9CYXNlOjpjb3VudDsKKworICAgICAgaXRlcmF0b3IKKyAgICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6bG93ZXJfYm91bmQoX194KSk7IH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMjE0LiBzZXQ6OmZpbmQoKSBtaXNzaW5nIGNvbnN0IG92ZXJsb2FkCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpsb3dlcl9ib3VuZChfX3gpKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjp1cHBlcl9ib3VuZChfX3gpKTsgfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyMTQuIHNldDo6ZmluZCgpIG1pc3NpbmcgY29uc3Qgb3ZlcmxvYWQKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OnVwcGVyX2JvdW5kKF9feCkpOyB9CisKKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvcixpdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgX0Jhc2VfaXRlcmF0b3I7CisJc3RkOjpwYWlyPF9CYXNlX2l0ZXJhdG9yLCBfQmFzZV9pdGVyYXRvcj4gX19yZXMgPQorICAgICAgICBfQmFzZTo6ZXF1YWxfcmFuZ2UoX194KTsKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoaXRlcmF0b3IoX19yZXMuZmlyc3QpLAorCQkJICAgICAgaXRlcmF0b3IoX19yZXMuc2Vjb25kKSk7CisgICAgICB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDIxNC4gc2V0OjpmaW5kKCkgbWlzc2luZyBjb25zdCBvdmVybG9hZAorICAgICAgc3RkOjpwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsKKwl0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciBfQmFzZV9pdGVyYXRvcjsKKwlzdGQ6OnBhaXI8X0Jhc2VfaXRlcmF0b3IsIF9CYXNlX2l0ZXJhdG9yPiBfX3JlcyA9CisgICAgICAgIF9CYXNlOjplcXVhbF9yYW5nZShfX3gpOworCXJldHVybiBzdGQ6Om1ha2VfcGFpcihjb25zdF9pdGVyYXRvcihfX3Jlcy5maXJzdCksCisJCQkgICAgICBjb25zdF9pdGVyYXRvcihfX3Jlcy5zZWNvbmQpKTsKKyAgICAgIH0KKworICAgICAgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgY29uc3QgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KKworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPT0gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgIT0gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgY29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpIDwgX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPD0gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPj0gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgY29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID4gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgdm9pZAorICAgIHN3YXAoc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX194LAorCSBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3kpCisgICAgeyByZXR1cm4gX194LnN3YXAoX195KTsgfQorCit9IC8vIG5hbWVzcGFjZSBfX3Byb2ZpbGUKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcHJvZmlsZS91bm9yZGVyZWRfbWFwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL3Vub3JkZXJlZF9tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU4MzJjOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcHJvZmlsZS91bm9yZGVyZWRfbWFwCkBAIC0wLDAgKzEsNTE4IEBACisvLyBQcm9maWxpbmcgdW5vcmRlcmVkX21hcC91bm9yZGVyZWRfbXVsdGltYXAgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCisvLyBVU0EuCisKKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCisvKiogQGZpbGUgcHJvZmlsZS91bm9yZGVyZWRfbWFwCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIHByb2ZpbGUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfVU5PUkRFUkVEX01BUAorI2RlZmluZSBfR0xJQkNYWF9QUk9GSUxFX1VOT1JERVJFRF9NQVAgMQorCisjaWZuZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisjIGluY2x1ZGUgPGJpdHMvYysrMHhfd2FybmluZy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKworI2luY2x1ZGUgPHByb2ZpbGUvYmFzZS5oPgorCisjZGVmaW5lIF9HTElCQ1hYX0JBU0UgdW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPgorI2RlZmluZSBfR0xJQkNYWF9TVERfQkFTRSBfR0xJQkNYWF9TVERfUFI6Ol9HTElCQ1hYX0JBU0UKKworbmFtZXNwYWNlIHN0ZAoreworbmFtZXNwYWNlIF9fcHJvZmlsZQoreworICAvLy8gQ2xhc3Mgc3RkOjp1bm9yZGVyZWRfbWFwIHdyYXBwZXIgd2l0aCBwZXJmb3JtYW5jZSBpbnN0cnVtZW50YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfSGFzaCAgPSBzdGQ6Omhhc2g8X0tleT4sCisJICAgdHlwZW5hbWUgX1ByZWQgPSBzdGQ6OmVxdWFsX3RvPF9LZXk+LAorCSAgIHR5cGVuYW1lIF9BbGxvYyA9ICBzdGQ6OmFsbG9jYXRvcjxfS2V5PiA+CisgICAgY2xhc3MgdW5vcmRlcmVkX21hcAorICAgIDogcHVibGljIF9HTElCQ1hYX1NURF9CQVNFCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfR0xJQkNYWF9TVERfQkFTRSBfQmFzZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpoYXNoZXIgICAgICAgICAgaGFzaGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6a2V5X2VxdWFsICAgICAgIGtleV9lcXVhbDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlICBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmtleV90eXBlICAgICAgICBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnJlZmVyZW5jZSAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6bWFwcGVkX3R5cGUgICAgICBtYXBwZWRfdHlwZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKworICAgICAgZXhwbGljaXQKKyAgICAgIHVub3JkZXJlZF9tYXAoc2l6ZV90eXBlIF9fbiA9IDEwLAorCQkgICAgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCSAgICBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCSAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19uLCBfX2hmLCBfX2VxbCwgX19hKQorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfaGFzaHRhYmxlX2NvbnN0cnVjdCh0aGlzLCBfQmFzZTo6YnVja2V0X2NvdW50KCkpOworICAgICAgICBfX3Byb2ZjeHhfaGFzaHRhYmxlX2NvbnN0cnVjdDIodGhpcyk7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB1bm9yZGVyZWRfbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLAorICAgICAgICAgICAgICBzaXplX3R5cGUgX19uID0gMTAsCisgICAgICAgICAgICAgIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLAorICAgICAgICAgICAgICBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisgICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2YsIF9fbCwgX19uLCBfX2hmLCBfX2VxbCwgX19hKQorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfaGFzaHRhYmxlX2NvbnN0cnVjdCh0aGlzLCBfQmFzZTo6YnVja2V0X2NvdW50KCkpOworICAgICAgICBfX3Byb2ZjeHhfaGFzaHRhYmxlX2NvbnN0cnVjdDIodGhpcyk7CisgICAgICB9CisKKyAgICAgIHVub3JkZXJlZF9tYXAoY29uc3QgX0Jhc2UmIF9feCkKKyAgICAgIDogX0Jhc2UoX194KSAKKyAgICAgIHsgCisgICAgICAgIF9fcHJvZmN4eF9oYXNodGFibGVfY29uc3RydWN0KHRoaXMsIF9CYXNlOjpidWNrZXRfY291bnQoKSk7CisgICAgICAgIF9fcHJvZmN4eF9oYXNodGFibGVfY29uc3RydWN0Mih0aGlzKTsKKyAgICAgIH0KKworICAgICAgdW5vcmRlcmVkX21hcCh1bm9yZGVyZWRfbWFwJiYgX194KQorICAgICAgOiBfQmFzZShzdGQ6OmZvcndhcmQ8X0Jhc2U+KF9feCkpIAorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfaGFzaHRhYmxlX2NvbnN0cnVjdCh0aGlzLCBfQmFzZTo6YnVja2V0X2NvdW50KCkpOworICAgICAgICBfX3Byb2ZjeHhfaGFzaHRhYmxlX2NvbnN0cnVjdDIodGhpcyk7CisgICAgICB9CisKKyAgICAgIHVub3JkZXJlZF9tYXAoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJCSAgICBzaXplX3R5cGUgX19uID0gMTAsCisJCSAgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2wsIF9fbiwgX19oZiwgX19lcWwsIF9fYSkgeyB9CisKKyAgICAgIHVub3JkZXJlZF9tYXAmCisgICAgICBvcGVyYXRvcj0oY29uc3QgdW5vcmRlcmVkX21hcCYgX194KQorICAgICAgeworCSpzdGF0aWNfY2FzdDxfQmFzZSo+KHRoaXMpID0gX194OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgdW5vcmRlcmVkX21hcCYKKyAgICAgIG9wZXJhdG9yPSh1bm9yZGVyZWRfbWFwJiYgX194KQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorCS8vIE5COiBEUiA2NzUuCisJdGhpcy0+Y2xlYXIoKTsKKwl0aGlzLT5zd2FwKF9feCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB1bm9yZGVyZWRfbWFwJgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+aW5zZXJ0KF9fbCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB+dW5vcmRlcmVkX21hcCgpCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF9oYXNodGFibGVfZGVzdHJ1Y3QodGhpcywgX0Jhc2U6OmJ1Y2tldF9jb3VudCgpLAorCQkJCSAgICAgX0Jhc2U6OnNpemUoKSk7CisgICAgICAgIF9NX3Byb2ZpbGVfZGVzdHJ1Y3QoKTsKKyAgICAgIH0KKworICAgICAgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgY29uc3QgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KKworCisgICAgICB2b2lkCisgICAgICBjbGVhcigpCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF9oYXNodGFibGVfZGVzdHJ1Y3QodGhpcywgX0Jhc2U6OmJ1Y2tldF9jb3VudCgpLAorCQkJCSAgICAgX0Jhc2U6OnNpemUoKSk7CisgICAgICAgIF9NX3Byb2ZpbGVfZGVzdHJ1Y3QoKTsKKyAgICAgICAgX0Jhc2U6OmNsZWFyKCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeyAKKyAgICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBfQmFzZTo6YnVja2V0X2NvdW50KCk7IAorICAgICAgICBfQmFzZTo6aW5zZXJ0KF9fbCk7CisgICAgICAgIF9NX3Byb2ZpbGVfcmVzaXplKF9fb2xkX3NpemUsIF9CYXNlOjpidWNrZXRfY291bnQoKSk7IAorICAgICAgfQorCisgICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+CisgICAgICBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCisgICAgICB7CisgICAgICAgIHNpemVfdHlwZSBfX29sZF9zaXplID0gIF9CYXNlOjpidWNrZXRfY291bnQoKTsKKyAgICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPiBfX3JlcyA9IF9CYXNlOjppbnNlcnQoX19vYmopOworICAgICAgICBfTV9wcm9maWxlX3Jlc2l6ZShfX29sZF9zaXplLCBfQmFzZTo6YnVja2V0X2NvdW50KCkpOyAKKyAgICAgICAgcmV0dXJuIF9fcmVzOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIF9faXRlciwgY29uc3QgdmFsdWVfdHlwZSYgX192KQorICAgICAgeyAKKyAgICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBfQmFzZTo6YnVja2V0X2NvdW50KCk7IAorICAgICAgICBpdGVyYXRvciBfX3JlcyA9IF9CYXNlOjppbnNlcnQoX19pdGVyLCBfX3YpOworICAgICAgICBfTV9wcm9maWxlX3Jlc2l6ZShfX29sZF9zaXplLCBfQmFzZTo6YnVja2V0X2NvdW50KCkpOyAKKyAgICAgICAgcmV0dXJuIF9fcmVzOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0KQorICAgICAgICB7CisJICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IF9CYXNlOjpidWNrZXRfY291bnQoKTsgCisJICBfQmFzZTo6aW5zZXJ0KF9fZmlyc3QsIF9fbGFzdCk7CisJICBfTV9wcm9maWxlX3Jlc2l6ZShfX29sZF9zaXplLCBfQmFzZTo6YnVja2V0X2NvdW50KCkpOyAKKwl9CisKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlKiBfX2ZpcnN0LCBjb25zdCB2YWx1ZV90eXBlKiBfX2xhc3QpCisgICAgICB7CisgICAgICAgIHNpemVfdHlwZSBfX29sZF9zaXplID0gX0Jhc2U6OmJ1Y2tldF9jb3VudCgpOyAKKyAgICAgICAgX0Jhc2U6Omluc2VydChfX2ZpcnN0LCBfX2xhc3QpOworICAgICAgICBfTV9wcm9maWxlX3Jlc2l6ZShfX29sZF9zaXplLCBfQmFzZTo6YnVja2V0X2NvdW50KCkpOyAKKyAgICAgIH0KKyAgICAgCisgICAgICAvLyBvcGVyYXRvciBbXQorICAgICAgbWFwcGVkX3R5cGUmCisgICAgICBvcGVyYXRvcltdKGNvbnN0IF9LZXkmIF9rKQorICAgICAgeworICAgICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9ICBfQmFzZTo6YnVja2V0X2NvdW50KCk7CisgICAgICAgIG1hcHBlZF90eXBlJiBfX3JlcyA9IF9NX2Jhc2UoKVtfa107CisgICAgICAgIHNpemVfdHlwZSBfX25ld19zaXplID0gIF9CYXNlOjpidWNrZXRfY291bnQoKTsKKyAgICAgICAgX01fcHJvZmlsZV9yZXNpemUoX19vbGRfc2l6ZSwgX0Jhc2U6OmJ1Y2tldF9jb3VudCgpKTsgCisgICAgICAgIHJldHVybiBfX3JlczsKKyAgICAgIH0gICAKKworICAgICAgdm9pZAorICAgICAgc3dhcCh1bm9yZGVyZWRfbWFwJiBfX3gpCisgICAgICB7IF9CYXNlOjpzd2FwKF9feCk7IH0KKworICAgICAgdm9pZCByZWhhc2goc2l6ZV90eXBlIF9fbikKKyAgICAgIHsKKyAgICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSAgX0Jhc2U6OmJ1Y2tldF9jb3VudCgpOworICAgICAgICBfQmFzZTo6cmVoYXNoKF9fbik7CisgICAgICAgIF9NX3Byb2ZpbGVfcmVzaXplKF9fb2xkX3NpemUsIF9CYXNlOjpidWNrZXRfY291bnQoKSk7IAorICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHZvaWQKKyAgICAgIF9NX3Byb2ZpbGVfcmVzaXplKHNpemVfdHlwZSBfX29sZF9zaXplLCBzaXplX3R5cGUgX19uZXdfc2l6ZSkKKyAgICAgIHsKKyAgICAgICAgaWYgKF9fb2xkX3NpemUgIT0gX19uZXdfc2l6ZSkKKwkgIF9fcHJvZmN4eF9oYXNodGFibGVfcmVzaXplKHRoaXMsIF9fb2xkX3NpemUsIF9fbmV3X3NpemUpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9wcm9maWxlX2Rlc3RydWN0KCkKKyAgICAgIHsKKyAgICAgICAgc2l6ZV90eXBlIF9faG9wcyA9IDAsIF9fbGMgPSAwLCBfX2NoYWluID0gMDsKKyAgICAgICAgZm9yIChpdGVyYXRvciBfX2l0ID0gX01fYmFzZSgpLmJlZ2luKCk7IF9faXQgIT0gX01fYmFzZSgpLmVuZCgpOworCSAgICAgKytfX2l0KQorCSAgeworCSAgICB3aGlsZSAoX19pdC5fTV9jdXJfbm9kZS0+X01fbmV4dCkKKwkgICAgICB7CisJCSsrX19jaGFpbjsKKwkJKytfX2l0OworCSAgICAgIH0KKwkgICAgaWYgKF9fY2hhaW4pCisJICAgICAgeworCQkrK19fY2hhaW47CisJCV9fbGMgPSBfX2xjID4gX19jaGFpbiA/IF9fbGMgOiBfX2NoYWluOyAgCisJCV9faG9wcyArPSBfX2NoYWluICogKF9fY2hhaW4gLSAxKSAvIDI7CisJCV9fY2hhaW4gPSAwOworCSAgICAgIH0KKwkgIH0KKyAgICAgICAgX19wcm9mY3h4X2hhc2h0YWJsZV9kZXN0cnVjdDIodGhpcywgX19sYywgIF9CYXNlOjpzaXplKCksIF9faG9wcyk7IAorICAgICAgfQorICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9IYXNoLAorCSAgIHR5cGVuYW1lIF9QcmVkLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHVub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgdW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgX194LnN3YXAoX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0hhc2gsCisJICAgdHlwZW5hbWUgX1ByZWQsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgdW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCB1bm9yZGVyZWRfbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX2VxdWFsKF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9IYXNoLAorCSAgIHR5cGVuYW1lIF9QcmVkLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHVub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgdW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworI3VuZGVmIF9HTElCQ1hYX0JBU0UKKyN1bmRlZiBfR0xJQkNYWF9TVERfQkFTRQorI2RlZmluZSBfR0xJQkNYWF9CQVNFIHVub3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPgorI2RlZmluZSBfR0xJQkNYWF9TVERfQkFTRSBfR0xJQkNYWF9TVERfUFI6Ol9HTElCQ1hYX0JBU0UKKworICAvLy8gQ2xhc3Mgc3RkOjp1bm9yZGVyZWRfbXVsdGltYXAgd3JhcHBlciB3aXRoIHBlcmZvcm1hbmNlIGluc3RydW1lbnRhdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLAorCSAgIHR5cGVuYW1lIF9IYXNoICA9IHN0ZDo6aGFzaDxfS2V5PiwKKwkgICB0eXBlbmFtZSBfUHJlZCA9IHN0ZDo6ZXF1YWxfdG88X0tleT4sCisJICAgdHlwZW5hbWUgX0FsbG9jID0gIHN0ZDo6YWxsb2NhdG9yPF9LZXk+ID4KKyAgICBjbGFzcyB1bm9yZGVyZWRfbXVsdGltYXAKKyAgICA6IHB1YmxpYyBfR0xJQkNYWF9TVERfQkFTRQorICAgIHsgICAgICAKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0dMSUJDWFhfU1REX0JBU0UgX0Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aGFzaGVyICAgICAgICAgIGhhc2hlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmtleV9lcXVhbCAgICAgICBrZXlfZXF1YWw7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSAgYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjprZXlfdHlwZSAgICAgICAga2V5X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpyZWZlcmVuY2UgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKworICAgICAgZXhwbGljaXQKKyAgICAgIHVub3JkZXJlZF9tdWx0aW1hcChzaXplX3R5cGUgX19uID0gMTAsCisJCSAgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF9oYXNodGFibGVfY29uc3RydWN0KHRoaXMsIF9CYXNlOjpidWNrZXRfY291bnQoKSk7CisgICAgICB9CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdW5vcmRlcmVkX211bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLAorICAgICAgICAgICAgICBzaXplX3R5cGUgX19uID0gMTAsCisgICAgICAgICAgICAgIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLAorICAgICAgICAgICAgICBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisgICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2YsIF9fbCwgX19uLCBfX2hmLCBfX2VxbCwgX19hKQorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfaGFzaHRhYmxlX2NvbnN0cnVjdCh0aGlzLCBfQmFzZTo6YnVja2V0X2NvdW50KCkpOworICAgICAgfQorCisgICAgICB1bm9yZGVyZWRfbXVsdGltYXAoY29uc3QgX0Jhc2UmIF9feCkKKyAgICAgIDogX0Jhc2UoX194KQorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfaGFzaHRhYmxlX2NvbnN0cnVjdCh0aGlzLCBfQmFzZTo6YnVja2V0X2NvdW50KCkpOworICAgICAgfQorCisgICAgICB1bm9yZGVyZWRfbXVsdGltYXAodW5vcmRlcmVkX211bHRpbWFwJiYgX194KQorICAgICAgOiBfQmFzZShzdGQ6OmZvcndhcmQ8X0Jhc2U+KF9feCkpCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF9oYXNodGFibGVfY29uc3RydWN0KHRoaXMsIF9CYXNlOjpidWNrZXRfY291bnQoKSk7CisgICAgICB9CisKKyAgICAgIHVub3JkZXJlZF9tdWx0aW1hcChpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCwKKwkJCSBzaXplX3R5cGUgX19uID0gMTAsCisJCQkgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCQkgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLAorCQkJIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2wsIF9fbiwgX19oZiwgX19lcWwsIF9fYSkgeyB9CisKKyAgICAgIHVub3JkZXJlZF9tdWx0aW1hcCYKKyAgICAgIG9wZXJhdG9yPShjb25zdCB1bm9yZGVyZWRfbXVsdGltYXAmIF9feCkKKyAgICAgIHsKKwkqc3RhdGljX2Nhc3Q8X0Jhc2UqPih0aGlzKSA9IF9feDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHVub3JkZXJlZF9tdWx0aW1hcCYKKyAgICAgIG9wZXJhdG9yPSh1bm9yZGVyZWRfbXVsdGltYXAmJiBfX3gpCisgICAgICB7CisJLy8gTkI6IERSIDEyMDQuCisJLy8gTkI6IERSIDY3NS4KKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPnN3YXAoX194KTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHVub3JkZXJlZF9tdWx0aW1hcCYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPmluc2VydChfX2wpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgfnVub3JkZXJlZF9tdWx0aW1hcCgpCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF9oYXNodGFibGVfZGVzdHJ1Y3QodGhpcywgX0Jhc2U6OmJ1Y2tldF9jb3VudCgpLCAKKwkJCQkgICAgIF9CYXNlOjpzaXplKCkpOworICAgICAgICBfTV9wcm9maWxlX2Rlc3RydWN0KCk7CisgICAgICB9CisKKyAgICAgIF9CYXNlJgorICAgICAgX01fYmFzZSgpICAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIGNvbnN0IF9CYXNlJgorICAgICAgX01fYmFzZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisKKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKQorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfaGFzaHRhYmxlX2Rlc3RydWN0KHRoaXMsIF9CYXNlOjpidWNrZXRfY291bnQoKSwgCisJCQkJICAgICBfQmFzZTo6c2l6ZSgpKTsKKyAgICAgICAgX01fcHJvZmlsZV9kZXN0cnVjdCgpOworICAgICAgICBfQmFzZTo6Y2xlYXIoKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7IAorICAgICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9ICBfQmFzZTo6YnVja2V0X2NvdW50KCk7CisgICAgICAgIF9CYXNlOjppbnNlcnQoX19sKTsKKyAgICAgICAgX01fcHJvZmlsZV9yZXNpemUoX19vbGRfc2l6ZSwgX0Jhc2U6OmJ1Y2tldF9jb3VudCgpKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICAgIHsKKyAgICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSAgX0Jhc2U6OmJ1Y2tldF9jb3VudCgpOworICAgICAgICBpdGVyYXRvciBfX3JlcyA9IF9CYXNlOjppbnNlcnQoX19vYmopOworICAgICAgICBfTV9wcm9maWxlX3Jlc2l6ZShfX29sZF9zaXplLCBfQmFzZTo6YnVja2V0X2NvdW50KCkpOyAKKyAgICAgICAgcmV0dXJuIF9fcmVzOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIF9faXRlciwgY29uc3QgdmFsdWVfdHlwZSYgX192KQorICAgICAgeyAKKyAgICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBfQmFzZTo6YnVja2V0X2NvdW50KCk7IAorICAgICAgICBpdGVyYXRvciBfX3JlcyA9X0Jhc2U6Omluc2VydChfX2l0ZXIsIF9fdik7CisgICAgICAgIF9NX3Byb2ZpbGVfcmVzaXplKF9fb2xkX3NpemUsIF9CYXNlOjpidWNrZXRfY291bnQoKSk7IAorICAgICAgICByZXR1cm4gX19yZXM7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCisgICAgICAgIHsKKwkgIHNpemVfdHlwZSBfX29sZF9zaXplID0gX0Jhc2U6OmJ1Y2tldF9jb3VudCgpOyAKKwkgIF9CYXNlOjppbnNlcnQoX19maXJzdCwgX19sYXN0KTsKKwkgIF9NX3Byb2ZpbGVfcmVzaXplKF9fb2xkX3NpemUsIF9CYXNlOjpidWNrZXRfY291bnQoKSk7IAorCX0KKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUqIF9fZmlyc3QsIGNvbnN0IHZhbHVlX3R5cGUqIF9fbGFzdCkKKyAgICAgIHsKKyAgICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBfQmFzZTo6YnVja2V0X2NvdW50KCk7IAorICAgICAgICBfQmFzZTo6aW5zZXJ0KF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICAgIF9NX3Byb2ZpbGVfcmVzaXplKF9fb2xkX3NpemUsIF9CYXNlOjpidWNrZXRfY291bnQoKSk7IAorICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKHVub3JkZXJlZF9tdWx0aW1hcCYgX194KQorICAgICAgeyBfQmFzZTo6c3dhcChfX3gpOyB9CisKKyAgICAgIHZvaWQgcmVoYXNoKHNpemVfdHlwZSBfX24pCisgICAgICB7CisgICAgICAgIHNpemVfdHlwZSBfX29sZF9zaXplID0gIF9CYXNlOjpidWNrZXRfY291bnQoKTsKKyAgICAgICAgX0Jhc2U6OnJlaGFzaChfX24pOworICAgICAgICBfTV9wcm9maWxlX3Jlc2l6ZShfX29sZF9zaXplLCBfQmFzZTo6YnVja2V0X2NvdW50KCkpOyAKKyAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICB2b2lkCisgICAgICBfTV9wcm9maWxlX3Jlc2l6ZShzaXplX3R5cGUgX19vbGRfc2l6ZSwgc2l6ZV90eXBlIF9fbmV3X3NpemUpCisgICAgICB7CisgICAgICAgIGlmIChfX29sZF9zaXplICE9IF9fbmV3X3NpemUpCisgICAgICAgICAgX19wcm9mY3h4X2hhc2h0YWJsZV9yZXNpemUodGhpcywgX19vbGRfc2l6ZSwgX19uZXdfc2l6ZSk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3Byb2ZpbGVfZGVzdHJ1Y3QoKQorICAgICAgeworICAgICAgICBzaXplX3R5cGUgX19ob3BzID0gMCwgX19sYyA9IDAsIF9fY2hhaW4gPSAwOworICAgICAgICBmb3IgKGl0ZXJhdG9yIF9faXQgPSBfTV9iYXNlKCkuYmVnaW4oKTsgX19pdCAhPSBfTV9iYXNlKCkuZW5kKCk7CisJICAgICArK19faXQpCisJICB7CisJICAgIHdoaWxlIChfX2l0Ll9NX2N1cl9ub2RlLT5fTV9uZXh0KQorCSAgICAgIHsKKwkJKytfX2NoYWluOworCQkrK19faXQ7CisJICAgICAgfQorCSAgICBpZiAoX19jaGFpbikKKwkgICAgICB7CisJCSsrX19jaGFpbjsKKwkJX19sYyA9IF9fbGMgPiBfX2NoYWluID8gX19sYyA6IF9fY2hhaW47CisJCV9faG9wcyArPSBfX2NoYWluICogKF9fY2hhaW4gLSAxKSAvIDI7CisJCV9fY2hhaW4gPSAwOworCSAgICAgIH0KKwkgIH0KKyAgICAgICAgX19wcm9mY3h4X2hhc2h0YWJsZV9kZXN0cnVjdDIodGhpcywgX19sYywgIF9CYXNlOjpzaXplKCksIF9faG9wcyk7CisgICAgICB9CisKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0hhc2gsCisJICAgdHlwZW5hbWUgX1ByZWQsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAodW5vcmRlcmVkX211bHRpbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJIHVub3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgX194LnN3YXAoX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0hhc2gsCisJICAgdHlwZW5hbWUgX1ByZWQsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgdW5vcmRlcmVkX211bHRpbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IHVub3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5fTV9lcXVhbChfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSGFzaCwKKwkgICB0eXBlbmFtZSBfUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCB1bm9yZGVyZWRfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgdW5vcmRlcmVkX211bHRpbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQorCit9IC8vIG5hbWVzcGFjZSBfX3Byb2ZpbGUKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjdW5kZWYgX0dMSUJDWFhfQkFTRQorI3VuZGVmIF9HTElCQ1hYX1NURF9CQVNFCisKKyNlbmRpZiAvLyBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcHJvZmlsZS91bm9yZGVyZWRfc2V0IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL3Vub3JkZXJlZF9zZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUzMTU3YwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcHJvZmlsZS91bm9yZGVyZWRfc2V0CkBAIC0wLDAgKzEsNTA2IEBACisvLyBQcm9maWxpbmcgdW5vcmRlcmVkX3NldC91bm9yZGVyZWRfbXVsdGlzZXQgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCisvLyBVU0EuCisKKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCisvKiogQGZpbGUgcHJvZmlsZS91bm9yZGVyZWRfc2V0CisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIHByb2ZpbGUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfVU5PUkRFUkVEX1NFVAorI2RlZmluZSBfR0xJQkNYWF9QUk9GSUxFX1VOT1JERVJFRF9TRVQgMQorCisjaWZuZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisjIGluY2x1ZGUgPGJpdHMvYysrMHhfd2FybmluZy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgPHByb2ZpbGUvYmFzZS5oPgorCisjZGVmaW5lIF9HTElCQ1hYX0JBU0UgdW5vcmRlcmVkX3NldDxfS2V5LCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4KKyNkZWZpbmUgX0dMSUJDWFhfU1REX0JBU0UgX0dMSUJDWFhfU1REX1BSOjpfR0xJQkNYWF9CQVNFCisKK25hbWVzcGFjZSBzdGQKK3sKK25hbWVzcGFjZSBfX3Byb2ZpbGUKK3sKKyAgLyoqIEBicmllZiBVbm9yZGVyZWRfc2V0IHdyYXBwZXIgd2l0aCBwZXJmb3JtYW5jZSBpbnN0cnVtZW50YXRpb24uICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCAKKwkgICB0eXBlbmFtZSBfSGFzaCAgPSBzdGQ6Omhhc2g8X0tleT4sCisJICAgdHlwZW5hbWUgX1ByZWQgPSBzdGQ6OmVxdWFsX3RvPF9LZXk+LAorCSAgIHR5cGVuYW1lIF9BbGxvYyA9ICBzdGQ6OmFsbG9jYXRvcjxfS2V5PiA+CisgICAgY2xhc3MgdW5vcmRlcmVkX3NldAorICAgIDogcHVibGljIF9HTElCQ1hYX1NURF9CQVNFCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfR0xJQkNYWF9TVERfQkFTRSBfQmFzZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpoYXNoZXIgICAgICAgICAgaGFzaGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6a2V5X2VxdWFsICAgICAgIGtleV9lcXVhbDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlICBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmtleV90eXBlICAgICAgICBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnJlZmVyZW5jZSAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworCisgICAgICBleHBsaWNpdAorICAgICAgdW5vcmRlcmVkX3NldChzaXplX3R5cGUgX19uID0gMTAsCisJCSAgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF9oYXNodGFibGVfY29uc3RydWN0KHRoaXMsIF9CYXNlOjpidWNrZXRfY291bnQoKSk7CisgICAgICAgIF9fcHJvZmN4eF9oYXNodGFibGVfY29uc3RydWN0Mih0aGlzKTsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHVub3JkZXJlZF9zZXQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsCisgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24gPSAxMCwKKyAgICAgICAgICAgICAgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisgICAgICAgICAgICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKyAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fZiwgX19sLCBfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF9oYXNodGFibGVfY29uc3RydWN0KHRoaXMsIF9CYXNlOjpidWNrZXRfY291bnQoKSk7CisgICAgICAgIF9fcHJvZmN4eF9oYXNodGFibGVfY29uc3RydWN0Mih0aGlzKTsKKyAgICAgIH0KKworICAgICAgdW5vcmRlcmVkX3NldChjb25zdCBfQmFzZSYgX194KQorICAgICAgOiBfQmFzZShfX3gpIAorICAgICAgeyAKKyAgICAgICAgX19wcm9mY3h4X2hhc2h0YWJsZV9jb25zdHJ1Y3QodGhpcywgX0Jhc2U6OmJ1Y2tldF9jb3VudCgpKTsKKyAgICAgICAgX19wcm9mY3h4X2hhc2h0YWJsZV9jb25zdHJ1Y3QyKHRoaXMpOworICAgICAgfQorCisgICAgICB1bm9yZGVyZWRfc2V0KHVub3JkZXJlZF9zZXQmJiBfX3gpCisgICAgICA6IF9CYXNlKHN0ZDo6Zm9yd2FyZDxfQmFzZT4oX194KSkgCisgICAgICB7IAorICAgICAgICBfX3Byb2ZjeHhfaGFzaHRhYmxlX2NvbnN0cnVjdCh0aGlzLCBfQmFzZTo6YnVja2V0X2NvdW50KCkpOworICAgICAgICBfX3Byb2ZjeHhfaGFzaHRhYmxlX2NvbnN0cnVjdDIodGhpcyk7CisgICAgICB9CisKKyAgICAgIHVub3JkZXJlZF9zZXQoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJCSAgICBzaXplX3R5cGUgX19uID0gMTAsCisJCSAgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2wsIF9fbiwgX19oZiwgX19lcWwsIF9fYSkgeyB9CisKKyAgICAgIHVub3JkZXJlZF9zZXQmCisgICAgICBvcGVyYXRvcj0oY29uc3QgdW5vcmRlcmVkX3NldCYgX194KQorICAgICAgeworCSpzdGF0aWNfY2FzdDxfQmFzZSo+KHRoaXMpID0gX194OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgdW5vcmRlcmVkX3NldCYKKyAgICAgIG9wZXJhdG9yPSh1bm9yZGVyZWRfc2V0JiYgX194KQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorCS8vIE5COiBEUiA2NzUuCisJdGhpcy0+Y2xlYXIoKTsKKwl0aGlzLT5zd2FwKF9feCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB1bm9yZGVyZWRfc2V0JgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+aW5zZXJ0KF9fbCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB+dW5vcmRlcmVkX3NldCgpCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF9oYXNodGFibGVfZGVzdHJ1Y3QodGhpcywgX0Jhc2U6OmJ1Y2tldF9jb3VudCgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmFzZTo6c2l6ZSgpKTsKKyAgICAgICAgX01fcHJvZmlsZV9kZXN0cnVjdCgpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKHVub3JkZXJlZF9zZXQmIF9feCkKKyAgICAgIHsKKyAgICAgICAgX0Jhc2U6OnN3YXAoX194KTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKQorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfaGFzaHRhYmxlX2Rlc3RydWN0KHRoaXMsIF9CYXNlOjpidWNrZXRfY291bnQoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jhc2U6OnNpemUoKSk7CisgICAgICAgIF9NX3Byb2ZpbGVfZGVzdHJ1Y3QoKTsKKyAgICAgICAgX0Jhc2U6OmNsZWFyKCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeyAKKyAgICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSAgX0Jhc2U6OmJ1Y2tldF9jb3VudCgpOworICAgICAgICBfQmFzZTo6aW5zZXJ0KF9fbCk7IAorICAgICAgICBfTV9wcm9maWxlX3Jlc2l6ZShfX29sZF9zaXplLCAgX0Jhc2U6OmJ1Y2tldF9jb3VudCgpKTsgCisgICAgICB9CisKKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICAgIHsKKyAgICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSAgX0Jhc2U6OmJ1Y2tldF9jb3VudCgpOworICAgICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+IF9fcmVzID0gX0Jhc2U6Omluc2VydChfX29iaik7CisgICAgICAgIF9NX3Byb2ZpbGVfcmVzaXplKF9fb2xkX3NpemUsICBfQmFzZTo6YnVja2V0X2NvdW50KCkpOyAKKyAgICAgICAgcmV0dXJuIF9fcmVzOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIF9faXRlciwgY29uc3QgdmFsdWVfdHlwZSYgX192KQorICAgICAgeyAKKyAgICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBfQmFzZTo6YnVja2V0X2NvdW50KCk7IAorICAgICAgICBpdGVyYXRvciBfX3JlcyA9IF9CYXNlOjppbnNlcnQoX19pdGVyLCBfX3YpOworICAgICAgICBfTV9wcm9maWxlX3Jlc2l6ZShfX29sZF9zaXplLCBfQmFzZTo6YnVja2V0X2NvdW50KCkpOyAKKyAgICAgICAgcmV0dXJuIF9fcmVzOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0KQorICAgICAgICB7CisJICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IF9CYXNlOjpidWNrZXRfY291bnQoKTsgCisJICBfQmFzZTo6aW5zZXJ0KF9fZmlyc3QsIF9fbGFzdCk7CisJICBfTV9wcm9maWxlX3Jlc2l6ZShfX29sZF9zaXplLCAgX0Jhc2U6OmJ1Y2tldF9jb3VudCgpKTsgCisJfQorCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSogX19maXJzdCwgY29uc3QgdmFsdWVfdHlwZSogX19sYXN0KQorICAgICAgeworICAgICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IF9CYXNlOjpidWNrZXRfY291bnQoKTsgCisgICAgICAgIF9CYXNlOjppbnNlcnQoX19maXJzdCwgX19sYXN0KTsKKyAgICAgICAgX01fcHJvZmlsZV9yZXNpemUoX19vbGRfc2l6ZSwgIF9CYXNlOjpidWNrZXRfY291bnQoKSk7IAorICAgICAgfQorICAgICAKKyAgICAgIHZvaWQgcmVoYXNoKHNpemVfdHlwZSBfX24pCisgICAgICB7CisgICAgICAgIHNpemVfdHlwZSBfX29sZF9zaXplID0gIF9CYXNlOjpidWNrZXRfY291bnQoKTsKKyAgICAgICAgX0Jhc2U6OnJlaGFzaChfX24pOworICAgICAgICBfTV9wcm9maWxlX3Jlc2l6ZShfX29sZF9zaXplLCAgX0Jhc2U6OmJ1Y2tldF9jb3VudCgpKTsgCisgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgY29uc3QgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgdm9pZAorICAgICAgX01fcHJvZmlsZV9yZXNpemUoc2l6ZV90eXBlIF9fb2xkX3NpemUsIHNpemVfdHlwZSBfX25ld19zaXplKQorICAgICAgeworICAgICAgICBpZiAoX19vbGRfc2l6ZSAhPSBfX25ld19zaXplKQorCSAgX19wcm9mY3h4X2hhc2h0YWJsZV9yZXNpemUodGhpcywgX19vbGRfc2l6ZSwgX19uZXdfc2l6ZSk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3Byb2ZpbGVfZGVzdHJ1Y3QoKQorICAgICAgeworICAgICAgICBzaXplX3R5cGUgX19ob3BzID0gMCwgX19sYyA9IDAsIF9fY2hhaW4gPSAwOworICAgICAgICBmb3IgKGl0ZXJhdG9yIF9faXQgPSBfTV9iYXNlKCkuYmVnaW4oKTsgX19pdCAhPSBfTV9iYXNlKCkuZW5kKCk7CisJICAgICArK19faXQpCisgICAgICAgIHsKKyAgICAgICAgICB3aGlsZSAoX19pdC5fTV9jdXJfbm9kZS0+X01fbmV4dCkKKwkgICAgeworCSAgICAgICsrX19jaGFpbjsKKwkgICAgICArK19faXQ7CisJICAgIH0KKworICAgICAgICAgIGlmIChfX2NoYWluKQorCSAgICB7CisJICAgICAgKytfX2NoYWluOworCSAgICAgIF9fbGMgPSBfX2xjID4gX19jaGFpbiA/IF9fbGMgOiBfX2NoYWluOworCSAgICAgIF9faG9wcyArPSBfX2NoYWluICogKF9fY2hhaW4gLSAxKSAvIDI7CisJICAgICAgX19jaGFpbiA9IDA7CisJICAgIH0KKyAgICAgICAgfQorICAgICAgICBfX3Byb2ZjeHhfaGFzaHRhYmxlX2Rlc3RydWN0Mih0aGlzLCBfX2xjLCAgX0Jhc2U6OnNpemUoKSwgX19ob3BzKTsKKyAgICAgIH0KKworICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcCh1bm9yZGVyZWRfc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJIHVub3JkZXJlZF9zZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCB1bm9yZGVyZWRfc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IHVub3JkZXJlZF9zZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBfX3guX01fZXF1YWwoX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZSwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9QcmVkLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHVub3JkZXJlZF9zZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgdW5vcmRlcmVkX3NldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworI3VuZGVmIF9HTElCQ1hYX0JBU0UKKyN1bmRlZiBfR0xJQkNYWF9TVERfQkFTRQorI2RlZmluZSBfR0xJQkNYWF9TVERfQkFTRSBfR0xJQkNYWF9TVERfUFI6Ol9HTElCQ1hYX0JBU0UKKyNkZWZpbmUgX0dMSUJDWFhfQkFTRSB1bm9yZGVyZWRfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4KKworICAvKiogQGJyaWVmIFVub3JkZXJlZF9tdWx0aXNldCB3cmFwcGVyIHdpdGggcGVyZm9ybWFuY2UgaW5zdHJ1bWVudGF0aW9uLiAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLAorICAgICAgIHR5cGVuYW1lIF9IYXNoICA9IHN0ZDo6aGFzaDxfVmFsdWU+LAorICAgICAgIHR5cGVuYW1lIF9QcmVkID0gc3RkOjplcXVhbF90bzxfVmFsdWU+LAorICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9ICBzdGQ6OmFsbG9jYXRvcjxfVmFsdWU+ID4KKyAgICBjbGFzcyB1bm9yZGVyZWRfbXVsdGlzZXQKKyAgICA6IHB1YmxpYyBfR0xJQkNYWF9TVERfQkFTRQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0dMSUJDWFhfU1REX0JBU0UgX0Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aGFzaGVyICAgICAgICAgIGhhc2hlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmtleV9lcXVhbCAgICAgICBrZXlfZXF1YWw7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSAgYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjprZXlfdHlwZSAgICAgICAga2V5X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpyZWZlcmVuY2UgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKworICAgICAgZXhwbGljaXQKKyAgICAgIHVub3JkZXJlZF9tdWx0aXNldChzaXplX3R5cGUgX19uID0gMTAsCisJCSAgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF9oYXNodGFibGVfY29uc3RydWN0KHRoaXMsIF9CYXNlOjpidWNrZXRfY291bnQoKSk7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB1bm9yZGVyZWRfbXVsdGlzZXQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsCisgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24gPSAxMCwKKyAgICAgICAgICAgICAgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisgICAgICAgICAgICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKyAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fZiwgX19sLCBfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF9oYXNodGFibGVfY29uc3RydWN0KHRoaXMsIF9CYXNlOjpidWNrZXRfY291bnQoKSk7CisgICAgICB9CisKKyAgICAgIHVub3JkZXJlZF9tdWx0aXNldChjb25zdCBfQmFzZSYgX194KQorICAgICAgOiBfQmFzZShfX3gpCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF9oYXNodGFibGVfY29uc3RydWN0KHRoaXMsIF9CYXNlOjpidWNrZXRfY291bnQoKSk7CisgICAgICB9CisKKyAgICAgIHVub3JkZXJlZF9tdWx0aXNldCh1bm9yZGVyZWRfbXVsdGlzZXQmJiBfX3gpCisgICAgICA6IF9CYXNlKHN0ZDo6Zm9yd2FyZDxfQmFzZT4oX194KSkKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X2hhc2h0YWJsZV9jb25zdHJ1Y3QodGhpcywgX0Jhc2U6OmJ1Y2tldF9jb3VudCgpKTsKKyAgICAgIH0KKworICAgICAgdW5vcmRlcmVkX211bHRpc2V0KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sLAorCQkJIHNpemVfdHlwZSBfX24gPSAxMCwKKwkJCSBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJCSBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCQkgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fbCwgX19uLCBfX2hmLCBfX2VxbCwgX19hKSB7IH0KKworICAgICAgdW5vcmRlcmVkX211bHRpc2V0JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHVub3JkZXJlZF9tdWx0aXNldCYgX194KQorICAgICAgeworCSpzdGF0aWNfY2FzdDxfQmFzZSo+KHRoaXMpID0gX194OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgdW5vcmRlcmVkX211bHRpc2V0JgorICAgICAgb3BlcmF0b3I9KHVub3JkZXJlZF9tdWx0aXNldCYmIF9feCkKKyAgICAgIHsKKwkvLyBOQjogRFIgMTIwNC4KKwkvLyBOQjogRFIgNjc1LgorCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+c3dhcChfX3gpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgdW5vcmRlcmVkX211bHRpc2V0JgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+aW5zZXJ0KF9fbCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB+dW5vcmRlcmVkX211bHRpc2V0KCkKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X2hhc2h0YWJsZV9kZXN0cnVjdCh0aGlzLCBfQmFzZTo6YnVja2V0X2NvdW50KCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CYXNlOjpzaXplKCkpOworICAgICAgICBfTV9wcm9maWxlX2Rlc3RydWN0KCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAodW5vcmRlcmVkX211bHRpc2V0JiBfX3gpCisgICAgICB7CisgICAgICAgIF9CYXNlOjpzd2FwKF9feCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCkKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X2hhc2h0YWJsZV9kZXN0cnVjdCh0aGlzLCBfQmFzZTo6YnVja2V0X2NvdW50KCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CYXNlOjpzaXplKCkpOworICAgICAgICBfTV9wcm9maWxlX2Rlc3RydWN0KCk7CisgICAgICAgIF9CYXNlOjpjbGVhcigpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoc3RkOjppbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsgCisgICAgICAgIHNpemVfdHlwZSBfX29sZF9zaXplID0gIF9CYXNlOjpidWNrZXRfY291bnQoKTsKKyAgICAgICAgX0Jhc2U6Omluc2VydChfX2wpOyAKKyAgICAgICAgX01fcHJvZmlsZV9yZXNpemUoX19vbGRfc2l6ZSwgIF9CYXNlOjpidWNrZXRfY291bnQoKSk7IAorICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQorICAgICAgeworICAgICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9ICBfQmFzZTo6YnVja2V0X2NvdW50KCk7CisgICAgICAgIGl0ZXJhdG9yIF9fcmVzID0gX0Jhc2U6Omluc2VydChfX29iaik7CisgICAgICAgIF9NX3Byb2ZpbGVfcmVzaXplKF9fb2xkX3NpemUsICBfQmFzZTo6YnVja2V0X2NvdW50KCkpOyAKKyAgICAgICAgcmV0dXJuIF9fcmVzOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIF9faXRlciwgY29uc3QgdmFsdWVfdHlwZSYgX192KQorICAgICAgeyAKKyAgICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBfQmFzZTo6YnVja2V0X2NvdW50KCk7IAorICAgICAgICBpdGVyYXRvciBfX3JlcyA9IF9CYXNlOjppbnNlcnQoX19pdGVyLCBfX3YpOworICAgICAgICBfTV9wcm9maWxlX3Jlc2l6ZShfX29sZF9zaXplLCBfQmFzZTo6YnVja2V0X2NvdW50KCkpOyAKKyAgICAgICAgcmV0dXJuIF9fcmVzOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0KQorICAgICAgICB7CisJICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IF9CYXNlOjpidWNrZXRfY291bnQoKTsgCisJICBfQmFzZTo6aW5zZXJ0KF9fZmlyc3QsIF9fbGFzdCk7CisJICBfTV9wcm9maWxlX3Jlc2l6ZShfX29sZF9zaXplLCAgX0Jhc2U6OmJ1Y2tldF9jb3VudCgpKTsgCisJfQorCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSogX19maXJzdCwgY29uc3QgdmFsdWVfdHlwZSogX19sYXN0KQorICAgICAgeworICAgICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IF9CYXNlOjpidWNrZXRfY291bnQoKTsgCisgICAgICAgIF9CYXNlOjppbnNlcnQoX19maXJzdCwgX19sYXN0KTsKKyAgICAgICAgX01fcHJvZmlsZV9yZXNpemUoX19vbGRfc2l6ZSwgIF9CYXNlOjpidWNrZXRfY291bnQoKSk7IAorICAgICAgfQorICAgICAKKyAgICAgIHZvaWQgcmVoYXNoKHNpemVfdHlwZSBfX24pCisgICAgICB7CisgICAgICAgIHNpemVfdHlwZSBfX29sZF9zaXplID0gIF9CYXNlOjpidWNrZXRfY291bnQoKTsKKyAgICAgICAgX0Jhc2U6OnJlaGFzaChfX24pOworICAgICAgICBfTV9wcm9maWxlX3Jlc2l6ZShfX29sZF9zaXplLCAgX0Jhc2U6OmJ1Y2tldF9jb3VudCgpKTsgCisgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgY29uc3QgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgdm9pZAorICAgICAgX01fcHJvZmlsZV9yZXNpemUoc2l6ZV90eXBlIF9fb2xkX3NpemUsIHNpemVfdHlwZSBfX25ld19zaXplKQorICAgICAgeworICAgICAgICBpZiAoX19vbGRfc2l6ZSAhPSBfX25ld19zaXplKQorICAgICAgICAgIF9fcHJvZmN4eF9oYXNodGFibGVfcmVzaXplKHRoaXMsIF9fb2xkX3NpemUsIF9fbmV3X3NpemUpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9wcm9maWxlX2Rlc3RydWN0KCkKKyAgICAgIHsKKyAgICAgICAgc2l6ZV90eXBlIF9faG9wcyA9IDAsIF9fbGMgPSAwLCBfX2NoYWluID0gMDsKKyAgICAgICAgZm9yIChpdGVyYXRvciBfX2l0ID0gX01fYmFzZSgpLmJlZ2luKCk7IF9faXQgIT0gX01fYmFzZSgpLmVuZCgpOworCSAgICAgKytfX2l0KQorICAgICAgICB7CisgICAgICAgICAgd2hpbGUgKF9faXQuX01fY3VyX25vZGUtPl9NX25leHQpCisJICAgIHsKKyAgICAgICAgICAgICArK19fY2hhaW47CisgICAgICAgICAgICAgKytfX2l0OworCSAgICB9CisKKyAgICAgICAgICBpZiAoX19jaGFpbikKKwkgICAgeworCSAgICAgICsrX19jaGFpbjsKKwkgICAgICBfX2xjID0gX19sYyA+IF9fY2hhaW4gPyBfX2xjIDogX19jaGFpbjsKKwkgICAgICBfX2hvcHMgKz0gX19jaGFpbiAqIChfX2NoYWluIC0gMSkgLyAyOworCSAgICAgIF9fY2hhaW4gPSAwOworCSAgICB9CisgICAgICAgIH0KKyAgICAgICAgX19wcm9mY3h4X2hhc2h0YWJsZV9kZXN0cnVjdDIodGhpcywgX19sYywgIF9CYXNlOjpzaXplKCksIF9faG9wcyk7CisgICAgICB9CisKKyAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1ByZWQsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAodW5vcmRlcmVkX211bHRpc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJIHVub3JkZXJlZF9tdWx0aXNldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgX194LnN3YXAoX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZSwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9QcmVkLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IHVub3JkZXJlZF9tdWx0aXNldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCB1bm9yZGVyZWRfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBfX3guX01fZXF1YWwoX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZSwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9QcmVkLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHVub3JkZXJlZF9tdWx0aXNldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCB1bm9yZGVyZWRfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CisKK30gLy8gbmFtZXNwYWNlIF9fcHJvZmlsZQorfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyN1bmRlZiBfR0xJQkNYWF9CQVNFCisjdW5kZWYgX0dMSUJDWFhfU1REX0JBU0UKKworI2VuZGlmIC8vIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9wcm9maWxlL3ZlY3RvciBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcHJvZmlsZS92ZWN0b3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ3NDEzNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcHJvZmlsZS92ZWN0b3IKQEAgLTAsMCArMSw0ODEgQEAKKy8vIFByb2ZpbGluZyB2ZWN0b3IgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCisvLyBVU0EuCisKKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCisvKiogQGZpbGUgcHJvZmlsZS92ZWN0b3IKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgcHJvZmlsZSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9WRUNUT1IKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9WRUNUT1IgMQorCisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8cHJvZmlsZS9iYXNlLmg+CisjaW5jbHVkZSA8cHJvZmlsZS9pdGVyYXRvcl90cmFja2VyLmg+CisKK25hbWVzcGFjZSBzdGQKK3sKK25hbWVzcGFjZSBfX3Byb2ZpbGUKK3sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IgPSBzdGQ6OmFsbG9jYXRvcjxfVHA+ID4KKyAgICBjbGFzcyB2ZWN0b3IKKyAgICA6IHB1YmxpYyBfR0xJQkNYWF9TVERfUFI6OnZlY3RvcjxfVHAsIF9BbGxvY2F0b3I+CisgICAgeworICAgICAgdHlwZWRlZiBfR0xJQkNYWF9TVERfUFI6OnZlY3RvcjxfVHAsIF9BbGxvY2F0b3I+IF9CYXNlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cmVmZXJlbmNlICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3JlZmVyZW5jZSAgICAgICBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgX19pdGVyYXRvcl90cmFja2VyPHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciwgdmVjdG9yPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfX2l0ZXJhdG9yX3RyYWNrZXI8dHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yLCB2ZWN0b3I+CisJCQkJICAgICAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6c2l6ZV90eXBlICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmRpZmZlcmVuY2VfdHlwZSAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgX1RwCQkJCSAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBfQWxsb2NhdG9yCQkJICAgIGFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cG9pbnRlciAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9wb2ludGVyICAgICAgICAgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiAgICAgICByZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CisgICAgICAKKyAgICAgIF9CYXNlJgorICAgICAgX01fYmFzZSgpICAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIGNvbnN0IF9CYXNlJgorICAgICAgX01fYmFzZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIC8vIDIzLjIuNC4xIGNvbnN0cnVjdC9jb3B5L2Rlc3Ryb3k6CisgICAgICBleHBsaWNpdCB2ZWN0b3IoY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorICAgICAgOiBfQmFzZShfX2EpCisgICAgICB7IAorICAgICAgICBfX3Byb2ZjeHhfdmVjdG9yX2NvbnN0cnVjdCh0aGlzLCB0aGlzLT5jYXBhY2l0eSgpKTsKKyAgICAgICAgX19wcm9mY3h4X3ZlY3Rvcl9jb25zdHJ1Y3QyKHRoaXMpOworICAgICAgfQorCisgICAgICBleHBsaWNpdCB2ZWN0b3Ioc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlID0gX1RwKCksCisJCSAgICAgIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKyAgICAgIDogIF9CYXNlKF9fbiwgX192YWx1ZSwgX19hKQorICAgICAgeyAKKyAgICAgICAgX19wcm9mY3h4X3ZlY3Rvcl9jb25zdHJ1Y3QodGhpcywgdGhpcy0+Y2FwYWNpdHkoKSk7CisgICAgICAgIF9fcHJvZmN4eF92ZWN0b3JfY29uc3RydWN0Mih0aGlzKTsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZlY3RvcihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICAgICAgIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKwk6IF9CYXNlKF9fZmlyc3QsIF9fbGFzdCwgX19hKQorICAgICAgeyAKKyAgICAgICAgX19wcm9mY3h4X3ZlY3Rvcl9jb25zdHJ1Y3QodGhpcywgdGhpcy0+Y2FwYWNpdHkoKSk7CisgICAgICAgIF9fcHJvZmN4eF92ZWN0b3JfY29uc3RydWN0Mih0aGlzKTsKKyAgICAgIH0KKworICAgICAgdmVjdG9yKGNvbnN0IHZlY3RvciYgX194KQorICAgICAgOiBfQmFzZShfX3gpIAorICAgICAgeyAKKyAgICAgICAgX19wcm9mY3h4X3ZlY3Rvcl9jb25zdHJ1Y3QodGhpcywgdGhpcy0+Y2FwYWNpdHkoKSk7CisgICAgICAgIF9fcHJvZmN4eF92ZWN0b3JfY29uc3RydWN0Mih0aGlzKTsKKyAgICAgIH0KKworICAgICAgLy8vIENvbnN0cnVjdGlvbiBmcm9tIGEgcmVsZWFzZS1tb2RlIHZlY3RvcgorICAgICAgdmVjdG9yKGNvbnN0IF9CYXNlJiBfX3gpCisgICAgICA6IF9CYXNlKF9feCkgCisgICAgICB7IAorICAgICAgICBfX3Byb2ZjeHhfdmVjdG9yX2NvbnN0cnVjdCh0aGlzLCB0aGlzLT5jYXBhY2l0eSgpKTsKKyAgICAgICAgX19wcm9mY3h4X3ZlY3Rvcl9jb25zdHJ1Y3QyKHRoaXMpOworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHZlY3Rvcih2ZWN0b3ImJiBfX3gpCisgICAgICA6IF9CYXNlKHN0ZDo6Zm9yd2FyZDx2ZWN0b3I+KF9feCkpCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF92ZWN0b3JfY29uc3RydWN0KHRoaXMsIHRoaXMtPmNhcGFjaXR5KCkpOworICAgICAgICBfX3Byb2ZjeHhfdmVjdG9yX2NvbnN0cnVjdDIodGhpcyk7CisgICAgICB9CisKKyAgICAgIHZlY3Rvcihpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCwKKwkgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2wsIF9fYSkgeyB9CisjZW5kaWYKKworICAgICAgfnZlY3RvcigpIHsKKyAgICAgICAgX19wcm9mY3h4X3ZlY3Rvcl9kZXN0cnVjdCh0aGlzLCB0aGlzLT5jYXBhY2l0eSgpLCB0aGlzLT5zaXplKCkpOworICAgICAgICBfX3Byb2ZjeHhfdmVjdG9yX2Rlc3RydWN0Mih0aGlzKTsKKyAgICAgIH0KKworICAgICAgdmVjdG9yJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHZlY3RvciYgX194KQorICAgICAgeworICAgICAgICBzdGF0aWNfY2FzdDxfQmFzZSY+KCp0aGlzKSA9IF9feDsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHZlY3RvciYKKyAgICAgIG9wZXJhdG9yPSh2ZWN0b3ImJiBfX3gpCisgICAgICB7CisJLy8gTkI6IERSIDEyMDQuCisJLy8gTkI6IERSIDY3NS4KKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPnN3YXAoX194KTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHZlY3RvciYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwlzdGF0aWNfY2FzdDxfQmFzZSY+KCp0aGlzKSA9IF9fbDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisjZW5kaWYKKworICAgICAgdXNpbmcgX0Jhc2U6OmFzc2lnbjsKKyAgICAgIHVzaW5nIF9CYXNlOjpnZXRfYWxsb2NhdG9yOworCisKKyAgICAgIC8vIGl0ZXJhdG9yczoKKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplbmQoKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpCisgICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpCisgICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjplbmQoKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjcmVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisjZW5kaWYKKworICAgICAgLy8gMjMuMi40LjIgY2FwYWNpdHk6CisgICAgICB1c2luZyBfQmFzZTo6c2l6ZTsKKyAgICAgIHVzaW5nIF9CYXNlOjptYXhfc2l6ZTsKKworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX3N6LCBfVHAgX19jID0gX1RwKCkpCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF92ZWN0b3JfaW52YWxpZF9vcGVyYXRvcih0aGlzKTsKKyAgICAgICAgX01fcHJvZmlsZV9yZXNpemUodGhpcywgdGhpcy0+Y2FwYWNpdHkoKSwgX19zeik7CisgICAgICAgIF9CYXNlOjpyZXNpemUoX19zeiwgX19jKTsKKyAgICAgIH0KKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICB1c2luZyBfQmFzZTo6c2hyaW5rX3RvX2ZpdDsKKyNlbmRpZgorCisgICAgICB1c2luZyBfQmFzZTo6ZW1wdHk7CisKKyAgICAgIC8vIGVsZW1lbnQgYWNjZXNzOgorICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF92ZWN0b3JfaW52YWxpZF9vcGVyYXRvcih0aGlzKTsKKyAgICAgICAgcmV0dXJuIF9NX2Jhc2UoKVtfX25dOworICAgICAgfQorICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF92ZWN0b3JfaW52YWxpZF9vcGVyYXRvcih0aGlzKTsKKyAgICAgICAgcmV0dXJuIF9NX2Jhc2UoKVtfX25dOworICAgICAgfQorCisgICAgICB1c2luZyBfQmFzZTo6YXQ7CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgZnJvbnQoKQorICAgICAgeyAKKyAgICAgICAgcmV0dXJuIF9CYXNlOjpmcm9udCgpOworICAgICAgfQorCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIGZyb250KCkgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gX0Jhc2U6OmZyb250KCk7CisgICAgICB9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgYmFjaygpCisgICAgICB7CisJcmV0dXJuIF9CYXNlOjpiYWNrKCk7CisgICAgICB9CisKKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgYmFjaygpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIF9CYXNlOjpiYWNrKCk7CisgICAgICB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSIDQ2NC4gU3VnZ2VzdGlvbiBmb3IgbmV3IG1lbWJlciBmdW5jdGlvbnMgaW4gc3RhbmRhcmQgY29udGFpbmVycy4KKyAgICAgIHVzaW5nIF9CYXNlOjpkYXRhOworCisgICAgICAvLyAyMy4yLjQuMyBtb2RpZmllcnM6CisgICAgICB2b2lkCisgICAgICBwdXNoX2JhY2soY29uc3QgX1RwJiBfX3gpCisgICAgICB7CisgICAgICAgIHNpemVfdHlwZSBfX29sZF9zaXplID0gdGhpcy0+Y2FwYWNpdHkoKTsKKwlfQmFzZTo6cHVzaF9iYWNrKF9feCk7CisgICAgICAgIF9NX3Byb2ZpbGVfcmVzaXplKHRoaXMsIF9fb2xkX3NpemUsIHRoaXMtPmNhcGFjaXR5KCkpOworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfYmFjayhfVHAmJiBfX3gpCisgICAgICB7CisgICAgICAgIHNpemVfdHlwZSBfX29sZF9zaXplID0gdGhpcy0+Y2FwYWNpdHkoKTsKKyAgICAgICAgX0Jhc2U6OnB1c2hfYmFjayhfX3gpOworICAgICAgICBfTV9wcm9maWxlX3Jlc2l6ZSh0aGlzLCBfX29sZF9zaXplLCB0aGlzLT5jYXBhY2l0eSgpKTsKKyAgICAgIH0KKworI2VuZGlmCisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF92ZWN0b3JfaW5zZXJ0KHRoaXMsIF9fcG9zaXRpb24uYmFzZSgpIC0gX0Jhc2U6OmJlZ2luKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnNpemUoKSk7CisgICAgICAgIHNpemVfdHlwZSBfX29sZF9zaXplID0gdGhpcy0+Y2FwYWNpdHkoKTsKKwl0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgX19yZXMgPSBfQmFzZTo6aW5zZXJ0KF9fcG9zaXRpb24uYmFzZSgpLCBfX3gpOworICAgICAgICBfTV9wcm9maWxlX3Jlc2l6ZSh0aGlzLCBfX29sZF9zaXplLCB0aGlzLT5jYXBhY2l0eSgpKTsKKwlyZXR1cm4gaXRlcmF0b3IoX19yZXMsIHRoaXMpOworICAgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgX1RwJiYgX194KQorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfdmVjdG9yX2luc2VydCh0aGlzLCBfX3Bvc2l0aW9uLmJhc2UoKSAtIF9CYXNlOjpiZWdpbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5zaXplKCkpOworICAgICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHRoaXMtPmNhcGFjaXR5KCk7CisJdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIF9fcmVzID0gX0Jhc2U6Omluc2VydChfX3Bvc2l0aW9uLmJhc2UoKSwgX194KTsKKyAgICAgICAgX01fcHJvZmlsZV9yZXNpemUodGhpcywgX19vbGRfc2l6ZSwgdGhpcy0+Y2FwYWNpdHkoKSk7CisJcmV0dXJuIGl0ZXJhdG9yKF9fcmVzLCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeyB0aGlzLT5pbnNlcnQoX19wb3NpdGlvbiwgX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7IH0KKyNlbmRpZgorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgICAgIHZvaWQKKyAgICAgIHN3YXAodmVjdG9yJiYgX194KQorICAgICAgeworICAgICAgICBfQmFzZTo6c3dhcChfX3gpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAodmVjdG9yJiBfX3gpCisgICAgICB7CisgICAgICAgIF9CYXNlOjpzd2FwKF9feCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCkKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X3ZlY3Rvcl9pbnNlcnQodGhpcywgX19wb3NpdGlvbi5iYXNlKCkgLSBfQmFzZTo6YmVnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2l6ZSgpKTsKKyAgICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSB0aGlzLT5jYXBhY2l0eSgpOworICAgICAgICBfQmFzZTo6aW5zZXJ0KF9fcG9zaXRpb24sIF9fbiwgX194KTsKKyAgICAgICAgX01fcHJvZmlsZV9yZXNpemUodGhpcywgX19vbGRfc2l6ZSwgdGhpcy0+Y2FwYWNpdHkoKSk7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sCisgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfdmVjdG9yX2luc2VydCh0aGlzLCBfX3Bvc2l0aW9uLmJhc2UoKS1fQmFzZTo6YmVnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2l6ZSgpKTsKKyAgICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSB0aGlzLT5jYXBhY2l0eSgpOworICAgICAgICBfQmFzZTo6aW5zZXJ0KF9fcG9zaXRpb24sIF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICAgIF9NX3Byb2ZpbGVfcmVzaXplKHRoaXMsIF9fb2xkX3NpemUsIHRoaXMtPmNhcGFjaXR5KCkpOworICAgICAgfQorCisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeworCXR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBfX3JlcyA9IF9CYXNlOjplcmFzZShfX3Bvc2l0aW9uLmJhc2UoKSk7CisJcmV0dXJuIGl0ZXJhdG9yKF9fcmVzLCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwkvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJLy8gMTUxLiBjYW4ndCBjdXJyZW50bHkgY2xlYXIoKSBlbXB0eSBjb250YWluZXIKKwl0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgX19yZXMgPSBfQmFzZTo6ZXJhc2UoX19maXJzdC5iYXNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xhc3QuYmFzZSgpKTsKKwlyZXR1cm4gaXRlcmF0b3IoX19yZXMsIHRoaXMpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBjbGVhcigpCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF92ZWN0b3JfZGVzdHJ1Y3QodGhpcywgdGhpcy0+Y2FwYWNpdHkoKSwgdGhpcy0+c2l6ZSgpKTsKKyAgICAgICAgX19wcm9mY3h4X3ZlY3Rvcl9kZXN0cnVjdDIodGhpcyk7CisgICAgICAgIF9CYXNlOjpjbGVhcigpOworICAgICAgfQorCisgICAgICBpbmxpbmUgdm9pZCBfTV9wcm9maWxlX2ZpbmQoKSBjb25zdCAKKyAgICAgIHsgCisgICAgICAgIF9fcHJvZmN4eF92ZWN0b3JfZmluZCh0aGlzLCBzaXplKCkpOyAKKyAgICAgIH0KKworICAgICAgaW5saW5lIHZvaWQgX01fcHJvZmlsZV9pdGVyYXRlKGludCBfX3Jld2luZCA9IDApIGNvbnN0IAorICAgICAgeyAKKyAgICAgICAgX19wcm9mY3h4X3ZlY3Rvcl9pdGVyYXRlKHRoaXMpOyAKKyAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICB2b2lkIF9NX3Byb2ZpbGVfcmVzaXplKHZvaWQqIG9iaiwgc2l6ZV90eXBlIF9fb2xkX3NpemUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uZXdfc2l6ZSkKKyAgICAgIHsKKyAgICAgICAgaWYgKF9fb2xkX3NpemUgPCBfX25ld19zaXplKSB7CisgICAgICAgICAgX19wcm9mY3h4X3ZlY3Rvcl9yZXNpemUodGhpcywgdGhpcy0+c2l6ZSgpLCBfX25ld19zaXplKTsKKyAgICAgICAgICBfX3Byb2ZjeHhfdmVjdG9yX3Jlc2l6ZTIodGhpcywgdGhpcy0+c2l6ZSgpLCBfX25ld19zaXplKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9fbGhzLAorICAgICAgICAgICBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPT0gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9fbGhzLAorICAgICAgICAgICBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgIT0gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX19saHMsCisgICAgICAgICAgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpIDwgX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9fbGhzLAorICAgICAgICAgICBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPD0gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9fbGhzLAorICAgICAgICAgICBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPj0gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX19saHMsCisgICAgICAgICAgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID4gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9fbGhzLCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYmIF9fbGhzLCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9fbGhzLCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiYgX19yaHMpCisgICAgeyBfX2xocy5zd2FwKF9fcmhzKTsgfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIF9fcHJvZmlsZQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgLy8gRFIgMTE4Mi4KKyAgLy8vIHN0ZDo6aGFzaCBzcGVjaWFsaXphdGlvbiBmb3IgdmVjdG9yPGJvb2w+LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgc3RydWN0IGhhc2g8X19wcm9maWxlOjp2ZWN0b3I8Ym9vbCwgX0FsbG9jPj4KKyAgICA6IHB1YmxpYyBzdGQ6OnVuYXJ5X2Z1bmN0aW9uPF9fcHJvZmlsZTo6dmVjdG9yPGJvb2wsIF9BbGxvYz4sIHNpemVfdD4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX19wcm9maWxlOjp2ZWN0b3I8Ym9vbCwgX0FsbG9jPiYgX19iKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpoYXNoPF9HTElCQ1hYX1NURF9EOjp2ZWN0b3I8Ym9vbCwgX0FsbG9jPj4oKQorCSAgKF9fYi5fTV9iYXNlKCkpOyB9CisgICAgfTsKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3F1ZXVlIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9xdWV1ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmY5ODQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9xdWV1ZQpAQCAtMCwwICsxLDY3IEBACisvLyA8cXVldWU+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5NworICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGluY2x1ZGUvcXVldWUKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfUVVFVUUKKyNkZWZpbmUgX0dMSUJDWFhfUVVFVUUgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxkZXF1ZT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8Yml0cy9zdGxfaGVhcC5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfcXVldWUuaD4KKworI2VuZGlmIC8qIF9HTElCQ1hYX1FVRVVFICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3JhbmRvbSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcmFuZG9tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMzMwZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3JhbmRvbQpAQCAtMCwwICsxLDYxIEBACisvLyA8cmFuZG9tPiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvcmFuZG9tCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1JBTkRPTQorI2RlZmluZSBfR0xJQkNYWF9SQU5ET00gMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpZm5kZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyMgaW5jbHVkZSA8Yml0cy9jKysweF93YXJuaW5nLmg+CisjZWxzZQorCisjaW5jbHVkZSA8Y21hdGg+CisjaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKworI2lmZGVmIF9HTElCQ1hYX1VTRV9DOTlfU1RESU5UX1RSMQorCisjaW5jbHVkZSA8Y3N0ZGludD4gLy8gRm9yIHVpbnRfZmFzdDMyX3QsIHVpbnRfZmFzdDY0X3QsIHVpbnRfbGVhc3QzMl90CisKKyNpbmNsdWRlIDxiaXRzL3JhbmRvbS5oPgorCisjaWZuZGVmIF9HTElCQ1hYX0VYUE9SVF9URU1QTEFURQorIyBpbmNsdWRlIDxiaXRzL3JhbmRvbS50Y2M+CisjZW5kaWYKKworI2VuZGlmIC8vIF9HTElCQ1hYX1VTRV9DOTlfU1RESU5UX1RSMQorCisjZW5kaWYgLy8gX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKworI2VuZGlmIC8vIF9HTElCQ1hYX1JBTkRPTQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9yYXRpbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcmF0aW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2OWQ3OQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcmF0aW8KQEAgLTAsMCArMSwzMDMgQEAKKy8vIHJhdGlvIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcmF0aW8KKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfUkFUSU8KKyNkZWZpbmUgX0dMSUJDWFhfUkFUSU8gMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpZm5kZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyMgaW5jbHVkZSA8Yml0cy9jKysweF93YXJuaW5nLmg+CisjZWxzZQorCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8Y3N0ZGludD4KKworI2lmZGVmIF9HTElCQ1hYX1VTRV9DOTlfU1RESU5UX1RSMQorCituYW1lc3BhY2Ugc3RkCit7CisgIC8qKgorICAgKiBAZGVmZ3JvdXAgcmF0aW8gUmF0aW9uYWwgQXJpdGhtZXRpYworICAgKiBAaW5ncm91cCB1dGlsaXRpZXMKKyAgICoKKyAgICogQ29tcGlsZSB0aW1lIHJlcHJlc2VudGF0aW9uIG9mIGZpbml0ZSByYXRpb25hbCBudW1iZXJzLgorICAgKiBAeworICAgKi8KKworICB0ZW1wbGF0ZTxpbnRtYXhfdCBfUG4+CisgICAgc3RydWN0IF9fc3RhdGljX3NpZ24KKyAgICA6IGludGVncmFsX2NvbnN0YW50PGludG1heF90LCAoX1BuIDwgMCkgPyAtMSA6IDE+CisgICAgeyB9OworCisgIHRlbXBsYXRlPGludG1heF90IF9Qbj4KKyAgICBzdHJ1Y3QgX19zdGF0aWNfYWJzCisgICAgOiBpbnRlZ3JhbF9jb25zdGFudDxpbnRtYXhfdCwgX1BuICogX19zdGF0aWNfc2lnbjxfUG4+Ojp2YWx1ZT4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8aW50bWF4X3QgX1BuLCBpbnRtYXhfdCBfUW4+CisgICAgc3RydWN0IF9fc3RhdGljX2djZDsKKyAKKyAgdGVtcGxhdGU8aW50bWF4X3QgX1BuLCBpbnRtYXhfdCBfUW4+CisgICAgc3RydWN0IF9fc3RhdGljX2djZAorICAgIDogX19zdGF0aWNfZ2NkPF9RbiwgKF9QbiAlIF9Rbik+CisgICAgeyB9OworCisgIHRlbXBsYXRlPGludG1heF90IF9Qbj4KKyAgICBzdHJ1Y3QgX19zdGF0aWNfZ2NkPF9QbiwgMD4KKyAgICA6IGludGVncmFsX2NvbnN0YW50PGludG1heF90LCBfX3N0YXRpY19hYnM8X1BuPjo6dmFsdWU+CisgICAgeyB9OworCisgIHRlbXBsYXRlPGludG1heF90IF9Rbj4KKyAgICBzdHJ1Y3QgX19zdGF0aWNfZ2NkPDAsIF9Rbj4KKyAgICA6IGludGVncmFsX2NvbnN0YW50PGludG1heF90LCBfX3N0YXRpY19hYnM8X1FuPjo6dmFsdWU+CisgICAgeyB9OworCisgIC8vIExldCBjID0gMl4oaGFsZiAjIG9mIGJpdHMgaW4gYW4gaW50bWF4X3QpCisgIC8vIHRoZW4gd2UgZmluZCBhMSwgYTAsIGIxLCBiMCBzLnQuIE4gPSBhMSpjICsgYTAsIE0gPSBiMSpjICsgYjAKKyAgLy8gVGhlIG11bHRpcGxpY2F0aW9uIG9mIE4gYW5kIE0gYmVjb21lcywKKyAgLy8gTiAqIE0gPSAoYTEgKiBiMSljXjIgKyAoYTAgKiBiMSArIGIwICogYTEpYyArIGEwICogYjAKKyAgLy8gTXVsdGlwbGljYXRpb24gaXMgc2FmZSBpZiBlYWNoIHRlcm0gYW5kIHRoZSBzdW0gb2YgdGhlIHRlcm1zCisgIC8vIGlzIHJlcHJlc2VudGFibGUgYnkgaW50bWF4X3QuCisgIHRlbXBsYXRlPGludG1heF90IF9QbiwgaW50bWF4X3QgX1FuPgorICAgIHN0cnVjdCBfX3NhZmVfbXVsdGlwbHkKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHN0YXRpYyBjb25zdCB1aW50bWF4X3QgX19jID0gdWludG1heF90KDEpIDw8IChzaXplb2YoaW50bWF4X3QpICogNCk7CisKKyAgICAgIHN0YXRpYyBjb25zdCB1aW50bWF4X3QgX19hMCA9IF9fc3RhdGljX2FiczxfUG4+Ojp2YWx1ZSAlIF9fYzsKKyAgICAgIHN0YXRpYyBjb25zdCB1aW50bWF4X3QgX19hMSA9IF9fc3RhdGljX2FiczxfUG4+Ojp2YWx1ZSAvIF9fYzsKKyAgICAgIHN0YXRpYyBjb25zdCB1aW50bWF4X3QgX19iMCA9IF9fc3RhdGljX2FiczxfUW4+Ojp2YWx1ZSAlIF9fYzsKKyAgICAgIHN0YXRpYyBjb25zdCB1aW50bWF4X3QgX19iMSA9IF9fc3RhdGljX2FiczxfUW4+Ojp2YWx1ZSAvIF9fYzsKKworICAgICAgc3RhdGljX2Fzc2VydChfX2ExID09IDAgfHwgX19iMSA9PSAwLCAKKyAgICAgICAgIm92ZXJmbG93IGluIG11bHRpcGxpY2F0aW9uIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9fYTAgKiBfX2IxICsgX19iMCAqIF9fYTEgPCAoX19jID4+IDEpLCAKKyAgICAgICAgIm92ZXJmbG93IGluIG11bHRpcGxpY2F0aW9uIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9fYjAgKiBfX2EwIDw9IF9fSU5UTUFYX01BWF9fLCAKKyAgICAgICAgIm92ZXJmbG93IGluIG11bHRpcGxpY2F0aW9uIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KChfX2EwICogX19iMSArIF9fYjAgKiBfX2ExKSAqIF9fYyA8PSAKKyAgICAgICAgX19JTlRNQVhfTUFYX18gLSAgX19iMCAqIF9fYTAsICJvdmVyZmxvdyBpbiBtdWx0aXBsaWNhdGlvbiIpOworCisgICAgcHVibGljOgorICAgICAgc3RhdGljIGNvbnN0IGludG1heF90IHZhbHVlID0gX1BuICogX1FuOworICAgIH07CisKKyAgLy8gSGVscGVycyBmb3IgX19zYWZlX2FkZAorICB0ZW1wbGF0ZTxpbnRtYXhfdCBfUG4sIGludG1heF90IF9RbiwgYm9vbD4KKyAgICBzdHJ1Y3QgX19hZGRfb3ZlcmZsb3dfY2hlY2tfaW1wbAorICAgIDogaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgKF9QbiA8PSBfX0lOVE1BWF9NQVhfXyAtIF9Rbik+CisgICAgeyB9OworCisgIHRlbXBsYXRlPGludG1heF90IF9QbiwgaW50bWF4X3QgX1FuPgorICAgIHN0cnVjdCBfX2FkZF9vdmVyZmxvd19jaGVja19pbXBsPF9QbiwgX1FuLCBmYWxzZT4KKyAgICA6IGludGVncmFsX2NvbnN0YW50PGJvb2wsIChfUG4gPj0gLV9fSU5UTUFYX01BWF9fIC0gX1FuKT4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8aW50bWF4X3QgX1BuLCBpbnRtYXhfdCBfUW4+CisgICAgc3RydWN0IF9fYWRkX292ZXJmbG93X2NoZWNrCisgICAgOiBfX2FkZF9vdmVyZmxvd19jaGVja19pbXBsPF9QbiwgX1FuLCAoX1FuID49IDApPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTxpbnRtYXhfdCBfUG4sIGludG1heF90IF9Rbj4KKyAgICBzdHJ1Y3QgX19zYWZlX2FkZAorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoX19hZGRfb3ZlcmZsb3dfY2hlY2s8X1BuLCBfUW4+Ojp2YWx1ZSAhPSAwLCAKKyAgICAgICAgIm92ZXJmbG93IGluIGFkZGl0aW9uIik7CisKKyAgICAgIHN0YXRpYyBjb25zdCBpbnRtYXhfdCB2YWx1ZSA9IF9QbiArIF9RbjsKKyAgICB9OworCisgIC8qKgorICAgKiAgQGJyaWVmIFByb3ZpZGVzIGNvbXBpbGUtdGltZSByYXRpb25hbCBhcml0aG1ldGljLgorICAgKgorICAgKiAgVGhpcyBjbGFzcyB0ZW1wbGF0ZSByZXByZXNlbnRzIGFueSBmaW5pdGUgcmF0aW9uYWwgbnVtYmVyIHdpdGggYQorICAgKiAgbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvciByZXByZXNlbnRhYmxlIGJ5IGNvbXBpbGUtdGltZSBjb25zdGFudHMgb2YKKyAgICogIHR5cGUgaW50bWF4X3QuIFRoZSByYXRpbyBpcyBzaW1wbGlmaWVkIHdoZW4gaW5zdGFudGlhdGVkLgorICAgKgorICAgKiAgRm9yIGV4YW1wbGU6CisgICAqICBAY29kZQorICAgKiAgICBzdGQ6OnJhdGlvPDcsLTIxPjo6bnVtID09IC0xOworICAgKiAgICBzdGQ6OnJhdGlvPDcsLTIxPjo6ZGVuID09IDM7CisgICAqICBAZW5kY29kZQorICAgKiAgCisgICovCisgIHRlbXBsYXRlPGludG1heF90IF9OdW0sIGludG1heF90IF9EZW4gPSAxPgorICAgIHN0cnVjdCByYXRpbworICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoX0RlbiAhPSAwLCAiZGVub21pbmF0b3IgY2Fubm90IGJlIHplcm8iKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoX051bSA+PSAtX19JTlRNQVhfTUFYX18gJiYgX0RlbiA+PSAtX19JTlRNQVhfTUFYX18sCisJCSAgICAib3V0IG9mIHJhbmdlIik7CisKKyAgICAgIC8vIE5vdGU6IHNpZ24oTikgKiBhYnMoTikgPT0gTgorICAgICAgc3RhdGljIGNvbnN0IGludG1heF90IG51bSA9CisgICAgICAgIF9OdW0gKiBfX3N0YXRpY19zaWduPF9EZW4+Ojp2YWx1ZSAvIF9fc3RhdGljX2djZDxfTnVtLCBfRGVuPjo6dmFsdWU7CisKKyAgICAgIHN0YXRpYyBjb25zdCBpbnRtYXhfdCBkZW4gPQorICAgICAgICBfX3N0YXRpY19hYnM8X0Rlbj46OnZhbHVlIC8gX19zdGF0aWNfZ2NkPF9OdW0sIF9EZW4+Ojp2YWx1ZTsKKyAgICB9OworCisgIHRlbXBsYXRlPGludG1heF90IF9OdW0sIGludG1heF90IF9EZW4+CisgICAgY29uc3QgaW50bWF4X3QgcmF0aW88X051bSwgX0Rlbj46Om51bTsKKworICB0ZW1wbGF0ZTxpbnRtYXhfdCBfTnVtLCBpbnRtYXhfdCBfRGVuPgorICAgIGNvbnN0IGludG1heF90IHJhdGlvPF9OdW0sIF9EZW4+OjpkZW47CisKKyAgLy8vIHJhdGlvX2FkZAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUjEsIHR5cGVuYW1lIF9SMj4KKyAgICBzdHJ1Y3QgcmF0aW9fYWRkCisgICAgeworICAgIHByaXZhdGU6CisgICAgICBzdGF0aWMgY29uc3QgaW50bWF4X3QgX19nY2QgPQorICAgICAgICBfX3N0YXRpY19nY2Q8X1IxOjpkZW4sIF9SMjo6ZGVuPjo6dmFsdWU7CisgICAgICAKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHJhdGlvPAorICAgICAgICBfX3NhZmVfYWRkPAorICAgICAgICAgIF9fc2FmZV9tdWx0aXBseTxfUjE6Om51bSwgKF9SMjo6ZGVuIC8gX19nY2QpPjo6dmFsdWUsCisgICAgICAgICAgX19zYWZlX211bHRpcGx5PF9SMjo6bnVtLCAoX1IxOjpkZW4gLyBfX2djZCk+Ojp2YWx1ZT46OnZhbHVlLAorICAgICAgICBfX3NhZmVfbXVsdGlwbHk8X1IxOjpkZW4sIChfUjI6OmRlbiAvIF9fZ2NkKT46OnZhbHVlPiB0eXBlOworICAgIH07CisKKyAgLy8vIHJhdGlvX3N1YnRyYWN0CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SMSwgdHlwZW5hbWUgX1IyPgorICAgIHN0cnVjdCByYXRpb19zdWJ0cmFjdAorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcmF0aW9fYWRkPAorICAgICAgICBfUjEsCisgICAgICAgIHJhdGlvPC1fUjI6Om51bSwgX1IyOjpkZW4+Pjo6dHlwZSB0eXBlOworICAgIH07CisKKyAgLy8vIHJhdGlvX211bHRpcGx5CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SMSwgdHlwZW5hbWUgX1IyPgorICAgIHN0cnVjdCByYXRpb19tdWx0aXBseQorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgc3RhdGljIGNvbnN0IGludG1heF90IF9fZ2NkMSA9CisgICAgICAgIF9fc3RhdGljX2djZDxfUjE6Om51bSwgX1IyOjpkZW4+Ojp2YWx1ZTsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnRtYXhfdCBfX2djZDIgPQorICAgICAgICBfX3N0YXRpY19nY2Q8X1IyOjpudW0sIF9SMTo6ZGVuPjo6dmFsdWU7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHJhdGlvPAorICAgICAgICBfX3NhZmVfbXVsdGlwbHk8KF9SMTo6bnVtIC8gX19nY2QxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIChfUjI6Om51bSAvIF9fZ2NkMik+Ojp2YWx1ZSwKKyAgICAgICAgX19zYWZlX211bHRpcGx5PChfUjE6OmRlbiAvIF9fZ2NkMiksCisgICAgICAgICAgICAgICAgICAgICAgICAoX1IyOjpkZW4gLyBfX2djZDEpPjo6dmFsdWU+IHR5cGU7CisgICAgfTsKKworICAvLy8gcmF0aW9fZGl2aWRlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SMSwgdHlwZW5hbWUgX1IyPgorICAgIHN0cnVjdCByYXRpb19kaXZpZGUKKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9SMjo6bnVtICE9IDAsICJkaXZpc2lvbiBieSAwIik7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcmF0aW9fbXVsdGlwbHk8CisgICAgICAgIF9SMSwKKyAgICAgICAgcmF0aW88X1IyOjpkZW4sIF9SMjo6bnVtPj46OnR5cGUgdHlwZTsKKyAgICB9OworCisgIC8vLyByYXRpb19lcXVhbAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUjEsIHR5cGVuYW1lIF9SMj4KKyAgICBzdHJ1Y3QgcmF0aW9fZXF1YWwKKyAgICA6IGludGVncmFsX2NvbnN0YW50PGJvb2wsIF9SMTo6bnVtID09IF9SMjo6bnVtICYmIF9SMTo6ZGVuID09IF9SMjo6ZGVuPgorICAgIHsgfTsKKyAgCisgIC8vLyByYXRpb19ub3RfZXF1YWwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1IxLCB0eXBlbmFtZSBfUjI+CisgICAgc3RydWN0IHJhdGlvX25vdF9lcXVhbAorICAgIDogaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgIXJhdGlvX2VxdWFsPF9SMSwgX1IyPjo6dmFsdWU+CisgICAgeyB9OworICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1IxLCB0eXBlbmFtZSBfUjI+CisgICAgc3RydWN0IF9fcmF0aW9fbGVzc19zaW1wbGVfaW1wbAorICAgIDogaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwKKwkJCShfX3NhZmVfbXVsdGlwbHk8X1IxOjpudW0sIF9SMjo6ZGVuPjo6dmFsdWUKKwkJCSA8IF9fc2FmZV9tdWx0aXBseTxfUjI6Om51bSwgX1IxOjpkZW4+Ojp2YWx1ZSk+CisgICAgeyB9OworCisgIC8vIElmIHRoZSBkZW5vbWluYXRvcnMgYXJlIGVxdWFsIG9yIHRoZSBzaWducyBkaWZmZXIsIHdlIGNhbiBqdXN0IGNvbXBhcmUKKyAgLy8gbnVtZXJhdG9ycywgb3RoZXJ3aXNlIGZhbGxiYWNrIHRvIHRoZSBzaW1wbGUgY3Jvc3MtbXVsdGlwbHkgbWV0aG9kLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUjEsIHR5cGVuYW1lIF9SMj4KKyAgICBzdHJ1Y3QgX19yYXRpb19sZXNzX2ltcGwKKyAgICA6IGNvbmRpdGlvbmFsPChfUjE6OmRlbiA9PSBfUjI6OmRlbgorCQkgICB8fCAoX19zdGF0aWNfc2lnbjxfUjE6Om51bT46OnZhbHVlCisJCSAgICAgICAhPSBfX3N0YXRpY19zaWduPF9SMjo6bnVtPjo6dmFsdWUpKSwKKyAgICAgIGludGVncmFsX2NvbnN0YW50PGJvb2wsIChfUjE6Om51bSA8IF9SMjo6bnVtKT4sCisgICAgICBfX3JhdGlvX2xlc3Nfc2ltcGxlX2ltcGw8X1IxLCBfUjI+Pjo6dHlwZQorICAgIHsgfTsKKworICAvLy8gcmF0aW9fbGVzcworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUjEsIHR5cGVuYW1lIF9SMj4KKyAgICBzdHJ1Y3QgcmF0aW9fbGVzcworICAgIDogX19yYXRpb19sZXNzX2ltcGw8X1IxLCBfUjI+Ojp0eXBlCisgICAgeyB9OworICAgIAorICAvLy8gcmF0aW9fbGVzc19lcXVhbAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUjEsIHR5cGVuYW1lIF9SMj4KKyAgICBzdHJ1Y3QgcmF0aW9fbGVzc19lcXVhbAorICAgIDogaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgIXJhdGlvX2xlc3M8X1IyLCBfUjE+Ojp2YWx1ZT4KKyAgICB7IH07CisgIAorICAvLy8gcmF0aW9fZ3JlYXRlcgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUjEsIHR5cGVuYW1lIF9SMj4KKyAgICBzdHJ1Y3QgcmF0aW9fZ3JlYXRlcgorICAgIDogaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgcmF0aW9fbGVzczxfUjIsIF9SMT46OnZhbHVlPgorICAgIHsgfTsKKworICAvLy8gcmF0aW9fZ3JlYXRlcl9lcXVhbAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUjEsIHR5cGVuYW1lIF9SMj4KKyAgICBzdHJ1Y3QgcmF0aW9fZ3JlYXRlcl9lcXVhbAorICAgIDogaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgIXJhdGlvX2xlc3M8X1IxLCBfUjI+Ojp2YWx1ZT4KKyAgICB7IH07CisKKyAgdHlwZWRlZiByYXRpbzwxLCAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwPiBhdHRvOworICB0eXBlZGVmIHJhdGlvPDEsICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDA+IGZlbXRvOworICB0eXBlZGVmIHJhdGlvPDEsICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDA+IHBpY287CisgIHR5cGVkZWYgcmF0aW88MSwgICAgICAgICAgICAgICAgMTAwMDAwMDAwMD4gbmFubzsKKyAgdHlwZWRlZiByYXRpbzwxLCAgICAgICAgICAgICAgICAgICAxMDAwMDAwPiBtaWNybzsKKyAgdHlwZWRlZiByYXRpbzwxLCAgICAgICAgICAgICAgICAgICAgICAxMDAwPiBtaWxsaTsKKyAgdHlwZWRlZiByYXRpbzwxLCAgICAgICAgICAgICAgICAgICAgICAgMTAwPiBjZW50aTsKKyAgdHlwZWRlZiByYXRpbzwxLCAgICAgICAgICAgICAgICAgICAgICAgIDEwPiBkZWNpOworICB0eXBlZGVmIHJhdGlvPCAgICAgICAgICAgICAgICAgICAgICAgMTAsIDE+IGRlY2E7CisgIHR5cGVkZWYgcmF0aW88ICAgICAgICAgICAgICAgICAgICAgIDEwMCwgMT4gaGVjdG87CisgIHR5cGVkZWYgcmF0aW88ICAgICAgICAgICAgICAgICAgICAgMTAwMCwgMT4ga2lsbzsKKyAgdHlwZWRlZiByYXRpbzwgICAgICAgICAgICAgICAgICAxMDAwMDAwLCAxPiBtZWdhOworICB0eXBlZGVmIHJhdGlvPCAgICAgICAgICAgICAgIDEwMDAwMDAwMDAsIDE+IGdpZ2E7CisgIHR5cGVkZWYgcmF0aW88ICAgICAgICAgICAgMTAwMDAwMDAwMDAwMCwgMT4gdGVyYTsKKyAgdHlwZWRlZiByYXRpbzwgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwLCAxPiBwZXRhOworICB0eXBlZGVmIHJhdGlvPCAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAsIDE+IGV4YTsKKworICAvLyBAfSBncm91cCByYXRpbworfQorCisjZW5kaWYgLy9fR0xJQkNYWF9VU0VfQzk5X1NURElOVF9UUjEKKworI2VuZGlmIC8vX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKworI2VuZGlmIC8vX0dMSUJDWFhfUkFUSU8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvcmVnZXggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3JlZ2V4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MjM4MjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3JlZ2V4CkBAIC0wLDAgKzEsNjggQEAKKy8vIDxyZWdleD4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL3JlZ2V4CisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1JFR0VYCisjZGVmaW5lIF9HTElCQ1hYX1JFR0VYIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaWZuZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisjIGluY2x1ZGUgPGJpdHMvYysrMHhfd2FybmluZy5oPgorI2Vsc2UKKworI2lmIGRlZmluZWQoX0dMSUJDWFhfSU5DTFVERV9BU19UUjEpCisjICBlcnJvciBDKysweCBoZWFkZXIgY2Fubm90IGJlIGluY2x1ZGVkIGZyb20gVFIxIGhlYWRlcgorI2VuZGlmCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Yml0c2V0PgorI2luY2x1ZGUgPGl0ZXJhdG9yPgorI2luY2x1ZGUgPGxvY2FsZT4KKyNpbmNsdWRlIDxzdGRleGNlcHQ+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHNzdHJlYW0+CisKKyNpZiBkZWZpbmVkKF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgpCisjICBpbmNsdWRlIDx0cjFfaW1wbC9yZWdleD4KKyNlbHNlCisjICBkZWZpbmUgX0dMSUJDWFhfSU5DTFVERV9BU19DWFgwWAorIyAgZGVmaW5lIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9UUjEKKyMgIGRlZmluZSBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorIyAgZGVmaW5lIF9HTElCQ1hYX1RSMQorIyAgaW5jbHVkZSA8dHIxX2ltcGwvcmVnZXg+CisjICB1bmRlZiBfR0xJQkNYWF9UUjEKKyMgIHVuZGVmIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVFIxCisjICB1bmRlZiBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxCisjICB1bmRlZiBfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYCisjZW5kaWYKKworI2VuZGlmIC8vIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9SRUdFWApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9zZXQgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3NldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjc4MDVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9zZXQKQEAgLTAsMCArMSw3MiBAQAorLy8gPHNldD4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBpbmNsdWRlL3NldAorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9TRVQKKyNkZWZpbmUgX0dMSUJDWFhfU0VUIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9zdGxfdHJlZS5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX3NldC5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX211bHRpc2V0Lmg+CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworIyBpbmNsdWRlIDxkZWJ1Zy9zZXQ+CisjZW5kaWYKKworI2lmZGVmIF9HTElCQ1hYX1BST0ZJTEUKKyMgaW5jbHVkZSA8cHJvZmlsZS9zZXQ+CisjZW5kaWYKKworI2VuZGlmIC8qIF9HTElCQ1hYX1NFVCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9zc3RyZWFtIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9zc3RyZWFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMDBhYzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3NzdHJlYW0KQEAgLTAsMCArMSw1NzYgQEAKKy8vIFN0cmluZyBiYXNlZCBzdHJlYW1zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwKKy8vIDIwMDYsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHNzdHJlYW0KKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyNy43ICBTdHJpbmctYmFzZWQgc3RyZWFtcworLy8KKworI2lmbmRlZiBfR0xJQkNYWF9TU1RSRUFNCisjZGVmaW5lIF9HTElCQ1hYX1NTVFJFQU0gMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxpc3RyZWFtPgorI2luY2x1ZGUgPG9zdHJlYW0+CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgLy8gWzI3LjcuMV0gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyaW5nYnVmCisgIC8qKgorICAgKiAgQGJyaWVmICBUaGUgYWN0dWFsIHdvcmsgb2YgaW5wdXQgYW5kIG91dHB1dCAoZm9yIHN0ZDo6c3RyaW5nKS4KKyAgICogIEBpbmdyb3VwIGlvCisgICAqCisgICAqICBUaGlzIGNsYXNzIGFzc29jaWF0ZXMgZWl0aGVyIG9yIGJvdGggb2YgaXRzIGlucHV0IGFuZCBvdXRwdXQgc2VxdWVuY2VzCisgICAqICB3aXRoIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycywgd2hpY2ggY2FuIGJlIGluaXRpYWxpemVkIGZyb20sIG9yIG1hZGUKKyAgICogIGF2YWlsYWJsZSBhcywgYSBAYyBzdGQ6OmJhc2ljX3N0cmluZy4gIChQYXJhcGhyYXNlZCBmcm9tIFsyNy43LjFdLzEuKQorICAgKgorICAgKiAgRm9yIHRoaXMgY2xhc3MsIG9wZW4gbW9kZXMgKG9mIHR5cGUgQGMgaW9zX2Jhc2U6Om9wZW5tb2RlKSBoYXZlCisgICAqICBAYyBpbiBzZXQgaWYgdGhlIGlucHV0IHNlcXVlbmNlIGNhbiBiZSByZWFkLCBhbmQgQGMgb3V0IHNldCBpZiB0aGUKKyAgICogIG91dHB1dCBzZXF1ZW5jZSBjYW4gYmUgd3JpdHRlbi4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgY2xhc3MgYmFzaWNfc3RyaW5nYnVmIDogcHVibGljIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIFR5cGVzOgorICAgICAgdHlwZWRlZiBfQ2hhclQgCQkJCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcmFpdHMgCQkJCQl0cmFpdHNfdHlwZTsKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDI1MS4gYmFzaWNfc3RyaW5nYnVmIG1pc3NpbmcgYWxsb2NhdG9yX3R5cGUKKyAgICAgIHR5cGVkZWYgX0FsbG9jCQkJCSAgICAgICAJYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSAJCWludF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgCQlwb3NfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIAkJb2ZmX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+ICAJX19zdHJlYW1idWZfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXJfdHlwZSwgX1RyYWl0cywgX0FsbG9jPiAJX19zdHJpbmdfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlCQlfX3NpemVfdHlwZTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgIC8vLyBQbGFjZSB0byBzdGFzaCBpbiB8fCBvdXQgfHwgaW4gfCBvdXQgc2V0dGluZ3MgZm9yIGN1cnJlbnQgc3RyaW5nYnVmLgorICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIAlfTV9tb2RlOworCisgICAgICAvLyBEYXRhIE1lbWJlcnM6CisgICAgICBfX3N0cmluZ190eXBlIAkJX01fc3RyaW5nOworCisgICAgcHVibGljOgorICAgICAgLy8gQ29uc3RydWN0b3JzOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTdGFydHMgd2l0aCBhbiBlbXB0eSBzdHJpbmcgYnVmZmVyLgorICAgICAgICogIEBwYXJhbSAgbW9kZSAgV2hldGhlciB0aGUgYnVmZmVyIGNhbiByZWFkLCBvciB3cml0ZSwgb3IgYm90aC4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGRlZmF1bHQgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIHBhcmVudCBjbGFzcyB1c2luZyBpdHMKKyAgICAgICAqICBvd24gZGVmYXVsdCBjdG9yLgorICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBiYXNpY19zdHJpbmdidWYoaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCisgICAgICA6IF9fc3RyZWFtYnVmX3R5cGUoKSwgX01fbW9kZShfX21vZGUpLCBfTV9zdHJpbmcoKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU3RhcnRzIHdpdGggYW4gZXhpc3Rpbmcgc3RyaW5nIGJ1ZmZlci4KKyAgICAgICAqICBAcGFyYW0gIHN0ciAgQSBzdHJpbmcgdG8gY29weSBhcyBhIHN0YXJ0aW5nIGJ1ZmZlci4KKyAgICAgICAqICBAcGFyYW0gIG1vZGUgIFdoZXRoZXIgdGhlIGJ1ZmZlciBjYW4gcmVhZCwgb3Igd3JpdGUsIG9yIGJvdGguCisgICAgICAgKgorICAgICAgICogIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIHBhcmVudCBjbGFzcyB1c2luZyBpdHMKKyAgICAgICAqICBvd24gZGVmYXVsdCBjdG9yLgorICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBiYXNpY19zdHJpbmdidWYoY29uc3QgX19zdHJpbmdfdHlwZSYgX19zdHIsCisJCSAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQorICAgICAgOiBfX3N0cmVhbWJ1Zl90eXBlKCksIF9NX21vZGUoKSwgX01fc3RyaW5nKF9fc3RyLmRhdGEoKSwgX19zdHIuc2l6ZSgpKQorICAgICAgeyBfTV9zdHJpbmdidWZfaW5pdChfX21vZGUpOyB9CisKKyAgICAgIC8vIEdldCBhbmQgc2V0OgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb3B5aW5nIG91dCB0aGUgc3RyaW5nIGJ1ZmZlci4KKyAgICAgICAqICBAcmV0dXJuICBBIGNvcHkgb2Ygb25lIG9mIHRoZSB1bmRlcmx5aW5nIHNlcXVlbmNlcy4KKyAgICAgICAqCisgICAgICAgKiAgPGVtPklmIHRoZSBidWZmZXIgaXMgb25seSBjcmVhdGVkIGluIGlucHV0IG1vZGUsIHRoZSB1bmRlcmx5aW5nCisgICAgICAgKiAgY2hhcmFjdGVyIHNlcXVlbmNlIGlzIGVxdWFsIHRvIHRoZSBpbnB1dCBzZXF1ZW5jZTsgb3RoZXJ3aXNlLCBpdAorICAgICAgICogIGlzIGVxdWFsIHRvIHRoZSBvdXRwdXQgc2VxdWVuY2UuPC9lbT4gWzI3LjcuMS4yXS8xCisgICAgICAqLworICAgICAgX19zdHJpbmdfdHlwZQorICAgICAgc3RyKCkgY29uc3QKKyAgICAgIHsKKwlfX3N0cmluZ190eXBlIF9fcmV0OworCWlmICh0aGlzLT5wcHRyKCkpCisJICB7CisJICAgIC8vIFRoZSBjdXJyZW50IGVncHRyKCkgbWF5IG5vdCBiZSB0aGUgYWN0dWFsIHN0cmluZyBlbmQuCisJICAgIGlmICh0aGlzLT5wcHRyKCkgPiB0aGlzLT5lZ3B0cigpKQorCSAgICAgIF9fcmV0ID0gX19zdHJpbmdfdHlwZSh0aGlzLT5wYmFzZSgpLCB0aGlzLT5wcHRyKCkpOworCSAgICBlbHNlCisgCSAgICAgIF9fcmV0ID0gX19zdHJpbmdfdHlwZSh0aGlzLT5wYmFzZSgpLCB0aGlzLT5lZ3B0cigpKTsKKwkgIH0KKwllbHNlCisJICBfX3JldCA9IF9NX3N0cmluZzsKKwlyZXR1cm4gX19yZXQ7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU2V0dGluZyBhIG5ldyBidWZmZXIuCisgICAgICAgKiAgQHBhcmFtICBzICBUaGUgc3RyaW5nIHRvIHVzZSBhcyBhIG5ldyBzZXF1ZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgRGVhbGxvY2F0ZXMgYW55IHByZXZpb3VzIHN0b3JlZCBzZXF1ZW5jZSwgdGhlbiBjb3BpZXMgQGEgcyB0bworICAgICAgICogIHVzZSBhcyBhIG5ldyBvbmUuCisgICAgICAqLworICAgICAgdm9pZAorICAgICAgc3RyKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fcykKKyAgICAgIHsKKwkvLyBDYW5ub3QgdXNlIF9NX3N0cmluZyA9IF9fcywgc2luY2UgdjMgc3RyaW5ncyBhcmUgQ09XLgorCV9NX3N0cmluZy5hc3NpZ24oX19zLmRhdGEoKSwgX19zLnNpemUoKSk7CisJX01fc3RyaW5nYnVmX2luaXQoX01fbW9kZSk7CisgICAgICB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvLyBDb21tb24gaW5pdGlhbGl6YXRpb24gY29kZSBnb2VzIGhlcmUuCisgICAgICB2b2lkCisgICAgICBfTV9zdHJpbmdidWZfaW5pdChpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQorICAgICAgeworCV9NX21vZGUgPSBfX21vZGU7CisJX19zaXplX3R5cGUgX19sZW4gPSAwOworCWlmIChfTV9tb2RlICYgKGlvc19iYXNlOjphdGUgfCBpb3NfYmFzZTo6YXBwKSkKKwkgIF9fbGVuID0gX01fc3RyaW5nLnNpemUoKTsKKwlfTV9zeW5jKGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX01fc3RyaW5nLmRhdGEoKSksIDAsIF9fbGVuKTsKKyAgICAgIH0KKworICAgICAgdmlydHVhbCBzdHJlYW1zaXplCisgICAgICBzaG93bWFueWMoKQorICAgICAgeyAKKwlzdHJlYW1zaXplIF9fcmV0ID0gLTE7CisJaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6aW4pCisJICB7CisJICAgIF9NX3VwZGF0ZV9lZ3B0cigpOworCSAgICBfX3JldCA9IHRoaXMtPmVncHRyKCkgLSB0aGlzLT5ncHRyKCk7CisJICB9CisJcmV0dXJuIF9fcmV0OworICAgICAgfQorCisgICAgICB2aXJ0dWFsIGludF90eXBlCisgICAgICB1bmRlcmZsb3coKTsKKworICAgICAgdmlydHVhbCBpbnRfdHlwZQorICAgICAgcGJhY2tmYWlsKGludF90eXBlIF9fYyA9IHRyYWl0c190eXBlOjplb2YoKSk7CisKKyAgICAgIHZpcnR1YWwgaW50X3R5cGUKKyAgICAgIG92ZXJmbG93KGludF90eXBlIF9fYyA9IHRyYWl0c190eXBlOjplb2YoKSk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTWFuaXB1bGF0ZXMgdGhlIGJ1ZmZlci4KKyAgICAgICAqICBAcGFyYW0gIHMgIFBvaW50ZXIgdG8gYSBidWZmZXIgYXJlYS4KKyAgICAgICAqICBAcGFyYW0gIG4gIFNpemUgb2YgQGEgcy4KKyAgICAgICAqICBAcmV0dXJuICBAYyB0aGlzCisgICAgICAgKgorICAgICAgICogIElmIG5vIGJ1ZmZlciBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQsIGFuZCBib3RoIEBhIHMgYW5kIEBhIG4gYXJlCisgICAgICAgKiAgbm9uLXplcm8sIHRoZW4gQGMgcyBpcyB1c2VkIGFzIGEgYnVmZmVyOyBzZWUKKyAgICAgICAqICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9saWJzdGRjKysvbWFudWFsL2JrMDFwdDExY2gyNXMwMi5odG1sCisgICAgICAgKiAgZm9yIG1vcmUuCisgICAgICAqLworICAgICAgdmlydHVhbCBfX3N0cmVhbWJ1Zl90eXBlKgorICAgICAgc2V0YnVmKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKKyAgICAgIHsKKwlpZiAoX19zICYmIF9fbiA+PSAwKQorCSAgeworCSAgICAvLyBUaGlzIGlzIGltcGxlbWVudGF0aW9uLWRlZmluZWQgYmVoYXZpb3IsIGFuZCBhc3N1bWVzCisJICAgIC8vIHRoYXQgYW4gZXh0ZXJuYWwgY2hhcl90eXBlIGFycmF5IG9mIGxlbmd0aCBfX24gZXhpc3RzCisJICAgIC8vIGFuZCBoYXMgYmVlbiBwcmUtYWxsb2NhdGVkLiBJZiB0aGlzIGlzIG5vdCB0aGUgY2FzZSwKKwkgICAgLy8gdGhpbmdzIHdpbGwgcXVpY2tseSBibG93IHVwLgorCSAgICAKKwkgICAgLy8gU3RlcCAxOiBEZXN0cm95IHRoZSBjdXJyZW50IGludGVybmFsIGFycmF5LgorCSAgICBfTV9zdHJpbmcuY2xlYXIoKTsKKwkgICAgCisJICAgIC8vIFN0ZXAgMjogVXNlIHRoZSBleHRlcm5hbCBhcnJheS4KKwkgICAgX01fc3luYyhfX3MsIF9fbiwgMCk7CisJICB9CisJcmV0dXJuIHRoaXM7CisgICAgICB9CisKKyAgICAgIHZpcnR1YWwgcG9zX3R5cGUKKyAgICAgIHNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LAorCSAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsKKworICAgICAgdmlydHVhbCBwb3NfdHlwZQorICAgICAgc2Vla3Bvcyhwb3NfdHlwZSBfX3NwLAorCSAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsKKworICAgICAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNvcnJlY3RseSB1cGRhdGluZyB0aGUgaW50ZXJuYWwgYnVmZmVyCisgICAgICAvLyBmb3IgYSBwYXJ0aWN1bGFyIF9NX3N0cmluZywgZHVlIHRvIGluaXRpYWxpemF0aW9uIG9yIHJlLXNpemluZworICAgICAgLy8gb2YgYW4gZXhpc3RpbmcgX01fc3RyaW5nLgorICAgICAgdm9pZAorICAgICAgX01fc3luYyhjaGFyX3R5cGUqIF9fYmFzZSwgX19zaXplX3R5cGUgX19pLCBfX3NpemVfdHlwZSBfX28pOworCisgICAgICAvLyBJbnRlcm5hbCBmdW5jdGlvbiBmb3IgY29ycmVjdGx5IHVwZGF0aW5nIGVncHRyKCkgdG8gdGhlIGFjdHVhbAorICAgICAgLy8gc3RyaW5nIGVuZC4KKyAgICAgIHZvaWQKKyAgICAgIF9NX3VwZGF0ZV9lZ3B0cigpCisgICAgICB7CisJY29uc3QgYm9vbCBfX3Rlc3RpbiA9IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47CisJaWYgKHRoaXMtPnBwdHIoKSAmJiB0aGlzLT5wcHRyKCkgPiB0aGlzLT5lZ3B0cigpKQorCSAgeworCSAgICBpZiAoX190ZXN0aW4pCisJICAgICAgdGhpcy0+c2V0Zyh0aGlzLT5lYmFjaygpLCB0aGlzLT5ncHRyKCksIHRoaXMtPnBwdHIoKSk7CisJICAgIGVsc2UKKwkgICAgICB0aGlzLT5zZXRnKHRoaXMtPnBwdHIoKSwgdGhpcy0+cHB0cigpLCB0aGlzLT5wcHRyKCkpOworCSAgfQorICAgICAgfQorICAgIH07CisKKworICAvLyBbMjcuNy4yXSBUZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtCisgIC8qKgorICAgKiAgQGJyaWVmICBDb250cm9sbGluZyBpbnB1dCBmb3Igc3RkOjpzdHJpbmcuCisgICAqICBAaW5ncm91cCBpbworICAgKgorICAgKiAgVGhpcyBjbGFzcyBzdXBwb3J0cyByZWFkaW5nIGZyb20gb2JqZWN0cyBvZiB0eXBlIHN0ZDo6YmFzaWNfc3RyaW5nLAorICAgKiAgdXNpbmcgdGhlIGluaGVyaXRlZCBmdW5jdGlvbnMgZnJvbSBzdGQ6OmJhc2ljX2lzdHJlYW0uICBUbyBjb250cm9sCisgICAqICB0aGUgYXNzb2NpYXRlZCBzZXF1ZW5jZSwgYW4gaW5zdGFuY2Ugb2Ygc3RkOjpiYXNpY19zdHJpbmdidWYgaXMgdXNlZCwKKyAgICogIHdoaWNoIHRoaXMgcGFnZSByZWZlcnMgdG8gYXMgQGMgc2IuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW0gOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIFR5cGVzOgorICAgICAgdHlwZWRlZiBfQ2hhclQgCQkJCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcmFpdHMgCQkJCQl0cmFpdHNfdHlwZTsKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDI1MS4gYmFzaWNfc3RyaW5nYnVmIG1pc3NpbmcgYWxsb2NhdG9yX3R5cGUKKyAgICAgIHR5cGVkZWYgX0FsbG9jCQkJCSAgICAgICAJYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSAJCWludF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgCQlwb3NfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIAkJb2ZmX3R5cGU7CisKKyAgICAgIC8vIE5vbi1zdGFuZGFyZCB0eXBlczoKKyAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiAJX19zdHJpbmdfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiAJX19zdHJpbmdidWZfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPglfX2lzdHJlYW1fdHlwZTsKKworICAgIHByaXZhdGU6CisgICAgICBfX3N0cmluZ2J1Zl90eXBlCV9NX3N0cmluZ2J1ZjsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vIENvbnN0cnVjdG9yczoKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRGVmYXVsdCBjb25zdHJ1Y3RvciBzdGFydHMgd2l0aCBhbiBlbXB0eSBzdHJpbmcgYnVmZmVyLgorICAgICAgICogIEBwYXJhbSAgbW9kZSAgV2hldGhlciB0aGUgYnVmZmVyIGNhbiByZWFkLCBvciB3cml0ZSwgb3IgYm90aC4KKyAgICAgICAqCisgICAgICAgKiAgQGMgaW9zX2Jhc2U6OmluIGlzIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgaW4gQGEgbW9kZS4KKyAgICAgICAqCisgICAgICAgKiAgSW5pdGlhbGl6ZXMgQGMgc2IgdXNpbmcgQGMgbW9kZXxpbiwgYW5kIHBhc3NlcyBAYyAmc2IgdG8gdGhlIGJhc2UKKyAgICAgICAqICBjbGFzcyBpbml0aWFsaXplci4gIERvZXMgbm90IGFsbG9jYXRlIGFueSBidWZmZXIuCisgICAgICAgKgorICAgICAgICogIFRoYXQncyBhIGxpZS4gIFdlIGluaXRpYWxpemUgdGhlIGJhc2UgY2xhc3Mgd2l0aCBOVUxMLCBiZWNhdXNlIHRoZQorICAgICAgICogIHN0cmluZyBjbGFzcyBkb2VzIGl0cyBvd24gbWVtb3J5IG1hbmFnZW1lbnQuCisgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGJhc2ljX2lzdHJpbmdzdHJlYW0oaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbikKKyAgICAgIDogX19pc3RyZWFtX3R5cGUoKSwgX01fc3RyaW5nYnVmKF9fbW9kZSB8IGlvc19iYXNlOjppbikKKyAgICAgIHsgdGhpcy0+aW5pdCgmX01fc3RyaW5nYnVmKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFN0YXJ0cyB3aXRoIGFuIGV4aXN0aW5nIHN0cmluZyBidWZmZXIuCisgICAgICAgKiAgQHBhcmFtICBzdHIgIEEgc3RyaW5nIHRvIGNvcHkgYXMgYSBzdGFydGluZyBidWZmZXIuCisgICAgICAgKiAgQHBhcmFtICBtb2RlICBXaGV0aGVyIHRoZSBidWZmZXIgY2FuIHJlYWQsIG9yIHdyaXRlLCBvciBib3RoLgorICAgICAgICoKKyAgICAgICAqICBAYyBpb3NfYmFzZTo6aW4gaXMgYXV0b21hdGljYWxseSBpbmNsdWRlZCBpbiBAYSBtb2RlLgorICAgICAgICoKKyAgICAgICAqICBJbml0aWFsaXplcyBAYyBzYiB1c2luZyBAYSBzdHIgYW5kIEBjIG1vZGV8aW4sIGFuZCBwYXNzZXMgQGMgJnNiCisgICAgICAgKiAgdG8gdGhlIGJhc2UgY2xhc3MgaW5pdGlhbGl6ZXIuCisgICAgICAgKgorICAgICAgICogIFRoYXQncyBhIGxpZS4gIFdlIGluaXRpYWxpemUgdGhlIGJhc2UgY2xhc3Mgd2l0aCBOVUxMLCBiZWNhdXNlIHRoZQorICAgICAgICogIHN0cmluZyBjbGFzcyBkb2VzIGl0cyBvd24gbWVtb3J5IG1hbmFnZW1lbnQuCisgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGJhc2ljX2lzdHJpbmdzdHJlYW0oY29uc3QgX19zdHJpbmdfdHlwZSYgX19zdHIsCisJCQkgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4pCisgICAgICA6IF9faXN0cmVhbV90eXBlKCksIF9NX3N0cmluZ2J1ZihfX3N0ciwgX19tb2RlIHwgaW9zX2Jhc2U6OmluKQorICAgICAgeyB0aGlzLT5pbml0KCZfTV9zdHJpbmdidWYpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgVGhlIGRlc3RydWN0b3IgZG9lcyBub3RoaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGUgYnVmZmVyIGlzIGRlYWxsb2NhdGVkIGJ5IHRoZSBzdHJpbmdidWYgb2JqZWN0LCBub3QgdGhlCisgICAgICAgKiAgZm9ybWF0dGluZyBzdHJlYW0uCisgICAgICAqLworICAgICAgfmJhc2ljX2lzdHJpbmdzdHJlYW0oKQorICAgICAgeyB9CisKKyAgICAgIC8vIE1lbWJlcnM6CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFjY2Vzc2luZyB0aGUgdW5kZXJseWluZyBidWZmZXIuCisgICAgICAgKiAgQHJldHVybiAgVGhlIGN1cnJlbnQgYmFzaWNfc3RyaW5nYnVmIGJ1ZmZlci4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBoaWRlcyBib3RoIHNpZ25hdHVyZXMgb2Ygc3RkOjpiYXNpY19pb3M6OnJkYnVmKCkuCisgICAgICAqLworICAgICAgX19zdHJpbmdidWZfdHlwZSoKKyAgICAgIHJkYnVmKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8X19zdHJpbmdidWZfdHlwZSo+KCZfTV9zdHJpbmdidWYpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29weWluZyBvdXQgdGhlIHN0cmluZyBidWZmZXIuCisgICAgICAgKiAgQHJldHVybiAgQGMgcmRidWYoKS0+c3RyKCkKKyAgICAgICovCisgICAgICBfX3N0cmluZ190eXBlCisgICAgICBzdHIoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fc3RyaW5nYnVmLnN0cigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU2V0dGluZyBhIG5ldyBidWZmZXIuCisgICAgICAgKiAgQHBhcmFtICBzICBUaGUgc3RyaW5nIHRvIHVzZSBhcyBhIG5ldyBzZXF1ZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgQ2FsbHMgQGMgcmRidWYoKS0+c3RyKHMpLgorICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHN0cihjb25zdCBfX3N0cmluZ190eXBlJiBfX3MpCisgICAgICB7IF9NX3N0cmluZ2J1Zi5zdHIoX19zKTsgfQorICAgIH07CisKKworICAvLyBbMjcuNy4zXSBUZW1wbGF0ZSBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtCisgIC8qKgorICAgKiAgQGJyaWVmICBDb250cm9sbGluZyBvdXRwdXQgZm9yIHN0ZDo6c3RyaW5nLgorICAgKiAgQGluZ3JvdXAgaW8KKyAgICoKKyAgICogIFRoaXMgY2xhc3Mgc3VwcG9ydHMgd3JpdGluZyB0byBvYmplY3RzIG9mIHR5cGUgc3RkOjpiYXNpY19zdHJpbmcsCisgICAqICB1c2luZyB0aGUgaW5oZXJpdGVkIGZ1bmN0aW9ucyBmcm9tIHN0ZDo6YmFzaWNfb3N0cmVhbS4gIFRvIGNvbnRyb2wKKyAgICogIHRoZSBhc3NvY2lhdGVkIHNlcXVlbmNlLCBhbiBpbnN0YW5jZSBvZiBzdGQ6OmJhc2ljX3N0cmluZ2J1ZiBpcyB1c2VkLAorICAgKiAgd2hpY2ggdGhpcyBwYWdlIHJlZmVycyB0byBhcyBAYyBzYi4KKyAgKi8KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGNsYXNzIGJhc2ljX29zdHJpbmdzdHJlYW0gOiBwdWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIFR5cGVzOgorICAgICAgdHlwZWRlZiBfQ2hhclQgCQkJCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcmFpdHMgCQkJCQl0cmFpdHNfdHlwZTsKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDI1MS4gYmFzaWNfc3RyaW5nYnVmIG1pc3NpbmcgYWxsb2NhdG9yX3R5cGUKKyAgICAgIHR5cGVkZWYgX0FsbG9jCQkJCSAgICAgICAJYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSAJCWludF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgCQlwb3NfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIAkJb2ZmX3R5cGU7CisKKyAgICAgIC8vIE5vbi1zdGFuZGFyZCB0eXBlczoKKyAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiAJX19zdHJpbmdfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiAJX19zdHJpbmdidWZfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPglfX29zdHJlYW1fdHlwZTsKKworICAgIHByaXZhdGU6CisgICAgICBfX3N0cmluZ2J1Zl90eXBlCV9NX3N0cmluZ2J1ZjsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vIENvbnN0cnVjdG9ycy9kZXN0cnVjdG9yOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBEZWZhdWx0IGNvbnN0cnVjdG9yIHN0YXJ0cyB3aXRoIGFuIGVtcHR5IHN0cmluZyBidWZmZXIuCisgICAgICAgKiAgQHBhcmFtICBtb2RlICBXaGV0aGVyIHRoZSBidWZmZXIgY2FuIHJlYWQsIG9yIHdyaXRlLCBvciBib3RoLgorICAgICAgICoKKyAgICAgICAqICBAYyBpb3NfYmFzZTo6b3V0IGlzIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgaW4gQGEgbW9kZS4KKyAgICAgICAqCisgICAgICAgKiAgSW5pdGlhbGl6ZXMgQGMgc2IgdXNpbmcgQGMgbW9kZXxvdXQsIGFuZCBwYXNzZXMgQGMgJnNiIHRvIHRoZSBiYXNlCisgICAgICAgKiAgY2xhc3MgaW5pdGlhbGl6ZXIuICBEb2VzIG5vdCBhbGxvY2F0ZSBhbnkgYnVmZmVyLgorICAgICAgICoKKyAgICAgICAqICBUaGF0J3MgYSBsaWUuICBXZSBpbml0aWFsaXplIHRoZSBiYXNlIGNsYXNzIHdpdGggTlVMTCwgYmVjYXVzZSB0aGUKKyAgICAgICAqICBzdHJpbmcgY2xhc3MgZG9lcyBpdHMgb3duIG1lbW9yeSBtYW5hZ2VtZW50LgorICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBiYXNpY19vc3RyaW5nc3RyZWFtKGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6b3V0KQorICAgICAgOiBfX29zdHJlYW1fdHlwZSgpLCBfTV9zdHJpbmdidWYoX19tb2RlIHwgaW9zX2Jhc2U6Om91dCkKKyAgICAgIHsgdGhpcy0+aW5pdCgmX01fc3RyaW5nYnVmKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFN0YXJ0cyB3aXRoIGFuIGV4aXN0aW5nIHN0cmluZyBidWZmZXIuCisgICAgICAgKiAgQHBhcmFtICBzdHIgIEEgc3RyaW5nIHRvIGNvcHkgYXMgYSBzdGFydGluZyBidWZmZXIuCisgICAgICAgKiAgQHBhcmFtICBtb2RlICBXaGV0aGVyIHRoZSBidWZmZXIgY2FuIHJlYWQsIG9yIHdyaXRlLCBvciBib3RoLgorICAgICAgICoKKyAgICAgICAqICBAYyBpb3NfYmFzZTo6b3V0IGlzIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgaW4gQGEgbW9kZS4KKyAgICAgICAqCisgICAgICAgKiAgSW5pdGlhbGl6ZXMgQGMgc2IgdXNpbmcgQGEgc3RyIGFuZCBAYyBtb2RlfG91dCwgYW5kIHBhc3NlcyBAYyAmc2IKKyAgICAgICAqICB0byB0aGUgYmFzZSBjbGFzcyBpbml0aWFsaXplci4KKyAgICAgICAqCisgICAgICAgKiAgVGhhdCdzIGEgbGllLiAgV2UgaW5pdGlhbGl6ZSB0aGUgYmFzZSBjbGFzcyB3aXRoIE5VTEwsIGJlY2F1c2UgdGhlCisgICAgICAgKiAgc3RyaW5nIGNsYXNzIGRvZXMgaXRzIG93biBtZW1vcnkgbWFuYWdlbWVudC4KKyAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgYmFzaWNfb3N0cmluZ3N0cmVhbShjb25zdCBfX3N0cmluZ190eXBlJiBfX3N0ciwKKwkJCSAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjpvdXQpCisgICAgICA6IF9fb3N0cmVhbV90eXBlKCksIF9NX3N0cmluZ2J1ZihfX3N0ciwgX19tb2RlIHwgaW9zX2Jhc2U6Om91dCkKKyAgICAgIHsgdGhpcy0+aW5pdCgmX01fc3RyaW5nYnVmKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFRoZSBkZXN0cnVjdG9yIGRvZXMgbm90aGluZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGJ1ZmZlciBpcyBkZWFsbG9jYXRlZCBieSB0aGUgc3RyaW5nYnVmIG9iamVjdCwgbm90IHRoZQorICAgICAgICogIGZvcm1hdHRpbmcgc3RyZWFtLgorICAgICAgKi8KKyAgICAgIH5iYXNpY19vc3RyaW5nc3RyZWFtKCkKKyAgICAgIHsgfQorCisgICAgICAvLyBNZW1iZXJzOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBY2Nlc3NpbmcgdGhlIHVuZGVybHlpbmcgYnVmZmVyLgorICAgICAgICogIEByZXR1cm4gIFRoZSBjdXJyZW50IGJhc2ljX3N0cmluZ2J1ZiBidWZmZXIuCisgICAgICAgKgorICAgICAgICogIFRoaXMgaGlkZXMgYm90aCBzaWduYXR1cmVzIG9mIHN0ZDo6YmFzaWNfaW9zOjpyZGJ1ZigpLgorICAgICAgKi8KKyAgICAgIF9fc3RyaW5nYnVmX3R5cGUqCisgICAgICByZGJ1ZigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fc3RyaW5nYnVmX3R5cGUqPigmX01fc3RyaW5nYnVmKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvcHlpbmcgb3V0IHRoZSBzdHJpbmcgYnVmZmVyLgorICAgICAgICogIEByZXR1cm4gIEBjIHJkYnVmKCktPnN0cigpCisgICAgICAqLworICAgICAgX19zdHJpbmdfdHlwZQorICAgICAgc3RyKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3N0cmluZ2J1Zi5zdHIoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNldHRpbmcgYSBuZXcgYnVmZmVyLgorICAgICAgICogIEBwYXJhbSAgcyAgVGhlIHN0cmluZyB0byB1c2UgYXMgYSBuZXcgc2VxdWVuY2UuCisgICAgICAgKgorICAgICAgICogIENhbGxzIEBjIHJkYnVmKCktPnN0cihzKS4KKyAgICAgICovCisgICAgICB2b2lkCisgICAgICBzdHIoY29uc3QgX19zdHJpbmdfdHlwZSYgX19zKQorICAgICAgeyBfTV9zdHJpbmdidWYuc3RyKF9fcyk7IH0KKyAgICB9OworCisKKyAgLy8gWzI3LjcuNF0gVGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyaW5nc3RyZWFtCisgIC8qKgorICAgKiAgQGJyaWVmICBDb250cm9sbGluZyBpbnB1dCBhbmQgb3V0cHV0IGZvciBzdGQ6OnN0cmluZy4KKyAgICogIEBpbmdyb3VwIGlvCisgICAqCisgICAqICBUaGlzIGNsYXNzIHN1cHBvcnRzIHJlYWRpbmcgZnJvbSBhbmQgd3JpdGluZyB0byBvYmplY3RzIG9mIHR5cGUKKyAgICogIHN0ZDo6YmFzaWNfc3RyaW5nLCB1c2luZyB0aGUgaW5oZXJpdGVkIGZ1bmN0aW9ucyBmcm9tCisgICAqICBzdGQ6OmJhc2ljX2lvc3RyZWFtLiAgVG8gY29udHJvbCB0aGUgYXNzb2NpYXRlZCBzZXF1ZW5jZSwgYW4gaW5zdGFuY2UKKyAgICogIG9mIHN0ZDo6YmFzaWNfc3RyaW5nYnVmIGlzIHVzZWQsIHdoaWNoIHRoaXMgcGFnZSByZWZlcnMgdG8gYXMgQGMgc2IuCisgICovCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBjbGFzcyBiYXNpY19zdHJpbmdzdHJlYW0gOiBwdWJsaWMgYmFzaWNfaW9zdHJlYW08X0NoYXJULCBfVHJhaXRzPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlczoKKyAgICAgIHR5cGVkZWYgX0NoYXJUIAkJCQkJY2hhcl90eXBlOworICAgICAgdHlwZWRlZiBfVHJhaXRzIAkJCQkJdHJhaXRzX3R5cGU7CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyNTEuIGJhc2ljX3N0cmluZ2J1ZiBtaXNzaW5nIGFsbG9jYXRvcl90eXBlCisgICAgICB0eXBlZGVmIF9BbGxvYwkJCQkgICAgICAgCWFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgCQlpbnRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIAkJcG9zX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZSAJCW9mZl90eXBlOworCisgICAgICAvLyBOb24tc3RhbmRhcmQgVHlwZXM6CisgICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gCV9fc3RyaW5nX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gCV9fc3RyaW5nYnVmX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+CV9faW9zdHJlYW1fdHlwZTsKKworICAgIHByaXZhdGU6CisgICAgICBfX3N0cmluZ2J1Zl90eXBlCV9NX3N0cmluZ2J1ZjsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vIENvbnN0cnVjdG9ycy9kZXN0cnVjdG9ycworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBEZWZhdWx0IGNvbnN0cnVjdG9yIHN0YXJ0cyB3aXRoIGFuIGVtcHR5IHN0cmluZyBidWZmZXIuCisgICAgICAgKiAgQHBhcmFtICBtb2RlICBXaGV0aGVyIHRoZSBidWZmZXIgY2FuIHJlYWQsIG9yIHdyaXRlLCBvciBib3RoLgorICAgICAgICoKKyAgICAgICAqICBJbml0aWFsaXplcyBAYyBzYiB1c2luZyBAYyBtb2RlLCBhbmQgcGFzc2VzIEBjICZzYiB0byB0aGUgYmFzZQorICAgICAgICogIGNsYXNzIGluaXRpYWxpemVyLiAgRG9lcyBub3QgYWxsb2NhdGUgYW55IGJ1ZmZlci4KKyAgICAgICAqCisgICAgICAgKiAgVGhhdCdzIGEgbGllLiAgV2UgaW5pdGlhbGl6ZSB0aGUgYmFzZSBjbGFzcyB3aXRoIE5VTEwsIGJlY2F1c2UgdGhlCisgICAgICAgKiAgc3RyaW5nIGNsYXNzIGRvZXMgaXRzIG93biBtZW1vcnkgbWFuYWdlbWVudC4KKyAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgYmFzaWNfc3RyaW5nc3RyZWFtKGlvc19iYXNlOjpvcGVubW9kZSBfX20gPSBpb3NfYmFzZTo6b3V0IHwgaW9zX2Jhc2U6OmluKQorICAgICAgOiBfX2lvc3RyZWFtX3R5cGUoKSwgX01fc3RyaW5nYnVmKF9fbSkKKyAgICAgIHsgdGhpcy0+aW5pdCgmX01fc3RyaW5nYnVmKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFN0YXJ0cyB3aXRoIGFuIGV4aXN0aW5nIHN0cmluZyBidWZmZXIuCisgICAgICAgKiAgQHBhcmFtICBzdHIgIEEgc3RyaW5nIHRvIGNvcHkgYXMgYSBzdGFydGluZyBidWZmZXIuCisgICAgICAgKiAgQHBhcmFtICBtb2RlICBXaGV0aGVyIHRoZSBidWZmZXIgY2FuIHJlYWQsIG9yIHdyaXRlLCBvciBib3RoLgorICAgICAgICoKKyAgICAgICAqICBJbml0aWFsaXplcyBAYyBzYiB1c2luZyBAYSBzdHIgYW5kIEBjIG1vZGUsIGFuZCBwYXNzZXMgQGMgJnNiCisgICAgICAgKiAgdG8gdGhlIGJhc2UgY2xhc3MgaW5pdGlhbGl6ZXIuCisgICAgICAgKgorICAgICAgICogIFRoYXQncyBhIGxpZS4gIFdlIGluaXRpYWxpemUgdGhlIGJhc2UgY2xhc3Mgd2l0aCBOVUxMLCBiZWNhdXNlIHRoZQorICAgICAgICogIHN0cmluZyBjbGFzcyBkb2VzIGl0cyBvd24gbWVtb3J5IG1hbmFnZW1lbnQuCisgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGJhc2ljX3N0cmluZ3N0cmVhbShjb25zdCBfX3N0cmluZ190eXBlJiBfX3N0ciwKKwkJCSBpb3NfYmFzZTo6b3Blbm1vZGUgX19tID0gaW9zX2Jhc2U6Om91dCB8IGlvc19iYXNlOjppbikKKyAgICAgIDogX19pb3N0cmVhbV90eXBlKCksIF9NX3N0cmluZ2J1ZihfX3N0ciwgX19tKQorICAgICAgeyB0aGlzLT5pbml0KCZfTV9zdHJpbmdidWYpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgVGhlIGRlc3RydWN0b3IgZG9lcyBub3RoaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGUgYnVmZmVyIGlzIGRlYWxsb2NhdGVkIGJ5IHRoZSBzdHJpbmdidWYgb2JqZWN0LCBub3QgdGhlCisgICAgICAgKiAgZm9ybWF0dGluZyBzdHJlYW0uCisgICAgICAqLworICAgICAgfmJhc2ljX3N0cmluZ3N0cmVhbSgpCisgICAgICB7IH0KKworICAgICAgLy8gTWVtYmVyczoKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQWNjZXNzaW5nIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlci4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgY3VycmVudCBiYXNpY19zdHJpbmdidWYgYnVmZmVyLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGhpZGVzIGJvdGggc2lnbmF0dXJlcyBvZiBzdGQ6OmJhc2ljX2lvczo6cmRidWYoKS4KKyAgICAgICovCisgICAgICBfX3N0cmluZ2J1Zl90eXBlKgorICAgICAgcmRidWYoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfY2FzdDxfX3N0cmluZ2J1Zl90eXBlKj4oJl9NX3N0cmluZ2J1Zik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb3B5aW5nIG91dCB0aGUgc3RyaW5nIGJ1ZmZlci4KKyAgICAgICAqICBAcmV0dXJuICBAYyByZGJ1ZigpLT5zdHIoKQorICAgICAgKi8KKyAgICAgIF9fc3RyaW5nX3R5cGUKKyAgICAgIHN0cigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9zdHJpbmdidWYuc3RyKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTZXR0aW5nIGEgbmV3IGJ1ZmZlci4KKyAgICAgICAqICBAcGFyYW0gIHMgIFRoZSBzdHJpbmcgdG8gdXNlIGFzIGEgbmV3IHNlcXVlbmNlLgorICAgICAgICoKKyAgICAgICAqICBDYWxscyBAYyByZGJ1ZigpLT5zdHIocykuCisgICAgICAqLworICAgICAgdm9pZAorICAgICAgc3RyKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fcykKKyAgICAgIHsgX01fc3RyaW5nYnVmLnN0cihfX3MpOyB9CisgICAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjaWZuZGVmIF9HTElCQ1hYX0VYUE9SVF9URU1QTEFURQorIyBpbmNsdWRlIDxiaXRzL3NzdHJlYW0udGNjPgorI2VuZGlmCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9TU1RSRUFNICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3N0YWNrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9zdGFjawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWUyYzcyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9zdGFjawpAQCAtMCwwICsxLDY0IEBACisvLyA8c3RhY2s+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5NworICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGluY2x1ZGUvc3RhY2sKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfU1RBQ0sKKyNkZWZpbmUgX0dMSUJDWFhfU1RBQ0sgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxkZXF1ZT4KKyNpbmNsdWRlIDxiaXRzL3N0bF9zdGFjay5oPgorCisjZW5kaWYgLyogX0dMSUJDWFhfU1RBQ0sgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvc3RkYXRvbWljLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3N0ZGF0b21pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMjRiNDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3N0ZGF0b21pYy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8vIC0qLSBDKysgLSotIGNvbXBhdGliaWxpdHkgaGVhZGVyLgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHN0ZGF0b21pYy5oCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjaW5jbHVkZSA8Yml0cy9hdG9taWNfYmFzZS5oPgorCisjaWZuZGVmIF9HTElCQ1hYX1NUREFUT01JQ19ICisjZGVmaW5lIF9HTElCQ1hYX1NUREFUT01JQ19IIDEKKworI2lmZGVmIF9HTElCQ1hYX05BTUVTUEFDRV9DCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3N0ZGV4Y2VwdCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvc3RkZXhjZXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNWM5NzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3N0ZGV4Y2VwdApAQCAtMCwwICsxLDE1MCBAQAorLy8gU3RhbmRhcmQgZXhjZXB0aW9uIGNsYXNzZXMgIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwNSwgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgc3RkZXhjZXB0CisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisvLworLy8gSVNPIEMrKyAxOS4xICBFeGNlcHRpb24gY2xhc3NlcworLy8KKworI2lmbmRlZiBfR0xJQkNYWF9TVERFWENFUFQKKyNkZWZpbmUgX0dMSUJDWFhfU1RERVhDRVBUIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8ZXhjZXB0aW9uPgorI2luY2x1ZGUgPHN0cmluZz4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgZXhjZXB0aW9ucworICAgKiBAeworICAgKi8KKworICAvKiogTG9naWMgZXJyb3JzIHJlcHJlc2VudCBwcm9ibGVtcyBpbiB0aGUgaW50ZXJuYWwgbG9naWMgb2YgYSBwcm9ncmFtOworICAgKiAgaW4gdGhlb3J5LCB0aGVzZSBhcmUgcHJldmVudGFibGUsIGFuZCBldmVuIGRldGVjdGFibGUgYmVmb3JlIHRoZQorICAgKiAgcHJvZ3JhbSBydW5zIChlLmcuLCB2aW9sYXRpb25zIG9mIGNsYXNzIGludmFyaWFudHMpLgorICAgKiAgQGJyaWVmIE9uZSBvZiB0d28gc3ViY2xhc3NlcyBvZiBleGNlcHRpb24uCisgICAqLworICBjbGFzcyBsb2dpY19lcnJvciA6IHB1YmxpYyBleGNlcHRpb24gCisgIHsKKyAgICBzdHJpbmcgX01fbXNnOworCisgIHB1YmxpYzoKKyAgICAvKiogVGFrZXMgYSBjaGFyYWN0ZXIgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGVycm9yLiAgKi8KKyAgICBleHBsaWNpdCAKKyAgICBsb2dpY19lcnJvcihjb25zdCBzdHJpbmcmIF9fYXJnKTsKKworICAgIHZpcnR1YWwgCisgICAgfmxvZ2ljX2Vycm9yKCkgdGhyb3coKTsKKworICAgIC8qKiBSZXR1cm5zIGEgQy1zdHlsZSBjaGFyYWN0ZXIgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGdlbmVyYWwgY2F1c2Ugb2YKKyAgICAgKiAgdGhlIGN1cnJlbnQgZXJyb3IgKHRoZSBzYW1lIHN0cmluZyBwYXNzZWQgdG8gdGhlIGN0b3IpLiAgKi8KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIAorICAgIHdoYXQoKSBjb25zdCB0aHJvdygpOworICB9OworCisgIC8qKiBUaHJvd24gYnkgdGhlIGxpYnJhcnksIG9yIGJ5IHlvdSwgdG8gcmVwb3J0IGRvbWFpbiBlcnJvcnMgKGRvbWFpbiBpbgorICAgKiAgdGhlIG1hdGhlbWF0aWNhbCBzZW5zZSkuICAqLworICBjbGFzcyBkb21haW5fZXJyb3IgOiBwdWJsaWMgbG9naWNfZXJyb3IgCisgIHsKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IGRvbWFpbl9lcnJvcihjb25zdCBzdHJpbmcmIF9fYXJnKTsKKyAgfTsKKworICAvKiogVGhyb3duIHRvIHJlcG9ydCBpbnZhbGlkIGFyZ3VtZW50cyB0byBmdW5jdGlvbnMuICAqLworICBjbGFzcyBpbnZhbGlkX2FyZ3VtZW50IDogcHVibGljIGxvZ2ljX2Vycm9yIAorICB7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBpbnZhbGlkX2FyZ3VtZW50KGNvbnN0IHN0cmluZyYgX19hcmcpOworICB9OworCisgIC8qKiBUaHJvd24gd2hlbiBhbiBvYmplY3QgaXMgY29uc3RydWN0ZWQgdGhhdCB3b3VsZCBleGNlZWQgaXRzIG1heGltdW0KKyAgICogIHBlcm1pdHRlZCBzaXplIChlLmcuLCBhIGJhc2ljX3N0cmluZyBpbnN0YW5jZSkuICAqLworICBjbGFzcyBsZW5ndGhfZXJyb3IgOiBwdWJsaWMgbG9naWNfZXJyb3IgCisgIHsKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IGxlbmd0aF9lcnJvcihjb25zdCBzdHJpbmcmIF9fYXJnKTsKKyAgfTsKKworICAvKiogVGhpcyByZXByZXNlbnRzIGFuIGFyZ3VtZW50IHdob3NlIHZhbHVlIGlzIG5vdCB3aXRoaW4gdGhlIGV4cGVjdGVkCisgICAqICByYW5nZSAoZS5nLiwgYm91bmRhcnkgY2hlY2tzIGluIGJhc2ljX3N0cmluZykuICAqLworICBjbGFzcyBvdXRfb2ZfcmFuZ2UgOiBwdWJsaWMgbG9naWNfZXJyb3IgCisgIHsKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IG91dF9vZl9yYW5nZShjb25zdCBzdHJpbmcmIF9fYXJnKTsKKyAgfTsKKworICAvKiogUnVudGltZSBlcnJvcnMgcmVwcmVzZW50IHByb2JsZW1zIG91dHNpZGUgdGhlIHNjb3BlIG9mIGEgcHJvZ3JhbTsKKyAgICogIHRoZXkgY2Fubm90IGJlIGVhc2lseSBwcmVkaWN0ZWQgYW5kIGNhbiBnZW5lcmFsbHkgb25seSBiZSBjYXVnaHQgYXMKKyAgICogIHRoZSBwcm9ncmFtIGV4ZWN1dGVzLgorICAgKiAgQGJyaWVmIE9uZSBvZiB0d28gc3ViY2xhc3NlcyBvZiBleGNlcHRpb24uCisgICAqLworICBjbGFzcyBydW50aW1lX2Vycm9yIDogcHVibGljIGV4Y2VwdGlvbiAKKyAgeworICAgIHN0cmluZyBfTV9tc2c7CisKKyAgcHVibGljOgorICAgIC8qKiBUYWtlcyBhIGNoYXJhY3RlciBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZXJyb3IuICAqLworICAgIGV4cGxpY2l0IAorICAgIHJ1bnRpbWVfZXJyb3IoY29uc3Qgc3RyaW5nJiBfX2FyZyk7CisKKyAgICB2aXJ0dWFsIAorICAgIH5ydW50aW1lX2Vycm9yKCkgdGhyb3coKTsKKworICAgIC8qKiBSZXR1cm5zIGEgQy1zdHlsZSBjaGFyYWN0ZXIgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGdlbmVyYWwgY2F1c2Ugb2YKKyAgICAgKiAgdGhlIGN1cnJlbnQgZXJyb3IgKHRoZSBzYW1lIHN0cmluZyBwYXNzZWQgdG8gdGhlIGN0b3IpLiAgKi8KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIAorICAgIHdoYXQoKSBjb25zdCB0aHJvdygpOworICB9OworCisgIC8qKiBUaHJvd24gdG8gaW5kaWNhdGUgcmFuZ2UgZXJyb3JzIGluIGludGVybmFsIGNvbXB1dGF0aW9ucy4gICovCisgIGNsYXNzIHJhbmdlX2Vycm9yIDogcHVibGljIHJ1bnRpbWVfZXJyb3IgCisgIHsKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IHJhbmdlX2Vycm9yKGNvbnN0IHN0cmluZyYgX19hcmcpOworICB9OworCisgIC8qKiBUaHJvd24gdG8gaW5kaWNhdGUgYXJpdGhtZXRpYyBvdmVyZmxvdy4gICovCisgIGNsYXNzIG92ZXJmbG93X2Vycm9yIDogcHVibGljIHJ1bnRpbWVfZXJyb3IgCisgIHsKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IG92ZXJmbG93X2Vycm9yKGNvbnN0IHN0cmluZyYgX19hcmcpOworICB9OworCisgIC8qKiBUaHJvd24gdG8gaW5kaWNhdGUgYXJpdGhtZXRpYyB1bmRlcmZsb3cuICAqLworICBjbGFzcyB1bmRlcmZsb3dfZXJyb3IgOiBwdWJsaWMgcnVudGltZV9lcnJvciAKKyAgeworICBwdWJsaWM6CisgICAgZXhwbGljaXQgdW5kZXJmbG93X2Vycm9yKGNvbnN0IHN0cmluZyYgX19hcmcpOworICB9OworCisgIC8vIEB9IGdyb3VwIGV4Y2VwdGlvbnMKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjZW5kaWYgLyogX0dMSUJDWFhfU1RERVhDRVBUICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3N0cmVhbWJ1ZiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvc3RyZWFtYnVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OGExZTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3N0cmVhbWJ1ZgpAQCAtMCwwICsxLDgwMiBAQAorLy8gU3RyZWFtIGJ1ZmZlciBjbGFzc2VzIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwKKy8vIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHN0cmVhbWJ1ZgorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDI3LjUgIFN0cmVhbSBidWZmZXJzCisvLworCisjaWZuZGVmIF9HTElCWFhfU1RSRUFNQlVGCisjZGVmaW5lIF9HTElCWFhfU1RSRUFNQlVGIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxpb3Nmd2Q+CisjaW5jbHVkZSA8Yml0cy9sb2NhbGVmd2QuaD4KKyNpbmNsdWRlIDxiaXRzL2lvc19iYXNlLmg+CisjaW5jbHVkZSA8Yml0cy9jcHBfdHlwZV90cmFpdHMuaD4KKyNpbmNsdWRlIDxleHQvdHlwZV90cmFpdHMuaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RyZWFtc2l6ZQorICAgIF9fY29weV9zdHJlYW1idWZzX2VvZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiosCisJCQkgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiwgYm9vbCYpOworCisgIC8qKgorICAgKiAgQGJyaWVmICBUaGUgYWN0dWFsIHdvcmsgb2YgaW5wdXQgYW5kIG91dHB1dCAoaW50ZXJmYWNlKS4KKyAgICogIEBpbmdyb3VwIGlvCisgICAqCisgICAqICBUaGlzIGlzIGEgYmFzZSBjbGFzcy4gIERlcml2ZWQgc3RyZWFtIGJ1ZmZlcnMgZWFjaCBjb250cm9sIGEKKyAgICogIHBhaXIgb2YgY2hhcmFjdGVyIHNlcXVlbmNlczogIG9uZSBmb3IgaW5wdXQsIGFuZCBvbmUgZm9yIG91dHB1dC4KKyAgICoKKyAgICogIFNlY3Rpb24gWzI3LjUuMV0gb2YgdGhlIHN0YW5kYXJkIGRlc2NyaWJlcyB0aGUgcmVxdWlyZW1lbnRzIGFuZAorICAgKiAgYmVoYXZpb3Igb2Ygc3RyZWFtIGJ1ZmZlciBjbGFzc2VzLiAgVGhhdCBzZWN0aW9uICh0aHJlZSBwYXJhZ3JhcGhzKQorICAgKiAgaXMgcmVwcm9kdWNlZCBoZXJlLCBmb3Igc2ltcGxpY2l0eSBhbmQgYWNjdXJhY3kuCisgICAqCisgICAqICAtIyBTdHJlYW0gYnVmZmVycyBjYW4gaW1wb3NlIHZhcmlvdXMgY29uc3RyYWludHMgb24gdGhlIHNlcXVlbmNlcworICAgKiAgICAgdGhleSBjb250cm9sLiAgU29tZSBjb25zdHJhaW50cyBhcmU6CisgICAqICAgICAtIFRoZSBjb250cm9sbGVkIGlucHV0IHNlcXVlbmNlIGNhbiBiZSBub3QgcmVhZGFibGUuCisgICAqICAgICAtIFRoZSBjb250cm9sbGVkIG91dHB1dCBzZXF1ZW5jZSBjYW4gYmUgbm90IHdyaXRhYmxlLgorICAgKiAgICAgLSBUaGUgY29udHJvbGxlZCBzZXF1ZW5jZXMgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29udGVudHMgb2YKKyAgICogICAgICAgb3RoZXIgcmVwcmVzZW50YXRpb25zIGZvciBjaGFyYWN0ZXIgc2VxdWVuY2VzLCBzdWNoIGFzIGV4dGVybmFsCisgICAqICAgICAgIGZpbGVzLgorICAgKiAgICAgLSBUaGUgY29udHJvbGxlZCBzZXF1ZW5jZXMgY2FuIHN1cHBvcnQgb3BlcmF0aW9ucyBAZSBkaXJlY3RseSB0byBvcgorICAgKiAgICAgICBmcm9tIGFzc29jaWF0ZWQgc2VxdWVuY2VzLgorICAgKiAgICAgLSBUaGUgY29udHJvbGxlZCBzZXF1ZW5jZXMgY2FuIGltcG9zZSBsaW1pdGF0aW9ucyBvbiBob3cgdGhlCisgICAqICAgICAgIHByb2dyYW0gY2FuIHJlYWQgY2hhcmFjdGVycyBmcm9tIGEgc2VxdWVuY2UsIHdyaXRlIGNoYXJhY3RlcnMgdG8KKyAgICogICAgICAgYSBzZXF1ZW5jZSwgcHV0IGNoYXJhY3RlcnMgYmFjayBpbnRvIGFuIGlucHV0IHNlcXVlbmNlLCBvciBhbHRlcgorICAgKiAgICAgICB0aGUgc3RyZWFtIHBvc2l0aW9uLgorICAgKiAgICAgLgorICAgKiAgLSMgRWFjaCBzZXF1ZW5jZSBpcyBjaGFyYWN0ZXJpemVkIGJ5IHRocmVlIHBvaW50ZXJzIHdoaWNoLCBpZiBub24tbnVsbCwKKyAgICogICAgIGFsbCBwb2ludCBpbnRvIHRoZSBzYW1lIEBjIGNoYXJUIGFycmF5IG9iamVjdC4gIFRoZSBhcnJheSBvYmplY3QKKyAgICogICAgIHJlcHJlc2VudHMsIGF0IGFueSBtb21lbnQsIGEgKHN1YilzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlCisgICAqICAgICBzZXF1ZW5jZS4gIE9wZXJhdGlvbnMgcGVyZm9ybWVkIG9uIGEgc2VxdWVuY2UgYWx0ZXIgdGhlIHZhbHVlcworICAgKiAgICAgc3RvcmVkIGluIHRoZXNlIHBvaW50ZXJzLCBwZXJmb3JtIHJlYWRzIGFuZCB3cml0ZXMgZGlyZWN0bHkgdG8gb3IKKyAgICogICAgIGZyb20gYXNzb2NpYXRlZCBzZXF1ZW5jZXMsIGFuZCBhbHRlciA8ZW0+dGhlIHN0cmVhbSBwb3NpdGlvbjwvZW0+IGFuZAorICAgKiAgICAgY29udmVyc2lvbiBzdGF0ZSBhcyBuZWVkZWQgdG8gbWFpbnRhaW4gdGhpcyBzdWJzZXF1ZW5jZSByZWxhdGlvbnNoaXAuCisgICAqICAgICBUaGUgdGhyZWUgcG9pbnRlcnMgYXJlOgorICAgKiAgICAgLSB0aGUgPGVtPmJlZ2lubmluZyBwb2ludGVyPC9lbT4sIG9yIGxvd2VzdCBlbGVtZW50IGFkZHJlc3MgaW4gdGhlCisgICAqICAgICAgIGFycmF5IChjYWxsZWQgQGUgeGJlZyBoZXJlKTsKKyAgICogICAgIC0gdGhlIDxlbT5uZXh0IHBvaW50ZXI8L2VtPiwgb3IgbmV4dCBlbGVtZW50IGFkZHJlc3MgdGhhdCBpcyBhCisgICAqICAgICAgIGN1cnJlbnQgY2FuZGlkYXRlIGZvciByZWFkaW5nIG9yIHdyaXRpbmcgKGNhbGxlZCBAZSB4bmV4dCBoZXJlKTsKKyAgICogICAgIC0gdGhlIDxlbT5lbmQgcG9pbnRlcjwvZW0+LCBvciBmaXJzdCBlbGVtZW50IGFkZHJlc3MgYmV5b25kIHRoZQorICAgKiAgICAgICBlbmQgb2YgdGhlIGFycmF5IChjYWxsZWQgQGUgeGVuZCBoZXJlKS4KKyAgICogICAgIC4KKyAgICogIC0jIFRoZSBmb2xsb3dpbmcgc2VtYW50aWMgY29uc3RyYWludHMgc2hhbGwgYWx3YXlzIGFwcGx5IGZvciBhbnkgc2V0CisgICAqICAgICBvZiB0aHJlZSBwb2ludGVycyBmb3IgYSBzZXF1ZW5jZSwgdXNpbmcgdGhlIHBvaW50ZXIgbmFtZXMgZ2l2ZW4KKyAgICogICAgIGltbWVkaWF0ZWx5IGFib3ZlOgorICAgKiAgICAgLSBJZiBAZSB4bmV4dCBpcyBub3QgYSBudWxsIHBvaW50ZXIsIHRoZW4gQGUgeGJlZyBhbmQgQGUgeGVuZCBzaGFsbAorICAgKiAgICAgICBhbHNvIGJlIG5vbi1udWxsIHBvaW50ZXJzIGludG8gdGhlIHNhbWUgQGMgY2hhclQgYXJyYXksIGFzCisgICAqICAgICAgIGRlc2NyaWJlZCBhYm92ZTsgb3RoZXJ3aXNlLCBAZSB4YmVnIGFuZCBAZSB4ZW5kIHNoYWxsIGFsc28gYmUgbnVsbC4KKyAgICogICAgIC0gSWYgQGUgeG5leHQgaXMgbm90IGEgbnVsbCBwb2ludGVyIGFuZCBAZSB4bmV4dCA8IEBlIHhlbmQgZm9yIGFuCisgICAqICAgICAgIG91dHB1dCBzZXF1ZW5jZSwgdGhlbiBhIDxlbT53cml0ZSBwb3NpdGlvbjwvZW0+IGlzIGF2YWlsYWJsZS4KKyAgICogICAgICAgSW4gdGhpcyBjYXNlLCBAZSAqeG5leHQgc2hhbGwgYmUgYXNzaWduYWJsZSBhcyB0aGUgbmV4dCBlbGVtZW50CisgICAqICAgICAgIHRvIHdyaXRlICh0byBwdXQsIG9yIHRvIHN0b3JlIGEgY2hhcmFjdGVyIHZhbHVlLCBpbnRvIHRoZSBzZXF1ZW5jZSkuCisgICAqICAgICAtIElmIEBlIHhuZXh0IGlzIG5vdCBhIG51bGwgcG9pbnRlciBhbmQgQGUgeGJlZyA8IEBlIHhuZXh0IGZvciBhbgorICAgKiAgICAgICBpbnB1dCBzZXF1ZW5jZSwgdGhlbiBhIDxlbT5wdXRiYWNrIHBvc2l0aW9uPC9lbT4gaXMgYXZhaWxhYmxlLgorICAgKiAgICAgICBJbiB0aGlzIGNhc2UsIEBlIHhuZXh0Wy0xXSBzaGFsbCBoYXZlIGEgZGVmaW5lZCB2YWx1ZSBhbmQgaXMgdGhlCisgICAqICAgICAgIG5leHQgKHByZWNlZGluZykgZWxlbWVudCB0byBzdG9yZSBhIGNoYXJhY3RlciB0aGF0IGlzIHB1dCBiYWNrCisgICAqICAgICAgIGludG8gdGhlIGlucHV0IHNlcXVlbmNlLgorICAgKiAgICAgLSBJZiBAZSB4bmV4dCBpcyBub3QgYSBudWxsIHBvaW50ZXIgYW5kIEBlIHhuZXh0PCBAZSB4ZW5kIGZvciBhbgorICAgKiAgICAgICBpbnB1dCBzZXF1ZW5jZSwgdGhlbiBhIDxlbT5yZWFkIHBvc2l0aW9uPC9lbT4gaXMgYXZhaWxhYmxlLgorICAgKiAgICAgICBJbiB0aGlzIGNhc2UsIEBlICp4bmV4dCBzaGFsbCBoYXZlIGEgZGVmaW5lZCB2YWx1ZSBhbmQgaXMgdGhlCisgICAqICAgICAgIG5leHQgZWxlbWVudCB0byByZWFkICh0byBnZXQsIG9yIHRvIG9idGFpbiBhIGNoYXJhY3RlciB2YWx1ZSwKKyAgICogICAgICAgZnJvbSB0aGUgc2VxdWVuY2UpLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVmIAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvL0B7CisgICAgICAvKioKKyAgICAgICAqICBUaGVzZSBhcmUgc3RhbmRhcmQgdHlwZXMuICBUaGV5IHBlcm1pdCBhIHN0YW5kYXJkaXplZCB3YXkgb2YKKyAgICAgICAqICByZWZlcnJpbmcgdG8gbmFtZXMgb2YgKG9yIG5hbWVzIGRlcGVuZGFudCBvbikgdGhlIHRlbXBsYXRlCisgICAgICAgKiAgcGFyYW1ldGVycywgd2hpY2ggYXJlIHNwZWNpZmljIHRvIHRoZSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICovCisgICAgICB0eXBlZGVmIF9DaGFyVCAJCQkJCWNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RyYWl0cyAJCQkJCXRyYWl0c190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgCQlpbnRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIAkJcG9zX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZSAJCW9mZl90eXBlOworICAgICAgLy9AfQorCisgICAgICAvL0B7CisgICAgICAvLy8gVGhpcyBpcyBhIG5vbi1zdGFuZGFyZCB0eXBlLgorICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gIAlfX3N0cmVhbWJ1Zl90eXBlOworICAgICAgLy9AfQorICAgICAgCisgICAgICBmcmllbmQgY2xhc3MgYmFzaWNfaW9zPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OworICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX2lzdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CisgICAgICBmcmllbmQgY2xhc3MgYmFzaWNfb3N0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKKyAgICAgIGZyaWVuZCBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OworICAgICAgZnJpZW5kIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CisKKyAgICAgIGZyaWVuZCBzdHJlYW1zaXplCisgICAgICBfX2NvcHlfc3RyZWFtYnVmc19lb2Y8PihfX3N0cmVhbWJ1Zl90eXBlKiwgX19zdHJlYW1idWZfdHlwZSosIGJvb2wmKTsKKworICAgICAgdGVtcGxhdGU8Ym9vbCBfSXNNb3ZlLCB0eXBlbmFtZSBfQ2hhclQyPgorICAgICAgICBmcmllbmQgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2NoYXI8X0NoYXJUMj46Ol9fdmFsdWUsIAorCQkJCQkgICAgICAgX0NoYXJUMio+OjpfX3R5cGUKKyAgICAgICAgX19jb3B5X21vdmVfYTIoaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQyPiwKKwkJICAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUMj4sIF9DaGFyVDIqKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUMj4KKyAgICAgICAgZnJpZW5kIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19jaGFyPF9DaGFyVDI+OjpfX3ZhbHVlLAorCQkJCSAgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQyPiA+OjpfX3R5cGUKKyAgICAgICAgZmluZChpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVDI+LCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVDI+LAorCSAgICAgY29uc3QgX0NoYXJUMiYpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQyLCB0eXBlbmFtZSBfVHJhaXRzMj4KKyAgICAgICAgZnJpZW5kIGJhc2ljX2lzdHJlYW08X0NoYXJUMiwgX1RyYWl0czI+JgorICAgICAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJUMiwgX1RyYWl0czI+JiwgX0NoYXJUMiopOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQyLCB0eXBlbmFtZSBfVHJhaXRzMiwgdHlwZW5hbWUgX0FsbG9jPgorICAgICAgICBmcmllbmQgYmFzaWNfaXN0cmVhbTxfQ2hhclQyLCBfVHJhaXRzMj4mCisgICAgICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQyLCBfVHJhaXRzMj4mLAorCQkgICBiYXNpY19zdHJpbmc8X0NoYXJUMiwgX1RyYWl0czIsIF9BbGxvYz4mKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUMiwgdHlwZW5hbWUgX1RyYWl0czIsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICAgICAgZnJpZW5kIGJhc2ljX2lzdHJlYW08X0NoYXJUMiwgX1RyYWl0czI+JgorICAgICAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJUMiwgX1RyYWl0czI+JiwKKwkJYmFzaWNfc3RyaW5nPF9DaGFyVDIsIF9UcmFpdHMyLCBfQWxsb2M+JiwgX0NoYXJUMik7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvL0B7CisgICAgICAvKioKKyAgICAgICAqICBUaGlzIGlzIGJhc2VkIG9uIF9JT19GSUxFLCBqdXN0IHJlb3JkZXJlZCB0byBiZSBtb3JlIGNvbnNpc3RlbnQsCisgICAgICAgKiAgYW5kIGlzIGludGVuZGVkIHRvIGJlIHRoZSBtb3N0IG1pbmltYWwgYWJzdHJhY3Rpb24gZm9yIGFuCisgICAgICAgKiAgaW50ZXJuYWwgYnVmZmVyLgorICAgICAgICogIC0gIGdldCA9PSBpbnB1dCA9PSByZWFkCisgICAgICAgKiAgLSAgcHV0ID09IG91dHB1dCA9PSB3cml0ZQorICAgICAgKi8KKyAgICAgIGNoYXJfdHlwZSogCQlfTV9pbl9iZWc7ICAgICAvLyBTdGFydCBvZiBnZXQgYXJlYS4gCisgICAgICBjaGFyX3R5cGUqIAkJX01faW5fY3VyOyAgICAgLy8gQ3VycmVudCByZWFkIGFyZWEuIAorICAgICAgY2hhcl90eXBlKiAJCV9NX2luX2VuZDsgICAgIC8vIEVuZCBvZiBnZXQgYXJlYS4gCisgICAgICBjaGFyX3R5cGUqIAkJX01fb3V0X2JlZzsgICAgLy8gU3RhcnQgb2YgcHV0IGFyZWEuIAorICAgICAgY2hhcl90eXBlKiAJCV9NX291dF9jdXI7ICAgIC8vIEN1cnJlbnQgcHV0IGFyZWEuIAorICAgICAgY2hhcl90eXBlKiAJCV9NX291dF9lbmQ7ICAgIC8vIEVuZCBvZiBwdXQgYXJlYS4KKworICAgICAgLy8vIEN1cnJlbnQgbG9jYWxlIHNldHRpbmcuCisgICAgICBsb2NhbGUgCQkJX01fYnVmX2xvY2FsZTsJCisKKyAgcHVibGljOgorICAgICAgLy8vIERlc3RydWN0b3IgZGVhbGxvY2F0ZXMgbm8gYnVmZmVyIHNwYWNlLgorICAgICAgdmlydHVhbCAKKyAgICAgIH5iYXNpY19zdHJlYW1idWYoKSAKKyAgICAgIHsgfQorCisgICAgICAvLyBbMjcuNS4yLjIuMV0gbG9jYWxlcworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBFbnRyeSBwb2ludCBmb3IgaW1idWUoKS4KKyAgICAgICAqICBAcGFyYW0gIGxvYyAgVGhlIG5ldyBsb2NhbGUuCisgICAgICAgKiAgQHJldHVybiAgVGhlIHByZXZpb3VzIGxvY2FsZS4KKyAgICAgICAqCisgICAgICAgKiAgQ2FsbHMgdGhlIGRlcml2ZWQgaW1idWUobG9jKS4KKyAgICAgICovCisgICAgICBsb2NhbGUgCisgICAgICBwdWJpbWJ1ZShjb25zdCBsb2NhbGUgJl9fbG9jKQorICAgICAgeworCWxvY2FsZSBfX3RtcCh0aGlzLT5nZXRsb2MoKSk7CisJdGhpcy0+aW1idWUoX19sb2MpOworCV9NX2J1Zl9sb2NhbGUgPSBfX2xvYzsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTG9jYWxlIGFjY2Vzcy4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgY3VycmVudCBsb2NhbGUgaW4gZWZmZWN0LgorICAgICAgICoKKyAgICAgICAqICBJZiBwdWJpbWJ1ZShsb2MpIGhhcyBiZWVuIGNhbGxlZCwgdGhlbiB0aGUgbW9zdCByZWNlbnQgQGMgbG9jCisgICAgICAgKiAgaXMgcmV0dXJuZWQuICBPdGhlcndpc2UgdGhlIGdsb2JhbCBsb2NhbGUgaW4gZWZmZWN0IGF0IHRoZSB0aW1lCisgICAgICAgKiAgb2YgY29uc3RydWN0aW9uIGlzIHJldHVybmVkLgorICAgICAgKi8KKyAgICAgIGxvY2FsZSAgIAorICAgICAgZ2V0bG9jKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2J1Zl9sb2NhbGU7IH0gCisKKyAgICAgIC8vIFsyNy41LjIuMi4yXSBidWZmZXIgbWFuYWdlbWVudCBhbmQgcG9zaXRpb25pbmcKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRW50cnkgcG9pbnRzIGZvciBkZXJpdmVkIGJ1ZmZlciBmdW5jdGlvbnMuCisgICAgICAgKgorICAgICAgICogIFRoZSBwdWJsaWMgdmVyc2lvbnMgb2YgQGMgcHViZm9vIGRpc3BhdGNoIHRvIHRoZSBwcm90ZWN0ZWQKKyAgICAgICAqICBkZXJpdmVkIEBjIGZvbyBtZW1iZXIgZnVuY3Rpb25zLCBwYXNzaW5nIHRoZSBhcmd1bWVudHMgKGlmIGFueSkKKyAgICAgICAqICBhbmQgcmV0dXJuaW5nIHRoZSByZXN1bHQgdW5jaGFuZ2VkLgorICAgICAgKi8KKyAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIAorICAgICAgcHVic2V0YnVmKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikgCisgICAgICB7IHJldHVybiB0aGlzLT5zZXRidWYoX19zLCBfX24pOyB9CisKKyAgICAgIHBvc190eXBlIAorICAgICAgcHVic2Vla29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksIAorCQkgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCisgICAgICB7IHJldHVybiB0aGlzLT5zZWVrb2ZmKF9fb2ZmLCBfX3dheSwgX19tb2RlKTsgfQorCisgICAgICBwb3NfdHlwZSAKKyAgICAgIHB1YnNlZWtwb3MocG9zX3R5cGUgX19zcCwKKwkJIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQorICAgICAgeyByZXR1cm4gdGhpcy0+c2Vla3BvcyhfX3NwLCBfX21vZGUpOyB9CisKKyAgICAgIGludCAKKyAgICAgIHB1YnN5bmMoKSB7IHJldHVybiB0aGlzLT5zeW5jKCk7IH0KKyAgICAgIC8vQH0KKworICAgICAgLy8gWzI3LjUuMi4yLjNdIGdldCBhcmVhCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIExvb2tpbmcgYWhlYWQgaW50byB0aGUgc3RyZWFtLgorICAgICAgICogIEByZXR1cm4gIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBhdmFpbGFibGUuCisgICAgICAgKgorICAgICAgICogIElmIGEgcmVhZCBwb3NpdGlvbiBpcyBhdmFpbGFibGUsIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzCisgICAgICAgKiAgYXZhaWxhYmxlIGZvciByZWFkaW5nIGJlZm9yZSB0aGUgYnVmZmVyIG11c3QgYmUgcmVmaWxsZWQuCisgICAgICAgKiAgT3RoZXJ3aXNlIHJldHVybnMgdGhlIGRlcml2ZWQgQGMgc2hvd21hbnljKCkuCisgICAgICAqLworICAgICAgc3RyZWFtc2l6ZSAKKyAgICAgIGluX2F2YWlsKCkgCisgICAgICB7IAorCWNvbnN0IHN0cmVhbXNpemUgX19yZXQgPSB0aGlzLT5lZ3B0cigpIC0gdGhpcy0+Z3B0cigpOworCXJldHVybiBfX3JldCA/IF9fcmV0IDogdGhpcy0+c2hvd21hbnljKCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgR2V0dGluZyB0aGUgbmV4dCBjaGFyYWN0ZXIuCisgICAgICAgKiAgQHJldHVybiAgVGhlIG5leHQgY2hhcmFjdGVyLCBvciBlb2YuCisgICAgICAgKgorICAgICAgICogIENhbGxzIEBjIHNidW1wYygpLCBhbmQgaWYgdGhhdCBmdW5jdGlvbiByZXR1cm5zCisgICAgICAgKiAgQGMgdHJhaXRzOjplb2YoKSwgc28gZG9lcyB0aGlzIGZ1bmN0aW9uLiAgT3RoZXJ3aXNlLCBAYyBzZ2V0YygpLgorICAgICAgKi8KKyAgICAgIGludF90eXBlIAorICAgICAgc25leHRjKCkKKyAgICAgIHsKKwlpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKKwlpZiAoX19idWlsdGluX2V4cGVjdCghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKHRoaXMtPnNidW1wYygpLCAKKwkJCQkJCSAgICAgICBfX3JldCksIHRydWUpKQorCSAgX19yZXQgPSB0aGlzLT5zZ2V0YygpOworCXJldHVybiBfX3JldDsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBHZXR0aW5nIHRoZSBuZXh0IGNoYXJhY3Rlci4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgbmV4dCBjaGFyYWN0ZXIsIG9yIGVvZi4KKyAgICAgICAqCisgICAgICAgKiAgSWYgdGhlIGlucHV0IHJlYWQgcG9zaXRpb24gaXMgYXZhaWxhYmxlLCByZXR1cm5zIHRoYXQgY2hhcmFjdGVyCisgICAgICAgKiAgYW5kIGluY3JlbWVudHMgdGhlIHJlYWQgcG9pbnRlciwgb3RoZXJ3aXNlIGNhbGxzIGFuZCByZXR1cm5zCisgICAgICAgKiAgQGMgdWZsb3coKS4KKyAgICAgICovCisgICAgICBpbnRfdHlwZSAKKyAgICAgIHNidW1wYygpCisgICAgICB7CisJaW50X3R5cGUgX19yZXQ7CisJaWYgKF9fYnVpbHRpbl9leHBlY3QodGhpcy0+Z3B0cigpIDwgdGhpcy0+ZWdwdHIoKSwgdHJ1ZSkpCisJICB7CisJICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCp0aGlzLT5ncHRyKCkpOworCSAgICB0aGlzLT5nYnVtcCgxKTsKKwkgIH0KKwllbHNlIAorCSAgX19yZXQgPSB0aGlzLT51ZmxvdygpOworCXJldHVybiBfX3JldDsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBHZXR0aW5nIHRoZSBuZXh0IGNoYXJhY3Rlci4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgbmV4dCBjaGFyYWN0ZXIsIG9yIGVvZi4KKyAgICAgICAqCisgICAgICAgKiAgSWYgdGhlIGlucHV0IHJlYWQgcG9zaXRpb24gaXMgYXZhaWxhYmxlLCByZXR1cm5zIHRoYXQgY2hhcmFjdGVyLAorICAgICAgICogIG90aGVyd2lzZSBjYWxscyBhbmQgcmV0dXJucyBAYyB1bmRlcmZsb3coKS4gIERvZXMgbm90IG1vdmUgdGhlIAorICAgICAgICogIHJlYWQgcG9zaXRpb24gYWZ0ZXIgZmV0Y2hpbmcgdGhlIGNoYXJhY3Rlci4KKyAgICAgICovCisgICAgICBpbnRfdHlwZSAKKyAgICAgIHNnZXRjKCkKKyAgICAgIHsKKwlpbnRfdHlwZSBfX3JldDsKKwlpZiAoX19idWlsdGluX2V4cGVjdCh0aGlzLT5ncHRyKCkgPCB0aGlzLT5lZ3B0cigpLCB0cnVlKSkKKwkgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCp0aGlzLT5ncHRyKCkpOworCWVsc2UgCisJICBfX3JldCA9IHRoaXMtPnVuZGVyZmxvdygpOworCXJldHVybiBfX3JldDsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBFbnRyeSBwb2ludCBmb3IgeHNnZXRuLgorICAgICAgICogIEBwYXJhbSAgcyAgQSBidWZmZXIgYXJlYS4KKyAgICAgICAqICBAcGFyYW0gIG4gIEEgY291bnQuCisgICAgICAgKgorICAgICAgICogIFJldHVybnMgeHNnZXRuKHMsbikuICBUaGUgZWZmZWN0IGlzIHRvIGZpbGwgQGEgc1swXSB0aHJvdWdoCisgICAgICAgKiAgQGEgc1tuLTFdIHdpdGggY2hhcmFjdGVycyBmcm9tIHRoZSBpbnB1dCBzZXF1ZW5jZSwgaWYgcG9zc2libGUuCisgICAgICAqLworICAgICAgc3RyZWFtc2l6ZSAKKyAgICAgIHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKKyAgICAgIHsgcmV0dXJuIHRoaXMtPnhzZ2V0bihfX3MsIF9fbik7IH0KKworICAgICAgLy8gWzI3LjUuMi4yLjRdIHB1dGJhY2sKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUHVzaGluZyBjaGFyYWN0ZXJzIGJhY2sgaW50byB0aGUgaW5wdXQgc3RyZWFtLgorICAgICAgICogIEBwYXJhbSAgYyAgVGhlIGNoYXJhY3RlciB0byBwdXNoIGJhY2suCisgICAgICAgKiAgQHJldHVybiAgVGhlIHByZXZpb3VzIGNoYXJhY3RlciwgaWYgcG9zc2libGUuCisgICAgICAgKgorICAgICAgICogIFNpbWlsYXIgdG8gc3VuZ2V0YygpLCBidXQgQGEgYyBpcyBwdXNoZWQgb250byB0aGUgc3RyZWFtCisgICAgICAgKiAgaW5zdGVhZCBvZiA8ZW0+dGhlIHByZXZpb3VzIGNoYXJhY3Rlci48L2VtPiBJZiBzdWNjZXNzZnVsLAorICAgICAgICogIHRoZSBuZXh0IGNoYXJhY3RlciBmZXRjaGVkIGZyb20gdGhlIGlucHV0IHN0cmVhbSB3aWxsIGJlIEBhCisgICAgICAgKiAgYy4KKyAgICAgICovCisgICAgICBpbnRfdHlwZSAKKyAgICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUgX19jKQorICAgICAgeworCWludF90eXBlIF9fcmV0OworCWNvbnN0IGJvb2wgX190ZXN0cG9zID0gdGhpcy0+ZWJhY2soKSA8IHRoaXMtPmdwdHIoKTsKKwlpZiAoX19idWlsdGluX2V4cGVjdCghX190ZXN0cG9zIHx8IAorCQkJICAgICAhdHJhaXRzX3R5cGU6OmVxKF9fYywgdGhpcy0+Z3B0cigpWy0xXSksIGZhbHNlKSkKKwkgIF9fcmV0ID0gdGhpcy0+cGJhY2tmYWlsKHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsKKwllbHNlIAorCSAgeworCSAgICB0aGlzLT5nYnVtcCgtMSk7CisJICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCp0aGlzLT5ncHRyKCkpOworCSAgfQorCXJldHVybiBfX3JldDsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBNb3ZpbmcgYmFja3dhcmRzIGluIHRoZSBpbnB1dCBzdHJlYW0uCisgICAgICAgKiAgQHJldHVybiAgVGhlIHByZXZpb3VzIGNoYXJhY3RlciwgaWYgcG9zc2libGUuCisgICAgICAgKgorICAgICAgICogIElmIGEgcHV0YmFjayBwb3NpdGlvbiBpcyBhdmFpbGFibGUsIHRoaXMgZnVuY3Rpb24gZGVjcmVtZW50cworICAgICAgICogIHRoZSBpbnB1dCBwb2ludGVyIGFuZCByZXR1cm5zIHRoYXQgY2hhcmFjdGVyLiAgT3RoZXJ3aXNlLAorICAgICAgICogIGNhbGxzIGFuZCByZXR1cm5zIHBiYWNrZmFpbCgpLiAgVGhlIGVmZmVjdCBpcyB0byBAYSB1bmdldAorICAgICAgICogIHRoZSBsYXN0IGNoYXJhY3RlciBAYSBnb3R0ZW4uCisgICAgICAqLworICAgICAgaW50X3R5cGUgCisgICAgICBzdW5nZXRjKCkKKyAgICAgIHsKKwlpbnRfdHlwZSBfX3JldDsKKwlpZiAoX19idWlsdGluX2V4cGVjdCh0aGlzLT5lYmFjaygpIDwgdGhpcy0+Z3B0cigpLCB0cnVlKSkKKwkgIHsKKwkgICAgdGhpcy0+Z2J1bXAoLTEpOworCSAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqdGhpcy0+Z3B0cigpKTsKKwkgIH0KKwllbHNlIAorCSAgX19yZXQgPSB0aGlzLT5wYmFja2ZhaWwoKTsKKwlyZXR1cm4gX19yZXQ7CisgICAgICB9CisKKyAgICAgIC8vIFsyNy41LjIuMi41XSBwdXQgYXJlYQorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBFbnRyeSBwb2ludCBmb3IgYWxsIHNpbmdsZS1jaGFyYWN0ZXIgb3V0cHV0IGZ1bmN0aW9ucy4KKyAgICAgICAqICBAcGFyYW0gIGMgIEEgY2hhcmFjdGVyIHRvIG91dHB1dC4KKyAgICAgICAqICBAcmV0dXJuICBAYSBjLCBpZiBwb3NzaWJsZS4KKyAgICAgICAqCisgICAgICAgKiAgT25lIG9mIHR3byBwdWJsaWMgb3V0cHV0IGZ1bmN0aW9ucy4KKyAgICAgICAqCisgICAgICAgKiAgSWYgYSB3cml0ZSBwb3NpdGlvbiBpcyBhdmFpbGFibGUgZm9yIHRoZSBvdXRwdXQgc2VxdWVuY2UgKGkuZS4sCisgICAgICAgKiAgdGhlIGJ1ZmZlciBpcyBub3QgZnVsbCksIHN0b3JlcyBAYSBjIGluIHRoYXQgcG9zaXRpb24sIGluY3JlbWVudHMKKyAgICAgICAqICB0aGUgcG9zaXRpb24sIGFuZCByZXR1cm5zIEBjIHRyYWl0czo6dG9faW50X3R5cGUoYykuICBJZiBhIHdyaXRlCisgICAgICAgKiAgcG9zaXRpb24gaXMgbm90IGF2YWlsYWJsZSwgcmV0dXJucyBAYyBvdmVyZmxvdyhjKS4KKyAgICAgICovCisgICAgICBpbnRfdHlwZSAKKyAgICAgIHNwdXRjKGNoYXJfdHlwZSBfX2MpCisgICAgICB7CisJaW50X3R5cGUgX19yZXQ7CisJaWYgKF9fYnVpbHRpbl9leHBlY3QodGhpcy0+cHB0cigpIDwgdGhpcy0+ZXBwdHIoKSwgdHJ1ZSkpCisJICB7CisJICAgICp0aGlzLT5wcHRyKCkgPSBfX2M7CisJICAgIHRoaXMtPnBidW1wKDEpOworCSAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpOworCSAgfQorCWVsc2UKKwkgIF9fcmV0ID0gdGhpcy0+b3ZlcmZsb3codHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpOworCXJldHVybiBfX3JldDsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBFbnRyeSBwb2ludCBmb3IgYWxsIHNpbmdsZS1jaGFyYWN0ZXIgb3V0cHV0IGZ1bmN0aW9ucy4KKyAgICAgICAqICBAcGFyYW0gIHMgIEEgYnVmZmVyIHJlYWQgYXJlYS4KKyAgICAgICAqICBAcGFyYW0gIG4gIEEgY291bnQuCisgICAgICAgKgorICAgICAgICogIE9uZSBvZiB0d28gcHVibGljIG91dHB1dCBmdW5jdGlvbnMuCisgICAgICAgKgorICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIHhzcHV0bihzLG4pLiAgVGhlIGVmZmVjdCBpcyB0byB3cml0ZSBAYSBzWzBdIHRocm91Z2gKKyAgICAgICAqICBAYSBzW24tMV0gdG8gdGhlIG91dHB1dCBzZXF1ZW5jZSwgaWYgcG9zc2libGUuCisgICAgICAqLworICAgICAgc3RyZWFtc2l6ZSAKKyAgICAgIHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKKyAgICAgIHsgcmV0dXJuIHRoaXMtPnhzcHV0bihfX3MsIF9fbik7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQmFzZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqCisgICAgICAgKiAgT25seSBjYWxsZWQgZnJvbSBkZXJpdmVkIGNvbnN0cnVjdG9ycywgYW5kIHNldHMgdXAgYWxsIHRoZQorICAgICAgICogIGJ1ZmZlciBkYXRhIHRvIHplcm8sIGluY2x1ZGluZyB0aGUgcG9pbnRlcnMgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICogIGJhc2ljX3N0cmVhbWJ1ZiBjbGFzcyBkZXNjcmlwdGlvbi4gIE5vdGUgdGhhdCwgYXMgYSByZXN1bHQsCisgICAgICAgKiAgLSB0aGUgY2xhc3Mgc3RhcnRzIHdpdGggbm8gcmVhZCBub3Igd3JpdGUgcG9zaXRpb25zIGF2YWlsYWJsZSwKKyAgICAgICAqICAtIHRoaXMgaXMgbm90IGFuIGVycm9yCisgICAgICAqLworICAgICAgYmFzaWNfc3RyZWFtYnVmKCkKKyAgICAgIDogX01faW5fYmVnKDApLCBfTV9pbl9jdXIoMCksIF9NX2luX2VuZCgwKSwgCisgICAgICBfTV9vdXRfYmVnKDApLCBfTV9vdXRfY3VyKDApLCBfTV9vdXRfZW5kKDApLAorICAgICAgX01fYnVmX2xvY2FsZShsb2NhbGUoKSkgCisgICAgICB7IH0KKworICAgICAgLy8gWzI3LjUuMi4zLjFdIGdldCBhcmVhIGFjY2VzcworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBY2Nlc3MgdG8gdGhlIGdldCBhcmVhLgorICAgICAgICoKKyAgICAgICAqICBUaGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgYXZhaWxhYmxlIHRvIG90aGVyIHByb3RlY3RlZCBmdW5jdGlvbnMsCisgICAgICAgKiAgaW5jbHVkaW5nIGRlcml2ZWQgY2xhc3Nlcy4KKyAgICAgICAqCisgICAgICAgKiAgLSBlYmFjaygpIHJldHVybnMgdGhlIGJlZ2lubmluZyBwb2ludGVyIGZvciB0aGUgaW5wdXQgc2VxdWVuY2UKKyAgICAgICAqICAtIGdwdHIoKSByZXR1cm5zIHRoZSBuZXh0IHBvaW50ZXIgZm9yIHRoZSBpbnB1dCBzZXF1ZW5jZQorICAgICAgICogIC0gZWdwdHIoKSByZXR1cm5zIHRoZSBlbmQgcG9pbnRlciBmb3IgdGhlIGlucHV0IHNlcXVlbmNlCisgICAgICAqLworICAgICAgY2hhcl90eXBlKiAKKyAgICAgIGViYWNrKCkgY29uc3QgeyByZXR1cm4gX01faW5fYmVnOyB9CisKKyAgICAgIGNoYXJfdHlwZSogCisgICAgICBncHRyKCkgIGNvbnN0IHsgcmV0dXJuIF9NX2luX2N1cjsgIH0KKworICAgICAgY2hhcl90eXBlKiAKKyAgICAgIGVncHRyKCkgY29uc3QgeyByZXR1cm4gX01faW5fZW5kOyB9CisgICAgICAvL0B9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTW92aW5nIHRoZSByZWFkIHBvc2l0aW9uLgorICAgICAgICogIEBwYXJhbSAgbiAgVGhlIGRlbHRhIGJ5IHdoaWNoIHRvIG1vdmUuCisgICAgICAgKgorICAgICAgICogIFRoaXMganVzdCBhZHZhbmNlcyB0aGUgcmVhZCBwb3NpdGlvbiB3aXRob3V0IHJldHVybmluZyBhbnkgZGF0YS4KKyAgICAgICovCisgICAgICB2b2lkIAorICAgICAgZ2J1bXAoaW50IF9fbikgeyBfTV9pbl9jdXIgKz0gX19uOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU2V0dGluZyB0aGUgdGhyZWUgcmVhZCBhcmVhIHBvaW50ZXJzLgorICAgICAgICogIEBwYXJhbSAgZ2JlZyAgQSBwb2ludGVyLgorICAgICAgICogIEBwYXJhbSAgZ25leHQgIEEgcG9pbnRlci4KKyAgICAgICAqICBAcGFyYW0gIGdlbmQgIEEgcG9pbnRlci4KKyAgICAgICAqICBAcG9zdCAgQGEgZ2JlZyA9PSBAYyBlYmFjaygpLCBAYSBnbmV4dCA9PSBAYyBncHRyKCksIGFuZAorICAgICAgICogICAgICAgICBAYSBnZW5kID09IEBjIGVncHRyKCkKKyAgICAgICovCisgICAgICB2b2lkIAorICAgICAgc2V0ZyhjaGFyX3R5cGUqIF9fZ2JlZywgY2hhcl90eXBlKiBfX2duZXh0LCBjaGFyX3R5cGUqIF9fZ2VuZCkKKyAgICAgIHsKKwlfTV9pbl9iZWcgPSBfX2diZWc7CisJX01faW5fY3VyID0gX19nbmV4dDsKKwlfTV9pbl9lbmQgPSBfX2dlbmQ7CisgICAgICB9CisKKyAgICAgIC8vIFsyNy41LjIuMy4yXSBwdXQgYXJlYSBhY2Nlc3MKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQWNjZXNzIHRvIHRoZSBwdXQgYXJlYS4KKyAgICAgICAqCisgICAgICAgKiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IGF2YWlsYWJsZSB0byBvdGhlciBwcm90ZWN0ZWQgZnVuY3Rpb25zLAorICAgICAgICogIGluY2x1ZGluZyBkZXJpdmVkIGNsYXNzZXMuCisgICAgICAgKgorICAgICAgICogIC0gcGJhc2UoKSByZXR1cm5zIHRoZSBiZWdpbm5pbmcgcG9pbnRlciBmb3IgdGhlIG91dHB1dCBzZXF1ZW5jZQorICAgICAgICogIC0gcHB0cigpIHJldHVybnMgdGhlIG5leHQgcG9pbnRlciBmb3IgdGhlIG91dHB1dCBzZXF1ZW5jZQorICAgICAgICogIC0gZXBwdHIoKSByZXR1cm5zIHRoZSBlbmQgcG9pbnRlciBmb3IgdGhlIG91dHB1dCBzZXF1ZW5jZQorICAgICAgKi8KKyAgICAgIGNoYXJfdHlwZSogCisgICAgICBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9iZWc7IH0KKworICAgICAgY2hhcl90eXBlKiAKKyAgICAgIHBwdHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfY3VyOyB9CisKKyAgICAgIGNoYXJfdHlwZSogCisgICAgICBlcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9lbmQ7IH0KKyAgICAgIC8vQH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBNb3ZpbmcgdGhlIHdyaXRlIHBvc2l0aW9uLgorICAgICAgICogIEBwYXJhbSAgbiAgVGhlIGRlbHRhIGJ5IHdoaWNoIHRvIG1vdmUuCisgICAgICAgKgorICAgICAgICogIFRoaXMganVzdCBhZHZhbmNlcyB0aGUgd3JpdGUgcG9zaXRpb24gd2l0aG91dCByZXR1cm5pbmcgYW55IGRhdGEuCisgICAgICAqLworICAgICAgdm9pZCAKKyAgICAgIHBidW1wKGludCBfX24pIHsgX01fb3V0X2N1ciArPSBfX247IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTZXR0aW5nIHRoZSB0aHJlZSB3cml0ZSBhcmVhIHBvaW50ZXJzLgorICAgICAgICogIEBwYXJhbSAgcGJlZyAgQSBwb2ludGVyLgorICAgICAgICogIEBwYXJhbSAgcGVuZCAgQSBwb2ludGVyLgorICAgICAgICogIEBwb3N0ICBAYSBwYmVnID09IEBjIHBiYXNlKCksIEBhIHBiZWcgPT0gQGMgcHB0cigpLCBhbmQKKyAgICAgICAqICAgICAgICAgQGEgcGVuZCA9PSBAYyBlcHB0cigpCisgICAgICAqLworICAgICAgdm9pZCAKKyAgICAgIHNldHAoY2hhcl90eXBlKiBfX3BiZWcsIGNoYXJfdHlwZSogX19wZW5kKQorICAgICAgeyAKKwlfTV9vdXRfYmVnID0gX01fb3V0X2N1ciA9IF9fcGJlZzsgCisJX01fb3V0X2VuZCA9IF9fcGVuZDsKKyAgICAgIH0KKworICAgICAgLy8gWzI3LjUuMi40XSB2aXJ0dWFsIGZ1bmN0aW9ucworICAgICAgLy8gWzI3LjUuMi40LjFdIGxvY2FsZXMKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ2hhbmdlcyB0cmFuc2xhdGlvbnMuCisgICAgICAgKiAgQHBhcmFtICBsb2MgIEEgbmV3IGxvY2FsZS4KKyAgICAgICAqCisgICAgICAgKiAgVHJhbnNsYXRpb25zIGRvbmUgZHVyaW5nIEkvTyB3aGljaCBkZXBlbmQgb24gdGhlIGN1cnJlbnQKKyAgICAgICAqICBsb2NhbGUgYXJlIGNoYW5nZWQgYnkgdGhpcyBjYWxsLiAgVGhlIHN0YW5kYXJkIGFkZHMsCisgICAgICAgKiAgPGVtPkJldHdlZW4gaW52b2NhdGlvbnMgb2YgdGhpcyBmdW5jdGlvbiBhIGNsYXNzIGRlcml2ZWQKKyAgICAgICAqICBmcm9tIHN0cmVhbWJ1ZiBjYW4gc2FmZWx5IGNhY2hlIHJlc3VsdHMgb2YgY2FsbHMgdG8gbG9jYWxlCisgICAgICAgKiAgZnVuY3Rpb25zIGFuZCB0byBtZW1iZXJzIG9mIGZhY2V0cyBzbyBvYnRhaW5lZC48L2VtPgorICAgICAgICoKKyAgICAgICAqICBAbm90ZSAgQmFzZSBjbGFzcyB2ZXJzaW9uIGRvZXMgbm90aGluZy4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIHZvaWQgCisgICAgICBpbWJ1ZShjb25zdCBsb2NhbGUmKSAKKyAgICAgIHsgfQorCisgICAgICAvLyBbMjcuNS4yLjQuMl0gYnVmZmVyIG1hbmFnZW1lbnQgYW5kIHBvc2l0aW9uaW5nCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE1hbmlwdWxhdGVzIHRoZSBidWZmZXIuCisgICAgICAgKgorICAgICAgICogIEVhY2ggZGVyaXZlZCBjbGFzcyBwcm92aWRlcyBpdHMgb3duIGFwcHJvcHJpYXRlIGJlaGF2aW9yLiAgU2VlCisgICAgICAgKiAgdGhlIG5leHQtdG8tbGFzdCBwYXJhZ3JhcGggb2YgCisgICAgICAgKiAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL21hbnVhbC9iazAxcHQxMWNoMjVzMDIuaHRtbAorICAgICAgICogIGZvciBtb3JlIG9uIHRoaXMgZnVuY3Rpb24uCisgICAgICAgKgorICAgICAgICogIEBub3RlICBCYXNlIGNsYXNzIHZlcnNpb24gZG9lcyBub3RoaW5nLCByZXR1cm5zIEBjIHRoaXMuCisgICAgICAqLworICAgICAgdmlydHVhbCBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLF9UcmFpdHM+KiAKKyAgICAgIHNldGJ1ZihjaGFyX3R5cGUqLCBzdHJlYW1zaXplKQorICAgICAgewlyZXR1cm4gdGhpczsgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFsdGVycyB0aGUgc3RyZWFtIHBvc2l0aW9ucy4KKyAgICAgICAqCisgICAgICAgKiAgRWFjaCBkZXJpdmVkIGNsYXNzIHByb3ZpZGVzIGl0cyBvd24gYXBwcm9wcmlhdGUgYmVoYXZpb3IuCisgICAgICAgKiAgQG5vdGUgIEJhc2UgY2xhc3MgdmVyc2lvbiBkb2VzIG5vdGhpbmcsIHJldHVybnMgYSBAYyBwb3NfdHlwZQorICAgICAgICogICAgICAgICB0aGF0IHJlcHJlc2VudHMgYW4gaW52YWxpZCBzdHJlYW0gcG9zaXRpb24uCisgICAgICAqLworICAgICAgdmlydHVhbCBwb3NfdHlwZSAKKyAgICAgIHNlZWtvZmYob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyLAorCSAgICAgIGlvc19iYXNlOjpvcGVubW9kZSAvKl9fbW9kZSovID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKKyAgICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBlKC0xKSk7IH0gCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQWx0ZXJzIHRoZSBzdHJlYW0gcG9zaXRpb25zLgorICAgICAgICoKKyAgICAgICAqICBFYWNoIGRlcml2ZWQgY2xhc3MgcHJvdmlkZXMgaXRzIG93biBhcHByb3ByaWF0ZSBiZWhhdmlvci4KKyAgICAgICAqICBAbm90ZSAgQmFzZSBjbGFzcyB2ZXJzaW9uIGRvZXMgbm90aGluZywgcmV0dXJucyBhIEBjIHBvc190eXBlCisgICAgICAgKiAgICAgICAgIHRoYXQgcmVwcmVzZW50cyBhbiBpbnZhbGlkIHN0cmVhbSBwb3NpdGlvbi4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIHBvc190eXBlIAorICAgICAgc2Vla3Bvcyhwb3NfdHlwZSwgCisJICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIC8qX19tb2RlKi8gPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQorICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsgfSAKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTeW5jaHJvbml6ZXMgdGhlIGJ1ZmZlciBhcnJheXMgd2l0aCB0aGUgY29udHJvbGxlZCBzZXF1ZW5jZXMuCisgICAgICAgKiAgQHJldHVybiAgLTEgb24gZmFpbHVyZS4KKyAgICAgICAqCisgICAgICAgKiAgRWFjaCBkZXJpdmVkIGNsYXNzIHByb3ZpZGVzIGl0cyBvd24gYXBwcm9wcmlhdGUgYmVoYXZpb3IsCisgICAgICAgKiAgaW5jbHVkaW5nIHRoZSBkZWZpbml0aW9uIG9mIEBhIGZhaWx1cmUuCisgICAgICAgKiAgQG5vdGUgIEJhc2UgY2xhc3MgdmVyc2lvbiBkb2VzIG5vdGhpbmcsIHJldHVybnMgemVyby4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGludCAKKyAgICAgIHN5bmMoKSB7IHJldHVybiAwOyB9CisKKyAgICAgIC8vIFsyNy41LjIuNC4zXSBnZXQgYXJlYQorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnZlc3RpZ2F0aW5nIHRoZSBkYXRhIGF2YWlsYWJsZS4KKyAgICAgICAqICBAcmV0dXJuICBBbiBlc3RpbWF0ZSBvZiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYXZhaWxhYmxlIGluIHRoZQorICAgICAgICogICAgICAgICAgIGlucHV0IHNlcXVlbmNlLCBvciAtMS4KKyAgICAgICAqCisgICAgICAgKiAgPGVtPklmIGl0IHJldHVybnMgYSBwb3NpdGl2ZSB2YWx1ZSwgdGhlbiBzdWNjZXNzaXZlIGNhbGxzIHRvCisgICAgICAgKiAgQGMgdW5kZXJmbG93KCkgd2lsbCBub3QgcmV0dXJuIEBjIHRyYWl0czo6ZW9mKCkgdW50aWwgYXQKKyAgICAgICAqICBsZWFzdCB0aGF0IG51bWJlciBvZiBjaGFyYWN0ZXJzIGhhdmUgYmVlbiBzdXBwbGllZC4gIElmIEBjCisgICAgICAgKiAgc2hvd21hbnljKCkgcmV0dXJucyAtMSwgdGhlbiBjYWxscyB0byBAYyB1bmRlcmZsb3coKSBvciBAYworICAgICAgICogIHVmbG93KCkgd2lsbCBmYWlsLjwvZW0+IFsyNy41LjIuNC4zXS8xCisgICAgICAgKgorICAgICAgICogIEBub3RlICBCYXNlIGNsYXNzIHZlcnNpb24gZG9lcyBub3RoaW5nLCByZXR1cm5zIHplcm8uCisgICAgICAgKiAgQG5vdGUgIFRoZSBzdGFuZGFyZCBhZGRzIHRoYXQgPGVtPnRoZSBpbnRlbnRpb24gaXMgbm90IG9ubHkgdGhhdCB0aGUKKyAgICAgICAqICAgICAgICAgY2FsbHMgW3RvIHVuZGVyZmxvdyBvciB1Zmxvd10gd2lsbCBub3QgcmV0dXJuIEBjIGVvZigpIGJ1dAorICAgICAgICogICAgICAgICB0aGF0IHRoZXkgd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkuPC9lbT4KKyAgICAgICAqICBAbm90ZSAgVGhlIHN0YW5kYXJkIGFkZHMgdGhhdCA8ZW0+dGhlIG1vcnBoZW1lcyBvZiBAYyBzaG93bWFueWMgYXJlCisgICAgICAgKiAgICAgICAgIEBiIGVzLWhvdy1tYW55LXNlZSwgbm90IEBiIHNob3ctbWFuaWMuPC9lbT4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIHN0cmVhbXNpemUgCisgICAgICBzaG93bWFueWMoKSB7IHJldHVybiAwOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTXVsdGlwbGUgY2hhcmFjdGVyIGV4dHJhY3Rpb24uCisgICAgICAgKiAgQHBhcmFtICBzICBBIGJ1ZmZlciBhcmVhLgorICAgICAgICogIEBwYXJhbSAgbiAgTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBhc3NpZ24uCisgICAgICAgKiAgQHJldHVybiAgVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFzc2lnbmVkLgorICAgICAgICoKKyAgICAgICAqICBGaWxscyBAYSBzWzBdIHRocm91Z2ggQGEgc1tuLTFdIHdpdGggY2hhcmFjdGVycyBmcm9tIHRoZSBpbnB1dAorICAgICAgICogIHNlcXVlbmNlLCBhcyBpZiBieSBAYyBzYnVtcGMoKS4gIFN0b3BzIHdoZW4gZWl0aGVyIEBhIG4gY2hhcmFjdGVycworICAgICAgICogIGhhdmUgYmVlbiBjb3BpZWQsIG9yIHdoZW4gQGMgdHJhaXRzOjplb2YoKSB3b3VsZCBiZSBjb3BpZWQuCisgICAgICAgKgorICAgICAgICogIEl0IGlzIGV4cGVjdGVkIHRoYXQgZGVyaXZlZCBjbGFzc2VzIHByb3ZpZGUgYSBtb3JlIGVmZmljaWVudAorICAgICAgICogIGltcGxlbWVudGF0aW9uIGJ5IG92ZXJyaWRpbmcgdGhpcyBkZWZpbml0aW9uLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSAKKyAgICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZldGNoZXMgbW9yZSBkYXRhIGZyb20gdGhlIGNvbnRyb2xsZWQgc2VxdWVuY2UuCisgICAgICAgKiAgQHJldHVybiAgVGhlIGZpcnN0IGNoYXJhY3RlciBmcm9tIHRoZSA8ZW0+cGVuZGluZyBzZXF1ZW5jZTwvZW0+LgorICAgICAgICoKKyAgICAgICAqICBJbmZvcm1hbGx5LCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBpbnB1dCBidWZmZXIgaXMKKyAgICAgICAqICBleGhhdXN0ZWQgKG9yIGRvZXMgbm90IGV4aXN0LCBhcyBidWZmZXJpbmcgbmVlZCBub3QgYWN0dWFsbHkgYmUKKyAgICAgICAqICBkb25lKS4gIElmIGEgYnVmZmVyIGV4aXN0cywgaXQgaXMgQGEgcmVmaWxsZWQuICBJbiBlaXRoZXIgY2FzZSwgdGhlCisgICAgICAgKiAgbmV4dCBhdmFpbGFibGUgY2hhcmFjdGVyIGlzIHJldHVybmVkLCBvciBAYyB0cmFpdHM6OmVvZigpIHRvCisgICAgICAgKiAgaW5kaWNhdGUgYSBudWxsIHBlbmRpbmcgc2VxdWVuY2UuCisgICAgICAgKgorICAgICAgICogIEZvciBhIGZvcm1hbCBkZWZpbml0aW9uIG9mIHRoZSBwZW5kaW5nIHNlcXVlbmNlLCBzZWUgYSBnb29kIHRleHQKKyAgICAgICAqICBzdWNoIGFzIExhbmdlciAmIEtyZWZ0LCBvciBbMjcuNS4yLjQuM10vNy0xNC4KKyAgICAgICAqCisgICAgICAgKiAgQSBmdW5jdGlvbmluZyBpbnB1dCBzdHJlYW1idWYgY2FuIGJlIGNyZWF0ZWQgYnkgb3ZlcnJpZGluZyBvbmx5CisgICAgICAgKiAgdGhpcyBmdW5jdGlvbiAobm8gYnVmZmVyIGFyZWEgd2lsbCBiZSB1c2VkKS4gIEZvciBhbiBleGFtcGxlLCBzZWUKKyAgICAgICAqICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9saWJzdGRjKysvbWFudWFsL2JrMDFwdDExY2gyNS5odG1sCisgICAgICAgKgorICAgICAgICogIEBub3RlICBCYXNlIGNsYXNzIHZlcnNpb24gZG9lcyBub3RoaW5nLCByZXR1cm5zIGVvZigpLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgaW50X3R5cGUgCisgICAgICB1bmRlcmZsb3coKQorICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmV0Y2hlcyBtb3JlIGRhdGEgZnJvbSB0aGUgY29udHJvbGxlZCBzZXF1ZW5jZS4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgZmlyc3QgY2hhcmFjdGVyIGZyb20gdGhlIDxlbT5wZW5kaW5nIHNlcXVlbmNlPC9lbT4uCisgICAgICAgKgorICAgICAgICogIEluZm9ybWFsbHksIHRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgc2FtZSB0aGluZyBhcyBAYyB1bmRlcmZsb3coKSwKKyAgICAgICAqICBhbmQgaW4gZmFjdCBpcyByZXF1aXJlZCB0byBjYWxsIHRoYXQgZnVuY3Rpb24uICBJdCBhbHNvIHJldHVybnMKKyAgICAgICAqICB0aGUgbmV3IGNoYXJhY3RlciwgbGlrZSBAYyB1bmRlcmZsb3coKSBkb2VzLiAgSG93ZXZlciwgdGhpcworICAgICAgICogIGZ1bmN0aW9uIGFsc28gbW92ZXMgdGhlIHJlYWQgcG9zaXRpb24gZm9yd2FyZCBieSBvbmUuCisgICAgICAqLworICAgICAgdmlydHVhbCBpbnRfdHlwZSAKKyAgICAgIHVmbG93KCkgCisgICAgICB7CisJaW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CisJY29uc3QgYm9vbCBfX3Rlc3Rlb2YgPSB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUodGhpcy0+dW5kZXJmbG93KCksIAorCQkJCQkJCV9fcmV0KTsKKwlpZiAoIV9fdGVzdGVvZikKKwkgIHsKKwkgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKnRoaXMtPmdwdHIoKSk7CisJICAgIHRoaXMtPmdidW1wKDEpOworCSAgfQorCXJldHVybiBfX3JldDsgICAgCisgICAgICB9CisKKyAgICAgIC8vIFsyNy41LjIuNC40XSBwdXRiYWNrCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFRyaWVzIHRvIGJhY2sgdXAgdGhlIGlucHV0IHNlcXVlbmNlLgorICAgICAgICogIEBwYXJhbSAgYyAgVGhlIGNoYXJhY3RlciB0byBiZSBpbnNlcnRlZCBiYWNrIGludG8gdGhlIHNlcXVlbmNlLgorICAgICAgICogIEByZXR1cm4gIGVvZigpIG9uIGZhaWx1cmUsIDxlbT5zb21lIG90aGVyIHZhbHVlPC9lbT4gb24gc3VjY2VzcworICAgICAgICogIEBwb3N0ICBUaGUgY29uc3RyYWludHMgb2YgQGMgZ3B0cigpLCBAYyBlYmFjaygpLCBhbmQgQGMgcHB0cigpCisgICAgICAgKiAgICAgICAgIGFyZSB0aGUgc2FtZSBhcyBmb3IgQGMgdW5kZXJmbG93KCkuCisgICAgICAgKgorICAgICAgICogIEBub3RlICBCYXNlIGNsYXNzIHZlcnNpb24gZG9lcyBub3RoaW5nLCByZXR1cm5zIGVvZigpLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgaW50X3R5cGUgCisgICAgICBwYmFja2ZhaWwoaW50X3R5cGUgLyogX19jICovICA9IHRyYWl0c190eXBlOjplb2YoKSkKKyAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQorCisgICAgICAvLyBQdXQgYXJlYToKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTXVsdGlwbGUgY2hhcmFjdGVyIGluc2VydGlvbi4KKyAgICAgICAqICBAcGFyYW0gIHMgIEEgYnVmZmVyIGFyZWEuCisgICAgICAgKiAgQHBhcmFtICBuICBNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHdyaXRlLgorICAgICAgICogIEByZXR1cm4gIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuLgorICAgICAgICoKKyAgICAgICAqICBXcml0ZXMgQGEgc1swXSB0aHJvdWdoIEBhIHNbbi0xXSB0byB0aGUgb3V0cHV0IHNlcXVlbmNlLCBhcyBpZgorICAgICAgICogIGJ5IEBjIHNwdXRjKCkuICBTdG9wcyB3aGVuIGVpdGhlciBAYSBuIGNoYXJhY3RlcnMgaGF2ZSBiZWVuCisgICAgICAgKiAgY29waWVkLCBvciB3aGVuIEBjIHNwdXRjKCkgd291bGQgcmV0dXJuIEBjIHRyYWl0czo6ZW9mKCkuCisgICAgICAgKgorICAgICAgICogIEl0IGlzIGV4cGVjdGVkIHRoYXQgZGVyaXZlZCBjbGFzc2VzIHByb3ZpZGUgYSBtb3JlIGVmZmljaWVudAorICAgICAgICogIGltcGxlbWVudGF0aW9uIGJ5IG92ZXJyaWRpbmcgdGhpcyBkZWZpbml0aW9uLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSAKKyAgICAgIHhzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN1bWVzIGRhdGEgZnJvbSB0aGUgYnVmZmVyOyB3cml0ZXMgdG8gdGhlCisgICAgICAgKiAgICAgICAgICBjb250cm9sbGVkIHNlcXVlbmNlLgorICAgICAgICogIEBwYXJhbSAgYyAgQW4gYWRkaXRpb25hbCBjaGFyYWN0ZXIgdG8gY29uc3VtZS4KKyAgICAgICAqICBAcmV0dXJuICBlb2YoKSB0byBpbmRpY2F0ZSBmYWlsdXJlLCBzb21ldGhpbmcgZWxzZSAodXN1YWxseQorICAgICAgICogICAgICAgICAgIEBhIGMsIG9yIG5vdF9lb2YoKSkKKyAgICAgICAqCisgICAgICAgKiAgSW5mb3JtYWxseSwgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgb3V0cHV0IGJ1ZmZlcgorICAgICAgICogIGlzIGZ1bGwgKG9yIGRvZXMgbm90IGV4aXN0LCBhcyBidWZmZXJpbmcgbmVlZCBub3QgYWN0dWFsbHkKKyAgICAgICAqICBiZSBkb25lKS4gIElmIGEgYnVmZmVyIGV4aXN0cywgaXQgaXMgQGEgY29uc3VtZWQsIHdpdGgKKyAgICAgICAqICA8ZW0+c29tZSBlZmZlY3Q8L2VtPiBvbiB0aGUgY29udHJvbGxlZCBzZXF1ZW5jZS4KKyAgICAgICAqICAoVHlwaWNhbGx5LCB0aGUgYnVmZmVyIGlzIHdyaXR0ZW4gb3V0IHRvIHRoZSBzZXF1ZW5jZQorICAgICAgICogIHZlcmJhdGltLikgIEluIGVpdGhlciBjYXNlLCB0aGUgY2hhcmFjdGVyIEBhIGMgaXMgYWxzbworICAgICAgICogIHdyaXR0ZW4gb3V0LCBpZiBAYSBjIGlzIG5vdCBAYyBlb2YoKS4KKyAgICAgICAqCisgICAgICAgKiAgRm9yIGEgZm9ybWFsIGRlZmluaXRpb24gb2YgdGhpcyBmdW5jdGlvbiwgc2VlIGEgZ29vZCB0ZXh0CisgICAgICAgKiAgc3VjaCBhcyBMYW5nZXIgJiBLcmVmdCwgb3IgWzI3LjUuMi40LjVdLzMtNy4KKyAgICAgICAqCisgICAgICAgKiAgQSBmdW5jdGlvbmluZyBvdXRwdXQgc3RyZWFtYnVmIGNhbiBiZSBjcmVhdGVkIGJ5IG92ZXJyaWRpbmcgb25seQorICAgICAgICogIHRoaXMgZnVuY3Rpb24gKG5vIGJ1ZmZlciBhcmVhIHdpbGwgYmUgdXNlZCkuCisgICAgICAgKgorICAgICAgICogIEBub3RlICBCYXNlIGNsYXNzIHZlcnNpb24gZG9lcyBub3RoaW5nLCByZXR1cm5zIGVvZigpLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgaW50X3R5cGUgCisgICAgICBvdmVyZmxvdyhpbnRfdHlwZSAvKiBfX2MgKi8gPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCisgICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KKworI2lmIF9HTElCQ1hYX0RFUFJFQ0FURUQKKyAgICAvLyBBbm5leCBELjYKKyAgICBwdWJsaWM6CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFRvc3NlcyBhIGNoYXJhY3Rlci4KKyAgICAgICAqCisgICAgICAgKiAgQWR2YW5jZXMgdGhlIHJlYWQgcG9pbnRlciwgaWdub3JpbmcgdGhlIGNoYXJhY3RlciB0aGF0IHdvdWxkIGhhdmUKKyAgICAgICAqICBiZWVuIHJlYWQuCisgICAgICAgKgorICAgICAgICogIFNlZSBodHRwOi8vZ2NjLmdudS5vcmcvbWwvbGlic3RkYysrLzIwMDItMDUvbXNnMDAxNjguaHRtbAorICAgICAgICovCisgICAgICB2b2lkIAorICAgICAgc3Rvc3NjKCkgCisgICAgICB7CisJaWYgKHRoaXMtPmdwdHIoKSA8IHRoaXMtPmVncHRyKCkpIAorCSAgdGhpcy0+Z2J1bXAoMSk7CisJZWxzZSAKKwkgIHRoaXMtPnVmbG93KCk7CisgICAgICB9CisjZW5kaWYKKworICAgIHByaXZhdGU6CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBTaWRlIGVmZmVjdCBvZiBEUiA1MC4gCisgICAgICBiYXNpY19zdHJlYW1idWYoY29uc3QgX19zdHJlYW1idWZfdHlwZSYgX19zYikKKyAgICAgIDogX01faW5fYmVnKF9fc2IuX01faW5fYmVnKSwgX01faW5fY3VyKF9fc2IuX01faW5fY3VyKSwgCisgICAgICBfTV9pbl9lbmQoX19zYi5fTV9pbl9lbmQpLCBfTV9vdXRfYmVnKF9fc2IuX01fb3V0X2JlZyksIAorICAgICAgX01fb3V0X2N1cihfX3NiLl9NX291dF9jdXIpLCBfTV9vdXRfZW5kKF9fc2IuX01fb3V0X2N1ciksCisgICAgICBfTV9idWZfbG9jYWxlKF9fc2IuX01fYnVmX2xvY2FsZSkgCisgICAgICB7IH0KKworICAgICAgX19zdHJlYW1idWZfdHlwZSYgCisgICAgICBvcGVyYXRvcj0oY29uc3QgX19zdHJlYW1idWZfdHlwZSYpIHsgcmV0dXJuICp0aGlzOyB9OworICAgIH07CisKKyAgLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb24gZGVjbGFyYXRpb25zLCBkZWZpbmVkIGluIHNyYy9zdHJlYW1idWYuY2MuCisgIHRlbXBsYXRlPD4KKyAgICBzdHJlYW1zaXplCisgICAgX19jb3B5X3N0cmVhbWJ1ZnNfZW9mKGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPiogX19zYmluLAorCQkJICBiYXNpY19zdHJlYW1idWY8Y2hhcj4qIF9fc2JvdXQsIGJvb2wmIF9faW5lb2YpOworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIHRlbXBsYXRlPD4KKyAgICBzdHJlYW1zaXplCisgICAgX19jb3B5X3N0cmVhbWJ1ZnNfZW9mKGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiogX19zYmluLAorCQkJICBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4qIF9fc2JvdXQsIGJvb2wmIF9faW5lb2YpOworI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2lmbmRlZiBfR0xJQkNYWF9FWFBPUlRfVEVNUExBVEUKKyMgaW5jbHVkZSA8Yml0cy9zdHJlYW1idWYudGNjPgorI2VuZGlmCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9TVFJFQU1CVUYgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvc3RyaW5nIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy9zdHJpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM1OTQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvc3RyaW5nCkBAIC0wLDAgKzEsNTkgQEAKKy8vIENvbXBvbmVudHMgZm9yIG1hbmlwdWxhdGluZyBzZXF1ZW5jZXMgb2YgY2hhcmFjdGVycyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsCisvLyAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgaW5jbHVkZS9zdHJpbmcKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyMSAgU3RyaW5ncyBsaWJyYXJ5CisvLworCisjaWZuZGVmIF9HTElCQ1hYX1NUUklORworI2RlZmluZSBfR0xJQkNYWF9TVFJJTkcJMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGJpdHMvc3RyaW5nZndkLmg+CisjaW5jbHVkZSA8Yml0cy9jaGFyX3RyYWl0cy5oPiAgLy8gTkI6IEluIHR1cm4gaW5jbHVkZXMgc3RsX2FsZ29iYXNlLmgKKyNpbmNsdWRlIDxiaXRzL2FsbG9jYXRvci5oPgorI2luY2x1ZGUgPGJpdHMvY3BwX3R5cGVfdHJhaXRzLmg+CisjaW5jbHVkZSA8Yml0cy9sb2NhbGVmd2QuaD4gICAgLy8gRm9yIG9wZXJhdG9ycyA+PiwgPDwsIGFuZCBnZXRsaW5lLgorI2luY2x1ZGUgPGJpdHMvb3N0cmVhbV9pbnNlcnQuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2l0ZXJhdG9yLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfZnVuY3Rpb24uaD4gLy8gRm9yIGxlc3MKKyNpbmNsdWRlIDxleHQvbnVtZXJpY190cmFpdHMuaD4gCisjaW5jbHVkZSA8Yml0cy9zdGxfYWxnb2Jhc2UuaD4gCisjaW5jbHVkZSA8Yml0cy9iYXNpY19zdHJpbmcuaD4KKworI2lmbmRlZiBfR0xJQkNYWF9FWFBPUlRfVEVNUExBVEUKKyMgaW5jbHVkZSA8Yml0cy9iYXNpY19zdHJpbmcudGNjPiAKKyNlbmRpZgorCisjZW5kaWYgLyogX0dMSUJDWFhfU1RSSU5HICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3N5c3RlbV9lcnJvciBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvc3lzdGVtX2Vycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMGI5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3N5c3RlbV9lcnJvcgpAQCAtMCwwICsxLDM3MCBAQAorLy8gPHN5c3RlbV9lcnJvcj4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBzeXN0ZW1fZXJyb3IKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfU1lTVEVNX0VSUk9SCisjZGVmaW5lIF9HTElCQ1hYX1NZU1RFTV9FUlJPUiAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2lmbmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworIyBpbmNsdWRlIDxiaXRzL2MrKzB4X3dhcm5pbmcuaD4KKyNlbHNlCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGJpdHMvZXJyb3JfY29uc3RhbnRzLmg+CisjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICBjbGFzcyBlcnJvcl9jb2RlOworICBjbGFzcyBlcnJvcl9jb25kaXRpb247CisgIGNsYXNzIGVycm9yX2NhdGVnb3J5OworICBjbGFzcyBzeXN0ZW1fZXJyb3I7CisKKyAgLy8vIGlzX2Vycm9yX2NvZGVfZW51bQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX2Vycm9yX2NvZGVfZW51bSA6IHB1YmxpYyBmYWxzZV90eXBlIHsgfTsKKworICAvLy8gaXNfZXJyb3JfY29uZGl0aW9uX2VudW0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19lcnJvcl9jb25kaXRpb25fZW51bSA6IHB1YmxpYyBmYWxzZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTw+IAorICAgIHN0cnVjdCBpc19lcnJvcl9jb25kaXRpb25fZW51bTxlcnJjPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKworICAvLy8gZXJyb3JfY2F0ZWdvcnkKKyAgY2xhc3MgZXJyb3JfY2F0ZWdvcnkKKyAgeworICBwcm90ZWN0ZWQ6CisgICAgZXJyb3JfY2F0ZWdvcnkoKTsKKworICBwdWJsaWM6CisgICAgdmlydHVhbCB+ZXJyb3JfY2F0ZWdvcnkoKSB7IH0KKworICAgIGVycm9yX2NhdGVnb3J5KGNvbnN0IGVycm9yX2NhdGVnb3J5JikgPSBkZWxldGU7CisgICAgZXJyb3JfY2F0ZWdvcnkmIG9wZXJhdG9yPShjb25zdCBlcnJvcl9jYXRlZ29yeSYpID0gZGVsZXRlOworCisgICAgdmlydHVhbCBjb25zdCBjaGFyKiAKKyAgICBuYW1lKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBzdHJpbmcgCisgICAgbWVzc2FnZShpbnQpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgZXJyb3JfY29uZGl0aW9uCisgICAgZGVmYXVsdF9lcnJvcl9jb25kaXRpb24oaW50IF9faSkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgCisgICAgZXF1aXZhbGVudChpbnQgX19pLCBjb25zdCBlcnJvcl9jb25kaXRpb24mIF9fY29uZCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgCisgICAgZXF1aXZhbGVudChjb25zdCBlcnJvcl9jb2RlJiBfX2NvZGUsIGludCBfX2kpIGNvbnN0OworCisgICAgYm9vbCAKKyAgICBvcGVyYXRvcjwoY29uc3QgZXJyb3JfY2F0ZWdvcnkmIF9fb3RoZXIpIGNvbnN0CisgICAgeyByZXR1cm4gbGVzczxjb25zdCBlcnJvcl9jYXRlZ29yeSo+KCkodGhpcywgJl9fb3RoZXIpOyB9CisKKyAgICBib29sIAorICAgIG9wZXJhdG9yPT0oY29uc3QgZXJyb3JfY2F0ZWdvcnkmIF9fb3RoZXIpIGNvbnN0CisgICAgeyByZXR1cm4gdGhpcyA9PSAmX19vdGhlcjsgfQorCisgICAgYm9vbCAKKyAgICBvcGVyYXRvciE9KGNvbnN0IGVycm9yX2NhdGVnb3J5JiBfX290aGVyKSBjb25zdAorICAgIHsgcmV0dXJuIHRoaXMgIT0gJl9fb3RoZXI7IH0KKyAgfTsKKworICBpbmxpbmUgZXJyb3JfY2F0ZWdvcnk6OmVycm9yX2NhdGVnb3J5KCkgPSBkZWZhdWx0OworCisgIC8vIERSIDg5MC4KKyAgX0dMSUJDWFhfQ09OU1QgY29uc3QgZXJyb3JfY2F0ZWdvcnkmIHN5c3RlbV9jYXRlZ29yeSgpIHRocm93KCk7CisgIF9HTElCQ1hYX0NPTlNUIGNvbnN0IGVycm9yX2NhdGVnb3J5JiBnZW5lcmljX2NhdGVnb3J5KCkgdGhyb3coKTsKKworICBlcnJvcl9jb2RlIG1ha2VfZXJyb3JfY29kZShlcnJjKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGhhc2g7CisKKyAgLy8vIGVycm9yX2NvZGUKKyAgLy8gSW1wbGVtZW50YXRpb24tc3BlY2lmaWMgZXJyb3IgaWRlbnRpZmljYXRpb24KKyAgc3RydWN0IGVycm9yX2NvZGUKKyAgeworICAgIGVycm9yX2NvZGUoKQorICAgIDogX01fdmFsdWUoMCksIF9NX2NhdCgmc3lzdGVtX2NhdGVnb3J5KCkpIHsgfQorCisgICAgZXJyb3JfY29kZShpbnQgX192LCBjb25zdCBlcnJvcl9jYXRlZ29yeSYgX19jYXQpCisgICAgOiBfTV92YWx1ZShfX3YpLCBfTV9jYXQoJl9fY2F0KSB7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9FcnJvckNvZGVFbnVtPgorICAgICAgZXJyb3JfY29kZShfRXJyb3JDb2RlRW51bSBfX2UsCisgICAgICB0eXBlbmFtZSBlbmFibGVfaWY8aXNfZXJyb3JfY29kZV9lbnVtPF9FcnJvckNvZGVFbnVtPjo6dmFsdWU+Ojp0eXBlKiA9IDApCisgICAgICB7ICp0aGlzID0gbWFrZV9lcnJvcl9jb2RlKF9fZSk7IH0KKworICAgIHZvaWQgCisgICAgYXNzaWduKGludCBfX3YsIGNvbnN0IGVycm9yX2NhdGVnb3J5JiBfX2NhdCkKKyAgICB7CisgICAgICBfTV92YWx1ZSA9IF9fdjsKKyAgICAgIF9NX2NhdCA9ICZfX2NhdDsgCisgICAgfQorCisgICAgdm9pZCAKKyAgICBjbGVhcigpCisgICAgeyBhc3NpZ24oMCwgc3lzdGVtX2NhdGVnb3J5KCkpOyB9CisKKyAgICAvLyBEUiA4MDQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Vycm9yQ29kZUVudW0+CisgICAgICB0eXBlbmFtZSBlbmFibGVfaWY8aXNfZXJyb3JfY29kZV9lbnVtPF9FcnJvckNvZGVFbnVtPjo6dmFsdWUsCisJCQkgZXJyb3JfY29kZSY+Ojp0eXBlCisgICAgICBvcGVyYXRvcj0oX0Vycm9yQ29kZUVudW0gX19lKQorICAgICAgeyByZXR1cm4gKnRoaXMgPSBtYWtlX2Vycm9yX2NvZGUoX19lKTsgfQorCisgICAgaW50CisgICAgdmFsdWUoKSBjb25zdCB7IHJldHVybiBfTV92YWx1ZTsgfQorICAgICAgCisgICAgY29uc3QgZXJyb3JfY2F0ZWdvcnkmICAKKyAgICBjYXRlZ29yeSgpIGNvbnN0IHsgcmV0dXJuICpfTV9jYXQ7IH0KKworICAgIGVycm9yX2NvbmRpdGlvbiAKKyAgICBkZWZhdWx0X2Vycm9yX2NvbmRpdGlvbigpIGNvbnN0OworCisgICAgc3RyaW5nIAorICAgIG1lc3NhZ2UoKSBjb25zdAorICAgIHsgcmV0dXJuIGNhdGVnb3J5KCkubWVzc2FnZSh2YWx1ZSgpKTsgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeyByZXR1cm4gX01fdmFsdWUgIT0gMCA/IHRydWUgOiBmYWxzZTsgfQorCisgICAgLy8gRFIgODA0LgorICBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBoYXNoPGVycm9yX2NvZGU+OworCisgICAgaW50ICAgICAgICAgICAgCQlfTV92YWx1ZTsKKyAgICBjb25zdCBlcnJvcl9jYXRlZ29yeSogCV9NX2NhdDsKKyAgfTsKKworICAvLyAxOS40LjIuNiBub24tbWVtYmVyIGZ1bmN0aW9ucworICBpbmxpbmUgZXJyb3JfY29kZQorICBtYWtlX2Vycm9yX2NvZGUoZXJyYyBfX2UpCisgIHsgcmV0dXJuIGVycm9yX2NvZGUoc3RhdGljX2Nhc3Q8aW50PihfX2UpLCBnZW5lcmljX2NhdGVnb3J5KCkpOyB9CisKKyAgaW5saW5lIGJvb2wKKyAgb3BlcmF0b3I8KGNvbnN0IGVycm9yX2NvZGUmIF9fbGhzLCBjb25zdCBlcnJvcl9jb2RlJiBfX3JocykKKyAgeyAKKyAgICByZXR1cm4gKF9fbGhzLmNhdGVnb3J5KCkgPCBfX3Jocy5jYXRlZ29yeSgpCisJICAgIHx8IChfX2xocy5jYXRlZ29yeSgpID09IF9fcmhzLmNhdGVnb3J5KCkKKwkJJiYgX19saHMudmFsdWUoKSA8IF9fcmhzLnZhbHVlKCkpKTsKKyAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsIGNvbnN0IGVycm9yX2NvZGUmIF9fZSkKKyAgICB7IHJldHVybiAoX19vcyA8PCBfX2UuY2F0ZWdvcnkoKS5uYW1lKCkgPDwgJzonIDw8IF9fZS52YWx1ZSgpKTsgfQorCisgIGVycm9yX2NvbmRpdGlvbiBtYWtlX2Vycm9yX2NvbmRpdGlvbihlcnJjKTsKKworICAvLy8gZXJyb3JfY29uZGl0aW9uCisgIC8vIFBvcnRhYmxlIGVycm9yIGlkZW50aWZpY2F0aW9uCisgIHN0cnVjdCBlcnJvcl9jb25kaXRpb24gCisgIHsKKyAgICBlcnJvcl9jb25kaXRpb24oKQorICAgIDogX01fdmFsdWUoMCksIF9NX2NhdCgmZ2VuZXJpY19jYXRlZ29yeSgpKSB7IH0KKworICAgIGVycm9yX2NvbmRpdGlvbihpbnQgX192LCBjb25zdCBlcnJvcl9jYXRlZ29yeSYgX19jYXQpICAgICAKKyAgICA6IF9NX3ZhbHVlKF9fdiksIF9NX2NhdCgmX19jYXQpIHsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Vycm9yQ29uZGl0aW9uRW51bT4KKyAgICAgIGVycm9yX2NvbmRpdGlvbihfRXJyb3JDb25kaXRpb25FbnVtIF9fZSwKKwkJICAgICAgdHlwZW5hbWUgZW5hYmxlX2lmPGlzX2Vycm9yX2NvbmRpdGlvbl9lbnVtCisJCSAgICAgICAgICAgICAgICAgICAgICA8X0Vycm9yQ29uZGl0aW9uRW51bT46OnZhbHVlPjo6dHlwZSogPSAwKQorICAgICAgeyAqdGhpcyA9IG1ha2VfZXJyb3JfY29uZGl0aW9uKF9fZSk7IH0KKworICAgIHZvaWQKKyAgICBhc3NpZ24oaW50IF9fdiwgY29uc3QgZXJyb3JfY2F0ZWdvcnkmIF9fY2F0KQorICAgIHsKKyAgICAgIF9NX3ZhbHVlID0gX192OworICAgICAgX01fY2F0ID0gJl9fY2F0OworICAgIH0KKworICAgIC8vIERSIDgwNC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRXJyb3JDb25kaXRpb25FbnVtPgorICAgICAgdHlwZW5hbWUgZW5hYmxlX2lmPGlzX2Vycm9yX2NvbmRpdGlvbl9lbnVtCisJCQkgPF9FcnJvckNvbmRpdGlvbkVudW0+Ojp2YWx1ZSwgZXJyb3JfY29uZGl0aW9uJj46OnR5cGUKKyAgICAgIG9wZXJhdG9yPShfRXJyb3JDb25kaXRpb25FbnVtIF9fZSkKKyAgICAgIHsgcmV0dXJuICp0aGlzID0gbWFrZV9lcnJvcl9jb25kaXRpb24oX19lKTsgfQorCisgICAgdm9pZCAKKyAgICBjbGVhcigpCisgICAgeyBhc3NpZ24oMCwgZ2VuZXJpY19jYXRlZ29yeSgpKTsgfQorCisgICAgLy8gMTkuNC4zLjQgb2JzZXJ2ZXJzCisgICAgaW50IAorICAgIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gX01fdmFsdWU7IH0KKworICAgIGNvbnN0IGVycm9yX2NhdGVnb3J5JgorICAgIGNhdGVnb3J5KCkgY29uc3QgeyByZXR1cm4gKl9NX2NhdDsgfQorCisgICAgc3RyaW5nIAorICAgIG1lc3NhZ2UoKSBjb25zdAorICAgIHsgcmV0dXJuIGNhdGVnb3J5KCkubWVzc2FnZSh2YWx1ZSgpKTsgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeyByZXR1cm4gX01fdmFsdWUgIT0gMCA/IHRydWUgOiBmYWxzZTsgfQorCisgICAgLy8gRFIgODA0LgorICBwcml2YXRlOgorICAgIGludCAJCQlfTV92YWx1ZTsKKyAgICBjb25zdCBlcnJvcl9jYXRlZ29yeSogCV9NX2NhdDsKKyAgfTsKKworICAvLyAxOS40LjMuNiBub24tbWVtYmVyIGZ1bmN0aW9ucworICBpbmxpbmUgZXJyb3JfY29uZGl0aW9uCisgIG1ha2VfZXJyb3JfY29uZGl0aW9uKGVycmMgX19lKQorICB7IHJldHVybiBlcnJvcl9jb25kaXRpb24oc3RhdGljX2Nhc3Q8aW50PihfX2UpLCBnZW5lcmljX2NhdGVnb3J5KCkpOyB9CisKKyAgaW5saW5lIGJvb2wgCisgIG9wZXJhdG9yPChjb25zdCBlcnJvcl9jb25kaXRpb24mIF9fbGhzLCBjb25zdCBlcnJvcl9jb25kaXRpb24mIF9fcmhzKQorICB7CisgICAgcmV0dXJuIChfX2xocy5jYXRlZ29yeSgpIDwgX19yaHMuY2F0ZWdvcnkoKQorCSAgICB8fCAoX19saHMuY2F0ZWdvcnkoKSA9PSBfX3Jocy5jYXRlZ29yeSgpCisJCSYmIF9fbGhzLnZhbHVlKCkgPCBfX3Jocy52YWx1ZSgpKSk7CisgIH0KKworICAvLyAxOS40LjQgQ29tcGFyaXNvbiBvcGVyYXRvcnMKKyAgaW5saW5lIGJvb2wKKyAgb3BlcmF0b3I9PShjb25zdCBlcnJvcl9jb2RlJiBfX2xocywgY29uc3QgZXJyb3JfY29kZSYgX19yaHMpCisgIHsgcmV0dXJuIChfX2xocy5jYXRlZ29yeSgpID09IF9fcmhzLmNhdGVnb3J5KCkKKwkgICAgJiYgX19saHMudmFsdWUoKSA9PSBfX3Jocy52YWx1ZSgpKTsgfQorCisgIGlubGluZSBib29sCisgIG9wZXJhdG9yPT0oY29uc3QgZXJyb3JfY29kZSYgX19saHMsIGNvbnN0IGVycm9yX2NvbmRpdGlvbiYgX19yaHMpCisgIHsKKyAgICByZXR1cm4gKF9fbGhzLmNhdGVnb3J5KCkuZXF1aXZhbGVudChfX2xocy52YWx1ZSgpLCBfX3JocykKKwkgICAgfHwgX19yaHMuY2F0ZWdvcnkoKS5lcXVpdmFsZW50KF9fbGhzLCBfX3Jocy52YWx1ZSgpKSk7CisgIH0KKworICBpbmxpbmUgYm9vbAorICBvcGVyYXRvcj09KGNvbnN0IGVycm9yX2NvbmRpdGlvbiYgX19saHMsIGNvbnN0IGVycm9yX2NvZGUmIF9fcmhzKQorICB7CisgICAgcmV0dXJuIChfX3Jocy5jYXRlZ29yeSgpLmVxdWl2YWxlbnQoX19yaHMudmFsdWUoKSwgX19saHMpCisJICAgIHx8IF9fbGhzLmNhdGVnb3J5KCkuZXF1aXZhbGVudChfX3JocywgX19saHMudmFsdWUoKSkpOworICB9CisKKyAgaW5saW5lIGJvb2wKKyAgb3BlcmF0b3I9PShjb25zdCBlcnJvcl9jb25kaXRpb24mIF9fbGhzLCBjb25zdCBlcnJvcl9jb25kaXRpb24mIF9fcmhzKQorICB7CisgICAgcmV0dXJuIChfX2xocy5jYXRlZ29yeSgpID09IF9fcmhzLmNhdGVnb3J5KCkKKwkgICAgJiYgX19saHMudmFsdWUoKSA9PSBfX3Jocy52YWx1ZSgpKTsKKyAgfQorCisgIGlubGluZSBib29sCisgIG9wZXJhdG9yIT0oY29uc3QgZXJyb3JfY29kZSYgX19saHMsIGNvbnN0IGVycm9yX2NvZGUmIF9fcmhzKQorICB7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQorCisgIGlubGluZSBib29sCisgIG9wZXJhdG9yIT0oY29uc3QgZXJyb3JfY29kZSYgX19saHMsIGNvbnN0IGVycm9yX2NvbmRpdGlvbiYgX19yaHMpCisgIHsgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOyB9CisKKyAgaW5saW5lIGJvb2wKKyAgb3BlcmF0b3IhPShjb25zdCBlcnJvcl9jb25kaXRpb24mIF9fbGhzLCBjb25zdCBlcnJvcl9jb2RlJiBfX3JocykKKyAgeyByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7IH0KKworICBpbmxpbmUgYm9vbAorICBvcGVyYXRvciE9KGNvbnN0IGVycm9yX2NvbmRpdGlvbiYgX19saHMsIGNvbnN0IGVycm9yX2NvbmRpdGlvbiYgX19yaHMpCisgIHsgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOyB9CisKKworICAvKiogCisgICAqICBAYnJpZWYgVGhyb3duIHRvIGluZGljYXRlIGVycm9yIGNvZGUgb2YgdW5kZXJseWluZyBzeXN0ZW0uCisgICAqCisgICAqICBAaW5ncm91cCBleGNlcHRpb25zCisgICAqLworICBjbGFzcyBzeXN0ZW1fZXJyb3IgOiBwdWJsaWMgc3RkOjpydW50aW1lX2Vycm9yCisgIHsKKyAgcHJpdmF0ZToKKyAgICBlcnJvcl9jb2RlIAlfTV9jb2RlOworCisgIHB1YmxpYzoKKyAgICBzeXN0ZW1fZXJyb3IoZXJyb3JfY29kZSBfX2VjID0gZXJyb3JfY29kZSgpKQorICAgIDogcnVudGltZV9lcnJvcigiIiksIF9NX2NvZGUoX19lYykgeyB9CisKKyAgICBzeXN0ZW1fZXJyb3IoZXJyb3JfY29kZSBfX2VjLCBjb25zdCBzdHJpbmcmIF9fd2hhdCkKKyAgICA6IHJ1bnRpbWVfZXJyb3IoX193aGF0KSwgX01fY29kZShfX2VjKSB7IH0KKyAgICAKKyAgICAvKgorICAgICAqIFRPRE86IEFkZCBjb25zdCBjaGFyKiBjdG9ycyB0byBhbGwgZXhjZXB0aW9ucy4KKyAgICAgKgorICAgICAqIHN5c3RlbV9lcnJvcihlcnJvcl9jb2RlIF9fZWMsIGNvbnN0IGNoYXIqIF9fd2hhdCkKKyAgICAgKiA6IHJ1bnRpbWVfZXJyb3IoX193aGF0KSwgX01fY29kZShfX2VjKSB7IH0KKyAgICAgKgorICAgICAqIHN5c3RlbV9lcnJvcihpbnQgX192LCBjb25zdCBlcnJvcl9jYXRlZ29yeSYgX19lY2F0LCBjb25zdCBjaGFyKiBfX3doYXQpCisgICAgICogOiBydW50aW1lX2Vycm9yKF9fd2hhdCksIF9NX2NvZGUoZXJyb3JfY29kZShfX3YsIF9fZWNhdCkpIHsgfQorICAgICAqLworCisgICAgc3lzdGVtX2Vycm9yKGludCBfX3YsIGNvbnN0IGVycm9yX2NhdGVnb3J5JiBfX2VjYXQpCisgICAgOiBydW50aW1lX2Vycm9yKCIiKSwgX01fY29kZShlcnJvcl9jb2RlKF9fdiwgX19lY2F0KSkgeyB9CisKKyAgICBzeXN0ZW1fZXJyb3IoaW50IF9fdiwgY29uc3QgZXJyb3JfY2F0ZWdvcnkmIF9fZWNhdCwgY29uc3Qgc3RyaW5nJiBfX3doYXQpCisgICAgOiBydW50aW1lX2Vycm9yKF9fd2hhdCksIF9NX2NvZGUoZXJyb3JfY29kZShfX3YsIF9fZWNhdCkpIHsgfQorCisgICAgdmlydHVhbCB+c3lzdGVtX2Vycm9yKCkgdGhyb3coKTsKKworICAgIGNvbnN0IGVycm9yX2NvZGUmIAorICAgIGNvZGUoKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuIF9NX2NvZGU7IH0KKyAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorCisjaWZuZGVmIF9HTElCQ1hYX0NPTVBBVElCSUxJVFlfQ1hYMFgKKworI2luY2x1ZGUgPGJpdHMvZnVuY3Rpb25hbF9oYXNoLmg+CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgLy8gRFIgMTE4Mi4KKyAgLy8vIHN0ZDo6aGFzaCBzcGVjaWFsaXphdGlvbiBmb3IgZXJyb3JfY29kZS4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBoYXNoPGVycm9yX2NvZGU+CisgICAgOiBwdWJsaWMgc3RkOjp1bmFyeV9mdW5jdGlvbjxlcnJvcl9jb2RlLCBzaXplX3Q+CisgICAgeworICAgICAgc2l6ZV90CisgICAgICBvcGVyYXRvcigpKGNvbnN0IGVycm9yX2NvZGUmIF9fZSkgY29uc3QKKyAgICAgIHsKKwljb25zdCBzaXplX3QgX190bXAgPSBzdGQ6Ol9GbnZfaGFzaDo6aGFzaChfX2UuX01fdmFsdWUpOworCXJldHVybiBzdGQ6Ol9GbnZfaGFzaDo6X19oYXNoX2NvbWJpbmUoX19lLl9NX2NhdCwgX190bXApOworICAgICAgfQorICAgIH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmIC8vIF9HTElCQ1hYX0NPTVBBVElCSUxJVFlfQ1hYMFgKKworI2VuZGlmIC8vIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9TWVNURU1fRVJST1IKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90Z21hdGguaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdGdtYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q4NGQzNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdGdtYXRoLmgKQEAgLTAsMCArMSw0MiBAQAorLy8gLSotIEMrKyAtKi0gY29tcGF0aWJpbGl0eSBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdGdtYXRoLmgKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyMgaW5jbHVkZSA8Y3RnbWF0aD4KKyNlbHNlCisjIGlmIF9HTElCQ1hYX0hBVkVfVEdNQVRIX0gKKyMgIGluY2x1ZGVfbmV4dCA8dGdtYXRoLmg+CisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBfR0xJQkNYWF9UR01BVEhfSAorI2RlZmluZSBfR0xJQkNYWF9UR01BVEhfSCAxCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90aHJlYWQgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RocmVhZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzBmMmMwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90aHJlYWQKQEAgLTAsMCArMSwyOTcgQEAKKy8vIDx0aHJlYWQ+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdGhyZWFkCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1RIUkVBRAorI2RlZmluZSBfR0xJQkNYWF9USFJFQUQgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpZm5kZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyMgaW5jbHVkZSA8Yml0cy9jKysweF93YXJuaW5nLmg+CisjZWxzZQorCisjaW5jbHVkZSA8Y2hyb25vPgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPGNvbmRpdGlvbl92YXJpYWJsZT4KKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGJpdHMvZnVuY3RleGNlcHQuaD4KKyNpbmNsdWRlIDxiaXRzL2Z1bmN0aW9uYWxfaGFzaC5oPgorI2luY2x1ZGUgPGJpdHMvZ3Roci5oPgorCisjaWYgZGVmaW5lZChfR0xJQkNYWF9IQVNfR1RIUkVBRFMpICYmIGRlZmluZWQoX0dMSUJDWFhfVVNFX0M5OV9TVERJTlRfVFIxKQorCituYW1lc3BhY2Ugc3RkCit7CisgIC8qKgorICAgKiBAZGVmZ3JvdXAgdGhyZWFkcyBUaHJlYWRzCisgICAqIEBpbmdyb3VwIGNvbmN1cnJlbmN5CisgICAqCisgICAqIENsYXNzZXMgZm9yIHRocmVhZCBzdXBwb3J0LgorICAgKiBAeworICAgKi8KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGhhc2g7CisKKyAgLy8vIHRocmVhZAorICBjbGFzcyB0aHJlYWQKKyAgeworICBwdWJsaWM6CisgICAgdHlwZWRlZiBfX2d0aHJlYWRfdAkJCW5hdGl2ZV9oYW5kbGVfdHlwZTsKKyAgICBzdHJ1Y3QgX0ltcGxfYmFzZTsKKyAgICB0eXBlZGVmIHNoYXJlZF9wdHI8X0ltcGxfYmFzZT4JX19zaGFyZWRfYmFzZV90eXBlOworCisgICAgLy8vIHRocmVhZDo6aWQKKyAgICBjbGFzcyBpZAorICAgIHsKKyAgICAgIG5hdGl2ZV9oYW5kbGVfdHlwZQlfTV90aHJlYWQ7CisKKyAgICBwdWJsaWM6CisgICAgICBpZCgpIDogX01fdGhyZWFkKCkgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBpZChuYXRpdmVfaGFuZGxlX3R5cGUgX19pZCkgOiBfTV90aHJlYWQoX19pZCkgeyB9CisKKyAgICBwcml2YXRlOgorICAgICAgZnJpZW5kIGNsYXNzIHRocmVhZDsKKyAgICAgIGZyaWVuZCBjbGFzcyBoYXNoPHRocmVhZDo6aWQ+OworCisgICAgICBmcmllbmQgYm9vbAorICAgICAgb3BlcmF0b3I9PSh0aHJlYWQ6OmlkIF9feCwgdGhyZWFkOjppZCBfX3kpCisgICAgICB7IHJldHVybiBfX2d0aHJlYWRfZXF1YWwoX194Ll9NX3RocmVhZCwgX195Ll9NX3RocmVhZCk7IH0KKworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPCh0aHJlYWQ6OmlkIF9feCwgdGhyZWFkOjppZCBfX3kpCisgICAgICB7IHJldHVybiBfX3guX01fdGhyZWFkIDwgX195Ll9NX3RocmVhZDsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CisJZnJpZW5kIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIHRocmVhZDo6aWQgX19pZCk7CisgICAgfTsKKworICAgIC8vIFNpbXBsZSBiYXNlIHR5cGUgdGhhdCB0aGUgdGVtcGxhdGl6ZWQsIGRlcml2ZWQgY2xhc3MgY29udGFpbmluZworICAgIC8vIGFuIGFyYml0cmFyeSBmdW5jdG9yIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYW5kIGNhbGxlZC4KKyAgICBzdHJ1Y3QgX0ltcGxfYmFzZQorICAgIHsKKyAgICAgIF9fc2hhcmVkX2Jhc2VfdHlwZQlfTV90aGlzX3B0cjsKKworICAgICAgaW5saW5lIHZpcnR1YWwgfl9JbXBsX2Jhc2UoKTsKKworICAgICAgdmlydHVhbCB2b2lkIF9NX3J1bigpID0gMDsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NhbGxhYmxlPgorICAgICAgc3RydWN0IF9JbXBsIDogcHVibGljIF9JbXBsX2Jhc2UKKyAgICAgIHsKKwlfQ2FsbGFibGUJCV9NX2Z1bmM7CisKKwlfSW1wbChfQ2FsbGFibGUmJiBfX2YpIDogX01fZnVuYyhzdGQ6OmZvcndhcmQ8X0NhbGxhYmxlPihfX2YpKQorCXsgfQorCisJdm9pZAorCV9NX3J1bigpIHsgX01fZnVuYygpOyB9CisgICAgICB9OworCisgIHByaXZhdGU6CisgICAgaWQJCQkJX01faWQ7CisKKyAgcHVibGljOgorICAgIHRocmVhZCgpID0gZGVmYXVsdDsKKyAgICB0aHJlYWQoY29uc3QgdGhyZWFkJikgPSBkZWxldGU7CisKKyAgICB0aHJlYWQodGhyZWFkJiYgX190KQorICAgIHsgc3dhcChfX3QpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2FsbGFibGU+CisgICAgICBleHBsaWNpdCB0aHJlYWQoX0NhbGxhYmxlIF9fZikKKyAgICAgIHsKKwlfTV9zdGFydF90aHJlYWQoX01fbWFrZV9yb3V0aW5lPF9DYWxsYWJsZT4KKwkJCShzdGQ6OmZvcndhcmQ8X0NhbGxhYmxlPihfX2YpKSk7CisgICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2FsbGFibGUsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgdGhyZWFkKF9DYWxsYWJsZSYmIF9fZiwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisgICAgICB7IF9NX3N0YXJ0X3RocmVhZChfTV9tYWtlX3JvdXRpbmUoc3RkOjpiaW5kKF9fZiwgX19hcmdzLi4uKSkpOyB9CisKKyAgICB+dGhyZWFkKCkKKyAgICB7CisgICAgICBpZiAoam9pbmFibGUoKSkKKwlzdGQ6OnRlcm1pbmF0ZSgpOworICAgIH0KKworICAgIHRocmVhZCYgb3BlcmF0b3I9KGNvbnN0IHRocmVhZCYpID0gZGVsZXRlOworCisgICAgdGhyZWFkJiBvcGVyYXRvcj0odGhyZWFkJiYgX190KQorICAgIHsKKyAgICAgIGlmIChqb2luYWJsZSgpKQorCXN0ZDo6dGVybWluYXRlKCk7CisgICAgICBzd2FwKF9fdCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdm9pZAorICAgIHN3YXAodGhyZWFkJiBfX3QpCisgICAgeyBzdGQ6OnN3YXAoX01faWQsIF9fdC5fTV9pZCk7IH0KKworICAgIGJvb2wKKyAgICBqb2luYWJsZSgpIGNvbnN0CisgICAgeyByZXR1cm4gIShfTV9pZCA9PSBpZCgpKTsgfQorCisgICAgdm9pZAorICAgIGpvaW4oKTsKKworICAgIHZvaWQKKyAgICBkZXRhY2goKTsKKworICAgIHRocmVhZDo6aWQKKyAgICBnZXRfaWQoKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX2lkOyB9CisKKyAgICAvKiogQHByZSB0aHJlYWQgaXMgam9pbmFibGUKKyAgICAgKi8KKyAgICBuYXRpdmVfaGFuZGxlX3R5cGUKKyAgICBuYXRpdmVfaGFuZGxlKCkKKyAgICB7IHJldHVybiBfTV9pZC5fTV90aHJlYWQ7IH0KKworICAgIC8vIFJldHVybnMgYSB2YWx1ZSB0aGF0IGhpbnRzIGF0IHRoZSBudW1iZXIgb2YgaGFyZHdhcmUgdGhyZWFkIGNvbnRleHRzLgorICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQKKyAgICBoYXJkd2FyZV9jb25jdXJyZW5jeSgpCisgICAgeyByZXR1cm4gMDsgfQorCisgIHByaXZhdGU6CisgICAgdm9pZAorICAgIF9NX3N0YXJ0X3RocmVhZChfX3NoYXJlZF9iYXNlX3R5cGUpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NhbGxhYmxlPgorICAgICAgc2hhcmVkX3B0cjxfSW1wbDxfQ2FsbGFibGU+PgorICAgICAgX01fbWFrZV9yb3V0aW5lKF9DYWxsYWJsZSYmIF9fZikKKyAgICAgIHsKKwkvLyBDcmVhdGUgYW5kIGFsbG9jYXRlIGZ1bGwgZGF0YSBzdHJ1Y3R1cmUsIG5vdCBiYXNlLgorCXJldHVybiBtYWtlX3NoYXJlZDxfSW1wbDxfQ2FsbGFibGU+PihzdGQ6OmZvcndhcmQ8X0NhbGxhYmxlPihfX2YpKTsKKyAgICAgIH0KKyAgfTsKKworICBpbmxpbmUgdGhyZWFkOjpfSW1wbF9iYXNlOjp+X0ltcGxfYmFzZSgpID0gZGVmYXVsdDsKKworICBpbmxpbmUgdm9pZAorICBzd2FwKHRocmVhZCYgX194LCB0aHJlYWQmIF9feSkKKyAgeyBfX3guc3dhcChfX3kpOyB9CisKKyAgaW5saW5lIGJvb2wKKyAgb3BlcmF0b3IhPSh0aHJlYWQ6OmlkIF9feCwgdGhyZWFkOjppZCBfX3kpCisgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworICBpbmxpbmUgYm9vbAorICBvcGVyYXRvcjw9KHRocmVhZDo6aWQgX194LCB0aHJlYWQ6OmlkIF9feSkKKyAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CisKKyAgaW5saW5lIGJvb2wKKyAgb3BlcmF0b3I+KHRocmVhZDo6aWQgX194LCB0aHJlYWQ6OmlkIF9feSkKKyAgeyByZXR1cm4gX195IDwgX194OyB9CisKKyAgaW5saW5lIGJvb2wKKyAgb3BlcmF0b3I+PSh0aHJlYWQ6OmlkIF9feCwgdGhyZWFkOjppZCBfX3kpCisgIHsgcmV0dXJuICEoX194IDwgX195KTsgfQorCisgIC8vIERSIDg4OS4KKyAgLy8vIHN0ZDo6aGFzaCBzcGVjaWFsaXphdGlvbiBmb3IgdGhyZWFkOjppZC4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBoYXNoPHRocmVhZDo6aWQ+CisgICAgOiBwdWJsaWMgc3RkOjp1bmFyeV9mdW5jdGlvbjx0aHJlYWQ6OmlkLCBzaXplX3Q+CisgICAgeworICAgICAgc2l6ZV90CisgICAgICBvcGVyYXRvcigpKGNvbnN0IHRocmVhZDo6aWQmIF9faWQpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGQ6Ol9GbnZfaGFzaDo6aGFzaChfX2lkLl9NX3RocmVhZCk7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KKyAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgdGhyZWFkOjppZCBfX2lkKQorICAgIHsKKyAgICAgIGlmIChfX2lkID09IHRocmVhZDo6aWQoKSkKKwlyZXR1cm4gX19vdXQgPDwgInRocmVhZDo6aWQgb2YgYSBub24tZXhlY3V0aW5nIHRocmVhZCI7CisgICAgICBlbHNlCisJcmV0dXJuIF9fb3V0IDw8IF9faWQuX01fdGhyZWFkOworICAgIH0KKworICAvKiogQG5hbWVzcGFjZSBzdGQ6OnRoaXNfdGhyZWFkCisgICAqICBAYnJpZWYgSVNPIEMrKyAweCBlbnRpdGllcyBzdWIgbmFtZXNwYWNlIGZvciB0aHJlYWQuCisgICAqICAzMC4yLjIgTmFtZXNwYWNlIHRoaXNfdGhyZWFkLgorICAgKi8KKyAgbmFtZXNwYWNlIHRoaXNfdGhyZWFkCisgIHsKKyAgICAvLy8gZ2V0X2lkCisgICAgaW5saW5lIHRocmVhZDo6aWQKKyAgICBnZXRfaWQoKSB7IHJldHVybiB0aHJlYWQ6OmlkKF9fZ3RocmVhZF9zZWxmKCkpOyB9CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfU0NIRURfWUlFTEQKKyAgICAvLy8geWllbGQKKyAgICBpbmxpbmUgdm9pZAorICAgIHlpZWxkKCkKKyAgICB7IF9fZ3RocmVhZF95aWVsZCgpOyB9CisjZW5kaWYKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9OQU5PU0xFRVAKKyAgICAvLy8gc2xlZXBfdW50aWwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2xvY2ssIHR5cGVuYW1lIF9EdXJhdGlvbj4KKyAgICAgIGlubGluZSB2b2lkCisgICAgICBzbGVlcF91bnRpbChjb25zdCBjaHJvbm86OnRpbWVfcG9pbnQ8X0Nsb2NrLCBfRHVyYXRpb24+JiBfX2F0aW1lKQorICAgICAgeyBzbGVlcF9mb3IoX19hdGltZSAtIF9DbG9jazo6bm93KCkpOyB9CisKKyAgICAvLy8gc2xlZXBfZm9yCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcCwgdHlwZW5hbWUgX1BlcmlvZD4KKyAgICAgIGlubGluZSB2b2lkCisgICAgICBzbGVlcF9mb3IoY29uc3QgY2hyb25vOjpkdXJhdGlvbjxfUmVwLCBfUGVyaW9kPiYgX19ydGltZSkKKyAgICAgIHsKKwljaHJvbm86OnNlY29uZHMgX19zID0KKwkgIGNocm9ubzo6ZHVyYXRpb25fY2FzdDxjaHJvbm86OnNlY29uZHM+KF9fcnRpbWUpOworCisJY2hyb25vOjpuYW5vc2Vjb25kcyBfX25zID0KKwkgIGNocm9ubzo6ZHVyYXRpb25fY2FzdDxjaHJvbm86Om5hbm9zZWNvbmRzPihfX3J0aW1lIC0gX19zKTsKKworCV9fZ3RocmVhZF90aW1lX3QgX190cyA9CisJICB7CisJICAgIHN0YXRpY19jYXN0PHN0ZDo6dGltZV90PihfX3MuY291bnQoKSksCisJICAgIHN0YXRpY19jYXN0PGxvbmc+KF9fbnMuY291bnQoKSkKKwkgIH07CisKKwk6Om5hbm9zbGVlcCgmX190cywgMCk7CisgICAgICB9CisjZW5kaWYKKyAgfQorCisgIC8vIEB9IGdyb3VwIHRocmVhZHMKK30KKworI2VuZGlmIC8vIF9HTElCQ1hYX0hBU19HVEhSRUFEUyAmJiBfR0xJQkNYWF9VU0VfQzk5X1NURElOVF9UUjEKKworI2VuZGlmIC8vIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9USFJFQUQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL2FycmF5IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvYXJyYXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdjZjVkMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL2FycmF5CkBAIC0wLDAgKzEsNTQgQEAKKy8vIGNsYXNzIHRlbXBsYXRlIGFycmF5IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL2FycmF5CisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX0FSUkFZCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9BUlJBWSAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2lmIGRlZmluZWQoX0dMSUJDWFhfSU5DTFVERV9BU19DWFgwWCkKKyMgIGVycm9yIFRSMSBoZWFkZXIgY2Fubm90IGJlIGluY2x1ZGVkIGZyb20gQysrMHggaGVhZGVyCisjZW5kaWYKKworI2luY2x1ZGUgPGJpdHMvc3RsX2FsZ29iYXNlLmg+CisKKyNpZiBkZWZpbmVkKF9HTElCQ1hYX0lOQ0xVREVfQVNfVFIxKQorIyAgaW5jbHVkZSA8dHIxX2ltcGwvYXJyYXk+CisjZWxzZQorIyAgZGVmaW5lIF9HTElCQ1hYX0lOQ0xVREVfQVNfVFIxCisjICBkZWZpbmUgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMSBuYW1lc3BhY2UgdHIxIHsKKyMgIGRlZmluZSBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMSB9CisjICBkZWZpbmUgX0dMSUJDWFhfVFIxIHRyMTo6CisjICBpbmNsdWRlIDx0cjFfaW1wbC9hcnJheT4KKyMgIHVuZGVmIF9HTElCQ1hYX1RSMQorIyAgdW5kZWYgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9UUjEKKyMgIHVuZGVmIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9UUjEKKyMgIHVuZGVmIF9HTElCQ1hYX0lOQ0xVREVfQVNfVFIxCisjZW5kaWYKKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9BUlJBWQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvYmVzc2VsX2Z1bmN0aW9uLnRjYyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL2Jlc3NlbF9mdW5jdGlvbi50Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUxMDIxNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL2Jlc3NlbF9mdW5jdGlvbi50Y2MKQEAgLTAsMCArMSw2MjcgQEAKKy8vIFNwZWNpYWwgZnVuY3Rpb25zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLy8KKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvYmVzc2VsX2Z1bmN0aW9uLnRjYworICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MiBUUjE6IDUuMiAgU3BlY2lhbCBmdW5jdGlvbnMKKy8vCisKKy8vIFdyaXR0ZW4gYnkgRWR3YXJkIFNtaXRoLVJvd2xhbmQuCisvLworLy8gUmVmZXJlbmNlczoKKy8vICAgKDEpIEhhbmRib29rIG9mIE1hdGhlbWF0aWNhbCBGdW5jdGlvbnMsCisvLyAgICAgICBlZC4gTWlsdG9uIEFicmFtb3dpdHogYW5kIElyZW5lIEEuIFN0ZWd1biwKKy8vICAgICAgIERvdmVyIFB1YmxpY2F0aW9ucywKKy8vICAgICAgIFNlY3Rpb24gOSwgcHAuIDM1NS00MzQsIFNlY3Rpb24gMTAgcHAuIDQzNS00NzgKKy8vICAgKDIpIFRoZSBHbnUgU2NpZW50aWZpYyBMaWJyYXJ5LCBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ3NsCisvLyAgICgzKSBOdW1lcmljYWwgUmVjaXBlcyBpbiBDLCBieSBXLiBILiBQcmVzcywgUy4gQS4gVGV1a29sc2t5LAorLy8gICAgICAgVy4gVC4gVmV0dGVybGluZywgQi4gUC4gRmxhbm5lcnksIENhbWJyaWRnZSBVbml2ZXJzaXR5IFByZXNzICgxOTkyKSwKKy8vICAgICAgIDJuZCBlZCwgcHAuIDI0MC0yNDUKKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfQkVTU0VMX0ZVTkNUSU9OX1RDQworI2RlZmluZSBfR0xJQkNYWF9UUjFfQkVTU0VMX0ZVTkNUSU9OX1RDQyAxCisKKyNpbmNsdWRlICJzcGVjaWFsX2Z1bmN0aW9uX3V0aWwuaCIKKworbmFtZXNwYWNlIHN0ZAoreworbmFtZXNwYWNlIHRyMQoreworCisgIC8vIFs1LjJdIFNwZWNpYWwgZnVuY3Rpb25zCisKKyAgLy8gSW1wbGVtZW50YXRpb24tc3BhY2UgZGV0YWlscy4KKyAgbmFtZXNwYWNlIF9fZGV0YWlsCisgIHsKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmIENvbXB1dGUgdGhlIGdhbW1hIGZ1bmN0aW9ucyByZXF1aXJlZCBieSB0aGUgVGVtbWUgc2VyaWVzCisgICAgICogICAgICAgICAgZXhwYW5zaW9ucyBvZiBAZiQgTl9cbnUoeCkgQGYkIGFuZCBAZiQgS19cbnUoeCkgQGYkLgorICAgICAqICAgQGZbCisgICAgICogICAgIFxHYW1tYV8xID0gXGZyYWN7MX17MlxtdX0KKyAgICAgKiAgICAgICAgICAgICAgICBbXGZyYWN7MX17XEdhbW1hKDEgLSBcbXUpfSAtIFxmcmFjezF9e1xHYW1tYSgxICsgXG11KX1dCisgICAgICogICBAZl0KKyAgICAgKiAgIGFuZAorICAgICAqICAgQGZbCisgICAgICogICAgIFxHYW1tYV8yID0gXGZyYWN7MX17Mn0KKyAgICAgKiAgICAgICAgICAgICAgICBbXGZyYWN7MX17XEdhbW1hKDEgLSBcbXUpfSArIFxmcmFjezF9e1xHYW1tYSgxICsgXG11KX1dCisgICAgICogICBAZl0KKyAgICAgKiAgIHdoZXJlIEBmJCAtMS8yIDw9IFxtdSA8PSAxLzIgQGYkIGlzIEBmJCBcbXUgPSBcbnUgLSBOIEBmJCBhbmQgQGYkIE4gQGYkLgorICAgICAqICAgaXMgdGhlIG5lYXJlc3QgaW50ZWdlciB0byBAZiQgXG51IEBmJC4KKyAgICAgKiAgIFRoZSB2YWx1ZXMgb2YgXGYkIFxHYW1tYSgxICsgXG11KSBcZiQgYW5kIFxmJCBcR2FtbWEoMSAtIFxtdSkgXGYkCisgICAgICogICBhcmUgcmV0dXJuZWQgYXMgd2VsbC4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBhY2N1cmFjeSByZXF1aXJlbWVudHMgb24gdGhpcyBhcmUgZXhxdWlzaXRlLgorICAgICAqCisgICAgICogICBAcGFyYW0gX19tdSAgICAgVGhlIGlucHV0IHBhcmFtZXRlciBvZiB0aGUgZ2FtbWEgZnVuY3Rpb25zLgorICAgICAqICAgQHBhcmFtIF9fZ2FtMSAgIFRoZSBvdXRwdXQgZnVuY3Rpb24gXGYkIFxHYW1tYV8xKFxtdSkgXGYkCisgICAgICogICBAcGFyYW0gX19nYW0yICAgVGhlIG91dHB1dCBmdW5jdGlvbiBcZiQgXEdhbW1hXzIoXG11KSBcZiQKKyAgICAgKiAgIEBwYXJhbSBfX2dhbXBsICBUaGUgb3V0cHV0IGZ1bmN0aW9uIFxmJCBcR2FtbWEoMSArIFxtdSkgXGYkCisgICAgICogICBAcGFyYW0gX19nYW1taSAgVGhlIG91dHB1dCBmdW5jdGlvbiBcZiQgXEdhbW1hKDEgLSBcbXUpIFxmJAorICAgICAqLworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHA+CisgICAgdm9pZAorICAgIF9fZ2FtbWFfdGVtbWUoY29uc3QgX1RwIF9fbXUsCisgICAgICAgICAgICAgICAgICAgX1RwICYgX19nYW0xLCBfVHAgJiBfX2dhbTIsIF9UcCAmIF9fZ2FtcGwsIF9UcCAmIF9fZ2FtbWkpCisgICAgeworI2lmIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEKKyAgICAgIF9fZ2FtcGwgPSBfVHAoMSkgLyBzdGQ6OnRyMTo6dGdhbW1hKF9UcCgxKSArIF9fbXUpOworICAgICAgX19nYW1taSA9IF9UcCgxKSAvIHN0ZDo6dHIxOjp0Z2FtbWEoX1RwKDEpIC0gX19tdSk7CisjZWxzZQorICAgICAgX19nYW1wbCA9IF9UcCgxKSAvIF9fZ2FtbWEoX1RwKDEpICsgX19tdSk7CisgICAgICBfX2dhbW1pID0gX1RwKDEpIC8gX19nYW1tYShfVHAoMSkgLSBfX211KTsKKyNlbmRpZgorCisgICAgICBpZiAoc3RkOjphYnMoX19tdSkgPCBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmVwc2lsb24oKSkKKyAgICAgICAgX19nYW0xID0gLV9UcChfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fZ2FtbWFfZSgpKTsKKyAgICAgIGVsc2UKKyAgICAgICAgX19nYW0xID0gKF9fZ2FtbWkgLSBfX2dhbXBsKSAvIChfVHAoMikgKiBfX211KTsKKworICAgICAgX19nYW0yID0gKF9fZ2FtbWkgKyBfX2dhbXBsKSAvIChfVHAoMikpOworCisgICAgICByZXR1cm47CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgQ29tcHV0ZSB0aGUgQmVzc2VsIEBmJCBKX1xudSh4KSBAZiQgYW5kIE5ldW1hbm4KKyAgICAgKiAgICAgICAgICAgQGYkIE5fXG51KHgpIEBmJCBmdW5jdGlvbnMgYW5kIHRoZWlyIGZpcnN0IGRlcml2YXRpdmVzCisgICAgICogICAgICAgICAgIEBmJCBKJ19cbnUoeCkgQGYkIGFuZCBAZiQgTidfXG51KHgpIEBmJCByZXNwZWN0aXZlbHkuCisgICAgICogICAgICAgICAgIFRoZXNlIGZvdXIgZnVuY3Rpb25zIGFyZSBjb21wdXRlZCB0b2dldGhlciBmb3IgbnVtZXJpY2FsCisgICAgICogICAgICAgICAgIHN0YWJpbGl0eS4KKyAgICAgKgorICAgICAqICAgQHBhcmFtICBfX251ICBUaGUgb3JkZXIgb2YgdGhlIEJlc3NlbCBmdW5jdGlvbnMuCisgICAgICogICBAcGFyYW0gIF9feCAgIFRoZSBhcmd1bWVudCBvZiB0aGUgQmVzc2VsIGZ1bmN0aW9ucy4KKyAgICAgKiAgIEBwYXJhbSAgX19KbnUgIFRoZSBvdXRwdXQgQmVzc2VsIGZ1bmN0aW9uIG9mIHRoZSBmaXJzdCBraW5kLgorICAgICAqICAgQHBhcmFtICBfX05udSAgVGhlIG91dHB1dCBOZXVtYW5uIGZ1bmN0aW9uIChCZXNzZWwgZnVuY3Rpb24gb2YgdGhlIHNlY29uZCBraW5kKS4KKyAgICAgKiAgIEBwYXJhbSAgX19KcG51ICBUaGUgb3V0cHV0IGRlcml2YXRpdmUgb2YgdGhlIEJlc3NlbCBmdW5jdGlvbiBvZiB0aGUgZmlyc3Qga2luZC4KKyAgICAgKiAgIEBwYXJhbSAgX19OcG51ICBUaGUgb3V0cHV0IGRlcml2YXRpdmUgb2YgdGhlIE5ldW1hbm4gZnVuY3Rpb24uCisgICAgICovCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcD4KKyAgICB2b2lkCisgICAgX19iZXNzZWxfam4oY29uc3QgX1RwIF9fbnUsIGNvbnN0IF9UcCBfX3gsCisgICAgICAgICAgICAgICAgX1RwICYgX19KbnUsIF9UcCAmIF9fTm51LCBfVHAgJiBfX0pwbnUsIF9UcCAmIF9fTnBudSkKKyAgICB7CisgICAgICBpZiAoX194ID09IF9UcCgwKSkKKyAgICAgICAgeworICAgICAgICAgIGlmIChfX251ID09IF9UcCgwKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX19KbnUgPSBfVHAoMSk7CisgICAgICAgICAgICAgIF9fSnBudSA9IF9UcCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChfX251ID09IF9UcCgxKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX19KbnUgPSBfVHAoMCk7CisgICAgICAgICAgICAgIF9fSnBudSA9IF9UcCgwLjVMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9fSm51ID0gX1RwKDApOworICAgICAgICAgICAgICBfX0pwbnUgPSBfVHAoMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgX19ObnUgPSAtc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjppbmZpbml0eSgpOworICAgICAgICAgIF9fTnBudSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6aW5maW5pdHkoKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgY29uc3QgX1RwIF9fZXBzID0gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjplcHNpbG9uKCk7CisgICAgICAvLyAgV2hlbiB0aGUgbXVsdGlwbGllciBpcyBOIGkuZS4KKyAgICAgIC8vICBmcF9taW4gPSBOICogbWluKCkKKyAgICAgIC8vICBUaGVuIEpfMCBhbmQgTl8wIHRhbmsgYXQgeCA9IDggKiBOIChKXzAgPSAwIGFuZCBOXzAgPSBuYW4pIQorICAgICAgLy9jb25zdCBfVHAgX19mcF9taW4gPSBfVHAoMjApICogc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjptaW4oKTsKKyAgICAgIGNvbnN0IF9UcCBfX2ZwX21pbiA9IHN0ZDo6c3FydChzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46Om1pbigpKTsKKyAgICAgIGNvbnN0IGludCBfX21heF9pdGVyID0gMTUwMDA7CisgICAgICBjb25zdCBfVHAgX194X21pbiA9IF9UcCgyKTsKKworICAgICAgY29uc3QgaW50IF9fbmwgPSAoX194IDwgX194X21pbgorICAgICAgICAgICAgICAgICAgICA/IHN0YXRpY19jYXN0PGludD4oX19udSArIF9UcCgwLjVMKSkKKyAgICAgICAgICAgICAgICAgICAgOiBzdGQ6Om1heCgwLCBzdGF0aWNfY2FzdDxpbnQ+KF9fbnUgLSBfX3ggKyBfVHAoMS41TCkpKSk7CisKKyAgICAgIGNvbnN0IF9UcCBfX211ID0gX19udSAtIF9fbmw7CisgICAgICBjb25zdCBfVHAgX19tdTIgPSBfX211ICogX19tdTsKKyAgICAgIGNvbnN0IF9UcCBfX3hpID0gX1RwKDEpIC8gX194OworICAgICAgY29uc3QgX1RwIF9feGkyID0gX1RwKDIpICogX194aTsKKyAgICAgIF9UcCBfX3cgPSBfX3hpMiAvIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waSgpOworICAgICAgaW50IF9faXNpZ24gPSAxOworICAgICAgX1RwIF9faCA9IF9fbnUgKiBfX3hpOworICAgICAgaWYgKF9faCA8IF9fZnBfbWluKQorICAgICAgICBfX2ggPSBfX2ZwX21pbjsKKyAgICAgIF9UcCBfX2IgPSBfX3hpMiAqIF9fbnU7CisgICAgICBfVHAgX19kID0gX1RwKDApOworICAgICAgX1RwIF9fYyA9IF9faDsKKyAgICAgIGludCBfX2k7CisgICAgICBmb3IgKF9faSA9IDE7IF9faSA8PSBfX21heF9pdGVyOyArK19faSkKKyAgICAgICAgeworICAgICAgICAgIF9fYiArPSBfX3hpMjsKKyAgICAgICAgICBfX2QgPSBfX2IgLSBfX2Q7CisgICAgICAgICAgaWYgKHN0ZDo6YWJzKF9fZCkgPCBfX2ZwX21pbikKKyAgICAgICAgICAgIF9fZCA9IF9fZnBfbWluOworICAgICAgICAgIF9fYyA9IF9fYiAtIF9UcCgxKSAvIF9fYzsKKyAgICAgICAgICBpZiAoc3RkOjphYnMoX19jKSA8IF9fZnBfbWluKQorICAgICAgICAgICAgX19jID0gX19mcF9taW47CisgICAgICAgICAgX19kID0gX1RwKDEpIC8gX19kOworICAgICAgICAgIGNvbnN0IF9UcCBfX2RlbCA9IF9fYyAqIF9fZDsKKyAgICAgICAgICBfX2ggKj0gX19kZWw7CisgICAgICAgICAgaWYgKF9fZCA8IF9UcCgwKSkKKyAgICAgICAgICAgIF9faXNpZ24gPSAtX19pc2lnbjsKKyAgICAgICAgICBpZiAoc3RkOjphYnMoX19kZWwgLSBfVHAoMSkpIDwgX19lcHMpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgaWYgKF9faSA+IF9fbWF4X2l0ZXIpCisgICAgICAgIHN0ZDo6X190aHJvd19ydW50aW1lX2Vycm9yKF9fTigiQXJndW1lbnQgeCB0b28gbGFyZ2UgaW4gX19iZXNzZWxfam47ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0cnkgYXN5bXB0b3RpYyBleHBhbnNpb24uIikpOworICAgICAgX1RwIF9fSm51bCA9IF9faXNpZ24gKiBfX2ZwX21pbjsKKyAgICAgIF9UcCBfX0pwbnVsID0gX19oICogX19KbnVsOworICAgICAgX1RwIF9fSm51bDEgPSBfX0pudWw7CisgICAgICBfVHAgX19KcG51MSA9IF9fSnBudWw7CisgICAgICBfVHAgX19mYWN0ID0gX19udSAqIF9feGk7CisgICAgICBmb3IgKCBpbnQgX19sID0gX19ubDsgX19sID49IDE7IC0tX19sICkKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IF9UcCBfX0pudXRlbXAgPSBfX2ZhY3QgKiBfX0pudWwgKyBfX0pwbnVsOworICAgICAgICAgIF9fZmFjdCAtPSBfX3hpOworICAgICAgICAgIF9fSnBudWwgPSBfX2ZhY3QgKiBfX0pudXRlbXAgLSBfX0pudWw7CisgICAgICAgICAgX19KbnVsID0gX19KbnV0ZW1wOworICAgICAgICB9CisgICAgICBpZiAoX19KbnVsID09IF9UcCgwKSkKKyAgICAgICAgX19KbnVsID0gX19lcHM7CisgICAgICBfVHAgX19mPSBfX0pwbnVsIC8gX19KbnVsOworICAgICAgX1RwIF9fTm11LCBfX05udTEsIF9fTnBtdSwgX19KbXU7CisgICAgICBpZiAoX194IDwgX194X21pbikKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IF9UcCBfX3gyID0gX194IC8gX1RwKDIpOworICAgICAgICAgIGNvbnN0IF9UcCBfX3BpbXUgPSBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fcGkoKSAqIF9fbXU7CisgICAgICAgICAgX1RwIF9fZmFjdCA9IChzdGQ6OmFicyhfX3BpbXUpIDwgX19lcHMKKyAgICAgICAgICAgICAgICAgICAgICA/IF9UcCgxKSA6IF9fcGltdSAvIHN0ZDo6c2luKF9fcGltdSkpOworICAgICAgICAgIF9UcCBfX2QgPSAtc3RkOjpsb2coX194Mik7CisgICAgICAgICAgX1RwIF9fZSA9IF9fbXUgKiBfX2Q7CisgICAgICAgICAgX1RwIF9fZmFjdDIgPSAoc3RkOjphYnMoX19lKSA8IF9fZXBzCisgICAgICAgICAgICAgICAgICAgICAgID8gX1RwKDEpIDogc3RkOjpzaW5oKF9fZSkgLyBfX2UpOworICAgICAgICAgIF9UcCBfX2dhbTEsIF9fZ2FtMiwgX19nYW1wbCwgX19nYW1taTsKKyAgICAgICAgICBfX2dhbW1hX3RlbW1lKF9fbXUsIF9fZ2FtMSwgX19nYW0yLCBfX2dhbXBsLCBfX2dhbW1pKTsKKyAgICAgICAgICBfVHAgX19mZiA9IChfVHAoMikgLyBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fcGkoKSkKKyAgICAgICAgICAgICAgICAgICAqIF9fZmFjdCAqIChfX2dhbTEgKiBzdGQ6OmNvc2goX19lKSArIF9fZ2FtMiAqIF9fZmFjdDIgKiBfX2QpOworICAgICAgICAgIF9fZSA9IHN0ZDo6ZXhwKF9fZSk7CisgICAgICAgICAgX1RwIF9fcCA9IF9fZSAvIChfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fcGkoKSAqIF9fZ2FtcGwpOworICAgICAgICAgIF9UcCBfX3EgPSBfVHAoMSkgLyAoX19lICogX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpKCkgKiBfX2dhbW1pKTsKKyAgICAgICAgICBjb25zdCBfVHAgX19waW11MiA9IF9fcGltdSAvIF9UcCgyKTsKKyAgICAgICAgICBfVHAgX19mYWN0MyA9IChzdGQ6OmFicyhfX3BpbXUyKSA8IF9fZXBzCisgICAgICAgICAgICAgICAgICAgICAgID8gX1RwKDEpIDogc3RkOjpzaW4oX19waW11MikgLyBfX3BpbXUyICk7CisgICAgICAgICAgX1RwIF9fciA9IF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waSgpICogX19waW11MiAqIF9fZmFjdDMgKiBfX2ZhY3QzOworICAgICAgICAgIF9UcCBfX2MgPSBfVHAoMSk7CisgICAgICAgICAgX19kID0gLV9feDIgKiBfX3gyOworICAgICAgICAgIF9UcCBfX3N1bSA9IF9fZmYgKyBfX3IgKiBfX3E7CisgICAgICAgICAgX1RwIF9fc3VtMSA9IF9fcDsKKyAgICAgICAgICBmb3IgKF9faSA9IDE7IF9faSA8PSBfX21heF9pdGVyOyArK19faSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX19mZiA9IChfX2kgKiBfX2ZmICsgX19wICsgX19xKSAvIChfX2kgKiBfX2kgLSBfX211Mik7CisgICAgICAgICAgICAgIF9fYyAqPSBfX2QgLyBfVHAoX19pKTsKKyAgICAgICAgICAgICAgX19wIC89IF9UcChfX2kpIC0gX19tdTsKKyAgICAgICAgICAgICAgX19xIC89IF9UcChfX2kpICsgX19tdTsKKyAgICAgICAgICAgICAgY29uc3QgX1RwIF9fZGVsID0gX19jICogKF9fZmYgKyBfX3IgKiBfX3EpOworICAgICAgICAgICAgICBfX3N1bSArPSBfX2RlbDsgCisgICAgICAgICAgICAgIGNvbnN0IF9UcCBfX2RlbDEgPSBfX2MgKiBfX3AgLSBfX2kgKiBfX2RlbDsKKyAgICAgICAgICAgICAgX19zdW0xICs9IF9fZGVsMTsKKyAgICAgICAgICAgICAgaWYgKCBzdGQ6OmFicyhfX2RlbCkgPCBfX2VwcyAqIChfVHAoMSkgKyBzdGQ6OmFicyhfX3N1bSkpICkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoIF9faSA+IF9fbWF4X2l0ZXIgKQorICAgICAgICAgICAgc3RkOjpfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJCZXNzZWwgeSBzZXJpZXMgZmFpbGVkIHRvIGNvbnZlcmdlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19iZXNzZWxfam4uIikpOworICAgICAgICAgIF9fTm11ID0gLV9fc3VtOworICAgICAgICAgIF9fTm51MSA9IC1fX3N1bTEgKiBfX3hpMjsKKyAgICAgICAgICBfX05wbXUgPSBfX211ICogX194aSAqIF9fTm11IC0gX19ObnUxOworICAgICAgICAgIF9fSm11ID0gX193IC8gKF9fTnBtdSAtIF9fZiAqIF9fTm11KTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fYSA9IF9UcCgwLjI1TCkgLSBfX211MjsKKyAgICAgICAgICBfVHAgX19xID0gX1RwKDEpOworICAgICAgICAgIF9UcCBfX3AgPSAtX194aSAvIF9UcCgyKTsKKyAgICAgICAgICBfVHAgX19iciA9IF9UcCgyKSAqIF9feDsKKyAgICAgICAgICBfVHAgX19iaSA9IF9UcCgyKTsKKyAgICAgICAgICBfVHAgX19mYWN0ID0gX19hICogX194aSAvIChfX3AgKiBfX3AgKyBfX3EgKiBfX3EpOworICAgICAgICAgIF9UcCBfX2NyID0gX19iciArIF9fcSAqIF9fZmFjdDsKKyAgICAgICAgICBfVHAgX19jaSA9IF9fYmkgKyBfX3AgKiBfX2ZhY3Q7CisgICAgICAgICAgX1RwIF9fZGVuID0gX19iciAqIF9fYnIgKyBfX2JpICogX19iaTsKKyAgICAgICAgICBfVHAgX19kciA9IF9fYnIgLyBfX2RlbjsKKyAgICAgICAgICBfVHAgX19kaSA9IC1fX2JpIC8gX19kZW47CisgICAgICAgICAgX1RwIF9fZGxyID0gX19jciAqIF9fZHIgLSBfX2NpICogX19kaTsKKyAgICAgICAgICBfVHAgX19kbGkgPSBfX2NyICogX19kaSArIF9fY2kgKiBfX2RyOworICAgICAgICAgIF9UcCBfX3RlbXAgPSBfX3AgKiBfX2RsciAtIF9fcSAqIF9fZGxpOworICAgICAgICAgIF9fcSA9IF9fcCAqIF9fZGxpICsgX19xICogX19kbHI7CisgICAgICAgICAgX19wID0gX190ZW1wOworICAgICAgICAgIGludCBfX2k7CisgICAgICAgICAgZm9yIChfX2kgPSAyOyBfX2kgPD0gX19tYXhfaXRlcjsgKytfX2kpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9fYSArPSBfVHAoMiAqIChfX2kgLSAxKSk7CisgICAgICAgICAgICAgIF9fYmkgKz0gX1RwKDIpOworICAgICAgICAgICAgICBfX2RyID0gX19hICogX19kciArIF9fYnI7CisgICAgICAgICAgICAgIF9fZGkgPSBfX2EgKiBfX2RpICsgX19iaTsKKyAgICAgICAgICAgICAgaWYgKHN0ZDo6YWJzKF9fZHIpICsgc3RkOjphYnMoX19kaSkgPCBfX2ZwX21pbikKKyAgICAgICAgICAgICAgICBfX2RyID0gX19mcF9taW47CisgICAgICAgICAgICAgIF9fZmFjdCA9IF9fYSAvIChfX2NyICogX19jciArIF9fY2kgKiBfX2NpKTsKKyAgICAgICAgICAgICAgX19jciA9IF9fYnIgKyBfX2NyICogX19mYWN0OworICAgICAgICAgICAgICBfX2NpID0gX19iaSAtIF9fY2kgKiBfX2ZhY3Q7CisgICAgICAgICAgICAgIGlmIChzdGQ6OmFicyhfX2NyKSArIHN0ZDo6YWJzKF9fY2kpIDwgX19mcF9taW4pCisgICAgICAgICAgICAgICAgX19jciA9IF9fZnBfbWluOworICAgICAgICAgICAgICBfX2RlbiA9IF9fZHIgKiBfX2RyICsgX19kaSAqIF9fZGk7CisgICAgICAgICAgICAgIF9fZHIgLz0gX19kZW47CisgICAgICAgICAgICAgIF9fZGkgLz0gLV9fZGVuOworICAgICAgICAgICAgICBfX2RsciA9IF9fY3IgKiBfX2RyIC0gX19jaSAqIF9fZGk7CisgICAgICAgICAgICAgIF9fZGxpID0gX19jciAqIF9fZGkgKyBfX2NpICogX19kcjsKKyAgICAgICAgICAgICAgX190ZW1wID0gX19wICogX19kbHIgLSBfX3EgKiBfX2RsaTsKKyAgICAgICAgICAgICAgX19xID0gX19wICogX19kbGkgKyBfX3EgKiBfX2RscjsKKyAgICAgICAgICAgICAgX19wID0gX190ZW1wOworICAgICAgICAgICAgICBpZiAoc3RkOjphYnMoX19kbHIgLSBfVHAoMSkpICsgc3RkOjphYnMoX19kbGkpIDwgX19lcHMpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChfX2kgPiBfX21heF9pdGVyKQorICAgICAgICAgICAgc3RkOjpfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJMZW50eidzIG1ldGhvZCBmYWlsZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBfX2Jlc3NlbF9qbi4iKSk7CisgICAgICAgICAgY29uc3QgX1RwIF9fZ2FtID0gKF9fcCAtIF9fZikgLyBfX3E7CisgICAgICAgICAgX19KbXUgPSBzdGQ6OnNxcnQoX193IC8gKChfX3AgLSBfX2YpICogX19nYW0gKyBfX3EpKTsKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAgICAgICAgX19KbXUgPSBzdGQ6OnRyMTo6Y29weXNpZ24oX19KbXUsIF9fSm51bCk7CisjZWxzZQorICAgICAgICAgIGlmIChfX0ptdSAqIF9fSm51bCA8IF9UcCgwKSkKKyAgICAgICAgICAgIF9fSm11ID0gLV9fSm11OworI2VuZGlmCisgICAgICAgICAgX19ObXUgPSBfX2dhbSAqIF9fSm11OworICAgICAgICAgIF9fTnBtdSA9IChfX3AgKyBfX3EgLyBfX2dhbSkgKiBfX05tdTsKKyAgICAgICAgICBfX05udTEgPSBfX211ICogX194aSAqIF9fTm11IC0gX19OcG11OworICAgICAgfQorICAgICAgX19mYWN0ID0gX19KbXUgLyBfX0pudWw7CisgICAgICBfX0pudSA9IF9fZmFjdCAqIF9fSm51bDE7CisgICAgICBfX0pwbnUgPSBfX2ZhY3QgKiBfX0pwbnUxOworICAgICAgZm9yIChfX2kgPSAxOyBfX2kgPD0gX19ubDsgKytfX2kpCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCBfVHAgX19ObnV0ZW1wID0gKF9fbXUgKyBfX2kpICogX194aTIgKiBfX05udTEgLSBfX05tdTsKKyAgICAgICAgICBfX05tdSA9IF9fTm51MTsKKyAgICAgICAgICBfX05udTEgPSBfX05udXRlbXA7CisgICAgICAgIH0KKyAgICAgIF9fTm51ID0gX19ObXU7CisgICAgICBfX05wbnUgPSBfX251ICogX194aSAqIF9fTm11IC0gX19ObnUxOworCisgICAgICByZXR1cm47CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBUaGlzIHJvdXRpbmUgY29tcHV0ZXMgdGhlIGFzeW1wdG90aWMgY3lsaW5kcmljYWwgQmVzc2VsCisgICAgICogICAgICAgICAgYW5kIE5ldW1hbm4gZnVuY3Rpb25zIG9mIG9yZGVyIG51OiBcZiQgSl97XG51fSBcZiQsCisgICAgICogICAgICAgICAgXGYkIE5fe1xudX0gXGYkLgorICAgICAqCisgICAgICogICBSZWZlcmVuY2VzOgorICAgICAqICAgICgxKSBIYW5kYm9vayBvZiBNYXRoZW1hdGljYWwgRnVuY3Rpb25zLAorICAgICAqICAgICAgICBlZC4gTWlsdG9uIEFicmFtb3dpdHogYW5kIElyZW5lIEEuIFN0ZWd1biwKKyAgICAgKiAgICAgICAgRG92ZXIgUHVibGljYXRpb25zLAorICAgICAqICAgICAgICBTZWN0aW9uIDkgcC4gMzY0LCBFcXVhdGlvbnMgOS4yLjUtOS4yLjEwCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSAgX19udSAgVGhlIG9yZGVyIG9mIHRoZSBCZXNzZWwgZnVuY3Rpb25zLgorICAgICAqICAgQHBhcmFtICBfX3ggICBUaGUgYXJndW1lbnQgb2YgdGhlIEJlc3NlbCBmdW5jdGlvbnMuCisgICAgICogICBAcGFyYW0gIF9fSm51ICBUaGUgb3V0cHV0IEJlc3NlbCBmdW5jdGlvbiBvZiB0aGUgZmlyc3Qga2luZC4KKyAgICAgKiAgIEBwYXJhbSAgX19ObnUgIFRoZSBvdXRwdXQgTmV1bWFubiBmdW5jdGlvbiAoQmVzc2VsIGZ1bmN0aW9uIG9mIHRoZSBzZWNvbmQga2luZCkuCisgICAgICovCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcD4KKyAgICB2b2lkCisgICAgX19jeWxfYmVzc2VsX2puX2FzeW1wKGNvbnN0IF9UcCBfX251LCBjb25zdCBfVHAgX194LAorICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAgJiBfX0pudSwgX1RwICYgX19ObnUpCisgICAgeworICAgICAgY29uc3QgX1RwIF9fY29lZiA9IHN0ZDo6c3FydChfVHAoMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyAoX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpKCkgKiBfX3gpKTsKKyAgICAgIGNvbnN0IF9UcCBfX211ICAgPSBfVHAoNCkgKiBfX251ICogX19udTsKKyAgICAgIGNvbnN0IF9UcCBfX211bTEgPSBfX211IC0gX1RwKDEpOworICAgICAgY29uc3QgX1RwIF9fbXVtOSA9IF9fbXUgLSBfVHAoOSk7CisgICAgICBjb25zdCBfVHAgX19tdW0yNSA9IF9fbXUgLSBfVHAoMjUpOworICAgICAgY29uc3QgX1RwIF9fbXVtNDkgPSBfX211IC0gX1RwKDQ5KTsKKyAgICAgIGNvbnN0IF9UcCBfX3h4ID0gX1RwKDY0KSAqIF9feCAqIF9feDsKKyAgICAgIGNvbnN0IF9UcCBfX1AgPSBfVHAoMSkgLSBfX211bTEgKiBfX211bTkgLyAoX1RwKDIpICogX194eCkKKyAgICAgICAgICAgICAgICAgICAgKiAoX1RwKDEpIC0gX19tdW0yNSAqIF9fbXVtNDkgLyAoX1RwKDEyKSAqIF9feHgpKTsKKyAgICAgIGNvbnN0IF9UcCBfX1EgPSBfX211bTEgLyAoX1RwKDgpICogX194KQorICAgICAgICAgICAgICAgICAgICAqIChfVHAoMSkgLSBfX211bTkgKiBfX211bTI1IC8gKF9UcCg2KSAqIF9feHgpKTsKKworICAgICAgY29uc3QgX1RwIF9fY2hpID0gX194IC0gKF9fbnUgKyBfVHAoMC41TCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fcGlfMigpOworICAgICAgY29uc3QgX1RwIF9fYyA9IHN0ZDo6Y29zKF9fY2hpKTsKKyAgICAgIGNvbnN0IF9UcCBfX3MgPSBzdGQ6OnNpbihfX2NoaSk7CisKKyAgICAgIF9fSm51ID0gX19jb2VmICogKF9fYyAqIF9fUCAtIF9fcyAqIF9fUSk7CisgICAgICBfX05udSA9IF9fY29lZiAqIChfX3MgKiBfX1AgKyBfX2MgKiBfX1EpOworCisgICAgICByZXR1cm47CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgY3lsaW5kcmljYWwgQmVzc2VsIGZ1bmN0aW9ucworICAgICAqICAgICAgICAgIG9mIG9yZGVyIFxmJCBcbnUgXGYkOiBcZiQgSl97XG51fSBcZiQgb3IgXGYkIElfe1xudX0gXGYkCisgICAgICogICAgICAgICAgYnkgc2VyaWVzIGV4cGFuc2lvbi4KKyAgICAgKgorICAgICAqICAgVGhlIG1vZGlmaWVkIGN5bGluZHJpY2FsIEJlc3NlbCBmdW5jdGlvbiBpczoKKyAgICAgKiAgIEBmWworICAgICAqICAgIFpfe1xudX0oeCkgPSBcc3VtX3trPTB9XntcaW5mdHl9CisgICAgICogICAgICAgICAgICAgIFxmcmFje1xzaWdtYV5rICh4LzIpXntcbnUgKyAya319e2shXEdhbW1hKFxudStrKzEpfQorICAgICAqICAgQGZdCisgICAgICogICB3aGVyZSBcZiQgXHNpZ21hID0gKzEgXGYkIG9yXGYkICAtMSBcZiQgZm9yCisgICAgICogICBcZiQgWiA9IEkgXGYkIG9yIFxmJCBKIFxmJCByZXNwZWN0aXZlbHkuCisgICAgICogCisgICAgICogICBTZWUgQWJyYW1vd2l0eiAmIFN0ZWd1biwgOS4xLjEwCisgICAgICogICAgICAgQWJyYW1vd2l0eiAmIFN0ZWd1biwgOS42LjcKKyAgICAgKiAgICAoMSkgSGFuZGJvb2sgb2YgTWF0aGVtYXRpY2FsIEZ1bmN0aW9ucywKKyAgICAgKiAgICAgICAgZWQuIE1pbHRvbiBBYnJhbW93aXR6IGFuZCBJcmVuZSBBLiBTdGVndW4sCisgICAgICogICAgICAgIERvdmVyIFB1YmxpY2F0aW9ucywKKyAgICAgKiAgICAgICAgRXF1YXRpb24gOS4xLjEwIHAuIDM2MCBhbmQgRXF1YXRpb24gOS42LjEwIHAuIDM3NQorICAgICAqCisgICAgICogICBAcGFyYW0gIF9fbnUgIFRoZSBvcmRlciBvZiB0aGUgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtICBfX3ggICBUaGUgYXJndW1lbnQgb2YgdGhlIEJlc3NlbCBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSAgX19zZ24gIFRoZSBzaWduIG9mIHRoZSBhbHRlcm5hdGUgdGVybXMKKyAgICAgKiAgICAgICAgICAgICAgICAgIC0xIGZvciB0aGUgQmVzc2VsIGZ1bmN0aW9uIG9mIHRoZSBmaXJzdCBraW5kLgorICAgICAqICAgICAgICAgICAgICAgICAgKzEgZm9yIHRoZSBtb2RpZmllZCBCZXNzZWwgZnVuY3Rpb24gb2YgdGhlIGZpcnN0IGtpbmQuCisgICAgICogICBAcmV0dXJuICBUaGUgb3V0cHV0IEJlc3NlbCBmdW5jdGlvbi4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fY3lsX2Jlc3NlbF9pal9zZXJpZXMoY29uc3QgX1RwIF9fbnUsIGNvbnN0IF9UcCBfX3gsIGNvbnN0IF9UcCBfX3NnbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBfX21heF9pdGVyKQorICAgIHsKKworICAgICAgY29uc3QgX1RwIF9feDIgPSBfX3ggLyBfVHAoMik7CisgICAgICBfVHAgX19mYWN0ID0gX19udSAqIHN0ZDo6bG9nKF9feDIpOworI2lmIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEKKyAgICAgIF9fZmFjdCAtPSBzdGQ6OnRyMTo6bGdhbW1hKF9fbnUgKyBfVHAoMSkpOworI2Vsc2UKKyAgICAgIF9fZmFjdCAtPSBfX2xvZ19nYW1tYShfX251ICsgX1RwKDEpKTsKKyNlbmRpZgorICAgICAgX19mYWN0ID0gc3RkOjpleHAoX19mYWN0KTsKKyAgICAgIGNvbnN0IF9UcCBfX3h4NCA9IF9fc2duICogX194MiAqIF9feDI7CisgICAgICBfVHAgX19KbiA9IF9UcCgxKTsKKyAgICAgIF9UcCBfX3Rlcm0gPSBfVHAoMSk7CisKKyAgICAgIGZvciAodW5zaWduZWQgaW50IF9faSA9IDE7IF9faSA8IF9fbWF4X2l0ZXI7ICsrX19pKQorICAgICAgICB7CisgICAgICAgICAgX190ZXJtICo9IF9feHg0IC8gKF9UcChfX2kpICogKF9fbnUgKyBfVHAoX19pKSkpOworICAgICAgICAgIF9fSm4gKz0gX190ZXJtOworICAgICAgICAgIGlmIChzdGQ6OmFicyhfX3Rlcm0gLyBfX0puKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6ZXBzaWxvbigpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgcmV0dXJuIF9fZmFjdCAqIF9fSm47CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgUmV0dXJuIHRoZSBCZXNzZWwgZnVuY3Rpb24gb2Ygb3JkZXIgXGYkIFxudSBcZiQ6CisgICAgICogICAgICAgICAgIFxmJCBKX3tcbnV9KHgpIFxmJC4KKyAgICAgKgorICAgICAqICAgVGhlIGN5bGluZHJpY2FsIEJlc3NlbCBmdW5jdGlvbiBpczoKKyAgICAgKiAgIEBmWworICAgICAqICAgIEpfe1xudX0oeCkgPSBcc3VtX3trPTB9XntcaW5mdHl9CisgICAgICogICAgICAgICAgICAgIFxmcmFjeygtMSleayAoeC8yKV57XG51ICsgMmt9fXtrIVxHYW1tYShcbnUraysxKX0KKyAgICAgKiAgIEBmXQorICAgICAqCisgICAgICogICBAcGFyYW0gIF9fbnUgIFRoZSBvcmRlciBvZiB0aGUgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtICBfX3ggICBUaGUgYXJndW1lbnQgb2YgdGhlIEJlc3NlbCBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBvdXRwdXQgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2N5bF9iZXNzZWxfaihjb25zdCBfVHAgX19udSwgY29uc3QgX1RwIF9feCkKKyAgICB7CisgICAgICBpZiAoX19udSA8IF9UcCgwKSB8fCBfX3ggPCBfVHAoMCkpCisgICAgICAgIHN0ZDo6X190aHJvd19kb21haW5fZXJyb3IoX19OKCJCYWQgYXJndW1lbnQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19jeWxfYmVzc2VsX2ouIikpOworICAgICAgZWxzZSBpZiAoX19pc25hbihfX251KSB8fCBfX2lzbmFuKF9feCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OnF1aWV0X05hTigpOworICAgICAgZWxzZSBpZiAoX194ICogX194IDwgX1RwKDEwKSAqIChfX251ICsgX1RwKDEpKSkKKyAgICAgICAgcmV0dXJuIF9fY3lsX2Jlc3NlbF9pal9zZXJpZXMoX19udSwgX194LCAtX1RwKDEpLCAyMDApOworICAgICAgZWxzZSBpZiAoX194ID4gX1RwKDEwMDApKQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fSl9udSwgX19OX251OworICAgICAgICAgIF9fY3lsX2Jlc3NlbF9qbl9hc3ltcChfX251LCBfX3gsIF9fSl9udSwgX19OX251KTsKKyAgICAgICAgICByZXR1cm4gX19KX251OworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBfVHAgX19KX251LCBfX05fbnUsIF9fSnBfbnUsIF9fTnBfbnU7CisgICAgICAgICAgX19iZXNzZWxfam4oX19udSwgX194LCBfX0pfbnUsIF9fTl9udSwgX19KcF9udSwgX19OcF9udSk7CisgICAgICAgICAgcmV0dXJuIF9fSl9udTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgIFJldHVybiB0aGUgTmV1bWFubiBmdW5jdGlvbiBvZiBvcmRlciBcZiQgXG51IFxmJDoKKyAgICAgKiAgICAgICAgICAgXGYkIE5fe1xudX0oeCkgXGYkLgorICAgICAqCisgICAgICogICBUaGUgTmV1bWFubiBmdW5jdGlvbiBpcyBkZWZpbmVkIGJ5OgorICAgICAqICAgQGZbCisgICAgICogICAgICBOX3tcbnV9KHgpID0gXGZyYWN7Sl97XG51fSh4KSBcY29zIFxudVxwaSAtIEpfey1cbnV9KHgpfQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAge1xzaW4gXG51XHBpfQorICAgICAqICAgQGZdCisgICAgICogICB3aGVyZSBmb3IgaW50ZWdyYWwgXGYkIFxudSA9IG4gXGYkIGEgbGltaXQgaXMgdGFrZW46CisgICAgICogICBcZiQgbGltX3tcbnUgXHRvIG59IFxmJC4KKyAgICAgKgorICAgICAqICAgQHBhcmFtICBfX251ICBUaGUgb3JkZXIgb2YgdGhlIE5ldW1hbm4gZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gIF9feCAgIFRoZSBhcmd1bWVudCBvZiB0aGUgTmV1bWFubiBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBvdXRwdXQgTmV1bWFubiBmdW5jdGlvbi4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19jeWxfbmV1bWFubl9uKGNvbnN0IF9UcCBfX251LCBjb25zdCBfVHAgX194KQorICAgIHsKKyAgICAgIGlmIChfX251IDwgX1RwKDApIHx8IF9feCA8IF9UcCgwKSkKKyAgICAgICAgc3RkOjpfX3Rocm93X2RvbWFpbl9lcnJvcihfX04oIkJhZCBhcmd1bWVudCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBfX2N5bF9uZXVtYW5uX24uIikpOworICAgICAgZWxzZSBpZiAoX19pc25hbihfX251KSB8fCBfX2lzbmFuKF9feCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OnF1aWV0X05hTigpOworICAgICAgZWxzZSBpZiAoX194ID4gX1RwKDEwMDApKQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fSl9udSwgX19OX251OworICAgICAgICAgIF9fY3lsX2Jlc3NlbF9qbl9hc3ltcChfX251LCBfX3gsIF9fSl9udSwgX19OX251KTsKKyAgICAgICAgICByZXR1cm4gX19OX251OworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBfVHAgX19KX251LCBfX05fbnUsIF9fSnBfbnUsIF9fTnBfbnU7CisgICAgICAgICAgX19iZXNzZWxfam4oX19udSwgX194LCBfX0pfbnUsIF9fTl9udSwgX19KcF9udSwgX19OcF9udSk7CisgICAgICAgICAgcmV0dXJuIF9fTl9udTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgIENvbXB1dGUgdGhlIHNwaGVyaWNhbCBCZXNzZWwgQGYkIGpfbih4KSBAZiQKKyAgICAgKiAgICAgICAgICAgYW5kIE5ldW1hbm4gQGYkIG5fbih4KSBAZiQgZnVuY3Rpb25zIGFuZCB0aGVpciBmaXJzdAorICAgICAqICAgICAgICAgICBkZXJpdmF0aXZlcyBAZiQgaidfbih4KSBAZiQgYW5kIEBmJCBuJ19uKHgpIEBmJAorICAgICAqICAgICAgICAgICByZXNwZWN0aXZlbHkuCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSAgX19uICBUaGUgb3JkZXIgb2YgdGhlIHNwaGVyaWNhbCBCZXNzZWwgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gIF9feCAgVGhlIGFyZ3VtZW50IG9mIHRoZSBzcGhlcmljYWwgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtICBfX2pfbiAgVGhlIG91dHB1dCBzcGhlcmljYWwgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtICBfX25fbiAgVGhlIG91dHB1dCBzcGhlcmljYWwgTmV1bWFubiBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSAgX19qcF9uICBUaGUgb3V0cHV0IGRlcml2YXRpdmUgb2YgdGhlIHNwaGVyaWNhbCBCZXNzZWwgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gIF9fbnBfbiAgVGhlIG91dHB1dCBkZXJpdmF0aXZlIG9mIHRoZSBzcGhlcmljYWwgTmV1bWFubiBmdW5jdGlvbi4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICBfX3NwaF9iZXNzZWxfam4oY29uc3QgdW5zaWduZWQgaW50IF9fbiwgY29uc3QgX1RwIF9feCwKKyAgICAgICAgICAgICAgICAgICAgX1RwICYgX19qX24sIF9UcCAmIF9fbl9uLCBfVHAgJiBfX2pwX24sIF9UcCAmIF9fbnBfbikKKyAgICB7CisgICAgICBjb25zdCBfVHAgX19udSA9IF9UcChfX24pICsgX1RwKDAuNUwpOworCisgICAgICBfVHAgX19KX251LCBfX05fbnUsIF9fSnBfbnUsIF9fTnBfbnU7CisgICAgICBfX2Jlc3NlbF9qbihfX251LCBfX3gsIF9fSl9udSwgX19OX251LCBfX0pwX251LCBfX05wX251KTsKKworICAgICAgY29uc3QgX1RwIF9fZmFjdG9yID0gX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3NxcnRwaW8yKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAvIHN0ZDo6c3FydChfX3gpOworCisgICAgICBfX2pfbiA9IF9fZmFjdG9yICogX19KX251OworICAgICAgX19uX24gPSBfX2ZhY3RvciAqIF9fTl9udTsKKyAgICAgIF9fanBfbiA9IF9fZmFjdG9yICogX19KcF9udSAtIF9fal9uIC8gKF9UcCgyKSAqIF9feCk7CisgICAgICBfX25wX24gPSBfX2ZhY3RvciAqIF9fTnBfbnUgLSBfX25fbiAvIChfVHAoMikgKiBfX3gpOworCisgICAgICByZXR1cm47CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgUmV0dXJuIHRoZSBzcGhlcmljYWwgQmVzc2VsIGZ1bmN0aW9uCisgICAgICogICAgICAgICAgIEBmJCBqX24oeCkgQGYkIG9mIG9yZGVyIG4uCisgICAgICoKKyAgICAgKiAgIFRoZSBzcGhlcmljYWwgQmVzc2VsIGZ1bmN0aW9uIGlzIGRlZmluZWQgYnk6CisgICAgICogICBAZlsKKyAgICAgKiAgICBqX24oeCkgPSBcbGVmdCggXGZyYWN7XHBpfXsyeH0gXHJpZ2h0KSBeezEvMn0gSl97bisxLzJ9KHgpCisgICAgICogICBAZl0KKyAgICAgKgorICAgICAqICAgQHBhcmFtICBfX24gIFRoZSBvcmRlciBvZiB0aGUgc3BoZXJpY2FsIEJlc3NlbCBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSAgX194ICBUaGUgYXJndW1lbnQgb2YgdGhlIHNwaGVyaWNhbCBCZXNzZWwgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgb3V0cHV0IHNwaGVyaWNhbCBCZXNzZWwgZnVuY3Rpb24uCisgICAgICovCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX3NwaF9iZXNzZWwoY29uc3QgdW5zaWduZWQgaW50IF9fbiwgY29uc3QgX1RwIF9feCkKKyAgICB7CisgICAgICBpZiAoX194IDwgX1RwKDApKQorICAgICAgICBzdGQ6Ol9fdGhyb3dfZG9tYWluX2Vycm9yKF9fTigiQmFkIGFyZ3VtZW50ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIF9fc3BoX2Jlc3NlbC4iKSk7CisgICAgICBlbHNlIGlmIChfX2lzbmFuKF9feCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OnF1aWV0X05hTigpOworICAgICAgZWxzZSBpZiAoX194ID09IF9UcCgwKSkKKyAgICAgICAgeworICAgICAgICAgIGlmIChfX24gPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBfVHAoMSk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIF9UcCgwKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fal9uLCBfX25fbiwgX19qcF9uLCBfX25wX247CisgICAgICAgICAgX19zcGhfYmVzc2VsX2puKF9fbiwgX194LCBfX2pfbiwgX19uX24sIF9fanBfbiwgX19ucF9uKTsKKyAgICAgICAgICByZXR1cm4gX19qX247CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmICBSZXR1cm4gdGhlIHNwaGVyaWNhbCBOZXVtYW5uIGZ1bmN0aW9uCisgICAgICogICAgICAgICAgIEBmJCBuX24oeCkgQGYkLgorICAgICAqCisgICAgICogICBUaGUgc3BoZXJpY2FsIE5ldW1hbm4gZnVuY3Rpb24gaXMgZGVmaW5lZCBieToKKyAgICAgKiAgIEBmWworICAgICAqICAgIG5fbih4KSA9IFxsZWZ0KCBcZnJhY3tccGl9ezJ4fSBccmlnaHQpIF57MS8yfSBOX3tuKzEvMn0oeCkKKyAgICAgKiAgIEBmXQorICAgICAqCisgICAgICogICBAcGFyYW0gIF9fbiAgVGhlIG9yZGVyIG9mIHRoZSBzcGhlcmljYWwgTmV1bWFubiBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSAgX194ICBUaGUgYXJndW1lbnQgb2YgdGhlIHNwaGVyaWNhbCBOZXVtYW5uIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIG91dHB1dCBzcGhlcmljYWwgTmV1bWFubiBmdW5jdGlvbi4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fc3BoX25ldW1hbm4oY29uc3QgdW5zaWduZWQgaW50IF9fbiwgY29uc3QgX1RwIF9feCkKKyAgICB7CisgICAgICBpZiAoX194IDwgX1RwKDApKQorICAgICAgICBzdGQ6Ol9fdGhyb3dfZG9tYWluX2Vycm9yKF9fTigiQmFkIGFyZ3VtZW50ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIF9fc3BoX25ldW1hbm4uIikpOworICAgICAgZWxzZSBpZiAoX19pc25hbihfX3gpKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjpxdWlldF9OYU4oKTsKKyAgICAgIGVsc2UgaWYgKF9feCA9PSBfVHAoMCkpCisgICAgICAgIHJldHVybiAtc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjppbmZpbml0eSgpOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fal9uLCBfX25fbiwgX19qcF9uLCBfX25wX247CisgICAgICAgICAgX19zcGhfYmVzc2VsX2puKF9fbiwgX194LCBfX2pfbiwgX19uX24sIF9fanBfbiwgX19ucF9uKTsKKyAgICAgICAgICByZXR1cm4gX19uX247CisgICAgICAgIH0KKyAgICB9CisKKyAgfSAvLyBuYW1lc3BhY2Ugc3RkOjp0cjE6Ol9fZGV0YWlsCit9Cit9CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfQkVTU0VMX0ZVTkNUSU9OX1RDQwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvYmV0YV9mdW5jdGlvbi50Y2MgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9iZXRhX2Z1bmN0aW9uLnRjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWQxODYwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvYmV0YV9mdW5jdGlvbi50Y2MKQEAgLTAsMCArMSwxOTcgQEAKKy8vIFNwZWNpYWwgZnVuY3Rpb25zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLy8KKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvYmV0YV9mdW5jdGlvbi50Y2MKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODIgVFIxOiA1LjIgIFNwZWNpYWwgZnVuY3Rpb25zCisvLworCisvLyBXcml0dGVuIGJ5IEVkd2FyZCBTbWl0aC1Sb3dsYW5kIGJhc2VkIG9uOgorLy8gICAoMSkgSGFuZGJvb2sgb2YgTWF0aGVtYXRpY2FsIEZ1bmN0aW9ucywKKy8vICAgICAgIGVkLiBNaWx0b24gQWJyYW1vd2l0eiBhbmQgSXJlbmUgQS4gU3RlZ3VuLAorLy8gICAgICAgRG92ZXIgUHVibGljYXRpb25zLAorLy8gICAgICAgU2VjdGlvbiA2LCBwcC4gMjUzLTI2NgorLy8gICAoMikgVGhlIEdudSBTY2llbnRpZmljIExpYnJhcnksIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nc2wKKy8vICAgKDMpIE51bWVyaWNhbCBSZWNpcGVzIGluIEMsIGJ5IFcuIEguIFByZXNzLCBTLiBBLiBUZXVrb2xza3ksCisvLyAgICAgICBXLiBULiBWZXR0ZXJsaW5nLCBCLiBQLiBGbGFubmVyeSwgQ2FtYnJpZGdlIFVuaXZlcnNpdHkgUHJlc3MgKDE5OTIpLAorLy8gICAgICAgMm5kIGVkLCBwcC4gMjEzLTIxNgorLy8gICAoNCkgR2FtbWEsIEV4cGxvcmluZyBFdWxlcidzIENvbnN0YW50LCBKdWxpYW4gSGF2aWwsCisvLyAgICAgICBQcmluY2V0b24sIDIwMDMuCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX0JFVEFfRlVOQ1RJT05fVENDCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9CRVRBX0ZVTkNUSU9OX1RDQyAxCisKK25hbWVzcGFjZSBzdGQKK3sKK25hbWVzcGFjZSB0cjEKK3sKKworICAvLyBbNS4yXSBTcGVjaWFsIGZ1bmN0aW9ucworCisgIC8vIEltcGxlbWVudGF0aW9uLXNwYWNlIGRldGFpbHMuCisgIG5hbWVzcGFjZSBfX2RldGFpbAorICB7CisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgUmV0dXJuIHRoZSBiZXRhIGZ1bmN0aW9uOiBcZiRCKHgseSlcZiQuCisgICAgICogCisgICAgICogICBUaGUgYmV0YSBmdW5jdGlvbiBpcyBkZWZpbmVkIGJ5CisgICAgICogICBAZlsKKyAgICAgKiAgICAgQih4LHkpID0gXGZyYWN7XEdhbW1hKHgpXEdhbW1hKHkpfXtcR2FtbWEoeCt5KX0KKyAgICAgKiAgIEBmXQorICAgICAqCisgICAgICogICBAcGFyYW0gX194IFRoZSBmaXJzdCBhcmd1bWVudCBvZiB0aGUgYmV0YSBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSBfX3kgVGhlIHNlY29uZCBhcmd1bWVudCBvZiB0aGUgYmV0YSBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBiZXRhIGZ1bmN0aW9uLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2JldGFfZ2FtbWEoX1RwIF9feCwgX1RwIF9feSkKKyAgICB7CisKKyAgICAgIF9UcCBfX2JldDsKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAgICBpZiAoX194ID4gX195KQorICAgICAgICB7CisgICAgICAgICAgX19iZXQgPSBzdGQ6OnRyMTo6dGdhbW1hKF9feCkKKyAgICAgICAgICAgICAgICAvIHN0ZDo6dHIxOjp0Z2FtbWEoX194ICsgX195KTsKKyAgICAgICAgICBfX2JldCAqPSBzdGQ6OnRyMTo6dGdhbW1hKF9feSk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIF9fYmV0ID0gc3RkOjp0cjE6OnRnYW1tYShfX3kpCisgICAgICAgICAgICAgICAgLyBzdGQ6OnRyMTo6dGdhbW1hKF9feCArIF9feSk7CisgICAgICAgICAgX19iZXQgKj0gc3RkOjp0cjE6OnRnYW1tYShfX3gpOworICAgICAgICB9CisjZWxzZQorICAgICAgaWYgKF9feCA+IF9feSkKKyAgICAgICAgeworICAgICAgICAgIF9fYmV0ID0gX19nYW1tYShfX3gpIC8gX19nYW1tYShfX3ggKyBfX3kpOworICAgICAgICAgIF9fYmV0ICo9IF9fZ2FtbWEoX195KTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgX19iZXQgPSBfX2dhbW1hKF9feSkgLyBfX2dhbW1hKF9feCArIF9feSk7CisgICAgICAgICAgX19iZXQgKj0gX19nYW1tYShfX3gpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgcmV0dXJuIF9fYmV0OworICAgIH0KKworICAgIC8qKgorICAgICAqICAgQGJyaWVmICBSZXR1cm4gdGhlIGJldGEgZnVuY3Rpb24gXGYkQih4LHkpXGYkIHVzaW5nCisgICAgICogICAgICAgICAgIHRoZSBsb2cgZ2FtbWEgZnVuY3Rpb25zLgorICAgICAqIAorICAgICAqICAgVGhlIGJldGEgZnVuY3Rpb24gaXMgZGVmaW5lZCBieQorICAgICAqICAgQGZbCisgICAgICogICAgIEIoeCx5KSA9IFxmcmFje1xHYW1tYSh4KVxHYW1tYSh5KX17XEdhbW1hKHgreSl9CisgICAgICogICBAZl0KKyAgICAgKgorICAgICAqICAgQHBhcmFtIF9feCBUaGUgZmlyc3QgYXJndW1lbnQgb2YgdGhlIGJldGEgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gX195IFRoZSBzZWNvbmQgYXJndW1lbnQgb2YgdGhlIGJldGEgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgYmV0YSBmdW5jdGlvbi4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19iZXRhX2xnYW1tYShfVHAgX194LCBfVHAgX195KQorICAgIHsKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAgICBfVHAgX19iZXQgPSBzdGQ6OnRyMTo6bGdhbW1hKF9feCkKKyAgICAgICAgICAgICAgICArIHN0ZDo6dHIxOjpsZ2FtbWEoX195KQorICAgICAgICAgICAgICAgIC0gc3RkOjp0cjE6OmxnYW1tYShfX3ggKyBfX3kpOworI2Vsc2UKKyAgICAgIF9UcCBfX2JldCA9IF9fbG9nX2dhbW1hKF9feCkKKyAgICAgICAgICAgICAgICArIF9fbG9nX2dhbW1hKF9feSkKKyAgICAgICAgICAgICAgICAtIF9fbG9nX2dhbW1hKF9feCArIF9feSk7CisjZW5kaWYKKyAgICAgIF9fYmV0ID0gc3RkOjpleHAoX19iZXQpOworICAgICAgcmV0dXJuIF9fYmV0OworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgIFJldHVybiB0aGUgYmV0YSBmdW5jdGlvbiBcZiRCKHgseSlcZiQgdXNpbmcKKyAgICAgKiAgICAgICAgICAgdGhlIHByb2R1Y3QgZm9ybS4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBiZXRhIGZ1bmN0aW9uIGlzIGRlZmluZWQgYnkKKyAgICAgKiAgIEBmWworICAgICAqICAgICBCKHgseSkgPSBcZnJhY3tcR2FtbWEoeClcR2FtbWEoeSl9e1xHYW1tYSh4K3kpfQorICAgICAqICAgQGZdCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSBfX3ggVGhlIGZpcnN0IGFyZ3VtZW50IG9mIHRoZSBiZXRhIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtIF9feSBUaGUgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBiZXRhIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIGJldGEgZnVuY3Rpb24uCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fYmV0YV9wcm9kdWN0KF9UcCBfX3gsIF9UcCBfX3kpCisgICAgeworCisgICAgICBfVHAgX19iZXQgPSAoX194ICsgX195KSAvIChfX3ggKiBfX3kpOworCisgICAgICB1bnNpZ25lZCBpbnQgX19tYXhfaXRlciA9IDEwMDAwMDA7CisgICAgICBmb3IgKHVuc2lnbmVkIGludCBfX2sgPSAxOyBfX2sgPCBfX21heF9pdGVyOyArK19faykKKyAgICAgICAgeworICAgICAgICAgIF9UcCBfX3Rlcm0gPSAoX1RwKDEpICsgKF9feCArIF9feSkgLyBfX2spCisgICAgICAgICAgICAgICAgICAgICAvICgoX1RwKDEpICsgX194IC8gX19rKSAqIChfVHAoMSkgKyBfX3kgLyBfX2spKTsKKyAgICAgICAgICBfX2JldCAqPSBfX3Rlcm07CisgICAgICAgIH0KKworICAgICAgcmV0dXJuIF9fYmV0OworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgIFJldHVybiB0aGUgYmV0YSBmdW5jdGlvbiBcZiQgQih4LHkpIFxmJC4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBiZXRhIGZ1bmN0aW9uIGlzIGRlZmluZWQgYnkKKyAgICAgKiAgIEBmWworICAgICAqICAgICBCKHgseSkgPSBcZnJhY3tcR2FtbWEoeClcR2FtbWEoeSl9e1xHYW1tYSh4K3kpfQorICAgICAqICAgQGZdCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSBfX3ggVGhlIGZpcnN0IGFyZ3VtZW50IG9mIHRoZSBiZXRhIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtIF9feSBUaGUgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBiZXRhIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIGJldGEgZnVuY3Rpb24uCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICBfX2JldGEoX1RwIF9feCwgX1RwIF9feSkKKyAgICB7CisgICAgICBpZiAoX19pc25hbihfX3gpIHx8IF9faXNuYW4oX195KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6cXVpZXRfTmFOKCk7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBfX2JldGFfbGdhbW1hKF9feCwgX195KTsKKyAgICB9CisKKyAgfSAvLyBuYW1lc3BhY2Ugc3RkOjp0cjE6Ol9fZGV0YWlsCit9Cit9CisKKyNlbmRpZiAvLyBfX0dMSUJDWFhfVFIxX0JFVEFfRlVOQ1RJT05fVENDCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9jY29tcGxleCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL2Njb21wbGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYWUzM2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9jY29tcGxleApAQCAtMCwwICsxLDM0IEBACisvLyBUUjEgY2NvbXBsZXggLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvY2NvbXBsZXgKKyAqICBUaGlzIGlzIGEgVFIxIEMrKyBMaWJyYXJ5IGhlYWRlci4gCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfQ0NPTVBMRVgKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX0NDT01QTEVYIDEKKworI2luY2x1ZGUgPHRyMS9jb21wbGV4PgorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX0NDT01QTEVYCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9jY3R5cGUgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9jY3R5cGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNlODY0ZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL2NjdHlwZQpAQCAtMCwwICsxLDQ5IEBACisvLyBUUjEgY2N0eXBlIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL2NjdHlwZQorICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9DQ1RZUEUKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX0NDVFlQRSAxCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGNjdHlwZT4KKworI2lmIGRlZmluZWQoX0dMSUJDWFhfSU5DTFVERV9BU19UUjEpCisjICBpbmNsdWRlIDx0cjFfaW1wbC9jY3R5cGU+CisjZWxzZQorIyAgZGVmaW5lIF9HTElCQ1hYX0lOQ0xVREVfQVNfVFIxCisjICBkZWZpbmUgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMSBuYW1lc3BhY2UgdHIxIHsKKyMgIGRlZmluZSBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMSB9CisjICBkZWZpbmUgX0dMSUJDWFhfVFIxIHRyMTo6CisjICBpbmNsdWRlIDx0cjFfaW1wbC9jY3R5cGU+CisjICB1bmRlZiBfR0xJQkNYWF9UUjEKKyMgIHVuZGVmIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVFIxCisjICB1bmRlZiBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxCisjICB1bmRlZiBfR0xJQkNYWF9JTkNMVURFX0FTX1RSMQorI2VuZGlmCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfQ0NUWVBFCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9jZmVudiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL2NmZW52Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YzRmYWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9jZmVudgpAQCAtMCwwICsxLDUzIEBACisvLyBUUjEgY2ZlbnYgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvY2ZlbnYKKyAqICBUaGlzIGlzIGEgVFIxIEMrKyBMaWJyYXJ5IGhlYWRlci4gCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfQ0ZFTlYKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX0NGRU5WIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpZiBfR0xJQkNYWF9IQVZFX0ZFTlZfSAorIyBpbmNsdWRlIDxmZW52Lmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoX0dMSUJDWFhfSU5DTFVERV9BU19UUjEpCisjICBpbmNsdWRlIDx0cjFfaW1wbC9jZmVudj4KKyNlbHNlCisjICBkZWZpbmUgX0dMSUJDWFhfSU5DTFVERV9BU19UUjEKKyMgIGRlZmluZSBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxIG5hbWVzcGFjZSB0cjEgeworIyAgZGVmaW5lIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVFIxIH0KKyMgIGRlZmluZSBfR0xJQkNYWF9UUjEgdHIxOjoKKyMgIGluY2x1ZGUgPHRyMV9pbXBsL2NmZW52PgorIyAgdW5kZWYgX0dMSUJDWFhfVFIxCisjICB1bmRlZiBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorIyAgdW5kZWYgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMQorIyAgdW5kZWYgX0dMSUJDWFhfSU5DTFVERV9BU19UUjEKKyNlbmRpZgorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX0NGRU5WCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9jZmxvYXQgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9jZmxvYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAxY2ZjMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL2NmbG9hdApAQCAtMCwwICsxLDQyIEBACisvLyBUUjEgY2Zsb2F0IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL2NmbG9hdAorICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9DRkxPQVQKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX0NGTE9BVCAxCisKKyNpbmNsdWRlIDxjZmxvYXQ+CisKKyNpZm5kZWYgREVDSU1BTF9ESUcKKyNkZWZpbmUgREVDSU1BTF9ESUcgX19ERUNJTUFMX0RJR19fCisjZW5kaWYKKworI2lmbmRlZiBGTFRfRVZBTF9NRVRIT0QKKyNkZWZpbmUgRkxUX0VWQUxfTUVUSE9EIF9fRkxUX0VWQUxfTUVUSE9EX18KKyNlbmRpZgorCisjZW5kaWYgLy9fR0xJQkNYWF9UUjFfQ0ZMT0FUIApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvY2ludHR5cGVzIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvY2ludHR5cGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZmQ1NDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9jaW50dHlwZXMKQEAgLTAsMCArMSw2MyBAQAorLy8gVFIxIGNpbnR0eXBlcyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9jaW50dHlwZXMKKyAqICBUaGlzIGlzIGEgVFIxIEMrKyBMaWJyYXJ5IGhlYWRlci4gCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfQ0lOVFRZUEVTCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9DSU5UVFlQRVMgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDx0cjEvY3N0ZGludD4KKworLy8gRm9yIDguMTEuMS8xIChzZWUgQzk5LCBOb3RlIDE4NCkKKyNpZiBfR0xJQkNYWF9IQVZFX0lOVFRZUEVTX0gKKyMgaWZuZGVmIF9fU1REQ19GT1JNQVRfTUFDUk9TCisjICBkZWZpbmUgX1VOREVGX19TVERDX0ZPUk1BVF9NQUNST1MKKyMgIGRlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUworIyBlbmRpZgorIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgorIyBpZmRlZiBfVU5ERUZfX1NURENfRk9STUFUX01BQ1JPUworIyAgdW5kZWYgX19TVERDX0ZPUk1BVF9NQUNST1MKKyMgIHVuZGVmIF9VTkRFRl9fU1REQ19GT1JNQVRfTUFDUk9TCisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoX0dMSUJDWFhfSU5DTFVERV9BU19UUjEpCisjICBpbmNsdWRlIDx0cjFfaW1wbC9jaW50dHlwZXM+CisjZWxzZQorIyAgZGVmaW5lIF9HTElCQ1hYX0lOQ0xVREVfQVNfVFIxCisjICBkZWZpbmUgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMSBuYW1lc3BhY2UgdHIxIHsKKyMgIGRlZmluZSBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMSB9CisjICBkZWZpbmUgX0dMSUJDWFhfVFIxIHRyMTo6CisjICBpbmNsdWRlIDx0cjFfaW1wbC9jaW50dHlwZXM+CisjICB1bmRlZiBfR0xJQkNYWF9UUjEKKyMgIHVuZGVmIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVFIxCisjICB1bmRlZiBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxCisjICB1bmRlZiBfR0xJQkNYWF9JTkNMVURFX0FTX1RSMQorI2VuZGlmCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfQ0lOVFRZUEVTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9jbGltaXRzIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvY2xpbWl0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWFmOTZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvY2xpbWl0cwpAQCAtMCwwICsxLDQ2IEBACisvLyBUUjEgY2xpbWl0cyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9jbGltaXRzCisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX0NMSU1JVFMKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX0NMSU1JVFMgMQorCisjaW5jbHVkZSA8Y2xpbWl0cz4KKworI2lmbmRlZiBMTE9OR19NSU4KKyNkZWZpbmUgTExPTkdfTUlOICgtX19MT05HX0xPTkdfTUFYX18gLSAxKQorI2VuZGlmCisKKyNpZm5kZWYgTExPTkdfTUFYCisjZGVmaW5lIExMT05HX01BWCBfX0xPTkdfTE9OR19NQVhfXworI2VuZGlmCisKKyNpZm5kZWYgVUxMT05HX01BWAorI2RlZmluZSBVTExPTkdfTUFYIChfX0xPTkdfTE9OR19NQVhfXyAqIDJVTEwgKyAxKQorI2VuZGlmCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfQ0xJTUlUUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvY21hdGggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9jbWF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWZiZjJiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvY21hdGgKQEAgLTAsMCArMSw1MDcgQEAKKy8vIFRSMSBjbWF0aCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9jbWF0aAorICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9DTUFUSAorI2RlZmluZSBfR0xJQkNYWF9UUjFfQ01BVEggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpZiBkZWZpbmVkKF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgpCisjICBlcnJvciBUUjEgaGVhZGVyIGNhbm5vdCBiZSBpbmNsdWRlZCBmcm9tIEMrKzB4IGhlYWRlcgorI2VuZGlmCisKKyNpbmNsdWRlIDxjbWF0aD4KKworI2lmIGRlZmluZWQoX0dMSUJDWFhfSU5DTFVERV9BU19UUjEpCisjICBpbmNsdWRlIDx0cjFfaW1wbC9jbWF0aD4KKyNlbHNlCisjICBkZWZpbmUgX0dMSUJDWFhfSU5DTFVERV9BU19UUjEKKyMgIGRlZmluZSBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxIG5hbWVzcGFjZSB0cjEgeworIyAgZGVmaW5lIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVFIxIH0KKyMgIGRlZmluZSBfR0xJQkNYWF9UUjEgdHIxOjoKKyMgIGluY2x1ZGUgPHRyMV9pbXBsL2NtYXRoPgorIyAgdW5kZWYgX0dMSUJDWFhfVFIxCisjICB1bmRlZiBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorIyAgdW5kZWYgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMQorIyAgdW5kZWYgX0dMSUJDWFhfSU5DTFVERV9BU19UUjEKKyNlbmRpZgorCituYW1lc3BhY2Ugc3RkCit7CituYW1lc3BhY2UgdHIxCit7CisgIC8vIERSIDU1MC4gV2hhdCBzaG91bGQgdGhlIHJldHVybiB0eXBlIG9mIHBvdyhmbG9hdCxpbnQpIGJlPworICAvLyBOQjogQysrMHggYW5kIFRSMSAhPSBDKyswMy4KKyAgaW5saW5lIGRvdWJsZQorICBwb3coZG91YmxlIF9feCwgZG91YmxlIF9feSkKKyAgeyByZXR1cm4gc3RkOjpwb3coX194LCBfX3kpOyB9CisKKyAgaW5saW5lIGZsb2F0CisgIHBvdyhmbG9hdCBfX3gsIGZsb2F0IF9feSkKKyAgeyByZXR1cm4gc3RkOjpwb3coX194LCBfX3kpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIHBvdyhsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkKKyAgeyByZXR1cm4gc3RkOjpwb3coX194LCBfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGUKKyAgICBwb3coX1RwIF9feCwgX1VwIF9feSkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIHN0ZDo6cG93KF9fdHlwZShfX3gpLCBfX3R5cGUoX195KSk7CisgICAgfQorfQorfQorCisjaW5jbHVkZSA8Yml0cy9zdGxfYWxnb2Jhc2UuaD4KKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8dHIxL3R5cGVfdHJhaXRzPgorCisjaW5jbHVkZSA8dHIxL2dhbW1hLnRjYz4KKyNpbmNsdWRlIDx0cjEvYmVzc2VsX2Z1bmN0aW9uLnRjYz4KKyNpbmNsdWRlIDx0cjEvYmV0YV9mdW5jdGlvbi50Y2M+CisjaW5jbHVkZSA8dHIxL2VsbF9pbnRlZ3JhbC50Y2M+CisjaW5jbHVkZSA8dHIxL2V4cF9pbnRlZ3JhbC50Y2M+CisjaW5jbHVkZSA8dHIxL2h5cGVyZ2VvbWV0cmljLnRjYz4KKyNpbmNsdWRlIDx0cjEvbGVnZW5kcmVfZnVuY3Rpb24udGNjPgorI2luY2x1ZGUgPHRyMS9tb2RpZmllZF9iZXNzZWxfZnVuYy50Y2M+CisjaW5jbHVkZSA8dHIxL3BvbHlfaGVybWl0ZS50Y2M+CisjaW5jbHVkZSA8dHIxL3BvbHlfbGFndWVycmUudGNjPgorI2luY2x1ZGUgPHRyMS9yaWVtYW5uX3pldGEudGNjPgorCituYW1lc3BhY2Ugc3RkCit7CituYW1lc3BhY2UgdHIxCit7CisgIC8qKgorICAgKiBAZGVmZ3JvdXAgdHIxX21hdGhfc3BlY19mdW5jIE1hdGhlbWF0aWNhbCBTcGVjaWFsIEZ1bmN0aW9ucworICAgKiBAaW5ncm91cCBudW1lcmljcworICAgKgorICAgKiBBIGNvbGxlY3Rpb24gb2YgYWR2YW5jZWQgbWF0aGVtYXRpY2FsIHNwZWNpYWwgZnVuY3Rpb25zLgorICAgKiBAeworICAgKi8KKworICBpbmxpbmUgZmxvYXQKKyAgYXNzb2NfbGFndWVycmVmKHVuc2lnbmVkIGludCBfX24sIHVuc2lnbmVkIGludCBfX20sIGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fYXNzb2NfbGFndWVycmU8ZmxvYXQ+KF9fbiwgX19tLCBfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGFzc29jX2xhZ3VlcnJlbCh1bnNpZ25lZCBpbnQgX19uLCB1bnNpZ25lZCBpbnQgX19tLCBsb25nIGRvdWJsZSBfX3gpCisgIHsKKyAgICByZXR1cm4gX19kZXRhaWw6Ol9fYXNzb2NfbGFndWVycmU8bG9uZyBkb3VibGU+KF9fbiwgX19tLCBfX3gpOworICB9CisKKyAgLy8vICA1LjIuMS4xICBBc3NvY2lhdGVkIExhZ3VlcnJlIHBvbHlub21pYWxzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZQorICAgIGFzc29jX2xhZ3VlcnJlKHVuc2lnbmVkIGludCBfX24sIHVuc2lnbmVkIGludCBfX20sIF9UcCBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fZGV0YWlsOjpfX2Fzc29jX2xhZ3VlcnJlPF9fdHlwZT4oX19uLCBfX20sIF9feCk7CisgICAgfQorCisgIGlubGluZSBmbG9hdAorICBhc3NvY19sZWdlbmRyZWYodW5zaWduZWQgaW50IF9fbCwgdW5zaWduZWQgaW50IF9fbSwgZmxvYXQgX194KQorICB7IHJldHVybiBfX2RldGFpbDo6X19hc3NvY19sZWdlbmRyZV9wPGZsb2F0PihfX2wsIF9fbSwgX194KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBhc3NvY19sZWdlbmRyZWwodW5zaWduZWQgaW50IF9fbCwgdW5zaWduZWQgaW50IF9fbSwgbG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2RldGFpbDo6X19hc3NvY19sZWdlbmRyZV9wPGxvbmcgZG91YmxlPihfX2wsIF9fbSwgX194KTsgfQorCisgIC8vLyAgNS4yLjEuMiAgQXNzb2NpYXRlZCBMZWdlbmRyZSBmdW5jdGlvbnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlCisgICAgYXNzb2NfbGVnZW5kcmUodW5zaWduZWQgaW50IF9fbCwgdW5zaWduZWQgaW50IF9fbSwgX1RwIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19kZXRhaWw6Ol9fYXNzb2NfbGVnZW5kcmVfcDxfX3R5cGU+KF9fbCwgX19tLCBfX3gpOworICAgIH0KKworICBpbmxpbmUgZmxvYXQKKyAgYmV0YWYoZmxvYXQgX194LCBmbG9hdCBfX3kpCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX2JldGE8ZmxvYXQ+KF9feCwgX195KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBiZXRhbChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fYmV0YTxsb25nIGRvdWJsZT4oX194LCBfX3kpOyB9CisKKyAgLy8vICA1LjIuMS4zICBCZXRhIGZ1bmN0aW9ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RweCwgdHlwZW5hbWUgX1RweT4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHB4LCBfVHB5Pjo6X190eXBlCisgICAgYmV0YShfVHB4IF9feCwgX1RweSBfX3kpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcHgsIF9UcHk+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fZGV0YWlsOjpfX2JldGE8X190eXBlPihfX3gsIF9feSk7CisgICAgfQorCisgIGlubGluZSBmbG9hdAorICBjb21wX2VsbGludF8xZihmbG9hdCBfX2spCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX2NvbXBfZWxsaW50XzE8ZmxvYXQ+KF9fayk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgY29tcF9lbGxpbnRfMWwobG9uZyBkb3VibGUgX19rKQorICB7IHJldHVybiBfX2RldGFpbDo6X19jb21wX2VsbGludF8xPGxvbmcgZG91YmxlPihfX2spOyB9CisKKyAgLy8vICA1LjIuMS40ICBDb21wbGV0ZSBlbGxpcHRpYyBpbnRlZ3JhbHMgb2YgdGhlIGZpcnN0IGtpbmQuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlCisgICAgY29tcF9lbGxpbnRfMShfVHAgX19rKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBfX2RldGFpbDo6X19jb21wX2VsbGludF8xPF9fdHlwZT4oX19rKTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIGNvbXBfZWxsaW50XzJmKGZsb2F0IF9faykKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fY29tcF9lbGxpbnRfMjxmbG9hdD4oX19rKTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBjb21wX2VsbGludF8ybChsb25nIGRvdWJsZSBfX2spCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX2NvbXBfZWxsaW50XzI8bG9uZyBkb3VibGU+KF9fayk7IH0KKworICAvLy8gIDUuMi4xLjUgIENvbXBsZXRlIGVsbGlwdGljIGludGVncmFscyBvZiB0aGUgc2Vjb25kIGtpbmQuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlCisgICAgY29tcF9lbGxpbnRfMihfVHAgX19rKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBfX2RldGFpbDo6X19jb21wX2VsbGludF8yPF9fdHlwZT4oX19rKTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIGNvbXBfZWxsaW50XzNmKGZsb2F0IF9faywgZmxvYXQgX19udSkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fY29tcF9lbGxpbnRfMzxmbG9hdD4oX19rLCBfX251KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBjb21wX2VsbGludF8zbChsb25nIGRvdWJsZSBfX2ssIGxvbmcgZG91YmxlIF9fbnUpCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX2NvbXBfZWxsaW50XzM8bG9uZyBkb3VibGU+KF9faywgX19udSk7IH0KKworICAvLy8gIDUuMi4xLjYgIENvbXBsZXRlIGVsbGlwdGljIGludGVncmFscyBvZiB0aGUgdGhpcmQga2luZC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHBuPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1Rwbj46Ol9fdHlwZQorICAgIGNvbXBfZWxsaW50XzMoX1RwIF9faywgX1RwbiBfX251KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9UcG4+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fZGV0YWlsOjpfX2NvbXBfZWxsaW50XzM8X190eXBlPihfX2ssIF9fbnUpOworICAgIH0KKworICBpbmxpbmUgZmxvYXQKKyAgY29uZl9oeXBlcmdmKGZsb2F0IF9fYSwgZmxvYXQgX19jLCBmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX2NvbmZfaHlwZXJnPGZsb2F0PihfX2EsIF9fYywgX194KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBjb25mX2h5cGVyZ2wobG9uZyBkb3VibGUgX19hLCBsb25nIGRvdWJsZSBfX2MsIGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fY29uZl9oeXBlcmc8bG9uZyBkb3VibGU+KF9fYSwgX19jLCBfX3gpOyB9CisKKyAgLy8vICA1LjIuMS43ICBDb25mbHVlbnQgaHlwZXJnZW9tZXRyaWMgZnVuY3Rpb25zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHBhLCB0eXBlbmFtZSBfVHBjLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzM8X1RwYSwgX1RwYywgX1RwPjo6X190eXBlCisgICAgY29uZl9oeXBlcmcoX1RwYSBfX2EsIF9UcGMgX19jLCBfVHAgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMzxfVHBhLCBfVHBjLCBfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fZGV0YWlsOjpfX2NvbmZfaHlwZXJnPF9fdHlwZT4oX19hLCBfX2MsIF9feCk7CisgICAgfQorCisgIGlubGluZSBmbG9hdAorICBjeWxfYmVzc2VsX2lmKGZsb2F0IF9fbnUsIGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fY3lsX2Jlc3NlbF9pPGZsb2F0PihfX251LCBfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGN5bF9iZXNzZWxfaWwobG9uZyBkb3VibGUgX19udSwgbG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2RldGFpbDo6X19jeWxfYmVzc2VsX2k8bG9uZyBkb3VibGU+KF9fbnUsIF9feCk7IH0KKworICAvLy8gIDUuMi4xLjggIFJlZ3VsYXIgbW9kaWZpZWQgY3lsaW5kcmljYWwgQmVzc2VsIGZ1bmN0aW9ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwbnUsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHBudSwgX1RwPjo6X190eXBlCisgICAgY3lsX2Jlc3NlbF9pKF9UcG51IF9fbnUsIF9UcCBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcG51LCBfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fZGV0YWlsOjpfX2N5bF9iZXNzZWxfaTxfX3R5cGU+KF9fbnUsIF9feCk7CisgICAgfQorCisgIGlubGluZSBmbG9hdAorICBjeWxfYmVzc2VsX2pmKGZsb2F0IF9fbnUsIGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fY3lsX2Jlc3NlbF9qPGZsb2F0PihfX251LCBfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGN5bF9iZXNzZWxfamwobG9uZyBkb3VibGUgX19udSwgbG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2RldGFpbDo6X19jeWxfYmVzc2VsX2o8bG9uZyBkb3VibGU+KF9fbnUsIF9feCk7IH0KKworICAvLy8gIDUuMi4xLjkgIEN5bGluZHJpY2FsIEJlc3NlbCBmdW5jdGlvbnMgKG9mIHRoZSBmaXJzdCBraW5kKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwbnUsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHBudSwgX1RwPjo6X190eXBlCisgICAgY3lsX2Jlc3NlbF9qKF9UcG51IF9fbnUsIF9UcCBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcG51LCBfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fZGV0YWlsOjpfX2N5bF9iZXNzZWxfajxfX3R5cGU+KF9fbnUsIF9feCk7CisgICAgfQorCisgIGlubGluZSBmbG9hdAorICBjeWxfYmVzc2VsX2tmKGZsb2F0IF9fbnUsIGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fY3lsX2Jlc3NlbF9rPGZsb2F0PihfX251LCBfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGN5bF9iZXNzZWxfa2wobG9uZyBkb3VibGUgX19udSwgbG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2RldGFpbDo6X19jeWxfYmVzc2VsX2s8bG9uZyBkb3VibGU+KF9fbnUsIF9feCk7IH0KKworICAvLy8gIDUuMi4xLjEwICBJcnJlZ3VsYXIgbW9kaWZpZWQgY3lsaW5kcmljYWwgQmVzc2VsIGZ1bmN0aW9ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwbnUsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHBudSwgX1RwPjo6X190eXBlCisgICAgY3lsX2Jlc3NlbF9rKF9UcG51IF9fbnUsIF9UcCBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcG51LCBfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fZGV0YWlsOjpfX2N5bF9iZXNzZWxfazxfX3R5cGU+KF9fbnUsIF9feCk7CisgICAgfQorCisgIGlubGluZSBmbG9hdAorICBjeWxfbmV1bWFubmYoZmxvYXQgX19udSwgZmxvYXQgX194KQorICB7IHJldHVybiBfX2RldGFpbDo6X19jeWxfbmV1bWFubl9uPGZsb2F0PihfX251LCBfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGN5bF9uZXVtYW5ubChsb25nIGRvdWJsZSBfX251LCBsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX2N5bF9uZXVtYW5uX248bG9uZyBkb3VibGU+KF9fbnUsIF9feCk7IH0KKworICAvLy8gIDUuMi4xLjExICBDeWxpbmRyaWNhbCBOZXVtYW5uIGZ1bmN0aW9ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwbnUsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHBudSwgX1RwPjo6X190eXBlCisgICAgY3lsX25ldW1hbm4oX1RwbnUgX19udSwgX1RwIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwbnUsIF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19kZXRhaWw6Ol9fY3lsX25ldW1hbm5fbjxfX3R5cGU+KF9fbnUsIF9feCk7CisgICAgfQorCisgIGlubGluZSBmbG9hdAorICBlbGxpbnRfMWYoZmxvYXQgX19rLCBmbG9hdCBfX3BoaSkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fZWxsaW50XzE8ZmxvYXQ+KF9faywgX19waGkpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGVsbGludF8xbChsb25nIGRvdWJsZSBfX2ssIGxvbmcgZG91YmxlIF9fcGhpKQorICB7IHJldHVybiBfX2RldGFpbDo6X19lbGxpbnRfMTxsb25nIGRvdWJsZT4oX19rLCBfX3BoaSk7IH0KKworICAvLy8gIDUuMi4xLjEyICBJbmNvbXBsZXRlIGVsbGlwdGljIGludGVncmFscyBvZiB0aGUgZmlyc3Qga2luZC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHBwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1RwcD46Ol9fdHlwZQorICAgIGVsbGludF8xKF9UcCBfX2ssIF9UcHAgX19waGkpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1RwcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19kZXRhaWw6Ol9fZWxsaW50XzE8X190eXBlPihfX2ssIF9fcGhpKTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIGVsbGludF8yZihmbG9hdCBfX2ssIGZsb2F0IF9fcGhpKQorICB7IHJldHVybiBfX2RldGFpbDo6X19lbGxpbnRfMjxmbG9hdD4oX19rLCBfX3BoaSk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgZWxsaW50XzJsKGxvbmcgZG91YmxlIF9faywgbG9uZyBkb3VibGUgX19waGkpCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX2VsbGludF8yPGxvbmcgZG91YmxlPihfX2ssIF9fcGhpKTsgfQorCisgIC8vLyAgNS4yLjEuMTMgIEluY29tcGxldGUgZWxsaXB0aWMgaW50ZWdyYWxzIG9mIHRoZSBzZWNvbmQga2luZC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHBwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1RwcD46Ol9fdHlwZQorICAgIGVsbGludF8yKF9UcCBfX2ssIF9UcHAgX19waGkpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1RwcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19kZXRhaWw6Ol9fZWxsaW50XzI8X190eXBlPihfX2ssIF9fcGhpKTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIGVsbGludF8zZihmbG9hdCBfX2ssIGZsb2F0IF9fbnUsIGZsb2F0IF9fcGhpKQorICB7IHJldHVybiBfX2RldGFpbDo6X19lbGxpbnRfMzxmbG9hdD4oX19rLCBfX251LCBfX3BoaSk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgZWxsaW50XzNsKGxvbmcgZG91YmxlIF9faywgbG9uZyBkb3VibGUgX19udSwgbG9uZyBkb3VibGUgX19waGkpCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX2VsbGludF8zPGxvbmcgZG91YmxlPihfX2ssIF9fbnUsIF9fcGhpKTsgfQorCisgIC8vLyAgNS4yLjEuMTQgIEluY29tcGxldGUgZWxsaXB0aWMgaW50ZWdyYWxzIG9mIHRoZSB0aGlyZCBraW5kLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcG4sIHR5cGVuYW1lIF9UcHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzM8X1RwLCBfVHBuLCBfVHBwPjo6X190eXBlCisgICAgZWxsaW50XzMoX1RwIF9faywgX1RwbiBfX251LCBfVHBwIF9fcGhpKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMzxfVHAsIF9UcG4sIF9UcHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fZGV0YWlsOjpfX2VsbGludF8zPF9fdHlwZT4oX19rLCBfX251LCBfX3BoaSk7CisgICAgfQorCisgIGlubGluZSBmbG9hdAorICBleHBpbnRmKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fZXhwaW50PGZsb2F0PihfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGV4cGludGwobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2RldGFpbDo6X19leHBpbnQ8bG9uZyBkb3VibGU+KF9feCk7IH0KKworICAvLy8gIDUuMi4xLjE1ICBFeHBvbmVudGlhbCBpbnRlZ3JhbHMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlCisgICAgZXhwaW50KF9UcCBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fZGV0YWlsOjpfX2V4cGludDxfX3R5cGU+KF9feCk7CisgICAgfQorCisgIGlubGluZSBmbG9hdAorICBoZXJtaXRlZih1bnNpZ25lZCBpbnQgX19uLCBmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX3BvbHlfaGVybWl0ZTxmbG9hdD4oX19uLCBfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGhlcm1pdGVsKHVuc2lnbmVkIGludCBfX24sIGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fcG9seV9oZXJtaXRlPGxvbmcgZG91YmxlPihfX24sIF9feCk7IH0KKworICAvLy8gIDUuMi4xLjE2ICBIZXJtaXRlIHBvbHlub21pYWxzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZQorICAgIGhlcm1pdGUodW5zaWduZWQgaW50IF9fbiwgX1RwIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19kZXRhaWw6Ol9fcG9seV9oZXJtaXRlPF9fdHlwZT4oX19uLCBfX3gpOworICAgIH0KKworICBpbmxpbmUgZmxvYXQKKyAgaHlwZXJnZihmbG9hdCBfX2EsIGZsb2F0IF9fYiwgZmxvYXQgX19jLCBmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX2h5cGVyZzxmbG9hdD4oX19hLCBfX2IsIF9fYywgX194KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBoeXBlcmdsKGxvbmcgZG91YmxlIF9fYSwgbG9uZyBkb3VibGUgX19iLCBsb25nIGRvdWJsZSBfX2MsIGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9faHlwZXJnPGxvbmcgZG91YmxlPihfX2EsIF9fYiwgX19jLCBfX3gpOyB9CisKKyAgLy8vICA1LjIuMS4xNyAgSHlwZXJnZW9tZXRyaWMgZnVuY3Rpb25zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHBhLCB0eXBlbmFtZSBfVHBiLCB0eXBlbmFtZSBfVHBjLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzQ8X1RwYSwgX1RwYiwgX1RwYywgX1RwPjo6X190eXBlCisgICAgaHlwZXJnKF9UcGEgX19hLCBfVHBiIF9fYiwgX1RwYyBfX2MsIF9UcCBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV80PF9UcGEsIF9UcGIsIF9UcGMsIF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19kZXRhaWw6Ol9faHlwZXJnPF9fdHlwZT4oX19hLCBfX2IsIF9fYywgX194KTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIGxhZ3VlcnJlZih1bnNpZ25lZCBpbnQgX19uLCBmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX2xhZ3VlcnJlPGZsb2F0PihfX24sIF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgbGFndWVycmVsKHVuc2lnbmVkIGludCBfX24sIGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fbGFndWVycmU8bG9uZyBkb3VibGU+KF9fbiwgX194KTsgfQorCisgIC8vLyAgNS4yLjEuMTggIExhZ3VlcnJlIHBvbHlub21pYWxzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZQorICAgIGxhZ3VlcnJlKHVuc2lnbmVkIGludCBfX24sIF9UcCBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fZGV0YWlsOjpfX2xhZ3VlcnJlPF9fdHlwZT4oX19uLCBfX3gpOworICAgIH0KKworICBpbmxpbmUgZmxvYXQKKyAgbGVnZW5kcmVmKHVuc2lnbmVkIGludCBfX24sIGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fcG9seV9sZWdlbmRyZV9wPGZsb2F0PihfX24sIF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgbGVnZW5kcmVsKHVuc2lnbmVkIGludCBfX24sIGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fcG9seV9sZWdlbmRyZV9wPGxvbmcgZG91YmxlPihfX24sIF9feCk7IH0KKworICAvLy8gIDUuMi4xLjE5ICBMZWdlbmRyZSBwb2x5bm9taWFscy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUKKyAgICBsZWdlbmRyZSh1bnNpZ25lZCBpbnQgX19uLCBfVHAgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBfX2RldGFpbDo6X19wb2x5X2xlZ2VuZHJlX3A8X190eXBlPihfX24sIF9feCk7CisgICAgfQorCisgIGlubGluZSBmbG9hdAorICByaWVtYW5uX3pldGFmKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fcmllbWFubl96ZXRhPGZsb2F0PihfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIHJpZW1hbm5femV0YWwobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2RldGFpbDo6X19yaWVtYW5uX3pldGE8bG9uZyBkb3VibGU+KF9feCk7IH0KKworICAvLy8gIDUuMi4xLjIwICBSaWVtYW5uIHpldGEgZnVuY3Rpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlCisgICAgcmllbWFubl96ZXRhKF9UcCBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fZGV0YWlsOjpfX3JpZW1hbm5femV0YTxfX3R5cGU+KF9feCk7CisgICAgfQorCisgIGlubGluZSBmbG9hdAorICBzcGhfYmVzc2VsZih1bnNpZ25lZCBpbnQgX19uLCBmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX3NwaF9iZXNzZWw8ZmxvYXQ+KF9fbiwgX194KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBzcGhfYmVzc2VsbCh1bnNpZ25lZCBpbnQgX19uLCBsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX3NwaF9iZXNzZWw8bG9uZyBkb3VibGU+KF9fbiwgX194KTsgfQorCisgIC8vLyAgNS4yLjEuMjEgIFNwaGVyaWNhbCBCZXNzZWwgZnVuY3Rpb25zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZQorICAgIHNwaF9iZXNzZWwodW5zaWduZWQgaW50IF9fbiwgX1RwIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19kZXRhaWw6Ol9fc3BoX2Jlc3NlbDxfX3R5cGU+KF9fbiwgX194KTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIHNwaF9sZWdlbmRyZWYodW5zaWduZWQgaW50IF9fbCwgdW5zaWduZWQgaW50IF9fbSwgZmxvYXQgX190aGV0YSkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fc3BoX2xlZ2VuZHJlPGZsb2F0PihfX2wsIF9fbSwgX190aGV0YSk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgc3BoX2xlZ2VuZHJlbCh1bnNpZ25lZCBpbnQgX19sLCB1bnNpZ25lZCBpbnQgX19tLCBsb25nIGRvdWJsZSBfX3RoZXRhKQorICB7IHJldHVybiBfX2RldGFpbDo6X19zcGhfbGVnZW5kcmU8bG9uZyBkb3VibGU+KF9fbCwgX19tLCBfX3RoZXRhKTsgfQorCisgIC8vLyAgNS4yLjEuMjIgIFNwaGVyaWNhbCBhc3NvY2lhdGVkIExlZ2VuZHJlIGZ1bmN0aW9ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUKKyAgICBzcGhfbGVnZW5kcmUodW5zaWduZWQgaW50IF9fbCwgdW5zaWduZWQgaW50IF9fbSwgX1RwIF9fdGhldGEpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fZGV0YWlsOjpfX3NwaF9sZWdlbmRyZTxfX3R5cGU+KF9fbCwgX19tLCBfX3RoZXRhKTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIHNwaF9uZXVtYW5uZih1bnNpZ25lZCBpbnQgX19uLCBmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX3NwaF9uZXVtYW5uPGZsb2F0PihfX24sIF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgc3BoX25ldW1hbm5sKHVuc2lnbmVkIGludCBfX24sIGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fc3BoX25ldW1hbm48bG9uZyBkb3VibGU+KF9fbiwgX194KTsgfQorCisgIC8vLyAgNS4yLjEuMjMgIFNwaGVyaWNhbCBOZXVtYW5uIGZ1bmN0aW9ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUKKyAgICBzcGhfbmV1bWFubih1bnNpZ25lZCBpbnQgX19uLCBfVHAgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBfX2RldGFpbDo6X19zcGhfbmV1bWFubjxfX3R5cGU+KF9fbiwgX194KTsKKyAgICB9CisKKyAgLyogQH0gKi8gLy8gdHIxX21hdGhfc3BlY19mdW5jCit9Cit9CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfQ01BVEgKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL2NvbXBsZXggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9jb21wbGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MzExMmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9jb21wbGV4CkBAIC0wLDAgKzEsMTAxIEBACisvLyBUUjEgY29tcGxleCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9jb21wbGV4CisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX0NPTVBMRVgKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX0NPTVBMRVggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpZiBkZWZpbmVkKF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgpCisjICBlcnJvciBUUjEgaGVhZGVyIGNhbm5vdCBiZSBpbmNsdWRlZCBmcm9tIEMrKzB4IGhlYWRlcgorI2VuZGlmCisKKyNpbmNsdWRlIDxjb21wbGV4PgorCisjaWYgZGVmaW5lZChfR0xJQkNYWF9JTkNMVURFX0FTX1RSMSkKKyMgIGluY2x1ZGUgPHRyMV9pbXBsL2NvbXBsZXg+CisjZWxzZQorIyAgZGVmaW5lIF9HTElCQ1hYX0lOQ0xVREVfQVNfVFIxCisjICBkZWZpbmUgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMSBuYW1lc3BhY2UgdHIxIHsKKyMgIGRlZmluZSBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMSB9CisjICBkZWZpbmUgX0dMSUJDWFhfVFIxIHRyMTo6CisjICBpbmNsdWRlIDx0cjFfaW1wbC9jb21wbGV4PgorIyAgdW5kZWYgX0dMSUJDWFhfVFIxCisjICB1bmRlZiBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorIyAgdW5kZWYgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMQorIyAgdW5kZWYgX0dMSUJDWFhfSU5DTFVERV9BU19UUjEKKyNlbmRpZgorCituYW1lc3BhY2Ugc3RkCit7CituYW1lc3BhY2UgdHIxCit7CisgIHVzaW5nIHN0ZDo6YXJnOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBjb25qKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gc3RkOjpjb25qKF9feik7IH0gIAorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZT4KKyAgICBjb25qKF9UcCBfX3gpCisgICAgeyByZXR1cm4gX194OyB9CisKKyAgdXNpbmcgc3RkOjppbWFnOworICB1c2luZyBzdGQ6Om5vcm07CisgIHVzaW5nIHN0ZDo6cG9sYXI7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgaW5saW5lIHN0ZDo6Y29tcGxleDx0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlPgorICAgIHBvbGFyKGNvbnN0IF9UcCYgX19yaG8sIGNvbnN0IF9VcCYgX190aGV0YSkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIHN0ZDo6cG9sYXIoX190eXBlKF9fcmhvKSwgX190eXBlKF9fdGhldGEpKTsKKyAgICB9CisKKyAgdXNpbmcgc3RkOjpyZWFsOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBwb3coY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgX1RwJiBfX3kpCisgICAgeyByZXR1cm4gc3RkOjpwb3coX194LCBfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIHBvdyhjb25zdCBfVHAmIF9feCwgY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mIF9feSkKKyAgICB7IHJldHVybiBzdGQ6OnBvdyhfX3gsIF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHN0ZDo6Y29tcGxleDxfVHA+CisgICAgcG93KGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3kpCisgICAgeyByZXR1cm4gc3RkOjpwb3coX194LCBfX3kpOyB9Cit9Cit9CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfQ09NUExFWApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvY29tcGxleC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvY29tcGxleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMjg4MTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9jb21wbGV4LmgKQEAgLTAsMCArMSwzNCBAQAorLy8gVFIxIGNvbXBsZXguaCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9jb21wbGV4LmgKKyAqICBUaGlzIGlzIGEgVFIxIEMrKyBMaWJyYXJ5IGhlYWRlci4gCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfQ09NUExFWF9ICisjZGVmaW5lIF9HTElCQ1hYX1RSMV9DT01QTEVYX0ggMQorCisjaW5jbHVkZSA8dHIxL2Njb21wbGV4PgorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX0NPTVBMRVhfSApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvY3N0ZGFyZyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL2NzdGRhcmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMyZTg4MQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL2NzdGRhcmcKQEAgLTAsMCArMSwzNCBAQAorLy8gVFIxIGNzdGRhcmcgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvY3N0ZGFyZworICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9DU1REQVJHCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9DU1REQVJHIDEKKworI2luY2x1ZGUgPGNzdGRhcmc+CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfQ1NUREFSRwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvY3N0ZGJvb2wgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9jc3RkYm9vbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjhlNGI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvY3N0ZGJvb2wKQEAgLTAsMCArMSw0MCBAQAorLy8gVFIxIGNzdGRib29sIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL2NzdGRib29sCisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX0NTVERCT09MCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9DU1REQk9PTCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisKKyNpZiBfR0xJQkNYWF9IQVZFX1NUREJPT0xfSAorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNlbmRpZgorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX0NTVERCT09MCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9jc3RkaW50IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvY3N0ZGludApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTZjYzM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvY3N0ZGludApAQCAtMCwwICsxLDc2IEBACisvLyBUUjEgY3N0ZGludCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9jc3RkaW50CisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX0NTVERJTlQKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX0NTVERJTlQgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpZiBkZWZpbmVkKF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgpCisjICBlcnJvciBUUjEgaGVhZGVyIGNhbm5vdCBiZSBpbmNsdWRlZCBmcm9tIEMrKzB4IGhlYWRlcgorI2VuZGlmCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorCisvLyBGb3IgOC4yMi4xLzEgKHNlZSBDOTksIE5vdGVzIDIxOSwgMjIwLCAyMjIpCisjIGlmIF9HTElCQ1hYX0hBVkVfU1RESU5UX0gKKyMgIGlmbmRlZiBfX1NURENfTElNSVRfTUFDUk9TCisjICAgZGVmaW5lIF9VTkRFRl9fU1REQ19MSU1JVF9NQUNST1MKKyMgICBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUworIyAgZW5kaWYKKyMgIGlmbmRlZiBfX1NURENfQ09OU1RBTlRfTUFDUk9TCisjICAgZGVmaW5lIF9VTkRFRl9fU1REQ19DT05TVEFOVF9NQUNST1MKKyMgICBkZWZpbmUgX19TVERDX0NPTlNUQU5UX01BQ1JPUworIyAgZW5kaWYKKyMgIGluY2x1ZGUgPHN0ZGludC5oPgorIyAgaWZkZWYgX1VOREVGX19TVERDX0xJTUlUX01BQ1JPUworIyAgIHVuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKKyMgICB1bmRlZiBfVU5ERUZfX1NURENfTElNSVRfTUFDUk9TCisjICBlbmRpZgorIyAgaWZkZWYgX1VOREVGX19TVERDX0NPTlNUQU5UX01BQ1JPUworIyAgIHVuZGVmIF9fU1REQ19DT05TVEFOVF9NQUNST1MKKyMgICB1bmRlZiBfVU5ERUZfX1NURENfQ09OU1RBTlRfTUFDUk9TCisjICBlbmRpZgorIyBlbmRpZgorCisjaWYgZGVmaW5lZChfR0xJQkNYWF9JTkNMVURFX0FTX1RSMSkKKyMgIGluY2x1ZGUgPHRyMV9pbXBsL2NzdGRpbnQ+CisjZWxzZQorIyAgZGVmaW5lIF9HTElCQ1hYX0lOQ0xVREVfQVNfVFIxCisjICBkZWZpbmUgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMSBuYW1lc3BhY2UgdHIxIHsKKyMgIGRlZmluZSBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMSB9CisjICBkZWZpbmUgX0dMSUJDWFhfVFIxIHRyMTo6CisjICBpbmNsdWRlIDx0cjFfaW1wbC9jc3RkaW50PgorIyAgdW5kZWYgX0dMSUJDWFhfVFIxCisjICB1bmRlZiBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorIyAgdW5kZWYgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMQorIyAgdW5kZWYgX0dMSUJDWFhfSU5DTFVERV9BU19UUjEKKyNlbmRpZgorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX0NTVERJTlQKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvY3N0ZGlvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvY3N0ZGlvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmY2YzMWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9jc3RkaW8KQEAgLTAsMCArMSw1NCBAQAorLy8gVFIxIGNzdGRpbyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9jc3RkaW8KKyAqICBUaGlzIGlzIGEgVFIxIEMrKyBMaWJyYXJ5IGhlYWRlci4gCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfQ1NURElPCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9DU1RESU8gMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpZiBkZWZpbmVkKF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgpCisjICBlcnJvciBUUjEgaGVhZGVyIGNhbm5vdCBiZSBpbmNsdWRlZCBmcm9tIEMrKzB4IGhlYWRlcgorI2VuZGlmCisKKyNpbmNsdWRlIDxjc3RkaW8+CisKKyNpZiBkZWZpbmVkKF9HTElCQ1hYX0lOQ0xVREVfQVNfVFIxKQorIyAgaW5jbHVkZSA8dHIxX2ltcGwvY3N0ZGlvPgorI2Vsc2UKKyMgIGRlZmluZSBfR0xJQkNYWF9JTkNMVURFX0FTX1RSMQorIyAgZGVmaW5lIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9UUjEgbmFtZXNwYWNlIHRyMSB7CisjICBkZWZpbmUgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9UUjEgfQorIyAgZGVmaW5lIF9HTElCQ1hYX1RSMSB0cjE6OgorIyAgaW5jbHVkZSA8dHIxX2ltcGwvY3N0ZGlvPgorIyAgdW5kZWYgX0dMSUJDWFhfVFIxCisjICB1bmRlZiBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorIyAgdW5kZWYgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMQorIyAgdW5kZWYgX0dMSUJDWFhfSU5DTFVERV9BU19UUjEKKyNlbmRpZgorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX0NTVERJTwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvY3N0ZGxpYiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL2NzdGRsaWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlmYWIyMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL2NzdGRsaWIKQEAgLTAsMCArMSw1NCBAQAorLy8gVFIxIGNzdGRsaWIgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvY3N0ZGxpYgorICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9DU1RETElCCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9DU1RETElCIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaWYgZGVmaW5lZChfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYKQorIyAgZXJyb3IgVFIxIGhlYWRlciBjYW5ub3QgYmUgaW5jbHVkZWQgZnJvbSBDKysweCBoZWFkZXIKKyNlbmRpZgorCisjaW5jbHVkZSA8Y3N0ZGxpYj4KKworI2lmIGRlZmluZWQoX0dMSUJDWFhfSU5DTFVERV9BU19UUjEpCisjICBpbmNsdWRlIDx0cjFfaW1wbC9jc3RkbGliPgorI2Vsc2UKKyMgIGRlZmluZSBfR0xJQkNYWF9JTkNMVURFX0FTX1RSMQorIyAgZGVmaW5lIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9UUjEgbmFtZXNwYWNlIHRyMSB7CisjICBkZWZpbmUgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9UUjEgfQorIyAgZGVmaW5lIF9HTElCQ1hYX1RSMSB0cjE6OgorIyAgaW5jbHVkZSA8dHIxX2ltcGwvY3N0ZGxpYj4KKyMgIHVuZGVmIF9HTElCQ1hYX1RSMQorIyAgdW5kZWYgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9UUjEKKyMgIHVuZGVmIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9UUjEKKyMgIHVuZGVmIF9HTElCQ1hYX0lOQ0xVREVfQVNfVFIxCisjZW5kaWYKKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9DU1RETElCCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9jdGdtYXRoIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvY3RnbWF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODJhOWExCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvY3RnbWF0aApAQCAtMCwwICsxLDM0IEBACisvLyBUUjEgY3RnbWF0aCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9jdGdtYXRoCisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX0NUR01BVEgKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX0NUR01BVEggMQorCisjaW5jbHVkZSA8dHIxL2NtYXRoPgorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX0NUR01BVEgKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL2N0aW1lIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvY3RpbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY3NjMzNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL2N0aW1lCkBAIC0wLDAgKzEsMzQgQEAKKy8vIFRSMSBjdGltZSAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9jdGltZQorICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9DVElNRQorI2RlZmluZSBfR0xJQkNYWF9UUjFfQ1RJTUUgMQorCisjaW5jbHVkZSA8Y3RpbWU+CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfQ1RJTUUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL2N0eXBlLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9jdHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMmJlZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9jdHlwZS5oCkBAIC0wLDAgKzEsMzQgQEAKKy8vIFRSMSBjdHlwZS5oIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL2N0eXBlLmgKKyAqICBUaGlzIGlzIGEgVFIxIEMrKyBMaWJyYXJ5IGhlYWRlci4gCisgKi8KKworI2lmbmRlZiBfVFIxX0NUWVBFX0gKKyNkZWZpbmUgX1RSMV9DVFlQRV9IIDEKKworI2luY2x1ZGUgPHRyMS9jY3R5cGU+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvY3djaGFyIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvY3djaGFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyN2ViYzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9jd2NoYXIKQEAgLTAsMCArMSw1NCBAQAorLy8gVFIxIGN3Y2hhciAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9jd2NoYXIKKyAqICBUaGlzIGlzIGEgVFIxIEMrKyBMaWJyYXJ5IGhlYWRlci4gCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfQ1dDSEFSCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9DV0NIQVIgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpZiBkZWZpbmVkKF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgpCisjICBlcnJvciBUUjEgaGVhZGVyIGNhbm5vdCBiZSBpbmNsdWRlZCBmcm9tIEMrKzB4IGhlYWRlcgorI2VuZGlmCisKKyNpbmNsdWRlIDxjd2NoYXI+CisKKyNpZiBkZWZpbmVkKF9HTElCQ1hYX0lOQ0xVREVfQVNfVFIxKQorIyAgaW5jbHVkZSA8dHIxX2ltcGwvY3djaGFyPgorI2Vsc2UKKyMgIGRlZmluZSBfR0xJQkNYWF9JTkNMVURFX0FTX1RSMQorIyAgZGVmaW5lIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9UUjEgbmFtZXNwYWNlIHRyMSB7CisjICBkZWZpbmUgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9UUjEgfQorIyAgZGVmaW5lIF9HTElCQ1hYX1RSMSB0cjE6OgorIyAgaW5jbHVkZSA8dHIxX2ltcGwvY3djaGFyPgorIyAgdW5kZWYgX0dMSUJDWFhfVFIxCisjICB1bmRlZiBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorIyAgdW5kZWYgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMQorIyAgdW5kZWYgX0dMSUJDWFhfSU5DTFVERV9BU19UUjEKKyNlbmRpZgorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX0NXQ0hBUgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvY3djdHlwZSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL2N3Y3R5cGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdjYmIxNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL2N3Y3R5cGUKQEAgLTAsMCArMSw1NCBAQAorLy8gVFIxIGN3Y3R5cGUgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvY3djdHlwZQorICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9DV0NUWVBFCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9DV0NUWVBFIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaWYgZGVmaW5lZChfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYKQorIyAgZXJyb3IgVFIxIGhlYWRlciBjYW5ub3QgYmUgaW5jbHVkZWQgZnJvbSBDKysweCBoZWFkZXIKKyNlbmRpZgorCisjaW5jbHVkZSA8Y3djdHlwZT4KKworI2lmIGRlZmluZWQoX0dMSUJDWFhfSU5DTFVERV9BU19UUjEpCisjICBpbmNsdWRlIDx0cjFfaW1wbC9jd2N0eXBlPgorI2Vsc2UKKyMgIGRlZmluZSBfR0xJQkNYWF9JTkNMVURFX0FTX1RSMQorIyAgZGVmaW5lIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9UUjEgbmFtZXNwYWNlIHRyMSB7CisjICBkZWZpbmUgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9UUjEgfQorIyAgZGVmaW5lIF9HTElCQ1hYX1RSMSB0cjE6OgorIyAgaW5jbHVkZSA8dHIxX2ltcGwvY3djdHlwZT4KKyMgIHVuZGVmIF9HTElCQ1hYX1RSMQorIyAgdW5kZWYgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9UUjEKKyMgIHVuZGVmIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9UUjEKKyMgIHVuZGVmIF9HTElCQ1hYX0lOQ0xVREVfQVNfVFIxCisjZW5kaWYKKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9DV0NUWVBFCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9lbGxfaW50ZWdyYWwudGNjIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvZWxsX2ludGVncmFsLnRjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWJkYTlhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvZWxsX2ludGVncmFsLnRjYwpAQCAtMCwwICsxLDc1MCBAQAorLy8gU3BlY2lhbCBmdW5jdGlvbnMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorLy8KKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisvLworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9lbGxfaW50ZWdyYWwudGNjCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyIFRSMTogNS4yICBTcGVjaWFsIGZ1bmN0aW9ucworLy8KKworLy8gV3JpdHRlbiBieSBFZHdhcmQgU21pdGgtUm93bGFuZCBiYXNlZCBvbjoKKy8vICAgKDEpICBCLiBDLiBDYXJsc29uIE51bWVyLiBNYXRoLiAzMywgMSAoMTk3OSkKKy8vICAgKDIpICBCLiBDLiBDYXJsc29uLCBTcGVjaWFsIEZ1bmN0aW9ucyBvZiBBcHBsaWVkIE1hdGhlbWF0aWNzICgxOTc3KQorLy8gICAoMykgIFRoZSBHbnUgU2NpZW50aWZpYyBMaWJyYXJ5LCBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ3NsCisvLyAgICg0KSAgTnVtZXJpY2FsIFJlY2lwZXMgaW4gQywgMm5kIGVkLCBieSBXLiBILiBQcmVzcywgUy4gQS4gVGV1a29sc2t5LAorLy8gICAgICAgIFcuIFQuIFZldHRlcmxpbmcsIEIuIFAuIEZsYW5uZXJ5LCBDYW1icmlkZ2UgVW5pdmVyc2l0eSBQcmVzcworLy8gICAgICAgICgxOTkyKSwgcHAuIDI2MS0yNjkKKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfRUxMX0lOVEVHUkFMX1RDQworI2RlZmluZSBfR0xJQkNYWF9UUjFfRUxMX0lOVEVHUkFMX1RDQyAxCisKK25hbWVzcGFjZSBzdGQKK3sKK25hbWVzcGFjZSB0cjEKK3sKKworICAvLyBbNS4yXSBTcGVjaWFsIGZ1bmN0aW9ucworCisgIC8vIEltcGxlbWVudGF0aW9uLXNwYWNlIGRldGFpbHMuCisgIG5hbWVzcGFjZSBfX2RldGFpbAorICB7CisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBSZXR1cm4gdGhlIENhcmxzb24gZWxsaXB0aWMgZnVuY3Rpb24gQGYkIFJfRih4LHkseikgQGYkCisgICAgICogICAgICAgICAgb2YgdGhlIGZpcnN0IGtpbmQuCisgICAgICogCisgICAgICogICBUaGUgQ2FybHNvbiBlbGxpcHRpYyBmdW5jdGlvbiBvZiB0aGUgZmlyc3Qga2luZCBpcyBkZWZpbmVkIGJ5OgorICAgICAqICAgQGZbCisgICAgICogICAgICAgUl9GKHgseSx6KSA9IFxmcmFjezF9ezJ9IFxpbnRfMF5caW5mdHkKKyAgICAgKiAgICAgICAgICAgICAgICAgXGZyYWN7ZHR9eyh0ICsgeCleezEvMn0odCArIHkpXnsxLzJ9KHQgKyB6KV57MS8yfX0KKyAgICAgKiAgIEBmXQorICAgICAqCisgICAgICogICBAcGFyYW0gIF9feCAgVGhlIGZpcnN0IG9mIHRocmVlIHN5bW1ldHJpYyBhcmd1bWVudHMuCisgICAgICogICBAcGFyYW0gIF9feSAgVGhlIHNlY29uZCBvZiB0aHJlZSBzeW1tZXRyaWMgYXJndW1lbnRzLgorICAgICAqICAgQHBhcmFtICBfX3ogIFRoZSB0aGlyZCBvZiB0aHJlZSBzeW1tZXRyaWMgYXJndW1lbnRzLgorICAgICAqICAgQHJldHVybiAgVGhlIENhcmxzb24gZWxsaXB0aWMgZnVuY3Rpb24gb2YgdGhlIGZpcnN0IGtpbmQuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fZWxsaW50X3JmKGNvbnN0IF9UcCBfX3gsIGNvbnN0IF9UcCBfX3ksIGNvbnN0IF9UcCBfX3opCisgICAgeworICAgICAgY29uc3QgX1RwIF9fbWluID0gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjptaW4oKTsKKyAgICAgIGNvbnN0IF9UcCBfX21heCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6bWF4KCk7CisgICAgICBjb25zdCBfVHAgX19sb2xpbSA9IF9UcCg1KSAqIF9fbWluOworICAgICAgY29uc3QgX1RwIF9fdXBsaW0gPSBfX21heCAvIF9UcCg1KTsKKworICAgICAgaWYgKF9feCA8IF9UcCgwKSB8fCBfX3kgPCBfVHAoMCkgfHwgX196IDwgX1RwKDApKQorICAgICAgICBzdGQ6Ol9fdGhyb3dfZG9tYWluX2Vycm9yKF9fTigiQXJndW1lbnQgbGVzcyB0aGFuIHplcm8gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19lbGxpbnRfcmYuIikpOworICAgICAgZWxzZSBpZiAoX194ICsgX195IDwgX19sb2xpbSB8fCBfX3ggKyBfX3ogPCBfX2xvbGltCisgICAgICAgICAgICB8fCBfX3kgKyBfX3ogPCBfX2xvbGltKQorICAgICAgICBzdGQ6Ol9fdGhyb3dfZG9tYWluX2Vycm9yKF9fTigiQXJndW1lbnQgdG9vIHNtYWxsIGluIF9fZWxsaW50X3JmIikpOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgY29uc3QgX1RwIF9fYzAgPSBfVHAoMSkgLyBfVHAoNCk7CisgICAgICAgICAgY29uc3QgX1RwIF9fYzEgPSBfVHAoMSkgLyBfVHAoMjQpOworICAgICAgICAgIGNvbnN0IF9UcCBfX2MyID0gX1RwKDEpIC8gX1RwKDEwKTsKKyAgICAgICAgICBjb25zdCBfVHAgX19jMyA9IF9UcCgzKSAvIF9UcCg0NCk7CisgICAgICAgICAgY29uc3QgX1RwIF9fYzQgPSBfVHAoMSkgLyBfVHAoMTQpOworCisgICAgICAgICAgX1RwIF9feG4gPSBfX3g7CisgICAgICAgICAgX1RwIF9feW4gPSBfX3k7CisgICAgICAgICAgX1RwIF9fem4gPSBfX3o7CisKKyAgICAgICAgICBjb25zdCBfVHAgX19lcHMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmVwc2lsb24oKTsKKyAgICAgICAgICBjb25zdCBfVHAgX19lcnJ0b2wgPSBzdGQ6OnBvdyhfX2VwcywgX1RwKDEpIC8gX1RwKDYpKTsKKyAgICAgICAgICBfVHAgX19tdTsKKyAgICAgICAgICBfVHAgX194bmRldiwgX195bmRldiwgX196bmRldjsKKworICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBfX21heF9pdGVyID0gMTAwOworICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IF9faXRlciA9IDA7IF9faXRlciA8IF9fbWF4X2l0ZXI7ICsrX19pdGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfX211ID0gKF9feG4gKyBfX3luICsgX196bikgLyBfVHAoMyk7CisgICAgICAgICAgICAgIF9feG5kZXYgPSAyIC0gKF9fbXUgKyBfX3huKSAvIF9fbXU7CisgICAgICAgICAgICAgIF9feW5kZXYgPSAyIC0gKF9fbXUgKyBfX3luKSAvIF9fbXU7CisgICAgICAgICAgICAgIF9fem5kZXYgPSAyIC0gKF9fbXUgKyBfX3puKSAvIF9fbXU7CisgICAgICAgICAgICAgIF9UcCBfX2Vwc2lsb24gPSBzdGQ6Om1heChzdGQ6OmFicyhfX3huZGV2KSwgc3RkOjphYnMoX195bmRldikpOworICAgICAgICAgICAgICBfX2Vwc2lsb24gPSBzdGQ6Om1heChfX2Vwc2lsb24sIHN0ZDo6YWJzKF9fem5kZXYpKTsKKyAgICAgICAgICAgICAgaWYgKF9fZXBzaWxvbiA8IF9fZXJydG9sKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjb25zdCBfVHAgX194bnJvb3QgPSBzdGQ6OnNxcnQoX194bik7CisgICAgICAgICAgICAgIGNvbnN0IF9UcCBfX3lucm9vdCA9IHN0ZDo6c3FydChfX3luKTsKKyAgICAgICAgICAgICAgY29uc3QgX1RwIF9fem5yb290ID0gc3RkOjpzcXJ0KF9fem4pOworICAgICAgICAgICAgICBjb25zdCBfVHAgX19sYW1iZGEgPSBfX3hucm9vdCAqIChfX3lucm9vdCArIF9fem5yb290KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBfX3lucm9vdCAqIF9fem5yb290OworICAgICAgICAgICAgICBfX3huID0gX19jMCAqIChfX3huICsgX19sYW1iZGEpOworICAgICAgICAgICAgICBfX3luID0gX19jMCAqIChfX3luICsgX19sYW1iZGEpOworICAgICAgICAgICAgICBfX3puID0gX19jMCAqIChfX3puICsgX19sYW1iZGEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgY29uc3QgX1RwIF9fZTIgPSBfX3huZGV2ICogX195bmRldiAtIF9fem5kZXYgKiBfX3puZGV2OworICAgICAgICAgIGNvbnN0IF9UcCBfX2UzID0gX194bmRldiAqIF9feW5kZXYgKiBfX3puZGV2OworICAgICAgICAgIGNvbnN0IF9UcCBfX3MgID0gX1RwKDEpICsgKF9fYzEgKiBfX2UyIC0gX19jMiAtIF9fYzMgKiBfX2UzKSAqIF9fZTIKKyAgICAgICAgICAgICAgICAgICArIF9fYzQgKiBfX2UzOworCisgICAgICAgICAgcmV0dXJuIF9fcyAvIHN0ZDo6c3FydChfX211KTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgUmV0dXJuIHRoZSBjb21wbGV0ZSBlbGxpcHRpYyBpbnRlZ3JhbCBvZiB0aGUgZmlyc3Qga2luZAorICAgICAqICAgICAgICAgIEBmJCBLKGspIEBmJCBieSBzZXJpZXMgZXhwYW5zaW9uLgorICAgICAqIAorICAgICAqICAgVGhlIGNvbXBsZXRlIGVsbGlwdGljIGludGVncmFsIG9mIHRoZSBmaXJzdCBraW5kIGlzIGRlZmluZWQgYXMKKyAgICAgKiAgIEBmWworICAgICAqICAgICBLKGspID0gRihrLFxwaS8yKSA9IFxpbnRfMF57XHBpLzJ9XGZyYWN7ZFx0aGV0YX0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcc3FydHsxIC0ga14yc2luXjJcdGhldGF9fQorICAgICAqICAgQGZdCisgICAgICogCisgICAgICogICBUaGlzIHJvdXRpbmUgaXMgbm90IGJhZCBhcyBsb25nIGFzIHxrfCBpcyBzb21ld2hhdCBzbWFsbGVyIHRoYW4gMQorICAgICAqICAgYnV0IGlzIG5vdCBpcyBnb29kIGFzIHRoZSBDYXJsc29uIGVsbGlwdGljIGludGVncmFsIGZvcm11bGF0aW9uLgorICAgICAqIAorICAgICAqICAgQHBhcmFtICBfX2sgIFRoZSBhcmd1bWVudCBvZiB0aGUgY29tcGxldGUgZWxsaXB0aWMgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgY29tcGxldGUgZWxsaXB0aWMgZnVuY3Rpb24gb2YgdGhlIGZpcnN0IGtpbmQuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fY29tcF9lbGxpbnRfMV9zZXJpZXMoY29uc3QgX1RwIF9faykKKyAgICB7CisKKyAgICAgIGNvbnN0IF9UcCBfX2trID0gX19rICogX19rOworCisgICAgICBfVHAgX190ZXJtID0gX19rayAvIF9UcCg0KTsKKyAgICAgIF9UcCBfX3N1bSA9IF9UcCgxKSArIF9fdGVybTsKKworICAgICAgY29uc3QgdW5zaWduZWQgaW50IF9fbWF4X2l0ZXIgPSAxMDAwOworICAgICAgZm9yICh1bnNpZ25lZCBpbnQgX19pID0gMjsgX19pIDwgX19tYXhfaXRlcjsgKytfX2kpCisgICAgICAgIHsKKyAgICAgICAgICBfX3Rlcm0gKj0gKDIgKiBfX2kgLSAxKSAqIF9fa2sgLyAoMiAqIF9faSk7CisgICAgICAgICAgaWYgKF9fdGVybSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6ZXBzaWxvbigpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgX19zdW0gKz0gX190ZXJtOworICAgICAgICB9CisKKyAgICAgIHJldHVybiBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fcGlfMigpICogX19zdW07CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgUmV0dXJuIHRoZSBjb21wbGV0ZSBlbGxpcHRpYyBpbnRlZ3JhbCBvZiB0aGUgZmlyc3Qga2luZAorICAgICAqICAgICAgICAgICBAZiQgSyhrKSBAZiQgdXNpbmcgdGhlIENhcmxzb24gZm9ybXVsYXRpb24uCisgICAgICogCisgICAgICogICBUaGUgY29tcGxldGUgZWxsaXB0aWMgaW50ZWdyYWwgb2YgdGhlIGZpcnN0IGtpbmQgaXMgZGVmaW5lZCBhcworICAgICAqICAgQGZbCisgICAgICogICAgIEsoaykgPSBGKGssXHBpLzIpID0gXGludF8wXntccGkvMn1cZnJhY3tkXHRoZXRhfQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcc3FydHsxIC0ga14yIHNpbl4yXHRoZXRhfX0KKyAgICAgKiAgIEBmXQorICAgICAqICAgd2hlcmUgQGYkIEYoayxccGhpKSBAZiQgaXMgdGhlIGluY29tcGxldGUgZWxsaXB0aWMgaW50ZWdyYWwgb2YgdGhlCisgICAgICogICBmaXJzdCBraW5kLgorICAgICAqIAorICAgICAqICAgQHBhcmFtICBfX2sgIFRoZSBhcmd1bWVudCBvZiB0aGUgY29tcGxldGUgZWxsaXB0aWMgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgY29tcGxldGUgZWxsaXB0aWMgZnVuY3Rpb24gb2YgdGhlIGZpcnN0IGtpbmQuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fY29tcF9lbGxpbnRfMShjb25zdCBfVHAgX19rKQorICAgIHsKKworICAgICAgaWYgKF9faXNuYW4oX19rKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6cXVpZXRfTmFOKCk7CisgICAgICBlbHNlIGlmIChzdGQ6OmFicyhfX2spID49IF9UcCgxKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6cXVpZXRfTmFOKCk7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBfX2VsbGludF9yZihfVHAoMCksIF9UcCgxKSAtIF9fayAqIF9faywgX1RwKDEpKTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmICBSZXR1cm4gdGhlIGluY29tcGxldGUgZWxsaXB0aWMgaW50ZWdyYWwgb2YgdGhlIGZpcnN0IGtpbmQKKyAgICAgKiAgICAgICAgICAgQGYkIEYoayxccGhpKSBAZiQgdXNpbmcgdGhlIENhcmxzb24gZm9ybXVsYXRpb24uCisgICAgICogCisgICAgICogICBUaGUgaW5jb21wbGV0ZSBlbGxpcHRpYyBpbnRlZ3JhbCBvZiB0aGUgZmlyc3Qga2luZCBpcyBkZWZpbmVkIGFzCisgICAgICogICBAZlsKKyAgICAgKiAgICAgRihrLFxwaGkpID0gXGludF8wXntccGhpfVxmcmFje2RcdGhldGF9CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcc3FydHsxIC0ga14yIHNpbl4yXHRoZXRhfX0KKyAgICAgKiAgIEBmXQorICAgICAqIAorICAgICAqICAgQHBhcmFtICBfX2sgIFRoZSBhcmd1bWVudCBvZiB0aGUgZWxsaXB0aWMgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gIF9fcGhpICBUaGUgaW50ZWdyYWwgbGltaXQgYXJndW1lbnQgb2YgdGhlIGVsbGlwdGljIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIGVsbGlwdGljIGZ1bmN0aW9uIG9mIHRoZSBmaXJzdCBraW5kLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2VsbGludF8xKGNvbnN0IF9UcCBfX2ssIGNvbnN0IF9UcCBfX3BoaSkKKyAgICB7CisKKyAgICAgIGlmIChfX2lzbmFuKF9faykgfHwgX19pc25hbihfX3BoaSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OnF1aWV0X05hTigpOworICAgICAgZWxzZSBpZiAoc3RkOjphYnMoX19rKSA+IF9UcCgxKSkKKyAgICAgICAgc3RkOjpfX3Rocm93X2RvbWFpbl9lcnJvcihfX04oIkJhZCBhcmd1bWVudCBpbiBfX2VsbGludF8xLiIpKTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8vICBSZWR1Y2UgcGhpIHRvIC1waS8yIDwgcGhpIDwgK3BpLzIuCisgICAgICAgICAgY29uc3QgaW50IF9fbiA9IHN0ZDo6Zmxvb3IoX19waGkgLyBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fcGkoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIF9UcCgwLjVMKSk7CisgICAgICAgICAgY29uc3QgX1RwIF9fcGhpX3JlZCA9IF9fcGhpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIF9fbiAqIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waSgpOworCisgICAgICAgICAgY29uc3QgX1RwIF9fcyA9IHN0ZDo6c2luKF9fcGhpX3JlZCk7CisgICAgICAgICAgY29uc3QgX1RwIF9fYyA9IHN0ZDo6Y29zKF9fcGhpX3JlZCk7CisKKyAgICAgICAgICBjb25zdCBfVHAgX19GID0gX19zCisgICAgICAgICAgICAgICAgICAgICAgICAqIF9fZWxsaW50X3JmKF9fYyAqIF9fYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKDEpIC0gX19rICogX19rICogX19zICogX19zLCBfVHAoMSkpOworCisgICAgICAgICAgaWYgKF9fbiA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIF9fRjsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gX19GICsgX1RwKDIpICogX19uICogX19jb21wX2VsbGludF8xKF9fayk7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmIFJldHVybiB0aGUgY29tcGxldGUgZWxsaXB0aWMgaW50ZWdyYWwgb2YgdGhlIHNlY29uZCBraW5kCisgICAgICogICAgICAgICAgQGYkIEUoaykgQGYkIGJ5IHNlcmllcyBleHBhbnNpb24uCisgICAgICogCisgICAgICogICBUaGUgY29tcGxldGUgZWxsaXB0aWMgaW50ZWdyYWwgb2YgdGhlIHNlY29uZCBraW5kIGlzIGRlZmluZWQgYXMKKyAgICAgKiAgIEBmWworICAgICAqICAgICBFKGssXHBpLzIpID0gXGludF8wXntccGkvMn1cc3FydHsxIC0ga14yIHNpbl4yXHRoZXRhfQorICAgICAqICAgQGZdCisgICAgICogCisgICAgICogICBUaGlzIHJvdXRpbmUgaXMgbm90IGJhZCBhcyBsb25nIGFzIHxrfCBpcyBzb21ld2hhdCBzbWFsbGVyIHRoYW4gMQorICAgICAqICAgYnV0IGlzIG5vdCBpcyBnb29kIGFzIHRoZSBDYXJsc29uIGVsbGlwdGljIGludGVncmFsIGZvcm11bGF0aW9uLgorICAgICAqIAorICAgICAqICAgQHBhcmFtICBfX2sgIFRoZSBhcmd1bWVudCBvZiB0aGUgY29tcGxldGUgZWxsaXB0aWMgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgY29tcGxldGUgZWxsaXB0aWMgZnVuY3Rpb24gb2YgdGhlIHNlY29uZCBraW5kLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2NvbXBfZWxsaW50XzJfc2VyaWVzKGNvbnN0IF9UcCBfX2spCisgICAgeworCisgICAgICBjb25zdCBfVHAgX19rayA9IF9fayAqIF9fazsKKworICAgICAgX1RwIF9fdGVybSA9IF9fa2s7CisgICAgICBfVHAgX19zdW0gPSBfX3Rlcm07CisKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBfX21heF9pdGVyID0gMTAwMDsKKyAgICAgIGZvciAodW5zaWduZWQgaW50IF9faSA9IDI7IF9faSA8IF9fbWF4X2l0ZXI7ICsrX19pKQorICAgICAgICB7CisgICAgICAgICAgY29uc3QgX1RwIF9faTJtID0gMiAqIF9faSAtIDE7CisgICAgICAgICAgY29uc3QgX1RwIF9faTIgPSAyICogX19pOworICAgICAgICAgIF9fdGVybSAqPSBfX2kybSAqIF9faTJtICogX19rayAvIChfX2kyICogX19pMik7CisgICAgICAgICAgaWYgKF9fdGVybSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6ZXBzaWxvbigpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgX19zdW0gKz0gX190ZXJtIC8gX19pMm07CisgICAgICAgIH0KKworICAgICAgcmV0dXJuIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waV8yKCkgKiAoX1RwKDEpIC0gX19zdW0pOworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgIFJldHVybiB0aGUgQ2FybHNvbiBlbGxpcHRpYyBmdW5jdGlvbiBvZiB0aGUgc2Vjb25kIGtpbmQKKyAgICAgKiAgICAgICAgICAgQGYkIFJfRCh4LHkseikgPSBSX0ooeCx5LHoseikgQGYkIHdoZXJlCisgICAgICogICAgICAgICAgIEBmJCBSX0ooeCx5LHoscCkgQGYkIGlzIHRoZSBDYXJsc29uIGVsbGlwdGljIGZ1bmN0aW9uCisgICAgICogICAgICAgICAgIG9mIHRoZSB0aGlyZCBraW5kLgorICAgICAqIAorICAgICAqICAgVGhlIENhcmxzb24gZWxsaXB0aWMgZnVuY3Rpb24gb2YgdGhlIHNlY29uZCBraW5kIGlzIGRlZmluZWQgYnk6CisgICAgICogICBAZlsKKyAgICAgKiAgICAgICBSX0QoeCx5LHopID0gXGZyYWN7M317Mn0gXGludF8wXlxpbmZ0eQorICAgICAqICAgICAgICAgICAgICAgICBcZnJhY3tkdH17KHQgKyB4KV57MS8yfSh0ICsgeSleezEvMn0odCArIHopXnszLzJ9fQorICAgICAqICAgQGZdCisgICAgICoKKyAgICAgKiAgIEJhc2VkIG9uIENhcmxzb24ncyBhbGdvcml0aG1zOgorICAgICAqICAgLSAgQi4gQy4gQ2FybHNvbiBOdW1lci4gTWF0aC4gMzMsIDEgKDE5NzkpCisgICAgICogICAtICBCLiBDLiBDYXJsc29uLCBTcGVjaWFsIEZ1bmN0aW9ucyBvZiBBcHBsaWVkIE1hdGhlbWF0aWNzICgxOTc3KQorICAgICAqICAgLSAgTnVtZXJpY2FsIFJlY2lwZXMgaW4gQywgMm5kIGVkLCBwcC4gMjYxLTI2OSwKKyAgICAgKiAgICAgIGJ5IFByZXNzLCBUZXVrb2xza3ksIFZldHRlcmxpbmcsIEZsYW5uZXJ5ICgxOTkyKQorICAgICAqCisgICAgICogICBAcGFyYW0gIF9feCAgVGhlIGZpcnN0IG9mIHR3byBzeW1tZXRyaWMgYXJndW1lbnRzLgorICAgICAqICAgQHBhcmFtICBfX3kgIFRoZSBzZWNvbmQgb2YgdHdvIHN5bW1ldHJpYyBhcmd1bWVudHMuCisgICAgICogICBAcGFyYW0gIF9feiAgVGhlIHRoaXJkIGFyZ3VtZW50LgorICAgICAqICAgQHJldHVybiAgVGhlIENhcmxzb24gZWxsaXB0aWMgZnVuY3Rpb24gb2YgdGhlIHNlY29uZCBraW5kLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2VsbGludF9yZChjb25zdCBfVHAgX194LCBjb25zdCBfVHAgX195LCBjb25zdCBfVHAgX196KQorICAgIHsKKyAgICAgIGNvbnN0IF9UcCBfX2VwcyA9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6ZXBzaWxvbigpOworICAgICAgY29uc3QgX1RwIF9fZXJydG9sID0gc3RkOjpwb3coX19lcHMgLyBfVHAoOCksIF9UcCgxKSAvIF9UcCg2KSk7CisgICAgICBjb25zdCBfVHAgX19taW4gPSBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46Om1pbigpOworICAgICAgY29uc3QgX1RwIF9fbWF4ID0gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjptYXgoKTsKKyAgICAgIGNvbnN0IF9UcCBfX2xvbGltID0gX1RwKDIpIC8gc3RkOjpwb3coX19tYXgsIF9UcCgyKSAvIF9UcCgzKSk7CisgICAgICBjb25zdCBfVHAgX191cGxpbSA9IHN0ZDo6cG93KF9UcCgwLjFMKSAqIF9fZXJydG9sIC8gX19taW4sIF9UcCgyKSAvIF9UcCgzKSk7CisKKyAgICAgIGlmIChfX3ggPCBfVHAoMCkgfHwgX195IDwgX1RwKDApKQorICAgICAgICBzdGQ6Ol9fdGhyb3dfZG9tYWluX2Vycm9yKF9fTigiQXJndW1lbnQgbGVzcyB0aGFuIHplcm8gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19lbGxpbnRfcmQuIikpOworICAgICAgZWxzZSBpZiAoX194ICsgX195IDwgX19sb2xpbSB8fCBfX3ogPCBfX2xvbGltKQorICAgICAgICBzdGQ6Ol9fdGhyb3dfZG9tYWluX2Vycm9yKF9fTigiQXJndW1lbnQgdG9vIHNtYWxsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIF9fZWxsaW50X3JkLiIpKTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IF9UcCBfX2MwID0gX1RwKDEpIC8gX1RwKDQpOworICAgICAgICAgIGNvbnN0IF9UcCBfX2MxID0gX1RwKDMpIC8gX1RwKDE0KTsKKyAgICAgICAgICBjb25zdCBfVHAgX19jMiA9IF9UcCgxKSAvIF9UcCg2KTsKKyAgICAgICAgICBjb25zdCBfVHAgX19jMyA9IF9UcCg5KSAvIF9UcCgyMik7CisgICAgICAgICAgY29uc3QgX1RwIF9fYzQgPSBfVHAoMykgLyBfVHAoMjYpOworCisgICAgICAgICAgX1RwIF9feG4gPSBfX3g7CisgICAgICAgICAgX1RwIF9feW4gPSBfX3k7CisgICAgICAgICAgX1RwIF9fem4gPSBfX3o7CisgICAgICAgICAgX1RwIF9fc2lnbWEgPSBfVHAoMCk7CisgICAgICAgICAgX1RwIF9fcG93ZXI0ID0gX1RwKDEpOworCisgICAgICAgICAgX1RwIF9fbXU7CisgICAgICAgICAgX1RwIF9feG5kZXYsIF9feW5kZXYsIF9fem5kZXY7CisKKyAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgX19tYXhfaXRlciA9IDEwMDsKKyAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBfX2l0ZXIgPSAwOyBfX2l0ZXIgPCBfX21heF9pdGVyOyArK19faXRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX19tdSA9IChfX3huICsgX195biArIF9UcCgzKSAqIF9fem4pIC8gX1RwKDUpOworICAgICAgICAgICAgICBfX3huZGV2ID0gKF9fbXUgLSBfX3huKSAvIF9fbXU7CisgICAgICAgICAgICAgIF9feW5kZXYgPSAoX19tdSAtIF9feW4pIC8gX19tdTsKKyAgICAgICAgICAgICAgX196bmRldiA9IChfX211IC0gX196bikgLyBfX211OworICAgICAgICAgICAgICBfVHAgX19lcHNpbG9uID0gc3RkOjptYXgoc3RkOjphYnMoX194bmRldiksIHN0ZDo6YWJzKF9feW5kZXYpKTsKKyAgICAgICAgICAgICAgX19lcHNpbG9uID0gc3RkOjptYXgoX19lcHNpbG9uLCBzdGQ6OmFicyhfX3puZGV2KSk7CisgICAgICAgICAgICAgIGlmIChfX2Vwc2lsb24gPCBfX2VycnRvbCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgX1RwIF9feG5yb290ID0gc3RkOjpzcXJ0KF9feG4pOworICAgICAgICAgICAgICBfVHAgX195bnJvb3QgPSBzdGQ6OnNxcnQoX195bik7CisgICAgICAgICAgICAgIF9UcCBfX3pucm9vdCA9IHN0ZDo6c3FydChfX3puKTsKKyAgICAgICAgICAgICAgX1RwIF9fbGFtYmRhID0gX194bnJvb3QgKiAoX195bnJvb3QgKyBfX3pucm9vdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICsgX195bnJvb3QgKiBfX3pucm9vdDsKKyAgICAgICAgICAgICAgX19zaWdtYSArPSBfX3Bvd2VyNCAvIChfX3pucm9vdCAqIChfX3puICsgX19sYW1iZGEpKTsKKyAgICAgICAgICAgICAgX19wb3dlcjQgKj0gX19jMDsKKyAgICAgICAgICAgICAgX194biA9IF9fYzAgKiAoX194biArIF9fbGFtYmRhKTsKKyAgICAgICAgICAgICAgX195biA9IF9fYzAgKiAoX195biArIF9fbGFtYmRhKTsKKyAgICAgICAgICAgICAgX196biA9IF9fYzAgKiAoX196biArIF9fbGFtYmRhKTsKKyAgICAgICAgICAgIH0KKworCSAgLy8gTm90ZTogX19lYSBpcyBhbiBTUFUgYmFkbmFtZS4KKyAgICAgICAgICBfVHAgX19lYWEgPSBfX3huZGV2ICogX195bmRldjsKKyAgICAgICAgICBfVHAgX19lYiA9IF9fem5kZXYgKiBfX3puZGV2OworICAgICAgICAgIF9UcCBfX2VjID0gX19lYWEgLSBfX2ViOworICAgICAgICAgIF9UcCBfX2VkID0gX19lYWEgLSBfVHAoNikgKiBfX2ViOworICAgICAgICAgIF9UcCBfX2VmID0gX19lZCArIF9fZWMgKyBfX2VjOworICAgICAgICAgIF9UcCBfX3MxID0gX19lZCAqICgtX19jMSArIF9fYzMgKiBfX2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX1RwKDMpIC0gX1RwKDMpICogX19jNCAqIF9fem5kZXYgKiBfX2VmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX1RwKDIpKTsKKyAgICAgICAgICBfVHAgX19zMiA9IF9fem5kZXYKKyAgICAgICAgICAgICAgICAgICAqIChfX2MyICogX19lZgorICAgICAgICAgICAgICAgICAgICArIF9fem5kZXYgKiAoLV9fYzMgKiBfX2VjIC0gX196bmRldiAqIF9fYzQgLSBfX2VhYSkpOworCisgICAgICAgICAgcmV0dXJuIF9UcCgzKSAqIF9fc2lnbWEgKyBfX3Bvd2VyNCAqIChfVHAoMSkgKyBfX3MxICsgX19zMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIChfX211ICogc3RkOjpzcXJ0KF9fbXUpKTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgIFJldHVybiB0aGUgY29tcGxldGUgZWxsaXB0aWMgaW50ZWdyYWwgb2YgdGhlIHNlY29uZCBraW5kCisgICAgICogICAgICAgICAgIEBmJCBFKGspIEBmJCB1c2luZyB0aGUgQ2FybHNvbiBmb3JtdWxhdGlvbi4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBjb21wbGV0ZSBlbGxpcHRpYyBpbnRlZ3JhbCBvZiB0aGUgc2Vjb25kIGtpbmQgaXMgZGVmaW5lZCBhcworICAgICAqICAgQGZbCisgICAgICogICAgIEUoayxccGkvMikgPSBcaW50XzBee1xwaS8yfVxzcXJ0ezEgLSBrXjIgc2luXjJcdGhldGF9CisgICAgICogICBAZl0KKyAgICAgKiAKKyAgICAgKiAgIEBwYXJhbSAgX19rICBUaGUgYXJndW1lbnQgb2YgdGhlIGNvbXBsZXRlIGVsbGlwdGljIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIGNvbXBsZXRlIGVsbGlwdGljIGZ1bmN0aW9uIG9mIHRoZSBzZWNvbmQga2luZC4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19jb21wX2VsbGludF8yKGNvbnN0IF9UcCBfX2spCisgICAgeworCisgICAgICBpZiAoX19pc25hbihfX2spKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjpxdWlldF9OYU4oKTsKKyAgICAgIGVsc2UgaWYgKHN0ZDo6YWJzKF9faykgPT0gMSkKKyAgICAgICAgcmV0dXJuIF9UcCgxKTsKKyAgICAgIGVsc2UgaWYgKHN0ZDo6YWJzKF9faykgPiBfVHAoMSkpCisgICAgICAgIHN0ZDo6X190aHJvd19kb21haW5fZXJyb3IoX19OKCJCYWQgYXJndW1lbnQgaW4gX19jb21wX2VsbGludF8yLiIpKTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IF9UcCBfX2trID0gX19rICogX19rOworCisgICAgICAgICAgcmV0dXJuIF9fZWxsaW50X3JmKF9UcCgwKSwgX1RwKDEpIC0gX19raywgX1RwKDEpKQorICAgICAgICAgICAgICAgLSBfX2trICogX19lbGxpbnRfcmQoX1RwKDApLCBfVHAoMSkgLSBfX2trLCBfVHAoMSkpIC8gX1RwKDMpOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgUmV0dXJuIHRoZSBpbmNvbXBsZXRlIGVsbGlwdGljIGludGVncmFsIG9mIHRoZSBzZWNvbmQga2luZAorICAgICAqICAgICAgICAgICBAZiQgRShrLFxwaGkpIEBmJCB1c2luZyB0aGUgQ2FybHNvbiBmb3JtdWxhdGlvbi4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBpbmNvbXBsZXRlIGVsbGlwdGljIGludGVncmFsIG9mIHRoZSBzZWNvbmQga2luZCBpcyBkZWZpbmVkIGFzCisgICAgICogICBAZlsKKyAgICAgKiAgICAgRShrLFxwaGkpID0gXGludF8wXntccGhpfSBcc3FydHsxIC0ga14yIHNpbl4yXHRoZXRhfQorICAgICAqICAgQGZdCisgICAgICogCisgICAgICogICBAcGFyYW0gIF9fayAgVGhlIGFyZ3VtZW50IG9mIHRoZSBlbGxpcHRpYyBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSAgX19waGkgIFRoZSBpbnRlZ3JhbCBsaW1pdCBhcmd1bWVudCBvZiB0aGUgZWxsaXB0aWMgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgZWxsaXB0aWMgZnVuY3Rpb24gb2YgdGhlIHNlY29uZCBraW5kLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2VsbGludF8yKGNvbnN0IF9UcCBfX2ssIGNvbnN0IF9UcCBfX3BoaSkKKyAgICB7CisKKyAgICAgIGlmIChfX2lzbmFuKF9faykgfHwgX19pc25hbihfX3BoaSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OnF1aWV0X05hTigpOworICAgICAgZWxzZSBpZiAoc3RkOjphYnMoX19rKSA+IF9UcCgxKSkKKyAgICAgICAgc3RkOjpfX3Rocm93X2RvbWFpbl9lcnJvcihfX04oIkJhZCBhcmd1bWVudCBpbiBfX2VsbGludF8yLiIpKTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8vICBSZWR1Y2UgcGhpIHRvIC1waS8yIDwgcGhpIDwgK3BpLzIuCisgICAgICAgICAgY29uc3QgaW50IF9fbiA9IHN0ZDo6Zmxvb3IoX19waGkgLyBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fcGkoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIF9UcCgwLjVMKSk7CisgICAgICAgICAgY29uc3QgX1RwIF9fcGhpX3JlZCA9IF9fcGhpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIF9fbiAqIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waSgpOworCisgICAgICAgICAgY29uc3QgX1RwIF9fa2sgPSBfX2sgKiBfX2s7CisgICAgICAgICAgY29uc3QgX1RwIF9fcyA9IHN0ZDo6c2luKF9fcGhpX3JlZCk7CisgICAgICAgICAgY29uc3QgX1RwIF9fc3MgPSBfX3MgKiBfX3M7CisgICAgICAgICAgY29uc3QgX1RwIF9fc3NzID0gX19zcyAqIF9fczsKKyAgICAgICAgICBjb25zdCBfVHAgX19jID0gc3RkOjpjb3MoX19waGlfcmVkKTsKKyAgICAgICAgICBjb25zdCBfVHAgX19jYyA9IF9fYyAqIF9fYzsKKworICAgICAgICAgIGNvbnN0IF9UcCBfX0UgPSBfX3MKKyAgICAgICAgICAgICAgICAgICAgICAgICogX19lbGxpbnRfcmYoX19jYywgX1RwKDEpIC0gX19rayAqIF9fc3MsIF9UcCgxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC0gX19rayAqIF9fc3NzCisgICAgICAgICAgICAgICAgICAgICAgICAqIF9fZWxsaW50X3JkKF9fY2MsIF9UcCgxKSAtIF9fa2sgKiBfX3NzLCBfVHAoMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAvIF9UcCgzKTsKKworICAgICAgICAgIGlmIChfX24gPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBfX0U7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIF9fRSArIF9UcCgyKSAqIF9fbiAqIF9fY29tcF9lbGxpbnRfMihfX2spOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgUmV0dXJuIHRoZSBDYXJsc29uIGVsbGlwdGljIGZ1bmN0aW9uCisgICAgICogICAgICAgICAgIEBmJCBSX0MoeCx5KSA9IFJfRih4LHkseSkgQGYkIHdoZXJlIEBmJCBSX0YoeCx5LHopIEBmJAorICAgICAqICAgICAgICAgICBpcyB0aGUgQ2FybHNvbiBlbGxpcHRpYyBmdW5jdGlvbiBvZiB0aGUgZmlyc3Qga2luZC4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBDYXJsc29uIGVsbGlwdGljIGZ1bmN0aW9uIGlzIGRlZmluZWQgYnk6CisgICAgICogICBAZlsKKyAgICAgKiAgICAgICBSX0MoeCx5KSA9IFxmcmFjezF9ezJ9IFxpbnRfMF5caW5mdHkKKyAgICAgKiAgICAgICAgICAgICAgICAgXGZyYWN7ZHR9eyh0ICsgeCleezEvMn0odCArIHkpfQorICAgICAqICAgQGZdCisgICAgICoKKyAgICAgKiAgIEJhc2VkIG9uIENhcmxzb24ncyBhbGdvcml0aG1zOgorICAgICAqICAgLSAgQi4gQy4gQ2FybHNvbiBOdW1lci4gTWF0aC4gMzMsIDEgKDE5NzkpCisgICAgICogICAtICBCLiBDLiBDYXJsc29uLCBTcGVjaWFsIEZ1bmN0aW9ucyBvZiBBcHBsaWVkIE1hdGhlbWF0aWNzICgxOTc3KQorICAgICAqICAgLSAgTnVtZXJpY2FsIFJlY2lwZXMgaW4gQywgMm5kIGVkLCBwcC4gMjYxLTI2OSwKKyAgICAgKiAgICAgIGJ5IFByZXNzLCBUZXVrb2xza3ksIFZldHRlcmxpbmcsIEZsYW5uZXJ5ICgxOTkyKQorICAgICAqCisgICAgICogICBAcGFyYW0gIF9feCAgVGhlIGZpcnN0IGFyZ3VtZW50LgorICAgICAqICAgQHBhcmFtICBfX3kgIFRoZSBzZWNvbmQgYXJndW1lbnQuCisgICAgICogICBAcmV0dXJuICBUaGUgQ2FybHNvbiBlbGxpcHRpYyBmdW5jdGlvbi4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19lbGxpbnRfcmMoY29uc3QgX1RwIF9feCwgY29uc3QgX1RwIF9feSkKKyAgICB7CisgICAgICBjb25zdCBfVHAgX19taW4gPSBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46Om1pbigpOworICAgICAgY29uc3QgX1RwIF9fbWF4ID0gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjptYXgoKTsKKyAgICAgIGNvbnN0IF9UcCBfX2xvbGltID0gX1RwKDUpICogX19taW47CisgICAgICBjb25zdCBfVHAgX191cGxpbSA9IF9fbWF4IC8gX1RwKDUpOworCisgICAgICBpZiAoX194IDwgX1RwKDApIHx8IF9feSA8IF9UcCgwKSB8fCBfX3ggKyBfX3kgPCBfX2xvbGltKQorICAgICAgICBzdGQ6Ol9fdGhyb3dfZG9tYWluX2Vycm9yKF9fTigiQXJndW1lbnQgbGVzcyB0aGFuIHplcm8gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19lbGxpbnRfcmMuIikpOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgY29uc3QgX1RwIF9fYzAgPSBfVHAoMSkgLyBfVHAoNCk7CisgICAgICAgICAgY29uc3QgX1RwIF9fYzEgPSBfVHAoMSkgLyBfVHAoNyk7CisgICAgICAgICAgY29uc3QgX1RwIF9fYzIgPSBfVHAoOSkgLyBfVHAoMjIpOworICAgICAgICAgIGNvbnN0IF9UcCBfX2MzID0gX1RwKDMpIC8gX1RwKDEwKTsKKyAgICAgICAgICBjb25zdCBfVHAgX19jNCA9IF9UcCgzKSAvIF9UcCg4KTsKKworICAgICAgICAgIF9UcCBfX3huID0gX194OworICAgICAgICAgIF9UcCBfX3luID0gX195OworCisgICAgICAgICAgY29uc3QgX1RwIF9fZXBzID0gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjplcHNpbG9uKCk7CisgICAgICAgICAgY29uc3QgX1RwIF9fZXJydG9sID0gc3RkOjpwb3coX19lcHMgLyBfVHAoMzApLCBfVHAoMSkgLyBfVHAoNikpOworICAgICAgICAgIF9UcCBfX211OworICAgICAgICAgIF9UcCBfX3NuOworCisgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IF9fbWF4X2l0ZXIgPSAxMDA7CisgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgX19pdGVyID0gMDsgX19pdGVyIDwgX19tYXhfaXRlcjsgKytfX2l0ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9fbXUgPSAoX194biArIF9UcCgyKSAqIF9feW4pIC8gX1RwKDMpOworICAgICAgICAgICAgICBfX3NuID0gKF9feW4gKyBfX211KSAvIF9fbXUgLSBfVHAoMik7CisgICAgICAgICAgICAgIGlmIChzdGQ6OmFicyhfX3NuKSA8IF9fZXJydG9sKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjb25zdCBfVHAgX19sYW1iZGEgPSBfVHAoMikgKiBzdGQ6OnNxcnQoX194bikgKiBzdGQ6OnNxcnQoX195bikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBfX3luOworICAgICAgICAgICAgICBfX3huID0gX19jMCAqIChfX3huICsgX19sYW1iZGEpOworICAgICAgICAgICAgICBfX3luID0gX19jMCAqIChfX3luICsgX19sYW1iZGEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgX1RwIF9fcyA9IF9fc24gKiBfX3NuCisgICAgICAgICAgICAgICAgICAqIChfX2MzICsgX19zbiooX19jMSArIF9fc24gKiAoX19jNCArIF9fc24gKiBfX2MyKSkpOworCisgICAgICAgICAgcmV0dXJuIChfVHAoMSkgKyBfX3MpIC8gc3RkOjpzcXJ0KF9fbXUpOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgUmV0dXJuIHRoZSBDYXJsc29uIGVsbGlwdGljIGZ1bmN0aW9uIEBmJCBSX0ooeCx5LHoscCkgQGYkCisgICAgICogICAgICAgICAgIG9mIHRoZSB0aGlyZCBraW5kLgorICAgICAqIAorICAgICAqICAgVGhlIENhcmxzb24gZWxsaXB0aWMgZnVuY3Rpb24gb2YgdGhlIHRoaXJkIGtpbmQgaXMgZGVmaW5lZCBieToKKyAgICAgKiAgIEBmWworICAgICAqICAgICAgIFJfSih4LHkseixwKSA9IFxmcmFjezN9ezJ9IFxpbnRfMF5caW5mdHkKKyAgICAgKiAgICAgICBcZnJhY3tkdH17KHQgKyB4KV57MS8yfSh0ICsgeSleezEvMn0odCArIHopXnsxLzJ9KHQgKyBwKX0KKyAgICAgKiAgIEBmXQorICAgICAqCisgICAgICogICBCYXNlZCBvbiBDYXJsc29uJ3MgYWxnb3JpdGhtczoKKyAgICAgKiAgIC0gIEIuIEMuIENhcmxzb24gTnVtZXIuIE1hdGguIDMzLCAxICgxOTc5KQorICAgICAqICAgLSAgQi4gQy4gQ2FybHNvbiwgU3BlY2lhbCBGdW5jdGlvbnMgb2YgQXBwbGllZCBNYXRoZW1hdGljcyAoMTk3NykKKyAgICAgKiAgIC0gIE51bWVyaWNhbCBSZWNpcGVzIGluIEMsIDJuZCBlZCwgcHAuIDI2MS0yNjksCisgICAgICogICAgICBieSBQcmVzcywgVGV1a29sc2t5LCBWZXR0ZXJsaW5nLCBGbGFubmVyeSAoMTk5MikKKyAgICAgKgorICAgICAqICAgQHBhcmFtICBfX3ggIFRoZSBmaXJzdCBvZiB0aHJlZSBzeW1tZXRyaWMgYXJndW1lbnRzLgorICAgICAqICAgQHBhcmFtICBfX3kgIFRoZSBzZWNvbmQgb2YgdGhyZWUgc3ltbWV0cmljIGFyZ3VtZW50cy4KKyAgICAgKiAgIEBwYXJhbSAgX196ICBUaGUgdGhpcmQgb2YgdGhyZWUgc3ltbWV0cmljIGFyZ3VtZW50cy4KKyAgICAgKiAgIEBwYXJhbSAgX19wICBUaGUgZm91cnRoIGFyZ3VtZW50LgorICAgICAqICAgQHJldHVybiAgVGhlIENhcmxzb24gZWxsaXB0aWMgZnVuY3Rpb24gb2YgdGhlIGZvdXJ0aCBraW5kLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2VsbGludF9yaihjb25zdCBfVHAgX194LCBjb25zdCBfVHAgX195LCBjb25zdCBfVHAgX196LCBjb25zdCBfVHAgX19wKQorICAgIHsKKyAgICAgIGNvbnN0IF9UcCBfX21pbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6bWluKCk7CisgICAgICBjb25zdCBfVHAgX19tYXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46Om1heCgpOworICAgICAgY29uc3QgX1RwIF9fbG9saW0gPSBzdGQ6OnBvdyhfVHAoNSkgKiBfX21pbiwgX1RwKDEpL19UcCgzKSk7CisgICAgICBjb25zdCBfVHAgX191cGxpbSA9IF9UcCgwLjNMKQorICAgICAgICAgICAgICAgICAgICAgICAgKiBzdGQ6OnBvdyhfVHAoMC4yTCkgKiBfX21heCwgX1RwKDEpL19UcCgzKSk7CisKKyAgICAgIGlmIChfX3ggPCBfVHAoMCkgfHwgX195IDwgX1RwKDApIHx8IF9feiA8IF9UcCgwKSkKKyAgICAgICAgc3RkOjpfX3Rocm93X2RvbWFpbl9lcnJvcihfX04oIkFyZ3VtZW50IGxlc3MgdGhhbiB6ZXJvICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIF9fZWxsaW50X3JqLiIpKTsKKyAgICAgIGVsc2UgaWYgKF9feCArIF9feSA8IF9fbG9saW0gfHwgX194ICsgX196IDwgX19sb2xpbQorICAgICAgICAgICAgfHwgX195ICsgX196IDwgX19sb2xpbSB8fCBfX3AgPCBfX2xvbGltKQorICAgICAgICBzdGQ6Ol9fdGhyb3dfZG9tYWluX2Vycm9yKF9fTigiQXJndW1lbnQgdG9vIHNtYWxsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIF9fZWxsaW50X3JqIikpOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgY29uc3QgX1RwIF9fYzAgPSBfVHAoMSkgLyBfVHAoNCk7CisgICAgICAgICAgY29uc3QgX1RwIF9fYzEgPSBfVHAoMykgLyBfVHAoMTQpOworICAgICAgICAgIGNvbnN0IF9UcCBfX2MyID0gX1RwKDEpIC8gX1RwKDMpOworICAgICAgICAgIGNvbnN0IF9UcCBfX2MzID0gX1RwKDMpIC8gX1RwKDIyKTsKKyAgICAgICAgICBjb25zdCBfVHAgX19jNCA9IF9UcCgzKSAvIF9UcCgyNik7CisKKyAgICAgICAgICBfVHAgX194biA9IF9feDsKKyAgICAgICAgICBfVHAgX195biA9IF9feTsKKyAgICAgICAgICBfVHAgX196biA9IF9fejsKKyAgICAgICAgICBfVHAgX19wbiA9IF9fcDsKKyAgICAgICAgICBfVHAgX19zaWdtYSA9IF9UcCgwKTsKKyAgICAgICAgICBfVHAgX19wb3dlcjQgPSBfVHAoMSk7CisKKyAgICAgICAgICBjb25zdCBfVHAgX19lcHMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmVwc2lsb24oKTsKKyAgICAgICAgICBjb25zdCBfVHAgX19lcnJ0b2wgPSBzdGQ6OnBvdyhfX2VwcyAvIF9UcCg4KSwgX1RwKDEpIC8gX1RwKDYpKTsKKworICAgICAgICAgIF9UcCBfX2xhbWJkYSwgX19tdTsKKyAgICAgICAgICBfVHAgX194bmRldiwgX195bmRldiwgX196bmRldiwgX19wbmRldjsKKworICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBfX21heF9pdGVyID0gMTAwOworICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IF9faXRlciA9IDA7IF9faXRlciA8IF9fbWF4X2l0ZXI7ICsrX19pdGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfX211ID0gKF9feG4gKyBfX3luICsgX196biArIF9UcCgyKSAqIF9fcG4pIC8gX1RwKDUpOworICAgICAgICAgICAgICBfX3huZGV2ID0gKF9fbXUgLSBfX3huKSAvIF9fbXU7CisgICAgICAgICAgICAgIF9feW5kZXYgPSAoX19tdSAtIF9feW4pIC8gX19tdTsKKyAgICAgICAgICAgICAgX196bmRldiA9IChfX211IC0gX196bikgLyBfX211OworICAgICAgICAgICAgICBfX3BuZGV2ID0gKF9fbXUgLSBfX3BuKSAvIF9fbXU7CisgICAgICAgICAgICAgIF9UcCBfX2Vwc2lsb24gPSBzdGQ6Om1heChzdGQ6OmFicyhfX3huZGV2KSwgc3RkOjphYnMoX195bmRldikpOworICAgICAgICAgICAgICBfX2Vwc2lsb24gPSBzdGQ6Om1heChfX2Vwc2lsb24sIHN0ZDo6YWJzKF9fem5kZXYpKTsKKyAgICAgICAgICAgICAgX19lcHNpbG9uID0gc3RkOjptYXgoX19lcHNpbG9uLCBzdGQ6OmFicyhfX3BuZGV2KSk7CisgICAgICAgICAgICAgIGlmIChfX2Vwc2lsb24gPCBfX2VycnRvbCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY29uc3QgX1RwIF9feG5yb290ID0gc3RkOjpzcXJ0KF9feG4pOworICAgICAgICAgICAgICBjb25zdCBfVHAgX195bnJvb3QgPSBzdGQ6OnNxcnQoX195bik7CisgICAgICAgICAgICAgIGNvbnN0IF9UcCBfX3pucm9vdCA9IHN0ZDo6c3FydChfX3puKTsKKyAgICAgICAgICAgICAgY29uc3QgX1RwIF9fbGFtYmRhID0gX194bnJvb3QgKiAoX195bnJvb3QgKyBfX3pucm9vdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgX195bnJvb3QgKiBfX3pucm9vdDsKKyAgICAgICAgICAgICAgY29uc3QgX1RwIF9fYWxwaGExID0gX19wbiAqIChfX3hucm9vdCArIF9feW5yb290ICsgX196bnJvb3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgX194bnJvb3QgKiBfX3lucm9vdCAqIF9fem5yb290OworICAgICAgICAgICAgICBjb25zdCBfVHAgX19hbHBoYTIgPSBfX2FscGhhMSAqIF9fYWxwaGExOworICAgICAgICAgICAgICBjb25zdCBfVHAgX19iZXRhID0gX19wbiAqIChfX3BuICsgX19sYW1iZGEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogKF9fcG4gKyBfX2xhbWJkYSk7CisgICAgICAgICAgICAgIF9fc2lnbWEgKz0gX19wb3dlcjQgKiBfX2VsbGludF9yYyhfX2FscGhhMiwgX19iZXRhKTsKKyAgICAgICAgICAgICAgX19wb3dlcjQgKj0gX19jMDsKKyAgICAgICAgICAgICAgX194biA9IF9fYzAgKiAoX194biArIF9fbGFtYmRhKTsKKyAgICAgICAgICAgICAgX195biA9IF9fYzAgKiAoX195biArIF9fbGFtYmRhKTsKKyAgICAgICAgICAgICAgX196biA9IF9fYzAgKiAoX196biArIF9fbGFtYmRhKTsKKyAgICAgICAgICAgICAgX19wbiA9IF9fYzAgKiAoX19wbiArIF9fbGFtYmRhKTsKKyAgICAgICAgICAgIH0KKworCSAgLy8gTm90ZTogX19lYSBpcyBhbiBTUFUgYmFkbmFtZS4KKyAgICAgICAgICBfVHAgX19lYWEgPSBfX3huZGV2ICogKF9feW5kZXYgKyBfX3puZGV2KSArIF9feW5kZXYgKiBfX3puZGV2OworICAgICAgICAgIF9UcCBfX2ViID0gX194bmRldiAqIF9feW5kZXYgKiBfX3puZGV2OworICAgICAgICAgIF9UcCBfX2VjID0gX19wbmRldiAqIF9fcG5kZXY7CisgICAgICAgICAgX1RwIF9fZTIgPSBfX2VhYSAtIF9UcCgzKSAqIF9fZWM7CisgICAgICAgICAgX1RwIF9fZTMgPSBfX2ViICsgX1RwKDIpICogX19wbmRldiAqIChfX2VhYSAtIF9fZWMpOworICAgICAgICAgIF9UcCBfX3MxID0gX1RwKDEpICsgX19lMiAqICgtX19jMSArIF9UcCgzKSAqIF9fYzMgKiBfX2UyIC8gX1RwKDQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBfVHAoMykgKiBfX2M0ICogX19lMyAvIF9UcCgyKSk7CisgICAgICAgICAgX1RwIF9fczIgPSBfX2ViICogKF9fYzIgLyBfVHAoMikKKyAgICAgICAgICAgICAgICAgICArIF9fcG5kZXYgKiAoLV9fYzMgLSBfX2MzICsgX19wbmRldiAqIF9fYzQpKTsKKyAgICAgICAgICBfVHAgX19zMyA9IF9fcG5kZXYgKiBfX2VhYSAqIChfX2MyIC0gX19wbmRldiAqIF9fYzMpCisgICAgICAgICAgICAgICAgICAgLSBfX2MyICogX19wbmRldiAqIF9fZWM7CisKKyAgICAgICAgICByZXR1cm4gX1RwKDMpICogX19zaWdtYSArIF9fcG93ZXI0ICogKF9fczEgKyBfX3MyICsgX19zMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gKF9fbXUgKiBzdGQ6OnNxcnQoX19tdSkpOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBSZXR1cm4gdGhlIGNvbXBsZXRlIGVsbGlwdGljIGludGVncmFsIG9mIHRoZSB0aGlyZCBraW5kCisgICAgICogICAgICAgICAgQGYkIFxQaShrLFxudSkgPSBcUGkoayxcbnUsXHBpLzIpIEBmJCB1c2luZyB0aGUKKyAgICAgKiAgICAgICAgICBDYXJsc29uIGZvcm11bGF0aW9uLgorICAgICAqIAorICAgICAqICAgVGhlIGNvbXBsZXRlIGVsbGlwdGljIGludGVncmFsIG9mIHRoZSB0aGlyZCBraW5kIGlzIGRlZmluZWQgYXMKKyAgICAgKiAgIEBmWworICAgICAqICAgICBcUGkoayxcbnUpID0gXGludF8wXntccGkvMn0KKyAgICAgKiAgICAgICAgICAgICAgICAgICBcZnJhY3tkXHRoZXRhfQorICAgICAqICAgICAgICAgICAgICAgICB7KDEgLSBcbnUgXHNpbl4yXHRoZXRhKVxzcXJ0ezEgLSBrXjIgXHNpbl4yXHRoZXRhfX0KKyAgICAgKiAgIEBmXQorICAgICAqIAorICAgICAqICAgQHBhcmFtICBfX2sgIFRoZSBhcmd1bWVudCBvZiB0aGUgZWxsaXB0aWMgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gIF9fbnUgIFRoZSBzZWNvbmQgYXJndW1lbnQgb2YgdGhlIGVsbGlwdGljIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIGNvbXBsZXRlIGVsbGlwdGljIGZ1bmN0aW9uIG9mIHRoZSB0aGlyZCBraW5kLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2NvbXBfZWxsaW50XzMoY29uc3QgX1RwIF9faywgY29uc3QgX1RwIF9fbnUpCisgICAgeworCisgICAgICBpZiAoX19pc25hbihfX2spIHx8IF9faXNuYW4oX19udSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OnF1aWV0X05hTigpOworICAgICAgZWxzZSBpZiAoX19udSA9PSBfVHAoMSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmluZmluaXR5KCk7CisgICAgICBlbHNlIGlmIChzdGQ6OmFicyhfX2spID4gX1RwKDEpKQorICAgICAgICBzdGQ6Ol9fdGhyb3dfZG9tYWluX2Vycm9yKF9fTigiQmFkIGFyZ3VtZW50IGluIF9fY29tcF9lbGxpbnRfMy4iKSk7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCBfVHAgX19rayA9IF9fayAqIF9fazsKKworICAgICAgICAgIHJldHVybiBfX2VsbGludF9yZihfVHAoMCksIF9UcCgxKSAtIF9fa2ssIF9UcCgxKSkKKyAgICAgICAgICAgICAgIC0gX19udQorICAgICAgICAgICAgICAgKiBfX2VsbGludF9yaihfVHAoMCksIF9UcCgxKSAtIF9fa2ssIF9UcCgxKSwgX1RwKDEpICsgX19udSkKKyAgICAgICAgICAgICAgIC8gX1RwKDMpOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBSZXR1cm4gdGhlIGluY29tcGxldGUgZWxsaXB0aWMgaW50ZWdyYWwgb2YgdGhlIHRoaXJkIGtpbmQKKyAgICAgKiAgICAgICAgICBAZiQgXFBpKGssXG51LFxwaGkpIEBmJCB1c2luZyB0aGUgQ2FybHNvbiBmb3JtdWxhdGlvbi4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBpbmNvbXBsZXRlIGVsbGlwdGljIGludGVncmFsIG9mIHRoZSB0aGlyZCBraW5kIGlzIGRlZmluZWQgYXMKKyAgICAgKiAgIEBmWworICAgICAqICAgICBcUGkoayxcbnUsXHBoaSkgPSBcaW50XzBee1xwaGl9CisgICAgICogICAgICAgICAgICAgICAgICAgICAgIFxmcmFje2RcdGhldGF9CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgeygxIC0gXG51IFxzaW5eMlx0aGV0YSkKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHNxcnR7MSAtIGteMiBcc2luXjJcdGhldGF9fQorICAgICAqICAgQGZdCisgICAgICogCisgICAgICogICBAcGFyYW0gIF9fayAgVGhlIGFyZ3VtZW50IG9mIHRoZSBlbGxpcHRpYyBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSAgX19udSAgVGhlIHNlY29uZCBhcmd1bWVudCBvZiB0aGUgZWxsaXB0aWMgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gIF9fcGhpICBUaGUgaW50ZWdyYWwgbGltaXQgYXJndW1lbnQgb2YgdGhlIGVsbGlwdGljIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIGVsbGlwdGljIGZ1bmN0aW9uIG9mIHRoZSB0aGlyZCBraW5kLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2VsbGludF8zKGNvbnN0IF9UcCBfX2ssIGNvbnN0IF9UcCBfX251LCBjb25zdCBfVHAgX19waGkpCisgICAgeworCisgICAgICBpZiAoX19pc25hbihfX2spIHx8IF9faXNuYW4oX19udSkgfHwgX19pc25hbihfX3BoaSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OnF1aWV0X05hTigpOworICAgICAgZWxzZSBpZiAoc3RkOjphYnMoX19rKSA+IF9UcCgxKSkKKyAgICAgICAgc3RkOjpfX3Rocm93X2RvbWFpbl9lcnJvcihfX04oIkJhZCBhcmd1bWVudCBpbiBfX2VsbGludF8zLiIpKTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8vICBSZWR1Y2UgcGhpIHRvIC1waS8yIDwgcGhpIDwgK3BpLzIuCisgICAgICAgICAgY29uc3QgaW50IF9fbiA9IHN0ZDo6Zmxvb3IoX19waGkgLyBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fcGkoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIF9UcCgwLjVMKSk7CisgICAgICAgICAgY29uc3QgX1RwIF9fcGhpX3JlZCA9IF9fcGhpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIF9fbiAqIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waSgpOworCisgICAgICAgICAgY29uc3QgX1RwIF9fa2sgPSBfX2sgKiBfX2s7CisgICAgICAgICAgY29uc3QgX1RwIF9fcyA9IHN0ZDo6c2luKF9fcGhpX3JlZCk7CisgICAgICAgICAgY29uc3QgX1RwIF9fc3MgPSBfX3MgKiBfX3M7CisgICAgICAgICAgY29uc3QgX1RwIF9fc3NzID0gX19zcyAqIF9fczsKKyAgICAgICAgICBjb25zdCBfVHAgX19jID0gc3RkOjpjb3MoX19waGlfcmVkKTsKKyAgICAgICAgICBjb25zdCBfVHAgX19jYyA9IF9fYyAqIF9fYzsKKworICAgICAgICAgIGNvbnN0IF9UcCBfX1BpID0gX19zCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2VsbGludF9yZihfX2NjLCBfVHAoMSkgLSBfX2trICogX19zcywgX1RwKDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgIC0gX19udSAqIF9fc3NzCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2VsbGludF9yaihfX2NjLCBfVHAoMSkgLSBfX2trICogX19zcywgX1RwKDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKDEpICsgX19udSAqIF9fc3MpIC8gX1RwKDMpOworCisgICAgICAgICAgaWYgKF9fbiA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIF9fUGk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIF9fUGkgKyBfVHAoMikgKiBfX24gKiBfX2NvbXBfZWxsaW50XzMoX19rLCBfX251KTsKKyAgICAgICAgfQorICAgIH0KKworICB9IC8vIG5hbWVzcGFjZSBzdGQ6OnRyMTo6X19kZXRhaWwKK30KK30KKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9FTExfSU5URUdSQUxfVENDCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL2V4cF9pbnRlZ3JhbC50Y2MgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9leHBfaW50ZWdyYWwudGNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3M2NiZGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9leHBfaW50ZWdyYWwudGNjCkBAIC0wLDAgKzEsNTI0IEBACisvLyBTcGVjaWFsIGZ1bmN0aW9ucyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL2V4cF9pbnRlZ3JhbC50Y2MKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODIgVFIxOiA1LjIgIFNwZWNpYWwgZnVuY3Rpb25zCisvLworCisvLyAgV3JpdHRlbiBieSBFZHdhcmQgU21pdGgtUm93bGFuZCBiYXNlZCBvbjoKKy8vCisvLyAgICgxKSBIYW5kYm9vayBvZiBNYXRoZW1hdGljYWwgRnVuY3Rpb25zLAorLy8gICAgICAgRWQuIGJ5IE1pbHRvbiBBYnJhbW93aXR6IGFuZCBJcmVuZSBBLiBTdGVndW4sCisvLyAgICAgICBEb3ZlciBQdWJsaWNhdGlvbnMsIE5ldy1Zb3JrLCBTZWN0aW9uIDUsIHBwLiAyMjgtMjUxLgorLy8gICAoMikgVGhlIEdudSBTY2llbnRpZmljIExpYnJhcnksIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nc2wKKy8vICAgKDMpIE51bWVyaWNhbCBSZWNpcGVzIGluIEMsIGJ5IFcuIEguIFByZXNzLCBTLiBBLiBUZXVrb2xza3ksCisvLyAgICAgICBXLiBULiBWZXR0ZXJsaW5nLCBCLiBQLiBGbGFubmVyeSwgQ2FtYnJpZGdlIFVuaXZlcnNpdHkgUHJlc3MgKDE5OTIpLAorLy8gICAgICAgMm5kIGVkLCBwcC4gMjIyLTIyNS4KKy8vCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX0VYUF9JTlRFR1JBTF9UQ0MKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX0VYUF9JTlRFR1JBTF9UQ0MgMQorCisjaW5jbHVkZSAic3BlY2lhbF9mdW5jdGlvbl91dGlsLmgiCisKK25hbWVzcGFjZSBzdGQKK3sKK25hbWVzcGFjZSB0cjEKK3sKKworICAvLyBbNS4yXSBTcGVjaWFsIGZ1bmN0aW9ucworCisgIC8vIEltcGxlbWVudGF0aW9uLXNwYWNlIGRldGFpbHMuCisgIG5hbWVzcGFjZSBfX2RldGFpbAorICB7CisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBSZXR1cm4gdGhlIGV4cG9uZW50aWFsIGludGVncmFsIEBmJCBFXzEoeCkgQGYkCisgICAgICogICAgICAgICAgYnkgc2VyaWVzIHN1bW1hdGlvbi4gIFRoaXMgc2hvdWxkIGJlIGdvb2QKKyAgICAgKiAgICAgICAgICBmb3IgQGYkIHggPCAxIEBmJC4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBpcyBnaXZlbiBieQorICAgICAqICAgICAgICAgIFxmWworICAgICAqICAgICAgICAgICAgRV8xKHgpID0gXGludF97MX1ee1xpbmZ0eX0gXGZyYWN7ZV57LXh0fX17dH0gZHQKKyAgICAgKiAgICAgICAgICBcZl0KKyAgICAgKiAKKyAgICAgKiAgIEBwYXJhbSAgX194ICBUaGUgYXJndW1lbnQgb2YgdGhlIGV4cG9uZW50aWFsIGludGVncmFsIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIGV4cG9uZW50aWFsIGludGVncmFsLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2V4cGludF9FMV9zZXJpZXMoY29uc3QgX1RwIF9feCkKKyAgICB7CisgICAgICBjb25zdCBfVHAgX19lcHMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmVwc2lsb24oKTsKKyAgICAgIF9UcCBfX3Rlcm0gPSBfVHAoMSk7CisgICAgICBfVHAgX19lc3VtID0gX1RwKDApOworICAgICAgX1RwIF9fb3N1bSA9IF9UcCgwKTsKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBfX21heF9pdGVyID0gMTAwOworICAgICAgZm9yICh1bnNpZ25lZCBpbnQgX19pID0gMTsgX19pIDwgX19tYXhfaXRlcjsgKytfX2kpCisgICAgICAgIHsKKyAgICAgICAgICBfX3Rlcm0gKj0gLSBfX3ggLyBfX2k7CisgICAgICAgICAgaWYgKHN0ZDo6YWJzKF9fdGVybSkgPCBfX2VwcykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGlmIChfX3Rlcm0gPj0gX1RwKDApKQorICAgICAgICAgICAgX19lc3VtICs9IF9fdGVybSAvIF9faTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBfX29zdW0gKz0gX190ZXJtIC8gX19pOworICAgICAgICB9CisKKyAgICAgIHJldHVybiAtIF9fZXN1bSAtIF9fb3N1bQorICAgICAgICAgICAgIC0gX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX2dhbW1hX2UoKSAtIHN0ZDo6bG9nKF9feCk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBSZXR1cm4gdGhlIGV4cG9uZW50aWFsIGludGVncmFsIEBmJCBFXzEoeCkgQGYkCisgICAgICogICAgICAgICAgYnkgYXN5bXB0b3RpYyBleHBhbnNpb24uCisgICAgICogCisgICAgICogICBUaGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgaXMgZ2l2ZW4gYnkKKyAgICAgKiAgICAgICAgICBcZlsKKyAgICAgKiAgICAgICAgICAgIEVfMSh4KSA9IFxpbnRfezF9XlxpbmZ0eSBcZnJhY3tlXnsteHR9fXt0fSBkdAorICAgICAqICAgICAgICAgIFxmXQorICAgICAqIAorICAgICAqICAgQHBhcmFtICBfX3ggIFRoZSBhcmd1bWVudCBvZiB0aGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgZXhwb25lbnRpYWwgaW50ZWdyYWwuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fZXhwaW50X0UxX2FzeW1wKGNvbnN0IF9UcCBfX3gpCisgICAgeworICAgICAgX1RwIF9fdGVybSA9IF9UcCgxKTsKKyAgICAgIF9UcCBfX2VzdW0gPSBfVHAoMSk7CisgICAgICBfVHAgX19vc3VtID0gX1RwKDApOworICAgICAgY29uc3QgdW5zaWduZWQgaW50IF9fbWF4X2l0ZXIgPSAxMDAwOworICAgICAgZm9yICh1bnNpZ25lZCBpbnQgX19pID0gMTsgX19pIDwgX19tYXhfaXRlcjsgKytfX2kpCisgICAgICAgIHsKKyAgICAgICAgICBfVHAgX19wcmV2ID0gX190ZXJtOworICAgICAgICAgIF9fdGVybSAqPSAtIF9faSAvIF9feDsKKyAgICAgICAgICBpZiAoc3RkOjphYnMoX190ZXJtKSA+IHN0ZDo6YWJzKF9fcHJldikpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBpZiAoX190ZXJtID49IF9UcCgwKSkKKyAgICAgICAgICAgIF9fZXN1bSArPSBfX3Rlcm07CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgX19vc3VtICs9IF9fdGVybTsKKyAgICAgICAgfQorCisgICAgICByZXR1cm4gc3RkOjpleHAoLSBfX3gpICogKF9fZXN1bSArIF9fb3N1bSkgLyBfX3g7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBSZXR1cm4gdGhlIGV4cG9uZW50aWFsIGludGVncmFsIEBmJCBFX24oeCkgQGYkCisgICAgICogICAgICAgICAgYnkgc2VyaWVzIHN1bW1hdGlvbi4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBpcyBnaXZlbiBieQorICAgICAqICAgICAgICAgIFxmWworICAgICAqICAgICAgICAgICAgRV9uKHgpID0gXGludF97MX1eXGluZnR5IFxmcmFje2Veey14dH19e3Rebn0gZHQKKyAgICAgKiAgICAgICAgICBcZl0KKyAgICAgKiAKKyAgICAgKiAgIEBwYXJhbSAgX19uICBUaGUgb3JkZXIgb2YgdGhlIGV4cG9uZW50aWFsIGludGVncmFsIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtICBfX3ggIFRoZSBhcmd1bWVudCBvZiB0aGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgZXhwb25lbnRpYWwgaW50ZWdyYWwuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fZXhwaW50X0VuX3Nlcmllcyhjb25zdCB1bnNpZ25lZCBpbnQgX19uLCBjb25zdCBfVHAgX194KQorICAgIHsKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBfX21heF9pdGVyID0gMTAwOworICAgICAgY29uc3QgX1RwIF9fZXBzID0gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjplcHNpbG9uKCk7CisgICAgICBjb25zdCBpbnQgX19ubTEgPSBfX24gLSAxOworICAgICAgX1RwIF9fYW5zID0gKF9fbm0xICE9IDAKKyAgICAgICAgICAgICAgICA/IF9UcCgxKSAvIF9fbm0xIDogLXN0ZDo6bG9nKF9feCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fZ2FtbWFfZSgpKTsKKyAgICAgIF9UcCBfX2ZhY3QgPSBfVHAoMSk7CisgICAgICBmb3IgKGludCBfX2kgPSAxOyBfX2kgPD0gX19tYXhfaXRlcjsgKytfX2kpCisgICAgICAgIHsKKyAgICAgICAgICBfX2ZhY3QgKj0gLV9feCAvIF9UcChfX2kpOworICAgICAgICAgIF9UcCBfX2RlbDsKKyAgICAgICAgICBpZiAoIF9faSAhPSBfX25tMSApCisgICAgICAgICAgICBfX2RlbCA9IC1fX2ZhY3QgLyBfVHAoX19pIC0gX19ubTEpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX1RwIF9fcHNpID0gLV9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6Z2FtbWFfZSgpOworICAgICAgICAgICAgICBmb3IgKGludCBfX2lpID0gMTsgX19paSA8PSBfX25tMTsgKytfX2lpKQorICAgICAgICAgICAgICAgIF9fcHNpICs9IF9UcCgxKSAvIF9UcChfX2lpKTsKKyAgICAgICAgICAgICAgX19kZWwgPSBfX2ZhY3QgKiAoX19wc2kgLSBzdGQ6OmxvZyhfX3gpKTsgCisgICAgICAgICAgICB9CisgICAgICAgICAgX19hbnMgKz0gX19kZWw7CisgICAgICAgICAgaWYgKHN0ZDo6YWJzKF9fZGVsKSA8IF9fZXBzICogc3RkOjphYnMoX19hbnMpKQorICAgICAgICAgICAgcmV0dXJuIF9fYW5zOworICAgICAgICB9CisgICAgICBzdGQ6Ol9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oIlNlcmllcyBzdW1tYXRpb24gZmFpbGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19leHBpbnRfRW5fc2VyaWVzLiIpKTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmIFJldHVybiB0aGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgQGYkIEVfbih4KSBAZiQKKyAgICAgKiAgICAgICAgICBieSBjb250aW51ZWQgZnJhY3Rpb25zLgorICAgICAqIAorICAgICAqICAgVGhlIGV4cG9uZW50aWFsIGludGVncmFsIGlzIGdpdmVuIGJ5CisgICAgICogICAgICAgICAgXGZbCisgICAgICogICAgICAgICAgICBFX24oeCkgPSBcaW50X3sxfV5caW5mdHkgXGZyYWN7ZV57LXh0fX17dF5ufSBkdAorICAgICAqICAgICAgICAgIFxmXQorICAgICAqIAorICAgICAqICAgQHBhcmFtICBfX24gIFRoZSBvcmRlciBvZiB0aGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gIF9feCAgVGhlIGFyZ3VtZW50IG9mIHRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbC4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19leHBpbnRfRW5fY29udF9mcmFjKGNvbnN0IHVuc2lnbmVkIGludCBfX24sIGNvbnN0IF9UcCBfX3gpCisgICAgeworICAgICAgY29uc3QgdW5zaWduZWQgaW50IF9fbWF4X2l0ZXIgPSAxMDA7CisgICAgICBjb25zdCBfVHAgX19lcHMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmVwc2lsb24oKTsKKyAgICAgIGNvbnN0IF9UcCBfX2ZwX21pbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6bWluKCk7CisgICAgICBjb25zdCBpbnQgX19ubTEgPSBfX24gLSAxOworICAgICAgX1RwIF9fYiA9IF9feCArIF9UcChfX24pOworICAgICAgX1RwIF9fYyA9IF9UcCgxKSAvIF9fZnBfbWluOworICAgICAgX1RwIF9fZCA9IF9UcCgxKSAvIF9fYjsKKyAgICAgIF9UcCBfX2ggPSBfX2Q7CisgICAgICBmb3IgKCB1bnNpZ25lZCBpbnQgX19pID0gMTsgX19pIDw9IF9fbWF4X2l0ZXI7ICsrX19pICkKKyAgICAgICAgeworICAgICAgICAgIF9UcCBfX2EgPSAtX1RwKF9faSAqIChfX25tMSArIF9faSkpOworICAgICAgICAgIF9fYiArPSBfVHAoMik7CisgICAgICAgICAgX19kID0gX1RwKDEpIC8gKF9fYSAqIF9fZCArIF9fYik7CisgICAgICAgICAgX19jID0gX19iICsgX19hIC8gX19jOworICAgICAgICAgIGNvbnN0IF9UcCBfX2RlbCA9IF9fYyAqIF9fZDsKKyAgICAgICAgICBfX2ggKj0gX19kZWw7CisgICAgICAgICAgaWYgKHN0ZDo6YWJzKF9fZGVsIC0gX1RwKDEpKSA8IF9fZXBzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjb25zdCBfVHAgX19hbnMgPSBfX2ggKiBzdGQ6OmV4cCgtX194KTsKKyAgICAgICAgICAgICAgcmV0dXJuIF9fYW5zOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBzdGQ6Ol9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oIkNvbnRpbnVlZCBmcmFjdGlvbiBmYWlsZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBfX2V4cGludF9Fbl9jb250X2ZyYWMuIikpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgUmV0dXJuIHRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBAZiQgRV9uKHgpIEBmJAorICAgICAqICAgICAgICAgIGJ5IHJlY3Vyc2lvbi4gIFVzZSB1cHdhcmQgcmVjdXJzaW9uIGZvciBAZiQgeCA8IG4gQGYkCisgICAgICogICAgICAgICAgYW5kIGRvd253YXJkIHJlY3Vyc2lvbiAoTWlsbGVyJ3MgYWxnb3JpdGhtKSBvdGhlcndpc2UuCisgICAgICogCisgICAgICogICBUaGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgaXMgZ2l2ZW4gYnkKKyAgICAgKiAgICAgICAgICBcZlsKKyAgICAgKiAgICAgICAgICAgIEVfbih4KSA9IFxpbnRfezF9XlxpbmZ0eSBcZnJhY3tlXnsteHR9fXt0Xm59IGR0CisgICAgICogICAgICAgICAgXGZdCisgICAgICogCisgICAgICogICBAcGFyYW0gIF9fbiAgVGhlIG9yZGVyIG9mIHRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSAgX194ICBUaGUgYXJndW1lbnQgb2YgdGhlIGV4cG9uZW50aWFsIGludGVncmFsIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIGV4cG9uZW50aWFsIGludGVncmFsLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2V4cGludF9Fbl9yZWN1cnNpb24oY29uc3QgdW5zaWduZWQgaW50IF9fbiwgY29uc3QgX1RwIF9feCkKKyAgICB7CisgICAgICBfVHAgX19FbjsKKyAgICAgIF9UcCBfX0UxID0gX19leHBpbnRfRTEoX194KTsKKyAgICAgIGlmIChfX3ggPCBfVHAoX19uKSkKKyAgICAgICAgeworICAgICAgICAgIC8vICBGb3J3YXJkIHJlY3Vyc2lvbiBpcyBzdGFibGUgb25seSBmb3IgbiA8IHguCisgICAgICAgICAgX19FbiA9IF9fRTE7CisgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgX19qID0gMjsgX19qIDwgX19uOyArK19faikKKyAgICAgICAgICAgIF9fRW4gPSAoc3RkOjpleHAoLV9feCkgLSBfX3ggKiBfX0VuKSAvIF9UcChfX2ogLSAxKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLy8gIEJhY2t3YXJkIHJlY3Vyc2lvbiBpcyBzdGFibGUgb25seSBmb3IgbiA+PSB4LgorICAgICAgICAgIF9fRW4gPSBfVHAoMSk7CisgICAgICAgICAgY29uc3QgaW50IF9fTiA9IF9fbiArIDIwOyAgLy8gIFRPRE86IENoZWNrIHRoaXMgc3RhcnRpbmcgbnVtYmVyLgorICAgICAgICAgIF9UcCBfX3NhdmUgPSBfVHAoMCk7CisgICAgICAgICAgZm9yIChpbnQgX19qID0gX19OOyBfX2ogPiAwOyAtLV9faikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX19FbiA9IChzdGQ6OmV4cCgtX194KSAtIF9faiAqIF9fRW4pIC8gX194OworICAgICAgICAgICAgICBpZiAoX19qID09IF9fbikKKyAgICAgICAgICAgICAgICBfX3NhdmUgPSBfX0VuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgX1RwIF9fbm9ybSA9IF9fRW4gLyBfX0UxOworICAgICAgICAgICAgX19FbiAvPSBfX25vcm07CisgICAgICAgIH0KKworICAgICAgcmV0dXJuIF9fRW47CisgICAgfQorCisgICAgLyoqCisgICAgICogICBAYnJpZWYgUmV0dXJuIHRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBAZiQgRWkoeCkgQGYkCisgICAgICogICAgICAgICAgYnkgc2VyaWVzIHN1bW1hdGlvbi4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBpcyBnaXZlbiBieQorICAgICAqICAgICAgICAgIFxmWworICAgICAqICAgICAgICAgICAgRWkoeCkgPSAtXGludF97LXh9XlxpbmZ0eSBcZnJhY3tlXnR9e3R9IGR0CisgICAgICogICAgICAgICAgXGZdCisgICAgICogCisgICAgICogICBAcGFyYW0gIF9feCAgVGhlIGFyZ3VtZW50IG9mIHRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbC4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19leHBpbnRfRWlfc2VyaWVzKGNvbnN0IF9UcCBfX3gpCisgICAgeworICAgICAgX1RwIF9fdGVybSA9IF9UcCgxKTsKKyAgICAgIF9UcCBfX3N1bSA9IF9UcCgwKTsKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBfX21heF9pdGVyID0gMTAwMDsKKyAgICAgIGZvciAodW5zaWduZWQgaW50IF9faSA9IDE7IF9faSA8IF9fbWF4X2l0ZXI7ICsrX19pKQorICAgICAgICB7CisgICAgICAgICAgX190ZXJtICo9IF9feCAvIF9faTsKKyAgICAgICAgICBfX3N1bSArPSBfX3Rlcm0gLyBfX2k7CisgICAgICAgICAgaWYgKF9fdGVybSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6ZXBzaWxvbigpICogX19zdW0pCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICByZXR1cm4gX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX2dhbW1hX2UoKSArIF9fc3VtICsgc3RkOjpsb2coX194KTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmIFJldHVybiB0aGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgQGYkIEVpKHgpIEBmJAorICAgICAqICAgICAgICAgIGJ5IGFzeW1wdG90aWMgZXhwYW5zaW9uLgorICAgICAqIAorICAgICAqICAgVGhlIGV4cG9uZW50aWFsIGludGVncmFsIGlzIGdpdmVuIGJ5CisgICAgICogICAgICAgICAgXGZbCisgICAgICogICAgICAgICAgICBFaSh4KSA9IC1caW50X3steH1eXGluZnR5IFxmcmFje2VedH17dH0gZHQKKyAgICAgKiAgICAgICAgICBcZl0KKyAgICAgKiAKKyAgICAgKiAgIEBwYXJhbSAgX194ICBUaGUgYXJndW1lbnQgb2YgdGhlIGV4cG9uZW50aWFsIGludGVncmFsIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIGV4cG9uZW50aWFsIGludGVncmFsLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2V4cGludF9FaV9hc3ltcChjb25zdCBfVHAgX194KQorICAgIHsKKyAgICAgIF9UcCBfX3Rlcm0gPSBfVHAoMSk7CisgICAgICBfVHAgX19zdW0gPSBfVHAoMSk7CisgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgX19tYXhfaXRlciA9IDEwMDA7CisgICAgICBmb3IgKHVuc2lnbmVkIGludCBfX2kgPSAxOyBfX2kgPCBfX21heF9pdGVyOyArK19faSkKKyAgICAgICAgeworICAgICAgICAgIF9UcCBfX3ByZXYgPSBfX3Rlcm07CisgICAgICAgICAgX190ZXJtICo9IF9faSAvIF9feDsKKyAgICAgICAgICBpZiAoX190ZXJtIDwgc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjplcHNpbG9uKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBpZiAoX190ZXJtID49IF9fcHJldikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIF9fc3VtICs9IF9fdGVybTsKKyAgICAgICAgfQorCisgICAgICByZXR1cm4gc3RkOjpleHAoX194KSAqIF9fc3VtIC8gX194OworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgUmV0dXJuIHRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBAZiQgRWkoeCkgQGYkLgorICAgICAqIAorICAgICAqICAgVGhlIGV4cG9uZW50aWFsIGludGVncmFsIGlzIGdpdmVuIGJ5CisgICAgICogICAgICAgICAgXGZbCisgICAgICogICAgICAgICAgICBFaSh4KSA9IC1caW50X3steH1eXGluZnR5IFxmcmFje2VedH17dH0gZHQKKyAgICAgKiAgICAgICAgICBcZl0KKyAgICAgKiAKKyAgICAgKiAgIEBwYXJhbSAgX194ICBUaGUgYXJndW1lbnQgb2YgdGhlIGV4cG9uZW50aWFsIGludGVncmFsIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIGV4cG9uZW50aWFsIGludGVncmFsLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2V4cGludF9FaShjb25zdCBfVHAgX194KQorICAgIHsKKyAgICAgIGlmIChfX3ggPCBfVHAoMCkpCisgICAgICAgIHJldHVybiAtX19leHBpbnRfRTEoLV9feCk7CisgICAgICBlbHNlIGlmIChfX3ggPCAtc3RkOjpsb2coc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjplcHNpbG9uKCkpKQorICAgICAgICByZXR1cm4gX19leHBpbnRfRWlfc2VyaWVzKF9feCk7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBfX2V4cGludF9FaV9hc3ltcChfX3gpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgUmV0dXJuIHRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBAZiQgRV8xKHgpIEBmJC4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBpcyBnaXZlbiBieQorICAgICAqICAgICAgICAgIFxmWworICAgICAqICAgICAgICAgICAgRV8xKHgpID0gXGludF97MX1eXGluZnR5IFxmcmFje2Veey14dH19e3R9IGR0CisgICAgICogICAgICAgICAgXGZdCisgICAgICogCisgICAgICogICBAcGFyYW0gIF9feCAgVGhlIGFyZ3VtZW50IG9mIHRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbC4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19leHBpbnRfRTEoY29uc3QgX1RwIF9feCkKKyAgICB7CisgICAgICBpZiAoX194IDwgX1RwKDApKQorICAgICAgICByZXR1cm4gLV9fZXhwaW50X0VpKC1fX3gpOworICAgICAgZWxzZSBpZiAoX194IDwgX1RwKDEpKQorICAgICAgICByZXR1cm4gX19leHBpbnRfRTFfc2VyaWVzKF9feCk7CisgICAgICBlbHNlIGlmIChfX3ggPCBfVHAoMTAwKSkgIC8vICBUT0RPOiBGaW5kIGEgZ29vZCBhc3ltcHRvdGljIHN3aXRjaCBwb2ludC4KKyAgICAgICAgcmV0dXJuIF9fZXhwaW50X0VuX2NvbnRfZnJhYygxLCBfX3gpOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gX19leHBpbnRfRTFfYXN5bXAoX194KTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmIFJldHVybiB0aGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgQGYkIEVfbih4KSBAZiQKKyAgICAgKiAgICAgICAgICBmb3IgbGFyZ2UgYXJndW1lbnQuCisgICAgICogCisgICAgICogICBUaGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgaXMgZ2l2ZW4gYnkKKyAgICAgKiAgICAgICAgICBcZlsKKyAgICAgKiAgICAgICAgICAgIEVfbih4KSA9IFxpbnRfezF9XlxpbmZ0eSBcZnJhY3tlXnsteHR9fXt0Xm59IGR0CisgICAgICogICAgICAgICAgXGZdCisgICAgICogCisgICAgICogICBUaGlzIGlzIHNvbWV0aGluZyBvZiBhbiBleHRlbnNpb24uCisgICAgICogCisgICAgICogICBAcGFyYW0gIF9fbiAgVGhlIG9yZGVyIG9mIHRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSAgX194ICBUaGUgYXJndW1lbnQgb2YgdGhlIGV4cG9uZW50aWFsIGludGVncmFsIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIGV4cG9uZW50aWFsIGludGVncmFsLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2V4cGludF9hc3ltcChjb25zdCB1bnNpZ25lZCBpbnQgX19uLCBjb25zdCBfVHAgX194KQorICAgIHsKKyAgICAgIF9UcCBfX3Rlcm0gPSBfVHAoMSk7CisgICAgICBfVHAgX19zdW0gPSBfVHAoMSk7CisgICAgICBmb3IgKHVuc2lnbmVkIGludCBfX2kgPSAxOyBfX2kgPD0gX19uOyArK19faSkKKyAgICAgICAgeworICAgICAgICAgIF9UcCBfX3ByZXYgPSBfX3Rlcm07CisgICAgICAgICAgX190ZXJtICo9IC0oX19uIC0gX19pICsgMSkgLyBfX3g7CisgICAgICAgICAgaWYgKHN0ZDo6YWJzKF9fdGVybSkgPiBzdGQ6OmFicyhfX3ByZXYpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgX19zdW0gKz0gX190ZXJtOworICAgICAgICB9CisKKyAgICAgIHJldHVybiBzdGQ6OmV4cCgtX194KSAqIF9fc3VtIC8gX194OworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgUmV0dXJuIHRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBAZiQgRV9uKHgpIEBmJAorICAgICAqICAgICAgICAgIGZvciBsYXJnZSBvcmRlci4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBpcyBnaXZlbiBieQorICAgICAqICAgICAgICAgIFxmWworICAgICAqICAgICAgICAgICAgRV9uKHgpID0gXGludF97MX1eXGluZnR5IFxmcmFje2Veey14dH19e3Rebn0gZHQKKyAgICAgKiAgICAgICAgICBcZl0KKyAgICAgKiAgICAgICAgCisgICAgICogICBUaGlzIGlzIHNvbWV0aGluZyBvZiBhbiBleHRlbnNpb24uCisgICAgICogCisgICAgICogICBAcGFyYW0gIF9fbiAgVGhlIG9yZGVyIG9mIHRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSAgX194ICBUaGUgYXJndW1lbnQgb2YgdGhlIGV4cG9uZW50aWFsIGludGVncmFsIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIGV4cG9uZW50aWFsIGludGVncmFsLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2V4cGludF9sYXJnZV9uKGNvbnN0IHVuc2lnbmVkIGludCBfX24sIGNvbnN0IF9UcCBfX3gpCisgICAgeworICAgICAgY29uc3QgX1RwIF9feHBuID0gX194ICsgX19uOworICAgICAgY29uc3QgX1RwIF9feHBuMiA9IF9feHBuICogX194cG47CisgICAgICBfVHAgX190ZXJtID0gX1RwKDEpOworICAgICAgX1RwIF9fc3VtID0gX1RwKDEpOworICAgICAgZm9yICh1bnNpZ25lZCBpbnQgX19pID0gMTsgX19pIDw9IF9fbjsgKytfX2kpCisgICAgICAgIHsKKyAgICAgICAgICBfVHAgX19wcmV2ID0gX190ZXJtOworICAgICAgICAgIF9fdGVybSAqPSAoX19uIC0gMiAqIChfX2kgLSAxKSAqIF9feCkgLyBfX3hwbjI7CisgICAgICAgICAgaWYgKHN0ZDo6YWJzKF9fdGVybSkgPCBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmVwc2lsb24oKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIF9fc3VtICs9IF9fdGVybTsKKyAgICAgICAgfQorCisgICAgICByZXR1cm4gc3RkOjpleHAoLV9feCkgKiBfX3N1bSAvIF9feHBuOworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgUmV0dXJuIHRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBAZiQgRV9uKHgpIEBmJC4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBpcyBnaXZlbiBieQorICAgICAqICAgICAgICAgIFxmWworICAgICAqICAgICAgICAgICAgRV9uKHgpID0gXGludF97MX1eXGluZnR5IFxmcmFje2Veey14dH19e3Rebn0gZHQKKyAgICAgKiAgICAgICAgICBcZl0KKyAgICAgKiAgIFRoaXMgaXMgc29tZXRoaW5nIG9mIGFuIGV4dGVuc2lvbi4KKyAgICAgKiAKKyAgICAgKiAgIEBwYXJhbSAgX19uICBUaGUgb3JkZXIgb2YgdGhlIGV4cG9uZW50aWFsIGludGVncmFsIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtICBfX3ggIFRoZSBhcmd1bWVudCBvZiB0aGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgZXhwb25lbnRpYWwgaW50ZWdyYWwuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fZXhwaW50KGNvbnN0IHVuc2lnbmVkIGludCBfX24sIGNvbnN0IF9UcCBfX3gpCisgICAgeworICAgICAgLy8gIFJldHVybiBOYU4gb24gTmFOIGlucHV0LgorICAgICAgaWYgKF9faXNuYW4oX194KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6cXVpZXRfTmFOKCk7CisgICAgICBlbHNlIGlmIChfX24gPD0gMSAmJiBfX3ggPT0gX1RwKDApKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjppbmZpbml0eSgpOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fRTAgPSBzdGQ6OmV4cChfX3gpIC8gX194OworICAgICAgICAgIGlmIChfX24gPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBfX0UwOworCisgICAgICAgICAgX1RwIF9fRTEgPSBfX2V4cGludF9FMShfX3gpOworICAgICAgICAgIGlmIChfX24gPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBfX0UxOworCisgICAgICAgICAgaWYgKF9feCA9PSBfVHAoMCkpCisgICAgICAgICAgICByZXR1cm4gX1RwKDEpIC8gc3RhdGljX2Nhc3Q8X1RwPihfX24gLSAxKTsKKworICAgICAgICAgIF9UcCBfX0VuID0gX19leHBpbnRfRW5fcmVjdXJzaW9uKF9fbiwgX194KTsKKworICAgICAgICAgIHJldHVybiBfX0VuOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBSZXR1cm4gdGhlIGV4cG9uZW50aWFsIGludGVncmFsIEBmJCBFaSh4KSBAZiQuCisgICAgICogCisgICAgICogICBUaGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgaXMgZ2l2ZW4gYnkKKyAgICAgKiAgIFxmWworICAgICAqICAgICBFaSh4KSA9IC1caW50X3steH1eXGluZnR5IFxmcmFje2VedH17dH0gZHQKKyAgICAgKiAgIFxmXQorICAgICAqIAorICAgICAqICAgQHBhcmFtICBfX3ggIFRoZSBhcmd1bWVudCBvZiB0aGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgZXhwb25lbnRpYWwgaW50ZWdyYWwuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICBfX2V4cGludChjb25zdCBfVHAgX194KQorICAgIHsKKyAgICAgIGlmIChfX2lzbmFuKF9feCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OnF1aWV0X05hTigpOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gX19leHBpbnRfRWkoX194KTsKKyAgICB9CisKKyAgfSAvLyBuYW1lc3BhY2Ugc3RkOjp0cjE6Ol9fZGV0YWlsCit9Cit9CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfRVhQX0lOVEVHUkFMX1RDQwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvZmVudi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvZmVudi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExODYzMGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9mZW52LmgKQEAgLTAsMCArMSwzNCBAQAorLy8gVFIxIGZlbnYuaCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9mZW52LmgKKyAqICBUaGlzIGlzIGEgVFIxIEMrKyBMaWJyYXJ5IGhlYWRlci4gCisgKi8KKworI2lmbmRlZiBfVFIxX0ZFTlZfSAorI2RlZmluZSBfVFIxX0ZFTlZfSCAxCisKKyNpbmNsdWRlIDx0cjEvY2ZlbnY+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvZmxvYXQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL2Zsb2F0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJlZmY2ZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL2Zsb2F0LmgKQEAgLTAsMCArMSwzNCBAQAorLy8gVFIxIGZsb2F0LmggLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvZmxvYXQuaAorICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9UUjFfRkxPQVRfSAorI2RlZmluZSBfVFIxX0ZMT0FUX0ggMQorCisjaW5jbHVkZSA8dHIxL2NmbG9hdD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9mdW5jdGlvbmFsIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvZnVuY3Rpb25hbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmMwZDVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvZnVuY3Rpb25hbApAQCAtMCwwICsxLDIxNTEgQEAKKy8vIFRSMSBmdW5jdGlvbmFsIGhlYWRlciAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvZnVuY3Rpb25hbAorICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX0ZVTkNUSU9OQUwKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX0ZVTkNUSU9OQUwgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2Z1bmN0aW9uLmg+CisKKyNpbmNsdWRlIDx0eXBlaW5mbz4KKyNpbmNsdWRlIDxuZXc+CisjaW5jbHVkZSA8dHIxL3R1cGxlPgorI2luY2x1ZGUgPHRyMS90eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDxiaXRzL3N0cmluZ2Z3ZC5oPgorI2luY2x1ZGUgPHRyMS9mdW5jdGlvbmFsX2hhc2guaD4KKyNpbmNsdWRlIDxleHQvdHlwZV90cmFpdHMuaD4KKworbmFtZXNwYWNlIHN0ZAoreworbmFtZXNwYWNlIHRyMQoreworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTWVtYmVyUG9pbnRlcj4KKyAgICBjbGFzcyBfTWVtX2ZuOworCisgIC8qKgorICAgKiAgQWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIF9IYXNfcmVzdWx0X3R5cGUsIHdoaWNoIHVzZXMgU0ZJTkFFIHRvCisgICAqICBkZXRlcm1pbmUgaWYgdGhlIHR5cGUgX1RwIGhhcyBhIHB1YmxpY2x5LWFjY2Vzc2libGUgbWVtYmVyIHR5cGUKKyAgICogIHJlc3VsdF90eXBlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgX0hhc19yZXN1bHRfdHlwZV9oZWxwZXIgOiBfX3NmaW5hZV90eXBlcworICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICAgICAgc3RydWN0IF9XcmFwX3R5cGUKKwl7IH07CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICAgICAgc3RhdGljIF9fb25lIF9fdGVzdChfV3JhcF90eXBlPHR5cGVuYW1lIF9VcDo6cmVzdWx0X3R5cGU+Kik7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICAgICAgc3RhdGljIF9fdHdvIF9fdGVzdCguLi4pOworCisgICAgcHVibGljOgorICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBzaXplb2YoX190ZXN0PF9UcD4oMCkpID09IDE7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9IYXNfcmVzdWx0X3R5cGUKKyAgICA6IGludGVncmFsX2NvbnN0YW50PGJvb2wsCisJICAgICAgX0hhc19yZXN1bHRfdHlwZV9oZWxwZXI8dHlwZW5hbWUgcmVtb3ZlX2N2PF9UcD46OnR5cGU+Ojp2YWx1ZT4KKyAgICB7IH07CisKKyAgLyoqCisgICAqICAKKyAgKi8KKyAgLy8vIElmIHdlIGhhdmUgZm91bmQgYSByZXN1bHRfdHlwZSwgZXh0cmFjdCBpdC4KKyAgdGVtcGxhdGU8Ym9vbCBfSGFzX3Jlc3VsdF90eXBlLCB0eXBlbmFtZSBfRnVuY3Rvcj4KKyAgICBzdHJ1Y3QgX01heWJlX2dldF9yZXN1bHRfdHlwZQorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3Rvcj4KKyAgICBzdHJ1Y3QgX01heWJlX2dldF9yZXN1bHRfdHlwZTx0cnVlLCBfRnVuY3Rvcj4KKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9GdW5jdG9yOjpyZXN1bHRfdHlwZSByZXN1bHRfdHlwZTsKKyAgICB9OworCisgIC8qKgorICAgKiAgQmFzZSBjbGFzcyBmb3IgYW55IGZ1bmN0aW9uIG9iamVjdCB0aGF0IGhhcyBhIHdlYWsgcmVzdWx0IHR5cGUsIGFzCisgICAqICBkZWZpbmVkIGluIDMuMy8zIG9mIFRSMS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3I+CisgICAgc3RydWN0IF9XZWFrX3Jlc3VsdF90eXBlX2ltcGwKKyAgICA6IF9NYXliZV9nZXRfcmVzdWx0X3R5cGU8X0hhc19yZXN1bHRfdHlwZTxfRnVuY3Rvcj46OnZhbHVlLCBfRnVuY3Rvcj4KKyAgICB7CisgICAgfTsKKworICAvLy8gUmV0cmlldmUgdGhlIHJlc3VsdCB0eXBlIGZvciBhIGZ1bmN0aW9uIHR5cGUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4gCisgICAgc3RydWN0IF9XZWFrX3Jlc3VsdF90eXBlX2ltcGw8X1JlcyhfQXJnVHlwZXMuLi4pPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1JlcyByZXN1bHRfdHlwZTsKKyAgICB9OworCisgIC8vLyBSZXRyaWV2ZSB0aGUgcmVzdWx0IHR5cGUgZm9yIGEgZnVuY3Rpb24gcmVmZXJlbmNlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+IAorICAgIHN0cnVjdCBfV2Vha19yZXN1bHRfdHlwZV9pbXBsPF9SZXMoJikoX0FyZ1R5cGVzLi4uKT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9SZXMgcmVzdWx0X3R5cGU7CisgICAgfTsKKworICAvLy8gUmV0cmlldmUgdGhlIHJlc3VsdCB0eXBlIGZvciBhIGZ1bmN0aW9uIHBvaW50ZXIuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4gCisgICAgc3RydWN0IF9XZWFrX3Jlc3VsdF90eXBlX2ltcGw8X1JlcygqKShfQXJnVHlwZXMuLi4pPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1JlcyByZXN1bHRfdHlwZTsKKyAgICB9OworCisgIC8vLyBSZXRyaWV2ZSByZXN1bHQgdHlwZSBmb3IgYSBtZW1iZXIgZnVuY3Rpb24gcG9pbnRlci4gCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9DbGFzcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPiAKKyAgICBzdHJ1Y3QgX1dlYWtfcmVzdWx0X3R5cGVfaW1wbDxfUmVzIChfQ2xhc3M6OiopKF9BcmdUeXBlcy4uLik+CisgICAgeworICAgICAgdHlwZWRlZiBfUmVzIHJlc3VsdF90eXBlOworICAgIH07CisKKyAgLy8vIFJldHJpZXZlIHJlc3VsdCB0eXBlIGZvciBhIGNvbnN0IG1lbWJlciBmdW5jdGlvbiBwb2ludGVyLiAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0NsYXNzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+IAorICAgIHN0cnVjdCBfV2Vha19yZXN1bHRfdHlwZV9pbXBsPF9SZXMgKF9DbGFzczo6KikoX0FyZ1R5cGVzLi4uKSBjb25zdD4KKyAgICB7CisgICAgICB0eXBlZGVmIF9SZXMgcmVzdWx0X3R5cGU7CisgICAgfTsKKworICAvLy8gUmV0cmlldmUgcmVzdWx0IHR5cGUgZm9yIGEgdm9sYXRpbGUgbWVtYmVyIGZ1bmN0aW9uIHBvaW50ZXIuIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfQ2xhc3MsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4gCisgICAgc3RydWN0IF9XZWFrX3Jlc3VsdF90eXBlX2ltcGw8X1JlcyAoX0NsYXNzOjoqKShfQXJnVHlwZXMuLi4pIHZvbGF0aWxlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1JlcyByZXN1bHRfdHlwZTsKKyAgICB9OworCisgIC8vLyBSZXRyaWV2ZSByZXN1bHQgdHlwZSBmb3IgYSBjb25zdCB2b2xhdGlsZSBtZW1iZXIgZnVuY3Rpb24gcG9pbnRlci4gCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9DbGFzcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPiAKKyAgICBzdHJ1Y3QgX1dlYWtfcmVzdWx0X3R5cGVfaW1wbDxfUmVzIChfQ2xhc3M6OiopKF9BcmdUeXBlcy4uLiljb25zdCB2b2xhdGlsZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9SZXMgcmVzdWx0X3R5cGU7CisgICAgfTsKKworICAvKioKKyAgICogIFN0cmlwIHRvcC1sZXZlbCBjdi1xdWFsaWZpZXJzIGZyb20gdGhlIGZ1bmN0aW9uIG9iamVjdCBhbmQgbGV0CisgICAqICBfV2Vha19yZXN1bHRfdHlwZV9pbXBsIHBlcmZvcm0gdGhlIHJlYWwgd29yay4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3I+CisgICAgc3RydWN0IF9XZWFrX3Jlc3VsdF90eXBlCisgICAgOiBfV2Vha19yZXN1bHRfdHlwZV9pbXBsPHR5cGVuYW1lIHJlbW92ZV9jdjxfRnVuY3Rvcj46OnR5cGU+CisgICAgeworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBjbGFzcyByZXN1bHRfb2Y7CisKKyAgLyoqCisgICAqICBBY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgcmVzdWx0X29mLiBXaGVuIF9IYXNfcmVzdWx0X3R5cGUgaXMKKyAgICogIHRydWUsIGdldHMgaXRzIHJlc3VsdCBmcm9tIF9XZWFrX3Jlc3VsdF90eXBlLiBPdGhlcndpc2UsIHVzZXMKKyAgICogIHRoZSBmdW5jdGlvbiBvYmplY3QncyBtZW1iZXIgdGVtcGxhdGUgcmVzdWx0IHRvIGV4dHJhY3QgdGhlCisgICAqICByZXN1bHQgdHlwZS4KKyAgKi8KKyAgdGVtcGxhdGU8Ym9vbCBfSGFzX3Jlc3VsdF90eXBlLCB0eXBlbmFtZSBfU2lnbmF0dXJlPgorICAgIHN0cnVjdCBfUmVzdWx0X29mX2ltcGw7CisKKyAgLy8gSGFuZGxlIG1lbWJlciBkYXRhIHBvaW50ZXJzIHVzaW5nIF9NZW1fZm4ncyBsb2dpYworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfQ2xhc3MsIHR5cGVuYW1lIF9UMT4KKyAgICBzdHJ1Y3QgX1Jlc3VsdF9vZl9pbXBsPGZhbHNlLCBfUmVzIF9DbGFzczo6KihfVDEpPgorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX01lbV9mbjxfUmVzIF9DbGFzczo6Kj4KKyAgICAgICAgICAgICAgICA6OnRlbXBsYXRlIF9SZXN1bHRfdHlwZTxfVDE+Ojp0eXBlIHR5cGU7CisgICAgfTsKKworICAvKioKKyAgICogRGV0ZXJtaW5lIHdoZXRoZXIgd2UgY2FuIGRldGVybWluZSBhIHJlc3VsdCB0eXBlIGZyb20gQGMgRnVuY3RvciAKKyAgICogYWxvbmUuCisgICAqLyAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3IsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBjbGFzcyByZXN1bHRfb2Y8X0Z1bmN0b3IoX0FyZ1R5cGVzLi4uKT4KKyAgICA6IHB1YmxpYyBfUmVzdWx0X29mX2ltcGw8CisgICAgICAgICAgICAgICBfSGFzX3Jlc3VsdF90eXBlPF9XZWFrX3Jlc3VsdF90eXBlPF9GdW5jdG9yPiA+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgIF9GdW5jdG9yKF9BcmdUeXBlcy4uLik+CisgICAgeworICAgIH07CisKKyAgLy8vIFdlIGFscmVhZHkga25vdyB0aGUgcmVzdWx0IHR5cGUgZm9yIEBjIEZ1bmN0b3I7IHVzZSBpdC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3IsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBzdHJ1Y3QgX1Jlc3VsdF9vZl9pbXBsPHRydWUsIF9GdW5jdG9yKF9BcmdUeXBlcy4uLik+CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfV2Vha19yZXN1bHRfdHlwZTxfRnVuY3Rvcj46OnJlc3VsdF90eXBlIHR5cGU7CisgICAgfTsKKworICAvKioKKyAgICogV2UgbmVlZCB0byBjb21wdXRlIHRoZSByZXN1bHQgdHlwZSBmb3IgdGhpcyBpbnZvY2F0aW9uIHRoZSBoYXJkIAorICAgKiB3YXkuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3RvciwgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIHN0cnVjdCBfUmVzdWx0X29mX2ltcGw8ZmFsc2UsIF9GdW5jdG9yKF9BcmdUeXBlcy4uLik+CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRnVuY3RvcgorICAgICAgICAgICAgICAgIDo6dGVtcGxhdGUgcmVzdWx0PF9GdW5jdG9yKF9BcmdUeXBlcy4uLik+Ojp0eXBlIHR5cGU7CisgICAgfTsKKworICAvKioKKyAgICogSXQgaXMgdW5zYWZlIHRvIGFjY2VzcyA6OnJlc3VsdCB3aGVuIHRoZXJlIGFyZSB6ZXJvIGFyZ3VtZW50cywgc28gd2UgCisgICAqIHJldHVybiBAYyB2b2lkIGluc3RlYWQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3Rvcj4KKyAgICBzdHJ1Y3QgX1Jlc3VsdF9vZl9pbXBsPGZhbHNlLCBfRnVuY3RvcigpPgorICAgIHsKKyAgICAgIHR5cGVkZWYgdm9pZCB0eXBlOworICAgIH07CisKKyAgLy8vIERldGVybWluZXMgaWYgdGhlIHR5cGUgX1RwIGRlcml2ZXMgZnJvbSB1bmFyeV9mdW5jdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfRGVyaXZlc19mcm9tX3VuYXJ5X2Z1bmN0aW9uIDogX19zZmluYWVfdHlwZXMKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1Jlcz4KKyAgICAgICAgc3RhdGljIF9fb25lIF9fdGVzdChjb25zdCB2b2xhdGlsZSB1bmFyeV9mdW5jdGlvbjxfVDEsIF9SZXM+Kik7CisKKyAgICAgIC8vIEl0J3MgdGVtcHRpbmcgdG8gY2hhbmdlICIuLi4iIHRvIGNvbnN0IHZvbGF0aWxlIHZvaWQqLCBidXQKKyAgICAgIC8vIHRoYXQgZmFpbHMgd2hlbiBfVHAgaXMgYSBmdW5jdGlvbiB0eXBlLgorICAgICAgc3RhdGljIF9fdHdvIF9fdGVzdCguLi4pOworCisgICAgcHVibGljOgorICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBzaXplb2YoX190ZXN0KChfVHAqKTApKSA9PSAxOworICAgIH07CisKKyAgLy8vIERldGVybWluZXMgaWYgdGhlIHR5cGUgX1RwIGRlcml2ZXMgZnJvbSBiaW5hcnlfZnVuY3Rpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX0Rlcml2ZXNfZnJvbV9iaW5hcnlfZnVuY3Rpb24gOiBfX3NmaW5hZV90eXBlcworICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDIsIHR5cGVuYW1lIF9SZXM+CisgICAgICAgIHN0YXRpYyBfX29uZSBfX3Rlc3QoY29uc3Qgdm9sYXRpbGUgYmluYXJ5X2Z1bmN0aW9uPF9UMSwgX1QyLCBfUmVzPiopOworCisgICAgICAvLyBJdCdzIHRlbXB0aW5nIHRvIGNoYW5nZSAiLi4uIiB0byBjb25zdCB2b2xhdGlsZSB2b2lkKiwgYnV0CisgICAgICAvLyB0aGF0IGZhaWxzIHdoZW4gX1RwIGlzIGEgZnVuY3Rpb24gdHlwZS4KKyAgICAgIHN0YXRpYyBfX3R3byBfX3Rlc3QoLi4uKTsKKworICAgIHB1YmxpYzoKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gc2l6ZW9mKF9fdGVzdCgoX1RwKikwKSkgPT0gMTsKKyAgICB9OworCisgIC8vLyBUdXJucyBhIGZ1bmN0aW9uIHR5cGUgaW50byBhIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJvb2wgX0lzRnVuY3Rpb25UeXBlID0gaXNfZnVuY3Rpb248X1RwPjo6dmFsdWU+CisgICAgc3RydWN0IF9GdW5jdGlvbl90b19mdW5jdGlvbl9wb2ludGVyCisgICAgeworICAgICAgdHlwZWRlZiBfVHAgdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX0Z1bmN0aW9uX3RvX2Z1bmN0aW9uX3BvaW50ZXI8X1RwLCB0cnVlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1RwKiB0eXBlOworICAgIH07CisKKyAgLyoqCisgICAqIEludm9rZSBhIGZ1bmN0aW9uIG9iamVjdCwgd2hpY2ggbWF5IGJlIGVpdGhlciBhIG1lbWJlciBwb2ludGVyIG9yIGEKKyAgICogZnVuY3Rpb24gb2JqZWN0LiBUaGUgZmlyc3QgcGFyYW1ldGVyIHdpbGwgdGVsbCB3aGljaC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICBpbmxpbmUKKyAgICB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPAorICAgICAgICAgICAgICghaXNfbWVtYmVyX3BvaW50ZXI8X0Z1bmN0b3I+Ojp2YWx1ZQorICAgICAgICAgICAgICAmJiAhaXNfZnVuY3Rpb248X0Z1bmN0b3I+Ojp2YWx1ZQorICAgICAgICAgICAgICAmJiAhaXNfZnVuY3Rpb248dHlwZW5hbWUgcmVtb3ZlX3BvaW50ZXI8X0Z1bmN0b3I+Ojp0eXBlPjo6dmFsdWUpLAorICAgICAgICAgICAgIHR5cGVuYW1lIHJlc3VsdF9vZjxfRnVuY3RvcihfQXJncy4uLik+Ojp0eXBlCisgICAgICAgICAgID46Ol9fdHlwZQorICAgIF9faW52b2tlKF9GdW5jdG9yJiBfX2YsIF9BcmdzJi4uLiBfX2FyZ3MpCisgICAgeworICAgICAgcmV0dXJuIF9fZihfX2FyZ3MuLi4pOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3RvciwgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgaW5saW5lCisgICAgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjwKKyAgICAgICAgICAgICAoaXNfbWVtYmVyX3BvaW50ZXI8X0Z1bmN0b3I+Ojp2YWx1ZQorICAgICAgICAgICAgICAmJiAhaXNfZnVuY3Rpb248X0Z1bmN0b3I+Ojp2YWx1ZQorICAgICAgICAgICAgICAmJiAhaXNfZnVuY3Rpb248dHlwZW5hbWUgcmVtb3ZlX3BvaW50ZXI8X0Z1bmN0b3I+Ojp0eXBlPjo6dmFsdWUpLAorICAgICAgICAgICAgIHR5cGVuYW1lIHJlc3VsdF9vZjxfRnVuY3RvcihfQXJncy4uLik+Ojp0eXBlCisgICAgICAgICAgID46Ol9fdHlwZQorICAgIF9faW52b2tlKF9GdW5jdG9yJiBfX2YsIF9BcmdzJi4uLiBfX2FyZ3MpCisgICAgeworICAgICAgcmV0dXJuIG1lbV9mbihfX2YpKF9fYXJncy4uLik7CisgICAgfQorCisgIC8vIFRvIHBpY2sgdXAgZnVuY3Rpb24gcmVmZXJlbmNlcyAodGhhdCB3aWxsIGJlY29tZSBmdW5jdGlvbiBwb2ludGVycykKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3IsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIGlubGluZQorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8CisgICAgICAgICAgICAgKGlzX3BvaW50ZXI8X0Z1bmN0b3I+Ojp2YWx1ZQorICAgICAgICAgICAgICAmJiBpc19mdW5jdGlvbjx0eXBlbmFtZSByZW1vdmVfcG9pbnRlcjxfRnVuY3Rvcj46OnR5cGU+Ojp2YWx1ZSksCisgICAgICAgICAgICAgdHlwZW5hbWUgcmVzdWx0X29mPF9GdW5jdG9yKF9BcmdzLi4uKT46OnR5cGUKKyAgICAgICAgICAgPjo6X190eXBlCisgICAgX19pbnZva2UoX0Z1bmN0b3IgX19mLCBfQXJncyYuLi4gX19hcmdzKQorICAgIHsKKyAgICAgIHJldHVybiBfX2YoX19hcmdzLi4uKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBLbm93aW5nIHdoaWNoIG9mIHVuYXJ5X2Z1bmN0aW9uIGFuZCBiaW5hcnlfZnVuY3Rpb24gX1RwIGRlcml2ZXMKKyAgICogIGZyb20sIGRlcml2ZXMgZnJvbSB0aGUgc2FtZSBhbmQgZW5zdXJlcyB0aGF0IHJlZmVyZW5jZV93cmFwcGVyCisgICAqICB3aWxsIGhhdmUgYSB3ZWFrIHJlc3VsdCB0eXBlLiBTZWUgY2FzZXMgYmVsb3cuCisgICAqLworICB0ZW1wbGF0ZTxib29sIF9VbmFyeSwgYm9vbCBfQmluYXJ5LCB0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlX2ltcGw7CisKKyAgLy8gTm90IGEgdW5hcnlfZnVuY3Rpb24gb3IgYmluYXJ5X2Z1bmN0aW9uLCBzbyB0cnkgYSB3ZWFrIHJlc3VsdCB0eXBlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlX2ltcGw8ZmFsc2UsIGZhbHNlLCBfVHA+CisgICAgOiBfV2Vha19yZXN1bHRfdHlwZTxfVHA+CisgICAgeyB9OworCisgIC8vIHVuYXJ5X2Z1bmN0aW9uIGJ1dCBub3QgYmluYXJ5X2Z1bmN0aW9uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2VfaW1wbDx0cnVlLCBmYWxzZSwgX1RwPgorICAgIDogdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1RwOjphcmd1bWVudF90eXBlLAorCQkgICAgIHR5cGVuYW1lIF9UcDo6cmVzdWx0X3R5cGU+CisgICAgeyB9OworCisgIC8vIGJpbmFyeV9mdW5jdGlvbiBidXQgbm90IHVuYXJ5X2Z1bmN0aW9uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2VfaW1wbDxmYWxzZSwgdHJ1ZSwgX1RwPgorICAgIDogYmluYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9UcDo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKKwkJICAgICAgdHlwZW5hbWUgX1RwOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKKwkJICAgICAgdHlwZW5hbWUgX1RwOjpyZXN1bHRfdHlwZT4KKyAgICB7IH07CisKKyAgLy8gQm90aCB1bmFyeV9mdW5jdGlvbiBhbmQgYmluYXJ5X2Z1bmN0aW9uLiBJbXBvcnQgcmVzdWx0X3R5cGUgdG8KKyAgLy8gYXZvaWQgY29uZmxpY3RzLgorICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZV9pbXBsPHRydWUsIHRydWUsIF9UcD4KKyAgICA6IHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9UcDo6YXJndW1lbnRfdHlwZSwKKwkJICAgICB0eXBlbmFtZSBfVHA6OnJlc3VsdF90eXBlPiwKKyAgICAgIGJpbmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfVHA6OmZpcnN0X2FyZ3VtZW50X3R5cGUsCisJCSAgICAgIHR5cGVuYW1lIF9UcDo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCisJCSAgICAgIHR5cGVuYW1lIF9UcDo6cmVzdWx0X3R5cGU+CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHA6OnJlc3VsdF90eXBlIHJlc3VsdF90eXBlOworICAgIH07CisKKyAgLyoqCisgICAqICBEZXJpdmVzIGZyb20gdW5hcnlfZnVuY3Rpb24gb3IgYmluYXJ5X2Z1bmN0aW9uIHdoZW4gaXQKKyAgICogIGNhbi4gU3BlY2lhbGl6YXRpb25zIGhhbmRsZSBhbGwgb2YgdGhlIGVhc3kgY2FzZXMuIFRoZSBwcmltYXJ5CisgICAqICB0ZW1wbGF0ZSBkZXRlcm1pbmVzIHdoYXQgdG8gZG8gd2l0aCBhIGNsYXNzIHR5cGUsIHdoaWNoIG1heQorICAgKiAgZGVyaXZlIGZyb20gYm90aCB1bmFyeV9mdW5jdGlvbiBhbmQgYmluYXJ5X2Z1bmN0aW9uLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlCisgICAgOiBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZV9pbXBsPAorICAgICAgX0Rlcml2ZXNfZnJvbV91bmFyeV9mdW5jdGlvbjxfVHA+Ojp2YWx1ZSwKKyAgICAgIF9EZXJpdmVzX2Zyb21fYmluYXJ5X2Z1bmN0aW9uPF9UcD46OnZhbHVlLAorICAgICAgX1RwPgorICAgIHsgfTsKKworICAvLyAtIGEgZnVuY3Rpb24gdHlwZSAodW5hcnkpCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9UMT4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2U8X1JlcyhfVDEpPgorICAgIDogdW5hcnlfZnVuY3Rpb248X1QxLCBfUmVzPgorICAgIHsgfTsKKworICAvLyAtIGEgZnVuY3Rpb24gdHlwZSAoYmluYXJ5KQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9UMj4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2U8X1JlcyhfVDEsIF9UMik+CisgICAgOiBiaW5hcnlfZnVuY3Rpb248X1QxLCBfVDIsIF9SZXM+CisgICAgeyB9OworCisgIC8vIC0gYSBmdW5jdGlvbiBwb2ludGVyIHR5cGUgKHVuYXJ5KQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfVDE+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlPF9SZXMoKikoX1QxKT4KKyAgICA6IHVuYXJ5X2Z1bmN0aW9uPF9UMSwgX1Jlcz4KKyAgICB7IH07CisKKyAgLy8gLSBhIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZSAoYmluYXJ5KQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9UMj4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2U8X1JlcygqKShfVDEsIF9UMik+CisgICAgOiBiaW5hcnlfZnVuY3Rpb248X1QxLCBfVDIsIF9SZXM+CisgICAgeyB9OworCisgIC8vIC0gYSBwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbiB0eXBlICh1bmFyeSwgbm8gcXVhbGlmaWVycykKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX1QxPgorICAgIHN0cnVjdCBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZTxfUmVzIChfVDE6OiopKCk+CisgICAgOiB1bmFyeV9mdW5jdGlvbjxfVDEqLCBfUmVzPgorICAgIHsgfTsKKworICAvLyAtIGEgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb24gdHlwZSAoYmluYXJ5LCBubyBxdWFsaWZpZXJzKQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9UMj4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2U8X1JlcyAoX1QxOjoqKShfVDIpPgorICAgIDogYmluYXJ5X2Z1bmN0aW9uPF9UMSosIF9UMiwgX1Jlcz4KKyAgICB7IH07CisKKyAgLy8gLSBhIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9uIHR5cGUgKHVuYXJ5LCBjb25zdCkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX1QxPgorICAgIHN0cnVjdCBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZTxfUmVzIChfVDE6OiopKCkgY29uc3Q+CisgICAgOiB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVDEqLCBfUmVzPgorICAgIHsgfTsKKworICAvLyAtIGEgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb24gdHlwZSAoYmluYXJ5LCBjb25zdCkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlPF9SZXMgKF9UMTo6KikoX1QyKSBjb25zdD4KKyAgICA6IGJpbmFyeV9mdW5jdGlvbjxjb25zdCBfVDEqLCBfVDIsIF9SZXM+CisgICAgeyB9OworCisgIC8vIC0gYSBwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbiB0eXBlICh1bmFyeSwgdm9sYXRpbGUpCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9UMT4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2U8X1JlcyAoX1QxOjoqKSgpIHZvbGF0aWxlPgorICAgIDogdW5hcnlfZnVuY3Rpb248dm9sYXRpbGUgX1QxKiwgX1Jlcz4KKyAgICB7IH07CisKKyAgLy8gLSBhIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9uIHR5cGUgKGJpbmFyeSwgdm9sYXRpbGUpCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyPgorICAgIHN0cnVjdCBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZTxfUmVzIChfVDE6OiopKF9UMikgdm9sYXRpbGU+CisgICAgOiBiaW5hcnlfZnVuY3Rpb248dm9sYXRpbGUgX1QxKiwgX1QyLCBfUmVzPgorICAgIHsgfTsKKworICAvLyAtIGEgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb24gdHlwZSAodW5hcnksIGNvbnN0IHZvbGF0aWxlKQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfVDE+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlPF9SZXMgKF9UMTo6KikoKSBjb25zdCB2b2xhdGlsZT4KKyAgICA6IHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IHZvbGF0aWxlIF9UMSosIF9SZXM+CisgICAgeyB9OworCisgIC8vIC0gYSBwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbiB0eXBlIChiaW5hcnksIGNvbnN0IHZvbGF0aWxlKQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9UMj4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2U8X1JlcyAoX1QxOjoqKShfVDIpIGNvbnN0IHZvbGF0aWxlPgorICAgIDogYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IHZvbGF0aWxlIF9UMSosIF9UMiwgX1Jlcz4KKyAgICB7IH07CisKKyAgLy8vIHJlZmVyZW5jZV93cmFwcGVyCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyByZWZlcmVuY2Vfd3JhcHBlcgorICAgIDogcHVibGljIF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlPHR5cGVuYW1lIHJlbW92ZV9jdjxfVHA+Ojp0eXBlPgorICAgIHsKKyAgICAgIC8vIElmIF9UcCBpcyBhIGZ1bmN0aW9uIHR5cGUsIHdlIGNhbid0IGZvcm0gcmVzdWx0X29mPF9UcCguLi4pPiwKKyAgICAgIC8vIHNvIHR1cm4gaXQgaW50byBhIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZS4KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Z1bmN0aW9uX3RvX2Z1bmN0aW9uX3BvaW50ZXI8X1RwPjo6dHlwZQorICAgICAgICBfTV9mdW5jX3R5cGU7CisKKyAgICAgIF9UcCogX01fZGF0YTsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9UcCB0eXBlOworCisgICAgICBleHBsaWNpdAorICAgICAgcmVmZXJlbmNlX3dyYXBwZXIoX1RwJiBfX2luZGF0YSk6IF9NX2RhdGEoJl9faW5kYXRhKQorICAgICAgeyB9CisKKyAgICAgIHJlZmVyZW5jZV93cmFwcGVyKGNvbnN0IHJlZmVyZW5jZV93cmFwcGVyPF9UcD4mIF9faW5yZWYpOgorICAgICAgX01fZGF0YShfX2lucmVmLl9NX2RhdGEpCisgICAgICB7IH0KKworICAgICAgcmVmZXJlbmNlX3dyYXBwZXImCisgICAgICBvcGVyYXRvcj0oY29uc3QgcmVmZXJlbmNlX3dyYXBwZXI8X1RwPiYgX19pbnJlZikKKyAgICAgIHsKKyAgICAgICAgX01fZGF0YSA9IF9faW5yZWYuX01fZGF0YTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBvcGVyYXRvciBfVHAmKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmdldCgpOyB9CisKKyAgICAgIF9UcCYKKyAgICAgIGdldCgpIGNvbnN0CisgICAgICB7IHJldHVybiAqX01fZGF0YTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgdHlwZW5hbWUgcmVzdWx0X29mPF9NX2Z1bmNfdHlwZShfQXJncy4uLik+Ojp0eXBlCisgICAgICAgIG9wZXJhdG9yKCkoX0FyZ3MmLi4uIF9fYXJncykgY29uc3QKKyAgICAgICAgeworCSAgcmV0dXJuIF9faW52b2tlKGdldCgpLCBfX2FyZ3MuLi4pOworCX0KKyAgICB9OworCisKKyAgLy8gRGVub3RlcyBhIHJlZmVyZW5jZSBzaG91bGQgYmUgdGFrZW4gdG8gYSB2YXJpYWJsZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSByZWZlcmVuY2Vfd3JhcHBlcjxfVHA+CisgICAgcmVmKF9UcCYgX190KQorICAgIHsgcmV0dXJuIHJlZmVyZW5jZV93cmFwcGVyPF9UcD4oX190KTsgfQorCisgIC8vIERlbm90ZXMgYSBjb25zdCByZWZlcmVuY2Ugc2hvdWxkIGJlIHRha2VuIHRvIGEgdmFyaWFibGUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgcmVmZXJlbmNlX3dyYXBwZXI8Y29uc3QgX1RwPgorICAgIGNyZWYoY29uc3QgX1RwJiBfX3QpCisgICAgeyByZXR1cm4gcmVmZXJlbmNlX3dyYXBwZXI8Y29uc3QgX1RwPihfX3QpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSByZWZlcmVuY2Vfd3JhcHBlcjxfVHA+CisgICAgcmVmKHJlZmVyZW5jZV93cmFwcGVyPF9UcD4gX190KQorICAgIHsgcmV0dXJuIHJlZihfX3QuZ2V0KCkpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSByZWZlcmVuY2Vfd3JhcHBlcjxjb25zdCBfVHA+CisgICAgY3JlZihyZWZlcmVuY2Vfd3JhcHBlcjxfVHA+IF9fdCkKKyAgICB7IHJldHVybiBjcmVmKF9fdC5nZXQoKSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJvb2w+CisgICAgc3RydWN0IF9NZW1fZm5fY29uc3Rfb3Jfbm9uCisgICAgeworICAgICAgdHlwZWRlZiBjb25zdCBfVHAmIHR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9NZW1fZm5fY29uc3Rfb3Jfbm9uPF9UcCwgZmFsc2U+CisgICAgeworICAgICAgdHlwZWRlZiBfVHAmIHR5cGU7CisgICAgfTsKKworICAvKioKKyAgICogRGVyaXZlcyBmcm9tIEBjIHVuYXJ5X2Z1bmN0aW9uIG9yIEBjIGJpbmFyeV9mdW5jdGlvbiwgb3IgcGVyaGFwcworICAgKiBub3RoaW5nLCBkZXBlbmRpbmcgb24gdGhlIG51bWJlciBvZiBhcmd1bWVudHMgcHJvdmlkZWQuIFRoZQorICAgKiBwcmltYXJ5IHRlbXBsYXRlIGlzIHRoZSBiYXNpcyBjYXNlLCB3aGljaCBkZXJpdmVzIG5vdGhpbmcuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+IAorICAgIHN0cnVjdCBfTWF5YmVfdW5hcnlfb3JfYmluYXJ5X2Z1bmN0aW9uIHsgfTsKKworICAvLy8gRGVyaXZlcyBmcm9tIEBjIHVuYXJ5X2Z1bmN0aW9uLCBhcyBhcHByb3ByaWF0ZS4gCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9UMT4gCisgICAgc3RydWN0IF9NYXliZV91bmFyeV9vcl9iaW5hcnlfZnVuY3Rpb248X1JlcywgX1QxPgorICAgIDogc3RkOjp1bmFyeV9mdW5jdGlvbjxfVDEsIF9SZXM+IHsgfTsKKworICAvLy8gRGVyaXZlcyBmcm9tIEBjIGJpbmFyeV9mdW5jdGlvbiwgYXMgYXBwcm9wcmlhdGUuIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9UMj4gCisgICAgc3RydWN0IF9NYXliZV91bmFyeV9vcl9iaW5hcnlfZnVuY3Rpb248X1JlcywgX1QxLCBfVDI+CisgICAgOiBzdGQ6OmJpbmFyeV9mdW5jdGlvbjxfVDEsIF9UMiwgX1Jlcz4geyB9OworCisgIC8vLyBJbXBsZW1lbnRhdGlvbiBvZiBAYyBtZW1fZm4gZm9yIG1lbWJlciBmdW5jdGlvbiBwb2ludGVycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0NsYXNzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgY2xhc3MgX01lbV9mbjxfUmVzIChfQ2xhc3M6OiopKF9BcmdUeXBlcy4uLik+CisgICAgOiBwdWJsaWMgX01heWJlX3VuYXJ5X29yX2JpbmFyeV9mdW5jdGlvbjxfUmVzLCBfQ2xhc3MqLCBfQXJnVHlwZXMuLi4+CisgICAgeworICAgICAgdHlwZWRlZiBfUmVzIChfQ2xhc3M6OipfRnVuY3RvcikoX0FyZ1R5cGVzLi4uKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBfUmVzCisgICAgICAgIF9NX2NhbGwoX1RwJiBfX29iamVjdCwgY29uc3Qgdm9sYXRpbGUgX0NsYXNzICosIAorICAgICAgICAgICAgICAgIF9BcmdUeXBlcy4uLiBfX2FyZ3MpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIChfX29iamVjdC4qX19wbWYpKF9fYXJncy4uLik7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBfUmVzCisgICAgICAgIF9NX2NhbGwoX1RwJiBfX3B0ciwgY29uc3Qgdm9sYXRpbGUgdm9pZCAqLCBfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgICAgICB7IHJldHVybiAoKCpfX3B0cikuKl9fcG1mKShfX2FyZ3MuLi4pOyB9CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9SZXMgcmVzdWx0X3R5cGU7CisKKyAgICAgIGV4cGxpY2l0IF9NZW1fZm4oX0Z1bmN0b3IgX19wbWYpIDogX19wbWYoX19wbWYpIHsgfQorCisgICAgICAvLyBIYW5kbGUgb2JqZWN0cworICAgICAgX1JlcworICAgICAgb3BlcmF0b3IoKShfQ2xhc3MmIF9fb2JqZWN0LCBfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgICAgeyByZXR1cm4gKF9fb2JqZWN0LipfX3BtZikoX19hcmdzLi4uKTsgfQorCisgICAgICAvLyBIYW5kbGUgcG9pbnRlcnMKKyAgICAgIF9SZXMKKyAgICAgIG9wZXJhdG9yKCkoX0NsYXNzKiBfX29iamVjdCwgX0FyZ1R5cGVzLi4uIF9fYXJncykgY29uc3QKKyAgICAgIHsgcmV0dXJuIChfX29iamVjdC0+Kl9fcG1mKShfX2FyZ3MuLi4pOyB9CisKKyAgICAgIC8vIEhhbmRsZSBzbWFydCBwb2ludGVycywgcmVmZXJlbmNlcyBhbmQgcG9pbnRlcnMgdG8gZGVyaXZlZAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBfUmVzCisJb3BlcmF0b3IoKShfVHAmIF9fb2JqZWN0LCBfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgICAgICB7IHJldHVybiBfTV9jYWxsKF9fb2JqZWN0LCAmX19vYmplY3QsIF9fYXJncy4uLik7IH0KKworICAgIHByaXZhdGU6CisgICAgICBfRnVuY3RvciBfX3BtZjsKKyAgICB9OworCisgIC8vLyBJbXBsZW1lbnRhdGlvbiBvZiBAYyBtZW1fZm4gZm9yIGNvbnN0IG1lbWJlciBmdW5jdGlvbiBwb2ludGVycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0NsYXNzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgY2xhc3MgX01lbV9mbjxfUmVzIChfQ2xhc3M6OiopKF9BcmdUeXBlcy4uLikgY29uc3Q+CisgICAgOiBwdWJsaWMgX01heWJlX3VuYXJ5X29yX2JpbmFyeV9mdW5jdGlvbjxfUmVzLCBjb25zdCBfQ2xhc3MqLCAKKwkJCQkJICAgICBfQXJnVHlwZXMuLi4+CisgICAgeworICAgICAgdHlwZWRlZiBfUmVzIChfQ2xhc3M6OipfRnVuY3RvcikoX0FyZ1R5cGVzLi4uKSBjb25zdDsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBfUmVzCisgICAgICAgIF9NX2NhbGwoX1RwJiBfX29iamVjdCwgY29uc3Qgdm9sYXRpbGUgX0NsYXNzICosIAorICAgICAgICAgICAgICAgIF9BcmdUeXBlcy4uLiBfX2FyZ3MpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIChfX29iamVjdC4qX19wbWYpKF9fYXJncy4uLik7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBfUmVzCisgICAgICAgIF9NX2NhbGwoX1RwJiBfX3B0ciwgY29uc3Qgdm9sYXRpbGUgdm9pZCAqLCBfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgICAgICB7IHJldHVybiAoKCpfX3B0cikuKl9fcG1mKShfX2FyZ3MuLi4pOyB9CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9SZXMgcmVzdWx0X3R5cGU7CisKKyAgICAgIGV4cGxpY2l0IF9NZW1fZm4oX0Z1bmN0b3IgX19wbWYpIDogX19wbWYoX19wbWYpIHsgfQorCisgICAgICAvLyBIYW5kbGUgb2JqZWN0cworICAgICAgX1JlcworICAgICAgb3BlcmF0b3IoKShjb25zdCBfQ2xhc3MmIF9fb2JqZWN0LCBfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgICAgeyByZXR1cm4gKF9fb2JqZWN0LipfX3BtZikoX19hcmdzLi4uKTsgfQorCisgICAgICAvLyBIYW5kbGUgcG9pbnRlcnMKKyAgICAgIF9SZXMKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX0NsYXNzKiBfX29iamVjdCwgX0FyZ1R5cGVzLi4uIF9fYXJncykgY29uc3QKKyAgICAgIHsgcmV0dXJuIChfX29iamVjdC0+Kl9fcG1mKShfX2FyZ3MuLi4pOyB9CisKKyAgICAgIC8vIEhhbmRsZSBzbWFydCBwb2ludGVycywgcmVmZXJlbmNlcyBhbmQgcG9pbnRlcnMgdG8gZGVyaXZlZAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBfUmVzIG9wZXJhdG9yKCkoX1RwJiBfX29iamVjdCwgX0FyZ1R5cGVzLi4uIF9fYXJncykgY29uc3QKKyAgICAgICAgeyByZXR1cm4gX01fY2FsbChfX29iamVjdCwgJl9fb2JqZWN0LCBfX2FyZ3MuLi4pOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgX0Z1bmN0b3IgX19wbWY7CisgICAgfTsKKworICAvLy8gSW1wbGVtZW50YXRpb24gb2YgQGMgbWVtX2ZuIGZvciB2b2xhdGlsZSBtZW1iZXIgZnVuY3Rpb24gcG9pbnRlcnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9DbGFzcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIGNsYXNzIF9NZW1fZm48X1JlcyAoX0NsYXNzOjoqKShfQXJnVHlwZXMuLi4pIHZvbGF0aWxlPgorICAgIDogcHVibGljIF9NYXliZV91bmFyeV9vcl9iaW5hcnlfZnVuY3Rpb248X1Jlcywgdm9sYXRpbGUgX0NsYXNzKiwgCisJCQkJCSAgICAgX0FyZ1R5cGVzLi4uPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1JlcyAoX0NsYXNzOjoqX0Z1bmN0b3IpKF9BcmdUeXBlcy4uLikgdm9sYXRpbGU7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgX1JlcworICAgICAgICBfTV9jYWxsKF9UcCYgX19vYmplY3QsIGNvbnN0IHZvbGF0aWxlIF9DbGFzcyAqLCAKKyAgICAgICAgICAgICAgICBfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgICAgICB7IHJldHVybiAoX19vYmplY3QuKl9fcG1mKShfX2FyZ3MuLi4pOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgX1JlcworICAgICAgICBfTV9jYWxsKF9UcCYgX19wdHIsIGNvbnN0IHZvbGF0aWxlIHZvaWQgKiwgX0FyZ1R5cGVzLi4uIF9fYXJncykgY29uc3QKKyAgICAgICAgeyByZXR1cm4gKCgqX19wdHIpLipfX3BtZikoX19hcmdzLi4uKTsgfQorCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfUmVzIHJlc3VsdF90eXBlOworCisgICAgICBleHBsaWNpdCBfTWVtX2ZuKF9GdW5jdG9yIF9fcG1mKSA6IF9fcG1mKF9fcG1mKSB7IH0KKworICAgICAgLy8gSGFuZGxlIG9iamVjdHMKKyAgICAgIF9SZXMKKyAgICAgIG9wZXJhdG9yKCkodm9sYXRpbGUgX0NsYXNzJiBfX29iamVjdCwgX0FyZ1R5cGVzLi4uIF9fYXJncykgY29uc3QKKyAgICAgIHsgcmV0dXJuIChfX29iamVjdC4qX19wbWYpKF9fYXJncy4uLik7IH0KKworICAgICAgLy8gSGFuZGxlIHBvaW50ZXJzCisgICAgICBfUmVzCisgICAgICBvcGVyYXRvcigpKHZvbGF0aWxlIF9DbGFzcyogX19vYmplY3QsIF9BcmdUeXBlcy4uLiBfX2FyZ3MpIGNvbnN0CisgICAgICB7IHJldHVybiAoX19vYmplY3QtPipfX3BtZikoX19hcmdzLi4uKTsgfQorCisgICAgICAvLyBIYW5kbGUgc21hcnQgcG9pbnRlcnMsIHJlZmVyZW5jZXMgYW5kIHBvaW50ZXJzIHRvIGRlcml2ZWQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgX1JlcworCW9wZXJhdG9yKCkoX1RwJiBfX29iamVjdCwgX0FyZ1R5cGVzLi4uIF9fYXJncykgY29uc3QKKyAgICAgICAgeyByZXR1cm4gX01fY2FsbChfX29iamVjdCwgJl9fb2JqZWN0LCBfX2FyZ3MuLi4pOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgX0Z1bmN0b3IgX19wbWY7CisgICAgfTsKKworICAvLy8gSW1wbGVtZW50YXRpb24gb2YgQGMgbWVtX2ZuIGZvciBjb25zdCB2b2xhdGlsZSBtZW1iZXIgZnVuY3Rpb24gcG9pbnRlcnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9DbGFzcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIGNsYXNzIF9NZW1fZm48X1JlcyAoX0NsYXNzOjoqKShfQXJnVHlwZXMuLi4pIGNvbnN0IHZvbGF0aWxlPgorICAgIDogcHVibGljIF9NYXliZV91bmFyeV9vcl9iaW5hcnlfZnVuY3Rpb248X1JlcywgY29uc3Qgdm9sYXRpbGUgX0NsYXNzKiwgCisJCQkJCSAgICAgX0FyZ1R5cGVzLi4uPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1JlcyAoX0NsYXNzOjoqX0Z1bmN0b3IpKF9BcmdUeXBlcy4uLikgY29uc3Qgdm9sYXRpbGU7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgX1JlcworICAgICAgICBfTV9jYWxsKF9UcCYgX19vYmplY3QsIGNvbnN0IHZvbGF0aWxlIF9DbGFzcyAqLCAKKyAgICAgICAgICAgICAgICBfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgICAgICB7IHJldHVybiAoX19vYmplY3QuKl9fcG1mKShfX2FyZ3MuLi4pOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgX1JlcworICAgICAgICBfTV9jYWxsKF9UcCYgX19wdHIsIGNvbnN0IHZvbGF0aWxlIHZvaWQgKiwgX0FyZ1R5cGVzLi4uIF9fYXJncykgY29uc3QKKyAgICAgICAgeyByZXR1cm4gKCgqX19wdHIpLipfX3BtZikoX19hcmdzLi4uKTsgfQorCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfUmVzIHJlc3VsdF90eXBlOworCisgICAgICBleHBsaWNpdCBfTWVtX2ZuKF9GdW5jdG9yIF9fcG1mKSA6IF9fcG1mKF9fcG1mKSB7IH0KKworICAgICAgLy8gSGFuZGxlIG9iamVjdHMKKyAgICAgIF9SZXMgCisgICAgICBvcGVyYXRvcigpKGNvbnN0IHZvbGF0aWxlIF9DbGFzcyYgX19vYmplY3QsIF9BcmdUeXBlcy4uLiBfX2FyZ3MpIGNvbnN0CisgICAgICB7IHJldHVybiAoX19vYmplY3QuKl9fcG1mKShfX2FyZ3MuLi4pOyB9CisKKyAgICAgIC8vIEhhbmRsZSBwb2ludGVycworICAgICAgX1JlcyAKKyAgICAgIG9wZXJhdG9yKCkoY29uc3Qgdm9sYXRpbGUgX0NsYXNzKiBfX29iamVjdCwgX0FyZ1R5cGVzLi4uIF9fYXJncykgY29uc3QKKyAgICAgIHsgcmV0dXJuIChfX29iamVjdC0+Kl9fcG1mKShfX2FyZ3MuLi4pOyB9CisKKyAgICAgIC8vIEhhbmRsZSBzbWFydCBwb2ludGVycywgcmVmZXJlbmNlcyBhbmQgcG9pbnRlcnMgdG8gZGVyaXZlZAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBfUmVzIG9wZXJhdG9yKCkoX1RwJiBfX29iamVjdCwgX0FyZ1R5cGVzLi4uIF9fYXJncykgY29uc3QKKyAgICAgICAgeyByZXR1cm4gX01fY2FsbChfX29iamVjdCwgJl9fb2JqZWN0LCBfX2FyZ3MuLi4pOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgX0Z1bmN0b3IgX19wbWY7CisgICAgfTsKKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9DbGFzcz4KKyAgICBjbGFzcyBfTWVtX2ZuPF9SZXMgX0NsYXNzOjoqPgorICAgIHsKKyAgICAgIC8vIFRoaXMgYml0IG9mIGdlbml1cyBpcyBkdWUgdG8gUGV0ZXIgRGltb3YsIGltcHJvdmVkIHNsaWdodGx5IGJ5CisgICAgICAvLyBEb3VnbGFzIEdyZWdvci4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgX1JlcyYKKyAgICAgICAgX01fY2FsbChfVHAmIF9fb2JqZWN0LCBfQ2xhc3MgKikgY29uc3QKKyAgICAgICAgeyByZXR1cm4gX19vYmplY3QuKl9fcG07IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgICAgIF9SZXMmCisgICAgICAgIF9NX2NhbGwoX1RwJiBfX29iamVjdCwgX1VwICogY29uc3QgKikgY29uc3QKKyAgICAgICAgeyByZXR1cm4gKCpfX29iamVjdCkuKl9fcG07IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgICAgIGNvbnN0IF9SZXMmCisgICAgICAgIF9NX2NhbGwoX1RwJiBfX29iamVjdCwgY29uc3QgX1VwICogY29uc3QgKikgY29uc3QKKyAgICAgICAgeyByZXR1cm4gKCpfX29iamVjdCkuKl9fcG07IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBjb25zdCBfUmVzJgorICAgICAgICBfTV9jYWxsKF9UcCYgX19vYmplY3QsIGNvbnN0IF9DbGFzcyAqKSBjb25zdAorICAgICAgICB7IHJldHVybiBfX29iamVjdC4qX19wbTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIGNvbnN0IF9SZXMmCisgICAgICAgIF9NX2NhbGwoX1RwJiBfX3B0ciwgY29uc3Qgdm9sYXRpbGUgdm9pZCopIGNvbnN0CisgICAgICAgIHsgcmV0dXJuICgqX19wdHIpLipfX3BtOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RhdGljIF9UcCYgX19nZXRfcmVmKCk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RhdGljIF9fc2ZpbmFlX3R5cGVzOjpfX29uZSBfX2NoZWNrX2NvbnN0KF9UcCYsIF9DbGFzcyopOworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgICAgIHN0YXRpYyBfX3NmaW5hZV90eXBlczo6X19vbmUgX19jaGVja19jb25zdChfVHAmLCBfVXAgKiBjb25zdCAqKTsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgICAgICBzdGF0aWMgX19zZmluYWVfdHlwZXM6Ol9fdHdvIF9fY2hlY2tfY29uc3QoX1RwJiwgY29uc3QgX1VwICogY29uc3QgKik7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIHN0YXRpYyBfX3NmaW5hZV90eXBlczo6X190d28gX19jaGVja19jb25zdChfVHAmLCBjb25zdCBfQ2xhc3MqKTsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RhdGljIF9fc2ZpbmFlX3R5cGVzOjpfX3R3byBfX2NoZWNrX2NvbnN0KF9UcCYsIGNvbnN0IHZvbGF0aWxlIHZvaWQqKTsKKworICAgIHB1YmxpYzoKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RydWN0IF9SZXN1bHRfdHlwZQorCTogX01lbV9mbl9jb25zdF9vcl9ub248X1JlcywKKwkgIChzaXplb2YoX19zZmluYWVfdHlwZXM6Ol9fdHdvKQorCSAgID09IHNpemVvZihfX2NoZWNrX2NvbnN0PF9UcD4oX19nZXRfcmVmPF9UcD4oKSwgKF9UcCopMCkpKT4KKyAgICAgICAgeyB9OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2lnbmF0dXJlPgorICAgICAgICBzdHJ1Y3QgcmVzdWx0OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ1ZNZW0sIHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RydWN0IHJlc3VsdDxfQ1ZNZW0oX1RwKT4KKwk6IHB1YmxpYyBfUmVzdWx0X3R5cGU8X1RwPiB7IH07CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DVk1lbSwgdHlwZW5hbWUgX1RwPgorICAgICAgICBzdHJ1Y3QgcmVzdWx0PF9DVk1lbShfVHAmKT4KKwk6IHB1YmxpYyBfUmVzdWx0X3R5cGU8X1RwPiB7IH07CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfTWVtX2ZuKF9SZXMgX0NsYXNzOjoqX19wbSkgOiBfX3BtKF9fcG0pIHsgfQorCisgICAgICAvLyBIYW5kbGUgb2JqZWN0cworICAgICAgX1JlcyYKKyAgICAgIG9wZXJhdG9yKCkoX0NsYXNzJiBfX29iamVjdCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fb2JqZWN0LipfX3BtOyB9CisKKyAgICAgIGNvbnN0IF9SZXMmCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9DbGFzcyYgX19vYmplY3QpIGNvbnN0CisgICAgICB7IHJldHVybiBfX29iamVjdC4qX19wbTsgfQorCisgICAgICAvLyBIYW5kbGUgcG9pbnRlcnMKKyAgICAgIF9SZXMmCisgICAgICBvcGVyYXRvcigpKF9DbGFzcyogX19vYmplY3QpIGNvbnN0CisgICAgICB7IHJldHVybiBfX29iamVjdC0+Kl9fcG07IH0KKworICAgICAgY29uc3QgX1JlcyYKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX0NsYXNzKiBfX29iamVjdCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fb2JqZWN0LT4qX19wbTsgfQorCisgICAgICAvLyBIYW5kbGUgc21hcnQgcG9pbnRlcnMgYW5kIGRlcml2ZWQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgdHlwZW5hbWUgX1Jlc3VsdF90eXBlPF9UcD46OnR5cGUKKyAgICAgICAgb3BlcmF0b3IoKShfVHAmIF9fdW5rbm93bikgY29uc3QKKyAgICAgICAgeyByZXR1cm4gX01fY2FsbChfX3Vua25vd24sICZfX3Vua25vd24pOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgX1JlcyBfQ2xhc3M6OipfX3BtOworICAgIH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgUmV0dXJucyBhIGZ1bmN0aW9uIG9iamVjdCB0aGF0IGZvcndhcmRzIHRvIHRoZSBtZW1iZXIKKyAgICogIHBvaW50ZXIgQGEgcG0uCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9DbGFzcz4KKyAgICBpbmxpbmUgX01lbV9mbjxfVHAgX0NsYXNzOjoqPgorICAgIG1lbV9mbihfVHAgX0NsYXNzOjoqIF9fcG0pCisgICAgeworICAgICAgcmV0dXJuIF9NZW1fZm48X1RwIF9DbGFzczo6Kj4oX19wbSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHR5cGUgX1RwIGlzIGEgZnVuY3Rpb24gb2JqZWN0CisgICAqICBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHN1YmV4cHJlc3Npb24gd2hlbiBldmFsdWF0aW5nIGNhbGxzIHRvCisgICAqICBmdW5jdGlvbiBvYmplY3RzIHJldHVybmVkIGJ5IGJpbmQoKS4gW1RSMSAzLjYuMV0KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfYmluZF9leHByZXNzaW9uCisgICAgeyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjb25zdCBib29sIGlzX2JpbmRfZXhwcmVzc2lvbjxfVHA+Ojp2YWx1ZTsKKworICAvKioKKyAgICogIEBicmllZiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiB0eXBlIF9UcCBpcyBhIHBsYWNlaG9sZGVyIGluIGEKKyAgICogIGJpbmQoKSBleHByZXNzaW9uIGFuZCwgaWYgc28sIHdoaWNoIHBsYWNlaG9sZGVyIGl0IGlzLiBbVFIxIDMuNi4yXQorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19wbGFjZWhvbGRlcgorICAgIHsgc3RhdGljIGNvbnN0IGludCB2YWx1ZSA9IDA7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNvbnN0IGludCBpc19wbGFjZWhvbGRlcjxfVHA+Ojp2YWx1ZTsKKworICAvLy8gVGhlIHR5cGUgb2YgcGxhY2Vob2xkZXIgb2JqZWN0cyBkZWZpbmVkIGJ5IGxpYnN0ZGMrKy4KKyAgdGVtcGxhdGU8aW50IF9OdW0+IHN0cnVjdCBfUGxhY2Vob2xkZXIgeyB9OworCisgIC8qKiBAbmFtZXNwYWNlIHN0ZDo6cGxhY2Vob2xkZXJzCisgICAqICBAYnJpZWYgSVNPIEMrKyAweCBlbnRpdGllcyBzdWIgbmFtZXNwYWNlIGZvciBmdW5jdGlvbmFsLgorICAgKgorICAgKiAgRGVmaW5lIGEgbGFyZ2UgbnVtYmVyIG9mIHBsYWNlaG9sZGVycy4gVGhlcmUgaXMgbm8gd2F5IHRvCisgICAqICBzaW1wbGlmeSB0aGlzIHdpdGggdmFyaWFkaWMgdGVtcGxhdGVzLCBiZWNhdXNlIHdlJ3JlIGludHJvZHVjaW5nCisgICAqICB1bmlxdWUgbmFtZXMgZm9yIGVhY2guCisgICAqLworICBuYW1lc3BhY2UgcGxhY2Vob2xkZXJzIAorICB7IAorICAgIG5hbWVzcGFjZSAKKyAgICB7CisgICAgICBfUGxhY2Vob2xkZXI8MT4gXzE7CisgICAgICBfUGxhY2Vob2xkZXI8Mj4gXzI7CisgICAgICBfUGxhY2Vob2xkZXI8Mz4gXzM7CisgICAgICBfUGxhY2Vob2xkZXI8ND4gXzQ7CisgICAgICBfUGxhY2Vob2xkZXI8NT4gXzU7CisgICAgICBfUGxhY2Vob2xkZXI8Nj4gXzY7CisgICAgICBfUGxhY2Vob2xkZXI8Nz4gXzc7CisgICAgICBfUGxhY2Vob2xkZXI8OD4gXzg7CisgICAgICBfUGxhY2Vob2xkZXI8OT4gXzk7CisgICAgICBfUGxhY2Vob2xkZXI8MTA+IF8xMDsKKyAgICAgIF9QbGFjZWhvbGRlcjwxMT4gXzExOworICAgICAgX1BsYWNlaG9sZGVyPDEyPiBfMTI7CisgICAgICBfUGxhY2Vob2xkZXI8MTM+IF8xMzsKKyAgICAgIF9QbGFjZWhvbGRlcjwxND4gXzE0OworICAgICAgX1BsYWNlaG9sZGVyPDE1PiBfMTU7CisgICAgICBfUGxhY2Vob2xkZXI8MTY+IF8xNjsKKyAgICAgIF9QbGFjZWhvbGRlcjwxNz4gXzE3OworICAgICAgX1BsYWNlaG9sZGVyPDE4PiBfMTg7CisgICAgICBfUGxhY2Vob2xkZXI8MTk+IF8xOTsKKyAgICAgIF9QbGFjZWhvbGRlcjwyMD4gXzIwOworICAgICAgX1BsYWNlaG9sZGVyPDIxPiBfMjE7CisgICAgICBfUGxhY2Vob2xkZXI8MjI+IF8yMjsKKyAgICAgIF9QbGFjZWhvbGRlcjwyMz4gXzIzOworICAgICAgX1BsYWNlaG9sZGVyPDI0PiBfMjQ7CisgICAgICBfUGxhY2Vob2xkZXI8MjU+IF8yNTsKKyAgICAgIF9QbGFjZWhvbGRlcjwyNj4gXzI2OworICAgICAgX1BsYWNlaG9sZGVyPDI3PiBfMjc7CisgICAgICBfUGxhY2Vob2xkZXI8Mjg+IF8yODsKKyAgICAgIF9QbGFjZWhvbGRlcjwyOT4gXzI5OworICAgIH0gCisgIH0KKworICAvKioKKyAgICogIFBhcnRpYWwgc3BlY2lhbGl6YXRpb24gb2YgaXNfcGxhY2Vob2xkZXIgdGhhdCBwcm92aWRlcyB0aGUgcGxhY2Vob2xkZXIKKyAgICogIG51bWJlciBmb3IgdGhlIHBsYWNlaG9sZGVyIG9iamVjdHMgZGVmaW5lZCBieSBsaWJzdGRjKysuCisgICAqLworICB0ZW1wbGF0ZTxpbnQgX051bT4KKyAgICBzdHJ1Y3QgaXNfcGxhY2Vob2xkZXI8X1BsYWNlaG9sZGVyPF9OdW0+ID4KKyAgICB7IHN0YXRpYyBjb25zdCBpbnQgdmFsdWUgPSBfTnVtOyB9OworCisgIHRlbXBsYXRlPGludCBfTnVtPgorICAgIGNvbnN0IGludCBpc19wbGFjZWhvbGRlcjxfUGxhY2Vob2xkZXI8X051bT4gPjo6dmFsdWU7CisKKyAgLyoqCisgICAqIFN0b3JlcyBhIHR1cGxlIG9mIGluZGljZXMuIFVzZWQgYnkgYmluZCgpIHRvIGV4dHJhY3QgdGhlIGVsZW1lbnRzCisgICAqIGluIGEgdHVwbGUuIAorICAgKi8KKyAgdGVtcGxhdGU8aW50Li4uIF9JbmRleGVzPgorICAgIHN0cnVjdCBfSW5kZXhfdHVwbGUgeyB9OworCisgIC8vLyBCdWlsZHMgYW4gX0luZGV4X3R1cGxlPDAsIDEsIDIsIC4uLiwgX051bS0xPi4KKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX051bSwgdHlwZW5hbWUgX1R1cGxlID0gX0luZGV4X3R1cGxlPD4gPgorICAgIHN0cnVjdCBfQnVpbGRfaW5kZXhfdHVwbGU7CisgCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IF9OdW0sIGludC4uLiBfSW5kZXhlcz4gCisgICAgc3RydWN0IF9CdWlsZF9pbmRleF90dXBsZTxfTnVtLCBfSW5kZXhfdHVwbGU8X0luZGV4ZXMuLi4+ID4KKyAgICA6IF9CdWlsZF9pbmRleF90dXBsZTxfTnVtIC0gMSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgX0luZGV4X3R1cGxlPF9JbmRleGVzLi4uLCBzaXplb2YuLi4oX0luZGV4ZXMpPiA+CisgICAgeworICAgIH07CisKKyAgdGVtcGxhdGU8aW50Li4uIF9JbmRleGVzPgorICAgIHN0cnVjdCBfQnVpbGRfaW5kZXhfdHVwbGU8MCwgX0luZGV4X3R1cGxlPF9JbmRleGVzLi4uPiA+CisgICAgeworICAgICAgdHlwZWRlZiBfSW5kZXhfdHVwbGU8X0luZGV4ZXMuLi4+IF9fdHlwZTsKKyAgICB9OworCisgIC8qKiAKKyAgICogVXNlZCBieSBfU2FmZV90dXBsZV9lbGVtZW50IHRvIGluZGljYXRlIHRoYXQgdGhlcmUgaXMgbm8gdHVwbGUKKyAgICogZWxlbWVudCBhdCB0aGlzIHBvc2l0aW9uLgorICAgKi8KKyAgc3RydWN0IF9Ob190dXBsZV9lbGVtZW50OworCisgIC8qKgorICAgKiBJbXBsZW1lbnRhdGlvbiBoZWxwZXIgZm9yIF9TYWZlX3R1cGxlX2VsZW1lbnQuIFRoaXMgcHJpbWFyeQorICAgKiB0ZW1wbGF0ZSBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIGl0IGlzIHNhZmUgdG8gdXNlIEBjCisgICAqIHR1cGxlX2VsZW1lbnQuCisgICAqLworICB0ZW1wbGF0ZTxpbnQgX19pLCB0eXBlbmFtZSBfVHVwbGUsIGJvb2wgX0lzU2FmZT4KKyAgICBzdHJ1Y3QgX1NhZmVfdHVwbGVfZWxlbWVudF9pbXBsCisgICAgOiB0dXBsZV9lbGVtZW50PF9faSwgX1R1cGxlPiB7IH07CisKKyAgLyoqCisgICAqIEltcGxlbWVudGF0aW9uIGhlbHBlciBmb3IgX1NhZmVfdHVwbGVfZWxlbWVudC4gVGhpcyBwYXJ0aWFsCisgICAqIHNwZWNpYWxpemF0aW9uIGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgaXQgaXMgbm90IHNhZmUgdG8gdXNlIEBjCisgICAqIHR1cGxlX2VsZW1lbnQuIFdlIGp1c3QgcmV0dXJuIEBjIF9Ob190dXBsZV9lbGVtZW50LgorICAgKi8KKyAgdGVtcGxhdGU8aW50IF9faSwgdHlwZW5hbWUgX1R1cGxlPgorICAgIHN0cnVjdCBfU2FmZV90dXBsZV9lbGVtZW50X2ltcGw8X19pLCBfVHVwbGUsIGZhbHNlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX05vX3R1cGxlX2VsZW1lbnQgdHlwZTsKKyAgICB9OworCisgIC8qKgorICAgKiBMaWtlIHR1cGxlX2VsZW1lbnQsIGJ1dCByZXR1cm5zIEBjIF9Ob190dXBsZV9lbGVtZW50IHdoZW4KKyAgICogdHVwbGVfZWxlbWVudCB3b3VsZCByZXR1cm4gYW4gZXJyb3IuCisgICAqLworIHRlbXBsYXRlPGludCBfX2ksIHR5cGVuYW1lIF9UdXBsZT4KKyAgIHN0cnVjdCBfU2FmZV90dXBsZV9lbGVtZW50CisgICA6IF9TYWZlX3R1cGxlX2VsZW1lbnRfaW1wbDxfX2ksIF9UdXBsZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19pID49IDAgJiYgX19pIDwgdHVwbGVfc2l6ZTxfVHVwbGU+Ojp2YWx1ZSk+CisgICB7CisgICB9OworCisgIC8qKgorICAgKiAgTWFwcyBhbiBhcmd1bWVudCB0byBiaW5kKCkgaW50byBhbiBhY3R1YWwgYXJndW1lbnQgdG8gdGhlIGJvdW5kCisgICAqICBmdW5jdGlvbiBvYmplY3QgW1RSMSAzLjYuMy81XS4gT25seSB0aGUgZmlyc3QgcGFyYW1ldGVyIHNob3VsZAorICAgKiAgYmUgc3BlY2lmaWVkOiB0aGUgcmVzdCBhcmUgdXNlZCB0byBkZXRlcm1pbmUgYW1vbmcgdGhlIHZhcmlvdXMKKyAgICogIGltcGxlbWVudGF0aW9ucy4gTm90ZSB0aGF0LCBhbHRob3VnaCB0aGlzIGNsYXNzIGlzIGEgZnVuY3Rpb24KKyAgICogIG9iamVjdCwgaXQgaXNuJ3QgZW50aXJlbHkgbm9ybWFsIGJlY2F1c2UgaXQgdGFrZXMgb25seSB0d28KKyAgICogIHBhcmFtZXRlcnMgcmVnYXJkbGVzcyBvZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZQorICAgKiAgYmluZCBleHByZXNzaW9uLiBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIHRoZSBib3VuZCBhcmd1bWVudCBhbmQKKyAgICogIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIGEgdHVwbGUgY29udGFpbmluZyByZWZlcmVuY2VzIHRvIHRoZQorICAgKiAgcmVzdCBvZiB0aGUgYXJndW1lbnRzLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZywKKyAgICAgICAgICAgYm9vbCBfSXNCaW5kRXhwID0gaXNfYmluZF9leHByZXNzaW9uPF9Bcmc+Ojp2YWx1ZSwKKyAgICAgICAgICAgYm9vbCBfSXNQbGFjZWhvbGRlciA9IChpc19wbGFjZWhvbGRlcjxfQXJnPjo6dmFsdWUgPiAwKT4KKyAgICBjbGFzcyBfTXU7CisKKyAgLyoqCisgICAqICBJZiB0aGUgYXJndW1lbnQgaXMgcmVmZXJlbmNlX3dyYXBwZXI8X1RwPiwgcmV0dXJucyB0aGUKKyAgICogIHVuZGVybHlpbmcgcmVmZXJlbmNlLiBbVFIxIDMuNi4zLzUgYnVsbGV0IDFdCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgX011PHJlZmVyZW5jZV93cmFwcGVyPF9UcD4sIGZhbHNlLCBmYWxzZT4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfVHAmIHJlc3VsdF90eXBlOworCisgICAgICAvKiBOb3RlOiBUaGlzIHdvbid0IGFjdHVhbGx5IHdvcmsgZm9yIGNvbnN0IHZvbGF0aWxlCisgICAgICAgKiByZWZlcmVuY2Vfd3JhcHBlcnMsIGJlY2F1c2UgcmVmZXJlbmNlX3dyYXBwZXI6OmdldCgpIGlzIGNvbnN0CisgICAgICAgKiBidXQgbm90IHZvbGF0aWxlLXF1YWxpZmllZC4gVGhpcyBtaWdodCBiZSBhIGRlZmVjdCBpbiB0aGUgVFIuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DVlJlZiwgdHlwZW5hbWUgX1R1cGxlPgorICAgICAgICByZXN1bHRfdHlwZQorICAgICAgICBvcGVyYXRvcigpKF9DVlJlZiYgX19hcmcsIGNvbnN0IF9UdXBsZSYpIGNvbnN0IHZvbGF0aWxlCisgICAgICAgIHsgcmV0dXJuIF9fYXJnLmdldCgpOyB9CisgICAgfTsKKworICAvKioKKyAgICogIElmIHRoZSBhcmd1bWVudCBpcyBhIGJpbmQgZXhwcmVzc2lvbiwgd2UgaW52b2tlIHRoZSB1bmRlcmx5aW5nCisgICAqICBmdW5jdGlvbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBjdi1xdWFsaWZpZXJzIGFzIHdlIGFyZSBnaXZlbiBhbmQKKyAgICogIHBhc3MgYWxvbmcgYWxsIG9mIG91ciBhcmd1bWVudHMgKHVud3JhcHBlZCkuIFtUUjEgMy42LjMvNSBidWxsZXQgMl0KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Bcmc+CisgICAgY2xhc3MgX011PF9BcmcsIHRydWUsIGZhbHNlPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2lnbmF0dXJlPiBjbGFzcyByZXN1bHQ7CisKKyAgICAgIC8vIERldGVybWluZSB0aGUgcmVzdWx0IHR5cGUgd2hlbiB3ZSBwYXNzIHRoZSBhcmd1bWVudHMgYWxvbmcuIFRoaXMKKyAgICAgIC8vIGludm9sdmVzIHBhc3NpbmcgYWxvbmcgdGhlIGN2LXF1YWxpZmllcnMgcGxhY2VkIG9uIF9NdSBhbmQKKyAgICAgIC8vIHVud3JhcHBpbmcgdGhlIGFyZ3VtZW50IGJ1bmRsZS4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DVk11LCB0eXBlbmFtZSBfQ1ZBcmcsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICBjbGFzcyByZXN1bHQ8X0NWTXUoX0NWQXJnLCB0dXBsZTxfQXJncy4uLj4pPgorCTogcHVibGljIHJlc3VsdF9vZjxfQ1ZBcmcoX0FyZ3MuLi4pPiB7IH07CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DVkFyZywgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHR5cGVuYW1lIHJlc3VsdF9vZjxfQ1ZBcmcoX0FyZ3MuLi4pPjo6dHlwZQorICAgICAgICBvcGVyYXRvcigpKF9DVkFyZyYgX19hcmcsCisJCSAgIGNvbnN0IHR1cGxlPF9BcmdzLi4uPiYgX190dXBsZSkgY29uc3Qgdm9sYXRpbGUKKyAgICAgICAgeworCSAgLy8gQ29uc3RydWN0IGFuIGluZGV4IHR1cGxlIGFuZCBmb3J3YXJkIHRvIF9fY2FsbAorCSAgdHlwZWRlZiB0eXBlbmFtZSBfQnVpbGRfaW5kZXhfdHVwbGU8c2l6ZW9mLi4uKF9BcmdzKT46Ol9fdHlwZQorCSAgICBfSW5kZXhlczsKKwkgIHJldHVybiB0aGlzLT5fX2NhbGwoX19hcmcsIF9fdHVwbGUsIF9JbmRleGVzKCkpOworCX0KKworICAgIHByaXZhdGU6CisgICAgICAvLyBJbnZva2VzIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIG9iamVjdCBfX2FyZyBieSB1bnBhY2tpbmcgYWxsCisgICAgICAvLyBvZiB0aGUgYXJndW1lbnRzIGluIHRoZSB0dXBsZS4gCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ1ZBcmcsIHR5cGVuYW1lLi4uIF9BcmdzLCBpbnQuLi4gX0luZGV4ZXM+CisgICAgICAgIHR5cGVuYW1lIHJlc3VsdF9vZjxfQ1ZBcmcoX0FyZ3MuLi4pPjo6dHlwZQorICAgICAgICBfX2NhbGwoX0NWQXJnJiBfX2FyZywgY29uc3QgdHVwbGU8X0FyZ3MuLi4+JiBfX3R1cGxlLAorCSAgICAgICBjb25zdCBfSW5kZXhfdHVwbGU8X0luZGV4ZXMuLi4+JikgY29uc3Qgdm9sYXRpbGUKKyAgICAgICAgeworCSAgcmV0dXJuIF9fYXJnKHRyMTo6Z2V0PF9JbmRleGVzPihfX3R1cGxlKS4uLik7CisJfQorICAgIH07CisKKyAgLyoqCisgICAqICBJZiB0aGUgYXJndW1lbnQgaXMgYSBwbGFjZWhvbGRlciBmb3IgdGhlIE50aCBhcmd1bWVudCwgcmV0dXJucworICAgKiAgYSByZWZlcmVuY2UgdG8gdGhlIE50aCBhcmd1bWVudCB0byB0aGUgYmluZCBmdW5jdGlvbiBvYmplY3QuCisgICAqICBbVFIxIDMuNi4zLzUgYnVsbGV0IDNdCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQXJnPgorICAgIGNsYXNzIF9NdTxfQXJnLCBmYWxzZSwgdHJ1ZT4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZT4gY2xhc3MgcmVzdWx0OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ1ZNdSwgdHlwZW5hbWUgX0NWQXJnLCB0eXBlbmFtZSBfVHVwbGU+CisgICAgICAgIGNsYXNzIHJlc3VsdDxfQ1ZNdShfQ1ZBcmcsIF9UdXBsZSk+CisgICAgICAgIHsKKwkgIC8vIEFkZCBhIHJlZmVyZW5jZSwgaWYgaXQgaGFzbid0IGFscmVhZHkgYmVlbiBkb25lIGZvciB1cy4KKwkgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIGJlIGEgbGl0dGxlIGJpdCBzbG9wcHkgaW4gY29uc3RydWN0aW5nCisJICAvLyB0aGUgdHVwbGUgdGhhdCB3ZSBwYXNzIHRvIHJlc3VsdF9vZjwuLi4+LgorCSAgdHlwZWRlZiB0eXBlbmFtZSBfU2FmZV90dXBsZV9lbGVtZW50PChpc19wbGFjZWhvbGRlcjxfQXJnPjo6dmFsdWUKKwkJCQkJCS0gMSksIF9UdXBsZT46OnR5cGUKKwkgICAgX19iYXNlX3R5cGU7CisKKwlwdWJsaWM6CisJICB0eXBlZGVmIHR5cGVuYW1lIGFkZF9yZWZlcmVuY2U8X19iYXNlX3R5cGU+Ojp0eXBlIHR5cGU7CisJfTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R1cGxlPgorICAgICAgICB0eXBlbmFtZSByZXN1bHQ8X011KF9BcmcsIF9UdXBsZSk+Ojp0eXBlCisgICAgICAgIG9wZXJhdG9yKCkoY29uc3Qgdm9sYXRpbGUgX0FyZyYsIGNvbnN0IF9UdXBsZSYgX190dXBsZSkgY29uc3Qgdm9sYXRpbGUKKyAgICAgICAgeworCSAgcmV0dXJuIDo6c3RkOjp0cjE6OmdldDwoaXNfcGxhY2Vob2xkZXI8X0FyZz46OnZhbHVlIC0gMSk+KF9fdHVwbGUpOworCX0KKyAgICB9OworCisgIC8qKgorICAgKiAgSWYgdGhlIGFyZ3VtZW50IGlzIGp1c3QgYSB2YWx1ZSwgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGF0CisgICAqICB2YWx1ZS4gVGhlIGN2LXF1YWxpZmllcnMgb24gdGhlIHJlZmVyZW5jZSBhcmUgdGhlIHNhbWUgYXMgdGhlCisgICAqICBjdi1xdWFsaWZpZXJzIG9uIHRoZSBfTXUgb2JqZWN0LiBbVFIxIDMuNi4zLzUgYnVsbGV0IDRdCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQXJnPgorICAgIGNsYXNzIF9NdTxfQXJnLCBmYWxzZSwgZmFsc2U+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9TaWduYXR1cmU+IHN0cnVjdCByZXN1bHQ7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DVk11LCB0eXBlbmFtZSBfQ1ZBcmcsIHR5cGVuYW1lIF9UdXBsZT4KKyAgICAgICAgc3RydWN0IHJlc3VsdDxfQ1ZNdShfQ1ZBcmcsIF9UdXBsZSk+CisgICAgICAgIHsKKwkgIHR5cGVkZWYgdHlwZW5hbWUgYWRkX3JlZmVyZW5jZTxfQ1ZBcmc+Ojp0eXBlIHR5cGU7CisJfTsKKworICAgICAgLy8gUGljayB1cCB0aGUgY3YtcXVhbGlmaWVycyBvZiB0aGUgYXJndW1lbnQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DVkFyZywgdHlwZW5hbWUgX1R1cGxlPgorICAgICAgICBfQ1ZBcmcmCisgICAgICAgIG9wZXJhdG9yKCkoX0NWQXJnJiBfX2FyZywgY29uc3QgX1R1cGxlJikgY29uc3Qgdm9sYXRpbGUKKyAgICAgICAgeyByZXR1cm4gX19hcmc7IH0KKyAgICB9OworCisgIC8qKgorICAgKiAgTWFwcyBtZW1iZXIgcG9pbnRlcnMgaW50byBpbnN0YW5jZXMgb2YgX01lbV9mbiBidXQgbGVhdmVzIGFsbAorICAgKiAgb3RoZXIgZnVuY3Rpb24gb2JqZWN0cyB1bnRvdWNoZWQuIFVzZWQgYnkgdHIxOjpiaW5kKCkuIFRoZQorICAgKiAgcHJpbWFyeSB0ZW1wbGF0ZSBoYW5kbGVzIHRoZSBub24tLW1lbWJlci1wb2ludGVyIGNhc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9NYXliZV93cmFwX21lbWJlcl9wb2ludGVyCisgICAgeworICAgICAgdHlwZWRlZiBfVHAgdHlwZTsKKyAgICAgIAorICAgICAgc3RhdGljIGNvbnN0IF9UcCYKKyAgICAgIF9fZG9fd3JhcChjb25zdCBfVHAmIF9feCkKKyAgICAgIHsgcmV0dXJuIF9feDsgfQorICAgIH07CisKKyAgLyoqCisgICAqICBNYXBzIG1lbWJlciBwb2ludGVycyBpbnRvIGluc3RhbmNlcyBvZiBfTWVtX2ZuIGJ1dCBsZWF2ZXMgYWxsCisgICAqICBvdGhlciBmdW5jdGlvbiBvYmplY3RzIHVudG91Y2hlZC4gVXNlZCBieSB0cjE6OmJpbmQoKS4gVGhpcworICAgKiAgcGFydGlhbCBzcGVjaWFsaXphdGlvbiBoYW5kbGVzIHRoZSBtZW1iZXIgcG9pbnRlciBjYXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ2xhc3M+CisgICAgc3RydWN0IF9NYXliZV93cmFwX21lbWJlcl9wb2ludGVyPF9UcCBfQ2xhc3M6Oio+CisgICAgeworICAgICAgdHlwZWRlZiBfTWVtX2ZuPF9UcCBfQ2xhc3M6Oio+IHR5cGU7CisgICAgICAKKyAgICAgIHN0YXRpYyB0eXBlCisgICAgICBfX2RvX3dyYXAoX1RwIF9DbGFzczo6KiBfX3BtKQorICAgICAgeyByZXR1cm4gdHlwZShfX3BtKTsgfQorICAgIH07CisKKyAgLy8vIFR5cGUgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdCByZXR1cm5lZCBmcm9tIGJpbmQoKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBzdHJ1Y3QgX0JpbmQ7CisKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yLCB0eXBlbmFtZS4uLiBfQm91bmRfYXJncz4KKyAgICBjbGFzcyBfQmluZDxfRnVuY3RvcihfQm91bmRfYXJncy4uLik+CisgICAgOiBwdWJsaWMgX1dlYWtfcmVzdWx0X3R5cGU8X0Z1bmN0b3I+CisgICAgeworICAgICAgdHlwZWRlZiBfQmluZCBfX3NlbGZfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0J1aWxkX2luZGV4X3R1cGxlPHNpemVvZi4uLihfQm91bmRfYXJncyk+OjpfX3R5cGUgCisgICAgICAgIF9Cb3VuZF9pbmRleGVzOworCisgICAgICBfRnVuY3RvciBfTV9mOworICAgICAgdHVwbGU8X0JvdW5kX2FyZ3MuLi4+IF9NX2JvdW5kX2FyZ3M7CisKKyAgICAgIC8vIENhbGwgdW5xdWFsaWZpZWQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzLCBpbnQuLi4gX0luZGV4ZXM+CisgICAgICAgIHR5cGVuYW1lIHJlc3VsdF9vZjwKKyAgICAgICAgICAgICAgICAgICBfRnVuY3Rvcih0eXBlbmFtZSByZXN1bHRfb2Y8X011PF9Cb3VuZF9hcmdzPiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX0JvdW5kX2FyZ3MsIHR1cGxlPF9BcmdzLi4uPik+Ojp0eXBlLi4uKQorICAgICAgICAgICAgICAgICA+Ojp0eXBlCisgICAgICAgIF9fY2FsbChjb25zdCB0dXBsZTxfQXJncy4uLj4mIF9fYXJncywgX0luZGV4X3R1cGxlPF9JbmRleGVzLi4uPikKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiBfTV9mKF9NdTxfQm91bmRfYXJncz4oKQorICAgICAgICAgICAgICAgICAgICAgICh0cjE6OmdldDxfSW5kZXhlcz4oX01fYm91bmRfYXJncyksIF9fYXJncykuLi4pOworICAgICAgICB9CisKKyAgICAgIC8vIENhbGwgYXMgY29uc3QKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzLCBpbnQuLi4gX0luZGV4ZXM+CisgICAgICAgIHR5cGVuYW1lIHJlc3VsdF9vZjwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBfRnVuY3Rvcih0eXBlbmFtZSByZXN1bHRfb2Y8X011PF9Cb3VuZF9hcmdzPiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBfQm91bmRfYXJncywgdHVwbGU8X0FyZ3MuLi4+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID46OnR5cGUuLi4pPjo6dHlwZQorICAgICAgICBfX2NhbGwoY29uc3QgdHVwbGU8X0FyZ3MuLi4+JiBfX2FyZ3MsIF9JbmRleF90dXBsZTxfSW5kZXhlcy4uLj4pIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gX01fZihfTXU8X0JvdW5kX2FyZ3M+KCkKKyAgICAgICAgICAgICAgICAgICAgICAodHIxOjpnZXQ8X0luZGV4ZXM+KF9NX2JvdW5kX2FyZ3MpLCBfX2FyZ3MpLi4uKTsKKyAgICAgICAgfQorCisgICAgICAvLyBDYWxsIGFzIHZvbGF0aWxlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncywgaW50Li4uIF9JbmRleGVzPgorICAgICAgICB0eXBlbmFtZSByZXN1bHRfb2Y8CisgICAgICAgICAgICAgICAgICAgdm9sYXRpbGUgX0Z1bmN0b3IodHlwZW5hbWUgcmVzdWx0X29mPF9NdTxfQm91bmRfYXJncz4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9sYXRpbGUgX0JvdW5kX2FyZ3MsIHR1cGxlPF9BcmdzLi4uPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+Ojp0eXBlLi4uKT46OnR5cGUKKyAgICAgICAgX19jYWxsKGNvbnN0IHR1cGxlPF9BcmdzLi4uPiYgX19hcmdzLCAKKyAgICAgICAgICAgICAgIF9JbmRleF90dXBsZTxfSW5kZXhlcy4uLj4pIHZvbGF0aWxlCisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gX01fZihfTXU8X0JvdW5kX2FyZ3M+KCkKKyAgICAgICAgICAgICAgICAgICAgICAodHIxOjpnZXQ8X0luZGV4ZXM+KF9NX2JvdW5kX2FyZ3MpLCBfX2FyZ3MpLi4uKTsKKyAgICAgICAgfQorCisgICAgICAvLyBDYWxsIGFzIGNvbnN0IHZvbGF0aWxlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncywgaW50Li4uIF9JbmRleGVzPgorICAgICAgICB0eXBlbmFtZSByZXN1bHRfb2Y8CisgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9sYXRpbGUgX0Z1bmN0b3IodHlwZW5hbWUgcmVzdWx0X29mPF9NdTxfQm91bmRfYXJncz4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9sYXRpbGUgX0JvdW5kX2FyZ3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1cGxlPF9BcmdzLi4uPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+Ojp0eXBlLi4uKT46OnR5cGUKKyAgICAgICAgX19jYWxsKGNvbnN0IHR1cGxlPF9BcmdzLi4uPiYgX19hcmdzLCAKKyAgICAgICAgICAgICAgIF9JbmRleF90dXBsZTxfSW5kZXhlcy4uLj4pIGNvbnN0IHZvbGF0aWxlCisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gX01fZihfTXU8X0JvdW5kX2FyZ3M+KCkKKyAgICAgICAgICAgICAgICAgICAgICAodHIxOjpnZXQ8X0luZGV4ZXM+KF9NX2JvdW5kX2FyZ3MpLCBfX2FyZ3MpLi4uKTsKKyAgICAgICAgfQorCisgICAgIHB1YmxpYzoKKyAgICAgIGV4cGxpY2l0IF9CaW5kKF9GdW5jdG9yIF9fZiwgX0JvdW5kX2FyZ3MuLi4gX19ib3VuZF9hcmdzKQorICAgICAgICA6IF9NX2YoX19mKSwgX01fYm91bmRfYXJncyhfX2JvdW5kX2FyZ3MuLi4pIHsgfQorCisgICAgICAvLyBDYWxsIHVucXVhbGlmaWVkCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgdHlwZW5hbWUgcmVzdWx0X29mPAorICAgICAgICAgICAgICAgICAgIF9GdW5jdG9yKHR5cGVuYW1lIHJlc3VsdF9vZjxfTXU8X0JvdW5kX2FyZ3M+IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfQm91bmRfYXJncywgdHVwbGU8X0FyZ3MuLi4+KT46OnR5cGUuLi4pCisgICAgICAgICAgICAgICAgID46OnR5cGUKKyAgICAgICAgb3BlcmF0b3IoKShfQXJncyYuLi4gX19hcmdzKQorICAgICAgICB7CisgICAgICAgICAgcmV0dXJuIHRoaXMtPl9fY2FsbCh0cjE6OnRpZShfX2FyZ3MuLi4pLCBfQm91bmRfaW5kZXhlcygpKTsKKyAgICAgICAgfQorCisgICAgICAvLyBDYWxsIGFzIGNvbnN0CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgdHlwZW5hbWUgcmVzdWx0X29mPAorICAgICAgICAgICAgICAgICAgIGNvbnN0IF9GdW5jdG9yKHR5cGVuYW1lIHJlc3VsdF9vZjxfTXU8X0JvdW5kX2FyZ3M+IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBfQm91bmRfYXJncywgdHVwbGU8X0FyZ3MuLi4+KT46OnR5cGUuLi4pCisgICAgICAgICAgICAgICAgID46OnR5cGUKKyAgICAgICAgb3BlcmF0b3IoKShfQXJncyYuLi4gX19hcmdzKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgcmV0dXJuIHRoaXMtPl9fY2FsbCh0cjE6OnRpZShfX2FyZ3MuLi4pLCBfQm91bmRfaW5kZXhlcygpKTsKKyAgICAgICAgfQorCisKKyAgICAgIC8vIENhbGwgYXMgdm9sYXRpbGUKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICB0eXBlbmFtZSByZXN1bHRfb2Y8CisgICAgICAgICAgICAgICAgICAgdm9sYXRpbGUgX0Z1bmN0b3IodHlwZW5hbWUgcmVzdWx0X29mPF9NdTxfQm91bmRfYXJncz4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvbGF0aWxlIF9Cb3VuZF9hcmdzLCB0dXBsZTxfQXJncy4uLj4pPjo6dHlwZS4uLikKKyAgICAgICAgICAgICAgICAgPjo6dHlwZQorICAgICAgICBvcGVyYXRvcigpKF9BcmdzJi4uLiBfX2FyZ3MpIHZvbGF0aWxlCisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gdGhpcy0+X19jYWxsKHRyMTo6dGllKF9fYXJncy4uLiksIF9Cb3VuZF9pbmRleGVzKCkpOworICAgICAgICB9CisKKworICAgICAgLy8gQ2FsbCBhcyBjb25zdCB2b2xhdGlsZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHR5cGVuYW1lIHJlc3VsdF9vZjwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB2b2xhdGlsZSBfRnVuY3Rvcih0eXBlbmFtZSByZXN1bHRfb2Y8X011PF9Cb3VuZF9hcmdzPiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9sYXRpbGUgX0JvdW5kX2FyZ3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dXBsZTxfQXJncy4uLj4pPjo6dHlwZS4uLikKKyAgICAgICAgICAgICAgICAgPjo6dHlwZQorICAgICAgICBvcGVyYXRvcigpKF9BcmdzJi4uLiBfX2FyZ3MpIGNvbnN0IHZvbGF0aWxlCisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gdGhpcy0+X19jYWxsKHRyMTo6dGllKF9fYXJncy4uLiksIF9Cb3VuZF9pbmRleGVzKCkpOworICAgICAgICB9CisgICAgfTsKKworICAvLy8gVHlwZSBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0IHJldHVybmVkIGZyb20gYmluZDxSPigpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzdWx0LCB0eXBlbmFtZSBfU2lnbmF0dXJlPgorICAgIHN0cnVjdCBfQmluZF9yZXN1bHQ7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlc3VsdCwgdHlwZW5hbWUgX0Z1bmN0b3IsIHR5cGVuYW1lLi4uIF9Cb3VuZF9hcmdzPgorICAgIGNsYXNzIF9CaW5kX3Jlc3VsdDxfUmVzdWx0LCBfRnVuY3RvcihfQm91bmRfYXJncy4uLik+CisgICAgeworICAgICAgdHlwZWRlZiBfQmluZF9yZXN1bHQgX19zZWxmX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CdWlsZF9pbmRleF90dXBsZTxzaXplb2YuLi4oX0JvdW5kX2FyZ3MpPjo6X190eXBlIAorICAgICAgICBfQm91bmRfaW5kZXhlczsKKworICAgICAgX0Z1bmN0b3IgX01fZjsKKyAgICAgIHR1cGxlPF9Cb3VuZF9hcmdzLi4uPiBfTV9ib3VuZF9hcmdzOworCisgICAgICAvLyBDYWxsIHVucXVhbGlmaWVkCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncywgaW50Li4uIF9JbmRleGVzPgorICAgICAgICBfUmVzdWx0CisgICAgICAgIF9fY2FsbChjb25zdCB0dXBsZTxfQXJncy4uLj4mIF9fYXJncywgX0luZGV4X3R1cGxlPF9JbmRleGVzLi4uPikKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiBfTV9mKF9NdTxfQm91bmRfYXJncz4oKQorICAgICAgICAgICAgICAgICAgICAgICh0cjE6OmdldDxfSW5kZXhlcz4oX01fYm91bmRfYXJncyksIF9fYXJncykuLi4pOworICAgICAgICB9CisKKyAgICAgIC8vIENhbGwgYXMgY29uc3QKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzLCBpbnQuLi4gX0luZGV4ZXM+CisgICAgICAgIF9SZXN1bHQKKyAgICAgICAgX19jYWxsKGNvbnN0IHR1cGxlPF9BcmdzLi4uPiYgX19hcmdzLCBfSW5kZXhfdHVwbGU8X0luZGV4ZXMuLi4+KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgcmV0dXJuIF9NX2YoX011PF9Cb3VuZF9hcmdzPigpCisgICAgICAgICAgICAgICAgICAgICAgKHRyMTo6Z2V0PF9JbmRleGVzPihfTV9ib3VuZF9hcmdzKSwgX19hcmdzKS4uLik7CisgICAgICAgIH0KKworICAgICAgLy8gQ2FsbCBhcyB2b2xhdGlsZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3MsIGludC4uLiBfSW5kZXhlcz4KKyAgICAgICAgX1Jlc3VsdAorICAgICAgICBfX2NhbGwoY29uc3QgdHVwbGU8X0FyZ3MuLi4+JiBfX2FyZ3MsIAorICAgICAgICAgICAgICAgX0luZGV4X3R1cGxlPF9JbmRleGVzLi4uPikgdm9sYXRpbGUKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiBfTV9mKF9NdTxfQm91bmRfYXJncz4oKQorICAgICAgICAgICAgICAgICAgICAgICh0cjE6OmdldDxfSW5kZXhlcz4oX01fYm91bmRfYXJncyksIF9fYXJncykuLi4pOworICAgICAgICB9CisKKyAgICAgIC8vIENhbGwgYXMgY29uc3Qgdm9sYXRpbGUKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzLCBpbnQuLi4gX0luZGV4ZXM+CisgICAgICAgIF9SZXN1bHQKKyAgICAgICAgX19jYWxsKGNvbnN0IHR1cGxlPF9BcmdzLi4uPiYgX19hcmdzLCAKKyAgICAgICAgICAgICAgIF9JbmRleF90dXBsZTxfSW5kZXhlcy4uLj4pIGNvbnN0IHZvbGF0aWxlCisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gX01fZihfTXU8X0JvdW5kX2FyZ3M+KCkKKyAgICAgICAgICAgICAgICAgICAgICAodHIxOjpnZXQ8X0luZGV4ZXM+KF9NX2JvdW5kX2FyZ3MpLCBfX2FyZ3MpLi4uKTsKKyAgICAgICAgfQorCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOworCisgICAgICBleHBsaWNpdAorICAgICAgX0JpbmRfcmVzdWx0KF9GdW5jdG9yIF9fZiwgX0JvdW5kX2FyZ3MuLi4gX19ib3VuZF9hcmdzKQorICAgICAgOiBfTV9mKF9fZiksIF9NX2JvdW5kX2FyZ3MoX19ib3VuZF9hcmdzLi4uKSB7IH0KKworICAgICAgLy8gQ2FsbCB1bnF1YWxpZmllZAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHJlc3VsdF90eXBlCisgICAgICAgIG9wZXJhdG9yKCkoX0FyZ3MmLi4uIF9fYXJncykKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiB0aGlzLT5fX2NhbGwodHIxOjp0aWUoX19hcmdzLi4uKSwgX0JvdW5kX2luZGV4ZXMoKSk7CisgICAgICAgIH0KKworICAgICAgLy8gQ2FsbCBhcyBjb25zdAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHJlc3VsdF90eXBlCisgICAgICAgIG9wZXJhdG9yKCkoX0FyZ3MmLi4uIF9fYXJncykgY29uc3QKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiB0aGlzLT5fX2NhbGwodHIxOjp0aWUoX19hcmdzLi4uKSwgX0JvdW5kX2luZGV4ZXMoKSk7CisgICAgICAgIH0KKworICAgICAgLy8gQ2FsbCBhcyB2b2xhdGlsZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHJlc3VsdF90eXBlCisgICAgICAgIG9wZXJhdG9yKCkoX0FyZ3MmLi4uIF9fYXJncykgdm9sYXRpbGUKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiB0aGlzLT5fX2NhbGwodHIxOjp0aWUoX19hcmdzLi4uKSwgX0JvdW5kX2luZGV4ZXMoKSk7CisgICAgICAgIH0KKworICAgICAgLy8gQ2FsbCBhcyBjb25zdCB2b2xhdGlsZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHJlc3VsdF90eXBlCisgICAgICAgIG9wZXJhdG9yKCkoX0FyZ3MmLi4uIF9fYXJncykgY29uc3Qgdm9sYXRpbGUKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiB0aGlzLT5fX2NhbGwodHIxOjp0aWUoX19hcmdzLi4uKSwgX0JvdW5kX2luZGV4ZXMoKSk7CisgICAgICAgIH0KKyAgICB9OworCisgIC8vLyBDbGFzcyB0ZW1wbGF0ZSBfQmluZCBpcyBhbHdheXMgYSBiaW5kIGV4cHJlc3Npb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgc3RydWN0IGlzX2JpbmRfZXhwcmVzc2lvbjxfQmluZDxfU2lnbmF0dXJlPiA+CisgICAgeyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBjb25zdCBib29sIGlzX2JpbmRfZXhwcmVzc2lvbjxfQmluZDxfU2lnbmF0dXJlPiA+Ojp2YWx1ZTsKKworICAvLy8gQ2xhc3MgdGVtcGxhdGUgX0JpbmRfcmVzdWx0IGlzIGFsd2F5cyBhIGJpbmQgZXhwcmVzc2lvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlc3VsdCwgdHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBzdHJ1Y3QgaXNfYmluZF9leHByZXNzaW9uPF9CaW5kX3Jlc3VsdDxfUmVzdWx0LCBfU2lnbmF0dXJlPiA+CisgICAgeyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlc3VsdCwgdHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBjb25zdCBib29sIGlzX2JpbmRfZXhwcmVzc2lvbjxfQmluZF9yZXN1bHQ8X1Jlc3VsdCwgX1NpZ25hdHVyZT4gPjo6dmFsdWU7CisKKyAgLy8vIGJpbmQKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3IsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBpbmxpbmUKKyAgICBfQmluZDx0eXBlbmFtZSBfTWF5YmVfd3JhcF9tZW1iZXJfcG9pbnRlcjxfRnVuY3Rvcj46OnR5cGUoX0FyZ1R5cGVzLi4uKT4KKyAgICBiaW5kKF9GdW5jdG9yIF9fZiwgX0FyZ1R5cGVzLi4uIF9fYXJncykKKyAgICB7CisgICAgICB0eXBlZGVmIF9NYXliZV93cmFwX21lbWJlcl9wb2ludGVyPF9GdW5jdG9yPiBfX21heWJlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fbWF5YmVfdHlwZTo6dHlwZSBfX2Z1bmN0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0JpbmQ8X19mdW5jdG9yX3R5cGUoX0FyZ1R5cGVzLi4uKT4gX19yZXN1bHRfdHlwZTsKKyAgICAgIHJldHVybiBfX3Jlc3VsdF90eXBlKF9fbWF5YmVfdHlwZTo6X19kb193cmFwKF9fZiksIF9fYXJncy4uLik7CisgICAgfSAKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzdWx0LCB0eXBlbmFtZSBfRnVuY3RvciwgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIGlubGluZQorICAgIF9CaW5kX3Jlc3VsdDxfUmVzdWx0LAorCQkgdHlwZW5hbWUgX01heWJlX3dyYXBfbWVtYmVyX3BvaW50ZXI8X0Z1bmN0b3I+Ojp0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9BcmdUeXBlcy4uLik+CisgICAgYmluZChfRnVuY3RvciBfX2YsIF9BcmdUeXBlcy4uLiBfX2FyZ3MpCisgICAgeworICAgICAgdHlwZWRlZiBfTWF5YmVfd3JhcF9tZW1iZXJfcG9pbnRlcjxfRnVuY3Rvcj4gX19tYXliZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX21heWJlX3R5cGU6OnR5cGUgX19mdW5jdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIF9CaW5kX3Jlc3VsdDxfUmVzdWx0LCBfX2Z1bmN0b3JfdHlwZShfQXJnVHlwZXMuLi4pPgorCV9fcmVzdWx0X3R5cGU7CisgICAgICByZXR1cm4gX19yZXN1bHRfdHlwZShfX21heWJlX3R5cGU6Ol9fZG9fd3JhcChfX2YpLCBfX2FyZ3MuLi4pOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBFeGNlcHRpb24gY2xhc3MgdGhyb3duIHdoZW4gY2xhc3MgdGVtcGxhdGUgZnVuY3Rpb24ncworICAgKiAgb3BlcmF0b3IoKSBpcyBjYWxsZWQgd2l0aCBhbiBlbXB0eSB0YXJnZXQuCisgICAqICBAaW5ncm91cCBleGNlcHRpb25zCisgICAqLworICBjbGFzcyBiYWRfZnVuY3Rpb25fY2FsbCA6IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbiB7IH07CisKKyAgLyoqCisgICAqICBUaGUgaW50ZWdyYWwgY29uc3RhbnQgZXhwcmVzc2lvbiAwIGNhbiBiZSBjb252ZXJ0ZWQgaW50byBhCisgICAqICBwb2ludGVyIHRvIHRoaXMgdHlwZS4gSXQgaXMgdXNlZCBieSB0aGUgZnVuY3Rpb24gdGVtcGxhdGUgdG8KKyAgICogIGFjY2VwdCBOVUxMIHBvaW50ZXJzLgorICAgKi8KKyAgc3RydWN0IF9NX2NsZWFyX3R5cGU7CisKKyAgLyoqCisgICAqICBUcmFpdCBpZGVudGlmeWluZyBAYSBsb2NhdGlvbi1pbnZhcmlhbnQgdHlwZXMsIG1lYW5pbmcgdGhhdCB0aGUKKyAgICogIGFkZHJlc3Mgb2YgdGhlIG9iamVjdCAob3IgYW55IG9mIGl0cyBtZW1iZXJzKSB3aWxsIG5vdCBlc2NhcGUuCisgICAqICBBbHNvIGltcGxpZXMgYSB0cml2aWFsIGNvcHkgY29uc3RydWN0b3IgYW5kIGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faXNfbG9jYXRpb25faW52YXJpYW50CisgICAgOiBpbnRlZ3JhbF9jb25zdGFudDxib29sLAorICAgICAgICAgICAgICAgICAgICAgICAgKGlzX3BvaW50ZXI8X1RwPjo6dmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICB8fCBpc19tZW1iZXJfcG9pbnRlcjxfVHA+Ojp2YWx1ZSk+CisgICAgeworICAgIH07CisKKyAgY2xhc3MgX1VuZGVmaW5lZF9jbGFzczsKKworICB1bmlvbiBfTm9jb3B5X3R5cGVzCisgIHsKKyAgICB2b2lkKiAgICAgICBfTV9vYmplY3Q7CisgICAgY29uc3Qgdm9pZCogX01fY29uc3Rfb2JqZWN0OworICAgIHZvaWQgKCpfTV9mdW5jdGlvbl9wb2ludGVyKSgpOworICAgIHZvaWQgKF9VbmRlZmluZWRfY2xhc3M6OipfTV9tZW1iZXJfcG9pbnRlcikoKTsKKyAgfTsKKworICB1bmlvbiBfQW55X2RhdGEKKyAgeworICAgIHZvaWQqICAgICAgIF9NX2FjY2VzcygpICAgICAgIHsgcmV0dXJuICZfTV9wb2RfZGF0YVswXTsgfQorICAgIGNvbnN0IHZvaWQqIF9NX2FjY2VzcygpIGNvbnN0IHsgcmV0dXJuICZfTV9wb2RfZGF0YVswXTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgX1RwJgorICAgICAgX01fYWNjZXNzKCkKKyAgICAgIHsgcmV0dXJuICpzdGF0aWNfY2FzdDxfVHAqPihfTV9hY2Nlc3MoKSk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIGNvbnN0IF9UcCYKKyAgICAgIF9NX2FjY2VzcygpIGNvbnN0CisgICAgICB7IHJldHVybiAqc3RhdGljX2Nhc3Q8Y29uc3QgX1RwKj4oX01fYWNjZXNzKCkpOyB9CisKKyAgICBfTm9jb3B5X3R5cGVzIF9NX3VudXNlZDsKKyAgICBjaGFyIF9NX3BvZF9kYXRhW3NpemVvZihfTm9jb3B5X3R5cGVzKV07CisgIH07CisKKyAgZW51bSBfTWFuYWdlcl9vcGVyYXRpb24KKyAgeworICAgIF9fZ2V0X3R5cGVfaW5mbywKKyAgICBfX2dldF9mdW5jdG9yX3B0ciwKKyAgICBfX2Nsb25lX2Z1bmN0b3IsCisgICAgX19kZXN0cm95X2Z1bmN0b3IKKyAgfTsKKworICAvLyBTaW1wbGUgdHlwZSB3cmFwcGVyIHRoYXQgaGVscHMgYXZvaWQgYW5ub3lpbmcgY29uc3QgcHJvYmxlbXMKKyAgLy8gd2hlbiBjYXN0aW5nIGJldHdlZW4gdm9pZCBwb2ludGVycyBhbmQgcG9pbnRlcnMtdG8tcG9pbnRlcnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX1NpbXBsZV90eXBlX3dyYXBwZXIKKyAgICB7CisgICAgICBfU2ltcGxlX3R5cGVfd3JhcHBlcihfVHAgX192YWx1ZSkgOiBfX3ZhbHVlKF9fdmFsdWUpIHsgfQorCisgICAgICBfVHAgX192YWx1ZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19sb2NhdGlvbl9pbnZhcmlhbnQ8X1NpbXBsZV90eXBlX3dyYXBwZXI8X1RwPiA+CisgICAgOiBfX2lzX2xvY2F0aW9uX2ludmFyaWFudDxfVHA+CisgICAgeworICAgIH07CisKKyAgLy8gQ29udmVydHMgYSByZWZlcmVuY2UgdG8gYSBmdW5jdGlvbiBvYmplY3QgaW50byBhIGNhbGxhYmxlCisgIC8vIGZ1bmN0aW9uIG9iamVjdC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3I+CisgICAgaW5saW5lIF9GdW5jdG9yJgorICAgIF9fY2FsbGFibGVfZnVuY3RvcihfRnVuY3RvciYgX19mKQorICAgIHsgcmV0dXJuIF9fZjsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9NZW1iZXIsIHR5cGVuYW1lIF9DbGFzcz4KKyAgICBpbmxpbmUgX01lbV9mbjxfTWVtYmVyIF9DbGFzczo6Kj4KKyAgICBfX2NhbGxhYmxlX2Z1bmN0b3IoX01lbWJlciBfQ2xhc3M6OiogJl9fcCkKKyAgICB7IHJldHVybiBtZW1fZm4oX19wKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9NZW1iZXIsIHR5cGVuYW1lIF9DbGFzcz4KKyAgICBpbmxpbmUgX01lbV9mbjxfTWVtYmVyIF9DbGFzczo6Kj4KKyAgICBfX2NhbGxhYmxlX2Z1bmN0b3IoX01lbWJlciBfQ2xhc3M6OiogY29uc3QgJl9fcCkKKyAgICB7IHJldHVybiBtZW1fZm4oX19wKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgY2xhc3MgZnVuY3Rpb247CisKKyAgLy8vIEJhc2UgY2xhc3Mgb2YgYWxsIHBvbHltb3JwaGljIGZ1bmN0aW9uIG9iamVjdCB3cmFwcGVycy4KKyAgY2xhc3MgX0Z1bmN0aW9uX2Jhc2UKKyAgeworICBwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IF9NX21heF9zaXplID0gc2l6ZW9mKF9Ob2NvcHlfdHlwZXMpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBfTV9tYXhfYWxpZ24gPSBfX2FsaWdub2ZfXyhfTm9jb3B5X3R5cGVzKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yPgorICAgICAgY2xhc3MgX0Jhc2VfbWFuYWdlcgorICAgICAgeworICAgICAgcHJvdGVjdGVkOgorCXN0YXRpYyBjb25zdCBib29sIF9fc3RvcmVkX2xvY2FsbHkgPQorICAgICAgICAoX19pc19sb2NhdGlvbl9pbnZhcmlhbnQ8X0Z1bmN0b3I+Ojp2YWx1ZQorICAgICAgICAgJiYgc2l6ZW9mKF9GdW5jdG9yKSA8PSBfTV9tYXhfc2l6ZQorICAgICAgICAgJiYgX19hbGlnbm9mX18oX0Z1bmN0b3IpIDw9IF9NX21heF9hbGlnbgorICAgICAgICAgJiYgKF9NX21heF9hbGlnbiAlIF9fYWxpZ25vZl9fKF9GdW5jdG9yKSA9PSAwKSk7CisJCisJdHlwZWRlZiBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBfX3N0b3JlZF9sb2NhbGx5PiBfTG9jYWxfc3RvcmFnZTsKKworCS8vIFJldHJpZXZlIGEgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gb2JqZWN0CisJc3RhdGljIF9GdW5jdG9yKgorCV9NX2dldF9wb2ludGVyKGNvbnN0IF9BbnlfZGF0YSYgX19zb3VyY2UpCisJeworCSAgY29uc3QgX0Z1bmN0b3IqIF9fcHRyID0KKwkgICAgX19zdG9yZWRfbG9jYWxseT8gJl9fc291cmNlLl9NX2FjY2VzczxfRnVuY3Rvcj4oKQorCSAgICAvKiBoYXZlIHN0b3JlZCBhIHBvaW50ZXIgKi8gOiBfX3NvdXJjZS5fTV9hY2Nlc3M8X0Z1bmN0b3IqPigpOworCSAgcmV0dXJuIGNvbnN0X2Nhc3Q8X0Z1bmN0b3IqPihfX3B0cik7CisJfQorCisJLy8gQ2xvbmUgYSBsb2NhdGlvbi1pbnZhcmlhbnQgZnVuY3Rpb24gb2JqZWN0IHRoYXQgZml0cyB3aXRoaW4KKwkvLyBhbiBfQW55X2RhdGEgc3RydWN0dXJlLgorCXN0YXRpYyB2b2lkCisJX01fY2xvbmUoX0FueV9kYXRhJiBfX2Rlc3QsIGNvbnN0IF9BbnlfZGF0YSYgX19zb3VyY2UsIHRydWVfdHlwZSkKKwl7CisJICBuZXcgKF9fZGVzdC5fTV9hY2Nlc3MoKSkgX0Z1bmN0b3IoX19zb3VyY2UuX01fYWNjZXNzPF9GdW5jdG9yPigpKTsKKwl9CisKKwkvLyBDbG9uZSBhIGZ1bmN0aW9uIG9iamVjdCB0aGF0IGlzIG5vdCBsb2NhdGlvbi1pbnZhcmlhbnQgb3IKKwkvLyB0aGF0IGNhbm5vdCBmaXQgaW50byBhbiBfQW55X2RhdGEgc3RydWN0dXJlLgorCXN0YXRpYyB2b2lkCisJX01fY2xvbmUoX0FueV9kYXRhJiBfX2Rlc3QsIGNvbnN0IF9BbnlfZGF0YSYgX19zb3VyY2UsIGZhbHNlX3R5cGUpCisJeworCSAgX19kZXN0Ll9NX2FjY2VzczxfRnVuY3Rvcio+KCkgPQorCSAgICBuZXcgX0Z1bmN0b3IoKl9fc291cmNlLl9NX2FjY2VzczxfRnVuY3Rvcio+KCkpOworCX0KKworCS8vIERlc3Ryb3lpbmcgYSBsb2NhdGlvbi1pbnZhcmlhbnQgb2JqZWN0IG1heSBzdGlsbCByZXF1aXJlCisJLy8gZGVzdHJ1Y3Rpb24uCisJc3RhdGljIHZvaWQKKwlfTV9kZXN0cm95KF9BbnlfZGF0YSYgX192aWN0aW0sIHRydWVfdHlwZSkKKwl7CisJICBfX3ZpY3RpbS5fTV9hY2Nlc3M8X0Z1bmN0b3I+KCkufl9GdW5jdG9yKCk7CisJfQorCQorCS8vIERlc3Ryb3lpbmcgYW4gb2JqZWN0IGxvY2F0ZWQgb24gdGhlIGhlYXAuCisJc3RhdGljIHZvaWQKKwlfTV9kZXN0cm95KF9BbnlfZGF0YSYgX192aWN0aW0sIGZhbHNlX3R5cGUpCisJeworCSAgZGVsZXRlIF9fdmljdGltLl9NX2FjY2VzczxfRnVuY3Rvcio+KCk7CisJfQorCQorICAgICAgcHVibGljOgorCXN0YXRpYyBib29sCisJX01fbWFuYWdlcihfQW55X2RhdGEmIF9fZGVzdCwgY29uc3QgX0FueV9kYXRhJiBfX3NvdXJjZSwKKwkJICAgX01hbmFnZXJfb3BlcmF0aW9uIF9fb3ApCisJeworCSAgc3dpdGNoIChfX29wKQorCSAgICB7CisjaWZkZWYgX19HWFhfUlRUSQorCSAgICBjYXNlIF9fZ2V0X3R5cGVfaW5mbzoKKwkgICAgICBfX2Rlc3QuX01fYWNjZXNzPGNvbnN0IHR5cGVfaW5mbyo+KCkgPSAmdHlwZWlkKF9GdW5jdG9yKTsKKwkgICAgICBicmVhazsKKyNlbmRpZgorCSAgICBjYXNlIF9fZ2V0X2Z1bmN0b3JfcHRyOgorCSAgICAgIF9fZGVzdC5fTV9hY2Nlc3M8X0Z1bmN0b3IqPigpID0gX01fZ2V0X3BvaW50ZXIoX19zb3VyY2UpOworCSAgICAgIGJyZWFrOworCSAgICAgIAorCSAgICBjYXNlIF9fY2xvbmVfZnVuY3RvcjoKKwkgICAgICBfTV9jbG9uZShfX2Rlc3QsIF9fc291cmNlLCBfTG9jYWxfc3RvcmFnZSgpKTsKKwkgICAgICBicmVhazsKKworCSAgICBjYXNlIF9fZGVzdHJveV9mdW5jdG9yOgorCSAgICAgIF9NX2Rlc3Ryb3koX19kZXN0LCBfTG9jYWxfc3RvcmFnZSgpKTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgcmV0dXJuIGZhbHNlOworCX0KKworCXN0YXRpYyB2b2lkCisJX01faW5pdF9mdW5jdG9yKF9BbnlfZGF0YSYgX19mdW5jdG9yLCBjb25zdCBfRnVuY3RvciYgX19mKQorCXsgX01faW5pdF9mdW5jdG9yKF9fZnVuY3RvciwgX19mLCBfTG9jYWxfc3RvcmFnZSgpKTsgfQorCQorCXRlbXBsYXRlPHR5cGVuYW1lIF9TaWduYXR1cmU+CisJICBzdGF0aWMgYm9vbAorCSAgX01fbm90X2VtcHR5X2Z1bmN0aW9uKGNvbnN0IGZ1bmN0aW9uPF9TaWduYXR1cmU+JiBfX2YpCisgICAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oX19mKTsgfQorCisJdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorCSAgc3RhdGljIGJvb2wKKwkgIF9NX25vdF9lbXB0eV9mdW5jdGlvbihjb25zdCBfVHAqJiBfX2ZwKQorCSAgeyByZXR1cm4gX19mcDsgfQorCisJdGVtcGxhdGU8dHlwZW5hbWUgX0NsYXNzLCB0eXBlbmFtZSBfVHA+CisJICBzdGF0aWMgYm9vbAorCSAgX01fbm90X2VtcHR5X2Z1bmN0aW9uKF9UcCBfQ2xhc3M6OiogY29uc3QmIF9fbXApCisJICB7IHJldHVybiBfX21wOyB9CisKKwl0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisJICBzdGF0aWMgYm9vbAorCSAgX01fbm90X2VtcHR5X2Z1bmN0aW9uKGNvbnN0IF9UcCYpCisJICB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgIHByaXZhdGU6CisJc3RhdGljIHZvaWQKKwlfTV9pbml0X2Z1bmN0b3IoX0FueV9kYXRhJiBfX2Z1bmN0b3IsIGNvbnN0IF9GdW5jdG9yJiBfX2YsIHRydWVfdHlwZSkKKwl7IG5ldyAoX19mdW5jdG9yLl9NX2FjY2VzcygpKSBfRnVuY3RvcihfX2YpOyB9CisKKwlzdGF0aWMgdm9pZAorCV9NX2luaXRfZnVuY3RvcihfQW55X2RhdGEmIF9fZnVuY3RvciwgY29uc3QgX0Z1bmN0b3ImIF9fZiwgZmFsc2VfdHlwZSkKKwl7IF9fZnVuY3Rvci5fTV9hY2Nlc3M8X0Z1bmN0b3IqPigpID0gbmV3IF9GdW5jdG9yKF9fZik7IH0KKyAgICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3Rvcj4KKyAgICAgIGNsYXNzIF9SZWZfbWFuYWdlciA6IHB1YmxpYyBfQmFzZV9tYW5hZ2VyPF9GdW5jdG9yKj4KKyAgICAgIHsKKwl0eXBlZGVmIF9GdW5jdGlvbl9iYXNlOjpfQmFzZV9tYW5hZ2VyPF9GdW5jdG9yKj4gX0Jhc2U7CisKKyAgICBwdWJsaWM6CisJc3RhdGljIGJvb2wKKwlfTV9tYW5hZ2VyKF9BbnlfZGF0YSYgX19kZXN0LCBjb25zdCBfQW55X2RhdGEmIF9fc291cmNlLAorCQkgICBfTWFuYWdlcl9vcGVyYXRpb24gX19vcCkKKwl7CisJICBzd2l0Y2ggKF9fb3ApCisJICAgIHsKKyNpZmRlZiBfX0dYWF9SVFRJCisJICAgIGNhc2UgX19nZXRfdHlwZV9pbmZvOgorCSAgICAgIF9fZGVzdC5fTV9hY2Nlc3M8Y29uc3QgdHlwZV9pbmZvKj4oKSA9ICZ0eXBlaWQoX0Z1bmN0b3IpOworCSAgICAgIGJyZWFrOworI2VuZGlmCisJICAgIGNhc2UgX19nZXRfZnVuY3Rvcl9wdHI6CisJICAgICAgX19kZXN0Ll9NX2FjY2VzczxfRnVuY3Rvcio+KCkgPSAqX0Jhc2U6Ol9NX2dldF9wb2ludGVyKF9fc291cmNlKTsKKwkgICAgICByZXR1cm4gaXNfY29uc3Q8X0Z1bmN0b3I+Ojp2YWx1ZTsKKwkgICAgICBicmVhazsKKwkgICAgICAKKwkgICAgZGVmYXVsdDoKKwkgICAgICBfQmFzZTo6X01fbWFuYWdlcihfX2Rlc3QsIF9fc291cmNlLCBfX29wKTsKKwkgICAgfQorCSAgcmV0dXJuIGZhbHNlOworCX0KKworCXN0YXRpYyB2b2lkCisJX01faW5pdF9mdW5jdG9yKF9BbnlfZGF0YSYgX19mdW5jdG9yLCByZWZlcmVuY2Vfd3JhcHBlcjxfRnVuY3Rvcj4gX19mKQorCXsKKwkgIC8vIFRCRDogVXNlIGFkZHJlc3Nfb2YgZnVuY3Rpb24gaW5zdGVhZC4KKwkgIF9CYXNlOjpfTV9pbml0X2Z1bmN0b3IoX19mdW5jdG9yLCAmX19mLmdldCgpKTsKKwl9CisgICAgICB9OworCisgICAgX0Z1bmN0aW9uX2Jhc2UoKSA6IF9NX21hbmFnZXIoMCkgeyB9CisgICAgCisgICAgfl9GdW5jdGlvbl9iYXNlKCkKKyAgICB7CisgICAgICBpZiAoX01fbWFuYWdlcikKKwlfTV9tYW5hZ2VyKF9NX2Z1bmN0b3IsIF9NX2Z1bmN0b3IsIF9fZGVzdHJveV9mdW5jdG9yKTsKKyAgICB9CisKKworICAgIGJvb2wgX01fZW1wdHkoKSBjb25zdCB7IHJldHVybiAhX01fbWFuYWdlcjsgfQorCisgICAgdHlwZWRlZiBib29sICgqX01hbmFnZXJfdHlwZSkoX0FueV9kYXRhJiwgY29uc3QgX0FueV9kYXRhJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTWFuYWdlcl9vcGVyYXRpb24pOworCisgICAgX0FueV9kYXRhICAgICBfTV9mdW5jdG9yOworICAgIF9NYW5hZ2VyX3R5cGUgX01fbWFuYWdlcjsKKyAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2lnbmF0dXJlLCB0eXBlbmFtZSBfRnVuY3Rvcj4KKyAgICBjbGFzcyBfRnVuY3Rpb25faGFuZGxlcjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfRnVuY3RvciwgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIGNsYXNzIF9GdW5jdGlvbl9oYW5kbGVyPF9SZXMoX0FyZ1R5cGVzLi4uKSwgX0Z1bmN0b3I+CisgICAgOiBwdWJsaWMgX0Z1bmN0aW9uX2Jhc2U6Ol9CYXNlX21hbmFnZXI8X0Z1bmN0b3I+CisgICAgeworICAgICAgdHlwZWRlZiBfRnVuY3Rpb25fYmFzZTo6X0Jhc2VfbWFuYWdlcjxfRnVuY3Rvcj4gX0Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICBzdGF0aWMgX1JlcworICAgICAgX01faW52b2tlKGNvbnN0IF9BbnlfZGF0YSYgX19mdW5jdG9yLCBfQXJnVHlwZXMuLi4gX19hcmdzKQorICAgICAgeworICAgICAgICByZXR1cm4gKCpfQmFzZTo6X01fZ2V0X3BvaW50ZXIoX19mdW5jdG9yKSkoX19hcmdzLi4uKTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgY2xhc3MgX0Z1bmN0aW9uX2hhbmRsZXI8dm9pZChfQXJnVHlwZXMuLi4pLCBfRnVuY3Rvcj4KKyAgICA6IHB1YmxpYyBfRnVuY3Rpb25fYmFzZTo6X0Jhc2VfbWFuYWdlcjxfRnVuY3Rvcj4KKyAgICB7CisgICAgICB0eXBlZGVmIF9GdW5jdGlvbl9iYXNlOjpfQmFzZV9tYW5hZ2VyPF9GdW5jdG9yPiBfQmFzZTsKKworICAgICBwdWJsaWM6CisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX01faW52b2tlKGNvbnN0IF9BbnlfZGF0YSYgX19mdW5jdG9yLCBfQXJnVHlwZXMuLi4gX19hcmdzKQorICAgICAgeworICAgICAgICAoKl9CYXNlOjpfTV9nZXRfcG9pbnRlcihfX2Z1bmN0b3IpKShfX2FyZ3MuLi4pOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0Z1bmN0b3IsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBjbGFzcyBfRnVuY3Rpb25faGFuZGxlcjxfUmVzKF9BcmdUeXBlcy4uLiksIHJlZmVyZW5jZV93cmFwcGVyPF9GdW5jdG9yPiA+CisgICAgOiBwdWJsaWMgX0Z1bmN0aW9uX2Jhc2U6Ol9SZWZfbWFuYWdlcjxfRnVuY3Rvcj4KKyAgICB7CisgICAgICB0eXBlZGVmIF9GdW5jdGlvbl9iYXNlOjpfUmVmX21hbmFnZXI8X0Z1bmN0b3I+IF9CYXNlOworCisgICAgIHB1YmxpYzoKKyAgICAgIHN0YXRpYyBfUmVzCisgICAgICBfTV9pbnZva2UoY29uc3QgX0FueV9kYXRhJiBfX2Z1bmN0b3IsIF9BcmdUeXBlcy4uLiBfX2FyZ3MpCisgICAgICB7CisgICAgICAgIHJldHVybiAKKyAgICAgICAgICBfX2NhbGxhYmxlX2Z1bmN0b3IoKipfQmFzZTo6X01fZ2V0X3BvaW50ZXIoX19mdW5jdG9yKSkoX19hcmdzLi4uKTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgY2xhc3MgX0Z1bmN0aW9uX2hhbmRsZXI8dm9pZChfQXJnVHlwZXMuLi4pLCByZWZlcmVuY2Vfd3JhcHBlcjxfRnVuY3Rvcj4gPgorICAgIDogcHVibGljIF9GdW5jdGlvbl9iYXNlOjpfUmVmX21hbmFnZXI8X0Z1bmN0b3I+CisgICAgeworICAgICAgdHlwZWRlZiBfRnVuY3Rpb25fYmFzZTo6X1JlZl9tYW5hZ2VyPF9GdW5jdG9yPiBfQmFzZTsKKworICAgICBwdWJsaWM6CisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX01faW52b2tlKGNvbnN0IF9BbnlfZGF0YSYgX19mdW5jdG9yLCBfQXJnVHlwZXMuLi4gX19hcmdzKQorICAgICAgeworICAgICAgICBfX2NhbGxhYmxlX2Z1bmN0b3IoKipfQmFzZTo6X01fZ2V0X3BvaW50ZXIoX19mdW5jdG9yKSkoX19hcmdzLi4uKTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DbGFzcywgdHlwZW5hbWUgX01lbWJlciwgdHlwZW5hbWUgX1JlcywgCisgICAgICAgICAgIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBjbGFzcyBfRnVuY3Rpb25faGFuZGxlcjxfUmVzKF9BcmdUeXBlcy4uLiksIF9NZW1iZXIgX0NsYXNzOjoqPgorICAgIDogcHVibGljIF9GdW5jdGlvbl9oYW5kbGVyPHZvaWQoX0FyZ1R5cGVzLi4uKSwgX01lbWJlciBfQ2xhc3M6Oio+CisgICAgeworICAgICAgdHlwZWRlZiBfRnVuY3Rpb25faGFuZGxlcjx2b2lkKF9BcmdUeXBlcy4uLiksIF9NZW1iZXIgX0NsYXNzOjoqPgorICAgICAgICBfQmFzZTsKKworICAgICBwdWJsaWM6CisgICAgICBzdGF0aWMgX1JlcworICAgICAgX01faW52b2tlKGNvbnN0IF9BbnlfZGF0YSYgX19mdW5jdG9yLCBfQXJnVHlwZXMuLi4gX19hcmdzKQorICAgICAgeworICAgICAgICByZXR1cm4gdHIxOjoKKwkgIG1lbV9mbihfQmFzZTo6X01fZ2V0X3BvaW50ZXIoX19mdW5jdG9yKS0+X192YWx1ZSkoX19hcmdzLi4uKTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DbGFzcywgdHlwZW5hbWUgX01lbWJlciwgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIGNsYXNzIF9GdW5jdGlvbl9oYW5kbGVyPHZvaWQoX0FyZ1R5cGVzLi4uKSwgX01lbWJlciBfQ2xhc3M6Oio+CisgICAgOiBwdWJsaWMgX0Z1bmN0aW9uX2Jhc2U6Ol9CYXNlX21hbmFnZXI8CisgICAgICAgICAgICAgICAgIF9TaW1wbGVfdHlwZV93cmFwcGVyPCBfTWVtYmVyIF9DbGFzczo6KiA+ID4KKyAgICB7CisgICAgICB0eXBlZGVmIF9NZW1iZXIgX0NsYXNzOjoqIF9GdW5jdG9yOworICAgICAgdHlwZWRlZiBfU2ltcGxlX3R5cGVfd3JhcHBlcjxfRnVuY3Rvcj4gX1dyYXBwZXI7CisgICAgICB0eXBlZGVmIF9GdW5jdGlvbl9iYXNlOjpfQmFzZV9tYW5hZ2VyPF9XcmFwcGVyPiBfQmFzZTsKKworICAgICBwdWJsaWM6CisgICAgICBzdGF0aWMgYm9vbAorICAgICAgX01fbWFuYWdlcihfQW55X2RhdGEmIF9fZGVzdCwgY29uc3QgX0FueV9kYXRhJiBfX3NvdXJjZSwKKyAgICAgICAgICAgICAgICAgX01hbmFnZXJfb3BlcmF0aW9uIF9fb3ApCisgICAgICB7CisgICAgICAgIHN3aXRjaCAoX19vcCkKKwkgIHsKKyNpZmRlZiBfX0dYWF9SVFRJCisJICBjYXNlIF9fZ2V0X3R5cGVfaW5mbzoKKwkgICAgX19kZXN0Ll9NX2FjY2Vzczxjb25zdCB0eXBlX2luZm8qPigpID0gJnR5cGVpZChfRnVuY3Rvcik7CisJICAgIGJyZWFrOworI2VuZGlmCSAgICAKKwkgIGNhc2UgX19nZXRfZnVuY3Rvcl9wdHI6CisJICAgIF9fZGVzdC5fTV9hY2Nlc3M8X0Z1bmN0b3IqPigpID0KKwkgICAgICAmX0Jhc2U6Ol9NX2dldF9wb2ludGVyKF9fc291cmNlKS0+X192YWx1ZTsKKwkgICAgYnJlYWs7CisJICAgIAorCSAgZGVmYXVsdDoKKwkgICAgX0Jhc2U6Ol9NX21hbmFnZXIoX19kZXN0LCBfX3NvdXJjZSwgX19vcCk7CisJICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIF9NX2ludm9rZShjb25zdCBfQW55X2RhdGEmIF9fZnVuY3RvciwgX0FyZ1R5cGVzLi4uIF9fYXJncykKKyAgICAgIHsKKwl0cjE6Om1lbV9mbihfQmFzZTo6X01fZ2V0X3BvaW50ZXIoX19mdW5jdG9yKS0+X192YWx1ZSkoX19hcmdzLi4uKTsKKyAgICAgIH0KKyAgICB9OworCisgIC8vLyBjbGFzcyBmdW5jdGlvbgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgY2xhc3MgZnVuY3Rpb248X1JlcyhfQXJnVHlwZXMuLi4pPgorICAgIDogcHVibGljIF9NYXliZV91bmFyeV9vcl9iaW5hcnlfZnVuY3Rpb248X1JlcywgX0FyZ1R5cGVzLi4uPiwKKyAgICAgIHByaXZhdGUgX0Z1bmN0aW9uX2Jhc2UKKyAgICB7CisjaWZuZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAvLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGltcGxlbWVudCB0aGUgc2FmZV9ib29sIGlkaW9tLgorICAgICAgc3RydWN0IF9IaWRkZW5fdHlwZQorICAgICAgeworCV9IaWRkZW5fdHlwZSogX01fYm9vbDsKKyAgICAgIH07CisKKyAgICAgIC8vLyBUaGlzIHR5cGVkZWYgaXMgdXNlZCB0byBpbXBsZW1lbnQgdGhlIHNhZmVfYm9vbCBpZGlvbS4KKyAgICAgIHR5cGVkZWYgX0hpZGRlbl90eXBlKiBfSGlkZGVuX3R5cGU6OiogX1NhZmVfYm9vbDsKKyNlbmRpZgorCisgICAgICB0eXBlZGVmIF9SZXMgX1NpZ25hdHVyZV90eXBlKF9BcmdUeXBlcy4uLik7CisgICAgICAKKyAgICAgIHN0cnVjdCBfVXNlbGVzcyB7IH07CisgICAgICAKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9SZXMgcmVzdWx0X3R5cGU7CisgICAgICAKKyAgICAgIC8vIFszLjcuMi4xXSBjb25zdHJ1Y3QvY29weS9kZXN0cm95CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBEZWZhdWx0IGNvbnN0cnVjdCBjcmVhdGVzIGFuIGVtcHR5IGZ1bmN0aW9uIGNhbGwgd3JhcHBlci4KKyAgICAgICAqICBAcG9zdCBAYyAhKGJvb2wpKnRoaXMKKyAgICAgICAqLworICAgICAgZnVuY3Rpb24oKSA6IF9GdW5jdGlvbl9iYXNlKCkgeyB9CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBEZWZhdWx0IGNvbnN0cnVjdCBjcmVhdGVzIGFuIGVtcHR5IGZ1bmN0aW9uIGNhbGwgd3JhcHBlci4KKyAgICAgICAqICBAcG9zdCBAYyAhKGJvb2wpKnRoaXMKKyAgICAgICAqLworICAgICAgZnVuY3Rpb24oX01fY2xlYXJfdHlwZSopIDogX0Z1bmN0aW9uX2Jhc2UoKSB7IH0KKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICVGdW5jdGlvbiBjb3B5IGNvbnN0cnVjdG9yLgorICAgICAgICogIEBwYXJhbSB4IEEgJWZ1bmN0aW9uIG9iamVjdCB3aXRoIGlkZW50aWNhbCBjYWxsIHNpZ25hdHVyZS4KKyAgICAgICAqICBAcG9zdCBAYyAoYm9vbCkqdGhpcyA9PSAoYm9vbCl4CisgICAgICAgKgorICAgICAgICogIFRoZSBuZXdseS1jcmVhdGVkICVmdW5jdGlvbiBjb250YWlucyBhIGNvcHkgb2YgdGhlIHRhcmdldCBvZiBAYQorICAgICAgICogIHggKGlmIGl0IGhhcyBvbmUpLgorICAgICAgICovCisgICAgICBmdW5jdGlvbihjb25zdCBmdW5jdGlvbiYgX194KTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEJ1aWxkcyBhICVmdW5jdGlvbiB0aGF0IHRhcmdldHMgYSBjb3B5IG9mIHRoZSBpbmNvbWluZworICAgICAgICogIGZ1bmN0aW9uIG9iamVjdC4KKyAgICAgICAqICBAcGFyYW0gZiBBICVmdW5jdGlvbiBvYmplY3QgdGhhdCBpcyBjYWxsYWJsZSB3aXRoIHBhcmFtZXRlcnMgb2YKKyAgICAgICAqICB0eXBlIEBjIFQxLCBAYyBUMiwgLi4uLCBAYyBUTiBhbmQgcmV0dXJucyBhIHZhbHVlIGNvbnZlcnRpYmxlCisgICAgICAgKiAgdG8gQGMgUmVzLgorICAgICAgICoKKyAgICAgICAqICBUaGUgbmV3bHktY3JlYXRlZCAlZnVuY3Rpb24gb2JqZWN0IHdpbGwgdGFyZ2V0IGEgY29weSBvZiBAYQorICAgICAgICogIGYuIElmIEBhIGYgaXMgQGMgcmVmZXJlbmNlX3dyYXBwZXI8Rj4sIHRoZW4gdGhpcyBmdW5jdGlvbgorICAgICAgICogIG9iamVjdCB3aWxsIGNvbnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlIGZ1bmN0aW9uIG9iamVjdCBAYworICAgICAgICogIGYuZ2V0KCkuIElmIEBhIGYgaXMgYSBOVUxMIGZ1bmN0aW9uIHBvaW50ZXIgb3IgTlVMTAorICAgICAgICogIHBvaW50ZXItdG8tbWVtYmVyLCB0aGUgbmV3bHktY3JlYXRlZCBvYmplY3Qgd2lsbCBiZSBlbXB0eS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgQGEgZiBpcyBhIG5vbi1OVUxMIGZ1bmN0aW9uIHBvaW50ZXIgb3IgYW4gb2JqZWN0IG9mIHR5cGUgQGMKKyAgICAgICAqICByZWZlcmVuY2Vfd3JhcHBlcjxGPiwgdGhpcyBmdW5jdGlvbiB3aWxsIG5vdCB0aHJvdy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3I+CisgICAgICAgIGZ1bmN0aW9uKF9GdW5jdG9yIF9fZiwKKyAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICFpc19pbnRlZ3JhbDxfRnVuY3Rvcj46OnZhbHVlLCBfVXNlbGVzcz46Ol9fdHlwZQorICAgICAgICAgICAgICAgICAgID0gX1VzZWxlc3MoKSk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAlRnVuY3Rpb24gYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0geCBBICVmdW5jdGlvbiB3aXRoIGlkZW50aWNhbCBjYWxsIHNpZ25hdHVyZS4KKyAgICAgICAqICBAcG9zdCBAYyAoYm9vbCkqdGhpcyA9PSAoYm9vbCl4CisgICAgICAgKiAgQHJldHVybnMgQGMgKnRoaXMKKyAgICAgICAqCisgICAgICAgKiAgVGhlIHRhcmdldCBvZiBAYSB4IGlzIGNvcGllZCB0byBAYyAqdGhpcy4gSWYgQGEgeCBoYXMgbm8KKyAgICAgICAqICB0YXJnZXQsIHRoZW4gQGMgKnRoaXMgd2lsbCBiZSBlbXB0eS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgQGEgeCB0YXJnZXRzIGEgZnVuY3Rpb24gcG9pbnRlciBvciBhIHJlZmVyZW5jZSB0byBhIGZ1bmN0aW9uCisgICAgICAgKiAgb2JqZWN0LCB0aGVuIHRoaXMgb3BlcmF0aW9uIHdpbGwgbm90IHRocm93IGFuICVleGNlcHRpb24uCisgICAgICAgKi8KKyAgICAgIGZ1bmN0aW9uJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IGZ1bmN0aW9uJiBfX3gpCisgICAgICB7CisgICAgICAgIGZ1bmN0aW9uKF9feCkuc3dhcCgqdGhpcyk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICVGdW5jdGlvbiBhc3NpZ25tZW50IHRvIHplcm8uCisgICAgICAgKiAgQHBvc3QgQGMgIShib29sKSp0aGlzCisgICAgICAgKiAgQHJldHVybnMgQGMgKnRoaXMKKyAgICAgICAqCisgICAgICAgKiAgVGhlIHRhcmdldCBvZiBAYyAqdGhpcyBpcyBkZWFsbG9jYXRlZCwgbGVhdmluZyBpdCBlbXB0eS4KKyAgICAgICAqLworICAgICAgZnVuY3Rpb24mCisgICAgICBvcGVyYXRvcj0oX01fY2xlYXJfdHlwZSopCisgICAgICB7CisgICAgICAgIGlmIChfTV9tYW5hZ2VyKQorCSAgeworCSAgICBfTV9tYW5hZ2VyKF9NX2Z1bmN0b3IsIF9NX2Z1bmN0b3IsIF9fZGVzdHJveV9mdW5jdG9yKTsKKwkgICAgX01fbWFuYWdlciA9IDA7CisJICAgIF9NX2ludm9rZXIgPSAwOworCSAgfQorICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAlRnVuY3Rpb24gYXNzaWdubWVudCB0byBhIG5ldyB0YXJnZXQuCisgICAgICAgKiAgQHBhcmFtIGYgQSAlZnVuY3Rpb24gb2JqZWN0IHRoYXQgaXMgY2FsbGFibGUgd2l0aCBwYXJhbWV0ZXJzIG9mCisgICAgICAgKiAgdHlwZSBAYyBUMSwgQGMgVDIsIC4uLiwgQGMgVE4gYW5kIHJldHVybnMgYSB2YWx1ZSBjb252ZXJ0aWJsZQorICAgICAgICogIHRvIEBjIFJlcy4KKyAgICAgICAqICBAcmV0dXJuIEBjICp0aGlzCisgICAgICAgKgorICAgICAgICogIFRoaXMgICVmdW5jdGlvbiBvYmplY3Qgd3JhcHBlciB3aWxsIHRhcmdldCBhIGNvcHkgb2YgQGEKKyAgICAgICAqICBmLiBJZiBAYSBmIGlzIEBjIHJlZmVyZW5jZV93cmFwcGVyPEY+LCB0aGVuIHRoaXMgZnVuY3Rpb24KKyAgICAgICAqICBvYmplY3Qgd2lsbCBjb250YWluIGEgcmVmZXJlbmNlIHRvIHRoZSBmdW5jdGlvbiBvYmplY3QgQGMKKyAgICAgICAqICBmLmdldCgpLiBJZiBAYSBmIGlzIGEgTlVMTCBmdW5jdGlvbiBwb2ludGVyIG9yIE5VTEwKKyAgICAgICAqICBwb2ludGVyLXRvLW1lbWJlciwgQGMgdGhpcyBvYmplY3Qgd2lsbCBiZSBlbXB0eS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgQGEgZiBpcyBhIG5vbi1OVUxMIGZ1bmN0aW9uIHBvaW50ZXIgb3IgYW4gb2JqZWN0IG9mIHR5cGUgQGMKKyAgICAgICAqICByZWZlcmVuY2Vfd3JhcHBlcjxGPiwgdGhpcyBmdW5jdGlvbiB3aWxsIG5vdCB0aHJvdy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3I+CisgICAgICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8IWlzX2ludGVncmFsPF9GdW5jdG9yPjo6dmFsdWUsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiY+OjpfX3R5cGUKKwlvcGVyYXRvcj0oX0Z1bmN0b3IgX19mKQorCXsKKwkgIGZ1bmN0aW9uKF9fZikuc3dhcCgqdGhpcyk7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICAvLyBbMy43LjIuMl0gZnVuY3Rpb24gbW9kaWZpZXJzCisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBTd2FwIHRoZSB0YXJnZXRzIG9mIHR3byAlZnVuY3Rpb24gb2JqZWN0cy4KKyAgICAgICAqICBAcGFyYW0gZiBBICVmdW5jdGlvbiB3aXRoIGlkZW50aWNhbCBjYWxsIHNpZ25hdHVyZS4KKyAgICAgICAqCisgICAgICAgKiAgU3dhcCB0aGUgdGFyZ2V0cyBvZiBAYyB0aGlzIGZ1bmN0aW9uIG9iamVjdCBhbmQgQGEgZi4gVGhpcworICAgICAgICogIGZ1bmN0aW9uIHdpbGwgbm90IHRocm93IGFuICVleGNlcHRpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQgc3dhcChmdW5jdGlvbiYgX194KQorICAgICAgeworICAgICAgICAvKiBXZSBjYW5ub3QgcGVyZm9ybSBkaXJlY3QgYXNzaWdubWVudHMgb2YgdGhlIF9NX2Z1bmN0b3IKKwkgICBwYXJ0cyBhcyB0aGV5IGFyZSBvZiB0eXBlIF9BbnlfZGF0YSBhbmQgaGF2ZSBhIGRpZmZlcmVudAorCSAgIGR5bmFtaWMgdHlwZS4gIERvaW5nIHNvIHdvdWxkIHZpb2xhdGUgdHlwZS1iYXNlZCBhbGlhc2luZworCSAgIHJ1bGVzIGFuZCBsZWFkIHRvIHNwdXJpb3VzIG1pc2NvbXBpbGF0aW9ucy4KKwkgICBJbnN0ZWFkIHBlcmZvcm0gYSBieXRld2lzZSBleGNoYW5nZSBvZiB0aGUgbWVtb3J5IG9mCisJICAgYm90aCBQT0Qgb2JqZWN0cy4KKwkgICA/Pz8gIEEgd29yZHdpc2UgZXhjaGFuZ2UgaG9ub3JpbmcgYWxpZ25tZW50IG9mIF9NX2Z1bmN0b3IKKwkgICB3b3VsZCBiZSBtb3JlIGVmZmljaWVudC4gIFNlZSBQUjQyODQ1LiAgKi8KKwlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZW9mIChfTV9mdW5jdG9yLl9NX3BvZF9kYXRhKTsgKytpKQorCSAgc3RkOjpzd2FwIChfTV9mdW5jdG9yLl9NX3BvZF9kYXRhW2ldLCBfX3guX01fZnVuY3Rvci5fTV9wb2RfZGF0YVtpXSk7CisJX01hbmFnZXJfdHlwZSBfX29sZF9tYW5hZ2VyID0gX01fbWFuYWdlcjsKKwlfTV9tYW5hZ2VyID0gX194Ll9NX21hbmFnZXI7CisJX194Ll9NX21hbmFnZXIgPSBfX29sZF9tYW5hZ2VyOworCV9JbnZva2VyX3R5cGUgX19vbGRfaW52b2tlciA9IF9NX2ludm9rZXI7CisJX01faW52b2tlciA9IF9feC5fTV9pbnZva2VyOworCV9feC5fTV9pbnZva2VyID0gX19vbGRfaW52b2tlcjsKKyAgICAgIH0KKworICAgICAgLy8gWzMuNy4yLjNdIGZ1bmN0aW9uIGNhcGFjaXR5CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBEZXRlcm1pbmUgaWYgdGhlICVmdW5jdGlvbiB3cmFwcGVyIGhhcyBhIHRhcmdldC4KKyAgICAgICAqCisgICAgICAgKiAgQHJldHVybiBAYyB0cnVlIHdoZW4gdGhpcyAlZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGEgdGFyZ2V0LAorICAgICAgICogIG9yIEBjIGZhbHNlIHdoZW4gaXQgaXMgZW1wdHkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBub3QgdGhyb3cgYW4gJWV4Y2VwdGlvbi4KKyAgICAgICAqLworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICFfTV9lbXB0eSgpOyB9CisjZWxzZQorICAgICAgb3BlcmF0b3IgX1NhZmVfYm9vbCgpIGNvbnN0CisgICAgICB7CisgICAgICAgIGlmIChfTV9lbXB0eSgpKQorCSAgcmV0dXJuIDA7CisJZWxzZQorCSAgcmV0dXJuICZfSGlkZGVuX3R5cGU6Ol9NX2Jvb2w7CisgICAgICB9CisjZW5kaWYKKworICAgICAgLy8gWzMuNy4yLjRdIGZ1bmN0aW9uIGludm9jYXRpb24KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEludm9rZXMgdGhlIGZ1bmN0aW9uIHRhcmdldGVkIGJ5IEBjICp0aGlzLgorICAgICAgICogIEByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIHRhcmdldC4KKyAgICAgICAqICBAdGhyb3dzIGJhZF9mdW5jdGlvbl9jYWxsIHdoZW4gQGMgIShib29sKSp0aGlzCisgICAgICAgKgorICAgICAgICogIFRoZSBmdW5jdGlvbiBjYWxsIG9wZXJhdG9yIGludm9rZXMgdGhlIHRhcmdldCBmdW5jdGlvbiBvYmplY3QKKyAgICAgICAqICBzdG9yZWQgYnkgQGMgdGhpcy4KKyAgICAgICAqLworICAgICAgX1JlcyBvcGVyYXRvcigpKF9BcmdUeXBlcy4uLiBfX2FyZ3MpIGNvbnN0OworCisjaWZkZWYgX19HWFhfUlRUSQorICAgICAgLy8gWzMuNy4yLjVdIGZ1bmN0aW9uIHRhcmdldCBhY2Nlc3MKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBEZXRlcm1pbmUgdGhlIHR5cGUgb2YgdGhlIHRhcmdldCBvZiB0aGlzIGZ1bmN0aW9uIG9iamVjdAorICAgICAgICogIHdyYXBwZXIuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm5zIHRoZSB0eXBlIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBmdW5jdGlvbiBvYmplY3QsIG9yCisgICAgICAgKiAgQGMgdHlwZWlkKHZvaWQpIGlmIEBjICEoYm9vbCkqdGhpcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCB0aHJvdyBhbiAlZXhjZXB0aW9uLgorICAgICAgICovCisgICAgICBjb25zdCB0eXBlX2luZm8mIHRhcmdldF90eXBlKCkgY29uc3Q7CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBBY2Nlc3MgdGhlIHN0b3JlZCB0YXJnZXQgZnVuY3Rpb24gb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqICBAcmV0dXJuIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBzdG9yZWQgdGFyZ2V0IGZ1bmN0aW9uIG9iamVjdCwKKyAgICAgICAqICBpZiBAYyB0eXBlaWQoRnVuY3RvcikuZXF1YWxzKHRhcmdldF90eXBlKCkpOyBvdGhlcndpc2UsIGEgTlVMTAorICAgICAgICogIHBvaW50ZXIuCisgICAgICAgKgorICAgICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCB0aHJvdyBhbiAlZXhjZXB0aW9uLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3Rvcj4gICAgICAgX0Z1bmN0b3IqIHRhcmdldCgpOworICAgICAgCisgICAgICAvLy8gQG92ZXJsb2FkCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3Rvcj4gY29uc3QgX0Z1bmN0b3IqIHRhcmdldCgpIGNvbnN0OworI2VuZGlmCisKKyAgICBwcml2YXRlOgorICAgICAgLy8gWzMuNy4yLjZdIHVuZGVmaW5lZCBvcGVyYXRvcnMKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdGlvbj4KKwl2b2lkIG9wZXJhdG9yPT0oY29uc3QgZnVuY3Rpb248X0Z1bmN0aW9uPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0aW9uPgorCXZvaWQgb3BlcmF0b3IhPShjb25zdCBmdW5jdGlvbjxfRnVuY3Rpb24+JikgY29uc3Q7CisKKyAgICAgIHR5cGVkZWYgX1JlcyAoKl9JbnZva2VyX3R5cGUpKGNvbnN0IF9BbnlfZGF0YSYsIF9BcmdUeXBlcy4uLik7CisgICAgICBfSW52b2tlcl90eXBlIF9NX2ludm9rZXI7CisgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIGZ1bmN0aW9uPF9SZXMoX0FyZ1R5cGVzLi4uKT46OgorICAgIGZ1bmN0aW9uKGNvbnN0IGZ1bmN0aW9uJiBfX3gpCisgICAgOiBfRnVuY3Rpb25fYmFzZSgpCisgICAgeworICAgICAgaWYgKHN0YXRpY19jYXN0PGJvb2w+KF9feCkpCisJeworCSAgX01faW52b2tlciA9IF9feC5fTV9pbnZva2VyOworCSAgX01fbWFuYWdlciA9IF9feC5fTV9tYW5hZ2VyOworCSAgX194Ll9NX21hbmFnZXIoX01fZnVuY3RvciwgX194Ll9NX2Z1bmN0b3IsIF9fY2xvbmVfZnVuY3Rvcik7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3I+CisgICAgICBmdW5jdGlvbjxfUmVzKF9BcmdUeXBlcy4uLik+OjoKKyAgICAgIGZ1bmN0aW9uKF9GdW5jdG9yIF9fZiwKKwkgICAgICAgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjwKKyAgICAgICAgICAgICAgICAgICAgICAgIWlzX2ludGVncmFsPF9GdW5jdG9yPjo6dmFsdWUsIF9Vc2VsZXNzPjo6X190eXBlKQorICAgICAgOiBfRnVuY3Rpb25fYmFzZSgpCisgICAgICB7CisJdHlwZWRlZiBfRnVuY3Rpb25faGFuZGxlcjxfU2lnbmF0dXJlX3R5cGUsIF9GdW5jdG9yPiBfTXlfaGFuZGxlcjsKKworCWlmIChfTXlfaGFuZGxlcjo6X01fbm90X2VtcHR5X2Z1bmN0aW9uKF9fZikpCisJICB7CisJICAgIF9NX2ludm9rZXIgPSAmX015X2hhbmRsZXI6Ol9NX2ludm9rZTsKKwkgICAgX01fbWFuYWdlciA9ICZfTXlfaGFuZGxlcjo6X01fbWFuYWdlcjsKKwkgICAgX015X2hhbmRsZXI6Ol9NX2luaXRfZnVuY3RvcihfTV9mdW5jdG9yLCBfX2YpOworCSAgfQorICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBfUmVzCisgICAgZnVuY3Rpb248X1JlcyhfQXJnVHlwZXMuLi4pPjo6CisgICAgb3BlcmF0b3IoKShfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgIHsKKyAgICAgIGlmIChfTV9lbXB0eSgpKQorICAgICAgICB7CisjaWYgX19FWENFUFRJT05TCisgICAgICAgICAgdGhyb3cgYmFkX2Z1bmN0aW9uX2NhbGwoKTsKKyNlbHNlCisgICAgICAgICAgX19idWlsdGluX2Fib3J0KCk7CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgcmV0dXJuIF9NX2ludm9rZXIoX01fZnVuY3RvciwgX19hcmdzLi4uKTsKKyAgICB9CisKKyNpZmRlZiBfX0dYWF9SVFRJCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBjb25zdCB0eXBlX2luZm8mCisgICAgZnVuY3Rpb248X1JlcyhfQXJnVHlwZXMuLi4pPjo6CisgICAgdGFyZ2V0X3R5cGUoKSBjb25zdAorICAgIHsKKyAgICAgIGlmIChfTV9tYW5hZ2VyKQorICAgICAgICB7CisgICAgICAgICAgX0FueV9kYXRhIF9fdHlwZWluZm9fcmVzdWx0OworICAgICAgICAgIF9NX21hbmFnZXIoX190eXBlaW5mb19yZXN1bHQsIF9NX2Z1bmN0b3IsIF9fZ2V0X3R5cGVfaW5mbyk7CisgICAgICAgICAgcmV0dXJuICpfX3R5cGVpbmZvX3Jlc3VsdC5fTV9hY2Nlc3M8Y29uc3QgdHlwZV9pbmZvKj4oKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorCXJldHVybiB0eXBlaWQodm9pZCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3Rvcj4KKyAgICAgIF9GdW5jdG9yKgorICAgICAgZnVuY3Rpb248X1JlcyhfQXJnVHlwZXMuLi4pPjo6CisgICAgICB0YXJnZXQoKQorICAgICAgeworCWlmICh0eXBlaWQoX0Z1bmN0b3IpID09IHRhcmdldF90eXBlKCkgJiYgX01fbWFuYWdlcikKKwkgIHsKKwkgICAgX0FueV9kYXRhIF9fcHRyOworCSAgICBpZiAoX01fbWFuYWdlcihfX3B0ciwgX01fZnVuY3RvciwgX19nZXRfZnVuY3Rvcl9wdHIpCisJCSYmICFpc19jb25zdDxfRnVuY3Rvcj46OnZhbHVlKQorCSAgICAgIHJldHVybiAwOworCSAgICBlbHNlCisJICAgICAgcmV0dXJuIF9fcHRyLl9NX2FjY2VzczxfRnVuY3Rvcio+KCk7CisJICB9CisJZWxzZQorCSAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yPgorICAgICAgY29uc3QgX0Z1bmN0b3IqCisgICAgICBmdW5jdGlvbjxfUmVzKF9BcmdUeXBlcy4uLik+OjoKKyAgICAgIHRhcmdldCgpIGNvbnN0CisgICAgICB7CisJaWYgKHR5cGVpZChfRnVuY3RvcikgPT0gdGFyZ2V0X3R5cGUoKSAmJiBfTV9tYW5hZ2VyKQorCSAgeworCSAgICBfQW55X2RhdGEgX19wdHI7CisJICAgIF9NX21hbmFnZXIoX19wdHIsIF9NX2Z1bmN0b3IsIF9fZ2V0X2Z1bmN0b3JfcHRyKTsKKwkgICAgcmV0dXJuIF9fcHRyLl9NX2FjY2Vzczxjb25zdCBfRnVuY3Rvcio+KCk7CisJICB9CisJZWxzZQorCSAgcmV0dXJuIDA7CisgICAgICB9CisjZW5kaWYKKworICAvLyBbMy43LjIuN10gbnVsbCBwb2ludGVyIGNvbXBhcmlzb25zCisKKyAgLyoqCisgICAqICBAYnJpZWYgQ29tcGFyZXMgYSBwb2x5bW9ycGhpYyBmdW5jdGlvbiBvYmplY3Qgd3JhcHBlciBhZ2FpbnN0IDAKKyAgICogICh0aGUgTlVMTCBwb2ludGVyKS4KKyAgICogIEByZXR1cm5zIEBjIHRydWUgaWYgdGhlIHdyYXBwZXIgaGFzIG5vIHRhcmdldCwgQGMgZmFsc2Ugb3RoZXJ3aXNlCisgICAqCisgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IHRocm93IGFuICVleGNlcHRpb24uCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2lnbmF0dXJlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBmdW5jdGlvbjxfU2lnbmF0dXJlPiYgX19mLCBfTV9jbGVhcl90eXBlKikKKyAgICB7IHJldHVybiAhc3RhdGljX2Nhc3Q8Ym9vbD4oX19mKTsgfQorCisgIC8vLyBAb3ZlcmxvYWQKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oX01fY2xlYXJfdHlwZSosIGNvbnN0IGZ1bmN0aW9uPF9TaWduYXR1cmU+JiBfX2YpCisgICAgeyByZXR1cm4gIXN0YXRpY19jYXN0PGJvb2w+KF9fZik7IH0KKworICAvKioKKyAgICogIEBicmllZiBDb21wYXJlcyBhIHBvbHltb3JwaGljIGZ1bmN0aW9uIG9iamVjdCB3cmFwcGVyIGFnYWluc3QgMAorICAgKiAgKHRoZSBOVUxMIHBvaW50ZXIpLgorICAgKiAgQHJldHVybnMgQGMgZmFsc2UgaWYgdGhlIHdyYXBwZXIgaGFzIG5vIHRhcmdldCwgQGMgdHJ1ZSBvdGhlcndpc2UKKyAgICoKKyAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBub3QgdGhyb3cgYW4gJWV4Y2VwdGlvbi4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IGZ1bmN0aW9uPF9TaWduYXR1cmU+JiBfX2YsIF9NX2NsZWFyX3R5cGUqKQorICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KF9fZik7IH0KKworICAvLy8gQG92ZXJsb2FkCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KF9NX2NsZWFyX3R5cGUqLCBjb25zdCBmdW5jdGlvbjxfU2lnbmF0dXJlPiYgX19mKQorICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KF9fZik7IH0KKworICAvLyBbMy43LjIuOF0gc3BlY2lhbGl6ZWQgYWxnb3JpdGhtcworCisgIC8qKgorICAgKiAgQGJyaWVmIFN3YXAgdGhlIHRhcmdldHMgb2YgdHdvIHBvbHltb3JwaGljIGZ1bmN0aW9uIG9iamVjdCB3cmFwcGVycy4KKyAgICoKKyAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBub3QgdGhyb3cgYW4gJWV4Y2VwdGlvbi4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKGZ1bmN0aW9uPF9TaWduYXR1cmU+JiBfX3gsIGZ1bmN0aW9uPF9TaWduYXR1cmU+JiBfX3kpCisgICAgeyBfX3guc3dhcChfX3kpOyB9Cit9Cit9CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfRlVOQ1RJT05BTApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvZnVuY3Rpb25hbF9oYXNoLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9mdW5jdGlvbmFsX2hhc2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWE0ODNlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvZnVuY3Rpb25hbF9oYXNoLmgKQEAgLTAsMCArMSwxOTIgQEAKKy8vIFRSMSBmdW5jdGlvbmFsX2hhc2guaCBoZWFkZXIgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvZnVuY3Rpb25hbF9oYXNoLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfRlVOQ1RJT05BTF9IQVNIX0gKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX0ZVTkNUSU9OQUxfSEFTSF9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCituYW1lc3BhY2Ugc3RkCit7CituYW1lc3BhY2UgdHIxCit7CisgIC8vLyBDbGFzcyB0ZW1wbGF0ZSBoYXNoLgorICAvLyBEZWNsYXJhdGlvbiBvZiBkZWZhdWx0IGhhc2ggZnVuY3RvciBzdGQ6OnRyMTo6aGFzaC4gIFRoZSB0eXBlcyBmb3IKKyAgLy8gd2hpY2ggc3RkOjp0cjE6Omhhc2g8VD4gaXMgd2VsbC1kZWZpbmVkIGlzIGluIGNsYXVzZSA2LjMuMy4gb2YgdGhlIFBEVFIuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaGFzaCA6IHB1YmxpYyBzdGQ6OnVuYXJ5X2Z1bmN0aW9uPF9UcCwgc2l6ZV90PgorICAgIHsKKyAgICAgIHNpemVfdAorICAgICAgb3BlcmF0b3IoKShfVHAgX192YWwpIGNvbnN0OworICAgIH07CisKKyAgLy8vIFBhcnRpYWwgc3BlY2lhbGl6YXRpb25zIGZvciBwb2ludGVyIHR5cGVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGhhc2g8X1RwKj4gOiBwdWJsaWMgc3RkOjp1bmFyeV9mdW5jdGlvbjxfVHAqLCBzaXplX3Q+CisgICAgeworICAgICAgc2l6ZV90CisgICAgICBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdAorICAgICAgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KF9fcCk7IH0KKyAgICB9OworCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbnMgZm9yIGludGVnZXIgdHlwZXMuCisjZGVmaW5lIF9UUjFfaGFzaHRhYmxlX2RlZmluZV90cml2aWFsX2hhc2goX1RwKSAJXAorICB0ZW1wbGF0ZTw+CQkJCQkJXAorICAgIGlubGluZSBzaXplX3QJCQkJCVwKKyAgICBoYXNoPF9UcD46Om9wZXJhdG9yKCkoX1RwIF9fdmFsKSBjb25zdAkJXAorICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oX192YWwpOyB9CisKKyAgX1RSMV9oYXNodGFibGVfZGVmaW5lX3RyaXZpYWxfaGFzaChib29sKTsKKyAgX1RSMV9oYXNodGFibGVfZGVmaW5lX3RyaXZpYWxfaGFzaChjaGFyKTsKKyAgX1RSMV9oYXNodGFibGVfZGVmaW5lX3RyaXZpYWxfaGFzaChzaWduZWQgY2hhcik7CisgIF9UUjFfaGFzaHRhYmxlX2RlZmluZV90cml2aWFsX2hhc2godW5zaWduZWQgY2hhcik7CisgIF9UUjFfaGFzaHRhYmxlX2RlZmluZV90cml2aWFsX2hhc2god2NoYXJfdCk7CisgIF9UUjFfaGFzaHRhYmxlX2RlZmluZV90cml2aWFsX2hhc2goc2hvcnQpOworICBfVFIxX2hhc2h0YWJsZV9kZWZpbmVfdHJpdmlhbF9oYXNoKGludCk7CisgIF9UUjFfaGFzaHRhYmxlX2RlZmluZV90cml2aWFsX2hhc2gobG9uZyk7CisgIF9UUjFfaGFzaHRhYmxlX2RlZmluZV90cml2aWFsX2hhc2gobG9uZyBsb25nKTsKKyAgX1RSMV9oYXNodGFibGVfZGVmaW5lX3RyaXZpYWxfaGFzaCh1bnNpZ25lZCBzaG9ydCk7CisgIF9UUjFfaGFzaHRhYmxlX2RlZmluZV90cml2aWFsX2hhc2godW5zaWduZWQgaW50KTsKKyAgX1RSMV9oYXNodGFibGVfZGVmaW5lX3RyaXZpYWxfaGFzaCh1bnNpZ25lZCBsb25nKTsKKyAgX1RSMV9oYXNodGFibGVfZGVmaW5lX3RyaXZpYWxfaGFzaCh1bnNpZ25lZCBsb25nIGxvbmcpOworCisjdW5kZWYgX1RSMV9oYXNodGFibGVfZGVmaW5lX3RyaXZpYWxfaGFzaAorCisgIC8vIEZvd2xlciAvIE5vbGwgLyBWbyAoRk5WKSBIYXNoICh0eXBlIEZOVi0xYSkKKyAgLy8gKFVzZWQgYnkgdGhlIG5leHQgc3BlY2lhbGl6YXRpb25zIG9mIHN0ZDo6dHIxOjpoYXNoLikKKworICAvLy8gRHVtbXkgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiAoZm9yIHNpemVvZihzaXplX3QpICE9IDQsIDgpLgorICB0ZW1wbGF0ZTxzaXplX3Q+CisgICAgc3RydWN0IF9GbnZfaGFzaF9iYXNlCisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBzdGF0aWMgc2l6ZV90CisgICAgICAgIGhhc2goY29uc3QgX1RwKiBfX3B0ciwgc2l6ZV90IF9fY2xlbmd0aCkKKyAgICAgICAgeworCSAgc2l6ZV90IF9fcmVzdWx0ID0gMDsKKwkgIGNvbnN0IGNoYXIqIF9fY3B0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcHRyKTsKKwkgIGZvciAoOyBfX2NsZW5ndGg7IC0tX19jbGVuZ3RoKQorCSAgICBfX3Jlc3VsdCA9IChfX3Jlc3VsdCAqIDEzMSkgKyAqX19jcHRyKys7CisJICByZXR1cm4gX19yZXN1bHQ7CisJfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfRm52X2hhc2hfYmFzZTw0PgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RhdGljIHNpemVfdAorICAgICAgICBoYXNoKGNvbnN0IF9UcCogX19wdHIsIHNpemVfdCBfX2NsZW5ndGgpCisgICAgICAgIHsKKwkgIHNpemVfdCBfX3Jlc3VsdCA9IHN0YXRpY19jYXN0PHNpemVfdD4oMjE2NjEzNjI2MVVMKTsKKwkgIGNvbnN0IGNoYXIqIF9fY3B0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcHRyKTsKKwkgIGZvciAoOyBfX2NsZW5ndGg7IC0tX19jbGVuZ3RoKQorCSAgICB7CisJICAgICAgX19yZXN1bHQgXj0gc3RhdGljX2Nhc3Q8c2l6ZV90PigqX19jcHRyKyspOworCSAgICAgIF9fcmVzdWx0ICo9IHN0YXRpY19jYXN0PHNpemVfdD4oMTY3Nzc2MTlVTCk7CisJICAgIH0KKwkgIHJldHVybiBfX3Jlc3VsdDsKKwl9CisgICAgfTsKKyAgCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX0Zudl9oYXNoX2Jhc2U8OD4KKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIHN0YXRpYyBzaXplX3QKKyAgICAgICAgaGFzaChjb25zdCBfVHAqIF9fcHRyLCBzaXplX3QgX19jbGVuZ3RoKQorICAgICAgICB7CisJICBzaXplX3QgX19yZXN1bHQKKwkgICAgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KDE0Njk1OTgxMDM5MzQ2NjU2MDM3VUxMKTsKKwkgIGNvbnN0IGNoYXIqIF9fY3B0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcHRyKTsKKwkgIGZvciAoOyBfX2NsZW5ndGg7IC0tX19jbGVuZ3RoKQorCSAgICB7CisJICAgICAgX19yZXN1bHQgXj0gc3RhdGljX2Nhc3Q8c2l6ZV90PigqX19jcHRyKyspOworCSAgICAgIF9fcmVzdWx0ICo9IHN0YXRpY19jYXN0PHNpemVfdD4oMTA5OTUxMTYyODIxMVVMTCk7CisJICAgIH0KKwkgIHJldHVybiBfX3Jlc3VsdDsKKwl9CisgICAgfTsKKworICBzdHJ1Y3QgX0Zudl9oYXNoCisgIDogcHVibGljIF9GbnZfaGFzaF9iYXNlPHNpemVvZihzaXplX3QpPgorICB7CisgICAgdXNpbmcgX0Zudl9oYXNoX2Jhc2U8c2l6ZW9mKHNpemVfdCk+OjpoYXNoOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgc3RhdGljIHNpemVfdAorICAgICAgaGFzaChjb25zdCBfVHAmIF9fdmFsKQorICAgICAgeyByZXR1cm4gaGFzaCgmX192YWwsIHNpemVvZihfX3ZhbCkpOyB9CisgIH07CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9ucyBmb3IgZmxvYXQuCisgIHRlbXBsYXRlPD4KKyAgICBpbmxpbmUgc2l6ZV90CisgICAgaGFzaDxmbG9hdD46Om9wZXJhdG9yKCkoZmxvYXQgX192YWwpIGNvbnN0CisgICAgeworICAgICAgLy8gMCBhbmQgLTAgYm90aCBoYXNoIHRvIHplcm8uCisgICAgICByZXR1cm4gX192YWwgIT0gMC4wZiA/IHN0ZDo6dHIxOjpfRm52X2hhc2g6Omhhc2goX192YWwpIDogMDsKKyAgICB9CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9ucyBmb3IgZG91YmxlLgorICB0ZW1wbGF0ZTw+CisgICAgaW5saW5lIHNpemVfdAorICAgIGhhc2g8ZG91YmxlPjo6b3BlcmF0b3IoKShkb3VibGUgX192YWwpIGNvbnN0CisgICAgeworICAgICAgLy8gMCBhbmQgLTAgYm90aCBoYXNoIHRvIHplcm8uCisgICAgICByZXR1cm4gX192YWwgIT0gMC4wID8gc3RkOjp0cjE6Ol9GbnZfaGFzaDo6aGFzaChfX3ZhbCkgOiAwOworICAgIH0KKworICAvLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb25zIGZvciBsb25nIGRvdWJsZS4KKyAgdGVtcGxhdGU8PgorICAgIF9HTElCQ1hYX1BVUkUgc2l6ZV90CisgICAgaGFzaDxsb25nIGRvdWJsZT46Om9wZXJhdG9yKCkobG9uZyBkb3VibGUgX192YWwpIGNvbnN0OworCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBvZiBtZW1iZXIgb3BlcmF0b3IgZm9yIG5vbi1idWlsdGluIHR5cGVzLgorICB0ZW1wbGF0ZTw+CisgICAgX0dMSUJDWFhfUFVSRSBzaXplX3QKKyAgICBoYXNoPHN0cmluZz46Om9wZXJhdG9yKCkoc3RyaW5nKSBjb25zdDsKKworICB0ZW1wbGF0ZTw+CisgICAgX0dMSUJDWFhfUFVSRSBzaXplX3QKKyAgICBoYXNoPGNvbnN0IHN0cmluZyY+OjpvcGVyYXRvcigpKGNvbnN0IHN0cmluZyYpIGNvbnN0OworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgdGVtcGxhdGU8PgorICAgIF9HTElCQ1hYX1BVUkUgc2l6ZV90CisgICAgaGFzaDx3c3RyaW5nPjo6b3BlcmF0b3IoKSh3c3RyaW5nKSBjb25zdDsKKworICB0ZW1wbGF0ZTw+CisgICAgX0dMSUJDWFhfUFVSRSBzaXplX3QKKyAgICBoYXNoPGNvbnN0IHdzdHJpbmcmPjo6b3BlcmF0b3IoKShjb25zdCB3c3RyaW5nJikgY29uc3Q7CisjZW5kaWYKK30KK30KKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9GVU5DVElPTkFMX0hBU0hfSApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvZ2FtbWEudGNjIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvZ2FtbWEudGNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NGU2NDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9nYW1tYS50Y2MKQEAgLTAsMCArMSw0NzEgQEAKKy8vIFNwZWNpYWwgZnVuY3Rpb25zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLy8KKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvZ2FtbWEudGNjCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyIFRSMTogNS4yICBTcGVjaWFsIGZ1bmN0aW9ucworLy8KKworLy8gV3JpdHRlbiBieSBFZHdhcmQgU21pdGgtUm93bGFuZCBiYXNlZCBvbjoKKy8vICAgKDEpIEhhbmRib29rIG9mIE1hdGhlbWF0aWNhbCBGdW5jdGlvbnMsCisvLyAgICAgICBlZC4gTWlsdG9uIEFicmFtb3dpdHogYW5kIElyZW5lIEEuIFN0ZWd1biwKKy8vICAgICAgIERvdmVyIFB1YmxpY2F0aW9ucywKKy8vICAgICAgIFNlY3Rpb24gNiwgcHAuIDI1My0yNjYKKy8vICAgKDIpIFRoZSBHbnUgU2NpZW50aWZpYyBMaWJyYXJ5LCBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ3NsCisvLyAgICgzKSBOdW1lcmljYWwgUmVjaXBlcyBpbiBDLCBieSBXLiBILiBQcmVzcywgUy4gQS4gVGV1a29sc2t5LAorLy8gICAgICAgVy4gVC4gVmV0dGVybGluZywgQi4gUC4gRmxhbm5lcnksIENhbWJyaWRnZSBVbml2ZXJzaXR5IFByZXNzICgxOTkyKSwKKy8vICAgICAgIDJuZCBlZCwgcHAuIDIxMy0yMTYKKy8vICAgKDQpIEdhbW1hLCBFeHBsb3JpbmcgRXVsZXIncyBDb25zdGFudCwgSnVsaWFuIEhhdmlsLAorLy8gICAgICAgUHJpbmNldG9uLCAyMDAzLgorCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9HQU1NQV9UQ0MKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX0dBTU1BX1RDQyAxCisKKyNpbmNsdWRlICJzcGVjaWFsX2Z1bmN0aW9uX3V0aWwuaCIKKworbmFtZXNwYWNlIHN0ZAoreworbmFtZXNwYWNlIHRyMQoreworICAvLyBJbXBsZW1lbnRhdGlvbi1zcGFjZSBkZXRhaWxzLgorICBuYW1lc3BhY2UgX19kZXRhaWwKKyAgeworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgVGhpcyByZXR1cm5zIEJlcm5vdWxsaSBudW1iZXJzIGZyb20gYSB0YWJsZSBvciBieSBzdW1tYXRpb24KKyAgICAgKiAgICAgICAgICBmb3IgbGFyZ2VyIHZhbHVlcy4KKyAgICAgKgorICAgICAqICAgUmVjdXJzaW9uIGlzIHVuc3RhYmxlLgorICAgICAqCisgICAgICogICBAcGFyYW0gX19uIHRoZSBvcmRlciBuIG9mIHRoZSBCZXJub3VsbGkgbnVtYmVyLgorICAgICAqICAgQHJldHVybiAgVGhlIEJlcm5vdWxsaSBudW1iZXIgb2Ygb3JkZXIgbi4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwPgorICAgIF9UcCBfX2Jlcm5vdWxsaV9zZXJpZXModW5zaWduZWQgaW50IF9fbikKKyAgICB7CisKKyAgICAgIHN0YXRpYyBjb25zdCBfVHAgX19udW1bMjhdID0geworICAgICAgICBfVHAoMVVMKSwgICAgICAgICAgICAgICAgICAgICAgICAtX1RwKDFVTCkgLyBfVHAoMlVMKSwKKyAgICAgICAgX1RwKDFVTCkgLyBfVHAoNlVMKSwgICAgICAgICAgICAgX1RwKDBVTCksCisgICAgICAgIC1fVHAoMVVMKSAvIF9UcCgzMFVMKSwgICAgICAgICAgIF9UcCgwVUwpLAorICAgICAgICBfVHAoMVVMKSAvIF9UcCg0MlVMKSwgICAgICAgICAgICBfVHAoMFVMKSwKKyAgICAgICAgLV9UcCgxVUwpIC8gX1RwKDMwVUwpLCAgICAgICAgICAgX1RwKDBVTCksCisgICAgICAgIF9UcCg1VUwpIC8gX1RwKDY2VUwpLCAgICAgICAgICAgIF9UcCgwVUwpLAorICAgICAgICAtX1RwKDY5MVVMKSAvIF9UcCgyNzMwVUwpLCAgICAgICBfVHAoMFVMKSwKKyAgICAgICAgX1RwKDdVTCkgLyBfVHAoNlVMKSwgICAgICAgICAgICAgX1RwKDBVTCksCisgICAgICAgIC1fVHAoMzYxN1VMKSAvIF9UcCg1MTBVTCksICAgICAgIF9UcCgwVUwpLAorICAgICAgICBfVHAoNDM4NjdVTCkgLyBfVHAoNzk4VUwpLCAgICAgICBfVHAoMFVMKSwKKyAgICAgICAgLV9UcCgxNzQ2MTEpIC8gX1RwKDMzMFVMKSwgICAgICAgX1RwKDBVTCksCisgICAgICAgIF9UcCg4NTQ1MTNVTCkgLyBfVHAoMTM4VUwpLCAgICAgIF9UcCgwVUwpLAorICAgICAgICAtX1RwKDIzNjM2NDA5MVVMKSAvIF9UcCgyNzMwVUwpLCBfVHAoMFVMKSwKKyAgICAgICAgX1RwKDg1NTMxMDNVTCkgLyBfVHAoNlVMKSwgICAgICAgX1RwKDBVTCkKKyAgICAgIH07CisKKyAgICAgIGlmIChfX24gPT0gMCkKKyAgICAgICAgcmV0dXJuIF9UcCgxKTsKKworICAgICAgaWYgKF9fbiA9PSAxKQorICAgICAgICByZXR1cm4gLV9UcCgxKSAvIF9UcCgyKTsKKworICAgICAgLy8gIFRha2UgY2FyZSBvZiB0aGUgcmVzdCBvZiB0aGUgb2RkIG9uZXMuCisgICAgICBpZiAoX19uICUgMiA9PSAxKQorICAgICAgICByZXR1cm4gX1RwKDApOworCisgICAgICAvLyAgVGFrZSBjYXJlIG9mIHNvbWUgc21hbGwgZXZlbnMgdGhhdCBhcmUgcGFpbmZ1bCBmb3IgdGhlIHNlcmllcy4KKyAgICAgIGlmIChfX24gPCAyOCkKKyAgICAgICAgcmV0dXJuIF9fbnVtW19fbl07CisKKworICAgICAgX1RwIF9fZmFjdCA9IF9UcCgxKTsKKyAgICAgIGlmICgoX19uIC8gMikgJSAyID09IDApCisgICAgICAgIF9fZmFjdCAqPSBfVHAoLTEpOworICAgICAgZm9yICh1bnNpZ25lZCBpbnQgX19rID0gMTsgX19rIDw9IF9fbjsgKytfX2spCisgICAgICAgIF9fZmFjdCAqPSBfX2sgLyAoX1RwKDIpICogX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpKCkpOworICAgICAgX19mYWN0ICo9IF9UcCgyKTsKKworICAgICAgX1RwIF9fc3VtID0gX1RwKDApOworICAgICAgZm9yICh1bnNpZ25lZCBpbnQgX19pID0gMTsgX19pIDwgMTAwMDsgKytfX2kpCisgICAgICAgIHsKKyAgICAgICAgICBfVHAgX190ZXJtID0gc3RkOjpwb3coX1RwKF9faSksIC1fVHAoX19uKSk7CisgICAgICAgICAgaWYgKF9fdGVybSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6ZXBzaWxvbigpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgX19zdW0gKz0gX190ZXJtOworICAgICAgICB9CisKKyAgICAgIHJldHVybiBfX2ZhY3QgKiBfX3N1bTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmIFRoaXMgcmV0dXJucyBCZXJub3VsbGkgbnVtYmVyIFxmJEJfblxmJC4KKyAgICAgKgorICAgICAqICAgQHBhcmFtIF9fbiB0aGUgb3JkZXIgbiBvZiB0aGUgQmVybm91bGxpIG51bWJlci4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBCZXJub3VsbGkgbnVtYmVyIG9mIG9yZGVyIG4uCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICBfX2Jlcm5vdWxsaShjb25zdCBpbnQgX19uKQorICAgIHsKKyAgICAgIHJldHVybiBfX2Jlcm5vdWxsaV9zZXJpZXM8X1RwPihfX24pOworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgUmV0dXJuIFxmJGxvZyhcR2FtbWEoeCkpXGYkIGJ5IGFzeW1wdG90aWMgZXhwYW5zaW9uCisgICAgICogICAgICAgICAgd2l0aCBCZXJub3VsbGkgbnVtYmVyIGNvZWZmaWNpZW50cy4gIFRoaXMgaXMgbGlrZQorICAgICAqICAgICAgICAgIFN0ZXJsaW5nJ3MgYXBwcm94aW1hdGlvbi4KKyAgICAgKgorICAgICAqICAgQHBhcmFtIF9feCBUaGUgYXJndW1lbnQgb2YgdGhlIGxvZyBvZiB0aGUgZ2FtbWEgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgbG9nYXJpdGhtIG9mIHRoZSBnYW1tYSBmdW5jdGlvbi4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19sb2dfZ2FtbWFfYmVybm91bGxpKGNvbnN0IF9UcCBfX3gpCisgICAgeworICAgICAgX1RwIF9fbGcgPSAoX194IC0gX1RwKDAuNUwpKSAqIHN0ZDo6bG9nKF9feCkgLSBfX3gKKyAgICAgICAgICAgICAgICsgX1RwKDAuNUwpICogc3RkOjpsb2coX1RwKDIpCisgICAgICAgICAgICAgICAqIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waSgpKTsKKworICAgICAgY29uc3QgX1RwIF9feHggPSBfX3ggKiBfX3g7CisgICAgICBfVHAgX19oZWxwID0gX1RwKDEpIC8gX194OworICAgICAgZm9yICggdW5zaWduZWQgaW50IF9faSA9IDE7IF9faSA8IDIwOyArK19faSApCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCBfVHAgX18yaSA9IF9UcCgyICogX19pKTsKKyAgICAgICAgICBfX2hlbHAgLz0gX18yaSAqIChfXzJpIC0gX1RwKDEpKSAqIF9feHg7CisgICAgICAgICAgX19sZyArPSBfX2Jlcm5vdWxsaTxfVHA+KDIgKiBfX2kpICogX19oZWxwOworICAgICAgICB9CisKKyAgICAgIHJldHVybiBfX2xnOworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgUmV0dXJuIFxmJGxvZyhcR2FtbWEoeCkpXGYkIGJ5IHRoZSBMYW5jem9zIG1ldGhvZC4KKyAgICAgKiAgICAgICAgICBUaGlzIG1ldGhvZCBkb21pbmF0ZXMgYWxsIG90aGVycyBvbiB0aGUgcG9zaXRpdmUgYXhpcyBJIHRoaW5rLgorICAgICAqCisgICAgICogICBAcGFyYW0gX194IFRoZSBhcmd1bWVudCBvZiB0aGUgbG9nIG9mIHRoZSBnYW1tYSBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBsb2dhcml0aG0gb2YgdGhlIGdhbW1hIGZ1bmN0aW9uLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2xvZ19nYW1tYV9sYW5jem9zKGNvbnN0IF9UcCBfX3gpCisgICAgeworICAgICAgY29uc3QgX1RwIF9feG0xID0gX194IC0gX1RwKDEpOworCisgICAgICBzdGF0aWMgY29uc3QgX1RwIF9fbGFuY3pvc19jaGViXzdbOV0gPSB7CisgICAgICAgX1RwKCAwLjk5OTk5OTk5OTk5OTgwOTkzMjI3Njg0NzAwNDczNDc4TCksCisgICAgICAgX1RwKCA2NzYuNTIwMzY4MTIxODg1MDk4NTY3MDA5MTkwNDQ0MDE5TCksCisgICAgICAgX1RwKC0xMjU5LjEzOTIxNjcyMjQwMjg3MDQ3MTU2MDc4NzU1MjgzTCksCisgICAgICAgX1RwKCA3NzEuMzIzNDI4Nzc3NjUzMDc4ODQ4NjUyODI1ODg5NEwpLAorICAgICAgIF9UcCgtMTc2LjYxNTAyOTE2MjE0MDU5OTA2NTg0NTUxMzU0TCksCisgICAgICAgX1RwKCAxMi41MDczNDMyNzg2ODY5MDQ4MTQ0NTg5MzY4NTNMKSwKKyAgICAgICBfVHAoLTAuMTM4NTcxMDk1MjY1NzIwMTE2ODk1NTQ3MDdMKSwKKyAgICAgICBfVHAoIDkuOTg0MzY5NTc4MDE5NTcwODU5NTYzZS02TCksCisgICAgICAgX1RwKCAxLjUwNTYzMjczNTE0OTMxMTU1ODM0ZS03TCkKKyAgICAgIH07CisKKyAgICAgIHN0YXRpYyBjb25zdCBfVHAgX19MT0dST09UMlBJCisgICAgICAgICAgPSBfVHAoMC45MTg5Mzg1MzMyMDQ2NzI3NDE3ODAzMjk3MzY0MDU2MTc2TCk7CisKKyAgICAgIF9UcCBfX3N1bSA9IF9fbGFuY3pvc19jaGViXzdbMF07CisgICAgICBmb3IodW5zaWduZWQgaW50IF9fayA9IDE7IF9fayA8IDk7ICsrX19rKQorICAgICAgICBfX3N1bSArPSBfX2xhbmN6b3NfY2hlYl83W19fa10gLyAoX194bTEgKyBfX2spOworCisgICAgICBjb25zdCBfVHAgX190ZXJtMSA9IChfX3htMSArIF9UcCgwLjVMKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICogc3RkOjpsb2coKF9feG0xICsgX1RwKDcuNUwpKQorICAgICAgICAgICAgICAgICAgICAgICAvIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19ldWxlcigpKTsKKyAgICAgIGNvbnN0IF9UcCBfX3Rlcm0yID0gX19MT0dST09UMlBJICsgc3RkOjpsb2coX19zdW0pOworICAgICAgY29uc3QgX1RwIF9fcmVzdWx0ID0gX190ZXJtMSArIChfX3Rlcm0yIC0gX1RwKDcpKTsKKworICAgICAgcmV0dXJuIF9fcmVzdWx0OworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgUmV0dXJuIFxmJCBsb2cofFxHYW1tYSh4KXwpIFxmJC4KKyAgICAgKiAgICAgICAgICBUaGlzIHdpbGwgcmV0dXJuIHZhbHVlcyBldmVuIGZvciBcZiQgeCA8IDAgXGYkLgorICAgICAqICAgICAgICAgIFRvIHJlY292ZXIgdGhlIHNpZ24gb2YgXGYkIFxHYW1tYSh4KSBcZiQgZm9yCisgICAgICogICAgICAgICAgYW55IGFyZ3VtZW50IHVzZSBAYSBfX2xvZ19nYW1tYV9zaWduLgorICAgICAqCisgICAgICogICBAcGFyYW0gX194IFRoZSBhcmd1bWVudCBvZiB0aGUgbG9nIG9mIHRoZSBnYW1tYSBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBsb2dhcml0aG0gb2YgdGhlIGdhbW1hIGZ1bmN0aW9uLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2xvZ19nYW1tYShjb25zdCBfVHAgX194KQorICAgIHsKKyAgICAgIGlmIChfX3ggPiBfVHAoMC41TCkpCisgICAgICAgIHJldHVybiBfX2xvZ19nYW1tYV9sYW5jem9zKF9feCk7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCBfVHAgX19zaW5fZmFjdAorICAgICAgICAgICAgICAgICA9IHN0ZDo6YWJzKHN0ZDo6c2luKF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waSgpICogX194KSk7CisgICAgICAgICAgaWYgKF9fc2luX2ZhY3QgPT0gX1RwKDApKQorICAgICAgICAgICAgc3RkOjpfX3Rocm93X2RvbWFpbl9lcnJvcihfX04oIkFyZ3VtZW50IGlzIG5vbnBvc2l0aXZlIGludGVnZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIF9fbG9nX2dhbW1hIikpOworICAgICAgICAgIHJldHVybiBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fbG5waSgpCisgICAgICAgICAgICAgICAgICAgICAtIHN0ZDo6bG9nKF9fc2luX2ZhY3QpCisgICAgICAgICAgICAgICAgICAgICAtIF9fbG9nX2dhbW1hX2xhbmN6b3MoX1RwKDEpIC0gX194KTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgUmV0dXJuIHRoZSBzaWduIG9mIFxmJCBcR2FtbWEoeCkgXGYkLgorICAgICAqICAgICAgICAgIEF0IG5vbnBvc2l0aXZlIGludGVnZXJzIHplcm8gaXMgcmV0dXJuZWQuCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSBfX3ggVGhlIGFyZ3VtZW50IG9mIHRoZSBnYW1tYSBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBzaWduIG9mIHRoZSBnYW1tYSBmdW5jdGlvbi4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19sb2dfZ2FtbWFfc2lnbihjb25zdCBfVHAgX194KQorICAgIHsKKyAgICAgIGlmIChfX3ggPiBfVHAoMCkpCisgICAgICAgIHJldHVybiBfVHAoMSk7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCBfVHAgX19zaW5fZmFjdAorICAgICAgICAgICAgICAgICAgPSBzdGQ6OnNpbihfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fcGkoKSAqIF9feCk7CisgICAgICAgICAgaWYgKF9fc2luX2ZhY3QgPiBfVHAoMCkpCisgICAgICAgICAgICByZXR1cm4gKDEpOworICAgICAgICAgIGVsc2UgaWYgKF9fc2luX2ZhY3QgPCBfVHAoMCkpCisgICAgICAgICAgICByZXR1cm4gLV9UcCgxKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gX1RwKDApOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBSZXR1cm4gdGhlIGxvZ2FyaXRobSBvZiB0aGUgYmlub21pYWwgY29lZmZpY2llbnQuCisgICAgICogICBUaGUgYmlub21pYWwgY29lZmZpY2llbnQgaXMgZ2l2ZW4gYnk6CisgICAgICogICBAZlsKKyAgICAgKiAgIFxsZWZ0KCAgXHJpZ2h0KSA9IFxmcmFje24hfXsobi1rKSEgayF9CisgICAgICogICBAZl0KKyAgICAgKgorICAgICAqICAgQHBhcmFtIF9fbiBUaGUgZmlyc3QgYXJndW1lbnQgb2YgdGhlIGJpbm9taWFsIGNvZWZmaWNpZW50LgorICAgICAqICAgQHBhcmFtIF9fayBUaGUgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBiaW5vbWlhbCBjb2VmZmljaWVudC4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBiaW5vbWlhbCBjb2VmZmljaWVudC4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19sb2dfYmluY29lZihjb25zdCB1bnNpZ25lZCBpbnQgX19uLCBjb25zdCB1bnNpZ25lZCBpbnQgX19rKQorICAgIHsKKyAgICAgIC8vICBNYXggZSBleHBvbmVudCBiZWZvcmUgb3ZlcmZsb3cuCisgICAgICBzdGF0aWMgY29uc3QgX1RwIF9fbWF4X2JpbmNvZWZmCisgICAgICAgICAgICAgICAgICAgICAgPSBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46Om1heF9leHBvbmVudDEwCisgICAgICAgICAgICAgICAgICAgICAgKiBzdGQ6OmxvZyhfVHAoMTApKSAtIF9UcCgxKTsKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAgICBfVHAgX19jb2VmZiA9ICBzdGQ6OnRyMTo6bGdhbW1hKF9UcCgxICsgX19uKSkKKyAgICAgICAgICAgICAgICAgIC0gc3RkOjp0cjE6OmxnYW1tYShfVHAoMSArIF9faykpCisgICAgICAgICAgICAgICAgICAtIHN0ZDo6dHIxOjpsZ2FtbWEoX1RwKDEgKyBfX24gLSBfX2spKTsKKyNlbHNlCisgICAgICBfVHAgX19jb2VmZiA9ICBfX2xvZ19nYW1tYShfVHAoMSArIF9fbikpCisgICAgICAgICAgICAgICAgICAtIF9fbG9nX2dhbW1hKF9UcCgxICsgX19rKSkKKyAgICAgICAgICAgICAgICAgIC0gX19sb2dfZ2FtbWEoX1RwKDEgKyBfX24gLSBfX2spKTsKKyNlbmRpZgorICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgUmV0dXJuIHRoZSBiaW5vbWlhbCBjb2VmZmljaWVudC4KKyAgICAgKiAgIFRoZSBiaW5vbWlhbCBjb2VmZmljaWVudCBpcyBnaXZlbiBieToKKyAgICAgKiAgIEBmWworICAgICAqICAgXGxlZnQoICBccmlnaHQpID0gXGZyYWN7biF9eyhuLWspISBrIX0KKyAgICAgKiAgIEBmXQorICAgICAqCisgICAgICogICBAcGFyYW0gX19uIFRoZSBmaXJzdCBhcmd1bWVudCBvZiB0aGUgYmlub21pYWwgY29lZmZpY2llbnQuCisgICAgICogICBAcGFyYW0gX19rIFRoZSBzZWNvbmQgYXJndW1lbnQgb2YgdGhlIGJpbm9taWFsIGNvZWZmaWNpZW50LgorICAgICAqICAgQHJldHVybiAgVGhlIGJpbm9taWFsIGNvZWZmaWNpZW50LgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2JpbmNvZWYoY29uc3QgdW5zaWduZWQgaW50IF9fbiwgY29uc3QgdW5zaWduZWQgaW50IF9faykKKyAgICB7CisgICAgICAvLyAgTWF4IGUgZXhwb25lbnQgYmVmb3JlIG92ZXJmbG93LgorICAgICAgc3RhdGljIGNvbnN0IF9UcCBfX21heF9iaW5jb2VmZgorICAgICAgICAgICAgICAgICAgICAgID0gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjptYXhfZXhwb25lbnQxMAorICAgICAgICAgICAgICAgICAgICAgICogc3RkOjpsb2coX1RwKDEwKSkgLSBfVHAoMSk7CisKKyAgICAgIGNvbnN0IF9UcCBfX2xvZ19jb2VmZiA9IF9fbG9nX2JpbmNvZWY8X1RwPihfX24sIF9fayk7CisgICAgICBpZiAoX19sb2dfY29lZmYgPiBfX21heF9iaW5jb2VmZikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6cXVpZXRfTmFOKCk7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBzdGQ6OmV4cChfX2xvZ19jb2VmZik7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBSZXR1cm4gXGYkIFxHYW1tYSh4KSBcZiQuCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSBfX3ggVGhlIGFyZ3VtZW50IG9mIHRoZSBnYW1tYSBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBnYW1tYSBmdW5jdGlvbi4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9UcAorICAgIF9fZ2FtbWEoY29uc3QgX1RwIF9feCkKKyAgICB7CisgICAgICByZXR1cm4gc3RkOjpleHAoX19sb2dfZ2FtbWEoX194KSk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgUmV0dXJuIHRoZSBkaWdhbW1hIGZ1bmN0aW9uIGJ5IHNlcmllcyBleHBhbnNpb24uCisgICAgICogICBUaGUgZGlnYW1tYSBvciBAZiQgXHBzaSh4KSBAZiQgZnVuY3Rpb24gaXMgZGVmaW5lZCBieQorICAgICAqICAgQGZbCisgICAgICogICAgIFxwc2koeCkgPSBcZnJhY3tcR2FtbWEnKHgpfXtcR2FtbWEoeCl9CisgICAgICogICBAZl0KKyAgICAgKgorICAgICAqICAgVGhlIHNlcmllcyBpcyBnaXZlbiBieToKKyAgICAgKiAgIEBmWworICAgICAqICAgICBccHNpKHgpID0gLVxnYW1tYV9FIC0gXGZyYWN7MX17eH0KKyAgICAgKiAgICAgICAgICAgICAgXHN1bV97az0xfV57XGluZnR5fSBcZnJhY3t4fXtrKHggKyBrKX0KKyAgICAgKiAgIEBmXQorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX3BzaV9zZXJpZXMoY29uc3QgX1RwIF9feCkKKyAgICB7CisgICAgICBfVHAgX19zdW0gPSAtX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX2dhbW1hX2UoKSAtIF9UcCgxKSAvIF9feDsKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBfX21heF9pdGVyID0gMTAwMDAwOworICAgICAgZm9yICh1bnNpZ25lZCBpbnQgX19rID0gMTsgX19rIDwgX19tYXhfaXRlcjsgKytfX2spCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCBfVHAgX190ZXJtID0gX194IC8gKF9fayAqIChfX2sgKyBfX3gpKTsKKyAgICAgICAgICBfX3N1bSArPSBfX3Rlcm07CisgICAgICAgICAgaWYgKHN0ZDo6YWJzKF9fdGVybSAvIF9fc3VtKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6ZXBzaWxvbigpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIHJldHVybiBfX3N1bTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmICBSZXR1cm4gdGhlIGRpZ2FtbWEgZnVuY3Rpb24gZm9yIGxhcmdlIGFyZ3VtZW50LgorICAgICAqICAgVGhlIGRpZ2FtbWEgb3IgQGYkIFxwc2koeCkgQGYkIGZ1bmN0aW9uIGlzIGRlZmluZWQgYnkKKyAgICAgKiAgIEBmWworICAgICAqICAgICBccHNpKHgpID0gXGZyYWN7XEdhbW1hJyh4KX17XEdhbW1hKHgpfQorICAgICAqICAgQGZdCisgICAgICoKKyAgICAgKiAgIFRoZSBhc3ltcHRvdGljIHNlcmllcyBpcyBnaXZlbiBieToKKyAgICAgKiAgIEBmWworICAgICAqICAgICBccHNpKHgpID0gXGxuKHgpIC0gXGZyYWN7MX17Mnh9CisgICAgICogICAgICAgICAgICAgLSBcc3VtX3tuPTF9XntcaW5mdHl9IFxmcmFje0JfezJufX17MiBuIHheezJufX0KKyAgICAgKiAgIEBmXQorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX3BzaV9hc3ltcChjb25zdCBfVHAgX194KQorICAgIHsKKyAgICAgIF9UcCBfX3N1bSA9IHN0ZDo6bG9nKF9feCkgLSBfVHAoMC41TCkgLyBfX3g7CisgICAgICBjb25zdCBfVHAgX194eCA9IF9feCAqIF9feDsKKyAgICAgIF9UcCBfX3hwID0gX194eDsKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBfX21heF9pdGVyID0gMTAwOworICAgICAgZm9yICh1bnNpZ25lZCBpbnQgX19rID0gMTsgX19rIDwgX19tYXhfaXRlcjsgKytfX2spCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCBfVHAgX190ZXJtID0gX19iZXJub3VsbGk8X1RwPigyICogX19rKSAvICgyICogX19rICogX194cCk7CisgICAgICAgICAgX19zdW0gLT0gX190ZXJtOworICAgICAgICAgIGlmIChzdGQ6OmFicyhfX3Rlcm0gLyBfX3N1bSkgPCBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmVwc2lsb24oKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIF9feHAgKj0gX194eDsKKyAgICAgICAgfQorICAgICAgcmV0dXJuIF9fc3VtOworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgIFJldHVybiB0aGUgZGlnYW1tYSBmdW5jdGlvbi4KKyAgICAgKiAgIFRoZSBkaWdhbW1hIG9yIEBmJCBccHNpKHgpIEBmJCBmdW5jdGlvbiBpcyBkZWZpbmVkIGJ5CisgICAgICogICBAZlsKKyAgICAgKiAgICAgXHBzaSh4KSA9IFxmcmFje1xHYW1tYScoeCl9e1xHYW1tYSh4KX0KKyAgICAgKiAgIEBmXQorICAgICAqICAgRm9yIG5lZ2F0aXZlIGFyZ3VtZW50IHRoZSByZWZsZWN0aW9uIGZvcm11bGEgaXMgdXNlZDoKKyAgICAgKiAgIEBmWworICAgICAqICAgICBccHNpKHgpID0gXHBzaSgxLXgpIC0gXHBpIFxjb3QoXHBpIHgpCisgICAgICogICBAZl0KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19wc2koY29uc3QgX1RwIF9feCkKKyAgICB7CisgICAgICBjb25zdCBpbnQgX19uID0gc3RhdGljX2Nhc3Q8aW50PihfX3ggKyAwLjVMKTsKKyAgICAgIGNvbnN0IF9UcCBfX2VwcyA9IF9UcCg0KSAqIHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6ZXBzaWxvbigpOworICAgICAgaWYgKF9fbiA8PSAwICYmIHN0ZDo6YWJzKF9feCAtIF9UcChfX24pKSA8IF9fZXBzKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjpxdWlldF9OYU4oKTsKKyAgICAgIGVsc2UgaWYgKF9feCA8IF9UcCgwKSkKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IF9UcCBfX3BpID0gX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpKCk7CisgICAgICAgICAgcmV0dXJuIF9fcHNpKF9UcCgxKSAtIF9feCkKKyAgICAgICAgICAgICAgIC0gX19waSAqIHN0ZDo6Y29zKF9fcGkgKiBfX3gpIC8gc3RkOjpzaW4oX19waSAqIF9feCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKF9feCA+IF9UcCgxMDApKQorICAgICAgICByZXR1cm4gX19wc2lfYXN5bXAoX194KTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIF9fcHNpX3NlcmllcyhfX3gpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgIFJldHVybiB0aGUgcG9seWdhbW1hIGZ1bmN0aW9uIEBmJCBccHNpXnsobil9KHgpIEBmJC4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBwb2x5Z2FtbWEgZnVuY3Rpb24gaXMgcmVsYXRlZCB0byB0aGUgSHVyd2l0eiB6ZXRhIGZ1bmN0aW9uOgorICAgICAqICAgQGZbCisgICAgICogICAgIFxwc2leeyhuKX0oeCkgPSAoLTEpXntuKzF9IG0hIFx6ZXRhKG0rMSx4KQorICAgICAqICAgQGZdCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fcHNpKGNvbnN0IHVuc2lnbmVkIGludCBfX24sIGNvbnN0IF9UcCBfX3gpCisgICAgeworICAgICAgaWYgKF9feCA8PSBfVHAoMCkpCisgICAgICAgIHN0ZDo6X190aHJvd19kb21haW5fZXJyb3IoX19OKCJBcmd1bWVudCBvdXQgb2YgcmFuZ2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19wc2kiKSk7CisgICAgICBlbHNlIGlmIChfX24gPT0gMCkKKyAgICAgICAgcmV0dXJuIF9fcHNpKF9feCk7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCBfVHAgX19oemV0YSA9IF9faHVyd2l0el96ZXRhKF9UcChfX24gKyAxKSwgX194KTsKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAgICAgICAgY29uc3QgX1RwIF9fbG5fbmZhY3QgPSBzdGQ6OnRyMTo6bGdhbW1hKF9UcChfX24gKyAxKSk7CisjZWxzZQorICAgICAgICAgIGNvbnN0IF9UcCBfX2xuX25mYWN0ID0gX19sb2dfZ2FtbWEoX1RwKF9fbiArIDEpKTsKKyNlbmRpZgorICAgICAgICAgIF9UcCBfX3Jlc3VsdCA9IHN0ZDo6ZXhwKF9fbG5fbmZhY3QpICogX19oemV0YTsKKyAgICAgICAgICBpZiAoX19uICUgMiA9PSAxKQorICAgICAgICAgICAgX19yZXN1bHQgPSAtX19yZXN1bHQ7CisgICAgICAgICAgcmV0dXJuIF9fcmVzdWx0OworICAgICAgICB9CisgICAgfQorCisgIH0gLy8gbmFtZXNwYWNlIHN0ZDo6dHIxOjpfX2RldGFpbAorfQorfQorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX0dBTU1BX1RDQworCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9oYXNodGFibGUuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL2hhc2h0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNjRiMWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9oYXNodGFibGUuaApAQCAtMCwwICsxLDExNzYgQEAKKy8vIFRSMSBoYXNodGFibGUuaCBoZWFkZXIgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvaGFzaHRhYmxlLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfSEFTSFRBQkxFX0gKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX0hBU0hUQUJMRV9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8dHIxL2hhc2h0YWJsZV9wb2xpY3kuaD4KKworbmFtZXNwYWNlIHN0ZAoreyAKK25hbWVzcGFjZSB0cjEKK3sKKyAgLy8gQ2xhc3MgdGVtcGxhdGUgX0hhc2h0YWJsZSwgY2xhc3MgZGVmaW5pdGlvbi4KKyAgCisgIC8vIE1lYW5pbmcgb2YgY2xhc3MgdGVtcGxhdGUgX0hhc2h0YWJsZSdzIHRlbXBsYXRlIHBhcmFtZXRlcnMKKyAgCisgIC8vIF9LZXkgYW5kIF9WYWx1ZTogYXJiaXRyYXJ5IENvcHlDb25zdHJ1Y3RpYmxlIHR5cGVzLgorICAKKyAgLy8gX0FsbG9jYXRvcjogYW4gYWxsb2NhdG9yIHR5cGUgKFtsaWIuYWxsb2NhdG9yLnJlcXVpcmVtZW50c10pIHdob3NlCisgIC8vIHZhbHVlIHR5cGUgaXMgVmFsdWUuICBBcyBhIGNvbmZvcm1pbmcgZXh0ZW5zaW9uLCB3ZSBhbGxvdyBmb3IKKyAgLy8gdmFsdWUgdHlwZSAhPSBWYWx1ZS4KKworICAvLyBfRXh0cmFjdEtleTogZnVuY3Rpb24gb2JqZWN0IHRoYXQgdGFrZXMgYSBvYmplY3Qgb2YgdHlwZSBWYWx1ZQorICAvLyBhbmQgcmV0dXJucyBhIHZhbHVlIG9mIHR5cGUgX0tleS4KKyAgCisgIC8vIF9FcXVhbDogZnVuY3Rpb24gb2JqZWN0IHRoYXQgdGFrZXMgdHdvIG9iamVjdHMgb2YgdHlwZSBrIGFuZCByZXR1cm5zCisgIC8vIGEgYm9vbC1saWtlIHZhbHVlIHRoYXQgaXMgdHJ1ZSBpZiB0aGUgdHdvIG9iamVjdHMgYXJlIGNvbnNpZGVyZWQgZXF1YWwuCisgIAorICAvLyBfSDE6IHRoZSBoYXNoIGZ1bmN0aW9uLiAgQSB1bmFyeSBmdW5jdGlvbiBvYmplY3Qgd2l0aCBhcmd1bWVudCB0eXBlCisgIC8vIEtleSBhbmQgcmVzdWx0IHR5cGUgc2l6ZV90LiAgUmV0dXJuIHZhbHVlcyBzaG91bGQgYmUgZGlzdHJpYnV0ZWQKKyAgLy8gb3ZlciB0aGUgZW50aXJlIHJhbmdlIFswLCBudW1lcmljX2xpbWl0czxzaXplX3Q+Ojo6bWF4KCldLgorICAKKyAgLy8gX0gyOiB0aGUgcmFuZ2UtaGFzaGluZyBmdW5jdGlvbiAoaW4gdGhlIHRlcm1pbm9sb2d5IG9mIFRhdm9yaSBhbmQKKyAgLy8gRHJlaXppbikuICBBIGJpbmFyeSBmdW5jdGlvbiBvYmplY3Qgd2hvc2UgYXJndW1lbnQgdHlwZXMgYW5kIHJlc3VsdAorICAvLyB0eXBlIGFyZSBhbGwgc2l6ZV90LiAgR2l2ZW4gYXJndW1lbnRzIHIgYW5kIE4sIHRoZSByZXR1cm4gdmFsdWUgaXMKKyAgLy8gaW4gdGhlIHJhbmdlIFswLCBOKS4KKyAgCisgIC8vIF9IYXNoOiB0aGUgcmFuZ2VkIGhhc2ggZnVuY3Rpb24gKFRhdm9yaSBhbmQgRHJlaXppbikuIEEgYmluYXJ5IGZ1bmN0aW9uCisgIC8vIHdob3NlIGFyZ3VtZW50IHR5cGVzIGFyZSBfS2V5IGFuZCBzaXplX3QgYW5kIHdob3NlIHJlc3VsdCB0eXBlIGlzCisgIC8vIHNpemVfdC4gIEdpdmVuIGFyZ3VtZW50cyBrIGFuZCBOLCB0aGUgcmV0dXJuIHZhbHVlIGlzIGluIHRoZSByYW5nZQorICAvLyBbMCwgTikuICBEZWZhdWx0OiBoYXNoKGssIE4pID0gaDIoaDEoayksIE4pLiAgSWYgX0hhc2ggaXMgYW55dGhpbmcgb3RoZXIKKyAgLy8gdGhhbiB0aGUgZGVmYXVsdCwgX0gxIGFuZCBfSDIgYXJlIGlnbm9yZWQuCisgIAorICAvLyBfUmVoYXNoUG9saWN5OiBQb2xpY3kgY2xhc3Mgd2l0aCB0aHJlZSBtZW1iZXJzLCBhbGwgb2Ygd2hpY2ggZ292ZXJuCisgIC8vIHRoZSBidWNrZXQgY291bnQuIF9NX25leHRfYmt0KG4pIHJldHVybnMgYSBidWNrZXQgY291bnQgbm8gc21hbGxlcgorICAvLyB0aGFuIG4uICBfTV9ia3RfZm9yX2VsZW1lbnRzKG4pIHJldHVybnMgYSBidWNrZXQgY291bnQgYXBwcm9wcmlhdGUKKyAgLy8gZm9yIGFuIGVsZW1lbnQgY291bnQgb2Ygbi4gIF9NX25lZWRfcmVoYXNoKG5fYmt0LCBuX2VsdCwgbl9pbnMpCisgIC8vIGRldGVybWluZXMgd2hldGhlciwgaWYgdGhlIGN1cnJlbnQgYnVja2V0IGNvdW50IGlzIG5fYmt0IGFuZCB0aGUKKyAgLy8gY3VycmVudCBlbGVtZW50IGNvdW50IGlzIG5fZWx0LCB3ZSBuZWVkIHRvIGluY3JlYXNlIHRoZSBidWNrZXQKKyAgLy8gY291bnQuICBJZiBzbywgcmV0dXJucyBtYWtlX3BhaXIodHJ1ZSwgbiksIHdoZXJlIG4gaXMgdGhlIG5ldworICAvLyBidWNrZXQgY291bnQuICBJZiBub3QsIHJldHVybnMgbWFrZV9wYWlyKGZhbHNlLCA8YW55dGhpbmc+KS4KKyAgCisgIC8vID8/PyBSaWdodCBub3cgaXQgaXMgaGFyZC13aXJlZCB0aGF0IHRoZSBudW1iZXIgb2YgYnVja2V0cyBuZXZlcgorICAvLyBzaHJpbmtzLiAgU2hvdWxkIHdlIGFsbG93IF9SZWhhc2hQb2xpY3kgdG8gY2hhbmdlIHRoYXQ/CisgIAorICAvLyBfX2NhY2hlX2hhc2hfY29kZTogYm9vbC4gIHRydWUgaWYgd2Ugc3RvcmUgdGhlIHZhbHVlIG9mIHRoZSBoYXNoCisgIC8vIGZ1bmN0aW9uIGFsb25nIHdpdGggdGhlIHZhbHVlLiAgVGhpcyBpcyBhIHRpbWUtc3BhY2UgdHJhZGVvZmYuCisgIC8vIFN0b3JpbmcgaXQgbWF5IGltcHJvdmUgbG9va3VwIHNwZWVkIGJ5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgdGltZXMKKyAgLy8gd2UgbmVlZCB0byBjYWxsIHRoZSBFcXVhbCBmdW5jdGlvbi4KKyAgCisgIC8vIF9fY29uc3RhbnRfaXRlcmF0b3JzOiBib29sLiAgdHJ1ZSBpZiBpdGVyYXRvciBhbmQgY29uc3RfaXRlcmF0b3IgYXJlCisgIC8vIGJvdGggY29uc3RhbnQgaXRlcmF0b3IgdHlwZXMuICBUaGlzIGlzIHRydWUgZm9yIHVub3JkZXJlZF9zZXQgYW5kCisgIC8vIHVub3JkZXJlZF9tdWx0aXNldCwgZmFsc2UgZm9yIHVub3JkZXJlZF9tYXAgYW5kIHVub3JkZXJlZF9tdWx0aW1hcC4KKyAgCisgIC8vIF9fdW5pcXVlX2tleXM6IGJvb2wuICB0cnVlIGlmIHRoZSByZXR1cm4gdmFsdWUgb2YgX0hhc2h0YWJsZTo6Y291bnQoaykKKyAgLy8gaXMgYWx3YXlzIGF0IG1vc3Qgb25lLCBmYWxzZSBpZiBpdCBtYXkgYmUgYW4gYXJiaXRyYXJ5IG51bWJlci4gIFRoaXMKKyAgLy8gdHJ1ZSBmb3IgdW5vcmRlcmVkX3NldCBhbmQgdW5vcmRlcmVkX21hcCwgZmFsc2UgZm9yIHVub3JkZXJlZF9tdWx0aXNldAorICAvLyBhbmQgdW5vcmRlcmVkX211bHRpbWFwLgorICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCB0eXBlbmFtZSBfQWxsb2NhdG9yLAorCSAgIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCAKKwkgICB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jYWNoZV9oYXNoX2NvZGUsCisJICAgYm9vbCBfX2NvbnN0YW50X2l0ZXJhdG9ycywKKwkgICBib29sIF9fdW5pcXVlX2tleXM+CisgICAgY2xhc3MgX0hhc2h0YWJsZQorICAgIDogcHVibGljIF9fZGV0YWlsOjpfUmVoYXNoX2Jhc2U8X1JlaGFzaFBvbGljeSwKKwkJCQkgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsCisJCQkJCSAgICAgICBfRXh0cmFjdEtleSwKKwkJCQkJICAgICAgIF9FcXVhbCwgX0gxLCBfSDIsIF9IYXNoLAorCQkJCQkgICAgICAgX1JlaGFzaFBvbGljeSwKKwkJCQkJICAgICAgIF9fY2FjaGVfaGFzaF9jb2RlLAorCQkJCQkgICAgICAgX19jb25zdGFudF9pdGVyYXRvcnMsCisJCQkJCSAgICAgICBfX3VuaXF1ZV9rZXlzPiA+LAorICAgICAgcHVibGljIF9fZGV0YWlsOjpfSGFzaF9jb2RlX2Jhc2U8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9fY2FjaGVfaGFzaF9jb2RlPiwKKyAgICAgIHB1YmxpYyBfX2RldGFpbDo6X01hcF9iYXNlPF9LZXksIF9WYWx1ZSwgX0V4dHJhY3RLZXksIF9fdW5pcXVlX2tleXMsCisJCQkJIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLAorCQkJCQkgICAgX0V4dHJhY3RLZXksCisJCQkJCSAgICBfRXF1YWwsIF9IMSwgX0gyLCBfSGFzaCwKKwkJCQkJICAgIF9SZWhhc2hQb2xpY3ksCisJCQkJCSAgICBfX2NhY2hlX2hhc2hfY29kZSwKKwkJCQkJICAgIF9fY29uc3RhbnRfaXRlcmF0b3JzLAorCQkJCQkgICAgX191bmlxdWVfa2V5cz4gPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9BbGxvY2F0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIF9WYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0tleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0VxdWFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfZXF1YWw7CisgICAgICAvLyBtYXBwZWRfdHlwZSwgaWYgcHJlc2VudCwgY29tZXMgZnJvbSBfTWFwX2Jhc2UuCisgICAgICAvLyBoYXNoZXIsIGlmIHByZXNlbnQsIGNvbWVzIGZyb20gX0hhc2hfY29kZV9iYXNlLgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjpkaWZmZXJlbmNlX3R5cGUgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYXRvcjo6c2l6ZV90eXBlICAgICAgICAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OnBvaW50ZXIgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYXRvcjo6Y29uc3RfcG9pbnRlciAgICAgICAgICBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjpyZWZlcmVuY2UgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYXRvcjo6Y29uc3RfcmVmZXJlbmNlICAgICAgICBjb25zdF9yZWZlcmVuY2U7CisgICAgICAKKyAgICAgIHR5cGVkZWYgX19kZXRhaWw6Ol9Ob2RlX2l0ZXJhdG9yPHZhbHVlX3R5cGUsIF9fY29uc3RhbnRfaXRlcmF0b3JzLAorCQkJCSAgICAgICBfX2NhY2hlX2hhc2hfY29kZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX19kZXRhaWw6Ol9Ob2RlX2NvbnN0X2l0ZXJhdG9yPHZhbHVlX3R5cGUsCisJCQkJCSAgICAgX19jb25zdGFudF9pdGVyYXRvcnMsCisJCQkJCSAgICAgX19jYWNoZV9oYXNoX2NvZGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfbG9jYWxfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgX19kZXRhaWw6Ol9IYXNodGFibGVfaXRlcmF0b3I8dmFsdWVfdHlwZSwgX19jb25zdGFudF9pdGVyYXRvcnMsCisJCQkJCSAgICBfX2NhY2hlX2hhc2hfY29kZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX19kZXRhaWw6Ol9IYXNodGFibGVfY29uc3RfaXRlcmF0b3I8dmFsdWVfdHlwZSwKKwkJCQkJCSAgX19jb25zdGFudF9pdGVyYXRvcnMsCisJCQkJCQkgIF9fY2FjaGVfaGFzaF9jb2RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5MiwgdHlwZW5hbWUgX1ZhbHVlMiwgdHlwZW5hbWUgX0V4MiwgYm9vbCBfX3VuaXF1ZTIsCisJICAgICAgIHR5cGVuYW1lIF9IYXNodGFibGUyPgorICAgICAgICBmcmllbmQgc3RydWN0IF9fZGV0YWlsOjpfTWFwX2Jhc2U7CisKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBfX2RldGFpbDo6X0hhc2hfbm9kZTxfVmFsdWUsIF9fY2FjaGVfaGFzaF9jb2RlPiBfTm9kZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPF9Ob2RlPjo6b3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX05vZGVfYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxfTm9kZSo+OjpvdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQnVja2V0X2FsbG9jYXRvcl90eXBlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxfVmFsdWU+OjpvdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVfYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIF9Ob2RlX2FsbG9jYXRvcl90eXBlICAgX01fbm9kZV9hbGxvY2F0b3I7CisgICAgICBfTm9kZSoqICAgICAgICAgICAgICAgIF9NX2J1Y2tldHM7CisgICAgICBzaXplX3R5cGUgICAgICAgICAgICAgIF9NX2J1Y2tldF9jb3VudDsKKyAgICAgIHNpemVfdHlwZSAgICAgICAgICAgICAgX01fZWxlbWVudF9jb3VudDsKKyAgICAgIF9SZWhhc2hQb2xpY3kgICAgICAgICAgX01fcmVoYXNoX3BvbGljeTsKKyAgICAgIAorICAgICAgX05vZGUqCisgICAgICBfTV9hbGxvY2F0ZV9ub2RlKGNvbnN0IHZhbHVlX3R5cGUmIF9fdik7CisgIAorICAgICAgdm9pZAorICAgICAgX01fZGVhbGxvY2F0ZV9ub2RlKF9Ob2RlKiBfX24pOworICAKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RlYWxsb2NhdGVfbm9kZXMoX05vZGUqKiwgc2l6ZV90eXBlKTsKKworICAgICAgX05vZGUqKgorICAgICAgX01fYWxsb2NhdGVfYnVja2V0cyhzaXplX3R5cGUgX19uKTsKKyAgCisgICAgICB2b2lkCisgICAgICBfTV9kZWFsbG9jYXRlX2J1Y2tldHMoX05vZGUqKiwgc2l6ZV90eXBlIF9fbik7CisKKyAgICBwdWJsaWM6CQkJICAgIAorICAgICAgLy8gQ29uc3RydWN0b3IsIGRlc3RydWN0b3IsIGFzc2lnbm1lbnQsIHN3YXAKKyAgICAgIF9IYXNodGFibGUoc2l6ZV90eXBlIF9fYnVja2V0X2hpbnQsCisJCSBjb25zdCBfSDEmLCBjb25zdCBfSDImLCBjb25zdCBfSGFzaCYsCisJCSBjb25zdCBfRXF1YWwmLCBjb25zdCBfRXh0cmFjdEtleSYsCisJCSBjb25zdCBhbGxvY2F0b3JfdHlwZSYpOworICAKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBfSGFzaHRhYmxlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJICAgc2l6ZV90eXBlIF9fYnVja2V0X2hpbnQsCisJCSAgIGNvbnN0IF9IMSYsIGNvbnN0IF9IMiYsIGNvbnN0IF9IYXNoJiwgCisJCSAgIGNvbnN0IF9FcXVhbCYsIGNvbnN0IF9FeHRyYWN0S2V5JiwKKwkJICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmKTsKKyAgCisgICAgICBfSGFzaHRhYmxlKGNvbnN0IF9IYXNodGFibGUmKTsKKyAgICAKKyAgICAgIF9IYXNodGFibGUmCisgICAgICBvcGVyYXRvcj0oY29uc3QgX0hhc2h0YWJsZSYpOworCisgICAgICB+X0hhc2h0YWJsZSgpOworCisgICAgICB2b2lkIHN3YXAoX0hhc2h0YWJsZSYpOworCisgICAgICAvLyBCYXNpYyBjb250YWluZXIgb3BlcmF0aW9ucworICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkKKyAgICAgIHsKKwlpdGVyYXRvciBfX2koX01fYnVja2V0cyk7CisJaWYgKCFfX2kuX01fY3VyX25vZGUpCisJICBfX2kuX01faW5jcl9idWNrZXQoKTsKKwlyZXR1cm4gX19pOworICAgICAgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdAorICAgICAgeworCWNvbnN0X2l0ZXJhdG9yIF9faShfTV9idWNrZXRzKTsKKwlpZiAoIV9faS5fTV9jdXJfbm9kZSkKKwkgIF9faS5fTV9pbmNyX2J1Y2tldCgpOworCXJldHVybiBfX2k7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX01fYnVja2V0cyArIF9NX2J1Y2tldF9jb3VudCk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9idWNrZXRzICsgX01fYnVja2V0X2NvdW50KTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIHNpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZWxlbWVudF9jb3VudDsgfQorICAKKyAgICAgIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHNpemUoKSA9PSAwOyB9CisKKyAgICAgIGFsbG9jYXRvcl90eXBlCisgICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKF9NX25vZGVfYWxsb2NhdG9yKTsgfQorCisgICAgICBfVmFsdWVfYWxsb2NhdG9yX3R5cGUKKyAgICAgIF9NX2dldF9WYWx1ZV9hbGxvY2F0b3IoKSBjb25zdAorICAgICAgeyByZXR1cm4gX1ZhbHVlX2FsbG9jYXRvcl90eXBlKF9NX25vZGVfYWxsb2NhdG9yKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yLm1heF9zaXplKCk7IH0KKworICAgICAgLy8gT2JzZXJ2ZXJzCisgICAgICBrZXlfZXF1YWwKKyAgICAgIGtleV9lcSgpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5fTV9lcTsgfQorCisgICAgICAvLyBoYXNoX2Z1bmN0aW9uLCBpZiBwcmVzZW50LCBjb21lcyBmcm9tIF9IYXNoX2NvZGVfYmFzZS4KKworICAgICAgLy8gQnVja2V0IG9wZXJhdGlvbnMKKyAgICAgIHNpemVfdHlwZQorICAgICAgYnVja2V0X2NvdW50KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2J1Y2tldF9jb3VudDsgfQorICAKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X2J1Y2tldF9jb3VudCgpIGNvbnN0CisgICAgICB7IHJldHVybiBtYXhfc2l6ZSgpOyB9CisgIAorICAgICAgc2l6ZV90eXBlCisgICAgICBidWNrZXRfc2l6ZShzaXplX3R5cGUgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpkaXN0YW5jZShiZWdpbihfX24pLCBlbmQoX19uKSk7IH0KKyAgCisgICAgICBzaXplX3R5cGUKKyAgICAgIGJ1Y2tldChjb25zdCBrZXlfdHlwZSYgX19rKSBjb25zdAorICAgICAgeyAKKwlyZXR1cm4gdGhpcy0+X01fYnVja2V0X2luZGV4KF9faywgdGhpcy0+X01faGFzaF9jb2RlKF9fayksCisJCQkJICAgICBidWNrZXRfY291bnQoKSk7CisgICAgICB9CisKKyAgICAgIGxvY2FsX2l0ZXJhdG9yCisgICAgICBiZWdpbihzaXplX3R5cGUgX19uKQorICAgICAgeyByZXR1cm4gbG9jYWxfaXRlcmF0b3IoX01fYnVja2V0c1tfX25dKTsgfQorCisgICAgICBsb2NhbF9pdGVyYXRvcgorICAgICAgZW5kKHNpemVfdHlwZSkKKyAgICAgIHsgcmV0dXJuIGxvY2FsX2l0ZXJhdG9yKDApOyB9CisKKyAgICAgIGNvbnN0X2xvY2FsX2l0ZXJhdG9yCisgICAgICBiZWdpbihzaXplX3R5cGUgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfbG9jYWxfaXRlcmF0b3IoX01fYnVja2V0c1tfX25dKTsgfQorCisgICAgICBjb25zdF9sb2NhbF9pdGVyYXRvcgorICAgICAgZW5kKHNpemVfdHlwZSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2xvY2FsX2l0ZXJhdG9yKDApOyB9CisKKyAgICAgIGZsb2F0CisgICAgICBsb2FkX2ZhY3RvcigpIGNvbnN0CisgICAgICB7IAorCXJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oc2l6ZSgpKSAvIHN0YXRpY19jYXN0PGZsb2F0PihidWNrZXRfY291bnQoKSk7CisgICAgICB9CisKKyAgICAgIC8vIG1heF9sb2FkX2ZhY3RvciwgaWYgcHJlc2VudCwgY29tZXMgZnJvbSBfUmVoYXNoX2Jhc2UuCisKKyAgICAgIC8vIEdlbmVyYWxpemF0aW9uIG9mIG1heF9sb2FkX2ZhY3Rvci4gIEV4dGVuc2lvbiwgbm90IGZvdW5kIGluIFRSMS4gIE9ubHkKKyAgICAgIC8vIHVzZWZ1bCBpZiBfUmVoYXNoUG9saWN5IGlzIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBkZWZhdWx0LgorICAgICAgY29uc3QgX1JlaGFzaFBvbGljeSYKKyAgICAgIF9fcmVoYXNoX3BvbGljeSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9yZWhhc2hfcG9saWN5OyB9CisgICAgICAKKyAgICAgIHZvaWQgCisgICAgICBfX3JlaGFzaF9wb2xpY3koY29uc3QgX1JlaGFzaFBvbGljeSYpOworCisgICAgICAvLyBMb29rdXAuCisgICAgICBpdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rKTsKKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9faykgY29uc3Q7CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgY291bnQoY29uc3Qga2V5X3R5cGUmIF9faykgY29uc3Q7CisKKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rKTsKKworICAgICAgc3RkOjpwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2spIGNvbnN0OworCisgICAgcHJpdmF0ZToJCQkvLyBGaW5kLCBpbnNlcnQgYW5kIGVyYXNlIGhlbHBlciBmdW5jdGlvbnMKKyAgICAgIC8vID8/PyBUaGlzIGRpc3BhdGNoaW5nIGlzIGEgd29ya2Fyb3VuZCBmb3IgdGhlIGZhY3QgdGhhdCB3ZSBkb24ndAorICAgICAgLy8gaGF2ZSBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uIG9mIG1lbWJlciB0ZW1wbGF0ZXM7IGl0IHdvdWxkIGJlCisgICAgICAvLyBiZXR0ZXIgdG8ganVzdCBzcGVjaWFsaXplIGluc2VydCBvbiBfX3VuaXF1ZV9rZXlzLiAgVGhlcmUgbWF5IGJlIGEKKyAgICAgIC8vIGNsZWFuZXIgd29ya2Fyb3VuZC4KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2NvbmRpdGlvbmFsX3R5cGU8X191bmlxdWVfa2V5cywKKwkJICAgICAgIAkgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPiwgaXRlcmF0b3I+OjpfX3R5cGUKKyAgICAgICAgX0luc2VydF9SZXR1cm5fVHlwZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fY29uZGl0aW9uYWxfdHlwZTxfX3VuaXF1ZV9rZXlzLAorCQkJCQkgIHN0ZDo6X1NlbGVjdDFzdDxfSW5zZXJ0X1JldHVybl9UeXBlPiwKKwkJCQkgIAkgIHN0ZDo6X0lkZW50aXR5PF9JbnNlcnRfUmV0dXJuX1R5cGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID46Ol9fdHlwZQorICAgICAgICBfSW5zZXJ0X0NvbnZfVHlwZTsKKworICAgICAgX05vZGUqCisgICAgICBfTV9maW5kX25vZGUoX05vZGUqLCBjb25zdCBrZXlfdHlwZSYsCisJCSAgIHR5cGVuYW1lIF9IYXNodGFibGU6Ol9IYXNoX2NvZGVfdHlwZSkgY29uc3Q7CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBfTV9pbnNlcnRfYnVja2V0KGNvbnN0IHZhbHVlX3R5cGUmLCBzaXplX3R5cGUsCisJCSAgICAgICB0eXBlbmFtZSBfSGFzaHRhYmxlOjpfSGFzaF9jb2RlX3R5cGUpOworCisgICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+CisgICAgICBfTV9pbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYsIHN0ZDo6dHIxOjp0cnVlX3R5cGUpOworCisgICAgICBpdGVyYXRvcgorICAgICAgX01faW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmLCBzdGQ6OnRyMTo6ZmFsc2VfdHlwZSk7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2VyYXNlX25vZGUoX05vZGUqLCBfTm9kZSoqKTsKKworICAgIHB1YmxpYzoJCQkJCisgICAgICAvLyBJbnNlcnQgYW5kIGVyYXNlCisgICAgICBfSW5zZXJ0X1JldHVybl9UeXBlCisgICAgICBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX192KSAKKyAgICAgIHsgcmV0dXJuIF9NX2luc2VydChfX3YsIHN0ZDo6dHIxOjppbnRlZ3JhbF9jb25zdGFudDxib29sLAorCQkJIF9fdW5pcXVlX2tleXM+KCkpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoaXRlcmF0b3IsIGNvbnN0IHZhbHVlX3R5cGUmIF9fdikKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9JbnNlcnRfQ29udl9UeXBlKCkodGhpcy0+aW5zZXJ0KF9fdikpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yLCBjb25zdCB2YWx1ZV90eXBlJiBfX3YpCisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfSW5zZXJ0X0NvbnZfVHlwZSgpKHRoaXMtPmluc2VydChfX3YpKSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCk7CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvcik7CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlcmFzZShjb25zdF9pdGVyYXRvcik7CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmKTsKKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yLCBpdGVyYXRvcik7CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlcmFzZShjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3IpOworCisgICAgICB2b2lkCisgICAgICBjbGVhcigpOworCisgICAgICAvLyBTZXQgbnVtYmVyIG9mIGJ1Y2tldHMgdG8gYmUgYXBwcm9wcmlhdGUgZm9yIGNvbnRhaW5lciBvZiBuIGVsZW1lbnQuCisgICAgICB2b2lkIHJlaGFzaChzaXplX3R5cGUgX19uKTsKKyAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAvLyBVbmNvbmRpdGlvbmFsbHkgY2hhbmdlIHNpemUgb2YgYnVja2V0IGFycmF5IHRvIG4uCisgICAgICB2b2lkIF9NX3JlaGFzaChzaXplX3R5cGUgX19uKTsKKyAgICB9OworCisKKyAgLy8gRGVmaW5pdGlvbnMgb2YgY2xhc3MgdGVtcGxhdGUgX0hhc2h0YWJsZSdzIG91dC1vZi1saW5lIG1lbWJlciBmdW5jdGlvbnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LAorCQkJX19jaGMsIF9fY2l0LCBfX3VrPjo6X05vZGUqCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgX01fYWxsb2NhdGVfbm9kZShjb25zdCB2YWx1ZV90eXBlJiBfX3YpCisgICAgeworICAgICAgX05vZGUqIF9fbiA9IF9NX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOworICAgICAgX190cnkKKwl7CisJICBfTV9nZXRfVmFsdWVfYWxsb2NhdG9yKCkuY29uc3RydWN0KCZfX24tPl9NX3YsIF9fdik7CisJICBfX24tPl9NX25leHQgPSAwOworCSAgcmV0dXJuIF9fbjsKKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBfTV9ub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fbiwgMSk7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIHZvaWQKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICBfTV9kZWFsbG9jYXRlX25vZGUoX05vZGUqIF9fbikKKyAgICB7CisgICAgICBfTV9nZXRfVmFsdWVfYWxsb2NhdG9yKCkuZGVzdHJveSgmX19uLT5fTV92KTsKKyAgICAgIF9NX25vZGVfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19uLCAxKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCAKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgdm9pZAorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIF9NX2RlYWxsb2NhdGVfbm9kZXMoX05vZGUqKiBfX2FycmF5LCBzaXplX3R5cGUgX19uKQorICAgIHsKKyAgICAgIGZvciAoc2l6ZV90eXBlIF9faSA9IDA7IF9faSA8IF9fbjsgKytfX2kpCisJeworCSAgX05vZGUqIF9fcCA9IF9fYXJyYXlbX19pXTsKKwkgIHdoaWxlIChfX3ApCisJICAgIHsKKwkgICAgICBfTm9kZSogX190bXAgPSBfX3A7CisJICAgICAgX19wID0gX19wLT5fTV9uZXh0OworCSAgICAgIF9NX2RlYWxsb2NhdGVfbm9kZShfX3RtcCk7CisJICAgIH0KKwkgIF9fYXJyYXlbX19pXSA9IDA7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCV9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCV9fY2hjLCBfX2NpdCwgX191az46Ol9Ob2RlKioKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICBfTV9hbGxvY2F0ZV9idWNrZXRzKHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgX0J1Y2tldF9hbGxvY2F0b3JfdHlwZSBfX2FsbG9jKF9NX25vZGVfYWxsb2NhdG9yKTsKKworICAgICAgLy8gV2UgYWxsb2NhdGUgb25lIGV4dHJhIGJ1Y2tldCB0byBob2xkIGEgc2VudGluZWwsIGFuIGFyYml0cmFyeQorICAgICAgLy8gbm9uLW51bGwgcG9pbnRlci4gIEl0ZXJhdG9yIGluY3JlbWVudCByZWxpZXMgb24gdGhpcy4KKyAgICAgIF9Ob2RlKiogX19wID0gX19hbGxvYy5hbGxvY2F0ZShfX24gKyAxKTsKKyAgICAgIHN0ZDo6ZmlsbChfX3AsIF9fcCArIF9fbiwgKF9Ob2RlKikgMCk7CisgICAgICBfX3BbX19uXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8X05vZGUqPigweDEwMDApOworICAgICAgcmV0dXJuIF9fcDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCAKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgdm9pZAorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIF9NX2RlYWxsb2NhdGVfYnVja2V0cyhfTm9kZSoqIF9fcCwgc2l6ZV90eXBlIF9fbikKKyAgICB7CisgICAgICBfQnVja2V0X2FsbG9jYXRvcl90eXBlIF9fYWxsb2MoX01fbm9kZV9hbGxvY2F0b3IpOworICAgICAgX19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICsgMSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIF9IYXNodGFibGUoc2l6ZV90eXBlIF9fYnVja2V0X2hpbnQsCisJICAgICAgIGNvbnN0IF9IMSYgX19oMSwgY29uc3QgX0gyJiBfX2gyLCBjb25zdCBfSGFzaCYgX19oLAorCSAgICAgICBjb25zdCBfRXF1YWwmIF9fZXEsIGNvbnN0IF9FeHRyYWN0S2V5JiBfX2V4aywKKwkgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKKyAgICA6IF9fZGV0YWlsOjpfUmVoYXNoX2Jhc2U8X1JlaGFzaFBvbGljeSwgX0hhc2h0YWJsZT4oKSwKKyAgICAgIF9fZGV0YWlsOjpfSGFzaF9jb2RlX2Jhc2U8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJCV9IMSwgX0gyLCBfSGFzaCwgX19jaGM+KF9fZXhrLCBfX2VxLAorCQkJCQkJCV9faDEsIF9faDIsIF9faCksCisgICAgICBfX2RldGFpbDo6X01hcF9iYXNlPF9LZXksIF9WYWx1ZSwgX0V4dHJhY3RLZXksIF9fdWssIF9IYXNodGFibGU+KCksCisgICAgICBfTV9ub2RlX2FsbG9jYXRvcihfX2EpLAorICAgICAgX01fYnVja2V0X2NvdW50KDApLAorICAgICAgX01fZWxlbWVudF9jb3VudCgwKSwKKyAgICAgIF9NX3JlaGFzaF9wb2xpY3koKQorICAgIHsKKyAgICAgIF9NX2J1Y2tldF9jb3VudCA9IF9NX3JlaGFzaF9wb2xpY3kuX01fbmV4dF9ia3QoX19idWNrZXRfaGludCk7CisgICAgICBfTV9idWNrZXRzID0gX01fYWxsb2NhdGVfYnVja2V0cyhfTV9idWNrZXRfY291bnQpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICAgIF9IYXNodGFibGUoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsCisJCSBzaXplX3R5cGUgX19idWNrZXRfaGludCwKKwkJIGNvbnN0IF9IMSYgX19oMSwgY29uc3QgX0gyJiBfX2gyLCBjb25zdCBfSGFzaCYgX19oLAorCQkgY29uc3QgX0VxdWFsJiBfX2VxLCBjb25zdCBfRXh0cmFjdEtleSYgX19leGssCisJCSBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQorICAgICAgOiBfX2RldGFpbDo6X1JlaGFzaF9iYXNlPF9SZWhhc2hQb2xpY3ksIF9IYXNodGFibGU+KCksCisJX19kZXRhaWw6Ol9IYXNoX2NvZGVfYmFzZTxfS2V5LCBfVmFsdWUsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJCQkJICBfSDEsIF9IMiwgX0hhc2gsIF9fY2hjPihfX2V4aywgX19lcSwKKwkJCQkJCQkgIF9faDEsIF9faDIsIF9faCksCisJX19kZXRhaWw6Ol9NYXBfYmFzZTxfS2V5LCBfVmFsdWUsIF9FeHRyYWN0S2V5LCBfX3VrLCBfSGFzaHRhYmxlPigpLAorCV9NX25vZGVfYWxsb2NhdG9yKF9fYSksCisJX01fYnVja2V0X2NvdW50KDApLAorCV9NX2VsZW1lbnRfY291bnQoMCksCisJX01fcmVoYXNoX3BvbGljeSgpCisgICAgICB7CisJX01fYnVja2V0X2NvdW50ID0gc3RkOjptYXgoX01fcmVoYXNoX3BvbGljeS5fTV9uZXh0X2JrdChfX2J1Y2tldF9oaW50KSwKKwkJCQkgICBfTV9yZWhhc2hfcG9saWN5LgorCQkJCSAgIF9NX2JrdF9mb3JfZWxlbWVudHMoX19kZXRhaWw6OgorCQkJCQkJICAgICAgIF9fZGlzdGFuY2VfZncoX19mLAorCQkJCQkJCQkgICAgIF9fbCkpKTsKKwlfTV9idWNrZXRzID0gX01fYWxsb2NhdGVfYnVja2V0cyhfTV9idWNrZXRfY291bnQpOworCV9fdHJ5CisJICB7CisJICAgIGZvciAoOyBfX2YgIT0gX19sOyArK19fZikKKwkgICAgICB0aGlzLT5pbnNlcnQoKl9fZik7CisJICB9CisJX19jYXRjaCguLi4pCisJICB7CisJICAgIGNsZWFyKCk7CisJICAgIF9NX2RlYWxsb2NhdGVfYnVja2V0cyhfTV9idWNrZXRzLCBfTV9idWNrZXRfY291bnQpOworCSAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgIH0KKyAgICAgIH0KKyAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIF9IYXNodGFibGUoY29uc3QgX0hhc2h0YWJsZSYgX19odCkKKyAgICA6IF9fZGV0YWlsOjpfUmVoYXNoX2Jhc2U8X1JlaGFzaFBvbGljeSwgX0hhc2h0YWJsZT4oX19odCksCisgICAgICBfX2RldGFpbDo6X0hhc2hfY29kZV9iYXNlPF9LZXksIF9WYWx1ZSwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCQlfSDEsIF9IMiwgX0hhc2gsIF9fY2hjPihfX2h0KSwKKyAgICAgIF9fZGV0YWlsOjpfTWFwX2Jhc2U8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwgX191aywgX0hhc2h0YWJsZT4oX19odCksCisgICAgICBfTV9ub2RlX2FsbG9jYXRvcihfX2h0Ll9NX25vZGVfYWxsb2NhdG9yKSwKKyAgICAgIF9NX2J1Y2tldF9jb3VudChfX2h0Ll9NX2J1Y2tldF9jb3VudCksCisgICAgICBfTV9lbGVtZW50X2NvdW50KF9faHQuX01fZWxlbWVudF9jb3VudCksCisgICAgICBfTV9yZWhhc2hfcG9saWN5KF9faHQuX01fcmVoYXNoX3BvbGljeSkKKyAgICB7CisgICAgICBfTV9idWNrZXRzID0gX01fYWxsb2NhdGVfYnVja2V0cyhfTV9idWNrZXRfY291bnQpOworICAgICAgX190cnkKKwl7CisJICBmb3IgKHNpemVfdHlwZSBfX2kgPSAwOyBfX2kgPCBfX2h0Ll9NX2J1Y2tldF9jb3VudDsgKytfX2kpCisJICAgIHsKKwkgICAgICBfTm9kZSogX19uID0gX19odC5fTV9idWNrZXRzW19faV07CisJICAgICAgX05vZGUqKiBfX3RhaWwgPSBfTV9idWNrZXRzICsgX19pOworCSAgICAgIHdoaWxlIChfX24pCisJCXsKKwkJICAqX190YWlsID0gX01fYWxsb2NhdGVfbm9kZShfX24tPl9NX3YpOworCQkgIHRoaXMtPl9NX2NvcHlfY29kZSgqX190YWlsLCBfX24pOworCQkgIF9fdGFpbCA9ICYoKCpfX3RhaWwpLT5fTV9uZXh0KTsKKwkJICBfX24gPSBfX24tPl9NX25leHQ7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIGNsZWFyKCk7CisJICBfTV9kZWFsbG9jYXRlX2J1Y2tldHMoX01fYnVja2V0cywgX01fYnVja2V0X2NvdW50KTsKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCAKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPiYKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICBvcGVyYXRvcj0oY29uc3QgX0hhc2h0YWJsZSYgX19odCkKKyAgICB7CisgICAgICBfSGFzaHRhYmxlIF9fdG1wKF9faHQpOworICAgICAgdGhpcy0+c3dhcChfX3RtcCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIH5fSGFzaHRhYmxlKCkKKyAgICB7CisgICAgICBjbGVhcigpOworICAgICAgX01fZGVhbGxvY2F0ZV9idWNrZXRzKF9NX2J1Y2tldHMsIF9NX2J1Y2tldF9jb3VudCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIHZvaWQKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICBzd2FwKF9IYXNodGFibGUmIF9feCkKKyAgICB7CisgICAgICAvLyBUaGUgb25seSBiYXNlIGNsYXNzIHdpdGggbWVtYmVyIHZhcmlhYmxlcyBpcyBoYXNoX2NvZGVfYmFzZS4gIFdlCisgICAgICAvLyBkZWZpbmUgX0hhc2hfY29kZV9iYXNlOjpfTV9zd2FwIGJlY2F1c2UgZGlmZmVyZW50IHNwZWNpYWxpemF0aW9ucworICAgICAgLy8gaGF2ZSBkaWZmZXJlbnQgbWVtYmVycy4KKyAgICAgIF9fZGV0YWlsOjpfSGFzaF9jb2RlX2Jhc2U8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCV9IMSwgX0gyLCBfSGFzaCwgX19jaGM+OjpfTV9zd2FwKF9feCk7CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDQzMS4gU3dhcHBpbmcgY29udGFpbmVycyB3aXRoIHVuZXF1YWwgYWxsb2NhdG9ycy4KKyAgICAgIHN0ZDo6X19hbGxvY19zd2FwPF9Ob2RlX2FsbG9jYXRvcl90eXBlPjo6X1NfZG9faXQoX01fbm9kZV9hbGxvY2F0b3IsCisJCQkJCQkJX194Ll9NX25vZGVfYWxsb2NhdG9yKTsKKworICAgICAgc3RkOjpzd2FwKF9NX3JlaGFzaF9wb2xpY3ksIF9feC5fTV9yZWhhc2hfcG9saWN5KTsKKyAgICAgIHN0ZDo6c3dhcChfTV9idWNrZXRzLCBfX3guX01fYnVja2V0cyk7CisgICAgICBzdGQ6OnN3YXAoX01fYnVja2V0X2NvdW50LCBfX3guX01fYnVja2V0X2NvdW50KTsKKyAgICAgIHN0ZDo6c3dhcChfTV9lbGVtZW50X2NvdW50LCBfX3guX01fZWxlbWVudF9jb3VudCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIHZvaWQKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICBfX3JlaGFzaF9wb2xpY3koY29uc3QgX1JlaGFzaFBvbGljeSYgX19wb2wpCisgICAgeworICAgICAgX01fcmVoYXNoX3BvbGljeSA9IF9fcG9sOworICAgICAgc2l6ZV90eXBlIF9fbl9ia3QgPSBfX3BvbC5fTV9ia3RfZm9yX2VsZW1lbnRzKF9NX2VsZW1lbnRfY291bnQpOworICAgICAgaWYgKF9fbl9ia3QgPiBfTV9idWNrZXRfY291bnQpCisJX01fcmVoYXNoKF9fbl9ia3QpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCV9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCV9fY2hjLCBfX2NpdCwgX191az46Oml0ZXJhdG9yCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rKQorICAgIHsKKyAgICAgIHR5cGVuYW1lIF9IYXNodGFibGU6Ol9IYXNoX2NvZGVfdHlwZSBfX2NvZGUgPSB0aGlzLT5fTV9oYXNoX2NvZGUoX19rKTsKKyAgICAgIHN0ZDo6c2l6ZV90IF9fbiA9IHRoaXMtPl9NX2J1Y2tldF9pbmRleChfX2ssIF9fY29kZSwgX01fYnVja2V0X2NvdW50KTsKKyAgICAgIF9Ob2RlKiBfX3AgPSBfTV9maW5kX25vZGUoX01fYnVja2V0c1tfX25dLCBfX2ssIF9fY29kZSk7CisgICAgICByZXR1cm4gX19wID8gaXRlcmF0b3IoX19wLCBfTV9idWNrZXRzICsgX19uKSA6IHRoaXMtPmVuZCgpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCV9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCV9fY2hjLCBfX2NpdCwgX191az46OmNvbnN0X2l0ZXJhdG9yCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rKSBjb25zdAorICAgIHsKKyAgICAgIHR5cGVuYW1lIF9IYXNodGFibGU6Ol9IYXNoX2NvZGVfdHlwZSBfX2NvZGUgPSB0aGlzLT5fTV9oYXNoX2NvZGUoX19rKTsKKyAgICAgIHN0ZDo6c2l6ZV90IF9fbiA9IHRoaXMtPl9NX2J1Y2tldF9pbmRleChfX2ssIF9fY29kZSwgX01fYnVja2V0X2NvdW50KTsKKyAgICAgIF9Ob2RlKiBfX3AgPSBfTV9maW5kX25vZGUoX01fYnVja2V0c1tfX25dLCBfX2ssIF9fY29kZSk7CisgICAgICByZXR1cm4gX19wID8gY29uc3RfaXRlcmF0b3IoX19wLCBfTV9idWNrZXRzICsgX19uKSA6IHRoaXMtPmVuZCgpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCV9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCV9fY2hjLCBfX2NpdCwgX191az46OnNpemVfdHlwZQorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX2spIGNvbnN0CisgICAgeworICAgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTo6X0hhc2hfY29kZV90eXBlIF9fY29kZSA9IHRoaXMtPl9NX2hhc2hfY29kZShfX2spOworICAgICAgc3RkOjpzaXplX3QgX19uID0gdGhpcy0+X01fYnVja2V0X2luZGV4KF9faywgX19jb2RlLCBfTV9idWNrZXRfY291bnQpOworICAgICAgc3RkOjpzaXplX3QgX19yZXN1bHQgPSAwOworICAgICAgZm9yIChfTm9kZSogX19wID0gX01fYnVja2V0c1tfX25dOyBfX3A7IF9fcCA9IF9fcC0+X01fbmV4dCkKKwlpZiAodGhpcy0+X01fY29tcGFyZShfX2ssIF9fY29kZSwgX19wKSkKKwkgICsrX19yZXN1bHQ7CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIHN0ZDo6cGFpcjx0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwKKwkJCQkgIF9FeHRyYWN0S2V5LCBfRXF1YWwsIF9IMSwKKwkJCQkgIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksCisJCQkJICBfX2NoYywgX19jaXQsIF9fdWs+OjppdGVyYXRvciwKKwkgICAgICB0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwKKwkJCQkgIF9FeHRyYWN0S2V5LCBfRXF1YWwsIF9IMSwKKwkJCQkgIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksCisJCQkJICBfX2NoYywgX19jaXQsIF9fdWs+OjppdGVyYXRvcj4KKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rKQorICAgIHsKKyAgICAgIHR5cGVuYW1lIF9IYXNodGFibGU6Ol9IYXNoX2NvZGVfdHlwZSBfX2NvZGUgPSB0aGlzLT5fTV9oYXNoX2NvZGUoX19rKTsKKyAgICAgIHN0ZDo6c2l6ZV90IF9fbiA9IHRoaXMtPl9NX2J1Y2tldF9pbmRleChfX2ssIF9fY29kZSwgX01fYnVja2V0X2NvdW50KTsKKyAgICAgIF9Ob2RlKiogX19oZWFkID0gX01fYnVja2V0cyArIF9fbjsKKyAgICAgIF9Ob2RlKiBfX3AgPSBfTV9maW5kX25vZGUoKl9faGVhZCwgX19rLCBfX2NvZGUpOworICAgICAgCisgICAgICBpZiAoX19wKQorCXsKKwkgIF9Ob2RlKiBfX3AxID0gX19wLT5fTV9uZXh0OworCSAgZm9yICg7IF9fcDE7IF9fcDEgPSBfX3AxLT5fTV9uZXh0KQorCSAgICBpZiAoIXRoaXMtPl9NX2NvbXBhcmUoX19rLCBfX2NvZGUsIF9fcDEpKQorCSAgICAgIGJyZWFrOworCisJICBpdGVyYXRvciBfX2ZpcnN0KF9fcCwgX19oZWFkKTsKKwkgIGl0ZXJhdG9yIF9fbGFzdChfX3AxLCBfX2hlYWQpOworCSAgaWYgKCFfX3AxKQorCSAgICBfX2xhc3QuX01faW5jcl9idWNrZXQoKTsKKwkgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihfX2ZpcnN0LCBfX2xhc3QpOworCX0KKyAgICAgIGVsc2UKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIodGhpcy0+ZW5kKCksIHRoaXMtPmVuZCgpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCAKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgc3RkOjpwYWlyPHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLAorCQkJCSAgX0V4dHJhY3RLZXksIF9FcXVhbCwgX0gxLAorCQkJCSAgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCQkgIF9fY2hjLCBfX2NpdCwgX191az46OmNvbnN0X2l0ZXJhdG9yLAorCSAgICAgIHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLAorCQkJCSAgX0V4dHJhY3RLZXksIF9FcXVhbCwgX0gxLAorCQkJCSAgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCQkgIF9fY2hjLCBfX2NpdCwgX191az46OmNvbnN0X2l0ZXJhdG9yPgorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2spIGNvbnN0CisgICAgeworICAgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTo6X0hhc2hfY29kZV90eXBlIF9fY29kZSA9IHRoaXMtPl9NX2hhc2hfY29kZShfX2spOworICAgICAgc3RkOjpzaXplX3QgX19uID0gdGhpcy0+X01fYnVja2V0X2luZGV4KF9faywgX19jb2RlLCBfTV9idWNrZXRfY291bnQpOworICAgICAgX05vZGUqKiBfX2hlYWQgPSBfTV9idWNrZXRzICsgX19uOworICAgICAgX05vZGUqIF9fcCA9IF9NX2ZpbmRfbm9kZSgqX19oZWFkLCBfX2ssIF9fY29kZSk7CisKKyAgICAgIGlmIChfX3ApCisJeworCSAgX05vZGUqIF9fcDEgPSBfX3AtPl9NX25leHQ7CisJICBmb3IgKDsgX19wMTsgX19wMSA9IF9fcDEtPl9NX25leHQpCisJICAgIGlmICghdGhpcy0+X01fY29tcGFyZShfX2ssIF9fY29kZSwgX19wMSkpCisJICAgICAgYnJlYWs7CisKKwkgIGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QoX19wLCBfX2hlYWQpOworCSAgY29uc3RfaXRlcmF0b3IgX19sYXN0KF9fcDEsIF9faGVhZCk7CisJICBpZiAoIV9fcDEpCisJICAgIF9fbGFzdC5fTV9pbmNyX2J1Y2tldCgpOworCSAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKF9fZmlyc3QsIF9fbGFzdCk7CisJfQorICAgICAgZWxzZQorCXJldHVybiBzdGQ6Om1ha2VfcGFpcih0aGlzLT5lbmQoKSwgdGhpcy0+ZW5kKCkpOworICAgIH0KKworICAvLyBGaW5kIHRoZSBub2RlIHdob3NlIGtleSBjb21wYXJlcyBlcXVhbCB0byBrLCBiZWdpbm5pbmcgdGhlIHNlYXJjaAorICAvLyBhdCBwICh1c3VhbGx5IHRoZSBoZWFkIG9mIGEgYnVja2V0KS4gIFJldHVybiBuaWwgaWYgbm8gbm9kZSBpcyBmb3VuZC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCAKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LAorCQkJX0VxdWFsLCBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksCisJCQlfX2NoYywgX19jaXQsIF9fdWs+OjpfTm9kZSogCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgX01fZmluZF9ub2RlKF9Ob2RlKiBfX3AsIGNvbnN0IGtleV90eXBlJiBfX2ssCisJCXR5cGVuYW1lIF9IYXNodGFibGU6Ol9IYXNoX2NvZGVfdHlwZSBfX2NvZGUpIGNvbnN0CisgICAgeworICAgICAgZm9yICg7IF9fcDsgX19wID0gX19wLT5fTV9uZXh0KQorCWlmICh0aGlzLT5fTV9jb21wYXJlKF9faywgX19jb2RlLCBfX3ApKQorCSAgcmV0dXJuIF9fcDsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgLy8gSW5zZXJ0IHYgaW4gYnVja2V0IG4gKGFzc3VtZXMgbm8gZWxlbWVudCB3aXRoIGl0cyBrZXkgYWxyZWFkeSBwcmVzZW50KS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCAKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJCQlfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksCisJCQlfX2NoYywgX19jaXQsIF9fdWs+OjppdGVyYXRvcgorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIF9NX2luc2VydF9idWNrZXQoY29uc3QgdmFsdWVfdHlwZSYgX192LCBzaXplX3R5cGUgX19uLAorCQkgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTo6X0hhc2hfY29kZV90eXBlIF9fY29kZSkKKyAgICB7CisgICAgICBzdGQ6OnBhaXI8Ym9vbCwgc3RkOjpzaXplX3Q+IF9fZG9fcmVoYXNoCisJPSBfTV9yZWhhc2hfcG9saWN5Ll9NX25lZWRfcmVoYXNoKF9NX2J1Y2tldF9jb3VudCwKKwkJCQkJICBfTV9lbGVtZW50X2NvdW50LCAxKTsKKworICAgICAgLy8gQWxsb2NhdGUgdGhlIG5ldyBub2RlIGJlZm9yZSBkb2luZyB0aGUgcmVoYXNoIHNvIHRoYXQgd2UgZG9uJ3QKKyAgICAgIC8vIGRvIGEgcmVoYXNoIGlmIHRoZSBhbGxvY2F0aW9uIHRocm93cy4KKyAgICAgIF9Ob2RlKiBfX25ld19ub2RlID0gX01fYWxsb2NhdGVfbm9kZShfX3YpOworCisgICAgICBfX3RyeQorCXsKKwkgIGlmIChfX2RvX3JlaGFzaC5maXJzdCkKKwkgICAgeworCSAgICAgIGNvbnN0IGtleV90eXBlJiBfX2sgPSB0aGlzLT5fTV9leHRyYWN0KF9fdik7CisJICAgICAgX19uID0gdGhpcy0+X01fYnVja2V0X2luZGV4KF9faywgX19jb2RlLCBfX2RvX3JlaGFzaC5zZWNvbmQpOworCSAgICAgIF9NX3JlaGFzaChfX2RvX3JlaGFzaC5zZWNvbmQpOworCSAgICB9CisKKwkgIF9fbmV3X25vZGUtPl9NX25leHQgPSBfTV9idWNrZXRzW19fbl07CisJICB0aGlzLT5fTV9zdG9yZV9jb2RlKF9fbmV3X25vZGUsIF9fY29kZSk7CisJICBfTV9idWNrZXRzW19fbl0gPSBfX25ld19ub2RlOworCSAgKytfTV9lbGVtZW50X2NvdW50OworCSAgcmV0dXJuIGl0ZXJhdG9yKF9fbmV3X25vZGUsIF9NX2J1Y2tldHMgKyBfX24pOworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIF9NX2RlYWxsb2NhdGVfbm9kZShfX25ld19ub2RlKTsKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICB9CisKKyAgLy8gSW5zZXJ0IHYgaWYgbm8gZWxlbWVudCB3aXRoIGl0cyBrZXkgaXMgYWxyZWFkeSBwcmVzZW50LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICBzdGQ6OnBhaXI8dHlwZW5hbWUgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsCisJCQkJICBfRXh0cmFjdEtleSwgX0VxdWFsLCBfSDEsCisJCQkJICBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LAorCQkJCSAgX19jaGMsIF9fY2l0LCBfX3VrPjo6aXRlcmF0b3IsIGJvb2w+CisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgIF9NX2luc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3YsIHN0ZDo6dHIxOjp0cnVlX3R5cGUpCisgICAgeworICAgICAgY29uc3Qga2V5X3R5cGUmIF9fayA9IHRoaXMtPl9NX2V4dHJhY3QoX192KTsKKyAgICAgIHR5cGVuYW1lIF9IYXNodGFibGU6Ol9IYXNoX2NvZGVfdHlwZSBfX2NvZGUgPSB0aGlzLT5fTV9oYXNoX2NvZGUoX19rKTsKKyAgICAgIHNpemVfdHlwZSBfX24gPSB0aGlzLT5fTV9idWNrZXRfaW5kZXgoX19rLCBfX2NvZGUsIF9NX2J1Y2tldF9jb3VudCk7CisKKyAgICAgIGlmIChfTm9kZSogX19wID0gX01fZmluZF9ub2RlKF9NX2J1Y2tldHNbX19uXSwgX19rLCBfX2NvZGUpKQorCXJldHVybiBzdGQ6Om1ha2VfcGFpcihpdGVyYXRvcihfX3AsIF9NX2J1Y2tldHMgKyBfX24pLCBmYWxzZSk7CisgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoX01faW5zZXJ0X2J1Y2tldChfX3YsIF9fbiwgX19jb2RlKSwgdHJ1ZSk7CisgICAgfQorICAKKyAgLy8gSW5zZXJ0IHYgdW5jb25kaXRpb25hbGx5LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCV9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCV9fY2hjLCBfX2NpdCwgX191az46Oml0ZXJhdG9yCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgX01faW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9fdiwgc3RkOjp0cjE6OmZhbHNlX3R5cGUpCisgICAgeworICAgICAgc3RkOjpwYWlyPGJvb2wsIHN0ZDo6c2l6ZV90PiBfX2RvX3JlaGFzaAorCT0gX01fcmVoYXNoX3BvbGljeS5fTV9uZWVkX3JlaGFzaChfTV9idWNrZXRfY291bnQsCisJCQkJCSAgX01fZWxlbWVudF9jb3VudCwgMSk7CisgICAgICBpZiAoX19kb19yZWhhc2guZmlyc3QpCisJX01fcmVoYXNoKF9fZG9fcmVoYXNoLnNlY29uZCk7CisgCisgICAgICBjb25zdCBrZXlfdHlwZSYgX19rID0gdGhpcy0+X01fZXh0cmFjdChfX3YpOworICAgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTo6X0hhc2hfY29kZV90eXBlIF9fY29kZSA9IHRoaXMtPl9NX2hhc2hfY29kZShfX2spOworICAgICAgc2l6ZV90eXBlIF9fbiA9IHRoaXMtPl9NX2J1Y2tldF9pbmRleChfX2ssIF9fY29kZSwgX01fYnVja2V0X2NvdW50KTsKKworICAgICAgLy8gRmlyc3QgZmluZCB0aGUgbm9kZSwgYXZvaWQgbGVha2luZyBuZXdfbm9kZSBpZiBjb21wYXJlIHRocm93cy4KKyAgICAgIF9Ob2RlKiBfX3ByZXYgPSBfTV9maW5kX25vZGUoX01fYnVja2V0c1tfX25dLCBfX2ssIF9fY29kZSk7CisgICAgICBfTm9kZSogX19uZXdfbm9kZSA9IF9NX2FsbG9jYXRlX25vZGUoX192KTsKKworICAgICAgaWYgKF9fcHJldikKKwl7CisJICBfX25ld19ub2RlLT5fTV9uZXh0ID0gX19wcmV2LT5fTV9uZXh0OworCSAgX19wcmV2LT5fTV9uZXh0ID0gX19uZXdfbm9kZTsKKwl9CisgICAgICBlbHNlCisJeworCSAgX19uZXdfbm9kZS0+X01fbmV4dCA9IF9NX2J1Y2tldHNbX19uXTsKKwkgIF9NX2J1Y2tldHNbX19uXSA9IF9fbmV3X25vZGU7CisJfQorICAgICAgdGhpcy0+X01fc3RvcmVfY29kZShfX25ld19ub2RlLCBfX2NvZGUpOworCisgICAgICArK19NX2VsZW1lbnRfY291bnQ7CisgICAgICByZXR1cm4gaXRlcmF0b3IoX19uZXdfbm9kZSwgX01fYnVja2V0cyArIF9fbik7CisgICAgfQorCisgIC8vIEZvciBlcmFzZShpdGVyYXRvcikgYW5kIGVyYXNlKGNvbnN0X2l0ZXJhdG9yKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCAKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgdm9pZAorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIF9NX2VyYXNlX25vZGUoX05vZGUqIF9fcCwgX05vZGUqKiBfX2IpCisgICAgeworICAgICAgX05vZGUqIF9fY3VyID0gKl9fYjsKKyAgICAgIGlmIChfX2N1ciA9PSBfX3ApCisJKl9fYiA9IF9fY3VyLT5fTV9uZXh0OworICAgICAgZWxzZQorCXsKKwkgIF9Ob2RlKiBfX25leHQgPSBfX2N1ci0+X01fbmV4dDsKKwkgIHdoaWxlIChfX25leHQgIT0gX19wKQorCSAgICB7CisJICAgICAgX19jdXIgPSBfX25leHQ7CisJICAgICAgX19uZXh0ID0gX19jdXItPl9NX25leHQ7CisJICAgIH0KKwkgIF9fY3VyLT5fTV9uZXh0ID0gX19uZXh0LT5fTV9uZXh0OworCX0KKworICAgICAgX01fZGVhbGxvY2F0ZV9ub2RlKF9fcCk7CisgICAgICAtLV9NX2VsZW1lbnRfY291bnQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgdm9pZCAKKyAgICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICAgIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICB7CisJc2l6ZV90eXBlIF9fbl9lbHQgPSBfX2RldGFpbDo6X19kaXN0YW5jZV9mdyhfX2ZpcnN0LCBfX2xhc3QpOworCXN0ZDo6cGFpcjxib29sLCBzdGQ6OnNpemVfdD4gX19kb19yZWhhc2gKKwkgID0gX01fcmVoYXNoX3BvbGljeS5fTV9uZWVkX3JlaGFzaChfTV9idWNrZXRfY291bnQsCisJCQkJCSAgICBfTV9lbGVtZW50X2NvdW50LCBfX25fZWx0KTsKKwlpZiAoX19kb19yZWhhc2guZmlyc3QpCisJICBfTV9yZWhhc2goX19kb19yZWhhc2guc2Vjb25kKTsKKworCWZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQorCSAgdGhpcy0+aW5zZXJ0KCpfX2ZpcnN0KTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCV9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCV9fY2hjLCBfX2NpdCwgX191az46Oml0ZXJhdG9yCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgZXJhc2UoaXRlcmF0b3IgX19pdCkKKyAgICB7CisgICAgICBpdGVyYXRvciBfX3Jlc3VsdCA9IF9faXQ7CisgICAgICArK19fcmVzdWx0OworICAgICAgX01fZXJhc2Vfbm9kZShfX2l0Ll9NX2N1cl9ub2RlLCBfX2l0Ll9NX2N1cl9idWNrZXQpOworICAgICAgcmV0dXJuIF9fcmVzdWx0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCV9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCV9fY2hjLCBfX2NpdCwgX191az46OmNvbnN0X2l0ZXJhdG9yCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgZXJhc2UoY29uc3RfaXRlcmF0b3IgX19pdCkKKyAgICB7CisgICAgICBjb25zdF9pdGVyYXRvciBfX3Jlc3VsdCA9IF9faXQ7CisgICAgICArK19fcmVzdWx0OworICAgICAgX01fZXJhc2Vfbm9kZShfX2l0Ll9NX2N1cl9ub2RlLCBfX2l0Ll9NX2N1cl9idWNrZXQpOworICAgICAgcmV0dXJuIF9fcmVzdWx0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCV9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCV9fY2hjLCBfX2NpdCwgX191az46OnNpemVfdHlwZQorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX2spCisgICAgeworICAgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTo6X0hhc2hfY29kZV90eXBlIF9fY29kZSA9IHRoaXMtPl9NX2hhc2hfY29kZShfX2spOworICAgICAgc3RkOjpzaXplX3QgX19uID0gdGhpcy0+X01fYnVja2V0X2luZGV4KF9faywgX19jb2RlLCBfTV9idWNrZXRfY291bnQpOworICAgICAgc2l6ZV90eXBlIF9fcmVzdWx0ID0gMDsKKyAgICAgIAorICAgICAgX05vZGUqKiBfX3Nsb3QgPSBfTV9idWNrZXRzICsgX19uOworICAgICAgd2hpbGUgKCpfX3Nsb3QgJiYgIXRoaXMtPl9NX2NvbXBhcmUoX19rLCBfX2NvZGUsICpfX3Nsb3QpKQorCV9fc2xvdCA9ICYoKCpfX3Nsb3QpLT5fTV9uZXh0KTsKKworICAgICAgX05vZGUqKiBfX3NhdmVkX3Nsb3QgPSAwOworICAgICAgd2hpbGUgKCpfX3Nsb3QgJiYgdGhpcy0+X01fY29tcGFyZShfX2ssIF9fY29kZSwgKl9fc2xvdCkpCisJeworCSAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCSAgLy8gNTI2LiBJcyBpdCB1bmRlZmluZWQgaWYgYSBmdW5jdGlvbiBpbiB0aGUgc3RhbmRhcmQgY2hhbmdlcworCSAgLy8gaW4gcGFyYW1ldGVycz8KKwkgIGlmICgmdGhpcy0+X01fZXh0cmFjdCgoKl9fc2xvdCktPl9NX3YpICE9ICZfX2spCisJICAgIHsKKyAgICAgICAgICAgICAgX05vZGUqIF9fcCA9ICpfX3Nsb3Q7CisgICAgICAgICAgICAgICpfX3Nsb3QgPSBfX3AtPl9NX25leHQ7CisJICAgICAgX01fZGVhbGxvY2F0ZV9ub2RlKF9fcCk7CisJICAgICAgLS1fTV9lbGVtZW50X2NvdW50OworCSAgICAgICsrX19yZXN1bHQ7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIF9fc2F2ZWRfc2xvdCA9IF9fc2xvdDsKKwkgICAgICBfX3Nsb3QgPSAmKCgqX19zbG90KS0+X01fbmV4dCk7CisJICAgIH0KKwl9CisKKyAgICAgIGlmIChfX3NhdmVkX3Nsb3QpCisJeworCSAgX05vZGUqIF9fcCA9ICpfX3NhdmVkX3Nsb3Q7CisJICAqX19zYXZlZF9zbG90ID0gX19wLT5fTV9uZXh0OworCSAgX01fZGVhbGxvY2F0ZV9ub2RlKF9fcCk7CisJICAtLV9NX2VsZW1lbnRfY291bnQ7CisJICArK19fcmVzdWx0OworCX0KKworICAgICAgcmV0dXJuIF9fcmVzdWx0OworICAgIH0KKworICAvLyA/Pz8gVGhpcyBjb3VsZCBiZSBvcHRpbWl6ZWQgYnkgdGFraW5nIGFkdmFudGFnZSBvZiB0aGUgYnVja2V0CisgIC8vIHN0cnVjdHVyZSwgYnV0IGl0J3Mgbm90IGNsZWFyIHRoYXQgaXQncyB3b3J0aCBkb2luZy4gIEl0IHByb2JhYmx5CisgIC8vIHdvdWxkbid0IGV2ZW4gYmUgYW4gb3B0aW1pemF0aW9uIHVubGVzcyB0aGUgbG9hZCBmYWN0b3IgaXMgbGFyZ2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LAorCQkJX19jaGMsIF9fY2l0LCBfX3VrPjo6aXRlcmF0b3IKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQorCV9fZmlyc3QgPSB0aGlzLT5lcmFzZShfX2ZpcnN0KTsKKyAgICAgIHJldHVybiBfX2xhc3Q7CisgICAgfQorICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCAKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJCQlfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksCisJCQlfX2NoYywgX19jaXQsIF9fdWs+Ojpjb25zdF9pdGVyYXRvcgorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QsIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCisJX19maXJzdCA9IHRoaXMtPmVyYXNlKF9fZmlyc3QpOworICAgICAgcmV0dXJuIF9fbGFzdDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCAKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgdm9pZAorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIGNsZWFyKCkKKyAgICB7CisgICAgICBfTV9kZWFsbG9jYXRlX25vZGVzKF9NX2J1Y2tldHMsIF9NX2J1Y2tldF9jb3VudCk7CisgICAgICBfTV9lbGVtZW50X2NvdW50ID0gMDsKKyAgICB9CisgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIHZvaWQKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICByZWhhc2goc2l6ZV90eXBlIF9fbikKKyAgICB7CisgICAgICBfTV9yZWhhc2goc3RkOjptYXgoX01fcmVoYXNoX3BvbGljeS5fTV9uZXh0X2JrdChfX24pLAorCQkJIF9NX3JlaGFzaF9wb2xpY3kuX01fYmt0X2Zvcl9lbGVtZW50cyhfTV9lbGVtZW50X2NvdW50CisJCQkJCQkJICAgICAgKyAxKSkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB2b2lkCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgX01fcmVoYXNoKHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgX05vZGUqKiBfX25ld19hcnJheSA9IF9NX2FsbG9jYXRlX2J1Y2tldHMoX19uKTsKKyAgICAgIF9fdHJ5CisJeworCSAgZm9yIChzaXplX3R5cGUgX19pID0gMDsgX19pIDwgX01fYnVja2V0X2NvdW50OyArK19faSkKKwkgICAgd2hpbGUgKF9Ob2RlKiBfX3AgPSBfTV9idWNrZXRzW19faV0pCisJICAgICAgeworCQlzdGQ6OnNpemVfdCBfX25ld19pbmRleCA9IHRoaXMtPl9NX2J1Y2tldF9pbmRleChfX3AsIF9fbik7CisJCV9NX2J1Y2tldHNbX19pXSA9IF9fcC0+X01fbmV4dDsKKwkJX19wLT5fTV9uZXh0ID0gX19uZXdfYXJyYXlbX19uZXdfaW5kZXhdOworCQlfX25ld19hcnJheVtfX25ld19pbmRleF0gPSBfX3A7CisJICAgICAgfQorCSAgX01fZGVhbGxvY2F0ZV9idWNrZXRzKF9NX2J1Y2tldHMsIF9NX2J1Y2tldF9jb3VudCk7CisJICBfTV9idWNrZXRfY291bnQgPSBfX247CisJICBfTV9idWNrZXRzID0gX19uZXdfYXJyYXk7CisJfQorICAgICAgX19jYXRjaCguLi4pCisJeworCSAgLy8gQSBmYWlsdXJlIGhlcmUgbWVhbnMgdGhhdCBhIGhhc2ggZnVuY3Rpb24gdGhyZXcgYW4gZXhjZXB0aW9uLgorCSAgLy8gV2UgY2FuJ3QgcmVzdG9yZSB0aGUgcHJldmlvdXMgc3RhdGUgd2l0aG91dCBjYWxsaW5nIHRoZSBoYXNoCisJICAvLyBmdW5jdGlvbiBhZ2Fpbiwgc28gdGhlIG9ubHkgc2Vuc2libGUgcmVjb3ZlcnkgaXMgdG8gZGVsZXRlCisJICAvLyBldmVyeXRoaW5nLgorCSAgX01fZGVhbGxvY2F0ZV9ub2RlcyhfX25ld19hcnJheSwgX19uKTsKKwkgIF9NX2RlYWxsb2NhdGVfYnVja2V0cyhfX25ld19hcnJheSwgX19uKTsKKwkgIF9NX2RlYWxsb2NhdGVfbm9kZXMoX01fYnVja2V0cywgX01fYnVja2V0X2NvdW50KTsKKwkgIF9NX2VsZW1lbnRfY291bnQgPSAwOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgIH0KK30KK30KKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9IQVNIVEFCTEVfSApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvaGFzaHRhYmxlX3BvbGljeS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvaGFzaHRhYmxlX3BvbGljeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMGUwZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9oYXNodGFibGVfcG9saWN5LmgKQEAgLTAsMCArMSw3NzkgQEAKKy8vIEludGVybmFsIHBvbGljeSBoZWFkZXIgZm9yIFRSMSB1bm9yZGVyZWRfc2V0IGFuZCB1bm9yZGVyZWRfbWFwIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL2hhc2h0YWJsZV9wb2xpY3kuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCituYW1lc3BhY2Ugc3RkCit7IAorbmFtZXNwYWNlIHRyMQoreworbmFtZXNwYWNlIF9fZGV0YWlsCit7CisgIC8vIEhlbHBlciBmdW5jdGlvbjogcmV0dXJuIGRpc3RhbmNlKGZpcnN0LCBsYXN0KSBmb3IgZm9yd2FyZAorICAvLyBpdGVyYXRvcnMsIG9yIDAgZm9yIGlucHV0IGl0ZXJhdG9ycy4KKyAgdGVtcGxhdGU8Y2xhc3MgX0l0ZXJhdG9yPgorICAgIGlubGluZSB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBfX2Rpc3RhbmNlX2Z3KF9JdGVyYXRvciBfX2ZpcnN0LCBfSXRlcmF0b3IgX19sYXN0LAorCQkgIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnKQorICAgIHsgcmV0dXJuIDA7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfSXRlcmF0b3I+CisgICAgaW5saW5lIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorICAgIF9fZGlzdGFuY2VfZncoX0l0ZXJhdG9yIF9fZmlyc3QsIF9JdGVyYXRvciBfX2xhc3QsCisJCSAgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZykKKyAgICB7IHJldHVybiBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfSXRlcmF0b3I+CisgICAgaW5saW5lIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorICAgIF9fZGlzdGFuY2VfZncoX0l0ZXJhdG9yIF9fZmlyc3QsIF9JdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSBfVGFnOworICAgICAgcmV0dXJuIF9fZGlzdGFuY2VfZncoX19maXJzdCwgX19sYXN0LCBfVGFnKCkpOworICAgIH0KKworICAvLyBBdXhpbGlhcnkgdHlwZXMgdXNlZCBmb3IgYWxsIGluc3RhbnRpYXRpb25zIG9mIF9IYXNodGFibGU6IG5vZGVzCisgIC8vIGFuZCBpdGVyYXRvcnMuCisgIAorICAvLyBOb2RlcywgdXNlZCB0byB3cmFwIGVsZW1lbnRzIHN0b3JlZCBpbiB0aGUgaGFzaCB0YWJsZS4gIEEgcG9saWN5CisgIC8vIHRlbXBsYXRlIHBhcmFtZXRlciBvZiBjbGFzcyB0ZW1wbGF0ZSBfSGFzaHRhYmxlIGNvbnRyb2xzIHdoZXRoZXIKKyAgLy8gbm9kZXMgYWxzbyBzdG9yZSBhIGhhc2ggY29kZS4gSW4gc29tZSBjYXNlcyAoZS5nLiBzdHJpbmdzKSB0aGlzCisgIC8vIG1heSBiZSBhIHBlcmZvcm1hbmNlIHdpbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCBib29sIF9fY2FjaGVfaGFzaF9jb2RlPgorICAgIHN0cnVjdCBfSGFzaF9ub2RlOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZT4KKyAgICBzdHJ1Y3QgX0hhc2hfbm9kZTxfVmFsdWUsIHRydWU+CisgICAgeworICAgICAgX1ZhbHVlICAgICAgIF9NX3Y7CisgICAgICBzdGQ6OnNpemVfdCAgX01faGFzaF9jb2RlOworICAgICAgX0hhc2hfbm9kZSogIF9NX25leHQ7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWU+CisgICAgc3RydWN0IF9IYXNoX25vZGU8X1ZhbHVlLCBmYWxzZT4KKyAgICB7CisgICAgICBfVmFsdWUgICAgICAgX01fdjsKKyAgICAgIF9IYXNoX25vZGUqICBfTV9uZXh0OworICAgIH07CisKKyAgLy8gTG9jYWwgaXRlcmF0b3JzLCB1c2VkIHRvIGl0ZXJhdGUgd2l0aGluIGEgYnVja2V0IGJ1dCBub3QgYmV0d2VlbgorICAvLyBidWNrZXRzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIGJvb2wgX19jYWNoZT4KKyAgICBzdHJ1Y3QgX05vZGVfaXRlcmF0b3JfYmFzZQorICAgIHsKKyAgICAgIF9Ob2RlX2l0ZXJhdG9yX2Jhc2UoX0hhc2hfbm9kZTxfVmFsdWUsIF9fY2FjaGU+KiBfX3ApCisgICAgICA6IF9NX2N1cihfX3ApIHsgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICBfTV9pbmNyKCkKKyAgICAgIHsgX01fY3VyID0gX01fY3VyLT5fTV9uZXh0OyB9CisKKyAgICAgIF9IYXNoX25vZGU8X1ZhbHVlLCBfX2NhY2hlPiogIF9NX2N1cjsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZSwgYm9vbCBfX2NhY2hlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBfTm9kZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4mIF9feCwKKwkgICAgICAgY29uc3QgX05vZGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX2N1ciA9PSBfX3kuX01fY3VyOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCBib29sIF9fY2FjaGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9Ob2RlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBfX2NhY2hlPiYgX194LAorCSAgICAgICBjb25zdCBfTm9kZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4mIF9feSkKKyAgICB7IHJldHVybiBfX3guX01fY3VyICE9IF9feS5fTV9jdXI7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIGJvb2wgX19jb25zdGFudF9pdGVyYXRvcnMsIGJvb2wgX19jYWNoZT4KKyAgICBzdHJ1Y3QgX05vZGVfaXRlcmF0b3IKKyAgICA6IHB1YmxpYyBfTm9kZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9WYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUKKyAgICAgIF9fZ251X2N4eDo6X19jb25kaXRpb25hbF90eXBlPF9fY29uc3RhbnRfaXRlcmF0b3JzLAorCQkJCSAgICBjb25zdCBfVmFsdWUqLCBfVmFsdWUqPjo6X190eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUKKyAgICAgIF9fZ251X2N4eDo6X19jb25kaXRpb25hbF90eXBlPF9fY29uc3RhbnRfaXRlcmF0b3JzLAorCQkJCSAgICBjb25zdCBfVmFsdWUmLCBfVmFsdWUmPjo6X190eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBzdGQ6OnB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyAgICAgICAgICAgICAgICBpdGVyYXRvcl9jYXRlZ29yeTsKKworICAgICAgX05vZGVfaXRlcmF0b3IoKQorICAgICAgOiBfTm9kZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4oMCkgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfTm9kZV9pdGVyYXRvcihfSGFzaF9ub2RlPF9WYWx1ZSwgX19jYWNoZT4qIF9fcCkKKyAgICAgIDogX05vZGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+KF9fcCkgeyB9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2N1ci0+X01fdjsgfQorICAKKyAgICAgIHBvaW50ZXIKKyAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAgeyByZXR1cm4gJnRoaXMtPl9NX2N1ci0+X01fdjsgfQorCisgICAgICBfTm9kZV9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeyAKKwl0aGlzLT5fTV9pbmNyKCk7CisJcmV0dXJuICp0aGlzOyAKKyAgICAgIH0KKyAgCisgICAgICBfTm9kZV9pdGVyYXRvcgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7IAorCV9Ob2RlX2l0ZXJhdG9yIF9fdG1wKCp0aGlzKTsKKwl0aGlzLT5fTV9pbmNyKCk7CisJcmV0dXJuIF9fdG1wOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCBib29sIF9fY29uc3RhbnRfaXRlcmF0b3JzLCBib29sIF9fY2FjaGU+CisgICAgc3RydWN0IF9Ob2RlX2NvbnN0X2l0ZXJhdG9yCisgICAgOiBwdWJsaWMgX05vZGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+CisgICAgeworICAgICAgdHlwZWRlZiBfVmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIGNvbnN0IF9WYWx1ZSogICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1ZhbHVlJiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHN0ZDo6cHRyZGlmZl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnICAgICAgICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OworCisgICAgICBfTm9kZV9jb25zdF9pdGVyYXRvcigpCisgICAgICA6IF9Ob2RlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBfX2NhY2hlPigwKSB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIF9Ob2RlX2NvbnN0X2l0ZXJhdG9yKF9IYXNoX25vZGU8X1ZhbHVlLCBfX2NhY2hlPiogX19wKQorICAgICAgOiBfTm9kZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4oX19wKSB7IH0KKworICAgICAgX05vZGVfY29uc3RfaXRlcmF0b3IoY29uc3QgX05vZGVfaXRlcmF0b3I8X1ZhbHVlLCBfX2NvbnN0YW50X2l0ZXJhdG9ycywKKwkJCSAgIF9fY2FjaGU+JiBfX3gpCisgICAgICA6IF9Ob2RlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBfX2NhY2hlPihfX3guX01fY3VyKSB7IH0KKworICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01fY3VyLT5fTV92OyB9CisgIAorICAgICAgcG9pbnRlcgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CisgICAgICB7IHJldHVybiAmdGhpcy0+X01fY3VyLT5fTV92OyB9CisKKyAgICAgIF9Ob2RlX2NvbnN0X2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7IAorCXRoaXMtPl9NX2luY3IoKTsKKwlyZXR1cm4gKnRoaXM7IAorICAgICAgfQorICAKKyAgICAgIF9Ob2RlX2NvbnN0X2l0ZXJhdG9yCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsgCisJX05vZGVfY29uc3RfaXRlcmF0b3IgX190bXAoKnRoaXMpOworCXRoaXMtPl9NX2luY3IoKTsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIGJvb2wgX19jYWNoZT4KKyAgICBzdHJ1Y3QgX0hhc2h0YWJsZV9pdGVyYXRvcl9iYXNlCisgICAgeworICAgICAgX0hhc2h0YWJsZV9pdGVyYXRvcl9iYXNlKF9IYXNoX25vZGU8X1ZhbHVlLCBfX2NhY2hlPiogX19ub2RlLAorCQkJICAgICAgIF9IYXNoX25vZGU8X1ZhbHVlLCBfX2NhY2hlPioqIF9fYnVja2V0KQorICAgICAgOiBfTV9jdXJfbm9kZShfX25vZGUpLCBfTV9jdXJfYnVja2V0KF9fYnVja2V0KSB7IH0KKworICAgICAgdm9pZAorICAgICAgX01faW5jcigpCisgICAgICB7CisJX01fY3VyX25vZGUgPSBfTV9jdXJfbm9kZS0+X01fbmV4dDsKKwlpZiAoIV9NX2N1cl9ub2RlKQorCSAgX01faW5jcl9idWNrZXQoKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01faW5jcl9idWNrZXQoKTsKKworICAgICAgX0hhc2hfbm9kZTxfVmFsdWUsIF9fY2FjaGU+KiAgIF9NX2N1cl9ub2RlOworICAgICAgX0hhc2hfbm9kZTxfVmFsdWUsIF9fY2FjaGU+KiogIF9NX2N1cl9idWNrZXQ7CisgICAgfTsKKworICAvLyBHbG9iYWwgaXRlcmF0b3JzLCB1c2VkIGZvciBhcmJpdHJhcnkgaXRlcmF0aW9uIHdpdGhpbiBhIGhhc2gKKyAgLy8gdGFibGUuICBMYXJnZXIgYW5kIG1vcmUgZXhwZW5zaXZlIHRoYW4gbG9jYWwgaXRlcmF0b3JzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIGJvb2wgX19jYWNoZT4KKyAgICB2b2lkCisgICAgX0hhc2h0YWJsZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT46OgorICAgIF9NX2luY3JfYnVja2V0KCkKKyAgICB7CisgICAgICArK19NX2N1cl9idWNrZXQ7CisKKyAgICAgIC8vIFRoaXMgbG9vcCByZXF1aXJlcyB0aGUgYnVja2V0IGFycmF5IHRvIGhhdmUgYSBub24tbnVsbCBzZW50aW5lbC4KKyAgICAgIHdoaWxlICghKl9NX2N1cl9idWNrZXQpCisJKytfTV9jdXJfYnVja2V0OworICAgICAgX01fY3VyX25vZGUgPSAqX01fY3VyX2J1Y2tldDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCBib29sIF9fY2FjaGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9IYXNodGFibGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+JiBfX3gsCisJICAgICAgIGNvbnN0IF9IYXNodGFibGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX2N1cl9ub2RlID09IF9feS5fTV9jdXJfbm9kZTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZSwgYm9vbCBfX2NhY2hlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBfSGFzaHRhYmxlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBfX2NhY2hlPiYgX194LAorCSAgICAgICBjb25zdCBfSGFzaHRhYmxlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBfX2NhY2hlPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5fTV9jdXJfbm9kZSAhPSBfX3kuX01fY3VyX25vZGU7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIGJvb2wgX19jb25zdGFudF9pdGVyYXRvcnMsIGJvb2wgX19jYWNoZT4KKyAgICBzdHJ1Y3QgX0hhc2h0YWJsZV9pdGVyYXRvcgorICAgIDogcHVibGljIF9IYXNodGFibGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+CisgICAgeworICAgICAgdHlwZWRlZiBfVmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lCisgICAgICBfX2dudV9jeHg6Ol9fY29uZGl0aW9uYWxfdHlwZTxfX2NvbnN0YW50X2l0ZXJhdG9ycywKKwkJCQkgICAgY29uc3QgX1ZhbHVlKiwgX1ZhbHVlKj46Ol9fdHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lCisgICAgICBfX2dudV9jeHg6Ol9fY29uZGl0aW9uYWxfdHlwZTxfX2NvbnN0YW50X2l0ZXJhdG9ycywKKwkJCQkgICAgY29uc3QgX1ZhbHVlJiwgX1ZhbHVlJj46Ol9fdHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpwdHJkaWZmX3QgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcgICAgICAgICAgICAgICAgaXRlcmF0b3JfY2F0ZWdvcnk7CisKKyAgICAgIF9IYXNodGFibGVfaXRlcmF0b3IoKQorICAgICAgOiBfSGFzaHRhYmxlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBfX2NhY2hlPigwLCAwKSB7IH0KKworICAgICAgX0hhc2h0YWJsZV9pdGVyYXRvcihfSGFzaF9ub2RlPF9WYWx1ZSwgX19jYWNoZT4qIF9fcCwKKwkJCSAgX0hhc2hfbm9kZTxfVmFsdWUsIF9fY2FjaGU+KiogX19iKQorICAgICAgOiBfSGFzaHRhYmxlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBfX2NhY2hlPihfX3AsIF9fYikgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfSGFzaHRhYmxlX2l0ZXJhdG9yKF9IYXNoX25vZGU8X1ZhbHVlLCBfX2NhY2hlPioqIF9fYikKKyAgICAgIDogX0hhc2h0YWJsZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4oKl9fYiwgX19iKSB7IH0KKworICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01fY3VyX25vZGUtPl9NX3Y7IH0KKyAgCisgICAgICBwb2ludGVyCisgICAgICBvcGVyYXRvci0+KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICZ0aGlzLT5fTV9jdXJfbm9kZS0+X01fdjsgfQorCisgICAgICBfSGFzaHRhYmxlX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7IAorCXRoaXMtPl9NX2luY3IoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisgIAorICAgICAgX0hhc2h0YWJsZV9pdGVyYXRvcgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7IAorCV9IYXNodGFibGVfaXRlcmF0b3IgX190bXAoKnRoaXMpOworCXRoaXMtPl9NX2luY3IoKTsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIGJvb2wgX19jb25zdGFudF9pdGVyYXRvcnMsIGJvb2wgX19jYWNoZT4KKyAgICBzdHJ1Y3QgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcgorICAgIDogcHVibGljIF9IYXNodGFibGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+CisgICAgeworICAgICAgdHlwZWRlZiBfVmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIGNvbnN0IF9WYWx1ZSogICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1ZhbHVlJiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHN0ZDo6cHRyZGlmZl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnICAgICAgICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OworCisgICAgICBfSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yKCkKKyAgICAgIDogX0hhc2h0YWJsZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4oMCwgMCkgeyB9CisKKyAgICAgIF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3IoX0hhc2hfbm9kZTxfVmFsdWUsIF9fY2FjaGU+KiBfX3AsCisJCQkJX0hhc2hfbm9kZTxfVmFsdWUsIF9fY2FjaGU+KiogX19iKQorICAgICAgOiBfSGFzaHRhYmxlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBfX2NhY2hlPihfX3AsIF9fYikgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yKF9IYXNoX25vZGU8X1ZhbHVlLCBfX2NhY2hlPioqIF9fYikKKyAgICAgIDogX0hhc2h0YWJsZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4oKl9fYiwgX19iKSB7IH0KKworICAgICAgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcihjb25zdCBfSGFzaHRhYmxlX2l0ZXJhdG9yPF9WYWx1ZSwKKwkJCQlfX2NvbnN0YW50X2l0ZXJhdG9ycywgX19jYWNoZT4mIF9feCkKKyAgICAgIDogX0hhc2h0YWJsZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4oX194Ll9NX2N1cl9ub2RlLAorCQkJCQkJICBfX3guX01fY3VyX2J1Y2tldCkgeyB9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2N1cl9ub2RlLT5fTV92OyB9CisgIAorICAgICAgcG9pbnRlcgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CisgICAgICB7IHJldHVybiAmdGhpcy0+X01fY3VyX25vZGUtPl9NX3Y7IH0KKworICAgICAgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeyAKKwl0aGlzLT5fTV9pbmNyKCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorICAKKyAgICAgIF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3IKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeyAKKwlfSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yIF9fdG1wKCp0aGlzKTsKKwl0aGlzLT5fTV9pbmNyKCk7CisJcmV0dXJuIF9fdG1wOworICAgICAgfQorICAgIH07CisKKworICAvLyBNYW55IG9mIGNsYXNzIHRlbXBsYXRlIF9IYXNodGFibGUncyB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIGFyZSBwb2xpY3kKKyAgLy8gY2xhc3Nlcy4gIFRoZXNlIGFyZSBkZWZhdWx0cyBmb3IgdGhlIHBvbGljaWVzLgorCisgIC8vIERlZmF1bHQgcmFuZ2UgaGFzaGluZyBmdW5jdGlvbjogdXNlIGRpdmlzaW9uIHRvIGZvbGQgYSBsYXJnZSBudW1iZXIKKyAgLy8gaW50byB0aGUgcmFuZ2UgWzAsIE4pLgorICBzdHJ1Y3QgX01vZF9yYW5nZV9oYXNoaW5nCisgIHsKKyAgICB0eXBlZGVmIHN0ZDo6c2l6ZV90IGZpcnN0X2FyZ3VtZW50X3R5cGU7CisgICAgdHlwZWRlZiBzdGQ6OnNpemVfdCBzZWNvbmRfYXJndW1lbnRfdHlwZTsKKyAgICB0eXBlZGVmIHN0ZDo6c2l6ZV90IHJlc3VsdF90eXBlOworCisgICAgcmVzdWx0X3R5cGUKKyAgICBvcGVyYXRvcigpKGZpcnN0X2FyZ3VtZW50X3R5cGUgX19udW0sIHNlY29uZF9hcmd1bWVudF90eXBlIF9fZGVuKSBjb25zdAorICAgIHsgcmV0dXJuIF9fbnVtICUgX19kZW47IH0KKyAgfTsKKworICAvLyBEZWZhdWx0IHJhbmdlZCBoYXNoIGZ1bmN0aW9uIEguICBJbiBwcmluY2lwbGUgaXQgc2hvdWxkIGJlIGEKKyAgLy8gZnVuY3Rpb24gb2JqZWN0IGNvbXBvc2VkIGZyb20gb2JqZWN0cyBvZiB0eXBlIEgxIGFuZCBIMiBzdWNoIHRoYXQKKyAgLy8gaChrLCBOKSA9IGgyKGgxKGspLCBOKSwgYnV0IHRoYXQgd291bGQgbWVhbiBtYWtpbmcgZXh0cmEgY29waWVzIG9mCisgIC8vIGgxIGFuZCBoMi4gIFNvIGluc3RlYWQgd2UnbGwganVzdCB1c2UgYSB0YWcgdG8gdGVsbCBjbGFzcyB0ZW1wbGF0ZQorICAvLyBoYXNodGFibGUgdG8gZG8gdGhhdCBjb21wb3NpdGlvbi4KKyAgc3RydWN0IF9EZWZhdWx0X3JhbmdlZF9oYXNoIHsgfTsKKworICAvLyBEZWZhdWx0IHZhbHVlIGZvciByZWhhc2ggcG9saWN5LiAgQnVja2V0IHNpemUgaXMgKHVzdWFsbHkpIHRoZQorICAvLyBzbWFsbGVzdCBwcmltZSB0aGF0IGtlZXBzIHRoZSBsb2FkIGZhY3RvciBzbWFsbCBlbm91Z2guCisgIHN0cnVjdCBfUHJpbWVfcmVoYXNoX3BvbGljeQorICB7CisgICAgX1ByaW1lX3JlaGFzaF9wb2xpY3koZmxvYXQgX196ID0gMS4wKQorICAgIDogX01fbWF4X2xvYWRfZmFjdG9yKF9feiksIF9NX2dyb3d0aF9mYWN0b3IoMi5mKSwgX01fbmV4dF9yZXNpemUoMCkgeyB9CisKKyAgICBmbG9hdAorICAgIG1heF9sb2FkX2ZhY3RvcigpIGNvbnN0CisgICAgeyByZXR1cm4gX01fbWF4X2xvYWRfZmFjdG9yOyB9ICAgICAgCisKKyAgICAvLyBSZXR1cm4gYSBidWNrZXQgc2l6ZSBubyBzbWFsbGVyIHRoYW4gbi4KKyAgICBzdGQ6OnNpemVfdAorICAgIF9NX25leHRfYmt0KHN0ZDo6c2l6ZV90IF9fbikgY29uc3Q7CisgICAgCisgICAgLy8gUmV0dXJuIGEgYnVja2V0IGNvdW50IGFwcHJvcHJpYXRlIGZvciBuIGVsZW1lbnRzCisgICAgc3RkOjpzaXplX3QKKyAgICBfTV9ia3RfZm9yX2VsZW1lbnRzKHN0ZDo6c2l6ZV90IF9fbikgY29uc3Q7CisgICAgCisgICAgLy8gX19uX2JrdCBpcyBjdXJyZW50IGJ1Y2tldCBjb3VudCwgX19uX2VsdCBpcyBjdXJyZW50IGVsZW1lbnQgY291bnQsCisgICAgLy8gYW5kIF9fbl9pbnMgaXMgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGJlIGluc2VydGVkLiAgRG8gd2UgbmVlZCB0bworICAgIC8vIGluY3JlYXNlIGJ1Y2tldCBjb3VudD8gIElmIHNvLCByZXR1cm4gbWFrZV9wYWlyKHRydWUsIG4pLCB3aGVyZSBuCisgICAgLy8gaXMgdGhlIG5ldyBidWNrZXQgY291bnQuICBJZiBub3QsIHJldHVybiBtYWtlX3BhaXIoZmFsc2UsIDApLgorICAgIHN0ZDo6cGFpcjxib29sLCBzdGQ6OnNpemVfdD4KKyAgICBfTV9uZWVkX3JlaGFzaChzdGQ6OnNpemVfdCBfX25fYmt0LCBzdGQ6OnNpemVfdCBfX25fZWx0LAorCQkgICBzdGQ6OnNpemVfdCBfX25faW5zKSBjb25zdDsKKworICAgIGVudW0geyBfU19uX3ByaW1lcyA9IHNpemVvZih1bnNpZ25lZCBsb25nKSAhPSA4ID8gMjU2IDogMjU2ICsgNDggfTsKKworICAgIGZsb2F0ICAgICAgICAgICAgICAgIF9NX21heF9sb2FkX2ZhY3RvcjsKKyAgICBmbG9hdCAgICAgICAgICAgICAgICBfTV9ncm93dGhfZmFjdG9yOworICAgIG11dGFibGUgc3RkOjpzaXplX3QgIF9NX25leHRfcmVzaXplOworICB9OworCisgIGV4dGVybiBjb25zdCB1bnNpZ25lZCBsb25nIF9fcHJpbWVfbGlzdFtdOworCisgIC8vIFhYWCBUaGlzIGlzIGEgaGFjay4gIFRoZXJlJ3Mgbm8gZ29vZCByZWFzb24gZm9yIGFueSBvZgorICAvLyBfUHJpbWVfcmVoYXNoX3BvbGljeSdzIG1lbWJlciBmdW5jdGlvbnMgdG8gYmUgaW5saW5lLiAgCisKKyAgLy8gUmV0dXJuIGEgcHJpbWUgbm8gc21hbGxlciB0aGFuIG4uCisgIGlubGluZSBzdGQ6OnNpemVfdAorICBfUHJpbWVfcmVoYXNoX3BvbGljeTo6CisgIF9NX25leHRfYmt0KHN0ZDo6c2l6ZV90IF9fbikgY29uc3QKKyAgeworICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcqIF9fcCA9IHN0ZDo6bG93ZXJfYm91bmQoX19wcmltZV9saXN0LCBfX3ByaW1lX2xpc3QKKwkJCQkJCSsgX1Nfbl9wcmltZXMsIF9fbik7CisgICAgX01fbmV4dF9yZXNpemUgPSAKKyAgICAgIHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PihfX2J1aWx0aW5fY2VpbCgqX19wICogX01fbWF4X2xvYWRfZmFjdG9yKSk7CisgICAgcmV0dXJuICpfX3A7CisgIH0KKworICAvLyBSZXR1cm4gdGhlIHNtYWxsZXN0IHByaW1lIHAgc3VjaCB0aGF0IGFscGhhIHAgPj0gbiwgd2hlcmUgYWxwaGEKKyAgLy8gaXMgdGhlIGxvYWQgZmFjdG9yLgorICBpbmxpbmUgc3RkOjpzaXplX3QKKyAgX1ByaW1lX3JlaGFzaF9wb2xpY3k6OgorICBfTV9ia3RfZm9yX2VsZW1lbnRzKHN0ZDo6c2l6ZV90IF9fbikgY29uc3QKKyAgeworICAgIGNvbnN0IGZsb2F0IF9fbWluX2JrdHMgPSBfX24gLyBfTV9tYXhfbG9hZF9mYWN0b3I7CisgICAgY29uc3QgdW5zaWduZWQgbG9uZyogX19wID0gc3RkOjpsb3dlcl9ib3VuZChfX3ByaW1lX2xpc3QsIF9fcHJpbWVfbGlzdAorCQkJCQkJKyBfU19uX3ByaW1lcywgX19taW5fYmt0cyk7CisgICAgX01fbmV4dF9yZXNpemUgPQorICAgICAgc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KF9fYnVpbHRpbl9jZWlsKCpfX3AgKiBfTV9tYXhfbG9hZF9mYWN0b3IpKTsKKyAgICByZXR1cm4gKl9fcDsKKyAgfQorCisgIC8vIEZpbmRzIHRoZSBzbWFsbGVzdCBwcmltZSBwIHN1Y2ggdGhhdCBhbHBoYSBwID4gX19uX2VsdCArIF9fbl9pbnMuCisgIC8vIElmIHAgPiBfX25fYmt0LCByZXR1cm4gbWFrZV9wYWlyKHRydWUsIHApOyBvdGhlcndpc2UgcmV0dXJuCisgIC8vIG1ha2VfcGFpcihmYWxzZSwgMCkuICBJbiBwcmluY2lwbGUgdGhpcyBpc24ndCB2ZXJ5IGRpZmZlcmVudCBmcm9tIAorICAvLyBfTV9ia3RfZm9yX2VsZW1lbnRzLgorCisgIC8vIFRoZSBvbmx5IHRyaWNreSBwYXJ0IGlzIHRoYXQgd2UncmUgY2FjaGluZyB0aGUgZWxlbWVudCBjb3VudCBhdAorICAvLyB3aGljaCB3ZSBuZWVkIHRvIHJlaGFzaCwgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyBhIGZsb2F0aW5nLXBvaW50CisgIC8vIG11bHRpcGx5IGZvciBldmVyeSBpbnNlcnRpb24uCisKKyAgaW5saW5lIHN0ZDo6cGFpcjxib29sLCBzdGQ6OnNpemVfdD4KKyAgX1ByaW1lX3JlaGFzaF9wb2xpY3k6OgorICBfTV9uZWVkX3JlaGFzaChzdGQ6OnNpemVfdCBfX25fYmt0LCBzdGQ6OnNpemVfdCBfX25fZWx0LAorCQkgc3RkOjpzaXplX3QgX19uX2lucykgY29uc3QKKyAgeworICAgIGlmIChfX25fZWx0ICsgX19uX2lucyA+IF9NX25leHRfcmVzaXplKQorICAgICAgeworCWZsb2F0IF9fbWluX2JrdHMgPSAoKGZsb2F0KF9fbl9pbnMpICsgZmxvYXQoX19uX2VsdCkpCisJCQkgICAgLyBfTV9tYXhfbG9hZF9mYWN0b3IpOworCWlmIChfX21pbl9ia3RzID4gX19uX2JrdCkKKwkgIHsKKwkgICAgX19taW5fYmt0cyA9IHN0ZDo6bWF4KF9fbWluX2JrdHMsIF9NX2dyb3d0aF9mYWN0b3IgKiBfX25fYmt0KTsKKwkgICAgY29uc3QgdW5zaWduZWQgbG9uZyogX19wID0KKwkgICAgICBzdGQ6Omxvd2VyX2JvdW5kKF9fcHJpbWVfbGlzdCwgX19wcmltZV9saXN0ICsgX1Nfbl9wcmltZXMsCisJCQkgICAgICAgX19taW5fYmt0cyk7CisJICAgIF9NX25leHRfcmVzaXplID0gc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+CisJICAgICAgKF9fYnVpbHRpbl9jZWlsKCpfX3AgKiBfTV9tYXhfbG9hZF9mYWN0b3IpKTsKKwkgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHRydWUsICpfX3ApOworCSAgfQorCWVsc2UgCisJICB7CisJICAgIF9NX25leHRfcmVzaXplID0gc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+CisJICAgICAgKF9fYnVpbHRpbl9jZWlsKF9fbl9ia3QgKiBfTV9tYXhfbG9hZF9mYWN0b3IpKTsKKwkgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGZhbHNlLCAwKTsKKwkgIH0KKyAgICAgIH0KKyAgICBlbHNlCisgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZmFsc2UsIDApOworICB9CisKKyAgLy8gQmFzZSBjbGFzc2VzIGZvciBzdGQ6OnRyMTo6X0hhc2h0YWJsZS4gIFdlIGRlZmluZSB0aGVzZSBiYXNlCisgIC8vIGNsYXNzZXMgYmVjYXVzZSBpbiBzb21lIGNhc2VzIHdlIHdhbnQgdG8gZG8gZGlmZmVyZW50IHRoaW5ncworICAvLyBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIGEgcG9saWN5IGNsYXNzLiAgSW4gc29tZSBjYXNlcyB0aGUKKyAgLy8gcG9saWN5IGNsYXNzIGFmZmVjdHMgd2hpY2ggbWVtYmVyIGZ1bmN0aW9ucyBhbmQgbmVzdGVkIHR5cGVkZWZzCisgIC8vIGFyZSBkZWZpbmVkOyB3ZSBoYW5kbGUgdGhhdCBieSBzcGVjaWFsaXppbmcgYmFzZSBjbGFzcyB0ZW1wbGF0ZXMuCisgIC8vIFNldmVyYWwgb2YgdGhlIGJhc2UgY2xhc3MgdGVtcGxhdGVzIG5lZWQgdG8gYWNjZXNzIG90aGVyIG1lbWJlcnMKKyAgLy8gb2YgY2xhc3MgdGVtcGxhdGUgX0hhc2h0YWJsZSwgc28gd2UgdXNlIHRoZSAiY3VyaW91c2x5IHJlY3VycmluZworICAvLyB0ZW1wbGF0ZSBwYXR0ZXJuIiBmb3IgdGhlbS4KKworICAvLyBjbGFzcyB0ZW1wbGF0ZSBfTWFwX2Jhc2UuICBJZiB0aGUgaGFzaHRhYmxlIGhhcyBhIHZhbHVlIHR5cGUgb2YgdGhlCisgIC8vIGZvcm0gcGFpcjxUMSwgVDI+IGFuZCBhIGtleSBleHRyYWN0aW9uIHBvbGljeSB0aGF0IHJldHVybnMgdGhlCisgIC8vIGZpcnN0IHBhcnQgb2YgdGhlIHBhaXIsIHRoZSBoYXNodGFibGUgZ2V0cyBhIG1hcHBlZF90eXBlIHR5cGVkZWYuCisgIC8vIElmIGl0IHNhdGlzZmllcyB0aG9zZSBjcml0ZXJpYSBhbmQgYWxzbyBoYXMgdW5pcXVlIGtleXMsIHRoZW4gaXQKKyAgLy8gYWxzbyBnZXRzIGFuIG9wZXJhdG9yW10uICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCB0eXBlbmFtZSBfRXgsIGJvb2wgX191bmlxdWUsCisJICAgdHlwZW5hbWUgX0hhc2h0YWJsZT4KKyAgICBzdHJ1Y3QgX01hcF9iYXNlIHsgfTsKKwkgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfUGFpciwgdHlwZW5hbWUgX0hhc2h0YWJsZT4KKyAgICBzdHJ1Y3QgX01hcF9iYXNlPF9LZXksIF9QYWlyLCBzdGQ6Ol9TZWxlY3Qxc3Q8X1BhaXI+LCBmYWxzZSwgX0hhc2h0YWJsZT4KKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSBtYXBwZWRfdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9QYWlyLCB0eXBlbmFtZSBfSGFzaHRhYmxlPgorICAgIHN0cnVjdCBfTWFwX2Jhc2U8X0tleSwgX1BhaXIsIHN0ZDo6X1NlbGVjdDFzdDxfUGFpcj4sIHRydWUsIF9IYXNodGFibGU+CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUgbWFwcGVkX3R5cGU7CisgICAgICAKKyAgICAgIG1hcHBlZF90eXBlJgorICAgICAgb3BlcmF0b3JbXShjb25zdCBfS2V5JiBfX2spOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1BhaXIsIHR5cGVuYW1lIF9IYXNodGFibGU+CisgICAgdHlwZW5hbWUgX01hcF9iYXNlPF9LZXksIF9QYWlyLCBzdGQ6Ol9TZWxlY3Qxc3Q8X1BhaXI+LAorCQkgICAgICAgdHJ1ZSwgX0hhc2h0YWJsZT46Om1hcHBlZF90eXBlJgorICAgIF9NYXBfYmFzZTxfS2V5LCBfUGFpciwgc3RkOjpfU2VsZWN0MXN0PF9QYWlyPiwgdHJ1ZSwgX0hhc2h0YWJsZT46OgorICAgIG9wZXJhdG9yW10oY29uc3QgX0tleSYgX19rKQorICAgIHsKKyAgICAgIF9IYXNodGFibGUqIF9faCA9IHN0YXRpY19jYXN0PF9IYXNodGFibGUqPih0aGlzKTsKKyAgICAgIHR5cGVuYW1lIF9IYXNodGFibGU6Ol9IYXNoX2NvZGVfdHlwZSBfX2NvZGUgPSBfX2gtPl9NX2hhc2hfY29kZShfX2spOworICAgICAgc3RkOjpzaXplX3QgX19uID0gX19oLT5fTV9idWNrZXRfaW5kZXgoX19rLCBfX2NvZGUsCisJCQkJCSAgICAgX19oLT5fTV9idWNrZXRfY291bnQpOworCisgICAgICB0eXBlbmFtZSBfSGFzaHRhYmxlOjpfTm9kZSogX19wID0KKwlfX2gtPl9NX2ZpbmRfbm9kZShfX2gtPl9NX2J1Y2tldHNbX19uXSwgX19rLCBfX2NvZGUpOworICAgICAgaWYgKCFfX3ApCisJcmV0dXJuIF9faC0+X01faW5zZXJ0X2J1Y2tldChzdGQ6Om1ha2VfcGFpcihfX2ssIG1hcHBlZF90eXBlKCkpLAorCQkJCSAgICAgX19uLCBfX2NvZGUpLT5zZWNvbmQ7CisgICAgICByZXR1cm4gKF9fcC0+X01fdikuc2Vjb25kOworICAgIH0KKworICAvLyBjbGFzcyB0ZW1wbGF0ZSBfUmVoYXNoX2Jhc2UuICBHaXZlIGhhc2h0YWJsZSB0aGUgbWF4X2xvYWRfZmFjdG9yCisgIC8vIGZ1bmN0aW9ucyBpZmYgdGhlIHJlaGFzaCBwb2xpY3kgaXMgX1ByaW1lX3JlaGFzaF9wb2xpY3kuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksIHR5cGVuYW1lIF9IYXNodGFibGU+CisgICAgc3RydWN0IF9SZWhhc2hfYmFzZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0hhc2h0YWJsZT4KKyAgICBzdHJ1Y3QgX1JlaGFzaF9iYXNlPF9QcmltZV9yZWhhc2hfcG9saWN5LCBfSGFzaHRhYmxlPgorICAgIHsKKyAgICAgIGZsb2F0CisgICAgICBtYXhfbG9hZF9mYWN0b3IoKSBjb25zdAorICAgICAgeworCWNvbnN0IF9IYXNodGFibGUqIF9fdGhpcyA9IHN0YXRpY19jYXN0PGNvbnN0IF9IYXNodGFibGUqPih0aGlzKTsKKwlyZXR1cm4gX190aGlzLT5fX3JlaGFzaF9wb2xpY3koKS5tYXhfbG9hZF9mYWN0b3IoKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgbWF4X2xvYWRfZmFjdG9yKGZsb2F0IF9feikKKyAgICAgIHsKKwlfSGFzaHRhYmxlKiBfX3RoaXMgPSBzdGF0aWNfY2FzdDxfSGFzaHRhYmxlKj4odGhpcyk7CisJX190aGlzLT5fX3JlaGFzaF9wb2xpY3koX1ByaW1lX3JlaGFzaF9wb2xpY3koX196KSk7CisgICAgICB9CisgICAgfTsKKworICAvLyBDbGFzcyB0ZW1wbGF0ZSBfSGFzaF9jb2RlX2Jhc2UuICBFbmNhcHN1bGF0ZXMgdHdvIHBvbGljeSBpc3N1ZXMgdGhhdAorICAvLyBhcmVuJ3QgcXVpdGUgb3J0aG9nb25hbC4KKyAgLy8gICAoMSkgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB1c2luZyBhIHJhbmdlZCBoYXNoIGZ1bmN0aW9uIGFuZCB1c2luZworICAvLyAgICAgICB0aGUgY29tYmluYXRpb24gb2YgYSBoYXNoIGZ1bmN0aW9uIGFuZCBhIHJhbmdlLWhhc2hpbmcgZnVuY3Rpb24uCisgIC8vICAgICAgIEluIHRoZSBmb3JtZXIgY2FzZSB3ZSBkb24ndCBoYXZlIHN1Y2ggdGhpbmdzIGFzIGhhc2ggY29kZXMsIHNvCisgIC8vICAgICAgIHdlIGhhdmUgYSBkdW1teSB0eXBlIGFzIHBsYWNlaG9sZGVyLgorICAvLyAgICgyKSBXaGV0aGVyIG9yIG5vdCB3ZSBjYWNoZSBoYXNoIGNvZGVzLiAgQ2FjaGluZyBoYXNoIGNvZGVzIGlzCisgIC8vICAgICAgIG1lYW5pbmdsZXNzIGlmIHdlIGhhdmUgYSByYW5nZWQgaGFzaCBmdW5jdGlvbi4KKyAgLy8gV2UgYWxzbyBwdXQgdGhlIGtleSBleHRyYWN0aW9uIGFuZCBlcXVhbGl0eSBjb21wYXJpc29uIGZ1bmN0aW9uIAorICAvLyBvYmplY3RzIGhlcmUsIGZvciBjb252ZW5pZW5jZS4KKyAgCisgIC8vIFByaW1hcnkgdGVtcGxhdGU6IHVudXNlZCBleGNlcHQgYXMgYSBob29rIGZvciBzcGVjaWFsaXphdGlvbnMuICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLAorCSAgIGJvb2wgX19jYWNoZV9oYXNoX2NvZGU+CisgICAgc3RydWN0IF9IYXNoX2NvZGVfYmFzZTsKKworICAvLyBTcGVjaWFsaXphdGlvbjogcmFuZ2VkIGhhc2ggZnVuY3Rpb24sIG5vIGNhY2hpbmcgaGFzaCBjb2Rlcy4gIEgxCisgIC8vIGFuZCBIMiBhcmUgcHJvdmlkZWQgYnV0IGlnbm9yZWQuICBXZSBkZWZpbmUgYSBkdW1teSBoYXNoIGNvZGUgdHlwZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoPgorICAgIHN0cnVjdCBfSGFzaF9jb2RlX2Jhc2U8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwgX0VxdWFsLCBfSDEsIF9IMiwKKwkJCSAgIF9IYXNoLCBmYWxzZT4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgX0hhc2hfY29kZV9iYXNlKGNvbnN0IF9FeHRyYWN0S2V5JiBfX2V4LCBjb25zdCBfRXF1YWwmIF9fZXEsCisJCSAgICAgIGNvbnN0IF9IMSYsIGNvbnN0IF9IMiYsIGNvbnN0IF9IYXNoJiBfX2gpCisgICAgICA6IF9NX2V4dHJhY3QoX19leCksIF9NX2VxKF9fZXEpLCBfTV9yYW5nZWRfaGFzaChfX2gpIHsgfQorCisgICAgICB0eXBlZGVmIHZvaWQqIF9IYXNoX2NvZGVfdHlwZTsKKyAgCisgICAgICBfSGFzaF9jb2RlX3R5cGUKKyAgICAgIF9NX2hhc2hfY29kZShjb25zdCBfS2V5JiBfX2tleSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIDA7IH0KKyAgCisgICAgICBzdGQ6OnNpemVfdAorICAgICAgX01fYnVja2V0X2luZGV4KGNvbnN0IF9LZXkmIF9faywgX0hhc2hfY29kZV90eXBlLAorCQkgICAgICBzdGQ6OnNpemVfdCBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9yYW5nZWRfaGFzaChfX2ssIF9fbik7IH0KKworICAgICAgc3RkOjpzaXplX3QKKyAgICAgIF9NX2J1Y2tldF9pbmRleChjb25zdCBfSGFzaF9ub2RlPF9WYWx1ZSwgZmFsc2U+KiBfX3AsCisJCSAgICAgIHN0ZDo6c2l6ZV90IF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3JhbmdlZF9oYXNoKF9NX2V4dHJhY3QoX19wLT5fTV92KSwgX19uKTsgfQorICAKKyAgICAgIGJvb2wKKyAgICAgIF9NX2NvbXBhcmUoY29uc3QgX0tleSYgX19rLCBfSGFzaF9jb2RlX3R5cGUsCisJCSBfSGFzaF9ub2RlPF9WYWx1ZSwgZmFsc2U+KiBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9lcShfX2ssIF9NX2V4dHJhY3QoX19uLT5fTV92KSk7IH0KKworICAgICAgdm9pZAorICAgICAgX01fc3RvcmVfY29kZShfSGFzaF9ub2RlPF9WYWx1ZSwgZmFsc2U+KiwgX0hhc2hfY29kZV90eXBlKSBjb25zdAorICAgICAgeyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2NvcHlfY29kZShfSGFzaF9ub2RlPF9WYWx1ZSwgZmFsc2U+KiwKKwkJICAgY29uc3QgX0hhc2hfbm9kZTxfVmFsdWUsIGZhbHNlPiopIGNvbnN0CisgICAgICB7IH0KKyAgICAgIAorICAgICAgdm9pZAorICAgICAgX01fc3dhcChfSGFzaF9jb2RlX2Jhc2UmIF9feCkKKyAgICAgIHsKKwlzdGQ6OnN3YXAoX01fZXh0cmFjdCwgX194Ll9NX2V4dHJhY3QpOworCXN0ZDo6c3dhcChfTV9lcSwgX194Ll9NX2VxKTsKKwlzdGQ6OnN3YXAoX01fcmFuZ2VkX2hhc2gsIF9feC5fTV9yYW5nZWRfaGFzaCk7CisgICAgICB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfRXh0cmFjdEtleSAgX01fZXh0cmFjdDsKKyAgICAgIF9FcXVhbCAgICAgICBfTV9lcTsKKyAgICAgIF9IYXNoICAgICAgICBfTV9yYW5nZWRfaGFzaDsKKyAgICB9OworCisKKyAgLy8gTm8gc3BlY2lhbGl6YXRpb24gZm9yIHJhbmdlZCBoYXNoIGZ1bmN0aW9uIHdoaWxlIGNhY2hpbmcgaGFzaCBjb2Rlcy4KKyAgLy8gVGhhdCBjb21iaW5hdGlvbiBpcyBtZWFuaW5nbGVzcywgYW5kIHRyeWluZyB0byBkbyBpdCBpcyBhbiBlcnJvci4KKyAgCisgIAorICAvLyBTcGVjaWFsaXphdGlvbjogcmFuZ2VkIGhhc2ggZnVuY3Rpb24sIGNhY2hlIGhhc2ggY29kZXMuICBUaGlzCisgIC8vIGNvbWJpbmF0aW9uIGlzIG1lYW5pbmdsZXNzLCBzbyB3ZSBwcm92aWRlIG9ubHkgYSBkZWNsYXJhdGlvbgorICAvLyBhbmQgbm8gZGVmaW5pdGlvbi4gIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2g+CisgICAgc3RydWN0IF9IYXNoX2NvZGVfYmFzZTxfS2V5LCBfVmFsdWUsIF9FeHRyYWN0S2V5LCBfRXF1YWwsIF9IMSwgX0gyLAorCQkJICAgX0hhc2gsIHRydWU+OworCisgIC8vIFNwZWNpYWxpemF0aW9uOiBoYXNoIGZ1bmN0aW9uIGFuZCByYW5nZS1oYXNoaW5nIGZ1bmN0aW9uLCBubworICAvLyBjYWNoaW5nIG9mIGhhc2ggY29kZXMuICBIIGlzIHByb3ZpZGVkIGJ1dCBpZ25vcmVkLiAgUHJvdmlkZXMKKyAgLy8gdHlwZWRlZiBhbmQgYWNjZXNzb3IgcmVxdWlyZWQgYnkgVFIxLiAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyPgorICAgIHN0cnVjdCBfSGFzaF9jb2RlX2Jhc2U8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwgX0VxdWFsLCBfSDEsIF9IMiwKKwkJCSAgIF9EZWZhdWx0X3JhbmdlZF9oYXNoLCBmYWxzZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9IMSBoYXNoZXI7CisKKyAgICAgIGhhc2hlcgorICAgICAgaGFzaF9mdW5jdGlvbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oMTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgX0hhc2hfY29kZV9iYXNlKGNvbnN0IF9FeHRyYWN0S2V5JiBfX2V4LCBjb25zdCBfRXF1YWwmIF9fZXEsCisJCSAgICAgIGNvbnN0IF9IMSYgX19oMSwgY29uc3QgX0gyJiBfX2gyLAorCQkgICAgICBjb25zdCBfRGVmYXVsdF9yYW5nZWRfaGFzaCYpCisgICAgICA6IF9NX2V4dHJhY3QoX19leCksIF9NX2VxKF9fZXEpLCBfTV9oMShfX2gxKSwgX01faDIoX19oMikgeyB9CisKKyAgICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgX0hhc2hfY29kZV90eXBlOworCisgICAgICBfSGFzaF9jb2RlX3R5cGUKKyAgICAgIF9NX2hhc2hfY29kZShjb25zdCBfS2V5JiBfX2spIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oMShfX2spOyB9CisgICAgICAKKyAgICAgIHN0ZDo6c2l6ZV90CisgICAgICBfTV9idWNrZXRfaW5kZXgoY29uc3QgX0tleSYsIF9IYXNoX2NvZGVfdHlwZSBfX2MsCisJCSAgICAgIHN0ZDo6c2l6ZV90IF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2gyKF9fYywgX19uKTsgfQorCisgICAgICBzdGQ6OnNpemVfdAorICAgICAgX01fYnVja2V0X2luZGV4KGNvbnN0IF9IYXNoX25vZGU8X1ZhbHVlLCBmYWxzZT4qIF9fcCwKKwkJICAgICAgc3RkOjpzaXplX3QgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faDIoX01faDEoX01fZXh0cmFjdChfX3AtPl9NX3YpKSwgX19uKTsgfQorCisgICAgICBib29sCisgICAgICBfTV9jb21wYXJlKGNvbnN0IF9LZXkmIF9faywgX0hhc2hfY29kZV90eXBlLAorCQkgX0hhc2hfbm9kZTxfVmFsdWUsIGZhbHNlPiogX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZXEoX19rLCBfTV9leHRyYWN0KF9fbi0+X01fdikpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3N0b3JlX2NvZGUoX0hhc2hfbm9kZTxfVmFsdWUsIGZhbHNlPiosIF9IYXNoX2NvZGVfdHlwZSkgY29uc3QKKyAgICAgIHsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9jb3B5X2NvZGUoX0hhc2hfbm9kZTxfVmFsdWUsIGZhbHNlPiosCisJCSAgIGNvbnN0IF9IYXNoX25vZGU8X1ZhbHVlLCBmYWxzZT4qKSBjb25zdAorICAgICAgeyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3N3YXAoX0hhc2hfY29kZV9iYXNlJiBfX3gpCisgICAgICB7CisJc3RkOjpzd2FwKF9NX2V4dHJhY3QsIF9feC5fTV9leHRyYWN0KTsKKwlzdGQ6OnN3YXAoX01fZXEsIF9feC5fTV9lcSk7CisJc3RkOjpzd2FwKF9NX2gxLCBfX3guX01faDEpOworCXN0ZDo6c3dhcChfTV9oMiwgX194Ll9NX2gyKTsKKyAgICAgIH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIF9FeHRyYWN0S2V5ICBfTV9leHRyYWN0OworICAgICAgX0VxdWFsICAgICAgIF9NX2VxOworICAgICAgX0gxICAgICAgICAgIF9NX2gxOworICAgICAgX0gyICAgICAgICAgIF9NX2gyOworICAgIH07CisKKyAgLy8gU3BlY2lhbGl6YXRpb246IGhhc2ggZnVuY3Rpb24gYW5kIHJhbmdlLWhhc2hpbmcgZnVuY3Rpb24sIAorICAvLyBjYWNoaW5nIGhhc2ggY29kZXMuICBIIGlzIHByb3ZpZGVkIGJ1dCBpZ25vcmVkLiAgUHJvdmlkZXMKKyAgLy8gdHlwZWRlZiBhbmQgYWNjZXNzb3IgcmVxdWlyZWQgYnkgVFIxLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMj4KKyAgICBzdHJ1Y3QgX0hhc2hfY29kZV9iYXNlPF9LZXksIF9WYWx1ZSwgX0V4dHJhY3RLZXksIF9FcXVhbCwgX0gxLCBfSDIsCisJCQkgICBfRGVmYXVsdF9yYW5nZWRfaGFzaCwgdHJ1ZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9IMSBoYXNoZXI7CisgICAgICAKKyAgICAgIGhhc2hlcgorICAgICAgaGFzaF9mdW5jdGlvbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oMTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgX0hhc2hfY29kZV9iYXNlKGNvbnN0IF9FeHRyYWN0S2V5JiBfX2V4LCBjb25zdCBfRXF1YWwmIF9fZXEsCisJCSAgICAgIGNvbnN0IF9IMSYgX19oMSwgY29uc3QgX0gyJiBfX2gyLAorCQkgICAgICBjb25zdCBfRGVmYXVsdF9yYW5nZWRfaGFzaCYpCisgICAgICA6IF9NX2V4dHJhY3QoX19leCksIF9NX2VxKF9fZXEpLCBfTV9oMShfX2gxKSwgX01faDIoX19oMikgeyB9CisKKyAgICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgX0hhc2hfY29kZV90eXBlOworICAKKyAgICAgIF9IYXNoX2NvZGVfdHlwZQorICAgICAgX01faGFzaF9jb2RlKGNvbnN0IF9LZXkmIF9faykgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2gxKF9fayk7IH0KKyAgCisgICAgICBzdGQ6OnNpemVfdAorICAgICAgX01fYnVja2V0X2luZGV4KGNvbnN0IF9LZXkmLCBfSGFzaF9jb2RlX3R5cGUgX19jLAorCQkgICAgICBzdGQ6OnNpemVfdCBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oMihfX2MsIF9fbik7IH0KKworICAgICAgc3RkOjpzaXplX3QKKyAgICAgIF9NX2J1Y2tldF9pbmRleChjb25zdCBfSGFzaF9ub2RlPF9WYWx1ZSwgdHJ1ZT4qIF9fcCwKKwkJICAgICAgc3RkOjpzaXplX3QgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faDIoX19wLT5fTV9oYXNoX2NvZGUsIF9fbik7IH0KKworICAgICAgYm9vbAorICAgICAgX01fY29tcGFyZShjb25zdCBfS2V5JiBfX2ssIF9IYXNoX2NvZGVfdHlwZSBfX2MsCisJCSBfSGFzaF9ub2RlPF9WYWx1ZSwgdHJ1ZT4qIF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fYyA9PSBfX24tPl9NX2hhc2hfY29kZSAmJiBfTV9lcShfX2ssIF9NX2V4dHJhY3QoX19uLT5fTV92KSk7IH0KKworICAgICAgdm9pZAorICAgICAgX01fc3RvcmVfY29kZShfSGFzaF9ub2RlPF9WYWx1ZSwgdHJ1ZT4qIF9fbiwgX0hhc2hfY29kZV90eXBlIF9fYykgY29uc3QKKyAgICAgIHsgX19uLT5fTV9oYXNoX2NvZGUgPSBfX2M7IH0KKworICAgICAgdm9pZAorICAgICAgX01fY29weV9jb2RlKF9IYXNoX25vZGU8X1ZhbHVlLCB0cnVlPiogX190bywKKwkJICAgY29uc3QgX0hhc2hfbm9kZTxfVmFsdWUsIHRydWU+KiBfX2Zyb20pIGNvbnN0CisgICAgICB7IF9fdG8tPl9NX2hhc2hfY29kZSA9IF9fZnJvbS0+X01faGFzaF9jb2RlOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3N3YXAoX0hhc2hfY29kZV9iYXNlJiBfX3gpCisgICAgICB7CisJc3RkOjpzd2FwKF9NX2V4dHJhY3QsIF9feC5fTV9leHRyYWN0KTsKKwlzdGQ6OnN3YXAoX01fZXEsIF9feC5fTV9lcSk7CisJc3RkOjpzd2FwKF9NX2gxLCBfX3guX01faDEpOworCXN0ZDo6c3dhcChfTV9oMiwgX194Ll9NX2gyKTsKKyAgICAgIH0KKyAgICAgIAorICAgIHByb3RlY3RlZDoKKyAgICAgIF9FeHRyYWN0S2V5ICBfTV9leHRyYWN0OworICAgICAgX0VxdWFsICAgICAgIF9NX2VxOworICAgICAgX0gxICAgICAgICAgIF9NX2gxOworICAgICAgX0gyICAgICAgICAgIF9NX2gyOworICAgIH07Cit9IC8vIG5hbWVzcGFjZSBfX2RldGFpbAorfQorfQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvaHlwZXJnZW9tZXRyaWMudGNjIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvaHlwZXJnZW9tZXRyaWMudGNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1M2ZiOGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9oeXBlcmdlb21ldHJpYy50Y2MKQEAgLTAsMCArMSw3NzggQEAKKy8vIFNwZWNpYWwgZnVuY3Rpb25zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLy8KKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvaHlwZXJnZW9tZXRyaWMudGNjCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyIFRSMTogNS4yICBTcGVjaWFsIGZ1bmN0aW9ucworLy8KKworLy8gV3JpdHRlbiBieSBFZHdhcmQgU21pdGgtUm93bGFuZCBiYXNlZDoKKy8vICAgKDEpIEhhbmRib29rIG9mIE1hdGhlbWF0aWNhbCBGdW5jdGlvbnMsCisvLyAgICAgICBlZC4gTWlsdG9uIEFicmFtb3dpdHogYW5kIElyZW5lIEEuIFN0ZWd1biwKKy8vICAgICAgIERvdmVyIFB1YmxpY2F0aW9ucywKKy8vICAgICAgIFNlY3Rpb24gNiwgcHAuIDU1NS01NjYKKy8vICAgKDIpIFRoZSBHbnUgU2NpZW50aWZpYyBMaWJyYXJ5LCBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ3NsCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX0hZUEVSR0VPTUVUUklDX1RDQworI2RlZmluZSBfR0xJQkNYWF9UUjFfSFlQRVJHRU9NRVRSSUNfVENDIDEKKworbmFtZXNwYWNlIHN0ZAoreworbmFtZXNwYWNlIHRyMQoreworCisgIC8vIFs1LjJdIFNwZWNpYWwgZnVuY3Rpb25zCisKKyAgLy8gSW1wbGVtZW50YXRpb24tc3BhY2UgZGV0YWlscy4KKyAgbmFtZXNwYWNlIF9fZGV0YWlsCisgIHsKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmIFRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBjb25mbHVlbnQgaHlwZXJnZW9tZXRyaWMgZnVuY3Rpb24KKyAgICAgKiAgICAgICAgICBieSBzZXJpZXMgZXhwYW5zaW9uLgorICAgICAqIAorICAgICAqICAgQGZbCisgICAgICogICAgIF8xRl8xKGE7Yzt4KSA9IFxmcmFje1xHYW1tYShjKX17XEdhbW1hKGEpfQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIFxzdW1fe249MH1ee1xpbmZ0eX0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBcZnJhY3tcR2FtbWEoYStuKX17XEdhbW1hKGMrbil9CisgICAgICogICAgICAgICAgICAgICAgICAgICAgXGZyYWN7eF5ufXtuIX0KKyAgICAgKiAgIEBmXQorICAgICAqIAorICAgICAqICAgSWYgYSBhbmQgYiBhcmUgaW50ZWdlcnMgYW5kIGEgPCAwIGFuZCBlaXRoZXIgYiA+IDAgb3IgYiA8IGEKKyAgICAgKiAgIHRoZW4gdGhlIHNlcmllcyBpcyBhIHBvbHlub21pYWwgd2l0aCBhIGZpbml0ZSBudW1iZXIgb2YKKyAgICAgKiAgIHRlcm1zLiAgSWYgYiBpcyBhbiBpbnRlZ2VyIGFuZCBiIDw9IDAgdGhlIGNvbmZsdWVudAorICAgICAqICAgaHlwZXJnZW9tZXRyaWMgZnVuY3Rpb24gaXMgdW5kZWZpbmVkLgorICAgICAqCisgICAgICogICBAcGFyYW0gIF9fYSAgVGhlICJudW1lcmF0b3IiIHBhcmFtZXRlci4KKyAgICAgKiAgIEBwYXJhbSAgX19jICBUaGUgImRlbm9taW5hdG9yIiBwYXJhbWV0ZXIuCisgICAgICogICBAcGFyYW0gIF9feCAgVGhlIGFyZ3VtZW50IG9mIHRoZSBjb25mbHVlbnQgaHlwZXJnZW9tZXRyaWMgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgY29uZmx1ZW50IGh5cGVyZ2VvbWV0cmljIGZ1bmN0aW9uLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2NvbmZfaHlwZXJnX3Nlcmllcyhjb25zdCBfVHAgX19hLCBjb25zdCBfVHAgX19jLCBjb25zdCBfVHAgX194KQorICAgIHsKKyAgICAgIGNvbnN0IF9UcCBfX2VwcyA9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6ZXBzaWxvbigpOworCisgICAgICBfVHAgX190ZXJtID0gX1RwKDEpOworICAgICAgX1RwIF9fRmFjID0gX1RwKDEpOworICAgICAgY29uc3QgdW5zaWduZWQgaW50IF9fbWF4X2l0ZXIgPSAxMDAwMDA7CisgICAgICB1bnNpZ25lZCBpbnQgX19pOworICAgICAgZm9yIChfX2kgPSAwOyBfX2kgPCBfX21heF9pdGVyOyArK19faSkKKyAgICAgICAgeworICAgICAgICAgIF9fdGVybSAqPSAoX19hICsgX1RwKF9faSkpICogX194CisgICAgICAgICAgICAgICAgICAvICgoX19jICsgX1RwKF9faSkpICogX1RwKDEgKyBfX2kpKTsKKyAgICAgICAgICBpZiAoc3RkOjphYnMoX190ZXJtKSA8IF9fZXBzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBfX0ZhYyArPSBfX3Rlcm07CisgICAgICAgIH0KKyAgICAgIGlmIChfX2kgPT0gX19tYXhfaXRlcikKKyAgICAgICAgc3RkOjpfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJTZXJpZXMgZmFpbGVkIHRvIGNvbnZlcmdlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBfX2NvbmZfaHlwZXJnX3Nlcmllcy4iKSk7CisKKyAgICAgIHJldHVybiBfX0ZhYzsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqICBAYnJpZWYgIFJldHVybiB0aGUgaHlwb2dlb21ldHJpYyBmdW5jdGlvbiBAZiQgXzJGXzEoYSxiO2M7eCkgQGYkCisgICAgICogICAgICAgICAgYnkgYW4gaXRlcmF0aXZlIHByb2NlZHVyZSBkZXNjcmliZWQgaW4KKyAgICAgKiAgICAgICAgICBMdWtlLCBBbGdvcml0aG1zIGZvciB0aGUgQ29tcHV0YXRpb24gb2YgTWF0aGVtYXRpY2FsIEZ1bmN0aW9ucy4KKyAgICAgKgorICAgICAqICBMaWtlIHRoZSBjYXNlIG9mIHRoZSAyRjEgcmF0aW9uYWwgYXBwcm94aW1hdGlvbnMsIHRoZXNlIGFyZSAKKyAgICAgKiAgcHJvYmFibHkgZ3VhcmFudGVlZCB0byBjb252ZXJnZSBmb3IgeCA8IDAsIGJhcnJpbmcgZ3Jvc3MgICAgCisgICAgICogIG51bWVyaWNhbCBpbnN0YWJpbGl0eSBpbiB0aGUgcHJlLWFzeW1wdG90aWMgcmVnaW1lLiAgICAgICAgIAorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2NvbmZfaHlwZXJnX2x1a2UoY29uc3QgX1RwIF9fYSwgY29uc3QgX1RwIF9fYywgY29uc3QgX1RwIF9feGluKQorICAgIHsKKyAgICAgIGNvbnN0IF9UcCBfX2JpZyA9IHN0ZDo6cG93KHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6bWF4KCksIF9UcCgwLjE2TCkpOworICAgICAgY29uc3QgaW50IF9fbm1heCA9IDIwMDAwOworICAgICAgY29uc3QgX1RwIF9fZXBzID0gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjplcHNpbG9uKCk7CisgICAgICBjb25zdCBfVHAgX194ICA9IC1fX3hpbjsKKyAgICAgIGNvbnN0IF9UcCBfX3gzID0gX194ICogX194ICogX194OworICAgICAgY29uc3QgX1RwIF9fdDAgPSBfX2EgLyBfX2M7CisgICAgICBjb25zdCBfVHAgX190MSA9IChfX2EgKyBfVHAoMSkpIC8gKF9UcCgyKSAqIF9fYyk7CisgICAgICBjb25zdCBfVHAgX190MiA9IChfX2EgKyBfVHAoMikpIC8gKF9UcCgyKSAqIChfX2MgKyBfVHAoMSkpKTsKKyAgICAgIF9UcCBfX0YgPSBfVHAoMSk7CisgICAgICBfVHAgX19wcmVjOworCisgICAgICBfVHAgX19Cbm0zID0gX1RwKDEpOworICAgICAgX1RwIF9fQm5tMiA9IF9UcCgxKSArIF9fdDEgKiBfX3g7CisgICAgICBfVHAgX19Cbm0xID0gX1RwKDEpICsgX190MiAqIF9feCAqIChfVHAoMSkgKyBfX3QxIC8gX1RwKDMpICogX194KTsKKworICAgICAgX1RwIF9fQW5tMyA9IF9UcCgxKTsKKyAgICAgIF9UcCBfX0FubTIgPSBfX0JubTIgLSBfX3QwICogX194OworICAgICAgX1RwIF9fQW5tMSA9IF9fQm5tMSAtIF9fdDAgKiAoX1RwKDEpICsgX190MiAqIF9feCkgKiBfX3gKKyAgICAgICAgICAgICAgICAgKyBfX3QwICogX190MSAqIChfX2MgLyAoX19jICsgX1RwKDEpKSkgKiBfX3ggKiBfX3g7CisKKyAgICAgIGludCBfX24gPSAzOworICAgICAgd2hpbGUoMSkKKyAgICAgICAgeworICAgICAgICAgIF9UcCBfX25wYW0xID0gX1RwKF9fbiAtIDEpICsgX19hOworICAgICAgICAgIF9UcCBfX25wY20xID0gX1RwKF9fbiAtIDEpICsgX19jOworICAgICAgICAgIF9UcCBfX25wYW0yID0gX1RwKF9fbiAtIDIpICsgX19hOworICAgICAgICAgIF9UcCBfX25wY20yID0gX1RwKF9fbiAtIDIpICsgX19jOworICAgICAgICAgIF9UcCBfX3RubTEgID0gX1RwKDIgKiBfX24gLSAxKTsKKyAgICAgICAgICBfVHAgX190bm0zICA9IF9UcCgyICogX19uIC0gMyk7CisgICAgICAgICAgX1RwIF9fdG5tNSAgPSBfVHAoMiAqIF9fbiAtIDUpOworICAgICAgICAgIF9UcCBfX0YxID0gIChfVHAoX19uIC0gMikgLSBfX2EpIC8gKF9UcCgyKSAqIF9fdG5tMyAqIF9fbnBjbTEpOworICAgICAgICAgIF9UcCBfX0YyID0gIChfVHAoX19uKSArIF9fYSkgKiBfX25wYW0xCisgICAgICAgICAgICAgICAgICAgLyAoX1RwKDQpICogX190bm0xICogX190bm0zICogX19ucGNtMiAqIF9fbnBjbTEpOworICAgICAgICAgIF9UcCBfX0YzID0gLV9fbnBhbTIgKiBfX25wYW0xICogKF9UcChfX24gLSAyKSAtIF9fYSkKKyAgICAgICAgICAgICAgICAgICAvIChfVHAoOCkgKiBfX3RubTMgKiBfX3RubTMgKiBfX3RubTUKKyAgICAgICAgICAgICAgICAgICAqIChfVHAoX19uIC0gMykgKyBfX2MpICogX19ucGNtMiAqIF9fbnBjbTEpOworICAgICAgICAgIF9UcCBfX0UgID0gLV9fbnBhbTEgKiAoX1RwKF9fbiAtIDEpIC0gX19jKQorICAgICAgICAgICAgICAgICAgIC8gKF9UcCgyKSAqIF9fdG5tMyAqIF9fbnBjbTIgKiBfX25wY20xKTsKKworICAgICAgICAgIF9UcCBfX0FuID0gKF9UcCgxKSArIF9fRjEgKiBfX3gpICogX19Bbm0xCisgICAgICAgICAgICAgICAgICAgKyAoX19FICsgX19GMiAqIF9feCkgKiBfX3ggKiBfX0FubTIgKyBfX0YzICogX194MyAqIF9fQW5tMzsKKyAgICAgICAgICBfVHAgX19CbiA9IChfVHAoMSkgKyBfX0YxICogX194KSAqIF9fQm5tMQorICAgICAgICAgICAgICAgICAgICsgKF9fRSArIF9fRjIgKiBfX3gpICogX194ICogX19Cbm0yICsgX19GMyAqIF9feDMgKiBfX0JubTM7CisgICAgICAgICAgX1RwIF9fciA9IF9fQW4gLyBfX0JuOworCisgICAgICAgICAgX19wcmVjID0gc3RkOjphYnMoKF9fRiAtIF9fcikgLyBfX0YpOworICAgICAgICAgIF9fRiA9IF9fcjsKKworICAgICAgICAgIGlmIChfX3ByZWMgPCBfX2VwcyB8fCBfX24gPiBfX25tYXgpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGlmIChzdGQ6OmFicyhfX0FuKSA+IF9fYmlnIHx8IHN0ZDo6YWJzKF9fQm4pID4gX19iaWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9fQW4gICAvPSBfX2JpZzsKKyAgICAgICAgICAgICAgX19CbiAgIC89IF9fYmlnOworICAgICAgICAgICAgICBfX0FubTEgLz0gX19iaWc7CisgICAgICAgICAgICAgIF9fQm5tMSAvPSBfX2JpZzsKKyAgICAgICAgICAgICAgX19Bbm0yIC89IF9fYmlnOworICAgICAgICAgICAgICBfX0JubTIgLz0gX19iaWc7CisgICAgICAgICAgICAgIF9fQW5tMyAvPSBfX2JpZzsKKyAgICAgICAgICAgICAgX19Cbm0zIC89IF9fYmlnOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKHN0ZDo6YWJzKF9fQW4pIDwgX1RwKDEpIC8gX19iaWcKKyAgICAgICAgICAgICAgICB8fCBzdGQ6OmFicyhfX0JuKSA8IF9UcCgxKSAvIF9fYmlnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfX0FuICAgKj0gX19iaWc7CisgICAgICAgICAgICAgIF9fQm4gICAqPSBfX2JpZzsKKyAgICAgICAgICAgICAgX19Bbm0xICo9IF9fYmlnOworICAgICAgICAgICAgICBfX0JubTEgKj0gX19iaWc7CisgICAgICAgICAgICAgIF9fQW5tMiAqPSBfX2JpZzsKKyAgICAgICAgICAgICAgX19Cbm0yICo9IF9fYmlnOworICAgICAgICAgICAgICBfX0FubTMgKj0gX19iaWc7CisgICAgICAgICAgICAgIF9fQm5tMyAqPSBfX2JpZzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICsrX19uOworICAgICAgICAgIF9fQm5tMyA9IF9fQm5tMjsKKyAgICAgICAgICBfX0JubTIgPSBfX0JubTE7CisgICAgICAgICAgX19Cbm0xID0gX19CbjsKKyAgICAgICAgICBfX0FubTMgPSBfX0FubTI7CisgICAgICAgICAgX19Bbm0yID0gX19Bbm0xOworICAgICAgICAgIF9fQW5tMSA9IF9fQW47CisgICAgICAgIH0KKworICAgICAgaWYgKF9fbiA+PSBfX25tYXgpCisgICAgICAgIHN0ZDo6X190aHJvd19ydW50aW1lX2Vycm9yKF9fTigiSXRlcmF0aW9uIGZhaWxlZCB0byBjb252ZXJnZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19jb25mX2h5cGVyZ19sdWtlLiIpKTsKKworICAgICAgcmV0dXJuIF9fRjsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmICBSZXR1cm4gdGhlIGNvbmZsdWVudCBoeXBvZ2VvbWV0cmljIGZ1bmN0aW9uCisgICAgICogICAgICAgICAgIEBmJCBfMUZfMShhO2M7eCkgQGYkLgorICAgICAqIAorICAgICAqICAgQHRvZG8gIEhhbmRsZSBiID09IG5vbnBvc2l0aXZlIGludGVnZXIgYmxvd3VwIC0gcmV0dXJuIE5hTi4KKyAgICAgKgorICAgICAqICAgQHBhcmFtICBfX2EgIFRoZSBAYSBudW1lcmF0b3IgcGFyYW1ldGVyLgorICAgICAqICAgQHBhcmFtICBfX2MgIFRoZSBAYSBkZW5vbWluYXRvciBwYXJhbWV0ZXIuCisgICAgICogICBAcGFyYW0gIF9feCAgVGhlIGFyZ3VtZW50IG9mIHRoZSBjb25mbHVlbnQgaHlwZXJnZW9tZXRyaWMgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgY29uZmx1ZW50IGh5cGVyZ2VvbWV0cmljIGZ1bmN0aW9uLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgX19jb25mX2h5cGVyZyhjb25zdCBfVHAgX19hLCBjb25zdCBfVHAgX19jLCBjb25zdCBfVHAgX194KQorICAgIHsKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAgICBjb25zdCBfVHAgX19jX25pbnQgPSBzdGQ6OnRyMTo6bmVhcmJ5aW50KF9fYyk7CisjZWxzZQorICAgICAgY29uc3QgX1RwIF9fY19uaW50ID0gc3RhdGljX2Nhc3Q8aW50PihfX2MgKyBfVHAoMC41TCkpOworI2VuZGlmCisgICAgICBpZiAoX19pc25hbihfX2EpIHx8IF9faXNuYW4oX19jKSB8fCBfX2lzbmFuKF9feCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OnF1aWV0X05hTigpOworICAgICAgZWxzZSBpZiAoX19jX25pbnQgPT0gX19jICYmIF9fY19uaW50IDw9IDApCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmluZmluaXR5KCk7CisgICAgICBlbHNlIGlmIChfX2EgPT0gX1RwKDApKQorICAgICAgICByZXR1cm4gX1RwKDEpOworICAgICAgZWxzZSBpZiAoX19jID09IF9fYSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6ZXhwKF9feCk7CisgICAgICBlbHNlIGlmIChfX3ggPCBfVHAoMCkpCisgICAgICAgIHJldHVybiBfX2NvbmZfaHlwZXJnX2x1a2UoX19hLCBfX2MsIF9feCk7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBfX2NvbmZfaHlwZXJnX3NlcmllcyhfX2EsIF9fYywgX194KTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmIFJldHVybiB0aGUgaHlwb2dlb21ldHJpYyBmdW5jdGlvbiBAZiQgXzJGXzEoYSxiO2M7eCkgQGYkCisgICAgICogICBieSBzZXJpZXMgZXhwYW5zaW9uLgorICAgICAqIAorICAgICAqICAgVGhlIGh5cG9nZW9tZXRyaWMgZnVuY3Rpb24gaXMgZGVmaW5lZCBieQorICAgICAqICAgQGZbCisgICAgICogICAgIF8yRl8xKGEsYjtjO3gpID0gXGZyYWN7XEdhbW1hKGMpfXtcR2FtbWEoYSlcR2FtbWEoYil9CisgICAgICogICAgICAgICAgICAgICAgICAgICAgXHN1bV97bj0wfV57XGluZnR5fQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIFxmcmFje1xHYW1tYShhK24pXEdhbW1hKGIrbil9e1xHYW1tYShjK24pfQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIFxmcmFje3hebn17biF9CisgICAgICogICBAZl0KKyAgICAgKiAKKyAgICAgKiAgIFRoaXMgd29ya3MgYW5kIGl0J3MgcHJldHR5IGZhc3QuCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSAgX19hICBUaGUgZmlyc3QgQGEgbnVtZXJhdG9yIHBhcmFtZXRlci4KKyAgICAgKiAgIEBwYXJhbSAgX19hICBUaGUgc2Vjb25kIEBhIG51bWVyYXRvciBwYXJhbWV0ZXIuCisgICAgICogICBAcGFyYW0gIF9fYyAgVGhlIEBhIGRlbm9taW5hdG9yIHBhcmFtZXRlci4KKyAgICAgKiAgIEBwYXJhbSAgX194ICBUaGUgYXJndW1lbnQgb2YgdGhlIGNvbmZsdWVudCBoeXBlcmdlb21ldHJpYyBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBjb25mbHVlbnQgaHlwZXJnZW9tZXRyaWMgZnVuY3Rpb24uCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9faHlwZXJnX3Nlcmllcyhjb25zdCBfVHAgX19hLCBjb25zdCBfVHAgX19iLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAgX19jLCBjb25zdCBfVHAgX194KQorICAgIHsKKyAgICAgIGNvbnN0IF9UcCBfX2VwcyA9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6ZXBzaWxvbigpOworCisgICAgICBfVHAgX190ZXJtID0gX1RwKDEpOworICAgICAgX1RwIF9fRmFiYyA9IF9UcCgxKTsKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBfX21heF9pdGVyID0gMTAwMDAwOworICAgICAgdW5zaWduZWQgaW50IF9faTsKKyAgICAgIGZvciAoX19pID0gMDsgX19pIDwgX19tYXhfaXRlcjsgKytfX2kpCisgICAgICAgIHsKKyAgICAgICAgICBfX3Rlcm0gKj0gKF9fYSArIF9UcChfX2kpKSAqIChfX2IgKyBfVHAoX19pKSkgKiBfX3gKKyAgICAgICAgICAgICAgICAgIC8gKChfX2MgKyBfVHAoX19pKSkgKiBfVHAoMSArIF9faSkpOworICAgICAgICAgIGlmIChzdGQ6OmFicyhfX3Rlcm0pIDwgX19lcHMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIF9fRmFiYyArPSBfX3Rlcm07CisgICAgICAgIH0KKyAgICAgIGlmIChfX2kgPT0gX19tYXhfaXRlcikKKyAgICAgICAgc3RkOjpfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJTZXJpZXMgZmFpbGVkIHRvIGNvbnZlcmdlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBfX2h5cGVyZ19zZXJpZXMuIikpOworCisgICAgICByZXR1cm4gX19GYWJjOworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgIFJldHVybiB0aGUgaHlwb2dlb21ldHJpYyBmdW5jdGlvbiBAZiQgXzJGXzEoYSxiO2M7eCkgQGYkCisgICAgICogICAgICAgICAgIGJ5IGFuIGl0ZXJhdGl2ZSBwcm9jZWR1cmUgZGVzY3JpYmVkIGluCisgICAgICogICAgICAgICAgIEx1a2UsIEFsZ29yaXRobXMgZm9yIHRoZSBDb21wdXRhdGlvbiBvZiBNYXRoZW1hdGljYWwgRnVuY3Rpb25zLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2h5cGVyZ19sdWtlKGNvbnN0IF9UcCBfX2EsIGNvbnN0IF9UcCBfX2IsIGNvbnN0IF9UcCBfX2MsCisgICAgICAgICAgICAgICAgICBjb25zdCBfVHAgX194aW4pCisgICAgeworICAgICAgY29uc3QgX1RwIF9fYmlnID0gc3RkOjpwb3coc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjptYXgoKSwgX1RwKDAuMTZMKSk7CisgICAgICBjb25zdCBpbnQgX19ubWF4ID0gMjAwMDA7CisgICAgICBjb25zdCBfVHAgX19lcHMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmVwc2lsb24oKTsKKyAgICAgIGNvbnN0IF9UcCBfX3ggID0gLV9feGluOworICAgICAgY29uc3QgX1RwIF9feDMgPSBfX3ggKiBfX3ggKiBfX3g7CisgICAgICBjb25zdCBfVHAgX190MCA9IF9fYSAqIF9fYiAvIF9fYzsKKyAgICAgIGNvbnN0IF9UcCBfX3QxID0gKF9fYSArIF9UcCgxKSkgKiAoX19iICsgX1RwKDEpKSAvIChfVHAoMikgKiBfX2MpOworICAgICAgY29uc3QgX1RwIF9fdDIgPSAoX19hICsgX1RwKDIpKSAqIChfX2IgKyBfVHAoMikpCisgICAgICAgICAgICAgICAgICAgICAvIChfVHAoMikgKiAoX19jICsgX1RwKDEpKSk7CisKKyAgICAgIF9UcCBfX0YgPSBfVHAoMSk7CisKKyAgICAgIF9UcCBfX0JubTMgPSBfVHAoMSk7CisgICAgICBfVHAgX19Cbm0yID0gX1RwKDEpICsgX190MSAqIF9feDsKKyAgICAgIF9UcCBfX0JubTEgPSBfVHAoMSkgKyBfX3QyICogX194ICogKF9UcCgxKSArIF9fdDEgLyBfVHAoMykgKiBfX3gpOworCisgICAgICBfVHAgX19Bbm0zID0gX1RwKDEpOworICAgICAgX1RwIF9fQW5tMiA9IF9fQm5tMiAtIF9fdDAgKiBfX3g7CisgICAgICBfVHAgX19Bbm0xID0gX19Cbm0xIC0gX190MCAqIChfVHAoMSkgKyBfX3QyICogX194KSAqIF9feAorICAgICAgICAgICAgICAgICArIF9fdDAgKiBfX3QxICogKF9fYyAvIChfX2MgKyBfVHAoMSkpKSAqIF9feCAqIF9feDsKKworICAgICAgaW50IF9fbiA9IDM7CisgICAgICB3aGlsZSAoMSkKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IF9UcCBfX25wYW0xID0gX1RwKF9fbiAtIDEpICsgX19hOworICAgICAgICAgIGNvbnN0IF9UcCBfX25wYm0xID0gX1RwKF9fbiAtIDEpICsgX19iOworICAgICAgICAgIGNvbnN0IF9UcCBfX25wY20xID0gX1RwKF9fbiAtIDEpICsgX19jOworICAgICAgICAgIGNvbnN0IF9UcCBfX25wYW0yID0gX1RwKF9fbiAtIDIpICsgX19hOworICAgICAgICAgIGNvbnN0IF9UcCBfX25wYm0yID0gX1RwKF9fbiAtIDIpICsgX19iOworICAgICAgICAgIGNvbnN0IF9UcCBfX25wY20yID0gX1RwKF9fbiAtIDIpICsgX19jOworICAgICAgICAgIGNvbnN0IF9UcCBfX3RubTEgID0gX1RwKDIgKiBfX24gLSAxKTsKKyAgICAgICAgICBjb25zdCBfVHAgX190bm0zICA9IF9UcCgyICogX19uIC0gMyk7CisgICAgICAgICAgY29uc3QgX1RwIF9fdG5tNSAgPSBfVHAoMiAqIF9fbiAtIDUpOworICAgICAgICAgIGNvbnN0IF9UcCBfX24yID0gX19uICogX19uOworICAgICAgICAgIGNvbnN0IF9UcCBfX0YxID0gKF9UcCgzKSAqIF9fbjIgKyAoX19hICsgX19iIC0gX1RwKDYpKSAqIF9fbgorICAgICAgICAgICAgICAgICAgICAgICAgICsgX1RwKDIpIC0gX19hICogX19iIC0gX1RwKDIpICogKF9fYSArIF9fYikpCisgICAgICAgICAgICAgICAgICAgICAgICAgLyAoX1RwKDIpICogX190bm0zICogX19ucGNtMSk7CisgICAgICAgICAgY29uc3QgX1RwIF9fRjIgPSAtKF9UcCgzKSAqIF9fbjIgLSAoX19hICsgX19iICsgX1RwKDYpKSAqIF9fbgorICAgICAgICAgICAgICAgICAgICAgICAgICsgX1RwKDIpIC0gX19hICogX19iKSAqIF9fbnBhbTEgKiBfX25wYm0xCisgICAgICAgICAgICAgICAgICAgICAgICAgLyAoX1RwKDQpICogX190bm0xICogX190bm0zICogX19ucGNtMiAqIF9fbnBjbTEpOworICAgICAgICAgIGNvbnN0IF9UcCBfX0YzID0gKF9fbnBhbTIgKiBfX25wYW0xICogX19ucGJtMiAqIF9fbnBibTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIChfVHAoX19uIC0gMikgLSBfX2EpICogKF9UcChfX24gLSAyKSAtIF9fYikpCisgICAgICAgICAgICAgICAgICAgICAgICAgLyAoX1RwKDgpICogX190bm0zICogX190bm0zICogX190bm01CisgICAgICAgICAgICAgICAgICAgICAgICAgKiAoX1RwKF9fbiAtIDMpICsgX19jKSAqIF9fbnBjbTIgKiBfX25wY20xKTsKKyAgICAgICAgICBjb25zdCBfVHAgX19FICA9IC1fX25wYW0xICogX19ucGJtMSAqIChfVHAoX19uIC0gMSkgLSBfX2MpCisgICAgICAgICAgICAgICAgICAgICAgICAgLyAoX1RwKDIpICogX190bm0zICogX19ucGNtMiAqIF9fbnBjbTEpOworCisgICAgICAgICAgX1RwIF9fQW4gPSAoX1RwKDEpICsgX19GMSAqIF9feCkgKiBfX0FubTEKKyAgICAgICAgICAgICAgICAgICArIChfX0UgKyBfX0YyICogX194KSAqIF9feCAqIF9fQW5tMiArIF9fRjMgKiBfX3gzICogX19Bbm0zOworICAgICAgICAgIF9UcCBfX0JuID0gKF9UcCgxKSArIF9fRjEgKiBfX3gpICogX19Cbm0xCisgICAgICAgICAgICAgICAgICAgKyAoX19FICsgX19GMiAqIF9feCkgKiBfX3ggKiBfX0JubTIgKyBfX0YzICogX194MyAqIF9fQm5tMzsKKyAgICAgICAgICBjb25zdCBfVHAgX19yID0gX19BbiAvIF9fQm47CisKKyAgICAgICAgICBjb25zdCBfVHAgX19wcmVjID0gc3RkOjphYnMoKF9fRiAtIF9fcikgLyBfX0YpOworICAgICAgICAgIF9fRiA9IF9fcjsKKworICAgICAgICAgIGlmIChfX3ByZWMgPCBfX2VwcyB8fCBfX24gPiBfX25tYXgpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGlmIChzdGQ6OmFicyhfX0FuKSA+IF9fYmlnIHx8IHN0ZDo6YWJzKF9fQm4pID4gX19iaWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9fQW4gICAvPSBfX2JpZzsKKyAgICAgICAgICAgICAgX19CbiAgIC89IF9fYmlnOworICAgICAgICAgICAgICBfX0FubTEgLz0gX19iaWc7CisgICAgICAgICAgICAgIF9fQm5tMSAvPSBfX2JpZzsKKyAgICAgICAgICAgICAgX19Bbm0yIC89IF9fYmlnOworICAgICAgICAgICAgICBfX0JubTIgLz0gX19iaWc7CisgICAgICAgICAgICAgIF9fQW5tMyAvPSBfX2JpZzsKKyAgICAgICAgICAgICAgX19Cbm0zIC89IF9fYmlnOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKHN0ZDo6YWJzKF9fQW4pIDwgX1RwKDEpIC8gX19iaWcKKyAgICAgICAgICAgICAgICB8fCBzdGQ6OmFicyhfX0JuKSA8IF9UcCgxKSAvIF9fYmlnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfX0FuICAgKj0gX19iaWc7CisgICAgICAgICAgICAgIF9fQm4gICAqPSBfX2JpZzsKKyAgICAgICAgICAgICAgX19Bbm0xICo9IF9fYmlnOworICAgICAgICAgICAgICBfX0JubTEgKj0gX19iaWc7CisgICAgICAgICAgICAgIF9fQW5tMiAqPSBfX2JpZzsKKyAgICAgICAgICAgICAgX19Cbm0yICo9IF9fYmlnOworICAgICAgICAgICAgICBfX0FubTMgKj0gX19iaWc7CisgICAgICAgICAgICAgIF9fQm5tMyAqPSBfX2JpZzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICsrX19uOworICAgICAgICAgIF9fQm5tMyA9IF9fQm5tMjsKKyAgICAgICAgICBfX0JubTIgPSBfX0JubTE7CisgICAgICAgICAgX19Cbm0xID0gX19CbjsKKyAgICAgICAgICBfX0FubTMgPSBfX0FubTI7CisgICAgICAgICAgX19Bbm0yID0gX19Bbm0xOworICAgICAgICAgIF9fQW5tMSA9IF9fQW47CisgICAgICAgIH0KKworICAgICAgaWYgKF9fbiA+PSBfX25tYXgpCisgICAgICAgIHN0ZDo6X190aHJvd19ydW50aW1lX2Vycm9yKF9fTigiSXRlcmF0aW9uIGZhaWxlZCB0byBjb252ZXJnZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19oeXBlcmdfbHVrZS4iKSk7CisKKyAgICAgIHJldHVybiBfX0Y7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBSZXR1cm4gdGhlIGh5cG9nZW9tZXRyaWMgZnVuY3Rpb24gQGYkIF8yRl8xKGEsYjtjO3gpIEBmJCAKKyAgICAgKiAgYnkgdGhlIHJlZmxlY3Rpb24gZm9ybXVsYWUgaW4gQWJyYW1vd2l0eiAmIFN0ZWd1biBmb3JtdWxhCisgICAgICogIDE1LjMuNiBmb3IgZCA9IGMgLSBhIC0gYiBub3QgaW50ZWdyYWwgYW5kIGZvcm11bGEgMTUuMy4xMSBmb3IKKyAgICAgKiAgZCA9IGMgLSBhIC0gYiBpbnRlZ3JhbC4gIFRoaXMgYXNzdW1lcyBhLCBiLCBjICE9IG5lZ2F0aXZlCisgICAgICogIGludGVnZXIuCisgICAgICoKKyAgICAgKiAgIFRoZSBoeXBvZ2VvbWV0cmljIGZ1bmN0aW9uIGlzIGRlZmluZWQgYnkKKyAgICAgKiAgIEBmWworICAgICAqICAgICBfMkZfMShhLGI7Yzt4KSA9IFxmcmFje1xHYW1tYShjKX17XEdhbW1hKGEpXEdhbW1hKGIpfQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIFxzdW1fe249MH1ee1xpbmZ0eX0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBcZnJhY3tcR2FtbWEoYStuKVxHYW1tYShiK24pfXtcR2FtbWEoYytuKX0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBcZnJhY3t4Xm59e24hfQorICAgICAqICAgQGZdCisgICAgICoKKyAgICAgKiAgIFRoZSByZWZsZWN0aW9uIGZvcm11bGEgZm9yIG5vbmludGVncmFsIEBmJCBkID0gYyAtIGEgLSBiIEBmJCBpczoKKyAgICAgKiAgIEBmWworICAgICAqICAgICBfMkZfMShhLGI7Yzt4KSA9IFxmcmFje1xHYW1tYShjKVxHYW1tYShkKX17XEdhbW1hKGMtYSlcR2FtbWEoYy1iKX0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfMkZfMShhLGI7MS1kOzEteCkKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgKyBcZnJhY3tcR2FtbWEoYylcR2FtbWEoLWQpfXtcR2FtbWEoYSlcR2FtbWEoYil9CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgXzJGXzEoYy1hLGMtYjsxK2Q7MS14KQorICAgICAqICAgQGZdCisgICAgICoKKyAgICAgKiAgIFRoZSByZWZsZWN0aW9uIGZvcm11bGEgZm9yIGludGVncmFsIEBmJCBtID0gYyAtIGEgLSBiIEBmJCBpczoKKyAgICAgKiAgIEBmWworICAgICAqICAgICBfMkZfMShhLGI7YStiK207eCkgPSBcZnJhY3tcR2FtbWEobSlcR2FtbWEoYStiK20pfXtcR2FtbWEoYSttKVxHYW1tYShiK20pfQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgXHN1bV97az0wfV57bS0xfSBcZnJhY3sobSthKV9rKG0rYilfa317ayEoMS1tKV9rfQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIC0gCisgICAgICogICBAZl0KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19oeXBlcmdfcmVmbGVjdChjb25zdCBfVHAgX19hLCBjb25zdCBfVHAgX19iLCBjb25zdCBfVHAgX19jLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwIF9feCkKKyAgICB7CisgICAgICBjb25zdCBfVHAgX19kID0gX19jIC0gX19hIC0gX19iOworICAgICAgY29uc3QgaW50IF9faW50ZCAgPSBzdGQ6OmZsb29yKF9fZCArIF9UcCgwLjVMKSk7CisgICAgICBjb25zdCBfVHAgX19lcHMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmVwc2lsb24oKTsKKyAgICAgIGNvbnN0IF9UcCBfX3RvbGVyID0gX1RwKDEwMDApICogX19lcHM7CisgICAgICBjb25zdCBfVHAgX19sb2dfbWF4ID0gc3RkOjpsb2coc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjptYXgoKSk7CisgICAgICBjb25zdCBib29sIF9fZF9pbnRlZ2VyID0gKHN0ZDo6YWJzKF9fZCAtIF9faW50ZCkgPCBfX3RvbGVyKTsKKworICAgICAgaWYgKF9fZF9pbnRlZ2VyKQorICAgICAgICB7CisgICAgICAgICAgY29uc3QgX1RwIF9fbG5fb214ID0gc3RkOjpsb2coX1RwKDEpIC0gX194KTsKKyAgICAgICAgICBjb25zdCBfVHAgX19hZCA9IHN0ZDo6YWJzKF9fZCk7CisgICAgICAgICAgX1RwIF9fRjEsIF9fRjI7CisKKyAgICAgICAgICBfVHAgX19kMSwgX19kMjsKKyAgICAgICAgICBpZiAoX19kID49IF9UcCgwKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX19kMSA9IF9fZDsKKyAgICAgICAgICAgICAgX19kMiA9IF9UcCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9fZDEgPSBfVHAoMCk7CisgICAgICAgICAgICAgIF9fZDIgPSBfX2Q7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBjb25zdCBfVHAgX19sbmdfYyA9IF9fbG9nX2dhbW1hKF9fYyk7CisKKyAgICAgICAgICAvLyAgRXZhbHVhdGUgRjEuCisgICAgICAgICAgaWYgKF9fYWQgPCBfX2VwcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLy8gIGQgPSBjIC0gYSAtIGIgPSAwLgorICAgICAgICAgICAgICBfX0YxID0gX1RwKDApOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKworICAgICAgICAgICAgICBib29sIF9fb2tfZDEgPSB0cnVlOworICAgICAgICAgICAgICBfVHAgX19sbmdfYWQsIF9fbG5nX2FkMSwgX19sbmdfYmQxOworICAgICAgICAgICAgICBfX3RyeQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIF9fbG5nX2FkID0gX19sb2dfZ2FtbWEoX19hZCk7CisgICAgICAgICAgICAgICAgICBfX2xuZ19hZDEgPSBfX2xvZ19nYW1tYShfX2EgKyBfX2QxKTsKKyAgICAgICAgICAgICAgICAgIF9fbG5nX2JkMSA9IF9fbG9nX2dhbW1hKF9fYiArIF9fZDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgX19jYXRjaCguLi4pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgX19va19kMSA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBpZiAoX19va19kMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAvKiBHYW1tYSBmdW5jdGlvbnMgaW4gdGhlIGRlbm9taW5hdG9yIGFyZSBvay4KKyAgICAgICAgICAgICAgICAgICAqIFByb2NlZWQgd2l0aCBldmFsdWF0aW9uLgorICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICBfVHAgX19zdW0xID0gX1RwKDEpOworICAgICAgICAgICAgICAgICAgX1RwIF9fdGVybSA9IF9UcCgxKTsKKyAgICAgICAgICAgICAgICAgIF9UcCBfX2xuX3ByZTEgPSBfX2xuZ19hZCArIF9fbG5nX2MgKyBfX2QyICogX19sbl9vbXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBfX2xuZ19hZDEgLSBfX2xuZ19iZDE7CisKKyAgICAgICAgICAgICAgICAgIC8qIERvIEYxIHN1bS4KKyAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgZm9yIChpbnQgX19pID0gMTsgX19pIDwgX19hZDsgKytfX2kpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgX19qID0gX19pIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICBfX3Rlcm0gKj0gKF9fYSArIF9fZDIgKyBfX2opICogKF9fYiArIF9fZDIgKyBfX2opCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIChfVHAoMSkgKyBfX2QyICsgX19qKSAvIF9faSAqIChfVHAoMSkgLSBfX3gpOworICAgICAgICAgICAgICAgICAgICAgIF9fc3VtMSArPSBfX3Rlcm07CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgaWYgKF9fbG5fcHJlMSA+IF9fbG9nX21heCkKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJPdmVyZmxvdyBvZiBnYW1tYSBmdW5jdGlvbnMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGluIF9faHlwZXJnX2x1a2UuIikpOworICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBfX0YxID0gc3RkOjpleHAoX19sbl9wcmUxKSAqIF9fc3VtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAvLyAgR2FtbWEgZnVuY3Rpb25zIGluIHRoZSBkZW5vbWluYXRvciB3ZXJlIG5vdCBvay4KKyAgICAgICAgICAgICAgICAgIC8vICBTbyB0aGUgRjEgdGVybSBpcyB6ZXJvLgorICAgICAgICAgICAgICAgICAgX19GMSA9IF9UcCgwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IC8vIGVuZCBGMSBldmFsdWF0aW9uCisKKyAgICAgICAgICAvLyBFdmFsdWF0ZSBGMi4KKyAgICAgICAgICBib29sIF9fb2tfZDIgPSB0cnVlOworICAgICAgICAgIF9UcCBfX2xuZ19hZDIsIF9fbG5nX2JkMjsKKyAgICAgICAgICBfX3RyeQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfX2xuZ19hZDIgPSBfX2xvZ19nYW1tYShfX2EgKyBfX2QyKTsKKyAgICAgICAgICAgICAgX19sbmdfYmQyID0gX19sb2dfZ2FtbWEoX19iICsgX19kMik7CisgICAgICAgICAgICB9CisgICAgICAgICAgX19jYXRjaCguLi4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9fb2tfZDIgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChfX29rX2QyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvLyAgR2FtbWEgZnVuY3Rpb25zIGluIHRoZSBkZW5vbWluYXRvciBhcmUgb2suCisgICAgICAgICAgICAgIC8vICBQcm9jZWVkIHdpdGggZXZhbHVhdGlvbi4KKyAgICAgICAgICAgICAgY29uc3QgaW50IF9fbWF4aXRlciA9IDIwMDA7CisgICAgICAgICAgICAgIGNvbnN0IF9UcCBfX3BzaV8xID0gLV9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19nYW1tYV9lKCk7CisgICAgICAgICAgICAgIGNvbnN0IF9UcCBfX3BzaV8xcGQgPSBfX3BzaShfVHAoMSkgKyBfX2FkKTsKKyAgICAgICAgICAgICAgY29uc3QgX1RwIF9fcHNpX2FwZDEgPSBfX3BzaShfX2EgKyBfX2QxKTsKKyAgICAgICAgICAgICAgY29uc3QgX1RwIF9fcHNpX2JwZDEgPSBfX3BzaShfX2IgKyBfX2QxKTsKKworICAgICAgICAgICAgICBfVHAgX19wc2lfdGVybSA9IF9fcHNpXzEgKyBfX3BzaV8xcGQgLSBfX3BzaV9hcGQxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gX19wc2lfYnBkMSAtIF9fbG5fb214OworICAgICAgICAgICAgICBfVHAgX19mYWN0ID0gX1RwKDEpOworICAgICAgICAgICAgICBfVHAgX19zdW0yID0gX19wc2lfdGVybTsKKyAgICAgICAgICAgICAgX1RwIF9fbG5fcHJlMiA9IF9fbG5nX2MgKyBfX2QxICogX19sbl9vbXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIF9fbG5nX2FkMiAtIF9fbG5nX2JkMjsKKworICAgICAgICAgICAgICAvLyBEbyBGMiBzdW0uCisgICAgICAgICAgICAgIGludCBfX2o7CisgICAgICAgICAgICAgIGZvciAoX19qID0gMTsgX19qIDwgX19tYXhpdGVyOyArK19faikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAvLyAgVmFsdWVzIGZvciBwc2kgZnVuY3Rpb25zIHVzZSByZWN1cnJlbmNlOworICAgICAgICAgICAgICAgICAgLy8gIEFicmFtb3dpdHogJiBTdGVndW4gNi4zLjUKKyAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCBfX3Rlcm0xID0gX1RwKDEpIC8gX1RwKF9faikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgX1RwKDEpIC8gKF9fYWQgKyBfX2opOworICAgICAgICAgICAgICAgICAgY29uc3QgX1RwIF9fdGVybTIgPSBfVHAoMSkgLyAoX19hICsgX19kMSArIF9UcChfX2ogLSAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgX1RwKDEpIC8gKF9fYiArIF9fZDEgKyBfVHAoX19qIC0gMSkpOworICAgICAgICAgICAgICAgICAgX19wc2lfdGVybSArPSBfX3Rlcm0xIC0gX190ZXJtMjsKKyAgICAgICAgICAgICAgICAgIF9fZmFjdCAqPSAoX19hICsgX19kMSArIF9UcChfX2ogLSAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKiAoX19iICsgX19kMSArIF9UcChfX2ogLSAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyAoKF9fYWQgKyBfX2opICogX19qKSAqIChfVHAoMSkgLSBfX3gpOworICAgICAgICAgICAgICAgICAgY29uc3QgX1RwIF9fZGVsdGEgPSBfX2ZhY3QgKiBfX3BzaV90ZXJtOworICAgICAgICAgICAgICAgICAgX19zdW0yICs9IF9fZGVsdGE7CisgICAgICAgICAgICAgICAgICBpZiAoc3RkOjphYnMoX19kZWx0YSkgPCBfX2VwcyAqIHN0ZDo6YWJzKF9fc3VtMikpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKF9faiA9PSBfX21heGl0ZXIpCisgICAgICAgICAgICAgICAgc3RkOjpfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJTdW0gRjIgZmFpbGVkIHRvIGNvbnZlcmdlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIF9faHlwZXJnX3JlZmxlY3QiKSk7CisKKyAgICAgICAgICAgICAgaWYgKF9fc3VtMiA9PSBfVHAoMCkpCisgICAgICAgICAgICAgICAgX19GMiA9IF9UcCgwKTsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIF9fRjIgPSBzdGQ6OmV4cChfX2xuX3ByZTIpICogX19zdW0yOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLy8gR2FtbWEgZnVuY3Rpb25zIGluIHRoZSBkZW5vbWluYXRvciBub3Qgb2suCisgICAgICAgICAgICAgIC8vIFNvIHRoZSBGMiB0ZXJtIGlzIHplcm8uCisgICAgICAgICAgICAgIF9fRjIgPSBfVHAoMCk7CisgICAgICAgICAgICB9IC8vIGVuZCBGMiBldmFsdWF0aW9uCisKKyAgICAgICAgICBjb25zdCBfVHAgX19zZ25fMiA9IChfX2ludGQgJSAyID09IDEgPyAtX1RwKDEpIDogX1RwKDEpKTsKKyAgICAgICAgICBjb25zdCBfVHAgX19GID0gX19GMSArIF9fc2duXzIgKiBfX0YyOworCisgICAgICAgICAgcmV0dXJuIF9fRjsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLy8gIGQgPSBjIC0gYSAtIGIgbm90IGFuIGludGVnZXIuCisKKyAgICAgICAgICAvLyAgVGhlc2UgZ2FtbWEgZnVuY3Rpb25zIGFwcGVhciBpbiB0aGUgZGVub21pbmF0b3IsIHNvIHdlCisgICAgICAgICAgLy8gIGNhdGNoIHRoZWlyIGhhcm1sZXNzIGRvbWFpbiBlcnJvcnMgYW5kIHNldCB0aGUgdGVybXMgdG8gemVyby4KKyAgICAgICAgICBib29sIF9fb2sxID0gdHJ1ZTsKKyAgICAgICAgICBfVHAgX19zZ25fZzFjYSA9IF9UcCgwKSwgX19sbl9nMWNhID0gX1RwKDApOworICAgICAgICAgIF9UcCBfX3Nnbl9nMWNiID0gX1RwKDApLCBfX2xuX2cxY2IgPSBfVHAoMCk7CisgICAgICAgICAgX190cnkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX19zZ25fZzFjYSA9IF9fbG9nX2dhbW1hX3NpZ24oX19jIC0gX19hKTsKKyAgICAgICAgICAgICAgX19sbl9nMWNhID0gX19sb2dfZ2FtbWEoX19jIC0gX19hKTsKKyAgICAgICAgICAgICAgX19zZ25fZzFjYiA9IF9fbG9nX2dhbW1hX3NpZ24oX19jIC0gX19iKTsKKyAgICAgICAgICAgICAgX19sbl9nMWNiID0gX19sb2dfZ2FtbWEoX19jIC0gX19iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBfX2NhdGNoKC4uLikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX19vazEgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGJvb2wgX19vazIgPSB0cnVlOworICAgICAgICAgIF9UcCBfX3Nnbl9nMmEgPSBfVHAoMCksIF9fbG5fZzJhID0gX1RwKDApOworICAgICAgICAgIF9UcCBfX3Nnbl9nMmIgPSBfVHAoMCksIF9fbG5fZzJiID0gX1RwKDApOworICAgICAgICAgIF9fdHJ5CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9fc2duX2cyYSA9IF9fbG9nX2dhbW1hX3NpZ24oX19hKTsKKyAgICAgICAgICAgICAgX19sbl9nMmEgPSBfX2xvZ19nYW1tYShfX2EpOworICAgICAgICAgICAgICBfX3Nnbl9nMmIgPSBfX2xvZ19nYW1tYV9zaWduKF9fYik7CisgICAgICAgICAgICAgIF9fbG5fZzJiID0gX19sb2dfZ2FtbWEoX19iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBfX2NhdGNoKC4uLikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX19vazIgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGNvbnN0IF9UcCBfX3Nnbl9nYyA9IF9fbG9nX2dhbW1hX3NpZ24oX19jKTsKKyAgICAgICAgICBjb25zdCBfVHAgX19sbl9nYyA9IF9fbG9nX2dhbW1hKF9fYyk7CisgICAgICAgICAgY29uc3QgX1RwIF9fc2duX2dkID0gX19sb2dfZ2FtbWFfc2lnbihfX2QpOworICAgICAgICAgIGNvbnN0IF9UcCBfX2xuX2dkID0gX19sb2dfZ2FtbWEoX19kKTsKKyAgICAgICAgICBjb25zdCBfVHAgX19zZ25fZ21kID0gX19sb2dfZ2FtbWFfc2lnbigtX19kKTsKKyAgICAgICAgICBjb25zdCBfVHAgX19sbl9nbWQgPSBfX2xvZ19nYW1tYSgtX19kKTsKKworICAgICAgICAgIGNvbnN0IF9UcCBfX3NnbjEgPSBfX3Nnbl9nYyAqIF9fc2duX2dkICAqIF9fc2duX2cxY2EgKiBfX3Nnbl9nMWNiOworICAgICAgICAgIGNvbnN0IF9UcCBfX3NnbjIgPSBfX3Nnbl9nYyAqIF9fc2duX2dtZCAqIF9fc2duX2cyYSAgKiBfX3Nnbl9nMmI7CisKKyAgICAgICAgICBfVHAgX19wcmUxLCBfX3ByZTI7CisgICAgICAgICAgaWYgKF9fb2sxICYmIF9fb2syKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfVHAgX19sbl9wcmUxID0gX19sbl9nYyArIF9fbG5fZ2QgIC0gX19sbl9nMWNhIC0gX19sbl9nMWNiOworICAgICAgICAgICAgICBfVHAgX19sbl9wcmUyID0gX19sbl9nYyArIF9fbG5fZ21kIC0gX19sbl9nMmEgIC0gX19sbl9nMmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIF9fZCAqIHN0ZDo6bG9nKF9UcCgxKSAtIF9feCk7CisgICAgICAgICAgICAgIGlmIChfX2xuX3ByZTEgPCBfX2xvZ19tYXggJiYgX19sbl9wcmUyIDwgX19sb2dfbWF4KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIF9fcHJlMSA9IHN0ZDo6ZXhwKF9fbG5fcHJlMSk7CisgICAgICAgICAgICAgICAgICBfX3ByZTIgPSBzdGQ6OmV4cChfX2xuX3ByZTIpOworICAgICAgICAgICAgICAgICAgX19wcmUxICo9IF9fc2duMTsKKyAgICAgICAgICAgICAgICAgIF9fcHJlMiAqPSBfX3NnbjI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgc3RkOjpfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJPdmVyZmxvdyBvZiBnYW1tYSBmdW5jdGlvbnMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBfX2h5cGVyZ19yZWZsZWN0IikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChfX29rMSAmJiAhX19vazIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9UcCBfX2xuX3ByZTEgPSBfX2xuX2djICsgX19sbl9nZCAtIF9fbG5fZzFjYSAtIF9fbG5fZzFjYjsKKyAgICAgICAgICAgICAgaWYgKF9fbG5fcHJlMSA8IF9fbG9nX21heCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBfX3ByZTEgPSBzdGQ6OmV4cChfX2xuX3ByZTEpOworICAgICAgICAgICAgICAgICAgX19wcmUxICo9IF9fc2duMTsKKyAgICAgICAgICAgICAgICAgIF9fcHJlMiA9IF9UcCgwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBzdGQ6Ol9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oIk92ZXJmbG93IG9mIGdhbW1hIGZ1bmN0aW9ucyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIF9faHlwZXJnX3JlZmxlY3QiKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKCFfX29rMSAmJiBfX29rMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX1RwIF9fbG5fcHJlMiA9IF9fbG5fZ2MgKyBfX2xuX2dtZCAtIF9fbG5fZzJhIC0gX19sbl9nMmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIF9fZCAqIHN0ZDo6bG9nKF9UcCgxKSAtIF9feCk7CisgICAgICAgICAgICAgIGlmIChfX2xuX3ByZTIgPCBfX2xvZ19tYXgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgX19wcmUxID0gX1RwKDApOworICAgICAgICAgICAgICAgICAgX19wcmUyID0gc3RkOjpleHAoX19sbl9wcmUyKTsKKyAgICAgICAgICAgICAgICAgIF9fcHJlMiAqPSBfX3NnbjI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgc3RkOjpfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJPdmVyZmxvdyBvZiBnYW1tYSBmdW5jdGlvbnMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBfX2h5cGVyZ19yZWZsZWN0IikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9fcHJlMSA9IF9UcCgwKTsKKyAgICAgICAgICAgICAgX19wcmUyID0gX1RwKDApOworICAgICAgICAgICAgICBzdGQ6Ol9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oIlVuZGVyZmxvdyBvZiBnYW1tYSBmdW5jdGlvbnMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIF9faHlwZXJnX3JlZmxlY3QiKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBjb25zdCBfVHAgX19GMSA9IF9faHlwZXJnX3NlcmllcyhfX2EsIF9fYiwgX1RwKDEpIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCgxKSAtIF9feCk7CisgICAgICAgICAgY29uc3QgX1RwIF9fRjIgPSBfX2h5cGVyZ19zZXJpZXMoX19jIC0gX19hLCBfX2MgLSBfX2IsIF9UcCgxKSArIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAoMSkgLSBfX3gpOworCisgICAgICAgICAgY29uc3QgX1RwIF9fRiA9IF9fcHJlMSAqIF9fRjEgKyBfX3ByZTIgKiBfX0YyOworCisgICAgICAgICAgcmV0dXJuIF9fRjsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgUmV0dXJuIHRoZSBoeXBvZ2VvbWV0cmljIGZ1bmN0aW9uIEBmJCBfMkZfMShhLGI7Yzt4KSBAZiQuCisgICAgICoKKyAgICAgKiAgIFRoZSBoeXBvZ2VvbWV0cmljIGZ1bmN0aW9uIGlzIGRlZmluZWQgYnkKKyAgICAgKiAgIEBmWworICAgICAqICAgICBfMkZfMShhLGI7Yzt4KSA9IFxmcmFje1xHYW1tYShjKX17XEdhbW1hKGEpXEdhbW1hKGIpfQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIFxzdW1fe249MH1ee1xpbmZ0eX0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBcZnJhY3tcR2FtbWEoYStuKVxHYW1tYShiK24pfXtcR2FtbWEoYytuKX0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBcZnJhY3t4Xm59e24hfQorICAgICAqICAgQGZdCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSAgX19hICBUaGUgZmlyc3QgQGEgbnVtZXJhdG9yIHBhcmFtZXRlci4KKyAgICAgKiAgIEBwYXJhbSAgX19hICBUaGUgc2Vjb25kIEBhIG51bWVyYXRvciBwYXJhbWV0ZXIuCisgICAgICogICBAcGFyYW0gIF9fYyAgVGhlIEBhIGRlbm9taW5hdG9yIHBhcmFtZXRlci4KKyAgICAgKiAgIEBwYXJhbSAgX194ICBUaGUgYXJndW1lbnQgb2YgdGhlIGNvbmZsdWVudCBoeXBlcmdlb21ldHJpYyBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBjb25mbHVlbnQgaHlwZXJnZW9tZXRyaWMgZnVuY3Rpb24uCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICBfX2h5cGVyZyhjb25zdCBfVHAgX19hLCBjb25zdCBfVHAgX19iLCBjb25zdCBfVHAgX19jLCBjb25zdCBfVHAgX194KQorICAgIHsKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAgICBjb25zdCBfVHAgX19hX25pbnQgPSBzdGQ6OnRyMTo6bmVhcmJ5aW50KF9fYSk7CisgICAgICBjb25zdCBfVHAgX19iX25pbnQgPSBzdGQ6OnRyMTo6bmVhcmJ5aW50KF9fYik7CisgICAgICBjb25zdCBfVHAgX19jX25pbnQgPSBzdGQ6OnRyMTo6bmVhcmJ5aW50KF9fYyk7CisjZWxzZQorICAgICAgY29uc3QgX1RwIF9fYV9uaW50ID0gc3RhdGljX2Nhc3Q8aW50PihfX2EgKyBfVHAoMC41TCkpOworICAgICAgY29uc3QgX1RwIF9fYl9uaW50ID0gc3RhdGljX2Nhc3Q8aW50PihfX2IgKyBfVHAoMC41TCkpOworICAgICAgY29uc3QgX1RwIF9fY19uaW50ID0gc3RhdGljX2Nhc3Q8aW50PihfX2MgKyBfVHAoMC41TCkpOworI2VuZGlmCisgICAgICBjb25zdCBfVHAgX190b2xlciA9IF9UcCgxMDAwKSAqIHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6ZXBzaWxvbigpOworICAgICAgaWYgKHN0ZDo6YWJzKF9feCkgPj0gX1RwKDEpKQorICAgICAgICBzdGQ6Ol9fdGhyb3dfZG9tYWluX2Vycm9yKF9fTigiQXJndW1lbnQgb3V0c2lkZSB1bml0IGNpcmNsZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBfX2h5cGVyZy4iKSk7CisgICAgICBlbHNlIGlmIChfX2lzbmFuKF9fYSkgfHwgX19pc25hbihfX2IpCisgICAgICAgICAgICB8fCBfX2lzbmFuKF9fYykgfHwgX19pc25hbihfX3gpKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjpxdWlldF9OYU4oKTsKKyAgICAgIGVsc2UgaWYgKF9fY19uaW50ID09IF9fYyAmJiBfX2NfbmludCA8PSBfVHAoMCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmluZmluaXR5KCk7CisgICAgICBlbHNlIGlmIChzdGQ6OmFicyhfX2MgLSBfX2IpIDwgX190b2xlciB8fCBzdGQ6OmFicyhfX2MgLSBfX2EpIDwgX190b2xlcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6cG93KF9UcCgxKSAtIF9feCwgX19jIC0gX19hIC0gX19iKTsKKyAgICAgIGVsc2UgaWYgKF9fYSA+PSBfVHAoMCkgJiYgX19iID49IF9UcCgwKSAmJiBfX2MgPj0gX1RwKDApCisgICAgICAgICAgICAmJiBfX3ggPj0gX1RwKDApICYmIF9feCA8IF9UcCgwLjk5NUwpKQorICAgICAgICByZXR1cm4gX19oeXBlcmdfc2VyaWVzKF9fYSwgX19iLCBfX2MsIF9feCk7CisgICAgICBlbHNlIGlmIChzdGQ6OmFicyhfX2EpIDwgX1RwKDEwKSAmJiBzdGQ6OmFicyhfX2IpIDwgX1RwKDEwKSkKKyAgICAgICAgeworICAgICAgICAgIC8vICBGb3IgaW50ZWdlciBhIGFuZCBiIHRoZSBoeXBlcmdlb21ldHJpYyBmdW5jdGlvbiBpcyBhCisgICAgICAgICAgLy8gIGZpbml0ZSBwb2x5bm9taWFsLgorICAgICAgICAgIGlmIChfX2EgPCBfVHAoMCkgICYmICBzdGQ6OmFicyhfX2EgLSBfX2FfbmludCkgPCBfX3RvbGVyKQorICAgICAgICAgICAgcmV0dXJuIF9faHlwZXJnX3NlcmllcyhfX2FfbmludCwgX19iLCBfX2MsIF9feCk7CisgICAgICAgICAgZWxzZSBpZiAoX19iIDwgX1RwKDApICAmJiAgc3RkOjphYnMoX19iIC0gX19iX25pbnQpIDwgX190b2xlcikKKyAgICAgICAgICAgIHJldHVybiBfX2h5cGVyZ19zZXJpZXMoX19hLCBfX2JfbmludCwgX19jLCBfX3gpOworICAgICAgICAgIGVsc2UgaWYgKF9feCA8IC1fVHAoMC4yNUwpKQorICAgICAgICAgICAgcmV0dXJuIF9faHlwZXJnX2x1a2UoX19hLCBfX2IsIF9fYywgX194KTsKKyAgICAgICAgICBlbHNlIGlmIChfX3ggPCBfVHAoMC41TCkpCisgICAgICAgICAgICByZXR1cm4gX19oeXBlcmdfc2VyaWVzKF9fYSwgX19iLCBfX2MsIF9feCk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgKHN0ZDo6YWJzKF9fYykgPiBfVHAoMTApKQorICAgICAgICAgICAgICByZXR1cm4gX19oeXBlcmdfc2VyaWVzKF9fYSwgX19iLCBfX2MsIF9feCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHJldHVybiBfX2h5cGVyZ19yZWZsZWN0KF9fYSwgX19iLCBfX2MsIF9feCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIF9faHlwZXJnX2x1a2UoX19hLCBfX2IsIF9fYywgX194KTsKKyAgICB9CisKKyAgfSAvLyBuYW1lc3BhY2Ugc3RkOjp0cjE6Ol9fZGV0YWlsCit9Cit9CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfSFlQRVJHRU9NRVRSSUNfVENDCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9pbnR0eXBlcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvaW50dHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzhmZDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvaW50dHlwZXMuaApAQCAtMCwwICsxLDM0IEBACisvLyBUUjEgaW50dHlwZXMuaCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9pbnR0eXBlcy5oCisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX0lOVFRZUEVTX0gKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX0lOVFRZUEVTX0ggMQorCisjaW5jbHVkZSA8dHIxL2NpbnR0eXBlcz4KKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9JTlRUWVBFU19ICmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9sZWdlbmRyZV9mdW5jdGlvbi50Y2MgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9sZWdlbmRyZV9mdW5jdGlvbi50Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1OTgxNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL2xlZ2VuZHJlX2Z1bmN0aW9uLnRjYwpAQCAtMCwwICsxLDMwNSBAQAorLy8gU3BlY2lhbCBmdW5jdGlvbnMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorLy8KKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisvLworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9sZWdlbmRyZV9mdW5jdGlvbi50Y2MKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODIgVFIxOiA1LjIgIFNwZWNpYWwgZnVuY3Rpb25zCisvLworCisvLyBXcml0dGVuIGJ5IEVkd2FyZCBTbWl0aC1Sb3dsYW5kIGJhc2VkIG9uOgorLy8gICAoMSkgSGFuZGJvb2sgb2YgTWF0aGVtYXRpY2FsIEZ1bmN0aW9ucywKKy8vICAgICAgIGVkLiBNaWx0b24gQWJyYW1vd2l0eiBhbmQgSXJlbmUgQS4gU3RlZ3VuLAorLy8gICAgICAgRG92ZXIgUHVibGljYXRpb25zLAorLy8gICAgICAgU2VjdGlvbiA4LCBwcC4gMzMxLTM0MQorLy8gICAoMikgVGhlIEdudSBTY2llbnRpZmljIExpYnJhcnksIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nc2wKKy8vICAgKDMpIE51bWVyaWNhbCBSZWNpcGVzIGluIEMsIGJ5IFcuIEguIFByZXNzLCBTLiBBLiBUZXVrb2xza3ksCisvLyAgICAgICBXLiBULiBWZXR0ZXJsaW5nLCBCLiBQLiBGbGFubmVyeSwgQ2FtYnJpZGdlIFVuaXZlcnNpdHkgUHJlc3MgKDE5OTIpLAorLy8gICAgICAgMm5kIGVkLCBwcC4gMjUyLTI1NAorCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9MRUdFTkRSRV9GVU5DVElPTl9UQ0MKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX0xFR0VORFJFX0ZVTkNUSU9OX1RDQyAxCisKKyNpbmNsdWRlICJzcGVjaWFsX2Z1bmN0aW9uX3V0aWwuaCIKKworbmFtZXNwYWNlIHN0ZAoreworbmFtZXNwYWNlIHRyMQoreworCisgIC8vIFs1LjJdIFNwZWNpYWwgZnVuY3Rpb25zCisKKyAgLy8gSW1wbGVtZW50YXRpb24tc3BhY2UgZGV0YWlscy4KKyAgbmFtZXNwYWNlIF9fZGV0YWlsCisgIHsKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmICBSZXR1cm4gdGhlIExlZ2VuZHJlIHBvbHlub21pYWwgYnkgcmVjdXJzaW9uIG9uIG9yZGVyCisgICAgICogICAgICAgICAgIEBmJCBsIEBmJC4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBMZWdlbmRyZSBmdW5jdGlvbiBvZiBAZiQgbCBAZiQgYW5kIEBmJCB4IEBmJCwKKyAgICAgKiAgIEBmJCBQX2woeCkgQGYkLCBpcyBkZWZpbmVkIGJ5OgorICAgICAqICAgQGZbCisgICAgICogICAgIFBfbCh4KSA9IFxmcmFjezF9ezJebCBsIX1cZnJhY3tkXmx9e2R4Xmx9KHheMiAtIDEpXntsfQorICAgICAqICAgQGZdCisgICAgICogCisgICAgICogICBAcGFyYW0gIGwgIFRoZSBvcmRlciBvZiB0aGUgTGVnZW5kcmUgcG9seW5vbWlhbC4gIEBmJGwgPj0gMEBmJC4KKyAgICAgKiAgIEBwYXJhbSAgeCAgVGhlIGFyZ3VtZW50IG9mIHRoZSBMZWdlbmRyZSBwb2x5bm9taWFsLiAgQGYkfHh8IDw9IDFAZiQuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fcG9seV9sZWdlbmRyZV9wKGNvbnN0IHVuc2lnbmVkIGludCBfX2wsIGNvbnN0IF9UcCBfX3gpCisgICAgeworCisgICAgICBpZiAoKF9feCA8IF9UcCgtMSkpIHx8IChfX3ggPiBfVHAoKzEpKSkKKyAgICAgICAgc3RkOjpfX3Rocm93X2RvbWFpbl9lcnJvcihfX04oIkFyZ3VtZW50IG91dCBvZiByYW5nZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpbiBfX3BvbHlfbGVnZW5kcmVfcC4iKSk7CisgICAgICBlbHNlIGlmIChfX2lzbmFuKF9feCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OnF1aWV0X05hTigpOworICAgICAgZWxzZSBpZiAoX194ID09ICtfVHAoMSkpCisgICAgICAgIHJldHVybiArX1RwKDEpOworICAgICAgZWxzZSBpZiAoX194ID09IC1fVHAoMSkpCisgICAgICAgIHJldHVybiAoX19sICUgMiA9PSAxID8gLV9UcCgxKSA6ICtfVHAoMSkpOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fcF9sbTIgPSBfVHAoMSk7CisgICAgICAgICAgaWYgKF9fbCA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIF9fcF9sbTI7CisKKyAgICAgICAgICBfVHAgX19wX2xtMSA9IF9feDsKKyAgICAgICAgICBpZiAoX19sID09IDEpCisgICAgICAgICAgICByZXR1cm4gX19wX2xtMTsKKworICAgICAgICAgIF9UcCBfX3BfbCA9IDA7CisgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgX19sbCA9IDI7IF9fbGwgPD0gX19sOyArK19fbGwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8vICBUaGlzIGFycmFuZ2VtZW50IGlzIHN1cHBvc2VkIHRvIGJlIGJldHRlciBmb3Igcm91bmRvZmYKKyAgICAgICAgICAgICAgLy8gIHByb3RlY3Rpb24sIEFyZmtlbiwgMm5kIEVkLCBFcSAxMi4xN2EuCisgICAgICAgICAgICAgIF9fcF9sID0gX1RwKDIpICogX194ICogX19wX2xtMSAtIF9fcF9sbTIKKyAgICAgICAgICAgICAgICAgICAgLSAoX194ICogX19wX2xtMSAtIF9fcF9sbTIpIC8gX1RwKF9fbGwpOworICAgICAgICAgICAgICBfX3BfbG0yID0gX19wX2xtMTsKKyAgICAgICAgICAgICAgX19wX2xtMSA9IF9fcF9sOworICAgICAgICAgICAgfQorCisgICAgICAgICAgcmV0dXJuIF9fcF9sOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgUmV0dXJuIHRoZSBhc3NvY2lhdGVkIExlZ2VuZHJlIGZ1bmN0aW9uIGJ5IHJlY3Vyc2lvbgorICAgICAqICAgICAgICAgICBvbiBAZiQgbCBAZiQuCisgICAgICogCisgICAgICogICBUaGUgYXNzb2NpYXRlZCBMZWdlbmRyZSBmdW5jdGlvbiBpcyBkZXJpdmVkIGZyb20gdGhlIExlZ2VuZHJlIGZ1bmN0aW9uCisgICAgICogICBAZiQgUF9sKHgpIEBmJCBieSB0aGUgUm9kcmlndWVzIGZvcm11bGE6CisgICAgICogICBAZlsKKyAgICAgKiAgICAgUF9sXm0oeCkgPSAoMSAtIHheMilee20vMn1cZnJhY3tkXm19e2R4Xm19UF9sKHgpCisgICAgICogICBAZl0KKyAgICAgKiAKKyAgICAgKiAgIEBwYXJhbSAgbCAgVGhlIG9yZGVyIG9mIHRoZSBhc3NvY2lhdGVkIExlZ2VuZHJlIGZ1bmN0aW9uLgorICAgICAqICAgICAgICAgICAgICBAZiQgbCA+PSAwIEBmJC4KKyAgICAgKiAgIEBwYXJhbSAgbSAgVGhlIG9yZGVyIG9mIHRoZSBhc3NvY2lhdGVkIExlZ2VuZHJlIGZ1bmN0aW9uLgorICAgICAqICAgICAgICAgICAgICBAZiQgbSA8PSBsIEBmJC4KKyAgICAgKiAgIEBwYXJhbSAgeCAgVGhlIGFyZ3VtZW50IG9mIHRoZSBhc3NvY2lhdGVkIExlZ2VuZHJlIGZ1bmN0aW9uLgorICAgICAqICAgICAgICAgICAgICBAZiQgfHh8IDw9IDEgQGYkLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2Fzc29jX2xlZ2VuZHJlX3AoY29uc3QgdW5zaWduZWQgaW50IF9fbCwgY29uc3QgdW5zaWduZWQgaW50IF9fbSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwIF9feCkKKyAgICB7CisKKyAgICAgIGlmIChfX3ggPCBfVHAoLTEpIHx8IF9feCA+IF9UcCgrMSkpCisgICAgICAgIHN0ZDo6X190aHJvd19kb21haW5fZXJyb3IoX19OKCJBcmd1bWVudCBvdXQgb2YgcmFuZ2UiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaW4gX19hc3NvY19sZWdlbmRyZV9wLiIpKTsKKyAgICAgIGVsc2UgaWYgKF9fbSA+IF9fbCkKKyAgICAgICAgc3RkOjpfX3Rocm93X2RvbWFpbl9lcnJvcihfX04oIkRlZ3JlZSBvdXQgb2YgcmFuZ2UiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaW4gX19hc3NvY19sZWdlbmRyZV9wLiIpKTsKKyAgICAgIGVsc2UgaWYgKF9faXNuYW4oX194KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6cXVpZXRfTmFOKCk7CisgICAgICBlbHNlIGlmIChfX20gPT0gMCkKKyAgICAgICAgcmV0dXJuIF9fcG9seV9sZWdlbmRyZV9wKF9fbCwgX194KTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIF9UcCBfX3BfbW0gPSBfVHAoMSk7CisgICAgICAgICAgaWYgKF9fbSA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8vICBUd28gc3F1YXJlIHJvb3RzIHNlZW0gbW9yZSBhY2N1cmF0ZSBtb3JlIG9mIHRoZSB0aW1lCisgICAgICAgICAgICAgIC8vICB0aGFuIGp1c3Qgb25lLgorICAgICAgICAgICAgICBfVHAgX19yb290ID0gc3RkOjpzcXJ0KF9UcCgxKSAtIF9feCkgKiBzdGQ6OnNxcnQoX1RwKDEpICsgX194KTsKKyAgICAgICAgICAgICAgX1RwIF9fZmFjdCA9IF9UcCgxKTsKKyAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgX19pID0gMTsgX19pIDw9IF9fbTsgKytfX2kpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgX19wX21tICo9IC1fX2ZhY3QgKiBfX3Jvb3Q7CisgICAgICAgICAgICAgICAgICBfX2ZhY3QgKz0gX1RwKDIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoX19sID09IF9fbSkKKyAgICAgICAgICAgIHJldHVybiBfX3BfbW07CisKKyAgICAgICAgICBfVHAgX19wX21wMW0gPSBfVHAoMiAqIF9fbSArIDEpICogX194ICogX19wX21tOworICAgICAgICAgIGlmIChfX2wgPT0gX19tICsgMSkKKyAgICAgICAgICAgIHJldHVybiBfX3BfbXAxbTsKKworICAgICAgICAgIF9UcCBfX3BfbG0ybSA9IF9fcF9tbTsKKyAgICAgICAgICBfVHAgX19QX2xtMW0gPSBfX3BfbXAxbTsKKyAgICAgICAgICBfVHAgX19wX2xtID0gX1RwKDApOworICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IF9faiA9IF9fbSArIDI7IF9faiA8PSBfX2w7ICsrX19qKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfX3BfbG0gPSAoX1RwKDIgKiBfX2ogLSAxKSAqIF9feCAqIF9fUF9sbTFtCisgICAgICAgICAgICAgICAgICAgICAgLSBfVHAoX19qICsgX19tIC0gMSkgKiBfX3BfbG0ybSkgLyBfVHAoX19qIC0gX19tKTsKKyAgICAgICAgICAgICAgX19wX2xtMm0gPSBfX1BfbG0xbTsKKyAgICAgICAgICAgICAgX19QX2xtMW0gPSBfX3BfbG07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICByZXR1cm4gX19wX2xtOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgUmV0dXJuIHRoZSBzcGhlcmljYWwgYXNzb2NpYXRlZCBMZWdlbmRyZSBmdW5jdGlvbi4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBzcGhlcmljYWwgYXNzb2NpYXRlZCBMZWdlbmRyZSBmdW5jdGlvbiBvZiBAZiQgbCBAZiQsIEBmJCBtIEBmJCwKKyAgICAgKiAgIGFuZCBAZiQgXHRoZXRhIEBmJCBpcyBkZWZpbmVkIGFzIEBmJCBZX2xebShcdGhldGEsMCkgQGYkIHdoZXJlCisgICAgICogICBAZlsKKyAgICAgKiAgICAgIFlfbF5tKFx0aGV0YSxccGhpKSA9ICgtMSlebVtcZnJhY3soMmwrMSl9ezRccGl9CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXGZyYWN7KGwtbSkhfXsobCttKSF9XQorICAgICAqICAgICAgICAgICAgICAgICAgICAgUF9sXm0oXGNvc1x0aGV0YSkgXGV4cF57aW1ccGhpfQorICAgICAqICAgQGZdCisgICAgICogICBpcyB0aGUgc3BoZXJpY2FsIGhhcm1vbmljIGZ1bmN0aW9uIGFuZCBAZiQgUF9sXm0oeCkgQGYkIGlzIHRoZQorICAgICAqICAgYXNzb2NpYXRlZCBMZWdlbmRyZSBmdW5jdGlvbi4KKyAgICAgKiAKKyAgICAgKiAgIFRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIHRoZSBhc3NvY2lhdGVkIExlZ2VuZHJlIGZ1bmN0aW9uIGJ5CisgICAgICogICBhcmd1bWVudCAoQGYkeCA9IFxjb3MoXHRoZXRhKUBmJCkgYW5kIGJ5IGEgbm9ybWFsaXphdGlvbiBmYWN0b3IKKyAgICAgKiAgIGJ1dCB0aGlzIGZhY3RvciBpcyByYXRoZXIgbGFyZ2UgZm9yIGxhcmdlIEBmJCBsIEBmJCBhbmQgQGYkIG0gQGYkCisgICAgICogICBhbmQgc28gdGhpcyBmdW5jdGlvbiBpcyBzdGFibGUgZm9yIGxhcmdlciBkaWZmZXJlbmNlcyBvZiBAZiQgbCBAZiQKKyAgICAgKiAgIGFuZCBAZiQgbSBAZiQuCisgICAgICogCisgICAgICogICBAcGFyYW0gIGwgIFRoZSBvcmRlciBvZiB0aGUgc3BoZXJpY2FsIGFzc29jaWF0ZWQgTGVnZW5kcmUgZnVuY3Rpb24uCisgICAgICogICAgICAgICAgICAgIEBmJCBsID49IDAgQGYkLgorICAgICAqICAgQHBhcmFtICBtICBUaGUgb3JkZXIgb2YgdGhlIHNwaGVyaWNhbCBhc3NvY2lhdGVkIExlZ2VuZHJlIGZ1bmN0aW9uLgorICAgICAqICAgICAgICAgICAgICBAZiQgbSA8PSBsIEBmJC4KKyAgICAgKiAgIEBwYXJhbSAgdGhldGEgIFRoZSByYWRpYW4gYW5nbGUgYXJndW1lbnQgb2YgdGhlIHNwaGVyaWNhbCBhc3NvY2lhdGVkCisgICAgICogICAgICAgICAgICAgICAgICBMZWdlbmRyZSBmdW5jdGlvbi4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fc3BoX2xlZ2VuZHJlKGNvbnN0IHVuc2lnbmVkIGludCBfX2wsIGNvbnN0IHVuc2lnbmVkIGludCBfX20sCisgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwIF9fdGhldGEpCisgICAgeworICAgICAgaWYgKF9faXNuYW4oX190aGV0YSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OnF1aWV0X05hTigpOworCisgICAgICBjb25zdCBfVHAgX194ID0gc3RkOjpjb3MoX190aGV0YSk7CisKKyAgICAgIGlmIChfX2wgPCBfX20pCisgICAgICAgIHsKKyAgICAgICAgICBzdGQ6Ol9fdGhyb3dfZG9tYWluX2Vycm9yKF9fTigiQmFkIGFyZ3VtZW50ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19zcGhfbGVnZW5kcmUuIikpOworICAgICAgICB9CisgICAgICBlbHNlIGlmIChfX20gPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIF9UcCBfX1AgPSBfX3BvbHlfbGVnZW5kcmVfcChfX2wsIF9feCk7CisgICAgICAgICAgX1RwIF9fZmFjdCA9IHN0ZDo6c3FydChfVHAoMiAqIF9fbCArIDEpCisgICAgICAgICAgICAgICAgICAgICAvIChfVHAoNCkgKiBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fcGkoKSkpOworICAgICAgICAgIF9fUCAqPSBfX2ZhY3Q7CisgICAgICAgICAgcmV0dXJuIF9fUDsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoX194ID09IF9UcCgxKSB8fCBfX3ggPT0gLV9UcCgxKSkKKyAgICAgICAgeworICAgICAgICAgIC8vICBtID4gMCBoZXJlCisgICAgICAgICAgcmV0dXJuIF9UcCgwKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLy8gbSA+IDAgYW5kIHx4fCA8IDEgaGVyZQorCisgICAgICAgICAgLy8gU3RhcnRpbmcgdmFsdWUgZm9yIHJlY3Vyc2lvbi4KKyAgICAgICAgICAvLyBZX21ebSh4KSA9IHNxcnQoICgybSsxKS8oNHBpIG0pIGdhbW1hKG0rMS8yKS9nYW1tYShtKSApCisgICAgICAgICAgLy8gICAgICAgICAgICAgKC0xKV5tICgxLXheMileKG0vMikgLyBwaV4oMS80KQorICAgICAgICAgIGNvbnN0IF9UcCBfX3NnbiA9ICggX19tICUgMiA9PSAxID8gLV9UcCgxKSA6IF9UcCgxKSk7CisgICAgICAgICAgY29uc3QgX1RwIF9feV9tcDFtX2ZhY3RvciA9IF9feCAqIHN0ZDo6c3FydChfVHAoMiAqIF9fbSArIDMpKTsKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAgICAgICAgY29uc3QgX1RwIF9fbG5jaXJjID0gc3RkOjp0cjE6OmxvZzFwKC1fX3ggKiBfX3gpOworI2Vsc2UKKyAgICAgICAgICBjb25zdCBfVHAgX19sbmNpcmMgPSBzdGQ6OmxvZyhfVHAoMSkgLSBfX3ggKiBfX3gpOworI2VuZGlmCisgICAgICAgICAgLy8gIEdhbW1hKG0rMS8yKSAvIEdhbW1hKG0pCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorICAgICAgICAgIGNvbnN0IF9UcCBfX2xucG9jaCA9IHN0ZDo6dHIxOjpsZ2FtbWEoX1RwKF9fbSArIF9UcCgwLjVMKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RkOjp0cjE6OmxnYW1tYShfVHAoX19tKSk7CisjZWxzZQorICAgICAgICAgIGNvbnN0IF9UcCBfX2xucG9jaCA9IF9fbG9nX2dhbW1hKF9UcChfX20gKyBfVHAoMC41TCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIF9fbG9nX2dhbW1hKF9UcChfX20pKTsKKyNlbmRpZgorICAgICAgICAgIGNvbnN0IF9UcCBfX2xucHJlX3ZhbCA9CisgICAgICAgICAgICAgICAgICAgIC1fVHAoMC4yNUwpICogX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX2xucGkoKQorICAgICAgICAgICAgICAgICAgICArIF9UcCgwLjVMKSAqIChfX2xucG9jaCArIF9fbSAqIF9fbG5jaXJjKTsKKyAgICAgICAgICBfVHAgX19zciA9IHN0ZDo6c3FydCgoX1RwKDIpICsgX1RwKDEpIC8gX19tKQorICAgICAgICAgICAgICAgICAgIC8gKF9UcCg0KSAqIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waSgpKSk7CisgICAgICAgICAgX1RwIF9feV9tbSA9IF9fc2duICogX19zciAqIHN0ZDo6ZXhwKF9fbG5wcmVfdmFsKTsKKyAgICAgICAgICBfVHAgX195X21wMW0gPSBfX3lfbXAxbV9mYWN0b3IgKiBfX3lfbW07CisKKyAgICAgICAgICBpZiAoX19sID09IF9fbSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmV0dXJuIF9feV9tbTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChfX2wgPT0gX19tICsgMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmV0dXJuIF9feV9tcDFtOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX1RwIF9feV9sbSA9IF9UcCgwKTsKKworICAgICAgICAgICAgICAvLyBDb21wdXRlIFlfbF5tLCBsID4gbSsxLCB1cHdhcmQgcmVjdXJzaW9uIG9uIGwuCisgICAgICAgICAgICAgIGZvciAoIGludCBfX2xsID0gX19tICsgMjsgX19sbCA8PSBfX2w7ICsrX19sbCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjb25zdCBfVHAgX19yYXQxID0gX1RwKF9fbGwgLSBfX20pIC8gX1RwKF9fbGwgKyBfX20pOworICAgICAgICAgICAgICAgICAgY29uc3QgX1RwIF9fcmF0MiA9IF9UcChfX2xsIC0gX19tIC0gMSkgLyBfVHAoX19sbCArIF9fbSAtIDEpOworICAgICAgICAgICAgICAgICAgY29uc3QgX1RwIF9fZmFjdDEgPSBzdGQ6OnNxcnQoX19yYXQxICogX1RwKDIgKiBfX2xsICsgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIF9UcCgyICogX19sbCAtIDEpKTsKKyAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCBfX2ZhY3QyID0gc3RkOjpzcXJ0KF9fcmF0MSAqIF9fcmF0MiAqIF9UcCgyICogX19sbCArIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfVHAoMiAqIF9fbGwgLSAzKSk7CisgICAgICAgICAgICAgICAgICBfX3lfbG0gPSAoX194ICogX195X21wMW0gKiBfX2ZhY3QxCisgICAgICAgICAgICAgICAgICAgICAgICAgLSAoX19sbCArIF9fbSAtIDEpICogX195X21tICogX19mYWN0MikgLyBfVHAoX19sbCAtIF9fbSk7CisgICAgICAgICAgICAgICAgICBfX3lfbW0gPSBfX3lfbXAxbTsKKyAgICAgICAgICAgICAgICAgIF9feV9tcDFtID0gX195X2xtOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICByZXR1cm4gX195X2xtOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgIH0gLy8gbmFtZXNwYWNlIHN0ZDo6dHIxOjpfX2RldGFpbAorfQorfQorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX0xFR0VORFJFX0ZVTkNUSU9OX1RDQwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvbGltaXRzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9saW1pdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTVkMzYwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvbGltaXRzLmgKQEAgLTAsMCArMSwzNCBAQAorLy8gVFIxIGxpbWl0cy5oIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL2xpbWl0cy5oCisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX1RSMV9MSU1JVFNfSAorI2RlZmluZSBfVFIxX0xJTUlUU19IIDEKKworI2luY2x1ZGUgPHRyMS9jbGltaXRzPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL21hdGguaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL21hdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWQ2ZDY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvbWF0aC5oCkBAIC0wLDAgKzEsMTg2IEBACisvLyBUUjEgbWF0aC5oIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL21hdGguaAorICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9NQVRIX0gKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX01BVEhfSCAxCisKKyNpbmNsdWRlIDx0cjEvY21hdGg+CisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisKK3VzaW5nIHN0ZDo6dHIxOjphY29zOwordXNpbmcgc3RkOjp0cjE6OmFjb3NoOwordXNpbmcgc3RkOjp0cjE6OmFzaW47Cit1c2luZyBzdGQ6OnRyMTo6YXNpbmg7Cit1c2luZyBzdGQ6OnRyMTo6YXRhbjsKK3VzaW5nIHN0ZDo6dHIxOjphdGFuMjsKK3VzaW5nIHN0ZDo6dHIxOjphdGFuaDsKK3VzaW5nIHN0ZDo6dHIxOjpjYnJ0OwordXNpbmcgc3RkOjp0cjE6OmNlaWw7Cit1c2luZyBzdGQ6OnRyMTo6Y29weXNpZ247Cit1c2luZyBzdGQ6OnRyMTo6Y29zOwordXNpbmcgc3RkOjp0cjE6OmNvc2g7Cit1c2luZyBzdGQ6OnRyMTo6ZXJmOwordXNpbmcgc3RkOjp0cjE6OmVyZmM7Cit1c2luZyBzdGQ6OnRyMTo6ZXhwOwordXNpbmcgc3RkOjp0cjE6OmV4cDI7Cit1c2luZyBzdGQ6OnRyMTo6ZXhwbTE7Cit1c2luZyBzdGQ6OnRyMTo6ZmFiczsKK3VzaW5nIHN0ZDo6dHIxOjpmZGltOwordXNpbmcgc3RkOjp0cjE6OmZsb29yOwordXNpbmcgc3RkOjp0cjE6OmZtYTsKK3VzaW5nIHN0ZDo6dHIxOjpmbWF4OwordXNpbmcgc3RkOjp0cjE6OmZtaW47Cit1c2luZyBzdGQ6OnRyMTo6Zm1vZDsKK3VzaW5nIHN0ZDo6dHIxOjpmcmV4cDsKK3VzaW5nIHN0ZDo6dHIxOjpoeXBvdDsKK3VzaW5nIHN0ZDo6dHIxOjppbG9nYjsKK3VzaW5nIHN0ZDo6dHIxOjpsZGV4cDsKK3VzaW5nIHN0ZDo6dHIxOjpsZ2FtbWE7Cit1c2luZyBzdGQ6OnRyMTo6bGxyaW50OwordXNpbmcgc3RkOjp0cjE6Omxscm91bmQ7Cit1c2luZyBzdGQ6OnRyMTo6bG9nOwordXNpbmcgc3RkOjp0cjE6OmxvZzEwOwordXNpbmcgc3RkOjp0cjE6OmxvZzFwOwordXNpbmcgc3RkOjp0cjE6OmxvZzI7Cit1c2luZyBzdGQ6OnRyMTo6bG9nYjsKK3VzaW5nIHN0ZDo6dHIxOjpscmludDsKK3VzaW5nIHN0ZDo6dHIxOjpscm91bmQ7Cit1c2luZyBzdGQ6OnRyMTo6bmVhcmJ5aW50OwordXNpbmcgc3RkOjp0cjE6Om5leHRhZnRlcjsKK3VzaW5nIHN0ZDo6dHIxOjpuZXh0dG93YXJkOwordXNpbmcgc3RkOjp0cjE6OnBvdzsKK3VzaW5nIHN0ZDo6dHIxOjpyZW1haW5kZXI7Cit1c2luZyBzdGQ6OnRyMTo6cmVtcXVvOwordXNpbmcgc3RkOjp0cjE6OnJpbnQ7Cit1c2luZyBzdGQ6OnRyMTo6cm91bmQ7Cit1c2luZyBzdGQ6OnRyMTo6c2NhbGJsbjsKK3VzaW5nIHN0ZDo6dHIxOjpzY2FsYm47Cit1c2luZyBzdGQ6OnRyMTo6c2luOwordXNpbmcgc3RkOjp0cjE6OnNpbmg7Cit1c2luZyBzdGQ6OnRyMTo6c3FydDsKK3VzaW5nIHN0ZDo6dHIxOjp0YW47Cit1c2luZyBzdGQ6OnRyMTo6dGFuaDsKK3VzaW5nIHN0ZDo6dHIxOjp0Z2FtbWE7Cit1c2luZyBzdGQ6OnRyMTo6dHJ1bmM7CisKKyNlbmRpZgorCit1c2luZyBzdGQ6OnRyMTo6YXNzb2NfbGFndWVycmVmOwordXNpbmcgc3RkOjp0cjE6OmFzc29jX2xhZ3VlcnJlOwordXNpbmcgc3RkOjp0cjE6OmFzc29jX2xhZ3VlcnJlbDsKKwordXNpbmcgc3RkOjp0cjE6OmFzc29jX2xlZ2VuZHJlZjsKK3VzaW5nIHN0ZDo6dHIxOjphc3NvY19sZWdlbmRyZTsKK3VzaW5nIHN0ZDo6dHIxOjphc3NvY19sZWdlbmRyZWw7CisKK3VzaW5nIHN0ZDo6dHIxOjpiZXRhZjsKK3VzaW5nIHN0ZDo6dHIxOjpiZXRhOwordXNpbmcgc3RkOjp0cjE6OmJldGFsOworCit1c2luZyBzdGQ6OnRyMTo6Y29tcF9lbGxpbnRfMWY7Cit1c2luZyBzdGQ6OnRyMTo6Y29tcF9lbGxpbnRfMTsKK3VzaW5nIHN0ZDo6dHIxOjpjb21wX2VsbGludF8xbDsKKwordXNpbmcgc3RkOjp0cjE6OmNvbXBfZWxsaW50XzJmOwordXNpbmcgc3RkOjp0cjE6OmNvbXBfZWxsaW50XzI7Cit1c2luZyBzdGQ6OnRyMTo6Y29tcF9lbGxpbnRfMmw7CisKK3VzaW5nIHN0ZDo6dHIxOjpjb21wX2VsbGludF8zZjsKK3VzaW5nIHN0ZDo6dHIxOjpjb21wX2VsbGludF8zOwordXNpbmcgc3RkOjp0cjE6OmNvbXBfZWxsaW50XzNsOworCit1c2luZyBzdGQ6OnRyMTo6Y29uZl9oeXBlcmdmOwordXNpbmcgc3RkOjp0cjE6OmNvbmZfaHlwZXJnOwordXNpbmcgc3RkOjp0cjE6OmNvbmZfaHlwZXJnbDsKKwordXNpbmcgc3RkOjp0cjE6OmN5bF9iZXNzZWxfaWY7Cit1c2luZyBzdGQ6OnRyMTo6Y3lsX2Jlc3NlbF9pOwordXNpbmcgc3RkOjp0cjE6OmN5bF9iZXNzZWxfaWw7CisKK3VzaW5nIHN0ZDo6dHIxOjpjeWxfYmVzc2VsX2pmOwordXNpbmcgc3RkOjp0cjE6OmN5bF9iZXNzZWxfajsKK3VzaW5nIHN0ZDo6dHIxOjpjeWxfYmVzc2VsX2psOworCit1c2luZyBzdGQ6OnRyMTo6Y3lsX2Jlc3NlbF9rZjsKK3VzaW5nIHN0ZDo6dHIxOjpjeWxfYmVzc2VsX2s7Cit1c2luZyBzdGQ6OnRyMTo6Y3lsX2Jlc3NlbF9rbDsKKwordXNpbmcgc3RkOjp0cjE6OmN5bF9uZXVtYW5uZjsKK3VzaW5nIHN0ZDo6dHIxOjpjeWxfbmV1bWFubjsKK3VzaW5nIHN0ZDo6dHIxOjpjeWxfbmV1bWFubmw7CisKK3VzaW5nIHN0ZDo6dHIxOjplbGxpbnRfMWY7Cit1c2luZyBzdGQ6OnRyMTo6ZWxsaW50XzE7Cit1c2luZyBzdGQ6OnRyMTo6ZWxsaW50XzFsOworCit1c2luZyBzdGQ6OnRyMTo6ZWxsaW50XzJmOwordXNpbmcgc3RkOjp0cjE6OmVsbGludF8yOwordXNpbmcgc3RkOjp0cjE6OmVsbGludF8ybDsKKwordXNpbmcgc3RkOjp0cjE6OmVsbGludF8zZjsKK3VzaW5nIHN0ZDo6dHIxOjplbGxpbnRfMzsKK3VzaW5nIHN0ZDo6dHIxOjplbGxpbnRfM2w7CisKK3VzaW5nIHN0ZDo6dHIxOjpleHBpbnRmOwordXNpbmcgc3RkOjp0cjE6OmV4cGludDsKK3VzaW5nIHN0ZDo6dHIxOjpleHBpbnRsOworCit1c2luZyBzdGQ6OnRyMTo6aGVybWl0ZWY7Cit1c2luZyBzdGQ6OnRyMTo6aGVybWl0ZTsKK3VzaW5nIHN0ZDo6dHIxOjpoZXJtaXRlbDsKKwordXNpbmcgc3RkOjp0cjE6Omh5cGVyZ2Y7Cit1c2luZyBzdGQ6OnRyMTo6aHlwZXJnOwordXNpbmcgc3RkOjp0cjE6Omh5cGVyZ2w7CisKK3VzaW5nIHN0ZDo6dHIxOjpsYWd1ZXJyZWY7Cit1c2luZyBzdGQ6OnRyMTo6bGFndWVycmU7Cit1c2luZyBzdGQ6OnRyMTo6bGFndWVycmVsOworCit1c2luZyBzdGQ6OnRyMTo6bGVnZW5kcmVmOwordXNpbmcgc3RkOjp0cjE6OmxlZ2VuZHJlOwordXNpbmcgc3RkOjp0cjE6OmxlZ2VuZHJlbDsKKwordXNpbmcgc3RkOjp0cjE6OnJpZW1hbm5femV0YWY7Cit1c2luZyBzdGQ6OnRyMTo6cmllbWFubl96ZXRhOwordXNpbmcgc3RkOjp0cjE6OnJpZW1hbm5femV0YWw7CisKK3VzaW5nIHN0ZDo6dHIxOjpzcGhfYmVzc2VsZjsKK3VzaW5nIHN0ZDo6dHIxOjpzcGhfYmVzc2VsOwordXNpbmcgc3RkOjp0cjE6OnNwaF9iZXNzZWxsOworCit1c2luZyBzdGQ6OnRyMTo6c3BoX2xlZ2VuZHJlZjsKK3VzaW5nIHN0ZDo6dHIxOjpzcGhfbGVnZW5kcmU7Cit1c2luZyBzdGQ6OnRyMTo6c3BoX2xlZ2VuZHJlbDsKKwordXNpbmcgc3RkOjp0cjE6OnNwaF9uZXVtYW5uZjsKK3VzaW5nIHN0ZDo6dHIxOjpzcGhfbmV1bWFubjsKK3VzaW5nIHN0ZDo6dHIxOjpzcGhfbmV1bWFubmw7CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfTUFUSF9ICmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9tZW1vcnkgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9tZW1vcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIwMjFhMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL21lbW9yeQpAQCAtMCwwICsxLDY3IEBACisvLyA8dHIxL21lbW9yeT4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKgorICogQGZpbGUgdHIxL21lbW9yeQorICogVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX01FTU9SWQorI2RlZmluZSBfR0xJQkNYWF9UUjFfTUVNT1JZIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaWYgZGVmaW5lZChfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYKQorIyAgZXJyb3IgVFIxIGhlYWRlciBjYW5ub3QgYmUgaW5jbHVkZWQgZnJvbSBDKysweCBoZWFkZXIKKyNlbmRpZgorCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPGV4Y2VwdGlvbj4gICAgICAgIAkvLyBzdGQ6OmV4Y2VwdGlvbgorI2luY2x1ZGUgPHR5cGVpbmZvPiAgICAgICAgIAkvLyBzdGQ6OnR5cGVfaW5mbyBpbiBnZXRfZGVsZXRlcgorI2luY2x1ZGUgPGJpdHMvc3RsX2FsZ29iYXNlLmg+ICAvLyBzdGQ6OnN3YXAKKyNpbmNsdWRlIDxpb3Nmd2Q+ICAgICAgICAgICAJLy8gc3RkOjpiYXNpY19vc3RyZWFtCisjaW5jbHVkZSA8ZXh0L2F0b21pY2l0eS5oPgorI2luY2x1ZGUgPGV4dC9jb25jdXJyZW5jZS5oPgorI2luY2x1ZGUgPGJpdHMvZnVuY3RleGNlcHQuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9mdW5jdGlvbi5oPiAJLy8gc3RkOjpsZXNzCisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKyNpbmNsdWRlIDx0cjEvdHlwZV90cmFpdHM+CisKKyNpZiBkZWZpbmVkKF9HTElCQ1hYX0lOQ0xVREVfQVNfVFIxKQorIyAgaW5jbHVkZSA8dHIxX2ltcGwvYm9vc3Rfc3BfY291bnRlZF9iYXNlLmg+CisjICBpbmNsdWRlIDx0cjEvc2hhcmVkX3B0ci5oPgorI2Vsc2UKKyMgIGRlZmluZSBfR0xJQkNYWF9JTkNMVURFX0FTX1RSMQorIyAgZGVmaW5lIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9UUjEgbmFtZXNwYWNlIHRyMSB7CisjICBkZWZpbmUgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9UUjEgfQorIyAgZGVmaW5lIF9HTElCQ1hYX1RSMSB0cjE6OgorIyAgaW5jbHVkZSA8dHIxX2ltcGwvYm9vc3Rfc3BfY291bnRlZF9iYXNlLmg+CisjICBpbmNsdWRlIDx0cjEvc2hhcmVkX3B0ci5oPgorIyAgdW5kZWYgX0dMSUJDWFhfVFIxCisjICB1bmRlZiBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorIyAgdW5kZWYgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMQorIyAgdW5kZWYgX0dMSUJDWFhfSU5DTFVERV9BU19UUjEKKyNlbmRpZgorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX01FTU9SWQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvbW9kaWZpZWRfYmVzc2VsX2Z1bmMudGNjIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvbW9kaWZpZWRfYmVzc2VsX2Z1bmMudGNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiOGFlYmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9tb2RpZmllZF9iZXNzZWxfZnVuYy50Y2MKQEAgLTAsMCArMSw0MzYgQEAKKy8vIFNwZWNpYWwgZnVuY3Rpb25zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLy8KKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvbW9kaWZpZWRfYmVzc2VsX2Z1bmMudGNjCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyIFRSMTogNS4yICBTcGVjaWFsIGZ1bmN0aW9ucworLy8KKworLy8gV3JpdHRlbiBieSBFZHdhcmQgU21pdGgtUm93bGFuZC4KKy8vCisvLyBSZWZlcmVuY2VzOgorLy8gICAoMSkgSGFuZGJvb2sgb2YgTWF0aGVtYXRpY2FsIEZ1bmN0aW9ucywKKy8vICAgICAgIEVkLiBNaWx0b24gQWJyYW1vd2l0eiBhbmQgSXJlbmUgQS4gU3RlZ3VuLAorLy8gICAgICAgRG92ZXIgUHVibGljYXRpb25zLAorLy8gICAgICAgU2VjdGlvbiA5LCBwcC4gMzU1LTQzNCwgU2VjdGlvbiAxMCBwcC4gNDM1LTQ3OAorLy8gICAoMikgVGhlIEdudSBTY2llbnRpZmljIExpYnJhcnksIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nc2wKKy8vICAgKDMpIE51bWVyaWNhbCBSZWNpcGVzIGluIEMsIGJ5IFcuIEguIFByZXNzLCBTLiBBLiBUZXVrb2xza3ksCisvLyAgICAgICBXLiBULiBWZXR0ZXJsaW5nLCBCLiBQLiBGbGFubmVyeSwgQ2FtYnJpZGdlIFVuaXZlcnNpdHkgUHJlc3MgKDE5OTIpLAorLy8gICAgICAgMm5kIGVkLCBwcC4gMjQ2LTI0OS4KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfTU9ESUZJRURfQkVTU0VMX0ZVTkNfVENDCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9NT0RJRklFRF9CRVNTRUxfRlVOQ19UQ0MgMQorCisjaW5jbHVkZSAic3BlY2lhbF9mdW5jdGlvbl91dGlsLmgiCisKK25hbWVzcGFjZSBzdGQKK3sKK25hbWVzcGFjZSB0cjEKK3sKKworICAvLyBbNS4yXSBTcGVjaWFsIGZ1bmN0aW9ucworCisgIC8vIEltcGxlbWVudGF0aW9uLXNwYWNlIGRldGFpbHMuCisgIG5hbWVzcGFjZSBfX2RldGFpbAorICB7CisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgQ29tcHV0ZSB0aGUgbW9kaWZpZWQgQmVzc2VsIGZ1bmN0aW9ucyBAZiQgSV9cbnUoeCkgQGYkIGFuZAorICAgICAqICAgICAgICAgICBAZiQgS19cbnUoeCkgQGYkIGFuZCB0aGVpciBmaXJzdCBkZXJpdmF0aXZlcworICAgICAqICAgICAgICAgICBAZiQgSSdfXG51KHgpIEBmJCBhbmQgQGYkIEsnX1xudSh4KSBAZiQgcmVzcGVjdGl2ZWx5LgorICAgICAqICAgICAgICAgICBUaGVzZSBmb3VyIGZ1bmN0aW9ucyBhcmUgY29tcHV0ZWQgdG9nZXRoZXIgZm9yIG51bWVyaWNhbAorICAgICAqICAgICAgICAgICBzdGFiaWxpdHkuCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSAgX19udSAgVGhlIG9yZGVyIG9mIHRoZSBCZXNzZWwgZnVuY3Rpb25zLgorICAgICAqICAgQHBhcmFtICBfX3ggICBUaGUgYXJndW1lbnQgb2YgdGhlIEJlc3NlbCBmdW5jdGlvbnMuCisgICAgICogICBAcGFyYW0gIF9fSW51ICBUaGUgb3V0cHV0IHJlZ3VsYXIgbW9kaWZpZWQgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtICBfX0tudSAgVGhlIG91dHB1dCBpcnJlZ3VsYXIgbW9kaWZpZWQgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtICBfX0lwbnUgIFRoZSBvdXRwdXQgZGVyaXZhdGl2ZSBvZiB0aGUgcmVndWxhcgorICAgICAqICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkIEJlc3NlbCBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSAgX19LcG51ICBUaGUgb3V0cHV0IGRlcml2YXRpdmUgb2YgdGhlIGlycmVndWxhcgorICAgICAqICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkIEJlc3NlbCBmdW5jdGlvbi4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICBfX2Jlc3NlbF9payhjb25zdCBfVHAgX19udSwgY29uc3QgX1RwIF9feCwKKyAgICAgICAgICAgICAgICBfVHAgJiBfX0ludSwgX1RwICYgX19LbnUsIF9UcCAmIF9fSXBudSwgX1RwICYgX19LcG51KQorICAgIHsKKyAgICAgIGlmIChfX3ggPT0gX1RwKDApKQorICAgICAgICB7CisgICAgICAgICAgaWYgKF9fbnUgPT0gX1RwKDApKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfX0ludSA9IF9UcCgxKTsKKyAgICAgICAgICAgICAgX19JcG51ID0gX1RwKDApOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKF9fbnUgPT0gX1RwKDEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfX0ludSA9IF9UcCgwKTsKKyAgICAgICAgICAgICAgX19JcG51ID0gX1RwKDAuNUwpOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX19JbnUgPSBfVHAoMCk7CisgICAgICAgICAgICAgIF9fSXBudSA9IF9UcCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBfX0tudSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6aW5maW5pdHkoKTsKKyAgICAgICAgICBfX0twbnUgPSAtc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjppbmZpbml0eSgpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICBjb25zdCBfVHAgX19lcHMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmVwc2lsb24oKTsKKyAgICAgIGNvbnN0IF9UcCBfX2ZwX21pbiA9IF9UcCgxMCkgKiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmVwc2lsb24oKTsKKyAgICAgIGNvbnN0IGludCBfX21heF9pdGVyID0gMTUwMDA7CisgICAgICBjb25zdCBfVHAgX194X21pbiA9IF9UcCgyKTsKKworICAgICAgY29uc3QgaW50IF9fbmwgPSBzdGF0aWNfY2FzdDxpbnQ+KF9fbnUgKyBfVHAoMC41TCkpOworCisgICAgICBjb25zdCBfVHAgX19tdSA9IF9fbnUgLSBfX25sOworICAgICAgY29uc3QgX1RwIF9fbXUyID0gX19tdSAqIF9fbXU7CisgICAgICBjb25zdCBfVHAgX194aSA9IF9UcCgxKSAvIF9feDsKKyAgICAgIGNvbnN0IF9UcCBfX3hpMiA9IF9UcCgyKSAqIF9feGk7CisgICAgICBfVHAgX19oID0gX19udSAqIF9feGk7CisgICAgICBpZiAoIF9faCA8IF9fZnBfbWluICkKKyAgICAgICAgX19oID0gX19mcF9taW47CisgICAgICBfVHAgX19iID0gX194aTIgKiBfX251OworICAgICAgX1RwIF9fZCA9IF9UcCgwKTsKKyAgICAgIF9UcCBfX2MgPSBfX2g7CisgICAgICBpbnQgX19pOworICAgICAgZm9yICggX19pID0gMTsgX19pIDw9IF9fbWF4X2l0ZXI7ICsrX19pICkKKyAgICAgICAgeworICAgICAgICAgIF9fYiArPSBfX3hpMjsKKyAgICAgICAgICBfX2QgPSBfVHAoMSkgLyAoX19iICsgX19kKTsKKyAgICAgICAgICBfX2MgPSBfX2IgKyBfVHAoMSkgLyBfX2M7CisgICAgICAgICAgY29uc3QgX1RwIF9fZGVsID0gX19jICogX19kOworICAgICAgICAgIF9faCAqPSBfX2RlbDsKKyAgICAgICAgICBpZiAoc3RkOjphYnMoX19kZWwgLSBfVHAoMSkpIDwgX19lcHMpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgaWYgKF9faSA+IF9fbWF4X2l0ZXIpCisgICAgICAgIHN0ZDo6X190aHJvd19ydW50aW1lX2Vycm9yKF9fTigiQXJndW1lbnQgeCB0b28gbGFyZ2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIF9fYmVzc2VsX2puOyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHJ5IGFzeW1wdG90aWMgZXhwYW5zaW9uLiIpKTsKKyAgICAgIF9UcCBfX0ludWwgPSBfX2ZwX21pbjsKKyAgICAgIF9UcCBfX0lwbnVsID0gX19oICogX19JbnVsOworICAgICAgX1RwIF9fSW51bDEgPSBfX0ludWw7CisgICAgICBfVHAgX19JcG51MSA9IF9fSXBudWw7CisgICAgICBfVHAgX19mYWN0ID0gX19udSAqIF9feGk7CisgICAgICBmb3IgKGludCBfX2wgPSBfX25sOyBfX2wgPj0gMTsgLS1fX2wpCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCBfVHAgX19JbnV0ZW1wID0gX19mYWN0ICogX19JbnVsICsgX19JcG51bDsKKyAgICAgICAgICBfX2ZhY3QgLT0gX194aTsKKyAgICAgICAgICBfX0lwbnVsID0gX19mYWN0ICogX19JbnV0ZW1wICsgX19JbnVsOworICAgICAgICAgIF9fSW51bCA9IF9fSW51dGVtcDsKKyAgICAgICAgfQorICAgICAgX1RwIF9fZiA9IF9fSXBudWwgLyBfX0ludWw7CisgICAgICBfVHAgX19LbXUsIF9fS251MTsKKyAgICAgIGlmIChfX3ggPCBfX3hfbWluKQorICAgICAgICB7CisgICAgICAgICAgY29uc3QgX1RwIF9feDIgPSBfX3ggLyBfVHAoMik7CisgICAgICAgICAgY29uc3QgX1RwIF9fcGltdSA9IF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waSgpICogX19tdTsKKyAgICAgICAgICBjb25zdCBfVHAgX19mYWN0ID0gKHN0ZDo6YWJzKF9fcGltdSkgPCBfX2VwcworICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX1RwKDEpIDogX19waW11IC8gc3RkOjpzaW4oX19waW11KSk7CisgICAgICAgICAgX1RwIF9fZCA9IC1zdGQ6OmxvZyhfX3gyKTsKKyAgICAgICAgICBfVHAgX19lID0gX19tdSAqIF9fZDsKKyAgICAgICAgICBjb25zdCBfVHAgX19mYWN0MiA9IChzdGQ6OmFicyhfX2UpIDwgX19lcHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9UcCgxKSA6IHN0ZDo6c2luaChfX2UpIC8gX19lKTsKKyAgICAgICAgICBfVHAgX19nYW0xLCBfX2dhbTIsIF9fZ2FtcGwsIF9fZ2FtbWk7CisgICAgICAgICAgX19nYW1tYV90ZW1tZShfX211LCBfX2dhbTEsIF9fZ2FtMiwgX19nYW1wbCwgX19nYW1taSk7CisgICAgICAgICAgX1RwIF9fZmYgPSBfX2ZhY3QKKyAgICAgICAgICAgICAgICAgICAqIChfX2dhbTEgKiBzdGQ6OmNvc2goX19lKSArIF9fZ2FtMiAqIF9fZmFjdDIgKiBfX2QpOworICAgICAgICAgIF9UcCBfX3N1bSA9IF9fZmY7CisgICAgICAgICAgX19lID0gc3RkOjpleHAoX19lKTsKKyAgICAgICAgICBfVHAgX19wID0gX19lIC8gKF9UcCgyKSAqIF9fZ2FtcGwpOworICAgICAgICAgIF9UcCBfX3EgPSBfVHAoMSkgLyAoX1RwKDIpICogX19lICogX19nYW1taSk7CisgICAgICAgICAgX1RwIF9fYyA9IF9UcCgxKTsKKyAgICAgICAgICBfX2QgPSBfX3gyICogX194MjsKKyAgICAgICAgICBfVHAgX19zdW0xID0gX19wOworICAgICAgICAgIGludCBfX2k7CisgICAgICAgICAgZm9yIChfX2kgPSAxOyBfX2kgPD0gX19tYXhfaXRlcjsgKytfX2kpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9fZmYgPSAoX19pICogX19mZiArIF9fcCArIF9fcSkgLyAoX19pICogX19pIC0gX19tdTIpOworICAgICAgICAgICAgICBfX2MgKj0gX19kIC8gX19pOworICAgICAgICAgICAgICBfX3AgLz0gX19pIC0gX19tdTsKKyAgICAgICAgICAgICAgX19xIC89IF9faSArIF9fbXU7CisgICAgICAgICAgICAgIGNvbnN0IF9UcCBfX2RlbCA9IF9fYyAqIF9fZmY7CisgICAgICAgICAgICAgIF9fc3VtICs9IF9fZGVsOyAKKyAgICAgICAgICAgICAgY29uc3QgX1RwIF9fZGVsMSA9IF9fYyAqIChfX3AgLSBfX2kgKiBfX2ZmKTsKKyAgICAgICAgICAgICAgX19zdW0xICs9IF9fZGVsMTsKKyAgICAgICAgICAgICAgaWYgKHN0ZDo6YWJzKF9fZGVsKSA8IF9fZXBzICogc3RkOjphYnMoX19zdW0pKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChfX2kgPiBfX21heF9pdGVyKQorICAgICAgICAgICAgc3RkOjpfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJCZXNzZWwgayBzZXJpZXMgZmFpbGVkIHRvIGNvbnZlcmdlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19iZXNzZWxfam4uIikpOworICAgICAgICAgIF9fS211ID0gX19zdW07CisgICAgICAgICAgX19LbnUxID0gX19zdW0xICogX194aTI7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIF9UcCBfX2IgPSBfVHAoMikgKiAoX1RwKDEpICsgX194KTsKKyAgICAgICAgICBfVHAgX19kID0gX1RwKDEpIC8gX19iOworICAgICAgICAgIF9UcCBfX2RlbGggPSBfX2Q7CisgICAgICAgICAgX1RwIF9faCA9IF9fZGVsaDsKKyAgICAgICAgICBfVHAgX19xMSA9IF9UcCgwKTsKKyAgICAgICAgICBfVHAgX19xMiA9IF9UcCgxKTsKKyAgICAgICAgICBfVHAgX19hMSA9IF9UcCgwLjI1TCkgLSBfX211MjsKKyAgICAgICAgICBfVHAgX19xID0gX19jID0gX19hMTsKKyAgICAgICAgICBfVHAgX19hID0gLV9fYTE7CisgICAgICAgICAgX1RwIF9fcyA9IF9UcCgxKSArIF9fcSAqIF9fZGVsaDsKKyAgICAgICAgICBpbnQgX19pOworICAgICAgICAgIGZvciAoX19pID0gMjsgX19pIDw9IF9fbWF4X2l0ZXI7ICsrX19pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfX2EgLT0gMiAqIChfX2kgLSAxKTsKKyAgICAgICAgICAgICAgX19jID0gLV9fYSAqIF9fYyAvIF9faTsKKyAgICAgICAgICAgICAgY29uc3QgX1RwIF9fcW5ldyA9IChfX3ExIC0gX19iICogX19xMikgLyBfX2E7CisgICAgICAgICAgICAgIF9fcTEgPSBfX3EyOworICAgICAgICAgICAgICBfX3EyID0gX19xbmV3OworICAgICAgICAgICAgICBfX3EgKz0gX19jICogX19xbmV3OworICAgICAgICAgICAgICBfX2IgKz0gX1RwKDIpOworICAgICAgICAgICAgICBfX2QgPSBfVHAoMSkgLyAoX19iICsgX19hICogX19kKTsKKyAgICAgICAgICAgICAgX19kZWxoID0gKF9fYiAqIF9fZCAtIF9UcCgxKSkgKiBfX2RlbGg7CisgICAgICAgICAgICAgIF9faCArPSBfX2RlbGg7CisgICAgICAgICAgICAgIGNvbnN0IF9UcCBfX2RlbHMgPSBfX3EgKiBfX2RlbGg7CisgICAgICAgICAgICAgIF9fcyArPSBfX2RlbHM7CisgICAgICAgICAgICAgIGlmICggc3RkOjphYnMoX19kZWxzIC8gX19zKSA8IF9fZXBzICkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoX19pID4gX19tYXhfaXRlcikKKyAgICAgICAgICAgIHN0ZDo6X190aHJvd19ydW50aW1lX2Vycm9yKF9fTigiU3RlZWQncyBtZXRob2QgZmFpbGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19iZXNzZWxfam4uIikpOworICAgICAgICAgIF9faCA9IF9fYTEgKiBfX2g7CisgICAgICAgICAgX19LbXUgPSBzdGQ6OnNxcnQoX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpKCkgLyAoX1RwKDIpICogX194KSkKKyAgICAgICAgICAgICAgICAqIHN0ZDo6ZXhwKC1fX3gpIC8gX19zOworICAgICAgICAgIF9fS251MSA9IF9fS211ICogKF9fbXUgKyBfX3ggKyBfVHAoMC41TCkgLSBfX2gpICogX194aTsKKyAgICAgICAgfQorCisgICAgICBfVHAgX19LcG11ID0gX19tdSAqIF9feGkgKiBfX0ttdSAtIF9fS251MTsKKyAgICAgIF9UcCBfX0ludW11ID0gX194aSAvIChfX2YgKiBfX0ttdSAtIF9fS3BtdSk7CisgICAgICBfX0ludSA9IF9fSW51bXUgKiBfX0ludWwxIC8gX19JbnVsOworICAgICAgX19JcG51ID0gX19JbnVtdSAqIF9fSXBudTEgLyBfX0ludWw7CisgICAgICBmb3IgKCBfX2kgPSAxOyBfX2kgPD0gX19ubDsgKytfX2kgKQorICAgICAgICB7CisgICAgICAgICAgY29uc3QgX1RwIF9fS251dGVtcCA9IChfX211ICsgX19pKSAqIF9feGkyICogX19LbnUxICsgX19LbXU7CisgICAgICAgICAgX19LbXUgPSBfX0tudTE7CisgICAgICAgICAgX19LbnUxID0gX19LbnV0ZW1wOworICAgICAgICB9CisgICAgICBfX0tudSA9IF9fS211OworICAgICAgX19LcG51ID0gX19udSAqIF9feGkgKiBfX0ttdSAtIF9fS251MTsKKyAgCisgICAgICByZXR1cm47CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgUmV0dXJuIHRoZSByZWd1bGFyIG1vZGlmaWVkIEJlc3NlbCBmdW5jdGlvbiBvZiBvcmRlcgorICAgICAqICAgICAgICAgICBcZiQgXG51IFxmJDogXGYkIElfe1xudX0oeCkgXGYkLgorICAgICAqCisgICAgICogICBUaGUgcmVndWxhciBtb2RpZmllZCBjeWxpbmRyaWNhbCBCZXNzZWwgZnVuY3Rpb24gaXM6CisgICAgICogICBAZlsKKyAgICAgKiAgICBJX3tcbnV9KHgpID0gXHN1bV97az0wfV57XGluZnR5fQorICAgICAqICAgICAgICAgICAgICBcZnJhY3soeC8yKV57XG51ICsgMmt9fXtrIVxHYW1tYShcbnUraysxKX0KKyAgICAgKiAgIEBmXQorICAgICAqCisgICAgICogICBAcGFyYW0gIF9fbnUgIFRoZSBvcmRlciBvZiB0aGUgcmVndWxhciBtb2RpZmllZCBCZXNzZWwgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gIF9feCAgIFRoZSBhcmd1bWVudCBvZiB0aGUgcmVndWxhciBtb2RpZmllZCBCZXNzZWwgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgb3V0cHV0IHJlZ3VsYXIgbW9kaWZpZWQgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2N5bF9iZXNzZWxfaShjb25zdCBfVHAgX19udSwgY29uc3QgX1RwIF9feCkKKyAgICB7CisgICAgICBpZiAoX19udSA8IF9UcCgwKSB8fCBfX3ggPCBfVHAoMCkpCisgICAgICAgIHN0ZDo6X190aHJvd19kb21haW5fZXJyb3IoX19OKCJCYWQgYXJndW1lbnQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19jeWxfYmVzc2VsX2kuIikpOworICAgICAgZWxzZSBpZiAoX19pc25hbihfX251KSB8fCBfX2lzbmFuKF9feCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OnF1aWV0X05hTigpOworICAgICAgZWxzZSBpZiAoX194ICogX194IDwgX1RwKDEwKSAqIChfX251ICsgX1RwKDEpKSkKKyAgICAgICAgcmV0dXJuIF9fY3lsX2Jlc3NlbF9pal9zZXJpZXMoX19udSwgX194LCArX1RwKDEpLCAyMDApOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fSV9udSwgX19LX251LCBfX0lwX251LCBfX0twX251OworICAgICAgICAgIF9fYmVzc2VsX2lrKF9fbnUsIF9feCwgX19JX251LCBfX0tfbnUsIF9fSXBfbnUsIF9fS3BfbnUpOworICAgICAgICAgIHJldHVybiBfX0lfbnU7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmICBSZXR1cm4gdGhlIGlycmVndWxhciBtb2RpZmllZCBCZXNzZWwgZnVuY3Rpb24KKyAgICAgKiAgICAgICAgICAgXGYkIEtfe1xudX0oeCkgXGYkIG9mIG9yZGVyIFxmJCBcbnUgXGYkLgorICAgICAqCisgICAgICogICBUaGUgaXJyZWd1bGFyIG1vZGlmaWVkIEJlc3NlbCBmdW5jdGlvbiBpcyBkZWZpbmVkIGJ5OgorICAgICAqICAgQGZbCisgICAgICogICAgICBLX3tcbnV9KHgpID0gXGZyYWN7XHBpfXsyfQorICAgICAqICAgICAgICAgICAgICAgICAgIFxmcmFje0lfey1cbnV9KHgpIC0gSV97XG51fSh4KX17XHNpbiBcbnVccGl9CisgICAgICogICBAZl0KKyAgICAgKiAgIHdoZXJlIGZvciBpbnRlZ3JhbCBcZiQgXG51ID0gbiBcZiQgYSBsaW1pdCBpcyB0YWtlbjoKKyAgICAgKiAgIFxmJCBsaW1fe1xudSBcdG8gbn0gXGYkLgorICAgICAqCisgICAgICogICBAcGFyYW0gIF9fbnUgIFRoZSBvcmRlciBvZiB0aGUgaXJyZWd1bGFyIG1vZGlmaWVkIEJlc3NlbCBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSAgX194ICAgVGhlIGFyZ3VtZW50IG9mIHRoZSBpcnJlZ3VsYXIgbW9kaWZpZWQgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIG91dHB1dCBpcnJlZ3VsYXIgbW9kaWZpZWQgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2N5bF9iZXNzZWxfayhjb25zdCBfVHAgX19udSwgY29uc3QgX1RwIF9feCkKKyAgICB7CisgICAgICBpZiAoX19udSA8IF9UcCgwKSB8fCBfX3ggPCBfVHAoMCkpCisgICAgICAgIHN0ZDo6X190aHJvd19kb21haW5fZXJyb3IoX19OKCJCYWQgYXJndW1lbnQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19jeWxfYmVzc2VsX2suIikpOworICAgICAgZWxzZSBpZiAoX19pc25hbihfX251KSB8fCBfX2lzbmFuKF9feCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OnF1aWV0X05hTigpOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fSV9udSwgX19LX251LCBfX0lwX251LCBfX0twX251OworICAgICAgICAgIF9fYmVzc2VsX2lrKF9fbnUsIF9feCwgX19JX251LCBfX0tfbnUsIF9fSXBfbnUsIF9fS3BfbnUpOworICAgICAgICAgIHJldHVybiBfX0tfbnU7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmICBDb21wdXRlIHRoZSBzcGhlcmljYWwgbW9kaWZpZWQgQmVzc2VsIGZ1bmN0aW9ucworICAgICAqICAgICAgICAgICBAZiQgaV9uKHgpIEBmJCBhbmQgQGYkIGtfbih4KSBAZiQgYW5kIHRoZWlyIGZpcnN0CisgICAgICogICAgICAgICAgIGRlcml2YXRpdmVzIEBmJCBpJ19uKHgpIEBmJCBhbmQgQGYkIGsnX24oeCkgQGYkCisgICAgICogICAgICAgICAgIHJlc3BlY3RpdmVseS4KKyAgICAgKgorICAgICAqICAgQHBhcmFtICBfX24gIFRoZSBvcmRlciBvZiB0aGUgbW9kaWZpZWQgc3BoZXJpY2FsIEJlc3NlbCBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSAgX194ICBUaGUgYXJndW1lbnQgb2YgdGhlIG1vZGlmaWVkIHNwaGVyaWNhbCBCZXNzZWwgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gIF9faV9uICBUaGUgb3V0cHV0IHJlZ3VsYXIgbW9kaWZpZWQgc3BoZXJpY2FsIEJlc3NlbCBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSAgX19rX24gIFRoZSBvdXRwdXQgaXJyZWd1bGFyIG1vZGlmaWVkIHNwaGVyaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtICBfX2lwX24gIFRoZSBvdXRwdXQgZGVyaXZhdGl2ZSBvZiB0aGUgcmVndWxhciBtb2RpZmllZAorICAgICAqICAgICAgICAgICAgICAgICAgIHNwaGVyaWNhbCBCZXNzZWwgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gIF9fa3BfbiAgVGhlIG91dHB1dCBkZXJpdmF0aXZlIG9mIHRoZSBpcnJlZ3VsYXIgbW9kaWZpZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICBzcGhlcmljYWwgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqLworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHA+CisgICAgdm9pZAorICAgIF9fc3BoX2Jlc3NlbF9payhjb25zdCB1bnNpZ25lZCBpbnQgX19uLCBjb25zdCBfVHAgX194LAorICAgICAgICAgICAgICAgICAgICBfVHAgJiBfX2lfbiwgX1RwICYgX19rX24sIF9UcCAmIF9faXBfbiwgX1RwICYgX19rcF9uKQorICAgIHsKKyAgICAgIGNvbnN0IF9UcCBfX251ID0gX1RwKF9fbikgKyBfVHAoMC41TCk7CisKKyAgICAgIF9UcCBfX0lfbnUsIF9fSXBfbnUsIF9fS19udSwgX19LcF9udTsKKyAgICAgIF9fYmVzc2VsX2lrKF9fbnUsIF9feCwgX19JX251LCBfX0tfbnUsIF9fSXBfbnUsIF9fS3BfbnUpOworCisgICAgICBjb25zdCBfVHAgX19mYWN0b3IgPSBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fc3FydHBpbzIoKQorICAgICAgICAgICAgICAgICAgICAgICAgIC8gc3RkOjpzcXJ0KF9feCk7CisKKyAgICAgIF9faV9uID0gX19mYWN0b3IgKiBfX0lfbnU7CisgICAgICBfX2tfbiA9IF9fZmFjdG9yICogX19LX251OworICAgICAgX19pcF9uID0gX19mYWN0b3IgKiBfX0lwX251IC0gX19pX24gLyAoX1RwKDIpICogX194KTsKKyAgICAgIF9fa3BfbiA9IF9fZmFjdG9yICogX19LcF9udSAtIF9fa19uIC8gKF9UcCgyKSAqIF9feCk7CisKKyAgICAgIHJldHVybjsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmICBDb21wdXRlIHRoZSBBaXJ5IGZ1bmN0aW9ucworICAgICAqICAgICAgICAgICBAZiQgQWkoeCkgQGYkIGFuZCBAZiQgQmkoeCkgQGYkIGFuZCB0aGVpciBmaXJzdAorICAgICAqICAgICAgICAgICBkZXJpdmF0aXZlcyBAZiQgQWknKHgpIEBmJCBhbmQgQGYkIEJpKHgpIEBmJAorICAgICAqICAgICAgICAgICByZXNwZWN0aXZlbHkuCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSAgX19uICBUaGUgb3JkZXIgb2YgdGhlIEFpcnkgZnVuY3Rpb25zLgorICAgICAqICAgQHBhcmFtICBfX3ggIFRoZSBhcmd1bWVudCBvZiB0aGUgQWlyeSBmdW5jdGlvbnMuCisgICAgICogICBAcGFyYW0gIF9faV9uICBUaGUgb3V0cHV0IEFpcnkgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gIF9fa19uICBUaGUgb3V0cHV0IEFpcnkgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gIF9faXBfbiAgVGhlIG91dHB1dCBkZXJpdmF0aXZlIG9mIHRoZSBBaXJ5IGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtICBfX2twX24gIFRoZSBvdXRwdXQgZGVyaXZhdGl2ZSBvZiB0aGUgQWlyeSBmdW5jdGlvbi4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICBfX2FpcnkoY29uc3QgX1RwIF9feCwKKyAgICAgICAgICAgX1RwICYgX19BaSwgX1RwICYgX19CaSwgX1RwICYgX19BaXAsIF9UcCAmIF9fQmlwKQorICAgIHsKKyAgICAgIGNvbnN0IF9UcCBfX2Fic3ggPSBzdGQ6OmFicyhfX3gpOworICAgICAgY29uc3QgX1RwIF9fcm9vdHggPSBzdGQ6OnNxcnQoX19hYnN4KTsKKyAgICAgIGNvbnN0IF9UcCBfX3ogPSBfVHAoMikgKiBfX2Fic3ggKiBfX3Jvb3R4IC8gX1RwKDMpOworCisgICAgICBpZiAoX19pc25hbihfX3gpKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjpxdWlldF9OYU4oKTsKKyAgICAgIGVsc2UgaWYgKF9feCA+IF9UcCgwKSkKKyAgICAgICAgeworICAgICAgICAgIF9UcCBfX0lfbnUsIF9fSXBfbnUsIF9fS19udSwgX19LcF9udTsKKworICAgICAgICAgIF9fYmVzc2VsX2lrKF9UcCgxKSAvIF9UcCgzKSwgX196LCBfX0lfbnUsIF9fS19udSwgX19JcF9udSwgX19LcF9udSk7CisgICAgICAgICAgX19BaSA9IF9fcm9vdHggKiBfX0tfbnUKKyAgICAgICAgICAgICAgIC8gKF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19zcXJ0MygpCisgICAgICAgICAgICAgICAgKiBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fcGkoKSk7CisgICAgICAgICAgX19CaSA9IF9fcm9vdHggKiAoX19LX251IC8gX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpKCkKKyAgICAgICAgICAgICAgICAgKyBfVHAoMikgKiBfX0lfbnUgLyBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fc3FydDMoKSk7CisKKyAgICAgICAgICBfX2Jlc3NlbF9payhfVHAoMikgLyBfVHAoMyksIF9feiwgX19JX251LCBfX0tfbnUsIF9fSXBfbnUsIF9fS3BfbnUpOworICAgICAgICAgIF9fQWlwID0gLV9feCAqIF9fS19udQorICAgICAgICAgICAgICAgIC8gKF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19zcXJ0MygpCisgICAgICAgICAgICAgICAgICogX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpKCkpOworICAgICAgICAgIF9fQmlwID0gX194ICogKF9fS19udSAvIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waSgpCisgICAgICAgICAgICAgICAgICAgICAgKyBfVHAoMikgKiBfX0lfbnUKKyAgICAgICAgICAgICAgICAgICAgICAvIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19zcXJ0MygpKTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoX194IDwgX1RwKDApKQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fSl9udSwgX19KcF9udSwgX19OX251LCBfX05wX251OworCisgICAgICAgICAgX19iZXNzZWxfam4oX1RwKDEpIC8gX1RwKDMpLCBfX3osIF9fSl9udSwgX19OX251LCBfX0pwX251LCBfX05wX251KTsKKyAgICAgICAgICBfX0FpID0gX19yb290eCAqIChfX0pfbnUKKyAgICAgICAgICAgICAgICAgICAgLSBfX05fbnUgLyBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fc3FydDMoKSkgLyBfVHAoMik7CisgICAgICAgICAgX19CaSA9IC1fX3Jvb3R4ICogKF9fTl9udQorICAgICAgICAgICAgICAgICAgICArIF9fSl9udSAvIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19zcXJ0MygpKSAvIF9UcCgyKTsKKworICAgICAgICAgIF9fYmVzc2VsX2puKF9UcCgyKSAvIF9UcCgzKSwgX196LCBfX0pfbnUsIF9fTl9udSwgX19KcF9udSwgX19OcF9udSk7CisgICAgICAgICAgX19BaXAgPSBfX2Fic3ggKiAoX19OX251IC8gX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3NxcnQzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKyBfX0pfbnUpIC8gX1RwKDIpOworICAgICAgICAgIF9fQmlwID0gX19hYnN4ICogKF9fSl9udSAvIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19zcXJ0MygpCisgICAgICAgICAgICAgICAgICAgICAgICAgIC0gX19OX251KSAvIF9UcCgyKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLy8gIFJlZmVyZW5jZToKKyAgICAgICAgICAvLyAgICBBYnJhbW93aXR6ICYgU3RlZ3VuLCBwYWdlIDQ0NiBzZWN0aW9uIDEwLjQuNCBvbiBBaXJ5IGZ1bmN0aW9ucy4KKyAgICAgICAgICAvLyAgVGhlIG51bWJlciBpcyBBaSgwKSA9IDNeey0yLzN9L1xHYW1tYSgyLzMpLgorICAgICAgICAgIF9fQWkgPSBfVHAoMC4zNTUwMjgwNTM4ODc4MTcyMzkyNkwpOworICAgICAgICAgIF9fQmkgPSBfX0FpICogX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3NxcnQzKCk7CisKKyAgICAgICAgICAvLyAgUmVmZXJlbmNlOgorICAgICAgICAgIC8vICAgIEFicmFtb3dpdHogJiBTdGVndW4sIHBhZ2UgNDQ2IHNlY3Rpb24gMTAuNC41IG9uIEFpcnkgZnVuY3Rpb25zLgorICAgICAgICAgIC8vICBUaGUgbnVtYmVyIGlzIEFpJygwKSA9IC0zXnstMS8zfS9cR2FtbWEoMS8zKS4KKyAgICAgICAgICBfX0FpcCA9IC1fVHAoMC4yNTg4MTk0MDM3OTI4MDY3OTg0MEwpOworICAgICAgICAgIF9fQmlwID0gLV9fQWlwICogX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3NxcnQzKCk7CisgICAgICAgIH0KKworICAgICAgcmV0dXJuOworICAgIH0KKworICB9IC8vIG5hbWVzcGFjZSBzdGQ6OnRyMTo6X19kZXRhaWwKK30KK30KKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9NT0RJRklFRF9CRVNTRUxfRlVOQ19UQ0MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3BvbHlfaGVybWl0ZS50Y2MgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9wb2x5X2hlcm1pdGUudGNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ODI1YTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9wb2x5X2hlcm1pdGUudGNjCkBAIC0wLDAgKzEsMTI0IEBACisvLyBTcGVjaWFsIGZ1bmN0aW9ucyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL3BvbHlfaGVybWl0ZS50Y2MKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODIgVFIxOiA1LjIgIFNwZWNpYWwgZnVuY3Rpb25zCisvLworCisvLyBXcml0dGVuIGJ5IEVkd2FyZCBTbWl0aC1Sb3dsYW5kIGJhc2VkIG9uOgorLy8gICAoMSkgSGFuZGJvb2sgb2YgTWF0aGVtYXRpY2FsIEZ1bmN0aW9ucywKKy8vICAgICAgIEVkLiBNaWx0b24gQWJyYW1vd2l0eiBhbmQgSXJlbmUgQS4gU3RlZ3VuLAorLy8gICAgICAgRG92ZXIgUHVibGljYXRpb25zLCBTZWN0aW9uIDIyIHBwLiA3NzMtODAyCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX1BPTFlfSEVSTUlURV9UQ0MKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX1BPTFlfSEVSTUlURV9UQ0MgMQorCituYW1lc3BhY2Ugc3RkCit7CituYW1lc3BhY2UgdHIxCit7CisKKyAgLy8gWzUuMl0gU3BlY2lhbCBmdW5jdGlvbnMKKworICAvLyBJbXBsZW1lbnRhdGlvbi1zcGFjZSBkZXRhaWxzLgorICBuYW1lc3BhY2UgX19kZXRhaWwKKyAgeworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIEhlcm1pdGUgcG9seW5vbWlhbAorICAgICAqICAgICAgICAgIG9mIG9yZGVyIG46IFxmJCBIX24oeCkgXGYkIGJ5IHJlY3Vyc2lvbiBvbiBuLgorICAgICAqIAorICAgICAqICAgVGhlIEhlcm1pdGUgcG9seW5vbWlhbCBpcyBkZWZpbmVkIGJ5OgorICAgICAqICAgQGZbCisgICAgICogICAgIEhfbih4KSA9ICgtMSlebiBlXnt4XjJ9IFxmcmFje2Rebn17ZHhebn0gZV57LXheMn0KKyAgICAgKiAgIEBmXQorICAgICAqCisgICAgICogICBAcGFyYW0gX19uIFRoZSBvcmRlciBvZiB0aGUgSGVybWl0ZSBwb2x5bm9taWFsLgorICAgICAqICAgQHBhcmFtIF9feCBUaGUgYXJndW1lbnQgb2YgdGhlIEhlcm1pdGUgcG9seW5vbWlhbC4KKyAgICAgKiAgIEByZXR1cm4gVGhlIHZhbHVlIG9mIHRoZSBIZXJtaXRlIHBvbHlub21pYWwgb2Ygb3JkZXIgbgorICAgICAqICAgICAgICAgICBhbmQgYXJndW1lbnQgeC4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19wb2x5X2hlcm1pdGVfcmVjdXJzaW9uKGNvbnN0IHVuc2lnbmVkIGludCBfX24sIGNvbnN0IF9UcCBfX3gpCisgICAgeworICAgICAgLy8gIENvbXB1dGUgSF8wLgorICAgICAgX1RwIF9fSF8wID0gMTsKKyAgICAgIGlmIChfX24gPT0gMCkKKyAgICAgICAgcmV0dXJuIF9fSF8wOworCisgICAgICAvLyAgQ29tcHV0ZSBIXzEuCisgICAgICBfVHAgX19IXzEgPSAyICogX194OworICAgICAgaWYgKF9fbiA9PSAxKQorICAgICAgICByZXR1cm4gX19IXzE7CisKKyAgICAgIC8vICBDb21wdXRlIEhfbi4KKyAgICAgIF9UcCBfX0hfbiwgX19IX25tMSwgX19IX25tMjsKKyAgICAgIHVuc2lnbmVkIGludCBfX2k7CisgICAgICBmb3IgIChfX0hfbm0yID0gX19IXzAsIF9fSF9ubTEgPSBfX0hfMSwgX19pID0gMjsgX19pIDw9IF9fbjsgKytfX2kpCisgICAgICAgIHsKKyAgICAgICAgICBfX0hfbiA9IDIgKiAoX194ICogX19IX25tMSArIChfX2kgLSAxKSAqIF9fSF9ubTIpOworICAgICAgICAgIF9fSF9ubTIgPSBfX0hfbm0xOworICAgICAgICAgIF9fSF9ubTEgPSBfX0hfbjsKKyAgICAgICAgfQorCisgICAgICByZXR1cm4gX19IX247CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgSGVybWl0ZSBwb2x5bm9taWFsCisgICAgICogICAgICAgICAgb2Ygb3JkZXIgbjogXGYkIEhfbih4KSBcZiQuCisgICAgICogCisgICAgICogICBUaGUgSGVybWl0ZSBwb2x5bm9taWFsIGlzIGRlZmluZWQgYnk6CisgICAgICogICBAZlsKKyAgICAgKiAgICAgSF9uKHgpID0gKC0xKV5uIGVee3heMn0gXGZyYWN7ZF5ufXtkeF5ufSBlXnsteF4yfQorICAgICAqICAgQGZdCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSBfX24gVGhlIG9yZGVyIG9mIHRoZSBIZXJtaXRlIHBvbHlub21pYWwuCisgICAgICogICBAcGFyYW0gX194IFRoZSBhcmd1bWVudCBvZiB0aGUgSGVybWl0ZSBwb2x5bm9taWFsLgorICAgICAqICAgQHJldHVybiBUaGUgdmFsdWUgb2YgdGhlIEhlcm1pdGUgcG9seW5vbWlhbCBvZiBvcmRlciBuCisgICAgICogICAgICAgICAgIGFuZCBhcmd1bWVudCB4LgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgX19wb2x5X2hlcm1pdGUoY29uc3QgdW5zaWduZWQgaW50IF9fbiwgY29uc3QgX1RwIF9feCkKKyAgICB7CisgICAgICBpZiAoX19pc25hbihfX3gpKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjpxdWlldF9OYU4oKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIF9fcG9seV9oZXJtaXRlX3JlY3Vyc2lvbihfX24sIF9feCk7CisgICAgfQorCisgIH0gLy8gbmFtZXNwYWNlIHN0ZDo6dHIxOjpfX2RldGFpbAorfQorfQorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX1BPTFlfSEVSTUlURV9UQ0MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3BvbHlfbGFndWVycmUudGNjIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvcG9seV9sYWd1ZXJyZS50Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM5OTlkYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3BvbHlfbGFndWVycmUudGNjCkBAIC0wLDAgKzEsMzI5IEBACisvLyBTcGVjaWFsIGZ1bmN0aW9ucyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL3BvbHlfbGFndWVycmUudGNjCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyIFRSMTogNS4yICBTcGVjaWFsIGZ1bmN0aW9ucworLy8KKworLy8gV3JpdHRlbiBieSBFZHdhcmQgU21pdGgtUm93bGFuZCBiYXNlZCBvbjoKKy8vICAgKDEpIEhhbmRib29rIG9mIE1hdGhlbWF0aWNhbCBGdW5jdGlvbnMsCisvLyAgICAgICBFZC4gTWlsdG9uIEFicmFtb3dpdHogYW5kIElyZW5lIEEuIFN0ZWd1biwKKy8vICAgICAgIERvdmVyIFB1YmxpY2F0aW9ucywKKy8vICAgICAgIFNlY3Rpb24gMTMsIHBwLiA1MDktNTEwLCBTZWN0aW9uIDIyIHBwLiA3NzMtODAyCisvLyAgICgyKSBUaGUgR251IFNjaWVudGlmaWMgTGlicmFyeSwgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dzbAorCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9QT0xZX0xBR1VFUlJFX1RDQworI2RlZmluZSBfR0xJQkNYWF9UUjFfUE9MWV9MQUdVRVJSRV9UQ0MgMQorCituYW1lc3BhY2Ugc3RkCit7CituYW1lc3BhY2UgdHIxCit7CisKKyAgLy8gWzUuMl0gU3BlY2lhbCBmdW5jdGlvbnMKKworICAvLyBJbXBsZW1lbnRhdGlvbi1zcGFjZSBkZXRhaWxzLgorICBuYW1lc3BhY2UgX19kZXRhaWwKKyAgeworCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgYXNzb2NpYXRlZCBMYWd1ZXJyZSBwb2x5bm9taWFsIAorICAgICAqICAgICAgICAgIG9mIG9yZGVyIEBmJCBuIEBmJCwgZGVncmVlIEBmJCBcYWxwaGEgQGYkIGZvciBsYXJnZSBuLgorICAgICAqICAgQWJyYW1vd2l0eiAmIFN0ZWd1biwgMTMuNS4yMQorICAgICAqCisgICAgICogICBAcGFyYW0gX19uIFRoZSBvcmRlciBvZiB0aGUgTGFndWVycmUgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gX19hbHBoYSBUaGUgZGVncmVlIG9mIHRoZSBMYWd1ZXJyZSBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSBfX3ggVGhlIGFyZ3VtZW50IG9mIHRoZSBMYWd1ZXJyZSBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gVGhlIHZhbHVlIG9mIHRoZSBMYWd1ZXJyZSBmdW5jdGlvbiBvZiBvcmRlciBuLAorICAgICAqICAgICAgICAgICBkZWdyZWUgQGYkIFxhbHBoYSBAZiQsIGFuZCBhcmd1bWVudCB4LgorICAgICAqCisgICAgICogIFRoaXMgaXMgZnJvbSB0aGUgR05VIFNjaWVudGlmaWMgTGlicmFyeS4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHBhLCB0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19wb2x5X2xhZ3VlcnJlX2xhcmdlX24oY29uc3QgdW5zaWduZWQgX19uLCBjb25zdCBfVHBhIF9fYWxwaGExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCBfX3gpCisgICAgeworICAgICAgY29uc3QgX1RwIF9fYSA9IC1fVHAoX19uKTsKKyAgICAgIGNvbnN0IF9UcCBfX2IgPSBfVHAoX19hbHBoYTEpICsgX1RwKDEpOworICAgICAgY29uc3QgX1RwIF9fZXRhID0gX1RwKDIpICogX19iIC0gX1RwKDQpICogX19hOworICAgICAgY29uc3QgX1RwIF9fY29zMnRoID0gX194IC8gX19ldGE7CisgICAgICBjb25zdCBfVHAgX19zaW4ydGggPSBfVHAoMSkgLSBfX2NvczJ0aDsKKyAgICAgIGNvbnN0IF9UcCBfX3RoID0gc3RkOjphY29zKHN0ZDo6c3FydChfX2NvczJ0aCkpOworICAgICAgY29uc3QgX1RwIF9fcHJlX2ggPSBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fcGlfMigpCisgICAgICAgICAgICAgICAgICAgICAgICAqIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waV8yKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICogX19ldGEgKiBfX2V0YSAqIF9fY29zMnRoICogX19zaW4ydGg7CisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAgICBjb25zdCBfVHAgX19sZ19iID0gc3RkOjp0cjE6OmxnYW1tYShfVHAoX19uKSArIF9fYik7CisgICAgICBjb25zdCBfVHAgX19sbmZhY3QgPSBzdGQ6OnRyMTo6bGdhbW1hKF9UcChfX24gKyAxKSk7CisjZWxzZQorICAgICAgY29uc3QgX1RwIF9fbGdfYiA9IF9fbG9nX2dhbW1hKF9UcChfX24pICsgX19iKTsKKyAgICAgIGNvbnN0IF9UcCBfX2xuZmFjdCA9IF9fbG9nX2dhbW1hKF9UcChfX24gKyAxKSk7CisjZW5kaWYKKworICAgICAgX1RwIF9fcHJlX3Rlcm0xID0gX1RwKDAuNUwpICogKF9UcCgxKSAtIF9fYikKKyAgICAgICAgICAgICAgICAgICAgICAqIHN0ZDo6bG9nKF9UcCgwLjI1TCkgKiBfX3ggKiBfX2V0YSk7CisgICAgICBfVHAgX19wcmVfdGVybTIgPSBfVHAoMC4yNUwpICogc3RkOjpsb2coX19wcmVfaCk7CisgICAgICBfVHAgX19sbnByZSA9IF9fbGdfYiAtIF9fbG5mYWN0ICsgX1RwKDAuNUwpICogX194CisgICAgICAgICAgICAgICAgICAgICAgKyBfX3ByZV90ZXJtMSAtIF9fcHJlX3Rlcm0yOworICAgICAgX1RwIF9fc2VyX3Rlcm0xID0gc3RkOjpzaW4oX19hICogX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpKCkpOworICAgICAgX1RwIF9fc2VyX3Rlcm0yID0gc3RkOjpzaW4oX1RwKDAuMjVMKSAqIF9fZXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIChfVHAoMikgKiBfX3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBzdGQ6OnNpbihfVHAoMikgKiBfX3RoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waV80KCkpOworICAgICAgX1RwIF9fc2VyID0gX19zZXJfdGVybTEgKyBfX3Nlcl90ZXJtMjsKKworICAgICAgcmV0dXJuIHN0ZDo6ZXhwKF9fbG5wcmUpICogX19zZXI7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBFdmFsdWF0ZSB0aGUgcG9seW5vbWlhbCBiYXNlZCBvbiB0aGUgY29uZmx1ZW50IGh5cGVyZ2VvbWV0cmljCisgICAgICogICAgICAgICAgZnVuY3Rpb24gaW4gYSBzYWZlIHdheSwgd2l0aCBubyByZXN0cmljdGlvbiBvbiB0aGUgYXJndW1lbnRzLgorICAgICAqCisgICAgICogICBUaGUgYXNzb2NpYXRlZCBMYWd1ZXJyZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGJ5CisgICAgICogICBAZlsKKyAgICAgKiAgICAgICBMX25eXGFscGhhKHgpID0gXGZyYWN7KFxhbHBoYSArIDEpX259e24hfQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBfMUZfMSgtbjsgXGFscGhhICsgMTsgeCkKKyAgICAgKiAgIEBmXQorICAgICAqICAgd2hlcmUgQGYkIChcYWxwaGEpX24gQGYkIGlzIHRoZSBQb2NoaGFtbWVyIHN5bWJvbCBhbmQKKyAgICAgKiAgIEBmJCBfMUZfMShhOyBjOyB4KSBAZiQgaXMgdGhlIGNvbmZsdWVudCBoeXBlcmdlb21ldHJpYyBmdW5jdGlvbi4KKyAgICAgKgorICAgICAqICBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgeCAhPSAwLgorICAgICAqCisgICAgICogIFRoaXMgaXMgZnJvbSB0aGUgR05VIFNjaWVudGlmaWMgTGlicmFyeS4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHBhLCB0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19wb2x5X2xhZ3VlcnJlX2h5cGVyZyhjb25zdCB1bnNpZ25lZCBpbnQgX19uLCBjb25zdCBfVHBhIF9fYWxwaGExLAorCQkJICAgY29uc3QgX1RwIF9feCkKKyAgICB7CisgICAgICBjb25zdCBfVHAgX19iID0gX1RwKF9fYWxwaGExKSArIF9UcCgxKTsKKyAgICAgIGNvbnN0IF9UcCBfX214ID0gLV9feDsKKyAgICAgIGNvbnN0IF9UcCBfX3RjX3NnbiA9IChfX3ggPCBfVHAoMCkgPyBfVHAoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICA6ICgoX19uICUgMiA9PSAxKSA/IC1fVHAoMSkgOiBfVHAoMSkpKTsKKyAgICAgIC8vICBHZXQgfHh8Xm4vbiEKKyAgICAgIF9UcCBfX3RjID0gX1RwKDEpOworICAgICAgY29uc3QgX1RwIF9fYXggPSBzdGQ6OmFicyhfX3gpOworICAgICAgZm9yICh1bnNpZ25lZCBpbnQgX19rID0gMTsgX19rIDw9IF9fbjsgKytfX2spCisgICAgICAgIF9fdGMgKj0gKF9fYXggLyBfX2spOworCisgICAgICBfVHAgX190ZXJtID0gX190YyAqIF9fdGNfc2duOworICAgICAgX1RwIF9fc3VtID0gX190ZXJtOworICAgICAgZm9yIChpbnQgX19rID0gaW50KF9fbikgLSAxOyBfX2sgPj0gMDsgLS1fX2spCisgICAgICAgIHsKKyAgICAgICAgICBfX3Rlcm0gKj0gKChfX2IgKyBfVHAoX19rKSkgLyBfVHAoaW50KF9fbikgLSBfX2spKQorICAgICAgICAgICAgICAgICAgKiBfVHAoX19rICsgMSkgLyBfX214OworICAgICAgICAgIF9fc3VtICs9IF9fdGVybTsKKyAgICAgICAgfQorCisgICAgICByZXR1cm4gX19zdW07CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgYXNzb2NpYXRlZCBMYWd1ZXJyZSBwb2x5bm9taWFsIAorICAgICAqICAgICAgICAgIG9mIG9yZGVyIEBmJCBuIEBmJCwgZGVncmVlIEBmJCBcYWxwaGEgQGYkOiBAZiQgTF9uXlxhbHBoYSh4KSBAZiQKKyAgICAgKiAgICAgICAgICBieSByZWN1cnNpb24uCisgICAgICoKKyAgICAgKiAgIFRoZSBhc3NvY2lhdGVkIExhZ3VlcnJlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYnkKKyAgICAgKiAgIEBmWworICAgICAqICAgICAgIExfbl5cYWxwaGEoeCkgPSBcZnJhY3soXGFscGhhICsgMSlfbn17biF9CisgICAgICogICAgICAgICAgICAgICAgICAgICAgIF8xRl8xKC1uOyBcYWxwaGEgKyAxOyB4KQorICAgICAqICAgQGZdCisgICAgICogICB3aGVyZSBAZiQgKFxhbHBoYSlfbiBAZiQgaXMgdGhlIFBvY2hoYW1tZXIgc3ltYm9sIGFuZAorICAgICAqICAgQGYkIF8xRl8xKGE7IGM7IHgpIEBmJCBpcyB0aGUgY29uZmx1ZW50IGh5cGVyZ2VvbWV0cmljIGZ1bmN0aW9uLgorICAgICAqCisgICAgICogICBUaGUgYXNzb2NpYXRlZCBMYWd1ZXJyZSBwb2x5bm9taWFsIGlzIGRlZmluZWQgZm9yIGludGVncmFsCisgICAgICogICBAZiQgXGFscGhhID0gbSBAZiQgYnk6CisgICAgICogICBAZlsKKyAgICAgKiAgICAgICBMX25ebSh4KSA9ICgtMSlebSBcZnJhY3tkXm19e2R4Xm19IExfe24gKyBtfSh4KQorICAgICAqICAgQGZdCisgICAgICogICB3aGVyZSB0aGUgTGFndWVycmUgcG9seW5vbWlhbCBpcyBkZWZpbmVkIGJ5OgorICAgICAqICAgQGZbCisgICAgICogICAgICAgTF9uKHgpID0gXGZyYWN7ZV54fXtuIX0gXGZyYWN7ZF5ufXtkeF5ufSAoeF5uZV57LXh9KQorICAgICAqICAgQGZdCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSBfX24gVGhlIG9yZGVyIG9mIHRoZSBMYWd1ZXJyZSBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSBfX2FscGhhIFRoZSBkZWdyZWUgb2YgdGhlIExhZ3VlcnJlIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtIF9feCBUaGUgYXJndW1lbnQgb2YgdGhlIExhZ3VlcnJlIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiBUaGUgdmFsdWUgb2YgdGhlIExhZ3VlcnJlIGZ1bmN0aW9uIG9mIG9yZGVyIG4sCisgICAgICogICAgICAgICAgIGRlZ3JlZSBAZiQgXGFscGhhIEBmJCwgYW5kIGFyZ3VtZW50IHguCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwYSwgdHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fcG9seV9sYWd1ZXJyZV9yZWN1cnNpb24oY29uc3QgdW5zaWduZWQgaW50IF9fbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcGEgX19hbHBoYTEsIGNvbnN0IF9UcCBfX3gpCisgICAgeworICAgICAgLy8gICBDb21wdXRlIGxfMC4KKyAgICAgIF9UcCBfX2xfMCA9IF9UcCgxKTsKKyAgICAgIGlmICAoX19uID09IDApCisgICAgICAgIHJldHVybiBfX2xfMDsKKworICAgICAgLy8gIENvbXB1dGUgbF8xXmFscGhhLgorICAgICAgX1RwIF9fbF8xID0gLV9feCArIF9UcCgxKSArIF9UcChfX2FscGhhMSk7CisgICAgICBpZiAgKF9fbiA9PSAxKQorICAgICAgICByZXR1cm4gX19sXzE7CisKKyAgICAgIC8vICBDb21wdXRlIGxfbl5hbHBoYSBieSByZWN1cnNpb24gb24gbi4KKyAgICAgIF9UcCBfX2xfbjIgPSBfX2xfMDsKKyAgICAgIF9UcCBfX2xfbjEgPSBfX2xfMTsKKyAgICAgIF9UcCBfX2xfbiA9IF9UcCgwKTsKKyAgICAgIGZvciAgKHVuc2lnbmVkIGludCBfX25uID0gMjsgX19ubiA8PSBfX247ICsrX19ubikKKyAgICAgICAgeworICAgICAgICAgICAgX19sX24gPSAoX1RwKDIgKiBfX25uIC0gMSkgKyBfVHAoX19hbHBoYTEpIC0gX194KQorICAgICAgICAgICAgICAgICAgKiBfX2xfbjEgLyBfVHAoX19ubikKKyAgICAgICAgICAgICAgICAgIC0gKF9UcChfX25uIC0gMSkgKyBfVHAoX19hbHBoYTEpKSAqIF9fbF9uMiAvIF9UcChfX25uKTsKKyAgICAgICAgICAgIF9fbF9uMiA9IF9fbF9uMTsKKyAgICAgICAgICAgIF9fbF9uMSA9IF9fbF9uOworICAgICAgICB9CisKKyAgICAgIHJldHVybiBfX2xfbjsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmIFRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBhc3NvY2lhdGVkIExhZ3VlcnJlIHBvbHlub21pYWwKKyAgICAgKiAgICAgICAgICBvZiBvcmRlciBuLCBkZWdyZWUgQGYkIFxhbHBoYSBAZiQ6IEBmJCBMX25eYWxwaGEoeCkgQGYkLgorICAgICAqCisgICAgICogICBUaGUgYXNzb2NpYXRlZCBMYWd1ZXJyZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGJ5CisgICAgICogICBAZlsKKyAgICAgKiAgICAgICBMX25eXGFscGhhKHgpID0gXGZyYWN7KFxhbHBoYSArIDEpX259e24hfQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBfMUZfMSgtbjsgXGFscGhhICsgMTsgeCkKKyAgICAgKiAgIEBmXQorICAgICAqICAgd2hlcmUgQGYkIChcYWxwaGEpX24gQGYkIGlzIHRoZSBQb2NoaGFtbWVyIHN5bWJvbCBhbmQKKyAgICAgKiAgIEBmJCBfMUZfMShhOyBjOyB4KSBAZiQgaXMgdGhlIGNvbmZsdWVudCBoeXBlcmdlb21ldHJpYyBmdW5jdGlvbi4KKyAgICAgKgorICAgICAqICAgVGhlIGFzc29jaWF0ZWQgTGFndWVycmUgcG9seW5vbWlhbCBpcyBkZWZpbmVkIGZvciBpbnRlZ3JhbAorICAgICAqICAgQGYkIFxhbHBoYSA9IG0gQGYkIGJ5OgorICAgICAqICAgQGZbCisgICAgICogICAgICAgTF9uXm0oeCkgPSAoLTEpXm0gXGZyYWN7ZF5tfXtkeF5tfSBMX3tuICsgbX0oeCkKKyAgICAgKiAgIEBmXQorICAgICAqICAgd2hlcmUgdGhlIExhZ3VlcnJlIHBvbHlub21pYWwgaXMgZGVmaW5lZCBieToKKyAgICAgKiAgIEBmWworICAgICAqICAgICAgIExfbih4KSA9IFxmcmFje2VeeH17biF9IFxmcmFje2Rebn17ZHhebn0gKHhebmVeey14fSkKKyAgICAgKiAgIEBmXQorICAgICAqCisgICAgICogICBAcGFyYW0gX19uIFRoZSBvcmRlciBvZiB0aGUgTGFndWVycmUgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gX19hbHBoYSBUaGUgZGVncmVlIG9mIHRoZSBMYWd1ZXJyZSBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSBfX3ggVGhlIGFyZ3VtZW50IG9mIHRoZSBMYWd1ZXJyZSBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gVGhlIHZhbHVlIG9mIHRoZSBMYWd1ZXJyZSBmdW5jdGlvbiBvZiBvcmRlciBuLAorICAgICAqICAgICAgICAgICBkZWdyZWUgQGYkIFxhbHBoYSBAZiQsIGFuZCBhcmd1bWVudCB4LgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcGEsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgX19wb2x5X2xhZ3VlcnJlKGNvbnN0IHVuc2lnbmVkIGludCBfX24sIGNvbnN0IF9UcGEgX19hbHBoYTEsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCBfX3gpCisgICAgeworICAgICAgaWYgKF9feCA8IF9UcCgwKSkKKyAgICAgICAgc3RkOjpfX3Rocm93X2RvbWFpbl9lcnJvcihfX04oIk5lZ2F0aXZlIGFyZ3VtZW50ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIF9fcG9seV9sYWd1ZXJyZS4iKSk7CisgICAgICAvLyAgUmV0dXJuIE5hTiBvbiBOYU4gaW5wdXQuCisgICAgICBlbHNlIGlmIChfX2lzbmFuKF9feCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OnF1aWV0X05hTigpOworICAgICAgZWxzZSBpZiAoX19uID09IDApCisgICAgICAgIHJldHVybiBfVHAoMSk7CisgICAgICBlbHNlIGlmIChfX24gPT0gMSkKKyAgICAgICAgcmV0dXJuIF9UcCgxKSArIF9UcChfX2FscGhhMSkgLSBfX3g7CisgICAgICBlbHNlIGlmIChfX3ggPT0gX1RwKDApKQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fcHJvZCA9IF9UcChfX2FscGhhMSkgKyBfVHAoMSk7CisgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgX19rID0gMjsgX19rIDw9IF9fbjsgKytfX2spCisgICAgICAgICAgICBfX3Byb2QgKj0gKF9UcChfX2FscGhhMSkgKyBfVHAoX19rKSkgLyBfVHAoX19rKTsKKyAgICAgICAgICByZXR1cm4gX19wcm9kOworICAgICAgICB9CisgICAgICBlbHNlIGlmIChfX24gPiAxMDAwMDAwMCAmJiBfVHAoX19hbHBoYTEpID4gLV9UcCgxKQorICAgICAgICAgICAgJiYgX194IDwgX1RwKDIpICogKF9UcChfX2FscGhhMSkgKyBfVHAoMSkpICsgX1RwKDQgKiBfX24pKQorICAgICAgICByZXR1cm4gX19wb2x5X2xhZ3VlcnJlX2xhcmdlX24oX19uLCBfX2FscGhhMSwgX194KTsKKyAgICAgIGVsc2UgaWYgKF9UcChfX2FscGhhMSkgPj0gX1RwKDApCisgICAgICAgICAgIHx8IChfX3ggPiBfVHAoMCkgJiYgX1RwKF9fYWxwaGExKSA8IC1fVHAoX19uICsgMSkpKQorICAgICAgICByZXR1cm4gX19wb2x5X2xhZ3VlcnJlX3JlY3Vyc2lvbihfX24sIF9fYWxwaGExLCBfX3gpOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gX19wb2x5X2xhZ3VlcnJlX2h5cGVyZyhfX24sIF9fYWxwaGExLCBfX3gpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIGFzc29jaWF0ZWQgTGFndWVycmUgcG9seW5vbWlhbAorICAgICAqICAgICAgICAgIG9mIG9yZGVyIG4sIGRlZ3JlZSBtOiBAZiQgTF9uXm0oeCkgQGYkLgorICAgICAqCisgICAgICogICBUaGUgYXNzb2NpYXRlZCBMYWd1ZXJyZSBwb2x5bm9taWFsIGlzIGRlZmluZWQgZm9yIGludGVncmFsCisgICAgICogICBAZiQgXGFscGhhID0gbSBAZiQgYnk6CisgICAgICogICBAZlsKKyAgICAgKiAgICAgICBMX25ebSh4KSA9ICgtMSlebSBcZnJhY3tkXm19e2R4Xm19IExfe24gKyBtfSh4KQorICAgICAqICAgQGZdCisgICAgICogICB3aGVyZSB0aGUgTGFndWVycmUgcG9seW5vbWlhbCBpcyBkZWZpbmVkIGJ5OgorICAgICAqICAgQGZbCisgICAgICogICAgICAgTF9uKHgpID0gXGZyYWN7ZV54fXtuIX0gXGZyYWN7ZF5ufXtkeF5ufSAoeF5uZV57LXh9KQorICAgICAqICAgQGZdCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSBfX24gVGhlIG9yZGVyIG9mIHRoZSBMYWd1ZXJyZSBwb2x5bm9taWFsLgorICAgICAqICAgQHBhcmFtIF9fbSBUaGUgZGVncmVlIG9mIHRoZSBMYWd1ZXJyZSBwb2x5bm9taWFsLgorICAgICAqICAgQHBhcmFtIF9feCBUaGUgYXJndW1lbnQgb2YgdGhlIExhZ3VlcnJlIHBvbHlub21pYWwuCisgICAgICogICBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCBMYWd1ZXJyZSBwb2x5bm9taWFsIG9mIG9yZGVyIG4sCisgICAgICogICAgICAgICAgIGRlZ3JlZSBtLCBhbmQgYXJndW1lbnQgeC4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9UcAorICAgIF9fYXNzb2NfbGFndWVycmUoY29uc3QgdW5zaWduZWQgaW50IF9fbiwgY29uc3QgdW5zaWduZWQgaW50IF9fbSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCBfX3gpCisgICAgeworICAgICAgcmV0dXJuIF9fcG9seV9sYWd1ZXJyZTx1bnNpZ25lZCBpbnQsIF9UcD4oX19uLCBfX20sIF9feCk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgTGFndWVycmUgcG9seW5vbWlhbAorICAgICAqICAgICAgICAgIG9mIG9yZGVyIG46IEBmJCBMX24oeCkgQGYkLgorICAgICAqCisgICAgICogICBUaGUgTGFndWVycmUgcG9seW5vbWlhbCBpcyBkZWZpbmVkIGJ5OgorICAgICAqICAgQGZbCisgICAgICogICAgICAgTF9uKHgpID0gXGZyYWN7ZV54fXtuIX0gXGZyYWN7ZF5ufXtkeF5ufSAoeF5uZV57LXh9KQorICAgICAqICAgQGZdCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSBfX24gVGhlIG9yZGVyIG9mIHRoZSBMYWd1ZXJyZSBwb2x5bm9taWFsLgorICAgICAqICAgQHBhcmFtIF9feCBUaGUgYXJndW1lbnQgb2YgdGhlIExhZ3VlcnJlIHBvbHlub21pYWwuCisgICAgICogICBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgTGFndWVycmUgcG9seW5vbWlhbCBvZiBvcmRlciBuCisgICAgICogICAgICAgICAgIGFuZCBhcmd1bWVudCB4LgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgX19sYWd1ZXJyZShjb25zdCB1bnNpZ25lZCBpbnQgX19uLCBjb25zdCBfVHAgX194KQorICAgIHsKKyAgICAgIHJldHVybiBfX3BvbHlfbGFndWVycmU8dW5zaWduZWQgaW50LCBfVHA+KF9fbiwgMCwgX194KTsKKyAgICB9CisKKyAgfSAvLyBuYW1lc3BhY2Ugc3RkOjp0cjE6Ol9fZGV0YWlsCit9Cit9CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfUE9MWV9MQUdVRVJSRV9UQ0MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3JhbmRvbSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3JhbmRvbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzAzZDAzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvcmFuZG9tCkBAIC0wLDAgKzEsNTQgQEAKKy8vIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqCisgKiBAZmlsZSB0cjEvcmFuZG9tCisgKiBUaGlzIGlzIGEgVFIxIEMrKyBMaWJyYXJ5IGhlYWRlci4gCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfUkFORE9NCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9SQU5ET00gMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDxleHQvdHlwZV90cmFpdHMuaD4KKyNpbmNsdWRlIDxleHQvbnVtZXJpY190cmFpdHMuaD4KKyNpbmNsdWRlIDxiaXRzL2NvbmNlcHRfY2hlY2suaD4KKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorI2luY2x1ZGUgPHRyMS90eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDx0cjEvY21hdGg+CisKKyNpbmNsdWRlIDx0cjEvcmFuZG9tLmg+CisKKyNpZm5kZWYgX0dMSUJDWFhfRVhQT1JUX1RFTVBMQVRFCisjIGluY2x1ZGUgPHRyMS9yYW5kb20udGNjPgorI2VuZGlmCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfUkFORE9NCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9yYW5kb20uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3JhbmRvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNDNjODUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9yYW5kb20uaApAQCAtMCwwICsxLDI0MTAgQEAKKy8vIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqCisgKiBAZmlsZSB0cjEvcmFuZG9tLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfUkFORE9NX0gKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX1JBTkRPTV9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCituYW1lc3BhY2Ugc3RkCit7CituYW1lc3BhY2UgdHIxCit7CisgIC8vIFs1LjFdIFJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbgorCisgIC8qKgorICAgKiBAYWRkdG9ncm91cCB0cjFfcmFuZG9tIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorICAgKiBBIGZhY2lsaXR5IGZvciBnZW5lcmF0aW5nIHJhbmRvbSBudW1iZXJzIG9uIHNlbGVjdGVkIGRpc3RyaWJ1dGlvbnMuCisgICAqIEB7CisgICAqLworCisgIC8qCisgICAqIEltcGxlbWVudGF0aW9uLXNwYWNlIGRldGFpbHMuCisgICAqLworICBuYW1lc3BhY2UgX19kZXRhaWwKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwgaW50IF9fdywgCisJICAgICBib29sID0gX193IDwgc3RkOjpudW1lcmljX2xpbWl0czxfVUludFR5cGU+OjpkaWdpdHM+CisgICAgICBzdHJ1Y3QgX1NoaWZ0CisgICAgICB7IHN0YXRpYyBjb25zdCBfVUludFR5cGUgX192YWx1ZSA9IDA7IH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIGludCBfX3c+CisgICAgICBzdHJ1Y3QgX1NoaWZ0PF9VSW50VHlwZSwgX193LCB0cnVlPgorICAgICAgeyBzdGF0aWMgY29uc3QgX1VJbnRUeXBlIF9fdmFsdWUgPSBfVUludFR5cGUoMSkgPDwgX193OyB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfVHAgX19hLCBfVHAgX19jLCBfVHAgX19tLCBib29sPgorICAgICAgc3RydWN0IF9Nb2Q7CisKKyAgICAvLyBEaXNwYXRjaCBiYXNlZCBvbiBtb2R1bHVzIHZhbHVlIHRvIHByZXZlbnQgZGl2aWRlLWJ5LXplcm8gY29tcGlsZS10aW1lCisgICAgLy8gZXJyb3JzIHdoZW4gbSA9PSAwLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX1RwIF9fYSwgX1RwIF9fYywgX1RwIF9fbT4KKyAgICAgIGlubGluZSBfVHAKKyAgICAgIF9fbW9kKF9UcCBfX3gpCisgICAgICB7IHJldHVybiBfTW9kPF9UcCwgX19hLCBfX2MsIF9fbSwgX19tID09IDA+OjpfX2NhbGMoX194KTsgfQorCisgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fY29uZGl0aW9uYWxfdHlwZTwoc2l6ZW9mKHVuc2lnbmVkKSA9PSA0KSwKKwkJICAgIHVuc2lnbmVkLCB1bnNpZ25lZCBsb25nPjo6X190eXBlIF9VSW50MzJUeXBlOworCisgICAgLyoKKyAgICAgKiBBbiBhZGFwdG9yIGNsYXNzIGZvciBjb252ZXJ0aW5nIHRoZSBvdXRwdXQgb2YgYW55IEdlbmVyYXRvciBpbnRvCisgICAgICogdGhlIGlucHV0IGZvciBhIHNwZWNpZmljIERpc3RyaWJ1dGlvbi4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRW5naW5lLCB0eXBlbmFtZSBfRGlzdHJpYnV0aW9uPgorICAgICAgc3RydWN0IF9BZGFwdG9yCisgICAgICB7IAorCXR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX3JlZmVyZW5jZTxfRW5naW5lPjo6dHlwZSBfQkVuZ2luZTsKKwl0eXBlZGVmIHR5cGVuYW1lIF9CRW5naW5lOjpyZXN1bHRfdHlwZSAgICAgICAgICAgX0VuZ2luZV9yZXN1bHRfdHlwZTsKKwl0eXBlZGVmIHR5cGVuYW1lIF9EaXN0cmlidXRpb246OmlucHV0X3R5cGUgICAgICAgcmVzdWx0X3R5cGU7CisKKyAgICAgIHB1YmxpYzoKKwlfQWRhcHRvcihjb25zdCBfRW5naW5lJiBfX2cpCisJOiBfTV9nKF9fZykgeyB9CisKKwlyZXN1bHRfdHlwZQorCW1pbigpIGNvbnN0CisJeworCSAgcmVzdWx0X3R5cGUgX19yZXR1cm5fdmFsdWU7CisJICBpZiAoaXNfaW50ZWdyYWw8X0VuZ2luZV9yZXN1bHRfdHlwZT46OnZhbHVlCisJICAgICAgJiYgaXNfaW50ZWdyYWw8cmVzdWx0X3R5cGU+Ojp2YWx1ZSkKKwkgICAgX19yZXR1cm5fdmFsdWUgPSBfTV9nLm1pbigpOworCSAgZWxzZQorCSAgICBfX3JldHVybl92YWx1ZSA9IHJlc3VsdF90eXBlKDApOworCSAgcmV0dXJuIF9fcmV0dXJuX3ZhbHVlOworCX0KKworCXJlc3VsdF90eXBlCisJbWF4KCkgY29uc3QKKwl7CisJICByZXN1bHRfdHlwZSBfX3JldHVybl92YWx1ZTsKKwkgIGlmIChpc19pbnRlZ3JhbDxfRW5naW5lX3Jlc3VsdF90eXBlPjo6dmFsdWUKKwkgICAgICAmJiBpc19pbnRlZ3JhbDxyZXN1bHRfdHlwZT46OnZhbHVlKQorCSAgICBfX3JldHVybl92YWx1ZSA9IF9NX2cubWF4KCk7CisJICBlbHNlIGlmICghaXNfaW50ZWdyYWw8cmVzdWx0X3R5cGU+Ojp2YWx1ZSkKKwkgICAgX19yZXR1cm5fdmFsdWUgPSByZXN1bHRfdHlwZSgxKTsKKwkgIGVsc2UKKwkgICAgX19yZXR1cm5fdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHJlc3VsdF90eXBlPjo6bWF4KCkgLSAxOworCSAgcmV0dXJuIF9fcmV0dXJuX3ZhbHVlOworCX0KKworCS8qCisJICogQ29udmVydHMgYSB2YWx1ZSBnZW5lcmF0ZWQgYnkgdGhlIGFkYXB0ZWQgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKwkgKiBpbnRvIGEgdmFsdWUgaW4gdGhlIGlucHV0IGRvbWFpbiBmb3IgdGhlIGRlcGVuZGVudCByYW5kb20gbnVtYmVyCisJICogZGlzdHJpYnV0aW9uLgorCSAqCisJICogQmVjYXVzZSB0aGUgdHlwZSB0cmFpdHMgYXJlIGNvbXBpbGUgdGltZSBjb25zdGFudHMgb25seSB0aGUKKwkgKiBhcHByb3ByaWF0ZSBjbGF1c2Ugb2YgdGhlIGlmIHN0YXRlbWVudHMgd2lsbCBhY3R1YWxseSBiZSBlbWl0dGVkCisJICogYnkgdGhlIGNvbXBpbGVyLgorCSAqLworCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKSgpCisJeworCSAgcmVzdWx0X3R5cGUgX19yZXR1cm5fdmFsdWU7CisJICBpZiAoaXNfaW50ZWdyYWw8X0VuZ2luZV9yZXN1bHRfdHlwZT46OnZhbHVlCisJICAgICAgJiYgaXNfaW50ZWdyYWw8cmVzdWx0X3R5cGU+Ojp2YWx1ZSkKKwkgICAgX19yZXR1cm5fdmFsdWUgPSBfTV9nKCk7CisJICBlbHNlIGlmICghaXNfaW50ZWdyYWw8X0VuZ2luZV9yZXN1bHRfdHlwZT46OnZhbHVlCisJCSAgICYmICFpc19pbnRlZ3JhbDxyZXN1bHRfdHlwZT46OnZhbHVlKQorCSAgICBfX3JldHVybl92YWx1ZSA9IHJlc3VsdF90eXBlKF9NX2coKSAtIF9NX2cubWluKCkpCisJICAgICAgLyByZXN1bHRfdHlwZShfTV9nLm1heCgpIC0gX01fZy5taW4oKSk7CisJICBlbHNlIGlmIChpc19pbnRlZ3JhbDxfRW5naW5lX3Jlc3VsdF90eXBlPjo6dmFsdWUKKwkJICAgJiYgIWlzX2ludGVncmFsPHJlc3VsdF90eXBlPjo6dmFsdWUpCisJICAgIF9fcmV0dXJuX3ZhbHVlID0gcmVzdWx0X3R5cGUoX01fZygpIC0gX01fZy5taW4oKSkKKwkgICAgICAvIHJlc3VsdF90eXBlKF9NX2cubWF4KCkgLSBfTV9nLm1pbigpICsgcmVzdWx0X3R5cGUoMSkpOworCSAgZWxzZQorCSAgICBfX3JldHVybl92YWx1ZSA9ICgoKF9NX2coKSAtIF9NX2cubWluKCkpIAorCQkJICAgICAgIC8gKF9NX2cubWF4KCkgLSBfTV9nLm1pbigpKSkKKwkJCSAgICAgICogc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1heCgpKTsKKwkgIHJldHVybiBfX3JldHVybl92YWx1ZTsKKwl9CisKKyAgICAgIHByaXZhdGU6CisJX0VuZ2luZSBfTV9nOworICAgICAgfTsKKworICAgIC8vIFNwZWNpYWxpemF0aW9uIGZvciBfRW5naW5lKi4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRW5naW5lLCB0eXBlbmFtZSBfRGlzdHJpYnV0aW9uPgorICAgICAgc3RydWN0IF9BZGFwdG9yPF9FbmdpbmUqLCBfRGlzdHJpYnV0aW9uPgorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgX0VuZ2luZTo6cmVzdWx0X3R5cGUgICAgICBfRW5naW5lX3Jlc3VsdF90eXBlOworCXR5cGVkZWYgdHlwZW5hbWUgX0Rpc3RyaWJ1dGlvbjo6aW5wdXRfdHlwZSByZXN1bHRfdHlwZTsKKworICAgICAgcHVibGljOgorCV9BZGFwdG9yKF9FbmdpbmUqIF9fZykKKwk6IF9NX2coX19nKSB7IH0KKworCXJlc3VsdF90eXBlCisJbWluKCkgY29uc3QKKwl7CisJICByZXN1bHRfdHlwZSBfX3JldHVybl92YWx1ZTsKKwkgIGlmIChpc19pbnRlZ3JhbDxfRW5naW5lX3Jlc3VsdF90eXBlPjo6dmFsdWUKKwkgICAgICAmJiBpc19pbnRlZ3JhbDxyZXN1bHRfdHlwZT46OnZhbHVlKQorCSAgICBfX3JldHVybl92YWx1ZSA9IF9NX2ctPm1pbigpOworCSAgZWxzZQorCSAgICBfX3JldHVybl92YWx1ZSA9IHJlc3VsdF90eXBlKDApOworCSAgcmV0dXJuIF9fcmV0dXJuX3ZhbHVlOworCX0KKworCXJlc3VsdF90eXBlCisJbWF4KCkgY29uc3QKKwl7CisJICByZXN1bHRfdHlwZSBfX3JldHVybl92YWx1ZTsKKwkgIGlmIChpc19pbnRlZ3JhbDxfRW5naW5lX3Jlc3VsdF90eXBlPjo6dmFsdWUKKwkgICAgICAmJiBpc19pbnRlZ3JhbDxyZXN1bHRfdHlwZT46OnZhbHVlKQorCSAgICBfX3JldHVybl92YWx1ZSA9IF9NX2ctPm1heCgpOworCSAgZWxzZSBpZiAoIWlzX2ludGVncmFsPHJlc3VsdF90eXBlPjo6dmFsdWUpCisJICAgIF9fcmV0dXJuX3ZhbHVlID0gcmVzdWx0X3R5cGUoMSk7CisJICBlbHNlCisJICAgIF9fcmV0dXJuX3ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1heCgpIC0gMTsKKwkgIHJldHVybiBfX3JldHVybl92YWx1ZTsKKwl9CisKKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoKQorCXsKKwkgIHJlc3VsdF90eXBlIF9fcmV0dXJuX3ZhbHVlOworCSAgaWYgKGlzX2ludGVncmFsPF9FbmdpbmVfcmVzdWx0X3R5cGU+Ojp2YWx1ZQorCSAgICAgICYmIGlzX2ludGVncmFsPHJlc3VsdF90eXBlPjo6dmFsdWUpCisJICAgIF9fcmV0dXJuX3ZhbHVlID0gKCpfTV9nKSgpOworCSAgZWxzZSBpZiAoIWlzX2ludGVncmFsPF9FbmdpbmVfcmVzdWx0X3R5cGU+Ojp2YWx1ZQorCQkgICAmJiAhaXNfaW50ZWdyYWw8cmVzdWx0X3R5cGU+Ojp2YWx1ZSkKKwkgICAgX19yZXR1cm5fdmFsdWUgPSByZXN1bHRfdHlwZSgoKl9NX2cpKCkgLSBfTV9nLT5taW4oKSkKKwkgICAgICAvIHJlc3VsdF90eXBlKF9NX2ctPm1heCgpIC0gX01fZy0+bWluKCkpOworCSAgZWxzZSBpZiAoaXNfaW50ZWdyYWw8X0VuZ2luZV9yZXN1bHRfdHlwZT46OnZhbHVlCisJCSAgICYmICFpc19pbnRlZ3JhbDxyZXN1bHRfdHlwZT46OnZhbHVlKQorCSAgICBfX3JldHVybl92YWx1ZSA9IHJlc3VsdF90eXBlKCgqX01fZykoKSAtIF9NX2ctPm1pbigpKQorCSAgICAgIC8gcmVzdWx0X3R5cGUoX01fZy0+bWF4KCkgLSBfTV9nLT5taW4oKSArIHJlc3VsdF90eXBlKDEpKTsKKwkgIGVsc2UKKwkgICAgX19yZXR1cm5fdmFsdWUgPSAoKCgoKl9NX2cpKCkgLSBfTV9nLT5taW4oKSkgCisJCQkgICAgICAgLyAoX01fZy0+bWF4KCkgLSBfTV9nLT5taW4oKSkpCisJCQkgICAgICAqIHN0ZDo6bnVtZXJpY19saW1pdHM8cmVzdWx0X3R5cGU+OjptYXgoKSk7CisJICByZXR1cm4gX19yZXR1cm5fdmFsdWU7CisJfQorCisgICAgICBwcml2YXRlOgorCV9FbmdpbmUqIF9NX2c7CisgICAgICB9OworICB9IC8vIG5hbWVzcGFjZSBfX2RldGFpbAorCisgIC8qKgorICAgKiBQcm9kdWNlcyByYW5kb20gbnVtYmVycyBvbiBhIGdpdmVuIGRpc3RyaWJ1dGlvbiBmdW5jdGlvbiB1c2luZyBhCisgICAqIG5vbi11bmlmb3JtIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBlbmdpbmUuCisgICAqCisgICAqIEB0b2RvIHRoZSBlbmdpbmVfdmFsdWVfdHlwZSBuZWVkcyB0byBiZSBzdHVkaWVkIG1vcmUgY2FyZWZ1bGx5LgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0VuZ2luZSwgdHlwZW5hbWUgX0Rpc3Q+CisgICAgY2xhc3MgdmFyaWF0ZV9nZW5lcmF0b3IKKyAgICB7CisgICAgICAvLyBDb25jZXB0IHJlcXVpcmVtZW50cy4KKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlcyhfRW5naW5lLCBfQ29weUNvbnN0cnVjdGlibGVDb25jZXB0KQorICAgICAgLy8gIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlcyhfRW5naW5lLCBfRW5naW5lQ29uY2VwdCkKKyAgICAgIC8vICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX0Rpc3QsIF9FbmdpbmVDb25jZXB0KQorCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfRW5naW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX19kZXRhaWw6Ol9BZGFwdG9yPF9FbmdpbmUsIF9EaXN0PiAgICAgZW5naW5lX3ZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9EaXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRGlzdDo6cmVzdWx0X3R5cGUgICAgICAgICAgICByZXN1bHRfdHlwZTsKKworICAgICAgLy8gdHIxOjUuMS4xIHRhYmxlIDUuMSByZXF1aXJlbWVudAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPAorCWlzX2FyaXRobWV0aWM8cmVzdWx0X3R5cGU+Ojp2YWx1ZSwgcmVzdWx0X3R5cGU+OjpfX3R5cGUgX0lzVmFsaWRUeXBlOworCisgICAgICAvKioKKyAgICAgICAqIENvbnN0cnVjdHMgYSB2YXJpYXRlIGdlbmVyYXRvciB3aXRoIHRoZSB1bmlmb3JtIHJhbmRvbSBudW1iZXIKKyAgICAgICAqIGdlbmVyYXRvciBAcCBfX2VuZyBmb3IgdGhlIHJhbmRvbSBkaXN0cmlidXRpb24gQHAgX19kaXN0LgorICAgICAgICoKKyAgICAgICAqIEB0aHJvd3MgQW55IGV4Y2VwdGlvbnMgd2hpY2ggbWF5IHRocm93biBieSB0aGUgY29weSBjb25zdHJ1Y3RvcnMgb2YKKyAgICAgICAqIHRoZSBAcCBfRW5naW5lIG9yIEBwIF9EaXN0IG9iamVjdHMuCisgICAgICAgKi8KKyAgICAgIHZhcmlhdGVfZ2VuZXJhdG9yKGVuZ2luZV90eXBlIF9fZW5nLCBkaXN0cmlidXRpb25fdHlwZSBfX2Rpc3QpCisgICAgICA6IF9NX2VuZ2luZShfX2VuZyksIF9NX2Rpc3QoX19kaXN0KSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIHRoZSBuZXh0IGdlbmVyYXRlZCB2YWx1ZSBvbiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgb3BlcmF0b3IoKSgpCisgICAgICB7IHJldHVybiBfTV9kaXN0KF9NX2VuZ2luZSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBXVEY/CisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgcmVzdWx0X3R5cGUKKyAgICAgICAgb3BlcmF0b3IoKShfVHAgX192YWx1ZSkKKyAgICAgICAgeyByZXR1cm4gX01fZGlzdChfTV9lbmdpbmUsIF9fdmFsdWUpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogR2V0cyBhIHJlZmVyZW5jZSB0byB0aGUgdW5kZXJseWluZyB1bmlmb3JtIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgICAgKiBvYmplY3QuCisgICAgICAgKi8KKyAgICAgIGVuZ2luZV92YWx1ZV90eXBlJgorICAgICAgZW5naW5lKCkKKyAgICAgIHsgcmV0dXJuIF9NX2VuZ2luZTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEdldHMgYSBjb25zdCByZWZlcmVuY2UgdG8gdGhlIHVuZGVybHlpbmcgdW5pZm9ybSByYW5kb20gbnVtYmVyCisgICAgICAgKiBnZW5lcmF0b3Igb2JqZWN0LgorICAgICAgICovCisgICAgICBjb25zdCBlbmdpbmVfdmFsdWVfdHlwZSYKKyAgICAgIGVuZ2luZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9lbmdpbmU7IH0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIGEgcmVmZXJlbmNlIHRvIHRoZSB1bmRlcmx5aW5nIHJhbmRvbSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIGRpc3RyaWJ1dGlvbl90eXBlJgorICAgICAgZGlzdHJpYnV0aW9uKCkKKyAgICAgIHsgcmV0dXJuIF9NX2Rpc3Q7IH0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIGEgY29uc3QgcmVmZXJlbmNlIHRvIHRoZSB1bmRlcmx5aW5nIHJhbmRvbSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIGNvbnN0IGRpc3RyaWJ1dGlvbl90eXBlJgorICAgICAgZGlzdHJpYnV0aW9uKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2Rpc3Q7IH0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIHRoZSBjbG9zZWQgbG93ZXIgYm91bmQgb2YgdGhlIGRpc3RyaWJ1dGlvbiBpbnRlcnZhbC4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kaXN0cmlidXRpb24oKS5taW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEdldHMgdGhlIGNsb3NlZCB1cHBlciBib3VuZCBvZiB0aGUgZGlzdHJpYnV0aW9uIGludGVydmFsLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRpc3RyaWJ1dGlvbigpLm1heCgpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgZW5naW5lX3ZhbHVlX3R5cGUgX01fZW5naW5lOworICAgICAgZGlzdHJpYnV0aW9uX3R5cGUgX01fZGlzdDsKKyAgICB9OworCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIHRyMV9yYW5kb21fZ2VuZXJhdG9ycyBSYW5kb20gTnVtYmVyIEdlbmVyYXRvcnMKKyAgICogQGluZ3JvdXAgdHIxX3JhbmRvbQorICAgKgorICAgKiBUaGVzZSBjbGFzc2VzIGRlZmluZSBvYmplY3RzIHdoaWNoIHByb3ZpZGUgcmFuZG9tIG9yIHBzZXVkb3JhbmRvbQorICAgKiBudW1iZXJzLCBlaXRoZXIgZnJvbSBhIGRpc2NyZXRlIG9yIGEgY29udGludW91cyBpbnRlcnZhbC4gIFRoZQorICAgKiByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBzdXBwbGllZCBhcyBhIHBhcnQgb2YgdGhpcyBsaWJyYXJ5IGFyZQorICAgKiBhbGwgdW5pZm9ybSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcnMgd2hpY2ggcHJvdmlkZSBhIHNlcXVlbmNlIG9mCisgICAqIHJhbmRvbSBudW1iZXIgdW5pZm9ybWx5IGRpc3RyaWJ1dGVkIG92ZXIgdGhlaXIgcmFuZ2UuCisgICAqCisgICAqIEEgbnVtYmVyIGdlbmVyYXRvciBpcyBhIGZ1bmN0aW9uIG9iamVjdCB3aXRoIGFuIG9wZXJhdG9yKCkgdGhhdAorICAgKiB0YWtlcyB6ZXJvIGFyZ3VtZW50cyBhbmQgcmV0dXJucyBhIG51bWJlci4KKyAgICoKKyAgICogQSBjb21wbGlhbnQgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgbXVzdCBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcKKyAgICogcmVxdWlyZW1lbnRzLiAgPHRhYmxlIGJvcmRlcj0xIGNlbGxwYWRkaW5nPTEwIGNlbGxzcGFjaW5nPTA+CisgICAqIDxjYXB0aW9uIGFsaWduPXRvcD5SYW5kb20gTnVtYmVyIEdlbmVyYXRvciBSZXF1aXJlbWVudHM8L2NhcHRpb24+CisgICAqIDx0cj48dGQ+VG8gYmUgZG9jdW1lbnRlZC48L3RkPjwvdHI+IDwvdGFibGU+CisgICAqIAorICAgKiBAeworICAgKi8KKworICAvKioKKyAgICogQGJyaWVmIEEgbW9kZWwgb2YgYSBsaW5lYXIgY29uZ3J1ZW50aWFsIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICAgKgorICAgKiBBIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIHRoYXQgcHJvZHVjZXMgcHNldWRvcmFuZG9tIG51bWJlcnMgdXNpbmcgdGhlCisgICAqIGxpbmVhciBmdW5jdGlvbiBAZiR4X3tpKzF9XGxlZnRhcnJvdyhheF97aX0gKyBjKSBcYm1vZCBtIEBmJC4KKyAgICoKKyAgICogVGhlIHRlbXBsYXRlIHBhcmFtZXRlciBAcCBfVUludFR5cGUgbXVzdCBiZSBhbiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlCisgICAqIGxhcmdlIGVub3VnaCB0byBzdG9yZSB2YWx1ZXMgdXAgdG8gKF9fbS0xKS4gSWYgdGhlIHRlbXBsYXRlIHBhcmFtZXRlcgorICAgKiBAcCBfX20gaXMgMCwgdGhlIG1vZHVsdXMgQHAgX19tIHVzZWQgaXMKKyAgICogc3RkOjpudW1lcmljX2xpbWl0czxfVUludFR5cGU+OjptYXgoKSBwbHVzIDEuIE90aGVyd2lzZSwgdGhlIHRlbXBsYXRlCisgICAqIHBhcmFtZXRlcnMgQHAgX19hIGFuZCBAcCBfX2MgbXVzdCBiZSBsZXNzIHRoYW4gQHAgX19tLgorICAgKgorICAgKiBUaGUgc2l6ZSBvZiB0aGUgc3RhdGUgaXMgQGYkIDEgQGYkLgorICAgKi8KKyAgdGVtcGxhdGU8Y2xhc3MgX1VJbnRUeXBlLCBfVUludFR5cGUgX19hLCBfVUludFR5cGUgX19jLCBfVUludFR5cGUgX19tPgorICAgIGNsYXNzIGxpbmVhcl9jb25ncnVlbnRpYWwKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX1VJbnRUeXBlLCBfVW5zaWduZWRJbnRlZ2VyQ29uY2VwdCkKKyAgICAgIC8vICBfX2dsaWJjcHBfY2xhc3NfcmVxdWlyZXMoX19hIDwgX19tICYmIF9fYyA8IF9fbSkKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgZ2VuZXJhdGVkIHJhbmRvbSB2YWx1ZS4gKi8KKyAgICAgIHR5cGVkZWYgX1VJbnRUeXBlIHJlc3VsdF90eXBlOworCisgICAgICAvKiogVGhlIG11bHRpcGxpZXIuICovCisgICAgICBzdGF0aWMgY29uc3QgX1VJbnRUeXBlIG11bHRpcGxpZXIgPSBfX2E7CisgICAgICAvKiogQW4gaW5jcmVtZW50LiAqLworICAgICAgc3RhdGljIGNvbnN0IF9VSW50VHlwZSBpbmNyZW1lbnQgPSBfX2M7CisgICAgICAvKiogVGhlIG1vZHVsdXMuICovCisgICAgICBzdGF0aWMgY29uc3QgX1VJbnRUeXBlIG1vZHVsdXMgPSBfX207CisKKyAgICAgIC8qKgorICAgICAgICogQ29uc3RydWN0cyBhICVsaW5lYXJfY29uZ3J1ZW50aWFsIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZSB3aXRoCisgICAgICAgKiBzZWVkIEBwIF9fcy4gIFRoZSBkZWZhdWx0IHNlZWQgdmFsdWUgaXMgMS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19zIFRoZSBpbml0aWFsIHNlZWQgdmFsdWUuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBsaW5lYXJfY29uZ3J1ZW50aWFsKHVuc2lnbmVkIGxvbmcgX194MCA9IDEpCisgICAgICB7IHRoaXMtPnNlZWQoX194MCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBDb25zdHJ1Y3RzIGEgJWxpbmVhcl9jb25ncnVlbnRpYWwgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lCisgICAgICAgKiBzZWVkZWQgZnJvbSB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIEBwIF9fZy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19nIFRoZSBzZWVkIGdlbmVyYXRvciBmdW5jdGlvbi4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0dlbj4KKyAgICAgICAgbGluZWFyX2NvbmdydWVudGlhbChfR2VuJiBfX2cpCisgICAgICAgIHsgdGhpcy0+c2VlZChfX2cpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogUmVzZWVkcyB0aGUgJWxpbmVhcl9jb25ncnVlbnRpYWwgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lCisgICAgICAgKiBzZXF1ZW5jZSB0byB0aGUgc2VlZCBAZyBfX3MuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fcyBUaGUgbmV3IHNlZWQuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHNlZWQodW5zaWduZWQgbG9uZyBfX3MgPSAxKTsKKworICAgICAgLyoqCisgICAgICAgKiBSZXNlZWRzIHRoZSAlbGluZWFyX2NvbmdydWVudGlhbCByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUKKyAgICAgICAqIHNlcXVlbmNlIHVzaW5nIHZhbHVlcyBmcm9tIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gQHAgX19nLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2cgdGhlIHNlZWQgZ2VuZXJhdG9yIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfR2VuPgorICAgICAgICB2b2lkCisgICAgICAgIHNlZWQoX0dlbiYgX19nKQorICAgICAgICB7IHNlZWQoX19nLCB0eXBlbmFtZSBpc19mdW5kYW1lbnRhbDxfR2VuPjo6dHlwZSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEdldHMgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIHZhbHVlIGluIHRoZSBvdXRwdXQgcmFuZ2UuCisgICAgICAgKgorICAgICAgICogVGhlIG1pbmltdW0gZGVwZW5kcyBvbiB0aGUgQHAgX19jIHBhcmFtZXRlcjogaWYgaXQgaXMgemVybywgdGhlCisgICAgICAgKiBtaW5pbXVtIGdlbmVyYXRlZCBtdXN0IGJlID4gMCwgb3RoZXJ3aXNlIDAgaXMgYWxsb3dlZC4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpIGNvbnN0CisgICAgICB7IHJldHVybiAoX19kZXRhaWw6Ol9fbW9kPF9VSW50VHlwZSwgMSwgMCwgX19tPihfX2MpID09IDApID8gMSA6IDA7IH0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIHRoZSBsYXJnZXN0IHBvc3NpYmxlIHZhbHVlIGluIHRoZSBvdXRwdXQgcmFuZ2UuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gX19tIC0gMTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEdldHMgdGhlIG5leHQgcmFuZG9tIG51bWJlciBpbiB0aGUgc2VxdWVuY2UuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBvcGVyYXRvcigpKCk7CisKKyAgICAgIC8qKgorICAgICAgICogQ29tcGFyZXMgdHdvIGxpbmVhciBjb25ncnVlbnRpYWwgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgICAqIG9iamVjdHMgb2YgdGhlIHNhbWUgdHlwZSBmb3IgZXF1YWxpdHkuCisgICAgICAgKiAgCisgICAgICAgKiBAcGFyYW0gX19saHMgQSBsaW5lYXIgY29uZ3J1ZW50aWFsIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9iamVjdC4KKyAgICAgICAqIEBwYXJhbSBfX3JocyBBbm90aGVyIGxpbmVhciBjb25ncnVlbnRpYWwgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb2JqLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHR3byBvYmplY3RzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgICovCisgICAgICBmcmllbmQgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBsaW5lYXJfY29uZ3J1ZW50aWFsJiBfX2xocywKKwkJIGNvbnN0IGxpbmVhcl9jb25ncnVlbnRpYWwmIF9fcmhzKQorICAgICAgeyByZXR1cm4gX19saHMuX01feCA9PSBfX3Jocy5fTV94OyB9CisKKyAgICAgIC8qKgorICAgICAgICogQ29tcGFyZXMgdHdvIGxpbmVhciBjb25ncnVlbnRpYWwgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgICAqIG9iamVjdHMgb2YgdGhlIHNhbWUgdHlwZSBmb3IgaW5lcXVhbGl0eS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19saHMgQSBsaW5lYXIgY29uZ3J1ZW50aWFsIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9iamVjdC4KKyAgICAgICAqIEBwYXJhbSBfX3JocyBBbm90aGVyIGxpbmVhciBjb25ncnVlbnRpYWwgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb2JqLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHR3byBvYmplY3RzIGFyZSBub3QgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yIT0oY29uc3QgbGluZWFyX2NvbmdydWVudGlhbCYgX19saHMsCisJCSBjb25zdCBsaW5lYXJfY29uZ3J1ZW50aWFsJiBfX3JocykKKyAgICAgIHsgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogV3JpdGVzIHRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdGF0ZSB4KGkpIG9mIHggdG8gQHAgX19vcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyAgVGhlIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX19sY3IgQSAlIGxpbmVhcl9jb25ncnVlbnRpYWwgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgICAgICAgKiBAcmV0dXJucyBfX29zLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfVUludFR5cGUxLCBfVUludFR5cGUxIF9fYTEsIF9VSW50VHlwZTEgX19jMSwKKwkgICAgICAgX1VJbnRUeXBlMSBfX20xLAorCSAgICAgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgICAgIGZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICAgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkJICAgY29uc3QgbGluZWFyX2NvbmdydWVudGlhbDxfVUludFR5cGUxLCBfX2ExLCBfX2MxLAorCQkgICBfX20xPiYgX19sY3IpOworCisgICAgICAvKioKKyAgICAgICAqIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBlbmdpbmUgYnkgcmVhZGluZyBpdHMgdGV4dHVhbAorICAgICAgICogcmVwcmVzZW50YXRpb24gZnJvbSBAcCBfX2lzLgorICAgICAgICoKKyAgICAgICAqIFRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG11c3QgaGF2ZSBiZWVuIHByZXZpb3VzbHkgd3JpdHRlbiB1c2luZyBhbgorICAgICAgICogb3V0cHV0IHN0cmVhbSB3aG9zZSBpbWJ1ZWQgbG9jYWxlIGFuZCB3aG9zZSB0eXBlJ3MgdGVtcGxhdGUKKyAgICAgICAqIHNwZWNpYWxpemF0aW9uIGFyZ3VtZW50cyBfQ2hhclQgYW5kIF9UcmFpdHMgd2VyZSB0aGUgc2FtZSBhcyB0aG9zZSBvZgorICAgICAgICogQHAgX19pcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19pcyAgVGhlIGlucHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX2xjciBBICUgbGluZWFyX2NvbmdydWVudGlhbCByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAgICAgICAqIEByZXR1cm5zIF9faXMuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9VSW50VHlwZTEsIF9VSW50VHlwZTEgX19hMSwgX1VJbnRUeXBlMSBfX2MxLAorCSAgICAgICBfVUludFR5cGUxIF9fbTEsCisJICAgICAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICAgICAgZnJpZW5kIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgICAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCQkgICBsaW5lYXJfY29uZ3J1ZW50aWFsPF9VSW50VHlwZTEsIF9fYTEsIF9fYzEsIF9fbTE+JiBfX2xjcik7CisKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0dlbj4KKyAgICAgICAgdm9pZAorICAgICAgICBzZWVkKF9HZW4mIF9fZywgdHJ1ZV90eXBlKQorICAgICAgICB7IHJldHVybiBzZWVkKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KF9fZykpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9HZW4+CisgICAgICAgIHZvaWQKKyAgICAgICAgc2VlZChfR2VuJiBfX2csIGZhbHNlX3R5cGUpOworCisgICAgICBfVUludFR5cGUgX01feDsKKyAgICB9OworCisgIC8qKgorICAgKiBUaGUgY2xhc3NpYyBNaW5pbXVtIFN0YW5kYXJkIHJhbmQwIG9mIExld2lzLCBHb29kbWFuLCBhbmQgTWlsbGVyLgorICAgKi8KKyAgdHlwZWRlZiBsaW5lYXJfY29uZ3J1ZW50aWFsPHVuc2lnbmVkIGxvbmcsIDE2ODA3LCAwLCAyMTQ3NDgzNjQ3PiBtaW5zdGRfcmFuZDA7CisKKyAgLyoqCisgICAqIEFuIGFsdGVybmF0aXZlIExDUiAoTGVobWVyIEdlbmVyYXRvciBmdW5jdGlvbikgLgorICAgKi8KKyAgdHlwZWRlZiBsaW5lYXJfY29uZ3J1ZW50aWFsPHVuc2lnbmVkIGxvbmcsIDQ4MjcxLCAwLCAyMTQ3NDgzNjQ3PiBtaW5zdGRfcmFuZDsKKworCisgIC8qKgorICAgKiBBIGdlbmVyYWxpemVkIGZlZWRiYWNrIHNoaWZ0IHJlZ2lzdGVyIGRpc2NyZXRlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICAgKgorICAgKiBUaGlzIGFsZ29yaXRobSBhdm9pZHMgbXVsdGlwbGljYXRpb24gYW5kIGRpdmlzaW9uIGFuZCBpcyBkZXNpZ25lZCB0byBiZQorICAgKiBmcmllbmRseSB0byBhIHBpcGVsaW5lZCBhcmNoaXRlY3R1cmUuICBJZiB0aGUgcGFyYW1ldGVycyBhcmUgY2hvc2VuCisgICAqIGNvcnJlY3RseSwgdGhpcyBnZW5lcmF0b3Igd2lsbCBwcm9kdWNlIG51bWJlcnMgd2l0aCBhIHZlcnkgbG9uZyBwZXJpb2QgYW5kCisgICAqIGZhaXJseSBnb29kIGFwcGFyZW50IGVudHJvcHksIGFsdGhvdWdoIHN0aWxsIG5vdCBjcnlwdG9ncmFwaGljYWxseSBzdHJvbmcuCisgICAqCisgICAqIFRoZSBiZXN0IHdheSB0byB1c2UgdGhpcyBnZW5lcmF0b3IgaXMgd2l0aCB0aGUgcHJlZGVmaW5lZCBtdDE5OTM3IGNsYXNzLgorICAgKgorICAgKiBUaGlzIGFsZ29yaXRobSB3YXMgb3JpZ2luYWxseSBpbnZlbnRlZCBieSBNYWtvdG8gTWF0c3Vtb3RvIGFuZAorICAgKiBUYWt1amkgTmlzaGltdXJhLgorICAgKgorICAgKiBAdmFyIHdvcmRfc2l6ZSAgIFRoZSBudW1iZXIgb2YgYml0cyBpbiBlYWNoIGVsZW1lbnQgb2YgdGhlIHN0YXRlIHZlY3Rvci4KKyAgICogQHZhciBzdGF0ZV9zaXplICBUaGUgZGVncmVlIG9mIHJlY3Vyc2lvbi4KKyAgICogQHZhciBzaGlmdF9zaXplICBUaGUgcGVyaW9kIHBhcmFtZXRlci4KKyAgICogQHZhciBtYXNrX2JpdHMgICBUaGUgc2VwYXJhdGlvbiBwb2ludCBiaXQgaW5kZXguCisgICAqIEB2YXIgcGFyYW1ldGVyX2EgVGhlIGxhc3Qgcm93IG9mIHRoZSB0d2lzdCBtYXRyaXguCisgICAqIEB2YXIgb3V0cHV0X3UgICAgVGhlIGZpcnN0IHJpZ2h0LXNoaWZ0IHRlbXBlcmluZyBtYXRyaXggcGFyYW1ldGVyLgorICAgKiBAdmFyIG91dHB1dF9zICAgIFRoZSBmaXJzdCBsZWZ0LXNoaWZ0IHRlbXBlcmluZyBtYXRyaXggcGFyYW1ldGVyLgorICAgKiBAdmFyIG91dHB1dF9iICAgIFRoZSBmaXJzdCBsZWZ0LXNoaWZ0IHRlbXBlcmluZyBtYXRyaXggbWFzay4KKyAgICogQHZhciBvdXRwdXRfdCAgICBUaGUgc2Vjb25kIGxlZnQtc2hpZnQgdGVtcGVyaW5nIG1hdHJpeCBwYXJhbWV0ZXIuCisgICAqIEB2YXIgb3V0cHV0X2MgICAgVGhlIHNlY29uZCBsZWZ0LXNoaWZ0IHRlbXBlcmluZyBtYXRyaXggbWFzay4KKyAgICogQHZhciBvdXRwdXRfbCAgICBUaGUgc2Vjb25kIHJpZ2h0LXNoaWZ0IHRlbXBlcmluZyBtYXRyaXggcGFyYW1ldGVyLgorICAgKi8KKyAgdGVtcGxhdGU8Y2xhc3MgX1VJbnRUeXBlLCBpbnQgX193LCBpbnQgX19uLCBpbnQgX19tLCBpbnQgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIGludCBfX3UsIGludCBfX3MsIF9VSW50VHlwZSBfX2IsIGludCBfX3QsCisJICAgX1VJbnRUeXBlIF9fYywgaW50IF9fbD4KKyAgICBjbGFzcyBtZXJzZW5uZV90d2lzdGVyCisgICAgeworICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzKF9VSW50VHlwZSwgX1Vuc2lnbmVkSW50ZWdlckNvbmNlcHQpCisKKyAgICBwdWJsaWM6CisgICAgICAvLyB0eXBlcworICAgICAgdHlwZWRlZiBfVUludFR5cGUgcmVzdWx0X3R5cGU7CisKKyAgICAgIC8vIHBhcmFtZXRlciB2YWx1ZXMKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgICAgICAgd29yZF9zaXplICAgPSBfX3c7CisgICAgICBzdGF0aWMgY29uc3QgaW50ICAgICAgIHN0YXRlX3NpemUgID0gX19uOworICAgICAgc3RhdGljIGNvbnN0IGludCAgICAgICBzaGlmdF9zaXplICA9IF9fbTsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgICAgICAgbWFza19iaXRzICAgPSBfX3I7CisgICAgICBzdGF0aWMgY29uc3QgX1VJbnRUeXBlIHBhcmFtZXRlcl9hID0gX19hOworICAgICAgc3RhdGljIGNvbnN0IGludCAgICAgICBvdXRwdXRfdSAgICA9IF9fdTsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgICAgICAgb3V0cHV0X3MgICAgPSBfX3M7CisgICAgICBzdGF0aWMgY29uc3QgX1VJbnRUeXBlIG91dHB1dF9iICAgID0gX19iOworICAgICAgc3RhdGljIGNvbnN0IGludCAgICAgICBvdXRwdXRfdCAgICA9IF9fdDsKKyAgICAgIHN0YXRpYyBjb25zdCBfVUludFR5cGUgb3V0cHV0X2MgICAgPSBfX2M7CisgICAgICBzdGF0aWMgY29uc3QgaW50ICAgICAgIG91dHB1dF9sICAgID0gX19sOworCisgICAgICAvLyBjb25zdHJ1Y3RvcnMgYW5kIG1lbWJlciBmdW5jdGlvbgorICAgICAgbWVyc2VubmVfdHdpc3RlcigpCisgICAgICB7IHNlZWQoKTsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgbWVyc2VubmVfdHdpc3Rlcih1bnNpZ25lZCBsb25nIF9fdmFsdWUpCisgICAgICB7IHNlZWQoX192YWx1ZSk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0dlbj4KKyAgICAgICAgbWVyc2VubmVfdHdpc3RlcihfR2VuJiBfX2cpCisgICAgICAgIHsgc2VlZChfX2cpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHNlZWQoKQorICAgICAgeyBzZWVkKDU0ODlVTCk7IH0KKworICAgICAgdm9pZAorICAgICAgc2VlZCh1bnNpZ25lZCBsb25nIF9fdmFsdWUpOworCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfR2VuPgorICAgICAgICB2b2lkCisgICAgICAgIHNlZWQoX0dlbiYgX19nKQorICAgICAgICB7IHNlZWQoX19nLCB0eXBlbmFtZSBpc19mdW5kYW1lbnRhbDxfR2VuPjo6dHlwZSgpKTsgfQorCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWluKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIDA7IH07CisKKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gX19kZXRhaWw6Ol9TaGlmdDxfVUludFR5cGUsIF9fdz46Ol9fdmFsdWUgLSAxOyB9CisKKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBvcGVyYXRvcigpKCk7CisKKyAgICAgIC8qKgorICAgICAgICogQ29tcGFyZXMgdHdvICUgbWVyc2VubmVfdHdpc3RlciByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBvYmplY3RzIG9mCisgICAgICAgKiB0aGUgc2FtZSB0eXBlIGZvciBlcXVhbGl0eS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19saHMgQSAlIG1lcnNlbm5lX3R3aXN0ZXIgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb2JqZWN0LgorICAgICAgICogQHBhcmFtIF9fcmhzIEFub3RoZXIgJSBtZXJzZW5uZV90d2lzdGVyIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgICAgKiAgICAgICAgICAgICAgb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHR3byBvYmplY3RzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgICovCisgICAgICBmcmllbmQgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBtZXJzZW5uZV90d2lzdGVyJiBfX2xocywKKwkJIGNvbnN0IG1lcnNlbm5lX3R3aXN0ZXImIF9fcmhzKQorICAgICAgeyByZXR1cm4gc3RkOjplcXVhbChfX2xocy5fTV94LCBfX2xocy5fTV94ICsgc3RhdGVfc2l6ZSwgX19yaHMuX01feCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBDb21wYXJlcyB0d28gJSBtZXJzZW5uZV90d2lzdGVyIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9iamVjdHMgb2YKKyAgICAgICAqIHRoZSBzYW1lIHR5cGUgZm9yIGluZXF1YWxpdHkuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fbGhzIEEgJSBtZXJzZW5uZV90d2lzdGVyIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9iamVjdC4KKyAgICAgICAqIEBwYXJhbSBfX3JocyBBbm90aGVyICUgbWVyc2VubmVfdHdpc3RlciByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgICAgICogICAgICAgICAgICAgIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0d28gb2JqZWN0cyBhcmUgbm90IGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuCisgICAgICAgKi8KKyAgICAgIGZyaWVuZCBib29sCisgICAgICBvcGVyYXRvciE9KGNvbnN0IG1lcnNlbm5lX3R3aXN0ZXImIF9fbGhzLAorCQkgY29uc3QgbWVyc2VubmVfdHdpc3RlciYgX19yaHMpCisgICAgICB7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEluc2VydHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSAlIG1lcnNlbm5lX3R3aXN0ZXIgcmFuZG9tIG51bWJlcgorICAgICAgICogZ2VuZXJhdG9yIGVuZ2luZSBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICUgbWVyc2VubmVfdHdpc3RlciByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8Y2xhc3MgX1VJbnRUeXBlMSwgaW50IF9fdzEsIGludCBfX24xLCBpbnQgX19tMSwgaW50IF9fcjEsCisJICAgICAgIF9VSW50VHlwZTEgX19hMSwgaW50IF9fdTEsIGludCBfX3MxLCBfVUludFR5cGUxIF9fYjEsIGludCBfX3QxLAorCSAgICAgICBfVUludFR5cGUxIF9fYzEsIGludCBfX2wxLAorCSAgICAgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgICAgIGZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICAgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkJICAgY29uc3QgbWVyc2VubmVfdHdpc3RlcjxfVUludFR5cGUxLCBfX3cxLCBfX24xLCBfX20xLCBfX3IxLAorCQkgICBfX2ExLCBfX3UxLCBfX3MxLCBfX2IxLCBfX3QxLCBfX2MxLCBfX2wxPiYgX194KTsKKworICAgICAgLyoqCisgICAgICAgKiBFeHRyYWN0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhICUgbWVyc2VubmVfdHdpc3RlciByYW5kb20gbnVtYmVyCisgICAgICAgKiBnZW5lcmF0b3IgZW5naW5lIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICUgbWVyc2VubmVfdHdpc3RlciByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggZXh0cmFjdGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8Y2xhc3MgX1VJbnRUeXBlMSwgaW50IF9fdzEsIGludCBfX24xLCBpbnQgX19tMSwgaW50IF9fcjEsCisJICAgICAgIF9VSW50VHlwZTEgX19hMSwgaW50IF9fdTEsIGludCBfX3MxLCBfVUludFR5cGUxIF9fYjEsIGludCBfX3QxLAorCSAgICAgICBfVUludFR5cGUxIF9fYzEsIGludCBfX2wxLAorCSAgICAgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgICAgIGZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICAgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkJICAgbWVyc2VubmVfdHdpc3RlcjxfVUludFR5cGUxLCBfX3cxLCBfX24xLCBfX20xLCBfX3IxLAorCQkgICBfX2ExLCBfX3UxLCBfX3MxLCBfX2IxLCBfX3QxLCBfX2MxLCBfX2wxPiYgX194KTsKKworICAgIHByaXZhdGU6CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfR2VuPgorICAgICAgICB2b2lkCisgICAgICAgIHNlZWQoX0dlbiYgX19nLCB0cnVlX3R5cGUpCisgICAgICAgIHsgcmV0dXJuIHNlZWQoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19nKSk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0dlbj4KKyAgICAgICAgdm9pZAorICAgICAgICBzZWVkKF9HZW4mIF9fZywgZmFsc2VfdHlwZSk7CisKKyAgICAgIF9VSW50VHlwZSBfTV94W3N0YXRlX3NpemVdOworICAgICAgaW50ICAgICAgIF9NX3A7CisgICAgfTsKKworICAvKioKKyAgICogVGhlIGNsYXNzaWMgTWVyc2VubmUgVHdpc3Rlci4KKyAgICoKKyAgICogUmVmZXJlbmNlOgorICAgKiBNLiBNYXRzdW1vdG8gYW5kIFQuIE5pc2hpbXVyYSwgTWVyc2VubmUgVHdpc3RlcjogQSA2MjMtRGltZW5zaW9uYWxseQorICAgKiBFcXVpZGlzdHJpYnV0ZWQgVW5pZm9ybSBQc2V1ZG8tUmFuZG9tIE51bWJlciBHZW5lcmF0b3IsIEFDTSBUcmFuc2FjdGlvbnMKKyAgICogb24gTW9kZWxpbmcgYW5kIENvbXB1dGVyIFNpbXVsYXRpb24sIFZvbC4gOCwgTm8uIDEsIEphbnVhcnkgMTk5OCwgcHAgMy0zMC4KKyAgICovCisgIHR5cGVkZWYgbWVyc2VubmVfdHdpc3RlcjwKKyAgICB1bnNpZ25lZCBsb25nLCAzMiwgNjI0LCAzOTcsIDMxLAorICAgIDB4OTkwOGIwZGZ1bCwgMTEsIDcsCisgICAgMHg5ZDJjNTY4MHVsLCAxNSwKKyAgICAweGVmYzYwMDAwdWwsIDE4CisgICAgPiBtdDE5OTM3OworCisKKyAgLyoqCisgICAqIEBicmllZiBUaGUgTWFyc2FnbGlhLVphbWFuIGdlbmVyYXRvci4KKyAgICogCisgICAqIFRoaXMgaXMgYSBtb2RlbCBvZiBhIEdlbmVyYWxpemVkIEZpYm9uYWNjaSBkaXNjcmV0ZSByYW5kb20gbnVtYmVyCisgICAqIGdlbmVyYXRvciwgc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzIHRoZSBTV0MgZ2VuZXJhdG9yLgorICAgKgorICAgKiBBIGRpc2NyZXRlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIHRoYXQgcHJvZHVjZXMgcHNldWRvcmFuZG9tCisgICAqIG51bWJlcnMgdXNpbmcgQGYkeF97aX1cbGVmdGFycm93KHhfe2kgLSBzfSAtIHhfe2kgLSByfSAtCisgICAqIGNhcnJ5X3tpLTF9KSBcYm1vZCBtIEBmJC4KKyAgICoKKyAgICogVGhlIHNpemUgb2YgdGhlIHN0YXRlIGlzIEBmJCByIEBmJAorICAgKiBhbmQgdGhlIG1heGltdW0gcGVyaW9kIG9mIHRoZSBnZW5lcmF0b3IgaXMgQGYkIG1eciAtIG1ecyAtMSBAZiQuCisgICAqCisgICAqIE4xNjg4WzQuMTNdIHNheXMgPGVtPnRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgX0ludFR5cGUgc2hhbGwgZGVub3RlCisgICAqIGFuIGludGVncmFsIHR5cGUgbGFyZ2UgZW5vdWdoIHRvIHN0b3JlIHZhbHVlcyB1cCB0byBtPC9lbT4uCisgICAqCisgICAqIEB2YXIgX01feCAgICAgVGhlIHN0YXRlIG9mIHRoZSBnZW5lcmF0b3IuICBUaGlzIGlzIGEgcmluZyBidWZmZXIuCisgICAqIEB2YXIgX01fY2FycnkgVGhlIGNhcnJ5LgorICAgKiBAdmFyIF9NX3AgICAgIEN1cnJlbnQgaW5kZXggb2YgeChpIC0gcikuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwgX0ludFR5cGUgX19tLCBpbnQgX19zLCBpbnQgX19yPgorICAgIGNsYXNzIHN1YnRyYWN0X3dpdGhfY2FycnkKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX0ludFR5cGUsIF9JbnRlZ2VyQ29uY2VwdCkKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgZ2VuZXJhdGVkIHJhbmRvbSB2YWx1ZS4gKi8KKyAgICAgIHR5cGVkZWYgX0ludFR5cGUgcmVzdWx0X3R5cGU7CisgICAgICAKKyAgICAgIC8vIHBhcmFtZXRlciB2YWx1ZXMKKyAgICAgIHN0YXRpYyBjb25zdCBfSW50VHlwZSBtb2R1bHVzICAgPSBfX207CisgICAgICBzdGF0aWMgY29uc3QgaW50ICAgICAgbG9uZ19sYWcgID0gX19yOworICAgICAgc3RhdGljIGNvbnN0IGludCAgICAgIHNob3J0X2xhZyA9IF9fczsKKworICAgICAgLyoqCisgICAgICAgKiBDb25zdHJ1Y3RzIGEgZGVmYXVsdC1pbml0aWFsaXplZCAlIHN1YnRyYWN0X3dpdGhfY2FycnkgcmFuZG9tIG51bWJlcgorICAgICAgICogZ2VuZXJhdG9yLgorICAgICAgICovCisgICAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5KCkKKyAgICAgIHsgdGhpcy0+c2VlZCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQ29uc3RydWN0cyBhbiBleHBsaWNpdGx5IHNlZWRlZCAlIHN1YnRyYWN0X3dpdGhfY2FycnkgcmFuZG9tIG51bWJlcgorICAgICAgICogZ2VuZXJhdG9yLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgc3VidHJhY3Rfd2l0aF9jYXJyeSh1bnNpZ25lZCBsb25nIF9fdmFsdWUpCisgICAgICB7IHRoaXMtPnNlZWQoX192YWx1ZSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBDb25zdHJ1Y3RzIGEgJXN1YnRyYWN0X3dpdGhfY2FycnkgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lCisgICAgICAgKiBzZWVkZWQgZnJvbSB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIEBwIF9fZy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19nIFRoZSBzZWVkIGdlbmVyYXRvciBmdW5jdGlvbi4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0dlbj4KKyAgICAgICAgc3VidHJhY3Rfd2l0aF9jYXJyeShfR2VuJiBfX2cpCisgICAgICAgIHsgdGhpcy0+c2VlZChfX2cpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogU2VlZHMgdGhlIGluaXRpYWwgc3RhdGUgQGYkIHhfMCBAZiQgb2YgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICAgICAgICoKKyAgICAgICAqIE4xNjg4WzQuMTldIG1vZGlmaWVzIHRoaXMgYXMgZm9sbG93cy4gIElmIEBwIF9fdmFsdWUgPT0gMCwKKyAgICAgICAqIHNldHMgdmFsdWUgdG8gMTk3ODA1MDMuICBJbiBhbnkgY2FzZSwgd2l0aCBhIGxpbmVhcgorICAgICAgICogY29uZ3J1ZW50aWFsIGdlbmVyYXRvciBsY2coaSkgaGF2aW5nIHBhcmFtZXRlcnMgQGYkIG1fe2xjZ30gPQorICAgICAgICogMjE0NzQ4MzU2MywgYV97bGNnfSA9IDQwMDE0LCBjX3tsY2d9ID0gMCwgYW5kIGxjZygwKSA9IHZhbHVlCisgICAgICAgKiBAZiQsIHNldHMgQGYkIHhfey1yfSBcZG90cyB4X3stMX0gQGYkIHRvIEBmJCBsY2coMSkgXGJtb2QgbQorICAgICAgICogXGRvdHMgbGNnKHIpIFxibW9kIG0gQGYkIHJlc3BlY3RpdmVseS4gIElmIEBmJCB4X3stMX0gPSAwIEBmJAorICAgICAgICogc2V0IGNhcnJ5IHRvIDEsIG90aGVyd2lzZSBzZXRzIGNhcnJ5IHRvIDAuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHNlZWQodW5zaWduZWQgbG9uZyBfX3ZhbHVlID0gMTk3ODA1MDMpOworCisgICAgICAvKioKKyAgICAgICAqIFNlZWRzIHRoZSBpbml0aWFsIHN0YXRlIEBmJCB4XzAgQGYkIG9mIHRoZSAlIHN1YnRyYWN0X3dpdGhfY2FycnkKKyAgICAgICAqIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfR2VuPgorICAgICAgICB2b2lkCisgICAgICAgIHNlZWQoX0dlbiYgX19nKQorICAgICAgICB7IHNlZWQoX19nLCB0eXBlbmFtZSBpc19mdW5kYW1lbnRhbDxfR2VuPjo6dHlwZSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEdldHMgdGhlIGluY2x1c2l2ZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSByYW5nZSBvZiByYW5kb20gaW50ZWdlcnMKKyAgICAgICAqIHJldHVybmVkIGJ5IHRoaXMgZ2VuZXJhdG9yLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWluKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIDA7IH0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIHRoZSBpbmNsdXNpdmUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgcmFuZ2Ugb2YgcmFuZG9tIGludGVnZXJzCisgICAgICAgKiByZXR1cm5lZCBieSB0aGlzIGdlbmVyYXRvci4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1heCgpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5tb2R1bHVzIC0gMTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEdldHMgdGhlIG5leHQgcmFuZG9tIG51bWJlciBpbiB0aGUgc2VxdWVuY2UuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBvcGVyYXRvcigpKCk7CisKKyAgICAgIC8qKgorICAgICAgICogQ29tcGFyZXMgdHdvICUgc3VidHJhY3Rfd2l0aF9jYXJyeSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBvYmplY3RzIG9mCisgICAgICAgKiB0aGUgc2FtZSB0eXBlIGZvciBlcXVhbGl0eS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19saHMgQSAlIHN1YnRyYWN0X3dpdGhfY2FycnkgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb2JqZWN0LgorICAgICAgICogQHBhcmFtIF9fcmhzIEFub3RoZXIgJSBzdWJ0cmFjdF93aXRoX2NhcnJ5IHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgICAgKiAgICAgICAgICAgICAgb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHR3byBvYmplY3RzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgICovCisgICAgICBmcmllbmQgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBzdWJ0cmFjdF93aXRoX2NhcnJ5JiBfX2xocywKKwkJIGNvbnN0IHN1YnRyYWN0X3dpdGhfY2FycnkmIF9fcmhzKQorICAgICAgeyByZXR1cm4gc3RkOjplcXVhbChfX2xocy5fTV94LCBfX2xocy5fTV94ICsgbG9uZ19sYWcsIF9fcmhzLl9NX3gpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQ29tcGFyZXMgdHdvICUgc3VidHJhY3Rfd2l0aF9jYXJyeSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBvYmplY3RzIG9mCisgICAgICAgKiB0aGUgc2FtZSB0eXBlIGZvciBpbmVxdWFsaXR5LgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2xocyBBICUgc3VidHJhY3Rfd2l0aF9jYXJyeSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBvYmplY3QuCisgICAgICAgKiBAcGFyYW0gX19yaHMgQW5vdGhlciAlIHN1YnRyYWN0X3dpdGhfY2FycnkgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgICAqICAgICAgICAgICAgICBvYmplY3QuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIG9iamVjdHMgYXJlIG5vdCBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgICovCisgICAgICBmcmllbmQgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCBzdWJ0cmFjdF93aXRoX2NhcnJ5JiBfX2xocywKKwkJIGNvbnN0IHN1YnRyYWN0X3dpdGhfY2FycnkmIF9fcmhzKQorICAgICAgeyByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBJbnNlcnRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgJSBzdWJ0cmFjdF93aXRoX2NhcnJ5IHJhbmRvbSBudW1iZXIKKyAgICAgICAqIGdlbmVyYXRvciBlbmdpbmUgQHAgX194IGludG8gdGhlIG91dHB1dCBzdHJlYW0gQHAgX19vcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlIHN1YnRyYWN0X3dpdGhfY2FycnkgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlMSwgX0ludFR5cGUxIF9fbTEsIGludCBfX3MxLCBpbnQgX19yMSwKKwkgICAgICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgICAgICBmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJCSAgIGNvbnN0IHN1YnRyYWN0X3dpdGhfY2Fycnk8X0ludFR5cGUxLCBfX20xLCBfX3MxLAorCQkgICBfX3IxPiYgX194KTsKKworICAgICAgLyoqCisgICAgICAgKiBFeHRyYWN0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhICUgc3VidHJhY3Rfd2l0aF9jYXJyeSByYW5kb20gbnVtYmVyCisgICAgICAgKiBnZW5lcmF0b3IgZW5naW5lIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICUgc3VidHJhY3Rfd2l0aF9jYXJyeSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggZXh0cmFjdGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUxLCBfSW50VHlwZTEgX19tMSwgaW50IF9fczEsIGludCBfX3IxLAorCSAgICAgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgICAgIGZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICAgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkJICAgc3VidHJhY3Rfd2l0aF9jYXJyeTxfSW50VHlwZTEsIF9fbTEsIF9fczEsIF9fcjE+JiBfX3gpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9HZW4+CisgICAgICAgIHZvaWQKKyAgICAgICAgc2VlZChfR2VuJiBfX2csIHRydWVfdHlwZSkKKyAgICAgICAgeyByZXR1cm4gc2VlZChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX2cpKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfR2VuPgorICAgICAgICB2b2lkCisgICAgICAgIHNlZWQoX0dlbiYgX19nLCBmYWxzZV90eXBlKTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fYWRkX3Vuc2lnbmVkPF9JbnRUeXBlPjo6X190eXBlIF9VSW50VHlwZTsKKworICAgICAgX1VJbnRUeXBlICBfTV94W2xvbmdfbGFnXTsKKyAgICAgIF9VSW50VHlwZSAgX01fY2Fycnk7CisgICAgICBpbnQgICAgICAgIF9NX3A7CisgICAgfTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgVGhlIE1hcnNhZ2xpYS1aYW1hbiBnZW5lcmF0b3IgKGZsb2F0cyB2ZXJzaW9uKS4KKyAgICoKKyAgICogQHZhciBfTV94ICAgICBUaGUgc3RhdGUgb2YgdGhlIGdlbmVyYXRvci4gIFRoaXMgaXMgYSByaW5nIGJ1ZmZlci4KKyAgICogQHZhciBfTV9jYXJyeSBUaGUgY2FycnkuCisgICAqIEB2YXIgX01fcCAgICAgQ3VycmVudCBpbmRleCBvZiB4KGkgLSByKS4KKyAgICogQHZhciBfTV9ucG93cyBQcmVjb21wdXRlZCBuZWdhdGl2ZSBwb3dlcnMgb2YgMi4gICAKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgaW50IF9fdywgaW50IF9fcywgaW50IF9fcj4KKyAgICBjbGFzcyBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgZ2VuZXJhdGVkIHJhbmRvbSB2YWx1ZS4gKi8KKyAgICAgIHR5cGVkZWYgX1JlYWxUeXBlIHJlc3VsdF90eXBlOworICAgICAgCisgICAgICAvLyBwYXJhbWV0ZXIgdmFsdWVzCisgICAgICBzdGF0aWMgY29uc3QgaW50ICAgICAgd29yZF9zaXplID0gX193OworICAgICAgc3RhdGljIGNvbnN0IGludCAgICAgIGxvbmdfbGFnICA9IF9fcjsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgICAgICBzaG9ydF9sYWcgPSBfX3M7CisKKyAgICAgIC8qKgorICAgICAgICogQ29uc3RydWN0cyBhIGRlZmF1bHQtaW5pdGlhbGl6ZWQgJSBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxIHJhbmRvbQorICAgICAgICogbnVtYmVyIGdlbmVyYXRvci4KKyAgICAgICAqLworICAgICAgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMSgpCisgICAgICB7CisJdGhpcy0+c2VlZCgpOworCV9NX2luaXRpYWxpemVfbnBvd3MoKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiBDb25zdHJ1Y3RzIGFuIGV4cGxpY2l0bHkgc2VlZGVkICUgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMSByYW5kb20gbnVtYmVyCisgICAgICAgKiBnZW5lcmF0b3IuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxKHVuc2lnbmVkIGxvbmcgX192YWx1ZSkKKyAgICAgIHsKKwl0aGlzLT5zZWVkKF9fdmFsdWUpOworCV9NX2luaXRpYWxpemVfbnBvd3MoKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiBDb25zdHJ1Y3RzIGEgJSBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZQorICAgICAgICogc2VlZGVkIGZyb20gdGhlIGdlbmVyYXRvciBmdW5jdGlvbiBAcCBfX2cuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fZyBUaGUgc2VlZCBnZW5lcmF0b3IgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9HZW4+CisgICAgICAgIHN1YnRyYWN0X3dpdGhfY2FycnlfMDEoX0dlbiYgX19nKQorICAgICAgICB7CisJICB0aGlzLT5zZWVkKF9fZyk7CisJICBfTV9pbml0aWFsaXplX25wb3dzKCk7CSAgCisJfQorCisgICAgICAvKioKKyAgICAgICAqIFNlZWRzIHRoZSBpbml0aWFsIHN0YXRlIEBmJCB4XzAgQGYkIG9mIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgc2VlZCh1bnNpZ25lZCBsb25nIF9fdmFsdWUgPSAxOTc4MDUwMyk7CisKKyAgICAgIC8qKgorICAgICAgICogU2VlZHMgdGhlIGluaXRpYWwgc3RhdGUgQGYkIHhfMCBAZiQgb2YgdGhlICUgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMQorICAgICAgICogcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9HZW4+CisgICAgICAgIHZvaWQKKyAgICAgICAgc2VlZChfR2VuJiBfX2cpCisgICAgICAgIHsgc2VlZChfX2csIHR5cGVuYW1lIGlzX2Z1bmRhbWVudGFsPF9HZW4+Ojp0eXBlKCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogR2V0cyB0aGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgcmFuZ2Ugb2YgcmFuZG9tIGZsb2F0cworICAgICAgICogcmV0dXJuZWQgYnkgdGhpcyBnZW5lcmF0b3IuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gMC4wOyB9CisKKyAgICAgIC8qKgorICAgICAgICogR2V0cyB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgcmFuZ2Ugb2YgcmFuZG9tIGZsb2F0cworICAgICAgICogcmV0dXJuZWQgYnkgdGhpcyBnZW5lcmF0b3IuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gMS4wOyB9CisKKyAgICAgIC8qKgorICAgICAgICogR2V0cyB0aGUgbmV4dCByYW5kb20gbnVtYmVyIGluIHRoZSBzZXF1ZW5jZS4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG9wZXJhdG9yKCkoKTsKKworICAgICAgLyoqCisgICAgICAgKiBDb21wYXJlcyB0d28gJSBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9iamVjdHMKKyAgICAgICAqIG9mIHRoZSBzYW1lIHR5cGUgZm9yIGVxdWFsaXR5LgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2xocyBBICUgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMSByYW5kb20gbnVtYmVyCisgICAgICAgKiAgICAgICAgICAgICAgZ2VuZXJhdG9yIG9iamVjdC4KKyAgICAgICAqIEBwYXJhbSBfX3JocyBBbm90aGVyICUgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgICAgICogICAgICAgICAgICAgIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0d28gb2JqZWN0cyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3Qgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMSYgX19saHMsCisJCSBjb25zdCBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxJiBfX3JocykKKyAgICAgIHsKKwlmb3IgKGludCBfX2kgPSAwOyBfX2kgPCBsb25nX2xhZzsgKytfX2kpCisJICBpZiAoIXN0ZDo6ZXF1YWwoX19saHMuX01feFtfX2ldLCBfX2xocy5fTV94W19faV0gKyBfX24sCisJCQkgIF9fcmhzLl9NX3hbX19pXSkpCisJICAgIHJldHVybiBmYWxzZTsKKwlyZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiBDb21wYXJlcyB0d28gJSBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9iamVjdHMKKyAgICAgICAqIG9mIHRoZSBzYW1lIHR5cGUgZm9yIGluZXF1YWxpdHkuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fbGhzIEEgJSBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxIHJhbmRvbSBudW1iZXIKKyAgICAgICAqICAgICAgICAgICAgICBnZW5lcmF0b3Igb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX3JocyBBbm90aGVyICUgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgICAgICogICAgICAgICAgICAgIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0d28gb2JqZWN0cyBhcmUgbm90IGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuCisgICAgICAgKi8KKyAgICAgIGZyaWVuZCBib29sCisgICAgICBvcGVyYXRvciE9KGNvbnN0IHN1YnRyYWN0X3dpdGhfY2FycnlfMDEmIF9fbGhzLAorCQkgY29uc3Qgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMSYgX19yaHMpCisgICAgICB7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEluc2VydHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSAlIHN1YnRyYWN0X3dpdGhfY2FycnlfMDEgcmFuZG9tIG51bWJlcgorICAgICAgICogZ2VuZXJhdG9yIGVuZ2luZSBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICUgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMSwgaW50IF9fdzEsIGludCBfX3MxLCBpbnQgX19yMSwKKwkgICAgICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgICAgICBmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJCSAgIGNvbnN0IHN1YnRyYWN0X3dpdGhfY2FycnlfMDE8X1JlYWxUeXBlMSwgX193MSwgX19zMSwKKwkJICAgX19yMT4mIF9feCk7CisKKyAgICAgIC8qKgorICAgICAgICogRXh0cmFjdHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSAlIHN1YnRyYWN0X3dpdGhfY2FycnlfMDEgcmFuZG9tIG51bWJlcgorICAgICAgICogZ2VuZXJhdG9yIGVuZ2luZSBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlIHN1YnRyYWN0X3dpdGhfY2FycnlfMDEgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBpbnB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGV4dHJhY3RlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIGludCBfX3cxLCBpbnQgX19zMSwgaW50IF9fcjEsCisJICAgICAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICAgICAgZnJpZW5kIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgICAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCQkgICBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxPF9SZWFsVHlwZTEsIF9fdzEsIF9fczEsIF9fcjE+JiBfX3gpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9HZW4+CisgICAgICAgIHZvaWQKKyAgICAgICAgc2VlZChfR2VuJiBfX2csIHRydWVfdHlwZSkKKyAgICAgICAgeyByZXR1cm4gc2VlZChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX2cpKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfR2VuPgorICAgICAgICB2b2lkCisgICAgICAgIHNlZWQoX0dlbiYgX19nLCBmYWxzZV90eXBlKTsKKworICAgICAgdm9pZAorICAgICAgX01faW5pdGlhbGl6ZV9ucG93cygpOworCisgICAgICBzdGF0aWMgY29uc3QgaW50IF9fbiA9IChfX3cgKyAzMSkgLyAzMjsKKworICAgICAgdHlwZWRlZiBfX2RldGFpbDo6X1VJbnQzMlR5cGUgX1VJbnQzMlR5cGU7CisgICAgICBfVUludDMyVHlwZSAgX01feFtsb25nX2xhZ11bX19uXTsKKyAgICAgIF9SZWFsVHlwZSAgICBfTV9ucG93c1tfX25dOworICAgICAgX1VJbnQzMlR5cGUgIF9NX2NhcnJ5OworICAgICAgaW50ICAgICAgICAgIF9NX3A7CisgICAgfTsKKworICB0eXBlZGVmIHN1YnRyYWN0X3dpdGhfY2FycnlfMDE8ZmxvYXQsIDI0LCAxMCwgMjQ+ICAgcmFubHV4X2Jhc2VfMDE7CisKKyAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAvLyA1MDguIEJhZCBwYXJhbWV0ZXJzIGZvciByYW5sdXg2NF9iYXNlXzAxLgorICB0eXBlZGVmIHN1YnRyYWN0X3dpdGhfY2FycnlfMDE8ZG91YmxlLCA0OCwgNSwgMTI+IHJhbmx1eDY0X2Jhc2VfMDE7ICAKKworCisgIC8qKgorICAgKiBQcm9kdWNlcyByYW5kb20gbnVtYmVycyBmcm9tIHNvbWUgYmFzZSBlbmdpbmUgYnkgZGlzY2FyZGluZyBibG9ja3Mgb2YKKyAgICogZGF0YS4KKyAgICoKKyAgICogMCA8PSBAcCBfX3IgPD0gQHAgX19wCisgICAqLworICB0ZW1wbGF0ZTxjbGFzcyBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciwgaW50IF9fcCwgaW50IF9fcj4KKyAgICBjbGFzcyBkaXNjYXJkX2Jsb2NrCisgICAgeworICAgICAgLy8gX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzKHR5cGVuYW1lIGJhc2VfdHlwZTo6cmVzdWx0X3R5cGUsCisgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQXJpdGhtZXRpY1R5cGVDb25jZXB0KQorCisgICAgcHVibGljOgorICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSB1bmRlcmx5aW5nIGdlbmVyYXRvciBlbmdpbmUuICovCisgICAgICB0eXBlZGVmIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yICAgYmFzZV90eXBlOworICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSBnZW5lcmF0ZWQgcmFuZG9tIHZhbHVlLiAqLworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OnJlc3VsdF90eXBlIHJlc3VsdF90eXBlOworCisgICAgICAvLyBwYXJhbWV0ZXIgdmFsdWVzCisgICAgICBzdGF0aWMgY29uc3QgaW50IGJsb2NrX3NpemUgPSBfX3A7CisgICAgICBzdGF0aWMgY29uc3QgaW50IHVzZWRfYmxvY2sgPSBfX3I7CisKKyAgICAgIC8qKgorICAgICAgICogQ29uc3RydWN0cyBhIGRlZmF1bHQgJWRpc2NhcmRfYmxvY2sgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIFRoZSB1bmRlcmx5aW5nIGVuZ2luZSBpcyBkZWZhdWx0IGNvbnN0cnVjdGVkIGFzIHdlbGwuCisgICAgICAgKi8KKyAgICAgIGRpc2NhcmRfYmxvY2soKQorICAgICAgOiBfTV9uKDApIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIENvcHkgY29uc3RydWN0cyBhICVkaXNjYXJkX2Jsb2NrIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBDb3BpZXMgYW4gZXhpc3RpbmcgYmFzZSBjbGFzcyByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAgICAgICAqIEBwYXJhbSBybmcgQW4gZXhpc3RpbmcgKGJhc2UgY2xhc3MpIGVuZ2luZSBvYmplY3QuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBkaXNjYXJkX2Jsb2NrKGNvbnN0IGJhc2VfdHlwZSYgX19ybmcpCisgICAgICA6IF9NX2IoX19ybmcpLCBfTV9uKDApIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIFNlZWQgY29uc3RydWN0cyBhICVkaXNjYXJkX2Jsb2NrIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBDb25zdHJ1Y3RzIHRoZSB1bmRlcmx5aW5nIGdlbmVyYXRvciBlbmdpbmUgc2VlZGVkIHdpdGggQHAgX19zLgorICAgICAgICogQHBhcmFtIF9fcyBBIHNlZWQgdmFsdWUgZm9yIHRoZSBiYXNlIGNsYXNzIGVuZ2luZS4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGRpc2NhcmRfYmxvY2sodW5zaWduZWQgbG9uZyBfX3MpCisgICAgICA6IF9NX2IoX19zKSwgX01fbigwKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBHZW5lcmF0b3IgY29uc3RydWN0IGEgJWRpc2NhcmRfYmxvY2sgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2cgQSBzZWVkIGdlbmVyYXRvciBmdW5jdGlvbi4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0dlbj4KKyAgICAgICAgZGlzY2FyZF9ibG9jayhfR2VuJiBfX2cpCisJOiBfTV9iKF9fZyksIF9NX24oMCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogUmVzZWVkcyB0aGUgJWRpc2NhcmRfYmxvY2sgb2JqZWN0IHdpdGggdGhlIGRlZmF1bHQgc2VlZCBmb3IgdGhlCisgICAgICAgKiB1bmRlcmx5aW5nIGJhc2UgY2xhc3MgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqLworICAgICAgdm9pZCBzZWVkKCkKKyAgICAgIHsKKwlfTV9iLnNlZWQoKTsKKwlfTV9uID0gMDsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiBSZXNlZWRzIHRoZSAlZGlzY2FyZF9ibG9jayBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gc2VlZCBnZW5lcmF0b3IKKyAgICAgICAqIGZ1bmN0aW9uLgorICAgICAgICogQHBhcmFtIF9fZyBBIHNlZWQgZ2VuZXJhdG9yIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfR2VuPgorICAgICAgICB2b2lkIHNlZWQoX0dlbiYgX19nKQorICAgICAgICB7CisJICBfTV9iLnNlZWQoX19nKTsKKwkgIF9NX24gPSAwOworCX0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIGEgY29uc3QgcmVmZXJlbmNlIHRvIHRoZSB1bmRlcmx5aW5nIGdlbmVyYXRvciBlbmdpbmUgb2JqZWN0LgorICAgICAgICovCisgICAgICBjb25zdCBiYXNlX3R5cGUmCisgICAgICBiYXNlKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2I7IH0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIHRoZSBtaW5pbXVtIHZhbHVlIGluIHRoZSBnZW5lcmF0ZWQgcmFuZG9tIG51bWJlciByYW5nZS4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9iLm1pbigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogR2V0cyB0aGUgbWF4aW11bSB2YWx1ZSBpbiB0aGUgZ2VuZXJhdGVkIHJhbmRvbSBudW1iZXIgcmFuZ2UuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fYi5tYXgoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEdldHMgdGhlIG5leHQgdmFsdWUgaW4gdGhlIGdlbmVyYXRlZCByYW5kb20gbnVtYmVyIHNlcXVlbmNlLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgb3BlcmF0b3IoKSgpOworCisgICAgICAvKioKKyAgICAgICAqIENvbXBhcmVzIHR3byAlZGlzY2FyZF9ibG9jayByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBvYmplY3RzIG9mCisgICAgICAgKiB0aGUgc2FtZSB0eXBlIGZvciBlcXVhbGl0eS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19saHMgQSAlZGlzY2FyZF9ibG9jayByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBvYmplY3QuCisgICAgICAgKiBAcGFyYW0gX19yaHMgQW5vdGhlciAlZGlzY2FyZF9ibG9jayByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgICAgICogICAgICAgICAgICAgIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0d28gb2JqZWN0cyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgZGlzY2FyZF9ibG9jayYgX19saHMsIGNvbnN0IGRpc2NhcmRfYmxvY2smIF9fcmhzKQorICAgICAgeyByZXR1cm4gKF9fbGhzLl9NX2IgPT0gX19yaHMuX01fYikgJiYgKF9fbGhzLl9NX24gPT0gX19yaHMuX01fbik7IH0KKworICAgICAgLyoqCisgICAgICAgKiBDb21wYXJlcyB0d28gJWRpc2NhcmRfYmxvY2sgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb2JqZWN0cyBvZgorICAgICAgICogdGhlIHNhbWUgdHlwZSBmb3IgaW5lcXVhbGl0eS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19saHMgQSAlZGlzY2FyZF9ibG9jayByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBvYmplY3QuCisgICAgICAgKiBAcGFyYW0gX19yaHMgQW5vdGhlciAlZGlzY2FyZF9ibG9jayByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgICAgICogICAgICAgICAgICAgIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0d28gb2JqZWN0cyBhcmUgbm90IGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuCisgICAgICAgKi8KKyAgICAgIGZyaWVuZCBib29sCisgICAgICBvcGVyYXRvciE9KGNvbnN0IGRpc2NhcmRfYmxvY2smIF9fbGhzLCBjb25zdCBkaXNjYXJkX2Jsb2NrJiBfX3JocykKKyAgICAgIHsgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogSW5zZXJ0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhICVkaXNjYXJkX2Jsb2NrIHJhbmRvbSBudW1iZXIKKyAgICAgICAqIGdlbmVyYXRvciBlbmdpbmUgQHAgX194IGludG8gdGhlIG91dHB1dCBzdHJlYW0gQHAgX19vcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlZGlzY2FyZF9ibG9jayByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IxLCBpbnQgX19wMSwgaW50IF9fcjEsCisJICAgICAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICAgICAgZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgICAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCQkgICBjb25zdCBkaXNjYXJkX2Jsb2NrPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMSwKKwkJICAgX19wMSwgX19yMT4mIF9feCk7CisKKyAgICAgIC8qKgorICAgICAgICogRXh0cmFjdHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSAlIHN1YnRyYWN0X3dpdGhfY2FycnkgcmFuZG9tIG51bWJlcgorICAgICAgICogZ2VuZXJhdG9yIGVuZ2luZSBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlZGlzY2FyZF9ibG9jayByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggZXh0cmFjdGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IxLCBpbnQgX19wMSwgaW50IF9fcjEsCisJICAgICAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICAgICAgZnJpZW5kIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgICAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCQkgICBkaXNjYXJkX2Jsb2NrPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMSwKKwkJICAgX19wMSwgX19yMT4mIF9feCk7CisKKyAgICBwcml2YXRlOgorICAgICAgYmFzZV90eXBlIF9NX2I7CisgICAgICBpbnQgICAgICAgX01fbjsKKyAgICB9OworCisKKyAgLyoqCisgICAqIEphbWVzJ3MgbHV4dXJ5LWxldmVsLTMgaW50ZWdlciBhZGFwdGF0aW9uIG9mIEx1ZXNjaGVyJ3MgZ2VuZXJhdG9yLgorICAgKi8KKyAgdHlwZWRlZiBkaXNjYXJkX2Jsb2NrPAorICAgIHN1YnRyYWN0X3dpdGhfY2Fycnk8dW5zaWduZWQgbG9uZywgKDFVTCA8PCAyNCksIDEwLCAyND4sCisgICAgICAyMjMsCisgICAgICAyNAorICAgICAgPiByYW5sdXgzOworCisgIC8qKgorICAgKiBKYW1lcydzIGx1eHVyeS1sZXZlbC00IGludGVnZXIgYWRhcHRhdGlvbiBvZiBMdWVzY2hlcidzIGdlbmVyYXRvci4KKyAgICovCisgIHR5cGVkZWYgZGlzY2FyZF9ibG9jazwKKyAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5PHVuc2lnbmVkIGxvbmcsICgxVUwgPDwgMjQpLCAxMCwgMjQ+LAorICAgICAgMzg5LAorICAgICAgMjQKKyAgICAgID4gcmFubHV4NDsKKworICB0eXBlZGVmIGRpc2NhcmRfYmxvY2s8CisgICAgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMTxmbG9hdCwgMjQsIDEwLCAyND4sCisgICAgICAyMjMsCisgICAgICAyNAorICAgICAgPiByYW5sdXgzXzAxOworCisgIHR5cGVkZWYgZGlzY2FyZF9ibG9jazwKKyAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxPGZsb2F0LCAyNCwgMTAsIDI0PiwKKyAgICAgIDM4OSwKKyAgICAgIDI0CisgICAgICA+IHJhbmx1eDRfMDE7CisKKworICAvKioKKyAgICogQSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBhZGFwdG9yIGNsYXNzIHRoYXQgY29tYmluZXMgdHdvIHJhbmRvbSBudW1iZXIKKyAgICogZ2VuZXJhdG9yIGVuZ2luZXMgaW50byBhIHNpbmdsZSBvdXRwdXQgc2VxdWVuY2UuCisgICAqLworICB0ZW1wbGF0ZTxjbGFzcyBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjEsIGludCBfX3MxLAorCSAgIGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMiwgaW50IF9fczI+CisgICAgY2xhc3MgeG9yX2NvbWJpbmUKKyAgICB7CisgICAgICAvLyBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXModHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IxOjoKKyAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfdHlwZSwgQXJpdGhtZXRpY1R5cGVDb25jZXB0KQorICAgICAgLy8gX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzKHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMjo6CisgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3R5cGUsIEFyaXRobWV0aWNUeXBlQ29uY2VwdCkKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgZmlyc3QgdW5kZXJseWluZyBnZW5lcmF0b3IgZW5naW5lLiAqLworICAgICAgdHlwZWRlZiBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjEgICBiYXNlMV90eXBlOworICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSBzZWNvbmQgdW5kZXJseWluZyBnZW5lcmF0b3IgZW5naW5lLiAqLworICAgICAgdHlwZWRlZiBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjIgICBiYXNlMl90eXBlOworCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZTFfdHlwZTo6cmVzdWx0X3R5cGUgX1Jlc3VsdF90eXBlMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZTJfdHlwZTo6cmVzdWx0X3R5cGUgX1Jlc3VsdF90eXBlMjsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgZ2VuZXJhdGVkIHJhbmRvbSB2YWx1ZS4gKi8KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2NvbmRpdGlvbmFsX3R5cGU8KHNpemVvZihfUmVzdWx0X3R5cGUxKQorCQkJCQkJICAgICAgPiBzaXplb2YoX1Jlc3VsdF90eXBlMikpLAorCV9SZXN1bHRfdHlwZTEsIF9SZXN1bHRfdHlwZTI+OjpfX3R5cGUgcmVzdWx0X3R5cGU7CisKKyAgICAgIC8vIHBhcmFtZXRlciB2YWx1ZXMKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2hpZnQxID0gX19zMTsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2hpZnQyID0gX19zMjsKKworICAgICAgLy8gY29uc3RydWN0b3JzIGFuZCBtZW1iZXIgZnVuY3Rpb24KKyAgICAgIHhvcl9jb21iaW5lKCkKKyAgICAgIDogX01fYjEoKSwgX01fYjIoKQkKKyAgICAgIHsgX01faW5pdGlhbGl6ZV9tYXgoKTsgfQorCisgICAgICB4b3JfY29tYmluZShjb25zdCBiYXNlMV90eXBlJiBfX3JuZzEsIGNvbnN0IGJhc2UyX3R5cGUmIF9fcm5nMikKKyAgICAgIDogX01fYjEoX19ybmcxKSwgX01fYjIoX19ybmcyKQorICAgICAgeyBfTV9pbml0aWFsaXplX21heCgpOyB9CisKKyAgICAgIHhvcl9jb21iaW5lKHVuc2lnbmVkIGxvbmcgX19zKQorICAgICAgOiBfTV9iMShfX3MpLCBfTV9iMihfX3MgKyAxKQorICAgICAgeyBfTV9pbml0aWFsaXplX21heCgpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9HZW4+CisgICAgICAgIHhvcl9jb21iaW5lKF9HZW4mIF9fZykKKwk6IF9NX2IxKF9fZyksIF9NX2IyKF9fZykKKyAgICAgICAgeyBfTV9pbml0aWFsaXplX21heCgpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHNlZWQoKQorICAgICAgeworCV9NX2IxLnNlZWQoKTsKKwlfTV9iMi5zZWVkKCk7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9HZW4+CisgICAgICAgIHZvaWQKKyAgICAgICAgc2VlZChfR2VuJiBfX2cpCisgICAgICAgIHsKKwkgIF9NX2IxLnNlZWQoX19nKTsKKwkgIF9NX2IyLnNlZWQoX19nKTsKKwl9CisKKyAgICAgIGNvbnN0IGJhc2UxX3R5cGUmCisgICAgICBiYXNlMSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9iMTsgfQorCisgICAgICBjb25zdCBiYXNlMl90eXBlJgorICAgICAgYmFzZTIoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fYjI7IH0KKworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpIGNvbnN0CisgICAgICB7IHJldHVybiAwOyB9CisKKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fbWF4OyB9CisKKyAgICAgIC8qKgorICAgICAgICogR2V0cyB0aGUgbmV4dCByYW5kb20gbnVtYmVyIGluIHRoZSBzZXF1ZW5jZS4KKyAgICAgICAqLworICAgICAgLy8gTkI6IE5vdCBleGFjdGx5IHRoZSBUUjEgZm9ybXVsYSwgcGVyIE4yMDc5IGluc3RlYWQuCisgICAgICByZXN1bHRfdHlwZQorICAgICAgb3BlcmF0b3IoKSgpCisgICAgICB7CisJcmV0dXJuICgocmVzdWx0X3R5cGUoX01fYjEoKSAtIF9NX2IxLm1pbigpKSA8PCBzaGlmdDEpCisJCV4gKHJlc3VsdF90eXBlKF9NX2IyKCkgLSBfTV9iMi5taW4oKSkgPDwgc2hpZnQyKSk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogQ29tcGFyZXMgdHdvICV4b3JfY29tYmluZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBvYmplY3RzIG9mCisgICAgICAgKiB0aGUgc2FtZSB0eXBlIGZvciBlcXVhbGl0eS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19saHMgQSAleG9yX2NvbWJpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb2JqZWN0LgorICAgICAgICogQHBhcmFtIF9fcmhzIEFub3RoZXIgJXhvcl9jb21iaW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgICAgKiAgICAgICAgICAgICAgb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHR3byBvYmplY3RzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgICovCisgICAgICBmcmllbmQgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCB4b3JfY29tYmluZSYgX19saHMsIGNvbnN0IHhvcl9jb21iaW5lJiBfX3JocykKKyAgICAgIHsKKwlyZXR1cm4gKF9fbGhzLmJhc2UxKCkgPT0gX19yaHMuYmFzZTEoKSkKKwkgICAgICAgICYmIChfX2xocy5iYXNlMigpID09IF9fcmhzLmJhc2UyKCkpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIENvbXBhcmVzIHR3byAleG9yX2NvbWJpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb2JqZWN0cyBvZgorICAgICAgICogdGhlIHNhbWUgdHlwZSBmb3IgaW5lcXVhbGl0eS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19saHMgQSAleG9yX2NvbWJpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb2JqZWN0LgorICAgICAgICogQHBhcmFtIF9fcmhzIEFub3RoZXIgJXhvcl9jb21iaW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgICAgKiAgICAgICAgICAgICAgb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHR3byBvYmplY3RzIGFyZSBub3QgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yIT0oY29uc3QgeG9yX2NvbWJpbmUmIF9fbGhzLCBjb25zdCB4b3JfY29tYmluZSYgX19yaHMpCisgICAgICB7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEluc2VydHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSAleG9yX2NvbWJpbmUgcmFuZG9tIG51bWJlcgorICAgICAgICogZ2VuZXJhdG9yIGVuZ2luZSBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICV4b3JfY29tYmluZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IxMSwgaW50IF9fczExLAorCSAgICAgICBjbGFzcyBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjIxLCBpbnQgX19zMjEsCisJICAgICAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICAgICAgZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgICAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCQkgICBjb25zdCB4b3JfY29tYmluZTxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjExLCBfX3MxMSwKKwkJICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IyMSwgX19zMjE+JiBfX3gpOworCisgICAgICAvKioKKyAgICAgICAqIEV4dHJhY3RzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgJXhvcl9jb21iaW5lIHJhbmRvbSBudW1iZXIKKyAgICAgICAqIGdlbmVyYXRvciBlbmdpbmUgQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbSBAcCBfX2lzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2lzIEFuIGlucHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJXhvcl9jb21iaW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4KKyAgICAgICAqIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjExLCBpbnQgX19zMTEsCisJICAgICAgIGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMjEsIGludCBfX3MyMSwKKwkgICAgICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgICAgICBmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJCSAgIHhvcl9jb21iaW5lPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMTEsIF9fczExLAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjIxLCBfX3MyMT4mIF9feCk7CisKKyAgICBwcml2YXRlOgorICAgICAgdm9pZAorICAgICAgX01faW5pdGlhbGl6ZV9tYXgoKTsKKworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIF9NX2luaXRpYWxpemVfbWF4X2F1eChyZXN1bHRfdHlwZSwgcmVzdWx0X3R5cGUsIGludCk7CisKKyAgICAgIGJhc2UxX3R5cGUgIF9NX2IxOworICAgICAgYmFzZTJfdHlwZSAgX01fYjI7CisgICAgICByZXN1bHRfdHlwZSBfTV9tYXg7CisgICAgfTsKKworCisgIC8qKgorICAgKiBBIHN0YW5kYXJkIGludGVyZmFjZSB0byBhIHBsYXRmb3JtLXNwZWNpZmljIG5vbi1kZXRlcm1pbmlzdGljCisgICAqIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIChpZiBhbnkgYXJlIGF2YWlsYWJsZSkuCisgICAqLworICBjbGFzcyByYW5kb21fZGV2aWNlCisgIHsKKyAgcHVibGljOgorICAgIC8vIHR5cGVzCisgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgcmVzdWx0X3R5cGU7CisKKyAgICAvLyBjb25zdHJ1Y3RvcnMsIGRlc3RydWN0b3JzIGFuZCBtZW1iZXIgZnVuY3Rpb25zCisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfUkFORE9NX1RSMQorCisgICAgZXhwbGljaXQKKyAgICByYW5kb21fZGV2aWNlKGNvbnN0IHN0ZDo6c3RyaW5nJiBfX3Rva2VuID0gIi9kZXYvdXJhbmRvbSIpCisgICAgeworICAgICAgaWYgKChfX3Rva2VuICE9ICIvZGV2L3VyYW5kb20iICYmIF9fdG9rZW4gIT0gIi9kZXYvcmFuZG9tIikKKwkgIHx8ICEoX01fZmlsZSA9IHN0ZDo6Zm9wZW4oX190b2tlbi5jX3N0cigpLCAicmIiKSkpCisJc3RkOjpfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJyYW5kb21fZGV2aWNlOjoiCisJCQkJICAgICAgICJyYW5kb21fZGV2aWNlKGNvbnN0IHN0ZDo6c3RyaW5nJikiKSk7CisgICAgfQorCisgICAgfnJhbmRvbV9kZXZpY2UoKQorICAgIHsgc3RkOjpmY2xvc2UoX01fZmlsZSk7IH0KKworI2Vsc2UKKworICAgIGV4cGxpY2l0CisgICAgcmFuZG9tX2RldmljZShjb25zdCBzdGQ6OnN0cmluZyYgX190b2tlbiA9ICJtdDE5OTM3IikKKyAgICA6IF9NX210KF9NX3N0cnRvdWwoX190b2tlbikpIHsgfQorCisgIHByaXZhdGU6CisgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcKKyAgICBfTV9zdHJ0b3VsKGNvbnN0IHN0ZDo6c3RyaW5nJiBfX3N0cikKKyAgICB7CisgICAgICB1bnNpZ25lZCBsb25nIF9fcmV0ID0gNTQ4OVVMOworICAgICAgaWYgKF9fc3RyICE9ICJtdDE5OTM3IikKKwl7CisJICBjb25zdCBjaGFyKiBfX25wdHIgPSBfX3N0ci5jX3N0cigpOworCSAgY2hhciogX19lbmRwdHI7CisJICBfX3JldCA9IHN0ZDo6c3RydG91bChfX25wdHIsICZfX2VuZHB0ciwgMCk7CisJICBpZiAoKl9fbnB0ciA9PSAnXDAnIHx8ICpfX2VuZHB0ciAhPSAnXDAnKQorCSAgICBzdGQ6Ol9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oInJhbmRvbV9kZXZpY2U6Ol9NX3N0cnRvdWwiCisJCQkJCSAgICIoY29uc3Qgc3RkOjpzdHJpbmcmKSIpKTsKKwl9CisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisgIHB1YmxpYzoKKworI2VuZGlmCisKKyAgICByZXN1bHRfdHlwZQorICAgIG1pbigpIGNvbnN0CisgICAgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1pbigpOyB9CisKKyAgICByZXN1bHRfdHlwZQorICAgIG1heCgpIGNvbnN0CisgICAgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1heCgpOyB9CisKKyAgICBkb3VibGUKKyAgICBlbnRyb3B5KCkgY29uc3QKKyAgICB7IHJldHVybiAwLjA7IH0KKworICAgIHJlc3VsdF90eXBlCisgICAgb3BlcmF0b3IoKSgpCisgICAgeworI2lmZGVmIF9HTElCQ1hYX1VTRV9SQU5ET01fVFIxCisgICAgICByZXN1bHRfdHlwZSBfX3JldDsKKyAgICAgIHN0ZDo6ZnJlYWQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJl9fcmV0KSwgc2l6ZW9mKHJlc3VsdF90eXBlKSwKKwkJIDEsIF9NX2ZpbGUpOworICAgICAgcmV0dXJuIF9fcmV0OworI2Vsc2UKKyAgICAgIHJldHVybiBfTV9tdCgpOworI2VuZGlmCisgICAgfQorCisgIHByaXZhdGU6CisgICAgcmFuZG9tX2RldmljZShjb25zdCByYW5kb21fZGV2aWNlJik7CisgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgcmFuZG9tX2RldmljZSYpOworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1JBTkRPTV9UUjEKKyAgICBGSUxFKiAgICAgICAgX01fZmlsZTsKKyNlbHNlCisgICAgbXQxOTkzNyAgICAgIF9NX210OworI2VuZGlmCisgIH07CisKKyAgLyogQH0gKi8gLy8gZ3JvdXAgdHIxX3JhbmRvbV9nZW5lcmF0b3JzCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIHRyMV9yYW5kb21fZGlzdHJpYnV0aW9ucyBSYW5kb20gTnVtYmVyIERpc3RyaWJ1dGlvbnMKKyAgICogQGluZ3JvdXAgdHIxX3JhbmRvbQorICAgKiBAeworICAgKi8KKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgdHIxX3JhbmRvbV9kaXN0cmlidXRpb25zX2Rpc2NyZXRlIERpc2NyZXRlIERpc3RyaWJ1dGlvbnMKKyAgICogQGluZ3JvdXAgdHIxX3JhbmRvbV9kaXN0cmlidXRpb25zCisgICAqIEB7CisgICAqLworCisgIC8qKgorICAgKiBAYnJpZWYgVW5pZm9ybSBkaXNjcmV0ZSBkaXN0cmlidXRpb24gZm9yIHJhbmRvbSBudW1iZXJzLgorICAgKiBBIGRpc2NyZXRlIHJhbmRvbSBkaXN0cmlidXRpb24gb24gdGhlIHJhbmdlIEBmJFttaW4sIG1heF1AZiQgd2l0aCBlcXVhbAorICAgKiBwcm9iYWJpbGl0eSB0aHJvdWdob3V0IHRoZSByYW5nZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlID0gaW50PgorICAgIGNsYXNzIHVuaWZvcm1faW50CisgICAgeworICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzKF9JbnRUeXBlLCBfSW50ZWdlckNvbmNlcHQpCisgCisgICAgcHVibGljOgorICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBkaXN0cmlidXRpb24uICovCisgICAgICB0eXBlZGVmIF9JbnRUeXBlIGlucHV0X3R5cGU7CisgICAgICAvKiogVGhlIHR5cGUgb2YgdGhlIHJhbmdlIG9mIHRoZSBkaXN0cmlidXRpb24uICovCisgICAgICB0eXBlZGVmIF9JbnRUeXBlIHJlc3VsdF90eXBlOworCisgICAgcHVibGljOgorICAgICAgLyoqCisgICAgICAgKiBDb25zdHJ1Y3RzIGEgdW5pZm9ybSBkaXN0cmlidXRpb24gb2JqZWN0LgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgdW5pZm9ybV9pbnQoX0ludFR5cGUgX19taW4gPSAwLCBfSW50VHlwZSBfX21heCA9IDkpCisgICAgICA6IF9NX21pbihfX21pbiksIF9NX21heChfX21heCkKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fbWluIDw9IF9NX21heCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogR2V0cyB0aGUgaW5jbHVzaXZlIGxvd2VyIGJvdW5kIG9mIHRoZSBkaXN0cmlidXRpb24gcmFuZ2UuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fbWluOyB9CisKKyAgICAgIC8qKgorICAgICAgICogR2V0cyB0aGUgaW5jbHVzaXZlIHVwcGVyIGJvdW5kIG9mIHRoZSBkaXN0cmlidXRpb24gcmFuZ2UuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fbWF4OyB9CisKKyAgICAgIC8qKgorICAgICAgICogUmVzZXRzIHRoZSBkaXN0cmlidXRpb24gc3RhdGUuCisgICAgICAgKgorICAgICAgICogRG9lcyBub3RoaW5nIGZvciB0aGUgdW5pZm9ybSBpbnRlZ2VyIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzZXQoKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIGEgdW5pZm9ybWx5IGRpc3RyaWJ1dGVkIHJhbmRvbSBudW1iZXIgaW4gdGhlIHJhbmdlCisgICAgICAgKiBAZiQobWluLCBtYXgpQGYkLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgICAgcmVzdWx0X3R5cGUKKyAgICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorICAgICAgICB7CisJICB0eXBlZGVmIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yOjpyZXN1bHRfdHlwZQorCSAgICBfVVJlc3VsdF90eXBlOworCSAgcmV0dXJuIF9NX2NhbGwoX191cm5nLCBfTV9taW4sIF9NX21heCwKKwkJCSB0eXBlbmFtZSBpc19pbnRlZ3JhbDxfVVJlc3VsdF90eXBlPjo6dHlwZSgpKTsKKwl9CisKKyAgICAgIC8qKgorICAgICAgICogR2V0cyBhIHVuaWZvcm0gcmFuZG9tIG51bWJlciBpbiB0aGUgcmFuZ2UgQGYkWzAsIG4pQGYkLgorICAgICAgICoKKyAgICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgYWltZWQgYXQgdXNlIHdpdGggc3RkOjpyYW5kb21fc2h1ZmZsZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICAgIHJlc3VsdF90eXBlCisgICAgICAgIG9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywgcmVzdWx0X3R5cGUgX19uKQorICAgICAgICB7CisJICB0eXBlZGVmIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yOjpyZXN1bHRfdHlwZQorCSAgICBfVVJlc3VsdF90eXBlOworCSAgcmV0dXJuIF9NX2NhbGwoX191cm5nLCAwLCBfX24gLSAxLAorCQkJIHR5cGVuYW1lIGlzX2ludGVncmFsPF9VUmVzdWx0X3R5cGU+Ojp0eXBlKCkpOworCX0KKworICAgICAgLyoqCisgICAgICAgKiBJbnNlcnRzIGEgJXVuaWZvcm1faW50IHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uIEBwIF9feCBpbnRvIHRoZQorICAgICAgICogb3V0cHV0IHN0cmVhbSBAcCBvcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAldW5pZm9ybV9pbnQgcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUxLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgICAgIGZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICAgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkJICAgY29uc3QgdW5pZm9ybV9pbnQ8X0ludFR5cGUxPiYgX194KTsKKworICAgICAgLyoqCisgICAgICAgKiBFeHRyYWN0cyBhICV1bmlmb3JtX2ludCByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAgICogQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbSBAcCBfX2lzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2lzIEFuIGlucHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJXVuaWZvcm1faW50IHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUxLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgICAgIGZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICAgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkJICAgdW5pZm9ybV9pbnQ8X0ludFR5cGUxPiYgX194KTsKKworICAgIHByaXZhdGU6CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgICAgcmVzdWx0X3R5cGUKKyAgICAgICAgX01fY2FsbChfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQlyZXN1bHRfdHlwZSBfX21pbiwgcmVzdWx0X3R5cGUgX19tYXgsIHRydWVfdHlwZSk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgICByZXN1bHRfdHlwZQorICAgICAgICBfTV9jYWxsKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCXJlc3VsdF90eXBlIF9fbWluLCByZXN1bHRfdHlwZSBfX21heCwgZmFsc2VfdHlwZSkKKyAgICAgICAgeworCSAgcmV0dXJuIHJlc3VsdF90eXBlKChfX3VybmcoKSAtIF9fdXJuZy5taW4oKSkKKwkJCSAgICAgLyAoX191cm5nLm1heCgpIC0gX191cm5nLm1pbigpKQorCQkJICAgICAqIChfX21heCAtIF9fbWluICsgMSkpICsgX19taW47CisJfQorCisgICAgICBfSW50VHlwZSBfTV9taW47CisgICAgICBfSW50VHlwZSBfTV9tYXg7CisgICAgfTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgQSBCZXJub3VsbGkgcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAqCisgICAqIEdlbmVyYXRlcyBhIHNlcXVlbmNlIG9mIHRydWUgYW5kIGZhbHNlIHZhbHVlcyB3aXRoIGxpa2VsaWhvb2QgQGYkIHAgQGYkCisgICAqIHRoYXQgdHJ1ZSB3aWxsIGNvbWUgdXAgYW5kIEBmJCAoMSAtIHApIEBmJCB0aGF0IGZhbHNlIHdpbGwgYXBwZWFyLgorICAgKi8KKyAgY2xhc3MgYmVybm91bGxpX2Rpc3RyaWJ1dGlvbgorICB7CisgIHB1YmxpYzoKKyAgICB0eXBlZGVmIGludCAgaW5wdXRfdHlwZTsKKyAgICB0eXBlZGVmIGJvb2wgcmVzdWx0X3R5cGU7CisKKyAgcHVibGljOgorICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBCZXJub3VsbGkgZGlzdHJpYnV0aW9uIHdpdGggbGlrZWxpaG9vZCBAcCBwLgorICAgICAqCisgICAgICogQHBhcmFtIF9fcCAgW0lOXSAgVGhlIGxpa2VsaWhvb2Qgb2YgYSB0cnVlIHJlc3VsdCBiZWluZyByZXR1cm5lZC4gIE11c3QKKyAgICAgKiBiZSBpbiB0aGUgaW50ZXJ2YWwgQGYkIFswLCAxXSBAZiQuCisgICAgICovCisgICAgZXhwbGljaXQKKyAgICBiZXJub3VsbGlfZGlzdHJpYnV0aW9uKGRvdWJsZSBfX3AgPSAwLjUpCisgICAgOiBfTV9wKF9fcCkKKyAgICB7IAorICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKChfTV9wID49IDAuMCkgJiYgKF9NX3AgPD0gMS4wKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgQHAgcCBwYXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgKi8KKyAgICBkb3VibGUKKyAgICBwKCkgY29uc3QKKyAgICB7IHJldHVybiBfTV9wOyB9CisKKyAgICAvKioKKyAgICAgKiBSZXNldHMgdGhlIGRpc3RyaWJ1dGlvbiBzdGF0ZS4KKyAgICAgKgorICAgICAqIERvZXMgbm90aGluZyBmb3IgYSBCZXJub3VsbGkgZGlzdHJpYnV0aW9uLgorICAgICAqLworICAgIHZvaWQKKyAgICByZXNldCgpIHsgfQorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbmV4dCB2YWx1ZSBpbiB0aGUgQmVybm91bGxpYW4gc2VxdWVuY2UuCisgICAgICovCisgICAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICByZXN1bHRfdHlwZQorICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorICAgICAgeworCWlmICgoX191cm5nKCkgLSBfX3VybmcubWluKCkpIDwgX01fcCAqIChfX3VybmcubWF4KCkgLSBfX3VybmcubWluKCkpKQorCSAgcmV0dXJuIHRydWU7CisJcmV0dXJuIGZhbHNlOworICAgICAgfQorCisgICAgLyoqCisgICAgICogSW5zZXJ0cyBhICViZXJub3VsbGlfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICogQHAgX194IGludG8gdGhlIG91dHB1dCBzdHJlYW0gQHAgX19vcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICogQHBhcmFtIF9feCAgQSAlYmVybm91bGxpX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAqIGFuIGVycm9yIHN0YXRlLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICAgIGZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJCSBjb25zdCBiZXJub3VsbGlfZGlzdHJpYnV0aW9uJiBfX3gpOworCisgICAgLyoqCisgICAgICogRXh0cmFjdHMgYSAlYmVybm91bGxpX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAqIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBfX2lzIEFuIGlucHV0IHN0cmVhbS4KKyAgICAgKiBAcGFyYW0gX194ICBBICViZXJub3VsbGlfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBpbnB1dCBzdHJlYW0gd2l0aCBAcCBfX3ggZXh0cmFjdGVkIG9yIGluIGFuIGVycm9yIHN0YXRlLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICAgIGZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJCSBiZXJub3VsbGlfZGlzdHJpYnV0aW9uJiBfX3gpCisgICAgICB7IHJldHVybiBfX2lzID4+IF9feC5fTV9wOyB9CisKKyAgcHJpdmF0ZToKKyAgICBkb3VibGUgX01fcDsKKyAgfTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgQSBkaXNjcmV0ZSBnZW9tZXRyaWMgcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAqCisgICAqIFRoZSBmb3JtdWxhIGZvciB0aGUgZ2VvbWV0cmljIHByb2JhYmlsaXR5IG1hc3MgZnVuY3Rpb24gaXMgCisgICAqIEBmJCBwKGkpID0gKDEgLSBwKXBee2ktMX0gQGYkIHdoZXJlIEBmJCBwIEBmJCBpcyB0aGUgcGFyYW1ldGVyIG9mIHRoZQorICAgKiBkaXN0cmlidXRpb24uCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSA9IGludCwgdHlwZW5hbWUgX1JlYWxUeXBlID0gZG91YmxlPgorICAgIGNsYXNzIGdlb21ldHJpY19kaXN0cmlidXRpb24KKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gdHlwZXMKKyAgICAgIHR5cGVkZWYgX1JlYWxUeXBlIGlucHV0X3R5cGU7CisgICAgICB0eXBlZGVmIF9JbnRUeXBlICByZXN1bHRfdHlwZTsKKworICAgICAgLy8gY29uc3RydWN0b3JzIGFuZCBtZW1iZXIgZnVuY3Rpb24KKyAgICAgIGV4cGxpY2l0CisgICAgICBnZW9tZXRyaWNfZGlzdHJpYnV0aW9uKGNvbnN0IF9SZWFsVHlwZSYgX19wID0gX1JlYWxUeXBlKDAuNSkpCisgICAgICA6IF9NX3AoX19wKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVCgoX01fcCA+IDAuMCkgJiYgKF9NX3AgPCAxLjApKTsKKwlfTV9pbml0aWFsaXplKCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogR2V0cyB0aGUgZGlzdHJpYnV0aW9uIHBhcmFtZXRlciBAcCBwLgorICAgICAgICovCisgICAgICBfUmVhbFR5cGUKKyAgICAgIHAoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcDsgfQorCisgICAgICB2b2lkCisgICAgICByZXNldCgpIHsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgICAgcmVzdWx0X3R5cGUKKyAgICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKTsKKworICAgICAgLyoqCisgICAgICAgKiBJbnNlcnRzIGEgJWdlb21ldHJpY19kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIF9fb3MuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fb3MgQW4gb3V0cHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJWdlb21ldHJpY19kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUxLCB0eXBlbmFtZSBfUmVhbFR5cGUxLAorCSAgICAgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgICAgIGZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICAgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkJICAgY29uc3QgZ2VvbWV0cmljX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZTEsIF9SZWFsVHlwZTE+JiBfX3gpOworCisgICAgICAvKioKKyAgICAgICAqIEV4dHJhY3RzIGEgJWdlb21ldHJpY19kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVnZW9tZXRyaWNfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgICAgICBmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJCSAgIGdlb21ldHJpY19kaXN0cmlidXRpb24mIF9feCkKKyAgICAgICAgeworCSAgX19pcyA+PiBfX3guX01fcDsKKwkgIF9feC5fTV9pbml0aWFsaXplKCk7CisJICByZXR1cm4gX19pczsKKwl9CisKKyAgICBwcml2YXRlOgorICAgICAgdm9pZAorICAgICAgX01faW5pdGlhbGl6ZSgpCisgICAgICB7IF9NX2xvZ19wID0gc3RkOjpsb2coX01fcCk7IH0KKworICAgICAgX1JlYWxUeXBlIF9NX3A7CisgICAgICBfUmVhbFR5cGUgX01fbG9nX3A7CisgICAgfTsKKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBjbGFzcyBub3JtYWxfZGlzdHJpYnV0aW9uOworCisgIC8qKgorICAgKiBAYnJpZWYgQSBkaXNjcmV0ZSBQb2lzc29uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgKgorICAgKiBUaGUgZm9ybXVsYSBmb3IgdGhlIFBvaXNzb24gcHJvYmFiaWxpdHkgbWFzcyBmdW5jdGlvbiBpcworICAgKiBAZiQgcChpKSA9IFxmcmFje21lYW5eaX17aSF9IGVeey1tZWFufSBAZiQgd2hlcmUgQGYkIG1lYW4gQGYkIGlzIHRoZQorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlID0gaW50LCB0eXBlbmFtZSBfUmVhbFR5cGUgPSBkb3VibGU+CisgICAgY2xhc3MgcG9pc3Nvbl9kaXN0cmlidXRpb24KKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gdHlwZXMKKyAgICAgIHR5cGVkZWYgX1JlYWxUeXBlIGlucHV0X3R5cGU7CisgICAgICB0eXBlZGVmIF9JbnRUeXBlICByZXN1bHRfdHlwZTsKKworICAgICAgLy8gY29uc3RydWN0b3JzIGFuZCBtZW1iZXIgZnVuY3Rpb24KKyAgICAgIGV4cGxpY2l0CisgICAgICBwb2lzc29uX2Rpc3RyaWJ1dGlvbihjb25zdCBfUmVhbFR5cGUmIF9fbWVhbiA9IF9SZWFsVHlwZSgxKSkKKyAgICAgIDogX01fbWVhbihfX21lYW4pLCBfTV9uZCgpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9NX21lYW4gPiAwLjApOworCV9NX2luaXRpYWxpemUoKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIHRoZSBkaXN0cmlidXRpb24gcGFyYW1ldGVyIEBwIG1lYW4uCisgICAgICAgKi8KKyAgICAgIF9SZWFsVHlwZQorICAgICAgbWVhbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9tZWFuOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkKKyAgICAgIHsgX01fbmQucmVzZXQoKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgICAgcmVzdWx0X3R5cGUKKyAgICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKTsKKworICAgICAgLyoqCisgICAgICAgKiBJbnNlcnRzIGEgJXBvaXNzb25fZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVwb2lzc29uX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgb3V0cHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggaW5zZXJ0ZWQgb3IgaW4KKyAgICAgICAqIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZTEsIHR5cGVuYW1lIF9SZWFsVHlwZTEsCisJICAgICAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICAgICAgZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgICAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCQkgICBjb25zdCBwb2lzc29uX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZTEsIF9SZWFsVHlwZTE+JiBfX3gpOworCisgICAgICAvKioKKyAgICAgICAqIEV4dHJhY3RzIGEgJXBvaXNzb25fZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlcG9pc3Nvbl9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBpbnB1dCBzdHJlYW0gd2l0aCBAcCBfX3ggZXh0cmFjdGVkIG9yIGluIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZTEsIHR5cGVuYW1lIF9SZWFsVHlwZTEsCisJICAgICAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICAgICAgZnJpZW5kIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgICAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCQkgICBwb2lzc29uX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZTEsIF9SZWFsVHlwZTE+JiBfX3gpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHZvaWQKKyAgICAgIF9NX2luaXRpYWxpemUoKTsKKworICAgICAgLy8gTkI6IFVudXNlZCB3aGVuIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEgaXMgdW5kZWZpbmVkLgorICAgICAgbm9ybWFsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+IF9NX25kOworCisgICAgICBfUmVhbFR5cGUgX01fbWVhbjsKKworICAgICAgLy8gSG9zdHMgZWl0aGVyIGxvZyhtZWFuKSBvciB0aGUgdGhyZXNob2xkIG9mIHRoZSBzaW1wbGUgbWV0aG9kLgorICAgICAgX1JlYWxUeXBlIF9NX2xtX3RocjsKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAgICBfUmVhbFR5cGUgX01fbGZtLCBfTV9zbSwgX01fZCwgX01fc2N4LCBfTV8xY3gsIF9NX2MyYiwgX01fY2I7CisjZW5kaWYKKyAgICB9OworCisKKyAgLyoqCisgICAqIEBicmllZiBBIGRpc2NyZXRlIGJpbm9taWFsIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgKgorICAgKiBUaGUgZm9ybXVsYSBmb3IgdGhlIGJpbm9taWFsIHByb2JhYmlsaXR5IG1hc3MgZnVuY3Rpb24gaXMgCisgICAqIEBmJCBwKGkpID0gXGJpbm9te259e2l9IHBeaSAoMSAtIHApXnt0IC0gaX0gQGYkIHdoZXJlIEBmJCB0IEBmJAorICAgKiBhbmQgQGYkIHAgQGYkIGFyZSB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUgPSBpbnQsIHR5cGVuYW1lIF9SZWFsVHlwZSA9IGRvdWJsZT4KKyAgICBjbGFzcyBiaW5vbWlhbF9kaXN0cmlidXRpb24KKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gdHlwZXMKKyAgICAgIHR5cGVkZWYgX1JlYWxUeXBlIGlucHV0X3R5cGU7CisgICAgICB0eXBlZGVmIF9JbnRUeXBlICByZXN1bHRfdHlwZTsKKworICAgICAgLy8gY29uc3RydWN0b3JzIGFuZCBtZW1iZXIgZnVuY3Rpb24KKyAgICAgIGV4cGxpY2l0CisgICAgICBiaW5vbWlhbF9kaXN0cmlidXRpb24oX0ludFR5cGUgX190ID0gMSwKKwkJCSAgICBjb25zdCBfUmVhbFR5cGUmIF9fcCA9IF9SZWFsVHlwZSgwLjUpKQorICAgICAgOiBfTV90KF9fdCksIF9NX3AoX19wKSwgX01fbmQoKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVCgoX01fdCA+PSAwKSAmJiAoX01fcCA+PSAwLjApICYmIChfTV9wIDw9IDEuMCkpOworCV9NX2luaXRpYWxpemUoKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIHRoZSBkaXN0cmlidXRpb24gQHAgdCBwYXJhbWV0ZXIuCisgICAgICAgKi8KKyAgICAgIF9JbnRUeXBlCisgICAgICB0KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3Q7IH0KKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiBHZXRzIHRoZSBkaXN0cmlidXRpb24gQHAgcCBwYXJhbWV0ZXIuCisgICAgICAgKi8KKyAgICAgIF9SZWFsVHlwZQorICAgICAgcCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkKKyAgICAgIHsgX01fbmQucmVzZXQoKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgICAgcmVzdWx0X3R5cGUKKyAgICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKTsKKworICAgICAgLyoqCisgICAgICAgKiBJbnNlcnRzIGEgJWJpbm9taWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAgICogQHAgX194IGludG8gdGhlIG91dHB1dCBzdHJlYW0gQHAgX19vcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlYmlub21pYWxfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlMSwgdHlwZW5hbWUgX1JlYWxUeXBlMSwKKwkgICAgICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgICAgICBmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJCSAgIGNvbnN0IGJpbm9taWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZTEsIF9SZWFsVHlwZTE+JiBfX3gpOworCisgICAgICAvKioKKyAgICAgICAqIEV4dHJhY3RzIGEgJWJpbm9taWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAgICogQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbSBAcCBfX2lzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2lzIEFuIGlucHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJWJpbm9taWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4gYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlMSwgdHlwZW5hbWUgX1JlYWxUeXBlMSwKKwkgICAgICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgICAgICBmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJCSAgIGJpbm9taWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZTEsIF9SZWFsVHlwZTE+JiBfX3gpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHZvaWQKKyAgICAgIF9NX2luaXRpYWxpemUoKTsKKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICAgIHJlc3VsdF90eXBlCisgICAgICAgIF9NX3dhaXRpbmcoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywgX0ludFR5cGUgX190KTsKKworICAgICAgLy8gTkI6IFVudXNlZCB3aGVuIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEgaXMgdW5kZWZpbmVkLgorICAgICAgbm9ybWFsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+IF9NX25kOworCisgICAgICBfUmVhbFR5cGUgX01fcTsKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAgICBfUmVhbFR5cGUgX01fZDEsIF9NX2QyLCBfTV9zMSwgX01fczIsIF9NX2MsCisJICAgICAgICBfTV9hMSwgX01fYTEyMywgX01fcywgX01fbGYsIF9NX2xwMXA7CisjZW5kaWYKKyAgICAgIF9SZWFsVHlwZSBfTV9wOworICAgICAgX0ludFR5cGUgIF9NX3Q7CisKKyAgICAgIGJvb2wgICAgICBfTV9lYXN5OworICAgIH07CisKKyAgLyogQH0gKi8gLy8gZ3JvdXAgdHIxX3JhbmRvbV9kaXN0cmlidXRpb25zX2Rpc2NyZXRlCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIHRyMV9yYW5kb21fZGlzdHJpYnV0aW9uc19jb250aW51b3VzIENvbnRpbnVvdXMgRGlzdHJpYnV0aW9ucworICAgKiBAaW5ncm91cCB0cjFfcmFuZG9tX2Rpc3RyaWJ1dGlvbnMKKyAgICogQHsKKyAgICovCisKKyAgLyoqCisgICAqIEBicmllZiBVbmlmb3JtIGNvbnRpbnVvdXMgZGlzdHJpYnV0aW9uIGZvciByYW5kb20gbnVtYmVycy4KKyAgICoKKyAgICogQSBjb250aW51b3VzIHJhbmRvbSBkaXN0cmlidXRpb24gb24gdGhlIHJhbmdlIFttaW4sIG1heCkgd2l0aCBlcXVhbAorICAgKiBwcm9iYWJpbGl0eSB0aHJvdWdob3V0IHRoZSByYW5nZS4gIFRoZSBVUk5HIHNob3VsZCBiZSByZWFsLXZhbHVlZCBhbmQKKyAgICogZGVsaXZlciBudW1iZXIgaW4gdGhlIHJhbmdlIFswLCAxKS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSA9IGRvdWJsZT4KKyAgICBjbGFzcyB1bmlmb3JtX3JlYWwKKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gdHlwZXMKKyAgICAgIHR5cGVkZWYgX1JlYWxUeXBlIGlucHV0X3R5cGU7CisgICAgICB0eXBlZGVmIF9SZWFsVHlwZSByZXN1bHRfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKgorICAgICAgICogQ29uc3RydWN0cyBhIHVuaWZvcm1fcmVhbCBvYmplY3QuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fbWluIFtJTl0gIFRoZSBsb3dlciBib3VuZCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogQHBhcmFtIF9fbWF4IFtJTl0gIFRoZSB1cHBlciBib3VuZCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgdW5pZm9ybV9yZWFsKF9SZWFsVHlwZSBfX21pbiA9IF9SZWFsVHlwZSgwKSwKKwkJICAgX1JlYWxUeXBlIF9fbWF4ID0gX1JlYWxUeXBlKDEpKQorICAgICAgOiBfTV9taW4oX19taW4pLCBfTV9tYXgoX19tYXgpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9NX21pbiA8PSBfTV9tYXgpOworICAgICAgfQorCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWluKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX21pbjsgfQorCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX21heDsgfQorCisgICAgICB2b2lkCisgICAgICByZXNldCgpIHsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgICAgcmVzdWx0X3R5cGUKKyAgICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorICAgICAgICB7IHJldHVybiAoX191cm5nKCkgKiAoX01fbWF4IC0gX01fbWluKSkgKyBfTV9taW47IH0KKworICAgICAgLyoqCisgICAgICAgKiBJbnNlcnRzIGEgJXVuaWZvcm1fcmVhbCByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbiBAcCBfX3ggaW50byB0aGUKKyAgICAgICAqIG91dHB1dCBzdHJlYW0gQHAgX19vcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAldW5pZm9ybV9yZWFsIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICAgICAgZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgICAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCQkgICBjb25zdCB1bmlmb3JtX3JlYWw8X1JlYWxUeXBlMT4mIF9feCk7CisKKyAgICAgIC8qKgorICAgICAgICogRXh0cmFjdHMgYSAldW5pZm9ybV9yZWFsIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAldW5pZm9ybV9yZWFsIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgICAgICBmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJCSAgIHVuaWZvcm1fcmVhbDxfUmVhbFR5cGUxPiYgX194KTsKKworICAgIHByaXZhdGU6CisgICAgICBfUmVhbFR5cGUgX01fbWluOworICAgICAgX1JlYWxUeXBlIF9NX21heDsKKyAgICB9OworCisKKyAgLyoqCisgICAqIEBicmllZiBBbiBleHBvbmVudGlhbCBjb250aW51b3VzIGRpc3RyaWJ1dGlvbiBmb3IgcmFuZG9tIG51bWJlcnMuCisgICAqCisgICAqIFRoZSBmb3JtdWxhIGZvciB0aGUgZXhwb25lbnRpYWwgcHJvYmFiaWxpdHkgbWFzcyBmdW5jdGlvbiBpcyAKKyAgICogQGYkIHAoeCkgPSBcbGFtYmRhIGVeey1cbGFtYmRhIHh9IEBmJC4KKyAgICoKKyAgICogPHRhYmxlIGJvcmRlcj0xIGNlbGxwYWRkaW5nPTEwIGNlbGxzcGFjaW5nPTA+CisgICAqIDxjYXB0aW9uIGFsaWduPXRvcD5EaXN0cmlidXRpb24gU3RhdGlzdGljczwvY2FwdGlvbj4KKyAgICogPHRyPjx0ZD5NZWFuPC90ZD48dGQ+QGYkIFxmcmFjezF9e1xsYW1iZGF9IEBmJDwvdGQ+PC90cj4KKyAgICogPHRyPjx0ZD5NZWRpYW48L3RkPjx0ZD5AZiQgXGZyYWN7XGxuIDJ9e1xsYW1iZGF9IEBmJDwvdGQ+PC90cj4KKyAgICogPHRyPjx0ZD5Nb2RlPC90ZD48dGQ+QGYkIHplcm8gQGYkPC90ZD48L3RyPgorICAgKiA8dHI+PHRkPlJhbmdlPC90ZD48dGQ+QGYkWzAsIFxpbmZ0eV1AZiQ8L3RkPjwvdHI+CisgICAqIDx0cj48dGQ+U3RhbmRhcmQgRGV2aWF0aW9uPC90ZD48dGQ+QGYkIFxmcmFjezF9e1xsYW1iZGF9IEBmJDwvdGQ+PC90cj4KKyAgICogPC90YWJsZT4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSA9IGRvdWJsZT4KKyAgICBjbGFzcyBleHBvbmVudGlhbF9kaXN0cmlidXRpb24KKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gdHlwZXMKKyAgICAgIHR5cGVkZWYgX1JlYWxUeXBlIGlucHV0X3R5cGU7CisgICAgICB0eXBlZGVmIF9SZWFsVHlwZSByZXN1bHRfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKgorICAgICAgICogQ29uc3RydWN0cyBhbiBleHBvbmVudGlhbCBkaXN0cmlidXRpb24gd2l0aCBpbnZlcnNlIHNjYWxlIHBhcmFtZXRlcgorICAgICAgICogQGYkIFxsYW1iZGEgQGYkLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uKGNvbnN0IHJlc3VsdF90eXBlJiBfX2xhbWJkYSA9IHJlc3VsdF90eXBlKDEpKQorICAgICAgOiBfTV9sYW1iZGEoX19sYW1iZGEpCisgICAgICB7IAorCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChfTV9sYW1iZGEgPiAwKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIHRoZSBpbnZlcnNlIHNjYWxlIHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBfUmVhbFR5cGUKKyAgICAgIGxhbWJkYSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9sYW1iZGE7IH0KKworICAgICAgLyoqCisgICAgICAgKiBSZXNldHMgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqCisgICAgICAgKiBIYXMgbm8gZWZmZWN0IG9uIGV4cG9uZW50aWFsIGRpc3RyaWJ1dGlvbnMuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkgeyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgICByZXN1bHRfdHlwZQorICAgICAgICBvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisgICAgICAgIHsgcmV0dXJuIC1zdGQ6OmxvZyhfX3VybmcoKSkgLyBfTV9sYW1iZGE7IH0KKworICAgICAgLyoqCisgICAgICAgKiBJbnNlcnRzIGEgJWV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAgICogQHAgX194IGludG8gdGhlIG91dHB1dCBzdHJlYW0gQHAgX19vcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICAgICAgZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgICAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCQkgICBjb25zdCBleHBvbmVudGlhbF9kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mIF9feCk7CisKKyAgICAgIC8qKgorICAgICAgICogRXh0cmFjdHMgYSAlZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCBBICVleHBvbmVudGlhbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlcgorICAgICAgICogICAgICAgICAgICBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBpbnB1dCBzdHJlYW0gd2l0aCBAcCBfX3ggZXh0cmFjdGVkIG9yIGluIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgICAgIGZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICAgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkJICAgZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uJiBfX3gpCisgICAgICAgIHsgcmV0dXJuIF9faXMgPj4gX194Ll9NX2xhbWJkYTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHJlc3VsdF90eXBlIF9NX2xhbWJkYTsKKyAgICB9OworCisKKyAgLyoqCisgICAqIEBicmllZiBBIG5vcm1hbCBjb250aW51b3VzIGRpc3RyaWJ1dGlvbiBmb3IgcmFuZG9tIG51bWJlcnMuCisgICAqCisgICAqIFRoZSBmb3JtdWxhIGZvciB0aGUgbm9ybWFsIHByb2JhYmlsaXR5IG1hc3MgZnVuY3Rpb24gaXMgCisgICAqIEBmJCBwKHgpID0gXGZyYWN7MX17XHNpZ21hIFxzcXJ0ezIgXHBpfX0gCisgICAqICAgICAgICAgICAgZV57LSBcZnJhY3t7eCAtIG1lYW59XiB7Mn19ezIgXHNpZ21hIF4gezJ9fSB9IEBmJC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSA9IGRvdWJsZT4KKyAgICBjbGFzcyBub3JtYWxfZGlzdHJpYnV0aW9uCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIHR5cGVzCisgICAgICB0eXBlZGVmIF9SZWFsVHlwZSBpbnB1dF90eXBlOworICAgICAgdHlwZWRlZiBfUmVhbFR5cGUgcmVzdWx0X3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICAvKioKKyAgICAgICAqIENvbnN0cnVjdHMgYSBub3JtYWwgZGlzdHJpYnV0aW9uIHdpdGggcGFyYW1ldGVycyBAZiQgbWVhbiBAZiQgYW5kCisgICAgICAgKiBAZiQgXHNpZ21hIEBmJC4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIG5vcm1hbF9kaXN0cmlidXRpb24oY29uc3QgcmVzdWx0X3R5cGUmIF9fbWVhbiA9IHJlc3VsdF90eXBlKDApLAorCQkJICBjb25zdCByZXN1bHRfdHlwZSYgX19zaWdtYSA9IHJlc3VsdF90eXBlKDEpKQorICAgICAgOiBfTV9tZWFuKF9fbWVhbiksIF9NX3NpZ21hKF9fc2lnbWEpLCBfTV9zYXZlZF9hdmFpbGFibGUoZmFsc2UpCisgICAgICB7IAorCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChfTV9zaWdtYSA+IDApOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEdldHMgdGhlIG1lYW4gb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgX1JlYWxUeXBlCisgICAgICBtZWFuKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX21lYW47IH0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIHRoZSBAZiQgXHNpZ21hIEBmJCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBfUmVhbFR5cGUKKyAgICAgIHNpZ21hKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3NpZ21hOyB9CisKKyAgICAgIC8qKgorICAgICAgICogUmVzZXRzIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkKKyAgICAgIHsgX01fc2F2ZWRfYXZhaWxhYmxlID0gZmFsc2U7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICAgIHJlc3VsdF90eXBlCisgICAgICAgIG9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZyk7CisKKyAgICAgIC8qKgorICAgICAgICogSW5zZXJ0cyBhICVub3JtYWxfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVub3JtYWxfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICAgICAgZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgICAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCQkgICBjb25zdCBub3JtYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+JiBfX3gpOworCisgICAgICAvKioKKyAgICAgICAqIEV4dHJhY3RzIGEgJW5vcm1hbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVub3JtYWxfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgICAgICBmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJCSAgIG5vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mIF9feCk7CisKKyAgICBwcml2YXRlOgorICAgICAgcmVzdWx0X3R5cGUgX01fbWVhbjsKKyAgICAgIHJlc3VsdF90eXBlIF9NX3NpZ21hOworICAgICAgcmVzdWx0X3R5cGUgX01fc2F2ZWQ7CisgICAgICBib29sICAgICAgICBfTV9zYXZlZF9hdmFpbGFibGU7ICAgICAKKyAgICB9OworCisKKyAgLyoqCisgICAqIEBicmllZiBBIGdhbW1hIGNvbnRpbnVvdXMgZGlzdHJpYnV0aW9uIGZvciByYW5kb20gbnVtYmVycy4KKyAgICoKKyAgICogVGhlIGZvcm11bGEgZm9yIHRoZSBnYW1tYSBwcm9iYWJpbGl0eSBtYXNzIGZ1bmN0aW9uIGlzIAorICAgKiBAZiQgcCh4KSA9IFxmcmFjezF9e1xHYW1tYShcYWxwaGEpfSB4XntcYWxwaGEgLSAxfSBlXnsteH0gQGYkLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlID0gZG91YmxlPgorICAgIGNsYXNzIGdhbW1hX2Rpc3RyaWJ1dGlvbgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyB0eXBlcworICAgICAgdHlwZWRlZiBfUmVhbFR5cGUgaW5wdXRfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1JlYWxUeXBlIHJlc3VsdF90eXBlOworCisgICAgcHVibGljOgorICAgICAgLyoqCisgICAgICAgKiBDb25zdHJ1Y3RzIGEgZ2FtbWEgZGlzdHJpYnV0aW9uIHdpdGggcGFyYW1ldGVycyBAZiQgXGFscGhhIEBmJC4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGdhbW1hX2Rpc3RyaWJ1dGlvbihjb25zdCByZXN1bHRfdHlwZSYgX19hbHBoYV92YWwgPSByZXN1bHRfdHlwZSgxKSkKKyAgICAgIDogX01fYWxwaGEoX19hbHBoYV92YWwpCisgICAgICB7IAorCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChfTV9hbHBoYSA+IDApOworCV9NX2luaXRpYWxpemUoKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIHRoZSBAZiQgXGFscGhhIEBmJCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBfUmVhbFR5cGUKKyAgICAgIGFscGhhKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2FscGhhOyB9CisKKyAgICAgIC8qKgorICAgICAgICogUmVzZXRzIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkgeyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgICByZXN1bHRfdHlwZQorICAgICAgICBvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpOworCisgICAgICAvKioKKyAgICAgICAqIEluc2VydHMgYSAlZ2FtbWFfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVnYW1tYV9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgICAgICBmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJCSAgIGNvbnN0IGdhbW1hX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGUxPiYgX194KTsKKworICAgICAgLyoqCisgICAgICAgKiBFeHRyYWN0cyBhICVnYW1tYV9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVnYW1tYV9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBpbnB1dCBzdHJlYW0gd2l0aCBAcCBfX3ggZXh0cmFjdGVkIG9yIGluIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgICAgIGZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICAgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkJICAgZ2FtbWFfZGlzdHJpYnV0aW9uJiBfX3gpCisgICAgICAgIHsKKwkgIF9faXMgPj4gX194Ll9NX2FscGhhOworCSAgX194Ll9NX2luaXRpYWxpemUoKTsKKwkgIHJldHVybiBfX2lzOworCX0KKworICAgIHByaXZhdGU6CisgICAgICB2b2lkCisgICAgICBfTV9pbml0aWFsaXplKCk7CisKKyAgICAgIHJlc3VsdF90eXBlIF9NX2FscGhhOworCisgICAgICAvLyBIb3N0cyBlaXRoZXIgbGFtYmRhIG9mIEdCIG9yIGQgb2YgbW9kaWZpZWQgVmFkdXZhJ3MuCisgICAgICByZXN1bHRfdHlwZSBfTV9sX2Q7CisgICAgfTsKKworICAvKiBAfSAqLyAvLyBncm91cCB0cjFfcmFuZG9tX2Rpc3RyaWJ1dGlvbnNfY29udGludW91cworICAvKiBAfSAqLyAvLyBncm91cCB0cjFfcmFuZG9tX2Rpc3RyaWJ1dGlvbnMKKyAgLyogQH0gKi8gLy8gZ3JvdXAgdHIxX3JhbmRvbQorfQorfQorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX1JBTkRPTV9ICmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9yYW5kb20udGNjIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvcmFuZG9tLnRjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDU4Y2M3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvcmFuZG9tLnRjYwpAQCAtMCwwICsxLDE3MTAgQEAKKy8vIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiAob3V0IG9mIGxpbmUpIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisKKy8qKiBAZmlsZSB0cjEvcmFuZG9tLnRjYworICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCituYW1lc3BhY2Ugc3RkCit7CituYW1lc3BhY2UgdHIxCit7CisgIC8qCisgICAqIChGdXJ0aGVyKSBpbXBsZW1lbnRhdGlvbi1zcGFjZSBkZXRhaWxzLgorICAgKi8KKyAgbmFtZXNwYWNlIF9fZGV0YWlsCisgIHsKKyAgICAvLyBHZW5lcmFsIGNhc2UgZm9yIHggPSAoYXggKyBjKSBtb2QgbSAtLSB1c2UgU2NocmFnZSdzIGFsZ29yaXRobSB0byBhdm9pZAorICAgIC8vIGludGVnZXIgb3ZlcmZsb3cuCisgICAgLy8KKyAgICAvLyBCZWNhdXNlIGEgYW5kIGMgYXJlIGNvbXBpbGUtdGltZSBpbnRlZ3JhbCBjb25zdGFudHMgdGhlIGNvbXBpbGVyIGtpbmRseQorICAgIC8vIGVsaWRlcyBhbnkgdW5yZWFjaGFibGUgcGF0aHMuCisgICAgLy8KKyAgICAvLyBQcmVjb25kaXRpb25zOiAgYSA+IDAsIG0gPiAwLgorICAgIC8vCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfVHAgX19hLCBfVHAgX19jLCBfVHAgX19tLCBib29sPgorICAgICAgc3RydWN0IF9Nb2QKKyAgICAgIHsKKwlzdGF0aWMgX1RwCisJX19jYWxjKF9UcCBfX3gpCisJeworCSAgaWYgKF9fYSA9PSAxKQorCSAgICBfX3ggJT0gX19tOworCSAgZWxzZQorCSAgICB7CisJICAgICAgc3RhdGljIGNvbnN0IF9UcCBfX3EgPSBfX20gLyBfX2E7CisJICAgICAgc3RhdGljIGNvbnN0IF9UcCBfX3IgPSBfX20gJSBfX2E7CisJICAgICAgCisJICAgICAgX1RwIF9fdDEgPSBfX2EgKiAoX194ICUgX19xKTsKKwkgICAgICBfVHAgX190MiA9IF9fciAqIChfX3ggLyBfX3EpOworCSAgICAgIGlmIChfX3QxID49IF9fdDIpCisJCV9feCA9IF9fdDEgLSBfX3QyOworCSAgICAgIGVsc2UKKwkJX194ID0gX19tIC0gX190MiArIF9fdDE7CisJICAgIH0KKworCSAgaWYgKF9fYyAhPSAwKQorCSAgICB7CisJICAgICAgY29uc3QgX1RwIF9fZCA9IF9fbSAtIF9feDsKKwkgICAgICBpZiAoX19kID4gX19jKQorCQlfX3ggKz0gX19jOworCSAgICAgIGVsc2UKKwkJX194ID0gX19jIC0gX19kOworCSAgICB9CisJICByZXR1cm4gX194OworCX0KKyAgICAgIH07CisKKyAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIG0gPT0gMCAtLSB1c2UgdW5zaWduZWQgaW50ZWdlciBvdmVyZmxvdyBhcyBtb2R1bG8KKyAgICAvLyBvcGVyYXRvci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIF9UcCBfX2EsIF9UcCBfX2MsIF9UcCBfX20+CisgICAgICBzdHJ1Y3QgX01vZDxfVHAsIF9fYSwgX19jLCBfX20sIHRydWU+CisgICAgICB7CisJc3RhdGljIF9UcAorCV9fY2FsYyhfVHAgX194KQorCXsgcmV0dXJuIF9fYSAqIF9feCArIF9fYzsgfQorICAgICAgfTsKKyAgfSAvLyBuYW1lc3BhY2UgX19kZXRhaWwKKworCisgIHRlbXBsYXRlPGNsYXNzIF9VSW50VHlwZSwgX1VJbnRUeXBlIF9fYSwgX1VJbnRUeXBlIF9fYywgX1VJbnRUeXBlIF9fbT4KKyAgICBjb25zdCBfVUludFR5cGUKKyAgICBsaW5lYXJfY29uZ3J1ZW50aWFsPF9VSW50VHlwZSwgX19hLCBfX2MsIF9fbT46Om11bHRpcGxpZXI7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1VJbnRUeXBlLCBfVUludFR5cGUgX19hLCBfVUludFR5cGUgX19jLCBfVUludFR5cGUgX19tPgorICAgIGNvbnN0IF9VSW50VHlwZQorICAgIGxpbmVhcl9jb25ncnVlbnRpYWw8X1VJbnRUeXBlLCBfX2EsIF9fYywgX19tPjo6aW5jcmVtZW50OworCisgIHRlbXBsYXRlPGNsYXNzIF9VSW50VHlwZSwgX1VJbnRUeXBlIF9fYSwgX1VJbnRUeXBlIF9fYywgX1VJbnRUeXBlIF9fbT4KKyAgICBjb25zdCBfVUludFR5cGUKKyAgICBsaW5lYXJfY29uZ3J1ZW50aWFsPF9VSW50VHlwZSwgX19hLCBfX2MsIF9fbT46Om1vZHVsdXM7CisKKyAgLyoqCisgICAqIFNlZWRzIHRoZSBMQ1Igd2l0aCBpbnRlZ3JhbCB2YWx1ZSBAcCBfX3gwLCBhZGp1c3RlZCBzbyB0aGF0IHRoZSAKKyAgICogcmluZyBpZGVudGl0eSBpcyBuZXZlciBhIG1lbWJlciBvZiB0aGUgY29udmVyZ2VuY2Ugc2V0LgorICAgKi8KKyAgdGVtcGxhdGU8Y2xhc3MgX1VJbnRUeXBlLCBfVUludFR5cGUgX19hLCBfVUludFR5cGUgX19jLCBfVUludFR5cGUgX19tPgorICAgIHZvaWQKKyAgICBsaW5lYXJfY29uZ3J1ZW50aWFsPF9VSW50VHlwZSwgX19hLCBfX2MsIF9fbT46OgorICAgIHNlZWQodW5zaWduZWQgbG9uZyBfX3gwKQorICAgIHsKKyAgICAgIGlmICgoX19kZXRhaWw6Ol9fbW9kPF9VSW50VHlwZSwgMSwgMCwgX19tPihfX2MpID09IDApCisJICAmJiAoX19kZXRhaWw6Ol9fbW9kPF9VSW50VHlwZSwgMSwgMCwgX19tPihfX3gwKSA9PSAwKSkKKwlfTV94ID0gX19kZXRhaWw6Ol9fbW9kPF9VSW50VHlwZSwgMSwgMCwgX19tPigxKTsKKyAgICAgIGVsc2UKKwlfTV94ID0gX19kZXRhaWw6Ol9fbW9kPF9VSW50VHlwZSwgMSwgMCwgX19tPihfX3gwKTsKKyAgICB9CisKKyAgLyoqCisgICAqIFNlZWRzIHRoZSBMQ1IgZW5naW5lIHdpdGggYSB2YWx1ZSBnZW5lcmF0ZWQgYnkgQHAgX19nLgorICAgKi8KKyAgdGVtcGxhdGU8Y2xhc3MgX1VJbnRUeXBlLCBfVUludFR5cGUgX19hLCBfVUludFR5cGUgX19jLCBfVUludFR5cGUgX19tPgorICAgIHRlbXBsYXRlPGNsYXNzIF9HZW4+CisgICAgICB2b2lkCisgICAgICBsaW5lYXJfY29uZ3J1ZW50aWFsPF9VSW50VHlwZSwgX19hLCBfX2MsIF9fbT46OgorICAgICAgc2VlZChfR2VuJiBfX2csIGZhbHNlX3R5cGUpCisgICAgICB7CisJX1VJbnRUeXBlIF9feDAgPSBfX2coKTsKKwlpZiAoKF9fZGV0YWlsOjpfX21vZDxfVUludFR5cGUsIDEsIDAsIF9fbT4oX19jKSA9PSAwKQorCSAgICAmJiAoX19kZXRhaWw6Ol9fbW9kPF9VSW50VHlwZSwgMSwgMCwgX19tPihfX3gwKSA9PSAwKSkKKwkgIF9NX3ggPSBfX2RldGFpbDo6X19tb2Q8X1VJbnRUeXBlLCAxLCAwLCBfX20+KDEpOworCWVsc2UKKwkgIF9NX3ggPSBfX2RldGFpbDo6X19tb2Q8X1VJbnRUeXBlLCAxLCAwLCBfX20+KF9feDApOworICAgICAgfQorCisgIC8qKgorICAgKiBHZXRzIHRoZSBuZXh0IGdlbmVyYXRlZCB2YWx1ZSBpbiBzZXF1ZW5jZS4KKyAgICovCisgIHRlbXBsYXRlPGNsYXNzIF9VSW50VHlwZSwgX1VJbnRUeXBlIF9fYSwgX1VJbnRUeXBlIF9fYywgX1VJbnRUeXBlIF9fbT4KKyAgICB0eXBlbmFtZSBsaW5lYXJfY29uZ3J1ZW50aWFsPF9VSW50VHlwZSwgX19hLCBfX2MsIF9fbT46OnJlc3VsdF90eXBlCisgICAgbGluZWFyX2NvbmdydWVudGlhbDxfVUludFR5cGUsIF9fYSwgX19jLCBfX20+OjoKKyAgICBvcGVyYXRvcigpKCkKKyAgICB7CisgICAgICBfTV94ID0gX19kZXRhaWw6Ol9fbW9kPF9VSW50VHlwZSwgX19hLCBfX2MsIF9fbT4oX01feCk7CisgICAgICByZXR1cm4gX01feDsKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1VJbnRUeXBlLCBfVUludFR5cGUgX19hLCBfVUludFR5cGUgX19jLCBfVUludFR5cGUgX19tLAorCSAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBsaW5lYXJfY29uZ3J1ZW50aWFsPF9VSW50VHlwZSwgX19hLCBfX2MsIF9fbT4mIF9fbGNyKQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6Zml4ZWQgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX29zLndpZGVuKCcgJykpOworCisgICAgICBfX29zIDw8IF9fbGNyLl9NX3g7CisKKyAgICAgIF9fb3MuZmxhZ3MoX19mbGFncyk7CisgICAgICBfX29zLmZpbGwoX19maWxsKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVUludFR5cGUsIF9VSW50VHlwZSBfX2EsIF9VSW50VHlwZSBfX2MsIF9VSW50VHlwZSBfX20sCisJICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIGxpbmVhcl9jb25ncnVlbnRpYWw8X1VJbnRUeXBlLCBfX2EsIF9fYywgX19tPiYgX19sY3IpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMpOworCisgICAgICBfX2lzID4+IF9fbGNyLl9NX3g7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9IAorCisKKyAgdGVtcGxhdGU8Y2xhc3MgX1VJbnRUeXBlLCBpbnQgX193LCBpbnQgX19uLCBpbnQgX19tLCBpbnQgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIGludCBfX3UsIGludCBfX3MsCisJICAgX1VJbnRUeXBlIF9fYiwgaW50IF9fdCwgX1VJbnRUeXBlIF9fYywgaW50IF9fbD4KKyAgICBjb25zdCBpbnQKKyAgICBtZXJzZW5uZV90d2lzdGVyPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwgX19yLCBfX2EsIF9fdSwgX19zLAorCQkgICAgIF9fYiwgX190LCBfX2MsIF9fbD46OndvcmRfc2l6ZTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfVUludFR5cGUsIGludCBfX3csIGludCBfX24sIGludCBfX20sIGludCBfX3IsCisJICAgX1VJbnRUeXBlIF9fYSwgaW50IF9fdSwgaW50IF9fcywKKwkgICBfVUludFR5cGUgX19iLCBpbnQgX190LCBfVUludFR5cGUgX19jLCBpbnQgX19sPgorICAgIGNvbnN0IGludAorICAgIG1lcnNlbm5lX3R3aXN0ZXI8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLCBfX3IsIF9fYSwgX191LCBfX3MsCisJCSAgICAgX19iLCBfX3QsIF9fYywgX19sPjo6c3RhdGVfc2l6ZTsKKyAgICAKKyAgdGVtcGxhdGU8Y2xhc3MgX1VJbnRUeXBlLCBpbnQgX193LCBpbnQgX19uLCBpbnQgX19tLCBpbnQgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIGludCBfX3UsIGludCBfX3MsCisJICAgX1VJbnRUeXBlIF9fYiwgaW50IF9fdCwgX1VJbnRUeXBlIF9fYywgaW50IF9fbD4KKyAgICBjb25zdCBpbnQKKyAgICBtZXJzZW5uZV90d2lzdGVyPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwgX19yLCBfX2EsIF9fdSwgX19zLAorCQkgICAgIF9fYiwgX190LCBfX2MsIF9fbD46OnNoaWZ0X3NpemU7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1VJbnRUeXBlLCBpbnQgX193LCBpbnQgX19uLCBpbnQgX19tLCBpbnQgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIGludCBfX3UsIGludCBfX3MsCisJICAgX1VJbnRUeXBlIF9fYiwgaW50IF9fdCwgX1VJbnRUeXBlIF9fYywgaW50IF9fbD4KKyAgICBjb25zdCBpbnQKKyAgICBtZXJzZW5uZV90d2lzdGVyPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwgX19yLCBfX2EsIF9fdSwgX19zLAorCQkgICAgIF9fYiwgX190LCBfX2MsIF9fbD46Om1hc2tfYml0czsKKworICB0ZW1wbGF0ZTxjbGFzcyBfVUludFR5cGUsIGludCBfX3csIGludCBfX24sIGludCBfX20sIGludCBfX3IsCisJICAgX1VJbnRUeXBlIF9fYSwgaW50IF9fdSwgaW50IF9fcywKKwkgICBfVUludFR5cGUgX19iLCBpbnQgX190LCBfVUludFR5cGUgX19jLCBpbnQgX19sPgorICAgIGNvbnN0IF9VSW50VHlwZQorICAgIG1lcnNlbm5lX3R3aXN0ZXI8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLCBfX3IsIF9fYSwgX191LCBfX3MsCisJCSAgICAgX19iLCBfX3QsIF9fYywgX19sPjo6cGFyYW1ldGVyX2E7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1VJbnRUeXBlLCBpbnQgX193LCBpbnQgX19uLCBpbnQgX19tLCBpbnQgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIGludCBfX3UsIGludCBfX3MsCisJICAgX1VJbnRUeXBlIF9fYiwgaW50IF9fdCwgX1VJbnRUeXBlIF9fYywgaW50IF9fbD4KKyAgICBjb25zdCBpbnQKKyAgICBtZXJzZW5uZV90d2lzdGVyPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwgX19yLCBfX2EsIF9fdSwgX19zLAorCQkgICAgIF9fYiwgX190LCBfX2MsIF9fbD46Om91dHB1dF91OworCisgIHRlbXBsYXRlPGNsYXNzIF9VSW50VHlwZSwgaW50IF9fdywgaW50IF9fbiwgaW50IF9fbSwgaW50IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBpbnQgX191LCBpbnQgX19zLAorCSAgIF9VSW50VHlwZSBfX2IsIGludCBfX3QsIF9VSW50VHlwZSBfX2MsIGludCBfX2w+CisgICAgY29uc3QgaW50CisgICAgbWVyc2VubmVfdHdpc3RlcjxfVUludFR5cGUsIF9fdywgX19uLCBfX20sIF9fciwgX19hLCBfX3UsIF9fcywKKwkJICAgICBfX2IsIF9fdCwgX19jLCBfX2w+OjpvdXRwdXRfczsKKworICB0ZW1wbGF0ZTxjbGFzcyBfVUludFR5cGUsIGludCBfX3csIGludCBfX24sIGludCBfX20sIGludCBfX3IsCisJICAgX1VJbnRUeXBlIF9fYSwgaW50IF9fdSwgaW50IF9fcywKKwkgICBfVUludFR5cGUgX19iLCBpbnQgX190LCBfVUludFR5cGUgX19jLCBpbnQgX19sPgorICAgIGNvbnN0IF9VSW50VHlwZQorICAgIG1lcnNlbm5lX3R3aXN0ZXI8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLCBfX3IsIF9fYSwgX191LCBfX3MsCisJCSAgICAgX19iLCBfX3QsIF9fYywgX19sPjo6b3V0cHV0X2I7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1VJbnRUeXBlLCBpbnQgX193LCBpbnQgX19uLCBpbnQgX19tLCBpbnQgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIGludCBfX3UsIGludCBfX3MsCisJICAgX1VJbnRUeXBlIF9fYiwgaW50IF9fdCwgX1VJbnRUeXBlIF9fYywgaW50IF9fbD4KKyAgICBjb25zdCBpbnQKKyAgICBtZXJzZW5uZV90d2lzdGVyPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwgX19yLCBfX2EsIF9fdSwgX19zLAorCQkgICAgIF9fYiwgX190LCBfX2MsIF9fbD46Om91dHB1dF90OworCisgIHRlbXBsYXRlPGNsYXNzIF9VSW50VHlwZSwgaW50IF9fdywgaW50IF9fbiwgaW50IF9fbSwgaW50IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBpbnQgX191LCBpbnQgX19zLAorCSAgIF9VSW50VHlwZSBfX2IsIGludCBfX3QsIF9VSW50VHlwZSBfX2MsIGludCBfX2w+CisgICAgY29uc3QgX1VJbnRUeXBlCisgICAgbWVyc2VubmVfdHdpc3RlcjxfVUludFR5cGUsIF9fdywgX19uLCBfX20sIF9fciwgX19hLCBfX3UsIF9fcywKKwkJICAgICBfX2IsIF9fdCwgX19jLCBfX2w+OjpvdXRwdXRfYzsKKworICB0ZW1wbGF0ZTxjbGFzcyBfVUludFR5cGUsIGludCBfX3csIGludCBfX24sIGludCBfX20sIGludCBfX3IsCisJICAgX1VJbnRUeXBlIF9fYSwgaW50IF9fdSwgaW50IF9fcywKKwkgICBfVUludFR5cGUgX19iLCBpbnQgX190LCBfVUludFR5cGUgX19jLCBpbnQgX19sPgorICAgIGNvbnN0IGludAorICAgIG1lcnNlbm5lX3R3aXN0ZXI8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLCBfX3IsIF9fYSwgX191LCBfX3MsCisJCSAgICAgX19iLCBfX3QsIF9fYywgX19sPjo6b3V0cHV0X2w7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1VJbnRUeXBlLCBpbnQgX193LCBpbnQgX19uLCBpbnQgX19tLCBpbnQgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIGludCBfX3UsIGludCBfX3MsCisJICAgX1VJbnRUeXBlIF9fYiwgaW50IF9fdCwgX1VJbnRUeXBlIF9fYywgaW50IF9fbD4KKyAgICB2b2lkCisgICAgbWVyc2VubmVfdHdpc3RlcjxfVUludFR5cGUsIF9fdywgX19uLCBfX20sIF9fciwgX19hLCBfX3UsIF9fcywKKwkJICAgICBfX2IsIF9fdCwgX19jLCBfX2w+OjoKKyAgICBzZWVkKHVuc2lnbmVkIGxvbmcgX192YWx1ZSkKKyAgICB7CisgICAgICBfTV94WzBdID0gX19kZXRhaWw6Ol9fbW9kPF9VSW50VHlwZSwgMSwgMCwKKwlfX2RldGFpbDo6X1NoaWZ0PF9VSW50VHlwZSwgX193Pjo6X192YWx1ZT4oX192YWx1ZSk7CisKKyAgICAgIGZvciAoaW50IF9faSA9IDE7IF9faSA8IHN0YXRlX3NpemU7ICsrX19pKQorCXsKKwkgIF9VSW50VHlwZSBfX3ggPSBfTV94W19faSAtIDFdOworCSAgX194IF49IF9feCA+PiAoX193IC0gMik7CisJICBfX3ggKj0gMTgxMjQzMzI1M3VsOworCSAgX194ICs9IF9faTsKKwkgIF9NX3hbX19pXSA9IF9fZGV0YWlsOjpfX21vZDxfVUludFR5cGUsIDEsIDAsCisJICAgIF9fZGV0YWlsOjpfU2hpZnQ8X1VJbnRUeXBlLCBfX3c+OjpfX3ZhbHVlPihfX3gpOwkgIAorCX0KKyAgICAgIF9NX3AgPSBzdGF0ZV9zaXplOworICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVUludFR5cGUsIGludCBfX3csIGludCBfX24sIGludCBfX20sIGludCBfX3IsCisJICAgX1VJbnRUeXBlIF9fYSwgaW50IF9fdSwgaW50IF9fcywKKwkgICBfVUludFR5cGUgX19iLCBpbnQgX190LCBfVUludFR5cGUgX19jLCBpbnQgX19sPgorICAgIHRlbXBsYXRlPGNsYXNzIF9HZW4+CisgICAgICB2b2lkCisgICAgICBtZXJzZW5uZV90d2lzdGVyPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwgX19yLCBfX2EsIF9fdSwgX19zLAorCQkgICAgICAgX19iLCBfX3QsIF9fYywgX19sPjo6CisgICAgICBzZWVkKF9HZW4mIF9fZ2VuLCBmYWxzZV90eXBlKQorICAgICAgeworCWZvciAoaW50IF9faSA9IDA7IF9faSA8IHN0YXRlX3NpemU7ICsrX19pKQorCSAgX01feFtfX2ldID0gX19kZXRhaWw6Ol9fbW9kPF9VSW50VHlwZSwgMSwgMCwKKwkgICAgX19kZXRhaWw6Ol9TaGlmdDxfVUludFR5cGUsIF9fdz46Ol9fdmFsdWU+KF9fZ2VuKCkpOworCV9NX3AgPSBzdGF0ZV9zaXplOworICAgICAgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9VSW50VHlwZSwgaW50IF9fdywgaW50IF9fbiwgaW50IF9fbSwgaW50IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBpbnQgX191LCBpbnQgX19zLAorCSAgIF9VSW50VHlwZSBfX2IsIGludCBfX3QsIF9VSW50VHlwZSBfX2MsIGludCBfX2w+CisgICAgdHlwZW5hbWUKKyAgICBtZXJzZW5uZV90d2lzdGVyPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwgX19yLCBfX2EsIF9fdSwgX19zLAorCQkgICAgIF9fYiwgX190LCBfX2MsIF9fbD46OnJlc3VsdF90eXBlCisgICAgbWVyc2VubmVfdHdpc3RlcjxfVUludFR5cGUsIF9fdywgX19uLCBfX20sIF9fciwgX19hLCBfX3UsIF9fcywKKwkJICAgICBfX2IsIF9fdCwgX19jLCBfX2w+OjoKKyAgICBvcGVyYXRvcigpKCkKKyAgICB7CisgICAgICAvLyBSZWxvYWQgdGhlIHZlY3RvciAtIGNvc3QgaXMgTyhuKSBhbW9ydGl6ZWQgb3ZlciBuIGNhbGxzLgorICAgICAgaWYgKF9NX3AgPj0gc3RhdGVfc2l6ZSkKKwl7CisJICBjb25zdCBfVUludFR5cGUgX191cHBlcl9tYXNrID0gKH5fVUludFR5cGUoKSkgPDwgX19yOworCSAgY29uc3QgX1VJbnRUeXBlIF9fbG93ZXJfbWFzayA9IH5fX3VwcGVyX21hc2s7CisKKwkgIGZvciAoaW50IF9fayA9IDA7IF9fayA8IChfX24gLSBfX20pOyArK19faykKKwkgICAgeworCSAgICAgIF9VSW50VHlwZSBfX3kgPSAoKF9NX3hbX19rXSAmIF9fdXBwZXJfbWFzaykKKwkJCSAgICAgICB8IChfTV94W19fayArIDFdICYgX19sb3dlcl9tYXNrKSk7CisJICAgICAgX01feFtfX2tdID0gKF9NX3hbX19rICsgX19tXSBeIChfX3kgPj4gMSkKKwkJCSAgIF4gKChfX3kgJiAweDAxKSA/IF9fYSA6IDApKTsKKwkgICAgfQorCisJICBmb3IgKGludCBfX2sgPSAoX19uIC0gX19tKTsgX19rIDwgKF9fbiAtIDEpOyArK19faykKKwkgICAgeworCSAgICAgIF9VSW50VHlwZSBfX3kgPSAoKF9NX3hbX19rXSAmIF9fdXBwZXJfbWFzaykKKwkJCSAgICAgICB8IChfTV94W19fayArIDFdICYgX19sb3dlcl9tYXNrKSk7CisJICAgICAgX01feFtfX2tdID0gKF9NX3hbX19rICsgKF9fbSAtIF9fbildIF4gKF9feSA+PiAxKQorCQkJICAgXiAoKF9feSAmIDB4MDEpID8gX19hIDogMCkpOworCSAgICB9CisKKwkgIF9VSW50VHlwZSBfX3kgPSAoKF9NX3hbX19uIC0gMV0gJiBfX3VwcGVyX21hc2spCisJCQkgICB8IChfTV94WzBdICYgX19sb3dlcl9tYXNrKSk7CisJICBfTV94W19fbiAtIDFdID0gKF9NX3hbX19tIC0gMV0gXiAoX195ID4+IDEpCisJCQkgICBeICgoX195ICYgMHgwMSkgPyBfX2EgOiAwKSk7CisJICBfTV9wID0gMDsKKwl9CisKKyAgICAgIC8vIENhbGN1bGF0ZSBvKHgoaSkpLgorICAgICAgcmVzdWx0X3R5cGUgX196ID0gX01feFtfTV9wKytdOworICAgICAgX196IF49IChfX3ogPj4gX191KTsKKyAgICAgIF9feiBePSAoX196IDw8IF9fcykgJiBfX2I7CisgICAgICBfX3ogXj0gKF9feiA8PCBfX3QpICYgX19jOworICAgICAgX196IF49IChfX3ogPj4gX19sKTsKKworICAgICAgcmV0dXJuIF9fejsKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1VJbnRUeXBlLCBpbnQgX193LCBpbnQgX19uLCBpbnQgX19tLCBpbnQgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIGludCBfX3UsIGludCBfX3MsIF9VSW50VHlwZSBfX2IsIGludCBfX3QsCisJICAgX1VJbnRUeXBlIF9fYywgaW50IF9fbCwKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgbWVyc2VubmVfdHdpc3RlcjxfVUludFR5cGUsIF9fdywgX19uLCBfX20sCisJICAgICAgIF9fciwgX19hLCBfX3UsIF9fcywgX19iLCBfX3QsIF9fYywgX19sPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpmaXhlZCB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fc3BhY2UpOworCisgICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCBfX24gLSAxOyArK19faSkKKwlfX29zIDw8IF9feC5fTV94W19faV0gPDwgX19zcGFjZTsKKyAgICAgIF9fb3MgPDwgX194Ll9NX3hbX19uIC0gMV07CisKKyAgICAgIF9fb3MuZmxhZ3MoX19mbGFncyk7CisgICAgICBfX29zLmZpbGwoX19maWxsKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVUludFR5cGUsIGludCBfX3csIGludCBfX24sIGludCBfX20sIGludCBfX3IsCisJICAgX1VJbnRUeXBlIF9fYSwgaW50IF9fdSwgaW50IF9fcywgX1VJbnRUeXBlIF9fYiwgaW50IF9fdCwKKwkgICBfVUludFR5cGUgX19jLCBpbnQgX19sLAorCSAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICBtZXJzZW5uZV90d2lzdGVyPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwKKwkgICAgICAgX19yLCBfX2EsIF9fdSwgX19zLCBfX2IsIF9fdCwgX19jLCBfX2w+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCBfX247ICsrX19pKQorCV9faXMgPj4gX194Ll9NX3hbX19pXTsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlLCBfSW50VHlwZSBfX20sIGludCBfX3MsIGludCBfX3I+CisgICAgY29uc3QgX0ludFR5cGUKKyAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5PF9JbnRUeXBlLCBfX20sIF9fcywgX19yPjo6bW9kdWx1czsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwgX0ludFR5cGUgX19tLCBpbnQgX19zLCBpbnQgX19yPgorICAgIGNvbnN0IGludAorICAgIHN1YnRyYWN0X3dpdGhfY2Fycnk8X0ludFR5cGUsIF9fbSwgX19zLCBfX3I+Ojpsb25nX2xhZzsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwgX0ludFR5cGUgX19tLCBpbnQgX19zLCBpbnQgX19yPgorICAgIGNvbnN0IGludAorICAgIHN1YnRyYWN0X3dpdGhfY2Fycnk8X0ludFR5cGUsIF9fbSwgX19zLCBfX3I+OjpzaG9ydF9sYWc7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUsIF9JbnRUeXBlIF9fbSwgaW50IF9fcywgaW50IF9fcj4KKyAgICB2b2lkCisgICAgc3VidHJhY3Rfd2l0aF9jYXJyeTxfSW50VHlwZSwgX19tLCBfX3MsIF9fcj46OgorICAgIHNlZWQodW5zaWduZWQgbG9uZyBfX3ZhbHVlKQorICAgIHsKKyAgICAgIGlmIChfX3ZhbHVlID09IDApCisJX192YWx1ZSA9IDE5NzgwNTAzOworCisgICAgICBzdGQ6OnRyMTo6bGluZWFyX2NvbmdydWVudGlhbDx1bnNpZ25lZCBsb25nLCA0MDAxNCwgMCwgMjE0NzQ4MzU2Mz4KKwlfX2xjZyhfX3ZhbHVlKTsKKworICAgICAgZm9yIChpbnQgX19pID0gMDsgX19pIDwgbG9uZ19sYWc7ICsrX19pKQorCV9NX3hbX19pXSA9IF9fZGV0YWlsOjpfX21vZDxfVUludFR5cGUsIDEsIDAsIG1vZHVsdXM+KF9fbGNnKCkpOworCisgICAgICBfTV9jYXJyeSA9IChfTV94W2xvbmdfbGFnIC0gMV0gPT0gMCkgPyAxIDogMDsKKyAgICAgIF9NX3AgPSAwOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwgX0ludFR5cGUgX19tLCBpbnQgX19zLCBpbnQgX19yPgorICAgIHRlbXBsYXRlPGNsYXNzIF9HZW4+CisgICAgICB2b2lkCisgICAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5PF9JbnRUeXBlLCBfX20sIF9fcywgX19yPjo6CisgICAgICBzZWVkKF9HZW4mIF9fZ2VuLCBmYWxzZV90eXBlKQorICAgICAgeworCWNvbnN0IGludCBfX24gPSAoc3RkOjpudW1lcmljX2xpbWl0czxfVUludFR5cGU+OjpkaWdpdHMgKyAzMSkgLyAzMjsKKworCWZvciAoaW50IF9faSA9IDA7IF9faSA8IGxvbmdfbGFnOyArK19faSkKKwkgIHsKKwkgICAgX1VJbnRUeXBlIF9fdG1wID0gMDsKKwkgICAgX1VJbnRUeXBlIF9fZmFjdG9yID0gMTsKKwkgICAgZm9yIChpbnQgX19qID0gMDsgX19qIDwgX19uOyArK19faikKKwkgICAgICB7CisJCV9fdG1wICs9IF9fZGV0YWlsOjpfX21vZDxfX2RldGFpbDo6X1VJbnQzMlR5cGUsIDEsIDAsIDA+CisJCSAgICAgICAgIChfX2dlbigpKSAqIF9fZmFjdG9yOworCQlfX2ZhY3RvciAqPSBfX2RldGFpbDo6X1NoaWZ0PF9VSW50VHlwZSwgMzI+OjpfX3ZhbHVlOworCSAgICAgIH0KKwkgICAgX01feFtfX2ldID0gX19kZXRhaWw6Ol9fbW9kPF9VSW50VHlwZSwgMSwgMCwgbW9kdWx1cz4oX190bXApOworCSAgfQorCV9NX2NhcnJ5ID0gKF9NX3hbbG9uZ19sYWcgLSAxXSA9PSAwKSA/IDEgOiAwOworCV9NX3AgPSAwOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlLCBfSW50VHlwZSBfX20sIGludCBfX3MsIGludCBfX3I+CisgICAgdHlwZW5hbWUgc3VidHJhY3Rfd2l0aF9jYXJyeTxfSW50VHlwZSwgX19tLCBfX3MsIF9fcj46OnJlc3VsdF90eXBlCisgICAgc3VidHJhY3Rfd2l0aF9jYXJyeTxfSW50VHlwZSwgX19tLCBfX3MsIF9fcj46OgorICAgIG9wZXJhdG9yKCkoKQorICAgIHsKKyAgICAgIC8vIERlcml2ZSBzaG9ydCBsYWcgaW5kZXggZnJvbSBjdXJyZW50IGluZGV4LgorICAgICAgaW50IF9fcHMgPSBfTV9wIC0gc2hvcnRfbGFnOworICAgICAgaWYgKF9fcHMgPCAwKQorCV9fcHMgKz0gbG9uZ19sYWc7CisKKyAgICAgIC8vIENhbGN1bGF0ZSBuZXcgeChpKSB3aXRob3V0IG92ZXJmbG93IG9yIGRpdmlzaW9uLgorICAgICAgLy8gTkI6IFRoYW5rcyB0byB0aGUgcmVxdWlyZW1lbnRzIGZvciBfSW50VHlwZSwgX01feFtfTV9wXSArIF9NX2NhcnJ5CisgICAgICAvLyBjYW5ub3Qgb3ZlcmZsb3cuCisgICAgICBfVUludFR5cGUgX194aTsKKyAgICAgIGlmIChfTV94W19fcHNdID49IF9NX3hbX01fcF0gKyBfTV9jYXJyeSkKKwl7CisJICBfX3hpID0gX01feFtfX3BzXSAtIF9NX3hbX01fcF0gLSBfTV9jYXJyeTsKKwkgIF9NX2NhcnJ5ID0gMDsKKwl9CisgICAgICBlbHNlCisJeworCSAgX194aSA9IG1vZHVsdXMgLSBfTV94W19NX3BdIC0gX01fY2FycnkgKyBfTV94W19fcHNdOworCSAgX01fY2FycnkgPSAxOworCX0KKyAgICAgIF9NX3hbX01fcF0gPSBfX3hpOworCisgICAgICAvLyBBZGp1c3QgY3VycmVudCBpbmRleCB0byBsb29wIGFyb3VuZCBpbiByaW5nIGJ1ZmZlci4KKyAgICAgIGlmICgrK19NX3AgPj0gbG9uZ19sYWcpCisJX01fcCA9IDA7CisKKyAgICAgIHJldHVybiBfX3hpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwgX0ludFR5cGUgX19tLCBpbnQgX19zLCBpbnQgX19yLAorCSAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBzdWJ0cmFjdF93aXRoX2NhcnJ5PF9JbnRUeXBlLCBfX20sIF9fcywgX19yPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpmaXhlZCB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fc3BhY2UpOworCisgICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCBfX3I7ICsrX19pKQorCV9fb3MgPDwgX194Ll9NX3hbX19pXSA8PCBfX3NwYWNlOworICAgICAgX19vcyA8PCBfX3guX01fY2Fycnk7CisKKyAgICAgIF9fb3MuZmxhZ3MoX19mbGFncyk7CisgICAgICBfX29zLmZpbGwoX19maWxsKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwgX0ludFR5cGUgX19tLCBpbnQgX19zLCBpbnQgX19yLAorCSAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5PF9JbnRUeXBlLCBfX20sIF9fcywgX19yPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6c2tpcHdzKTsKKworICAgICAgZm9yIChpbnQgX19pID0gMDsgX19pIDwgX19yOyArK19faSkKKwlfX2lzID4+IF9feC5fTV94W19faV07CisgICAgICBfX2lzID4+IF9feC5fTV9jYXJyeTsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgaW50IF9fdywgaW50IF9fcywgaW50IF9fcj4KKyAgICBjb25zdCBpbnQKKyAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxPF9SZWFsVHlwZSwgX193LCBfX3MsIF9fcj46OndvcmRfc2l6ZTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIGludCBfX3csIGludCBfX3MsIGludCBfX3I+CisgICAgY29uc3QgaW50CisgICAgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMTxfUmVhbFR5cGUsIF9fdywgX19zLCBfX3I+Ojpsb25nX2xhZzsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIGludCBfX3csIGludCBfX3MsIGludCBfX3I+CisgICAgY29uc3QgaW50CisgICAgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMTxfUmVhbFR5cGUsIF9fdywgX19zLCBfX3I+OjpzaG9ydF9sYWc7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCBpbnQgX193LCBpbnQgX19zLCBpbnQgX19yPgorICAgIHZvaWQKKyAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxPF9SZWFsVHlwZSwgX193LCBfX3MsIF9fcj46OgorICAgIF9NX2luaXRpYWxpemVfbnBvd3MoKQorICAgIHsKKyAgICAgIGZvciAoaW50IF9faiA9IDA7IF9faiA8IF9fbjsgKytfX2opCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorCV9NX25wb3dzW19fal0gPSBzdGQ6OnRyMTo6bGRleHAoX1JlYWxUeXBlKDEpLCAtX193ICsgX19qICogMzIpOworI2Vsc2UKKyAgICAgICAgX01fbnBvd3NbX19qXSA9IHN0ZDo6cG93KF9SZWFsVHlwZSgyKSwgLV9fdyArIF9faiAqIDMyKTsKKyNlbmRpZgorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIGludCBfX3csIGludCBfX3MsIGludCBfX3I+CisgICAgdm9pZAorICAgIHN1YnRyYWN0X3dpdGhfY2FycnlfMDE8X1JlYWxUeXBlLCBfX3csIF9fcywgX19yPjo6CisgICAgc2VlZCh1bnNpZ25lZCBsb25nIF9fdmFsdWUpCisgICAgeworICAgICAgaWYgKF9fdmFsdWUgPT0gMCkKKwlfX3ZhbHVlID0gMTk3ODA1MDM7CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDUxMi4gU2VlZGluZyBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxIGZyb20gYSBzaW5nbGUgdW5zaWduZWQgbG9uZy4KKyAgICAgIHN0ZDo6dHIxOjpsaW5lYXJfY29uZ3J1ZW50aWFsPHVuc2lnbmVkIGxvbmcsIDQwMDE0LCAwLCAyMTQ3NDgzNTYzPgorCV9fbGNnKF9fdmFsdWUpOworCisgICAgICB0aGlzLT5zZWVkKF9fbGNnKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCBpbnQgX193LCBpbnQgX19zLCBpbnQgX19yPgorICAgIHRlbXBsYXRlPGNsYXNzIF9HZW4+CisgICAgICB2b2lkCisgICAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxPF9SZWFsVHlwZSwgX193LCBfX3MsIF9fcj46OgorICAgICAgc2VlZChfR2VuJiBfX2dlbiwgZmFsc2VfdHlwZSkKKyAgICAgIHsKKwlmb3IgKGludCBfX2kgPSAwOyBfX2kgPCBsb25nX2xhZzsgKytfX2kpCisJICB7CisJICAgIGZvciAoaW50IF9faiA9IDA7IF9faiA8IF9fbiAtIDE7ICsrX19qKQorCSAgICAgIF9NX3hbX19pXVtfX2pdID0gX19kZXRhaWw6Ol9fbW9kPF9VSW50MzJUeXBlLCAxLCAwLCAwPihfX2dlbigpKTsKKwkgICAgX01feFtfX2ldW19fbiAtIDFdID0gX19kZXRhaWw6Ol9fbW9kPF9VSW50MzJUeXBlLCAxLCAwLAorCSAgICAgIF9fZGV0YWlsOjpfU2hpZnQ8X1VJbnQzMlR5cGUsIF9fdyAlIDMyPjo6X192YWx1ZT4oX19nZW4oKSk7CisJICB9CisKKwlfTV9jYXJyeSA9IDE7CisJZm9yIChpbnQgX19qID0gMDsgX19qIDwgX19uOyArK19faikKKwkgIGlmIChfTV94W2xvbmdfbGFnIC0gMV1bX19qXSAhPSAwKQorCSAgICB7CisJICAgICAgX01fY2FycnkgPSAwOworCSAgICAgIGJyZWFrOworCSAgICB9CisKKwlfTV9wID0gMDsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIGludCBfX3csIGludCBfX3MsIGludCBfX3I+CisgICAgdHlwZW5hbWUgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMTxfUmVhbFR5cGUsIF9fdywgX19zLCBfX3I+OjpyZXN1bHRfdHlwZQorICAgIHN1YnRyYWN0X3dpdGhfY2FycnlfMDE8X1JlYWxUeXBlLCBfX3csIF9fcywgX19yPjo6CisgICAgb3BlcmF0b3IoKSgpCisgICAgeworICAgICAgLy8gRGVyaXZlIHNob3J0IGxhZyBpbmRleCBmcm9tIGN1cnJlbnQgaW5kZXguCisgICAgICBpbnQgX19wcyA9IF9NX3AgLSBzaG9ydF9sYWc7CisgICAgICBpZiAoX19wcyA8IDApCisJX19wcyArPSBsb25nX2xhZzsKKworICAgICAgX1VJbnQzMlR5cGUgX19uZXdfY2Fycnk7CisgICAgICBmb3IgKGludCBfX2ogPSAwOyBfX2ogPCBfX24gLSAxOyArK19faikKKwl7CisJICBpZiAoX01feFtfX3BzXVtfX2pdID4gX01feFtfTV9wXVtfX2pdCisJICAgICAgfHwgKF9NX3hbX19wc11bX19qXSA9PSBfTV94W19NX3BdW19fal0gJiYgX01fY2FycnkgPT0gMCkpCisJICAgIF9fbmV3X2NhcnJ5ID0gMDsKKwkgIGVsc2UKKwkgICAgX19uZXdfY2FycnkgPSAxOworCisJICBfTV94W19NX3BdW19fal0gPSBfTV94W19fcHNdW19fal0gLSBfTV94W19NX3BdW19fal0gLSBfTV9jYXJyeTsKKwkgIF9NX2NhcnJ5ID0gX19uZXdfY2Fycnk7CisJfQorCisgICAgICBpZiAoX01feFtfX3BzXVtfX24gLSAxXSA+IF9NX3hbX01fcF1bX19uIC0gMV0KKwkgIHx8IChfTV94W19fcHNdW19fbiAtIDFdID09IF9NX3hbX01fcF1bX19uIC0gMV0gJiYgX01fY2FycnkgPT0gMCkpCisJX19uZXdfY2FycnkgPSAwOworICAgICAgZWxzZQorCV9fbmV3X2NhcnJ5ID0gMTsKKyAgICAgIAorICAgICAgX01feFtfTV9wXVtfX24gLSAxXSA9IF9fZGV0YWlsOjpfX21vZDxfVUludDMyVHlwZSwgMSwgMCwKKwlfX2RldGFpbDo6X1NoaWZ0PF9VSW50MzJUeXBlLCBfX3cgJSAzMj46Ol9fdmFsdWU+CisJKF9NX3hbX19wc11bX19uIC0gMV0gLSBfTV94W19NX3BdW19fbiAtIDFdIC0gX01fY2FycnkpOworICAgICAgX01fY2FycnkgPSBfX25ld19jYXJyeTsKKworICAgICAgcmVzdWx0X3R5cGUgX19yZXQgPSAwLjA7CisgICAgICBmb3IgKGludCBfX2ogPSAwOyBfX2ogPCBfX247ICsrX19qKQorCV9fcmV0ICs9IF9NX3hbX01fcF1bX19qXSAqIF9NX25wb3dzW19fal07CisKKyAgICAgIC8vIEFkanVzdCBjdXJyZW50IGluZGV4IHRvIGxvb3AgYXJvdW5kIGluIHJpbmcgYnVmZmVyLgorICAgICAgaWYgKCsrX01fcCA+PSBsb25nX2xhZykKKwlfTV9wID0gMDsKKworICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIGludCBfX3csIGludCBfX3MsIGludCBfX3IsCisJICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IHN1YnRyYWN0X3dpdGhfY2FycnlfMDE8X1JlYWxUeXBlLCBfX3csIF9fcywgX19yPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpmaXhlZCB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fc3BhY2UpOworCisgICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCBfX3I7ICsrX19pKQorCWZvciAoaW50IF9faiA9IDA7IF9faiA8IF9feC5fX247ICsrX19qKQorCSAgX19vcyA8PCBfX3guX01feFtfX2ldW19fal0gPDwgX19zcGFjZTsKKyAgICAgIF9fb3MgPDwgX194Ll9NX2NhcnJ5OworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCBpbnQgX193LCBpbnQgX19zLCBpbnQgX19yLAorCSAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxPF9SZWFsVHlwZSwgX193LCBfX3MsIF9fcj4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lzLmZsYWdzKCk7CisgICAgICBfX2lzLmZsYWdzKF9faW9zX2Jhc2U6OmRlYyB8IF9faW9zX2Jhc2U6OnNraXB3cyk7CisKKyAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IF9fcjsgKytfX2kpCisJZm9yIChpbnQgX19qID0gMDsgX19qIDwgX194Ll9fbjsgKytfX2opCisJICBfX2lzID4+IF9feC5fTV94W19faV1bX19qXTsKKyAgICAgIF9faXMgPj4gX194Ll9NX2NhcnJ5OworCisgICAgICBfX2lzLmZsYWdzKF9fZmxhZ3MpOworICAgICAgcmV0dXJuIF9faXM7CisgICAgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCBpbnQgX19wLCBpbnQgX19yPgorICAgIGNvbnN0IGludAorICAgIGRpc2NhcmRfYmxvY2s8X1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IsIF9fcCwgX19yPjo6YmxvY2tfc2l6ZTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciwgaW50IF9fcCwgaW50IF9fcj4KKyAgICBjb25zdCBpbnQKKyAgICBkaXNjYXJkX2Jsb2NrPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCBfX3AsIF9fcj46OnVzZWRfYmxvY2s7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IsIGludCBfX3AsIGludCBfX3I+CisgICAgdHlwZW5hbWUgZGlzY2FyZF9ibG9jazxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciwKKwkJCSAgIF9fcCwgX19yPjo6cmVzdWx0X3R5cGUKKyAgICBkaXNjYXJkX2Jsb2NrPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCBfX3AsIF9fcj46OgorICAgIG9wZXJhdG9yKCkoKQorICAgIHsKKyAgICAgIGlmIChfTV9uID49IHVzZWRfYmxvY2spCisJeworCSAgd2hpbGUgKF9NX24gPCBibG9ja19zaXplKQorCSAgICB7CisJICAgICAgX01fYigpOworCSAgICAgICsrX01fbjsKKwkgICAgfQorCSAgX01fbiA9IDA7CisJfQorICAgICAgKytfTV9uOworICAgICAgcmV0dXJuIF9NX2IoKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IsIGludCBfX3AsIGludCBfX3IsCisJICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IGRpc2NhcmRfYmxvY2s8X1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IsCisJICAgICAgIF9fcCwgX19yPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpmaXhlZAorCQkgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX3NwYWNlKTsKKworICAgICAgX19vcyA8PCBfX3guX01fYiA8PCBfX3NwYWNlIDw8IF9feC5fTV9uOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IsIGludCBfX3AsIGludCBfX3IsCisJICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIGRpc2NhcmRfYmxvY2s8X1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IsIF9fcCwgX19yPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6c2tpcHdzKTsKKworICAgICAgX19pcyA+PiBfX3guX01fYiA+PiBfX3guX01fbjsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIHRlbXBsYXRlPGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMSwgaW50IF9fczEsCisJICAgY2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IyLCBpbnQgX19zMj4KKyAgICBjb25zdCBpbnQKKyAgICB4b3JfY29tYmluZTxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjEsIF9fczEsCisJCV9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMiwgX19zMj46OnNoaWZ0MTsKKyAgICAgCisgIHRlbXBsYXRlPGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMSwgaW50IF9fczEsCisJICAgY2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IyLCBpbnQgX19zMj4KKyAgICBjb25zdCBpbnQKKyAgICB4b3JfY29tYmluZTxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjEsIF9fczEsCisJCV9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMiwgX19zMj46OnNoaWZ0MjsKKworICB0ZW1wbGF0ZTxjbGFzcyBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjEsIGludCBfX3MxLAorCSAgIGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMiwgaW50IF9fczI+CisgICAgdm9pZAorICAgIHhvcl9jb21iaW5lPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMSwgX19zMSwKKwkJX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IyLCBfX3MyPjo6CisgICAgX01faW5pdGlhbGl6ZV9tYXgoKQorICAgIHsKKyAgICAgIGNvbnN0IGludCBfX3cgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHJlc3VsdF90eXBlPjo6ZGlnaXRzOworCisgICAgICBjb25zdCByZXN1bHRfdHlwZSBfX20xID0KKwlzdGQ6Om1pbihyZXN1bHRfdHlwZShfTV9iMS5tYXgoKSAtIF9NX2IxLm1pbigpKSwKKwkJIF9fZGV0YWlsOjpfU2hpZnQ8cmVzdWx0X3R5cGUsIF9fdyAtIF9fczE+OjpfX3ZhbHVlIC0gMSk7CisKKyAgICAgIGNvbnN0IHJlc3VsdF90eXBlIF9fbTIgPQorCXN0ZDo6bWluKHJlc3VsdF90eXBlKF9NX2IyLm1heCgpIC0gX01fYjIubWluKCkpLAorCQkgX19kZXRhaWw6Ol9TaGlmdDxyZXN1bHRfdHlwZSwgX193IC0gX19zMj46Ol9fdmFsdWUgLSAxKTsKKworICAgICAgLy8gTkI6IEluIFRSMSBzMSBpcyBub3QgcmVxdWlyZWQgdG8gYmUgPj0gczIuCisgICAgICBpZiAoX19zMSA8IF9fczIpCisJX01fbWF4ID0gX01faW5pdGlhbGl6ZV9tYXhfYXV4KF9fbTIsIF9fbTEsIF9fczIgLSBfX3MxKSA8PCBfX3MxOworICAgICAgZWxzZQorCV9NX21heCA9IF9NX2luaXRpYWxpemVfbWF4X2F1eChfX20xLCBfX20yLCBfX3MxIC0gX19zMikgPDwgX19zMjsKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IxLCBpbnQgX19zMSwKKwkgICBjbGFzcyBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjIsIGludCBfX3MyPgorICAgIHR5cGVuYW1lIHhvcl9jb21iaW5lPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMSwgX19zMSwKKwkJCSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjIsIF9fczI+OjpyZXN1bHRfdHlwZQorICAgIHhvcl9jb21iaW5lPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMSwgX19zMSwKKwkJX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IyLCBfX3MyPjo6CisgICAgX01faW5pdGlhbGl6ZV9tYXhfYXV4KHJlc3VsdF90eXBlIF9fYSwgcmVzdWx0X3R5cGUgX19iLCBpbnQgX19kKQorICAgIHsKKyAgICAgIGNvbnN0IHJlc3VsdF90eXBlIF9fdHdvMmQgPSByZXN1bHRfdHlwZSgxKSA8PCBfX2Q7CisgICAgICBjb25zdCByZXN1bHRfdHlwZSBfX2MgPSBfX2EgKiBfX3R3bzJkOworCisgICAgICBpZiAoX19hID09IDAgfHwgX19iIDwgX190d28yZCkKKwlyZXR1cm4gX19jICsgX19iOworCisgICAgICBjb25zdCByZXN1bHRfdHlwZSBfX3QgPSBzdGQ6Om1heChfX2MsIF9fYik7CisgICAgICBjb25zdCByZXN1bHRfdHlwZSBfX3UgPSBzdGQ6Om1pbihfX2MsIF9fYik7CisKKyAgICAgIHJlc3VsdF90eXBlIF9fdWIgPSBfX3U7CisgICAgICByZXN1bHRfdHlwZSBfX3A7CisgICAgICBmb3IgKF9fcCA9IDA7IF9fdWIgIT0gMTsgX191YiA+Pj0gMSkKKwkrK19fcDsKKworICAgICAgY29uc3QgcmVzdWx0X3R5cGUgX190d28ycCA9IHJlc3VsdF90eXBlKDEpIDw8IF9fcDsKKyAgICAgIGNvbnN0IHJlc3VsdF90eXBlIF9fayA9IF9fdCAvIF9fdHdvMnA7CisKKyAgICAgIGlmIChfX2sgJiAxKQorCXJldHVybiAoX19rICsgMSkgKiBfX3R3bzJwIC0gMTsKKworICAgICAgaWYgKF9fYyA+PSBfX2IpCisJcmV0dXJuIChfX2sgKyAxKSAqIF9fdHdvMnAgKyBfTV9pbml0aWFsaXplX21heF9hdXgoKF9fdCAlIF9fdHdvMnApCisJCQkJCQkJICAgLyBfX3R3bzJkLAorCQkJCQkJCSAgIF9fdSAlIF9fdHdvMnAsIF9fZCk7CisgICAgICBlbHNlCisJcmV0dXJuIChfX2sgKyAxKSAqIF9fdHdvMnAgKyBfTV9pbml0aWFsaXplX21heF9hdXgoKF9fdSAlIF9fdHdvMnApCisJCQkJCQkJICAgLyBfX3R3bzJkLAorCQkJCQkJCSAgIF9fdCAlIF9fdHdvMnAsIF9fZCk7CisgICAgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMSwgaW50IF9fczEsCisJICAgY2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IyLCBpbnQgX19zMiwKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgeG9yX2NvbWJpbmU8X1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IxLCBfX3MxLAorCSAgICAgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjIsIF9fczI+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3QgX0NoYXJUIF9fc3BhY2UgPSBfX29zLndpZGVuKCcgJyk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OmRlYyB8IF9faW9zX2Jhc2U6OmZpeGVkIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19zcGFjZSk7CisKKyAgICAgIF9fb3MgPDwgX194LmJhc2UxKCkgPDwgX19zcGFjZSA8PCBfX3guYmFzZTIoKTsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgcmV0dXJuIF9fb3M7IAorICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjEsIGludCBfX3MxLAorCSAgIGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMiwgaW50IF9fczIsCisJICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIHhvcl9jb21iaW5lPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMSwgX19zMSwKKwkgICAgICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IyLCBfX3MyPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6c2tpcHdzKTsKKworICAgICAgX19pcyA+PiBfX3guX01fYjEgPj4gX194Ll9NX2IyOworCisgICAgICBfX2lzLmZsYWdzKF9fZmxhZ3MpOworICAgICAgcmV0dXJuIF9faXM7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB0eXBlbmFtZSB1bmlmb3JtX2ludDxfSW50VHlwZT46OnJlc3VsdF90eXBlCisgICAgICB1bmlmb3JtX2ludDxfSW50VHlwZT46OgorICAgICAgX01fY2FsbChfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCSAgICAgIHJlc3VsdF90eXBlIF9fbWluLCByZXN1bHRfdHlwZSBfX21heCwgdHJ1ZV90eXBlKQorICAgICAgeworCS8vIFhYWCBNdXN0IGJlIGZpeGVkIHRvIHdvcmsgd2VsbCBmb3IgKmFyYml0cmFyeSogX191cm5nLm1heCgpLAorCS8vIF9fdXJuZy5taW4oKSwgX19tYXgsIF9fbWluLiAgQ3VycmVudGx5IHdvcmtzIGZpbmUgb25seSBpbiB0aGUKKwkvLyBtb3N0IGNvbW1vbiBjYXNlIF9fdXJuZy5tYXgoKSAtIF9fdXJuZy5taW4oKSA+PSBfX21heCAtIF9fbWluLAorCS8vIHdpdGggX191cm5nLm1heCgpID4gX191cm5nLm1pbigpID49IDAuCisJdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fYWRkX3Vuc2lnbmVkPHR5cGVuYW1lCisJICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjo6cmVzdWx0X3R5cGU+OjpfX3R5cGUgX191cm50eXBlOworCXR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2FkZF91bnNpZ25lZDxyZXN1bHRfdHlwZT46Ol9fdHlwZQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdXR5cGU7CisJdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fY29uZGl0aW9uYWxfdHlwZTwoc2l6ZW9mKF9fdXJudHlwZSkKKwkJCQkJCQk+IHNpemVvZihfX3V0eXBlKSksCisJICBfX3VybnR5cGUsIF9fdXR5cGU+OjpfX3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgX191Y3R5cGU7CisKKwlyZXN1bHRfdHlwZSBfX3JldDsKKworCWNvbnN0IF9fdXJudHlwZSBfX3Vybm1pbiA9IF9fdXJuZy5taW4oKTsKKwljb25zdCBfX3VybnR5cGUgX191cm5tYXggPSBfX3VybmcubWF4KCk7CisJY29uc3QgX191cm50eXBlIF9fdXJucmFuZ2UgPSBfX3Vybm1heCAtIF9fdXJubWluOworCWNvbnN0IF9fdWN0eXBlIF9fdXJhbmdlID0gX19tYXggLSBfX21pbjsKKwljb25zdCBfX3VjdHlwZSBfX3VkZW5vbSA9IChfX3VybnJhbmdlIDw9IF9fdXJhbmdlCisJCQkJICAgPyAxIDogX191cm5yYW5nZSAvIChfX3VyYW5nZSArIDEpKTsKKwlkbworCSAgX19yZXQgPSAoX191cm50eXBlKF9fdXJuZygpKSAtICBfX3Vybm1pbikgLyBfX3VkZW5vbTsKKwl3aGlsZSAoX19yZXQgPiBfX21heCAtIF9fbWluKTsKKworCXJldHVybiBfX3JldCArIF9fbWluOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgdW5pZm9ybV9pbnQ8X0ludFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3QgX0NoYXJUIF9fc3BhY2UgPSBfX29zLndpZGVuKCcgJyk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OnNjaWVudGlmaWMgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX3NwYWNlKTsKKworICAgICAgX19vcyA8PCBfX3gubWluKCkgPDwgX19zcGFjZSA8PCBfX3gubWF4KCk7CisKKyAgICAgIF9fb3MuZmxhZ3MoX19mbGFncyk7CisgICAgICBfX29zLmZpbGwoX19maWxsKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIHVuaWZvcm1faW50PF9JbnRUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6c2tpcHdzKTsKKworICAgICAgX19pcyA+PiBfX3guX01fbWluID4+IF9feC5fTV9tYXg7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKyAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBiZXJub3VsbGlfZGlzdHJpYnV0aW9uJiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3Qgc3RkOjpzdHJlYW1zaXplIF9fcHJlY2lzaW9uID0gX19vcy5wcmVjaXNpb24oKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6c2NpZW50aWZpYyB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fb3Mud2lkZW4oJyAnKSk7CisgICAgICBfX29zLnByZWNpc2lvbihfX2dudV9jeHg6Ol9fbnVtZXJpY190cmFpdHM8ZG91YmxlPjo6X19tYXhfZGlnaXRzMTApOworCisgICAgICBfX29zIDw8IF9feC5wKCk7CisKKyAgICAgIF9fb3MuZmxhZ3MoX19mbGFncyk7CisgICAgICBfX29zLmZpbGwoX19maWxsKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKF9fcHJlY2lzaW9uKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlLCB0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB0eXBlbmFtZSBnZW9tZXRyaWNfZGlzdHJpYnV0aW9uPF9JbnRUeXBlLCBfUmVhbFR5cGU+OjpyZXN1bHRfdHlwZQorICAgICAgZ2VvbWV0cmljX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZSwgX1JlYWxUeXBlPjo6CisgICAgICBvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisgICAgICB7CisJLy8gQWJvdXQgdGhlIGVwc2lsb24gdGhpbmcgc2VlIHRoaXMgdGhyZWFkOgorICAgICAgICAvLyBodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAwNi0xMC9tc2cwMDk3MS5odG1sCisJY29uc3QgX1JlYWxUeXBlIF9fbmFmID0KKwkgICgxIC0gc3RkOjpudW1lcmljX2xpbWl0czxfUmVhbFR5cGU+OjplcHNpbG9uKCkpIC8gMjsKKwkvLyBUaGUgbGFyZ2VzdCBfUmVhbFR5cGUgY29udmVydGlibGUgdG8gX0ludFR5cGUuCisJY29uc3QgX1JlYWxUeXBlIF9fdGhyID0KKwkgIHN0ZDo6bnVtZXJpY19saW1pdHM8X0ludFR5cGU+OjptYXgoKSArIF9fbmFmOworCisJX1JlYWxUeXBlIF9fY2FuZDsKKwlkbworCSAgX19jYW5kID0gc3RkOjpjZWlsKHN0ZDo6bG9nKF9fdXJuZygpKSAvIF9NX2xvZ19wKTsKKwl3aGlsZSAoX19jYW5kID49IF9fdGhyKTsKKworCXJldHVybiByZXN1bHRfdHlwZShfX2NhbmQgKyBfX25hZik7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUsIHR5cGVuYW1lIF9SZWFsVHlwZSwKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgZ2VvbWV0cmljX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZSwgX1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyZWFtc2l6ZSBfX3ByZWNpc2lvbiA9IF9fb3MucHJlY2lzaW9uKCk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OnNjaWVudGlmaWMgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX29zLndpZGVuKCcgJykpOworICAgICAgX19vcy5wcmVjaXNpb24oX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPF9SZWFsVHlwZT46Ol9fbWF4X2RpZ2l0czEwKTsKKworICAgICAgX19vcyA8PCBfX3gucCgpOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwgdHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHZvaWQKKyAgICBwb2lzc29uX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZSwgX1JlYWxUeXBlPjo6CisgICAgX01faW5pdGlhbGl6ZSgpCisgICAgeworI2lmIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEKKyAgICAgIGlmIChfTV9tZWFuID49IDEyKQorCXsKKwkgIGNvbnN0IF9SZWFsVHlwZSBfX20gPSBzdGQ6OmZsb29yKF9NX21lYW4pOworCSAgX01fbG1fdGhyID0gc3RkOjpsb2coX01fbWVhbik7CisJICBfTV9sZm0gPSBzdGQ6OnRyMTo6bGdhbW1hKF9fbSArIDEpOworCSAgX01fc20gPSBzdGQ6OnNxcnQoX19tKTsKKworCSAgY29uc3QgX1JlYWxUeXBlIF9fcGlfNCA9IDAuNzg1Mzk4MTYzMzk3NDQ4MzA5NjE1NjYwODQ1ODE5ODc1N0w7CisJICBjb25zdCBfUmVhbFR5cGUgX19keCA9IHN0ZDo6c3FydCgyICogX19tICogc3RkOjpsb2coMzIgKiBfX20KKwkJCQkJCQkgICAgICAvIF9fcGlfNCkpOworCSAgX01fZCA9IHN0ZDo6dHIxOjpyb3VuZChzdGQ6Om1heChfUmVhbFR5cGUoNiksCisJCQkJCSAgc3RkOjptaW4oX19tLCBfX2R4KSkpOworCSAgY29uc3QgX1JlYWxUeXBlIF9fY3ggPSAyICogX19tICsgX01fZDsKKwkgIF9NX3NjeCA9IHN0ZDo6c3FydChfX2N4IC8gMik7CisJICBfTV8xY3ggPSAxIC8gX19jeDsKKworCSAgX01fYzJiID0gc3RkOjpzcXJ0KF9fcGlfNCAqIF9fY3gpICogc3RkOjpleHAoX01fMWN4KTsKKwkgIF9NX2NiID0gMiAqIF9fY3ggKiBzdGQ6OmV4cCgtX01fZCAqIF9NXzFjeCAqICgxICsgX01fZCAvIDIpKSAvIF9NX2Q7CisJfQorICAgICAgZWxzZQorI2VuZGlmCisJX01fbG1fdGhyID0gc3RkOjpleHAoLV9NX21lYW4pOworICAgICAgfQorCisgIC8qKgorICAgKiBBIHJlamVjdGlvbiBhbGdvcml0aG0gd2hlbiBtZWFuID49IDEyIGFuZCBhIHNpbXBsZSBtZXRob2QgYmFzZWQKKyAgICogdXBvbiB0aGUgbXVsdGlwbGljYXRpb24gb2YgdW5pZm9ybSByYW5kb20gdmFyaWF0ZXMgb3RoZXJ3aXNlLgorICAgKiBOQjogVGhlIGZvcm1lciBpcyBhdmFpbGFibGUgb25seSBpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAqIGlzIGRlZmluZWQuCisgICAqCisgICAqIFJlZmVyZW5jZToKKyAgICogRGV2cm95ZSwgTC4gTm9uLVVuaWZvcm0gUmFuZG9tIFZhcmlhdGVzIEdlbmVyYXRpb24uIFNwcmluZ2VyLVZlcmxhZywKKyAgICogTmV3IFlvcmssIDE5ODYsIENoLiBYLCBTZWN0cy4gMy4zICYgMy40ICgrIEVycmF0YSEpLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUsIHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB0ZW1wbGF0ZTxjbGFzcyBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHR5cGVuYW1lIHBvaXNzb25fZGlzdHJpYnV0aW9uPF9JbnRUeXBlLCBfUmVhbFR5cGU+OjpyZXN1bHRfdHlwZQorICAgICAgcG9pc3Nvbl9kaXN0cmlidXRpb248X0ludFR5cGUsIF9SZWFsVHlwZT46OgorICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorICAgICAgeworI2lmIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEKKwlpZiAoX01fbWVhbiA+PSAxMikKKwkgIHsKKwkgICAgX1JlYWxUeXBlIF9feDsKKworCSAgICAvLyBTZWUgY29tbWVudHMgYWJvdmUuLi4KKwkgICAgY29uc3QgX1JlYWxUeXBlIF9fbmFmID0KKwkgICAgICAoMSAtIHN0ZDo6bnVtZXJpY19saW1pdHM8X1JlYWxUeXBlPjo6ZXBzaWxvbigpKSAvIDI7CisJICAgIGNvbnN0IF9SZWFsVHlwZSBfX3RociA9CisJICAgICAgc3RkOjpudW1lcmljX2xpbWl0czxfSW50VHlwZT46Om1heCgpICsgX19uYWY7CisKKwkgICAgY29uc3QgX1JlYWxUeXBlIF9fbSA9IHN0ZDo6Zmxvb3IoX01fbWVhbik7CisJICAgIC8vIHNxcnQocGkgLyAyKQorCSAgICBjb25zdCBfUmVhbFR5cGUgX19zcGlfMiA9IDEuMjUzMzE0MTM3MzE1NTAwMjUxMjA3ODgyNjQyNDA1NTIyNkw7CisJICAgIGNvbnN0IF9SZWFsVHlwZSBfX2MxID0gX01fc20gKiBfX3NwaV8yOworCSAgICBjb25zdCBfUmVhbFR5cGUgX19jMiA9IF9NX2MyYiArIF9fYzE7IAorCSAgICBjb25zdCBfUmVhbFR5cGUgX19jMyA9IF9fYzIgKyAxOworCSAgICBjb25zdCBfUmVhbFR5cGUgX19jNCA9IF9fYzMgKyAxOworCSAgICAvLyBlXigxIC8gNzgpCisJICAgIGNvbnN0IF9SZWFsVHlwZSBfX2UxNzggPSAxLjAxMjkwMzA0NzkzMjAwMTg1ODMxODU1MTQ3Nzc1MTI5ODNMOworCSAgICBjb25zdCBfUmVhbFR5cGUgX19jNSA9IF9fYzQgKyBfX2UxNzg7CisJICAgIGNvbnN0IF9SZWFsVHlwZSBfX2MgPSBfTV9jYiArIF9fYzU7CisJICAgIGNvbnN0IF9SZWFsVHlwZSBfXzJjeCA9IDIgKiAoMiAqIF9fbSArIF9NX2QpOworCisJICAgIGJvb2wgX19yZWplY3QgPSB0cnVlOworCSAgICBkbworCSAgICAgIHsKKwkJY29uc3QgX1JlYWxUeXBlIF9fdSA9IF9fYyAqIF9fdXJuZygpOworCQljb25zdCBfUmVhbFR5cGUgX19lID0gLXN0ZDo6bG9nKF9fdXJuZygpKTsKKworCQlfUmVhbFR5cGUgX193ID0gMC4wOworCQkKKwkJaWYgKF9fdSA8PSBfX2MxKQorCQkgIHsKKwkJICAgIGNvbnN0IF9SZWFsVHlwZSBfX24gPSBfTV9uZChfX3VybmcpOworCQkgICAgY29uc3QgX1JlYWxUeXBlIF9feSA9IC1zdGQ6OmFicyhfX24pICogX01fc20gLSAxOworCQkgICAgX194ID0gc3RkOjpmbG9vcihfX3kpOworCQkgICAgX193ID0gLV9fbiAqIF9fbiAvIDI7CisJCSAgICBpZiAoX194IDwgLV9fbSkKKwkJICAgICAgY29udGludWU7CisJCSAgfQorCQllbHNlIGlmIChfX3UgPD0gX19jMikKKwkJICB7CisJCSAgICBjb25zdCBfUmVhbFR5cGUgX19uID0gX01fbmQoX191cm5nKTsKKwkJICAgIGNvbnN0IF9SZWFsVHlwZSBfX3kgPSAxICsgc3RkOjphYnMoX19uKSAqIF9NX3NjeDsKKwkJICAgIF9feCA9IHN0ZDo6Y2VpbChfX3kpOworCQkgICAgX193ID0gX195ICogKDIgLSBfX3kpICogX01fMWN4OworCQkgICAgaWYgKF9feCA+IF9NX2QpCisJCSAgICAgIGNvbnRpbnVlOworCQkgIH0KKwkJZWxzZSBpZiAoX191IDw9IF9fYzMpCisJCSAgLy8gTkI6IFRoaXMgY2FzZSBub3QgaW4gdGhlIGJvb2ssIG5vciBpbiB0aGUgRXJyYXRhLAorCQkgIC8vIGJ1dCBzaG91bGQgYmUgb2suLi4KKwkJICBfX3ggPSAtMTsKKwkJZWxzZSBpZiAoX191IDw9IF9fYzQpCisJCSAgX194ID0gMDsKKwkJZWxzZSBpZiAoX191IDw9IF9fYzUpCisJCSAgX194ID0gMTsKKwkJZWxzZQorCQkgIHsKKwkJICAgIGNvbnN0IF9SZWFsVHlwZSBfX3YgPSAtc3RkOjpsb2coX191cm5nKCkpOworCQkgICAgY29uc3QgX1JlYWxUeXBlIF9feSA9IF9NX2QgKyBfX3YgKiBfXzJjeCAvIF9NX2Q7CisJCSAgICBfX3ggPSBzdGQ6OmNlaWwoX195KTsKKwkJICAgIF9fdyA9IC1fTV9kICogX01fMWN4ICogKDEgKyBfX3kgLyAyKTsKKwkJICB9CisKKwkJX19yZWplY3QgPSAoX193IC0gX19lIC0gX194ICogX01fbG1fdGhyCisJCQkgICAgPiBfTV9sZm0gLSBzdGQ6OnRyMTo6bGdhbW1hKF9feCArIF9fbSArIDEpKTsKKworCQlfX3JlamVjdCB8PSBfX3ggKyBfX20gPj0gX190aHI7CisKKwkgICAgICB9IHdoaWxlIChfX3JlamVjdCk7CisKKwkgICAgcmV0dXJuIHJlc3VsdF90eXBlKF9feCArIF9fbSArIF9fbmFmKTsKKwkgIH0KKwllbHNlCisjZW5kaWYKKwkgIHsKKwkgICAgX0ludFR5cGUgICAgIF9feCA9IDA7CisJICAgIF9SZWFsVHlwZSBfX3Byb2QgPSAxLjA7CisKKwkgICAgZG8KKwkgICAgICB7CisJCV9fcHJvZCAqPSBfX3VybmcoKTsKKwkJX194ICs9IDE7CisJICAgICAgfQorCSAgICB3aGlsZSAoX19wcm9kID4gX01fbG1fdGhyKTsKKworCSAgICByZXR1cm4gX194IC0gMTsKKwkgIH0KKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwgdHlwZW5hbWUgX1JlYWxUeXBlLAorCSAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBwb2lzc29uX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZSwgX1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyZWFtc2l6ZSBfX3ByZWNpc2lvbiA9IF9fb3MucHJlY2lzaW9uKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19zcGFjZSA9IF9fb3Mud2lkZW4oJyAnKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6c2NpZW50aWZpYyB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fc3BhY2UpOworICAgICAgX19vcy5wcmVjaXNpb24oX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPF9SZWFsVHlwZT46Ol9fbWF4X2RpZ2l0czEwKTsKKworICAgICAgX19vcyA8PCBfX3gubWVhbigpIDw8IF9fc3BhY2UgPDwgX194Ll9NX25kOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUsIHR5cGVuYW1lIF9SZWFsVHlwZSwKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgcG9pc3Nvbl9kaXN0cmlidXRpb248X0ludFR5cGUsIF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lzLmZsYWdzKCk7CisgICAgICBfX2lzLmZsYWdzKF9faW9zX2Jhc2U6OnNraXB3cyk7CisKKyAgICAgIF9faXMgPj4gX194Ll9NX21lYW4gPj4gX194Ll9NX25kOworICAgICAgX194Ll9NX2luaXRpYWxpemUoKTsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlLCB0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdm9pZAorICAgIGJpbm9taWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZSwgX1JlYWxUeXBlPjo6CisgICAgX01faW5pdGlhbGl6ZSgpCisgICAgeworICAgICAgY29uc3QgX1JlYWxUeXBlIF9fcDEyID0gX01fcCA8PSAwLjUgPyBfTV9wIDogMS4wIC0gX01fcDsKKworICAgICAgX01fZWFzeSA9IHRydWU7CisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAgICBpZiAoX01fdCAqIF9fcDEyID49IDgpCisJeworCSAgX01fZWFzeSA9IGZhbHNlOworCSAgY29uc3QgX1JlYWxUeXBlIF9fbnAgPSBzdGQ6OmZsb29yKF9NX3QgKiBfX3AxMik7CisJICBjb25zdCBfUmVhbFR5cGUgX19wYSA9IF9fbnAgLyBfTV90OworCSAgY29uc3QgX1JlYWxUeXBlIF9fMXAgPSAxIC0gX19wYTsKKwkgIAorCSAgY29uc3QgX1JlYWxUeXBlIF9fcGlfNCA9IDAuNzg1Mzk4MTYzMzk3NDQ4MzA5NjE1NjYwODQ1ODE5ODc1N0w7CisJICBjb25zdCBfUmVhbFR5cGUgX19kMXggPQorCSAgICBzdGQ6OnNxcnQoX19ucCAqIF9fMXAgKiBzdGQ6OmxvZygzMiAqIF9fbnAKKwkJCQkJICAgICAvICg4MSAqIF9fcGlfNCAqIF9fMXApKSk7CisJICBfTV9kMSA9IHN0ZDo6dHIxOjpyb3VuZChzdGQ6Om1heChfUmVhbFR5cGUoMSksIF9fZDF4KSk7CisJICBjb25zdCBfUmVhbFR5cGUgX19kMnggPQorCSAgICBzdGQ6OnNxcnQoX19ucCAqIF9fMXAgKiBzdGQ6OmxvZygzMiAqIF9NX3QgKiBfXzFwCisJCQkJCSAgICAgLyAoX19waV80ICogX19wYSkpKTsKKwkgIF9NX2QyID0gc3RkOjp0cjE6OnJvdW5kKHN0ZDo6bWF4KF9SZWFsVHlwZSgxKSwgX19kMngpKTsKKwkgIAorCSAgLy8gc3FydChwaSAvIDIpCisJICBjb25zdCBfUmVhbFR5cGUgX19zcGlfMiA9IDEuMjUzMzE0MTM3MzE1NTAwMjUxMjA3ODgyNjQyNDA1NTIyNkw7CisJICBfTV9zMSA9IHN0ZDo6c3FydChfX25wICogX18xcCkgKiAoMSArIF9NX2QxIC8gKDQgKiBfX25wKSk7CisJICBfTV9zMiA9IHN0ZDo6c3FydChfX25wICogX18xcCkgKiAoMSArIF9NX2QyIC8gKDQgKiBfTV90ICogX18xcCkpOworCSAgX01fYyA9IDIgKiBfTV9kMSAvIF9fbnA7CisJICBfTV9hMSA9IHN0ZDo6ZXhwKF9NX2MpICogX01fczEgKiBfX3NwaV8yOworCSAgY29uc3QgX1JlYWxUeXBlIF9fYTEyID0gX01fYTEgKyBfTV9zMiAqIF9fc3BpXzI7CisJICBjb25zdCBfUmVhbFR5cGUgX19zMXMgPSBfTV9zMSAqIF9NX3MxOworCSAgX01fYTEyMyA9IF9fYTEyICsgKHN0ZDo6ZXhwKF9NX2QxIC8gKF9NX3QgKiBfXzFwKSkKKwkJCSAgICAgKiAyICogX19zMXMgLyBfTV9kMQorCQkJICAgICAqIHN0ZDo6ZXhwKC1fTV9kMSAqIF9NX2QxIC8gKDIgKiBfX3MxcykpKTsKKwkgIGNvbnN0IF9SZWFsVHlwZSBfX3MycyA9IF9NX3MyICogX01fczI7CisJICBfTV9zID0gKF9NX2ExMjMgKyAyICogX19zMnMgLyBfTV9kMgorCQkgICogc3RkOjpleHAoLV9NX2QyICogX01fZDIgLyAoMiAqIF9fczJzKSkpOworCSAgX01fbGYgPSAoc3RkOjp0cjE6OmxnYW1tYShfX25wICsgMSkKKwkJICAgKyBzdGQ6OnRyMTo6bGdhbW1hKF9NX3QgLSBfX25wICsgMSkpOworCSAgX01fbHAxcCA9IHN0ZDo6bG9nKF9fcGEgLyBfXzFwKTsKKworCSAgX01fcSA9IC1zdGQ6OmxvZygxIC0gKF9fcDEyIC0gX19wYSkgLyBfXzFwKTsKKwl9CisgICAgICBlbHNlCisjZW5kaWYKKwlfTV9xID0gLXN0ZDo6bG9nKDEgLSBfX3AxMik7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlLCB0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB0eXBlbmFtZSBiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGUsIF9SZWFsVHlwZT46OnJlc3VsdF90eXBlCisgICAgICBiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGUsIF9SZWFsVHlwZT46OgorICAgICAgX01fd2FpdGluZyhfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLCBfSW50VHlwZSBfX3QpCisgICAgICB7CisJX0ludFR5cGUgICAgX194ID0gMDsKKwlfUmVhbFR5cGUgX19zdW0gPSAwOworCisJZG8KKwkgIHsKKwkgICAgY29uc3QgX1JlYWxUeXBlIF9fZSA9IC1zdGQ6OmxvZyhfX3VybmcoKSk7CisJICAgIF9fc3VtICs9IF9fZSAvIChfX3QgLSBfX3gpOworCSAgICBfX3ggKz0gMTsKKwkgIH0KKwl3aGlsZSAoX19zdW0gPD0gX01fcSk7CisKKwlyZXR1cm4gX194IC0gMTsKKyAgICAgIH0KKworICAvKioKKyAgICogQSByZWplY3Rpb24gYWxnb3JpdGhtIHdoZW4gdCAqIHAgPj0gOCBhbmQgYSBzaW1wbGUgd2FpdGluZyB0aW1lCisgICAqIG1ldGhvZCAtIHRoZSBzZWNvbmQgaW4gdGhlIHJlZmVyZW5jZWQgYm9vayAtIG90aGVyd2lzZS4KKyAgICogTkI6IFRoZSBmb3JtZXIgaXMgYXZhaWxhYmxlIG9ubHkgaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorICAgKiBpcyBkZWZpbmVkLgorICAgKgorICAgKiBSZWZlcmVuY2U6CisgICAqIERldnJveWUsIEwuIE5vbi1Vbmlmb3JtIFJhbmRvbSBWYXJpYXRlcyBHZW5lcmF0aW9uLiBTcHJpbmdlci1WZXJsYWcsCisgICAqIE5ldyBZb3JrLCAxOTg2LCBDaC4gWCwgU2VjdC4gNCAoKyBFcnJhdGEhKS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlLCB0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB0eXBlbmFtZSBiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGUsIF9SZWFsVHlwZT46OnJlc3VsdF90eXBlCisgICAgICBiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGUsIF9SZWFsVHlwZT46OgorICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorICAgICAgeworCXJlc3VsdF90eXBlIF9fcmV0OworCWNvbnN0IF9SZWFsVHlwZSBfX3AxMiA9IF9NX3AgPD0gMC41ID8gX01fcCA6IDEuMCAtIF9NX3A7CisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisJaWYgKCFfTV9lYXN5KQorCSAgeworCSAgICBfUmVhbFR5cGUgX194OworCisJICAgIC8vIFNlZSBjb21tZW50cyBhYm92ZS4uLgorCSAgICBjb25zdCBfUmVhbFR5cGUgX19uYWYgPQorCSAgICAgICgxIC0gc3RkOjpudW1lcmljX2xpbWl0czxfUmVhbFR5cGU+OjplcHNpbG9uKCkpIC8gMjsKKwkgICAgY29uc3QgX1JlYWxUeXBlIF9fdGhyID0KKwkgICAgICBzdGQ6Om51bWVyaWNfbGltaXRzPF9JbnRUeXBlPjo6bWF4KCkgKyBfX25hZjsKKworCSAgICBjb25zdCBfUmVhbFR5cGUgX19ucCA9IHN0ZDo6Zmxvb3IoX01fdCAqIF9fcDEyKTsKKwkgICAgY29uc3QgX1JlYWxUeXBlIF9fcGEgPSBfX25wIC8gX01fdDsKKworCSAgICAvLyBzcXJ0KHBpIC8gMikKKwkgICAgY29uc3QgX1JlYWxUeXBlIF9fc3BpXzIgPSAxLjI1MzMxNDEzNzMxNTUwMDI1MTIwNzg4MjY0MjQwNTUyMjZMOworCSAgICBjb25zdCBfUmVhbFR5cGUgX19hMSA9IF9NX2ExOworCSAgICBjb25zdCBfUmVhbFR5cGUgX19hMTIgPSBfX2ExICsgX01fczIgKiBfX3NwaV8yOworCSAgICBjb25zdCBfUmVhbFR5cGUgX19hMTIzID0gX01fYTEyMzsKKwkgICAgY29uc3QgX1JlYWxUeXBlIF9fczFzID0gX01fczEgKiBfTV9zMTsKKwkgICAgY29uc3QgX1JlYWxUeXBlIF9fczJzID0gX01fczIgKiBfTV9zMjsKKworCSAgICBib29sIF9fcmVqZWN0OworCSAgICBkbworCSAgICAgIHsKKwkJY29uc3QgX1JlYWxUeXBlIF9fdSA9IF9NX3MgKiBfX3VybmcoKTsKKworCQlfUmVhbFR5cGUgX192OworCisJCWlmIChfX3UgPD0gX19hMSkKKwkJICB7CisJCSAgICBjb25zdCBfUmVhbFR5cGUgX19uID0gX01fbmQoX191cm5nKTsKKwkJICAgIGNvbnN0IF9SZWFsVHlwZSBfX3kgPSBfTV9zMSAqIHN0ZDo6YWJzKF9fbik7CisJCSAgICBfX3JlamVjdCA9IF9feSA+PSBfTV9kMTsKKwkJICAgIGlmICghX19yZWplY3QpCisJCSAgICAgIHsKKwkJCWNvbnN0IF9SZWFsVHlwZSBfX2UgPSAtc3RkOjpsb2coX191cm5nKCkpOworCQkJX194ID0gc3RkOjpmbG9vcihfX3kpOworCQkJX192ID0gLV9fZSAtIF9fbiAqIF9fbiAvIDIgKyBfTV9jOworCQkgICAgICB9CisJCSAgfQorCQllbHNlIGlmIChfX3UgPD0gX19hMTIpCisJCSAgeworCQkgICAgY29uc3QgX1JlYWxUeXBlIF9fbiA9IF9NX25kKF9fdXJuZyk7CisJCSAgICBjb25zdCBfUmVhbFR5cGUgX195ID0gX01fczIgKiBzdGQ6OmFicyhfX24pOworCQkgICAgX19yZWplY3QgPSBfX3kgPj0gX01fZDI7CisJCSAgICBpZiAoIV9fcmVqZWN0KQorCQkgICAgICB7CisJCQljb25zdCBfUmVhbFR5cGUgX19lID0gLXN0ZDo6bG9nKF9fdXJuZygpKTsKKwkJCV9feCA9IHN0ZDo6Zmxvb3IoLV9feSk7CisJCQlfX3YgPSAtX19lIC0gX19uICogX19uIC8gMjsKKwkJICAgICAgfQorCQkgIH0KKwkJZWxzZSBpZiAoX191IDw9IF9fYTEyMykKKwkJICB7CisJCSAgICBjb25zdCBfUmVhbFR5cGUgX19lMSA9IC1zdGQ6OmxvZyhfX3VybmcoKSk7CQkgICAgCisJCSAgICBjb25zdCBfUmVhbFR5cGUgX19lMiA9IC1zdGQ6OmxvZyhfX3VybmcoKSk7CisKKwkJICAgIGNvbnN0IF9SZWFsVHlwZSBfX3kgPSBfTV9kMSArIDIgKiBfX3MxcyAqIF9fZTEgLyBfTV9kMTsKKwkJICAgIF9feCA9IHN0ZDo6Zmxvb3IoX195KTsKKwkJICAgIF9fdiA9ICgtX19lMiArIF9NX2QxICogKDEgLyAoX01fdCAtIF9fbnApCisJCQkJCSAgICAtX195IC8gKDIgKiBfX3MxcykpKTsKKwkJICAgIF9fcmVqZWN0ID0gZmFsc2U7CisJCSAgfQorCQllbHNlCisJCSAgeworCQkgICAgY29uc3QgX1JlYWxUeXBlIF9fZTEgPSAtc3RkOjpsb2coX191cm5nKCkpOwkJICAgIAorCQkgICAgY29uc3QgX1JlYWxUeXBlIF9fZTIgPSAtc3RkOjpsb2coX191cm5nKCkpOworCisJCSAgICBjb25zdCBfUmVhbFR5cGUgX195ID0gX01fZDIgKyAyICogX19zMnMgKiBfX2UxIC8gX01fZDI7CisJCSAgICBfX3ggPSBzdGQ6OmZsb29yKC1fX3kpOworCQkgICAgX192ID0gLV9fZTIgLSBfTV9kMiAqIF9feSAvICgyICogX19zMnMpOworCQkgICAgX19yZWplY3QgPSBmYWxzZTsKKwkJICB9CisKKwkJX19yZWplY3QgPSBfX3JlamVjdCB8fCBfX3ggPCAtX19ucCB8fCBfX3ggPiBfTV90IC0gX19ucDsKKwkJaWYgKCFfX3JlamVjdCkKKwkJICB7CisJCSAgICBjb25zdCBfUmVhbFR5cGUgX19sZnggPQorCQkgICAgICBzdGQ6OnRyMTo6bGdhbW1hKF9fbnAgKyBfX3ggKyAxKQorCQkgICAgICArIHN0ZDo6dHIxOjpsZ2FtbWEoX01fdCAtIChfX25wICsgX194KSArIDEpOworCQkgICAgX19yZWplY3QgPSBfX3YgPiBfTV9sZiAtIF9fbGZ4ICsgX194ICogX01fbHAxcDsKKwkJICB9CisKKwkJX19yZWplY3QgfD0gX194ICsgX19ucCA+PSBfX3RocjsKKwkgICAgICB9CisJICAgIHdoaWxlIChfX3JlamVjdCk7CisKKwkgICAgX194ICs9IF9fbnAgKyBfX25hZjsKKworCSAgICBjb25zdCBfSW50VHlwZSBfX3ogPSBfTV93YWl0aW5nKF9fdXJuZywgX01fdCAtIF9JbnRUeXBlKF9feCkpOyAKKwkgICAgX19yZXQgPSBfSW50VHlwZShfX3gpICsgX196OworCSAgfQorCWVsc2UKKyNlbmRpZgorCSAgX19yZXQgPSBfTV93YWl0aW5nKF9fdXJuZywgX01fdCk7CisKKwlpZiAoX19wMTIgIT0gX01fcCkKKwkgIF9fcmV0ID0gX01fdCAtIF9fcmV0OworCXJldHVybiBfX3JldDsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwgdHlwZW5hbWUgX1JlYWxUeXBlLAorCSAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGUsIF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBzdGQ6OnN0cmVhbXNpemUgX19wcmVjaXNpb24gPSBfX29zLnByZWNpc2lvbigpOworICAgICAgY29uc3QgX0NoYXJUIF9fc3BhY2UgPSBfX29zLndpZGVuKCcgJyk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OnNjaWVudGlmaWMgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX3NwYWNlKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxfUmVhbFR5cGU+OjpfX21heF9kaWdpdHMxMCk7CisKKyAgICAgIF9fb3MgPDwgX194LnQoKSA8PCBfX3NwYWNlIDw8IF9feC5wKCkgCisJICAgPDwgX19zcGFjZSA8PCBfX3guX01fbmQ7CisKKyAgICAgIF9fb3MuZmxhZ3MoX19mbGFncyk7CisgICAgICBfX29zLmZpbGwoX19maWxsKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKF9fcHJlY2lzaW9uKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwgdHlwZW5hbWUgX1JlYWxUeXBlLAorCSAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICBiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGUsIF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lzLmZsYWdzKCk7CisgICAgICBfX2lzLmZsYWdzKF9faW9zX2Jhc2U6OmRlYyB8IF9faW9zX2Jhc2U6OnNraXB3cyk7CisKKyAgICAgIF9faXMgPj4gX194Ll9NX3QgPj4gX194Ll9NX3AgPj4gX194Ll9NX25kOworICAgICAgX194Ll9NX2luaXRpYWxpemUoKTsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IHVuaWZvcm1fcmVhbDxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3Qgc3RkOjpzdHJlYW1zaXplIF9fcHJlY2lzaW9uID0gX19vcy5wcmVjaXNpb24oKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpzY2llbnRpZmljIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19zcGFjZSk7CisgICAgICBfX29zLnByZWNpc2lvbihfX2dudV9jeHg6Ol9fbnVtZXJpY190cmFpdHM8X1JlYWxUeXBlPjo6X19tYXhfZGlnaXRzMTApOworCisgICAgICBfX29zIDw8IF9feC5taW4oKSA8PCBfX3NwYWNlIDw8IF9feC5tYXgoKTsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgX19vcy5wcmVjaXNpb24oX19wcmVjaXNpb24pOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIHVuaWZvcm1fcmVhbDxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBfX2lzID4+IF9feC5fTV9taW4gPj4gX194Ll9NX21heDsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IGV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3Qgc3RkOjpzdHJlYW1zaXplIF9fcHJlY2lzaW9uID0gX19vcy5wcmVjaXNpb24oKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6c2NpZW50aWZpYyB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fb3Mud2lkZW4oJyAnKSk7CisgICAgICBfX29zLnByZWNpc2lvbihfX2dudV9jeHg6Ol9fbnVtZXJpY190cmFpdHM8X1JlYWxUeXBlPjo6X19tYXhfZGlnaXRzMTApOworCisgICAgICBfX29zIDw8IF9feC5sYW1iZGEoKTsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgX19vcy5wcmVjaXNpb24oX19wcmVjaXNpb24pOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisKKyAgLyoqCisgICAqIFBvbGFyIG1ldGhvZCBkdWUgdG8gTWFyc2FnbGlhLgorICAgKgorICAgKiBEZXZyb3llLCBMLiBOb24tVW5pZm9ybSBSYW5kb20gVmFyaWF0ZXMgR2VuZXJhdGlvbi4gU3ByaW5nZXItVmVybGFnLAorICAgKiBOZXcgWW9yaywgMTk4NiwgQ2guIFYsIFNlY3QuIDQuNC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB0ZW1wbGF0ZTxjbGFzcyBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHR5cGVuYW1lIG5vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6cmVzdWx0X3R5cGUKKyAgICAgIG5vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6CisgICAgICBvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisgICAgICB7CisJcmVzdWx0X3R5cGUgX19yZXQ7CisKKwlpZiAoX01fc2F2ZWRfYXZhaWxhYmxlKQorCSAgeworCSAgICBfTV9zYXZlZF9hdmFpbGFibGUgPSBmYWxzZTsKKwkgICAgX19yZXQgPSBfTV9zYXZlZDsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIHJlc3VsdF90eXBlIF9feCwgX195LCBfX3IyOworCSAgICBkbworCSAgICAgIHsKKwkJX194ID0gcmVzdWx0X3R5cGUoMi4wKSAqIF9fdXJuZygpIC0gMS4wOworCQlfX3kgPSByZXN1bHRfdHlwZSgyLjApICogX191cm5nKCkgLSAxLjA7CisJCV9fcjIgPSBfX3ggKiBfX3ggKyBfX3kgKiBfX3k7CisJICAgICAgfQorCSAgICB3aGlsZSAoX19yMiA+IDEuMCB8fCBfX3IyID09IDAuMCk7CisKKwkgICAgY29uc3QgcmVzdWx0X3R5cGUgX19tdWx0ID0gc3RkOjpzcXJ0KC0yICogc3RkOjpsb2coX19yMikgLyBfX3IyKTsKKwkgICAgX01fc2F2ZWQgPSBfX3ggKiBfX211bHQ7CisJICAgIF9NX3NhdmVkX2F2YWlsYWJsZSA9IHRydWU7CisJICAgIF9fcmV0ID0gX195ICogX19tdWx0OworCSAgfQorCQorCV9fcmV0ID0gX19yZXQgKiBfTV9zaWdtYSArIF9NX21lYW47CisJcmV0dXJuIF9fcmV0OworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IG5vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyZWFtc2l6ZSBfX3ByZWNpc2lvbiA9IF9fb3MucHJlY2lzaW9uKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19zcGFjZSA9IF9fb3Mud2lkZW4oJyAnKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6c2NpZW50aWZpYyB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fc3BhY2UpOworICAgICAgX19vcy5wcmVjaXNpb24oX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPF9SZWFsVHlwZT46Ol9fbWF4X2RpZ2l0czEwKTsKKworICAgICAgX19vcyA8PCBfX3guX01fc2F2ZWRfYXZhaWxhYmxlIDw8IF9fc3BhY2UKKwkgICA8PCBfX3gubWVhbigpIDw8IF9fc3BhY2UKKwkgICA8PCBfX3guc2lnbWEoKTsKKyAgICAgIGlmIChfX3guX01fc2F2ZWRfYXZhaWxhYmxlKQorCV9fb3MgPDwgX19zcGFjZSA8PCBfX3guX01fc2F2ZWQ7CisKKyAgICAgIF9fb3MuZmxhZ3MoX19mbGFncyk7CisgICAgICBfX29zLmZpbGwoX19maWxsKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKF9fcHJlY2lzaW9uKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICBub3JtYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lzLmZsYWdzKCk7CisgICAgICBfX2lzLmZsYWdzKF9faW9zX2Jhc2U6OmRlYyB8IF9faW9zX2Jhc2U6OnNraXB3cyk7CisKKyAgICAgIF9faXMgPj4gX194Ll9NX3NhdmVkX2F2YWlsYWJsZSA+PiBfX3guX01fbWVhbgorCSAgID4+IF9feC5fTV9zaWdtYTsKKyAgICAgIGlmIChfX3guX01fc2F2ZWRfYXZhaWxhYmxlKQorCV9faXMgPj4gX194Ll9NX3NhdmVkOworCisgICAgICBfX2lzLmZsYWdzKF9fZmxhZ3MpOworICAgICAgcmV0dXJuIF9faXM7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHZvaWQKKyAgICBnYW1tYV9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6CisgICAgX01faW5pdGlhbGl6ZSgpCisgICAgeworICAgICAgaWYgKF9NX2FscGhhID49IDEpCisJX01fbF9kID0gc3RkOjpzcXJ0KDIgKiBfTV9hbHBoYSAtIDEpOworICAgICAgZWxzZQorCV9NX2xfZCA9IChzdGQ6OnBvdyhfTV9hbHBoYSwgX01fYWxwaGEgLyAoMSAtIF9NX2FscGhhKSkKKwkJICAqICgxIC0gX01fYWxwaGEpKTsKKyAgICB9CisKKyAgLyoqCisgICAqIENoZW5nJ3MgcmVqZWN0aW9uIGFsZ29yaXRobSBHQiBmb3IgYWxwaGEgPj0gMSBhbmQgYSBtb2RpZmljYXRpb24KKyAgICogb2YgVmFkdXZhJ3MgcmVqZWN0aW9uIGZyb20gV2VpYnVsbCBhbGdvcml0aG0gZHVlIHRvIERldnJveWUgZm9yCisgICAqIGFscGhhIDwgMS4KKyAgICoKKyAgICogUmVmZXJlbmNlczoKKyAgICogQ2hlbmcsIFIuIEMuIFRoZSBHZW5lcmF0aW9uIG9mIEdhbW1hIFJhbmRvbSBWYXJpYWJsZXMgd2l0aCBOb24taW50ZWdyYWwKKyAgICogU2hhcGUgUGFyYW1ldGVyLiBBcHBsaWVkIFN0YXRpc3RpY3MsIDI2LCA3MS03NSwgMTk3Ny4KKyAgICoKKyAgICogVmFkdXZhLCBJLiBDb21wdXRlciBHZW5lcmF0aW9uIG9mIEdhbW1hIEdhbmRvbSBWYXJpYWJsZXMgYnkgUmVqZWN0aW9uCisgICAqIGFuZCBDb21wb3NpdGlvbiBQcm9jZWR1cmVzLiBNYXRoLiBPcGVyYXRpb25zZm9yc2NodW5nIGFuZCBTdGF0aXN0aWssCisgICAqIFNlcmllcyBpbiBTdGF0aXN0aWNzLCA4LCA1NDUtNTc2LCAxOTc3LgorICAgKgorICAgKiBEZXZyb3llLCBMLiBOb24tVW5pZm9ybSBSYW5kb20gVmFyaWF0ZXMgR2VuZXJhdGlvbi4gU3ByaW5nZXItVmVybGFnLAorICAgKiBOZXcgWW9yaywgMTk4NiwgQ2guIElYLCBTZWN0LiAzLjQgKCsgRXJyYXRhISkuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB0eXBlbmFtZSBnYW1tYV9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6cmVzdWx0X3R5cGUKKyAgICAgIGdhbW1hX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKyAgICAgIG9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKyAgICAgIHsKKwlyZXN1bHRfdHlwZSBfX3g7CisKKwlib29sIF9fcmVqZWN0OworCWlmIChfTV9hbHBoYSA+PSAxKQorCSAgeworCSAgICAvLyBhbHBoYSAtIGxvZyg0KQorCSAgICBjb25zdCByZXN1bHRfdHlwZSBfX2IgPSBfTV9hbHBoYQorCSAgICAgIC0gcmVzdWx0X3R5cGUoMS4zODYyOTQzNjExMTk4OTA2MTg4MzQ0NjQyNDI5MTYzNTMxTCk7CisJICAgIGNvbnN0IHJlc3VsdF90eXBlIF9fYyA9IF9NX2FscGhhICsgX01fbF9kOworCSAgICBjb25zdCByZXN1bHRfdHlwZSBfXzFsID0gMSAvIF9NX2xfZDsKKworCSAgICAvLyAxICsgbG9nKDkgLyAyKQorCSAgICBjb25zdCByZXN1bHRfdHlwZSBfX2sgPSAyLjUwNDA3NzM5Njc3NjI3NDA3MzM3MzI1ODM1MjM4Njg3NDhMOworCisJICAgIGRvCisJICAgICAgeworCQljb25zdCByZXN1bHRfdHlwZSBfX3UgPSBfX3VybmcoKTsKKwkJY29uc3QgcmVzdWx0X3R5cGUgX192ID0gX191cm5nKCk7CisKKwkJY29uc3QgcmVzdWx0X3R5cGUgX195ID0gX18xbCAqIHN0ZDo6bG9nKF9fdiAvICgxIC0gX192KSk7CisJCV9feCA9IF9NX2FscGhhICogc3RkOjpleHAoX195KTsKKworCQljb25zdCByZXN1bHRfdHlwZSBfX3ogPSBfX3UgKiBfX3YgKiBfX3Y7CisJCWNvbnN0IHJlc3VsdF90eXBlIF9fciA9IF9fYiArIF9fYyAqIF9feSAtIF9feDsKKworCQlfX3JlamVjdCA9IF9fciA8IHJlc3VsdF90eXBlKDQuNSkgKiBfX3ogLSBfX2s7CisJCWlmIChfX3JlamVjdCkKKwkJICBfX3JlamVjdCA9IF9fciA8IHN0ZDo6bG9nKF9feik7CisJICAgICAgfQorCSAgICB3aGlsZSAoX19yZWplY3QpOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgY29uc3QgcmVzdWx0X3R5cGUgX19jID0gMSAvIF9NX2FscGhhOworCisJICAgIGRvCisJICAgICAgeworCQljb25zdCByZXN1bHRfdHlwZSBfX3ogPSAtc3RkOjpsb2coX191cm5nKCkpOworCQljb25zdCByZXN1bHRfdHlwZSBfX2UgPSAtc3RkOjpsb2coX191cm5nKCkpOworCisJCV9feCA9IHN0ZDo6cG93KF9feiwgX19jKTsKKworCQlfX3JlamVjdCA9IF9feiArIF9fZSA8IF9NX2xfZCArIF9feDsKKwkgICAgICB9CisJICAgIHdoaWxlIChfX3JlamVjdCk7CisJICB9CisKKwlyZXR1cm4gX194OworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IGdhbW1hX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3Qgc3RkOjpzdHJlYW1zaXplIF9fcHJlY2lzaW9uID0gX19vcy5wcmVjaXNpb24oKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6c2NpZW50aWZpYyB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fb3Mud2lkZW4oJyAnKSk7CisgICAgICBfX29zLnByZWNpc2lvbihfX2dudV9jeHg6Ol9fbnVtZXJpY190cmFpdHM8X1JlYWxUeXBlPjo6X19tYXhfZGlnaXRzMTApOworCisgICAgICBfX29zIDw8IF9feC5hbHBoYSgpOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9Cit9Cit9CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9yZWdleCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3JlZ2V4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZTJjZGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9yZWdleApAQCAtMCwwICsxLDY0IEBACisvLyBjbGFzcyB0ZW1wbGF0ZSByZWdleCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqCisgKiBAZmlsZSB0cjEvcmVnZXgKKyAqIEBhdXRob3IgU3RlcGhlbiBNLiBXZWJiICA8c3RlcGhlbi53ZWJiQGJyZWdtYXNvZnQuY2E+CisgKiBUaGlzIGlzIGEgVFIxIEMrKyBMaWJyYXJ5IGhlYWRlci4gCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfUkVHRVgKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX1JFR0VYIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaWYgZGVmaW5lZChfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYKQorIyAgZXJyb3IgVFIxIGhlYWRlciBjYW5ub3QgYmUgaW5jbHVkZWQgZnJvbSBDKysweCBoZWFkZXIKKyNlbmRpZgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGJpdHNldD4KKyNpbmNsdWRlIDxpdGVyYXRvcj4KKyNpbmNsdWRlIDxsb2NhbGU+CisjaW5jbHVkZSA8c3RkZXhjZXB0PgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaWYgZGVmaW5lZChfR0xJQkNYWF9JTkNMVURFX0FTX1RSMSkKKyMgIGluY2x1ZGUgPHRyMV9pbXBsL3JlZ2V4PgorI2Vsc2UKKyMgIGRlZmluZSBfR0xJQkNYWF9JTkNMVURFX0FTX1RSMQorIyAgZGVmaW5lIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9UUjEgbmFtZXNwYWNlIHRyMSB7CisjICBkZWZpbmUgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9UUjEgfQorIyAgZGVmaW5lIF9HTElCQ1hYX1RSMSB0cjE6OgorIyAgaW5jbHVkZSA8dHIxX2ltcGwvcmVnZXg+CisjICB1bmRlZiBfR0xJQkNYWF9UUjEKKyMgIHVuZGVmIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVFIxCisjICB1bmRlZiBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxCisjICB1bmRlZiBfR0xJQkNYWF9JTkNMVURFX0FTX1RSMQorI2VuZGlmCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfUkVHRVgKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3JpZW1hbm5femV0YS50Y2MgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9yaWVtYW5uX3pldGEudGNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NDZjMmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9yaWVtYW5uX3pldGEudGNjCkBAIC0wLDAgKzEsNDM1IEBACisvLyBTcGVjaWFsIGZ1bmN0aW9ucyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL3JpZW1hbm5femV0YS50Y2MKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODIgVFIxOiA1LjIgIFNwZWNpYWwgZnVuY3Rpb25zCisvLworCisvLyBXcml0dGVuIGJ5IEVkd2FyZCBTbWl0aC1Sb3dsYW5kIGJhc2VkIG9uOgorLy8gICAoMSkgSGFuZGJvb2sgb2YgTWF0aGVtYXRpY2FsIEZ1bmN0aW9ucywKKy8vICAgICAgIEVkLiBieSBNaWx0b24gQWJyYW1vd2l0eiBhbmQgSXJlbmUgQS4gU3RlZ3VuLAorLy8gICAgICAgRG92ZXIgUHVibGljYXRpb25zLCBOZXctWW9yaywgU2VjdGlvbiA1LCBwcC4gODA3LTgwOC4KKy8vICAgKDIpIFRoZSBHbnUgU2NpZW50aWZpYyBMaWJyYXJ5LCBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ3NsCisvLyAgICgzKSBHYW1tYSwgRXhwbG9yaW5nIEV1bGVyJ3MgQ29uc3RhbnQsIEp1bGlhbiBIYXZpbCwKKy8vICAgICAgIFByaW5jZXRvbiwgMjAwMy4KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfUklFTUFOTl9aRVRBX1RDQworI2RlZmluZSBfR0xJQkNYWF9UUjFfUklFTUFOTl9aRVRBX1RDQyAxCisKKyNpbmNsdWRlICJzcGVjaWFsX2Z1bmN0aW9uX3V0aWwuaCIKKworbmFtZXNwYWNlIHN0ZAoreworbmFtZXNwYWNlIHRyMQoreworCisgIC8vIFs1LjJdIFNwZWNpYWwgZnVuY3Rpb25zCisKKyAgLy8gSW1wbGVtZW50YXRpb24tc3BhY2UgZGV0YWlscy4KKyAgbmFtZXNwYWNlIF9fZGV0YWlsCisgIHsKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmICBDb21wdXRlIHRoZSBSaWVtYW5uIHpldGEgZnVuY3Rpb24gQGYkIFx6ZXRhKHMpIEBmJAorICAgICAqICAgICAgICAgICBieSBzdW1tYXRpb24gZm9yIHMgPiAxLgorICAgICAqIAorICAgICAqICAgVGhlIFJpZW1hbm4gemV0YSBmdW5jdGlvbiBpcyBkZWZpbmVkIGJ5OgorICAgICAqICAgIFxmWworICAgICAqICAgICAgXHpldGEocykgPSBcc3VtX3trPTF9XntcaW5mdHl9IFxmcmFjezF9e2tee3N9fSBmb3IgcyA+IDEKKyAgICAgKiAgICBcZl0KKyAgICAgKiAgIEZvciBzIDwgMSB1c2UgdGhlIHJlZmxlY3Rpb24gZm9ybXVsYToKKyAgICAgKiAgICBcZlsKKyAgICAgKiAgICAgIFx6ZXRhKHMpID0gMl5zIFxwaV57cy0xfSBcR2FtbWEoMS1zKSBcemV0YSgxLXMpCisgICAgICogICAgXGZdCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fcmllbWFubl96ZXRhX3N1bShjb25zdCBfVHAgX19zKQorICAgIHsKKyAgICAgIC8vICBBIHVzZXIgc2hvdWxkbid0IGdldCB0byB0aGlzLgorICAgICAgaWYgKF9fcyA8IF9UcCgxKSkKKyAgICAgICAgc3RkOjpfX3Rocm93X2RvbWFpbl9lcnJvcihfX04oIkJhZCBhcmd1bWVudCBpbiB6ZXRhIHN1bS4iKSk7CisKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXhfaXRlciA9IDEwMDAwOworICAgICAgX1RwIF9femV0YSA9IF9UcCgwKTsKKyAgICAgIGZvciAodW5zaWduZWQgaW50IF9fayA9IDE7IF9fayA8IG1heF9pdGVyOyArK19faykKKyAgICAgICAgeworICAgICAgICAgIF9UcCBfX3Rlcm0gPSBzdGQ6OnBvdyhzdGF0aWNfY2FzdDxfVHA+KF9fayksIC1fX3MpOworICAgICAgICAgIGlmIChfX3Rlcm0gPCBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmVwc2lsb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgX196ZXRhICs9IF9fdGVybTsKKyAgICAgICAgfQorCisgICAgICByZXR1cm4gX196ZXRhOworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgIEV2YWx1YXRlIHRoZSBSaWVtYW5uIHpldGEgZnVuY3Rpb24gQGYkIFx6ZXRhKHMpIEBmJAorICAgICAqICAgICAgICAgICBieSBhbiBhbHRlcm5hdGUgc2VyaWVzIGZvciBzID4gMC4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBSaWVtYW5uIHpldGEgZnVuY3Rpb24gaXMgZGVmaW5lZCBieToKKyAgICAgKiAgICBcZlsKKyAgICAgKiAgICAgIFx6ZXRhKHMpID0gXHN1bV97az0xfV57XGluZnR5fSBcZnJhY3sxfXtrXntzfX0gZm9yIHMgPiAxCisgICAgICogICAgXGZdCisgICAgICogICBGb3IgcyA8IDEgdXNlIHRoZSByZWZsZWN0aW9uIGZvcm11bGE6CisgICAgICogICAgXGZbCisgICAgICogICAgICBcemV0YShzKSA9IDJecyBccGlee3MtMX0gXEdhbW1hKDEtcykgXHpldGEoMS1zKQorICAgICAqICAgIFxmXQorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX3JpZW1hbm5femV0YV9hbHQoY29uc3QgX1RwIF9fcykKKyAgICB7CisgICAgICBfVHAgX19zZ24gPSBfVHAoMSk7CisgICAgICBfVHAgX196ZXRhID0gX1RwKDApOworICAgICAgZm9yICh1bnNpZ25lZCBpbnQgX19pID0gMTsgX19pIDwgMTAwMDAwMDA7ICsrX19pKQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fdGVybSA9IF9fc2duIC8gc3RkOjpwb3coX19pLCBfX3MpOworICAgICAgICAgIGlmIChzdGQ6OmFicyhfX3Rlcm0pIDwgc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjplcHNpbG9uKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBfX3pldGEgKz0gX190ZXJtOworICAgICAgICAgIF9fc2duICo9IF9UcCgtMSk7CisgICAgICAgIH0KKyAgICAgIF9femV0YSAvPSBfVHAoMSkgLSBzdGQ6OnBvdyhfVHAoMiksIF9UcCgxKSAtIF9fcyk7CisKKyAgICAgIHJldHVybiBfX3pldGE7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgRXZhbHVhdGUgdGhlIFJpZW1hbm4gemV0YSBmdW5jdGlvbiBieSBzZXJpZXMgZm9yIGFsbCBzICE9IDEuCisgICAgICogICAgICAgICAgIENvbnZlcmdlbmNlIGlzIGdyZWF0IHVudGlsIGxhcmdpc2ggbmVnYXRpdmUgbnVtYmVycy4KKyAgICAgKiAgICAgICAgICAgVGhlbiB0aGUgY29udmVyZ2VuY2Ugb2YgdGhlID4gMCBzdW0gZ2V0cyBiZXR0ZXIuCisgICAgICoKKyAgICAgKiAgIFRoZSBzZXJpZXMgaXM6CisgICAgICogICAgXGZbCisgICAgICogICAgICBcemV0YShzKSA9IFxmcmFjezF9ezEtMl57MS1zfX0KKyAgICAgKiAgICAgICAgICAgICAgICAgXHN1bV97bj0wfV57XGluZnR5fSBcZnJhY3sxfXsyXntuKzF9fQorICAgICAqICAgICAgICAgICAgICAgICBcc3VtX3trPTB9XntufSAoLTEpXmsgXGZyYWN7biF9eyhuLWspIWshfSAoaysxKV57LXN9CisgICAgICogICAgXGZdCisgICAgICogICBIYXZpbCAyMDAzLCBwLiAyMDYuCisgICAgICoKKyAgICAgKiAgIFRoZSBSaWVtYW5uIHpldGEgZnVuY3Rpb24gaXMgZGVmaW5lZCBieToKKyAgICAgKiAgICBcZlsKKyAgICAgKiAgICAgIFx6ZXRhKHMpID0gXHN1bV97az0xfV57XGluZnR5fSBcZnJhY3sxfXtrXntzfX0gZm9yIHMgPiAxCisgICAgICogICAgXGZdCisgICAgICogICBGb3IgcyA8IDEgdXNlIHRoZSByZWZsZWN0aW9uIGZvcm11bGE6CisgICAgICogICAgXGZbCisgICAgICogICAgICBcemV0YShzKSA9IDJecyBccGlee3MtMX0gXEdhbW1hKDEtcykgXHpldGEoMS1zKQorICAgICAqICAgIFxmXQorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX3JpZW1hbm5femV0YV9nbG9iKGNvbnN0IF9UcCBfX3MpCisgICAgeworICAgICAgX1RwIF9femV0YSA9IF9UcCgwKTsKKworICAgICAgY29uc3QgX1RwIF9fZXBzID0gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjplcHNpbG9uKCk7CisgICAgICAvLyAgTWF4IGUgZXhwb25lbnQgYmVmb3JlIG92ZXJmbG93LgorICAgICAgY29uc3QgX1RwIF9fbWF4X2JpbmNvZWZmID0gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjptYXhfZXhwb25lbnQxMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3RkOjpsb2coX1RwKDEwKSkgLSBfVHAoMSk7CisKKyAgICAgIC8vICBUaGlzIHNlcmllcyB3b3JrcyB1bnRpbCB0aGUgYmlub21pYWwgY29lZmZpY2llbnQgYmxvd3MgdXAKKyAgICAgIC8vICBzbyB1c2UgcmVmbGVjdGlvbi4KKyAgICAgIGlmIChfX3MgPCBfVHAoMCkpCisgICAgICAgIHsKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAgICAgICAgaWYgKHN0ZDo6dHIxOjpmbW9kKF9fcyxfVHAoMikpID09IF9UcCgwKSkKKyAgICAgICAgICAgIHJldHVybiBfVHAoMCk7CisgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9UcCBfX3pldGEgPSBfX3JpZW1hbm5femV0YV9nbG9iKF9UcCgxKSAtIF9fcyk7CisgICAgICAgICAgICAgIF9femV0YSAqPSBzdGQ6OnBvdyhfVHAoMikKKyAgICAgICAgICAgICAgICAgICAgICogX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpKCksIF9fcykKKyAgICAgICAgICAgICAgICAgICAgICogc3RkOjpzaW4oX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpXzIoKSAqIF9fcykKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAgICAgICAgICAgICAgICAgICAqIHN0ZDo6ZXhwKHN0ZDo6dHIxOjpsZ2FtbWEoX1RwKDEpIC0gX19zKSkKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAqIHN0ZDo6ZXhwKF9fbG9nX2dhbW1hKF9UcCgxKSAtIF9fcykpCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgIC8gX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpKCk7CisgICAgICAgICAgICAgIHJldHVybiBfX3pldGE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgX1RwIF9fbnVtID0gX1RwKDAuNUwpOworICAgICAgY29uc3QgdW5zaWduZWQgaW50IF9fbWF4aXQgPSAxMDAwMDsKKyAgICAgIGZvciAodW5zaWduZWQgaW50IF9faSA9IDA7IF9faSA8IF9fbWF4aXQ7ICsrX19pKQorICAgICAgICB7CisgICAgICAgICAgYm9vbCBfX3B1bnQgPSBmYWxzZTsKKyAgICAgICAgICBfVHAgX19zZ24gPSBfVHAoMSk7CisgICAgICAgICAgX1RwIF9fdGVybSA9IF9UcCgwKTsKKyAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBfX2ogPSAwOyBfX2ogPD0gX19pOyArK19faikKKyAgICAgICAgICAgIHsKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAgICAgICAgICAgIF9UcCBfX2JpbmNvZWZmID0gIHN0ZDo6dHIxOjpsZ2FtbWEoX1RwKDEgKyBfX2kpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBzdGQ6OnRyMTo6bGdhbW1hKF9UcCgxICsgX19qKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RkOjp0cjE6OmxnYW1tYShfVHAoMSArIF9faSAtIF9faikpOworI2Vsc2UKKyAgICAgICAgICAgICAgX1RwIF9fYmluY29lZmYgPSAgX19sb2dfZ2FtbWEoX1RwKDEgKyBfX2kpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBfX2xvZ19nYW1tYShfVHAoMSArIF9faikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIF9fbG9nX2dhbW1hKF9UcCgxICsgX19pIC0gX19qKSk7CisjZW5kaWYKKyAgICAgICAgICAgICAgaWYgKF9fYmluY29lZmYgPiBfX21heF9iaW5jb2VmZikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAvLyAgVGhpcyBvbmx5IGdldHMgaGl0IGZvciB4IDw8IDAuCisgICAgICAgICAgICAgICAgICBfX3B1bnQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBfX2JpbmNvZWZmID0gc3RkOjpleHAoX19iaW5jb2VmZik7CisgICAgICAgICAgICAgIF9fdGVybSArPSBfX3NnbiAqIF9fYmluY29lZmYgKiBzdGQ6OnBvdyhfVHAoMSArIF9faiksIC1fX3MpOworICAgICAgICAgICAgICBfX3NnbiAqPSBfVHAoLTEpOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChfX3B1bnQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBfX3Rlcm0gKj0gX19udW07CisgICAgICAgICAgX196ZXRhICs9IF9fdGVybTsKKyAgICAgICAgICBpZiAoc3RkOjphYnMoX190ZXJtL19femV0YSkgPCBfX2VwcykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIF9fbnVtICo9IF9UcCgwLjVMKTsKKyAgICAgICAgfQorCisgICAgICBfX3pldGEgLz0gX1RwKDEpIC0gc3RkOjpwb3coX1RwKDIpLCBfVHAoMSkgLSBfX3MpOworCisgICAgICByZXR1cm4gX196ZXRhOworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgIENvbXB1dGUgdGhlIFJpZW1hbm4gemV0YSBmdW5jdGlvbiBAZiQgXHpldGEocykgQGYkCisgICAgICogICAgICAgICAgIHVzaW5nIHRoZSBwcm9kdWN0IG92ZXIgcHJpbWUgZmFjdG9ycy4KKyAgICAgKiAgICBcZlsKKyAgICAgKiAgICAgIFx6ZXRhKHMpID0gXFBpX3tpPTF9XlxpbmZ0eSBcZnJhY3sxfXsxIC0gcF9pXnstc319CisgICAgICogICAgXGZdCisgICAgICogICAgd2hlcmUgQGYkIHtwX2l9IEBmJCBhcmUgdGhlIHByaW1lIG51bWJlcnMuCisgICAgICogCisgICAgICogICBUaGUgUmllbWFubiB6ZXRhIGZ1bmN0aW9uIGlzIGRlZmluZWQgYnk6CisgICAgICogICAgXGZbCisgICAgICogICAgICBcemV0YShzKSA9IFxzdW1fe2s9MX1ee1xpbmZ0eX0gXGZyYWN7MX17a157c319IGZvciBzID4gMQorICAgICAqICAgIFxmXQorICAgICAqICAgRm9yIHMgPCAxIHVzZSB0aGUgcmVmbGVjdGlvbiBmb3JtdWxhOgorICAgICAqICAgIFxmWworICAgICAqICAgICAgXHpldGEocykgPSAyXnMgXHBpXntzLTF9IFxHYW1tYSgxLXMpIFx6ZXRhKDEtcykKKyAgICAgKiAgICBcZl0KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19yaWVtYW5uX3pldGFfcHJvZHVjdChjb25zdCBfVHAgX19zKQorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBfVHAgX19wcmltZVtdID0geworICAgICAgICBfVHAoMiksIF9UcCgzKSwgX1RwKDUpLCBfVHAoNyksIF9UcCgxMSksIF9UcCgxMyksIF9UcCgxNyksIF9UcCgxOSksCisgICAgICAgIF9UcCgyMyksIF9UcCgyOSksIF9UcCgzMSksIF9UcCgzNyksIF9UcCg0MSksIF9UcCg0MyksIF9UcCg0NyksCisgICAgICAgIF9UcCg1MyksIF9UcCg1OSksIF9UcCg2MSksIF9UcCg2NyksIF9UcCg3MSksIF9UcCg3MyksIF9UcCg3OSksCisgICAgICAgIF9UcCg4MyksIF9UcCg4OSksIF9UcCg5NyksIF9UcCgxMDEpLCBfVHAoMTAzKSwgX1RwKDEwNyksIF9UcCgxMDkpCisgICAgICB9OworICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBfX251bV9wcmltZXMgPSBzaXplb2YoX19wcmltZSkgLyBzaXplb2YoX1RwKTsKKworICAgICAgX1RwIF9femV0YSA9IF9UcCgxKTsKKyAgICAgIGZvciAodW5zaWduZWQgaW50IF9faSA9IDA7IF9faSA8IF9fbnVtX3ByaW1lczsgKytfX2kpCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCBfVHAgX19mYWN0ID0gX1RwKDEpIC0gc3RkOjpwb3coX19wcmltZVtfX2ldLCAtX19zKTsKKyAgICAgICAgICBfX3pldGEgKj0gX19mYWN0OworICAgICAgICAgIGlmIChfVHAoMSkgLSBfX2ZhY3QgPCBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmVwc2lsb24oKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgIF9femV0YSA9IF9UcCgxKSAvIF9femV0YTsKKworICAgICAgcmV0dXJuIF9femV0YTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmICBSZXR1cm4gdGhlIFJpZW1hbm4gemV0YSBmdW5jdGlvbiBAZiQgXHpldGEocykgQGYkLgorICAgICAqIAorICAgICAqICAgVGhlIFJpZW1hbm4gemV0YSBmdW5jdGlvbiBpcyBkZWZpbmVkIGJ5OgorICAgICAqICAgIFxmWworICAgICAqICAgICAgXHpldGEocykgPSBcc3VtX3trPTF9XntcaW5mdHl9IGteey1zfSBmb3IgcyA+IDEKKyAgICAgKiAgICAgICAgICAgICAgICAgXGZyYWN7KDJccGkpXnN9e3BpfSBzaW4oXGZyYWN7XHBpIHN9ezJ9KQorICAgICAqICAgICAgICAgICAgICAgICBcR2FtbWEgKDEgLSBzKSBcemV0YSAoMSAtIHMpIGZvciBzIDwgMQorICAgICAqICAgIFxmXQorICAgICAqICAgRm9yIHMgPCAxIHVzZSB0aGUgcmVmbGVjdGlvbiBmb3JtdWxhOgorICAgICAqICAgIFxmWworICAgICAqICAgICAgXHpldGEocykgPSAyXnMgXHBpXntzLTF9IFxHYW1tYSgxLXMpIFx6ZXRhKDEtcykKKyAgICAgKiAgICBcZl0KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19yaWVtYW5uX3pldGEoY29uc3QgX1RwIF9fcykKKyAgICB7CisgICAgICBpZiAoX19pc25hbihfX3MpKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjpxdWlldF9OYU4oKTsKKyAgICAgIGVsc2UgaWYgKF9fcyA9PSBfVHAoMSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmluZmluaXR5KCk7CisgICAgICBlbHNlIGlmIChfX3MgPCAtX1RwKDE5KSkKKyAgICAgICAgeworICAgICAgICAgIF9UcCBfX3pldGEgPSBfX3JpZW1hbm5femV0YV9wcm9kdWN0KF9UcCgxKSAtIF9fcyk7CisgICAgICAgICAgX196ZXRhICo9IHN0ZDo6cG93KF9UcCgyKSAqIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waSgpLCBfX3MpCisgICAgICAgICAgICAgICAgICogc3RkOjpzaW4oX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpXzIoKSAqIF9fcykKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAgICAgICAgICAgICAgICogc3RkOjpleHAoc3RkOjp0cjE6OmxnYW1tYShfVHAoMSkgLSBfX3MpKQorI2Vsc2UKKyAgICAgICAgICAgICAgICAgKiBzdGQ6OmV4cChfX2xvZ19nYW1tYShfVHAoMSkgLSBfX3MpKQorI2VuZGlmCisgICAgICAgICAgICAgICAgIC8gX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpKCk7CisgICAgICAgICAgcmV0dXJuIF9femV0YTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoX19zIDwgX1RwKDIwKSkKKyAgICAgICAgeworICAgICAgICAgIC8vICBHbG9iYWwgZG91YmxlIHN1bSBvciBNY0xhdXJpbj8KKyAgICAgICAgICBib29sIF9fZ2xvYiA9IHRydWU7CisgICAgICAgICAgaWYgKF9fZ2xvYikKKyAgICAgICAgICAgIHJldHVybiBfX3JpZW1hbm5femV0YV9nbG9iKF9fcyk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoX19zID4gX1RwKDEpKQorICAgICAgICAgICAgICAgIHJldHVybiBfX3JpZW1hbm5femV0YV9zdW0oX19zKTsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIF9UcCBfX3pldGEgPSBzdGQ6OnBvdyhfVHAoMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fcGkoKSwgX19zKQorICAgICAgICAgICAgICAgICAgICAgICAgICogc3RkOjpzaW4oX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpXzIoKSAqIF9fcykKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3RkOjp0cjE6OnRnYW1tYShfVHAoMSkgLSBfX3MpCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHN0ZDo6ZXhwKF9fbG9nX2dhbW1hKF9UcCgxKSAtIF9fcykpCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX3JpZW1hbm5femV0YV9zdW0oX1RwKDEpIC0gX19zKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBfX3pldGE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBfX3JpZW1hbm5femV0YV9wcm9kdWN0KF9fcyk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgUmV0dXJuIHRoZSBIdXJ3aXR6IHpldGEgZnVuY3Rpb24gQGYkIFx6ZXRhKHgscykgQGYkCisgICAgICogICAgICAgICAgIGZvciBhbGwgcyAhPSAxIGFuZCB4ID4gLTEuCisgICAgICogCisgICAgICogICBUaGUgSHVyd2l0eiB6ZXRhIGZ1bmN0aW9uIGlzIGRlZmluZWQgYnk6CisgICAgICogICBAZlsKKyAgICAgKiAgICAgXHpldGEoeCxzKSA9IFxzdW1fe249MH1ee1xpbmZ0eX0gXGZyYWN7MX17KG4gKyB4KV5zfQorICAgICAqICAgQGZdCisgICAgICogICBUaGUgUmllbWFubiB6ZXRhIGZ1bmN0aW9uIGlzIGEgc3BlY2lhbCBjYXNlOgorICAgICAqICAgQGZbCisgICAgICogICAgIFx6ZXRhKHMpID0gXHpldGEoMSxzKQorICAgICAqICAgQGZdCisgICAgICogCisgICAgICogICBUaGlzIGZ1bmN0aW9ucyB1c2VzIHRoZSBkb3VibGUgc3VtIHRoYXQgY29udmVyZ2VzIGZvciBzICE9IDEKKyAgICAgKiAgIGFuZCB4ID4gLTE6CisgICAgICogICBAZlsKKyAgICAgKiAgICAgXHpldGEoeCxzKSA9IFxmcmFjezF9e3MtMX0KKyAgICAgKiAgICAgICAgICAgICAgICBcc3VtX3tuPTB9XntcaW5mdHl9IFxmcmFjezF9e24gKyAxfQorICAgICAqICAgICAgICAgICAgICAgIFxzdW1fe2s9MH1ee259ICgtMSleayBcZnJhY3tuIX17KG4taykhayF9ICh4K2spXnstc30KKyAgICAgKiAgIEBmXQorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2h1cndpdHpfemV0YV9nbG9iKGNvbnN0IF9UcCBfX2EsIGNvbnN0IF9UcCBfX3MpCisgICAgeworICAgICAgX1RwIF9femV0YSA9IF9UcCgwKTsKKworICAgICAgY29uc3QgX1RwIF9fZXBzID0gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjplcHNpbG9uKCk7CisgICAgICAvLyAgTWF4IGUgZXhwb25lbnQgYmVmb3JlIG92ZXJmbG93LgorICAgICAgY29uc3QgX1RwIF9fbWF4X2JpbmNvZWZmID0gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjptYXhfZXhwb25lbnQxMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3RkOjpsb2coX1RwKDEwKSkgLSBfVHAoMSk7CisKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBfX21heGl0ID0gMTAwMDA7CisgICAgICBmb3IgKHVuc2lnbmVkIGludCBfX2kgPSAwOyBfX2kgPCBfX21heGl0OyArK19faSkKKyAgICAgICAgeworICAgICAgICAgIGJvb2wgX19wdW50ID0gZmFsc2U7CisgICAgICAgICAgX1RwIF9fc2duID0gX1RwKDEpOworICAgICAgICAgIF9UcCBfX3Rlcm0gPSBfVHAoMCk7CisgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgX19qID0gMDsgX19qIDw9IF9faTsgKytfX2opCisgICAgICAgICAgICB7CisjaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorICAgICAgICAgICAgICBfVHAgX19iaW5jb2VmZiA9ICBzdGQ6OnRyMTo6bGdhbW1hKF9UcCgxICsgX19pKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RkOjp0cjE6OmxnYW1tYShfVHAoMSArIF9faikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHN0ZDo6dHIxOjpsZ2FtbWEoX1RwKDEgKyBfX2kgLSBfX2opKTsKKyNlbHNlCisgICAgICAgICAgICAgIF9UcCBfX2JpbmNvZWZmID0gIF9fbG9nX2dhbW1hKF9UcCgxICsgX19pKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gX19sb2dfZ2FtbWEoX1RwKDEgKyBfX2opKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBfX2xvZ19nYW1tYShfVHAoMSArIF9faSAtIF9faikpOworI2VuZGlmCisgICAgICAgICAgICAgIGlmIChfX2JpbmNvZWZmID4gX19tYXhfYmluY29lZmYpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgLy8gIFRoaXMgb25seSBnZXRzIGhpdCBmb3IgeCA8PCAwLgorICAgICAgICAgICAgICAgICAgX19wdW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgX19iaW5jb2VmZiA9IHN0ZDo6ZXhwKF9fYmluY29lZmYpOworICAgICAgICAgICAgICBfX3Rlcm0gKz0gX19zZ24gKiBfX2JpbmNvZWZmICogc3RkOjpwb3coX1RwKF9fYSArIF9faiksIC1fX3MpOworICAgICAgICAgICAgICBfX3NnbiAqPSBfVHAoLTEpOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChfX3B1bnQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBfX3Rlcm0gLz0gX1RwKF9faSArIDEpOworICAgICAgICAgIGlmIChzdGQ6OmFicyhfX3Rlcm0gLyBfX3pldGEpIDwgX19lcHMpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBfX3pldGEgKz0gX190ZXJtOworICAgICAgICB9CisKKyAgICAgIF9femV0YSAvPSBfX3MgLSBfVHAoMSk7CisKKyAgICAgIHJldHVybiBfX3pldGE7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgUmV0dXJuIHRoZSBIdXJ3aXR6IHpldGEgZnVuY3Rpb24gQGYkIFx6ZXRhKHgscykgQGYkCisgICAgICogICAgICAgICAgIGZvciBhbGwgcyAhPSAxIGFuZCB4ID4gLTEuCisgICAgICogCisgICAgICogICBUaGUgSHVyd2l0eiB6ZXRhIGZ1bmN0aW9uIGlzIGRlZmluZWQgYnk6CisgICAgICogICBAZlsKKyAgICAgKiAgICAgXHpldGEoeCxzKSA9IFxzdW1fe249MH1ee1xpbmZ0eX0gXGZyYWN7MX17KG4gKyB4KV5zfQorICAgICAqICAgQGZdCisgICAgICogICBUaGUgUmllbWFubiB6ZXRhIGZ1bmN0aW9uIGlzIGEgc3BlY2lhbCBjYXNlOgorICAgICAqICAgQGZbCisgICAgICogICAgIFx6ZXRhKHMpID0gXHpldGEoMSxzKQorICAgICAqICAgQGZdCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICBfX2h1cndpdHpfemV0YShjb25zdCBfVHAgX19hLCBjb25zdCBfVHAgX19zKQorICAgIHsKKyAgICAgIHJldHVybiBfX2h1cndpdHpfemV0YV9nbG9iKF9fYSwgX19zKTsKKyAgICB9CisKKyAgfSAvLyBuYW1lc3BhY2Ugc3RkOjp0cjE6Ol9fZGV0YWlsCit9Cit9CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfUklFTUFOTl9aRVRBX1RDQwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvc2hhcmVkX3B0ci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvc2hhcmVkX3B0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNzZiNWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9zaGFyZWRfcHRyLmgKQEAgLTAsMCArMSw5ODQgQEAKKy8vIDx0cjEvc2hhcmVkX3B0ci5oPiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gIHNoYXJlZF9jb3VudC5ocHAKKy8vICBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDIsIDIwMDMgUGV0ZXIgRGltb3YgYW5kIE11bHRpIE1lZGlhIEx0ZC4KKworLy8gIHNoYXJlZF9wdHIuaHBwCisvLyAgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5IEdyZWcgQ29sdmluIGFuZCBCZW1hbiBEYXdlcy4KKy8vICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMgUGV0ZXIgRGltb3YKKworLy8gIHdlYWtfcHRyLmhwcAorLy8gIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMyBQZXRlciBEaW1vdgorCisvLyAgZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMuaHBwCisvLyAgQ29weXJpZ2h0IChDKSAyMDAyIFBldGVyIERpbW92CisKKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQorLy8gYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKKy8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLy8gR0NDIE5vdGU6ICBiYXNlZCBvbiB2ZXJzaW9uIDEuMzIuMCBvZiB0aGUgQm9vc3QgbGlicmFyeS4KKworLyoqIEBmaWxlIHRyMS9zaGFyZWRfcHRyLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmbmRlZiBfVFIxX1NIQVJFRF9QVFJfSAorI2RlZmluZSBfVFIxX1NIQVJFRF9QVFJfSCAxCisKKyNpZiBkZWZpbmVkKF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgpCisjICBlcnJvciBUUjEgaGVhZGVyIGNhbm5vdCBiZSBpbmNsdWRlZCBmcm9tIEMrKzB4IGhlYWRlcgorI2VuZGlmCisKK25hbWVzcGFjZSBzdGQKK3sKK25hbWVzcGFjZSB0cjEKK3sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1B0ciwgdHlwZW5hbWUgX0RlbGV0ZXIsIF9Mb2NrX3BvbGljeSBfTHA+CisgICAgY2xhc3MgX1NwX2NvdW50ZWRfYmFzZV9pbXBsCisgICAgOiBwdWJsaWMgX1NwX2NvdW50ZWRfYmFzZTxfTHA+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIFByZWNvbmRpdGlvbjogX19kKF9fcCkgbXVzdCBub3QgdGhyb3cuCisgICAgICBfU3BfY291bnRlZF9iYXNlX2ltcGwoX1B0ciBfX3AsIF9EZWxldGVyIF9fZCkKKyAgICAgIDogX01fcHRyKF9fcCksIF9NX2RlbChfX2QpIHsgfQorICAgIAorICAgICAgdmlydHVhbCB2b2lkCisgICAgICBfTV9kaXNwb3NlKCkgLy8gbm90aHJvdworICAgICAgeyBfTV9kZWwoX01fcHRyKTsgfQorICAgICAgCisgICAgICB2aXJ0dWFsIHZvaWQqCisgICAgICBfTV9nZXRfZGVsZXRlcihjb25zdCBzdGQ6OnR5cGVfaW5mbyYgX190aSkKKyAgICAgIHsKKyNpZmRlZiBfX0dYWF9SVFRJCisgICAgICAgIHJldHVybiBfX3RpID09IHR5cGVpZChfRGVsZXRlcikgPyAmX01fZGVsIDogMDsKKyNlbHNlCisgICAgICAgIHJldHVybiAwOworI2VuZGlmCisgICAgICB9CisgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgX1NwX2NvdW50ZWRfYmFzZV9pbXBsKGNvbnN0IF9TcF9jb3VudGVkX2Jhc2VfaW1wbCYpOworICAgICAgX1NwX2NvdW50ZWRfYmFzZV9pbXBsJiBvcGVyYXRvcj0oY29uc3QgX1NwX2NvdW50ZWRfYmFzZV9pbXBsJik7CisgICAgICAKKyAgICAgIF9QdHIgICAgICBfTV9wdHI7ICAvLyBjb3B5IGNvbnN0cnVjdG9yIG11c3Qgbm90IHRocm93CisgICAgICBfRGVsZXRlciAgX01fZGVsOyAgLy8gY29weSBjb25zdHJ1Y3RvciBtdXN0IG5vdCB0aHJvdworICAgIH07CisKKyAgdGVtcGxhdGU8X0xvY2tfcG9saWN5IF9McCA9IF9fZGVmYXVsdF9sb2NrX3BvbGljeT4KKyAgICBjbGFzcyBfX3dlYWtfY291bnQ7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfU3BfZGVsZXRlcgorICAgIHsKKyAgICAgIHR5cGVkZWYgdm9pZCByZXN1bHRfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RwKiBhcmd1bWVudF90eXBlOworICAgICAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7IGRlbGV0ZSBfX3A7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPF9Mb2NrX3BvbGljeSBfTHAgPSBfX2RlZmF1bHRfbG9ja19wb2xpY3k+CisgICAgY2xhc3MgX19zaGFyZWRfY291bnQKKyAgICB7CisgICAgcHVibGljOiAKKyAgICAgIF9fc2hhcmVkX2NvdW50KCkKKyAgICAgIDogX01fcGkoMCkgLy8gbm90aHJvdworICAgICAgeyB9CisgIAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1B0cj4KKyAgICAgICAgX19zaGFyZWRfY291bnQoX1B0ciBfX3ApIDogX01fcGkoMCkKKyAgICAgICAgeworCSAgX190cnkKKwkgICAgeworCSAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjp0cjE6OnJlbW92ZV9wb2ludGVyPF9QdHI+Ojp0eXBlIF9UcDsKKwkgICAgICBfTV9waSA9IG5ldyBfU3BfY291bnRlZF9iYXNlX2ltcGw8X1B0ciwgX1NwX2RlbGV0ZXI8X1RwPiwgX0xwPigKKwkgICAgICAgICAgX19wLCBfU3BfZGVsZXRlcjxfVHA+KCkpOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeworCSAgICAgIGRlbGV0ZSBfX3A7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QdHIsIHR5cGVuYW1lIF9EZWxldGVyPgorICAgICAgICBfX3NoYXJlZF9jb3VudChfUHRyIF9fcCwgX0RlbGV0ZXIgX19kKSA6IF9NX3BpKDApCisgICAgICAgIHsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICBfTV9waSA9IG5ldyBfU3BfY291bnRlZF9iYXNlX2ltcGw8X1B0ciwgX0RlbGV0ZXIsIF9McD4oX19wLCBfX2QpOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeworCSAgICAgIF9fZChfX3ApOyAvLyBDYWxsIF9EZWxldGVyIG9uIF9fcC4KKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCX0KKworICAgICAgLy8gU3BlY2lhbCBjYXNlIGZvciBhdXRvX3B0cjxfVHA+IHRvIHByb3ZpZGUgdGhlIHN0cm9uZyBndWFyYW50ZWUuCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIGV4cGxpY2l0CisgICAgICAgIF9fc2hhcmVkX2NvdW50KHN0ZDo6YXV0b19wdHI8X1RwPiYgX19yKQorCTogX01fcGkobmV3IF9TcF9jb3VudGVkX2Jhc2VfaW1wbDxfVHAqLAorCQlfU3BfZGVsZXRlcjxfVHA+LCBfTHAgPihfX3IuZ2V0KCksIF9TcF9kZWxldGVyPF9UcD4oKSkpCisgICAgICAgIHsgX19yLnJlbGVhc2UoKTsgfQorCisgICAgICAvLyBUaHJvdyBiYWRfd2Vha19wdHIgd2hlbiBfX3IuX01fZ2V0X3VzZV9jb3VudCgpID09IDAuCisgICAgICBleHBsaWNpdAorICAgICAgX19zaGFyZWRfY291bnQoY29uc3QgX193ZWFrX2NvdW50PF9McD4mIF9fcik7CisgIAorICAgICAgfl9fc2hhcmVkX2NvdW50KCkgLy8gbm90aHJvdworICAgICAgeworCWlmIChfTV9waSAhPSAwKQorCSAgX01fcGktPl9NX3JlbGVhc2UoKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgX19zaGFyZWRfY291bnQoY29uc3QgX19zaGFyZWRfY291bnQmIF9fcikKKyAgICAgIDogX01fcGkoX19yLl9NX3BpKSAvLyBub3Rocm93CisgICAgICB7CisJaWYgKF9NX3BpICE9IDApCisJICBfTV9waS0+X01fYWRkX3JlZl9jb3B5KCk7CisgICAgICB9CisgIAorICAgICAgX19zaGFyZWRfY291bnQmCisgICAgICBvcGVyYXRvcj0oY29uc3QgX19zaGFyZWRfY291bnQmIF9fcikgLy8gbm90aHJvdworICAgICAgeworCV9TcF9jb3VudGVkX2Jhc2U8X0xwPiogX190bXAgPSBfX3IuX01fcGk7CisJaWYgKF9fdG1wICE9IF9NX3BpKQorCSAgeworCSAgICBpZiAoX190bXAgIT0gMCkKKwkgICAgICBfX3RtcC0+X01fYWRkX3JlZl9jb3B5KCk7CisJICAgIGlmIChfTV9waSAhPSAwKQorCSAgICAgIF9NX3BpLT5fTV9yZWxlYXNlKCk7CisJICAgIF9NX3BpID0gX190bXA7CisJICB9CisJcmV0dXJuICp0aGlzOworICAgICAgfQorICAKKyAgICAgIHZvaWQKKyAgICAgIF9NX3N3YXAoX19zaGFyZWRfY291bnQmIF9fcikgLy8gbm90aHJvdworICAgICAgeworCV9TcF9jb3VudGVkX2Jhc2U8X0xwPiogX190bXAgPSBfX3IuX01fcGk7CisJX19yLl9NX3BpID0gX01fcGk7CisJX01fcGkgPSBfX3RtcDsKKyAgICAgIH0KKyAgCisgICAgICBsb25nCisgICAgICBfTV9nZXRfdXNlX2NvdW50KCkgY29uc3QgLy8gbm90aHJvdworICAgICAgeyByZXR1cm4gX01fcGkgIT0gMCA/IF9NX3BpLT5fTV9nZXRfdXNlX2NvdW50KCkgOiAwOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIF9NX3VuaXF1ZSgpIGNvbnN0IC8vIG5vdGhyb3cKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2dldF91c2VfY291bnQoKSA9PSAxOyB9CisgICAgICAKKyAgICAgIGZyaWVuZCBpbmxpbmUgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBfX3NoYXJlZF9jb3VudCYgX19hLCBjb25zdCBfX3NoYXJlZF9jb3VudCYgX19iKQorICAgICAgeyByZXR1cm4gX19hLl9NX3BpID09IF9fYi5fTV9waTsgfQorICAKKyAgICAgIGZyaWVuZCBpbmxpbmUgYm9vbAorICAgICAgb3BlcmF0b3I8KGNvbnN0IF9fc2hhcmVkX2NvdW50JiBfX2EsIGNvbnN0IF9fc2hhcmVkX2NvdW50JiBfX2IpCisgICAgICB7IHJldHVybiBzdGQ6Omxlc3M8X1NwX2NvdW50ZWRfYmFzZTxfTHA+Kj4oKShfX2EuX01fcGksIF9fYi5fTV9waSk7IH0KKyAgCisgICAgICB2b2lkKgorICAgICAgX01fZ2V0X2RlbGV0ZXIoY29uc3Qgc3RkOjp0eXBlX2luZm8mIF9fdGkpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9waSA/IF9NX3BpLT5fTV9nZXRfZGVsZXRlcihfX3RpKSA6IDA7IH0KKworICAgIHByaXZhdGU6CisgICAgICBmcmllbmQgY2xhc3MgX193ZWFrX2NvdW50PF9McD47CisKKyAgICAgIF9TcF9jb3VudGVkX2Jhc2U8X0xwPiogIF9NX3BpOworICAgIH07CisKKworICB0ZW1wbGF0ZTxfTG9ja19wb2xpY3kgX0xwPgorICAgIGNsYXNzIF9fd2Vha19jb3VudAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICBfX3dlYWtfY291bnQoKQorICAgICAgOiBfTV9waSgwKSAvLyBub3Rocm93CisgICAgICB7IH0KKyAgCisgICAgICBfX3dlYWtfY291bnQoY29uc3QgX19zaGFyZWRfY291bnQ8X0xwPiYgX19yKQorICAgICAgOiBfTV9waShfX3IuX01fcGkpIC8vIG5vdGhyb3cKKyAgICAgIHsKKwlpZiAoX01fcGkgIT0gMCkKKwkgIF9NX3BpLT5fTV93ZWFrX2FkZF9yZWYoKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgX193ZWFrX2NvdW50KGNvbnN0IF9fd2Vha19jb3VudDxfTHA+JiBfX3IpCisgICAgICA6IF9NX3BpKF9fci5fTV9waSkgLy8gbm90aHJvdworICAgICAgeworCWlmIChfTV9waSAhPSAwKQorCSAgX01fcGktPl9NX3dlYWtfYWRkX3JlZigpOworICAgICAgfQorICAgICAgCisgICAgICB+X193ZWFrX2NvdW50KCkgLy8gbm90aHJvdworICAgICAgeworCWlmIChfTV9waSAhPSAwKQorCSAgX01fcGktPl9NX3dlYWtfcmVsZWFzZSgpOworICAgICAgfQorICAgICAgCisgICAgICBfX3dlYWtfY291bnQ8X0xwPiYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfX3NoYXJlZF9jb3VudDxfTHA+JiBfX3IpIC8vIG5vdGhyb3cKKyAgICAgIHsKKwlfU3BfY291bnRlZF9iYXNlPF9McD4qIF9fdG1wID0gX19yLl9NX3BpOworCWlmIChfX3RtcCAhPSAwKQorCSAgX190bXAtPl9NX3dlYWtfYWRkX3JlZigpOworCWlmIChfTV9waSAhPSAwKQorCSAgX01fcGktPl9NX3dlYWtfcmVsZWFzZSgpOworCV9NX3BpID0gX190bXA7ICAKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisgICAgICAKKyAgICAgIF9fd2Vha19jb3VudDxfTHA+JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9fd2Vha19jb3VudDxfTHA+JiBfX3IpIC8vIG5vdGhyb3cKKyAgICAgIHsKKwlfU3BfY291bnRlZF9iYXNlPF9McD4qIF9fdG1wID0gX19yLl9NX3BpOworCWlmIChfX3RtcCAhPSAwKQorCSAgX190bXAtPl9NX3dlYWtfYWRkX3JlZigpOworCWlmIChfTV9waSAhPSAwKQorCSAgX01fcGktPl9NX3dlYWtfcmVsZWFzZSgpOworCV9NX3BpID0gX190bXA7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9zd2FwKF9fd2Vha19jb3VudDxfTHA+JiBfX3IpIC8vIG5vdGhyb3cKKyAgICAgIHsKKwlfU3BfY291bnRlZF9iYXNlPF9McD4qIF9fdG1wID0gX19yLl9NX3BpOworCV9fci5fTV9waSA9IF9NX3BpOworCV9NX3BpID0gX190bXA7CisgICAgICB9CisgIAorICAgICAgbG9uZworICAgICAgX01fZ2V0X3VzZV9jb3VudCgpIGNvbnN0IC8vIG5vdGhyb3cKKyAgICAgIHsgcmV0dXJuIF9NX3BpICE9IDAgPyBfTV9waS0+X01fZ2V0X3VzZV9jb3VudCgpIDogMDsgfQorCisgICAgICBmcmllbmQgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgX193ZWFrX2NvdW50PF9McD4mIF9fYSwgY29uc3QgX193ZWFrX2NvdW50PF9McD4mIF9fYikKKyAgICAgIHsgcmV0dXJuIF9fYS5fTV9waSA9PSBfX2IuX01fcGk7IH0KKyAgICAgIAorICAgICAgZnJpZW5kIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcjwoY29uc3QgX193ZWFrX2NvdW50PF9McD4mIF9fYSwgY29uc3QgX193ZWFrX2NvdW50PF9McD4mIF9fYikKKyAgICAgIHsgcmV0dXJuIHN0ZDo6bGVzczxfU3BfY291bnRlZF9iYXNlPF9McD4qPigpKF9fYS5fTV9waSwgX19iLl9NX3BpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIGZyaWVuZCBjbGFzcyBfX3NoYXJlZF9jb3VudDxfTHA+OworCisgICAgICBfU3BfY291bnRlZF9iYXNlPF9McD4qICBfTV9waTsKKyAgICB9OworCisgIC8vIG5vdyB0aGF0IF9fd2Vha19jb3VudCBpcyBkZWZpbmVkIHdlIGNhbiBkZWZpbmUgdGhpcyBjb25zdHJ1Y3RvcjoKKyAgdGVtcGxhdGU8X0xvY2tfcG9saWN5IF9McD4KKyAgICBpbmxpbmUKKyAgICBfX3NoYXJlZF9jb3VudDxfTHA+OjoKKyAgICBfX3NoYXJlZF9jb3VudChjb25zdCBfX3dlYWtfY291bnQ8X0xwPiYgX19yKQorICAgIDogX01fcGkoX19yLl9NX3BpKQorICAgIHsKKyAgICAgIGlmIChfTV9waSAhPSAwKQorCV9NX3BpLT5fTV9hZGRfcmVmX2xvY2soKTsKKyAgICAgIGVsc2UKKwlfX3Rocm93X2JhZF93ZWFrX3B0cigpOworICAgIH0KKworICAvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwID0gX19kZWZhdWx0X2xvY2tfcG9saWN5PgorICAgIGNsYXNzIF9fc2hhcmVkX3B0cjsKKyAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX0xvY2tfcG9saWN5IF9McCA9IF9fZGVmYXVsdF9sb2NrX3BvbGljeT4KKyAgICBjbGFzcyBfX3dlYWtfcHRyOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX0xvY2tfcG9saWN5IF9McCA9IF9fZGVmYXVsdF9sb2NrX3BvbGljeT4KKyAgICBjbGFzcyBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyBzaGFyZWRfcHRyOworICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIHdlYWtfcHRyOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyBlbmFibGVfc2hhcmVkX2Zyb21fdGhpczsKKworICAvLyBTdXBwb3J0IGZvciBlbmFibGVfc2hhcmVkX2Zyb21fdGhpcy4KKworICAvLyBGcmllbmQgb2YgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpcy4KKyAgdGVtcGxhdGU8X0xvY2tfcG9saWN5IF9McCwgdHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1RwMj4KKyAgICB2b2lkCisgICAgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpc19oZWxwZXIoY29uc3QgX19zaGFyZWRfY291bnQ8X0xwPiYsCisJCQkJICAgICBjb25zdCBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzPF9UcDEsCisJCQkJICAgICBfTHA+KiwgY29uc3QgX1RwMiopOworCisgIC8vIEZyaWVuZCBvZiBlbmFibGVfc2hhcmVkX2Zyb21fdGhpcy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1RwMj4KKyAgICB2b2lkCisgICAgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpc19oZWxwZXIoY29uc3QgX19zaGFyZWRfY291bnQ8PiYsCisJCQkJICAgICBjb25zdCBlbmFibGVfc2hhcmVkX2Zyb21fdGhpczxfVHAxPiosCisJCQkJICAgICBjb25zdCBfVHAyKik7CisKKyAgdGVtcGxhdGU8X0xvY2tfcG9saWN5IF9McD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXNfaGVscGVyKGNvbnN0IF9fc2hhcmVkX2NvdW50PF9McD4mLCAuLi4pCisgICAgeyB9CisKKworICBzdHJ1Y3QgX19zdGF0aWNfY2FzdF90YWcgeyB9OworICBzdHJ1Y3QgX19jb25zdF9jYXN0X3RhZyB7IH07CisgIHN0cnVjdCBfX2R5bmFtaWNfY2FzdF90YWcgeyB9OworCisgIC8vIEEgc21hcnQgcG9pbnRlciB3aXRoIHJlZmVyZW5jZS1jb3VudGVkIGNvcHkgc2VtYW50aWNzLiAgVGhlCisgIC8vIG9iamVjdCBwb2ludGVkIHRvIGlzIGRlbGV0ZWQgd2hlbiB0aGUgbGFzdCBzaGFyZWRfcHRyIHBvaW50aW5nIHRvCisgIC8vIGl0IGlzIGRlc3Ryb3llZCBvciByZXNldC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGNsYXNzIF9fc2hhcmVkX3B0cgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9UcCAgIGVsZW1lbnRfdHlwZTsKKyAgICAgIAorICAgICAgX19zaGFyZWRfcHRyKCkKKyAgICAgIDogX01fcHRyKDApLCBfTV9yZWZjb3VudCgpIC8vIG5ldmVyIHRocm93cworICAgICAgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIGV4cGxpY2l0CisgICAgICAgIF9fc2hhcmVkX3B0cihfVHAxKiBfX3ApCisJOiBfTV9wdHIoX19wKSwgX01fcmVmY291bnQoX19wKQorICAgICAgICB7CisJICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0NvbnZlcnRpYmxlQ29uY2VwdDxfVHAxKiwgX1RwKj4pCisJICAvLyBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0NvbXBsZXRlQ29uY2VwdDxfVHAxKj4pCisJICBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzX2hlbHBlcihfTV9yZWZjb3VudCwgX19wLCBfX3ApOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX0RlbGV0ZXI+CisgICAgICAgIF9fc2hhcmVkX3B0cihfVHAxKiBfX3AsIF9EZWxldGVyIF9fZCkKKyAgICAgICAgOiBfTV9wdHIoX19wKSwgX01fcmVmY291bnQoX19wLCBfX2QpCisgICAgICAgIHsKKwkgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQ29udmVydGlibGVDb25jZXB0PF9UcDEqLCBfVHAqPikKKwkgIC8vIFRPRE8gcmVxdWlyZXMgX0RlbGV0ZXIgQ29weUNvbnN0cnVjdGlibGUgYW5kIF9fZChfX3ApIHdlbGwtZm9ybWVkCisJICBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzX2hlbHBlcihfTV9yZWZjb3VudCwgX19wLCBfX3ApOworCX0KKyAgICAgIAorICAgICAgLy8gIGdlbmVyYXRlZCBjb3B5IGNvbnN0cnVjdG9yLCBhc3NpZ25tZW50LCBkZXN0cnVjdG9yIGFyZSBmaW5lLgorICAgICAgCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorICAgICAgICBfX3NoYXJlZF9wdHIoY29uc3QgX19zaGFyZWRfcHRyPF9UcDEsIF9McD4mIF9fcikKKwk6IF9NX3B0cihfX3IuX01fcHRyKSwgX01fcmVmY291bnQoX19yLl9NX3JlZmNvdW50KSAvLyBuZXZlciB0aHJvd3MKKyAgICAgICAgeyBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0NvbnZlcnRpYmxlQ29uY2VwdDxfVHAxKiwgX1RwKj4pIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgZXhwbGljaXQKKyAgICAgICAgX19zaGFyZWRfcHRyKGNvbnN0IF9fd2Vha19wdHI8X1RwMSwgX0xwPiYgX19yKQorCTogX01fcmVmY291bnQoX19yLl9NX3JlZmNvdW50KSAvLyBtYXkgdGhyb3cKKyAgICAgICAgeworCSAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Db252ZXJ0aWJsZUNvbmNlcHQ8X1RwMSosIF9UcCo+KQorCSAgLy8gSXQgaXMgbm93IHNhZmUgdG8gY29weSBfX3IuX01fcHRyLCBhcyBfTV9yZWZjb3VudChfX3IuX01fcmVmY291bnQpCisJICAvLyBkaWQgbm90IHRocm93LgorCSAgX01fcHRyID0gX19yLl9NX3B0cjsKKwl9CisKKyNpZiAhZGVmaW5lZChfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXykgfHwgX0dMSUJDWFhfREVQUkVDQVRFRAorICAgICAgLy8gUG9zdGNvbmRpdGlvbjogdXNlX2NvdW50KCkgPT0gMSBhbmQgX19yLmdldCgpID09IDAKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIGV4cGxpY2l0CisgICAgICAgIF9fc2hhcmVkX3B0cihzdGQ6OmF1dG9fcHRyPF9UcDE+JiBfX3IpCisJOiBfTV9wdHIoX19yLmdldCgpKSwgX01fcmVmY291bnQoKQorICAgICAgICB7CisJICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0NvbnZlcnRpYmxlQ29uY2VwdDxfVHAxKiwgX1RwKj4pCisJICAvLyBUT0RPIHJlcXVpcmVzIF9UcDEgaXMgY29tcGxldGUsIGRlbGV0ZSBfX3IucmVsZWFzZSgpIHdlbGwtZm9ybWVkCisJICBfVHAxKiBfX3RtcCA9IF9fci5nZXQoKTsKKwkgIF9NX3JlZmNvdW50ID0gX19zaGFyZWRfY291bnQ8X0xwPihfX3IpOworCSAgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpc19oZWxwZXIoX01fcmVmY291bnQsIF9fdG1wLCBfX3RtcCk7CisJfQorCisjZW5kaWYKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgX19zaGFyZWRfcHRyKGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAxLCBfTHA+JiBfX3IsIF9fc3RhdGljX2Nhc3RfdGFnKQorCTogX01fcHRyKHN0YXRpY19jYXN0PGVsZW1lbnRfdHlwZSo+KF9fci5fTV9wdHIpKSwKKwkgIF9NX3JlZmNvdW50KF9fci5fTV9yZWZjb3VudCkKKyAgICAgICAgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIF9fc2hhcmVkX3B0cihjb25zdCBfX3NoYXJlZF9wdHI8X1RwMSwgX0xwPiYgX19yLCBfX2NvbnN0X2Nhc3RfdGFnKQorCTogX01fcHRyKGNvbnN0X2Nhc3Q8ZWxlbWVudF90eXBlKj4oX19yLl9NX3B0cikpLAorCSAgX01fcmVmY291bnQoX19yLl9NX3JlZmNvdW50KQorICAgICAgICB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgX19zaGFyZWRfcHRyKGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAxLCBfTHA+JiBfX3IsIF9fZHluYW1pY19jYXN0X3RhZykKKwk6IF9NX3B0cihkeW5hbWljX2Nhc3Q8ZWxlbWVudF90eXBlKj4oX19yLl9NX3B0cikpLAorCSAgX01fcmVmY291bnQoX19yLl9NX3JlZmNvdW50KQorICAgICAgICB7CisJICBpZiAoX01fcHRyID09IDApIC8vIG5lZWQgdG8gYWxsb2NhdGUgbmV3IGNvdW50ZXIgLS0gdGhlIGNhc3QgZmFpbGVkCisJICAgIF9NX3JlZmNvdW50ID0gX19zaGFyZWRfY291bnQ8X0xwPigpOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgX19zaGFyZWRfcHRyJgorICAgICAgICBvcGVyYXRvcj0oY29uc3QgX19zaGFyZWRfcHRyPF9UcDEsIF9McD4mIF9fcikgLy8gbmV2ZXIgdGhyb3dzCisgICAgICAgIHsKKwkgIF9NX3B0ciA9IF9fci5fTV9wdHI7CisJICBfTV9yZWZjb3VudCA9IF9fci5fTV9yZWZjb3VudDsgLy8gX19zaGFyZWRfY291bnQ6Om9wPSBkb2Vzbid0IHRocm93CisJICByZXR1cm4gKnRoaXM7CisJfQorCisjaWYgIWRlZmluZWQoX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18pIHx8IF9HTElCQ1hYX0RFUFJFQ0FURUQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIF9fc2hhcmVkX3B0ciYKKyAgICAgICAgb3BlcmF0b3I9KHN0ZDo6YXV0b19wdHI8X1RwMT4mIF9fcikKKyAgICAgICAgeworCSAgX19zaGFyZWRfcHRyKF9fcikuc3dhcCgqdGhpcyk7CisJICByZXR1cm4gKnRoaXM7CisJfQorI2VuZGlmCisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkgLy8gbmV2ZXIgdGhyb3dzCisgICAgICB7IF9fc2hhcmVkX3B0cigpLnN3YXAoKnRoaXMpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIHZvaWQKKyAgICAgICAgcmVzZXQoX1RwMSogX19wKSAvLyBfVHAxIG11c3QgYmUgY29tcGxldGUuCisgICAgICAgIHsKKwkgIC8vIENhdGNoIHNlbGYtcmVzZXQgZXJyb3JzLgorCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9fcCA9PSAwIHx8IF9fcCAhPSBfTV9wdHIpOyAKKwkgIF9fc2hhcmVkX3B0cihfX3ApLnN3YXAoKnRoaXMpOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX0RlbGV0ZXI+CisgICAgICAgIHZvaWQKKyAgICAgICAgcmVzZXQoX1RwMSogX19wLCBfRGVsZXRlciBfX2QpCisgICAgICAgIHsgX19zaGFyZWRfcHRyKF9fcCwgX19kKS5zd2FwKCp0aGlzKTsgfQorCisgICAgICAvLyBBbGxvdyBjbGFzcyBpbnN0YW50aWF0aW9uIHdoZW4gX1RwIGlzIFtjdi1xdWFsXSB2b2lkLgorICAgICAgdHlwZW5hbWUgc3RkOjp0cjE6OmFkZF9yZWZlcmVuY2U8X1RwPjo6dHlwZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QgLy8gbmV2ZXIgdGhyb3dzCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9NX3B0ciAhPSAwKTsKKwlyZXR1cm4gKl9NX3B0cjsKKyAgICAgIH0KKworICAgICAgX1RwKgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IC8vIG5ldmVyIHRocm93cworICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChfTV9wdHIgIT0gMCk7CisJcmV0dXJuIF9NX3B0cjsKKyAgICAgIH0KKyAgICAKKyAgICAgIF9UcCoKKyAgICAgIGdldCgpIGNvbnN0IC8vIG5ldmVyIHRocm93cworICAgICAgeyByZXR1cm4gX01fcHRyOyB9CisKKyAgICAgIC8vIEltcGxpY2l0IGNvbnZlcnNpb24gdG8gImJvb2wiCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX1RwKiBfX3NoYXJlZF9wdHI6OipfX3Vuc3BlY2lmaWVkX2Jvb2xfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIG9wZXJhdG9yIF9fdW5zcGVjaWZpZWRfYm9vbF90eXBlKCkgY29uc3QgLy8gbmV2ZXIgdGhyb3dzCisgICAgICB7IHJldHVybiBfTV9wdHIgPT0gMCA/IDAgOiAmX19zaGFyZWRfcHRyOjpfTV9wdHI7IH0KKworICAgICAgYm9vbAorICAgICAgdW5pcXVlKCkgY29uc3QgLy8gbmV2ZXIgdGhyb3dzCisgICAgICB7IHJldHVybiBfTV9yZWZjb3VudC5fTV91bmlxdWUoKTsgfQorCisgICAgICBsb25nCisgICAgICB1c2VfY291bnQoKSBjb25zdCAvLyBuZXZlciB0aHJvd3MKKyAgICAgIHsgcmV0dXJuIF9NX3JlZmNvdW50Ll9NX2dldF91c2VfY291bnQoKTsgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKF9fc2hhcmVkX3B0cjxfVHAsIF9McD4mIF9fb3RoZXIpIC8vIG5ldmVyIHRocm93cworICAgICAgeworCXN0ZDo6c3dhcChfTV9wdHIsIF9fb3RoZXIuX01fcHRyKTsKKwlfTV9yZWZjb3VudC5fTV9zd2FwKF9fb3RoZXIuX01fcmVmY291bnQpOworICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHZvaWQqCisgICAgICBfTV9nZXRfZGVsZXRlcihjb25zdCBzdGQ6OnR5cGVfaW5mbyYgX190aSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3JlZmNvdW50Ll9NX2dldF9kZWxldGVyKF9fdGkpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIF9Mb2NrX3BvbGljeSBfTHAxPgorICAgICAgICBib29sCisgICAgICAgIF9NX2xlc3MoY29uc3QgX19zaGFyZWRfcHRyPF9UcDEsIF9McDE+JiBfX3JocykgY29uc3QKKyAgICAgICAgeyByZXR1cm4gX01fcmVmY291bnQgPCBfX3Jocy5fTV9yZWZjb3VudDsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCBfTG9ja19wb2xpY3kgX0xwMT4gZnJpZW5kIGNsYXNzIF9fc2hhcmVkX3B0cjsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIF9Mb2NrX3BvbGljeSBfTHAxPiBmcmllbmQgY2xhc3MgX193ZWFrX3B0cjsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0RlbCwgdHlwZW5hbWUgX1RwMSwgX0xvY2tfcG9saWN5IF9McDE+CisgICAgICAgIGZyaWVuZCBfRGVsKiBnZXRfZGVsZXRlcihjb25zdCBfX3NoYXJlZF9wdHI8X1RwMSwgX0xwMT4mKTsKKworICAgICAgLy8gRnJpZW5kcyBpbmplY3RlZCBpbnRvIGVuY2xvc2luZyBuYW1lc3BhY2UgYW5kIGZvdW5kIGJ5IEFETDoKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIGZyaWVuZCBpbmxpbmUgYm9vbAorICAgICAgICBvcGVyYXRvcj09KGNvbnN0IF9fc2hhcmVkX3B0ciYgX19hLCBjb25zdCBfX3NoYXJlZF9wdHI8X1RwMSwgX0xwPiYgX19iKQorICAgICAgICB7IHJldHVybiBfX2EuZ2V0KCkgPT0gX19iLmdldCgpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIGZyaWVuZCBpbmxpbmUgYm9vbAorICAgICAgICBvcGVyYXRvciE9KGNvbnN0IF9fc2hhcmVkX3B0ciYgX19hLCBjb25zdCBfX3NoYXJlZF9wdHI8X1RwMSwgX0xwPiYgX19iKQorICAgICAgICB7IHJldHVybiBfX2EuZ2V0KCkgIT0gX19iLmdldCgpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIGZyaWVuZCBpbmxpbmUgYm9vbAorICAgICAgICBvcGVyYXRvcjwoY29uc3QgX19zaGFyZWRfcHRyJiBfX2EsIGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAxLCBfTHA+JiBfX2IpCisgICAgICAgIHsgcmV0dXJuIF9fYS5fTV9sZXNzKF9fYik7IH0KKworICAgICAgX1RwKiAgICAgICAgIAkgICBfTV9wdHI7ICAgICAgICAgLy8gQ29udGFpbmVkIHBvaW50ZXIuCisgICAgICBfX3NoYXJlZF9jb3VudDxfTHA+ICBfTV9yZWZjb3VudDsgICAgLy8gUmVmZXJlbmNlIGNvdW50ZXIuCisgICAgfTsKKworICAvLyAyLjIuMy44IHNoYXJlZF9wdHIgc3BlY2lhbGl6ZWQgYWxnb3JpdGhtcy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChfX3NoYXJlZF9wdHI8X1RwLCBfTHA+JiBfX2EsIF9fc2hhcmVkX3B0cjxfVHAsIF9McD4mIF9fYikKKyAgICB7IF9fYS5zd2FwKF9fYik7IH0KKworICAvLyAyLjIuMy45IHNoYXJlZF9wdHIgY2FzdHMKKyAgLyogIFRoZSBzZWVtaW5nbHkgZXF1aXZhbGVudAorICAgKiAgICAgICAgICAgc2hhcmVkX3B0cjxfVHAsIF9McD4oc3RhdGljX2Nhc3Q8X1RwKj4oX19yLmdldCgpKSkKKyAgICogIHdpbGwgZXZlbnR1YWxseSByZXN1bHQgaW4gdW5kZWZpbmVkIGJlaGF2aW91ciwKKyAgICogIGF0dGVtcHRpbmcgdG8gZGVsZXRlIHRoZSBzYW1lIG9iamVjdCB0d2ljZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMSwgX0xvY2tfcG9saWN5IF9McD4KKyAgICBpbmxpbmUgX19zaGFyZWRfcHRyPF9UcCwgX0xwPgorICAgIHN0YXRpY19wb2ludGVyX2Nhc3QoY29uc3QgX19zaGFyZWRfcHRyPF9UcDEsIF9McD4mIF9fcikKKyAgICB7IHJldHVybiBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+KF9fciwgX19zdGF0aWNfY2FzdF90YWcoKSk7IH0KKworICAvKiAgVGhlIHNlZW1pbmdseSBlcXVpdmFsZW50CisgICAqICAgICAgICAgICBzaGFyZWRfcHRyPF9UcCwgX0xwPihjb25zdF9jYXN0PF9UcCo+KF9fci5nZXQoKSkpCisgICAqICB3aWxsIGV2ZW50dWFsbHkgcmVzdWx0IGluIHVuZGVmaW5lZCBiZWhhdmlvdXIsCisgICAqICBhdHRlbXB0aW5nIHRvIGRlbGV0ZSB0aGUgc2FtZSBvYmplY3QgdHdpY2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDEsIF9Mb2NrX3BvbGljeSBfTHA+CisgICAgaW5saW5lIF9fc2hhcmVkX3B0cjxfVHAsIF9McD4KKyAgICBjb25zdF9wb2ludGVyX2Nhc3QoY29uc3QgX19zaGFyZWRfcHRyPF9UcDEsIF9McD4mIF9fcikKKyAgICB7IHJldHVybiBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+KF9fciwgX19jb25zdF9jYXN0X3RhZygpKTsgfQorCisgIC8qICBUaGUgc2VlbWluZ2x5IGVxdWl2YWxlbnQKKyAgICogICAgICAgICAgIHNoYXJlZF9wdHI8X1RwLCBfTHA+KGR5bmFtaWNfY2FzdDxfVHAqPihfX3IuZ2V0KCkpKQorICAgKiAgd2lsbCBldmVudHVhbGx5IHJlc3VsdCBpbiB1bmRlZmluZWQgYmVoYXZpb3VyLAorICAgKiAgYXR0ZW1wdGluZyB0byBkZWxldGUgdGhlIHNhbWUgb2JqZWN0IHR3aWNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+CisgICAgZHluYW1pY19wb2ludGVyX2Nhc3QoY29uc3QgX19zaGFyZWRfcHRyPF9UcDEsIF9McD4mIF9fcikKKyAgICB7IHJldHVybiBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+KF9fciwgX19keW5hbWljX2Nhc3RfdGFnKCkpOyB9CisKKyAgLy8gMi4yLjMuNyBzaGFyZWRfcHRyIEkvTworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2gsIHR5cGVuYW1lIF9UciwgdHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2gsIF9Ucj4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoLCBfVHI+JiBfX29zLCAKKwkgICAgICAgY29uc3QgX19zaGFyZWRfcHRyPF9UcCwgX0xwPiYgX19wKQorICAgIHsKKyAgICAgIF9fb3MgPDwgX19wLmdldCgpOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIC8vIDIuMi4zLjEwIHNoYXJlZF9wdHIgZ2V0X2RlbGV0ZXIgKGV4cGVyaW1lbnRhbCkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0RlbCwgdHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSBfRGVsKgorICAgIGdldF9kZWxldGVyKGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAsIF9McD4mIF9fcCkKKyAgICB7CisjaWZkZWYgX19HWFhfUlRUSQorICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PF9EZWwqPihfX3AuX01fZ2V0X2RlbGV0ZXIodHlwZWlkKF9EZWwpKSk7CisjZWxzZQorICAgICAgcmV0dXJuIDA7CisjZW5kaWYKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIF9Mb2NrX3BvbGljeSBfTHA+CisgICAgY2xhc3MgX193ZWFrX3B0cgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9UcCBlbGVtZW50X3R5cGU7CisgICAgICAKKyAgICAgIF9fd2Vha19wdHIoKQorICAgICAgOiBfTV9wdHIoMCksIF9NX3JlZmNvdW50KCkgLy8gbmV2ZXIgdGhyb3dzCisgICAgICB7IH0KKworICAgICAgLy8gR2VuZXJhdGVkIGNvcHkgY29uc3RydWN0b3IsIGFzc2lnbm1lbnQsIGRlc3RydWN0b3IgYXJlIGZpbmUuCisgICAgICAKKyAgICAgIC8vIFRoZSAib2J2aW91cyIgY29udmVydGluZyBjb25zdHJ1Y3RvciBpbXBsZW1lbnRhdGlvbjoKKyAgICAgIC8vCisgICAgICAvLyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgIC8vICAgIF9fd2Vha19wdHIoY29uc3QgX193ZWFrX3B0cjxfVHAxLCBfTHA+JiBfX3IpCisgICAgICAvLyAgICA6IF9NX3B0cihfX3IuX01fcHRyKSwgX01fcmVmY291bnQoX19yLl9NX3JlZmNvdW50KSAvLyBuZXZlciB0aHJvd3MKKyAgICAgIC8vICAgIHsgfQorICAgICAgLy8KKyAgICAgIC8vIGhhcyBhIHNlcmlvdXMgcHJvYmxlbS4KKyAgICAgIC8vCisgICAgICAvLyAgX19yLl9NX3B0ciBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gaW52YWxpZGF0ZWQuIFRoZSBfTV9wdHIoX19yLl9NX3B0cikKKyAgICAgIC8vICBjb252ZXJzaW9uIG1heSByZXF1aXJlIGFjY2VzcyB0byAqX19yLl9NX3B0ciAodmlydHVhbCBpbmhlcml0YW5jZSkuCisgICAgICAvLworICAgICAgLy8gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGF2b2lkIHNwdXJpb3VzIGFjY2VzcyB2aW9sYXRpb25zIHNpbmNlCisgICAgICAvLyBpbiBtdWx0aXRocmVhZGVkIHByb2dyYW1zIF9fci5fTV9wdHIgbWF5IGJlIGludmFsaWRhdGVkIGF0IGFueSBwb2ludC4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIF9fd2Vha19wdHIoY29uc3QgX193ZWFrX3B0cjxfVHAxLCBfTHA+JiBfX3IpCisJOiBfTV9yZWZjb3VudChfX3IuX01fcmVmY291bnQpIC8vIG5ldmVyIHRocm93cworICAgICAgICB7CisJICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0NvbnZlcnRpYmxlQ29uY2VwdDxfVHAxKiwgX1RwKj4pCisJICBfTV9wdHIgPSBfX3IubG9jaygpLmdldCgpOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgX193ZWFrX3B0cihjb25zdCBfX3NoYXJlZF9wdHI8X1RwMSwgX0xwPiYgX19yKQorCTogX01fcHRyKF9fci5fTV9wdHIpLCBfTV9yZWZjb3VudChfX3IuX01fcmVmY291bnQpIC8vIG5ldmVyIHRocm93cworICAgICAgICB7IF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQ29udmVydGlibGVDb25jZXB0PF9UcDEqLCBfVHAqPikgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorICAgICAgICBfX3dlYWtfcHRyJgorICAgICAgICBvcGVyYXRvcj0oY29uc3QgX193ZWFrX3B0cjxfVHAxLCBfTHA+JiBfX3IpIC8vIG5ldmVyIHRocm93cworICAgICAgICB7CisJICBfTV9wdHIgPSBfX3IubG9jaygpLmdldCgpOworCSAgX01fcmVmY291bnQgPSBfX3IuX01fcmVmY291bnQ7CisJICByZXR1cm4gKnRoaXM7CisJfQorICAgICAgCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorICAgICAgICBfX3dlYWtfcHRyJgorICAgICAgICBvcGVyYXRvcj0oY29uc3QgX19zaGFyZWRfcHRyPF9UcDEsIF9McD4mIF9fcikgLy8gbmV2ZXIgdGhyb3dzCisgICAgICAgIHsKKwkgIF9NX3B0ciA9IF9fci5fTV9wdHI7CisJICBfTV9yZWZjb3VudCA9IF9fci5fTV9yZWZjb3VudDsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIF9fc2hhcmVkX3B0cjxfVHAsIF9McD4KKyAgICAgIGxvY2soKSBjb25zdCAvLyBuZXZlciB0aHJvd3MKKyAgICAgIHsKKyNpZmRlZiBfX0dUSFJFQURTCisJLy8gT3B0aW1pemF0aW9uOiBhdm9pZCB0aHJvdyBvdmVyaGVhZC4KKwlpZiAoZXhwaXJlZCgpKQorCSAgcmV0dXJuIF9fc2hhcmVkX3B0cjxlbGVtZW50X3R5cGUsIF9McD4oKTsKKworCV9fdHJ5CisJICB7CisJICAgIHJldHVybiBfX3NoYXJlZF9wdHI8ZWxlbWVudF90eXBlLCBfTHA+KCp0aGlzKTsKKwkgIH0KKwlfX2NhdGNoKGNvbnN0IGJhZF93ZWFrX3B0ciYpCisJICB7CisJICAgIC8vIFE6IEhvdyBjYW4gd2UgZ2V0IGhlcmU/CisJICAgIC8vIEE6IEFub3RoZXIgdGhyZWFkIG1heSBoYXZlIGludmFsaWRhdGVkIHIgYWZ0ZXIgdGhlCisJICAgIC8vICAgIHVzZV9jb3VudCB0ZXN0IGFib3ZlLgorCSAgICByZXR1cm4gX19zaGFyZWRfcHRyPGVsZW1lbnRfdHlwZSwgX0xwPigpOworCSAgfQorCQorI2Vsc2UKKwkvLyBPcHRpbWl6YXRpb246IGF2b2lkIHRyeS9jYXRjaCBvdmVyaGVhZCB3aGVuIHNpbmdsZSB0aHJlYWRlZC4KKwlyZXR1cm4gZXhwaXJlZCgpID8gX19zaGFyZWRfcHRyPGVsZW1lbnRfdHlwZSwgX0xwPigpCisJICAgICAgICAgICAgICAgICA6IF9fc2hhcmVkX3B0cjxlbGVtZW50X3R5cGUsIF9McD4oKnRoaXMpOworCisjZW5kaWYKKyAgICAgIH0gLy8gWFhYIE1UCisKKyAgICAgIGxvbmcKKyAgICAgIHVzZV9jb3VudCgpIGNvbnN0IC8vIG5ldmVyIHRocm93cworICAgICAgeyByZXR1cm4gX01fcmVmY291bnQuX01fZ2V0X3VzZV9jb3VudCgpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIGV4cGlyZWQoKSBjb25zdCAvLyBuZXZlciB0aHJvd3MKKyAgICAgIHsgcmV0dXJuIF9NX3JlZmNvdW50Ll9NX2dldF91c2VfY291bnQoKSA9PSAwOyB9CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkgLy8gbmV2ZXIgdGhyb3dzCisgICAgICB7IF9fd2Vha19wdHIoKS5zd2FwKCp0aGlzKTsgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKF9fd2Vha19wdHImIF9fcykgLy8gbmV2ZXIgdGhyb3dzCisgICAgICB7CisJc3RkOjpzd2FwKF9NX3B0ciwgX19zLl9NX3B0cik7CisJX01fcmVmY291bnQuX01fc3dhcChfX3MuX01fcmVmY291bnQpOworICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIC8vIFVzZWQgYnkgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpcy4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2Fzc2lnbihfVHAqIF9fcHRyLCBjb25zdCBfX3NoYXJlZF9jb3VudDxfTHA+JiBfX3JlZmNvdW50KQorICAgICAgeworCV9NX3B0ciA9IF9fcHRyOworCV9NX3JlZmNvdW50ID0gX19yZWZjb3VudDsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgYm9vbAorICAgICAgICBfTV9sZXNzKGNvbnN0IF9fd2Vha19wdHI8X1RwMSwgX0xwPiYgX19yaHMpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIF9NX3JlZmNvdW50IDwgX19yaHMuX01fcmVmY291bnQ7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgX0xvY2tfcG9saWN5IF9McDE+IGZyaWVuZCBjbGFzcyBfX3NoYXJlZF9wdHI7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCBfTG9ja19wb2xpY3kgX0xwMT4gZnJpZW5kIGNsYXNzIF9fd2Vha19wdHI7CisgICAgICBmcmllbmQgY2xhc3MgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpczxfVHAsIF9McD47CisgICAgICBmcmllbmQgY2xhc3MgZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXM8X1RwPjsKKworICAgICAgLy8gRnJpZW5kIGluamVjdGVkIGludG8gbmFtZXNwYWNlIGFuZCBmb3VuZCBieSBBREwuCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorICAgICAgICBmcmllbmQgaW5saW5lIGJvb2wKKyAgICAgICAgb3BlcmF0b3I8KGNvbnN0IF9fd2Vha19wdHImIF9fbGhzLCBjb25zdCBfX3dlYWtfcHRyPF9UcDEsIF9McD4mIF9fcmhzKQorICAgICAgICB7IHJldHVybiBfX2xocy5fTV9sZXNzKF9fcmhzKTsgfQorCisgICAgICBfVHAqICAgICAgIAkgX01fcHRyOyAgICAgICAgIC8vIENvbnRhaW5lZCBwb2ludGVyLgorICAgICAgX193ZWFrX2NvdW50PF9McD4gIF9NX3JlZmNvdW50OyAgICAvLyBSZWZlcmVuY2UgY291bnRlci4KKyAgICB9OworCisgIC8vIDIuMi40Ljcgd2Vha19wdHIgc3BlY2lhbGl6ZWQgYWxnb3JpdGhtcy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChfX3dlYWtfcHRyPF9UcCwgX0xwPiYgX19hLCBfX3dlYWtfcHRyPF9UcCwgX0xwPiYgX19iKQorICAgIHsgX19hLnN3YXAoX19iKTsgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGNsYXNzIF9fZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMKKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpcygpIHsgfQorICAgICAgCisgICAgICBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzKGNvbnN0IF9fZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMmKSB7IH0KKyAgICAgIAorICAgICAgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpcyYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzJikKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIH5fX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzKCkgeyB9CisgICAgICAKKyAgICBwdWJsaWM6CisgICAgICBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+CisgICAgICBzaGFyZWRfZnJvbV90aGlzKCkKKyAgICAgIHsgcmV0dXJuIF9fc2hhcmVkX3B0cjxfVHAsIF9McD4odGhpcy0+X01fd2Vha190aGlzKTsgfQorCisgICAgICBfX3NoYXJlZF9wdHI8Y29uc3QgX1RwLCBfTHA+CisgICAgICBzaGFyZWRfZnJvbV90aGlzKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fc2hhcmVkX3B0cjxjb25zdCBfVHAsIF9McD4odGhpcy0+X01fd2Vha190aGlzKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01fd2Vha19hc3NpZ24oX1RwMSogX19wLCBjb25zdCBfX3NoYXJlZF9jb3VudDxfTHA+JiBfX24pIGNvbnN0CisgICAgICAgIHsgX01fd2Vha190aGlzLl9NX2Fzc2lnbihfX3AsIF9fbik7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgZnJpZW5kIHZvaWQKKyAgICAgICAgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpc19oZWxwZXIoY29uc3QgX19zaGFyZWRfY291bnQ8X0xwPiYgX19wbiwKKwkJCQkJIGNvbnN0IF9fZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMqIF9fcGUsCisJCQkJCSBjb25zdCBfVHAxKiBfX3B4KQorICAgICAgICB7CisJICBpZiAoX19wZSAhPSAwKQorCSAgICBfX3BlLT5fTV93ZWFrX2Fzc2lnbihjb25zdF9jYXN0PF9UcDEqPihfX3B4KSwgX19wbik7CisJfQorCisgICAgICBtdXRhYmxlIF9fd2Vha19wdHI8X1RwLCBfTHA+ICBfTV93ZWFrX3RoaXM7CisgICAgfTsKKworCisgIC8vIFRoZSBhY3R1YWwgc2hhcmVkX3B0ciwgd2l0aCBmb3J3YXJkaW5nIGNvbnN0cnVjdG9ycyBhbmQKKyAgLy8gYXNzaWdubWVudCBvcGVyYXRvcnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyBzaGFyZWRfcHRyCisgICAgOiBwdWJsaWMgX19zaGFyZWRfcHRyPF9UcD4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgc2hhcmVkX3B0cigpCisgICAgICA6IF9fc2hhcmVkX3B0cjxfVHA+KCkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIGV4cGxpY2l0CisgICAgICAgIHNoYXJlZF9wdHIoX1RwMSogX19wKQorCTogX19zaGFyZWRfcHRyPF9UcD4oX19wKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX0RlbGV0ZXI+CisgICAgICAgIHNoYXJlZF9wdHIoX1RwMSogX19wLCBfRGVsZXRlciBfX2QpCisJOiBfX3NoYXJlZF9wdHI8X1RwPihfX3AsIF9fZCkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIHNoYXJlZF9wdHIoY29uc3Qgc2hhcmVkX3B0cjxfVHAxPiYgX19yKQorCTogX19zaGFyZWRfcHRyPF9UcD4oX19yKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgZXhwbGljaXQKKyAgICAgICAgc2hhcmVkX3B0cihjb25zdCB3ZWFrX3B0cjxfVHAxPiYgX19yKQorCTogX19zaGFyZWRfcHRyPF9UcD4oX19yKSB7IH0KKworI2lmICFkZWZpbmVkKF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fKSB8fCBfR0xJQkNYWF9ERVBSRUNBVEVECisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorICAgICAgICBleHBsaWNpdAorICAgICAgICBzaGFyZWRfcHRyKHN0ZDo6YXV0b19wdHI8X1RwMT4mIF9fcikKKwk6IF9fc2hhcmVkX3B0cjxfVHA+KF9fcikgeyB9CisjZW5kaWYKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgc2hhcmVkX3B0cihjb25zdCBzaGFyZWRfcHRyPF9UcDE+JiBfX3IsIF9fc3RhdGljX2Nhc3RfdGFnKQorCTogX19zaGFyZWRfcHRyPF9UcD4oX19yLCBfX3N0YXRpY19jYXN0X3RhZygpKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgc2hhcmVkX3B0cihjb25zdCBzaGFyZWRfcHRyPF9UcDE+JiBfX3IsIF9fY29uc3RfY2FzdF90YWcpCisJOiBfX3NoYXJlZF9wdHI8X1RwPihfX3IsIF9fY29uc3RfY2FzdF90YWcoKSkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIHNoYXJlZF9wdHIoY29uc3Qgc2hhcmVkX3B0cjxfVHAxPiYgX19yLCBfX2R5bmFtaWNfY2FzdF90YWcpCisJOiBfX3NoYXJlZF9wdHI8X1RwPihfX3IsIF9fZHluYW1pY19jYXN0X3RhZygpKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgc2hhcmVkX3B0ciYKKyAgICAgICAgb3BlcmF0b3I9KGNvbnN0IHNoYXJlZF9wdHI8X1RwMT4mIF9fcikgLy8gbmV2ZXIgdGhyb3dzCisgICAgICAgIHsKKwkgIHRoaXMtPl9fc2hhcmVkX3B0cjxfVHA+OjpvcGVyYXRvcj0oX19yKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyNpZiAhZGVmaW5lZChfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXykgfHwgX0dMSUJDWFhfREVQUkVDQVRFRAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgc2hhcmVkX3B0ciYKKyAgICAgICAgb3BlcmF0b3I9KHN0ZDo6YXV0b19wdHI8X1RwMT4mIF9fcikKKyAgICAgICAgeworCSAgdGhpcy0+X19zaGFyZWRfcHRyPF9UcD46Om9wZXJhdG9yPShfX3IpOworCSAgcmV0dXJuICp0aGlzOworCX0KKyNlbmRpZgorICAgIH07CisKKyAgLy8gMi4yLjMuOCBzaGFyZWRfcHRyIHNwZWNpYWxpemVkIGFsZ29yaXRobXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoX19zaGFyZWRfcHRyPF9UcD4mIF9fYSwgX19zaGFyZWRfcHRyPF9UcD4mIF9fYikKKyAgICB7IF9fYS5zd2FwKF9fYik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDE+CisgICAgaW5saW5lIHNoYXJlZF9wdHI8X1RwPgorICAgIHN0YXRpY19wb2ludGVyX2Nhc3QoY29uc3Qgc2hhcmVkX3B0cjxfVHAxPiYgX19yKQorICAgIHsgcmV0dXJuIHNoYXJlZF9wdHI8X1RwPihfX3IsIF9fc3RhdGljX2Nhc3RfdGFnKCkpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxPgorICAgIGlubGluZSBzaGFyZWRfcHRyPF9UcD4KKyAgICBjb25zdF9wb2ludGVyX2Nhc3QoY29uc3Qgc2hhcmVkX3B0cjxfVHAxPiYgX19yKQorICAgIHsgcmV0dXJuIHNoYXJlZF9wdHI8X1RwPihfX3IsIF9fY29uc3RfY2FzdF90YWcoKSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDE+CisgICAgaW5saW5lIHNoYXJlZF9wdHI8X1RwPgorICAgIGR5bmFtaWNfcG9pbnRlcl9jYXN0KGNvbnN0IHNoYXJlZF9wdHI8X1RwMT4mIF9fcikKKyAgICB7IHJldHVybiBzaGFyZWRfcHRyPF9UcD4oX19yLCBfX2R5bmFtaWNfY2FzdF90YWcoKSk7IH0KKworCisgIC8vIFRoZSBhY3R1YWwgd2Vha19wdHIsIHdpdGggZm9yd2FyZGluZyBjb25zdHJ1Y3RvcnMgYW5kCisgIC8vIGFzc2lnbm1lbnQgb3BlcmF0b3JzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3Mgd2Vha19wdHIKKyAgICA6IHB1YmxpYyBfX3dlYWtfcHRyPF9UcD4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgd2Vha19wdHIoKQorICAgICAgOiBfX3dlYWtfcHRyPF9UcD4oKSB7IH0KKyAgICAgIAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgd2Vha19wdHIoY29uc3Qgd2Vha19wdHI8X1RwMT4mIF9fcikKKwk6IF9fd2Vha19wdHI8X1RwPihfX3IpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorICAgICAgICB3ZWFrX3B0cihjb25zdCBzaGFyZWRfcHRyPF9UcDE+JiBfX3IpCisJOiBfX3dlYWtfcHRyPF9UcD4oX19yKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgd2Vha19wdHImCisgICAgICAgIG9wZXJhdG9yPShjb25zdCB3ZWFrX3B0cjxfVHAxPiYgX19yKSAvLyBuZXZlciB0aHJvd3MKKyAgICAgICAgeworCSAgdGhpcy0+X193ZWFrX3B0cjxfVHA+OjpvcGVyYXRvcj0oX19yKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIHdlYWtfcHRyJgorICAgICAgICBvcGVyYXRvcj0oY29uc3Qgc2hhcmVkX3B0cjxfVHAxPiYgX19yKSAvLyBuZXZlciB0aHJvd3MKKyAgICAgICAgeworCSAgdGhpcy0+X193ZWFrX3B0cjxfVHA+OjpvcGVyYXRvcj0oX19yKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIHNoYXJlZF9wdHI8X1RwPgorICAgICAgbG9jaygpIGNvbnN0IC8vIG5ldmVyIHRocm93cworICAgICAgeworI2lmZGVmIF9fR1RIUkVBRFMKKwlpZiAodGhpcy0+ZXhwaXJlZCgpKQorCSAgcmV0dXJuIHNoYXJlZF9wdHI8X1RwPigpOworCisJX190cnkKKwkgIHsKKwkgICAgcmV0dXJuIHNoYXJlZF9wdHI8X1RwPigqdGhpcyk7CisJICB9CisJX19jYXRjaChjb25zdCBiYWRfd2Vha19wdHImKQorCSAgeworCSAgICByZXR1cm4gc2hhcmVkX3B0cjxfVHA+KCk7CisJICB9CisjZWxzZQorCXJldHVybiB0aGlzLT5leHBpcmVkKCkgPyBzaGFyZWRfcHRyPF9UcD4oKQorCSAgICAgICAgICAgICAgICAgICAgICAgOiBzaGFyZWRfcHRyPF9UcD4oKnRoaXMpOworI2VuZGlmCisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMKKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMoKSB7IH0KKyAgICAgIAorICAgICAgZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMoY29uc3QgZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMmKSB7IH0KKworICAgICAgZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMmCisgICAgICBvcGVyYXRvcj0oY29uc3QgZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMmKQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgfmVuYWJsZV9zaGFyZWRfZnJvbV90aGlzKCkgeyB9CisKKyAgICBwdWJsaWM6CisgICAgICBzaGFyZWRfcHRyPF9UcD4KKyAgICAgIHNoYXJlZF9mcm9tX3RoaXMoKQorICAgICAgeyByZXR1cm4gc2hhcmVkX3B0cjxfVHA+KHRoaXMtPl9NX3dlYWtfdGhpcyk7IH0KKworICAgICAgc2hhcmVkX3B0cjxjb25zdCBfVHA+CisgICAgICBzaGFyZWRfZnJvbV90aGlzKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHNoYXJlZF9wdHI8Y29uc3QgX1RwPih0aGlzLT5fTV93ZWFrX3RoaXMpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV93ZWFrX2Fzc2lnbihfVHAxKiBfX3AsIGNvbnN0IF9fc2hhcmVkX2NvdW50PD4mIF9fbikgY29uc3QKKyAgICAgICAgeyBfTV93ZWFrX3RoaXMuX01fYXNzaWduKF9fcCwgX19uKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorICAgICAgICBmcmllbmQgdm9pZAorICAgICAgICBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzX2hlbHBlcihjb25zdCBfX3NoYXJlZF9jb3VudDw+JiBfX3BuLAorCQkJCQkgY29uc3QgZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMqIF9fcGUsCisJCQkJCSBjb25zdCBfVHAxKiBfX3B4KQorICAgICAgICB7CisJICBpZiAoX19wZSAhPSAwKQorCSAgICBfX3BlLT5fTV93ZWFrX2Fzc2lnbihjb25zdF9jYXN0PF9UcDEqPihfX3B4KSwgX19wbik7CisJfQorCisgICAgICBtdXRhYmxlIHdlYWtfcHRyPF9UcD4gIF9NX3dlYWtfdGhpczsKKyAgICB9OworfQorfQorCisjZW5kaWYgLy8gX1RSMV9TSEFSRURfUFRSX0gKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3NwZWNpYWxfZnVuY3Rpb25fdXRpbC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvc3BlY2lhbF9mdW5jdGlvbl91dGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI2OTliZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3NwZWNpYWxfZnVuY3Rpb25fdXRpbC5oCkBAIC0wLDAgKzEsMTQ0IEBACisvLyBTcGVjaWFsIGZ1bmN0aW9ucyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvc3BlY2lhbF9mdW5jdGlvbl91dGlsLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODIgVFIxOiA1LjIgIFNwZWNpYWwgZnVuY3Rpb25zCisvLworCisvLyBXcml0dGVuIGJ5IEVkd2FyZCBTbWl0aC1Sb3dsYW5kIGJhc2VkIG9uIG51bWVyb3VzIG1hdGhlbWF0aWNzIGJvb2tzLgorCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9TUEVDSUFMX0ZVTkNUSU9OX1VUSUxfSAorI2RlZmluZSBfR0xJQkNYWF9UUjFfU1BFQ0lBTF9GVU5DVElPTl9VVElMX0ggMQorCituYW1lc3BhY2Ugc3RkCit7CituYW1lc3BhY2UgdHIxCit7CisKKyAgbmFtZXNwYWNlIF9fZGV0YWlsCisgIHsKKworICAgIC8vLyBBIGNsYXNzIHRvIGVuY2Fwc3VsYXRlIHR5cGUgZGVwZW5kZW50IGZsb2F0aW5nIHBvaW50CisgICAgLy8vIGNvbnN0YW50cy4gIE5vdCBldmVyeXRoaW5nIHdpbGwgYmUgYWJsZSB0byBiZSBleHByZXNzZWQgYXMKKyAgICAvLy8gdHlwZSBsb2dpYy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fZmxvYXRpbmdfcG9pbnRfY29uc3RhbnQKKyAgICB7CisgICAgICBzdGF0aWMgY29uc3QgX1RwIF9fdmFsdWU7CisgICAgfTsKKworCisgICAgLy8vIEEgc3RydWN0dXJlIGZvciBudW1lcmljIGNvbnN0YW50cy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBzdHJ1Y3QgX19udW1lcmljX2NvbnN0YW50cworICAgICAgeworICAgICAgICAvLy8gIENvbnN0YW50IEBmJCBccGkgQGYkLgorICAgICAgICBzdGF0aWMgX1RwIF9fcGkoKSB0aHJvdygpCisgICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzk1MDI5TCk7IH0KKyAgICAgICAgLy8vICBDb25zdGFudCBAZiQgXHBpIC8gMiBAZiQuCisgICAgICAgIHN0YXRpYyBfVHAgX19waV8yKCkgdGhyb3coKQorICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDEuNTcwNzk2MzI2Nzk0ODk2NjE5MjMxMzIxNjkxNjM5NzUxNEwpOyB9CisgICAgICAgIC8vLyAgQ29uc3RhbnQgQGYkIFxwaSAvIDMgQGYkLgorICAgICAgICBzdGF0aWMgX1RwIF9fcGlfMygpIHRocm93KCkKKyAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigxLjA0NzE5NzU1MTE5NjU5Nzc0NjE1NDIxNDQ2MTA5MzE2NzZMKTsgfQorICAgICAgICAvLy8gIENvbnN0YW50IEBmJCBccGkgLyA0IEBmJC4KKyAgICAgICAgc3RhdGljIF9UcCBfX3BpXzQoKSB0aHJvdygpCisgICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMC43ODUzOTgxNjMzOTc0NDgzMDk2MTU2NjA4NDU4MTk4NzU3TCk7IH0KKyAgICAgICAgLy8vICBDb25zdGFudCBAZiQgMSAvIFxwaSBAZiQuCisgICAgICAgIHN0YXRpYyBfVHAgX18xX3BpKCkgdGhyb3coKQorICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDAuMzE4MzA5ODg2MTgzNzkwNjcxNTM3NzY3NTI2NzQ1MDI4N0wpOyB9CisgICAgICAgIC8vLyAgQ29uc3RhbnQgQGYkIDIgLyBcc3FydChccGkpIEBmJC4KKyAgICAgICAgc3RhdGljIF9UcCBfXzJfc3FydHBpKCkgdGhyb3coKQorICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDEuMTI4Mzc5MTY3MDk1NTEyNTczODk2MTU4OTAzMTIxNTQ1MkwpOyB9CisgICAgICAgIC8vLyAgQ29uc3RhbnQgQGYkIFxzcXJ0KDIpIEBmJC4KKyAgICAgICAgc3RhdGljIF9UcCBfX3NxcnQyKCkgdGhyb3coKQorICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDEuNDE0MjEzNTYyMzczMDk1MDQ4ODAxNjg4NzI0MjA5Njk4MUwpOyB9CisgICAgICAgIC8vLyAgQ29uc3RhbnQgQGYkIFxzcXJ0KDMpIEBmJC4KKyAgICAgICAgc3RhdGljIF9UcCBfX3NxcnQzKCkgdGhyb3coKQorICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDEuNzMyMDUwODA3NTY4ODc3MjkzNTI3NDQ2MzQxNTA1ODcyM0wpOyB9CisgICAgICAgIC8vLyAgQ29uc3RhbnQgQGYkIFxzcXJ0KFxwaS8yKSBAZiQuCisgICAgICAgIHN0YXRpYyBfVHAgX19zcXJ0cGlvMigpIHRocm93KCkKKyAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigxLjI1MzMxNDEzNzMxNTUwMDI1MTIwNzg4MjY0MjQwNTUyMjZMKTsgfQorICAgICAgICAvLy8gIENvbnN0YW50IEBmJCAxIC8gc3FydCgyKSBAZiQuCisgICAgICAgIHN0YXRpYyBfVHAgX19zcXJ0MV8yKCkgdGhyb3coKQorICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDAuNzA3MTA2NzgxMTg2NTQ3NTI0NDAwODQ0MzYyMTA0ODQ5MEwpOyB9CisgICAgICAgIC8vLyAgQ29uc3RhbnQgQGYkIFxsb2coXHBpKSBAZiQuCisgICAgICAgIHN0YXRpYyBfVHAgX19sbnBpKCkgdGhyb3coKQorICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDEuMTQ0NzI5ODg1ODQ5NDAwMTc0MTQzNDI3MzUxMzUzMDU4N0wpOyB9CisgICAgICAgIC8vLyAgQ29uc3RhbnQgRXVsZXIncyBjb25zdGFudCBAZiQgXGdhbW1hX0UgQGYkLgorICAgICAgICBzdGF0aWMgX1RwIF9fZ2FtbWFfZSgpIHRocm93KCkKKyAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwLjU3NzIxNTY2NDkwMTUzMjg2MDYwNjUxMjA5MDA4MjQwMjRMKTsgfQorICAgICAgICAvLy8gIENvbnN0YW50IEV1bGVyLU1hc2NoZXJvbmkgQGYkIGUgQGYkCisgICAgICAgIHN0YXRpYyBfVHAgX19ldWxlcigpIHRocm93KCkKKyAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigyLjcxODI4MTgyODQ1OTA0NTIzNTM2MDI4NzQ3MTM1MjY2MjVMKTsgfQorICAgICAgfTsKKworCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIICYmICFfR0xJQkNYWF9VU0VfQzk5X0ZQX01BQ1JPU19EWU5BTUlDCisKKyAgICAvLy8gVGhpcyBpcyBhIHdyYXBwZXIgZm9yIHRoZSBpc25hbiBmdW5jdGlvbi4gT3RoZXJ3aXNlLCBmb3IgTmFOLAorICAgIC8vLyBhbGwgY29tcGFyaXNvbnMgcmVzdWx0IGluIGZhbHNlLiBJZi93aGVuIHdlIGJ1aWxkIGEgc3RkOjppc25hbgorICAgIC8vLyBvdXQgb2YgaW50cmluc2ljcywgdGhpcyB3aWxsIGRpc2FwcGVhciBjb21wbGV0ZWx5IGluIGZhdm9yIG9mCisgICAgLy8vIHN0ZDo6aXNuYW4uCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sIF9faXNuYW4oY29uc3QgX1RwIF9feCkKKyAgICB7CisgICAgICByZXR1cm4gc3RkOjppc25hbihfX3gpOworICAgIH0KKworI2Vsc2UKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgYm9vbCBfX2lzbmFuKGNvbnN0IF9UcCBfX3gpCisgICAgeworICAgICAgcmV0dXJuIF9fYnVpbHRpbl9pc25hbihfX3gpOworICAgIH0KKworICAgIHRlbXBsYXRlPD4KKyAgICBpbmxpbmUgYm9vbCBfX2lzbmFuPGZsb2F0Pihjb25zdCBmbG9hdCBfX3gpCisgICAgeworICAgICAgcmV0dXJuIF9fYnVpbHRpbl9pc25hbmYoX194KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgaW5saW5lIGJvb2wgX19pc25hbjxsb25nIGRvdWJsZT4oY29uc3QgbG9uZyBkb3VibGUgX194KQorICAgIHsKKyAgICAgIHJldHVybiBfX2J1aWx0aW5faXNuYW5sKF9feCk7CisgICAgfQorCisjZW5kaWYKKworICB9IC8vIG5hbWVzcGFjZSBfX2RldGFpbAorCit9Cit9CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfU1BFQ0lBTF9GVU5DVElPTl9VVElMX0gKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvc3RkYXJnLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9zdGRhcmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTE3M2U4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvc3RkYXJnLmgKQEAgLTAsMCArMSwzNCBAQAorLy8gVFIxIHN0ZGFyZy5oIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL3N0ZGFyZy5oCisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX1RSMV9TVERBUkdfSAorI2RlZmluZSBfVFIxX1NUREFSR19IIDEKKworI2luY2x1ZGUgPHRyMS9jc3RkYXJnPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3N0ZGJvb2wuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3N0ZGJvb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODYxZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvc3RkYm9vbC5oCkBAIC0wLDAgKzEsMzQgQEAKKy8vIFRSMSBzdGRib29sLmggLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvc3RkYm9vbC5oCisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX1RSMV9TVERCT09MX0gKKyNkZWZpbmUgX1RSMV9TVERCT09MX0ggMQorCisjaW5jbHVkZSA8dHIxL2NzdGRib29sPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3N0ZGludC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvc3RkaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODExM2ZhNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3N0ZGludC5oCkBAIC0wLDAgKzEsMzQgQEAKKy8vIFRSMSBzdGRpbnQuaCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9zdGRpbnQuaAorICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9UUjFfU1RESU5UX0gKKyNkZWZpbmUgX1RSMV9TVERJTlRfSCAxCisKKyNpbmNsdWRlIDx0cjEvY3N0ZGludD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS9zdGRpby5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvc3RkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWVkZjgzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvc3RkaW8uaApAQCAtMCwwICsxLDM0IEBACisvLyBUUjEgc3RkaW8uaCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9zdGRpby5oCisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX1RSMV9TVERJT19ICisjZGVmaW5lIF9UUjFfU1RESU9fSCAxCisKKyNpbmNsdWRlIDx0cjEvY3N0ZGlvPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3N0ZGxpYi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvc3RkbGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU1N2FlYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3N0ZGxpYi5oCkBAIC0wLDAgKzEsNTIgQEAKKy8vIFRSMSBzdGRsaWIuaCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9zdGRsaWIuaAorICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9TVERMSUJfSAorI2RlZmluZSBfR0xJQkNYWF9UUjFfU1RETElCX0ggMQorCisjaW5jbHVkZSA8dHIxL2NzdGRsaWI+CisKKyNpZiBfR0xJQkNYWF9IT1NURUQKKworI2lmIF9HTElCQ1hYX1VTRV9DOTkKKwordXNpbmcgc3RkOjp0cjE6OmF0b2xsOwordXNpbmcgc3RkOjp0cjE6OnN0cnRvbGw7Cit1c2luZyBzdGQ6OnRyMTo6c3RydG91bGw7CisKK3VzaW5nIHN0ZDo6dHIxOjphYnM7CisjaWYgIV9HTElCQ1hYX1VTRV9DOTlfTE9OR19MT05HX0RZTkFNSUMKK3VzaW5nIHN0ZDo6dHIxOjpkaXY7CisjZW5kaWYKKworI2VuZGlmCisKKyNlbmRpZgorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX1NURExJQl9ICisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3RnbWF0aC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvdGdtYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgwNzAzMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3RnbWF0aC5oCkBAIC0wLDAgKzEsMzQgQEAKKy8vIFRSMSB0Z21hdGguaCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS90Z21hdGguaAorICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9UR01BVEhfSAorI2RlZmluZSBfR0xJQkNYWF9UUjFfVEdNQVRIX0ggMQorCisjaW5jbHVkZSA8dHIxL2N0Z21hdGg+CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfVEdNQVRIX0gKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3R1cGxlIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvdHVwbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY5ZjIyMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3R1cGxlCkBAIC0wLDAgKzEsNDIyIEBACisvLyBjbGFzcyB0ZW1wbGF0ZSB0dXBsZSAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS90dXBsZQorKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuCisqLworCisvLyBDaHJpcyBKZWZmZXJzb24gPGNocmlzQGJ1YmJsZXNjb3BlLm5ldD4KKy8vIFZhcmlhZGljIFRlbXBsYXRlcyBzdXBwb3J0IGJ5IERvdWdsYXMgR3JlZ29yIDxkb3VnLmdyZWdvckBnbWFpbC5jb20+CisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX1RVUExFCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9UVVBMRSAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPHV0aWxpdHk+CisKK25hbWVzcGFjZSBzdGQKK3sKK25hbWVzcGFjZSB0cjEKK3sKKyAgLy8gQWRkcyBhIGNvbnN0IHJlZmVyZW5jZSB0byBhIG5vbi1yZWZlcmVuY2UgdHlwZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2FkZF9jX3JlZgorICAgIHsgdHlwZWRlZiBjb25zdCBfVHAmIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2FkZF9jX3JlZjxfVHAmPgorICAgIHsgdHlwZWRlZiBfVHAmIHR5cGU7IH07CisKKyAgLy8gQWRkcyBhIHJlZmVyZW5jZSB0byBhIG5vbi1yZWZlcmVuY2UgdHlwZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2FkZF9yZWYKKyAgICB7IHR5cGVkZWYgX1RwJiB0eXBlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19hZGRfcmVmPF9UcCY+CisgICAgeyB0eXBlZGVmIF9UcCYgdHlwZTsgfTsKKworICAvKioKKyAgICogQ29udGFpbnMgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQGMgdHVwbGUgdGVtcGxhdGUsIHN0b3JlZAorICAgKiBhcyBhIHJlY3Vyc2l2ZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkgZnJvbSB0aGUgZmlyc3QgZWxlbWVudCAobW9zdAorICAgKiBkZXJpdmVkIGNsYXNzKSB0byB0aGUgbGFzdCAobGVhc3QgZGVyaXZlZCBjbGFzcykuIFRoZSBAYyBJZHgKKyAgICogcGFyYW1ldGVyIGdpdmVzIHRoZSAwLWJhc2VkIGluZGV4IG9mIHRoZSBlbGVtZW50IHN0b3JlZCBhdCB0aGlzCisgICAqIHBvaW50IGluIHRoZSBoaWVyYXJjaHk7IHdlIHVzZSBpdCB0byBpbXBsZW1lbnQgYSBjb25zdGFudC10aW1lCisgICAqIGdldCgpIG9wZXJhdGlvbi4KKyAgICovCisgIHRlbXBsYXRlPGludCBfSWR4LCB0eXBlbmFtZS4uLiBfRWxlbWVudHM+CisgICAgc3RydWN0IF9UdXBsZV9pbXBsOyAKKworICAvKioKKyAgICogWmVyby1lbGVtZW50IHR1cGxlIGltcGxlbWVudGF0aW9uLiBUaGlzIGlzIHRoZSBiYXNpcyBjYXNlIGZvciB0aGUgCisgICAqIGluaGVyaXRhbmNlIHJlY3Vyc2lvbi4KKyAgICovCisgIHRlbXBsYXRlPGludCBfSWR4PgorICAgIHN0cnVjdCBfVHVwbGVfaW1wbDxfSWR4PiB7IH07CisKKyAgLyoqCisgICAqIFJlY3Vyc2l2ZSB0dXBsZSBpbXBsZW1lbnRhdGlvbi4gSGVyZSB3ZSBzdG9yZSB0aGUgQGMgSGVhZCBlbGVtZW50CisgICAqIGFuZCBkZXJpdmUgZnJvbSBhIEBjIFR1cGxlX2ltcGwgY29udGFpbmluZyB0aGUgcmVtYWluaW5nIGVsZW1lbnRzCisgICAqICh3aGljaCBjb250YWlucyB0aGUgQGMgVGFpbCkuCisgICAqLworICB0ZW1wbGF0ZTxpbnQgX0lkeCwgdHlwZW5hbWUgX0hlYWQsIHR5cGVuYW1lLi4uIF9UYWlsPgorICAgIHN0cnVjdCBfVHVwbGVfaW1wbDxfSWR4LCBfSGVhZCwgX1RhaWwuLi4+CisgICAgOiBwdWJsaWMgX1R1cGxlX2ltcGw8X0lkeCArIDEsIF9UYWlsLi4uPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1R1cGxlX2ltcGw8X0lkeCArIDEsIF9UYWlsLi4uPiBfSW5oZXJpdGVkOworICAgICAgCisgICAgICBfSGVhZCBfTV9oZWFkOworICAgICAgCisgICAgICBfSW5oZXJpdGVkJiAgICAgICBfTV90YWlsKCkgICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKyAgICAgIGNvbnN0IF9Jbmhlcml0ZWQmIF9NX3RhaWwoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorICAgICAgCisgICAgICBfVHVwbGVfaW1wbCgpIDogX0luaGVyaXRlZCgpLCBfTV9oZWFkKCkgeyB9CisgICAgICAKKyAgICAgIGV4cGxpY2l0IAorICAgICAgX1R1cGxlX2ltcGwodHlwZW5hbWUgX19hZGRfY19yZWY8X0hlYWQ+Ojp0eXBlIF9faGVhZCwKKwkJICB0eXBlbmFtZSBfX2FkZF9jX3JlZjxfVGFpbD46OnR5cGUuLi4gX190YWlsKQorICAgICAgOiBfSW5oZXJpdGVkKF9fdGFpbC4uLiksIF9NX2hlYWQoX19oZWFkKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1VFbGVtZW50cz4KKyAgICAgIF9UdXBsZV9pbXBsKGNvbnN0IF9UdXBsZV9pbXBsPF9JZHgsIF9VRWxlbWVudHMuLi4+JiBfX2luKQorICAgICAgOiBfSW5oZXJpdGVkKF9faW4uX01fdGFpbCgpKSwgX01faGVhZChfX2luLl9NX2hlYWQpIHsgfQorCisgICAgICBfVHVwbGVfaW1wbChjb25zdCBfVHVwbGVfaW1wbCYgX19pbikKKyAgICAgIDogX0luaGVyaXRlZChfX2luLl9NX3RhaWwoKSksIF9NX2hlYWQoX19pbi5fTV9oZWFkKSB7IH0KKyAgICAgCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfVUVsZW1lbnRzPgorICAgICAgICBfVHVwbGVfaW1wbCYKKyAgICAgICAgb3BlcmF0b3I9KGNvbnN0IF9UdXBsZV9pbXBsPF9JZHgsIF9VRWxlbWVudHMuLi4+JiBfX2luKQorICAgICAgICB7CisJICBfTV9oZWFkID0gX19pbi5fTV9oZWFkOworCSAgX01fdGFpbCgpID0gX19pbi5fTV90YWlsKCk7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICBfVHVwbGVfaW1wbCYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfVHVwbGVfaW1wbCYgX19pbikKKyAgICAgIHsKKwlfTV9oZWFkID0gX19pbi5fTV9oZWFkOworCV9NX3RhaWwoKSA9IF9faW4uX01fdGFpbCgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9FbGVtZW50cz4gCisgICAgY2xhc3MgdHVwbGUgOiBwdWJsaWMgX1R1cGxlX2ltcGw8MCwgX0VsZW1lbnRzLi4uPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1R1cGxlX2ltcGw8MCwgX0VsZW1lbnRzLi4uPiBfSW5oZXJpdGVkOworCisgICAgcHVibGljOgorICAgICAgdHVwbGUoKSA6IF9Jbmhlcml0ZWQoKSB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIHR1cGxlKHR5cGVuYW1lIF9fYWRkX2NfcmVmPF9FbGVtZW50cz46OnR5cGUuLi4gX19lbGVtZW50cykKKyAgICAgIDogX0luaGVyaXRlZChfX2VsZW1lbnRzLi4uKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1VFbGVtZW50cz4KKyAgICAgICAgdHVwbGUoY29uc3QgdHVwbGU8X1VFbGVtZW50cy4uLj4mIF9faW4pCisJOiBfSW5oZXJpdGVkKF9faW4pIHsgfQorCisgICAgICB0dXBsZShjb25zdCB0dXBsZSYgX19pbikKKyAgICAgIDogX0luaGVyaXRlZChfX2luKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1VFbGVtZW50cz4KKyAgICAgICAgdHVwbGUmCisgICAgICAgIG9wZXJhdG9yPShjb25zdCB0dXBsZTxfVUVsZW1lbnRzLi4uPiYgX19pbikKKyAgICAgICAgeworCSAgc3RhdGljX2Nhc3Q8X0luaGVyaXRlZCY+KCp0aGlzKSA9IF9faW47CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICB0dXBsZSYKKyAgICAgIG9wZXJhdG9yPShjb25zdCB0dXBsZSYgX19pbikKKyAgICAgIHsKKwlzdGF0aWNfY2FzdDxfSW5oZXJpdGVkJj4oKnRoaXMpID0gX19pbjsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTw+IGNsYXNzIHR1cGxlPD4geyB9OworCisgIC8vIDItZWxlbWVudCB0dXBsZSwgd2l0aCBjb25zdHJ1Y3Rpb24gYW5kIGFzc2lnbm1lbnQgZnJvbSBhIHBhaXIuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyPgorICAgIGNsYXNzIHR1cGxlPF9UMSwgX1QyPiA6IHB1YmxpYyBfVHVwbGVfaW1wbDwwLCBfVDEsIF9UMj4KKyAgICB7CisgICAgICB0eXBlZGVmIF9UdXBsZV9pbXBsPDAsIF9UMSwgX1QyPiBfSW5oZXJpdGVkOworCisgICAgcHVibGljOgorICAgICAgdHVwbGUoKSA6IF9Jbmhlcml0ZWQoKSB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIHR1cGxlKHR5cGVuYW1lIF9fYWRkX2NfcmVmPF9UMT46OnR5cGUgX19hMSwKKwkgICAgdHlwZW5hbWUgX19hZGRfY19yZWY8X1QyPjo6dHlwZSBfX2EyKQorICAgICAgOiBfSW5oZXJpdGVkKF9fYTEsIF9fYTIpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVTEsIHR5cGVuYW1lIF9VMj4KKyAgICAgICAgdHVwbGUoY29uc3QgdHVwbGU8X1UxLCBfVTI+JiBfX2luKQorCTogX0luaGVyaXRlZChfX2luKSB7IH0KKworICAgICAgdHVwbGUoY29uc3QgdHVwbGUmIF9faW4pCisgICAgICA6IF9Jbmhlcml0ZWQoX19pbikgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VMSwgdHlwZW5hbWUgX1UyPgorICAgICAgICB0dXBsZShjb25zdCBwYWlyPF9VMSwgX1UyPiYgX19pbikKKwk6IF9Jbmhlcml0ZWQoX1R1cGxlX2ltcGw8MCwgCisJCSAgICAgdHlwZW5hbWUgX19hZGRfY19yZWY8X1UxPjo6dHlwZSwKKwkJICAgICB0eXBlbmFtZSBfX2FkZF9jX3JlZjxfVTI+Ojp0eXBlPihfX2luLmZpcnN0LCAKKwkJCQkJCSAgICAgIF9faW4uc2Vjb25kKSkKKyAgICAgICAgeyB9CisgIAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1UxLCB0eXBlbmFtZSBfVTI+CisgICAgICAgIHR1cGxlJgorICAgICAgICBvcGVyYXRvcj0oY29uc3QgdHVwbGU8X1UxLCBfVTI+JiBfX2luKQorICAgICAgICB7CisJICBzdGF0aWNfY2FzdDxfSW5oZXJpdGVkJj4oKnRoaXMpID0gX19pbjsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIHR1cGxlJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHR1cGxlJiBfX2luKQorICAgICAgeworCXN0YXRpY19jYXN0PF9Jbmhlcml0ZWQmPigqdGhpcykgPSBfX2luOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1UxLCB0eXBlbmFtZSBfVTI+CisgICAgICAgIHR1cGxlJgorICAgICAgICBvcGVyYXRvcj0oY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9faW4pCisgICAgICAgIHsKKwkgIHRoaXMtPl9NX2hlYWQgPSBfX2luLmZpcnN0OworCSAgdGhpcy0+X01fdGFpbCgpLl9NX2hlYWQgPSBfX2luLnNlY29uZDsKKwkgIHJldHVybiAqdGhpczsKKwl9CisgICAgfTsKKworICAKKyAgLy8vIEdpdmVzIHRoZSB0eXBlIG9mIHRoZSBpdGggZWxlbWVudCBvZiBhIGdpdmVuIHR1cGxlIHR5cGUuCisgIHRlbXBsYXRlPGludCBfX2ksIHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgdHVwbGVfZWxlbWVudDsKKworICAvKioKKyAgICogUmVjdXJzaXZlIGNhc2UgZm9yIHR1cGxlX2VsZW1lbnQ6IHN0cmlwIG9mZiB0aGUgZmlyc3QgZWxlbWVudCBpbgorICAgKiB0aGUgdHVwbGUgYW5kIHJldHJpZXZlIHRoZSAoaS0xKXRoIGVsZW1lbnQgb2YgdGhlIHJlbWFpbmluZyB0dXBsZS4KKyAgICovCisgIHRlbXBsYXRlPGludCBfX2ksIHR5cGVuYW1lIF9IZWFkLCB0eXBlbmFtZS4uLiBfVGFpbD4KKyAgICBzdHJ1Y3QgdHVwbGVfZWxlbWVudDxfX2ksIHR1cGxlPF9IZWFkLCBfVGFpbC4uLj4gPgorICAgIDogdHVwbGVfZWxlbWVudDxfX2kgLSAxLCB0dXBsZTxfVGFpbC4uLj4gPiB7IH07CisKKyAgLyoqCisgICAqIEJhc2lzIGNhc2UgZm9yIHR1cGxlX2VsZW1lbnQ6IFRoZSBmaXJzdCBlbGVtZW50IGlzIHRoZSBvbmUgd2UncmUgc2Vla2luZy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLCB0eXBlbmFtZS4uLiBfVGFpbD4KKyAgICBzdHJ1Y3QgdHVwbGVfZWxlbWVudDwwLCB0dXBsZTxfSGVhZCwgX1RhaWwuLi4+ID4KKyAgICB7CisgICAgICB0eXBlZGVmIF9IZWFkIHR5cGU7CisgICAgfTsKKworICAvLy8gRmluZHMgdGhlIHNpemUgb2YgYSBnaXZlbiB0dXBsZSB0eXBlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IHR1cGxlX3NpemU7CisKKyAgLy8vIGNsYXNzIHR1cGxlX3NpemUKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0VsZW1lbnRzPgorICAgIHN0cnVjdCB0dXBsZV9zaXplPHR1cGxlPF9FbGVtZW50cy4uLj4gPgorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgdmFsdWUgPSBzaXplb2YuLi4oX0VsZW1lbnRzKTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9FbGVtZW50cz4KKyAgICBjb25zdCBpbnQgdHVwbGVfc2l6ZTx0dXBsZTxfRWxlbWVudHMuLi4+ID46OnZhbHVlOworCisgIHRlbXBsYXRlPGludCBfX2ksIHR5cGVuYW1lIF9IZWFkLCB0eXBlbmFtZS4uLiBfVGFpbD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19hZGRfcmVmPF9IZWFkPjo6dHlwZQorICAgIF9fZ2V0X2hlbHBlcihfVHVwbGVfaW1wbDxfX2ksIF9IZWFkLCBfVGFpbC4uLj4mIF9fdCkKKyAgICB7CisgICAgICByZXR1cm4gX190Ll9NX2hlYWQ7CisgICAgfQorCisgIHRlbXBsYXRlPGludCBfX2ksIHR5cGVuYW1lIF9IZWFkLCB0eXBlbmFtZS4uLiBfVGFpbD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19hZGRfY19yZWY8X0hlYWQ+Ojp0eXBlCisgICAgX19nZXRfaGVscGVyKGNvbnN0IF9UdXBsZV9pbXBsPF9faSwgX0hlYWQsIF9UYWlsLi4uPiYgX190KQorICAgIHsKKyAgICAgIHJldHVybiBfX3QuX01faGVhZDsKKyAgICB9CisKKyAgLy8gUmV0dXJuIGEgcmVmZXJlbmNlIChjb25zdCByZWZlcmVuY2UpIHRvIHRoZSBpdGggZWxlbWVudCBvZiBhIHR1cGxlLgorICAvLyBBbnkgY29uc3Qgb3Igbm9uLWNvbnN0IHJlZiBlbGVtZW50cyBhcmUgcmV0dXJuZWQgd2l0aCB0aGVpciBvcmlnaW5hbCB0eXBlLgorICB0ZW1wbGF0ZTxpbnQgX19pLCB0eXBlbmFtZS4uLiBfRWxlbWVudHM+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fYWRkX3JlZjwKKyAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSB0dXBsZV9lbGVtZW50PF9faSwgdHVwbGU8X0VsZW1lbnRzLi4uPiA+Ojp0eXBlCisgICAgICAgICAgICAgICAgICAgID46OnR5cGUKKyAgICBnZXQodHVwbGU8X0VsZW1lbnRzLi4uPiYgX190KQorICAgIHsgCisgICAgICByZXR1cm4gX19nZXRfaGVscGVyPF9faT4oX190KTsgCisgICAgfQorCisgIHRlbXBsYXRlPGludCBfX2ksIHR5cGVuYW1lLi4uIF9FbGVtZW50cz4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19hZGRfY19yZWY8CisgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgdHVwbGVfZWxlbWVudDxfX2ksIHR1cGxlPF9FbGVtZW50cy4uLj4gPjo6dHlwZQorICAgICAgICAgICAgICAgICAgICA+Ojp0eXBlCisgICAgZ2V0KGNvbnN0IHR1cGxlPF9FbGVtZW50cy4uLj4mIF9fdCkKKyAgICB7CisgICAgICByZXR1cm4gX19nZXRfaGVscGVyPF9faT4oX190KTsKKyAgICB9CisKKyAgLy8gVGhpcyBjbGFzcyBoZWxwcyBjb25zdHJ1Y3QgdGhlIHZhcmlvdXMgY29tcGFyaXNvbiBvcGVyYXRpb25zIG9uIHR1cGxlcworICB0ZW1wbGF0ZTxpbnQgX19jaGVja19lcXVhbF9zaXplLCBpbnQgX19pLCBpbnQgX19qLAorCSAgIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIHN0cnVjdCBfX3R1cGxlX2NvbXBhcmU7CisKKyAgdGVtcGxhdGU8aW50IF9faSwgaW50IF9faiwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgc3RydWN0IF9fdHVwbGVfY29tcGFyZTwwLCBfX2ksIF9faiwgX1RwLCBfVXA+CisgICAgeworICAgICAgc3RhdGljIGJvb2wgX19lcShjb25zdCBfVHAmIF9fdCwgY29uc3QgX1VwJiBfX3UpCisgICAgICB7CisJcmV0dXJuIChnZXQ8X19pPihfX3QpID09IGdldDxfX2k+KF9fdSkgJiYKKwkJX190dXBsZV9jb21wYXJlPDAsIF9faSsxLCBfX2osIF9UcCwgX1VwPjo6X19lcShfX3QsIF9fdSkpOworICAgICAgfQorICAgICAKKyAgICAgIHN0YXRpYyBib29sIF9fbGVzcyhjb25zdCBfVHAmIF9fdCwgY29uc3QgX1VwJiBfX3UpCisgICAgICB7CisJcmV0dXJuICgoZ2V0PF9faT4oX190KSA8IGdldDxfX2k+KF9fdSkpCisJCXx8ICEoZ2V0PF9faT4oX191KSA8IGdldDxfX2k+KF9fdCkpICYmCisJCV9fdHVwbGVfY29tcGFyZTwwLCBfX2krMSwgX19qLCBfVHAsIF9VcD46Ol9fbGVzcyhfX3QsIF9fdSkpOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8aW50IF9faSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgc3RydWN0IF9fdHVwbGVfY29tcGFyZTwwLCBfX2ksIF9faSwgX1RwLCBfVXA+CisgICAgeworICAgICAgc3RhdGljIGJvb2wgX19lcShjb25zdCBfVHAmLCBjb25zdCBfVXAmKQorICAgICAgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAKKyAgICAgIHN0YXRpYyBib29sIF9fbGVzcyhjb25zdCBfVHAmLCBjb25zdCBfVXAmKQorICAgICAgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9URWxlbWVudHMsIHR5cGVuYW1lLi4uIF9VRWxlbWVudHM+CisgICAgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgdHVwbGU8X1RFbGVtZW50cy4uLj4mIF9fdCwKKwkgICAgICAgY29uc3QgdHVwbGU8X1VFbGVtZW50cy4uLj4mIF9fdSkKKyAgICB7CisgICAgICB0eXBlZGVmIHR1cGxlPF9URWxlbWVudHMuLi4+IF9UcDsKKyAgICAgIHR5cGVkZWYgdHVwbGU8X1VFbGVtZW50cy4uLj4gX1VwOworICAgICAgcmV0dXJuIChfX3R1cGxlX2NvbXBhcmU8dHVwbGVfc2l6ZTxfVHA+Ojp2YWx1ZSAtIHR1cGxlX3NpemU8X1VwPjo6dmFsdWUsCisJICAgICAgMCwgdHVwbGVfc2l6ZTxfVHA+Ojp2YWx1ZSwgX1RwLCBfVXA+OjpfX2VxKF9fdCwgX191KSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9URWxlbWVudHMsIHR5cGVuYW1lLi4uIF9VRWxlbWVudHM+CisgICAgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCB0dXBsZTxfVEVsZW1lbnRzLi4uPiYgX190LAorCSAgICAgIGNvbnN0IHR1cGxlPF9VRWxlbWVudHMuLi4+JiBfX3UpCisgICAgeworICAgICAgdHlwZWRlZiB0dXBsZTxfVEVsZW1lbnRzLi4uPiBfVHA7CisgICAgICB0eXBlZGVmIHR1cGxlPF9VRWxlbWVudHMuLi4+IF9VcDsKKyAgICAgIHJldHVybiAoX190dXBsZV9jb21wYXJlPHR1cGxlX3NpemU8X1RwPjo6dmFsdWUgLSB0dXBsZV9zaXplPF9VcD46OnZhbHVlLAorCSAgICAgIDAsIHR1cGxlX3NpemU8X1RwPjo6dmFsdWUsIF9UcCwgX1VwPjo6X19sZXNzKF9fdCwgX191KSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9URWxlbWVudHMsIHR5cGVuYW1lLi4uIF9VRWxlbWVudHM+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHR1cGxlPF9URWxlbWVudHMuLi4+JiBfX3QsCisJICAgICAgIGNvbnN0IHR1cGxlPF9VRWxlbWVudHMuLi4+JiBfX3UpCisgICAgeyByZXR1cm4gIShfX3QgPT0gX191KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9URWxlbWVudHMsIHR5cGVuYW1lLi4uIF9VRWxlbWVudHM+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgdHVwbGU8X1RFbGVtZW50cy4uLj4mIF9fdCwKKwkgICAgICBjb25zdCB0dXBsZTxfVUVsZW1lbnRzLi4uPiYgX191KQorICAgIHsgcmV0dXJuIF9fdSA8IF9fdDsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9URWxlbWVudHMsIHR5cGVuYW1lLi4uIF9VRWxlbWVudHM+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IHR1cGxlPF9URWxlbWVudHMuLi4+JiBfX3QsCisJICAgICAgIGNvbnN0IHR1cGxlPF9VRWxlbWVudHMuLi4+JiBfX3UpCisgICAgeyByZXR1cm4gIShfX3UgPCBfX3QpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1RFbGVtZW50cywgdHlwZW5hbWUuLi4gX1VFbGVtZW50cz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgdHVwbGU8X1RFbGVtZW50cy4uLj4mIF9fdCwKKwkgICAgICAgY29uc3QgdHVwbGU8X1VFbGVtZW50cy4uLj4mIF9fdSkKKyAgICB7IHJldHVybiAhKF9fdCA8IF9fdSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgcmVmZXJlbmNlX3dyYXBwZXI7CisKKyAgLy8gSGVscGVyIHdoaWNoIGFkZHMgYSByZWZlcmVuY2UgdG8gYSB0eXBlIHdoZW4gZ2l2ZW4gYSByZWZlcmVuY2Vfd3JhcHBlcgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fc3RyaXBfcmVmZXJlbmNlX3dyYXBwZXIKKyAgICB7CisgICAgICB0eXBlZGVmIF9UcCBfX3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fc3RyaXBfcmVmZXJlbmNlX3dyYXBwZXI8cmVmZXJlbmNlX3dyYXBwZXI8X1RwPiA+CisgICAgeworICAgICAgdHlwZWRlZiBfVHAmIF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19zdHJpcF9yZWZlcmVuY2Vfd3JhcHBlcjxjb25zdCByZWZlcmVuY2Vfd3JhcHBlcjxfVHA+ID4KKyAgICB7CisgICAgICB0eXBlZGVmIF9UcCYgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0VsZW1lbnRzPgorICAgIGlubGluZSB0dXBsZTx0eXBlbmFtZSBfX3N0cmlwX3JlZmVyZW5jZV93cmFwcGVyPF9FbGVtZW50cz46Ol9fdHlwZS4uLj4KKyAgICBtYWtlX3R1cGxlKF9FbGVtZW50cy4uLiBfX2FyZ3MpCisgICAgeworICAgICAgdHlwZWRlZiB0dXBsZTx0eXBlbmFtZSBfX3N0cmlwX3JlZmVyZW5jZV93cmFwcGVyPF9FbGVtZW50cz46Ol9fdHlwZS4uLj4KKyAgICAgICAgX19yZXN1bHRfdHlwZTsKKyAgICAgIHJldHVybiBfX3Jlc3VsdF90eXBlKF9fYXJncy4uLik7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9FbGVtZW50cz4KKyAgICBpbmxpbmUgdHVwbGU8X0VsZW1lbnRzJi4uLj4KKyAgICB0aWUoX0VsZW1lbnRzJi4uLiBfX2FyZ3MpCisgICAgeworICAgICAgcmV0dXJuIHR1cGxlPF9FbGVtZW50cyYuLi4+KF9fYXJncy4uLik7CisgICAgfQorCisgIC8vIEEgY2xhc3MgKGFuZCBpbnN0YW5jZSkgd2hpY2ggY2FuIGJlIHVzZWQgaW4gJ3RpZScgd2hlbiBhbiBlbGVtZW50CisgIC8vIG9mIGEgdHVwbGUgaXMgbm90IHJlcXVpcmVkCisgIHN0cnVjdCBfU3dhbGxvd19hc3NpZ24KKyAgeworICAgIHRlbXBsYXRlPGNsYXNzIF9UcD4KKyAgICAgIF9Td2FsbG93X2Fzc2lnbiYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfVHAmKQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKyAgfTsKKworICAvLyBUT0RPOiBQdXQgdGhpcyBpbiBzb21lIGtpbmQgb2Ygc2hhcmVkIGZpbGUuCisgIG5hbWVzcGFjZQorICB7CisgICAgX1N3YWxsb3dfYXNzaWduIGlnbm9yZTsKKyAgfTsgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorfQorfQorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX1RVUExFCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS90eXBlX3RyYWl0cyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3R5cGVfdHJhaXRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMjhmODQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS90eXBlX3RyYWl0cwpAQCAtMCwwICsxLDI0OSBAQAorLy8gVFIxIHR5cGVfdHJhaXRzIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL3R5cGVfdHJhaXRzCisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX1RZUEVfVFJBSVRTCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9UWVBFX1RSQUlUUyAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2lmIGRlZmluZWQoX0dMSUJDWFhfSU5DTFVERV9BU19DWFgwWCkKKyMgIGVycm9yIFRSMSBoZWFkZXIgY2Fubm90IGJlIGluY2x1ZGVkIGZyb20gQysrMHggaGVhZGVyCisjZW5kaWYKKworI2luY2x1ZGUgPGNzdGRkZWY+CisKKyNpZiBkZWZpbmVkKF9HTElCQ1hYX0lOQ0xVREVfQVNfVFIxKQorIyAgaW5jbHVkZSA8dHIxX2ltcGwvdHlwZV90cmFpdHM+CisjZWxzZQorIyAgZGVmaW5lIF9HTElCQ1hYX0lOQ0xVREVfQVNfVFIxCisjICBkZWZpbmUgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMSBuYW1lc3BhY2UgdHIxIHsKKyMgIGRlZmluZSBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMSB9CisjICBkZWZpbmUgX0dMSUJDWFhfVFIxIHRyMTo6CisjICBpbmNsdWRlIDx0cjFfaW1wbC90eXBlX3RyYWl0cz4KKyMgIHVuZGVmIF9HTElCQ1hYX1RSMQorIyAgdW5kZWYgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9UUjEKKyMgIHVuZGVmIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9UUjEKKyMgIHVuZGVmIF9HTElCQ1hYX0lOQ0xVREVfQVNfVFIxCisjZW5kaWYKKworbmFtZXNwYWNlIHN0ZAoreworbmFtZXNwYWNlIHRyMQoreworI2RlZmluZSBfREVGSU5FX1NQRUMoX1RyYWl0LCBfVHlwZSkgICAgXAorICB0ZW1wbGF0ZTw+ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0cnVjdCBfVHJhaXQ8X1R5cGU+CSAgICAgICBcCisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgaXNfcmVmZXJlbmNlCisgICAgOiBwdWJsaWMgZmFsc2VfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19yZWZlcmVuY2U8X1RwJj4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfcG9kCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX19pc19wb2QoX1RwKSB8fCBpc192b2lkPF9UcD46OnZhbHVlPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGhhc190cml2aWFsX2NvbnN0cnVjdG9yCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgaXNfcG9kPF9UcD46OnZhbHVlPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGhhc190cml2aWFsX2NvcHkKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBpc19wb2Q8X1RwPjo6dmFsdWU+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaGFzX3RyaXZpYWxfYXNzaWduCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgaXNfcG9kPF9UcD46OnZhbHVlPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGhhc190cml2aWFsX2Rlc3RydWN0b3IKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBpc19wb2Q8X1RwPjo6dmFsdWU+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaGFzX25vdGhyb3dfY29uc3RydWN0b3IKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBpc19wb2Q8X1RwPjo6dmFsdWU+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaGFzX25vdGhyb3dfY29weQorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIGlzX3BvZDxfVHA+Ojp2YWx1ZT4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBoYXNfbm90aHJvd19hc3NpZ24KKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBpc19wb2Q8X1RwPjo6dmFsdWU+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lPgorICAgIHN0cnVjdCBfX2lzX3NpZ25lZF9oZWxwZXIKKyAgICA6IHB1YmxpYyBmYWxzZV90eXBlIHsgfTsKKyAgX0RFRklORV9TUEVDKF9faXNfc2lnbmVkX2hlbHBlciwgc2lnbmVkIGNoYXIpCisgIF9ERUZJTkVfU1BFQyhfX2lzX3NpZ25lZF9oZWxwZXIsIHNob3J0KQorICBfREVGSU5FX1NQRUMoX19pc19zaWduZWRfaGVscGVyLCBpbnQpCisgIF9ERUZJTkVfU1BFQyhfX2lzX3NpZ25lZF9oZWxwZXIsIGxvbmcpCisgIF9ERUZJTkVfU1BFQyhfX2lzX3NpZ25lZF9oZWxwZXIsIGxvbmcgbG9uZykKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX3NpZ25lZAorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIChfX2lzX3NpZ25lZF9oZWxwZXI8dHlwZW5hbWUKKwkJCQkgICAgICByZW1vdmVfY3Y8X1RwPjo6dHlwZT46OnZhbHVlKT4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgc3RydWN0IF9faXNfdW5zaWduZWRfaGVscGVyCisgICAgOiBwdWJsaWMgZmFsc2VfdHlwZSB7IH07CisgIF9ERUZJTkVfU1BFQyhfX2lzX3Vuc2lnbmVkX2hlbHBlciwgdW5zaWduZWQgY2hhcikKKyAgX0RFRklORV9TUEVDKF9faXNfdW5zaWduZWRfaGVscGVyLCB1bnNpZ25lZCBzaG9ydCkKKyAgX0RFRklORV9TUEVDKF9faXNfdW5zaWduZWRfaGVscGVyLCB1bnNpZ25lZCBpbnQpCisgIF9ERUZJTkVfU1BFQyhfX2lzX3Vuc2lnbmVkX2hlbHBlciwgdW5zaWduZWQgbG9uZykKKyAgX0RFRklORV9TUEVDKF9faXNfdW5zaWduZWRfaGVscGVyLCB1bnNpZ25lZCBsb25nIGxvbmcpCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc191bnNpZ25lZAorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIChfX2lzX3Vuc2lnbmVkX2hlbHBlcjx0eXBlbmFtZQorCQkJCSAgICAgIHJlbW92ZV9jdjxfVHA+Ojp0eXBlPjo6dmFsdWUpPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmFzZSwgdHlwZW5hbWUgX0Rlcml2ZWQ+CisgICAgc3RydWN0IF9faXNfYmFzZV9vZl9oZWxwZXIKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHJlbW92ZV9jdjxfQmFzZT46OnR5cGUgICAgX05vQ3ZfQmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX2N2PF9EZXJpdmVkPjo6dHlwZSBfTm9Ddl9EZXJpdmVkOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZSA9IChpc19zYW1lPF9CYXNlLCBfRGVyaXZlZD46OnZhbHVlCisJCQkJICAgfHwgKF9faXNfYmFzZV9vZihfQmFzZSwgX0Rlcml2ZWQpCisJCQkJICAgICAgICYmICFpc19zYW1lPF9Ob0N2X0Jhc2UsCisJCQkJICAgICAgICAgICAgICAgICAgIF9Ob0N2X0Rlcml2ZWQ+Ojp2YWx1ZSkpOworICAgIH07CisgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CYXNlLCB0eXBlbmFtZSBfRGVyaXZlZD4KKyAgICBzdHJ1Y3QgaXNfYmFzZV9vZgorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsCisJCQkgICAgICAgX19pc19iYXNlX29mX2hlbHBlcjxfQmFzZSwgX0Rlcml2ZWQ+OjpfX3ZhbHVlPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnJvbSwgdHlwZW5hbWUgX1RvPgorICAgIHN0cnVjdCBfX2lzX2NvbnZlcnRpYmxlX3NpbXBsZQorICAgIDogcHVibGljIF9fc2ZpbmFlX3R5cGVzCisgICAgeworICAgIHByaXZhdGU6CisgICAgICBzdGF0aWMgX19vbmUgX190ZXN0KF9Ubyk7CisgICAgICBzdGF0aWMgX190d28gX190ZXN0KC4uLik7CisgICAgICBzdGF0aWMgX0Zyb20gX19tYWtlRnJvbSgpOworICAgIAorICAgIHB1YmxpYzoKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWUgPSBzaXplb2YoX190ZXN0KF9fbWFrZUZyb20oKSkpID09IDE7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGFkZF9yZWZlcmVuY2U7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX2ludF9vcl9jcmVmCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVfcmVmZXJlbmNlPF9UcD46OnR5cGUgX19ycl9UcDsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWUgPSAoaXNfaW50ZWdyYWw8X1RwPjo6dmFsdWUKKwkJCQkgICB8fCAoaXNfaW50ZWdyYWw8X19ycl9UcD46OnZhbHVlCisJCQkJICAgICAgICYmIGlzX2NvbnN0PF9fcnJfVHA+Ojp2YWx1ZQorCQkJCSAgICAgICAmJiAhaXNfdm9sYXRpbGU8X19ycl9UcD46OnZhbHVlKSk7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnJvbSwgdHlwZW5hbWUgX1RvLAorCSAgIGJvb2wgPSAoaXNfdm9pZDxfRnJvbT46OnZhbHVlIHx8IGlzX3ZvaWQ8X1RvPjo6dmFsdWUKKwkJICAgfHwgaXNfZnVuY3Rpb248X1RvPjo6dmFsdWUgfHwgaXNfYXJyYXk8X1RvPjo6dmFsdWUKKwkJICAgLy8gVGhpcyBzcGVjaWFsIGNhc2UgaXMgaGVyZSBvbmx5IHRvIGF2b2lkIHdhcm5pbmdzLgkKKwkJICAgfHwgKGlzX2Zsb2F0aW5nX3BvaW50PHR5cGVuYW1lCisJCSAgICAgICByZW1vdmVfcmVmZXJlbmNlPF9Gcm9tPjo6dHlwZT46OnZhbHVlCisJCSAgICAgICAmJiBfX2lzX2ludF9vcl9jcmVmPF9Ubz46Ol9fdmFsdWUpKT4KKyAgICBzdHJ1Y3QgX19pc19jb252ZXJ0aWJsZV9oZWxwZXIKKyAgICB7CisgICAgICAvLyAiQW4gaW1hZ2luYXJ5IGx2YWx1ZSBvZiB0eXBlIEZyb20uLi4iLgorICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZSA9IChfX2lzX2NvbnZlcnRpYmxlX3NpbXBsZTx0eXBlbmFtZQorCQkJCSAgIGFkZF9yZWZlcmVuY2U8X0Zyb20+Ojp0eXBlLCBfVG8+OjpfX3ZhbHVlKTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gcm9tLCB0eXBlbmFtZSBfVG8+CisgICAgc3RydWN0IF9faXNfY29udmVydGlibGVfaGVscGVyPF9Gcm9tLCBfVG8sIHRydWU+CisgICAgeyBzdGF0aWMgY29uc3QgYm9vbCBfX3ZhbHVlID0gKGlzX3ZvaWQ8X1RvPjo6dmFsdWUKKwkJCQkgICB8fCAoX19pc19pbnRfb3JfY3JlZjxfVG8+OjpfX3ZhbHVlCisJCQkJICAgICAgICYmICFpc192b2lkPF9Gcm9tPjo6dmFsdWUpKTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnJvbSwgdHlwZW5hbWUgX1RvPgorICAgIHN0cnVjdCBpc19jb252ZXJ0aWJsZQorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsCisJCQkgICAgICAgX19pc19jb252ZXJ0aWJsZV9oZWxwZXI8X0Zyb20sIF9Ubz46Ol9fdmFsdWU+CisgICAgeyB9OworCisgIC8vIHJlZmVyZW5jZSBtb2RpZmljYXRpb25zIFs0LjcuMl0uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgcmVtb3ZlX3JlZmVyZW5jZQorICAgIHsgdHlwZWRlZiBfVHAgICAgIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCByZW1vdmVfcmVmZXJlbmNlPF9UcCY+CisgICAgeyB0eXBlZGVmIF9UcCAgICAgdHlwZTsgfTsKKworICAvLyBOQjogQ2FyZWZ1bCB3aXRoIHJlZmVyZW5jZSB0byB2b2lkLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJvb2wgPSAoaXNfdm9pZDxfVHA+Ojp2YWx1ZQorCQkJCSB8fCBpc19yZWZlcmVuY2U8X1RwPjo6dmFsdWUpPgorICAgIHN0cnVjdCBfX2FkZF9yZWZlcmVuY2VfaGVscGVyCisgICAgeyB0eXBlZGVmIF9UcCYgICAgdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fYWRkX3JlZmVyZW5jZV9oZWxwZXI8X1RwLCB0cnVlPgorICAgIHsgdHlwZWRlZiBfVHAgICAgIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBhZGRfcmVmZXJlbmNlCisgICAgOiBwdWJsaWMgX19hZGRfcmVmZXJlbmNlX2hlbHBlcjxfVHA+CisgICAgeyB9OworCisgIC8vIG90aGVyIHRyYW5zZm9ybWF0aW9ucyBbNC44XS4KKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX0xlbiwgc3RkOjpzaXplX3QgX0FsaWduPgorICAgIHN0cnVjdCBhbGlnbmVkX3N0b3JhZ2UKKyAgICB7IAorICAgICAgdW5pb24gdHlwZQorICAgICAgeworCXVuc2lnbmVkIGNoYXIgX19kYXRhW19MZW5dOworCXN0cnVjdCBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXygoX0FsaWduKSkpKSB7IH0gX19hbGlnbjsgCisgICAgICB9OworICAgIH07CisKKyN1bmRlZiBfREVGSU5FX1NQRUMKK30KK30KKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9UWVBFX1RSQUlUUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvdW5vcmRlcmVkX21hcCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3Vub3JkZXJlZF9tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBiYWI5ZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3Vub3JkZXJlZF9tYXAKQEAgLTAsMCArMSw0NCBAQAorLy8gVFIxIHVub3JkZXJlZF9tYXAgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvdW5vcmRlcmVkX21hcAorICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9VTk9SREVSRURfTUFQCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9VTk9SREVSRURfTUFQIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDxiaXRzL3N0bF9hbGdvYmFzZS5oPgorI2luY2x1ZGUgPGJpdHMvYWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfZnVuY3Rpb24uaD4gLy8gZXF1YWxfdG8sIF9JZGVudGl0eSwgX1NlbGVjdDFzdAorI2luY2x1ZGUgPGJpdHMvc3RyaW5nZndkLmg+CisjaW5jbHVkZSA8dHIxL3R5cGVfdHJhaXRzPgorI2luY2x1ZGUgPHRyMS9mdW5jdGlvbmFsX2hhc2guaD4KKyNpbmNsdWRlIDx0cjEvaGFzaHRhYmxlLmg+CisjaW5jbHVkZSA8dHIxL3Vub3JkZXJlZF9tYXAuaD4KKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9VTk9SREVSRURfTUFQCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS91bm9yZGVyZWRfbWFwLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS91bm9yZGVyZWRfbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFhMjBhNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3Vub3JkZXJlZF9tYXAuaApAQCAtMCwwICsxLDI3NCBAQAorLy8gVFIxIHVub3JkZXJlZF9tYXAgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvdW5vcmRlcmVkX21hcC5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKK25hbWVzcGFjZSBzdGQKK3sKK25hbWVzcGFjZSB0cjEKK3sKKyAgLy8gWFhYIFdoZW4gd2UgZ2V0IHR5cGVkZWYgdGVtcGxhdGVzIHRoZXNlIGNsYXNzIGRlZmluaXRpb25zCisgIC8vIHdpbGwgYmUgdW5uZWNlc3NhcnkuCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwKKwkgICBjbGFzcyBfSGFzaCA9IGhhc2g8X0tleT4sCisJICAgY2xhc3MgX1ByZWQgPSBzdGQ6OmVxdWFsX3RvPF9LZXk+LAorCSAgIGNsYXNzIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4sCisJICAgYm9vbCBfX2NhY2hlX2hhc2hfY29kZSA9IGZhbHNlPgorICAgIGNsYXNzIF9fdW5vcmRlcmVkX21hcAorICAgIDogcHVibGljIF9IYXNodGFibGU8X0tleSwgc3RkOjpwYWlyPGNvbnN0IF9LZXksIF9UcD4sIF9BbGxvYywKKwkJCXN0ZDo6X1NlbGVjdDFzdDxzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiA+LCBfUHJlZCwgCisJCQlfSGFzaCwgX19kZXRhaWw6Ol9Nb2RfcmFuZ2VfaGFzaGluZywKKwkJCV9fZGV0YWlsOjpfRGVmYXVsdF9yYW5nZWRfaGFzaCwKKwkJCV9fZGV0YWlsOjpfUHJpbWVfcmVoYXNoX3BvbGljeSwKKwkJCV9fY2FjaGVfaGFzaF9jb2RlLCBmYWxzZSwgdHJ1ZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9IYXNodGFibGU8X0tleSwgc3RkOjpwYWlyPGNvbnN0IF9LZXksIF9UcD4sIF9BbGxvYywKKwkJCSBzdGQ6Ol9TZWxlY3Qxc3Q8c3RkOjpwYWlyPGNvbnN0IF9LZXksIF9UcD4gPiwgX1ByZWQsCisJCQkgX0hhc2gsIF9fZGV0YWlsOjpfTW9kX3JhbmdlX2hhc2hpbmcsCisJCQkgX19kZXRhaWw6Ol9EZWZhdWx0X3JhbmdlZF9oYXNoLAorCQkJIF9fZGV0YWlsOjpfUHJpbWVfcmVoYXNoX3BvbGljeSwKKwkJCSBfX2NhY2hlX2hhc2hfY29kZSwgZmFsc2UsIHRydWU+CisgICAgICAgIF9CYXNlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6c2l6ZV90eXBlICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Omhhc2hlciAgICAgICAgICBoYXNoZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjprZXlfZXF1YWwgICAgICAga2V5X2VxdWFsOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgIGFsbG9jYXRvcl90eXBlOworCisgICAgICBleHBsaWNpdAorICAgICAgX191bm9yZGVyZWRfbWFwKHNpemVfdHlwZSBfX24gPSAxMCwKKwkJICAgICAgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCSAgICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fbiwgX19oZiwgX19kZXRhaWw6Ol9Nb2RfcmFuZ2VfaGFzaGluZygpLAorCSAgICAgIF9fZGV0YWlsOjpfRGVmYXVsdF9yYW5nZWRfaGFzaCgpLAorCSAgICAgIF9fZXFsLCBzdGQ6Ol9TZWxlY3Qxc3Q8c3RkOjpwYWlyPGNvbnN0IF9LZXksIF9UcD4gPigpLCBfX2EpCisgICAgICB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIF9fdW5vcmRlcmVkX21hcChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgCisJCQlzaXplX3R5cGUgX19uID0gMTAsCisJCQljb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwgCisJCQljb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksIAorCQkJY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfQmFzZShfX2YsIF9fbCwgX19uLCBfX2hmLCBfX2RldGFpbDo6X01vZF9yYW5nZV9oYXNoaW5nKCksCisJCV9fZGV0YWlsOjpfRGVmYXVsdF9yYW5nZWRfaGFzaCgpLAorCQlfX2VxbCwgc3RkOjpfU2VsZWN0MXN0PHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4oKSwgX19hKQorCXsgfQorICAgIH07CisgIAorICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsCisJICAgY2xhc3MgX0hhc2ggPSBoYXNoPF9LZXk+LAorCSAgIGNsYXNzIF9QcmVkID0gc3RkOjplcXVhbF90bzxfS2V5PiwKKwkgICBjbGFzcyBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiA+LAorCSAgIGJvb2wgX19jYWNoZV9oYXNoX2NvZGUgPSBmYWxzZT4KKyAgICBjbGFzcyBfX3Vub3JkZXJlZF9tdWx0aW1hcAorICAgIDogcHVibGljIF9IYXNodGFibGU8X0tleSwgc3RkOjpwYWlyPGNvbnN0IF9LZXksIF9UcD4sCisJCQlfQWxsb2MsCisJCQlzdGQ6Ol9TZWxlY3Qxc3Q8c3RkOjpwYWlyPGNvbnN0IF9LZXksIF9UcD4gPiwgX1ByZWQsCisJCQlfSGFzaCwgX19kZXRhaWw6Ol9Nb2RfcmFuZ2VfaGFzaGluZywKKwkJCV9fZGV0YWlsOjpfRGVmYXVsdF9yYW5nZWRfaGFzaCwKKwkJCV9fZGV0YWlsOjpfUHJpbWVfcmVoYXNoX3BvbGljeSwKKwkJCV9fY2FjaGVfaGFzaF9jb2RlLCBmYWxzZSwgZmFsc2U+CisgICAgeworICAgICAgdHlwZWRlZiBfSGFzaHRhYmxlPF9LZXksIHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+LAorCQkJIF9BbGxvYywKKwkJCSBzdGQ6Ol9TZWxlY3Qxc3Q8c3RkOjpwYWlyPGNvbnN0IF9LZXksIF9UcD4gPiwgX1ByZWQsCisJCQkgX0hhc2gsIF9fZGV0YWlsOjpfTW9kX3JhbmdlX2hhc2hpbmcsCisJCQkgX19kZXRhaWw6Ol9EZWZhdWx0X3JhbmdlZF9oYXNoLAorCQkJIF9fZGV0YWlsOjpfUHJpbWVfcmVoYXNoX3BvbGljeSwKKwkJCSBfX2NhY2hlX2hhc2hfY29kZSwgZmFsc2UsIGZhbHNlPgorICAgICAgICBfQmFzZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpoYXNoZXIgICAgICAgICAgaGFzaGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6a2V5X2VxdWFsICAgICAgIGtleV9lcXVhbDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlICBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIAorICAgICAgZXhwbGljaXQKKyAgICAgIF9fdW5vcmRlcmVkX211bHRpbWFwKHNpemVfdHlwZSBfX24gPSAxMCwKKwkJCSAgIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLAorCQkJICAgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLAorCQkJICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fbiwgX19oZiwgX19kZXRhaWw6Ol9Nb2RfcmFuZ2VfaGFzaGluZygpLAorCSAgICAgIF9fZGV0YWlsOjpfRGVmYXVsdF9yYW5nZWRfaGFzaCgpLAorCSAgICAgIF9fZXFsLCBzdGQ6Ol9TZWxlY3Qxc3Q8c3RkOjpwYWlyPGNvbnN0IF9LZXksIF9UcD4gPigpLCBfX2EpCisgICAgICB7IH0KKworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgX191bm9yZGVyZWRfbXVsdGltYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIAorCQkJICAgICB0eXBlbmFtZSBfQmFzZTo6c2l6ZV90eXBlIF9fbiA9IDAsCisJCQkgICAgIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLCAKKwkJCSAgICAgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLCAKKwkJCSAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfQmFzZShfX2YsIF9fbCwgX19uLCBfX2hmLCBfX2RldGFpbDo6X01vZF9yYW5nZV9oYXNoaW5nKCksCisJCV9fZGV0YWlsOjpfRGVmYXVsdF9yYW5nZWRfaGFzaCgpLAorCQlfX2VxbCwgc3RkOjpfU2VsZWN0MXN0PHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4oKSwgX19hKQorICAgICAgICB7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2gsIGNsYXNzIF9QcmVkLCBjbGFzcyBfQWxsb2MsCisJICAgYm9vbCBfX2NhY2hlX2hhc2hfY29kZT4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoX191bm9yZGVyZWRfbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLAorCSBfQWxsb2MsIF9fY2FjaGVfaGFzaF9jb2RlPiYgX194LAorCSBfX3Vub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsCisJIF9BbGxvYywgX19jYWNoZV9oYXNoX2NvZGU+JiBfX3kpCisgICAgeyBfX3guc3dhcChfX3kpOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaCwgY2xhc3MgX1ByZWQsIGNsYXNzIF9BbGxvYywKKwkgICBib29sIF9fY2FjaGVfaGFzaF9jb2RlPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChfX3Vub3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwKKwkgX0FsbG9jLCBfX2NhY2hlX2hhc2hfY29kZT4mIF9feCwKKwkgX191bm9yZGVyZWRfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsCisJIF9BbGxvYywgX19jYWNoZV9oYXNoX2NvZGU+JiBfX3kpCisgICAgeyBfX3guc3dhcChfX3kpOyB9CisKKworICAvKioKKyAgICogIEBicmllZiBBIHN0YW5kYXJkIGNvbnRhaW5lciBjb21wb3NlZCBvZiB1bmlxdWUga2V5cyAoY29udGFpbmluZworICAgKiAgYXQgbW9zdCBvbmUgb2YgZWFjaCBrZXkgdmFsdWUpIHRoYXQgYXNzb2NpYXRlcyB2YWx1ZXMgb2YgYW5vdGhlciB0eXBlCisgICAqICB3aXRoIHRoZSBrZXlzLgorICAgKgorICAgKiAgQGluZ3JvdXAgdW5vcmRlcmVkX2Fzc29jaWF0aXZlX2NvbnRhaW5lcnMKKyAgICoKKyAgICogIE1lZXRzIHRoZSByZXF1aXJlbWVudHMgb2YgYSA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2NSI+Y29udGFpbmVyPC9hPiwgYW5kCisgICAqICA8YSBocmVmPSJ0YWJsZXMuaHRtbCN4eCI+dW5vcmRlcmVkIGFzc29jaWF0aXZlIGNvbnRhaW5lcjwvYT4KKyAgICoKKyAgICogIEBwYXJhbSAgS2V5ICBUeXBlIG9mIGtleSBvYmplY3RzLgorICAgKiAgQHBhcmFtICBUcCAgVHlwZSBvZiBtYXBwZWQgb2JqZWN0cy4KKyAgICogIEBwYXJhbSAgSGFzaCAgSGFzaGluZyBmdW5jdGlvbiBvYmplY3QgdHlwZSwgZGVmYXVsdHMgdG8gaGFzaDxWYWx1ZT4uCisgICAqICBAcGFyYW0gIFByZWQgIFByZWRpY2F0ZSBmdW5jdGlvbiBvYmplY3QgdHlwZSwgZGVmYXVsdHMgdG8gZXF1YWxfdG88VmFsdWU+LgorICAgKiAgQHBhcmFtICBBbGxvYyAgQWxsb2NhdG9yIHR5cGUsIGRlZmF1bHRzIHRvIGFsbG9jYXRvcjxLZXk+LgorICAgKgorICAgKiBUaGUgcmVzdWx0aW5nIHZhbHVlIHR5cGUgb2YgdGhlIGNvbnRhaW5lciBpcyBzdGQ6OnBhaXI8Y29uc3QgS2V5LCBUcD4uCisgICAqLworICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsCisJICAgY2xhc3MgX0hhc2ggPSBoYXNoPF9LZXk+LAorCSAgIGNsYXNzIF9QcmVkID0gc3RkOjplcXVhbF90bzxfS2V5PiwKKwkgICBjbGFzcyBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiA+ID4KKyAgICBjbGFzcyB1bm9yZGVyZWRfbWFwCisgICAgOiBwdWJsaWMgX191bm9yZGVyZWRfbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+CisgICAgeworICAgICAgdHlwZWRlZiBfX3Vub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4gIF9CYXNlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aGFzaGVyICAgICAgICAgIGhhc2hlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmtleV9lcXVhbCAgICAgICBrZXlfZXF1YWw7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSAgYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICB1bm9yZGVyZWRfbWFwKHNpemVfdHlwZSBfX24gPSAxMCwKKwkJICAgIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLAorCQkgICAgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLAorCQkgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKyAgICAgIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdW5vcmRlcmVkX21hcChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgCisJCSAgICAgIHNpemVfdHlwZSBfX24gPSAxMCwKKwkJICAgICAgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksIAorCQkgICAgICBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksIAorCQkgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKwk6IF9CYXNlKF9fZiwgX19sLCBfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICAgIHsgfQorICAgIH07CisgIAorICAvKioKKyAgICogIEBicmllZiBBIHN0YW5kYXJkIGNvbnRhaW5lciBjb21wb3NlZCBvZiBlcXVpdmFsZW50IGtleXMKKyAgICogIChwb3NzaWJseSBjb250YWluaW5nIG11bHRpcGxlIG9mIGVhY2gga2V5IHZhbHVlKSB0aGF0IGFzc29jaWF0ZXMKKyAgICogIHZhbHVlcyBvZiBhbm90aGVyIHR5cGUgd2l0aCB0aGUga2V5cy4KKyAgICoKKyAgICogIEBpbmdyb3VwIHVub3JkZXJlZF9hc3NvY2lhdGl2ZV9jb250YWluZXJzCisgICAqCisgICAqICBNZWV0cyB0aGUgcmVxdWlyZW1lbnRzIG9mIGEgPGEgaHJlZj0idGFibGVzLmh0bWwjNjUiPmNvbnRhaW5lcjwvYT4sIGFuZAorICAgKiAgPGEgaHJlZj0idGFibGVzLmh0bWwjeHgiPnVub3JkZXJlZCBhc3NvY2lhdGl2ZSBjb250YWluZXI8L2E+CisgICAqCisgICAqICBAcGFyYW0gIEtleSAgVHlwZSBvZiBrZXkgb2JqZWN0cy4KKyAgICogIEBwYXJhbSAgVHAgIFR5cGUgb2YgbWFwcGVkIG9iamVjdHMuCisgICAqICBAcGFyYW0gIEhhc2ggIEhhc2hpbmcgZnVuY3Rpb24gb2JqZWN0IHR5cGUsIGRlZmF1bHRzIHRvIGhhc2g8VmFsdWU+LgorICAgKiAgQHBhcmFtICBQcmVkICBQcmVkaWNhdGUgZnVuY3Rpb24gb2JqZWN0IHR5cGUsIGRlZmF1bHRzIHRvIGVxdWFsX3RvPFZhbHVlPi4KKyAgICogIEBwYXJhbSAgQWxsb2MgIEFsbG9jYXRvciB0eXBlLCBkZWZhdWx0cyB0byBhbGxvY2F0b3I8S2V5Pi4KKyAgICoKKyAgICogVGhlIHJlc3VsdGluZyB2YWx1ZSB0eXBlIG9mIHRoZSBjb250YWluZXIgaXMgc3RkOjpwYWlyPGNvbnN0IEtleSwgVHA+LgorICAgKi8KKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLAorCSAgIGNsYXNzIF9IYXNoID0gaGFzaDxfS2V5PiwKKwkgICBjbGFzcyBfUHJlZCA9IHN0ZDo6ZXF1YWxfdG88X0tleT4sCisJICAgY2xhc3MgX0FsbG9jID0gc3RkOjphbGxvY2F0b3I8c3RkOjpwYWlyPGNvbnN0IF9LZXksIF9UcD4gPiA+CisgICAgY2xhc3MgdW5vcmRlcmVkX211bHRpbWFwCisgICAgOiBwdWJsaWMgX191bm9yZGVyZWRfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4KKyAgICB7CisgICAgICB0eXBlZGVmIF9fdW5vcmRlcmVkX211bHRpbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+ICBfQmFzZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6c2l6ZV90eXBlICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Omhhc2hlciAgICAgICAgICBoYXNoZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjprZXlfZXF1YWwgICAgICAga2V5X2VxdWFsOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgIGFsbG9jYXRvcl90eXBlOworICAgICAgCisgICAgICBleHBsaWNpdAorICAgICAgdW5vcmRlcmVkX211bHRpbWFwKHNpemVfdHlwZSBfX24gPSAxMCwKKwkJCSBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJCSBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCQkgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKyAgICAgIHsgfQorCisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB1bm9yZGVyZWRfbXVsdGltYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIAorCQkJICAgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSBfX24gPSAwLAorCQkJICAgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksIAorCQkJICAgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLCAKKwkJCSAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX0Jhc2UoX19mLCBfX2wsIF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKyAgICAgICAgeyB9CisKKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2gsIGNsYXNzIF9QcmVkLCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHVub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgdW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgX194LnN3YXAoX195KTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2gsIGNsYXNzIF9QcmVkLCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHVub3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX194LAorCSB1bm9yZGVyZWRfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KK30KK30KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3Vub3JkZXJlZF9zZXQgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS91bm9yZGVyZWRfc2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMmNiYjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS91bm9yZGVyZWRfc2V0CkBAIC0wLDAgKzEsNDQgQEAKKy8vIFRSMSB1bm9yZGVyZWRfc2V0IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL3Vub3JkZXJlZF9zZXQKKyAqICBUaGlzIGlzIGEgVFIxIEMrKyBMaWJyYXJ5IGhlYWRlci4gCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfVU5PUkRFUkVEX1NFVAorI2RlZmluZSBfR0xJQkNYWF9UUjFfVU5PUkRFUkVEX1NFVCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8Yml0cy9zdGxfYWxnb2Jhc2UuaD4KKyNpbmNsdWRlIDxiaXRzL2FsbG9jYXRvci5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2Z1bmN0aW9uLmg+IC8vIGVxdWFsX3RvLCBfSWRlbnRpdHksIF9TZWxlY3Qxc3QKKyNpbmNsdWRlIDxiaXRzL3N0cmluZ2Z3ZC5oPgorI2luY2x1ZGUgPHRyMS90eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDx0cjEvZnVuY3Rpb25hbF9oYXNoLmg+CisjaW5jbHVkZSA8dHIxL2hhc2h0YWJsZS5oPgorI2luY2x1ZGUgPHRyMS91bm9yZGVyZWRfc2V0Lmg+CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfVU5PUkRFUkVEX1NFVApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvdW5vcmRlcmVkX3NldC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvdW5vcmRlcmVkX3NldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNzIwMzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS91bm9yZGVyZWRfc2V0LmgKQEAgLTAsMCArMSwyNjMgQEAKKy8vIFRSMSB1bm9yZGVyZWRfc2V0IGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL3Vub3JkZXJlZF9zZXQuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCituYW1lc3BhY2Ugc3RkCit7IAorbmFtZXNwYWNlIHRyMQoreworICAvLyBYWFggV2hlbiB3ZSBnZXQgdHlwZWRlZiB0ZW1wbGF0ZXMgdGhlc2UgY2xhc3MgZGVmaW5pdGlvbnMKKyAgLy8gd2lsbCBiZSB1bm5lY2Vzc2FyeS4KKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbHVlLAorCSAgIGNsYXNzIF9IYXNoID0gaGFzaDxfVmFsdWU+LAorCSAgIGNsYXNzIF9QcmVkID0gc3RkOjplcXVhbF90bzxfVmFsdWU+LAorCSAgIGNsYXNzIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPF9WYWx1ZT4sCisJICAgYm9vbCBfX2NhY2hlX2hhc2hfY29kZSA9IGZhbHNlPgorICAgIGNsYXNzIF9fdW5vcmRlcmVkX3NldAorICAgIDogcHVibGljIF9IYXNodGFibGU8X1ZhbHVlLCBfVmFsdWUsIF9BbGxvYywKKwkJCXN0ZDo6X0lkZW50aXR5PF9WYWx1ZT4sIF9QcmVkLAorCQkJX0hhc2gsIF9fZGV0YWlsOjpfTW9kX3JhbmdlX2hhc2hpbmcsCisJCQlfX2RldGFpbDo6X0RlZmF1bHRfcmFuZ2VkX2hhc2gsCisJCQlfX2RldGFpbDo6X1ByaW1lX3JlaGFzaF9wb2xpY3ksCisJCQlfX2NhY2hlX2hhc2hfY29kZSwgdHJ1ZSwgdHJ1ZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9IYXNodGFibGU8X1ZhbHVlLCBfVmFsdWUsIF9BbGxvYywKKwkJCSBzdGQ6Ol9JZGVudGl0eTxfVmFsdWU+LCBfUHJlZCwKKwkJCSBfSGFzaCwgX19kZXRhaWw6Ol9Nb2RfcmFuZ2VfaGFzaGluZywKKwkJCSBfX2RldGFpbDo6X0RlZmF1bHRfcmFuZ2VkX2hhc2gsCisJCQkgX19kZXRhaWw6Ol9QcmltZV9yZWhhc2hfcG9saWN5LAorCQkJIF9fY2FjaGVfaGFzaF9jb2RlLCB0cnVlLCB0cnVlPgorICAgICAgICBfQmFzZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpoYXNoZXIgICAgICAgICAgaGFzaGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6a2V5X2VxdWFsICAgICAgIGtleV9lcXVhbDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlICBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIAorICAgICAgZXhwbGljaXQKKyAgICAgIF9fdW5vcmRlcmVkX3NldChzaXplX3R5cGUgX19uID0gMTAsCisJCSAgICAgIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLAorCQkgICAgICBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCSAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX24sIF9faGYsIF9fZGV0YWlsOjpfTW9kX3JhbmdlX2hhc2hpbmcoKSwKKwkgICAgICBfX2RldGFpbDo6X0RlZmF1bHRfcmFuZ2VkX2hhc2goKSwgX19lcWwsCisJICAgICAgc3RkOjpfSWRlbnRpdHk8X1ZhbHVlPigpLCBfX2EpCisgICAgICB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIF9fdW5vcmRlcmVkX3NldChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgCisJCQlzaXplX3R5cGUgX19uID0gMTAsCisJCQljb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwgCisJCQljb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksIAorCQkJY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfQmFzZShfX2YsIF9fbCwgX19uLCBfX2hmLCBfX2RldGFpbDo6X01vZF9yYW5nZV9oYXNoaW5nKCksCisJCV9fZGV0YWlsOjpfRGVmYXVsdF9yYW5nZWRfaGFzaCgpLCBfX2VxbCwKKwkJc3RkOjpfSWRlbnRpdHk8X1ZhbHVlPigpLCBfX2EpCisgICAgICAgIHsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbHVlLAorCSAgIGNsYXNzIF9IYXNoID0gaGFzaDxfVmFsdWU+LAorCSAgIGNsYXNzIF9QcmVkID0gc3RkOjplcXVhbF90bzxfVmFsdWU+LAorCSAgIGNsYXNzIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPF9WYWx1ZT4sCisJICAgYm9vbCBfX2NhY2hlX2hhc2hfY29kZSA9IGZhbHNlPgorICAgIGNsYXNzIF9fdW5vcmRlcmVkX211bHRpc2V0CisgICAgOiBwdWJsaWMgX0hhc2h0YWJsZTxfVmFsdWUsIF9WYWx1ZSwgX0FsbG9jLAorCQkJc3RkOjpfSWRlbnRpdHk8X1ZhbHVlPiwgX1ByZWQsCisJCQlfSGFzaCwgX19kZXRhaWw6Ol9Nb2RfcmFuZ2VfaGFzaGluZywKKwkJCV9fZGV0YWlsOjpfRGVmYXVsdF9yYW5nZWRfaGFzaCwKKwkJCV9fZGV0YWlsOjpfUHJpbWVfcmVoYXNoX3BvbGljeSwKKwkJCV9fY2FjaGVfaGFzaF9jb2RlLCB0cnVlLCBmYWxzZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9IYXNodGFibGU8X1ZhbHVlLCBfVmFsdWUsIF9BbGxvYywKKwkJCSBzdGQ6Ol9JZGVudGl0eTxfVmFsdWU+LCBfUHJlZCwKKwkJCSBfSGFzaCwgX19kZXRhaWw6Ol9Nb2RfcmFuZ2VfaGFzaGluZywKKwkJCSBfX2RldGFpbDo6X0RlZmF1bHRfcmFuZ2VkX2hhc2gsCisJCQkgX19kZXRhaWw6Ol9QcmltZV9yZWhhc2hfcG9saWN5LAorCQkJIF9fY2FjaGVfaGFzaF9jb2RlLCB0cnVlLCBmYWxzZT4KKyAgICAgICAgX0Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aGFzaGVyICAgICAgICAgIGhhc2hlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmtleV9lcXVhbCAgICAgICBrZXlfZXF1YWw7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSAgYWxsb2NhdG9yX3R5cGU7CisgICAgICAKKyAgICAgIGV4cGxpY2l0CisgICAgICBfX3Vub3JkZXJlZF9tdWx0aXNldChzaXplX3R5cGUgX19uID0gMTAsCisJCQkgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJCSAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJCSAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX24sIF9faGYsIF9fZGV0YWlsOjpfTW9kX3JhbmdlX2hhc2hpbmcoKSwKKwkgICAgICBfX2RldGFpbDo6X0RlZmF1bHRfcmFuZ2VkX2hhc2goKSwgX19lcWwsCisJICAgICAgc3RkOjpfSWRlbnRpdHk8X1ZhbHVlPigpLCBfX2EpCisgICAgICB7IH0KKworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgX191bm9yZGVyZWRfbXVsdGlzZXQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIAorCQkJICAgICB0eXBlbmFtZSBfQmFzZTo6c2l6ZV90eXBlIF9fbiA9IDAsCisJCQkgICAgIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLCAKKwkJCSAgICAgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLCAKKwkJCSAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfQmFzZShfX2YsIF9fbCwgX19uLCBfX2hmLCBfX2RldGFpbDo6X01vZF9yYW5nZV9oYXNoaW5nKCksCisJCV9fZGV0YWlsOjpfRGVmYXVsdF9yYW5nZWRfaGFzaCgpLCBfX2VxbCwKKwkJc3RkOjpfSWRlbnRpdHk8X1ZhbHVlPigpLCBfX2EpCisgICAgICAgIHsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfSGFzaCwgY2xhc3MgX1ByZWQsIGNsYXNzIF9BbGxvYywKKwkgICBib29sIF9fY2FjaGVfaGFzaF9jb2RlPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChfX3Vub3JkZXJlZF9zZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYywgX19jYWNoZV9oYXNoX2NvZGU+JiBfX3gsCisJIF9fdW5vcmRlcmVkX3NldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jLCBfX2NhY2hlX2hhc2hfY29kZT4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoLCBjbGFzcyBfUHJlZCwgY2xhc3MgX0FsbG9jLAorCSAgIGJvb2wgX19jYWNoZV9oYXNoX2NvZGU+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKF9fdW5vcmRlcmVkX211bHRpc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLAorCSBfQWxsb2MsIF9fY2FjaGVfaGFzaF9jb2RlPiYgX194LAorCSBfX3Vub3JkZXJlZF9tdWx0aXNldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwKKwkgX0FsbG9jLCBfX2NhY2hlX2hhc2hfY29kZT4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworCisgIC8qKgorICAgKiAgQGJyaWVmIEEgc3RhbmRhcmQgY29udGFpbmVyIGNvbXBvc2VkIG9mIHVuaXF1ZSBrZXlzIChjb250YWluaW5nCisgICAqICBhdCBtb3N0IG9uZSBvZiBlYWNoIGtleSB2YWx1ZSkgaW4gd2hpY2ggdGhlIGVsZW1lbnRzJyBrZXlzIGFyZQorICAgKiAgdGhlIGVsZW1lbnRzIHRoZW1zZWx2ZXMuCisgICAqCisgICAqICBAaW5ncm91cCB1bm9yZGVyZWRfYXNzb2NpYXRpdmVfY29udGFpbmVycworICAgKgorICAgKiAgTWVldHMgdGhlIHJlcXVpcmVtZW50cyBvZiBhIDxhIGhyZWY9InRhYmxlcy5odG1sIzY1Ij5jb250YWluZXI8L2E+LCBhbmQKKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sI3h4Ij51bm9yZGVyZWQgYXNzb2NpYXRpdmUgY29udGFpbmVyPC9hPgorICAgKgorICAgKiAgQHBhcmFtICBWYWx1ZSAgVHlwZSBvZiBrZXkgb2JqZWN0cy4KKyAgICogIEBwYXJhbSAgSGFzaCAgSGFzaGluZyBmdW5jdGlvbiBvYmplY3QgdHlwZSwgZGVmYXVsdHMgdG8gaGFzaDxWYWx1ZT4uCisgICAqICBAcGFyYW0gIFByZWQgIFByZWRpY2F0ZSBmdW5jdGlvbiBvYmplY3QgdHlwZSwgZGVmYXVsdHMgdG8gZXF1YWxfdG88VmFsdWU+LgorICAgKiAgQHBhcmFtICBBbGxvYyAgQWxsb2NhdG9yIHR5cGUsIGRlZmF1bHRzIHRvIGFsbG9jYXRvcjxLZXk+LgorICAgKi8KKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbHVlLAorCSAgIGNsYXNzIF9IYXNoID0gaGFzaDxfVmFsdWU+LAorCSAgIGNsYXNzIF9QcmVkID0gc3RkOjplcXVhbF90bzxfVmFsdWU+LAorCSAgIGNsYXNzIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPF9WYWx1ZT4gPgorICAgIGNsYXNzIHVub3JkZXJlZF9zZXQKKyAgICA6IHB1YmxpYyBfX3Vub3JkZXJlZF9zZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4KKyAgICB7CisgICAgICB0eXBlZGVmIF9fdW5vcmRlcmVkX3NldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiAgX0Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpoYXNoZXIgICAgICAgICAgaGFzaGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6a2V5X2VxdWFsICAgICAgIGtleV9lcXVhbDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlICBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIAorICAgICAgZXhwbGljaXQKKyAgICAgIHVub3JkZXJlZF9zZXQoc2l6ZV90eXBlIF9fbiA9IDEwLAorCQkgICAgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCSAgICBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCSAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19uLCBfX2hmLCBfX2VxbCwgX19hKQorICAgICAgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB1bm9yZGVyZWRfc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCAKKwkJICAgICAgc2l6ZV90eXBlIF9fbiA9IDEwLAorCQkgICAgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwgCisJCSAgICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwgCisJCSAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX0Jhc2UoX19mLCBfX2wsIF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKyAgICAgICAgeyB9CisgICAgfTsKKworICAvKioKKyAgICogIEBicmllZiBBIHN0YW5kYXJkIGNvbnRhaW5lciBjb21wb3NlZCBvZiBlcXVpdmFsZW50IGtleXMKKyAgICogIChwb3NzaWJseSBjb250YWluaW5nIG11bHRpcGxlIG9mIGVhY2gga2V5IHZhbHVlKSBpbiB3aGljaCB0aGUKKyAgICogIGVsZW1lbnRzJyBrZXlzIGFyZSB0aGUgZWxlbWVudHMgdGhlbXNlbHZlcy4KKyAgICoKKyAgICogIEBpbmdyb3VwIHVub3JkZXJlZF9hc3NvY2lhdGl2ZV9jb250YWluZXJzCisgICAqCisgICAqICBNZWV0cyB0aGUgcmVxdWlyZW1lbnRzIG9mIGEgPGEgaHJlZj0idGFibGVzLmh0bWwjNjUiPmNvbnRhaW5lcjwvYT4sIGFuZAorICAgKiAgPGEgaHJlZj0idGFibGVzLmh0bWwjeHgiPnVub3JkZXJlZCBhc3NvY2lhdGl2ZSBjb250YWluZXI8L2E+CisgICAqCisgICAqICBAcGFyYW0gIFZhbHVlICBUeXBlIG9mIGtleSBvYmplY3RzLgorICAgKiAgQHBhcmFtICBIYXNoICBIYXNoaW5nIGZ1bmN0aW9uIG9iamVjdCB0eXBlLCBkZWZhdWx0cyB0byBoYXNoPFZhbHVlPi4KKyAgICogIEBwYXJhbSAgUHJlZCAgUHJlZGljYXRlIGZ1bmN0aW9uIG9iamVjdCB0eXBlLCBkZWZhdWx0cyB0byBlcXVhbF90bzxWYWx1ZT4uCisgICAqICBAcGFyYW0gIEFsbG9jICBBbGxvY2F0b3IgdHlwZSwgZGVmYXVsdHMgdG8gYWxsb2NhdG9yPEtleT4uCisgICAqLworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsdWUsCisJICAgY2xhc3MgX0hhc2ggPSBoYXNoPF9WYWx1ZT4sCisJICAgY2xhc3MgX1ByZWQgPSBzdGQ6OmVxdWFsX3RvPF9WYWx1ZT4sCisJICAgY2xhc3MgX0FsbG9jID0gc3RkOjphbGxvY2F0b3I8X1ZhbHVlPiA+CisgICAgY2xhc3MgdW5vcmRlcmVkX211bHRpc2V0CisgICAgOiBwdWJsaWMgX191bm9yZGVyZWRfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4KKyAgICB7CisgICAgICB0eXBlZGVmIF9fdW5vcmRlcmVkX211bHRpc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+ICBfQmFzZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6c2l6ZV90eXBlICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Omhhc2hlciAgICAgICAgICBoYXNoZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjprZXlfZXF1YWwgICAgICAga2V5X2VxdWFsOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgIGFsbG9jYXRvcl90eXBlOworICAgICAgCisgICAgICBleHBsaWNpdAorICAgICAgdW5vcmRlcmVkX211bHRpc2V0KHNpemVfdHlwZSBfX24gPSAxMCwKKwkJCSBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJCSBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCQkgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKyAgICAgIHsgfQorCisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB1bm9yZGVyZWRfbXVsdGlzZXQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIAorCQkJICAgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSBfX24gPSAwLAorCQkJICAgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksIAorCQkJICAgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLCAKKwkJCSAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX0Jhc2UoX19mLCBfX2wsIF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKyAgICAgICAgeyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoLCBjbGFzcyBfUHJlZCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcCh1bm9yZGVyZWRfc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJIHVub3JkZXJlZF9zZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoLCBjbGFzcyBfUHJlZCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcCh1bm9yZGVyZWRfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgdW5vcmRlcmVkX211bHRpc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3kpCisgICAgeyBfX3guc3dhcChfX3kpOyB9Cit9Cit9CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS91dGlsaXR5IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvdXRpbGl0eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWFjMmIyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvdXRpbGl0eQpAQCAtMCwwICsxLDU2IEBACisvLyBUUjEgdXRpbGl0eSAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS91dGlsaXR5CisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX1VUSUxJVFkKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX1VUSUxJVFkgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpZiBkZWZpbmVkKF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgpCisjICBlcnJvciBUUjEgaGVhZGVyIGNhbm5vdCBiZSBpbmNsdWRlZCBmcm9tIEMrKzB4IGhlYWRlcgorI2VuZGlmCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX3JlbG9wcy5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX3BhaXIuaD4KKworI2lmIGRlZmluZWQoX0dMSUJDWFhfSU5DTFVERV9BU19UUjEpCisjICBpbmNsdWRlIDx0cjFfaW1wbC91dGlsaXR5PgorI2Vsc2UKKyMgIGRlZmluZSBfR0xJQkNYWF9JTkNMVURFX0FTX1RSMQorIyAgZGVmaW5lIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9UUjEgbmFtZXNwYWNlIHRyMSB7CisjICBkZWZpbmUgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9UUjEgfQorIyAgZGVmaW5lIF9HTElCQ1hYX1RSMSB0cjE6OgorIyAgaW5jbHVkZSA8dHIxX2ltcGwvdXRpbGl0eT4KKyMgIHVuZGVmIF9HTElCQ1hYX1RSMQorIyAgdW5kZWYgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9UUjEKKyMgIHVuZGVmIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9UUjEKKyMgIHVuZGVmIF9HTElCQ1hYX0lOQ0xVREVfQVNfVFIxCisjZW5kaWYKKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9VVElMSVRZCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS93Y2hhci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvd2NoYXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTk2MDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjEvd2NoYXIuaApAQCAtMCwwICsxLDM0IEBACisvLyBUUjEgd2NoYXIuaCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS93Y2hhci5oCisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX1dDSEFSX0gKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX1dDSEFSX0ggMQorCisjaW5jbHVkZSA8dHIxL2N3Y2hhcj4KKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9XQ0hBUl9ICmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS93Y3R5cGUuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxL3djdHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNDk0OGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMS93Y3R5cGUuaApAQCAtMCwwICsxLDM0IEBACisvLyBUUjEgd2N0eXBlLmggLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvd2N0eXBlLmgKKyAqICBUaGlzIGlzIGEgVFIxIEMrKyBMaWJyYXJ5IGhlYWRlci4gCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfV0NUWVBFX0gKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX1dDVFlQRV9IIDEKKworI2luY2x1ZGUgPHRyMS9jd2N0eXBlPgorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX1dDVFlQRV9ICmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMV9pbXBsL2FycmF5IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjFfaW1wbC9hcnJheQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGM0YWVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjFfaW1wbC9hcnJheQpAQCAtMCwwICsxLDI5MSBAQAorLy8gY2xhc3MgdGVtcGxhdGUgYXJyYXkgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjFfaW1wbC9hcnJheQorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCituYW1lc3BhY2Ugc3RkCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxCisKKyAgLyoqCisgICAqICBAYnJpZWYgQSBzdGFuZGFyZCBjb250YWluZXIgZm9yIHN0b3JpbmcgYSBmaXhlZCBzaXplIHNlcXVlbmNlIG9mIGVsZW1lbnRzLgorICAgKgorICAgKiAgQGluZ3JvdXAgc2VxdWVuY2VzCisgICAqCisgICAqICBNZWV0cyB0aGUgcmVxdWlyZW1lbnRzIG9mIGEgPGEgaHJlZj0idGFibGVzLmh0bWwjNjUiPmNvbnRhaW5lcjwvYT4sIGEKKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sIzY2Ij5yZXZlcnNpYmxlIGNvbnRhaW5lcjwvYT4sIGFuZCBhCisgICAqICA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2NyI+c2VxdWVuY2U8L2E+LgorICAgKgorICAgKiAgU2V0cyBzdXBwb3J0IHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzLgorICAgKgorICAgKiAgQHBhcmFtICBUcCAgVHlwZSBvZiBlbGVtZW50LiBSZXF1aXJlZCB0byBiZSBhIGNvbXBsZXRlIHR5cGUuCisgICAqICBAcGFyYW0gIE4gIE51bWJlciBvZiBlbGVtZW50cy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisgICAgc3RydWN0IGFycmF5CisgICAgeworICAgICAgdHlwZWRlZiBfVHAgCSAgICAJCQkgICAgICB2YWx1ZV90eXBlOworI2lmZGVmIF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgKKyAgICAgIHR5cGVkZWYgX1RwKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIGNvbnN0IF9UcCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9wb2ludGVyOworI2VuZGlmCisgICAgICB0eXBlZGVmIHZhbHVlX3R5cGUmICAgICAgICAgICAgICAgICAgIAkgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmICAgICAgICAgICAgIAkgICAgICBjb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHZhbHVlX3R5cGUqICAgICAgICAgIAkJICAgICAgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqCQkJICAgICAgY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHN0ZDo6c2l6ZV90ICAgICAgICAgICAgICAgICAgICAJICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OnB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICAJICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+CSAgICAgIHJldmVyc2VfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworCisgICAgICAvLyBTdXBwb3J0IGZvciB6ZXJvLXNpemVkIGFycmF5cyBtYW5kYXRvcnkuCisgICAgICB2YWx1ZV90eXBlIF9NX2luc3RhbmNlW19ObSA/IF9ObSA6IDFdOworCisgICAgICAvLyBObyBleHBsaWNpdCBjb25zdHJ1Y3QvY29weS9kZXN0cm95IGZvciBhZ2dyZWdhdGUgdHlwZS4KKworICAgICAgdm9pZAorI2lmZGVmIF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgKKyAgICAgIC8vIERSIDc3Ni4KKyAgICAgIGZpbGwoY29uc3QgdmFsdWVfdHlwZSYgX191KQorI2Vsc2UKKyAgICAgIGFzc2lnbihjb25zdCB2YWx1ZV90eXBlJiBfX3UpCisjZW5kaWYKKyAgICAgIHsgc3RkOjpmaWxsX24oYmVnaW4oKSwgc2l6ZSgpLCBfX3UpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoYXJyYXkmIF9fb3RoZXIpCisgICAgICB7IHN0ZDo6c3dhcF9yYW5nZXMoYmVnaW4oKSwgZW5kKCksIF9fb3RoZXIuYmVnaW4oKSk7IH0KKworICAgICAgLy8gSXRlcmF0b3JzLgorICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKCZfTV9pbnN0YW5jZVswXSk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QgCisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcigmX01faW5zdGFuY2VbMF0pOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoJl9NX2luc3RhbmNlW19ObV0pOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoJl9NX2luc3RhbmNlW19ObV0pOyB9CisKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IgCisgICAgICByYmVnaW4oKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciAKKyAgICAgIHJiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yIAorICAgICAgcmVuZCgpCisgICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgCisgICAgICByZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworI2lmZGVmIF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjYmVnaW4oKSBjb25zdCAKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKCZfTV9pbnN0YW5jZVswXSk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoJl9NX2luc3RhbmNlW19ObV0pOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgCisgICAgICBjcmJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgCisgICAgICBjcmVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisjZW5kaWYKKworICAgICAgLy8gQ2FwYWNpdHkuCisgICAgICBzaXplX3R5cGUgCisgICAgICBzaXplKCkgY29uc3QgeyByZXR1cm4gX05tOyB9CisKKyAgICAgIHNpemVfdHlwZSAKKyAgICAgIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX05tOyB9CisKKyAgICAgIGJvb2wgCisgICAgICBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHNpemUoKSA9PSAwOyB9CisKKyAgICAgIC8vIEVsZW1lbnQgYWNjZXNzLgorICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pCisgICAgICB7IHJldHVybiBfTV9pbnN0YW5jZVtfX25dOyB9CisKKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faW5zdGFuY2VbX19uXTsgfQorCisgICAgICByZWZlcmVuY2UKKyAgICAgIGF0KHNpemVfdHlwZSBfX24pCisgICAgICB7CisJaWYgKF9fbiA+PSBfTm0pCisJICBzdGQ6Ol9fdGhyb3dfb3V0X29mX3JhbmdlKF9fTigiYXJyYXk6OmF0IikpOworCXJldHVybiBfTV9pbnN0YW5jZVtfX25dOworICAgICAgfQorCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7CisJaWYgKF9fbiA+PSBfTm0pCisJICBzdGQ6Ol9fdGhyb3dfb3V0X29mX3JhbmdlKF9fTigiYXJyYXk6OmF0IikpOworCXJldHVybiBfTV9pbnN0YW5jZVtfX25dOworICAgICAgfQorCisgICAgICByZWZlcmVuY2UgCisgICAgICBmcm9udCgpCisgICAgICB7IHJldHVybiAqYmVnaW4oKTsgfQorCisgICAgICBjb25zdF9yZWZlcmVuY2UgCisgICAgICBmcm9udCgpIGNvbnN0CisgICAgICB7IHJldHVybiAqYmVnaW4oKTsgfQorCisgICAgICByZWZlcmVuY2UgCisgICAgICBiYWNrKCkKKyAgICAgIHsgcmV0dXJuIF9ObSA/ICooZW5kKCkgLSAxKSA6ICplbmQoKTsgfQorCisgICAgICBjb25zdF9yZWZlcmVuY2UgCisgICAgICBiYWNrKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9ObSA/ICooZW5kKCkgLSAxKSA6ICplbmQoKTsgfQorCisgICAgICBfVHAqIAorICAgICAgZGF0YSgpCisgICAgICB7IHJldHVybiAmX01faW5zdGFuY2VbMF07IH0KKworICAgICAgY29uc3QgX1RwKiAKKyAgICAgIGRhdGEoKSBjb25zdAorICAgICAgeyByZXR1cm4gJl9NX2luc3RhbmNlWzBdOyB9CisgICAgfTsKKworICAvLyBBcnJheSBjb21wYXJpc29ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisgICAgaW5saW5lIGJvb2wgCisgICAgb3BlcmF0b3I9PShjb25zdCBhcnJheTxfVHAsIF9ObT4mIF9fb25lLCBjb25zdCBhcnJheTxfVHAsIF9ObT4mIF9fdHdvKQorICAgIHsgcmV0dXJuIHN0ZDo6ZXF1YWwoX19vbmUuYmVnaW4oKSwgX19vbmUuZW5kKCksIF9fdHdvLmJlZ2luKCkpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IGFycmF5PF9UcCwgX05tPiYgX19vbmUsIGNvbnN0IGFycmF5PF9UcCwgX05tPiYgX190d28pCisgICAgeyByZXR1cm4gIShfX29uZSA9PSBfX3R3byk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBhcnJheTxfVHAsIF9ObT4mIF9fYSwgY29uc3QgYXJyYXk8X1RwLCBfTm0+JiBfX2IpCisgICAgeyAKKyAgICAgIHJldHVybiBzdGQ6OmxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9fYS5iZWdpbigpLCBfX2EuZW5kKCksCisJCQkJCSAgX19iLmJlZ2luKCksIF9fYi5lbmQoKSk7IAorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBhcnJheTxfVHAsIF9ObT4mIF9fb25lLCBjb25zdCBhcnJheTxfVHAsIF9ObT4mIF9fdHdvKQorICAgIHsgcmV0dXJuIF9fdHdvIDwgX19vbmU7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgYXJyYXk8X1RwLCBfTm0+JiBfX29uZSwgY29uc3QgYXJyYXk8X1RwLCBfTm0+JiBfX3R3bykKKyAgICB7IHJldHVybiAhKF9fb25lID4gX190d28pOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IGFycmF5PF9UcCwgX05tPiYgX19vbmUsIGNvbnN0IGFycmF5PF9UcCwgX05tPiYgX190d28pCisgICAgeyByZXR1cm4gIShfX29uZSA8IF9fdHdvKTsgfQorCisgIC8vIFNwZWNpYWxpemVkIGFsZ29yaXRobXMgWzYuMi4yLjJdLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoYXJyYXk8X1RwLCBfTm0+JiBfX29uZSwgYXJyYXk8X1RwLCBfTm0+JiBfX3R3bykKKyAgICB7IF9fb25lLnN3YXAoX190d28pOyB9CisKKyAgLy8gVHVwbGUgaW50ZXJmYWNlIHRvIGNsYXNzIHRlbXBsYXRlIGFycmF5IFs2LjIuMi41XS4KKworICAvLy8gdHVwbGVfc2l6ZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IAorICAgIGNsYXNzIHR1cGxlX3NpemU7CisKKyAgLy8vIHR1cGxlX2VsZW1lbnQKKyNpZmRlZiBfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IF9JbnQsIHR5cGVuYW1lIF9UcD4KKyNlbHNlCisgIHRlbXBsYXRlPGludCBfSW50LCB0eXBlbmFtZSBfVHA+CisjZW5kaWYKKyAgICBjbGFzcyB0dXBsZV9lbGVtZW50OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgc3RkOjpzaXplX3QgX05tPgorICAgIHN0cnVjdCB0dXBsZV9zaXplPGFycmF5PF9UcCwgX05tPiA+CisjaWZkZWYgX0dMSUJDWFhfSU5DTFVERV9BU19DWFgwWAorICAgIHsgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IHZhbHVlID0gX05tOyB9OworI2Vsc2UKKyAgICB7IHN0YXRpYyBjb25zdCBpbnQgdmFsdWUgPSBfTm07IH07CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyNpZmRlZiBfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYCisgICAgY29uc3Qgc3RkOjpzaXplX3QKKyNlbHNlCisgICAgY29uc3QgaW50CisjZW5kaWYKKyAgICB0dXBsZV9zaXplPGFycmF5PF9UcCwgX05tPiA+Ojp2YWx1ZTsgIAorCisjaWZkZWYgX0dMSUJDWFhfSU5DTFVERV9BU19DWFgwWAorICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfSW50LCB0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyNlbHNlCisgIHRlbXBsYXRlPGludCBfSW50LCB0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyNlbmRpZgorICAgIHN0cnVjdCB0dXBsZV9lbGVtZW50PF9JbnQsIGFycmF5PF9UcCwgX05tPiA+CisgICAgeyB0eXBlZGVmIF9UcCB0eXBlOyB9OworCisjaWZkZWYgX0dMSUJDWFhfSU5DTFVERV9BU19DWFgwWAorICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfSW50LCB0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyNlbHNlCisgIHRlbXBsYXRlPGludCBfSW50LCB0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyNlbmRpZgorICAgIGlubGluZSBfVHAmCisgICAgZ2V0KGFycmF5PF9UcCwgX05tPiYgX19hcnIpCisgICAgeyByZXR1cm4gX19hcnJbX0ludF07IH0KKworI2lmZGVmIF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgKKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX0ludCwgdHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisjZWxzZQorICB0ZW1wbGF0ZTxpbnQgX0ludCwgdHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisjZW5kaWYKKyAgICBpbmxpbmUgY29uc3QgX1RwJgorICAgIGdldChjb25zdCBhcnJheTxfVHAsIF9ObT4mIF9fYXJyKQorICAgIHsgcmV0dXJuIF9fYXJyW19JbnRdOyB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVFIxCit9CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMV9pbXBsL2Jvb3N0X3NwX2NvdW50ZWRfYmFzZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjFfaW1wbC9ib29zdF9zcF9jb3VudGVkX2Jhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjAzMDg1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjFfaW1wbC9ib29zdF9zcF9jb3VudGVkX2Jhc2UuaApAQCAtMCwwICsxLDI0MyBAQAorLy8gPHRyMV9pbXBsL2Jvb3N0X3NwX2NvdW50ZWRfYmFzZS5oPiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gIHNoYXJlZF9jb3VudC5ocHAKKy8vICBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDIsIDIwMDMgUGV0ZXIgRGltb3YgYW5kIE11bHRpIE1lZGlhIEx0ZC4KKworLy8gIHNoYXJlZF9wdHIuaHBwCisvLyAgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5IEdyZWcgQ29sdmluIGFuZCBCZW1hbiBEYXdlcy4KKy8vICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMgUGV0ZXIgRGltb3YKKworLy8gIHdlYWtfcHRyLmhwcAorLy8gIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMyBQZXRlciBEaW1vdgorCisvLyAgZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMuaHBwCisvLyAgQ29weXJpZ2h0IChDKSAyMDAyIFBldGVyIERpbW92CisKKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQorLy8gYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKKy8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLy8gR0NDIE5vdGU6ICBiYXNlZCBvbiB2ZXJzaW9uIDEuMzIuMCBvZiB0aGUgQm9vc3QgbGlicmFyeS4KKworLyoqIEBmaWxlIHRyMV9pbXBsL2Jvb3N0X3NwX2NvdW50ZWRfYmFzZS5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKworbmFtZXNwYWNlIHN0ZAoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMQorCisgLyoqCisgICAqICBAYnJpZWYgIEV4Y2VwdGlvbiBwb3NzaWJseSB0aHJvd24gYnkgQGMgc2hhcmVkX3B0ci4KKyAgICogIEBpbmdyb3VwIGV4Y2VwdGlvbnMKKyAgICovCisgIGNsYXNzIGJhZF93ZWFrX3B0ciA6IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbgorICB7CisgIHB1YmxpYzoKKyAgICB2aXJ0dWFsIGNoYXIgY29uc3QqCisgICAgd2hhdCgpIGNvbnN0IHRocm93KCkKKyNpZmRlZiBfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYCisgICAgeyByZXR1cm4gInN0ZDo6YmFkX3dlYWtfcHRyIjsgfQorI2Vsc2UKKyAgICB7IHJldHVybiAidHIxOjpiYWRfd2Vha19wdHIiOyB9CisjZW5kaWYKKyAgfTsKKworICAvLyBTdWJzdGl0dXRlIGZvciBiYWRfd2Vha19wdHIgb2JqZWN0IGluIHRoZSBjYXNlIG9mIC1mbm8tZXhjZXB0aW9ucy4KKyAgaW5saW5lIHZvaWQKKyAgX190aHJvd19iYWRfd2Vha19wdHIoKQorICB7CisjaWYgX19FWENFUFRJT05TCisgICAgdGhyb3cgYmFkX3dlYWtfcHRyKCk7CisjZWxzZQorICAgIF9fYnVpbHRpbl9hYm9ydCgpOworI2VuZGlmCisgIH0KKworICB1c2luZyBfX2dudV9jeHg6Ol9Mb2NrX3BvbGljeTsKKyAgdXNpbmcgX19nbnVfY3h4OjpfX2RlZmF1bHRfbG9ja19wb2xpY3k7CisgIHVzaW5nIF9fZ251X2N4eDo6X1Nfc2luZ2xlOworICB1c2luZyBfX2dudV9jeHg6Ol9TX211dGV4OworICB1c2luZyBfX2dudV9jeHg6Ol9TX2F0b21pYzsKKworICAvLyBFbXB0eSBoZWxwZXIgY2xhc3MgZXhjZXB0IHdoZW4gdGhlIHRlbXBsYXRlIGFyZ3VtZW50IGlzIF9TX211dGV4LgorICB0ZW1wbGF0ZTxfTG9ja19wb2xpY3kgX0xwPgorICAgIGNsYXNzIF9NdXRleF9iYXNlCisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIC8vIFRoZSBhdG9taWMgcG9saWN5IHVzZXMgZnVsbHktZmVuY2VkIGJ1aWx0aW5zLCBzaW5nbGUgZG9lc24ndCBjYXJlLgorICAgICAgZW51bSB7IF9TX25lZWRfYmFycmllcnMgPSAwIH07CisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgY2xhc3MgX011dGV4X2Jhc2U8X1NfbXV0ZXg+CisgICAgOiBwdWJsaWMgX19nbnVfY3h4OjpfX211dGV4CisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIC8vIFRoaXMgcG9saWN5IGlzIHVzZWQgd2hlbiBhdG9taWMgYnVpbHRpbnMgYXJlIG5vdCBhdmFpbGFibGUuCisgICAgICAvLyBUaGUgcmVwbGFjZW1lbnQgYXRvbWljIG9wZXJhdGlvbnMgbWlnaHQgbm90IGhhdmUgdGhlIG5lY2Vzc2FyeQorICAgICAgLy8gbWVtb3J5IGJhcnJpZXJzLgorICAgICAgZW51bSB7IF9TX25lZWRfYmFycmllcnMgPSAxIH07CisgICAgfTsKKworICB0ZW1wbGF0ZTxfTG9ja19wb2xpY3kgX0xwID0gX19kZWZhdWx0X2xvY2tfcG9saWN5PgorICAgIGNsYXNzIF9TcF9jb3VudGVkX2Jhc2UKKyAgICA6IHB1YmxpYyBfTXV0ZXhfYmFzZTxfTHA+CisgICAgeworICAgIHB1YmxpYzogIAorICAgICAgX1NwX2NvdW50ZWRfYmFzZSgpCisgICAgICA6IF9NX3VzZV9jb3VudCgxKSwgX01fd2Vha19jb3VudCgxKSB7IH0KKyAgICAgIAorICAgICAgdmlydHVhbAorICAgICAgfl9TcF9jb3VudGVkX2Jhc2UoKSAvLyBub3Rocm93IAorICAgICAgeyB9CisgIAorICAgICAgLy8gQ2FsbGVkIHdoZW4gX01fdXNlX2NvdW50IGRyb3BzIHRvIHplcm8sIHRvIHJlbGVhc2UgdGhlIHJlc291cmNlcworICAgICAgLy8gbWFuYWdlZCBieSAqdGhpcy4KKyAgICAgIHZpcnR1YWwgdm9pZAorICAgICAgX01fZGlzcG9zZSgpID0gMDsgLy8gbm90aHJvdworICAgICAgCisgICAgICAvLyBDYWxsZWQgd2hlbiBfTV93ZWFrX2NvdW50IGRyb3BzIHRvIHplcm8uCisgICAgICB2aXJ0dWFsIHZvaWQKKyAgICAgIF9NX2Rlc3Ryb3koKSAvLyBub3Rocm93CisgICAgICB7IGRlbGV0ZSB0aGlzOyB9CisgICAgICAKKyAgICAgIHZpcnR1YWwgdm9pZCoKKyAgICAgIF9NX2dldF9kZWxldGVyKGNvbnN0IHN0ZDo6dHlwZV9pbmZvJikgPSAwOworCisgICAgICB2b2lkCisgICAgICBfTV9hZGRfcmVmX2NvcHkoKQorICAgICAgeyBfX2dudV9jeHg6Ol9fYXRvbWljX2FkZF9kaXNwYXRjaCgmX01fdXNlX2NvdW50LCAxKTsgfQorICAKKyAgICAgIHZvaWQKKyAgICAgIF9NX2FkZF9yZWZfbG9jaygpOworICAgICAgCisgICAgICB2b2lkCisgICAgICBfTV9yZWxlYXNlKCkgLy8gbm90aHJvdworICAgICAgeworCWlmIChfX2dudV9jeHg6Ol9fZXhjaGFuZ2VfYW5kX2FkZF9kaXNwYXRjaCgmX01fdXNlX2NvdW50LCAtMSkgPT0gMSkKKwkgIHsKKwkgICAgX01fZGlzcG9zZSgpOworCSAgICAvLyBUaGVyZSBtdXN0IGJlIGEgbWVtb3J5IGJhcnJpZXIgYmV0d2VlbiBkaXNwb3NlKCkgYW5kIGRlc3Ryb3koKQorCSAgICAvLyB0byBlbnN1cmUgdGhhdCB0aGUgZWZmZWN0cyBvZiBkaXNwb3NlKCkgYXJlIG9ic2VydmVkIGluIHRoZQorCSAgICAvLyB0aHJlYWQgdGhhdCBydW5zIGRlc3Ryb3koKS4KKwkgICAgLy8gU2VlIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9saWJzdGRjKysvMjAwNS0xMS9tc2cwMDEzNi5odG1sCisJICAgIGlmIChfTXV0ZXhfYmFzZTxfTHA+OjpfU19uZWVkX2JhcnJpZXJzKQorCSAgICAgIHsKKwkgICAgICAgIF9HTElCQ1hYX1JFQURfTUVNX0JBUlJJRVI7CisJICAgICAgICBfR0xJQkNYWF9XUklURV9NRU1fQkFSUklFUjsKKwkgICAgICB9CisKKwkgICAgaWYgKF9fZ251X2N4eDo6X19leGNoYW5nZV9hbmRfYWRkX2Rpc3BhdGNoKCZfTV93ZWFrX2NvdW50LAorCQkJCQkJICAgICAgIC0xKSA9PSAxKQorCSAgICAgIF9NX2Rlc3Ryb3koKTsKKwkgIH0KKyAgICAgIH0KKyAgCisgICAgICB2b2lkCisgICAgICBfTV93ZWFrX2FkZF9yZWYoKSAvLyBub3Rocm93CisgICAgICB7IF9fZ251X2N4eDo6X19hdG9taWNfYWRkX2Rpc3BhdGNoKCZfTV93ZWFrX2NvdW50LCAxKTsgfQorCisgICAgICB2b2lkCisgICAgICBfTV93ZWFrX3JlbGVhc2UoKSAvLyBub3Rocm93CisgICAgICB7CisJaWYgKF9fZ251X2N4eDo6X19leGNoYW5nZV9hbmRfYWRkX2Rpc3BhdGNoKCZfTV93ZWFrX2NvdW50LCAtMSkgPT0gMSkKKwkgIHsKKwkgICAgaWYgKF9NdXRleF9iYXNlPF9McD46Ol9TX25lZWRfYmFycmllcnMpCisJICAgICAgeworCSAgICAgICAgLy8gU2VlIF9NX3JlbGVhc2UoKSwKKwkgICAgICAgIC8vIGRlc3Ryb3koKSBtdXN0IG9ic2VydmUgcmVzdWx0cyBvZiBkaXNwb3NlKCkKKwkgICAgICAgIF9HTElCQ1hYX1JFQURfTUVNX0JBUlJJRVI7CisJICAgICAgICBfR0xJQkNYWF9XUklURV9NRU1fQkFSUklFUjsKKwkgICAgICB9CisJICAgIF9NX2Rlc3Ryb3koKTsKKwkgIH0KKyAgICAgIH0KKyAgCisgICAgICBsb25nCisgICAgICBfTV9nZXRfdXNlX2NvdW50KCkgY29uc3QgLy8gbm90aHJvdworICAgICAgeworICAgICAgICAvLyBObyBtZW1vcnkgYmFycmllciBpcyB1c2VkIGhlcmUgc28gdGhlcmUgaXMgbm8gc3luY2hyb25pemF0aW9uCisgICAgICAgIC8vIHdpdGggb3RoZXIgdGhyZWFkcy4KKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3Qgdm9sYXRpbGUgX0F0b21pY193b3JkJj4oX01fdXNlX2NvdW50KTsKKyAgICAgIH0KKworICAgIHByaXZhdGU6ICAKKyAgICAgIF9TcF9jb3VudGVkX2Jhc2UoX1NwX2NvdW50ZWRfYmFzZSBjb25zdCYpOworICAgICAgX1NwX2NvdW50ZWRfYmFzZSYgb3BlcmF0b3I9KF9TcF9jb3VudGVkX2Jhc2UgY29uc3QmKTsKKworICAgICAgX0F0b21pY193b3JkICBfTV91c2VfY291bnQ7ICAgICAvLyAjc2hhcmVkCisgICAgICBfQXRvbWljX3dvcmQgIF9NX3dlYWtfY291bnQ7ICAgIC8vICN3ZWFrICsgKCNzaGFyZWQgIT0gMCkKKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9TcF9jb3VudGVkX2Jhc2U8X1Nfc2luZ2xlPjo6CisgICAgX01fYWRkX3JlZl9sb2NrKCkKKyAgICB7CisgICAgICBpZiAoX19nbnVfY3h4OjpfX2V4Y2hhbmdlX2FuZF9hZGRfZGlzcGF0Y2goJl9NX3VzZV9jb3VudCwgMSkgPT0gMCkKKwl7CisJICBfTV91c2VfY291bnQgPSAwOworCSAgX190aHJvd19iYWRfd2Vha19wdHIoKTsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9TcF9jb3VudGVkX2Jhc2U8X1NfbXV0ZXg+OjoKKyAgICBfTV9hZGRfcmVmX2xvY2soKQorICAgIHsKKyAgICAgIF9fZ251X2N4eDo6X19zY29wZWRfbG9jayBzZW50cnkoKnRoaXMpOworICAgICAgaWYgKF9fZ251X2N4eDo6X19leGNoYW5nZV9hbmRfYWRkX2Rpc3BhdGNoKCZfTV91c2VfY291bnQsIDEpID09IDApCisJeworCSAgX01fdXNlX2NvdW50ID0gMDsKKwkgIF9fdGhyb3dfYmFkX3dlYWtfcHRyKCk7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTw+IAorICAgIGlubGluZSB2b2lkCisgICAgX1NwX2NvdW50ZWRfYmFzZTxfU19hdG9taWM+OjoKKyAgICBfTV9hZGRfcmVmX2xvY2soKQorICAgIHsKKyAgICAgIC8vIFBlcmZvcm0gbG9jay1mcmVlIGFkZC1pZi1ub3QtemVybyBvcGVyYXRpb24uCisgICAgICBfQXRvbWljX3dvcmQgX19jb3VudDsKKyAgICAgIGRvCisJeworCSAgX19jb3VudCA9IF9NX3VzZV9jb3VudDsKKwkgIGlmIChfX2NvdW50ID09IDApCisJICAgIF9fdGhyb3dfYmFkX3dlYWtfcHRyKCk7CisJICAKKwkgIC8vIFJlcGxhY2UgdGhlIGN1cnJlbnQgY291bnRlciB2YWx1ZSB3aXRoIHRoZSBvbGQgdmFsdWUgKyAxLCBhcworCSAgLy8gbG9uZyBhcyBpdCdzIG5vdCBjaGFuZ2VkIG1lYW53aGlsZS4gCisJfQorICAgICAgd2hpbGUgKCFfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwKCZfTV91c2VfY291bnQsIF9fY291bnQsCisJCQkJCSAgIF9fY291bnQgKyAxKSk7CisgICAgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorfQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjFfaW1wbC9jY3R5cGUgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMV9pbXBsL2NjdHlwZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzZkMzhjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjFfaW1wbC9jY3R5cGUKQEAgLTAsMCArMSw0MyBAQAorLy8gVFIxIGNjdHlwZSAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMV9pbXBsL2NjdHlwZQorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9DVFlQRV9UUjEKKworI3VuZGVmIGlzYmxhbmsKKworbmFtZXNwYWNlIHN0ZAoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMQorCisgIHVzaW5nIDo6aXNibGFuazsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9UUjEKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMV9pbXBsL2NmZW52IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjFfaW1wbC9jZmVudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDc4YzdkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjFfaW1wbC9jZmVudgpAQCAtMCwwICsxLDcwIEBACisvLyBUUjEgY2ZlbnYgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjFfaW1wbC9jZmVudgorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9GRU5WX1RSMQorCisjdW5kZWYgZmVjbGVhcmV4Y2VwdAorI3VuZGVmIGZlZ2V0ZXhjZXB0ZmxhZworI3VuZGVmIGZlcmFpc2VleGNlcHQKKyN1bmRlZiBmZXNldGV4Y2VwdGZsYWcKKyN1bmRlZiBmZXRlc3RleGNlcHQKKyN1bmRlZiBmZWdldHJvdW5kCisjdW5kZWYgZmVzZXRyb3VuZAorI3VuZGVmIGZlZ2V0ZW52CisjdW5kZWYgZmVob2xkZXhjZXB0CisjdW5kZWYgZmVzZXRlbnYKKyN1bmRlZiBmZXVwZGF0ZWVudgorCituYW1lc3BhY2Ugc3RkCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxCisKKyAgLy8gdHlwZXMKKyAgdXNpbmcgOjpmZW52X3Q7CisgIHVzaW5nIDo6ZmV4Y2VwdF90OworCisgIC8vIGZ1bmN0aW9ucworICB1c2luZyA6OmZlY2xlYXJleGNlcHQ7CisgIHVzaW5nIDo6ZmVnZXRleGNlcHRmbGFnOworICB1c2luZyA6OmZlcmFpc2VleGNlcHQ7CisgIHVzaW5nIDo6ZmVzZXRleGNlcHRmbGFnOworICB1c2luZyA6OmZldGVzdGV4Y2VwdDsKKworICB1c2luZyA6OmZlZ2V0cm91bmQ7CisgIHVzaW5nIDo6ZmVzZXRyb3VuZDsKKworICB1c2luZyA6OmZlZ2V0ZW52OworICB1c2luZyA6OmZlaG9sZGV4Y2VwdDsKKyAgdXNpbmcgOjpmZXNldGVudjsKKyAgdXNpbmcgOjpmZXVwZGF0ZWVudjsKKyAgCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxX2ltcGwvY2ludHR5cGVzIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjFfaW1wbC9jaW50dHlwZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEwZjlmMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxX2ltcGwvY2ludHR5cGVzCkBAIC0wLDAgKzEsNjQgQEAKKy8vIFRSMSBjaW50dHlwZXMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjFfaW1wbC9jaW50dHlwZXMKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmIF9HTElCQ1hYX1VTRV9DOTlfSU5UVFlQRVNfVFIxCisKK25hbWVzcGFjZSBzdGQKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9UUjEKKworICAvLyB0eXBlcworICB1c2luZyA6OmltYXhkaXZfdDsKKworICAvLyBmdW5jdGlvbnMKKyAgdXNpbmcgOjppbWF4YWJzOworCisgIC8vIE1heSBjb2xsaWRlIHdpdGggX0xvbmdsb25nIGFicyhfTG9uZ2xvbmcpLCBhbmQgaXMgbm90IGRlc2NyaWJlZAorICAvLyBhbnl3aGVyZSBvdXRzaWRlIHRoZSBzeW5vcHNpcy4gIExpa2VseSwgYSBkZWZlY3QuCisgIC8vCisgIC8vIGludG1heF90IGFicyhpbnRtYXhfdCkKKworICB1c2luZyA6OmltYXhkaXY7CisKKyAgLy8gTGlrZXdpc2UsIHdpdGggbGxkaXZfdCBkaXYoX0xvbmdsb25nLCBfTG9uZ2xvbmcpLgorICAvLworICAvLyBpbWF4ZGl2X3QgZGl2KGludG1heF90LCBpbnRtYXhfdCkKKworICB1c2luZyA6OnN0cnRvaW1heDsKKyAgdXNpbmcgOjpzdHJ0b3VtYXg7CisKKyNpZiBkZWZpbmVkKF9HTElCQ1hYX1VTRV9XQ0hBUl9UKSAmJiBfR0xJQkNYWF9VU0VfQzk5X0lOVFRZUEVTX1dDSEFSX1RfVFIxCisgIHVzaW5nIDo6d2NzdG9pbWF4OworICB1c2luZyA6Ondjc3RvdW1heDsKKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxX2ltcGwvY21hdGggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMV9pbXBsL2NtYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MDczODAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMV9pbXBsL2NtYXRoCkBAIC0wLDAgKzEsOTAyIEBACisvLyBUUjEgY21hdGggLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjFfaW1wbC9jbWF0aAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorCisjdW5kZWYgYWNvc2gKKyN1bmRlZiBhY29zaGYKKyN1bmRlZiBhY29zaGwKKyN1bmRlZiBhc2luaAorI3VuZGVmIGFzaW5oZgorI3VuZGVmIGFzaW5obAorI3VuZGVmIGF0YW5oCisjdW5kZWYgYXRhbmhmCisjdW5kZWYgYXRhbmhsCisjdW5kZWYgY2JydAorI3VuZGVmIGNicnRmCisjdW5kZWYgY2JydGwKKyN1bmRlZiBjb3B5c2lnbgorI3VuZGVmIGNvcHlzaWduZgorI3VuZGVmIGNvcHlzaWdubAorI3VuZGVmIGVyZgorI3VuZGVmIGVyZmYKKyN1bmRlZiBlcmZsCisjdW5kZWYgZXJmYworI3VuZGVmIGVyZmNmCisjdW5kZWYgZXJmY2wKKyN1bmRlZiBleHAyCisjdW5kZWYgZXhwMmYKKyN1bmRlZiBleHAybAorI3VuZGVmIGV4cG0xCisjdW5kZWYgZXhwbTFmCisjdW5kZWYgZXhwbTFsCisjdW5kZWYgZmRpbQorI3VuZGVmIGZkaW1mCisjdW5kZWYgZmRpbWwKKyN1bmRlZiBmbWEKKyN1bmRlZiBmbWFmCisjdW5kZWYgZm1hbAorI3VuZGVmIGZtYXgKKyN1bmRlZiBmbWF4ZgorI3VuZGVmIGZtYXhsCisjdW5kZWYgZm1pbgorI3VuZGVmIGZtaW5mCisjdW5kZWYgZm1pbmwKKyN1bmRlZiBoeXBvdAorI3VuZGVmIGh5cG90ZgorI3VuZGVmIGh5cG90bAorI3VuZGVmIGlsb2diCisjdW5kZWYgaWxvZ2JmCisjdW5kZWYgaWxvZ2JsCisjdW5kZWYgbGdhbW1hCisjdW5kZWYgbGdhbW1hZgorI3VuZGVmIGxnYW1tYWwKKyN1bmRlZiBsbHJpbnQKKyN1bmRlZiBsbHJpbnRmCisjdW5kZWYgbGxyaW50bAorI3VuZGVmIGxscm91bmQKKyN1bmRlZiBsbHJvdW5kZgorI3VuZGVmIGxscm91bmRsCisjdW5kZWYgbG9nMXAKKyN1bmRlZiBsb2cxcGYKKyN1bmRlZiBsb2cxcGwKKyN1bmRlZiBsb2cyCisjdW5kZWYgbG9nMmYKKyN1bmRlZiBsb2cybAorI3VuZGVmIGxvZ2IKKyN1bmRlZiBsb2diZgorI3VuZGVmIGxvZ2JsCisjdW5kZWYgbHJpbnQKKyN1bmRlZiBscmludGYKKyN1bmRlZiBscmludGwKKyN1bmRlZiBscm91bmQKKyN1bmRlZiBscm91bmRmCisjdW5kZWYgbHJvdW5kbAorI3VuZGVmIG5hbgorI3VuZGVmIG5hbmYKKyN1bmRlZiBuYW5sCisjdW5kZWYgbmVhcmJ5aW50CisjdW5kZWYgbmVhcmJ5aW50ZgorI3VuZGVmIG5lYXJieWludGwKKyN1bmRlZiBuZXh0YWZ0ZXIKKyN1bmRlZiBuZXh0YWZ0ZXJmCisjdW5kZWYgbmV4dGFmdGVybAorI3VuZGVmIG5leHR0b3dhcmQKKyN1bmRlZiBuZXh0dG93YXJkZgorI3VuZGVmIG5leHR0b3dhcmRsCisjdW5kZWYgcmVtYWluZGVyCisjdW5kZWYgcmVtYWluZGVyZgorI3VuZGVmIHJlbWFpbmRlcmwKKyN1bmRlZiByZW1xdW8KKyN1bmRlZiByZW1xdW9mCisjdW5kZWYgcmVtcXVvbAorI3VuZGVmIHJpbnQKKyN1bmRlZiByaW50ZgorI3VuZGVmIHJpbnRsCisjdW5kZWYgcm91bmQKKyN1bmRlZiByb3VuZGYKKyN1bmRlZiByb3VuZGwKKyN1bmRlZiBzY2FsYmxuCisjdW5kZWYgc2NhbGJsbmYKKyN1bmRlZiBzY2FsYmxubAorI3VuZGVmIHNjYWxibgorI3VuZGVmIHNjYWxibmYKKyN1bmRlZiBzY2FsYm5sCisjdW5kZWYgdGdhbW1hCisjdW5kZWYgdGdhbW1hZgorI3VuZGVmIHRnYW1tYWwKKyN1bmRlZiB0cnVuYworI3VuZGVmIHRydW5jZgorI3VuZGVmIHRydW5jbAorCisjZW5kaWYKKworbmFtZXNwYWNlIHN0ZAoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMQorCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorCisgIC8vIHR5cGVzCisgIHVzaW5nIDo6ZG91YmxlX3Q7CisgIHVzaW5nIDo6ZmxvYXRfdDsKKworICAvLyBmdW5jdGlvbnMKKyAgdXNpbmcgOjphY29zaDsKKyAgdXNpbmcgOjphY29zaGY7CisgIHVzaW5nIDo6YWNvc2hsOworCisgIHVzaW5nIDo6YXNpbmg7CisgIHVzaW5nIDo6YXNpbmhmOworICB1c2luZyA6OmFzaW5obDsKKworICB1c2luZyA6OmF0YW5oOworICB1c2luZyA6OmF0YW5oZjsKKyAgdXNpbmcgOjphdGFuaGw7CisKKyAgdXNpbmcgOjpjYnJ0OworICB1c2luZyA6OmNicnRmOworICB1c2luZyA6OmNicnRsOworCisgIHVzaW5nIDo6Y29weXNpZ247CisgIHVzaW5nIDo6Y29weXNpZ25mOworICB1c2luZyA6OmNvcHlzaWdubDsKKworICB1c2luZyA6OmVyZjsKKyAgdXNpbmcgOjplcmZmOworICB1c2luZyA6OmVyZmw7CisKKyAgdXNpbmcgOjplcmZjOworICB1c2luZyA6OmVyZmNmOworICB1c2luZyA6OmVyZmNsOworCisgIHVzaW5nIDo6ZXhwMjsKKyAgdXNpbmcgOjpleHAyZjsKKyAgdXNpbmcgOjpleHAybDsKKworICB1c2luZyA6OmV4cG0xOworICB1c2luZyA6OmV4cG0xZjsKKyAgdXNpbmcgOjpleHBtMWw7CisKKyAgdXNpbmcgOjpmZGltOworICB1c2luZyA6OmZkaW1mOworICB1c2luZyA6OmZkaW1sOworCisgIHVzaW5nIDo6Zm1hOworICB1c2luZyA6OmZtYWY7CisgIHVzaW5nIDo6Zm1hbDsKKworICB1c2luZyA6OmZtYXg7CisgIHVzaW5nIDo6Zm1heGY7CisgIHVzaW5nIDo6Zm1heGw7CisKKyAgdXNpbmcgOjpmbWluOworICB1c2luZyA6OmZtaW5mOworICB1c2luZyA6OmZtaW5sOworCisgIHVzaW5nIDo6aHlwb3Q7CisgIHVzaW5nIDo6aHlwb3RmOworICB1c2luZyA6Omh5cG90bDsKKworICB1c2luZyA6Omlsb2diOworICB1c2luZyA6Omlsb2diZjsKKyAgdXNpbmcgOjppbG9nYmw7CisKKyAgdXNpbmcgOjpsZ2FtbWE7CisgIHVzaW5nIDo6bGdhbW1hZjsKKyAgdXNpbmcgOjpsZ2FtbWFsOworCisgIHVzaW5nIDo6bGxyaW50OworICB1c2luZyA6OmxscmludGY7CisgIHVzaW5nIDo6bGxyaW50bDsKKworICB1c2luZyA6Omxscm91bmQ7CisgIHVzaW5nIDo6bGxyb3VuZGY7CisgIHVzaW5nIDo6bGxyb3VuZGw7CisKKyAgdXNpbmcgOjpsb2cxcDsKKyAgdXNpbmcgOjpsb2cxcGY7CisgIHVzaW5nIDo6bG9nMXBsOworCisgIHVzaW5nIDo6bG9nMjsKKyAgdXNpbmcgOjpsb2cyZjsKKyAgdXNpbmcgOjpsb2cybDsKKworICB1c2luZyA6OmxvZ2I7CisgIHVzaW5nIDo6bG9nYmY7CisgIHVzaW5nIDo6bG9nYmw7CisKKyAgdXNpbmcgOjpscmludDsKKyAgdXNpbmcgOjpscmludGY7CisgIHVzaW5nIDo6bHJpbnRsOworCisgIHVzaW5nIDo6bHJvdW5kOworICB1c2luZyA6Omxyb3VuZGY7CisgIHVzaW5nIDo6bHJvdW5kbDsKKworICB1c2luZyA6Om5hbjsKKyAgdXNpbmcgOjpuYW5mOworICB1c2luZyA6Om5hbmw7CisKKyAgdXNpbmcgOjpuZWFyYnlpbnQ7CisgIHVzaW5nIDo6bmVhcmJ5aW50ZjsKKyAgdXNpbmcgOjpuZWFyYnlpbnRsOworCisgIHVzaW5nIDo6bmV4dGFmdGVyOworICB1c2luZyA6Om5leHRhZnRlcmY7CisgIHVzaW5nIDo6bmV4dGFmdGVybDsKKworICB1c2luZyA6Om5leHR0b3dhcmQ7CisgIHVzaW5nIDo6bmV4dHRvd2FyZGY7CisgIHVzaW5nIDo6bmV4dHRvd2FyZGw7CisKKyAgdXNpbmcgOjpyZW1haW5kZXI7CisgIHVzaW5nIDo6cmVtYWluZGVyZjsKKyAgdXNpbmcgOjpyZW1haW5kZXJsOworCisgIHVzaW5nIDo6cmVtcXVvOworICB1c2luZyA6OnJlbXF1b2Y7CisgIHVzaW5nIDo6cmVtcXVvbDsKKworICB1c2luZyA6OnJpbnQ7CisgIHVzaW5nIDo6cmludGY7CisgIHVzaW5nIDo6cmludGw7CisKKyAgdXNpbmcgOjpyb3VuZDsKKyAgdXNpbmcgOjpyb3VuZGY7CisgIHVzaW5nIDo6cm91bmRsOworCisgIHVzaW5nIDo6c2NhbGJsbjsKKyAgdXNpbmcgOjpzY2FsYmxuZjsKKyAgdXNpbmcgOjpzY2FsYmxubDsKKworICB1c2luZyA6OnNjYWxibjsKKyAgdXNpbmcgOjpzY2FsYm5mOworICB1c2luZyA6OnNjYWxibmw7CisKKyAgdXNpbmcgOjp0Z2FtbWE7CisgIHVzaW5nIDo6dGdhbW1hZjsKKyAgdXNpbmcgOjp0Z2FtbWFsOworCisgIHVzaW5nIDo6dHJ1bmM7CisgIHVzaW5nIDo6dHJ1bmNmOworICB1c2luZyA6OnRydW5jbDsKKworI2VuZGlmCisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEgKKyNpZiAhX0dMSUJDWFhfVVNFX0M5OV9GUF9NQUNST1NfRFlOQU1JQworCisgIC8vLyBGdW5jdGlvbiB0ZW1wbGF0ZSBkZWZpbml0aW9ucyBbOC4xNi4zXS4KKyAgdXNpbmcgc3RkOjpzaWduYml0OworICAKKyAgdXNpbmcgc3RkOjpmcGNsYXNzaWZ5OworCisgIHVzaW5nIHN0ZDo6aXNmaW5pdGU7CisgIHVzaW5nIHN0ZDo6aXNpbmY7CisgIHVzaW5nIHN0ZDo6aXNuYW47CisgIHVzaW5nIHN0ZDo6aXNub3JtYWw7CisKKyAgdXNpbmcgc3RkOjppc2dyZWF0ZXI7CisgIHVzaW5nIHN0ZDo6aXNncmVhdGVyZXF1YWw7CisgIHVzaW5nIHN0ZDo6aXNsZXNzOworICB1c2luZyBzdGQ6OmlzbGVzc2VxdWFsOworICB1c2luZyBzdGQ6OmlzbGVzc2dyZWF0ZXI7CisgIHVzaW5nIHN0ZDo6aXN1bm9yZGVyZWQ7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorCisgIC8vLyBBZGRpdGlvbmFsIG92ZXJsb2FkcyBbOC4xNi40XS4KKyAgdXNpbmcgc3RkOjphY29zOworCisgIGlubGluZSBmbG9hdAorICBhY29zaChmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9hY29zaGYoX194KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBhY29zaChsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9hY29zaGwoX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIAorICAgIGFjb3NoKF9UcCBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIGFjb3NoKF9fdHlwZShfX3gpKTsKKyAgICB9CisKKyAgdXNpbmcgc3RkOjphc2luOworCisgIGlubGluZSBmbG9hdAorICBhc2luaChmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9hc2luaGYoX194KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBhc2luaChsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9hc2luaGwoX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIAorICAgIGFzaW5oKF9UcCBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIGFzaW5oKF9fdHlwZShfX3gpKTsKKyAgICB9CisKKyAgdXNpbmcgc3RkOjphdGFuOworICB1c2luZyBzdGQ6OmF0YW4yOworCisgIGlubGluZSBmbG9hdAorICBhdGFuaChmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9hdGFuaGYoX194KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBhdGFuaChsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9hdGFuaGwoX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIAorICAgIGF0YW5oKF9UcCBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIGF0YW5oKF9fdHlwZShfX3gpKTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIGNicnQoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2JydGYoX194KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBjYnJ0KGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2NicnRsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSAKKyAgICBjYnJ0KF9UcCBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIGNicnQoX190eXBlKF9feCkpOworICAgIH0KKworICB1c2luZyBzdGQ6OmNlaWw7CisKKyAgaW5saW5lIGZsb2F0CisgIGNvcHlzaWduKGZsb2F0IF9feCwgZmxvYXQgX195KQorICB7IHJldHVybiBfX2J1aWx0aW5fY29weXNpZ25mKF9feCwgX195KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBjb3B5c2lnbihsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkKKyAgeyByZXR1cm4gX19idWlsdGluX2NvcHlzaWdubChfX3gsIF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZQorICAgIGNvcHlzaWduKF9UcCBfX3gsIF9VcCBfX3kpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBjb3B5c2lnbihfX3R5cGUoX194KSwgX190eXBlKF9feSkpOworICAgIH0KKworICB1c2luZyBzdGQ6OmNvczsKKyAgdXNpbmcgc3RkOjpjb3NoOyAgCisKKyAgaW5saW5lIGZsb2F0CisgIGVyZihmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9lcmZmKF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgZXJmKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2VyZmwoX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIAorICAgIGVyZihfVHAgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBlcmYoX190eXBlKF9feCkpOworICAgIH0KKworICBpbmxpbmUgZmxvYXQKKyAgZXJmYyhmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9lcmZjZihfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGVyZmMobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fZXJmY2woX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIAorICAgIGVyZmMoX1RwIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gZXJmYyhfX3R5cGUoX194KSk7CisgICAgfQorCisgIHVzaW5nIHN0ZDo6ZXhwOworCisgIGlubGluZSBmbG9hdAorICBleHAyKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2V4cDJmKF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgZXhwMihsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9leHAybChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgCisgICAgZXhwMihfVHAgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBleHAyKF9fdHlwZShfX3gpKTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIGV4cG0xKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2V4cG0xZihfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGV4cG0xKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2V4cG0xbChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgCisgICAgZXhwbTEoX1RwIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gZXhwbTEoX190eXBlKF9feCkpOworICAgIH0KKworICB1c2luZyBzdGQ6OmZhYnM7CisKKyAgaW5saW5lIGZsb2F0CisgIGZkaW0oZmxvYXQgX194LCBmbG9hdCBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9mZGltZihfX3gsIF9feSk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgZmRpbShsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkKKyAgeyByZXR1cm4gX19idWlsdGluX2ZkaW1sKF9feCwgX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlCisgICAgZmRpbShfVHAgX194LCBfVXAgX195KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gZmRpbShfX3R5cGUoX194KSwgX190eXBlKF9feSkpOworICAgIH0KKworICB1c2luZyBzdGQ6OmZsb29yOworCisgIGlubGluZSBmbG9hdAorICBmbWEoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0IF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2ZtYWYoX194LCBfX3ksIF9feik7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgZm1hKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9mbWFsKF9feCwgX195LCBfX3opOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXAsIHR5cGVuYW1lIF9WcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMzxfVHAsIF9VcCwgX1ZwPjo6X190eXBlCisgICAgZm1hKF9UcCBfX3gsIF9VcCBfX3ksIF9WcCBfX3opCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8zPF9UcCwgX1VwLCBfVnA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIGZtYShfX3R5cGUoX194KSwgX190eXBlKF9feSksIF9fdHlwZShfX3opKTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIGZtYXgoZmxvYXQgX194LCBmbG9hdCBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9mbWF4ZihfX3gsIF9feSk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgZm1heChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkKKyAgeyByZXR1cm4gX19idWlsdGluX2ZtYXhsKF9feCwgX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlCisgICAgZm1heChfVHAgX194LCBfVXAgX195KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gZm1heChfX3R5cGUoX194KSwgX190eXBlKF9feSkpOworICAgIH0KKworICBpbmxpbmUgZmxvYXQKKyAgZm1pbihmbG9hdCBfX3gsIGZsb2F0IF9feSkKKyAgeyByZXR1cm4gX19idWlsdGluX2ZtaW5mKF9feCwgX195KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBmbWluKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KQorICB7IHJldHVybiBfX2J1aWx0aW5fZm1pbmwoX194LCBfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGUKKyAgICBmbWluKF9UcCBfX3gsIF9VcCBfX3kpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBmbWluKF9fdHlwZShfX3gpLCBfX3R5cGUoX195KSk7CisgICAgfQorCisgIHVzaW5nIHN0ZDo6Zm1vZDsKKyAgdXNpbmcgc3RkOjpmcmV4cDsKKworICBpbmxpbmUgZmxvYXQKKyAgaHlwb3QoZmxvYXQgX194LCBmbG9hdCBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9oeXBvdGYoX194LCBfX3kpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGh5cG90KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KQorICB7IHJldHVybiBfX2J1aWx0aW5faHlwb3RsKF9feCwgX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlCisgICAgaHlwb3QoX1RwIF9feCwgX1VwIF9feSkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIGh5cG90KF9fdHlwZShfX3gpLCBfX3R5cGUoX195KSk7CisgICAgfQorCisgIGlubGluZSBpbnQKKyAgaWxvZ2IoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5faWxvZ2JmKF9feCk7IH0KKworICBpbmxpbmUgaW50CisgIGlsb2diKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2lsb2dibChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBpbnQKKyAgICBpbG9nYihfVHAgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBpbG9nYihfX3R5cGUoX194KSk7CisgICAgfQorCisgIHVzaW5nIHN0ZDo6bGRleHA7CisKKyAgaW5saW5lIGZsb2F0CisgIGxnYW1tYShmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9sZ2FtbWFmKF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgbGdhbW1hKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2xnYW1tYWwoX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIAorICAgIGxnYW1tYShfVHAgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBsZ2FtbWEoX190eXBlKF9feCkpOworICAgIH0KKworICBpbmxpbmUgbG9uZyBsb25nCisgIGxscmludChmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9sbHJpbnRmKF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBsb25nCisgIGxscmludChsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9sbHJpbnRsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGxvbmcgbG9uZworICAgIGxscmludChfVHAgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBsbHJpbnQoX190eXBlKF9feCkpOworICAgIH0KKworICBpbmxpbmUgbG9uZyBsb25nCisgIGxscm91bmQoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fbGxyb3VuZGYoX194KTsgfQorCisgIGlubGluZSBsb25nIGxvbmcKKyAgbGxyb3VuZChsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9sbHJvdW5kbChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBsb25nIGxvbmcKKyAgICBsbHJvdW5kKF9UcCBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIGxscm91bmQoX190eXBlKF9feCkpOworICAgIH0KKworICB1c2luZyBzdGQ6OmxvZzsKKyAgdXNpbmcgc3RkOjpsb2cxMDsKKworICBpbmxpbmUgZmxvYXQKKyAgbG9nMXAoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fbG9nMXBmKF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgbG9nMXAobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fbG9nMXBsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSAKKyAgICBsb2cxcChfVHAgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBsb2cxcChfX3R5cGUoX194KSk7CisgICAgfQorCisgIC8vIERSIDU2OC4KKyAgaW5saW5lIGZsb2F0CisgIGxvZzIoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fbG9nMmYoX194KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBsb2cyKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2xvZzJsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSAKKyAgICBsb2cyKF9UcCBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIGxvZzIoX190eXBlKF9feCkpOworICAgIH0KKworICBpbmxpbmUgZmxvYXQKKyAgbG9nYihmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9sb2diZihfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGxvZ2IobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fbG9nYmwoX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIAorICAgIGxvZ2IoX1RwIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gbG9nYihfX3R5cGUoX194KSk7CisgICAgfQorCisgIGlubGluZSBsb25nCisgIGxyaW50KGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2xyaW50ZihfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcKKyAgbHJpbnQobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fbHJpbnRsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGxvbmcKKyAgICBscmludChfVHAgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBscmludChfX3R5cGUoX194KSk7CisgICAgfQorCisgIGlubGluZSBsb25nCisgIGxyb3VuZChmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9scm91bmRmKF9feCk7IH0KKworICBpbmxpbmUgbG9uZworICBscm91bmQobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fbHJvdW5kbChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBsb25nCisgICAgbHJvdW5kKF9UcCBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIGxyb3VuZChfX3R5cGUoX194KSk7CisgICAgfQorCisgIGlubGluZSBmbG9hdAorICBuZWFyYnlpbnQoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fbmVhcmJ5aW50ZihfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIG5lYXJieWludChsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9uZWFyYnlpbnRsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSAKKyAgICBuZWFyYnlpbnQoX1RwIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gbmVhcmJ5aW50KF9fdHlwZShfX3gpKTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIG5leHRhZnRlcihmbG9hdCBfX3gsIGZsb2F0IF9feSkKKyAgeyByZXR1cm4gX19idWlsdGluX25leHRhZnRlcmYoX194LCBfX3kpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIG5leHRhZnRlcihsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkKKyAgeyByZXR1cm4gX19idWlsdGluX25leHRhZnRlcmwoX194LCBfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGUKKyAgICBuZXh0YWZ0ZXIoX1RwIF9feCwgX1VwIF9feSkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIG5leHRhZnRlcihfX3R5cGUoX194KSwgX190eXBlKF9feSkpOworICAgIH0KKworICBpbmxpbmUgZmxvYXQKKyAgbmV4dHRvd2FyZChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9feSkKKyAgeyByZXR1cm4gX19idWlsdGluX25leHR0b3dhcmRmKF9feCwgX195KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBuZXh0dG93YXJkKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KQorICB7IHJldHVybiBfX2J1aWx0aW5fbmV4dHRvd2FyZGwoX194LCBfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUKKyAgICBuZXh0dG93YXJkKF9UcCBfX3gsIGxvbmcgZG91YmxlIF9feSkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gbmV4dHRvd2FyZChfX3R5cGUoX194KSwgX195KTsKKyAgICB9CisKKyAgLy8gRFIgNTUwLiBXaGF0IHNob3VsZCB0aGUgcmV0dXJuIHR5cGUgb2YgcG93KGZsb2F0LGludCkgYmU/CisgIC8vIE5COiBDKysweCBhbmQgVFIxICE9IEMrKzAzLgorICAvLyAgIHVzaW5nIHN0ZDo6cG93OworCisgIGlubGluZSBmbG9hdAorICByZW1haW5kZXIoZmxvYXQgX194LCBmbG9hdCBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9yZW1haW5kZXJmKF9feCwgX195KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICByZW1haW5kZXIobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9yZW1haW5kZXJsKF9feCwgX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlCisgICAgcmVtYWluZGVyKF9UcCBfX3gsIF9VcCBfX3kpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiByZW1haW5kZXIoX190eXBlKF9feCksIF9fdHlwZShfX3kpKTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIHJlbXF1byhmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50KiBfX3BxdW8pCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9yZW1xdW9mKF9feCwgX195LCBfX3BxdW8pOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIHJlbXF1byhsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgaW50KiBfX3BxdW8pCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9yZW1xdW9sKF9feCwgX195LCBfX3BxdW8pOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGUKKyAgICByZW1xdW8oX1RwIF9feCwgX1VwIF9feSwgaW50KiBfX3BxdW8pCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiByZW1xdW8oX190eXBlKF9feCksIF9fdHlwZShfX3kpLCBfX3BxdW8pOworICAgIH0KKworICBpbmxpbmUgZmxvYXQKKyAgcmludChmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9yaW50ZihfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIHJpbnQobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fcmludGwoX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlCisgICAgcmludChfVHAgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiByaW50KF9fdHlwZShfX3gpKTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIHJvdW5kKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX3JvdW5kZihfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIHJvdW5kKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX3JvdW5kbChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUKKyAgICByb3VuZChfVHAgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiByb3VuZChfX3R5cGUoX194KSk7CisgICAgfQorCisgIGlubGluZSBmbG9hdAorICBzY2FsYmxuKGZsb2F0IF9feCwgbG9uZyBfX2V4KQorICB7IHJldHVybiBfX2J1aWx0aW5fc2NhbGJsbmYoX194LCBfX2V4KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBzY2FsYmxuKGxvbmcgZG91YmxlIF9feCwgbG9uZyBfX2V4KQorICB7IHJldHVybiBfX2J1aWx0aW5fc2NhbGJsbmwoX194LCBfX2V4KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIAorICAgIHNjYWxibG4oX1RwIF9feCwgbG9uZyBfX2V4KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBzY2FsYmxuKF9fdHlwZShfX3gpLCBfX2V4KTsKKyAgICB9CisgCisgIGlubGluZSBmbG9hdAorICBzY2FsYm4oZmxvYXQgX194LCBpbnQgX19leCkKKyAgeyByZXR1cm4gX19idWlsdGluX3NjYWxibmYoX194LCBfX2V4KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBzY2FsYm4obG9uZyBkb3VibGUgX194LCBpbnQgX19leCkKKyAgeyByZXR1cm4gX19idWlsdGluX3NjYWxibmwoX194LCBfX2V4KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIAorICAgIHNjYWxibihfVHAgX194LCBpbnQgX19leCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gc2NhbGJuKF9fdHlwZShfX3gpLCBfX2V4KTsKKyAgICB9CisKKyAgdXNpbmcgc3RkOjpzaW47CisgIHVzaW5nIHN0ZDo6c2luaDsKKyAgdXNpbmcgc3RkOjpzcXJ0OworICB1c2luZyBzdGQ6OnRhbjsKKyAgdXNpbmcgc3RkOjp0YW5oOworCisgIGlubGluZSBmbG9hdAorICB0Z2FtbWEoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fdGdhbW1hZihfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIHRnYW1tYShsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl90Z2FtbWFsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSAKKyAgICB0Z2FtbWEoX1RwIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gdGdhbW1hKF9fdHlwZShfX3gpKTsKKyAgICB9CisgCisgIGlubGluZSBmbG9hdAorICB0cnVuYyhmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl90cnVuY2YoX194KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICB0cnVuYyhsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl90cnVuY2woX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIAorICAgIHRydW5jKF9UcCBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIHRydW5jKF9fdHlwZShfX3gpKTsKKyAgICB9CisKKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorfQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjFfaW1wbC9jb21wbGV4IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjFfaW1wbC9jb21wbGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZTRhMTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMV9pbXBsL2NvbXBsZXgKQEAgLTAsMCArMSwzNzAgQEAKKy8vIFRSMSBjb21wbGV4IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxX2ltcGwvY29tcGxleAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCituYW1lc3BhY2Ugc3RkCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIGNvbXBsZXhfbnVtYmVycworICAgKiBAeworICAgKi8KKworICAvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdGQ6OmNvbXBsZXg8X1RwPiBhY29zKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+Jik7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RkOjpjb21wbGV4PF9UcD4gYXNpbihjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYpOworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0ZDo6Y29tcGxleDxfVHA+IGF0YW4oY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0ZDo6Y29tcGxleDxfVHA+IGFjb3NoKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+Jik7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RkOjpjb21wbGV4PF9UcD4gYXNpbmgoY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mKTsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdGQ6OmNvbXBsZXg8X1RwPiBhdGFuaChjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYpOworI2lmZGVmIF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgKKyAgLy8gRFIgNTk1LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCAgICAgICAgICAgICAgIGZhYnMoY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mKTsKKyNlbHNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RkOjpjb21wbGV4PF9UcD4gZmFicyhjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYpOworI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIF9fY29tcGxleF9hY29zKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeworICAgICAgY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4gX190ID0gc3RkOjpfR0xJQkNYWF9UUjEgYXNpbihfX3opOworICAgICAgY29uc3QgX1RwIF9fcGlfMiA9IDEuNTcwNzk2MzI2Nzk0ODk2NjE5MjMxMzIxNjkxNjM5NzUxNEw7CisgICAgICByZXR1cm4gc3RkOjpjb21wbGV4PF9UcD4oX19waV8yIC0gX190LnJlYWwoKSwgLV9fdC5pbWFnKCkpOworICAgIH0KKworI2lmIF9HTElCQ1hYX1VTRV9DOTlfQ09NUExFWF9UUjEKKyAgaW5saW5lIF9fY29tcGxleF9fIGZsb2F0CisgIF9fY29tcGxleF9hY29zKF9fY29tcGxleF9fIGZsb2F0IF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2NhY29zZihfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGRvdWJsZQorICBfX2NvbXBsZXhfYWNvcyhfX2NvbXBsZXhfXyBkb3VibGUgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2Fjb3MoX196KTsgfQorCisgIGlubGluZSBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZQorICBfX2NvbXBsZXhfYWNvcyhjb25zdCBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZSYgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2Fjb3NsKF9feik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHN0ZDo6Y29tcGxleDxfVHA+CisgICAgYWNvcyhjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIF9fY29tcGxleF9hY29zKF9fei5fX3JlcCgpKTsgfQorI2Vsc2UKKyAgLy8vIGFjb3MoX196KSBbOC4xLjJdLgorICAvLyAgRWZmZWN0czogIEJlaGF2ZXMgdGhlIHNhbWUgYXMgQzk5IGZ1bmN0aW9uIGNhY29zLCBkZWZpbmVkCisgIC8vICAgICAgICAgICAgaW4gc3ViY2xhdXNlIDcuMy41LjEuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBhY29zKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gX19jb21wbGV4X2Fjb3MoX196KTsgfQorI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIF9fY29tcGxleF9hc2luKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeworICAgICAgc3RkOjpjb21wbGV4PF9UcD4gX190KC1fX3ouaW1hZygpLCBfX3oucmVhbCgpKTsKKyAgICAgIF9fdCA9IHN0ZDo6X0dMSUJDWFhfVFIxIGFzaW5oKF9fdCk7CisgICAgICByZXR1cm4gc3RkOjpjb21wbGV4PF9UcD4oX190LmltYWcoKSwgLV9fdC5yZWFsKCkpOworICAgIH0KKworI2lmIF9HTElCQ1hYX1VTRV9DOTlfQ09NUExFWF9UUjEKKyAgaW5saW5lIF9fY29tcGxleF9fIGZsb2F0CisgIF9fY29tcGxleF9hc2luKF9fY29tcGxleF9fIGZsb2F0IF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2Nhc2luZihfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGRvdWJsZQorICBfX2NvbXBsZXhfYXNpbihfX2NvbXBsZXhfXyBkb3VibGUgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2FzaW4oX196KTsgfQorCisgIGlubGluZSBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZQorICBfX2NvbXBsZXhfYXNpbihjb25zdCBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZSYgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2FzaW5sKF9feik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHN0ZDo6Y29tcGxleDxfVHA+CisgICAgYXNpbihjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIF9fY29tcGxleF9hc2luKF9fei5fX3JlcCgpKTsgfQorI2Vsc2UKKyAgLy8vIGFzaW4oX196KSBbOC4xLjNdLgorICAvLyAgRWZmZWN0czogIEJlaGF2ZXMgdGhlIHNhbWUgYXMgQzk5IGZ1bmN0aW9uIGNhc2luLCBkZWZpbmVkCisgIC8vICAgICAgICAgICAgaW4gc3ViY2xhdXNlIDcuMy41LjIuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBhc2luKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gX19jb21wbGV4X2FzaW4oX196KTsgfQorI2VuZGlmCisgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBfX2NvbXBsZXhfYXRhbihjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX196KQorICAgIHsKKyAgICAgIGNvbnN0IF9UcCBfX3IyID0gX196LnJlYWwoKSAqIF9fei5yZWFsKCk7CisgICAgICBjb25zdCBfVHAgX194ID0gX1RwKDEuMCkgLSBfX3IyIC0gX196LmltYWcoKSAqIF9fei5pbWFnKCk7CisKKyAgICAgIF9UcCBfX251bSA9IF9fei5pbWFnKCkgKyBfVHAoMS4wKTsKKyAgICAgIF9UcCBfX2RlbiA9IF9fei5pbWFnKCkgLSBfVHAoMS4wKTsKKworICAgICAgX19udW0gPSBfX3IyICsgX19udW0gKiBfX251bTsKKyAgICAgIF9fZGVuID0gX19yMiArIF9fZGVuICogX19kZW47CisKKyAgICAgIHJldHVybiBzdGQ6OmNvbXBsZXg8X1RwPihfVHAoMC41KSAqIGF0YW4yKF9UcCgyLjApICogX196LnJlYWwoKSwgX194KSwKKwkJCSAgICAgICBfVHAoMC4yNSkgKiBsb2coX19udW0gLyBfX2RlbikpOworICAgIH0KKworI2lmIF9HTElCQ1hYX1VTRV9DOTlfQ09NUExFWF9UUjEKKyAgaW5saW5lIF9fY29tcGxleF9fIGZsb2F0CisgIF9fY29tcGxleF9hdGFuKF9fY29tcGxleF9fIGZsb2F0IF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2NhdGFuZihfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGRvdWJsZQorICBfX2NvbXBsZXhfYXRhbihfX2NvbXBsZXhfXyBkb3VibGUgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2F0YW4oX196KTsgfQorCisgIGlubGluZSBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZQorICBfX2NvbXBsZXhfYXRhbihjb25zdCBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZSYgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2F0YW5sKF9feik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHN0ZDo6Y29tcGxleDxfVHA+CisgICAgYXRhbihjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIF9fY29tcGxleF9hdGFuKF9fei5fX3JlcCgpKTsgfQorI2Vsc2UKKyAgLy8vIGF0YW4oX196KSBbOC4xLjRdLgorICAvLyAgRWZmZWN0czogIEJlaGF2ZXMgdGhlIHNhbWUgYXMgQzk5IGZ1bmN0aW9uIGNhdGFuLCBkZWZpbmVkCisgIC8vICAgICAgICAgICAgaW4gc3ViY2xhdXNlIDcuMy41LjMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBhdGFuKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gX19jb21wbGV4X2F0YW4oX196KTsgfQorI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0ZDo6Y29tcGxleDxfVHA+CisgICAgX19jb21wbGV4X2Fjb3NoKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeworICAgICAgc3RkOjpjb21wbGV4PF9UcD4gX190KChfX3oucmVhbCgpIC0gX196LmltYWcoKSkKKwkJCSAgICAqIChfX3oucmVhbCgpICsgX196LmltYWcoKSkgLSBfVHAoMS4wKSwKKwkJCSAgICBfVHAoMi4wKSAqIF9fei5yZWFsKCkgKiBfX3ouaW1hZygpKTsKKyAgICAgIF9fdCA9IHN0ZDo6c3FydChfX3QpOworCisgICAgICByZXR1cm4gc3RkOjpsb2coX190ICsgX196KTsKKyAgICB9CisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X0NPTVBMRVhfVFIxCisgIGlubGluZSBfX2NvbXBsZXhfXyBmbG9hdAorICBfX2NvbXBsZXhfYWNvc2goX19jb21wbGV4X18gZmxvYXQgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2Fjb3NoZihfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGRvdWJsZQorICBfX2NvbXBsZXhfYWNvc2goX19jb21wbGV4X18gZG91YmxlIF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2NhY29zaChfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGxvbmcgZG91YmxlCisgIF9fY29tcGxleF9hY29zaChjb25zdCBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZSYgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2Fjb3NobChfX3opOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIGFjb3NoKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gX19jb21wbGV4X2Fjb3NoKF9fei5fX3JlcCgpKTsgfQorI2Vsc2UKKyAgLy8vIGFjb3NoKF9feikgWzguMS41XS4KKyAgLy8gIEVmZmVjdHM6ICBCZWhhdmVzIHRoZSBzYW1lIGFzIEM5OSBmdW5jdGlvbiBjYWNvc2gsIGRlZmluZWQKKyAgLy8gICAgICAgICAgICBpbiBzdWJjbGF1c2UgNy4zLjYuMS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIGFjb3NoKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gX19jb21wbGV4X2Fjb3NoKF9feik7IH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIF9fY29tcGxleF9hc2luaChjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX196KQorICAgIHsKKyAgICAgIHN0ZDo6Y29tcGxleDxfVHA+IF9fdCgoX196LnJlYWwoKSAtIF9fei5pbWFnKCkpCisJCQkgICAgKiAoX196LnJlYWwoKSArIF9fei5pbWFnKCkpICsgX1RwKDEuMCksCisJCQkgICAgX1RwKDIuMCkgKiBfX3oucmVhbCgpICogX196LmltYWcoKSk7CisgICAgICBfX3QgPSBzdGQ6OnNxcnQoX190KTsKKworICAgICAgcmV0dXJuIHN0ZDo6bG9nKF9fdCArIF9feik7CisgICAgfQorCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9DT01QTEVYX1RSMQorICBpbmxpbmUgX19jb21wbGV4X18gZmxvYXQKKyAgX19jb21wbGV4X2FzaW5oKF9fY29tcGxleF9fIGZsb2F0IF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2Nhc2luaGYoX196KTsgfQorCisgIGlubGluZSBfX2NvbXBsZXhfXyBkb3VibGUKKyAgX19jb21wbGV4X2FzaW5oKF9fY29tcGxleF9fIGRvdWJsZSBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jYXNpbmgoX196KTsgfQorCisgIGlubGluZSBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZQorICBfX2NvbXBsZXhfYXNpbmgoY29uc3QgX19jb21wbGV4X18gbG9uZyBkb3VibGUmIF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2Nhc2luaGwoX196KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBhc2luaChjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIF9fY29tcGxleF9hc2luaChfX3ouX19yZXAoKSk7IH0KKyNlbHNlCisgIC8vLyBhc2luaChfX3opIFs4LjEuNl0uCisgIC8vICBFZmZlY3RzOiAgQmVoYXZlcyB0aGUgc2FtZSBhcyBDOTkgZnVuY3Rpb24gY2FzaW4sIGRlZmluZWQKKyAgLy8gICAgICAgICAgICBpbiBzdWJjbGF1c2UgNy4zLjYuMi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIGFzaW5oKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gX19jb21wbGV4X2FzaW5oKF9feik7IH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIF9fY29tcGxleF9hdGFuaChjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX196KQorICAgIHsKKyAgICAgIGNvbnN0IF9UcCBfX2kyID0gX196LmltYWcoKSAqIF9fei5pbWFnKCk7CisgICAgICBjb25zdCBfVHAgX194ID0gX1RwKDEuMCkgLSBfX2kyIC0gX196LnJlYWwoKSAqIF9fei5yZWFsKCk7CisKKyAgICAgIF9UcCBfX251bSA9IF9UcCgxLjApICsgX196LnJlYWwoKTsKKyAgICAgIF9UcCBfX2RlbiA9IF9UcCgxLjApIC0gX196LnJlYWwoKTsKKworICAgICAgX19udW0gPSBfX2kyICsgX19udW0gKiBfX251bTsKKyAgICAgIF9fZGVuID0gX19pMiArIF9fZGVuICogX19kZW47CisKKyAgICAgIHJldHVybiBzdGQ6OmNvbXBsZXg8X1RwPihfVHAoMC4yNSkgKiAobG9nKF9fbnVtKSAtIGxvZyhfX2RlbikpLAorCQkJICAgICAgIF9UcCgwLjUpICogYXRhbjIoX1RwKDIuMCkgKiBfX3ouaW1hZygpLCBfX3gpKTsKKyAgICB9CisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X0NPTVBMRVhfVFIxCisgIGlubGluZSBfX2NvbXBsZXhfXyBmbG9hdAorICBfX2NvbXBsZXhfYXRhbmgoX19jb21wbGV4X18gZmxvYXQgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2F0YW5oZihfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGRvdWJsZQorICBfX2NvbXBsZXhfYXRhbmgoX19jb21wbGV4X18gZG91YmxlIF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2NhdGFuaChfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGxvbmcgZG91YmxlCisgIF9fY29tcGxleF9hdGFuaChjb25zdCBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZSYgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2F0YW5obChfX3opOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIGF0YW5oKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gX19jb21wbGV4X2F0YW5oKF9fei5fX3JlcCgpKTsgfQorI2Vsc2UKKyAgLy8vIGF0YW5oKF9feikgWzguMS43XS4KKyAgLy8gIEVmZmVjdHM6ICBCZWhhdmVzIHRoZSBzYW1lIGFzIEM5OSBmdW5jdGlvbiBjYXRhbmgsIGRlZmluZWQKKyAgLy8gICAgICAgICAgICBpbiBzdWJjbGF1c2UgNy4zLjYuMy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIGF0YW5oKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gX19jb21wbGV4X2F0YW5oKF9feik7IH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyNpZmRlZiBfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYCisgICAgaW5saW5lIF9UcAorI2Vsc2UKKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PF9UcD4KKyNlbmRpZgorICAgIC8vLyBmYWJzKF9feikgWzguMS44XS4KKyAgICAvLyAgRWZmZWN0czogIEJlaGF2ZXMgdGhlIHNhbWUgYXMgQzk5IGZ1bmN0aW9uIGNhYnMsIGRlZmluZWQKKyAgICAvLyAgICAgICAgICAgIGluIHN1YmNsYXVzZSA3LjMuOC4xLgorICAgIGZhYnMoY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mIF9feikKKyAgICB7IHJldHVybiBzdGQ6OmFicyhfX3opOyB9CisKKyAgLy8vIEFkZGl0aW9uYWwgb3ZlcmxvYWRzIFs4LjEuOV0uCisjaWYgKGRlZmluZWQoX0dMSUJDWFhfSU5DTFVERV9BU19DWFgwWCkgXAorICAgICB8fCAoZGVmaW5lZChfR0xJQkNYWF9JTkNMVURFX0FTX1RSMSkgXAorCSAmJiAhZGVmaW5lZChfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXykpKQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlCisgICAgYXJnKF9UcCBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworI2lmIChfR0xJQkNYWF9VU0VfQzk5X01BVEggJiYgIV9HTElCQ1hYX1VTRV9DOTlfRlBfTUFDUk9TX0RZTkFNSUMpCisgICAgICByZXR1cm4gc3RkOjpzaWduYml0KF9feCkgPyBfX3R5cGUoMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzk1MDI5TCkKKwkgICAgICAgICAgICAgICAgICAgICAgIDogX190eXBlKCk7CisjZWxzZQorICAgICAgcmV0dXJuIHN0ZDo6YXJnKHN0ZDo6Y29tcGxleDxfX3R5cGU+KF9feCkpOworI2VuZGlmCisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlCisgICAgaW1hZyhfVHApCisgICAgeyByZXR1cm4gX1RwKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZQorICAgIG5vcm0oX1RwIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX190eXBlKF9feCkgKiBfX3R5cGUoX194KTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUKKyAgICByZWFsKF9UcCBfX3gpCisgICAgeyByZXR1cm4gX194OyB9CisKKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8dHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZT4KKyAgICBwb3coY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgX1VwJiBfX3kpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBzdGQ6OnBvdyhzdGQ6OmNvbXBsZXg8X190eXBlPihfX3gpLCBfX3R5cGUoX195KSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8dHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZT4KKyAgICBwb3coY29uc3QgX1RwJiBfX3gsIGNvbnN0IHN0ZDo6Y29tcGxleDxfVXA+JiBfX3kpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBzdGQ6OnBvdyhfX3R5cGUoX194KSwgc3RkOjpjb21wbGV4PF9fdHlwZT4oX195KSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8dHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZT4KKyAgICBwb3coY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mIF9feCwgY29uc3Qgc3RkOjpjb21wbGV4PF9VcD4mIF9feSkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIHN0ZDo6cG93KHN0ZDo6Y29tcGxleDxfX3R5cGU+KF9feCksCisJCSAgICAgIHN0ZDo6Y29tcGxleDxfX3R5cGU+KF9feSkpOworICAgIH0KKworICAvLyBAfSBncm91cCBjb21wbGV4X251bWJlcnMKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9UUjEKK30KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxX2ltcGwvY3N0ZGludCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxX2ltcGwvY3N0ZGludApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTQwMzg4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjFfaW1wbC9jc3RkaW50CkBAIC0wLDAgKzEsNzUgQEAKKy8vIFRSMSBjc3RkaW50IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxX2ltcGwvY3N0ZGludAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9TVERJTlRfVFIxCisKK25hbWVzcGFjZSBzdGQKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9UUjEKKworICB1c2luZyA6OmludDhfdDsKKyAgdXNpbmcgOjppbnQxNl90OworICB1c2luZyA6OmludDMyX3Q7CisgIHVzaW5nIDo6aW50NjRfdDsKKworICB1c2luZyA6OmludF9mYXN0OF90OworICB1c2luZyA6OmludF9mYXN0MTZfdDsKKyAgdXNpbmcgOjppbnRfZmFzdDMyX3Q7CisgIHVzaW5nIDo6aW50X2Zhc3Q2NF90OworCisgIHVzaW5nIDo6aW50X2xlYXN0OF90OworICB1c2luZyA6OmludF9sZWFzdDE2X3Q7CisgIHVzaW5nIDo6aW50X2xlYXN0MzJfdDsKKyAgdXNpbmcgOjppbnRfbGVhc3Q2NF90OworCisgIHVzaW5nIDo6aW50bWF4X3Q7CisgIHVzaW5nIDo6aW50cHRyX3Q7CisgIAorICB1c2luZyA6OnVpbnQ4X3Q7CisgIHVzaW5nIDo6dWludDE2X3Q7CisgIHVzaW5nIDo6dWludDMyX3Q7CisgIHVzaW5nIDo6dWludDY0X3Q7CisKKyAgdXNpbmcgOjp1aW50X2Zhc3Q4X3Q7CisgIHVzaW5nIDo6dWludF9mYXN0MTZfdDsKKyAgdXNpbmcgOjp1aW50X2Zhc3QzMl90OworICB1c2luZyA6OnVpbnRfZmFzdDY0X3Q7CisKKyAgdXNpbmcgOjp1aW50X2xlYXN0OF90OworICB1c2luZyA6OnVpbnRfbGVhc3QxNl90OworICB1c2luZyA6OnVpbnRfbGVhc3QzMl90OworICB1c2luZyA6OnVpbnRfbGVhc3Q2NF90OworCisgIHVzaW5nIDo6dWludG1heF90OworICB1c2luZyA6OnVpbnRwdHJfdDsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9UUjEKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMV9pbXBsL2NzdGRpbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxX2ltcGwvY3N0ZGlvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMTAwY2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMV9pbXBsL2NzdGRpbwpAQCAtMCwwICsxLDQ0IEBACisvLyBUUjEgY3N0ZGlvIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxX2ltcGwvY3N0ZGlvCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKK25hbWVzcGFjZSBzdGQKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9UUjEKKworI2lmIF9HTElCQ1hYX1VTRV9DOTkKKyAgdXNpbmcgc3RkOjpzbnByaW50ZjsKKyAgdXNpbmcgc3RkOjp2c25wcmludGY7CisKKyAgdXNpbmcgc3RkOjp2ZnNjYW5mOworICB1c2luZyBzdGQ6OnZzY2FuZjsKKyAgdXNpbmcgc3RkOjp2c3NjYW5mOworI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVFIxCit9CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMV9pbXBsL2NzdGRsaWIgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMV9pbXBsL2NzdGRsaWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlhNTkwZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxX2ltcGwvY3N0ZGxpYgpAQCAtMCwwICsxLDY1IEBACisvLyBUUjEgY3N0ZGxpYiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMV9pbXBsL2NzdGRsaWIKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworI2lmIF9HTElCQ1hYX0hPU1RFRAorCituYW1lc3BhY2Ugc3RkCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxCisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5CisKKyNpZiAhX0dMSUJDWFhfVVNFX0M5OV9MT05HX0xPTkdfRFlOQU1JQworICAvLyB0eXBlcworICB1c2luZyBzdGQ6OmxsZGl2X3Q7CisKKyAgLy8gZnVuY3Rpb25zCisgIHVzaW5nIHN0ZDo6bGxhYnM7CisgIHVzaW5nIHN0ZDo6bGxkaXY7CisjZW5kaWYKKworICB1c2luZyBzdGQ6OmF0b2xsOworICB1c2luZyBzdGQ6OnN0cnRvbGw7CisgIHVzaW5nIHN0ZDo6c3RydG91bGw7CisKKyAgdXNpbmcgc3RkOjpzdHJ0b2Y7CisgIHVzaW5nIHN0ZDo6c3RydG9sZDsKKworICAvLyBvdmVybG9hZHMKKyAgdXNpbmcgc3RkOjphYnM7CisjaWYgIV9HTElCQ1hYX1VTRV9DOTlfTE9OR19MT05HX0RZTkFNSUMKKyAgdXNpbmcgc3RkOjpkaXY7CisjZW5kaWYKKworI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVFIxCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjFfaW1wbC9jd2NoYXIgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMV9pbXBsL2N3Y2hhcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTkwMDRkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjFfaW1wbC9jd2NoYXIKQEAgLTAsMCArMSw1OCBAQAorLy8gVFIxIGN3Y2hhciAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMV9pbXBsL2N3Y2hhcgorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKworbmFtZXNwYWNlIHN0ZAoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMQorCisjaWYgX0dMSUJDWFhfSEFWRV9XQ1NUT0YKKyAgdXNpbmcgc3RkOjp3Y3N0b2Y7CisjZW5kaWYKKyNpZiBfR0xJQkNYWF9IQVZFX1ZGV1NDQU5GCisgIHVzaW5nIHN0ZDo6dmZ3c2NhbmY7CisjZW5kaWYKKyNpZiBfR0xJQkNYWF9IQVZFX1ZTV1NDQU5GCisgIHVzaW5nIHN0ZDo6dnN3c2NhbmY7CisjZW5kaWYKKyNpZiBfR0xJQkNYWF9IQVZFX1ZXU0NBTkYKKyAgdXNpbmcgc3RkOjp2d3NjYW5mOworI2VuZGlmCisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5CisgIHVzaW5nIHN0ZDo6d2NzdG9sZDsKKyAgdXNpbmcgc3RkOjp3Y3N0b2xsOworICB1c2luZyBzdGQ6Ondjc3RvdWxsOworI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVFIxCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjFfaW1wbC9jd2N0eXBlIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjFfaW1wbC9jd2N0eXBlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMzVkMzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMV9pbXBsL2N3Y3R5cGUKQEAgLTAsMCArMSw0MyBAQAorLy8gVFIxIGN3Y3R5cGUgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjFfaW1wbC9jd2N0eXBlCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorICovCisKKyNpZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorCituYW1lc3BhY2Ugc3RkCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxCisKKyNpZiBfR0xJQkNYWF9IQVZFX0lTV0JMQU5LCisgIHVzaW5nIHN0ZDo6aXN3Ymxhbms7CisjZW5kaWYgIAorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxX2ltcGwvcmVnZXggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMV9pbXBsL3JlZ2V4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZTc5ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMV9pbXBsL3JlZ2V4CkBAIC0wLDAgKzEsMjcxMCBAQAorLy8gY2xhc3MgdGVtcGxhdGUgcmVnZXggLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKgorICogQGZpbGUgdHIxX2ltcGwvcmVnZXgKKyAqIEBicmllZiBUaGUgY29tbW9uIGltcGxlbWVudGF0aW9uIGZpbGUgZm9yIHRyMSBhbmQgc3RkIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCisgKgorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCituYW1lc3BhY2Ugc3RkCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxCisKKy8qKgorICogQGRlZmdyb3VwIHRyMV9yZWdleCBSZWd1bGFyIEV4cHJlc3Npb25zCisgKiBBIGZhY2lsaXR5IGZvciBwZXJmb3JtaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIG1hdGNoaW5nLgorICovCisgLy9AeworCisvKiogQG5hbWVzcGFjZSBzdGQ6OnJlZ2V4X2NvbnN0YW50cworICogIEBicmllZiBJU08gQysrIDB4IGVudGl0aWVzIHN1YiBuYW1lc3BhY2UgZm9yIHJlZ2V4LgorICovCituYW1lc3BhY2UgcmVnZXhfY29uc3RhbnRzCit7CisgIC8qKgorICAgKiBAbmFtZSA1LjEgUmVndWxhciBFeHByZXNzaW9uIFN5bnRheCBPcHRpb25zCisgICAqLworICAvL0B7CisgIGVudW0gX19zeW50YXhfb3B0aW9uCisgICAgeworICAgICAgX1NfaWNhc2UsCisgICAgICBfU19ub3N1YnMsCisgICAgICBfU19vcHRpbWl6ZSwKKyAgICAgIF9TX2NvbGxhdGUsCisgICAgICBfU19FQ01BU2NyaXB0LAorICAgICAgX1NfYmFzaWMsCisgICAgICBfU19leHRlbmRlZCwKKyAgICAgIF9TX2F3aywKKyAgICAgIF9TX2dyZXAsCisgICAgICBfU19lZ3JlcCwKKyAgICAgIF9TX3N5bnRheF9sYXN0CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIFRoaXMgaXMgYSBiaXRtYXNrIHR5cGUgaW5kaWNhdGluZyBob3cgdG8gaW50ZXJwcmV0IHRoZSByZWdleC4KKyAgICoKKyAgICogVGhlIEBjIHN5bnRheF9vcHRpb25fdHlwZSBpcyBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGJ1dCBpdCBpcyB2YWxpZCB0bworICAgKiBwZXJmb3JtIGJpdHdpc2Ugb3BlcmF0aW9ucyBvbiB0aGVzZSB2YWx1ZXMgYW5kIGV4cGVjdCB0aGUgcmlnaHQgdGhpbmcgdG8KKyAgICogaGFwcGVuLgorICAgKgorICAgKiBBIHZhbGlkIHZhbHVlIG9mIHR5cGUgc3ludGF4X29wdGlvbl90eXBlIHNoYWxsIGhhdmUgZXhhY3RseSBvbmUgb2YgdGhlCisgICAqIGVsZW1lbnRzIEBjIEVDTUFTY3JpcHQsIEBjIGJhc2ljLCBAYyBleHRlbmRlZCwgQGMgYXdrLCBAYyBncmVwLCBAYyBlZ3JlcAorICAgKiAlc2V0LgorICAgKi8KKyAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgc3ludGF4X29wdGlvbl90eXBlOworCisgIC8qKiAKKyAgICogU3BlY2lmaWVzIHRoYXQgdGhlIG1hdGNoaW5nIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYWdhaW5zdCBhIGNoYXJhY3RlcgorICAgKiBzZXF1ZW5jZSBzaGFsbCBiZSBwZXJmb3JtZWQgd2l0aG91dCByZWdhcmQgdG8gY2FzZS4KKyAgICovCisgIHN0YXRpYyBjb25zdCBzeW50YXhfb3B0aW9uX3R5cGUgaWNhc2UgICAgICA9IDEgPDwgX1NfaWNhc2U7CisKKyAgLyoqCisgICAqIFNwZWNpZmllcyB0aGF0IHdoZW4gYSByZWd1bGFyIGV4cHJlc3Npb24gaXMgbWF0Y2hlZCBhZ2FpbnN0IGEgY2hhcmFjdGVyCisgICAqIGNvbnRhaW5lciBzZXF1ZW5jZSwgbm8gc3ViLWV4cHJlc3Npb24gbWF0Y2hlcyBhcmUgdG8gYmUgc3RvcmVkIGluIHRoZQorICAgKiBzdXBwbGllZCBtYXRjaF9yZXN1bHRzIHN0cnVjdHVyZS4KKyAgICovCisgIHN0YXRpYyBjb25zdCBzeW50YXhfb3B0aW9uX3R5cGUgbm9zdWJzICAgICA9IDEgPDwgX1Nfbm9zdWJzOworCisgIC8qKgorICAgKiBTcGVjaWZpZXMgdGhhdCB0aGUgcmVndWxhciBleHByZXNzaW9uIGVuZ2luZSBzaG91bGQgcGF5IG1vcmUgYXR0ZW50aW9uIHRvCisgICAqIHRoZSBzcGVlZCB3aXRoIHdoaWNoIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYXJlIG1hdGNoZWQsIGFuZCBsZXNzIHRvIHRoZQorICAgKiBzcGVlZCB3aXRoIHdoaWNoIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3RzIGFyZSBjb25zdHJ1Y3RlZC4gT3RoZXJ3aXNlCisgICAqIGl0IGhhcyBubyBkZXRlY3RhYmxlIGVmZmVjdCBvbiB0aGUgcHJvZ3JhbSBvdXRwdXQuCisgICAqLworICBzdGF0aWMgY29uc3Qgc3ludGF4X29wdGlvbl90eXBlIG9wdGltaXplICAgPSAxIDw8IF9TX29wdGltaXplOworCisgIC8qKgorICAgKiBTcGVjaWZpZXMgdGhhdCBjaGFyYWN0ZXIgcmFuZ2VzIG9mIHRoZSBmb3JtIFthLWJdIHNob3VsZCBiZSBsb2NhbGUKKyAgICogc2Vuc2l0aXZlLgorICAgKi8KKyAgc3RhdGljIGNvbnN0IHN5bnRheF9vcHRpb25fdHlwZSBjb2xsYXRlICAgID0gMSA8PCBfU19jb2xsYXRlOworCisgIC8qKgorICAgKiBTcGVjaWZpZXMgdGhhdCB0aGUgZ3JhbW1hciByZWNvZ25pemVkIGJ5IHRoZSByZWd1bGFyIGV4cHJlc3Npb24gZW5naW5lIGlzCisgICAqIHRoYXQgdXNlZCBieSBFQ01BU2NyaXB0IGluIEVDTUEtMjYyIFtFY21hIEludGVybmF0aW9uYWwsIEVDTUFTY3JpcHQKKyAgICogTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbiwgU3RhbmRhcmQgRWNtYS0yNjIsIHRoaXJkIGVkaXRpb24sIDE5OTldLCBhcworICAgKiBtb2RpZmllZCBpbiB0cjEgc2VjdGlvbiBbNy4xM10uICBUaGlzIGdyYW1tYXIgaXMgc2ltaWxhciB0byB0aGF0IGRlZmluZWQKKyAgICogaW4gdGhlIFBFUkwgc2NyaXB0aW5nIGxhbmd1YWdlIGJ1dCBleHRlbmRlZCB3aXRoIGVsZW1lbnRzIGZvdW5kIGluIHRoZQorICAgKiBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb24gZ3JhbW1hci4KKyAgICovCisgIHN0YXRpYyBjb25zdCBzeW50YXhfb3B0aW9uX3R5cGUgRUNNQVNjcmlwdCA9IDEgPDwgX1NfRUNNQVNjcmlwdDsKKworICAvKioKKyAgICogU3BlY2lmaWVzIHRoYXQgdGhlIGdyYW1tYXIgcmVjb2duaXplZCBieSB0aGUgcmVndWxhciBleHByZXNzaW9uIGVuZ2luZSBpcworICAgKiB0aGF0IHVzZWQgYnkgUE9TSVggYmFzaWMgcmVndWxhciBleHByZXNzaW9ucyBpbiBJRUVFIFN0ZCAxMDAzLjEtMjAwMSwKKyAgICogUG9ydGFibGUgT3BlcmF0aW5nIFN5c3RlbSBJbnRlcmZhY2UgKFBPU0lYKSwgQmFzZSBEZWZpbml0aW9ucyBhbmQKKyAgICogSGVhZGVycywgU2VjdGlvbiA5LCBSZWd1bGFyIEV4cHJlc3Npb25zIFtJRUVFLCBJbmZvcm1hdGlvbiBUZWNobm9sb2d5IC0tCisgICAqIFBvcnRhYmxlIE9wZXJhdGluZyBTeXN0ZW0gSW50ZXJmYWNlIChQT1NJWCksIElFRUUgU3RhbmRhcmQgMTAwMy4xLTIwMDFdLgorICAgKi8KKyAgc3RhdGljIGNvbnN0IHN5bnRheF9vcHRpb25fdHlwZSBiYXNpYyAgICAgID0gMSA8PCBfU19iYXNpYzsKKworICAvKioKKyAgICogU3BlY2lmaWVzIHRoYXQgdGhlIGdyYW1tYXIgcmVjb2duaXplZCBieSB0aGUgcmVndWxhciBleHByZXNzaW9uIGVuZ2luZSBpcworICAgKiB0aGF0IHVzZWQgYnkgUE9TSVggZXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9ucyBpbiBJRUVFIFN0ZCAxMDAzLjEtMjAwMSwKKyAgICogUG9ydGFibGUgT3BlcmF0aW5nIFN5c3RlbSBJbnRlcmZhY2UgKFBPU0lYKSwgQmFzZSBEZWZpbml0aW9ucyBhbmQgSGVhZGVycywKKyAgICogU2VjdGlvbiA5LCBSZWd1bGFyIEV4cHJlc3Npb25zLgorICAgKi8KKyAgc3RhdGljIGNvbnN0IHN5bnRheF9vcHRpb25fdHlwZSBleHRlbmRlZCAgID0gMSA8PCBfU19leHRlbmRlZDsKKworICAvKioKKyAgICogU3BlY2lmaWVzIHRoYXQgdGhlIGdyYW1tYXIgcmVjb2duaXplZCBieSB0aGUgcmVndWxhciBleHByZXNzaW9uIGVuZ2luZSBpcworICAgKiB0aGF0IHVzZWQgYnkgUE9TSVggdXRpbGl0eSBhd2sgaW4gSUVFRSBTdGQgMTAwMy4xLTIwMDEuICBUaGlzIG9wdGlvbiBpcworICAgKiBpZGVudGljYWwgdG8gc3ludGF4X29wdGlvbl90eXBlIGV4dGVuZGVkLCBleGNlcHQgdGhhdCBDLXN0eWxlIGVzY2FwZQorICAgKiBzZXF1ZW5jZXMgYXJlIHN1cHBvcnRlZC4gIFRoZXNlIHNlcXVlbmNlcyBhcmU6IAorICAgKiBcXFxcLCBcXGEsIFxcYiwgXFxmLCAKKyAgICogXFxuLCBcXHIsIFxcdCAsIFxcdiwgCisgICAqIFxcJmFwb3M7LCAmYXBvczssIGFuZCBcXGRkZCAKKyAgICogKHdoZXJlIGRkZCBpcyBvbmUsIHR3bywgb3IgdGhyZWUgb2N0YWwgZGlnaXRzKS4gIAorICAgKi8KKyAgc3RhdGljIGNvbnN0IHN5bnRheF9vcHRpb25fdHlwZSBhd2sgICAgICAgID0gMSA8PCBfU19hd2s7CisKKyAgLyoqCisgICAqIFNwZWNpZmllcyB0aGF0IHRoZSBncmFtbWFyIHJlY29nbml6ZWQgYnkgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBlbmdpbmUgaXMKKyAgICogdGhhdCB1c2VkIGJ5IFBPU0lYIHV0aWxpdHkgZ3JlcCBpbiBJRUVFIFN0ZCAxMDAzLjEtMjAwMS4gIFRoaXMgb3B0aW9uIGlzCisgICAqIGlkZW50aWNhbCB0byBzeW50YXhfb3B0aW9uX3R5cGUgYmFzaWMsIGV4Y2VwdCB0aGF0IG5ld2xpbmVzIGFyZSB0cmVhdGVkCisgICAqIGFzIHdoaXRlc3BhY2UuCisgICAqLworICBzdGF0aWMgY29uc3Qgc3ludGF4X29wdGlvbl90eXBlIGdyZXAgICAgICAgPSAxIDw8IF9TX2dyZXA7CisKKyAgLyoqCisgICAqIFNwZWNpZmllcyB0aGF0IHRoZSBncmFtbWFyIHJlY29nbml6ZWQgYnkgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBlbmdpbmUgaXMKKyAgICogdGhhdCB1c2VkIGJ5IFBPU0lYIHV0aWxpdHkgZ3JlcCB3aGVuIGdpdmVuIHRoZSAtRSBvcHRpb24gaW4KKyAgICogSUVFRSBTdGQgMTAwMy4xLTIwMDEuICBUaGlzIG9wdGlvbiBpcyBpZGVudGljYWwgdG8gc3ludGF4X29wdGlvbl90eXBlIAorICAgKiBleHRlbmRlZCwgZXhjZXB0IHRoYXQgbmV3bGluZXMgYXJlIHRyZWF0ZWQgYXMgd2hpdGVzcGFjZS4KKyAgICovCisgIHN0YXRpYyBjb25zdCBzeW50YXhfb3B0aW9uX3R5cGUgZWdyZXAgICAgICA9IDEgPDwgX1NfZWdyZXA7CisKKyAgLy9AfQorCisgIC8qKgorICAgKiBAbmFtZSA1LjIgTWF0Y2hpbmcgUnVsZXMKKyAgICoKKyAgICogTWF0Y2hpbmcgYSByZWd1bGFyIGV4cHJlc3Npb24gYWdhaW5zdCBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgW2ZpcnN0LAorICAgKiBsYXN0KSBwcm9jZWVkcyBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIG9mIHRoZSBncmFtbWFyIHNwZWNpZmllZCBmb3IgdGhlCisgICAqIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3QsIG1vZGlmaWVkIGFjY29yZGluZyB0byB0aGUgZWZmZWN0cyBsaXN0ZWQKKyAgICogYmVsb3cgZm9yIGFueSBiaXRtYXNrIGVsZW1lbnRzIHNldC4KKyAgICoKKyAgICovCisgIC8vQHsKKworICBlbnVtIF9fbWF0Y2hfZmxhZworICAgIHsKKyAgICAgIF9TX25vdF9ib2wsCisgICAgICBfU19ub3RfZW9sLAorICAgICAgX1Nfbm90X2JvdywKKyAgICAgIF9TX25vdF9lb3csCisgICAgICBfU19hbnksCisgICAgICBfU19ub3RfbnVsbCwKKyAgICAgIF9TX2NvbnRpbnVvdXMsCisgICAgICBfU19wcmV2X2F2YWlsLAorICAgICAgX1Nfc2VkLAorICAgICAgX1Nfbm9fY29weSwKKyAgICAgIF9TX2ZpcnN0X29ubHksCisgICAgICBfU19tYXRjaF9mbGFnX2xhc3QKKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgVGhpcyBpcyBhIGJpdG1hc2sgdHlwZSBpbmRpY2F0aW5nIHJlZ2V4IG1hdGNoaW5nIHJ1bGVzLgorICAgKgorICAgKiBUaGUgQGMgbWF0Y2hfZmxhZ190eXBlIGlzIGltcGxlbWVudGF0aW9uIGRlZmluZWQgYnV0IGl0IGlzIHZhbGlkIHRvCisgICAqIHBlcmZvcm0gYml0d2lzZSBvcGVyYXRpb25zIG9uIHRoZXNlIHZhbHVlcyBhbmQgZXhwZWN0IHRoZSByaWdodCB0aGluZyB0bworICAgKiBoYXBwZW4uCisgICAqLworICB0eXBlZGVmIHN0ZDo6Yml0c2V0PF9TX21hdGNoX2ZsYWdfbGFzdD4gbWF0Y2hfZmxhZ190eXBlOworCisgIC8qKgorICAgKiBUaGUgZGVmYXVsdCBtYXRjaGluZyBydWxlcy4KKyAgICovCisgIHN0YXRpYyBjb25zdCBtYXRjaF9mbGFnX3R5cGUgbWF0Y2hfZGVmYXVsdCAgICAgPSAwOworCisgIC8qKgorICAgKiBUaGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBzZXF1ZW5jZSBbZmlyc3QsIGxhc3QpIGlzIHRyZWF0ZWQgYXMgdGhvdWdoIGl0CisgICAqIGlzIG5vdCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSwgc28gdGhlIGNoYXJhY3RlciAoXikgaW4gdGhlIHJlZ3VsYXIKKyAgICogZXhwcmVzc2lvbiBzaGFsbCBub3QgbWF0Y2ggW2ZpcnN0LCBmaXJzdCkuCisgICAqLworICBzdGF0aWMgY29uc3QgbWF0Y2hfZmxhZ190eXBlIG1hdGNoX25vdF9ib2wgICAgID0gMSA8PCBfU19ub3RfYm9sOworCisgIC8qKgorICAgKiBUaGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIHNlcXVlbmNlIFtmaXJzdCwgbGFzdCkgaXMgdHJlYXRlZCBhcyB0aG91Z2ggaXQKKyAgICogaXMgbm90IGF0IHRoZSBlbmQgb2YgYSBsaW5lLCBzbyB0aGUgY2hhcmFjdGVyICgkKSBpbiB0aGUgcmVndWxhcgorICAgKiBleHByZXNzaW9uIHNoYWxsIG5vdCBtYXRjaCBbbGFzdCwgbGFzdCkuCisgICAqLworICBzdGF0aWMgY29uc3QgbWF0Y2hfZmxhZ190eXBlIG1hdGNoX25vdF9lb2wgICAgID0gMSA8PCBfU19ub3RfZW9sOworICAgCisgIC8qKgorICAgKiBUaGUgZXhwcmVzc2lvbiBcXGIgaXMgbm90IG1hdGNoZWQgYWdhaW5zdCB0aGUgc3ViLXNlcXVlbmNlCisgICAqIFtmaXJzdCxmaXJzdCkuCisgICAqLworICBzdGF0aWMgY29uc3QgbWF0Y2hfZmxhZ190eXBlIG1hdGNoX25vdF9ib3cgICAgID0gMSA8PCBfU19ub3RfYm93OworICAgCisgIC8qKgorICAgKiBUaGUgZXhwcmVzc2lvbiBcXGIgc2hvdWxkIG5vdCBiZSBtYXRjaGVkIGFnYWluc3QgdGhlIHN1Yi1zZXF1ZW5jZQorICAgKiBbbGFzdCxsYXN0KS4KKyAgICovCisgIHN0YXRpYyBjb25zdCBtYXRjaF9mbGFnX3R5cGUgbWF0Y2hfbm90X2VvdyAgICAgPSAxIDw8IF9TX25vdF9lb3c7CisgICAKKyAgLyoqCisgICAqIElmIG1vcmUgdGhhbiBvbmUgbWF0Y2ggaXMgcG9zc2libGUgdGhlbiBhbnkgbWF0Y2ggaXMgYW4gYWNjZXB0YWJsZQorICAgKiByZXN1bHQuCisgICAqLworICBzdGF0aWMgY29uc3QgbWF0Y2hfZmxhZ190eXBlIG1hdGNoX2FueSAgICAgICAgID0gMSA8PCBfU19hbnk7CisgICAKKyAgLyoqCisgICAqIFRoZSBleHByZXNzaW9uIGRvZXMgbm90IG1hdGNoIGFuIGVtcHR5IHNlcXVlbmNlLgorICAgKi8KKyAgc3RhdGljIGNvbnN0IG1hdGNoX2ZsYWdfdHlwZSBtYXRjaF9ub3RfbnVsbCAgICA9IDEgPDwgX1Nfbm90X251bGw7CisgICAKKyAgLyoqCisgICAqIFRoZSBleHByZXNzaW9uIG9ubHkgbWF0Y2hlcyBhIHN1Yi1zZXF1ZW5jZSB0aGF0IGJlZ2lucyBhdCBmaXJzdCAuCisgICAqLworICBzdGF0aWMgY29uc3QgbWF0Y2hfZmxhZ190eXBlIG1hdGNoX2NvbnRpbnVvdXMgID0gMSA8PCBfU19jb250aW51b3VzOworICAgCisgIC8qKgorICAgKiAtLWZpcnN0IGlzIGEgdmFsaWQgaXRlcmF0b3IgcG9zaXRpb24uICBXaGVuIHRoaXMgZmxhZyBpcyBzZXQgdGhlbiB0aGUKKyAgICogZmxhZ3MgbWF0Y2hfbm90X2JvbCBhbmQgbWF0Y2hfbm90X2JvdyBhcmUgaWdub3JlZCBieSB0aGUgcmVndWxhcgorICAgKiBleHByZXNzaW9uIGFsZ29yaXRobXMgNy4xMSBhbmQgaXRlcmF0b3JzIDcuMTIuCisgICAqLworICBzdGF0aWMgY29uc3QgbWF0Y2hfZmxhZ190eXBlIG1hdGNoX3ByZXZfYXZhaWwgID0gMSA8PCBfU19wcmV2X2F2YWlsOworCisgIC8qKgorICAgKiBXaGVuIGEgcmVndWxhciBleHByZXNzaW9uIG1hdGNoIGlzIHRvIGJlIHJlcGxhY2VkIGJ5IGEgbmV3IHN0cmluZywgdGhlCisgICAqIG5ldyBzdHJpbmcgaXMgY29uc3RydWN0ZWQgdXNpbmcgdGhlIHJ1bGVzIHVzZWQgYnkgdGhlIEVDTUFTY3JpcHQgcmVwbGFjZQorICAgKiBmdW5jdGlvbiBpbiBFQ01BLSAyNjIgW0VjbWEgSW50ZXJuYXRpb25hbCwgRUNNQVNjcmlwdCBMYW5ndWFnZQorICAgKiBTcGVjaWZpY2F0aW9uLCBTdGFuZGFyZCBFY21hLTI2MiwgdGhpcmQgZWRpdGlvbiwgMTk5OV0sIHBhcnQgMTUuNS40LjExCisgICAqIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZS4gSW4gYWRkaXRpb24sIGR1cmluZyBzZWFyY2ggYW5kIHJlcGxhY2UKKyAgICogb3BlcmF0aW9ucyBhbGwgbm9uLW92ZXJsYXBwaW5nIG9jY3VycmVuY2VzIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICogYXJlIGxvY2F0ZWQgYW5kIHJlcGxhY2VkLCBhbmQgc2VjdGlvbnMgb2YgdGhlIGlucHV0IHRoYXQgZGlkIG5vdCBtYXRjaAorICAgKiB0aGUgZXhwcmVzc2lvbiBhcmUgY29waWVkIHVuY2hhbmdlZCB0byB0aGUgb3V0cHV0IHN0cmluZy4KKyAgICogCisgICAqIEZvcm1hdCBzdHJpbmdzIChmcm9tIEVDTUEtMjYyIFsxNS41LjQuMTFdKToKKyAgICogQGxpICQkICBUaGUgZG9sbGFyLXNpZ24gaXRzZWxmICgkKQorICAgKiBAbGkgJCYgIFRoZSBtYXRjaGVkIHN1YnN0cmluZy4KKyAgICogQGxpICRgICBUaGUgcG9ydGlvbiBvZiBAYSBzdHJpbmcgdGhhdCBwcmVjZWRlcyB0aGUgbWF0Y2hlZCBzdWJzdHJpbmcuCisgICAqICAgICAgICAgVGhpcyB3b3VsZCBiZSBtYXRjaF9yZXN1bHRzOjpwcmVmaXgoKS4KKyAgICogQGxpICQnICBUaGUgcG9ydGlvbiBvZiBAYSBzdHJpbmcgdGhhdCBmb2xsb3dzIHRoZSBtYXRjaGVkIHN1YnN0cmluZy4KKyAgICogICAgICAgICBUaGlzIHdvdWxkIGJlIG1hdGNoX3Jlc3VsdHM6OnN1ZmZpeCgpLgorICAgKiBAbGkgJG4gIFRoZSBudGggY2FwdHVyZSwgd2hlcmUgbiBpcyBpbiBbMSw5XSBhbmQgJG4gaXMgbm90IGZvbGxvd2VkIGJ5IGEKKyAgICogICAgICAgICBkZWNpbWFsIGRpZ2l0LiAgSWYgbiA8PSBtYXRjaF9yZXN1bHRzOjpzaXplKCkgYW5kIHRoZSBudGggY2FwdHVyZQorICAgKiAgICAgICAgIGlzIHVuZGVmaW5lZCwgdXNlIHRoZSBlbXB0eSBzdHJpbmcgaW5zdGVhZC4gIElmIG4gPgorICAgKiAgICAgICAgIG1hdGNoX3Jlc3VsdHM6OnNpemUoKSwgdGhlIHJlc3VsdCBpcyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkLgorICAgKiBAbGkgJG5uIFRoZSBubnRoIGNhcHR1cmUsIHdoZXJlIG5uIGlzIGEgdHdvLWRpZ2l0IGRlY2ltYWwgbnVtYmVyIG9uCisgICAqICAgICAgICAgWzAxLCA5OV0uICBJZiBubiA8PSBtYXRjaF9yZXN1bHRzOjpzaXplKCkgYW5kIHRoZSBudGggY2FwdHVyZSBpcworICAgKiAgICAgICAgIHVuZGVmaW5lZCwgdXNlIHRoZSBlbXB0eSBzdHJpbmcgaW5zdGVhZC4gSWYKKyAgICogICAgICAgICBubiA+IG1hdGNoX3Jlc3VsdHM6OnNpemUoKSwgdGhlIHJlc3VsdCBpcyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkLgorICAgKi8KKyAgc3RhdGljIGNvbnN0IG1hdGNoX2ZsYWdfdHlwZSBmb3JtYXRfZGVmYXVsdCAgICA9IDA7CisKKyAgLyoqCisgICAqIFdoZW4gYSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2ggaXMgdG8gYmUgcmVwbGFjZWQgYnkgYSBuZXcgc3RyaW5nLCB0aGUKKyAgICogbmV3IHN0cmluZyBpcyBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgcnVsZXMgdXNlZCBieSB0aGUgUE9TSVggc2VkIHV0aWxpdHkKKyAgICogaW4gSUVFRSBTdGQgMTAwMy4xLSAyMDAxIFtJRUVFLCBJbmZvcm1hdGlvbiBUZWNobm9sb2d5IC0tIFBvcnRhYmxlCisgICAqIE9wZXJhdGluZyBTeXN0ZW0gSW50ZXJmYWNlIChQT1NJWCksIElFRUUgU3RhbmRhcmQgMTAwMy4xLTIwMDFdLgorICAgKi8KKyAgc3RhdGljIGNvbnN0IG1hdGNoX2ZsYWdfdHlwZSBmb3JtYXRfc2VkICAgICAgICA9IDEgPDwgX1Nfc2VkOworCisgIC8qKgorICAgKiBEdXJpbmcgYSBzZWFyY2ggYW5kIHJlcGxhY2Ugb3BlcmF0aW9uLCBzZWN0aW9ucyBvZiB0aGUgY2hhcmFjdGVyCisgICAqIGNvbnRhaW5lciBzZXF1ZW5jZSBiZWluZyBzZWFyY2hlZCB0aGF0IGRvIG5vdCBtYXRjaCB0aGUgcmVndWxhcgorICAgKiBleHByZXNzaW9uIHNoYWxsIG5vdCBiZSBjb3BpZWQgdG8gdGhlIG91dHB1dCBzdHJpbmcuCisgICAqLworICBzdGF0aWMgY29uc3QgbWF0Y2hfZmxhZ190eXBlIGZvcm1hdF9ub19jb3B5ICAgID0gMSA8PCBfU19ub19jb3B5OworCisgIC8qKgorICAgKiBXaGVuIHNwZWNpZmllZCBkdXJpbmcgYSBzZWFyY2ggYW5kIHJlcGxhY2Ugb3BlcmF0aW9uLCBvbmx5IHRoZSBmaXJzdAorICAgKiBvY2N1cnJlbmNlIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gc2hhbGwgYmUgcmVwbGFjZWQuCisgICAqLworICBzdGF0aWMgY29uc3QgbWF0Y2hfZmxhZ190eXBlIGZvcm1hdF9maXJzdF9vbmx5ID0gMSA8PCBfU19maXJzdF9vbmx5OworCisgIC8vQH0KKworICAvKioKKyAgICogQG5hbWUgNS4zIEVycm9yIFR5cGVzCisgICAqLworICAvL0B7CisgCisgIGVudW0gZXJyb3JfdHlwZQorICAgIHsKKyAgICAgIF9TX2Vycm9yX2NvbGxhdGUsCisgICAgICBfU19lcnJvcl9jdHlwZSwKKyAgICAgIF9TX2Vycm9yX2VzY2FwZSwKKyAgICAgIF9TX2Vycm9yX2JhY2tyZWYsCisgICAgICBfU19lcnJvcl9icmFjaywKKyAgICAgIF9TX2Vycm9yX3BhcmVuLAorICAgICAgX1NfZXJyb3JfYnJhY2UsCisgICAgICBfU19lcnJvcl9iYWRicmFjZSwKKyAgICAgIF9TX2Vycm9yX3JhbmdlLAorICAgICAgX1NfZXJyb3Jfc3BhY2UsCisgICAgICBfU19lcnJvcl9iYWRyZXBlYXQsCisgICAgICBfU19lcnJvcl9jb21wbGV4aXR5LAorICAgICAgX1NfZXJyb3Jfc3RhY2ssCisgICAgICBfU19lcnJvcl9sYXN0CisgICAgfTsKKworICAvKiogVGhlIGV4cHJlc3Npb24gY29udGFpbmVkIGFuIGludmFsaWQgY29sbGF0aW5nIGVsZW1lbnQgbmFtZS4gKi8KKyAgc3RhdGljIGNvbnN0IGVycm9yX3R5cGUgZXJyb3JfY29sbGF0ZShfU19lcnJvcl9jb2xsYXRlKTsKKworICAvKiogVGhlIGV4cHJlc3Npb24gY29udGFpbmVkIGFuIGludmFsaWQgY2hhcmFjdGVyIGNsYXNzIG5hbWUuICovCisgIHN0YXRpYyBjb25zdCBlcnJvcl90eXBlIGVycm9yX2N0eXBlKF9TX2Vycm9yX2N0eXBlKTsKKworICAvKioKKyAgICogVGhlIGV4cHJlc3Npb24gY29udGFpbmVkIGFuIGludmFsaWQgZXNjYXBlZCBjaGFyYWN0ZXIsIG9yIGEgdHJhaWxpbmcKKyAgICogZXNjYXBlLgorICAgKi8KKyAgc3RhdGljIGNvbnN0IGVycm9yX3R5cGUgZXJyb3JfZXNjYXBlKF9TX2Vycm9yX2VzY2FwZSk7CisKKyAgLyoqIFRoZSBleHByZXNzaW9uIGNvbnRhaW5lZCBhbiBpbnZhbGlkIGJhY2sgcmVmZXJlbmNlLiAqLworICBzdGF0aWMgY29uc3QgZXJyb3JfdHlwZSBlcnJvcl9iYWNrcmVmKF9TX2Vycm9yX2JhY2tyZWYpOworCisgIC8qKiBUaGUgZXhwcmVzc2lvbiBjb250YWluZWQgbWlzbWF0Y2hlZCBbIGFuZCBdLiAqLworICBzdGF0aWMgY29uc3QgZXJyb3JfdHlwZSBlcnJvcl9icmFjayhfU19lcnJvcl9icmFjayk7CisKKyAgLyoqIFRoZSBleHByZXNzaW9uIGNvbnRhaW5lZCBtaXNtYXRjaGVkICggYW5kICkuICovCisgIHN0YXRpYyBjb25zdCBlcnJvcl90eXBlIGVycm9yX3BhcmVuKF9TX2Vycm9yX3BhcmVuKTsKKworICAvKiogVGhlIGV4cHJlc3Npb24gY29udGFpbmVkIG1pc21hdGNoZWQgeyBhbmQgfSAqLworICBzdGF0aWMgY29uc3QgZXJyb3JfdHlwZSBlcnJvcl9icmFjZShfU19lcnJvcl9icmFjZSk7CisKKyAgLyoqIFRoZSBleHByZXNzaW9uIGNvbnRhaW5lZCBhbiBpbnZhbGlkIHJhbmdlIGluIGEge30gZXhwcmVzc2lvbi4gKi8KKyAgc3RhdGljIGNvbnN0IGVycm9yX3R5cGUgZXJyb3JfYmFkYnJhY2UoX1NfZXJyb3JfYmFkYnJhY2UpOworCisgIC8qKgorICAgKiBUaGUgZXhwcmVzc2lvbiBjb250YWluZWQgYW4gaW52YWxpZCBjaGFyYWN0ZXIgcmFuZ2UsCisgICAqIHN1Y2ggYXMgW2ItYV0gaW4gbW9zdCBlbmNvZGluZ3MuCisgICAqLworICBzdGF0aWMgY29uc3QgZXJyb3JfdHlwZSBlcnJvcl9yYW5nZShfU19lcnJvcl9yYW5nZSk7CisKKyAgLyoqCisgICAqIFRoZXJlIHdhcyBpbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGNvbnZlcnQgdGhlIGV4cHJlc3Npb24gaW50byBhCisgICAqIGZpbml0ZSBzdGF0ZSBtYWNoaW5lLgorICAgKi8KKyAgc3RhdGljIGNvbnN0IGVycm9yX3R5cGUgZXJyb3Jfc3BhY2UoX1NfZXJyb3Jfc3BhY2UpOworCisgIC8qKgorICAgKiBPbmUgb2YgPGVtPio/K3s8L2VtPiB3YXMgbm90IHByZWNlZGVkIGJ5IGEgdmFsaWQgcmVndWxhciBleHByZXNzaW9uLgorICAgKi8KKyAgc3RhdGljIGNvbnN0IGVycm9yX3R5cGUgZXJyb3JfYmFkcmVwZWF0KF9TX2Vycm9yX2JhZHJlcGVhdCk7CisKKyAgLyoqCisgICAqIFRoZSBjb21wbGV4aXR5IG9mIGFuIGF0dGVtcHRlZCBtYXRjaCBhZ2FpbnN0IGEgcmVndWxhciBleHByZXNzaW9uCisgICAqIGV4Y2VlZGVkIGEgcHJlLXNldCBsZXZlbC4KKyAgICovCisgIHN0YXRpYyBjb25zdCBlcnJvcl90eXBlIGVycm9yX2NvbXBsZXhpdHkoX1NfZXJyb3JfY29tcGxleGl0eSk7CisKKyAgLyoqCisgICAqIFRoZXJlIHdhcyBpbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGRldGVybWluZSB3aGV0aGVyIHRoZQorICAgKiByZWd1bGFyIGV4cHJlc3Npb24gY291bGQgbWF0Y2ggdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIgc2VxdWVuY2UuCisgICAqLworICBzdGF0aWMgY29uc3QgZXJyb3JfdHlwZSBlcnJvcl9zdGFjayhfU19lcnJvcl9zdGFjayk7CisKKyAgLy9AfQorfQorCisKKyAgLy8gWzcuOF0gQ2xhc3MgcmVnZXhfZXJyb3IKKyAgLyoqCisgICAqICBAYnJpZWYgQSByZWd1bGFyIGV4cHJlc3Npb24gZXhjZXB0aW9uIGNsYXNzLgorICAgKiAgQGluZ3JvdXAgZXhjZXB0aW9ucworICAgKgorICAgKiAgVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBsaWJyYXJ5IHRocm93cyBvYmplY3RzIG9mIHRoaXMgY2xhc3Mgb24gZXJyb3IuCisgICAqLworICBjbGFzcyByZWdleF9lcnJvcgorICA6IHB1YmxpYyBzdGQ6OnJ1bnRpbWVfZXJyb3IKKyAgeworICBwdWJsaWM6CisgICAgLyoqCisgICAgICogQGJyaWVmIENvbnN0cnVjdHMgYSByZWdleF9lcnJvciBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZWNvZGUgdGhlIHJlZ2V4IGVycm9yIGNvZGUuCisgICAgICovCisgICAgZXhwbGljaXQKKyAgICByZWdleF9lcnJvcihyZWdleF9jb25zdGFudHM6OmVycm9yX3R5cGUgX19lY29kZSkKKyAgICA6IHN0ZDo6cnVudGltZV9lcnJvcigicmVnZXhfZXJyb3IiKSwgX01fY29kZShfX2Vjb2RlKQorICAgIHsgfQorCisgICAgLyoqCisgICAgICogQGJyaWVmIEdldHMgdGhlIHJlZ2V4IGVycm9yIGNvZGUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyB0aGUgcmVnZXggZXJyb3IgY29kZS4KKyAgICAgKi8KKyAgICByZWdleF9jb25zdGFudHM6OmVycm9yX3R5cGUKKyAgICBjb2RlKCkgY29uc3QKKyAgICB7IHJldHVybiBfTV9jb2RlOyB9CisKKyAgcHJvdGVjdGVkOgorICAgIHJlZ2V4X2NvbnN0YW50czo6ZXJyb3JfdHlwZSBfTV9jb2RlOworICB9OworCisgIC8vIFs3LjddIENsYXNzIHJlZ2V4X3RyYWl0cworICAvKioKKyAgICogQGJyaWVmIERlc2NyaWJlcyBhc3BlY3RzIG9mIGEgcmVndWxhciBleHByZXNzaW9uLgorICAgKgorICAgKiBBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0cmFpdHMgY2xhc3MgdGhhdCBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50cyBvZiB0cjEKKyAgICogc2VjdGlvbiBbNy4yXS4KKyAgICoKKyAgICogVGhlIGNsYXNzICVyZWdleCBpcyBwYXJhbWV0ZXJpemVkIGFyb3VuZCBhIHNldCBvZiByZWxhdGVkIHR5cGVzIGFuZAorICAgKiBmdW5jdGlvbnMgdXNlZCB0byBjb21wbGV0ZSB0aGUgZGVmaW5pdGlvbiBvZiBpdHMgc2VtYW50aWNzLiAgVGhpcyBjbGFzcworICAgKiBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50cyBvZiBzdWNoIGEgdHJhaXRzIGNsYXNzLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoX3R5cGU+CisgICAgc3RydWN0IHJlZ2V4X3RyYWl0cworICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9DaF90eXBlICAgICAgICAgICAgICAgICAgICAgY2hhcl90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX3N0cmluZzxjaGFyX3R5cGU+IHN0cmluZ190eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OmxvY2FsZSAgICAgICAgICAgICAgICAgIGxvY2FsZV90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OmN0eXBlX2Jhc2U6Om1hc2sgICAgICAgIGNoYXJfY2xhc3NfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnN0cnVjdHMgYSBkZWZhdWx0IHRyYWl0cyBvYmplY3QuCisgICAgICAgKi8KKyAgICAgIHJlZ2V4X3RyYWl0cygpCisgICAgICB7IH0KKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2l2ZXMgdGhlIGxlbmd0aCBvZiBhIEMtc3R5bGUgc3RyaW5nIHN0YXJ0aW5nIGF0IEBwIF9fcC4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19wIGEgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgYSBjaGFyYWN0ZXIgc2VxdWVuY2UuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGJldHdlZW4gQHAgKl9fcCBhbmQgdGhlIGZpcnN0CisgICAgICAgKiBkZWZhdWx0LWluaXRpYWxpemVkIHZhbHVlIG9mIHR5cGUgQHAgY2hhcl90eXBlLiAgSW4gb3RoZXIgd29yZHMsIHVzZXMKKyAgICAgICAqIHRoZSBDLXN0cmluZyBhbGdvcml0aG0gZm9yIGRldGVybWluaW5nIHRoZSBsZW5ndGggb2YgYSBzZXF1ZW5jZSBvZgorICAgICAgICogY2hhcmFjdGVycy4KKyAgICAgICAqLworICAgICAgc3RhdGljIHN0ZDo6c2l6ZV90CisgICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3ApCisgICAgICB7IHJldHVybiBzdHJpbmdfdHlwZTo6dHJhaXRzX3R5cGU6Omxlbmd0aChfX3ApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFBlcmZvcm1zIHRoZSBpZGVudGl0eSB0cmFuc2xhdGlvbi4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gYyBBIGNoYXJhY3RlciB0byB0aGUgbG9jYWxlLXNwZWNpZmljIGNoYXJhY3RlciBzZXQuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgYy4KKyAgICAgICAqLworICAgICAgY2hhcl90eXBlCisgICAgICB0cmFuc2xhdGUoY2hhcl90eXBlIF9fYykgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fYzsgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBUcmFuc2xhdGVzIGEgY2hhcmFjdGVyIGludG8gYSBjYXNlLWluc2Vuc2l0aXZlIGVxdWl2YWxlbnQuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIGMgQSBjaGFyYWN0ZXIgdG8gdGhlIGxvY2FsZS1zcGVjaWZpYyBjaGFyYWN0ZXIgc2V0LgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIHRoZSBsb2NhbGUtc3BlY2lmaWMgbG93ZXItY2FzZSBlcXVpdmFsZW50IG9mIGMuCisgICAgICAgKiBAdGhyb3dzIHN0ZDo6YmFkX2Nhc3QgaWYgdGhlIGltYnVlZCBsb2NhbGUgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY3R5cGUKKyAgICAgICAqICAgICAgICAgZmFjZXQuCisgICAgICAgKi8KKyAgICAgIGNoYXJfdHlwZQorICAgICAgdHJhbnNsYXRlX25vY2FzZShjaGFyX3R5cGUgX19jKSBjb25zdAorICAgICAgeworCXVzaW5nIHN0ZDo6Y3R5cGU7CisJdXNpbmcgc3RkOjp1c2VfZmFjZXQ7CisJcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxjaGFyX3R5cGU+ID4oX01fbG9jYWxlKS50b2xvd2VyKF9fYyk7CisgICAgICB9CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdldHMgYSBzb3J0IGtleSBmb3IgYSBjaGFyYWN0ZXIgc2VxdWVuY2UuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIGZpcnN0IGJlZ2lubmluZyBvZiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlLgorICAgICAgICogQHBhcmFtIGxhc3QgIG9uZS1wYXN0LXRoZS1lbmQgb2YgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZS4KKyAgICAgICAqCisgICAgICAgKiBSZXR1cm5zIGEgc29ydCBrZXkgZm9yIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UgZGVzaWduYXRlZCBieSB0aGUKKyAgICAgICAqIGl0ZXJhdG9yIHJhbmdlIFtGMSwgRjIpIHN1Y2ggdGhhdCBpZiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIFtHMSwgRzIpCisgICAgICAgKiBzb3J0cyBiZWZvcmUgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSBbSDEsIEgyKSB0aGVuCisgICAgICAgKiB2LnRyYW5zZm9ybShHMSwgRzIpIDwgdi50cmFuc2Zvcm0oSDEsIEgyKS4KKyAgICAgICAqCisgICAgICAgKiBXaGF0IHRoaXMgcmVhbGx5IGRvZXMgaXMgcHJvdmlkZSBhIG1vcmUgZWZmaWNpZW50IHdheSB0byBjb21wYXJlIGEKKyAgICAgICAqIHN0cmluZyB0byBtdWx0aXBsZSBvdGhlciBzdHJpbmdzIGluIGxvY2FsZXMgd2l0aCBmYW5jeSBjb2xsYXRpb24KKyAgICAgICAqIHJ1bGVzIGFuZCBlcXVpdmFsZW5jZSBjbGFzc2VzLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIGEgbG9jYWxlLXNwZWNpZmljIHNvcnQga2V5IGVxdWl2YWxlbnQgdG8gdGhlIGlucHV0IHJhbmdlLgorICAgICAgICoKKyAgICAgICAqIEB0aHJvd3Mgc3RkOjpiYWRfY2FzdCBpZiB0aGUgY3VycmVudCBsb2NhbGUgZG9lcyBub3QgaGF2ZSBhIGNvbGxhdGUKKyAgICAgICAqICAgICAgICAgZmFjZXQuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gd2RfaXRlcj4KKyAgICAgICAgc3RyaW5nX3R5cGUKKyAgICAgICAgdHJhbnNmb3JtKF9Gd2RfaXRlciBfX2ZpcnN0LCBfRndkX2l0ZXIgX19sYXN0KSBjb25zdAorICAgICAgICB7CisJICB1c2luZyBzdGQ6OmNvbGxhdGU7CisJICB1c2luZyBzdGQ6OnVzZV9mYWNldDsKKwkgIGNvbnN0IGNvbGxhdGU8X0NoX3R5cGU+JiBfX2ModXNlX2ZhY2V0PAorCQkJCSAgICAgICBjb2xsYXRlPF9DaF90eXBlPiA+KF9NX2xvY2FsZSkpOworCSAgc3RyaW5nX3R5cGUgX19zKF9fZmlyc3QsIF9fbGFzdCk7CisJICByZXR1cm4gX19jLnRyYW5zZm9ybShfX3MuZGF0YSgpLCBfX3MuZGF0YSgpICsgX19zLnNpemUoKSk7CisJfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBEdW5uby4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gZmlyc3QgYmVnaW5uaW5nIG9mIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UuCisgICAgICAgKiBAcGFyYW0gbGFzdCAgb25lLXBhc3QtdGhlLWVuZCBvZiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlLgorICAgICAgICoKKyAgICAgICAqIEVmZmVjdHM6IGlmIHR5cGVpZCh1c2VfZmFjZXQ8Y29sbGF0ZTxfQ2hfdHlwZT4gPikgPT0KKyAgICAgICAqIHR5cGVpZChjb2xsYXRlX2J5bmFtZTxfQ2hfdHlwZT4pIGFuZCB0aGUgZm9ybSBvZiB0aGUgc29ydCBrZXkKKyAgICAgICAqIHJldHVybmVkIGJ5IGNvbGxhdGVfYnluYW1lPF9DaF90eXBlPjo6dHJhbnNmb3JtKGZpcnN0LCBsYXN0KSBpcyBrbm93bgorICAgICAgICogYW5kIGNhbiBiZSBjb252ZXJ0ZWQgaW50byBhIHByaW1hcnkgc29ydCBrZXkgdGhlbiByZXR1cm5zIHRoYXQga2V5LAorICAgICAgICogb3RoZXJ3aXNlIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLiBXVEY/PworICAgICAgICoKKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRndkX2l0ZXI+CisgICAgICAgIHN0cmluZ190eXBlCisgICAgICAgIHRyYW5zZm9ybV9wcmltYXJ5KF9Gd2RfaXRlciBfX2ZpcnN0LCBfRndkX2l0ZXIgX19sYXN0KSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyBhIGNvbGxhdGlvbiBlbGVtZW50IGJ5IG5hbWUuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIGZpcnN0IGJlZ2lubmluZyBvZiB0aGUgY29sbGF0aW9uIGVsZW1lbnQgbmFtZS4KKyAgICAgICAqIEBwYXJhbSBsYXN0ICBvbmUtcGFzdC10aGUtZW5kIG9mIHRoZSBjb2xsYXRpb24gZWxlbWVudCBuYW1lLgorICAgICAgICogCisgICAgICAgKiBAcmV0dXJucyBhIHNlcXVlbmNlIG9mIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMgdGhhdCByZXByZXNlbnRzIHRoZQorICAgICAgICogY29sbGF0aW5nIGVsZW1lbnQgY29uc2lzdGluZyBvZiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIGRlc2lnbmF0ZWQgYnkKKyAgICAgICAqIHRoZSBpdGVyYXRvciByYW5nZSBbZmlyc3QsIGxhc3QpLiBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUKKyAgICAgICAqIGNoYXJhY3RlciBzZXF1ZW5jZSBpcyBub3QgYSB2YWxpZCBjb2xsYXRpbmcgZWxlbWVudC4KKyAgICAgICAqCisgICAgICAgKiBAdG9kbyBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z3ZF9pdGVyPgorICAgICAgICBzdHJpbmdfdHlwZQorICAgICAgICBsb29rdXBfY29sbGF0ZW5hbWUoX0Z3ZF9pdGVyIF9fZmlyc3QsIF9Gd2RfaXRlciBfX2xhc3QpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBNYXBzIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMgdG8gYSBuYW1lZCBjaGFyYWN0ZXIKKyAgICAgICAqICAgICAgICBjbGFzc2lmaWNhdGlvbi4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gZmlyc3QgYmVnaW5uaW5nIG9mIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UuCisgICAgICAgKiBAcGFyYW0gbGFzdCAgb25lLXBhc3QtdGhlLWVuZCBvZiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIGFuIHVuc3BlY2lmaWVkIHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGUgY2hhcmFjdGVyCisgICAgICAgKiBjbGFzc2lmaWNhdGlvbiBuYW1lZCBieSB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIGRlc2lnbmF0ZWQgYnkgdGhlCisgICAgICAgKiBpdGVyYXRvciByYW5nZSBbZmlyc3QsIGxhc3QpLiBUaGUgdmFsdWUgcmV0dXJuZWQgc2hhbGwgYmUgaW5kZXBlbmRlbnQKKyAgICAgICAqIG9mIHRoZSBjYXNlIG9mIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UuIElmIHRoZSBuYW1lCisgICAgICAgKiBpcyBub3QgcmVjb2duaXplZCB0aGVuIHJldHVybnMgYSB2YWx1ZSB0aGF0IGNvbXBhcmVzIGVxdWFsIHRvIDAuCisgICAgICAgKgorICAgICAgICogQXQgbGVhc3QgdGhlIGZvbGxvd2luZyBuYW1lcyAob3IgdGhlaXIgd2lkZS1jaGFyYWN0ZXIgZXF1aXZhbGVudCkgYXJlCisgICAgICAgKiBzdXBwb3J0ZWQuCisgICAgICAgKiAtIGQKKyAgICAgICAqIC0gdworICAgICAgICogLSBzCisgICAgICAgKiAtIGFsbnVtCisgICAgICAgKiAtIGFscGhhCisgICAgICAgKiAtIGJsYW5rCisgICAgICAgKiAtIGNudHJsCisgICAgICAgKiAtIGRpZ2l0CisgICAgICAgKiAtIGdyYXBoCisgICAgICAgKiAtIGxvd2VyCisgICAgICAgKiAtIHByaW50CisgICAgICAgKiAtIHB1bmN0CisgICAgICAgKiAtIHNwYWNlCisgICAgICAgKiAtIHVwcGVyCisgICAgICAgKiAtIHhkaWdpdAorICAgICAgICoKKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRndkX2l0ZXI+CisgICAgICAgIGNoYXJfY2xhc3NfdHlwZQorICAgICAgICBsb29rdXBfY2xhc3NuYW1lKF9Gd2RfaXRlciBfX2ZpcnN0LCBfRndkX2l0ZXIgX19sYXN0KSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgRGV0ZXJtaW5lcyBpZiBAcCBjIGlzIGEgbWVtYmVyIG9mIGFuIGlkZW50aWZpZWQgY2xhc3MuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIGMgYSBjaGFyYWN0ZXIuCisgICAgICAgKiBAcGFyYW0gZiBhIGNsYXNzIHR5cGUgKGFzIHJldHVybmVkIGZyb20gbG9va3VwX2NsYXNzbmFtZSkuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgY2hhcmFjdGVyIEBwIGMgaXMgYSBtZW1iZXIgb2YgdGhlIGNsYXNzaWZpY2F0aW9uCisgICAgICAgKiByZXByZXNlbnRlZCBieSBAcCBmLCBmYWxzZSBvdGhlcndpc2UuCisgICAgICAgKgorICAgICAgICogQHRocm93cyBzdGQ6OmJhZF9jYXN0IGlmIHRoZSBjdXJyZW50IGxvY2FsZSBkb2VzIG5vdCBoYXZlIGEgY3R5cGUKKyAgICAgICAqICAgICAgICAgZmFjZXQuCisgICAgICAgKi8KKyAgICAgIGJvb2wKKyAgICAgIGlzY3R5cGUoX0NoX3R5cGUgX19jLCBjaGFyX2NsYXNzX3R5cGUgX19mKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29udmVydHMgYSBkaWdpdCB0byBhbiBpbnQuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIGNoICAgIGEgY2hhcmFjdGVyIHJlcHJlc2VudGluZyBhIGRpZ2l0LgorICAgICAgICogQHBhcmFtIHJhZGl4IHRoZSByYWRpeCBpZiB0aGUgbnVtZXJpYyBjb252ZXJzaW9uIChsaW1pdGVkIHRvIDgsIDEwLAorICAgICAgICogICAgICAgICAgICAgIG9yIDE2KS4KKyAgICAgICAqIAorICAgICAgICogQHJldHVybnMgdGhlIHZhbHVlIHJlcHJlc2VudGVkIGJ5IHRoZSBkaWdpdCBjaCBpbiBiYXNlIHJhZGl4IGlmIHRoZQorICAgICAgICogY2hhcmFjdGVyIGNoIGlzIGEgdmFsaWQgZGlnaXQgaW4gYmFzZSByYWRpeDsgb3RoZXJ3aXNlIHJldHVybnMgLTEuCisgICAgICAgKi8KKyAgICAgIGludAorICAgICAgdmFsdWUoX0NoX3R5cGUgX19jaCwgaW50IF9fcmFkaXgpIGNvbnN0OworICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBJbWJ1ZXMgdGhlIHJlZ2V4X3RyYWl0cyBvYmplY3Qgd2l0aCBhIGNvcHkgb2YgYSBuZXcgbG9jYWxlLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBsb2MgQSBsb2NhbGUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgYSBjb3B5IG9mIHRoZSBwcmV2aW91cyBsb2NhbGUgaW4gdXNlIGJ5IHRoZSByZWdleF90cmFpdHMKKyAgICAgICAqICAgICAgICAgIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiBAbm90ZSBDYWxsaW5nIGltYnVlIHdpdGggYSBkaWZmZXJlbnQgbG9jYWxlIHRoYW4gdGhlIG9uZSBjdXJyZW50bHkgaW4KKyAgICAgICAqICAgICAgIHVzZSBpbnZhbGlkYXRlcyBhbGwgY2FjaGVkIGRhdGEgaGVsZCBieSAqdGhpcy4KKyAgICAgICAqLworICAgICAgbG9jYWxlX3R5cGUKKyAgICAgIGltYnVlKGxvY2FsZV90eXBlIF9fbG9jKQorICAgICAgeworCXN0ZDo6c3dhcChfTV9sb2NhbGUsIF9fbG9jKTsKKwlyZXR1cm4gX19sb2M7CisgICAgICB9CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdldHMgYSBjb3B5IG9mIHRoZSBjdXJyZW50IGxvY2FsZSBpbiB1c2UgYnkgdGhlIHJlZ2V4X3RyYWl0cworICAgICAgICogb2JqZWN0LgorICAgICAgICovCisgICAgICBsb2NhbGVfdHlwZQorICAgICAgZ2V0bG9jKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2xvY2FsZTsgfQorICAgICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgbG9jYWxlX3R5cGUgX01fbG9jYWxlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoX3R5cGU+CisgICAgYm9vbCByZWdleF90cmFpdHM8X0NoX3R5cGU+OjoKKyAgICBpc2N0eXBlKF9DaF90eXBlIF9fYywgY2hhcl9jbGFzc190eXBlIF9fZikgY29uc3QKKyAgICB7CisgICAgICB1c2luZyBzdGQ6OmN0eXBlOworICAgICAgdXNpbmcgc3RkOjp1c2VfZmFjZXQ7CisgICAgICBjb25zdCBjdHlwZTxfQ2hfdHlwZT4mIF9fY3R5cGUodXNlX2ZhY2V0PAorCQkJCSAgICAgY3R5cGU8X0NoX3R5cGU+ID4oX01fbG9jYWxlKSk7CisgICAgICAKKyAgICAgIGlmIChfX2N0eXBlLmlzKF9fYywgX19mKSkKKwlyZXR1cm4gdHJ1ZTsKKyAgICAgIAorICAgICAgLy8gc3BlY2lhbCBjYXNlIG9mIHVuZGVyc2NvcmUgaW4gW1s6dzpdXQorICAgICAgaWYgKF9fYyA9PSBfX2N0eXBlLndpZGVuKCdfJykpCisJeworCSAgY29uc3QgY2hhciogY29uc3QgX193YltdID0gInciOworCSAgY2hhcl9jbGFzc190eXBlIF9fd3QgPSB0aGlzLT5sb29rdXBfY2xhc3NuYW1lKF9fd2IsCisJCQkJCQkJX193YiArIHNpemVvZihfX3diKSk7CisJICBpZiAoX19mIHwgX193dCkKKwkgICAgcmV0dXJuIHRydWU7CisJfQorICAgIAorICAgICAgLy8gc3BlY2lhbCBjYXNlIG9mIFtbOnNwYWNlOl1dIGluIFtbOmJsYW5rOl1dCisgICAgICBpZiAoX19jID09IF9fY3R5cGUuaXNzcGFjZShfX2MpKQorCXsKKwkgIGNvbnN0IGNoYXIqIGNvbnN0IF9fYmJbXSA9ICJibGFuayI7CisJICBjaGFyX2NsYXNzX3R5cGUgX19idCA9IHRoaXMtPmxvb2t1cF9jbGFzc25hbWUoX19iYiwKKwkJCQkJCQlfX2JiICsgc2l6ZW9mKF9fYmIpKTsKKwkgIGlmIChfX2YgfCBfX2J0KQorCSAgICByZXR1cm4gdHJ1ZTsKKwl9CisgICAgICAKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoX3R5cGU+CisgICAgaW50IHJlZ2V4X3RyYWl0czxfQ2hfdHlwZT46OgorICAgIHZhbHVlKF9DaF90eXBlIF9fY2gsIGludCBfX3JhZGl4KSBjb25zdAorICAgIHsKKyAgICAgIHN0ZDo6YmFzaWNfaXN0cmluZ3N0cmVhbTxfQ2hfdHlwZT4gX19pcyhzdHJpbmdfdHlwZSgxLCBfX2NoKSk7CisgICAgICBpbnQgX192OworICAgICAgaWYgKF9fcmFkaXggPT0gOCkKKwlfX2lzID4+IHN0ZDo6b2N0OworICAgICAgZWxzZSBpZiAoX19yYWRpeCA9PSAxNikKKwlfX2lzID4+IHN0ZDo6aGV4OworICAgICAgX19pcyA+PiBfX3Y7CisgICAgICByZXR1cm4gX19pcy5mYWlsKCkgPyAtMSA6IF9fdjsKKyAgICB9CisKKyAgLy8gWzcuOF0gQ2xhc3MgYmFzaWNfcmVnZXgKKyAgLyoqCisgICAqIE9iamVjdHMgb2Ygc3BlY2lhbGl6YXRpb25zIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IHJlZ3VsYXIgZXhwcmVzc2lvbnMKKyAgICogY29uc3RydWN0ZWQgZnJvbSBzZXF1ZW5jZXMgb2YgY2hhcmFjdGVyIHR5cGUgQHAgX0NoX3R5cGUuCisgICAqCisgICAqIFN0b3JhZ2UgZm9yIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gaXMgYWxsb2NhdGVkIGFuZCBkZWFsbG9jYXRlZCBhcworICAgKiBuZWNlc3NhcnkgYnkgdGhlIG1lbWJlciBmdW5jdGlvbnMgb2YgdGhpcyBjbGFzcy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaF90eXBlLCB0eXBlbmFtZSBfUnhfdHJhaXRzID0gcmVnZXhfdHJhaXRzPF9DaF90eXBlPiA+CisgICAgY2xhc3MgYmFzaWNfcmVnZXgKKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gdHlwZXM6CisgICAgICB0eXBlZGVmIF9DaF90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgcmVnZXhfY29uc3RhbnRzOjpzeW50YXhfb3B0aW9uX3R5cGUgZmxhZ190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUnhfdHJhaXRzOjpsb2NhbGVfdHlwZSAgbG9jYWxlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9SeF90cmFpdHM6OnN0cmluZ190eXBlICBzdHJpbmdfdHlwZTsKKworICAgICAgLyoqCisgICAgICAgKiBAbmFtZSBDb25zdGFudHMKKyAgICAgICAqIHRyMSBbNy44LjFdIHN0ZCBbMjguOC4xXQorICAgICAgICovCisgICAgICAvL0B7CisgICAgICBzdGF0aWMgY29uc3QgcmVnZXhfY29uc3RhbnRzOjpzeW50YXhfb3B0aW9uX3R5cGUgaWNhc2UKKyAgICAgICAgPSByZWdleF9jb25zdGFudHM6OmljYXNlOworICAgICAgc3RhdGljIGNvbnN0IHJlZ2V4X2NvbnN0YW50czo6c3ludGF4X29wdGlvbl90eXBlIG5vc3VicworICAgICAgICA9IHJlZ2V4X2NvbnN0YW50czo6bm9zdWJzOworICAgICAgc3RhdGljIGNvbnN0IHJlZ2V4X2NvbnN0YW50czo6c3ludGF4X29wdGlvbl90eXBlIG9wdGltaXplCisgICAgICAgID0gcmVnZXhfY29uc3RhbnRzOjpvcHRpbWl6ZTsKKyAgICAgIHN0YXRpYyBjb25zdCByZWdleF9jb25zdGFudHM6OnN5bnRheF9vcHRpb25fdHlwZSBjb2xsYXRlCisgICAgICAgID0gcmVnZXhfY29uc3RhbnRzOjpjb2xsYXRlOworICAgICAgc3RhdGljIGNvbnN0IHJlZ2V4X2NvbnN0YW50czo6c3ludGF4X29wdGlvbl90eXBlIEVDTUFTY3JpcHQKKyAgICAgICAgPSByZWdleF9jb25zdGFudHM6OkVDTUFTY3JpcHQ7CisgICAgICBzdGF0aWMgY29uc3QgcmVnZXhfY29uc3RhbnRzOjpzeW50YXhfb3B0aW9uX3R5cGUgYmFzaWMKKyAgICAgICAgPSByZWdleF9jb25zdGFudHM6OmJhc2ljOworICAgICAgc3RhdGljIGNvbnN0IHJlZ2V4X2NvbnN0YW50czo6c3ludGF4X29wdGlvbl90eXBlIGV4dGVuZGVkCisgICAgICAgID0gcmVnZXhfY29uc3RhbnRzOjpleHRlbmRlZDsKKyAgICAgIHN0YXRpYyBjb25zdCByZWdleF9jb25zdGFudHM6OnN5bnRheF9vcHRpb25fdHlwZSBhd2sKKyAgICAgICAgPSByZWdleF9jb25zdGFudHM6OmF3azsKKyAgICAgIHN0YXRpYyBjb25zdCByZWdleF9jb25zdGFudHM6OnN5bnRheF9vcHRpb25fdHlwZSBncmVwCisgICAgICAgID0gcmVnZXhfY29uc3RhbnRzOjpncmVwOworICAgICAgc3RhdGljIGNvbnN0IHJlZ2V4X2NvbnN0YW50czo6c3ludGF4X29wdGlvbl90eXBlIGVncmVwCisgICAgICAgID0gcmVnZXhfY29uc3RhbnRzOjplZ3JlcDsKKyAgICAgIC8vQH0KKworICAgICAgLy8gWzcuOC4yXSBjb25zdHJ1Y3QvY29weS9kZXN0cm95CisgICAgICAvKioKKyAgICAgICAqIENvbnN0cnVjdHMgYSBiYXNpYyByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBkb2VzIG5vdCBtYXRjaCBhbnkKKyAgICAgICAqIGNoYXJhY3RlciBzZXF1ZW5jZS4KKyAgICAgICAqLworICAgICAgYmFzaWNfcmVnZXgoKQorICAgICAgOiBfTV9mbGFncyhyZWdleF9jb25zdGFudHM6OkVDTUFTY3JpcHQpLCBfTV9wYXR0ZXJuKCksIF9NX21hcmtfY291bnQoMCkKKyAgICAgIHsgX01fY29tcGlsZSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnN0cnVjdHMgYSBiYXNpYyByZWd1bGFyIGV4cHJlc3Npb24gZnJvbSB0aGUgc2VxdWVuY2UKKyAgICAgICAqIFtwLCBwICsgY2hhcl90cmFpdHM8X0NoX3R5cGU+OjpsZW5ndGgocCkpIGludGVycHJldGVkIGFjY29yZGluZyB0byB0aGUKKyAgICAgICAqIGZsYWdzIGluIEBwIGYuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIHAgQSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiBhIEMtc3R5bGUgbnVsbC10ZXJtaW5hdGVkIHN0cmluZworICAgICAgICogICAgICAgICAgY29udGFpbmluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICAgICAqIEBwYXJhbSBmIEZsYWdzIGluZGljYXRpbmcgdGhlIHN5bnRheCBydWxlcyBhbmQgb3B0aW9ucy4KKyAgICAgICAqCisgICAgICAgKiBAdGhyb3dzIHJlZ2V4X2Vycm9yIGlmIEBwIHAgaXMgbm90IGEgdmFsaWQgcmVndWxhciBleHByZXNzaW9uLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgYmFzaWNfcmVnZXgoY29uc3QgX0NoX3R5cGUqIF9fcCwKKwkJICBmbGFnX3R5cGUgX19mID0gcmVnZXhfY29uc3RhbnRzOjpFQ01BU2NyaXB0KQorICAgICAgOiBfTV9mbGFncyhfX2YpLCBfTV9wYXR0ZXJuKF9fcCksIF9NX21hcmtfY291bnQoMCkKKyAgICAgIHsgX01fY29tcGlsZSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnN0cnVjdHMgYSBiYXNpYyByZWd1bGFyIGV4cHJlc3Npb24gZnJvbSB0aGUgc2VxdWVuY2UKKyAgICAgICAqIFtwLCBwICsgbGVuKSBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gdGhlIGZsYWdzIGluIEBwIGYuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIHAgICBBIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSByZWd1bGFyCisgICAgICAgKiAgICAgICAgICAgIGV4cHJlc3Npb24uCisgICAgICAgKiBAcGFyYW0gbGVuIFRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBjb250YWluaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb24uCisgICAgICAgKiBAcGFyYW0gZiAgIEZsYWdzIGluZGljYXRpbmcgdGhlIHN5bnRheCBydWxlcyBhbmQgb3B0aW9ucy4KKyAgICAgICAqCisgICAgICAgKiBAdGhyb3dzIHJlZ2V4X2Vycm9yIGlmIEBwIHAgaXMgbm90IGEgdmFsaWQgcmVndWxhciBleHByZXNzaW9uLgorICAgICAgICovCisgICAgICBiYXNpY19yZWdleChjb25zdCBfQ2hfdHlwZSogX19wLCBzdGQ6OnNpemVfdCBfX2xlbiwgZmxhZ190eXBlIF9fZikKKyAgICAgIDogX01fZmxhZ3MoX19mKSAsIF9NX3BhdHRlcm4oX19wLCBfX2xlbiksIF9NX21hcmtfY291bnQoMCkKKyAgICAgIHsgX01fY29tcGlsZSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvcHktY29uc3RydWN0cyBhIGJhc2ljIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gcmhzIEEgQHAgcmVnZXggb2JqZWN0LgorICAgICAqLworICAgICAgYmFzaWNfcmVnZXgoY29uc3QgYmFzaWNfcmVnZXgmIF9fcmhzKQorICAgICAgOiBfTV9mbGFncyhfX3Jocy5fTV9mbGFncyksIF9NX3BhdHRlcm4oX19yaHMuX01fcGF0dGVybiksCisJX01fbWFya19jb3VudChfX3Jocy5fTV9tYXJrX2NvdW50KQorICAgICAgeyBfTV9jb21waWxlKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29uc3RydWN0cyBhIGJhc2ljIHJlZ3VsYXIgZXhwcmVzc2lvbiBmcm9tIHRoZSBzdHJpbmcKKyAgICAgICAqIEBwIHMgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBmbGFncyBpbiBAcCBmLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBzIEEgc3RyaW5nIGNvbnRhaW5pbmcgYSByZWd1bGFyIGV4cHJlc3Npb24uCisgICAgICAgKiBAcGFyYW0gZiBGbGFncyBpbmRpY2F0aW5nIHRoZSBzeW50YXggcnVsZXMgYW5kIG9wdGlvbnMuCisgICAgICAgKgorICAgICAgICogQHRocm93cyByZWdleF9lcnJvciBpZiBAcCBzIGlzIG5vdCBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoX3RyYWl0cywgdHlwZW5hbWUgX0NoX2FsbG9jPgorICAgICAgICBleHBsaWNpdAorICAgICAgICBiYXNpY19yZWdleChjb25zdCBiYXNpY19zdHJpbmc8X0NoX3R5cGUsIF9DaF90cmFpdHMsIF9DaF9hbGxvYz4mIF9fcywKKwkJICAgIGZsYWdfdHlwZSBfX2YgPSByZWdleF9jb25zdGFudHM6OkVDTUFTY3JpcHQpCisJOiBfTV9mbGFncyhfX2YpLCBfTV9wYXR0ZXJuKF9fcy5iZWdpbigpLCBfX3MuZW5kKCkpLCBfTV9tYXJrX2NvdW50KDApCisgICAgICAgIHsgX01fY29tcGlsZSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnN0cnVjdHMgYSBiYXNpYyByZWd1bGFyIGV4cHJlc3Npb24gZnJvbSB0aGUgcmFuZ2UKKyAgICAgICAqIFtmaXJzdCwgbGFzdCkgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBmbGFncyBpbiBAcCBmLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBmaXJzdCBUaGUgc3RhcnQgb2YgYSByYW5nZSBjb250YWluaW5nIGEgdmFsaWQgcmVndWxhcgorICAgICAgICogICAgICAgICAgICAgIGV4cHJlc3Npb24uCisgICAgICAgKiBAcGFyYW0gbGFzdCAgVGhlIGVuZCBvZiBhIHJhbmdlIGNvbnRhaW5pbmcgYSB2YWxpZCByZWd1bGFyCisgICAgICAgKiAgICAgICAgICAgICAgZXhwcmVzc2lvbi4KKyAgICAgICAqIEBwYXJhbSBmICAgICBUaGUgZm9ybWF0IGZsYWdzIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb24uCisgICAgICAgKgorICAgICAgICogQHRocm93cyByZWdleF9lcnJvciBpZiBAcCBbZmlyc3QsIGxhc3QpIGlzIG5vdCBhIHZhbGlkIHJlZ3VsYXIKKyAgICAgICAqICAgICAgICAgZXhwcmVzc2lvbi4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGJhc2ljX3JlZ2V4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgCisJCSAgICBmbGFnX3R5cGUgX19mID0gcmVnZXhfY29uc3RhbnRzOjpFQ01BU2NyaXB0KQorCTogX01fZmxhZ3MoX19mKSwgX01fcGF0dGVybihfX2ZpcnN0LCBfX2xhc3QpLCBfTV9tYXJrX2NvdW50KDApCisgICAgICAgIHsgX01fY29tcGlsZSgpOyB9CisKKyNpZmRlZiBfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb25zdHJ1Y3RzIGEgYmFzaWMgcmVndWxhciBleHByZXNzaW9uIGZyb20gYW4gaW5pdGlhbGl6ZXIgbGlzdC4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gbCAgVGhlIGluaXRpYWxpemVyIGxpc3QuCisgICAgICAgKiBAcGFyYW0gZiAgVGhlIGZvcm1hdCBmbGFncyBvZiB0aGUgcmVndWxhciBleHByZXNzaW9uLgorICAgICAgICoKKyAgICAgICAqIEB0aHJvd3MgcmVnZXhfZXJyb3IgaWYgQHAgbCBpcyBub3QgYSB2YWxpZCByZWd1bGFyIGV4cHJlc3Npb24uCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3JlZ2V4KGluaXRpYWxpemVyX2xpc3Q8X0NoX3R5cGU+IF9fbCwKKwkJICBmbGFnX3R5cGUgX19mID0gcmVnZXhfY29uc3RhbnRzOjpFQ01BU2NyaXB0KQorCTogX01fZmxhZ3MoX19mKSwgX01fcGF0dGVybihfX2wuYmVnaW4oKSwgX19sLmVuZCgpKSwgX01fbWFya19jb3VudCgwKQorICAgICAgICB7IF9NX2NvbXBpbGUoKTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIERlc3Ryb3lzIGEgYmFzaWMgcmVndWxhciBleHByZXNzaW9uLgorICAgICAgICovCisgICAgICB+YmFzaWNfcmVnZXgoKQorICAgICAgeyB9CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEFzc2lnbnMgb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBhbm90aGVyLgorICAgICAgICovCisgICAgICBiYXNpY19yZWdleCYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBiYXNpY19yZWdleCYgX19yaHMpCisgICAgICB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19yaHMpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlcGxhY2VzIGEgcmVndWxhciBleHByZXNzaW9uIHdpdGggYSBuZXcgb25lIGNvbnN0cnVjdGVkIGZyb20KKyAgICAgICAqIGEgQy1zdHlsZSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBBIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIGEgbnVsbC10ZXJtaW5hdGVkIEMtc3R5bGUgc3RyaW5nCisgICAgICAgKiAgICAgICAgY29udGFpbmluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICAgICAqLworICAgICAgYmFzaWNfcmVnZXgmCisgICAgICBvcGVyYXRvcj0oY29uc3QgX0NoX3R5cGUqIF9fcCkKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3AsIGZsYWdzKCkpOyB9CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlcGxhY2VzIGEgcmVndWxhciBleHByZXNzaW9uIHdpdGggYSBuZXcgb25lIGNvbnN0cnVjdGVkIGZyb20KKyAgICAgICAqIGEgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBBIHBvaW50ZXIgdG8gYSBzdHJpbmcgY29udGFpbmluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoX3R5cGVyYWl0cywgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICAgICAgYmFzaWNfcmVnZXgmCisgICAgICAgIG9wZXJhdG9yPShjb25zdCBiYXNpY19zdHJpbmc8X0NoX3R5cGUsIF9DaF90eXBlcmFpdHMsIF9BbGxvY2F0b3I+JiBfX3MpCisgICAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MsIGZsYWdzKCkpOyB9CisKKyAgICAgIC8vIFs3LjguM10gYXNzaWduCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiB0aGUgcmVhbCBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSB0aGF0IEFub3RoZXIgcmVndWxhciBleHByZXNzaW9uIG9iamVjdC4KKyAgICAgICAqLworICAgICAgYmFzaWNfcmVnZXgmCisgICAgICBhc3NpZ24oY29uc3QgYmFzaWNfcmVnZXgmIF9fdGhhdCkKKyAgICAgIHsKKwliYXNpY19yZWdleCBfX3RtcChfX3RoYXQpOworCXRoaXMtPnN3YXAoX190bXApOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQXNzaWducyBhIG5ldyByZWd1bGFyIGV4cHJlc3Npb24gdG8gYSByZWdleCBvYmplY3QgZnJvbSBhCisgICAgICAgKiBDLXN0eWxlIG51bGwtdGVybWluYXRlZCBzdHJpbmcgY29udGFpbmluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgICAgICogcGF0dGVybi4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gcCAgICAgQSBwb2ludGVyIHRvIGEgQy1zdHlsZSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIGNvbnRhaW5pbmcKKyAgICAgICAqICAgICAgICAgICAgICBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLgorICAgICAgICogQHBhcmFtIGZsYWdzIFN5bnRheCBvcHRpb24gZmxhZ3MuCisgICAgICAgKgorICAgICAgICogQHRocm93cyByZWdleF9lcnJvciBpZiBwIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCByZWd1bGFyIGV4cHJlc3Npb24KKyAgICAgICAqIHBhdHRlcm4gaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIEBwIGZsYWdzLiAgSWYgcmVnZXhfZXJyb3IgaXMgdGhyb3duLAorICAgICAgICogKnRoaXMgcmVtYWlucyB1bmNoYW5nZWQuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3JlZ2V4JgorICAgICAgYXNzaWduKGNvbnN0IF9DaF90eXBlKiBfX3AsCisJICAgICBmbGFnX3R5cGUgX19mbGFncyA9IHJlZ2V4X2NvbnN0YW50czo6RUNNQVNjcmlwdCkKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihzdHJpbmdfdHlwZShfX3ApLCBfX2ZsYWdzKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBBc3NpZ25zIGEgbmV3IHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBhIHJlZ2V4IG9iamVjdCBmcm9tIGEKKyAgICAgICAqIEMtc3R5bGUgc3RyaW5nIGNvbnRhaW5pbmcgYSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybi4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gcCAgICAgQSBwb2ludGVyIHRvIGEgQy1zdHlsZSBzdHJpbmcgY29udGFpbmluZyBhCisgICAgICAgKiAgICAgICAgICAgICAgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4uCisgICAgICAgKiBAcGFyYW0gbGVuICAgVGhlIGxlbmd0aCBvZiB0aGUgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gc3RyaW5nLgorICAgICAgICogQHBhcmFtIGZsYWdzIFN5bnRheCBvcHRpb24gZmxhZ3MuCisgICAgICAgKgorICAgICAgICogQHRocm93cyByZWdleF9lcnJvciBpZiBwIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCByZWd1bGFyIGV4cHJlc3Npb24KKyAgICAgICAqIHBhdHRlcm4gaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIEBwIGZsYWdzLiAgSWYgcmVnZXhfZXJyb3IgaXMgdGhyb3duLAorICAgICAgICogKnRoaXMgcmVtYWlucyB1bmNoYW5nZWQuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3JlZ2V4JgorICAgICAgYXNzaWduKGNvbnN0IF9DaF90eXBlKiBfX3AsIHN0ZDo6c2l6ZV90IF9fbGVuLCBmbGFnX3R5cGUgX19mbGFncykKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihzdHJpbmdfdHlwZShfX3AsIF9fbGVuKSwgX19mbGFncyk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQXNzaWducyBhIG5ldyByZWd1bGFyIGV4cHJlc3Npb24gdG8gYSByZWdleCBvYmplY3QgZnJvbSBhIAorICAgICAgICogc3RyaW5nIGNvbnRhaW5pbmcgYSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybi4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gcyAgICAgQSBzdHJpbmcgY29udGFpbmluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLgorICAgICAgICogQHBhcmFtIGZsYWdzIFN5bnRheCBvcHRpb24gZmxhZ3MuCisgICAgICAgKgorICAgICAgICogQHRocm93cyByZWdleF9lcnJvciBpZiBwIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCByZWd1bGFyIGV4cHJlc3Npb24KKyAgICAgICAqIHBhdHRlcm4gaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIEBwIGZsYWdzLiAgSWYgcmVnZXhfZXJyb3IgaXMgdGhyb3duLAorICAgICAgICogKnRoaXMgcmVtYWlucyB1bmNoYW5nZWQuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaF90eXBlcmFpdHMsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgICAgIGJhc2ljX3JlZ2V4JgorICAgICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nPF9DaF90eXBlLCBfQ2hfdHlwZXJhaXRzLCBfQWxsb2NhdG9yPiYgX19zLAorCSAgICAgICBmbGFnX3R5cGUgX19mID0gcmVnZXhfY29uc3RhbnRzOjpFQ01BU2NyaXB0KQorICAgICAgICB7IAorCSAgYmFzaWNfcmVnZXggX190bXAoX19zLCBfX2YpOworCSAgdGhpcy0+c3dhcChfX3RtcCk7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBBc3NpZ25zIGEgbmV3IHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBhIHJlZ2V4IG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gZmlyc3QgVGhlIHN0YXJ0IG9mIGEgcmFuZ2UgY29udGFpbmluZyBhIHZhbGlkIHJlZ3VsYXIKKyAgICAgICAqICAgICAgICAgICAgICBleHByZXNzaW9uLgorICAgICAgICogQHBhcmFtIGxhc3QgIFRoZSBlbmQgb2YgYSByYW5nZSBjb250YWluaW5nIGEgdmFsaWQgcmVndWxhcgorICAgICAgICogICAgICAgICAgICAgIGV4cHJlc3Npb24uCisgICAgICAgKiBAcGFyYW0gZmxhZ3MgU3ludGF4IG9wdGlvbiBmbGFncy4KKyAgICAgICAqCisgICAgICAgKiBAdGhyb3dzIHJlZ2V4X2Vycm9yIGlmIHAgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgICAgICogcGF0dGVybiBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gQHAgZmxhZ3MuICBJZiByZWdleF9lcnJvciBpcyB0aHJvd24sCisgICAgICAgKiB0aGUgb2JqZWN0IHJlbWFpbnMgdW5jaGFuZ2VkLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgYmFzaWNfcmVnZXgmCisgICAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICAgICAgIGZsYWdfdHlwZSBfX2ZsYWdzID0gcmVnZXhfY29uc3RhbnRzOjpFQ01BU2NyaXB0KQorICAgICAgICB7IHJldHVybiB0aGlzLT5hc3NpZ24oc3RyaW5nX3R5cGUoX19maXJzdCwgX19sYXN0KSwgX19mbGFncyk7IH0KKworI2lmZGVmIF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEFzc2lnbnMgYSBuZXcgcmVndWxhciBleHByZXNzaW9uIHRvIGEgcmVnZXggb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBsICAgICBBbiBpbml0aWFsaXplciBsaXN0IHJlcHJlc2VudGluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICAgICAqIEBwYXJhbSBmbGFncyBTeW50YXggb3B0aW9uIGZsYWdzLgorICAgICAgICoKKyAgICAgICAqIEB0aHJvd3MgcmVnZXhfZXJyb3IgaWYgQHAgbCBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgcmVndWxhcgorICAgICAgICogZXhwcmVzc2lvbiBwYXR0ZXJuIGludGVycHJldGVkIGFjY29yZGluZyB0byBAcCBmbGFncy4gIElmIHJlZ2V4X2Vycm9yCisgICAgICAgKiBpcyB0aHJvd24sIHRoZSBvYmplY3QgcmVtYWlucyB1bmNoYW5nZWQuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3JlZ2V4JgorICAgICAgYXNzaWduKGluaXRpYWxpemVyX2xpc3Q8X0NoX3R5cGU+IF9fbCwKKwkgICAgIGZsYWdfdHlwZSBfX2YgPSByZWdleF9jb25zdGFudHM6OkVDTUFTY3JpcHQpCisgICAgICB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19sLmJlZ2luKCksIF9fbC5lbmQoKSwgX19mKTsgfQorI2VuZGlmCisKKyAgICAgIC8vIFs3LjguNF0gY29uc3Qgb3BlcmF0aW9ucworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyB0aGUgbnVtYmVyIG9mIG1hcmtlZCBzdWJleHByZXNzaW9ucyB3aXRoaW4gdGhlIHJlZ3VsYXIKKyAgICAgICAqIGV4cHJlc3Npb24uCisgICAgICAgKi8KKyAgICAgIHVuc2lnbmVkIGludAorICAgICAgbWFya19jb3VudCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9tYXJrX2NvdW50OyB9CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdldHMgdGhlIGZsYWdzIHVzZWQgdG8gY29uc3RydWN0IHRoZSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICAgICAqIG9yIGluIHRoZSBsYXN0IGNhbGwgdG8gYXNzaWduKCkuCisgICAgICAgKi8KKyAgICAgIGZsYWdfdHlwZQorICAgICAgZmxhZ3MoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZmxhZ3M7IH0KKyAgICAgIAorICAgICAgLy8gWzcuOC41XSBsb2NhbGUKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEltYnVlcyB0aGUgcmVndWxhciBleHByZXNzaW9uIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBsb2NhbGUuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIGxvYyBBIGxvY2FsZS4KKyAgICAgICAqLworICAgICAgbG9jYWxlX3R5cGUKKyAgICAgIGltYnVlKGxvY2FsZV90eXBlIF9fbG9jKQorICAgICAgeyByZXR1cm4gX01fdHJhaXRzLmltYnVlKF9fbG9jKTsgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIHRoZSBsb2NhbGUgY3VycmVudGx5IGltYnVlZCBpbiB0aGUgcmVndWxhciBleHByZXNzaW9uCisgICAgICAgKiAgICAgICAgb2JqZWN0LgorICAgICAgICovCisgICAgICBsb2NhbGVfdHlwZQorICAgICAgZ2V0bG9jKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3RyYWl0cy5nZXRsb2MoKTsgfQorICAgICAgCisgICAgICAvLyBbNy44LjZdIHN3YXAKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFN3YXBzIHRoZSBjb250ZW50cyBvZiB0d28gcmVndWxhciBleHByZXNzaW9uIG9iamVjdHMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIHJocyBBbm90aGVyIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3QuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoYmFzaWNfcmVnZXgmIF9fcmhzKQorICAgICAgeworCXN0ZDo6c3dhcChfTV9mbGFncywgICAgICBfX3Jocy5fTV9mbGFncyk7CisJc3RkOjpzd2FwKF9NX3BhdHRlcm4sICAgIF9fcmhzLl9NX3BhdHRlcm4pOworCXN0ZDo6c3dhcChfTV9tYXJrX2NvdW50LCBfX3Jocy5fTV9tYXJrX2NvdW50KTsKKwlzdGQ6OnN3YXAoX01fdHJhaXRzLCAgICAgX19yaHMuX01fdHJhaXRzKTsKKyAgICAgIH0KKyAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb21waWxlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIGludG8gYSBORkEuCisgICAgICAgKiBAdG9kbyBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZCBfTV9jb21waWxlKCk7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBmbGFnX3R5cGUgICAgX01fZmxhZ3M7CisgICAgICBzdHJpbmdfdHlwZSAgX01fcGF0dGVybjsKKyAgICAgIHVuc2lnbmVkIGludCBfTV9tYXJrX2NvdW50OworICAgICAgX1J4X3RyYWl0cyAgIF9NX3RyYWl0czsKKyAgICB9OworICAKKyAgLyoqIEBicmllZiBTdGFuZGFyZCByZWd1bGFyIGV4cHJlc3Npb25zLiAqLworICB0eXBlZGVmIGJhc2ljX3JlZ2V4PGNoYXI+ICAgIHJlZ2V4OworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIC8qKiBAYnJpZWYgU3RhbmRhcmQgd2lkZS1jaGFyYWN0ZXIgcmVndWxhciBleHByZXNzaW9ucy4gKi8KKyAgdHlwZWRlZiBiYXNpY19yZWdleDx3Y2hhcl90PiB3cmVnZXg7CisjZW5kaWYKKworCisgIC8vIFs3LjguNl0gYmFzaWNfcmVnZXggc3dhcAorICAvKioKKyAgICogQGJyaWVmIFN3YXBzIHRoZSBjb250ZW50cyBvZiB0d28gcmVndWxhciBleHByZXNzaW9uIG9iamVjdHMuCisgICAqIEBwYXJhbSBsaHMgRmlyc3QgcmVndWxhciBleHByZXNzaW9uLgorICAgKiBAcGFyYW0gcmhzIFNlY29uZCByZWd1bGFyIGV4cHJlc3Npb24uCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hfdHlwZSwgdHlwZW5hbWUgX1J4X3RyYWl0cz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoYmFzaWNfcmVnZXg8X0NoX3R5cGUsIF9SeF90cmFpdHM+JiBfX2xocywKKwkgYmFzaWNfcmVnZXg8X0NoX3R5cGUsIF9SeF90cmFpdHM+JiBfX3JocykKKyAgICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CisKKworICAvLyBbNy45XSBDbGFzcyB0ZW1wbGF0ZSBzdWJfbWF0Y2gKKyAgLyoqCisgICAqIEEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBtYXRjaGVkIGJ5IGEgcGFydGljdWxhciBtYXJrZWQgc3ViLWV4cHJlc3Npb24uCisgICAqCisgICAqIEFuIG9iamVjdCBvZiB0aGlzIGNsYXNzIGlzIGVzc2VudGlhbGx5IGEgcGFpciBvZiBpdGVyYXRvcnMgbWFya2luZyBhCisgICAqIG1hdGNoZWQgc3ViZXhwcmVzc2lvbiB3aXRoaW4gYSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiBtYXRjaC4gU3VjaAorICAgKiBvYmplY3RzIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYW5kIGNvbXBhcmVkIHdpdGggc3RkOjpiYXNpY19zdHJpbmcgb2JqZWN0cworICAgKiBvZiBhIHNpbWlsYXIgYmFzZSBjaGFyYWN0ZXIgdHlwZSBhcyB0aGUgcGF0dGVybiBtYXRjaGVkIGJ5IHRoZSByZWd1bGFyCisgICAqIGV4cHJlc3Npb24uCisgICAqCisgICAqIFRoZSBpdGVyYXRvcnMgdGhhdCBtYWtlIHVwIHRoZSBwYWlyIGFyZSB0aGUgdXN1YWwgaGFsZi1vcGVuIGludGVydmFsCisgICAqIHJlZmVyZW5jaW5nIHRoZSBhY3R1YWwgb3JpZ2luYWwgcGF0dGVybiBtYXRjaGVkLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpSXRlcj4KKyAgICBjbGFzcyBzdWJfbWF0Y2ggOiBwdWJsaWMgc3RkOjpwYWlyPF9CaUl0ZXIsIF9CaUl0ZXI+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaUl0ZXI+Ojp2YWx1ZV90eXBlICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaUl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0JpSXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcjsKKworICAgIHB1YmxpYzoKKyAgICAgIGJvb2wgbWF0Y2hlZDsKKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiBHZXRzIHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoaW5nIHNlcXVlbmNlLgorICAgICAgICovCisgICAgICBkaWZmZXJlbmNlX3R5cGUKKyAgICAgIGxlbmd0aCgpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5tYXRjaGVkID8gc3RkOjpkaXN0YW5jZSh0aGlzLT5maXJzdCwgdGhpcy0+c2Vjb25kKSA6IDA7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyB0aGUgbWF0Y2hpbmcgc2VxdWVuY2UgYXMgYSBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgdGhlIG1hdGNoaW5nIHNlcXVlbmNlIGFzIGEgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqIFRoaXMgaXMgdGhlIGltcGxpY2l0IGNvbnZlcnNpb24gb3BlcmF0b3IuICBJdCBpcyBpZGVudGljYWwgdG8gdGhlCisgICAgICAgKiBzdHIoKSBtZW1iZXIgZnVuY3Rpb24gZXhjZXB0IHRoYXQgaXQgd2lsbCB3YW50IHRvIHBvcCB1cCBpbgorICAgICAgICogdW5leHBlY3RlZCBwbGFjZXMgYW5kIGNhdXNlIGEgZ3JlYXQgZGVhbCBvZiBjb25mdXNpb24gYW5kIGN1cnNpbmcKKyAgICAgICAqIGZyb20gdGhlIHVud2FyeS4KKyAgICAgICAqLworICAgICAgb3BlcmF0b3IgYmFzaWNfc3RyaW5nPHZhbHVlX3R5cGU+KCkgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gdGhpcy0+bWF0Y2hlZAorCSAgPyBzdGQ6OmJhc2ljX3N0cmluZzx2YWx1ZV90eXBlPih0aGlzLT5maXJzdCwgdGhpcy0+c2Vjb25kKQorCSAgOiBzdGQ6OmJhc2ljX3N0cmluZzx2YWx1ZV90eXBlPigpOworICAgICAgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIHRoZSBtYXRjaGluZyBzZXF1ZW5jZSBhcyBhIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyB0aGUgbWF0Y2hpbmcgc2VxdWVuY2UgYXMgYSBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZzx2YWx1ZV90eXBlPgorICAgICAgc3RyKCkgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gdGhpcy0+bWF0Y2hlZAorCSAgPyBzdGQ6OmJhc2ljX3N0cmluZzx2YWx1ZV90eXBlPih0aGlzLT5maXJzdCwgdGhpcy0+c2Vjb25kKQorCSAgOiBzdGQ6OmJhc2ljX3N0cmluZzx2YWx1ZV90eXBlPigpOworICAgICAgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb21wYXJlcyB0aGlzIGFuZCBhbm90aGVyIG1hdGNoZWQgc2VxdWVuY2UuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIHMgQW5vdGhlciBtYXRjaGVkIHNlcXVlbmNlIHRvIGNvbXBhcmUgdG8gdGhpcyBvbmUuCisgICAgICAgKgorICAgICAgICogQHJldHZhbCA8MCB0aGlzIG1hdGNoZWQgc2VxdWVuY2Ugd2lsbCBjb2xsYXRlIGJlZm9yZSBAcCBzLgorICAgICAgICogQHJldHZhbCA9MCB0aGlzIG1hdGNoZWQgc2VxdWVuY2UgaXMgZXF1aXZhbGVudCB0byBAcCBzLgorICAgICAgICogQHJldHZhbCA8MCB0aGlzIG1hdGNoZWQgc2VxdWVuY2Ugd2lsbCBjb2xsYXRlIGFmdGVyIEBwIHMuCisgICAgICAgKi8KKyAgICAgIGludAorICAgICAgY29tcGFyZShjb25zdCBzdWJfbWF0Y2gmIF9fcykgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPnN0cigpLmNvbXBhcmUoX19zLnN0cigpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb21wYXJlcyB0aGlzIHN1Yl9tYXRjaCB0byBhIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gcyBBIHN0cmluZyB0byBjb21wYXJlIHRvIHRoaXMgc3ViX21hdGNoLgorICAgICAgICoKKyAgICAgICAqIEByZXR2YWwgPDAgdGhpcyBtYXRjaGVkIHNlcXVlbmNlIHdpbGwgY29sbGF0ZSBiZWZvcmUgQHAgcy4KKyAgICAgICAqIEByZXR2YWwgPTAgdGhpcyBtYXRjaGVkIHNlcXVlbmNlIGlzIGVxdWl2YWxlbnQgdG8gQHAgcy4KKyAgICAgICAqIEByZXR2YWwgPDAgdGhpcyBtYXRjaGVkIHNlcXVlbmNlIHdpbGwgY29sbGF0ZSBhZnRlciBAcCBzLgorICAgICAgICovCisgICAgICBpbnQKKyAgICAgIGNvbXBhcmUoY29uc3QgYmFzaWNfc3RyaW5nPHZhbHVlX3R5cGU+JiBfX3MpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5zdHIoKS5jb21wYXJlKF9fcyk7IH0KKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29tcGFyZXMgdGhpcyBzdWJfbWF0Y2ggdG8gYSBDLXN0eWxlIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gcyBBIEMtc3R5bGUgc3RyaW5nIHRvIGNvbXBhcmUgdG8gdGhpcyBzdWJfbWF0Y2guCisgICAgICAgKgorICAgICAgICogQHJldHZhbCA8MCB0aGlzIG1hdGNoZWQgc2VxdWVuY2Ugd2lsbCBjb2xsYXRlIGJlZm9yZSBAcCBzLgorICAgICAgICogQHJldHZhbCA9MCB0aGlzIG1hdGNoZWQgc2VxdWVuY2UgaXMgZXF1aXZhbGVudCB0byBAcCBzLgorICAgICAgICogQHJldHZhbCA8MCB0aGlzIG1hdGNoZWQgc2VxdWVuY2Ugd2lsbCBjb2xsYXRlIGFmdGVyIEBwIHMuCisgICAgICAgKi8KKyAgICAgIGludAorICAgICAgY29tcGFyZShjb25zdCB2YWx1ZV90eXBlKiBfX3MpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5zdHIoKS5jb21wYXJlKF9fcyk7IH0KKyAgICB9OworICAKKyAgCisgIC8qKiBAYnJpZWYgU3RhbmRhcmQgcmVnZXggc3VibWF0Y2ggb3ZlciBhIEMtc3R5bGUgbnVsbC10ZXJtaW5hdGVkIHN0cmluZy4gKi8KKyAgdHlwZWRlZiBzdWJfbWF0Y2g8Y29uc3QgY2hhcio+ICAgICAgICAgICAgIGNzdWJfbWF0Y2g7CisgIC8qKiBAYnJpZWYgU3RhbmRhcmQgcmVnZXggc3VibWF0Y2ggb3ZlciBhIHN0YW5kYXJkIHN0cmluZy4gKi8KKyAgdHlwZWRlZiBzdWJfbWF0Y2g8c3RyaW5nOjpjb25zdF9pdGVyYXRvcj4gIHNzdWJfbWF0Y2g7CisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgLyoqIEBicmllZiBSZWdleCBzdWJtYXRjaCBvdmVyIGEgQy1zdHlsZSBudWxsLXRlcm1pbmF0ZWQgd2lkZSBzdHJpbmcuICovCisgIHR5cGVkZWYgc3ViX21hdGNoPGNvbnN0IHdjaGFyX3QqPiAgICAgICAgICB3Y3N1Yl9tYXRjaDsKKyAgLyoqIEBicmllZiBSZWdleCBzdWJtYXRjaCBvdmVyIGEgc3RhbmRhcmQgd2lkZSBzdHJpbmcuICovCisgIHR5cGVkZWYgc3ViX21hdGNoPHdzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yPiB3c3N1Yl9tYXRjaDsKKyNlbmRpZgorCisgIC8vIFs3LjkuMl0gc3ViX21hdGNoIG5vbi1tZW1iZXIgb3BlcmF0b3JzCisgIAorICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBlcXVpdmFsZW5jZSBvZiB0d28gcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoZXMuCisgICAqIEBwYXJhbSBsaHMgRmlyc3QgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gcmhzIFNlY29uZCByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzICBpcyBlcXVpdmFsZW50IHRvIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpSXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3Qgc3ViX21hdGNoPF9CaUl0ZXI+JiBfX2xocywKKwkgICAgICAgY29uc3Qgc3ViX21hdGNoPF9CaUl0ZXI+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA9PSAwOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgaW5lcXVpdmFsZW5jZSBvZiB0d28gcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoZXMuCisgICAqIEBwYXJhbSBsaHMgRmlyc3QgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gcmhzIFNlY29uZCByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzICBpcyBub3QgZXF1aXZhbGVudCB0byBAYSByaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaUl0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHN1Yl9tYXRjaDxfQmlJdGVyPiYgX19saHMsCisJICAgICAgIGNvbnN0IHN1Yl9tYXRjaDxfQmlJdGVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgIT0gMDsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIG9yZGVyaW5nIG9mIHR3byByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2hlcy4KKyAgICogQHBhcmFtIGxocyBGaXJzdCByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSByaHMgU2Vjb25kIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBsaHMgcHJlY2VkZXMgQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlJdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IHN1Yl9tYXRjaDxfQmlJdGVyPiYgX19saHMsCisJICAgICAgY29uc3Qgc3ViX21hdGNoPF9CaUl0ZXI+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiB0d28gcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoZXMuCisgICAqIEBwYXJhbSBsaHMgRmlyc3QgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gcmhzIFNlY29uZCByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIGRvZXMgbm90IHN1Y2NlZWQgQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlJdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBzdWJfbWF0Y2g8X0JpSXRlcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBzdWJfbWF0Y2g8X0JpSXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiB0d28gcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoZXMuCisgICAqIEBwYXJhbSBsaHMgRmlyc3QgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gcmhzIFNlY29uZCByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIGRvZXMgbm90IHByZWNlZGUgQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlJdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBzdWJfbWF0Y2g8X0JpSXRlcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBzdWJfbWF0Y2g8X0JpSXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiB0d28gcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoZXMuCisgICAqIEBwYXJhbSBsaHMgRmlyc3QgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gcmhzIFNlY29uZCByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIHN1Y2NlZWRzIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpSXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBzdWJfbWF0Y2g8X0JpSXRlcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IHN1Yl9tYXRjaDxfQmlJdGVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPiAwOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgZXF1aXZhbGVuY2Ugb2YgYSBzdHJpbmcgYW5kIGEgcmVndWxhciBleHByZXNzaW9uCisgICAqICAgICAgICBzdWJtYXRjaC4KKyAgICogQHBhcmFtIGxocyBBIHN0cmluZy4KKyAgICogQHBhcmFtIHJocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBsaHMgIGlzIGVxdWl2YWxlbnQgdG8gQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwgdHlwZW5hbWUgX0NoX3RyYWl0cywgdHlwZW5hbWUgX0NoX2FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBiYXNpY19zdHJpbmc8CisJICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUsCisJICAgICAgIF9DaF90cmFpdHMsIF9DaF9hbGxvYz4mIF9fbGhzLAorCSAgICAgICBjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocyA9PSBfX3Jocy5zdHIoKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIGluZXF1aXZhbGVuY2Ugb2YgYSBzdHJpbmcgYW5kIGEgcmVndWxhciBleHByZXNzaW9uCisgICAqICAgICAgICBzdWJtYXRjaC4KKyAgICogQHBhcmFtIGxocyBBIHN0cmluZy4KKyAgICogQHBhcmFtIHJocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBsaHMgIGlzIG5vdCBlcXVpdmFsZW50IHRvIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXIsIHR5cGVuYW1lIF9DaF90cmFpdHMsIHR5cGVuYW1lIF9DaF9hbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPAorCSAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlLAorCSAgICAgICBfQ2hfdHJhaXRzLCBfQ2hfYWxsb2M+JiBfX2xocywgY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMgIT0gX19yaHMuc3RyKCk7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiBhIHN0cmluZyBhbmQgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBsaHMgQSBzdHJpbmcuCisgICAqIEBwYXJhbSByaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIHByZWNlZGVzIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXIsIHR5cGVuYW1lIF9DaF90cmFpdHMsIHR5cGVuYW1lIF9DaF9hbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBiYXNpY19zdHJpbmc8CisJICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSwKKwkgICAgICBfQ2hfdHJhaXRzLCBfQ2hfYWxsb2M+JiBfX2xocywgY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19yaHMpCisgICAgIHsgcmV0dXJuIF9fbGhzIDwgX19yaHMuc3RyKCk7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiBhIHN0cmluZyBhbmQgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBsaHMgQSBzdHJpbmcuCisgICAqIEBwYXJhbSByaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIHN1Y2NlZWRzIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXIsIHR5cGVuYW1lIF9DaF90cmFpdHMsIHR5cGVuYW1lIF9DaF9hbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8CisJICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSwgCisJICAgICAgX0NoX3RyYWl0cywgX0NoX2FsbG9jPiYgX19saHMsIGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzID4gX19yaHMuc3RyKCk7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiBhIHN0cmluZyBhbmQgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBsaHMgQSBzdHJpbmcuCisgICAqIEBwYXJhbSByaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIGRvZXMgbm90IHByZWNlZGUgQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwgdHlwZW5hbWUgX0NoX3RyYWl0cywgdHlwZW5hbWUgX0NoX2FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8CisJICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUsCisJICAgICAgIF9DaF90cmFpdHMsIF9DaF9hbGxvYz4mIF9fbGhzLCBjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocyA+PSBfX3Jocy5zdHIoKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIG9yZGVyaW5nIG9mIGEgc3RyaW5nIGFuZCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIGxocyBBIHN0cmluZy4KKyAgICogQHBhcmFtIHJocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBsaHMgZG9lcyBub3Qgc3VjY2VlZCBAYSByaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyLCB0eXBlbmFtZSBfQ2hfdHJhaXRzLCB0eXBlbmFtZSBfQ2hfYWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2ljX3N0cmluZzwKKwkgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSwKKwkgICAgICAgX0NoX3RyYWl0cywgX0NoX2FsbG9jPiYgX19saHMsIGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzIDw9IF9fcmhzLnN0cigpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgZXF1aXZhbGVuY2Ugb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2ggYW5kIGEKKyAgICogICAgICAgIHN0cmluZy4KKyAgICogQHBhcmFtIGxocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIHJocyBBIHN0cmluZy4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBsaHMgaXMgZXF1aXZhbGVudCB0byBAYSByaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyLCB0eXBlbmFtZSBfQ2hfdHJhaXRzLCB0eXBlbmFtZSBfQ2hfYWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8CisJICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUsCisJICAgICAgIF9DaF90cmFpdHMsIF9DaF9hbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLnN0cigpID09IF9fcmhzOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgaW5lcXVpdmFsZW5jZSBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaCBhbmQgYQorICAgKiAgICAgICAgc3RyaW5nLgorICAgKiBAcGFyYW0gbGhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gcmhzIEEgc3RyaW5nLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIGxocyBpcyBub3QgZXF1aXZhbGVudCB0byBAYSByaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyLCB0eXBlbmFtZSBfQ2hfdHJhaXRzLCB0eXBlbmFtZSBfQ2hfYWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8CisJICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUsCisJICAgICAgIF9DaF90cmFpdHMsIF9DaF9hbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLnN0cigpICE9IF9fcmhzOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2ggYW5kIGEgc3RyaW5nLgorICAgKiBAcGFyYW0gbGhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gcmhzIEEgc3RyaW5nLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIGxocyBwcmVjZWRlcyBAYSByaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyLCBjbGFzcyBfQ2hfdHJhaXRzLCBjbGFzcyBfQ2hfYWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19saHMsCisJICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPAorCSAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUsCisJICAgICAgX0NoX3RyYWl0cywgX0NoX2FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuc3RyKCkgPCBfX3JoczsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIG9yZGVyaW5nIG9mIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoIGFuZCBhIHN0cmluZy4KKyAgICogQHBhcmFtIGxocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIHJocyBBIHN0cmluZy4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBsaHMgc3VjY2VlZHMgQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwgY2xhc3MgX0NoX3RyYWl0cywgY2xhc3MgX0NoX2FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzwKKwkgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlLAorCSAgICAgIF9DaF90cmFpdHMsIF9DaF9hbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLnN0cigpID4gX19yaHM7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaCBhbmQgYSBzdHJpbmcuCisgICAqIEBwYXJhbSBsaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSByaHMgQSBzdHJpbmcuCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIGRvZXMgbm90IHByZWNlZGUgQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwgY2xhc3MgX0NoX3RyYWl0cywgY2xhc3MgX0NoX2FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX2xocywKKwkgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPAorCSAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlLAorCSAgICAgICBfQ2hfdHJhaXRzLCBfQ2hfYWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5zdHIoKSA+PSBfX3JoczsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIG9yZGVyaW5nIG9mIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoIGFuZCBhIHN0cmluZy4KKyAgICogQHBhcmFtIGxocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIHJocyBBIHN0cmluZy4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBsaHMgZG9lcyBub3Qgc3VjY2VlZCBAYSByaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyLCBjbGFzcyBfQ2hfdHJhaXRzLCBjbGFzcyBfQ2hfYWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8CisJICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUsCisJICAgICAgIF9DaF90cmFpdHMsIF9DaF9hbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLnN0cigpIDw9IF9fcmhzOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgZXF1aXZhbGVuY2Ugb2YgYSBDIHN0cmluZyBhbmQgYSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICogICAgICAgIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gbGhzIEEgQyBzdHJpbmcuCisgICAqIEBwYXJhbSByaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzICBpcyBlcXVpdmFsZW50IHRvIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgY29uc3QqIF9fbGhzLAorCSAgICAgICBjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocyA9PSBfX3Jocy5zdHIoKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIGluZXF1aXZhbGVuY2Ugb2YgYW4gaXRlcmF0b3IgdmFsdWUgYW5kIGEgcmVndWxhcgorICAgKiAgICAgICAgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIGxocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIHJocyBBIHN0cmluZy4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBsaHMgaXMgbm90IGVxdWl2YWxlbnQgdG8gQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0odHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCogX19saHMsCisJICAgICAgIGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzICE9IF9fcmhzLnN0cigpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSBzdHJpbmcgYW5kIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gbGhzIEEgc3RyaW5nLgorICAgKiBAcGFyYW0gcmhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIGxocyBwcmVjZWRlcyBAYSByaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgY29uc3QqIF9fbGhzLAorCSAgICAgIGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzIDwgX19yaHMuc3RyKCk7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiBhIHN0cmluZyBhbmQgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBsaHMgQSBzdHJpbmcuCisgICAqIEBwYXJhbSByaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIHN1Y2NlZWRzIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4odHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCogX19saHMsCisJICAgICAgY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMgPiBfX3Jocy5zdHIoKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIG9yZGVyaW5nIG9mIGEgc3RyaW5nIGFuZCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIGxocyBBIHN0cmluZy4KKyAgICogQHBhcmFtIHJocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBsaHMgZG9lcyBub3QgcHJlY2VkZSBAYSByaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PSh0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlIGNvbnN0KiBfX2xocywKKwkgICAgICAgY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMgPj0gX19yaHMuc3RyKCk7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiBhIHN0cmluZyBhbmQgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBsaHMgQSBzdHJpbmcuCisgICAqIEBwYXJhbSByaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIGRvZXMgbm90IHN1Y2NlZWQgQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0odHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCogX19saHMsCisJICAgICAgIGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzIDw9IF9fcmhzLnN0cigpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgZXF1aXZhbGVuY2Ugb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2ggYW5kIGEKKyAgICogICAgICAgIHN0cmluZy4KKyAgICogQHBhcmFtIGxocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIHJocyBBIHBvaW50ZXIgdG8gYSBzdHJpbmc/CisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzICBpcyBlcXVpdmFsZW50IHRvIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fbGhzLAorCSAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlIGNvbnN0KiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5zdHIoKSA9PSBfX3JoczsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIGluZXF1aXZhbGVuY2Ugb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2ggYW5kIGEKKyAgICogICAgICAgIHN0cmluZy4KKyAgICogQHBhcmFtIGxocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIHJocyBBIHBvaW50ZXIgdG8gYSBzdHJpbmcuCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIGlzIG5vdCBlcXVpdmFsZW50IHRvIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fbGhzLAorCSAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlIGNvbnN0KiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5zdHIoKSAhPSBfX3JoczsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIG9yZGVyaW5nIG9mIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoIGFuZCBhIHN0cmluZy4KKyAgICogQHBhcmFtIGxocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIHJocyBBIHN0cmluZy4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBsaHMgcHJlY2VkZXMgQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX2xocywKKwkgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlIGNvbnN0KiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5zdHIoKSA8IF9fcmhzOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2ggYW5kIGEgc3RyaW5nLgorICAgKiBAcGFyYW0gbGhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gcmhzIEEgc3RyaW5nLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIGxocyBzdWNjZWVkcyBAYSByaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fbGhzLAorCSAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgY29uc3QqIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLnN0cigpID4gX19yaHM7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaCBhbmQgYSBzdHJpbmcuCisgICAqIEBwYXJhbSBsaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSByaHMgQSBzdHJpbmcuCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIGRvZXMgbm90IHByZWNlZGUgQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19saHMsCisJICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgY29uc3QqIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLnN0cigpID49IF9fcmhzOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2ggYW5kIGEgc3RyaW5nLgorICAgKiBAcGFyYW0gbGhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gcmhzIEEgc3RyaW5nLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIGxocyBkb2VzIG5vdCBzdWNjZWVkIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fbGhzLAorCSAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlIGNvbnN0KiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5zdHIoKSA8PSBfX3JoczsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIGVxdWl2YWxlbmNlIG9mIGEgc3RyaW5nIGFuZCBhIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgKiAgICAgICAgc3VibWF0Y2guCisgICAqIEBwYXJhbSBsaHMgQSBzdHJpbmcuCisgICAqIEBwYXJhbSByaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIGlzIGVxdWl2YWxlbnQgdG8gQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0odHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCYgX19saHMsCisJICAgICAgIGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzID09IF9fcmhzLnN0cigpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgaW5lcXVpdmFsZW5jZSBvZiBhIHN0cmluZyBhbmQgYSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICogICAgICAgIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gbGhzIEEgc3RyaW5nLgorICAgKiBAcGFyYW0gcmhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIGxocyBpcyBub3QgZXF1aXZhbGVudCB0byBAYSByaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPSh0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlIGNvbnN0JiBfX2xocywKKwkgICAgICAgY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMgIT0gX19yaHMuc3RyKCk7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiBhIHN0cmluZyBhbmQgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBsaHMgQSBzdHJpbmcuCisgICAqIEBwYXJhbSByaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIHByZWNlZGVzIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwodHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCYgX19saHMsCisJICAgICAgY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMgPCBfX3Jocy5zdHIoKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIG9yZGVyaW5nIG9mIGEgc3RyaW5nIGFuZCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIGxocyBBIHN0cmluZy4KKyAgICogQHBhcmFtIHJocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBsaHMgc3VjY2VlZHMgQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPih0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlIGNvbnN0JiBfX2xocywKKwkgICAgICBjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocyA+IF9fcmhzLnN0cigpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSBzdHJpbmcgYW5kIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gbGhzIEEgc3RyaW5nLgorICAgKiBAcGFyYW0gcmhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIGxocyBkb2VzIG5vdCBwcmVjZWRlIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgY29uc3QmIF9fbGhzLAorCSAgICAgICBjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocyA+PSBfX3Jocy5zdHIoKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIG9yZGVyaW5nIG9mIGEgc3RyaW5nIGFuZCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIGxocyBBIHN0cmluZy4KKyAgICogQHBhcmFtIHJocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBsaHMgZG9lcyBub3Qgc3VjY2VlZCBAYSByaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PSh0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlIGNvbnN0JiBfX2xocywKKwkgICAgICAgY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMgPD0gX19yaHMuc3RyKCk7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBlcXVpdmFsZW5jZSBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaCBhbmQgYQorICAgKiAgICAgICAgc3RyaW5nLgorICAgKiBAcGFyYW0gbGhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gcmhzIEEgY29uc3Qgc3RyaW5nIHJlZmVyZW5jZS4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBsaHMgIGlzIGVxdWl2YWxlbnQgdG8gQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19saHMsCisJICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgY29uc3QmIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLnN0cigpID09IF9fcmhzOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgaW5lcXVpdmFsZW5jZSBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaCBhbmQgYQorICAgKiAgICAgICAgc3RyaW5nLgorICAgKiBAcGFyYW0gbGhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gcmhzIEEgY29uc3Qgc3RyaW5nIHJlZmVyZW5jZS4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBsaHMgaXMgbm90IGVxdWl2YWxlbnQgdG8gQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19saHMsCisJICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgY29uc3QmIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLnN0cigpICE9IF9fcmhzOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2ggYW5kIGEgc3RyaW5nLgorICAgKiBAcGFyYW0gbGhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gcmhzIEEgY29uc3Qgc3RyaW5nIHJlZmVyZW5jZS4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBsaHMgcHJlY2VkZXMgQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX2xocywKKwkgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlIGNvbnN0JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5zdHIoKSA8IF9fcmhzOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2ggYW5kIGEgc3RyaW5nLgorICAgKiBAcGFyYW0gbGhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gcmhzIEEgY29uc3Qgc3RyaW5nIHJlZmVyZW5jZS4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBsaHMgc3VjY2VlZHMgQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX2xocywKKwkgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlIGNvbnN0JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5zdHIoKSA+IF9fcmhzOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2ggYW5kIGEgc3RyaW5nLgorICAgKiBAcGFyYW0gbGhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gcmhzIEEgY29uc3Qgc3RyaW5nIHJlZmVyZW5jZS4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBsaHMgZG9lcyBub3QgcHJlY2VkZSBAYSByaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX2xocywKKwkgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuc3RyKCkgPj0gX19yaHM7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaCBhbmQgYSBzdHJpbmcuCisgICAqIEBwYXJhbSBsaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSByaHMgQSBjb25zdCBzdHJpbmcgcmVmZXJlbmNlLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIGxocyBkb2VzIG5vdCBzdWNjZWVkIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fbGhzLAorCSAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlIGNvbnN0JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5zdHIoKSA8PSBfX3JoczsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgSW5zZXJ0cyBhIG1hdGNoZWQgc3RyaW5nIGludG8gYW4gb3V0cHV0IHN0cmVhbS4KKyAgICoKKyAgICogQHBhcmFtIG9zIFRoZSBvdXRwdXQgc3RyZWFtLgorICAgKiBAcGFyYW0gbSAgQSBzdWJtYXRjaCBzdHJpbmcuCisgICAqCisgICAqIEByZXR1cm5zIHRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN1Ym1hdGNoIHN0cmluZyBpbnNlcnRlZC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaF90eXBlLCB0eXBlbmFtZSBfQ2hfdHJhaXRzLCB0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUKKyAgICBiYXNpY19vc3RyZWFtPF9DaF90eXBlLCBfQ2hfdHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoX3R5cGUsIF9DaF90cmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX20pCisgICAgeyByZXR1cm4gX19vcyA8PCBfX20uc3RyKCk7IH0KKworICAvLyBbNy4xMF0gQ2xhc3MgdGVtcGxhdGUgbWF0Y2hfcmVzdWx0cworICAvKioKKyAgICogQGJyaWVmIFRoZSByZXN1bHRzIG9mIGEgbWF0Y2ggb3Igc2VhcmNoIG9wZXJhdGlvbi4KKyAgICoKKyAgICogQSBjb2xsZWN0aW9uIG9mIGNoYXJhY3RlciBzZXF1ZW5jZXMgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YgYSByZWd1bGFyCisgICAqIGV4cHJlc3Npb24gbWF0Y2guICBTdG9yYWdlIGZvciB0aGUgY29sbGVjdGlvbiBpcyBhbGxvY2F0ZWQgYW5kIGZyZWVkIGFzCisgICAqIG5lY2Vzc2FyeSBieSB0aGUgbWVtYmVyIGZ1bmN0aW9ucyBvZiBjbGFzcyB0ZW1wbGF0ZSBtYXRjaF9yZXN1bHRzLgorICAgKgorICAgKiBUaGlzIGNsYXNzIHNhdGlzZmllcyB0aGUgU2VxdWVuY2UgcmVxdWlyZW1lbnRzLCB3aXRoIHRoZSBleGNlcHRpb24gdGhhdAorICAgKiBvbmx5IHRoZSBvcGVyYXRpb25zIGRlZmluZWQgZm9yIGEgY29uc3QtcXVhbGlmaWVkIFNlcXVlbmNlIGFyZSBzdXBwb3J0ZWQuCisgICAqCisgICAqIFRoZSBzdWJfbWF0Y2ggb2JqZWN0IHN0b3JlZCBhdCBpbmRleCAwIHJlcHJlc2VudHMgc3ViLWV4cHJlc3Npb24gMCwgaS5lLgorICAgKiB0aGUgd2hvbGUgbWF0Y2guIEluIHRoaXMgY2FzZSB0aGUgc3ViX21hdGNoIG1lbWJlciBtYXRjaGVkIGlzIGFsd2F5cyB0cnVlLgorICAgKiBUaGUgc3ViX21hdGNoIG9iamVjdCBzdG9yZWQgYXQgaW5kZXggbiBkZW5vdGVzIHdoYXQgbWF0Y2hlZCB0aGUgbWFya2VkCisgICAqIHN1Yi1leHByZXNzaW9uIG4gd2l0aGluIHRoZSBtYXRjaGVkIGV4cHJlc3Npb24uIElmIHRoZSBzdWItZXhwcmVzc2lvbiBuCisgICAqIHBhcnRpY2lwYXRlZCBpbiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCB0aGVuIHRoZSBzdWJfbWF0Y2ggbWVtYmVyCisgICAqIG1hdGNoZWQgZXZhbHVhdGVzIHRvIHRydWUsIGFuZCBtZW1iZXJzIGZpcnN0IGFuZCBzZWNvbmQgZGVub3RlIHRoZSByYW5nZQorICAgKiBvZiBjaGFyYWN0ZXJzIFtmaXJzdCwgc2Vjb25kKSB3aGljaCBmb3JtZWQgdGhhdCBtYXRjaC4gT3RoZXJ3aXNlIG1hdGNoZWQKKyAgICogaXMgZmFsc2UsIGFuZCBtZW1iZXJzIGZpcnN0IGFuZCBzZWNvbmQgcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UKKyAgICogdGhhdCB3YXMgc2VhcmNoZWQuCisgICAqCisgICAqIEBub3N1Ymdyb3VwaW5nCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yID0gYWxsb2NhdG9yPHN1Yl9tYXRjaDxfQmlfaXRlcj4gPiA+CisgICAgY2xhc3MgbWF0Y2hfcmVzdWx0cworICAgIDogcHJpdmF0ZSBzdGQ6OnZlY3RvcjxzdGQ6Ol9HTElCQ1hYX1RSMSBzdWJfbWF0Y2g8X0JpX2l0ZXI+LCBfQWxsb2NhdG9yPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxzdGQ6Ol9HTElCQ1hYX1RSMSBzdWJfbWF0Y2g8X0JpX2l0ZXI+LCBfQWxsb2NhdG9yPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmFzZV90eXBlOworCisgICAgcHVibGljOgorICAgICAgLyoqCisgICAgICAgKiBAbmFtZSAxMC4/IFB1YmxpYyBUeXBlcworICAgICAgICovCisgICAgICAvL0B7CisgICAgICB0eXBlZGVmIHN1Yl9tYXRjaDxfQmlfaXRlcj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OmNvbnN0X3JlZmVyZW5jZSAgICAgICAgICAgIGNvbnN0X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgY29uc3RfcmVmZXJlbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZV90eXBlOjpjb25zdF9pdGVyYXRvciAgICAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgY29uc3RfaXRlcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OmRpZmZlcmVuY2VfdHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OnNpemVfdHlwZSAgICAgICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0FsbG9jYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgIGNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXJfdHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nX3R5cGU7CisgICAgICAvL0B9CisgIAorICAgIHB1YmxpYzoKKyAgICAgIC8qKgorICAgICAgICogQG5hbWUgMTAuMSBDb25zdHJ1Y3Rpb24sIENvcHlpbmcsIGFuZCBEZXN0cnVjdGlvbgorICAgICAgICovCisgICAgICAvL0B7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnN0cnVjdHMgYSBkZWZhdWx0ICVtYXRjaF9yZXN1bHRzIGNvbnRhaW5lci4KKyAgICAgICAqIEBwb3N0IHNpemUoKSByZXR1cm5zIDAgYW5kIHN0cigpIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgbWF0Y2hfcmVzdWx0cyhjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICA6IF9CYXNlX3R5cGUoX19hKSwgX01fbWF0Y2hlZChmYWxzZSkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb3B5IGNvbnN0cnVjdHMgYSAlbWF0Y2hfcmVzdWx0cy4KKyAgICAgICAqLworICAgICAgbWF0Y2hfcmVzdWx0cyhjb25zdCBtYXRjaF9yZXN1bHRzJiBfX3JocykKKyAgICAgIDogX0Jhc2VfdHlwZShfX3JocyksIF9NX21hdGNoZWQoX19yaHMuX01fbWF0Y2hlZCksCisJX01fcHJlZml4KF9fcmhzLl9NX3ByZWZpeCksIF9NX3N1ZmZpeChfX3Jocy5fTV9zdWZmaXgpCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQXNzaWducyByaHMgdG8gKnRoaXMuCisgICAgICAgKi8KKyAgICAgIG1hdGNoX3Jlc3VsdHMmCisgICAgICBvcGVyYXRvcj0oY29uc3QgbWF0Y2hfcmVzdWx0cyYgX19yaHMpCisgICAgICB7CisJbWF0Y2hfcmVzdWx0cyBfX3RtcChfX3Jocyk7CisJdGhpcy0+c3dhcChfX3RtcCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBEZXN0cm95cyBhICVtYXRjaF9yZXN1bHRzIG9iamVjdC4KKyAgICAgICAqLworICAgICAgfm1hdGNoX3Jlc3VsdHMoKQorICAgICAgeyB9CisgICAgICAKKyAgICAgIC8vQH0KKworICAgICAgLyoqCisgICAgICAgKiBAbmFtZSAxMC4yIFNpemUKKyAgICAgICAqLworICAgICAgLy9AeworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBhbmQgc3VibWF0Y2hlcy4KKyAgICAgICAqCisgICAgICAgKiBUaGUgbnVtYmVyIG9mIG1hdGNoZXMgZm9yIGEgZ2l2ZW4gcmVndWxhciBleHByZXNzaW9uIHdpbGwgYmUgZWl0aGVyIDAKKyAgICAgICAqIGlmIHRoZXJlIHdhcyBubyBtYXRjaCBvciBtYXJrX2NvdW50KCkgKyAxIGlmIGEgbWF0Y2ggd2FzIHN1Y2Nlc3NmdWwuCisgICAgICAgKiBTb21lIG1hdGNoZXMgbWF5IGJlIGVtcHR5LgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBmb3VuZC4KKyAgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX21hdGNoZWQgPyBfQmFzZV90eXBlOjpzaXplKCkgKyAxIDogMDsgfQorICAgICAgCisgICAgICAvL3NpemVfdHlwZQorICAgICAgLy9tYXhfc2l6ZSgpIGNvbnN0OworICAgICAgdXNpbmcgX0Jhc2VfdHlwZTo6bWF4X3NpemU7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEluZGljYXRlcyBpZiB0aGUgJW1hdGNoX3Jlc3VsdHMgY29udGFpbnMgbm8gcmVzdWx0cy4KKyAgICAgICAqIEByZXR2YWwgdHJ1ZSBUaGUgJW1hdGNoX3Jlc3VsdHMgb2JqZWN0IGlzIGVtcHR5LgorICAgICAgICogQHJldHZhbCBmYWxzZSBUaGUgJW1hdGNoX3Jlc3VsdHMgb2JqZWN0IGlzIG5vdCBlbXB0eS4KKyAgICAgICAqLworICAgICAgYm9vbAorICAgICAgZW1wdHkoKSBjb25zdAorICAgICAgeyByZXR1cm4gc2l6ZSgpID09IDA7IH0KKyAgICAgIAorICAgICAgLy9AfQorCisgICAgICAvKioKKyAgICAgICAqIEBuYW1lIDEwLjMgRWxlbWVudCBBY2Nlc3MKKyAgICAgICAqLworICAgICAgLy9AeworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIHRoZSBsZW5ndGggb2YgdGhlIGluZGljYXRlZCBzdWJtYXRjaC4KKyAgICAgICAqIEBwYXJhbSBzdWIgaW5kaWNhdGVzIHRoZSBzdWJtYXRjaC4KKyAgICAgICAqCisgICAgICAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgaW5kaWNhdGVkIHN1Ym1hdGNoLCBvciB0aGUKKyAgICAgICAqIGxlbmd0aCBvZiB0aGUgZW50aXJlIG1hdGNoIGlmIEBwIHN1YiBpcyB6ZXJvICh0aGUgZGVmYXVsdCkuCisgICAgICAgKi8KKyAgICAgIGRpZmZlcmVuY2VfdHlwZQorICAgICAgbGVuZ3RoKHNpemVfdHlwZSBfX3N1YiA9IDApIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9tYXRjaGVkID8gdGhpcy0+c3RyKF9fc3ViKS5sZW5ndGgoKSA6IDA7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyB0aGUgb2Zmc2V0IG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGluZGljYXRlZCBzdWJtYXRjaC4KKyAgICAgICAqIEBwYXJhbSBzdWIgaW5kaWNhdGVzIHRoZSBzdWJtYXRjaC4KKyAgICAgICAqCisgICAgICAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRhcmdldAorICAgICAgICogc2VxdWVuY2UgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3VibWF0Y2gsIHVubGVzcyB0aGUgdmFsdWUgb2YgQHAgc3ViCisgICAgICAgKiBpcyB6ZXJvICh0aGUgZGVmYXVsdCksIGluIHdoaWNoIGNhc2UgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBvZmZzZXQKKyAgICAgICAqIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgdGFyZ2V0IHNlcXVlbmNlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlCisgICAgICAgKiBtYXRjaC4KKyAgICAgICAqLworICAgICAgZGlmZmVyZW5jZV90eXBlCisgICAgICBwb3NpdGlvbihzaXplX3R5cGUgX19zdWIgPSAwKSBjb25zdAorICAgICAgeworCXJldHVybiBfTV9tYXRjaGVkID8gc3RkOjpkaXN0YW5jZSh0aGlzLT5wcmVmaXgoKS5maXJzdCwKKwkJCQkJICAoKnRoaXMpW19fc3ViXS5maXJzdCkgOiAwOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIHRoZSBtYXRjaCBvciBzdWJtYXRjaCBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgdHlwZS4KKyAgICAgICAqIEBwYXJhbSBzdWIgaW5kaWNhdGVzIHRoZSBzdWJtYXRjaC4KKyAgICAgICAqCisgICAgICAgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIHN1Ym1hdGNoIChvciBtYXRjaCwgaWYgQHAgc3ViIGlzIHplcm8pIGV4dHJhY3RlZAorICAgICAgICogZnJvbSB0aGUgdGFyZ2V0IHJhbmdlIGFuZCBjb252ZXJ0ZWQgdG8gdGhlIGFzc29jaWF0ZWQgc3RyaW5nIHR5cGUuCisgICAgICAgKi8KKyAgICAgIHN0cmluZ190eXBlCisgICAgICBzdHIoc2l6ZV90eXBlIF9fc3ViID0gMCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX21hdGNoZWQgPyAoKnRoaXMpW19fc3ViXS5zdHIoKSA6IHN0cmluZ190eXBlKCk7IH0KKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyBhICVzdWJfbWF0Y2ggcmVmZXJlbmNlIGZvciB0aGUgbWF0Y2ggb3Igc3VibWF0Y2guCisgICAgICAgKiBAcGFyYW0gc3ViIGluZGljYXRlcyB0aGUgc3VibWF0Y2guCisgICAgICAgKgorICAgICAgICogVGhpcyBmdW5jdGlvbiBnZXRzIGEgcmVmZXJlbmNlIHRvIHRoZSBpbmRpY2F0ZWQgc3VibWF0Y2gsIG9yIHRoZSBlbnRpcmUKKyAgICAgICAqIG1hdGNoIGlmIEBwIHN1YiBpcyB6ZXJvLgorICAgICAgICoKKyAgICAgICAqIElmIEBwIHN1YiA+PSBzaXplKCkgdGhlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSAlc3ViX21hdGNoIHdpdGggYQorICAgICAgICogc3BlY2lhbCB2YWx1ZSBpbmRpY2F0aW5nIG5vIHN1Ym1hdGNoLgorICAgICAgICovCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fc3ViKSBjb25zdAorICAgICAgeyByZXR1cm4gX0Jhc2VfdHlwZTo6b3BlcmF0b3JbXShfX3N1Yik7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyBhICVzdWJfbWF0Y2ggcmVwcmVzZW50aW5nIHRoZSBtYXRjaCBwcmVmaXguCisgICAgICAgKgorICAgICAgICogVGhpcyBmdW5jdGlvbiBnZXRzIGEgcmVmZXJlbmNlIHRvIGEgJXN1Yl9tYXRjaCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZQorICAgICAgICogcGFydCBvZiB0aGUgdGFyZ2V0IHJhbmdlIGJldHdlZW4gdGhlIHN0YXJ0IG9mIHRoZSB0YXJnZXQgcmFuZ2UgYW5kIHRoZQorICAgICAgICogc3RhcnQgb2YgdGhlIG1hdGNoLgorICAgICAgICovCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIHByZWZpeCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wcmVmaXg7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyBhICVzdWJfbWF0Y2ggcmVwcmVzZW50aW5nIHRoZSBtYXRjaCBzdWZmaXguCisgICAgICAgKgorICAgICAgICogVGhpcyBmdW5jdGlvbiBnZXRzIGEgcmVmZXJlbmNlIHRvIGEgJXN1Yl9tYXRjaCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZQorICAgICAgICogcGFydCBvZiB0aGUgdGFyZ2V0IHJhbmdlIGJldHdlZW4gdGhlIGVuZCBvZiB0aGUgbWF0Y2ggYW5kIHRoZSBlbmQgb2YKKyAgICAgICAqIHRoZSB0YXJnZXQgcmFuZ2UuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgc3VmZml4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3N1ZmZpeDsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIGFuIGl0ZXJhdG9yIHRvIHRoZSBzdGFydCBvZiB0aGUgJXN1Yl9tYXRjaCBjb2xsZWN0aW9uLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX0Jhc2VfdHlwZTo6YmVnaW4oKTsgfQorICAgICAgCisjaWZkZWYgX0dMSUJDWFhfSU5DTFVERV9BU19DWFgwWAorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyBhbiBpdGVyYXRvciB0byB0aGUgc3RhcnQgb2YgdGhlICVzdWJfbWF0Y2ggY29sbGVjdGlvbi4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfQmFzZV90eXBlOjpiZWdpbigpOyB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyBhbiBpdGVyYXRvciB0byBvbmUtcGFzdC10aGUtZW5kIG9mIHRoZSBjb2xsZWN0aW9uLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9CYXNlX3R5cGU6OmVuZCgpOyB9CisgICAgICAKKyNpZmRlZiBfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIGFuIGl0ZXJhdG9yIHRvIG9uZS1wYXN0LXRoZS1lbmQgb2YgdGhlIGNvbGxlY3Rpb24uCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9CYXNlX3R5cGU6OmVuZCgpOyB9CisjZW5kaWYKKworICAgICAgLy9AfQorCisgICAgICAvKioKKyAgICAgICAqIEBuYW1lIDEwLjQgRm9ybWF0dGluZworICAgICAgICoKKyAgICAgICAqIFRoZXNlIGZ1bmN0aW9ucyBwZXJmb3JtIGZvcm1hdHRlZCBzdWJzdGl0dXRpb24gb2YgdGhlIG1hdGNoZWQgY2hhcmFjdGVyCisgICAgICAgKiBzZXF1ZW5jZXMgaW50byB0aGVpciB0YXJnZXQuICBUaGUgZm9ybWF0IHNwZWNpZmllcnMgYW5kIGVzY2FwZSBzZXF1ZW5jZXMKKyAgICAgICAqIGFjY2VwdGVkIGJ5IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGV0ZXJtaW5lZCBieSB0aGVpciBAcCBmbGFncyBwYXJhbWV0ZXIgCisgICAgICAgKiBhcyBkb2N1bWVudGVkIGFib3ZlLgorICAgICAgICovCisgICAgICAgLy9AeworCisgICAgICAvKioKKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0X2l0ZXI+CisgICAgICAgIF9PdXRfaXRlcgorICAgICAgICBmb3JtYXQoX091dF9pdGVyIF9fb3V0LCBjb25zdCBzdHJpbmdfdHlwZSYgX19mbXQsCisJICAgICAgIHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZmxhZ190eXBlIF9fZmxhZ3MKKwkgICAgICAgPSByZWdleF9jb25zdGFudHM6OmZvcm1hdF9kZWZhdWx0KSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiBAdG9kbyBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAqLworICAgICAgc3RyaW5nX3R5cGUKKyAgICAgIGZvcm1hdChjb25zdCBzdHJpbmdfdHlwZSYgX19mbXQsCisJICAgICByZWdleF9jb25zdGFudHM6Om1hdGNoX2ZsYWdfdHlwZSBfX2ZsYWdzCisJICAgICA9IHJlZ2V4X2NvbnN0YW50czo6Zm9ybWF0X2RlZmF1bHQpIGNvbnN0OworCisgICAgICAvL0B9IAorCisgICAgICAvKioKKyAgICAgICAqIEBuYW1lIDEwLjUgQWxsb2NhdG9yCisgICAgICAgKi8KKyAgICAgIC8vQHsgCisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdldHMgYSBjb3B5IG9mIHRoZSBhbGxvY2F0b3IuCisgICAgICAgKi8KKyAgICAgIC8vYWxsb2NhdG9yX3R5cGUKKyAgICAgIC8vZ2V0X2FsbG9jYXRvcigpIGNvbnN0OworICAgICAgdXNpbmcgX0Jhc2VfdHlwZTo6Z2V0X2FsbG9jYXRvcjsKKyAgICAgIAorICAgICAgLy9AfSAKKworICAgICAgLyoqCisgICAgICAgKiBAbmFtZSAxMC42IFN3YXAKKyAgICAgICAqLworICAgICAgIC8vQHsgCisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFN3YXBzIHRoZSBjb250ZW50cyBvZiB0d28gbWF0Y2hfcmVzdWx0cy4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgc3dhcChtYXRjaF9yZXN1bHRzJiBfX3RoYXQpCisgICAgICB7CisJX0Jhc2VfdHlwZTo6c3dhcChfX3RoYXQpOworCXN0ZDo6c3dhcChfTV9tYXRjaGVkLCBfX3RoYXQuX01fbWF0Y2hlZCk7CisJc3RkOjpzd2FwKF9NX3ByZWZpeCwgIF9fdGhhdC5fTV9wcmVmaXgpOworCXN0ZDo6c3dhcChfTV9zdWZmaXgsICBfX3RoYXQuX01fc3VmZml4KTsKKyAgICAgIH0KKyAgICAgIC8vQH0gCisgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgYm9vbCAgICAgICBfTV9tYXRjaGVkOworICAgICAgdmFsdWVfdHlwZSBfTV9wcmVmaXg7CisgICAgICB2YWx1ZV90eXBlIF9NX3N1ZmZpeDsKKyAgICB9OworICAKKyAgdHlwZWRlZiBtYXRjaF9yZXN1bHRzPGNvbnN0IGNoYXIqPiAgICAgICAgICAgICBjbWF0Y2g7CisgIHR5cGVkZWYgbWF0Y2hfcmVzdWx0czxzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yPiAgc21hdGNoOworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIHR5cGVkZWYgbWF0Y2hfcmVzdWx0czxjb25zdCB3Y2hhcl90Kj4gICAgICAgICAgd2NtYXRjaDsKKyAgdHlwZWRlZiBtYXRjaF9yZXN1bHRzPHdzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yPiB3c21hdGNoOworI2VuZGlmCisKKyAgLy8gbWF0Y2hfcmVzdWx0cyBjb21wYXJpc29ucworICAvKioKKyAgICogQGJyaWVmIENvbXBhcmVzIHR3byBtYXRjaF9yZXN1bHRzIGZvciBlcXVhbGl0eS4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIG9iamVjdHMgcmVmZXIgdG8gdGhlIHNhbWUgbWF0Y2gsCisgICAqIGZhbHNlIG90aGVyd2lzZS4KKyAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgbWF0Y2hfcmVzdWx0czxfQmlfaXRlciwgX0FsbG9jYXRvcj4mIF9fbTEsCisJICAgICAgIGNvbnN0IG1hdGNoX3Jlc3VsdHM8X0JpX2l0ZXIsIF9BbGxvY2F0b3I+JiBfX20yKTsKKworICAvKioKKyAgICogQGJyaWVmIENvbXBhcmVzIHR3byBtYXRjaF9yZXN1bHRzIGZvciBpbmVxdWFsaXR5LgorICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0d28gb2JqZWN0cyBkbyBub3QgcmVmZXIgdG8gdGhlIHNhbWUgbWF0Y2gsCisgICAqIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyLCBjbGFzcyBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBtYXRjaF9yZXN1bHRzPF9CaV9pdGVyLCBfQWxsb2NhdG9yPiYgX19tMSwKKwkgICAgICAgY29uc3QgbWF0Y2hfcmVzdWx0czxfQmlfaXRlciwgX0FsbG9jYXRvcj4mIF9fbTIpCisgICAgeyByZXR1cm4gIShfX20xID09IF9fbTIpOyB9CisKKyAgLy8gWzcuMTAuNl0gbWF0Y2hfcmVzdWx0cyBzd2FwCisgIC8qKgorICAgKiBAYnJpZWYgU3dhcHMgdHdvIG1hdGNoIHJlc3VsdHMuCisgICAqIEBwYXJhbSBsaHMgQSBtYXRjaCByZXN1bHQuCisgICAqIEBwYXJhbSByaHMgQSBtYXRjaCByZXN1bHQuCisgICAqCisgICAqIFRoZSBjb250ZW50cyBvZiB0aGUgdHdvIG1hdGNoX3Jlc3VsdHMgb2JqZWN0cyBhcmUgc3dhcHBlZC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChtYXRjaF9yZXN1bHRzPF9CaV9pdGVyLCBfQWxsb2NhdG9yPiYgX19saHMsCisJIG1hdGNoX3Jlc3VsdHM8X0JpX2l0ZXIsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CisKKyAgLy8gWzcuMTEuMl0gRnVuY3Rpb24gdGVtcGxhdGUgcmVnZXhfbWF0Y2gKKyAgLyoqCisgICAqIEBuYW1lIE1hdGNoaW5nLCBTZWFyY2hpbmcsIGFuZCBSZXBsYWNpbmcKKyAgICovCisgIC8vQHsKKworICAvKioKKyAgICogQGJyaWVmIERldGVybWluZXMgaWYgdGhlcmUgaXMgYSBtYXRjaCBiZXR3ZWVuIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gQHAgZQorICAgKiBhbmQgYWxsIG9mIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UgW2ZpcnN0LCBsYXN0KS4KKyAgICoKKyAgICogQHBhcmFtIGZpcnN0IEJlZ2lubmluZyBvZiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIHRvIG1hdGNoLgorICAgKiBAcGFyYW0gbGFzdCAgT25lLXBhc3QtdGhlLWVuZCBvZiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIHRvIG1hdGNoLgorICAgKiBAcGFyYW0gbSAgICAgVGhlIG1hdGNoIHJlc3VsdHMuCisgICAqIEBwYXJhbSByZSAgICBUaGUgcmVndWxhciBleHByZXNzaW9uLgorICAgKiBAcGFyYW0gZmxhZ3MgQ29udHJvbHMgaG93IHRoZSByZWd1bGFyIGV4cHJlc3Npb24gaXMgbWF0Y2hlZC4KKyAgICoKKyAgICogQHJldHZhbCB0cnVlICBBIG1hdGNoIGV4aXN0cy4KKyAgICogQHJldHZhbCBmYWxzZSBPdGhlcndpc2UuCisgICAqCisgICAqIEB0aHJvd3MgYW4gZXhjZXB0aW9uIG9mIHR5cGUgcmVnZXhfZXJyb3IuCisgICAqCisgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXIsIHR5cGVuYW1lIF9BbGxvY2F0b3IsCisJICAgdHlwZW5hbWUgX0NoX3R5cGUsIHR5cGVuYW1lIF9SeF90cmFpdHM+CisgICAgYm9vbAorICAgIHJlZ2V4X21hdGNoKF9CaV9pdGVyIF9fZmlyc3QsIF9CaV9pdGVyIF9fbGFzdCwKKwkJbWF0Y2hfcmVzdWx0czxfQmlfaXRlciwgX0FsbG9jYXRvcj4mIF9fbSwKKwkJY29uc3QgYmFzaWNfcmVnZXg8X0NoX3R5cGUsIF9SeF90cmFpdHM+JiBfX3JlLAorCQlyZWdleF9jb25zdGFudHM6Om1hdGNoX2ZsYWdfdHlwZSBfX2ZsYWdzCisJCT0gcmVnZXhfY29uc3RhbnRzOjptYXRjaF9kZWZhdWx0KTsKKworICAvKioKKyAgICogQGJyaWVmIEluZGljYXRlcyBpZiB0aGVyZSBpcyBhIG1hdGNoIGJldHdlZW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBAcCBlCisgICAqIGFuZCBhbGwgb2YgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSBbZmlyc3QsIGxhc3QpLgorICAgKgorICAgKiBAcGFyYW0gZmlyc3QgQmVnaW5uaW5nIG9mIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UgdG8gbWF0Y2guCisgICAqIEBwYXJhbSBsYXN0ICBPbmUtcGFzdC10aGUtZW5kIG9mIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UgdG8gbWF0Y2guCisgICAqIEBwYXJhbSByZSAgICBUaGUgcmVndWxhciBleHByZXNzaW9uLgorICAgKiBAcGFyYW0gZmxhZ3MgQ29udHJvbHMgaG93IHRoZSByZWd1bGFyIGV4cHJlc3Npb24gaXMgbWF0Y2hlZC4KKyAgICoKKyAgICogQHJldHZhbCB0cnVlICBBIG1hdGNoIGV4aXN0cy4KKyAgICogQHJldHZhbCBmYWxzZSBPdGhlcndpc2UuCisgICAqCisgICAqIEB0aHJvd3MgYW4gZXhjZXB0aW9uIG9mIHR5cGUgcmVnZXhfZXJyb3IuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwgdHlwZW5hbWUgX0NoX3R5cGUsIHR5cGVuYW1lIF9SeF90cmFpdHM+CisgICAgYm9vbAorICAgIHJlZ2V4X21hdGNoKF9CaV9pdGVyIF9fZmlyc3QsIF9CaV9pdGVyIF9fbGFzdCwKKwkJY29uc3QgYmFzaWNfcmVnZXg8X0NoX3R5cGUsIF9SeF90cmFpdHM+JiBfX3JlLAorCQlyZWdleF9jb25zdGFudHM6Om1hdGNoX2ZsYWdfdHlwZSBfX2ZsYWdzCisJCT0gcmVnZXhfY29uc3RhbnRzOjptYXRjaF9kZWZhdWx0KQorICAgIHsgCisgICAgICBtYXRjaF9yZXN1bHRzPF9CaV9pdGVyPiBfX3doYXQ7CisgICAgICByZXR1cm4gcmVnZXhfbWF0Y2goX19maXJzdCwgX19sYXN0LCBfX3doYXQsIF9fcmUsIF9fZmxhZ3MpOworICAgIH0KKworICAvKioKKyAgICogQGJyaWVmIERldGVybWluZXMgaWYgdGhlcmUgaXMgYSBtYXRjaCBiZXR3ZWVuIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gQHAgZQorICAgKiBhbmQgYSBDLXN0eWxlIG51bGwtdGVybWluYXRlZCBzdHJpbmcuCisgICAqCisgICAqIEBwYXJhbSBzICBUaGUgQy1zdHlsZSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIG1hdGNoLgorICAgKiBAcGFyYW0gbSAgVGhlIG1hdGNoIHJlc3VsdHMuCisgICAqIEBwYXJhbSByZSBUaGUgcmVndWxhciBleHByZXNzaW9uLgorICAgKiBAcGFyYW0gZiAgQ29udHJvbHMgaG93IHRoZSByZWd1bGFyIGV4cHJlc3Npb24gaXMgbWF0Y2hlZC4KKyAgICoKKyAgICogQHJldHZhbCB0cnVlICBBIG1hdGNoIGV4aXN0cy4KKyAgICogQHJldHZhbCBmYWxzZSBPdGhlcndpc2UuCisgICAqCisgICAqIEB0aHJvd3MgYW4gZXhjZXB0aW9uIG9mIHR5cGUgcmVnZXhfZXJyb3IuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hfdHlwZSwgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX1J4X3RyYWl0cz4KKyAgICBpbmxpbmUgYm9vbAorICAgIHJlZ2V4X21hdGNoKGNvbnN0IF9DaF90eXBlKiBfX3MsCisJCW1hdGNoX3Jlc3VsdHM8Y29uc3QgX0NoX3R5cGUqLCBfQWxsb2NhdG9yPiYgX19tLAorCQljb25zdCBiYXNpY19yZWdleDxfQ2hfdHlwZSwgX1J4X3RyYWl0cz4mIF9fcmUsCisJCXJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZmxhZ190eXBlIF9fZgorCQk9IHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZGVmYXVsdCkKKyAgICB7IHJldHVybiByZWdleF9tYXRjaChfX3MsIF9fcyArIF9SeF90cmFpdHM6Omxlbmd0aChfX3MpLCBfX20sIF9fcmUsIF9fZik7IH0KKworICAvKioKKyAgICogQGJyaWVmIERldGVybWluZXMgaWYgdGhlcmUgaXMgYSBtYXRjaCBiZXR3ZWVuIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gQHAgZQorICAgKiBhbmQgYSBzdHJpbmcuCisgICAqCisgICAqIEBwYXJhbSBzICAgICBUaGUgc3RyaW5nIHRvIG1hdGNoLgorICAgKiBAcGFyYW0gbSAgICAgVGhlIG1hdGNoIHJlc3VsdHMuCisgICAqIEBwYXJhbSByZSAgICBUaGUgcmVndWxhciBleHByZXNzaW9uLgorICAgKiBAcGFyYW0gZmxhZ3MgQ29udHJvbHMgaG93IHRoZSByZWd1bGFyIGV4cHJlc3Npb24gaXMgbWF0Y2hlZC4KKyAgICoKKyAgICogQHJldHZhbCB0cnVlICBBIG1hdGNoIGV4aXN0cy4KKyAgICogQHJldHZhbCBmYWxzZSBPdGhlcndpc2UuCisgICAqCisgICAqIEB0aHJvd3MgYW4gZXhjZXB0aW9uIG9mIHR5cGUgcmVnZXhfZXJyb3IuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hfdHJhaXRzLCB0eXBlbmFtZSBfQ2hfYWxsb2MsCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0NoX3R5cGUsIHR5cGVuYW1lIF9SeF90cmFpdHM+CisgICAgaW5saW5lIGJvb2wKKyAgICByZWdleF9tYXRjaChjb25zdCBiYXNpY19zdHJpbmc8X0NoX3R5cGUsIF9DaF90cmFpdHMsIF9DaF9hbGxvYz4mIF9fcywKKwkJbWF0Y2hfcmVzdWx0czx0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoX3R5cGUsIAorCQlfQ2hfdHJhaXRzLCBfQ2hfYWxsb2M+Ojpjb25zdF9pdGVyYXRvciwgX0FsbG9jYXRvcj4mIF9fbSwKKwkJY29uc3QgYmFzaWNfcmVnZXg8X0NoX3R5cGUsIF9SeF90cmFpdHM+JiBfX3JlLAorCQlyZWdleF9jb25zdGFudHM6Om1hdGNoX2ZsYWdfdHlwZSBfX2ZsYWdzCisJCT0gcmVnZXhfY29uc3RhbnRzOjptYXRjaF9kZWZhdWx0KQorICAgIHsgcmV0dXJuIHJlZ2V4X21hdGNoKF9fcy5iZWdpbigpLCBfX3MuZW5kKCksIF9fbSwgX19yZSwgX19mbGFncyk7IH0KKworICAvKioKKyAgICogQGJyaWVmIEluZGljYXRlcyBpZiB0aGVyZSBpcyBhIG1hdGNoIGJldHdlZW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBAcCBlCisgICAqIGFuZCBhIEMtc3R5bGUgbnVsbC10ZXJtaW5hdGVkIHN0cmluZy4KKyAgICoKKyAgICogQHBhcmFtIHMgIFRoZSBDLXN0eWxlIG51bGwtdGVybWluYXRlZCBzdHJpbmcgdG8gbWF0Y2guCisgICAqIEBwYXJhbSByZSBUaGUgcmVndWxhciBleHByZXNzaW9uLgorICAgKiBAcGFyYW0gZiAgQ29udHJvbHMgaG93IHRoZSByZWd1bGFyIGV4cHJlc3Npb24gaXMgbWF0Y2hlZC4KKyAgICoKKyAgICogQHJldHZhbCB0cnVlICBBIG1hdGNoIGV4aXN0cy4KKyAgICogQHJldHZhbCBmYWxzZSBPdGhlcndpc2UuCisgICAqCisgICAqIEB0aHJvd3MgYW4gZXhjZXB0aW9uIG9mIHR5cGUgcmVnZXhfZXJyb3IuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hfdHlwZSwgY2xhc3MgX1J4X3RyYWl0cz4KKyAgICBpbmxpbmUgYm9vbAorICAgIHJlZ2V4X21hdGNoKGNvbnN0IF9DaF90eXBlKiBfX3MsCisJCWNvbnN0IGJhc2ljX3JlZ2V4PF9DaF90eXBlLCBfUnhfdHJhaXRzPiYgX19yZSwKKwkJcmVnZXhfY29uc3RhbnRzOjptYXRjaF9mbGFnX3R5cGUgX19mCisJCT0gcmVnZXhfY29uc3RhbnRzOjptYXRjaF9kZWZhdWx0KQorICAgIHsgcmV0dXJuIHJlZ2V4X21hdGNoKF9fcywgX19zICsgX1J4X3RyYWl0czo6bGVuZ3RoKF9fcyksIF9fcmUsIF9fZik7IH0KKworICAvKioKKyAgICogQGJyaWVmIEluZGljYXRlcyBpZiB0aGVyZSBpcyBhIG1hdGNoIGJldHdlZW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBAcCBlCisgICAqIGFuZCBhIHN0cmluZy4KKyAgICoKKyAgICogQHBhcmFtIHMgICAgIFtJTl0gVGhlIHN0cmluZyB0byBtYXRjaC4KKyAgICogQHBhcmFtIHJlICAgIFtJTl0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICogQHBhcmFtIGZsYWdzIFtJTl0gQ29udHJvbHMgaG93IHRoZSByZWd1bGFyIGV4cHJlc3Npb24gaXMgbWF0Y2hlZC4KKyAgICoKKyAgICogQHJldHZhbCB0cnVlICBBIG1hdGNoIGV4aXN0cy4KKyAgICogQHJldHZhbCBmYWxzZSBPdGhlcndpc2UuCisgICAqCisgICAqIEB0aHJvd3MgYW4gZXhjZXB0aW9uIG9mIHR5cGUgcmVnZXhfZXJyb3IuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hfdHJhaXRzLCB0eXBlbmFtZSBfU3RyX2FsbG9jYXRvciwKKwkgICB0eXBlbmFtZSBfQ2hfdHlwZSwgdHlwZW5hbWUgX1J4X3RyYWl0cz4KKyAgICBpbmxpbmUgYm9vbAorICAgIHJlZ2V4X21hdGNoKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hfdHlwZSwgX0NoX3RyYWl0cywgX1N0cl9hbGxvY2F0b3I+JiBfX3MsCisJCWNvbnN0IGJhc2ljX3JlZ2V4PF9DaF90eXBlLCBfUnhfdHJhaXRzPiYgX19yZSwKKwkJcmVnZXhfY29uc3RhbnRzOjptYXRjaF9mbGFnX3R5cGUgX19mbGFncworCQk9IHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZGVmYXVsdCkKKyAgICB7IHJldHVybiByZWdleF9tYXRjaChfX3MuYmVnaW4oKSwgX19zLmVuZCgpLCBfX3JlLCBfX2ZsYWdzKTsgfQorCisgIC8vIFs3LjExLjNdIEZ1bmN0aW9uIHRlbXBsYXRlIHJlZ2V4X3NlYXJjaAorICAvKioKKyAgICogU2VhcmNoZXMgZm9yIGEgcmVndWxhciBleHByZXNzaW9uIHdpdGhpbiBhIHJhbmdlLgorICAgKiBAcGFyYW0gZmlyc3QgW0lOXSAgVGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcgdG8gc2VhcmNoLgorICAgKiBAcGFyYW0gbGFzdCAgW0lOXSAgT25lLXBhc3QtdGhlLWVuZCBvZiB0aGUgc3RyaW5nIHRvIHNlYXJjaC4KKyAgICogQHBhcmFtIG0gICAgIFtPVVRdIFRoZSBtYXRjaCByZXN1bHRzLgorICAgKiBAcGFyYW0gcmUgICAgW0lOXSAgVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBzZWFyY2ggZm9yLgorICAgKiBAcGFyYW0gZmxhZ3MgW0lOXSAgU2VhcmNoIHBvbGljeSBmbGFncy4KKyAgICogQHJldHZhbCB0cnVlICBBIG1hdGNoIHdhcyBmb3VuZCB3aXRoaW4gdGhlIHN0cmluZy4KKyAgICogQHJldHZhbCBmYWxzZSBObyBtYXRjaCB3YXMgZm91bmQgd2l0aGluIHRoZSBzdHJpbmcsIHRoZSBjb250ZW50IG9mICVtIGlzCisgICAqICAgICAgICAgICAgICAgdW5kZWZpbmVkLgorICAgKgorICAgKiBAdGhyb3dzIGFuIGV4Y2VwdGlvbiBvZiB0eXBlIHJlZ2V4X2Vycm9yLgorICAgKgorICAgKiBAdG9kbyBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyLCB0eXBlbmFtZSBfQWxsb2NhdG9yLAorCSAgIHR5cGVuYW1lIF9DaF90eXBlLCB0eXBlbmFtZSBfUnhfdHJhaXRzPgorICAgIGlubGluZSBib29sCisgICAgcmVnZXhfc2VhcmNoKF9CaV9pdGVyIF9fZmlyc3QsIF9CaV9pdGVyIF9fbGFzdCwKKwkJIG1hdGNoX3Jlc3VsdHM8X0JpX2l0ZXIsIF9BbGxvY2F0b3I+JiBfX20sCisJCSBjb25zdCBiYXNpY19yZWdleDxfQ2hfdHlwZSwgX1J4X3RyYWl0cz4mIF9fcmUsCisJCSByZWdleF9jb25zdGFudHM6Om1hdGNoX2ZsYWdfdHlwZSBfX2ZsYWdzCisJCSA9IHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZGVmYXVsdCk7CisKKyAgLyoqCisgICAqIFNlYXJjaGVzIGZvciBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aXRoaW4gYSByYW5nZS4KKyAgICogQHBhcmFtIGZpcnN0IFtJTl0gIFRoZSBzdGFydCBvZiB0aGUgc3RyaW5nIHRvIHNlYXJjaC4KKyAgICogQHBhcmFtIGxhc3QgIFtJTl0gIE9uZS1wYXN0LXRoZS1lbmQgb2YgdGhlIHN0cmluZyB0byBzZWFyY2guCisgICAqIEBwYXJhbSByZSAgICBbSU5dICBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIHNlYXJjaCBmb3IuCisgICAqIEBwYXJhbSBmbGFncyBbSU5dICBTZWFyY2ggcG9saWN5IGZsYWdzLgorICAgKiBAcmV0dmFsIHRydWUgIEEgbWF0Y2ggd2FzIGZvdW5kIHdpdGhpbiB0aGUgc3RyaW5nLgorICAgKiBAcmV0dmFsIGZhbHNlIE5vIG1hdGNoIHdhcyBmb3VuZCB3aXRoaW4gdGhlIHN0cmluZy4KKyAgICogQGRvY3RvZG8KKyAgICoKKyAgICogQHRocm93cyBhbiBleGNlcHRpb24gb2YgdHlwZSByZWdleF9lcnJvci4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyLCB0eXBlbmFtZSBfQ2hfdHlwZSwgdHlwZW5hbWUgX1J4X3RyYWl0cz4KKyAgICBpbmxpbmUgYm9vbAorICAgIHJlZ2V4X3NlYXJjaChfQmlfaXRlciBfX2ZpcnN0LCBfQmlfaXRlciBfX2xhc3QsCisJCSBjb25zdCBiYXNpY19yZWdleDxfQ2hfdHlwZSwgX1J4X3RyYWl0cz4mIF9fcmUsCisJCSByZWdleF9jb25zdGFudHM6Om1hdGNoX2ZsYWdfdHlwZSBfX2ZsYWdzCisJCSA9IHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZGVmYXVsdCkKKyAgICB7CisgICAgICBtYXRjaF9yZXN1bHRzPF9CaV9pdGVyPiBfX3doYXQ7CisgICAgICByZXR1cm4gcmVnZXhfc2VhcmNoKF9fZmlyc3QsIF9fbGFzdCwgX193aGF0LCBfX3JlLCBfX2ZsYWdzKTsKKyAgICB9CisKKyAgLyoqCisgICAqIEBicmllZiBTZWFyY2hlcyBmb3IgYSByZWd1bGFyIGV4cHJlc3Npb24gd2l0aGluIGEgQy1zdHJpbmcuCisgICAqIEBwYXJhbSBzIFtJTl0gIEEgQy1zdHJpbmcgdG8gc2VhcmNoIGZvciB0aGUgcmVnZXguCisgICAqIEBwYXJhbSBtIFtPVVRdIFRoZSBzZXQgb2YgcmVnZXggbWF0Y2hlcy4KKyAgICogQHBhcmFtIGUgW0lOXSAgVGhlIHJlZ2V4IHRvIHNlYXJjaCBmb3IgaW4gQHAgcy4KKyAgICogQHBhcmFtIGYgW0lOXSAgVGhlIHNlYXJjaCBmbGFncy4KKyAgICogQHJldHZhbCB0cnVlICBBIG1hdGNoIHdhcyBmb3VuZCB3aXRoaW4gdGhlIHN0cmluZy4KKyAgICogQHJldHZhbCBmYWxzZSBObyBtYXRjaCB3YXMgZm91bmQgd2l0aGluIHRoZSBzdHJpbmcsIHRoZSBjb250ZW50IG9mICVtIGlzCisgICAqICAgICAgICAgICAgICAgdW5kZWZpbmVkLgorICAgKiBAZG9jdG9kbworICAgKgorICAgKiBAdGhyb3dzIGFuIGV4Y2VwdGlvbiBvZiB0eXBlIHJlZ2V4X2Vycm9yLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoX3R5cGUsIGNsYXNzIF9BbGxvY2F0b3IsIGNsYXNzIF9SeF90cmFpdHM+CisgICAgaW5saW5lIGJvb2wKKyAgICByZWdleF9zZWFyY2goY29uc3QgX0NoX3R5cGUqIF9fcywKKwkJIG1hdGNoX3Jlc3VsdHM8Y29uc3QgX0NoX3R5cGUqLCBfQWxsb2NhdG9yPiYgX19tLAorCQkgY29uc3QgYmFzaWNfcmVnZXg8X0NoX3R5cGUsIF9SeF90cmFpdHM+JiBfX2UsCisJCSByZWdleF9jb25zdGFudHM6Om1hdGNoX2ZsYWdfdHlwZSBfX2YKKwkJID0gcmVnZXhfY29uc3RhbnRzOjptYXRjaF9kZWZhdWx0KQorICAgIHsgcmV0dXJuIHJlZ2V4X3NlYXJjaChfX3MsIF9fcyArIF9SeF90cmFpdHM6Omxlbmd0aChfX3MpLCBfX20sIF9fZSwgX19mKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgU2VhcmNoZXMgZm9yIGEgcmVndWxhciBleHByZXNzaW9uIHdpdGhpbiBhIEMtc3RyaW5nLgorICAgKiBAcGFyYW0gcyBbSU5dICBUaGUgQy1zdHJpbmcgdG8gc2VhcmNoLgorICAgKiBAcGFyYW0gZSBbSU5dICBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIHNlYXJjaCBmb3IuCisgICAqIEBwYXJhbSBmIFtJTl0gIFNlYXJjaCBwb2xpY3kgZmxhZ3MuCisgICAqIEByZXR2YWwgdHJ1ZSAgQSBtYXRjaCB3YXMgZm91bmQgd2l0aGluIHRoZSBzdHJpbmcuCisgICAqIEByZXR2YWwgZmFsc2UgTm8gbWF0Y2ggd2FzIGZvdW5kIHdpdGhpbiB0aGUgc3RyaW5nLgorICAgKiBAZG9jdG9kbworICAgKgorICAgKiBAdGhyb3dzIGFuIGV4Y2VwdGlvbiBvZiB0eXBlIHJlZ2V4X2Vycm9yLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoX3R5cGUsIHR5cGVuYW1lIF9SeF90cmFpdHM+CisgICAgaW5saW5lIGJvb2wKKyAgICByZWdleF9zZWFyY2goY29uc3QgX0NoX3R5cGUqIF9fcywKKwkJIGNvbnN0IGJhc2ljX3JlZ2V4PF9DaF90eXBlLCBfUnhfdHJhaXRzPiYgX19lLAorCQkgcmVnZXhfY29uc3RhbnRzOjptYXRjaF9mbGFnX3R5cGUgX19mCisJCSA9IHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZGVmYXVsdCkKKyAgICB7IHJldHVybiByZWdleF9zZWFyY2goX19zLCBfX3MgKyBfUnhfdHJhaXRzOjpsZW5ndGgoX19zKSwgX19lLCBfX2YpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBTZWFyY2hlcyBmb3IgYSByZWd1bGFyIGV4cHJlc3Npb24gd2l0aGluIGEgc3RyaW5nLgorICAgKiBAcGFyYW0gcyAgICAgW0lOXSAgVGhlIHN0cmluZyB0byBzZWFyY2guCisgICAqIEBwYXJhbSBlICAgICBbSU5dICBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIHNlYXJjaCBmb3IuCisgICAqIEBwYXJhbSBmbGFncyBbSU5dICBTZWFyY2ggcG9saWN5IGZsYWdzLgorICAgKiBAcmV0dmFsIHRydWUgIEEgbWF0Y2ggd2FzIGZvdW5kIHdpdGhpbiB0aGUgc3RyaW5nLgorICAgKiBAcmV0dmFsIGZhbHNlIE5vIG1hdGNoIHdhcyBmb3VuZCB3aXRoaW4gdGhlIHN0cmluZy4KKyAgICogQGRvY3RvZG8KKyAgICoKKyAgICogQHRocm93cyBhbiBleGNlcHRpb24gb2YgdHlwZSByZWdleF9lcnJvci4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaF90cmFpdHMsIHR5cGVuYW1lIF9TdHJpbmdfYWxsb2NhdG9yLAorCSAgIHR5cGVuYW1lIF9DaF90eXBlLCB0eXBlbmFtZSBfUnhfdHJhaXRzPgorICAgIGlubGluZSBib29sCisgICAgcmVnZXhfc2VhcmNoKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hfdHlwZSwgX0NoX3RyYWl0cywKKwkJIF9TdHJpbmdfYWxsb2NhdG9yPiYgX19zLAorCQkgY29uc3QgYmFzaWNfcmVnZXg8X0NoX3R5cGUsIF9SeF90cmFpdHM+JiBfX2UsCisJCSByZWdleF9jb25zdGFudHM6Om1hdGNoX2ZsYWdfdHlwZSBfX2ZsYWdzCisJCSA9IHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZGVmYXVsdCkKKyAgICB7IHJldHVybiByZWdleF9zZWFyY2goX19zLmJlZ2luKCksIF9fcy5lbmQoKSwgX19lLCBfX2ZsYWdzKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgU2VhcmNoZXMgZm9yIGEgcmVndWxhciBleHByZXNzaW9uIHdpdGhpbiBhIHN0cmluZy4KKyAgICogQHBhcmFtIHMgW0lOXSAgQSBDKysgc3RyaW5nIHRvIHNlYXJjaCBmb3IgdGhlIHJlZ2V4LgorICAgKiBAcGFyYW0gbSBbT1VUXSBUaGUgc2V0IG9mIHJlZ2V4IG1hdGNoZXMuCisgICAqIEBwYXJhbSBlIFtJTl0gIFRoZSByZWdleCB0byBzZWFyY2ggZm9yIGluIEBwIHMuCisgICAqIEBwYXJhbSBmIFtJTl0gIFRoZSBzZWFyY2ggZmxhZ3MuCisgICAqIEByZXR2YWwgdHJ1ZSAgQSBtYXRjaCB3YXMgZm91bmQgd2l0aGluIHRoZSBzdHJpbmcuCisgICAqIEByZXR2YWwgZmFsc2UgTm8gbWF0Y2ggd2FzIGZvdW5kIHdpdGhpbiB0aGUgc3RyaW5nLCB0aGUgY29udGVudCBvZiAlbSBpcworICAgKiAgICAgICAgICAgICAgIHVuZGVmaW5lZC4KKyAgICoKKyAgICogQHRocm93cyBhbiBleGNlcHRpb24gb2YgdHlwZSByZWdleF9lcnJvci4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaF90cmFpdHMsIHR5cGVuYW1lIF9DaF9hbGxvYywKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfQ2hfdHlwZSwKKwkgICB0eXBlbmFtZSBfUnhfdHJhaXRzPgorICAgIGlubGluZSBib29sCisgICAgcmVnZXhfc2VhcmNoKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hfdHlwZSwgX0NoX3RyYWl0cywgX0NoX2FsbG9jPiYgX19zLAorCQkgbWF0Y2hfcmVzdWx0czx0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoX3R5cGUsCisJCSBfQ2hfdHJhaXRzLCBfQ2hfYWxsb2M+Ojpjb25zdF9pdGVyYXRvciwgX0FsbG9jYXRvcj4mIF9fbSwKKwkJIGNvbnN0IGJhc2ljX3JlZ2V4PF9DaF90eXBlLCBfUnhfdHJhaXRzPiYgX19lLAorCQkgcmVnZXhfY29uc3RhbnRzOjptYXRjaF9mbGFnX3R5cGUgX19mCisJCSA9IHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZGVmYXVsdCkKKyAgICB7IHJldHVybiByZWdleF9zZWFyY2goX19zLmJlZ2luKCksIF9fcy5lbmQoKSwgX19tLCBfX2UsIF9fZik7IH0KKworICAvLyB0cjEgWzcuMTEuNF0gc3RkIFsyOC4xMS40XSBGdW5jdGlvbiB0ZW1wbGF0ZSByZWdleF9yZXBsYWNlCisgIC8qKgorICAgKiBAZG9jdG9kbworICAgKiBAcGFyYW0gb3V0CisgICAqIEBwYXJhbSBmaXJzdAorICAgKiBAcGFyYW0gbGFzdAorICAgKiBAcGFyYW0gZQorICAgKiBAcGFyYW0gZm10CisgICAqIEBwYXJhbSBmbGFncworICAgKgorICAgKiBAcmV0dXJucyBvdXQKKyAgICogQHRocm93cyBhbiBleGNlcHRpb24gb2YgdHlwZSByZWdleF9lcnJvci4KKyAgICoKKyAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0X2l0ZXIsIHR5cGVuYW1lIF9CaV9pdGVyLAorCSAgIHR5cGVuYW1lIF9SeF90cmFpdHMsIHR5cGVuYW1lIF9DaF90eXBlPgorICAgIGlubGluZSBfT3V0X2l0ZXIKKyAgICByZWdleF9yZXBsYWNlKF9PdXRfaXRlciBfX291dCwgX0JpX2l0ZXIgX19maXJzdCwgX0JpX2l0ZXIgX19sYXN0LAorCQkgIGNvbnN0IGJhc2ljX3JlZ2V4PF9DaF90eXBlLCBfUnhfdHJhaXRzPiYgX19lLAorCQkgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hfdHlwZT4mIF9fZm10LAorCQkgIHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZmxhZ190eXBlIF9fZmxhZ3MKKwkJICA9IHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZGVmYXVsdCk7CisKKyAgLyoqCisgICAqIEBkb2N0b2RvCisgICAqIEBwYXJhbSBzCisgICAqIEBwYXJhbSBlCisgICAqIEBwYXJhbSBmbXQKKyAgICogQHBhcmFtIGZsYWdzCisgICAqCisgICAqIEByZXR1cm5zIGEgY29weSBvZiBzdHJpbmcgQHAgcyB3aXRoIHJlcGxhY2VtZW50cy4KKyAgICoKKyAgICogQHRocm93cyBhbiBleGNlcHRpb24gb2YgdHlwZSByZWdleF9lcnJvci4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SeF90cmFpdHMsIHR5cGVuYW1lIF9DaF90eXBlPgorICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoX3R5cGU+CisgICAgcmVnZXhfcmVwbGFjZShjb25zdCBiYXNpY19zdHJpbmc8X0NoX3R5cGU+JiBfX3MsCisJCSAgY29uc3QgYmFzaWNfcmVnZXg8X0NoX3R5cGUsIF9SeF90cmFpdHM+JiBfX2UsCisJCSAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaF90eXBlPiYgX19mbXQsCisJCSAgcmVnZXhfY29uc3RhbnRzOjptYXRjaF9mbGFnX3R5cGUgX19mbGFncworCQkgID0gcmVnZXhfY29uc3RhbnRzOjptYXRjaF9kZWZhdWx0KQorICAgIHsKKyAgICAgIHN0ZDo6c3RyaW5nIF9fcmVzdWx0OworICAgICAgcmVnZXhfcmVwbGFjZShzdGQ6OmJhY2tfaW5zZXJ0ZXIoX19yZXN1bHQpLAorCQkgICAgX19zLmJlZ2luKCksIF9fcy5lbmQoKSwgX19lLCBfX2ZtdCwgX19mbGFncyk7CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIC8vQH0KKworICAvLyB0cjEgWzcuMTIuMV0gc3RkIFsyOC4xMl0gQ2xhc3MgdGVtcGxhdGUgcmVnZXhfaXRlcmF0b3IKKyAgLyoqCisgICAqIEFuIGl0ZXJhdG9yIGFkYXB0b3IgdGhhdCB3aWxsIHByb3ZpZGUgcmVwZWF0ZWQgY2FsbHMgb2YgcmVnZXhfc2VhcmNoIG92ZXIgCisgICAqIGEgcmFuZ2UgdW50aWwgbm8gbW9yZSBtYXRjaGVzIHJlbWFpbi4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyLAorCSAgIHR5cGVuYW1lIF9DaF90eXBlID0gdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSwKKwkgICB0eXBlbmFtZSBfUnhfdHJhaXRzID0gcmVnZXhfdHJhaXRzPF9DaF90eXBlPiA+CisgICAgY2xhc3MgcmVnZXhfaXRlcmF0b3IKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBiYXNpY19yZWdleDxfQ2hfdHlwZSwgX1J4X3RyYWl0cz4gIHJlZ2V4X3R5cGU7CisgICAgICB0eXBlZGVmIG1hdGNoX3Jlc3VsdHM8X0JpX2l0ZXI+ICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpwdHJkaWZmX3QgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcgICAgICAgICAgaXRlcmF0b3JfY2F0ZWdvcnk7CisKKyAgICBwdWJsaWM6CisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBQcm92aWRlcyBhIHNpbmd1bGFyIGl0ZXJhdG9yLCB1c2VmdWwgZm9yIGluZGljYXRpbmcKKyAgICAgICAqIG9uZS1wYXN0LXRoZS1lbmQgb2YgYSByYW5nZS4KKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICogQGRvY3RvZG8KKyAgICAgICAqLworICAgICAgcmVnZXhfaXRlcmF0b3IoKTsKKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiBDb25zdHJ1Y3RzIGEgJXJlZ2V4X2l0ZXJhdG9yLi4uCisgICAgICAgKiBAcGFyYW0gYSAgW0lOXSBUaGUgc3RhcnQgb2YgYSB0ZXh0IHJhbmdlIHRvIHNlYXJjaC4KKyAgICAgICAqIEBwYXJhbSBiICBbSU5dIE9uZS1wYXN0LXRoZS1lbmQgb2YgdGhlIHRleHQgcmFuZ2UgdG8gc2VhcmNoLgorICAgICAgICogQHBhcmFtIHJlIFtJTl0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaC4KKyAgICAgICAqIEBwYXJhbSBtICBbSU5dIFBvbGljeSBmbGFncyBmb3IgbWF0Y2ggcnVsZXMuCisgICAgICAgKiBAdG9kbyBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAqIEBkb2N0b2RvCisgICAgICAgKi8KKyAgICAgIHJlZ2V4X2l0ZXJhdG9yKF9CaV9pdGVyIF9fYSwgX0JpX2l0ZXIgX19iLCBjb25zdCByZWdleF90eXBlJiBfX3JlLAorCQkgICAgIHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZmxhZ190eXBlIF9fbQorCQkgICAgID0gcmVnZXhfY29uc3RhbnRzOjptYXRjaF9kZWZhdWx0KTsKKworICAgICAgLyoqCisgICAgICAgKiBDb3B5IGNvbnN0cnVjdHMgYSAlcmVnZXhfaXRlcmF0b3IuCisgICAgICAgKiBAdG9kbyBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAqIEBkb2N0b2RvCisgICAgICAgKi8KKyAgICAgIHJlZ2V4X2l0ZXJhdG9yKGNvbnN0IHJlZ2V4X2l0ZXJhdG9yJiBfX3Jocyk7CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKiBAZG9jdG9kbworICAgICAgICovCisgICAgICByZWdleF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yPShjb25zdCByZWdleF9pdGVyYXRvciYgX19yaHMpOworICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICogQGRvY3RvZG8KKyAgICAgICAqLworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCByZWdleF9pdGVyYXRvciYgX19yaHMpOworICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICogQGRvY3RvZG8KKyAgICAgICAqLworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCByZWdleF9pdGVyYXRvciYgX19yaHMpOworICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICogQGRvY3RvZG8KKyAgICAgICAqLworICAgICAgY29uc3QgdmFsdWVfdHlwZSYKKyAgICAgIG9wZXJhdG9yKigpOworICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICogQGRvY3RvZG8KKyAgICAgICAqLworICAgICAgY29uc3QgdmFsdWVfdHlwZSoKKyAgICAgIG9wZXJhdG9yLT4oKTsKKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiBAdG9kbyBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAqIEBkb2N0b2RvCisgICAgICAgKi8KKyAgICAgIHJlZ2V4X2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrKygpOworICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICogQGRvY3RvZG8KKyAgICAgICAqLworICAgICAgcmVnZXhfaXRlcmF0b3IKKyAgICAgIG9wZXJhdG9yKysoaW50KTsKKyAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAvLyB0aGVzZSBtZW1iZXJzIGFyZSBzaG93biBmb3IgZXhwb3NpdGlvbiBvbmx5OgorICAgICAgX0JpX2l0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW47CisgICAgICBfQmlfaXRlciAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ7CisgICAgICBjb25zdCByZWdleF90eXBlKiAgICAgICAgICAgICAgICBwcmVnZXg7CisgICAgICByZWdleF9jb25zdGFudHM6Om1hdGNoX2ZsYWdfdHlwZSBmbGFnczsKKyAgICAgIG1hdGNoX3Jlc3VsdHM8X0JpX2l0ZXI+ICAgICAgICAgIG1hdGNoOworICAgIH07CisgIAorICB0eXBlZGVmIHJlZ2V4X2l0ZXJhdG9yPGNvbnN0IGNoYXIqPiAgICAgICAgICAgICBjcmVnZXhfaXRlcmF0b3I7CisgIHR5cGVkZWYgcmVnZXhfaXRlcmF0b3I8c3RyaW5nOjpjb25zdF9pdGVyYXRvcj4gIHNyZWdleF9pdGVyYXRvcjsKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICB0eXBlZGVmIHJlZ2V4X2l0ZXJhdG9yPGNvbnN0IHdjaGFyX3QqPiAgICAgICAgICB3Y3JlZ2V4X2l0ZXJhdG9yOworICB0eXBlZGVmIHJlZ2V4X2l0ZXJhdG9yPHdzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yPiB3c3JlZ2V4X2l0ZXJhdG9yOworI2VuZGlmCisKKyAgLy8gWzcuMTIuMl0gQ2xhc3MgdGVtcGxhdGUgcmVnZXhfdG9rZW5faXRlcmF0b3IKKyAgLyoqCisgICAqIEl0ZXJhdGVzIG92ZXIgc3VibWF0Y2hlcyBpbiBhIHJhbmdlIChvciBAYSBzcGxpdHMgYSB0ZXh0IHN0cmluZykuCisgICAqCisgICAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgaXRlcmF0b3IgaXMgdG8gZW51bWVyYXRlIGFsbCwgb3IgYWxsIHNwZWNpZmllZCwKKyAgICogbWF0Y2hlcyBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aXRoaW4gYSB0ZXh0IHJhbmdlLiAgVGhlIGRlcmVmZXJlbmNlZAorICAgKiB2YWx1ZSBvZiBhbiBpdGVyYXRvciBvZiB0aGlzIGNsYXNzIGlzIGEgc3RkOjp0cjE6OnN1Yl9tYXRjaCBvYmplY3QuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwKKwkgICB0eXBlbmFtZSBfQ2hfdHlwZSA9IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUsCisJICAgdHlwZW5hbWUgX1J4X3RyYWl0cyA9IHJlZ2V4X3RyYWl0czxfQ2hfdHlwZT4gPgorICAgIGNsYXNzIHJlZ2V4X3Rva2VuX2l0ZXJhdG9yCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgYmFzaWNfcmVnZXg8X0NoX3R5cGUsIF9SeF90cmFpdHM+IHJlZ2V4X3R5cGU7CisgICAgICB0eXBlZGVmIHN1Yl9tYXRjaDxfQmlfaXRlcj4gICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OnB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiAgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OworICAgICAgCisgICAgcHVibGljOgorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgRGVmYXVsdCBjb25zdHJ1Y3RzIGEgJXJlZ2V4X3Rva2VuX2l0ZXJhdG9yLgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKiAKKyAgICAgICAqIEEgZGVmYXVsdC1jb25zdHJ1Y3RlZCAlcmVnZXhfdG9rZW5faXRlcmF0b3IgaXMgYSBzaW5ndWxhciBpdGVyYXRvcgorICAgICAgICogdGhhdCB3aWxsIGNvbXBhcmUgZXF1YWwgdG8gdGhlIG9uZS1wYXN0LXRoZS1lbmQgdmFsdWUgZm9yIGFueQorICAgICAgICogaXRlcmF0b3Igb2YgdGhlIHNhbWUgdHlwZS4KKyAgICAgICAqLworICAgICAgcmVnZXhfdG9rZW5faXRlcmF0b3IoKTsKKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiBDb25zdHJ1Y3RzIGEgJXJlZ2V4X3Rva2VuX2l0ZXJhdG9yLi4uCisgICAgICAgKiBAcGFyYW0gYSAgICAgICAgICBbSU5dIFRoZSBzdGFydCBvZiB0aGUgdGV4dCB0byBzZWFyY2guCisgICAgICAgKiBAcGFyYW0gYiAgICAgICAgICBbSU5dIE9uZS1wYXN0LXRoZS1lbmQgb2YgdGhlIHRleHQgdG8gc2VhcmNoLgorICAgICAgICogQHBhcmFtIHJlICAgICAgICAgW0lOXSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIHNlYXJjaCBmb3IuCisgICAgICAgKiBAcGFyYW0gc3VibWF0Y2ggICBbSU5dIFdoaWNoIHN1Ym1hdGNoIHRvIHJldHVybi4gIFRoZXJlIGFyZSBzb21lCisgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWwgdmFsdWVzIGZvciB0aGlzIHBhcmFtZXRlcjoKKyAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgLSAtMSBlYWNoIGVudW1lcmF0ZWQgc3ViZXhwcmVzc2lvbiBkb2VzIE5PVAorICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gKGFrYSBmaWVsZAorICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dGluZykKKyAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgLSAwIHRoZSBlbnRpcmUgc3RyaW5nIG1hdGNoaW5nIHRoZQorICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmV4cHJlc3Npb24gaXMgcmV0dXJuZWQgZm9yIGVhY2ggbWF0Y2gKKyAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIHRleHQuCisgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIC0gPjAgZW51bWVyYXRlcyBvbmx5IHRoZSBpbmRpY2F0ZWQKKyAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJleHByZXNzaW9uIGZyb20gYSBtYXRjaCB3aXRoaW4gdGhlIHRleHQuCisgICAgICAgKiBAcGFyYW0gbSAgICAgICAgICBbSU5dIFBvbGljeSBmbGFncyBmb3IgbWF0Y2ggcnVsZXMuCisgICAgICAgKgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKiBAZG9jdG9kbworICAgICAgICovCisgICAgICByZWdleF90b2tlbl9pdGVyYXRvcihfQmlfaXRlciBfX2EsIF9CaV9pdGVyIF9fYiwgY29uc3QgcmVnZXhfdHlwZSYgX19yZSwKKwkJCSAgIGludCBfX3N1Ym1hdGNoID0gMCwKKwkJCSAgIHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZmxhZ190eXBlIF9fbQorCQkJICAgPSByZWdleF9jb25zdGFudHM6Om1hdGNoX2RlZmF1bHQpOworCisgICAgICAvKioKKyAgICAgICAqIENvbnN0cnVjdHMgYSAlcmVnZXhfdG9rZW5faXRlcmF0b3IuLi4KKyAgICAgICAqIEBwYXJhbSBhICAgICAgICAgIFtJTl0gVGhlIHN0YXJ0IG9mIHRoZSB0ZXh0IHRvIHNlYXJjaC4KKyAgICAgICAqIEBwYXJhbSBiICAgICAgICAgIFtJTl0gT25lLXBhc3QtdGhlLWVuZCBvZiB0aGUgdGV4dCB0byBzZWFyY2guCisgICAgICAgKiBAcGFyYW0gcmUgICAgICAgICBbSU5dIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gc2VhcmNoIGZvci4KKyAgICAgICAqIEBwYXJhbSBzdWJtYXRjaGVzIFtJTl0gQSBsaXN0IG9mIHN1YmV4cHJlc3Npb25zIHRvIHJldHVybiBmb3IgZWFjaAorICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2ggd2l0aGluIHRoZSB0ZXh0LgorICAgICAgICogQHBhcmFtIG0gICAgICAgICAgW0lOXSBQb2xpY3kgZmxhZ3MgZm9yIG1hdGNoIHJ1bGVzLgorICAgICAgICoKKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICogQGRvY3RvZG8KKyAgICAgICAqLworICAgICAgcmVnZXhfdG9rZW5faXRlcmF0b3IoX0JpX2l0ZXIgX19hLCBfQmlfaXRlciBfX2IsCisJCQkgICBjb25zdCByZWdleF90eXBlJiBfX3JlLAorCQkJICAgY29uc3Qgc3RkOjp2ZWN0b3I8aW50PiYgX19zdWJtYXRjaGVzLAorCQkJICAgcmVnZXhfY29uc3RhbnRzOjptYXRjaF9mbGFnX3R5cGUgX19tCisJCQkgICAgID0gcmVnZXhfY29uc3RhbnRzOjptYXRjaF9kZWZhdWx0KTsKKworICAgICAgLyoqCisgICAgICAgKiBDb25zdHJ1Y3RzIGEgJXJlZ2V4X3Rva2VuX2l0ZXJhdG9yLi4uCisgICAgICAgKiBAcGFyYW0gYSAgICAgICAgICBbSU5dIFRoZSBzdGFydCBvZiB0aGUgdGV4dCB0byBzZWFyY2guCisgICAgICAgKiBAcGFyYW0gYiAgICAgICAgICBbSU5dIE9uZS1wYXN0LXRoZS1lbmQgb2YgdGhlIHRleHQgdG8gc2VhcmNoLgorICAgICAgICogQHBhcmFtIHJlICAgICAgICAgW0lOXSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIHNlYXJjaCBmb3IuCisgICAgICAgKiBAcGFyYW0gc3VibWF0Y2hlcyBbSU5dIEEgbGlzdCBvZiBzdWJleHByZXNzaW9ucyB0byByZXR1cm4gZm9yIGVhY2gKKyAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcmVndWxhciBleHByZXNzaW9uIG1hdGNoIHdpdGhpbiB0aGUgdGV4dC4KKyAgICAgICAqIEBwYXJhbSBtICAgICAgICAgIFtJTl0gUG9saWN5IGZsYWdzIGZvciBtYXRjaCBydWxlcy4KKyAgICAgICAKKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICogQGRvY3RvZG8KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX05tPgorICAgICAgICByZWdleF90b2tlbl9pdGVyYXRvcihfQmlfaXRlciBfX2EsIF9CaV9pdGVyIF9fYiwKKwkJCSAgICAgY29uc3QgcmVnZXhfdHlwZSYgX19yZSwKKwkJCSAgICAgY29uc3QgaW50ICgmX19zdWJtYXRjaGVzKVtfTm1dLAorCQkJICAgICByZWdleF9jb25zdGFudHM6Om1hdGNoX2ZsYWdfdHlwZSBfX20KKwkJCSAgICAgPSByZWdleF9jb25zdGFudHM6Om1hdGNoX2RlZmF1bHQpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb3B5IGNvbnN0cnVjdHMgYSAlcmVnZXhfdG9rZW5faXRlcmF0b3IuCisgICAgICAgKiBAcGFyYW0gcmhzIFtJTl0gQSAlcmVnZXhfdG9rZW5faXRlcmF0b3IgdG8gY29weS4KKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICByZWdleF90b2tlbl9pdGVyYXRvcihjb25zdCByZWdleF90b2tlbl9pdGVyYXRvciYgX19yaHMpOworICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBBc3NpZ25zIGEgJXJlZ2V4X3Rva2VuX2l0ZXJhdG9yIHRvIGFub3RoZXIuCisgICAgICAgKiBAcGFyYW0gcmhzIFtJTl0gQSAlcmVnZXhfdG9rZW5faXRlcmF0b3IgdG8gY29weS4KKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICByZWdleF90b2tlbl9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yPShjb25zdCByZWdleF90b2tlbl9pdGVyYXRvciYgX19yaHMpOworICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb21wYXJlcyBhICVyZWdleF90b2tlbl9pdGVyYXRvciB0byBhbm90aGVyIGZvciBlcXVhbGl0eS4KKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IHJlZ2V4X3Rva2VuX2l0ZXJhdG9yJiBfX3Jocyk7CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbXBhcmVzIGEgJXJlZ2V4X3Rva2VuX2l0ZXJhdG9yIHRvIGFub3RoZXIgZm9yIGluZXF1YWxpdHkuCisgICAgICAgKiBAdG9kbyBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAqLworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCByZWdleF90b2tlbl9pdGVyYXRvciYgX19yaHMpOworICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBEZXJlZmVyZW5jZXMgYSAlcmVnZXhfdG9rZW5faXRlcmF0b3IuCisgICAgICAgKiBAdG9kbyBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAqLworICAgICAgY29uc3QgdmFsdWVfdHlwZSYKKyAgICAgIG9wZXJhdG9yKigpOworICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBTZWxlY3RzIGEgJXJlZ2V4X3Rva2VuX2l0ZXJhdG9yIG1lbWJlci4KKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICBjb25zdCB2YWx1ZV90eXBlKgorICAgICAgb3BlcmF0b3ItPigpOworICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBJbmNyZW1lbnRzIGEgJXJlZ2V4X3Rva2VuX2l0ZXJhdG9yLgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHJlZ2V4X3Rva2VuX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrKygpOworICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBQb3N0aW5jcmVtZW50cyBhICVyZWdleF90b2tlbl9pdGVyYXRvci4KKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICByZWdleF90b2tlbl9pdGVyYXRvcgorICAgICAgb3BlcmF0b3IrKyhpbnQpOworICAgICAgCisgICAgcHJpdmF0ZTogLy8gZGF0YSBtZW1iZXJzIGZvciBleHBvc2l0aW9uIG9ubHk6CisgICAgICB0eXBlZGVmIHJlZ2V4X2l0ZXJhdG9yPF9CaV9pdGVyLCBfQ2hfdHlwZSwgX1J4X3RyYWl0cz4gcG9zaXRpb25faXRlcmF0b3I7CisKKyAgICAgIHBvc2l0aW9uX2l0ZXJhdG9yIF9fcG9zaXRpb247CisgICAgICBjb25zdCB2YWx1ZV90eXBlKiBfX3Jlc3VsdDsKKyAgICAgIHZhbHVlX3R5cGUgICAgICAgIF9fc3VmZml4OworICAgICAgc3RkOjpzaXplX3QgICAgICAgX19uOworICAgICAgc3RkOjp2ZWN0b3I8aW50PiAgX19zdWJzOworICAgIH07CisKKyAgLyoqIEBicmllZiBUb2tlbiBpdGVyYXRvciBmb3IgQy1zdHlsZSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5ncy4gKi8KKyAgdHlwZWRlZiByZWdleF90b2tlbl9pdGVyYXRvcjxjb25zdCBjaGFyKj4gICAgICAgICAgICAgY3JlZ2V4X3Rva2VuX2l0ZXJhdG9yOworICAvKiogQGJyaWVmIFRva2VuIGl0ZXJhdG9yIGZvciBzdGFuZGFyZCBzdHJpbmdzLiAqLworICB0eXBlZGVmIHJlZ2V4X3Rva2VuX2l0ZXJhdG9yPHN0cmluZzo6Y29uc3RfaXRlcmF0b3I+ICBzcmVnZXhfdG9rZW5faXRlcmF0b3I7CisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgLyoqIEBicmllZiBUb2tlbiBpdGVyYXRvciBmb3IgQy1zdHlsZSBOVUxMLXRlcm1pbmF0ZWQgd2lkZSBzdHJpbmdzLiAqLworICB0eXBlZGVmIHJlZ2V4X3Rva2VuX2l0ZXJhdG9yPGNvbnN0IHdjaGFyX3QqPiAgICAgICAgICB3Y3JlZ2V4X3Rva2VuX2l0ZXJhdG9yOworICAvKiogQGJyaWVmIFRva2VuIGl0ZXJhdG9yIGZvciBzdGFuZGFyZCB3aWRlLWNoYXJhY3RlciBzdHJpbmdzLiAqLworICB0eXBlZGVmIHJlZ2V4X3Rva2VuX2l0ZXJhdG9yPHdzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yPiB3c3JlZ2V4X3Rva2VuX2l0ZXJhdG9yOworI2VuZGlmCisgIAorICAvL0B9IAorICAKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVFIxCit9CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3RyMV9pbXBsL3R5cGVfdHJhaXRzIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjFfaW1wbC90eXBlX3RyYWl0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2Y1ZThmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjFfaW1wbC90eXBlX3RyYWl0cwpAQCAtMCwwICsxLDUwMiBAQAorLy8gVFIxIHR5cGVfdHJhaXRzIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxX2ltcGwvdHlwZV90cmFpdHMKKyogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorKi8KKworbmFtZXNwYWNlIHN0ZAoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMQorCisgIC8qKgorICAgKiBAZGVmZ3JvdXAgbWV0YXByb2dyYW1taW5nIFR5cGUgVHJhaXRzCisgICAqIEBpbmdyb3VwIHV0aWxpdGllcworICAgKgorICAgKiBDb21waWxlIHRpbWUgdHlwZSB0cmFuc2Zvcm1hdGlvbiBhbmQgaW5mb3JtYXRpb24uCisgICAqIEB7CisgICAqLworCisgIC8vIEZvciB1c2UgaW4gX19pc19jb252ZXJ0aWJsZV9zaW1wbGUuCisgIHN0cnVjdCBfX3NmaW5hZV90eXBlcworICB7CisgICAgdHlwZWRlZiBjaGFyIF9fb25lOworICAgIHR5cGVkZWYgc3RydWN0IHsgY2hhciBfX2FyclsyXTsgfSBfX3R3bzsKKyAgfTsKKworI2RlZmluZSBfREVGSU5FX1NQRUNfMF9IRUxQRVIgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdGVtcGxhdGU8PgorCisjZGVmaW5lIF9ERUZJTkVfU1BFQ18xX0hFTFBFUiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisKKyNkZWZpbmUgX0RFRklORV9TUEVDXzJfSEVMUEVSICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NwPgorCisjZGVmaW5lIF9ERUZJTkVfU1BFQyhfT3JkZXIsIF9UcmFpdCwgX1R5cGUsIF9WYWx1ZSkgICAgXAorICBfREVGSU5FX1NQRUNfIyNfT3JkZXIjI19IRUxQRVIgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzdHJ1Y3QgX1RyYWl0PF9UeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX1ZhbHVlPiB7IH07CisKKyAgLy8gaGVscGVyIGNsYXNzZXMgWzQuM10uCisKKyAgLy8vIGludGVncmFsX2NvbnN0YW50CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX1RwIF9fdj4KKyAgICBzdHJ1Y3QgaW50ZWdyYWxfY29uc3RhbnQKKyAgICB7CisgICAgICBzdGF0aWMgY29uc3QgX1RwICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gX192OworICAgICAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBpbnRlZ3JhbF9jb25zdGFudDxfVHAsIF9fdj4gICB0eXBlOworICAgIH07CisgIAorICAvLy8gdHlwZWRlZiBmb3IgdHJ1ZV90eXBlCisgIHR5cGVkZWYgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgdHJ1ZT4gICAgIHRydWVfdHlwZTsKKworICAvLy8gdHlwZWRlZiBmb3IgZmFsc2VfdHlwZQorICB0eXBlZGVmIGludGVncmFsX2NvbnN0YW50PGJvb2wsIGZhbHNlPiAgICBmYWxzZV90eXBlOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX1RwIF9fdj4KKyAgICBjb25zdCBfVHAgaW50ZWdyYWxfY29uc3RhbnQ8X1RwLCBfX3Y+Ojp2YWx1ZTsKKworICAvLy8gcmVtb3ZlX2N2CisgIHRlbXBsYXRlPHR5cGVuYW1lPgorICAgIHN0cnVjdCByZW1vdmVfY3Y7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgc3RydWN0IF9faXNfdm9pZF9oZWxwZXIKKyAgICA6IHB1YmxpYyBmYWxzZV90eXBlIHsgfTsKKyAgX0RFRklORV9TUEVDKDAsIF9faXNfdm9pZF9oZWxwZXIsIHZvaWQsIHRydWUpCisKKyAgLy8gcHJpbWFyeSB0eXBlIGNhdGVnb3JpZXMgWzQuNS4xXS4KKworICAvLy8gaXNfdm9pZAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX3ZvaWQKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCAoX19pc192b2lkX2hlbHBlcjx0eXBlbmFtZQorCQkJCSAgICAgIHJlbW92ZV9jdjxfVHA+Ojp0eXBlPjo6dmFsdWUpPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgX19pc19pbnRlZ3JhbF9oZWxwZXIKKyAgICA6IHB1YmxpYyBmYWxzZV90eXBlIHsgfTsKKyAgX0RFRklORV9TUEVDKDAsIF9faXNfaW50ZWdyYWxfaGVscGVyLCBib29sLCB0cnVlKQorICBfREVGSU5FX1NQRUMoMCwgX19pc19pbnRlZ3JhbF9oZWxwZXIsIGNoYXIsIHRydWUpCisgIF9ERUZJTkVfU1BFQygwLCBfX2lzX2ludGVncmFsX2hlbHBlciwgc2lnbmVkIGNoYXIsIHRydWUpCisgIF9ERUZJTkVfU1BFQygwLCBfX2lzX2ludGVncmFsX2hlbHBlciwgdW5zaWduZWQgY2hhciwgdHJ1ZSkKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICBfREVGSU5FX1NQRUMoMCwgX19pc19pbnRlZ3JhbF9oZWxwZXIsIHdjaGFyX3QsIHRydWUpCisjZW5kaWYKKyNpZmRlZiBfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYCisgIF9ERUZJTkVfU1BFQygwLCBfX2lzX2ludGVncmFsX2hlbHBlciwgY2hhcjE2X3QsIHRydWUpCisgIF9ERUZJTkVfU1BFQygwLCBfX2lzX2ludGVncmFsX2hlbHBlciwgY2hhcjMyX3QsIHRydWUpCisjZW5kaWYKKyAgX0RFRklORV9TUEVDKDAsIF9faXNfaW50ZWdyYWxfaGVscGVyLCBzaG9ydCwgdHJ1ZSkKKyAgX0RFRklORV9TUEVDKDAsIF9faXNfaW50ZWdyYWxfaGVscGVyLCB1bnNpZ25lZCBzaG9ydCwgdHJ1ZSkKKyAgX0RFRklORV9TUEVDKDAsIF9faXNfaW50ZWdyYWxfaGVscGVyLCBpbnQsIHRydWUpCisgIF9ERUZJTkVfU1BFQygwLCBfX2lzX2ludGVncmFsX2hlbHBlciwgdW5zaWduZWQgaW50LCB0cnVlKQorICBfREVGSU5FX1NQRUMoMCwgX19pc19pbnRlZ3JhbF9oZWxwZXIsIGxvbmcsIHRydWUpCisgIF9ERUZJTkVfU1BFQygwLCBfX2lzX2ludGVncmFsX2hlbHBlciwgdW5zaWduZWQgbG9uZywgdHJ1ZSkKKyAgX0RFRklORV9TUEVDKDAsIF9faXNfaW50ZWdyYWxfaGVscGVyLCBsb25nIGxvbmcsIHRydWUpCisgIF9ERUZJTkVfU1BFQygwLCBfX2lzX2ludGVncmFsX2hlbHBlciwgdW5zaWduZWQgbG9uZyBsb25nLCB0cnVlKQorCisgIC8vLyBpc19pbnRlZ3JhbAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX2ludGVncmFsCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgKF9faXNfaW50ZWdyYWxfaGVscGVyPHR5cGVuYW1lCisJCQkJICAgICAgcmVtb3ZlX2N2PF9UcD46OnR5cGU+Ojp2YWx1ZSk+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lPgorICAgIHN0cnVjdCBfX2lzX2Zsb2F0aW5nX3BvaW50X2hlbHBlcgorICAgIDogcHVibGljIGZhbHNlX3R5cGUgeyB9OworICBfREVGSU5FX1NQRUMoMCwgX19pc19mbG9hdGluZ19wb2ludF9oZWxwZXIsIGZsb2F0LCB0cnVlKQorICBfREVGSU5FX1NQRUMoMCwgX19pc19mbG9hdGluZ19wb2ludF9oZWxwZXIsIGRvdWJsZSwgdHJ1ZSkKKyAgX0RFRklORV9TUEVDKDAsIF9faXNfZmxvYXRpbmdfcG9pbnRfaGVscGVyLCBsb25nIGRvdWJsZSwgdHJ1ZSkKKworICAvLy8gaXNfZmxvYXRpbmdfcG9pbnQKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19mbG9hdGluZ19wb2ludAorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIChfX2lzX2Zsb2F0aW5nX3BvaW50X2hlbHBlcjx0eXBlbmFtZQorCQkJCSAgICAgIHJlbW92ZV9jdjxfVHA+Ojp0eXBlPjo6dmFsdWUpPgorICAgIHsgfTsKKworICAvLy8gaXNfYXJyYXkKKyAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgc3RydWN0IGlzX2FycmF5CisgICAgOiBwdWJsaWMgZmFsc2VfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfU2l6ZT4KKyAgICBzdHJ1Y3QgaXNfYXJyYXk8X1RwW19TaXplXT4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfYXJyYXk8X1RwW10+CisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgX19pc19wb2ludGVyX2hlbHBlcgorICAgIDogcHVibGljIGZhbHNlX3R5cGUgeyB9OworICBfREVGSU5FX1NQRUMoMSwgX19pc19wb2ludGVyX2hlbHBlciwgX1RwKiwgdHJ1ZSkKKworICAvLy8gaXNfcG9pbnRlcgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX3BvaW50ZXIKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCAoX19pc19wb2ludGVyX2hlbHBlcjx0eXBlbmFtZQorCQkJCSAgICAgIHJlbW92ZV9jdjxfVHA+Ojp0eXBlPjo6dmFsdWUpPgorICAgIHsgfTsKKworICAvLy8gaXNfcmVmZXJlbmNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfcmVmZXJlbmNlOworCisgIC8vLyBpc19mdW5jdGlvbgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX2Z1bmN0aW9uOworCisgIHRlbXBsYXRlPHR5cGVuYW1lPgorICAgIHN0cnVjdCBfX2lzX21lbWJlcl9vYmplY3RfcG9pbnRlcl9oZWxwZXIKKyAgICA6IHB1YmxpYyBmYWxzZV90eXBlIHsgfTsKKyAgX0RFRklORV9TUEVDKDIsIF9faXNfbWVtYmVyX29iamVjdF9wb2ludGVyX2hlbHBlciwgX1RwIF9DcDo6KiwKKwkgICAgICAgIWlzX2Z1bmN0aW9uPF9UcD46OnZhbHVlKQorCisgIC8vLyBpc19tZW1iZXJfb2JqZWN0X3BvaW50ZXIKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19tZW1iZXJfb2JqZWN0X3BvaW50ZXIKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCAoX19pc19tZW1iZXJfb2JqZWN0X3BvaW50ZXJfaGVscGVyPAorCQkJCSAgICAgIHR5cGVuYW1lIHJlbW92ZV9jdjxfVHA+Ojp0eXBlPjo6dmFsdWUpPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgX19pc19tZW1iZXJfZnVuY3Rpb25fcG9pbnRlcl9oZWxwZXIKKyAgICA6IHB1YmxpYyBmYWxzZV90eXBlIHsgfTsKKyAgX0RFRklORV9TUEVDKDIsIF9faXNfbWVtYmVyX2Z1bmN0aW9uX3BvaW50ZXJfaGVscGVyLCBfVHAgX0NwOjoqLAorCSAgICAgICBpc19mdW5jdGlvbjxfVHA+Ojp2YWx1ZSkKKworICAvLy8gaXNfbWVtYmVyX2Z1bmN0aW9uX3BvaW50ZXIKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19tZW1iZXJfZnVuY3Rpb25fcG9pbnRlcgorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIChfX2lzX21lbWJlcl9mdW5jdGlvbl9wb2ludGVyX2hlbHBlcjwKKwkJCQkgICAgICB0eXBlbmFtZSByZW1vdmVfY3Y8X1RwPjo6dHlwZT46OnZhbHVlKT4KKyAgICB7IH07CisKKyAgLy8vIGlzX2VudW0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19lbnVtCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX19pc19lbnVtKF9UcCk+CisgICAgeyB9OworCisgIC8vLyBpc191bmlvbgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX3VuaW9uCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX19pc191bmlvbihfVHApPgorICAgIHsgfTsKKworICAvLy8gaXNfY2xhc3MKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19jbGFzcworICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIF9faXNfY2xhc3MoX1RwKT4KKyAgICB7IH07CisKKyAgLy8vIGlzX2Z1bmN0aW9uCisgIHRlbXBsYXRlPHR5cGVuYW1lPgorICAgIHN0cnVjdCBpc19mdW5jdGlvbgorICAgIDogcHVibGljIGZhbHNlX3R5cGUgeyB9OworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgc3RydWN0IGlzX2Z1bmN0aW9uPF9SZXMoX0FyZ1R5cGVzLi4uKT4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgc3RydWN0IGlzX2Z1bmN0aW9uPF9SZXMoX0FyZ1R5cGVzLi4uLi4uKT4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgc3RydWN0IGlzX2Z1bmN0aW9uPF9SZXMoX0FyZ1R5cGVzLi4uKSBjb25zdD4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgc3RydWN0IGlzX2Z1bmN0aW9uPF9SZXMoX0FyZ1R5cGVzLi4uLi4uKSBjb25zdD4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgc3RydWN0IGlzX2Z1bmN0aW9uPF9SZXMoX0FyZ1R5cGVzLi4uKSB2b2xhdGlsZT4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgc3RydWN0IGlzX2Z1bmN0aW9uPF9SZXMoX0FyZ1R5cGVzLi4uLi4uKSB2b2xhdGlsZT4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgc3RydWN0IGlzX2Z1bmN0aW9uPF9SZXMoX0FyZ1R5cGVzLi4uKSBjb25zdCB2b2xhdGlsZT4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgc3RydWN0IGlzX2Z1bmN0aW9uPF9SZXMoX0FyZ1R5cGVzLi4uLi4uKSBjb25zdCB2b2xhdGlsZT4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworCisgIC8vIGNvbXBvc2l0ZSB0eXBlIHRyYWl0cyBbNC41LjJdLgorICAKKyAgLy8vIGlzX2FyaXRobWV0aWMKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19hcml0aG1ldGljCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgKGlzX2ludGVncmFsPF9UcD46OnZhbHVlCisJCQkJICAgICAgfHwgaXNfZmxvYXRpbmdfcG9pbnQ8X1RwPjo6dmFsdWUpPgorICAgIHsgfTsKKworICAvLy8gaXNfZnVuZGFtZW50YWwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19mdW5kYW1lbnRhbAorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIChpc19hcml0aG1ldGljPF9UcD46OnZhbHVlCisJCQkJICAgICAgfHwgaXNfdm9pZDxfVHA+Ojp2YWx1ZSk+CisgICAgeyB9OworCisgIC8vLyBpc19vYmplY3QKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19vYmplY3QKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCAhKGlzX2Z1bmN0aW9uPF9UcD46OnZhbHVlCisJCQkJICAgICAgIHx8IGlzX3JlZmVyZW5jZTxfVHA+Ojp2YWx1ZQorCQkJCSAgICAgICB8fCBpc192b2lkPF9UcD46OnZhbHVlKT4KKyAgICB7IH07CisKKyAgLy8vIGlzX21lbWJlcl9wb2ludGVyCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfbWVtYmVyX3BvaW50ZXI7CisKKyAgLy8vIGlzX3NjYWxhcgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX3NjYWxhcgorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIChpc19hcml0aG1ldGljPF9UcD46OnZhbHVlCisJCQkJICAgICAgfHwgaXNfZW51bTxfVHA+Ojp2YWx1ZQorCQkJCSAgICAgIHx8IGlzX3BvaW50ZXI8X1RwPjo6dmFsdWUKKwkJCQkgICAgICB8fCBpc19tZW1iZXJfcG9pbnRlcjxfVHA+Ojp2YWx1ZSk+CisgICAgeyB9OworCisgIC8vLyBpc19jb21wb3VuZAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX2NvbXBvdW5kCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgIWlzX2Z1bmRhbWVudGFsPF9UcD46OnZhbHVlPiB7IH07CisKKyAgLy8vIGlzX21lbWJlcl9wb2ludGVyCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19tZW1iZXJfcG9pbnRlcl9oZWxwZXIKKyAgICA6IHB1YmxpYyBmYWxzZV90eXBlIHsgfTsKKyAgX0RFRklORV9TUEVDKDIsIF9faXNfbWVtYmVyX3BvaW50ZXJfaGVscGVyLCBfVHAgX0NwOjoqLCB0cnVlKQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgc3RydWN0IGlzX21lbWJlcl9wb2ludGVyCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgKF9faXNfbWVtYmVyX3BvaW50ZXJfaGVscGVyPAorCQkJCSAgICAgIHR5cGVuYW1lIHJlbW92ZV9jdjxfVHA+Ojp0eXBlPjo6dmFsdWUpPgorICAgIHsgfTsKKworICAvLyB0eXBlIHByb3BlcnRpZXMgWzQuNS4zXS4KKyAgLy8vIGlzX2NvbnN0CisgIHRlbXBsYXRlPHR5cGVuYW1lPgorICAgIHN0cnVjdCBpc19jb25zdAorICAgIDogcHVibGljIGZhbHNlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfY29uc3Q8X1RwIGNvbnN0PgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisgIAorICAvLy8gaXNfdm9sYXRpbGUKKyAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgc3RydWN0IGlzX3ZvbGF0aWxlCisgICAgOiBwdWJsaWMgZmFsc2VfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc192b2xhdGlsZTxfVHAgdm9sYXRpbGU+CisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKworICAvLy8gaXNfZW1wdHkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19lbXB0eQorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIF9faXNfZW1wdHkoX1RwKT4KKyAgICB7IH07CisKKyAgLy8vIGlzX3BvbHltb3JwaGljCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfcG9seW1vcnBoaWMKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBfX2lzX3BvbHltb3JwaGljKF9UcCk+CisgICAgeyB9OworCisgIC8vLyBpc19hYnN0cmFjdAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX2Fic3RyYWN0CisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX19pc19hYnN0cmFjdChfVHApPgorICAgIHsgfTsKKworICAvLy8gaGFzX3ZpcnR1YWxfZGVzdHJ1Y3RvcgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGhhc192aXJ0dWFsX2Rlc3RydWN0b3IKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBfX2hhc192aXJ0dWFsX2Rlc3RydWN0b3IoX1RwKT4KKyAgICB7IH07CisKKyAgLy8vIGFsaWdubWVudF9vZgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGFsaWdubWVudF9vZgorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PHN0ZDo6c2l6ZV90LCBfX2FsaWdub2ZfXyhfVHApPiB7IH07CisgIAorICAvLy8gcmFuaworICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgcmFuaworICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PHN0ZDo6c2l6ZV90LCAwPiB7IH07CisgICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfU2l6ZT4KKyAgICBzdHJ1Y3QgcmFuazxfVHBbX1NpemVdPgorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PHN0ZDo6c2l6ZV90LCAxICsgcmFuazxfVHA+Ojp2YWx1ZT4geyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgcmFuazxfVHBbXT4KKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwgMSArIHJhbms8X1RwPjo6dmFsdWU+IHsgfTsKKworICAvLy8gZXh0ZW50CisgIHRlbXBsYXRlPHR5cGVuYW1lLCB1bnNpZ25lZCBfVWludCA9IDA+CisgICAgc3RydWN0IGV4dGVudAorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PHN0ZDo6c2l6ZV90LCAwPiB7IH07CisgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHVuc2lnbmVkIF9VaW50LCBzdGQ6OnNpemVfdCBfU2l6ZT4KKyAgICBzdHJ1Y3QgZXh0ZW50PF9UcFtfU2l6ZV0sIF9VaW50PgorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PHN0ZDo6c2l6ZV90LAorCQkJICAgICAgIF9VaW50ID09IDAgPyBfU2l6ZSA6IGV4dGVudDxfVHAsCisJCQkJCQkJICAgX1VpbnQgLSAxPjo6dmFsdWU+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdW5zaWduZWQgX1VpbnQ+CisgICAgc3RydWN0IGV4dGVudDxfVHBbXSwgX1VpbnQ+CisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8c3RkOjpzaXplX3QsCisJCQkgICAgICAgX1VpbnQgPT0gMCA/IDAgOiBleHRlbnQ8X1RwLAorCQkJCQkJICAgICAgIF9VaW50IC0gMT46OnZhbHVlPgorICAgIHsgfTsKKworICAvLyByZWxhdGlvbnNoaXBzIGJldHdlZW4gdHlwZXMgWzQuNl0uCisKKyAgLy8vIGlzX3NhbWUKKyAgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lPgorICAgIHN0cnVjdCBpc19zYW1lCisgICAgOiBwdWJsaWMgZmFsc2VfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19zYW1lPF9UcCwgX1RwPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKyAgLy8gY29uc3Qtdm9sYXRpbGUgbW9kaWZpY2F0aW9ucyBbNC43LjFdLgorCisgIC8vLyByZW1vdmVfY29uc3QKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCByZW1vdmVfY29uc3QKKyAgICB7IHR5cGVkZWYgX1RwICAgICB0eXBlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgcmVtb3ZlX2NvbnN0PF9UcCBjb25zdD4KKyAgICB7IHR5cGVkZWYgX1RwICAgICB0eXBlOyB9OworICAKKyAgLy8vIHJlbW92ZV92b2xhdGlsZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IHJlbW92ZV92b2xhdGlsZQorICAgIHsgdHlwZWRlZiBfVHAgICAgIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCByZW1vdmVfdm9sYXRpbGU8X1RwIHZvbGF0aWxlPgorICAgIHsgdHlwZWRlZiBfVHAgICAgIHR5cGU7IH07CisgIAorICAvLy8gcmVtb3ZlX2N2CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgcmVtb3ZlX2N2CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZQorICAgICAgcmVtb3ZlX2NvbnN0PHR5cGVuYW1lIHJlbW92ZV92b2xhdGlsZTxfVHA+Ojp0eXBlPjo6dHlwZSAgICAgdHlwZTsKKyAgICB9OworICAKKyAgLy8vIGFkZF9jb25zdAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGFkZF9jb25zdAorICAgIHsgdHlwZWRlZiBfVHAgY29uc3QgICAgIHR5cGU7IH07CisgICAKKyAgLy8vIGFkZF92b2xhdGlsZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGFkZF92b2xhdGlsZQorICAgIHsgdHlwZWRlZiBfVHAgdm9sYXRpbGUgICAgIHR5cGU7IH07CisgIAorICAvLy8gYWRkX2N2CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgYWRkX2N2CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZQorICAgICAgYWRkX2NvbnN0PHR5cGVuYW1lIGFkZF92b2xhdGlsZTxfVHA+Ojp0eXBlPjo6dHlwZSAgICAgdHlwZTsKKyAgICB9OworCisgIC8vIGFycmF5IG1vZGlmaWNhdGlvbnMgWzQuNy4zXS4KKworICAvLy8gcmVtb3ZlX2V4dGVudAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IHJlbW92ZV9leHRlbnQKKyAgICB7IHR5cGVkZWYgX1RwICAgICB0eXBlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgc3RkOjpzaXplX3QgX1NpemU+CisgICAgc3RydWN0IHJlbW92ZV9leHRlbnQ8X1RwW19TaXplXT4KKyAgICB7IHR5cGVkZWYgX1RwICAgICB0eXBlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgcmVtb3ZlX2V4dGVudDxfVHBbXT4KKyAgICB7IHR5cGVkZWYgX1RwICAgICB0eXBlOyB9OworCisgIC8vLyByZW1vdmVfYWxsX2V4dGVudHMKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCByZW1vdmVfYWxsX2V4dGVudHMKKyAgICB7IHR5cGVkZWYgX1RwICAgICB0eXBlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgc3RkOjpzaXplX3QgX1NpemU+CisgICAgc3RydWN0IHJlbW92ZV9hbGxfZXh0ZW50czxfVHBbX1NpemVdPgorICAgIHsgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVfYWxsX2V4dGVudHM8X1RwPjo6dHlwZSAgICAgdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IHJlbW92ZV9hbGxfZXh0ZW50czxfVHBbXT4KKyAgICB7IHR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX2FsbF9leHRlbnRzPF9UcD46OnR5cGUgICAgIHR5cGU7IH07CisKKyAgLy8gcG9pbnRlciBtb2RpZmljYXRpb25zIFs0LjcuNF0uCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgX19yZW1vdmVfcG9pbnRlcl9oZWxwZXIKKyAgICB7IHR5cGVkZWYgX1RwICAgICB0eXBlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIHN0cnVjdCBfX3JlbW92ZV9wb2ludGVyX2hlbHBlcjxfVHAsIF9VcCo+CisgICAgeyB0eXBlZGVmIF9VcCAgICAgdHlwZTsgfTsKKworICAvLy8gcmVtb3ZlX3BvaW50ZXIKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCByZW1vdmVfcG9pbnRlcgorICAgIDogcHVibGljIF9fcmVtb3ZlX3BvaW50ZXJfaGVscGVyPF9UcCwgdHlwZW5hbWUgcmVtb3ZlX2N2PF9UcD46OnR5cGU+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lPgorICAgIHN0cnVjdCByZW1vdmVfcmVmZXJlbmNlOworCisgIC8vLyBhZGRfcG9pbnRlcgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGFkZF9wb2ludGVyCisgICAgeyB0eXBlZGVmIHR5cGVuYW1lIHJlbW92ZV9yZWZlcmVuY2U8X1RwPjo6dHlwZSogICAgIHR5cGU7IH07CisKKyN1bmRlZiBfREVGSU5FX1NQRUNfMF9IRUxQRVIKKyN1bmRlZiBfREVGSU5FX1NQRUNfMV9IRUxQRVIKKyN1bmRlZiBfREVGSU5FX1NQRUNfMl9IRUxQRVIKKyN1bmRlZiBfREVGSU5FX1NQRUMKKworICAvLyBAfSBncm91cCBtZXRhcHJvZ3JhbW1pbmcKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9UUjEKK30KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxX2ltcGwvdXRpbGl0eSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHIxX2ltcGwvdXRpbGl0eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzFjNGRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90cjFfaW1wbC91dGlsaXR5CkBAIC0wLDAgKzEsMTIwIEBACisvLyBUUjEgdXRpbGl0eSAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMV9pbXBsL3V0aWxpdHkKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgWW91IHNob3VsZCBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKi8KKworbmFtZXNwYWNlIHN0ZAoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMQorCisgIHRlbXBsYXRlPGNsYXNzIF9UcD4KKyAgICBjbGFzcyB0dXBsZV9zaXplOworCisjaWZkZWYgX0dMSUJDWFhfSU5DTFVERV9BU19DWFgwWAorICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfSW50LCBjbGFzcyBfVHA+CisjZWxzZQorICB0ZW1wbGF0ZTxpbnQgX0ludCwgY2xhc3MgX1RwPgorI2VuZGlmCisgICAgY2xhc3MgdHVwbGVfZWxlbWVudDsKKworICAgLy8gVmFyaW91cyBmdW5jdGlvbnMgd2hpY2ggZ2l2ZSBzdGQ6OnBhaXIgYSB0dXBsZS1saWtlIGludGVyZmFjZS4KKyAgdGVtcGxhdGU8Y2xhc3MgX1RwMSwgY2xhc3MgX1RwMj4KKyAgICBzdHJ1Y3QgdHVwbGVfc2l6ZTxzdGQ6OnBhaXI8X1RwMSwgX1RwMj4gPgorI2lmZGVmIF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgKKyAgICB7IHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCB2YWx1ZSA9IDI7IH07CisjZWxzZQorICAgIHsgc3RhdGljIGNvbnN0IGludCB2YWx1ZSA9IDI7IH07CisjZW5kaWYKKworICB0ZW1wbGF0ZTxjbGFzcyBfVHAxLCBjbGFzcyBfVHAyPgorI2lmZGVmIF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgKKyAgICBjb25zdCBzdGQ6OnNpemVfdAorI2Vsc2UKKyAgICBjb25zdCBpbnQKKyNlbmRpZgorICAgIHR1cGxlX3NpemU8c3RkOjpwYWlyPF9UcDEsIF9UcDI+ID46OnZhbHVlOworCisgIHRlbXBsYXRlPGNsYXNzIF9UcDEsIGNsYXNzIF9UcDI+CisgICAgc3RydWN0IHR1cGxlX2VsZW1lbnQ8MCwgc3RkOjpwYWlyPF9UcDEsIF9UcDI+ID4KKyAgICB7IHR5cGVkZWYgX1RwMSB0eXBlOyB9OworIAorICB0ZW1wbGF0ZTxjbGFzcyBfVHAxLCBjbGFzcyBfVHAyPgorICAgIHN0cnVjdCB0dXBsZV9lbGVtZW50PDEsIHN0ZDo6cGFpcjxfVHAxLCBfVHAyPiA+CisgICAgeyB0eXBlZGVmIF9UcDIgdHlwZTsgfTsKKworI2lmZGVmIF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgKKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX0ludD4KKyNlbHNlCisgIHRlbXBsYXRlPGludCBfSW50PgorI2VuZGlmCisgICAgc3RydWN0IF9fcGFpcl9nZXQ7CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX3BhaXJfZ2V0PDA+CisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1RwMj4KKyAgICAgIHN0YXRpYyBfVHAxJiBfX2dldChzdGQ6OnBhaXI8X1RwMSwgX1RwMj4mIF9fcGFpcikKKyAgICAgIHsgcmV0dXJuIF9fcGFpci5maXJzdDsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyPgorICAgICAgc3RhdGljIGNvbnN0IF9UcDEmIF9fY29uc3RfZ2V0KGNvbnN0IHN0ZDo6cGFpcjxfVHAxLCBfVHAyPiYgX19wYWlyKQorICAgICAgeyByZXR1cm4gX19wYWlyLmZpcnN0OyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fcGFpcl9nZXQ8MT4KKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyPgorICAgICAgc3RhdGljIF9UcDImIF9fZ2V0KHN0ZDo6cGFpcjxfVHAxLCBfVHAyPiYgX19wYWlyKQorICAgICAgeyByZXR1cm4gX19wYWlyLnNlY29uZDsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyPgorICAgICAgc3RhdGljIGNvbnN0IF9UcDImIF9fY29uc3RfZ2V0KGNvbnN0IHN0ZDo6cGFpcjxfVHAxLCBfVHAyPiYgX19wYWlyKQorICAgICAgeyByZXR1cm4gX19wYWlyLnNlY29uZDsgfQorICAgIH07CisKKyNpZmRlZiBfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IF9JbnQsIGNsYXNzIF9UcDEsIGNsYXNzIF9UcDI+CisjZWxzZQorICB0ZW1wbGF0ZTxpbnQgX0ludCwgY2xhc3MgX1RwMSwgY2xhc3MgX1RwMj4KKyNlbmRpZgorICAgIGlubGluZSB0eXBlbmFtZSB0dXBsZV9lbGVtZW50PF9JbnQsIHN0ZDo6cGFpcjxfVHAxLCBfVHAyPiA+Ojp0eXBlJgorICAgIGdldChzdGQ6OnBhaXI8X1RwMSwgX1RwMj4mIF9faW4pCisgICAgeyByZXR1cm4gX19wYWlyX2dldDxfSW50Pjo6X19nZXQoX19pbik7IH0KKworI2lmZGVmIF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgKKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX0ludCwgY2xhc3MgX1RwMSwgY2xhc3MgX1RwMj4KKyNlbHNlCisgIHRlbXBsYXRlPGludCBfSW50LCBjbGFzcyBfVHAxLCBjbGFzcyBfVHAyPgorI2VuZGlmCisgICAgaW5saW5lIGNvbnN0IHR5cGVuYW1lIHR1cGxlX2VsZW1lbnQ8X0ludCwgc3RkOjpwYWlyPF9UcDEsIF9UcDI+ID46OnR5cGUmCisgICAgZ2V0KGNvbnN0IHN0ZDo6cGFpcjxfVHAxLCBfVHAyPiYgX19pbikKKyAgICB7IHJldHVybiBfX3BhaXJfZ2V0PF9JbnQ+OjpfX2NvbnN0X2dldChfX2luKTsgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorfQorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3R1cGxlIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90dXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTA1NGQxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90dXBsZQpAQCAtMCwwICsxLDY4NiBAQAorLy8gPHR1cGxlPiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvdHVwbGUKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFVQTEUKKyNkZWZpbmUgX0dMSUJDWFhfVFVQTEUgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpZm5kZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyMgaW5jbHVkZSA8Yml0cy9jKysweF93YXJuaW5nLmg+CisjZWxzZQorCisjaW5jbHVkZSA8dXRpbGl0eT4KKworbmFtZXNwYWNlIHN0ZAoreworICAvLyBBZGRzIGEgY29uc3QgcmVmZXJlbmNlIHRvIGEgbm9uLXJlZmVyZW5jZSB0eXBlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fYWRkX2NfcmVmCisgICAgeyB0eXBlZGVmIGNvbnN0IF9UcCYgdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fYWRkX2NfcmVmPF9UcCY+CisgICAgeyB0eXBlZGVmIF9UcCYgdHlwZTsgfTsKKworICAvLyBBZGRzIGEgcmVmZXJlbmNlIHRvIGEgbm9uLXJlZmVyZW5jZSB0eXBlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fYWRkX3JlZgorICAgIHsgdHlwZWRlZiBfVHAmIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2FkZF9yZWY8X1RwJj4KKyAgICB7IHR5cGVkZWYgX1RwJiB0eXBlOyB9OworCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IF9JZHgsIHR5cGVuYW1lIF9IZWFkLCBib29sIF9Jc0VtcHR5PgorICAgIHN0cnVjdCBfSGVhZF9iYXNlOworCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IF9JZHgsIHR5cGVuYW1lIF9IZWFkPgorICAgIHN0cnVjdCBfSGVhZF9iYXNlPF9JZHgsIF9IZWFkLCB0cnVlPgorICAgIDogcHVibGljIF9IZWFkCisgICAgeworICAgICAgX0hlYWRfYmFzZSgpCisgICAgICA6IF9IZWFkKCkgeyB9CisKKyAgICAgIF9IZWFkX2Jhc2UoY29uc3QgX0hlYWQmIF9faCkKKyAgICAgIDogX0hlYWQoX19oKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VIZWFkPgorICAgICAgICBfSGVhZF9iYXNlKF9VSGVhZCYmIF9faCkKKwk6IF9IZWFkKHN0ZDo6Zm9yd2FyZDxfVUhlYWQ+KF9faCkpIHsgfQorCisgICAgICBfSGVhZCYgICAgICAgX01faGVhZCgpICAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisgICAgICBjb25zdCBfSGVhZCYgX01faGVhZCgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgCisgICAgICB2b2lkIF9NX3N3YXBfaW1wbChfSGVhZCYpIHsgLyogbm8tb3AgKi8gfQorICAgIH07CisKKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX0lkeCwgdHlwZW5hbWUgX0hlYWQ+CisgICAgc3RydWN0IF9IZWFkX2Jhc2U8X0lkeCwgX0hlYWQsIGZhbHNlPgorICAgIHsKKyAgICAgIF9IZWFkX2Jhc2UoKQorICAgICAgOiBfTV9oZWFkX2ltcGwoKSB7IH0KKworICAgICAgX0hlYWRfYmFzZShjb25zdCBfSGVhZCYgX19oKQorICAgICAgOiBfTV9oZWFkX2ltcGwoX19oKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VIZWFkPgorICAgICAgICBfSGVhZF9iYXNlKF9VSGVhZCYmIF9faCkKKwk6IF9NX2hlYWRfaW1wbChzdGQ6OmZvcndhcmQ8X1VIZWFkPihfX2gpKSB7IH0KKworICAgICAgX0hlYWQmICAgICAgIF9NX2hlYWQoKSAgICAgICB7IHJldHVybiBfTV9oZWFkX2ltcGw7IH0KKyAgICAgIGNvbnN0IF9IZWFkJiBfTV9oZWFkKCkgY29uc3QgeyByZXR1cm4gX01faGVhZF9pbXBsOyB9ICAgICAgICAKKworICAgICAgdm9pZAorICAgICAgX01fc3dhcF9pbXBsKF9IZWFkJiBfX2gpCisgICAgICB7IAorCXVzaW5nIHN0ZDo6c3dhcDsKKwlzd2FwKF9faCwgX01faGVhZF9pbXBsKTsKKyAgICAgIH0KKworICAgICAgX0hlYWQgX01faGVhZF9pbXBsOyAKKyAgICB9OworCisgIC8qKgorICAgKiBDb250YWlucyB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBAYyB0dXBsZSB0ZW1wbGF0ZSwgc3RvcmVkCisgICAqIGFzIGEgcmVjdXJzaXZlIGluaGVyaXRhbmNlIGhpZXJhcmNoeSBmcm9tIHRoZSBmaXJzdCBlbGVtZW50IChtb3N0CisgICAqIGRlcml2ZWQgY2xhc3MpIHRvIHRoZSBsYXN0IChsZWFzdCBkZXJpdmVkIGNsYXNzKS4gVGhlIEBjIElkeAorICAgKiBwYXJhbWV0ZXIgZ2l2ZXMgdGhlIDAtYmFzZWQgaW5kZXggb2YgdGhlIGVsZW1lbnQgc3RvcmVkIGF0IHRoaXMKKyAgICogcG9pbnQgaW4gdGhlIGhpZXJhcmNoeTsgd2UgdXNlIGl0IHRvIGltcGxlbWVudCBhIGNvbnN0YW50LXRpbWUKKyAgICogZ2V0KCkgb3BlcmF0aW9uLgorICAgKi8KKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX0lkeCwgdHlwZW5hbWUuLi4gX0VsZW1lbnRzPgorICAgIHN0cnVjdCBfVHVwbGVfaW1wbDsgCisKKyAgLyoqCisgICAqIFplcm8tZWxlbWVudCB0dXBsZSBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyB0aGUgYmFzaXMgY2FzZSBmb3IgdGhlIAorICAgKiBpbmhlcml0YW5jZSByZWN1cnNpb24uCisgICAqLworICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfSWR4PgorICAgIHN0cnVjdCBfVHVwbGVfaW1wbDxfSWR4PgorICAgIHsgCisgICAgcHJvdGVjdGVkOgorICAgICAgdm9pZCBfTV9zd2FwX2ltcGwoX1R1cGxlX2ltcGwmKSB7IC8qIG5vLW9wICovIH0KKyAgICB9OworCisgIC8qKgorICAgKiBSZWN1cnNpdmUgdHVwbGUgaW1wbGVtZW50YXRpb24uIEhlcmUgd2Ugc3RvcmUgdGhlIEBjIEhlYWQgZWxlbWVudAorICAgKiBhbmQgZGVyaXZlIGZyb20gYSBAYyBUdXBsZV9pbXBsIGNvbnRhaW5pbmcgdGhlIHJlbWFpbmluZyBlbGVtZW50cworICAgKiAod2hpY2ggY29udGFpbnMgdGhlIEBjIFRhaWwpLgorICAgKi8KKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX0lkeCwgdHlwZW5hbWUgX0hlYWQsIHR5cGVuYW1lLi4uIF9UYWlsPgorICAgIHN0cnVjdCBfVHVwbGVfaW1wbDxfSWR4LCBfSGVhZCwgX1RhaWwuLi4+CisgICAgOiBwdWJsaWMgX1R1cGxlX2ltcGw8X0lkeCArIDEsIF9UYWlsLi4uPiwKKyAgICAgIHByaXZhdGUgX0hlYWRfYmFzZTxfSWR4LCBfSGVhZCwgc3RkOjppc19lbXB0eTxfSGVhZD46OnZhbHVlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1R1cGxlX2ltcGw8X0lkeCArIDEsIF9UYWlsLi4uPiBfSW5oZXJpdGVkOworICAgICAgdHlwZWRlZiBfSGVhZF9iYXNlPF9JZHgsIF9IZWFkLCBzdGQ6OmlzX2VtcHR5PF9IZWFkPjo6dmFsdWU+IF9CYXNlOworCisgICAgICBfSGVhZCYgICAgICAgICAgICBfTV9oZWFkKCkgICAgICAgeyByZXR1cm4gX0Jhc2U6Ol9NX2hlYWQoKTsgfQorICAgICAgY29uc3QgX0hlYWQmICAgICAgX01faGVhZCgpIGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpfTV9oZWFkKCk7IH0KKworICAgICAgX0luaGVyaXRlZCYgICAgICAgX01fdGFpbCgpICAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisgICAgICBjb25zdCBfSW5oZXJpdGVkJiBfTV90YWlsKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgX1R1cGxlX2ltcGwoKQorICAgICAgOiBfSW5oZXJpdGVkKCksIF9CYXNlKCkgeyB9CisKKyAgICAgIGV4cGxpY2l0IAorICAgICAgX1R1cGxlX2ltcGwoY29uc3QgX0hlYWQmIF9faGVhZCwgY29uc3QgX1RhaWwmLi4uIF9fdGFpbCkKKyAgICAgIDogX0luaGVyaXRlZChfX3RhaWwuLi4pLCBfQmFzZShfX2hlYWQpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUhlYWQsIHR5cGVuYW1lLi4uIF9VVGFpbD4gCisgICAgICAgIGV4cGxpY2l0CisgICAgICAgIF9UdXBsZV9pbXBsKF9VSGVhZCYmIF9faGVhZCwgX1VUYWlsJiYuLi4gX190YWlsKQorCTogX0luaGVyaXRlZChzdGQ6OmZvcndhcmQ8X1VUYWlsPihfX3RhaWwpLi4uKSwKKwkgIF9CYXNlKHN0ZDo6Zm9yd2FyZDxfVUhlYWQ+KF9faGVhZCkpIHsgfQorCisgICAgICBfVHVwbGVfaW1wbChjb25zdCBfVHVwbGVfaW1wbCYgX19pbikKKyAgICAgIDogX0luaGVyaXRlZChfX2luLl9NX3RhaWwoKSksIF9CYXNlKF9faW4uX01faGVhZCgpKSB7IH0KKworICAgICAgX1R1cGxlX2ltcGwoX1R1cGxlX2ltcGwmJiBfX2luKQorICAgICAgOiBfSW5oZXJpdGVkKHN0ZDo6bW92ZShfX2luLl9NX3RhaWwoKSkpLAorCV9CYXNlKHN0ZDo6Zm9yd2FyZDxfSGVhZD4oX19pbi5fTV9oZWFkKCkpKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1VFbGVtZW50cz4KKyAgICAgICAgX1R1cGxlX2ltcGwoY29uc3QgX1R1cGxlX2ltcGw8X0lkeCwgX1VFbGVtZW50cy4uLj4mIF9faW4pCisJOiBfSW5oZXJpdGVkKF9faW4uX01fdGFpbCgpKSwgX0Jhc2UoX19pbi5fTV9oZWFkKCkpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfVUVsZW1lbnRzPgorICAgICAgICBfVHVwbGVfaW1wbChfVHVwbGVfaW1wbDxfSWR4LCBfVUVsZW1lbnRzLi4uPiYmIF9faW4pCisJOiBfSW5oZXJpdGVkKHN0ZDo6bW92ZShfX2luLl9NX3RhaWwoKSkpLAorCSAgX0Jhc2Uoc3RkOjptb3ZlKF9faW4uX01faGVhZCgpKSkgeyB9CisKKyAgICAgIF9UdXBsZV9pbXBsJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9UdXBsZV9pbXBsJiBfX2luKQorICAgICAgeworCV9NX2hlYWQoKSA9IF9faW4uX01faGVhZCgpOworCV9NX3RhaWwoKSA9IF9faW4uX01fdGFpbCgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX1R1cGxlX2ltcGwmCisgICAgICBvcGVyYXRvcj0oX1R1cGxlX2ltcGwmJiBfX2luKQorICAgICAgeworCV9NX2hlYWQoKSA9IHN0ZDo6bW92ZShfX2luLl9NX2hlYWQoKSk7CisJX01fdGFpbCgpID0gc3RkOjptb3ZlKF9faW4uX01fdGFpbCgpKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9VRWxlbWVudHM+CisgICAgICAgIF9UdXBsZV9pbXBsJgorICAgICAgICBvcGVyYXRvcj0oY29uc3QgX1R1cGxlX2ltcGw8X0lkeCwgX1VFbGVtZW50cy4uLj4mIF9faW4pCisgICAgICAgIHsKKwkgIF9NX2hlYWQoKSA9IF9faW4uX01faGVhZCgpOworCSAgX01fdGFpbCgpID0gX19pbi5fTV90YWlsKCk7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfVUVsZW1lbnRzPgorICAgICAgICBfVHVwbGVfaW1wbCYKKyAgICAgICAgb3BlcmF0b3I9KF9UdXBsZV9pbXBsPF9JZHgsIF9VRWxlbWVudHMuLi4+JiYgX19pbikKKyAgICAgICAgeworCSAgX01faGVhZCgpID0gc3RkOjptb3ZlKF9faW4uX01faGVhZCgpKTsKKwkgIF9NX3RhaWwoKSA9IHN0ZDo6bW92ZShfX2luLl9NX3RhaWwoKSk7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgdm9pZAorICAgICAgX01fc3dhcF9pbXBsKF9UdXBsZV9pbXBsJiBfX2luKQorICAgICAgeworCV9CYXNlOjpfTV9zd2FwX2ltcGwoX19pbi5fTV9oZWFkKCkpOworCV9Jbmhlcml0ZWQ6Ol9NX3N3YXBfaW1wbChfX2luLl9NX3RhaWwoKSk7CisgICAgICB9CisgICAgfTsKKworICAvLy8gdHVwbGUKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0VsZW1lbnRzPiAKKyAgICBjbGFzcyB0dXBsZSA6IHB1YmxpYyBfVHVwbGVfaW1wbDwwLCBfRWxlbWVudHMuLi4+CisgICAgeworICAgICAgdHlwZWRlZiBfVHVwbGVfaW1wbDwwLCBfRWxlbWVudHMuLi4+IF9Jbmhlcml0ZWQ7CisKKyAgICBwdWJsaWM6CisgICAgICB0dXBsZSgpCisgICAgICA6IF9Jbmhlcml0ZWQoKSB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIHR1cGxlKGNvbnN0IF9FbGVtZW50cyYuLi4gX19lbGVtZW50cykKKyAgICAgIDogX0luaGVyaXRlZChfX2VsZW1lbnRzLi4uKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1VFbGVtZW50cz4KKyAgICAgICAgZXhwbGljaXQKKyAgICAgICAgdHVwbGUoX1VFbGVtZW50cyYmLi4uIF9fZWxlbWVudHMpCisJOiBfSW5oZXJpdGVkKHN0ZDo6Zm9yd2FyZDxfVUVsZW1lbnRzPihfX2VsZW1lbnRzKS4uLikgewl9CisKKyAgICAgIHR1cGxlKGNvbnN0IHR1cGxlJiBfX2luKQorICAgICAgOiBfSW5oZXJpdGVkKHN0YXRpY19jYXN0PGNvbnN0IF9Jbmhlcml0ZWQmPihfX2luKSkgeyB9CisKKyAgICAgIHR1cGxlKHR1cGxlJiYgX19pbikKKyAgICAgIDogX0luaGVyaXRlZChzdGF0aWNfY2FzdDxfSW5oZXJpdGVkJiY+KF9faW4pKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1VFbGVtZW50cz4KKyAgICAgICAgdHVwbGUoY29uc3QgdHVwbGU8X1VFbGVtZW50cy4uLj4mIF9faW4pCisJOiBfSW5oZXJpdGVkKHN0YXRpY19jYXN0PGNvbnN0IF9UdXBsZV9pbXBsPDAsIF9VRWxlbWVudHMuLi4+Jj4oX19pbikpCisJeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9VRWxlbWVudHM+CisgICAgICAgIHR1cGxlKHR1cGxlPF9VRWxlbWVudHMuLi4+JiYgX19pbikKKwk6IF9Jbmhlcml0ZWQoc3RhdGljX2Nhc3Q8X1R1cGxlX2ltcGw8MCwgX1VFbGVtZW50cy4uLj4mJj4oX19pbikpIHsgfQorCisgICAgICAvLyBYWFggaHR0cDovL2djYy5nbnUub3JnL21sL2xpYnN0ZGMrKy8yMDA4LTAyL21zZzAwMDQ3Lmh0bWwKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9VRWxlbWVudHM+CisgICAgICAgIHR1cGxlKHR1cGxlPF9VRWxlbWVudHMuLi4+JiBfX2luKQorCTogX0luaGVyaXRlZChzdGF0aWNfY2FzdDxjb25zdCBfVHVwbGVfaW1wbDwwLCBfVUVsZW1lbnRzLi4uPiY+KF9faW4pKQorCXsgfQorCisgICAgICB0dXBsZSYKKyAgICAgIG9wZXJhdG9yPShjb25zdCB0dXBsZSYgX19pbikKKyAgICAgIHsKKwlzdGF0aWNfY2FzdDxfSW5oZXJpdGVkJj4oKnRoaXMpID0gX19pbjsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHR1cGxlJgorICAgICAgb3BlcmF0b3I9KHR1cGxlJiYgX19pbikKKyAgICAgIHsKKwlzdGF0aWNfY2FzdDxfSW5oZXJpdGVkJj4oKnRoaXMpID0gc3RkOjptb3ZlKF9faW4pOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1VFbGVtZW50cz4KKyAgICAgICAgdHVwbGUmCisgICAgICAgIG9wZXJhdG9yPShjb25zdCB0dXBsZTxfVUVsZW1lbnRzLi4uPiYgX19pbikKKyAgICAgICAgeworCSAgc3RhdGljX2Nhc3Q8X0luaGVyaXRlZCY+KCp0aGlzKSA9IF9faW47CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfVUVsZW1lbnRzPgorICAgICAgICB0dXBsZSYKKyAgICAgICAgb3BlcmF0b3I9KHR1cGxlPF9VRWxlbWVudHMuLi4+JiYgX19pbikKKyAgICAgICAgeworCSAgc3RhdGljX2Nhc3Q8X0luaGVyaXRlZCY+KCp0aGlzKSA9IHN0ZDo6bW92ZShfX2luKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAodHVwbGUmIF9faW4pCisgICAgICB7IF9Jbmhlcml0ZWQ6Ol9NX3N3YXBfaW1wbChfX2luKTsgfQorICAgIH07CisKKworICB0ZW1wbGF0ZTw+ICAKKyAgICBjbGFzcyB0dXBsZTw+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHZvaWQgc3dhcCh0dXBsZSYpIHsgLyogbm8tb3AgKi8gfQorICAgIH07CisKKyAgLy8vIHR1cGxlICgyLWVsZW1lbnQpLCB3aXRoIGNvbnN0cnVjdGlvbiBhbmQgYXNzaWdubWVudCBmcm9tIGEgcGFpci4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CisgICAgY2xhc3MgdHVwbGU8X1QxLCBfVDI+IDogcHVibGljIF9UdXBsZV9pbXBsPDAsIF9UMSwgX1QyPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1R1cGxlX2ltcGw8MCwgX1QxLCBfVDI+IF9Jbmhlcml0ZWQ7CisKKyAgICBwdWJsaWM6CisgICAgICB0dXBsZSgpCisgICAgICA6IF9Jbmhlcml0ZWQoKSB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIHR1cGxlKGNvbnN0IF9UMSYgX19hMSwgY29uc3QgX1QyJiBfX2EyKQorICAgICAgOiBfSW5oZXJpdGVkKF9fYTEsIF9fYTIpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVTEsIHR5cGVuYW1lIF9VMj4KKyAgICAgICAgZXhwbGljaXQKKyAgICAgICAgdHVwbGUoX1UxJiYgX19hMSwgX1UyJiYgX19hMikKKwk6IF9Jbmhlcml0ZWQoc3RkOjpmb3J3YXJkPF9VMT4oX19hMSksIHN0ZDo6Zm9yd2FyZDxfVTI+KF9fYTIpKSB7IH0KKworICAgICAgdHVwbGUoY29uc3QgdHVwbGUmIF9faW4pCisgICAgICA6IF9Jbmhlcml0ZWQoc3RhdGljX2Nhc3Q8Y29uc3QgX0luaGVyaXRlZCY+KF9faW4pKSB7IH0KKworICAgICAgdHVwbGUodHVwbGUmJiBfX2luKQorICAgICAgOiBfSW5oZXJpdGVkKHN0YXRpY19jYXN0PF9Jbmhlcml0ZWQmJj4oX19pbikpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVTEsIHR5cGVuYW1lIF9VMj4KKyAgICAgICAgdHVwbGUoY29uc3QgdHVwbGU8X1UxLCBfVTI+JiBfX2luKQorCTogX0luaGVyaXRlZChzdGF0aWNfY2FzdDxjb25zdCBfVHVwbGVfaW1wbDwwLCBfVTEsIF9VMj4mPihfX2luKSkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VMSwgdHlwZW5hbWUgX1UyPgorICAgICAgICB0dXBsZSh0dXBsZTxfVTEsIF9VMj4mJiBfX2luKQorCTogX0luaGVyaXRlZChzdGF0aWNfY2FzdDxfVHVwbGVfaW1wbDwwLCBfVTEsIF9VMj4mJj4oX19pbikpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVTEsIHR5cGVuYW1lIF9VMj4KKyAgICAgICAgdHVwbGUoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9faW4pCisJOiBfSW5oZXJpdGVkKF9faW4uZmlyc3QsIF9faW4uc2Vjb25kKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1UxLCB0eXBlbmFtZSBfVTI+CisgICAgICAgIHR1cGxlKHBhaXI8X1UxLCBfVTI+JiYgX19pbikKKwk6IF9Jbmhlcml0ZWQoc3RkOjpmb3J3YXJkPF9VMT4oX19pbi5maXJzdCksCisJCSAgICAgc3RkOjpmb3J3YXJkPF9VMj4oX19pbi5zZWNvbmQpKSB7IH0KKworICAgICAgdHVwbGUmCisgICAgICBvcGVyYXRvcj0oY29uc3QgdHVwbGUmIF9faW4pCisgICAgICB7CisJc3RhdGljX2Nhc3Q8X0luaGVyaXRlZCY+KCp0aGlzKSA9IF9faW47CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB0dXBsZSYKKyAgICAgIG9wZXJhdG9yPSh0dXBsZSYmIF9faW4pCisgICAgICB7CisJc3RhdGljX2Nhc3Q8X0luaGVyaXRlZCY+KCp0aGlzKSA9IHN0ZDo6bW92ZShfX2luKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VMSwgdHlwZW5hbWUgX1UyPgorICAgICAgICB0dXBsZSYKKyAgICAgICAgb3BlcmF0b3I9KGNvbnN0IHR1cGxlPF9VMSwgX1UyPiYgX19pbikKKyAgICAgICAgeworCSAgc3RhdGljX2Nhc3Q8X0luaGVyaXRlZCY+KCp0aGlzKSA9IF9faW47CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVTEsIHR5cGVuYW1lIF9VMj4KKyAgICAgICAgdHVwbGUmCisgICAgICAgIG9wZXJhdG9yPSh0dXBsZTxfVTEsIF9VMj4mJiBfX2luKQorICAgICAgICB7CisJICBzdGF0aWNfY2FzdDxfSW5oZXJpdGVkJj4oKnRoaXMpID0gc3RkOjptb3ZlKF9faW4pOworCSAgcmV0dXJuICp0aGlzOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1UxLCB0eXBlbmFtZSBfVTI+CisgICAgICAgIHR1cGxlJgorICAgICAgICBvcGVyYXRvcj0oY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9faW4pCisgICAgICAgIHsKKwkgIHRoaXMtPl9NX2hlYWQoKSA9IF9faW4uZmlyc3Q7CisJICB0aGlzLT5fTV90YWlsKCkuX01faGVhZCgpID0gX19pbi5zZWNvbmQ7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVTEsIHR5cGVuYW1lIF9VMj4KKyAgICAgICAgdHVwbGUmCisgICAgICAgIG9wZXJhdG9yPShwYWlyPF9VMSwgX1UyPiYmIF9faW4pCisgICAgICAgIHsKKwkgIHRoaXMtPl9NX2hlYWQoKSA9IHN0ZDo6bW92ZShfX2luLmZpcnN0KTsKKwkgIHRoaXMtPl9NX3RhaWwoKS5fTV9oZWFkKCkgPSBzdGQ6Om1vdmUoX19pbi5zZWNvbmQpOworCSAgcmV0dXJuICp0aGlzOworCX0KKworICAgICAgdm9pZAorICAgICAgc3dhcCh0dXBsZSYgX19pbikKKyAgICAgIHsgCisJdXNpbmcgc3RkOjpzd2FwOworCXN3YXAodGhpcy0+X01faGVhZCgpLCBfX2luLl9NX2hlYWQoKSk7CisJc3dhcCh0aGlzLT5fTV90YWlsKCkuX01faGVhZCgpLCBfX2luLl9NX3RhaWwoKS5fTV9oZWFkKCkpOwkKKyAgICAgIH0KKyAgICB9OworCisKKyAgLy8vIEdpdmVzIHRoZSB0eXBlIG9mIHRoZSBpdGggZWxlbWVudCBvZiBhIGdpdmVuIHR1cGxlIHR5cGUuCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IF9faSwgdHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCB0dXBsZV9lbGVtZW50OworCisgIC8qKgorICAgKiBSZWN1cnNpdmUgY2FzZSBmb3IgdHVwbGVfZWxlbWVudDogc3RyaXAgb2ZmIHRoZSBmaXJzdCBlbGVtZW50IGluCisgICAqIHRoZSB0dXBsZSBhbmQgcmV0cmlldmUgdGhlIChpLTEpdGggZWxlbWVudCBvZiB0aGUgcmVtYWluaW5nIHR1cGxlLgorICAgKi8KKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX19pLCB0eXBlbmFtZSBfSGVhZCwgdHlwZW5hbWUuLi4gX1RhaWw+CisgICAgc3RydWN0IHR1cGxlX2VsZW1lbnQ8X19pLCB0dXBsZTxfSGVhZCwgX1RhaWwuLi4+ID4KKyAgICA6IHR1cGxlX2VsZW1lbnQ8X19pIC0gMSwgdHVwbGU8X1RhaWwuLi4+ID4geyB9OworCisgIC8qKgorICAgKiBCYXNpcyBjYXNlIGZvciB0dXBsZV9lbGVtZW50OiBUaGUgZmlyc3QgZWxlbWVudCBpcyB0aGUgb25lIHdlJ3JlIHNlZWtpbmcuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCwgdHlwZW5hbWUuLi4gX1RhaWw+CisgICAgc3RydWN0IHR1cGxlX2VsZW1lbnQ8MCwgdHVwbGU8X0hlYWQsIF9UYWlsLi4uPiA+CisgICAgeworICAgICAgdHlwZWRlZiBfSGVhZCB0eXBlOworICAgIH07CisKKyAgLy8vIEZpbmRzIHRoZSBzaXplIG9mIGEgZ2l2ZW4gdHVwbGUgdHlwZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCB0dXBsZV9zaXplOworCisgIC8vLyBjbGFzcyB0dXBsZV9zaXplCisgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9FbGVtZW50cz4KKyAgICBzdHJ1Y3QgdHVwbGVfc2l6ZTx0dXBsZTxfRWxlbWVudHMuLi4+ID4KKyAgICB7CisgICAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgdmFsdWUgPSBzaXplb2YuLi4oX0VsZW1lbnRzKTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9FbGVtZW50cz4KKyAgICBjb25zdCBzdGQ6OnNpemVfdCB0dXBsZV9zaXplPHR1cGxlPF9FbGVtZW50cy4uLj4gPjo6dmFsdWU7CisKKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX19pLCB0eXBlbmFtZSBfSGVhZCwgdHlwZW5hbWUuLi4gX1RhaWw+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fYWRkX3JlZjxfSGVhZD46OnR5cGUKKyAgICBfX2dldF9oZWxwZXIoX1R1cGxlX2ltcGw8X19pLCBfSGVhZCwgX1RhaWwuLi4+JiBfX3QpCisgICAgeyByZXR1cm4gX190Ll9NX2hlYWQoKTsgfQorCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IF9faSwgdHlwZW5hbWUgX0hlYWQsIHR5cGVuYW1lLi4uIF9UYWlsPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2FkZF9jX3JlZjxfSGVhZD46OnR5cGUKKyAgICBfX2dldF9oZWxwZXIoY29uc3QgX1R1cGxlX2ltcGw8X19pLCBfSGVhZCwgX1RhaWwuLi4+JiBfX3QpCisgICAgeyByZXR1cm4gX190Ll9NX2hlYWQoKTsgfQorCisgIC8vIFJldHVybiBhIHJlZmVyZW5jZSAoY29uc3QgcmVmZXJlbmNlKSB0byB0aGUgaXRoIGVsZW1lbnQgb2YgYSB0dXBsZS4KKyAgLy8gQW55IGNvbnN0IG9yIG5vbi1jb25zdCByZWYgZWxlbWVudHMgYXJlIHJldHVybmVkIHdpdGggdGhlaXIgb3JpZ2luYWwgdHlwZS4KKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX19pLCB0eXBlbmFtZS4uLiBfRWxlbWVudHM+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fYWRkX3JlZjwKKyAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSB0dXBsZV9lbGVtZW50PF9faSwgdHVwbGU8X0VsZW1lbnRzLi4uPiA+Ojp0eXBlCisgICAgICAgICAgICAgICAgICAgID46OnR5cGUKKyAgICBnZXQodHVwbGU8X0VsZW1lbnRzLi4uPiYgX190KQorICAgIHsgcmV0dXJuIF9fZ2V0X2hlbHBlcjxfX2k+KF9fdCk7IH0KKworICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfX2ksIHR5cGVuYW1lLi4uIF9FbGVtZW50cz4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19hZGRfY19yZWY8CisgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgdHVwbGVfZWxlbWVudDxfX2ksIHR1cGxlPF9FbGVtZW50cy4uLj4gPjo6dHlwZQorICAgICAgICAgICAgICAgICAgICA+Ojp0eXBlCisgICAgZ2V0KGNvbnN0IHR1cGxlPF9FbGVtZW50cy4uLj4mIF9fdCkKKyAgICB7IHJldHVybiBfX2dldF9oZWxwZXI8X19pPihfX3QpOyB9CisKKyAgLy8gVGhpcyBjbGFzcyBoZWxwcyBjb25zdHJ1Y3QgdGhlIHZhcmlvdXMgY29tcGFyaXNvbiBvcGVyYXRpb25zIG9uIHR1cGxlcworICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfX2NoZWNrX2VxdWFsX3NpemUsIHN0ZDo6c2l6ZV90IF9faSwgc3RkOjpzaXplX3QgX19qLAorCSAgIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIHN0cnVjdCBfX3R1cGxlX2NvbXBhcmU7CisKKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX19pLCBzdGQ6OnNpemVfdCBfX2osIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIHN0cnVjdCBfX3R1cGxlX2NvbXBhcmU8MCwgX19pLCBfX2osIF9UcCwgX1VwPgorICAgIHsKKyAgICAgIHN0YXRpYyBib29sIF9fZXEoY29uc3QgX1RwJiBfX3QsIGNvbnN0IF9VcCYgX191KQorICAgICAgeworCXJldHVybiAoZ2V0PF9faT4oX190KSA9PSBnZXQ8X19pPihfX3UpICYmCisJCV9fdHVwbGVfY29tcGFyZTwwLCBfX2kgKyAxLCBfX2osIF9UcCwgX1VwPjo6X19lcShfX3QsIF9fdSkpOworICAgICAgfQorICAgICAKKyAgICAgIHN0YXRpYyBib29sIF9fbGVzcyhjb25zdCBfVHAmIF9fdCwgY29uc3QgX1VwJiBfX3UpCisgICAgICB7CisJcmV0dXJuICgoZ2V0PF9faT4oX190KSA8IGdldDxfX2k+KF9fdSkpCisJCXx8ICEoZ2V0PF9faT4oX191KSA8IGdldDxfX2k+KF9fdCkpICYmCisJCV9fdHVwbGVfY29tcGFyZTwwLCBfX2kgKyAxLCBfX2osIF9UcCwgX1VwPjo6X19sZXNzKF9fdCwgX191KSk7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfX2ksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIHN0cnVjdCBfX3R1cGxlX2NvbXBhcmU8MCwgX19pLCBfX2ksIF9UcCwgX1VwPgorICAgIHsKKyAgICAgIHN0YXRpYyBib29sIF9fZXEoY29uc3QgX1RwJiwgY29uc3QgX1VwJikKKyAgICAgIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgCisgICAgICBzdGF0aWMgYm9vbCBfX2xlc3MoY29uc3QgX1RwJiwgY29uc3QgX1VwJikKKyAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfVEVsZW1lbnRzLCB0eXBlbmFtZS4uLiBfVUVsZW1lbnRzPgorICAgIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IHR1cGxlPF9URWxlbWVudHMuLi4+JiBfX3QsCisJICAgICAgIGNvbnN0IHR1cGxlPF9VRWxlbWVudHMuLi4+JiBfX3UpCisgICAgeworICAgICAgdHlwZWRlZiB0dXBsZTxfVEVsZW1lbnRzLi4uPiBfVHA7CisgICAgICB0eXBlZGVmIHR1cGxlPF9VRWxlbWVudHMuLi4+IF9VcDsKKyAgICAgIHJldHVybiAoX190dXBsZV9jb21wYXJlPHR1cGxlX3NpemU8X1RwPjo6dmFsdWUgLSB0dXBsZV9zaXplPF9VcD46OnZhbHVlLAorCSAgICAgIDAsIHR1cGxlX3NpemU8X1RwPjo6dmFsdWUsIF9UcCwgX1VwPjo6X19lcShfX3QsIF9fdSkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfVEVsZW1lbnRzLCB0eXBlbmFtZS4uLiBfVUVsZW1lbnRzPgorICAgIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgdHVwbGU8X1RFbGVtZW50cy4uLj4mIF9fdCwKKwkgICAgICBjb25zdCB0dXBsZTxfVUVsZW1lbnRzLi4uPiYgX191KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHVwbGU8X1RFbGVtZW50cy4uLj4gX1RwOworICAgICAgdHlwZWRlZiB0dXBsZTxfVUVsZW1lbnRzLi4uPiBfVXA7CisgICAgICByZXR1cm4gKF9fdHVwbGVfY29tcGFyZTx0dXBsZV9zaXplPF9UcD46OnZhbHVlIC0gdHVwbGVfc2l6ZTxfVXA+Ojp2YWx1ZSwKKwkgICAgICAwLCB0dXBsZV9zaXplPF9UcD46OnZhbHVlLCBfVHAsIF9VcD46Ol9fbGVzcyhfX3QsIF9fdSkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfVEVsZW1lbnRzLCB0eXBlbmFtZS4uLiBfVUVsZW1lbnRzPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCB0dXBsZTxfVEVsZW1lbnRzLi4uPiYgX190LAorCSAgICAgICBjb25zdCB0dXBsZTxfVUVsZW1lbnRzLi4uPiYgX191KQorICAgIHsgcmV0dXJuICEoX190ID09IF9fdSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfVEVsZW1lbnRzLCB0eXBlbmFtZS4uLiBfVUVsZW1lbnRzPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IHR1cGxlPF9URWxlbWVudHMuLi4+JiBfX3QsCisJICAgICAgY29uc3QgdHVwbGU8X1VFbGVtZW50cy4uLj4mIF9fdSkKKyAgICB7IHJldHVybiBfX3UgPCBfX3Q7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfVEVsZW1lbnRzLCB0eXBlbmFtZS4uLiBfVUVsZW1lbnRzPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCB0dXBsZTxfVEVsZW1lbnRzLi4uPiYgX190LAorCSAgICAgICBjb25zdCB0dXBsZTxfVUVsZW1lbnRzLi4uPiYgX191KQorICAgIHsgcmV0dXJuICEoX191IDwgX190KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9URWxlbWVudHMsIHR5cGVuYW1lLi4uIF9VRWxlbWVudHM+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IHR1cGxlPF9URWxlbWVudHMuLi4+JiBfX3QsCisJICAgICAgIGNvbnN0IHR1cGxlPF9VRWxlbWVudHMuLi4+JiBfX3UpCisgICAgeyByZXR1cm4gIShfX3QgPCBfX3UpOyB9CisKKyAgLy8gTkI6IERSIDcwNS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0VsZW1lbnRzPgorICAgIGlubGluZSB0dXBsZTx0eXBlbmFtZSBfX2RlY2F5X2FuZF9zdHJpcDxfRWxlbWVudHM+OjpfX3R5cGUuLi4+CisgICAgbWFrZV90dXBsZShfRWxlbWVudHMmJi4uLiBfX2FyZ3MpCisgICAgeworICAgICAgdHlwZWRlZiB0dXBsZTx0eXBlbmFtZSBfX2RlY2F5X2FuZF9zdHJpcDxfRWxlbWVudHM+OjpfX3R5cGUuLi4+CisJX19yZXN1bHRfdHlwZTsKKyAgICAgIHJldHVybiBfX3Jlc3VsdF90eXBlKHN0ZDo6Zm9yd2FyZDxfRWxlbWVudHM+KF9fYXJncykuLi4pOworICAgIH0KKworICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdC4uLj4gc3RydWN0IF9faW5kZXhfaG9sZGVyIHsgfTsgICAgCisKKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX19pLCB0eXBlbmFtZSBfSWR4SG9sZGVyLCB0eXBlbmFtZS4uLiBfRWxlbWVudHM+CisgICAgc3RydWN0IF9faW5kZXhfaG9sZGVyX2ltcGw7CisKKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX19pLCBzdGQ6OnNpemVfdC4uLiBfSW5kZXhlcywgdHlwZW5hbWUgX0lkeEhvbGRlciwKKwkgICB0eXBlbmFtZS4uLiBfRWxlbWVudHM+CisgICAgc3RydWN0IF9faW5kZXhfaG9sZGVyX2ltcGw8X19pLCBfX2luZGV4X2hvbGRlcjxfSW5kZXhlcy4uLj4sCisJCQkgICAgICAgX0lkeEhvbGRlciwgX0VsZW1lbnRzLi4uPiAKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faW5kZXhfaG9sZGVyX2ltcGw8X19pICsgMSwKKwkJCQkJICAgX19pbmRleF9ob2xkZXI8X0luZGV4ZXMuLi4sIF9faT4sCisJCQkJCSAgIF9FbGVtZW50cy4uLj46OnR5cGUgdHlwZTsKKyAgICB9OworIAorICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfX2ksIHN0ZDo6c2l6ZV90Li4uIF9JbmRleGVzPgorICAgIHN0cnVjdCBfX2luZGV4X2hvbGRlcl9pbXBsPF9faSwgX19pbmRleF9ob2xkZXI8X0luZGV4ZXMuLi4+ID4KKyAgICB7IHR5cGVkZWYgX19pbmRleF9ob2xkZXI8X0luZGV4ZXMuLi4+IHR5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0VsZW1lbnRzPgorICAgIHN0cnVjdCBfX21ha2VfaW5kZXhfaG9sZGVyIAorICAgIDogX19pbmRleF9ob2xkZXJfaW1wbDwwLCBfX2luZGV4X2hvbGRlcjw+LCBfRWxlbWVudHMuLi4+IHsgfTsKKyAgICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1RFbGVtZW50cywgc3RkOjpzaXplX3QuLi4gX1RJZHgsCisJICAgdHlwZW5hbWUuLi4gX1VFbGVtZW50cywgc3RkOjpzaXplX3QuLi4gX1VJZHg+IAorICAgIGlubGluZSB0dXBsZTxfVEVsZW1lbnRzLi4uLCBfVUVsZW1lbnRzLi4uPiAKKyAgICBfX3R1cGxlX2NhdF9oZWxwZXIoY29uc3QgdHVwbGU8X1RFbGVtZW50cy4uLj4mIF9fdCwKKwkJICAgICAgIGNvbnN0IF9faW5kZXhfaG9sZGVyPF9USWR4Li4uPiYsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHR1cGxlPF9VRWxlbWVudHMuLi4+JiBfX3UsCisJCSAgICAgICBjb25zdCBfX2luZGV4X2hvbGRlcjxfVUlkeC4uLj4mKQorICAgIHsgcmV0dXJuIHR1cGxlPF9URWxlbWVudHMuLi4sIF9VRWxlbWVudHMuLi4+KGdldDxfVElkeD4oX190KS4uLiwKKwkJCQkJCSBnZXQ8X1VJZHg+KF9fdSkuLi4pOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1RFbGVtZW50cywgc3RkOjpzaXplX3QuLi4gX1RJZHgsCisJICAgdHlwZW5hbWUuLi4gX1VFbGVtZW50cywgc3RkOjpzaXplX3QuLi4gX1VJZHg+IAorICAgIGlubGluZSB0dXBsZTxfVEVsZW1lbnRzLi4uLCBfVUVsZW1lbnRzLi4uPiAKKyAgICBfX3R1cGxlX2NhdF9oZWxwZXIodHVwbGU8X1RFbGVtZW50cy4uLj4mJiBfX3QsCisJCSAgICAgICBjb25zdCBfX2luZGV4X2hvbGRlcjxfVElkeC4uLj4mLCAKKwkJICAgICAgIGNvbnN0IHR1cGxlPF9VRWxlbWVudHMuLi4+JiBfX3UsCisJCSAgICAgICBjb25zdCBfX2luZGV4X2hvbGRlcjxfVUlkeC4uLj4mKQorICAgIHsgcmV0dXJuIHR1cGxlPF9URWxlbWVudHMuLi4sIF9VRWxlbWVudHMuLi4+CisJKHN0ZDo6bW92ZShnZXQ8X1RJZHg+KF9fdCkpLi4uLCBnZXQ8X1VJZHg+KF9fdSkuLi4pOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1RFbGVtZW50cywgc3RkOjpzaXplX3QuLi4gX1RJZHgsCisJICAgdHlwZW5hbWUuLi4gX1VFbGVtZW50cywgc3RkOjpzaXplX3QuLi4gX1VJZHg+CisgICAgaW5saW5lIHR1cGxlPF9URWxlbWVudHMuLi4sIF9VRWxlbWVudHMuLi4+IAorICAgIF9fdHVwbGVfY2F0X2hlbHBlcihjb25zdCB0dXBsZTxfVEVsZW1lbnRzLi4uPiYgX190LAorCQkgICAgICAgY29uc3QgX19pbmRleF9ob2xkZXI8X1RJZHguLi4+JiwgCisJCSAgICAgICB0dXBsZTxfVUVsZW1lbnRzLi4uPiYmIF9fdSwKKwkJICAgICAgIGNvbnN0IF9faW5kZXhfaG9sZGVyPF9VSWR4Li4uPiYpCisgICAgeyByZXR1cm4gdHVwbGU8X1RFbGVtZW50cy4uLiwgX1VFbGVtZW50cy4uLj4KKwkoZ2V0PF9USWR4PihfX3QpLi4uLCBzdGQ6Om1vdmUoZ2V0PF9VSWR4PihfX3UpKS4uLik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfVEVsZW1lbnRzLCBzdGQ6OnNpemVfdC4uLiBfVElkeCwKKwkgICB0eXBlbmFtZS4uLiBfVUVsZW1lbnRzLCBzdGQ6OnNpemVfdC4uLiBfVUlkeD4gCisgICAgaW5saW5lIHR1cGxlPF9URWxlbWVudHMuLi4sIF9VRWxlbWVudHMuLi4+IAorICAgIF9fdHVwbGVfY2F0X2hlbHBlcih0dXBsZTxfVEVsZW1lbnRzLi4uPiYmIF9fdCwKKwkJICAgICAgIGNvbnN0IF9faW5kZXhfaG9sZGVyPF9USWR4Li4uPiYsIAorCQkgICAgICAgdHVwbGU8X1VFbGVtZW50cy4uLj4mJiBfX3UsCisJCSAgICAgICBjb25zdCBfX2luZGV4X2hvbGRlcjxfVUlkeC4uLj4mKQorICAgIHsgcmV0dXJuIHR1cGxlPF9URWxlbWVudHMuLi4sIF9VRWxlbWVudHMuLi4+CisJKHN0ZDo6bW92ZShnZXQ8X1RJZHg+KF9fdCkpLi4uLCBzdGQ6Om1vdmUoZ2V0PF9VSWR4PihfX3UpKS4uLik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfVEVsZW1lbnRzLCB0eXBlbmFtZS4uLiBfVUVsZW1lbnRzPgorICAgIGlubGluZSB0dXBsZTxfVEVsZW1lbnRzLi4uLCBfVUVsZW1lbnRzLi4uPiAKKyAgICB0dXBsZV9jYXQoY29uc3QgdHVwbGU8X1RFbGVtZW50cy4uLj4mIF9fdCwgY29uc3QgdHVwbGU8X1VFbGVtZW50cy4uLj4mIF9fdSkKKyAgICB7CisgICAgICByZXR1cm4gX190dXBsZV9jYXRfaGVscGVyKF9fdCwgdHlwZW5hbWUKKwkJCQlfX21ha2VfaW5kZXhfaG9sZGVyPF9URWxlbWVudHMuLi4+Ojp0eXBlKCksCisJCQkJX191LCB0eXBlbmFtZQorCQkJCV9fbWFrZV9pbmRleF9ob2xkZXI8X1VFbGVtZW50cy4uLj46OnR5cGUoKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9URWxlbWVudHMsIHR5cGVuYW1lLi4uIF9VRWxlbWVudHM+CisgICAgaW5saW5lIHR1cGxlPF9URWxlbWVudHMuLi4sIF9VRWxlbWVudHMuLi4+IAorICAgIHR1cGxlX2NhdCh0dXBsZTxfVEVsZW1lbnRzLi4uPiYmIF9fdCwgY29uc3QgdHVwbGU8X1VFbGVtZW50cy4uLj4mIF9fdSkKKyAgICB7CisgICAgICByZXR1cm4gX190dXBsZV9jYXRfaGVscGVyKHN0ZDo6bW92ZShfX3QpLCB0eXBlbmFtZQorCQkJCSBfX21ha2VfaW5kZXhfaG9sZGVyPF9URWxlbWVudHMuLi4+Ojp0eXBlKCksCisJCQkJIF9fdSwgdHlwZW5hbWUKKwkJCQkgX19tYWtlX2luZGV4X2hvbGRlcjxfVUVsZW1lbnRzLi4uPjo6dHlwZSgpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1RFbGVtZW50cywgdHlwZW5hbWUuLi4gX1VFbGVtZW50cz4KKyAgICBpbmxpbmUgdHVwbGU8X1RFbGVtZW50cy4uLiwgX1VFbGVtZW50cy4uLj4gCisgICAgdHVwbGVfY2F0KGNvbnN0IHR1cGxlPF9URWxlbWVudHMuLi4+JiBfX3QsIHR1cGxlPF9VRWxlbWVudHMuLi4+JiYgX191KQorICAgIHsKKyAgICAgIHJldHVybiBfX3R1cGxlX2NhdF9oZWxwZXIoX190LCB0eXBlbmFtZQorCQkJCV9fbWFrZV9pbmRleF9ob2xkZXI8X1RFbGVtZW50cy4uLj46OnR5cGUoKSwKKwkJCQlzdGQ6Om1vdmUoX191KSwgdHlwZW5hbWUKKwkJCQlfX21ha2VfaW5kZXhfaG9sZGVyPF9VRWxlbWVudHMuLi4+Ojp0eXBlKCkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfVEVsZW1lbnRzLCB0eXBlbmFtZS4uLiBfVUVsZW1lbnRzPgorICAgIGlubGluZSB0dXBsZTxfVEVsZW1lbnRzLi4uLCBfVUVsZW1lbnRzLi4uPgorICAgIHR1cGxlX2NhdCh0dXBsZTxfVEVsZW1lbnRzLi4uPiYmIF9fdCwgdHVwbGU8X1VFbGVtZW50cy4uLj4mJiBfX3UpCisgICAgeworICAgICAgcmV0dXJuIF9fdHVwbGVfY2F0X2hlbHBlcihzdGQ6Om1vdmUoX190KSwgdHlwZW5hbWUKKwkJCQlfX21ha2VfaW5kZXhfaG9sZGVyPF9URWxlbWVudHMuLi4+Ojp0eXBlKCksCisJCQkJc3RkOjptb3ZlKF9fdSksIHR5cGVuYW1lCisJCQkJX19tYWtlX2luZGV4X2hvbGRlcjxfVUVsZW1lbnRzLi4uPjo6dHlwZSgpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0VsZW1lbnRzPgorICAgIGlubGluZSB0dXBsZTxfRWxlbWVudHMmLi4uPgorICAgIHRpZShfRWxlbWVudHMmLi4uIF9fYXJncykKKyAgICB7IHJldHVybiB0dXBsZTxfRWxlbWVudHMmLi4uPihfX2FyZ3MuLi4pOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0VsZW1lbnRzPgorICAgIGlubGluZSB2b2lkIAorICAgIHN3YXAodHVwbGU8X0VsZW1lbnRzLi4uPiYgX194LCB0dXBsZTxfRWxlbWVudHMuLi4+JiBfX3kpCisgICAgeyBfX3guc3dhcChfX3kpOyB9CisKKyAgLy8gQSBjbGFzcyAoYW5kIGluc3RhbmNlKSB3aGljaCBjYW4gYmUgdXNlZCBpbiAndGllJyB3aGVuIGFuIGVsZW1lbnQKKyAgLy8gb2YgYSB0dXBsZSBpcyBub3QgcmVxdWlyZWQKKyAgc3RydWN0IF9Td2FsbG93X2Fzc2lnbgorICB7CisgICAgdGVtcGxhdGU8Y2xhc3MgX1RwPgorICAgICAgX1N3YWxsb3dfYXNzaWduJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9UcCYpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorICB9OworCisgIC8vIFRPRE86IFB1dCB0aGlzIGluIHNvbWUga2luZCBvZiBzaGFyZWQgZmlsZS4KKyAgbmFtZXNwYWNlCisgIHsKKyAgICBfU3dhbGxvd19hc3NpZ24gaWdub3JlOworICB9OyAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCit9CisKKyNlbmRpZiAvLyBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworCisjZW5kaWYgLy8gX0dMSUJDWFhfVFVQTEUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHlwZV90cmFpdHMgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3R5cGVfdHJhaXRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MTY2MTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3R5cGVfdHJhaXRzCkBAIC0wLDAgKzEsNjM0IEBACisvLyBDKysweCB0eXBlX3RyYWl0cyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvdHlwZV90cmFpdHMKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFlQRV9UUkFJVFMKKyNkZWZpbmUgX0dMSUJDWFhfVFlQRV9UUkFJVFMgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpZm5kZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyMgaW5jbHVkZSA8Yml0cy9jKysweF93YXJuaW5nLmg+CisjZWxzZQorCisjaWYgZGVmaW5lZChfR0xJQkNYWF9JTkNMVURFX0FTX1RSMSkKKyMgIGVycm9yIEMrKzB4IGhlYWRlciBjYW5ub3QgYmUgaW5jbHVkZWQgZnJvbSBUUjEgaGVhZGVyCisjZW5kaWYKKworI2luY2x1ZGUgPGNzdGRkZWY+CisKKyNpZiBkZWZpbmVkKF9HTElCQ1hYX0lOQ0xVREVfQVNfQ1hYMFgpCisjICBpbmNsdWRlIDx0cjFfaW1wbC90eXBlX3RyYWl0cz4KKyNlbHNlCisjICBkZWZpbmUgX0dMSUJDWFhfSU5DTFVERV9BU19DWFgwWAorIyAgZGVmaW5lIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9UUjEKKyMgIGRlZmluZSBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1RSMQorIyAgZGVmaW5lIF9HTElCQ1hYX1RSMQorIyAgaW5jbHVkZSA8dHIxX2ltcGwvdHlwZV90cmFpdHM+CisjICB1bmRlZiBfR0xJQkNYWF9UUjEKKyMgIHVuZGVmIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVFIxCisjICB1bmRlZiBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVFIxCisjICB1bmRlZiBfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYCisjZW5kaWYKKworbmFtZXNwYWNlIHN0ZAoreworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgbWV0YXByb2dyYW1taW5nCisgICAqIEB7CisgICAqLworCisgIC8vIFByaW1hcnkgY2xhc3NpZmljYXRpb24gdHJhaXRzLgorCisgIC8vLyBpc19sdmFsdWVfcmVmZXJlbmNlCisgIHRlbXBsYXRlPHR5cGVuYW1lPgorICAgIHN0cnVjdCBpc19sdmFsdWVfcmVmZXJlbmNlCisgICAgOiBwdWJsaWMgZmFsc2VfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19sdmFsdWVfcmVmZXJlbmNlPF9UcCY+CisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKworICAvLy8gaXNfcnZhbHVlX3JlZmVyZW5jZQorICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgaXNfcnZhbHVlX3JlZmVyZW5jZQorICAgIDogcHVibGljIGZhbHNlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfcnZhbHVlX3JlZmVyZW5jZTxfVHAmJj4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworCisgIC8vIFNlY29uZGFyeSBjbGFzc2lmaWNhdGlvbiB0cmFpdHMuCisKKyAgLy8vIGlzX3JlZmVyZW5jZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX3JlZmVyZW5jZQorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIChpc19sdmFsdWVfcmVmZXJlbmNlPF9UcD46OnZhbHVlCisJCQkJICAgICAgfHwgaXNfcnZhbHVlX3JlZmVyZW5jZTxfVHA+Ojp2YWx1ZSk+CisgICAgeyB9OworCisgIC8vIFJlZmVyZW5jZSB0cmFuc2Zvcm1hdGlvbnMuCisKKyAgLy8vIHJlbW92ZV9yZWZlcmVuY2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCByZW1vdmVfcmVmZXJlbmNlCisgICAgeyB0eXBlZGVmIF9UcCAgIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCByZW1vdmVfcmVmZXJlbmNlPF9UcCY+CisgICAgeyB0eXBlZGVmIF9UcCAgIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCByZW1vdmVfcmVmZXJlbmNlPF9UcCYmPgorICAgIHsgdHlwZWRlZiBfVHAgICB0eXBlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwKKwkgICBib29sID0gIWlzX3JlZmVyZW5jZTxfVHA+Ojp2YWx1ZSAmJiAhaXNfdm9pZDxfVHA+Ojp2YWx1ZSwKKwkgICBib29sID0gaXNfcnZhbHVlX3JlZmVyZW5jZTxfVHA+Ojp2YWx1ZT4KKyAgICBzdHJ1Y3QgX19hZGRfbHZhbHVlX3JlZmVyZW5jZV9oZWxwZXIKKyAgICB7IHR5cGVkZWYgX1RwICAgdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fYWRkX2x2YWx1ZV9yZWZlcmVuY2VfaGVscGVyPF9UcCwgdHJ1ZSwgZmFsc2U+CisgICAgeyB0eXBlZGVmIF9UcCYgICB0eXBlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19hZGRfbHZhbHVlX3JlZmVyZW5jZV9oZWxwZXI8X1RwLCBmYWxzZSwgdHJ1ZT4KKyAgICB7IHR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX3JlZmVyZW5jZTxfVHA+Ojp0eXBlJiAgIHR5cGU7IH07CisKKyAgLy8vIGFkZF9sdmFsdWVfcmVmZXJlbmNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgYWRkX2x2YWx1ZV9yZWZlcmVuY2UKKyAgICA6IHB1YmxpYyBfX2FkZF9sdmFsdWVfcmVmZXJlbmNlX2hlbHBlcjxfVHA+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwKKwkgICBib29sID0gIWlzX3JlZmVyZW5jZTxfVHA+Ojp2YWx1ZSAmJiAhaXNfdm9pZDxfVHA+Ojp2YWx1ZT4KKyAgICBzdHJ1Y3QgX19hZGRfcnZhbHVlX3JlZmVyZW5jZV9oZWxwZXIKKyAgICB7IHR5cGVkZWYgX1RwICAgdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fYWRkX3J2YWx1ZV9yZWZlcmVuY2VfaGVscGVyPF9UcCwgdHJ1ZT4KKyAgICB7IHR5cGVkZWYgX1RwJiYgICB0eXBlOyB9OworCisgIC8vLyBhZGRfcnZhbHVlX3JlZmVyZW5jZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGFkZF9ydmFsdWVfcmVmZXJlbmNlCisgICAgOiBwdWJsaWMgX19hZGRfcnZhbHVlX3JlZmVyZW5jZV9oZWxwZXI8X1RwPgorICAgIHsgfTsKKworICAvLyBTY2FsYXIgcHJvcGVydGllcyBhbmQgdHJhbnNmb3JtYXRpb25zLgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwKKwkgICBib29sID0gaXNfaW50ZWdyYWw8X1RwPjo6dmFsdWUsCisJICAgYm9vbCA9IGlzX2Zsb2F0aW5nX3BvaW50PF9UcD46OnZhbHVlPgorICAgIHN0cnVjdCBfX2lzX3NpZ25lZF9oZWxwZXIKKyAgICA6IHB1YmxpYyBmYWxzZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faXNfc2lnbmVkX2hlbHBlcjxfVHAsIGZhbHNlLCB0cnVlPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX3NpZ25lZF9oZWxwZXI8X1RwLCB0cnVlLCBmYWxzZT4KKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBzdGF0aWNfY2FzdDxib29sPihfVHAoLTEpIDwgX1RwKDApKT4KKyAgICB7IH07CisKKyAgLy8vIGlzX3NpZ25lZAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX3NpZ25lZAorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIF9faXNfc2lnbmVkX2hlbHBlcjxfVHA+Ojp2YWx1ZT4KKyAgICB7IH07CisKKyAgLy8vIGlzX3Vuc2lnbmVkCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfdW5zaWduZWQKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCAoaXNfYXJpdGhtZXRpYzxfVHA+Ojp2YWx1ZQorCQkJCSAgICAgICYmICFpc19zaWduZWQ8X1RwPjo6dmFsdWUpPgorICAgIHsgfTsKKworICAvLyBNZW1iZXIgaW50cm9zcGVjdGlvbi4KKworICAvLy8gaXNfdHJpdmlhbAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX3RyaXZpYWwKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBfX2lzX3RyaXZpYWwoX1RwKT4KKyAgICB7IH07CisKKyAgLy8vIGlzX3N0YW5kYXJkX2xheW91dAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX3N0YW5kYXJkX2xheW91dAorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIF9faXNfc3RhbmRhcmRfbGF5b3V0KF9UcCk+CisgICAgeyB9OworCisgIC8vLyBpc19wb2QKKyAgLy8gQ291bGQgdXNlIGlzX3N0YW5kYXJkX2xheW91dCAmJiBpc190cml2aWFsIGluc3RlYWQgb2YgdGhlIGJ1aWx0aW4uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfcG9kCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX19pc19wb2QoX1RwKT4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHR5cGVuYW1lIGFkZF9ydmFsdWVfcmVmZXJlbmNlPF9UcD46OnR5cGUgZGVjbHZhbCgpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgY2xhc3MgX19pc19jb25zdHJ1Y3RpYmxlX2hlbHBlcgorICAgIDogcHVibGljIF9fc2ZpbmFlX3R5cGVzCisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUuLi4gX0FyZ3MxPgorICAgICAgICBzdGF0aWMgZGVjbHR5cGUoX1RwMShkZWNsdmFsPF9BcmdzMT4oKS4uLiksIF9fb25lKCkpIF9fdGVzdChpbnQpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWUuLi4+CisgICAgICAgIHN0YXRpYyBfX3R3byBfX3Rlc3QoLi4uKTsKKworICAgIHB1YmxpYzoKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWUgPSBzaXplb2YoX190ZXN0PF9UcCwgX0FyZ3MuLi4+KDApKSA9PSAxOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQXJnPgorICAgIGNsYXNzIF9faXNfY29uc3RydWN0aWJsZV9oZWxwZXI8X1RwLCBfQXJnPgorICAgIDogcHVibGljIF9fc2ZpbmFlX3R5cGVzCisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX0FyZzE+CisgICAgICAgIHN0YXRpYyBkZWNsdHlwZShzdGF0aWNfY2FzdDxfVHAxPihkZWNsdmFsPF9BcmcxPigpKSwgX19vbmUoKSkKKwlfX3Rlc3QoaW50KTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lPgorICAgICAgICBzdGF0aWMgX190d28gX190ZXN0KC4uLik7CisKKyAgICBwdWJsaWM6CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBfX3ZhbHVlID0gc2l6ZW9mKF9fdGVzdDxfVHAsIF9Bcmc+KDApKSA9PSAxOworICAgIH07CisKKyAgLy8vIGlzX2NvbnN0cnVjdGlibGUKKyAgLy8gWFhYIEZJWE1FCisgIC8vIFRoZSBDKysweCBzcGVjaWZpY2F0aW9ucyByZXF1aXJlIGZyb250LWVuZCBzdXBwb3J0LCBzZWUgTjIyNTUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgc3RydWN0IGlzX2NvbnN0cnVjdGlibGUKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLAorCQkJICAgICAgIF9faXNfY29uc3RydWN0aWJsZV9oZWxwZXI8X1RwLAorCQkJCQkJCSBfQXJncy4uLj46Ol9fdmFsdWU+CisgICAgeyB9OworCisgIC8vLyBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcgorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIF9faGFzX3RyaXZpYWxfY29uc3RydWN0b3IoX1RwKT4KKyAgICB7IH07CisKKyAgLy8vIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3IKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX19oYXNfdHJpdmlhbF9jb3B5KF9UcCk+CisgICAgeyB9OworCisgIC8vLyBoYXNfdHJpdmlhbF9hc3NpZ24KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBoYXNfdHJpdmlhbF9hc3NpZ24KKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBfX2hhc190cml2aWFsX2Fzc2lnbihfVHApPgorICAgIHsgfTsKKworICAvLy8gaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGhhc190cml2aWFsX2Rlc3RydWN0b3IKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBfX2hhc190cml2aWFsX2Rlc3RydWN0b3IoX1RwKT4KKyAgICB7IH07CisKKyAgLy8vIGhhc19ub3Rocm93X2RlZmF1bHRfY29uc3RydWN0b3IKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBoYXNfbm90aHJvd19kZWZhdWx0X2NvbnN0cnVjdG9yCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX19oYXNfbm90aHJvd19jb25zdHJ1Y3RvcihfVHApPgorICAgIHsgfTsKKworICAvLy8gaGFzX25vdGhyb3dfY29weV9jb25zdHJ1Y3RvcgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGhhc19ub3Rocm93X2NvcHlfY29uc3RydWN0b3IKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBfX2hhc19ub3Rocm93X2NvcHkoX1RwKT4KKyAgICB7IH07CisKKyAgLy8vIGhhc19ub3Rocm93X2Fzc2lnbgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGhhc19ub3Rocm93X2Fzc2lnbgorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIF9faGFzX25vdGhyb3dfYXNzaWduKF9UcCk+CisgICAgeyB9OworCisgIC8vIFJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0eXBlcy4KKworICAvLy8gaXNfYmFzZV9vZgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmFzZSwgdHlwZW5hbWUgX0Rlcml2ZWQ+CisgICAgc3RydWN0IGlzX2Jhc2Vfb2YKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBfX2lzX2Jhc2Vfb2YoX0Jhc2UsIF9EZXJpdmVkKT4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zyb20sIHR5cGVuYW1lIF9UbywKKwkgICBib29sID0gKGlzX3ZvaWQ8X0Zyb20+Ojp2YWx1ZSB8fCBpc192b2lkPF9Ubz46OnZhbHVlCisJCSAgIHx8IGlzX2Z1bmN0aW9uPF9Ubz46OnZhbHVlIHx8IGlzX2FycmF5PF9Ubz46OnZhbHVlKT4KKyAgICBzdHJ1Y3QgX19pc19jb252ZXJ0aWJsZV9oZWxwZXIKKyAgICB7IHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWUgPSAoaXNfdm9pZDxfRnJvbT46OnZhbHVlCisJCQkJICAgJiYgaXNfdm9pZDxfVG8+Ojp2YWx1ZSk7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zyb20sIHR5cGVuYW1lIF9Ubz4KKyAgICBjbGFzcyBfX2lzX2NvbnZlcnRpYmxlX2hlbHBlcjxfRnJvbSwgX1RvLCBmYWxzZT4KKyAgICA6IHB1YmxpYyBfX3NmaW5hZV90eXBlcworICAgIHsKKyAgICAgIHN0YXRpYyBfX29uZSBfX3Rlc3QoX1RvKTsKKyAgICAgIHN0YXRpYyBfX3R3byBfX3Rlc3QoLi4uKTsKKworICAgIHB1YmxpYzoKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWUgPSBzaXplb2YoX190ZXN0KGRlY2x2YWw8X0Zyb20+KCkpKSA9PSAxOworICAgIH07CisKKyAgLy8vIGlzX2NvbnZlcnRpYmxlCisgIC8vIFhYWCBGSVhNRQorICAvLyBUaGUgQysrMHggc3BlY2lmaWNhdGlvbnMgcmVxdWlyZSBmcm9udC1lbmQgc3VwcG9ydCwgc2VlIE4yMjU1LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnJvbSwgdHlwZW5hbWUgX1RvPgorICAgIHN0cnVjdCBpc19jb252ZXJ0aWJsZQorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsCisJCQkgICAgICAgX19pc19jb252ZXJ0aWJsZV9oZWxwZXI8X0Zyb20sIF9Ubz46Ol9fdmFsdWU+CisgICAgeyB9OworCisgIC8vLyBpc19leHBsaWNpdGx5X2NvbnZlcnRpYmxlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gcm9tLCB0eXBlbmFtZSBfVG8+CisgICAgc3RydWN0IGlzX2V4cGxpY2l0bHlfY29udmVydGlibGUKKyAgICA6IHB1YmxpYyBpc19jb25zdHJ1Y3RpYmxlPF9UbywgX0Zyb20+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IF9MZW4+CisgICAgc3RydWN0IF9fYWxpZ25lZF9zdG9yYWdlX21zYQorICAgIHsgCisgICAgICB1bmlvbiBfX3R5cGUKKyAgICAgIHsKKwl1bnNpZ25lZCBjaGFyIF9fZGF0YVtfTGVuXTsKKwlzdHJ1Y3QgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18pKSB7IH0gX19hbGlnbjsgCisgICAgICB9OworICAgIH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgQWxpZ25tZW50IHR5cGUuCisgICAqCisgICAqICBUaGUgdmFsdWUgb2YgX0FsaWduIGlzIGEgZGVmYXVsdC1hbGlnbm1lbnQgd2hpY2ggc2hhbGwgYmUgdGhlCisgICAqICBtb3N0IHN0cmluZ2VudCBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgZm9yIGFueSBDKysgb2JqZWN0IHR5cGUKKyAgICogIHdob3NlIHNpemUgaXMgbm8gZ3JlYXRlciB0aGFuIF9MZW4gKDMuOSkuIFRoZSBtZW1iZXIgdHlwZWRlZgorICAgKiAgdHlwZSBzaGFsbCBiZSBhIFBPRCB0eXBlIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pbml0aWFsaXplZAorICAgKiAgc3RvcmFnZSBmb3IgYW55IG9iamVjdCB3aG9zZSBzaXplIGlzIGF0IG1vc3QgX0xlbiBhbmQgd2hvc2UKKyAgICogIGFsaWdubWVudCBpcyBhIGRpdmlzb3Igb2YgX0FsaWduLgorICAqLworICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfTGVuLCBzdGQ6OnNpemVfdCBfQWxpZ24gPQorCSAgIF9fYWxpZ25vZl9fKHR5cGVuYW1lIF9fYWxpZ25lZF9zdG9yYWdlX21zYTxfTGVuPjo6X190eXBlKT4KKyAgICBzdHJ1Y3QgYWxpZ25lZF9zdG9yYWdlCisgICAgeyAKKyAgICAgIHVuaW9uIHR5cGUKKyAgICAgIHsKKwl1bnNpZ25lZCBjaGFyIF9fZGF0YVtfTGVuXTsKKwlzdHJ1Y3QgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oKF9BbGlnbikpKSkgeyB9IF9fYWxpZ247IAorICAgICAgfTsKKyAgICB9OworCisKKyAgLy8gRGVmaW5lIGEgbmVzdGVkIHR5cGUgaWYgc29tZSBwcmVkaWNhdGUgaG9sZHMuCisgIC8vIFByaW1hcnkgdGVtcGxhdGUuCisgIC8vLyBlbmFibGVfaWYKKyAgdGVtcGxhdGU8Ym9vbCwgdHlwZW5hbWUgX1RwID0gdm9pZD4KKyAgICBzdHJ1Y3QgZW5hYmxlX2lmIAorICAgIHsgfTsKKworICAvLyBQYXJ0aWFsIHNwZWNpYWxpemF0aW9uIGZvciB0cnVlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGVuYWJsZV9pZjx0cnVlLCBfVHA+CisgICAgeyB0eXBlZGVmIF9UcCB0eXBlOyB9OworCisKKyAgLy8gQSBjb25kaXRpb25hbCBleHByZXNzaW9uLCBidXQgZm9yIHR5cGVzLiBJZiB0cnVlLCBmaXJzdCwgaWYgZmFsc2UsIHNlY29uZC4KKyAgLy8gUHJpbWFyeSB0ZW1wbGF0ZS4KKyAgLy8vIGNvbmRpdGlvbmFsCisgIHRlbXBsYXRlPGJvb2wgX0NvbmQsIHR5cGVuYW1lIF9JZnRydWUsIHR5cGVuYW1lIF9JZmZhbHNlPgorICAgIHN0cnVjdCBjb25kaXRpb25hbAorICAgIHsgdHlwZWRlZiBfSWZ0cnVlIHR5cGU7IH07CisKKyAgLy8gUGFydGlhbCBzcGVjaWFsaXphdGlvbiBmb3IgZmFsc2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JZnRydWUsIHR5cGVuYW1lIF9JZmZhbHNlPgorICAgIHN0cnVjdCBjb25kaXRpb25hbDxmYWxzZSwgX0lmdHJ1ZSwgX0lmZmFsc2U+CisgICAgeyB0eXBlZGVmIF9JZmZhbHNlIHR5cGU7IH07CisKKworICAvLyBEZWNheSB0cmFpdCBmb3IgYXJyYXlzIGFuZCBmdW5jdGlvbnMsIHVzZWQgZm9yIHBlcmZlY3QgZm9yd2FyZGluZworICAvLyBpbiBtYWtlX3BhaXIsIG1ha2VfdHVwbGUsIGV0Yy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwLCAKKwkgICBib29sIF9Jc0FycmF5ID0gaXNfYXJyYXk8X1VwPjo6dmFsdWUsCisJICAgYm9vbCBfSXNGdW5jdGlvbiA9IGlzX2Z1bmN0aW9uPF9VcD46OnZhbHVlPiAKKyAgICBzdHJ1Y3QgX19kZWNheV9zZWxlY3RvcjsKKworICAvLyBOQjogRFIgNzA1LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+IAorICAgIHN0cnVjdCBfX2RlY2F5X3NlbGVjdG9yPF9VcCwgZmFsc2UsIGZhbHNlPgorICAgIHsgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVfY3Y8X1VwPjo6dHlwZSBfX3R5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPiAKKyAgICBzdHJ1Y3QgX19kZWNheV9zZWxlY3RvcjxfVXAsIHRydWUsIGZhbHNlPgorICAgIHsgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVfZXh0ZW50PF9VcD46OnR5cGUqIF9fdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+IAorICAgIHN0cnVjdCBfX2RlY2F5X3NlbGVjdG9yPF9VcCwgZmFsc2UsIHRydWU+CisgICAgeyB0eXBlZGVmIHR5cGVuYW1lIGFkZF9wb2ludGVyPF9VcD46OnR5cGUgX190eXBlOyB9OworCisgIC8vLyBkZWNheQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IAorICAgIGNsYXNzIGRlY2F5IAorICAgIHsgCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHJlbW92ZV9yZWZlcmVuY2U8X1RwPjo6dHlwZSBfX3JlbW92ZV90eXBlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2RlY2F5X3NlbGVjdG9yPF9fcmVtb3ZlX3R5cGU+OjpfX3R5cGUgdHlwZTsKKyAgICB9OworCisKKyAgLy8gVXRpbGl0eSBmb3IgY29uc3RydWN0aW5nIGlkZW50aWNhbGx5IGN2LXF1YWxpZmllZCB0eXBlcy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VucXVhbGlmaWVkLCBib29sIF9Jc0NvbnN0LCBib29sIF9Jc1ZvbD4KKyAgICBzdHJ1Y3QgX19jdl9zZWxlY3RvcjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5xdWFsaWZpZWQ+CisgICAgc3RydWN0IF9fY3Zfc2VsZWN0b3I8X1VucXVhbGlmaWVkLCBmYWxzZSwgZmFsc2U+CisgICAgeyB0eXBlZGVmIF9VbnF1YWxpZmllZCBfX3R5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VucXVhbGlmaWVkPgorICAgIHN0cnVjdCBfX2N2X3NlbGVjdG9yPF9VbnF1YWxpZmllZCwgZmFsc2UsIHRydWU+CisgICAgeyB0eXBlZGVmIHZvbGF0aWxlIF9VbnF1YWxpZmllZCBfX3R5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VucXVhbGlmaWVkPgorICAgIHN0cnVjdCBfX2N2X3NlbGVjdG9yPF9VbnF1YWxpZmllZCwgdHJ1ZSwgZmFsc2U+CisgICAgeyB0eXBlZGVmIGNvbnN0IF9VbnF1YWxpZmllZCBfX3R5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VucXVhbGlmaWVkPgorICAgIHN0cnVjdCBfX2N2X3NlbGVjdG9yPF9VbnF1YWxpZmllZCwgdHJ1ZSwgdHJ1ZT4KKyAgICB7IHR5cGVkZWYgY29uc3Qgdm9sYXRpbGUgX1VucXVhbGlmaWVkIF9fdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUXVhbGlmaWVkLCB0eXBlbmFtZSBfVW5xdWFsaWZpZWQsCisJICAgYm9vbCBfSXNDb25zdCA9IGlzX2NvbnN0PF9RdWFsaWZpZWQ+Ojp2YWx1ZSwKKwkgICBib29sIF9Jc1ZvbCA9IGlzX3ZvbGF0aWxlPF9RdWFsaWZpZWQ+Ojp2YWx1ZT4KKyAgICBjbGFzcyBfX21hdGNoX2N2X3F1YWxpZmllcnMKKyAgICB7CisgICAgICB0eXBlZGVmIF9fY3Zfc2VsZWN0b3I8X1VucXVhbGlmaWVkLCBfSXNDb25zdCwgX0lzVm9sPiBfX21hdGNoOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX21hdGNoOjpfX3R5cGUgX190eXBlOyAKKyAgICB9OworCisKKyAgLy8gVXRpbGl0eSBmb3IgZmluZGluZyB0aGUgdW5zaWduZWQgdmVyc2lvbnMgb2Ygc2lnbmVkIGludGVncmFsIHR5cGVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fbWFrZV91bnNpZ25lZAorICAgIHsgdHlwZWRlZiBfVHAgX190eXBlOyB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19tYWtlX3Vuc2lnbmVkPGNoYXI+CisgICAgeyB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX190eXBlOyB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19tYWtlX3Vuc2lnbmVkPHNpZ25lZCBjaGFyPgorICAgIHsgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdHlwZTsgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fbWFrZV91bnNpZ25lZDxzaG9ydD4KKyAgICB7IHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX190eXBlOyB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19tYWtlX3Vuc2lnbmVkPGludD4KKyAgICB7IHR5cGVkZWYgdW5zaWduZWQgaW50IF9fdHlwZTsgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fbWFrZV91bnNpZ25lZDxsb25nPgorICAgIHsgdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdHlwZTsgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fbWFrZV91bnNpZ25lZDxsb25nIGxvbmc+CisgICAgeyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3R5cGU7IH07CisKKworICAvLyBTZWxlY3QgYmV0d2VlbiBpbnRlZ3JhbCBhbmQgZW51bTogbm90IHBvc3NpYmxlIHRvIGJlIGJvdGguCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgCisJICAgYm9vbCBfSXNJbnQgPSBpc19pbnRlZ3JhbDxfVHA+Ojp2YWx1ZSwKKwkgICBib29sIF9Jc0VudW0gPSBpc19lbnVtPF9UcD46OnZhbHVlPgorICAgIGNsYXNzIF9fbWFrZV91bnNpZ25lZF9zZWxlY3RvcjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgX19tYWtlX3Vuc2lnbmVkX3NlbGVjdG9yPF9UcCwgdHJ1ZSwgZmFsc2U+CisgICAgeworICAgICAgdHlwZWRlZiBfX21ha2VfdW5zaWduZWQ8dHlwZW5hbWUgcmVtb3ZlX2N2PF9UcD46OnR5cGU+IF9fdW5zaWduZWR0OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3Vuc2lnbmVkdDo6X190eXBlIF9fdW5zaWduZWRfdHlwZTsKKyAgICAgIHR5cGVkZWYgX19tYXRjaF9jdl9xdWFsaWZpZXJzPF9UcCwgX191bnNpZ25lZF90eXBlPiBfX2N2X3Vuc2lnbmVkOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2N2X3Vuc2lnbmVkOjpfX3R5cGUgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIF9fbWFrZV91bnNpZ25lZF9zZWxlY3RvcjxfVHAsIGZhbHNlLCB0cnVlPgorICAgIHsKKyAgICAgIC8vIFdpdGggLWZzaG9ydC1lbnVtcywgYW4gZW51bSBtYXkgYmUgYXMgc21hbGwgYXMgYSBjaGFyLgorICAgICAgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fc21hbGxlc3Q7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBfX2IwID0gc2l6ZW9mKF9UcCkgPD0gc2l6ZW9mKF9fc21hbGxlc3QpOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX19iMSA9IHNpemVvZihfVHApIDw9IHNpemVvZih1bnNpZ25lZCBzaG9ydCk7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBfX2IyID0gc2l6ZW9mKF9UcCkgPD0gc2l6ZW9mKHVuc2lnbmVkIGludCk7CisgICAgICB0eXBlZGVmIGNvbmRpdGlvbmFsPF9fYjIsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZz4gX19jb25kMjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19jb25kMjo6dHlwZSBfX2NvbmQyX3R5cGU7CisgICAgICB0eXBlZGVmIGNvbmRpdGlvbmFsPF9fYjEsIHVuc2lnbmVkIHNob3J0LCBfX2NvbmQyX3R5cGU+IF9fY29uZDE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fY29uZDE6OnR5cGUgX19jb25kMV90eXBlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjb25kaXRpb25hbDxfX2IwLCBfX3NtYWxsZXN0LCBfX2NvbmQxX3R5cGU+Ojp0eXBlIF9fdHlwZTsKKyAgICB9OworCisgIC8vIEdpdmVuIGFuIGludGVncmFsL2VudW0gdHlwZSwgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHVuc2lnbmVkCisgIC8vIGludGVnZXIgdHlwZS4KKyAgLy8gUHJpbWFyeSB0ZW1wbGF0ZS4KKyAgLy8vIG1ha2VfdW5zaWduZWQKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBtYWtlX3Vuc2lnbmVkIAorICAgIHsgdHlwZWRlZiB0eXBlbmFtZSBfX21ha2VfdW5zaWduZWRfc2VsZWN0b3I8X1RwPjo6X190eXBlIHR5cGU7IH07CisKKyAgLy8gSW50ZWdyYWwsIGJ1dCBkb24ndCBkZWZpbmUuCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgbWFrZV91bnNpZ25lZDxib29sPjsKKworCisgIC8vIFV0aWxpdHkgZm9yIGZpbmRpbmcgdGhlIHNpZ25lZCB2ZXJzaW9ucyBvZiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlcy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX21ha2Vfc2lnbmVkCisgICAgeyB0eXBlZGVmIF9UcCBfX3R5cGU7IH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX21ha2Vfc2lnbmVkPGNoYXI+CisgICAgeyB0eXBlZGVmIHNpZ25lZCBjaGFyIF9fdHlwZTsgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fbWFrZV9zaWduZWQ8dW5zaWduZWQgY2hhcj4KKyAgICB7IHR5cGVkZWYgc2lnbmVkIGNoYXIgX190eXBlOyB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19tYWtlX3NpZ25lZDx1bnNpZ25lZCBzaG9ydD4KKyAgICB7IHR5cGVkZWYgc2lnbmVkIHNob3J0IF9fdHlwZTsgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fbWFrZV9zaWduZWQ8dW5zaWduZWQgaW50PgorICAgIHsgdHlwZWRlZiBzaWduZWQgaW50IF9fdHlwZTsgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fbWFrZV9zaWduZWQ8dW5zaWduZWQgbG9uZz4KKyAgICB7IHR5cGVkZWYgc2lnbmVkIGxvbmcgX190eXBlOyB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19tYWtlX3NpZ25lZDx1bnNpZ25lZCBsb25nIGxvbmc+CisgICAgeyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgX190eXBlOyB9OworCisKKyAgLy8gU2VsZWN0IGJldHdlZW4gaW50ZWdyYWwgYW5kIGVudW06IG5vdCBwb3NzaWJsZSB0byBiZSBib3RoLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIAorCSAgIGJvb2wgX0lzSW50ID0gaXNfaW50ZWdyYWw8X1RwPjo6dmFsdWUsCisJICAgYm9vbCBfSXNFbnVtID0gaXNfZW51bTxfVHA+Ojp2YWx1ZT4KKyAgICBjbGFzcyBfX21ha2Vfc2lnbmVkX3NlbGVjdG9yOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyBfX21ha2Vfc2lnbmVkX3NlbGVjdG9yPF9UcCwgdHJ1ZSwgZmFsc2U+CisgICAgeworICAgICAgdHlwZWRlZiBfX21ha2Vfc2lnbmVkPHR5cGVuYW1lIHJlbW92ZV9jdjxfVHA+Ojp0eXBlPiBfX3NpZ25lZHQ7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc2lnbmVkdDo6X190eXBlIF9fc2lnbmVkX3R5cGU7CisgICAgICB0eXBlZGVmIF9fbWF0Y2hfY3ZfcXVhbGlmaWVyczxfVHAsIF9fc2lnbmVkX3R5cGU+IF9fY3Zfc2lnbmVkOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2N2X3NpZ25lZDo6X190eXBlIF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyBfX21ha2Vfc2lnbmVkX3NlbGVjdG9yPF9UcCwgZmFsc2UsIHRydWU+CisgICAgeworICAgICAgLy8gV2l0aCAtZnNob3J0LWVudW1zLCBhbiBlbnVtIG1heSBiZSBhcyBzbWFsbCBhcyBhIGNoYXIuCisgICAgICB0eXBlZGVmIHNpZ25lZCBjaGFyIF9fc21hbGxlc3Q7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBfX2IwID0gc2l6ZW9mKF9UcCkgPD0gc2l6ZW9mKF9fc21hbGxlc3QpOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX19iMSA9IHNpemVvZihfVHApIDw9IHNpemVvZihzaWduZWQgc2hvcnQpOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX19iMiA9IHNpemVvZihfVHApIDw9IHNpemVvZihzaWduZWQgaW50KTsKKyAgICAgIHR5cGVkZWYgY29uZGl0aW9uYWw8X19iMiwgc2lnbmVkIGludCwgc2lnbmVkIGxvbmc+IF9fY29uZDI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fY29uZDI6OnR5cGUgX19jb25kMl90eXBlOworICAgICAgdHlwZWRlZiBjb25kaXRpb25hbDxfX2IxLCBzaWduZWQgc2hvcnQsIF9fY29uZDJfdHlwZT4gX19jb25kMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19jb25kMTo6dHlwZSBfX2NvbmQxX3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGNvbmRpdGlvbmFsPF9fYjAsIF9fc21hbGxlc3QsIF9fY29uZDFfdHlwZT46OnR5cGUgX190eXBlOworICAgIH07CisKKyAgLy8gR2l2ZW4gYW4gaW50ZWdyYWwvZW51bSB0eXBlLCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgc2lnbmVkCisgIC8vIGludGVnZXIgdHlwZS4KKyAgLy8gUHJpbWFyeSB0ZW1wbGF0ZS4KKyAgLy8vIG1ha2Vfc2lnbmVkCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgbWFrZV9zaWduZWQgCisgICAgeyB0eXBlZGVmIHR5cGVuYW1lIF9fbWFrZV9zaWduZWRfc2VsZWN0b3I8X1RwPjo6X190eXBlIHR5cGU7IH07CisKKyAgLy8gSW50ZWdyYWwsIGJ1dCBkb24ndCBkZWZpbmUuCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgbWFrZV9zaWduZWQ8Ym9vbD47CisKKyAgLy8vIGNvbW1vbl90eXBlCisgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9UcD4KKyAgICBzdHJ1Y3QgY29tbW9uX3R5cGU7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBjb21tb25fdHlwZTxfVHA+CisgICAgeyB0eXBlZGVmIF9UcCB0eXBlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIHN0cnVjdCBjb21tb25fdHlwZTxfVHAsIF9VcD4KKyAgICB7IHR5cGVkZWYgZGVjbHR5cGUodHJ1ZSA/IGRlY2x2YWw8X1RwPigpIDogZGVjbHZhbDxfVXA+KCkpIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXAsIHR5cGVuYW1lLi4uIF9WcD4KKyAgICBzdHJ1Y3QgY29tbW9uX3R5cGU8X1RwLCBfVXAsIF9WcC4uLj4KKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lCisgICAgICAgIGNvbW1vbl90eXBlPHR5cGVuYW1lIGNvbW1vbl90eXBlPF9UcCwgX1VwPjo6dHlwZSwgX1ZwLi4uPjo6dHlwZSB0eXBlOworICAgIH07CisgIC8vIEB9IGdyb3VwIG1ldGFwcm9ncmFtbWluZworCisgIC8vLyBkZWNsdmFsCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19kZWNsdmFsX3Byb3RlY3RvcgorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIF9fc3RvcCA9IGZhbHNlOworICAgICAgc3RhdGljIHR5cGVuYW1lIGFkZF9ydmFsdWVfcmVmZXJlbmNlPF9UcD46OnR5cGUgX19kZWxlZ2F0ZSgpOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBhZGRfcnZhbHVlX3JlZmVyZW5jZTxfVHA+Ojp0eXBlCisgICAgZGVjbHZhbCgpCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChfX2RlY2x2YWxfcHJvdGVjdG9yPF9UcD46Ol9fc3RvcCwKKwkJICAgICJkZWNsdmFsKCkgbXVzdCBub3QgYmUgdXNlZCEiKTsKKyAgICAgIHJldHVybiBfX2RlY2x2YWxfcHJvdGVjdG9yPF9UcD46Ol9fZGVsZWdhdGUoKTsKKyAgICB9Cit9CisKKyNlbmRpZiAgLy8gX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKworI2VuZGlmICAvLyBfR0xJQkNYWF9UWVBFX1RSQUlUUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy90eXBlaW5mbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHlwZWluZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE0NzM2ZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdHlwZWluZm8KQEAgLTAsMCArMSwyMDggQEAKKy8vIFJUVEkgc3VwcG9ydCBmb3IgLSotIEMrKyAtKi0KKy8vIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKy8vIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDksIDIwMTAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKy8vCisvLyBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorLy8gCisvLyBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLy8gCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHlwZWluZm8KKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX1RZUEVJTkZPCisjZGVmaW5lIF9UWVBFSU5GTworCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxleGNlcHRpb24+CisKKyNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcHVzaChkZWZhdWx0KQorCitleHRlcm4gIkMrKyIgeworCituYW1lc3BhY2UgX19jeHhhYml2MQoreworICBjbGFzcyBfX2NsYXNzX3R5cGVfaW5mbzsKK30gLy8gbmFtZXNwYWNlIF9fY3h4YWJpdjEKKworLy8gRGV0ZXJtaW5lIHdoZXRoZXIgdHlwZWluZm8gbmFtZXMgZm9yIHRoZSBzYW1lIHR5cGUgYXJlIG1lcmdlZCAoaW4gd2hpY2gKKy8vIGNhc2UgY29tcGFyaXNvbiBjYW4ganVzdCBjb21wYXJlIHBvaW50ZXJzKSBvciBub3QgKGluIHdoaWNoIGNhc2Ugc3RyaW5ncworLy8gbXVzdCBiZSBjb21wYXJlZCksIGFuZCB3aGV0aGVyIGNvbXBhcmlzb24gaXMgdG8gYmUgaW1wbGVtZW50ZWQgaW5saW5lIG9yCisvLyBub3QuICBXZSB1c2VkIHRvIGRvIGlubGluZSBwb2ludGVyIGNvbXBhcmlzb24gYnkgZGVmYXVsdCBpZiB3ZWFrIHN5bWJvbHMKKy8vIGFyZSBhdmFpbGFibGUsIGJ1dCBldmVuIHdpdGggd2VhayBzeW1ib2xzIHNvbWV0aW1lcyBuYW1lcyBhcmUgbm90IG1lcmdlZAorLy8gd2hlbiBvYmplY3RzIGFyZSBsb2FkZWQgd2l0aCBSVExEX0xPQ0FMLCBzbyBub3cgd2UgYWx3YXlzIHVzZSBzdHJjbXAgYnkKKy8vIGRlZmF1bHQuICBGb3IgQUJJIGNvbXBhdGliaWxpdHksIHdlIGRvIHRoZSBzdHJjbXAgaW5saW5lIGlmIHdlYWsgc3ltYm9scworLy8gYXJlIGF2YWlsYWJsZSwgYW5kIG91dC1vZi1saW5lIGlmIG5vdC4gIE91dC1vZi1saW5lIHBvaW50ZXIgY29tcGFyaXNvbgorLy8gaXMgdXNlZCB3aGVyZSB0aGUgb2JqZWN0IGZpbGVzIGFyZSB0byBiZSBwb3J0YWJsZSB0byBtdWx0aXBsZSBzeXN0ZW1zLAorLy8gc29tZSBvZiB3aGljaCBtYXkgbm90IGJlIGFibGUgdG8gdXNlIHBvaW50ZXIgY29tcGFyaXNvbiwgYnV0IHRoZQorLy8gcGFydGljdWxhciBzeXN0ZW0gZm9yIHdoaWNoIGxpYnN0ZGMrKyBpcyBiZWluZyBidWlsdCBjYW4gdXNlIHBvaW50ZXIKKy8vIGNvbXBhcmlzb247IGluIHBhcnRpY3VsYXIgZm9yIG1vc3QgQVJNIEVBQkkgc3lzdGVtcywgd2hlcmUgdGhlIEFCSQorLy8gc3BlY2lmaWVzIG91dC1vZi1saW5lIGNvbXBhcmlzb24uICBUaGUgY29tcGlsZXIncyB0YXJnZXQgY29uZmlndXJhdGlvbgorLy8gY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0cyBieSBkZWZpbmluZyBfX0dYWF9UWVBFSU5GT19FUVVBTElUWV9JTkxJTkUgdG8KKy8vIDEgb3IgMCB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCBjb21wYXJpc29uIGlzIGlubGluZSwgYW5kCisvLyBfX0dYWF9NRVJHRURfVFlQRUlORk9fTkFNRVMgdG8gMSBvciAwIHRvIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHBvaW50ZXIKKy8vIGNvbXBhcmlzb24gY2FuIGJlIHVzZWQuCisKKyNpZm5kZWYgX19HWFhfTUVSR0VEX1RZUEVJTkZPX05BTUVTCisvLyBCeSBkZWZhdWx0LCB0eXBlaW5mbyBuYW1lcyBhcmUgbm90IG1lcmdlZC4KKyNkZWZpbmUgX19HWFhfTUVSR0VEX1RZUEVJTkZPX05BTUVTIDAKKyNlbmRpZgorCisvLyBCeSBkZWZhdWx0IGZvbGxvdyB0aGUgb2xkIGlubGluZSBydWxlcyB0byBhdm9pZCBBQkkgY2hhbmdlcy4KKyNpZm5kZWYgX19HWFhfVFlQRUlORk9fRVFVQUxJVFlfSU5MSU5FCisgICNpZiAhX19HWFhfV0VBS19fCisgICAgI2RlZmluZSBfX0dYWF9UWVBFSU5GT19FUVVBTElUWV9JTkxJTkUgMAorICAjZWxzZQorICAgICNkZWZpbmUgX19HWFhfVFlQRUlORk9fRVFVQUxJVFlfSU5MSU5FIDEKKyAgI2VuZGlmCisjZW5kaWYKKworbmFtZXNwYWNlIHN0ZCAKK3sKKyAgLyoqCisgICAqICBAYnJpZWYgIFBhcnQgb2YgUlRUSS4KKyAgICoKKyAgICogIFRoZSBAYyB0eXBlX2luZm8gY2xhc3MgZGVzY3JpYmVzIHR5cGUgaW5mb3JtYXRpb24gZ2VuZXJhdGVkIGJ5CisgICAqICBhbiBpbXBsZW1lbnRhdGlvbi4KKyAgKi8KKyAgY2xhc3MgdHlwZV9pbmZvIAorICB7CisgIHB1YmxpYzoKKyAgICAvKiogRGVzdHJ1Y3RvciBmaXJzdC4gQmVpbmcgdGhlIGZpcnN0IG5vbi1pbmxpbmUgdmlydHVhbCBmdW5jdGlvbiwgdGhpcworICAgICAqICBjb250cm9scyBpbiB3aGljaCB0cmFuc2xhdGlvbiB1bml0IHRoZSB2dGFibGUgaXMgZW1pdHRlZC4gVGhlCisgICAgICogIGNvbXBpbGVyIG1ha2VzIHVzZSBvZiB0aGF0IGluZm9ybWF0aW9uIHRvIGtub3cgd2hlcmUgdG8gZW1pdAorICAgICAqICB0aGUgcnVudGltZS1tYW5kYXRlZCB0eXBlX2luZm8gc3RydWN0dXJlcyBpbiB0aGUgbmV3LWFiaS4gICovCisgICAgdmlydHVhbCB+dHlwZV9pbmZvKCk7CisKKyAgICAvKiogUmV0dXJucyBhbiBAZSBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGJ5dGUgc3RyaW5nOyB0aGlzIGlzIG5vdAorICAgICAqICBwb3J0YWJsZSBiZXR3ZWVuIGNvbXBpbGVycyEgICovCisgICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0CisgICAgeyByZXR1cm4gX19uYW1lWzBdID09ICcqJyA/IF9fbmFtZSArIDEgOiBfX25hbWU7IH0KKworI2lmICFfX0dYWF9UWVBFSU5GT19FUVVBTElUWV9JTkxJTkUKKyAgICAvLyBJbiBvbGQgYWJpLCBvciB3aGVuIHdlYWsgc3ltYm9scyBhcmUgbm90IHN1cHBvcnRlZCwgdGhlcmUgY2FuCisgICAgLy8gYmUgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIGEgdHlwZV9pbmZvIG9iamVjdCBmb3Igb25lCisgICAgLy8gdHlwZS4gVW5pcXVlbmVzcyBtdXN0IHVzZSB0aGUgX25hbWUgdmFsdWUsIG5vdCBvYmplY3QgYWRkcmVzcy4KKyAgICBib29sIGJlZm9yZShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3Q7CisjZWxzZQorICAjaWYgIV9fR1hYX01FUkdFRF9UWVBFSU5GT19OQU1FUworICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgQGMgKnRoaXMgcHJlY2VkZXMgQGMgX19hcmcgaW4gdGhlIGltcGxlbWVudGF0aW9uJ3MKKyAgICAgKiAgY29sbGF0aW9uIG9yZGVyLiAgKi8KKyAgICAvLyBFdmVuIHdpdGggdGhlIG5ldyBhYmksIG9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IGRsb3BlbgorICAgIC8vIHdlIGNhbiBydW4gaW50byBjYXNlcyB3aGVyZSB0eXBlX2luZm8gbmFtZXMgYXJlbid0IG1lcmdlZCwKKyAgICAvLyBzbyB3ZSBzdGlsbCBuZWVkIHRvIGRvIHN0cmluZyBjb21wYXJpc29uLgorICAgIGJvb2wgYmVmb3JlKGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0CisgICAgeyByZXR1cm4gKF9fbmFtZVswXSA9PSAnKicgJiYgX19hcmcuX19uYW1lWzBdID09ICcqJykKKwk/IF9fbmFtZSA8IF9fYXJnLl9fbmFtZQorCTogX19idWlsdGluX3N0cmNtcCAoX19uYW1lLCBfX2FyZy5fX25hbWUpIDwgMDsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0CisgICAgeworICAgICAgcmV0dXJuICgoX19uYW1lID09IF9fYXJnLl9fbmFtZSkKKwkgICAgICB8fCAoX19uYW1lWzBdICE9ICcqJyAmJgorCQkgIF9fYnVpbHRpbl9zdHJjbXAgKF9fbmFtZSwgX19hcmcuX19uYW1lKSA9PSAwKSk7CisgICAgfQorICAjZWxzZQorICAgIC8vIE9uIHNvbWUgdGFyZ2V0cyB3ZSBjYW4gcmVseSBvbiB0eXBlX2luZm8ncyBOVEJTIGJlaW5nIHVuaXF1ZSwKKyAgICAvLyBhbmQgdGhlcmVmb3JlIGFkZHJlc3MgY29tcGFyaXNvbnMgYXJlIHN1ZmZpY2llbnQuCisgICAgYm9vbCBiZWZvcmUoY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKKyAgICB7IHJldHVybiBfX25hbWUgPCBfX2FyZy5fX25hbWU7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAorICAgIHsgcmV0dXJuIF9fbmFtZSA9PSBfX2FyZy5fX25hbWU7IH0KKyAgI2VuZGlmCisjZW5kaWYKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKKyAgICB7IHJldHVybiAhb3BlcmF0b3I9PShfX2FyZyk7IH0KKworICAgIC8vIFJldHVybiB0cnVlIGlmIHRoaXMgaXMgYSBwb2ludGVyIHR5cGUgb2Ygc29tZSBraW5kCisgICAgdmlydHVhbCBib29sIF9faXNfcG9pbnRlcl9wKCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGlzIGEgZnVuY3Rpb24gdHlwZQorICAgIHZpcnR1YWwgYm9vbCBfX2lzX2Z1bmN0aW9uX3AoKSBjb25zdDsKKworICAgIC8vIFRyeSBhbmQgY2F0Y2ggYSB0aHJvd24gdHlwZS4gU3RvcmUgYW4gYWRqdXN0ZWQgcG9pbnRlciB0byB0aGUKKyAgICAvLyBjYXVnaHQgdHlwZSBpbiBUSFJfT0JKLiBJZiBUSFJfVFlQRSBpcyBub3QgYSBwb2ludGVyIHR5cGUsIHRoZW4KKyAgICAvLyBUSFJfT0JKIHBvaW50cyB0byB0aGUgdGhyb3duIG9iamVjdC4gSWYgVEhSX1RZUEUgaXMgYSBwb2ludGVyCisgICAgLy8gdHlwZSwgdGhlbiBUSFJfT0JKIGlzIHRoZSBwb2ludGVyIGl0c2VsZi4gT1VURVIgaW5kaWNhdGVzIHRoZQorICAgIC8vIG51bWJlciBvZiBvdXRlciBwb2ludGVycywgYW5kIHdoZXRoZXIgdGhleSB3ZXJlIGNvbnN0CisgICAgLy8gcXVhbGlmaWVkLgorICAgIHZpcnR1YWwgYm9vbCBfX2RvX2NhdGNoKGNvbnN0IHR5cGVfaW5mbyAqX190aHJfdHlwZSwgdm9pZCAqKl9fdGhyX29iaiwKKwkJCSAgICB1bnNpZ25lZCBfX291dGVyKSBjb25zdDsKKworICAgIC8vIEludGVybmFsbHkgdXNlZCBkdXJpbmcgY2F0Y2ggbWF0Y2hpbmcKKyAgICB2aXJ0dWFsIGJvb2wgX19kb191cGNhc3QoY29uc3QgX19jeHhhYml2MTo6X19jbGFzc190eXBlX2luZm8gKl9fdGFyZ2V0LAorCQkJICAgICB2b2lkICoqX19vYmpfcHRyKSBjb25zdDsKKworICBwcm90ZWN0ZWQ6CisgICAgY29uc3QgY2hhciAqX19uYW1lOworICAgIAorICAgIGV4cGxpY2l0IHR5cGVfaW5mbyhjb25zdCBjaGFyICpfX24pOiBfX25hbWUoX19uKSB7IH0KKyAgICAKKyAgcHJpdmF0ZToKKyAgICAvLy8gQXNzaWduaW5nIHR5cGVfaW5mbyBpcyBub3Qgc3VwcG9ydGVkLgorICAgIHR5cGVfaW5mbyYgb3BlcmF0b3I9KGNvbnN0IHR5cGVfaW5mbyYpOworICAgIHR5cGVfaW5mbyhjb25zdCB0eXBlX2luZm8mKTsKKyAgfTsKKworICAvKioKKyAgICogIEBicmllZiAgVGhyb3duIGR1cmluZyBpbmNvcnJlY3QgdHlwZWNhc3RpbmcuCisgICAqICBAaW5ncm91cCBleGNlcHRpb25zCisgICAqCisgICAqICBJZiB5b3UgYXR0ZW1wdCBhbiBpbnZhbGlkIEBjIGR5bmFtaWNfY2FzdCBleHByZXNzaW9uLCBhbiBpbnN0YW5jZSBvZgorICAgKiAgdGhpcyBjbGFzcyAob3Igc29tZXRoaW5nIGRlcml2ZWQgZnJvbSB0aGlzIGNsYXNzKSBpcyB0aHJvd24uICAqLworICBjbGFzcyBiYWRfY2FzdCA6IHB1YmxpYyBleGNlcHRpb24gCisgIHsKKyAgcHVibGljOgorICAgIGJhZF9jYXN0KCkgdGhyb3coKSB7IH0KKworICAgIC8vIFRoaXMgZGVjbGFyYXRpb24gaXMgbm90IHVzZWxlc3M6CisgICAgLy8gaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjLTMuMC4yL2djY182Lmh0bWwjU0VDMTE4CisgICAgdmlydHVhbCB+YmFkX2Nhc3QoKSB0aHJvdygpOworCisgICAgLy8gU2VlIGNvbW1lbnQgaW4gZWhfZXhjZXB0aW9uLmNjLgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCk7CisgIH07CisgIAorICAvKiogCisgICAqICBAYnJpZWYgVGhyb3duIHdoZW4gYSBOVUxMIHBvaW50ZXIgaW4gYSBAYyB0eXBlaWQgZXhwcmVzc2lvbiBpcyB1c2VkLgorICAgKiAgQGluZ3JvdXAgZXhjZXB0aW9ucworICAgKi8KKyAgY2xhc3MgYmFkX3R5cGVpZCA6IHB1YmxpYyBleGNlcHRpb24gCisgIHsKKyAgcHVibGljOgorICAgIGJhZF90eXBlaWQgKCkgdGhyb3coKSB7IH0KKworICAgIC8vIFRoaXMgZGVjbGFyYXRpb24gaXMgbm90IHVzZWxlc3M6CisgICAgLy8gaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjLTMuMC4yL2djY182Lmh0bWwjU0VDMTE4CisgICAgdmlydHVhbCB+YmFkX3R5cGVpZCgpIHRocm93KCk7CisKKyAgICAvLyBTZWUgY29tbWVudCBpbiBlaF9leGNlcHRpb24uY2MuCisgICAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKKyAgfTsKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHBvcAorCit9IC8vIGV4dGVybiAiQysrIgorI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Vub3JkZXJlZF9tYXAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Vub3JkZXJlZF9tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI2NjRlOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdW5vcmRlcmVkX21hcApAQCAtMCwwICsxLDU4IEBACisvLyA8dW5vcmRlcmVkX21hcD4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL3Vub3JkZXJlZF9tYXAKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVU5PUkRFUkVEX01BUAorI2RlZmluZSBfR0xJQkNYWF9VTk9SREVSRURfTUFQIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaWZuZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisjIGluY2x1ZGUgPGJpdHMvYysrMHhfd2FybmluZy5oPgorI2Vsc2UKKworI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9hbGdvYmFzZS5oPgorI2luY2x1ZGUgPGJpdHMvYWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfZnVuY3Rpb24uaD4gLy8gZXF1YWxfdG8sIF9JZGVudGl0eSwgX1NlbGVjdDFzdAorI2luY2x1ZGUgPGJpdHMvZnVuY3Rpb25hbF9oYXNoLmg+CisjaW5jbHVkZSA8Yml0cy9oYXNodGFibGUuaD4KKyNpbmNsdWRlIDxiaXRzL3Vub3JkZXJlZF9tYXAuaD4KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisjIGluY2x1ZGUgPGRlYnVnL3Vub3JkZXJlZF9tYXA+CisjZW5kaWYKKworI2lmZGVmIF9HTElCQ1hYX1BST0ZJTEUKKyMgaW5jbHVkZSA8cHJvZmlsZS91bm9yZGVyZWRfbWFwPgorI2VuZGlmCisKKyNlbmRpZiAvLyBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworCisjZW5kaWYgLy8gX0dMSUJDWFhfVU5PUkRFUkVEX01BUApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy91bm9yZGVyZWRfc2V0IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy91bm9yZGVyZWRfc2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYmY4ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3Vub3JkZXJlZF9zZXQKQEAgLTAsMCArMSw1NyBAQAorLy8gPHVub3JkZXJlZF9zZXQ+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgaW5jbHVkZS91bm9yZGVyZWRfc2V0CisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1VOT1JERVJFRF9TRVQKKyNkZWZpbmUgX0dMSUJDWFhfVU5PUkRFUkVEX1NFVCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2lmbmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworIyBpbmNsdWRlIDxiaXRzL2MrKzB4X3dhcm5pbmcuaD4KKyNlbHNlCisKKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisjaW5jbHVkZSA8Yml0cy9zdGxfYWxnb2Jhc2UuaD4KKyNpbmNsdWRlIDxiaXRzL2FsbG9jYXRvci5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2Z1bmN0aW9uLmg+IC8vIGVxdWFsX3RvLCBfSWRlbnRpdHksIF9TZWxlY3Qxc3QKKyNpbmNsdWRlIDxiaXRzL2Z1bmN0aW9uYWxfaGFzaC5oPgorI2luY2x1ZGUgPGJpdHMvaGFzaHRhYmxlLmg+CisjaW5jbHVkZSA8Yml0cy91bm9yZGVyZWRfc2V0Lmg+CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworIyBpbmNsdWRlIDxkZWJ1Zy91bm9yZGVyZWRfc2V0PgorI2VuZGlmCisKKyNpZmRlZiBfR0xJQkNYWF9QUk9GSUxFCisjIGluY2x1ZGUgPHByb2ZpbGUvdW5vcmRlcmVkX3NldD4KKyNlbmRpZgorI2VuZGlmIC8vIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9VTk9SREVSRURfU0VUCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3V0aWxpdHkgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3V0aWxpdHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM4MjZlYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdXRpbGl0eQpAQCAtMCwwICsxLDk0IEBACisvLyA8dXRpbGl0eT4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk3CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgaW5jbHVkZS91dGlsaXR5CisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4gCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9VVElMSVRZCisjZGVmaW5lIF9HTElCQ1hYX1VUSUxJVFkgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKy8qKgorICogQGRlZmdyb3VwIHV0aWxpdGllcyBVdGlsaXRpZXMKKyAqCisgKiBDb21wb25lbnRzIGRlZW1lZCBnZW5lcmFsbHkgdXNlZnVsLiBJbmNsdWRlcyBwYWlyLCB0dXBsZSwKKyAqIGZvcndhcmQvbW92ZSBoZWxwZXJzLCByYXRpbywgZnVuY3Rpb24gb2JqZWN0LCBtZXRhcHJvZ3JhbW1pbmcgYW5kCisgKiB0eXBlIHRyYWl0cywgdGltZSwgZGF0ZSwgYW5kIG1lbW9yeSBmdW5jdGlvbnMuCisgKi8KKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfcmVsb3BzLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfcGFpci5oPgorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyMgIGlmIGRlZmluZWQoX0dMSUJDWFhfSU5DTFVERV9BU19UUjEpCisjICAgIGVycm9yIEMrKzB4IGhlYWRlciBjYW5ub3QgYmUgaW5jbHVkZWQgZnJvbSBUUjEgaGVhZGVyCisjICBlbmRpZgorIyAgaWYgZGVmaW5lZChfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYKQorIyAgICBpbmNsdWRlIDx0cjFfaW1wbC91dGlsaXR5PgorIyAgZWxzZQorIyAgICBkZWZpbmUgX0dMSUJDWFhfSU5DTFVERV9BU19DWFgwWAorIyAgICBkZWZpbmUgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMQorIyAgICBkZWZpbmUgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9UUjEKKyMgICAgZGVmaW5lIF9HTElCQ1hYX1RSMQorIyAgICBpbmNsdWRlIDx0cjFfaW1wbC91dGlsaXR5PgorIyAgICB1bmRlZiBfR0xJQkNYWF9UUjEKKyMgICAgdW5kZWYgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9UUjEKKyMgICAgdW5kZWYgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1RSMQorIyAgICB1bmRlZiBfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDBYCisjICBlbmRpZgorIyAgaW5jbHVkZSA8Yml0cy9tb3ZlLmg+CisjICBpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgorI2VuZGlmCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9VVElMSVRZICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3ZhbGFycmF5IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy92YWxhcnJheQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTkyNzUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9pbmNsdWRlL2MrKy80LjUuMy92YWxhcnJheQpAQCAtMCwwICsxLDExMTUgQEAKKy8vIFRoZSB0ZW1wbGF0ZSBhbmQgaW5saW5lcyBmb3IgdGhlIC0qLSBDKysgLSotIHZhbGFycmF5IGNsYXNzLgorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsCisvLyAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdmFsYXJyYXkKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisvLyBXcml0dGVuIGJ5IEdhYnJpZWwgRG9zIFJlaXMgPEdhYnJpZWwuRG9zLVJlaXNARFBUTWF0aHMuRU5TLUNhY2hhbi5Gcj4KKworI2lmbmRlZiBfR0xJQkNYWF9WQUxBUlJBWQorI2RlZmluZSBfR0xJQkNYWF9WQUxBUlJBWSAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKyNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorCisgIHRlbXBsYXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+IAorICAgIGNsYXNzIF9FeHByOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9UcDI+IAorICAgIGNsYXNzIF9WYWxBcnJheTsgICAgCisKKyAgdGVtcGxhdGU8Y2xhc3MgX09wZXIsIHRlbXBsYXRlPGNsYXNzLCBjbGFzcz4gY2xhc3MgX01ldGEsIGNsYXNzIF9Eb20+CisgICAgc3RydWN0IF9VbkNsb3M7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX09wZXIsCisgICAgICAgIHRlbXBsYXRlPGNsYXNzLCBjbGFzcz4gY2xhc3MgX01ldGExLAorICAgICAgICB0ZW1wbGF0ZTxjbGFzcywgY2xhc3M+IGNsYXNzIF9NZXRhMiwKKyAgICAgICAgY2xhc3MgX0RvbTEsIGNsYXNzIF9Eb20yPiAKKyAgICBjbGFzcyBfQmluQ2xvczsKKworICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcywgY2xhc3M+IGNsYXNzIF9NZXRhLCBjbGFzcyBfRG9tPiAKKyAgICBjbGFzcyBfU0Nsb3M7CisKKyAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3MsIGNsYXNzPiBjbGFzcyBfTWV0YSwgY2xhc3MgX0RvbT4gCisgICAgY2xhc3MgX0dDbG9zOworICAgIAorICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcywgY2xhc3M+IGNsYXNzIF9NZXRhLCBjbGFzcyBfRG9tPiAKKyAgICBjbGFzcyBfSUNsb3M7CisgICAgCisgIHRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzLCBjbGFzcz4gY2xhc3MgX01ldGEsIGNsYXNzIF9Eb20+IAorICAgIGNsYXNzIF9WYWxGdW5DbG9zOworICAKKyAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3MsIGNsYXNzPiBjbGFzcyBfTWV0YSwgY2xhc3MgX0RvbT4gCisgICAgY2xhc3MgX1JlZkZ1bkNsb3M7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1RwPiBjbGFzcyB2YWxhcnJheTsgICAvLyBBbiBhcnJheSBvZiB0eXBlIF9UcAorICBjbGFzcyBzbGljZTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJMQVMtbGlrZSBzbGljZSBvdXQgb2YgYW4gYXJyYXkKKyAgdGVtcGxhdGU8Y2xhc3MgX1RwPiBjbGFzcyBzbGljZV9hcnJheTsKKyAgY2xhc3MgZ3NsaWNlOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZW5lcmFsaXplZCBzbGljZSBvdXQgb2YgYW4gYXJyYXkKKyAgdGVtcGxhdGU8Y2xhc3MgX1RwPiBjbGFzcyBnc2xpY2VfYXJyYXk7CisgIHRlbXBsYXRlPGNsYXNzIF9UcD4gY2xhc3MgbWFza19hcnJheTsgICAgIC8vIG1hc2tlZCBhcnJheQorICB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGNsYXNzIGluZGlyZWN0X2FycmF5OyAvLyBpbmRpcmVjdGVkIGFycmF5CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2luY2x1ZGUgPGJpdHMvdmFsYXJyYXlfYXJyYXkuaD4KKyNpbmNsdWRlIDxiaXRzL3ZhbGFycmF5X2JlZm9yZS5oPgorICAKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisKKyAgLyoqCisgICAqIEBkZWZncm91cCBudW1lcmljX2FycmF5cyBOdW1lcmljIEFycmF5cworICAgKiBAaW5ncm91cCBudW1lcmljcworICAgKgorICAgKiBDbGFzc2VzIGFuZCBmdW5jdGlvbnMgZm9yIHJlcHJlc2VudGluZyBhbmQgbWFuaXB1bGF0aW5nIGFycmF5cyBvZiBlbGVtZW50cy4KKyAgICogQHsKKyAgICovCisKKyAgLyoqCisgICAqICBAYnJpZWYgIFNtYXJ0IGFycmF5IGRlc2lnbmVkIHRvIHN1cHBvcnQgbnVtZXJpYyBwcm9jZXNzaW5nLgorICAgKgorICAgKiAgQSB2YWxhcnJheSBpcyBhbiBhcnJheSB0aGF0IHByb3ZpZGVzIGNvbnN0cmFpbnRzIGludGVuZGVkIHRvIGFsbG93IGZvcgorICAgKiAgZWZmZWN0aXZlIG9wdGltaXphdGlvbiBvZiBudW1lcmljIGFycmF5IHByb2Nlc3NpbmcgYnkgcmVkdWNpbmcgdGhlCisgICAqICBhbGlhc2luZyB0aGF0IGNhbiByZXN1bHQgZnJvbSBwb2ludGVyIHJlcHJlc2VudGF0aW9ucy4gIEl0IHJlcHJlc2VudHMgYQorICAgKiAgb25lLWRpbWVuc2lvbmFsIGFycmF5IGZyb20gd2hpY2ggZGlmZmVyZW50IG11bHRpZGltZW5zaW9uYWwgc3Vic2V0cyBjYW4KKyAgICogIGJlIGFjY2Vzc2VkIGFuZCBtb2RpZmllZC4KKyAgICogIAorICAgKiAgQHBhcmFtICBUcCAgVHlwZSBvZiBvYmplY3QgaW4gdGhlIGFycmF5LgorICAgKi8KKyAgdGVtcGxhdGU8Y2xhc3MgX1RwPiAKKyAgICBjbGFzcyB2YWxhcnJheQorICAgIHsKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9PcD4KKwlzdHJ1Y3QgX1VuYXJ5T3AgCisJeworCSAgdHlwZWRlZiB0eXBlbmFtZSBfX2Z1bjxfT3AsIF9UcD46OnJlc3VsdF90eXBlIF9fcnQ7CisJICB0eXBlZGVmIF9FeHByPF9VbkNsb3M8X09wLCBfVmFsQXJyYXksIF9UcD4sIF9fcnQ+IF9SdDsKKwl9OworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CisgICAgICAKKwkvLyBfbGliLnZhbGFycmF5LmNvbnNfIGNvbnN0cnVjdC9kZXN0cm95OgorICAgICAgLy8vICBDb25zdHJ1Y3QgYW4gZW1wdHkgYXJyYXkuCisgICAgICB2YWxhcnJheSgpOworCisgICAgICAvLy8gIENvbnN0cnVjdCBhbiBhcnJheSB3aXRoIEBhIG4gZWxlbWVudHMuCisgICAgICBleHBsaWNpdCB2YWxhcnJheShzaXplX3QpOworCisgICAgICAvLy8gIENvbnN0cnVjdCBhbiBhcnJheSB3aXRoIEBhIG4gZWxlbWVudHMgaW5pdGlhbGl6ZWQgdG8gQGEgdC4KKyAgICAgIHZhbGFycmF5KGNvbnN0IF9UcCYsIHNpemVfdCk7CisKKyAgICAgIC8vLyAgQ29uc3RydWN0IGFuIGFycmF5IGluaXRpYWxpemVkIHRvIHRoZSBmaXJzdCBAYSBuIGVsZW1lbnRzIG9mIEBhIHQuCisgICAgICB2YWxhcnJheShjb25zdCBfVHAqIF9fcmVzdHJpY3RfXywgc2l6ZV90KTsKKworICAgICAgLy8vICBDb3B5IGNvbnN0cnVjdG9yLgorICAgICAgdmFsYXJyYXkoY29uc3QgdmFsYXJyYXkmKTsKKworICAgICAgLy8vICBDb25zdHJ1Y3QgYW4gYXJyYXkgd2l0aCB0aGUgc2FtZSBzaXplIGFuZCB2YWx1ZXMgaW4gQGEgc2EuCisgICAgICB2YWxhcnJheShjb25zdCBzbGljZV9hcnJheTxfVHA+Jik7CisKKyAgICAgIC8vLyAgQ29uc3RydWN0IGFuIGFycmF5IHdpdGggdGhlIHNhbWUgc2l6ZSBhbmQgdmFsdWVzIGluIEBhIGdhLgorICAgICAgdmFsYXJyYXkoY29uc3QgZ3NsaWNlX2FycmF5PF9UcD4mKTsKKworICAgICAgLy8vICBDb25zdHJ1Y3QgYW4gYXJyYXkgd2l0aCB0aGUgc2FtZSBzaXplIGFuZCB2YWx1ZXMgaW4gQGEgbWEuCisgICAgICB2YWxhcnJheShjb25zdCBtYXNrX2FycmF5PF9UcD4mKTsKKworICAgICAgLy8vICBDb25zdHJ1Y3QgYW4gYXJyYXkgd2l0aCB0aGUgc2FtZSBzaXplIGFuZCB2YWx1ZXMgaW4gQGEgaWEuCisgICAgICB2YWxhcnJheShjb25zdCBpbmRpcmVjdF9hcnJheTxfVHA+Jik7CisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXworICAgICAgLy8vICBDb25zdHJ1Y3QgYW4gYXJyYXkgd2l0aCBhbiBpbml0aWFsaXplcl9saXN0IG9mIHZhbHVlcy4KKyAgICAgIHZhbGFycmF5KGluaXRpYWxpemVyX2xpc3Q8X1RwPik7CisjZW5kaWYKKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKwl2YWxhcnJheShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UpOworCisgICAgICB+dmFsYXJyYXkoKTsKKworICAgICAgLy8gX2xpYi52YWxhcnJheS5hc3NpZ25fIGFzc2lnbm1lbnQ6CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFzc2lnbiBlbGVtZW50cyB0byBhbiBhcnJheS4KKyAgICAgICAqCisgICAgICAgKiAgQXNzaWduIGVsZW1lbnRzIG9mIGFycmF5IHRvIHZhbHVlcyBpbiBAYSB2LiAgUmVzdWx0cyBhcmUgdW5kZWZpbmVkCisgICAgICAgKiAgaWYgQGEgdiBkb2VzIG5vdCBoYXZlIHRoZSBzYW1lIHNpemUgYXMgdGhpcyBhcnJheS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICB2ICBWYWxhcnJheSB0byBnZXQgdmFsdWVzIGZyb20uCisgICAgICAgKi8KKyAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yPShjb25zdCB2YWxhcnJheTxfVHA+Jik7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXNzaWduIGVsZW1lbnRzIHRvIGEgdmFsdWUuCisgICAgICAgKgorICAgICAgICogIEFzc2lnbiBhbGwgZWxlbWVudHMgb2YgYXJyYXkgdG8gQGEgdC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICB0ICBWYWx1ZSBmb3IgZWxlbWVudHMuCisgICAgICAgKi8KKyAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yPShjb25zdCBfVHAmKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBc3NpZ24gZWxlbWVudHMgdG8gYW4gYXJyYXkgc3Vic2V0LgorICAgICAgICoKKyAgICAgICAqICBBc3NpZ24gZWxlbWVudHMgb2YgYXJyYXkgdG8gdmFsdWVzIGluIEBhIHNhLiAgUmVzdWx0cyBhcmUgdW5kZWZpbmVkCisgICAgICAgKiAgaWYgQGEgc2EgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBzaXplIGFzIHRoaXMgYXJyYXkuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgc2EgIEFycmF5IHNsaWNlIHRvIGdldCB2YWx1ZXMgZnJvbS4KKyAgICAgICAqLworICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IHNsaWNlX2FycmF5PF9UcD4mKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBc3NpZ24gZWxlbWVudHMgdG8gYW4gYXJyYXkgc3Vic2V0LgorICAgICAgICoKKyAgICAgICAqICBBc3NpZ24gZWxlbWVudHMgb2YgYXJyYXkgdG8gdmFsdWVzIGluIEBhIGdhLiAgUmVzdWx0cyBhcmUgdW5kZWZpbmVkCisgICAgICAgKiAgaWYgQGEgZ2EgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBzaXplIGFzIHRoaXMgYXJyYXkuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgZ2EgIEFycmF5IHNsaWNlIHRvIGdldCB2YWx1ZXMgZnJvbS4KKyAgICAgICAqLworICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IGdzbGljZV9hcnJheTxfVHA+Jik7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXNzaWduIGVsZW1lbnRzIHRvIGFuIGFycmF5IHN1YnNldC4KKyAgICAgICAqCisgICAgICAgKiAgQXNzaWduIGVsZW1lbnRzIG9mIGFycmF5IHRvIHZhbHVlcyBpbiBAYSBtYS4gIFJlc3VsdHMgYXJlIHVuZGVmaW5lZAorICAgICAgICogIGlmIEBhIG1hIGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgc2l6ZSBhcyB0aGlzIGFycmF5LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIG1hICBBcnJheSBzbGljZSB0byBnZXQgdmFsdWVzIGZyb20uCisgICAgICAgKi8KKyAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yPShjb25zdCBtYXNrX2FycmF5PF9UcD4mKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBc3NpZ24gZWxlbWVudHMgdG8gYW4gYXJyYXkgc3Vic2V0LgorICAgICAgICoKKyAgICAgICAqICBBc3NpZ24gZWxlbWVudHMgb2YgYXJyYXkgdG8gdmFsdWVzIGluIEBhIGlhLiAgUmVzdWx0cyBhcmUgdW5kZWZpbmVkCisgICAgICAgKiAgaWYgQGEgaWEgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBzaXplIGFzIHRoaXMgYXJyYXkuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgaWEgIEFycmF5IHNsaWNlIHRvIGdldCB2YWx1ZXMgZnJvbS4KKyAgICAgICAqLworICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IGluZGlyZWN0X2FycmF5PF9UcD4mKTsKKworI2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFzc2lnbiBlbGVtZW50cyB0byBhbiBpbml0aWFsaXplcl9saXN0LgorICAgICAgICoKKyAgICAgICAqICBBc3NpZ24gZWxlbWVudHMgb2YgYXJyYXkgdG8gdmFsdWVzIGluIEBhIGwuICBSZXN1bHRzIGFyZSB1bmRlZmluZWQKKyAgICAgICAqICBpZiBAYSBsIGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgc2l6ZSBhcyB0aGlzIGFycmF5LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIGwgIGluaXRpYWxpemVyX2xpc3QgdG8gZ2V0IHZhbHVlcyBmcm9tLgorICAgICAgICovCisgICAgICB2YWxhcnJheSYgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8X1RwPik7CisjZW5kaWYKKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gdmFsYXJyYXk8X1RwPiYKKwlvcGVyYXRvcj0gKGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKTsKKworICAgICAgLy8gX2xpYi52YWxhcnJheS5hY2Nlc3NfIGVsZW1lbnQgYWNjZXNzOgorICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoZSBpJ3RoIGFycmF5IGVsZW1lbnQuICAKKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBpICBJbmRleCBvZiBlbGVtZW50IHRvIHJldHVybi4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhlIGkndGggZWxlbWVudC4KKyAgICAgICAqLworICAgICAgX1RwJiAgICAgICAgICAgICAgICBvcGVyYXRvcltdKHNpemVfdCk7CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDM4OS4gQ29uc3Qgb3ZlcmxvYWQgb2YgdmFsYXJyYXk6Om9wZXJhdG9yW10gcmV0dXJucyBieSB2YWx1ZS4KKyAgICAgIGNvbnN0IF9UcCYgICAgICAgICAgb3BlcmF0b3JbXShzaXplX3QpIGNvbnN0OworCisgICAgICAvLyBfbGliLnZhbGFycmF5LnN1Yl8gc3Vic2V0IG9wZXJhdGlvbnM6CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBhbiBhcnJheSBzdWJzZXQuCisgICAgICAgKgorICAgICAgICogIFJldHVybnMgYSBuZXcgdmFsYXJyYXkgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhlIGFycmF5CisgICAgICAgKiAgaW5kaWNhdGVkIGJ5IHRoZSBzbGljZSBhcmd1bWVudC4gIFRoZSBuZXcgdmFsYXJyYXkgaGFzIHRoZSBzYW1lIHNpemUKKyAgICAgICAqICBhcyB0aGUgaW5wdXQgc2xpY2UuICBAc2VlIHNsaWNlLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIHMgIFRoZSBzb3VyY2Ugc2xpY2UuCisgICAgICAgKiAgQHJldHVybiAgTmV3IHZhbGFycmF5IGNvbnRhaW5pbmcgZWxlbWVudHMgaW4gQGEgcy4KKyAgICAgICAqLworICAgICAgX0V4cHI8X1NDbG9zPF9WYWxBcnJheSwgX1RwPiwgX1RwPiBvcGVyYXRvcltdKHNsaWNlKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gYSByZWZlcmVuY2UgdG8gYW4gYXJyYXkgc3Vic2V0LgorICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIGEgbmV3IHZhbGFycmF5IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJheQorICAgICAgICogIGluZGljYXRlZCBieSB0aGUgc2xpY2UgYXJndW1lbnQuICBUaGUgbmV3IHZhbGFycmF5IGhhcyB0aGUgc2FtZSBzaXplCisgICAgICAgKiAgYXMgdGhlIGlucHV0IHNsaWNlLiAgQHNlZSBzbGljZS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBzICBUaGUgc291cmNlIHNsaWNlLgorICAgICAgICogIEByZXR1cm4gIE5ldyB2YWxhcnJheSBjb250YWluaW5nIGVsZW1lbnRzIGluIEBhIHMuCisgICAgICAgKi8KKyAgICAgIHNsaWNlX2FycmF5PF9UcD4gICAgb3BlcmF0b3JbXShzbGljZSk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIGFuIGFycmF5IHN1YnNldC4KKyAgICAgICAqCisgICAgICAgKiAgUmV0dXJucyBhIHNsaWNlX2FycmF5IHJlZmVyZW5jaW5nIHRoZSBlbGVtZW50cyBvZiB0aGUgYXJyYXkKKyAgICAgICAqICBpbmRpY2F0ZWQgYnkgdGhlIHNsaWNlIGFyZ3VtZW50LiAgQHNlZSBnc2xpY2UuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgcyAgVGhlIHNvdXJjZSBzbGljZS4KKyAgICAgICAqICBAcmV0dXJuICBTbGljZV9hcnJheSByZWZlcmVuY2luZyBlbGVtZW50cyBpbmRpY2F0ZWQgYnkgQGEgcy4KKyAgICAgICAqLworICAgICAgX0V4cHI8X0dDbG9zPF9WYWxBcnJheSwgX1RwPiwgX1RwPiBvcGVyYXRvcltdKGNvbnN0IGdzbGljZSYpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBhIHJlZmVyZW5jZSB0byBhbiBhcnJheSBzdWJzZXQuCisgICAgICAgKgorICAgICAgICogIFJldHVybnMgYSBuZXcgdmFsYXJyYXkgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhlIGFycmF5CisgICAgICAgKiAgaW5kaWNhdGVkIGJ5IHRoZSBnc2xpY2UgYXJndW1lbnQuICBUaGUgbmV3IHZhbGFycmF5IGhhcworICAgICAgICogIHRoZSBzYW1lIHNpemUgYXMgdGhlIGlucHV0IGdzbGljZS4gIEBzZWUgZ3NsaWNlLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIHMgIFRoZSBzb3VyY2UgZ3NsaWNlLgorICAgICAgICogIEByZXR1cm4gIE5ldyB2YWxhcnJheSBjb250YWluaW5nIGVsZW1lbnRzIGluIEBhIHMuCisgICAgICAgKi8KKyAgICAgIGdzbGljZV9hcnJheTxfVHA+ICAgb3BlcmF0b3JbXShjb25zdCBnc2xpY2UmKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gYW4gYXJyYXkgc3Vic2V0LgorICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIGEgbmV3IHZhbGFycmF5IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJheQorICAgICAgICogIGluZGljYXRlZCBieSB0aGUgYXJndW1lbnQuICBUaGUgaW5wdXQgaXMgYSB2YWxhcnJheSBvZiBib29sIHdoaWNoCisgICAgICAgKiAgcmVwcmVzZW50cyBhIGJpdG1hc2sgaW5kaWNhdGluZyB3aGljaCBlbGVtZW50cyBzaG91bGQgYmUgY29waWVkIGludG8KKyAgICAgICAqICB0aGUgbmV3IHZhbGFycmF5LiAgRWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSBpcyBhZGRlZCB0byB0aGUgcmV0dXJuCisgICAgICAgKiAgdmFsYXJyYXkgaWYgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiB0aGUgYXJndW1lbnQgaXMgdHJ1ZS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBtICBUaGUgdmFsYXJyYXkgYml0bWFzay4KKyAgICAgICAqICBAcmV0dXJuICBOZXcgdmFsYXJyYXkgY29udGFpbmluZyBlbGVtZW50cyBpbmRpY2F0ZWQgYnkgQGEgbS4KKyAgICAgICAqLworICAgICAgdmFsYXJyYXk8X1RwPiAgICAgICBvcGVyYXRvcltdKGNvbnN0IHZhbGFycmF5PGJvb2w+JikgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIGEgcmVmZXJlbmNlIHRvIGFuIGFycmF5IHN1YnNldC4KKyAgICAgICAqCisgICAgICAgKiAgUmV0dXJucyBhIG5ldyBtYXNrX2FycmF5IHJlZmVyZW5jaW5nIHRoZSBlbGVtZW50cyBvZiB0aGUgYXJyYXkKKyAgICAgICAqICBpbmRpY2F0ZWQgYnkgdGhlIGFyZ3VtZW50LiAgVGhlIGlucHV0IGlzIGEgdmFsYXJyYXkgb2YgYm9vbCB3aGljaAorICAgICAgICogIHJlcHJlc2VudHMgYSBiaXRtYXNrIGluZGljYXRpbmcgd2hpY2ggZWxlbWVudHMgYXJlIHBhcnQgb2YgdGhlCisgICAgICAgKiAgc3Vic2V0LiAgRWxlbWVudHMgb2YgdGhlIGFycmF5IGFyZSBwYXJ0IG9mIHRoZSBzdWJzZXQgaWYgdGhlCisgICAgICAgKiAgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIHRoZSBhcmd1bWVudCBpcyB0cnVlLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIG0gIFRoZSB2YWxhcnJheSBiaXRtYXNrLgorICAgICAgICogIEByZXR1cm4gIE5ldyB2YWxhcnJheSBjb250YWluaW5nIGVsZW1lbnRzIGluZGljYXRlZCBieSBAYSBtLgorICAgICAgICovCisgICAgICBtYXNrX2FycmF5PF9UcD4gICAgIG9wZXJhdG9yW10oY29uc3QgdmFsYXJyYXk8Ym9vbD4mKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gYW4gYXJyYXkgc3Vic2V0LgorICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIGEgbmV3IHZhbGFycmF5IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJheQorICAgICAgICogIGluZGljYXRlZCBieSB0aGUgYXJndW1lbnQuICBUaGUgZWxlbWVudHMgaW4gdGhlIGFyZ3VtZW50IGFyZQorICAgICAgICogIGludGVycHJldGVkIGFzIHRoZSBpbmRpY2VzIG9mIGVsZW1lbnRzIG9mIHRoaXMgdmFsYXJyYXkgdG8gY29weSB0bworICAgICAgICogIHRoZSByZXR1cm4gdmFsYXJyYXkuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgaSAgVGhlIHZhbGFycmF5IGVsZW1lbnQgaW5kZXggbGlzdC4KKyAgICAgICAqICBAcmV0dXJuICBOZXcgdmFsYXJyYXkgY29udGFpbmluZyBlbGVtZW50cyBpbiBAYSBzLgorICAgICAgICovCisgICAgICBfRXhwcjxfSUNsb3M8X1ZhbEFycmF5LCBfVHA+LCBfVHA+CisgICAgICAgIG9wZXJhdG9yW10oY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBhIHJlZmVyZW5jZSB0byBhbiBhcnJheSBzdWJzZXQuCisgICAgICAgKgorICAgICAgICogIFJldHVybnMgYW4gaW5kaXJlY3RfYXJyYXkgcmVmZXJlbmNpbmcgdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJheQorICAgICAgICogIGluZGljYXRlZCBieSB0aGUgYXJndW1lbnQuICBUaGUgZWxlbWVudHMgaW4gdGhlIGFyZ3VtZW50IGFyZQorICAgICAgICogIGludGVycHJldGVkIGFzIHRoZSBpbmRpY2VzIG9mIGVsZW1lbnRzIG9mIHRoaXMgdmFsYXJyYXkgdG8gaW5jbHVkZQorICAgICAgICogIGluIHRoZSBzdWJzZXQuICBUaGUgcmV0dXJuZWQgaW5kaXJlY3RfYXJyYXkgcmVmZXJzIHRvIHRoZXNlCisgICAgICAgKiAgZWxlbWVudHMuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgaSAgVGhlIHZhbGFycmF5IGVsZW1lbnQgaW5kZXggbGlzdC4KKyAgICAgICAqICBAcmV0dXJuICBJbmRpcmVjdF9hcnJheSByZWZlcmVuY2luZyBlbGVtZW50cyBpbiBAYSBpLgorICAgICAgICovCisgICAgICBpbmRpcmVjdF9hcnJheTxfVHA+IG9wZXJhdG9yW10oY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYpOworCisgICAgICAvLyBfbGliLnZhbGFycmF5LnVuYXJ5XyB1bmFyeSBvcGVyYXRvcnM6CisgICAgICAvLy8gIFJldHVybiBhIG5ldyB2YWxhcnJheSBieSBhcHBseWluZyB1bmFyeSArIHRvIGVhY2ggZWxlbWVudC4KKyAgICAgIHR5cGVuYW1lIF9VbmFyeU9wPF9fdW5hcnlfcGx1cz46Ol9SdCAgb3BlcmF0b3IrKCkgY29uc3Q7CisKKyAgICAgIC8vLyAgUmV0dXJuIGEgbmV3IHZhbGFycmF5IGJ5IGFwcGx5aW5nIHVuYXJ5IC0gdG8gZWFjaCBlbGVtZW50LgorICAgICAgdHlwZW5hbWUgX1VuYXJ5T3A8X19uZWdhdGU+OjpfUnQgICAgICBvcGVyYXRvci0oKSBjb25zdDsKKworICAgICAgLy8vICBSZXR1cm4gYSBuZXcgdmFsYXJyYXkgYnkgYXBwbHlpbmcgdW5hcnkgfiB0byBlYWNoIGVsZW1lbnQuCisgICAgICB0eXBlbmFtZSBfVW5hcnlPcDxfX2JpdHdpc2Vfbm90Pjo6X1J0IG9wZXJhdG9yfigpIGNvbnN0OworCisgICAgICAvLy8gIFJldHVybiBhIG5ldyB2YWxhcnJheSBieSBhcHBseWluZyB1bmFyeSAhIHRvIGVhY2ggZWxlbWVudC4KKyAgICAgIHR5cGVuYW1lIF9VbmFyeU9wPF9fbG9naWNhbF9ub3Q+OjpfUnQgb3BlcmF0b3IhKCkgY29uc3Q7CisKKyAgICAgIC8vIF9saWIudmFsYXJyYXkuY2Fzc2lnbl8gY29tcHV0ZWQgYXNzaWdubWVudDoKKyAgICAgIC8vLyAgTXVsdGlwbHkgZWFjaCBlbGVtZW50IG9mIGFycmF5IGJ5IEBhIHQuCisgICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcio9KGNvbnN0IF9UcCYpOworCisgICAgICAvLy8gIERpdmlkZSBlYWNoIGVsZW1lbnQgb2YgYXJyYXkgYnkgQGEgdC4KKyAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yLz0oY29uc3QgX1RwJik7CisKKyAgICAgIC8vLyAgU2V0IGVhY2ggZWxlbWVudCBlIG9mIGFycmF5IHRvIGUgJSBAYSB0LgorICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IlPShjb25zdCBfVHAmKTsKKworICAgICAgLy8vICBBZGQgQGEgdCB0byBlYWNoIGVsZW1lbnQgb2YgYXJyYXkuCisgICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcis9KGNvbnN0IF9UcCYpOworCisgICAgICAvLy8gIFN1YnRyYWN0IEBhIHQgdG8gZWFjaCBlbGVtZW50IG9mIGFycmF5LgorICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3ItPShjb25zdCBfVHAmKTsKKworICAgICAgLy8vICBTZXQgZWFjaCBlbGVtZW50IGUgb2YgYXJyYXkgdG8gZSBeIEBhIHQuCisgICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcl49KGNvbnN0IF9UcCYpOworCisgICAgICAvLy8gIFNldCBlYWNoIGVsZW1lbnQgZSBvZiBhcnJheSB0byBlICYgQGEgdC4KKyAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yJj0oY29uc3QgX1RwJik7CisKKyAgICAgIC8vLyAgU2V0IGVhY2ggZWxlbWVudCBlIG9mIGFycmF5IHRvIGUgfCBAYSB0LgorICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3J8PShjb25zdCBfVHAmKTsKKworICAgICAgLy8vICBMZWZ0IHNoaWZ0IGVhY2ggZWxlbWVudCBlIG9mIGFycmF5IGJ5IEBhIHQgYml0cy4KKyAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yPDw9KGNvbnN0IF9UcCYpOworCisgICAgICAvLy8gIFJpZ2h0IHNoaWZ0IGVhY2ggZWxlbWVudCBlIG9mIGFycmF5IGJ5IEBhIHQgYml0cy4KKyAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yPj49KGNvbnN0IF9UcCYpOworCisgICAgICAvLy8gIE11bHRpcGx5IGVsZW1lbnRzIG9mIGFycmF5IGJ5IGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdi4KKyAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yKj0oY29uc3QgdmFsYXJyYXk8X1RwPiYpOworCisgICAgICAvLy8gIERpdmlkZSBlbGVtZW50cyBvZiBhcnJheSBieSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYuCisgICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvci89KGNvbnN0IHZhbGFycmF5PF9UcD4mKTsKKworICAgICAgLy8vICBNb2R1bG8gZWxlbWVudHMgb2YgYXJyYXkgYnkgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IlPShjb25zdCB2YWxhcnJheTxfVHA+Jik7CisKKyAgICAgIC8vLyAgQWRkIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdiB0byBlbGVtZW50cyBvZiBhcnJheS4KKyAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yKz0oY29uc3QgdmFsYXJyYXk8X1RwPiYpOworCisgICAgICAvLy8gIFN1YnRyYWN0IGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdiBmcm9tIGVsZW1lbnRzIG9mIGFycmF5LgorICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3ItPShjb25zdCB2YWxhcnJheTxfVHA+Jik7CisKKyAgICAgIC8vLyAgTG9naWNhbCB4b3IgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2IHdpdGggZWxlbWVudHMgb2YgYXJyYXkuCisgICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcl49KGNvbnN0IHZhbGFycmF5PF9UcD4mKTsKKworICAgICAgLy8vICBMb2dpY2FsIG9yIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdiB3aXRoIGVsZW1lbnRzIG9mIGFycmF5LgorICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3J8PShjb25zdCB2YWxhcnJheTxfVHA+Jik7CisKKyAgICAgIC8vLyAgTG9naWNhbCBhbmQgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2IHdpdGggZWxlbWVudHMgb2YgYXJyYXkuCisgICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvciY9KGNvbnN0IHZhbGFycmF5PF9UcD4mKTsKKworICAgICAgLy8vICBMZWZ0IHNoaWZ0IGVsZW1lbnRzIG9mIGFycmF5IGJ5IGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdi4KKyAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yPDw9KGNvbnN0IHZhbGFycmF5PF9UcD4mKTsKKworICAgICAgLy8vICBSaWdodCBzaGlmdCBlbGVtZW50cyBvZiBhcnJheSBieSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYuCisgICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcj4+PShjb25zdCB2YWxhcnJheTxfVHA+Jik7CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisJdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IqPShjb25zdCBfRXhwcjxfRG9tLCBfVHA+Jik7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorCXZhbGFycmF5PF9UcD4mIG9wZXJhdG9yLz0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpOworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKwl2YWxhcnJheTxfVHA+JiBvcGVyYXRvciU9KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKTsKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisJdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IrPShjb25zdCBfRXhwcjxfRG9tLCBfVHA+Jik7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorCXZhbGFycmF5PF9UcD4mIG9wZXJhdG9yLT0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpOworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKwl2YWxhcnJheTxfVHA+JiBvcGVyYXRvcl49KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKTsKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisJdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3J8PShjb25zdCBfRXhwcjxfRG9tLCBfVHA+Jik7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorCXZhbGFycmF5PF9UcD4mIG9wZXJhdG9yJj0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpOworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKyAgICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I8PD0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpOworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKwl2YWxhcnJheTxfVHA+JiBvcGVyYXRvcj4+PShjb25zdCBfRXhwcjxfRG9tLCBfVHA+Jik7CisKKyAgICAgIC8vIF9saWIudmFsYXJyYXkubWVtYmVyc18gbWVtYmVyIGZ1bmN0aW9uczoKKyAgICAgIC8vLyAgUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYXJyYXkuCisgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiB0aGUgc3VtIG9mIGFsbCBlbGVtZW50cyBpbiB0aGUgYXJyYXkuCisgICAgICAgKgorICAgICAgICogIEFjY3VtdWxhdGVzIHRoZSBzdW0gb2YgYWxsIGVsZW1lbnRzIGludG8gYSBUcCB1c2luZyArPS4gIFRoZSBvcmRlcgorICAgICAgICogIG9mIGFkZGluZyB0aGUgZWxlbWVudHMgaXMgdW5zcGVjaWZpZWQuCisgICAgICAgKi8KKyAgICAgIF9UcCAgICBzdW0oKSBjb25zdDsKKworICAgICAgLy8vICBSZXR1cm4gdGhlIG1pbmltdW0gZWxlbWVudCB1c2luZyBvcGVyYXRvcjwoKS4KKyAgICAgIF9UcCAgICBtaW4oKSBjb25zdDsJCisKKyAgICAgIC8vLyAgUmV0dXJuIHRoZSBtYXhpbXVtIGVsZW1lbnQgdXNpbmcgb3BlcmF0b3I8KCkuCisgICAgICBfVHAgICAgbWF4KCkgY29uc3Q7CQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBhIHNoaWZ0ZWQgYXJyYXkuCisgICAgICAgKgorICAgICAgICogIEEgbmV3IHZhbGFycmF5IGlzIGNvbnN0cnVjdGVkIGFzIGEgY29weSBvZiB0aGlzIGFycmF5IHdpdGggZWxlbWVudHMKKyAgICAgICAqICBpbiBzaGlmdGVkIHBvc2l0aW9ucy4gIEZvciBhbiBlbGVtZW50IHdpdGggaW5kZXggaSwgdGhlIG5ldyBwb3NpdGlvbgorICAgICAgICogIGlzIGkgLSBuLiAgVGhlIG5ldyB2YWxhcnJheSBoYXMgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgY3VycmVudCBvbmUuCisgICAgICAgKiAgTmV3IGVsZW1lbnRzIHdpdGhvdXQgYSB2YWx1ZSBhcmUgc2V0IHRvIDAuICBFbGVtZW50cyB3aG9zZSBuZXcKKyAgICAgICAqICBwb3NpdGlvbiBpcyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIGFycmF5IGFyZSBkaXNjYXJkZWQuCisgICAgICAgKgorICAgICAgICogIFBvc2l0aXZlIGFyZ3VtZW50cyBzaGlmdCB0b3dhcmQgaW5kZXggMCwgZGlzY2FyZGluZyBlbGVtZW50cyBbMCwgbikuCisgICAgICAgKiAgTmVnYXRpdmUgYXJndW1lbnRzIGRpc2NhcmQgZWxlbWVudHMgZnJvbSB0aGUgdG9wIG9mIHRoZSBhcnJheS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBuICBOdW1iZXIgb2YgZWxlbWVudCBwb3NpdGlvbnMgdG8gc2hpZnQuCisgICAgICAgKiAgQHJldHVybiAgTmV3IHZhbGFycmF5IHdpdGggZWxlbWVudHMgaW4gc2hpZnRlZCBwb3NpdGlvbnMuCisgICAgICAgKi8KKyAgICAgIHZhbGFycmF5PF9UcD4gc2hpZnQgKGludCkgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIGEgcm90YXRlZCBhcnJheS4KKyAgICAgICAqCisgICAgICAgKiAgQSBuZXcgdmFsYXJyYXkgaXMgY29uc3RydWN0ZWQgYXMgYSBjb3B5IG9mIHRoaXMgYXJyYXkgd2l0aCBlbGVtZW50cworICAgICAgICogIGluIHNoaWZ0ZWQgcG9zaXRpb25zLiAgRm9yIGFuIGVsZW1lbnQgd2l0aCBpbmRleCBpLCB0aGUgbmV3IHBvc2l0aW9uCisgICAgICAgKiAgaXMgKGkgLSBuKSAlIHNpemUoKS4gIFRoZSBuZXcgdmFsYXJyYXkgaGFzIHRoZSBzYW1lIHNpemUgYXMgdGhlCisgICAgICAgKiAgY3VycmVudCBvbmUuICBFbGVtZW50cyB0aGF0IGFyZSBzaGlmdGVkIGJleW9uZCB0aGUgYXJyYXkgYm91bmRzIGFyZQorICAgICAgICogIHNoaWZ0ZWQgaW50byB0aGUgb3RoZXIgZW5kIG9mIHRoZSBhcnJheS4gIE5vIGVsZW1lbnRzIGFyZSBsb3N0LgorICAgICAgICoKKyAgICAgICAqICBQb3NpdGl2ZSBhcmd1bWVudHMgc2hpZnQgdG93YXJkIGluZGV4IDAsIHdyYXBwaW5nIGFyb3VuZCB0aGUgdG9wLgorICAgICAgICogIE5lZ2F0aXZlIGFyZ3VtZW50cyBzaGlmdCB0b3dhcmRzIHRoZSB0b3AsIHdyYXBwaW5nIGFyb3VuZCB0byAwLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIG4gIE51bWJlciBvZiBlbGVtZW50IHBvc2l0aW9ucyB0byByb3RhdGUuCisgICAgICAgKiAgQHJldHVybiAgTmV3IHZhbGFycmF5IHdpdGggZWxlbWVudHMgaW4gc2hpZnRlZCBwb3NpdGlvbnMuCisgICAgICAgKi8KKyAgICAgIHZhbGFycmF5PF9UcD4gY3NoaWZ0KGludCkgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXBwbHkgYSBmdW5jdGlvbiB0byB0aGUgYXJyYXkuCisgICAgICAgKgorICAgICAgICogIFJldHVybnMgYSBuZXcgdmFsYXJyYXkgd2l0aCBlbGVtZW50cyBhc3NpZ25lZCB0byB0aGUgcmVzdWx0IG9mCisgICAgICAgKiAgYXBwbHlpbmcgZnVuYyB0byB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIHRoaXMgYXJyYXkuICBUaGUgbmV3CisgICAgICAgKiAgYXJyYXkgaGFzIHRoZSBzYW1lIHNpemUgYXMgdGhpcyBvbmUuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgZnVuYyAgRnVuY3Rpb24gb2YgVHAgcmV0dXJuaW5nIFRwIHRvIGFwcGx5LgorICAgICAgICogIEByZXR1cm4gIE5ldyB2YWxhcnJheSB3aXRoIHRyYW5zZm9ybWVkIGVsZW1lbnRzLgorICAgICAgICovCisgICAgICBfRXhwcjxfVmFsRnVuQ2xvczxfVmFsQXJyYXksIF9UcD4sIF9UcD4gYXBwbHkoX1RwIGZ1bmMoX1RwKSkgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXBwbHkgYSBmdW5jdGlvbiB0byB0aGUgYXJyYXkuCisgICAgICAgKgorICAgICAgICogIFJldHVybnMgYSBuZXcgdmFsYXJyYXkgd2l0aCBlbGVtZW50cyBhc3NpZ25lZCB0byB0aGUgcmVzdWx0IG9mCisgICAgICAgKiAgYXBwbHlpbmcgZnVuYyB0byB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIHRoaXMgYXJyYXkuICBUaGUgbmV3CisgICAgICAgKiAgYXJyYXkgaGFzIHRoZSBzYW1lIHNpemUgYXMgdGhpcyBvbmUuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgZnVuYyAgRnVuY3Rpb24gb2YgY29uc3QgVHAmIHJldHVybmluZyBUcCB0byBhcHBseS4KKyAgICAgICAqICBAcmV0dXJuICBOZXcgdmFsYXJyYXkgd2l0aCB0cmFuc2Zvcm1lZCBlbGVtZW50cy4KKyAgICAgICAqLworICAgICAgX0V4cHI8X1JlZkZ1bkNsb3M8X1ZhbEFycmF5LCBfVHA+LCBfVHA+IGFwcGx5KF9UcCBmdW5jKGNvbnN0IF9UcCYpKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXNpemUgYXJyYXkuCisgICAgICAgKgorICAgICAgICogIFJlc2l6ZSB0aGlzIGFycmF5IHRvIEBhIHNpemUgYW5kIHNldCBhbGwgZWxlbWVudHMgdG8gQGEgYy4gIEFsbAorICAgICAgICogIHJlZmVyZW5jZXMgYW5kIGl0ZXJhdG9ycyBhcmUgaW52YWxpZGF0ZWQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgc2l6ZSAgTmV3IGFycmF5IHNpemUuCisgICAgICAgKiAgQHBhcmFtICBjICBOZXcgdmFsdWUgZm9yIGFsbCBlbGVtZW50cy4KKyAgICAgICAqLworICAgICAgdm9pZCByZXNpemUoc2l6ZV90IF9fc2l6ZSwgX1RwIF9fYyA9IF9UcCgpKTsKKworICAgIHByaXZhdGU6CisgICAgICBzaXplX3QgX01fc2l6ZTsKKyAgICAgIF9UcCogX19yZXN0cmljdF9fIF9NX2RhdGE7CisgICAgICAKKyAgICAgIGZyaWVuZCBjbGFzcyBfQXJyYXk8X1RwPjsKKyAgICB9OworICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb25zdCBfVHAmCisgICAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3JbXShzaXplX3QgX19pKSBjb25zdAorICAgIHsgCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc3Vic2NyaXB0KF9faSk7CisgICAgICByZXR1cm4gX01fZGF0YVtfX2ldOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9UcCYKKyAgICB2YWxhcnJheTxfVHA+OjpvcGVyYXRvcltdKHNpemVfdCBfX2kpCisgICAgeyAKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zdWJzY3JpcHQoX19pKTsKKyAgICAgIHJldHVybiBfTV9kYXRhW19faV07CisgICAgfQorCisgIC8vIEB9IGdyb3VwIG51bWVyaWNfYXJyYXlzCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2luY2x1ZGUgPGJpdHMvdmFsYXJyYXlfYWZ0ZXIuaD4KKyNpbmNsdWRlIDxiaXRzL3NsaWNlX2FycmF5Lmg+CisjaW5jbHVkZSA8Yml0cy9nc2xpY2UuaD4KKyNpbmNsdWRlIDxiaXRzL2dzbGljZV9hcnJheS5oPgorI2luY2x1ZGUgPGJpdHMvbWFza19hcnJheS5oPgorI2luY2x1ZGUgPGJpdHMvaW5kaXJlY3RfYXJyYXkuaD4KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgbnVtZXJpY19hcnJheXMKKyAgICogQHsKKyAgICovCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZQorICAgIHZhbGFycmF5PF9UcD46OnZhbGFycmF5KCkgOiBfTV9zaXplKDApLCBfTV9kYXRhKDApIHt9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSAKKyAgICB2YWxhcnJheTxfVHA+Ojp2YWxhcnJheShzaXplX3QgX19uKSAKKyAgICA6IF9NX3NpemUoX19uKSwgX01fZGF0YShfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX19uKSkKKyAgICB7IHN0ZDo6X192YWxhcnJheV9kZWZhdWx0X2NvbnN0cnVjdChfTV9kYXRhLCBfTV9kYXRhICsgX19uKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUKKyAgICB2YWxhcnJheTxfVHA+Ojp2YWxhcnJheShjb25zdCBfVHAmIF9fdCwgc2l6ZV90IF9fbikKKyAgICA6IF9NX3NpemUoX19uKSwgX01fZGF0YShfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX19uKSkKKyAgICB7IHN0ZDo6X192YWxhcnJheV9maWxsX2NvbnN0cnVjdChfTV9kYXRhLCBfTV9kYXRhICsgX19uLCBfX3QpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZQorICAgIHZhbGFycmF5PF9UcD46OnZhbGFycmF5KGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9fcCwgc2l6ZV90IF9fbikKKyAgICA6IF9NX3NpemUoX19uKSwgX01fZGF0YShfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX19uKSkKKyAgICB7IAorICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9fcCAhPSAwIHx8IF9fbiA9PSAwKTsKKyAgICAgIHN0ZDo6X192YWxhcnJheV9jb3B5X2NvbnN0cnVjdChfX3AsIF9fcCArIF9fbiwgX01fZGF0YSk7IAorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lCisgICAgdmFsYXJyYXk8X1RwPjo6dmFsYXJyYXkoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KQorICAgIDogX01fc2l6ZShfX3YuX01fc2l6ZSksIF9NX2RhdGEoX192YWxhcnJheV9nZXRfc3RvcmFnZTxfVHA+KF9fdi5fTV9zaXplKSkKKyAgICB7IHN0ZDo6X192YWxhcnJheV9jb3B5X2NvbnN0cnVjdChfX3YuX01fZGF0YSwgX192Ll9NX2RhdGEgKyBfTV9zaXplLAorCQkJCSAgICAgX01fZGF0YSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lCisgICAgdmFsYXJyYXk8X1RwPjo6dmFsYXJyYXkoY29uc3Qgc2xpY2VfYXJyYXk8X1RwPiYgX19zYSkKKyAgICA6IF9NX3NpemUoX19zYS5fTV9zeiksIF9NX2RhdGEoX192YWxhcnJheV9nZXRfc3RvcmFnZTxfVHA+KF9fc2EuX01fc3opKQorICAgIHsKKyAgICAgIHN0ZDo6X192YWxhcnJheV9jb3B5X2NvbnN0cnVjdAorCShfX3NhLl9NX2FycmF5LCBfX3NhLl9NX3N6LCBfX3NhLl9NX3N0cmlkZSwgX0FycmF5PF9UcD4oX01fZGF0YSkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lCisgICAgdmFsYXJyYXk8X1RwPjo6dmFsYXJyYXkoY29uc3QgZ3NsaWNlX2FycmF5PF9UcD4mIF9fZ2EpCisgICAgOiBfTV9zaXplKF9fZ2EuX01faW5kZXguc2l6ZSgpKSwKKyAgICAgIF9NX2RhdGEoX192YWxhcnJheV9nZXRfc3RvcmFnZTxfVHA+KF9NX3NpemUpKQorICAgIHsKKyAgICAgIHN0ZDo6X192YWxhcnJheV9jb3B5X2NvbnN0cnVjdAorCShfX2dhLl9NX2FycmF5LCBfQXJyYXk8c2l6ZV90PihfX2dhLl9NX2luZGV4KSwKKwkgX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lCisgICAgdmFsYXJyYXk8X1RwPjo6dmFsYXJyYXkoY29uc3QgbWFza19hcnJheTxfVHA+JiBfX21hKQorICAgIDogX01fc2l6ZShfX21hLl9NX3N6KSwgX01fZGF0YShfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX19tYS5fTV9zeikpCisgICAgeworICAgICAgc3RkOjpfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0CisJKF9fbWEuX01fYXJyYXksIF9fbWEuX01fbWFzaywgX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lCisgICAgdmFsYXJyYXk8X1RwPjo6dmFsYXJyYXkoY29uc3QgaW5kaXJlY3RfYXJyYXk8X1RwPiYgX19pYSkKKyAgICA6IF9NX3NpemUoX19pYS5fTV9zeiksIF9NX2RhdGEoX192YWxhcnJheV9nZXRfc3RvcmFnZTxfVHA+KF9faWEuX01fc3opKQorICAgIHsKKyAgICAgIHN0ZDo6X192YWxhcnJheV9jb3B5X2NvbnN0cnVjdAorCShfX2lhLl9NX2FycmF5LCBfX2lhLl9NX2luZGV4LCBfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSk7CisgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZQorICAgIHZhbGFycmF5PF9UcD46OnZhbGFycmF5KGluaXRpYWxpemVyX2xpc3Q8X1RwPiBfX2wpCisgICAgOiBfTV9zaXplKF9fbC5zaXplKCkpLCBfTV9kYXRhKF9fdmFsYXJyYXlfZ2V0X3N0b3JhZ2U8X1RwPihfX2wuc2l6ZSgpKSkKKyAgICB7IHN0ZDo6X192YWxhcnJheV9jb3B5X2NvbnN0cnVjdCAoX19sLmJlZ2luKCksIF9fbC5lbmQoKSwgX01fZGF0YSk7IH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKyAgICBpbmxpbmUKKyAgICB2YWxhcnJheTxfVHA+Ojp2YWxhcnJheShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UpCisgICAgOiBfTV9zaXplKF9fZS5zaXplKCkpLCBfTV9kYXRhKF9fdmFsYXJyYXlfZ2V0X3N0b3JhZ2U8X1RwPihfTV9zaXplKSkKKyAgICB7IHN0ZDo6X192YWxhcnJheV9jb3B5X2NvbnN0cnVjdChfX2UsIF9NX3NpemUsIF9BcnJheTxfVHA+KF9NX2RhdGEpKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUKKyAgICB2YWxhcnJheTxfVHA+Ojp+dmFsYXJyYXkoKQorICAgIHsKKyAgICAgIHN0ZDo6X192YWxhcnJheV9kZXN0cm95X2VsZW1lbnRzKF9NX2RhdGEsIF9NX2RhdGEgKyBfTV9zaXplKTsKKyAgICAgIHN0ZDo6X192YWxhcnJheV9yZWxlYXNlX21lbW9yeShfTV9kYXRhKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2YWxhcnJheTxfVHA+JgorICAgIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yPShjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpCisgICAgeworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNjMwLiBhcnJheXMgb2YgdmFsYXJyYXkuCisgICAgICBpZiAoX01fc2l6ZSA9PSBfX3YuX01fc2l6ZSkKKwlzdGQ6Ol9fdmFsYXJyYXlfY29weShfX3YuX01fZGF0YSwgX01fc2l6ZSwgX01fZGF0YSk7CisgICAgICBlbHNlCisJeworCSAgaWYgKF9NX2RhdGEpCisJICAgIHsKKwkgICAgICBzdGQ6Ol9fdmFsYXJyYXlfZGVzdHJveV9lbGVtZW50cyhfTV9kYXRhLCBfTV9kYXRhICsgX01fc2l6ZSk7CisJICAgICAgc3RkOjpfX3ZhbGFycmF5X3JlbGVhc2VfbWVtb3J5KF9NX2RhdGEpOworCSAgICB9CisJICBfTV9zaXplID0gX192Ll9NX3NpemU7CisJICBfTV9kYXRhID0gX192YWxhcnJheV9nZXRfc3RvcmFnZTxfVHA+KF9NX3NpemUpOworCSAgc3RkOjpfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0KF9fdi5fTV9kYXRhLCBfX3YuX01fZGF0YSArIF9NX3NpemUsCisJCQkJCSBfTV9kYXRhKTsKKwl9CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisjaWZkZWYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2YWxhcnJheTxfVHA+JgorICAgIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PF9UcD4gX19sKQorICAgIHsKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDYzMC4gYXJyYXlzIG9mIHZhbGFycmF5LgorICAgICAgaWYgKF9NX3NpemUgPT0gX19sLnNpemUoKSkKKwlzdGQ6Ol9fdmFsYXJyYXlfY29weShfX2wuYmVnaW4oKSwgX19sLnNpemUoKSwgX01fZGF0YSk7CisgICAgICBlbHNlCisJeworCSAgaWYgKF9NX2RhdGEpCisJICAgIHsKKwkgICAgICBzdGQ6Ol9fdmFsYXJyYXlfZGVzdHJveV9lbGVtZW50cyhfTV9kYXRhLCBfTV9kYXRhICsgX01fc2l6ZSk7CisJICAgICAgc3RkOjpfX3ZhbGFycmF5X3JlbGVhc2VfbWVtb3J5KF9NX2RhdGEpOworCSAgICB9CisJICBfTV9zaXplID0gX19sLnNpemUoKTsKKwkgIF9NX2RhdGEgPSBfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX01fc2l6ZSk7CisJICBzdGQ6Ol9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QoX19sLmJlZ2luKCksIF9fbC5iZWdpbigpICsgX01fc2l6ZSwKKwkJCQkJIF9NX2RhdGEpOworCX0KKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZhbGFycmF5PF9UcD4mCisgICAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IF9UcCYgX190KQorICAgIHsKKyAgICAgIHN0ZDo6X192YWxhcnJheV9maWxsKF9NX2RhdGEsIF9NX3NpemUsIF9fdCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdmFsYXJyYXk8X1RwPiYKKyAgICB2YWxhcnJheTxfVHA+OjpvcGVyYXRvcj0oY29uc3Qgc2xpY2VfYXJyYXk8X1RwPiYgX19zYSkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fc2l6ZSA9PSBfX3NhLl9NX3N6KTsKKyAgICAgIHN0ZDo6X192YWxhcnJheV9jb3B5KF9fc2EuX01fYXJyYXksIF9fc2EuX01fc3osCisJCQkgICBfX3NhLl9NX3N0cmlkZSwgX0FycmF5PF9UcD4oX01fZGF0YSkpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZhbGFycmF5PF9UcD4mCisgICAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IGdzbGljZV9hcnJheTxfVHA+JiBfX2dhKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChfTV9zaXplID09IF9fZ2EuX01faW5kZXguc2l6ZSgpKTsKKyAgICAgIHN0ZDo6X192YWxhcnJheV9jb3B5KF9fZ2EuX01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9fZ2EuX01faW5kZXgpLAorCQkJICAgX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZhbGFycmF5PF9UcD4mCisgICAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IG1hc2tfYXJyYXk8X1RwPiYgX19tYSkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fc2l6ZSA9PSBfX21hLl9NX3N6KTsKKyAgICAgIHN0ZDo6X192YWxhcnJheV9jb3B5KF9fbWEuX01fYXJyYXksIF9fbWEuX01fbWFzaywKKwkJCSAgIF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfTV9zaXplKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2YWxhcnJheTxfVHA+JgorICAgIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yPShjb25zdCBpbmRpcmVjdF9hcnJheTxfVHA+JiBfX2lhKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChfTV9zaXplID09IF9faWEuX01fc3opOworICAgICAgc3RkOjpfX3ZhbGFycmF5X2NvcHkoX19pYS5fTV9hcnJheSwgX19pYS5fTV9pbmRleCwKKwkJCSAgIF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfTV9zaXplKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgIGlubGluZSB2YWxhcnJheTxfVHA+JgorICAgIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yPShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9NX3NpemUgPT0gX19lLnNpemUoKSk7CisgICAgICBzdGQ6Ol9fdmFsYXJyYXlfY29weShfX2UsIF9NX3NpemUsIF9BcnJheTxfVHA+KF9NX2RhdGEpKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfRXhwcjxfU0Nsb3M8X1ZhbEFycmF5LF9UcD4sIF9UcD4KKyAgICB2YWxhcnJheTxfVHA+OjpvcGVyYXRvcltdKHNsaWNlIF9fcykgY29uc3QKKyAgICB7CisgICAgICB0eXBlZGVmIF9TQ2xvczxfVmFsQXJyYXksX1RwPiBfQ2xvc3VyZTsKKyAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPihfQ2xvc3VyZSAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9fcykpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHNsaWNlX2FycmF5PF9UcD4KKyAgICB2YWxhcnJheTxfVHA+OjpvcGVyYXRvcltdKHNsaWNlIF9fcykKKyAgICB7IHJldHVybiBzbGljZV9hcnJheTxfVHA+KF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX3MpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfRXhwcjxfR0Nsb3M8X1ZhbEFycmF5LF9UcD4sIF9UcD4KKyAgICB2YWxhcnJheTxfVHA+OjpvcGVyYXRvcltdKGNvbnN0IGdzbGljZSYgX19ncykgY29uc3QKKyAgICB7CisgICAgICB0eXBlZGVmIF9HQ2xvczxfVmFsQXJyYXksX1RwPiBfQ2xvc3VyZTsKKyAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPgorCShfQ2xvc3VyZShfQXJyYXk8X1RwPihfTV9kYXRhKSwgX19ncy5fTV9pbmRleC0+X01faW5kZXgpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBnc2xpY2VfYXJyYXk8X1RwPgorICAgIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yW10oY29uc3QgZ3NsaWNlJiBfX2dzKQorICAgIHsKKyAgICAgIHJldHVybiBnc2xpY2VfYXJyYXk8X1RwPgorCShfQXJyYXk8X1RwPihfTV9kYXRhKSwgX19ncy5fTV9pbmRleC0+X01faW5kZXgpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZhbGFycmF5PF9UcD4KKyAgICB2YWxhcnJheTxfVHA+OjpvcGVyYXRvcltdKGNvbnN0IHZhbGFycmF5PGJvb2w+JiBfX20pIGNvbnN0CisgICAgeworICAgICAgc2l6ZV90IF9fcyA9IDA7CisgICAgICBzaXplX3QgX19lID0gX19tLnNpemUoKTsKKyAgICAgIGZvciAoc2l6ZV90IF9faT0wOyBfX2k8X19lOyArK19faSkKKwlpZiAoX19tW19faV0pICsrX19zOworICAgICAgcmV0dXJuIHZhbGFycmF5PF9UcD4obWFza19hcnJheTxfVHA+KF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX3MsCisJCQkJCSAgIF9BcnJheTxib29sPiAoX19tKSkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIG1hc2tfYXJyYXk8X1RwPgorICAgIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yW10oY29uc3QgdmFsYXJyYXk8Ym9vbD4mIF9fbSkKKyAgICB7CisgICAgICBzaXplX3QgX19zID0gMDsKKyAgICAgIHNpemVfdCBfX2UgPSBfX20uc2l6ZSgpOworICAgICAgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX2U7ICsrX19pKQorCWlmIChfX21bX19pXSkgKytfX3M7CisgICAgICByZXR1cm4gbWFza19hcnJheTxfVHA+KF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX3MsIF9BcnJheTxib29sPihfX20pKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfRXhwcjxfSUNsb3M8X1ZhbEFycmF5LF9UcD4sIF9UcD4KKyAgICB2YWxhcnJheTxfVHA+OjpvcGVyYXRvcltdKGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9faSkgY29uc3QKKyAgICB7CisgICAgICB0eXBlZGVmIF9JQ2xvczxfVmFsQXJyYXksX1RwPiBfQ2xvc3VyZTsKKyAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPihfQ2xvc3VyZSgqdGhpcywgX19pKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgaW5kaXJlY3RfYXJyYXk8X1RwPgorICAgIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yW10oY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX19pKQorICAgIHsKKyAgICAgIHJldHVybiBpbmRpcmVjdF9hcnJheTxfVHA+KF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX2kuc2l6ZSgpLAorCQkJCSBfQXJyYXk8c2l6ZV90PihfX2kpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1RwPgorICAgIGlubGluZSBzaXplX3QgCisgICAgdmFsYXJyYXk8X1RwPjo6c2l6ZSgpIGNvbnN0CisgICAgeyByZXR1cm4gX01fc2l6ZTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgdmFsYXJyYXk8X1RwPjo6c3VtKCkgY29uc3QKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fc2l6ZSA+IDApOworICAgICAgcmV0dXJuIHN0ZDo6X192YWxhcnJheV9zdW0oX01fZGF0YSwgX01fZGF0YSArIF9NX3NpemUpOworICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVHA+CisgICAgIGlubGluZSB2YWxhcnJheTxfVHA+CisgICAgIHZhbGFycmF5PF9UcD46OnNoaWZ0KGludCBfX24pIGNvbnN0CisgICAgIHsKKyAgICAgICB2YWxhcnJheTxfVHA+IF9fcmV0OworCisgICAgICAgaWYgKF9NX3NpemUgPT0gMCkKKwkgcmV0dXJuIF9fcmV0OworCisgICAgICAgX1RwKiBfX3Jlc3RyaWN0X18gX190bXBfTV9kYXRhID0KKwkgc3RkOjpfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX01fc2l6ZSk7CisKKyAgICAgICBpZiAoX19uID09IDApCisJIHN0ZDo6X192YWxhcnJheV9jb3B5X2NvbnN0cnVjdChfTV9kYXRhLAorCQkJCQlfTV9kYXRhICsgX01fc2l6ZSwgX190bXBfTV9kYXRhKTsKKyAgICAgICBlbHNlIGlmIChfX24gPiAwKSAgICAgIC8vIHNoaWZ0IGxlZnQKKwkgeworCSAgIGlmIChzaXplX3QoX19uKSA+IF9NX3NpemUpCisJICAgICBfX24gPSBpbnQoX01fc2l6ZSk7CisKKwkgICBzdGQ6Ol9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QoX01fZGF0YSArIF9fbiwKKwkJCQkJICBfTV9kYXRhICsgX01fc2l6ZSwgX190bXBfTV9kYXRhKTsKKwkgICBzdGQ6Ol9fdmFsYXJyYXlfZGVmYXVsdF9jb25zdHJ1Y3QoX190bXBfTV9kYXRhICsgX01fc2l6ZSAtIF9fbiwKKwkJCQkJICAgICBfX3RtcF9NX2RhdGEgKyBfTV9zaXplKTsKKwkgfQorICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgLy8gc2hpZnQgcmlnaHQKKwkgeworCSAgIGlmICgtc2l6ZV90KF9fbikgPiBfTV9zaXplKQorCSAgICAgX19uID0gLWludChfTV9zaXplKTsKKworCSAgIHN0ZDo6X192YWxhcnJheV9jb3B5X2NvbnN0cnVjdChfTV9kYXRhLCBfTV9kYXRhICsgX01fc2l6ZSArIF9fbiwKKwkJCQkJICBfX3RtcF9NX2RhdGEgLSBfX24pOworCSAgIHN0ZDo6X192YWxhcnJheV9kZWZhdWx0X2NvbnN0cnVjdChfX3RtcF9NX2RhdGEsCisJCQkJCSAgICAgX190bXBfTV9kYXRhIC0gX19uKTsKKwkgfQorCisgICAgICAgX19yZXQuX01fc2l6ZSA9IF9NX3NpemU7CisgICAgICAgX19yZXQuX01fZGF0YSA9IF9fdG1wX01fZGF0YTsKKyAgICAgICByZXR1cm4gX19yZXQ7CisgICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVHA+CisgICAgIGlubGluZSB2YWxhcnJheTxfVHA+CisgICAgIHZhbGFycmF5PF9UcD46OmNzaGlmdChpbnQgX19uKSBjb25zdAorICAgICB7CisgICAgICAgdmFsYXJyYXk8X1RwPiBfX3JldDsKKworICAgICAgIGlmIChfTV9zaXplID09IDApCisJIHJldHVybiBfX3JldDsKKworICAgICAgIF9UcCogX19yZXN0cmljdF9fIF9fdG1wX01fZGF0YSA9CisJIHN0ZDo6X192YWxhcnJheV9nZXRfc3RvcmFnZTxfVHA+KF9NX3NpemUpOworCisgICAgICAgaWYgKF9fbiA9PSAwKQorCSBzdGQ6Ol9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QoX01fZGF0YSwKKwkJCQkJX01fZGF0YSArIF9NX3NpemUsIF9fdG1wX01fZGF0YSk7CisgICAgICAgZWxzZSBpZiAoX19uID4gMCkgICAgICAvLyBjc2hpZnQgbGVmdAorCSB7CisJICAgaWYgKHNpemVfdChfX24pID4gX01fc2l6ZSkKKwkgICAgIF9fbiA9IGludChfX24gJSBfTV9zaXplKTsKKworCSAgIHN0ZDo6X192YWxhcnJheV9jb3B5X2NvbnN0cnVjdChfTV9kYXRhLCBfTV9kYXRhICsgX19uLAorCQkJCQkgIF9fdG1wX01fZGF0YSArIF9NX3NpemUgLSBfX24pOworCSAgIHN0ZDo6X192YWxhcnJheV9jb3B5X2NvbnN0cnVjdChfTV9kYXRhICsgX19uLCBfTV9kYXRhICsgX01fc2l6ZSwKKwkJCQkJICBfX3RtcF9NX2RhdGEpOworCSB9CisgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAvLyBjc2hpZnQgcmlnaHQKKwkgeworCSAgIGlmICgtc2l6ZV90KF9fbikgPiBfTV9zaXplKQorCSAgICAgX19uID0gLWludCgtc2l6ZV90KF9fbikgJSBfTV9zaXplKTsKKworCSAgIHN0ZDo6X192YWxhcnJheV9jb3B5X2NvbnN0cnVjdChfTV9kYXRhICsgX01fc2l6ZSArIF9fbiwKKwkJCQkJICBfTV9kYXRhICsgX01fc2l6ZSwgX190bXBfTV9kYXRhKTsKKwkgICBzdGQ6Ol9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QoX01fZGF0YSwgX01fZGF0YSArIF9NX3NpemUgKyBfX24sCisJCQkJCSAgX190bXBfTV9kYXRhIC0gX19uKTsKKwkgfQorCisgICAgICAgX19yZXQuX01fc2l6ZSA9IF9NX3NpemU7CisgICAgICAgX19yZXQuX01fZGF0YSA9IF9fdG1wX01fZGF0YTsKKyAgICAgICByZXR1cm4gX19yZXQ7CisgICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICB2YWxhcnJheTxfVHA+OjpyZXNpemUoc2l6ZV90IF9fbiwgX1RwIF9fYykKKyAgICB7CisgICAgICAvLyBUaGlzIGNvbXBsaWNhdGlvbiBpcyBzbyB0byBtYWtlIHZhbGFycmF5PHZhbGFycmF5PFQ+ID4gd29yaworICAgICAgLy8gZXZlbiB0aG91Z2ggaXQgaXMgbm90IHJlcXVpcmVkIGJ5IHRoZSBzdGFuZGFyZC4gIE5vYm9keSBzaG91bGQKKyAgICAgIC8vIGJlIHNheWluZyB2YWxhcnJheTx2YWxhcnJheTxUPiA+IGFueXdheS4gIFNlZSB0aGUgc3BlY3MuCisgICAgICBzdGQ6Ol9fdmFsYXJyYXlfZGVzdHJveV9lbGVtZW50cyhfTV9kYXRhLCBfTV9kYXRhICsgX01fc2l6ZSk7CisgICAgICBpZiAoX01fc2l6ZSAhPSBfX24pCisJeworCSAgc3RkOjpfX3ZhbGFycmF5X3JlbGVhc2VfbWVtb3J5KF9NX2RhdGEpOworCSAgX01fc2l6ZSA9IF9fbjsKKwkgIF9NX2RhdGEgPSBfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX19uKTsKKwl9CisgICAgICBzdGQ6Ol9fdmFsYXJyYXlfZmlsbF9jb25zdHJ1Y3QoX01fZGF0YSwgX01fZGF0YSArIF9fbiwgX19jKTsKKyAgICB9CisgICAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgdmFsYXJyYXk8X1RwPjo6bWluKCkgY29uc3QKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fc2l6ZSA+IDApOworICAgICAgcmV0dXJuICpzdGQ6Om1pbl9lbGVtZW50KF9NX2RhdGEsIF9NX2RhdGEgKyBfTV9zaXplKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICB2YWxhcnJheTxfVHA+OjptYXgoKSBjb25zdAorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChfTV9zaXplID4gMCk7CisgICAgICByZXR1cm4gKnN0ZDo6bWF4X2VsZW1lbnQoX01fZGF0YSwgX01fZGF0YSArIF9NX3NpemUpOworICAgIH0KKyAgCisgIHRlbXBsYXRlPGNsYXNzIF9UcD4KKyAgICBpbmxpbmUgX0V4cHI8X1ZhbEZ1bkNsb3M8X1ZhbEFycmF5LCBfVHA+LCBfVHA+CisgICAgdmFsYXJyYXk8X1RwPjo6YXBwbHkoX1RwIGZ1bmMoX1RwKSkgY29uc3QKKyAgICB7CisgICAgICB0eXBlZGVmIF9WYWxGdW5DbG9zPF9WYWxBcnJheSwgX1RwPiBfQ2xvc3VyZTsKKyAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPihfQ2xvc3VyZSgqdGhpcywgZnVuYykpOworICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVHA+CisgICAgaW5saW5lIF9FeHByPF9SZWZGdW5DbG9zPF9WYWxBcnJheSwgX1RwPiwgX1RwPgorICAgIHZhbGFycmF5PF9UcD46OmFwcGx5KF9UcCBmdW5jKGNvbnN0IF9UcCAmKSkgY29uc3QKKyAgICB7CisgICAgICB0eXBlZGVmIF9SZWZGdW5DbG9zPF9WYWxBcnJheSwgX1RwPiBfQ2xvc3VyZTsKKyAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPihfQ2xvc3VyZSgqdGhpcywgZnVuYykpOworICAgIH0KKworI2RlZmluZSBfREVGSU5FX1ZBTEFSUkFZX1VOQVJZX09QRVJBVE9SKF9PcCwgX05hbWUpICAgICAgICAgICAgICAgICAgICAgXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CQkJCQkJXAorICAgIGlubGluZSB0eXBlbmFtZSB2YWxhcnJheTxfVHA+Ojp0ZW1wbGF0ZSBfVW5hcnlPcDxfTmFtZT46Ol9SdCAgICAgIAlcCisgICAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgX09wKCkgY29uc3QJCQkJCVwKKyAgICB7CQkJCQkJCQkJXAorICAgICAgdHlwZWRlZiBfVW5DbG9zPF9OYW1lLCBfVmFsQXJyYXksIF9UcD4gX0Nsb3N1cmU7CSAgICAgICAgICAgICAgICBcCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZnVuPF9OYW1lLCBfVHA+OjpyZXN1bHRfdHlwZSBfUnQ7ICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9SdD4oX0Nsb3N1cmUoKnRoaXMpKTsJCQlcCisgICAgfQorCisgICAgX0RFRklORV9WQUxBUlJBWV9VTkFSWV9PUEVSQVRPUigrLCBfX3VuYXJ5X3BsdXMpCisgICAgX0RFRklORV9WQUxBUlJBWV9VTkFSWV9PUEVSQVRPUigtLCBfX25lZ2F0ZSkKKyAgICBfREVGSU5FX1ZBTEFSUkFZX1VOQVJZX09QRVJBVE9SKH4sIF9fYml0d2lzZV9ub3QpCisgICAgX0RFRklORV9WQUxBUlJBWV9VTkFSWV9PUEVSQVRPUiAoISwgX19sb2dpY2FsX25vdCkKKworI3VuZGVmIF9ERUZJTkVfVkFMQVJSQVlfVU5BUllfT1BFUkFUT1IKKworI2RlZmluZSBfREVGSU5FX1ZBTEFSUkFZX0FVR01FTlRFRF9BU1NJR05NRU5UKF9PcCwgX05hbWUpICAgICAgICAgICAgICAgXAorICB0ZW1wbGF0ZTxjbGFzcyBfVHA+CQkJCQkJCVwKKyAgICBpbmxpbmUgdmFsYXJyYXk8X1RwPiYJCQkJCQlcCisgICAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgX09wIyM9KGNvbnN0IF9UcCAmX190KQkJCVwKKyAgICB7CQkJCQkJCQkJXAorICAgICAgX0FycmF5X2F1Z21lbnRlZF8jI19OYW1lKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfTV9zaXplLCBfX3QpOwlcCisgICAgICByZXR1cm4gKnRoaXM7CQkJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorICB0ZW1wbGF0ZTxjbGFzcyBfVHA+CQkJCQkJCVwKKyAgICBpbmxpbmUgdmFsYXJyYXk8X1RwPiYJCQkJCQlcCisgICAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgX09wIyM9KGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdikJCVwKKyAgICB7CQkJCQkJCQkJXAorICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9NX3NpemUgPT0gX192Ll9NX3NpemUpOyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgX0FycmF5X2F1Z21lbnRlZF8jI19OYW1lKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfTV9zaXplLCAJCVwKKwkJCSAgICAgICBfQXJyYXk8X1RwPihfX3YuX01fZGF0YSkpOwkJXAorICAgICAgcmV0dXJuICp0aGlzOwkJCQkJCQlcCisgICAgfQorCitfREVGSU5FX1ZBTEFSUkFZX0FVR01FTlRFRF9BU1NJR05NRU5UKCssIF9fcGx1cykKK19ERUZJTkVfVkFMQVJSQVlfQVVHTUVOVEVEX0FTU0lHTk1FTlQoLSwgX19taW51cykKK19ERUZJTkVfVkFMQVJSQVlfQVVHTUVOVEVEX0FTU0lHTk1FTlQoKiwgX19tdWx0aXBsaWVzKQorX0RFRklORV9WQUxBUlJBWV9BVUdNRU5URURfQVNTSUdOTUVOVCgvLCBfX2RpdmlkZXMpCitfREVGSU5FX1ZBTEFSUkFZX0FVR01FTlRFRF9BU1NJR05NRU5UKCUsIF9fbW9kdWx1cykKK19ERUZJTkVfVkFMQVJSQVlfQVVHTUVOVEVEX0FTU0lHTk1FTlQoXiwgX19iaXR3aXNlX3hvcikKK19ERUZJTkVfVkFMQVJSQVlfQVVHTUVOVEVEX0FTU0lHTk1FTlQoJiwgX19iaXR3aXNlX2FuZCkKK19ERUZJTkVfVkFMQVJSQVlfQVVHTUVOVEVEX0FTU0lHTk1FTlQofCwgX19iaXR3aXNlX29yKQorX0RFRklORV9WQUxBUlJBWV9BVUdNRU5URURfQVNTSUdOTUVOVCg8PCwgX19zaGlmdF9sZWZ0KQorX0RFRklORV9WQUxBUlJBWV9BVUdNRU5URURfQVNTSUdOTUVOVCg+PiwgX19zaGlmdF9yaWdodCkKKworI3VuZGVmIF9ERUZJTkVfVkFMQVJSQVlfQVVHTUVOVEVEX0FTU0lHTk1FTlQKKworI2RlZmluZSBfREVGSU5FX1ZBTEFSUkFZX0VYUFJfQVVHTUVOVEVEX0FTU0lHTk1FTlQoX09wLCBfTmFtZSkgICAgICAgICAgXAorICB0ZW1wbGF0ZTxjbGFzcyBfVHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+CQkJCVwKKyAgICBpbmxpbmUgdmFsYXJyYXk8X1RwPiYJCQkJCQlcCisgICAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgX09wIyM9KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSkJCVwKKyAgICB7CQkJCQkJCQkJXAorICAgICAgX0FycmF5X2F1Z21lbnRlZF8jI19OYW1lKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX2UsIF9NX3NpemUpOwlcCisgICAgICByZXR1cm4gKnRoaXM7CQkJCQkJCVwKKyAgICB9CisKK19ERUZJTkVfVkFMQVJSQVlfRVhQUl9BVUdNRU5URURfQVNTSUdOTUVOVCgrLCBfX3BsdXMpCitfREVGSU5FX1ZBTEFSUkFZX0VYUFJfQVVHTUVOVEVEX0FTU0lHTk1FTlQoLSwgX19taW51cykKK19ERUZJTkVfVkFMQVJSQVlfRVhQUl9BVUdNRU5URURfQVNTSUdOTUVOVCgqLCBfX211bHRpcGxpZXMpCitfREVGSU5FX1ZBTEFSUkFZX0VYUFJfQVVHTUVOVEVEX0FTU0lHTk1FTlQoLywgX19kaXZpZGVzKQorX0RFRklORV9WQUxBUlJBWV9FWFBSX0FVR01FTlRFRF9BU1NJR05NRU5UKCUsIF9fbW9kdWx1cykKK19ERUZJTkVfVkFMQVJSQVlfRVhQUl9BVUdNRU5URURfQVNTSUdOTUVOVCheLCBfX2JpdHdpc2VfeG9yKQorX0RFRklORV9WQUxBUlJBWV9FWFBSX0FVR01FTlRFRF9BU1NJR05NRU5UKCYsIF9fYml0d2lzZV9hbmQpCitfREVGSU5FX1ZBTEFSUkFZX0VYUFJfQVVHTUVOVEVEX0FTU0lHTk1FTlQofCwgX19iaXR3aXNlX29yKQorX0RFRklORV9WQUxBUlJBWV9FWFBSX0FVR01FTlRFRF9BU1NJR05NRU5UKDw8LCBfX3NoaWZ0X2xlZnQpCitfREVGSU5FX1ZBTEFSUkFZX0VYUFJfQVVHTUVOVEVEX0FTU0lHTk1FTlQoPj4sIF9fc2hpZnRfcmlnaHQpCisKKyN1bmRlZiBfREVGSU5FX1ZBTEFSUkFZX0VYUFJfQVVHTUVOVEVEX0FTU0lHTk1FTlQKKyAgICAKKworI2RlZmluZSBfREVGSU5FX0JJTkFSWV9PUEVSQVRPUihfT3AsIF9OYW1lKQkJCQlcCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4JCQkJCQlcCisgICAgaW5saW5lIF9FeHByPF9CaW5DbG9zPF9OYW1lLCBfVmFsQXJyYXksIF9WYWxBcnJheSwgX1RwLCBfVHA+LCAgICAgICBcCisgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9fZnVuPF9OYW1lLCBfVHA+OjpyZXN1bHRfdHlwZT4gICAgICAgICAgICAgICBcCisgICAgb3BlcmF0b3IgX09wKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdiwgY29uc3QgdmFsYXJyYXk8X1RwPiYgX193KQlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChfX3Yuc2l6ZSgpID09IF9fdy5zaXplKCkpOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHR5cGVkZWYgX0JpbkNsb3M8X05hbWUsIF9WYWxBcnJheSwgX1ZhbEFycmF5LCBfVHAsIF9UcD4gX0Nsb3N1cmU7IFwKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19mdW48X05hbWUsIF9UcD46OnJlc3VsdF90eXBlIF9SdDsgICAgICAgICAgICAgIFwKKyAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1J0PihfQ2xvc3VyZShfX3YsIF9fdykpOyAgICAgICAgICAgICAgICAgIFwKKyAgICB9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CQkJCQkJXAorICAgIGlubGluZSBfRXhwcjxfQmluQ2xvczxfTmFtZSwgX1ZhbEFycmF5LF9Db25zdGFudCwgX1RwLCBfVHA+LCAgICAgICAgXAorICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfX2Z1bjxfTmFtZSwgX1RwPjo6cmVzdWx0X3R5cGU+ICAgICAgICAgICAgICAgXAorICAgIG9wZXJhdG9yIF9PcChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YsIGNvbnN0IF9UcCYgX190KQkJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICB0eXBlZGVmIF9CaW5DbG9zPF9OYW1lLCBfVmFsQXJyYXksIF9Db25zdGFudCwgX1RwLCBfVHA+IF9DbG9zdXJlOwlcCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZnVuPF9OYW1lLCBfVHA+OjpyZXN1bHRfdHlwZSBfUnQ7ICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9SdD4oX0Nsb3N1cmUoX192LCBfX3QpKTsJICAgICAgICAgICAgICAgIFwKKyAgICB9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CQkJCQkJXAorICAgIGlubGluZSBfRXhwcjxfQmluQ2xvczxfTmFtZSwgX0NvbnN0YW50LCBfVmFsQXJyYXksIF9UcCwgX1RwPiwgICAgICAgXAorICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfX2Z1bjxfTmFtZSwgX1RwPjo6cmVzdWx0X3R5cGU+ICAgICAgICAgICAgICAgXAorICAgIG9wZXJhdG9yIF9PcChjb25zdCBfVHAmIF9fdCwgY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KQkJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICB0eXBlZGVmIF9CaW5DbG9zPF9OYW1lLCBfQ29uc3RhbnQsIF9WYWxBcnJheSwgX1RwLCBfVHA+IF9DbG9zdXJlOyBcCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZnVuPF9OYW1lLCBfVHA+OjpyZXN1bHRfdHlwZSBfUnQ7ICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9SdD4oX0Nsb3N1cmUoX190LCBfX3YpKTsgICAgICAgIAkgICAgICAgIFwKKyAgICB9CisKK19ERUZJTkVfQklOQVJZX09QRVJBVE9SKCssIF9fcGx1cykKK19ERUZJTkVfQklOQVJZX09QRVJBVE9SKC0sIF9fbWludXMpCitfREVGSU5FX0JJTkFSWV9PUEVSQVRPUigqLCBfX211bHRpcGxpZXMpCitfREVGSU5FX0JJTkFSWV9PUEVSQVRPUigvLCBfX2RpdmlkZXMpCitfREVGSU5FX0JJTkFSWV9PUEVSQVRPUiglLCBfX21vZHVsdXMpCitfREVGSU5FX0JJTkFSWV9PUEVSQVRPUiheLCBfX2JpdHdpc2VfeG9yKQorX0RFRklORV9CSU5BUllfT1BFUkFUT1IoJiwgX19iaXR3aXNlX2FuZCkKK19ERUZJTkVfQklOQVJZX09QRVJBVE9SKHwsIF9fYml0d2lzZV9vcikKK19ERUZJTkVfQklOQVJZX09QRVJBVE9SKDw8LCBfX3NoaWZ0X2xlZnQpCitfREVGSU5FX0JJTkFSWV9PUEVSQVRPUig+PiwgX19zaGlmdF9yaWdodCkKK19ERUZJTkVfQklOQVJZX09QRVJBVE9SKCYmLCBfX2xvZ2ljYWxfYW5kKQorX0RFRklORV9CSU5BUllfT1BFUkFUT1IofHwsIF9fbG9naWNhbF9vcikKK19ERUZJTkVfQklOQVJZX09QRVJBVE9SKD09LCBfX2VxdWFsX3RvKQorX0RFRklORV9CSU5BUllfT1BFUkFUT1IoIT0sIF9fbm90X2VxdWFsX3RvKQorX0RFRklORV9CSU5BUllfT1BFUkFUT1IoPCwgX19sZXNzKQorX0RFRklORV9CSU5BUllfT1BFUkFUT1IoPiwgX19ncmVhdGVyKQorX0RFRklORV9CSU5BUllfT1BFUkFUT1IoPD0sIF9fbGVzc19lcXVhbCkKK19ERUZJTkVfQklOQVJZX09QRVJBVE9SKD49LCBfX2dyZWF0ZXJfZXF1YWwpCisKKyN1bmRlZiBfREVGSU5FX0JJTkFSWV9PUEVSQVRPUgorCisgIC8vIEB9IGdyb3VwIG51bWVyaWNfYXJyYXlzCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmIC8qIF9HTElCQ1hYX1ZBTEFSUkFZICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3ZlY3RvciBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvaW5jbHVkZS9jKysvNC41LjMvdmVjdG9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZWNkZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2luY2x1ZGUvYysrLzQuNS4zL3ZlY3RvcgpAQCAtMCwwICsxLDgxIEBACisvLyA8dmVjdG9yPiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDkKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NgorICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGluY2x1ZGUvdmVjdG9yCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1ZFQ1RPUgorI2RlZmluZSBfR0xJQkNYWF9WRUNUT1IgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL3N0bF9hbGdvYmFzZS5oPgorI2luY2x1ZGUgPGJpdHMvYWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfY29uc3RydWN0Lmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfdW5pbml0aWFsaXplZC5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX3ZlY3Rvci5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2J2ZWN0b3IuaD4gCisKKyNpZm5kZWYgX0dMSUJDWFhfRVhQT1JUX1RFTVBMQVRFCisjIGluY2x1ZGUgPGJpdHMvdmVjdG9yLnRjYz4KKyNlbmRpZgorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyMgaW5jbHVkZSA8ZGVidWcvdmVjdG9yPgorI2VuZGlmCisKKyNpZmRlZiBfR0xJQkNYWF9QUk9GSUxFCisjIGluY2x1ZGUgPHByb2ZpbGUvdmVjdG9yPgorI2VuZGlmCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9WRUNUT1IgKi8KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9saWIgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2xpYgpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi4wY2JiMzAyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9saWIKQEAgLTAsMCArMSBAQAorc3lzcm9vdC9saWIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2xpYjMyIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9saWIzMgpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi43OTUxNDA1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9saWIzMgpAQCAtMCwwICsxIEBACitsaWIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2xpYjY0IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9saWI2NApuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi43OTUxNDA1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9saWI2NApAQCAtMCwwICsxIEBACitsaWIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvLmZha2Vyb290LjAwMDAwIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290Ly5mYWtlcm9vdC4wMDAwMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290Ly5mYWtlcm9vdC4wMDAwMApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2V0Yy9ycGMgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvZXRjL3JwYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjAwOTJiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2V0Yy9ycGMKQEAgLTAsMCArMSw2OSBAQAorI2lkZW50CSJAKCMpcnBjCTEuMTEJOTUvMDcvMTQgU01JIgkvKiBTVnI0LjAgMS4yCSovCisjCisjCXJwYworIworcG9ydG1hcHBlcgkxMDAwMDAJcG9ydG1hcCBzdW5ycGMgcnBjYmluZAorcnN0YXRkCQkxMDAwMDEJcnN0YXQgcnVwIHBlcmZtZXRlciByc3RhdF9zdmMKK3J1c2Vyc2QJCTEwMDAwMglydXNlcnMKK25mcwkJMTAwMDAzCW5mc3Byb2cKK3lwc2VydgkJMTAwMDA0CXlwcHJvZworbW91bnRkCQkxMDAwMDUJbW91bnQgc2hvd21vdW50Cit5cGJpbmQJCTEwMDAwNword2FsbGQJCTEwMDAwOAlyd2FsbCBzaHV0ZG93bgoreXBwYXNzd2RkCTEwMDAwOQl5cHBhc3N3ZAorZXRoZXJzdGF0ZAkxMDAwMTAJZXRoZXJzdGF0CitycXVvdGFkCQkxMDAwMTEJcnF1b3RhcHJvZyBxdW90YSBycXVvdGEKK3NwcmF5ZAkJMTAwMDEyCXNwcmF5CiszMjcwX21hcHBlcgkxMDAwMTMKK3JqZV9tYXBwZXIJMTAwMDE0CitzZWxlY3Rpb25fc3ZjCTEwMDAxNQlzZWxuc3ZjCitkYXRhYmFzZV9zdmMJMTAwMDE2CityZXhkCQkxMDAwMTcJcmV4CithbGlzCQkxMDAwMTgKK3NjaGVkCQkxMDAwMTkKK2xsb2NrbWdyCTEwMDAyMAorbmxvY2ttZ3IJMTAwMDIxCit4MjUuaW5yCQkxMDAwMjIKK3N0YXRtb24JCTEwMDAyMworc3RhdHVzCQkxMDAwMjQKK2Jvb3RwYXJhbQkxMDAwMjYKK3lwdXBkYXRlZAkxMDAwMjgJeXB1cGRhdGUKK2tleXNlcnYJCTEwMDAyOQlrZXlzZXJ2ZXIKK3N1bmxpbmtfbWFwcGVyCTEwMDAzMwordGZzZAkJMTAwMDM3Cituc2VkCQkxMDAwMzgKK25zZW1udGQJCTEwMDAzOQorc2hvd2ZoZAkJMTAwMDQzCXNob3dmaAoraW9hZG1kCQkxMDAwNTUJcnBjLmlvYWRtZAorTkVUbGljZW5zZQkxMDAwNjIKK3N1bmlzYW1kCTEwMDA2NQorZGVidWdfc3ZjIAkxMDAwNjYgIGRic3J2Cit5cHhmcmQJCTEwMDA2OSAgcnBjLnlweGZyZAorYnVndHJhcWQJMTAwMDcxCitrZXJiZAkJMTAwMDc4CitldmVudAkJMTAwMTAxCW5hLmV2ZW50CSMgU3VuTmV0IE1hbmFnZXIKK2xvZ2dlcgkJMTAwMTAyCW5hLmxvZ2dlcgkjIFN1bk5ldCBNYW5hZ2VyCitzeW5jCQkxMDAxMDQJbmEuc3luYworaG9zdHBlcmYJMTAwMTA3CW5hLmhvc3RwZXJmCithY3Rpdml0eQkxMDAxMDkJbmEuYWN0aXZpdHkJIyBTdW5OZXQgTWFuYWdlcgoraG9zdG1lbQkJMTAwMTEyCW5hLmhvc3RtZW0KK3NhbXBsZQkJMTAwMTEzCW5hLnNhbXBsZQoreDI1CQkxMDAxMTQJbmEueDI1CitwaW5nCQkxMDAxMTUJbmEucGluZworcnBjbmZzCQkxMDAxMTYJbmEucnBjbmZzCitob3N0aWYJCTEwMDExNwluYS5ob3N0aWYKK2V0aGVyaWYJCTEwMDExOAluYS5ldGhlcmlmCitpcHJvdXRlcwkxMDAxMjAJbmEuaXByb3V0ZXMKK2xheWVycwkJMTAwMTIxCW5hLmxheWVycworc25tcAkJMTAwMTIyCW5hLnNubXAgc25tcC1jbWMgc25tcC1zeW5vcHRpY3Mgc25tcC11bmlzeXMgc25tcC11dGsKK3RyYWZmaWMJCTEwMDEyMwluYS50cmFmZmljCituZnNfYWNsCQkxMDAyMjcKK3NhZG1pbmQJCTEwMDIzMgorbmlzZAkJMTAwMzAwCXJwYy5uaXNkCituaXNwYXNzd2QJMTAwMzAzCXJwYy5uaXNwYXNzd2RkCit1ZnNkCQkxMDAyMzMJdWZzZAorcGNuZnNkCQkxNTAwMDEJcGNuZnMKK2FtZAkJMzAwMDE5ICBhbXEKK3NnaV9mYW0JCTM5MTAwMglmYW0KK2J3bmZzZAkJNTQ1NTgwNDE3CitmeXB4ZnJkCQk2MDAxMDAwNjkgZnJlZWJzZC15cHhmcmQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGQtMi45LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9sZC0yLjkuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZThmMzczMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGQtMi45LnNvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGQtbGludXguc28uMyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGQtbGludXguc28uMwpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi4zYjI5Y2JmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9sZC1saW51eC5zby4zCkBAIC0wLDAgKzEgQEAKK2xkLTIuOS5zbwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGliIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWIKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uNzk1MTQwNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGliCkBAIC0wLDAgKzEgQEAKK2xpYgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGliQnJva2VuTG9jYWxlLTIuOS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGliQnJva2VuTG9jYWxlLTIuOS5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNzE0MzM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJCcm9rZW5Mb2NhbGUtMi45LnNvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGliQnJva2VuTG9jYWxlLnNvLjEgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYkJyb2tlbkxvY2FsZS5zby4xCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjMyMDZkM2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYkJyb2tlbkxvY2FsZS5zby4xCkBAIC0wLDAgKzEgQEAKK2xpYkJyb2tlbkxvY2FsZS0yLjkuc28KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYlNlZ0ZhdWx0LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJTZWdGYXVsdC5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44OTY3ODQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJTZWdGYXVsdC5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYmFubC0yLjkuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYmFubC0yLjkuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGZkNmEwNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGliYW5sLTIuOS5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYmFubC5zby4xIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJhbmwuc28uMQpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5hOTRlNTZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJhbmwuc28uMQpAQCAtMCwwICsxIEBACitsaWJhbmwtMi45LnNvClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJjLTIuOS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGliYy0yLjkuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWRlNDgyYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGliYy0yLjkuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJjLnNvLjYgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYmMuc28uNgpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi45ODI2MDlhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJjLnNvLjYKQEAgLTAsMCArMSBAQAorbGliYy0yLjkuc28KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYmNyeXB0LTIuOS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGliY3J5cHQtMi45LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNkZTI0NjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYmNyeXB0LTIuOS5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYmNyeXB0LnNvLjEgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYmNyeXB0LnNvLjEKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uZTM2ZjhlZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGliY3J5cHQuc28uMQpAQCAtMCwwICsxIEBACitsaWJjcnlwdC0yLjkuc28KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYmRsLTIuOS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGliZGwtMi45LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYwNGRhNDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYmRsLTIuOS5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYmRsLnNvLjIgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYmRsLnNvLjIKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uMzk1MWI4YgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGliZGwuc28uMgpAQCAtMCwwICsxIEBACitsaWJkbC0yLjkuc28KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYmdjY19zLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJnY2Nfcy5zbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjQ3NjQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJnY2Nfcy5zbwpAQCAtMCwwICsxLDQgQEAKKy8qIEdOVSBsZCBzY3JpcHQKKyAgIFVzZSB0aGUgc2hhcmVkIGxpYnJhcnksIGJ1dCBzb21lIGZ1bmN0aW9ucyBhcmUgb25seSBpbgorICAgdGhlIHN0YXRpYyBsaWJyYXJ5LiAgKi8KK0dST1VQICggbGliZ2NjX3Muc28uMSBsaWJnY2MuYSApCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYmdjY19zLnNvLjEgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYmdjY19zLnNvLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUwN2ZjOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGliZ2NjX3Muc28uMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYmliZXJ0eS5hIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJpYmVydHkuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDdiMmRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJpYmVydHkuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYm0tMi45LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJtLTIuOS5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZTdmYWU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJtLTIuOS5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYm0uc28uNiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlibS5zby42Cm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLmMzNDQ2NGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYm0uc28uNgpAQCAtMCwwICsxIEBACitsaWJtLTIuOS5zbwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlibWVtdXNhZ2Uuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYm1lbXVzYWdlLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM1ZmI2NjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYm1lbXVzYWdlLnNvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlibnNsLTIuOS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlibnNsLTIuOS5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MTU1OThhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJuc2wtMi45LnNvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlibnNsLnNvLjEgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYm5zbC5zby4xCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjM4YmNjMDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYm5zbC5zby4xCkBAIC0wLDAgKzEgQEAKK2xpYm5zbC0yLjkuc28KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYm5zc19jb21wYXQtMi45LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJuc3NfY29tcGF0LTIuOS5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZDA0NWUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJuc3NfY29tcGF0LTIuOS5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYm5zc19jb21wYXQuc28uMiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlibnNzX2NvbXBhdC5zby4yCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLmViNWYwMmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYm5zc19jb21wYXQuc28uMgpAQCAtMCwwICsxIEBACitsaWJuc3NfY29tcGF0LTIuOS5zbwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlibnNzX2Rucy0yLjkuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYm5zc19kbnMtMi45LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ0MmYxNmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYm5zc19kbnMtMi45LnNvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlibnNzX2Rucy5zby4yIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJuc3NfZG5zLnNvLjIKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uMTkxZDMxZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlibnNzX2Rucy5zby4yCkBAIC0wLDAgKzEgQEAKK2xpYm5zc19kbnMtMi45LnNvClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJuc3NfZmlsZXMtMi45LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJuc3NfZmlsZXMtMi45LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNjODBhODEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYm5zc19maWxlcy0yLjkuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJuc3NfZmlsZXMuc28uMiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlibnNzX2ZpbGVzLnNvLjIKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uODNjNDcxZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlibnNzX2ZpbGVzLnNvLjIKQEAgLTAsMCArMSBAQAorbGlibnNzX2ZpbGVzLTIuOS5zbwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlibnNzX2hlc2lvZC0yLjkuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYm5zc19oZXNpb2QtMi45LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMzZmI2OGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYm5zc19oZXNpb2QtMi45LnNvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlibnNzX2hlc2lvZC5zby4yIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJuc3NfaGVzaW9kLnNvLjIKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uNzVkZjBiYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlibnNzX2hlc2lvZC5zby4yCkBAIC0wLDAgKzEgQEAKK2xpYm5zc19oZXNpb2QtMi45LnNvClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJuc3NfbmlzLTIuOS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlibnNzX25pcy0yLjkuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjM2YzIxMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlibnNzX25pcy0yLjkuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJuc3NfbmlzLnNvLjIgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYm5zc19uaXMuc28uMgpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5jZTE2NTU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJuc3NfbmlzLnNvLjIKQEAgLTAsMCArMSBAQAorbGlibnNzX25pcy0yLjkuc28KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYm5zc19uaXNwbHVzLTIuOS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlibnNzX25pc3BsdXMtMi45LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUwM2UyMGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYm5zc19uaXNwbHVzLTIuOS5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYm5zc19uaXNwbHVzLnNvLjIgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYm5zc19uaXNwbHVzLnNvLjIKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uZGMzYmRlNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlibnNzX25pc3BsdXMuc28uMgpAQCAtMCwwICsxIEBACitsaWJuc3NfbmlzcGx1cy0yLjkuc28KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYnBjcHJvZmlsZS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlicGNwcm9maWxlLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ5YjZlMTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYnBjcHJvZmlsZS5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYnB0aHJlYWQtMi45LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJwdGhyZWFkLTIuOS5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ODg2MzY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJwdGhyZWFkLTIuOS5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYnB0aHJlYWQuc28uMCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlicHRocmVhZC5zby4wCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLmExMGY2MzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYnB0aHJlYWQuc28uMApAQCAtMCwwICsxIEBACitsaWJwdGhyZWFkLTIuOS5zbwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlicmVzb2x2LTIuOS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlicmVzb2x2LTIuOS5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MmQxN2MxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJyZXNvbHYtMi45LnNvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlicmVzb2x2LnNvLjIgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYnJlc29sdi5zby4yCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLmZjNDQ5OWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYnJlc29sdi5zby4yCkBAIC0wLDAgKzEgQEAKK2xpYnJlc29sdi0yLjkuc28KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYnJ0LTIuOS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlicnQtMi45LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU4NGQyYWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYnJ0LTIuOS5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYnJ0LnNvLjEgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYnJ0LnNvLjEKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uOTg1OWEzOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlicnQuc28uMQpAQCAtMCwwICsxIEBACitsaWJydC0yLjkuc28KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYnN0ZGMrKy5hIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJzdGRjKysuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2IyYmIyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJzdGRjKysuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYnN0ZGMrKy5sYSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlic3RkYysrLmxhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhkZDBkN2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYnN0ZGMrKy5sYQpAQCAtMCwwICsxLDQxIEBACisjIGxpYnN0ZGMrKy5sYSAtIGEgbGlidG9vbCBsaWJyYXJ5IGZpbGUKKyMgR2VuZXJhdGVkIGJ5IGxpYnRvb2wgKEdOVSBsaWJ0b29sIDEuMzEzNCAyMDA5LTExLTI5KSAyLjIuN2EKKyMKKyMgUGxlYXNlIERPIE5PVCBkZWxldGUgdGhpcyBmaWxlIQorIyBJdCBpcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgdGhlIGxpYnJhcnkuCisKKyMgVGhlIG5hbWUgdGhhdCB3ZSBjYW4gZGxvcGVuKDMpLgorZGxuYW1lPSdsaWJzdGRjKysuc28uNicKKworIyBOYW1lcyBvZiB0aGlzIGxpYnJhcnkuCitsaWJyYXJ5X25hbWVzPSdsaWJzdGRjKysuc28uNi4wLjE0IGxpYnN0ZGMrKy5zby42IGxpYnN0ZGMrKy5zbycKKworIyBUaGUgbmFtZSBvZiB0aGUgc3RhdGljIGFyY2hpdmUuCitvbGRfbGlicmFyeT0nbGlic3RkYysrLmEnCisKKyMgTGlua2VyIGZsYWdzIHRoYXQgY2FuIG5vdCBnbyBpbiBkZXBlbmRlbmN5X2xpYnMuCitpbmhlcml0ZWRfbGlua2VyX2ZsYWdzPScnCisKKyMgTGlicmFyaWVzIHRoYXQgdGhpcyBvbmUgZGVwZW5kcyB1cG9uLgorZGVwZW5kZW5jeV9saWJzPScgLWxtJworCisjIE5hbWVzIG9mIGFkZGl0aW9uYWwgd2VhayBsaWJyYXJpZXMgcHJvdmlkZWQgYnkgdGhpcyBsaWJyYXJ5Cit3ZWFrX2xpYnJhcnlfbmFtZXM9JycKKworIyBWZXJzaW9uIGluZm9ybWF0aW9uIGZvciBsaWJzdGRjKysuCitjdXJyZW50PTYKK2FnZT0wCityZXZpc2lvbj0xNAorCisjIElzIHRoaXMgYW4gYWxyZWFkeSBpbnN0YWxsZWQgbGlicmFyeT8KK2luc3RhbGxlZD15ZXMKKworIyBTaG91bGQgd2Ugd2FybiBhYm91dCBwb3J0YWJpbGl0eSB3aGVuIGxpbmtpbmcgYWdhaW5zdCAtbW9kdWxlcz8KK3Nob3VsZG5vdGxpbms9bm8KKworIyBGaWxlcyB0byBkbG9wZW4vZGxwcmVvcGVuCitkbG9wZW49JycKK2RscHJlb3Blbj0nJworCisjIERpcmVjdG9yeSB0aGF0IHRoaXMgbGlicmFyeSBuZWVkcyB0byBiZSBpbnN0YWxsZWQgaW46CitsaWJkaXI9Jy91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9ob3N0L3Vzci9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2xpYicKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlic3RkYysrLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJzdGRjKysuc28KbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uYmI3MWYzNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlic3RkYysrLnNvCkBAIC0wLDAgKzEgQEAKK2xpYnN0ZGMrKy5zby42LjAuMTQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYnN0ZGMrKy5zby42IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJzdGRjKysuc28uNgpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5iYjcxZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJzdGRjKysuc28uNgpAQCAtMCwwICsxIEBACitsaWJzdGRjKysuc28uNi4wLjE0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJzdGRjKysuc28uNi4wLjE0IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJzdGRjKysuc28uNi4wLjE0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMyNzhiMGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYnN0ZGMrKy5zby42LjAuMTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJzdGRjKysuc28uNi4wLjE0LWdkYi5weSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlic3RkYysrLnNvLjYuMC4xNC1nZGIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M3NjUzNgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlic3RkYysrLnNvLjYuMC4xNC1nZGIucHkKQEAgLTAsMCArMSw2MCBAQAorIyAtKi0gcHl0aG9uIC0qLQorIyBDb3B5cmlnaHQgKEMpIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBnZGIKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKKworcHl0aG9uZGlyID0gJy91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9ob3N0L3Vzci9zaGFyZS9nY2MtNC41LjMvcHl0aG9uJworbGliZGlyID0gJy91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9ob3N0L3Vzci9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2xpYicKKworIyBUaGlzIGZpbGUgbWlnaHQgYmUgbG9hZGVkIHdoZW4gdGhlcmUgaXMgbm8gY3VycmVudCBvYmpmaWxlLiAgVGhpcworIyBjYW4gaGFwcGVuIGlmIHRoZSB1c2VyIGxvYWRzIGl0IG1hbnVhbGx5LiAgSW4gdGhpcyBjYXNlIHdlIGRvbid0CisjIHVwZGF0ZSBzeXMucGF0aDsgaW5zdGVhZCB3ZSBqdXN0IGhvcGUgdGhlIHVzZXIgbWFuYWdlZCB0byBkbyB0aGF0CisjIGJlZm9yZWhhbmQuCitpZiBnZGIuY3VycmVudF9vYmpmaWxlICgpIGlzIG5vdCBOb25lOgorICAgICMgVXBkYXRlIG1vZHVsZSBwYXRoLiAgV2Ugd2FudCB0byBmaW5kIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gbGliZGlyCisgICAgIyB0byBweXRob25kaXIsIGFuZCB0aGVuIHdlIHdhbnQgdG8gYXBwbHkgdGhhdCByZWxhdGl2ZSBwYXRoIHRvIHRoZQorICAgICMgZGlyZWN0b3J5IGhvbGRpbmcgdGhlIG9iamZpbGUgd2l0aCB3aGljaCB0aGlzIGZpbGUgaXMgYXNzb2NpYXRlZC4KKyAgICAjIFRoaXMgcHJlc2VydmVzIHJlbG9jYXRhYmlsaXR5IG9mIHRoZSBnY2MgdHJlZS4KKworICAgICMgRG8gYSBzaW1wbGUgbm9ybWFsaXphdGlvbiB0aGF0IHJlbW92ZXMgZHVwbGljYXRlIHNlcGFyYXRvcnMuCisgICAgcHl0aG9uZGlyID0gb3MucGF0aC5ub3JtcGF0aCAocHl0aG9uZGlyKQorICAgIGxpYmRpciA9IG9zLnBhdGgubm9ybXBhdGggKGxpYmRpcikKKworICAgIHByZWZpeCA9IG9zLnBhdGguY29tbW9ucHJlZml4IChbbGliZGlyLCBweXRob25kaXJdKQorICAgICMgSW4gc29tZSBiaXphcnJlIGNvbmZpZ3VyYXRpb24gd2UgbWlnaHQgaGF2ZSBmb3VuZCBhIG1hdGNoIGluIHRoZQorICAgICMgbWlkZGxlIG9mIGEgZGlyZWN0b3J5IG5hbWUuCisgICAgaWYgcHJlZml4Wy0xXSAhPSAnLyc6CisgICAgICAgIHByZWZpeCA9IG9zLnBhdGguZGlybmFtZSAocHJlZml4KSArICcvJworCisgICAgIyBTdHJpcCBvZmYgdGhlIHByZWZpeC4KKyAgICBweXRob25kaXIgPSBweXRob25kaXJbbGVuIChwcmVmaXgpOl0KKyAgICBsaWJkaXIgPSBsaWJkaXJbbGVuIChwcmVmaXgpOl0KKworICAgICMgQ29tcHV0ZSB0aGUgIi4uInMgbmVlZGVkIHRvIGdldCBmcm9tIGxpYmRpciB0byB0aGUgcHJlZml4LgorICAgIGRvdGRvdHMgPSAoJy4uJyArIG9zLnNlcCkgKiBsZW4gKGxpYmRpci5zcGxpdCAob3Muc2VwKSkKKworICAgIG9iamZpbGUgPSBnZGIuY3VycmVudF9vYmpmaWxlICgpLmZpbGVuYW1lCisgICAgZGlyID0gb3MucGF0aC5qb2luIChvcy5wYXRoLmRpcm5hbWUgKG9iamZpbGUpLCBkb3Rkb3RzLCBweXRob25kaXIpCisKKyAgICBpZiBub3QgZGlyIGluIHN5cy5wYXRoOgorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgZGlyKQorCisjIExvYWQgdGhlIHByZXR0eS1wcmludGVycy4KK2Zyb20gbGlic3RkY3h4LnY2LnByaW50ZXJzIGltcG9ydCByZWdpc3Rlcl9saWJzdGRjeHhfcHJpbnRlcnMKK3JlZ2lzdGVyX2xpYnN0ZGN4eF9wcmludGVycyAoZ2RiLmN1cnJlbnRfb2JqZmlsZSAoKSkKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlic3VwYysrLmEgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYnN1cGMrKy5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZjYxODEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYnN1cGMrKy5hCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlic3VwYysrLmxhIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJzdXBjKysubGEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTUyMjVlMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlic3VwYysrLmxhCkBAIC0wLDAgKzEsNDEgQEAKKyMgbGlic3VwYysrLmxhIC0gYSBsaWJ0b29sIGxpYnJhcnkgZmlsZQorIyBHZW5lcmF0ZWQgYnkgbGlidG9vbCAoR05VIGxpYnRvb2wgMS4zMTM0IDIwMDktMTEtMjkpIDIuMi43YQorIworIyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZpbGUhCisjIEl0IGlzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyB0aGUgbGlicmFyeS4KKworIyBUaGUgbmFtZSB0aGF0IHdlIGNhbiBkbG9wZW4oMykuCitkbG5hbWU9JycKKworIyBOYW1lcyBvZiB0aGlzIGxpYnJhcnkuCitsaWJyYXJ5X25hbWVzPScnCisKKyMgVGhlIG5hbWUgb2YgdGhlIHN0YXRpYyBhcmNoaXZlLgorb2xkX2xpYnJhcnk9J2xpYnN1cGMrKy5hJworCisjIExpbmtlciBmbGFncyB0aGF0IGNhbiBub3QgZ28gaW4gZGVwZW5kZW5jeV9saWJzLgoraW5oZXJpdGVkX2xpbmtlcl9mbGFncz0nJworCisjIExpYnJhcmllcyB0aGF0IHRoaXMgb25lIGRlcGVuZHMgdXBvbi4KK2RlcGVuZGVuY3lfbGlicz0nJworCisjIE5hbWVzIG9mIGFkZGl0aW9uYWwgd2VhayBsaWJyYXJpZXMgcHJvdmlkZWQgYnkgdGhpcyBsaWJyYXJ5Cit3ZWFrX2xpYnJhcnlfbmFtZXM9JycKKworIyBWZXJzaW9uIGluZm9ybWF0aW9uIGZvciBsaWJzdXBjKysuCitjdXJyZW50PTAKK2FnZT0wCityZXZpc2lvbj0wCisKKyMgSXMgdGhpcyBhbiBhbHJlYWR5IGluc3RhbGxlZCBsaWJyYXJ5PworaW5zdGFsbGVkPXllcworCisjIFNob3VsZCB3ZSB3YXJuIGFib3V0IHBvcnRhYmlsaXR5IHdoZW4gbGlua2luZyBhZ2FpbnN0IC1tb2R1bGVzPworc2hvdWxkbm90bGluaz1ubworCisjIEZpbGVzIHRvIGRsb3Blbi9kbHByZW9wZW4KK2Rsb3Blbj0nJworZGxwcmVvcGVuPScnCisKKyMgRGlyZWN0b3J5IHRoYXQgdGhpcyBsaWJyYXJ5IG5lZWRzIHRvIGJlIGluc3RhbGxlZCBpbjoKK2xpYmRpcj0nL3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvbGliJwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJ0aHJlYWRfZGItMS4wLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJ0aHJlYWRfZGItMS4wLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg2MzIyYzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYnRocmVhZF9kYi0xLjAuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJ0aHJlYWRfZGIuc28uMSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlidGhyZWFkX2RiLnNvLjEKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uYmM1MjUxNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlidGhyZWFkX2RiLnNvLjEKQEAgLTAsMCArMSBAQAorbGlidGhyZWFkX2RiLTEuMC5zbwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlidXRpbC0yLjkuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYnV0aWwtMi45LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjllNWY2NDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliL2xpYnV0aWwtMi45LnNvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlidXRpbC5zby4xIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYi9saWJ1dGlsLnNvLjEKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uZjY3ZmRlNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC9saWIvbGlidXRpbC5zby4xCkBAIC0wLDAgKzEgQEAKK2xpYnV0aWwtMi45LnNvClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYjMyIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYjMyCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjc5NTE0MDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliMzIKQEAgLTAsMCArMSBAQAorbGliClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYjY0IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L2xpYjY0Cm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjc5NTE0MDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvbGliNjQKQEAgLTAsMCArMSBAQAorbGliClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3NiaW4vbGRjb25maWcgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3Qvc2Jpbi9sZGNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZGM2MThiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3NiaW4vbGRjb25maWcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3NiaW4vc2xuIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3NiaW4vc2xuCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ1M2VkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3Qvc2Jpbi9zbG4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9iaW4vY2F0Y2hzZWd2IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9iaW4vY2F0Y2hzZWd2Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI0MWIyNWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2Jpbi9jYXRjaHNlZ3YKQEAgLTAsMCArMSwxMDcgQEAKKyMhIC9iaW4vc2gKKyMgQ29weXJpZ2h0IChDKSAxOTk4LDE5OTksMjAwMSwyMDAzLDIwMDQsMjAwNiwyMDA3LDIwMDgKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorIyBDb250cmlidXRlZCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5OC4KKworIyBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorIyAwMjExMS0xMzA3IFVTQS4KKworaWYgdGVzdCAkIyAtZXEgMDsgdGhlbgorICBlY2hvICIkMDogbWlzc2luZyBwcm9ncmFtIG5hbWUiID4mMgorICBlY2hvICJUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyCisgIGV4aXQgMQorZmkKKworcHJvZz0iJDEiCitzaGlmdAorCitpZiB0ZXN0ICQjIC1lcSAwOyB0aGVuCisgIGNhc2UgIiRwcm9nIiBpbgorICAgIC0taCB8IC0taGUgfCAtLWhlbCB8IC0taGVscCkKKyAgICAgIGVjaG8gJ1VzYWdlOiBjYXRjaHNlZ3YgUFJPR1JBTSBBUkdTLi4uJworICAgICAgZWNobyAnICAtLWhlbHAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdCcKKyAgICAgIGVjaG8gJyAgLS12ZXJzaW9uICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdCcKKyAgICAgIGVjaG8gIkZvciBidWcgcmVwb3J0aW5nIGluc3RydWN0aW9ucywgcGxlYXNlIHNlZToiCisgICAgICBlY2hvICI8aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmMvYnVncy5odG1sPi4iCisgICAgICBleGl0IDAKKyAgICAgIDs7CisgICAgLS12IHwgLS12ZSB8IC0tdmVyIHwgLS12ZXJzIHwgLS12ZXJzaSB8IC0tdmVyc2lvIHwgLS12ZXJzaW9uKQorICAgICAgZWNobyAnY2F0Y2hzZWd2IChHTlUgbGliYykgMi45JworICAgICAgZWNobyAnQ29weXJpZ2h0IChDKSAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KK3dhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlci4nCisgICAgICBleGl0IDAKKyAgICAgIDs7CisgICAgKikKKyAgICAgIDs7CisgIGVzYWMKK2ZpCisKK3NlZ3Zfb3V0cHV0PWBta3RlbXAgJHtUTVBESVI6LS90bXB9L3NlZ3Zfb3V0cHV0LlhYWFhYWGAgfHwgZXhpdAorCisjIFJlZGlyZWN0IHN0ZGVyciB0byBhdm9pZCB0ZXJtaW5hdGlvbiBtZXNzYWdlIGZyb20gc2hlbGwuCisoZXhlYyAzPiYyIDI+L2Rldi9udWxsCitMRF9QUkVMT0FEPSR7TERfUFJFTE9BRDorJHtMRF9QUkVMT0FEfTp9L1wkTElCL2xpYlNlZ0ZhdWx0LnNvIFwKK1NFR0ZBVUxUX1VTRV9BTFRTVEFDSz0xIFwKK1NFR0ZBVUxUX09VVFBVVF9OQU1FPSRzZWd2X291dHB1dCBcCisiJHByb2ciICR7MSsiJEAifSAyPiYzIDM+Ji0pCitleHZhbD0kPworCisjIENoZWNrIGZvciBvdXRwdXQuICBFdmVuIGlmIHRoZSBwcm9ncmFtIHRlcm1pbmF0ZWQgY29ycmVjdGx5IGl0IG1pZ2h0CisjIGJlIHRoYXQgYSBtaW5vciBwcm9jZXNzIChjbG9uZSkgZmFpbGVkLiAgVGhlcmVmb3JlIHdlIGRvIG5vdCBjaGVjayB0aGUKKyMgZXhpdCBjb2RlLgoraWYgdGVzdCAtcyAiJHNlZ3Zfb3V0cHV0IjsgdGhlbgorICAjIFRoZSBwcm9ncmFtIGNhdWdodCBhIHNpZ25hbC4gIFRoZSBvdXRwdXQgaXMgaW4gdGhlIGZpbGUgd2l0aCB0aGUKKyAgIyBuYW1lIHdlIGhhdmUgaW4gU0VHRkFVTFRfT1VUUFVUX05BTUUuICBJbiB0aGUgb3V0cHV0IHRoZSBuYW1lcyBvZgorICAjIGZ1bmN0aW9ucyBpbiBzaGFyZWQgb2JqZWN0cyBhcmUgYXZhaWxhYmxlLCBidXQgbmFtZXMgaW4gdGhlIHN0YXRpYworICAjIHBhcnQgb2YgdGhlIHByb2dyYW0gYXJlIG5vdC4gIFdlIHVzZSBhZGRyMmxpbmUgdG8gZ2V0IHRoaXMgaW5mb3JtYXRpb24uCisgIGNhc2UgJHByb2cgaW4KKyAgKi8qKSA7OworICAqKQorICAgIG9sZF9JRlM9JElGUworICAgIElGUz06CisgICAgZm9yIHAgaW4gJFBBVEg7IGRvCisgICAgICB0ZXN0IC1uICIkcCIgfHwgcD0uCisgICAgICBpZiB0ZXN0IC1mICIkcC8kcHJvZyI7IHRoZW4KKwlwcm9nPSRwLyRwcm9nCisgICAgICBicmVhaworICAgICAgZmkKKyAgICBkb25lCisgICAgSUZTPSRvbGRfSUZTCisgICAgOzsKKyAgZXNhYworICBzZWQgJy9CYWNrdHJhY2UvcScgIiRzZWd2X291dHB1dCIKKyAgc2VkICcxLC9CYWNrdHJhY2UvZCcgIiRzZWd2X291dHB1dCIgfAorICAod2hpbGUgcmVhZCBsaW5lOyBkbworICAgICBsaW5lPWBlY2hvICRsaW5lIHwgc2VkICJzQF4kcHJvZ1xcKFxcWy4qXFwpQFwxQCJgCisgICAgIGNhc2UgIiRsaW5lIiBpbgorICAgICAgIFxbKikgYWRkcj1gZWNobyAiJGxpbmUiIHwgc2VkICdzL15cW1woLipcKVxdJC9cMS8nYAorCSAgICBjb21wbGV0ZT1gYWRkcjJsaW5lIC1mIC1lICIkcHJvZyIgJGFkZHIgMj4vZGV2L251bGxgCisJICAgIGlmIHRlc3QgJD8gLWVxIDA7IHRoZW4KKwkgICAgICBlY2hvICJgZWNobyAiJGNvbXBsZXRlInxzZWQgJ047cy9cKC4qXClcblwoLipcKS9cMihcMSkvOydgJGxpbmUiCisJICAgIGVsc2UKKwkgICAgICBlY2hvICIkbGluZSIKKwkgICAgZmkKKwkgICAgOzsKKyAgICAgICAgICopIGVjaG8gIiRsaW5lIgorCSAgICA7OworICAgICBlc2FjCisgICBkb25lKQorZmkKK3JtIC1mICIkc2Vndl9vdXRwdXQiCisKK2V4aXQgJGV4dmFsCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2Jpbi9nZW5jYXQgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2Jpbi9nZW5jYXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTg1NWVkMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvYmluL2dlbmNhdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2Jpbi9nZXRjb25mIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9iaW4vZ2V0Y29uZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYTZjOGU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9iaW4vZ2V0Y29uZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2Jpbi9nZXRlbnQgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2Jpbi9nZXRlbnQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWQ1NmQyMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvYmluL2dldGVudApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2Jpbi9pY29udiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvYmluL2ljb252Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjcwZDA2YTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2Jpbi9pY29udgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2Jpbi9sZGQgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2Jpbi9sZGQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODEzOTJlZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvYmluL2xkZApAQCAtMCwwICsxLDIwNCBAQAorIyEgL2Jpbi9iYXNoCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworIyBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorIyAwMjExMS0xMzA3IFVTQS4KKworCisjIFRoaXMgaXMgdGhlIGBsZGQnIGNvbW1hbmQsIHdoaWNoIGxpc3RzIHdoYXQgc2hhcmVkIGxpYnJhcmllcyBhcmUKKyMgdXNlZCBieSBnaXZlbiBkeW5hbWljYWxseS1saW5rZWQgZXhlY3V0YWJsZXMuICBJdCB3b3JrcyBieSBpbnZva2luZyB0aGUKKyMgcnVuLXRpbWUgZHluYW1pYyBsaW5rZXIgYXMgYSBjb21tYW5kIGFuZCBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudAorIyB2YXJpYWJsZSBMRF9UUkFDRV9MT0FERURfT0JKRUNUUyB0byBhIG5vbi1lbXB0eSB2YWx1ZS4KKworIyBXZSBzaG91bGQgYmUgYWJsZSB0byBmaW5kIHRoZSB0cmFuc2xhdGlvbiByaWdodCBhdCB0aGUgYmVnaW5uaW5nLgorVEVYVERPTUFJTj1saWJjCitURVhURE9NQUlORElSPS91c3Ivc2hhcmUvbG9jYWxlCisKK1JUTERMSVNUPS9saWIvbGQtbGludXguc28uMword2Fybj0KK2JpbmRfbm93PQordmVyYm9zZT0KKword2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KKyAgY2FzZSAiJDEiIGluCisgIC0tdmVycyB8IC0tdmVyc2kgfCAtLXZlcnNpbyB8IC0tdmVyc2lvbikKKyAgICBlY2hvICdsZGQgKEdOVSBsaWJjKSAyLjknCisgICAgcHJpbnRmICQiQ29weXJpZ2h0IChDKSAlcyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyIgIjIwMDgiCisgICAgcHJpbnRmICQiV3JpdHRlbiBieSAlcyBhbmQgJXMuCisiICJSb2xhbmQgTWNHcmF0aCIgIlVscmljaCBEcmVwcGVyIgorICAgIGV4aXQgMAorICAgIDs7CisgIC0taCB8IC0taGUgfCAtLWhlbCB8IC0taGVscCkKKyAgICBlY2hvICQiVXNhZ2U6IGxkZCBbT1BUSU9OXS4uLiBGSUxFLi4uCisgICAgICAtLWhlbHAgICAgICAgICAgICAgIHByaW50IHRoaXMgaGVscCBhbmQgZXhpdAorICAgICAgLS12ZXJzaW9uICAgICAgICAgICBwcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisgIC1kLCAtLWRhdGEtcmVsb2NzICAgICAgIHByb2Nlc3MgZGF0YSByZWxvY2F0aW9ucworICAtciwgLS1mdW5jdGlvbi1yZWxvY3MgICBwcm9jZXNzIGRhdGEgYW5kIGZ1bmN0aW9uIHJlbG9jYXRpb25zCisgIC11LCAtLXVudXNlZCAgICAgICAgICAgIHByaW50IHVudXNlZCBkaXJlY3QgZGVwZW5kZW5jaWVzCisgIC12LCAtLXZlcmJvc2UgICAgICAgICAgIHByaW50IGFsbCBpbmZvcm1hdGlvbgorRm9yIGJ1ZyByZXBvcnRpbmcgaW5zdHJ1Y3Rpb25zLCBwbGVhc2Ugc2VlOgorPGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJjL2J1Z3MuaHRtbD4uIgorICAgIGV4aXQgMAorICAgIDs7CisgIC1kIHwgLS1kIHwgLS1kYSB8IC0tZGF0IHwgLS1kYXRhIHwgLS1kYXRhLSB8IC0tZGF0YS1yIHwgLS1kYXRhLXJlIHwgXAorICAtLWRhdGEtcmVsIHwgLS1kYXRhLXJlbG8gfCAtLWRhdGEtcmVsb2MgfCAtLWRhdGEtcmVsb2NzKQorICAgIHdhcm49eWVzCisgICAgc2hpZnQKKyAgICA7OworICAtciB8IC0tZiB8IC0tZnUgfCAtLWZ1biB8IC0tZnVuYyB8IC0tZnVuY3QgfCAtLWZ1bmN0aSB8IC0tZnVuY3RpbyB8IFwKKyAgLS1mdW5jdGlvbiB8IC0tZnVuY3Rpb24tIHwgLS1mdW5jdGlvbi1yIHwgLS1mdW5jdGlvbi1yZSB8IC0tZnVuY3Rpb24tcmVsIHwgXAorICAtLWZ1bmN0aW9uLXJlbG8gfCAtLWZ1bmN0aW9uLXJlbG9jIHwgLS1mdW5jdGlvbi1yZWxvY3MpCisgICAgd2Fybj15ZXMKKyAgICBiaW5kX25vdz15ZXMKKyAgICBzaGlmdAorICAgIDs7CisgIC12IHwgLS12ZXJiIHwgLS12ZXJibyB8IC0tdmVyYm9zIHwgLS12ZXJib3NlKQorICAgIHZlcmJvc2U9eWVzCisgICAgc2hpZnQKKyAgICA7OworICAtdSB8IC0tdSB8IC0tdW4gfCAtLXVudSB8IC0tdW51cyB8IC0tdW51c2UgfCAtLXVudXNlZCkKKyAgICB1bnVzZWQ9eWVzCisgICAgc2hpZnQKKyAgICA7OworICAtLXYgfCAtLXZlIHwgLS12ZXIpCisgICAgZWNobyA+JjIgJCJsZGQ6IG9wdGlvbiBcYCQxJyBpcyBhbWJpZ3VvdXMiCisgICAgZXhpdCAxCisgICAgOzsKKyAgLS0pCQkjIFN0b3Agb3B0aW9uIHByb2Nlc3NpbmcuCisgICAgc2hpZnQ7IGJyZWFrCisgICAgOzsKKyAgLSopCisgICAgZWNobyA+JjIgJ2xkZDonICQidW5yZWNvZ25pemVkIG9wdGlvbiIgIlxgJDEnIgorICAgIGVjaG8gPiYyICQiVHJ5IFxgbGRkIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorICAgIGV4aXQgMQorICAgIDs7CisgICopCisgICAgYnJlYWsKKyAgICA7OworICBlc2FjCitkb25lCisKK25vbmVsZiAoKQoreworICAjIE1heWJlIGV4dHJhIGNvZGUgZm9yIG5vbi1FTEYgYmluYXJpZXMuCisgIHJldHVybiAxOworfQorCithZGRfZW52PSJMRF9UUkFDRV9MT0FERURfT0JKRUNUUz0xIExEX1dBUk49JHdhcm4gTERfQklORF9OT1c9JGJpbmRfbm93IgorYWRkX2Vudj0iJGFkZF9lbnYgTERfVkVSQk9TRT0kdmVyYm9zZSIKK2lmIHRlc3QgIiR1bnVzZWQiID0geWVzOyB0aGVuCisgIGFkZF9lbnY9IiRhZGRfZW52IExEX0RFQlVHPVwiJExEX0RFQlVHJHtMRF9ERUJVRzorLH11bnVzZWRcIiIKK2ZpCisKKyMgVGhlIGZvbGxvd2luZyB1c2Ugb2YgY2F0IGlzIG5lZWRlZCB0byBtYWtlIGxkZCB3b3JrIGluIFNFTGludXgKKyMgZW52aXJvbm1lbnRzIHdoZXJlIHRoZSBleGVjdXRlZCBwcm9ncmFtIG1pZ2h0IG5vdCBoYXZlIHBlcm1pc3Npb25zCisjIHRvIHdyaXRlIHRvIHRoZSBjb25zb2xlL3R0eS4gIEJ1dCBvbmx5IGJhc2ggMy54IHN1cHBvcnRzIHRoZSBwaXBlZmFpbAorIyBvcHRpb24sIGFuZCB3ZSBkb24ndCBib3RoZXIgdG8gaGFuZGxlIHRoZSBjYXNlIGZvciBvbGRlciBiYXNoIHZlcnNpb25zLgoraWYgc2V0IC1vIHBpcGVmYWlsIDI+IC9kZXYvbnVsbDsgdGhlbgorICB0cnlfdHJhY2UoKSB7CisgICAgZXZhbCAkYWRkX2VudiAnIiRAIicgfCBjYXQKKyAgfQorZWxzZQorICB0cnlfdHJhY2UoKSB7CisgICAgZXZhbCAkYWRkX2VudiAnIiRAIicKKyAgfQorZmkKKworY2FzZSAkIyBpbgorMCkKKyAgZWNobyA+JjIgJ2xkZDonICQibWlzc2luZyBmaWxlIGFyZ3VtZW50cyIKKyAgZWNobyA+JjIgJCJUcnkgXGBsZGQgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisgIGV4aXQgMQorICA7OworMSkKKyAgc2luZ2xlX2ZpbGU9dAorICA7OworKikKKyAgc2luZ2xlX2ZpbGU9ZgorICA7OworZXNhYworCityZXN1bHQ9MAorZm9yIGZpbGUgZG8KKyAgIyBXZSBkb24ndCBsaXN0IHRoZSBmaWxlIG5hbWUgd2hlbiB0aGVyZSBpcyBvbmx5IG9uZS4KKyAgdGVzdCAkc2luZ2xlX2ZpbGUgPSB0IHx8IGVjaG8gIiR7ZmlsZX06IgorICBjYXNlICRmaWxlIGluCisgICovKikgOgorICAgICAgIDs7CisgICopIGZpbGU9Li8kZmlsZQorICAgICA7OworICBlc2FjCisgIGlmIHRlc3QgISAtZSAiJGZpbGUiOyB0aGVuCisgICAgZWNobyAibGRkOiAke2ZpbGV9OiIgJCJObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IiA+JjIKKyAgICByZXN1bHQ9MQorICBlbGlmIHRlc3QgISAtZiAiJGZpbGUiOyB0aGVuCisgICAgZWNobyAibGRkOiAke2ZpbGV9OiIgJCJub3QgcmVndWxhciBmaWxlIiA+JjIKKyAgICByZXN1bHQ9MQorICBlbGlmIHRlc3QgLXIgIiRmaWxlIjsgdGhlbgorICAgIHRlc3QgLXggIiRmaWxlIiB8fCBlY2hvICdsZGQ6JyAkIlwKK3dhcm5pbmc6IHlvdSBkbyBub3QgaGF2ZSBleGVjdXRpb24gcGVybWlzc2lvbiBmb3IiICJcYCRmaWxlJyIgPiYyCisgICAgUlRMRD0KKyAgICByZXQ9MQorICAgIGZvciBydGxkIGluICR7UlRMRExJU1R9OyBkbworICAgICAgaWYgdGVzdCAteCAkcnRsZDsgdGhlbgorCXZlcmlmeV9vdXQ9YCR7cnRsZH0gLS12ZXJpZnkgIiRmaWxlImAKKyAgICAgICAgcmV0PSQ/CisJY2FzZSAkcmV0IGluCisJWzAyXSkgUlRMRD0ke3J0bGR9OyBicmVhazs7CisJZXNhYworICAgICAgZmkKKyAgICBkb25lCisgICAgY2FzZSAkcmV0IGluCisgICAgMCkKKyAgICAgICMgSWYgdGhlIHByb2dyYW0gZXhpdHMgd2l0aCBleGl0IGNvZGUgNSwgaXQgbWVhbnMgdGhlIHByb2Nlc3MgaGFzIGJlZW4KKyAgICAgICMgaW52b2tlZCB3aXRoIF9fbGliY19lbmFibGVfc2VjdXJlLiAgRmFsbCBiYWNrIHRvIHJ1bm5pbmcgaXQgdGhyb3VnaAorICAgICAgIyB0aGUgZHluYW1pYyBsaW5rZXIuCisgICAgICB0cnlfdHJhY2UgIiRmaWxlIgorICAgICAgcmM9JD8KKyAgICAgIGlmIFsgJHJjID0gNSBdOyB0aGVuCisJdHJ5X3RyYWNlICIkUlRMRCIgIiRmaWxlIgorCXJjPSQ/CisgICAgICBmaQorICAgICAgWyAkcmMgPSAwIF0gfHwgcmVzdWx0PTEKKyAgICAgIDs7CisgICAgMSkKKyAgICAgICMgVGhpcyBjYW4gYmUgYSBub24tRUxGIGJpbmFyeSBvciBubyBiaW5hcnkgYXQgYWxsLgorICAgICAgbm9uZWxmICIkZmlsZSIgfHwgeworCWVjaG8gJCIJbm90IGEgZHluYW1pYyBleGVjdXRhYmxlIgorCXJlc3VsdD0xCisgICAgICB9CisgICAgICA7OworICAgIDIpCisgICAgICB0cnlfdHJhY2UgIiRSVExEIiAiJGZpbGUiIHx8IHJlc3VsdD0xCisgICAgICA7OworICAgICopCisgICAgICBlY2hvICdsZGQ6JyAke1JUTER9ICQiZXhpdGVkIHdpdGggdW5rbm93biBleGl0IGNvZGUiICIoJHJldCkiID4mMgorICAgICAgZXhpdCAxCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGVjaG8gJ2xkZDonICQiZXJyb3I6IHlvdSBkbyBub3QgaGF2ZSByZWFkIHBlcm1pc3Npb24gZm9yIiAiXGAkZmlsZSciID4mMgorICAgIHJlc3VsdD0xCisgIGZpCitkb25lCisKK2V4aXQgJHJlc3VsdAorIyBMb2NhbCBWYXJpYWJsZXM6CisjICBtb2RlOmtzaAorIyBFbmQ6CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2Jpbi9sb2NhbGUgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2Jpbi9sb2NhbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTkwNzQzNgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvYmluL2xvY2FsZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2Jpbi9sb2NhbGVkZWYgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2Jpbi9sb2NhbGVkZWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjM1MjdmNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvYmluL2xvY2FsZWRlZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2Jpbi9tdHJhY2UgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2Jpbi9tdHJhY2UKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGM1MWRhZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvYmluL210cmFjZQpAQCAtMCwwICsxLDIzNyBAQAorIyEgL3Vzci9iaW4vcGVybAorZXZhbCAiZXhlYyAvdXNyL2Jpbi9wZXJsIC1TICQwICRAIgorICAgIGlmIDA7CisjIENvcHlyaWdodCAoQykgMTk5Ny0yMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyMgQ29udHJpYnV0ZWQgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251Lm9yZz4sIDE5OTcuCisjIEJhc2VkIG9uIHRoZSBtdHJhY2UuYXdrIHNjcmlwdC4KKworIyBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorIyAwMjExMS0xMzA3IFVTQS4KKworJFZFUlNJT04gPSAiMi45IjsKKyRQQUNLQUdFID0gImxpYmMiOworJHByb2duYW1lID0gJDA7CisKK3N1YiB1c2FnZSB7CisgICAgcHJpbnQgIlVzYWdlOiBtdHJhY2UgW09QVElPTl0uLi4gW0JpbmFyeV0gTXRyYWNlRGF0YVxuIjsKKyAgICBwcmludCAiICAtLWhlbHAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXRcbiI7CisgICAgcHJpbnQgIiAgLS12ZXJzaW9uICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXRcbiI7CisgICAgcHJpbnQgIlxuIjsKKyAgICBwcmludCAiRm9yIGJ1ZyByZXBvcnRpbmcgaW5zdHJ1Y3Rpb25zLCBwbGVhc2Ugc2VlOlxuIjsKKyAgICBwcmludCAiPGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJjL2J1Z3MuaHRtbD4uXG4iOworICAgIGV4aXQgMDsKK30KKworIyBXZSBleHBlY3QgdHdvIGFyZ3VtZW50czoKKyMgICAjMTogdGhlIGNvbXBsZXRlIHBhdGggdG8gdGhlIGJpbmFyeQorIyAgICMyOiB0aGUgbXRyYWNlIGRhdGEgZmlsZW5hbWUKKyMgVGhlIHVzdWFsIG9wdGlvbnMgYXJlIGFsc28gcmVjb2duaXplZC4KKworYXJnbGlzdDogd2hpbGUgKEBBUkdWKSB7CisgICAgaWYgKCRBUkdWWzBdIGVxICItLXYiIHx8ICRBUkdWWzBdIGVxICItLXZlIiB8fCAkQVJHVlswXSBlcSAiLS12ZXIiIHx8CisJJEFSR1ZbMF0gZXEgIi0tdmVycyIgfHwgJEFSR1ZbMF0gZXEgIi0tdmVyc2kiIHx8CisJJEFSR1ZbMF0gZXEgIi0tdmVyc2lvIiB8fCAkQVJHVlswXSBlcSAiLS12ZXJzaW9uIikgeworCXByaW50ICJtdHJhY2UgKEdOVSAkUEFDS0FHRSkgJFZFUlNJT05cbiI7CisJcHJpbnQgIkNvcHlyaWdodCAoQykgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiI7CisJcHJpbnQgIlRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PXG4iOworCXByaW50ICJ3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cbiI7CisJcHJpbnQgIldyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJcQGdudS5vcmc+XG4iOworCisJZXhpdCAwOworICAgIH0gZWxzaWYgKCRBUkdWWzBdIGVxICItLWgiIHx8ICRBUkdWWzBdIGVxICItLWhlIiB8fCAkQVJHVlswXSBlcSAiLS1oZWwiIHx8CisJICAgICAkQVJHVlswXSBlcSAiLS1oZWxwIikgeworCSZ1c2FnZTsKKyAgICB9IGVsc2lmICgkQVJHVlswXSA9fiAvXi0vKSB7CisJcHJpbnQgIiRwcm9nbmFtZTogdW5yZWNvZ25pemVkIG9wdGlvbiBgJEFSR1ZbMF0nXG4iOworCXByaW50ICJUcnkgYCRwcm9nbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIjsKKwlleGl0IDE7CisgICAgfSBlbHNlIHsKKwlsYXN0IGFyZ2xpc3Q7CisgICAgfQorfQorCitpZiAoJCNBUkdWID09IDApIHsKKyAgICAkYmluYXJ5PSIiOworICAgICRkYXRhPSRBUkdWWzBdOworfSBlbHNpZiAoJCNBUkdWID09IDEpIHsKKyAgICAkYmluYXJ5PSRBUkdWWzBdOworICAgICRkYXRhPSRBUkdWWzFdOworCisgICAgaWYgKCRiaW5hcnkgPX4gL14uKltcL10uKiQvKSB7CisJJHByb2cgPSAkYmluYXJ5OworICAgIH0gZWxzZSB7CisJJHByb2cgPSAiLi8kYmluYXJ5IjsKKyAgICB9CisgICAgaWYgKG9wZW4gKExPQ1MsICJlbnYgTERfVFJBQ0VfTE9BREVEX09CSkVDVFM9MSAkcHJvZyB8IikpIHsKKwl3aGlsZSAoPExPQ1M+KSB7CisJICAgIGNob3A7CisJICAgIGlmICgvXi4qPT4gKC4qKSAuKDB4WzAxMjM0NTY3ODlhYmNkZWZdKikuJC8pIHsKKwkJJGxvY3N7JDF9ID0gJDI7CisJICAgIH0KKwl9CisJY2xvc2UgKExPQ1MpOworICAgIH0KK30gZWxzZSB7CisgICAgZGllICJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBydW4gJHByb2duYW1lIC0taGVscCBmb3IgaGVscC4iOworfQorCitzdWIgbG9jYXRpb24geworICAgIG15ICRzdHIgPSBwb3AoQF8pOworICAgIHJldHVybiAkc3RyIGlmICgkc3RyIGVxICIiKTsKKyAgICBpZiAoJHN0ciA9fiAvLipbW10oMHhbXl1dKildOiguKSovKSB7CisJbXkgJGFkZHIgPSAkMTsKKwlteSAkZmN0ID0gJDI7CisJcmV0dXJuICRjYWNoZXskYWRkcn0gaWYgKGV4aXN0cyAkY2FjaGV7JGFkZHJ9KTsKKwlpZiAoJGJpbmFyeSBuZSAiIiAmJiBvcGVuIChBRERSLCAiYWRkcjJsaW5lIC1lICRiaW5hcnkgJGFkZHJ8IikpIHsKKwkgICAgbXkgJGxpbmUgPSA8QUREUj47CisJICAgIGNob21wICRsaW5lOworCSAgICBjbG9zZSAoQUREUik7CisJICAgIGlmICgkbGluZSBuZSAnPz86MCcpIHsKKwkJJGNhY2hleyRhZGRyfSA9ICRsaW5lOworCQlyZXR1cm4gJGNhY2hleyRhZGRyfTsKKwkgICAgfQorCX0KKwkkY2FjaGV7JGFkZHJ9ID0gJHN0ciA9ICIkZmN0IEAgJGFkZHIiOworICAgIH0gZWxzaWYgKCRzdHIgPX4gL14oLiopOi4qW1tdKDB4W15dXSopXSQvKSB7CisJbXkgJHByb2cgPSAkMTsKKwlteSAkYWRkciA9ICQyOworCW15ICRzZWFyY2hhZGRyOworCXJldHVybiAkY2FjaGV7JGFkZHJ9IGlmIChleGlzdHMgJGNhY2hleyRhZGRyfSk7CisJaWYgKCRsb2NzeyRwcm9nfSBuZSAiIikgeworCSAgICAkc2VhcmNoYWRkciA9IHNwcmludGYgIiUjeCIsICRhZGRyIC0gJGxvY3N7JHByb2d9OworCX0gZWxzZSB7CisJICAgICRzZWFyY2hhZGRyID0gJGFkZHI7CisJICAgICRwcm9nID0gJGJpbmFyeTsKKwl9CisJaWYgKCRiaW5hcnkgbmUgIiIgJiYgb3BlbiAoQUREUiwgImFkZHIybGluZSAtZSAkcHJvZyAkc2VhcmNoYWRkcnwiKSkgeworCSAgICBteSAkbGluZSA9IDxBRERSPjsKKwkgICAgY2hvbXAgJGxpbmU7CisJICAgIGNsb3NlIChBRERSKTsKKwkgICAgaWYgKCRsaW5lIG5lICc/PzowJykgeworCQkkY2FjaGV7JGFkZHJ9ID0gJGxpbmU7CisJCXJldHVybiAkY2FjaGV7JGFkZHJ9OworCSAgICB9CisJfQorCSRjYWNoZXskYWRkcn0gPSAkc3RyID0gJGFkZHI7CisgICAgfSBlbHNpZiAoJHN0ciA9fiAvXi4qW1tdKDB4W15dXSopXSQvKSB7CisJbXkgJGFkZHIgPSAkMTsKKwlyZXR1cm4gJGNhY2hleyRhZGRyfSBpZiAoZXhpc3RzICRjYWNoZXskYWRkcn0pOworCWlmICgkYmluYXJ5IG5lICIiICYmIG9wZW4gKEFERFIsICJhZGRyMmxpbmUgLWUgJGJpbmFyeSAkYWRkcnwiKSkgeworCSAgICBteSAkbGluZSA9IDxBRERSPjsKKwkgICAgY2hvbXAgJGxpbmU7CisJICAgIGNsb3NlIChBRERSKTsKKwkgICAgaWYgKCRsaW5lIG5lICc/PzowJykgeworCQkkY2FjaGV7JGFkZHJ9ID0gJGxpbmU7CisJCXJldHVybiAkY2FjaGV7JGFkZHJ9OworCSAgICB9CisJfQorCSRjYWNoZXskYWRkcn0gPSAkc3RyID0gJGFkZHI7CisgICAgfQorICAgIHJldHVybiAkc3RyOworfQorCiskbnI9MDsKK29wZW4oREFUQSwgIjwkZGF0YSIpIHx8IGRpZSAiQ2Fubm90IG9wZW4gbXRyYWNlIGRhdGEgZmlsZSI7Cit3aGlsZSAoPERBVEE+KSB7CisgICAgbXkgQGNvbHMgPSBzcGxpdCAoJyAnKTsKKyAgICBteSAkbiwgJHdoZXJlOworICAgIGlmICgkY29sc1swXSBlcSAiQCIpIHsKKwkjIFdlIGhhdmUgYWRkcmVzcyBhbmQvb3IgZnVuY3Rpb24gbmFtZS4KKwkkd2hlcmU9JGNvbHNbMV07CisJJG49MjsKKyAgICB9IGVsc2UgeworCSR3aGVyZT0iIjsKKwkkbj0wOworICAgIH0KKworICAgICRhbGxvY2FkZHI9JGNvbHNbJG4gKyAxXTsKKyAgICAkaG93bXVjaD1oZXgoJGNvbHNbJG4gKyAyXSk7CisKKyAgICArKyRucjsKKyAgICBTV0lUQ0g6IHsKKwlpZiAoJGNvbHNbJG5dIGVxICIrIikgeworCSAgICBpZiAoZGVmaW5lZCAkYWxsb2NhdGVkeyRhbGxvY2FkZHJ9KSB7CisJCXByaW50ZiAoIisgJSMwMTB4IEFsbG9jICVkIGR1cGxpY2F0ZTogJXMgJXNcbiIsCisJCQloZXgoJGFsbG9jYWRkciksICRuciwgJmxvY2F0aW9uKCRhZGRyd2FzeyRhbGxvY2FkZHJ9KSwKKwkJCSR3aGVyZSk7CisJICAgIH0gZWxzZSB7CisJCSRhbGxvY2F0ZWR7JGFsbG9jYWRkcn09JGhvd211Y2g7CisJCSRhZGRyd2FzeyRhbGxvY2FkZHJ9PSR3aGVyZTsKKwkgICAgfQorCSAgICBsYXN0IFNXSVRDSDsKKwl9CisJaWYgKCRjb2xzWyRuXSBlcSAiLSIpIHsKKwkgICAgaWYgKGRlZmluZWQgJGFsbG9jYXRlZHskYWxsb2NhZGRyfSkgeworCQl1bmRlZiAkYWxsb2NhdGVkeyRhbGxvY2FkZHJ9OworCQl1bmRlZiAkYWRkcndhc3skYWxsb2NhZGRyfTsKKwkgICAgfSBlbHNlIHsKKwkJcHJpbnRmICgiLSAlIzAxMHggRnJlZSAlZCB3YXMgbmV2ZXIgYWxsb2MnZCAlc1xuIiwKKwkJCWhleCgkYWxsb2NhZGRyKSwgJG5yLCAmbG9jYXRpb24oJHdoZXJlKSk7CisJICAgIH0KKwkgICAgbGFzdCBTV0lUQ0g7CisJfQorCWlmICgkY29sc1skbl0gZXEgIjwiKSB7CisJICAgIGlmIChkZWZpbmVkICRhbGxvY2F0ZWR7JGFsbG9jYWRkcn0pIHsKKwkJdW5kZWYgJGFsbG9jYXRlZHskYWxsb2NhZGRyfTsKKwkJdW5kZWYgJGFkZHJ3YXN7JGFsbG9jYWRkcn07CisJICAgIH0gZWxzZSB7CisJCXByaW50ZiAoIi0gJSMwMTB4IFJlYWxsb2MgJWQgd2FzIG5ldmVyIGFsbG9jJ2QgJXNcbiIsCisJCQloZXgoJGFsbG9jYWRkciksICRuciwgJmxvY2F0aW9uKCR3aGVyZSkpOworCSAgICB9CisJICAgIGxhc3QgU1dJVENIOworCX0KKwlpZiAoJGNvbHNbJG5dIGVxICI+IikgeworCSAgICBpZiAoZGVmaW5lZCAkYWxsb2NhdGVkeyRhbGxvY2FkZHJ9KSB7CisJCXByaW50ZiAoIisgJSMwMTB4IFJlYWxsb2MgJWQgZHVwbGljYXRlOiAlIzAxMHggJXMgJXNcbiIsCisJCQloZXgoJGFsbG9jYWRkciksICRuciwgJGFsbG9jYXRlZHskYWxsb2NhZGRyfSwKKwkJCSZsb2NhdGlvbigkYWRkcndhc3skYWxsb2NhZGRyfSksICZsb2NhdGlvbigkd2hlcmUpKTsKKwkgICAgfSBlbHNlIHsKKwkJJGFsbG9jYXRlZHskYWxsb2NhZGRyfT0kaG93bXVjaDsKKwkJJGFkZHJ3YXN7JGFsbG9jYWRkcn09JHdoZXJlOworCSAgICB9CisJICAgIGxhc3QgU1dJVENIOworCX0KKwlpZiAoJGNvbHNbJG5dIGVxICI9IikgeworCSAgICAjIElnbm9yZSAiPSBTdGFydCIuCisJICAgIGxhc3QgU1dJVENIOworCX0KKwlpZiAoJGNvbHNbJG5dIGVxICIhIikgeworCSAgICAjIElnbm9yZSBmYWlsZWQgcmVhbGxvYyBmb3Igbm93LgorCSAgICBsYXN0IFNXSVRDSDsKKwl9CisgICAgfQorfQorY2xvc2UgKERBVEEpOworCisjIE5vdyBwcmludCBhbGwgcmVtYWluaW5nIGVudHJpZXMuCitAYWRkcnM9IGtleXMgJWFsbG9jYXRlZDsKKyRhbnl0aGluZz0wOworaWYgKCQjYWRkcnMgPj0gMCkgeworICAgIGZvcmVhY2ggJGFkZHIgKHNvcnQgQGFkZHJzKSB7CisJaWYgKGRlZmluZWQgJGFsbG9jYXRlZHskYWRkcn0pIHsKKwkgICAgaWYgKCRhbnl0aGluZyA9PSAwKSB7CisJCXByaW50ICJcbk1lbW9yeSBub3QgZnJlZWQ6XG4tLS0tLS0tLS0tLS0tLS0tLVxuIjsKKwkJcHJpbnQgJyAnIHggKDEwIC0gNyksICJBZGRyZXNzICAgICBTaXplICAgICBDYWxsZXJcbiI7CisJCSRhbnl0aGluZz0xOworCSAgICB9CisJICAgIHByaW50ZiAoIiUjMDEweCAlIzh4ICBhdCAlc1xuIiwgaGV4KCRhZGRyKSwgJGFsbG9jYXRlZHskYWRkcn0sCisJCSAgICAmbG9jYXRpb24oJGFkZHJ3YXN7JGFkZHJ9KSk7CisJfQorICAgIH0KK30KK3ByaW50ICJObyBtZW1vcnkgbGVha3MuXG4iIGlmICgkYW55dGhpbmcgPT0gMCk7CisKK2V4aXQgJGFueXRoaW5nICE9IDA7CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2Jpbi9wY3Byb2ZpbGVkdW1wIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9iaW4vcGNwcm9maWxlZHVtcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hN2MyMjU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9iaW4vcGNwcm9maWxlZHVtcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2Jpbi9ycGNnZW4gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2Jpbi9ycGNnZW4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjIxMjBkMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvYmluL3JwY2dlbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2Jpbi9zcHJvZiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvYmluL3Nwcm9mCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA1NzA3ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2Jpbi9zcHJvZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2Jpbi94dHJhY2UgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2Jpbi94dHJhY2UKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzY0MmY0NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvYmluL3h0cmFjZQpAQCAtMCwwICsxLDE5NSBAQAorIyEgL2Jpbi9iYXNoCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMS0yMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyMgQ29udHJpYnV0ZWQgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251Lm9yZz4sIDE5OTkuCisKKyMgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisjIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyMgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyMgMDIxMTEtMTMwNyBVU0EuCisKK3BjcHJvZmlsZXNvPScvXCRMSUIvbGlicGNwcm9maWxlLnNvJworcGNwcm9maWxlZHVtcD0nL3Vzci9iaW4vcGNwcm9maWxlZHVtcCcKK1RFWFRET01BSU49bGliYworCisjIFByaW50IHVzYWdlIG1lc3NhZ2UuCitkb191c2FnZSgpIHsKKyAgcHJpbnRmICQiVXNhZ2U6IHh0cmFjZSBbT1BUSU9OXS4uLiBQUk9HUkFNIFtQUk9HUkFNT1BUSU9OXS4uLlxuIgorICBleGl0IDAKK30KKworIyBSZWZlciB0byAtLWhlbHAgb3B0aW9uLgoraGVscF9pbmZvKCkgeworICBwcmludGYgPiYyICQiVHJ5IFxgeHRyYWNlIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCisgIGV4aXQgMQorfQorCisjIE1lc3NhZ2UgZm9yIG1pc3NpbmcgYXJndW1lbnQuCitkb19taXNzaW5nX2FyZygpIHsKKyAgcHJpbnRmID4mMiAkInh0cmFjZTogb3B0aW9uIFxgJDEnIHJlcXVpcmVzIGFuIGFyZ3VtZW50LlxuIgorICBoZWxwX2luZm8KK30KKworIyBQcmludCBoZWxwIG1lc3NhZ2UKK2RvX2hlbHAoKSB7CisgIHByaW50ZiAkIlVzYWdlOiB4dHJhY2UgW09QVElPTl0uLi4gUFJPR1JBTSBbUFJPR1JBTU9QVElPTl0uLi5cbiIKKyAgcHJpbnRmICQiVHJhY2UgZXhlY3V0aW9uIG9mIHByb2dyYW0gYnkgcHJpbnRpbmcgY3VycmVudGx5IGV4ZWN1dGVkIGZ1bmN0aW9uLgorCisgICAgIC0tZGF0YT1GSUxFICAgICAgICAgIERvbid0IHJ1biB0aGUgcHJvZ3JhbSwganVzdCBwcmludCB0aGUgZGF0YSBmcm9tIEZJTEUuCisKKyAgIC0/LC0taGVscCAgICAgICAgICAgICAgUHJpbnQgdGhpcyBoZWxwIGFuZCBleGl0CisgICAgICAtLXVzYWdlICAgICAgICAgICAgIEdpdmUgYSBzaG9ydCB1c2FnZSBtZXNzYWdlCisgICAtViwtLXZlcnNpb24gICAgICAgICAgIFByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKworTWFuZGF0b3J5IGFyZ3VtZW50cyB0byBsb25nIG9wdGlvbnMgYXJlIGFsc28gbWFuZGF0b3J5IGZvciBhbnkgY29ycmVzcG9uZGluZworc2hvcnQgb3B0aW9ucy4KKworRm9yIGJ1ZyByZXBvcnRpbmcgaW5zdHJ1Y3Rpb25zLCBwbGVhc2Ugc2VlOgorPGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJjL2J1Z3MuaHRtbD4uXG4iCisgIGV4aXQgMAorfQorCitkb192ZXJzaW9uKCkgeworICBlY2hvICd4dHJhY2UgKEdOVSBsaWJjKSAyLjknCisgIHByaW50ZiAkIkNvcHlyaWdodCAoQykgJXMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTword2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisiICIyMDA4IgorICBwcmludGYgJCJXcml0dGVuIGJ5ICVzLgorIiAiVWxyaWNoIERyZXBwZXIiCisgIGV4aXQgMAorfQorCisjIFByaW50IG91dCBmdW5jdGlvbiBuYW1lLCBmaWxlLCBhbmQgbGluZSBudW1iZXIgaW4gYSBuaWNlbHkgZm9ybWF0dGVkIHdheS4KK2Zvcm1hdF9saW5lKCkgeworICBmY3Q9JDEKKyAgZmlsZT0kezIlJToqfQorICBsaW5lPSR7MiMjKjp9CisgIHdpZHRoPSQoZXhwciAkQ09MVU1OUyAtIDMwKQorICBmaWxlbGVuPSQoZXhwciBsZW5ndGggJGZpbGUpCisgIGlmIHRlc3QgIiRmaWxlbGVuIiAtZ3QgIiR3aWR0aCI7IHRoZW4KKyAgICByd2lkdGg9JChleHByICR3aWR0aCAtIDMpCisgICAgZmlsZT0iLi4uJChleHByIHN1YnN0ciAkZmlsZSAkKGV4cHIgMSArICRmaWxlbGVuIC0gJHJ3aWR0aCkgJHJ3aWR0aCkiCisgIGZpCisgIHByaW50ZiAnJS0yMHMgICUtKnMgICU2c1xuJyAkZmN0ICR3aWR0aCAkZmlsZSAkbGluZQorfQorCisKKyMgSWYgdGhlIHZhcmlhYmxlIENPTFVNTlMgaXMgbm90IHNldCBkbyB0aGlzIG5vdy4KK0NPTFVNTlM9JHtDT0xVTU5TOi04MH0KKworIyBJZiBgVEVSTUlOQUxfUFJPRycgaXMgbm90IHNldCwgc2V0IGl0IHRvIGB4dGVybScuCitURVJNSU5BTF9QUk9HPSR7VEVSTUlOQUxfUFJPRzoteHRlcm19CisKKyMgVGhlIGRhdGEgZmlsZSB0byBwcm9jZXNzLCBpZiBhbnkuCitkYXRhPQorCisjIFByb2Nlc3MgYXJndW1lbnRzLiAgQnV0IHN0b3AgYXMgc29vbiBhcyB0aGUgcHJvZ3JhbSBuYW1lIGlzIGZvdW5kLgord2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KKyAgY2FzZSAiJDEiIGluCisgIC0tZCB8IC0tZGEgfCAtLWRhdCB8IC0tZGF0YSkKKyAgICBpZiB0ZXN0ICQjIC1lcSAxOyB0aGVuCisgICAgICBkb19taXNzaW5nX2FyZyAkMQorICAgIGZpCisgICAgc2hpZnQKKyAgICBkYXRhPSIkMSIKKyAgICA7OworICAtLWQ9KiB8IC0tZGE9KiB8IC0tZGF0PSogfCAtLWRhdGE9KikKKyAgICBkYXRhPSR7MSMjKj19CisgICAgOzsKKyAgLVw/IHwgLS1oIHwgLS1oZSB8IC0taGVsIHwgLS1oZWxwKQorICAgIGRvX2hlbHAKKyAgICA7OworICAtViB8IC0tdiB8IC0tdmUgfCAtLXZlciB8IC0tdmVycyB8IC0tdmVyc2kgfCAtLXZlcnNpbyB8IC0tdmVyc2lvbikKKyAgICBkb192ZXJzaW9uCisgICAgOzsKKyAgLS11IHwgLS11cyB8IC0tdXNhIHwgLS11c2FnIHwgLS11c2FnZSkKKyAgICBkb191c2FnZQorICAgIDs7CisgIC0tKQorICAgICMgU3RvcCBwcm9jZXNzaW5nIGFyZ3VtZW50cy4KKyAgICBzaGlmdAorICAgIGJyZWFrCisgICAgOzsKKyAgLS0qKQorICAgIHByaW50ZiA+JjIgJCJ4dHJhY2U6IHVucmVjb2duaXplZCBvcHRpb24gXGAkMSdcbiIKKyAgICBoZWxwX2luZm8KKyAgICA7OworICAqKQorICAgICMgVW5rbm93biBvcHRpb24uICBUaGlzIG1lYW5zIHRoZSByZXN0IGlzIHRoZSBwcm9ncmFtIG5hbWUgYW5kIHBhcmFtZXRlcnMuCisgICAgYnJlYWsKKyAgICA7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKKyMgU2VlIHdoZXRoZXIgYW55IGFyZ3VtZW50cyBhcmUgbGVmdC4KK2lmIHRlc3QgJCMgLWVxIDA7IHRoZW4KKyAgcHJpbnRmID4mMiAkIk5vIHByb2dyYW0gbmFtZSBnaXZlblxuIgorICBoZWxwX2luZm8KK2ZpCisKKyMgRGV0ZXJtaW5lIHRoZSBwcm9ncmFtIG5hbWUgYW5kIGNoZWNrIHdoZXRoZXIgaXQgZXhpc3RzLgorcHJvZ3JhbT0kMQorc2hpZnQKK2lmIHRlc3QgISAtZiAiJHByb2dyYW0iOyB0aGVuCisgIHByaW50ZiA+JjIgJCJleGVjdXRhYmxlIFxgJHByb2dyYW0nIG5vdCBmb3VuZFxuIgorICBoZWxwX2luZm8KK2ZpCitpZiB0ZXN0ICEgLXggIiRwcm9ncmFtIjsgdGhlbgorICBwcmludGYgPiYyICQiXGAkcHJvZ3JhbScgaXMgbm8gZXhlY3V0YWJsZVxuIgorICBoZWxwX2luZm8KK2ZpCisKKyMgV2UgaGF2ZSB0d28gbW9kZXMuICBJZiBhIGRhdGEgZmlsZSBpcyBnaXZlbiBzaW1wbHkgcHJpbnQgdGhlIGluY2x1ZGVkIGRhdGEuCitwcmludGYgIiUtMjBzICAlLSpzICAlNnNcbiIgRnVuY3Rpb24gJChleHByICRDT0xVTU5TIC0gMzApIEZpbGUgTGluZQorZm9yIGkgaW4gJChzZXEgMSAkQ09MVU1OUyk7IGRvIHByaW50ZiAtOyBkb25lOyBwcmludGYgJ1xuJworaWYgdGVzdCAtbiAiJGRhdGEiOyB0aGVuCisgICRwY3Byb2ZpbGVkdW1wICIkZGF0YSIgfAorICBzZWQgJ3MvdGhpcyA9IFwoW14sXSpcKS4qL1wxLycgfAorICBhZGRyMmxpbmUgLWZDIC1lICIkcHJvZ3JhbSIgfAorICB3aGlsZSByZWFkIGZjdDsgZG8KKyAgICByZWFkIGZpbGUKKyAgICBpZiB0ZXN0ICIkZmN0IiAhPSAnPz8nIC1hICIkZmlsZSIgIT0gJz8/OjAnOyB0aGVuCisgICAgICBmb3JtYXRfbGluZSAiJGZjdCIgIiRmaWxlIgorICAgIGZpCisgIGRvbmUKK2Vsc2UKKyAgZmlmbz0kKG1rdGVtcCAtdXQgeHRyYWNlLlhYWFhYWCkgfHwgZXhpdAorICB0cmFwICdybSAtZiAiJGZpZm8iOyBleGl0IDEnIEhVUCBJTlQgUVVJVCBURVJNIFBJUEUKKyAgbWtmaWZvIC1tIDA2MDAgJGZpZm8gfHwgZXhpdCAxCisKKyAgIyBOb3cgc3RhcnQgdGhlIHByb2dyYW0gYW5kIGxldCBpdCB3cml0ZSB0byB0aGUgRklGTy4KKyAgJFRFUk1JTkFMX1BST0cgLVQgInh0cmFjZSAtICRwcm9ncmFtICQqIiAtZSAvYmluL3NoIC1jICJMRF9QUkVMT0FEPSRwY3Byb2ZpbGVzbyBQQ1BST0ZJTEVfT1VUUFVUPSRmaWZvICRwcm9ncmFtICQqOyByZWFkIDwgJGZpZm8iICYKKyAgdGVybXBpZD0kIQorICAkcGNwcm9maWxlZHVtcCAtdSAiJGZpZm8iIHwKKyAgd2hpbGUgcmVhZCBsaW5lOyBkbworICAgICBlY2hvICIkbGluZSIgfAorICAgICBzZWQgJ3MvdGhpcyA9IFwoW14sXSpcKS4qL1wxLycgfAorICAgICBhZGRyMmxpbmUgLWZDIC1lICIkcHJvZ3JhbSIKKyAgZG9uZSB8CisgIHdoaWxlIHJlYWQgZmN0OyBkbworICAgIHJlYWQgZmlsZQorICAgIGlmIHRlc3QgIiRmY3QiICE9ICc/PycgLWEgIiRmaWxlIiAhPSAnPz86MCc7IHRoZW4KKyAgICAgIGZvcm1hdF9saW5lICIkZmN0IiAiJGZpbGUiCisgICAgZmkKKyAgZG9uZQorICByZWFkIC1wICJQcmVzcyByZXR1cm4gaGVyZSB0byBjbG9zZSAkVEVSTUlOQUxfUFJPRygkcHJvZ3JhbSkuIgorICBlY2hvID4gIiRmaWZvIgorICBybSAiJGZpZm8iCitmaQorCitleGl0IDAKKyMgTG9jYWwgVmFyaWFibGVzOgorIyAgbW9kZTprc2gKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMWQwMjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qIFRoaXMgZmlsZSBpcyBuZWVkZWQgYnkgbGliaW8gdG8gZGVmaW5lIHZhcmlvdXMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgorICAgVGhlc2UgYXJlIGFsd2F5cyB0aGUgc2FtZSBpbiB0aGUgR05VIEMgbGlicmFyeS4gICovCisKKyNpZm5kZWYgX0dfY29uZmlnX2gKKyNkZWZpbmUgX0dfY29uZmlnX2ggMQorCisvKiBEZWZpbmUgdHlwZXMgZm9yIGxpYmlvIGluIHRlcm1zIG9mIHRoZSBzdGFuZGFyZCBpbnRlcm5hbCB0eXBlIG5hbWVzLiAgKi8KKworI2luY2x1ZGUgPGJpdHMvdHlwZXMuaD4KKyNkZWZpbmUgX19uZWVkX3NpemVfdAorI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBfR0xJQkNQUF9VU0VfV0NIQVJfVAorIyBkZWZpbmUgX19uZWVkX3djaGFyX3QKKyNlbmRpZgorI2RlZmluZSBfX25lZWRfTlVMTAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2RlZmluZSBfX25lZWRfbWJzdGF0ZV90CisjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIF9HTElCQ1BQX1VTRV9XQ0hBUl9UCisjIGRlZmluZSBfX25lZWRfd2ludF90CisjZW5kaWYKKyNpbmNsdWRlIDx3Y2hhci5oPgorI2RlZmluZSBfR19zaXplX3QJc2l6ZV90Cit0eXBlZGVmIHN0cnVjdAoreworICBfX29mZl90IF9fcG9zOworICBfX21ic3RhdGVfdCBfX3N0YXRlOworfSBfR19mcG9zX3Q7Cit0eXBlZGVmIHN0cnVjdAoreworICBfX29mZjY0X3QgX19wb3M7CisgIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cit9IF9HX2Zwb3M2NF90OworI2RlZmluZSBfR19zc2l6ZV90CV9fc3NpemVfdAorI2RlZmluZSBfR19vZmZfdAlfX29mZl90CisjZGVmaW5lIF9HX29mZjY0X3QJX19vZmY2NF90CisjZGVmaW5lCV9HX3BpZF90CV9fcGlkX3QKKyNkZWZpbmUJX0dfdWlkX3QJX191aWRfdAorI2RlZmluZSBfR193Y2hhcl90CXdjaGFyX3QKKyNkZWZpbmUgX0dfd2ludF90CXdpbnRfdAorI2RlZmluZSBfR19zdGF0NjQJc3RhdDY0CisjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIF9HTElCQ1BQX1VTRV9XQ0hBUl9UCisjIGluY2x1ZGUgPGdjb252Lmg+Cit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKKyAgc3RydWN0CisgIHsKKyAgICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CisgICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YTsKKyAgfSBfX2NvbWJpbmVkOworfSBfR19pY29udl90OworI2VuZGlmCisKK3R5cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7Cit0eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKKworI2RlZmluZSBfR19IQVZFX0JPT0wgMQorCisKKy8qIFRoZXNlIGxpYnJhcnkgZmVhdHVyZXMgYXJlIGFsd2F5cyBhdmFpbGFibGUgaW4gdGhlIEdOVSBDIGxpYnJhcnkuICAqLworI2RlZmluZSBfR19IQVZFX0FURVhJVCAxCisjZGVmaW5lIF9HX0hBVkVfU1lTX0NERUZTIDEKKyNkZWZpbmUgX0dfSEFWRV9TWVNfV0FJVCAxCisjZGVmaW5lIF9HX05FRURfU1REQVJHX0ggMQorI2RlZmluZSBfR192YV9saXN0IF9fZ251Y192YV9saXN0CisKKyNkZWZpbmUgX0dfSEFWRV9QUklOVEZfRlAgMQorI2RlZmluZSBfR19IQVZFX01NQVAgMQorI2RlZmluZSBfR19IQVZFX01SRU1BUCAxCisjZGVmaW5lIF9HX0hBVkVfTE9OR19ET1VCTEVfSU8gMQorI2RlZmluZSBfR19IQVZFX0lPX0ZJTEVfT1BFTiAxCisjZGVmaW5lIF9HX0hBVkVfSU9fR0VUTElORV9JTkZPIDEKKworI2RlZmluZSBfR19JT19JT19GSUxFX1ZFUlNJT04gMHgyMDAwMQorCisjZGVmaW5lIF9HX09QRU42NAlfX29wZW42NAorI2RlZmluZSBfR19MU0VFSzY0CV9fbHNlZWs2NAorI2RlZmluZSBfR19NTUFQNjQJX19tbWFwNjQKKyNkZWZpbmUgX0dfRlNUQVQ2NChmZCxidWYpIF9fZnhzdGF0NjQgKF9TVEFUX1ZFUiwgZmQsIGJ1ZikKKworLyogVGhpcyBpcyBkZWZpbmVkIGJ5IDxiaXRzL3N0YXQuaD4gaWYgYHN0X2Jsa3NpemUnIGV4aXN0cy4gICovCisjZGVmaW5lIF9HX0hBVkVfU1RfQkxLU0laRSBkZWZpbmVkIChfU1RBVEJVRl9TVF9CTEtTSVpFKQorCisjZGVmaW5lIF9HX0JVRlNJWiA4MTkyCisKKy8qIFRoZXNlIGFyZSB0aGUgdnRibCBkZXRhaWxzIGZvciBFTEYuICAqLworI2RlZmluZSBfR19OQU1FU19IQVZFX1VOREVSU0NPUkUgMAorI2RlZmluZSBfR19WVEFCTEVfTEFCRUxfSEFTX0xFTkdUSCAxCisjZGVmaW5lIF9HX1VTSU5HX1RIVU5LUwkxCisjZGVmaW5lIF9HX1ZUQUJMRV9MQUJFTF9QUkVGSVggIl9fdnRfIgorI2RlZmluZSBfR19WVEFCTEVfTEFCRUxfUFJFRklYX0lEIF9fdnRfCisKKworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfX1NURENfXworIyBkZWZpbmUgX0dfQVJHUyhBUkdMSVNUKSBBUkdMSVNUCisjZWxzZQorIyBkZWZpbmUgX0dfQVJHUyhBUkdMSVNUKSAoKQorI2VuZGlmCisKKyNlbmRpZgkvKiBfR19jb25maWcuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2Eub3V0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYS5vdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDUxNGM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2Eub3V0LmgKQEAgLTAsMCArMSwxMzggQEAKKyNpZm5kZWYgX19BX09VVF9HTlVfSF9fCisjZGVmaW5lIF9fQV9PVVRfR05VX0hfXworCisjaW5jbHVkZSA8Yml0cy9hLm91dC5oPgorCisjZGVmaW5lIF9fR05VX0VYRUNfTUFDUk9TX18KKworc3RydWN0IGV4ZWMKK3sKKyAgdW5zaWduZWQgbG9uZyBhX2luZm87CS8qIFVzZSBtYWNyb3MgTl9NQUdJQywgZXRjIGZvciBhY2Nlc3MuICAqLworICB1bnNpZ25lZCBpbnQgYV90ZXh0OwkvKiBMZW5ndGggb2YgdGV4dCwgaW4gYnl0ZXMuICAqLworICB1bnNpZ25lZCBpbnQgYV9kYXRhOwkvKiBMZW5ndGggb2YgZGF0YSwgaW4gYnl0ZXMuICAqLworICB1bnNpZ25lZCBpbnQgYV9ic3M7CS8qIExlbmd0aCBvZiB1bmluaXRpYWxpemVkIGRhdGEgYXJlYSBmb3IgZmlsZSwgaW4gYnl0ZXMuICAqLworICB1bnNpZ25lZCBpbnQgYV9zeW1zOwkvKiBMZW5ndGggb2Ygc3ltYm9sIHRhYmxlIGRhdGEgaW4gZmlsZSwgaW4gYnl0ZXMuICAqLworICB1bnNpZ25lZCBpbnQgYV9lbnRyeTsJLyogU3RhcnQgYWRkcmVzcy4gICovCisgIHVuc2lnbmVkIGludCBhX3Ryc2l6ZTsvKiBMZW5ndGggb2YgcmVsb2NhdGlvbiBpbmZvIGZvciB0ZXh0LCBpbiBieXRlcy4gICovCisgIHVuc2lnbmVkIGludCBhX2Ryc2l6ZTsvKiBMZW5ndGggb2YgcmVsb2NhdGlvbiBpbmZvIGZvciBkYXRhLCBpbiBieXRlcy4gICovCit9OworCitlbnVtIG1hY2hpbmVfdHlwZQoreworICBNX09MRFNVTjIgPSAwLAorICBNXzY4MDEwID0gMSwKKyAgTV82ODAyMCA9IDIsCisgIE1fU1BBUkMgPSAzLAorICBNXzM4NiA9IDEwMCwKKyAgTV9NSVBTMSA9IDE1MSwKKyAgTV9NSVBTMiA9IDE1MgorfTsKKworI2RlZmluZSBOX01BR0lDKGV4ZWMpCSgoZXhlYykuYV9pbmZvICYgMHhmZmZmKQorI2RlZmluZSBOX01BQ0hUWVBFKGV4ZWMpICgoZW51bSBtYWNoaW5lX3R5cGUpKCgoZXhlYykuYV9pbmZvID4+IDE2KSAmIDB4ZmYpKQorI2RlZmluZSBOX0ZMQUdTKGV4ZWMpCSgoKGV4ZWMpLmFfaW5mbyA+PiAyNCkgJiAweGZmKQorI2RlZmluZSBOX1NFVF9JTkZPKGV4ZWMsIG1hZ2ljLCB0eXBlLCBmbGFncykgXAorICAoKGV4ZWMpLmFfaW5mbyA9ICgobWFnaWMpICYgMHhmZmZmKQkJCQkJXAorICAgfCAoKChpbnQpKHR5cGUpICYgMHhmZikgPDwgMTYpCQkJCQlcCisgICB8ICgoKGZsYWdzKSAmIDB4ZmYpIDw8IDI0KSkKKyNkZWZpbmUgTl9TRVRfTUFHSUMoZXhlYywgbWFnaWMpIFwKKyAgKChleGVjKS5hX2luZm8gPSAoKGV4ZWMpLmFfaW5mbyAmIDB4ZmZmZjAwMDApIHwgKChtYWdpYykgJiAweGZmZmYpKQorI2RlZmluZSBOX1NFVF9NQUNIVFlQRShleGVjLCBtYWNodHlwZSkgXAorICAoKGV4ZWMpLmFfaW5mbyA9CQkJCQkJCVwKKyAgICgoZXhlYykuYV9pbmZvJjB4ZmYwMGZmZmYpIHwgKCgoKGludCkobWFjaHR5cGUpKSYweGZmKSA8PCAxNikpCisjZGVmaW5lIE5fU0VUX0ZMQUdTKGV4ZWMsIGZsYWdzKSBcCisgICgoZXhlYykuYV9pbmZvID0JCQkJCQkJXAorICAgKChleGVjKS5hX2luZm8mMHgwMGZmZmZmZikgfCAoKChmbGFncykgJiAweGZmKSA8PCAyNCkpCisKKy8qIENvZGUgaW5kaWNhdGluZyBvYmplY3QgZmlsZSBvciBpbXB1cmUgZXhlY3V0YWJsZS4gICovCisjZGVmaW5lIE9NQUdJQyAwNDA3CisvKiBDb2RlIGluZGljYXRpbmcgcHVyZSBleGVjdXRhYmxlLiAgKi8KKyNkZWZpbmUgTk1BR0lDIDA0MTAKKy8qIENvZGUgaW5kaWNhdGluZyBkZW1hbmQtcGFnZWQgZXhlY3V0YWJsZS4gICovCisjZGVmaW5lIFpNQUdJQyAwNDEzCisvKiBUaGlzIGluZGljYXRlcyBhIGRlbWFuZC1wYWdlZCBleGVjdXRhYmxlIHdpdGggdGhlIGhlYWRlciBpbiB0aGUgdGV4dC4gCisgICBUaGUgZmlyc3QgcGFnZSBpcyB1bm1hcHBlZCB0byBoZWxwIHRyYXAgTlVMTCBwb2ludGVyIHJlZmVyZW5jZXMuICAqLworI2RlZmluZSBRTUFHSUMgMDMxNAorLyogQ29kZSBpbmRpY2F0aW5nIGNvcmUgZmlsZS4gICovCisjZGVmaW5lIENNQUdJQyAwNDIxCisKKyNkZWZpbmUgTl9UUlNJWkUoYSkJKChhKS5hX3Ryc2l6ZSkKKyNkZWZpbmUgTl9EUlNJWkUoYSkJKChhKS5hX2Ryc2l6ZSkKKyNkZWZpbmUgTl9TWU1TSVpFKGEpCSgoYSkuYV9zeW1zKQorI2RlZmluZSBOX0JBRE1BRyh4KSBcCisgIChOX01BR0lDKHgpICE9IE9NQUdJQwkmJiBOX01BR0lDKHgpICE9IE5NQUdJQwkJCQlcCisgICAmJiBOX01BR0lDKHgpICE9IFpNQUdJQyAmJiBOX01BR0lDKHgpICE9IFFNQUdJQykKKyNkZWZpbmUgX05fSERST0ZGKHgpCSgxMDI0IC0gc2l6ZW9mIChzdHJ1Y3QgZXhlYykpCisjZGVmaW5lIE5fVFhUT0ZGKHgpIFwKKyAgKE5fTUFHSUMoeCkgPT0gWk1BR0lDID8gX05fSERST0ZGKCh4KSkgKyBzaXplb2YgKHN0cnVjdCBleGVjKSA6CVwKKyAgIChOX01BR0lDKHgpID09IFFNQUdJQyA/IDAgOiBzaXplb2YgKHN0cnVjdCBleGVjKSkpCisjZGVmaW5lIE5fREFUT0ZGKHgpCShOX1RYVE9GRih4KSArICh4KS5hX3RleHQpCisjZGVmaW5lIE5fVFJFTE9GRih4KQkoTl9EQVRPRkYoeCkgKyAoeCkuYV9kYXRhKQorI2RlZmluZSBOX0RSRUxPRkYoeCkJKE5fVFJFTE9GRih4KSArIE5fVFJTSVpFKHgpKQorI2RlZmluZSBOX1NZTU9GRih4KQkoTl9EUkVMT0ZGKHgpICsgTl9EUlNJWkUoeCkpCisjZGVmaW5lIE5fU1RST0ZGKHgpCShOX1NZTU9GRih4KSArIE5fU1lNU0laRSh4KSkKKworLyogQWRkcmVzcyBvZiB0ZXh0IHNlZ21lbnQgaW4gbWVtb3J5IGFmdGVyIGl0IGlzIGxvYWRlZC4gICovCisjZGVmaW5lIE5fVFhUQUREUih4KQkoTl9NQUdJQyh4KSA9PSBRTUFHSUMgPyA0MDk2IDogMCkKKworLyogQWRkcmVzcyBvZiBkYXRhIHNlZ21lbnQgaW4gbWVtb3J5IGFmdGVyIGl0IGlzIGxvYWRlZC4gICovCisjZGVmaW5lIFNFR01FTlRfU0laRQkxMDI0CisKKyNkZWZpbmUgX05fU0VHTUVOVF9ST1VORCh4KSAoKCh4KSArIFNFR01FTlRfU0laRSAtIDEpICYgfihTRUdNRU5UX1NJWkUgLSAxKSkKKyNkZWZpbmUgX05fVFhURU5EQUREUih4KSAoTl9UWFRBRERSKHgpKyh4KS5hX3RleHQpCisKKyNkZWZpbmUgTl9EQVRBRERSKHgpIFwKKyAgKE5fTUFHSUMoeCk9PU9NQUdJQz8gKF9OX1RYVEVOREFERFIoeCkpCQkJCVwKKyAgIDogKF9OX1NFR01FTlRfUk9VTkQgKF9OX1RYVEVOREFERFIoeCkpKSkKKyNkZWZpbmUgTl9CU1NBRERSKHgpIChOX0RBVEFERFIoeCkgKyAoeCkuYV9kYXRhKQorCisjaWYgIWRlZmluZWQgKE5fTkxJU1RfREVDTEFSRUQpCitzdHJ1Y3Qgbmxpc3QKK3sKKyAgdW5pb24KKyAgICB7CisgICAgICBjaGFyICpuX25hbWU7CisgICAgICBzdHJ1Y3Qgbmxpc3QgKm5fbmV4dDsKKyAgICAgIGxvbmcgbl9zdHJ4OworICAgIH0gbl91bjsKKyAgdW5zaWduZWQgY2hhciBuX3R5cGU7CisgIGNoYXIgbl9vdGhlcjsKKyAgc2hvcnQgbl9kZXNjOworICB1bnNpZ25lZCBsb25nIG5fdmFsdWU7Cit9OworI2VuZGlmIC8qIG5vIE5fTkxJU1RfREVDTEFSRUQuICAqLworCisjZGVmaW5lIE5fVU5ERgkwCisjZGVmaW5lIE5fQUJTCTIKKyNkZWZpbmUgTl9URVhUCTQKKyNkZWZpbmUgTl9EQVRBCTYKKyNkZWZpbmUgTl9CU1MJOAorI2RlZmluZSBOX0ZOCTE1CisjZGVmaW5lIE5fRVhUCTEKKyNkZWZpbmUgTl9UWVBFCTAzNgorI2RlZmluZSBOX1NUQUIJMDM0MAorI2RlZmluZSBOX0lORFIJMHhhCisjZGVmaW5lCU5fU0VUQQkweDE0CS8qIEFic29sdXRlIHNldCBlbGVtZW50IHN5bWJvbC4gICovCisjZGVmaW5lCU5fU0VUVAkweDE2CS8qIFRleHQgc2V0IGVsZW1lbnQgc3ltYm9sLiAgKi8KKyNkZWZpbmUJTl9TRVRECTB4MTgJLyogRGF0YSBzZXQgZWxlbWVudCBzeW1ib2wuICAqLworI2RlZmluZQlOX1NFVEIJMHgxQQkvKiBCc3Mgc2V0IGVsZW1lbnQgc3ltYm9sLiAgKi8KKyNkZWZpbmUgTl9TRVRWCTB4MUMJLyogUG9pbnRlciB0byBzZXQgdmVjdG9yIGluIGRhdGEgYXJlYS4gICovCisKKyNpZiAhZGVmaW5lZCAoTl9SRUxPQ0FUSU9OX0lORk9fREVDTEFSRUQpCisvKiBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgYSBzaW5nbGUgcmVsb2NhdGlvbiB0byBiZSBwZXJmb3JtZWQuCisgICBUaGUgdGV4dC1yZWxvY2F0aW9uIHNlY3Rpb24gb2YgdGhlIGZpbGUgaXMgYSB2ZWN0b3Igb2YgdGhlc2Ugc3RydWN0dXJlcywKKyAgIGFsbCBvZiB3aGljaCBhcHBseSB0byB0aGUgdGV4dCBzZWN0aW9uLgorICAgTGlrZXdpc2UsIHRoZSBkYXRhLXJlbG9jYXRpb24gc2VjdGlvbiBhcHBsaWVzIHRvIHRoZSBkYXRhIHNlY3Rpb24uICAqLworCitzdHJ1Y3QgcmVsb2NhdGlvbl9pbmZvCit7CisgIGludCByX2FkZHJlc3M7CisgIHVuc2lnbmVkIGludCByX3N5bWJvbG51bToyNDsKKyAgdW5zaWduZWQgaW50IHJfcGNyZWw6MTsKKyAgdW5zaWduZWQgaW50IHJfbGVuZ3RoOjI7CisgIHVuc2lnbmVkIGludCByX2V4dGVybjoxOworICB1bnNpZ25lZCBpbnQgcl9wYWQ6NDsKK307CisjZW5kaWYgLyogbm8gTl9SRUxPQ0FUSU9OX0lORk9fREVDTEFSRUQuICAqLworCisjZW5kaWYgLyogX19BX09VVF9HTlVfSF9fICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYWlvLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYWlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NmZDBjMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9haW8uaApAQCAtMCwwICsxLDI0NiBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsMjAwMywyMDA0LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qCisgKiBJU08vSUVDIDk5NDUtMToxOTk2IDYuNzogQXN5bmNocm9ub3VzIElucHV0IGFuZCBPdXRwdXQKKyAqLworCisjaWZuZGVmIF9BSU9fSAorI2RlZmluZSBfQUlPX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworX19CRUdJTl9ERUNMUworCisvKiBBc3luY2hyb25vdXMgSS9PIGNvbnRyb2wgYmxvY2suICAqLworc3RydWN0IGFpb2NiCit7CisgIGludCBhaW9fZmlsZGVzOwkJLyogRmlsZSBkZXNyaXB0b3IuICAqLworICBpbnQgYWlvX2xpb19vcGNvZGU7CQkvKiBPcGVyYXRpb24gdG8gYmUgcGVyZm9ybWVkLiAgKi8KKyAgaW50IGFpb19yZXFwcmlvOwkJLyogUmVxdWVzdCBwcmlvcml0eSBvZmZzZXQuICAqLworICB2b2xhdGlsZSB2b2lkICphaW9fYnVmOwkvKiBMb2NhdGlvbiBvZiBidWZmZXIuICAqLworICBzaXplX3QgYWlvX25ieXRlczsJCS8qIExlbmd0aCBvZiB0cmFuc2Zlci4gICovCisgIHN0cnVjdCBzaWdldmVudCBhaW9fc2lnZXZlbnQ7CS8qIFNpZ25hbCBudW1iZXIgYW5kIHZhbHVlLiAgKi8KKworICAvKiBJbnRlcm5hbCBtZW1iZXJzLiAgKi8KKyAgc3RydWN0IGFpb2NiICpfX25leHRfcHJpbzsKKyAgaW50IF9fYWJzX3ByaW87CisgIGludCBfX3BvbGljeTsKKyAgaW50IF9fZXJyb3JfY29kZTsKKyAgX19zc2l6ZV90IF9fcmV0dXJuX3ZhbHVlOworCisjaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKKyAgX19vZmZfdCBhaW9fb2Zmc2V0OwkJLyogRmlsZSBvZmZzZXQuICAqLworICBjaGFyIF9fcGFkW3NpemVvZiAoX19vZmY2NF90KSAtIHNpemVvZiAoX19vZmZfdCldOworI2Vsc2UKKyAgX19vZmY2NF90IGFpb19vZmZzZXQ7CQkvKiBGaWxlIG9mZnNldC4gICovCisjZW5kaWYKKyAgY2hhciBfX3VudXNlZFszMl07Cit9OworCisvKiBUaGUgc2FtZSBmb3IgdGhlIDY0Yml0IG9mZnNldHMuICBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBtZW1iZXJzIGFpb19maWxkZXMKKyAgIHRvIF9fcmV0dXJuX3ZhbHVlIGhhdmUgdG8gYmUgdGhlIHNhbWUgaW4gYWlvY2IgYW5kIGFpb2NiNjQuICAqLworI2lmZGVmIF9fVVNFX0xBUkdFRklMRTY0CitzdHJ1Y3QgYWlvY2I2NAoreworICBpbnQgYWlvX2ZpbGRlczsJCS8qIEZpbGUgZGVzcmlwdG9yLiAgKi8KKyAgaW50IGFpb19saW9fb3Bjb2RlOwkJLyogT3BlcmF0aW9uIHRvIGJlIHBlcmZvcm1lZC4gICovCisgIGludCBhaW9fcmVxcHJpbzsJCS8qIFJlcXVlc3QgcHJpb3JpdHkgb2Zmc2V0LiAgKi8KKyAgdm9sYXRpbGUgdm9pZCAqYWlvX2J1ZjsJLyogTG9jYXRpb24gb2YgYnVmZmVyLiAgKi8KKyAgc2l6ZV90IGFpb19uYnl0ZXM7CQkvKiBMZW5ndGggb2YgdHJhbnNmZXIuICAqLworICBzdHJ1Y3Qgc2lnZXZlbnQgYWlvX3NpZ2V2ZW50OwkvKiBTaWduYWwgbnVtYmVyIGFuZCB2YWx1ZS4gICovCisKKyAgLyogSW50ZXJuYWwgbWVtYmVycy4gICovCisgIHN0cnVjdCBhaW9jYiAqX19uZXh0X3ByaW87CisgIGludCBfX2Fic19wcmlvOworICBpbnQgX19wb2xpY3k7CisgIGludCBfX2Vycm9yX2NvZGU7CisgIF9fc3NpemVfdCBfX3JldHVybl92YWx1ZTsKKworICBfX29mZjY0X3QgYWlvX29mZnNldDsJCS8qIEZpbGUgb2Zmc2V0LiAgKi8KKyAgY2hhciBfX3VudXNlZFszMl07Cit9OworI2VuZGlmCisKKworI2lmZGVmIF9fVVNFX0dOVQorLyogVG8gY3VzdG9taXplIHRoZSBpbXBsZW1lbnRhdGlvbiBvbmUgY2FuIHVzZSB0aGUgZm9sbG93aW5nIHN0cnVjdC4KKyAgIFRoaXMgaW1wbGVtZW50YXRpb24gZm9sbG93cyB0aGUgb25lIGluIElyaXguICAqLworc3RydWN0IGFpb2luaXQKKyAgeworICAgIGludCBhaW9fdGhyZWFkczsJCS8qIE1heGltYWwgbnVtYmVyIG9mIHRocmVhZHMuICAqLworICAgIGludCBhaW9fbnVtOwkJLyogTnVtYmVyIG9mIGV4cGVjdGVkIHNpbXVsdGFuaW91cyByZXF1ZXN0cy4gKi8KKyAgICBpbnQgYWlvX2xvY2tzOwkJLyogTm90IHVzZWQuICAqLworICAgIGludCBhaW9fdXNlZGJhOwkJLyogTm90IHVzZWQuICAqLworICAgIGludCBhaW9fZGVidWc7CQkvKiBOb3QgdXNlZC4gICovCisgICAgaW50IGFpb19udW11c2VyczsJCS8qIE5vdCB1c2VkLiAgKi8KKyAgICBpbnQgYWlvX2lkbGVfdGltZTsJCS8qIE51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSBpZGxlIHRocmVhZAorCQkJCSAgIHRlcm1pbmF0ZXMuICAqLworICAgIGludCBhaW9fcmVzZXJ2ZWQ7CisgIH07CisjZW5kaWYKKworCisvKiBSZXR1cm4gdmFsdWVzIG9mIGNhbmNlbGF0aW9uIGZ1bmN0aW9uLiAgKi8KK2VudW0KK3sKKyAgQUlPX0NBTkNFTEVELAorI2RlZmluZSBBSU9fQ0FOQ0VMRUQgQUlPX0NBTkNFTEVECisgIEFJT19OT1RDQU5DRUxFRCwKKyNkZWZpbmUgQUlPX05PVENBTkNFTEVEIEFJT19OT1RDQU5DRUxFRAorICBBSU9fQUxMRE9ORQorI2RlZmluZSBBSU9fQUxMRE9ORSBBSU9fQUxMRE9ORQorfTsKKworCisvKiBPcGVyYXRpb24gY29kZXMgZm9yIGBhaW9fbGlvX29wY29kZScuICAqLworZW51bQoreworICBMSU9fUkVBRCwKKyNkZWZpbmUgTElPX1JFQUQgTElPX1JFQUQKKyAgTElPX1dSSVRFLAorI2RlZmluZSBMSU9fV1JJVEUgTElPX1dSSVRFCisgIExJT19OT1AKKyNkZWZpbmUgTElPX05PUCBMSU9fTk9QCit9OworCisKKy8qIFN5bmNocm9uaXphdGlvbiBvcHRpb25zIGZvciBgbGlvX2xpc3RpbycgZnVuY3Rpb24uICAqLworZW51bQoreworICBMSU9fV0FJVCwKKyNkZWZpbmUgTElPX1dBSVQgTElPX1dBSVQKKyAgTElPX05PV0FJVAorI2RlZmluZSBMSU9fTk9XQUlUIExJT19OT1dBSVQKK307CisKKworLyogQWxsb3cgdXNlciB0byBzcGVjaWZ5IG9wdGltaXphdGlvbi4gICovCisjaWZkZWYgX19VU0VfR05VCitleHRlcm4gdm9pZCBhaW9faW5pdCAoX19jb25zdCBzdHJ1Y3QgYWlvaW5pdCAqX19pbml0KSBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKyNlbmRpZgorCisKKyNpZm5kZWYgX19VU0VfRklMRV9PRkZTRVQ2NAorLyogRW5xdWV1ZSByZWFkIHJlcXVlc3QgZm9yIGdpdmVuIG51bWJlciBvZiBieXRlcyBhbmQgdGhlIGdpdmVuIHByaW9yaXR5LiAgKi8KK2V4dGVybiBpbnQgYWlvX3JlYWQgKHN0cnVjdCBhaW9jYiAqX19haW9jYnApIF9fVEhST1cgX19ub25udWxsICgoMSkpOworLyogRW5xdWV1ZSB3cml0ZSByZXF1ZXN0IGZvciBnaXZlbiBudW1iZXIgb2YgYnl0ZXMgYW5kIHRoZSBnaXZlbiBwcmlvcml0eS4gICovCitleHRlcm4gaW50IGFpb193cml0ZSAoc3RydWN0IGFpb2NiICpfX2Fpb2NicCkgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKy8qIEluaXRpYXRlIGxpc3Qgb2YgSS9PIHJlcXVlc3RzLiAgKi8KK2V4dGVybiBpbnQgbGlvX2xpc3RpbyAoaW50IF9fbW9kZSwKKwkJICAgICAgIHN0cnVjdCBhaW9jYiAqX19jb25zdCBfX2xpc3RbX19yZXN0cmljdF9hcnJdLAorCQkgICAgICAgaW50IF9fbmVudCwgc3RydWN0IHNpZ2V2ZW50ICpfX3Jlc3RyaWN0IF9fc2lnKQorICBfX1RIUk9XIF9fbm9ubnVsbCAoKDIpKTsKKworLyogUmV0cmlldmUgZXJyb3Igc3RhdHVzIGFzc29jaWF0ZWQgd2l0aCBBSU9DQlAuICAqLworZXh0ZXJuIGludCBhaW9fZXJyb3IgKF9fY29uc3Qgc3RydWN0IGFpb2NiICpfX2Fpb2NicCkgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisvKiBSZXR1cm4gc3RhdHVzIGFzc29jaWF0ZWQgd2l0aCBBSU9DQlAuICAqLworZXh0ZXJuIF9fc3NpemVfdCBhaW9fcmV0dXJuIChzdHJ1Y3QgYWlvY2IgKl9fYWlvY2JwKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworLyogVHJ5IHRvIGNhbmNlbCBhc3luY2hyb25vdXMgSS9PIHJlcXVlc3RzIG91dHN0YW5kaW5nIGFnYWluc3QgZmlsZQorICAgZGVzY3JpcHRvciBGSUxERVMuICAqLworZXh0ZXJuIGludCBhaW9fY2FuY2VsIChpbnQgX19maWxkZXMsIHN0cnVjdCBhaW9jYiAqX19haW9jYnApIF9fVEhST1c7CisKKy8qIFN1c3BlbmQgY2FsbGluZyB0aHJlYWQgdW50aWwgYXQgbGVhc3Qgb25lIG9mIHRoZSBhc3luY2hyb25vdXMgSS9PCisgICBvcGVyYXRpb25zIHJlZmVyZW5jZWQgYnkgTElTVCBoYXMgY29tcGxldGVkLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoCisgICBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgYWlvX3N1c3BlbmQgKF9fY29uc3Qgc3RydWN0IGFpb2NiICpfX2NvbnN0IF9fbGlzdFtdLCBpbnQgX19uZW50LAorCQkJX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QgX190aW1lb3V0KQorICBfX25vbm51bGwgKCgxKSk7CisKKy8qIEZvcmNlIGFsbCBvcGVyYXRpb25zIGFzc29jaWF0ZWQgd2l0aCBmaWxlIGRlc3JpcHRvciBkZXNjcmliZWQgYnkKKyAgIGBhaW9fZmlsZGVzJyBtZW1iZXIgb2YgQUlPQ0JQLiAgKi8KK2V4dGVybiBpbnQgYWlvX2ZzeW5jIChpbnQgX19vcGVyYXRpb24sIHN0cnVjdCBhaW9jYiAqX19haW9jYnApCisgIF9fVEhST1cgX19ub25udWxsICgoMikpOworI2Vsc2UKKyMgaWZkZWYgX19SRURJUkVDVF9OVEgKK2V4dGVybiBpbnQgX19SRURJUkVDVF9OVEggKGFpb19yZWFkLCAoc3RydWN0IGFpb2NiICpfX2Fpb2NicCksIGFpb19yZWFkNjQpCisgIF9fbm9ubnVsbCAoKDEpKTsKK2V4dGVybiBpbnQgX19SRURJUkVDVF9OVEggKGFpb193cml0ZSwgKHN0cnVjdCBhaW9jYiAqX19haW9jYnApLCBhaW9fd3JpdGU2NCkKKyAgX19ub25udWxsICgoMSkpOworCitleHRlcm4gaW50IF9fUkVESVJFQ1RfTlRIIChsaW9fbGlzdGlvLAorCQkJICAgKGludCBfX21vZGUsCisJCQkgICAgc3RydWN0IGFpb2NiICpfX2NvbnN0IF9fbGlzdFtfX3Jlc3RyaWN0X2Fycl0sCisJCQkgICAgaW50IF9fbmVudCwgc3RydWN0IHNpZ2V2ZW50ICpfX3Jlc3RyaWN0IF9fc2lnKSwKKwkJCSAgIGxpb19saXN0aW82NCkgX19ub25udWxsICgoMikpOworCitleHRlcm4gaW50IF9fUkVESVJFQ1RfTlRIIChhaW9fZXJyb3IsIChfX2NvbnN0IHN0cnVjdCBhaW9jYiAqX19haW9jYnApLAorCQkJICAgYWlvX2Vycm9yNjQpIF9fbm9ubnVsbCAoKDEpKTsKK2V4dGVybiBfX3NzaXplX3QgX19SRURJUkVDVF9OVEggKGFpb19yZXR1cm4sIChzdHJ1Y3QgYWlvY2IgKl9fYWlvY2JwKSwKKwkJCQkgYWlvX3JldHVybjY0KSBfX25vbm51bGwgKCgxKSk7CisKK2V4dGVybiBpbnQgX19SRURJUkVDVF9OVEggKGFpb19jYW5jZWwsCisJCQkgICAoaW50IF9fZmlsZGVzLCBzdHJ1Y3QgYWlvY2IgKl9fYWlvY2JwKSwKKwkJCSAgIGFpb19jYW5jZWw2NCk7CisKK2V4dGVybiBpbnQgX19SRURJUkVDVF9OVEggKGFpb19zdXNwZW5kLAorCQkJICAgKF9fY29uc3Qgc3RydWN0IGFpb2NiICpfX2NvbnN0IF9fbGlzdFtdLCBpbnQgX19uZW50LAorCQkJICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0IF9fdGltZW91dCksCisJCQkgICBhaW9fc3VzcGVuZDY0KSBfX25vbm51bGwgKCgxKSk7CisKK2V4dGVybiBpbnQgX19SRURJUkVDVF9OVEggKGFpb19mc3luYywKKwkJCSAgIChpbnQgX19vcGVyYXRpb24sIHN0cnVjdCBhaW9jYiAqX19haW9jYnApLAorCQkJICAgYWlvX2ZzeW5jNjQpIF9fbm9ubnVsbCAoKDIpKTsKKworIyBlbHNlCisjICBkZWZpbmUgYWlvX3JlYWQgYWlvX3JlYWQ2NAorIyAgZGVmaW5lIGFpb193cml0ZSBhaW9fd3JpdGU2NAorIyAgZGVmaW5lIGxpb19saXN0aW8gbGlvX2xpc3RpbzY0CisjICBkZWZpbmUgYWlvX2Vycm9yIGFpb19lcnJvcjY0CisjICBkZWZpbmUgYWlvX3JldHVybiBhaW9fcmV0dXJuNjQKKyMgIGRlZmluZSBhaW9fY2FuY2VsIGFpb19jYW5jZWw2NAorIyAgZGVmaW5lIGFpb19zdXNwZW5kIGFpb19zdXNwZW5kNjQKKyMgIGRlZmluZSBhaW9fZnN5bmMgYWlvX2ZzeW5jNjQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX19VU0VfTEFSR0VGSUxFNjQKK2V4dGVybiBpbnQgYWlvX3JlYWQ2NCAoc3RydWN0IGFpb2NiNjQgKl9fYWlvY2JwKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKK2V4dGVybiBpbnQgYWlvX3dyaXRlNjQgKHN0cnVjdCBhaW9jYjY0ICpfX2Fpb2NicCkgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKK2V4dGVybiBpbnQgbGlvX2xpc3RpbzY0IChpbnQgX19tb2RlLAorCQkJIHN0cnVjdCBhaW9jYjY0ICpfX2NvbnN0IF9fbGlzdFtfX3Jlc3RyaWN0X2Fycl0sCisJCQkgaW50IF9fbmVudCwgc3RydWN0IHNpZ2V2ZW50ICpfX3Jlc3RyaWN0IF9fc2lnKQorICBfX1RIUk9XIF9fbm9ubnVsbCAoKDIpKTsKKworZXh0ZXJuIGludCBhaW9fZXJyb3I2NCAoX19jb25zdCBzdHJ1Y3QgYWlvY2I2NCAqX19haW9jYnApCisgIF9fVEhST1cgX19ub25udWxsICgoMSkpOworZXh0ZXJuIF9fc3NpemVfdCBhaW9fcmV0dXJuNjQgKHN0cnVjdCBhaW9jYjY0ICpfX2Fpb2NicCkKKyAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKK2V4dGVybiBpbnQgYWlvX2NhbmNlbDY0IChpbnQgX19maWxkZXMsIHN0cnVjdCBhaW9jYjY0ICpfX2Fpb2NicCkgX19USFJPVzsKKworZXh0ZXJuIGludCBhaW9fc3VzcGVuZDY0IChfX2NvbnN0IHN0cnVjdCBhaW9jYjY0ICpfX2NvbnN0IF9fbGlzdFtdLCBpbnQgX19uZW50LAorCQkJICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBfX3RpbWVvdXQpCisgIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCitleHRlcm4gaW50IGFpb19mc3luYzY0IChpbnQgX19vcGVyYXRpb24sIHN0cnVjdCBhaW9jYjY0ICpfX2Fpb2NicCkKKyAgX19USFJPVyBfX25vbm51bGwgKCgyKSk7CisjZW5kaWYKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIGFpby5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYWxpYXNlcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FsaWFzZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGRkOGYwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FsaWFzZXMuaApAQCAtMCwwICsxLDY0IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX0FMSUFTRVNfSAorI2RlZmluZSBfQUxJQVNFU19ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworCitfX0JFR0lOX0RFQ0xTCisKKy8qIFN0cnVjdHVyZSB0byByZXByZXNlbnQgb25lIGVudHJ5IG9mIHRoZSBhbGlhcyBkYXRhIGJhc2UuICAqLworc3RydWN0IGFsaWFzZW50CisgIHsKKyAgICBjaGFyICphbGlhc19uYW1lOworICAgIHNpemVfdCBhbGlhc19tZW1iZXJzX2xlbjsKKyAgICBjaGFyICoqYWxpYXNfbWVtYmVyczsKKyAgICBpbnQgYWxpYXNfbG9jYWw7CisgIH07CisKKworLyogT3BlbiBhbGlhcyBkYXRhIGJhc2UgZmlsZXMuICAqLworZXh0ZXJuIHZvaWQgc2V0YWxpYXNlbnQgKHZvaWQpIF9fVEhST1c7CisKKy8qIENsb3NlIGFsaWFzIGRhdGEgYmFzZSBmaWxlcy4gICovCitleHRlcm4gdm9pZCBlbmRhbGlhc2VudCAodm9pZCkgX19USFJPVzsKKworLyogR2V0IHRoZSBuZXh0IGVudHJ5IGZyb20gdGhlIGFsaWFzIGRhdGEgYmFzZS4gICovCitleHRlcm4gc3RydWN0IGFsaWFzZW50ICpnZXRhbGlhc2VudCAodm9pZCkgX19USFJPVzsKKworLyogR2V0IHRoZSBuZXh0IGVudHJ5IGZyb20gdGhlIGFsaWFzIGRhdGEgYmFzZSBhbmQgcHV0IGl0IGluIFJFU1VMVF9CVUYuICAqLworZXh0ZXJuIGludCBnZXRhbGlhc2VudF9yIChzdHJ1Y3QgYWxpYXNlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAorCQkJICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmZmVyLCBzaXplX3QgX19idWZsZW4sCisJCQkgIHN0cnVjdCBhbGlhc2VudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpIF9fVEhST1c7CisKKy8qIEdldCBhbGlhcyBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIE5BTUUuICAqLworZXh0ZXJuIHN0cnVjdCBhbGlhc2VudCAqZ2V0YWxpYXNieW5hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSBfX1RIUk9XOworCisvKiBHZXQgYWxpYXMgZW50cnkgY29ycmVzcG9uZGluZyB0byBOQU1FIGFuZCBwdXQgaXQgaW4gUkVTVUxUX0JVRi4gICovCitleHRlcm4gaW50IGdldGFsaWFzYnluYW1lX3IgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCisJCQkgICAgIHN0cnVjdCBhbGlhc2VudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCisJCQkgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWZmZXIsIHNpemVfdCBfX2J1ZmxlbiwKKwkJCSAgICAgc3RydWN0IGFsaWFzZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkgX19USFJPVzsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIGFsaWFzZXMuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FsbG9jYS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FsbG9jYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZDI5MWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYWxsb2NhLmgKQEAgLTAsMCArMSw0MSBAQAorLyogQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmCV9BTExPQ0FfSAorI2RlZmluZQlfQUxMT0NBX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworI2RlZmluZQlfX25lZWRfc2l6ZV90CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKK19fQkVHSU5fREVDTFMKKworLyogUmVtb3ZlIGFueSBwcmV2aW91cyBkZWZpbml0aW9ucy4gICovCisjdW5kZWYJYWxsb2NhCisKKy8qIEFsbG9jYXRlIGEgYmxvY2sgdGhhdCB3aWxsIGJlIGZyZWVkIHdoZW4gdGhlIGNhbGxpbmcgZnVuY3Rpb24gZXhpdHMuICAqLworZXh0ZXJuIHZvaWQgKmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgX19USFJPVzsKKworI2lmZGVmCV9fR05VQ19fCisjIGRlZmluZSBhbGxvY2Eoc2l6ZSkJX19idWlsdGluX2FsbG9jYSAoc2l6ZSkKKyNlbmRpZiAvKiBHQ0MuICAqLworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogYWxsb2NhLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQxNTdlYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hci5oCkBAIC0wLDAgKzEsNDggQEAKKy8qIEhlYWRlciBkZXNjcmliaW5nIGBhcicgYXJjaGl2ZSBmaWxlIGZvcm1hdC4KKyAgIENvcHlyaWdodCAoQykgMTk5NiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfQVJfSAorI2RlZmluZSBfQVJfSCAxCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworLyogQXJjaGl2ZSBmaWxlcyBzdGFydCB3aXRoIHRoZSBBUk1BRyBpZGVudGlmeWluZyBzdHJpbmcuICBUaGVuIGZvbGxvd3MgYQorICAgYHN0cnVjdCBhcl9oZHInLCBhbmQgYXMgbWFueSBieXRlcyBvZiBtZW1iZXIgZmlsZSBkYXRhIGFzIGl0cyBgYXJfc2l6ZScKKyAgIG1lbWJlciBpbmRpY2F0ZXMsIGZvciBlYWNoIG1lbWJlciBmaWxlLiAgKi8KKworI2RlZmluZSBBUk1BRwkiITxhcmNoPlxuIgkvKiBTdHJpbmcgdGhhdCBiZWdpbnMgYW4gYXJjaGl2ZSBmaWxlLiAgKi8KKyNkZWZpbmUgU0FSTUFHCTgJCS8qIFNpemUgb2YgdGhhdCBzdHJpbmcuICAqLworCisjZGVmaW5lIEFSRk1BRwkiYFxuIgkJLyogU3RyaW5nIGluIGFyX2ZtYWcgYXQgZW5kIG9mIGVhY2ggaGVhZGVyLiAgKi8KKworX19CRUdJTl9ERUNMUworCitzdHJ1Y3QgYXJfaGRyCisgIHsKKyAgICBjaGFyIGFyX25hbWVbMTZdOwkJLyogTWVtYmVyIGZpbGUgbmFtZSwgc29tZXRpbWVzIC8gdGVybWluYXRlZC4gKi8KKyAgICBjaGFyIGFyX2RhdGVbMTJdOwkJLyogRmlsZSBkYXRlLCBkZWNpbWFsIHNlY29uZHMgc2luY2UgRXBvY2guICAqLworICAgIGNoYXIgYXJfdWlkWzZdLCBhcl9naWRbNl07CS8qIFVzZXIgYW5kIGdyb3VwIElEcywgaW4gQVNDSUkgZGVjaW1hbC4gICovCisgICAgY2hhciBhcl9tb2RlWzhdOwkJLyogRmlsZSBtb2RlLCBpbiBBU0NJSSBvY3RhbC4gICovCisgICAgY2hhciBhcl9zaXplWzEwXTsJCS8qIEZpbGUgc2l6ZSwgaW4gQVNDSUkgZGVjaW1hbC4gICovCisgICAgY2hhciBhcl9mbWFnWzJdOwkJLyogQWx3YXlzIGNvbnRhaW5zIEFSRk1BRy4gICovCisgIH07CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBhci5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXJncC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FyZ3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWYzYWZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FyZ3AuaApAQCAtMCwwICsxLDYwMSBAQAorLyogSGllcmFyY2hpYWwgYXJndW1lbnQgcGFyc2luZywgbGF5ZXJlZCBvdmVyIGdldG9wdC4KKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorICAgV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXNAZ251LmFpLm1pdC5lZHU+LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfQVJHUF9ICisjZGVmaW5lIF9BUkdQX0gKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2RlZmluZSBfX25lZWRfZXJyb3JfdAorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpZm5kZWYgX19jb25zdAorIyBkZWZpbmUgX19jb25zdCBjb25zdAorI2VuZGlmCisKKyNpZm5kZWYgX19USFJPVworIyBkZWZpbmUgX19USFJPVworI2VuZGlmCisjaWZuZGVmIF9fTlRICisjIGRlZmluZSBfX05USChmY3QpIGZjdCBfX1RIUk9XCisjZW5kaWYKKworI2lmbmRlZiBfX2F0dHJpYnV0ZV9fCisvKiBUaGlzIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLiAgKi8KKyMgaWYgX19HTlVDX18gPCAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDwgNSkgfHwgX19TVFJJQ1RfQU5TSV9fCisjICBkZWZpbmUgX19hdHRyaWJ1dGVfXyhTcGVjKSAvKiBlbXB0eSAqLworIyBlbmRpZgorLyogVGhlIF9fLXByb3RlY3RlZCB2YXJpYW50cyBvZiBgZm9ybWF0JyBhbmQgYHByaW50ZicgYXR0cmlidXRlcworICAgYXJlIGFjY2VwdGVkIGJ5IGdjYyB2ZXJzaW9ucyAyLjYuNCAoZWZmZWN0aXZlbHkgMi43KSBhbmQgbGF0ZXIuICAqLworIyBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA3KSB8fCBfX1NUUklDVF9BTlNJX18KKyMgIGRlZmluZSBfX2Zvcm1hdF9fIGZvcm1hdAorIyAgZGVmaW5lIF9fcHJpbnRmX18gcHJpbnRmCisjIGVuZGlmCisjZW5kaWYKKworLyogR0NDIDIuOTUgYW5kIGxhdGVyIGhhdmUgIl9fcmVzdHJpY3QiOyBDOTkgY29tcGlsZXJzIGhhdmUKKyAgICJyZXN0cmljdCIsIGFuZCAiY29uZmlndXJlIiBtYXkgaGF2ZSBkZWZpbmVkICJyZXN0cmljdCIuICAqLworI2lmbmRlZiBfX3Jlc3RyaWN0CisjIGlmICEgKDIgPCBfX0dOVUNfXyB8fCAoMiA9PSBfX0dOVUNfXyAmJiA5NSA8PSBfX0dOVUNfTUlOT1JfXykpCisjICBpZiBkZWZpbmVkIHJlc3RyaWN0IHx8IDE5OTkwMUwgPD0gX19TVERDX1ZFUlNJT05fXworIyAgIGRlZmluZSBfX3Jlc3RyaWN0IHJlc3RyaWN0CisjICBlbHNlCisjICAgZGVmaW5lIF9fcmVzdHJpY3QKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBfX2Vycm9yX3RfZGVmaW5lZAordHlwZWRlZiBpbnQgZXJyb3JfdDsKKyMgZGVmaW5lIF9fZXJyb3JfdF9kZWZpbmVkCisjZW5kaWYKKwwKKyNpZmRlZiAgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIEEgZGVzY3JpcHRpb24gb2YgYSBwYXJ0aWN1bGFyIG9wdGlvbi4gIEEgcG9pbnRlciB0byBhbiBhcnJheSBvZgorICAgdGhlc2UgaXMgcGFzc2VkIGluIHRoZSBPUFRJT05TIGZpZWxkIG9mIGFuIGFyZ3Agc3RydWN0dXJlLiAgRWFjaCBvcHRpb24KKyAgIGVudHJ5IGNhbiBjb3JyZXNwb25kIHRvIG9uZSBsb25nIG9wdGlvbiBhbmQvb3Igb25lIHNob3J0IG9wdGlvbjsgbW9yZQorICAgbmFtZXMgZm9yIHRoZSBzYW1lIG9wdGlvbiBjYW4gYmUgYWRkZWQgYnkgZm9sbG93aW5nIGFuIGVudHJ5IGluIGFuIG9wdGlvbgorICAgYXJyYXkgd2l0aCBvcHRpb25zIGhhdmluZyB0aGUgT1BUSU9OX0FMSUFTIGZsYWcgc2V0LiAgKi8KK3N0cnVjdCBhcmdwX29wdGlvbgoreworICAvKiBUaGUgbG9uZyBvcHRpb24gbmFtZS4gIEZvciBtb3JlIHRoYW4gb25lIG5hbWUgZm9yIHRoZSBzYW1lIG9wdGlvbiwgeW91CisgICAgIGNhbiB1c2UgZm9sbG93aW5nIG9wdGlvbnMgd2l0aCB0aGUgT1BUSU9OX0FMSUFTIGZsYWcgc2V0LiAgKi8KKyAgX19jb25zdCBjaGFyICpuYW1lOworCisgIC8qIFdoYXQga2V5IGlzIHJldHVybmVkIGZvciB0aGlzIG9wdGlvbi4gIElmID4gMCBhbmQgcHJpbnRhYmxlLCB0aGVuIGl0J3MKKyAgICAgYWxzbyBhY2NlcHRlZCBhcyBhIHNob3J0IG9wdGlvbi4gICovCisgIGludCBrZXk7CisKKyAgLyogSWYgbm9uLU5VTEwsIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGFyZ3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgIG9wdGlvbiwgd2hpY2ggaXMgcmVxdWlyZWQgdW5sZXNzIHRoZSBPUFRJT05fQVJHX09QVElPTkFMIGZsYWcgaXMgc2V0LiAqLworICBfX2NvbnN0IGNoYXIgKmFyZzsKKworICAvKiBPUFRJT05fIGZsYWdzLiAgKi8KKyAgaW50IGZsYWdzOworCisgIC8qIFRoZSBkb2Mgc3RyaW5nIGZvciB0aGlzIG9wdGlvbi4gIElmIGJvdGggTkFNRSBhbmQgS0VZIGFyZSAwLCBUaGlzIHN0cmluZworICAgICB3aWxsIGJlIHByaW50ZWQgb3V0ZGVudGVkIGZyb20gdGhlIG5vcm1hbCBvcHRpb24gY29sdW1uLCBtYWtpbmcgaXQKKyAgICAgdXNlZnVsIGFzIGEgZ3JvdXAgaGVhZGVyIChpdCB3aWxsIGJlIHRoZSBmaXJzdCB0aGluZyBwcmludGVkIGluIGl0cworICAgICBncm91cCk7IGluIHRoaXMgdXNhZ2UsIGl0J3MgY29udmVudGlvbmFsIHRvIGVuZCB0aGUgc3RyaW5nIHdpdGggYSBgOicuICAqLworICBfX2NvbnN0IGNoYXIgKmRvYzsKKworICAvKiBUaGUgZ3JvdXAgdGhpcyBvcHRpb24gaXMgaW4uICBJbiBhIGxvbmcgaGVscCBtZXNzYWdlLCBvcHRpb25zIGFyZSBzb3J0ZWQKKyAgICAgYWxwaGFiZXRpY2FsbHkgd2l0aGluIGVhY2ggZ3JvdXAsIGFuZCB0aGUgZ3JvdXBzIHByZXNlbnRlZCBpbiB0aGUgb3JkZXIKKyAgICAgMCwgMSwgMiwgLi4uLCBuLCAtbSwgLi4uLCAtMiwgLTEuICBFdmVyeSBlbnRyeSBpbiBhbiBvcHRpb25zIGFycmF5IHdpdGgKKyAgICAgaWYgdGhpcyBmaWVsZCAwIHdpbGwgaW5oZXJpdCB0aGUgZ3JvdXAgbnVtYmVyIG9mIHRoZSBwcmV2aW91cyBlbnRyeSwgb3IKKyAgICAgemVybyBpZiBpdCdzIHRoZSBmaXJzdCBvbmUsIHVubGVzcyBpdHMgYSBncm91cCBoZWFkZXIgKE5BTUUgYW5kIEtFWSBib3RoCisgICAgIDApLCBpbiB3aGljaCBjYXNlLCB0aGUgcHJldmlvdXMgZW50cnkgKyAxIGlzIHRoZSBkZWZhdWx0LiAgQXV0b21hZ2ljCisgICAgIG9wdGlvbnMgc3VjaCBhcyAtLWhlbHAgYXJlIHB1dCBpbnRvIGdyb3VwIC0xLiAgKi8KKyAgaW50IGdyb3VwOworfTsKKworLyogVGhlIGFyZ3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9wdGlvbiBpcyBvcHRpb25hbC4gICovCisjZGVmaW5lIE9QVElPTl9BUkdfT1BUSU9OQUwJMHgxCisKKy8qIFRoaXMgb3B0aW9uIGlzbid0IGRpc3BsYXllZCBpbiBhbnkgaGVscCBtZXNzYWdlcy4gICovCisjZGVmaW5lIE9QVElPTl9ISURERU4JICAgICAgIAkweDIKKworLyogVGhpcyBvcHRpb24gaXMgYW4gYWxpYXMgZm9yIHRoZSBjbG9zZXN0IHByZXZpb3VzIG5vbi1hbGlhcyBvcHRpb24uICBUaGlzCisgICBtZWFucyB0aGF0IGl0IHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBzYW1lIGhlbHAgZW50cnksIGFuZCB3aWxsIGluaGVyaXQKKyAgIGZpZWxkcyBvdGhlciB0aGFuIE5BTUUgYW5kIEtFWSBmcm9tIHRoZSBhbGlhc2VkIG9wdGlvbi4gICovCisjZGVmaW5lIE9QVElPTl9BTElBUwkJMHg0CisKKy8qIFRoaXMgb3B0aW9uIGlzbid0IGFjdHVhbGx5IGFuIG9wdGlvbiAoYW5kIHNvIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZQorICAgYWN0dWFsIG9wdGlvbiBwYXJzZXIpLCBidXQgcmF0aGVyIGFuIGFyYml0cmFyeSBwaWVjZSBvZiBkb2N1bWVudGF0aW9uIHRoYXQKKyAgIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gbXVjaCB0aGUgc2FtZSBtYW5uZXIgYXMgdGhlIG9wdGlvbnMuICBJZiB0aGlzIGZsYWcKKyAgIGlzIHNldCwgdGhlbiB0aGUgb3B0aW9uIE5BTUUgZmllbGQgaXMgZGlzcGxheWVkIHVubW9kaWZpZWQgKGUuZy4sIG5vIGAtLScKKyAgIHByZWZpeCBpcyBhZGRlZCkgYXQgdGhlIGxlZnQtbWFyZ2luICh3aGVyZSBhICpzaG9ydCogb3B0aW9uIHdvdWxkIG5vcm1hbGx5CisgICBiZSBkaXNwbGF5ZWQpLCBhbmQgdGhlIGRvY3VtZW50YXRpb24gc3RyaW5nIGluIHRoZSBub3JtYWwgcGxhY2UuICBGb3IKKyAgIHB1cnBvc2VzIG9mIHNvcnRpbmcsIGFueSBsZWFkaW5nIHdoaXRlc3BhY2UgYW5kIHB1bmN0dWF0aW9uIGlzIGlnbm9yZWQsCisgICBleGNlcHQgdGhhdCBpZiB0aGUgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIG5vdCBgLScsIHRoaXMgZW50cnkKKyAgIGlzIGRpc3BsYXllZCBhZnRlciBhbGwgb3B0aW9ucyAoYW5kIE9QVElPTl9ET0MgZW50cmllcyB3aXRoIGEgbGVhZGluZyBgLScpCisgICBpbiB0aGUgc2FtZSBncm91cC4gICovCisjZGVmaW5lIE9QVElPTl9ET0MJCTB4OAorCisvKiBUaGlzIG9wdGlvbiBzaG91bGRuJ3QgYmUgaW5jbHVkZWQgaW4gYGxvbmcnIHVzYWdlIG1lc3NhZ2VzIChidXQgaXMgc3RpbGwKKyAgIGluY2x1ZGVkIGluIGhlbHAgbWVzc2FnZXMpLiAgVGhpcyBpcyBtYWlubHkgaW50ZW5kZWQgZm9yIG9wdGlvbnMgdGhhdCBhcmUKKyAgIGNvbXBsZXRlbHkgZG9jdW1lbnRlZCBpbiBhbiBhcmdwJ3MgQVJHU19ET0MgZmllbGQsIGluIHdoaWNoIGNhc2UgaW5jbHVkaW5nCisgICB0aGUgb3B0aW9uIGluIHRoZSBnZW5lcmljIHVzYWdlIGxpc3Qgd291bGQgYmUgcmVkdW5kYW50LiAgRm9yIGluc3RhbmNlLAorICAgaWYgQVJHU19ET0MgaXMgIkZPTyBCQVJcbi14IEJMQUgiLCBhbmQgdGhlIGAteCcgb3B0aW9uJ3MgcHVycG9zZSBpcyB0bworICAgZGlzdGluZ3Vpc2ggdGhlc2UgdHdvIGNhc2VzLCAteCBzaG91bGQgcHJvYmFibHkgYmUgbWFya2VkCisgICBPUFRJT05fTk9fVVNBR0UuICAqLworI2RlZmluZSBPUFRJT05fTk9fVVNBR0UJCTB4MTAKKwwKK3N0cnVjdCBhcmdwOwkJCS8qIGZ3ZCBkZWNsYXJlIHRoaXMgdHlwZSAqLworc3RydWN0IGFyZ3Bfc3RhdGU7CQkvKiAiICovCitzdHJ1Y3QgYXJncF9jaGlsZDsJCS8qICIgKi8KKworLyogVGhlIHR5cGUgb2YgYSBwb2ludGVyIHRvIGFuIGFyZ3AgcGFyc2luZyBmdW5jdGlvbi4gICovCit0eXBlZGVmIGVycm9yX3QgKCphcmdwX3BhcnNlcl90KSAoaW50IGtleSwgY2hhciAqYXJnLAorCQkJCSAgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKTsKKworLyogV2hhdCB0byByZXR1cm4gZm9yIHVucmVjb2duaXplZCBrZXlzLiAgRm9yIHNwZWNpYWwgQVJHUF9LRVlfIGtleXMsIHN1Y2gKKyAgIHJldHVybnMgd2lsbCBzaW1wbHkgYmUgaWdub3JlZC4gIEZvciB1c2VyIGtleXMsIHRoaXMgZXJyb3Igd2lsbCBiZSB0dXJuZWQKKyAgIGludG8gRUlOVkFMIChpZiB0aGUgY2FsbCB0byBhcmdwX3BhcnNlIGlzIHN1Y2ggdGhhdCBlcnJvcnMgYXJlIHByb3BhZ2F0ZWQKKyAgIGJhY2sgdG8gdGhlIHVzZXIgaW5zdGVhZCBvZiBleGl0aW5nKTsgcmV0dXJuaW5nIEVJTlZBTCBpdHNlbGYgd291bGQgcmVzdWx0CisgICBpbiBhbiBpbW1lZGlhdGUgc3RvcCB0byBwYXJzaW5nIGluICphbGwqIGNhc2VzLiAgKi8KKyNkZWZpbmUgQVJHUF9FUlJfVU5LTk9XTglFMkJJRyAvKiBIdXJkIHNob3VsZCBuZXZlciBuZWVkIEUyQklHLiAgWFhYICovCisKKy8qIFNwZWNpYWwgdmFsdWVzIGZvciB0aGUgS0VZIGFyZ3VtZW50IHRvIGFuIGFyZ3VtZW50IHBhcnNpbmcgZnVuY3Rpb24uCisgICBBUkdQX0VSUl9VTktOT1dOIHNob3VsZCBiZSByZXR1cm5lZCBpZiB0aGV5IGFyZW4ndCB1bmRlcnN0b29kLgorCisgICBUaGUgc2VxdWVuY2Ugb2Yga2V5cyB0byBhIHBhcnNpbmcgZnVuY3Rpb24gaXMgZWl0aGVyICh3aGVyZSBlYWNoCisgICB1cHBlcmNhc2VkIHdvcmQgc2hvdWxkIGJlIHByZWZpeGVkIGJ5IGBBUkdQX0tFWV8nIGFuZCBvcHQgaXMgYSB1c2VyIGtleSk6CisKKyAgICAgICBJTklUIG9wdC4uLiBOT19BUkdTIEVORCBTVUNDRVNTICAtLSBObyBub24tb3B0aW9uIGFyZ3VtZW50cyBhdCBhbGwKKyAgIG9yICBJTklUIChvcHQgfCBBUkcpLi4uIEVORCBTVUNDRVNTICAtLSBBbGwgbm9uLW9wdGlvbiBhcmdzIHBhcnNlZAorICAgb3IgIElOSVQgKG9wdCB8IEFSRykuLi4gU1VDQ0VTUyAgICAgIC0tIFNvbWUgbm9uLW9wdGlvbiBhcmcgdW5yZWNvZ25pemVkCisKKyAgIFRoZSB0aGlyZCBjYXNlIGlzIHdoZXJlIGV2ZXJ5IHBhcnNlciByZXR1cm5lZCBBUkdQX0tFWV9VTktOT1dOIGZvciBhbgorICAgYXJndW1lbnQsIGluIHdoaWNoIGNhc2UgcGFyc2luZyBzdG9wcyBhdCB0aGF0IGFyZ3VtZW50IChyZXR1cm5pbmcgdGhlCisgICB1bnBhcnNlZCBhcmd1bWVudHMgdG8gdGhlIGNhbGxlciBvZiBhcmdwX3BhcnNlIGlmIHJlcXVlc3RlZCwgb3Igc3RvcHBpbmcKKyAgIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpZiBub3QpLgorCisgICBJZiBhbiBlcnJvciBvY2N1cnMgKGVpdGhlciBkZXRlY3RlZCBieSBhcmdwLCBvciBiZWNhdXNlIHRoZSBwYXJzaW5nCisgICBmdW5jdGlvbiByZXR1cm5lZCBhbiBlcnJvciB2YWx1ZSksIHRoZW4gdGhlIHBhcnNlciBpcyBjYWxsZWQgd2l0aAorICAgQVJHUF9LRVlfRVJST1IsIGFuZCBubyBmdXJ0aGVyIGNhbGxzIGFyZSBtYWRlLiAgKi8KKworLyogVGhpcyBpcyBub3QgYW4gb3B0aW9uIGF0IGFsbCwgYnV0IHJhdGhlciBhIGNvbW1hbmQgbGluZSBhcmd1bWVudC4gIElmIGEKKyAgIHBhcnNlciByZWNlaXZpbmcgdGhpcyBrZXkgcmV0dXJucyBzdWNjZXNzLCB0aGUgZmFjdCBpcyByZWNvcmRlZCwgYW5kIHRoZQorICAgQVJHUF9LRVlfTk9fQVJHUyBjYXNlIHdvbid0IGJlIHVzZWQuICBIT1dFVkVSLCBpZiB3aGlsZSBwcm9jZXNzaW5nIHRoZQorICAgYXJndW1lbnQsIGEgcGFyc2VyIGZ1bmN0aW9uIGRlY3JlbWVudHMgdGhlIE5FWFQgZmllbGQgb2YgdGhlIHN0YXRlIGl0J3MKKyAgIHBhc3NlZCwgdGhlIG9wdGlvbiB3b24ndCBiZSBjb25zaWRlcmVkIHByb2Nlc3NlZDsgdGhpcyBpcyB0byBhbGxvdyB5b3UgdG8KKyAgIGFjdHVhbGx5IG1vZGlmeSB0aGUgYXJndW1lbnQgKHBlcmhhcHMgaW50byBhbiBvcHRpb24pLCBhbmQgaGF2ZSBpdAorICAgcHJvY2Vzc2VkIGFnYWluLiAgKi8KKyNkZWZpbmUgQVJHUF9LRVlfQVJHCQkwCisvKiBUaGVyZSBhcmUgcmVtYWluaW5nIGFyZ3VtZW50cyBub3QgcGFyc2VkIGJ5IGFueSBwYXJzZXIsIHdoaWNoIG1heSBiZSBmb3VuZAorICAgc3RhcnRpbmcgYXQgKFNUQVRFLT5hcmd2ICsgU1RBVEUtPm5leHQpLiAgSWYgc3VjY2VzcyBpcyByZXR1cm5lZCwgYnV0CisgICBTVEFURS0+bmV4dCBsZWZ0IHVudG91Y2hlZCwgaXQncyBhc3N1bWVkIHRoYXQgYWxsIGFyZ3VtZW50cyB3ZXJlIGNvbnN1bWUsCisgICBvdGhlcndpc2UsIHRoZSBwYXJzZXIgc2hvdWxkIGFkanVzdCBTVEFURS0+bmV4dCB0byByZWZsZWN0IGFueSBhcmd1bWVudHMKKyAgIGNvbnN1bWVkLiAgKi8KKyNkZWZpbmUgQVJHUF9LRVlfQVJHUwkJMHgxMDAwMDA2CisvKiBUaGVyZSBhcmUgbm8gbW9yZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGF0IGFsbC4gICovCisjZGVmaW5lIEFSR1BfS0VZX0VORAkJMHgxMDAwMDAxCisvKiBCZWNhdXNlIGl0J3MgY29tbW9uIHRvIHdhbnQgdG8gZG8gc29tZSBzcGVjaWFsIHByb2Nlc3NpbmcgaWYgdGhlcmUgYXJlbid0CisgICBhbnkgbm9uLW9wdGlvbiBhcmdzLCB1c2VyIHBhcnNlcnMgYXJlIGNhbGxlZCB3aXRoIHRoaXMga2V5IGlmIHRoZXkgZGlkbid0CisgICBzdWNjZXNzZnVsbHkgcHJvY2VzcyBhbnkgbm9uLW9wdGlvbiBhcmd1bWVudHMuICBDYWxsZWQganVzdCBiZWZvcmUKKyAgIEFSR1BfS0VZX0VORCAod2hlcmUgbW9yZSBnZW5lcmFsIHZhbGlkaXR5IGNoZWNrcyBvbiBwcmV2aW91c2x5IHBhcnNlZAorICAgYXJndW1lbnRzIGNhbiB0YWtlIHBsYWNlKS4gICovCisjZGVmaW5lIEFSR1BfS0VZX05PX0FSR1MJMHgxMDAwMDAyCisvKiBQYXNzZWQgaW4gYmVmb3JlIGFueSBwYXJzaW5nIGlzIGRvbmUuICBBZnRlcndhcmRzLCB0aGUgdmFsdWVzIG9mIGVhY2gKKyAgIGVsZW1lbnQgb2YgdGhlIENISUxEX0lOUFVUIGZpZWxkLCBpZiBhbnksIGluIHRoZSBzdGF0ZSBzdHJ1Y3R1cmUgaXMKKyAgIGNvcGllZCB0byBlYWNoIGNoaWxkJ3Mgc3RhdGUgdG8gYmUgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIElOUFVUIGZpZWxkLiAgKi8KKyNkZWZpbmUgQVJHUF9LRVlfSU5JVAkJMHgxMDAwMDAzCisvKiBVc2UgYWZ0ZXIgYWxsIG90aGVyIGtleXMsIGluY2x1ZGluZyBTVUNDRVNTICYgRU5ELiAgKi8KKyNkZWZpbmUgQVJHUF9LRVlfRklOSQkJMHgxMDAwMDA3CisvKiBQYXNzZWQgaW4gd2hlbiBwYXJzaW5nIGhhcyBzdWNjZXNzZnVsbHkgYmVlbiBjb21wbGV0ZWQgKGV2ZW4gaWYgdGhlcmUgYXJlCisgICBzdGlsbCBhcmd1bWVudHMgcmVtYWluaW5nKS4gICovCisjZGVmaW5lIEFSR1BfS0VZX1NVQ0NFU1MJMHgxMDAwMDA0CisvKiBQYXNzZWQgaW4gaWYgYW4gZXJyb3Igb2NjdXJzLiAgKi8KKyNkZWZpbmUgQVJHUF9LRVlfRVJST1IJCTB4MTAwMDAwNQorCisvKiBBbiBhcmdwIHN0cnVjdHVyZSBjb250YWlucyBhIHNldCBvZiBvcHRpb25zIGRlY2xhcmF0aW9ucywgYSBmdW5jdGlvbiB0bworICAgZGVhbCB3aXRoIHBhcnNpbmcgb25lLCBkb2N1bWVudGF0aW9uIHN0cmluZywgYSBwb3NzaWJsZSB2ZWN0b3Igb2YgY2hpbGQKKyAgIGFyZ3AncywgYW5kIHBlcmhhcHMgYSBmdW5jdGlvbiB0byBmaWx0ZXIgaGVscCBvdXRwdXQuICBXaGVuIGFjdHVhbGx5CisgICBwYXJzaW5nIG9wdGlvbnMsIGdldG9wdCBpcyBjYWxsZWQgd2l0aCB0aGUgdW5pb24gb2YgYWxsIHRoZSBhcmdwCisgICBzdHJ1Y3R1cmVzIGNoYWluZWQgdG9nZXRoZXIgdGhyb3VnaCB0aGVpciBDSElMRCBwb2ludGVycywgd2l0aCBjb25mbGljdHMKKyAgIGJlaW5nIHJlc29sdmVkIGluIGZhdm9yIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIGluIHRoZSBjaGFpbi4gICovCitzdHJ1Y3QgYXJncAoreworICAvKiBBbiBhcnJheSBvZiBhcmdwX29wdGlvbiBzdHJ1Y3R1cmVzLCB0ZXJtaW5hdGVkIGJ5IGFuIGVudHJ5IHdpdGggYm90aAorICAgICBOQU1FIGFuZCBLRVkgaGF2aW5nIGEgdmFsdWUgb2YgMC4gICovCisgIF9fY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHRpb25zOworCisgIC8qIFdoYXQgdG8gZG8gd2l0aCBhbiBvcHRpb24gZnJvbSB0aGlzIHN0cnVjdHVyZS4gIEtFWSBpcyB0aGUga2V5CisgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3B0aW9uLCBhbmQgQVJHIGlzIGFueSBhc3NvY2lhdGVkIGFyZ3VtZW50IChOVUxMIGlmCisgICAgIG5vbmUgd2FzIHN1cHBsaWVkKS4gIElmIEtFWSBpc24ndCB1bmRlcnN0b29kLCBBUkdQX0VSUl9VTktOT1dOIHNob3VsZCBiZQorICAgICByZXR1cm5lZC4gIElmIGEgbm9uLXplcm8sIG5vbi1BUkdQX0VSUl9VTktOT1dOIHZhbHVlIGlzIHJldHVybmVkLCB0aGVuCisgICAgIHBhcnNpbmcgaXMgc3RvcHBlZCBpbW1lZGlhdGVseSwgYW5kIHRoYXQgdmFsdWUgaXMgcmV0dXJuZWQgZnJvbQorICAgICBhcmdwX3BhcnNlKCkuICBGb3Igc3BlY2lhbCAobm9uLXVzZXItc3VwcGxpZWQpIHZhbHVlcyBvZiBLRVksIHNlZSB0aGUKKyAgICAgQVJHUF9LRVlfIGRlZmluaXRpb25zIGJlbG93LiAgKi8KKyAgYXJncF9wYXJzZXJfdCBwYXJzZXI7CisKKyAgLyogQSBzdHJpbmcgZGVzY3JpYmluZyB3aGF0IG90aGVyIGFyZ3VtZW50cyBhcmUgd2FudGVkIGJ5IHRoaXMgcHJvZ3JhbS4gIEl0CisgICAgIGlzIG9ubHkgdXNlZCBieSBhcmdwX3VzYWdlIHRvIHByaW50IHRoZSBgVXNhZ2U6JyBtZXNzYWdlLiAgSWYgaXQKKyAgICAgY29udGFpbnMgbmV3bGluZXMsIHRoZSBzdHJpbmdzIHNlcGFyYXRlZCBieSB0aGVtIGFyZSBjb25zaWRlcmVkCisgICAgIGFsdGVybmF0aXZlIHVzYWdlIHBhdHRlcm5zLCBhbmQgcHJpbnRlZCBvbiBzZXBhcmF0ZSBsaW5lcyAobGluZXMgYWZ0ZXIKKyAgICAgdGhlIGZpcnN0IGFyZSBwcmVmaXggYnkgYCAgb3I6ICcgaW5zdGVhZCBvZiBgVXNhZ2U6JykuICAqLworICBfX2NvbnN0IGNoYXIgKmFyZ3NfZG9jOworCisgIC8qIElmIG5vbi1OVUxMLCBhIHN0cmluZyBjb250YWluaW5nIGV4dHJhIHRleHQgdG8gYmUgcHJpbnRlZCBiZWZvcmUgYW5kCisgICAgIGFmdGVyIHRoZSBvcHRpb25zIGluIGEgbG9uZyBoZWxwIG1lc3NhZ2UgKHNlcGFyYXRlZCBieSBhIHZlcnRpY2FsIHRhYgorICAgICBgXHYnIGNoYXJhY3RlcikuICAqLworICBfX2NvbnN0IGNoYXIgKmRvYzsKKworICAvKiBBIHZlY3RvciBvZiBhcmdwX2NoaWxkcmVuIHN0cnVjdHVyZXMsIHRlcm1pbmF0ZWQgYnkgYSBtZW1iZXIgd2l0aCBhIDAKKyAgICAgYXJncCBmaWVsZCwgcG9pbnRpbmcgdG8gY2hpbGQgYXJncHMgc2hvdWxkIGJlIHBhcnNlZCB3aXRoIHRoaXMgb25lLiAgQW55CisgICAgIGNvbmZsaWN0cyBhcmUgcmVzb2x2ZWQgaW4gZmF2b3Igb2YgdGhpcyBhcmdwLCBvciBlYXJseSBhcmdwcyBpbiB0aGUKKyAgICAgQ0hJTERSRU4gbGlzdC4gIFRoaXMgZmllbGQgaXMgdXNlZnVsIGlmIHlvdSB1c2UgbGlicmFyaWVzIHRoYXQgc3VwcGx5CisgICAgIHRoZWlyIG93biBhcmdwIHN0cnVjdHVyZSwgd2hpY2ggeW91IHdhbnQgdG8gdXNlIGluIGNvbmp1bmN0aW9uIHdpdGggeW91cgorICAgICBvd24uICAqLworICBfX2NvbnN0IHN0cnVjdCBhcmdwX2NoaWxkICpjaGlsZHJlbjsKKworICAvKiBJZiBub24temVybywgdGhpcyBzaG91bGQgYmUgYSBmdW5jdGlvbiB0byBmaWx0ZXIgdGhlIG91dHB1dCBvZiBoZWxwCisgICAgIG1lc3NhZ2VzLiAgS0VZIGlzIGVpdGhlciBhIGtleSBmcm9tIGFuIG9wdGlvbiwgaW4gd2hpY2ggY2FzZSBURVhUIGlzCisgICAgIHRoYXQgb3B0aW9uJ3MgaGVscCB0ZXh0LCBvciBhIHNwZWNpYWwga2V5IGZyb20gdGhlIEFSR1BfS0VZX0hFTFBfCisgICAgIGRlZmluZXMsIGJlbG93LCBkZXNjcmliaW5nIHdoaWNoIG90aGVyIGhlbHAgdGV4dCBURVhUIGlzLiAgVGhlIGZ1bmN0aW9uCisgICAgIHNob3VsZCByZXR1cm4gZWl0aGVyIFRFWFQsIGlmIGl0IHNob3VsZCBiZSB1c2VkIGFzLWlzLCBhIHJlcGxhY2VtZW50CisgICAgIHN0cmluZywgd2hpY2ggc2hvdWxkIGJlIG1hbGxvY2VkLCBhbmQgd2lsbCBiZSBmcmVlZCBieSBhcmdwLCBvciBOVUxMLAorICAgICBtZWFuaW5nIGBwcmludCBub3RoaW5nJy4gIFRoZSB2YWx1ZSBmb3IgVEVYVCBpcyAqYWZ0ZXIqIGFueSB0cmFuc2xhdGlvbgorICAgICBoYXMgYmVlbiBkb25lLCBzbyBpZiBhbnkgb2YgdGhlIHJlcGxhY2VtZW50IHRleHQgYWxzbyBuZWVkcyB0cmFuc2xhdGlvbiwKKyAgICAgdGhhdCBzaG91bGQgYmUgZG9uZSBieSB0aGUgZmlsdGVyIGZ1bmN0aW9uLiAgSU5QVVQgaXMgZWl0aGVyIHRoZSBpbnB1dAorICAgICBzdXBwbGllZCB0byBhcmdwX3BhcnNlLCBvciBOVUxMLCBpZiBhcmdwX2hlbHAgd2FzIGNhbGxlZCBkaXJlY3RseS4gICovCisgIGNoYXIgKigqaGVscF9maWx0ZXIpIChpbnQgX19rZXksIF9fY29uc3QgY2hhciAqX190ZXh0LCB2b2lkICpfX2lucHV0KTsKKworICAvKiBJZiBub24temVybyB0aGUgc3RyaW5ncyB1c2VkIGluIHRoZSBhcmdwIGxpYnJhcnkgYXJlIHRyYW5zbGF0ZWQgdXNpbmcKKyAgICAgdGhlIGRvbWFpbiBkZXNjcmliZWQgYnkgdGhpcyBzdHJpbmcuICBPdGhlcndpc2UgdGhlIGN1cnJlbnRseSBpbnN0YWxsZWQKKyAgICAgZGVmYXVsdCBkb21haW4gaXMgdXNlZC4gICovCisgIGNvbnN0IGNoYXIgKmFyZ3BfZG9tYWluOworfTsKKworLyogUG9zc2libGUgS0VZIGFyZ3VtZW50cyB0byBhIGhlbHAgZmlsdGVyIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgQVJHUF9LRVlfSEVMUF9QUkVfRE9DCTB4MjAwMDAwMSAvKiBIZWxwIHRleHQgcHJlY2VlZGluZyBvcHRpb25zLiAqLworI2RlZmluZSBBUkdQX0tFWV9IRUxQX1BPU1RfRE9DCTB4MjAwMDAwMiAvKiBIZWxwIHRleHQgZm9sbG93aW5nIG9wdGlvbnMuICovCisjZGVmaW5lIEFSR1BfS0VZX0hFTFBfSEVBREVSCTB4MjAwMDAwMyAvKiBPcHRpb24gaGVhZGVyIHN0cmluZy4gKi8KKyNkZWZpbmUgQVJHUF9LRVlfSEVMUF9FWFRSQQkweDIwMDAwMDQgLyogQWZ0ZXIgYWxsIG90aGVyIGRvY3VtZW50YXRpb247CisJCQkJCSAgICAgVEVYVCBpcyBOVUxMIGZvciB0aGlzIGtleS4gICovCisvKiBFeHBsYW5hdG9yeSBub3RlIGVtaXR0ZWQgd2hlbiBkdXBsaWNhdGUgb3B0aW9uIGFyZ3VtZW50cyBoYXZlIGJlZW4KKyAgIHN1cHByZXNzZWQuICAqLworI2RlZmluZSBBUkdQX0tFWV9IRUxQX0RVUF9BUkdTX05PVEUgMHgyMDAwMDA1CisjZGVmaW5lIEFSR1BfS0VZX0hFTFBfQVJHU19ET0MJMHgyMDAwMDA2IC8qIEFyZ3VtZW50IGRvYyBzdHJpbmcuICAqLworDAorLyogV2hlbiBhbiBhcmdwIGhhcyBhIG5vbi16ZXJvIENISUxEUkVOIGZpZWxkLCBpdCBzaG91bGQgcG9pbnQgdG8gYSB2ZWN0b3Igb2YKKyAgIGFyZ3BfY2hpbGQgc3RydWN0dXJlcywgZWFjaCBvZiB3aGljaCBkZXNjcmliZXMgYSBzdWJzaWRpYXJ5IGFyZ3AuICAqLworc3RydWN0IGFyZ3BfY2hpbGQKK3sKKyAgLyogVGhlIGNoaWxkIHBhcnNlci4gICovCisgIF9fY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3A7CisKKyAgLyogRmxhZ3MgZm9yIHRoaXMgY2hpbGQuICAqLworICBpbnQgZmxhZ3M7CisKKyAgLyogSWYgbm9uLXplcm8sIGFuIG9wdGlvbmFsIGhlYWRlciB0byBiZSBwcmludGVkIGluIGhlbHAgb3V0cHV0IGJlZm9yZSB0aGUKKyAgICAgY2hpbGQgb3B0aW9ucy4gIEFzIGEgc2lkZS1lZmZlY3QsIGEgbm9uLXplcm8gdmFsdWUgZm9yY2VzIHRoZSBjaGlsZAorICAgICBvcHRpb25zIHRvIGJlIGdyb3VwZWQgdG9nZXRoZXI7IHRvIGFjaGlldmUgdGhpcyBlZmZlY3Qgd2l0aG91dCBhY3R1YWxseQorICAgICBwcmludGluZyBhIGhlYWRlciBzdHJpbmcsIHVzZSBhIHZhbHVlIG9mICIiLiAgKi8KKyAgX19jb25zdCBjaGFyICpoZWFkZXI7CisKKyAgLyogV2hlcmUgdG8gZ3JvdXAgdGhlIGNoaWxkIG9wdGlvbnMgcmVsYXRpdmUgdG8gdGhlIG90aGVyIChgY29uc29saWRhdGVkJykKKyAgICAgb3B0aW9ucyBpbiB0aGUgcGFyZW50IGFyZ3A7IHRoZSB2YWx1ZXMgYXJlIHRoZSBzYW1lIGFzIHRoZSBHUk9VUCBmaWVsZAorICAgICBpbiBhcmdwX29wdGlvbiBzdHJ1Y3RzLCBidXQgYWxsIGNoaWxkLWdyb3VwaW5ncyBmb2xsb3cgcGFyZW50IG9wdGlvbnMgYXQKKyAgICAgYSBwYXJ0aWN1bGFyIGdyb3VwIGxldmVsLiAgSWYgYm90aCB0aGlzIGZpZWxkIGFuZCBIRUFERVIgYXJlIHplcm8sIHRoZW4KKyAgICAgdGhleSBhcmVuJ3QgZ3JvdXBlZCBhdCBhbGwsIGJ1dCByYXRoZXIgbWVyZ2VkIHdpdGggdGhlIHBhcmVudCBvcHRpb25zCisgICAgIChtZXJnaW5nIHRoZSBjaGlsZCdzIGdyb3VwaW5nIGxldmVscyB3aXRoIHRoZSBwYXJlbnRzKS4gICovCisgIGludCBncm91cDsKK307CisMCisvKiBQYXJzaW5nIHN0YXRlLiAgVGhpcyBpcyBwcm92aWRlZCB0byBwYXJzaW5nIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYXJncCwKKyAgIHdoaWNoIG1heSBleGFtaW5lIGFuZCwgYXMgbm90ZWQsIG1vZGlmeSBmaWVsZHMuICAqLworc3RydWN0IGFyZ3Bfc3RhdGUKK3sKKyAgLyogVGhlIHRvcCBsZXZlbCBBUkdQIGJlaW5nIHBhcnNlZC4gICovCisgIF9fY29uc3Qgc3RydWN0IGFyZ3AgKnJvb3RfYXJncDsKKworICAvKiBUaGUgYXJndW1lbnQgdmVjdG9yIGJlaW5nIHBhcnNlZC4gIE1heSBiZSBtb2RpZmllZC4gICovCisgIGludCBhcmdjOworICBjaGFyICoqYXJndjsKKworICAvKiBUaGUgaW5kZXggaW4gQVJHViBvZiB0aGUgbmV4dCBhcmcgdGhhdCB0byBiZSBwYXJzZWQuICBNYXkgYmUgbW9kaWZpZWQuICovCisgIGludCBuZXh0OworCisgIC8qIFRoZSBmbGFncyBzdXBwbGllZCB0byBhcmdwX3BhcnNlLiAgTWF5IGJlIG1vZGlmaWVkLiAgKi8KKyAgdW5zaWduZWQgZmxhZ3M7CisKKyAgLyogV2hpbGUgY2FsbGluZyBhIHBhcnNpbmcgZnVuY3Rpb24gd2l0aCBhIGtleSBvZiBBUkdQX0tFWV9BUkcsIHRoaXMgaXMgdGhlCisgICAgIG51bWJlciBvZiB0aGUgY3VycmVudCBhcmcsIHN0YXJ0aW5nIGF0IHplcm8sIGFuZCBpbmNyZW1lbnRlZCBhZnRlciBlYWNoCisgICAgIHN1Y2ggY2FsbCByZXR1cm5zLiAgQXQgYWxsIG90aGVyIHRpbWVzLCB0aGlzIGlzIHRoZSBudW1iZXIgb2Ygc3VjaAorICAgICBhcmd1bWVudHMgdGhhdCBoYXZlIGJlZW4gcHJvY2Vzc2VkLiAgKi8KKyAgdW5zaWduZWQgYXJnX251bTsKKworICAvKiBJZiBub24temVybywgdGhlIGluZGV4IGluIEFSR1Ygb2YgdGhlIGZpcnN0IGFyZ3VtZW50IGZvbGxvd2luZyBhIHNwZWNpYWwKKyAgICAgYC0tJyBhcmd1bWVudCAod2hpY2ggcHJldmVudHMgYW55dGhpbmcgZm9sbG93aW5nIGJlaW5nIGludGVycHJldGVkIGFzIGFuCisgICAgIG9wdGlvbikuICBPbmx5IHNldCBvbmNlIGFyZ3VtZW50IHBhcnNpbmcgaGFzIHByb2NlZWRlZCBwYXN0IHRoaXMgcG9pbnQuICovCisgIGludCBxdW90ZWQ7CisKKyAgLyogQW4gYXJiaXRyYXJ5IHBvaW50ZXIgcGFzc2VkIGluIGZyb20gdGhlIHVzZXIuICAqLworICB2b2lkICppbnB1dDsKKyAgLyogVmFsdWVzIHRvIHBhc3MgdG8gY2hpbGQgcGFyc2Vycy4gIFRoaXMgdmVjdG9yIHdpbGwgYmUgdGhlIHNhbWUgbGVuZ3RoIGFzCisgICAgIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gZm9yIHRoZSBjdXJyZW50IHBhcnNlci4gICovCisgIHZvaWQgKipjaGlsZF9pbnB1dHM7CisKKyAgLyogRm9yIHRoZSBwYXJzZXIncyB1c2UuICBJbml0aWFsaXplZCB0byAwLiAgKi8KKyAgdm9pZCAqaG9vazsKKworICAvKiBUaGUgbmFtZSB1c2VkIHdoZW4gcHJpbnRpbmcgbWVzc2FnZXMuICBUaGlzIGlzIGluaXRpYWxpemVkIHRvIEFSR1ZbMF0sCisgICAgIG9yIFBST0dSQU1fSU5WT0NBVElPTl9OQU1FIGlmIHRoYXQgaXMgdW5hdmFpbGFibGUuICAqLworICBjaGFyICpuYW1lOworCisgIC8qIFN0cmVhbXMgdXNlZCB3aGVuIGFyZ3AgcHJpbnRzIHNvbWV0aGluZy4gICovCisgIEZJTEUgKmVycl9zdHJlYW07CQkvKiBGb3IgZXJyb3JzOyBpbml0aWFsaXplZCB0byBzdGRlcnIuICovCisgIEZJTEUgKm91dF9zdHJlYW07CQkvKiBGb3IgaW5mb3JtYXRpb247IGluaXRpYWxpemVkIHRvIHN0ZG91dC4gKi8KKworICB2b2lkICpwc3RhdGU7CQkJLyogUHJpdmF0ZSwgZm9yIHVzZSBieSBhcmdwLiAgKi8KK307CisMCisvKiBGbGFncyBmb3IgYXJncF9wYXJzZSAobm90ZSB0aGF0IHRoZSBkZWZhdWx0cyBhcmUgdGhvc2UgdGhhdCBhcmUKKyAgIGNvbnZlbmllbnQgZm9yIHByb2dyYW0gY29tbWFuZCBsaW5lIHBhcnNpbmcpOiAqLworCisvKiBEb24ndCBpZ25vcmUgdGhlIGZpcnN0IGVsZW1lbnQgb2YgQVJHVi4gIE5vcm1hbGx5IChhbmQgYWx3YXlzIHVubGVzcworICAgQVJHUF9OT19FUlJTIGlzIHNldCkgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGFyZ3VtZW50IHZlY3RvciBpcworICAgc2tpcHBlZCBmb3Igb3B0aW9uIHBhcnNpbmcgcHVycG9zZXMsIGFzIGl0IGNvcnJlc3BvbmRzIHRvIHRoZSBwcm9ncmFtIG5hbWUKKyAgIGluIGEgY29tbWFuZCBsaW5lLiAgKi8KKyNkZWZpbmUgQVJHUF9QQVJTRV9BUkdWMCAgMHgwMQorCisvKiBEb24ndCBwcmludCBlcnJvciBtZXNzYWdlcyBmb3IgdW5rbm93biBvcHRpb25zIHRvIHN0ZGVycjsgdW5sZXNzIHRoaXMgZmxhZworICAgaXMgc2V0LCBBUkdQX1BBUlNFX0FSR1YwIGlzIGlnbm9yZWQsIGFzIEFSR1ZbMF0gaXMgdXNlZCBhcyB0aGUgcHJvZ3JhbQorICAgbmFtZSBpbiB0aGUgZXJyb3IgbWVzc2FnZXMuICBUaGlzIGZsYWcgaW1wbGllcyBBUkdQX05PX0VYSVQgKG9uIHRoZQorICAgYXNzdW1wdGlvbiB0aGF0IHNpbGVudCBleGl0aW5nIHVwb24gZXJyb3JzIGlzIGJhZCBiZWhhdmlvdXIpLiAgKi8KKyNkZWZpbmUgQVJHUF9OT19FUlJTCTB4MDIKKworLyogRG9uJ3QgcGFyc2UgYW55IG5vbi1vcHRpb24gYXJncy4gIE5vcm1hbGx5IG5vbi1vcHRpb24gYXJncyBhcmUgcGFyc2VkIGJ5CisgICBjYWxsaW5nIHRoZSBwYXJzZSBmdW5jdGlvbnMgd2l0aCBhIGtleSBvZiBBUkdQX0tFWV9BUkcsIGFuZCB0aGUgYWN0dWFsIGFyZworICAgYXMgdGhlIHZhbHVlLiAgU2luY2UgaXQncyBpbXBvc3NpYmxlIHRvIGtub3cgd2hpY2ggcGFyc2UgZnVuY3Rpb24gd2FudHMgdG8KKyAgIGhhbmRsZSBpdCwgZWFjaCBvbmUgaXMgY2FsbGVkIGluIHR1cm4sIHVudGlsIG9uZSByZXR1cm5zIDAgb3IgYW4gZXJyb3IKKyAgIG90aGVyIHRoYW4gQVJHUF9FUlJfVU5LTk9XTjsgaWYgYW4gYXJndW1lbnQgaXMgaGFuZGxlZCBieSBubyBvbmUsIHRoZQorICAgYXJncF9wYXJzZSByZXR1cm5zIHByZW1hdHVyZWx5IChidXQgd2l0aCBhIHJldHVybiB2YWx1ZSBvZiAwKS4gIElmIGFsbAorICAgYXJncyBoYXZlIGJlZW4gcGFyc2VkIHdpdGhvdXQgZXJyb3IsIGFsbCBwYXJzaW5nIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIG9uZQorICAgbGFzdCB0aW1lIHdpdGggYSBrZXkgb2YgQVJHUF9LRVlfRU5ELiAgVGhpcyBmbGFnIG5lZWRuJ3Qgbm9ybWFsbHkgYmUgc2V0LAorICAgYXMgdGhlIG5vcm1hbCBiZWhhdmlvciBpcyB0byBzdG9wIHBhcnNpbmcgYXMgc29vbiBhcyBzb21lIGFyZ3VtZW50IGNhbid0CisgICBiZSBoYW5kbGVkLiAgKi8KKyNkZWZpbmUgQVJHUF9OT19BUkdTCTB4MDQKKworLyogUGFyc2Ugb3B0aW9ucyBhbmQgYXJndW1lbnRzIGluIHRoZSBzYW1lIG9yZGVyIHRoZXkgb2NjdXIgb24gdGhlIGNvbW1hbmQKKyAgIGxpbmUgLS0gbm9ybWFsbHkgdGhleSdyZSByZWFycmFuZ2VkIHNvIHRoYXQgYWxsIG9wdGlvbnMgY29tZSBmaXJzdC4gKi8KKyNkZWZpbmUgQVJHUF9JTl9PUkRFUgkweDA4CisKKy8qIERvbid0IHByb3ZpZGUgdGhlIHN0YW5kYXJkIGxvbmcgb3B0aW9uIC0taGVscCwgd2hpY2ggY2F1c2VzIHVzYWdlIGFuZAorICAgICAgb3B0aW9uIGhlbHAgaW5mb3JtYXRpb24gdG8gYmUgb3V0cHV0IHRvIHN0ZG91dCwgYW5kIGV4aXQgKDApIGNhbGxlZC4gKi8KKyNkZWZpbmUgQVJHUF9OT19IRUxQCTB4MTAKKworLyogRG9uJ3QgZXhpdCBvbiBlcnJvcnMgKHRoZXkgbWF5IHN0aWxsIHJlc3VsdCBpbiBlcnJvciBtZXNzYWdlcykuICAqLworI2RlZmluZSBBUkdQX05PX0VYSVQJMHgyMAorCisvKiBVc2UgdGhlIGdudSBnZXRvcHQgYGxvbmctb25seScgcnVsZXMgZm9yIHBhcnNpbmcgYXJndW1lbnRzLiAgKi8KKyNkZWZpbmUgQVJHUF9MT05HX09OTFkJMHg0MAorCisvKiBUdXJucyBvZmYgYW55IG1lc3NhZ2UtcHJpbnRpbmcvZXhpdGluZyBvcHRpb25zLiAgKi8KKyNkZWZpbmUgQVJHUF9TSUxFTlQgICAgKEFSR1BfTk9fRVhJVCB8IEFSR1BfTk9fRVJSUyB8IEFSR1BfTk9fSEVMUCkKKworLyogUGFyc2UgdGhlIG9wdGlvbnMgc3RyaW5ncyBpbiBBUkdDICYgQVJHViBhY2NvcmRpbmcgdG8gdGhlIG9wdGlvbnMgaW4gQVJHUC4KKyAgIEZMQUdTIGlzIG9uZSBvZiB0aGUgQVJHUF8gZmxhZ3MgYWJvdmUuICBJZiBBUkdfSU5ERVggaXMgbm9uLU5VTEwsIHRoZQorICAgaW5kZXggaW4gQVJHViBvZiB0aGUgZmlyc3QgdW5wYXJzZWQgb3B0aW9uIGlzIHJldHVybmVkIGluIGl0LiAgSWYgYW4KKyAgIHVua25vd24gb3B0aW9uIGlzIHByZXNlbnQsIEFSR1BfRVJSX1VOS05PV04gaXMgcmV0dXJuZWQ7IGlmIHNvbWUgcGFyc2VyCisgICByb3V0aW5lIHJldHVybmVkIGEgbm9uLXplcm8gdmFsdWUsIGl0IGlzIHJldHVybmVkOyBvdGhlcndpc2UgMCBpcworICAgcmV0dXJuZWQuICBUaGlzIGZ1bmN0aW9uIG1heSBhbHNvIGNhbGwgZXhpdCB1bmxlc3MgdGhlIEFSR1BfTk9fSEVMUCBmbGFnCisgICBpcyBzZXQuICBJTlBVVCBpcyBhIHBvaW50ZXIgdG8gYSB2YWx1ZSB0byBiZSBwYXNzZWQgaW4gdG8gdGhlIHBhcnNlci4gICovCitleHRlcm4gZXJyb3JfdCBhcmdwX3BhcnNlIChfX2NvbnN0IHN0cnVjdCBhcmdwICpfX3Jlc3RyaWN0IF9fYXJncCwKKwkJCSAgIGludCBfX2FyZ2MsIGNoYXIgKipfX3Jlc3RyaWN0IF9fYXJndiwKKwkJCSAgIHVuc2lnbmVkIF9fZmxhZ3MsIGludCAqX19yZXN0cmljdCBfX2FyZ19pbmRleCwKKwkJCSAgIHZvaWQgKl9fcmVzdHJpY3QgX19pbnB1dCk7CitleHRlcm4gZXJyb3JfdCBfX2FyZ3BfcGFyc2UgKF9fY29uc3Qgc3RydWN0IGFyZ3AgKl9fcmVzdHJpY3QgX19hcmdwLAorCQkJICAgICBpbnQgX19hcmdjLCBjaGFyICoqX19yZXN0cmljdCBfX2FyZ3YsCisJCQkgICAgIHVuc2lnbmVkIF9fZmxhZ3MsIGludCAqX19yZXN0cmljdCBfX2FyZ19pbmRleCwKKwkJCSAgICAgdm9pZCAqX19yZXN0cmljdCBfX2lucHV0KTsKKwwKKy8qIEdsb2JhbCB2YXJpYWJsZXMuICAqLworCisvKiBJZiBkZWZpbmVkIG9yIHNldCBieSB0aGUgdXNlciBwcm9ncmFtIHRvIGEgbm9uLXplcm8gdmFsdWUsIHRoZW4gYSBkZWZhdWx0CisgICBvcHRpb24gLS12ZXJzaW9uIGlzIGFkZGVkICh1bmxlc3MgdGhlIEFSR1BfTk9fSEVMUCBmbGFnIGlzIHVzZWQpLCB3aGljaAorICAgd2lsbCBwcmludCB0aGlzIHN0cmluZyBmb2xsb3dlZCBieSBhIG5ld2xpbmUgYW5kIGV4aXQgKHVubGVzcyB0aGUKKyAgIEFSR1BfTk9fRVhJVCBmbGFnIGlzIHVzZWQpLiAgT3ZlcnJpZGRlbiBieSBBUkdQX1BST0dSQU1fVkVSU0lPTl9IT09LLiAgKi8KK2V4dGVybiBfX2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV92ZXJzaW9uOworCisvKiBJZiBkZWZpbmVkIG9yIHNldCBieSB0aGUgdXNlciBwcm9ncmFtIHRvIGEgbm9uLXplcm8gdmFsdWUsIHRoZW4gYSBkZWZhdWx0CisgICBvcHRpb24gLS12ZXJzaW9uIGlzIGFkZGVkICh1bmxlc3MgdGhlIEFSR1BfTk9fSEVMUCBmbGFnIGlzIHVzZWQpLCB3aGljaAorICAgY2FsbHMgdGhpcyBmdW5jdGlvbiB3aXRoIGEgc3RyZWFtIHRvIHByaW50IHRoZSB2ZXJzaW9uIHRvIGFuZCBhIHBvaW50ZXIgdG8KKyAgIHRoZSBjdXJyZW50IHBhcnNpbmcgc3RhdGUsIGFuZCB0aGVuIGV4aXRzICh1bmxlc3MgdGhlIEFSR1BfTk9fRVhJVCBmbGFnIGlzCisgICB1c2VkKS4gIFRoaXMgdmFyaWFibGUgdGFrZXMgcHJlY2VkZW50IG92ZXIgQVJHUF9QUk9HUkFNX1ZFUlNJT04uICAqLworZXh0ZXJuIHZvaWQgKCphcmdwX3Byb2dyYW1fdmVyc2lvbl9ob29rKSAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKKwkJCQkJICBzdHJ1Y3QgYXJncF9zdGF0ZSAqX19yZXN0cmljdAorCQkJCQkgIF9fc3RhdGUpOworCisvKiBJZiBkZWZpbmVkIG9yIHNldCBieSB0aGUgdXNlciBwcm9ncmFtLCBpdCBzaG91bGQgcG9pbnQgdG8gc3RyaW5nIHRoYXQgaXMKKyAgIHRoZSBidWctcmVwb3J0aW5nIGFkZHJlc3MgZm9yIHRoZSBwcm9ncmFtLiAgSXQgd2lsbCBiZSBwcmludGVkIGJ5CisgICBhcmdwX2hlbHAgaWYgdGhlIEFSR1BfSEVMUF9CVUdfQUREUiBmbGFnIGlzIHNldCAoYXMgaXQgaXMgYnkgdmFyaW91cworICAgc3RhbmRhcmQgaGVscCBtZXNzYWdlcyksIGVtYmVkZGVkIGluIGEgc2VudGVuY2UgdGhhdCBzYXlzIHNvbWV0aGluZyBsaWtlCisgICBgUmVwb3J0IGJ1Z3MgdG8gQUREUi4nLiAgKi8KK2V4dGVybiBfX2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV9idWdfYWRkcmVzczsKKworLyogVGhlIGV4aXQgc3RhdHVzIHRoYXQgYXJncCB3aWxsIHVzZSB3aGVuIGV4aXRpbmcgZHVlIHRvIGEgcGFyc2luZyBlcnJvci4KKyAgIElmIG5vdCBkZWZpbmVkIG9yIHNldCBieSB0aGUgdXNlciBwcm9ncmFtLCB0aGlzIGRlZmF1bHRzIHRvIEVYX1VTQUdFIGZyb20KKyAgIDxzeXNleGl0cy5oPi4gICovCitleHRlcm4gZXJyb3JfdCBhcmdwX2Vycl9leGl0X3N0YXR1czsKKwwKKy8qIEZsYWdzIGZvciBhcmdwX2hlbHAuICAqLworI2RlZmluZSBBUkdQX0hFTFBfVVNBR0UJCTB4MDEgLyogYSBVc2FnZTogbWVzc2FnZS4gKi8KKyNkZWZpbmUgQVJHUF9IRUxQX1NIT1JUX1VTQUdFCTB4MDIgLyogICIgYnV0IGRvbid0IGFjdHVhbGx5IHByaW50IG9wdGlvbnMuICovCisjZGVmaW5lIEFSR1BfSEVMUF9TRUUJCTB4MDQgLyogYSBgVHJ5IC4uLiBmb3IgbW9yZSBoZWxwJyBtZXNzYWdlLiAqLworI2RlZmluZSBBUkdQX0hFTFBfTE9ORwkJMHgwOCAvKiBhIGxvbmcgaGVscCBtZXNzYWdlLiAqLworI2RlZmluZSBBUkdQX0hFTFBfUFJFX0RPQwkweDEwIC8qIGRvYyBzdHJpbmcgcHJlY2VkaW5nIGxvbmcgaGVscC4gICovCisjZGVmaW5lIEFSR1BfSEVMUF9QT1NUX0RPQwkweDIwIC8qIGRvYyBzdHJpbmcgZm9sbG93aW5nIGxvbmcgaGVscC4gICovCisjZGVmaW5lIEFSR1BfSEVMUF9ET0MJCShBUkdQX0hFTFBfUFJFX0RPQyB8IEFSR1BfSEVMUF9QT1NUX0RPQykKKyNkZWZpbmUgQVJHUF9IRUxQX0JVR19BRERSCTB4NDAgLyogYnVnIHJlcG9ydCBhZGRyZXNzICovCisjZGVmaW5lIEFSR1BfSEVMUF9MT05HX09OTFkJMHg4MCAvKiBtb2RpZnkgb3V0cHV0IGFwcHJvcHJpYXRlbHkgdG8KKwkJCQkJcmVmbGVjdCBBUkdQX0xPTkdfT05MWSBtb2RlLiAgKi8KKworLyogVGhlc2UgQVJHUF9IRUxQIGZsYWdzIGFyZSBvbmx5IHVuZGVyc3Rvb2QgYnkgYXJncF9zdGF0ZV9oZWxwLiAgKi8KKyNkZWZpbmUgQVJHUF9IRUxQX0VYSVRfRVJSCTB4MTAwIC8qIENhbGwgZXhpdCgxKSBpbnN0ZWFkIG9mIHJldHVybmluZy4gICovCisjZGVmaW5lIEFSR1BfSEVMUF9FWElUX09LCTB4MjAwIC8qIENhbGwgZXhpdCgwKSBpbnN0ZWFkIG9mIHJldHVybmluZy4gICovCisKKy8qIFRoZSBzdGFuZGFyZCB0aGluZyB0byBkbyBhZnRlciBhIHByb2dyYW0gY29tbWFuZCBsaW5lIHBhcnNpbmcgZXJyb3IsIGlmIGFuCisgICBlcnJvciBtZXNzYWdlIGhhcyBhbHJlYWR5IGJlZW4gcHJpbnRlZC4gICovCisjZGVmaW5lIEFSR1BfSEVMUF9TVERfRVJSIFwKKyAgKEFSR1BfSEVMUF9TRUUgfCBBUkdQX0hFTFBfRVhJVF9FUlIpCisvKiBUaGUgc3RhbmRhcmQgdGhpbmcgdG8gZG8gYWZ0ZXIgYSBwcm9ncmFtIGNvbW1hbmQgbGluZSBwYXJzaW5nIGVycm9yLCBpZiBubworICAgbW9yZSBzcGVjaWZpYyBlcnJvciBtZXNzYWdlIGhhcyBiZWVuIHByaW50ZWQuICAqLworI2RlZmluZSBBUkdQX0hFTFBfU1REX1VTQUdFIFwKKyAgKEFSR1BfSEVMUF9TSE9SVF9VU0FHRSB8IEFSR1BfSEVMUF9TRUUgfCBBUkdQX0hFTFBfRVhJVF9FUlIpCisvKiBUaGUgc3RhbmRhcmQgdGhpbmcgdG8gZG8gaW4gcmVzcG9uc2UgdG8gYSAtLWhlbHAgb3B0aW9uLiAgKi8KKyNkZWZpbmUgQVJHUF9IRUxQX1NURF9IRUxQIFwKKyAgKEFSR1BfSEVMUF9TSE9SVF9VU0FHRSB8IEFSR1BfSEVMUF9MT05HIHwgQVJHUF9IRUxQX0VYSVRfT0sgXAorICAgfCBBUkdQX0hFTFBfRE9DIHwgQVJHUF9IRUxQX0JVR19BRERSKQorCisvKiBPdXRwdXQgYSB1c2FnZSBtZXNzYWdlIGZvciBBUkdQIHRvIFNUUkVBTS4gIEZMQUdTIGFyZSBmcm9tIHRoZSBzZXQKKyAgIEFSR1BfSEVMUF8qLiAgKi8KK2V4dGVybiB2b2lkIGFyZ3BfaGVscCAoX19jb25zdCBzdHJ1Y3QgYXJncCAqX19yZXN0cmljdCBfX2FyZ3AsCisJCSAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAorCQkgICAgICAgdW5zaWduZWQgX19mbGFncywgY2hhciAqX19yZXN0cmljdCBfX25hbWUpOworZXh0ZXJuIHZvaWQgX19hcmdwX2hlbHAgKF9fY29uc3Qgc3RydWN0IGFyZ3AgKl9fcmVzdHJpY3QgX19hcmdwLAorCQkJIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIHVuc2lnbmVkIF9fZmxhZ3MsCisJCQkgY2hhciAqX19uYW1lKTsKKwwKKy8qIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgYXJlIGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhbiBhcmdwCisgICBwYXJzaW5nIHJvdXRpbmUgKHRodXMgdGFraW5nIGFuIGFyZ3Bfc3RhdGUgc3RydWN0dXJlIGFzIHRoZSBmaXJzdAorICAgYXJndW1lbnQpLiAgVGhleSBtYXkgb3IgbWF5IG5vdCBwcmludCBhbiBlcnJvciBtZXNzYWdlIGFuZCBleGl0LCBkZXBlbmRpbmcKKyAgIG9uIHRoZSBmbGFncyBpbiBTVEFURSAtLSBpbiBhbnkgY2FzZSwgdGhlIGNhbGxlciBzaG91bGQgYmUgcHJlcGFyZWQgZm9yCisgICB0aGVtICpub3QqIHRvIGV4aXQsIGFuZCBzaG91bGQgcmV0dXJuIGFuIGFwcHJvcGlhdGUgZXJyb3IgYWZ0ZXIgY2FsbGluZworICAgdGhlbS4gIFthcmdwX3VzYWdlICYgYXJncF9lcnJvciBzaG91bGQgcHJvYmFibHkgYmUgY2FsbGVkIGFyZ3Bfc3RhdGVfLi4uLAorICAgYnV0IHRoZXkncmUgdXNlZCBvZnRlbiBlbm91Z2ggdGhhdCB0aGV5IHNob3VsZCBiZSBzaG9ydF0gICovCisKKy8qIE91dHB1dCwgaWYgYXBwcm9wcmlhdGUsIGEgdXNhZ2UgbWVzc2FnZSBmb3IgU1RBVEUgdG8gU1RSRUFNLiAgRkxBR1MgYXJlCisgICBmcm9tIHRoZSBzZXQgQVJHUF9IRUxQXyouICAqLworZXh0ZXJuIHZvaWQgYXJncF9zdGF0ZV9oZWxwIChfX2NvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpfX3Jlc3RyaWN0IF9fc3RhdGUsCisJCQkgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCisJCQkgICAgIHVuc2lnbmVkIGludCBfX2ZsYWdzKTsKK2V4dGVybiB2b2lkIF9fYXJncF9zdGF0ZV9oZWxwIChfX2NvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpfX3Jlc3RyaWN0IF9fc3RhdGUsCisJCQkgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgX19mbGFncyk7CisKKy8qIFBvc3NpYmx5IG91dHB1dCB0aGUgc3RhbmRhcmQgdXNhZ2UgbWVzc2FnZSBmb3IgQVJHUCB0byBzdGRlcnIgYW5kIGV4aXQuICAqLworZXh0ZXJuIHZvaWQgYXJncF91c2FnZSAoX19jb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqX19zdGF0ZSk7CitleHRlcm4gdm9pZCBfX2FyZ3BfdXNhZ2UgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKl9fc3RhdGUpOworCisvKiBJZiBhcHByb3ByaWF0ZSwgcHJpbnQgdGhlIHByaW50ZiBzdHJpbmcgRk1UIGFuZCBmb2xsb3dpbmcgYXJncywgcHJlY2VkZWQKKyAgIGJ5IHRoZSBwcm9ncmFtIG5hbWUgYW5kIGA6JywgdG8gc3RkZXJyLCBhbmQgZm9sbG93ZWQgYnkgYSBgVHJ5IC4uLiAtLWhlbHAnCisgICBtZXNzYWdlLCB0aGVuIGV4aXQgKDEpLiAgKi8KK2V4dGVybiB2b2lkIGFyZ3BfZXJyb3IgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKl9fcmVzdHJpY3QgX19zdGF0ZSwKKwkJCV9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQorICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKK2V4dGVybiB2b2lkIF9fYXJncF9lcnJvciAoX19jb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqX19yZXN0cmljdCBfX3N0YXRlLAorCQkJICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CisKKy8qIFNpbWlsYXIgdG8gdGhlIHN0YW5kYXJkIGdudSBlcnJvci1yZXBvcnRpbmcgZnVuY3Rpb24gZXJyb3IoKSwgYnV0IHdpbGwKKyAgIHJlc3BlY3QgdGhlIEFSR1BfTk9fRVhJVCBhbmQgQVJHUF9OT19FUlJTIGZsYWdzIGluIFNUQVRFLCBhbmQgd2lsbCBwcmludAorICAgdG8gU1RBVEUtPmVycl9zdHJlYW0uICBUaGlzIGlzIHVzZWZ1bCBmb3IgYXJndW1lbnQgcGFyc2luZyBjb2RlIHRoYXQgaXMKKyAgIHNoYXJlZCBiZXR3ZWVuIHByb2dyYW0gc3RhcnR1cCAod2hlbiBleGl0aW5nIGlzIGRlc2lyZWQpIGFuZCBydW50aW1lCisgICBvcHRpb24gcGFyc2luZyAod2hlbiB0eXBpY2FsbHkgYW4gZXJyb3IgY29kZSBpcyByZXR1cm5lZCBpbnN0ZWFkKS4gIFRoZQorICAgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgZnVuY3Rpb24gYW5kIGFyZ3BfZXJyb3IgaXMgdGhhdCB0aGUgbGF0dGVyIGlzIGZvcgorICAgKnBhcnNpbmcgZXJyb3JzKiwgYW5kIHRoZSBmb3JtZXIgaXMgZm9yIG90aGVyIHByb2JsZW1zIHRoYXQgb2NjdXIgZHVyaW5nCisgICBwYXJzaW5nIGJ1dCBkb24ndCByZWZsZWN0IGEgKHN5bnRhY3RpYykgcHJvYmxlbSB3aXRoIHRoZSBpbnB1dC4gICovCitleHRlcm4gdm9pZCBhcmdwX2ZhaWx1cmUgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKl9fcmVzdHJpY3QgX19zdGF0ZSwKKwkJCSAgaW50IF9fc3RhdHVzLCBpbnQgX19lcnJudW0sCisJCQkgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQorICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgNCwgNSkpKTsKK2V4dGVybiB2b2lkIF9fYXJncF9mYWlsdXJlIChfX2NvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpfX3Jlc3RyaWN0IF9fc3RhdGUsCisJCQkgICAgaW50IF9fc3RhdHVzLCBpbnQgX19lcnJudW0sCisJCQkgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCisgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCA0LCA1KSkpOworCisvKiBSZXR1cm5zIHRydWUgaWYgdGhlIG9wdGlvbiBPUFQgaXMgYSB2YWxpZCBzaG9ydCBvcHRpb24uICAqLworZXh0ZXJuIGludCBfb3B0aW9uX2lzX3Nob3J0IChfX2NvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqX19vcHQpIF9fVEhST1c7CitleHRlcm4gaW50IF9fb3B0aW9uX2lzX3Nob3J0IChfX2NvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqX19vcHQpIF9fVEhST1c7CisKKy8qIFJldHVybnMgdHJ1ZSBpZiB0aGUgb3B0aW9uIE9QVCBpcyBpbiBmYWN0IHRoZSBsYXN0ICh1bnVzZWQpIGVudHJ5IGluIGFuCisgICBvcHRpb25zIGFycmF5LiAgKi8KK2V4dGVybiBpbnQgX29wdGlvbl9pc19lbmQgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpfX29wdCkgX19USFJPVzsKK2V4dGVybiBpbnQgX19vcHRpb25faXNfZW5kIChfX2NvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqX19vcHQpIF9fVEhST1c7CisKKy8qIFJldHVybiB0aGUgaW5wdXQgZmllbGQgZm9yIEFSR1AgaW4gdGhlIHBhcnNlciBjb3JyZXNwb25kaW5nIHRvIFNUQVRFOyB1c2VkCisgICBieSB0aGUgaGVscCByb3V0aW5lcy4gICovCitleHRlcm4gdm9pZCAqX2FyZ3BfaW5wdXQgKF9fY29uc3Qgc3RydWN0IGFyZ3AgKl9fcmVzdHJpY3QgX19hcmdwLAorCQkJICBfX2NvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpfX3Jlc3RyaWN0IF9fc3RhdGUpCisgICAgIF9fVEhST1c7CitleHRlcm4gdm9pZCAqX19hcmdwX2lucHV0IChfX2NvbnN0IHN0cnVjdCBhcmdwICpfX3Jlc3RyaWN0IF9fYXJncCwKKwkJCSAgIF9fY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKl9fcmVzdHJpY3QgX19zdGF0ZSkKKyAgICAgX19USFJPVzsKKwwKKyNpZmRlZiBfX1VTRV9FWFRFUk5fSU5MSU5FUworCisjIGlmICFfTElCQworIyAgZGVmaW5lIF9fYXJncF91c2FnZSBhcmdwX3VzYWdlCisjICBkZWZpbmUgX19hcmdwX3N0YXRlX2hlbHAgYXJncF9zdGF0ZV9oZWxwCisjICBkZWZpbmUgX19vcHRpb25faXNfc2hvcnQgX29wdGlvbl9pc19zaG9ydAorIyAgZGVmaW5lIF9fb3B0aW9uX2lzX2VuZCBfb3B0aW9uX2lzX2VuZAorIyBlbmRpZgorCisjIGlmbmRlZiBBUkdQX0VJCisjICBkZWZpbmUgQVJHUF9FSSBfX2V4dGVybl9pbmxpbmUKKyMgZW5kaWYKKworQVJHUF9FSSB2b2lkCitfX2FyZ3BfdXNhZ2UgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKl9fc3RhdGUpCit7CisgIF9fYXJncF9zdGF0ZV9oZWxwIChfX3N0YXRlLCBzdGRlcnIsIEFSR1BfSEVMUF9TVERfVVNBR0UpOworfQorCitBUkdQX0VJIGludAorX19OVEggKF9fb3B0aW9uX2lzX3Nob3J0IChfX2NvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqX19vcHQpKQoreworICBpZiAoX19vcHQtPmZsYWdzICYgT1BUSU9OX0RPQykKKyAgICByZXR1cm4gMDsKKyAgZWxzZQorICAgIHsKKyAgICAgIGludCBfX2tleSA9IF9fb3B0LT5rZXk7CisgICAgICByZXR1cm4gX19rZXkgPiAwICYmIF9fa2V5IDw9IFVDSEFSX01BWCAmJiBpc3ByaW50IChfX2tleSk7CisgICAgfQorfQorCitBUkdQX0VJIGludAorX19OVEggKF9fb3B0aW9uX2lzX2VuZCAoX19jb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKl9fb3B0KSkKK3sKKyAgcmV0dXJuICFfX29wdC0+a2V5ICYmICFfX29wdC0+bmFtZSAmJiAhX19vcHQtPmRvYyAmJiAhX19vcHQtPmdyb3VwOworfQorCisjIGlmICFfTElCQworIyAgdW5kZWYgX19hcmdwX3VzYWdlCisjICB1bmRlZiBfX2FyZ3Bfc3RhdGVfaGVscAorIyAgdW5kZWYgX19vcHRpb25faXNfc2hvcnQKKyMgIHVuZGVmIF9fb3B0aW9uX2lzX2VuZAorIyBlbmRpZgorI2VuZGlmIC8qIFVzZSBleHRlcm4gaW5saW5lcy4gICovCisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogYXJncC5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXJnei5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FyZ3ouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTQxZDk5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FyZ3ouaApAQCAtMCwwICsxLDE4NyBAQAorLyogUm91dGluZXMgZm9yIGRlYWxpbmcgd2l0aCAnXDAnIHNlcGFyYXRlZCBhcmcgdmVjdG9ycy4KKyAgIENvcHlyaWdodCAoQykgMTk5NSw5Niw5Nyw5OCw5OSwyMDAwLDIwMDQsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfQVJHWl9ICisjZGVmaW5lIF9BUkdaX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworI2RlZmluZSBfX25lZWRfZXJyb3JfdAorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CQkvKiBOZWVkIHNpemVfdCwgYW5kIHN0cmNociBpcyBjYWxsZWQgYmVsb3cuICAqLworCisjaWZuZGVmIF9fY29uc3QKKyMgZGVmaW5lIF9fY29uc3QgY29uc3QKKyNlbmRpZgorCisjaWZuZGVmIF9fZXJyb3JfdF9kZWZpbmVkCit0eXBlZGVmIGludCBlcnJvcl90OworI2VuZGlmCisKKworX19CRUdJTl9ERUNMUworCisvKiBNYWtlIGEgJ1wwJyBzZXBhcmF0ZWQgYXJnIHZlY3RvciBmcm9tIGEgdW5peCBhcmd2IHZlY3RvciwgcmV0dXJuaW5nIGl0IGluCisgICBBUkdaLCBhbmQgdGhlIHRvdGFsIGxlbmd0aCBpbiBMRU4uICBJZiBhIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yIG9jY3VycywKKyAgIEVOT01FTSBpcyByZXR1cm5lZCwgb3RoZXJ3aXNlIDAuICBUaGUgcmVzdWx0IGNhbiBiZSBkZXN0cm95ZWQgdXNpbmcgZnJlZS4gKi8KK2V4dGVybiBlcnJvcl90IF9fYXJnel9jcmVhdGUgKGNoYXIgKl9fY29uc3QgX19hcmd2W10sIGNoYXIgKipfX3Jlc3RyaWN0IF9fYXJneiwKKwkJCSAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX2xlbikgX19USFJPVzsKK2V4dGVybiBlcnJvcl90IGFyZ3pfY3JlYXRlIChjaGFyICpfX2NvbnN0IF9fYXJndltdLCBjaGFyICoqX19yZXN0cmljdCBfX2FyZ3osCisJCQkgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbGVuKSBfX1RIUk9XOworCisvKiBNYWtlIGEgJ1wwJyBzZXBhcmF0ZWQgYXJnIHZlY3RvciBmcm9tIGEgU0VQIHNlcGFyYXRlZCBsaXN0IGluCisgICBTVFJJTkcsIHJldHVybmluZyBpdCBpbiBBUkdaLCBhbmQgdGhlIHRvdGFsIGxlbmd0aCBpbiBMRU4uICBJZiBhCisgICBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvciBvY2N1cnMsIEVOT01FTSBpcyByZXR1cm5lZCwgb3RoZXJ3aXNlIDAuCisgICBUaGUgcmVzdWx0IGNhbiBiZSBkZXN0cm95ZWQgdXNpbmcgZnJlZS4gICovCitleHRlcm4gZXJyb3JfdCBfX2FyZ3pfY3JlYXRlX3NlcCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RyaW5nLAorCQkJCSAgaW50IF9fc2VwLCBjaGFyICoqX19yZXN0cmljdCBfX2FyZ3osCisJCQkJICBzaXplX3QgKl9fcmVzdHJpY3QgX19sZW4pIF9fVEhST1c7CitleHRlcm4gZXJyb3JfdCBhcmd6X2NyZWF0ZV9zZXAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3N0cmluZywKKwkJCQlpbnQgX19zZXAsIGNoYXIgKipfX3Jlc3RyaWN0IF9fYXJneiwKKwkJCQlzaXplX3QgKl9fcmVzdHJpY3QgX19sZW4pIF9fVEhST1c7CisKKy8qIFJldHVybnMgdGhlIG51bWJlciBvZiBzdHJpbmdzIGluIEFSR1ouICAqLworZXh0ZXJuIHNpemVfdCBfX2FyZ3pfY291bnQgKF9fY29uc3QgY2hhciAqX19hcmd6LCBzaXplX3QgX19sZW4pCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfcHVyZV9fOworZXh0ZXJuIHNpemVfdCBhcmd6X2NvdW50IChfX2NvbnN0IGNoYXIgKl9fYXJneiwgc2l6ZV90IF9fbGVuKQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX3B1cmVfXzsKKworLyogUHV0cyBwb2ludGVycyB0byBlYWNoIHN0cmluZyBpbiBBUkdaIGludG8gQVJHViwgd2hpY2ggbXVzdCBiZSBsYXJnZSBlbm91Z2gKKyAgIHRvIGhvbGQgdGhlbSBhbGwuICAqLworZXh0ZXJuIHZvaWQgX19hcmd6X2V4dHJhY3QgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2FyZ3osIHNpemVfdCBfX2xlbiwKKwkJCSAgICBjaGFyICoqX19yZXN0cmljdCBfX2FyZ3YpIF9fVEhST1c7CitleHRlcm4gdm9pZCBhcmd6X2V4dHJhY3QgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2FyZ3osIHNpemVfdCBfX2xlbiwKKwkJCSAgY2hhciAqKl9fcmVzdHJpY3QgX19hcmd2KSBfX1RIUk9XOworCisvKiBNYWtlICdcMCcgc2VwYXJhdGVkIGFyZyB2ZWN0b3IgQVJHWiBwcmludGFibGUgYnkgY29udmVydGluZyBhbGwgdGhlICdcMCdzCisgICBleGNlcHQgdGhlIGxhc3QgaW50byB0aGUgY2hhcmFjdGVyIFNFUC4gICovCitleHRlcm4gdm9pZCBfX2FyZ3pfc3RyaW5naWZ5IChjaGFyICpfX2FyZ3osIHNpemVfdCBfX2xlbiwgaW50IF9fc2VwKSBfX1RIUk9XOworZXh0ZXJuIHZvaWQgYXJnel9zdHJpbmdpZnkgKGNoYXIgKl9fYXJneiwgc2l6ZV90IF9fbGVuLCBpbnQgX19zZXApIF9fVEhST1c7CisKKy8qIEFwcGVuZCBCVUYsIG9mIGxlbmd0aCBCVUZfTEVOIHRvIHRoZSBhcmd6IHZlY3RvciBpbiBBUkdaICYgQVJHWl9MRU4uICAqLworZXh0ZXJuIGVycm9yX3QgX19hcmd6X2FwcGVuZCAoY2hhciAqKl9fcmVzdHJpY3QgX19hcmd6LAorCQkJICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fYXJnel9sZW4sCisJCQkgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfYnVmX2xlbikKKyAgICAgX19USFJPVzsKK2V4dGVybiBlcnJvcl90IGFyZ3pfYXBwZW5kIChjaGFyICoqX19yZXN0cmljdCBfX2FyZ3osCisJCQkgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fYXJnel9sZW4sCisJCQkgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZfbGVuKQorICAgICBfX1RIUk9XOworCisvKiBBcHBlbmQgU1RSIHRvIHRoZSBhcmd6IHZlY3RvciBpbiBBUkdaICYgQVJHWl9MRU4uICAqLworZXh0ZXJuIGVycm9yX3QgX19hcmd6X2FkZCAoY2hhciAqKl9fcmVzdHJpY3QgX19hcmd6LAorCQkJICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fYXJnel9sZW4sCisJCQkgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zdHIpIF9fVEhST1c7CitleHRlcm4gZXJyb3JfdCBhcmd6X2FkZCAoY2hhciAqKl9fcmVzdHJpY3QgX19hcmd6LAorCQkJIHNpemVfdCAqX19yZXN0cmljdCBfX2FyZ3pfbGVuLAorCQkJIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3N0cikgX19USFJPVzsKKworLyogQXBwZW5kIFNFUCBzZXBhcmF0ZWQgbGlzdCBpbiBTVFJJTkcgdG8gdGhlIGFyZ3ogdmVjdG9yIGluIEFSR1ogJgorICAgQVJHWl9MRU4uICAqLworZXh0ZXJuIGVycm9yX3QgX19hcmd6X2FkZF9zZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9fYXJneiwKKwkJCSAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19hcmd6X2xlbiwKKwkJCSAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zdHJpbmcsIGludCBfX2RlbGltKQorICAgICBfX1RIUk9XOworZXh0ZXJuIGVycm9yX3QgYXJnel9hZGRfc2VwIChjaGFyICoqX19yZXN0cmljdCBfX2FyZ3osCisJCQkgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX2FyZ3pfbGVuLAorCQkJICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zdHJpbmcsIGludCBfX2RlbGltKQorICAgICBfX1RIUk9XOworCisvKiBEZWxldGUgRU5UUlkgZnJvbSBBUkdaICYgQVJHWl9MRU4sIGlmIGl0IGFwcGVhcnMgdGhlcmUuICAqLworZXh0ZXJuIHZvaWQgX19hcmd6X2RlbGV0ZSAoY2hhciAqKl9fcmVzdHJpY3QgX19hcmd6LAorCQkJICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fYXJnel9sZW4sCisJCQkgICBjaGFyICpfX3Jlc3RyaWN0IF9fZW50cnkpIF9fVEhST1c7CitleHRlcm4gdm9pZCBhcmd6X2RlbGV0ZSAoY2hhciAqKl9fcmVzdHJpY3QgX19hcmd6LAorCQkJIHNpemVfdCAqX19yZXN0cmljdCBfX2FyZ3pfbGVuLAorCQkJIGNoYXIgKl9fcmVzdHJpY3QgX19lbnRyeSkgX19USFJPVzsKKworLyogSW5zZXJ0IEVOVFJZIGludG8gQVJHWiAmIEFSR1pfTEVOIGJlZm9yZSBCRUZPUkUsIHdoaWNoIHNob3VsZCBiZSBhbgorICAgZXhpc3RpbmcgZW50cnkgaW4gQVJHWjsgaWYgQkVGT1JFIGlzIE5VTEwsIEVOVFJZIGlzIGFwcGVuZGVkIHRvIHRoZSBlbmQuCisgICBTaW5jZSBBUkdaJ3MgZmlyc3QgZW50cnkgaXMgdGhlIHNhbWUgYXMgQVJHWiwgYXJnel9pbnNlcnQgKEFSR1osIEFSR1pfTEVOLAorICAgQVJHWiwgRU5UUlkpIHdpbGwgaW5zZXJ0IEVOVFJZIGF0IHRoZSBiZWdpbm5pbmcgb2YgQVJHWi4gIElmIEJFRk9SRSBpcyBub3QKKyAgIGluIEFSR1osIEVJTlZBTCBpcyByZXR1cm5lZCwgZWxzZSBpZiBtZW1vcnkgY2FuJ3QgYmUgYWxsb2NhdGVkIGZvciB0aGUgbmV3CisgICBBUkdaLCBFTk9NRU0gaXMgcmV0dXJuZWQsIGVsc2UgMC4gICovCitleHRlcm4gZXJyb3JfdCBfX2FyZ3pfaW5zZXJ0IChjaGFyICoqX19yZXN0cmljdCBfX2FyZ3osCisJCQkgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19hcmd6X2xlbiwKKwkJCSAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19iZWZvcmUsCisJCQkgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19lbnRyeSkgX19USFJPVzsKK2V4dGVybiBlcnJvcl90IGFyZ3pfaW5zZXJ0IChjaGFyICoqX19yZXN0cmljdCBfX2FyZ3osCisJCQkgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fYXJnel9sZW4sCisJCQkgICAgY2hhciAqX19yZXN0cmljdCBfX2JlZm9yZSwKKwkJCSAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19lbnRyeSkgX19USFJPVzsKKworLyogUmVwbGFjZSBhbnkgb2NjdXJyZW5jZXMgb2YgdGhlIHN0cmluZyBTVFIgaW4gQVJHWiB3aXRoIFdJVEgsIHJlYWxsb2NhdGluZworICAgQVJHWiBhcyBuZWNlc3NhcnkuICBJZiBSRVBMQUNFX0NPVU5UIGlzIG5vbi16ZXJvLCAqUkVQTEFDRV9DT1VOVCB3aWxsIGJlCisgICBpbmNyZW1lbnRlZCBieSBudW1iZXIgb2YgcmVwbGFjZW1lbnRzIHBlcmZvcm1lZC4gICovCitleHRlcm4gZXJyb3JfdCBfX2FyZ3pfcmVwbGFjZSAoY2hhciAqKl9fcmVzdHJpY3QgX19hcmd6LAorCQkJICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX2FyZ3pfbGVuLAorCQkJICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3N0ciwKKwkJCSAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX193aXRoLAorCQkJICAgICAgIHVuc2lnbmVkIGludCAqX19yZXN0cmljdCBfX3JlcGxhY2VfY291bnQpOworZXh0ZXJuIGVycm9yX3QgYXJnel9yZXBsYWNlIChjaGFyICoqX19yZXN0cmljdCBfX2FyZ3osCisJCQkgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX2FyZ3pfbGVuLAorCQkJICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zdHIsCisJCQkgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3dpdGgsCisJCQkgICAgIHVuc2lnbmVkIGludCAqX19yZXN0cmljdCBfX3JlcGxhY2VfY291bnQpOworDAorLyogUmV0dXJucyB0aGUgbmV4dCBlbnRyeSBpbiBBUkdaICYgQVJHWl9MRU4gYWZ0ZXIgRU5UUlksIG9yIE5VTEwgaWYgdGhlcmUKKyAgIGFyZSBubyBtb3JlLiAgSWYgZW50cnkgaXMgTlVMTCwgdGhlbiB0aGUgZmlyc3QgZW50cnkgaXMgcmV0dXJuZWQuICBUaGlzCisgICBiZWhhdmlvciBhbGxvd3MgdHdvIGNvbnZlbmllbnQgaXRlcmF0aW9uIHN0eWxlczoKKworICAgIGNoYXIgKmVudHJ5ID0gMDsKKyAgICB3aGlsZSAoKGVudHJ5ID0gYXJnel9uZXh0IChhcmd6LCBhcmd6X2xlbiwgZW50cnkpKSkKKyAgICAgIC4uLjsKKworICAgb3IKKworICAgIGNoYXIgKmVudHJ5OworICAgIGZvciAoZW50cnkgPSBhcmd6OyBlbnRyeTsgZW50cnkgPSBhcmd6X25leHQgKGFyZ3osIGFyZ3pfbGVuLCBlbnRyeSkpCisgICAgICAuLi47CisqLworZXh0ZXJuIGNoYXIgKl9fYXJnel9uZXh0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19hcmd6LCBzaXplX3QgX19hcmd6X2xlbiwKKwkJCSAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZW50cnkpIF9fVEhST1c7CitleHRlcm4gY2hhciAqYXJnel9uZXh0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19hcmd6LCBzaXplX3QgX19hcmd6X2xlbiwKKwkJCV9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2VudHJ5KSBfX1RIUk9XOworCisjaWZkZWYgX19VU0VfRVhURVJOX0lOTElORVMKK19fZXh0ZXJuX2lubGluZSBjaGFyICoKK19fTlRIIChfX2FyZ3pfbmV4dCAoX19jb25zdCBjaGFyICpfX2FyZ3osIHNpemVfdCBfX2FyZ3pfbGVuLAorCQkgICAgX19jb25zdCBjaGFyICpfX2VudHJ5KSkKK3sKKyAgaWYgKF9fZW50cnkpCisgICAgeworICAgICAgaWYgKF9fZW50cnkgPCBfX2FyZ3ogKyBfX2FyZ3pfbGVuKQorCV9fZW50cnkgPSBzdHJjaHIgKF9fZW50cnksICdcMCcpICsgMTsKKworICAgICAgcmV0dXJuIF9fZW50cnkgPj0gX19hcmd6ICsgX19hcmd6X2xlbiA/IChjaGFyICopIE5VTEwgOiAoY2hhciAqKSBfX2VudHJ5OworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiBfX2FyZ3pfbGVuID4gMCA/IChjaGFyICopIF9fYXJneiA6IDA7Cit9CitfX2V4dGVybl9pbmxpbmUgY2hhciAqCitfX05USCAoYXJnel9uZXh0IChfX2NvbnN0IGNoYXIgKl9fYXJneiwgc2l6ZV90IF9fYXJnel9sZW4sCisJCSAgX19jb25zdCBjaGFyICpfX2VudHJ5KSkKK3sKKyAgcmV0dXJuIF9fYXJnel9uZXh0IChfX2FyZ3osIF9fYXJnel9sZW4sIF9fZW50cnkpOworfQorI2VuZGlmIC8qIFVzZSBleHRlcm4gaW5saW5lcy4gICovCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBhcmd6LmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hcnBhL2Z0cC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FycGEvZnRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTViMzQwZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hcnBhL2Z0cC5oCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTg5LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKWZ0cC5oCTguMSAoQmVya2VsZXkpIDYvMi85MworICovCisKKyNpZm5kZWYgX0FSUEFfRlRQX0gKKyNkZWZpbmUJX0FSUEFfRlRQX0ggMQorCisvKiBEZWZpbml0aW9ucyBmb3IgRlRQOyBzZWUgUkZDLTc2NS4gKi8KKworLyoKKyAqIFJlcGx5IGNvZGVzLgorICovCisjZGVmaW5lIFBSRUxJTQkJMQkvKiBwb3NpdGl2ZSBwcmVsaW1pbmFyeSAqLworI2RlZmluZSBDT01QTEVURQkyCS8qIHBvc2l0aXZlIGNvbXBsZXRpb24gKi8KKyNkZWZpbmUgQ09OVElOVUUJMwkvKiBwb3NpdGl2ZSBpbnRlcm1lZGlhdGUgKi8KKyNkZWZpbmUgVFJBTlNJRU5UCTQJLyogdHJhbnNpZW50IG5lZ2F0aXZlIGNvbXBsZXRpb24gKi8KKyNkZWZpbmUgRVJST1IJCTUJLyogcGVybWFuZW50IG5lZ2F0aXZlIGNvbXBsZXRpb24gKi8KKworLyoKKyAqIFR5cGUgY29kZXMKKyAqLworI2RlZmluZQlUWVBFX0EJCTEJLyogQVNDSUkgKi8KKyNkZWZpbmUJVFlQRV9FCQkyCS8qIEVCQ0RJQyAqLworI2RlZmluZQlUWVBFX0kJCTMJLyogaW1hZ2UgKi8KKyNkZWZpbmUJVFlQRV9MCQk0CS8qIGxvY2FsIGJ5dGUgc2l6ZSAqLworCisjaWZkZWYgRlRQX05BTUVTCitjaGFyICp0eXBlbmFtZXNbXSA9ICB7IjAiLCAiQVNDSUkiLCAiRUJDRElDIiwgIkltYWdlIiwgIkxvY2FsIiB9OworI2VuZGlmCisKKy8qCisgKiBGb3JtIGNvZGVzCisgKi8KKyNkZWZpbmUJRk9STV9OCQkxCS8qIG5vbi1wcmludCAqLworI2RlZmluZQlGT1JNX1QJCTIJLyogdGVsbmV0IGZvcm1hdCBlZmZlY3RvcnMgKi8KKyNkZWZpbmUJRk9STV9DCQkzCS8qIGNhcnJpYWdlIGNvbnRyb2wgKEFTQSkgKi8KKyNpZmRlZiBGVFBfTkFNRVMKK2NoYXIgKmZvcm1uYW1lc1tdID0gIHsiMCIsICJOb25wcmludCIsICJUZWxuZXQiLCAiQ2FycmlhZ2UtY29udHJvbCIgfTsKKyNlbmRpZgorCisvKgorICogU3RydWN0dXJlIGNvZGVzCisgKi8KKyNkZWZpbmUJU1RSVV9GCQkxCS8qIGZpbGUgKG5vIHJlY29yZCBzdHJ1Y3R1cmUpICovCisjZGVmaW5lCVNUUlVfUgkJMgkvKiByZWNvcmQgc3RydWN0dXJlICovCisjZGVmaW5lCVNUUlVfUAkJMwkvKiBwYWdlIHN0cnVjdHVyZSAqLworI2lmZGVmIEZUUF9OQU1FUworY2hhciAqc3RydW5hbWVzW10gPSAgeyIwIiwgIkZpbGUiLCAiUmVjb3JkIiwgIlBhZ2UiIH07CisjZW5kaWYKKworLyoKKyAqIE1vZGUgdHlwZXMKKyAqLworI2RlZmluZQlNT0RFX1MJCTEJLyogc3RyZWFtICovCisjZGVmaW5lCU1PREVfQgkJMgkvKiBibG9jayAqLworI2RlZmluZQlNT0RFX0MJCTMJLyogY29tcHJlc3NlZCAqLworI2lmZGVmIEZUUF9OQU1FUworY2hhciAqbW9kZW5hbWVzW10gPSAgeyIwIiwgIlN0cmVhbSIsICJCbG9jayIsICJDb21wcmVzc2VkIiB9OworI2VuZGlmCisKKy8qCisgKiBSZWNvcmQgVG9rZW5zCisgKi8KKyNkZWZpbmUJUkVDX0VTQwkJJ1wzNzcnCS8qIFJlY29yZC1tb2RlIEVzY2FwZSAqLworI2RlZmluZQlSRUNfRU9SCQknXDAwMScJLyogUmVjb3JkLW1vZGUgRW5kLW9mLVJlY29yZCAqLworI2RlZmluZSBSRUNfRU9GCQknXDAwMicJLyogUmVjb3JkLW1vZGUgRW5kLW9mLUZpbGUgKi8KKworLyoKKyAqIEJsb2NrIEhlYWRlcgorICovCisjZGVmaW5lCUJMS19FT1IJCTB4ODAJLyogQmxvY2sgaXMgRW5kLW9mLVJlY29yZCAqLworI2RlZmluZQlCTEtfRU9GCQkweDQwCS8qIEJsb2NrIGlzIEVuZC1vZi1GaWxlICovCisjZGVmaW5lIEJMS19FUlJPUlMJMHgyMAkvKiBCbG9jayBpcyBzdXNwZWN0ZWQgb2YgY29udGFpbmluZyBlcnJvcnMgKi8KKyNkZWZpbmUJQkxLX1JFU1RBUlQJMHgxMAkvKiBCbG9jayBpcyBSZXN0YXJ0IE1hcmtlciAqLworCisjZGVmaW5lCUJMS19CWVRFQ09VTlQJMgkvKiBCeXRlcyBpbiB0aGlzIGJsb2NrICovCisKKyNlbmRpZiAvKiBhcnBhL2Z0cC5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXJwYS9pbmV0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXJwYS9pbmV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIxMTU0ZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hcnBhL2luZXQuaApAQCAtMCwwICsxLDEwNiBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9BUlBBX0lORVRfSAorI2RlZmluZQlfQVJQQV9JTkVUX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CQkvKiBUbyBkZWZpbmUgYHN0cnVjdCBpbl9hZGRyJy4gICovCisKKy8qIFR5cGUgZm9yIGxlbmd0aCBhcmd1bWVudHMgaW4gc29ja2V0IGNhbGxzLiAgKi8KKyNpZm5kZWYgX19zb2NrbGVuX3RfZGVmaW5lZAordHlwZWRlZiBfX3NvY2tsZW5fdCBzb2NrbGVuX3Q7CisjIGRlZmluZSBfX3NvY2tsZW5fdF9kZWZpbmVkCisjZW5kaWYKKworX19CRUdJTl9ERUNMUworCisvKiBDb252ZXJ0IEludGVybmV0IGhvc3QgYWRkcmVzcyBmcm9tIG51bWJlcnMtYW5kLWRvdHMgbm90YXRpb24gaW4gQ1AKKyAgIGludG8gYmluYXJ5IGRhdGEgaW4gbmV0d29yayBieXRlIG9yZGVyLiAgKi8KK2V4dGVybiBpbl9hZGRyX3QgaW5ldF9hZGRyIChfX2NvbnN0IGNoYXIgKl9fY3ApIF9fVEhST1c7CisKKy8qIFJldHVybiB0aGUgbG9jYWwgaG9zdCBhZGRyZXNzIHBhcnQgb2YgdGhlIEludGVybmV0IGFkZHJlc3MgaW4gSU4uICAqLworZXh0ZXJuIGluX2FkZHJfdCBpbmV0X2xuYW9mIChzdHJ1Y3QgaW5fYWRkciBfX2luKSBfX1RIUk9XOworCisvKiBNYWtlIEludGVybmV0IGhvc3QgYWRkcmVzcyBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgYnkgY29tYmluaW5nIHRoZQorICAgbmV0d29yayBudW1iZXIgTkVUIHdpdGggdGhlIGxvY2FsIGFkZHJlc3MgSE9TVC4gICovCitleHRlcm4gc3RydWN0IGluX2FkZHIgaW5ldF9tYWtlYWRkciAoaW5fYWRkcl90IF9fbmV0LCBpbl9hZGRyX3QgX19ob3N0KQorICAgICBfX1RIUk9XOworCisvKiBSZXR1cm4gbmV0d29yayBudW1iZXIgcGFydCBvZiB0aGUgSW50ZXJuZXQgYWRkcmVzcyBJTi4gICovCitleHRlcm4gaW5fYWRkcl90IGluZXRfbmV0b2YgKHN0cnVjdCBpbl9hZGRyIF9faW4pIF9fVEhST1c7CisKKy8qIEV4dHJhY3QgdGhlIG5ldHdvcmsgbnVtYmVyIGluIG5ldHdvcmsgYnl0ZSBvcmRlciBmcm9tIHRoZSBhZGRyZXNzCisgICBpbiBudW1iZXJzLWFuZC1kb3RzIG5hdGF0aW9uIHN0YXJ0aW5nIGF0IENQLiAgKi8KK2V4dGVybiBpbl9hZGRyX3QgaW5ldF9uZXR3b3JrIChfX2NvbnN0IGNoYXIgKl9fY3ApIF9fVEhST1c7CisKKy8qIENvbnZlcnQgSW50ZXJuZXQgbnVtYmVyIGluIElOIHRvIEFTQ0lJIHJlcHJlc2VudGF0aW9uLiAgVGhlIHJldHVybiB2YWx1ZQorICAgaXMgYSBwb2ludGVyIHRvIGFuIGludGVybmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHN0cmluZy4gICovCitleHRlcm4gY2hhciAqaW5ldF9udG9hIChzdHJ1Y3QgaW5fYWRkciBfX2luKSBfX1RIUk9XOworCisvKiBDb252ZXJ0IGZyb20gcHJlc2VudGF0aW9uIGZvcm1hdCBvZiBhbiBJbnRlcm5ldCBudW1iZXIgaW4gYnVmZmVyCisgICBzdGFydGluZyBhdCBDUCB0byB0aGUgYmluYXJ5IG5ldHdvcmsgZm9ybWF0IGFuZCBzdG9yZSByZXN1bHQgZm9yCisgICBpbnRlcmZhY2UgdHlwZSBBRiBpbiBidWZmZXIgc3RhcnRpbmcgYXQgQlVGLiAgKi8KK2V4dGVybiBpbnQgaW5ldF9wdG9uIChpbnQgX19hZiwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fY3AsCisJCSAgICAgIHZvaWQgKl9fcmVzdHJpY3QgX19idWYpIF9fVEhST1c7CisKKy8qIENvbnZlcnQgYSBJbnRlcm5ldCBhZGRyZXNzIGluIGJpbmFyeSBuZXR3b3JrIGZvcm1hdCBmb3IgaW50ZXJmYWNlCisgICB0eXBlIEFGIGluIGJ1ZmZlciBzdGFydGluZyBhdCBDUCB0byBwcmVzZW50YXRpb24gZm9ybSBhbmQgcGxhY2UKKyAgIHJlc3VsdCBpbiBidWZmZXIgb2YgbGVuZ3RoIExFTiBhc3RhcnRpbmcgYXQgQlVGLiAgKi8KK2V4dGVybiBfX2NvbnN0IGNoYXIgKmluZXRfbnRvcCAoaW50IF9fYWYsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX2NwLAorCQkJCWNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNvY2tsZW5fdCBfX2xlbikKKyAgICAgX19USFJPVzsKKworCisvKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgbm90IHBhcnQgb2YgWE5TIDUuMi4gICovCisjaWZkZWYgX19VU0VfTUlTQworLyogQ29udmVydCBJbnRlcm5ldCBob3N0IGFkZHJlc3MgZnJvbSBudW1iZXJzLWFuZC1kb3RzIG5vdGF0aW9uIGluIENQCisgICBpbnRvIGJpbmFyeSBkYXRhIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZSBzdHJ1Y3R1cmUgSU5QLiAgKi8KK2V4dGVybiBpbnQgaW5ldF9hdG9uIChfX2NvbnN0IGNoYXIgKl9fY3AsIHN0cnVjdCBpbl9hZGRyICpfX2lucCkgX19USFJPVzsKKworLyogRm9ybWF0IGEgbmV0d29yayBudW1iZXIgTkVUIGludG8gcHJlc2VudGF0aW9uIGZvcm1hdCBhbmQgcGxhY2UgcmVzdWx0CisgICBpbiBidWZmZXIgc3RhcnRpbmcgYXQgQlVGIHdpdGggbGVuZ3RoIG9mIExFTiBieXRlcy4gICovCitleHRlcm4gY2hhciAqaW5ldF9uZXRhIChpbl9hZGRyX3QgX19uZXQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19sZW4pIF9fVEhST1c7CisKKy8qIENvbnZlcnQgbmV0d29yayBudW1iZXIgZm9yIGludGVyZmFjZSB0eXBlIEFGIGluIGJ1ZmZlciBzdGFydGluZyBhdAorICAgQ1AgdG8gcHJlc2VudGF0aW9uIGZvcm1hdC4gIFRoZSByZXN1bHQgd2lsbCBzcGVjaWZpeSBCSVRTIGJpdHMgb2YKKyAgIHRoZSBudW1iZXIuICAqLworZXh0ZXJuIGNoYXIgKmluZXRfbmV0X250b3AgKGludCBfX2FmLCBfX2NvbnN0IHZvaWQgKl9fY3AsIGludCBfX2JpdHMsCisJCQkgICAgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikgX19USFJPVzsKKworLyogQ29udmVydCBuZXR3b3JrIG51bWJlciBmb3IgaW50ZXJmYWNlIHR5cGUgQUYgZnJvbSBwcmVzZW50YXRpb24gaW4KKyAgIGJ1ZmZlciBzdGFydGluZyBhdCBDUCB0byBuZXR3b3JrIGZvcm1hdCBhbmQgc3RvcmUgcmVzdWx0IGludAorICAgYnVmZmVyIHN0YXJ0aW5nIGF0IEJVRiBvZiBzaXplIExFTi4gICovCitleHRlcm4gaW50IGluZXRfbmV0X3B0b24gKGludCBfX2FmLCBfX2NvbnN0IGNoYXIgKl9fY3AsCisJCQkgIHZvaWQgKl9fYnVmLCBzaXplX3QgX19sZW4pIF9fVEhST1c7CisKKy8qIENvbnZlcnQgQVNDSUkgcmVwcmVzZW50YXRpb24gaW4gaGV4YWRlY2ltYWwgZm9ybSBvZiB0aGUgSW50ZXJuZXQKKyAgIGFkZHJlc3MgdG8gYmluYXJ5IGZvcm0gYW5kIHBsYWNlIHJlc3VsdCBpbiBidWZmZXIgb2YgbGVuZ3RoIExFTgorICAgc3RhcnRpbmcgYXQgQlVGLiAgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgaW5ldF9uc2FwX2FkZHIgKF9fY29uc3QgY2hhciAqX19jcCwKKwkJCQkgICAgdW5zaWduZWQgY2hhciAqX19idWYsIGludCBfX2xlbikgX19USFJPVzsKKworLyogQ29udmVydCBpbnRlcm5ldCBhZGRyZXNzIGluIGJpbmFyeSBmb3JtIGluIExFTiBieXRlcyBzdGFydGluZyBhdCBDUAorICAgYSBwcmVzZW50YXRpb24gZm9ybSBhbmQgcGxhY2UgcmVzdWx0IGluIEJVRi4gICovCitleHRlcm4gY2hhciAqaW5ldF9uc2FwX250b2EgKGludCBfX2xlbiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX2NwLAorCQkJICAgICBjaGFyICpfX2J1ZikgX19USFJPVzsKKyNlbmRpZgorCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogYXJwYS9pbmV0LmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hcnBhL25hbWVzZXIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hcnBhL25hbWVzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTc5YjNkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FycGEvbmFtZXNlci5oCkBAIC0wLDAgKzEsNTM1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTg5LCAxOTkzCisgKiAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElOVEVSTkVUIFNPRlRXQVJFIENPTlNPUlRJVU0gRElTQ0xBSU1TCisgKiBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIElOVEVSTkVUIFNPRlRXQVJFCisgKiBDT05TT1JUSVVNIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgorICogUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKKyAqIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUworICogU09GVFdBUkUuCisgKi8KKworLyoKKyAqCSRCSU5ESWQ6IG5hbWVzZXIuaCx2IDguMzcgMjAwMC8wMy8zMCAyMToxNjo0OSB2aXhpZSBFeHAgJAorICovCisKKyNpZm5kZWYgX0FSUEFfTkFNRVNFUl9IXworI2RlZmluZSBfQVJQQV9OQU1FU0VSX0hfCisKKy8qISBcZmlsZSAqLworCisjZGVmaW5lIEJJTkRfNF9DT01QQVQKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2lmICghZGVmaW5lZChCU0QpKSB8fCAoQlNEIDwgMTk5MzA2KQorIyBpbmNsdWRlIDxzeXMvYml0eXBlcy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworLyolCisgKiBSZXZpc2lvbiBpbmZvcm1hdGlvbi4gIFRoaXMgaXMgdGhlIHJlbGVhc2UgZGF0ZSBpbiBZWVlZTU1ERCBmb3JtYXQuCisgKiBJdCBjYW4gY2hhbmdlIGV2ZXJ5IGRheSBzbyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gd2l0aCBpdCBpcyB1c2UgaXQKKyAqIGluIHByZXByb2Nlc3NvciBjb21tYW5kcyBzdWNoIGFzICIjaWYgKF9fTkFNRVNFUiA+IDE5OTMxMTA0KSIuICBEbyBub3QKKyAqIGNvbXBhcmUgZm9yIGVxdWFsaXR5OyByYXRoZXIsIHVzZSBpdCB0byBkZXRlcm1pbmUgd2hldGhlciB5b3VyIGxpYmJpbmQuYQorICogY29udGFpbnMgYSBuZXcgZW5vdWdoIGxpYi9uYW1lc2VyLyB0byBzdXBwb3J0IHRoZSBmZWF0dXJlIHlvdSBuZWVkLgorICovCisKKyNkZWZpbmUgX19OQU1FU0VSCTE5OTkxMDA2CS8qJTwgTmV3IGludGVyZmFjZSB2ZXJzaW9uIHN0YW1wLiAqLworLyoKKyAqIERlZmluZSBjb25zdGFudHMgYmFzZWQgb24gUkZDIDg4MywgUkZDIDEwMzQsIFJGQyAxMDM1CisgKi8KKyNkZWZpbmUgTlNfUEFDS0VUU1oJNTEyCS8qJTwgZGVmYXVsdCBVRFAgcGFja2V0IHNpemUgKi8KKyNkZWZpbmUgTlNfTUFYRE5BTUUJMTAyNQkvKiU8IG1heGltdW0gZG9tYWluIG5hbWUgKi8KKyNkZWZpbmUgTlNfTUFYTVNHCTY1NTM1CS8qJTwgbWF4aW11bSBtZXNzYWdlIHNpemUgKi8KKyNkZWZpbmUgTlNfTUFYQ0ROQU1FCTI1NQkvKiU8IG1heGltdW0gY29tcHJlc3NlZCBkb21haW4gbmFtZSAqLworI2RlZmluZSBOU19NQVhMQUJFTAk2MwkvKiU8IG1heGltdW0gbGVuZ3RoIG9mIGRvbWFpbiBsYWJlbCAqLworI2RlZmluZSBOU19IRklYRURTWgkxMgkvKiU8ICMvYnl0ZXMgb2YgZml4ZWQgZGF0YSBpbiBoZWFkZXIgKi8KKyNkZWZpbmUgTlNfUUZJWEVEU1oJNAkvKiU8ICMvYnl0ZXMgb2YgZml4ZWQgZGF0YSBpbiBxdWVyeSAqLworI2RlZmluZSBOU19SUkZJWEVEU1oJMTAJLyolPCAjL2J5dGVzIG9mIGZpeGVkIGRhdGEgaW4gciByZWNvcmQgKi8KKyNkZWZpbmUgTlNfSU5UMzJTWgk0CS8qJTwgIy9ieXRlcyBvZiBkYXRhIGluIGEgdV9pbnQzMl90ICovCisjZGVmaW5lIE5TX0lOVDE2U1oJMgkvKiU8ICMvYnl0ZXMgb2YgZGF0YSBpbiBhIHVfaW50MTZfdCAqLworI2RlZmluZSBOU19JTlQ4U1oJMQkvKiU8ICMvYnl0ZXMgb2YgZGF0YSBpbiBhIHVfaW50OF90ICovCisjZGVmaW5lIE5TX0lOQUREUlNaCTQJLyolPCBJUHY0IFRfQSAqLworI2RlZmluZSBOU19JTjZBRERSU1oJMTYJLyolPCBJUHY2IFRfQUFBQSAqLworI2RlZmluZSBOU19DTVBSU0ZMR1MJMHhjMAkvKiU8IEZsYWcgYml0cyBpbmRpY2F0aW5nIG5hbWUgY29tcHJlc3Npb24uICovCisjZGVmaW5lIE5TX0RFRkFVTFRQT1JUCTUzCS8qJTwgRm9yIGJvdGggVENQIGFuZCBVRFAuICovCisvKgorICogVGhlc2UgY2FuIGJlIGV4cGFuZGVkIHdpdGggc3lub255bXMsIGp1c3Qga2VlcCBuc19wYXJzZS5jOm5zX3BhcnNlcmVjb3JkKCkKKyAqIGluIHN5bmNoIHdpdGggaXQuCisgKi8KK3R5cGVkZWYgZW51bSBfX25zX3NlY3QgeworCW5zX3NfcWQgPSAwLAkJLyolPCBRdWVyeTogUXVlc3Rpb24uICovCisJbnNfc196biA9IDAsCQkvKiU8IFVwZGF0ZTogWm9uZS4gKi8KKwluc19zX2FuID0gMSwJCS8qJTwgUXVlcnk6IEFuc3dlci4gKi8KKwluc19zX3ByID0gMSwJCS8qJTwgVXBkYXRlOiBQcmVyZXF1aXNpdGVzLiAqLworCW5zX3NfbnMgPSAyLAkJLyolPCBRdWVyeTogTmFtZSBzZXJ2ZXJzLiAqLworCW5zX3NfdWQgPSAyLAkJLyolPCBVcGRhdGU6IFVwZGF0ZS4gKi8KKwluc19zX2FyID0gMywJCS8qJTwgUXVlcnl8VXBkYXRlOiBBZGRpdGlvbmFsIHJlY29yZHMuICovCisJbnNfc19tYXggPSA0Cit9IG5zX3NlY3Q7CisKKy8qJQorICogVGhpcyBpcyBhIG1lc3NhZ2UgaGFuZGxlLiAgSXQgaXMgY2FsbGVyIGFsbG9jYXRlZCBhbmQgaGFzIG5vIGR5bmFtaWMgZGF0YS4KKyAqIFRoaXMgc3RydWN0dXJlIGlzIGludGVuZGVkIHRvIGJlIG9wYXF1ZSB0byBhbGwgYnV0IG5zX3BhcnNlLmMsIHRodXMgdGhlCisgKiBsZWFkaW5nIF8ncyBvbiB0aGUgbWVtYmVyIG5hbWVzLiAgVXNlIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMsIG5vdCB0aGUgXydzLgorICovCit0eXBlZGVmIHN0cnVjdCBfX25zX21zZyB7CisJY29uc3QgdV9jaGFyCSpfbXNnLCAqX2VvbTsKKwl1X2ludDE2X3QJX2lkLCBfZmxhZ3MsIF9jb3VudHNbbnNfc19tYXhdOworCWNvbnN0IHVfY2hhcgkqX3NlY3Rpb25zW25zX3NfbWF4XTsKKwluc19zZWN0CQlfc2VjdDsKKwlpbnQJCV9ycm51bTsKKwljb25zdCB1X2NoYXIJKl9tc2dfcHRyOworfSBuc19tc2c7CisKKy8qIFByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgLSBkbyBub3QgdXNlIGZyb20gb3V0c2lkZSBsaWJyYXJ5LiAqLworc3RydWN0IF9uc19mbGFnZGF0YSB7ICBpbnQgbWFzaywgc2hpZnQ7ICB9OworZXh0ZXJuIGNvbnN0IHN0cnVjdCBfbnNfZmxhZ2RhdGEgX25zX2ZsYWdkYXRhW107CisKKy8qIEFjY2Vzc29yIG1hY3JvcyAtIHRoaXMgaXMgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gKi8KKworI2RlZmluZSBuc19tc2dfaWQoaGFuZGxlKSAoKGhhbmRsZSkuX2lkICsgMCkKKyNkZWZpbmUgbnNfbXNnX2Jhc2UoaGFuZGxlKSAoKGhhbmRsZSkuX21zZyArIDApCisjZGVmaW5lIG5zX21zZ19lbmQoaGFuZGxlKSAoKGhhbmRsZSkuX2VvbSArIDApCisjZGVmaW5lIG5zX21zZ19zaXplKGhhbmRsZSkgKChoYW5kbGUpLl9lb20gLSAoaGFuZGxlKS5fbXNnKQorI2RlZmluZSBuc19tc2dfY291bnQoaGFuZGxlLCBzZWN0aW9uKSAoKGhhbmRsZSkuX2NvdW50c1tzZWN0aW9uXSArIDApCisKKy8qJQorICogVGhpcyBpcyBhIHBhcnNlZCByZWNvcmQuICBJdCBpcyBjYWxsZXIgYWxsb2NhdGVkIGFuZCBoYXMgbm8gZHluYW1pYyBkYXRhLgorICovCit0eXBlZGVmCXN0cnVjdCBfX25zX3JyIHsKKwljaGFyCQluYW1lW05TX01BWEROQU1FXTsKKwl1X2ludDE2X3QJdHlwZTsKKwl1X2ludDE2X3QJcnJfY2xhc3M7CisJdV9pbnQzMl90CXR0bDsKKwl1X2ludDE2X3QJcmRsZW5ndGg7CisJY29uc3QgdV9jaGFyICoJcmRhdGE7Cit9IG5zX3JyOworCisvKiBBY2Nlc3NvciBtYWNyb3MgLSB0aGlzIGlzIHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuICovCisjZGVmaW5lIG5zX3JyX25hbWUocnIpCSgoKHJyKS5uYW1lWzBdICE9ICdcMCcpID8gKHJyKS5uYW1lIDogIi4iKQorI2RlZmluZSBuc19ycl90eXBlKHJyKQkoKG5zX3R5cGUpKChycikudHlwZSArIDApKQorI2RlZmluZSBuc19ycl9jbGFzcyhycikJKChuc19jbGFzcykoKHJyKS5ycl9jbGFzcyArIDApKQorI2RlZmluZSBuc19ycl90dGwocnIpCSgocnIpLnR0bCArIDApCisjZGVmaW5lIG5zX3JyX3JkbGVuKHJyKQkoKHJyKS5yZGxlbmd0aCArIDApCisjZGVmaW5lIG5zX3JyX3JkYXRhKHJyKQkoKHJyKS5yZGF0YSArIDApCisKKy8qJQorICogVGhlc2UgZG9uJ3QgaGF2ZSB0byBiZSBpbiB0aGUgc2FtZSBvcmRlciBhcyBpbiB0aGUgcGFja2V0IGZsYWdzIHdvcmQsCisgKiBhbmQgdGhleSBjYW4gZXZlbiBvdmVybGFwIGluIHNvbWUgY2FzZXMsIGJ1dCB0aGV5IHdpbGwgbmVlZCB0byBiZSBrZXB0CisgKiBpbiBzeW5jaCB3aXRoIG5zX3BhcnNlLmM6bnNfZmxhZ2RhdGFbXS4KKyAqLwordHlwZWRlZiBlbnVtIF9fbnNfZmxhZyB7CisJbnNfZl9xciwJCS8qJTwgUXVlc3Rpb24vUmVzcG9uc2UuICovCisJbnNfZl9vcGNvZGUsCQkvKiU8IE9wZXJhdGlvbiBjb2RlLiAqLworCW5zX2ZfYWEsCQkvKiU8IEF1dGhvcml0YXRpdmUgQW5zd2VyLiAqLworCW5zX2ZfdGMsCQkvKiU8IFRydW5jYXRpb24gb2NjdXJyZWQuICovCisJbnNfZl9yZCwJCS8qJTwgUmVjdXJzaW9uIERlc2lyZWQuICovCisJbnNfZl9yYSwJCS8qJTwgUmVjdXJzaW9uIEF2YWlsYWJsZS4gKi8KKwluc19mX3osCQkJLyolPCBNQlouICovCisJbnNfZl9hZCwJCS8qJTwgQXV0aGVudGljIERhdGEgKEROU1NFQykuICovCisJbnNfZl9jZCwJCS8qJTwgQ2hlY2tpbmcgRGlzYWJsZWQgKEROU1NFQykuICovCisJbnNfZl9yY29kZSwJCS8qJTwgUmVzcG9uc2UgY29kZS4gKi8KKwluc19mX21heAorfSBuc19mbGFnOworCisvKiUKKyAqIEN1cnJlbnRseSBkZWZpbmVkIG9wY29kZXMuCisgKi8KK3R5cGVkZWYgZW51bSBfX25zX29wY29kZSB7CisJbnNfb19xdWVyeSA9IDAsCQkvKiU8IFN0YW5kYXJkIHF1ZXJ5LiAqLworCW5zX29faXF1ZXJ5ID0gMSwJLyolPCBJbnZlcnNlIHF1ZXJ5IChkZXByZWNhdGVkL3Vuc3VwcG9ydGVkKS4gKi8KKwluc19vX3N0YXR1cyA9IDIsCS8qJTwgTmFtZSBzZXJ2ZXIgc3RhdHVzIHF1ZXJ5ICh1bnN1cHBvcnRlZCkuICovCisJCQkJLyogT3Bjb2RlIDMgaXMgdW5kZWZpbmVkL3Jlc2VydmVkLiAqLworCW5zX29fbm90aWZ5ID0gNCwJLyolPCBab25lIGNoYW5nZSBub3RpZmljYXRpb24uICovCisJbnNfb191cGRhdGUgPSA1LAkvKiU8IFpvbmUgdXBkYXRlIG1lc3NhZ2UuICovCisJbnNfb19tYXggPSA2Cit9IG5zX29wY29kZTsKKworLyolCisgKiBDdXJyZW50bHkgZGVmaW5lZCByZXNwb25zZSBjb2Rlcy4KKyAqLwordHlwZWRlZgllbnVtIF9fbnNfcmNvZGUgeworCW5zX3Jfbm9lcnJvciA9IDAsCS8qJTwgTm8gZXJyb3Igb2NjdXJyZWQuICovCisJbnNfcl9mb3JtZXJyID0gMSwJLyolPCBGb3JtYXQgZXJyb3IuICovCisJbnNfcl9zZXJ2ZmFpbCA9IDIsCS8qJTwgU2VydmVyIGZhaWx1cmUuICovCisJbnNfcl9ueGRvbWFpbiA9IDMsCS8qJTwgTmFtZSBlcnJvci4gKi8KKwluc19yX25vdGltcGwgPSA0LAkvKiU8IFVuaW1wbGVtZW50ZWQuICovCisJbnNfcl9yZWZ1c2VkID0gNSwJLyolPCBPcGVyYXRpb24gcmVmdXNlZC4gKi8KKwkvKiB0aGVzZSBhcmUgZm9yIEJJTkRfVVBEQVRFICovCisJbnNfcl95eGRvbWFpbiA9IDYsCS8qJTwgTmFtZSBleGlzdHMgKi8KKwluc19yX3l4cnJzZXQgPSA3LAkvKiU8IFJSc2V0IGV4aXN0cyAqLworCW5zX3JfbnhycnNldCA9IDgsCS8qJTwgUlJzZXQgZG9lcyBub3QgZXhpc3QgKi8KKwluc19yX25vdGF1dGggPSA5LAkvKiU8IE5vdCBhdXRob3JpdGF0aXZlIGZvciB6b25lICovCisJbnNfcl9ub3R6b25lID0gMTAsCS8qJTwgWm9uZSBvZiByZWNvcmQgZGlmZmVyZW50IGZyb20gem9uZSBzZWN0aW9uICovCisJbnNfcl9tYXggPSAxMSwKKwkvKiBUaGUgZm9sbG93aW5nIGFyZSBFRE5TIGV4dGVuZGVkIHJjb2RlcyAqLworCW5zX3JfYmFkdmVycyA9IDE2LAorCS8qIFRoZSBmb2xsb3dpbmcgYXJlIFRTSUcgZXJyb3JzICovCisJbnNfcl9iYWRzaWcgPSAxNiwKKwluc19yX2JhZGtleSA9IDE3LAorCW5zX3JfYmFkdGltZSA9IDE4Cit9IG5zX3Jjb2RlOworCisvKiBCSU5EX1VQREFURSAqLwordHlwZWRlZiBlbnVtIF9fbnNfdXBkYXRlX29wZXJhdGlvbiB7CisJbnNfdW9wX2RlbGV0ZSA9IDAsCisJbnNfdW9wX2FkZCA9IDEsCisJbnNfdW9wX21heCA9IDIKK30gbnNfdXBkYXRlX29wZXJhdGlvbjsKKworLyolCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGZvciBUU0lHIGF1dGhlbnRpY2F0ZWQgbWVzc2FnZXMKKyAqLworc3RydWN0IG5zX3RzaWdfa2V5IHsKKyAgICAgICAgY2hhciBuYW1lW05TX01BWEROQU1FXSwgYWxnW05TX01BWEROQU1FXTsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqZGF0YTsKKyAgICAgICAgaW50IGxlbjsKK307Cit0eXBlZGVmIHN0cnVjdCBuc190c2lnX2tleSBuc190c2lnX2tleTsKKworLyolCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGZvciBUU0lHIGF1dGhlbnRpY2F0ZWQgVENQIG1lc3NhZ2VzCisgKi8KK3N0cnVjdCBuc190Y3BfdHNpZ19zdGF0ZSB7CisJaW50IGNvdW50ZXI7CisJc3RydWN0IGRzdF9rZXkgKmtleTsKKwl2b2lkICpjdHg7CisJdW5zaWduZWQgY2hhciBzaWdbTlNfUEFDS0VUU1pdOworCWludCBzaWdsZW47Cit9OwordHlwZWRlZiBzdHJ1Y3QgbnNfdGNwX3RzaWdfc3RhdGUgbnNfdGNwX3RzaWdfc3RhdGU7CisKKyNkZWZpbmUgTlNfVFNJR19GVURHRSAzMDAKKyNkZWZpbmUgTlNfVFNJR19UQ1BfQ09VTlQgMTAwCisjZGVmaW5lIE5TX1RTSUdfQUxHX0hNQUNfTUQ1ICJITUFDLU1ENS5TSUctQUxHLlJFRy5JTlQiCisKKyNkZWZpbmUgTlNfVFNJR19FUlJPUl9OT19UU0lHIC0xMAorI2RlZmluZSBOU19UU0lHX0VSUk9SX05PX1NQQUNFIC0xMQorI2RlZmluZSBOU19UU0lHX0VSUk9SX0ZPUk1FUlIgLTEyCisKKy8qJQorICogQ3VycmVudGx5IGRlZmluZWQgdHlwZSB2YWx1ZXMgZm9yIHJlc291cmNlcyBhbmQgcXVlcmllcy4KKyAqLwordHlwZWRlZiBlbnVtIF9fbnNfdHlwZSB7CisJbnNfdF9pbnZhbGlkID0gMCwJLyolPCBDb29raWUuICovCisJbnNfdF9hID0gMSwJCS8qJTwgSG9zdCBhZGRyZXNzLiAqLworCW5zX3RfbnMgPSAyLAkJLyolPCBBdXRob3JpdGF0aXZlIHNlcnZlci4gKi8KKwluc190X21kID0gMywJCS8qJTwgTWFpbCBkZXN0aW5hdGlvbi4gKi8KKwluc190X21mID0gNCwJCS8qJTwgTWFpbCBmb3J3YXJkZXIuICovCisJbnNfdF9jbmFtZSA9IDUsCQkvKiU8IENhbm9uaWNhbCBuYW1lLiAqLworCW5zX3Rfc29hID0gNiwJCS8qJTwgU3RhcnQgb2YgYXV0aG9yaXR5IHpvbmUuICovCisJbnNfdF9tYiA9IDcsCQkvKiU8IE1haWxib3ggZG9tYWluIG5hbWUuICovCisJbnNfdF9tZyA9IDgsCQkvKiU8IE1haWwgZ3JvdXAgbWVtYmVyLiAqLworCW5zX3RfbXIgPSA5LAkJLyolPCBNYWlsIHJlbmFtZSBuYW1lLiAqLworCW5zX3RfbnVsbCA9IDEwLAkJLyolPCBOdWxsIHJlc291cmNlIHJlY29yZC4gKi8KKwluc190X3drcyA9IDExLAkJLyolPCBXZWxsIGtub3duIHNlcnZpY2UuICovCisJbnNfdF9wdHIgPSAxMiwJCS8qJTwgRG9tYWluIG5hbWUgcG9pbnRlci4gKi8KKwluc190X2hpbmZvID0gMTMsCS8qJTwgSG9zdCBpbmZvcm1hdGlvbi4gKi8KKwluc190X21pbmZvID0gMTQsCS8qJTwgTWFpbGJveCBpbmZvcm1hdGlvbi4gKi8KKwluc190X214ID0gMTUsCQkvKiU8IE1haWwgcm91dGluZyBpbmZvcm1hdGlvbi4gKi8KKwluc190X3R4dCA9IDE2LAkJLyolPCBUZXh0IHN0cmluZ3MuICovCisJbnNfdF9ycCA9IDE3LAkJLyolPCBSZXNwb25zaWJsZSBwZXJzb24uICovCisJbnNfdF9hZnNkYiA9IDE4LAkvKiU8IEFGUyBjZWxsIGRhdGFiYXNlLiAqLworCW5zX3RfeDI1ID0gMTksCQkvKiU8IFhfMjUgY2FsbGluZyBhZGRyZXNzLiAqLworCW5zX3RfaXNkbiA9IDIwLAkJLyolPCBJU0ROIGNhbGxpbmcgYWRkcmVzcy4gKi8KKwluc190X3J0ID0gMjEsCQkvKiU8IFJvdXRlci4gKi8KKwluc190X25zYXAgPSAyMiwJCS8qJTwgTlNBUCBhZGRyZXNzLiAqLworCW5zX3RfbnNhcF9wdHIgPSAyMywJLyolPCBSZXZlcnNlIE5TQVAgbG9va3VwIChkZXByZWNhdGVkKS4gKi8KKwluc190X3NpZyA9IDI0LAkJLyolPCBTZWN1cml0eSBzaWduYXR1cmUuICovCisJbnNfdF9rZXkgPSAyNSwJCS8qJTwgU2VjdXJpdHkga2V5LiAqLworCW5zX3RfcHggPSAyNiwJCS8qJTwgWC40MDAgbWFpbCBtYXBwaW5nLiAqLworCW5zX3RfZ3BvcyA9IDI3LAkJLyolPCBHZW9ncmFwaGljYWwgcG9zaXRpb24gKHdpdGhkcmF3bikuICovCisJbnNfdF9hYWFhID0gMjgsCQkvKiU8IElwNiBBZGRyZXNzLiAqLworCW5zX3RfbG9jID0gMjksCQkvKiU8IExvY2F0aW9uIEluZm9ybWF0aW9uLiAqLworCW5zX3Rfbnh0ID0gMzAsCQkvKiU8IE5leHQgZG9tYWluIChzZWN1cml0eSkuICovCisJbnNfdF9laWQgPSAzMSwJCS8qJTwgRW5kcG9pbnQgaWRlbnRpZmllci4gKi8KKwluc190X25pbWxvYyA9IDMyLAkvKiU8IE5pbXJvZCBMb2NhdG9yLiAqLworCW5zX3Rfc3J2ID0gMzMsCQkvKiU8IFNlcnZlciBTZWxlY3Rpb24uICovCisJbnNfdF9hdG1hID0gMzQsCQkvKiU8IEFUTSBBZGRyZXNzICovCisJbnNfdF9uYXB0ciA9IDM1LAkvKiU8IE5hbWluZyBBdXRob3JpdHkgUG9pblRlUiAqLworCW5zX3Rfa3ggPSAzNiwJCS8qJTwgS2V5IEV4Y2hhbmdlICovCisJbnNfdF9jZXJ0ID0gMzcsCQkvKiU8IENlcnRpZmljYXRpb24gcmVjb3JkICovCisJbnNfdF9hNiA9IDM4LAkJLyolPCBJUHY2IGFkZHJlc3MgKGRlcHJlY2F0ZWQsIHVzZSBuc190X2FhYWEpICovCisJbnNfdF9kbmFtZSA9IDM5LAkvKiU8IE5vbi10ZXJtaW5hbCBETkFNRSAoZm9yIElQdjYpICovCisJbnNfdF9zaW5rID0gNDAsCQkvKiU8IEtpdGNoZW4gc2luayAoZXhwZXJpbWVudGF0bCkgKi8KKwluc190X29wdCA9IDQxLAkJLyolPCBFRE5TMCBvcHRpb24gKG1ldGEtUlIpICovCisJbnNfdF9hcGwgPSA0MiwJCS8qJTwgQWRkcmVzcyBwcmVmaXggbGlzdCAoUkZDMzEyMykgKi8KKwluc190X3RrZXkgPSAyNDksCS8qJTwgVHJhbnNhY3Rpb24ga2V5ICovCisJbnNfdF90c2lnID0gMjUwLAkvKiU8IFRyYW5zYWN0aW9uIHNpZ25hdHVyZS4gKi8KKwluc190X2l4ZnIgPSAyNTEsCS8qJTwgSW5jcmVtZW50YWwgem9uZSB0cmFuc2Zlci4gKi8KKwluc190X2F4ZnIgPSAyNTIsCS8qJTwgVHJhbnNmZXIgem9uZSBvZiBhdXRob3JpdHkuICovCisJbnNfdF9tYWlsYiA9IDI1MywJLyolPCBUcmFuc2ZlciBtYWlsYm94IHJlY29yZHMuICovCisJbnNfdF9tYWlsYSA9IDI1NCwJLyolPCBUcmFuc2ZlciBtYWlsIGFnZW50IHJlY29yZHMuICovCisJbnNfdF9hbnkgPSAyNTUsCQkvKiU8IFdpbGRjYXJkIG1hdGNoLiAqLworCW5zX3RfenhmciA9IDI1NiwJLyolPCBCSU5ELXNwZWNpZmljLCBub25zdGFuZGFyZC4gKi8KKwluc190X21heCA9IDY1NTM2Cit9IG5zX3R5cGU7CisKKy8qIEV4Y2x1c2l2ZWx5IGEgUVRZUEU/IChub3QgYWxzbyBhbiBSVFlQRSkgKi8KKyNkZWZpbmUJbnNfdF9xdF9wKHQpIChuc190X3hmcl9wKHQpIHx8ICh0KSA9PSBuc190X2FueSB8fCBcCisJCSAgICAgICh0KSA9PSBuc190X21haWxiIHx8ICh0KSA9PSBuc190X21haWxhKQorLyogU29tZSBraW5kIG9mIG1ldGEtUlI/IChub3QgYSBRVFlQRSwgYnV0IGFsc28gbm90IGFuIFJUWVBFKSAqLworI2RlZmluZQluc190X21ycl9wKHQpICgodCkgPT0gbnNfdF90c2lnIHx8ICh0KSA9PSBuc190X29wdCkKKy8qIEV4Y2x1c2l2ZWx5IGFuIFJUWVBFPyAobm90IGFsc28gYSBRVFlQRSBvciBhIG1ldGEtUlIpICovCisjZGVmaW5lIG5zX3RfcnJfcCh0KSAoIW5zX3RfcXRfcCh0KSAmJiAhbnNfdF9tcnJfcCh0KSkKKyNkZWZpbmUgbnNfdF91ZHBfcCh0KSAoKHQpICE9IG5zX3RfYXhmciAmJiAodCkgIT0gbnNfdF96eGZyKQorI2RlZmluZSBuc190X3hmcl9wKHQpICgodCkgPT0gbnNfdF9heGZyIHx8ICh0KSA9PSBuc190X2l4ZnIgfHwgXAorCQkgICAgICAgKHQpID09IG5zX3RfenhmcikKKworLyolCisgKiBWYWx1ZXMgZm9yIGNsYXNzIGZpZWxkCisgKi8KK3R5cGVkZWYgZW51bSBfX25zX2NsYXNzIHsKKwluc19jX2ludmFsaWQgPSAwLAkvKiU8IENvb2tpZS4gKi8KKwluc19jX2luID0gMSwJCS8qJTwgSW50ZXJuZXQuICovCisJbnNfY18yID0gMiwJCS8qJTwgdW5hbGxvY2F0ZWQvdW5zdXBwb3J0ZWQuICovCisJbnNfY19jaGFvcyA9IDMsCQkvKiU8IE1JVCBDaGFvcy1uZXQuICovCisJbnNfY19ocyA9IDQsCQkvKiU8IE1JVCBIZXNpb2QuICovCisJLyogUXVlcnkgY2xhc3MgdmFsdWVzIHdoaWNoIGRvIG5vdCBhcHBlYXIgaW4gcmVzb3VyY2UgcmVjb3JkcyAqLworCW5zX2Nfbm9uZSA9IDI1NCwJLyolPCBmb3IgcHJlcmVxLiBzZWN0aW9ucyBpbiB1cGRhdGUgcmVxdWVzdHMgKi8KKwluc19jX2FueSA9IDI1NSwJCS8qJTwgV2lsZGNhcmQgbWF0Y2guICovCisJbnNfY19tYXggPSA2NTUzNgorfSBuc19jbGFzczsKKworLyogRE5TU0VDIGNvbnN0YW50cy4gKi8KKwordHlwZWRlZiBlbnVtIF9fbnNfa2V5X3R5cGVzIHsKKwluc19rdF9yc2EgPSAxLAkJLyolPCBrZXkgdHlwZSBSU0EvTUQ1ICovCisJbnNfa3RfZGggID0gMiwJCS8qJTwgRGlmZmllIEhlbGxtYW4gKi8KKwluc19rdF9kc2EgPSAzLAkJLyolPCBEaWdpdGFsIFNpZ25hdHVyZSBTdGFuZGFyZCAoTUFOREFUT1JZKSAqLworCW5zX2t0X3ByaXZhdGUgPSAyNTQJLyolPCBQcml2YXRlIGtleSB0eXBlIHN0YXJ0cyB3aXRoIE9JRCAqLworfSBuc19rZXlfdHlwZXM7CisKK3R5cGVkZWYgZW51bSBfX25zX2NlcnRfdHlwZXMgeworCWNlcnRfdF9wa2l4ID0gMSwJLyolPCBQS0lYIChYLjUwOXYzKSAqLworCWNlcnRfdF9zcGtpID0gMiwJLyolPCBTUEtJICovCisJY2VydF90X3BncCAgPSAzLAkvKiU8IFBHUCAqLworCWNlcnRfdF91cmwgID0gMjUzLAkvKiU8IFVSTCBwcml2YXRlIHR5cGUgKi8KKwljZXJ0X3Rfb2lkICA9IDI1NAkvKiU8IE9JRCBwcml2YXRlIHR5cGUgKi8KK30gbnNfY2VydF90eXBlczsKKworLyogRmxhZ3MgZmllbGQgb2YgdGhlIEtFWSBSUiByZGF0YS4gKi8KKyNkZWZpbmUJTlNfS0VZX1RZUEVNQVNLCQkweEMwMDAJLyolPCBNYXNrIGZvciAidHlwZSIgYml0cyAqLworI2RlZmluZQlOU19LRVlfVFlQRV9BVVRIX0NPTkYJMHgwMDAwCS8qJTwgS2V5IHVzYWJsZSBmb3IgYm90aCAqLworI2RlZmluZQlOU19LRVlfVFlQRV9DT05GX09OTFkJMHg4MDAwCS8qJTwgS2V5IHVzYWJsZSBmb3IgY29uZmlkZW50aWFsaXR5ICovCisjZGVmaW5lCU5TX0tFWV9UWVBFX0FVVEhfT05MWQkweDQwMDAJLyolPCBLZXkgdXNhYmxlIGZvciBhdXRoZW50aWNhdGlvbiAqLworI2RlZmluZQlOU19LRVlfVFlQRV9OT19LRVkJMHhDMDAwCS8qJTwgTm8ga2V5IHVzYWJsZSBmb3IgZWl0aGVyOyBubyBrZXkgKi8KKy8qIFRoZSB0eXBlIGJpdHMgY2FuIGFsc28gYmUgaW50ZXJwcmV0ZWQgaW5kZXBlbmRlbnRseSwgYXMgc2luZ2xlIGJpdHM6ICovCisjZGVmaW5lCU5TX0tFWV9OT19BVVRICQkweDgwMDAJLyolPCBLZXkgdW51c2FibGUgZm9yIGF1dGhlbnRpY2F0aW9uICovCisjZGVmaW5lCU5TX0tFWV9OT19DT05GCQkweDQwMDAJLyolPCBLZXkgdW51c2FibGUgZm9yIGNvbmZpZGVudGlhbGl0eSAqLworI2RlZmluZQlOU19LRVlfUkVTRVJWRUQyCTB4MjAwMAkvKiBTZWN1cml0eSBpcyAqbWFuZGF0b3J5KiBpZiBiaXQ9MCAqLworI2RlZmluZQlOU19LRVlfRVhURU5ERURfRkxBR1MJMHgxMDAwCS8qJTwgcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KKyNkZWZpbmUJTlNfS0VZX1JFU0VSVkVENAkweDA4MDAgIC8qJTwgcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KKyNkZWZpbmUJTlNfS0VZX1JFU0VSVkVENQkweDA0MDAgIC8qJTwgcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KKyNkZWZpbmUJTlNfS0VZX05BTUVfVFlQRQkweDAzMDAJLyolPCB0aGVzZSBiaXRzIGRldGVybWluZSB0aGUgdHlwZSAqLworI2RlZmluZQlOU19LRVlfTkFNRV9VU0VSCTB4MDAwMAkvKiU8IGtleSBpcyBhc3NvYy4gd2l0aCB1c2VyICovCisjZGVmaW5lCU5TX0tFWV9OQU1FX0VOVElUWQkweDAyMDAJLyolPCBrZXkgaXMgYXNzb2MuIHdpdGggZW50aXR5IGVnIGhvc3QgKi8KKyNkZWZpbmUJTlNfS0VZX05BTUVfWk9ORQkweDAxMDAJLyolPCBrZXkgaXMgem9uZSBrZXkgKi8KKyNkZWZpbmUJTlNfS0VZX05BTUVfUkVTRVJWRUQJMHgwMzAwCS8qJTwgcmVzZXJ2ZWQgbWVhbmluZyAqLworI2RlZmluZQlOU19LRVlfUkVTRVJWRUQ4CTB4MDA4MCAgLyolPCByZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLworI2RlZmluZQlOU19LRVlfUkVTRVJWRUQ5CTB4MDA0MCAgLyolPCByZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLworI2RlZmluZQlOU19LRVlfUkVTRVJWRUQxMAkweDAwMjAgIC8qJTwgcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KKyNkZWZpbmUJTlNfS0VZX1JFU0VSVkVEMTEJMHgwMDEwICAvKiU8IHJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCisjZGVmaW5lCU5TX0tFWV9TSUdOQVRPUllNQVNLCTB4MDAwRgkvKiU8IGtleSBjYW4gc2lnbiBSUidzIG9mIHNhbWUgbmFtZSAqLworI2RlZmluZQlOU19LRVlfUkVTRVJWRURfQklUTUFTSyAoIE5TX0tFWV9SRVNFUlZFRDIgfCBcCisJCQkJICBOU19LRVlfUkVTRVJWRUQ0IHwgXAorCQkJCSAgTlNfS0VZX1JFU0VSVkVENSB8IFwKKwkJCQkgIE5TX0tFWV9SRVNFUlZFRDggfCBcCisJCQkJICBOU19LRVlfUkVTRVJWRUQ5IHwgXAorCQkJCSAgTlNfS0VZX1JFU0VSVkVEMTAgfCBcCisJCQkJICBOU19LRVlfUkVTRVJWRUQxMSApCisjZGVmaW5lIE5TX0tFWV9SRVNFUlZFRF9CSVRNQVNLMiAweEZGRkYgLyolPCBubyBiaXRzIGRlZmluZWQgaGVyZSAqLworLyogVGhlIEFsZ29yaXRobSBmaWVsZCBvZiB0aGUgS0VZIGFuZCBTSUcgUlIncyBpcyBhbiBpbnRlZ2VyLCB7MS4uMjU0fSAqLworI2RlZmluZQlOU19BTEdfTUQ1UlNBCQkxCS8qJTwgTUQ1IHdpdGggUlNBICovCisjZGVmaW5lCU5TX0FMR19ESCAgICAgICAgICAgICAgIDIJLyolPCBEaWZmaWUgSGVsbG1hbiBLRVkgKi8KKyNkZWZpbmUJTlNfQUxHX0RTQSAgICAgICAgICAgICAgMwkvKiU8IERTQSBLRVkgKi8KKyNkZWZpbmUJTlNfQUxHX0RTUyAgICAgICAgICAgICAgTlNfQUxHX0RTQQorI2RlZmluZQlOU19BTEdfRVhQSVJFX09OTFkJMjUzCS8qJTwgTm8gYWxnLCBubyBzZWN1cml0eSAqLworI2RlZmluZQlOU19BTEdfUFJJVkFURV9PSUQJMjU0CS8qJTwgS2V5IGJlZ2lucyB3aXRoIE9JRCBnaXZpbmcgYWxnICovCisvKiBQcm90b2NvbCB2YWx1ZXMgICovCisvKiB2YWx1ZSAwIGlzIHJlc2VydmVkICovCisjZGVmaW5lIE5TX0tFWV9QUk9UX1RMUyAgICAgICAgIDEKKyNkZWZpbmUgTlNfS0VZX1BST1RfRU1BSUwgICAgICAgMgorI2RlZmluZSBOU19LRVlfUFJPVF9ETlNTRUMgICAgICAzCisjZGVmaW5lIE5TX0tFWV9QUk9UX0lQU0VDICAgICAgIDQKKyNkZWZpbmUgTlNfS0VZX1BST1RfQU5ZCQkyNTUKKworLyogU2lnbmF0dXJlcyAqLworI2RlZmluZQlOU19NRDVSU0FfTUlOX0JJVFMJIDUxMgkvKiU8IFNpemUgb2YgYSBtb2Qgb3IgZXhwIGluIGJpdHMgKi8KKyNkZWZpbmUJTlNfTUQ1UlNBX01BWF9CSVRTCTQwOTYKKwkvKiBUb3RhbCBvZiBiaW5hcnkgbW9kIGFuZCBleHAgKi8KKyNkZWZpbmUJTlNfTUQ1UlNBX01BWF9CWVRFUwkoKE5TX01ENVJTQV9NQVhfQklUUys3LzgpKjIrMykKKwkvKiBNYXggbGVuZ3RoIG9mIHRleHQgc2lnIGJsb2NrICovCisjZGVmaW5lCU5TX01ENVJTQV9NQVhfQkFTRTY0CSgoKE5TX01ENVJTQV9NQVhfQllURVMrMikvMykqNCkKKyNkZWZpbmUgTlNfTUQ1UlNBX01JTl9TSVpFCSgoTlNfTUQ1UlNBX01JTl9CSVRTKzcpLzgpCisjZGVmaW5lIE5TX01ENVJTQV9NQVhfU0laRQkoKE5TX01ENVJTQV9NQVhfQklUUys3KS84KQorCisjZGVmaW5lIE5TX0RTQV9TSUdfU0laRSAgICAgICAgIDQxCisjZGVmaW5lIE5TX0RTQV9NSU5fU0laRSAgICAgICAgIDIxMworI2RlZmluZSBOU19EU0FfTUFYX0JZVEVTICAgICAgICA0MDUKKworLyogT2Zmc2V0cyBpbnRvIFNJRyByZWNvcmQgcmRhdGEgdG8gZmluZCB2YXJpb3VzIHZhbHVlcyAqLworI2RlZmluZQlOU19TSUdfVFlQRQkwCS8qJTwgVHlwZSBmbGFncyAqLworI2RlZmluZQlOU19TSUdfQUxHCTIJLyolPCBBbGdvcml0aG0gKi8KKyNkZWZpbmUJTlNfU0lHX0xBQkVMUwkzCS8qJTwgSG93IG1hbnkgbGFiZWxzIGluIG5hbWUgKi8KKyNkZWZpbmUJTlNfU0lHX09UVEwJNAkvKiU8IE9yaWdpbmFsIFRUTCAqLworI2RlZmluZQlOU19TSUdfRVhQSVIJOAkvKiU8IEV4cGlyYXRpb24gdGltZSAqLworI2RlZmluZQlOU19TSUdfU0lHTkVECTEyCS8qJTwgU2lnbmF0dXJlIHRpbWUgKi8KKyNkZWZpbmUJTlNfU0lHX0ZPT1QJMTYJLyolPCBLZXkgZm9vdHByaW50ICovCisjZGVmaW5lCU5TX1NJR19TSUdORVIJMTgJLyolPCBEb21haW4gbmFtZSBvZiB3aG8gc2lnbmVkIGl0ICovCisvKiBIb3cgUlIgdHlwZXMgYXJlIHJlcHJlc2VudGVkIGFzIGJpdC1mbGFncyBpbiBOWFQgcmVjb3JkcyAqLworI2RlZmluZQlOU19OWFRfQklUUyA4CisjZGVmaW5lCU5TX05YVF9CSVRfU0VUKCAgbixwKSAocFsobikvTlNfTlhUX0JJVFNdIHw9ICAoMHg4MD4+KChuKSVOU19OWFRfQklUUykpKQorI2RlZmluZQlOU19OWFRfQklUX0NMRUFSKG4scCkgKHBbKG4pL05TX05YVF9CSVRTXSAmPSB+KDB4ODA+PigobiklTlNfTlhUX0JJVFMpKSkKKyNkZWZpbmUJTlNfTlhUX0JJVF9JU1NFVChuLHApIChwWyhuKS9OU19OWFRfQklUU10gJiAgICgweDgwPj4oKG4pJU5TX05YVF9CSVRTKSkpCisjZGVmaW5lIE5TX05YVF9NQVggMTI3CisKKy8qJQorICogRUROUzAgZXh0ZW5kZWQgZmxhZ3MgYW5kIG9wdGlvbiBjb2RlcywgaG9zdCBvcmRlci4KKyAqLworI2RlZmluZSBOU19PUFRfRE5TU0VDX09LICAgICAgICAweDgwMDBVCisjZGVmaW5lIE5TX09QVF9OU0lECQkzCisKKy8qJQorICogSW5saW5lIHZlcnNpb25zIG9mIGdldC9wdXQgc2hvcnQvbG9uZy4gIFBvaW50ZXIgaXMgYWR2YW5jZWQuCisgKi8KKyNkZWZpbmUgTlNfR0VUMTYocywgY3ApIGRvIHsgXAorCXJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqdF9jcCA9IChjb25zdCB1X2NoYXIgKikoY3ApOyBcCisJKHMpID0gKCh1X2ludDE2X3QpdF9jcFswXSA8PCA4KSBcCisJICAgIHwgKCh1X2ludDE2X3QpdF9jcFsxXSkgXAorCSAgICA7IFwKKwkoY3ApICs9IE5TX0lOVDE2U1o7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgTlNfR0VUMzIobCwgY3ApIGRvIHsgXAorCXJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqdF9jcCA9IChjb25zdCB1X2NoYXIgKikoY3ApOyBcCisJKGwpID0gKCh1X2ludDMyX3QpdF9jcFswXSA8PCAyNCkgXAorCSAgICB8ICgodV9pbnQzMl90KXRfY3BbMV0gPDwgMTYpIFwKKwkgICAgfCAoKHVfaW50MzJfdCl0X2NwWzJdIDw8IDgpIFwKKwkgICAgfCAoKHVfaW50MzJfdCl0X2NwWzNdKSBcCisJICAgIDsgXAorCShjcCkgKz0gTlNfSU5UMzJTWjsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBOU19QVVQxNihzLCBjcCkgZG8geyBcCisJcmVnaXN0ZXIgdV9pbnQxNl90IHRfcyA9ICh1X2ludDE2X3QpKHMpOyBcCisJcmVnaXN0ZXIgdV9jaGFyICp0X2NwID0gKHVfY2hhciAqKShjcCk7IFwKKwkqdF9jcCsrID0gdF9zID4+IDg7IFwKKwkqdF9jcCAgID0gdF9zOyBcCisJKGNwKSArPSBOU19JTlQxNlNaOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIE5TX1BVVDMyKGwsIGNwKSBkbyB7IFwKKwlyZWdpc3RlciB1X2ludDMyX3QgdF9sID0gKHVfaW50MzJfdCkobCk7IFwKKwlyZWdpc3RlciB1X2NoYXIgKnRfY3AgPSAodV9jaGFyICopKGNwKTsgXAorCSp0X2NwKysgPSB0X2wgPj4gMjQ7IFwKKwkqdF9jcCsrID0gdF9sID4+IDE2OyBcCisJKnRfY3ArKyA9IHRfbCA+PiA4OyBcCisJKnRfY3AgICA9IHRfbDsgXAorCShjcCkgKz0gTlNfSU5UMzJTWjsgXAorfSB3aGlsZSAoMCkKKworX19CRUdJTl9ERUNMUworaW50CQluc19tc2dfZ2V0ZmxhZyAobnNfbXNnLCBpbnQpIF9fVEhST1c7Cit1X2ludAkJbnNfZ2V0MTYgKGNvbnN0IHVfY2hhciAqKSBfX1RIUk9XOwordV9sb25nCQluc19nZXQzMiAoY29uc3QgdV9jaGFyICopIF9fVEhST1c7Cit2b2lkCQluc19wdXQxNiAodV9pbnQsIHVfY2hhciAqKSBfX1RIUk9XOwordm9pZAkJbnNfcHV0MzIgKHVfbG9uZywgdV9jaGFyICopIF9fVEhST1c7CitpbnQJCW5zX2luaXRwYXJzZSAoY29uc3QgdV9jaGFyICosIGludCwgbnNfbXNnICopIF9fVEhST1c7CitpbnQJCW5zX3NraXByciAoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLCBuc19zZWN0LCBpbnQpCisgICAgIF9fVEhST1c7CitpbnQJCW5zX3BhcnNlcnIgKG5zX21zZyAqLCBuc19zZWN0LCBpbnQsIG5zX3JyICopIF9fVEhST1c7CitpbnQJCW5zX3NwcmludHJyIChjb25zdCBuc19tc2cgKiwgY29uc3QgbnNfcnIgKiwKKwkJCSAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KQorICAgICBfX1RIUk9XOworaW50CQluc19zcHJpbnRycmYgKGNvbnN0IHVfY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwKKwkJCSAgICAgIG5zX2NsYXNzLCBuc190eXBlLCB1X2xvbmcsIGNvbnN0IHVfY2hhciAqLAorCQkJICAgICAgc2l6ZV90LCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKKwkJCSAgICAgIGNoYXIgKiwgc2l6ZV90KSBfX1RIUk9XOworaW50CQluc19mb3JtYXRfdHRsICh1X2xvbmcsIGNoYXIgKiwgc2l6ZV90KSBfX1RIUk9XOworaW50CQluc19wYXJzZV90dGwgKGNvbnN0IGNoYXIgKiwgdV9sb25nICopIF9fVEhST1c7Cit1X2ludDMyX3QJbnNfZGF0ZXRvc2VjcyAoY29uc3QgY2hhciAqY3AsIGludCAqZXJycCkgX19USFJPVzsKK2ludAkJbnNfbmFtZV9udG9sIChjb25zdCB1X2NoYXIgKiwgdV9jaGFyICosIHNpemVfdCkgX19USFJPVzsKK2ludAkJbnNfbmFtZV9udG9wIChjb25zdCB1X2NoYXIgKiwgY2hhciAqLCBzaXplX3QpIF9fVEhST1c7CitpbnQJCW5zX25hbWVfcHRvbiAoY29uc3QgY2hhciAqLCB1X2NoYXIgKiwgc2l6ZV90KSBfX1RIUk9XOworaW50CQluc19uYW1lX3VucGFjayAoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLAorCQkJCWNvbnN0IHVfY2hhciAqLCB1X2NoYXIgKiwgc2l6ZV90KSBfX1RIUk9XOworaW50CQluc19uYW1lX3BhY2sgKGNvbnN0IHVfY2hhciAqLCB1X2NoYXIgKiwgaW50LAorCQkJICAgICAgY29uc3QgdV9jaGFyICoqLCBjb25zdCB1X2NoYXIgKiopIF9fVEhST1c7CitpbnQJCW5zX25hbWVfdW5jb21wcmVzcyAoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLAorCQkJCSAgICBjb25zdCB1X2NoYXIgKiwgY2hhciAqLCBzaXplX3QpIF9fVEhST1c7CitpbnQJCW5zX25hbWVfY29tcHJlc3MgKGNvbnN0IGNoYXIgKiwgdV9jaGFyICosIHNpemVfdCwKKwkJCQkgIGNvbnN0IHVfY2hhciAqKiwgY29uc3QgdV9jaGFyICoqKSBfX1RIUk9XOworaW50CQluc19uYW1lX3NraXAgKGNvbnN0IHVfY2hhciAqKiwgY29uc3QgdV9jaGFyICopIF9fVEhST1c7Cit2b2lkCQluc19uYW1lX3JvbGxiYWNrIChjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICoqLAorCQkJCSAgY29uc3QgdV9jaGFyICoqKSBfX1RIUk9XOworaW50CQluc19zaWduICh1X2NoYXIgKiwgaW50ICosIGludCwgaW50LCB2b2lkICosCisJCQkgY29uc3QgdV9jaGFyICosIGludCwgdV9jaGFyICosIGludCAqLCB0aW1lX3QpIF9fVEhST1c7CitpbnQJCW5zX3NpZ24yICh1X2NoYXIgKiwgaW50ICosIGludCwgaW50LCB2b2lkICosCisJCQkgIGNvbnN0IHVfY2hhciAqLCBpbnQsIHVfY2hhciAqLCBpbnQgKiwgdGltZV90LAorCQkJICB1X2NoYXIgKiosIHVfY2hhciAqKikgX19USFJPVzsKK2ludAkJbnNfc2lnbl90Y3AgKHVfY2hhciAqLCBpbnQgKiwgaW50LCBpbnQsCisJCQkgICAgIG5zX3RjcF90c2lnX3N0YXRlICosIGludCkgX19USFJPVzsKK2ludAkJbnNfc2lnbl90Y3AyICh1X2NoYXIgKiwgaW50ICosIGludCwgaW50LAorCQkJICAgICAgbnNfdGNwX3RzaWdfc3RhdGUgKiwgaW50LAorCQkJICAgICAgdV9jaGFyICoqLCB1X2NoYXIgKiopIF9fVEhST1c7CitpbnQJCW5zX3NpZ25fdGNwX2luaXQgKHZvaWQgKiwgY29uc3QgdV9jaGFyICosIGludCwKKwkJCQkgIG5zX3RjcF90c2lnX3N0YXRlICopIF9fVEhST1c7Cit1X2NoYXIJCSpuc19maW5kX3RzaWcgKHVfY2hhciAqLCB1X2NoYXIgKikgX19USFJPVzsKK2ludAkJbnNfdmVyaWZ5ICh1X2NoYXIgKiwgaW50ICosIHZvaWQgKiwgY29uc3QgdV9jaGFyICosIGludCwKKwkJCSAgIHVfY2hhciAqLCBpbnQgKiwgdGltZV90ICosIGludCkgX19USFJPVzsKK2ludAkJbnNfdmVyaWZ5X3RjcCAodV9jaGFyICosIGludCAqLCBuc190Y3BfdHNpZ19zdGF0ZSAqLCBpbnQpCisgICAgIF9fVEhST1c7CitpbnQJCW5zX3ZlcmlmeV90Y3BfaW5pdCAodm9pZCAqLCBjb25zdCB1X2NoYXIgKiwgaW50LAorCQkJCSAgICBuc190Y3BfdHNpZ19zdGF0ZSAqKSBfX1RIUk9XOworaW50CQluc19zYW1lZG9tYWluIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikgX19USFJPVzsKK2ludAkJbnNfc3ViZG9tYWluIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikgX19USFJPVzsKK2ludAkJbnNfbWFrZWNhbm9uIChjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KSBfX1RIUk9XOworaW50CQluc19zYW1lbmFtZSAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopIF9fVEhST1c7CitfX0VORF9ERUNMUworCisjaWZkZWYgQklORF80X0NPTVBBVAorI2luY2x1ZGUgPGFycGEvbmFtZXNlcl9jb21wYXQuaD4KKyNlbmRpZgorCisjZW5kaWYgLyogIV9BUlBBX05BTUVTRVJfSF8gKi8KKy8qISBcZmlsZSAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FycGEvbmFtZXNlcl9jb21wYXQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hcnBhL25hbWVzZXJfY29tcGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU5YzllNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hcnBhL25hbWVzZXJfY29tcGF0LmgKQEAgLTAsMCArMSwxODcgQEAKKy8qIENvcHlyaWdodCAoYykgMTk4MywgMTk4OQorICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qJQorICogICAgICBmcm9tIG5hbWVzZXIuaAk4LjEgKEJlcmtlbGV5KSA2LzIvOTMKKyAqCSRCSU5ESWQ6IG5hbWVzZXJfY29tcGF0LmgsdiA4LjExIDE5OTkvMDEvMDIgMDg6MDA6NTggdml4aWUgRXhwICQKKyAqLworCisjaWZuZGVmIF9BUlBBX05BTUVTRVJfQ09NUEFUXworI2RlZmluZQlfQVJQQV9OQU1FU0VSX0NPTVBBVF8KKworI2RlZmluZQlfX0JJTkQJCTE5OTUwNjIxCS8qJTwgKERFQUQpIGludGVyZmFjZSB2ZXJzaW9uIHN0YW1wLiAqLworCisjaW5jbHVkZSA8ZW5kaWFuLmg+CisKKy8qJQorICogU3RydWN0dXJlIGZvciBxdWVyeSBoZWFkZXIuICBUaGUgb3JkZXIgb2YgdGhlIGZpZWxkcyBpcyBtYWNoaW5lLSBhbmQKKyAqIGNvbXBpbGVyLWRlcGVuZGVudCwgZGVwZW5kaW5nIG9uIHRoZSBieXRlL2JpdCBvcmRlciBhbmQgdGhlIGxheW91dAorICogb2YgYml0IGZpZWxkcy4gIFdlIHVzZSBiaXQgZmllbGRzIG9ubHkgaW4gaW50IHZhcmlhYmxlcywgYXMgdGhpcworICogaXMgYWxsIEFOU0kgcmVxdWlyZXMuICBUaGlzIHJlcXVpcmVzIGEgc29tZXdoYXQgY29uZnVzaW5nIHJlYXJyYW5nZW1lbnQuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkCWlkIDoxNjsJCS8qJTwgcXVlcnkgaWRlbnRpZmljYXRpb24gbnVtYmVyICovCisjaWYgQllURV9PUkRFUiA9PSBCSUdfRU5ESUFOCisJCQkvKiBmaWVsZHMgaW4gdGhpcmQgYnl0ZSAqLworCXVuc2lnbmVkCXFyOiAxOwkJLyolPCByZXNwb25zZSBmbGFnICovCisJdW5zaWduZWQJb3Bjb2RlOiA0OwkvKiU8IHB1cnBvc2Ugb2YgbWVzc2FnZSAqLworCXVuc2lnbmVkCWFhOiAxOwkJLyolPCBhdXRob3JpdGl2ZSBhbnN3ZXIgKi8KKwl1bnNpZ25lZAl0YzogMTsJCS8qJTwgdHJ1bmNhdGVkIG1lc3NhZ2UgKi8KKwl1bnNpZ25lZAlyZDogMTsJCS8qJTwgcmVjdXJzaW9uIGRlc2lyZWQgKi8KKwkJCS8qIGZpZWxkcyBpbiBmb3VydGggYnl0ZSAqLworCXVuc2lnbmVkCXJhOiAxOwkJLyolPCByZWN1cnNpb24gYXZhaWxhYmxlICovCisJdW5zaWduZWQJdW51c2VkIDoxOwkvKiU8IHVudXNlZCBiaXRzIChNQlogYXMgb2YgNC45LjNhMykgKi8KKwl1bnNpZ25lZAlhZDogMTsJCS8qJTwgYXV0aGVudGljIGRhdGEgZnJvbSBuYW1lZCAqLworCXVuc2lnbmVkCWNkOiAxOwkJLyolPCBjaGVja2luZyBkaXNhYmxlZCBieSByZXNvbHZlciAqLworCXVuc2lnbmVkCXJjb2RlIDo0OwkvKiU8IHJlc3BvbnNlIGNvZGUgKi8KKyNlbmRpZgorI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTiB8fCBCWVRFX09SREVSID09IFBEUF9FTkRJQU4KKwkJCS8qIGZpZWxkcyBpbiB0aGlyZCBieXRlICovCisJdW5zaWduZWQJcmQgOjE7CQkvKiU8IHJlY3Vyc2lvbiBkZXNpcmVkICovCisJdW5zaWduZWQJdGMgOjE7CQkvKiU8IHRydW5jYXRlZCBtZXNzYWdlICovCisJdW5zaWduZWQJYWEgOjE7CQkvKiU8IGF1dGhvcml0aXZlIGFuc3dlciAqLworCXVuc2lnbmVkCW9wY29kZSA6NDsJLyolPCBwdXJwb3NlIG9mIG1lc3NhZ2UgKi8KKwl1bnNpZ25lZAlxciA6MTsJCS8qJTwgcmVzcG9uc2UgZmxhZyAqLworCQkJLyogZmllbGRzIGluIGZvdXJ0aCBieXRlICovCisJdW5zaWduZWQJcmNvZGUgOjQ7CS8qJTwgcmVzcG9uc2UgY29kZSAqLworCXVuc2lnbmVkCWNkOiAxOwkJLyolPCBjaGVja2luZyBkaXNhYmxlZCBieSByZXNvbHZlciAqLworCXVuc2lnbmVkCWFkOiAxOwkJLyolPCBhdXRoZW50aWMgZGF0YSBmcm9tIG5hbWVkICovCisJdW5zaWduZWQJdW51c2VkIDoxOwkvKiU8IHVudXNlZCBiaXRzIChNQlogYXMgb2YgNC45LjNhMykgKi8KKwl1bnNpZ25lZAlyYSA6MTsJCS8qJTwgcmVjdXJzaW9uIGF2YWlsYWJsZSAqLworI2VuZGlmCisJCQkvKiByZW1haW5pbmcgYnl0ZXMgKi8KKwl1bnNpZ25lZAlxZGNvdW50IDoxNjsJLyolPCBudW1iZXIgb2YgcXVlc3Rpb24gZW50cmllcyAqLworCXVuc2lnbmVkCWFuY291bnQgOjE2OwkvKiU8IG51bWJlciBvZiBhbnN3ZXIgZW50cmllcyAqLworCXVuc2lnbmVkCW5zY291bnQgOjE2OwkvKiU8IG51bWJlciBvZiBhdXRob3JpdHkgZW50cmllcyAqLworCXVuc2lnbmVkCWFyY291bnQgOjE2OwkvKiU8IG51bWJlciBvZiByZXNvdXJjZSBlbnRyaWVzICovCit9IEhFQURFUjsKKworI2RlZmluZSBQQUNLRVRTWglOU19QQUNLRVRTWgorI2RlZmluZSBNQVhETkFNRQlOU19NQVhETkFNRQorI2RlZmluZSBNQVhDRE5BTUUJTlNfTUFYQ0ROQU1FCisjZGVmaW5lIE1BWExBQkVMCU5TX01BWExBQkVMCisjZGVmaW5lCUhGSVhFRFNaCU5TX0hGSVhFRFNaCisjZGVmaW5lIFFGSVhFRFNaCU5TX1FGSVhFRFNaCisjZGVmaW5lIFJSRklYRURTWglOU19SUkZJWEVEU1oKKyNkZWZpbmUJSU5UMzJTWgkJTlNfSU5UMzJTWgorI2RlZmluZQlJTlQxNlNaCQlOU19JTlQxNlNaCisjZGVmaW5lIElOVDhTWgkJTlNfSU5UOFNaCisjZGVmaW5lCUlOQUREUlNaCU5TX0lOQUREUlNaCisjZGVmaW5lCUlONkFERFJTWglOU19JTjZBRERSU1oKKyNkZWZpbmUJSU5ESVJfTUFTSwlOU19DTVBSU0ZMR1MKKyNkZWZpbmUgTkFNRVNFUlZFUl9QT1JUCU5TX0RFRkFVTFRQT1JUCisKKyNkZWZpbmUgU19aT05FCQluc19zX3puCisjZGVmaW5lIFNfUFJFUkVRCW5zX3NfcHIKKyNkZWZpbmUgU19VUERBVEUJbnNfc191ZAorI2RlZmluZSBTX0FERFQJCW5zX3NfYXIKKworI2RlZmluZSBRVUVSWQkJbnNfb19xdWVyeQorI2RlZmluZSBJUVVFUlkJCW5zX29faXF1ZXJ5CisjZGVmaW5lIFNUQVRVUwkJbnNfb19zdGF0dXMKKyNkZWZpbmUJTlNfTk9USUZZX09QCW5zX29fbm90aWZ5CisjZGVmaW5lCU5TX1VQREFURV9PUAluc19vX3VwZGF0ZQorCisjZGVmaW5lIE5PRVJST1IJCW5zX3Jfbm9lcnJvcgorI2RlZmluZSBGT1JNRVJSCQluc19yX2Zvcm1lcnIKKyNkZWZpbmUgU0VSVkZBSUwJbnNfcl9zZXJ2ZmFpbAorI2RlZmluZSBOWERPTUFJTgluc19yX254ZG9tYWluCisjZGVmaW5lIE5PVElNUAkJbnNfcl9ub3RpbXBsCisjZGVmaW5lIFJFRlVTRUQJCW5zX3JfcmVmdXNlZAorI2RlZmluZSBZWERPTUFJTgluc19yX3l4ZG9tYWluCisjZGVmaW5lIFlYUlJTRVQJCW5zX3JfeXhycnNldAorI2RlZmluZSBOWFJSU0VUCQluc19yX254cnJzZXQKKyNkZWZpbmUgTk9UQVVUSAkJbnNfcl9ub3RhdXRoCisjZGVmaW5lIE5PVFpPTkUJCW5zX3Jfbm90em9uZQorLyojZGVmaW5lIEJBRFNJRwkJbnNfcl9iYWRzaWcqLworLyojZGVmaW5lIEJBREtFWQkJbnNfcl9iYWRrZXkqLworLyojZGVmaW5lIEJBRFRJTUUJCW5zX3JfYmFkdGltZSovCisKKworI2RlZmluZSBERUxFVEUJCW5zX3VvcF9kZWxldGUKKyNkZWZpbmUgQURECQluc191b3BfYWRkCisKKyNkZWZpbmUgVF9BCQluc190X2EKKyNkZWZpbmUgVF9OUwkJbnNfdF9ucworI2RlZmluZSBUX01ECQluc190X21kCisjZGVmaW5lIFRfTUYJCW5zX3RfbWYKKyNkZWZpbmUgVF9DTkFNRQkJbnNfdF9jbmFtZQorI2RlZmluZSBUX1NPQQkJbnNfdF9zb2EKKyNkZWZpbmUgVF9NQgkJbnNfdF9tYgorI2RlZmluZSBUX01HCQluc190X21nCisjZGVmaW5lIFRfTVIJCW5zX3RfbXIKKyNkZWZpbmUgVF9OVUxMCQluc190X251bGwKKyNkZWZpbmUgVF9XS1MJCW5zX3Rfd2tzCisjZGVmaW5lIFRfUFRSCQluc190X3B0cgorI2RlZmluZSBUX0hJTkZPCQluc190X2hpbmZvCisjZGVmaW5lIFRfTUlORk8JCW5zX3RfbWluZm8KKyNkZWZpbmUgVF9NWAkJbnNfdF9teAorI2RlZmluZSBUX1RYVAkJbnNfdF90eHQKKyNkZWZpbmUJVF9SUAkJbnNfdF9ycAorI2RlZmluZSBUX0FGU0RCCQluc190X2Fmc2RiCisjZGVmaW5lIFRfWDI1CQluc190X3gyNQorI2RlZmluZSBUX0lTRE4JCW5zX3RfaXNkbgorI2RlZmluZSBUX1JUCQluc190X3J0CisjZGVmaW5lIFRfTlNBUAkJbnNfdF9uc2FwCisjZGVmaW5lIFRfTlNBUF9QVFIJbnNfdF9uc2FwX3B0cgorI2RlZmluZQlUX1NJRwkJbnNfdF9zaWcKKyNkZWZpbmUJVF9LRVkJCW5zX3Rfa2V5CisjZGVmaW5lCVRfUFgJCW5zX3RfcHgKKyNkZWZpbmUJVF9HUE9TCQluc190X2dwb3MKKyNkZWZpbmUJVF9BQUFBCQluc190X2FhYWEKKyNkZWZpbmUJVF9MT0MJCW5zX3RfbG9jCisjZGVmaW5lCVRfTlhUCQluc190X254dAorI2RlZmluZQlUX0VJRAkJbnNfdF9laWQKKyNkZWZpbmUJVF9OSU1MT0MJbnNfdF9uaW1sb2MKKyNkZWZpbmUJVF9TUlYJCW5zX3Rfc3J2CisjZGVmaW5lIFRfQVRNQQkJbnNfdF9hdG1hCisjZGVmaW5lIFRfTkFQVFIJCW5zX3RfbmFwdHIKKyNkZWZpbmUgVF9BNgkJbnNfdF9hNgorI2RlZmluZSBUX0ROQU1FCQluc190X2RuYW1lCisjZGVmaW5lCVRfVFNJRwkJbnNfdF90c2lnCisjZGVmaW5lCVRfSVhGUgkJbnNfdF9peGZyCisjZGVmaW5lIFRfQVhGUgkJbnNfdF9heGZyCisjZGVmaW5lIFRfTUFJTEIJCW5zX3RfbWFpbGIKKyNkZWZpbmUgVF9NQUlMQQkJbnNfdF9tYWlsYQorI2RlZmluZSBUX0FOWQkJbnNfdF9hbnkKKworI2RlZmluZSBDX0lOCQluc19jX2luCisjZGVmaW5lIENfQ0hBT1MJCW5zX2NfY2hhb3MKKyNkZWZpbmUgQ19IUwkJbnNfY19ocworLyogQklORF9VUERBVEUgKi8KKyNkZWZpbmUgQ19OT05FCQluc19jX25vbmUKKyNkZWZpbmUgQ19BTlkJCW5zX2NfYW55CisKKyNkZWZpbmUJR0VUU0hPUlQJCU5TX0dFVDE2CisjZGVmaW5lCUdFVExPTkcJCQlOU19HRVQzMgorI2RlZmluZQlQVVRTSE9SVAkJTlNfUFVUMTYKKyNkZWZpbmUJUFVUTE9ORwkJCU5TX1BVVDMyCisKKyNlbmRpZiAvKiBfQVJQQV9OQU1FU0VSX0NPTVBBVF8gKi8KKy8qISBcZmlsZSAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FycGEvdGVsbmV0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXJwYS90ZWxuZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzc0Yzg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FycGEvdGVsbmV0LmgKQEAgLTAsMCArMSwzMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpdGVsbmV0LmgJOC4yIChCZXJrZWxleSkgMTIvMTUvOTMKKyAqLworCisjaWZuZGVmIF9BUlBBX1RFTE5FVF9ICisjZGVmaW5lCV9BUlBBX1RFTE5FVF9IIDEKKworLyoKKyAqIERlZmluaXRpb25zIGZvciB0aGUgVEVMTkVUIHByb3RvY29sLgorICovCisjZGVmaW5lCUlBQwkyNTUJCS8qIGludGVycHJldCBhcyBjb21tYW5kOiAqLworI2RlZmluZQlET05UCTI1NAkJLyogeW91IGFyZSBub3QgdG8gdXNlIG9wdGlvbiAqLworI2RlZmluZQlETwkyNTMJCS8qIHBsZWFzZSwgeW91IHVzZSBvcHRpb24gKi8KKyNkZWZpbmUJV09OVAkyNTIJCS8qIEkgd29uJ3QgdXNlIG9wdGlvbiAqLworI2RlZmluZQlXSUxMCTI1MQkJLyogSSB3aWxsIHVzZSBvcHRpb24gKi8KKyNkZWZpbmUJU0IJMjUwCQkvKiBpbnRlcnByZXQgYXMgc3VibmVnb3RpYXRpb24gKi8KKyNkZWZpbmUJR0EJMjQ5CQkvKiB5b3UgbWF5IHJldmVyc2UgdGhlIGxpbmUgKi8KKyNkZWZpbmUJRUwJMjQ4CQkvKiBlcmFzZSB0aGUgY3VycmVudCBsaW5lICovCisjZGVmaW5lCUVDCTI0NwkJLyogZXJhc2UgdGhlIGN1cnJlbnQgY2hhcmFjdGVyICovCisjZGVmaW5lCUFZVAkyNDYJCS8qIGFyZSB5b3UgdGhlcmUgKi8KKyNkZWZpbmUJQU8JMjQ1CQkvKiBhYm9ydCBvdXRwdXQtLWJ1dCBsZXQgcHJvZyBmaW5pc2ggKi8KKyNkZWZpbmUJSVAJMjQ0CQkvKiBpbnRlcnJ1cHQgcHJvY2Vzcy0tcGVybWFuZW50bHkgKi8KKyNkZWZpbmUJQlJFQUsJMjQzCQkvKiBicmVhayAqLworI2RlZmluZQlETQkyNDIJCS8qIGRhdGEgbWFyay0tZm9yIGNvbm5lY3QuIGNsZWFuaW5nICovCisjZGVmaW5lCU5PUAkyNDEJCS8qIG5vcCAqLworI2RlZmluZQlTRQkyNDAJCS8qIGVuZCBzdWIgbmVnb3RpYXRpb24gKi8KKyNkZWZpbmUgRU9SICAgICAyMzkgICAgICAgICAgICAgLyogZW5kIG9mIHJlY29yZCAodHJhbnNwYXJlbnQgbW9kZSkgKi8KKyNkZWZpbmUJQUJPUlQJMjM4CQkvKiBBYm9ydCBwcm9jZXNzICovCisjZGVmaW5lCVNVU1AJMjM3CQkvKiBTdXNwZW5kIHByb2Nlc3MgKi8KKyNkZWZpbmUJeEVPRgkyMzYJCS8qIEVuZCBvZiBmaWxlOiBFT0YgaXMgYWxyZWFkeSB1c2VkLi4uICovCisKKyNkZWZpbmUgU1lOQ0gJMjQyCQkvKiBmb3IgdGVsZnVuYyBjYWxscyAqLworCisjaWZkZWYgVEVMQ01EUworY2hhciAqdGVsY21kc1tdID0geworCSJFT0YiLCAiU1VTUCIsICJBQk9SVCIsICJFT1IiLAorCSJTRSIsICJOT1AiLCAiRE1BUksiLCAiQlJLIiwgIklQIiwgIkFPIiwgIkFZVCIsICJFQyIsCisJIkVMIiwgIkdBIiwgIlNCIiwgIldJTEwiLCAiV09OVCIsICJETyIsICJET05UIiwgIklBQyIsIDAsCit9OworI2Vsc2UKK2V4dGVybiBjaGFyICp0ZWxjbWRzW107CisjZW5kaWYKKworI2RlZmluZQlURUxDTURfRklSU1QJeEVPRgorI2RlZmluZQlURUxDTURfTEFTVAlJQUMKKyNkZWZpbmUJVEVMQ01EX09LKHgpCSgodW5zaWduZWQgaW50KSh4KSA8PSBURUxDTURfTEFTVCAmJiBcCisJCQkgKHVuc2lnbmVkIGludCkoeCkgPj0gVEVMQ01EX0ZJUlNUKQorI2RlZmluZQlURUxDTUQoeCkJdGVsY21kc1soeCktVEVMQ01EX0ZJUlNUXQorCisvKiB0ZWxuZXQgb3B0aW9ucyAqLworI2RlZmluZSBURUxPUFRfQklOQVJZCTAJLyogOC1iaXQgZGF0YSBwYXRoICovCisjZGVmaW5lIFRFTE9QVF9FQ0hPCTEJLyogZWNobyAqLworI2RlZmluZQlURUxPUFRfUkNQCTIJLyogcHJlcGFyZSB0byByZWNvbm5lY3QgKi8KKyNkZWZpbmUJVEVMT1BUX1NHQQkzCS8qIHN1cHByZXNzIGdvIGFoZWFkICovCisjZGVmaW5lCVRFTE9QVF9OQU1TCTQJLyogYXBwcm94aW1hdGUgbWVzc2FnZSBzaXplICovCisjZGVmaW5lCVRFTE9QVF9TVEFUVVMJNQkvKiBnaXZlIHN0YXR1cyAqLworI2RlZmluZQlURUxPUFRfVE0JNgkvKiB0aW1pbmcgbWFyayAqLworI2RlZmluZQlURUxPUFRfUkNURQk3CS8qIHJlbW90ZSBjb250cm9sbGVkIHRyYW5zbWlzc2lvbiBhbmQgZWNobyAqLworI2RlZmluZSBURUxPUFRfTkFPTCAJOAkvKiBuZWdvdGlhdGUgYWJvdXQgb3V0cHV0IGxpbmUgd2lkdGggKi8KKyNkZWZpbmUgVEVMT1BUX05BT1AgCTkJLyogbmVnb3RpYXRlIGFib3V0IG91dHB1dCBwYWdlIHNpemUgKi8KKyNkZWZpbmUgVEVMT1BUX05BT0NSRAkxMAkvKiBuZWdvdGlhdGUgYWJvdXQgQ1IgZGlzcG9zaXRpb24gKi8KKyNkZWZpbmUgVEVMT1BUX05BT0hUUwkxMQkvKiBuZWdvdGlhdGUgYWJvdXQgaG9yaXpvbnRhbCB0YWJzdG9wcyAqLworI2RlZmluZSBURUxPUFRfTkFPSFRECTEyCS8qIG5lZ290aWF0ZSBhYm91dCBob3Jpem9udGFsIHRhYiBkaXNwb3NpdGlvbiAqLworI2RlZmluZSBURUxPUFRfTkFPRkZECTEzCS8qIG5lZ290aWF0ZSBhYm91dCBmb3JtZmVlZCBkaXNwb3NpdGlvbiAqLworI2RlZmluZSBURUxPUFRfTkFPVlRTCTE0CS8qIG5lZ290aWF0ZSBhYm91dCB2ZXJ0aWNhbCB0YWIgc3RvcHMgKi8KKyNkZWZpbmUgVEVMT1BUX05BT1ZURAkxNQkvKiBuZWdvdGlhdGUgYWJvdXQgdmVydGljYWwgdGFiIGRpc3Bvc2l0aW9uICovCisjZGVmaW5lIFRFTE9QVF9OQU9MRkQJMTYJLyogbmVnb3RpYXRlIGFib3V0IG91dHB1dCBMRiBkaXNwb3NpdGlvbiAqLworI2RlZmluZSBURUxPUFRfWEFTQ0lJCTE3CS8qIGV4dGVuZGVkIGFzY2lpIGNoYXJhY3RlciBzZXQgKi8KKyNkZWZpbmUJVEVMT1BUX0xPR09VVAkxOAkvKiBmb3JjZSBsb2dvdXQgKi8KKyNkZWZpbmUJVEVMT1BUX0JNCTE5CS8qIGJ5dGUgbWFjcm8gKi8KKyNkZWZpbmUJVEVMT1BUX0RFVAkyMAkvKiBkYXRhIGVudHJ5IHRlcm1pbmFsICovCisjZGVmaW5lCVRFTE9QVF9TVVBEVVAJMjEJLyogc3VwZHVwIHByb3RvY29sICovCisjZGVmaW5lCVRFTE9QVF9TVVBEVVBPVVRQVVQgMjIJLyogc3VwZHVwIG91dHB1dCAqLworI2RlZmluZQlURUxPUFRfU05ETE9DCTIzCS8qIHNlbmQgbG9jYXRpb24gKi8KKyNkZWZpbmUJVEVMT1BUX1RUWVBFCTI0CS8qIHRlcm1pbmFsIHR5cGUgKi8KKyNkZWZpbmUJVEVMT1BUX0VPUgkyNQkvKiBlbmQgb3IgcmVjb3JkICovCisjZGVmaW5lCVRFTE9QVF9UVUlECTI2CS8qIFRBQ0FDUyB1c2VyIGlkZW50aWZpY2F0aW9uICovCisjZGVmaW5lCVRFTE9QVF9PVVRNUksJMjcJLyogb3V0cHV0IG1hcmtpbmcgKi8KKyNkZWZpbmUJVEVMT1BUX1RUWUxPQwkyOAkvKiB0ZXJtaW5hbCBsb2NhdGlvbiBudW1iZXIgKi8KKyNkZWZpbmUJVEVMT1BUXzMyNzBSRUdJTUUgMjkJLyogMzI3MCByZWdpbWUgKi8KKyNkZWZpbmUJVEVMT1BUX1gzUEFECTMwCS8qIFguMyBQQUQgKi8KKyNkZWZpbmUJVEVMT1BUX05BV1MJMzEJLyogd2luZG93IHNpemUgKi8KKyNkZWZpbmUJVEVMT1BUX1RTUEVFRAkzMgkvKiB0ZXJtaW5hbCBzcGVlZCAqLworI2RlZmluZQlURUxPUFRfTEZMT1cJMzMJLyogcmVtb3RlIGZsb3cgY29udHJvbCAqLworI2RlZmluZSBURUxPUFRfTElORU1PREUJMzQJLyogTGluZW1vZGUgb3B0aW9uICovCisjZGVmaW5lIFRFTE9QVF9YRElTUExPQwkzNQkvKiBYIERpc3BsYXkgTG9jYXRpb24gKi8KKyNkZWZpbmUgVEVMT1BUX09MRF9FTlZJUk9OIDM2CS8qIE9sZCAtIEVudmlyb25tZW50IHZhcmlhYmxlcyAqLworI2RlZmluZQlURUxPUFRfQVVUSEVOVElDQVRJT04gMzcvKiBBdXRoZW50aWNhdGUgKi8KKyNkZWZpbmUJVEVMT1BUX0VOQ1JZUFQJMzgJLyogRW5jcnlwdGlvbiBvcHRpb24gKi8KKyNkZWZpbmUgVEVMT1BUX05FV19FTlZJUk9OIDM5CS8qIE5ldyAtIEVudmlyb25tZW50IHZhcmlhYmxlcyAqLworI2RlZmluZQlURUxPUFRfRVhPUEwJMjU1CS8qIGV4dGVuZGVkLW9wdGlvbnMtbGlzdCAqLworCisKKyNkZWZpbmUJTlRFTE9QVFMJKDErVEVMT1BUX05FV19FTlZJUk9OKQorI2lmZGVmIFRFTE9QVFMKK2NoYXIgKnRlbG9wdHNbTlRFTE9QVFMrMV0gPSB7CisJIkJJTkFSWSIsICJFQ0hPIiwgIlJDUCIsICJTVVBQUkVTUyBHTyBBSEVBRCIsICJOQU1FIiwKKwkiU1RBVFVTIiwgIlRJTUlORyBNQVJLIiwgIlJDVEUiLCAiTkFPTCIsICJOQU9QIiwKKwkiTkFPQ1JEIiwgIk5BT0hUUyIsICJOQU9IVEQiLCAiTkFPRkZEIiwgIk5BT1ZUUyIsCisJIk5BT1ZURCIsICJOQU9MRkQiLCAiRVhURU5EIEFTQ0lJIiwgIkxPR09VVCIsICJCWVRFIE1BQ1JPIiwKKwkiREFUQSBFTlRSWSBURVJNSU5BTCIsICJTVVBEVVAiLCAiU1VQRFVQIE9VVFBVVCIsCisJIlNFTkQgTE9DQVRJT04iLCAiVEVSTUlOQUwgVFlQRSIsICJFTkQgT0YgUkVDT1JEIiwKKwkiVEFDQUNTIFVJRCIsICJPVVRQVVQgTUFSS0lORyIsICJUVFlMT0MiLAorCSIzMjcwIFJFR0lNRSIsICJYLjMgUEFEIiwgIk5BV1MiLCAiVFNQRUVEIiwgIkxGTE9XIiwKKwkiTElORU1PREUiLCAiWERJU1BMT0MiLCAiT0xELUVOVklST04iLCAiQVVUSEVOVElDQVRJT04iLAorCSJFTkNSWVBUIiwgIk5FVy1FTlZJUk9OIiwKKwkwLAorfTsKKyNkZWZpbmUJVEVMT1BUX0ZJUlNUCVRFTE9QVF9CSU5BUlkKKyNkZWZpbmUJVEVMT1BUX0xBU1QJVEVMT1BUX05FV19FTlZJUk9OCisjZGVmaW5lCVRFTE9QVF9PSyh4KQkoKHVuc2lnbmVkIGludCkoeCkgPD0gVEVMT1BUX0xBU1QpCisjZGVmaW5lCVRFTE9QVCh4KQl0ZWxvcHRzWyh4KS1URUxPUFRfRklSU1RdCisjZW5kaWYKKworLyogc3ViLW9wdGlvbiBxdWFsaWZpZXJzICovCisjZGVmaW5lCVRFTFFVQUxfSVMJMAkvKiBvcHRpb24gaXMuLi4gKi8KKyNkZWZpbmUJVEVMUVVBTF9TRU5ECTEJLyogc2VuZCBvcHRpb24gKi8KKyNkZWZpbmUJVEVMUVVBTF9JTkZPCTIJLyogRU5WSVJPTjogaW5mb3JtYXRpb25hbCB2ZXJzaW9uIG9mIElTICovCisjZGVmaW5lCVRFTFFVQUxfUkVQTFkJMgkvKiBBVVRIRU5USUNBVElPTjogY2xpZW50IHZlcnNpb24gb2YgSVMgKi8KKyNkZWZpbmUJVEVMUVVBTF9OQU1FCTMJLyogQVVUSEVOVElDQVRJT046IGNsaWVudCB2ZXJzaW9uIG9mIElTICovCisKKyNkZWZpbmUJTEZMT1dfT0ZGCQkwCS8qIERpc2FibGUgcmVtb3RlIGZsb3cgY29udHJvbCAqLworI2RlZmluZQlMRkxPV19PTgkJMQkvKiBFbmFibGUgcmVtb3RlIGZsb3cgY29udHJvbCAqLworI2RlZmluZQlMRkxPV19SRVNUQVJUX0FOWQkyCS8qIFJlc3RhcnQgb3V0cHV0IG9uIGFueSBjaGFyICovCisjZGVmaW5lCUxGTE9XX1JFU1RBUlRfWE9OCTMJLyogUmVzdGFydCBvdXRwdXQgb25seSBvbiBYT04gKi8KKworLyoKKyAqIExJTkVNT0RFIHN1Ym9wdGlvbnMKKyAqLworCisjZGVmaW5lCUxNX01PREUJCTEKKyNkZWZpbmUJTE1fRk9SV0FSRE1BU0sJMgorI2RlZmluZQlMTV9TTEMJCTMKKworI2RlZmluZQlNT0RFX0VESVQJMHgwMQorI2RlZmluZQlNT0RFX1RSQVBTSUcJMHgwMgorI2RlZmluZQlNT0RFX0FDSwkweDA0CisjZGVmaW5lIE1PREVfU09GVF9UQUIJMHgwOAorI2RlZmluZSBNT0RFX0xJVF9FQ0hPCTB4MTAKKworI2RlZmluZQlNT0RFX01BU0sJMHgxZgorCisvKiBOb3QgcGFydCBvZiBwcm90b2NvbCwgYnV0IG5lZWRlZCB0byBzaW1wbGlmeSB0aGluZ3MuLi4gKi8KKyNkZWZpbmUgTU9ERV9GTE9XCQkweDAxMDAKKyNkZWZpbmUgTU9ERV9FQ0hPCQkweDAyMDAKKyNkZWZpbmUgTU9ERV9JTkJJTgkJMHgwNDAwCisjZGVmaW5lIE1PREVfT1VUQklOCQkweDA4MDAKKyNkZWZpbmUgTU9ERV9GT1JDRQkJMHgxMDAwCisKKyNkZWZpbmUJU0xDX1NZTkNICTEKKyNkZWZpbmUJU0xDX0JSSwkJMgorI2RlZmluZQlTTENfSVAJCTMKKyNkZWZpbmUJU0xDX0FPCQk0CisjZGVmaW5lCVNMQ19BWVQJCTUKKyNkZWZpbmUJU0xDX0VPUgkJNgorI2RlZmluZQlTTENfQUJPUlQJNworI2RlZmluZQlTTENfRU9GCQk4CisjZGVmaW5lCVNMQ19TVVNQCTkKKyNkZWZpbmUJU0xDX0VDCQkxMAorI2RlZmluZQlTTENfRUwJCTExCisjZGVmaW5lCVNMQ19FVwkJMTIKKyNkZWZpbmUJU0xDX1JQCQkxMworI2RlZmluZQlTTENfTE5FWFQJMTQKKyNkZWZpbmUJU0xDX1hPTgkJMTUKKyNkZWZpbmUJU0xDX1hPRkYJMTYKKyNkZWZpbmUJU0xDX0ZPUlcxCTE3CisjZGVmaW5lCVNMQ19GT1JXMgkxOAorCisjZGVmaW5lCU5TTEMJCTE4CisKKy8qCisgKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHdlIGRlZmluZSBTTENfTkFNRVMgdG8gYmUgdGhlCisgKiBsaXN0IG9mIG5hbWVzIGlmIFNMQ19OQU1FUyBpcyBub3QgZGVmaW5lZC4KKyAqLworI2RlZmluZQlTTENfTkFNRUxJU1QJIjAiLCAiU1lOQ0giLCAiQlJLIiwgIklQIiwgIkFPIiwgIkFZVCIsICJFT1IiLCBcCisJCQkiQUJPUlQiLCAiRU9GIiwgIlNVU1AiLCAiRUMiLCAiRUwiLCAiRVciLCAiUlAiLCBcCisJCQkiTE5FWFQiLCAiWE9OIiwgIlhPRkYiLCAiRk9SVzEiLCAiRk9SVzIiLCAwLAorI2lmZGVmCVNMQ19OQU1FUworY2hhciAqc2xjX25hbWVzW10gPSB7CisJU0xDX05BTUVMSVNUCit9OworI2Vsc2UKK2V4dGVybiBjaGFyICpzbGNfbmFtZXNbXTsKKyNkZWZpbmUJU0xDX05BTUVTIFNMQ19OQU1FTElTVAorI2VuZGlmCisKKyNkZWZpbmUJU0xDX05BTUVfT0soeCkJKCh1bnNpZ25lZCBpbnQpKHgpIDw9IE5TTEMpCisjZGVmaW5lIFNMQ19OQU1FKHgpCXNsY19uYW1lc1t4XQorCisjZGVmaW5lCVNMQ19OT1NVUFBPUlQJMAorI2RlZmluZQlTTENfQ0FOVENIQU5HRQkxCisjZGVmaW5lCVNMQ19WQVJJQUJMRQkyCisjZGVmaW5lCVNMQ19ERUZBVUxUCTMKKyNkZWZpbmUJU0xDX0xFVkVMQklUUwkweDAzCisKKyNkZWZpbmUJU0xDX0ZVTkMJMAorI2RlZmluZQlTTENfRkxBR1MJMQorI2RlZmluZQlTTENfVkFMVUUJMgorCisjZGVmaW5lCVNMQ19BQ0sJCTB4ODAKKyNkZWZpbmUJU0xDX0ZMVVNISU4JMHg0MAorI2RlZmluZQlTTENfRkxVU0hPVVQJMHgyMAorCisjZGVmaW5lCU9MRF9FTlZfVkFSCTEKKyNkZWZpbmUJT0xEX0VOVl9WQUxVRQkwCisjZGVmaW5lCU5FV19FTlZfVkFSCTAKKyNkZWZpbmUJTkVXX0VOVl9WQUxVRQkxCisjZGVmaW5lCUVOVl9FU0MJCTIKKyNkZWZpbmUgRU5WX1VTRVJWQVIJMworCisvKgorICogQVVUSEVOVElDQVRJT04gc3Vib3B0aW9ucworICovCisKKy8qCisgKiBXaG8gaXMgYXV0aGVudGljYXRpbmcgd2hvIC4uLgorICovCisjZGVmaW5lCUFVVEhfV0hPX0NMSUVOVAkJMAkvKiBDbGllbnQgYXV0aGVudGljYXRpbmcgc2VydmVyICovCisjZGVmaW5lCUFVVEhfV0hPX1NFUlZFUgkJMQkvKiBTZXJ2ZXIgYXV0aGVudGljYXRpbmcgY2xpZW50ICovCisjZGVmaW5lCUFVVEhfV0hPX01BU0sJCTEKKworLyoKKyAqIGFtb3VudCBvZiBhdXRoZW50aWNhdGlvbiBkb25lCisgKi8KKyNkZWZpbmUJQVVUSF9IT1dfT05FX1dBWQkwCisjZGVmaW5lCUFVVEhfSE9XX01VVFVBTAkJMgorI2RlZmluZQlBVVRIX0hPV19NQVNLCQkyCisKKyNkZWZpbmUJQVVUSFRZUEVfTlVMTAkJMAorI2RlZmluZQlBVVRIVFlQRV9LRVJCRVJPU19WNAkxCisjZGVmaW5lCUFVVEhUWVBFX0tFUkJFUk9TX1Y1CTIKKyNkZWZpbmUJQVVUSFRZUEVfU1BYCQkzCisjZGVmaW5lCUFVVEhUWVBFX01JTksJCTQKKyNkZWZpbmUJQVVUSFRZUEVfQ05UCQk1CisKKyNkZWZpbmUJQVVUSFRZUEVfVEVTVAkJOTkKKworI2lmZGVmCUFVVEhfTkFNRVMKK2NoYXIgKmF1dGh0eXBlX25hbWVzW10gPSB7CisJIk5VTEwiLCAiS0VSQkVST1NfVjQiLCAiS0VSQkVST1NfVjUiLCAiU1BYIiwgIk1JTksiLCAwLAorfTsKKyNlbHNlCitleHRlcm4gY2hhciAqYXV0aHR5cGVfbmFtZXNbXTsKKyNlbmRpZgorCisjZGVmaW5lCUFVVEhUWVBFX05BTUVfT0soeCkJKCh1bnNpZ25lZCBpbnQpKHgpIDwgQVVUSFRZUEVfQ05UKQorI2RlZmluZQlBVVRIVFlQRV9OQU1FKHgpCWF1dGh0eXBlX25hbWVzW3hdCisKKy8qCisgKiBFTkNSWVBUaW9uIHN1Ym9wdGlvbnMKKyAqLworI2RlZmluZQlFTkNSWVBUX0lTCQkwCS8qIEkgcGljayBlbmNyeXB0aW9uIHR5cGUgLi4uICovCisjZGVmaW5lCUVOQ1JZUFRfU1VQUE9SVAkJMQkvKiBJIHN1cHBvcnQgZW5jcnlwdGlvbiB0eXBlcyAuLi4gKi8KKyNkZWZpbmUJRU5DUllQVF9SRVBMWQkJMgkvKiBJbml0aWFsIHNldHVwIHJlc3BvbnNlICovCisjZGVmaW5lCUVOQ1JZUFRfU1RBUlQJCTMJLyogQW0gc3RhcnRpbmcgdG8gc2VuZCBlbmNyeXB0ZWQgKi8KKyNkZWZpbmUJRU5DUllQVF9FTkQJCTQJLyogQW0gZW5kaW5nIGVuY3J5cHRlZCAqLworI2RlZmluZQlFTkNSWVBUX1JFUVNUQVJUCTUJLyogUmVxdWVzdCB5b3Ugc3RhcnQgZW5jcnlwdGluZyAqLworI2RlZmluZQlFTkNSWVBUX1JFUUVORAkJNgkvKiBSZXF1ZXN0IHlvdSBzZW5kIGVuY3J5cHRpbmcgKi8KKyNkZWZpbmUJRU5DUllQVF9FTkNfS0VZSUQJNworI2RlZmluZQlFTkNSWVBUX0RFQ19LRVlJRAk4CisjZGVmaW5lCUVOQ1JZUFRfQ05UCQk5CisKKyNkZWZpbmUJRU5DVFlQRV9BTlkJCTAKKyNkZWZpbmUJRU5DVFlQRV9ERVNfQ0ZCNjQJMQorI2RlZmluZQlFTkNUWVBFX0RFU19PRkI2NAkyCisjZGVmaW5lCUVOQ1RZUEVfQ05UCQkzCisKKyNpZmRlZglFTkNSWVBUX05BTUVTCitjaGFyICplbmNyeXB0X25hbWVzW10gPSB7CisJIklTIiwgIlNVUFBPUlQiLCAiUkVQTFkiLCAiU1RBUlQiLCAiRU5EIiwKKwkiUkVRVUVTVC1TVEFSVCIsICJSRVFVRVNULUVORCIsICJFTkMtS0VZSUQiLCAiREVDLUtFWUlEIiwKKwkwLAorfTsKK2NoYXIgKmVuY3R5cGVfbmFtZXNbXSA9IHsKKwkiQU5ZIiwgIkRFU19DRkI2NCIsICAiREVTX09GQjY0IiwgIDAsCit9OworI2Vsc2UKK2V4dGVybiBjaGFyICplbmNyeXB0X25hbWVzW107CitleHRlcm4gY2hhciAqZW5jdHlwZV9uYW1lc1tdOworI2VuZGlmCisKKworI2RlZmluZQlFTkNSWVBUX05BTUVfT0soeCkJKCh1bnNpZ25lZCBpbnQpKHgpIDwgRU5DUllQVF9DTlQpCisjZGVmaW5lCUVOQ1JZUFRfTkFNRSh4KQkJZW5jcnlwdF9uYW1lc1t4XQorCisjZGVmaW5lCUVOQ1RZUEVfTkFNRV9PSyh4KQkoKHVuc2lnbmVkIGludCkoeCkgPCBFTkNUWVBFX0NOVCkKKyNkZWZpbmUJRU5DVFlQRV9OQU1FKHgpCQllbmN0eXBlX25hbWVzW3hdCisKKyNlbmRpZiAvKiBhcnBhL3RlbG5ldC5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXJwYS90ZnRwLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXJwYS90ZnRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFiMDU1OQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hcnBhL3RmdHAuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKXRmdHAuaAk4LjEgKEJlcmtlbGV5KSA2LzIvOTMKKyAqLworCisjaWZuZGVmIF9BUlBBX1RGVFBfSAorI2RlZmluZQlfQVJQQV9URlRQX0ggMQorCisvKgorICogVHJpdmlhbCBGaWxlIFRyYW5zZmVyIFByb3RvY29sIChJRU4tMTMzKQorICovCisjZGVmaW5lCVNFR1NJWkUJCTUxMgkJLyogZGF0YSBzZWdtZW50IHNpemUgKi8KKworLyoKKyAqIFBhY2tldCB0eXBlcy4KKyAqLworI2RlZmluZQlSUlEJMDEJCQkJLyogcmVhZCByZXF1ZXN0ICovCisjZGVmaW5lCVdSUQkwMgkJCQkvKiB3cml0ZSByZXF1ZXN0ICovCisjZGVmaW5lCURBVEEJMDMJCQkJLyogZGF0YSBwYWNrZXQgKi8KKyNkZWZpbmUJQUNLCTA0CQkJCS8qIGFja25vd2xlZGdlbWVudCAqLworI2RlZmluZQlFUlJPUgkwNQkJCQkvKiBlcnJvciBjb2RlICovCisKK3N0cnVjdAl0ZnRwaGRyIHsKKwlzaG9ydAl0aF9vcGNvZGU7CQkJLyogcGFja2V0IHR5cGUgKi8KKwl1bmlvbiB7CisJCXVuc2lnbmVkIHNob3J0CXR1X2Jsb2NrOwkvKiBibG9jayAjICovCisJCXNob3J0CXR1X2NvZGU7CQkvKiBlcnJvciBjb2RlICovCisJCWNoYXIJdHVfc3R1ZmZbMV07CQkvKiByZXF1ZXN0IHBhY2tldCBzdHVmZiAqLworCX0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSB0aF91OworCWNoYXIJdGhfZGF0YVsxXTsJCQkvKiBkYXRhIG9yIGVycm9yIHN0cmluZyAqLworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCisjZGVmaW5lCXRoX2Jsb2NrCXRoX3UudHVfYmxvY2sKKyNkZWZpbmUJdGhfY29kZQkJdGhfdS50dV9jb2RlCisjZGVmaW5lCXRoX3N0dWZmCXRoX3UudHVfc3R1ZmYKKyNkZWZpbmUJdGhfbXNnCQl0aF9kYXRhCisKKy8qCisgKiBFcnJvciBjb2Rlcy4KKyAqLworI2RlZmluZQlFVU5ERUYJCTAJCS8qIG5vdCBkZWZpbmVkICovCisjZGVmaW5lCUVOT1RGT1VORAkxCQkvKiBmaWxlIG5vdCBmb3VuZCAqLworI2RlZmluZQlFQUNDRVNTCQkyCQkvKiBhY2Nlc3MgdmlvbGF0aW9uICovCisjZGVmaW5lCUVOT1NQQUNFCTMJCS8qIGRpc2sgZnVsbCBvciBhbGxvY2F0aW9uIGV4Y2VlZGVkICovCisjZGVmaW5lCUVCQURPUAkJNAkJLyogaWxsZWdhbCBURlRQIG9wZXJhdGlvbiAqLworI2RlZmluZQlFQkFESUQJCTUJCS8qIHVua25vd24gdHJhbnNmZXIgSUQgKi8KKyNkZWZpbmUJRUVYSVNUUwkJNgkJLyogZmlsZSBhbHJlYWR5IGV4aXN0cyAqLworI2RlZmluZQlFTk9VU0VSCQk3CQkvKiBubyBzdWNoIHVzZXIgKi8KKworI2VuZGlmIC8qIGFycGEvdGZ0cC5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMvYXV4dmVjLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMvYXV4dmVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk5NTczYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9hdXh2ZWMuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX19BU01fR0VORVJJQ19BVVhWRUNfSAorI2RlZmluZSBfX0FTTV9HRU5FUklDX0FVWFZFQ19ICisvKgorICogTm90IGFsbCBhcmNoaXRlY3R1cmVzIG5lZWQgdGhlaXIgb3duIGF1eHZlYy5oLCB0aGUgbW9zdAorICogY29tbW9uIGRlZmluaXRpb25zIGFyZSBhbHJlYWR5IGluIGxpbnV4L2F1eHZlYy5oLgorICovCisKKyNlbmRpZiAvKiBfX0FTTV9HRU5FUklDX0FVWFZFQ19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0c3BlcmxvbmcuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRzcGVybG9uZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MzJjM2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0c3BlcmxvbmcuaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIF9fQVNNX0dFTkVSSUNfQklUU19QRVJfTE9ORworI2RlZmluZSBfX0FTTV9HRU5FUklDX0JJVFNfUEVSX0xPTkcKKworLyoKKyAqIFRoZXJlIHNlZW1zIHRvIGJlIG5vIHdheSBvZiBkZXRlY3RpbmcgdGhpcyBhdXRvbWF0aWNhbGx5IGZyb20gdXNlcgorICogc3BhY2UsIHNvIDY0IGJpdCBhcmNoaXRlY3R1cmVzIHNob3VsZCBvdmVycmlkZSB0aGlzIGluIHRoZWlyCisgKiBiaXRzcGVybG9uZy5oLiBJbiBwYXJ0aWN1bGFyLCBhbiBhcmNoaXRlY3R1cmUgdGhhdCBzdXBwb3J0cworICogYm90aCAzMiBhbmQgNjQgYml0IHVzZXIgc3BhY2UgbXVzdCBub3QgcmVseSBvbiBDT05GSUdfNjRCSVQKKyAqIHRvIGRlY2lkZSBpdCwgYnV0IHJhdGhlciBjaGVjayBhIGNvbXBpbGVyIHByb3ZpZGVkIG1hY3JvLgorICovCisjaWZuZGVmIF9fQklUU19QRVJfTE9ORworI2RlZmluZSBfX0JJVFNfUEVSX0xPTkcgMzIKKyNlbmRpZgorCisjZW5kaWYgLyogX19BU01fR0VORVJJQ19CSVRTX1BFUl9MT05HICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMvZXJybm8tYmFzZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL2Vycm5vLWJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTExNTk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL2Vycm5vLWJhc2UuaApAQCAtMCwwICsxLDM5IEBACisjaWZuZGVmIF9BU01fR0VORVJJQ19FUlJOT19CQVNFX0gKKyNkZWZpbmUgX0FTTV9HRU5FUklDX0VSUk5PX0JBU0VfSAorCisjZGVmaW5lCUVQRVJNCQkgMQkvKiBPcGVyYXRpb24gbm90IHBlcm1pdHRlZCAqLworI2RlZmluZQlFTk9FTlQJCSAyCS8qIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgKi8KKyNkZWZpbmUJRVNSQ0gJCSAzCS8qIE5vIHN1Y2ggcHJvY2VzcyAqLworI2RlZmluZQlFSU5UUgkJIDQJLyogSW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwgKi8KKyNkZWZpbmUJRUlPCQkgNQkvKiBJL08gZXJyb3IgKi8KKyNkZWZpbmUJRU5YSU8JCSA2CS8qIE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MgKi8KKyNkZWZpbmUJRTJCSUcJCSA3CS8qIEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcgKi8KKyNkZWZpbmUJRU5PRVhFQwkJIDgJLyogRXhlYyBmb3JtYXQgZXJyb3IgKi8KKyNkZWZpbmUJRUJBREYJCSA5CS8qIEJhZCBmaWxlIG51bWJlciAqLworI2RlZmluZQlFQ0hJTEQJCTEwCS8qIE5vIGNoaWxkIHByb2Nlc3NlcyAqLworI2RlZmluZQlFQUdBSU4JCTExCS8qIFRyeSBhZ2FpbiAqLworI2RlZmluZQlFTk9NRU0JCTEyCS8qIE91dCBvZiBtZW1vcnkgKi8KKyNkZWZpbmUJRUFDQ0VTCQkxMwkvKiBQZXJtaXNzaW9uIGRlbmllZCAqLworI2RlZmluZQlFRkFVTFQJCTE0CS8qIEJhZCBhZGRyZXNzICovCisjZGVmaW5lCUVOT1RCTEsJCTE1CS8qIEJsb2NrIGRldmljZSByZXF1aXJlZCAqLworI2RlZmluZQlFQlVTWQkJMTYJLyogRGV2aWNlIG9yIHJlc291cmNlIGJ1c3kgKi8KKyNkZWZpbmUJRUVYSVNUCQkxNwkvKiBGaWxlIGV4aXN0cyAqLworI2RlZmluZQlFWERFVgkJMTgJLyogQ3Jvc3MtZGV2aWNlIGxpbmsgKi8KKyNkZWZpbmUJRU5PREVWCQkxOQkvKiBObyBzdWNoIGRldmljZSAqLworI2RlZmluZQlFTk9URElSCQkyMAkvKiBOb3QgYSBkaXJlY3RvcnkgKi8KKyNkZWZpbmUJRUlTRElSCQkyMQkvKiBJcyBhIGRpcmVjdG9yeSAqLworI2RlZmluZQlFSU5WQUwJCTIyCS8qIEludmFsaWQgYXJndW1lbnQgKi8KKyNkZWZpbmUJRU5GSUxFCQkyMwkvKiBGaWxlIHRhYmxlIG92ZXJmbG93ICovCisjZGVmaW5lCUVNRklMRQkJMjQJLyogVG9vIG1hbnkgb3BlbiBmaWxlcyAqLworI2RlZmluZQlFTk9UVFkJCTI1CS8qIE5vdCBhIHR5cGV3cml0ZXIgKi8KKyNkZWZpbmUJRVRYVEJTWQkJMjYJLyogVGV4dCBmaWxlIGJ1c3kgKi8KKyNkZWZpbmUJRUZCSUcJCTI3CS8qIEZpbGUgdG9vIGxhcmdlICovCisjZGVmaW5lCUVOT1NQQwkJMjgJLyogTm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UgKi8KKyNkZWZpbmUJRVNQSVBFCQkyOQkvKiBJbGxlZ2FsIHNlZWsgKi8KKyNkZWZpbmUJRVJPRlMJCTMwCS8qIFJlYWQtb25seSBmaWxlIHN5c3RlbSAqLworI2RlZmluZQlFTUxJTksJCTMxCS8qIFRvbyBtYW55IGxpbmtzICovCisjZGVmaW5lCUVQSVBFCQkzMgkvKiBCcm9rZW4gcGlwZSAqLworI2RlZmluZQlFRE9NCQkzMwkvKiBNYXRoIGFyZ3VtZW50IG91dCBvZiBkb21haW4gb2YgZnVuYyAqLworI2RlZmluZQlFUkFOR0UJCTM0CS8qIE1hdGggcmVzdWx0IG5vdCByZXByZXNlbnRhYmxlICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL2Vycm5vLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMvZXJybm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGNjMDNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL2Vycm5vLmgKQEAgLTAsMCArMSwxMTEgQEAKKyNpZm5kZWYgX0FTTV9HRU5FUklDX0VSUk5PX0gKKyNkZWZpbmUgX0FTTV9HRU5FUklDX0VSUk5PX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2Vycm5vLWJhc2UuaD4KKworI2RlZmluZQlFREVBRExLCQkzNQkvKiBSZXNvdXJjZSBkZWFkbG9jayB3b3VsZCBvY2N1ciAqLworI2RlZmluZQlFTkFNRVRPT0xPTkcJMzYJLyogRmlsZSBuYW1lIHRvbyBsb25nICovCisjZGVmaW5lCUVOT0xDSwkJMzcJLyogTm8gcmVjb3JkIGxvY2tzIGF2YWlsYWJsZSAqLworI2RlZmluZQlFTk9TWVMJCTM4CS8qIEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZQlFTk9URU1QVFkJMzkJLyogRGlyZWN0b3J5IG5vdCBlbXB0eSAqLworI2RlZmluZQlFTE9PUAkJNDAJLyogVG9vIG1hbnkgc3ltYm9saWMgbGlua3MgZW5jb3VudGVyZWQgKi8KKyNkZWZpbmUJRVdPVUxEQkxPQ0sJRUFHQUlOCS8qIE9wZXJhdGlvbiB3b3VsZCBibG9jayAqLworI2RlZmluZQlFTk9NU0cJCTQyCS8qIE5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlICovCisjZGVmaW5lCUVJRFJNCQk0MwkvKiBJZGVudGlmaWVyIHJlbW92ZWQgKi8KKyNkZWZpbmUJRUNIUk5HCQk0NAkvKiBDaGFubmVsIG51bWJlciBvdXQgb2YgcmFuZ2UgKi8KKyNkZWZpbmUJRUwyTlNZTkMJNDUJLyogTGV2ZWwgMiBub3Qgc3luY2hyb25pemVkICovCisjZGVmaW5lCUVMM0hMVAkJNDYJLyogTGV2ZWwgMyBoYWx0ZWQgKi8KKyNkZWZpbmUJRUwzUlNUCQk0NwkvKiBMZXZlbCAzIHJlc2V0ICovCisjZGVmaW5lCUVMTlJORwkJNDgJLyogTGluayBudW1iZXIgb3V0IG9mIHJhbmdlICovCisjZGVmaW5lCUVVTkFUQ0gJCTQ5CS8qIFByb3RvY29sIGRyaXZlciBub3QgYXR0YWNoZWQgKi8KKyNkZWZpbmUJRU5PQ1NJCQk1MAkvKiBObyBDU0kgc3RydWN0dXJlIGF2YWlsYWJsZSAqLworI2RlZmluZQlFTDJITFQJCTUxCS8qIExldmVsIDIgaGFsdGVkICovCisjZGVmaW5lCUVCQURFCQk1MgkvKiBJbnZhbGlkIGV4Y2hhbmdlICovCisjZGVmaW5lCUVCQURSCQk1MwkvKiBJbnZhbGlkIHJlcXVlc3QgZGVzY3JpcHRvciAqLworI2RlZmluZQlFWEZVTEwJCTU0CS8qIEV4Y2hhbmdlIGZ1bGwgKi8KKyNkZWZpbmUJRU5PQU5PCQk1NQkvKiBObyBhbm9kZSAqLworI2RlZmluZQlFQkFEUlFDCQk1NgkvKiBJbnZhbGlkIHJlcXVlc3QgY29kZSAqLworI2RlZmluZQlFQkFEU0xUCQk1NwkvKiBJbnZhbGlkIHNsb3QgKi8KKworI2RlZmluZQlFREVBRExPQ0sJRURFQURMSworCisjZGVmaW5lCUVCRk9OVAkJNTkJLyogQmFkIGZvbnQgZmlsZSBmb3JtYXQgKi8KKyNkZWZpbmUJRU5PU1RSCQk2MAkvKiBEZXZpY2Ugbm90IGEgc3RyZWFtICovCisjZGVmaW5lCUVOT0RBVEEJCTYxCS8qIE5vIGRhdGEgYXZhaWxhYmxlICovCisjZGVmaW5lCUVUSU1FCQk2MgkvKiBUaW1lciBleHBpcmVkICovCisjZGVmaW5lCUVOT1NSCQk2MwkvKiBPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMgKi8KKyNkZWZpbmUJRU5PTkVUCQk2NAkvKiBNYWNoaW5lIGlzIG5vdCBvbiB0aGUgbmV0d29yayAqLworI2RlZmluZQlFTk9QS0cJCTY1CS8qIFBhY2thZ2Ugbm90IGluc3RhbGxlZCAqLworI2RlZmluZQlFUkVNT1RFCQk2NgkvKiBPYmplY3QgaXMgcmVtb3RlICovCisjZGVmaW5lCUVOT0xJTksJCTY3CS8qIExpbmsgaGFzIGJlZW4gc2V2ZXJlZCAqLworI2RlZmluZQlFQURWCQk2OAkvKiBBZHZlcnRpc2UgZXJyb3IgKi8KKyNkZWZpbmUJRVNSTU5UCQk2OQkvKiBTcm1vdW50IGVycm9yICovCisjZGVmaW5lCUVDT01NCQk3MAkvKiBDb21tdW5pY2F0aW9uIGVycm9yIG9uIHNlbmQgKi8KKyNkZWZpbmUJRVBST1RPCQk3MQkvKiBQcm90b2NvbCBlcnJvciAqLworI2RlZmluZQlFTVVMVElIT1AJNzIJLyogTXVsdGlob3AgYXR0ZW1wdGVkICovCisjZGVmaW5lCUVET1RET1QJCTczCS8qIFJGUyBzcGVjaWZpYyBlcnJvciAqLworI2RlZmluZQlFQkFETVNHCQk3NAkvKiBOb3QgYSBkYXRhIG1lc3NhZ2UgKi8KKyNkZWZpbmUJRU9WRVJGTE9XCTc1CS8qIFZhbHVlIHRvbyBsYXJnZSBmb3IgZGVmaW5lZCBkYXRhIHR5cGUgKi8KKyNkZWZpbmUJRU5PVFVOSVEJNzYJLyogTmFtZSBub3QgdW5pcXVlIG9uIG5ldHdvcmsgKi8KKyNkZWZpbmUJRUJBREZECQk3NwkvKiBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlICovCisjZGVmaW5lCUVSRU1DSEcJCTc4CS8qIFJlbW90ZSBhZGRyZXNzIGNoYW5nZWQgKi8KKyNkZWZpbmUJRUxJQkFDQwkJNzkJLyogQ2FuIG5vdCBhY2Nlc3MgYSBuZWVkZWQgc2hhcmVkIGxpYnJhcnkgKi8KKyNkZWZpbmUJRUxJQkJBRAkJODAJLyogQWNjZXNzaW5nIGEgY29ycnVwdGVkIHNoYXJlZCBsaWJyYXJ5ICovCisjZGVmaW5lCUVMSUJTQ04JCTgxCS8qIC5saWIgc2VjdGlvbiBpbiBhLm91dCBjb3JydXB0ZWQgKi8KKyNkZWZpbmUJRUxJQk1BWAkJODIJLyogQXR0ZW1wdGluZyB0byBsaW5rIGluIHRvbyBtYW55IHNoYXJlZCBsaWJyYXJpZXMgKi8KKyNkZWZpbmUJRUxJQkVYRUMJODMJLyogQ2Fubm90IGV4ZWMgYSBzaGFyZWQgbGlicmFyeSBkaXJlY3RseSAqLworI2RlZmluZQlFSUxTRVEJCTg0CS8qIElsbGVnYWwgYnl0ZSBzZXF1ZW5jZSAqLworI2RlZmluZQlFUkVTVEFSVAk4NQkvKiBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbCBzaG91bGQgYmUgcmVzdGFydGVkICovCisjZGVmaW5lCUVTVFJQSVBFCTg2CS8qIFN0cmVhbXMgcGlwZSBlcnJvciAqLworI2RlZmluZQlFVVNFUlMJCTg3CS8qIFRvbyBtYW55IHVzZXJzICovCisjZGVmaW5lCUVOT1RTT0NLCTg4CS8qIFNvY2tldCBvcGVyYXRpb24gb24gbm9uLXNvY2tldCAqLworI2RlZmluZQlFREVTVEFERFJSRVEJODkJLyogRGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZCAqLworI2RlZmluZQlFTVNHU0laRQk5MAkvKiBNZXNzYWdlIHRvbyBsb25nICovCisjZGVmaW5lCUVQUk9UT1RZUEUJOTEJLyogUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0ICovCisjZGVmaW5lCUVOT1BST1RPT1BUCTkyCS8qIFByb3RvY29sIG5vdCBhdmFpbGFibGUgKi8KKyNkZWZpbmUJRVBST1RPTk9TVVBQT1JUCTkzCS8qIFByb3RvY29sIG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUJRVNPQ0tUTk9TVVBQT1JUCTk0CS8qIFNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUJRU9QTk9UU1VQUAk5NQkvKiBPcGVyYXRpb24gbm90IHN1cHBvcnRlZCBvbiB0cmFuc3BvcnQgZW5kcG9pbnQgKi8KKyNkZWZpbmUJRVBGTk9TVVBQT1JUCTk2CS8qIFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lCUVBRk5PU1VQUE9SVAk5NwkvKiBBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sICovCisjZGVmaW5lCUVBRERSSU5VU0UJOTgJLyogQWRkcmVzcyBhbHJlYWR5IGluIHVzZSAqLworI2RlZmluZQlFQUREUk5PVEFWQUlMCTk5CS8qIENhbm5vdCBhc3NpZ24gcmVxdWVzdGVkIGFkZHJlc3MgKi8KKyNkZWZpbmUJRU5FVERPV04JMTAwCS8qIE5ldHdvcmsgaXMgZG93biAqLworI2RlZmluZQlFTkVUVU5SRUFDSAkxMDEJLyogTmV0d29yayBpcyB1bnJlYWNoYWJsZSAqLworI2RlZmluZQlFTkVUUkVTRVQJMTAyCS8qIE5ldHdvcmsgZHJvcHBlZCBjb25uZWN0aW9uIGJlY2F1c2Ugb2YgcmVzZXQgKi8KKyNkZWZpbmUJRUNPTk5BQk9SVEVECTEwMwkvKiBTb2Z0d2FyZSBjYXVzZWQgY29ubmVjdGlvbiBhYm9ydCAqLworI2RlZmluZQlFQ09OTlJFU0VUCTEwNAkvKiBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIgKi8KKyNkZWZpbmUJRU5PQlVGUwkJMTA1CS8qIE5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUgKi8KKyNkZWZpbmUJRUlTQ09OTgkJMTA2CS8qIFRyYW5zcG9ydCBlbmRwb2ludCBpcyBhbHJlYWR5IGNvbm5lY3RlZCAqLworI2RlZmluZQlFTk9UQ09OTgkxMDcJLyogVHJhbnNwb3J0IGVuZHBvaW50IGlzIG5vdCBjb25uZWN0ZWQgKi8KKyNkZWZpbmUJRVNIVVRET1dOCTEwOAkvKiBDYW5ub3Qgc2VuZCBhZnRlciB0cmFuc3BvcnQgZW5kcG9pbnQgc2h1dGRvd24gKi8KKyNkZWZpbmUJRVRPT01BTllSRUZTCTEwOQkvKiBUb28gbWFueSByZWZlcmVuY2VzOiBjYW5ub3Qgc3BsaWNlICovCisjZGVmaW5lCUVUSU1FRE9VVAkxMTAJLyogQ29ubmVjdGlvbiB0aW1lZCBvdXQgKi8KKyNkZWZpbmUJRUNPTk5SRUZVU0VECTExMQkvKiBDb25uZWN0aW9uIHJlZnVzZWQgKi8KKyNkZWZpbmUJRUhPU1RET1dOCTExMgkvKiBIb3N0IGlzIGRvd24gKi8KKyNkZWZpbmUJRUhPU1RVTlJFQUNICTExMwkvKiBObyByb3V0ZSB0byBob3N0ICovCisjZGVmaW5lCUVBTFJFQURZCTExNAkvKiBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcyAqLworI2RlZmluZQlFSU5QUk9HUkVTUwkxMTUJLyogT3BlcmF0aW9uIG5vdyBpbiBwcm9ncmVzcyAqLworI2RlZmluZQlFU1RBTEUJCTExNgkvKiBTdGFsZSBORlMgZmlsZSBoYW5kbGUgKi8KKyNkZWZpbmUJRVVDTEVBTgkJMTE3CS8qIFN0cnVjdHVyZSBuZWVkcyBjbGVhbmluZyAqLworI2RlZmluZQlFTk9UTkFNCQkxMTgJLyogTm90IGEgWEVOSVggbmFtZWQgdHlwZSBmaWxlICovCisjZGVmaW5lCUVOQVZBSUwJCTExOQkvKiBObyBYRU5JWCBzZW1hcGhvcmVzIGF2YWlsYWJsZSAqLworI2RlZmluZQlFSVNOQU0JCTEyMAkvKiBJcyBhIG5hbWVkIHR5cGUgZmlsZSAqLworI2RlZmluZQlFUkVNT1RFSU8JMTIxCS8qIFJlbW90ZSBJL08gZXJyb3IgKi8KKyNkZWZpbmUJRURRVU9UCQkxMjIJLyogUXVvdGEgZXhjZWVkZWQgKi8KKworI2RlZmluZQlFTk9NRURJVU0JMTIzCS8qIE5vIG1lZGl1bSBmb3VuZCAqLworI2RlZmluZQlFTUVESVVNVFlQRQkxMjQJLyogV3JvbmcgbWVkaXVtIHR5cGUgKi8KKyNkZWZpbmUJRUNBTkNFTEVECTEyNQkvKiBPcGVyYXRpb24gQ2FuY2VsZWQgKi8KKyNkZWZpbmUJRU5PS0VZCQkxMjYJLyogUmVxdWlyZWQga2V5IG5vdCBhdmFpbGFibGUgKi8KKyNkZWZpbmUJRUtFWUVYUElSRUQJMTI3CS8qIEtleSBoYXMgZXhwaXJlZCAqLworI2RlZmluZQlFS0VZUkVWT0tFRAkxMjgJLyogS2V5IGhhcyBiZWVuIHJldm9rZWQgKi8KKyNkZWZpbmUJRUtFWVJFSkVDVEVECTEyOQkvKiBLZXkgd2FzIHJlamVjdGVkIGJ5IHNlcnZpY2UgKi8KKworLyogZm9yIHJvYnVzdCBtdXRleGVzICovCisjZGVmaW5lCUVPV05FUkRFQUQJMTMwCS8qIE93bmVyIGRpZWQgKi8KKyNkZWZpbmUJRU5PVFJFQ09WRVJBQkxFCTEzMQkvKiBTdGF0ZSBub3QgcmVjb3ZlcmFibGUgKi8KKworI2RlZmluZSBFUkZLSUxMCQkxMzIJLyogT3BlcmF0aW9uIG5vdCBwb3NzaWJsZSBkdWUgdG8gUkYta2lsbCAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL2ZjbnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZjMTZlMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oCkBAIC0wLDAgKzEsMTk2IEBACisjaWZuZGVmIF9BU01fR0VORVJJQ19GQ05UTF9ICisjZGVmaW5lIF9BU01fR0VORVJJQ19GQ05UTF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICogRk1PREVfRVhFQyBpcyAweDIwCisgKiBGTU9ERV9OT05PVElGWSBpcyAweDEwMDAwMDAKKyAqIFRoZXNlIGNhbm5vdCBiZSB1c2VkIGJ5IHVzZXJzcGFjZSBPXyogdW50aWwgaW50ZXJuYWwgYW5kIGV4dGVybmFsIG9wZW4KKyAqIGZsYWdzIGFyZSBzcGxpdC4KKyAqIC1FcmljIFBhcmlzCisgKi8KKworLyoKKyAqIFdoZW4gaW50cm9kdWNpbmcgbmV3IE9fKiBiaXRzLCBwbGVhc2UgY2hlY2sgaXRzIHVuaXF1ZW5lc3MgaW4gZmNudGxfaW5pdCgpLgorICovCisKKyNkZWZpbmUgT19BQ0NNT0RFCTAwMDAwMDAzCisjZGVmaW5lIE9fUkRPTkxZCTAwMDAwMDAwCisjZGVmaW5lIE9fV1JPTkxZCTAwMDAwMDAxCisjZGVmaW5lIE9fUkRXUgkJMDAwMDAwMDIKKyNpZm5kZWYgT19DUkVBVAorI2RlZmluZSBPX0NSRUFUCQkwMDAwMDEwMAkvKiBub3QgZmNudGwgKi8KKyNlbmRpZgorI2lmbmRlZiBPX0VYQ0wKKyNkZWZpbmUgT19FWENMCQkwMDAwMDIwMAkvKiBub3QgZmNudGwgKi8KKyNlbmRpZgorI2lmbmRlZiBPX05PQ1RUWQorI2RlZmluZSBPX05PQ1RUWQkwMDAwMDQwMAkvKiBub3QgZmNudGwgKi8KKyNlbmRpZgorI2lmbmRlZiBPX1RSVU5DCisjZGVmaW5lIE9fVFJVTkMJCTAwMDAxMDAwCS8qIG5vdCBmY250bCAqLworI2VuZGlmCisjaWZuZGVmIE9fQVBQRU5ECisjZGVmaW5lIE9fQVBQRU5ECTAwMDAyMDAwCisjZW5kaWYKKyNpZm5kZWYgT19OT05CTE9DSworI2RlZmluZSBPX05PTkJMT0NLCTAwMDA0MDAwCisjZW5kaWYKKyNpZm5kZWYgT19EU1lOQworI2RlZmluZSBPX0RTWU5DCQkwMDAxMDAwMAkvKiB1c2VkIHRvIGJlIE9fU1lOQywgc2VlIGJlbG93ICovCisjZW5kaWYKKyNpZm5kZWYgRkFTWU5DCisjZGVmaW5lIEZBU1lOQwkJMDAwMjAwMDAJLyogZmNudGwsIGZvciBCU0QgY29tcGF0aWJpbGl0eSAqLworI2VuZGlmCisjaWZuZGVmIE9fRElSRUNUCisjZGVmaW5lIE9fRElSRUNUCTAwMDQwMDAwCS8qIGRpcmVjdCBkaXNrIGFjY2VzcyBoaW50ICovCisjZW5kaWYKKyNpZm5kZWYgT19MQVJHRUZJTEUKKyNkZWZpbmUgT19MQVJHRUZJTEUJMDAxMDAwMDAKKyNlbmRpZgorI2lmbmRlZiBPX0RJUkVDVE9SWQorI2RlZmluZSBPX0RJUkVDVE9SWQkwMDIwMDAwMAkvKiBtdXN0IGJlIGEgZGlyZWN0b3J5ICovCisjZW5kaWYKKyNpZm5kZWYgT19OT0ZPTExPVworI2RlZmluZSBPX05PRk9MTE9XCTAwNDAwMDAwCS8qIGRvbid0IGZvbGxvdyBsaW5rcyAqLworI2VuZGlmCisjaWZuZGVmIE9fTk9BVElNRQorI2RlZmluZSBPX05PQVRJTUUJMDEwMDAwMDAKKyNlbmRpZgorI2lmbmRlZiBPX0NMT0VYRUMKKyNkZWZpbmUgT19DTE9FWEVDCTAyMDAwMDAwCS8qIHNldCBjbG9zZV9vbl9leGVjICovCisjZW5kaWYKKworLyoKKyAqIEJlZm9yZSBMaW51eCAyLjYuMzMgb25seSBPX0RTWU5DIHNlbWFudGljcyB3ZXJlIGltcGxlbWVudGVkLCBidXQgdXNpbmcKKyAqIHRoZSBPX1NZTkMgZmxhZy4gIFdlIGNvbnRpbnVlIHRvIHVzZSB0aGUgZXhpc3RpbmcgbnVtZXJpY2FsIHZhbHVlCisgKiBmb3IgT19EU1lOQyBzZW1hbnRpY3Mgbm93LCBidXQgdXNpbmcgdGhlIGNvcnJlY3Qgc3ltYm9saWMgbmFtZSBmb3IgaXQuCisgKiBUaGlzIG5ldyB2YWx1ZSBpcyB1c2VkIHRvIHJlcXVlc3QgdHJ1ZSBQb3NpeCBPX1NZTkMgc2VtYW50aWNzLiAgSXQgaXMKKyAqIGRlZmluZWQgaW4gdGhpcyBzdHJhbmdlIHdheSB0byBtYWtlIHN1cmUgYXBwbGljYXRpb25zIGNvbXBpbGVkIGFnYWluc3QKKyAqIG5ldyBoZWFkZXJzIGdldCBhdCBsZWFzdCBPX0RTWU5DIHNlbWFudGljcyBvbiBvbGRlciBrZXJuZWxzLgorICoKKyAqIFRoaXMgaGFzIHRoZSBuaWNlIHNpZGUtZWZmZWN0IHRoYXQgd2UgY2FuIHNpbXBseSB0ZXN0IGZvciBPX0RTWU5DCisgKiB3aGVyZXZlciB3ZSBkbyBub3QgY2FyZSBpZiBPX0RTWU5DIG9yIE9fU1lOQyBpcyB1c2VkLgorICoKKyAqIE5vdGU6IF9fT19TWU5DIG11c3QgbmV2ZXIgYmUgdXNlZCBkaXJlY3RseS4KKyAqLworI2lmbmRlZiBPX1NZTkMKKyNkZWZpbmUgX19PX1NZTkMJMDQwMDAwMDAKKyNkZWZpbmUgT19TWU5DCQkoX19PX1NZTkN8T19EU1lOQykKKyNlbmRpZgorCisjaWZuZGVmIE9fTkRFTEFZCisjZGVmaW5lIE9fTkRFTEFZCU9fTk9OQkxPQ0sKKyNlbmRpZgorCisjZGVmaW5lIEZfRFVQRkQJCTAJLyogZHVwICovCisjZGVmaW5lIEZfR0VURkQJCTEJLyogZ2V0IGNsb3NlX29uX2V4ZWMgKi8KKyNkZWZpbmUgRl9TRVRGRAkJMgkvKiBzZXQvY2xlYXIgY2xvc2Vfb25fZXhlYyAqLworI2RlZmluZSBGX0dFVEZMCQkzCS8qIGdldCBmaWxlLT5mX2ZsYWdzICovCisjZGVmaW5lIEZfU0VURkwJCTQJLyogc2V0IGZpbGUtPmZfZmxhZ3MgKi8KKyNpZm5kZWYgRl9HRVRMSworI2RlZmluZSBGX0dFVExLCQk1CisjZGVmaW5lIEZfU0VUTEsJCTYKKyNkZWZpbmUgRl9TRVRMS1cJNworI2VuZGlmCisjaWZuZGVmIEZfU0VUT1dOCisjZGVmaW5lIEZfU0VUT1dOCTgJLyogZm9yIHNvY2tldHMuICovCisjZGVmaW5lIEZfR0VUT1dOCTkJLyogZm9yIHNvY2tldHMuICovCisjZW5kaWYKKyNpZm5kZWYgRl9TRVRTSUcKKyNkZWZpbmUgRl9TRVRTSUcJMTAJLyogZm9yIHNvY2tldHMuICovCisjZGVmaW5lIEZfR0VUU0lHCTExCS8qIGZvciBzb2NrZXRzLiAqLworI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHXzY0QklUCisjaWZuZGVmIEZfR0VUTEs2NAorI2RlZmluZSBGX0dFVExLNjQJMTIJLyogIHVzaW5nICdzdHJ1Y3QgZmxvY2s2NCcgKi8KKyNkZWZpbmUgRl9TRVRMSzY0CTEzCisjZGVmaW5lIEZfU0VUTEtXNjQJMTQKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgRl9TRVRPV05fRVgKKyNkZWZpbmUgRl9TRVRPV05fRVgJMTUKKyNkZWZpbmUgRl9HRVRPV05fRVgJMTYKKyNlbmRpZgorCisjZGVmaW5lIEZfT1dORVJfVElECTAKKyNkZWZpbmUgRl9PV05FUl9QSUQJMQorI2RlZmluZSBGX09XTkVSX1BHUlAJMgorCitzdHJ1Y3QgZl9vd25lcl9leCB7CisJaW50CXR5cGU7CisJX19rZXJuZWxfcGlkX3QJcGlkOworfTsKKworLyogZm9yIEZfW0dFVHxTRVRdRkwgKi8KKyNkZWZpbmUgRkRfQ0xPRVhFQwkxCS8qIGFjdHVhbGx5IGFueXRoaW5nIHdpdGggbG93IGJpdCBzZXQgZ29lcyAqLworCisvKiBmb3IgcG9zaXggZmNudGwoKSBhbmQgbG9ja2YoKSAqLworI2lmbmRlZiBGX1JETENLCisjZGVmaW5lIEZfUkRMQ0sJCTAKKyNkZWZpbmUgRl9XUkxDSwkJMQorI2RlZmluZSBGX1VOTENLCQkyCisjZW5kaWYKKworLyogZm9yIG9sZCBpbXBsZW1lbnRhdGlvbiBvZiBic2QgZmxvY2sgKCkgKi8KKyNpZm5kZWYgRl9FWExDSworI2RlZmluZSBGX0VYTENLCQk0CS8qIG9yIDMgKi8KKyNkZWZpbmUgRl9TSExDSwkJOAkvKiBvciA0ICovCisjZW5kaWYKKworLyogZm9yIGxlYXNlcyAqLworI2lmbmRlZiBGX0lOUFJPR1JFU1MKKyNkZWZpbmUgRl9JTlBST0dSRVNTCTE2CisjZW5kaWYKKworLyogb3BlcmF0aW9ucyBmb3IgYnNkIGZsb2NrKCksIGFsc28gdXNlZCBieSB0aGUga2VybmVsIGltcGxlbWVudGF0aW9uICovCisjZGVmaW5lIExPQ0tfU0gJCTEJLyogc2hhcmVkIGxvY2sgKi8KKyNkZWZpbmUgTE9DS19FWAkJMgkvKiBleGNsdXNpdmUgbG9jayAqLworI2RlZmluZSBMT0NLX05CCQk0CS8qIG9yJ2Qgd2l0aCBvbmUgb2YgdGhlIGFib3ZlIHRvIHByZXZlbnQKKwkJCQkgICBibG9ja2luZyAqLworI2RlZmluZSBMT0NLX1VOCQk4CS8qIHJlbW92ZSBsb2NrICovCisKKyNkZWZpbmUgTE9DS19NQU5ECTMyCS8qIFRoaXMgaXMgYSBtYW5kYXRvcnkgZmxvY2sgLi4uICovCisjZGVmaW5lIExPQ0tfUkVBRAk2NAkvKiB3aGljaCBhbGxvd3MgY29uY3VycmVudCByZWFkIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgTE9DS19XUklURQkxMjgJLyogd2hpY2ggYWxsb3dzIGNvbmN1cnJlbnQgd3JpdGUgb3BlcmF0aW9ucyAqLworI2RlZmluZSBMT0NLX1JXCQkxOTIJLyogd2hpY2ggYWxsb3dzIGNvbmN1cnJlbnQgcmVhZCAmIHdyaXRlIG9wcyAqLworCisjZGVmaW5lIEZfTElOVVhfU1BFQ0lGSUNfQkFTRQkxMDI0CisKKyNpZm5kZWYgSEFWRV9BUkNIX1NUUlVDVF9GTE9DSworI2lmbmRlZiBfX0FSQ0hfRkxPQ0tfUEFECisjZGVmaW5lIF9fQVJDSF9GTE9DS19QQUQKKyNlbmRpZgorCitzdHJ1Y3QgZmxvY2sgeworCXNob3J0CWxfdHlwZTsKKwlzaG9ydAlsX3doZW5jZTsKKwlfX2tlcm5lbF9vZmZfdAlsX3N0YXJ0OworCV9fa2VybmVsX29mZl90CWxfbGVuOworCV9fa2VybmVsX3BpZF90CWxfcGlkOworCV9fQVJDSF9GTE9DS19QQUQKK307CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfNjRCSVQKKworI2lmbmRlZiBIQVZFX0FSQ0hfU1RSVUNUX0ZMT0NLNjQKKyNpZm5kZWYgX19BUkNIX0ZMT0NLNjRfUEFECisjZGVmaW5lIF9fQVJDSF9GTE9DSzY0X1BBRAorI2VuZGlmCisKK3N0cnVjdCBmbG9jazY0IHsKKwlzaG9ydCAgbF90eXBlOworCXNob3J0ICBsX3doZW5jZTsKKwlfX2tlcm5lbF9sb2ZmX3QgbF9zdGFydDsKKwlfX2tlcm5lbF9sb2ZmX3QgbF9sZW47CisJX19rZXJuZWxfcGlkX3QgIGxfcGlkOworCV9fQVJDSF9GTE9DSzY0X1BBRAorfTsKKyNlbmRpZgorI2VuZGlmIC8qICFDT05GSUdfNjRCSVQgKi8KKworI2VuZGlmIC8qIF9BU01fR0VORVJJQ19GQ05UTF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMvaW50LWw2NC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL2ludC1sNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjcxYWUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL2ludC1sNjQuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogYXNtLWdlbmVyaWMvaW50LWw2NC5oCisgKgorICogSW50ZWdlciBkZWNsYXJhdGlvbnMgZm9yIGFyY2hpdGVjdHVyZXMgd2hpY2ggdXNlICJsb25nIgorICogZm9yIDY0LWJpdCB0eXBlcy4KKyAqLworCisjaWZuZGVmIF9BU01fR0VORVJJQ19JTlRfTDY0X0gKKyNkZWZpbmUgX0FTTV9HRU5FUklDX0lOVF9MNjRfSAorCisjaW5jbHVkZSA8YXNtL2JpdHNwZXJsb25nLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKgorICogX194eCBpcyBvazogaXQgZG9lc24ndCBwb2xsdXRlIHRoZSBQT1NJWCBuYW1lc3BhY2UuIFVzZSB0aGVzZSBpbiB0aGUKKyAqIGhlYWRlciBmaWxlcyBleHBvcnRlZCB0byB1c2VyIHNwYWNlCisgKi8KKwordHlwZWRlZiBfX3NpZ25lZF9fIGNoYXIgX19zODsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBfX3U4OworCit0eXBlZGVmIF9fc2lnbmVkX18gc2hvcnQgX19zMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdTE2OworCit0eXBlZGVmIF9fc2lnbmVkX18gaW50IF9fczMyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX191MzI7CisKK3R5cGVkZWYgX19zaWduZWRfXyBsb25nIF9fczY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdTY0OworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKworI2VuZGlmIC8qIF9BU01fR0VORVJJQ19JTlRfTDY0X0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9pbnQtbGw2NC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL2ludC1sbDY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVkZTA0NwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9pbnQtbGw2NC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBhc20tZ2VuZXJpYy9pbnQtbGw2NC5oCisgKgorICogSW50ZWdlciBkZWNsYXJhdGlvbnMgZm9yIGFyY2hpdGVjdHVyZXMgd2hpY2ggdXNlICJsb25nIGxvbmciCisgKiBmb3IgNjQtYml0IHR5cGVzLgorICovCisKKyNpZm5kZWYgX0FTTV9HRU5FUklDX0lOVF9MTDY0X0gKKyNkZWZpbmUgX0FTTV9HRU5FUklDX0lOVF9MTDY0X0gKKworI2luY2x1ZGUgPGFzbS9iaXRzcGVybG9uZy5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworLyoKKyAqIF9feHggaXMgb2s6IGl0IGRvZXNuJ3QgcG9sbHV0ZSB0aGUgUE9TSVggbmFtZXNwYWNlLiBVc2UgdGhlc2UgaW4gdGhlCisgKiBoZWFkZXIgZmlsZXMgZXhwb3J0ZWQgdG8gdXNlciBzcGFjZQorICovCisKK3R5cGVkZWYgX19zaWduZWRfXyBjaGFyIF9fczg7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191ODsKKwordHlwZWRlZiBfX3NpZ25lZF9fIHNob3J0IF9fczE2OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3UxNjsKKwordHlwZWRlZiBfX3NpZ25lZF9fIGludCBfX3MzMjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IF9fdTMyOworCisjaWZkZWYgX19HTlVDX18KK19fZXh0ZW5zaW9uX18gdHlwZWRlZiBfX3NpZ25lZF9fIGxvbmcgbG9uZyBfX3M2NDsKK19fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgX191NjQ7CisjZWxzZQordHlwZWRlZiBfX3NpZ25lZF9fIGxvbmcgbG9uZyBfX3M2NDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9fdTY0OworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworCisjZW5kaWYgLyogX0FTTV9HRU5FUklDX0lOVF9MTDY0X0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9pb2N0bC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL2lvY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRhMmM3ZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9pb2N0bC5oCkBAIC0wLDAgKzEsOTYgQEAKKyNpZm5kZWYgX0FTTV9HRU5FUklDX0lPQ1RMX0gKKyNkZWZpbmUgX0FTTV9HRU5FUklDX0lPQ1RMX0gKKworLyogaW9jdGwgY29tbWFuZCBlbmNvZGluZzogMzIgYml0cyB0b3RhbCwgY29tbWFuZCBpbiBsb3dlciAxNiBiaXRzLAorICogc2l6ZSBvZiB0aGUgcGFyYW1ldGVyIHN0cnVjdHVyZSBpbiB0aGUgbG93ZXIgMTQgYml0cyBvZiB0aGUKKyAqIHVwcGVyIDE2IGJpdHMuCisgKiBFbmNvZGluZyB0aGUgc2l6ZSBvZiB0aGUgcGFyYW1ldGVyIHN0cnVjdHVyZSBpbiB0aGUgaW9jdGwgcmVxdWVzdAorICogaXMgdXNlZnVsIGZvciBjYXRjaGluZyBwcm9ncmFtcyBjb21waWxlZCB3aXRoIG9sZCB2ZXJzaW9ucworICogYW5kIHRvIGF2b2lkIG92ZXJ3cml0aW5nIHVzZXIgc3BhY2Ugb3V0c2lkZSB0aGUgdXNlciBidWZmZXIgYXJlYS4KKyAqIFRoZSBoaWdoZXN0IDIgYml0cyBhcmUgcmVzZXJ2ZWQgZm9yIGluZGljYXRpbmcgdGhlIGBgYWNjZXNzIG1vZGUnJy4KKyAqIE5PVEU6IFRoaXMgbGltaXRzIHRoZSBtYXggcGFyYW1ldGVyIHNpemUgdG8gMTZrQiAtMSAhCisgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgaXMgZm9yIGNvbXBhdGliaWxpdHkgYWNyb3NzIHRoZSB2YXJpb3VzIExpbnV4CisgKiBwbGF0Zm9ybXMuICBUaGUgZ2VuZXJpYyBpb2N0bCBudW1iZXJpbmcgc2NoZW1lIGRvZXNuJ3QgcmVhbGx5IGVuZm9yY2UKKyAqIGEgdHlwZSBmaWVsZC4gIERlIGZhY3RvLCBob3dldmVyLCB0aGUgdG9wIDggYml0cyBvZiB0aGUgbG93ZXIgMTYKKyAqIGJpdHMgYXJlIGluZGVlZCB1c2VkIGFzIGEgdHlwZSBmaWVsZCwgc28gd2UgbWlnaHQganVzdCBhcyB3ZWxsIG1ha2UKKyAqIHRoaXMgZXhwbGljaXQgaGVyZS4gIFBsZWFzZSBiZSBzdXJlIHRvIHVzZSB0aGUgZGVjb2RpbmcgbWFjcm9zCisgKiBiZWxvdyBmcm9tIG5vdyBvbi4KKyAqLworI2RlZmluZSBfSU9DX05SQklUUwk4CisjZGVmaW5lIF9JT0NfVFlQRUJJVFMJOAorCisvKgorICogTGV0IGFueSBhcmNoaXRlY3R1cmUgb3ZlcnJpZGUgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgYmVmb3JlCisgKiBpbmNsdWRpbmcgdGhpcyBmaWxlLgorICovCisKKyNpZm5kZWYgX0lPQ19TSVpFQklUUworIyBkZWZpbmUgX0lPQ19TSVpFQklUUwkxNAorI2VuZGlmCisKKyNpZm5kZWYgX0lPQ19ESVJCSVRTCisjIGRlZmluZSBfSU9DX0RJUkJJVFMJMgorI2VuZGlmCisKKyNkZWZpbmUgX0lPQ19OUk1BU0sJKCgxIDw8IF9JT0NfTlJCSVRTKS0xKQorI2RlZmluZSBfSU9DX1RZUEVNQVNLCSgoMSA8PCBfSU9DX1RZUEVCSVRTKS0xKQorI2RlZmluZSBfSU9DX1NJWkVNQVNLCSgoMSA8PCBfSU9DX1NJWkVCSVRTKS0xKQorI2RlZmluZSBfSU9DX0RJUk1BU0sJKCgxIDw8IF9JT0NfRElSQklUUyktMSkKKworI2RlZmluZSBfSU9DX05SU0hJRlQJMAorI2RlZmluZSBfSU9DX1RZUEVTSElGVAkoX0lPQ19OUlNISUZUK19JT0NfTlJCSVRTKQorI2RlZmluZSBfSU9DX1NJWkVTSElGVAkoX0lPQ19UWVBFU0hJRlQrX0lPQ19UWVBFQklUUykKKyNkZWZpbmUgX0lPQ19ESVJTSElGVAkoX0lPQ19TSVpFU0hJRlQrX0lPQ19TSVpFQklUUykKKworLyoKKyAqIERpcmVjdGlvbiBiaXRzLCB3aGljaCBhbnkgYXJjaGl0ZWN0dXJlIGNhbiBjaG9vc2UgdG8gb3ZlcnJpZGUKKyAqIGJlZm9yZSBpbmNsdWRpbmcgdGhpcyBmaWxlLgorICovCisKKyNpZm5kZWYgX0lPQ19OT05FCisjIGRlZmluZSBfSU9DX05PTkUJMFUKKyNlbmRpZgorCisjaWZuZGVmIF9JT0NfV1JJVEUKKyMgZGVmaW5lIF9JT0NfV1JJVEUJMVUKKyNlbmRpZgorCisjaWZuZGVmIF9JT0NfUkVBRAorIyBkZWZpbmUgX0lPQ19SRUFECTJVCisjZW5kaWYKKworI2RlZmluZSBfSU9DKGRpcix0eXBlLG5yLHNpemUpIFwKKwkoKChkaXIpICA8PCBfSU9DX0RJUlNISUZUKSB8IFwKKwkgKCh0eXBlKSA8PCBfSU9DX1RZUEVTSElGVCkgfCBcCisJICgobnIpICAgPDwgX0lPQ19OUlNISUZUKSB8IFwKKwkgKChzaXplKSA8PCBfSU9DX1NJWkVTSElGVCkpCisKKyNkZWZpbmUgX0lPQ19UWVBFQ0hFQ0sodCkgKHNpemVvZih0KSkKKworLyogdXNlZCB0byBjcmVhdGUgbnVtYmVycyAqLworI2RlZmluZSBfSU8odHlwZSxucikJCV9JT0MoX0lPQ19OT05FLCh0eXBlKSwobnIpLDApCisjZGVmaW5lIF9JT1IodHlwZSxucixzaXplKQlfSU9DKF9JT0NfUkVBRCwodHlwZSksKG5yKSwoX0lPQ19UWVBFQ0hFQ0soc2l6ZSkpKQorI2RlZmluZSBfSU9XKHR5cGUsbnIsc2l6ZSkJX0lPQyhfSU9DX1dSSVRFLCh0eXBlKSwobnIpLChfSU9DX1RZUEVDSEVDSyhzaXplKSkpCisjZGVmaW5lIF9JT1dSKHR5cGUsbnIsc2l6ZSkJX0lPQyhfSU9DX1JFQUR8X0lPQ19XUklURSwodHlwZSksKG5yKSwoX0lPQ19UWVBFQ0hFQ0soc2l6ZSkpKQorI2RlZmluZSBfSU9SX0JBRCh0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19SRUFELCh0eXBlKSwobnIpLHNpemVvZihzaXplKSkKKyNkZWZpbmUgX0lPV19CQUQodHlwZSxucixzaXplKQlfSU9DKF9JT0NfV1JJVEUsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQorI2RlZmluZSBfSU9XUl9CQUQodHlwZSxucixzaXplKQlfSU9DKF9JT0NfUkVBRHxfSU9DX1dSSVRFLCh0eXBlKSwobnIpLHNpemVvZihzaXplKSkKKworLyogdXNlZCB0byBkZWNvZGUgaW9jdGwgbnVtYmVycy4uICovCisjZGVmaW5lIF9JT0NfRElSKG5yKQkJKCgobnIpID4+IF9JT0NfRElSU0hJRlQpICYgX0lPQ19ESVJNQVNLKQorI2RlZmluZSBfSU9DX1RZUEUobnIpCQkoKChucikgPj4gX0lPQ19UWVBFU0hJRlQpICYgX0lPQ19UWVBFTUFTSykKKyNkZWZpbmUgX0lPQ19OUihucikJCSgoKG5yKSA+PiBfSU9DX05SU0hJRlQpICYgX0lPQ19OUk1BU0spCisjZGVmaW5lIF9JT0NfU0laRShucikJCSgoKG5yKSA+PiBfSU9DX1NJWkVTSElGVCkgJiBfSU9DX1NJWkVNQVNLKQorCisvKiAuLi5hbmQgZm9yIHRoZSBkcml2ZXJzL3NvdW5kIGZpbGVzLi4uICovCisKKyNkZWZpbmUgSU9DX0lOCQkoX0lPQ19XUklURSA8PCBfSU9DX0RJUlNISUZUKQorI2RlZmluZSBJT0NfT1VUCQkoX0lPQ19SRUFEIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ19JTk9VVAkoKF9JT0NfV1JJVEV8X0lPQ19SRUFEKSA8PCBfSU9DX0RJUlNISUZUKQorI2RlZmluZSBJT0NTSVpFX01BU0sJKF9JT0NfU0laRU1BU0sgPDwgX0lPQ19TSVpFU0hJRlQpCisjZGVmaW5lIElPQ1NJWkVfU0hJRlQJKF9JT0NfU0laRVNISUZUKQorCisjZW5kaWYgLyogX0FTTV9HRU5FUklDX0lPQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9pb2N0bHMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9pb2N0bHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2FhY2I5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL2lvY3Rscy5oCkBAIC0wLDAgKzEsMTEyIEBACisjaWZuZGVmIF9fQVNNX0dFTkVSSUNfSU9DVExTX0gKKyNkZWZpbmUgX19BU01fR0VORVJJQ19JT0NUTFNfSAorCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgbW9zdCBjb21tb24gZGVmaW5pdGlvbnMgZm9yIHR0eSBpb2N0bCBudW1iZXJzLgorICogTW9zdCBvZiB0aGVtIGRvIG5vdCB1c2UgdGhlIHJlY29tbWVuZGVkIF9JT0MoKSwgYnV0IHRoZXJlIGlzCisgKiBwcm9iYWJseSBzb21lIHNvdXJjZSBjb2RlIG91dCB0aGVyZSBoYXJkY29kaW5nIHRoZSBudW1iZXIsCisgKiBzbyB3ZSBtaWdodCBhcyB3ZWxsIHVzZSB0aGVtIGZvciBhbGwgbmV3IHBsYXRmb3Jtcy4KKyAqCisgKiBUaGUgYXJjaGl0ZWN0dXJlcyB0aGF0IHVzZSBkaWZmZXJlbnQgdmFsdWVzIGhlcmUgdHlwaWNhbGx5CisgKiB0cnkgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHNvbWUgVW5peCB2YXJpYW50cyBmb3IgdGhlIHNhbWUKKyAqIGFyY2hpdGVjdHVyZS4KKyAqLworCisvKiAweDU0IGlzIGp1c3QgYSBtYWdpYyBudW1iZXIgdG8gbWFrZSB0aGVzZSByZWxhdGl2ZWx5IHVuaXF1ZSAoJ1QnKSAqLworCisjZGVmaW5lIFRDR0VUUwkJMHg1NDAxCisjZGVmaW5lIFRDU0VUUwkJMHg1NDAyCisjZGVmaW5lIFRDU0VUU1cJCTB4NTQwMworI2RlZmluZSBUQ1NFVFNGCQkweDU0MDQKKyNkZWZpbmUgVENHRVRBCQkweDU0MDUKKyNkZWZpbmUgVENTRVRBCQkweDU0MDYKKyNkZWZpbmUgVENTRVRBVwkJMHg1NDA3CisjZGVmaW5lIFRDU0VUQUYJCTB4NTQwOAorI2RlZmluZSBUQ1NCUksJCTB4NTQwOQorI2RlZmluZSBUQ1hPTkMJCTB4NTQwQQorI2RlZmluZSBUQ0ZMU0gJCTB4NTQwQgorI2RlZmluZSBUSU9DRVhDTAkweDU0MEMKKyNkZWZpbmUgVElPQ05YQ0wJMHg1NDBECisjZGVmaW5lIFRJT0NTQ1RUWQkweDU0MEUKKyNkZWZpbmUgVElPQ0dQR1JQCTB4NTQwRgorI2RlZmluZSBUSU9DU1BHUlAJMHg1NDEwCisjZGVmaW5lIFRJT0NPVVRRCTB4NTQxMQorI2RlZmluZSBUSU9DU1RJCQkweDU0MTIKKyNkZWZpbmUgVElPQ0dXSU5TWgkweDU0MTMKKyNkZWZpbmUgVElPQ1NXSU5TWgkweDU0MTQKKyNkZWZpbmUgVElPQ01HRVQJMHg1NDE1CisjZGVmaW5lIFRJT0NNQklTCTB4NTQxNgorI2RlZmluZSBUSU9DTUJJQwkweDU0MTcKKyNkZWZpbmUgVElPQ01TRVQJMHg1NDE4CisjZGVmaW5lIFRJT0NHU09GVENBUgkweDU0MTkKKyNkZWZpbmUgVElPQ1NTT0ZUQ0FSCTB4NTQxQQorI2RlZmluZSBGSU9OUkVBRAkweDU0MUIKKyNkZWZpbmUgVElPQ0lOUQkJRklPTlJFQUQKKyNkZWZpbmUgVElPQ0xJTlVYCTB4NTQxQworI2RlZmluZSBUSU9DQ09OUwkweDU0MUQKKyNkZWZpbmUgVElPQ0dTRVJJQUwJMHg1NDFFCisjZGVmaW5lIFRJT0NTU0VSSUFMCTB4NTQxRgorI2RlZmluZSBUSU9DUEtUCQkweDU0MjAKKyNkZWZpbmUgRklPTkJJTwkJMHg1NDIxCisjZGVmaW5lIFRJT0NOT1RUWQkweDU0MjIKKyNkZWZpbmUgVElPQ1NFVEQJMHg1NDIzCisjZGVmaW5lIFRJT0NHRVRECTB4NTQyNAorI2RlZmluZSBUQ1NCUktQCQkweDU0MjUJLyogTmVlZGVkIGZvciBQT1NJWCB0Y3NlbmRicmVhaygpICovCisjZGVmaW5lIFRJT0NTQlJLCTB4NTQyNyAgLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgVElPQ0NCUksJMHg1NDI4ICAvKiBCU0QgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBUSU9DR1NJRAkweDU0MjkgIC8qIFJldHVybiB0aGUgc2Vzc2lvbiBJRCBvZiBGRCAqLworI2RlZmluZSBUQ0dFVFMyCQlfSU9SKCdUJywgMHgyQSwgc3RydWN0IHRlcm1pb3MyKQorI2RlZmluZSBUQ1NFVFMyCQlfSU9XKCdUJywgMHgyQiwgc3RydWN0IHRlcm1pb3MyKQorI2RlZmluZSBUQ1NFVFNXMglfSU9XKCdUJywgMHgyQywgc3RydWN0IHRlcm1pb3MyKQorI2RlZmluZSBUQ1NFVFNGMglfSU9XKCdUJywgMHgyRCwgc3RydWN0IHRlcm1pb3MyKQorI2RlZmluZSBUSU9DR1JTNDg1CTB4NTQyRQorI2lmbmRlZiBUSU9DU1JTNDg1CisjZGVmaW5lIFRJT0NTUlM0ODUJMHg1NDJGCisjZW5kaWYKKyNkZWZpbmUgVElPQ0dQVE4JX0lPUignVCcsIDB4MzAsIHVuc2lnbmVkIGludCkgLyogR2V0IFB0eSBOdW1iZXIgKG9mIHB0eS1tdXggZGV2aWNlKSAqLworI2RlZmluZSBUSU9DU1BUTENLCV9JT1coJ1QnLCAweDMxLCBpbnQpICAvKiBMb2NrL3VubG9jayBQdHkgKi8KKyNkZWZpbmUgVENHRVRYCQkweDU0MzIgLyogU1lTNSBUQ0dFVFggY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBUQ1NFVFgJCTB4NTQzMworI2RlZmluZSBUQ1NFVFhGCQkweDU0MzQKKyNkZWZpbmUgVENTRVRYVwkJMHg1NDM1CisjZGVmaW5lIFRJT0NTSUcJCV9JT1coJ1QnLCAweDM2LCBpbnQpICAvKiBwdHk6IGdlbmVyYXRlIHNpZ25hbCAqLworCisjZGVmaW5lIEZJT05DTEVYCTB4NTQ1MAorI2RlZmluZSBGSU9DTEVYCQkweDU0NTEKKyNkZWZpbmUgRklPQVNZTkMJMHg1NDUyCisjZGVmaW5lIFRJT0NTRVJDT05GSUcJMHg1NDUzCisjZGVmaW5lIFRJT0NTRVJHV0lMRAkweDU0NTQKKyNkZWZpbmUgVElPQ1NFUlNXSUxECTB4NTQ1NQorI2RlZmluZSBUSU9DR0xDS1RSTUlPUwkweDU0NTYKKyNkZWZpbmUgVElPQ1NMQ0tUUk1JT1MJMHg1NDU3CisjZGVmaW5lIFRJT0NTRVJHU1RSVUNUCTB4NTQ1OCAvKiBGb3IgZGVidWdnaW5nIG9ubHkgKi8KKyNkZWZpbmUgVElPQ1NFUkdFVExTUiAgIDB4NTQ1OSAvKiBHZXQgbGluZSBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVElPQ1NFUkdFVE1VTFRJIDB4NTQ1QSAvKiBHZXQgbXVsdGlwb3J0IGNvbmZpZyAgKi8KKyNkZWZpbmUgVElPQ1NFUlNFVE1VTFRJIDB4NTQ1QiAvKiBTZXQgbXVsdGlwb3J0IGNvbmZpZyAqLworCisjZGVmaW5lIFRJT0NNSVdBSVQJMHg1NDVDCS8qIHdhaXQgZm9yIGEgY2hhbmdlIG9uIHNlcmlhbCBpbnB1dCBsaW5lKHMpICovCisjZGVmaW5lIFRJT0NHSUNPVU5UCTB4NTQ1RAkvKiByZWFkIHNlcmlhbCBwb3J0IF9faW5saW5lX18gaW50ZXJydXB0IGNvdW50cyAqLworCisvKgorICogU29tZSBhcmNoZXMgYWxyZWFkeSBkZWZpbmUgRklPUVNJWkUgZHVlIHRvIGEgaGlzdG9yaWNhbAorICogY29uZmxpY3Qgd2l0aCBhIEhheWVzIG1vZGVtLXNwZWNpZmljIGlvY3RsIHZhbHVlLgorICovCisjaWZuZGVmIEZJT1FTSVpFCisjIGRlZmluZSBGSU9RU0laRQkweDU0NjAKKyNlbmRpZgorCisvKiBVc2VkIGZvciBwYWNrZXQgbW9kZSAqLworI2RlZmluZSBUSU9DUEtUX0RBVEEJCSAwCisjZGVmaW5lIFRJT0NQS1RfRkxVU0hSRUFECSAxCisjZGVmaW5lIFRJT0NQS1RfRkxVU0hXUklURQkgMgorI2RlZmluZSBUSU9DUEtUX1NUT1AJCSA0CisjZGVmaW5lIFRJT0NQS1RfU1RBUlQJCSA4CisjZGVmaW5lIFRJT0NQS1RfTk9TVE9QCQkxNgorI2RlZmluZSBUSU9DUEtUX0RPU1RPUAkJMzIKKyNkZWZpbmUgVElPQ1BLVF9JT0NUTAkJNjQKKworI2RlZmluZSBUSU9DU0VSX1RFTVQJMHgwMQkvKiBUcmFuc21pdHRlciBwaHlzaWNhbGx5IGVtcHR5ICovCisKKyNlbmRpZiAvKiBfX0FTTV9HRU5FUklDX0lPQ1RMU19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMvaXBjYnVmLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMvaXBjYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY5ODJiMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9pcGNidWYuaApAQCAtMCwwICsxLDM0IEBACisjaWZuZGVmIF9fQVNNX0dFTkVSSUNfSVBDQlVGX0gKKyNkZWZpbmUgX19BU01fR0VORVJJQ19JUENCVUZfSAorCisvKgorICogVGhlIGdlbmVyaWMgaXBjNjRfcGVybSBzdHJ1Y3R1cmU6CisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIGlwYzY0X3Blcm0gd2FzIG9yaWdpbmFsbHkgbWVhbnQgdG8gYmUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljLCBidXQKKyAqIGV2ZXJ5b25lIGp1c3QgZW5kZWQgdXAgbWFraW5nIGlkZW50aWNhbCBjb3BpZXMgd2l0aG91dCBzcGVjaWZpYworICogb3B0aW1pemF0aW9ucywgc28gd2UgbWF5IGp1c3QgYXMgd2VsbCBhbGwgdXNlIHRoZSBzYW1lIG9uZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDMyLWJpdCBtb2RlX3Qgb24gYXJjaGl0ZWN0dXJlcyB0aGF0IG9ubHkgaGFkIDE2IGJpdAorICogLSAzMi1iaXQgc2VxCisgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IGlwYzY0X3Blcm0geworCV9fa2VybmVsX2tleV90CQlrZXk7CisJX19rZXJuZWxfdWlkMzJfdAl1aWQ7CisJX19rZXJuZWxfZ2lkMzJfdAlnaWQ7CisJX19rZXJuZWxfdWlkMzJfdAljdWlkOworCV9fa2VybmVsX2dpZDMyX3QJY2dpZDsKKwlfX2tlcm5lbF9tb2RlX3QJCW1vZGU7CisJCQkJLyogcGFkIGlmIG1vZGVfdCBpcyB1MTY6ICovCisJdW5zaWduZWQgY2hhcgkJX19wYWQxWzQgLSBzaXplb2YoX19rZXJuZWxfbW9kZV90KV07CisJdW5zaWduZWQgc2hvcnQJCXNlcTsKKwl1bnNpZ25lZCBzaG9ydAkJX19wYWQyOworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMTsKKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDI7Cit9OworCisjZW5kaWYgLyogX19BU01fR0VORVJJQ19JUENCVUZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGE5ZTI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgKQEAgLTAsMCArMSw1MSBAQAorI2lmbmRlZiBfX0FTTV9HRU5FUklDX01NQU5fQ09NTU9OX0gKKyNkZWZpbmUgX19BU01fR0VORVJJQ19NTUFOX0NPTU1PTl9ICisKKy8qCisgQXV0aG9yOiBNaWNoYWVsIFMuIFRzaXJraW4gPG1zdEBtZWxsYW5veC5jby5pbD4sIE1lbGxhbm94IFRlY2hub2xvZ2llcyBMdGQuCisgQmFzZWQgb246IGFzbS14eHgvbW1hbi5oCisqLworCisjZGVmaW5lIFBST1RfUkVBRAkweDEJCS8qIHBhZ2UgY2FuIGJlIHJlYWQgKi8KKyNkZWZpbmUgUFJPVF9XUklURQkweDIJCS8qIHBhZ2UgY2FuIGJlIHdyaXR0ZW4gKi8KKyNkZWZpbmUgUFJPVF9FWEVDCTB4NAkJLyogcGFnZSBjYW4gYmUgZXhlY3V0ZWQgKi8KKyNkZWZpbmUgUFJPVF9TRU0JMHg4CQkvKiBwYWdlIG1heSBiZSB1c2VkIGZvciBhdG9taWMgb3BzICovCisjZGVmaW5lIFBST1RfTk9ORQkweDAJCS8qIHBhZ2UgY2FuIG5vdCBiZSBhY2Nlc3NlZCAqLworI2RlZmluZSBQUk9UX0dST1dTRE9XTgkweDAxMDAwMDAwCS8qIG1wcm90ZWN0IGZsYWc6IGV4dGVuZCBjaGFuZ2UgdG8gc3RhcnQgb2YgZ3Jvd3Nkb3duIHZtYSAqLworI2RlZmluZSBQUk9UX0dST1dTVVAJMHgwMjAwMDAwMAkvKiBtcHJvdGVjdCBmbGFnOiBleHRlbmQgY2hhbmdlIHRvIGVuZCBvZiBncm93c3VwIHZtYSAqLworCisjZGVmaW5lIE1BUF9TSEFSRUQJMHgwMQkJLyogU2hhcmUgY2hhbmdlcyAqLworI2RlZmluZSBNQVBfUFJJVkFURQkweDAyCQkvKiBDaGFuZ2VzIGFyZSBwcml2YXRlICovCisjZGVmaW5lIE1BUF9UWVBFCTB4MGYJCS8qIE1hc2sgZm9yIHR5cGUgb2YgbWFwcGluZyAqLworI2RlZmluZSBNQVBfRklYRUQJMHgxMAkJLyogSW50ZXJwcmV0IGFkZHIgZXhhY3RseSAqLworI2RlZmluZSBNQVBfQU5PTllNT1VTCTB4MjAJCS8qIGRvbid0IHVzZSBhIGZpbGUgKi8KKyNpZmRlZiBDT05GSUdfTU1BUF9BTExPV19VTklOSVRJQUxJWkVECisjIGRlZmluZSBNQVBfVU5JTklUSUFMSVpFRCAweDQwMDAwMDAJLyogRm9yIGFub255bW91cyBtbWFwLCBtZW1vcnkgY291bGQgYmUgdW5pbml0aWFsaXplZCAqLworI2Vsc2UKKyMgZGVmaW5lIE1BUF9VTklOSVRJQUxJWkVEIDB4MAkJLyogRG9uJ3Qgc3VwcG9ydCB0aGlzIGZsYWcgKi8KKyNlbmRpZgorCisjZGVmaW5lIE1TX0FTWU5DCTEJCS8qIHN5bmMgbWVtb3J5IGFzeW5jaHJvbm91c2x5ICovCisjZGVmaW5lIE1TX0lOVkFMSURBVEUJMgkJLyogaW52YWxpZGF0ZSB0aGUgY2FjaGVzICovCisjZGVmaW5lIE1TX1NZTkMJCTQJCS8qIHN5bmNocm9ub3VzIG1lbW9yeSBzeW5jICovCisKKyNkZWZpbmUgTUFEVl9OT1JNQUwJMAkJLyogbm8gZnVydGhlciBzcGVjaWFsIHRyZWF0bWVudCAqLworI2RlZmluZSBNQURWX1JBTkRPTQkxCQkvKiBleHBlY3QgcmFuZG9tIHBhZ2UgcmVmZXJlbmNlcyAqLworI2RlZmluZSBNQURWX1NFUVVFTlRJQUwJMgkJLyogZXhwZWN0IHNlcXVlbnRpYWwgcGFnZSByZWZlcmVuY2VzICovCisjZGVmaW5lIE1BRFZfV0lMTE5FRUQJMwkJLyogd2lsbCBuZWVkIHRoZXNlIHBhZ2VzICovCisjZGVmaW5lIE1BRFZfRE9OVE5FRUQJNAkJLyogZG9uJ3QgbmVlZCB0aGVzZSBwYWdlcyAqLworCisvKiBjb21tb24gcGFyYW1ldGVyczogdHJ5IHRvIGtlZXAgdGhlc2UgY29uc2lzdGVudCBhY3Jvc3MgYXJjaGl0ZWN0dXJlcyAqLworI2RlZmluZSBNQURWX1JFTU9WRQk5CQkvKiByZW1vdmUgdGhlc2UgcGFnZXMgJiByZXNvdXJjZXMgKi8KKyNkZWZpbmUgTUFEVl9ET05URk9SSwkxMAkJLyogZG9uJ3QgaW5oZXJpdCBhY3Jvc3MgZm9yayAqLworI2RlZmluZSBNQURWX0RPRk9SSwkxMQkJLyogZG8gaW5oZXJpdCBhY3Jvc3MgZm9yayAqLworI2RlZmluZSBNQURWX0hXUE9JU09OCTEwMAkJLyogcG9pc29uIGEgcGFnZSBmb3IgdGVzdGluZyAqLworI2RlZmluZSBNQURWX1NPRlRfT0ZGTElORSAxMDEJCS8qIHNvZnQgb2ZmbGluZSBwYWdlIGZvciB0ZXN0aW5nICovCisKKyNkZWZpbmUgTUFEVl9NRVJHRUFCTEUgICAxMgkJLyogS1NNIG1heSBtZXJnZSBpZGVudGljYWwgcGFnZXMgKi8KKyNkZWZpbmUgTUFEVl9VTk1FUkdFQUJMRSAxMwkJLyogS1NNIG1heSBub3QgbWVyZ2UgaWRlbnRpY2FsIHBhZ2VzICovCisKKy8qIGNvbXBhdGliaWxpdHkgZmxhZ3MgKi8KKyNkZWZpbmUgTUFQX0ZJTEUJMAorCisjZW5kaWYgLyogX19BU01fR0VORVJJQ19NTUFOX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMvbW1hbi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL21tYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmM4YmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL21tYW4uaApAQCAtMCwwICsxLDE5IEBACisjaWZuZGVmIF9fQVNNX0dFTkVSSUNfTU1BTl9ICisjZGVmaW5lIF9fQVNNX0dFTkVSSUNfTU1BTl9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oPgorCisjZGVmaW5lIE1BUF9HUk9XU0RPV04JMHgwMTAwCQkvKiBzdGFjay1saWtlIHNlZ21lbnQgKi8KKyNkZWZpbmUgTUFQX0RFTllXUklURQkweDA4MDAJCS8qIEVUWFRCU1kgKi8KKyNkZWZpbmUgTUFQX0VYRUNVVEFCTEUJMHgxMDAwCQkvKiBtYXJrIGl0IGFzIGFuIGV4ZWN1dGFibGUgKi8KKyNkZWZpbmUgTUFQX0xPQ0tFRAkweDIwMDAJCS8qIHBhZ2VzIGFyZSBsb2NrZWQgKi8KKyNkZWZpbmUgTUFQX05PUkVTRVJWRQkweDQwMDAJCS8qIGRvbid0IGNoZWNrIGZvciByZXNlcnZhdGlvbnMgKi8KKyNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4ODAwMAkJLyogcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdldGFibGVzICovCisjZGVmaW5lIE1BUF9OT05CTE9DSwkweDEwMDAwCQkvKiBkbyBub3QgYmxvY2sgb24gSU8gKi8KKyNkZWZpbmUgTUFQX1NUQUNLCTB4MjAwMDAJCS8qIGdpdmUgb3V0IGFuIGFkZHJlc3MgdGhhdCBpcyBiZXN0IHN1aXRlZCBmb3IgcHJvY2Vzcy90aHJlYWQgc3RhY2tzICovCisjZGVmaW5lIE1BUF9IVUdFVExCCTB4NDAwMDAJCS8qIGNyZWF0ZSBhIGh1Z2UgcGFnZSBtYXBwaW5nICovCisKKyNkZWZpbmUgTUNMX0NVUlJFTlQJMQkJLyogbG9jayBhbGwgY3VycmVudCBtYXBwaW5ncyAqLworI2RlZmluZSBNQ0xfRlVUVVJFCTIJCS8qIGxvY2sgYWxsIGZ1dHVyZSBtYXBwaW5ncyAqLworCisjZW5kaWYgLyogX19BU01fR0VORVJJQ19NTUFOX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9tc2didWYuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9tc2didWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWM4NTBkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL21zZ2J1Zi5oCkBAIC0wLDAgKzEsNDcgQEAKKyNpZm5kZWYgX19BU01fR0VORVJJQ19NU0dCVUZfSAorI2RlZmluZSBfX0FTTV9HRU5FUklDX01TR0JVRl9ICisKKyNpbmNsdWRlIDxhc20vYml0c3BlcmxvbmcuaD4KKy8qCisgKiBnZW5lcmljIG1zcWlkNjRfZHMgc3RydWN0dXJlLgorICoKKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogbXNxaWQ2NF9kcyB3YXMgb3JpZ2luYWxseSBtZWFudCB0byBiZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMsIGJ1dAorICogZXZlcnlvbmUganVzdCBlbmRlZCB1cCBtYWtpbmcgaWRlbnRpY2FsIGNvcGllcyB3aXRob3V0IHNwZWNpZmljCisgKiBvcHRpbWl6YXRpb25zLCBzbyB3ZSBtYXkganVzdCBhcyB3ZWxsIGFsbCB1c2UgdGhlIHNhbWUgb25lLgorICoKKyAqIDY0IGJpdCBhcmNoaXRlY3R1cmVzIHR5cGljYWxseSBkZWZpbmUgYSA2NCBiaXQgX19rZXJuZWxfdGltZV90LAorICogc28gdGhleSBkbyBub3QgbmVlZCB0aGUgZmlyc3QgdGhyZWUgcGFkZGluZyB3b3Jkcy4KKyAqIE9uIGJpZy1lbmRpYW4gc3lzdGVtcywgdGhlIHBhZGRpbmcgaXMgaW4gdGhlIHdyb25nIHBsYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gNjQtYml0IHRpbWVfdCB0byBzb2x2ZSB5MjAzOCBwcm9ibGVtCisgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IG1zcWlkNjRfZHMgeworCXN0cnVjdCBpcGM2NF9wZXJtIG1zZ19wZXJtOworCV9fa2VybmVsX3RpbWVfdCBtc2dfc3RpbWU7CS8qIGxhc3QgbXNnc25kIHRpbWUgKi8KKyNpZiBfX0JJVFNfUEVSX0xPTkcgIT0gNjQKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMTsKKyNlbmRpZgorCV9fa2VybmVsX3RpbWVfdCBtc2dfcnRpbWU7CS8qIGxhc3QgbXNncmN2IHRpbWUgKi8KKyNpZiBfX0JJVFNfUEVSX0xPTkcgIT0gNjQKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKKyNlbmRpZgorCV9fa2VybmVsX3RpbWVfdCBtc2dfY3RpbWU7CS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKyNpZiBfX0JJVFNfUEVSX0xPTkcgIT0gNjQKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMzsKKyNlbmRpZgorCXVuc2lnbmVkIGxvbmcgIG1zZ19jYnl0ZXM7CS8qIGN1cnJlbnQgbnVtYmVyIG9mIGJ5dGVzIG9uIHF1ZXVlICovCisJdW5zaWduZWQgbG9uZyAgbXNnX3FudW07CS8qIG51bWJlciBvZiBtZXNzYWdlcyBpbiBxdWV1ZSAqLworCXVuc2lnbmVkIGxvbmcgIG1zZ19xYnl0ZXM7CS8qIG1heCBudW1iZXIgb2YgYnl0ZXMgb24gcXVldWUgKi8KKwlfX2tlcm5lbF9waWRfdCBtc2dfbHNwaWQ7CS8qIHBpZCBvZiBsYXN0IG1zZ3NuZCAqLworCV9fa2VybmVsX3BpZF90IG1zZ19scnBpZDsJLyogbGFzdCByZWNlaXZlIHBpZCAqLworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNDsKKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDU7Cit9OworCisjZW5kaWYgLyogX19BU01fR0VORVJJQ19NU0dCVUZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3BhcmFtLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzRlZWNlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3BhcmFtLmgKQEAgLTAsMCArMSwxOSBAQAorI2lmbmRlZiBfX0FTTV9HRU5FUklDX1BBUkFNX0gKKyNkZWZpbmUgX19BU01fR0VORVJJQ19QQVJBTV9ICisKKworI2lmbmRlZiBIWgorI2RlZmluZSBIWiAxMDAKKyNlbmRpZgorCisjaWZuZGVmIEVYRUNfUEFHRVNJWkUKKyNkZWZpbmUgRVhFQ19QQUdFU0laRQk0MDk2CisjZW5kaWYKKworI2lmbmRlZiBOT0dST1VQCisjZGVmaW5lIE5PR1JPVVAJCSgtMSkKKyNlbmRpZgorCisjZGVmaW5lIE1BWEhPU1ROQU1FTEVOCTY0CS8qIG1heCBsZW5ndGggb2YgaG9zdG5hbWUgKi8KKworI2VuZGlmIC8qIF9fQVNNX0dFTkVSSUNfUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3BvbGwuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9wb2xsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRiY2U4MwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9wb2xsLmgKQEAgLTAsMCArMSwzNyBAQAorI2lmbmRlZiBfX0FTTV9HRU5FUklDX1BPTExfSAorI2RlZmluZSBfX0FTTV9HRU5FUklDX1BPTExfSAorCisvKiBUaGVzZSBhcmUgc3BlY2lmaWVkIGJ5IGlCQ1MyICovCisjZGVmaW5lIFBPTExJTgkJMHgwMDAxCisjZGVmaW5lIFBPTExQUkkJCTB4MDAwMgorI2RlZmluZSBQT0xMT1VUCQkweDAwMDQKKyNkZWZpbmUgUE9MTEVSUgkJMHgwMDA4CisjZGVmaW5lIFBPTExIVVAJCTB4MDAxMAorI2RlZmluZSBQT0xMTlZBTAkweDAwMjAKKworLyogVGhlIHJlc3Qgc2VlbSB0byBiZSBtb3JlLW9yLWxlc3Mgbm9uc3RhbmRhcmQuIENoZWNrIHRoZW0hICovCisjZGVmaW5lIFBPTExSRE5PUk0JMHgwMDQwCisjZGVmaW5lIFBPTExSREJBTkQJMHgwMDgwCisjaWZuZGVmIFBPTExXUk5PUk0KKyNkZWZpbmUgUE9MTFdSTk9STQkweDAxMDAKKyNlbmRpZgorI2lmbmRlZiBQT0xMV1JCQU5ECisjZGVmaW5lIFBPTExXUkJBTkQJMHgwMjAwCisjZW5kaWYKKyNpZm5kZWYgUE9MTE1TRworI2RlZmluZSBQT0xMTVNHCQkweDA0MDAKKyNlbmRpZgorI2lmbmRlZiBQT0xMUkVNT1ZFCisjZGVmaW5lIFBPTExSRU1PVkUJMHgxMDAwCisjZW5kaWYKKyNpZm5kZWYgUE9MTFJESFVQCisjZGVmaW5lIFBPTExSREhVUCAgICAgICAweDIwMDAKKyNlbmRpZgorCitzdHJ1Y3QgcG9sbGZkIHsKKwlpbnQgZmQ7CisJc2hvcnQgZXZlbnRzOworCXNob3J0IHJldmVudHM7Cit9OworCisjZW5kaWYJLyogX19BU01fR0VORVJJQ19QT0xMX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9wb3NpeF90eXBlcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3Bvc2l4X3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNjODdkYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9wb3NpeF90eXBlcy5oCkBAIC0wLDAgKzEsOTQgQEAKKyNpZm5kZWYgX19BU01fR0VORVJJQ19QT1NJWF9UWVBFU19ICisjZGVmaW5lIF9fQVNNX0dFTkVSSUNfUE9TSVhfVFlQRVNfSAorCisjaW5jbHVkZSA8YXNtL2JpdHNwZXJsb25nLmg+CisvKgorICogVGhpcyBmaWxlIGlzIGdlbmVyYWxseSB1c2VkIGJ5IHVzZXItbGV2ZWwgc29mdHdhcmUsIHNvIHlvdSBuZWVkIHRvCisgKiBiZSBhIGxpdHRsZSBjYXJlZnVsIGFib3V0IG5hbWVzcGFjZSBwb2xsdXRpb24gZXRjLgorICoKKyAqIEZpcnN0IHRoZSB0eXBlcyB0aGF0IGFyZSBvZnRlbiBkZWZpbmVkIGluIGRpZmZlcmVudCB3YXlzIGFjcm9zcworICogYXJjaGl0ZWN0dXJlcywgc28gdGhhdCB5b3UgY2FuIG92ZXJyaWRlIHRoZW0uCisgKi8KKworI2lmbmRlZiBfX2tlcm5lbF9pbm9fdAordHlwZWRlZiB1bnNpZ25lZCBsb25nCV9fa2VybmVsX2lub190OworI2VuZGlmCisKKyNpZm5kZWYgX19rZXJuZWxfbW9kZV90Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF9tb2RlX3Q7CisjZW5kaWYKKworI2lmbmRlZiBfX2tlcm5lbF9ubGlua190Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJX19rZXJuZWxfbmxpbmtfdDsKKyNlbmRpZgorCisjaWZuZGVmIF9fa2VybmVsX3BpZF90Cit0eXBlZGVmIGludAkJX19rZXJuZWxfcGlkX3Q7CisjZW5kaWYKKworI2lmbmRlZiBfX2tlcm5lbF9pcGNfcGlkX3QKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9pcGNfcGlkX3Q7CisjZW5kaWYKKworI2lmbmRlZiBfX2tlcm5lbF91aWRfdAordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfdWlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF9naWRfdDsKKyNlbmRpZgorCisjaWZuZGVmIF9fa2VybmVsX3N1c2Vjb25kc190Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3N1c2Vjb25kc190OworI2VuZGlmCisKKyNpZm5kZWYgX19rZXJuZWxfZGFkZHJfdAordHlwZWRlZiBpbnQJCV9fa2VybmVsX2RhZGRyX3Q7CisjZW5kaWYKKworI2lmbmRlZiBfX2tlcm5lbF91aWQzMl90Cit0eXBlZGVmIF9fa2VybmVsX3VpZF90CV9fa2VybmVsX3VpZDMyX3Q7Cit0eXBlZGVmIF9fa2VybmVsX2dpZF90CV9fa2VybmVsX2dpZDMyX3Q7CisjZW5kaWYKKworI2lmbmRlZiBfX2tlcm5lbF9vbGRfdWlkX3QKK3R5cGVkZWYgX19rZXJuZWxfdWlkX3QJX19rZXJuZWxfb2xkX3VpZF90OwordHlwZWRlZiBfX2tlcm5lbF9naWRfdAlfX2tlcm5lbF9vbGRfZ2lkX3Q7CisjZW5kaWYKKworI2lmbmRlZiBfX2tlcm5lbF9vbGRfZGV2X3QKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX29sZF9kZXZfdDsKKyNlbmRpZgorCisvKgorICogTW9zdCAzMiBiaXQgYXJjaGl0ZWN0dXJlcyB1c2UgInVuc2lnbmVkIGludCIgc2l6ZV90LAorICogYW5kIGFsbCA2NCBiaXQgYXJjaGl0ZWN0dXJlcyB1c2UgInVuc2lnbmVkIGxvbmciIHNpemVfdC4KKyAqLworI2lmbmRlZiBfX2tlcm5lbF9zaXplX3QKKyNpZiBfX0JJVFNfUEVSX0xPTkcgIT0gNjQKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX3NpemVfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9zc2l6ZV90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX3B0cmRpZmZfdDsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJX19rZXJuZWxfc2l6ZV90OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF9zc2l6ZV90OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF9wdHJkaWZmX3Q7CisjZW5kaWYKKyNlbmRpZgorCisvKgorICogYW55dGhpbmcgYmVsb3cgaGVyZSBzaG91bGQgYmUgY29tcGxldGVseSBnZW5lcmljCisgKi8KK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfb2ZmX3Q7Cit0eXBlZGVmIGxvbmcgbG9uZwlfX2tlcm5lbF9sb2ZmX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3RpbWVfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfY2xvY2tfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF90aW1lcl90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX2Nsb2NraWRfdDsKK3R5cGVkZWYgY2hhciAqCQlfX2tlcm5lbF9jYWRkcl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF91aWQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9naWQxNl90OworCit0eXBlZGVmIHN0cnVjdCB7CisJaW50CXZhbFsyXTsKK30gX19rZXJuZWxfZnNpZF90OworCisKKyNlbmRpZiAvKiBfX0FTTV9HRU5FUklDX1BPU0lYX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9yZXNvdXJjZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3Jlc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM2ZGE4NAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9yZXNvdXJjZS5oCkBAIC0wLDAgKzEsNjggQEAKKyNpZm5kZWYgX0FTTV9HRU5FUklDX1JFU09VUkNFX0gKKyNkZWZpbmUgX0FTTV9HRU5FUklDX1JFU09VUkNFX0gKKworLyoKKyAqIFJlc291cmNlIGxpbWl0IElEcworICoKKyAqICggQ29tcGF0aWJpbGl0eSBkZXRhaWw6IHRoZXJlIGFyZSBhcmNoaXRlY3R1cmVzIHRoYXQgaGF2ZQorICogICBhIGRpZmZlcmVudCBybGltaXQgSUQgb3JkZXIgaW4gdGhlIDUtOSByYW5nZSBhbmQgd2FudAorICogICB0byBrZWVwIHRoYXQgb3JkZXIgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5LiBUaGUgcmVhc29ucworICogICBhcmUgaGlzdG9yaWMgYW5kIGFsbCBuZXcgcmxpbWl0cyBhcmUgaWRlbnRpY2FsIGFjcm9zcyBhbGwKKyAqICAgYXJjaGVzLiBJZiBhbiBhcmNoIGhhcyBzdWNoIHNwZWNpYWwgb3JkZXIgZm9yIHNvbWUgcmxpbWl0cworICogICB0aGVuIGl0IGRlZmluZXMgdGhlbSBwcmlvciBpbmNsdWRpbmcgYXNtLWdlbmVyaWMvcmVzb3VyY2UuaC4gKQorICovCisKKyNkZWZpbmUgUkxJTUlUX0NQVQkJMAkvKiBDUFUgdGltZSBpbiBzZWMgKi8KKyNkZWZpbmUgUkxJTUlUX0ZTSVpFCQkxCS8qIE1heGltdW0gZmlsZXNpemUgKi8KKyNkZWZpbmUgUkxJTUlUX0RBVEEJCTIJLyogbWF4IGRhdGEgc2l6ZSAqLworI2RlZmluZSBSTElNSVRfU1RBQ0sJCTMJLyogbWF4IHN0YWNrIHNpemUgKi8KKyNkZWZpbmUgUkxJTUlUX0NPUkUJCTQJLyogbWF4IGNvcmUgZmlsZSBzaXplICovCisKKyNpZm5kZWYgUkxJTUlUX1JTUworIyBkZWZpbmUgUkxJTUlUX1JTUwkJNQkvKiBtYXggcmVzaWRlbnQgc2V0IHNpemUgKi8KKyNlbmRpZgorCisjaWZuZGVmIFJMSU1JVF9OUFJPQworIyBkZWZpbmUgUkxJTUlUX05QUk9DCQk2CS8qIG1heCBudW1iZXIgb2YgcHJvY2Vzc2VzICovCisjZW5kaWYKKworI2lmbmRlZiBSTElNSVRfTk9GSUxFCisjIGRlZmluZSBSTElNSVRfTk9GSUxFCQk3CS8qIG1heCBudW1iZXIgb2Ygb3BlbiBmaWxlcyAqLworI2VuZGlmCisKKyNpZm5kZWYgUkxJTUlUX01FTUxPQ0sKKyMgZGVmaW5lIFJMSU1JVF9NRU1MT0NLCQk4CS8qIG1heCBsb2NrZWQtaW4tbWVtb3J5IGFkZHJlc3Mgc3BhY2UgKi8KKyNlbmRpZgorCisjaWZuZGVmIFJMSU1JVF9BUworIyBkZWZpbmUgUkxJTUlUX0FTCQk5CS8qIGFkZHJlc3Mgc3BhY2UgbGltaXQgKi8KKyNlbmRpZgorCisjZGVmaW5lIFJMSU1JVF9MT0NLUwkJMTAJLyogbWF4aW11bSBmaWxlIGxvY2tzIGhlbGQgKi8KKyNkZWZpbmUgUkxJTUlUX1NJR1BFTkRJTkcJMTEJLyogbWF4IG51bWJlciBvZiBwZW5kaW5nIHNpZ25hbHMgKi8KKyNkZWZpbmUgUkxJTUlUX01TR1FVRVVFCQkxMgkvKiBtYXhpbXVtIGJ5dGVzIGluIFBPU0lYIG1xdWV1ZXMgKi8KKyNkZWZpbmUgUkxJTUlUX05JQ0UJCTEzCS8qIG1heCBuaWNlIHByaW8gYWxsb3dlZCB0byByYWlzZSB0bworCQkJCQkgICAwLTM5IGZvciBuaWNlIGxldmVsIDE5IC4uIC0yMCAqLworI2RlZmluZSBSTElNSVRfUlRQUklPCQkxNAkvKiBtYXhpbXVtIHJlYWx0aW1lIHByaW9yaXR5ICovCisjZGVmaW5lIFJMSU1JVF9SVFRJTUUJCTE1CS8qIHRpbWVvdXQgZm9yIFJUIHRhc2tzIGluIHVzICovCisjZGVmaW5lIFJMSU1fTkxJTUlUUwkJMTYKKworLyoKKyAqIFN1UyBzYXlzIGxpbWl0cyBoYXZlIHRvIGJlIHVuc2lnbmVkLgorICogV2hpY2ggbWFrZXMgYSB0b24gbW9yZSBzZW5zZSBhbnl3YXkuCisgKgorICogU29tZSBhcmNoaXRlY3R1cmVzIG92ZXJyaWRlIHRoaXMgKGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMpOgorICovCisjaWZuZGVmIFJMSU1fSU5GSU5JVFkKKyMgZGVmaW5lIFJMSU1fSU5GSU5JVFkJCSh+MFVMKQorI2VuZGlmCisKKy8qCisgKiBSTElNSVRfU1RBQ0sgZGVmYXVsdCBtYXhpbXVtIC0gc29tZSBhcmNoaXRlY3R1cmVzIG92ZXJyaWRlIGl0OgorICovCisjaWZuZGVmIF9TVEtfTElNX01BWAorIyBkZWZpbmUgX1NUS19MSU1fTUFYCQlSTElNX0lORklOSVRZCisjZW5kaWYKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9zZW1idWYuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9zZW1idWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2IyYzEzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3NlbWJ1Zi5oCkBAIC0wLDAgKzEsMzggQEAKKyNpZm5kZWYgX19BU01fR0VORVJJQ19TRU1CVUZfSAorI2RlZmluZSBfX0FTTV9HRU5FUklDX1NFTUJVRl9ICisKKyNpbmNsdWRlIDxhc20vYml0c3BlcmxvbmcuaD4KKworLyoKKyAqIFRoZSBzZW1pZDY0X2RzIHN0cnVjdHVyZSBmb3IgeDg2IGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogc2VtaWQ2NF9kcyB3YXMgb3JpZ2luYWxseSBtZWFudCB0byBiZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMsIGJ1dAorICogZXZlcnlvbmUganVzdCBlbmRlZCB1cCBtYWtpbmcgaWRlbnRpY2FsIGNvcGllcyB3aXRob3V0IHNwZWNpZmljCisgKiBvcHRpbWl6YXRpb25zLCBzbyB3ZSBtYXkganVzdCBhcyB3ZWxsIGFsbCB1c2UgdGhlIHNhbWUgb25lLgorICoKKyAqIDY0IGJpdCBhcmNoaXRlY3R1cmVzIHR5cGljYWxseSBkZWZpbmUgYSA2NCBiaXQgX19rZXJuZWxfdGltZV90LAorICogc28gdGhleSBkbyBub3QgbmVlZCB0aGUgZmlyc3QgdHdvIHBhZGRpbmcgd29yZHMuCisgKiBPbiBiaWctZW5kaWFuIHN5c3RlbXMsIHRoZSBwYWRkaW5nIGlzIGluIHRoZSB3cm9uZyBwbGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDY0LWJpdCB0aW1lX3QgdG8gc29sdmUgeTIwMzggcHJvYmxlbQorICogLSAyIG1pc2NlbGxhbmVvdXMgMzItYml0IHZhbHVlcworICovCitzdHJ1Y3Qgc2VtaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0gc2VtX3Blcm07CS8qIHBlcm1pc3Npb25zIC4uIHNlZSBpcGMuaCAqLworCV9fa2VybmVsX3RpbWVfdAlzZW1fb3RpbWU7CS8qIGxhc3Qgc2Vtb3AgdGltZSAqLworI2lmIF9fQklUU19QRVJfTE9ORyAhPSA2NAorCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworI2VuZGlmCisJX19rZXJuZWxfdGltZV90CXNlbV9jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworI2lmIF9fQklUU19QRVJfTE9ORyAhPSA2NAorCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworI2VuZGlmCisJdW5zaWduZWQgbG9uZwlzZW1fbnNlbXM7CS8qIG5vLiBvZiBzZW1hcGhvcmVzIGluIGFycmF5ICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDQ7Cit9OworCisjZW5kaWYgLyogX19BU01fR0VORVJJQ19TRU1CVUZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3NldHVwLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2V0dXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmMyNmE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3NldHVwLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fQVNNX0dFTkVSSUNfU0VUVVBfSAorI2RlZmluZSBfX0FTTV9HRU5FUklDX1NFVFVQX0gKKworI2RlZmluZSBDT01NQU5EX0xJTkVfU0laRQk1MTIKKworI2VuZGlmCS8qIF9fQVNNX0dFTkVSSUNfU0VUVVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3NobWJ1Zi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3NobWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NjhmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2htYnVmLmgKQEAgLTAsMCArMSw1OSBAQAorI2lmbmRlZiBfX0FTTV9HRU5FUklDX1NITUJVRl9ICisjZGVmaW5lIF9fQVNNX0dFTkVSSUNfU0hNQlVGX0gKKworI2luY2x1ZGUgPGFzbS9iaXRzcGVybG9uZy5oPgorCisvKgorICogVGhlIHNobWlkNjRfZHMgc3RydWN0dXJlIGZvciB4ODYgYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBzaG1pZDY0X2RzIHdhcyBvcmlnaW5hbGx5IG1lYW50IHRvIGJlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYywgYnV0CisgKiBldmVyeW9uZSBqdXN0IGVuZGVkIHVwIG1ha2luZyBpZGVudGljYWwgY29waWVzIHdpdGhvdXQgc3BlY2lmaWMKKyAqIG9wdGltaXphdGlvbnMsIHNvIHdlIG1heSBqdXN0IGFzIHdlbGwgYWxsIHVzZSB0aGUgc2FtZSBvbmUuCisgKgorICogNjQgYml0IGFyY2hpdGVjdHVyZXMgdHlwaWNhbGx5IGRlZmluZSBhIDY0IGJpdCBfX2tlcm5lbF90aW1lX3QsCisgKiBzbyB0aGV5IGRvIG5vdCBuZWVkIHRoZSBmaXJzdCB0d28gcGFkZGluZyB3b3Jkcy4KKyAqIE9uIGJpZy1lbmRpYW4gc3lzdGVtcywgdGhlIHBhZGRpbmcgaXMgaW4gdGhlIHdyb25nIHBsYWNlLgorICoKKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDY0LWJpdCB0aW1lX3QgdG8gc29sdmUgeTIwMzggcHJvYmxlbQorICogLSAyIG1pc2NlbGxhbmVvdXMgMzItYml0IHZhbHVlcworICovCisKK3N0cnVjdCBzaG1pZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybQlzaG1fcGVybTsJLyogb3BlcmF0aW9uIHBlcm1zICovCisJc2l6ZV90CQkJc2htX3NlZ3N6OwkvKiBzaXplIG9mIHNlZ21lbnQgKGJ5dGVzKSAqLworCV9fa2VybmVsX3RpbWVfdAkJc2htX2F0aW1lOwkvKiBsYXN0IGF0dGFjaCB0aW1lICovCisjaWYgX19CSVRTX1BFUl9MT05HICE9IDY0CisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQxOworI2VuZGlmCisJX19rZXJuZWxfdGltZV90CQlzaG1fZHRpbWU7CS8qIGxhc3QgZGV0YWNoIHRpbWUgKi8KKyNpZiBfX0JJVFNfUEVSX0xPTkcgIT0gNjQKKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDI7CisjZW5kaWYKKwlfX2tlcm5lbF90aW1lX3QJCXNobV9jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworI2lmIF9fQklUU19QRVJfTE9ORyAhPSA2NAorCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMzsKKyNlbmRpZgorCV9fa2VybmVsX3BpZF90CQlzaG1fY3BpZDsJLyogcGlkIG9mIGNyZWF0b3IgKi8KKwlfX2tlcm5lbF9waWRfdAkJc2htX2xwaWQ7CS8qIHBpZCBvZiBsYXN0IG9wZXJhdG9yICovCisJdW5zaWduZWQgbG9uZwkJc2htX25hdHRjaDsJLyogbm8uIG9mIGN1cnJlbnQgYXR0YWNoZXMgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDQ7CisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQ1OworfTsKKworc3RydWN0IHNobWluZm82NCB7CisJdW5zaWduZWQgbG9uZwlzaG1tYXg7CisJdW5zaWduZWQgbG9uZwlzaG1taW47CisJdW5zaWduZWQgbG9uZwlzaG1tbmk7CisJdW5zaWduZWQgbG9uZwlzaG1zZWc7CisJdW5zaWduZWQgbG9uZwlzaG1hbGw7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDQ7Cit9OworCisjZW5kaWYgLyogX19BU01fR0VORVJJQ19TSE1CVUZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3NobXBhcmFtLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2htcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWEzODUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3NobXBhcmFtLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fQVNNX0dFTkVSSUNfU0hNUEFSQU1fSAorI2RlZmluZSBfX0FTTV9HRU5FUklDX1NITVBBUkFNX0gKKworI2RlZmluZSBTSE1MQkEgUEFHRV9TSVpFCSAvKiBhdHRhY2ggYWRkciBhIG11bHRpcGxlIG9mIHRoaXMgKi8KKworI2VuZGlmIC8qIF9BU01fR0VORVJJQ19TSE1QQVJBTV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2lnaW5mby5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3NpZ2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjk2NjA4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3NpZ2luZm8uaApAQCAtMCwwICsxLDI2NyBAQAorI2lmbmRlZiBfQVNNX0dFTkVSSUNfU0lHSU5GT19ICisjZGVmaW5lIF9BU01fR0VORVJJQ19TSUdJTkZPX0gKKworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwordHlwZWRlZiB1bmlvbiBzaWd2YWwgeworCWludCBzaXZhbF9pbnQ7CisJdm9pZCAqc2l2YWxfcHRyOworfSBzaWd2YWxfdDsKKworLyoKKyAqIFRoaXMgaXMgdGhlIHNpemUgKGluY2x1ZGluZyBwYWRkaW5nKSBvZiB0aGUgcGFydCBvZiB0aGUKKyAqIHN0cnVjdCBzaWdpbmZvIHRoYXQgaXMgYmVmb3JlIHRoZSB1bmlvbi4KKyAqLworI2lmbmRlZiBfX0FSQ0hfU0lfUFJFQU1CTEVfU0laRQorI2RlZmluZSBfX0FSQ0hfU0lfUFJFQU1CTEVfU0laRQkoMyAqIHNpemVvZihpbnQpKQorI2VuZGlmCisKKyNkZWZpbmUgU0lfTUFYX1NJWkUJMTI4CisjaWZuZGVmIFNJX1BBRF9TSVpFCisjZGVmaW5lIFNJX1BBRF9TSVpFCSgoU0lfTUFYX1NJWkUgLSBfX0FSQ0hfU0lfUFJFQU1CTEVfU0laRSkgLyBzaXplb2YoaW50KSkKKyNlbmRpZgorCisjaWZuZGVmIF9fQVJDSF9TSV9VSURfVAorI2RlZmluZSBfX0FSQ0hfU0lfVUlEX1QJX19rZXJuZWxfdWlkMzJfdAorI2VuZGlmCisKKy8qCisgKiBUaGUgZGVmYXVsdCAic2lfYmFuZCIgdHlwZSBpcyAibG9uZyIsIGFzIHNwZWNpZmllZCBieSBQT1NJWC4KKyAqIEhvd2V2ZXIsIHNvbWUgYXJjaGl0ZWN0dXJlcyB3YW50IHRvIG92ZXJyaWRlIHRoaXMgdG8gImludCIKKyAqIGZvciBoaXN0b3JpY2FsIGNvbXBhdGliaWxpdHkgcmVhc29ucywgc28gd2UgYWxsb3cgdGhhdC4KKyAqLworI2lmbmRlZiBfX0FSQ0hfU0lfQkFORF9UCisjZGVmaW5lIF9fQVJDSF9TSV9CQU5EX1QgbG9uZworI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9BUkNIX1NJR0lORk9fVAorCit0eXBlZGVmIHN0cnVjdCBzaWdpbmZvIHsKKwlpbnQgc2lfc2lnbm87CisJaW50IHNpX2Vycm5vOworCWludCBzaV9jb2RlOworCisJdW5pb24geworCQlpbnQgX3BhZFtTSV9QQURfU0laRV07CisKKwkJLyoga2lsbCgpICovCisJCXN0cnVjdCB7CisJCQlfX2tlcm5lbF9waWRfdCBfcGlkOwkvKiBzZW5kZXIncyBwaWQgKi8KKwkJCV9fQVJDSF9TSV9VSURfVCBfdWlkOwkvKiBzZW5kZXIncyB1aWQgKi8KKwkJfSBfa2lsbDsKKworCQkvKiBQT1NJWC4xYiB0aW1lcnMgKi8KKwkJc3RydWN0IHsKKwkJCV9fa2VybmVsX3RpbWVyX3QgX3RpZDsJLyogdGltZXIgaWQgKi8KKwkJCWludCBfb3ZlcnJ1bjsJCS8qIG92ZXJydW4gY291bnQgKi8KKwkJCWNoYXIgX3BhZFtzaXplb2YoIF9fQVJDSF9TSV9VSURfVCkgLSBzaXplb2YoaW50KV07CisJCQlzaWd2YWxfdCBfc2lndmFsOwkvKiBzYW1lIGFzIGJlbG93ICovCisJCQlpbnQgX3N5c19wcml2YXRlOyAgICAgICAvKiBub3QgdG8gYmUgcGFzc2VkIHRvIHVzZXIgKi8KKwkJfSBfdGltZXI7CisKKwkJLyogUE9TSVguMWIgc2lnbmFscyAqLworCQlzdHJ1Y3QgeworCQkJX19rZXJuZWxfcGlkX3QgX3BpZDsJLyogc2VuZGVyJ3MgcGlkICovCisJCQlfX0FSQ0hfU0lfVUlEX1QgX3VpZDsJLyogc2VuZGVyJ3MgdWlkICovCisJCQlzaWd2YWxfdCBfc2lndmFsOworCQl9IF9ydDsKKworCQkvKiBTSUdDSExEICovCisJCXN0cnVjdCB7CisJCQlfX2tlcm5lbF9waWRfdCBfcGlkOwkvKiB3aGljaCBjaGlsZCAqLworCQkJX19BUkNIX1NJX1VJRF9UIF91aWQ7CS8qIHNlbmRlcidzIHVpZCAqLworCQkJaW50IF9zdGF0dXM7CQkvKiBleGl0IGNvZGUgKi8KKwkJCV9fa2VybmVsX2Nsb2NrX3QgX3V0aW1lOworCQkJX19rZXJuZWxfY2xvY2tfdCBfc3RpbWU7CisJCX0gX3NpZ2NobGQ7CisKKwkJLyogU0lHSUxMLCBTSUdGUEUsIFNJR1NFR1YsIFNJR0JVUyAqLworCQlzdHJ1Y3QgeworCQkJdm9pZCAqX2FkZHI7IC8qIGZhdWx0aW5nIGluc24vbWVtb3J5IHJlZi4gKi8KKyNpZmRlZiBfX0FSQ0hfU0lfVFJBUE5PCisJCQlpbnQgX3RyYXBubzsJLyogVFJBUCAjIHdoaWNoIGNhdXNlZCB0aGUgc2lnbmFsICovCisjZW5kaWYKKwkJCXNob3J0IF9hZGRyX2xzYjsgLyogTFNCIG9mIHRoZSByZXBvcnRlZCBhZGRyZXNzICovCisJCX0gX3NpZ2ZhdWx0OworCisJCS8qIFNJR1BPTEwgKi8KKwkJc3RydWN0IHsKKwkJCV9fQVJDSF9TSV9CQU5EX1QgX2JhbmQ7CS8qIFBPTExfSU4sIFBPTExfT1VULCBQT0xMX01TRyAqLworCQkJaW50IF9mZDsKKwkJfSBfc2lncG9sbDsKKwl9IF9zaWZpZWxkczsKK30gc2lnaW5mb190OworCisjZW5kaWYKKworLyoKKyAqIEhvdyB0aGVzZSBmaWVsZHMgYXJlIHRvIGJlIGFjY2Vzc2VkLgorICovCisjZGVmaW5lIHNpX3BpZAkJX3NpZmllbGRzLl9raWxsLl9waWQKKyNkZWZpbmUgc2lfdWlkCQlfc2lmaWVsZHMuX2tpbGwuX3VpZAorI2RlZmluZSBzaV90aWQJCV9zaWZpZWxkcy5fdGltZXIuX3RpZAorI2RlZmluZSBzaV9vdmVycnVuCV9zaWZpZWxkcy5fdGltZXIuX292ZXJydW4KKyNkZWZpbmUgc2lfc3lzX3ByaXZhdGUgIF9zaWZpZWxkcy5fdGltZXIuX3N5c19wcml2YXRlCisjZGVmaW5lIHNpX3N0YXR1cwlfc2lmaWVsZHMuX3NpZ2NobGQuX3N0YXR1cworI2RlZmluZSBzaV91dGltZQlfc2lmaWVsZHMuX3NpZ2NobGQuX3V0aW1lCisjZGVmaW5lIHNpX3N0aW1lCV9zaWZpZWxkcy5fc2lnY2hsZC5fc3RpbWUKKyNkZWZpbmUgc2lfdmFsdWUJX3NpZmllbGRzLl9ydC5fc2lndmFsCisjZGVmaW5lIHNpX2ludAkJX3NpZmllbGRzLl9ydC5fc2lndmFsLnNpdmFsX2ludAorI2RlZmluZSBzaV9wdHIJCV9zaWZpZWxkcy5fcnQuX3NpZ3ZhbC5zaXZhbF9wdHIKKyNkZWZpbmUgc2lfYWRkcgkJX3NpZmllbGRzLl9zaWdmYXVsdC5fYWRkcgorI2lmZGVmIF9fQVJDSF9TSV9UUkFQTk8KKyNkZWZpbmUgc2lfdHJhcG5vCV9zaWZpZWxkcy5fc2lnZmF1bHQuX3RyYXBubworI2VuZGlmCisjZGVmaW5lIHNpX2FkZHJfbHNiCV9zaWZpZWxkcy5fc2lnZmF1bHQuX2FkZHJfbHNiCisjZGVmaW5lIHNpX2JhbmQJCV9zaWZpZWxkcy5fc2lncG9sbC5fYmFuZAorI2RlZmluZSBzaV9mZAkJX3NpZmllbGRzLl9zaWdwb2xsLl9mZAorCisjZGVmaW5lIF9fU0lfS0lMTAkwCisjZGVmaW5lIF9fU0lfVElNRVIJMAorI2RlZmluZSBfX1NJX1BPTEwJMAorI2RlZmluZSBfX1NJX0ZBVUxUCTAKKyNkZWZpbmUgX19TSV9DSExECTAKKyNkZWZpbmUgX19TSV9SVAkJMAorI2RlZmluZSBfX1NJX01FU0dRCTAKKyNkZWZpbmUgX19TSV9DT0RFKFQsTikJKE4pCisKKy8qCisgKiBzaV9jb2RlIHZhbHVlcworICogRGlnaXRhbCByZXNlcnZlcyBwb3NpdGl2ZSB2YWx1ZXMgZm9yIGtlcm5lbC1nZW5lcmF0ZWQgc2lnbmFscy4KKyAqLworI2RlZmluZSBTSV9VU0VSCQkwCQkvKiBzZW50IGJ5IGtpbGwsIHNpZ3NlbmQsIHJhaXNlICovCisjZGVmaW5lIFNJX0tFUk5FTAkweDgwCQkvKiBzZW50IGJ5IHRoZSBrZXJuZWwgZnJvbSBzb21ld2hlcmUgKi8KKyNkZWZpbmUgU0lfUVVFVUUJLTEJCS8qIHNlbnQgYnkgc2lncXVldWUgKi8KKyNkZWZpbmUgU0lfVElNRVIgX19TSV9DT0RFKF9fU0lfVElNRVIsLTIpIC8qIHNlbnQgYnkgdGltZXIgZXhwaXJhdGlvbiAqLworI2RlZmluZSBTSV9NRVNHUSBfX1NJX0NPREUoX19TSV9NRVNHUSwtMykgLyogc2VudCBieSByZWFsIHRpbWUgbWVzcSBzdGF0ZSBjaGFuZ2UgKi8KKyNkZWZpbmUgU0lfQVNZTkNJTwktNAkJLyogc2VudCBieSBBSU8gY29tcGxldGlvbiAqLworI2RlZmluZSBTSV9TSUdJTwktNQkJLyogc2VudCBieSBxdWV1ZWQgU0lHSU8gKi8KKyNkZWZpbmUgU0lfVEtJTEwJLTYJCS8qIHNlbnQgYnkgdGtpbGwgc3lzdGVtIGNhbGwgKi8KKyNkZWZpbmUgU0lfREVUSFJFQUQJLTcJCS8qIHNlbnQgYnkgZXhlY3ZlKCkga2lsbGluZyBzdWJzaWRpYXJ5IHRocmVhZHMgKi8KKworI2RlZmluZSBTSV9GUk9NVVNFUihzaXB0cikJKChzaXB0ciktPnNpX2NvZGUgPD0gMCkKKyNkZWZpbmUgU0lfRlJPTUtFUk5FTChzaXB0cikJKChzaXB0ciktPnNpX2NvZGUgPiAwKQorCisvKgorICogU0lHSUxMIHNpX2NvZGVzCisgKi8KKyNkZWZpbmUgSUxMX0lMTE9QQwkoX19TSV9GQVVMVHwxKQkvKiBpbGxlZ2FsIG9wY29kZSAqLworI2RlZmluZSBJTExfSUxMT1BOCShfX1NJX0ZBVUxUfDIpCS8qIGlsbGVnYWwgb3BlcmFuZCAqLworI2RlZmluZSBJTExfSUxMQURSCShfX1NJX0ZBVUxUfDMpCS8qIGlsbGVnYWwgYWRkcmVzc2luZyBtb2RlICovCisjZGVmaW5lIElMTF9JTExUUlAJKF9fU0lfRkFVTFR8NCkJLyogaWxsZWdhbCB0cmFwICovCisjZGVmaW5lIElMTF9QUlZPUEMJKF9fU0lfRkFVTFR8NSkJLyogcHJpdmlsZWdlZCBvcGNvZGUgKi8KKyNkZWZpbmUgSUxMX1BSVlJFRwkoX19TSV9GQVVMVHw2KQkvKiBwcml2aWxlZ2VkIHJlZ2lzdGVyICovCisjZGVmaW5lIElMTF9DT1BST0MJKF9fU0lfRkFVTFR8NykJLyogY29wcm9jZXNzb3IgZXJyb3IgKi8KKyNkZWZpbmUgSUxMX0JBRFNUSwkoX19TSV9GQVVMVHw4KQkvKiBpbnRlcm5hbCBzdGFjayBlcnJvciAqLworI2RlZmluZSBOU0lHSUxMCQk4CisKKy8qCisgKiBTSUdGUEUgc2lfY29kZXMKKyAqLworI2RlZmluZSBGUEVfSU5URElWCShfX1NJX0ZBVUxUfDEpCS8qIGludGVnZXIgZGl2aWRlIGJ5IHplcm8gKi8KKyNkZWZpbmUgRlBFX0lOVE9WRgkoX19TSV9GQVVMVHwyKQkvKiBpbnRlZ2VyIG92ZXJmbG93ICovCisjZGVmaW5lIEZQRV9GTFRESVYJKF9fU0lfRkFVTFR8MykJLyogZmxvYXRpbmcgcG9pbnQgZGl2aWRlIGJ5IHplcm8gKi8KKyNkZWZpbmUgRlBFX0ZMVE9WRgkoX19TSV9GQVVMVHw0KQkvKiBmbG9hdGluZyBwb2ludCBvdmVyZmxvdyAqLworI2RlZmluZSBGUEVfRkxUVU5ECShfX1NJX0ZBVUxUfDUpCS8qIGZsb2F0aW5nIHBvaW50IHVuZGVyZmxvdyAqLworI2RlZmluZSBGUEVfRkxUUkVTCShfX1NJX0ZBVUxUfDYpCS8qIGZsb2F0aW5nIHBvaW50IGluZXhhY3QgcmVzdWx0ICovCisjZGVmaW5lIEZQRV9GTFRJTlYJKF9fU0lfRkFVTFR8NykJLyogZmxvYXRpbmcgcG9pbnQgaW52YWxpZCBvcGVyYXRpb24gKi8KKyNkZWZpbmUgRlBFX0ZMVFNVQgkoX19TSV9GQVVMVHw4KQkvKiBzdWJzY3JpcHQgb3V0IG9mIHJhbmdlICovCisjZGVmaW5lIE5TSUdGUEUJCTgKKworLyoKKyAqIFNJR1NFR1Ygc2lfY29kZXMKKyAqLworI2RlZmluZSBTRUdWX01BUEVSUgkoX19TSV9GQVVMVHwxKQkvKiBhZGRyZXNzIG5vdCBtYXBwZWQgdG8gb2JqZWN0ICovCisjZGVmaW5lIFNFR1ZfQUNDRVJSCShfX1NJX0ZBVUxUfDIpCS8qIGludmFsaWQgcGVybWlzc2lvbnMgZm9yIG1hcHBlZCBvYmplY3QgKi8KKyNkZWZpbmUgTlNJR1NFR1YJMgorCisvKgorICogU0lHQlVTIHNpX2NvZGVzCisgKi8KKyNkZWZpbmUgQlVTX0FEUkFMTgkoX19TSV9GQVVMVHwxKQkvKiBpbnZhbGlkIGFkZHJlc3MgYWxpZ25tZW50ICovCisjZGVmaW5lIEJVU19BRFJFUlIJKF9fU0lfRkFVTFR8MikJLyogbm9uLWV4aXN0YW50IHBoeXNpY2FsIGFkZHJlc3MgKi8KKyNkZWZpbmUgQlVTX09CSkVSUgkoX19TSV9GQVVMVHwzKQkvKiBvYmplY3Qgc3BlY2lmaWMgaGFyZHdhcmUgZXJyb3IgKi8KKy8qIGhhcmR3YXJlIG1lbW9yeSBlcnJvciBjb25zdW1lZCBvbiBhIG1hY2hpbmUgY2hlY2s6IGFjdGlvbiByZXF1aXJlZCAqLworI2RlZmluZSBCVVNfTUNFRVJSX0FSCShfX1NJX0ZBVUxUfDQpCisvKiBoYXJkd2FyZSBtZW1vcnkgZXJyb3IgZGV0ZWN0ZWQgaW4gcHJvY2VzcyBidXQgbm90IGNvbnN1bWVkOiBhY3Rpb24gb3B0aW9uYWwqLworI2RlZmluZSBCVVNfTUNFRVJSX0FPCShfX1NJX0ZBVUxUfDUpCisjZGVmaW5lIE5TSUdCVVMJCTUKKworLyoKKyAqIFNJR1RSQVAgc2lfY29kZXMKKyAqLworI2RlZmluZSBUUkFQX0JSS1BUCShfX1NJX0ZBVUxUfDEpCS8qIHByb2Nlc3MgYnJlYWtwb2ludCAqLworI2RlZmluZSBUUkFQX1RSQUNFCShfX1NJX0ZBVUxUfDIpCS8qIHByb2Nlc3MgdHJhY2UgdHJhcCAqLworI2RlZmluZSBUUkFQX0JSQU5DSCAgICAgKF9fU0lfRkFVTFR8MykgIC8qIHByb2Nlc3MgdGFrZW4gYnJhbmNoIHRyYXAgKi8KKyNkZWZpbmUgVFJBUF9IV0JLUFQgICAgIChfX1NJX0ZBVUxUfDQpICAvKiBoYXJkd2FyZSBicmVha3BvaW50L3dhdGNocG9pbnQgKi8KKyNkZWZpbmUgTlNJR1RSQVAJNAorCisvKgorICogU0lHQ0hMRCBzaV9jb2RlcworICovCisjZGVmaW5lIENMRF9FWElURUQJKF9fU0lfQ0hMRHwxKQkvKiBjaGlsZCBoYXMgZXhpdGVkICovCisjZGVmaW5lIENMRF9LSUxMRUQJKF9fU0lfQ0hMRHwyKQkvKiBjaGlsZCB3YXMga2lsbGVkICovCisjZGVmaW5lIENMRF9EVU1QRUQJKF9fU0lfQ0hMRHwzKQkvKiBjaGlsZCB0ZXJtaW5hdGVkIGFibm9ybWFsbHkgKi8KKyNkZWZpbmUgQ0xEX1RSQVBQRUQJKF9fU0lfQ0hMRHw0KQkvKiB0cmFjZWQgY2hpbGQgaGFzIHRyYXBwZWQgKi8KKyNkZWZpbmUgQ0xEX1NUT1BQRUQJKF9fU0lfQ0hMRHw1KQkvKiBjaGlsZCBoYXMgc3RvcHBlZCAqLworI2RlZmluZSBDTERfQ09OVElOVUVECShfX1NJX0NITER8NikJLyogc3RvcHBlZCBjaGlsZCBoYXMgY29udGludWVkICovCisjZGVmaW5lIE5TSUdDSExECTYKKworLyoKKyAqIFNJR1BPTEwgc2lfY29kZXMKKyAqLworI2RlZmluZSBQT0xMX0lOCQkoX19TSV9QT0xMfDEpCS8qIGRhdGEgaW5wdXQgYXZhaWxhYmxlICovCisjZGVmaW5lIFBPTExfT1VUCShfX1NJX1BPTEx8MikJLyogb3V0cHV0IGJ1ZmZlcnMgYXZhaWxhYmxlICovCisjZGVmaW5lIFBPTExfTVNHCShfX1NJX1BPTEx8MykJLyogaW5wdXQgbWVzc2FnZSBhdmFpbGFibGUgKi8KKyNkZWZpbmUgUE9MTF9FUlIJKF9fU0lfUE9MTHw0KQkvKiBpL28gZXJyb3IgKi8KKyNkZWZpbmUgUE9MTF9QUkkJKF9fU0lfUE9MTHw1KQkvKiBoaWdoIHByaW9yaXR5IGlucHV0IGF2YWlsYWJsZSAqLworI2RlZmluZSBQT0xMX0hVUAkoX19TSV9QT0xMfDYpCS8qIGRldmljZSBkaXNjb25uZWN0ZWQgKi8KKyNkZWZpbmUgTlNJR1BPTEwJNgorCisvKgorICogc2lnZXZlbnQgZGVmaW5pdGlvbnMKKyAqIAorICogSXQgc2VlbXMgbGlrZWx5IHRoYXQgU0lHRVZfVEhSRUFEIHdpbGwgaGF2ZSB0byBiZSBoYW5kbGVkIGZyb20gCisgKiB1c2Vyc3BhY2UsIGxpYnB0aHJlYWQgdHJhbnNtdXRpbmcgaXQgdG8gU0lHRVZfU0lHTkFMLCB3aGljaCB0aGUKKyAqIHRocmVhZCBtYW5hZ2VyIHRoZW4gY2F0Y2hlcyBhbmQgZG9lcyB0aGUgYXBwcm9wcmlhdGUgbm9uc2Vuc2UuCisgKiBIb3dldmVyLCBldmVyeXRoaW5nIGlzIHdyaXR0ZW4gb3V0IGhlcmUgc28gYXMgdG8gbm90IGdldCBsb3N0LgorICovCisjZGVmaW5lIFNJR0VWX1NJR05BTAkwCS8qIG5vdGlmeSB2aWEgc2lnbmFsICovCisjZGVmaW5lIFNJR0VWX05PTkUJMQkvKiBvdGhlciBub3RpZmljYXRpb246IG1lYW5pbmdsZXNzICovCisjZGVmaW5lIFNJR0VWX1RIUkVBRAkyCS8qIGRlbGl2ZXIgdmlhIHRocmVhZCBjcmVhdGlvbiAqLworI2RlZmluZSBTSUdFVl9USFJFQURfSUQgNAkvKiBkZWxpdmVyIHRvIHRocmVhZCAqLworCisvKgorICogVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSBhbGlnbm1lbnQgaXMgb2sgb24gYWxsIGN1cnJlbnQgYXJjaGl0ZWN0dXJlcworICogYnV0IHdlIGxlYXZlIG9wZW4gdGhpcyBiZWluZyBvdmVycmlkZGVuIGluIHRoZSBmdXR1cmUKKyAqLworI2lmbmRlZiBfX0FSQ0hfU0lHRVZfUFJFQU1CTEVfU0laRQorI2RlZmluZSBfX0FSQ0hfU0lHRVZfUFJFQU1CTEVfU0laRQkoc2l6ZW9mKGludCkgKiAyICsgc2l6ZW9mKHNpZ3ZhbF90KSkKKyNlbmRpZgorCisjZGVmaW5lIFNJR0VWX01BWF9TSVpFCTY0CisjZGVmaW5lIFNJR0VWX1BBRF9TSVpFCSgoU0lHRVZfTUFYX1NJWkUgLSBfX0FSQ0hfU0lHRVZfUFJFQU1CTEVfU0laRSkgXAorCQkvIHNpemVvZihpbnQpKQorCit0eXBlZGVmIHN0cnVjdCBzaWdldmVudCB7CisJc2lndmFsX3Qgc2lnZXZfdmFsdWU7CisJaW50IHNpZ2V2X3NpZ25vOworCWludCBzaWdldl9ub3RpZnk7CisJdW5pb24geworCQlpbnQgX3BhZFtTSUdFVl9QQURfU0laRV07CisJCSBpbnQgX3RpZDsKKworCQlzdHJ1Y3QgeworCQkJdm9pZCAoKl9mdW5jdGlvbikoc2lndmFsX3QpOworCQkJdm9pZCAqX2F0dHJpYnV0ZTsJLyogcmVhbGx5IHB0aHJlYWRfYXR0cl90ICovCisJCX0gX3NpZ2V2X3RocmVhZDsKKwl9IF9zaWdldl91bjsKK30gc2lnZXZlbnRfdDsKKworI2RlZmluZSBzaWdldl9ub3RpZnlfZnVuY3Rpb24JX3NpZ2V2X3VuLl9zaWdldl90aHJlYWQuX2Z1bmN0aW9uCisjZGVmaW5lIHNpZ2V2X25vdGlmeV9hdHRyaWJ1dGVzCV9zaWdldl91bi5fc2lnZXZfdGhyZWFkLl9hdHRyaWJ1dGUKKyNkZWZpbmUgc2lnZXZfbm90aWZ5X3RocmVhZF9pZAkgX3NpZ2V2X3VuLl90aWQKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9zaWduYWwtZGVmcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3NpZ25hbC1kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRjZmI2ZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9zaWduYWwtZGVmcy5oCkBAIC0wLDAgKzEsMjggQEAKKyNpZm5kZWYgX19BU01fR0VORVJJQ19TSUdOQUxfREVGU19ICisjZGVmaW5lIF9fQVNNX0dFTkVSSUNfU0lHTkFMX0RFRlNfSAorCisKKworI2lmbmRlZiBTSUdfQkxPQ0sKKyNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDAJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KKyNlbmRpZgorI2lmbmRlZiBTSUdfVU5CTE9DSworI2RlZmluZSBTSUdfVU5CTE9DSyAgICAgICAgMQkvKiBmb3IgdW5ibG9ja2luZyBzaWduYWxzICovCisjZW5kaWYKKyNpZm5kZWYgU0lHX1NFVE1BU0sKKyNkZWZpbmUgU0lHX1NFVE1BU0sgICAgICAgIDIJLyogZm9yIHNldHRpbmcgdGhlIHNpZ25hbCBtYXNrICovCisjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3R5cGVkZWYgdm9pZCBfX3NpZ25hbGZuX3QoaW50KTsKK3R5cGVkZWYgX19zaWduYWxmbl90ICpfX3NpZ2hhbmRsZXJfdDsKKwordHlwZWRlZiB2b2lkIF9fcmVzdG9yZWZuX3Qodm9pZCk7Cit0eXBlZGVmIF9fcmVzdG9yZWZuX3QgKl9fc2lncmVzdG9yZV90OworCisjZGVmaW5lIFNJR19ERkwJKChfX3NpZ2hhbmRsZXJfdCkwKQkvKiBkZWZhdWx0IHNpZ25hbCBoYW5kbGluZyAqLworI2RlZmluZSBTSUdfSUdOCSgoX19zaWdoYW5kbGVyX3QpMSkJLyogaWdub3JlIHNpZ25hbCAqLworI2RlZmluZSBTSUdfRVJSCSgoX19zaWdoYW5kbGVyX3QpLTEpCS8qIGVycm9yIHJldHVybiBmcm9tIHNpZ25hbCAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9HRU5FUklDX1NJR05BTF9ERUZTX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9zaWduYWwuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9zaWduYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWI2MTY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3NpZ25hbC5oCkBAIC0wLDAgKzEsMTIzIEBACisjaWZuZGVmIF9fQVNNX0dFTkVSSUNfU0lHTkFMX0gKKyNkZWZpbmUgX19BU01fR0VORVJJQ19TSUdOQUxfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBfTlNJRwkJNjQKKyNkZWZpbmUgX05TSUdfQlBXCV9fQklUU19QRVJfTE9ORworI2RlZmluZSBfTlNJR19XT1JEUwkoX05TSUcgLyBfTlNJR19CUFcpCisKKyNkZWZpbmUgU0lHSFVQCQkgMQorI2RlZmluZSBTSUdJTlQJCSAyCisjZGVmaW5lIFNJR1FVSVQJCSAzCisjZGVmaW5lIFNJR0lMTAkJIDQKKyNkZWZpbmUgU0lHVFJBUAkJIDUKKyNkZWZpbmUgU0lHQUJSVAkJIDYKKyNkZWZpbmUgU0lHSU9UCQkgNgorI2RlZmluZSBTSUdCVVMJCSA3CisjZGVmaW5lIFNJR0ZQRQkJIDgKKyNkZWZpbmUgU0lHS0lMTAkJIDkKKyNkZWZpbmUgU0lHVVNSMQkJMTAKKyNkZWZpbmUgU0lHU0VHVgkJMTEKKyNkZWZpbmUgU0lHVVNSMgkJMTIKKyNkZWZpbmUgU0lHUElQRQkJMTMKKyNkZWZpbmUgU0lHQUxSTQkJMTQKKyNkZWZpbmUgU0lHVEVSTQkJMTUKKyNkZWZpbmUgU0lHU1RLRkxUCTE2CisjZGVmaW5lIFNJR0NITEQJCTE3CisjZGVmaW5lIFNJR0NPTlQJCTE4CisjZGVmaW5lIFNJR1NUT1AJCTE5CisjZGVmaW5lIFNJR1RTVFAJCTIwCisjZGVmaW5lIFNJR1RUSU4JCTIxCisjZGVmaW5lIFNJR1RUT1UJCTIyCisjZGVmaW5lIFNJR1VSRwkJMjMKKyNkZWZpbmUgU0lHWENQVQkJMjQKKyNkZWZpbmUgU0lHWEZTWgkJMjUKKyNkZWZpbmUgU0lHVlRBTFJNCTI2CisjZGVmaW5lIFNJR1BST0YJCTI3CisjZGVmaW5lIFNJR1dJTkNICTI4CisjZGVmaW5lIFNJR0lPCQkyOQorI2RlZmluZSBTSUdQT0xMCQlTSUdJTworLyoKKyNkZWZpbmUgU0lHTE9TVAkJMjkKKyovCisjZGVmaW5lIFNJR1BXUgkJMzAKKyNkZWZpbmUgU0lHU1lTCQkzMQorI2RlZmluZQlTSUdVTlVTRUQJMzEKKworLyogVGhlc2Ugc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGNvbnN0YW50cyBmcm9tIHVzZXJsYW5kLiAgKi8KKyNkZWZpbmUgU0lHUlRNSU4JMzIKKyNpZm5kZWYgU0lHUlRNQVgKKyNkZWZpbmUgU0lHUlRNQVgJX05TSUcKKyNlbmRpZgorCisvKgorICogU0FfRkxBR1MgdmFsdWVzOgorICoKKyAqIFNBX09OU1RBQ0sgaW5kaWNhdGVzIHRoYXQgYSByZWdpc3RlcmVkIHN0YWNrX3Qgd2lsbCBiZSB1c2VkLgorICogU0FfUkVTVEFSVCBmbGFnIHRvIGdldCByZXN0YXJ0aW5nIHNpZ25hbHMgKHdoaWNoIHdlcmUgdGhlIGRlZmF1bHQgbG9uZyBhZ28pCisgKiBTQV9OT0NMRFNUT1AgZmxhZyB0byB0dXJuIG9mZiBTSUdDSExEIHdoZW4gY2hpbGRyZW4gc3RvcC4KKyAqIFNBX1JFU0VUSEFORCBjbGVhcnMgdGhlIGhhbmRsZXIgd2hlbiB0aGUgc2lnbmFsIGlzIGRlbGl2ZXJlZC4KKyAqIFNBX05PQ0xEV0FJVCBmbGFnIG9uIFNJR0NITEQgdG8gaW5oaWJpdCB6b21iaWVzLgorICogU0FfTk9ERUZFUiBwcmV2ZW50cyB0aGUgY3VycmVudCBzaWduYWwgZnJvbSBiZWluZyBtYXNrZWQgaW4gdGhlIGhhbmRsZXIuCisgKgorICogU0FfT05FU0hPVCBhbmQgU0FfTk9NQVNLIGFyZSB0aGUgaGlzdG9yaWNhbCBMaW51eCBuYW1lcyBmb3IgdGhlIFNpbmdsZQorICogVW5peCBuYW1lcyBSRVNFVEhBTkQgYW5kIE5PREVGRVIgcmVzcGVjdGl2ZWx5LgorICovCisjZGVmaW5lIFNBX05PQ0xEU1RPUAkweDAwMDAwMDAxCisjZGVmaW5lIFNBX05PQ0xEV0FJVAkweDAwMDAwMDAyCisjZGVmaW5lIFNBX1NJR0lORk8JMHgwMDAwMDAwNAorI2RlZmluZSBTQV9PTlNUQUNLCTB4MDgwMDAwMDAKKyNkZWZpbmUgU0FfUkVTVEFSVAkweDEwMDAwMDAwCisjZGVmaW5lIFNBX05PREVGRVIJMHg0MDAwMDAwMAorI2RlZmluZSBTQV9SRVNFVEhBTkQJMHg4MDAwMDAwMAorCisjZGVmaW5lIFNBX05PTUFTSwlTQV9OT0RFRkVSCisjZGVmaW5lIFNBX09ORVNIT1QJU0FfUkVTRVRIQU5ECisKKy8qCisgKiBOZXcgYXJjaGl0ZWN0dXJlcyBzaG91bGQgbm90IGRlZmluZSB0aGUgb2Jzb2xldGUKKyAqCVNBX1JFU1RPUkVSCTB4MDQwMDAwMDAKKyAqLworCisvKgorICogc2lnYWx0c3RhY2sgY29udHJvbHMKKyAqLworI2RlZmluZSBTU19PTlNUQUNLCTEKKyNkZWZpbmUgU1NfRElTQUJMRQkyCisKKyNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAorI2RlZmluZSBTSUdTVEtTWgk4MTkyCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBzaWdbX05TSUdfV09SRFNdOworfSBzaWdzZXRfdDsKKworLyogbm90IGFjdHVhbGx5IHVzZWQsIGJ1dCByZXF1aXJlZCBmb3IgbGludXgvc3lzY2FsbHMuaCAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG9sZF9zaWdzZXRfdDsKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ25hbC1kZWZzLmg+CisKK3N0cnVjdCBzaWdhY3Rpb24geworCV9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7CisJdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKKyNpZmRlZiBTQV9SRVNUT1JFUgorCV9fc2lncmVzdG9yZV90IHNhX3Jlc3RvcmVyOworI2VuZGlmCisJc2lnc2V0X3Qgc2FfbWFzazsJCS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLworfTsKKworc3RydWN0IGtfc2lnYWN0aW9uIHsKKwlzdHJ1Y3Qgc2lnYWN0aW9uIHNhOworfTsKKwordHlwZWRlZiBzdHJ1Y3Qgc2lnYWx0c3RhY2sgeworCXZvaWQgKnNzX3NwOworCWludCBzc19mbGFnczsKKwlzaXplX3Qgc3Nfc2l6ZTsKK30gc3RhY2tfdDsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9HRU5FUklDX1NJR05BTF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMvc29ja2V0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMvc29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2MTE1ZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9zb2NrZXQuaApAQCAtMCwwICsxLDY3IEBACisjaWZuZGVmIF9fQVNNX0dFTkVSSUNfU09DS0VUX0gKKyNkZWZpbmUgX19BU01fR0VORVJJQ19TT0NLRVRfSAorCisjaW5jbHVkZSA8YXNtL3NvY2tpb3MuaD4KKworLyogRm9yIHNldHNvY2tvcHQoMikgKi8KKyNkZWZpbmUgU09MX1NPQ0tFVAkxCisKKyNkZWZpbmUgU09fREVCVUcJMQorI2RlZmluZSBTT19SRVVTRUFERFIJMgorI2RlZmluZSBTT19UWVBFCQkzCisjZGVmaW5lIFNPX0VSUk9SCTQKKyNkZWZpbmUgU09fRE9OVFJPVVRFCTUKKyNkZWZpbmUgU09fQlJPQURDQVNUCTYKKyNkZWZpbmUgU09fU05EQlVGCTcKKyNkZWZpbmUgU09fUkNWQlVGCTgKKyNkZWZpbmUgU09fU05EQlVGRk9SQ0UJMzIKKyNkZWZpbmUgU09fUkNWQlVGRk9SQ0UJMzMKKyNkZWZpbmUgU09fS0VFUEFMSVZFCTkKKyNkZWZpbmUgU09fT09CSU5MSU5FCTEwCisjZGVmaW5lIFNPX05PX0NIRUNLCTExCisjZGVmaW5lIFNPX1BSSU9SSVRZCTEyCisjZGVmaW5lIFNPX0xJTkdFUgkxMworI2RlZmluZSBTT19CU0RDT01QQVQJMTQKKy8qIFRvIGFkZCA6I2RlZmluZSBTT19SRVVTRVBPUlQgMTUgKi8KKworI2lmbmRlZiBTT19QQVNTQ1JFRCAvKiBwb3dlcnBjIG9ubHkgZGlmZmVycyBpbiB0aGVzZSAqLworI2RlZmluZSBTT19QQVNTQ1JFRAkxNgorI2RlZmluZSBTT19QRUVSQ1JFRAkxNworI2RlZmluZSBTT19SQ1ZMT1dBVAkxOAorI2RlZmluZSBTT19TTkRMT1dBVAkxOQorI2RlZmluZSBTT19SQ1ZUSU1FTwkyMAorI2RlZmluZSBTT19TTkRUSU1FTwkyMQorI2VuZGlmCisKKy8qIFNlY3VyaXR5IGxldmVscyAtIGFzIHBlciBOUkwgSVB2NiAtIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nICovCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0FVVEhFTlRJQ0FUSU9OCQkyMgorI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX1RSQU5TUE9SVAkyMworI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX05FVFdPUksJCTI0CisKKyNkZWZpbmUgU09fQklORFRPREVWSUNFCTI1CisKKy8qIFNvY2tldCBmaWx0ZXJpbmcgKi8KKyNkZWZpbmUgU09fQVRUQUNIX0ZJTFRFUgkyNgorI2RlZmluZSBTT19ERVRBQ0hfRklMVEVSCTI3CisKKyNkZWZpbmUgU09fUEVFUk5BTUUJCTI4CisjZGVmaW5lIFNPX1RJTUVTVEFNUAkJMjkKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUAkJU09fVElNRVNUQU1QCisKKyNkZWZpbmUgU09fQUNDRVBUQ09OTgkJMzAKKworI2RlZmluZSBTT19QRUVSU0VDCQkzMQorI2RlZmluZSBTT19QQVNTU0VDCQkzNAorI2RlZmluZSBTT19USU1FU1RBTVBOUwkJMzUKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUE5TCQlTT19USU1FU1RBTVBOUworCisjZGVmaW5lIFNPX01BUksJCQkzNgorCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKworI2RlZmluZSBTT19QUk9UT0NPTAkJMzgKKyNkZWZpbmUgU09fRE9NQUlOCQkzOQorCisjZGVmaW5lIFNPX1JYUV9PVkZMICAgICAgICAgICAgIDQwCisjZW5kaWYgLyogX19BU01fR0VORVJJQ19TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3NvY2tpb3MuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9zb2NraW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2MWEzNgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9zb2NraW9zLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfX0FTTV9HRU5FUklDX1NPQ0tJT1NfSAorI2RlZmluZSBfX0FTTV9HRU5FUklDX1NPQ0tJT1NfSAorCisvKiBTb2NrZXQtbGV2ZWwgSS9PIGNvbnRyb2wgY2FsbHMuICovCisjZGVmaW5lIEZJT1NFVE9XTgkweDg5MDEKKyNkZWZpbmUgU0lPQ1NQR1JQCTB4ODkwMgorI2RlZmluZSBGSU9HRVRPV04JMHg4OTAzCisjZGVmaW5lIFNJT0NHUEdSUAkweDg5MDQKKyNkZWZpbmUgU0lPQ0FUTUFSSwkweDg5MDUKKyNkZWZpbmUgU0lPQ0dTVEFNUAkweDg5MDYJCS8qIEdldCBzdGFtcCAodGltZXZhbCkgKi8KKyNkZWZpbmUgU0lPQ0dTVEFNUE5TCTB4ODkwNwkJLyogR2V0IHN0YW1wICh0aW1lc3BlYykgKi8KKworI2VuZGlmIC8qIF9fQVNNX0dFTkVSSUNfU09DS0lPU19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMvc3RhdC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3N0YXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDhjYWQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3N0YXQuaApAQCAtMCwwICsxLDcyIEBACisjaWZuZGVmIF9fQVNNX0dFTkVSSUNfU1RBVF9ICisjZGVmaW5lIF9fQVNNX0dFTkVSSUNfU1RBVF9ICisKKy8qCisgKiBFdmVyeWJvZHkgZ2V0cyB0aGlzIHdyb25nIGFuZCBoYXMgdG8gc3RpY2sgd2l0aCBpdCBmb3IgYWxsCisgKiBldGVybml0eS4gSG9wZWZ1bGx5LCB0aGlzIHZlcnNpb24gZ2V0cyB1c2VkIGJ5IG5ldyBhcmNoaXRlY3R1cmVzCisgKiBzbyB0aGV5IGRvbid0IGZhbGwgaW50byB0aGUgc2FtZSB0cmFwcy4KKyAqCisgKiBzdGF0NjQgaXMgY29waWVkIGZyb20gcG93ZXJwYzY0LCB3aXRoIGV4cGxpY2l0IHBhZGRpbmcgYWRkZWQuCisgKiBzdGF0IGlzIHRoZSBzYW1lIHN0cnVjdHVyZSBsYXlvdXQgb24gNjQtYml0LCB3aXRob3V0IHRoZSAnbG9uZyBsb25nJworICogdHlwZXMuCisgKgorICogQnkgY29udmVudGlvbiwgNjQgYml0IGFyY2hpdGVjdHVyZXMgdXNlIHRoZSBzdGF0IGludGVyZmFjZSwgd2hpbGUKKyAqIDMyIGJpdCBhcmNoaXRlY3R1cmVzIHVzZSB0aGUgc3RhdDY0IGludGVyZmFjZS4gTm90ZSB0aGF0IHdlIGRvbid0CisgKiBwcm92aWRlIGFuIF9fb2xkX2tlcm5lbF9zdGF0IGhlcmUsIHdoaWNoIG5ldyBhcmNoaXRlY3R1cmUgc2hvdWxkCisgKiBub3QgaGF2ZSB0byBzdGFydCB3aXRoLgorICovCisKKyNpbmNsdWRlIDxhc20vYml0c3BlcmxvbmcuaD4KKworI2RlZmluZSBTVEFUX0hBVkVfTlNFQyAxCisKK3N0cnVjdCBzdGF0IHsKKwl1bnNpZ25lZCBsb25nCXN0X2RldjsJCS8qIERldmljZS4gICovCisJdW5zaWduZWQgbG9uZwlzdF9pbm87CQkvKiBGaWxlIHNlcmlhbCBudW1iZXIuICAqLworCXVuc2lnbmVkIGludAlzdF9tb2RlOwkvKiBGaWxlIG1vZGUuICAqLworCXVuc2lnbmVkIGludAlzdF9ubGluazsJLyogTGluayBjb3VudC4gICovCisJdW5zaWduZWQgaW50CXN0X3VpZDsJCS8qIFVzZXIgSUQgb2YgdGhlIGZpbGUncyBvd25lci4gICovCisJdW5zaWduZWQgaW50CXN0X2dpZDsJCS8qIEdyb3VwIElEIG9mIHRoZSBmaWxlJ3MgZ3JvdXAuICovCisJdW5zaWduZWQgbG9uZwlzdF9yZGV2OwkvKiBEZXZpY2UgbnVtYmVyLCBpZiBkZXZpY2UuICAqLworCXVuc2lnbmVkIGxvbmcJX19wYWQxOworCWxvbmcJCXN0X3NpemU7CS8qIFNpemUgb2YgZmlsZSwgaW4gYnl0ZXMuICAqLworCWludAkJc3RfYmxrc2l6ZTsJLyogT3B0aW1hbCBibG9jayBzaXplIGZvciBJL08uICAqLworCWludAkJX19wYWQyOworCWxvbmcJCXN0X2Jsb2NrczsJLyogTnVtYmVyIDUxMi1ieXRlIGJsb2NrcyBhbGxvY2F0ZWQuICovCisJbG9uZwkJc3RfYXRpbWU7CS8qIFRpbWUgb2YgbGFzdCBhY2Nlc3MuICAqLworCXVuc2lnbmVkIGxvbmcJc3RfYXRpbWVfbnNlYzsKKwlsb25nCQlzdF9tdGltZTsJLyogVGltZSBvZiBsYXN0IG1vZGlmaWNhdGlvbi4gICovCisJdW5zaWduZWQgbG9uZwlzdF9tdGltZV9uc2VjOworCWxvbmcJCXN0X2N0aW1lOwkvKiBUaW1lIG9mIGxhc3Qgc3RhdHVzIGNoYW5nZS4gICovCisJdW5zaWduZWQgbG9uZwlzdF9jdGltZV9uc2VjOworCXVuc2lnbmVkIGludAlfX3VudXNlZDQ7CisJdW5zaWduZWQgaW50CV9fdW51c2VkNTsKK307CisKKy8qIFRoaXMgbWF0Y2hlcyBzdHJ1Y3Qgc3RhdDY0IGluIGdsaWJjMi4xLiBPbmx5IHVzZWQgZm9yIDMyIGJpdC4gKi8KKyNpZiBfX0JJVFNfUEVSX0xPTkcgIT0gNjQgfHwgZGVmaW5lZChfX0FSQ0hfV0FOVF9TVEFUNjQpCitzdHJ1Y3Qgc3RhdDY0IHsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3RfZGV2OwkvKiBEZXZpY2UuICAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdF9pbm87CS8qIEZpbGUgc2VyaWFsIG51bWJlci4gICovCisJdW5zaWduZWQgaW50CXN0X21vZGU7CS8qIEZpbGUgbW9kZS4gICovCisJdW5zaWduZWQgaW50CXN0X25saW5rOwkvKiBMaW5rIGNvdW50LiAgKi8KKwl1bnNpZ25lZCBpbnQJc3RfdWlkOwkJLyogVXNlciBJRCBvZiB0aGUgZmlsZSdzIG93bmVyLiAgKi8KKwl1bnNpZ25lZCBpbnQJc3RfZ2lkOwkJLyogR3JvdXAgSUQgb2YgdGhlIGZpbGUncyBncm91cC4gKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgc3RfcmRldjsJLyogRGV2aWNlIG51bWJlciwgaWYgZGV2aWNlLiAgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgX19wYWQxOworCWxvbmcgbG9uZwlzdF9zaXplOwkvKiBTaXplIG9mIGZpbGUsIGluIGJ5dGVzLiAgKi8KKwlpbnQJCXN0X2Jsa3NpemU7CS8qIE9wdGltYWwgYmxvY2sgc2l6ZSBmb3IgSS9PLiAgKi8KKwlpbnQJCV9fcGFkMjsKKwlsb25nIGxvbmcJc3RfYmxvY2tzOwkvKiBOdW1iZXIgNTEyLWJ5dGUgYmxvY2tzIGFsbG9jYXRlZC4gKi8KKwlpbnQJCXN0X2F0aW1lOwkvKiBUaW1lIG9mIGxhc3QgYWNjZXNzLiAgKi8KKwl1bnNpZ25lZCBpbnQJc3RfYXRpbWVfbnNlYzsKKwlpbnQJCXN0X210aW1lOwkvKiBUaW1lIG9mIGxhc3QgbW9kaWZpY2F0aW9uLiAgKi8KKwl1bnNpZ25lZCBpbnQJc3RfbXRpbWVfbnNlYzsKKwlpbnQJCXN0X2N0aW1lOwkvKiBUaW1lIG9mIGxhc3Qgc3RhdHVzIGNoYW5nZS4gICovCisJdW5zaWduZWQgaW50CXN0X2N0aW1lX25zZWM7CisJdW5zaWduZWQgaW50CV9fdW51c2VkNDsKKwl1bnNpZ25lZCBpbnQJX191bnVzZWQ1OworfTsKKyNlbmRpZgorCisjZW5kaWYgLyogX19BU01fR0VORVJJQ19TVEFUX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9zdGF0ZnMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9zdGF0ZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGQ1NDQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3N0YXRmcy5oCkBAIC0wLDAgKzEsODMgQEAKKyNpZm5kZWYgX0dFTkVSSUNfU1RBVEZTX0gKKyNkZWZpbmUgX0dFTkVSSUNfU1RBVEZTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKworLyoKKyAqIE1vc3QgNjQtYml0IHBsYXRmb3JtcyB1c2UgJ2xvbmcnLCB3aGlsZSBtb3N0IDMyLWJpdCBwbGF0Zm9ybXMgdXNlICdfX3UzMicuCisgKiBZZXMsIHRoZXkgZGlmZmVyIGluIHNpZ25lZG5lc3MgYXMgd2VsbCBhcyBzaXplLgorICogU3BlY2lhbCBjYXNlcyBjYW4gb3ZlcnJpZGUgaXQgZm9yIHRoZW1zZWx2ZXMgLS0gZXhjZXB0IGZvciBTMzkweCwgd2hpY2gKKyAqIGlzIGp1c3QgYSBsaXR0bGUgdG9vIHNwZWNpYWwgZm9yIHVzLiBBbmQgTUlQUywgd2hpY2ggSSdtIG5vdCB0b3VjaGluZworICogd2l0aCBhIDEwJyBwb2xlLgorICovCisjaWZuZGVmIF9fc3RhdGZzX3dvcmQKKyNpZiBCSVRTX1BFUl9MT05HID09IDY0CisjZGVmaW5lIF9fc3RhdGZzX3dvcmQgbG9uZworI2Vsc2UKKyNkZWZpbmUgX19zdGF0ZnNfd29yZCBfX3UzMgorI2VuZGlmCisjZW5kaWYKKworc3RydWN0IHN0YXRmcyB7CisJX19zdGF0ZnNfd29yZCBmX3R5cGU7CisJX19zdGF0ZnNfd29yZCBmX2JzaXplOworCV9fc3RhdGZzX3dvcmQgZl9ibG9ja3M7CisJX19zdGF0ZnNfd29yZCBmX2JmcmVlOworCV9fc3RhdGZzX3dvcmQgZl9iYXZhaWw7CisJX19zdGF0ZnNfd29yZCBmX2ZpbGVzOworCV9fc3RhdGZzX3dvcmQgZl9mZnJlZTsKKwlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOworCV9fc3RhdGZzX3dvcmQgZl9uYW1lbGVuOworCV9fc3RhdGZzX3dvcmQgZl9mcnNpemU7CisJX19zdGF0ZnNfd29yZCBmX2ZsYWdzOworCV9fc3RhdGZzX3dvcmQgZl9zcGFyZVs0XTsKK307CisKKy8qCisgKiBBUk0gbmVlZHMgdG8gYXZvaWQgdGhlIDMyLWJpdCBwYWRkaW5nIGF0IHRoZSBlbmQsIGZvciBjb25zaXN0ZW5jeQorICogYmV0d2VlbiBFQUJJIGFuZCBPQUJJIAorICovCisjaWZuZGVmIEFSQ0hfUEFDS19TVEFURlM2NAorI2RlZmluZSBBUkNIX1BBQ0tfU1RBVEZTNjQKKyNlbmRpZgorCitzdHJ1Y3Qgc3RhdGZzNjQgeworCV9fc3RhdGZzX3dvcmQgZl90eXBlOworCV9fc3RhdGZzX3dvcmQgZl9ic2l6ZTsKKwlfX3U2NCBmX2Jsb2NrczsKKwlfX3U2NCBmX2JmcmVlOworCV9fdTY0IGZfYmF2YWlsOworCV9fdTY0IGZfZmlsZXM7CisJX191NjQgZl9mZnJlZTsKKwlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOworCV9fc3RhdGZzX3dvcmQgZl9uYW1lbGVuOworCV9fc3RhdGZzX3dvcmQgZl9mcnNpemU7CisJX19zdGF0ZnNfd29yZCBmX2ZsYWdzOworCV9fc3RhdGZzX3dvcmQgZl9zcGFyZVs0XTsKK30gQVJDSF9QQUNLX1NUQVRGUzY0OworCisvKiAKKyAqIElBNjQgYW5kIHg4Nl82NCBuZWVkIHRvIGF2b2lkIHRoZSAzMi1iaXQgcGFkZGluZyBhdCB0aGUgZW5kLAorICogdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBpMzg2IEFCSQorICovCisjaWZuZGVmIEFSQ0hfUEFDS19DT01QQVRfU1RBVEZTNjQKKyNkZWZpbmUgQVJDSF9QQUNLX0NPTVBBVF9TVEFURlM2NAorI2VuZGlmCisKK3N0cnVjdCBjb21wYXRfc3RhdGZzNjQgeworCV9fdTMyIGZfdHlwZTsKKwlfX3UzMiBmX2JzaXplOworCV9fdTY0IGZfYmxvY2tzOworCV9fdTY0IGZfYmZyZWU7CisJX191NjQgZl9iYXZhaWw7CisJX191NjQgZl9maWxlczsKKwlfX3U2NCBmX2ZmcmVlOworCV9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7CisJX191MzIgZl9uYW1lbGVuOworCV9fdTMyIGZfZnJzaXplOworCV9fdTMyIGZfZmxhZ3M7CisJX191MzIgZl9zcGFyZVs0XTsKK30gQVJDSF9QQUNLX0NPTVBBVF9TVEFURlM2NDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMvc3dhYi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3N3YWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGU5MDI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3N3YWIuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIF9BU01fR0VORVJJQ19TV0FCX0gKKyNkZWZpbmUgX0FTTV9HRU5FUklDX1NXQUJfSAorCisjaW5jbHVkZSA8YXNtL2JpdHNwZXJsb25nLmg+CisKKy8qCisgKiAzMiBiaXQgYXJjaGl0ZWN0dXJlcyB0eXBpY2FsbHkgKGJ1dCBub3QgYWx3YXlzKSB3YW50IHRvCisgKiBzZXQgX19TV0FCXzY0X1RIUlVfMzJfXy4gSW4gdXNlciBzcGFjZSwgdGhpcyBpcyBvbmx5CisgKiB2YWxpZCBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgNjQgYml0IGRhdGEgdHlwZXMuCisgKi8KKworI2lmIF9fQklUU19QRVJfTE9ORyA9PSAzMgorI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQorI2RlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCisjZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9HRU5FUklDX1NXQUJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3Rlcm1iaXRzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGVybWJpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzJiNDc4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3Rlcm1iaXRzLmgKQEAgLTAsMCArMSwxOTkgQEAKKyNpZm5kZWYgX19BU01fR0VORVJJQ19URVJNQklUU19ICisjZGVmaW5lIF9fQVNNX0dFTkVSSUNfVEVSTUJJVFNfSAorCisjaW5jbHVkZSA8bGludXgvcG9zaXhfdHlwZXMuaD4KKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyCWNjX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlzcGVlZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJdGNmbGFnX3Q7CisKKyNkZWZpbmUgTkNDUyAxOQorc3RydWN0IHRlcm1pb3MgeworCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCisJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCit9OworCitzdHJ1Y3QgdGVybWlvczIgeworCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCisJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCisJc3BlZWRfdCBjX2lzcGVlZDsJCS8qIGlucHV0IHNwZWVkICovCisJc3BlZWRfdCBjX29zcGVlZDsJCS8qIG91dHB1dCBzcGVlZCAqLworfTsKKworc3RydWN0IGt0ZXJtaW9zIHsKKwl0Y2ZsYWdfdCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLworCWNjX3QgY19saW5lOwkJCS8qIGxpbmUgZGlzY2lwbGluZSAqLworCWNjX3QgY19jY1tOQ0NTXTsJCS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLworCXNwZWVkX3QgY19pc3BlZWQ7CQkvKiBpbnB1dCBzcGVlZCAqLworCXNwZWVkX3QgY19vc3BlZWQ7CQkvKiBvdXRwdXQgc3BlZWQgKi8KK307CisKKy8qIGNfY2MgY2hhcmFjdGVycyAqLworI2RlZmluZSBWSU5UUiAwCisjZGVmaW5lIFZRVUlUIDEKKyNkZWZpbmUgVkVSQVNFIDIKKyNkZWZpbmUgVktJTEwgMworI2RlZmluZSBWRU9GIDQKKyNkZWZpbmUgVlRJTUUgNQorI2RlZmluZSBWTUlOIDYKKyNkZWZpbmUgVlNXVEMgNworI2RlZmluZSBWU1RBUlQgOAorI2RlZmluZSBWU1RPUCA5CisjZGVmaW5lIFZTVVNQIDEwCisjZGVmaW5lIFZFT0wgMTEKKyNkZWZpbmUgVlJFUFJJTlQgMTIKKyNkZWZpbmUgVkRJU0NBUkQgMTMKKyNkZWZpbmUgVldFUkFTRSAxNAorI2RlZmluZSBWTE5FWFQgMTUKKyNkZWZpbmUgVkVPTDIgMTYKKworLyogY19pZmxhZyBiaXRzICovCisjZGVmaW5lIElHTkJSSwkwMDAwMDAxCisjZGVmaW5lIEJSS0lOVAkwMDAwMDAyCisjZGVmaW5lIElHTlBBUgkwMDAwMDA0CisjZGVmaW5lIFBBUk1SSwkwMDAwMDEwCisjZGVmaW5lIElOUENLCTAwMDAwMjAKKyNkZWZpbmUgSVNUUklQCTAwMDAwNDAKKyNkZWZpbmUgSU5MQ1IJMDAwMDEwMAorI2RlZmluZSBJR05DUgkwMDAwMjAwCisjZGVmaW5lIElDUk5MCTAwMDA0MDAKKyNkZWZpbmUgSVVDTEMJMDAwMTAwMAorI2RlZmluZSBJWE9OCTAwMDIwMDAKKyNkZWZpbmUgSVhBTlkJMDAwNDAwMAorI2RlZmluZSBJWE9GRgkwMDEwMDAwCisjZGVmaW5lIElNQVhCRUwJMDAyMDAwMAorI2RlZmluZSBJVVRGOAkwMDQwMDAwCisKKy8qIGNfb2ZsYWcgYml0cyAqLworI2RlZmluZSBPUE9TVAkwMDAwMDAxCisjZGVmaW5lIE9MQ1VDCTAwMDAwMDIKKyNkZWZpbmUgT05MQ1IJMDAwMDAwNAorI2RlZmluZSBPQ1JOTAkwMDAwMDEwCisjZGVmaW5lIE9OT0NSCTAwMDAwMjAKKyNkZWZpbmUgT05MUkVUCTAwMDAwNDAKKyNkZWZpbmUgT0ZJTEwJMDAwMDEwMAorI2RlZmluZSBPRkRFTAkwMDAwMjAwCisjZGVmaW5lIE5MRExZCTAwMDA0MDAKKyNkZWZpbmUgICBOTDAJMDAwMDAwMAorI2RlZmluZSAgIE5MMQkwMDAwNDAwCisjZGVmaW5lIENSRExZCTAwMDMwMDAKKyNkZWZpbmUgICBDUjAJMDAwMDAwMAorI2RlZmluZSAgIENSMQkwMDAxMDAwCisjZGVmaW5lICAgQ1IyCTAwMDIwMDAKKyNkZWZpbmUgICBDUjMJMDAwMzAwMAorI2RlZmluZSBUQUJETFkJMDAxNDAwMAorI2RlZmluZSAgIFRBQjAJMDAwMDAwMAorI2RlZmluZSAgIFRBQjEJMDAwNDAwMAorI2RlZmluZSAgIFRBQjIJMDAxMDAwMAorI2RlZmluZSAgIFRBQjMJMDAxNDAwMAorI2RlZmluZSAgIFhUQUJTCTAwMTQwMDAKKyNkZWZpbmUgQlNETFkJMDAyMDAwMAorI2RlZmluZSAgIEJTMAkwMDAwMDAwCisjZGVmaW5lICAgQlMxCTAwMjAwMDAKKyNkZWZpbmUgVlRETFkJMDA0MDAwMAorI2RlZmluZSAgIFZUMAkwMDAwMDAwCisjZGVmaW5lICAgVlQxCTAwNDAwMDAKKyNkZWZpbmUgRkZETFkJMDEwMDAwMAorI2RlZmluZSAgIEZGMAkwMDAwMDAwCisjZGVmaW5lICAgRkYxCTAxMDAwMDAKKworLyogY19jZmxhZyBiaXQgbWVhbmluZyAqLworI2RlZmluZSBDQkFVRAkwMDEwMDE3CisjZGVmaW5lICBCMAkwMDAwMDAwCQkvKiBoYW5nIHVwICovCisjZGVmaW5lICBCNTAJMDAwMDAwMQorI2RlZmluZSAgQjc1CTAwMDAwMDIKKyNkZWZpbmUgIEIxMTAJMDAwMDAwMworI2RlZmluZSAgQjEzNAkwMDAwMDA0CisjZGVmaW5lICBCMTUwCTAwMDAwMDUKKyNkZWZpbmUgIEIyMDAJMDAwMDAwNgorI2RlZmluZSAgQjMwMAkwMDAwMDA3CisjZGVmaW5lICBCNjAwCTAwMDAwMTAKKyNkZWZpbmUgIEIxMjAwCTAwMDAwMTEKKyNkZWZpbmUgIEIxODAwCTAwMDAwMTIKKyNkZWZpbmUgIEIyNDAwCTAwMDAwMTMKKyNkZWZpbmUgIEI0ODAwCTAwMDAwMTQKKyNkZWZpbmUgIEI5NjAwCTAwMDAwMTUKKyNkZWZpbmUgIEIxOTIwMAkwMDAwMDE2CisjZGVmaW5lICBCMzg0MDAJMDAwMDAxNworI2RlZmluZSBFWFRBIEIxOTIwMAorI2RlZmluZSBFWFRCIEIzODQwMAorI2RlZmluZSBDU0laRQkwMDAwMDYwCisjZGVmaW5lICAgQ1M1CTAwMDAwMDAKKyNkZWZpbmUgICBDUzYJMDAwMDAyMAorI2RlZmluZSAgIENTNwkwMDAwMDQwCisjZGVmaW5lICAgQ1M4CTAwMDAwNjAKKyNkZWZpbmUgQ1NUT1BCCTAwMDAxMDAKKyNkZWZpbmUgQ1JFQUQJMDAwMDIwMAorI2RlZmluZSBQQVJFTkIJMDAwMDQwMAorI2RlZmluZSBQQVJPREQJMDAwMTAwMAorI2RlZmluZSBIVVBDTAkwMDAyMDAwCisjZGVmaW5lIENMT0NBTAkwMDA0MDAwCisjZGVmaW5lIENCQVVERVggMDAxMDAwMAorI2RlZmluZSAgICBCT1RIRVIgMDAxMDAwMAorI2RlZmluZSAgICBCNTc2MDAgMDAxMDAwMQorI2RlZmluZSAgIEIxMTUyMDAgMDAxMDAwMgorI2RlZmluZSAgIEIyMzA0MDAgMDAxMDAwMworI2RlZmluZSAgIEI0NjA4MDAgMDAxMDAwNAorI2RlZmluZSAgIEI1MDAwMDAgMDAxMDAwNQorI2RlZmluZSAgIEI1NzYwMDAgMDAxMDAwNgorI2RlZmluZSAgIEI5MjE2MDAgMDAxMDAwNworI2RlZmluZSAgQjEwMDAwMDAgMDAxMDAxMAorI2RlZmluZSAgQjExNTIwMDAgMDAxMDAxMQorI2RlZmluZSAgQjE1MDAwMDAgMDAxMDAxMgorI2RlZmluZSAgQjIwMDAwMDAgMDAxMDAxMworI2RlZmluZSAgQjI1MDAwMDAgMDAxMDAxNAorI2RlZmluZSAgQjMwMDAwMDAgMDAxMDAxNQorI2RlZmluZSAgQjM1MDAwMDAgMDAxMDAxNgorI2RlZmluZSAgQjQwMDAwMDAgMDAxMDAxNworI2RlZmluZSBDSUJBVUQJICAwMDIwMDM2MDAwMDAJLyogaW5wdXQgYmF1ZCByYXRlICovCisjZGVmaW5lIENNU1BBUgkgIDAxMDAwMDAwMDAwMAkvKiBtYXJrIG9yIHNwYWNlIChzdGljaykgcGFyaXR5ICovCisjZGVmaW5lIENSVFNDVFMJICAwMjAwMDAwMDAwMDAJLyogZmxvdyBjb250cm9sICovCisKKyNkZWZpbmUgSUJTSElGVAkgIDE2CQkvKiBTaGlmdCBmcm9tIENCQVVEIHRvIENJQkFVRCAqLworCisvKiBjX2xmbGFnIGJpdHMgKi8KKyNkZWZpbmUgSVNJRwkwMDAwMDAxCisjZGVmaW5lIElDQU5PTgkwMDAwMDAyCisjZGVmaW5lIFhDQVNFCTAwMDAwMDQKKyNkZWZpbmUgRUNITwkwMDAwMDEwCisjZGVmaW5lIEVDSE9FCTAwMDAwMjAKKyNkZWZpbmUgRUNIT0sJMDAwMDA0MAorI2RlZmluZSBFQ0hPTkwJMDAwMDEwMAorI2RlZmluZSBOT0ZMU0gJMDAwMDIwMAorI2RlZmluZSBUT1NUT1AJMDAwMDQwMAorI2RlZmluZSBFQ0hPQ1RMCTAwMDEwMDAKKyNkZWZpbmUgRUNIT1BSVAkwMDAyMDAwCisjZGVmaW5lIEVDSE9LRQkwMDA0MDAwCisjZGVmaW5lIEZMVVNITwkwMDEwMDAwCisjZGVmaW5lIFBFTkRJTgkwMDQwMDAwCisjZGVmaW5lIElFWFRFTgkwMTAwMDAwCisjZGVmaW5lIEVYVFBST0MJMDIwMDAwMAorCisvKiB0Y2Zsb3coKSBhbmQgVENYT05DIHVzZSB0aGVzZSAqLworI2RlZmluZQlUQ09PRkYJCTAKKyNkZWZpbmUJVENPT04JCTEKKyNkZWZpbmUJVENJT0ZGCQkyCisjZGVmaW5lCVRDSU9OCQkzCisKKy8qIHRjZmx1c2goKSBhbmQgVENGTFNIIHVzZSB0aGVzZSAqLworI2RlZmluZQlUQ0lGTFVTSAkwCisjZGVmaW5lCVRDT0ZMVVNICTEKKyNkZWZpbmUJVENJT0ZMVVNICTIKKworLyogdGNzZXRhdHRyIHVzZXMgdGhlc2UgKi8KKyNkZWZpbmUJVENTQU5PVwkJMAorI2RlZmluZQlUQ1NBRFJBSU4JMQorI2RlZmluZQlUQ1NBRkxVU0gJMgorCisjZW5kaWYgLyogX19BU01fR0VORVJJQ19URVJNQklUU19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGVybWlvcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3Rlcm1pb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzExNjZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3Rlcm1pb3MuaApAQCAtMCwwICsxLDUwIEBACisjaWZuZGVmIF9BU01fR0VORVJJQ19URVJNSU9TX0gKKyNkZWZpbmUgX0FTTV9HRU5FUklDX1RFUk1JT1NfSAorLyoKKyAqIE1vc3QgYXJjaGl0ZWN0dXJlcyBoYXZlIHN0cmFpZ2h0IGNvcGllcyBvZiB0aGUgeDg2IGNvZGUsIHdpdGgKKyAqIHZhcnlpbmcgbGV2ZWxzIG9mIGJ1ZyBmaXhlcyBvbiB0b3AuIFVzdWFsbHkgaXQncyBhIGdvb2QgaWRlYQorICogdG8gdXNlIHRoaXMgZ2VuZXJpYyB2ZXJzaW9uIGluc3RlYWQsIGJ1dCBiZSBjYXJlZnVsIHRvIGF2b2lkCisgKiBBQkkgY2hhbmdlcy4KKyAqIE5ldyBhcmNoaXRlY3R1cmVzIHNob3VsZCBub3QgcHJvdmlkZSB0aGVpciBvd24gdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8YXNtL3Rlcm1iaXRzLmg+CisjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgorCitzdHJ1Y3Qgd2luc2l6ZSB7CisJdW5zaWduZWQgc2hvcnQgd3Nfcm93OworCXVuc2lnbmVkIHNob3J0IHdzX2NvbDsKKwl1bnNpZ25lZCBzaG9ydCB3c194cGl4ZWw7CisJdW5zaWduZWQgc2hvcnQgd3NfeXBpeGVsOworfTsKKworI2RlZmluZSBOQ0MgOAorc3RydWN0IHRlcm1pbyB7CisJdW5zaWduZWQgc2hvcnQgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBjaGFyIGNfbGluZTsJCS8qIGxpbmUgZGlzY2lwbGluZSAqLworCXVuc2lnbmVkIGNoYXIgY19jY1tOQ0NdOwkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KK307CisKKy8qIG1vZGVtIGxpbmVzICovCisjZGVmaW5lIFRJT0NNX0xFCTB4MDAxCisjZGVmaW5lIFRJT0NNX0RUUgkweDAwMgorI2RlZmluZSBUSU9DTV9SVFMJMHgwMDQKKyNkZWZpbmUgVElPQ01fU1QJMHgwMDgKKyNkZWZpbmUgVElPQ01fU1IJMHgwMTAKKyNkZWZpbmUgVElPQ01fQ1RTCTB4MDIwCisjZGVmaW5lIFRJT0NNX0NBUgkweDA0MAorI2RlZmluZSBUSU9DTV9STkcJMHgwODAKKyNkZWZpbmUgVElPQ01fRFNSCTB4MTAwCisjZGVmaW5lIFRJT0NNX0NECVRJT0NNX0NBUgorI2RlZmluZSBUSU9DTV9SSQlUSU9DTV9STkcKKyNkZWZpbmUgVElPQ01fT1VUMQkweDIwMDAKKyNkZWZpbmUgVElPQ01fT1VUMgkweDQwMDAKKyNkZWZpbmUgVElPQ01fTE9PUAkweDgwMDAKKworLyogaW9jdGwgKGZkLCBUSU9DU0VSR0VUTFNSLCAmcmVzdWx0KSB3aGVyZSByZXN1bHQgbWF5IGJlIGFzIGJlbG93ICovCisKKworI2VuZGlmIC8qIF9BU01fR0VORVJJQ19URVJNSU9TX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy90eXBlcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE2ZGZiMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy90eXBlcy5oCkBAIC0wLDAgKzEsMTkgQEAKKyNpZm5kZWYgX0FTTV9HRU5FUklDX1RZUEVTX0gKKyNkZWZpbmUgX0FTTV9HRU5FUklDX1RZUEVTX0gKKy8qCisgKiBpbnQtbGw2NCBpcyB1c2VkIHByYWN0aWNhbGx5IGV2ZXJ5d2hlcmUgbm93LAorICogc28gdXNlIGl0IGFzIGEgcmVhc29uYWJsZSBkZWZhdWx0LgorICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW50LWxsNjQuaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1bW9kZV90OworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBUaGVzZSBhcmVuJ3QgZXhwb3J0ZWQgb3V0c2lkZSB0aGUga2VybmVsIHRvIGF2b2lkIG5hbWUgc3BhY2UgY2xhc2hlcworICovCisKKyNlbmRpZiAvKiBfQVNNX0dFTkVSSUNfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3Vjb250ZXh0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMvdWNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDc3MzQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3Vjb250ZXh0LmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfX0FTTV9HRU5FUklDX1VDT05URVhUX0gKKyNkZWZpbmUgX19BU01fR0VORVJJQ19VQ09OVEVYVF9ICisKK3N0cnVjdCB1Y29udGV4dCB7CisJdW5zaWduZWQgbG9uZwkgIHVjX2ZsYWdzOworCXN0cnVjdCB1Y29udGV4dCAgKnVjX2xpbms7CisJc3RhY2tfdAkJICB1Y19zdGFjazsKKwlzdHJ1Y3Qgc2lnY29udGV4dCB1Y19tY29udGV4dDsKKwlzaWdzZXRfdAkgIHVjX3NpZ21hc2s7CS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLworfTsKKworI2VuZGlmIC8qIF9fQVNNX0dFTkVSSUNfVUNPTlRFWFRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3VuaXN0ZC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS1nZW5lcmljL3VuaXN0ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNDRiOTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMvdW5pc3RkLmgKQEAgLTAsMCArMSw4NjAgQEAKKyNpZiAhZGVmaW5lZChfQVNNX0dFTkVSSUNfVU5JU1REX0gpIHx8IGRlZmluZWQoX19TWVNDQUxMKQorI2RlZmluZSBfQVNNX0dFTkVSSUNfVU5JU1REX0gKKworI2luY2x1ZGUgPGFzbS9iaXRzcGVybG9uZy5oPgorCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzeXN0ZW0gY2FsbCBudW1iZXJzLCBiYXNlZCBvbiB0aGUKKyAqIGxheW91dCBvZiB0aGUgeDg2LTY0IGFyY2hpdGVjdHVyZSwgd2hpY2ggZW1iZWRzIHRoZQorICogcG9pbnRlciB0byB0aGUgc3lzY2FsbCBpbiB0aGUgdGFibGUuCisgKgorICogQXMgYSBiYXNpYyBwcmluY2lwbGUsIG5vIGR1cGxpY2F0aW9uIG9mIGZ1bmN0aW9uYWxpdHkKKyAqIHNob3VsZCBiZSBhZGRlZCwgZS5nLiB3ZSBkb24ndCB1c2UgbHNlZWsgd2hlbiBsbHNlZWsKKyAqIGlzIHByZXNlbnQuIE5ldyBhcmNoaXRlY3R1cmVzIHNob3VsZCB1c2UgdGhpcyBmaWxlCisgKiBhbmQgaW1wbGVtZW50IHRoZSBsZXNzIGZlYXR1cmUtZnVsbCBjYWxscyBpbiB1c2VyIHNwYWNlLgorICovCisKKyNpZm5kZWYgX19TWVNDQUxMCisjZGVmaW5lIF9fU1lTQ0FMTCh4LCB5KQorI2VuZGlmCisKKyNpZiBfX0JJVFNfUEVSX0xPTkcgPT0gMzIgfHwgZGVmaW5lZChfX1NZU0NBTExfQ09NUEFUKQorI2RlZmluZSBfX1NDXzMyNjQoX25yLCBfMzIsIF82NCkgX19TWVNDQUxMKF9uciwgXzMyKQorI2Vsc2UKKyNkZWZpbmUgX19TQ18zMjY0KF9uciwgXzMyLCBfNjQpIF9fU1lTQ0FMTChfbnIsIF82NCkKKyNlbmRpZgorCisjZGVmaW5lIF9fTlJfaW9fc2V0dXAgMAorX19TWVNDQUxMKF9fTlJfaW9fc2V0dXAsIHN5c19pb19zZXR1cCkKKyNkZWZpbmUgX19OUl9pb19kZXN0cm95IDEKK19fU1lTQ0FMTChfX05SX2lvX2Rlc3Ryb3ksIHN5c19pb19kZXN0cm95KQorI2RlZmluZSBfX05SX2lvX3N1Ym1pdCAyCitfX1NZU0NBTEwoX19OUl9pb19zdWJtaXQsIHN5c19pb19zdWJtaXQpCisjZGVmaW5lIF9fTlJfaW9fY2FuY2VsIDMKK19fU1lTQ0FMTChfX05SX2lvX2NhbmNlbCwgc3lzX2lvX2NhbmNlbCkKKyNkZWZpbmUgX19OUl9pb19nZXRldmVudHMgNAorX19TWVNDQUxMKF9fTlJfaW9fZ2V0ZXZlbnRzLCBzeXNfaW9fZ2V0ZXZlbnRzKQorCisvKiBmcy94YXR0ci5jICovCisjZGVmaW5lIF9fTlJfc2V0eGF0dHIgNQorX19TWVNDQUxMKF9fTlJfc2V0eGF0dHIsIHN5c19zZXR4YXR0cikKKyNkZWZpbmUgX19OUl9sc2V0eGF0dHIgNgorX19TWVNDQUxMKF9fTlJfbHNldHhhdHRyLCBzeXNfbHNldHhhdHRyKQorI2RlZmluZSBfX05SX2ZzZXR4YXR0ciA3CitfX1NZU0NBTEwoX19OUl9mc2V0eGF0dHIsIHN5c19mc2V0eGF0dHIpCisjZGVmaW5lIF9fTlJfZ2V0eGF0dHIgOAorX19TWVNDQUxMKF9fTlJfZ2V0eGF0dHIsIHN5c19nZXR4YXR0cikKKyNkZWZpbmUgX19OUl9sZ2V0eGF0dHIgOQorX19TWVNDQUxMKF9fTlJfbGdldHhhdHRyLCBzeXNfbGdldHhhdHRyKQorI2RlZmluZSBfX05SX2ZnZXR4YXR0ciAxMAorX19TWVNDQUxMKF9fTlJfZmdldHhhdHRyLCBzeXNfZmdldHhhdHRyKQorI2RlZmluZSBfX05SX2xpc3R4YXR0ciAxMQorX19TWVNDQUxMKF9fTlJfbGlzdHhhdHRyLCBzeXNfbGlzdHhhdHRyKQorI2RlZmluZSBfX05SX2xsaXN0eGF0dHIgMTIKK19fU1lTQ0FMTChfX05SX2xsaXN0eGF0dHIsIHN5c19sbGlzdHhhdHRyKQorI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIgMTMKK19fU1lTQ0FMTChfX05SX2ZsaXN0eGF0dHIsIHN5c19mbGlzdHhhdHRyKQorI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyIDE0CitfX1NZU0NBTEwoX19OUl9yZW1vdmV4YXR0ciwgc3lzX3JlbW92ZXhhdHRyKQorI2RlZmluZSBfX05SX2xyZW1vdmV4YXR0ciAxNQorX19TWVNDQUxMKF9fTlJfbHJlbW92ZXhhdHRyLCBzeXNfbHJlbW92ZXhhdHRyKQorI2RlZmluZSBfX05SX2ZyZW1vdmV4YXR0ciAxNgorX19TWVNDQUxMKF9fTlJfZnJlbW92ZXhhdHRyLCBzeXNfZnJlbW92ZXhhdHRyKQorCisvKiBmcy9kY2FjaGUuYyAqLworI2RlZmluZSBfX05SX2dldGN3ZCAxNworX19TWVNDQUxMKF9fTlJfZ2V0Y3dkLCBzeXNfZ2V0Y3dkKQorCisvKiBmcy9jb29raWVzLmMgKi8KKyNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZSAxOAorX19TWVNDQUxMKF9fTlJfbG9va3VwX2Rjb29raWUsIHN5c19sb29rdXBfZGNvb2tpZSkKKworLyogZnMvZXZlbnRmZC5jICovCisjZGVmaW5lIF9fTlJfZXZlbnRmZDIgMTkKK19fU1lTQ0FMTChfX05SX2V2ZW50ZmQyLCBzeXNfZXZlbnRmZDIpCisKKy8qIGZzL2V2ZW50cG9sbC5jICovCisjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlMSAyMAorX19TWVNDQUxMKF9fTlJfZXBvbGxfY3JlYXRlMSwgc3lzX2Vwb2xsX2NyZWF0ZTEpCisjZGVmaW5lIF9fTlJfZXBvbGxfY3RsIDIxCitfX1NZU0NBTEwoX19OUl9lcG9sbF9jdGwsIHN5c19lcG9sbF9jdGwpCisjZGVmaW5lIF9fTlJfZXBvbGxfcHdhaXQgMjIKK19fU1lTQ0FMTChfX05SX2Vwb2xsX3B3YWl0LCBzeXNfZXBvbGxfcHdhaXQpCisKKy8qIGZzL2ZjbnRsLmMgKi8KKyNkZWZpbmUgX19OUl9kdXAgMjMKK19fU1lTQ0FMTChfX05SX2R1cCwgc3lzX2R1cCkKKyNkZWZpbmUgX19OUl9kdXAzIDI0CitfX1NZU0NBTEwoX19OUl9kdXAzLCBzeXNfZHVwMykKKyNkZWZpbmUgX19OUjMyNjRfZmNudGwgMjUKK19fU0NfMzI2NChfX05SMzI2NF9mY250bCwgc3lzX2ZjbnRsNjQsIHN5c19mY250bCkKKworLyogZnMvaW5vdGlmeV91c2VyLmMgKi8KKyNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQxIDI2CitfX1NZU0NBTEwoX19OUl9pbm90aWZ5X2luaXQxLCBzeXNfaW5vdGlmeV9pbml0MSkKKyNkZWZpbmUgX19OUl9pbm90aWZ5X2FkZF93YXRjaCAyNworX19TWVNDQUxMKF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2gsIHN5c19pbm90aWZ5X2FkZF93YXRjaCkKKyNkZWZpbmUgX19OUl9pbm90aWZ5X3JtX3dhdGNoIDI4CitfX1NZU0NBTEwoX19OUl9pbm90aWZ5X3JtX3dhdGNoLCBzeXNfaW5vdGlmeV9ybV93YXRjaCkKKworLyogZnMvaW9jdGwuYyAqLworI2RlZmluZSBfX05SX2lvY3RsIDI5CitfX1NZU0NBTEwoX19OUl9pb2N0bCwgc3lzX2lvY3RsKQorCisvKiBmcy9pb3ByaW8uYyAqLworI2RlZmluZSBfX05SX2lvcHJpb19zZXQgMzAKK19fU1lTQ0FMTChfX05SX2lvcHJpb19zZXQsIHN5c19pb3ByaW9fc2V0KQorI2RlZmluZSBfX05SX2lvcHJpb19nZXQgMzEKK19fU1lTQ0FMTChfX05SX2lvcHJpb19nZXQsIHN5c19pb3ByaW9fZ2V0KQorCisvKiBmcy9sb2Nrcy5jICovCisjZGVmaW5lIF9fTlJfZmxvY2sgMzIKK19fU1lTQ0FMTChfX05SX2Zsb2NrLCBzeXNfZmxvY2spCisKKy8qIGZzL25hbWVpLmMgKi8KKyNkZWZpbmUgX19OUl9ta25vZGF0IDMzCitfX1NZU0NBTEwoX19OUl9ta25vZGF0LCBzeXNfbWtub2RhdCkKKyNkZWZpbmUgX19OUl9ta2RpcmF0IDM0CitfX1NZU0NBTEwoX19OUl9ta2RpcmF0LCBzeXNfbWtkaXJhdCkKKyNkZWZpbmUgX19OUl91bmxpbmthdCAzNQorX19TWVNDQUxMKF9fTlJfdW5saW5rYXQsIHN5c191bmxpbmthdCkKKyNkZWZpbmUgX19OUl9zeW1saW5rYXQgMzYKK19fU1lTQ0FMTChfX05SX3N5bWxpbmthdCwgc3lzX3N5bWxpbmthdCkKKyNkZWZpbmUgX19OUl9saW5rYXQgMzcKK19fU1lTQ0FMTChfX05SX2xpbmthdCwgc3lzX2xpbmthdCkKKyNkZWZpbmUgX19OUl9yZW5hbWVhdCAzOAorX19TWVNDQUxMKF9fTlJfcmVuYW1lYXQsIHN5c19yZW5hbWVhdCkKKworLyogZnMvbmFtZXNwYWNlLmMgKi8KKyNkZWZpbmUgX19OUl91bW91bnQyIDM5CitfX1NZU0NBTEwoX19OUl91bW91bnQyLCBzeXNfdW1vdW50KQorI2RlZmluZSBfX05SX21vdW50IDQwCitfX1NZU0NBTEwoX19OUl9tb3VudCwgc3lzX21vdW50KQorI2RlZmluZSBfX05SX3Bpdm90X3Jvb3QgNDEKK19fU1lTQ0FMTChfX05SX3Bpdm90X3Jvb3QsIHN5c19waXZvdF9yb290KQorCisvKiBmcy9uZnNjdGwuYyAqLworI2RlZmluZSBfX05SX25mc3NlcnZjdGwgNDIKK19fU1lTQ0FMTChfX05SX25mc3NlcnZjdGwsIHN5c19uZnNzZXJ2Y3RsKQorCisvKiBmcy9vcGVuLmMgKi8KKyNkZWZpbmUgX19OUjMyNjRfc3RhdGZzIDQzCitfX1NDXzMyNjQoX19OUjMyNjRfc3RhdGZzLCBzeXNfc3RhdGZzNjQsIHN5c19zdGF0ZnMpCisjZGVmaW5lIF9fTlIzMjY0X2ZzdGF0ZnMgNDQKK19fU0NfMzI2NChfX05SMzI2NF9mc3RhdGZzLCBzeXNfZnN0YXRmczY0LCBzeXNfZnN0YXRmcykKKyNkZWZpbmUgX19OUjMyNjRfdHJ1bmNhdGUgNDUKK19fU0NfMzI2NChfX05SMzI2NF90cnVuY2F0ZSwgc3lzX3RydW5jYXRlNjQsIHN5c190cnVuY2F0ZSkKKyNkZWZpbmUgX19OUjMyNjRfZnRydW5jYXRlIDQ2CitfX1NDXzMyNjQoX19OUjMyNjRfZnRydW5jYXRlLCBzeXNfZnRydW5jYXRlNjQsIHN5c19mdHJ1bmNhdGUpCisKKyNkZWZpbmUgX19OUl9mYWxsb2NhdGUgNDcKK19fU1lTQ0FMTChfX05SX2ZhbGxvY2F0ZSwgc3lzX2ZhbGxvY2F0ZSkKKyNkZWZpbmUgX19OUl9mYWNjZXNzYXQgNDgKK19fU1lTQ0FMTChfX05SX2ZhY2Nlc3NhdCwgc3lzX2ZhY2Nlc3NhdCkKKyNkZWZpbmUgX19OUl9jaGRpciA0OQorX19TWVNDQUxMKF9fTlJfY2hkaXIsIHN5c19jaGRpcikKKyNkZWZpbmUgX19OUl9mY2hkaXIgNTAKK19fU1lTQ0FMTChfX05SX2ZjaGRpciwgc3lzX2ZjaGRpcikKKyNkZWZpbmUgX19OUl9jaHJvb3QgNTEKK19fU1lTQ0FMTChfX05SX2Nocm9vdCwgc3lzX2Nocm9vdCkKKyNkZWZpbmUgX19OUl9mY2htb2QgNTIKK19fU1lTQ0FMTChfX05SX2ZjaG1vZCwgc3lzX2ZjaG1vZCkKKyNkZWZpbmUgX19OUl9mY2htb2RhdCA1MworX19TWVNDQUxMKF9fTlJfZmNobW9kYXQsIHN5c19mY2htb2RhdCkKKyNkZWZpbmUgX19OUl9mY2hvd25hdCA1NAorX19TWVNDQUxMKF9fTlJfZmNob3duYXQsIHN5c19mY2hvd25hdCkKKyNkZWZpbmUgX19OUl9mY2hvd24gNTUKK19fU1lTQ0FMTChfX05SX2ZjaG93biwgc3lzX2ZjaG93bikKKyNkZWZpbmUgX19OUl9vcGVuYXQgNTYKK19fU1lTQ0FMTChfX05SX29wZW5hdCwgc3lzX29wZW5hdCkKKyNkZWZpbmUgX19OUl9jbG9zZSA1NworX19TWVNDQUxMKF9fTlJfY2xvc2UsIHN5c19jbG9zZSkKKyNkZWZpbmUgX19OUl92aGFuZ3VwIDU4CitfX1NZU0NBTEwoX19OUl92aGFuZ3VwLCBzeXNfdmhhbmd1cCkKKworLyogZnMvcGlwZS5jICovCisjZGVmaW5lIF9fTlJfcGlwZTIgNTkKK19fU1lTQ0FMTChfX05SX3BpcGUyLCBzeXNfcGlwZTIpCisKKy8qIGZzL3F1b3RhLmMgKi8KKyNkZWZpbmUgX19OUl9xdW90YWN0bCA2MAorX19TWVNDQUxMKF9fTlJfcXVvdGFjdGwsIHN5c19xdW90YWN0bCkKKworLyogZnMvcmVhZGRpci5jICovCisjZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NCA2MQorX19TWVNDQUxMKF9fTlJfZ2V0ZGVudHM2NCwgc3lzX2dldGRlbnRzNjQpCisKKy8qIGZzL3JlYWRfd3JpdGUuYyAqLworI2RlZmluZSBfX05SMzI2NF9sc2VlayA2MgorX19TQ18zMjY0KF9fTlIzMjY0X2xzZWVrLCBzeXNfbGxzZWVrLCBzeXNfbHNlZWspCisjZGVmaW5lIF9fTlJfcmVhZCA2MworX19TWVNDQUxMKF9fTlJfcmVhZCwgc3lzX3JlYWQpCisjZGVmaW5lIF9fTlJfd3JpdGUgNjQKK19fU1lTQ0FMTChfX05SX3dyaXRlLCBzeXNfd3JpdGUpCisjZGVmaW5lIF9fTlJfcmVhZHYgNjUKK19fU1lTQ0FMTChfX05SX3JlYWR2LCBzeXNfcmVhZHYpCisjZGVmaW5lIF9fTlJfd3JpdGV2IDY2CitfX1NZU0NBTEwoX19OUl93cml0ZXYsIHN5c193cml0ZXYpCisjZGVmaW5lIF9fTlJfcHJlYWQ2NCA2NworX19TWVNDQUxMKF9fTlJfcHJlYWQ2NCwgc3lzX3ByZWFkNjQpCisjZGVmaW5lIF9fTlJfcHdyaXRlNjQgNjgKK19fU1lTQ0FMTChfX05SX3B3cml0ZTY0LCBzeXNfcHdyaXRlNjQpCisjZGVmaW5lIF9fTlJfcHJlYWR2IDY5CitfX1NZU0NBTEwoX19OUl9wcmVhZHYsIHN5c19wcmVhZHYpCisjZGVmaW5lIF9fTlJfcHdyaXRldiA3MAorX19TWVNDQUxMKF9fTlJfcHdyaXRldiwgc3lzX3B3cml0ZXYpCisKKy8qIGZzL3NlbmRmaWxlLmMgKi8KKyNkZWZpbmUgX19OUjMyNjRfc2VuZGZpbGUgNzEKK19fU0NfMzI2NChfX05SMzI2NF9zZW5kZmlsZSwgc3lzX3NlbmRmaWxlNjQsIHN5c19zZW5kZmlsZSkKKworLyogZnMvc2VsZWN0LmMgKi8KKyNkZWZpbmUgX19OUl9wc2VsZWN0NiA3MgorX19TWVNDQUxMKF9fTlJfcHNlbGVjdDYsIHN5c19wc2VsZWN0NikKKyNkZWZpbmUgX19OUl9wcG9sbCA3MworX19TWVNDQUxMKF9fTlJfcHBvbGwsIHN5c19wcG9sbCkKKworLyogZnMvc2lnbmFsZmQuYyAqLworI2RlZmluZSBfX05SX3NpZ25hbGZkNCA3NAorX19TWVNDQUxMKF9fTlJfc2lnbmFsZmQ0LCBzeXNfc2lnbmFsZmQ0KQorCisvKiBmcy9zcGxpY2UuYyAqLworI2RlZmluZSBfX05SX3Ztc3BsaWNlIDc1CitfX1NZU0NBTEwoX19OUl92bXNwbGljZSwgc3lzX3Ztc3BsaWNlKQorI2RlZmluZSBfX05SX3NwbGljZSA3NgorX19TWVNDQUxMKF9fTlJfc3BsaWNlLCBzeXNfc3BsaWNlKQorI2RlZmluZSBfX05SX3RlZSA3NworX19TWVNDQUxMKF9fTlJfdGVlLCBzeXNfdGVlKQorCisvKiBmcy9zdGF0LmMgKi8KKyNkZWZpbmUgX19OUl9yZWFkbGlua2F0IDc4CitfX1NZU0NBTEwoX19OUl9yZWFkbGlua2F0LCBzeXNfcmVhZGxpbmthdCkKKyNkZWZpbmUgX19OUjMyNjRfZnN0YXRhdCA3OQorX19TQ18zMjY0KF9fTlIzMjY0X2ZzdGF0YXQsIHN5c19mc3RhdGF0NjQsIHN5c19uZXdmc3RhdGF0KQorI2RlZmluZSBfX05SMzI2NF9mc3RhdCA4MAorX19TQ18zMjY0KF9fTlIzMjY0X2ZzdGF0LCBzeXNfZnN0YXQ2NCwgc3lzX25ld2ZzdGF0KQorCisvKiBmcy9zeW5jLmMgKi8KKyNkZWZpbmUgX19OUl9zeW5jIDgxCitfX1NZU0NBTEwoX19OUl9zeW5jLCBzeXNfc3luYykKKyNkZWZpbmUgX19OUl9mc3luYyA4MgorX19TWVNDQUxMKF9fTlJfZnN5bmMsIHN5c19mc3luYykKKyNkZWZpbmUgX19OUl9mZGF0YXN5bmMgODMKK19fU1lTQ0FMTChfX05SX2ZkYXRhc3luYywgc3lzX2ZkYXRhc3luYykKKyNpZmRlZiBfX0FSQ0hfV0FOVF9TWU5DX0ZJTEVfUkFOR0UyCisjZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlMiA4NAorX19TWVNDQUxMKF9fTlJfc3luY19maWxlX3JhbmdlMiwgc3lzX3N5bmNfZmlsZV9yYW5nZTIpCisjZWxzZQorI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZSA4NAorX19TWVNDQUxMKF9fTlJfc3luY19maWxlX3JhbmdlLCBzeXNfc3luY19maWxlX3JhbmdlKQorI2VuZGlmCisKKy8qIGZzL3RpbWVyZmQuYyAqLworI2RlZmluZSBfX05SX3RpbWVyZmRfY3JlYXRlIDg1CitfX1NZU0NBTEwoX19OUl90aW1lcmZkX2NyZWF0ZSwgc3lzX3RpbWVyZmRfY3JlYXRlKQorI2RlZmluZSBfX05SX3RpbWVyZmRfc2V0dGltZSA4NgorX19TWVNDQUxMKF9fTlJfdGltZXJmZF9zZXR0aW1lLCBzeXNfdGltZXJmZF9zZXR0aW1lKQorI2RlZmluZSBfX05SX3RpbWVyZmRfZ2V0dGltZSA4NworX19TWVNDQUxMKF9fTlJfdGltZXJmZF9nZXR0aW1lLCBzeXNfdGltZXJmZF9nZXR0aW1lKQorCisvKiBmcy91dGltZXMuYyAqLworI2RlZmluZSBfX05SX3V0aW1lbnNhdCA4OAorX19TWVNDQUxMKF9fTlJfdXRpbWVuc2F0LCBzeXNfdXRpbWVuc2F0KQorCisvKiBrZXJuZWwvYWNjdC5jICovCisjZGVmaW5lIF9fTlJfYWNjdCA4OQorX19TWVNDQUxMKF9fTlJfYWNjdCwgc3lzX2FjY3QpCisKKy8qIGtlcm5lbC9jYXBhYmlsaXR5LmMgKi8KKyNkZWZpbmUgX19OUl9jYXBnZXQgOTAKK19fU1lTQ0FMTChfX05SX2NhcGdldCwgc3lzX2NhcGdldCkKKyNkZWZpbmUgX19OUl9jYXBzZXQgOTEKK19fU1lTQ0FMTChfX05SX2NhcHNldCwgc3lzX2NhcHNldCkKKworLyoga2VybmVsL2V4ZWNfZG9tYWluLmMgKi8KKyNkZWZpbmUgX19OUl9wZXJzb25hbGl0eSA5MgorX19TWVNDQUxMKF9fTlJfcGVyc29uYWxpdHksIHN5c19wZXJzb25hbGl0eSkKKworLyoga2VybmVsL2V4aXQuYyAqLworI2RlZmluZSBfX05SX2V4aXQgOTMKK19fU1lTQ0FMTChfX05SX2V4aXQsIHN5c19leGl0KQorI2RlZmluZSBfX05SX2V4aXRfZ3JvdXAgOTQKK19fU1lTQ0FMTChfX05SX2V4aXRfZ3JvdXAsIHN5c19leGl0X2dyb3VwKQorI2RlZmluZSBfX05SX3dhaXRpZCA5NQorX19TWVNDQUxMKF9fTlJfd2FpdGlkLCBzeXNfd2FpdGlkKQorCisvKiBrZXJuZWwvZm9yay5jICovCisjZGVmaW5lIF9fTlJfc2V0X3RpZF9hZGRyZXNzIDk2CitfX1NZU0NBTEwoX19OUl9zZXRfdGlkX2FkZHJlc3MsIHN5c19zZXRfdGlkX2FkZHJlc3MpCisjZGVmaW5lIF9fTlJfdW5zaGFyZSA5NworX19TWVNDQUxMKF9fTlJfdW5zaGFyZSwgc3lzX3Vuc2hhcmUpCisKKy8qIGtlcm5lbC9mdXRleC5jICovCisjZGVmaW5lIF9fTlJfZnV0ZXggOTgKK19fU1lTQ0FMTChfX05SX2Z1dGV4LCBzeXNfZnV0ZXgpCisjZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0IDk5CitfX1NZU0NBTEwoX19OUl9zZXRfcm9idXN0X2xpc3QsIHN5c19zZXRfcm9idXN0X2xpc3QpCisjZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0IDEwMAorX19TWVNDQUxMKF9fTlJfZ2V0X3JvYnVzdF9saXN0LCBzeXNfZ2V0X3JvYnVzdF9saXN0KQorCisvKiBrZXJuZWwvaHJ0aW1lci5jICovCisjZGVmaW5lIF9fTlJfbmFub3NsZWVwIDEwMQorX19TWVNDQUxMKF9fTlJfbmFub3NsZWVwLCBzeXNfbmFub3NsZWVwKQorCisvKiBrZXJuZWwvaXRpbWVyLmMgKi8KKyNkZWZpbmUgX19OUl9nZXRpdGltZXIgMTAyCitfX1NZU0NBTEwoX19OUl9nZXRpdGltZXIsIHN5c19nZXRpdGltZXIpCisjZGVmaW5lIF9fTlJfc2V0aXRpbWVyIDEwMworX19TWVNDQUxMKF9fTlJfc2V0aXRpbWVyLCBzeXNfc2V0aXRpbWVyKQorCisvKiBrZXJuZWwva2V4ZWMuYyAqLworI2RlZmluZSBfX05SX2tleGVjX2xvYWQgMTA0CitfX1NZU0NBTEwoX19OUl9rZXhlY19sb2FkLCBzeXNfa2V4ZWNfbG9hZCkKKworLyoga2VybmVsL21vZHVsZS5jICovCisjZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUgMTA1CitfX1NZU0NBTEwoX19OUl9pbml0X21vZHVsZSwgc3lzX2luaXRfbW9kdWxlKQorI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUgMTA2CitfX1NZU0NBTEwoX19OUl9kZWxldGVfbW9kdWxlLCBzeXNfZGVsZXRlX21vZHVsZSkKKworLyoga2VybmVsL3Bvc2l4LXRpbWVycy5jICovCisjZGVmaW5lIF9fTlJfdGltZXJfY3JlYXRlIDEwNworX19TWVNDQUxMKF9fTlJfdGltZXJfY3JlYXRlLCBzeXNfdGltZXJfY3JlYXRlKQorI2RlZmluZSBfX05SX3RpbWVyX2dldHRpbWUgMTA4CitfX1NZU0NBTEwoX19OUl90aW1lcl9nZXR0aW1lLCBzeXNfdGltZXJfZ2V0dGltZSkKKyNkZWZpbmUgX19OUl90aW1lcl9nZXRvdmVycnVuIDEwOQorX19TWVNDQUxMKF9fTlJfdGltZXJfZ2V0b3ZlcnJ1biwgc3lzX3RpbWVyX2dldG92ZXJydW4pCisjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZSAxMTAKK19fU1lTQ0FMTChfX05SX3RpbWVyX3NldHRpbWUsIHN5c190aW1lcl9zZXR0aW1lKQorI2RlZmluZSBfX05SX3RpbWVyX2RlbGV0ZSAxMTEKK19fU1lTQ0FMTChfX05SX3RpbWVyX2RlbGV0ZSwgc3lzX3RpbWVyX2RlbGV0ZSkKKyNkZWZpbmUgX19OUl9jbG9ja19zZXR0aW1lIDExMgorX19TWVNDQUxMKF9fTlJfY2xvY2tfc2V0dGltZSwgc3lzX2Nsb2NrX3NldHRpbWUpCisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZSAxMTMKK19fU1lTQ0FMTChfX05SX2Nsb2NrX2dldHRpbWUsIHN5c19jbG9ja19nZXR0aW1lKQorI2RlZmluZSBfX05SX2Nsb2NrX2dldHJlcyAxMTQKK19fU1lTQ0FMTChfX05SX2Nsb2NrX2dldHJlcywgc3lzX2Nsb2NrX2dldHJlcykKKyNkZWZpbmUgX19OUl9jbG9ja19uYW5vc2xlZXAgMTE1CitfX1NZU0NBTEwoX19OUl9jbG9ja19uYW5vc2xlZXAsIHN5c19jbG9ja19uYW5vc2xlZXApCisKKy8qIGtlcm5lbC9wcmludGsuYyAqLworI2RlZmluZSBfX05SX3N5c2xvZyAxMTYKK19fU1lTQ0FMTChfX05SX3N5c2xvZywgc3lzX3N5c2xvZykKKworLyoga2VybmVsL3B0cmFjZS5jICovCisjZGVmaW5lIF9fTlJfcHRyYWNlIDExNworX19TWVNDQUxMKF9fTlJfcHRyYWNlLCBzeXNfcHRyYWNlKQorCisvKiBrZXJuZWwvc2NoZWQuYyAqLworI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtIDExOAorX19TWVNDQUxMKF9fTlJfc2NoZWRfc2V0cGFyYW0sIHN5c19zY2hlZF9zZXRwYXJhbSkKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIgMTE5CitfX1NZU0NBTEwoX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIsIHN5c19zY2hlZF9zZXRzY2hlZHVsZXIpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyIDEyMAorX19TWVNDQUxMKF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyLCBzeXNfc2NoZWRfZ2V0c2NoZWR1bGVyKQorI2RlZmluZSBfX05SX3NjaGVkX2dldHBhcmFtIDEyMQorX19TWVNDQUxMKF9fTlJfc2NoZWRfZ2V0cGFyYW0sIHN5c19zY2hlZF9nZXRwYXJhbSkKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRhZmZpbml0eSAxMjIKK19fU1lTQ0FMTChfX05SX3NjaGVkX3NldGFmZmluaXR5LCBzeXNfc2NoZWRfc2V0YWZmaW5pdHkpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkgMTIzCitfX1NZU0NBTEwoX19OUl9zY2hlZF9nZXRhZmZpbml0eSwgc3lzX3NjaGVkX2dldGFmZmluaXR5KQorI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkIDEyNAorX19TWVNDQUxMKF9fTlJfc2NoZWRfeWllbGQsIHN5c19zY2hlZF95aWVsZCkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4IDEyNQorX19TWVNDQUxMKF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCwgc3lzX3NjaGVkX2dldF9wcmlvcml0eV9tYXgpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAxMjYKK19fU1lTQ0FMTChfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4sIHN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWluKQorI2RlZmluZSBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbCAxMjcKK19fU1lTQ0FMTChfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbCwgc3lzX3NjaGVkX3JyX2dldF9pbnRlcnZhbCkKKworLyoga2VybmVsL3NpZ25hbC5jICovCisjZGVmaW5lIF9fTlJfcmVzdGFydF9zeXNjYWxsIDEyOAorX19TWVNDQUxMKF9fTlJfcmVzdGFydF9zeXNjYWxsLCBzeXNfcmVzdGFydF9zeXNjYWxsKQorI2RlZmluZSBfX05SX2tpbGwgMTI5CitfX1NZU0NBTEwoX19OUl9raWxsLCBzeXNfa2lsbCkKKyNkZWZpbmUgX19OUl90a2lsbCAxMzAKK19fU1lTQ0FMTChfX05SX3RraWxsLCBzeXNfdGtpbGwpCisjZGVmaW5lIF9fTlJfdGdraWxsIDEzMQorX19TWVNDQUxMKF9fTlJfdGdraWxsLCBzeXNfdGdraWxsKQorI2RlZmluZSBfX05SX3NpZ2FsdHN0YWNrIDEzMgorX19TWVNDQUxMKF9fTlJfc2lnYWx0c3RhY2ssIHN5c19zaWdhbHRzdGFjaykKKyNkZWZpbmUgX19OUl9ydF9zaWdzdXNwZW5kIDEzMworX19TWVNDQUxMKF9fTlJfcnRfc2lnc3VzcGVuZCwgc3lzX3J0X3NpZ3N1c3BlbmQpIC8qIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdTVVNQRU5EICovCisjZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uIDEzNAorX19TWVNDQUxMKF9fTlJfcnRfc2lnYWN0aW9uLCBzeXNfcnRfc2lnYWN0aW9uKSAvKiBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OICovCisjZGVmaW5lIF9fTlJfcnRfc2lncHJvY21hc2sgMTM1CitfX1NZU0NBTEwoX19OUl9ydF9zaWdwcm9jbWFzaywgc3lzX3J0X3NpZ3Byb2NtYXNrKQorI2RlZmluZSBfX05SX3J0X3NpZ3BlbmRpbmcgMTM2CitfX1NZU0NBTEwoX19OUl9ydF9zaWdwZW5kaW5nLCBzeXNfcnRfc2lncGVuZGluZykKKyNkZWZpbmUgX19OUl9ydF9zaWd0aW1lZHdhaXQgMTM3CitfX1NZU0NBTEwoX19OUl9ydF9zaWd0aW1lZHdhaXQsIHN5c19ydF9zaWd0aW1lZHdhaXQpCisjZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvIDEzOAorX19TWVNDQUxMKF9fTlJfcnRfc2lncXVldWVpbmZvLCBzeXNfcnRfc2lncXVldWVpbmZvKQorI2RlZmluZSBfX05SX3J0X3NpZ3JldHVybiAxMzkKK19fU1lTQ0FMTChfX05SX3J0X3NpZ3JldHVybiwgc3lzX3J0X3NpZ3JldHVybikgLyogc3lzX3J0X3NpZ3JldHVybl93cmFwcGVyLCAqLworCisvKiBrZXJuZWwvc3lzLmMgKi8KKyNkZWZpbmUgX19OUl9zZXRwcmlvcml0eSAxNDAKK19fU1lTQ0FMTChfX05SX3NldHByaW9yaXR5LCBzeXNfc2V0cHJpb3JpdHkpCisjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkgMTQxCitfX1NZU0NBTEwoX19OUl9nZXRwcmlvcml0eSwgc3lzX2dldHByaW9yaXR5KQorI2RlZmluZSBfX05SX3JlYm9vdCAxNDIKK19fU1lTQ0FMTChfX05SX3JlYm9vdCwgc3lzX3JlYm9vdCkKKyNkZWZpbmUgX19OUl9zZXRyZWdpZCAxNDMKK19fU1lTQ0FMTChfX05SX3NldHJlZ2lkLCBzeXNfc2V0cmVnaWQpCisjZGVmaW5lIF9fTlJfc2V0Z2lkIDE0NAorX19TWVNDQUxMKF9fTlJfc2V0Z2lkLCBzeXNfc2V0Z2lkKQorI2RlZmluZSBfX05SX3NldHJldWlkIDE0NQorX19TWVNDQUxMKF9fTlJfc2V0cmV1aWQsIHN5c19zZXRyZXVpZCkKKyNkZWZpbmUgX19OUl9zZXR1aWQgMTQ2CitfX1NZU0NBTEwoX19OUl9zZXR1aWQsIHN5c19zZXR1aWQpCisjZGVmaW5lIF9fTlJfc2V0cmVzdWlkIDE0NworX19TWVNDQUxMKF9fTlJfc2V0cmVzdWlkLCBzeXNfc2V0cmVzdWlkKQorI2RlZmluZSBfX05SX2dldHJlc3VpZCAxNDgKK19fU1lTQ0FMTChfX05SX2dldHJlc3VpZCwgc3lzX2dldHJlc3VpZCkKKyNkZWZpbmUgX19OUl9zZXRyZXNnaWQgMTQ5CitfX1NZU0NBTEwoX19OUl9zZXRyZXNnaWQsIHN5c19zZXRyZXNnaWQpCisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkIDE1MAorX19TWVNDQUxMKF9fTlJfZ2V0cmVzZ2lkLCBzeXNfZ2V0cmVzZ2lkKQorI2RlZmluZSBfX05SX3NldGZzdWlkIDE1MQorX19TWVNDQUxMKF9fTlJfc2V0ZnN1aWQsIHN5c19zZXRmc3VpZCkKKyNkZWZpbmUgX19OUl9zZXRmc2dpZCAxNTIKK19fU1lTQ0FMTChfX05SX3NldGZzZ2lkLCBzeXNfc2V0ZnNnaWQpCisjZGVmaW5lIF9fTlJfdGltZXMgMTUzCitfX1NZU0NBTEwoX19OUl90aW1lcywgc3lzX3RpbWVzKQorI2RlZmluZSBfX05SX3NldHBnaWQgMTU0CitfX1NZU0NBTEwoX19OUl9zZXRwZ2lkLCBzeXNfc2V0cGdpZCkKKyNkZWZpbmUgX19OUl9nZXRwZ2lkIDE1NQorX19TWVNDQUxMKF9fTlJfZ2V0cGdpZCwgc3lzX2dldHBnaWQpCisjZGVmaW5lIF9fTlJfZ2V0c2lkIDE1NgorX19TWVNDQUxMKF9fTlJfZ2V0c2lkLCBzeXNfZ2V0c2lkKQorI2RlZmluZSBfX05SX3NldHNpZCAxNTcKK19fU1lTQ0FMTChfX05SX3NldHNpZCwgc3lzX3NldHNpZCkKKyNkZWZpbmUgX19OUl9nZXRncm91cHMgMTU4CitfX1NZU0NBTEwoX19OUl9nZXRncm91cHMsIHN5c19nZXRncm91cHMpCisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzIDE1OQorX19TWVNDQUxMKF9fTlJfc2V0Z3JvdXBzLCBzeXNfc2V0Z3JvdXBzKQorI2RlZmluZSBfX05SX3VuYW1lIDE2MAorX19TWVNDQUxMKF9fTlJfdW5hbWUsIHN5c19uZXd1bmFtZSkKKyNkZWZpbmUgX19OUl9zZXRob3N0bmFtZSAxNjEKK19fU1lTQ0FMTChfX05SX3NldGhvc3RuYW1lLCBzeXNfc2V0aG9zdG5hbWUpCisjZGVmaW5lIF9fTlJfc2V0ZG9tYWlubmFtZSAxNjIKK19fU1lTQ0FMTChfX05SX3NldGRvbWFpbm5hbWUsIHN5c19zZXRkb21haW5uYW1lKQorI2RlZmluZSBfX05SX2dldHJsaW1pdCAxNjMKK19fU1lTQ0FMTChfX05SX2dldHJsaW1pdCwgc3lzX2dldHJsaW1pdCkKKyNkZWZpbmUgX19OUl9zZXRybGltaXQgMTY0CitfX1NZU0NBTEwoX19OUl9zZXRybGltaXQsIHN5c19zZXRybGltaXQpCisjZGVmaW5lIF9fTlJfZ2V0cnVzYWdlIDE2NQorX19TWVNDQUxMKF9fTlJfZ2V0cnVzYWdlLCBzeXNfZ2V0cnVzYWdlKQorI2RlZmluZSBfX05SX3VtYXNrIDE2NgorX19TWVNDQUxMKF9fTlJfdW1hc2ssIHN5c191bWFzaykKKyNkZWZpbmUgX19OUl9wcmN0bCAxNjcKK19fU1lTQ0FMTChfX05SX3ByY3RsLCBzeXNfcHJjdGwpCisjZGVmaW5lIF9fTlJfZ2V0Y3B1IDE2OAorX19TWVNDQUxMKF9fTlJfZ2V0Y3B1LCBzeXNfZ2V0Y3B1KQorCisvKiBrZXJuZWwvdGltZS5jICovCisjZGVmaW5lIF9fTlJfZ2V0dGltZW9mZGF5IDE2OQorX19TWVNDQUxMKF9fTlJfZ2V0dGltZW9mZGF5LCBzeXNfZ2V0dGltZW9mZGF5KQorI2RlZmluZSBfX05SX3NldHRpbWVvZmRheSAxNzAKK19fU1lTQ0FMTChfX05SX3NldHRpbWVvZmRheSwgc3lzX3NldHRpbWVvZmRheSkKKyNkZWZpbmUgX19OUl9hZGp0aW1leCAxNzEKK19fU1lTQ0FMTChfX05SX2FkanRpbWV4LCBzeXNfYWRqdGltZXgpCisKKy8qIGtlcm5lbC90aW1lci5jICovCisjZGVmaW5lIF9fTlJfZ2V0cGlkIDE3MgorX19TWVNDQUxMKF9fTlJfZ2V0cGlkLCBzeXNfZ2V0cGlkKQorI2RlZmluZSBfX05SX2dldHBwaWQgMTczCitfX1NZU0NBTEwoX19OUl9nZXRwcGlkLCBzeXNfZ2V0cHBpZCkKKyNkZWZpbmUgX19OUl9nZXR1aWQgMTc0CitfX1NZU0NBTEwoX19OUl9nZXR1aWQsIHN5c19nZXR1aWQpCisjZGVmaW5lIF9fTlJfZ2V0ZXVpZCAxNzUKK19fU1lTQ0FMTChfX05SX2dldGV1aWQsIHN5c19nZXRldWlkKQorI2RlZmluZSBfX05SX2dldGdpZCAxNzYKK19fU1lTQ0FMTChfX05SX2dldGdpZCwgc3lzX2dldGdpZCkKKyNkZWZpbmUgX19OUl9nZXRlZ2lkIDE3NworX19TWVNDQUxMKF9fTlJfZ2V0ZWdpZCwgc3lzX2dldGVnaWQpCisjZGVmaW5lIF9fTlJfZ2V0dGlkIDE3OAorX19TWVNDQUxMKF9fTlJfZ2V0dGlkLCBzeXNfZ2V0dGlkKQorI2RlZmluZSBfX05SX3N5c2luZm8gMTc5CitfX1NZU0NBTEwoX19OUl9zeXNpbmZvLCBzeXNfc3lzaW5mbykKKworLyogaXBjL21xdWV1ZS5jICovCisjZGVmaW5lIF9fTlJfbXFfb3BlbiAxODAKK19fU1lTQ0FMTChfX05SX21xX29wZW4sIHN5c19tcV9vcGVuKQorI2RlZmluZSBfX05SX21xX3VubGluayAxODEKK19fU1lTQ0FMTChfX05SX21xX3VubGluaywgc3lzX21xX3VubGluaykKKyNkZWZpbmUgX19OUl9tcV90aW1lZHNlbmQgMTgyCitfX1NZU0NBTEwoX19OUl9tcV90aW1lZHNlbmQsIHN5c19tcV90aW1lZHNlbmQpCisjZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlIDE4MworX19TWVNDQUxMKF9fTlJfbXFfdGltZWRyZWNlaXZlLCBzeXNfbXFfdGltZWRyZWNlaXZlKQorI2RlZmluZSBfX05SX21xX25vdGlmeSAxODQKK19fU1lTQ0FMTChfX05SX21xX25vdGlmeSwgc3lzX21xX25vdGlmeSkKKyNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyIDE4NQorX19TWVNDQUxMKF9fTlJfbXFfZ2V0c2V0YXR0ciwgc3lzX21xX2dldHNldGF0dHIpCisKKy8qIGlwYy9tc2cuYyAqLworI2RlZmluZSBfX05SX21zZ2dldCAxODYKK19fU1lTQ0FMTChfX05SX21zZ2dldCwgc3lzX21zZ2dldCkKKyNkZWZpbmUgX19OUl9tc2djdGwgMTg3CitfX1NZU0NBTEwoX19OUl9tc2djdGwsIHN5c19tc2djdGwpCisjZGVmaW5lIF9fTlJfbXNncmN2IDE4OAorX19TWVNDQUxMKF9fTlJfbXNncmN2LCBzeXNfbXNncmN2KQorI2RlZmluZSBfX05SX21zZ3NuZCAxODkKK19fU1lTQ0FMTChfX05SX21zZ3NuZCwgc3lzX21zZ3NuZCkKKworLyogaXBjL3NlbS5jICovCisjZGVmaW5lIF9fTlJfc2VtZ2V0IDE5MAorX19TWVNDQUxMKF9fTlJfc2VtZ2V0LCBzeXNfc2VtZ2V0KQorI2RlZmluZSBfX05SX3NlbWN0bCAxOTEKK19fU1lTQ0FMTChfX05SX3NlbWN0bCwgc3lzX3NlbWN0bCkKKyNkZWZpbmUgX19OUl9zZW10aW1lZG9wIDE5MgorX19TWVNDQUxMKF9fTlJfc2VtdGltZWRvcCwgc3lzX3NlbXRpbWVkb3ApCisjZGVmaW5lIF9fTlJfc2Vtb3AgMTkzCitfX1NZU0NBTEwoX19OUl9zZW1vcCwgc3lzX3NlbW9wKQorCisvKiBpcGMvc2htLmMgKi8KKyNkZWZpbmUgX19OUl9zaG1nZXQgMTk0CitfX1NZU0NBTEwoX19OUl9zaG1nZXQsIHN5c19zaG1nZXQpCisjZGVmaW5lIF9fTlJfc2htY3RsIDE5NQorX19TWVNDQUxMKF9fTlJfc2htY3RsLCBzeXNfc2htY3RsKQorI2RlZmluZSBfX05SX3NobWF0IDE5NgorX19TWVNDQUxMKF9fTlJfc2htYXQsIHN5c19zaG1hdCkKKyNkZWZpbmUgX19OUl9zaG1kdCAxOTcKK19fU1lTQ0FMTChfX05SX3NobWR0LCBzeXNfc2htZHQpCisKKy8qIG5ldC9zb2NrZXQuYyAqLworI2RlZmluZSBfX05SX3NvY2tldCAxOTgKK19fU1lTQ0FMTChfX05SX3NvY2tldCwgc3lzX3NvY2tldCkKKyNkZWZpbmUgX19OUl9zb2NrZXRwYWlyIDE5OQorX19TWVNDQUxMKF9fTlJfc29ja2V0cGFpciwgc3lzX3NvY2tldHBhaXIpCisjZGVmaW5lIF9fTlJfYmluZCAyMDAKK19fU1lTQ0FMTChfX05SX2JpbmQsIHN5c19iaW5kKQorI2RlZmluZSBfX05SX2xpc3RlbiAyMDEKK19fU1lTQ0FMTChfX05SX2xpc3Rlbiwgc3lzX2xpc3RlbikKKyNkZWZpbmUgX19OUl9hY2NlcHQgMjAyCitfX1NZU0NBTEwoX19OUl9hY2NlcHQsIHN5c19hY2NlcHQpCisjZGVmaW5lIF9fTlJfY29ubmVjdCAyMDMKK19fU1lTQ0FMTChfX05SX2Nvbm5lY3QsIHN5c19jb25uZWN0KQorI2RlZmluZSBfX05SX2dldHNvY2tuYW1lIDIwNAorX19TWVNDQUxMKF9fTlJfZ2V0c29ja25hbWUsIHN5c19nZXRzb2NrbmFtZSkKKyNkZWZpbmUgX19OUl9nZXRwZWVybmFtZSAyMDUKK19fU1lTQ0FMTChfX05SX2dldHBlZXJuYW1lLCBzeXNfZ2V0cGVlcm5hbWUpCisjZGVmaW5lIF9fTlJfc2VuZHRvIDIwNgorX19TWVNDQUxMKF9fTlJfc2VuZHRvLCBzeXNfc2VuZHRvKQorI2RlZmluZSBfX05SX3JlY3Zmcm9tIDIwNworX19TWVNDQUxMKF9fTlJfcmVjdmZyb20sIHN5c19yZWN2ZnJvbSkKKyNkZWZpbmUgX19OUl9zZXRzb2Nrb3B0IDIwOAorX19TWVNDQUxMKF9fTlJfc2V0c29ja29wdCwgc3lzX3NldHNvY2tvcHQpCisjZGVmaW5lIF9fTlJfZ2V0c29ja29wdCAyMDkKK19fU1lTQ0FMTChfX05SX2dldHNvY2tvcHQsIHN5c19nZXRzb2Nrb3B0KQorI2RlZmluZSBfX05SX3NodXRkb3duIDIxMAorX19TWVNDQUxMKF9fTlJfc2h1dGRvd24sIHN5c19zaHV0ZG93bikKKyNkZWZpbmUgX19OUl9zZW5kbXNnIDIxMQorX19TWVNDQUxMKF9fTlJfc2VuZG1zZywgc3lzX3NlbmRtc2cpCisjZGVmaW5lIF9fTlJfcmVjdm1zZyAyMTIKK19fU1lTQ0FMTChfX05SX3JlY3Ztc2csIHN5c19yZWN2bXNnKQorCisvKiBtbS9maWxlbWFwLmMgKi8KKyNkZWZpbmUgX19OUl9yZWFkYWhlYWQgMjEzCitfX1NZU0NBTEwoX19OUl9yZWFkYWhlYWQsIHN5c19yZWFkYWhlYWQpCisKKy8qIG1tL25vbW11LmMsIGFsc28gd2l0aCBNTVUgKi8KKyNkZWZpbmUgX19OUl9icmsgMjE0CitfX1NZU0NBTEwoX19OUl9icmssIHN5c19icmspCisjZGVmaW5lIF9fTlJfbXVubWFwIDIxNQorX19TWVNDQUxMKF9fTlJfbXVubWFwLCBzeXNfbXVubWFwKQorI2RlZmluZSBfX05SX21yZW1hcCAyMTYKK19fU1lTQ0FMTChfX05SX21yZW1hcCwgc3lzX21yZW1hcCkKKworLyogc2VjdXJpdHkva2V5cy9rZXljdGwuYyAqLworI2RlZmluZSBfX05SX2FkZF9rZXkgMjE3CitfX1NZU0NBTEwoX19OUl9hZGRfa2V5LCBzeXNfYWRkX2tleSkKKyNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleSAyMTgKK19fU1lTQ0FMTChfX05SX3JlcXVlc3Rfa2V5LCBzeXNfcmVxdWVzdF9rZXkpCisjZGVmaW5lIF9fTlJfa2V5Y3RsIDIxOQorX19TWVNDQUxMKF9fTlJfa2V5Y3RsLCBzeXNfa2V5Y3RsKQorCisvKiBhcmNoL2V4YW1wbGUva2VybmVsL3N5c19leGFtcGxlLmMgKi8KKyNkZWZpbmUgX19OUl9jbG9uZSAyMjAKK19fU1lTQ0FMTChfX05SX2Nsb25lLCBzeXNfY2xvbmUpCS8qIC5sb25nIHN5c19jbG9uZV93cmFwcGVyICovCisjZGVmaW5lIF9fTlJfZXhlY3ZlIDIyMQorX19TWVNDQUxMKF9fTlJfZXhlY3ZlLCBzeXNfZXhlY3ZlKQkvKiAubG9uZyBzeXNfZXhlY3ZlX3dyYXBwZXIgKi8KKworI2RlZmluZSBfX05SMzI2NF9tbWFwIDIyMgorX19TQ18zMjY0KF9fTlIzMjY0X21tYXAsIHN5c19tbWFwMiwgc3lzX21tYXApCisvKiBtbS9mYWR2aXNlLmMgKi8KKyNkZWZpbmUgX19OUjMyNjRfZmFkdmlzZTY0IDIyMworX19TWVNDQUxMKF9fTlIzMjY0X2ZhZHZpc2U2NCwgc3lzX2ZhZHZpc2U2NF82NCkKKworLyogbW0vLCBDT05GSUdfTU1VIG9ubHkgKi8KKyNpZm5kZWYgX19BUkNIX05PTU1VCisjZGVmaW5lIF9fTlJfc3dhcG9uIDIyNAorX19TWVNDQUxMKF9fTlJfc3dhcG9uLCBzeXNfc3dhcG9uKQorI2RlZmluZSBfX05SX3N3YXBvZmYgMjI1CitfX1NZU0NBTEwoX19OUl9zd2Fwb2ZmLCBzeXNfc3dhcG9mZikKKyNkZWZpbmUgX19OUl9tcHJvdGVjdCAyMjYKK19fU1lTQ0FMTChfX05SX21wcm90ZWN0LCBzeXNfbXByb3RlY3QpCisjZGVmaW5lIF9fTlJfbXN5bmMgMjI3CitfX1NZU0NBTEwoX19OUl9tc3luYywgc3lzX21zeW5jKQorI2RlZmluZSBfX05SX21sb2NrIDIyOAorX19TWVNDQUxMKF9fTlJfbWxvY2ssIHN5c19tbG9jaykKKyNkZWZpbmUgX19OUl9tdW5sb2NrIDIyOQorX19TWVNDQUxMKF9fTlJfbXVubG9jaywgc3lzX211bmxvY2spCisjZGVmaW5lIF9fTlJfbWxvY2thbGwgMjMwCitfX1NZU0NBTEwoX19OUl9tbG9ja2FsbCwgc3lzX21sb2NrYWxsKQorI2RlZmluZSBfX05SX211bmxvY2thbGwgMjMxCitfX1NZU0NBTEwoX19OUl9tdW5sb2NrYWxsLCBzeXNfbXVubG9ja2FsbCkKKyNkZWZpbmUgX19OUl9taW5jb3JlIDIzMgorX19TWVNDQUxMKF9fTlJfbWluY29yZSwgc3lzX21pbmNvcmUpCisjZGVmaW5lIF9fTlJfbWFkdmlzZSAyMzMKK19fU1lTQ0FMTChfX05SX21hZHZpc2UsIHN5c19tYWR2aXNlKQorI2RlZmluZSBfX05SX3JlbWFwX2ZpbGVfcGFnZXMgMjM0CitfX1NZU0NBTEwoX19OUl9yZW1hcF9maWxlX3BhZ2VzLCBzeXNfcmVtYXBfZmlsZV9wYWdlcykKKyNkZWZpbmUgX19OUl9tYmluZCAyMzUKK19fU1lTQ0FMTChfX05SX21iaW5kLCBzeXNfbWJpbmQpCisjZGVmaW5lIF9fTlJfZ2V0X21lbXBvbGljeSAyMzYKK19fU1lTQ0FMTChfX05SX2dldF9tZW1wb2xpY3ksIHN5c19nZXRfbWVtcG9saWN5KQorI2RlZmluZSBfX05SX3NldF9tZW1wb2xpY3kgMjM3CitfX1NZU0NBTEwoX19OUl9zZXRfbWVtcG9saWN5LCBzeXNfc2V0X21lbXBvbGljeSkKKyNkZWZpbmUgX19OUl9taWdyYXRlX3BhZ2VzIDIzOAorX19TWVNDQUxMKF9fTlJfbWlncmF0ZV9wYWdlcywgc3lzX21pZ3JhdGVfcGFnZXMpCisjZGVmaW5lIF9fTlJfbW92ZV9wYWdlcyAyMzkKK19fU1lTQ0FMTChfX05SX21vdmVfcGFnZXMsIHN5c19tb3ZlX3BhZ2VzKQorI2VuZGlmCisKKyNkZWZpbmUgX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbyAyNDAKK19fU1lTQ0FMTChfX05SX3J0X3Rnc2lncXVldWVpbmZvLCBzeXNfcnRfdGdzaWdxdWV1ZWluZm8pCisjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuIDI0MQorX19TWVNDQUxMKF9fTlJfcGVyZl9ldmVudF9vcGVuLCBzeXNfcGVyZl9ldmVudF9vcGVuKQorI2RlZmluZSBfX05SX2FjY2VwdDQgMjQyCitfX1NZU0NBTEwoX19OUl9hY2NlcHQ0LCBzeXNfYWNjZXB0NCkKKyNkZWZpbmUgX19OUl9yZWN2bW1zZyAyNDMKK19fU1lTQ0FMTChfX05SX3JlY3ZtbXNnLCBzeXNfcmVjdm1tc2cpCisKKy8qCisgKiBBcmNoaXRlY3R1cmVzIG1heSBwcm92aWRlIHVwIHRvIDE2IHN5c2NhbGxzIG9mIHRoZWlyIG93bgorICogc3RhcnRpbmcgd2l0aCB0aGlzIHZhbHVlLgorICovCisjZGVmaW5lIF9fTlJfYXJjaF9zcGVjaWZpY19zeXNjYWxsIDI0NAorCisjZGVmaW5lIF9fTlJfd2FpdDQgMjYwCitfX1NZU0NBTEwoX19OUl93YWl0NCwgc3lzX3dhaXQ0KQorI2RlZmluZSBfX05SX3BybGltaXQ2NCAyNjEKK19fU1lTQ0FMTChfX05SX3BybGltaXQ2NCwgc3lzX3BybGltaXQ2NCkKKyNkZWZpbmUgX19OUl9mYW5vdGlmeV9pbml0IDI2MgorX19TWVNDQUxMKF9fTlJfZmFub3RpZnlfaW5pdCwgc3lzX2Zhbm90aWZ5X2luaXQpCisjZGVmaW5lIF9fTlJfZmFub3RpZnlfbWFyayAyNjMKK19fU1lTQ0FMTChfX05SX2Zhbm90aWZ5X21hcmssIHN5c19mYW5vdGlmeV9tYXJrKQorCisjdW5kZWYgX19OUl9zeXNjYWxscworI2RlZmluZSBfX05SX3N5c2NhbGxzIDI2NAorCisvKgorICogQWxsIHN5c2NhbGxzIGJlbG93IGhlcmUgc2hvdWxkIGdvIGF3YXkgcmVhbGx5LAorICogdGhlc2UgYXJlIHByb3ZpZGVkIGZvciBib3RoIHJldmlldyBhbmQgYXMgYSBwb3J0aW5nCisgKiBoZWxwIGZvciB0aGUgQyBsaWJyYXJ5IHZlcnNpb24uCisqCisgKiBMYXN0IGNoYW5jZTogYXJlIGFueSBvZiB0aGVzZSBpbXBvcnRhbnQgZW5vdWdoIHRvCisgKiBlbmFibGUgYnkgZGVmYXVsdD8KKyAqLworI2lmZGVmIF9fQVJDSF9XQU5UX1NZU0NBTExfTk9fQVQKKyNkZWZpbmUgX19OUl9vcGVuIDEwMjQKK19fU1lTQ0FMTChfX05SX29wZW4sIHN5c19vcGVuKQorI2RlZmluZSBfX05SX2xpbmsgMTAyNQorX19TWVNDQUxMKF9fTlJfbGluaywgc3lzX2xpbmspCisjZGVmaW5lIF9fTlJfdW5saW5rIDEwMjYKK19fU1lTQ0FMTChfX05SX3VubGluaywgc3lzX3VubGluaykKKyNkZWZpbmUgX19OUl9ta25vZCAxMDI3CitfX1NZU0NBTEwoX19OUl9ta25vZCwgc3lzX21rbm9kKQorI2RlZmluZSBfX05SX2NobW9kIDEwMjgKK19fU1lTQ0FMTChfX05SX2NobW9kLCBzeXNfY2htb2QpCisjZGVmaW5lIF9fTlJfY2hvd24gMTAyOQorX19TWVNDQUxMKF9fTlJfY2hvd24sIHN5c19jaG93bikKKyNkZWZpbmUgX19OUl9ta2RpciAxMDMwCitfX1NZU0NBTEwoX19OUl9ta2Rpciwgc3lzX21rZGlyKQorI2RlZmluZSBfX05SX3JtZGlyIDEwMzEKK19fU1lTQ0FMTChfX05SX3JtZGlyLCBzeXNfcm1kaXIpCisjZGVmaW5lIF9fTlJfbGNob3duIDEwMzIKK19fU1lTQ0FMTChfX05SX2xjaG93biwgc3lzX2xjaG93bikKKyNkZWZpbmUgX19OUl9hY2Nlc3MgMTAzMworX19TWVNDQUxMKF9fTlJfYWNjZXNzLCBzeXNfYWNjZXNzKQorI2RlZmluZSBfX05SX3JlbmFtZSAxMDM0CitfX1NZU0NBTEwoX19OUl9yZW5hbWUsIHN5c19yZW5hbWUpCisjZGVmaW5lIF9fTlJfcmVhZGxpbmsgMTAzNQorX19TWVNDQUxMKF9fTlJfcmVhZGxpbmssIHN5c19yZWFkbGluaykKKyNkZWZpbmUgX19OUl9zeW1saW5rIDEwMzYKK19fU1lTQ0FMTChfX05SX3N5bWxpbmssIHN5c19zeW1saW5rKQorI2RlZmluZSBfX05SX3V0aW1lcyAxMDM3CitfX1NZU0NBTEwoX19OUl91dGltZXMsIHN5c191dGltZXMpCisjZGVmaW5lIF9fTlIzMjY0X3N0YXQgMTAzOAorX19TQ18zMjY0KF9fTlIzMjY0X3N0YXQsIHN5c19zdGF0NjQsIHN5c19uZXdzdGF0KQorI2RlZmluZSBfX05SMzI2NF9sc3RhdCAxMDM5CitfX1NDXzMyNjQoX19OUjMyNjRfbHN0YXQsIHN5c19sc3RhdDY0LCBzeXNfbmV3bHN0YXQpCisKKyN1bmRlZiBfX05SX3N5c2NhbGxzCisjZGVmaW5lIF9fTlJfc3lzY2FsbHMgKF9fTlIzMjY0X2xzdGF0KzEpCisjZW5kaWYgLyogX19BUkNIX1dBTlRfU1lTQ0FMTF9OT19BVCAqLworCisjaWZkZWYgX19BUkNIX1dBTlRfU1lTQ0FMTF9OT19GTEFHUworI2RlZmluZSBfX05SX3BpcGUgMTA0MAorX19TWVNDQUxMKF9fTlJfcGlwZSwgc3lzX3BpcGUpCisjZGVmaW5lIF9fTlJfZHVwMiAxMDQxCitfX1NZU0NBTEwoX19OUl9kdXAyLCBzeXNfZHVwMikKKyNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUgMTA0MgorX19TWVNDQUxMKF9fTlJfZXBvbGxfY3JlYXRlLCBzeXNfZXBvbGxfY3JlYXRlKQorI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdCAxMDQzCitfX1NZU0NBTEwoX19OUl9pbm90aWZ5X2luaXQsIHN5c19pbm90aWZ5X2luaXQpCisjZGVmaW5lIF9fTlJfZXZlbnRmZCAxMDQ0CitfX1NZU0NBTEwoX19OUl9ldmVudGZkLCBzeXNfZXZlbnRmZCkKKyNkZWZpbmUgX19OUl9zaWduYWxmZCAxMDQ1CitfX1NZU0NBTEwoX19OUl9zaWduYWxmZCwgc3lzX3NpZ25hbGZkKQorCisjdW5kZWYgX19OUl9zeXNjYWxscworI2RlZmluZSBfX05SX3N5c2NhbGxzIChfX05SX3NpZ25hbGZkKzEpCisjZW5kaWYgLyogX19BUkNIX1dBTlRfU1lTQ0FMTF9OT19GTEFHUyAqLworCisjaWYgKF9fQklUU19QRVJfTE9ORyA9PSAzMiB8fCBkZWZpbmVkKF9fU1lTQ0FMTF9DT01QQVQpKSAmJiBcCisgICAgIGRlZmluZWQoX19BUkNIX1dBTlRfU1lTQ0FMTF9PRkZfVCkKKyNkZWZpbmUgX19OUl9zZW5kZmlsZSAxMDQ2CitfX1NZU0NBTEwoX19OUl9zZW5kZmlsZSwgc3lzX3NlbmRmaWxlKQorI2RlZmluZSBfX05SX2Z0cnVuY2F0ZSAxMDQ3CitfX1NZU0NBTEwoX19OUl9mdHJ1bmNhdGUsIHN5c19mdHJ1bmNhdGUpCisjZGVmaW5lIF9fTlJfdHJ1bmNhdGUgMTA0OAorX19TWVNDQUxMKF9fTlJfdHJ1bmNhdGUsIHN5c190cnVuY2F0ZSkKKyNkZWZpbmUgX19OUl9zdGF0IDEwNDkKK19fU1lTQ0FMTChfX05SX3N0YXQsIHN5c19uZXdzdGF0KQorI2RlZmluZSBfX05SX2xzdGF0IDEwNTAKK19fU1lTQ0FMTChfX05SX2xzdGF0LCBzeXNfbmV3bHN0YXQpCisjZGVmaW5lIF9fTlJfZnN0YXQgMTA1MQorX19TWVNDQUxMKF9fTlJfZnN0YXQsIHN5c19uZXdmc3RhdCkKKyNkZWZpbmUgX19OUl9mY250bCAxMDUyCitfX1NZU0NBTEwoX19OUl9mY250bCwgc3lzX2ZjbnRsKQorI2RlZmluZSBfX05SX2ZhZHZpc2U2NCAxMDUzCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19GQURWSVNFNjQKK19fU1lTQ0FMTChfX05SX2ZhZHZpc2U2NCwgc3lzX2ZhZHZpc2U2NCkKKyNkZWZpbmUgX19OUl9uZXdmc3RhdGF0IDEwNTQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05FV0ZTVEFUQVQKK19fU1lTQ0FMTChfX05SX25ld2ZzdGF0YXQsIHN5c19uZXdmc3RhdGF0KQorI2RlZmluZSBfX05SX2ZzdGF0ZnMgMTA1NQorX19TWVNDQUxMKF9fTlJfZnN0YXRmcywgc3lzX2ZzdGF0ZnMpCisjZGVmaW5lIF9fTlJfc3RhdGZzIDEwNTYKK19fU1lTQ0FMTChfX05SX3N0YXRmcywgc3lzX3N0YXRmcykKKyNkZWZpbmUgX19OUl9sc2VlayAxMDU3CitfX1NZU0NBTEwoX19OUl9sc2Vlaywgc3lzX2xzZWVrKQorI2RlZmluZSBfX05SX21tYXAgMTA1OAorX19TWVNDQUxMKF9fTlJfbW1hcCwgc3lzX21tYXApCisKKyN1bmRlZiBfX05SX3N5c2NhbGxzCisjZGVmaW5lIF9fTlJfc3lzY2FsbHMgKF9fTlJfbW1hcCsxKQorI2VuZGlmIC8qIDMyIGJpdCBvZmZfdCBzeXNjYWxscyAqLworCisjaWZkZWYgX19BUkNIX1dBTlRfU1lTQ0FMTF9ERVBSRUNBVEVECisjZGVmaW5lIF9fTlJfYWxhcm0gMTA1OQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfQUxBUk0KK19fU1lTQ0FMTChfX05SX2FsYXJtLCBzeXNfYWxhcm0pCisjZGVmaW5lIF9fTlJfZ2V0cGdycCAxMDYwCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRQR1JQCitfX1NZU0NBTEwoX19OUl9nZXRwZ3JwLCBzeXNfZ2V0cGdycCkKKyNkZWZpbmUgX19OUl9wYXVzZSAxMDYxCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19QQVVTRQorX19TWVNDQUxMKF9fTlJfcGF1c2UsIHN5c19wYXVzZSkKKyNkZWZpbmUgX19OUl90aW1lIDEwNjIKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1RJTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19USU1FCitfX1NZU0NBTEwoX19OUl90aW1lLCBzeXNfdGltZSkKKyNkZWZpbmUgX19OUl91dGltZSAxMDYzCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19VVElNRQorX19TWVNDQUxMKF9fTlJfdXRpbWUsIHN5c191dGltZSkKKworI2RlZmluZSBfX05SX2NyZWF0IDEwNjQKK19fU1lTQ0FMTChfX05SX2NyZWF0LCBzeXNfY3JlYXQpCisjZGVmaW5lIF9fTlJfZ2V0ZGVudHMgMTA2NQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUREVOVFMKK19fU1lTQ0FMTChfX05SX2dldGRlbnRzLCBzeXNfZ2V0ZGVudHMpCisjZGVmaW5lIF9fTlJfZnV0aW1lc2F0IDEwNjYKK19fU1lTQ0FMTChfX05SX2Z1dGltZXNhdCwgc3lzX2Z1dGltZXNhdCkKKyNkZWZpbmUgX19OUl9zZWxlY3QgMTA2NworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0VMRUNUCitfX1NZU0NBTEwoX19OUl9zZWxlY3QsIHN5c19zZWxlY3QpCisjZGVmaW5lIF9fTlJfcG9sbCAxMDY4CitfX1NZU0NBTEwoX19OUl9wb2xsLCBzeXNfcG9sbCkKKyNkZWZpbmUgX19OUl9lcG9sbF93YWl0IDEwNjkKK19fU1lTQ0FMTChfX05SX2Vwb2xsX3dhaXQsIHN5c19lcG9sbF93YWl0KQorI2RlZmluZSBfX05SX3VzdGF0IDEwNzAKK19fU1lTQ0FMTChfX05SX3VzdGF0LCBzeXNfdXN0YXQpCisjZGVmaW5lIF9fTlJfdmZvcmsgMTA3MQorX19TWVNDQUxMKF9fTlJfdmZvcmssIHN5c192Zm9yaykKKyNkZWZpbmUgX19OUl9vbGR3YWl0NCAxMDcyCitfX1NZU0NBTEwoX19OUl9vbGR3YWl0NCwgc3lzX3dhaXQ0KQorI2RlZmluZSBfX05SX3JlY3YgMTA3MworX19TWVNDQUxMKF9fTlJfcmVjdiwgc3lzX3JlY3YpCisjZGVmaW5lIF9fTlJfc2VuZCAxMDc0CitfX1NZU0NBTEwoX19OUl9zZW5kLCBzeXNfc2VuZCkKKyNkZWZpbmUgX19OUl9iZGZsdXNoIDEwNzUKK19fU1lTQ0FMTChfX05SX2JkZmx1c2gsIHN5c19iZGZsdXNoKQorI2RlZmluZSBfX05SX3Vtb3VudCAxMDc2CitfX1NZU0NBTEwoX19OUl91bW91bnQsIHN5c19vbGR1bW91bnQpCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERVTU9VTlQKKyNkZWZpbmUgX19OUl91c2VsaWIgMTA3NworX19TWVNDQUxMKF9fTlJfdXNlbGliLCBzeXNfdXNlbGliKQorI2RlZmluZSBfX05SX19zeXNjdGwgMTA3OAorX19TWVNDQUxMKF9fTlJfX3N5c2N0bCwgc3lzX3N5c2N0bCkKKworI2RlZmluZSBfX05SX2ZvcmsgMTA3OQorI2lmZGVmIENPTkZJR19NTVUKK19fU1lTQ0FMTChfX05SX2ZvcmssIHN5c19mb3JrKQorI2Vsc2UKK19fU1lTQ0FMTChfX05SX2ZvcmssIHN5c19uaV9zeXNjYWxsKQorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KKworI3VuZGVmIF9fTlJfc3lzY2FsbHMKKyNkZWZpbmUgX19OUl9zeXNjYWxscyAoX19OUl9mb3JrKzEpCisKKyNlbmRpZiAvKiBfX0FSQ0hfV0FOVF9TWVNDQUxMX0RFUFJFQ0FURUQgKi8KKworLyoKKyAqIDMyIGJpdCBzeXN0ZW1zIHRyYWRpdGlvbmFsbHkgdXNlZCBkaWZmZXJlbnQKKyAqIHN5c2NhbGxzIGZvciBvZmZfdCBhbmQgbG9mZl90IGFyZ3VtZW50cywgd2hpbGUKKyAqIDY0IGJpdCBzeXN0ZW1zIG9ubHkgbmVlZCB0aGUgb2ZmX3QgdmVyc2lvbi4KKyAqIEZvciBuZXcgMzIgYml0IHBsYXRmb3JtcywgdGhlcmUgaXMgbm8gbmVlZCB0bworICogaW1wbGVtZW50IHRoZSBvbGQgMzIgYml0IG9mZl90IHN5c2NhbGxzLCBzbworICogdGhleSB0YWtlIGRpZmZlcmVudCBuYW1lcy4KKyAqIEhlcmUgd2UgbWFwIHRoZSBudW1iZXJzIHNvIHRoYXQgYm90aCB2ZXJzaW9ucworICogdXNlIHRoZSBzYW1lIHN5c2NhbGwgdGFibGUgbGF5b3V0LgorICovCisjaWYgX19CSVRTX1BFUl9MT05HID09IDY0ICYmICFkZWZpbmVkKF9fU1lTQ0FMTF9DT01QQVQpCisjZGVmaW5lIF9fTlJfZmNudGwgX19OUjMyNjRfZmNudGwKKyNkZWZpbmUgX19OUl9zdGF0ZnMgX19OUjMyNjRfc3RhdGZzCisjZGVmaW5lIF9fTlJfZnN0YXRmcyBfX05SMzI2NF9mc3RhdGZzCisjZGVmaW5lIF9fTlJfdHJ1bmNhdGUgX19OUjMyNjRfdHJ1bmNhdGUKKyNkZWZpbmUgX19OUl9mdHJ1bmNhdGUgX19OUjMyNjRfZnRydW5jYXRlCisjZGVmaW5lIF9fTlJfbHNlZWsgX19OUjMyNjRfbHNlZWsKKyNkZWZpbmUgX19OUl9zZW5kZmlsZSBfX05SMzI2NF9zZW5kZmlsZQorI2RlZmluZSBfX05SX25ld2ZzdGF0YXQgX19OUjMyNjRfZnN0YXRhdAorI2RlZmluZSBfX05SX2ZzdGF0IF9fTlIzMjY0X2ZzdGF0CisjZGVmaW5lIF9fTlJfbW1hcCBfX05SMzI2NF9tbWFwCisjZGVmaW5lIF9fTlJfZmFkdmlzZTY0IF9fTlIzMjY0X2ZhZHZpc2U2NAorI2lmZGVmIF9fTlIzMjY0X3N0YXQKKyNkZWZpbmUgX19OUl9zdGF0IF9fTlIzMjY0X3N0YXQKKyNkZWZpbmUgX19OUl9sc3RhdCBfX05SMzI2NF9sc3RhdAorI2VuZGlmCisjZWxzZQorI2RlZmluZSBfX05SX2ZjbnRsNjQgX19OUjMyNjRfZmNudGwKKyNkZWZpbmUgX19OUl9zdGF0ZnM2NCBfX05SMzI2NF9zdGF0ZnMKKyNkZWZpbmUgX19OUl9mc3RhdGZzNjQgX19OUjMyNjRfZnN0YXRmcworI2RlZmluZSBfX05SX3RydW5jYXRlNjQgX19OUjMyNjRfdHJ1bmNhdGUKKyNkZWZpbmUgX19OUl9mdHJ1bmNhdGU2NCBfX05SMzI2NF9mdHJ1bmNhdGUKKyNkZWZpbmUgX19OUl9sbHNlZWsgX19OUjMyNjRfbHNlZWsKKyNkZWZpbmUgX19OUl9zZW5kZmlsZTY0IF9fTlIzMjY0X3NlbmRmaWxlCisjZGVmaW5lIF9fTlJfZnN0YXRhdDY0IF9fTlIzMjY0X2ZzdGF0YXQKKyNkZWZpbmUgX19OUl9mc3RhdDY0IF9fTlIzMjY0X2ZzdGF0CisjZGVmaW5lIF9fTlJfbW1hcDIgX19OUjMyNjRfbW1hcAorI2RlZmluZSBfX05SX2ZhZHZpc2U2NF82NCBfX05SMzI2NF9mYWR2aXNlNjQKKyNpZmRlZiBfX05SMzI2NF9zdGF0CisjZGVmaW5lIF9fTlJfc3RhdDY0IF9fTlIzMjY0X3N0YXQKKyNkZWZpbmUgX19OUl9sc3RhdDY0IF9fTlIzMjY0X2xzdGF0CisjZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9HRU5FUklDX1VOSVNURF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL2Eub3V0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL2Eub3V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgzODk0YgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vYS5vdXQuaApAQCAtMCwwICsxLDM0IEBACisjaWZuZGVmIF9fQVJNX0FfT1VUX0hfXworI2RlZmluZSBfX0FSTV9BX09VVF9IX18KKworI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGV4ZWMKK3sKKyAgX191MzIgYV9pbmZvOwkJLyogVXNlIG1hY3JvcyBOX01BR0lDLCBldGMgZm9yIGFjY2VzcyAqLworICBfX3UzMiBhX3RleHQ7CQkvKiBsZW5ndGggb2YgdGV4dCwgaW4gYnl0ZXMgKi8KKyAgX191MzIgYV9kYXRhOwkJLyogbGVuZ3RoIG9mIGRhdGEsIGluIGJ5dGVzICovCisgIF9fdTMyIGFfYnNzOwkJLyogbGVuZ3RoIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmVhIGZvciBmaWxlLCBpbiBieXRlcyAqLworICBfX3UzMiBhX3N5bXM7CQkvKiBsZW5ndGggb2Ygc3ltYm9sIHRhYmxlIGRhdGEgaW4gZmlsZSwgaW4gYnl0ZXMgKi8KKyAgX191MzIgYV9lbnRyeTsJLyogc3RhcnQgYWRkcmVzcyAqLworICBfX3UzMiBhX3Ryc2l6ZTsJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgdGV4dCwgaW4gYnl0ZXMgKi8KKyAgX191MzIgYV9kcnNpemU7CS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIGRhdGEsIGluIGJ5dGVzICovCit9OworCisvKgorICogVGhpcyBpcyBhbHdheXMgdGhlIHNhbWUKKyAqLworI2RlZmluZSBOX1RYVEFERFIoYSkJKDB4MDAwMDgwMDApCisKKyNkZWZpbmUgTl9UUlNJWkUoYSkJKChhKS5hX3Ryc2l6ZSkKKyNkZWZpbmUgTl9EUlNJWkUoYSkJKChhKS5hX2Ryc2l6ZSkKKyNkZWZpbmUgTl9TWU1TSVpFKGEpCSgoYSkuYV9zeW1zKQorCisjZGVmaW5lIE1fQVJNIDEwMworCisjaWZuZGVmIExJQlJBUllfU1RBUlRfVEVYVAorI2RlZmluZSBMSUJSQVJZX1NUQVJUX1RFWFQJKDB4MDBjMDAwMDApCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQV9PVVRfR05VX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9hdXh2ZWMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vYXV4dmVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA1MzZmNgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vYXV4dmVjLmgKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIF9fQVNNQVJNX0FVWFZFQ19ICisjZGVmaW5lIF9fQVNNQVJNX0FVWFZFQ19ICisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9iaXRzcGVybG9uZy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9iaXRzcGVybG9uZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYzBiYjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL2JpdHNwZXJsb25nLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdHNwZXJsb25nLmg+CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL2J5dGVvcmRlci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzM3OTc0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogIGFyY2gvYXJtL2luY2x1ZGUvYXNtL2J5dGVvcmRlci5oCisgKgorICogQVJNIEVuZGlhbi1uZXNzLiAgSW4gbGl0dGxlIGVuZGlhbiBtb2RlLCB0aGUgZGF0YSBidXMgaXMgY29ubmVjdGVkIHN1Y2gKKyAqIHRoYXQgYnl0ZSBhY2Nlc3NlcyBhcHBlYXIgYXM6CisgKiAgMCA9IGQwLi4uZDcsIDEgPSBkOC4uLmQxNSwgMiA9IGQxNi4uLmQyMywgMyA9IGQyNC4uLmQzMQorICogYW5kIHdvcmQgYWNjZXNzZXMgKGRhdGEgb3IgaW5zdHJ1Y3Rpb24pIGFwcGVhciBhczoKKyAqICBkMC4uLmQzMQorICoKKyAqIFdoZW4gaW4gYmlnIGVuZGlhbiBtb2RlLCBieXRlIGFjY2Vzc2VzIGFwcGVhciBhczoKKyAqICAwID0gZDI0Li4uZDMxLCAxID0gZDE2Li4uZDIzLCAyID0gZDguLi5kMTUsIDMgPSBkMC4uLmQ3CisgKiBhbmQgd29yZCBhY2Nlc3NlcyAoZGF0YSBvciBpbnN0cnVjdGlvbikgYXBwZWFyIGFzOgorICogIGQwLi4uZDMxCisgKi8KKyNpZm5kZWYgX19BU01fQVJNX0JZVEVPUkRFUl9ICisjZGVmaW5lIF9fQVNNX0FSTV9CWVRFT1JERVJfSAorCisjaWZkZWYgX19BUk1FQl9fCisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2JpZ19lbmRpYW4uaD4KKyNlbHNlCisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaD4KKyNlbmRpZgorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9lcnJuby5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9lcnJuby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNjBmMDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL2Vycm5vLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9BUk1fRVJSTk9fSAorI2RlZmluZSBfQVJNX0VSUk5PX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2Vycm5vLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9mY250bC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9mY250bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MGI2NjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL2ZjbnRsLmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBfQVJNX0ZDTlRMX0gKKyNkZWZpbmUgX0FSTV9GQ05UTF9ICisKKyNkZWZpbmUgT19ESVJFQ1RPUlkJIDA0MDAwMAkvKiBtdXN0IGJlIGEgZGlyZWN0b3J5ICovCisjZGVmaW5lIE9fTk9GT0xMT1cJMDEwMDAwMAkvKiBkb24ndCBmb2xsb3cgbGlua3MgKi8KKyNkZWZpbmUgT19ESVJFQ1QJMDIwMDAwMAkvKiBkaXJlY3QgZGlzayBhY2Nlc3MgaGludCAtIGN1cnJlbnRseSBpZ25vcmVkICovCisjZGVmaW5lIE9fTEFSR0VGSUxFCTA0MDAwMDAKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2ZjbnRsLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9od2NhcC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9od2NhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNTE4YzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL2h3Y2FwLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfX0FTTUFSTV9IV0NBUF9ICisjZGVmaW5lIF9fQVNNQVJNX0hXQ0FQX0gKKworLyoKKyAqIEhXQ0FQIGZsYWdzIC0gZm9yIGVsZl9od2NhcCAoaW4ga2VybmVsKSBhbmQgQVRfSFdDQVAKKyAqLworI2RlZmluZSBIV0NBUF9TV1AJMQorI2RlZmluZSBIV0NBUF9IQUxGCTIKKyNkZWZpbmUgSFdDQVBfVEhVTUIJNAorI2RlZmluZSBIV0NBUF8yNkJJVAk4CS8qIFBsYXkgaXQgc2FmZSAqLworI2RlZmluZSBIV0NBUF9GQVNUX01VTFQJMTYKKyNkZWZpbmUgSFdDQVBfRlBBCTMyCisjZGVmaW5lIEhXQ0FQX1ZGUAk2NAorI2RlZmluZSBIV0NBUF9FRFNQCTEyOAorI2RlZmluZSBIV0NBUF9KQVZBCTI1NgorI2RlZmluZSBIV0NBUF9JV01NWFQJNTEyCisjZGVmaW5lIEhXQ0FQX0NSVU5DSAkxMDI0CisjZGVmaW5lIEhXQ0FQX1RIVU1CRUUJMjA0OAorI2RlZmluZSBIV0NBUF9ORU9OCTQwOTYKKyNkZWZpbmUgSFdDQVBfVkZQdjMJODE5MgorI2RlZmluZSBIV0NBUF9WRlB2M0QxNgkxNjM4NAorI2RlZmluZSBIV0NBUF9UTFMJMzI3NjgKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vaW9jdGwuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjc5ZmUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9pb2N0bC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb2N0bC5oPgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9pb2N0bHMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vaW9jdGxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM5NjI5OAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vaW9jdGxzLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIF9fQVNNX0FSTV9JT0NUTFNfSAorI2RlZmluZSBfX0FTTV9BUk1fSU9DVExTX0gKKworI2RlZmluZSBGSU9RU0laRQkweDU0NUUKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lvY3Rscy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vaXBjYnVmLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL2lwY2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NjgzOTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL2lwY2J1Zi5oCkBAIC0wLDAgKzEsMjkgQEAKKyNpZm5kZWYgX19BU01BUk1fSVBDQlVGX0gKKyNkZWZpbmUgX19BU01BUk1fSVBDQlVGX0gKKworLyoKKyAqIFRoZSBpcGM2NF9wZXJtIHN0cnVjdHVyZSBmb3IgYXJtIGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSAzMi1iaXQgbW9kZV90IGFuZCBzZXEKKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3QgaXBjNjRfcGVybQoreworCV9fa2VybmVsX2tleV90CQlrZXk7CisJX19rZXJuZWxfdWlkMzJfdAl1aWQ7CisJX19rZXJuZWxfZ2lkMzJfdAlnaWQ7CisJX19rZXJuZWxfdWlkMzJfdAljdWlkOworCV9fa2VybmVsX2dpZDMyX3QJY2dpZDsKKwlfX2tlcm5lbF9tb2RlX3QJCW1vZGU7CisJdW5zaWduZWQgc2hvcnQJCV9fcGFkMTsKKwl1bnNpZ25lZCBzaG9ydAkJc2VxOworCXVuc2lnbmVkIHNob3J0CQlfX3BhZDI7CisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMjsKK307CisKKyNlbmRpZiAvKiBfX0FTTUFSTV9JUENCVUZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9tbWFuLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL21tYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWY5OWM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9tbWFuLmgKQEAgLTAsMCArMSw0IEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1hbi5oPgorCisjZGVmaW5lIGFyY2hfbW1hcF9jaGVjayhhZGRyLCBsZW4sIGZsYWdzKSBcCisJKCgoZmxhZ3MpICYgTUFQX0ZJWEVEICYmIChhZGRyKSA8IEZJUlNUX1VTRVJfQUREUkVTUykgPyAtRUlOVkFMIDogMCkKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vbXNnYnVmLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL21zZ2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYjM1YjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL21zZ2J1Zi5oCkBAIC0wLDAgKzEsMzEgQEAKKyNpZm5kZWYgX0FTTUFSTV9NU0dCVUZfSAorI2RlZmluZSBfQVNNQVJNX01TR0JVRl9ICisKKy8qIAorICogVGhlIG1zcWlkNjRfZHMgc3RydWN0dXJlIGZvciBhcm0gYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDY0LWJpdCB0aW1lX3QgdG8gc29sdmUgeTIwMzggcHJvYmxlbQorICogLSAyIG1pc2NlbGxhbmVvdXMgMzItYml0IHZhbHVlcworICovCisKK3N0cnVjdCBtc3FpZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybSBtc2dfcGVybTsKKwlfX2tlcm5lbF90aW1lX3QgbXNnX3N0aW1lOwkvKiBsYXN0IG1zZ3NuZCB0aW1lICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJX19rZXJuZWxfdGltZV90IG1zZ19ydGltZTsJLyogbGFzdCBtc2dyY3YgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworCV9fa2VybmVsX3RpbWVfdCBtc2dfY3RpbWU7CS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMzsKKwl1bnNpZ25lZCBsb25nICBtc2dfY2J5dGVzOwkvKiBjdXJyZW50IG51bWJlciBvZiBieXRlcyBvbiBxdWV1ZSAqLworCXVuc2lnbmVkIGxvbmcgIG1zZ19xbnVtOwkvKiBudW1iZXIgb2YgbWVzc2FnZXMgaW4gcXVldWUgKi8KKwl1bnNpZ25lZCBsb25nICBtc2dfcWJ5dGVzOwkvKiBtYXggbnVtYmVyIG9mIGJ5dGVzIG9uIHF1ZXVlICovCisJX19rZXJuZWxfcGlkX3QgbXNnX2xzcGlkOwkvKiBwaWQgb2YgbGFzdCBtc2dzbmQgKi8KKwlfX2tlcm5lbF9waWRfdCBtc2dfbHJwaWQ7CS8qIGxhc3QgcmVjZWl2ZSBwaWQgKi8KKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDQ7CisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQ1OworfTsKKworI2VuZGlmIC8qIF9BU01BUk1fTVNHQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vcGFyYW0uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmU0M2RkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9wYXJhbS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiAgYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFyYW0uaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fQVNNX1BBUkFNX0gKKyNkZWZpbmUgX19BU01fUEFSQU1fSAorCisjIGRlZmluZSBIWgkJMTAwCisKKyNkZWZpbmUgRVhFQ19QQUdFU0laRQk0MDk2CisKKyNpZm5kZWYgTk9HUk9VUAorI2RlZmluZSBOT0dST1VQICAgICAgICAgKC0xKQorI2VuZGlmCisKKy8qIG1heCBsZW5ndGggb2YgaG9zdG5hbWUgKi8KKyNkZWZpbmUgTUFYSE9TVE5BTUVMRU4gIDY0CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL3BvbGwuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vcG9sbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ODUwOWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL3BvbGwuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcG9sbC5oPgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9wb3NpeF90eXBlcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9wb3NpeF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNGY2NGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL3Bvc2l4X3R5cGVzLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqICBhcmNoL2FybS9pbmNsdWRlL2FzbS9wb3NpeF90eXBlcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5Ni0xOTk4IFJ1c3NlbGwgS2luZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDaGFuZ2Vsb2c6CisgKiAgIDI3LTA2LTE5OTYJUk1LCUNyZWF0ZWQKKyAqLworI2lmbmRlZiBfX0FSQ0hfQVJNX1BPU0lYX1RZUEVTX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9QT1NJWF9UWVBFU19ICisKKy8qCisgKiBUaGlzIGZpbGUgaXMgZ2VuZXJhbGx5IHVzZWQgYnkgdXNlci1sZXZlbCBzb2Z0d2FyZSwgc28geW91IG5lZWQgdG8KKyAqIGJlIGEgbGl0dGxlIGNhcmVmdWwgYWJvdXQgbmFtZXNwYWNlIHBvbGx1dGlvbiBldGMuICBBbHNvLCB3ZSBjYW5ub3QKKyAqIGFzc3VtZSBHQ0MgaXMgYmVpbmcgdXNlZC4KKyAqLworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJCV9fa2VybmVsX2lub190OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkJX19rZXJuZWxfbW9kZV90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkJX19rZXJuZWxfbmxpbmtfdDsKK3R5cGVkZWYgbG9uZwkJCV9fa2VybmVsX29mZl90OwordHlwZWRlZiBpbnQJCQlfX2tlcm5lbF9waWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJCV9fa2VybmVsX2lwY19waWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJCV9fa2VybmVsX3VpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkJX19rZXJuZWxfZ2lkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAkJX19rZXJuZWxfc2l6ZV90OwordHlwZWRlZiBpbnQJCQlfX2tlcm5lbF9zc2l6ZV90OwordHlwZWRlZiBpbnQJCQlfX2tlcm5lbF9wdHJkaWZmX3Q7Cit0eXBlZGVmIGxvbmcJCQlfX2tlcm5lbF90aW1lX3Q7Cit0eXBlZGVmIGxvbmcJCQlfX2tlcm5lbF9zdXNlY29uZHNfdDsKK3R5cGVkZWYgbG9uZwkJCV9fa2VybmVsX2Nsb2NrX3Q7Cit0eXBlZGVmIGludAkJCV9fa2VybmVsX3RpbWVyX3Q7Cit0eXBlZGVmIGludAkJCV9fa2VybmVsX2Nsb2NraWRfdDsKK3R5cGVkZWYgaW50CQkJX19rZXJuZWxfZGFkZHJfdDsKK3R5cGVkZWYgY2hhciAqCQkJX19rZXJuZWxfY2FkZHJfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJCV9fa2VybmVsX3VpZDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CQlfX2tlcm5lbF9naWQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJCV9fa2VybmVsX3VpZDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAkJX19rZXJuZWxfZ2lkMzJfdDsKKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkJX19rZXJuZWxfb2xkX3VpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkJX19rZXJuZWxfb2xkX2dpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkJX19rZXJuZWxfb2xkX2Rldl90OworCisjaWZkZWYgX19HTlVDX18KK3R5cGVkZWYgbG9uZyBsb25nCQlfX2tlcm5lbF9sb2ZmX3Q7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworCWludAl2YWxbMl07Cit9IF9fa2VybmVsX2ZzaWRfdDsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL3B0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZTI0ODYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogIGFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5Ni0yMDAzIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19BU01fQVJNX1BUUkFDRV9ICisjZGVmaW5lIF9fQVNNX0FSTV9QVFJBQ0VfSAorCisjaW5jbHVkZSA8YXNtL2h3Y2FwLmg+CisKKyNkZWZpbmUgUFRSQUNFX0dFVFJFR1MJCTEyCisjZGVmaW5lIFBUUkFDRV9TRVRSRUdTCQkxMworI2RlZmluZSBQVFJBQ0VfR0VURlBSRUdTCTE0CisjZGVmaW5lIFBUUkFDRV9TRVRGUFJFR1MJMTUKKy8qIFBUUkFDRV9BVFRBQ0ggaXMgMTYgKi8KKy8qIFBUUkFDRV9ERVRBQ0ggaXMgMTcgKi8KKyNkZWZpbmUgUFRSQUNFX0dFVFdNTVhSRUdTCTE4CisjZGVmaW5lIFBUUkFDRV9TRVRXTU1YUkVHUwkxOQorLyogMjAgaXMgdW51c2VkICovCisjZGVmaW5lIFBUUkFDRV9PTERTRVRPUFRJT05TCTIxCisjZGVmaW5lIFBUUkFDRV9HRVRfVEhSRUFEX0FSRUEJMjIKKyNkZWZpbmUgUFRSQUNFX1NFVF9TWVNDQUxMCTIzCisvKiBQVFJBQ0VfU1lTQ0FMTCBpcyAyNCAqLworI2RlZmluZSBQVFJBQ0VfR0VUQ1JVTkNIUkVHUwkyNQorI2RlZmluZSBQVFJBQ0VfU0VUQ1JVTkNIUkVHUwkyNgorI2RlZmluZSBQVFJBQ0VfR0VUVkZQUkVHUwkyNworI2RlZmluZSBQVFJBQ0VfU0VUVkZQUkVHUwkyOAorI2RlZmluZSBQVFJBQ0VfR0VUSEJQUkVHUwkyOQorI2RlZmluZSBQVFJBQ0VfU0VUSEJQUkVHUwkzMAorCisvKgorICogUFNSIGJpdHMKKyAqLworI2RlZmluZSBVU1IyNl9NT0RFCTB4MDAwMDAwMDAKKyNkZWZpbmUgRklRMjZfTU9ERQkweDAwMDAwMDAxCisjZGVmaW5lIElSUTI2X01PREUJMHgwMDAwMDAwMgorI2RlZmluZSBTVkMyNl9NT0RFCTB4MDAwMDAwMDMKKyNkZWZpbmUgVVNSX01PREUJMHgwMDAwMDAxMAorI2RlZmluZSBGSVFfTU9ERQkweDAwMDAwMDExCisjZGVmaW5lIElSUV9NT0RFCTB4MDAwMDAwMTIKKyNkZWZpbmUgU1ZDX01PREUJMHgwMDAwMDAxMworI2RlZmluZSBBQlRfTU9ERQkweDAwMDAwMDE3CisjZGVmaW5lIFVORF9NT0RFCTB4MDAwMDAwMWIKKyNkZWZpbmUgU1lTVEVNX01PREUJMHgwMDAwMDAxZgorI2RlZmluZSBNT0RFMzJfQklUCTB4MDAwMDAwMTAKKyNkZWZpbmUgTU9ERV9NQVNLCTB4MDAwMDAwMWYKKyNkZWZpbmUgUFNSX1RfQklUCTB4MDAwMDAwMjAKKyNkZWZpbmUgUFNSX0ZfQklUCTB4MDAwMDAwNDAKKyNkZWZpbmUgUFNSX0lfQklUCTB4MDAwMDAwODAKKyNkZWZpbmUgUFNSX0FfQklUCTB4MDAwMDAxMDAKKyNkZWZpbmUgUFNSX0VfQklUCTB4MDAwMDAyMDAKKyNkZWZpbmUgUFNSX0pfQklUCTB4MDEwMDAwMDAKKyNkZWZpbmUgUFNSX1FfQklUCTB4MDgwMDAwMDAKKyNkZWZpbmUgUFNSX1ZfQklUCTB4MTAwMDAwMDAKKyNkZWZpbmUgUFNSX0NfQklUCTB4MjAwMDAwMDAKKyNkZWZpbmUgUFNSX1pfQklUCTB4NDAwMDAwMDAKKyNkZWZpbmUgUFNSX05fQklUCTB4ODAwMDAwMDAKKworLyoKKyAqIEdyb3VwcyBvZiBQU1IgYml0cworICovCisjZGVmaW5lIFBTUl9mCQkweGZmMDAwMDAwCS8qIEZsYWdzCQkqLworI2RlZmluZSBQU1JfcwkJMHgwMGZmMDAwMAkvKiBTdGF0dXMJCSovCisjZGVmaW5lIFBTUl94CQkweDAwMDBmZjAwCS8qIEV4dGVuc2lvbgkJKi8KKyNkZWZpbmUgUFNSX2MJCTB4MDAwMDAwZmYJLyogQ29udHJvbAkJKi8KKworLyoKKyAqIEFSTXY3IGdyb3VwcyBvZiBBUFNSIGJpdHMKKyAqLworI2RlZmluZSBQU1JfSVNFVF9NQVNLCTB4MDEwMDAwMTAJLyogSVNBIHN0YXRlIChKLCBUKSBtYXNrICovCisjZGVmaW5lIFBTUl9JVF9NQVNLCTB4MDYwMGZjMDAJLyogSWYtVGhlbiBleGVjdXRpb24gc3RhdGUgbWFzayAqLworI2RlZmluZSBQU1JfRU5ESUFOX01BU0sJMHgwMDAwMDIwMAkvKiBFbmRpYW5uZXNzIHN0YXRlIG1hc2sgKi8KKworLyoKKyAqIERlZmF1bHQgZW5kaWFubmVzcyBzdGF0ZQorICovCisjaWZkZWYgQ09ORklHX0NQVV9FTkRJQU5fQkU4CisjZGVmaW5lIFBTUl9FTkRTVEFURQlQU1JfRV9CSVQKKyNlbHNlCisjZGVmaW5lIFBTUl9FTkRTVEFURQkwCisjZW5kaWYKKworLyogCisgKiBUaGVzZSBhcmUgJ21hZ2ljJyB2YWx1ZXMgZm9yIFBUUkFDRV9QRUVLVVNSIHRoYXQgcmV0dXJuIGluZm8gYWJvdXQgd2hlcmUgYQorICogcHJvY2VzcyBpcyBsb2NhdGVkIGluIG1lbW9yeS4KKyAqLworI2RlZmluZSBQVF9URVhUX0FERFIJCTB4MTAwMDAKKyNkZWZpbmUgUFRfREFUQV9BRERSCQkweDEwMDA0CisjZGVmaW5lIFBUX1RFWFRfRU5EX0FERFIJMHgxMDAwOAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogVGhpcyBzdHJ1Y3QgZGVmaW5lcyB0aGUgd2F5IHRoZSByZWdpc3RlcnMgYXJlIHN0b3JlZCBvbiB0aGUKKyAqIHN0YWNrIGR1cmluZyBhIHN5c3RlbSBjYWxsLiAgTm90ZSB0aGF0IHNpemVvZihzdHJ1Y3QgcHRfcmVncykKKyAqIGhhcyB0byBiZSBhIG11bHRpcGxlIG9mIDguCisgKi8KK3N0cnVjdCBwdF9yZWdzIHsKKwlsb25nIHVyZWdzWzE4XTsKK307CisKKyNkZWZpbmUgQVJNX2Nwc3IJdXJlZ3NbMTZdCisjZGVmaW5lIEFSTV9wYwkJdXJlZ3NbMTVdCisjZGVmaW5lIEFSTV9scgkJdXJlZ3NbMTRdCisjZGVmaW5lIEFSTV9zcAkJdXJlZ3NbMTNdCisjZGVmaW5lIEFSTV9pcAkJdXJlZ3NbMTJdCisjZGVmaW5lIEFSTV9mcAkJdXJlZ3NbMTFdCisjZGVmaW5lIEFSTV9yMTAJCXVyZWdzWzEwXQorI2RlZmluZSBBUk1fcjkJCXVyZWdzWzldCisjZGVmaW5lIEFSTV9yOAkJdXJlZ3NbOF0KKyNkZWZpbmUgQVJNX3I3CQl1cmVnc1s3XQorI2RlZmluZSBBUk1fcjYJCXVyZWdzWzZdCisjZGVmaW5lIEFSTV9yNQkJdXJlZ3NbNV0KKyNkZWZpbmUgQVJNX3I0CQl1cmVnc1s0XQorI2RlZmluZSBBUk1fcjMJCXVyZWdzWzNdCisjZGVmaW5lIEFSTV9yMgkJdXJlZ3NbMl0KKyNkZWZpbmUgQVJNX3IxCQl1cmVnc1sxXQorI2RlZmluZSBBUk1fcjAJCXVyZWdzWzBdCisjZGVmaW5lIEFSTV9PUklHX3IwCXVyZWdzWzE3XQorCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vcmVzb3VyY2UuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vcmVzb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzRiNTgxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9yZXNvdXJjZS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfQVJNX1JFU09VUkNFX0gKKyNkZWZpbmUgX0FSTV9SRVNPVVJDRV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9yZXNvdXJjZS5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vc2VtYnVmLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL3NlbWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMDI4MzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL3NlbWJ1Zi5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX0FTTUFSTV9TRU1CVUZfSAorI2RlZmluZSBfQVNNQVJNX1NFTUJVRl9ICisKKy8qIAorICogVGhlIHNlbWlkNjRfZHMgc3RydWN0dXJlIGZvciBhcm0gYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDY0LWJpdCB0aW1lX3QgdG8gc29sdmUgeTIwMzggcHJvYmxlbQorICogLSAyIG1pc2NlbGxhbmVvdXMgMzItYml0IHZhbHVlcworICovCisKK3N0cnVjdCBzZW1pZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybSBzZW1fcGVybTsJCS8qIHBlcm1pc3Npb25zIC4uIHNlZSBpcGMuaCAqLworCV9fa2VybmVsX3RpbWVfdAlzZW1fb3RpbWU7CQkvKiBsYXN0IHNlbW9wIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMTsKKwlfX2tlcm5lbF90aW1lX3QJc2VtX2N0aW1lOwkJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworCXVuc2lnbmVkIGxvbmcJc2VtX25zZW1zOwkJLyogbm8uIG9mIHNlbWFwaG9yZXMgaW4gYXJyYXkgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMzsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkNDsKK307CisKKyNlbmRpZiAvKiBfQVNNQVJNX1NFTUJVRl9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL3NldHVwLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL3NldHVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk5ZDU4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vc2V0dXAuaApAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS9zZXR1cC5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5Ny0xOTk5IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFN0cnVjdHVyZSBwYXNzZWQgdG8ga2VybmVsIHRvIHRlbGwgaXQgYWJvdXQgdGhlCisgKiAgaGFyZHdhcmUgaXQncyBydW5uaW5nIG9uLiAgU2VlIERvY3VtZW50YXRpb24vYXJtL1NldHVwCisgKiAgZm9yIG1vcmUgaW5mby4KKyAqLworI2lmbmRlZiBfX0FTTUFSTV9TRVRVUF9ICisjZGVmaW5lIF9fQVNNQVJNX1NFVFVQX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUgMTAyNAorCisvKiBUaGUgbGlzdCBlbmRzIHdpdGggYW4gQVRBR19OT05FIG5vZGUuICovCisjZGVmaW5lIEFUQUdfTk9ORQkweDAwMDAwMDAwCisKK3N0cnVjdCB0YWdfaGVhZGVyIHsKKwlfX3UzMiBzaXplOworCV9fdTMyIHRhZzsKK307CisKKy8qIFRoZSBsaXN0IG11c3Qgc3RhcnQgd2l0aCBhbiBBVEFHX0NPUkUgbm9kZSAqLworI2RlZmluZSBBVEFHX0NPUkUJMHg1NDQxMDAwMQorCitzdHJ1Y3QgdGFnX2NvcmUgeworCV9fdTMyIGZsYWdzOwkJLyogYml0IDAgPSByZWFkLW9ubHkgKi8KKwlfX3UzMiBwYWdlc2l6ZTsKKwlfX3UzMiByb290ZGV2OworfTsKKworLyogaXQgaXMgYWxsb3dlZCB0byBoYXZlIG11bHRpcGxlIEFUQUdfTUVNIG5vZGVzICovCisjZGVmaW5lIEFUQUdfTUVNCTB4NTQ0MTAwMDIKKworc3RydWN0IHRhZ19tZW0zMiB7CisJX191MzIJc2l6ZTsKKwlfX3UzMglzdGFydDsJLyogcGh5c2ljYWwgc3RhcnQgYWRkcmVzcyAqLworfTsKKworLyogVkdBIHRleHQgdHlwZSBkaXNwbGF5cyAqLworI2RlZmluZSBBVEFHX1ZJREVPVEVYVAkweDU0NDEwMDAzCisKK3N0cnVjdCB0YWdfdmlkZW90ZXh0IHsKKwlfX3U4CQl4OworCV9fdTgJCXk7CisJX191MTYJCXZpZGVvX3BhZ2U7CisJX191OAkJdmlkZW9fbW9kZTsKKwlfX3U4CQl2aWRlb19jb2xzOworCV9fdTE2CQl2aWRlb19lZ2FfYng7CisJX191OAkJdmlkZW9fbGluZXM7CisJX191OAkJdmlkZW9faXN2Z2E7CisJX191MTYJCXZpZGVvX3BvaW50czsKK307CisKKy8qIGRlc2NyaWJlcyBob3cgdGhlIHJhbWRpc2sgd2lsbCBiZSB1c2VkIGluIGtlcm5lbCAqLworI2RlZmluZSBBVEFHX1JBTURJU0sJMHg1NDQxMDAwNAorCitzdHJ1Y3QgdGFnX3JhbWRpc2sgeworCV9fdTMyIGZsYWdzOwkvKiBiaXQgMCA9IGxvYWQsIGJpdCAxID0gcHJvbXB0ICovCisJX191MzIgc2l6ZTsJLyogZGVjb21wcmVzc2VkIHJhbWRpc2sgc2l6ZSBpbiBfa2lsb18gYnl0ZXMgKi8KKwlfX3UzMiBzdGFydDsJLyogc3RhcnRpbmcgYmxvY2sgb2YgZmxvcHB5LWJhc2VkIFJBTSBkaXNrIGltYWdlICovCit9OworCisvKiBkZXNjcmliZXMgd2hlcmUgdGhlIGNvbXByZXNzZWQgcmFtZGlzayBpbWFnZSBsaXZlcyAodmlydHVhbCBhZGRyZXNzKSAqLworLyoKKyAqIHRoaXMgb25lIGFjY2lkZW50YWxseSB1c2VkIHZpcnR1YWwgYWRkcmVzc2VzIC0gYXMgc3VjaCwKKyAqIGl0J3MgZGVwcmVjYXRlZC4KKyAqLworI2RlZmluZSBBVEFHX0lOSVRSRAkweDU0NDEwMDA1CisKKy8qIGRlc2NyaWJlcyB3aGVyZSB0aGUgY29tcHJlc3NlZCByYW1kaXNrIGltYWdlIGxpdmVzIChwaHlzaWNhbCBhZGRyZXNzKSAqLworI2RlZmluZSBBVEFHX0lOSVRSRDIJMHg1NDQyMDAwNQorCitzdHJ1Y3QgdGFnX2luaXRyZCB7CisJX191MzIgc3RhcnQ7CS8qIHBoeXNpY2FsIHN0YXJ0IGFkZHJlc3MgKi8KKwlfX3UzMiBzaXplOwkvKiBzaXplIG9mIGNvbXByZXNzZWQgcmFtZGlzayBpbWFnZSBpbiBieXRlcyAqLworfTsKKworLyogYm9hcmQgc2VyaWFsIG51bWJlci4gIjY0IGJpdHMgc2hvdWxkIGJlIGVub3VnaCBmb3IgZXZlcnlib2R5IiAqLworI2RlZmluZSBBVEFHX1NFUklBTAkweDU0NDEwMDA2CisKK3N0cnVjdCB0YWdfc2VyaWFsbnIgeworCV9fdTMyIGxvdzsKKwlfX3UzMiBoaWdoOworfTsKKworLyogYm9hcmQgcmV2aXNpb24gKi8KKyNkZWZpbmUgQVRBR19SRVZJU0lPTgkweDU0NDEwMDA3CisKK3N0cnVjdCB0YWdfcmV2aXNpb24geworCV9fdTMyIHJldjsKK307CisKKy8qIGluaXRpYWwgdmFsdWVzIGZvciB2ZXNhZmItdHlwZSBmcmFtZWJ1ZmZlcnMuIHNlZSBzdHJ1Y3Qgc2NyZWVuX2luZm8KKyAqIGluIGluY2x1ZGUvbGludXgvdHR5LmgKKyAqLworI2RlZmluZSBBVEFHX1ZJREVPTEZCCTB4NTQ0MTAwMDgKKworc3RydWN0IHRhZ192aWRlb2xmYiB7CisJX191MTYJCWxmYl93aWR0aDsKKwlfX3UxNgkJbGZiX2hlaWdodDsKKwlfX3UxNgkJbGZiX2RlcHRoOworCV9fdTE2CQlsZmJfbGluZWxlbmd0aDsKKwlfX3UzMgkJbGZiX2Jhc2U7CisJX191MzIJCWxmYl9zaXplOworCV9fdTgJCXJlZF9zaXplOworCV9fdTgJCXJlZF9wb3M7CisJX191OAkJZ3JlZW5fc2l6ZTsKKwlfX3U4CQlncmVlbl9wb3M7CisJX191OAkJYmx1ZV9zaXplOworCV9fdTgJCWJsdWVfcG9zOworCV9fdTgJCXJzdmRfc2l6ZTsKKwlfX3U4CQlyc3ZkX3BvczsKK307CisKKy8qIGNvbW1hbmQgbGluZTogXDAgdGVybWluYXRlZCBzdHJpbmcgKi8KKyNkZWZpbmUgQVRBR19DTURMSU5FCTB4NTQ0MTAwMDkKKworc3RydWN0IHRhZ19jbWRsaW5lIHsKKwljaGFyCWNtZGxpbmVbMV07CS8qIHRoaXMgaXMgdGhlIG1pbmltdW0gc2l6ZSAqLworfTsKKworLyogYWNvcm4gUmlzY1BDIHNwZWNpZmljIGluZm9ybWF0aW9uICovCisjZGVmaW5lIEFUQUdfQUNPUk4JMHg0MTAwMDEwMQorCitzdHJ1Y3QgdGFnX2Fjb3JuIHsKKwlfX3UzMiBtZW1jX2NvbnRyb2xfcmVnOworCV9fdTMyIHZyYW1fcGFnZXM7CisJX191OCBzb3VuZGRlZmF1bHQ7CisJX191OCBhZGZzZHJpdmVzOworfTsKKworLyogZm9vdGJyaWRnZSBtZW1vcnkgY2xvY2ssIHNlZSBhcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvYXJjaC5jICovCisjZGVmaW5lIEFUQUdfTUVNQ0xLCTB4NDEwMDA0MDIKKworc3RydWN0IHRhZ19tZW1jbGsgeworCV9fdTMyIGZtZW1jbGs7Cit9OworCitzdHJ1Y3QgdGFnIHsKKwlzdHJ1Y3QgdGFnX2hlYWRlciBoZHI7CisJdW5pb24geworCQlzdHJ1Y3QgdGFnX2NvcmUJCWNvcmU7CisJCXN0cnVjdCB0YWdfbWVtMzIJbWVtOworCQlzdHJ1Y3QgdGFnX3ZpZGVvdGV4dAl2aWRlb3RleHQ7CisJCXN0cnVjdCB0YWdfcmFtZGlzawlyYW1kaXNrOworCQlzdHJ1Y3QgdGFnX2luaXRyZAlpbml0cmQ7CisJCXN0cnVjdCB0YWdfc2VyaWFsbnIJc2VyaWFsbnI7CisJCXN0cnVjdCB0YWdfcmV2aXNpb24JcmV2aXNpb247CisJCXN0cnVjdCB0YWdfdmlkZW9sZmIJdmlkZW9sZmI7CisJCXN0cnVjdCB0YWdfY21kbGluZQljbWRsaW5lOworCisJCS8qCisJCSAqIEFjb3JuIHNwZWNpZmljCisJCSAqLworCQlzdHJ1Y3QgdGFnX2Fjb3JuCWFjb3JuOworCisJCS8qCisJCSAqIERDMjEyODUgc3BlY2lmaWMKKwkJICovCisJCXN0cnVjdCB0YWdfbWVtY2xrCW1lbWNsazsKKwl9IHU7Cit9OworCitzdHJ1Y3QgdGFndGFibGUgeworCV9fdTMyIHRhZzsKKwlpbnQgKCpwYXJzZSkoY29uc3Qgc3RydWN0IHRhZyAqKTsKK307CisKKyNkZWZpbmUgdGFnX21lbWJlcl9wcmVzZW50KHRhZyxtZW1iZXIpCQkJCVwKKwkoKHVuc2lnbmVkIGxvbmcpKCYoKHN0cnVjdCB0YWcgKikwTCktPm1lbWJlciArIDEpCVwKKwkJPD0gKHRhZyktPmhkci5zaXplICogNCkKKworI2RlZmluZSB0YWdfbmV4dCh0KQkoKHN0cnVjdCB0YWcgKikoKF9fdTMyICopKHQpICsgKHQpLT5oZHIuc2l6ZSkpCisjZGVmaW5lIHRhZ19zaXplKHR5cGUpCSgoc2l6ZW9mKHN0cnVjdCB0YWdfaGVhZGVyKSArIHNpemVvZihzdHJ1Y3QgdHlwZSkpID4+IDIpCisKKyNkZWZpbmUgZm9yX2VhY2hfdGFnKHQsYmFzZSkJCVwKKwlmb3IgKHQgPSBiYXNlOyB0LT5oZHIuc2l6ZTsgdCA9IHRhZ19uZXh0KHQpKQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9zaG1idWYuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vc2htYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU1YzY3YgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vc2htYnVmLmgKQEAgLTAsMCArMSw0MiBAQAorI2lmbmRlZiBfQVNNQVJNX1NITUJVRl9ICisjZGVmaW5lIF9BU01BUk1fU0hNQlVGX0gKKworLyogCisgKiBUaGUgc2htaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIGFybSBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gNjQtYml0IHRpbWVfdCB0byBzb2x2ZSB5MjAzOCBwcm9ibGVtCisgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IHNobWlkNjRfZHMgeworCXN0cnVjdCBpcGM2NF9wZXJtCXNobV9wZXJtOwkvKiBvcGVyYXRpb24gcGVybXMgKi8KKwlzaXplX3QJCQlzaG1fc2Vnc3o7CS8qIHNpemUgb2Ygc2VnbWVudCAoYnl0ZXMpICovCisJX19rZXJuZWxfdGltZV90CQlzaG1fYXRpbWU7CS8qIGxhc3QgYXR0YWNoIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDE7CisJX19rZXJuZWxfdGltZV90CQlzaG1fZHRpbWU7CS8qIGxhc3QgZGV0YWNoIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDI7CisJX19rZXJuZWxfdGltZV90CQlzaG1fY3RpbWU7CS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDM7CisJX19rZXJuZWxfcGlkX3QJCXNobV9jcGlkOwkvKiBwaWQgb2YgY3JlYXRvciAqLworCV9fa2VybmVsX3BpZF90CQlzaG1fbHBpZDsJLyogcGlkIG9mIGxhc3Qgb3BlcmF0b3IgKi8KKwl1bnNpZ25lZCBsb25nCQlzaG1fbmF0dGNoOwkvKiBuby4gb2YgY3VycmVudCBhdHRhY2hlcyAqLworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkNDsKKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDU7Cit9OworCitzdHJ1Y3Qgc2htaW5mbzY0IHsKKwl1bnNpZ25lZCBsb25nCXNobW1heDsKKwl1bnNpZ25lZCBsb25nCXNobW1pbjsKKwl1bnNpZ25lZCBsb25nCXNobW1uaTsKKwl1bnNpZ25lZCBsb25nCXNobXNlZzsKKwl1bnNpZ25lZCBsb25nCXNobWFsbDsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMTsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMzsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkNDsKK307CisKKyNlbmRpZiAvKiBfQVNNQVJNX1NITUJVRl9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMGI4MGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaApAQCAtMCwwICsxLDM0IEBACisjaWZuZGVmIF9BU01BUk1fU0lHQ09OVEVYVF9ICisjZGVmaW5lIF9BU01BUk1fU0lHQ09OVEVYVF9ICisKKy8qCisgKiBTaWduYWwgY29udGV4dCBzdHJ1Y3R1cmUgLSBjb250YWlucyBhbGwgaW5mbyB0byBkbyB3aXRoIHRoZSBzdGF0ZQorICogYmVmb3JlIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgaW52b2tlZC4gIE5vdGU6IG9ubHkgYWRkIG5ldyBlbnRyaWVzCisgKiB0byB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBzaWdjb250ZXh0IHsKKwl1bnNpZ25lZCBsb25nIHRyYXBfbm87CisJdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlOworCXVuc2lnbmVkIGxvbmcgb2xkbWFzazsKKwl1bnNpZ25lZCBsb25nIGFybV9yMDsKKwl1bnNpZ25lZCBsb25nIGFybV9yMTsKKwl1bnNpZ25lZCBsb25nIGFybV9yMjsKKwl1bnNpZ25lZCBsb25nIGFybV9yMzsKKwl1bnNpZ25lZCBsb25nIGFybV9yNDsKKwl1bnNpZ25lZCBsb25nIGFybV9yNTsKKwl1bnNpZ25lZCBsb25nIGFybV9yNjsKKwl1bnNpZ25lZCBsb25nIGFybV9yNzsKKwl1bnNpZ25lZCBsb25nIGFybV9yODsKKwl1bnNpZ25lZCBsb25nIGFybV9yOTsKKwl1bnNpZ25lZCBsb25nIGFybV9yMTA7CisJdW5zaWduZWQgbG9uZyBhcm1fZnA7CisJdW5zaWduZWQgbG9uZyBhcm1faXA7CisJdW5zaWduZWQgbG9uZyBhcm1fc3A7CisJdW5zaWduZWQgbG9uZyBhcm1fbHI7CisJdW5zaWduZWQgbG9uZyBhcm1fcGM7CisJdW5zaWduZWQgbG9uZyBhcm1fY3BzcjsKKwl1bnNpZ25lZCBsb25nIGZhdWx0X2FkZHJlc3M7Cit9OworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9zaWdpbmZvLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL3NpZ2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTIxODUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9zaWdpbmZvLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9BU01BUk1fU0lHSU5GT19ICisjZGVmaW5lIF9BU01BUk1fU0lHSU5GT19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWdpbmZvLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9zaWduYWwuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vc2lnbmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NlNjYyZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vc2lnbmFsLmgKQEAgLTAsMCArMSwxMjMgQEAKKyNpZm5kZWYgX0FTTUFSTV9TSUdOQUxfSAorI2RlZmluZSBfQVNNQVJNX1NJR05BTF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBBdm9pZCB0b28gbWFueSBoZWFkZXIgb3JkZXJpbmcgcHJvYmxlbXMuICAqLworc3RydWN0IHNpZ2luZm87CisKKy8qIEhlcmUgd2UgbXVzdCBjYXRlciB0byBsaWJjcyB0aGF0IHBva2UgYWJvdXQgaW4ga2VybmVsIGhlYWRlcnMuICAqLworCisjZGVmaW5lIE5TSUcJCTMyCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgc2lnc2V0X3Q7CisKKworI2RlZmluZSBTSUdIVVAJCSAxCisjZGVmaW5lIFNJR0lOVAkJIDIKKyNkZWZpbmUgU0lHUVVJVAkJIDMKKyNkZWZpbmUgU0lHSUxMCQkgNAorI2RlZmluZSBTSUdUUkFQCQkgNQorI2RlZmluZSBTSUdBQlJUCQkgNgorI2RlZmluZSBTSUdJT1QJCSA2CisjZGVmaW5lIFNJR0JVUwkJIDcKKyNkZWZpbmUgU0lHRlBFCQkgOAorI2RlZmluZSBTSUdLSUxMCQkgOQorI2RlZmluZSBTSUdVU1IxCQkxMAorI2RlZmluZSBTSUdTRUdWCQkxMQorI2RlZmluZSBTSUdVU1IyCQkxMgorI2RlZmluZSBTSUdQSVBFCQkxMworI2RlZmluZSBTSUdBTFJNCQkxNAorI2RlZmluZSBTSUdURVJNCQkxNQorI2RlZmluZSBTSUdTVEtGTFQJMTYKKyNkZWZpbmUgU0lHQ0hMRAkJMTcKKyNkZWZpbmUgU0lHQ09OVAkJMTgKKyNkZWZpbmUgU0lHU1RPUAkJMTkKKyNkZWZpbmUgU0lHVFNUUAkJMjAKKyNkZWZpbmUgU0lHVFRJTgkJMjEKKyNkZWZpbmUgU0lHVFRPVQkJMjIKKyNkZWZpbmUgU0lHVVJHCQkyMworI2RlZmluZSBTSUdYQ1BVCQkyNAorI2RlZmluZSBTSUdYRlNaCQkyNQorI2RlZmluZSBTSUdWVEFMUk0JMjYKKyNkZWZpbmUgU0lHUFJPRgkJMjcKKyNkZWZpbmUgU0lHV0lOQ0gJMjgKKyNkZWZpbmUgU0lHSU8JCTI5CisjZGVmaW5lIFNJR1BPTEwJCVNJR0lPCisvKgorI2RlZmluZSBTSUdMT1NUCQkyOQorKi8KKyNkZWZpbmUgU0lHUFdSCQkzMAorI2RlZmluZSBTSUdTWVMJCTMxCisjZGVmaW5lCVNJR1VOVVNFRAkzMQorCisvKiBUaGVzZSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgY29uc3RhbnRzIGZyb20gdXNlcmxhbmQuICAqLworI2RlZmluZSBTSUdSVE1JTgkzMgorI2RlZmluZSBTSUdSVE1BWAlfTlNJRworCisjZGVmaW5lIFNJR1NXSQkJMzIKKworLyoKKyAqIFNBX0ZMQUdTIHZhbHVlczoKKyAqCisgKiBTQV9OT0NMRFNUT1AJCWZsYWcgdG8gdHVybiBvZmYgU0lHQ0hMRCB3aGVuIGNoaWxkcmVuIHN0b3AuCisgKiBTQV9OT0NMRFdBSVQJCWZsYWcgb24gU0lHQ0hMRCB0byBpbmhpYml0IHpvbWJpZXMuCisgKiBTQV9TSUdJTkZPCQlkZWxpdmVyIHRoZSBzaWduYWwgd2l0aCBTSUdJTkZPIHN0cnVjdHMKKyAqIFNBX1RISVJUWVRXTwkJZGVsaXZlcnMgdGhlIHNpZ25hbCBpbiAzMi1iaXQgbW9kZSwgZXZlbiBpZiB0aGUgdGFzayAKKyAqCQkJaXMgcnVubmluZyBpbiAyNi1iaXQuCisgKiBTQV9PTlNUQUNLCQlhbGxvd3MgYWx0ZXJuYXRlIHNpZ25hbCBzdGFja3MgKHNlZSBzaWdhbHRzdGFjaygyKSkuCisgKiBTQV9SRVNUQVJUCQlmbGFnIHRvIGdldCByZXN0YXJ0aW5nIHNpZ25hbHMgKHdoaWNoIHdlcmUgdGhlIGRlZmF1bHQgbG9uZyBhZ28pCisgKiBTQV9OT0RFRkVSCQlwcmV2ZW50cyB0aGUgY3VycmVudCBzaWduYWwgZnJvbSBiZWluZyBtYXNrZWQgaW4gdGhlIGhhbmRsZXIuCisgKiBTQV9SRVNFVEhBTkQJCWNsZWFycyB0aGUgaGFuZGxlciB3aGVuIHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkLgorICoKKyAqIFNBX09ORVNIT1QgYW5kIFNBX05PTUFTSyBhcmUgdGhlIGhpc3RvcmljYWwgTGludXggbmFtZXMgZm9yIHRoZSBTaW5nbGUKKyAqIFVuaXggbmFtZXMgUkVTRVRIQU5EIGFuZCBOT0RFRkVSIHJlc3BlY3RpdmVseS4KKyAqLworI2RlZmluZSBTQV9OT0NMRFNUT1AJMHgwMDAwMDAwMQorI2RlZmluZSBTQV9OT0NMRFdBSVQJMHgwMDAwMDAwMgorI2RlZmluZSBTQV9TSUdJTkZPCTB4MDAwMDAwMDQKKyNkZWZpbmUgU0FfVEhJUlRZVFdPCTB4MDIwMDAwMDAKKyNkZWZpbmUgU0FfUkVTVE9SRVIJMHgwNDAwMDAwMAorI2RlZmluZSBTQV9PTlNUQUNLCTB4MDgwMDAwMDAKKyNkZWZpbmUgU0FfUkVTVEFSVAkweDEwMDAwMDAwCisjZGVmaW5lIFNBX05PREVGRVIJMHg0MDAwMDAwMAorI2RlZmluZSBTQV9SRVNFVEhBTkQJMHg4MDAwMDAwMAorCisjZGVmaW5lIFNBX05PTUFTSwlTQV9OT0RFRkVSCisjZGVmaW5lIFNBX09ORVNIT1QJU0FfUkVTRVRIQU5ECisKKworLyogCisgKiBzaWdhbHRzdGFjayBjb250cm9scworICovCisjZGVmaW5lIFNTX09OU1RBQ0sJMQorI2RlZmluZSBTU19ESVNBQkxFCTIKKworI2RlZmluZSBNSU5TSUdTVEtTWgkyMDQ4CisjZGVmaW5lIFNJR1NUS1NaCTgxOTIKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ25hbC1kZWZzLmg+CisKKy8qIEhlcmUgd2UgbXVzdCBjYXRlciB0byBsaWJjcyB0aGF0IHBva2UgYWJvdXQgaW4ga2VybmVsIGhlYWRlcnMuICAqLworCitzdHJ1Y3Qgc2lnYWN0aW9uIHsKKwl1bmlvbiB7CisJICBfX3NpZ2hhbmRsZXJfdCBfc2FfaGFuZGxlcjsKKwkgIHZvaWQgKCpfc2Ffc2lnYWN0aW9uKShpbnQsIHN0cnVjdCBzaWdpbmZvICosIHZvaWQgKik7CisJfSBfdTsKKwlzaWdzZXRfdCBzYV9tYXNrOworCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7CisJdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKK307CisKKyNkZWZpbmUgc2FfaGFuZGxlcglfdS5fc2FfaGFuZGxlcgorI2RlZmluZSBzYV9zaWdhY3Rpb24JX3UuX3NhX3NpZ2FjdGlvbgorCisKK3R5cGVkZWYgc3RydWN0IHNpZ2FsdHN0YWNrIHsKKwl2b2lkICpzc19zcDsKKwlpbnQgc3NfZmxhZ3M7CisJc2l6ZV90IHNzX3NpemU7Cit9IHN0YWNrX3Q7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9zb2NrZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGZmZDA0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtMCwwICsxLDY1IEBACisjaWZuZGVmIF9BU01BUk1fU09DS0VUX0gKKyNkZWZpbmUgX0FTTUFSTV9TT0NLRVRfSAorCisjaW5jbHVkZSA8YXNtL3NvY2tpb3MuaD4KKworLyogRm9yIHNldHNvY2tvcHQoMikgKi8KKyNkZWZpbmUgU09MX1NPQ0tFVAkxCisKKyNkZWZpbmUgU09fREVCVUcJMQorI2RlZmluZSBTT19SRVVTRUFERFIJMgorI2RlZmluZSBTT19UWVBFCQkzCisjZGVmaW5lIFNPX0VSUk9SCTQKKyNkZWZpbmUgU09fRE9OVFJPVVRFCTUKKyNkZWZpbmUgU09fQlJPQURDQVNUCTYKKyNkZWZpbmUgU09fU05EQlVGCTcKKyNkZWZpbmUgU09fUkNWQlVGCTgKKyNkZWZpbmUgU09fU05EQlVGRk9SQ0UJMzIKKyNkZWZpbmUgU09fUkNWQlVGRk9SQ0UJMzMKKyNkZWZpbmUgU09fS0VFUEFMSVZFCTkKKyNkZWZpbmUgU09fT09CSU5MSU5FCTEwCisjZGVmaW5lIFNPX05PX0NIRUNLCTExCisjZGVmaW5lIFNPX1BSSU9SSVRZCTEyCisjZGVmaW5lIFNPX0xJTkdFUgkxMworI2RlZmluZSBTT19CU0RDT01QQVQJMTQKKy8qIFRvIGFkZCA6I2RlZmluZSBTT19SRVVTRVBPUlQgMTUgKi8KKyNkZWZpbmUgU09fUEFTU0NSRUQJMTYKKyNkZWZpbmUgU09fUEVFUkNSRUQJMTcKKyNkZWZpbmUgU09fUkNWTE9XQVQJMTgKKyNkZWZpbmUgU09fU05ETE9XQVQJMTkKKyNkZWZpbmUgU09fUkNWVElNRU8JMjAKKyNkZWZpbmUgU09fU05EVElNRU8JMjEKKworLyogU2VjdXJpdHkgbGV2ZWxzIC0gYXMgcGVyIE5STCBJUHY2IC0gZG9uJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgKi8KKyNkZWZpbmUgU09fU0VDVVJJVFlfQVVUSEVOVElDQVRJT04JCTIyCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fVFJBTlNQT1JUCTIzCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fTkVUV09SSwkJMjQKKworI2RlZmluZSBTT19CSU5EVE9ERVZJQ0UgMjUKKworLyogU29ja2V0IGZpbHRlcmluZyAqLworI2RlZmluZSBTT19BVFRBQ0hfRklMVEVSICAgICAgICAyNgorI2RlZmluZSBTT19ERVRBQ0hfRklMVEVSICAgICAgICAyNworCisjZGVmaW5lIFNPX1BFRVJOQU1FICAgICAgICAgICAgIDI4CisjZGVmaW5lIFNPX1RJTUVTVEFNUAkJMjkKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUAkJU09fVElNRVNUQU1QCisKKyNkZWZpbmUgU09fQUNDRVBUQ09OTgkJMzAKKworI2RlZmluZSBTT19QRUVSU0VDCQkzMQorI2RlZmluZSBTT19QQVNTU0VDCQkzNAorI2RlZmluZSBTT19USU1FU1RBTVBOUwkJMzUKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUE5TCQlTT19USU1FU1RBTVBOUworCisjZGVmaW5lIFNPX01BUksJCQkzNgorCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKworI2RlZmluZSBTT19QUk9UT0NPTAkJMzgKKyNkZWZpbmUgU09fRE9NQUlOCQkzOQorCisjZGVmaW5lIFNPX1JYUV9PVkZMICAgICAgICAgICAgIDQwCisKKyNlbmRpZiAvKiBfQVNNX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL3NvY2tpb3MuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vc29ja2lvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNTg4YTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL3NvY2tpb3MuaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIF9fQVJDSF9BUk1fU09DS0lPU19ICisjZGVmaW5lIF9fQVJDSF9BUk1fU09DS0lPU19ICisKKy8qIFNvY2tldC1sZXZlbCBJL08gY29udHJvbCBjYWxscy4gKi8KKyNkZWZpbmUgRklPU0VUT1dOIAkweDg5MDEKKyNkZWZpbmUgU0lPQ1NQR1JQCTB4ODkwMgorI2RlZmluZSBGSU9HRVRPV04JMHg4OTAzCisjZGVmaW5lIFNJT0NHUEdSUAkweDg5MDQKKyNkZWZpbmUgU0lPQ0FUTUFSSwkweDg5MDUKKyNkZWZpbmUgU0lPQ0dTVEFNUAkweDg5MDYJCS8qIEdldCBzdGFtcCAodGltZXZhbCkgKi8KKyNkZWZpbmUgU0lPQ0dTVEFNUE5TCTB4ODkwNwkJLyogR2V0IHN0YW1wICh0aW1lc3BlYykgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL3N0YXQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vc3RhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYzBjMTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL3N0YXQuaApAQCAtMCwwICsxLDg3IEBACisjaWZuZGVmIF9BU01BUk1fU1RBVF9ICisjZGVmaW5lIF9BU01BUk1fU1RBVF9ICisKK3N0cnVjdCBfX29sZF9rZXJuZWxfc3RhdCB7CisJdW5zaWduZWQgc2hvcnQgc3RfZGV2OworCXVuc2lnbmVkIHNob3J0IHN0X2lubzsKKwl1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOworCXVuc2lnbmVkIHNob3J0IHN0X25saW5rOworCXVuc2lnbmVkIHNob3J0IHN0X3VpZDsKKwl1bnNpZ25lZCBzaG9ydCBzdF9naWQ7CisJdW5zaWduZWQgc2hvcnQgc3RfcmRldjsKKwl1bnNpZ25lZCBsb25nICBzdF9zaXplOworCXVuc2lnbmVkIGxvbmcgIHN0X2F0aW1lOworCXVuc2lnbmVkIGxvbmcgIHN0X210aW1lOworCXVuc2lnbmVkIGxvbmcgIHN0X2N0aW1lOworfTsKKworI2RlZmluZSBTVEFUX0hBVkVfTlNFQyAKKworc3RydWN0IHN0YXQgeworI2lmIGRlZmluZWQoX19BUk1FQl9fKQorCXVuc2lnbmVkIHNob3J0IHN0X2RldjsKKwl1bnNpZ25lZCBzaG9ydCBfX3BhZDE7CisjZWxzZQorCXVuc2lnbmVkIGxvbmcgIHN0X2RldjsKKyNlbmRpZgorCXVuc2lnbmVkIGxvbmcgIHN0X2lubzsKKwl1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOworCXVuc2lnbmVkIHNob3J0IHN0X25saW5rOworCXVuc2lnbmVkIHNob3J0IHN0X3VpZDsKKwl1bnNpZ25lZCBzaG9ydCBzdF9naWQ7CisjaWYgZGVmaW5lZChfX0FSTUVCX18pCisJdW5zaWduZWQgc2hvcnQgc3RfcmRldjsKKwl1bnNpZ25lZCBzaG9ydCBfX3BhZDI7CisjZWxzZQorCXVuc2lnbmVkIGxvbmcgIHN0X3JkZXY7CisjZW5kaWYKKwl1bnNpZ25lZCBsb25nICBzdF9zaXplOworCXVuc2lnbmVkIGxvbmcgIHN0X2Jsa3NpemU7CisJdW5zaWduZWQgbG9uZyAgc3RfYmxvY2tzOworCXVuc2lnbmVkIGxvbmcgIHN0X2F0aW1lOworCXVuc2lnbmVkIGxvbmcgIHN0X2F0aW1lX25zZWM7CisJdW5zaWduZWQgbG9uZyAgc3RfbXRpbWU7CisJdW5zaWduZWQgbG9uZyAgc3RfbXRpbWVfbnNlYzsKKwl1bnNpZ25lZCBsb25nICBzdF9jdGltZTsKKwl1bnNpZ25lZCBsb25nICBzdF9jdGltZV9uc2VjOworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNDsKKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDU7Cit9OworCisvKiBUaGlzIG1hdGNoZXMgc3RydWN0IHN0YXQ2NCBpbiBnbGliYzIuMSwgaGVuY2UgdGhlIGFic29sdXRlbHkKKyAqIGluc2FuZSBhbW91bnRzIG9mIHBhZGRpbmcgYXJvdW5kIGRldl90J3MuCisgKiBOb3RlOiBUaGUga2VybmVsIHplcm8ncyB0aGUgcGFkZGVkIHJlZ2lvbiBiZWNhdXNlIGdsaWJjIG1pZ2h0IHJlYWQgdGhlbQorICogaW4gdGhlIGhvcGUgdGhhdCB0aGUga2VybmVsIGhhcyBzdHJldGNoZWQgdG8gdXNpbmcgbGFyZ2VyIHNpemVzLgorICovCitzdHJ1Y3Qgc3RhdDY0IHsKKwl1bnNpZ25lZCBsb25nIGxvbmcJc3RfZGV2OworCXVuc2lnbmVkIGNoYXIgICBfX3BhZDBbNF07CisKKyNkZWZpbmUgU1RBVDY0X0hBU19CUk9LRU5fU1RfSU5PCTEKKwl1bnNpZ25lZCBsb25nCV9fc3RfaW5vOworCXVuc2lnbmVkIGludAlzdF9tb2RlOworCXVuc2lnbmVkIGludAlzdF9ubGluazsKKworCXVuc2lnbmVkIGxvbmcJc3RfdWlkOworCXVuc2lnbmVkIGxvbmcJc3RfZ2lkOworCisJdW5zaWduZWQgbG9uZyBsb25nCXN0X3JkZXY7CisJdW5zaWduZWQgY2hhciAgIF9fcGFkM1s0XTsKKworCWxvbmcgbG9uZwlzdF9zaXplOworCXVuc2lnbmVkIGxvbmcJc3RfYmxrc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3RfYmxvY2tzOwkvKiBOdW1iZXIgNTEyLWJ5dGUgYmxvY2tzIGFsbG9jYXRlZC4gKi8KKworCXVuc2lnbmVkIGxvbmcJc3RfYXRpbWU7CisJdW5zaWduZWQgbG9uZwlzdF9hdGltZV9uc2VjOworCisJdW5zaWduZWQgbG9uZwlzdF9tdGltZTsKKwl1bnNpZ25lZCBsb25nCXN0X210aW1lX25zZWM7CisKKwl1bnNpZ25lZCBsb25nCXN0X2N0aW1lOworCXVuc2lnbmVkIGxvbmcJc3RfY3RpbWVfbnNlYzsKKworCXVuc2lnbmVkIGxvbmcgbG9uZwlzdF9pbm87Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vc3RhdGZzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL3N0YXRmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OTQ0N2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL3N0YXRmcy5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX0FTTUFSTV9TVEFURlNfSAorI2RlZmluZSBfQVNNQVJNX1NUQVRGU19ICisKKy8qCisgKiBXaXRoIEVBQkkgdGhlcmUgaXMgNCBieXRlcyBvZiBwYWRkaW5nIGFkZGVkIHRvIHRoaXMgc3RydWN0dXJlLgorICogTGV0J3MgcGFjayBpdCBzbyB0aGUgcGFkZGluZyBnb2VzIGF3YXkgdG8gc2ltcGxpZnkgZHVhbCBBQkkgc3VwcG9ydC4KKyAqIE5vdGUgdGhhdCB1c2VyIHNwYWNlIGRvZXMgTk9UIGhhdmUgdG8gcGFjayB0aGlzIHN0cnVjdHVyZS4KKyAqLworI2RlZmluZSBBUkNIX1BBQ0tfU1RBVEZTNjQgX19hdHRyaWJ1dGVfXygocGFja2VkLGFsaWduZWQoNCkpKQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc3RhdGZzLmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS9zd2FiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU1MmIzYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vc3dhYi5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiAgYXJjaC9hcm0vaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgKKyAqCisgKiBBUk0gRW5kaWFuLW5lc3MuICBJbiBsaXR0bGUgZW5kaWFuIG1vZGUsIHRoZSBkYXRhIGJ1cyBpcyBjb25uZWN0ZWQgc3VjaAorICogdGhhdCBieXRlIGFjY2Vzc2VzIGFwcGVhciBhczoKKyAqICAwID0gZDAuLi5kNywgMSA9IGQ4Li4uZDE1LCAyID0gZDE2Li4uZDIzLCAzID0gZDI0Li4uZDMxCisgKiBhbmQgd29yZCBhY2Nlc3NlcyAoZGF0YSBvciBpbnN0cnVjdGlvbikgYXBwZWFyIGFzOgorICogIGQwLi4uZDMxCisgKgorICogV2hlbiBpbiBiaWcgZW5kaWFuIG1vZGUsIGJ5dGUgYWNjZXNzZXMgYXBwZWFyIGFzOgorICogIDAgPSBkMjQuLi5kMzEsIDEgPSBkMTYuLi5kMjMsIDIgPSBkOC4uLmQxNSwgMyA9IGQwLi4uZDcKKyAqIGFuZCB3b3JkIGFjY2Vzc2VzIChkYXRhIG9yIGluc3RydWN0aW9uKSBhcHBlYXIgYXM6CisgKiAgZDAuLi5kMzEKKyAqLworI2lmbmRlZiBfX0FTTV9BUk1fU1dBQl9ICisjZGVmaW5lIF9fQVNNX0FSTV9TV0FCX0gKKworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2lmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQorIyAgZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KKyNlbmRpZgorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fdTMyIF9fYXJjaF9zd2FiMzIoX191MzIgeCkKK3sKKwlfX3UzMiB0OworCisjaWZuZGVmIF9fdGh1bWJfXworCWlmICghX19idWlsdGluX2NvbnN0YW50X3AoeCkpIHsKKwkJLyoKKwkJICogVGhlIGNvbXBpbGVyIG5lZWRzIGEgYml0IG9mIGEgaGludCBoZXJlIHRvIGFsd2F5cyBkbyB0aGUKKwkJICogcmlnaHQgdGhpbmcgYW5kIG5vdCBzY3JldyBpdCB1cCB0byBkaWZmZXJlbnQgZGVncmVlcworCQkgKiBkZXBlbmRpbmcgb24gdGhlIGdjYyB2ZXJzaW9uLgorCQkgKi8KKwkJX19hc21fXyAoImVvclx0JTAsICUxLCAlMSwgcm9yICMxNiIgOiAiPXIiICh0KSA6ICJyIiAoeCkpOworCX0gZWxzZQorI2VuZGlmCisJCXQgPSB4IF4gKCh4IDw8IDE2KSB8ICh4ID4+IDE2KSk7IC8qIGVvciByMSxyMCxyMCxyb3IgIzE2ICovCisKKwl4ID0gKHggPDwgMjQpIHwgKHggPj4gOCk7CQkvKiBtb3YgcjAscjAscm9yICM4ICAgICAgKi8KKwl0ICY9IH4weDAwRkYwMDAwOwkJCS8qIGJpYyByMSxyMSwjMHgwMEZGMDAwMCAqLworCXggXj0gKHQgPj4gOCk7CQkJCS8qIGVvciByMCxyMCxyMSxsc3IgIzggICAqLworCisJcmV0dXJuIHg7Cit9CisjZGVmaW5lIF9fYXJjaF9zd2FiMzIgX19hcmNoX3N3YWIzMgorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS90ZXJtYml0cy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNDEzNWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmgKQEAgLTAsMCArMSwxOTggQEAKKyNpZm5kZWYgX19BU01fQVJNX1RFUk1CSVRTX0gKKyNkZWZpbmUgX19BU01fQVJNX1RFUk1CSVRTX0gKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyCWNjX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlzcGVlZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJdGNmbGFnX3Q7CisKKyNkZWZpbmUgTkNDUyAxOQorc3RydWN0IHRlcm1pb3MgeworCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCisJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCit9OworCitzdHJ1Y3QgdGVybWlvczIgeworCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCisJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCisJc3BlZWRfdCBjX2lzcGVlZDsJCS8qIGlucHV0IHNwZWVkICovCisJc3BlZWRfdCBjX29zcGVlZDsJCS8qIG91dHB1dCBzcGVlZCAqLworfTsKKworc3RydWN0IGt0ZXJtaW9zIHsKKwl0Y2ZsYWdfdCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLworCWNjX3QgY19saW5lOwkJCS8qIGxpbmUgZGlzY2lwbGluZSAqLworCWNjX3QgY19jY1tOQ0NTXTsJCS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLworCXNwZWVkX3QgY19pc3BlZWQ7CQkvKiBpbnB1dCBzcGVlZCAqLworCXNwZWVkX3QgY19vc3BlZWQ7CQkvKiBvdXRwdXQgc3BlZWQgKi8KK307CisKKworLyogY19jYyBjaGFyYWN0ZXJzICovCisjZGVmaW5lIFZJTlRSIDAKKyNkZWZpbmUgVlFVSVQgMQorI2RlZmluZSBWRVJBU0UgMgorI2RlZmluZSBWS0lMTCAzCisjZGVmaW5lIFZFT0YgNAorI2RlZmluZSBWVElNRSA1CisjZGVmaW5lIFZNSU4gNgorI2RlZmluZSBWU1dUQyA3CisjZGVmaW5lIFZTVEFSVCA4CisjZGVmaW5lIFZTVE9QIDkKKyNkZWZpbmUgVlNVU1AgMTAKKyNkZWZpbmUgVkVPTCAxMQorI2RlZmluZSBWUkVQUklOVCAxMgorI2RlZmluZSBWRElTQ0FSRCAxMworI2RlZmluZSBWV0VSQVNFIDE0CisjZGVmaW5lIFZMTkVYVCAxNQorI2RlZmluZSBWRU9MMiAxNgorCisvKiBjX2lmbGFnIGJpdHMgKi8KKyNkZWZpbmUgSUdOQlJLCTAwMDAwMDEKKyNkZWZpbmUgQlJLSU5UCTAwMDAwMDIKKyNkZWZpbmUgSUdOUEFSCTAwMDAwMDQKKyNkZWZpbmUgUEFSTVJLCTAwMDAwMTAKKyNkZWZpbmUgSU5QQ0sJMDAwMDAyMAorI2RlZmluZSBJU1RSSVAJMDAwMDA0MAorI2RlZmluZSBJTkxDUgkwMDAwMTAwCisjZGVmaW5lIElHTkNSCTAwMDAyMDAKKyNkZWZpbmUgSUNSTkwJMDAwMDQwMAorI2RlZmluZSBJVUNMQwkwMDAxMDAwCisjZGVmaW5lIElYT04JMDAwMjAwMAorI2RlZmluZSBJWEFOWQkwMDA0MDAwCisjZGVmaW5lIElYT0ZGCTAwMTAwMDAKKyNkZWZpbmUgSU1BWEJFTAkwMDIwMDAwCisjZGVmaW5lIElVVEY4CTAwNDAwMDAKKworLyogY19vZmxhZyBiaXRzICovCisjZGVmaW5lIE9QT1NUCTAwMDAwMDEKKyNkZWZpbmUgT0xDVUMJMDAwMDAwMgorI2RlZmluZSBPTkxDUgkwMDAwMDA0CisjZGVmaW5lIE9DUk5MCTAwMDAwMTAKKyNkZWZpbmUgT05PQ1IJMDAwMDAyMAorI2RlZmluZSBPTkxSRVQJMDAwMDA0MAorI2RlZmluZSBPRklMTAkwMDAwMTAwCisjZGVmaW5lIE9GREVMCTAwMDAyMDAKKyNkZWZpbmUgTkxETFkJMDAwMDQwMAorI2RlZmluZSAgIE5MMAkwMDAwMDAwCisjZGVmaW5lICAgTkwxCTAwMDA0MDAKKyNkZWZpbmUgQ1JETFkJMDAwMzAwMAorI2RlZmluZSAgIENSMAkwMDAwMDAwCisjZGVmaW5lICAgQ1IxCTAwMDEwMDAKKyNkZWZpbmUgICBDUjIJMDAwMjAwMAorI2RlZmluZSAgIENSMwkwMDAzMDAwCisjZGVmaW5lIFRBQkRMWQkwMDE0MDAwCisjZGVmaW5lICAgVEFCMAkwMDAwMDAwCisjZGVmaW5lICAgVEFCMQkwMDA0MDAwCisjZGVmaW5lICAgVEFCMgkwMDEwMDAwCisjZGVmaW5lICAgVEFCMwkwMDE0MDAwCisjZGVmaW5lICAgWFRBQlMJMDAxNDAwMAorI2RlZmluZSBCU0RMWQkwMDIwMDAwCisjZGVmaW5lICAgQlMwCTAwMDAwMDAKKyNkZWZpbmUgICBCUzEJMDAyMDAwMAorI2RlZmluZSBWVERMWQkwMDQwMDAwCisjZGVmaW5lICAgVlQwCTAwMDAwMDAKKyNkZWZpbmUgICBWVDEJMDA0MDAwMAorI2RlZmluZSBGRkRMWQkwMTAwMDAwCisjZGVmaW5lICAgRkYwCTAwMDAwMDAKKyNkZWZpbmUgICBGRjEJMDEwMDAwMAorCisvKiBjX2NmbGFnIGJpdCBtZWFuaW5nICovCisjZGVmaW5lIENCQVVECTAwMTAwMTcKKyNkZWZpbmUgIEIwCTAwMDAwMDAJCS8qIGhhbmcgdXAgKi8KKyNkZWZpbmUgIEI1MAkwMDAwMDAxCisjZGVmaW5lICBCNzUJMDAwMDAwMgorI2RlZmluZSAgQjExMAkwMDAwMDAzCisjZGVmaW5lICBCMTM0CTAwMDAwMDQKKyNkZWZpbmUgIEIxNTAJMDAwMDAwNQorI2RlZmluZSAgQjIwMAkwMDAwMDA2CisjZGVmaW5lICBCMzAwCTAwMDAwMDcKKyNkZWZpbmUgIEI2MDAJMDAwMDAxMAorI2RlZmluZSAgQjEyMDAJMDAwMDAxMQorI2RlZmluZSAgQjE4MDAJMDAwMDAxMgorI2RlZmluZSAgQjI0MDAJMDAwMDAxMworI2RlZmluZSAgQjQ4MDAJMDAwMDAxNAorI2RlZmluZSAgQjk2MDAJMDAwMDAxNQorI2RlZmluZSAgQjE5MjAwCTAwMDAwMTYKKyNkZWZpbmUgIEIzODQwMAkwMDAwMDE3CisjZGVmaW5lIEVYVEEgQjE5MjAwCisjZGVmaW5lIEVYVEIgQjM4NDAwCisjZGVmaW5lIENTSVpFCTAwMDAwNjAKKyNkZWZpbmUgICBDUzUJMDAwMDAwMAorI2RlZmluZSAgIENTNgkwMDAwMDIwCisjZGVmaW5lICAgQ1M3CTAwMDAwNDAKKyNkZWZpbmUgICBDUzgJMDAwMDA2MAorI2RlZmluZSBDU1RPUEIJMDAwMDEwMAorI2RlZmluZSBDUkVBRAkwMDAwMjAwCisjZGVmaW5lIFBBUkVOQgkwMDAwNDAwCisjZGVmaW5lIFBBUk9ERAkwMDAxMDAwCisjZGVmaW5lIEhVUENMCTAwMDIwMDAKKyNkZWZpbmUgQ0xPQ0FMCTAwMDQwMDAKKyNkZWZpbmUgQ0JBVURFWCAwMDEwMDAwCisjZGVmaW5lICAgIEJPVEhFUiAwMDEwMDAwCisjZGVmaW5lICAgIEI1NzYwMCAwMDEwMDAxCisjZGVmaW5lICAgQjExNTIwMCAwMDEwMDAyCisjZGVmaW5lICAgQjIzMDQwMCAwMDEwMDAzCisjZGVmaW5lICAgQjQ2MDgwMCAwMDEwMDA0CisjZGVmaW5lICAgQjUwMDAwMCAwMDEwMDA1CisjZGVmaW5lICAgQjU3NjAwMCAwMDEwMDA2CisjZGVmaW5lICAgQjkyMTYwMCAwMDEwMDA3CisjZGVmaW5lICBCMTAwMDAwMCAwMDEwMDEwCisjZGVmaW5lICBCMTE1MjAwMCAwMDEwMDExCisjZGVmaW5lICBCMTUwMDAwMCAwMDEwMDEyCisjZGVmaW5lICBCMjAwMDAwMCAwMDEwMDEzCisjZGVmaW5lICBCMjUwMDAwMCAwMDEwMDE0CisjZGVmaW5lICBCMzAwMDAwMCAwMDEwMDE1CisjZGVmaW5lICBCMzUwMDAwMCAwMDEwMDE2CisjZGVmaW5lICBCNDAwMDAwMCAwMDEwMDE3CisjZGVmaW5lIENJQkFVRAkgIDAwMjAwMzYwMDAwMAkJLyogaW5wdXQgYmF1ZCByYXRlICovCisjZGVmaW5lIENNU1BBUiAgICAwMTAwMDAwMDAwMDAJCS8qIG1hcmsgb3Igc3BhY2UgKHN0aWNrKSBwYXJpdHkgKi8KKyNkZWZpbmUgQ1JUU0NUUwkgIDAyMDAwMDAwMDAwMAkJLyogZmxvdyBjb250cm9sICovCisKKyNkZWZpbmUgSUJTSElGVAkgICAxNgorCisvKiBjX2xmbGFnIGJpdHMgKi8KKyNkZWZpbmUgSVNJRwkwMDAwMDAxCisjZGVmaW5lIElDQU5PTgkwMDAwMDAyCisjZGVmaW5lIFhDQVNFCTAwMDAwMDQKKyNkZWZpbmUgRUNITwkwMDAwMDEwCisjZGVmaW5lIEVDSE9FCTAwMDAwMjAKKyNkZWZpbmUgRUNIT0sJMDAwMDA0MAorI2RlZmluZSBFQ0hPTkwJMDAwMDEwMAorI2RlZmluZSBOT0ZMU0gJMDAwMDIwMAorI2RlZmluZSBUT1NUT1AJMDAwMDQwMAorI2RlZmluZSBFQ0hPQ1RMCTAwMDEwMDAKKyNkZWZpbmUgRUNIT1BSVAkwMDAyMDAwCisjZGVmaW5lIEVDSE9LRQkwMDA0MDAwCisjZGVmaW5lIEZMVVNITwkwMDEwMDAwCisjZGVmaW5lIFBFTkRJTgkwMDQwMDAwCisjZGVmaW5lIElFWFRFTgkwMTAwMDAwCisjZGVmaW5lIEVYVFBST0MJMDIwMDAwMAorCisvKiB0Y2Zsb3coKSBhbmQgVENYT05DIHVzZSB0aGVzZSAqLworI2RlZmluZQlUQ09PRkYJCTAKKyNkZWZpbmUJVENPT04JCTEKKyNkZWZpbmUJVENJT0ZGCQkyCisjZGVmaW5lCVRDSU9OCQkzCisKKy8qIHRjZmx1c2goKSBhbmQgVENGTFNIIHVzZSB0aGVzZSAqLworI2RlZmluZQlUQ0lGTFVTSAkwCisjZGVmaW5lCVRDT0ZMVVNICTEKKyNkZWZpbmUJVENJT0ZMVVNICTIKKworLyogdGNzZXRhdHRyIHVzZXMgdGhlc2UgKi8KKyNkZWZpbmUJVENTQU5PVwkJMAorI2RlZmluZQlUQ1NBRFJBSU4JMQorI2RlZmluZQlUQ1NBRkxVU0gJMgorCisjZW5kaWYJLyogX19BU01fQVJNX1RFUk1CSVRTX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vdGVybWlvcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2FzbS90ZXJtaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNiZTVhYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vdGVybWlvcy5oCkBAIC0wLDAgKzEsNDQgQEAKKyNpZm5kZWYgX19BU01fQVJNX1RFUk1JT1NfSAorI2RlZmluZSBfX0FTTV9BUk1fVEVSTUlPU19ICisKKyNpbmNsdWRlIDxhc20vdGVybWJpdHMuaD4KKyNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CisKK3N0cnVjdCB3aW5zaXplIHsKKwl1bnNpZ25lZCBzaG9ydCB3c19yb3c7CisJdW5zaWduZWQgc2hvcnQgd3NfY29sOworCXVuc2lnbmVkIHNob3J0IHdzX3hwaXhlbDsKKwl1bnNpZ25lZCBzaG9ydCB3c195cGl4ZWw7Cit9OworCisjZGVmaW5lIE5DQyA4CitzdHJ1Y3QgdGVybWlvIHsKKwl1bnNpZ25lZCBzaG9ydCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIHNob3J0IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIHNob3J0IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLworCXVuc2lnbmVkIGNoYXIgY19saW5lOwkJLyogbGluZSBkaXNjaXBsaW5lICovCisJdW5zaWduZWQgY2hhciBjX2NjW05DQ107CS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLworfTsKKworCisvKiBtb2RlbSBsaW5lcyAqLworI2RlZmluZSBUSU9DTV9MRQkweDAwMQorI2RlZmluZSBUSU9DTV9EVFIJMHgwMDIKKyNkZWZpbmUgVElPQ01fUlRTCTB4MDA0CisjZGVmaW5lIFRJT0NNX1NUCTB4MDA4CisjZGVmaW5lIFRJT0NNX1NSCTB4MDEwCisjZGVmaW5lIFRJT0NNX0NUUwkweDAyMAorI2RlZmluZSBUSU9DTV9DQVIJMHgwNDAKKyNkZWZpbmUgVElPQ01fUk5HCTB4MDgwCisjZGVmaW5lIFRJT0NNX0RTUgkweDEwMAorI2RlZmluZSBUSU9DTV9DRAlUSU9DTV9DQVIKKyNkZWZpbmUgVElPQ01fUkkJVElPQ01fUk5HCisjZGVmaW5lIFRJT0NNX09VVDEJMHgyMDAwCisjZGVmaW5lIFRJT0NNX09VVDIJMHg0MDAwCisjZGVmaW5lIFRJT0NNX0xPT1AJMHg4MDAwCisKKy8qIGlvY3RsIChmZCwgVElPQ1NFUkdFVExTUiwgJnJlc3VsdCkgd2hlcmUgcmVzdWx0IG1heSBiZSBhcyBiZWxvdyAqLworCisKKyNlbmRpZgkvKiBfX0FTTV9BUk1fVEVSTUlPU19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL3R5cGVzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkwNTZhMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vdHlwZXMuaApAQCAtMCwwICsxLDE3IEBACisjaWZuZGVmIF9fQVNNX0FSTV9UWVBFU19ICisjZGVmaW5lIF9fQVNNX0FSTV9UWVBFU19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pbnQtbGw2NC5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVtb2RlX3Q7CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworLyoKKyAqIFRoZXNlIGFyZW4ndCBleHBvcnRlZCBvdXRzaWRlIHRoZSBrZXJuZWwgdG8gYXZvaWQgbmFtZSBzcGFjZSBjbGFzaGVzCisgKi8KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzM2E4MDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0wLDAgKzEsNDM0IEBACisvKgorICogIGFyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMS0yMDA1IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogUGxlYXNlIGZvcndhcmQgX2FsbF8gY2hhbmdlcyB0byB0aGlzIGZpbGUgdG8gcm1rQGFybS5saW51eC5vcmcudWssCisgKiBubyBtYXR0ZXIgd2hhdCB0aGUgY2hhbmdlIGlzLiAgVGhhbmtzIQorICovCisjaWZuZGVmIF9fQVNNX0FSTV9VTklTVERfSAorI2RlZmluZSBfX0FTTV9BUk1fVU5JU1REX0gKKworI2RlZmluZSBfX05SX09BQklfU1lTQ0FMTF9CQVNFCTB4OTAwMDAwCisKKyNpZiBkZWZpbmVkKF9fdGh1bWJfXykgfHwgZGVmaW5lZChfX0FSTV9FQUJJX18pCisjZGVmaW5lIF9fTlJfU1lTQ0FMTF9CQVNFCTAKKyNlbHNlCisjZGVmaW5lIF9fTlJfU1lTQ0FMTF9CQVNFCV9fTlJfT0FCSV9TWVNDQUxMX0JBU0UKKyNlbmRpZgorCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzeXN0ZW0gY2FsbCBudW1iZXJzLgorICovCisKKyNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwJCShfX05SX1NZU0NBTExfQkFTRSsgIDApCisjZGVmaW5lIF9fTlJfZXhpdAkJCShfX05SX1NZU0NBTExfQkFTRSsgIDEpCisjZGVmaW5lIF9fTlJfZm9yawkJCShfX05SX1NZU0NBTExfQkFTRSsgIDIpCisjZGVmaW5lIF9fTlJfcmVhZAkJCShfX05SX1NZU0NBTExfQkFTRSsgIDMpCisjZGVmaW5lIF9fTlJfd3JpdGUJCQkoX19OUl9TWVNDQUxMX0JBU0UrICA0KQorI2RlZmluZSBfX05SX29wZW4JCQkoX19OUl9TWVNDQUxMX0JBU0UrICA1KQorI2RlZmluZSBfX05SX2Nsb3NlCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAgNikKKwkJCQkJLyogNyB3YXMgc3lzX3dhaXRwaWQgKi8KKyNkZWZpbmUgX19OUl9jcmVhdAkJCShfX05SX1NZU0NBTExfQkFTRSsgIDgpCisjZGVmaW5lIF9fTlJfbGluawkJCShfX05SX1NZU0NBTExfQkFTRSsgIDkpCisjZGVmaW5lIF9fTlJfdW5saW5rCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAxMCkKKyNkZWZpbmUgX19OUl9leGVjdmUJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDExKQorI2RlZmluZSBfX05SX2NoZGlyCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAxMikKKyNkZWZpbmUgX19OUl90aW1lCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAxMykKKyNkZWZpbmUgX19OUl9ta25vZAkJCShfX05SX1NZU0NBTExfQkFTRSsgMTQpCisjZGVmaW5lIF9fTlJfY2htb2QJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDE1KQorI2RlZmluZSBfX05SX2xjaG93bgkJCShfX05SX1NZU0NBTExfQkFTRSsgMTYpCisJCQkJCS8qIDE3IHdhcyBzeXNfYnJlYWsgKi8KKwkJCQkJLyogMTggd2FzIHN5c19zdGF0ICovCisjZGVmaW5lIF9fTlJfbHNlZWsJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDE5KQorI2RlZmluZSBfX05SX2dldHBpZAkJCShfX05SX1NZU0NBTExfQkFTRSsgMjApCisjZGVmaW5lIF9fTlJfbW91bnQJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDIxKQorI2RlZmluZSBfX05SX3Vtb3VudAkJCShfX05SX1NZU0NBTExfQkFTRSsgMjIpCisjZGVmaW5lIF9fTlJfc2V0dWlkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAyMykKKyNkZWZpbmUgX19OUl9nZXR1aWQJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDI0KQorI2RlZmluZSBfX05SX3N0aW1lCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAyNSkKKyNkZWZpbmUgX19OUl9wdHJhY2UJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDI2KQorI2RlZmluZSBfX05SX2FsYXJtCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAyNykKKwkJCQkJLyogMjggd2FzIHN5c19mc3RhdCAqLworI2RlZmluZSBfX05SX3BhdXNlCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAyOSkKKyNkZWZpbmUgX19OUl91dGltZQkJCShfX05SX1NZU0NBTExfQkFTRSsgMzApCisJCQkJCS8qIDMxIHdhcyBzeXNfc3R0eSAqLworCQkJCQkvKiAzMiB3YXMgc3lzX2d0dHkgKi8KKyNkZWZpbmUgX19OUl9hY2Nlc3MJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDMzKQorI2RlZmluZSBfX05SX25pY2UJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDM0KQorCQkJCQkvKiAzNSB3YXMgc3lzX2Z0aW1lICovCisjZGVmaW5lIF9fTlJfc3luYwkJCShfX05SX1NZU0NBTExfQkFTRSsgMzYpCisjZGVmaW5lIF9fTlJfa2lsbAkJCShfX05SX1NZU0NBTExfQkFTRSsgMzcpCisjZGVmaW5lIF9fTlJfcmVuYW1lCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyAzOCkKKyNkZWZpbmUgX19OUl9ta2RpcgkJCShfX05SX1NZU0NBTExfQkFTRSsgMzkpCisjZGVmaW5lIF9fTlJfcm1kaXIJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDQwKQorI2RlZmluZSBfX05SX2R1cAkJCShfX05SX1NZU0NBTExfQkFTRSsgNDEpCisjZGVmaW5lIF9fTlJfcGlwZQkJCShfX05SX1NZU0NBTExfQkFTRSsgNDIpCisjZGVmaW5lIF9fTlJfdGltZXMJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDQzKQorCQkJCQkvKiA0NCB3YXMgc3lzX3Byb2YgKi8KKyNkZWZpbmUgX19OUl9icmsJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDQ1KQorI2RlZmluZSBfX05SX3NldGdpZAkJCShfX05SX1NZU0NBTExfQkFTRSsgNDYpCisjZGVmaW5lIF9fTlJfZ2V0Z2lkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA0NykKKwkJCQkJLyogNDggd2FzIHN5c19zaWduYWwgKi8KKyNkZWZpbmUgX19OUl9nZXRldWlkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA0OSkKKyNkZWZpbmUgX19OUl9nZXRlZ2lkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA1MCkKKyNkZWZpbmUgX19OUl9hY2N0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA1MSkKKyNkZWZpbmUgX19OUl91bW91bnQyCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA1MikKKwkJCQkJLyogNTMgd2FzIHN5c19sb2NrICovCisjZGVmaW5lIF9fTlJfaW9jdGwJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDU0KQorI2RlZmluZSBfX05SX2ZjbnRsCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA1NSkKKwkJCQkJLyogNTYgd2FzIHN5c19tcHggKi8KKyNkZWZpbmUgX19OUl9zZXRwZ2lkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA1NykKKwkJCQkJLyogNTggd2FzIHN5c191bGltaXQgKi8KKwkJCQkJLyogNTkgd2FzIHN5c19vbGR1bmFtZSAqLworI2RlZmluZSBfX05SX3VtYXNrCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA2MCkKKyNkZWZpbmUgX19OUl9jaHJvb3QJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDYxKQorI2RlZmluZSBfX05SX3VzdGF0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA2MikKKyNkZWZpbmUgX19OUl9kdXAyCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA2MykKKyNkZWZpbmUgX19OUl9nZXRwcGlkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA2NCkKKyNkZWZpbmUgX19OUl9nZXRwZ3JwCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA2NSkKKyNkZWZpbmUgX19OUl9zZXRzaWQJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDY2KQorI2RlZmluZSBfX05SX3NpZ2FjdGlvbgkJCShfX05SX1NZU0NBTExfQkFTRSsgNjcpCisJCQkJCS8qIDY4IHdhcyBzeXNfc2dldG1hc2sgKi8KKwkJCQkJLyogNjkgd2FzIHN5c19zc2V0bWFzayAqLworI2RlZmluZSBfX05SX3NldHJldWlkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA3MCkKKyNkZWZpbmUgX19OUl9zZXRyZWdpZAkJCShfX05SX1NZU0NBTExfQkFTRSsgNzEpCisjZGVmaW5lIF9fTlJfc2lnc3VzcGVuZAkJCShfX05SX1NZU0NBTExfQkFTRSsgNzIpCisjZGVmaW5lIF9fTlJfc2lncGVuZGluZwkJCShfX05SX1NZU0NBTExfQkFTRSsgNzMpCisjZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUJCShfX05SX1NZU0NBTExfQkFTRSsgNzQpCisjZGVmaW5lIF9fTlJfc2V0cmxpbWl0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA3NSkKKyNkZWZpbmUgX19OUl9nZXRybGltaXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDc2KQkvKiBCYWNrIGNvbXBhdCAyR0IgbGltaXRlZCBybGltaXQgKi8KKyNkZWZpbmUgX19OUl9nZXRydXNhZ2UJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDc3KQorI2RlZmluZSBfX05SX2dldHRpbWVvZmRheQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA3OCkKKyNkZWZpbmUgX19OUl9zZXR0aW1lb2ZkYXkJCShfX05SX1NZU0NBTExfQkFTRSsgNzkpCisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA4MCkKKyNkZWZpbmUgX19OUl9zZXRncm91cHMJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDgxKQorI2RlZmluZSBfX05SX3NlbGVjdAkJCShfX05SX1NZU0NBTExfQkFTRSsgODIpCisjZGVmaW5lIF9fTlJfc3ltbGluawkJCShfX05SX1NZU0NBTExfQkFTRSsgODMpCisJCQkJCS8qIDg0IHdhcyBzeXNfbHN0YXQgKi8KKyNkZWZpbmUgX19OUl9yZWFkbGluawkJCShfX05SX1NZU0NBTExfQkFTRSsgODUpCisjZGVmaW5lIF9fTlJfdXNlbGliCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA4NikKKyNkZWZpbmUgX19OUl9zd2Fwb24JCQkoX19OUl9TWVNDQUxMX0JBU0UrIDg3KQorI2RlZmluZSBfX05SX3JlYm9vdAkJCShfX05SX1NZU0NBTExfQkFTRSsgODgpCisjZGVmaW5lIF9fTlJfcmVhZGRpcgkJCShfX05SX1NZU0NBTExfQkFTRSsgODkpCisjZGVmaW5lIF9fTlJfbW1hcAkJCShfX05SX1NZU0NBTExfQkFTRSsgOTApCisjZGVmaW5lIF9fTlJfbXVubWFwCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA5MSkKKyNkZWZpbmUgX19OUl90cnVuY2F0ZQkJCShfX05SX1NZU0NBTExfQkFTRSsgOTIpCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA5MykKKyNkZWZpbmUgX19OUl9mY2htb2QJCQkoX19OUl9TWVNDQUxMX0JBU0UrIDk0KQorI2RlZmluZSBfX05SX2ZjaG93bgkJCShfX05SX1NZU0NBTExfQkFTRSsgOTUpCisjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkJCShfX05SX1NZU0NBTExfQkFTRSsgOTYpCisjZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkJCShfX05SX1NZU0NBTExfQkFTRSsgOTcpCisJCQkJCS8qIDk4IHdhcyBzeXNfcHJvZmlsICovCisjZGVmaW5lIF9fTlJfc3RhdGZzCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKyA5OSkKKyNkZWZpbmUgX19OUl9mc3RhdGZzCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEwMCkKKwkJCQkJLyogMTAxIHdhcyBzeXNfaW9wZXJtICovCisjZGVmaW5lIF9fTlJfc29ja2V0Y2FsbAkJCShfX05SX1NZU0NBTExfQkFTRSsxMDIpCisjZGVmaW5lIF9fTlJfc3lzbG9nCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEwMykKKyNkZWZpbmUgX19OUl9zZXRpdGltZXIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTA0KQorI2RlZmluZSBfX05SX2dldGl0aW1lcgkJCShfX05SX1NZU0NBTExfQkFTRSsxMDUpCisjZGVmaW5lIF9fTlJfc3RhdAkJCShfX05SX1NZU0NBTExfQkFTRSsxMDYpCisjZGVmaW5lIF9fTlJfbHN0YXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTA3KQorI2RlZmluZSBfX05SX2ZzdGF0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEwOCkKKwkJCQkJLyogMTA5IHdhcyBzeXNfdW5hbWUgKi8KKwkJCQkJLyogMTEwIHdhcyBzeXNfaW9wbCAqLworI2RlZmluZSBfX05SX3ZoYW5ndXAJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTExKQorCQkJCQkvKiAxMTIgd2FzIHN5c19pZGxlICovCisjZGVmaW5lIF9fTlJfc3lzY2FsbAkJCShfX05SX1NZU0NBTExfQkFTRSsxMTMpIC8qIHN5c2NhbGwgdG8gY2FsbCBhIHN5c2NhbGwhICovCisjZGVmaW5lIF9fTlJfd2FpdDQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTE0KQorI2RlZmluZSBfX05SX3N3YXBvZmYJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTE1KQorI2RlZmluZSBfX05SX3N5c2luZm8JCQkoX19OUl9TWVNDQUxMX0JBU0UrMTE2KQorI2RlZmluZSBfX05SX2lwYwkJCShfX05SX1NZU0NBTExfQkFTRSsxMTcpCisjZGVmaW5lIF9fTlJfZnN5bmMJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTE4KQorI2RlZmluZSBfX05SX3NpZ3JldHVybgkJCShfX05SX1NZU0NBTExfQkFTRSsxMTkpCisjZGVmaW5lIF9fTlJfY2xvbmUJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTIwKQorI2RlZmluZSBfX05SX3NldGRvbWFpbm5hbWUJCShfX05SX1NZU0NBTExfQkFTRSsxMjEpCisjZGVmaW5lIF9fTlJfdW5hbWUJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTIyKQorCQkJCQkvKiAxMjMgd2FzIHN5c19tb2RpZnlfbGR0ICovCisjZGVmaW5lIF9fTlJfYWRqdGltZXgJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTI0KQorI2RlZmluZSBfX05SX21wcm90ZWN0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEyNSkKKyNkZWZpbmUgX19OUl9zaWdwcm9jbWFzawkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEyNikKKwkJCQkJLyogMTI3IHdhcyBzeXNfY3JlYXRlX21vZHVsZSAqLworI2RlZmluZSBfX05SX2luaXRfbW9kdWxlCQkoX19OUl9TWVNDQUxMX0JBU0UrMTI4KQorI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUJCShfX05SX1NZU0NBTExfQkFTRSsxMjkpCisJCQkJCS8qIDEzMCB3YXMgc3lzX2dldF9rZXJuZWxfc3ltcyAqLworI2RlZmluZSBfX05SX3F1b3RhY3RsCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEzMSkKKyNkZWZpbmUgX19OUl9nZXRwZ2lkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEzMikKKyNkZWZpbmUgX19OUl9mY2hkaXIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTMzKQorI2RlZmluZSBfX05SX2JkZmx1c2gJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTM0KQorI2RlZmluZSBfX05SX3N5c2ZzCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEzNSkKKyNkZWZpbmUgX19OUl9wZXJzb25hbGl0eQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzEzNikKKwkJCQkJLyogMTM3IHdhcyBzeXNfYWZzX3N5c2NhbGwgKi8KKyNkZWZpbmUgX19OUl9zZXRmc3VpZAkJCShfX05SX1NZU0NBTExfQkFTRSsxMzgpCisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTM5KQorI2RlZmluZSBfX05SX19sbHNlZWsJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTQwKQorI2RlZmluZSBfX05SX2dldGRlbnRzCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE0MSkKKyNkZWZpbmUgX19OUl9fbmV3c2VsZWN0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE0MikKKyNkZWZpbmUgX19OUl9mbG9jawkJCShfX05SX1NZU0NBTExfQkFTRSsxNDMpCisjZGVmaW5lIF9fTlJfbXN5bmMJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTQ0KQorI2RlZmluZSBfX05SX3JlYWR2CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE0NSkKKyNkZWZpbmUgX19OUl93cml0ZXYJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTQ2KQorI2RlZmluZSBfX05SX2dldHNpZAkJCShfX05SX1NZU0NBTExfQkFTRSsxNDcpCisjZGVmaW5lIF9fTlJfZmRhdGFzeW5jCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE0OCkKKyNkZWZpbmUgX19OUl9fc3lzY3RsCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE0OSkKKyNkZWZpbmUgX19OUl9tbG9jawkJCShfX05SX1NZU0NBTExfQkFTRSsxNTApCisjZGVmaW5lIF9fTlJfbXVubG9jawkJCShfX05SX1NZU0NBTExfQkFTRSsxNTEpCisjZGVmaW5lIF9fTlJfbWxvY2thbGwJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTUyKQorI2RlZmluZSBfX05SX211bmxvY2thbGwJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTUzKQorI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtCQkoX19OUl9TWVNDQUxMX0JBU0UrMTU0KQorI2RlZmluZSBfX05SX3NjaGVkX2dldHBhcmFtCQkoX19OUl9TWVNDQUxMX0JBU0UrMTU1KQorI2RlZmluZSBfX05SX3NjaGVkX3NldHNjaGVkdWxlcgkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE1NikKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIJCShfX05SX1NZU0NBTExfQkFTRSsxNTcpCisjZGVmaW5lIF9fTlJfc2NoZWRfeWllbGQJCShfX05SX1NZU0NBTExfQkFTRSsxNTgpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAkoX19OUl9TWVNDQUxMX0JBU0UrMTU5KQorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4JKF9fTlJfU1lTQ0FMTF9CQVNFKzE2MCkKKyNkZWZpbmUgX19OUl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwJKF9fTlJfU1lTQ0FMTF9CQVNFKzE2MSkKKyNkZWZpbmUgX19OUl9uYW5vc2xlZXAJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTYyKQorI2RlZmluZSBfX05SX21yZW1hcAkJCShfX05SX1NZU0NBTExfQkFTRSsxNjMpCisjZGVmaW5lIF9fTlJfc2V0cmVzdWlkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE2NCkKKyNkZWZpbmUgX19OUl9nZXRyZXN1aWQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTY1KQorCQkJCQkvKiAxNjYgd2FzIHN5c192bTg2ICovCisJCQkJCS8qIDE2NyB3YXMgc3lzX3F1ZXJ5X21vZHVsZSAqLworI2RlZmluZSBfX05SX3BvbGwJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTY4KQorI2RlZmluZSBfX05SX25mc3NlcnZjdGwJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTY5KQorI2RlZmluZSBfX05SX3NldHJlc2dpZAkJCShfX05SX1NZU0NBTExfQkFTRSsxNzApCisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE3MSkKKyNkZWZpbmUgX19OUl9wcmN0bAkJCShfX05SX1NZU0NBTExfQkFTRSsxNzIpCisjZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuCQkoX19OUl9TWVNDQUxMX0JBU0UrMTczKQorI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbgkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE3NCkKKyNkZWZpbmUgX19OUl9ydF9zaWdwcm9jbWFzawkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE3NSkKKyNkZWZpbmUgX19OUl9ydF9zaWdwZW5kaW5nCQkoX19OUl9TWVNDQUxMX0JBU0UrMTc2KQorI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdAkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE3NykKKyNkZWZpbmUgX19OUl9ydF9zaWdxdWV1ZWluZm8JCShfX05SX1NZU0NBTExfQkFTRSsxNzgpCisjZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZAkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE3OSkKKyNkZWZpbmUgX19OUl9wcmVhZDY0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE4MCkKKyNkZWZpbmUgX19OUl9wd3JpdGU2NAkJCShfX05SX1NZU0NBTExfQkFTRSsxODEpCisjZGVmaW5lIF9fTlJfY2hvd24JCQkoX19OUl9TWVNDQUxMX0JBU0UrMTgyKQorI2RlZmluZSBfX05SX2dldGN3ZAkJCShfX05SX1NZU0NBTExfQkFTRSsxODMpCisjZGVmaW5lIF9fTlJfY2FwZ2V0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE4NCkKKyNkZWZpbmUgX19OUl9jYXBzZXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTg1KQorI2RlZmluZSBfX05SX3NpZ2FsdHN0YWNrCQkoX19OUl9TWVNDQUxMX0JBU0UrMTg2KQorI2RlZmluZSBfX05SX3NlbmRmaWxlCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE4NykKKwkJCQkJLyogMTg4IHJlc2VydmVkICovCisJCQkJCS8qIDE4OSByZXNlcnZlZCAqLworI2RlZmluZSBfX05SX3Zmb3JrCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE5MCkKKyNkZWZpbmUgX19OUl91Z2V0cmxpbWl0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE5MSkJLyogU3VTIGNvbXBsaWFudCBnZXRybGltaXQgKi8KKyNkZWZpbmUgX19OUl9tbWFwMgkJCShfX05SX1NZU0NBTExfQkFTRSsxOTIpCisjZGVmaW5lIF9fTlJfdHJ1bmNhdGU2NAkJCShfX05SX1NZU0NBTExfQkFTRSsxOTMpCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlNjQJCShfX05SX1NZU0NBTExfQkFTRSsxOTQpCisjZGVmaW5lIF9fTlJfc3RhdDY0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE5NSkKKyNkZWZpbmUgX19OUl9sc3RhdDY0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE5NikKKyNkZWZpbmUgX19OUl9mc3RhdDY0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzE5NykKKyNkZWZpbmUgX19OUl9sY2hvd24zMgkJCShfX05SX1NZU0NBTExfQkFTRSsxOTgpCisjZGVmaW5lIF9fTlJfZ2V0dWlkMzIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMTk5KQorI2RlZmluZSBfX05SX2dldGdpZDMyCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzIwMCkKKyNkZWZpbmUgX19OUl9nZXRldWlkMzIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjAxKQorI2RlZmluZSBfX05SX2dldGVnaWQzMgkJCShfX05SX1NZU0NBTExfQkFTRSsyMDIpCisjZGVmaW5lIF9fTlJfc2V0cmV1aWQzMgkJCShfX05SX1NZU0NBTExfQkFTRSsyMDMpCisjZGVmaW5lIF9fTlJfc2V0cmVnaWQzMgkJCShfX05SX1NZU0NBTExfQkFTRSsyMDQpCisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzMzIJCShfX05SX1NZU0NBTExfQkFTRSsyMDUpCisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzMzIJCShfX05SX1NZU0NBTExfQkFTRSsyMDYpCisjZGVmaW5lIF9fTlJfZmNob3duMzIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjA3KQorI2RlZmluZSBfX05SX3NldHJlc3VpZDMyCQkoX19OUl9TWVNDQUxMX0JBU0UrMjA4KQorI2RlZmluZSBfX05SX2dldHJlc3VpZDMyCQkoX19OUl9TWVNDQUxMX0JBU0UrMjA5KQorI2RlZmluZSBfX05SX3NldHJlc2dpZDMyCQkoX19OUl9TWVNDQUxMX0JBU0UrMjEwKQorI2RlZmluZSBfX05SX2dldHJlc2dpZDMyCQkoX19OUl9TWVNDQUxMX0JBU0UrMjExKQorI2RlZmluZSBfX05SX2Nob3duMzIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjEyKQorI2RlZmluZSBfX05SX3NldHVpZDMyCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzIxMykKKyNkZWZpbmUgX19OUl9zZXRnaWQzMgkJCShfX05SX1NZU0NBTExfQkFTRSsyMTQpCisjZGVmaW5lIF9fTlJfc2V0ZnN1aWQzMgkJCShfX05SX1NZU0NBTExfQkFTRSsyMTUpCisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQzMgkJCShfX05SX1NZU0NBTExfQkFTRSsyMTYpCisjZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NAkJCShfX05SX1NZU0NBTExfQkFTRSsyMTcpCisjZGVmaW5lIF9fTlJfcGl2b3Rfcm9vdAkJCShfX05SX1NZU0NBTExfQkFTRSsyMTgpCisjZGVmaW5lIF9fTlJfbWluY29yZQkJCShfX05SX1NZU0NBTExfQkFTRSsyMTkpCisjZGVmaW5lIF9fTlJfbWFkdmlzZQkJCShfX05SX1NZU0NBTExfQkFTRSsyMjApCisjZGVmaW5lIF9fTlJfZmNudGw2NAkJCShfX05SX1NZU0NBTExfQkFTRSsyMjEpCisJCQkJCS8qIDIyMiBmb3IgdHV4ICovCisJCQkJCS8qIDIyMyBpcyB1bnVzZWQgKi8KKyNkZWZpbmUgX19OUl9nZXR0aWQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjI0KQorI2RlZmluZSBfX05SX3JlYWRhaGVhZAkJCShfX05SX1NZU0NBTExfQkFTRSsyMjUpCisjZGVmaW5lIF9fTlJfc2V0eGF0dHIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjI2KQorI2RlZmluZSBfX05SX2xzZXR4YXR0cgkJCShfX05SX1NZU0NBTExfQkFTRSsyMjcpCisjZGVmaW5lIF9fTlJfZnNldHhhdHRyCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzIyOCkKKyNkZWZpbmUgX19OUl9nZXR4YXR0cgkJCShfX05SX1NZU0NBTExfQkFTRSsyMjkpCisjZGVmaW5lIF9fTlJfbGdldHhhdHRyCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzIzMCkKKyNkZWZpbmUgX19OUl9mZ2V0eGF0dHIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjMxKQorI2RlZmluZSBfX05SX2xpc3R4YXR0cgkJCShfX05SX1NZU0NBTExfQkFTRSsyMzIpCisjZGVmaW5lIF9fTlJfbGxpc3R4YXR0cgkJCShfX05SX1NZU0NBTExfQkFTRSsyMzMpCisjZGVmaW5lIF9fTlJfZmxpc3R4YXR0cgkJCShfX05SX1NZU0NBTExfQkFTRSsyMzQpCisjZGVmaW5lIF9fTlJfcmVtb3ZleGF0dHIJCShfX05SX1NZU0NBTExfQkFTRSsyMzUpCisjZGVmaW5lIF9fTlJfbHJlbW92ZXhhdHRyCQkoX19OUl9TWVNDQUxMX0JBU0UrMjM2KQorI2RlZmluZSBfX05SX2ZyZW1vdmV4YXR0cgkJKF9fTlJfU1lTQ0FMTF9CQVNFKzIzNykKKyNkZWZpbmUgX19OUl90a2lsbAkJCShfX05SX1NZU0NBTExfQkFTRSsyMzgpCisjZGVmaW5lIF9fTlJfc2VuZGZpbGU2NAkJCShfX05SX1NZU0NBTExfQkFTRSsyMzkpCisjZGVmaW5lIF9fTlJfZnV0ZXgJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjQwKQorI2RlZmluZSBfX05SX3NjaGVkX3NldGFmZmluaXR5CQkoX19OUl9TWVNDQUxMX0JBU0UrMjQxKQorI2RlZmluZSBfX05SX3NjaGVkX2dldGFmZmluaXR5CQkoX19OUl9TWVNDQUxMX0JBU0UrMjQyKQorI2RlZmluZSBfX05SX2lvX3NldHVwCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0MykKKyNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0NCkKKyNkZWZpbmUgX19OUl9pb19nZXRldmVudHMJCShfX05SX1NZU0NBTExfQkFTRSsyNDUpCisjZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0NikKKyNkZWZpbmUgX19OUl9pb19jYW5jZWwJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjQ3KQorI2RlZmluZSBfX05SX2V4aXRfZ3JvdXAJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjQ4KQorI2RlZmluZSBfX05SX2xvb2t1cF9kY29va2llCQkoX19OUl9TWVNDQUxMX0JBU0UrMjQ5KQorI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI1MCkKKyNkZWZpbmUgX19OUl9lcG9sbF9jdGwJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjUxKQorI2RlZmluZSBfX05SX2Vwb2xsX3dhaXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjUyKQorI2RlZmluZSBfX05SX3JlbWFwX2ZpbGVfcGFnZXMJCShfX05SX1NZU0NBTExfQkFTRSsyNTMpCisJCQkJCS8qIDI1NCBmb3Igc2V0X3RocmVhZF9hcmVhICovCisJCQkJCS8qIDI1NSBmb3IgZ2V0X3RocmVhZF9hcmVhICovCisjZGVmaW5lIF9fTlJfc2V0X3RpZF9hZGRyZXNzCQkoX19OUl9TWVNDQUxMX0JBU0UrMjU2KQorI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI1NykKKyNkZWZpbmUgX19OUl90aW1lcl9zZXR0aW1lCQkoX19OUl9TWVNDQUxMX0JBU0UrMjU4KQorI2RlZmluZSBfX05SX3RpbWVyX2dldHRpbWUJCShfX05SX1NZU0NBTExfQkFTRSsyNTkpCisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1bgkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI2MCkKKyNkZWZpbmUgX19OUl90aW1lcl9kZWxldGUJCShfX05SX1NZU0NBTExfQkFTRSsyNjEpCisjZGVmaW5lIF9fTlJfY2xvY2tfc2V0dGltZQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI2MikKKyNkZWZpbmUgX19OUl9jbG9ja19nZXR0aW1lCQkoX19OUl9TWVNDQUxMX0JBU0UrMjYzKQorI2RlZmluZSBfX05SX2Nsb2NrX2dldHJlcwkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI2NCkKKyNkZWZpbmUgX19OUl9jbG9ja19uYW5vc2xlZXAJCShfX05SX1NZU0NBTExfQkFTRSsyNjUpCisjZGVmaW5lIF9fTlJfc3RhdGZzNjQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjY2KQorI2RlZmluZSBfX05SX2ZzdGF0ZnM2NAkJCShfX05SX1NZU0NBTExfQkFTRSsyNjcpCisjZGVmaW5lIF9fTlJfdGdraWxsCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI2OCkKKyNkZWZpbmUgX19OUl91dGltZXMJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjY5KQorI2RlZmluZSBfX05SX2FybV9mYWR2aXNlNjRfNjQJCShfX05SX1NZU0NBTExfQkFTRSsyNzApCisjZGVmaW5lIF9fTlJfcGNpY29uZmlnX2lvYmFzZQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI3MSkKKyNkZWZpbmUgX19OUl9wY2ljb25maWdfcmVhZAkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI3MikKKyNkZWZpbmUgX19OUl9wY2ljb25maWdfd3JpdGUJCShfX05SX1NZU0NBTExfQkFTRSsyNzMpCisjZGVmaW5lIF9fTlJfbXFfb3BlbgkJCShfX05SX1NZU0NBTExfQkFTRSsyNzQpCisjZGVmaW5lIF9fTlJfbXFfdW5saW5rCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI3NSkKKyNkZWZpbmUgX19OUl9tcV90aW1lZHNlbmQJCShfX05SX1NZU0NBTExfQkFTRSsyNzYpCisjZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlCQkoX19OUl9TWVNDQUxMX0JBU0UrMjc3KQorI2RlZmluZSBfX05SX21xX25vdGlmeQkJCShfX05SX1NZU0NBTExfQkFTRSsyNzgpCisjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI3OSkKKyNkZWZpbmUgX19OUl93YWl0aWQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjgwKQorI2RlZmluZSBfX05SX3NvY2tldAkJCShfX05SX1NZU0NBTExfQkFTRSsyODEpCisjZGVmaW5lIF9fTlJfYmluZAkJCShfX05SX1NZU0NBTExfQkFTRSsyODIpCisjZGVmaW5lIF9fTlJfY29ubmVjdAkJCShfX05SX1NZU0NBTExfQkFTRSsyODMpCisjZGVmaW5lIF9fTlJfbGlzdGVuCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI4NCkKKyNkZWZpbmUgX19OUl9hY2NlcHQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjg1KQorI2RlZmluZSBfX05SX2dldHNvY2tuYW1lCQkoX19OUl9TWVNDQUxMX0JBU0UrMjg2KQorI2RlZmluZSBfX05SX2dldHBlZXJuYW1lCQkoX19OUl9TWVNDQUxMX0JBU0UrMjg3KQorI2RlZmluZSBfX05SX3NvY2tldHBhaXIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjg4KQorI2RlZmluZSBfX05SX3NlbmQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjg5KQorI2RlZmluZSBfX05SX3NlbmR0bwkJCShfX05SX1NZU0NBTExfQkFTRSsyOTApCisjZGVmaW5lIF9fTlJfcmVjdgkJCShfX05SX1NZU0NBTExfQkFTRSsyOTEpCisjZGVmaW5lIF9fTlJfcmVjdmZyb20JCQkoX19OUl9TWVNDQUxMX0JBU0UrMjkyKQorI2RlZmluZSBfX05SX3NodXRkb3duCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI5MykKKyNkZWZpbmUgX19OUl9zZXRzb2Nrb3B0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI5NCkKKyNkZWZpbmUgX19OUl9nZXRzb2Nrb3B0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI5NSkKKyNkZWZpbmUgX19OUl9zZW5kbXNnCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI5NikKKyNkZWZpbmUgX19OUl9yZWN2bXNnCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI5NykKKyNkZWZpbmUgX19OUl9zZW1vcAkJCShfX05SX1NZU0NBTExfQkFTRSsyOTgpCisjZGVmaW5lIF9fTlJfc2VtZ2V0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI5OSkKKyNkZWZpbmUgX19OUl9zZW1jdGwJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzAwKQorI2RlZmluZSBfX05SX21zZ3NuZAkJCShfX05SX1NZU0NBTExfQkFTRSszMDEpCisjZGVmaW5lIF9fTlJfbXNncmN2CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMwMikKKyNkZWZpbmUgX19OUl9tc2dnZXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzAzKQorI2RlZmluZSBfX05SX21zZ2N0bAkJCShfX05SX1NZU0NBTExfQkFTRSszMDQpCisjZGVmaW5lIF9fTlJfc2htYXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzA1KQorI2RlZmluZSBfX05SX3NobWR0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMwNikKKyNkZWZpbmUgX19OUl9zaG1nZXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzA3KQorI2RlZmluZSBfX05SX3NobWN0bAkJCShfX05SX1NZU0NBTExfQkFTRSszMDgpCisjZGVmaW5lIF9fTlJfYWRkX2tleQkJCShfX05SX1NZU0NBTExfQkFTRSszMDkpCisjZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJCShfX05SX1NZU0NBTExfQkFTRSszMTApCisjZGVmaW5lIF9fTlJfa2V5Y3RsCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMxMSkKKyNkZWZpbmUgX19OUl9zZW10aW1lZG9wCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMxMikKKyNkZWZpbmUgX19OUl92c2VydmVyCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMxMykKKyNkZWZpbmUgX19OUl9pb3ByaW9fc2V0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMxNCkKKyNkZWZpbmUgX19OUl9pb3ByaW9fZ2V0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMxNSkKKyNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQJCShfX05SX1NZU0NBTExfQkFTRSszMTYpCisjZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2gJCShfX05SX1NZU0NBTExfQkFTRSszMTcpCisjZGVmaW5lIF9fTlJfaW5vdGlmeV9ybV93YXRjaAkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMxOCkKKyNkZWZpbmUgX19OUl9tYmluZAkJCShfX05SX1NZU0NBTExfQkFTRSszMTkpCisjZGVmaW5lIF9fTlJfZ2V0X21lbXBvbGljeQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMyMCkKKyNkZWZpbmUgX19OUl9zZXRfbWVtcG9saWN5CQkoX19OUl9TWVNDQUxMX0JBU0UrMzIxKQorI2RlZmluZSBfX05SX29wZW5hdAkJCShfX05SX1NZU0NBTExfQkFTRSszMjIpCisjZGVmaW5lIF9fTlJfbWtkaXJhdAkJCShfX05SX1NZU0NBTExfQkFTRSszMjMpCisjZGVmaW5lIF9fTlJfbWtub2RhdAkJCShfX05SX1NZU0NBTExfQkFTRSszMjQpCisjZGVmaW5lIF9fTlJfZmNob3duYXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzI1KQorI2RlZmluZSBfX05SX2Z1dGltZXNhdAkJCShfX05SX1NZU0NBTExfQkFTRSszMjYpCisjZGVmaW5lIF9fTlJfZnN0YXRhdDY0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMyNykKKyNkZWZpbmUgX19OUl91bmxpbmthdAkJCShfX05SX1NZU0NBTExfQkFTRSszMjgpCisjZGVmaW5lIF9fTlJfcmVuYW1lYXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzI5KQorI2RlZmluZSBfX05SX2xpbmthdAkJCShfX05SX1NZU0NBTExfQkFTRSszMzApCisjZGVmaW5lIF9fTlJfc3ltbGlua2F0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMzMSkKKyNkZWZpbmUgX19OUl9yZWFkbGlua2F0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMzMikKKyNkZWZpbmUgX19OUl9mY2htb2RhdAkJCShfX05SX1NZU0NBTExfQkFTRSszMzMpCisjZGVmaW5lIF9fTlJfZmFjY2Vzc2F0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMzNCkKKyNkZWZpbmUgX19OUl9wc2VsZWN0NgkJCShfX05SX1NZU0NBTExfQkFTRSszMzUpCisjZGVmaW5lIF9fTlJfcHBvbGwJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzM2KQorI2RlZmluZSBfX05SX3Vuc2hhcmUJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzM3KQorI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdAkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMzOCkKKyNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJCShfX05SX1NZU0NBTExfQkFTRSszMzkpCisjZGVmaW5lIF9fTlJfc3BsaWNlCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM0MCkKKyNkZWZpbmUgX19OUl9hcm1fc3luY19maWxlX3JhbmdlCShfX05SX1NZU0NBTExfQkFTRSszNDEpCisjZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlMgkJX19OUl9hcm1fc3luY19maWxlX3JhbmdlCisjZGVmaW5lIF9fTlJfdGVlCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM0MikKKyNkZWZpbmUgX19OUl92bXNwbGljZQkJCShfX05SX1NZU0NBTExfQkFTRSszNDMpCisjZGVmaW5lIF9fTlJfbW92ZV9wYWdlcwkJCShfX05SX1NZU0NBTExfQkFTRSszNDQpCisjZGVmaW5lIF9fTlJfZ2V0Y3B1CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM0NSkKKyNkZWZpbmUgX19OUl9lcG9sbF9wd2FpdAkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM0NikKKyNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM0NykKKyNkZWZpbmUgX19OUl91dGltZW5zYXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzQ4KQorI2RlZmluZSBfX05SX3NpZ25hbGZkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM0OSkKKyNkZWZpbmUgX19OUl90aW1lcmZkX2NyZWF0ZQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM1MCkKKyNkZWZpbmUgX19OUl9ldmVudGZkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM1MSkKKyNkZWZpbmUgX19OUl9mYWxsb2NhdGUJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzUyKQorI2RlZmluZSBfX05SX3RpbWVyZmRfc2V0dGltZQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM1MykKKyNkZWZpbmUgX19OUl90aW1lcmZkX2dldHRpbWUJCShfX05SX1NZU0NBTExfQkFTRSszNTQpCisjZGVmaW5lIF9fTlJfc2lnbmFsZmQ0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM1NSkKKyNkZWZpbmUgX19OUl9ldmVudGZkMgkJCShfX05SX1NZU0NBTExfQkFTRSszNTYpCisjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlMQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM1NykKKyNkZWZpbmUgX19OUl9kdXAzCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM1OCkKKyNkZWZpbmUgX19OUl9waXBlMgkJCShfX05SX1NZU0NBTExfQkFTRSszNTkpCisjZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0MQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM2MCkKKyNkZWZpbmUgX19OUl9wcmVhZHYJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzYxKQorI2RlZmluZSBfX05SX3B3cml0ZXYJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzYyKQorI2RlZmluZSBfX05SX3J0X3Rnc2lncXVldWVpbmZvCQkoX19OUl9TWVNDQUxMX0JBU0UrMzYzKQorI2RlZmluZSBfX05SX3BlcmZfZXZlbnRfb3BlbgkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM2NCkKKyNkZWZpbmUgX19OUl9yZWN2bW1zZwkJCShfX05SX1NZU0NBTExfQkFTRSszNjUpCisjZGVmaW5lIF9fTlJfYWNjZXB0NAkJCShfX05SX1NZU0NBTExfQkFTRSszNjYpCisjZGVmaW5lIF9fTlJfZmFub3RpZnlfaW5pdAkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM2NykKKyNkZWZpbmUgX19OUl9mYW5vdGlmeV9tYXJrCQkoX19OUl9TWVNDQUxMX0JBU0UrMzY4KQorI2RlZmluZSBfX05SX3BybGltaXQ2NAkJCShfX05SX1NZU0NBTExfQkFTRSszNjkpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIFNXSXMgYXJlIEFSTSBwcml2YXRlLgorICovCisjZGVmaW5lIF9fQVJNX05SX0JBU0UJCQkoX19OUl9TWVNDQUxMX0JBU0UrMHgwZjAwMDApCisjZGVmaW5lIF9fQVJNX05SX2JyZWFrcG9pbnQJCShfX0FSTV9OUl9CQVNFKzEpCisjZGVmaW5lIF9fQVJNX05SX2NhY2hlZmx1c2gJCShfX0FSTV9OUl9CQVNFKzIpCisjZGVmaW5lIF9fQVJNX05SX3VzcjI2CQkJKF9fQVJNX05SX0JBU0UrMykKKyNkZWZpbmUgX19BUk1fTlJfdXNyMzIJCQkoX19BUk1fTlJfQkFTRSs0KQorI2RlZmluZSBfX0FSTV9OUl9zZXRfdGxzCQkoX19BUk1fTlJfQkFTRSs1KQorCisvKgorICogKk5PVEUqOiBUaGlzIGlzIGEgZ2hvc3Qgc3lzY2FsbCBwcml2YXRlIHRvIHRoZSBrZXJuZWwuICBPbmx5IHRoZQorICogX19rdXNlcl9jbXB4Y2hnIGNvZGUgaW4gZW50cnktYXJtdi5TIHNob3VsZCBiZSBhd2FyZSBvZiBpdHMKKyAqIGV4aXN0ZW5jZS4gIERvbid0IGV2ZXIgdXNlIHRoaXMgZnJvbSB1c2VyIGNvZGUuCisgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgc3lzY2FsbHMgYXJlIG9ic29sZXRlIGFuZCBubyBsb25nZXIgYXZhaWxhYmxlIGZvciBFQUJJLgorICovCisjaWYgZGVmaW5lZChfX0FSTV9FQUJJX18pICYmICFkZWZpbmVkKF9fS0VSTkVMX18pCisjdW5kZWYgX19OUl90aW1lCisjdW5kZWYgX19OUl91bW91bnQKKyN1bmRlZiBfX05SX3N0aW1lCisjdW5kZWYgX19OUl9hbGFybQorI3VuZGVmIF9fTlJfdXRpbWUKKyN1bmRlZiBfX05SX2dldHJsaW1pdAorI3VuZGVmIF9fTlJfc2VsZWN0CisjdW5kZWYgX19OUl9yZWFkZGlyCisjdW5kZWYgX19OUl9tbWFwCisjdW5kZWYgX19OUl9zb2NrZXRjYWxsCisjdW5kZWYgX19OUl9zeXNjYWxsCisjdW5kZWYgX19OUl9pcGMKKyNlbmRpZgorCisjZW5kaWYgLyogX19BU01fQVJNX1VOSVNURF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNzZXJ0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYXNzZXJ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQxZjQzNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9hc3NlcnQuaApAQCAtMCwwICsxLDExNSBAQAorLyogQ29weXJpZ2h0IChDKSAxOTkxLDE5OTIsMTk5NC0yMDAxLDIwMDMsMjAwNCwyMDA3CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyoKKyAqCUlTTyBDOTkgU3RhbmRhcmQ6IDcuMiBEaWFnbm9zdGljcwk8YXNzZXJ0Lmg+CisgKi8KKworI2lmZGVmCV9BU1NFUlRfSAorCisjIHVuZGVmCV9BU1NFUlRfSAorIyB1bmRlZglhc3NlcnQKKyMgdW5kZWYgX19BU1NFUlRfVk9JRF9DQVNUCisKKyMgaWZkZWYJX19VU0VfR05VCisjICB1bmRlZiBhc3NlcnRfcGVycm9yCisjIGVuZGlmCisKKyNlbmRpZiAvKiBhc3NlcnQuaAkqLworCisjZGVmaW5lCV9BU1NFUlRfSAkxCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgX19HTlVDX1BSRVJFUSAoMiw5NSkKKyMgZGVmaW5lIF9fQVNTRVJUX1ZPSURfQ0FTVCBzdGF0aWNfY2FzdDx2b2lkPgorI2Vsc2UKKyMgZGVmaW5lIF9fQVNTRVJUX1ZPSURfQ0FTVCAodm9pZCkKKyNlbmRpZgorCisvKiB2b2lkIGFzc2VydCAoaW50IGV4cHJlc3Npb24pOworCisgICBJZiBOREVCVUcgaXMgZGVmaW5lZCwgZG8gbm90aGluZy4KKyAgIElmIG5vdCwgYW5kIEVYUFJFU1NJT04gaXMgemVybywgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBhbmQgYWJvcnQuICAqLworCisjaWZkZWYJTkRFQlVHCisKKyMgZGVmaW5lIGFzc2VydChleHByKQkJKF9fQVNTRVJUX1ZPSURfQ0FTVCAoMCkpCisKKy8qIHZvaWQgYXNzZXJ0X3BlcnJvciAoaW50IGVycm51bSk7CisKKyAgIElmIE5ERUJVRyBpcyBkZWZpbmVkLCBkbyBub3RoaW5nLiAgSWYgbm90LCBhbmQgRVJSTlVNIGlzIG5vdCB6ZXJvLCBwcmludCBhbgorICAgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSBlcnJvciB0ZXh0IGZvciBFUlJOVU0gYW5kIGFib3J0LgorICAgKFRoaXMgaXMgYSBHTlUgZXh0ZW5zaW9uLikgKi8KKworIyBpZmRlZglfX1VTRV9HTlUKKyMgIGRlZmluZSBhc3NlcnRfcGVycm9yKGVycm51bSkJKF9fQVNTRVJUX1ZPSURfQ0FTVCAoMCkpCisjIGVuZGlmCisKKyNlbHNlIC8qIE5vdCBOREVCVUcuICAqLworCitfX0JFR0lOX0RFQ0xTCisKKy8qIFRoaXMgcHJpbnRzIGFuICJBc3NlcnRpb24gZmFpbGVkIiBtZXNzYWdlIGFuZCBhYm9ydHMuICAqLworZXh0ZXJuIHZvaWQgX19hc3NlcnRfZmFpbCAoX19jb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgX19jb25zdCBjaGFyICpfX2ZpbGUsCisJCQkgICB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOworCisvKiBMaWtld2lzZSwgYnV0IHByaW50cyB0aGUgZXJyb3IgdGV4dCBmb3IgRVJSTlVNLiAgKi8KK2V4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9fY29uc3QgY2hhciAqX19maWxlLAorCQkJCSAgdW5zaWduZWQgaW50IF9fbGluZSwKKwkJCQkgIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CisKKworLyogVGhlIGZvbGxvd2luZyBpcyBub3QgYXQgYWxsIHVzZWQgaGVyZSBidXQgbmVlZGVkIGZvciBzdGFuZGFyZAorICAgY29tcGxpYW5jZS4gICovCitleHRlcm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fbGluZSkKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CisKKworX19FTkRfREVDTFMKKworIyBkZWZpbmUgYXNzZXJ0KGV4cHIpCQkJCQkJCVwKKyAgKChleHByKQkJCQkJCQkJXAorICAgPyBfX0FTU0VSVF9WT0lEX0NBU1QgKDApCQkJCQkJXAorICAgOiBfX2Fzc2VydF9mYWlsIChfX1NUUklORyhleHByKSwgX19GSUxFX18sIF9fTElORV9fLCBfX0FTU0VSVF9GVU5DVElPTikpCisKKyMgaWZkZWYJX19VU0VfR05VCisjICBkZWZpbmUgYXNzZXJ0X3BlcnJvcihlcnJudW0pCQkJCQkJXAorICAoIShlcnJudW0pCQkJCQkJCQlcCisgICA/IF9fQVNTRVJUX1ZPSURfQ0FTVCAoMCkJCQkJCQlcCisgICA6IF9fYXNzZXJ0X3BlcnJvcl9mYWlsICgoZXJybnVtKSwgX19GSUxFX18sIF9fTElORV9fLCBfX0FTU0VSVF9GVU5DVElPTikpCisjIGVuZGlmCisKKy8qIFZlcnNpb24gMi40IGFuZCBsYXRlciBvZiBHQ0MgZGVmaW5lIGEgbWFnaWNhbCB2YXJpYWJsZSBgX19QUkVUVFlfRlVOQ1RJT05fXycKKyAgIHdoaWNoIGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiBjdXJyZW50bHkgYmVpbmcgZGVmaW5lZC4KKyAgIFRoaXMgaXMgYnJva2VuIGluIEcrKyBiZWZvcmUgdmVyc2lvbiAyLjYuCisgICBDOXggaGFzIGEgc2ltaWxhciB2YXJpYWJsZSBjYWxsZWQgX19mdW5jX18sIGJ1dCBwcmVmZXIgdGhlIEdDQyBvbmUgc2luY2UKKyAgIGl0IGRlbWFuZ2xlcyBDKysgZnVuY3Rpb24gbmFtZXMuICAqLworIyBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzID8gX19HTlVDX1BSRVJFUSAoMiwgNikgOiBfX0dOVUNfUFJFUkVRICgyLCA0KQorIyAgIGRlZmluZSBfX0FTU0VSVF9GVU5DVElPTglfX1BSRVRUWV9GVU5DVElPTl9fCisjIGVsc2UKKyMgIGlmIGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKyMgICBkZWZpbmUgX19BU1NFUlRfRlVOQ1RJT04JX19mdW5jX18KKyMgIGVsc2UKKyMgICBkZWZpbmUgX19BU1NFUlRfRlVOQ1RJT04JKChfX2NvbnN0IGNoYXIgKikgMCkKKyMgIGVuZGlmCisjIGVuZGlmCisKKyNlbmRpZiAvKiBOREVCVUcuICAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvYS5vdXQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2Eub3V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU3ZmIwMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2Eub3V0LmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fQV9PVVRfR05VX0hfXworIyBlcnJvciAiTmV2ZXIgdXNlIDxiaXRzL2Eub3V0Lmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxhLm91dC5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisvKiBTaWduYWwgdG8gdXNlcnMgb2YgdGhpcyBoZWFkZXIgdGhhdCB0aGlzIGFyY2hpdGVjdHVyZSByZWFsbHkgZG9lc24ndAorICAgc3VwcG9ydCBhLm91dCBiaW5hcnkgZm9ybWF0LiAgKi8KKyNkZWZpbmUgX19OT19BX09VVF9TVVBQT1JUIDEKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2J5dGVzd2FwLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9ieXRlc3dhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1Y2I5NDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9ieXRlc3dhcC5oCkBAIC0wLDAgKzEsODcgQEAKKy8qIE1hY3JvcyB0byBzd2FwIHRoZSBvcmRlciBvZiBieXRlcyBpbiBpbnRlZ2VyIHZhbHVlcy4KKyAgIENvcHlyaWdodCAoQykgMTk5NywxOTk4LDIwMDAtMjAwMiwyMDA1LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZiAhZGVmaW5lZCBfQllURVNXQVBfSCAmJiAhZGVmaW5lZCBfTkVUSU5FVF9JTl9IICYmICFkZWZpbmVkIF9FTkRJQU5fSAorIyBlcnJvciAiTmV2ZXIgdXNlIDxiaXRzL2J5dGVzd2FwLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxieXRlc3dhcC5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9CSVRTX0JZVEVTV0FQX0gKKyNkZWZpbmUgX0JJVFNfQllURVNXQVBfSCAxCisKKy8qIFN3YXAgYnl0ZXMgaW4gMTYgYml0IHZhbHVlLiAgKi8KKyNkZWZpbmUgX19ic3dhcF9jb25zdGFudF8xNih4KSBcCisgICAgICgoKCh4KSA+PiA4KSAmIDB4ZmZ1KSB8ICgoKHgpICYgMHhmZnUpIDw8IDgpKQorCisjaWZkZWYgX19HTlVDX18KKyMgZGVmaW5lIF9fYnN3YXBfMTYoeCkgXAorICAgIChfX2V4dGVuc2lvbl9fCQkJCQkJCSAgICAgIFwKKyAgICAgKHsgdW5zaWduZWQgc2hvcnQgaW50IF9fYnN4ID0gKHgpOyBfX2Jzd2FwX2NvbnN0YW50XzE2IChfX2JzeCk7IH0pKQorI2Vsc2UKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBzaG9ydCBpbnQKK19fYnN3YXBfMTYgKHVuc2lnbmVkIHNob3J0IGludCBfX2JzeCkKK3sKKyAgcmV0dXJuIF9fYnN3YXBfY29uc3RhbnRfMTYgKF9fYnN4KTsKK30KKyNlbmRpZgorCisvKiBTd2FwIGJ5dGVzIGluIDMyIGJpdCB2YWx1ZS4gICovCisjZGVmaW5lIF9fYnN3YXBfY29uc3RhbnRfMzIoeCkgXAorICAgICAoKCgoeCkgJiAweGZmMDAwMDAwdSkgPj4gMjQpIHwgKCgoeCkgJiAweDAwZmYwMDAwdSkgPj4gIDgpIHwJICAgICAgXAorICAgICAgKCgoeCkgJiAweDAwMDBmZjAwdSkgPDwgIDgpIHwgKCgoeCkgJiAweDAwMDAwMGZmdSkgPDwgMjQpKQorCisjaWZkZWYgX19HTlVDX18KKyMgZGVmaW5lIF9fYnN3YXBfMzIoeCkgXAorICAoX19leHRlbnNpb25fXwkJCQkJCQkgICAgICBcCisgICAoeyByZWdpc3RlciB1bnNpZ25lZCBpbnQgX19ic3ggPSAoeCk7IF9fYnN3YXBfY29uc3RhbnRfMzIgKF9fYnN4KTsgfSkpCisjZWxzZQorc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorX19ic3dhcF8zMiAodW5zaWduZWQgaW50IF9fYnN4KQoreworICByZXR1cm4gX19ic3dhcF9jb25zdGFudF8zMiAoX19ic3gpOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIF9fR05VQ19fICYmIF9fR05VQ19fID49IDIKKy8qIFN3YXAgYnl0ZXMgaW4gNjQgYml0IHZhbHVlLiAgKi8KKyMgZGVmaW5lIF9fYnN3YXBfY29uc3RhbnRfNjQoeCkgXAorICAgICAoKCgoeCkgJiAweGZmMDAwMDAwMDAwMDAwMDB1bGwpID4+IDU2KQkJCQkgICAgICBcCisgICAgICB8ICgoKHgpICYgMHgwMGZmMDAwMDAwMDAwMDAwdWxsKSA+PiA0MCkJCQkJICAgICAgXAorICAgICAgfCAoKCh4KSAmIDB4MDAwMGZmMDAwMDAwMDAwMHVsbCkgPj4gMjQpCQkJCSAgICAgIFwKKyAgICAgIHwgKCgoeCkgJiAweDAwMDAwMGZmMDAwMDAwMDB1bGwpID4+IDgpCQkJCSAgICAgIFwKKyAgICAgIHwgKCgoeCkgJiAweDAwMDAwMDAwZmYwMDAwMDB1bGwpIDw8IDgpCQkJCSAgICAgIFwKKyAgICAgIHwgKCgoeCkgJiAweDAwMDAwMDAwMDBmZjAwMDB1bGwpIDw8IDI0KQkJCQkgICAgICBcCisgICAgICB8ICgoKHgpICYgMHgwMDAwMDAwMDAwMDBmZjAwdWxsKSA8PCA0MCkJCQkJICAgICAgXAorICAgICAgfCAoKCh4KSAmIDB4MDAwMDAwMDAwMDAwMDBmZnVsbCkgPDwgNTYpKQorCisjIGRlZmluZSBfX2Jzd2FwXzY0KHgpIFwKKyAgICAgKF9fZXh0ZW5zaW9uX18JCQkJCQkJICAgICAgXAorICAgICAgKHsgdW5pb24geyBfX2V4dGVuc2lvbl9fIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19sbDsJCSAgICAgIFwKKwkJIHVuc2lnbmVkIGludCBfX2xbMl07IH0gX193LCBfX3I7CQkJICAgICAgXAorICAgICAgICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wICh4KSkJCQkJCSAgICAgIFwKKwkgICBfX3IuX19sbCA9IF9fYnN3YXBfY29uc3RhbnRfNjQgKHgpOwkJCQkgICAgICBcCisJIGVsc2UJCQkJCQkJCSAgICAgIFwKKwkgICB7CQkJCQkJCQkgICAgICBcCisJICAgICBfX3cuX19sbCA9ICh4KTsJCQkJCQkgICAgICBcCisJICAgICBfX3IuX19sWzBdID0gX19ic3dhcF8zMiAoX193Ll9fbFsxXSk7CQkJICAgICAgXAorCSAgICAgX19yLl9fbFsxXSA9IF9fYnN3YXBfMzIgKF9fdy5fX2xbMF0pOwkJCSAgICAgIFwKKwkgICB9CQkJCQkJCQkgICAgICBcCisJIF9fci5fX2xsOyB9KSkKKyNlbmRpZgorCisjZW5kaWYgLyogX0JJVFNfQllURVNXQVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvY21hdGhjYWxscy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvY21hdGhjYWxscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljN2ZkYmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9jbWF0aGNhbGxzLmgKQEAgLTAsMCArMSwxNTkgQEAKKy8qIFByb3RvdHlwZSBkZWNsYXJhdGlvbnMgZm9yIGNvbXBsZXggbWF0aCBmdW5jdGlvbnM7CisgICBoZWxwZXIgZmlsZSBmb3IgPGNvbXBsZXguaD4uCisgICBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDIwMDEsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qIE5PVEU6IEJlY2F1c2Ugb2YgdGhlIHNwZWNpYWwgd2F5IHRoaXMgZmlsZSBpcyB1c2VkIGJ5IDxjb21wbGV4Lmg+LCB0aGlzCisgICBmaWxlIG11c3QgTk9UIGJlIHByb3RlY3RlZCBmcm9tIG11bHRpcGxlIGluY2x1c2lvbiBhcyBoZWFkZXIgZmlsZXMKKyAgIHVzdWFsbHkgYXJlLgorCisgICBUaGlzIGZpbGUgcHJvdmlkZXMgcHJvdG90eXBlIGRlY2xhcmF0aW9ucyBmb3IgdGhlIG1hdGggZnVuY3Rpb25zLgorICAgTW9zdCBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIHVzaW5nIHRoZSBtYWNybzoKKworICAgX19NQVRIQ0FMTCAoTkFNRSwgKEFSR1MuLi4pKTsKKworICAgVGhpcyBtZWFucyB0aGVyZSBpcyBhIGZ1bmN0aW9uIGBOQU1FJyByZXR1cm5pbmcgYGRvdWJsZScgYW5kIGEgZnVuY3Rpb24KKyAgIGBOQU1FZicgcmV0dXJuaW5nIGBmbG9hdCcuICBFYWNoIHBsYWNlIGBfTWRvdWJsZV8nIGFwcGVhcnMgaW4gdGhlCisgICBwcm90b3R5cGUsIHRoYXQgaXMgYWN0dWFsbHkgYGRvdWJsZScgaW4gdGhlIHByb3RvdHlwZSBmb3IgYE5BTUUnIGFuZAorICAgYGZsb2F0JyBpbiB0aGUgcHJvdG90eXBlIGZvciBgTkFNRWYnLiAgUmVlbnRyYW50IHZhcmlhbnQgZnVuY3Rpb25zIGFyZQorICAgY2FsbGVkIGBOQU1FX3InIGFuZCBgTkFNRWZfcicuCisKKyAgIEZ1bmN0aW9ucyByZXR1cm5pbmcgb3RoZXIgdHlwZXMgbGlrZSBgaW50JyBhcmUgZGVjbGFyZWQgdXNpbmcgdGhlIG1hY3JvOgorCisgICBfX01BVEhERUNMIChUWVBFLCBOQU1FLCAoQVJHUy4uLikpOworCisgICBUaGlzIGlzIGp1c3QgbGlrZSBfX01BVEhDQUxMIGJ1dCBmb3IgYSBmdW5jdGlvbiByZXR1cm5pbmcgYFRZUEUnCisgICBpbnN0ZWFkIG9mIGBfTWRvdWJsZV8nLiAgSW4gYWxsIG9mIHRoZXNlIGNhc2VzLCB0aGVyZSBpcyBzdGlsbAorICAgYm90aCBhIGBOQU1FJyBhbmQgYSBgTkFNRWYnIHRoYXQgdGFrZXMgYGZsb2F0JyBhcmd1bWVudHMuICAqLworCisjaWZuZGVmIF9DT01QTEVYX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDxiaXRzL2NtYXRoY2FsbHMuaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGNvbXBsZXguaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2RlZmluZSBfTWRvdWJsZV9jb21wbGV4XyBfTWRvdWJsZV8gX0NvbXBsZXgKKworCisvKiBUcmlnb25vbWV0cmljIGZ1bmN0aW9ucy4gICovCisKKy8qIEFyYyBjb3NpbmUgb2YgWi4gICovCitfX01BVEhDQUxMIChjYWNvcywgKF9NZG91YmxlX2NvbXBsZXhfIF9feikpOworLyogQXJjIHNpbmUgb2YgWi4gICovCitfX01BVEhDQUxMIChjYXNpbiwgKF9NZG91YmxlX2NvbXBsZXhfIF9feikpOworLyogQXJjIHRhbmdlbnQgb2YgWi4gICovCitfX01BVEhDQUxMIChjYXRhbiwgKF9NZG91YmxlX2NvbXBsZXhfIF9feikpOworCisvKiBDb3NpbmUgb2YgWi4gICovCitfX01BVEhDQUxMIChjY29zLCAoX01kb3VibGVfY29tcGxleF8gX196KSk7CisvKiBTaW5lIG9mIFouICAqLworX19NQVRIQ0FMTCAoY3NpbiwgKF9NZG91YmxlX2NvbXBsZXhfIF9feikpOworLyogVGFuZ2VudCBvZiBaLiAgKi8KK19fTUFUSENBTEwgKGN0YW4sIChfTWRvdWJsZV9jb21wbGV4XyBfX3opKTsKKworCisvKiBIeXBlcmJvbGljIGZ1bmN0aW9ucy4gICovCisKKy8qIEh5cGVyYm9saWMgYXJjIGNvc2luZSBvZiBaLiAgKi8KK19fTUFUSENBTEwgKGNhY29zaCwgKF9NZG91YmxlX2NvbXBsZXhfIF9feikpOworLyogSHlwZXJib2xpYyBhcmMgc2luZSBvZiBaLiAgKi8KK19fTUFUSENBTEwgKGNhc2luaCwgKF9NZG91YmxlX2NvbXBsZXhfIF9feikpOworLyogSHlwZXJib2xpYyBhcmMgdGFuZ2VudCBvZiBaLiAgKi8KK19fTUFUSENBTEwgKGNhdGFuaCwgKF9NZG91YmxlX2NvbXBsZXhfIF9feikpOworCisvKiBIeXBlcmJvbGljIGNvc2luZSBvZiBaLiAgKi8KK19fTUFUSENBTEwgKGNjb3NoLCAoX01kb3VibGVfY29tcGxleF8gX196KSk7CisvKiBIeXBlcmJvbGljIHNpbmUgb2YgWi4gICovCitfX01BVEhDQUxMIChjc2luaCwgKF9NZG91YmxlX2NvbXBsZXhfIF9feikpOworLyogSHlwZXJib2xpYyB0YW5nZW50IG9mIFouICAqLworX19NQVRIQ0FMTCAoY3RhbmgsIChfTWRvdWJsZV9jb21wbGV4XyBfX3opKTsKKworCisvKiBFeHBvbmVudGlhbCBhbmQgbG9nYXJpdGhtaWMgZnVuY3Rpb25zLiAgKi8KKworLyogRXhwb25lbnRpYWwgZnVuY3Rpb24gb2YgWi4gICovCitfX01BVEhDQUxMIChjZXhwLCAoX01kb3VibGVfY29tcGxleF8gX196KSk7CisKKy8qIE5hdHVyYWwgbG9nYXJpdGhtIG9mIFouICAqLworX19NQVRIQ0FMTCAoY2xvZywgKF9NZG91YmxlX2NvbXBsZXhfIF9feikpOworCisjaWZkZWYgX19VU0VfR05VCisvKiBUaGUgYmFzZSAxMCBsb2dhcml0aG0gaXMgbm90IGRlZmluZWQgYnkgdGhlIHN0YW5kYXJkIGJ1dCB0byBpbXBsZW1lbnQKKyAgIHRoZSBzdGFuZGFyZCBDKysgbGlicmFyeSBpdCBpcyBoYW5keS4gICovCitfX01BVEhDQUxMIChjbG9nMTAsIChfTWRvdWJsZV9jb21wbGV4XyBfX3opKTsKKyNlbmRpZgorCisvKiBQb3dlciBmdW5jdGlvbnMuICAqLworCisvKiBSZXR1cm4gWCB0byB0aGUgWSBwb3dlci4gICovCitfX01BVEhDQUxMIChjcG93LCAoX01kb3VibGVfY29tcGxleF8gX194LCBfTWRvdWJsZV9jb21wbGV4XyBfX3kpKTsKKworLyogUmV0dXJuIHRoZSBzcXVhcmUgcm9vdCBvZiBaLiAgKi8KK19fTUFUSENBTEwgKGNzcXJ0LCAoX01kb3VibGVfY29tcGxleF8gX196KSk7CisKKworLyogQWJzb2x1dGUgdmFsdWUsIGNvbmp1Z2F0ZXMsIGFuZCBwcm9qZWN0aW9uLiAgKi8KKworLyogQWJzb2x1dGUgdmFsdWUgb2YgWi4gICovCitfX01BVEhERUNMIChfTWRvdWJsZV8sY2FicywgKF9NZG91YmxlX2NvbXBsZXhfIF9feikpOworCisvKiBBcmd1bWVudCB2YWx1ZSBvZiBaLiAgKi8KK19fTUFUSERFQ0wgKF9NZG91YmxlXyxjYXJnLCAoX01kb3VibGVfY29tcGxleF8gX196KSk7CisKKy8qIENvbXBsZXggY29uanVnYXRlIG9mIFouICAqLworX19NQVRIQ0FMTCAoY29uaiwgKF9NZG91YmxlX2NvbXBsZXhfIF9feikpOworCisvKiBQcm9qZWN0aW9uIG9mIFogb250byB0aGUgUmllbWFubiBzcGhlcmUuICAqLworX19NQVRIQ0FMTCAoY3Byb2osIChfTWRvdWJsZV9jb21wbGV4XyBfX3opKTsKKworCisvKiBEZWNvbXBvc2luZyBjb21wbGV4IHZhbHVlcy4gICovCisKKy8qIEltYWdpbmFyeSBwYXJ0IG9mIFouICAqLworX19NQVRIREVDTCAoX01kb3VibGVfLGNpbWFnLCAoX01kb3VibGVfY29tcGxleF8gX196KSk7CisKKy8qIFJlYWwgcGFydCBvZiBaLiAgKi8KK19fTUFUSERFQ0wgKF9NZG91YmxlXyxjcmVhbCwgKF9NZG91YmxlX2NvbXBsZXhfIF9feikpOworCisKKy8qIE5vdyBzb21lIG9wdGltaXplZCB2ZXJzaW9ucy4gIEdDQyBoYXMgaGFuZHkgbm90YXRpb25zIGZvciB0aGVzZQorICAgZnVuY3Rpb25zLiAgUmVjZW50IEdDQyBoYW5kbGVzIHRoZXNlIGFzIGJ1aWx0aW4gZnVuY3Rpb25zIHNvIGRvZXMKKyAgIG5vdCBuZWVkIGlubGluZXMuICAqLworI2lmIGRlZmluZWQgX19HTlVDX18gJiYgIV9fR05VQ19QUkVSRVEgKDIsIDk3KSAmJiBkZWZpbmVkIF9fT1BUSU1JWkVfXyBcCisgICAgJiYgZGVmaW5lZCBfX2V4dGVybl9pbmxpbmUKKworLyogSW1hZ2luYXJ5IHBhcnQgb2YgWi4gICovCitfX2V4dGVybl9pbmxpbmUgX01kb3VibGVfCitfX01BVEhfUFJFQ05BTUUoY2ltYWcpIChfTWRvdWJsZV9jb21wbGV4XyBfX3opIF9fVEhST1cKK3sKKyAgcmV0dXJuIF9faW1hZ19fIF9fejsKK30KKworLyogUmVhbCBwYXJ0IG9mIFouICAqLworX19leHRlcm5faW5saW5lIF9NZG91YmxlXworX19NQVRIX1BSRUNOQU1FKGNyZWFsKSAoX01kb3VibGVfY29tcGxleF8gX196KSBfX1RIUk9XCit7CisgIHJldHVybiBfX3JlYWxfXyBfX3o7Cit9CisKKy8qIENvbXBsZXggY29uanVnYXRlIG9mIFouICAqLworX19leHRlcm5faW5saW5lIF9NZG91YmxlX2NvbXBsZXhfCitfX01BVEhfUFJFQ05BTUUoY29uaikgKF9NZG91YmxlX2NvbXBsZXhfIF9feikgX19USFJPVworeworICByZXR1cm4gX19leHRlbnNpb25fXyB+X196OworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2NvbmZuYW1lLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9jb25mbmFtZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwYjUxYWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9jb25mbmFtZS5oCkBAIC0wLDAgKzEsNjAyIEBACisvKiBgc3lzY29uZicsIGBwYXRoY29uZicsIGFuZCBgY29uZnN0cicgTkFNRSB2YWx1ZXMuICBHZW5lcmljIHZlcnNpb24uCisgICBDb3B5cmlnaHQgKEMpIDE5OTMsMTk5NS0xOTk4LDIwMDAsMjAwMSwyMDAzLDIwMDQsMjAwNworICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1VOSVNURF9ICisjIGVycm9yICJOZXZlciB1c2UgPGJpdHMvY29uZm5hbWUuaD4gZGlyZWN0bHk7IGluY2x1ZGUgPHVuaXN0ZC5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisvKiBWYWx1ZXMgZm9yIHRoZSBOQU1FIGFyZ3VtZW50IHRvIGBwYXRoY29uZicgYW5kIGBmcGF0aGNvbmYnLiAgKi8KK2VudW0KKyAgeworICAgIF9QQ19MSU5LX01BWCwKKyNkZWZpbmUJX1BDX0xJTktfTUFYCQkJX1BDX0xJTktfTUFYCisgICAgX1BDX01BWF9DQU5PTiwKKyNkZWZpbmUJX1BDX01BWF9DQU5PTgkJCV9QQ19NQVhfQ0FOT04KKyAgICBfUENfTUFYX0lOUFVULAorI2RlZmluZQlfUENfTUFYX0lOUFVUCQkJX1BDX01BWF9JTlBVVAorICAgIF9QQ19OQU1FX01BWCwKKyNkZWZpbmUJX1BDX05BTUVfTUFYCQkJX1BDX05BTUVfTUFYCisgICAgX1BDX1BBVEhfTUFYLAorI2RlZmluZQlfUENfUEFUSF9NQVgJCQlfUENfUEFUSF9NQVgKKyAgICBfUENfUElQRV9CVUYsCisjZGVmaW5lCV9QQ19QSVBFX0JVRgkJCV9QQ19QSVBFX0JVRgorICAgIF9QQ19DSE9XTl9SRVNUUklDVEVELAorI2RlZmluZQlfUENfQ0hPV05fUkVTVFJJQ1RFRAkJX1BDX0NIT1dOX1JFU1RSSUNURUQKKyAgICBfUENfTk9fVFJVTkMsCisjZGVmaW5lCV9QQ19OT19UUlVOQwkJCV9QQ19OT19UUlVOQworICAgIF9QQ19WRElTQUJMRSwKKyNkZWZpbmUgX1BDX1ZESVNBQkxFCQkJX1BDX1ZESVNBQkxFCisgICAgX1BDX1NZTkNfSU8sCisjZGVmaW5lCV9QQ19TWU5DX0lPCQkJX1BDX1NZTkNfSU8KKyAgICBfUENfQVNZTkNfSU8sCisjZGVmaW5lCV9QQ19BU1lOQ19JTwkJCV9QQ19BU1lOQ19JTworICAgIF9QQ19QUklPX0lPLAorI2RlZmluZQlfUENfUFJJT19JTwkJCV9QQ19QUklPX0lPCisgICAgX1BDX1NPQ0tfTUFYQlVGLAorI2RlZmluZQlfUENfU09DS19NQVhCVUYJCQlfUENfU09DS19NQVhCVUYKKyAgICBfUENfRklMRVNJWkVCSVRTLAorI2RlZmluZSBfUENfRklMRVNJWkVCSVRTCQlfUENfRklMRVNJWkVCSVRTCisgICAgX1BDX1JFQ19JTkNSX1hGRVJfU0laRSwKKyNkZWZpbmUgX1BDX1JFQ19JTkNSX1hGRVJfU0laRQkJX1BDX1JFQ19JTkNSX1hGRVJfU0laRQorICAgIF9QQ19SRUNfTUFYX1hGRVJfU0laRSwKKyNkZWZpbmUgX1BDX1JFQ19NQVhfWEZFUl9TSVpFCQlfUENfUkVDX01BWF9YRkVSX1NJWkUKKyAgICBfUENfUkVDX01JTl9YRkVSX1NJWkUsCisjZGVmaW5lIF9QQ19SRUNfTUlOX1hGRVJfU0laRQkJX1BDX1JFQ19NSU5fWEZFUl9TSVpFCisgICAgX1BDX1JFQ19YRkVSX0FMSUdOLAorI2RlZmluZSBfUENfUkVDX1hGRVJfQUxJR04JCV9QQ19SRUNfWEZFUl9BTElHTgorICAgIF9QQ19BTExPQ19TSVpFX01JTiwKKyNkZWZpbmUgX1BDX0FMTE9DX1NJWkVfTUlOCQlfUENfQUxMT0NfU0laRV9NSU4KKyAgICBfUENfU1lNTElOS19NQVgsCisjZGVmaW5lIF9QQ19TWU1MSU5LX01BWAkJCV9QQ19TWU1MSU5LX01BWAorICAgIF9QQ18yX1NZTUxJTktTCisjZGVmaW5lIF9QQ18yX1NZTUxJTktTCQkJX1BDXzJfU1lNTElOS1MKKyAgfTsKKworLyogVmFsdWVzIGZvciB0aGUgYXJndW1lbnQgdG8gYHN5c2NvbmYnLiAgKi8KK2VudW0KKyAgeworICAgIF9TQ19BUkdfTUFYLAorI2RlZmluZQlfU0NfQVJHX01BWAkJCV9TQ19BUkdfTUFYCisgICAgX1NDX0NISUxEX01BWCwKKyNkZWZpbmUJX1NDX0NISUxEX01BWAkJCV9TQ19DSElMRF9NQVgKKyAgICBfU0NfQ0xLX1RDSywKKyNkZWZpbmUJX1NDX0NMS19UQ0sJCQlfU0NfQ0xLX1RDSworICAgIF9TQ19OR1JPVVBTX01BWCwKKyNkZWZpbmUJX1NDX05HUk9VUFNfTUFYCQkJX1NDX05HUk9VUFNfTUFYCisgICAgX1NDX09QRU5fTUFYLAorI2RlZmluZQlfU0NfT1BFTl9NQVgJCQlfU0NfT1BFTl9NQVgKKyAgICBfU0NfU1RSRUFNX01BWCwKKyNkZWZpbmUJX1NDX1NUUkVBTV9NQVgJCQlfU0NfU1RSRUFNX01BWAorICAgIF9TQ19UWk5BTUVfTUFYLAorI2RlZmluZQlfU0NfVFpOQU1FX01BWAkJCV9TQ19UWk5BTUVfTUFYCisgICAgX1NDX0pPQl9DT05UUk9MLAorI2RlZmluZQlfU0NfSk9CX0NPTlRST0wJCQlfU0NfSk9CX0NPTlRST0wKKyAgICBfU0NfU0FWRURfSURTLAorI2RlZmluZQlfU0NfU0FWRURfSURTCQkJX1NDX1NBVkVEX0lEUworICAgIF9TQ19SRUFMVElNRV9TSUdOQUxTLAorI2RlZmluZQlfU0NfUkVBTFRJTUVfU0lHTkFMUwkJX1NDX1JFQUxUSU1FX1NJR05BTFMKKyAgICBfU0NfUFJJT1JJVFlfU0NIRURVTElORywKKyNkZWZpbmUJX1NDX1BSSU9SSVRZX1NDSEVEVUxJTkcJCV9TQ19QUklPUklUWV9TQ0hFRFVMSU5HCisgICAgX1NDX1RJTUVSUywKKyNkZWZpbmUJX1NDX1RJTUVSUwkJCV9TQ19USU1FUlMKKyAgICBfU0NfQVNZTkNIUk9OT1VTX0lPLAorI2RlZmluZQlfU0NfQVNZTkNIUk9OT1VTX0lPCQlfU0NfQVNZTkNIUk9OT1VTX0lPCisgICAgX1NDX1BSSU9SSVRJWkVEX0lPLAorI2RlZmluZQlfU0NfUFJJT1JJVElaRURfSU8JCV9TQ19QUklPUklUSVpFRF9JTworICAgIF9TQ19TWU5DSFJPTklaRURfSU8sCisjZGVmaW5lCV9TQ19TWU5DSFJPTklaRURfSU8JCV9TQ19TWU5DSFJPTklaRURfSU8KKyAgICBfU0NfRlNZTkMsCisjZGVmaW5lCV9TQ19GU1lOQwkJCV9TQ19GU1lOQworICAgIF9TQ19NQVBQRURfRklMRVMsCisjZGVmaW5lCV9TQ19NQVBQRURfRklMRVMJCV9TQ19NQVBQRURfRklMRVMKKyAgICBfU0NfTUVNTE9DSywKKyNkZWZpbmUJX1NDX01FTUxPQ0sJCQlfU0NfTUVNTE9DSworICAgIF9TQ19NRU1MT0NLX1JBTkdFLAorI2RlZmluZQlfU0NfTUVNTE9DS19SQU5HRQkJX1NDX01FTUxPQ0tfUkFOR0UKKyAgICBfU0NfTUVNT1JZX1BST1RFQ1RJT04sCisjZGVmaW5lCV9TQ19NRU1PUllfUFJPVEVDVElPTgkJX1NDX01FTU9SWV9QUk9URUNUSU9OCisgICAgX1NDX01FU1NBR0VfUEFTU0lORywKKyNkZWZpbmUJX1NDX01FU1NBR0VfUEFTU0lORwkJX1NDX01FU1NBR0VfUEFTU0lORworICAgIF9TQ19TRU1BUEhPUkVTLAorI2RlZmluZQlfU0NfU0VNQVBIT1JFUwkJCV9TQ19TRU1BUEhPUkVTCisgICAgX1NDX1NIQVJFRF9NRU1PUllfT0JKRUNUUywKKyNkZWZpbmUJX1NDX1NIQVJFRF9NRU1PUllfT0JKRUNUUwlfU0NfU0hBUkVEX01FTU9SWV9PQkpFQ1RTCisgICAgX1NDX0FJT19MSVNUSU9fTUFYLAorI2RlZmluZQlfU0NfQUlPX0xJU1RJT19NQVgJCV9TQ19BSU9fTElTVElPX01BWAorICAgIF9TQ19BSU9fTUFYLAorI2RlZmluZQlfU0NfQUlPX01BWAkJCV9TQ19BSU9fTUFYCisgICAgX1NDX0FJT19QUklPX0RFTFRBX01BWCwKKyNkZWZpbmUJX1NDX0FJT19QUklPX0RFTFRBX01BWAkJX1NDX0FJT19QUklPX0RFTFRBX01BWAorICAgIF9TQ19ERUxBWVRJTUVSX01BWCwKKyNkZWZpbmUJX1NDX0RFTEFZVElNRVJfTUFYCQlfU0NfREVMQVlUSU1FUl9NQVgKKyAgICBfU0NfTVFfT1BFTl9NQVgsCisjZGVmaW5lCV9TQ19NUV9PUEVOX01BWAkJCV9TQ19NUV9PUEVOX01BWAorICAgIF9TQ19NUV9QUklPX01BWCwKKyNkZWZpbmUJX1NDX01RX1BSSU9fTUFYCQkJX1NDX01RX1BSSU9fTUFYCisgICAgX1NDX1ZFUlNJT04sCisjZGVmaW5lCV9TQ19WRVJTSU9OCQkJX1NDX1ZFUlNJT04KKyAgICBfU0NfUEFHRVNJWkUsCisjZGVmaW5lCV9TQ19QQUdFU0laRQkJCV9TQ19QQUdFU0laRQorI2RlZmluZQlfU0NfUEFHRV9TSVpFCQkJX1NDX1BBR0VTSVpFCisgICAgX1NDX1JUU0lHX01BWCwKKyNkZWZpbmUJX1NDX1JUU0lHX01BWAkJCV9TQ19SVFNJR19NQVgKKyAgICBfU0NfU0VNX05TRU1TX01BWCwKKyNkZWZpbmUJX1NDX1NFTV9OU0VNU19NQVgJCV9TQ19TRU1fTlNFTVNfTUFYCisgICAgX1NDX1NFTV9WQUxVRV9NQVgsCisjZGVmaW5lCV9TQ19TRU1fVkFMVUVfTUFYCQlfU0NfU0VNX1ZBTFVFX01BWAorICAgIF9TQ19TSUdRVUVVRV9NQVgsCisjZGVmaW5lCV9TQ19TSUdRVUVVRV9NQVgJCV9TQ19TSUdRVUVVRV9NQVgKKyAgICBfU0NfVElNRVJfTUFYLAorI2RlZmluZQlfU0NfVElNRVJfTUFYCQkJX1NDX1RJTUVSX01BWAorCisgICAgLyogVmFsdWVzIGZvciB0aGUgYXJndW1lbnQgdG8gYHN5c2NvbmYnCisgICAgICAgY29ycmVzcG9uZGluZyB0byBfUE9TSVgyXyogc3ltYm9scy4gICovCisgICAgX1NDX0JDX0JBU0VfTUFYLAorI2RlZmluZQlfU0NfQkNfQkFTRV9NQVgJCQlfU0NfQkNfQkFTRV9NQVgKKyAgICBfU0NfQkNfRElNX01BWCwKKyNkZWZpbmUJX1NDX0JDX0RJTV9NQVgJCQlfU0NfQkNfRElNX01BWAorICAgIF9TQ19CQ19TQ0FMRV9NQVgsCisjZGVmaW5lCV9TQ19CQ19TQ0FMRV9NQVgJCV9TQ19CQ19TQ0FMRV9NQVgKKyAgICBfU0NfQkNfU1RSSU5HX01BWCwKKyNkZWZpbmUJX1NDX0JDX1NUUklOR19NQVgJCV9TQ19CQ19TVFJJTkdfTUFYCisgICAgX1NDX0NPTExfV0VJR0hUU19NQVgsCisjZGVmaW5lCV9TQ19DT0xMX1dFSUdIVFNfTUFYCQlfU0NfQ09MTF9XRUlHSFRTX01BWAorICAgIF9TQ19FUVVJVl9DTEFTU19NQVgsCisjZGVmaW5lCV9TQ19FUVVJVl9DTEFTU19NQVgJCV9TQ19FUVVJVl9DTEFTU19NQVgKKyAgICBfU0NfRVhQUl9ORVNUX01BWCwKKyNkZWZpbmUJX1NDX0VYUFJfTkVTVF9NQVgJCV9TQ19FWFBSX05FU1RfTUFYCisgICAgX1NDX0xJTkVfTUFYLAorI2RlZmluZQlfU0NfTElORV9NQVgJCQlfU0NfTElORV9NQVgKKyAgICBfU0NfUkVfRFVQX01BWCwKKyNkZWZpbmUJX1NDX1JFX0RVUF9NQVgJCQlfU0NfUkVfRFVQX01BWAorICAgIF9TQ19DSEFSQ0xBU1NfTkFNRV9NQVgsCisjZGVmaW5lCV9TQ19DSEFSQ0xBU1NfTkFNRV9NQVgJCV9TQ19DSEFSQ0xBU1NfTkFNRV9NQVgKKworICAgIF9TQ18yX1ZFUlNJT04sCisjZGVmaW5lCV9TQ18yX1ZFUlNJT04JCQlfU0NfMl9WRVJTSU9OCisgICAgX1NDXzJfQ19CSU5ELAorI2RlZmluZQlfU0NfMl9DX0JJTkQJCQlfU0NfMl9DX0JJTkQKKyAgICBfU0NfMl9DX0RFViwKKyNkZWZpbmUJX1NDXzJfQ19ERVYJCQlfU0NfMl9DX0RFVgorICAgIF9TQ18yX0ZPUlRfREVWLAorI2RlZmluZQlfU0NfMl9GT1JUX0RFVgkJCV9TQ18yX0ZPUlRfREVWCisgICAgX1NDXzJfRk9SVF9SVU4sCisjZGVmaW5lCV9TQ18yX0ZPUlRfUlVOCQkJX1NDXzJfRk9SVF9SVU4KKyAgICBfU0NfMl9TV19ERVYsCisjZGVmaW5lCV9TQ18yX1NXX0RFVgkJCV9TQ18yX1NXX0RFVgorICAgIF9TQ18yX0xPQ0FMRURFRiwKKyNkZWZpbmUJX1NDXzJfTE9DQUxFREVGCQkJX1NDXzJfTE9DQUxFREVGCisKKyAgICBfU0NfUElJLAorI2RlZmluZQlfU0NfUElJCQkJCV9TQ19QSUkKKyAgICBfU0NfUElJX1hUSSwKKyNkZWZpbmUJX1NDX1BJSV9YVEkJCQlfU0NfUElJX1hUSQorICAgIF9TQ19QSUlfU09DS0VULAorI2RlZmluZQlfU0NfUElJX1NPQ0tFVAkJCV9TQ19QSUlfU09DS0VUCisgICAgX1NDX1BJSV9JTlRFUk5FVCwKKyNkZWZpbmUJX1NDX1BJSV9JTlRFUk5FVAkJX1NDX1BJSV9JTlRFUk5FVAorICAgIF9TQ19QSUlfT1NJLAorI2RlZmluZQlfU0NfUElJX09TSQkJCV9TQ19QSUlfT1NJCisgICAgX1NDX1BPTEwsCisjZGVmaW5lCV9TQ19QT0xMCQkJX1NDX1BPTEwKKyAgICBfU0NfU0VMRUNULAorI2RlZmluZQlfU0NfU0VMRUNUCQkJX1NDX1NFTEVDVAorICAgIF9TQ19VSU9fTUFYSU9WLAorI2RlZmluZQlfU0NfVUlPX01BWElPVgkJCV9TQ19VSU9fTUFYSU9WCisgICAgX1NDX0lPVl9NQVggPSBfU0NfVUlPX01BWElPViwKKyNkZWZpbmUgX1NDX0lPVl9NQVgJCQlfU0NfSU9WX01BWAorICAgIF9TQ19QSUlfSU5URVJORVRfU1RSRUFNLAorI2RlZmluZQlfU0NfUElJX0lOVEVSTkVUX1NUUkVBTQkJX1NDX1BJSV9JTlRFUk5FVF9TVFJFQU0KKyAgICBfU0NfUElJX0lOVEVSTkVUX0RHUkFNLAorI2RlZmluZQlfU0NfUElJX0lOVEVSTkVUX0RHUkFNCQlfU0NfUElJX0lOVEVSTkVUX0RHUkFNCisgICAgX1NDX1BJSV9PU0lfQ09UUywKKyNkZWZpbmUJX1NDX1BJSV9PU0lfQ09UUwkJX1NDX1BJSV9PU0lfQ09UUworICAgIF9TQ19QSUlfT1NJX0NMVFMsCisjZGVmaW5lCV9TQ19QSUlfT1NJX0NMVFMJCV9TQ19QSUlfT1NJX0NMVFMKKyAgICBfU0NfUElJX09TSV9NLAorI2RlZmluZQlfU0NfUElJX09TSV9NCQkJX1NDX1BJSV9PU0lfTQorICAgIF9TQ19UX0lPVl9NQVgsCisjZGVmaW5lCV9TQ19UX0lPVl9NQVgJCQlfU0NfVF9JT1ZfTUFYCisKKyAgICAvKiBWYWx1ZXMgYWNjb3JkaW5nIHRvIFBPU0lYIDEwMDMuMWMgKFBPU0lYIHRocmVhZHMpLiAgKi8KKyAgICBfU0NfVEhSRUFEUywKKyNkZWZpbmUJX1NDX1RIUkVBRFMJCQlfU0NfVEhSRUFEUworICAgIF9TQ19USFJFQURfU0FGRV9GVU5DVElPTlMsCisjZGVmaW5lIF9TQ19USFJFQURfU0FGRV9GVU5DVElPTlMJX1NDX1RIUkVBRF9TQUZFX0ZVTkNUSU9OUworICAgIF9TQ19HRVRHUl9SX1NJWkVfTUFYLAorI2RlZmluZQlfU0NfR0VUR1JfUl9TSVpFX01BWAkJX1NDX0dFVEdSX1JfU0laRV9NQVgKKyAgICBfU0NfR0VUUFdfUl9TSVpFX01BWCwKKyNkZWZpbmUJX1NDX0dFVFBXX1JfU0laRV9NQVgJCV9TQ19HRVRQV19SX1NJWkVfTUFYCisgICAgX1NDX0xPR0lOX05BTUVfTUFYLAorI2RlZmluZQlfU0NfTE9HSU5fTkFNRV9NQVgJCV9TQ19MT0dJTl9OQU1FX01BWAorICAgIF9TQ19UVFlfTkFNRV9NQVgsCisjZGVmaW5lCV9TQ19UVFlfTkFNRV9NQVgJCV9TQ19UVFlfTkFNRV9NQVgKKyAgICBfU0NfVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUywKKyNkZWZpbmUJX1NDX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMgX1NDX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMKKyAgICBfU0NfVEhSRUFEX0tFWVNfTUFYLAorI2RlZmluZQlfU0NfVEhSRUFEX0tFWVNfTUFYCQlfU0NfVEhSRUFEX0tFWVNfTUFYCisgICAgX1NDX1RIUkVBRF9TVEFDS19NSU4sCisjZGVmaW5lCV9TQ19USFJFQURfU1RBQ0tfTUlOCQlfU0NfVEhSRUFEX1NUQUNLX01JTgorICAgIF9TQ19USFJFQURfVEhSRUFEU19NQVgsCisjZGVmaW5lCV9TQ19USFJFQURfVEhSRUFEU19NQVgJCV9TQ19USFJFQURfVEhSRUFEU19NQVgKKyAgICBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tBRERSLAorI2RlZmluZQlfU0NfVEhSRUFEX0FUVFJfU1RBQ0tBRERSCV9TQ19USFJFQURfQVRUUl9TVEFDS0FERFIKKyAgICBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tTSVpFLAorI2RlZmluZQlfU0NfVEhSRUFEX0FUVFJfU1RBQ0tTSVpFCV9TQ19USFJFQURfQVRUUl9TVEFDS1NJWkUKKyAgICBfU0NfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcsCisjZGVmaW5lCV9TQ19USFJFQURfUFJJT1JJVFlfU0NIRURVTElORwlfU0NfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcKKyAgICBfU0NfVEhSRUFEX1BSSU9fSU5IRVJJVCwKKyNkZWZpbmUJX1NDX1RIUkVBRF9QUklPX0lOSEVSSVQJCV9TQ19USFJFQURfUFJJT19JTkhFUklUCisgICAgX1NDX1RIUkVBRF9QUklPX1BST1RFQ1QsCisjZGVmaW5lCV9TQ19USFJFQURfUFJJT19QUk9URUNUCQlfU0NfVEhSRUFEX1BSSU9fUFJPVEVDVAorICAgIF9TQ19USFJFQURfUFJPQ0VTU19TSEFSRUQsCisjZGVmaW5lCV9TQ19USFJFQURfUFJPQ0VTU19TSEFSRUQJX1NDX1RIUkVBRF9QUk9DRVNTX1NIQVJFRAorCisgICAgX1NDX05QUk9DRVNTT1JTX0NPTkYsCisjZGVmaW5lIF9TQ19OUFJPQ0VTU09SU19DT05GCQlfU0NfTlBST0NFU1NPUlNfQ09ORgorICAgIF9TQ19OUFJPQ0VTU09SU19PTkxOLAorI2RlZmluZSBfU0NfTlBST0NFU1NPUlNfT05MTgkJX1NDX05QUk9DRVNTT1JTX09OTE4KKyAgICBfU0NfUEhZU19QQUdFUywKKyNkZWZpbmUgX1NDX1BIWVNfUEFHRVMJCQlfU0NfUEhZU19QQUdFUworICAgIF9TQ19BVlBIWVNfUEFHRVMsCisjZGVmaW5lIF9TQ19BVlBIWVNfUEFHRVMJCV9TQ19BVlBIWVNfUEFHRVMKKyAgICBfU0NfQVRFWElUX01BWCwKKyNkZWZpbmUgX1NDX0FURVhJVF9NQVgJCQlfU0NfQVRFWElUX01BWAorICAgIF9TQ19QQVNTX01BWCwKKyNkZWZpbmUgX1NDX1BBU1NfTUFYCQkJX1NDX1BBU1NfTUFYCisKKyAgICBfU0NfWE9QRU5fVkVSU0lPTiwKKyNkZWZpbmUgX1NDX1hPUEVOX1ZFUlNJT04JCV9TQ19YT1BFTl9WRVJTSU9OCisgICAgX1NDX1hPUEVOX1hDVV9WRVJTSU9OLAorI2RlZmluZSBfU0NfWE9QRU5fWENVX1ZFUlNJT04JCV9TQ19YT1BFTl9YQ1VfVkVSU0lPTgorICAgIF9TQ19YT1BFTl9VTklYLAorI2RlZmluZSBfU0NfWE9QRU5fVU5JWAkJCV9TQ19YT1BFTl9VTklYCisgICAgX1NDX1hPUEVOX0NSWVBULAorI2RlZmluZSBfU0NfWE9QRU5fQ1JZUFQJCQlfU0NfWE9QRU5fQ1JZUFQKKyAgICBfU0NfWE9QRU5fRU5IX0kxOE4sCisjZGVmaW5lIF9TQ19YT1BFTl9FTkhfSTE4TgkJX1NDX1hPUEVOX0VOSF9JMThOCisgICAgX1NDX1hPUEVOX1NITSwKKyNkZWZpbmUgX1NDX1hPUEVOX1NITQkJCV9TQ19YT1BFTl9TSE0KKworICAgIF9TQ18yX0NIQVJfVEVSTSwKKyNkZWZpbmUgX1NDXzJfQ0hBUl9URVJNCQkJX1NDXzJfQ0hBUl9URVJNCisgICAgX1NDXzJfQ19WRVJTSU9OLAorI2RlZmluZSBfU0NfMl9DX1ZFUlNJT04JCQlfU0NfMl9DX1ZFUlNJT04KKyAgICBfU0NfMl9VUEUsCisjZGVmaW5lIF9TQ18yX1VQRQkJCV9TQ18yX1VQRQorCisgICAgX1NDX1hPUEVOX1hQRzIsCisjZGVmaW5lIF9TQ19YT1BFTl9YUEcyCQkJX1NDX1hPUEVOX1hQRzIKKyAgICBfU0NfWE9QRU5fWFBHMywKKyNkZWZpbmUgX1NDX1hPUEVOX1hQRzMJCQlfU0NfWE9QRU5fWFBHMworICAgIF9TQ19YT1BFTl9YUEc0LAorI2RlZmluZSBfU0NfWE9QRU5fWFBHNAkJCV9TQ19YT1BFTl9YUEc0CisKKyAgICBfU0NfQ0hBUl9CSVQsCisjZGVmaW5lCV9TQ19DSEFSX0JJVAkJCV9TQ19DSEFSX0JJVAorICAgIF9TQ19DSEFSX01BWCwKKyNkZWZpbmUJX1NDX0NIQVJfTUFYCQkJX1NDX0NIQVJfTUFYCisgICAgX1NDX0NIQVJfTUlOLAorI2RlZmluZQlfU0NfQ0hBUl9NSU4JCQlfU0NfQ0hBUl9NSU4KKyAgICBfU0NfSU5UX01BWCwKKyNkZWZpbmUJX1NDX0lOVF9NQVgJCQlfU0NfSU5UX01BWAorICAgIF9TQ19JTlRfTUlOLAorI2RlZmluZQlfU0NfSU5UX01JTgkJCV9TQ19JTlRfTUlOCisgICAgX1NDX0xPTkdfQklULAorI2RlZmluZQlfU0NfTE9OR19CSVQJCQlfU0NfTE9OR19CSVQKKyAgICBfU0NfV09SRF9CSVQsCisjZGVmaW5lCV9TQ19XT1JEX0JJVAkJCV9TQ19XT1JEX0JJVAorICAgIF9TQ19NQl9MRU5fTUFYLAorI2RlZmluZQlfU0NfTUJfTEVOX01BWAkJCV9TQ19NQl9MRU5fTUFYCisgICAgX1NDX05aRVJPLAorI2RlZmluZQlfU0NfTlpFUk8JCQlfU0NfTlpFUk8KKyAgICBfU0NfU1NJWkVfTUFYLAorI2RlZmluZQlfU0NfU1NJWkVfTUFYCQkJX1NDX1NTSVpFX01BWAorICAgIF9TQ19TQ0hBUl9NQVgsCisjZGVmaW5lCV9TQ19TQ0hBUl9NQVgJCQlfU0NfU0NIQVJfTUFYCisgICAgX1NDX1NDSEFSX01JTiwKKyNkZWZpbmUJX1NDX1NDSEFSX01JTgkJCV9TQ19TQ0hBUl9NSU4KKyAgICBfU0NfU0hSVF9NQVgsCisjZGVmaW5lCV9TQ19TSFJUX01BWAkJCV9TQ19TSFJUX01BWAorICAgIF9TQ19TSFJUX01JTiwKKyNkZWZpbmUJX1NDX1NIUlRfTUlOCQkJX1NDX1NIUlRfTUlOCisgICAgX1NDX1VDSEFSX01BWCwKKyNkZWZpbmUJX1NDX1VDSEFSX01BWAkJCV9TQ19VQ0hBUl9NQVgKKyAgICBfU0NfVUlOVF9NQVgsCisjZGVmaW5lCV9TQ19VSU5UX01BWAkJCV9TQ19VSU5UX01BWAorICAgIF9TQ19VTE9OR19NQVgsCisjZGVmaW5lCV9TQ19VTE9OR19NQVgJCQlfU0NfVUxPTkdfTUFYCisgICAgX1NDX1VTSFJUX01BWCwKKyNkZWZpbmUJX1NDX1VTSFJUX01BWAkJCV9TQ19VU0hSVF9NQVgKKworICAgIF9TQ19OTF9BUkdNQVgsCisjZGVmaW5lCV9TQ19OTF9BUkdNQVgJCQlfU0NfTkxfQVJHTUFYCisgICAgX1NDX05MX0xBTkdNQVgsCisjZGVmaW5lCV9TQ19OTF9MQU5HTUFYCQkJX1NDX05MX0xBTkdNQVgKKyAgICBfU0NfTkxfTVNHTUFYLAorI2RlZmluZQlfU0NfTkxfTVNHTUFYCQkJX1NDX05MX01TR01BWAorICAgIF9TQ19OTF9OTUFYLAorI2RlZmluZQlfU0NfTkxfTk1BWAkJCV9TQ19OTF9OTUFYCisgICAgX1NDX05MX1NFVE1BWCwKKyNkZWZpbmUJX1NDX05MX1NFVE1BWAkJCV9TQ19OTF9TRVRNQVgKKyAgICBfU0NfTkxfVEVYVE1BWCwKKyNkZWZpbmUJX1NDX05MX1RFWFRNQVgJCQlfU0NfTkxfVEVYVE1BWAorCisgICAgX1NDX1hCUzVfSUxQMzJfT0ZGMzIsCisjZGVmaW5lIF9TQ19YQlM1X0lMUDMyX09GRjMyCQlfU0NfWEJTNV9JTFAzMl9PRkYzMgorICAgIF9TQ19YQlM1X0lMUDMyX09GRkJJRywKKyNkZWZpbmUgX1NDX1hCUzVfSUxQMzJfT0ZGQklHCQlfU0NfWEJTNV9JTFAzMl9PRkZCSUcKKyAgICBfU0NfWEJTNV9MUDY0X09GRjY0LAorI2RlZmluZSBfU0NfWEJTNV9MUDY0X09GRjY0CQlfU0NfWEJTNV9MUDY0X09GRjY0CisgICAgX1NDX1hCUzVfTFBCSUdfT0ZGQklHLAorI2RlZmluZSBfU0NfWEJTNV9MUEJJR19PRkZCSUcJCV9TQ19YQlM1X0xQQklHX09GRkJJRworCisgICAgX1NDX1hPUEVOX0xFR0FDWSwKKyNkZWZpbmUgX1NDX1hPUEVOX0xFR0FDWQkJX1NDX1hPUEVOX0xFR0FDWQorICAgIF9TQ19YT1BFTl9SRUFMVElNRSwKKyNkZWZpbmUgX1NDX1hPUEVOX1JFQUxUSU1FCQlfU0NfWE9QRU5fUkVBTFRJTUUKKyAgICBfU0NfWE9QRU5fUkVBTFRJTUVfVEhSRUFEUywKKyNkZWZpbmUgX1NDX1hPUEVOX1JFQUxUSU1FX1RIUkVBRFMJX1NDX1hPUEVOX1JFQUxUSU1FX1RIUkVBRFMKKworICAgIF9TQ19BRFZJU09SWV9JTkZPLAorI2RlZmluZSBfU0NfQURWSVNPUllfSU5GTwkJX1NDX0FEVklTT1JZX0lORk8KKyAgICBfU0NfQkFSUklFUlMsCisjZGVmaW5lIF9TQ19CQVJSSUVSUwkJCV9TQ19CQVJSSUVSUworICAgIF9TQ19CQVNFLAorI2RlZmluZSBfU0NfQkFTRQkJCV9TQ19CQVNFCisgICAgX1NDX0NfTEFOR19TVVBQT1JULAorI2RlZmluZSBfU0NfQ19MQU5HX1NVUFBPUlQJCV9TQ19DX0xBTkdfU1VQUE9SVAorICAgIF9TQ19DX0xBTkdfU1VQUE9SVF9SLAorI2RlZmluZSBfU0NfQ19MQU5HX1NVUFBPUlRfUgkJX1NDX0NfTEFOR19TVVBQT1JUX1IKKyAgICBfU0NfQ0xPQ0tfU0VMRUNUSU9OLAorI2RlZmluZSBfU0NfQ0xPQ0tfU0VMRUNUSU9OCQlfU0NfQ0xPQ0tfU0VMRUNUSU9OCisgICAgX1NDX0NQVVRJTUUsCisjZGVmaW5lIF9TQ19DUFVUSU1FCQkJX1NDX0NQVVRJTUUKKyAgICBfU0NfVEhSRUFEX0NQVVRJTUUsCisjZGVmaW5lIF9TQ19USFJFQURfQ1BVVElNRQkJX1NDX1RIUkVBRF9DUFVUSU1FCisgICAgX1NDX0RFVklDRV9JTywKKyNkZWZpbmUgX1NDX0RFVklDRV9JTwkJCV9TQ19ERVZJQ0VfSU8KKyAgICBfU0NfREVWSUNFX1NQRUNJRklDLAorI2RlZmluZSBfU0NfREVWSUNFX1NQRUNJRklDCQlfU0NfREVWSUNFX1NQRUNJRklDCisgICAgX1NDX0RFVklDRV9TUEVDSUZJQ19SLAorI2RlZmluZSBfU0NfREVWSUNFX1NQRUNJRklDX1IJCV9TQ19ERVZJQ0VfU1BFQ0lGSUNfUgorICAgIF9TQ19GRF9NR01ULAorI2RlZmluZSBfU0NfRkRfTUdNVAkJCV9TQ19GRF9NR01UCisgICAgX1NDX0ZJRk8sCisjZGVmaW5lIF9TQ19GSUZPCQkJX1NDX0ZJRk8KKyAgICBfU0NfUElQRSwKKyNkZWZpbmUgX1NDX1BJUEUJCQlfU0NfUElQRQorICAgIF9TQ19GSUxFX0FUVFJJQlVURVMsCisjZGVmaW5lIF9TQ19GSUxFX0FUVFJJQlVURVMJCV9TQ19GSUxFX0FUVFJJQlVURVMKKyAgICBfU0NfRklMRV9MT0NLSU5HLAorI2RlZmluZSBfU0NfRklMRV9MT0NLSU5HCQlfU0NfRklMRV9MT0NLSU5HCisgICAgX1NDX0ZJTEVfU1lTVEVNLAorI2RlZmluZSBfU0NfRklMRV9TWVNURU0JCQlfU0NfRklMRV9TWVNURU0KKyAgICBfU0NfTU9OT1RPTklDX0NMT0NLLAorI2RlZmluZSBfU0NfTU9OT1RPTklDX0NMT0NLCQlfU0NfTU9OT1RPTklDX0NMT0NLCisgICAgX1NDX01VTFRJX1BST0NFU1MsCisjZGVmaW5lIF9TQ19NVUxUSV9QUk9DRVNTCQlfU0NfTVVMVElfUFJPQ0VTUworICAgIF9TQ19TSU5HTEVfUFJPQ0VTUywKKyNkZWZpbmUgX1NDX1NJTkdMRV9QUk9DRVNTCQlfU0NfU0lOR0xFX1BST0NFU1MKKyAgICBfU0NfTkVUV09SS0lORywKKyNkZWZpbmUgX1NDX05FVFdPUktJTkcJCQlfU0NfTkVUV09SS0lORworICAgIF9TQ19SRUFERVJfV1JJVEVSX0xPQ0tTLAorI2RlZmluZSBfU0NfUkVBREVSX1dSSVRFUl9MT0NLUwkJX1NDX1JFQURFUl9XUklURVJfTE9DS1MKKyAgICBfU0NfU1BJTl9MT0NLUywKKyNkZWZpbmUgX1NDX1NQSU5fTE9DS1MJCQlfU0NfU1BJTl9MT0NLUworICAgIF9TQ19SRUdFWFAsCisjZGVmaW5lIF9TQ19SRUdFWFAJCQlfU0NfUkVHRVhQCisgICAgX1NDX1JFR0VYX1ZFUlNJT04sCisjZGVmaW5lIF9TQ19SRUdFWF9WRVJTSU9OCQlfU0NfUkVHRVhfVkVSU0lPTgorICAgIF9TQ19TSEVMTCwKKyNkZWZpbmUgX1NDX1NIRUxMCQkJX1NDX1NIRUxMCisgICAgX1NDX1NJR05BTFMsCisjZGVmaW5lIF9TQ19TSUdOQUxTCQkJX1NDX1NJR05BTFMKKyAgICBfU0NfU1BBV04sCisjZGVmaW5lIF9TQ19TUEFXTgkJCV9TQ19TUEFXTgorICAgIF9TQ19TUE9SQURJQ19TRVJWRVIsCisjZGVmaW5lIF9TQ19TUE9SQURJQ19TRVJWRVIJCV9TQ19TUE9SQURJQ19TRVJWRVIKKyAgICBfU0NfVEhSRUFEX1NQT1JBRElDX1NFUlZFUiwKKyNkZWZpbmUgX1NDX1RIUkVBRF9TUE9SQURJQ19TRVJWRVIJX1NDX1RIUkVBRF9TUE9SQURJQ19TRVJWRVIKKyAgICBfU0NfU1lTVEVNX0RBVEFCQVNFLAorI2RlZmluZSBfU0NfU1lTVEVNX0RBVEFCQVNFCQlfU0NfU1lTVEVNX0RBVEFCQVNFCisgICAgX1NDX1NZU1RFTV9EQVRBQkFTRV9SLAorI2RlZmluZSBfU0NfU1lTVEVNX0RBVEFCQVNFX1IJCV9TQ19TWVNURU1fREFUQUJBU0VfUgorICAgIF9TQ19USU1FT1VUUywKKyNkZWZpbmUgX1NDX1RJTUVPVVRTCQkJX1NDX1RJTUVPVVRTCisgICAgX1NDX1RZUEVEX01FTU9SWV9PQkpFQ1RTLAorI2RlZmluZSBfU0NfVFlQRURfTUVNT1JZX09CSkVDVFMJX1NDX1RZUEVEX01FTU9SWV9PQkpFQ1RTCisgICAgX1NDX1VTRVJfR1JPVVBTLAorI2RlZmluZSBfU0NfVVNFUl9HUk9VUFMJCQlfU0NfVVNFUl9HUk9VUFMKKyAgICBfU0NfVVNFUl9HUk9VUFNfUiwKKyNkZWZpbmUgX1NDX1VTRVJfR1JPVVBTX1IJCV9TQ19VU0VSX0dST1VQU19SCisgICAgX1NDXzJfUEJTLAorI2RlZmluZSBfU0NfMl9QQlMJCQlfU0NfMl9QQlMKKyAgICBfU0NfMl9QQlNfQUNDT1VOVElORywKKyNkZWZpbmUgX1NDXzJfUEJTX0FDQ09VTlRJTkcJCV9TQ18yX1BCU19BQ0NPVU5USU5HCisgICAgX1NDXzJfUEJTX0xPQ0FURSwKKyNkZWZpbmUgX1NDXzJfUEJTX0xPQ0FURQkJX1NDXzJfUEJTX0xPQ0FURQorICAgIF9TQ18yX1BCU19NRVNTQUdFLAorI2RlZmluZSBfU0NfMl9QQlNfTUVTU0FHRQkJX1NDXzJfUEJTX01FU1NBR0UKKyAgICBfU0NfMl9QQlNfVFJBQ0ssCisjZGVmaW5lIF9TQ18yX1BCU19UUkFDSwkJCV9TQ18yX1BCU19UUkFDSworICAgIF9TQ19TWU1MT09QX01BWCwKKyNkZWZpbmUgX1NDX1NZTUxPT1BfTUFYCQkJX1NDX1NZTUxPT1BfTUFYCisgICAgX1NDX1NUUkVBTVMsCisjZGVmaW5lIF9TQ19TVFJFQU1TCQkJX1NDX1NUUkVBTVMKKyAgICBfU0NfMl9QQlNfQ0hFQ0tQT0lOVCwKKyNkZWZpbmUgX1NDXzJfUEJTX0NIRUNLUE9JTlQJCV9TQ18yX1BCU19DSEVDS1BPSU5UCisKKyAgICBfU0NfVjZfSUxQMzJfT0ZGMzIsCisjZGVmaW5lIF9TQ19WNl9JTFAzMl9PRkYzMgkJX1NDX1Y2X0lMUDMyX09GRjMyCisgICAgX1NDX1Y2X0lMUDMyX09GRkJJRywKKyNkZWZpbmUgX1NDX1Y2X0lMUDMyX09GRkJJRwkJX1NDX1Y2X0lMUDMyX09GRkJJRworICAgIF9TQ19WNl9MUDY0X09GRjY0LAorI2RlZmluZSBfU0NfVjZfTFA2NF9PRkY2NAkJX1NDX1Y2X0xQNjRfT0ZGNjQKKyAgICBfU0NfVjZfTFBCSUdfT0ZGQklHLAorI2RlZmluZSBfU0NfVjZfTFBCSUdfT0ZGQklHCQlfU0NfVjZfTFBCSUdfT0ZGQklHCisKKyAgICBfU0NfSE9TVF9OQU1FX01BWCwKKyNkZWZpbmUgX1NDX0hPU1RfTkFNRV9NQVgJCV9TQ19IT1NUX05BTUVfTUFYCisgICAgX1NDX1RSQUNFLAorI2RlZmluZSBfU0NfVFJBQ0UJCQlfU0NfVFJBQ0UKKyAgICBfU0NfVFJBQ0VfRVZFTlRfRklMVEVSLAorI2RlZmluZSBfU0NfVFJBQ0VfRVZFTlRfRklMVEVSCQlfU0NfVFJBQ0VfRVZFTlRfRklMVEVSCisgICAgX1NDX1RSQUNFX0lOSEVSSVQsCisjZGVmaW5lIF9TQ19UUkFDRV9JTkhFUklUCQlfU0NfVFJBQ0VfSU5IRVJJVAorICAgIF9TQ19UUkFDRV9MT0csCisjZGVmaW5lIF9TQ19UUkFDRV9MT0cJCQlfU0NfVFJBQ0VfTE9HCisKKyAgICBfU0NfTEVWRUwxX0lDQUNIRV9TSVpFLAorI2RlZmluZSBfU0NfTEVWRUwxX0lDQUNIRV9TSVpFCQlfU0NfTEVWRUwxX0lDQUNIRV9TSVpFCisgICAgX1NDX0xFVkVMMV9JQ0FDSEVfQVNTT0MsCisjZGVmaW5lIF9TQ19MRVZFTDFfSUNBQ0hFX0FTU09DCQlfU0NfTEVWRUwxX0lDQUNIRV9BU1NPQworICAgIF9TQ19MRVZFTDFfSUNBQ0hFX0xJTkVTSVpFLAorI2RlZmluZSBfU0NfTEVWRUwxX0lDQUNIRV9MSU5FU0laRQlfU0NfTEVWRUwxX0lDQUNIRV9MSU5FU0laRQorICAgIF9TQ19MRVZFTDFfRENBQ0hFX1NJWkUsCisjZGVmaW5lIF9TQ19MRVZFTDFfRENBQ0hFX1NJWkUJCV9TQ19MRVZFTDFfRENBQ0hFX1NJWkUKKyAgICBfU0NfTEVWRUwxX0RDQUNIRV9BU1NPQywKKyNkZWZpbmUgX1NDX0xFVkVMMV9EQ0FDSEVfQVNTT0MJCV9TQ19MRVZFTDFfRENBQ0hFX0FTU09DCisgICAgX1NDX0xFVkVMMV9EQ0FDSEVfTElORVNJWkUsCisjZGVmaW5lIF9TQ19MRVZFTDFfRENBQ0hFX0xJTkVTSVpFCV9TQ19MRVZFTDFfRENBQ0hFX0xJTkVTSVpFCisgICAgX1NDX0xFVkVMMl9DQUNIRV9TSVpFLAorI2RlZmluZSBfU0NfTEVWRUwyX0NBQ0hFX1NJWkUJCV9TQ19MRVZFTDJfQ0FDSEVfU0laRQorICAgIF9TQ19MRVZFTDJfQ0FDSEVfQVNTT0MsCisjZGVmaW5lIF9TQ19MRVZFTDJfQ0FDSEVfQVNTT0MJCV9TQ19MRVZFTDJfQ0FDSEVfQVNTT0MKKyAgICBfU0NfTEVWRUwyX0NBQ0hFX0xJTkVTSVpFLAorI2RlZmluZSBfU0NfTEVWRUwyX0NBQ0hFX0xJTkVTSVpFCV9TQ19MRVZFTDJfQ0FDSEVfTElORVNJWkUKKyAgICBfU0NfTEVWRUwzX0NBQ0hFX1NJWkUsCisjZGVmaW5lIF9TQ19MRVZFTDNfQ0FDSEVfU0laRQkJX1NDX0xFVkVMM19DQUNIRV9TSVpFCisgICAgX1NDX0xFVkVMM19DQUNIRV9BU1NPQywKKyNkZWZpbmUgX1NDX0xFVkVMM19DQUNIRV9BU1NPQwkJX1NDX0xFVkVMM19DQUNIRV9BU1NPQworICAgIF9TQ19MRVZFTDNfQ0FDSEVfTElORVNJWkUsCisjZGVmaW5lIF9TQ19MRVZFTDNfQ0FDSEVfTElORVNJWkUJX1NDX0xFVkVMM19DQUNIRV9MSU5FU0laRQorICAgIF9TQ19MRVZFTDRfQ0FDSEVfU0laRSwKKyNkZWZpbmUgX1NDX0xFVkVMNF9DQUNIRV9TSVpFCQlfU0NfTEVWRUw0X0NBQ0hFX1NJWkUKKyAgICBfU0NfTEVWRUw0X0NBQ0hFX0FTU09DLAorI2RlZmluZSBfU0NfTEVWRUw0X0NBQ0hFX0FTU09DCQlfU0NfTEVWRUw0X0NBQ0hFX0FTU09DCisgICAgX1NDX0xFVkVMNF9DQUNIRV9MSU5FU0laRSwKKyNkZWZpbmUgX1NDX0xFVkVMNF9DQUNIRV9MSU5FU0laRQlfU0NfTEVWRUw0X0NBQ0hFX0xJTkVTSVpFCisgICAgLyogTGVhdmUgcm9vbSBoZXJlLCBtYXliZSB3ZSBuZWVkIGEgZmV3IG1vcmUgY2FjaGUgbGV2ZWxzIHNvbWUgZGF5LiAgKi8KKworICAgIF9TQ19JUFY2ID0gX1NDX0xFVkVMMV9JQ0FDSEVfU0laRSArIDUwLAorI2RlZmluZSBfU0NfSVBWNgkJCV9TQ19JUFY2CisgICAgX1NDX1JBV19TT0NLRVRTCisjZGVmaW5lIF9TQ19SQVdfU09DS0VUUwkJCV9TQ19SQVdfU09DS0VUUworICB9OworCisvKiBWYWx1ZXMgZm9yIHRoZSBOQU1FIGFyZ3VtZW50IHRvIGBjb25mc3RyJy4gICovCitlbnVtCisgIHsKKyAgICBfQ1NfUEFUSCwJCQkvKiBUaGUgZGVmYXVsdCBzZWFyY2ggcGF0aC4gICovCisjZGVmaW5lIF9DU19QQVRICQlfQ1NfUEFUSAorCisgICAgX0NTX1Y2X1dJRFRIX1JFU1RSSUNURURfRU5WUywKKyNkZWZpbmUgX0NTX1Y2X1dJRFRIX1JFU1RSSUNURURfRU5WUwlfQ1NfVjZfV0lEVEhfUkVTVFJJQ1RFRF9FTlZTCisjZGVmaW5lIF9DU19QT1NJWF9WNl9XSURUSF9SRVNUUklDVEVEX0VOVlMJX0NTX1Y2X1dJRFRIX1JFU1RSSUNURURfRU5WUworCisgICAgX0NTX0dOVV9MSUJDX1ZFUlNJT04sCisjZGVmaW5lIF9DU19HTlVfTElCQ19WRVJTSU9OCV9DU19HTlVfTElCQ19WRVJTSU9OCisgICAgX0NTX0dOVV9MSUJQVEhSRUFEX1ZFUlNJT04sCisjZGVmaW5lIF9DU19HTlVfTElCUFRIUkVBRF9WRVJTSU9OCV9DU19HTlVfTElCUFRIUkVBRF9WRVJTSU9OCisKKyAgICBfQ1NfTEZTX0NGTEFHUyA9IDEwMDAsCisjZGVmaW5lIF9DU19MRlNfQ0ZMQUdTCV9DU19MRlNfQ0ZMQUdTCisgICAgX0NTX0xGU19MREZMQUdTLAorI2RlZmluZSBfQ1NfTEZTX0xERkxBR1MJX0NTX0xGU19MREZMQUdTCisgICAgX0NTX0xGU19MSUJTLAorI2RlZmluZSBfQ1NfTEZTX0xJQlMJCV9DU19MRlNfTElCUworICAgIF9DU19MRlNfTElOVEZMQUdTLAorI2RlZmluZSBfQ1NfTEZTX0xJTlRGTEFHUwlfQ1NfTEZTX0xJTlRGTEFHUworICAgIF9DU19MRlM2NF9DRkxBR1MsCisjZGVmaW5lIF9DU19MRlM2NF9DRkxBR1MJX0NTX0xGUzY0X0NGTEFHUworICAgIF9DU19MRlM2NF9MREZMQUdTLAorI2RlZmluZSBfQ1NfTEZTNjRfTERGTEFHUwlfQ1NfTEZTNjRfTERGTEFHUworICAgIF9DU19MRlM2NF9MSUJTLAorI2RlZmluZSBfQ1NfTEZTNjRfTElCUwlfQ1NfTEZTNjRfTElCUworICAgIF9DU19MRlM2NF9MSU5URkxBR1MsCisjZGVmaW5lIF9DU19MRlM2NF9MSU5URkxBR1MJX0NTX0xGUzY0X0xJTlRGTEFHUworCisgICAgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfQ0ZMQUdTID0gMTEwMCwKKyNkZWZpbmUgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfQ0ZMQUdTIF9DU19YQlM1X0lMUDMyX09GRjMyX0NGTEFHUworICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0xERkxBR1MsCisjZGVmaW5lIF9DU19YQlM1X0lMUDMyX09GRjMyX0xERkxBR1MgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTERGTEFHUworICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0xJQlMsCisjZGVmaW5lIF9DU19YQlM1X0lMUDMyX09GRjMyX0xJQlMgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTElCUworICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0xJTlRGTEFHUywKKyNkZWZpbmUgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTElOVEZMQUdTIF9DU19YQlM1X0lMUDMyX09GRjMyX0xJTlRGTEFHUworICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19DRkxBR1MsCisjZGVmaW5lIF9DU19YQlM1X0lMUDMyX09GRkJJR19DRkxBR1MgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0NGTEFHUworICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19MREZMQUdTLAorI2RlZmluZSBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTERGTEFHUyBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTERGTEFHUworICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19MSUJTLAorI2RlZmluZSBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTElCUyBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTElCUworICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19MSU5URkxBR1MsCisjZGVmaW5lIF9DU19YQlM1X0lMUDMyX09GRkJJR19MSU5URkxBR1MgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xJTlRGTEFHUworICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfQ0ZMQUdTLAorI2RlZmluZSBfQ1NfWEJTNV9MUDY0X09GRjY0X0NGTEFHUyBfQ1NfWEJTNV9MUDY0X09GRjY0X0NGTEFHUworICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTERGTEFHUywKKyNkZWZpbmUgX0NTX1hCUzVfTFA2NF9PRkY2NF9MREZMQUdTIF9DU19YQlM1X0xQNjRfT0ZGNjRfTERGTEFHUworICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTElCUywKKyNkZWZpbmUgX0NTX1hCUzVfTFA2NF9PRkY2NF9MSUJTIF9DU19YQlM1X0xQNjRfT0ZGNjRfTElCUworICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTElOVEZMQUdTLAorI2RlZmluZSBfQ1NfWEJTNV9MUDY0X09GRjY0X0xJTlRGTEFHUyBfQ1NfWEJTNV9MUDY0X09GRjY0X0xJTlRGTEFHUworICAgIF9DU19YQlM1X0xQQklHX09GRkJJR19DRkxBR1MsCisjZGVmaW5lIF9DU19YQlM1X0xQQklHX09GRkJJR19DRkxBR1MgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0NGTEFHUworICAgIF9DU19YQlM1X0xQQklHX09GRkJJR19MREZMQUdTLAorI2RlZmluZSBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTERGTEFHUyBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTERGTEFHUworICAgIF9DU19YQlM1X0xQQklHX09GRkJJR19MSUJTLAorI2RlZmluZSBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElCUyBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElCUworICAgIF9DU19YQlM1X0xQQklHX09GRkJJR19MSU5URkxBR1MsCisjZGVmaW5lIF9DU19YQlM1X0xQQklHX09GRkJJR19MSU5URkxBR1MgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0xJTlRGTEFHUworCisgICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0NGTEFHUywKKyNkZWZpbmUgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0NGTEFHUyBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfQ0ZMQUdTCisgICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0xERkxBR1MsCisjZGVmaW5lIF9DU19QT1NJWF9WNl9JTFAzMl9PRkYzMl9MREZMQUdTIF9DU19QT1NJWF9WNl9JTFAzMl9PRkYzMl9MREZMQUdTCisgICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0xJQlMsCisjZGVmaW5lIF9DU19QT1NJWF9WNl9JTFAzMl9PRkYzMl9MSUJTIF9DU19QT1NJWF9WNl9JTFAzMl9PRkYzMl9MSUJTCisgICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0xJTlRGTEFHUywKKyNkZWZpbmUgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0xJTlRGTEFHUyBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfTElOVEZMQUdTCisgICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19DRkxBR1MsCisjZGVmaW5lIF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfQ0ZMQUdTIF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfQ0ZMQUdTCisgICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19MREZMQUdTLAorI2RlZmluZSBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0xERkxBR1MgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19MREZMQUdTCisgICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19MSUJTLAorI2RlZmluZSBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0xJQlMgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19MSUJTCisgICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19MSU5URkxBR1MsCisjZGVmaW5lIF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfTElOVEZMQUdTIF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfTElOVEZMQUdTCisgICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfQ0ZMQUdTLAorI2RlZmluZSBfQ1NfUE9TSVhfVjZfTFA2NF9PRkY2NF9DRkxBR1MgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfQ0ZMQUdTCisgICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTERGTEFHUywKKyNkZWZpbmUgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTERGTEFHUyBfQ1NfUE9TSVhfVjZfTFA2NF9PRkY2NF9MREZMQUdTCisgICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTElCUywKKyNkZWZpbmUgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTElCUyBfQ1NfUE9TSVhfVjZfTFA2NF9PRkY2NF9MSUJTCisgICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTElOVEZMQUdTLAorI2RlZmluZSBfQ1NfUE9TSVhfVjZfTFA2NF9PRkY2NF9MSU5URkxBR1MgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTElOVEZMQUdTCisgICAgX0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19DRkxBR1MsCisjZGVmaW5lIF9DU19QT1NJWF9WNl9MUEJJR19PRkZCSUdfQ0ZMQUdTIF9DU19QT1NJWF9WNl9MUEJJR19PRkZCSUdfQ0ZMQUdTCisgICAgX0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19MREZMQUdTLAorI2RlZmluZSBfQ1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0xERkxBR1MgX0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19MREZMQUdTCisgICAgX0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19MSUJTLAorI2RlZmluZSBfQ1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0xJQlMgX0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19MSUJTCisgICAgX0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19MSU5URkxBR1MKKyNkZWZpbmUgX0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19MSU5URkxBR1MgX0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19MSU5URkxBR1MKKyAgfTsKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2RpcmVudC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvZGlyZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY3OTRiMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2RpcmVudC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfRElSRU5UX0gKKyMgZXJyb3IgIk5ldmVyIHVzZSA8Yml0cy9kaXJlbnQuaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGRpcmVudC5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCitzdHJ1Y3QgZGlyZW50CisgIHsKKyNpZm5kZWYgX19VU0VfRklMRV9PRkZTRVQ2NAorICAgIF9faW5vX3QgZF9pbm87CisgICAgX19vZmZfdCBkX29mZjsKKyNlbHNlCisgICAgX19pbm82NF90IGRfaW5vOworICAgIF9fb2ZmNjRfdCBkX29mZjsKKyNlbmRpZgorICAgIHVuc2lnbmVkIHNob3J0IGludCBkX3JlY2xlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGRfdHlwZTsKKyAgICBjaGFyIGRfbmFtZVsyNTZdOwkJLyogV2UgbXVzdCBub3QgaW5jbHVkZSBsaW1pdHMuaCEgKi8KKyAgfTsKKworI2lmZGVmIF9fVVNFX0xBUkdFRklMRTY0CitzdHJ1Y3QgZGlyZW50NjQKKyAgeworICAgIF9faW5vNjRfdCBkX2lubzsKKyAgICBfX29mZjY0X3QgZF9vZmY7CisgICAgdW5zaWduZWQgc2hvcnQgaW50IGRfcmVjbGVuOworICAgIHVuc2lnbmVkIGNoYXIgZF90eXBlOworICAgIGNoYXIgZF9uYW1lWzI1Nl07CQkvKiBXZSBtdXN0IG5vdCBpbmNsdWRlIGxpbWl0cy5oISAqLworICB9OworI2VuZGlmCisKKyNkZWZpbmUgZF9maWxlbm8JZF9pbm8JLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkuICAqLworCisjdW5kZWYgIF9ESVJFTlRfSEFWRV9EX05BTUxFTgorI2RlZmluZSBfRElSRU5UX0hBVkVfRF9SRUNMRU4KKyNkZWZpbmUgX0RJUkVOVF9IQVZFX0RfT0ZGCisjZGVmaW5lIF9ESVJFTlRfSEFWRV9EX1RZUEUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2RsZmNuLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9kbGZjbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZmQ5NmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9kbGZjbi5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qIFN5c3RlbSBkZXBlbmRlbnQgZGVmaW5pdGlvbnMgZm9yIHJ1bi10aW1lIGR5bmFtaWMgbG9hZGluZy4KKyAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDAxLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9ETEZDTl9ICisjIGVycm9yICJOZXZlciB1c2UgPGJpdHMvZGxmY24uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGRsZmNuLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKy8qIFRoZSBNT0RFIGFyZ3VtZW50IHRvIGBkbG9wZW4nIGNvbnRhaW5zIG9uZSBvZiB0aGUgZm9sbG93aW5nOiAqLworI2RlZmluZSBSVExEX0xBWlkJMHgwMDAwMQkvKiBMYXp5IGZ1bmN0aW9uIGNhbGwgYmluZGluZy4gICovCisjZGVmaW5lIFJUTERfTk9XCTB4MDAwMDIJLyogSW1tZWRpYXRlIGZ1bmN0aW9uIGNhbGwgYmluZGluZy4gICovCisjZGVmaW5lCVJUTERfQklORElOR19NQVNLICAgMHgzCS8qIE1hc2sgb2YgYmluZGluZyB0aW1lIHZhbHVlLiAgKi8KKyNkZWZpbmUgUlRMRF9OT0xPQUQJMHgwMDAwNAkvKiBEbyBub3QgbG9hZCB0aGUgb2JqZWN0LiAgKi8KKyNkZWZpbmUgUlRMRF9ERUVQQklORAkweDAwMDA4CS8qIFVzZSBkZWVwIGJpbmRpbmcuICAqLworCisvKiBJZiB0aGUgZm9sbG93aW5nIGJpdCBpcyBzZXQgaW4gdGhlIE1PREUgYXJndW1lbnQgdG8gYGRsb3BlbicsCisgICB0aGUgc3ltYm9scyBvZiB0aGUgbG9hZGVkIG9iamVjdCBhbmQgaXRzIGRlcGVuZGVuY2llcyBhcmUgbWFkZQorICAgdmlzaWJsZSBhcyBpZiB0aGUgb2JqZWN0IHdlcmUgbGlua2VkIGRpcmVjdGx5IGludG8gdGhlIHByb2dyYW0uICAqLworI2RlZmluZSBSVExEX0dMT0JBTAkweDAwMTAwCisKKy8qIFVuaXg5OCBkZW1hbmRzIHRoZSBmb2xsb3dpbmcgZmxhZyB3aGljaCBpcyB0aGUgaW52ZXJzZSB0byBSVExEX0dMT0JBTC4KKyAgIFRoZSBpbXBsZW1lbnRhdGlvbiBkb2VzIHRoaXMgYnkgZGVmYXVsdCBhbmQgc28gd2UgY2FuIGRlZmluZSB0aGUKKyAgIHZhbHVlIHRvIHplcm8uICAqLworI2RlZmluZSBSVExEX0xPQ0FMCTAKKworLyogRG8gbm90IGRlbGV0ZSBvYmplY3Qgd2hlbiBjbG9zZWQuICAqLworI2RlZmluZSBSVExEX05PREVMRVRFCTB4MDEwMDAKKworI2lmZGVmIF9fVVNFX0dOVQorLyogVG8gc3VwcG9ydCBwcm9maWxpbmcgb2Ygc2hhcmVkIG9iamVjdHMgaXQgaXMgYSBnb29kIGlkZWEgdG8gY2FsbAorICAgdGhlIGZ1bmN0aW9uIGZvdW5kIHVzaW5nIGBkbHN5bScgdXNpbmcgdGhlIGZvbGxvd2luZyBtYWNybyBzaW5jZQorICAgdGhlc2UgY2FsbHMgZG8gbm90IHVzZSB0aGUgUExULiAgQnV0IHRoaXMgd291bGQgbWVhbiB0aGUgZHluYW1pYworICAgbG9hZGVyIGhhcyBubyBjaGFuY2UgdG8gZmluZCBvdXQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiAgVGhlCisgICBtYWNybyBhcHBsaWVzIHRoZSBuZWNlc3NhcnkgbWFnaWMgc28gdGhhdCBwcm9maWxpbmcgaXMgcG9zc2libGUuCisgICBSZXdyaXRlCisJZm9vID0gKCpmY3RwKSAoYXJnMSwgYXJnMik7CisgICBpbnRvCisgICAgICAgIGZvbyA9IERMX0NBTExfRkNUIChmY3RwLCAoYXJnMSwgYXJnMikpOworKi8KKyMgZGVmaW5lIERMX0NBTExfRkNUKGZjdHAsIGFyZ3MpIFwKKyAgKF9kbF9tY291bnRfd3JhcHBlcl9jaGVjayAoKHZvaWQgKikgKGZjdHApKSwgKCooZmN0cCkpIGFyZ3MpCisKK19fQkVHSU5fREVDTFMKKworLyogVGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgcHJvZmlsaW5nIGZ1bmN0aW9ucy4gICovCitleHRlcm4gdm9pZCBfZGxfbWNvdW50X3dyYXBwZXJfY2hlY2sgKHZvaWQgKl9fc2VsZnBjKSBfX1RIUk9XOworCitfX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2VsZmNsYXNzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9lbGZjbGFzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MDIyN2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9lbGZjbGFzcy5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qIFRoaXMgZmlsZSBzcGVjaWZpZXMgdGhlIG5hdGl2ZSB3b3JkIHNpemUgb2YgdGhlIG1hY2hpbmUsIHdoaWNoIGluZGljYXRlcworICAgdGhlIEVMRiBmaWxlIGNsYXNzIHVzZWQgZm9yIGV4ZWN1dGFibGVzIGFuZCBzaGFyZWQgb2JqZWN0cyBvbiB0aGlzCisgICBtYWNoaW5lLiAgKi8KKworI2lmbmRlZiBfTElOS19ICisjIGVycm9yICJOZXZlciB1c2UgPGJpdHMvZWxmY2xhc3MuaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGxpbmsuaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2luY2x1ZGUgPGJpdHMvd29yZHNpemUuaD4KKworI2RlZmluZSBfX0VMRl9OQVRJVkVfQ0xBU1MgX19XT1JEU0laRQorCisvKiBUaGUgZW50cmllcyBpbiB0aGUgLmhhc2ggdGFibGUgYWx3YXlzIGhhdmUgYSBzaXplIG9mIDMyIGJpdHMuICAqLwordHlwZWRlZiB1aW50MzJfdCBFbGZfU3ltbmR4OwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvZW5kaWFuLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzkwOWMzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvZW5kaWFuLmgKQEAgLTAsMCArMSwxOSBAQAorI2lmbmRlZiBfRU5ESUFOX0gKKyMgZXJyb3IgIk5ldmVyIHVzZSA8Yml0cy9lbmRpYW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGVuZGlhbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisvKiBBUk0gY2FuIGJlIGVpdGhlciBiaWcgb3IgbGl0dGxlIGVuZGlhbi4gICovCisjaWZkZWYgX19BUk1FQl9fCisjZGVmaW5lIF9fQllURV9PUkRFUiBfX0JJR19FTkRJQU4KKyNlbHNlCisjZGVmaW5lIF9fQllURV9PUkRFUiBfX0xJVFRMRV9FTkRJQU4KKyNlbmRpZgorCisvKiBGUEEgZmxvYXRpbmcgcG9pbnQgdW5pdHMgYXJlIGFsd2F5cyBiaWctZW5kaWFuLCBpcnJlc3BlY3RpdmUgb2YgdGhlCisgICBDUFUgZW5kaWFubmVzcy4gIFZGUCBmbG9hdGluZyBwb2ludCB1bml0cyB1c2UgdGhlIHNhbWUgZW5kaWFubmVzcworICAgYXMgdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gICovCisjaWZkZWYgX19WRlBfRlBfXworI2RlZmluZSBfX0ZMT0FUX1dPUkRfT1JERVIgX19CWVRFX09SREVSCisjZWxzZQorI2RlZmluZSBfX0ZMT0FUX1dPUkRfT1JERVIgX19CSUdfRU5ESUFOCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2Vudmlyb25tZW50cy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvZW52aXJvbm1lbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYxN2RjNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2Vudmlyb25tZW50cy5oCkBAIC0wLDAgKzEsNzggQEAKKy8qIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMSwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfVU5JU1REX0gKKyMgZXJyb3IgIk5ldmVyIGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5LiAgVXNlIDx1bmlzdGQuaD4gaW5zdGVhZCIKKyNlbmRpZgorCisjaW5jbHVkZSA8Yml0cy93b3Jkc2l6ZS5oPgorCisvKiBUaGlzIGhlYWRlciBzaG91bGQgZGVmaW5lIHRoZSBmb2xsb3dpbmcgc3ltYm9scyB1bmRlciB0aGUgZGVzY3JpYmVkCisgICBzaXR1YXRpb25zLiAgQSB2YWx1ZSBgMScgbWVhbnMgdGhhdCB0aGUgbW9kZWwgaXMgYWx3YXlzIHN1cHBvcnRlZCwKKyAgIGAtMScgbWVhbnMgaXQgaXMgbmV2ZXIgc3VwcG9ydGVkLiAgVW5kZWZpbmVkIG1lYW5zIGl0IGNhbm5vdCBiZQorICAgc3RhdGljYWxseSBkZWNpZGVkLgorCisgICBfUE9TSVhfVjZfSUxQMzJfT0ZGMzIgICAzMmJpdCBpbnQsIGxvbmcsIHBvaW50ZXJzLCBhbmQgb2ZmX3QgdHlwZQorICAgX1BPU0lYX1Y2X0lMUDMyX09GRkJJRyAgMzJiaXQgaW50LCBsb25nLCBhbmQgcG9pbnRlcnMgYW5kIGxhcmdlciBvZmZfdCB0eXBlCisKKyAgIF9QT1NJWF9WNl9MUDY0X09GRjMyCSAgIDY0Yml0IGxvbmcgYW5kIHBvaW50ZXJzIGFuZCAzMmJpdCBvZmZfdCB0eXBlCisgICBfUE9TSVhfVjZfTFBCSUdfT0ZGQklHICA2NGJpdCBsb25nIGFuZCBwb2ludGVycyBhbmQgbGFyZ2Ugb2ZmX3QgdHlwZQorCisgICBUaGUgbWFjcm9zIF9YQlM1X0lMUDMyX09GRjMyLCBfWEJTNV9JTFAzMl9PRkZCSUcsIF9YQlM1X0xQNjRfT0ZGMzIsIGFuZAorICAgX1hCUzVfTFBCSUdfT0ZGQklHIHdlcmUgdXNlZCBpbiBwcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGUgVW5peCBzdGFuZGFyZAorICAgYW5kIGFyZSBhdmFpbGFibGUgb25seSBmb3IgY29tcGF0aWJpbGl0eS4KKyovCisKKyNpZiBfX1dPUkRTSVpFID09IDY0CisKKy8qIFdlIGNhbiBuZXZlciBwcm92aWRlIGVudmlyb25tZW50cyB3aXRoIDMyLWJpdCB3aWRlIHBvaW50ZXJzLiAgKi8KKyMgZGVmaW5lIF9QT1NJWF9WNl9JTFAzMl9PRkYzMgktMQorIyBkZWZpbmUgX1BPU0lYX1Y2X0lMUDMyX09GRkJJRwktMQorIyBkZWZpbmUgX1hCUzVfSUxQMzJfT0ZGMzIJLTEKKyMgZGVmaW5lIF9YQlM1X0lMUDMyX09GRkJJRwktMQorLyogV2UgYWxzbyBoYXZlIG5vIHVzZSAoZm9yIG5vdykgZm9yIGFuIGVudmlyb25tZW50IHdpdGggYmlnZ2VyIHBvaW50ZXJzCisgICBhbmQgb2Zmc2V0cy4gICovCisjIGRlZmluZSBfUE9TSVhfVjZfTFBCSUdfT0ZGQklHCS0xCisjIGRlZmluZSBfWEJTNV9MUEJJR19PRkZCSUcJLTEKKworLyogQnkgZGVmYXVsdCB3ZSBoYXZlIDY0LWJpdCB3aWRlIGBsb25nIGludCcsIHBvaW50ZXJzIGFuZCBgb2ZmX3QnLiAgKi8KKyMgZGVmaW5lIF9QT1NJWF9WNl9MUDY0X09GRjY0CTEKKyMgZGVmaW5lIF9YQlM1X0xQNjRfT0ZGNjQJMQorCisjZWxzZSAvKiBfX1dPUkRTSVpFID09IDMyICovCisKKy8qIEJ5IGRlZmF1bHQgd2UgaGF2ZSAzMi1iaXQgd2lkZSBgaW50JywgYGxvbmcgaW50JywgcG9pbnRlcnMgYW5kIGBvZmZfdCcKKyAgIGFuZCBhbGwgcGxhdGZvcm1zIHN1cHBvcnQgTEZTLiAgKi8KKyMgZGVmaW5lIF9QT1NJWF9WNl9JTFAzMl9PRkYzMgkxCisjIGRlZmluZSBfUE9TSVhfVjZfSUxQMzJfT0ZGQklHCTEKKyMgZGVmaW5lIF9YQlM1X0lMUDMyX09GRjMyCTEKKyMgZGVmaW5lIF9YQlM1X0lMUDMyX09GRkJJRwkxCisKKy8qIFdlIG9wdGlvbmFsbHkgcHJvdmlkZSBhbiBlbnZpcm9ubWVudCB3aXRoIHRoZSBhYm92ZSBzaXplIGJ1dCBhbiA2NC1iaXQKKyAgIHNpZGUgYG9mZl90Jy4gIFRoZXJlZm9yZSB3ZSBkb24ndCBkZWZpbmUgX1hCUzVfSUxQMzJfT0ZGQklHLiAgKi8KKworLyogV2UgY2FuIG5ldmVyIHByb3ZpZGUgZW52aXJvbm1lbnRzIHdpdGggNjQtYml0IHdpZGUgcG9pbnRlcnMuICAqLworIyBkZWZpbmUgX1BPU0lYX1Y2X0xQNjRfT0ZGNjQJLTEKKyMgZGVmaW5lIF9QT1NJWF9WNl9MUEJJR19PRkZCSUcJLTEKKyMgZGVmaW5lIF9YQlM1X0xQNjRfT0ZGNjQJLTEKKyMgZGVmaW5lIF9YQlM1X0xQQklHX09GRkJJRwktMQorCisvKiBDRkxBR1MuICAqLworI2RlZmluZSBfX0lMUDMyX09GRkJJR19DRkxBR1MgICAiLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IgorCisjZW5kaWYgLyogX19XT1JEU0laRSA9PSAzMiAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRlOGNiYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgKQEAgLTAsMCArMSw1OSBAQAorLyogRXJyb3IgY29uc3RhbnRzLiAgTGludXggc3BlY2lmaWMgdmVyc2lvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmZGVmIF9FUlJOT19ICisKKyMgdW5kZWYgRURPTQorIyB1bmRlZiBFSUxTRVEKKyMgdW5kZWYgRVJBTkdFCisjIGluY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKKy8qIExpbnV4IGhhcyBubyBFTk9UU1VQIGVycm9yIGNvZGUuICAqLworIyBkZWZpbmUgRU5PVFNVUCBFT1BOT1RTVVBQCisKKy8qIE9sZGVyIExpbnV4IHZlcnNpb25zIGFsc28gaGFkIG5vIEVDQU5DRUxFRCBlcnJvciBjb2RlLiAgKi8KKyMgaWZuZGVmIEVDQU5DRUxFRAorIyAgZGVmaW5lIEVDQU5DRUxFRAkxMjUKKyMgZW5kaWYKKworLyogU3VwcG9ydCBmb3IgZXJyb3IgY29kZXMgdG8gc3VwcG9ydCByb2J1c3QgbXV0ZXhlcyB3YXMgYWRkZWQgbGF0ZXIsIHRvby4gICovCisjIGlmbmRlZiBFT1dORVJERUFECisjICBkZWZpbmUgRU9XTkVSREVBRAkJMTMwCisjICBkZWZpbmUgRU5PVFJFQ09WRVJBQkxFCTEzMQorIyBlbmRpZgorCisjIGlmbmRlZiBfX0FTU0VNQkxFUl9fCisvKiBGdW5jdGlvbiB0byBnZXQgYWRkcmVzcyBvZiBnbG9iYWwgYGVycm5vJyB2YXJpYWJsZS4gICovCitleHRlcm4gaW50ICpfX2Vycm5vX2xvY2F0aW9uICh2b2lkKSBfX1RIUk9XIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKKworIyAgaWYgIWRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBfTElCQ19SRUVOVFJBTlQKKy8qIFdoZW4gdXNpbmcgdGhyZWFkcywgZXJybm8gaXMgYSBwZXItdGhyZWFkIHZhbHVlLiAgKi8KKyMgICBkZWZpbmUgZXJybm8gKCpfX2Vycm5vX2xvY2F0aW9uICgpKQorIyAgZW5kaWYKKyMgZW5kaWYgLyogIV9fQVNTRU1CTEVSX18gKi8KKyNlbmRpZiAvKiBfRVJSTk9fSCAqLworCisjaWYgIWRlZmluZWQgX0VSUk5PX0ggJiYgZGVmaW5lZCBfX25lZWRfRW1hdGgKKy8qIFRoaXMgaXMgdWdseSBidXQgdGhlIGtlcm5lbCBoZWFkZXIgaXMgbm90IGNsZWFuIGVub3VnaC4gIFdlIG11c3QKKyAgIGRlZmluZSBvbmx5IHRoZSB2YWx1ZXMgRURPTSwgRUlMU0VRIGFuZCBFUkFOR0UgaW4gY2FzZSBfX25lZWRfRW1hdGggaXMKKyAgIGRlZmluZWQuICAqLworIyBkZWZpbmUgRURPTQkzMwkvKiBNYXRoIGFyZ3VtZW50IG91dCBvZiBkb21haW4gb2YgZnVuY3Rpb24uICAqLworIyBkZWZpbmUgRUlMU0VRCTg0CS8qIElsbGVnYWwgYnl0ZSBzZXF1ZW5jZS4gICovCisjIGRlZmluZSBFUkFOR0UJMzQJLyogTWF0aCByZXN1bHQgbm90IHJlcHJlc2VudGFibGUuICAqLworI2VuZGlmIC8qICFfRVJSTk9fSCAmJiBfX25lZWRfRW1hdGggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2Vycm9yLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9lcnJvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5OWEzZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9lcnJvci5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qIFNwZWNpYWxpemF0aW9ucyBmb3IgZXJyb3IgZnVuY3Rpb25zLgorICAgQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmCV9FUlJPUl9ICisjIGVycm9yICJOZXZlciBpbmNsdWRlIDxiaXRzL2Vycm9yLmg+IGRpcmVjdGx5OyB1c2UgPGVycm9yLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKworZXh0ZXJuIHZvaWQgX19SRURJUkVDVCAoX19lcnJvcl9hbGlhcywgKGludCBfX3N0YXR1cywgaW50IF9fZXJybnVtLAorCQkJCQlfX2NvbnN0IGNoYXIgKl9fZm9ybWF0LCAuLi4pLAorCQkJZXJyb3IpCisgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOworZXh0ZXJuIHZvaWQgX19SRURJUkVDVCAoX19lcnJvcl9ub3JldHVybiwgKGludCBfX3N0YXR1cywgaW50IF9fZXJybnVtLAorCQkJCQkgICBfX2NvbnN0IGNoYXIgKl9fZm9ybWF0LCAuLi4pLAorCQkJZXJyb3IpCisgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18sIF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CisKKworLyogSWYgd2Uga25vdyB0aGUgZnVuY3Rpb24gd2lsbCBuZXZlciByZXR1cm4gbWFrZSBzdXJlIHRoZSBjb21waWxlcgorICAgcmVhbGl6ZXMgdGhhdCwgdG9vLiAgKi8KK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgdm9pZAorZXJyb3IgKGludCBfX3N0YXR1cywgaW50IF9fZXJybnVtLCBfX2NvbnN0IGNoYXIgKl9fZm9ybWF0LCAuLi4pCit7CisgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19zdGF0dXMpICYmIF9fc3RhdHVzICE9IDApCisgICAgX19lcnJvcl9ub3JldHVybiAoX19zdGF0dXMsIF9fZXJybnVtLCBfX2Zvcm1hdCwgX192YV9hcmdfcGFjayAoKSk7CisgIGVsc2UKKyAgICBfX2Vycm9yX2FsaWFzIChfX3N0YXR1cywgX19lcnJudW0sIF9fZm9ybWF0LCBfX3ZhX2FyZ19wYWNrICgpKTsKK30KKworCitleHRlcm4gdm9pZCBfX1JFRElSRUNUIChfX2Vycm9yX2F0X2xpbmVfYWxpYXMsIChpbnQgX19zdGF0dXMsIGludCBfX2Vycm51bSwKKwkJCQkJCV9fY29uc3QgY2hhciAqX19mbmFtZSwKKwkJCQkJCXVuc2lnbmVkIGludCBfX2xpbmUsCisJCQkJCQlfX2NvbnN0IGNoYXIgKl9fZm9ybWF0LCAuLi4pLAorCQkJZXJyb3JfYXRfbGluZSkKKyAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDUsIDYpKSk7CitleHRlcm4gdm9pZCBfX1JFRElSRUNUIChfX2Vycm9yX2F0X2xpbmVfbm9yZXR1cm4sIChpbnQgX19zdGF0dXMsIGludCBfX2Vycm51bSwKKwkJCQkJCSAgIF9fY29uc3QgY2hhciAqX19mbmFtZSwKKwkJCQkJCSAgIHVuc2lnbmVkIGludCBfX2xpbmUsCisJCQkJCQkgICBfX2NvbnN0IGNoYXIgKl9fZm9ybWF0LAorCQkJCQkJICAgLi4uKSwKKwkJCWVycm9yX2F0X2xpbmUpCisgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18sIF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDUsIDYpKSk7CisKKworLyogSWYgd2Uga25vdyB0aGUgZnVuY3Rpb24gd2lsbCBuZXZlciByZXR1cm4gbWFrZSBzdXJlIHRoZSBjb21waWxlcgorICAgcmVhbGl6ZXMgdGhhdCwgdG9vLiAgKi8KK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgdm9pZAorZXJyb3JfYXRfbGluZSAoaW50IF9fc3RhdHVzLCBpbnQgX19lcnJudW0sIF9fY29uc3QgY2hhciAqX19mbmFtZSwKKwkgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSxfX2NvbnN0IGNoYXIgKl9fZm9ybWF0LCAuLi4pCit7CisgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19zdGF0dXMpICYmIF9fc3RhdHVzICE9IDApCisgICAgX19lcnJvcl9hdF9saW5lX25vcmV0dXJuIChfX3N0YXR1cywgX19lcnJudW0sIF9fZm5hbWUsIF9fbGluZSwgX19mb3JtYXQsCisJCQkgICAgICBfX3ZhX2FyZ19wYWNrICgpKTsKKyAgZWxzZQorICAgIF9fZXJyb3JfYXRfbGluZV9hbGlhcyAoX19zdGF0dXMsIF9fZXJybnVtLCBfX2ZuYW1lLCBfX2xpbmUsCisJCQkgICBfX2Zvcm1hdCwgX192YV9hcmdfcGFjayAoKSk7Cit9CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9mY250bC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvZmNudGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGQxMWYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvZmNudGwuaApAQCAtMCwwICsxLDI0MCBAQAorLyogT18qLCBGXyosIEZEXyogYml0IHZhbHVlcyBmb3IgTGludXguCisgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCwgMjAwMCwgMjAwNCwgMjAwNiwgMjAwNworICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYJX0ZDTlRMX0gKKyMgZXJyb3IgIk5ldmVyIHVzZSA8Yml0cy9mY250bC5oPiBkaXJlY3RseTsgaW5jbHVkZSA8ZmNudGwuaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIF9fVVNFX0dOVQorIyBpbmNsdWRlIDxiaXRzL3Vpby5oPgorI2VuZGlmCisKKworLyogb3Blbi9mY250bCAtIE9fU1lOQyBpcyBvbmx5IGltcGxlbWVudGVkIG9uIGJsb2NrcyBkZXZpY2VzIGFuZCBvbiBmaWxlcworICAgbG9jYXRlZCBvbiBhbiBleHQyIGZpbGUgc3lzdGVtICovCisjZGVmaW5lIE9fQUNDTU9ERQkgICAwMDAzCisjZGVmaW5lIE9fUkRPTkxZCSAgICAgMDAKKyNkZWZpbmUgT19XUk9OTFkJICAgICAwMQorI2RlZmluZSBPX1JEV1IJCSAgICAgMDIKKyNkZWZpbmUgT19DUkVBVAkJICAgMDEwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19FWENMCQkgICAwMjAwCS8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX05PQ1RUWQkgICAwNDAwCS8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX1RSVU5DCQkgIDAxMDAwCS8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX0FQUEVORAkgIDAyMDAwCisjZGVmaW5lIE9fTk9OQkxPQ0sJICAwNDAwMAorI2RlZmluZSBPX05ERUxBWQlPX05PTkJMT0NLCisjZGVmaW5lIE9fU1lOQwkJIDAxMDAwMAorI2RlZmluZSBPX0ZTWU5DCQkgT19TWU5DCisjZGVmaW5lIE9fQVNZTkMJCSAwMjAwMDAKKworI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgT19ESVJFQ1RPUlkJIDA0MDAwMAkvKiBNdXN0IGJlIGEgZGlyZWN0b3J5LgkgKi8KKyMgZGVmaW5lIE9fTk9GT0xMT1cJMDEwMDAwMAkvKiBEbyBub3QgZm9sbG93IGxpbmtzLgkgKi8KKyMgZGVmaW5lIE9fRElSRUNUCTAyMDAwMDAJLyogRGlyZWN0IGRpc2sgYWNjZXNzLgkqLworIyBkZWZpbmUgT19OT0FUSU1FICAgICAwMTAwMDAwMCAvKiBEbyBub3Qgc2V0IGF0aW1lLiAgKi8KKyMgZGVmaW5lIE9fQ0xPRVhFQyAgICAgMDIwMDAwMDAgLyogU2V0IGNsb3NlX29uX2V4ZWMuICAqLworI2VuZGlmCisKKy8qIEZvciBub3cgTGludXggaGFzIHN5bmNocm9uaXNpdHkgb3B0aW9ucyBmb3IgZGF0YSBhbmQgcmVhZCBvcGVyYXRpb25zLgorICAgV2UgZGVmaW5lIHRoZSBzeW1ib2xzIGhlcmUgYnV0IGxldCB0aGVtIGRvIHRoZSBzYW1lIGFzIE9fU1lOQyBzaW5jZQorICAgdGhpcyBpcyBhIHN1cGVyc2V0LgkqLworI2lmIGRlZmluZWQgX19VU0VfUE9TSVgxOTkzMDkgfHwgZGVmaW5lZCBfX1VTRV9VTklYOTgKKyMgZGVmaW5lIE9fRFNZTkMJT19TWU5DCS8qIFN5bmNocm9uaXplIGRhdGEuICAqLworIyBkZWZpbmUgT19SU1lOQwlPX1NZTkMJLyogU3luY2hyb25pemUgcmVhZCBvcGVyYXRpb25zLgkgKi8KKyNlbmRpZgorCisjaWZkZWYgX19VU0VfTEFSR0VGSUxFNjQKKyMgZGVmaW5lIE9fTEFSR0VGSUxFCTA0MDAwMDAKKyNlbmRpZgorCisvKiBWYWx1ZXMgZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGZjbnRsJy4gICovCisjZGVmaW5lIEZfRFVQRkQJCTAJLyogRHVwbGljYXRlIGZpbGUgZGVzY3JpcHRvci4gICovCisjZGVmaW5lIEZfR0VURkQJCTEJLyogR2V0IGZpbGUgZGVzY3JpcHRvciBmbGFncy4gICovCisjZGVmaW5lIEZfU0VURkQJCTIJLyogU2V0IGZpbGUgZGVzY3JpcHRvciBmbGFncy4gICovCisjZGVmaW5lIEZfR0VURkwJCTMJLyogR2V0IGZpbGUgc3RhdHVzIGZsYWdzLiAgKi8KKyNkZWZpbmUgRl9TRVRGTAkJNAkvKiBTZXQgZmlsZSBzdGF0dXMgZmxhZ3MuICAqLworI2lmbmRlZiBfX1VTRV9GSUxFX09GRlNFVDY0CisjIGRlZmluZSBGX0dFVExLCTUJLyogR2V0IHJlY29yZCBsb2NraW5nIGluZm8uICAqLworIyBkZWZpbmUgRl9TRVRMSwk2CS8qIFNldCByZWNvcmQgbG9ja2luZyBpbmZvIChub24tYmxvY2tpbmcpLiAgKi8KKyMgZGVmaW5lIEZfU0VUTEtXCTcJLyogU2V0IHJlY29yZCBsb2NraW5nIGluZm8gKGJsb2NraW5nKS4JKi8KKyNlbHNlCisjIGRlZmluZSBGX0dFVExLCUZfR0VUTEs2NCAgLyogR2V0IHJlY29yZCBsb2NraW5nIGluZm8uCSovCisjIGRlZmluZSBGX1NFVExLCUZfU0VUTEs2NCAgLyogU2V0IHJlY29yZCBsb2NraW5nIGluZm8gKG5vbi1ibG9ja2luZykuKi8KKyMgZGVmaW5lIEZfU0VUTEtXCUZfU0VUTEtXNjQgLyogU2V0IHJlY29yZCBsb2NraW5nIGluZm8gKGJsb2NraW5nKS4gICovCisjZW5kaWYKKyNkZWZpbmUgRl9HRVRMSzY0CTEyCS8qIEdldCByZWNvcmQgbG9ja2luZyBpbmZvLiAgKi8KKyNkZWZpbmUgRl9TRVRMSzY0CTEzCS8qIFNldCByZWNvcmQgbG9ja2luZyBpbmZvIChub24tYmxvY2tpbmcpLiAgKi8KKyNkZWZpbmUgRl9TRVRMS1c2NAkxNAkvKiBTZXQgcmVjb3JkIGxvY2tpbmcgaW5mbyAoYmxvY2tpbmcpLgkqLworCisjaWYgZGVmaW5lZCBfX1VTRV9CU0QgfHwgZGVmaW5lZCBfX1VTRV9VTklYOTgKKyMgZGVmaW5lIEZfU0VUT1dOCTgJLyogR2V0IG93bmVyIG9mIHNvY2tldCAocmVjZWl2ZXIgb2YgU0lHSU8pLiAgKi8KKyMgZGVmaW5lIEZfR0VUT1dOCTkJLyogU2V0IG93bmVyIG9mIHNvY2tldCAocmVjZWl2ZXIgb2YgU0lHSU8pLiAgKi8KKyNlbmRpZgorCisjaWZkZWYgX19VU0VfR05VCisjIGRlZmluZSBGX1NFVFNJRwkxMAkvKiBTZXQgbnVtYmVyIG9mIHNpZ25hbCB0byBiZSBzZW50LiAgKi8KKyMgZGVmaW5lIEZfR0VUU0lHCTExCS8qIEdldCBudW1iZXIgb2Ygc2lnbmFsIHRvIGJlIHNlbnQuICAqLworI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9HTlUKKyMgZGVmaW5lIEZfU0VUTEVBU0UJMTAyNAkvKiBTZXQgYSBsZWFzZS4JICovCisjIGRlZmluZSBGX0dFVExFQVNFCTEwMjUJLyogRW5xdWlyZSB3aGF0IGxlYXNlIGlzIGFjdGl2ZS4gICovCisjIGRlZmluZSBGX05PVElGWQkxMDI2CS8qIFJlcXVlc3Qgbm90ZmljYXRpb25zIG9uIGEgZGlyZWN0b3J5LgkgKi8KKyMgZGVmaW5lIEZfRFVQRkRfQ0xPRVhFQyAxMDMwCS8qIER1cGxpY2F0ZSBmaWxlIGRlc2NyaXB0b3Igd2l0aAorCQkJCSAgIGNsb3NlLW9uLWV4aXQgc2V0LiAgKi8KKyNlbmRpZgorCisvKiBGb3IgRl9bR0VUfFNFVF1GRC4gICovCisjZGVmaW5lIEZEX0NMT0VYRUMJMQkvKiBhY3R1YWxseSBhbnl0aGluZyB3aXRoIGxvdyBiaXQgc2V0IGdvZXMgKi8KKworLyogRm9yIHBvc2l4IGZjbnRsKCkgYW5kIGBsX3R5cGUnIGZpZWxkIG9mIGEgYHN0cnVjdCBmbG9jaycgZm9yIGxvY2tmKCkuICAqLworI2RlZmluZSBGX1JETENLCQkwCS8qIFJlYWQgbG9jay4gICovCisjZGVmaW5lIEZfV1JMQ0sJCTEJLyogV3JpdGUgbG9jay4JKi8KKyNkZWZpbmUgRl9VTkxDSwkJMgkvKiBSZW1vdmUgbG9jay4JICovCisKKy8qIEZvciBvbGQgaW1wbGVtZW50YXRpb24gb2YgYnNkIGZsb2NrKCkuICAqLworI2RlZmluZSBGX0VYTENLCQk0CS8qIG9yIDMgKi8KKyNkZWZpbmUgRl9TSExDSwkJOAkvKiBvciA0ICovCisKKyNpZmRlZiBfX1VTRV9CU0QKKy8qIE9wZXJhdGlvbnMgZm9yIGJzZCBmbG9jaygpLCBhbHNvIHVzZWQgYnkgdGhlIGtlcm5lbCBpbXBsZW1lbnRhdGlvbi4JKi8KKyMgZGVmaW5lIExPQ0tfU0gJMQkvKiBzaGFyZWQgbG9jayAqLworIyBkZWZpbmUgTE9DS19FWAkyCS8qIGV4Y2x1c2l2ZSBsb2NrICovCisjIGRlZmluZSBMT0NLX05CCTQJLyogb3InZCB3aXRoIG9uZSBvZiB0aGUgYWJvdmUgdG8gcHJldmVudAorCQkJCSAgIGJsb2NraW5nICovCisjIGRlZmluZSBMT0NLX1VOCTgJLyogcmVtb3ZlIGxvY2sgKi8KKyNlbmRpZgorCisjaWZkZWYgX19VU0VfR05VCisjIGRlZmluZSBMT0NLX01BTkQJMzIJLyogVGhpcyBpcyBhIG1hbmRhdG9yeSBmbG9jazoJKi8KKyMgZGVmaW5lIExPQ0tfUkVBRAk2NAkvKiAuLi4gd2hpY2ggYWxsb3dzIGNvbmN1cnJlbnQgcmVhZCBvcGVyYXRpb25zLgkgKi8KKyMgZGVmaW5lIExPQ0tfV1JJVEUJMTI4CS8qIC4uLiB3aGljaCBhbGxvd3MgY29uY3VycmVudCB3cml0ZSBvcGVyYXRpb25zLiAgKi8KKyMgZGVmaW5lIExPQ0tfUlcJMTkyCS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCByZWFkICYgd3JpdGUgb3BlcmF0aW9ucy4JICovCisjZW5kaWYKKworI2lmZGVmIF9fVVNFX0dOVQorLyogVHlwZXMgb2YgZGlyZWN0b3J5IG5vdGlmaWNhdGlvbnMgdGhhdCBtYXkgYmUgcmVxdWVzdGVkIHdpdGggRl9OT1RJRlkuICAqLworIyBkZWZpbmUgRE5fQUNDRVNTCTB4MDAwMDAwMDEJLyogRmlsZSBhY2Nlc3NlZC4gICovCisjIGRlZmluZSBETl9NT0RJRlkJMHgwMDAwMDAwMgkvKiBGaWxlIG1vZGlmaWVkLiAgKi8KKyMgZGVmaW5lIEROX0NSRUFURQkweDAwMDAwMDA0CS8qIEZpbGUgY3JlYXRlZC4gICovCisjIGRlZmluZSBETl9ERUxFVEUJMHgwMDAwMDAwOAkvKiBGaWxlIHJlbW92ZWQuICAqLworIyBkZWZpbmUgRE5fUkVOQU1FCTB4MDAwMDAwMTAJLyogRmlsZSByZW5hbWVkLiAgKi8KKyMgZGVmaW5lIEROX0FUVFJJQgkweDAwMDAwMDIwCS8qIEZpbGUgY2hhbmdlZCBhdHRpYnV0ZXMuICAqLworIyBkZWZpbmUgRE5fTVVMVElTSE9UCTB4ODAwMDAwMDAJLyogRG9uJ3QgcmVtb3ZlIG5vdGlmaWVyLiAgKi8KKyNlbmRpZgorCitzdHJ1Y3QgZmxvY2sKKyAgeworICAgIHNob3J0IGludCBsX3R5cGU7CS8qIFR5cGUgb2YgbG9jazogRl9SRExDSywgRl9XUkxDSywgb3IgRl9VTkxDSy4JKi8KKyAgICBzaG9ydCBpbnQgbF93aGVuY2U7CS8qIFdoZXJlIGBsX3N0YXJ0JyBpcyByZWxhdGl2ZSB0byAobGlrZSBgbHNlZWsnKS4gICovCisjaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKKyAgICBfX29mZl90IGxfc3RhcnQ7CS8qIE9mZnNldCB3aGVyZSB0aGUgbG9jayBiZWdpbnMuICAqLworICAgIF9fb2ZmX3QgbF9sZW47CS8qIFNpemUgb2YgdGhlIGxvY2tlZCBhcmVhOyB6ZXJvIG1lYW5zIHVudGlsIEVPRi4gICovCisjZWxzZQorICAgIF9fb2ZmNjRfdCBsX3N0YXJ0OwkvKiBPZmZzZXQgd2hlcmUgdGhlIGxvY2sgYmVnaW5zLiAgKi8KKyAgICBfX29mZjY0X3QgbF9sZW47CS8qIFNpemUgb2YgdGhlIGxvY2tlZCBhcmVhOyB6ZXJvIG1lYW5zIHVudGlsIEVPRi4gICovCisjZW5kaWYKKyAgICBfX3BpZF90IGxfcGlkOwkvKiBQcm9jZXNzIGhvbGRpbmcgdGhlIGxvY2suICAqLworICB9OworCisjaWZkZWYgX19VU0VfTEFSR0VGSUxFNjQKK3N0cnVjdCBmbG9jazY0CisgIHsKKyAgICBzaG9ydCBpbnQgbF90eXBlOwkvKiBUeXBlIG9mIGxvY2s6IEZfUkRMQ0ssIEZfV1JMQ0ssIG9yIEZfVU5MQ0suCSovCisgICAgc2hvcnQgaW50IGxfd2hlbmNlOwkvKiBXaGVyZSBgbF9zdGFydCcgaXMgcmVsYXRpdmUgdG8gKGxpa2UgYGxzZWVrJykuICAqLworICAgIF9fb2ZmNjRfdCBsX3N0YXJ0OwkvKiBPZmZzZXQgd2hlcmUgdGhlIGxvY2sgYmVnaW5zLiAgKi8KKyAgICBfX29mZjY0X3QgbF9sZW47CS8qIFNpemUgb2YgdGhlIGxvY2tlZCBhcmVhOyB6ZXJvIG1lYW5zIHVudGlsIEVPRi4gICovCisgICAgX19waWRfdCBsX3BpZDsJLyogUHJvY2VzcyBob2xkaW5nIHRoZSBsb2NrLiAgKi8KKyAgfTsKKyNlbmRpZgorCisvKiBEZWZpbmUgc29tZSBtb3JlIGNvbXBhdGliaWxpdHkgbWFjcm9zIHRvIGJlIGJhY2t3YXJkIGNvbXBhdGlibGUgd2l0aAorICAgQlNEIHN5c3RlbXMgd2hpY2ggZGlkIG5vdCBtYW5hZ2VkIHRvIGhpZGUgdGhlc2Uga2VybmVsIG1hY3Jvcy4gICovCisjaWZkZWYJX19VU0VfQlNECisjIGRlZmluZSBGQVBQRU5ECU9fQVBQRU5ECisjIGRlZmluZSBGRlNZTkMJCU9fRlNZTkMKKyMgZGVmaW5lIEZBU1lOQwkJT19BU1lOQworIyBkZWZpbmUgRk5PTkJMT0NLCU9fTk9OQkxPQ0sKKyMgZGVmaW5lIEZOREVMQVkJT19OREVMQVkKKyNlbmRpZiAvKiBVc2UgQlNELiAgKi8KKworLyogQWR2aXNlIHRvIGBwb3NpeF9mYWR2aXNlJy4gICovCisjaWZkZWYgX19VU0VfWE9QRU4ySworIyBkZWZpbmUgUE9TSVhfRkFEVl9OT1JNQUwJMCAvKiBObyBmdXJ0aGVyIHNwZWNpYWwgdHJlYXRtZW50LiAgKi8KKyMgZGVmaW5lIFBPU0lYX0ZBRFZfUkFORE9NCTEgLyogRXhwZWN0IHJhbmRvbSBwYWdlIHJlZmVyZW5jZXMuICAqLworIyBkZWZpbmUgUE9TSVhfRkFEVl9TRVFVRU5USUFMCTIgLyogRXhwZWN0IHNlcXVlbnRpYWwgcGFnZSByZWZlcmVuY2VzLgkgKi8KKyMgZGVmaW5lIFBPU0lYX0ZBRFZfV0lMTE5FRUQJMyAvKiBXaWxsIG5lZWQgdGhlc2UgcGFnZXMuICAqLworIyBkZWZpbmUgUE9TSVhfRkFEVl9ET05UTkVFRAk0IC8qIERvbid0IG5lZWQgdGhlc2UgcGFnZXMuICAqLworIyBkZWZpbmUgUE9TSVhfRkFEVl9OT1JFVVNFCTUgLyogRGF0YSB3aWxsIGJlIGFjY2Vzc2VkIG9uY2UuICAqLworI2VuZGlmCisKKworI2lmZGVmIF9fVVNFX0dOVQorLyogRmxhZ3MgZm9yIFNZTkNfRklMRV9SQU5HRS4gICovCisjIGRlZmluZSBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUJMSAvKiBXYWl0IHVwb24gd3JpdGVvdXQgb2YgYWxsIHBhZ2VzCisJCQkJCSAgICAgaW4gdGhlIHJhbmdlIGJlZm9yZSBwZXJmb3JtaW5nIHRoZQorCQkJCQkgICAgIHdyaXRlLiAgKi8KKyMgZGVmaW5lIFNZTkNfRklMRV9SQU5HRV9XUklURQkJMiAvKiBJbml0aWF0ZSB3cml0ZW91dCBvZiBhbGwgdGhvc2UKKwkJCQkJICAgICBkaXJ0eSBwYWdlcyBpbiB0aGUgcmFuZ2Ugd2hpY2ggYXJlCisJCQkJCSAgICAgbm90IHByZXNlbnRseSB1bmRlciB3cml0ZWJhY2suICAqLworIyBkZWZpbmUgU1lOQ19GSUxFX1JBTkdFX1dBSVRfQUZURVIJNCAvKiBXYWl0IHVwb24gd3JpdGVvdXQgb2YgYWxsIHBhZ2VzIGluCisJCQkJCSAgICAgdGhlIHJhbmdlIGFmdGVyIHBlcmZvcm1pbmcgdGhlCisJCQkJCSAgICAgd3JpdGUuICAqLworCisvKiBGbGFncyBmb3IgU1BMSUNFIGFuZCBWTVNQTElDRS4gICovCisjIGRlZmluZSBTUExJQ0VfRl9NT1ZFCQkxCS8qIE1vdmUgcGFnZXMgaW5zdGVhZCBvZiBjb3B5aW5nLiAgKi8KKyMgZGVmaW5lIFNQTElDRV9GX05PTkJMT0NLCTIJLyogRG9uJ3QgYmxvY2sgb24gdGhlIHBpcGUgc3BsaWNpbmcKKwkJCQkJICAgKGJ1dCB3ZSBtYXkgc3RpbGwgYmxvY2sgb24gdGhlIGZkCisJCQkJCSAgIHdlIHNwbGljZSBmcm9tL3RvKS4gICovCisjIGRlZmluZSBTUExJQ0VfRl9NT1JFCQk0CS8qIEV4cGVjdCBtb3JlIGRhdGEuICAqLworIyBkZWZpbmUgU1BMSUNFX0ZfR0lGVAkJOAkvKiBQYWdlcyBwYXNzZWQgaW4gYXJlIGEgZ2lmdC4gICovCisjZW5kaWYKKworX19CRUdJTl9ERUNMUworCisjaWZkZWYgX19VU0VfR05VCisKKy8qIFByb3ZpZGUga2VybmVsIGhpbnQgdG8gcmVhZCBhaGVhZC4gICovCitleHRlcm4gc3NpemVfdCByZWFkYWhlYWQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQsIHNpemVfdCBfX2NvdW50KQorICAgIF9fVEhST1c7CisKKworLyogU2VsZWN0aXZlIGZpbGUgY29udGVudCBzeW5jaCdpbmcuICAqLworZXh0ZXJuIGludCBzeW5jX2ZpbGVfcmFuZ2UgKGludCBfX2ZkLCBfX29mZjY0X3QgX19mcm9tLCBfX29mZjY0X3QgX190bywKKwkJCSAgICB1bnNpZ25lZCBpbnQgX19mbGFncyk7CisKKworLyogU3BsaWNlIGFkZHJlc3MgcmFuZ2UgaW50byBhIHBpcGUuICAqLworZXh0ZXJuIHNzaXplX3Qgdm1zcGxpY2UgKGludCBfX2Zkb3V0LCBjb25zdCBzdHJ1Y3QgaW92ZWMgKl9faW92LAorCQkJIHNpemVfdCBfX2NvdW50LCB1bnNpZ25lZCBpbnQgX19mbGFncyk7CisKKy8qIFNwbGljZSB0d28gZmlsZXMgdG9nZXRoZXIuICAqLworZXh0ZXJuIHNzaXplX3Qgc3BsaWNlIChpbnQgX19mZGluLCBfX29mZjY0X3QgKl9fb2ZmaW4sIGludCBfX2Zkb3V0LAorCQkgICAgICAgX19vZmY2NF90ICpfX29mZm91dCwgc2l6ZV90IF9fbGVuLAorCQkgICAgICAgdW5zaWduZWQgaW50IF9fZmxhZ3MpOworCisvKiBJbi1rZXJuZWwgaW1wbGVtZW50YXRpb24gb2YgdGVlIGZvciBwaXBlIGJ1ZmZlcnMuICAqLworZXh0ZXJuIHNzaXplX3QgdGVlIChpbnQgX19mZGluLCBpbnQgX19mZG91dCwgc2l6ZV90IF9fbGVuLAorCQkgICAgdW5zaWduZWQgaW50IF9fZmxhZ3MpOworCisjZW5kaWYKKworX19FTkRfREVDTFMKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2ZjbnRsMi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvZmNudGwyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJlODU4NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2ZjbnRsMi5oCkBAIC0wLDAgKzEsMTczIEBACisvKiBDaGVja2luZyBtYWNyb3MgZm9yIGZjbnRsIGZ1bmN0aW9ucy4KKyAgIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZglfRkNOVExfSAorIyBlcnJvciAiTmV2ZXIgaW5jbHVkZSA8Yml0cy9mY250bDIuaD4gZGlyZWN0bHk7IHVzZSA8ZmNudGwuaD4gaW5zdGVhZC4iCisjZW5kaWYKKworLyogQ2hlY2sgdGhhdCBjYWxscyB0byBvcGVuIGFuZCBvcGVuYXQgd2l0aCBPX0NSRUFUIHNldCBoYXZlIGFuCisgICBhcHByb3ByaWF0ZSB0aGlyZC9mb3VydGggcGFyYW1ldGVyLiAgKi8KKyNpZm5kZWYgX19VU0VfRklMRV9PRkZTRVQ2NAorZXh0ZXJuIGludCBfX29wZW5fMiAoX19jb25zdCBjaGFyICpfX3BhdGgsIGludCBfX29mbGFnKSBfX25vbm51bGwgKCgxKSk7CitleHRlcm4gaW50IF9fUkVESVJFQ1QgKF9fb3Blbl9hbGlhcywgKF9fY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19vZmxhZywgLi4uKSwKKwkJICAgICAgIG9wZW4pIF9fbm9ubnVsbCAoKDEpKTsKKyNlbHNlCitleHRlcm4gaW50IF9fUkVESVJFQ1QgKF9fb3Blbl8yLCAoX19jb25zdCBjaGFyICpfX3BhdGgsIGludCBfX29mbGFnKSwKKwkJICAgICAgIF9fb3BlbjY0XzIpIF9fbm9ubnVsbCAoKDEpKTsKK2V4dGVybiBpbnQgX19SRURJUkVDVCAoX19vcGVuX2FsaWFzLCAoX19jb25zdCBjaGFyICpfX3BhdGgsIGludCBfX29mbGFnLCAuLi4pLAorCQkgICAgICAgb3BlbjY0KSBfX25vbm51bGwgKCgxKSk7CisjZW5kaWYKK19fZXJyb3JkZWNsIChfX29wZW5fdG9vX21hbnlfYXJncywKKwkgICAgICJvcGVuIGNhbiBiZSBjYWxsZWQgZWl0aGVyIHdpdGggMiBvciAzIGFyZ3VtZW50cywgbm90IG1vcmUiKTsKK19fZXJyb3JkZWNsIChfX29wZW5fbWlzc2luZ19tb2RlLAorCSAgICAgIm9wZW4gd2l0aCBPX0NSRUFUIGluIHNlY29uZCBhcmd1bWVudCBuZWVkcyAzIGFyZ3VtZW50cyIpOworCitfX2V4dGVybl9hbHdheXNfaW5saW5lIGludAorb3BlbiAoX19jb25zdCBjaGFyICpfX3BhdGgsIGludCBfX29mbGFnLCAuLi4pCit7CisgIGlmIChfX3ZhX2FyZ19wYWNrX2xlbiAoKSA+IDEpCisgICAgX19vcGVuX3Rvb19tYW55X2FyZ3MgKCk7CisKKyAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChfX29mbGFnKSkKKyAgICB7CisgICAgICBpZiAoKF9fb2ZsYWcgJiBPX0NSRUFUKSAhPSAwICYmIF9fdmFfYXJnX3BhY2tfbGVuICgpIDwgMSkKKwl7CisJICBfX29wZW5fbWlzc2luZ19tb2RlICgpOworCSAgcmV0dXJuIF9fb3Blbl8yIChfX3BhdGgsIF9fb2ZsYWcpOworCX0KKyAgICAgIHJldHVybiBfX29wZW5fYWxpYXMgKF9fcGF0aCwgX19vZmxhZywgX192YV9hcmdfcGFjayAoKSk7CisgICAgfQorCisgIGlmIChfX3ZhX2FyZ19wYWNrX2xlbiAoKSA8IDEpCisgICAgcmV0dXJuIF9fb3Blbl8yIChfX3BhdGgsIF9fb2ZsYWcpOworCisgIHJldHVybiBfX29wZW5fYWxpYXMgKF9fcGF0aCwgX19vZmxhZywgX192YV9hcmdfcGFjayAoKSk7Cit9CisKKworI2lmZGVmIF9fVVNFX0xBUkdFRklMRTY0CitleHRlcm4gaW50IF9fb3BlbjY0XzIgKF9fY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19vZmxhZykgX19ub25udWxsICgoMSkpOworZXh0ZXJuIGludCBfX1JFRElSRUNUIChfX29wZW42NF9hbGlhcywgKF9fY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19vZmxhZywKKwkJCQkJLi4uKSwgb3BlbjY0KSBfX25vbm51bGwgKCgxKSk7CitfX2Vycm9yZGVjbCAoX19vcGVuNjRfdG9vX21hbnlfYXJncywKKwkgICAgICJvcGVuNjQgY2FuIGJlIGNhbGxlZCBlaXRoZXIgd2l0aCAyIG9yIDMgYXJndW1lbnRzLCBub3QgbW9yZSIpOworX19lcnJvcmRlY2wgKF9fb3BlbjY0X21pc3NpbmdfbW9kZSwKKwkgICAgICJvcGVuNjQgd2l0aCBPX0NSRUFUIGluIHNlY29uZCBhcmd1bWVudCBuZWVkcyAzIGFyZ3VtZW50cyIpOworCitfX2V4dGVybl9hbHdheXNfaW5saW5lIGludAorb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgaW50IF9fb2ZsYWcsIC4uLikKK3sKKyAgaWYgKF9fdmFfYXJnX3BhY2tfbGVuICgpID4gMSkKKyAgICBfX29wZW42NF90b29fbWFueV9hcmdzICgpOworCisgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19vZmxhZykpCisgICAgeworICAgICAgaWYgKChfX29mbGFnICYgT19DUkVBVCkgIT0gMCAmJiBfX3ZhX2FyZ19wYWNrX2xlbiAoKSA8IDEpCisJeworCSAgX19vcGVuNjRfbWlzc2luZ19tb2RlICgpOworCSAgcmV0dXJuIF9fb3BlbjY0XzIgKF9fcGF0aCwgX19vZmxhZyk7CisJfQorICAgICAgcmV0dXJuIF9fb3BlbjY0X2FsaWFzIChfX3BhdGgsIF9fb2ZsYWcsIF9fdmFfYXJnX3BhY2sgKCkpOworICAgIH0KKworICBpZiAoX192YV9hcmdfcGFja19sZW4gKCkgPCAxKQorICAgIHJldHVybiBfX29wZW42NF8yIChfX3BhdGgsIF9fb2ZsYWcpOworCisgIHJldHVybiBfX29wZW42NF9hbGlhcyAoX19wYXRoLCBfX29mbGFnLCBfX3ZhX2FyZ19wYWNrICgpKTsKK30KKyNlbmRpZgorCisKKyNpZmRlZiBfX1VTRV9BVEZJTEUKKyMgaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKK2V4dGVybiBpbnQgX19vcGVuYXRfMiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19vZmxhZykKKyAgICAgX19ub25udWxsICgoMikpOworZXh0ZXJuIGludCBfX1JFRElSRUNUIChfX29wZW5hdF9hbGlhcywgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcGF0aCwKKwkJCQkJaW50IF9fb2ZsYWcsIC4uLiksIG9wZW5hdCkKKyAgICAgX19ub25udWxsICgoMikpOworIyBlbHNlCitleHRlcm4gaW50IF9fUkVESVJFQ1QgKF9fb3BlbmF0XzIsIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3BhdGgsCisJCQkJICAgIGludCBfX29mbGFnKSwgX19vcGVuYXQ2NF8yKQorICAgICBfX25vbm51bGwgKCgyKSk7CitleHRlcm4gaW50IF9fUkVESVJFQ1QgKF9fb3BlbmF0X2FsaWFzLCAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19wYXRoLAorCQkJCQlpbnQgX19vZmxhZywgLi4uKSwgb3BlbmF0NjQpCisgICAgIF9fbm9ubnVsbCAoKDIpKTsKKyMgZW5kaWYKK19fZXJyb3JkZWNsIChfX29wZW5hdF90b29fbWFueV9hcmdzLAorCSAgICAgIm9wZW5hdCBjYW4gYmUgY2FsbGVkIGVpdGhlciB3aXRoIDMgb3IgNCBhcmd1bWVudHMsIG5vdCBtb3JlIik7CitfX2Vycm9yZGVjbCAoX19vcGVuYXRfbWlzc2luZ19tb2RlLAorCSAgICAgIm9wZW5hdCB3aXRoIE9fQ1JFQVQgaW4gdGhpcmQgYXJndW1lbnQgbmVlZHMgNCBhcmd1bWVudHMiKTsKKworX19leHRlcm5fYWx3YXlzX2lubGluZSBpbnQKK29wZW5hdCAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19vZmxhZywgLi4uKQoreworICBpZiAoX192YV9hcmdfcGFja19sZW4gKCkgPiAxKQorICAgIF9fb3BlbmF0X3Rvb19tYW55X2FyZ3MgKCk7CisKKyAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChfX29mbGFnKSkKKyAgICB7CisgICAgICBpZiAoKF9fb2ZsYWcgJiBPX0NSRUFUKSAhPSAwICYmIF9fdmFfYXJnX3BhY2tfbGVuICgpIDwgMSkKKwl7CisJICBfX29wZW5hdF9taXNzaW5nX21vZGUgKCk7CisJICByZXR1cm4gX19vcGVuYXRfMiAoX19mZCwgX19wYXRoLCBfX29mbGFnKTsKKwl9CisgICAgICByZXR1cm4gX19vcGVuYXRfYWxpYXMgKF9fZmQsIF9fcGF0aCwgX19vZmxhZywgX192YV9hcmdfcGFjayAoKSk7CisgICAgfQorCisgIGlmIChfX3ZhX2FyZ19wYWNrX2xlbiAoKSA8IDEpCisgICAgcmV0dXJuIF9fb3BlbmF0XzIgKF9fZmQsIF9fcGF0aCwgX19vZmxhZyk7CisKKyAgcmV0dXJuIF9fb3BlbmF0X2FsaWFzIChfX2ZkLCBfX3BhdGgsIF9fb2ZsYWcsIF9fdmFfYXJnX3BhY2sgKCkpOworfQorCisKKyMgaWZkZWYgX19VU0VfTEFSR0VGSUxFNjQKK2V4dGVybiBpbnQgX19vcGVuYXQ2NF8yIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3BhdGgsIGludCBfX29mbGFnKQorICAgICBfX25vbm51bGwgKCgyKSk7CitleHRlcm4gaW50IF9fUkVESVJFQ1QgKF9fb3BlbmF0NjRfYWxpYXMsIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3BhdGgsCisJCQkJCSAgaW50IF9fb2ZsYWcsIC4uLiksIG9wZW5hdDY0KQorICAgICBfX25vbm51bGwgKCgyKSk7CitfX2Vycm9yZGVjbCAoX19vcGVuYXQ2NF90b29fbWFueV9hcmdzLAorCSAgICAgIm9wZW5hdDY0IGNhbiBiZSBjYWxsZWQgZWl0aGVyIHdpdGggMyBvciA0IGFyZ3VtZW50cywgbm90IG1vcmUiKTsKK19fZXJyb3JkZWNsIChfX29wZW5hdDY0X21pc3NpbmdfbW9kZSwKKwkgICAgICJvcGVuYXQ2NCB3aXRoIE9fQ1JFQVQgaW4gdGhpcmQgYXJndW1lbnQgbmVlZHMgNCBhcmd1bWVudHMiKTsKKworX19leHRlcm5fYWx3YXlzX2lubGluZSBpbnQKK29wZW5hdDY0IChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3BhdGgsIGludCBfX29mbGFnLCAuLi4pCit7CisgIGlmIChfX3ZhX2FyZ19wYWNrX2xlbiAoKSA+IDEpCisgICAgX19vcGVuYXQ2NF90b29fbWFueV9hcmdzICgpOworCisgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19vZmxhZykpCisgICAgeworICAgICAgaWYgKChfX29mbGFnICYgT19DUkVBVCkgIT0gMCAmJiBfX3ZhX2FyZ19wYWNrX2xlbiAoKSA8IDEpCisJeworCSAgX19vcGVuYXQ2NF9taXNzaW5nX21vZGUgKCk7CisJICByZXR1cm4gX19vcGVuYXQ2NF8yIChfX2ZkLCBfX3BhdGgsIF9fb2ZsYWcpOworCX0KKyAgICAgIHJldHVybiBfX29wZW5hdDY0X2FsaWFzIChfX2ZkLCBfX3BhdGgsIF9fb2ZsYWcsIF9fdmFfYXJnX3BhY2sgKCkpOworICAgIH0KKworICBpZiAoX192YV9hcmdfcGFja19sZW4gKCkgPCAxKQorICAgIHJldHVybiBfX29wZW5hdDY0XzIgKF9fZmQsIF9fcGF0aCwgX19vZmxhZyk7CisKKyAgcmV0dXJuIF9fb3BlbmF0NjRfYWxpYXMgKF9fZmQsIF9fcGF0aCwgX19vZmxhZywgX192YV9hcmdfcGFjayAoKSk7Cit9CisjIGVuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2ZlbnYuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2ZlbnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWUzODYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvZmVudi5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgICAwMjExMC0xMzAxLCBVU0EuICAqLworCisjaWZuZGVmIF9GRU5WX0gKKyMgZXJyb3IgIk5ldmVyIHVzZSA8Yml0cy9mZW52Lmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxmZW52Lmg+IGluc3RlYWQuIgorI2VuZGlmCisKKy8qIERlZmluZSBiaXRzIHJlcHJlc2VudGluZyBleGNlcHRpb25zIGluIHRoZSBGUFUgc3RhdHVzIHdvcmQuICAqLworZW51bQorICB7CisgICAgRkVfSU5WQUxJRCA9IDEsCisjZGVmaW5lIEZFX0lOVkFMSUQgRkVfSU5WQUxJRAorICAgIEZFX0RJVkJZWkVSTyA9IDIsCisjZGVmaW5lIEZFX0RJVkJZWkVSTyBGRV9ESVZCWVpFUk8KKyAgICBGRV9PVkVSRkxPVyA9IDQsCisjZGVmaW5lIEZFX09WRVJGTE9XIEZFX09WRVJGTE9XCisgICAgRkVfVU5ERVJGTE9XID0gOCwKKyNkZWZpbmUgRkVfVU5ERVJGTE9XIEZFX1VOREVSRkxPVworICAgIEZFX0lORVhBQ1QgPSAxNiwKKyNkZWZpbmUgRkVfSU5FWEFDVCBGRV9JTkVYQUNUCisgIH07CisKKy8qIEFtb3VudCB0byBzaGlmdCBieSB0byBjb252ZXJ0IGFuIGV4Y2VwdGlvbiB0byBhIG1hc2sgYml0LiAgKi8KKyNkZWZpbmUgRkVfRVhDRVBUX1NISUZUCTgKKworLyogQWxsIHN1cHBvcnRlZCBleGNlcHRpb25zLiAgKi8KKyNkZWZpbmUgRkVfQUxMX0VYQ0VQVAlcCisJKEZFX0lOVkFMSUQgfCBGRV9ESVZCWVpFUk8gfCBGRV9PVkVSRkxPVyB8IEZFX1VOREVSRkxPVyB8IEZFX0lORVhBQ1QpCisKKy8qIFZGUCBzdXBwb3J0cyBhbGwgb2YgdGhlIGZvdXIgZGVmaW5lZCByb3VuZGluZyBtb2Rlcy4gICovCitlbnVtCisgIHsKKyAgICBGRV9UT05FQVJFU1QgPSAwLAorI2RlZmluZSBGRV9UT05FQVJFU1QgRkVfVE9ORUFSRVNUCisgICAgRkVfVVBXQVJEID0gMHg0MDAwMDAsCisjZGVmaW5lIEZFX1VQV0FSRCBGRV9VUFdBUkQKKyAgICBGRV9ET1dOV0FSRCA9IDB4ODAwMDAwLAorI2RlZmluZSBGRV9ET1dOV0FSRCBGRV9ET1dOV0FSRAorICAgIEZFX1RPV0FSRFpFUk8gPSAweGMwMDAwMAorI2RlZmluZSBGRV9UT1dBUkRaRVJPIEZFX1RPV0FSRFpFUk8KKyAgfTsKKworLyogVHlwZSByZXByZXNlbnRpbmcgZXhjZXB0aW9uIGZsYWdzLiAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgZmV4Y2VwdF90OworCisvKiBUeXBlIHJlcHJlc2VudGluZyBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudC4gICovCit0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdW5zaWduZWQgaW50IF9fY3c7CisgIH0KK2ZlbnZfdDsKKworLyogSWYgdGhlIGRlZmF1bHQgYXJndW1lbnQgaXMgdXNlZCB3ZSB1c2UgdGhpcyB2YWx1ZS4gICovCisjZGVmaW5lIEZFX0RGTF9FTlYJKChmZW52X3QgKikgLTFsKQorCisjaWZkZWYgX19VU0VfR05VCisvKiBGbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCB3aGVyZSBub25lIG9mIHRoZSBleGNlcHRpb25zIGFyZSBtYXNrZWQuICAqLworIyBkZWZpbmUgRkVfTk9NQVNLX0VOViAgKChfX2NvbnN0IGZlbnZfdCAqKSAtMikKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvZmVudmlubGluZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvZmVudmlubGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZjc3YjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9mZW52aW5saW5lLmgKQEAgLTAsMCArMSw4IEBACisvKiBUaGlzIGZpbGUgcHJvdmlkZXMgaW5saW5lIHZlcnNpb25zIG9mIGZsb2F0aW5nLXBpbnQgZW52aXJvbm1lbnQKKyAgIGhhbmRsaW5nIGZ1bmN0aW9ucy4gIElmIHRoZXJlIHdlcmUgYW55LiAgKi8KKworI2lmbmRlZiBfX05PX01BVEhfSU5MSU5FUworCisvKiBIZXJlIGlzIHdoZXJlIHRoZSBjb2RlIHdvdWxkIGdvLiAgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9odWdlX3ZhbC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWNhMTFmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaApAQCAtMCwwICsxLDU1IEBACisvKiBgSFVHRV9WQUwnIGNvbnN0YW50IGZvciBJRUVFIDc1NCBtYWNoaW5lcyAod2hlcmUgaXQgaXMgaW5maW5pdHkpLgorICAgVXNlZCBieSA8c3RkbGliLmg+IGFuZCA8bWF0aC5oPiBmdW5jdGlvbnMgZm9yIG92ZXJmbG93LgorICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk5LCAyMDAwLCAyMDA0CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfTUFUSF9ICisjIGVycm9yICJOZXZlciB1c2UgPGJpdHMvaHVnZV92YWwuaD4gZGlyZWN0bHk7IGluY2x1ZGUgPG1hdGguaD4gaW5zdGVhZC4iCisjZW5kaWYKKworLyogSUVFRSBwb3NpdGl2ZSBpbmZpbml0eSAoLUhVR0VfVkFMIGlzIG5lZ2F0aXZlIGluZmluaXR5KS4gICovCisKKyNpZiBfX0dOVUNfUFJFUkVRKDMsMykKKyMgZGVmaW5lIEhVR0VfVkFMCShfX2J1aWx0aW5faHVnZV92YWwoKSkKKyNlbGlmIF9fR05VQ19QUkVSRVEoMiw5NikKKyMgZGVmaW5lIEhVR0VfVkFMCShfX2V4dGVuc2lvbl9fIDB4MS4wcDIwNDcpCisjZWxpZiBkZWZpbmVkIF9fR05VQ19fCisKKyMgZGVmaW5lIEhVR0VfVkFMIFwKKyAgKF9fZXh0ZW5zaW9uX18JCQkJCQkJICAgICAgXAorICAgKCh1bmlvbiB7IHVuc2lnbmVkIF9fbCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0RJX18pKSk7IGRvdWJsZSBfX2Q7IH0pICAgXAorICAgIHsgX19sOiAweDdmZjAwMDAwMDAwMDAwMDBVTEwgfSkuX19kKQorCisjZWxzZSAvKiBub3QgR0NDICovCisKKyMgaW5jbHVkZSA8ZW5kaWFuLmg+CisKK3R5cGVkZWYgdW5pb24geyB1bnNpZ25lZCBjaGFyIF9fY1s4XTsgZG91YmxlIF9fZDsgfSBfX2h1Z2VfdmFsX3Q7CisKKyMgaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorIyAgZGVmaW5lIF9fSFVHRV9WQUxfYnl0ZXMJeyAweDdmLCAweGYwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKyMgZW5kaWYKKyMgaWYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTgorIyAgZGVmaW5lIF9fSFVHRV9WQUxfYnl0ZXMJeyAwLCAwLCAwLCAwLCAwLCAwLCAweGYwLCAweDdmIH0KKyMgZW5kaWYKKworc3RhdGljIF9faHVnZV92YWxfdCBfX2h1Z2VfdmFsID0geyBfX0hVR0VfVkFMX2J5dGVzIH07CisjIGRlZmluZSBIVUdFX1ZBTAkoX19odWdlX3ZhbC5fX2QpCisKKyNlbmRpZgkvKiBHQ0MuICAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWxmLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9odWdlX3ZhbGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzg1MzQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWxmLmgKQEAgLTAsMCArMSw1MyBAQAorLyogYEhVR0VfVkFMRicgY29uc3RhbnQgZm9yIElFRUUgNzU0IG1hY2hpbmVzICh3aGVyZSBpdCBpcyBpbmZpbml0eSkuCisgICBVc2VkIGJ5IDxzdGRsaWIuaD4gYW5kIDxtYXRoLmg+IGZ1bmN0aW9ucyBmb3Igb3ZlcmZsb3cuCisgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTksIDIwMDAsIDIwMDQKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9NQVRIX0gKKyMgZXJyb3IgIk5ldmVyIHVzZSA8Yml0cy9odWdlX3ZhbGYuaD4gZGlyZWN0bHk7IGluY2x1ZGUgPG1hdGguaD4gaW5zdGVhZC4iCisjZW5kaWYKKworLyogSUVFRSBwb3NpdGl2ZSBpbmZpbml0eSAoLUhVR0VfVkFMIGlzIG5lZ2F0aXZlIGluZmluaXR5KS4gICovCisKKyNpZiBfX0dOVUNfUFJFUkVRKDMsMykKKyMgZGVmaW5lIEhVR0VfVkFMRgkoX19idWlsdGluX2h1Z2VfdmFsZigpKQorI2VsaWYgX19HTlVDX1BSRVJFUSgyLDk2KQorIyBkZWZpbmUgSFVHRV9WQUxGCShfX2V4dGVuc2lvbl9fIDB4MS4wcDI1NWYpCisjZWxpZiBkZWZpbmVkIF9fR05VQ19fCisKKyMgICBkZWZpbmUgSFVHRV9WQUxGIFwKKyAgKF9fZXh0ZW5zaW9uX18JCQkJCQkJICAgICAgXAorICAgKCh1bmlvbiB7IHVuc2lnbmVkIF9fbCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1NJX18pKSk7IGZsb2F0IF9fZDsgfSkgICAgXAorICAgIHsgX19sOiAweDdmODAwMDAwVUwgfSkuX19kKQorCisjZWxzZSAvKiBub3QgR0NDICovCisKK3R5cGVkZWYgdW5pb24geyB1bnNpZ25lZCBjaGFyIF9fY1s0XTsgZmxvYXQgX19mOyB9IF9faHVnZV92YWxmX3Q7CisKKyMgaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorIyAgZGVmaW5lIF9fSFVHRV9WQUxGX2J5dGVzCXsgMHg3ZiwgMHg4MCwgMCwgMCB9CisjIGVuZGlmCisjIGlmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKyMgIGRlZmluZSBfX0hVR0VfVkFMRl9ieXRlcwl7IDAsIDAsIDB4ODAsIDB4N2YgfQorIyBlbmRpZgorCitzdGF0aWMgX19odWdlX3ZhbGZfdCBfX2h1Z2VfdmFsZiA9IHsgX19IVUdFX1ZBTEZfYnl0ZXMgfTsKKyMgZGVmaW5lIEhVR0VfVkFMRgkoX19odWdlX3ZhbGYuX19mKQorCisjZW5kaWYJLyogR0NDLiAgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsbC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVlOGUyMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsbC5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qIERlZmF1bHQgYEhVR0VfVkFMTCcgY29uc3RhbnQuCisgICBVc2VkIGJ5IDxzdGRsaWIuaD4gYW5kIDxtYXRoLmg+IGZ1bmN0aW9ucyBmb3Igb3ZlcmZsb3cuCisgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTYsIDE5OTcsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX01BVEhfSAorIyBlcnJvciAiTmV2ZXIgdXNlIDxiaXRzL2h1Z2VfdmFsbC5oPiBkaXJlY3RseTsgaW5jbHVkZSA8bWF0aC5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWYgX19HTlVDX1BSRVJFUSgzLDMpCisjIGRlZmluZSBIVUdFX1ZBTEwJKF9fYnVpbHRpbl9odWdlX3ZhbGwoKSkKKyNlbHNlCisjIGRlZmluZSBIVUdFX1ZBTEwJKChsb25nIGRvdWJsZSkgSFVHRV9WQUwpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2luLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9pbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NTdhMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9pbi5oCkBAIC0wLDAgKzEsMTc2IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5OSwgMjAwMCwgMjAwNCwgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyogTGludXggdmVyc2lvbi4gICovCisKKyNpZm5kZWYgX05FVElORVRfSU5fSAorIyBlcnJvciAiTmV2ZXIgdXNlIDxiaXRzL2luLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxuZXRpbmV0L2luLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKy8qIE9wdGlvbnMgZm9yIHVzZSB3aXRoIGBnZXRzb2Nrb3B0JyBhbmQgYHNldHNvY2tvcHQnIGF0IHRoZSBJUCBsZXZlbC4KKyAgIFRoZSBmaXJzdCB3b3JkIGluIHRoZSBjb21tZW50IGF0IHRoZSByaWdodCBpcyB0aGUgZGF0YSB0eXBlIHVzZWQ7CisgICAiYm9vbCIgbWVhbnMgYSBib29sZWFuIHZhbHVlIHN0b3JlZCBpbiBhbiBgaW50Jy4gICovCisjZGVmaW5lICAgICAgICBJUF9PUFRJT05TICAgICAgNCAgICAgICAvKiBpcF9vcHRzOyBJUCBwZXItcGFja2V0IG9wdGlvbnMuICAqLworI2RlZmluZSAgICAgICAgSVBfSERSSU5DTCAgICAgIDMgICAgICAgLyogaW50OyBIZWFkZXIgaXMgaW5jbHVkZWQgd2l0aCBkYXRhLiAgKi8KKyNkZWZpbmUgICAgICAgIElQX1RPUyAgICAgICAgICAxICAgICAgIC8qIGludDsgSVAgdHlwZSBvZiBzZXJ2aWNlIGFuZCBwcmVjZWRlbmNlLiAgKi8KKyNkZWZpbmUgICAgICAgIElQX1RUTCAgICAgICAgICAyICAgICAgIC8qIGludDsgSVAgdGltZSB0byBsaXZlLiAgKi8KKyNkZWZpbmUgICAgICAgIElQX1JFQ1ZPUFRTICAgICA2ICAgICAgIC8qIGJvb2w7IFJlY2VpdmUgYWxsIElQIG9wdGlvbnMgdy9kYXRhZ3JhbS4gICovCisvKiBGb3IgQlNEIGNvbXBhdGliaWxpdHkuICAqLworI2RlZmluZSAgICAgICAgSVBfUkVDVlJFVE9QVFMgIElQX1JFVE9QVFMgICAgICAgLyogYm9vbDsgUmVjZWl2ZSBJUCBvcHRpb25zIGZvciByZXNwb25zZS4gICovCisjZGVmaW5lICAgICAgICBJUF9SRVRPUFRTICAgICAgNyAgICAgICAvKiBpcF9vcHRzOyBTZXQvZ2V0IElQIHBlci1wYWNrZXQgb3B0aW9ucy4gICovCisjZGVmaW5lIElQX01VTFRJQ0FTVF9JRiAzMgkvKiBpbl9hZGRyOyBzZXQvZ2V0IElQIG11bHRpY2FzdCBpL2YgKi8KKyNkZWZpbmUgSVBfTVVMVElDQVNUX1RUTCAzMwkvKiB1X2NoYXI7IHNldC9nZXQgSVAgbXVsdGljYXN0IHR0bCAqLworI2RlZmluZSBJUF9NVUxUSUNBU1RfTE9PUCAzNAkvKiBpX2NoYXI7IHNldC9nZXQgSVAgbXVsdGljYXN0IGxvb3BiYWNrICovCisjZGVmaW5lIElQX0FERF9NRU1CRVJTSElQIDM1CS8qIGlwX21yZXE7IGFkZCBhbiBJUCBncm91cCBtZW1iZXJzaGlwICovCisjZGVmaW5lIElQX0RST1BfTUVNQkVSU0hJUCAzNgkvKiBpcF9tcmVxOyBkcm9wIGFuIElQIGdyb3VwIG1lbWJlcnNoaXAgKi8KKyNkZWZpbmUgSVBfVU5CTE9DS19TT1VSQ0UgMzcJLyogaXBfbXJlcV9zb3VyY2U6IHVuYmxvY2sgZGF0YSBmcm9tIHNvdXJjZSAqLworI2RlZmluZSBJUF9CTE9DS19TT1VSQ0UgMzgJLyogaXBfbXJlcV9zb3VyY2U6IGJsb2NrIGRhdGEgZnJvbSBzb3VyY2UgKi8KKyNkZWZpbmUgSVBfQUREX1NPVVJDRV9NRU1CRVJTSElQIDM5IC8qIGlwX21yZXFfc291cmNlOiBqb2luIHNvdXJjZSBncm91cCAqLworI2RlZmluZSBJUF9EUk9QX1NPVVJDRV9NRU1CRVJTSElQIDQwIC8qIGlwX21yZXFfc291cmNlOiBsZWF2ZSBzb3VyY2UgZ3JvdXAgKi8KKyNkZWZpbmUgSVBfTVNGSUxURVIgNDEKKyNpZiBkZWZpbmVkIF9fVVNFX01JU0MgfHwgZGVmaW5lZCBfX1VTRV9HTlUKKyMgZGVmaW5lIE1DQVNUX0pPSU5fR1JPVVAgNDIJLyogZ3JvdXBfcmVxOiBqb2luIGFueS1zb3VyY2UgZ3JvdXAgKi8KKyMgZGVmaW5lIE1DQVNUX0JMT0NLX1NPVVJDRSA0MwkvKiBncm91cF9zb3VyY2VfcmVxOiBibG9jayBmcm9tIGdpdmVuIGdyb3VwICovCisjIGRlZmluZSBNQ0FTVF9VTkJMT0NLX1NPVVJDRSA0NCAvKiBncm91cF9zb3VyY2VfcmVxOiB1bmJsb2NrIGZyb20gZ2l2ZW4gZ3JvdXAqLworIyBkZWZpbmUgTUNBU1RfTEVBVkVfR1JPVVAgNDUJLyogZ3JvdXBfcmVxOiBsZWF2ZSBhbnktc291cmNlIGdyb3VwICovCisjIGRlZmluZSBNQ0FTVF9KT0lOX1NPVVJDRV9HUk9VUCA0NiAvKiBncm91cF9zb3VyY2VfcmVxOiBqb2luIHNvdXJjZS1zcGVjIGdyICovCisjIGRlZmluZSBNQ0FTVF9MRUFWRV9TT1VSQ0VfR1JPVVAgNDcgLyogZ3JvdXBfc291cmNlX3JlcTogbGVhdmUgc291cmNlLXNwZWMgZ3IqLworIyBkZWZpbmUgTUNBU1RfTVNGSUxURVIgNDgKKworIyBkZWZpbmUgTUNBU1RfRVhDTFVERSAgIDAKKyMgZGVmaW5lIE1DQVNUX0lOQ0xVREUgICAxCisjZW5kaWYKKworI2RlZmluZSBJUF9ST1VURVJfQUxFUlQgICAgNQkvKiBib29sICovCisjZGVmaW5lIElQX1BLVElORk8gICAgICAgICA4CS8qIGJvb2wgKi8KKyNkZWZpbmUgSVBfUEtUT1BUSU9OUyAgICAgIDkKKyNkZWZpbmUgSVBfUE1UVURJU0MgICAgICAgIDEwCS8qIG9ic29sZXRlIG5hbWU/ICovCisjZGVmaW5lIElQX01UVV9ESVNDT1ZFUiAgICAxMAkvKiBpbnQ7IHNlZSBiZWxvdyAqLworI2RlZmluZSBJUF9SRUNWRVJSICAgICAgICAgMTEJLyogYm9vbCAqLworI2RlZmluZSBJUF9SRUNWVFRMICAgICAgICAgMTIJLyogYm9vbCAqLworI2RlZmluZSBJUF9SRUNWVE9TICAgICAgICAgMTMJLyogYm9vbCAqLworCisKKy8qIElQX01UVV9ESVNDT1ZFUiBhcmd1bWVudHMuICAqLworI2RlZmluZSBJUF9QTVRVRElTQ19ET05UICAgMAkvKiBOZXZlciBzZW5kIERGIGZyYW1lcy4gICovCisjZGVmaW5lIElQX1BNVFVESVNDX1dBTlQgICAxCS8qIFVzZSBwZXIgcm91dGUgaGludHMuICAqLworI2RlZmluZSBJUF9QTVRVRElTQ19ETyAgICAgMgkvKiBBbHdheXMgREYuICAqLworI2RlZmluZSBJUF9QTVRVRElTQ19QUk9CRSAgMwkvKiBJZ25vcmUgZHN0IHBtdHUuICAqLworCisvKiBUbyBzZWxlY3QgdGhlIElQIGxldmVsLiAgKi8KKyNkZWZpbmUgU09MX0lQCTAKKworI2RlZmluZSBJUF9ERUZBVUxUX01VTFRJQ0FTVF9UVEwgICAgICAgIDEKKyNkZWZpbmUgSVBfREVGQVVMVF9NVUxUSUNBU1RfTE9PUCAgICAgICAxCisjZGVmaW5lIElQX01BWF9NRU1CRVJTSElQUyAgICAgICAgICAgICAgMjAKKworI2lmIGRlZmluZWQgX19VU0VfTUlTQyB8fCBkZWZpbmVkIF9fVVNFX0dOVQorLyogU3RydWN0dXJlIHVzZWQgdG8gZGVzY3JpYmUgSVAgb3B0aW9ucyBmb3IgSVBfT1BUSU9OUyBhbmQgSVBfUkVUT1BUUy4KKyAgIFRoZSBgaXBfZHN0JyBmaWVsZCBpcyB1c2VkIGZvciB0aGUgZmlyc3QtaG9wIGdhdGV3YXkgd2hlbiB1c2luZyBhCisgICBzb3VyY2Ugcm91dGUgKHRoaXMgZ2V0cyBwdXQgaW50byB0aGUgaGVhZGVyIHByb3BlcikuICAqLworc3RydWN0IGlwX29wdHMKKyAgeworICAgIHN0cnVjdCBpbl9hZGRyIGlwX2RzdDsJLyogRmlyc3QgaG9wOyB6ZXJvIHdpdGhvdXQgc291cmNlIHJvdXRlLiAgKi8KKyAgICBjaGFyIGlwX29wdHNbNDBdOwkJLyogQWN0dWFsbHkgdmFyaWFibGUgaW4gc2l6ZS4gICovCisgIH07CisKKy8qIExpa2UgYHN0cnVjdCBpcF9tcmVxJyBidXQgaW5jbHVkaW5nIGludGVyZmFjZSBzcGVjaWZpY2F0aW9uIGJ5IGluZGV4LiAgKi8KK3N0cnVjdCBpcF9tcmVxbgorICB7CisgICAgc3RydWN0IGluX2FkZHIgaW1yX211bHRpYWRkcjsJLyogSVAgbXVsdGljYXN0IGFkZHJlc3Mgb2YgZ3JvdXAgKi8KKyAgICBzdHJ1Y3QgaW5fYWRkciBpbXJfYWRkcmVzczsJCS8qIGxvY2FsIElQIGFkZHJlc3Mgb2YgaW50ZXJmYWNlICovCisgICAgaW50CWltcl9pZmluZGV4OwkJCS8qIEludGVyZmFjZSBpbmRleCAqLworICB9OworCisvKiBTdHJ1Y3R1cmUgdXNlZCBmb3IgSVBfUEtUSU5GTy4gICovCitzdHJ1Y3QgaW5fcGt0aW5mbworICB7CisgICAgaW50IGlwaV9pZmluZGV4OwkJCS8qIEludGVyZmFjZSBpbmRleCAgKi8KKyAgICBzdHJ1Y3QgaW5fYWRkciBpcGlfc3BlY19kc3Q7CS8qIFJvdXRpbmcgZGVzdGluYXRpb24gYWRkcmVzcyAgKi8KKyAgICBzdHJ1Y3QgaW5fYWRkciBpcGlfYWRkcjsJCS8qIEhlYWRlciBkZXN0aW5hdGlvbiBhZGRyZXNzICAqLworICB9OworI2VuZGlmCisKKy8qIE9wdGlvbnMgZm9yIHVzZSB3aXRoIGBnZXRzb2Nrb3B0JyBhbmQgYHNldHNvY2tvcHQnIGF0IHRoZSBJUHY2IGxldmVsLgorICAgVGhlIGZpcnN0IHdvcmQgaW4gdGhlIGNvbW1lbnQgYXQgdGhlIHJpZ2h0IGlzIHRoZSBkYXRhIHR5cGUgdXNlZDsKKyAgICJib29sIiBtZWFucyBhIGJvb2xlYW4gdmFsdWUgc3RvcmVkIGluIGFuIGBpbnQnLiAgKi8KKyNkZWZpbmUgSVBWNl9BRERSRk9STQkJMQorI2RlZmluZSBJUFY2XzIyOTJQS1RJTkZPCTIKKyNkZWZpbmUgSVBWNl8yMjkySE9QT1BUUwkzCisjZGVmaW5lIElQVjZfMjI5MkRTVE9QVFMJNAorI2RlZmluZSBJUFY2XzIyOTJSVEhEUgkJNQorI2RlZmluZSBJUFY2XzIyOTJQS1RPUFRJT05TCTYKKyNkZWZpbmUgSVBWNl9DSEVDS1NVTQkJNworI2RlZmluZSBJUFY2XzIyOTJIT1BMSU1JVAk4CisKKyNkZWZpbmUgU0NNX1NSQ1JUCQlJUFY2X1JYU1JDUlQKKworI2RlZmluZSBJUFY2X05FWFRIT1AJCTkKKyNkZWZpbmUgSVBWNl9BVVRISERSCQkxMAorI2RlZmluZSBJUFY2X1VOSUNBU1RfSE9QUwkxNgorI2RlZmluZSBJUFY2X01VTFRJQ0FTVF9JRgkxNworI2RlZmluZSBJUFY2X01VTFRJQ0FTVF9IT1BTCTE4CisjZGVmaW5lIElQVjZfTVVMVElDQVNUX0xPT1AJMTkKKyNkZWZpbmUgSVBWNl9KT0lOX0dST1VQCQkyMAorI2RlZmluZSBJUFY2X0xFQVZFX0dST1VQCTIxCisjZGVmaW5lIElQVjZfUk9VVEVSX0FMRVJUCTIyCisjZGVmaW5lIElQVjZfTVRVX0RJU0NPVkVSCTIzCisjZGVmaW5lIElQVjZfTVRVCQkyNAorI2RlZmluZSBJUFY2X1JFQ1ZFUlIJCTI1CisjZGVmaW5lIElQVjZfVjZPTkxZCQkyNgorI2RlZmluZSBJUFY2X0pPSU5fQU5ZQ0FTVAkyNworI2RlZmluZSBJUFY2X0xFQVZFX0FOWUNBU1QJMjgKKyNkZWZpbmUgSVBWNl9JUFNFQ19QT0xJQ1kJMzQKKyNkZWZpbmUgSVBWNl9YRlJNX1BPTElDWQkzNQorCisjZGVmaW5lIElQVjZfUkVDVlBLVElORk8JNDkKKyNkZWZpbmUgSVBWNl9QS1RJTkZPCQk1MAorI2RlZmluZSBJUFY2X1JFQ1ZIT1BMSU1JVAk1MQorI2RlZmluZSBJUFY2X0hPUExJTUlUCQk1MgorI2RlZmluZSBJUFY2X1JFQ1ZIT1BPUFRTCTUzCisjZGVmaW5lIElQVjZfSE9QT1BUUwkJNTQKKyNkZWZpbmUgSVBWNl9SVEhEUkRTVE9QVFMJNTUKKyNkZWZpbmUgSVBWNl9SRUNWUlRIRFIJCTU2CisjZGVmaW5lIElQVjZfUlRIRFIJCTU3CisjZGVmaW5lIElQVjZfUkVDVkRTVE9QVFMJNTgKKyNkZWZpbmUgSVBWNl9EU1RPUFRTCQk1OQorCisjZGVmaW5lIElQVjZfUkVDVlRDTEFTUwkJNjYKKyNkZWZpbmUgSVBWNl9UQ0xBU1MJCTY3CisKKy8qIE9ic29sZXRlIHN5bm9ueW1zIGZvciB0aGUgYWJvdmUuICAqLworI2RlZmluZSBJUFY2X0FERF9NRU1CRVJTSElQCUlQVjZfSk9JTl9HUk9VUAorI2RlZmluZSBJUFY2X0RST1BfTUVNQkVSU0hJUAlJUFY2X0xFQVZFX0dST1VQCisjZGVmaW5lIElQVjZfUlhIT1BPUFRTCQlJUFY2X0hPUE9QVFMKKyNkZWZpbmUgSVBWNl9SWERTVE9QVFMJCUlQVjZfRFNUT1BUUworCisvKiBJUFY2X01UVV9ESVNDT1ZFUiB2YWx1ZXMuICAqLworI2RlZmluZSBJUFY2X1BNVFVESVNDX0RPTlQJMAkvKiBOZXZlciBzZW5kIERGIGZyYW1lcy4gICovCisjZGVmaW5lIElQVjZfUE1UVURJU0NfV0FOVAkxCS8qIFVzZSBwZXIgcm91dGUgaGludHMuICAqLworI2RlZmluZSBJUFY2X1BNVFVESVNDX0RPCTIJLyogQWx3YXlzIERGLiAgKi8KKyNkZWZpbmUgSVBWNl9QTVRVRElTQ19QUk9CRQkzCS8qIElnbm9yZSBkc3QgcG10dS4gICovCisKKy8qIFNvY2tldCBsZXZlbCB2YWx1ZXMgZm9yIElQdjYuICAqLworI2RlZmluZSBTT0xfSVBWNiAgICAgICAgNDEKKyNkZWZpbmUgU09MX0lDTVBWNiAgICAgIDU4CisKKy8qIFJvdXRpbmcgaGVhZGVyIG9wdGlvbnMgZm9yIElQdjYuICAqLworI2RlZmluZSBJUFY2X1JUSERSX0xPT1NFCTAJLyogSG9wIGRvZXNuJ3QgbmVlZCB0byBiZSBuZWlnaGJvdXIuICovCisjZGVmaW5lIElQVjZfUlRIRFJfU1RSSUNUCTEJLyogSG9wIG11c3QgYmUgYSBuZWlnaGJvdXIuICAqLworCisjZGVmaW5lIElQVjZfUlRIRFJfVFlQRV8wCTAJLyogSVB2NiBSb3V0aW5nIGhlYWRlciB0eXBlIDAuICAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvaW5mLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9pbmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjE5Zjc1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvaW5mLmgKQEAgLTAsMCArMSwzMCBAQAorLyogYElORklOSVRZJyBjb25zdGFudCBmb3IgSUVFRSA3NTQgbWFjaGluZXMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX01BVEhfSAorIyBlcnJvciAiTmV2ZXIgdXNlIDxiaXRzL2luZi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8bWF0aC5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisvKiBJRUVFIHBvc2l0aXZlIGluZmluaXR5LiAgKi8KKworI2lmIF9fR05VQ19QUkVSRVEoMywzKQorIyBkZWZpbmUgSU5GSU5JVFkJKF9fYnVpbHRpbl9pbmZmKCkpCisjZWxzZQorIyBkZWZpbmUgSU5GSU5JVFkJSFVHRV9WQUxGCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2luaXRzcGluLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9pbml0c3Bpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNmYxNzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9pbml0c3Bpbi5oCkBAIC0wLDAgKzEgQEAKKy8qIE5vIHRocmVhZCBzdXBwb3J0LiAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvaW9jdGwtdHlwZXMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2lvY3RsLXR5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg1NmEwNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2lvY3RsLXR5cGVzLmgKQEAgLTAsMCArMSw3OCBAQAorLyogU3RydWN0dXJlIHR5cGVzIGZvciBwcmUtdGVybWlvcyB0ZXJtaW5hbCBpb2N0bHMuICBMaW51eCB2ZXJzaW9uLgorICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk5LCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9TWVNfSU9DVExfSAorIyBlcnJvciAiTmV2ZXIgdXNlIDxiaXRzL2lvY3RsLXR5cGVzLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxzeXMvaW9jdGwuaD4gaW5zdGVhZC4iCisjZW5kaWYKKworLyogR2V0IGRlZmluaXRpb24gb2YgY29uc3RhbnRzIGZvciB1c2Ugd2l0aCBgaW9jdGwnLiAgKi8KKyNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CisKKworc3RydWN0IHdpbnNpemUKKyAgeworICAgIHVuc2lnbmVkIHNob3J0IGludCB3c19yb3c7CisgICAgdW5zaWduZWQgc2hvcnQgaW50IHdzX2NvbDsKKyAgICB1bnNpZ25lZCBzaG9ydCBpbnQgd3NfeHBpeGVsOworICAgIHVuc2lnbmVkIHNob3J0IGludCB3c195cGl4ZWw7CisgIH07CisKKyNkZWZpbmUgTkNDIDgKK3N0cnVjdCB0ZXJtaW8KKyAgeworICAgIHVuc2lnbmVkIHNob3J0IGludCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLworICAgIHVuc2lnbmVkIHNob3J0IGludCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCBpbnQgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworICAgIHVuc2lnbmVkIHNob3J0IGludCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLworICAgIHVuc2lnbmVkIGNoYXIgY19saW5lOwkJLyogbGluZSBkaXNjaXBsaW5lICovCisgICAgdW5zaWduZWQgY2hhciBjX2NjW05DQ107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KK307CisKKy8qIG1vZGVtIGxpbmVzICovCisjZGVmaW5lIFRJT0NNX0xFCTB4MDAxCisjZGVmaW5lIFRJT0NNX0RUUgkweDAwMgorI2RlZmluZSBUSU9DTV9SVFMJMHgwMDQKKyNkZWZpbmUgVElPQ01fU1QJMHgwMDgKKyNkZWZpbmUgVElPQ01fU1IJMHgwMTAKKyNkZWZpbmUgVElPQ01fQ1RTCTB4MDIwCisjZGVmaW5lIFRJT0NNX0NBUgkweDA0MAorI2RlZmluZSBUSU9DTV9STkcJMHgwODAKKyNkZWZpbmUgVElPQ01fRFNSCTB4MTAwCisjZGVmaW5lIFRJT0NNX0NECVRJT0NNX0NBUgorI2RlZmluZSBUSU9DTV9SSQlUSU9DTV9STkcKKworLyogaW9jdGwgKGZkLCBUSU9DU0VSR0VUTFNSLCAmcmVzdWx0KSB3aGVyZSByZXN1bHQgbWF5IGJlIGFzIGJlbG93ICovCisKKy8qIGxpbmUgZGlzY2lwbGluZXMgKi8KKyNkZWZpbmUgTl9UVFkJCTAKKyNkZWZpbmUgTl9TTElQCQkxCisjZGVmaW5lIE5fTU9VU0UJCTIKKyNkZWZpbmUgTl9QUFAJCTMKKyNkZWZpbmUgTl9TVFJJUAkJNAorI2RlZmluZSBOX0FYMjUJCTUKKyNkZWZpbmUgTl9YMjUJCTYJLyogWC4yNSBhc3luYyAgKi8KKyNkZWZpbmUgTl82UEFDSwkJNworI2RlZmluZSBOX01BU0MJCTgJLyogTW9iaXRleCBtb2R1bGUgICovCisjZGVmaW5lIE5fUjM5NjQJCTkJLyogU2ltYXRpYyBSMzk2NCBtb2R1bGUgICovCisjZGVmaW5lIE5fUFJPRklCVVNfRkRMCTEwCS8qIFByb2ZpYnVzICAqLworI2RlZmluZSBOX0lSREEJCTExCS8qIExpbnV4IElSICAqLworI2RlZmluZSBOX1NNU0JMT0NLCTEyCS8qIFNNUyBibG9jayBtb2RlICAqLworI2RlZmluZSBOX0hETEMJCTEzCS8qIHN5bmNocm9ub3VzIEhETEMgICovCisjZGVmaW5lIE5fU1lOQ19QUFAJMTQJLyogc3luY2hyb25vdXMgUFBQICAqLworI2RlZmluZQlOX0hDSQkJMTUJLyogQmx1ZXRvb3RoIEhDSSBVQVJUICAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvaW9jdGxzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9pb2N0bHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWJiNGM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvaW9jdGxzLmgKQEAgLTAsMCArMSwxMDkgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfU1lTX0lPQ1RMX0gKKyMgZXJyb3IgIk5ldmVyIHVzZSA8Yml0cy9pb2N0bHMuaD4gZGlyZWN0bHk7IGluY2x1ZGUgPHN5cy9pb2N0bC5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisvKiBVc2UgdGhlIGRlZmluaXRpb25zIGZyb20gdGhlIGtlcm5lbCBoZWFkZXIgZmlsZXMuICAqLworI2luY2x1ZGUgPGFzbS9pb2N0bHMuaD4KKworLyogUm91dGluZyB0YWJsZSBjYWxscy4gICovCisjZGVmaW5lIFNJT0NBRERSVAkweDg5MEIJCS8qIGFkZCByb3V0aW5nIHRhYmxlIGVudHJ5CSovCisjZGVmaW5lIFNJT0NERUxSVAkweDg5MEMJCS8qIGRlbGV0ZSByb3V0aW5nIHRhYmxlIGVudHJ5CSovCisjZGVmaW5lIFNJT0NSVE1TRwkweDg5MEQJCS8qIGNhbGwgdG8gcm91dGluZyBzeXN0ZW0JKi8KKworLyogU29ja2V0IGNvbmZpZ3VyYXRpb24gY29udHJvbHMuICovCisjZGVmaW5lIFNJT0NHSUZOQU1FCTB4ODkxMAkJLyogZ2V0IGlmYWNlIG5hbWUJCSovCisjZGVmaW5lIFNJT0NTSUZMSU5LCTB4ODkxMQkJLyogc2V0IGlmYWNlIGNoYW5uZWwJCSovCisjZGVmaW5lIFNJT0NHSUZDT05GCTB4ODkxMgkJLyogZ2V0IGlmYWNlIGxpc3QJCSovCisjZGVmaW5lIFNJT0NHSUZGTEFHUwkweDg5MTMJCS8qIGdldCBmbGFncwkJCSovCisjZGVmaW5lIFNJT0NTSUZGTEFHUwkweDg5MTQJCS8qIHNldCBmbGFncwkJCSovCisjZGVmaW5lIFNJT0NHSUZBRERSCTB4ODkxNQkJLyogZ2V0IFBBIGFkZHJlc3MJCSovCisjZGVmaW5lIFNJT0NTSUZBRERSCTB4ODkxNgkJLyogc2V0IFBBIGFkZHJlc3MJCSovCisjZGVmaW5lIFNJT0NHSUZEU1RBRERSCTB4ODkxNwkJLyogZ2V0IHJlbW90ZSBQQSBhZGRyZXNzCSovCisjZGVmaW5lIFNJT0NTSUZEU1RBRERSCTB4ODkxOAkJLyogc2V0IHJlbW90ZSBQQSBhZGRyZXNzCSovCisjZGVmaW5lIFNJT0NHSUZCUkRBRERSCTB4ODkxOQkJLyogZ2V0IGJyb2FkY2FzdCBQQSBhZGRyZXNzCSovCisjZGVmaW5lIFNJT0NTSUZCUkRBRERSCTB4ODkxYQkJLyogc2V0IGJyb2FkY2FzdCBQQSBhZGRyZXNzCSovCisjZGVmaW5lIFNJT0NHSUZORVRNQVNLCTB4ODkxYgkJLyogZ2V0IG5ldHdvcmsgUEEgbWFzawkJKi8KKyNkZWZpbmUgU0lPQ1NJRk5FVE1BU0sJMHg4OTFjCQkvKiBzZXQgbmV0d29yayBQQSBtYXNrCQkqLworI2RlZmluZSBTSU9DR0lGTUVUUklDCTB4ODkxZAkJLyogZ2V0IG1ldHJpYwkJCSovCisjZGVmaW5lIFNJT0NTSUZNRVRSSUMJMHg4OTFlCQkvKiBzZXQgbWV0cmljCQkJKi8KKyNkZWZpbmUgU0lPQ0dJRk1FTQkweDg5MWYJCS8qIGdldCBtZW1vcnkgYWRkcmVzcyAoQlNEKQkqLworI2RlZmluZSBTSU9DU0lGTUVNCTB4ODkyMAkJLyogc2V0IG1lbW9yeSBhZGRyZXNzIChCU0QpCSovCisjZGVmaW5lIFNJT0NHSUZNVFUJMHg4OTIxCQkvKiBnZXQgTVRVIHNpemUJCQkqLworI2RlZmluZSBTSU9DU0lGTVRVCTB4ODkyMgkJLyogc2V0IE1UVSBzaXplCQkJKi8KKyNkZWZpbmUgU0lPQ1NJRk5BTUUJMHg4OTIzCQkvKiBzZXQgaW50ZXJmYWNlIG5hbWUJCSovCisjZGVmaW5lCVNJT0NTSUZIV0FERFIJMHg4OTI0CQkvKiBzZXQgaGFyZHdhcmUgYWRkcmVzcyAJKi8KKyNkZWZpbmUgU0lPQ0dJRkVOQ0FQCTB4ODkyNQkJLyogZ2V0L3NldCBlbmNhcHN1bGF0aW9ucyAgICAgICAqLworI2RlZmluZSBTSU9DU0lGRU5DQVAJMHg4OTI2CisjZGVmaW5lIFNJT0NHSUZIV0FERFIJMHg4OTI3CQkvKiBHZXQgaGFyZHdhcmUgYWRkcmVzcwkJKi8KKyNkZWZpbmUgU0lPQ0dJRlNMQVZFCTB4ODkyOQkJLyogRHJpdmVyIHNsYXZpbmcgc3VwcG9ydAkqLworI2RlZmluZSBTSU9DU0lGU0xBVkUJMHg4OTMwCisjZGVmaW5lIFNJT0NBRERNVUxUSQkweDg5MzEJCS8qIE11bHRpY2FzdCBhZGRyZXNzIGxpc3RzCSovCisjZGVmaW5lIFNJT0NERUxNVUxUSQkweDg5MzIKKyNkZWZpbmUgU0lPQ0dJRklOREVYCTB4ODkzMwkJLyogbmFtZSAtPiBpZl9pbmRleCBtYXBwaW5nCSovCisjZGVmaW5lIFNJT0dJRklOREVYCVNJT0NHSUZJTkRFWAkvKiBtaXNwcmludCBjb21wYXRpYmlsaXR5IDotKQkqLworI2RlZmluZSBTSU9DU0lGUEZMQUdTCTB4ODkzNAkJLyogc2V0L2dldCBleHRlbmRlZCBmbGFncyBzZXQJKi8KKyNkZWZpbmUgU0lPQ0dJRlBGTEFHUwkweDg5MzUKKyNkZWZpbmUgU0lPQ0RJRkFERFIJMHg4OTM2CQkvKiBkZWxldGUgUEEgYWRkcmVzcwkJKi8KKyNkZWZpbmUJU0lPQ1NJRkhXQlJPQURDQVNUCTB4ODkzNwkvKiBzZXQgaGFyZHdhcmUgYnJvYWRjYXN0IGFkZHIJKi8KKyNkZWZpbmUgU0lPQ0dJRkNPVU5UCTB4ODkzOAkJLyogZ2V0IG51bWJlciBvZiBkZXZpY2VzICovCisKKyNkZWZpbmUgU0lPQ0dJRkJSCTB4ODk0MAkJLyogQnJpZGdpbmcgc3VwcG9ydAkJKi8KKyNkZWZpbmUgU0lPQ1NJRkJSCTB4ODk0MQkJLyogU2V0IGJyaWRnaW5nIG9wdGlvbnMgCSovCisKKyNkZWZpbmUgU0lPQ0dJRlRYUUxFTgkweDg5NDIJCS8qIEdldCB0aGUgdHggcXVldWUgbGVuZ3RoCSovCisjZGVmaW5lIFNJT0NTSUZUWFFMRU4JMHg4OTQzCQkvKiBTZXQgdGhlIHR4IHF1ZXVlIGxlbmd0aCAJKi8KKworCisvKiBBUlAgY2FjaGUgY29udHJvbCBjYWxscy4gKi8KKwkJICAgIC8qICAweDg5NTAgLSAweDg5NTIgICogb2Jzb2xldGUgY2FsbHMsIGRvbid0IHJlLXVzZSAqLworI2RlZmluZSBTSU9DREFSUAkweDg5NTMJCS8qIGRlbGV0ZSBBUlAgdGFibGUgZW50cnkJKi8KKyNkZWZpbmUgU0lPQ0dBUlAJMHg4OTU0CQkvKiBnZXQgQVJQIHRhYmxlIGVudHJ5CQkqLworI2RlZmluZSBTSU9DU0FSUAkweDg5NTUJCS8qIHNldCBBUlAgdGFibGUgZW50cnkJCSovCisKKy8qIFJBUlAgY2FjaGUgY29udHJvbCBjYWxscy4gKi8KKyNkZWZpbmUgU0lPQ0RSQVJQCTB4ODk2MAkJLyogZGVsZXRlIFJBUlAgdGFibGUgZW50cnkJKi8KKyNkZWZpbmUgU0lPQ0dSQVJQCTB4ODk2MQkJLyogZ2V0IFJBUlAgdGFibGUgZW50cnkJCSovCisjZGVmaW5lIFNJT0NTUkFSUAkweDg5NjIJCS8qIHNldCBSQVJQIHRhYmxlIGVudHJ5CQkqLworCisvKiBEcml2ZXIgY29uZmlndXJhdGlvbiBjYWxscyAqLworCisjZGVmaW5lIFNJT0NHSUZNQVAJMHg4OTcwCQkvKiBHZXQgZGV2aWNlIHBhcmFtZXRlcnMJKi8KKyNkZWZpbmUgU0lPQ1NJRk1BUAkweDg5NzEJCS8qIFNldCBkZXZpY2UgcGFyYW1ldGVycwkqLworCisvKiBETENJIGNvbmZpZ3VyYXRpb24gY2FsbHMgKi8KKworI2RlZmluZSBTSU9DQURERExDSQkweDg5ODAJCS8qIENyZWF0ZSBuZXcgRExDSSBkZXZpY2UJKi8KKyNkZWZpbmUgU0lPQ0RFTERMQ0kJMHg4OTgxCQkvKiBEZWxldGUgRExDSSBkZXZpY2UJCSovCisKKy8qIERldmljZSBwcml2YXRlIGlvY3RsIGNhbGxzLiAgKi8KKworLyogVGhlc2UgMTYgaW9jdGxzIGFyZSBhdmFpbGFibGUgdG8gZGV2aWNlcyB2aWEgdGhlIGRvX2lvY3RsKCkgZGV2aWNlCisgICB2ZWN0b3IuICBFYWNoIGRldmljZSBzaG91bGQgaW5jbHVkZSB0aGlzIGZpbGUgYW5kIHJlZGVmaW5lIHRoZXNlCisgICBuYW1lcyBhcyB0aGVpciBvd24uIEJlY2F1c2UgdGhlc2UgYXJlIGRldmljZSBkZXBlbmRlbnQgaXQgaXMgYSBnb29kCisgICBpZGVhIF9OT1RfIHRvIGlzc3VlIHRoZW0gdG8gcmFuZG9tIG9iamVjdHMgYW5kIGhvcGUuICAqLworCisjZGVmaW5lIFNJT0NERVZQUklWQVRFIAkJMHg4OUYwCS8qIHRvIDg5RkYgKi8KKworLyoKKyAqCVRoZXNlIDE2IGlvY3RsIGNhbGxzIGFyZSBwcm90b2NvbCBwcml2YXRlCisgKi8KKworI2RlZmluZSBTSU9DUFJPVE9QUklWQVRFIDB4ODlFMCAvKiB0byA4OUVGICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9pcGMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2lwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYTA0M2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9pcGMuaApAQCAtMCwwICsxLDU2IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfU1lTX0lQQ19ICisjIGVycm9yICJOZXZlciB1c2UgPGJpdHMvaXBjLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxzeXMvaXBjLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpbmNsdWRlIDxiaXRzL3R5cGVzLmg+CisKKy8qIE1vZGUgYml0cyBmb3IgYG1zZ2dldCcsIGBzZW1nZXQnLCBhbmQgYHNobWdldCcuICAqLworI2RlZmluZSBJUENfQ1JFQVQJMDEwMDAJCS8qIENyZWF0ZSBrZXkgaWYga2V5IGRvZXMgbm90IGV4aXN0LiAqLworI2RlZmluZSBJUENfRVhDTAkwMjAwMAkJLyogRmFpbCBpZiBrZXkgZXhpc3RzLiAgKi8KKyNkZWZpbmUgSVBDX05PV0FJVAkwNDAwMAkJLyogUmV0dXJuIGVycm9yIG9uIHdhaXQuICAqLworCisvKiBDb250cm9sIGNvbW1hbmRzIGZvciBgbXNnY3RsJywgYHNlbWN0bCcsIGFuZCBgc2htY3RsJy4gICovCisjZGVmaW5lIElQQ19STUlECTAJCS8qIFJlbW92ZSBpZGVudGlmaWVyLiAgKi8KKyNkZWZpbmUgSVBDX1NFVAkJMQkJLyogU2V0IGBpcGNfcGVybScgb3B0aW9ucy4gICovCisjZGVmaW5lIElQQ19TVEFUCTIJCS8qIEdldCBgaXBjX3Blcm0nIG9wdGlvbnMuICAqLworI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgSVBDX0lORk8JMwkJLyogU2VlIGlwY3MuICAqLworI2VuZGlmCisKKy8qIFNwZWNpYWwga2V5IHZhbHVlcy4gICovCisjZGVmaW5lIElQQ19QUklWQVRFCSgoX19rZXlfdCkgMCkJLyogUHJpdmF0ZSBrZXkuICAqLworCisKKy8qIERhdGEgc3RydWN0dXJlIHVzZWQgdG8gcGFzcyBwZXJtaXNzaW9uIGluZm9ybWF0aW9uIHRvIElQQyBvcGVyYXRpb25zLiAgKi8KK3N0cnVjdCBpcGNfcGVybQorICB7CisgICAgX19rZXlfdCBfX2tleTsJCQkvKiBLZXkuICAqLworICAgIF9fdWlkX3QgdWlkOwkJCS8qIE93bmVyJ3MgdXNlciBJRC4gICovCisgICAgX19naWRfdCBnaWQ7CQkJLyogT3duZXIncyBncm91cCBJRC4gICovCisgICAgX191aWRfdCBjdWlkOwkJCS8qIENyZWF0b3IncyB1c2VyIElELiAgKi8KKyAgICBfX2dpZF90IGNnaWQ7CQkJLyogQ3JlYXRvcidzIGdyb3VwIElELiAgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCBpbnQgbW9kZTsJCS8qIFJlYWQvd3JpdGUgcGVybWlzc2lvbi4gICovCisgICAgdW5zaWduZWQgc2hvcnQgaW50IF9fcGFkMTsKKyAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19zZXE7CQkvKiBTZXF1ZW5jZSBudW1iZXIuICAqLworICAgIHVuc2lnbmVkIHNob3J0IGludCBfX3BhZDI7CisgICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQxOworICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMjsKKyAgfTsKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2lwY3R5cGVzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9pcGN0eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OGNhMWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9pcGN0eXBlcy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qIGJpdHMvaXBjdHlwZXMuaCAtLSBEZWZpbmUgc29tZSB0eXBlcyB1c2VkIGJ5IFN5c1YgSVBDL01TRy9TSE0uICBHZW5lcmljLgorICAgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisvKgorICogTmV2ZXIgaW5jbHVkZSA8Yml0cy9pcGN0eXBlcy5oPiBkaXJlY3RseS4KKyAqLworCisjaWZuZGVmIF9CSVRTX0lQQ1RZUEVTX0gKKyNkZWZpbmUgX0JJVFNfSVBDVFlQRVNfSAkxCisKKyNpbmNsdWRlIDxiaXRzL3R5cGVzLmg+CisKKy8qIFVzZWQgaW4gYHN0cnVjdCBzaG1pZF9kcycuICAqLworIyBpZiBfX1dPUkRTSVpFID09IDMyCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKKyMgZWxzZQordHlwZWRlZiBpbnQgX19pcGNfcGlkX3Q7CisjIGVuZGlmCisKKworI2VuZGlmIC8qIGJpdHMvaXBjdHlwZXMuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvbGliYy1sb2NrLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9saWJjLWxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTk3ZjNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvbGliYy1sb2NrLmgKQEAgLTAsMCArMSw1ODUgQEAKKy8qIGxpYmMtaW50ZXJuYWwgaW50ZXJmYWNlIGZvciBtdXRleCBsb2Nrcy4gIE5QVEwgdmVyc2lvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDAzLCAyMDA1LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsCisgICB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKyNpZm5kZWYgX0JJVFNfTElCQ19MT0NLX0gKKyNkZWZpbmUgX0JJVFNfTElCQ19MT0NLX0ggMQorCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2RlZmluZSBfX25lZWRfTlVMTAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisKKy8qIEZvcnR1bmF0ZWx5IExpbnV4IG5vdyBoYXMgYSBtZWFuIHRvIGRvIGxvY2tpbmcgd2hpY2ggaXMgcmVhbHRpbWUKKyAgIHNhZmUgd2l0aG91dCB0aGUgYWlkIG9mIHRoZSB0aHJlYWQgbGlicmFyeS4gIFdlIGFsc28gbmVlZCBubyBmYW5jeQorICAgb3B0aW9ucyBsaWtlIGVycm9yIGNoZWNraW5nIG11dGV4ZXMgZXRjLiAgV2Ugb25seSBuZWVkIHNpbXBsZQorICAgbG9ja3MsIG1heWJlIHJlY3Vyc2l2ZS4gIFRoaXMgY2FuIGJlIGVhc2lseSBhbmQgY2hlYXBseSBpbXBsZW1lbnRlZAorICAgdXNpbmcgZnV0ZXhlcy4gIFdlIHdpbGwgdXNlIHRoZW0gZXZlcnl3aGVyZSBleGNlcHQgaW4gbGQuc28gc2luY2UKKyAgIGxkLnNvIG1pZ2h0IGJlIHVzZWQgb24gb2xkIGtlcm5lbHMgd2l0aCBhIGRpZmZlcmVudCBsaWJjLnNvLiAgKi8KKyNpZmRlZiBfTElCQworIyBpbmNsdWRlIDxsb3dsZXZlbGxvY2suaD4KKyMgaW5jbHVkZSA8dGxzLmg+CisjIGluY2x1ZGUgPHB0aHJlYWQtZnVuY3Rpb25zLmg+CisjZW5kaWYKKworLyogTXV0ZXggdHlwZS4gICovCisjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIF9JT19NVFNBRkVfSU8KKyMgaWYgKGRlZmluZWQgTk9UX0lOX2xpYmMgJiYgIWRlZmluZWQgSVNfSU5fbGlicHRocmVhZCkgfHwgIWRlZmluZWQgX0xJQkMKK3R5cGVkZWYgcHRocmVhZF9tdXRleF90IF9fbGliY19sb2NrX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHB0aHJlYWRfbXV0ZXhfdCBtdXRleDsgfSBfX2xpYmNfbG9ja19yZWN1cnNpdmVfdDsKKyMgZWxzZQordHlwZWRlZiBpbnQgX19saWJjX2xvY2tfdDsKK3R5cGVkZWYgc3RydWN0IHsgaW50IGxvY2s7IGludCBjbnQ7IHZvaWQgKm93bmVyOyB9IF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90OworIyBlbmRpZgordHlwZWRlZiBzdHJ1Y3QgeyBwdGhyZWFkX211dGV4X3QgbXV0ZXg7IH0gX19ydGxkX2xvY2tfcmVjdXJzaXZlX3Q7CisjIGlmZGVmIF9fVVNFX1VOSVg5OAordHlwZWRlZiBwdGhyZWFkX3J3bG9ja190IF9fbGliY19yd2xvY2tfdDsKKyMgZWxzZQordHlwZWRlZiBzdHJ1Y3QgX19saWJjX3J3bG9ja19vcGFxdWVfXyBfX2xpYmNfcndsb2NrX3Q7CisjIGVuZGlmCisjZWxzZQordHlwZWRlZiBzdHJ1Y3QgX19saWJjX2xvY2tfb3BhcXVlX18gX19saWJjX2xvY2tfdDsKK3R5cGVkZWYgc3RydWN0IF9fbGliY19sb2NrX3JlY3Vyc2l2ZV9vcGFxdWVfXyBfX2xpYmNfbG9ja19yZWN1cnNpdmVfdDsKK3R5cGVkZWYgc3RydWN0IF9fbGliY19yd2xvY2tfb3BhcXVlX18gX19saWJjX3J3bG9ja190OworI2VuZGlmCisKKy8qIFR5cGUgZm9yIGtleSB0byB0aHJlYWQtc3BlY2lmaWMgZGF0YS4gICovCit0eXBlZGVmIHB0aHJlYWRfa2V5X3QgX19saWJjX2tleV90OworCisvKiBEZWZpbmUgYSBsb2NrIHZhcmlhYmxlIE5BTUUgd2l0aCBzdG9yYWdlIGNsYXNzIENMQVNTLiAgVGhlIGxvY2sgbXVzdCBiZQorICAgaW5pdGlhbGl6ZWQgd2l0aCBfX2xpYmNfbG9ja19pbml0IGJlZm9yZSBpdCBjYW4gYmUgdXNlZCAob3IgZGVmaW5lIGl0CisgICB3aXRoIF9fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZCwgYmVsb3cpLiAgVXNlIGBleHRlcm4nIGZvciBDTEFTUyB0bworICAgZGVjbGFyZSBhIGxvY2sgZGVmaW5lZCBpbiBhbm90aGVyIG1vZHVsZS4gIEluIHB1YmxpYyBzdHJ1Y3R1cmUKKyAgIGRlZmluaXRpb25zIHlvdSBtdXN0IHVzZSBhIHBvaW50ZXIgdG8gdGhlIGxvY2sgc3RydWN0dXJlIChpLmUuLCBOQU1FCisgICBiZWdpbnMgd2l0aCBhIGAqJyksIGJlY2F1c2UgaXRzIHN0b3JhZ2Ugc2l6ZSB3aWxsIG5vdCBiZSBrbm93biBvdXRzaWRlCisgICBvZiBsaWJjLiAgKi8KKyNkZWZpbmUgX19saWJjX2xvY2tfZGVmaW5lKENMQVNTLE5BTUUpIFwKKyAgQ0xBU1MgX19saWJjX2xvY2tfdCBOQU1FOworI2RlZmluZSBfX2xpYmNfcndsb2NrX2RlZmluZShDTEFTUyxOQU1FKSBcCisgIENMQVNTIF9fbGliY19yd2xvY2tfdCBOQU1FOworI2RlZmluZSBfX2xpYmNfbG9ja19kZWZpbmVfcmVjdXJzaXZlKENMQVNTLE5BTUUpIFwKKyAgQ0xBU1MgX19saWJjX2xvY2tfcmVjdXJzaXZlX3QgTkFNRTsKKyNkZWZpbmUgX19ydGxkX2xvY2tfZGVmaW5lX3JlY3Vyc2l2ZShDTEFTUyxOQU1FKSBcCisgIENMQVNTIF9fcnRsZF9sb2NrX3JlY3Vyc2l2ZV90IE5BTUU7CisKKy8qIERlZmluZSBhbiBpbml0aWFsaXplZCBsb2NrIHZhcmlhYmxlIE5BTUUgd2l0aCBzdG9yYWdlIGNsYXNzIENMQVNTLgorCisgICBGb3IgdGhlIEMgbGlicmFyeSB3ZSB0YWtlIGEgZGVlcGVyIGxvb2sgYXQgdGhlIGluaXRpYWxpemVyLiAgRm9yCisgICB0aGlzIGltcGxlbWVudGF0aW9uIGFsbCBmaWVsZHMgYXJlIGluaXRpYWxpemVkIHRvIHplcm8uICBUaGVyZWZvcmUKKyAgIHdlIGRvbid0IGluaXRpYWxpemUgdGhlIHZhcmlhYmxlIHdoaWNoIGFsbG93cyBwdXR0aW5nIGl0IGludG8gdGhlCisgICBCU1Mgc2VjdGlvbi4gIChFeGNlcHQgb24gUEEtUklTQyBhbmQgb3RoZXIgb2RkIGFyY2hpdGVjdHVyZXMsIHdoZXJlCisgICBpbml0aWFsaXplZCBsb2NrcyBtdXN0IGJlIHNldCB0byBvbmUgZHVlIHRvIHRoZSBsYWNrIG9mIG5vcm1hbAorICAgYXRvbWljIG9wZXJhdGlvbnMuKSAqLworCisjaWYgZGVmaW5lZCBfTElCQyAmJiAoIWRlZmluZWQgTk9UX0lOX2xpYmMgfHwgZGVmaW5lZCBJU19JTl9saWJwdGhyZWFkKQorIyBpZiBMTExfTE9DS19JTklUSUFMSVpFUiA9PSAwCisjICBkZWZpbmUgX19saWJjX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkKENMQVNTLE5BTUUpIFwKKyAgQ0xBU1MgX19saWJjX2xvY2tfdCBOQU1FOworIyBlbHNlCisjICBkZWZpbmUgX19saWJjX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkKENMQVNTLE5BTUUpIFwKKyAgQ0xBU1MgX19saWJjX2xvY2tfdCBOQU1FID0gTExMX0xPQ0tfSU5JVElBTElaRVI7CisjIGVuZGlmCisjZWxzZQorIyBpZiBfX0xUX1NQSU5MT0NLX0lOSVQgPT0gMAorIyAgZGVmaW5lIF9fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZChDTEFTUyxOQU1FKSBcCisgIENMQVNTIF9fbGliY19sb2NrX3QgTkFNRTsKKyMgZWxzZQorIyAgZGVmaW5lIF9fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZChDTEFTUyxOQU1FKSBcCisgIENMQVNTIF9fbGliY19sb2NrX3QgTkFNRSA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisjIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBfX2xpYmNfcndsb2NrX2RlZmluZV9pbml0aWFsaXplZChDTEFTUyxOQU1FKSBcCisgIENMQVNTIF9fbGliY19yd2xvY2tfdCBOQU1FID0gUFRIUkVBRF9SV0xPQ0tfSU5JVElBTElaRVI7CisKKy8qIERlZmluZSBhbiBpbml0aWFsaXplZCByZWN1cnNpdmUgbG9jayB2YXJpYWJsZSBOQU1FIHdpdGggc3RvcmFnZQorICAgY2xhc3MgQ0xBU1MuICAqLworI2lmIGRlZmluZWQgX0xJQkMgJiYgKCFkZWZpbmVkIE5PVF9JTl9saWJjIHx8IGRlZmluZWQgSVNfSU5fbGlicHRocmVhZCkKKyMgaWYgTExMX0xPQ0tfSU5JVElBTElaRVIgPT0gMAorIyAgZGVmaW5lIF9fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZF9yZWN1cnNpdmUoQ0xBU1MsTkFNRSkgXAorICBDTEFTUyBfX2xpYmNfbG9ja19yZWN1cnNpdmVfdCBOQU1FOworIyBlbHNlCisjICBkZWZpbmUgX19saWJjX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkX3JlY3Vyc2l2ZShDTEFTUyxOQU1FKSBcCisgIENMQVNTIF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90IE5BTUUgPSBfTElCQ19MT0NLX1JFQ1VSU0lWRV9JTklUSUFMSVpFUjsKKyMgZW5kaWYKKyMgZGVmaW5lIF9MSUJDX0xPQ0tfUkVDVVJTSVZFX0lOSVRJQUxJWkVSIFwKKyAgeyBMTExfTE9DS19JTklUSUFMSVpFUiwgMCwgTlVMTCB9CisjZWxzZQorIyBkZWZpbmUgX19saWJjX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkX3JlY3Vyc2l2ZShDTEFTUyxOQU1FKSBcCisgIENMQVNTIF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90IE5BTUUgPSBfTElCQ19MT0NLX1JFQ1VSU0lWRV9JTklUSUFMSVpFUjsKKyMgZGVmaW5lIF9MSUJDX0xPQ0tfUkVDVVJTSVZFX0lOSVRJQUxJWkVSIFwKKyAge1BUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSX05QfQorI2VuZGlmCisKKyNkZWZpbmUgX19ydGxkX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkX3JlY3Vyc2l2ZShDTEFTUyxOQU1FKSBcCisgIENMQVNTIF9fcnRsZF9sb2NrX3JlY3Vyc2l2ZV90IE5BTUUgPSBfUlRMRF9MT0NLX1JFQ1VSU0lWRV9JTklUSUFMSVpFUjsKKyNkZWZpbmUgX1JUTERfTE9DS19SRUNVUlNJVkVfSU5JVElBTElaRVIgXAorICB7UFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVJfTlB9CisKKyNkZWZpbmUgX19ydGxkX2xvY2tfaW5pdGlhbGl6ZShOQU1FKSBcCisgICh2b2lkKSAoKE5BTUUpID0gKF9fcnRsZF9sb2NrX3JlY3Vyc2l2ZV90KSBfUlRMRF9MT0NLX1JFQ1VSU0lWRV9JTklUSUFMSVpFUikKKworLyogSWYgd2UgY2hlY2sgZm9yIGEgd2Vha2x5IHJlZmVyZW5jZWQgc3ltYm9sIGFuZCB0aGVuIHBlcmZvcm0gYQorICAgbm9ybWFsIGp1bXAgdG8gaXQgdGUgY29kZSBnZW5lcmF0ZWQgZm9yIHNvbWUgcGxhdGZvcm1zIGluIGNhc2Ugb2YKKyAgIFBJQyBpcyB1bm5lY2Vzc2FyaWx5IHNsb3cuICBXaGF0IHdvdWxkIGhhcHBlbiBpcyB0aGF0IHRoZSBmdW5jdGlvbgorICAgaXMgZmlyc3QgcmVmZXJlbmNlZCBhcyBkYXRhIGFuZCB0aGVuIGl0IGlzIGNhbGxlZCBpbmRpcmVjdGx5CisgICB0aHJvdWdoIHRoZSBQTFQuICBXZSBjYW4gbWFrZSB0aGlzIGEgZGlyZWN0IGp1bXAuICAqLworI2lmZGVmIF9fUElDX18KKyMgZGVmaW5lIF9fbGliY19tYXliZV9jYWxsKEZVTkMsIEFSR1MsIEVMU0UpIFwKKyAgKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2YgKEZVTkMpICpfZm4gPSAoRlVOQyk7IFwKKyAgICAgICAgICAgICAgICAgICAgX2ZuICE9IE5VTEwgPyAoKl9mbikgQVJHUyA6IEVMU0U7IH0pKQorI2Vsc2UKKyMgZGVmaW5lIF9fbGliY19tYXliZV9jYWxsKEZVTkMsIEFSR1MsIEVMU0UpIFwKKyAgKEZVTkMgIT0gTlVMTCA/IEZVTkMgQVJHUyA6IEVMU0UpCisjZW5kaWYKKworLyogQ2FsbCB0aHJlYWQgZnVuY3Rpb25zIHRocm91Z2ggdGhlIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGUuICAqLworI2lmIGRlZmluZWQgU0hBUkVEICYmICFkZWZpbmVkIE5PVF9JTl9saWJjCisjIGRlZmluZSBQVEZBVkFJTChOQU1FKSBfX2xpYmNfcHRocmVhZF9mdW5jdGlvbnNfaW5pdAorIyBkZWZpbmUgX19saWJjX3B0Zl9jYWxsKEZVTkMsIEFSR1MsIEVMU0UpIFwKKyAgKF9fbGliY19wdGhyZWFkX2Z1bmN0aW9uc19pbml0ID8gUFRIRkNUX0NBTEwgKHB0cl8jI0ZVTkMsIEFSR1MpIDogRUxTRSkKKyMgZGVmaW5lIF9fbGliY19wdGZfY2FsbF9hbHdheXMoRlVOQywgQVJHUykgXAorICBQVEhGQ1RfQ0FMTCAocHRyXyMjRlVOQywgQVJHUykKKyNlbHNlCisjIGRlZmluZSBQVEZBVkFJTChOQU1FKSAoTkFNRSAhPSBOVUxMKQorIyBkZWZpbmUgX19saWJjX3B0Zl9jYWxsKEZVTkMsIEFSR1MsIEVMU0UpIFwKKyAgX19saWJjX21heWJlX2NhbGwgKEZVTkMsIEFSR1MsIEVMU0UpCisjIGRlZmluZSBfX2xpYmNfcHRmX2NhbGxfYWx3YXlzKEZVTkMsIEFSR1MpIFwKKyAgRlVOQyBBUkdTCisjZW5kaWYKKworCisvKiBJbml0aWFsaXplIHRoZSBuYW1lZCBsb2NrIHZhcmlhYmxlLCBsZWF2aW5nIGl0IGluIGEgY29uc2lzdGVudCwgdW5sb2NrZWQKKyAgIHN0YXRlLiAgKi8KKyNpZiBkZWZpbmVkIF9MSUJDICYmICghZGVmaW5lZCBOT1RfSU5fbGliYyB8fCBkZWZpbmVkIElTX0lOX2xpYnB0aHJlYWQpCisjIGRlZmluZSBfX2xpYmNfbG9ja19pbml0KE5BTUUpICgoTkFNRSkgPSBMTExfTE9DS19JTklUSUFMSVpFUiwgMCkKKyNlbHNlCisjIGRlZmluZSBfX2xpYmNfbG9ja19pbml0KE5BTUUpIFwKKyAgX19saWJjX21heWJlX2NhbGwgKF9fcHRocmVhZF9tdXRleF9pbml0LCAoJihOQU1FKSwgTlVMTCksIDApCisjZW5kaWYKKyNpZiBkZWZpbmVkIFNIQVJFRCAmJiAhZGVmaW5lZCBOT1RfSU5fbGliYworLyogKChOQU1FKSA9IChfX2xpYmNfcndsb2NrX3QpIFBUSFJFQURfUldMT0NLX0lOSVRJQUxJWkVSLCAwKSBpcworICAgaW5lZmZpY2llbnQuICAqLworIyBkZWZpbmUgX19saWJjX3J3bG9ja19pbml0KE5BTUUpIFwKKyAgKF9fYnVpbHRpbl9tZW1zZXQgKCYoTkFNRSksICdcMCcsIHNpemVvZiAoTkFNRSkpLCAwKQorI2Vsc2UKKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfaW5pdChOQU1FKSBcCisgIF9fbGliY19tYXliZV9jYWxsIChfX3B0aHJlYWRfcndsb2NrX2luaXQsICgmKE5BTUUpLCBOVUxMKSwgMCkKKyNlbmRpZgorCisvKiBTYW1lIGFzIGxhc3QgYnV0IHRoaXMgdGltZSB3ZSBpbml0aWFsaXplIGEgcmVjdXJzaXZlIG11dGV4LiAgKi8KKyNpZiBkZWZpbmVkIF9MSUJDICYmICghZGVmaW5lZCBOT1RfSU5fbGliYyB8fCBkZWZpbmVkIElTX0lOX2xpYnB0aHJlYWQpCisjIGRlZmluZSBfX2xpYmNfbG9ja19pbml0X3JlY3Vyc2l2ZShOQU1FKSBcCisgICgoTkFNRSkgPSAoX19saWJjX2xvY2tfcmVjdXJzaXZlX3QpIF9MSUJDX0xPQ0tfUkVDVVJTSVZFX0lOSVRJQUxJWkVSLCAwKQorI2Vsc2UKKyMgZGVmaW5lIF9fbGliY19sb2NrX2luaXRfcmVjdXJzaXZlKE5BTUUpIFwKKyAgZG8gewkJCQkJCQkJCSAgICAgIFwKKyAgICBpZiAoX19wdGhyZWFkX211dGV4X2luaXQgIT0gTlVMTCkJCQkJCSAgICAgIFwKKyAgICAgIHsJCQkJCQkJCQkgICAgICBcCisJcHRocmVhZF9tdXRleGF0dHJfdCBfX2F0dHI7CQkJCQkgICAgICBcCisJX19wdGhyZWFkX211dGV4YXR0cl9pbml0ICgmX19hdHRyKTsJCQkJICAgICAgXAorCV9fcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSAoJl9fYXR0ciwgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlApOyAgICBcCisJX19wdGhyZWFkX211dGV4X2luaXQgKCYoTkFNRSkubXV0ZXgsICZfX2F0dHIpOwkJCSAgICAgIFwKKwlfX3B0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKCZfX2F0dHIpOwkJCQkgICAgICBcCisgICAgICB9CQkJCQkJCQkJICAgICAgXAorICB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNkZWZpbmUgX19ydGxkX2xvY2tfaW5pdF9yZWN1cnNpdmUoTkFNRSkgXAorICBkbyB7CQkJCQkJCQkJICAgICAgXAorICAgIGlmIChfX3B0aHJlYWRfbXV0ZXhfaW5pdCAhPSBOVUxMKQkJCQkJICAgICAgXAorICAgICAgewkJCQkJCQkJCSAgICAgIFwKKwlwdGhyZWFkX211dGV4YXR0cl90IF9fYXR0cjsJCQkJCSAgICAgIFwKKwlfX3B0aHJlYWRfbXV0ZXhhdHRyX2luaXQgKCZfX2F0dHIpOwkJCQkgICAgICBcCisJX19wdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlICgmX19hdHRyLCBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCk7ICAgIFwKKwlfX3B0aHJlYWRfbXV0ZXhfaW5pdCAoJihOQU1FKS5tdXRleCwgJl9fYXR0cik7CQkJICAgICAgXAorCV9fcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSAoJl9fYXR0cik7CQkJCSAgICAgIFwKKyAgICAgIH0JCQkJCQkJCQkgICAgICBcCisgIH0gd2hpbGUgKDApCisKKy8qIEZpbmFsaXplIHRoZSBuYW1lZCBsb2NrIHZhcmlhYmxlLCB3aGljaCBtdXN0IGJlIGxvY2tlZC4gIEl0IGNhbm5vdCBiZQorICAgdXNlZCBhZ2FpbiB1bnRpbCBfX2xpYmNfbG9ja19pbml0IGlzIGNhbGxlZCBhZ2FpbiBvbiBpdC4gIFRoaXMgbXVzdCBiZQorICAgY2FsbGVkIG9uIGEgbG9jayB2YXJpYWJsZSBiZWZvcmUgdGhlIGNvbnRhaW5pbmcgc3RvcmFnZSBpcyByZXVzZWQuICAqLworI2lmIGRlZmluZWQgX0xJQkMgJiYgKCFkZWZpbmVkIE5PVF9JTl9saWJjIHx8IGRlZmluZWQgSVNfSU5fbGlicHRocmVhZCkKKyMgZGVmaW5lIF9fbGliY19sb2NrX2ZpbmkoTkFNRSkgKCh2b2lkKSAwKQorI2Vsc2UKKyMgZGVmaW5lIF9fbGliY19sb2NrX2ZpbmkoTkFNRSkgXAorICBfX2xpYmNfbWF5YmVfY2FsbCAoX19wdGhyZWFkX211dGV4X2Rlc3Ryb3ksICgmKE5BTUUpKSwgMCkKKyNlbmRpZgorI2lmIGRlZmluZWQgU0hBUkVEICYmICFkZWZpbmVkIE5PVF9JTl9saWJjCisjIGRlZmluZSBfX2xpYmNfcndsb2NrX2ZpbmkoTkFNRSkgKCh2b2lkKSAwKQorI2Vsc2UKKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfZmluaShOQU1FKSBcCisgIF9fbGliY19tYXliZV9jYWxsIChfX3B0aHJlYWRfcndsb2NrX2Rlc3Ryb3ksICgmKE5BTUUpKSwgMCkKKyNlbmRpZgorCisvKiBGaW5hbGl6ZSByZWN1cnNpdmUgbmFtZWQgbG9jay4gICovCisjaWYgZGVmaW5lZCBfTElCQyAmJiAoIWRlZmluZWQgTk9UX0lOX2xpYmMgfHwgZGVmaW5lZCBJU19JTl9saWJwdGhyZWFkKQorIyBkZWZpbmUgX19saWJjX2xvY2tfZmluaV9yZWN1cnNpdmUoTkFNRSkgKCh2b2lkKSAwKQorI2Vsc2UKKyMgZGVmaW5lIF9fbGliY19sb2NrX2ZpbmlfcmVjdXJzaXZlKE5BTUUpIFwKKyAgX19saWJjX21heWJlX2NhbGwgKF9fcHRocmVhZF9tdXRleF9kZXN0cm95LCAoJihOQU1FKSksIDApCisjZW5kaWYKKworLyogTG9jayB0aGUgbmFtZWQgbG9jayB2YXJpYWJsZS4gICovCisjaWYgZGVmaW5lZCBfTElCQyAmJiAoIWRlZmluZWQgTk9UX0lOX2xpYmMgfHwgZGVmaW5lZCBJU19JTl9saWJwdGhyZWFkKQorIyBkZWZpbmUgX19saWJjX2xvY2tfbG9jayhOQU1FKSBcCisgICh7IGxsbF9sb2NrIChOQU1FLCBMTExfUFJJVkFURSk7IDA7IH0pCisjZWxzZQorIyBkZWZpbmUgX19saWJjX2xvY2tfbG9jayhOQU1FKSBcCisgIF9fbGliY19tYXliZV9jYWxsIChfX3B0aHJlYWRfbXV0ZXhfbG9jaywgKCYoTkFNRSkpLCAwKQorI2VuZGlmCisjZGVmaW5lIF9fbGliY19yd2xvY2tfcmRsb2NrKE5BTUUpIFwKKyAgX19saWJjX3B0Zl9jYWxsIChfX3B0aHJlYWRfcndsb2NrX3JkbG9jaywgKCYoTkFNRSkpLCAwKQorI2RlZmluZSBfX2xpYmNfcndsb2NrX3dybG9jayhOQU1FKSBcCisgIF9fbGliY19wdGZfY2FsbCAoX19wdGhyZWFkX3J3bG9ja193cmxvY2ssICgmKE5BTUUpKSwgMCkKKworLyogTG9jayB0aGUgcmVjdXJzaXZlIG5hbWVkIGxvY2sgdmFyaWFibGUuICAqLworI2lmIGRlZmluZWQgX0xJQkMgJiYgKCFkZWZpbmVkIE5PVF9JTl9saWJjIHx8IGRlZmluZWQgSVNfSU5fbGlicHRocmVhZCkKKyMgZGVmaW5lIF9fbGliY19sb2NrX2xvY2tfcmVjdXJzaXZlKE5BTUUpIFwKKyAgZG8gewkJCQkJCQkJCSAgICAgIFwKKyAgICB2b2lkICpzZWxmID0gVEhSRUFEX1NFTEY7CQkJCQkJICAgICAgXAorICAgIGlmICgoTkFNRSkub3duZXIgIT0gc2VsZikJCQkJCQkgICAgICBcCisgICAgICB7CQkJCQkJCQkJICAgICAgXAorCWxsbF9sb2NrICgoTkFNRSkubG9jaywgTExMX1BSSVZBVEUpOwkJCQkgICAgICBcCisJKE5BTUUpLm93bmVyID0gc2VsZjsJCQkJCQkgICAgICBcCisgICAgICB9CQkJCQkJCQkJICAgICAgXAorICAgICsrKE5BTUUpLmNudDsJCQkJCQkJICAgICAgXAorICB9IHdoaWxlICgwKQorI2Vsc2UKKyMgZGVmaW5lIF9fbGliY19sb2NrX2xvY2tfcmVjdXJzaXZlKE5BTUUpIFwKKyAgX19saWJjX21heWJlX2NhbGwgKF9fcHRocmVhZF9tdXRleF9sb2NrLCAoJihOQU1FKS5tdXRleCksIDApCisjZW5kaWYKKworLyogVHJ5IHRvIGxvY2sgdGhlIG5hbWVkIGxvY2sgdmFyaWFibGUuICAqLworI2lmIGRlZmluZWQgX0xJQkMgJiYgKCFkZWZpbmVkIE5PVF9JTl9saWJjIHx8IGRlZmluZWQgSVNfSU5fbGlicHRocmVhZCkKKyMgZGVmaW5lIF9fbGliY19sb2NrX3RyeWxvY2soTkFNRSkgXAorICBsbGxfdHJ5bG9jayAoTkFNRSkKKyNlbHNlCisjIGRlZmluZSBfX2xpYmNfbG9ja190cnlsb2NrKE5BTUUpIFwKKyAgX19saWJjX21heWJlX2NhbGwgKF9fcHRocmVhZF9tdXRleF90cnlsb2NrLCAoJihOQU1FKSksIDApCisjZW5kaWYKKyNkZWZpbmUgX19saWJjX3J3bG9ja190cnlyZGxvY2soTkFNRSkgXAorICBfX2xpYmNfbWF5YmVfY2FsbCAoX19wdGhyZWFkX3J3bG9ja190cnlyZGxvY2ssICgmKE5BTUUpKSwgMCkKKyNkZWZpbmUgX19saWJjX3J3bG9ja190cnl3cmxvY2soTkFNRSkgXAorICBfX2xpYmNfbWF5YmVfY2FsbCAoX19wdGhyZWFkX3J3bG9ja190cnl3cmxvY2ssICgmKE5BTUUpKSwgMCkKKworLyogVHJ5IHRvIGxvY2sgdGhlIHJlY3Vyc2l2ZSBuYW1lZCBsb2NrIHZhcmlhYmxlLiAgKi8KKyNpZiBkZWZpbmVkIF9MSUJDICYmICghZGVmaW5lZCBOT1RfSU5fbGliYyB8fCBkZWZpbmVkIElTX0lOX2xpYnB0aHJlYWQpCisjIGRlZmluZSBfX2xpYmNfbG9ja190cnlsb2NrX3JlY3Vyc2l2ZShOQU1FKSBcCisgICh7CQkJCQkJCQkJICAgICAgXAorICAgIGludCByZXN1bHQgPSAwOwkJCQkJCQkgICAgICBcCisgICAgdm9pZCAqc2VsZiA9IFRIUkVBRF9TRUxGOwkJCQkJCSAgICAgIFwKKyAgICBpZiAoKE5BTUUpLm93bmVyICE9IHNlbGYpCQkJCQkJICAgICAgXAorICAgICAgewkJCQkJCQkJCSAgICAgIFwKKwlpZiAobGxsX3RyeWxvY2sgKChOQU1FKS5sb2NrKSA9PSAwKQkJCQkgICAgICBcCisJICB7CQkJCQkJCQkgICAgICBcCisJICAgIChOQU1FKS5vd25lciA9IHNlbGY7CQkJCQkgICAgICBcCisJICAgIChOQU1FKS5jbnQgPSAxOwkJCQkJCSAgICAgIFwKKwkgIH0JCQkJCQkJCSAgICAgIFwKKwllbHNlCQkJCQkJCQkgICAgICBcCisJICByZXN1bHQgPSBFQlVTWTsJCQkJCQkgICAgICBcCisgICAgICB9CQkJCQkJCQkJICAgICAgXAorICAgIGVsc2UJCQkJCQkJCSAgICAgIFwKKyAgICAgICsrKE5BTUUpLmNudDsJCQkJCQkJICAgICAgXAorICAgIHJlc3VsdDsJCQkJCQkJCSAgICAgIFwKKyAgfSkKKyNlbHNlCisjIGRlZmluZSBfX2xpYmNfbG9ja190cnlsb2NrX3JlY3Vyc2l2ZShOQU1FKSBcCisgIF9fbGliY19tYXliZV9jYWxsIChfX3B0aHJlYWRfbXV0ZXhfdHJ5bG9jaywgKCYoTkFNRSkpLCAwKQorI2VuZGlmCisKKyNkZWZpbmUgX19ydGxkX2xvY2tfdHJ5bG9ja19yZWN1cnNpdmUoTkFNRSkgXAorICBfX2xpYmNfbWF5YmVfY2FsbCAoX19wdGhyZWFkX211dGV4X3RyeWxvY2ssICgmKE5BTUUpLm11dGV4KSwgMCkKKworLyogVW5sb2NrIHRoZSBuYW1lZCBsb2NrIHZhcmlhYmxlLiAgKi8KKyNpZiBkZWZpbmVkIF9MSUJDICYmICghZGVmaW5lZCBOT1RfSU5fbGliYyB8fCBkZWZpbmVkIElTX0lOX2xpYnB0aHJlYWQpCisjIGRlZmluZSBfX2xpYmNfbG9ja191bmxvY2soTkFNRSkgXAorICBsbGxfdW5sb2NrIChOQU1FLCBMTExfUFJJVkFURSkKKyNlbHNlCisjIGRlZmluZSBfX2xpYmNfbG9ja191bmxvY2soTkFNRSkgXAorICBfX2xpYmNfbWF5YmVfY2FsbCAoX19wdGhyZWFkX211dGV4X3VubG9jaywgKCYoTkFNRSkpLCAwKQorI2VuZGlmCisjZGVmaW5lIF9fbGliY19yd2xvY2tfdW5sb2NrKE5BTUUpIFwKKyAgX19saWJjX3B0Zl9jYWxsIChfX3B0aHJlYWRfcndsb2NrX3VubG9jaywgKCYoTkFNRSkpLCAwKQorCisvKiBVbmxvY2sgdGhlIHJlY3Vyc2l2ZSBuYW1lZCBsb2NrIHZhcmlhYmxlLiAgKi8KKyNpZiBkZWZpbmVkIF9MSUJDICYmICghZGVmaW5lZCBOT1RfSU5fbGliYyB8fCBkZWZpbmVkIElTX0lOX2xpYnB0aHJlYWQpCisvKiBXZSBkbyBubyBlcnJvciBjaGVja2luZyBoZXJlLiAgKi8KKyMgZGVmaW5lIF9fbGliY19sb2NrX3VubG9ja19yZWN1cnNpdmUoTkFNRSkgXAorICBkbyB7CQkJCQkJCQkJICAgICAgXAorICAgIGlmICgtLShOQU1FKS5jbnQgPT0gMCkJCQkJCQkgICAgICBcCisgICAgICB7CQkJCQkJCQkJICAgICAgXAorCShOQU1FKS5vd25lciA9IE5VTEw7CQkJCQkJICAgICAgXAorCWxsbF91bmxvY2sgKChOQU1FKS5sb2NrLCBMTExfUFJJVkFURSk7CQkJCSAgICAgIFwKKyAgICAgIH0JCQkJCQkJCQkgICAgICBcCisgIH0gd2hpbGUgKDApCisjZWxzZQorIyBkZWZpbmUgX19saWJjX2xvY2tfdW5sb2NrX3JlY3Vyc2l2ZShOQU1FKSBcCisgIF9fbGliY19tYXliZV9jYWxsIChfX3B0aHJlYWRfbXV0ZXhfdW5sb2NrLCAoJihOQU1FKSksIDApCisjZW5kaWYKKworI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBTSEFSRUQKKyMgZGVmaW5lIF9fcnRsZF9sb2NrX2RlZmF1bHRfbG9ja19yZWN1cnNpdmUobG9jaykgXAorICArKygocHRocmVhZF9tdXRleF90ICopKGxvY2spKS0+X19kYXRhLl9fY291bnQ7CisKKyMgZGVmaW5lIF9fcnRsZF9sb2NrX2RlZmF1bHRfdW5sb2NrX3JlY3Vyc2l2ZShsb2NrKSBcCisgIC0tKChwdGhyZWFkX211dGV4X3QgKikobG9jaykpLT5fX2RhdGEuX19jb3VudDsKKworIyBkZWZpbmUgX19ydGxkX2xvY2tfbG9ja19yZWN1cnNpdmUoTkFNRSkgXAorICBHTChkbF9ydGxkX2xvY2tfcmVjdXJzaXZlKSAoJihOQU1FKS5tdXRleCkKKworIyBkZWZpbmUgX19ydGxkX2xvY2tfdW5sb2NrX3JlY3Vyc2l2ZShOQU1FKSBcCisgIEdMKGRsX3J0bGRfdW5sb2NrX3JlY3Vyc2l2ZSkgKCYoTkFNRSkubXV0ZXgpCisjZWxzZQorIyBkZWZpbmUgX19ydGxkX2xvY2tfbG9ja19yZWN1cnNpdmUoTkFNRSkgXAorICBfX2xpYmNfbWF5YmVfY2FsbCAoX19wdGhyZWFkX211dGV4X2xvY2ssICgmKE5BTUUpLm11dGV4KSwgMCkKKworIyBkZWZpbmUgX19ydGxkX2xvY2tfdW5sb2NrX3JlY3Vyc2l2ZShOQU1FKSBcCisgIF9fbGliY19tYXliZV9jYWxsIChfX3B0aHJlYWRfbXV0ZXhfdW5sb2NrLCAoJihOQU1FKS5tdXRleCksIDApCisjZW5kaWYKKworLyogRGVmaW5lIG9uY2UgY29udHJvbCB2YXJpYWJsZS4gICovCisjaWYgUFRIUkVBRF9PTkNFX0lOSVQgPT0gMAorLyogU3BlY2lhbCBjYXNlIGZvciBzdGF0aWMgdmFyaWFibGVzIHdoZXJlIHdlIGNhbiBhdm9pZCB0aGUgaW5pdGlhbGl6YXRpb24KKyAgIGlmIGl0IGlzIHplcm8uICAqLworIyBkZWZpbmUgX19saWJjX29uY2VfZGVmaW5lKENMQVNTLCBOQU1FKSBcCisgIENMQVNTIHB0aHJlYWRfb25jZV90IE5BTUUKKyNlbHNlCisjIGRlZmluZSBfX2xpYmNfb25jZV9kZWZpbmUoQ0xBU1MsIE5BTUUpIFwKKyAgQ0xBU1MgcHRocmVhZF9vbmNlX3QgTkFNRSA9IFBUSFJFQURfT05DRV9JTklUCisjZW5kaWYKKworLyogQ2FsbCBoYW5kbGVyIGlmZiB0aGUgZmlyc3QgY2FsbC4gICovCisjZGVmaW5lIF9fbGliY19vbmNlKE9OQ0VfQ09OVFJPTCwgSU5JVF9GVU5DVElPTikgXAorICBkbyB7CQkJCQkJCQkJICAgICAgXAorICAgIGlmIChQVEZBVkFJTCAoX19wdGhyZWFkX29uY2UpKQkJCQkJICAgICAgXAorICAgICAgX19saWJjX3B0Zl9jYWxsX2Fsd2F5cyAoX19wdGhyZWFkX29uY2UsICgmKE9OQ0VfQ09OVFJPTCksCQkgICAgICBcCisJCQkJCSAgICAgICBJTklUX0ZVTkNUSU9OKSk7CQkgICAgICBcCisgICAgZWxzZSBpZiAoKE9OQ0VfQ09OVFJPTCkgPT0gUFRIUkVBRF9PTkNFX0lOSVQpIHsJCQkgICAgICBcCisgICAgICBJTklUX0ZVTkNUSU9OICgpOwkJCQkJCQkgICAgICBcCisgICAgICAoT05DRV9DT05UUk9MKSB8PSAyOwkJCQkJCSAgICAgIFwKKyAgICB9CQkJCQkJCQkJICAgICAgXAorICB9IHdoaWxlICgwKQorCisKKy8qIE5vdGUgdGhhdCBmb3IgSS9PIGNsZWFudXAgaGFuZGxpbmcgd2UgYXJlIHVzaW5nIHRoZSBvbGQtc3R5bGUKKyAgIGNhbmNlbCBoYW5kbGluZy4gIEl0IGRvZXMgbm90IGhhdmUgdG8gYmUgaW50ZWdyYXRlZCB3aXRoIEMrKyBzbmNlCisgICBubyBDKysgY29kZSBpcyBjYWxsZWQgaW4gdGhlIG1pZGRsZS4gIFRoZSBvbGQtc3R5bGUgaGFuZGxpbmcgaXMKKyAgIGZhc3RlciBhbmQgdGhlIHN1cHBvcnQgaXMgbm90IGdvaW5nIGF3YXkuICAqLworZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnJvdXRpbmUpICh2b2lkICopLCB2b2lkICphcmcpOworZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleGVjdXRlKTsKK2V4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcHVzaF9kZWZlciAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpyb3V0aW5lKSAodm9pZCAqKSwgdm9pZCAqYXJnKTsKK2V4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcG9wX3Jlc3RvcmUgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4ZWN1dGUpOworCisvKiBTdGFydCBjcml0aWNhbCByZWdpb24gd2l0aCBjbGVhbnVwLiAgKi8KKyNkZWZpbmUgX19saWJjX2NsZWFudXBfcmVnaW9uX3N0YXJ0KERPSVQsIEZDVCwgQVJHKSBcCisgIHsgc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyIF9idWZmZXI7CQkJCSAgICAgIFwKKyAgICBpbnQgX2F2YWlsOwkJCQkJCQkJICAgICAgXAorICAgIGlmIChET0lUKSB7CQkJCQkJCQkgICAgICBcCisgICAgICBfYXZhaWwgPSBQVEZBVkFJTCAoX3B0aHJlYWRfY2xlYW51cF9wdXNoX2RlZmVyKTsJCQkgICAgICBcCisgICAgICBpZiAoX2F2YWlsKSB7CQkJCQkJCSAgICAgIFwKKwlfX2xpYmNfcHRmX2NhbGxfYWx3YXlzIChfcHRocmVhZF9jbGVhbnVwX3B1c2hfZGVmZXIsICgmX2J1ZmZlciwgRkNULCAgXAorCQkJCQkJCSAgICAgIEFSRykpOwkgICAgICBcCisgICAgICB9IGVsc2UgewkJCQkJCQkJICAgICAgXAorCV9idWZmZXIuX19yb3V0aW5lID0gKEZDVCk7CQkJCQkgICAgICBcCisJX2J1ZmZlci5fX2FyZyA9IChBUkcpOwkJCQkJCSAgICAgIFwKKyAgICAgIH0JCQkJCQkJCQkgICAgICBcCisgICAgfSBlbHNlIHsJCQkJCQkJCSAgICAgIFwKKyAgICAgIF9hdmFpbCA9IDA7CQkJCQkJCSAgICAgIFwKKyAgICB9CisKKy8qIEVuZCBjcml0aWNhbCByZWdpb24gd2l0aCBjbGVhbnVwLiAgKi8KKyNkZWZpbmUgX19saWJjX2NsZWFudXBfcmVnaW9uX2VuZChET0lUKSBcCisgICAgaWYgKF9hdmFpbCkgewkJCQkJCQkgICAgICBcCisgICAgICBfX2xpYmNfcHRmX2NhbGxfYWx3YXlzIChfcHRocmVhZF9jbGVhbnVwX3BvcF9yZXN0b3JlLCAoJl9idWZmZXIsIERPSVQpKTtcCisgICAgfSBlbHNlIGlmIChET0lUKQkJCQkJCQkgICAgICBcCisgICAgICBfYnVmZmVyLl9fcm91dGluZSAoX2J1ZmZlci5fX2FyZyk7CQkJCSAgICAgIFwKKyAgfQorCisvKiBTb21ldGltZXMgd2UgaGF2ZSB0byBleGl0IHRoZSBibG9jayBpbiB0aGUgbWlkZGxlLiAgKi8KKyNkZWZpbmUgX19saWJjX2NsZWFudXBfZW5kKERPSVQpIFwKKyAgICBpZiAoX2F2YWlsKSB7CQkJCQkJCSAgICAgIFwKKyAgICAgIF9fbGliY19wdGZfY2FsbF9hbHdheXMgKF9wdGhyZWFkX2NsZWFudXBfcG9wX3Jlc3RvcmUsICgmX2J1ZmZlciwgRE9JVCkpO1wKKyAgICB9IGVsc2UgaWYgKERPSVQpCQkJCQkJCSAgICAgIFwKKyAgICAgIF9idWZmZXIuX19yb3V0aW5lIChfYnVmZmVyLl9fYXJnKQorCisKKy8qIE5vcm1hbCBjbGVhbnVwIGhhbmRsaW5nLCBiYXNlZCBvbiBDIGNsZWFudXAgYXR0cmlidXRlLiAgKi8KK19fZXh0ZXJuX2lubGluZSB2b2lkCitfX2xpYmNfY2xlYW51cF9yb3V0aW5lIChzdHJ1Y3QgX19wdGhyZWFkX2NsZWFudXBfZnJhbWUgKmYpCit7CisgIGlmIChmLT5fX2RvX2l0KQorICAgIGYtPl9fY2FuY2VsX3JvdXRpbmUgKGYtPl9fY2FuY2VsX2FyZyk7Cit9CisKKyNkZWZpbmUgX19saWJjX2NsZWFudXBfcHVzaChmY3QsIGFyZykgXAorICBkbyB7CQkJCQkJCQkJICAgICAgXAorICAgIHN0cnVjdCBfX3B0aHJlYWRfY2xlYW51cF9mcmFtZSBfX2NsZnJhbWUJCQkJICAgICAgXAorICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY2xlYW51cF9fIChfX2xpYmNfY2xlYW51cF9yb3V0aW5lKSkpCQkgICAgICBcCisgICAgICA9IHsgLl9fY2FuY2VsX3JvdXRpbmUgPSAoZmN0KSwgLl9fY2FuY2VsX2FyZyA9IChhcmcpLAkJICAgICAgXAorICAgICAgICAgIC5fX2RvX2l0ID0gMSB9OworCisjZGVmaW5lIF9fbGliY19jbGVhbnVwX3BvcChleGVjdXRlKSBcCisgICAgX19jbGZyYW1lLl9fZG9faXQgPSAoZXhlY3V0ZSk7CQkJCQkgICAgICBcCisgIH0gd2hpbGUgKDApCisKKworLyogQ3JlYXRlIHRocmVhZC1zcGVjaWZpYyBrZXkuICAqLworI2RlZmluZSBfX2xpYmNfa2V5X2NyZWF0ZShLRVksIERFU1RSVUNUT1IpIFwKKyAgX19saWJjX3B0Zl9jYWxsIChfX3B0aHJlYWRfa2V5X2NyZWF0ZSwgKEtFWSwgREVTVFJVQ1RPUiksIDEpCisKKy8qIEdldCB0aHJlYWQtc3BlY2lmaWMgZGF0YS4gICovCisjZGVmaW5lIF9fbGliY19nZXRzcGVjaWZpYyhLRVkpIFwKKyAgX19saWJjX3B0Zl9jYWxsIChfX3B0aHJlYWRfZ2V0c3BlY2lmaWMsIChLRVkpLCBOVUxMKQorCisvKiBTZXQgdGhyZWFkLXNwZWNpZmljIGRhdGEuICAqLworI2RlZmluZSBfX2xpYmNfc2V0c3BlY2lmaWMoS0VZLCBWQUxVRSkgXAorICBfX2xpYmNfcHRmX2NhbGwgKF9fcHRocmVhZF9zZXRzcGVjaWZpYywgKEtFWSwgVkFMVUUpLCAwKQorCisKKy8qIFJlZ2lzdGVyIGhhbmRsZXJzIHRvIGV4ZWN1dGUgYmVmb3JlIGFuZCBhZnRlciBgZm9yaycuICBOb3RlIHRoYXQgdGhlCisgICBsYXN0IHBhcmFtZXRlciBpcyBOVUxMLiAgVGhlIGhhbmRsZXJzIHJlZ2lzdGVyZWQgYnkgdGhlIGxpYmMgYXJlCisgICBuZXZlciByZW1vdmVkIHNvIHRoaXMgaXMgT0suICAqLworI2RlZmluZSBfX2xpYmNfYXRmb3JrKFBSRVBBUkUsIFBBUkVOVCwgQ0hJTEQpIFwKKyAgX19yZWdpc3Rlcl9hdGZvcmsgKFBSRVBBUkUsIFBBUkVOVCwgQ0hJTEQsIE5VTEwpCitleHRlcm4gaW50IF9fcmVnaXN0ZXJfYXRmb3JrICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCksCisJCQkgICAgICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKKwkJCSAgICAgIHZvaWQgKCpfX2NoaWxkKSAodm9pZCksCisJCQkgICAgICB2b2lkICpfX2Rzb19oYW5kbGUpOworCisvKiBGdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCBieSB0aGlzIGZpbGUgYW5kIGFyZSBpbnRlcm5hbCB0byB0aGUgR05VIEMKKyAgIGxpYnJhcnkuICAqLworCitleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF9pbml0IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgsCisJCQkJIF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19tdXRleF9hdHRyKTsKKworZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRleF90ICpfX211dGV4KTsKKworZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhfdHJ5bG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KTsKKworZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhfbG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KTsKKworZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhfdW5sb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpOworCitleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleGF0dHJfaW5pdCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKTsKKworZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cik7CisKK2V4dGVybiBpbnQgX19wdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlIChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsCisJCQkJCWludCBfX2tpbmQpOworCisjaWZkZWYgX19VU0VfVU5JWDk4CitleHRlcm4gaW50IF9fcHRocmVhZF9yd2xvY2tfaW5pdCAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2ssCisJCQkJICBfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpOworCitleHRlcm4gaW50IF9fcHRocmVhZF9yd2xvY2tfZGVzdHJveSAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spOworCitleHRlcm4gaW50IF9fcHRocmVhZF9yd2xvY2tfcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jayk7CisKK2V4dGVybiBpbnQgX19wdGhyZWFkX3J3bG9ja190cnlyZGxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKTsKKworZXh0ZXJuIGludCBfX3B0aHJlYWRfcndsb2NrX3dybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spOworCitleHRlcm4gaW50IF9fcHRocmVhZF9yd2xvY2tfdHJ5d3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jayk7CisKK2V4dGVybiBpbnQgX19wdGhyZWFkX3J3bG9ja191bmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKTsKKyNlbmRpZgorCitleHRlcm4gaW50IF9fcHRocmVhZF9rZXlfY3JlYXRlIChwdGhyZWFkX2tleV90ICpfX2tleSwKKwkJCQkgdm9pZCAoKl9fZGVzdHJfZnVuY3Rpb24pICh2b2lkICopKTsKKworZXh0ZXJuIGludCBfX3B0aHJlYWRfc2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXksCisJCQkJICBfX2NvbnN0IHZvaWQgKl9fcG9pbnRlcik7CisKK2V4dGVybiB2b2lkICpfX3B0aHJlYWRfZ2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXkpOworCitleHRlcm4gaW50IF9fcHRocmVhZF9vbmNlIChwdGhyZWFkX29uY2VfdCAqX19vbmNlX2NvbnRyb2wsCisJCQkgICB2b2lkICgqX19pbml0X3JvdXRpbmUpICh2b2lkKSk7CisKK2V4dGVybiBpbnQgX19wdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQpLAorCQkJICAgICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKKwkJCSAgICAgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSk7CisKKworCisvKiBNYWtlIHRoZSBwdGhyZWFkIGZ1bmN0aW9ucyB3ZWFrIHNvIHRoYXQgd2UgY2FuIGVsaWRlIHRoZW0gZnJvbQorICAgc2luZ2xlLXRocmVhZGVkIHByb2Nlc3Nlcy4gICovCisjaWZuZGVmIF9fTk9fV0VBS19QVEhSRUFEX0FMSUFTRVMKKyMgaWZkZWYgd2Vha19leHRlcm4KKyMgIGlmIF9MSUJDCisjICAgaW5jbHVkZSA8YnAtc3ltLmg+CisjICBlbHNlCisjICAgZGVmaW5lIEJQX1NZTSAoc3ltKSBzeW0KKyMgIGVuZGlmCit3ZWFrX2V4dGVybiAoQlBfU1lNIChfX3B0aHJlYWRfbXV0ZXhfaW5pdCkpCit3ZWFrX2V4dGVybiAoQlBfU1lNIChfX3B0aHJlYWRfbXV0ZXhfZGVzdHJveSkpCit3ZWFrX2V4dGVybiAoQlBfU1lNIChfX3B0aHJlYWRfbXV0ZXhfbG9jaykpCit3ZWFrX2V4dGVybiAoQlBfU1lNIChfX3B0aHJlYWRfbXV0ZXhfdHJ5bG9jaykpCit3ZWFrX2V4dGVybiAoQlBfU1lNIChfX3B0aHJlYWRfbXV0ZXhfdW5sb2NrKSkKK3dlYWtfZXh0ZXJuIChCUF9TWU0gKF9fcHRocmVhZF9tdXRleGF0dHJfaW5pdCkpCit3ZWFrX2V4dGVybiAoQlBfU1lNIChfX3B0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kpKQord2Vha19leHRlcm4gKEJQX1NZTSAoX19wdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKSkKK3dlYWtfZXh0ZXJuIChCUF9TWU0gKF9fcHRocmVhZF9yd2xvY2tfaW5pdCkpCit3ZWFrX2V4dGVybiAoQlBfU1lNIChfX3B0aHJlYWRfcndsb2NrX2Rlc3Ryb3kpKQord2Vha19leHRlcm4gKEJQX1NZTSAoX19wdGhyZWFkX3J3bG9ja19yZGxvY2spKQord2Vha19leHRlcm4gKEJQX1NZTSAoX19wdGhyZWFkX3J3bG9ja190cnlyZGxvY2spKQord2Vha19leHRlcm4gKEJQX1NZTSAoX19wdGhyZWFkX3J3bG9ja193cmxvY2spKQord2Vha19leHRlcm4gKEJQX1NZTSAoX19wdGhyZWFkX3J3bG9ja190cnl3cmxvY2spKQord2Vha19leHRlcm4gKEJQX1NZTSAoX19wdGhyZWFkX3J3bG9ja191bmxvY2spKQord2Vha19leHRlcm4gKEJQX1NZTSAoX19wdGhyZWFkX2tleV9jcmVhdGUpKQord2Vha19leHRlcm4gKEJQX1NZTSAoX19wdGhyZWFkX3NldHNwZWNpZmljKSkKK3dlYWtfZXh0ZXJuIChCUF9TWU0gKF9fcHRocmVhZF9nZXRzcGVjaWZpYykpCit3ZWFrX2V4dGVybiAoQlBfU1lNIChfX3B0aHJlYWRfb25jZSkpCit3ZWFrX2V4dGVybiAoX19wdGhyZWFkX2luaXRpYWxpemUpCit3ZWFrX2V4dGVybiAoX19wdGhyZWFkX2F0Zm9yaykKK3dlYWtfZXh0ZXJuIChCUF9TWU0gKF9wdGhyZWFkX2NsZWFudXBfcHVzaF9kZWZlcikpCit3ZWFrX2V4dGVybiAoQlBfU1lNIChfcHRocmVhZF9jbGVhbnVwX3BvcF9yZXN0b3JlKSkKK3dlYWtfZXh0ZXJuIChCUF9TWU0gKHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUpKQorIyBlbHNlCisjICBwcmFnbWEgd2VhayBfX3B0aHJlYWRfbXV0ZXhfaW5pdAorIyAgcHJhZ21hIHdlYWsgX19wdGhyZWFkX211dGV4X2Rlc3Ryb3kKKyMgIHByYWdtYSB3ZWFrIF9fcHRocmVhZF9tdXRleF9sb2NrCisjICBwcmFnbWEgd2VhayBfX3B0aHJlYWRfbXV0ZXhfdHJ5bG9jaworIyAgcHJhZ21hIHdlYWsgX19wdGhyZWFkX211dGV4X3VubG9jaworIyAgcHJhZ21hIHdlYWsgX19wdGhyZWFkX211dGV4YXR0cl9pbml0CisjICBwcmFnbWEgd2VhayBfX3B0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kKKyMgIHByYWdtYSB3ZWFrIF9fcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZQorIyAgcHJhZ21hIHdlYWsgX19wdGhyZWFkX3J3bG9ja19kZXN0cm95CisjICBwcmFnbWEgd2VhayBfX3B0aHJlYWRfcndsb2NrX3JkbG9jaworIyAgcHJhZ21hIHdlYWsgX19wdGhyZWFkX3J3bG9ja190cnlyZGxvY2sKKyMgIHByYWdtYSB3ZWFrIF9fcHRocmVhZF9yd2xvY2tfd3Jsb2NrCisjICBwcmFnbWEgd2VhayBfX3B0aHJlYWRfcndsb2NrX3RyeXdybG9jaworIyAgcHJhZ21hIHdlYWsgX19wdGhyZWFkX3J3bG9ja191bmxvY2sKKyMgIHByYWdtYSB3ZWFrIF9fcHRocmVhZF9rZXlfY3JlYXRlCisjICBwcmFnbWEgd2VhayBfX3B0aHJlYWRfc2V0c3BlY2lmaWMKKyMgIHByYWdtYSB3ZWFrIF9fcHRocmVhZF9nZXRzcGVjaWZpYworIyAgcHJhZ21hIHdlYWsgX19wdGhyZWFkX29uY2UKKyMgIHByYWdtYSB3ZWFrIF9fcHRocmVhZF9pbml0aWFsaXplCisjICBwcmFnbWEgd2VhayBfX3B0aHJlYWRfYXRmb3JrCisjICBwcmFnbWEgd2VhayBfcHRocmVhZF9jbGVhbnVwX3B1c2hfZGVmZXIKKyMgIHByYWdtYSB3ZWFrIF9wdGhyZWFkX2NsZWFudXBfcG9wX3Jlc3RvcmUKKyMgIHByYWdtYSB3ZWFrIHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUKKyMgZW5kaWYKKyNlbmRpZgorCisjZW5kaWYJLyogYml0cy9saWJjLWxvY2suaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvbGliaW8tbGRibC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvbGliaW8tbGRibC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NzRiY2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9saWJpby1sZGJsLmgKQEAgLTAsMCArMSwyNSBAQAorLyogLW1sb25nLWRvdWJsZS02NCBjb21wYXRpYmlsaXR5IG1vZGUgZm9yIGxpYmlvIGZ1bmN0aW9ucy4KKyAgIENvcHlyaWdodCAoQykgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfSU9fU1RESU9fSAorIyBlcnJvciAiTmV2ZXIgaW5jbHVkZSA8Yml0cy9saWJpby1sZGJsLmg+IGRpcmVjdGx5OyB1c2UgPGxpYmlvLmg+IGluc3RlYWQuIgorI2VuZGlmCisKK19fTERCTF9SRURJUl9ERUNMIChfSU9fdmZzY2FuZikKK19fTERCTF9SRURJUl9ERUNMIChfSU9fdmZwcmludGYpCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9saW5rLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9saW5rLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRiZDJjNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2xpbmsuaApAQCAtMCwwICsxLDY2IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYJX0xJTktfSAorIyBlcnJvciAiTmV2ZXIgaW5jbHVkZSA8Yml0cy9saW5rLmg+IGRpcmVjdGx5OyB1c2UgPGxpbmsuaD4gaW5zdGVhZC4iCisjZW5kaWYKKworCisvKiBSZWdpc3RlcnMgZm9yIGVudHJ5IGludG8gUExUIG9uIEFSTS4gICovCit0eXBlZGVmIHN0cnVjdCBMYV9hcm1fcmVncworeworICB1aW50MzJfdCBscl9yZWdbNF07CisgIHVpbnQzMl90IGxyX3NwOworICB1aW50MzJfdCBscl9scjsKKyAgLyogQ29wcm9jZXNzb3IgcmVnaXN0ZXJzIHVzZWQgZm9yIGFyZ3VtZW50IHBhc3NpbmcuICBUaGUgZGF0YQorICAgICBzdG9yZWQgaGVyZSBkZXBlbmRzIG9uIHRoZSBjb3Byb2Nlc3NvcnMgYXZhaWxhYmxlIGluIHRoZQorICAgICBzeXN0ZW0gd2hpY2ggYXJlIHVzZWQgZm9yIGZ1bmN0aW9uIGNhbGxzIGluIHRoZSBjdXJyZW50IEFCSS4KKyAgICAgVkZQIHVzZXMgZWlnaHQgNjQtYml0IHJlZ2lzdGVycywgYW5kIGlXTU1YdCB1c2VzIHRlbi4gICovCisgIHVpbnQzMl90IGxyX2NvcHJvY1s0Ml07Cit9IExhX2FybV9yZWdzOworCisvKiBSZXR1cm4gdmFsdWVzIGZvciBjYWxscyBmcm9tIFBMVCBvbiBBUk0uICAqLwordHlwZWRlZiBzdHJ1Y3QgTGFfYXJtX3JldHZhbAoreworICAvKiBVcCB0byBmb3VyIGludGVnZXIgcmVnaXN0ZXJzIGNhbiBiZSB1c2VkIGZvciBhIHJldHVybiB2YWx1ZSBpbgorICAgICBzb21lIEFCSXMgKEFQQ1MgY29tcGxleCBsb25nIGRvdWJsZSkuICAqLworICB1aW50MzJfdCBscnZfcmVnWzRdOworCisgIC8qIEFueSBjb3Byb2Nlc3NvciByZWdpc3RlcnMgd2hpY2ggbWlnaHQgYmUgdXNlZCB0byByZXR1cm4gdmFsdWVzCisgICAgIGluIHRoZSBjdXJyZW50IEFCSS4gICovCisgIHVpbnQzMl90IGxydl9jb3Byb2NbMTJdOworfSBMYV9hcm1fcmV0dmFsOworCisKK19fQkVHSU5fREVDTFMKKworZXh0ZXJuIEVsZjMyX0FkZHIgbGFfYXJtX2dudV9wbHRlbnRlciAoRWxmMzJfU3ltICpfX3N5bSwgdW5zaWduZWQgaW50IF9fbmR4LAorCQkJCSAgICAgICB1aW50cHRyX3QgKl9fcmVmY29vaywKKwkJCQkgICAgICAgdWludHB0cl90ICpfX2RlZmNvb2ssCisJCQkJICAgICAgIExhX2FybV9yZWdzICpfX3JlZ3MsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCAqX19mbGFncywKKwkJCQkgICAgICAgY29uc3QgY2hhciAqX19zeW1uYW1lLAorCQkJCSAgICAgICBsb25nIGludCAqX19mcmFtZXNpemVwKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgbGFfYXJtX2dudV9wbHRleGl0IChFbGYzMl9TeW0gKl9fc3ltLCB1bnNpZ25lZCBpbnQgX19uZHgsCisJCQkJCXVpbnRwdHJfdCAqX19yZWZjb29rLAorCQkJCQl1aW50cHRyX3QgKl9fZGVmY29vaywKKwkJCQkJY29uc3QgTGFfYXJtX3JlZ3MgKl9faW5yZWdzLAorCQkJCQlMYV9hcm1fcmV0dmFsICpfX291dHJlZ3MsCisJCQkJCWNvbnN0IGNoYXIgKnN5bW5hbWUpOworCitfX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjBkZjRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qIE1pbmltdW0gZ3VhcmFudGVlZCBtYXhpbXVtIHZhbHVlcyBmb3Igc3lzdGVtIGxpbWl0cy4gIExpbnV4IHZlcnNpb24uCisgICBDb3B5cmlnaHQgKEMpIDE5OTMtMTk5OCwyMDAwLDIwMDItMjAwNCwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsCisgICB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKy8qIFRoZSBrZXJuZWwgaGVhZGVyIHBvbGx1dGVzIHRoZSBuYW1lc3BhY2Ugd2l0aCB0aGUgTlJfT1BFTiBzeW1ib2wKKyAgIGFuZCBkZWZpbmVzIExJTktfTUFYIGFsdGhvdWdoIGZpbGVzeXN0ZW1zIGhhdmUgZGlmZmVyZW50IG1heGltYS4gIEEKKyAgIHNpbWlsYXIgdGhpbmcgaXMgdHJ1ZSBmb3IgT1BFTl9NQVg6IHRoZSBsaW1pdCBjYW4gYmUgY2hhbmdlZCBhdAorICAgcnVudGltZSBhbmQgdGhlcmVmb3JlIHRoZSBtYWNybyBtdXN0IG5vdCBiZSBkZWZpbmVkLiAgUmVtb3ZlIHRoaXMKKyAgIGFmdGVyIGluY2x1ZGluZyB0aGUgaGVhZGVyIGlmIG5lY2Vzc2FyeS4gICovCisjaWZuZGVmIE5SX09QRU4KKyMgZGVmaW5lIF9fdW5kZWZfTlJfT1BFTgorI2VuZGlmCisjaWZuZGVmIExJTktfTUFYCisjIGRlZmluZSBfX3VuZGVmX0xJTktfTUFYCisjZW5kaWYKKyNpZm5kZWYgT1BFTl9NQVgKKyMgZGVmaW5lIF9fdW5kZWZfT1BFTl9NQVgKKyNlbmRpZgorI2lmbmRlZiBBUkdfTUFYCisjIGRlZmluZSBfX3VuZGVmX0FSR19NQVgKKyNlbmRpZgorCisvKiBUaGUga2VybmVsIHNvdXJjZXMgY29udGFpbiBhIGZpbGUgd2l0aCBhbGwgdGhlIG5lZWRlZCBpbmZvcm1hdGlvbi4gICovCisjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+CisKKy8qIEhhdmUgdG8gcmVtb3ZlIE5SX09QRU4/ICAqLworI2lmZGVmIF9fdW5kZWZfTlJfT1BFTgorIyB1bmRlZiBOUl9PUEVOCisjIHVuZGVmIF9fdW5kZWZfTlJfT1BFTgorI2VuZGlmCisvKiBIYXZlIHRvIHJlbW92ZSBMSU5LX01BWD8gICovCisjaWZkZWYgX191bmRlZl9MSU5LX01BWAorIyB1bmRlZiBMSU5LX01BWAorIyB1bmRlZiBfX3VuZGVmX0xJTktfTUFYCisjZW5kaWYKKy8qIEhhdmUgdG8gcmVtb3ZlIE9QRU5fTUFYPyAgKi8KKyNpZmRlZiBfX3VuZGVmX09QRU5fTUFYCisjIHVuZGVmIE9QRU5fTUFYCisjIHVuZGVmIF9fdW5kZWZfT1BFTl9NQVgKKyNlbmRpZgorLyogSGF2ZSB0byByZW1vdmUgQVJHX01BWD8gICovCisjaWZkZWYgX191bmRlZl9BUkdfTUFYCisjIHVuZGVmIEFSR19NQVgKKyMgdW5kZWYgX191bmRlZl9BUkdfTUFYCisjZW5kaWYKKworLyogVGhlIG51bWJlciBvZiBkYXRhIGtleXMgcGVyIHByb2Nlc3MuICAqLworI2RlZmluZSBfUE9TSVhfVEhSRUFEX0tFWVNfTUFYCTEyOAorLyogVGhpcyBpcyB0aGUgdmFsdWUgdGhpcyBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cy4gICovCisjZGVmaW5lIFBUSFJFQURfS0VZU19NQVgJMTAyNAorCisvKiBDb250cm9sbGluZyB0aGUgaXRlcmF0aW9ucyBvZiBkZXN0cnVjdG9ycyBmb3IgdGhyZWFkLXNwZWNpZmljIGRhdGEuICAqLworI2RlZmluZSBfUE9TSVhfVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUwk0CisvKiBOdW1iZXIgb2YgaXRlcmF0aW9ucyB0aGlzIGltcGxlbWVudGF0aW9uIGRvZXMuICAqLworI2RlZmluZSBQVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUwlfUE9TSVhfVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUworCisvKiBUaGUgbnVtYmVyIG9mIHRocmVhZHMgcGVyIHByb2Nlc3MuICAqLworI2RlZmluZSBfUE9TSVhfVEhSRUFEX1RIUkVBRFNfTUFYCTY0CisvKiBXZSBoYXZlIG5vIHByZWRlZmluZWQgbGltaXQgb24gdGhlIG51bWJlciBvZiB0aHJlYWRzLiAgKi8KKyN1bmRlZiBQVEhSRUFEX1RIUkVBRFNfTUFYCisKKy8qIE1heGltdW0gYW1vdW50IGJ5IHdoaWNoIGEgcHJvY2VzcyBjYW4gZGVzY3JlYXNlIGl0cyBhc3luY2hyb25vdXMgSS9PCisgICBwcmlvcml0eSBsZXZlbC4gICovCisjZGVmaW5lIEFJT19QUklPX0RFTFRBX01BWAkyMAorCisvKiBNaW5pbXVtIHNpemUgZm9yIGEgdGhyZWFkLiAgV2UgYXJlIGZyZWUgdG8gY2hvb3NlIGEgcmVhc29uYWJsZSB2YWx1ZS4gICovCisjZGVmaW5lIFBUSFJFQURfU1RBQ0tfTUlOCTE2Mzg0CisKKy8qIE1heGltdW0gbnVtYmVyIG9mIHRpbWVyIGV4cGlyYXRpb24gb3ZlcnJ1bnMuICAqLworI2RlZmluZSBERUxBWVRJTUVSX01BWAkyMTQ3NDgzNjQ3CisKKy8qIE1heGltdW0gdHR5IG5hbWUgbGVuZ3RoLiAgKi8KKyNkZWZpbmUgVFRZX05BTUVfTUFYCQkzMgorCisvKiBNYXhpbXVtIGxvZ2luIG5hbWUgbGVuZ3RoLiAgVGhpcyBpcyBhcmJpdHJhcnkuICAqLworI2RlZmluZSBMT0dJTl9OQU1FX01BWAkJMjU2CisKKy8qIE1heGltdW0gaG9zdCBuYW1lIGxlbmd0aC4gICovCisjZGVmaW5lIEhPU1RfTkFNRV9NQVgJCTY0CisKKy8qIE1heGltdW0gbWVzc2FnZSBxdWV1ZSBwcmlvcml0eSBsZXZlbC4gICovCisjZGVmaW5lIE1RX1BSSU9fTUFYCQkzMjc2OAorCisvKiBNYXhpbXVtIHZhbHVlIHRoZSBzZW1hcGhvcmUgY2FuIGhhdmUuICAqLworI2RlZmluZSBTRU1fVkFMVUVfTUFYICAgKDIxNDc0ODM2NDcpCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9sb2NhbGUuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL2xvY2FsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMDY0YjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9sb2NhbGUuaApAQCAtMCwwICsxLDQ0IEBACisvKiBEZWZpbml0aW9uIG9mIGxvY2FsZSBjYXRlZ29yeSBzeW1ib2wgdmFsdWVzLgorICAgQ29weXJpZ2h0IChDKSAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWYgIWRlZmluZWQgX0xPQ0FMRV9IICYmICFkZWZpbmVkIF9MQU5HSU5GT19ICisjIGVycm9yICJOZXZlciB1c2UgPGJpdHMvbG9jYWxlLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxsb2NhbGUuaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfQklUU19MT0NBTEVfSAorI2RlZmluZSBfQklUU19MT0NBTEVfSAkxCisKK2VudW0KK3sKKyAgX19MQ19DVFlQRSA9IDAsCisgIF9fTENfTlVNRVJJQyA9IDEsCisgIF9fTENfVElNRSA9IDIsCisgIF9fTENfQ09MTEFURSA9IDMsCisgIF9fTENfTU9ORVRBUlkgPSA0LAorICBfX0xDX01FU1NBR0VTID0gNSwKKyAgX19MQ19BTEwgPSA2LAorICBfX0xDX1BBUEVSID0gNywKKyAgX19MQ19OQU1FID0gOCwKKyAgX19MQ19BRERSRVNTID0gOSwKKyAgX19MQ19URUxFUEhPTkUgPSAxMCwKKyAgX19MQ19NRUFTVVJFTUVOVCA9IDExLAorICBfX0xDX0lERU5USUZJQ0FUSU9OID0gMTIKK307CisKKyNlbmRpZgkvKiBiaXRzL2xvY2FsZS5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZGE2MjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaApAQCAtMCwwICsxLDM2NSBAQAorLyogUHJvdG90eXBlIGRlY2xhcmF0aW9ucyBmb3IgbWF0aCBmdW5jdGlvbnM7IGhlbHBlciBmaWxlIGZvciA8bWF0aC5oPi4KKyAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDAyLCAyMDAzLCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisvKiBOT1RFOiBCZWNhdXNlIG9mIHRoZSBzcGVjaWFsIHdheSB0aGlzIGZpbGUgaXMgdXNlZCBieSA8bWF0aC5oPiwgdGhpcworICAgZmlsZSBtdXN0IE5PVCBiZSBwcm90ZWN0ZWQgZnJvbSBtdWx0aXBsZSBpbmNsdXNpb24gYXMgaGVhZGVyIGZpbGVzCisgICB1c3VhbGx5IGFyZS4KKworICAgVGhpcyBmaWxlIHByb3ZpZGVzIHByb3RvdHlwZSBkZWNsYXJhdGlvbnMgZm9yIHRoZSBtYXRoIGZ1bmN0aW9ucy4KKyAgIE1vc3QgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCB1c2luZyB0aGUgbWFjcm86CisKKyAgIF9fTUFUSENBTEwgKE5BTUUsW19yXSwgKEFSR1MuLi4pKTsKKworICAgVGhpcyBtZWFucyB0aGVyZSBpcyBhIGZ1bmN0aW9uIGBOQU1FJyByZXR1cm5pbmcgYGRvdWJsZScgYW5kIGEgZnVuY3Rpb24KKyAgIGBOQU1FZicgcmV0dXJuaW5nIGBmbG9hdCcuICBFYWNoIHBsYWNlIGBfTWRvdWJsZV8nIGFwcGVhcnMgaW4gdGhlCisgICBwcm90b3R5cGUsIHRoYXQgaXMgYWN0dWFsbHkgYGRvdWJsZScgaW4gdGhlIHByb3RvdHlwZSBmb3IgYE5BTUUnIGFuZAorICAgYGZsb2F0JyBpbiB0aGUgcHJvdG90eXBlIGZvciBgTkFNRWYnLiAgUmVlbnRyYW50IHZhcmlhbnQgZnVuY3Rpb25zIGFyZQorICAgY2FsbGVkIGBOQU1FX3InIGFuZCBgTkFNRWZfcicuCisKKyAgIEZ1bmN0aW9ucyByZXR1cm5pbmcgb3RoZXIgdHlwZXMgbGlrZSBgaW50JyBhcmUgZGVjbGFyZWQgdXNpbmcgdGhlIG1hY3JvOgorCisgICBfX01BVEhERUNMIChUWVBFLCBOQU1FLFtfcl0sIChBUkdTLi4uKSk7CisKKyAgIFRoaXMgaXMganVzdCBsaWtlIF9fTUFUSENBTEwgYnV0IGZvciBhIGZ1bmN0aW9uIHJldHVybmluZyBgVFlQRScKKyAgIGluc3RlYWQgb2YgYF9NZG91YmxlXycuICBJbiBhbGwgb2YgdGhlc2UgY2FzZXMsIHRoZXJlIGlzIHN0aWxsCisgICBib3RoIGEgYE5BTUUnIGFuZCBhIGBOQU1FZicgdGhhdCB0YWtlcyBgZmxvYXQnIGFyZ3VtZW50cy4KKworICAgTm90ZSB0aGF0IHRoZXJlIG11c3QgYmUgbm8gd2hpdGVzcGFjZSBiZWZvcmUgdGhlIGFyZ3VtZW50IHBhc3NlZCBmb3IKKyAgIE5BTUUsIHRvIG1ha2UgdG9rZW4gcGFzdGluZyB3b3JrIHdpdGggLXRyYWRpdGlvbmFsLiAgKi8KKworI2lmbmRlZiBfTUFUSF9ICisjIGVycm9yICJOZXZlciBpbmNsdWRlIDxiaXRzL21hdGhjYWxscy5oPiBkaXJlY3RseTsgaW5jbHVkZSA8bWF0aC5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisKKy8qIFRyaWdvbm9tZXRyaWMgZnVuY3Rpb25zLiAgKi8KKworX01kb3VibGVfQkVHSU5fTkFNRVNQQUNFCisvKiBBcmMgY29zaW5lIG9mIFguICAqLworX19NQVRIQ0FMTCAoYWNvcywsIChfTWRvdWJsZV8gX194KSk7CisvKiBBcmMgc2luZSBvZiBYLiAgKi8KK19fTUFUSENBTEwgKGFzaW4sLCAoX01kb3VibGVfIF9feCkpOworLyogQXJjIHRhbmdlbnQgb2YgWC4gICovCitfX01BVEhDQUxMIChhdGFuLCwgKF9NZG91YmxlXyBfX3gpKTsKKy8qIEFyYyB0YW5nZW50IG9mIFkvWC4gICovCitfX01BVEhDQUxMIChhdGFuMiwsIChfTWRvdWJsZV8gX195LCBfTWRvdWJsZV8gX194KSk7CisKKy8qIENvc2luZSBvZiBYLiAgKi8KK19fTUFUSENBTEwgKGNvcywsIChfTWRvdWJsZV8gX194KSk7CisvKiBTaW5lIG9mIFguICAqLworX19NQVRIQ0FMTCAoc2luLCwgKF9NZG91YmxlXyBfX3gpKTsKKy8qIFRhbmdlbnQgb2YgWC4gICovCitfX01BVEhDQUxMICh0YW4sLCAoX01kb3VibGVfIF9feCkpOworCisvKiBIeXBlcmJvbGljIGZ1bmN0aW9ucy4gICovCisKKy8qIEh5cGVyYm9saWMgY29zaW5lIG9mIFguICAqLworX19NQVRIQ0FMTCAoY29zaCwsIChfTWRvdWJsZV8gX194KSk7CisvKiBIeXBlcmJvbGljIHNpbmUgb2YgWC4gICovCitfX01BVEhDQUxMIChzaW5oLCwgKF9NZG91YmxlXyBfX3gpKTsKKy8qIEh5cGVyYm9saWMgdGFuZ2VudCBvZiBYLiAgKi8KK19fTUFUSENBTEwgKHRhbmgsLCAoX01kb3VibGVfIF9feCkpOworX01kb3VibGVfRU5EX05BTUVTUEFDRQorCisjaWZkZWYgX19VU0VfR05VCisvKiBDb3NpbmUgYW5kIHNpbmUgb2YgWC4gICovCitfX01BVEhERUNMICh2b2lkLHNpbmNvcywsCisJICAgIChfTWRvdWJsZV8gX194LCBfTWRvdWJsZV8gKl9fc2lueCwgX01kb3VibGVfICpfX2Nvc3gpKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfX1VTRV9NSVNDIHx8IGRlZmluZWQgX19VU0VfWE9QRU5fRVhURU5ERUQgfHwgZGVmaW5lZCBfX1VTRV9JU09DOTkKK19fQkVHSU5fTkFNRVNQQUNFX0M5OQorLyogSHlwZXJib2xpYyBhcmMgY29zaW5lIG9mIFguICAqLworX19NQVRIQ0FMTCAoYWNvc2gsLCAoX01kb3VibGVfIF9feCkpOworLyogSHlwZXJib2xpYyBhcmMgc2luZSBvZiBYLiAgKi8KK19fTUFUSENBTEwgKGFzaW5oLCwgKF9NZG91YmxlXyBfX3gpKTsKKy8qIEh5cGVyYm9saWMgYXJjIHRhbmdlbnQgb2YgWC4gICovCitfX01BVEhDQUxMIChhdGFuaCwsIChfTWRvdWJsZV8gX194KSk7CitfX0VORF9OQU1FU1BBQ0VfQzk5CisjZW5kaWYKKworLyogRXhwb25lbnRpYWwgYW5kIGxvZ2FyaXRobWljIGZ1bmN0aW9ucy4gICovCisKK19NZG91YmxlX0JFR0lOX05BTUVTUEFDRQorLyogRXhwb25lbnRpYWwgZnVuY3Rpb24gb2YgWC4gICovCitfX01BVEhDQUxMIChleHAsLCAoX01kb3VibGVfIF9feCkpOworCisvKiBCcmVhayBWQUxVRSBpbnRvIGEgbm9ybWFsaXplZCBmcmFjdGlvbiBhbmQgYW4gaW50ZWdyYWwgcG93ZXIgb2YgMi4gICovCitfX01BVEhDQUxMIChmcmV4cCwsIChfTWRvdWJsZV8gX194LCBpbnQgKl9fZXhwb25lbnQpKTsKKworLyogWCB0aW1lcyAodHdvIHRvIHRoZSBFWFAgcG93ZXIpLiAgKi8KK19fTUFUSENBTEwgKGxkZXhwLCwgKF9NZG91YmxlXyBfX3gsIGludCBfX2V4cG9uZW50KSk7CisKKy8qIE5hdHVyYWwgbG9nYXJpdGhtIG9mIFguICAqLworX19NQVRIQ0FMTCAobG9nLCwgKF9NZG91YmxlXyBfX3gpKTsKKworLyogQmFzZS10ZW4gbG9nYXJpdGhtIG9mIFguICAqLworX19NQVRIQ0FMTCAobG9nMTAsLCAoX01kb3VibGVfIF9feCkpOworCisvKiBCcmVhayBWQUxVRSBpbnRvIGludGVncmFsIGFuZCBmcmFjdGlvbmFsIHBhcnRzLiAgKi8KK19fTUFUSENBTEwgKG1vZGYsLCAoX01kb3VibGVfIF9feCwgX01kb3VibGVfICpfX2lwdHIpKTsKK19NZG91YmxlX0VORF9OQU1FU1BBQ0UKKworI2lmZGVmIF9fVVNFX0dOVQorLyogQSBmdW5jdGlvbiBtaXNzaW5nIGluIGFsbCBzdGFuZGFyZHM6IGNvbXB1dGUgZXhwb25lbnQgdG8gYmFzZSB0ZW4uICAqLworX19NQVRIQ0FMTCAoZXhwMTAsLCAoX01kb3VibGVfIF9feCkpOworLyogQW5vdGhlciBuYW1lIG9jY2FzaW9uYWxseSB1c2VkLiAgKi8KK19fTUFUSENBTEwgKHBvdzEwLCwgKF9NZG91YmxlXyBfX3gpKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfX1VTRV9NSVNDIHx8IGRlZmluZWQgX19VU0VfWE9QRU5fRVhURU5ERUQgfHwgZGVmaW5lZCBfX1VTRV9JU09DOTkKK19fQkVHSU5fTkFNRVNQQUNFX0M5OQorLyogUmV0dXJuIGV4cChYKSAtIDEuICAqLworX19NQVRIQ0FMTCAoZXhwbTEsLCAoX01kb3VibGVfIF9feCkpOworCisvKiBSZXR1cm4gbG9nKDEgKyBYKS4gICovCitfX01BVEhDQUxMIChsb2cxcCwsIChfTWRvdWJsZV8gX194KSk7CisKKy8qIFJldHVybiB0aGUgYmFzZSAyIHNpZ25lZCBpbnRlZ3JhbCBleHBvbmVudCBvZiBYLiAgKi8KK19fTUFUSENBTEwgKGxvZ2IsLCAoX01kb3VibGVfIF9feCkpOworX19FTkRfTkFNRVNQQUNFX0M5OQorI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9JU09DOTkKK19fQkVHSU5fTkFNRVNQQUNFX0M5OQorLyogQ29tcHV0ZSBiYXNlLTIgZXhwb25lbnRpYWwgb2YgWC4gICovCitfX01BVEhDQUxMIChleHAyLCwgKF9NZG91YmxlXyBfX3gpKTsKKworLyogQ29tcHV0ZSBiYXNlLTIgbG9nYXJpdGhtIG9mIFguICAqLworX19NQVRIQ0FMTCAobG9nMiwsIChfTWRvdWJsZV8gX194KSk7CitfX0VORF9OQU1FU1BBQ0VfQzk5CisjZW5kaWYKKworCisvKiBQb3dlciBmdW5jdGlvbnMuICAqLworCitfTWRvdWJsZV9CRUdJTl9OQU1FU1BBQ0UKKy8qIFJldHVybiBYIHRvIHRoZSBZIHBvd2VyLiAgKi8KK19fTUFUSENBTEwgKHBvdywsIChfTWRvdWJsZV8gX194LCBfTWRvdWJsZV8gX195KSk7CisKKy8qIFJldHVybiB0aGUgc3F1YXJlIHJvb3Qgb2YgWC4gICovCitfX01BVEhDQUxMIChzcXJ0LCwgKF9NZG91YmxlXyBfX3gpKTsKK19NZG91YmxlX0VORF9OQU1FU1BBQ0UKKworI2lmIGRlZmluZWQgX19VU0VfTUlTQyB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOIHx8IGRlZmluZWQgX19VU0VfSVNPQzk5CitfX0JFR0lOX05BTUVTUEFDRV9DOTkKKy8qIFJldHVybiBgc3FydChYKlggKyBZKlkpJy4gICovCitfX01BVEhDQUxMIChoeXBvdCwsIChfTWRvdWJsZV8gX194LCBfTWRvdWJsZV8gX195KSk7CitfX0VORF9OQU1FU1BBQ0VfQzk5CisjZW5kaWYKKworI2lmIGRlZmluZWQgX19VU0VfTUlTQyB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOX0VYVEVOREVEIHx8IGRlZmluZWQgX19VU0VfSVNPQzk5CitfX0JFR0lOX05BTUVTUEFDRV9DOTkKKy8qIFJldHVybiB0aGUgY3ViZSByb290IG9mIFguICAqLworX19NQVRIQ0FMTCAoY2JydCwsIChfTWRvdWJsZV8gX194KSk7CitfX0VORF9OQU1FU1BBQ0VfQzk5CisjZW5kaWYKKworCisvKiBOZWFyZXN0IGludGVnZXIsIGFic29sdXRlIHZhbHVlLCBhbmQgcmVtYWluZGVyIGZ1bmN0aW9ucy4gICovCisKK19NZG91YmxlX0JFR0lOX05BTUVTUEFDRQorLyogU21hbGxlc3QgaW50ZWdyYWwgdmFsdWUgbm90IGxlc3MgdGhhbiBYLiAgKi8KK19fTUFUSENBTExYIChjZWlsLCwgKF9NZG91YmxlXyBfX3gpLCAoX19jb25zdF9fKSk7CisKKy8qIEFic29sdXRlIHZhbHVlIG9mIFguICAqLworX19NQVRIQ0FMTFggKGZhYnMsLCAoX01kb3VibGVfIF9feCksIChfX2NvbnN0X18pKTsKKworLyogTGFyZ2VzdCBpbnRlZ2VyIG5vdCBncmVhdGVyIHRoYW4gWC4gICovCitfX01BVEhDQUxMWCAoZmxvb3IsLCAoX01kb3VibGVfIF9feCksIChfX2NvbnN0X18pKTsKKworLyogRmxvYXRpbmctcG9pbnQgbW9kdWxvIHJlbWFpbmRlciBvZiBYL1kuICAqLworX19NQVRIQ0FMTCAoZm1vZCwsIChfTWRvdWJsZV8gX194LCBfTWRvdWJsZV8gX195KSk7CisKKworLyogUmV0dXJuIDAgaWYgVkFMVUUgaXMgZmluaXRlIG9yIE5hTiwgKzEgaWYgaXQKKyAgIGlzICtJbmZpbml0eSwgLTEgaWYgaXQgaXMgLUluZmluaXR5LiAgKi8KK19fTUFUSERFQ0xfMSAoaW50LF9faXNpbmYsLCAoX01kb3VibGVfIF9fdmFsdWUpKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CisKKy8qIFJldHVybiBub256ZXJvIGlmIFZBTFVFIGlzIGZpbml0ZSBhbmQgbm90IE5hTi4gICovCitfX01BVEhERUNMXzEgKGludCxfX2Zpbml0ZSwsIChfTWRvdWJsZV8gX192YWx1ZSkpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKK19NZG91YmxlX0VORF9OQU1FU1BBQ0UKKworI2lmZGVmIF9fVVNFX01JU0MKKy8qIFJldHVybiAwIGlmIFZBTFVFIGlzIGZpbml0ZSBvciBOYU4sICsxIGlmIGl0CisgICBpcyArSW5maW5pdHksIC0xIGlmIGl0IGlzIC1JbmZpbml0eS4gICovCitfX01BVEhERUNMXzEgKGludCxpc2luZiwsIChfTWRvdWJsZV8gX192YWx1ZSkpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKKworLyogUmV0dXJuIG5vbnplcm8gaWYgVkFMVUUgaXMgZmluaXRlIGFuZCBub3QgTmFOLiAgKi8KK19fTUFUSERFQ0xfMSAoaW50LGZpbml0ZSwsIChfTWRvdWJsZV8gX192YWx1ZSkpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKKworLyogUmV0dXJuIHRoZSByZW1haW5kZXIgb2YgWC9ZLiAgKi8KK19fTUFUSENBTEwgKGRyZW0sLCAoX01kb3VibGVfIF9feCwgX01kb3VibGVfIF9feSkpOworCisKKy8qIFJldHVybiB0aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIFggYWZ0ZXIgZGl2aWRpbmcgb3V0IGBpbG9nYiAoWCknLiAgKi8KK19fTUFUSENBTEwgKHNpZ25pZmljYW5kLCwgKF9NZG91YmxlXyBfX3gpKTsKKyNlbmRpZiAvKiBVc2UgbWlzYy4gICovCisKKyNpZiBkZWZpbmVkIF9fVVNFX01JU0MgfHwgZGVmaW5lZCBfX1VTRV9JU09DOTkKK19fQkVHSU5fTkFNRVNQQUNFX0M5OQorLyogUmV0dXJuIFggd2l0aCBpdHMgc2lnbmVkIGNoYW5nZWQgdG8gWSdzLiAgKi8KK19fTUFUSENBTExYIChjb3B5c2lnbiwsIChfTWRvdWJsZV8gX194LCBfTWRvdWJsZV8gX195KSwgKF9fY29uc3RfXykpOworX19FTkRfTkFNRVNQQUNFX0M5OQorI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9JU09DOTkKK19fQkVHSU5fTkFNRVNQQUNFX0M5OQorLyogUmV0dXJuIHJlcHJlc2VudGF0aW9uIG9mIE5hTiBmb3IgZG91YmxlIHR5cGUuICAqLworX19NQVRIQ0FMTFggKG5hbiwsIChfX2NvbnN0IGNoYXIgKl9fdGFnYiksIChfX2NvbnN0X18pKTsKK19fRU5EX05BTUVTUEFDRV9DOTkKKyNlbmRpZgorCisKKy8qIFJldHVybiBub256ZXJvIGlmIFZBTFVFIGlzIG5vdCBhIG51bWJlci4gICovCitfX01BVEhERUNMXzEgKGludCxfX2lzbmFuLCwgKF9NZG91YmxlXyBfX3ZhbHVlKSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOworCisjaWYgZGVmaW5lZCBfX1VTRV9NSVNDIHx8IGRlZmluZWQgX19VU0VfWE9QRU4KKy8qIFJldHVybiBub256ZXJvIGlmIFZBTFVFIGlzIG5vdCBhIG51bWJlci4gICovCitfX01BVEhERUNMXzEgKGludCxpc25hbiwsIChfTWRvdWJsZV8gX192YWx1ZSkpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKKworLyogQmVzc2VsIGZ1bmN0aW9ucy4gICovCitfX01BVEhDQUxMIChqMCwsIChfTWRvdWJsZV8pKTsKK19fTUFUSENBTEwgKGoxLCwgKF9NZG91YmxlXykpOworX19NQVRIQ0FMTCAoam4sLCAoaW50LCBfTWRvdWJsZV8pKTsKK19fTUFUSENBTEwgKHkwLCwgKF9NZG91YmxlXykpOworX19NQVRIQ0FMTCAoeTEsLCAoX01kb3VibGVfKSk7CitfX01BVEhDQUxMICh5biwsIChpbnQsIF9NZG91YmxlXykpOworI2VuZGlmCisKKworI2lmIGRlZmluZWQgX19VU0VfTUlTQyB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOIHx8IGRlZmluZWQgX19VU0VfSVNPQzk5CitfX0JFR0lOX05BTUVTUEFDRV9DOTkKKy8qIEVycm9yIGFuZCBnYW1tYSBmdW5jdGlvbnMuICAqLworX19NQVRIQ0FMTCAoZXJmLCwgKF9NZG91YmxlXykpOworX19NQVRIQ0FMTCAoZXJmYywsIChfTWRvdWJsZV8pKTsKK19fTUFUSENBTEwgKGxnYW1tYSwsIChfTWRvdWJsZV8pKTsKK19fRU5EX05BTUVTUEFDRV9DOTkKKyNlbmRpZgorCisjaWZkZWYgX19VU0VfSVNPQzk5CitfX0JFR0lOX05BTUVTUEFDRV9DOTkKKy8qIFRydWUgZ2FtbWEgZnVuY3Rpb24uICAqLworX19NQVRIQ0FMTCAodGdhbW1hLCwgKF9NZG91YmxlXykpOworX19FTkRfTkFNRVNQQUNFX0M5OQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIF9fVVNFX01JU0MgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTgorLyogT2Jzb2xldGUgYWxpYXMgZm9yIGBsZ2FtbWEnLiAgKi8KK19fTUFUSENBTEwgKGdhbW1hLCwgKF9NZG91YmxlXykpOworI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9NSVNDCisvKiBSZWVudHJhbnQgdmVyc2lvbiBvZiBsZ2FtbWEuICBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGdsb2JhbCB2YXJpYWJsZQorICAgYHNpZ25nYW0nLiAgVGhlIHJlZW50cmFudCB2ZXJzaW9uIGluc3RlYWQgdGFrZXMgYSBwb2ludGVyIGFuZCBzdG9yZXMKKyAgIHRoZSB2YWx1ZSB0aHJvdWdoIGl0LiAgKi8KK19fTUFUSENBTEwgKGxnYW1tYSxfciwgKF9NZG91YmxlXywgaW50ICpfX3NpZ25nYW1wKSk7CisjZW5kaWYKKworCisjaWYgZGVmaW5lZCBfX1VTRV9NSVNDIHx8IGRlZmluZWQgX19VU0VfWE9QRU5fRVhURU5ERUQgfHwgZGVmaW5lZCBfX1VTRV9JU09DOTkKK19fQkVHSU5fTkFNRVNQQUNFX0M5OQorLyogUmV0dXJuIHRoZSBpbnRlZ2VyIG5lYXJlc3QgWCBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZQorICAgcHJldmFpbGluZyByb3VuZGluZyBtb2RlLiAgKi8KK19fTUFUSENBTEwgKHJpbnQsLCAoX01kb3VibGVfIF9feCkpOworCisvKiBSZXR1cm4gWCArIGVwc2lsb24gaWYgWCA8IFksIFggLSBlcHNpbG9uIGlmIFggPiBZLiAgKi8KK19fTUFUSENBTExYIChuZXh0YWZ0ZXIsLCAoX01kb3VibGVfIF9feCwgX01kb3VibGVfIF9feSksIChfX2NvbnN0X18pKTsKKyMgaWYgZGVmaW5lZCBfX1VTRV9JU09DOTkgJiYgIWRlZmluZWQgX19MREJMX0NPTVBBVAorX19NQVRIQ0FMTFggKG5leHR0b3dhcmQsLCAoX01kb3VibGVfIF9feCwgbG9uZyBkb3VibGUgX195KSwgKF9fY29uc3RfXykpOworIyBlbmRpZgorCisvKiBSZXR1cm4gdGhlIHJlbWFpbmRlciBvZiBpbnRlZ2VyIGRpdmlzb24gWCAvIFkgd2l0aCBpbmZpbml0ZSBwcmVjaXNpb24uICAqLworX19NQVRIQ0FMTCAocmVtYWluZGVyLCwgKF9NZG91YmxlXyBfX3gsIF9NZG91YmxlXyBfX3kpKTsKKworIyBpZiBkZWZpbmVkIF9fVVNFX01JU0MgfHwgZGVmaW5lZCBfX1VTRV9JU09DOTkKKy8qIFJldHVybiBYIHRpbWVzICgyIHRvIHRoZSBOdGggcG93ZXIpLiAgKi8KK19fTUFUSENBTEwgKHNjYWxibiwsIChfTWRvdWJsZV8gX194LCBpbnQgX19uKSk7CisjIGVuZGlmCisKKy8qIFJldHVybiB0aGUgYmluYXJ5IGV4cG9uZW50IG9mIFgsIHdoaWNoIG11c3QgYmUgbm9uemVyby4gICovCitfX01BVEhERUNMIChpbnQsaWxvZ2IsLCAoX01kb3VibGVfIF9feCkpOworI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9JU09DOTkKKy8qIFJldHVybiBYIHRpbWVzICgyIHRvIHRoZSBOdGggcG93ZXIpLiAgKi8KK19fTUFUSENBTEwgKHNjYWxibG4sLCAoX01kb3VibGVfIF9feCwgbG9uZyBpbnQgX19uKSk7CisKKy8qIFJvdW5kIFggdG8gaW50ZWdyYWwgdmFsdWUgaW4gZmxvYXRpbmctcG9pbnQgZm9ybWF0IHVzaW5nIGN1cnJlbnQKKyAgIHJvdW5kaW5nIGRpcmVjdGlvbiwgYnV0IGRvIG5vdCByYWlzZSBpbmV4YWN0IGV4Y2VwdGlvbi4gICovCitfX01BVEhDQUxMIChuZWFyYnlpbnQsLCAoX01kb3VibGVfIF9feCkpOworCisvKiBSb3VuZCBYIHRvIG5lYXJlc3QgaW50ZWdyYWwgdmFsdWUsIHJvdW5kaW5nIGhhbGZ3YXkgY2FzZXMgYXdheSBmcm9tCisgICB6ZXJvLiAgKi8KK19fTUFUSENBTExYIChyb3VuZCwsIChfTWRvdWJsZV8gX194KSwgKF9fY29uc3RfXykpOworCisvKiBSb3VuZCBYIHRvIHRoZSBpbnRlZ3JhbCB2YWx1ZSBpbiBmbG9hdGluZy1wb2ludCBmb3JtYXQgbmVhcmVzdCBidXQKKyAgIG5vdCBsYXJnZXIgaW4gbWFnbml0dWRlLiAgKi8KK19fTUFUSENBTExYICh0cnVuYywsIChfTWRvdWJsZV8gX194KSwgKF9fY29uc3RfXykpOworCisvKiBDb21wdXRlIHJlbWFpbmRlciBvZiBYIGFuZCBZIGFuZCBwdXQgaW4gKlFVTyBhIHZhbHVlIHdpdGggc2lnbiBvZiB4L3kKKyAgIGFuZCBtYWduaXR1ZGUgY29uZ3J1ZW50IGBtb2QgMl5uJyB0byB0aGUgbWFnbml0dWRlIG9mIHRoZSBpbnRlZ3JhbAorICAgcXVvdGllbnQgeC95LCB3aXRoIG4gPj0gMy4gICovCitfX01BVEhDQUxMIChyZW1xdW8sLCAoX01kb3VibGVfIF9feCwgX01kb3VibGVfIF9feSwgaW50ICpfX3F1bykpOworCisKKy8qIENvbnZlcnNpb24gZnVuY3Rpb25zLiAgKi8KKworLyogUm91bmQgWCB0byBuZWFyZXN0IGludGVncmFsIHZhbHVlIGFjY29yZGluZyB0byBjdXJyZW50IHJvdW5kaW5nCisgICBkaXJlY3Rpb24uICAqLworX19NQVRIREVDTCAobG9uZyBpbnQsbHJpbnQsLCAoX01kb3VibGVfIF9feCkpOworX19NQVRIREVDTCAobG9uZyBsb25nIGludCxsbHJpbnQsLCAoX01kb3VibGVfIF9feCkpOworCisvKiBSb3VuZCBYIHRvIG5lYXJlc3QgaW50ZWdyYWwgdmFsdWUsIHJvdW5kaW5nIGhhbGZ3YXkgY2FzZXMgYXdheSBmcm9tCisgICB6ZXJvLiAgKi8KK19fTUFUSERFQ0wgKGxvbmcgaW50LGxyb3VuZCwsIChfTWRvdWJsZV8gX194KSk7CitfX01BVEhERUNMIChsb25nIGxvbmcgaW50LGxscm91bmQsLCAoX01kb3VibGVfIF9feCkpOworCisKKy8qIFJldHVybiBwb3NpdGl2ZSBkaWZmZXJlbmNlIGJldHdlZW4gWCBhbmQgWS4gICovCitfX01BVEhDQUxMIChmZGltLCwgKF9NZG91YmxlXyBfX3gsIF9NZG91YmxlXyBfX3kpKTsKKworLyogUmV0dXJuIG1heGltdW0gbnVtZXJpYyB2YWx1ZSBmcm9tIFggYW5kIFkuICAqLworX19NQVRIQ0FMTCAoZm1heCwsIChfTWRvdWJsZV8gX194LCBfTWRvdWJsZV8gX195KSk7CisKKy8qIFJldHVybiBtaW5pbXVtIG51bWVyaWMgdmFsdWUgZnJvbSBYIGFuZCBZLiAgKi8KK19fTUFUSENBTEwgKGZtaW4sLCAoX01kb3VibGVfIF9feCwgX01kb3VibGVfIF9feSkpOworCisKKy8qIENsYXNzaWZ5IGdpdmVuIG51bWJlci4gICovCitfX01BVEhERUNMXzEgKGludCwgX19mcGNsYXNzaWZ5LCwgKF9NZG91YmxlXyBfX3ZhbHVlKSkKKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOworCisvKiBUZXN0IGZvciBuZWdhdGl2ZSBudW1iZXIuICAqLworX19NQVRIREVDTF8xIChpbnQsIF9fc2lnbmJpdCwsIChfTWRvdWJsZV8gX192YWx1ZSkpCisgICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKKworCisvKiBNdWx0aXBseS1hZGQgZnVuY3Rpb24gY29tcHV0ZWQgYXMgYSB0ZXJuYXJ5IG9wZXJhdGlvbi4gICovCitfX01BVEhDQUxMIChmbWEsLCAoX01kb3VibGVfIF9feCwgX01kb3VibGVfIF9feSwgX01kb3VibGVfIF9feikpOworI2VuZGlmIC8qIFVzZSBJU08gQzk5LiAgKi8KKworI2lmIGRlZmluZWQgX19VU0VfTUlTQyB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOX0VYVEVOREVEIHx8IGRlZmluZWQgX19VU0VfSVNPQzk5CitfX0VORF9OQU1FU1BBQ0VfQzk5CisjZW5kaWYKKworI2lmIGRlZmluZWQgX19VU0VfTUlTQyB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOX0VYVEVOREVECisvKiBSZXR1cm4gWCB0aW1lcyAoMiB0byB0aGUgTnRoIHBvd2VyKS4gICovCitfX01BVEhDQUxMIChzY2FsYiwsIChfTWRvdWJsZV8gX194LCBfTWRvdWJsZV8gX19uKSk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWNhMTEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGRlZi5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwNCwgMjAwNiwgMjAwNworICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZiAhZGVmaW5lZCBfTUFUSF9IICYmICFkZWZpbmVkIF9DT01QTEVYX0gKKyMgZXJyb3IgIk5ldmVyIHVzZSA8Yml0cy9tYXRoZGVmLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxtYXRoLmg+IGluc3RlYWQiCisjZW5kaWYKKworI2lmIGRlZmluZWQgIF9fVVNFX0lTT0M5OSAmJiBkZWZpbmVkIF9NQVRIX0ggJiYgIWRlZmluZWQgX01BVEhfSF9NQVRIREVGCisjIGRlZmluZSBfTUFUSF9IX01BVEhERUYJMQorCisvKiBHQ0MgZG9lcyBub3QgcHJvbW90ZSBgZmxvYXQnIHZhbHVlcyB0byBgZG91YmxlJy4gICovCit0eXBlZGVmIGZsb2F0IGZsb2F0X3Q7CQkvKiBgZmxvYXQnIGV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQgYXMKKwkJCQkgICBgZmxvYXQnLiAgKi8KK3R5cGVkZWYgZG91YmxlIGRvdWJsZV90OwkvKiBgZG91YmxlJyBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIGFzCisJCQkJICAgYGRvdWJsZScuICAqLworCisvKiBUaGUgdmFsdWVzIHJldHVybmVkIGJ5IGBpbG9nYicgZm9yIDAgYW5kIE5hTiByZXNwZWN0aXZlbHkuICAqLworIyBkZWZpbmUgRlBfSUxPR0IwCSgtMjE0NzQ4MzY0NykKKyMgZGVmaW5lIEZQX0lMT0dCTkFOCSgyMTQ3NDgzNjQ3KQorCisjZW5kaWYJLyogSVNPIEM5OSAqLworCisjaWZuZGVmIF9fTk9fTE9OR19ET1VCTEVfTUFUSAorLyogU2lnbmFsIHRoYXQgd2UgZG8gbm90IHJlYWxseSBoYXZlIGEgYGxvbmcgZG91YmxlJy4gIFRoaXMgZGlzYWJsZXMgdGhlCisgICBkZWNsYXJhdGlvbiBvZiBhbGwgdGhlIGBsb25nIGRvdWJsZScgZnVuY3Rpb24gdmFyaWFudHMuICAqLworIyBkZWZpbmUgX19OT19MT05HX0RPVUJMRV9NQVRICTEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZWMyMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgKQEAgLTAsMCArMSwxMiBAQAorLyogVGhpcyBmaWxlIHNob3VsZCBwcm92aWRlIGlubGluZSB2ZXJzaW9ucyBvZiBtYXRoIGZ1bmN0aW9ucy4KKworICAgU3Vycm91bmQgR0NDLXNwZWNpZmljIHBhcnRzIHdpdGggI2lmZGVmIF9fR05VQ19fLCBhbmQgdXNlIGBfX2V4dGVybl9pbmxpbmUnLgorCisgICBUaGlzIGZpbGUgc2hvdWxkIGRlZmluZSBfX01BVEhfSU5MSU5FUyBpZiBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGRlZmluZWQgYXMKKyAgIGlubGluZXMuICAqLworCisjaWYgIWRlZmluZWQgX19OT19NQVRIX0lOTElORVMgJiYgZGVmaW5lZCBfX09QVElNSVpFX18KKworLyogSGVyZSBnb2VzIHRoZSByZWFsIGNvZGUuICAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL21tYW4uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL21tYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjhlYzk0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvbW1hbi5oCkBAIC0wLDAgKzEsMTAzIEBACisvKiBEZWZpbml0aW9ucyBmb3IgUE9TSVggbWVtb3J5IG1hcCBpbnRlcmZhY2UuICBMaW51eC9BUk0gdmVyc2lvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5NywgMjAwMCwgMjAwMywgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfU1lTX01NQU5fSAorIyBlcnJvciAiTmV2ZXIgdXNlIDxiaXRzL21tYW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPHN5cy9tbWFuLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKy8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgYmFzaWNhbGx5IGNvbWUgZnJvbSB0aGUga2VybmVsIGhlYWRlcnMuCisgICBCdXQgdGhlIGtlcm5lbCBoZWFkZXIgaXMgbm90IG5hbWVzcGFjZSBjbGVhbi4gICovCisKKworLyogUHJvdGVjdGlvbnMgYXJlIGNob3NlbiBmcm9tIHRoZXNlIGJpdHMsIE9SJ2QgdG9nZXRoZXIuICBUaGUKKyAgIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHN1cHBvcnQgUFJPVF9FWEVDIG9yIFBST1RfV1JJVEUKKyAgIHdpdGhvdXQgUFJPVF9SRUFELiAgVGhlIG9ubHkgZ3VhcmFudGVlcyBhcmUgdGhhdCBubyB3cml0aW5nIHdpbGwgYmUKKyAgIGFsbG93ZWQgd2l0aG91dCBQUk9UX1dSSVRFIGFuZCBubyBhY2Nlc3Mgd2lsbCBiZSBhbGxvd2VkIGZvciBQUk9UX05PTkUuICovCisKKyNkZWZpbmUgUFJPVF9SRUFECTB4MQkJLyogUGFnZSBjYW4gYmUgcmVhZC4gICovCisjZGVmaW5lIFBST1RfV1JJVEUJMHgyCQkvKiBQYWdlIGNhbiBiZSB3cml0dGVuLiAgKi8KKyNkZWZpbmUgUFJPVF9FWEVDCTB4NAkJLyogUGFnZSBjYW4gYmUgZXhlY3V0ZWQuICAqLworI2RlZmluZSBQUk9UX05PTkUJMHgwCQkvKiBQYWdlIGNhbiBub3QgYmUgYWNjZXNzZWQuICAqLworI2RlZmluZSBQUk9UX0dST1dTRE9XTgkweDAxMDAwMDAwCS8qIEV4dGVuZCBjaGFuZ2UgdG8gc3RhcnQgb2YKKwkJCQkJICAgZ3Jvd3Nkb3duIHZtYSAobXByb3RlY3Qgb25seSkuICAqLworI2RlZmluZSBQUk9UX0dST1dTVVAJMHgwMjAwMDAwMAkvKiBFeHRlbmQgY2hhbmdlIHRvIHN0YXJ0IG9mCisJCQkJCSAgIGdyb3dzdXAgdm1hIChtcHJvdGVjdCBvbmx5KS4gICovCisKKy8qIFNoYXJpbmcgdHlwZXMgKG11c3QgY2hvb3NlIG9uZSBhbmQgb25seSBvbmUgb2YgdGhlc2UpLiAgKi8KKyNkZWZpbmUgTUFQX1NIQVJFRAkweDAxCQkvKiBTaGFyZSBjaGFuZ2VzLiAgKi8KKyNkZWZpbmUgTUFQX1BSSVZBVEUJMHgwMgkJLyogQ2hhbmdlcyBhcmUgcHJpdmF0ZS4gICovCisjaWZkZWYgX19VU0VfTUlTQworIyBkZWZpbmUgTUFQX1RZUEUJMHgwZgkJLyogTWFzayBmb3IgdHlwZSBvZiBtYXBwaW5nLiAgKi8KKyNlbmRpZgorCisvKiBPdGhlciBmbGFncy4gICovCisjZGVmaW5lIE1BUF9GSVhFRAkweDEwCQkvKiBJbnRlcnByZXQgYWRkciBleGFjdGx5LiAgKi8KKyNpZmRlZiBfX1VTRV9NSVNDCisjIGRlZmluZSBNQVBfRklMRQkwCisjIGRlZmluZSBNQVBfQU5PTllNT1VTCTB4MjAJCS8qIERvbid0IHVzZSBhIGZpbGUuICAqLworIyBkZWZpbmUgTUFQX0FOT04JTUFQX0FOT05ZTU9VUworI2VuZGlmCisKKy8qIFRoZXNlIGFyZSBMaW51eC1zcGVjaWZpYy4gICovCisjaWZkZWYgX19VU0VfTUlTQworIyBkZWZpbmUgTUFQX0dST1dTRE9XTgkweDAwMTAwCQkvKiBTdGFjay1saWtlIHNlZ21lbnQuICAqLworIyBkZWZpbmUgTUFQX0RFTllXUklURQkweDAwODAwCQkvKiBFVFhUQlNZICovCisjIGRlZmluZSBNQVBfRVhFQ1VUQUJMRQkweDAxMDAwCQkvKiBNYXJrIGl0IGFzIGFuIGV4ZWN1dGFibGUuICAqLworIyBkZWZpbmUgTUFQX0xPQ0tFRAkweDAyMDAwCQkvKiBMb2NrIHRoZSBtYXBwaW5nLiAgKi8KKyMgZGVmaW5lIE1BUF9OT1JFU0VSVkUJMHgwNDAwMAkJLyogRG9uJ3QgY2hlY2sgZm9yIHJlc2VydmF0aW9ucy4gICovCisjIGRlZmluZSBNQVBfUE9QVUxBVEUJMHgwODAwMAkJLyogUG9wdWxhdGUgKHByZWZhdWx0KSBwYWdldGFibGVzLiAgKi8KKyMgZGVmaW5lIE1BUF9OT05CTE9DSwkweDEwMDAwCQkvKiBEbyBub3QgYmxvY2sgb24gSU8uICAqLworI2VuZGlmCisKKy8qIEZsYWdzIHRvIGBtc3luYycuICAqLworI2RlZmluZSBNU19BU1lOQwkxCQkvKiBTeW5jIG1lbW9yeSBhc3luY2hyb25vdXNseS4gICovCisjZGVmaW5lIE1TX1NZTkMJCTQJCS8qIFN5bmNocm9ub3VzIG1lbW9yeSBzeW5jLiAgKi8KKyNkZWZpbmUgTVNfSU5WQUxJREFURQkyCQkvKiBJbnZhbGlkYXRlIHRoZSBjYWNoZXMuICAqLworCisvKiBGbGFncyBmb3IgYG1sb2NrYWxsJy4gICovCisjZGVmaW5lIE1DTF9DVVJSRU5UCTEJCS8qIExvY2sgYWxsIGN1cnJlbnRseSBtYXBwZWQgcGFnZXMuICAqLworI2RlZmluZSBNQ0xfRlVUVVJFCTIJCS8qIExvY2sgYWxsIGFkZGl0aW9ucyB0byBhZGRyZXNzCisJCQkJCSAgIHNwYWNlLiAgKi8KKworLyogRmxhZ3MgZm9yIGBtcmVtYXAnLiAgKi8KKyNpZmRlZiBfX1VTRV9HTlUKKyMgZGVmaW5lIE1SRU1BUF9NQVlNT1ZFCTEKKyMgZGVmaW5lIE1SRU1BUF9GSVhFRAkyCisjZW5kaWYKKworLyogQWR2aWNlIHRvIGBtYWR2aXNlJy4gICovCisjaWZkZWYgX19VU0VfQlNECisjIGRlZmluZSBNQURWX05PUk1BTAkgMAkvKiBObyBmdXJ0aGVyIHNwZWNpYWwgdHJlYXRtZW50LiAgKi8KKyMgZGVmaW5lIE1BRFZfUkFORE9NCSAxCS8qIEV4cGVjdCByYW5kb20gcGFnZSByZWZlcmVuY2VzLiAgKi8KKyMgZGVmaW5lIE1BRFZfU0VRVUVOVElBTCAyCS8qIEV4cGVjdCBzZXF1ZW50aWFsIHBhZ2UgcmVmZXJlbmNlcy4gICovCisjIGRlZmluZSBNQURWX1dJTExORUVECSAzCS8qIFdpbGwgbmVlZCB0aGVzZSBwYWdlcy4gICovCisjIGRlZmluZSBNQURWX0RPTlRORUVECSA0CS8qIERvbid0IG5lZWQgdGhlc2UgcGFnZXMuICAqLworIyBkZWZpbmUgTUFEVl9SRU1PVkUJIDkJLyogUmVtb3ZlIHRoZXNlIHBhZ2VzIGFuZCByZXNvdXJjZXMuICAqLworIyBkZWZpbmUgTUFEVl9ET05URk9SSwkgMTAJLyogRG8gbm90IGluaGVyaXQgYWNyb3NzIGZvcmsuICAqLworIyBkZWZpbmUgTUFEVl9ET0ZPUksJIDExCS8qIERvIGluaGVyaXQgYWNyb3NzIGZvcmsuICAqLworI2VuZGlmCisKKy8qIFRoZSBQT1NJWCBwZW9wbGUgaGFkIHRvIGludmVudCBzaW1pbGFyIG5hbWVzIGZvciB0aGUgc2FtZSB0aGluZ3MuICAqLworI2lmZGVmIF9fVVNFX1hPUEVOMksKKyMgZGVmaW5lIFBPU0lYX01BRFZfTk9STUFMCTAgLyogTm8gZnVydGhlciBzcGVjaWFsIHRyZWF0bWVudC4gICovCisjIGRlZmluZSBQT1NJWF9NQURWX1JBTkRPTQkxIC8qIEV4cGVjdCByYW5kb20gcGFnZSByZWZlcmVuY2VzLiAgKi8KKyMgZGVmaW5lIFBPU0lYX01BRFZfU0VRVUVOVElBTAkyIC8qIEV4cGVjdCBzZXF1ZW50aWFsIHBhZ2UgcmVmZXJlbmNlcy4gICovCisjIGRlZmluZSBQT1NJWF9NQURWX1dJTExORUVECTMgLyogV2lsbCBuZWVkIHRoZXNlIHBhZ2VzLiAgKi8KKyMgZGVmaW5lIFBPU0lYX01BRFZfRE9OVE5FRUQJNCAvKiBEb24ndCBuZWVkIHRoZXNlIHBhZ2VzLiAgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvbW9uZXRhcnktbGRibC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvbW9uZXRhcnktbGRibC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMDgwZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9tb25ldGFyeS1sZGJsLmgKQEAgLTAsMCArMSwyOCBAQAorLyogLW1sb25nLWRvdWJsZS02NCBjb21wYXRpYmlsaXR5IG1vZGUgZm9yIG1vbmV0YXJ5IGZ1bmN0aW9ucy4KKyAgIENvcHlyaWdodCAoQykgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfTU9ORVRBUllfSAorIyBlcnJvciAiTmV2ZXIgaW5jbHVkZSA8Yml0cy9tb25ldGFyeS1sZGJsLmg+IGRpcmVjdGx5OyB1c2UgPG1vbmV0YXJ5Lmg+IGluc3RlYWQuIgorI2VuZGlmCisKK19fTERCTF9SRURJUl9ERUNMIChzdHJmbW9uKQorCisjaWZkZWYgX19VU0VfR05VCitfX0xEQkxfUkVESVJfREVDTCAoc3RyZm1vbl9sKQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9tcXVldWUuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL21xdWV1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNTI4ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9tcXVldWUuaApAQCAtMCwwICsxLDMyIEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX01RVUVVRV9ICisjIGVycm9yICJOZXZlciB1c2UgPGJpdHMvbXF1ZXVlLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxtcXVldWUuaD4gaW5zdGVhZC4iCisjZW5kaWYKKwordHlwZWRlZiBpbnQgbXFkX3Q7CisKK3N0cnVjdCBtcV9hdHRyCit7CisgIGxvbmcgaW50IG1xX2ZsYWdzOwkvKiBNZXNzYWdlIHF1ZXVlIGZsYWdzLiAgKi8KKyAgbG9uZyBpbnQgbXFfbWF4bXNnOwkvKiBNYXhpbXVtIG51bWJlciBvZiBtZXNzYWdlcy4gICovCisgIGxvbmcgaW50IG1xX21zZ3NpemU7CS8qIE1heGltdW0gbWVzc2FnZSBzaXplLiAgKi8KKyAgbG9uZyBpbnQgbXFfY3VybXNnczsJLyogTnVtYmVyIG9mIG1lc3NhZ2VzIGN1cnJlbnRseSBxdWV1ZWQuICAqLworICBsb25nIGludCBfX3BhZFs0XTsKK307CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9tcXVldWUyLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9tcXVldWUyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM5MDYwOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL21xdWV1ZTIuaApAQCAtMCwwICsxLDU2IEBACisvKiBDaGVja2luZyBtYWNyb3MgZm9yIG1xIGZ1bmN0aW9ucy4KKyAgIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZglfRkNOVExfSAorIyBlcnJvciAiTmV2ZXIgaW5jbHVkZSA8Yml0cy9tcXVldWUyLmg+IGRpcmVjdGx5OyB1c2UgPG1xdWV1ZS5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisvKiBDaGVjayB0aGF0IGNhbGxzIHRvIG1xX29wZW4gd2l0aCBPX0NSRUFUIHNldCBoYXZlIGFuIGFwcHJvcHJpYXRlIHRoaXJkIGFuZCBmb3VydGgKKyAgIHBhcmFtZXRlci4gICovCitleHRlcm4gbXFkX3QgbXFfb3BlbiAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX29mbGFnLCAuLi4pCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpOworZXh0ZXJuIG1xZF90IF9fbXFfb3Blbl8yIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgaW50IF9fb2ZsYWcpIF9fbm9ubnVsbCAoKDEpKTsKK2V4dGVybiBtcWRfdCBfX1JFRElSRUNUIChfX21xX29wZW5fYWxpYXMsIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgaW50IF9fb2ZsYWcsIC4uLiksCisJCQkgbXFfb3BlbikgX19ub25udWxsICgoMSkpOworX19lcnJvcmRlY2wgKF9fbXFfb3Blbl93cm9uZ19udW1iZXJfb2ZfYXJncywKKwkgICAgICJtcV9vcGVuIGNhbiBiZSBjYWxsZWQgZWl0aGVyIHdpdGggMiBvciA0IGFyZ3VtZW50cyIpOworX19lcnJvcmRlY2wgKF9fbXFfb3Blbl9taXNzaW5nX21vZGVfYW5kX2F0dHIsCisJICAgICAibXFfb3BlbiB3aXRoIE9fQ1JFQVQgaW4gc2Vjb25kIGFyZ3VtZW50IG5lZWRzIDQgYXJndW1lbnRzIik7CisKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgbXFkX3QKK21xX29wZW4gKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX19vZmxhZywgLi4uKQoreworICBpZiAoX192YV9hcmdfcGFja19sZW4gKCkgIT0gMCAmJiBfX3ZhX2FyZ19wYWNrX2xlbiAoKSAhPSAyKQorICAgIF9fbXFfb3Blbl93cm9uZ19udW1iZXJfb2ZfYXJncyAoKTsKKworICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKF9fb2ZsYWcpKQorICAgIHsKKyAgICAgIGlmICgoX19vZmxhZyAmIE9fQ1JFQVQpICE9IDAgJiYgX192YV9hcmdfcGFja19sZW4gKCkgPT0gMCkKKwl7CisJICBfX21xX29wZW5fbWlzc2luZ19tb2RlX2FuZF9hdHRyICgpOworCSAgcmV0dXJuIF9fbXFfb3Blbl8yIChfX25hbWUsIF9fb2ZsYWcpOworCX0KKyAgICAgIHJldHVybiBfX21xX29wZW5fYWxpYXMgKF9fbmFtZSwgX19vZmxhZywgX192YV9hcmdfcGFjayAoKSk7CisgICAgfQorCisgIGlmIChfX3ZhX2FyZ19wYWNrX2xlbiAoKSA9PSAwKQorICAgIHJldHVybiBfX21xX29wZW5fMiAoX19uYW1lLCBfX29mbGFnKTsKKworICByZXR1cm4gX19tcV9vcGVuX2FsaWFzIChfX25hbWUsIF9fb2ZsYWcsIF9fdmFfYXJnX3BhY2sgKCkpOworfQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvbXNxLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9tc3EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmE0OWI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvbXNxLmgKQEAgLTAsMCArMSw3NyBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3LCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9TWVNfTVNHX0gKKyMgZXJyb3IgIk5ldmVyIHVzZSA8Yml0cy9tc3EuaD4gZGlyZWN0bHk7IGluY2x1ZGUgPHN5cy9tc2cuaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2luY2x1ZGUgPGJpdHMvdHlwZXMuaD4KKworLyogRGVmaW5lIG9wdGlvbnMgZm9yIG1lc3NhZ2UgcXVldWUgZnVuY3Rpb25zLiAgKi8KKyNkZWZpbmUgTVNHX05PRVJST1IJMDEwMDAwCS8qIG5vIGVycm9yIGlmIG1lc3NhZ2UgaXMgdG9vIGJpZyAqLworI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgTVNHX0VYQ0VQVAkwMjAwMDAJLyogcmVjdiBhbnkgbXNnIGV4Y2VwdCBvZiBzcGVjaWZpZWQgdHlwZSAqLworI2VuZGlmCisKKy8qIFR5cGVzIHVzZWQgaW4gdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uLiAgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgbXNncW51bV90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBtc2dsZW5fdDsKKworCisvKiBTdHJ1Y3R1cmUgb2YgcmVjb3JkIGZvciBvbmUgbWVzc2FnZSBpbnNpZGUgdGhlIGtlcm5lbC4KKyAgIFRoZSB0eXBlIGBzdHJ1Y3QgbXNnJyBpcyBvcGFxdWUuICAqLworc3RydWN0IG1zcWlkX2RzCit7CisgIHN0cnVjdCBpcGNfcGVybSBtc2dfcGVybTsJLyogc3RydWN0dXJlIGRlc2NyaWJpbmcgb3BlcmF0aW9uIHBlcm1pc3Npb24gKi8KKyAgX190aW1lX3QgbXNnX3N0aW1lOwkJLyogdGltZSBvZiBsYXN0IG1zZ3NuZCBjb21tYW5kICovCisgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMTsKKyAgX190aW1lX3QgbXNnX3J0aW1lOwkJLyogdGltZSBvZiBsYXN0IG1zZ3JjdiBjb21tYW5kICovCisgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMjsKKyAgX190aW1lX3QgbXNnX2N0aW1lOwkJLyogdGltZSBvZiBsYXN0IGNoYW5nZSAqLworICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDM7CisgIHVuc2lnbmVkIGxvbmcgaW50IF9fbXNnX2NieXRlczsgLyogY3VycmVudCBudW1iZXIgb2YgYnl0ZXMgb24gcXVldWUgKi8KKyAgbXNncW51bV90IG1zZ19xbnVtOwkJLyogbnVtYmVyIG9mIG1lc3NhZ2VzIGN1cnJlbnRseSBvbiBxdWV1ZSAqLworICBtc2dsZW5fdCBtc2dfcWJ5dGVzOwkJLyogbWF4IG51bWJlciBvZiBieXRlcyBhbGxvd2VkIG9uIHF1ZXVlICovCisgIF9fcGlkX3QgbXNnX2xzcGlkOwkJLyogcGlkIG9mIGxhc3QgbXNnc25kKCkgKi8KKyAgX19waWRfdCBtc2dfbHJwaWQ7CQkvKiBwaWQgb2YgbGFzdCBtc2dyY3YoKSAqLworICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDQ7CisgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkNTsKK307CisKKyNpZmRlZiBfX1VTRV9NSVNDCisKKyMgZGVmaW5lIG1zZ19jYnl0ZXMJX19tc2dfY2J5dGVzCisKKy8qIGlwY3MgY3RsIGNvbW1hbmRzICovCisjIGRlZmluZSBNU0dfU1RBVCAxMQorIyBkZWZpbmUgTVNHX0lORk8gMTIKKworLyogYnVmZmVyIGZvciBtc2djdGwgY2FsbHMgSVBDX0lORk8sIE1TR19JTkZPICovCitzdHJ1Y3QgbXNnaW5mbworICB7CisgICAgaW50IG1zZ3Bvb2w7CisgICAgaW50IG1zZ21hcDsKKyAgICBpbnQgbXNnbWF4OworICAgIGludCBtc2dtbmI7CisgICAgaW50IG1zZ21uaTsKKyAgICBpbnQgbXNnc3N6OworICAgIGludCBtc2d0cWw7CisgICAgdW5zaWduZWQgc2hvcnQgaW50IG1zZ3NlZzsKKyAgfTsKKworI2VuZGlmIC8qIF9fVVNFX01JU0MgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL25hbi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvbmFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFlOTdmMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL25hbi5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qIGBOQU4nIGNvbnN0YW50IGZvciBJRUVFIDc1NCBtYWNoaW5lcy4KKyAgIENvcHlyaWdodCAoQykgMTk5MiwxOTk2LDE5OTcsMTk5OSwyMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX01BVEhfSAorIyBlcnJvciAiTmV2ZXIgdXNlIDxiaXRzL25hbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8bWF0aC5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisKKy8qIElFRUUgTm90IEEgTnVtYmVyLiAgKi8KKworI2lmIF9fR05VQ19QUkVSRVEoMywzKQorCisjIGRlZmluZSBOQU4JKF9fYnVpbHRpbl9uYW5mICgiIikpCisKKyNlbGlmIGRlZmluZWQgX19HTlVDX18KKworIyBkZWZpbmUgTkFOIFwKKyAgKF9fZXh0ZW5zaW9uX18JCQkJCQkJICAgICAgXAorICAgKCh1bmlvbiB7IHVuc2lnbmVkIF9fbCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsgZmxvYXQgX19kOyB9KSAgXAorICAgIHsgX19sOiAweDdmYzAwMDAwVUwgfSkuX19kKQorCisjZWxzZQorCisjIGluY2x1ZGUgPGVuZGlhbi5oPgorCisjIGlmIF9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4KKyMgIGRlZmluZSBfX25hbl9ieXRlcwkJeyAweDdmLCAweGMwLCAwLCAwIH0KKyMgZW5kaWYKKyMgaWYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTgorIyAgZGVmaW5lIF9fbmFuX2J5dGVzCQl7IDAsIDAsIDB4YzAsIDB4N2YgfQorIyBlbmRpZgorCitzdGF0aWMgdW5pb24geyB1bnNpZ25lZCBjaGFyIF9fY1s0XTsgZmxvYXQgX19kOyB9IF9fbmFuX3VuaW9uCisgICAgX19hdHRyaWJ1dGVfdXNlZF9fID0geyBfX25hbl9ieXRlcyB9OworIyBkZWZpbmUgTkFOCShfX25hbl91bmlvbi5fX2QpCisKKyNlbmRpZgkvKiBHQ0MuICAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvbmV0ZGIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL25ldGRiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFkYzczMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL25ldGRiLmgKQEAgLTAsMCArMSwzMyBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9ORVREQl9ICisjIGVycm9yICJOZXZlciBpbmNsdWRlIDxiaXRzL25ldGRiLmg+IGRpcmVjdGx5OyB1c2UgPG5ldGRiLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKworLyogRGVzY3JpcHRpb24gb2YgZGF0YSBiYXNlIGVudHJ5IGZvciBhIHNpbmdsZSBuZXR3b3JrLiAgTk9URTogaGVyZSBhCisgICBwb29yIGFzc3VtcHRpb24gaXMgbWFkZS4gIFRoZSBuZXR3b3JrIG51bWJlciBpcyBleHBlY3RlZCB0byBmaXQKKyAgIGludG8gYW4gdW5zaWduZWQgbG9uZyBpbnQgdmFyaWFibGUuICAqLworc3RydWN0IG5ldGVudAoreworICBjaGFyICpuX25hbWU7CQkJLyogT2ZmaWNpYWwgbmFtZSBvZiBuZXR3b3JrLiAgKi8KKyAgY2hhciAqKm5fYWxpYXNlczsJCS8qIEFsaWFzIGxpc3QuICAqLworICBpbnQgbl9hZGRydHlwZTsJCS8qIE5ldCBhZGRyZXNzIHR5cGUuICAqLworICB1aW50MzJfdCBuX25ldDsJCS8qIE5ldHdvcmsgbnVtYmVyLiAgKi8KK307CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9wb2xsLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9wb2xsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc5OTZiNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3BvbGwuaApAQCAtMCwwICsxLDUwIEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDIwMDEsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1NZU19QT0xMX0gKKyMgZXJyb3IgIk5ldmVyIHVzZSA8Yml0cy9wb2xsLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxzeXMvcG9sbC5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisvKiBFdmVudCB0eXBlcyB0aGF0IGNhbiBiZSBwb2xsZWQgZm9yLiAgVGhlc2UgYml0cyBtYXkgYmUgc2V0IGluIGBldmVudHMnCisgICB0byBpbmRpY2F0ZSB0aGUgaW50ZXJlc3RpbmcgZXZlbnQgdHlwZXM7IHRoZXkgd2lsbCBhcHBlYXIgaW4gYHJldmVudHMnCisgICB0byBpbmRpY2F0ZSB0aGUgc3RhdHVzIG9mIHRoZSBmaWxlIGRlc2NyaXB0b3IuICAqLworI2RlZmluZSBQT0xMSU4JCTB4MDAxCQkvKiBUaGVyZSBpcyBkYXRhIHRvIHJlYWQuICAqLworI2RlZmluZSBQT0xMUFJJCQkweDAwMgkJLyogVGhlcmUgaXMgdXJnZW50IGRhdGEgdG8gcmVhZC4gICovCisjZGVmaW5lIFBPTExPVVQJCTB4MDA0CQkvKiBXcml0aW5nIG5vdyB3aWxsIG5vdCBibG9jay4gICovCisKKyNpZmRlZiBfX1VTRV9YT1BFTgorLyogVGhlc2UgdmFsdWVzIGFyZSBkZWZpbmVkIGluIFhQRzQuMi4gICovCisjIGRlZmluZSBQT0xMUkROT1JNCTB4MDQwCQkvKiBOb3JtYWwgZGF0YSBtYXkgYmUgcmVhZC4gICovCisjIGRlZmluZSBQT0xMUkRCQU5ECTB4MDgwCQkvKiBQcmlvcml0eSBkYXRhIG1heSBiZSByZWFkLiAgKi8KKyMgZGVmaW5lIFBPTExXUk5PUk0JMHgxMDAJCS8qIFdyaXRpbmcgbm93IHdpbGwgbm90IGJsb2NrLiAgKi8KKyMgZGVmaW5lIFBPTExXUkJBTkQJMHgyMDAJCS8qIFByaW9yaXR5IGRhdGEgbWF5IGJlIHdyaXR0ZW4uICAqLworI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIFRoZXNlIGFyZSBleHRlbnNpb25zIGZvciBMaW51eC4gICovCisjIGRlZmluZSBQT0xMTVNHCTB4NDAwCisjIGRlZmluZSBQT0xMUkVNT1ZFCTB4MTAwMAorIyBkZWZpbmUgUE9MTFJESFVQCTB4MjAwMAorI2VuZGlmCisKKy8qIEV2ZW50IHR5cGVzIGFsd2F5cyBpbXBsaWNpdGx5IHBvbGxlZCBmb3IuICBUaGVzZSBiaXRzIG5lZWQgbm90IGJlIHNldCBpbgorICAgYGV2ZW50cycsIGJ1dCB0aGV5IHdpbGwgYXBwZWFyIGluIGByZXZlbnRzJyB0byBpbmRpY2F0ZSB0aGUgc3RhdHVzIG9mCisgICB0aGUgZmlsZSBkZXNjcmlwdG9yLiAgKi8KKyNkZWZpbmUgUE9MTEVSUgkJMHgwMDgJCS8qIEVycm9yIGNvbmRpdGlvbi4gICovCisjZGVmaW5lIFBPTExIVVAJCTB4MDEwCQkvKiBIdW5nIHVwLiAgKi8KKyNkZWZpbmUgUE9MTE5WQUwJMHgwMjAJCS8qIEludmFsaWQgcG9sbGluZyByZXF1ZXN0LiAgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWM1OGY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oCkBAIC0wLDAgKzEsMTY4IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5Myw5Niw5OCwyMDAwLTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyoKKyAqCVBPU0lYIFN0YW5kYXJkOiAyLjkuMiBNaW5pbXVtIFZhbHVlcwlBZGRlZCB0byA8bGltaXRzLmg+CisgKgorICoJTmV2ZXIgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHk7IHVzZSA8bGltaXRzLmg+IGluc3RlYWQuCisgKi8KKworI2lmbmRlZglfQklUU19QT1NJWDFfTElNX0gKKyNkZWZpbmUJX0JJVFNfUE9TSVgxX0xJTV9ICTEKKworCisvKiBUaGVzZSBhcmUgdGhlIHN0YW5kYXJkLW1hbmRhdGVkIG1pbmltdW0gdmFsdWVzLiAgKi8KKworLyogTWluaW11bSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBpbiBvbmUgbGlzdCBJL08gY2FsbC4gICovCisjZGVmaW5lIF9QT1NJWF9BSU9fTElTVElPX01BWAkyCisKKy8qIE1pbmltYWwgbnVtYmVyIG9mIG91dHN0YW5kaW5nIGFzeW5jaHJvbm91cyBJL08gb3BlcmF0aW9ucy4gICovCisjZGVmaW5lIF9QT1NJWF9BSU9fTUFYCQkxCisKKy8qIE1heGltdW0gbGVuZ3RoIG9mIGFyZ3VtZW50cyB0byBgZXhlY3ZlJywgaW5jbHVkaW5nIGVudmlyb25tZW50LiAgKi8KKyNkZWZpbmUJX1BPU0lYX0FSR19NQVgJCTQwOTYKKworLyogTWF4aW11bSBzaW11bHRhbmVvdXMgcHJvY2Vzc2VzIHBlciByZWFsIHVzZXIgSUQuICAqLworI2lmZGVmIF9fVVNFX1hPUEVOMksKKyMgZGVmaW5lIF9QT1NJWF9DSElMRF9NQVgJMjUKKyNlbHNlCisjIGRlZmluZSBfUE9TSVhfQ0hJTERfTUFYCTYKKyNlbmRpZgorCisvKiBNaW5pbWFsIG51bWJlciBvZiB0aW1lciBleHBpcmF0aW9uIG92ZXJydW5zLiAgKi8KKyNkZWZpbmUgX1BPU0lYX0RFTEFZVElNRVJfTUFYCTMyCisKKy8qIE1heGltdW0gbGVuZ3RoIG9mIGEgaG9zdCBuYW1lIChub3QgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsKQorICAgYXMgcmV0dXJuZWQgZnJvbSB0aGUgR0VUSE9TVE5BTUUgZnVuY3Rpb24uICAqLworI2RlZmluZSBfUE9TSVhfSE9TVF9OQU1FX01BWAkyNTUKKworLyogTWF4aW11bSBsaW5rIGNvdW50IG9mIGEgZmlsZS4gICovCisjZGVmaW5lCV9QT1NJWF9MSU5LX01BWAkJOAorCisvKiBNYXhpbXVtIGxlbmd0aCBvZiBsb2dpbiBuYW1lLiAgKi8KKyNkZWZpbmUJX1BPU0lYX0xPR0lOX05BTUVfTUFYCTkKKworLyogTnVtYmVyIG9mIGJ5dGVzIGluIGEgdGVybWluYWwgY2Fub25pY2FsIGlucHV0IHF1ZXVlLiAgKi8KKyNkZWZpbmUJX1BPU0lYX01BWF9DQU5PTgkyNTUKKworLyogTnVtYmVyIG9mIGJ5dGVzIGZvciB3aGljaCBzcGFjZSB3aWxsIGJlCisgICBhdmFpbGFibGUgaW4gYSB0ZXJtaW5hbCBpbnB1dCBxdWV1ZS4gICovCisjZGVmaW5lCV9QT1NJWF9NQVhfSU5QVVQJMjU1CisKKy8qIE1heGltdW0gbnVtYmVyIG9mIG1lc3NhZ2UgcXVldWVzIG9wZW4gZm9yIGEgcHJvY2Vzcy4gICovCisjZGVmaW5lIF9QT1NJWF9NUV9PUEVOX01BWAk4CisKKy8qIE1heGltdW0gbnVtYmVyIG9mIHN1cHBvcnRlZCBtZXNzYWdlIHByaW9yaXRpZXMuICAqLworI2RlZmluZSBfUE9TSVhfTVFfUFJJT19NQVgJMzIKKworLyogTnVtYmVyIG9mIGJ5dGVzIGluIGEgZmlsZW5hbWUuICAqLworI2RlZmluZQlfUE9TSVhfTkFNRV9NQVgJCTE0CisKKy8qIE51bWJlciBvZiBzaW11bHRhbmVvdXMgc3VwcGxlbWVudGFyeSBncm91cCBJRHMgcGVyIHByb2Nlc3MuICAqLworI2lmZGVmIF9fVVNFX1hPUEVOMksKKyMgZGVmaW5lIF9QT1NJWF9OR1JPVVBTX01BWAk4CisjZWxzZQorIyBkZWZpbmUgX1BPU0lYX05HUk9VUFNfTUFYCTAKKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgZmlsZXMgb25lIHByb2Nlc3MgY2FuIGhhdmUgb3BlbiBhdCBvbmNlLiAgKi8KKyNpZmRlZiBfX1VTRV9YT1BFTjJLCisjIGRlZmluZSBfUE9TSVhfT1BFTl9NQVgJMjAKKyNlbHNlCisjIGRlZmluZSBfUE9TSVhfT1BFTl9NQVgJMTYKKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgZGVzY3JpcHRvcnMgdGhhdCBhIHByb2Nlc3MgbWF5IGV4YW1pbmUgd2l0aCBgcHNlbGVjdCcgb3IKKyAgIGBzZWxlY3QnLiAgKi8KKyNkZWZpbmUJX1BPU0lYX0ZEX1NFVFNJWkUJX1BPU0lYX09QRU5fTUFYCisKKy8qIE51bWJlciBvZiBieXRlcyBpbiBhIHBhdGhuYW1lLiAgKi8KKyNkZWZpbmUJX1BPU0lYX1BBVEhfTUFYCQkyNTYKKworLyogTnVtYmVyIG9mIGJ5dGVzIHRoYW4gY2FuIGJlIHdyaXR0ZW4gYXRvbWljYWxseSB0byBhIHBpcGUuICAqLworI2RlZmluZQlfUE9TSVhfUElQRV9CVUYJCTUxMgorCisvKiBUaGUgbnVtYmVyIG9mIHJlcGVhdGVkIG9jY3VycmVuY2VzIG9mIGEgQlJFIHBlcm1pdHRlZCBieSB0aGUKKyAgIFJFR0VYRUMgYW5kIFJFR0NPTVAgZnVuY3Rpb25zIHdoZW4gdXNpbmcgdGhlIGludGVydmFsIG5vdGF0aW9uLiAgKi8KKyNkZWZpbmUgX1BPU0lYX1JFX0RVUF9NQVgJMjU1CisKKy8qIE1pbmltYWwgbnVtYmVyIG9mIHJlYWx0aW1lIHNpZ25hbHMgcmVzZXJ2ZWQgZm9yIHRoZSBhcHBsaWNhdGlvbi4gICovCisjZGVmaW5lIF9QT1NJWF9SVFNJR19NQVgJOAorCisvKiBOdW1iZXIgb2Ygc2VtYXBob3JlcyBhIHByb2Nlc3MgY2FuIGhhdmUuICAqLworI2RlZmluZSBfUE9TSVhfU0VNX05TRU1TX01BWAkyNTYKKworLyogTWF4aW1hbCB2YWx1ZSBvZiBhIHNlbWFwaG9yZS4gICovCisjZGVmaW5lIF9QT1NJWF9TRU1fVkFMVUVfTUFYCTMyNzY3CisKKy8qIE51bWJlciBvZiBwZW5kaW5nIHJlYWx0aW1lIHNpZ25hbHMuICAqLworI2RlZmluZSBfUE9TSVhfU0lHUVVFVUVfTUFYCTMyCisKKy8qIExhcmdlc3QgdmFsdWUgb2YgYSBgc3NpemVfdCcuICAqLworI2RlZmluZQlfUE9TSVhfU1NJWkVfTUFYCTMyNzY3CisKKy8qIE51bWJlciBvZiBzdHJlYW1zIGEgcHJvY2VzcyBjYW4gaGF2ZSBvcGVuIGF0IG9uY2UuICAqLworI2RlZmluZQlfUE9TSVhfU1RSRUFNX01BWAk4CisKKy8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSBzeW1ib2xpYyBsaW5rLiAgKi8KKyNkZWZpbmUgX1BPU0lYX1NZTUxJTktfTUFYCTI1NQorCisvKiBUaGUgbnVtYmVyIG9mIHN5bWJvbGljIGxpbmtzIHRoYXQgY2FuIGJlIHRyYXZlcnNlZCBpbiB0aGUKKyAgIHJlc29sdXRpb24gb2YgYSBwYXRobmFtZSBpbiB0aGUgYWJzZW5jZSBvZiBhIGxvb3AuICAqLworI2RlZmluZSBfUE9TSVhfU1lNTE9PUF9NQVgJOAorCisvKiBOdW1iZXIgb2YgdGltZXIgZm9yIGEgcHJvY2Vzcy4gICovCisjZGVmaW5lIF9QT1NJWF9USU1FUl9NQVgJMzIKKworLyogTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBhIHR0eSBuYW1lLiAgKi8KKyNkZWZpbmUJX1BPU0lYX1RUWV9OQU1FX01BWAk5CisKKy8qIE1heGltdW0gbGVuZ3RoIG9mIGEgdGltZXpvbmUgbmFtZSAoZWxlbWVudCBvZiBgdHpuYW1lJykuICAqLworI2RlZmluZQlfUE9TSVhfVFpOQU1FX01BWAk2CisKKy8qIE1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3Rpb25zIHRoYXQgY2FuIGJlIHF1ZXVlZCBvbiBhIHNvY2tldC4gICovCisjZGVmaW5lCV9QT1NJWF9RTElNSVQJCTEKKworLyogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjYW4gYmUgYnVmZmVyZWQgb24gYSBzb2NrZXQgZm9yIHNlbmQKKyAgIG9yIHJlY2VpdmUuICAqLworI2RlZmluZQlfUE9TSVhfSElXQVQJCV9QT1NJWF9QSVBFX0JVRgorCisvKiBNYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyBpbiBhbiBgaW92ZWMnIGFycmF5LiAgKi8KKyNkZWZpbmUJX1BPU0lYX1VJT19NQVhJT1YJMTYKKworLyogTWF4aW11bSBjbG9jayByZXNvbHV0aW9uIGluIG5hbm9zZWNvbmRzLiAgKi8KKyNkZWZpbmUgX1BPU0lYX0NMT0NLUkVTX01JTgkyMDAwMDAwMAorCisKKy8qIEdldCB0aGUgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgdmFsdWVzIGZvciB0aGUgYWJvdmUuICAqLworI2luY2x1ZGUgPGJpdHMvbG9jYWxfbGltLmg+CisKKworI2lmbmRlZglTU0laRV9NQVgKKyMgZGVmaW5lIFNTSVpFX01BWAlMT05HX01BWAorI2VuZGlmCisKKworLyogVGhpcyB2YWx1ZSBpcyBhIGd1YXJhbnRlZWQgbWluaW11bSBtYXhpbXVtLgorICAgVGhlIGN1cnJlbnQgbWF4aW11bSBjYW4gYmUgZ290IGZyb20gYHN5c2NvbmYnLiAgKi8KKworI2lmbmRlZglOR1JPVVBTX01BWAorIyBkZWZpbmUgTkdST1VQU19NQVgJOAorI2VuZGlmCisKKyNlbmRpZgkvKiBiaXRzL3Bvc2l4MV9saW0uaCAgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDQ4M2EwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5MSwgMTk5NiwgMTk5OSwgMjAwMCwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyoKKyAqIE5ldmVyIGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5OyBpbmNsdWRlIDxsaW1pdHMuaD4gaW5zdGVhZC4KKyAqLworCisjaWZuZGVmCV9CSVRTX1BPU0lYMl9MSU1fSAorI2RlZmluZQlfQklUU19QT1NJWDJfTElNX0gJMQorCisKKy8qIFRoZSBtYXhpbXVtIGBpYmFzZScgYW5kIGBvYmFzZScgdmFsdWVzIGFsbG93ZWQgYnkgdGhlIGBiYycgdXRpbGl0eS4gICovCisjZGVmaW5lCV9QT1NJWDJfQkNfQkFTRV9NQVgJCTk5CisKKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyBhbGxvd2VkIGluIGFuIGFycmF5IGJ5IHRoZSBgYmMnIHV0aWxpdHkuICAqLworI2RlZmluZQlfUE9TSVgyX0JDX0RJTV9NQVgJCTIwNDgKKworLyogVGhlIG1heGltdW0gYHNjYWxlJyB2YWx1ZSBhbGxvd2VkIGJ5IHRoZSBgYmMnIHV0aWxpdHkuICAqLworI2RlZmluZQlfUE9TSVgyX0JDX1NDQUxFX01BWAkJOTkKKworLyogVGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgc3RyaW5nIGNvbnN0YW50IGFjY2VwdGVkIGJ5IHRoZSBgYmMnIHV0aWxpdHkuICAqLworI2RlZmluZQlfUE9TSVgyX0JDX1NUUklOR19NQVgJCTEwMDAKKworLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIHdlaWdodHMgdGhhdCBjYW4gYmUgYXNzaWduZWQgdG8gYW4gZW50cnkgb2YKKyAgIHRoZSBMQ19DT0xMQVRFIGBvcmRlcicga2V5d29yZCBpbiB0aGUgbG9jYWxlIGRlZmluaXRpb24gZmlsZS4gICovCisjZGVmaW5lCV9QT1NJWDJfQ09MTF9XRUlHSFRTX01BWAkyCisKKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBleHByZXNzaW9ucyB0aGF0IGNhbiBiZSBuZXN0ZWQKKyAgIHdpdGhpbiBwYXJlbnRoZXNlcyBieSB0aGUgYGV4cHInIHV0aWxpdHkuICAqLworI2RlZmluZQlfUE9TSVgyX0VYUFJfTkVTVF9NQVgJCTMyCisKKy8qIFRoZSBtYXhpbXVtIGxlbmd0aCwgaW4gYnl0ZXMsIG9mIGFuIGlucHV0IGxpbmUuICAqLworI2RlZmluZQlfUE9TSVgyX0xJTkVfTUFYCQkyMDQ4CisKKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiByZXBlYXRlZCBvY2N1cnJlbmNlcyBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgcGVybWl0dGVkIHdoZW4gdXNpbmcgdGhlIGludGVydmFsIG5vdGF0aW9uIGBce00sTlx9Jy4gICovCisjZGVmaW5lCV9QT1NJWDJfUkVfRFVQX01BWAkJMjU1CisKKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiBhIGNoYXJhY3RlciBjbGFzcyBuYW1lLiAgV2UgaGF2ZSBubworICAgZml4ZWQgbGltaXQsIDIwNDggaXMgYSBoaWdoIG51bWJlci4gICovCisjZGVmaW5lCV9QT1NJWDJfQ0hBUkNMQVNTX05BTUVfTUFYCTE0CisKKworLyogVGhlc2UgdmFsdWVzIGFyZSBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYywKKyAgIGFuZCBtYXkgdmFyeSB3aXRoaW4gdGhlIGltcGxlbWVudGF0aW9uLgorICAgVGhlaXIgcHJlY2lzZSB2YWx1ZXMgY2FuIGJlIG9idGFpbmVkIGZyb20gc3lzY29uZi4gICovCisKKyNpZm5kZWYJQkNfQkFTRV9NQVgKKyNkZWZpbmUJQkNfQkFTRV9NQVgJCV9QT1NJWDJfQkNfQkFTRV9NQVgKKyNlbmRpZgorI2lmbmRlZglCQ19ESU1fTUFYCisjZGVmaW5lCUJDX0RJTV9NQVgJCV9QT1NJWDJfQkNfRElNX01BWAorI2VuZGlmCisjaWZuZGVmCUJDX1NDQUxFX01BWAorI2RlZmluZQlCQ19TQ0FMRV9NQVgJCV9QT1NJWDJfQkNfU0NBTEVfTUFYCisjZW5kaWYKKyNpZm5kZWYJQkNfU1RSSU5HX01BWAorI2RlZmluZQlCQ19TVFJJTkdfTUFYCQlfUE9TSVgyX0JDX1NUUklOR19NQVgKKyNlbmRpZgorI2lmbmRlZglDT0xMX1dFSUdIVFNfTUFYCisjZGVmaW5lCUNPTExfV0VJR0hUU19NQVgJMjU1CisjZW5kaWYKKyNpZm5kZWYJRVhQUl9ORVNUX01BWAorI2RlZmluZQlFWFBSX05FU1RfTUFYCQlfUE9TSVgyX0VYUFJfTkVTVF9NQVgKKyNlbmRpZgorI2lmbmRlZglMSU5FX01BWAorI2RlZmluZQlMSU5FX01BWAkJX1BPU0lYMl9MSU5FX01BWAorI2VuZGlmCisjaWZuZGVmCUNIQVJDTEFTU19OQU1FX01BWAorI2RlZmluZQlDSEFSQ0xBU1NfTkFNRV9NQVgJMjA0OAorI2VuZGlmCisKKy8qIFRoaXMgdmFsdWUgaXMgZGVmaW5lZCBsaWtlIHRoaXMgaW4gcmVnZXguaC4gICovCisjZGVmaW5lCVJFX0RVUF9NQVggKDB4N2ZmZikKKworI2VuZGlmCS8qIGJpdHMvcG9zaXgyX2xpbS5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9wb3NpeF9vcHQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4X29wdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZDM1Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9wb3NpeF9vcHQuaApAQCAtMCwwICsxLDE4NCBAQAorLyogRGVmaW5lIFBPU0lYIG9wdGlvbnMgZm9yIExpbnV4LgorICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDQsIDIwMDYsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwKKyAgIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKworI2lmbmRlZglfUE9TSVhfT1BUX0gKKyNkZWZpbmUJX1BPU0lYX09QVF9ICTEKKworLyogSm9iIGNvbnRyb2wgaXMgc3VwcG9ydGVkLiAgKi8KKyNkZWZpbmUJX1BPU0lYX0pPQl9DT05UUk9MCTEKKworLyogUHJvY2Vzc2VzIGhhdmUgYSBzYXZlZCBzZXQtdXNlci1JRCBhbmQgYSBzYXZlZCBzZXQtZ3JvdXAtSUQuICAqLworI2RlZmluZQlfUE9TSVhfU0FWRURfSURTCTEKKworLyogUHJpb3JpdHkgc2NoZWR1bGluZyBpcyBzdXBwb3J0ZWQuICAqLworI2RlZmluZQlfUE9TSVhfUFJJT1JJVFlfU0NIRURVTElORwkyMDAxMTJMCisKKy8qIFN5bmNocm9uaXppbmcgZmlsZSBkYXRhIGlzIHN1cHBvcnRlZC4gICovCisjZGVmaW5lCV9QT1NJWF9TWU5DSFJPTklaRURfSU8JMjAwMTEyTAorCisvKiBUaGUgZnN5bmMgZnVuY3Rpb24gaXMgcHJlc2VudC4gICovCisjZGVmaW5lCV9QT1NJWF9GU1lOQwkyMDAxMTJMCisKKy8qIE1hcHBpbmcgb2YgZmlsZXMgdG8gbWVtb3J5IGlzIHN1cHBvcnRlZC4gICovCisjZGVmaW5lCV9QT1NJWF9NQVBQRURfRklMRVMJMjAwMTEyTAorCisvKiBMb2NraW5nIG9mIGFsbCBtZW1vcnkgaXMgc3VwcG9ydGVkLiAgKi8KKyNkZWZpbmUJX1BPU0lYX01FTUxPQ0sJMjAwMTEyTAorCisvKiBMb2NraW5nIG9mIHJhbmdlcyBvZiBtZW1vcnkgaXMgc3VwcG9ydGVkLiAgKi8KKyNkZWZpbmUJX1BPU0lYX01FTUxPQ0tfUkFOR0UJMjAwMTEyTAorCisvKiBTZXR0aW5nIG9mIG1lbW9yeSBwcm90ZWN0aW9ucyBpcyBzdXBwb3J0ZWQuICAqLworI2RlZmluZQlfUE9TSVhfTUVNT1JZX1BST1RFQ1RJT04JMjAwMTEyTAorCisvKiBTb21lIGZpbGVzeXN0ZW1zIGFsbG93IGFsbCB1c2VycyB0byBjaGFuZ2UgZmlsZSBvd25lcnNoaXAuICAqLworI2RlZmluZQlfUE9TSVhfQ0hPV05fUkVTVFJJQ1RFRAkwCisKKy8qIGBjX2NjJyBtZW1iZXIgb2YgJ3N0cnVjdCB0ZXJtaW9zJyBzdHJ1Y3R1cmUgY2FuIGJlIGRpc2FibGVkIGJ5CisgICB1c2luZyB0aGUgdmFsdWUgX1BPU0lYX1ZESVNBQkxFLiAgKi8KKyNkZWZpbmUJX1BPU0lYX1ZESVNBQkxFCSdcMCcKKworLyogRmlsZW5hbWVzIGFyZSBub3Qgc2lsZW50bHkgdHJ1bmNhdGVkLiAgKi8KKyNkZWZpbmUJX1BPU0lYX05PX1RSVU5DCTEKKworLyogWC9PcGVuIHJlYWx0aW1lIHN1cHBvcnQgaXMgYXZhaWxhYmxlLiAgKi8KKyNkZWZpbmUgX1hPUEVOX1JFQUxUSU1FCTEKKworLyogWC9PcGVuIHRocmVhZCByZWFsdGltZSBzdXBwb3J0IGlzIGF2YWlsYWJsZS4gICovCisjZGVmaW5lIF9YT1BFTl9SRUFMVElNRV9USFJFQURTCTEKKworLyogWFBHNC4yIHNoYXJlZCBtZW1vcnkgaXMgc3VwcG9ydGVkLiAgKi8KKyNkZWZpbmUJX1hPUEVOX1NITQkxCisKKy8qIFRlbGwgd2UgaGF2ZSBQT1NJWCB0aHJlYWRzLiAgKi8KKyNkZWZpbmUgX1BPU0lYX1RIUkVBRFMJMjAwMTEyTAorCisvKiBXZSBoYXZlIHRoZSByZWVudHJhbnQgZnVuY3Rpb25zIGRlc2NyaWJlZCBpbiBQT1NJWC4gICovCisjZGVmaW5lIF9QT1NJWF9SRUVOVFJBTlRfRlVOQ1RJT05TICAgICAgMQorI2RlZmluZSBfUE9TSVhfVEhSRUFEX1NBRkVfRlVOQ1RJT05TCTIwMDExMkwKKworLyogV2UgcHJvdmlkZSBwcmlvcml0eSBzY2hlZHVsaW5nIGZvciB0aHJlYWRzLiAgKi8KKyNkZWZpbmUgX1BPU0lYX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HCTIwMDExMkwKKworLyogV2Ugc3VwcG9ydCB1c2VyLWRlZmluZWQgc3RhY2sgc2l6ZXMuICAqLworI2RlZmluZSBfUE9TSVhfVEhSRUFEX0FUVFJfU1RBQ0tTSVpFCTIwMDExMkwKKworLyogV2Ugc3VwcG9ydCB1c2VyLWRlZmluZWQgc3RhY2tzLiAgKi8KKyNkZWZpbmUgX1BPU0lYX1RIUkVBRF9BVFRSX1NUQUNLQUREUgkyMDAxMTJMCisKKy8qIFdlIHN1cHBvcnQgcHJpb3JpdHkgaW5oZXJpdGVuY2UuICAqLworI2RlZmluZSBfUE9TSVhfVEhSRUFEX1BSSU9fSU5IRVJJVAkyMDAxMTJMCisKKy8qIFdlIHN1cHBvcnQgcHJpb3JpdHkgcHJvdGVjdGlvbiwgdGhvdWdoIG9ubHkgZm9yIG5vbi1yb2J1c3QKKyAgIG11dGV4ZXMuICAqLworI2RlZmluZSBfUE9TSVhfVEhSRUFEX1BSSU9fUFJPVEVDVAkyMDAxMTJMCisKKy8qIFdlIHN1cHBvcnQgUE9TSVguMWIgc2VtYXBob3Jlcy4gICovCisjZGVmaW5lIF9QT1NJWF9TRU1BUEhPUkVTCTIwMDExMkwKKworLyogUmVhbC10aW1lIHNpZ25hbHMgYXJlIHN1cHBvcnRlZC4gICovCisjZGVmaW5lIF9QT1NJWF9SRUFMVElNRV9TSUdOQUxTCTIwMDExMkwKKworLyogV2Ugc3VwcG9ydCBhc3luY2hyb25vdXMgSS9PLiAgKi8KKyNkZWZpbmUgX1BPU0lYX0FTWU5DSFJPTk9VU19JTwkyMDAxMTJMCisjZGVmaW5lIF9QT1NJWF9BU1lOQ19JTwkJMQorLyogQWx0ZXJuYXRpdmUgbmFtZSBmb3IgVW5peDk4LiAgKi8KKyNkZWZpbmUgX0xGU19BU1lOQ0hST05PVVNfSU8JMQorLyogU3VwcG9ydCBmb3IgcHJpb3JpdGl6YXRpb24gaXMgYWxzbyBhdmFpbGFibGUuICAqLworI2RlZmluZSBfUE9TSVhfUFJJT1JJVElaRURfSU8JMjAwMTEyTAorCisvKiBUaGUgTEZTIHN1cHBvcnQgaW4gYXN5bmNocm9ub3VzIEkvTyBpcyBhbHNvIGF2YWlsYWJsZS4gICovCisjZGVmaW5lIF9MRlM2NF9BU1lOQ0hST05PVVNfSU8JMQorCisvKiBUaGUgcmVzdCBvZiB0aGUgTEZTIGlzIGFsc28gYXZhaWxhYmxlLiAgKi8KKyNkZWZpbmUgX0xGU19MQVJHRUZJTEUJCTEKKyNkZWZpbmUgX0xGUzY0X0xBUkdFRklMRQkxCisjZGVmaW5lIF9MRlM2NF9TVERJTwkJMQorCisvKiBQT1NJWCBzaGFyZWQgbWVtb3J5IG9iamVjdHMgYXJlIGltcGxlbWVudGVkLiAgKi8KKyNkZWZpbmUgX1BPU0lYX1NIQVJFRF9NRU1PUllfT0JKRUNUUwkyMDAxMTJMCisKKy8qIENQVS10aW1lIGNsb2NrcyBzdXBwb3J0IG5lZWRzIHRvIGJlIGNoZWNrZWQgYXQgcnVudGltZS4gICovCisjZGVmaW5lIF9QT1NJWF9DUFVUSU1FCTAKKworLyogQ2xvY2sgc3VwcG9ydCBpbiB0aHJlYWRzIG11c3QgYmUgYWxzbyBjaGVja2VkIGF0IHJ1bnRpbWUuICAqLworI2RlZmluZSBfUE9TSVhfVEhSRUFEX0NQVVRJTUUJMAorCisvKiBHTlUgbGliYyBwcm92aWRlcyByZWd1bGFyIGV4cHJlc3Npb24gaGFuZGxpbmcuICAqLworI2RlZmluZSBfUE9TSVhfUkVHRVhQCTEKKworLyogUmVhZGVyL1dyaXRlciBsb2NrcyBhcmUgYXZhaWxhYmxlLiAgKi8KKyNkZWZpbmUgX1BPU0lYX1JFQURFUl9XUklURVJfTE9DS1MJMjAwMTEyTAorCisvKiBXZSBoYXZlIGEgUE9TSVggc2hlbGwuICAqLworI2RlZmluZSBfUE9TSVhfU0hFTEwJMQorCisvKiBXZSBzdXBwb3J0IHRoZSBUaW1lb3V0cyBvcHRpb24uICAqLworI2RlZmluZSBfUE9TSVhfVElNRU9VVFMJMjAwMTEyTAorCisvKiBXZSBzdXBwb3J0IHNwaW5sb2Nrcy4gICovCisjZGVmaW5lIF9QT1NJWF9TUElOX0xPQ0tTCTIwMDExMkwKKworLyogVGhlIGBzcGF3bicgZnVuY3Rpb24gZmFtaWx5IGlzIHN1cHBvcnRlZC4gICovCisjZGVmaW5lIF9QT1NJWF9TUEFXTgkyMDAxMTJMCisKKy8qIFdlIGhhdmUgUE9TSVggdGltZXJzLiAgKi8KKyNkZWZpbmUgX1BPU0lYX1RJTUVSUwkyMDAxMTJMCisKKy8qIFRoZSBiYXJyaWVyIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlLiAgKi8KKyNkZWZpbmUgX1BPU0lYX0JBUlJJRVJTCTIwMDExMkwKKworLyogUE9TSVggbWVzc2FnZSBxdWV1ZXMgYXJlIGF2YWlsYWJsZS4gICovCisjZGVmaW5lCV9QT1NJWF9NRVNTQUdFX1BBU1NJTkcJMjAwMTEyTAorCisvKiBUaHJlYWQgcHJvY2Vzcy1zaGFyZWQgc3luY2hyb25pemF0aW9uIGlzIHN1cHBvcnRlZC4gICovCisjZGVmaW5lIF9QT1NJWF9USFJFQURfUFJPQ0VTU19TSEFSRUQJMjAwMTEyTAorCisvKiBUaGUgbW9ub3RvbmljIGNsb2NrIG1pZ2h0IGJlIGF2YWlsYWJsZS4gICovCisjZGVmaW5lIF9QT1NJWF9NT05PVE9OSUNfQ0xPQ0sJMAorCisvKiBUaGUgY2xvY2sgc2VsZWN0aW9uIGludGVyZmFjZXMgYXJlIGF2YWlsYWJsZS4gICovCisjZGVmaW5lIF9QT1NJWF9DTE9DS19TRUxFQ1RJT04JMjAwMTEyTAorCisvKiBBZHZpc29yeSBpbmZvcm1hdGlvbiBpbnRlcmZhY2VzIGFyZSBhdmFpbGFibGUuICAqLworI2RlZmluZSBfUE9TSVhfQURWSVNPUllfSU5GTwkyMDAxMTJMCisKKy8qIElQdjYgc3VwcG9ydCBpcyBhdmFpbGFibGUuICAqLworI2RlZmluZSBfUE9TSVhfSVBWNgkyMDAxMTJMCisKKy8qIFJhdyBzb2NrZXQgc3VwcG9ydCBpcyBhdmFpbGFibGUuICAqLworI2RlZmluZSBfUE9TSVhfUkFXX1NPQ0tFVFMJMjAwMTEyTAorCisvKiBXZSBoYXZlIGF0IGxlYXN0IG9uZSB0ZXJtaW5hbC4gICovCisjZGVmaW5lIF9QT1NJWDJfQ0hBUl9URVJNCTIwMDExMkwKKworLyogTmVpdGhlciBwcm9jZXNzIG5vciB0aHJlYWQgc3BvcmFkaWMgc2VydmVyIGludGVyZmFjZXMgaXMgYXZhaWxhYmxlLiAgKi8KKyNkZWZpbmUgX1BPU0lYX1NQT1JBRElDX1NFUlZFUgktMQorI2RlZmluZSBfUE9TSVhfVEhSRUFEX1NQT1JBRElDX1NFUlZFUgktMQorCisvKiB0cmFjZS5oIGlzIG5vdCBhdmFpbGFibGUuICAqLworI2RlZmluZSBfUE9TSVhfVFJBQ0UJLTEKKyNkZWZpbmUgX1BPU0lYX1RSQUNFX0VWRU5UX0ZJTFRFUgktMQorI2RlZmluZSBfUE9TSVhfVFJBQ0VfSU5IRVJJVAktMQorI2RlZmluZSBfUE9TSVhfVFJBQ0VfTE9HCS0xCisKKy8qIFR5cGVkIG1lbW9yeSBvYmplY3RzIGFyZSBub3QgYXZhaWxhYmxlLiAgKi8KKyNkZWZpbmUgX1BPU0lYX1RZUEVEX01FTU9SWV9PQkpFQ1RTCS0xCisKKyNlbmRpZiAvKiBwb3NpeF9vcHQuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvcHJpbnRmLWxkYmwuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3ByaW50Zi1sZGJsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JkYzNmMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3ByaW50Zi1sZGJsLmgKQEAgLTAsMCArMSwyNCBAQAorLyogLW1sb25nLWRvdWJsZS02NCBjb21wYXRpYmlsaXR5IG1vZGUgZm9yIDxwcmludGYuaD4gZnVuY3Rpb25zLgorICAgQ29weXJpZ2h0IChDKSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9QUklOVEZfSAorIyBlcnJvciAiTmV2ZXIgaW5jbHVkZSA8Yml0cy9wcmludGYtbGRibC5oPiBkaXJlY3RseTsgdXNlIDxwcmludGYuaD4gaW5zdGVhZC4iCisjZW5kaWYKKworX19MREJMX1JFRElSX0RFQ0wgKHByaW50Zl9zaXplKQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWIxMTVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgKQEAgLTAsMCArMSwxODEgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfQklUU19QVEhSRUFEVFlQRVNfSAorI2RlZmluZSBfQklUU19QVEhSRUFEVFlQRVNfSAkxCisKKyNpbmNsdWRlIDxlbmRpYW4uaD4KKworI2RlZmluZSBfX1NJWkVPRl9QVEhSRUFEX0FUVFJfVCAzNgorI2RlZmluZSBfX1NJWkVPRl9QVEhSRUFEX01VVEVYX1QgMjQKKyNkZWZpbmUgX19TSVpFT0ZfUFRIUkVBRF9NVVRFWEFUVFJfVCA0CisjZGVmaW5lIF9fU0laRU9GX1BUSFJFQURfQ09ORF9UIDQ4CisjZGVmaW5lIF9fU0laRU9GX1BUSFJFQURfQ09ORF9DT01QQVRfVCAxMgorI2RlZmluZSBfX1NJWkVPRl9QVEhSRUFEX0NPTkRBVFRSX1QgNAorI2RlZmluZSBfX1NJWkVPRl9QVEhSRUFEX1JXTE9DS19UIDMyCisjZGVmaW5lIF9fU0laRU9GX1BUSFJFQURfUldMT0NLQVRUUl9UIDgKKyNkZWZpbmUgX19TSVpFT0ZfUFRIUkVBRF9CQVJSSUVSX1QgMjAKKyNkZWZpbmUgX19TSVpFT0ZfUFRIUkVBRF9CQVJSSUVSQVRUUl9UIDQKKworCisvKiBUaHJlYWQgaWRlbnRpZmllcnMuICBUaGUgc3RydWN0dXJlIG9mIHRoZSBhdHRyaWJ1dGUgdHlwZSBpcyBub3QKKyAgIGV4cG9zZWQgb24gcHVycG9zZS4gICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKKworCit0eXBlZGVmIHVuaW9uCit7CisgIGNoYXIgX19zaXplW19fU0laRU9GX1BUSFJFQURfQVRUUl9UXTsKKyAgbG9uZyBpbnQgX19hbGlnbjsKK30gcHRocmVhZF9hdHRyX3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2ludGVybmFsX3NsaXN0Cit7CisgIHN0cnVjdCBfX3B0aHJlYWRfaW50ZXJuYWxfc2xpc3QgKl9fbmV4dDsKK30gX19wdGhyZWFkX3NsaXN0X3Q7CisKKworLyogRGF0YSBzdHJ1Y3R1cmVzIGZvciBtdXRleCBoYW5kbGluZy4gIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGF0dHJpYnV0ZQorICAgdHlwZSBpcyBub3QgZXhwb3NlZCBvbiBwdXJwb3NlLiAgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0IF9fcHRocmVhZF9tdXRleF9zCisgIHsKKyAgICBpbnQgX19sb2NrOworICAgIHVuc2lnbmVkIGludCBfX2NvdW50OworICAgIGludCBfX293bmVyOworICAgIC8qIEtJTkQgbXVzdCBzdGF5IGF0IHRoaXMgcG9zaXRpb24gaW4gdGhlIHN0cnVjdHVyZSB0byBtYWludGFpbgorICAgICAgIGJpbmFyeSBjb21wYXRpYmlsaXR5LiAgKi8KKyAgICBpbnQgX19raW5kOworICAgIHVuc2lnbmVkIGludCBfX251c2VyczsKKyAgICBfX2V4dGVuc2lvbl9fIHVuaW9uCisgICAgeworICAgICAgaW50IF9fc3BpbnM7CisgICAgICBfX3B0aHJlYWRfc2xpc3RfdCBfX2xpc3Q7CisgICAgfTsKKyAgfSBfX2RhdGE7CisgIGNoYXIgX19zaXplW19fU0laRU9GX1BUSFJFQURfTVVURVhfVF07CisgIGxvbmcgaW50IF9fYWxpZ247Cit9IHB0aHJlYWRfbXV0ZXhfdDsKKwordHlwZWRlZiB1bmlvbgoreworICBjaGFyIF9fc2l6ZVtfX1NJWkVPRl9QVEhSRUFEX01VVEVYQVRUUl9UXTsKKyAgbG9uZyBpbnQgX19hbGlnbjsKK30gcHRocmVhZF9tdXRleGF0dHJfdDsKKworCisvKiBEYXRhIHN0cnVjdHVyZSBmb3IgY29uZGl0aW9uYWwgdmFyaWFibGUgaGFuZGxpbmcuICBUaGUgc3RydWN0dXJlIG9mCisgICB0aGUgYXR0cmlidXRlIHR5cGUgaXMgbm90IGV4cG9zZWQgb24gcHVycG9zZS4gICovCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdAorICB7CisgICAgaW50IF9fbG9jazsKKyAgICB1bnNpZ25lZCBpbnQgX19mdXRleDsKKyAgICBfX2V4dGVuc2lvbl9fIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX190b3RhbF9zZXE7CisgICAgX19leHRlbnNpb25fXyB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fd2FrZXVwX3NlcTsKKyAgICBfX2V4dGVuc2lvbl9fIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX193b2tlbl9zZXE7CisgICAgdm9pZCAqX19tdXRleDsKKyAgICB1bnNpZ25lZCBpbnQgX19ud2FpdGVyczsKKyAgICB1bnNpZ25lZCBpbnQgX19icm9hZGNhc3Rfc2VxOworICB9IF9fZGF0YTsKKyAgY2hhciBfX3NpemVbX19TSVpFT0ZfUFRIUkVBRF9DT05EX1RdOworICBfX2V4dGVuc2lvbl9fIGxvbmcgbG9uZyBpbnQgX19hbGlnbjsKK30gcHRocmVhZF9jb25kX3Q7CisKK3R5cGVkZWYgdW5pb24KK3sKKyAgY2hhciBfX3NpemVbX19TSVpFT0ZfUFRIUkVBRF9DT05EQVRUUl9UXTsKKyAgbG9uZyBpbnQgX19hbGlnbjsKK30gcHRocmVhZF9jb25kYXR0cl90OworCisKKy8qIEtleXMgZm9yIHRocmVhZC1zcGVjaWZpYyBkYXRhICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tleV90OworCisKKy8qIE9uY2Utb25seSBleGVjdXRpb24gKi8KK3R5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OworCisKKyNpZiBkZWZpbmVkIF9fVVNFX1VOSVg5OCB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOMksKKy8qIERhdGEgc3RydWN0dXJlIGZvciByZWFkLXdyaXRlIGxvY2sgdmFyaWFibGUgaGFuZGxpbmcuICBUaGUKKyAgIHN0cnVjdHVyZSBvZiB0aGUgYXR0cmlidXRlIHR5cGUgaXMgbm90IGV4cG9zZWQgb24gcHVycG9zZS4gICovCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdAorICB7CisgICAgaW50IF9fbG9jazsKKyAgICB1bnNpZ25lZCBpbnQgX19ucl9yZWFkZXJzOworICAgIHVuc2lnbmVkIGludCBfX3JlYWRlcnNfd2FrZXVwOworICAgIHVuc2lnbmVkIGludCBfX3dyaXRlcl93YWtldXA7CisgICAgdW5zaWduZWQgaW50IF9fbnJfcmVhZGVyc19xdWV1ZWQ7CisgICAgdW5zaWduZWQgaW50IF9fbnJfd3JpdGVyc19xdWV1ZWQ7CisjaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorICAgIHVuc2lnbmVkIGNoYXIgX19wYWQxOworICAgIHVuc2lnbmVkIGNoYXIgX19wYWQyOworICAgIHVuc2lnbmVkIGNoYXIgX19zaGFyZWQ7CisgICAgLyogRkxBR1MgbXVzdCBzdGF5IGF0IHRoaXMgcG9zaXRpb24gaW4gdGhlIHN0cnVjdHVyZSB0byBtYWludGFpbgorICAgICAgIGJpbmFyeSBjb21wYXRpYmlsaXR5LiAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIF9fZmxhZ3M7CisjZWxzZQorICAgIC8qIEZMQUdTIG11c3Qgc3RheSBhdCB0aGlzIHBvc2l0aW9uIGluIHRoZSBzdHJ1Y3R1cmUgdG8gbWFpbnRhaW4KKyAgICAgICBiaW5hcnkgY29tcGF0aWJpbGl0eS4gICovCisgICAgdW5zaWduZWQgY2hhciBfX2ZsYWdzOworICAgIHVuc2lnbmVkIGNoYXIgX19zaGFyZWQ7CisgICAgdW5zaWduZWQgY2hhciBfX3BhZDE7CisgICAgdW5zaWduZWQgY2hhciBfX3BhZDI7CisjZW5kaWYKKyAgICBpbnQgX193cml0ZXI7CisgIH0gX19kYXRhOworICBjaGFyIF9fc2l6ZVtfX1NJWkVPRl9QVEhSRUFEX1JXTE9DS19UXTsKKyAgbG9uZyBpbnQgX19hbGlnbjsKK30gcHRocmVhZF9yd2xvY2tfdDsKKwordHlwZWRlZiB1bmlvbgoreworICBjaGFyIF9fc2l6ZVtfX1NJWkVPRl9QVEhSRUFEX1JXTE9DS0FUVFJfVF07CisgIGxvbmcgaW50IF9fYWxpZ247Cit9IHB0aHJlYWRfcndsb2NrYXR0cl90OworI2VuZGlmCisKKworI2lmZGVmIF9fVVNFX1hPUEVOMksKKy8qIFBPU0lYIHNwaW5sb2NrIGRhdGEgdHlwZS4gICovCit0eXBlZGVmIHZvbGF0aWxlIGludCBwdGhyZWFkX3NwaW5sb2NrX3Q7CisKKworLyogUE9TSVggYmFycmllcnMgZGF0YSB0eXBlLiAgVGhlIHN0cnVjdHVyZSBvZiB0aGUgdHlwZSBpcworICAgZGVsaWJlcmF0ZWx5IG5vdCBleHBvc2VkLiAgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgY2hhciBfX3NpemVbX19TSVpFT0ZfUFRIUkVBRF9CQVJSSUVSX1RdOworICBsb25nIGludCBfX2FsaWduOworfSBwdGhyZWFkX2JhcnJpZXJfdDsKKwordHlwZWRlZiB1bmlvbgoreworICBjaGFyIF9fc2l6ZVtfX1NJWkVPRl9QVEhSRUFEX0JBUlJJRVJBVFRSX1RdOworICBpbnQgX19hbGlnbjsKK30gcHRocmVhZF9iYXJyaWVyYXR0cl90OworI2VuZGlmCisKKworI2VuZGlmCS8qIGJpdHMvcHRocmVhZHR5cGVzLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3Jlc291cmNlLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9yZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZDY0ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9yZXNvdXJjZS5oCkBAIC0wLDAgKzEsMjMzIEBACisvKiBCaXQgdmFsdWVzICYgc3RydWN0dXJlcyBmb3IgcmVzb3VyY2UgbGltaXRzLiAgTGludXggdmVyc2lvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwNCwgMjAwNQorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1NZU19SRVNPVVJDRV9ICisjIGVycm9yICJOZXZlciB1c2UgPGJpdHMvcmVzb3VyY2UuaD4gZGlyZWN0bHk7IGluY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaW5jbHVkZSA8Yml0cy90eXBlcy5oPgorCisvKiBUcmFuc211dGUgZGVmaW5lcyB0byBlbnVtZXJhdGlvbnMuICBUaGUgbWFjcm8gcmUtZGVmaW5pdGlvbnMgYXJlCisgICBuZWNlc3NhcnkgYmVjYXVzZSBzb21lIHByb2dyYW1zIHdhbnQgdG8gdGVzdCBmb3Igb3BlcmF0aW5nIHN5c3RlbQorICAgZmVhdHVyZXMgd2l0aCAjaWZkZWYgUlVTQUdFX1NFTEYuICBJbiBJU08gQyB0aGUgcmVmbGV4aXZlCisgICBkZWZpbml0aW9uIGlzIGEgbm8tb3AuICAqLworCisvKiBLaW5kcyBvZiByZXNvdXJjZSBsaW1pdC4gICovCitlbnVtIF9fcmxpbWl0X3Jlc291cmNlCit7CisgIC8qIFBlci1wcm9jZXNzIENQVSBsaW1pdCwgaW4gc2Vjb25kcy4gICovCisgIFJMSU1JVF9DUFUgPSAwLAorI2RlZmluZSBSTElNSVRfQ1BVIFJMSU1JVF9DUFUKKworICAvKiBMYXJnZXN0IGZpbGUgdGhhdCBjYW4gYmUgY3JlYXRlZCwgaW4gYnl0ZXMuICAqLworICBSTElNSVRfRlNJWkUgPSAxLAorI2RlZmluZQlSTElNSVRfRlNJWkUgUkxJTUlUX0ZTSVpFCisKKyAgLyogTWF4aW11bSBzaXplIG9mIGRhdGEgc2VnbWVudCwgaW4gYnl0ZXMuICAqLworICBSTElNSVRfREFUQSA9IDIsCisjZGVmaW5lCVJMSU1JVF9EQVRBIFJMSU1JVF9EQVRBCisKKyAgLyogTWF4aW11bSBzaXplIG9mIHN0YWNrIHNlZ21lbnQsIGluIGJ5dGVzLiAgKi8KKyAgUkxJTUlUX1NUQUNLID0gMywKKyNkZWZpbmUJUkxJTUlUX1NUQUNLIFJMSU1JVF9TVEFDSworCisgIC8qIExhcmdlc3QgY29yZSBmaWxlIHRoYXQgY2FuIGJlIGNyZWF0ZWQsIGluIGJ5dGVzLiAgKi8KKyAgUkxJTUlUX0NPUkUgPSA0LAorI2RlZmluZQlSTElNSVRfQ09SRSBSTElNSVRfQ09SRQorCisgIC8qIExhcmdlc3QgcmVzaWRlbnQgc2V0IHNpemUsIGluIGJ5dGVzLgorICAgICBUaGlzIGFmZmVjdHMgc3dhcHBpbmc7IHByb2Nlc3NlcyB0aGF0IGFyZSBleGNlZWRpbmcgdGhlaXIKKyAgICAgcmVzaWRlbnQgc2V0IHNpemUgd2lsbCBiZSBtb3JlIGxpa2VseSB0byBoYXZlIHBoeXNpY2FsIG1lbW9yeQorICAgICB0YWtlbiBmcm9tIHRoZW0uICAqLworICBfX1JMSU1JVF9SU1MgPSA1LAorI2RlZmluZQlSTElNSVRfUlNTIF9fUkxJTUlUX1JTUworCisgIC8qIE51bWJlciBvZiBvcGVuIGZpbGVzLiAgKi8KKyAgUkxJTUlUX05PRklMRSA9IDcsCisgIF9fUkxJTUlUX09GSUxFID0gUkxJTUlUX05PRklMRSwgLyogQlNEIG5hbWUgZm9yIHNhbWUuICAqLworI2RlZmluZSBSTElNSVRfTk9GSUxFIFJMSU1JVF9OT0ZJTEUKKyNkZWZpbmUgUkxJTUlUX09GSUxFIF9fUkxJTUlUX09GSUxFCisKKyAgLyogQWRkcmVzcyBzcGFjZSBsaW1pdC4gICovCisgIFJMSU1JVF9BUyA9IDksCisjZGVmaW5lIFJMSU1JVF9BUyBSTElNSVRfQVMKKworICAvKiBOdW1iZXIgb2YgcHJvY2Vzc2VzLiAgKi8KKyAgX19STElNSVRfTlBST0MgPSA2LAorI2RlZmluZSBSTElNSVRfTlBST0MgX19STElNSVRfTlBST0MKKworICAvKiBMb2NrZWQtaW4tbWVtb3J5IGFkZHJlc3Mgc3BhY2UuICAqLworICBfX1JMSU1JVF9NRU1MT0NLID0gOCwKKyNkZWZpbmUgUkxJTUlUX01FTUxPQ0sgX19STElNSVRfTUVNTE9DSworCisgIC8qIE1heGltdW0gbnVtYmVyIG9mIGZpbGUgbG9ja3MuICAqLworICBfX1JMSU1JVF9MT0NLUyA9IDEwLAorI2RlZmluZSBSTElNSVRfTE9DS1MgX19STElNSVRfTE9DS1MKKworICAvKiBNYXhpbXVtIG51bWJlciBvZiBwZW5kaW5nIHNpZ25hbHMuICAqLworICBfX1JMSU1JVF9TSUdQRU5ESU5HID0gMTEsCisjZGVmaW5lIFJMSU1JVF9TSUdQRU5ESU5HIF9fUkxJTUlUX1NJR1BFTkRJTkcKKworICAvKiBNYXhpbXVtIGJ5dGVzIGluIFBPU0lYIG1lc3NhZ2UgcXVldWVzLiAgKi8KKyAgX19STElNSVRfTVNHUVVFVUUgPSAxMiwKKyNkZWZpbmUgUkxJTUlUX01TR1FVRVVFIF9fUkxJTUlUX01TR1FVRVVFCisKKyAgLyogTWF4aW11bSBuaWNlIHByaW9yaXR5IGFsbG93ZWQgdG8gcmFpc2UgdG8uCisgICAgIE5pY2UgbGV2ZWxzIDE5IC4uIC0yMCBjb3JyZXNwb25kIHRvIDAgLi4gMzkKKyAgICAgdmFsdWVzIG9mIHRoaXMgcmVzb3VyY2UgbGltaXQuICAqLworICBfX1JMSU1JVF9OSUNFID0gMTMsCisjZGVmaW5lIFJMSU1JVF9OSUNFIF9fUkxJTUlUX05JQ0UKKworICAvKiBNYXhpbXVtIHJlYWx0aW1lIHByaW9yaXR5IGFsbG93ZWQgZm9yIG5vbi1wcml2aWxlZGdlZAorICAgICBwcm9jZXNzZXMuICAqLworICBfX1JMSU1JVF9SVFBSSU8gPSAxNCwKKyNkZWZpbmUgUkxJTUlUX1JUUFJJTyBfX1JMSU1JVF9SVFBSSU8KKworICBfX1JMSU1JVF9OTElNSVRTID0gMTUsCisgIF9fUkxJTV9OTElNSVRTID0gX19STElNSVRfTkxJTUlUUworI2RlZmluZSBSTElNSVRfTkxJTUlUUyBfX1JMSU1JVF9OTElNSVRTCisjZGVmaW5lIFJMSU1fTkxJTUlUUyBfX1JMSU1fTkxJTUlUUworfTsKKworLyogVmFsdWUgdG8gaW5kaWNhdGUgdGhhdCB0aGVyZSBpcyBubyBsaW1pdC4gICovCisjaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKKyMgZGVmaW5lIFJMSU1fSU5GSU5JVFkgKCh1bnNpZ25lZCBsb25nIGludCkofjBVTCkpCisjZWxzZQorIyBkZWZpbmUgUkxJTV9JTkZJTklUWSAweGZmZmZmZmZmZmZmZmZmZmZ1TEwKKyNlbmRpZgorCisjaWZkZWYgX19VU0VfTEFSR0VGSUxFNjQKKyMgZGVmaW5lIFJMSU02NF9JTkZJTklUWSAweGZmZmZmZmZmZmZmZmZmZmZ1TEwKKyNlbmRpZgorCisvKiBXZSBjYW4gcmVwcmVzZW50IGFsbCBsaW1pdHMuICAqLworI2RlZmluZSBSTElNX1NBVkVEX01BWAlSTElNX0lORklOSVRZCisjZGVmaW5lIFJMSU1fU0FWRURfQ1VSCVJMSU1fSU5GSU5JVFkKKworCisvKiBUeXBlIGZvciByZXNvdXJjZSBxdWFudGl0eSBtZWFzdXJlbWVudC4gICovCisjaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKK3R5cGVkZWYgX19ybGltX3QgcmxpbV90OworI2Vsc2UKK3R5cGVkZWYgX19ybGltNjRfdCBybGltX3Q7CisjZW5kaWYKKyNpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAordHlwZWRlZiBfX3JsaW02NF90IHJsaW02NF90OworI2VuZGlmCisKK3N0cnVjdCBybGltaXQKKyAgeworICAgIC8qIFRoZSBjdXJyZW50IChzb2Z0KSBsaW1pdC4gICovCisgICAgcmxpbV90IHJsaW1fY3VyOworICAgIC8qIFRoZSBoYXJkIGxpbWl0LiAgKi8KKyAgICBybGltX3QgcmxpbV9tYXg7CisgIH07CisKKyNpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAorc3RydWN0IHJsaW1pdDY0CisgIHsKKyAgICAvKiBUaGUgY3VycmVudCAoc29mdCkgbGltaXQuICAqLworICAgIHJsaW02NF90IHJsaW1fY3VyOworICAgIC8qIFRoZSBoYXJkIGxpbWl0LiAgKi8KKyAgICBybGltNjRfdCBybGltX21heDsKKyB9OworI2VuZGlmCisKKy8qIFdob3NlIHVzYWdlIHN0YXRpc3RpY3MgZG8geW91IHdhbnQ/ICAqLworZW51bSBfX3J1c2FnZV93aG8KK3sKKyAgLyogVGhlIGNhbGxpbmcgcHJvY2Vzcy4gICovCisgIFJVU0FHRV9TRUxGID0gMCwKKyNkZWZpbmUgUlVTQUdFX1NFTEYgUlVTQUdFX1NFTEYKKworICAvKiBBbGwgb2YgaXRzIHRlcm1pbmF0ZWQgY2hpbGQgcHJvY2Vzc2VzLiAgKi8KKyAgUlVTQUdFX0NISUxEUkVOID0gLTEsCisjZGVmaW5lIFJVU0FHRV9DSElMRFJFTiBSVVNBR0VfQ0hJTERSRU4KKworI2lmZGVmIF9fVVNFX0dOVQorICAvKiBUaGUgY2FsbGluZyB0aHJlYWQuICAqLworICBSVVNBR0VfVEhSRUFEID0gMQorIyBkZWZpbmUgUlVTQUdFX1RIUkVBRCBSVVNBR0VfVEhSRUFECisgIC8qIE5hbWUgZm9yIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgb24gU29sYXJpcy4gICovCisjIGRlZmluZSBSVVNBR0VfTFdQIFJVU0FHRV9USFJFQUQKKyNlbmRpZgorfTsKKworI2RlZmluZSBfX25lZWRfdGltZXZhbAorI2luY2x1ZGUgPGJpdHMvdGltZS5oPgkJLyogRm9yIGBzdHJ1Y3QgdGltZXZhbCcuICAqLworCisvKiBTdHJ1Y3R1cmUgd2hpY2ggc2F5cyBob3cgbXVjaCBvZiBlYWNoIHJlc291cmNlIGhhcyBiZWVuIHVzZWQuICAqLworc3RydWN0IHJ1c2FnZQorICB7CisgICAgLyogVG90YWwgYW1vdW50IG9mIHVzZXIgdGltZSB1c2VkLiAgKi8KKyAgICBzdHJ1Y3QgdGltZXZhbCBydV91dGltZTsKKyAgICAvKiBUb3RhbCBhbW91bnQgb2Ygc3lzdGVtIHRpbWUgdXNlZC4gICovCisgICAgc3RydWN0IHRpbWV2YWwgcnVfc3RpbWU7CisgICAgLyogTWF4aW11bSByZXNpZGVudCBzZXQgc2l6ZSAoaW4ga2lsb2J5dGVzKS4gICovCisgICAgbG9uZyBpbnQgcnVfbWF4cnNzOworICAgIC8qIEFtb3VudCBvZiBzaGFyaW5nIG9mIHRleHQgc2VnbWVudCBtZW1vcnkKKyAgICAgICB3aXRoIG90aGVyIHByb2Nlc3NlcyAoa2lsb2J5dGUtc2Vjb25kcykuICAqLworICAgIGxvbmcgaW50IHJ1X2l4cnNzOworICAgIC8qIEFtb3VudCBvZiBkYXRhIHNlZ21lbnQgbWVtb3J5IHVzZWQgKGtpbG9ieXRlLXNlY29uZHMpLiAgKi8KKyAgICBsb25nIGludCBydV9pZHJzczsKKyAgICAvKiBBbW91bnQgb2Ygc3RhY2sgbWVtb3J5IHVzZWQgKGtpbG9ieXRlLXNlY29uZHMpLiAgKi8KKyAgICBsb25nIGludCBydV9pc3JzczsKKyAgICAvKiBOdW1iZXIgb2Ygc29mdCBwYWdlIGZhdWx0cyAoaS5lLiB0aG9zZSBzZXJ2aWNlZCBieSByZWNsYWltaW5nCisgICAgICAgYSBwYWdlIGZyb20gdGhlIGxpc3Qgb2YgcGFnZXMgYXdhaXRpbmcgcmVhbGxvY2F0aW9uLiAgKi8KKyAgICBsb25nIGludCBydV9taW5mbHQ7CisgICAgLyogTnVtYmVyIG9mIGhhcmQgcGFnZSBmYXVsdHMgKGkuZS4gdGhvc2UgdGhhdCByZXF1aXJlZCBJL08pLiAgKi8KKyAgICBsb25nIGludCBydV9tYWpmbHQ7CisgICAgLyogTnVtYmVyIG9mIHRpbWVzIGEgcHJvY2VzcyB3YXMgc3dhcHBlZCBvdXQgb2YgcGh5c2ljYWwgbWVtb3J5LiAgKi8KKyAgICBsb25nIGludCBydV9uc3dhcDsKKyAgICAvKiBOdW1iZXIgb2YgaW5wdXQgb3BlcmF0aW9ucyB2aWEgdGhlIGZpbGUgc3lzdGVtLiAgTm90ZTogVGhpcworICAgICAgIGFuZCBgcnVfb3VibG9jaycgZG8gbm90IGluY2x1ZGUgb3BlcmF0aW9ucyB3aXRoIHRoZSBjYWNoZS4gICovCisgICAgbG9uZyBpbnQgcnVfaW5ibG9jazsKKyAgICAvKiBOdW1iZXIgb2Ygb3V0cHV0IG9wZXJhdGlvbnMgdmlhIHRoZSBmaWxlIHN5c3RlbS4gICovCisgICAgbG9uZyBpbnQgcnVfb3VibG9jazsKKyAgICAvKiBOdW1iZXIgb2YgSVBDIG1lc3NhZ2VzIHNlbnQuICAqLworICAgIGxvbmcgaW50IHJ1X21zZ3NuZDsKKyAgICAvKiBOdW1iZXIgb2YgSVBDIG1lc3NhZ2VzIHJlY2VpdmVkLiAgKi8KKyAgICBsb25nIGludCBydV9tc2dyY3Y7CisgICAgLyogTnVtYmVyIG9mIHNpZ25hbHMgZGVsaXZlcmVkLiAgKi8KKyAgICBsb25nIGludCBydV9uc2lnbmFsczsKKyAgICAvKiBOdW1iZXIgb2Ygdm9sdW50YXJ5IGNvbnRleHQgc3dpdGNoZXMsIGkuZS4gYmVjYXVzZSB0aGUgcHJvY2VzcworICAgICAgIGdhdmUgdXAgdGhlIHByb2Nlc3MgYmVmb3JlIGl0IGhhZCB0byAodXN1YWxseSB0byB3YWl0IGZvciBzb21lCisgICAgICAgcmVzb3VyY2UgdG8gYmUgYXZhaWxhYmxlKS4gICovCisgICAgbG9uZyBpbnQgcnVfbnZjc3c7CisgICAgLyogTnVtYmVyIG9mIGludm9sdW50YXJ5IGNvbnRleHQgc3dpdGNoZXMsIGkuZS4gYSBoaWdoZXIgcHJpb3JpdHkgcHJvY2VzcworICAgICAgIGJlY2FtZSBydW5uYWJsZSBvciB0aGUgY3VycmVudCBwcm9jZXNzIHVzZWQgdXAgaXRzIHRpbWUgc2xpY2UuICAqLworICAgIGxvbmcgaW50IHJ1X25pdmNzdzsKKyAgfTsKKworLyogUHJpb3JpdHkgbGltaXRzLiAgKi8KKyNkZWZpbmUgUFJJT19NSU4JLTIwCS8qIE1pbmltdW0gcHJpb3JpdHkgYSBwcm9jZXNzIGNhbiBoYXZlLiAgKi8KKyNkZWZpbmUgUFJJT19NQVgJMjAJLyogTWF4aW11bSBwcmlvcml0eSBhIHByb2Nlc3MgY2FuIGhhdmUuICAqLworCisvKiBUaGUgdHlwZSBvZiB0aGUgV0hJQ0ggYXJndW1lbnQgdG8gYGdldHByaW9yaXR5JyBhbmQgYHNldHByaW9yaXR5JywKKyAgIGluZGljYXRpbmcgd2hhdCBmbGF2b3Igb2YgZW50aXR5IHRoZSBXSE8gYXJndW1lbnQgc3BlY2lmaWVzLiAgKi8KK2VudW0gX19wcmlvcml0eV93aGljaAoreworICBQUklPX1BST0NFU1MgPSAwLAkJLyogV0hPIGlzIGEgcHJvY2VzcyBJRC4gICovCisjZGVmaW5lIFBSSU9fUFJPQ0VTUyBQUklPX1BST0NFU1MKKyAgUFJJT19QR1JQID0gMSwJCS8qIFdITyBpcyBhIHByb2Nlc3MgZ3JvdXAgSUQuICAqLworI2RlZmluZSBQUklPX1BHUlAgUFJJT19QR1JQCisgIFBSSU9fVVNFUiA9IDIJCQkvKiBXSE8gaXMgYSB1c2VyIElELiAgKi8KKyNkZWZpbmUgUFJJT19VU0VSIFBSSU9fVVNFUgorfTsKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNjk0ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oCkBAIC0wLDAgKzEsMjAwIEBACisvKiBEZWZpbml0aW9ucyBvZiBjb25zdGFudHMgYW5kIGRhdGEgc3RydWN0dXJlIGZvciBQT1NJWCAxMDAzLjFiLTE5OTMKKyAgIHNjaGVkdWxpbmcgaW50ZXJmYWNlLgorICAgQ29weXJpZ2h0IChDKSAxOTk2LTE5OTksMjAwMS0yMDAzLDIwMDUsMjAwNiwyMDA3LDIwMDgKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9fbmVlZF9zY2hlZHBhcmFtCisKKyNpZm5kZWYgX1NDSEVEX0gKKyMgZXJyb3IgIk5ldmVyIGluY2x1ZGUgPGJpdHMvc2NoZWQuaD4gZGlyZWN0bHk7IHVzZSA8c2NoZWQuaD4gaW5zdGVhZC4iCisjZW5kaWYKKworCisvKiBTY2hlZHVsaW5nIGFsZ29yaXRobXMuICAqLworI2RlZmluZSBTQ0hFRF9PVEhFUgkwCisjZGVmaW5lIFNDSEVEX0ZJRk8JMQorI2RlZmluZSBTQ0hFRF9SUgkyCisjaWZkZWYgX19VU0VfR05VCisjIGRlZmluZSBTQ0hFRF9CQVRDSAkzCisjZW5kaWYKKworI2lmZGVmIF9fVVNFX01JU0MKKy8qIENsb25pbmcgZmxhZ3MuICAqLworIyBkZWZpbmUgQ1NJR05BTCAgICAgICAweDAwMDAwMGZmIC8qIFNpZ25hbCBtYXNrIHRvIGJlIHNlbnQgYXQgZXhpdC4gICovCisjIGRlZmluZSBDTE9ORV9WTSAgICAgIDB4MDAwMDAxMDAgLyogU2V0IGlmIFZNIHNoYXJlZCBiZXR3ZWVuIHByb2Nlc3Nlcy4gICovCisjIGRlZmluZSBDTE9ORV9GUyAgICAgIDB4MDAwMDAyMDAgLyogU2V0IGlmIGZzIGluZm8gc2hhcmVkIGJldHdlZW4gcHJvY2Vzc2VzLiAgKi8KKyMgZGVmaW5lIENMT05FX0ZJTEVTICAgMHgwMDAwMDQwMCAvKiBTZXQgaWYgb3BlbiBmaWxlcyBzaGFyZWQgYmV0d2VlbiBwcm9jZXNzZXMuICAqLworIyBkZWZpbmUgQ0xPTkVfU0lHSEFORCAweDAwMDAwODAwIC8qIFNldCBpZiBzaWduYWwgaGFuZGxlcnMgc2hhcmVkLiAgKi8KKyMgZGVmaW5lIENMT05FX1BUUkFDRSAgMHgwMDAwMjAwMCAvKiBTZXQgaWYgdHJhY2luZyBjb250aW51ZXMgb24gdGhlIGNoaWxkLiAgKi8KKyMgZGVmaW5lIENMT05FX1ZGT1JLICAgMHgwMDAwNDAwMCAvKiBTZXQgaWYgdGhlIHBhcmVudCB3YW50cyB0aGUgY2hpbGQgdG8KKwkJCQkgICAgIHdha2UgaXQgdXAgb24gbW1fcmVsZWFzZS4gICovCisjIGRlZmluZSBDTE9ORV9QQVJFTlQgIDB4MDAwMDgwMDAgLyogU2V0IGlmIHdlIHdhbnQgdG8gaGF2ZSB0aGUgc2FtZQorCQkJCSAgICAgcGFyZW50IGFzIHRoZSBjbG9uZXIuICAqLworIyBkZWZpbmUgQ0xPTkVfVEhSRUFEICAweDAwMDEwMDAwIC8qIFNldCB0byBhZGQgdG8gc2FtZSB0aHJlYWQgZ3JvdXAuICAqLworIyBkZWZpbmUgQ0xPTkVfTkVXTlMgICAweDAwMDIwMDAwIC8qIFNldCB0byBjcmVhdGUgbmV3IG5hbWVzcGFjZS4gICovCisjIGRlZmluZSBDTE9ORV9TWVNWU0VNIDB4MDAwNDAwMDAgLyogU2V0IHRvIHNoYXJlZCBTVklEIFNFTV9VTkRPIHNlbWFudGljcy4gICovCisjIGRlZmluZSBDTE9ORV9TRVRUTFMgIDB4MDAwODAwMDAgLyogU2V0IFRMUyBpbmZvLiAgKi8KKyMgZGVmaW5lIENMT05FX1BBUkVOVF9TRVRUSUQgMHgwMDEwMDAwMCAvKiBTdG9yZSBUSUQgaW4gdXNlcmxldmVsIGJ1ZmZlcgorCQkJCQkgICBiZWZvcmUgTU0gY29weS4gICovCisjIGRlZmluZSBDTE9ORV9DSElMRF9DTEVBUlRJRCAweDAwMjAwMDAwIC8qIFJlZ2lzdGVyIGV4aXQgZnV0ZXggYW5kIG1lbW9yeQorCQkJCQkgICAgbG9jYXRpb24gdG8gY2xlYXIuICAqLworIyBkZWZpbmUgQ0xPTkVfREVUQUNIRUQgMHgwMDQwMDAwMCAvKiBDcmVhdGUgY2xvbmUgZGV0YWNoZWQuICAqLworIyBkZWZpbmUgQ0xPTkVfVU5UUkFDRUQgMHgwMDgwMDAwMCAvKiBTZXQgaWYgdGhlIHRyYWNpbmcgcHJvY2VzcyBjYW4ndAorCQkJCSAgICAgIGZvcmNlIENMT05FX1BUUkFDRSBvbiB0aGlzIGNsb25lLiAgKi8KKyMgZGVmaW5lIENMT05FX0NISUxEX1NFVFRJRCAweDAxMDAwMDAwIC8qIFN0b3JlIFRJRCBpbiB1c2VybGV2ZWwgYnVmZmVyIGluCisJCQkJCSAgdGhlIGNoaWxkLiAgKi8KKyMgZGVmaW5lIENMT05FX05FV1VUUwkweDA0MDAwMDAwCS8qIE5ldyB1dHNuYW1lIGdyb3VwLiAgKi8KKyMgZGVmaW5lIENMT05FX05FV0lQQwkweDA4MDAwMDAwCS8qIE5ldyBpcGNzLiAgKi8KKyMgZGVmaW5lIENMT05FX05FV1VTRVIJMHgxMDAwMDAwMAkvKiBOZXcgdXNlciBuYW1lc3BhY2UuICAqLworIyBkZWZpbmUgQ0xPTkVfTkVXUElECTB4MjAwMDAwMDAJLyogTmV3IHBpZCBuYW1lc3BhY2UuICAqLworIyBkZWZpbmUgQ0xPTkVfTkVXTkVUCTB4NDAwMDAwMDAJLyogTmV3IG5ldHdvcmsgbmFtZXNwYWNlLiAgKi8KKyMgZGVmaW5lIENMT05FX0lPCTB4ODAwMDAwMDAJLyogQ2xvbmUgSS9PIGNvbnRleHQuICAqLworI2VuZGlmCisKKy8qIFRoZSBvZmZpY2lhbCBkZWZpbml0aW9uLiAgKi8KK3N0cnVjdCBzY2hlZF9wYXJhbQorICB7CisgICAgaW50IF9fc2NoZWRfcHJpb3JpdHk7CisgIH07CisKK19fQkVHSU5fREVDTFMKKworI2lmZGVmIF9fVVNFX01JU0MKKy8qIENsb25lIGN1cnJlbnQgcHJvY2Vzcy4gICovCitleHRlcm4gaW50IGNsb25lIChpbnQgKCpfX2ZuKSAodm9pZCAqX19hcmcpLCB2b2lkICpfX2NoaWxkX3N0YWNrLAorCQkgIGludCBfX2ZsYWdzLCB2b2lkICpfX2FyZywgLi4uKSBfX1RIUk9XOworCisvKiBVbnNoYXJlIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2VzLiAgKi8KK2V4dGVybiBpbnQgdW5zaGFyZSAoaW50IF9fZmxhZ3MpIF9fVEhST1c7CisKKy8qIEdldCBpbmRleCBvZiBjdXJyZW50bHkgdXNlZCBDUFUuICAqLworZXh0ZXJuIGludCBzY2hlZF9nZXRjcHUgKHZvaWQpIF9fVEhST1c7CisjZW5kaWYKKworX19FTkRfREVDTFMKKworI2VuZGlmCS8qIG5lZWQgc2NoZWRwYXJhbSAqLworCisjaWYgIWRlZmluZWQgX19kZWZpbmVkX3NjaGVkcGFyYW0gXAorICAgICYmIChkZWZpbmVkIF9fbmVlZF9zY2hlZHBhcmFtIHx8IGRlZmluZWQgX1NDSEVEX0gpCisjIGRlZmluZSBfX2RlZmluZWRfc2NoZWRwYXJhbQkxCisvKiBEYXRhIHN0cnVjdHVyZSB0byBkZXNjcmliZSBhIHByb2Nlc3MnIHNjaGVkdWxhYmlsaXR5LiAgKi8KK3N0cnVjdCBfX3NjaGVkX3BhcmFtCisgIHsKKyAgICBpbnQgX19zY2hlZF9wcmlvcml0eTsKKyAgfTsKKyMgdW5kZWYgX19uZWVkX3NjaGVkcGFyYW0KKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkIF9TQ0hFRF9IICYmICFkZWZpbmVkIF9fY3B1X3NldF90X2RlZmluZWQKKyMgZGVmaW5lIF9fY3B1X3NldF90X2RlZmluZWQKKy8qIFNpemUgZGVmaW5pdGlvbiBmb3IgQ1BVIHNldHMuICAqLworIyBkZWZpbmUgX19DUFVfU0VUU0laRQkxMDI0CisjIGRlZmluZSBfX05DUFVCSVRTCSg4ICogc2l6ZW9mIChfX2NwdV9tYXNrKSkKKworLyogVHlwZSBmb3IgYXJyYXkgZWxlbWVudHMgaW4gJ2NwdV9zZXRfdCcuICAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2NwdV9tYXNrOworCisvKiBCYXNpYyBhY2Nlc3MgZnVuY3Rpb25zLiAgKi8KKyMgZGVmaW5lIF9fQ1BVRUxUKGNwdSkJKChjcHUpIC8gX19OQ1BVQklUUykKKyMgZGVmaW5lIF9fQ1BVTUFTSyhjcHUpCSgoX19jcHVfbWFzaykgMSA8PCAoKGNwdSkgJSBfX05DUFVCSVRTKSkKKworLyogRGF0YSBzdHJ1Y3R1cmUgdG8gZGVzY3JpYmUgQ1BVIG1hc2suICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19jcHVfbWFzayBfX2JpdHNbX19DUFVfU0VUU0laRSAvIF9fTkNQVUJJVFNdOworfSBjcHVfc2V0X3Q7CisKKy8qIEFjY2VzcyBmdW5jdGlvbnMgZm9yIENQVSBtYXNrcy4gICovCisjIGlmIF9fR05VQ19QUkVSRVEgKDIsIDkxKQorIyAgZGVmaW5lIF9fQ1BVX1pFUk9fUyhzZXRzaXplLCBjcHVzZXRwKSBcCisgIGRvIF9fYnVpbHRpbl9tZW1zZXQgKGNwdXNldHAsICdcMCcsIHNldHNpemUpOyB3aGlsZSAoMCkKKyMgZWxzZQorIyAgZGVmaW5lIF9fQ1BVX1pFUk9fUyhzZXRzaXplLCBjcHVzZXRwKSBcCisgIGRvIHsJCQkJCQkJCQkgICAgICBcCisgICAgc2l6ZV90IF9faTsJCQkJCQkJCSAgICAgIFwKKyAgICBzaXplX3QgX19pbWF4ID0gKHNldHNpemUpIC8gc2l6ZW9mIChfX2NwdV9tYXNrKTsJCQkgICAgICBcCisgICAgY3B1X3NldF90ICpfX2FyciA9IChjcHVzZXRwKTsJCQkJCSAgICAgIFwKKyAgICBmb3IgKF9faSA9IDA7IF9faSA8IF9faW1heDsgKytfX2kpCQkJCQkgICAgICBcCisgICAgICBfX2Fyci0+X19iaXRzW19faV0gPSAwOwkJCQkJCSAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKyMgZW5kaWYKKyMgZGVmaW5lIF9fQ1BVX1NFVF9TKGNwdSwgc2V0c2l6ZSwgY3B1c2V0cCkgXAorICAoX19leHRlbnNpb25fXwkJCQkJCQkgICAgICBcCisgICAoeyBzaXplX3QgX19jcHUgPSAoY3B1KTsJCQkJCQkgICAgICBcCisgICAgICBfX2NwdSA8IDggKiAoc2V0c2l6ZSkJCQkJCQkgICAgICBcCisgICAgICA/ICgoY3B1c2V0cCktPl9fYml0c1tfX0NQVUVMVCAoX19jcHUpXSB8PSBfX0NQVU1BU0sgKF9fY3B1KSkgOiAwOyB9KSkKKyMgZGVmaW5lIF9fQ1BVX0NMUl9TKGNwdSwgc2V0c2l6ZSwgY3B1c2V0cCkgXAorICAoX19leHRlbnNpb25fXwkJCQkJCQkgICAgICBcCisgICAoeyBzaXplX3QgX19jcHUgPSAoY3B1KTsJCQkJCQkgICAgICBcCisgICAgICBfX2NwdSA8IDggKiAoc2V0c2l6ZSkJCQkJCQkgICAgICBcCisgICAgICA/ICgoY3B1c2V0cCktPl9fYml0c1tfX0NQVUVMVCAoX19jcHUpXSAmPSB+X19DUFVNQVNLIChfX2NwdSkpIDogMDsgfSkpCisjIGRlZmluZSBfX0NQVV9JU1NFVF9TKGNwdSwgc2V0c2l6ZSwgY3B1c2V0cCkgXAorICAoX19leHRlbnNpb25fXwkJCQkJCQkgICAgICBcCisgICAoeyBzaXplX3QgX19jcHUgPSAoY3B1KTsJCQkJCQkgICAgICBcCisgICAgICBfX2NwdSA8IDggKiAoc2V0c2l6ZSkJCQkJCQkgICAgICBcCisgICAgICA/ICgoKGNwdXNldHApLT5fX2JpdHNbX19DUFVFTFQgKF9fY3B1KV0gJiBfX0NQVU1BU0sgKF9fY3B1KSkpICE9IDAgICAgICBcCisgICAgICA6IDA7IH0pKQorCisjIGRlZmluZSBfX0NQVV9DT1VOVF9TKHNldHNpemUsIGNwdXNldHApIFwKKyAgX19zY2hlZF9jcHVjb3VudCAoc2V0c2l6ZSwgY3B1c2V0cCkKKworIyBpZiBfX0dOVUNfUFJFUkVRICgyLCA5MSkKKyMgIGRlZmluZSBfX0NQVV9FUVVBTF9TKHNldHNpemUsIGNwdXNldHAxLCBjcHVzZXRwMikgXAorICAoX19idWlsdGluX21lbWNtcCAoY3B1c2V0cDEsIGNwdXNldHAyLCBzZXRzaXplKSA9PSAwKQorIyBlbHNlCisjICBkZWZpbmUgX19DUFVfRVFVQUxfUyhzZXRzaXplLCBjcHVzZXRwMSwgY3B1c2V0cDIpIFwKKyAgKF9fZXh0ZW5zaW9uX18JCQkJCQkJICAgICAgXAorICAgKHsgY3B1X3NldF90ICpfX2FycjEgPSAoY3B1c2V0cDEpOwkJCQkJICAgICAgXAorICAgICAgY3B1X3NldF90ICpfX2FycjIgPSAoY3B1c2V0cDIpOwkJCQkJICAgICAgXAorICAgICAgc2l6ZV90IF9faW1heCA9IChzZXRzaXplKSAvIHNpemVvZiAoX19jcHVfbWFzayk7CQkJICAgICAgXAorICAgICAgc2l6ZV90IF9faTsJCQkJCQkJICAgICAgXAorICAgICAgZm9yIChfX2kgPSAwOyBfX2kgPCBfX2ltYXg7ICsrX19pKQkJCQkgICAgICBcCisJaWYgKF9fYXJyMS0+X19iaXRzW19faV0gIT0gX19hcnIyLT5fX2JpdHNbX19pXSkJCQkgICAgICBcCisJICBicmVhazsJCQkJCQkJICAgICAgXAorICAgICAgX19pID09IF9faW1heDsgfSkpCisjIGVuZGlmCisKKyMgZGVmaW5lIF9fQ1BVX09QX1Moc2V0c2l6ZSwgZGVzdHNldCwgc3Jjc2V0MSwgc3Jjc2V0Miwgb3ApIFwKKyAgKF9fZXh0ZW5zaW9uX18JCQkJCQkJICAgICAgXAorICAgKHsgY3B1X3NldF90ICpfX2Rlc3QgPSAoZGVzdHNldCk7CQkJCQkgICAgICBcCisgICAgICBjcHVfc2V0X3QgKl9fYXJyMSA9IChzcmNzZXQxKTsJCQkJCSAgICAgIFwKKyAgICAgIGNwdV9zZXRfdCAqX19hcnIyID0gKHNyY3NldDIpOwkJCQkJICAgICAgXAorICAgICAgc2l6ZV90IF9faW1heCA9IChzZXRzaXplKSAvIHNpemVvZiAoX19jcHVfbWFzayk7CQkJICAgICAgXAorICAgICAgc2l6ZV90IF9faTsJCQkJCQkJICAgICAgXAorICAgICAgZm9yIChfX2kgPSAwOyBfX2kgPCBfX2ltYXg7ICsrX19pKQkJCQkgICAgICBcCisJX19kZXN0LT5fX2JpdHNbX19pXSA9IF9fYXJyMS0+X19iaXRzW19faV0gb3AgX19hcnIyLT5fX2JpdHNbX19pXTsgICAgIFwKKyAgICAgIF9fZGVzdDsgfSkpCisKKyMgZGVmaW5lIF9fQ1BVX0FMTE9DX1NJWkUoY291bnQpIFwKKyAgKCgoKGNvdW50KSArIF9fTkNQVUJJVFMgLSAxKSAvIF9fTkNQVUJJVFMpICogc2l6ZW9mIChfX2NwdV9tYXNrKSkKKyMgZGVmaW5lIF9fQ1BVX0FMTE9DKGNvdW50KSBfX3NjaGVkX2NwdWFsbG9jIChjb3VudCkKKyMgZGVmaW5lIF9fQ1BVX0ZSRUUoY3B1c2V0KSBfX3NjaGVkX2NwdWZyZWUgKGNwdXNldCkKKworX19CRUdJTl9ERUNMUworCitleHRlcm4gaW50IF9fc2NoZWRfY3B1Y291bnQgKHNpemVfdCBfX3NldHNpemUsIGNvbnN0IGNwdV9zZXRfdCAqX19zZXRwKQorICBfX1RIUk9XOworZXh0ZXJuIGNwdV9zZXRfdCAqX19zY2hlZF9jcHVhbGxvYyAoc2l6ZV90IF9fY291bnQpIF9fVEhST1cgX193dXI7CitleHRlcm4gdm9pZCBfX3NjaGVkX2NwdWZyZWUgKGNwdV9zZXRfdCAqX19zZXQpIF9fVEhST1c7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2U3ZGVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgKQEAgLTAsMCArMSwzNSBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9TWVNfU0VMRUNUX0gKKyMgZXJyb3IgIk5ldmVyIHVzZSA8Yml0cy9zZWxlY3QuaD4gZGlyZWN0bHk7IGluY2x1ZGUgPHN5cy9zZWxlY3QuaD4gaW5zdGVhZC4iCisjZW5kaWYKKworCisvKiBXZSBkb24ndCB1c2UgYG1lbXNldCcgYmVjYXVzZSB0aGlzIHdvdWxkIHJlcXVpcmUgYSBwcm90b3R5cGUgYW5kCisgICB0aGUgYXJyYXkgaXNuJ3QgdG9vIGJpZy4gICovCisjZGVmaW5lIF9fRkRfWkVSTyhzKSBcCisgIGRvIHsJCQkJCQkJCQkgICAgICBcCisgICAgdW5zaWduZWQgaW50IF9faTsJCQkJCQkJICAgICAgXAorICAgIGZkX3NldCAqX19hcnIgPSAocyk7CQkJCQkJICAgICAgXAorICAgIGZvciAoX19pID0gMDsgX19pIDwgc2l6ZW9mIChmZF9zZXQpIC8gc2l6ZW9mIChfX2ZkX21hc2spOyArK19faSkJICAgICAgXAorICAgICAgX19GRFNfQklUUyAoX19hcnIpW19faV0gPSAwOwkJCQkJICAgICAgXAorICB9IHdoaWxlICgwKQorI2RlZmluZSBfX0ZEX1NFVChkLCBzKSAgICAgKF9fRkRTX0JJVFMgKHMpW19fRkRFTFQoZCldIHw9IF9fRkRNQVNLKGQpKQorI2RlZmluZSBfX0ZEX0NMUihkLCBzKSAgICAgKF9fRkRTX0JJVFMgKHMpW19fRkRFTFQoZCldICY9IH5fX0ZETUFTSyhkKSkKKyNkZWZpbmUgX19GRF9JU1NFVChkLCBzKSAgICgoX19GRFNfQklUUyAocylbX19GREVMVChkKV0gJiBfX0ZETUFTSyhkKSkgIT0gMCkKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3NlbS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc2VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE5MzUwMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3NlbS5oCkBAIC0wLDAgKzEsODcgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfU1lTX1NFTV9ICisjIGVycm9yICJOZXZlciBpbmNsdWRlIDxiaXRzL3NlbS5oPiBkaXJlY3RseTsgdXNlIDxzeXMvc2VtLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworLyogRmxhZ3MgZm9yIGBzZW1vcCcuICAqLworI2RlZmluZSBTRU1fVU5ETwkweDEwMDAJCS8qIHVuZG8gdGhlIG9wZXJhdGlvbiBvbiBleGl0ICovCisKKy8qIENvbW1hbmRzIGZvciBgc2VtY3RsJy4gICovCisjZGVmaW5lIEdFVFBJRAkJMTEJCS8qIGdldCBzZW1waWQgKi8KKyNkZWZpbmUgR0VUVkFMCQkxMgkJLyogZ2V0IHNlbXZhbCAqLworI2RlZmluZSBHRVRBTEwJCTEzCQkvKiBnZXQgYWxsIHNlbXZhbCdzICovCisjZGVmaW5lIEdFVE5DTlQJCTE0CQkvKiBnZXQgc2VtbmNudCAqLworI2RlZmluZSBHRVRaQ05UCQkxNQkJLyogZ2V0IHNlbXpjbnQgKi8KKyNkZWZpbmUgU0VUVkFMCQkxNgkJLyogc2V0IHNlbXZhbCAqLworI2RlZmluZSBTRVRBTEwJCTE3CQkvKiBzZXQgYWxsIHNlbXZhbCdzICovCisKKworLyogRGF0YSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBhIHNldCBvZiBzZW1hcGhvcmVzLiAgKi8KK3N0cnVjdCBzZW1pZF9kcworeworICBzdHJ1Y3QgaXBjX3Blcm0gc2VtX3Blcm07CQkvKiBvcGVyYXRpb24gcGVybWlzc2lvbiBzdHJ1Y3QgKi8KKyAgX190aW1lX3Qgc2VtX290aW1lOwkJCS8qIGxhc3Qgc2Vtb3AoKSB0aW1lICovCisgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMTsKKyAgX190aW1lX3Qgc2VtX2N0aW1lOwkJCS8qIGxhc3QgdGltZSBjaGFuZ2VkIGJ5IHNlbWN0bCgpICovCisgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMjsKKyAgdW5zaWduZWQgbG9uZyBpbnQgc2VtX25zZW1zOwkJLyogbnVtYmVyIG9mIHNlbWFwaG9yZXMgaW4gc2V0ICovCisgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMzsKKyAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQ0OworfTsKKworLyogVGhlIHVzZXIgc2hvdWxkIGRlZmluZSBhIHVuaW9uIGxpa2UgdGhlIGZvbGxvd2luZyB0byB1c2UgaXQgZm9yIGFyZ3VtZW50cworICAgZm9yIGBzZW1jdGwnLgorCisgICB1bmlvbiBzZW11bgorICAgeworICAgICBpbnQgdmFsOwkJCQk8PSB2YWx1ZSBmb3IgU0VUVkFMCisgICAgIHN0cnVjdCBzZW1pZF9kcyAqYnVmOwkJPD0gYnVmZmVyIGZvciBJUENfU1RBVCAmIElQQ19TRVQKKyAgICAgdW5zaWduZWQgc2hvcnQgaW50ICphcnJheTsJCTw9IGFycmF5IGZvciBHRVRBTEwgJiBTRVRBTEwKKyAgICAgc3RydWN0IHNlbWluZm8gKl9fYnVmOwkJPD0gYnVmZmVyIGZvciBJUENfSU5GTworICAgfTsKKworICAgUHJldmlvdXMgdmVyc2lvbnMgb2YgdGhpcyBmaWxlIHVzZWQgdG8gZGVmaW5lIHRoaXMgdW5pb24gYnV0IHRoaXMgaXMKKyAgIGluY29ycmVjdC4gIE9uZSBjYW4gdGVzdCB0aGUgbWFjcm8gX1NFTV9TRU1VTl9VTkRFRklORUQgdG8gc2VlIHdoZXRoZXIKKyAgIG9uZSBtdXN0IGRlZmluZSB0aGUgdW5pb24gb3Igbm90LiAgKi8KKyNkZWZpbmUgX1NFTV9TRU1VTl9VTkRFRklORUQJMQorCisjaWZkZWYgX19VU0VfTUlTQworCisvKiBpcGNzIGN0bCBjbWRzICovCisjIGRlZmluZSBTRU1fU1RBVCAxOAorIyBkZWZpbmUgU0VNX0lORk8gMTkKKworc3RydWN0ICBzZW1pbmZvCit7CisgIGludCBzZW1tYXA7CisgIGludCBzZW1tbmk7CisgIGludCBzZW1tbnM7CisgIGludCBzZW1tbnU7CisgIGludCBzZW1tc2w7CisgIGludCBzZW1vcG07CisgIGludCBzZW11bWU7CisgIGludCBzZW11c3o7CisgIGludCBzZW12bXg7CisgIGludCBzZW1hZW07Cit9OworCisjZW5kaWYgLyogX19VU0VfTUlTQyAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc2VtYXBob3JlLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zZW1hcGhvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWRmYWMyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc2VtYXBob3JlLmgKQEAgLTAsMCArMSwzNSBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA1LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9TRU1BUEhPUkVfSAorIyBlcnJvciAiTmV2ZXIgdXNlIDxiaXRzL3NlbWFwaG9yZS5oPiBkaXJlY3RseTsgaW5jbHVkZSA8c2VtYXBob3JlLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKworI2RlZmluZSBfX1NJWkVPRl9TRU1fVAkxNgorCisKKy8qIFZhbHVlIHJldHVybmVkIGlmIGBzZW1fb3BlbicgZmFpbGVkLiAgKi8KKyNkZWZpbmUgU0VNX0ZBSUxFRCAgICAgICgoc2VtX3QgKikgMCkKKworCit0eXBlZGVmIHVuaW9uCit7CisgIGNoYXIgX19zaXplW19fU0laRU9GX1NFTV9UXTsKKyAgbG9uZyBpbnQgX19hbGlnbjsKK30gc2VtX3Q7CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zZXRqbXAuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3NldGptcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNzY3OWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zZXRqbXAuaApAQCAtMCwwICsxLDM4IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qIERlZmluZSB0aGUgbWFjaGluZS1kZXBlbmRlbnQgdHlwZSBgam1wX2J1ZicuICBBUk0gRUFCSSB2ZXJzaW9uLiAgKi8KKworI2lmbmRlZiBfQklUU19TRVRKTVBfSAorI2RlZmluZSBfQklUU19TRVRKTVBfSCAxCisKKyNpZiAhZGVmaW5lZCBfU0VUSk1QX0ggJiYgIWRlZmluZWQgX1BUSFJFQURfSAorIyBlcnJvciAiTmV2ZXIgaW5jbHVkZSA8Yml0cy9zZXRqbXAuaD4gZGlyZWN0bHk7IHVzZSA8c2V0am1wLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX0FTTQorLyogVGhlIGV4YWN0IHNldCBvZiByZWdpc3RlcnMgc2F2ZWQgbWF5IGRlcGVuZCBvbiB0aGUgcGFydGljdWxhciBjb3JlCisgICBpbiB1c2UsIGFzIHNvbWUgY29wcm9jZXNzb3IgcmVnaXN0ZXJzIG1heSBuZWVkIHRvIGJlIHNhdmVkLiAgVGhlIEMKKyAgIExpYnJhcnkgQUJJIHJlcXVpcmVzIHRoYXQgdGhlIGJ1ZmZlciBiZSA4LWJ5dGUgYWxpZ25lZCwgYW5kCisgICByZWNvbW1lbmRzIHRoYXQgdGhlIGJ1ZmZlciBjb250YWluIDY0IHdvcmRzLiAgVGhlIGZpcnN0IDI4IHdvcmRzCisgICBhcmUgb2NjdXBpZWQgYnkgdjEtdjYsIHNsLCBmcCwgc3AsIHBjLCBkOC1kMTUsIGFuZCBmcHNjci4gIChOb3RlCisgICB0aGF0IGQ4LTE1IHJlcXVpcmUgMTcgd29yZHMsIGR1ZSB0byB0aGUgdXNlIG9mIGZzdG14LikgICovCit0eXBlZGVmIGludCBfX2ptcF9idWZbNjRdIF9fYXR0cmlidXRlX18oKGFsaWduZWQgKDgpKSk7CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zaG0uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3NobS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYWEyODcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zaG0uaApAQCAtMCwwICsxLDEwNCBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk1LDE5OTYsMTk5NywyMDAwLDIwMDIsMjAwNCwyMDA4CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfU1lTX1NITV9ICisjIGVycm9yICJOZXZlciBpbmNsdWRlIDxiaXRzL3NobS5oPiBkaXJlY3RseTsgdXNlIDxzeXMvc2htLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpbmNsdWRlIDxiaXRzL3R5cGVzLmg+CisKKy8qIFBlcm1pc3Npb24gZmxhZyBmb3Igc2htZ2V0LiAgKi8KKyNkZWZpbmUgU0hNX1IJCTA0MDAJCS8qIG9yIFNfSVJVR08gZnJvbSA8bGludXgvc3RhdC5oPiAqLworI2RlZmluZSBTSE1fVwkJMDIwMAkJLyogb3IgU19JV1VHTyBmcm9tIDxsaW51eC9zdGF0Lmg+ICovCisKKy8qIEZsYWdzIGZvciBgc2htYXQnLiAgKi8KKyNkZWZpbmUgU0hNX1JET05MWQkwMTAwMDAJCS8qIGF0dGFjaCByZWFkLW9ubHkgZWxzZSByZWFkLXdyaXRlICovCisjZGVmaW5lIFNITV9STkQJCTAyMDAwMAkJLyogcm91bmQgYXR0YWNoIGFkZHJlc3MgdG8gU0hNTEJBICovCisjZGVmaW5lIFNITV9SRU1BUAkwNDAwMDAJCS8qIHRha2Utb3ZlciByZWdpb24gb24gYXR0YWNoICovCisKKy8qIENvbW1hbmRzIGZvciBgc2htY3RsJy4gICovCisjZGVmaW5lIFNITV9MT0NLCTExCQkvKiBsb2NrIHNlZ21lbnQgKHJvb3Qgb25seSkgKi8KKyNkZWZpbmUgU0hNX1VOTE9DSwkxMgkJLyogdW5sb2NrIHNlZ21lbnQgKHJvb3Qgb25seSkgKi8KKworX19CRUdJTl9ERUNMUworCisvKiBTZWdtZW50IGxvdyBib3VuZGFyeSBhZGRyZXNzIG11bHRpcGxlLiAgKi8KKyNkZWZpbmUgU0hNTEJBCQkoX19nZXRwYWdlc2l6ZSAoKSA8PCAyKQorZXh0ZXJuIGludCBfX2dldHBhZ2VzaXplICh2b2lkKSBfX1RIUk9XIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKKworCisvKiBUeXBlIHRvIGNvdW50IG51bWJlciBvZiBhdHRhY2hlcy4gICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHNobWF0dF90OworCisvKiBEYXRhIHN0cnVjdHVyZSBkZXNjcmliaW5nIGEgc2hhcmVkIG1lbW9yeSBzZWdtZW50LiAgKi8KK3N0cnVjdCBzaG1pZF9kcworICB7CisgICAgc3RydWN0IGlwY19wZXJtIHNobV9wZXJtOwkJLyogb3BlcmF0aW9uIHBlcm1pc3Npb24gc3RydWN0ICovCisgICAgc2l6ZV90IHNobV9zZWdzejsJCQkvKiBzaXplIG9mIHNlZ21lbnQgaW4gYnl0ZXMgKi8KKyAgICBfX3RpbWVfdCBzaG1fYXRpbWU7CQkJLyogdGltZSBvZiBsYXN0IHNobWF0KCkgKi8KKyAgICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDE7CisgICAgX190aW1lX3Qgc2htX2R0aW1lOwkJCS8qIHRpbWUgb2YgbGFzdCBzaG1kdCgpICovCisgICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQyOworICAgIF9fdGltZV90IHNobV9jdGltZTsJCQkvKiB0aW1lIG9mIGxhc3QgY2hhbmdlIGJ5IHNobWN0bCgpICovCisgICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQzOworICAgIF9fcGlkX3Qgc2htX2NwaWQ7CQkJLyogcGlkIG9mIGNyZWF0b3IgKi8KKyAgICBfX3BpZF90IHNobV9scGlkOwkJCS8qIHBpZCBvZiBsYXN0IHNobW9wICovCisgICAgc2htYXR0X3Qgc2htX25hdHRjaDsJCS8qIG51bWJlciBvZiBjdXJyZW50IGF0dGFjaGVzICovCisgICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQ0OworICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkNTsKKyAgfTsKKworI2lmZGVmIF9fVVNFX01JU0MKKworLyogaXBjcyBjdGwgY29tbWFuZHMgKi8KKyMgZGVmaW5lIFNITV9TVEFUIAkxMworIyBkZWZpbmUgU0hNX0lORk8gCTE0CisKKy8qIHNobV9tb2RlIHVwcGVyIGJ5dGUgZmxhZ3MgKi8KKyMgZGVmaW5lIFNITV9ERVNUCTAxMDAwCS8qIHNlZ21lbnQgd2lsbCBiZSBkZXN0cm95ZWQgb24gbGFzdCBkZXRhY2ggKi8KKyMgZGVmaW5lIFNITV9MT0NLRUQJMDIwMDAgICAvKiBzZWdtZW50IHdpbGwgbm90IGJlIHN3YXBwZWQgKi8KKyMgZGVmaW5lIFNITV9IVUdFVExCCTA0MDAwCS8qIHNlZ21lbnQgaXMgbWFwcGVkIHZpYSBodWdldGxiICovCisjIGRlZmluZSBTSE1fTk9SRVNFUlZFCTAxMDAwMAkvKiBkb24ndCBjaGVjayBmb3IgcmVzZXJ2YXRpb25zICovCisKK3N0cnVjdAlzaG1pbmZvCisgIHsKKyAgICB1bnNpZ25lZCBsb25nIGludCBzaG1tYXg7CisgICAgdW5zaWduZWQgbG9uZyBpbnQgc2htbWluOworICAgIHVuc2lnbmVkIGxvbmcgaW50IHNobW1uaTsKKyAgICB1bnNpZ25lZCBsb25nIGludCBzaG1zZWc7CisgICAgdW5zaWduZWQgbG9uZyBpbnQgc2htYWxsOworICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMTsKKyAgICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDI7CisgICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQzOworICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkNDsKKyAgfTsKKworc3RydWN0IHNobV9pbmZvCisgIHsKKyAgICBpbnQgdXNlZF9pZHM7CisgICAgdW5zaWduZWQgbG9uZyBpbnQgc2htX3RvdDsJLyogdG90YWwgYWxsb2NhdGVkIHNobSAqLworICAgIHVuc2lnbmVkIGxvbmcgaW50IHNobV9yc3M7CS8qIHRvdGFsIHJlc2lkZW50IHNobSAqLworICAgIHVuc2lnbmVkIGxvbmcgaW50IHNobV9zd3A7CS8qIHRvdGFsIHN3YXBwZWQgc2htICovCisgICAgdW5zaWduZWQgbG9uZyBpbnQgc3dhcF9hdHRlbXB0czsKKyAgICB1bnNpZ25lZCBsb25nIGludCBzd2FwX3N1Y2Nlc3NlczsKKyAgfTsKKworI2VuZGlmIC8qIF9fVVNFX01JU0MgKi8KKworX19FTkRfREVDTFMKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3NpZ2FjdGlvbi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc2lnYWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhjYzUzMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3NpZ2FjdGlvbi5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qIFRoZSBwcm9wZXIgZGVmaW5pdGlvbnMgZm9yIExpbnV4J3Mgc2lnYWN0aW9uLgorICAgQ29weXJpZ2h0IChDKSAxOTkzLTE5OTksIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1NJR05BTF9ICisjIGVycm9yICJOZXZlciBpbmNsdWRlIDxiaXRzL3NpZ2FjdGlvbi5oPiBkaXJlY3RseTsgdXNlIDxzaWduYWwuaD4gaW5zdGVhZC4iCisjZW5kaWYKKworLyogU3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIGFjdGlvbiB0byBiZSB0YWtlbiB3aGVuIGEgc2lnbmFsIGFycml2ZXMuICAqLworc3RydWN0IHNpZ2FjdGlvbgorICB7CisgICAgLyogU2lnbmFsIGhhbmRsZXIuICAqLworI2lmZGVmIF9fVVNFX1BPU0lYMTk5MzA5CisgICAgdW5pb24KKyAgICAgIHsKKwkvKiBVc2VkIGlmIFNBX1NJR0lORk8gaXMgbm90IHNldC4gICovCisJX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKKwkvKiBVc2VkIGlmIFNBX1NJR0lORk8gaXMgc2V0LiAgKi8KKwl2b2lkICgqc2Ffc2lnYWN0aW9uKSAoaW50LCBzaWdpbmZvX3QgKiwgdm9pZCAqKTsKKyAgICAgIH0KKyAgICBfX3NpZ2FjdGlvbl9oYW5kbGVyOworIyBkZWZpbmUgc2FfaGFuZGxlcglfX3NpZ2FjdGlvbl9oYW5kbGVyLnNhX2hhbmRsZXIKKyMgZGVmaW5lIHNhX3NpZ2FjdGlvbglfX3NpZ2FjdGlvbl9oYW5kbGVyLnNhX3NpZ2FjdGlvbgorI2Vsc2UKKyAgICBfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOworI2VuZGlmCisKKyAgICAvKiBBZGRpdGlvbmFsIHNldCBvZiBzaWduYWxzIHRvIGJlIGJsb2NrZWQuICAqLworICAgIF9fc2lnc2V0X3Qgc2FfbWFzazsKKworICAgIC8qIFNwZWNpYWwgZmxhZ3MuICAqLworICAgIGludCBzYV9mbGFnczsKKworICAgIC8qIFJlc3RvcmUgaGFuZGxlci4gICovCisgICAgdm9pZCAoKnNhX3Jlc3RvcmVyKSAodm9pZCk7CisgIH07CisKKy8qIEJpdHMgaW4gYHNhX2ZsYWdzJy4gICovCisjZGVmaW5lCVNBX05PQ0xEU1RPUCAgMQkJIC8qIERvbid0IHNlbmQgU0lHQ0hMRCB3aGVuIGNoaWxkcmVuIHN0b3AuICAqLworI2RlZmluZSBTQV9OT0NMRFdBSVQgIDIJCSAvKiBEb24ndCBjcmVhdGUgem9tYmllIG9uIGNoaWxkIGRlYXRoLiAgKi8KKyNkZWZpbmUgU0FfU0lHSU5GTyAgICA0CQkgLyogSW52b2tlIHNpZ25hbC1jYXRjaGluZyBmdW5jdGlvbiB3aXRoCisJCQkJICAgIHRocmVlIGFyZ3VtZW50cyBpbnN0ZWFkIG9mIG9uZS4gICovCisjaWYgZGVmaW5lZCBfX1VTRV9VTklYOTggfHwgZGVmaW5lZCBfX1VTRV9NSVNDCisjIGRlZmluZSBTQV9PTlNUQUNLICAgMHgwODAwMDAwMCAvKiBVc2Ugc2lnbmFsIHN0YWNrIGJ5IHVzaW5nIGBzYV9yZXN0b3JlcicuICovCisjIGRlZmluZSBTQV9SRVNUQVJUICAgMHgxMDAwMDAwMCAvKiBSZXN0YXJ0IHN5c2NhbGwgb24gc2lnbmFsIHJldHVybi4gICovCisjIGRlZmluZSBTQV9OT0RFRkVSICAgMHg0MDAwMDAwMCAvKiBEb24ndCBhdXRvbWF0aWNhbGx5IGJsb2NrIHRoZSBzaWduYWwgd2hlbgorCQkJCSAgICBpdHMgaGFuZGxlciBpcyBiZWluZyBleGVjdXRlZC4gICovCisjIGRlZmluZSBTQV9SRVNFVEhBTkQgMHg4MDAwMDAwMCAvKiBSZXNldCB0byBTSUdfREZMIG9uIGVudHJ5IHRvIGhhbmRsZXIuICAqLworI2VuZGlmCisjaWZkZWYgX19VU0VfTUlTQworIyBkZWZpbmUgU0FfSU5URVJSVVBUIDB4MjAwMDAwMDAgLyogSGlzdG9yaWNhbCBuby1vcC4gICovCisKKy8qIFNvbWUgYWxpYXNlcyBmb3IgdGhlIFNBXyBjb25zdGFudHMuICAqLworIyBkZWZpbmUgU0FfTk9NQVNLICAgIFNBX05PREVGRVIKKyMgZGVmaW5lIFNBX09ORVNIT1QgICBTQV9SRVNFVEhBTkQKKyMgZGVmaW5lIFNBX1NUQUNLICAgICBTQV9PTlNUQUNLCisjZW5kaWYKKworLyogVmFsdWVzIGZvciB0aGUgSE9XIGFyZ3VtZW50IHRvIGBzaWdwcm9jbWFzaycuICAqLworI2RlZmluZQlTSUdfQkxPQ0sgICAgIDAJCSAvKiBCbG9jayBzaWduYWxzLiAgKi8KKyNkZWZpbmUJU0lHX1VOQkxPQ0sgICAxCQkgLyogVW5ibG9jayBzaWduYWxzLiAgKi8KKyNkZWZpbmUJU0lHX1NFVE1BU0sgICAyCQkgLyogU2V0IHRoZSBzZXQgb2YgYmxvY2tlZCBzaWduYWxzLiAgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3NpZ2NvbnRleHQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3NpZ2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2RjZjk0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc2lnY29udGV4dC5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmICFkZWZpbmVkIF9TSUdOQUxfSCAmJiAhZGVmaW5lZCBfU1lTX1VDT05URVhUX0gKKyMgZXJyb3IgIk5ldmVyIHVzZSA8Yml0cy9zaWdjb250ZXh0Lmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxzaWduYWwuaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBzaWdjb250ZXh0X3N0cnVjdAorLyogS2VybmVsIGhlYWRlcnMgYmVmb3JlIDIuMS4xIGRlZmluZSBhIHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCwgYnV0CisgICB3ZSBuZWVkIHNpZ2NvbnRleHQuICAqLworIyBkZWZpbmUgc2lnY29udGV4dF9zdHJ1Y3Qgc2lnY29udGV4dAorCisjIGluY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2UzMTlkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc2lnaW5mby5oCkBAIC0wLDAgKzEsMzEzIEBACisvKiBzaWdpbmZvX3QsIHNpZ2V2ZW50IGFuZCBjb25zdGFudHMuICBMaW51eCB2ZXJzaW9uLgorICAgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZiAhZGVmaW5lZCBfU0lHTkFMX0ggJiYgIWRlZmluZWQgX19uZWVkX3NpZ2luZm9fdCBcCisgICAgJiYgIWRlZmluZWQgX19uZWVkX3NpZ2V2ZW50X3QKKyMgZXJyb3IgIk5ldmVyIGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5LiAgVXNlIDxzaWduYWwuaD4gaW5zdGVhZCIKKyNlbmRpZgorCisjaW5jbHVkZSA8Yml0cy93b3Jkc2l6ZS5oPgorCisjaWYgKCFkZWZpbmVkIF9faGF2ZV9zaWd2YWxfdCBcCisgICAgICYmIChkZWZpbmVkIF9TSUdOQUxfSCB8fCBkZWZpbmVkIF9fbmVlZF9zaWdpbmZvX3QgXAorCSB8fCBkZWZpbmVkIF9fbmVlZF9zaWdldmVudF90KSkKKyMgZGVmaW5lIF9faGF2ZV9zaWd2YWxfdAkxCisKKy8qIFR5cGUgZm9yIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgc2lnbmFsLiAgKi8KK3R5cGVkZWYgdW5pb24gc2lndmFsCisgIHsKKyAgICBpbnQgc2l2YWxfaW50OworICAgIHZvaWQgKnNpdmFsX3B0cjsKKyAgfSBzaWd2YWxfdDsKKyNlbmRpZgorCisjaWYgKCFkZWZpbmVkIF9faGF2ZV9zaWdpbmZvX3QgXAorICAgICAmJiAoZGVmaW5lZCBfU0lHTkFMX0ggfHwgZGVmaW5lZCBfX25lZWRfc2lnaW5mb190KSkKKyMgZGVmaW5lIF9faGF2ZV9zaWdpbmZvX3QJMQorCisjIGRlZmluZSBfX1NJX01BWF9TSVpFICAgICAxMjgKKyMgaWYgX19XT1JEU0laRSA9PSA2NAorIyAgZGVmaW5lIF9fU0lfUEFEX1NJWkUgICAgICgoX19TSV9NQVhfU0laRSAvIHNpemVvZiAoaW50KSkgLSA0KQorIyBlbHNlCisjICBkZWZpbmUgX19TSV9QQURfU0laRSAgICAgKChfX1NJX01BWF9TSVpFIC8gc2l6ZW9mIChpbnQpKSAtIDMpCisjIGVuZGlmCisKK3R5cGVkZWYgc3RydWN0IHNpZ2luZm8KKyAgeworICAgIGludCBzaV9zaWdubzsJCS8qIFNpZ25hbCBudW1iZXIuICAqLworICAgIGludCBzaV9lcnJubzsJCS8qIElmIG5vbi16ZXJvLCBhbiBlcnJubyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGgKKwkJCQkgICB0aGlzIHNpZ25hbCwgYXMgZGVmaW5lZCBpbiA8ZXJybm8uaD4uICAqLworICAgIGludCBzaV9jb2RlOwkJLyogU2lnbmFsIGNvZGUuICAqLworCisgICAgdW5pb24KKyAgICAgIHsKKwlpbnQgX3BhZFtfX1NJX1BBRF9TSVpFXTsKKworCSAvKiBraWxsKCkuICAqLworCXN0cnVjdAorCSAgeworCSAgICBfX3BpZF90IHNpX3BpZDsJLyogU2VuZGluZyBwcm9jZXNzIElELiAgKi8KKwkgICAgX191aWRfdCBzaV91aWQ7CS8qIFJlYWwgdXNlciBJRCBvZiBzZW5kaW5nIHByb2Nlc3MuICAqLworCSAgfSBfa2lsbDsKKworCS8qIFBPU0lYLjFiIHRpbWVycy4gICovCisJc3RydWN0CisJICB7CisJICAgIGludCBzaV90aWQ7CQkvKiBUaW1lciBJRC4gICovCisJICAgIGludCBzaV9vdmVycnVuOwkvKiBPdmVycnVuIGNvdW50LiAgKi8KKwkgICAgc2lndmFsX3Qgc2lfc2lndmFsOwkvKiBTaWduYWwgdmFsdWUuICAqLworCSAgfSBfdGltZXI7CisKKwkvKiBQT1NJWC4xYiBzaWduYWxzLiAgKi8KKwlzdHJ1Y3QKKwkgIHsKKwkgICAgX19waWRfdCBzaV9waWQ7CS8qIFNlbmRpbmcgcHJvY2VzcyBJRC4gICovCisJICAgIF9fdWlkX3Qgc2lfdWlkOwkvKiBSZWFsIHVzZXIgSUQgb2Ygc2VuZGluZyBwcm9jZXNzLiAgKi8KKwkgICAgc2lndmFsX3Qgc2lfc2lndmFsOwkvKiBTaWduYWwgdmFsdWUuICAqLworCSAgfSBfcnQ7CisKKwkvKiBTSUdDSExELiAgKi8KKwlzdHJ1Y3QKKwkgIHsKKwkgICAgX19waWRfdCBzaV9waWQ7CS8qIFdoaWNoIGNoaWxkLiAgKi8KKwkgICAgX191aWRfdCBzaV91aWQ7CS8qIFJlYWwgdXNlciBJRCBvZiBzZW5kaW5nIHByb2Nlc3MuICAqLworCSAgICBpbnQgc2lfc3RhdHVzOwkvKiBFeGl0IHZhbHVlIG9yIHNpZ25hbC4gICovCisJICAgIF9fY2xvY2tfdCBzaV91dGltZTsKKwkgICAgX19jbG9ja190IHNpX3N0aW1lOworCSAgfSBfc2lnY2hsZDsKKworCS8qIFNJR0lMTCwgU0lHRlBFLCBTSUdTRUdWLCBTSUdCVVMuICAqLworCXN0cnVjdAorCSAgeworCSAgICB2b2lkICpzaV9hZGRyOwkvKiBGYXVsdGluZyBpbnNuL21lbW9yeSByZWYuICAqLworCSAgfSBfc2lnZmF1bHQ7CisKKwkvKiBTSUdQT0xMLiAgKi8KKwlzdHJ1Y3QKKwkgIHsKKwkgICAgbG9uZyBpbnQgc2lfYmFuZDsJLyogQmFuZCBldmVudCBmb3IgU0lHUE9MTC4gICovCisJICAgIGludCBzaV9mZDsKKwkgIH0gX3NpZ3BvbGw7CisgICAgICB9IF9zaWZpZWxkczsKKyAgfSBzaWdpbmZvX3Q7CisKKworLyogWC9PcGVuIHJlcXVpcmVzIHNvbWUgbW9yZSBmaWVsZHMgd2l0aCBmaXhlZCBuYW1lcy4gICovCisjIGRlZmluZSBzaV9waWQJCV9zaWZpZWxkcy5fa2lsbC5zaV9waWQKKyMgZGVmaW5lIHNpX3VpZAkJX3NpZmllbGRzLl9raWxsLnNpX3VpZAorIyBkZWZpbmUgc2lfdGltZXJpZAlfc2lmaWVsZHMuX3RpbWVyLnNpX3RpZAorIyBkZWZpbmUgc2lfb3ZlcnJ1bglfc2lmaWVsZHMuX3RpbWVyLnNpX292ZXJydW4KKyMgZGVmaW5lIHNpX3N0YXR1cwlfc2lmaWVsZHMuX3NpZ2NobGQuc2lfc3RhdHVzCisjIGRlZmluZSBzaV91dGltZQlfc2lmaWVsZHMuX3NpZ2NobGQuc2lfdXRpbWUKKyMgZGVmaW5lIHNpX3N0aW1lCV9zaWZpZWxkcy5fc2lnY2hsZC5zaV9zdGltZQorIyBkZWZpbmUgc2lfdmFsdWUJX3NpZmllbGRzLl9ydC5zaV9zaWd2YWwKKyMgZGVmaW5lIHNpX2ludAkJX3NpZmllbGRzLl9ydC5zaV9zaWd2YWwuc2l2YWxfaW50CisjIGRlZmluZSBzaV9wdHIJCV9zaWZpZWxkcy5fcnQuc2lfc2lndmFsLnNpdmFsX3B0cgorIyBkZWZpbmUgc2lfYWRkcglfc2lmaWVsZHMuX3NpZ2ZhdWx0LnNpX2FkZHIKKyMgZGVmaW5lIHNpX2JhbmQJX3NpZmllbGRzLl9zaWdwb2xsLnNpX2JhbmQKKyMgZGVmaW5lIHNpX2ZkCQlfc2lmaWVsZHMuX3NpZ3BvbGwuc2lfZmQKKworCisvKiBWYWx1ZXMgZm9yIGBzaV9jb2RlJy4gIFBvc2l0aXZlIHZhbHVlcyBhcmUgcmVzZXJ2ZWQgZm9yIGtlcm5lbC1nZW5lcmF0ZWQKKyAgIHNpZ25hbHMuICAqLworZW51bQoreworICBTSV9BU1lOQ05MID0gLTYwLAkJLyogU2VudCBieSBhc3luY2ggbmFtZSBsb29rdXAgY29tcGxldGlvbi4gICovCisjIGRlZmluZSBTSV9BU1lOQ05MCVNJX0FTWU5DTkwKKyAgU0lfVEtJTEwgPSAtNiwJCS8qIFNlbnQgYnkgdGtpbGwuICAqLworIyBkZWZpbmUgU0lfVEtJTEwJU0lfVEtJTEwKKyAgU0lfU0lHSU8sCQkJLyogU2VudCBieSBxdWV1ZWQgU0lHSU8uICovCisjIGRlZmluZSBTSV9TSUdJTwlTSV9TSUdJTworICBTSV9BU1lOQ0lPLAkJCS8qIFNlbnQgYnkgQUlPIGNvbXBsZXRpb24uICAqLworIyBkZWZpbmUgU0lfQVNZTkNJTwlTSV9BU1lOQ0lPCisgIFNJX01FU0dRLAkJCS8qIFNlbnQgYnkgcmVhbCB0aW1lIG1lc3Egc3RhdGUgY2hhbmdlLiAgKi8KKyMgZGVmaW5lIFNJX01FU0dRCVNJX01FU0dRCisgIFNJX1RJTUVSLAkJCS8qIFNlbnQgYnkgdGltZXIgZXhwaXJhdGlvbi4gICovCisjIGRlZmluZSBTSV9USU1FUglTSV9USU1FUgorICBTSV9RVUVVRSwJCQkvKiBTZW50IGJ5IHNpZ3F1ZXVlLiAgKi8KKyMgZGVmaW5lIFNJX1FVRVVFCVNJX1FVRVVFCisgIFNJX1VTRVIsCQkJLyogU2VudCBieSBraWxsLCBzaWdzZW5kLCByYWlzZS4gICovCisjIGRlZmluZSBTSV9VU0VSCVNJX1VTRVIKKyAgU0lfS0VSTkVMID0gMHg4MAkJLyogU2VuZCBieSBrZXJuZWwuICAqLworI2RlZmluZSBTSV9LRVJORUwJU0lfS0VSTkVMCit9OworCisKKy8qIGBzaV9jb2RlJyB2YWx1ZXMgZm9yIFNJR0lMTCBzaWduYWwuICAqLworZW51bQoreworICBJTExfSUxMT1BDID0gMSwJCS8qIElsbGVnYWwgb3Bjb2RlLiAgKi8KKyMgZGVmaW5lIElMTF9JTExPUEMJSUxMX0lMTE9QQworICBJTExfSUxMT1BOLAkJCS8qIElsbGVnYWwgb3BlcmFuZC4gICovCisjIGRlZmluZSBJTExfSUxMT1BOCUlMTF9JTExPUE4KKyAgSUxMX0lMTEFEUiwJCQkvKiBJbGxlZ2FsIGFkZHJlc3NpbmcgbW9kZS4gICovCisjIGRlZmluZSBJTExfSUxMQURSCUlMTF9JTExBRFIKKyAgSUxMX0lMTFRSUCwJCQkvKiBJbGxlZ2FsIHRyYXAuICovCisjIGRlZmluZSBJTExfSUxMVFJQCUlMTF9JTExUUlAKKyAgSUxMX1BSVk9QQywJCQkvKiBQcml2aWxlZ2VkIG9wY29kZS4gICovCisjIGRlZmluZSBJTExfUFJWT1BDCUlMTF9QUlZPUEMKKyAgSUxMX1BSVlJFRywJCQkvKiBQcml2aWxlZ2VkIHJlZ2lzdGVyLiAgKi8KKyMgZGVmaW5lIElMTF9QUlZSRUcJSUxMX1BSVlJFRworICBJTExfQ09QUk9DLAkJCS8qIENvcHJvY2Vzc29yIGVycm9yLiAgKi8KKyMgZGVmaW5lIElMTF9DT1BST0MJSUxMX0NPUFJPQworICBJTExfQkFEU1RLCQkJLyogSW50ZXJuYWwgc3RhY2sgZXJyb3IuICAqLworIyBkZWZpbmUgSUxMX0JBRFNUSwlJTExfQkFEU1RLCit9OworCisvKiBgc2lfY29kZScgdmFsdWVzIGZvciBTSUdGUEUgc2lnbmFsLiAgKi8KK2VudW0KK3sKKyAgRlBFX0lOVERJViA9IDEsCQkvKiBJbnRlZ2VyIGRpdmlkZSBieSB6ZXJvLiAgKi8KKyMgZGVmaW5lIEZQRV9JTlRESVYJRlBFX0lOVERJVgorICBGUEVfSU5UT1ZGLAkJCS8qIEludGVnZXIgb3ZlcmZsb3cuICAqLworIyBkZWZpbmUgRlBFX0lOVE9WRglGUEVfSU5UT1ZGCisgIEZQRV9GTFRESVYsCQkJLyogRmxvYXRpbmcgcG9pbnQgZGl2aWRlIGJ5IHplcm8uICAqLworIyBkZWZpbmUgRlBFX0ZMVERJVglGUEVfRkxURElWCisgIEZQRV9GTFRPVkYsCQkJLyogRmxvYXRpbmcgcG9pbnQgb3ZlcmZsb3cuICAqLworIyBkZWZpbmUgRlBFX0ZMVE9WRglGUEVfRkxUT1ZGCisgIEZQRV9GTFRVTkQsCQkJLyogRmxvYXRpbmcgcG9pbnQgdW5kZXJmbG93LiAgKi8KKyMgZGVmaW5lIEZQRV9GTFRVTkQJRlBFX0ZMVFVORAorICBGUEVfRkxUUkVTLAkJCS8qIEZsb2F0aW5nIHBvaW50IGluZXhhY3QgcmVzdWx0LiAgKi8KKyMgZGVmaW5lIEZQRV9GTFRSRVMJRlBFX0ZMVFJFUworICBGUEVfRkxUSU5WLAkJCS8qIEZsb2F0aW5nIHBvaW50IGludmFsaWQgb3BlcmF0aW9uLiAgKi8KKyMgZGVmaW5lIEZQRV9GTFRJTlYJRlBFX0ZMVElOVgorICBGUEVfRkxUU1VCCQkJLyogU3Vic2NyaXB0IG91dCBvZiByYW5nZS4gICovCisjIGRlZmluZSBGUEVfRkxUU1VCCUZQRV9GTFRTVUIKK307CisKKy8qIGBzaV9jb2RlJyB2YWx1ZXMgZm9yIFNJR1NFR1Ygc2lnbmFsLiAgKi8KK2VudW0KK3sKKyAgU0VHVl9NQVBFUlIgPSAxLAkJLyogQWRkcmVzcyBub3QgbWFwcGVkIHRvIG9iamVjdC4gICovCisjIGRlZmluZSBTRUdWX01BUEVSUglTRUdWX01BUEVSUgorICBTRUdWX0FDQ0VSUgkJCS8qIEludmFsaWQgcGVybWlzc2lvbnMgZm9yIG1hcHBlZCBvYmplY3QuICAqLworIyBkZWZpbmUgU0VHVl9BQ0NFUlIJU0VHVl9BQ0NFUlIKK307CisKKy8qIGBzaV9jb2RlJyB2YWx1ZXMgZm9yIFNJR0JVUyBzaWduYWwuICAqLworZW51bQoreworICBCVVNfQURSQUxOID0gMSwJCS8qIEludmFsaWQgYWRkcmVzcyBhbGlnbm1lbnQuICAqLworIyBkZWZpbmUgQlVTX0FEUkFMTglCVVNfQURSQUxOCisgIEJVU19BRFJFUlIsCQkJLyogTm9uLWV4aXN0YW50IHBoeXNpY2FsIGFkZHJlc3MuICAqLworIyBkZWZpbmUgQlVTX0FEUkVSUglCVVNfQURSRVJSCisgIEJVU19PQkpFUlIJCQkvKiBPYmplY3Qgc3BlY2lmaWMgaGFyZHdhcmUgZXJyb3IuICAqLworIyBkZWZpbmUgQlVTX09CSkVSUglCVVNfT0JKRVJSCit9OworCisvKiBgc2lfY29kZScgdmFsdWVzIGZvciBTSUdUUkFQIHNpZ25hbC4gICovCitlbnVtCit7CisgIFRSQVBfQlJLUFQgPSAxLAkJLyogUHJvY2VzcyBicmVha3BvaW50LiAgKi8KKyMgZGVmaW5lIFRSQVBfQlJLUFQJVFJBUF9CUktQVAorICBUUkFQX1RSQUNFCQkJLyogUHJvY2VzcyB0cmFjZSB0cmFwLiAgKi8KKyMgZGVmaW5lIFRSQVBfVFJBQ0UJVFJBUF9UUkFDRQorfTsKKworLyogYHNpX2NvZGUnIHZhbHVlcyBmb3IgU0lHQ0hMRCBzaWduYWwuICAqLworZW51bQoreworICBDTERfRVhJVEVEID0gMSwJCS8qIENoaWxkIGhhcyBleGl0ZWQuICAqLworIyBkZWZpbmUgQ0xEX0VYSVRFRAlDTERfRVhJVEVECisgIENMRF9LSUxMRUQsCQkJLyogQ2hpbGQgd2FzIGtpbGxlZC4gICovCisjIGRlZmluZSBDTERfS0lMTEVECUNMRF9LSUxMRUQKKyAgQ0xEX0RVTVBFRCwJCQkvKiBDaGlsZCB0ZXJtaW5hdGVkIGFibm9ybWFsbHkuICAqLworIyBkZWZpbmUgQ0xEX0RVTVBFRAlDTERfRFVNUEVECisgIENMRF9UUkFQUEVELAkJCS8qIFRyYWNlZCBjaGlsZCBoYXMgdHJhcHBlZC4gICovCisjIGRlZmluZSBDTERfVFJBUFBFRAlDTERfVFJBUFBFRAorICBDTERfU1RPUFBFRCwJCQkvKiBDaGlsZCBoYXMgc3RvcHBlZC4gICovCisjIGRlZmluZSBDTERfU1RPUFBFRAlDTERfU1RPUFBFRAorICBDTERfQ09OVElOVUVECQkJLyogU3RvcHBlZCBjaGlsZCBoYXMgY29udGludWVkLiAgKi8KKyMgZGVmaW5lIENMRF9DT05USU5VRUQJQ0xEX0NPTlRJTlVFRAorfTsKKworLyogYHNpX2NvZGUnIHZhbHVlcyBmb3IgU0lHUE9MTCBzaWduYWwuICAqLworZW51bQoreworICBQT0xMX0lOID0gMSwJCQkvKiBEYXRhIGlucHV0IGF2YWlsYWJsZS4gICovCisjIGRlZmluZSBQT0xMX0lOCVBPTExfSU4KKyAgUE9MTF9PVVQsCQkJLyogT3V0cHV0IGJ1ZmZlcnMgYXZhaWxhYmxlLiAgKi8KKyMgZGVmaW5lIFBPTExfT1VUCVBPTExfT1VUCisgIFBPTExfTVNHLAkJCS8qIElucHV0IG1lc3NhZ2UgYXZhaWxhYmxlLiAgICovCisjIGRlZmluZSBQT0xMX01TRwlQT0xMX01TRworICBQT0xMX0VSUiwJCQkvKiBJL08gZXJyb3IuICAqLworIyBkZWZpbmUgUE9MTF9FUlIJUE9MTF9FUlIKKyAgUE9MTF9QUkksCQkJLyogSGlnaCBwcmlvcml0eSBpbnB1dCBhdmFpbGFibGUuICAqLworIyBkZWZpbmUgUE9MTF9QUkkJUE9MTF9QUkkKKyAgUE9MTF9IVVAJCQkvKiBEZXZpY2UgZGlzY29ubmVjdGVkLiAgKi8KKyMgZGVmaW5lIFBPTExfSFVQCVBPTExfSFVQCit9OworCisjIHVuZGVmIF9fbmVlZF9zaWdpbmZvX3QKKyNlbmRpZgkvKiAhaGF2ZSBzaWdpbmZvX3QgJiYgKGhhdmUgX1NJR05BTF9IIHx8IG5lZWQgc2lnaW5mb190KS4gICovCisKKworI2lmIChkZWZpbmVkIF9TSUdOQUxfSCB8fCBkZWZpbmVkIF9fbmVlZF9zaWdldmVudF90KSBcCisgICAgJiYgIWRlZmluZWQgX19oYXZlX3NpZ2V2ZW50X3QKKyMgZGVmaW5lIF9faGF2ZV9zaWdldmVudF90CTEKKworLyogU3RydWN0dXJlIHRvIHRyYW5zcG9ydCBhcHBsaWNhdGlvbi1kZWZpbmVkIHZhbHVlcyB3aXRoIHNpZ25hbHMuICAqLworIyBkZWZpbmUgX19TSUdFVl9NQVhfU0laRQk2NAorIyBpZiBfX1dPUkRTSVpFID09IDY0CisjICBkZWZpbmUgX19TSUdFVl9QQURfU0laRQkoKF9fU0lHRVZfTUFYX1NJWkUgLyBzaXplb2YgKGludCkpIC0gNCkKKyMgZWxzZQorIyAgZGVmaW5lIF9fU0lHRVZfUEFEX1NJWkUJKChfX1NJR0VWX01BWF9TSVpFIC8gc2l6ZW9mIChpbnQpKSAtIDMpCisjIGVuZGlmCisKK3R5cGVkZWYgc3RydWN0IHNpZ2V2ZW50CisgIHsKKyAgICBzaWd2YWxfdCBzaWdldl92YWx1ZTsKKyAgICBpbnQgc2lnZXZfc2lnbm87CisgICAgaW50IHNpZ2V2X25vdGlmeTsKKworICAgIHVuaW9uCisgICAgICB7CisJaW50IF9wYWRbX19TSUdFVl9QQURfU0laRV07CisKKwkvKiBXaGVuIFNJR0VWX1NJR05BTCBhbmQgU0lHRVZfVEhSRUFEX0lEIHNldCwgTFdQIElEIG9mIHRoZQorCSAgIHRocmVhZCB0byByZWNlaXZlIHRoZSBzaWduYWwuICAqLworCV9fcGlkX3QgX3RpZDsKKworCXN0cnVjdAorCSAgeworCSAgICB2b2lkICgqX2Z1bmN0aW9uKSAoc2lndmFsX3QpOwkvKiBGdW5jdGlvbiB0byBzdGFydC4gICovCisJICAgIHZvaWQgKl9hdHRyaWJ1dGU7CQkJLyogUmVhbGx5IHB0aHJlYWRfYXR0cl90LiAgKi8KKwkgIH0gX3NpZ2V2X3RocmVhZDsKKyAgICAgIH0gX3NpZ2V2X3VuOworICB9IHNpZ2V2ZW50X3Q7CisKKy8qIFBPU0lYIG5hbWVzIHRvIGFjY2VzcyBzb21lIG9mIHRoZSBtZW1iZXJzLiAgKi8KKyMgZGVmaW5lIHNpZ2V2X25vdGlmeV9mdW5jdGlvbiAgIF9zaWdldl91bi5fc2lnZXZfdGhyZWFkLl9mdW5jdGlvbgorIyBkZWZpbmUgc2lnZXZfbm90aWZ5X2F0dHJpYnV0ZXMgX3NpZ2V2X3VuLl9zaWdldl90aHJlYWQuX2F0dHJpYnV0ZQorCisvKiBgc2lnZXZfbm90aWZ5JyB2YWx1ZXMuICAqLworZW51bQoreworICBTSUdFVl9TSUdOQUwgPSAwLAkJLyogTm90aWZ5IHZpYSBzaWduYWwuICAqLworIyBkZWZpbmUgU0lHRVZfU0lHTkFMCVNJR0VWX1NJR05BTAorICBTSUdFVl9OT05FLAkJCS8qIE90aGVyIG5vdGlmaWNhdGlvbjogbWVhbmluZ2xlc3MuICAqLworIyBkZWZpbmUgU0lHRVZfTk9ORQlTSUdFVl9OT05FCisgIFNJR0VWX1RIUkVBRCwJCQkvKiBEZWxpdmVyIHZpYSB0aHJlYWQgY3JlYXRpb24uICAqLworIyBkZWZpbmUgU0lHRVZfVEhSRUFECVNJR0VWX1RIUkVBRAorCisgIFNJR0VWX1RIUkVBRF9JRCA9IDQJCS8qIFNlbmQgc2lnbmFsIHRvIHNwZWNpZmljIHRocmVhZC4gICovCisjZGVmaW5lIFNJR0VWX1RIUkVBRF9JRAlTSUdFVl9USFJFQURfSUQKK307CisKKyNlbmRpZgkvKiBoYXZlIF9TSUdOQUxfSC4gICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zaWdudW0uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3NpZ251bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOGFjMTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zaWdudW0uaApAQCAtMCwwICsxLDgwIEBACisvKiBTaWduYWwgbnVtYmVyIGRlZmluaXRpb25zLiAgTGludXggdmVyc2lvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5NSwxOTk2LDE5OTcsMTk5OCwxOTk5LDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZmRlZglfU0lHTkFMX0gKKworLyogRmFrZSBzaWduYWwgZnVuY3Rpb25zLiAgKi8KKyNkZWZpbmUgU0lHX0VSUgkoKF9fc2lnaGFuZGxlcl90KSAtMSkJCS8qIEVycm9yIHJldHVybi4gICovCisjZGVmaW5lIFNJR19ERkwJKChfX3NpZ2hhbmRsZXJfdCkgMCkJCS8qIERlZmF1bHQgYWN0aW9uLiAgKi8KKyNkZWZpbmUgU0lHX0lHTgkoKF9fc2lnaGFuZGxlcl90KSAxKQkJLyogSWdub3JlIHNpZ25hbC4gICovCisKKyNpZmRlZiBfX1VTRV9VTklYOTgKKyMgZGVmaW5lIFNJR19IT0xECSgoX19zaWdoYW5kbGVyX3QpIDIpCS8qIEFkZCBzaWduYWwgdG8gaG9sZCBtYXNrLiAgKi8KKyNlbmRpZgorCisKKy8qIFNpZ25hbHMuICAqLworI2RlZmluZQlTSUdIVVAJCTEJLyogSGFuZ3VwIChQT1NJWCkuICAqLworI2RlZmluZQlTSUdJTlQJCTIJLyogSW50ZXJydXB0IChBTlNJKS4gICovCisjZGVmaW5lCVNJR1FVSVQJCTMJLyogUXVpdCAoUE9TSVgpLiAgKi8KKyNkZWZpbmUJU0lHSUxMCQk0CS8qIElsbGVnYWwgaW5zdHJ1Y3Rpb24gKEFOU0kpLiAgKi8KKyNkZWZpbmUJU0lHVFJBUAkJNQkvKiBUcmFjZSB0cmFwIChQT1NJWCkuICAqLworI2RlZmluZQlTSUdBQlJUCQk2CS8qIEFib3J0IChBTlNJKS4gICovCisjZGVmaW5lCVNJR0lPVAkJNgkvKiBJT1QgdHJhcCAoNC4yIEJTRCkuICAqLworI2RlZmluZQlTSUdCVVMJCTcJLyogQlVTIGVycm9yICg0LjIgQlNEKS4gICovCisjZGVmaW5lCVNJR0ZQRQkJOAkvKiBGbG9hdGluZy1wb2ludCBleGNlcHRpb24gKEFOU0kpLiAgKi8KKyNkZWZpbmUJU0lHS0lMTAkJOQkvKiBLaWxsLCB1bmJsb2NrYWJsZSAoUE9TSVgpLiAgKi8KKyNkZWZpbmUJU0lHVVNSMQkJMTAJLyogVXNlci1kZWZpbmVkIHNpZ25hbCAxIChQT1NJWCkuICAqLworI2RlZmluZQlTSUdTRUdWCQkxMQkvKiBTZWdtZW50YXRpb24gdmlvbGF0aW9uIChBTlNJKS4gICovCisjZGVmaW5lCVNJR1VTUjIJCTEyCS8qIFVzZXItZGVmaW5lZCBzaWduYWwgMiAoUE9TSVgpLiAgKi8KKyNkZWZpbmUJU0lHUElQRQkJMTMJLyogQnJva2VuIHBpcGUgKFBPU0lYKS4gICovCisjZGVmaW5lCVNJR0FMUk0JCTE0CS8qIEFsYXJtIGNsb2NrIChQT1NJWCkuICAqLworI2RlZmluZQlTSUdURVJNCQkxNQkvKiBUZXJtaW5hdGlvbiAoQU5TSSkuICAqLworI2RlZmluZQlTSUdTVEtGTFQJMTYJLyogU3RhY2sgZmF1bHQuICAqLworI2RlZmluZQlTSUdDTEQJCVNJR0NITEQJLyogU2FtZSBhcyBTSUdDSExEIChTeXN0ZW0gVikuICAqLworI2RlZmluZQlTSUdDSExECQkxNwkvKiBDaGlsZCBzdGF0dXMgaGFzIGNoYW5nZWQgKFBPU0lYKS4gICovCisjZGVmaW5lCVNJR0NPTlQJCTE4CS8qIENvbnRpbnVlIChQT1NJWCkuICAqLworI2RlZmluZQlTSUdTVE9QCQkxOQkvKiBTdG9wLCB1bmJsb2NrYWJsZSAoUE9TSVgpLiAgKi8KKyNkZWZpbmUJU0lHVFNUUAkJMjAJLyogS2V5Ym9hcmQgc3RvcCAoUE9TSVgpLiAgKi8KKyNkZWZpbmUJU0lHVFRJTgkJMjEJLyogQmFja2dyb3VuZCByZWFkIGZyb20gdHR5IChQT1NJWCkuICAqLworI2RlZmluZQlTSUdUVE9VCQkyMgkvKiBCYWNrZ3JvdW5kIHdyaXRlIHRvIHR0eSAoUE9TSVgpLiAgKi8KKyNkZWZpbmUJU0lHVVJHCQkyMwkvKiBVcmdlbnQgY29uZGl0aW9uIG9uIHNvY2tldCAoNC4yIEJTRCkuICAqLworI2RlZmluZQlTSUdYQ1BVCQkyNAkvKiBDUFUgbGltaXQgZXhjZWVkZWQgKDQuMiBCU0QpLiAgKi8KKyNkZWZpbmUJU0lHWEZTWgkJMjUJLyogRmlsZSBzaXplIGxpbWl0IGV4Y2VlZGVkICg0LjIgQlNEKS4gICovCisjZGVmaW5lCVNJR1ZUQUxSTQkyNgkvKiBWaXJ0dWFsIGFsYXJtIGNsb2NrICg0LjIgQlNEKS4gICovCisjZGVmaW5lCVNJR1BST0YJCTI3CS8qIFByb2ZpbGluZyBhbGFybSBjbG9jayAoNC4yIEJTRCkuICAqLworI2RlZmluZQlTSUdXSU5DSAkyOAkvKiBXaW5kb3cgc2l6ZSBjaGFuZ2UgKDQuMyBCU0QsIFN1bikuICAqLworI2RlZmluZQlTSUdQT0xMCQlTSUdJTwkvKiBQb2xsYWJsZSBldmVudCBvY2N1cnJlZCAoU3lzdGVtIFYpLiAgKi8KKyNkZWZpbmUJU0lHSU8JCTI5CS8qIEkvTyBub3cgcG9zc2libGUgKDQuMiBCU0QpLiAgKi8KKyNkZWZpbmUJU0lHUFdSCQkzMAkvKiBQb3dlciBmYWlsdXJlIHJlc3RhcnQgKFN5c3RlbSBWKS4gICovCisjZGVmaW5lIFNJR1NZUwkJMzEJLyogQmFkIHN5c3RlbSBjYWxsLiAgKi8KKyNkZWZpbmUgU0lHVU5VU0VECTMxCisKKyNkZWZpbmUJX05TSUcJCTY1CS8qIEJpZ2dlc3Qgc2lnbmFsIG51bWJlciArIDEKKwkJCQkgICAoaW5jbHVkaW5nIHJlYWwtdGltZSBzaWduYWxzKS4gICovCisKKyNkZWZpbmUgU0lHUlRNSU4gICAgICAgIChfX2xpYmNfY3VycmVudF9zaWdydG1pbiAoKSkKKyNkZWZpbmUgU0lHUlRNQVggICAgICAgIChfX2xpYmNfY3VycmVudF9zaWdydG1heCAoKSkKKworLyogVGhlc2UgYXJlIHRoZSBoYXJkIGxpbWl0cyBvZiB0aGUga2VybmVsLiAgVGhlc2UgdmFsdWVzIHNob3VsZCBub3QgYmUKKyAgIHVzZWQgZGlyZWN0bHkgYXQgdXNlciBsZXZlbC4gICovCisjZGVmaW5lIF9fU0lHUlRNSU4JMzIKKyNkZWZpbmUgX19TSUdSVE1BWAkoX05TSUcgLSAxKQorCisjZW5kaWYJLyogPHNpZ25hbC5oPiBpbmNsdWRlZC4gICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZWM4YWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaApAQCAtMCwwICsxLDEyNiBAQAorLyogX19zaWdfYXRvbWljX3QsIF9fc2lnc2V0X3QsIGFuZCByZWxhdGVkIGRlZmluaXRpb25zLiAgTGludXggdmVyc2lvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5NCwgMTk5NiwgMTk5NywgMjAwNworICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYJX1NJR1NFVF9IX3R5cGVzCisjIGRlZmluZSBfU0lHU0VUX0hfdHlwZXMJMQorCit0eXBlZGVmIGludCBfX3NpZ19hdG9taWNfdDsKKworLyogQSBgc2lnc2V0X3QnIGhhcyBhIGJpdCBmb3IgZWFjaCBzaWduYWwuICAqLworCisjIGRlZmluZSBfU0lHU0VUX05XT1JEUwkoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKQordHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsW19TSUdTRVRfTldPUkRTXTsKKyAgfSBfX3NpZ3NldF90OworCisjZW5kaWYKKworCisvKiBXZSBvbmx5IHdhbnQgdG8gZGVmaW5lIHRoZXNlIGZ1bmN0aW9ucyBpZiA8c2lnbmFsLmg+IHdhcyBhY3R1YWxseQorICAgaW5jbHVkZWQ7IG90aGVyd2lzZSB3ZSB3ZXJlIGluY2x1ZGVkIGp1c3QgdG8gZGVmaW5lIHRoZSB0eXBlcy4gIFNpbmNlIHdlCisgICBhcmUgbmFtZXNwYWNlLWNsZWFuLCBpdCB3b3VsZG4ndCBodXJ0IHRvIGRlZmluZSBleHRyYSBtYWNyb3MuICBCdXQKKyAgIHRyb3VibGUgY2FuIGJlIGNhdXNlZCBieSBmdW5jdGlvbnMgYmVpbmcgZGVmaW5lZCAoZS5nLiwgYW55IGdsb2JhbAorICAgcmVnaXN0ZXIgdmFycyBkZWNsYXJlZCBsYXRlciB3aWxsIGNhdXNlIGNvbXBpbGF0aW9uIGVycm9ycykuICAqLworCisjaWYgIWRlZmluZWQgX1NJR1NFVF9IX2ZucyAmJiBkZWZpbmVkIF9TSUdOQUxfSAorIyBkZWZpbmUgX1NJR1NFVF9IX2ZucyAxCisKKyMgaWZuZGVmIF9FWFRFUk5fSU5MSU5FCisjICBkZWZpbmUgX0VYVEVSTl9JTkxJTkUgX19leHRlcm5faW5saW5lCisjIGVuZGlmCisKKy8qIFJldHVybiBhIG1hc2sgdGhhdCBpbmNsdWRlcyB0aGUgYml0IGZvciBTSUcgb25seS4gICovCisjIGRlZmluZSBfX3NpZ21hc2soc2lnKSBcCisgICgoKHVuc2lnbmVkIGxvbmcgaW50KSAxKSA8PCAoKChzaWcpIC0gMSkgJSAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSkpCisKKy8qIFJldHVybiB0aGUgd29yZCBpbmRleCBmb3IgU0lHLiAgKi8KKyMgZGVmaW5lIF9fc2lnd29yZChzaWcpCSgoKHNpZykgLSAxKSAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKQorCisjIGlmIGRlZmluZWQgX19HTlVDX18gJiYgX19HTlVDX18gPj0gMgorIyAgZGVmaW5lIF9fc2lnZW1wdHlzZXQoc2V0KSBcCisgIChfX2V4dGVuc2lvbl9fICh7IGludCBfX2NudCA9IF9TSUdTRVRfTldPUkRTOwkJCQkgICAgICBcCisJCSAgICBzaWdzZXRfdCAqX19zZXQgPSAoc2V0KTsJCQkJICAgICAgXAorCQkgICAgd2hpbGUgKC0tX19jbnQgPj0gMCkgX19zZXQtPl9fdmFsW19fY250XSA9IDA7CSAgICAgIFwKKwkJICAgIDA7IH0pKQorIyAgZGVmaW5lIF9fc2lnZmlsbHNldChzZXQpIFwKKyAgKF9fZXh0ZW5zaW9uX18gKHsgaW50IF9fY250ID0gX1NJR1NFVF9OV09SRFM7CQkJCSAgICAgIFwKKwkJICAgIHNpZ3NldF90ICpfX3NldCA9IChzZXQpOwkJCQkgICAgICBcCisJCSAgICB3aGlsZSAoLS1fX2NudCA+PSAwKSBfX3NldC0+X192YWxbX19jbnRdID0gfjBVTDsJICAgICAgXAorCQkgICAgMDsgfSkpCisKKyMgIGlmZGVmIF9fVVNFX0dOVQorLyogVGhlIFBPU0lYIGRvZXMgbm90IHNwZWNpZnkgZm9yIGhhbmRsaW5nIHRoZSB3aG9sZSBzaWduYWwgc2V0IGluIG9uZQorICAgY29tbWFuZC4gIFRoaXMgaXMgb2Z0ZW4gd2FudGVkIGFuZCBzbyB3ZSBkZWZpbmUgdGhyZWUgbW9yZSBmdW5jdGlvbnMKKyAgIGhlcmUuICAqLworIyAgIGRlZmluZSBfX3NpZ2lzZW1wdHlzZXQoc2V0KSBcCisgIChfX2V4dGVuc2lvbl9fICh7IGludCBfX2NudCA9IF9TSUdTRVRfTldPUkRTOwkJCQkgICAgICBcCisJCSAgICBjb25zdCBzaWdzZXRfdCAqX19zZXQgPSAoc2V0KTsJCQkgICAgICBcCisJCSAgICBpbnQgX19yZXQgPSBfX3NldC0+X192YWxbLS1fX2NudF07CQkJICAgICAgXAorCQkgICAgd2hpbGUgKCFfX3JldCAmJiAtLV9fY250ID49IDApCQkJICAgICAgXAorCQkJX19yZXQgPSBfX3NldC0+X192YWxbX19jbnRdOwkJCSAgICAgIFwKKwkJICAgIF9fcmV0ID09IDA7IH0pKQorIyAgIGRlZmluZSBfX3NpZ2FuZHNldChkZXN0LCBsZWZ0LCByaWdodCkgXAorICAoX19leHRlbnNpb25fXyAoeyBpbnQgX19jbnQgPSBfU0lHU0VUX05XT1JEUzsJCQkJICAgICAgXAorCQkgICAgc2lnc2V0X3QgKl9fZGVzdCA9IChkZXN0KTsJCQkJICAgICAgXAorCQkgICAgY29uc3Qgc2lnc2V0X3QgKl9fbGVmdCA9IChsZWZ0KTsJCQkgICAgICBcCisJCSAgICBjb25zdCBzaWdzZXRfdCAqX19yaWdodCA9IChyaWdodCk7CQkJICAgICAgXAorCQkgICAgd2hpbGUgKC0tX19jbnQgPj0gMCkJCQkJICAgICAgXAorCQkgICAgICBfX2Rlc3QtPl9fdmFsW19fY250XSA9IChfX2xlZnQtPl9fdmFsW19fY250XQkgICAgICBcCisJCQkJCSAgICAgICYgX19yaWdodC0+X192YWxbX19jbnRdKTsJICAgICAgXAorCQkgICAgMDsgfSkpCisjICAgZGVmaW5lIF9fc2lnb3JzZXQoZGVzdCwgbGVmdCwgcmlnaHQpIFwKKyAgKF9fZXh0ZW5zaW9uX18gKHsgaW50IF9fY250ID0gX1NJR1NFVF9OV09SRFM7CQkJCSAgICAgIFwKKwkJICAgIHNpZ3NldF90ICpfX2Rlc3QgPSAoZGVzdCk7CQkJCSAgICAgIFwKKwkJICAgIGNvbnN0IHNpZ3NldF90ICpfX2xlZnQgPSAobGVmdCk7CQkJICAgICAgXAorCQkgICAgY29uc3Qgc2lnc2V0X3QgKl9fcmlnaHQgPSAocmlnaHQpOwkJCSAgICAgIFwKKwkJICAgIHdoaWxlICgtLV9fY250ID49IDApCQkJCSAgICAgIFwKKwkJICAgICAgX19kZXN0LT5fX3ZhbFtfX2NudF0gPSAoX19sZWZ0LT5fX3ZhbFtfX2NudF0JICAgICAgXAorCQkJCQkgICAgICB8IF9fcmlnaHQtPl9fdmFsW19fY250XSk7CSAgICAgIFwKKwkJICAgIDA7IH0pKQorIyAgZW5kaWYKKyMgZW5kaWYKKworLyogVGhlc2UgZnVuY3Rpb25zIG5lZWRuJ3QgY2hlY2sgZm9yIGEgYm9ndXMgc2lnbmFsIG51bWJlciAtLSBlcnJvcgorICAgY2hlY2tpbmcgaXMgZG9uZSBpbiB0aGUgbm9uIF9fIHZlcnNpb25zLiAgKi8KKworZXh0ZXJuIGludCBfX3NpZ2lzbWVtYmVyIChfX2NvbnN0IF9fc2lnc2V0X3QgKiwgaW50KTsKK2V4dGVybiBpbnQgX19zaWdhZGRzZXQgKF9fc2lnc2V0X3QgKiwgaW50KTsKK2V4dGVybiBpbnQgX19zaWdkZWxzZXQgKF9fc2lnc2V0X3QgKiwgaW50KTsKKworIyBpZmRlZiBfX1VTRV9FWFRFUk5fSU5MSU5FUworIyAgZGVmaW5lIF9fU0lHU0VURk4oTkFNRSwgQk9EWSwgQ09OU1QpCQkJCQkgICAgICBcCisgIF9FWFRFUk5fSU5MSU5FIGludAkJCQkJCQkgICAgICBcCisgIE5BTUUgKENPTlNUIF9fc2lnc2V0X3QgKl9fc2V0LCBpbnQgX19zaWcpCQkJCSAgICAgIFwKKyAgewkJCQkJCQkJCSAgICAgIFwKKyAgICB1bnNpZ25lZCBsb25nIGludCBfX21hc2sgPSBfX3NpZ21hc2sgKF9fc2lnKTsJCQkgICAgICBcCisgICAgdW5zaWduZWQgbG9uZyBpbnQgX193b3JkID0gX19zaWd3b3JkIChfX3NpZyk7CQkJICAgICAgXAorICAgIHJldHVybiBCT0RZOwkJCQkJCQkgICAgICBcCisgIH0KKworX19TSUdTRVRGTiAoX19zaWdpc21lbWJlciwgKF9fc2V0LT5fX3ZhbFtfX3dvcmRdICYgX19tYXNrKSA/IDEgOiAwLCBfX2NvbnN0KQorX19TSUdTRVRGTiAoX19zaWdhZGRzZXQsICgoX19zZXQtPl9fdmFsW19fd29yZF0gfD0gX19tYXNrKSwgMCksICkKK19fU0lHU0VURk4gKF9fc2lnZGVsc2V0LCAoKF9fc2V0LT5fX3ZhbFtfX3dvcmRdICY9IH5fX21hc2spLCAwKSwgKQorCisjICB1bmRlZiBfX1NJR1NFVEZOCisjIGVuZGlmCisKKworI2VuZGlmIC8qICEgX1NJR1NFVF9IX2Zucy4gICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zaWdzdGFjay5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc2lnc3RhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjI2MDM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc2lnc3RhY2suaApAQCAtMCwwICsxLDU1IEBACisvKiBzaWdzdGFjaywgc2lnYWx0c3RhY2sgZGVmaW5pdGlvbnMuCisgICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1NJR05BTF9ICisjIGVycm9yICJOZXZlciBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseS4gIFVzZSA8c2lnbmFsLmg+IGluc3RlYWQiCisjZW5kaWYKKworCisvKiBTdHJ1Y3R1cmUgZGVzY3JpYmluZyBhIHNpZ25hbCBzdGFjayAob2Jzb2xldGUpLiAgKi8KK3N0cnVjdCBzaWdzdGFjaworICB7CisgICAgdm9pZCAqc3Nfc3A7CQkvKiBTaWduYWwgc3RhY2sgcG9pbnRlci4gICovCisgICAgaW50IHNzX29uc3RhY2s7CQkvKiBOb256ZXJvIGlmIGV4ZWN1dGluZyBvbiB0aGlzIHN0YWNrLiAgKi8KKyAgfTsKKworCisvKiBQb3NzaWJsZSB2YWx1ZXMgZm9yIGBzc19mbGFncy4nLiAgKi8KK2VudW0KK3sKKyAgU1NfT05TVEFDSyA9IDEsCisjZGVmaW5lIFNTX09OU1RBQ0sJU1NfT05TVEFDSworICBTU19ESVNBQkxFCisjZGVmaW5lIFNTX0RJU0FCTEUJU1NfRElTQUJMRQorfTsKKworLyogTWluaW11bSBzdGFjayBzaXplIGZvciBhIHNpZ25hbCBoYW5kbGVyLiAgKi8KKyNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAorCisvKiBTeXN0ZW0gZGVmYXVsdCBzdGFjayBzaXplLiAgKi8KKyNkZWZpbmUgU0lHU1RLU1oJODE5MgorCisKKy8qIEFsdGVybmF0ZSwgcHJlZmVycmVkIGludGVyZmFjZS4gICovCit0eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFjaworICB7CisgICAgdm9pZCAqc3Nfc3A7CisgICAgaW50IHNzX2ZsYWdzOworICAgIHNpemVfdCBzc19zaXplOworICB9IHN0YWNrX3Q7CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MGJkZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQuaApAQCAtMCwwICsxLDM4IEBACisvKiBTaWduYWwgaGFuZGxpbmcgZnVuY3Rpb24gZm9yIHRocmVhZGVkIHByb2dyYW1zLgorICAgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsCisgICB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKyNpZm5kZWYgX0JJVFNfU0lHVEhSRUFEX0gKKyNkZWZpbmUgX0JJVFNfU0lHVEhSRUFEX0gJMQorCisjaWYgIWRlZmluZWQgX1NJR05BTF9IICYmICFkZWZpbmVkIF9QVEhSRUFEX0gKKyMgZXJyb3IgIk5ldmVyIGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5LiAgVXNlIDxwdGhyZWFkLmg+IGluc3RlYWQiCisjZW5kaWYKKworLyogRnVuY3Rpb25zIGZvciBoYW5kbGluZyBzaWduYWxzLiAqLworCisvKiBNb2RpZnkgdGhlIHNpZ25hbCBtYXNrIGZvciB0aGUgY2FsbGluZyB0aHJlYWQuICBUaGUgYXJndW1lbnRzIGhhdmUKKyAgIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yIHNpZ3Byb2NtYXNrKDIpLiAqLworZXh0ZXJuIGludCBwdGhyZWFkX3NpZ21hc2sgKGludCBfX2hvdywKKwkJCSAgICBfX2NvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19uZXdtYXNrLAorCQkJICAgIF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19vbGRtYXNrKV9fVEhST1c7CisKKy8qIFNlbmQgc2lnbmFsIFNJR05PIHRvIHRoZSBnaXZlbiB0aHJlYWQuICovCitleHRlcm4gaW50IHB0aHJlYWRfa2lsbCAocHRocmVhZF90IF9fdGhyZWFkaWQsIGludCBfX3NpZ25vKSBfX1RIUk9XOworCisjZW5kaWYJLyogYml0cy9zaWd0aHJlYWQuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc29ja2FkZHIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3NvY2thZGRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UxZDEzMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3NvY2thZGRyLmgKQEAgLTAsMCArMSw0MCBAQAorLyogRGVmaW5pdGlvbiBvZiBgc3RydWN0IHNvY2thZGRyXyonIGNvbW1vbiBtZW1iZXJzLiAgR2VuZXJpYy80LjIgQlNEIHZlcnNpb24uCisgICBDb3B5cmlnaHQgKEMpIDE5OTUsMTk5NiwxOTk3LDE5OTgsMjAwMCwyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisvKgorICogTmV2ZXIgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHk7IHVzZSA8c3lzL3NvY2tldC5oPiBpbnN0ZWFkLgorICovCisKKyNpZm5kZWYgX0JJVFNfU09DS0FERFJfSAorI2RlZmluZSBfQklUU19TT0NLQUREUl9ICTEKKworCisvKiBQT1NJWC4xZyBzcGVjaWZpZXMgdGhpcyB0eXBlIG5hbWUgZm9yIHRoZSBgc2FfZmFtaWx5JyBtZW1iZXIuICAqLwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgc2FfZmFtaWx5X3Q7CisKKy8qIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkZWNsYXJlIHRoZSBpbml0aWFsIGNvbW1vbiBtZW1iZXJzCisgICBvZiB0aGUgZGF0YSB0eXBlcyB1c2VkIGZvciBzb2NrZXQgYWRkcmVzc2VzLCBgc3RydWN0IHNvY2thZGRyJywKKyAgIGBzdHJ1Y3Qgc29ja2FkZHJfaW4nLCBgc3RydWN0IHNvY2thZGRyX3VuJywgZXRjLiAgKi8KKworI2RlZmluZQlfX1NPQ0tBRERSX0NPTU1PTihzYV9wcmVmaXgpIFwKKyAgc2FfZmFtaWx5X3Qgc2FfcHJlZml4IyNmYW1pbHkKKworI2RlZmluZSBfX1NPQ0tBRERSX0NPTU1PTl9TSVpFCShzaXplb2YgKHVuc2lnbmVkIHNob3J0IGludCkpCisKKyNlbmRpZgkvKiBiaXRzL3NvY2thZGRyLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdjM2I5MQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oCkBAIC0wLDAgKzEsMzk0IEBACisvKiBTeXN0ZW0tc3BlY2lmaWMgc29ja2V0IGNvbnN0YW50cyBhbmQgdHlwZXMuICBMaW51eCB2ZXJzaW9uLgorICAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTk0LTIwMDEsIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDgKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9fQklUU19TT0NLRVRfSAorI2RlZmluZSBfX0JJVFNfU09DS0VUX0gKKworI2lmbmRlZiBfU1lTX1NPQ0tFVF9ICisjIGVycm9yICJOZXZlciBpbmNsdWRlIDxiaXRzL3NvY2tldC5oPiBkaXJlY3RseTsgdXNlIDxzeXMvc29ja2V0Lmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNkZWZpbmUJX19uZWVkX3NpemVfdAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8qIFR5cGUgZm9yIGxlbmd0aCBhcmd1bWVudHMgaW4gc29ja2V0IGNhbGxzLiAgKi8KKyNpZm5kZWYgX19zb2NrbGVuX3RfZGVmaW5lZAordHlwZWRlZiBfX3NvY2tsZW5fdCBzb2NrbGVuX3Q7CisjIGRlZmluZSBfX3NvY2tsZW5fdF9kZWZpbmVkCisjZW5kaWYKKworLyogVHlwZXMgb2Ygc29ja2V0cy4gICovCitlbnVtIF9fc29ja2V0X3R5cGUKK3sKKyAgU09DS19TVFJFQU0gPSAxLAkJLyogU2VxdWVuY2VkLCByZWxpYWJsZSwgY29ubmVjdGlvbi1iYXNlZAorCQkJCSAgIGJ5dGUgc3RyZWFtcy4gICovCisjZGVmaW5lIFNPQ0tfU1RSRUFNIFNPQ0tfU1RSRUFNCisgIFNPQ0tfREdSQU0gPSAyLAkJLyogQ29ubmVjdGlvbmxlc3MsIHVucmVsaWFibGUgZGF0YWdyYW1zCisJCQkJICAgb2YgZml4ZWQgbWF4aW11bSBsZW5ndGguICAqLworI2RlZmluZSBTT0NLX0RHUkFNIFNPQ0tfREdSQU0KKyAgU09DS19SQVcgPSAzLAkJCS8qIFJhdyBwcm90b2NvbCBpbnRlcmZhY2UuICAqLworI2RlZmluZSBTT0NLX1JBVyBTT0NLX1JBVworICBTT0NLX1JETSA9IDQsCQkJLyogUmVsaWFibHktZGVsaXZlcmVkIG1lc3NhZ2VzLiAgKi8KKyNkZWZpbmUgU09DS19SRE0gU09DS19SRE0KKyAgU09DS19TRVFQQUNLRVQgPSA1LAkJLyogU2VxdWVuY2VkLCByZWxpYWJsZSwgY29ubmVjdGlvbi1iYXNlZCwKKwkJCQkgICBkYXRhZ3JhbXMgb2YgZml4ZWQgbWF4aW11bSBsZW5ndGguICAqLworI2RlZmluZSBTT0NLX1NFUVBBQ0tFVCBTT0NLX1NFUVBBQ0tFVAorICBTT0NLX0RDQ1AgPSA2LAkJLyogRGF0YWdyYW0gQ29uZ2VzdGlvbiBDb250cm9sIFByb3RvY29sLiAgKi8KKyNkZWZpbmUgU09DS19EQ0NQIFNPQ0tfRENDUAorICBTT0NLX1BBQ0tFVCA9IDEwLAkJLyogTGludXggc3BlY2lmaWMgd2F5IG9mIGdldHRpbmcgcGFja2V0cworCQkJCSAgIGF0IHRoZSBkZXYgbGV2ZWwuICBGb3Igd3JpdGluZyByYXJwIGFuZAorCQkJCSAgIG90aGVyIHNpbWlsYXIgdGhpbmdzIG9uIHRoZSB1c2VyIGxldmVsLiAqLworI2RlZmluZSBTT0NLX1BBQ0tFVCBTT0NLX1BBQ0tFVAorCisgIC8qIEZsYWdzIHRvIGJlIE9SZWQgaW50byB0aGUgdHlwZSBwYXJhbWV0ZXIgb2Ygc29ja2V0IGFuZCBzb2NrZXRwYWlyIGFuZAorICAgICB1c2VkIGZvciB0aGUgZmxhZ3MgcGFyYW1ldGVyIG9mIHBhY2NlcHQuICAqLworCisgIFNPQ0tfQ0xPRVhFQyA9IDAyMDAwMDAwLAkvKiBBdG9taWNhbGx5IHNldCBjbG9zZS1vbi1leGVjIGZsYWcgZm9yIHRoZQorCQkJCSAgIG5ldyBkZXNjcmlwdG9yKHMpLiAgKi8KKyNkZWZpbmUgU09DS19DTE9FWEVDIFNPQ0tfQ0xPRVhFQworICBTT0NLX05PTkJMT0NLID0gMDQwMDAJCS8qIEF0b21pY2FsbHkgbWFyayBkZXNjcmlwdG9yKHMpIGFzCisJCQkJICAgbm9uLWJsb2NraW5nLiAgKi8KKyNkZWZpbmUgU09DS19OT05CTE9DSyBTT0NLX05PTkJMT0NLCit9OworCisvKiBQcm90b2NvbCBmYW1pbGllcy4gICovCisjZGVmaW5lCVBGX1VOU1BFQwkwCS8qIFVuc3BlY2lmaWVkLiAgKi8KKyNkZWZpbmUJUEZfTE9DQUwJMQkvKiBMb2NhbCB0byBob3N0IChwaXBlcyBhbmQgZmlsZS1kb21haW4pLiAgKi8KKyNkZWZpbmUJUEZfVU5JWAkJUEZfTE9DQUwgLyogUE9TSVggbmFtZSBmb3IgUEZfTE9DQUwuICAqLworI2RlZmluZQlQRl9GSUxFCQlQRl9MT0NBTCAvKiBBbm90aGVyIG5vbi1zdGFuZGFyZCBuYW1lIGZvciBQRl9MT0NBTC4gICovCisjZGVmaW5lCVBGX0lORVQJCTIJLyogSVAgcHJvdG9jb2wgZmFtaWx5LiAgKi8KKyNkZWZpbmUJUEZfQVgyNQkJMwkvKiBBbWF0ZXVyIFJhZGlvIEFYLjI1LiAgKi8KKyNkZWZpbmUJUEZfSVBYCQk0CS8qIE5vdmVsbCBJbnRlcm5ldCBQcm90b2NvbC4gICovCisjZGVmaW5lCVBGX0FQUExFVEFMSwk1CS8qIEFwcGxldGFsayBERFAuICAqLworI2RlZmluZQlQRl9ORVRST00JNgkvKiBBbWF0ZXVyIHJhZGlvIE5ldFJPTS4gICovCisjZGVmaW5lCVBGX0JSSURHRQk3CS8qIE11bHRpcHJvdG9jb2wgYnJpZGdlLiAgKi8KKyNkZWZpbmUJUEZfQVRNUFZDCTgJLyogQVRNIFBWQ3MuICAqLworI2RlZmluZQlQRl9YMjUJCTkJLyogUmVzZXJ2ZWQgZm9yIFguMjUgcHJvamVjdC4gICovCisjZGVmaW5lCVBGX0lORVQ2CTEwCS8qIElQIHZlcnNpb24gNi4gICovCisjZGVmaW5lCVBGX1JPU0UJCTExCS8qIEFtYXRldXIgUmFkaW8gWC4yNSBQTFAuICAqLworI2RlZmluZQlQRl9ERUNuZXQJMTIJLyogUmVzZXJ2ZWQgZm9yIERFQ25ldCBwcm9qZWN0LiAgKi8KKyNkZWZpbmUJUEZfTkVUQkVVSQkxMwkvKiBSZXNlcnZlZCBmb3IgODAyLjJMTEMgcHJvamVjdC4gICovCisjZGVmaW5lCVBGX1NFQ1VSSVRZCTE0CS8qIFNlY3VyaXR5IGNhbGxiYWNrIHBzZXVkbyBBRi4gICovCisjZGVmaW5lCVBGX0tFWQkJMTUJLyogUEZfS0VZIGtleSBtYW5hZ2VtZW50IEFQSS4gICovCisjZGVmaW5lCVBGX05FVExJTksJMTYKKyNkZWZpbmUJUEZfUk9VVEUJUEZfTkVUTElOSyAvKiBBbGlhcyB0byBlbXVsYXRlIDQuNEJTRC4gICovCisjZGVmaW5lCVBGX1BBQ0tFVAkxNwkvKiBQYWNrZXQgZmFtaWx5LiAgKi8KKyNkZWZpbmUJUEZfQVNICQkxOAkvKiBBc2guICAqLworI2RlZmluZQlQRl9FQ09ORVQJMTkJLyogQWNvcm4gRWNvbmV0LiAgKi8KKyNkZWZpbmUJUEZfQVRNU1ZDCTIwCS8qIEFUTSBTVkNzLiAgKi8KKyNkZWZpbmUJUEZfU05BCQkyMgkvKiBMaW51eCBTTkEgUHJvamVjdCAqLworI2RlZmluZQlQRl9JUkRBCQkyMwkvKiBJUkRBIHNvY2tldHMuICAqLworI2RlZmluZQlQRl9QUFBPWAkyNAkvKiBQUFBvWCBzb2NrZXRzLiAgKi8KKyNkZWZpbmUJUEZfV0FOUElQRQkyNQkvKiBXYW5waXBlIEFQSSBzb2NrZXRzLiAgKi8KKyNkZWZpbmUJUEZfQkxVRVRPT1RICTMxCS8qIEJsdWV0b290aCBzb2NrZXRzLiAgKi8KKyNkZWZpbmUJUEZfSVVDVgkJMzIJLyogSVVDViBzb2NrZXRzLiAgKi8KKyNkZWZpbmUgUEZfUlhSUEMJMzMJLyogUnhSUEMgc29ja2V0cy4gICovCisjZGVmaW5lIFBGX0lTRE4JCTM0CS8qIG1JU0ROIHNvY2tldHMuICAqLworI2RlZmluZQlQRl9NQVgJCTM1CS8qIEZvciBub3cuLiAgKi8KKworLyogQWRkcmVzcyBmYW1pbGllcy4gICovCisjZGVmaW5lCUFGX1VOU1BFQwlQRl9VTlNQRUMKKyNkZWZpbmUJQUZfTE9DQUwJUEZfTE9DQUwKKyNkZWZpbmUJQUZfVU5JWAkJUEZfVU5JWAorI2RlZmluZQlBRl9GSUxFCQlQRl9GSUxFCisjZGVmaW5lCUFGX0lORVQJCVBGX0lORVQKKyNkZWZpbmUJQUZfQVgyNQkJUEZfQVgyNQorI2RlZmluZQlBRl9JUFgJCVBGX0lQWAorI2RlZmluZQlBRl9BUFBMRVRBTEsJUEZfQVBQTEVUQUxLCisjZGVmaW5lCUFGX05FVFJPTQlQRl9ORVRST00KKyNkZWZpbmUJQUZfQlJJREdFCVBGX0JSSURHRQorI2RlZmluZQlBRl9BVE1QVkMJUEZfQVRNUFZDCisjZGVmaW5lCUFGX1gyNQkJUEZfWDI1CisjZGVmaW5lCUFGX0lORVQ2CVBGX0lORVQ2CisjZGVmaW5lCUFGX1JPU0UJCVBGX1JPU0UKKyNkZWZpbmUJQUZfREVDbmV0CVBGX0RFQ25ldAorI2RlZmluZQlBRl9ORVRCRVVJCVBGX05FVEJFVUkKKyNkZWZpbmUJQUZfU0VDVVJJVFkJUEZfU0VDVVJJVFkKKyNkZWZpbmUJQUZfS0VZCQlQRl9LRVkKKyNkZWZpbmUJQUZfTkVUTElOSwlQRl9ORVRMSU5LCisjZGVmaW5lCUFGX1JPVVRFCVBGX1JPVVRFCisjZGVmaW5lCUFGX1BBQ0tFVAlQRl9QQUNLRVQKKyNkZWZpbmUJQUZfQVNICQlQRl9BU0gKKyNkZWZpbmUJQUZfRUNPTkVUCVBGX0VDT05FVAorI2RlZmluZQlBRl9BVE1TVkMJUEZfQVRNU1ZDCisjZGVmaW5lCUFGX1NOQQkJUEZfU05BCisjZGVmaW5lCUFGX0lSREEJCVBGX0lSREEKKyNkZWZpbmUJQUZfUFBQT1gJUEZfUFBQT1gKKyNkZWZpbmUJQUZfV0FOUElQRQlQRl9XQU5QSVBFCisjZGVmaW5lCUFGX0JMVUVUT09USAlQRl9CTFVFVE9PVEgKKyNkZWZpbmUJQUZfSVVDVgkJUEZfSVVDVgorI2RlZmluZSBBRl9SWFJQQwlQRl9SWFJQQworI2RlZmluZSBBRl9JU0ROCQlQRl9JU0ROCisjZGVmaW5lCUFGX01BWAkJUEZfTUFYCisKKy8qIFNvY2tldCBsZXZlbCB2YWx1ZXMuICBPdGhlcnMgYXJlIGRlZmluZWQgaW4gdGhlIGFwcHJvcHJpYXRlIGhlYWRlcnMuCisKKyAgIFhYWCBUaGVzZSBkZWZpbml0aW9ucyBhbHNvIHNob3VsZCBnbyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBoZWFkZXJzIGFzCisgICBmYXIgYXMgdGhleSBhcmUgYXZhaWxhYmxlLiAgKi8KKyNkZWZpbmUgU09MX1JBVwkJMjU1CisjZGVmaW5lIFNPTF9ERUNORVQgICAgICAyNjEKKyNkZWZpbmUgU09MX1gyNSAgICAgICAgIDI2MgorI2RlZmluZSBTT0xfUEFDS0VUCTI2MworI2RlZmluZSBTT0xfQVRNCQkyNjQJLyogQVRNIGxheWVyIChjZWxsIGxldmVsKS4gICovCisjZGVmaW5lIFNPTF9BQUwJCTI2NQkvKiBBVE0gQWRhcHRpb24gTGF5ZXIgKHBhY2tldCBsZXZlbCkuICAqLworI2RlZmluZSBTT0xfSVJEQQkyNjYKKworLyogTWF4aW11bSBxdWV1ZSBsZW5ndGggc3BlY2lmaWFibGUgYnkgbGlzdGVuLiAgKi8KKyNkZWZpbmUgU09NQVhDT05OCTEyOAorCisvKiBHZXQgdGhlIGRlZmluaXRpb24gb2YgdGhlIG1hY3JvIHRvIGRlZmluZSB0aGUgY29tbW9uIHNvY2thZGRyIG1lbWJlcnMuICAqLworI2luY2x1ZGUgPGJpdHMvc29ja2FkZHIuaD4KKworLyogU3RydWN0dXJlIGRlc2NyaWJpbmcgYSBnZW5lcmljIHNvY2tldCBhZGRyZXNzLiAgKi8KK3N0cnVjdCBzb2NrYWRkcgorICB7CisgICAgX19TT0NLQUREUl9DT01NT04gKHNhXyk7CS8qIENvbW1vbiBkYXRhOiBhZGRyZXNzIGZhbWlseSBhbmQgbGVuZ3RoLiAgKi8KKyAgICBjaGFyIHNhX2RhdGFbMTRdOwkJLyogQWRkcmVzcyBkYXRhLiAgKi8KKyAgfTsKKworCisvKiBTdHJ1Y3R1cmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYW55IHNvY2tldCBhZGRyZXNzICh3aXRoIHRoZSBoaXN0b3JpY2FsCisgICBleGNlcHRpb24gb2YgQUZfVU5JWCkuICBXZSByZXNlcnZlIDEyOCBieXRlcy4gICovCisjZGVmaW5lIF9fc3NfYWxpZ250eXBlCXVuc2lnbmVkIGxvbmcgaW50CisjZGVmaW5lIF9TU19TSVpFCTEyOAorI2RlZmluZSBfU1NfUEFEU0laRQkoX1NTX1NJWkUgLSAoMiAqIHNpemVvZiAoX19zc19hbGlnbnR5cGUpKSkKKworc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UKKyAgeworICAgIF9fU09DS0FERFJfQ09NTU9OIChzc18pOwkvKiBBZGRyZXNzIGZhbWlseSwgZXRjLiAgKi8KKyAgICBfX3NzX2FsaWdudHlwZSBfX3NzX2FsaWduOwkvKiBGb3JjZSBkZXNpcmVkIGFsaWdubWVudC4gICovCisgICAgY2hhciBfX3NzX3BhZGRpbmdbX1NTX1BBRFNJWkVdOworICB9OworCisKKy8qIEJpdHMgaW4gdGhlIEZMQUdTIGFyZ3VtZW50IHRvIGBzZW5kJywgYHJlY3YnLCBldCBhbC4gICovCitlbnVtCisgIHsKKyAgICBNU0dfT09CCQk9IDB4MDEsCS8qIFByb2Nlc3Mgb3V0LW9mLWJhbmQgZGF0YS4gICovCisjZGVmaW5lIE1TR19PT0IJCU1TR19PT0IKKyAgICBNU0dfUEVFSwkJPSAweDAyLAkvKiBQZWVrIGF0IGluY29taW5nIG1lc3NhZ2VzLiAgKi8KKyNkZWZpbmUgTVNHX1BFRUsJTVNHX1BFRUsKKyAgICBNU0dfRE9OVFJPVVRFCT0gMHgwNCwJLyogRG9uJ3QgdXNlIGxvY2FsIHJvdXRpbmcuICAqLworI2RlZmluZSBNU0dfRE9OVFJPVVRFCU1TR19ET05UUk9VVEUKKyNpZmRlZiBfX1VTRV9HTlUKKyAgICAvKiBERUNuZXQgdXNlcyBhIGRpZmZlcmVudCBuYW1lLiAgKi8KKyAgICBNU0dfVFJZSEFSRAkJPSBNU0dfRE9OVFJPVVRFLAorIyBkZWZpbmUgTVNHX1RSWUhBUkQJTVNHX0RPTlRST1VURQorI2VuZGlmCisgICAgTVNHX0NUUlVOQwkJPSAweDA4LAkvKiBDb250cm9sIGRhdGEgbG9zdCBiZWZvcmUgZGVsaXZlcnkuICAqLworI2RlZmluZSBNU0dfQ1RSVU5DCU1TR19DVFJVTkMKKyAgICBNU0dfUFJPWFkJCT0gMHgxMCwJLyogU3VwcGx5IG9yIGFzayBzZWNvbmQgYWRkcmVzcy4gICovCisjZGVmaW5lIE1TR19QUk9YWQlNU0dfUFJPWFkKKyAgICBNU0dfVFJVTkMJCT0gMHgyMCwKKyNkZWZpbmUJTVNHX1RSVU5DCU1TR19UUlVOQworICAgIE1TR19ET05UV0FJVAk9IDB4NDAsIC8qIE5vbmJsb2NraW5nIElPLiAgKi8KKyNkZWZpbmUJTVNHX0RPTlRXQUlUCU1TR19ET05UV0FJVAorICAgIE1TR19FT1IJCT0gMHg4MCwgLyogRW5kIG9mIHJlY29yZC4gICovCisjZGVmaW5lCU1TR19FT1IJCU1TR19FT1IKKyAgICBNU0dfV0FJVEFMTAkJPSAweDEwMCwgLyogV2FpdCBmb3IgYSBmdWxsIHJlcXVlc3QuICAqLworI2RlZmluZQlNU0dfV0FJVEFMTAlNU0dfV0FJVEFMTAorICAgIE1TR19GSU4JCT0gMHgyMDAsCisjZGVmaW5lCU1TR19GSU4JCU1TR19GSU4KKyAgICBNU0dfU1lOCQk9IDB4NDAwLAorI2RlZmluZQlNU0dfU1lOCQlNU0dfU1lOCisgICAgTVNHX0NPTkZJUk0JCT0gMHg4MDAsIC8qIENvbmZpcm0gcGF0aCB2YWxpZGl0eS4gICovCisjZGVmaW5lCU1TR19DT05GSVJNCU1TR19DT05GSVJNCisgICAgTVNHX1JTVAkJPSAweDEwMDAsCisjZGVmaW5lCU1TR19SU1QJCU1TR19SU1QKKyAgICBNU0dfRVJSUVVFVUUJPSAweDIwMDAsIC8qIEZldGNoIG1lc3NhZ2UgZnJvbSBlcnJvciBxdWV1ZS4gICovCisjZGVmaW5lCU1TR19FUlJRVUVVRQlNU0dfRVJSUVVFVUUKKyAgICBNU0dfTk9TSUdOQUwJPSAweDQwMDAsIC8qIERvIG5vdCBnZW5lcmF0ZSBTSUdQSVBFLiAgKi8KKyNkZWZpbmUJTVNHX05PU0lHTkFMCU1TR19OT1NJR05BTAorICAgIE1TR19NT1JFCQk9IDB4ODAwMCwgIC8qIFNlbmRlciB3aWxsIHNlbmQgbW9yZS4gICovCisjZGVmaW5lCU1TR19NT1JFCU1TR19NT1JFCisKKyAgICBNU0dfQ01TR19DTE9FWEVDCT0gMHg0MDAwMDAwMAkvKiBTZXQgY2xvc2Vfb25fZXhpdCBmb3IgZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IgcmVjZWl2ZWQgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDTV9SSUdIVFMuICAqLworI2RlZmluZSBNU0dfQ01TR19DTE9FWEVDIE1TR19DTVNHX0NMT0VYRUMKKyAgfTsKKworCisvKiBTdHJ1Y3R1cmUgZGVzY3JpYmluZyBtZXNzYWdlcyBzZW50IGJ5CisgICBgc2VuZG1zZycgYW5kIHJlY2VpdmVkIGJ5IGByZWN2bXNnJy4gICovCitzdHJ1Y3QgbXNnaGRyCisgIHsKKyAgICB2b2lkICptc2dfbmFtZTsJCS8qIEFkZHJlc3MgdG8gc2VuZCB0by9yZWNlaXZlIGZyb20uICAqLworICAgIHNvY2tsZW5fdCBtc2dfbmFtZWxlbjsJLyogTGVuZ3RoIG9mIGFkZHJlc3MgZGF0YS4gICovCisKKyAgICBzdHJ1Y3QgaW92ZWMgKm1zZ19pb3Y7CS8qIFZlY3RvciBvZiBkYXRhIHRvIHNlbmQvcmVjZWl2ZSBpbnRvLiAgKi8KKyAgICBzaXplX3QgbXNnX2lvdmxlbjsJCS8qIE51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgdmVjdG9yLiAgKi8KKworICAgIHZvaWQgKm1zZ19jb250cm9sOwkJLyogQW5jaWxsYXJ5IGRhdGEgKGVnIEJTRCBmaWxlZGVzYyBwYXNzaW5nKS4gKi8KKyAgICBzaXplX3QgbXNnX2NvbnRyb2xsZW47CS8qIEFuY2lsbGFyeSBkYXRhIGJ1ZmZlciBsZW5ndGguCisJCQkJICAgISEgVGhlIHR5cGUgc2hvdWxkIGJlIHNvY2tsZW5fdCBidXQgdGhlCisJCQkJICAgZGVmaW5pdGlvbiBvZiB0aGUga2VybmVsIGlzIGluY29tcGF0aWJsZQorCQkJCSAgIHdpdGggdGhpcy4gICovCisKKyAgICBpbnQgbXNnX2ZsYWdzOwkJLyogRmxhZ3Mgb24gcmVjZWl2ZWQgbWVzc2FnZS4gICovCisgIH07CisKKy8qIFN0cnVjdHVyZSB1c2VkIGZvciBzdG9yYWdlIG9mIGFuY2lsbGFyeSBkYXRhIG9iamVjdCBpbmZvcm1hdGlvbi4gICovCitzdHJ1Y3QgY21zZ2hkcgorICB7CisgICAgc2l6ZV90IGNtc2dfbGVuOwkJLyogTGVuZ3RoIG9mIGRhdGEgaW4gY21zZ19kYXRhIHBsdXMgbGVuZ3RoCisJCQkJICAgb2YgY21zZ2hkciBzdHJ1Y3R1cmUuCisJCQkJICAgISEgVGhlIHR5cGUgc2hvdWxkIGJlIHNvY2tsZW5fdCBidXQgdGhlCisJCQkJICAgZGVmaW5pdGlvbiBvZiB0aGUga2VybmVsIGlzIGluY29tcGF0aWJsZQorCQkJCSAgIHdpdGggdGhpcy4gICovCisgICAgaW50IGNtc2dfbGV2ZWw7CQkvKiBPcmlnaW5hdGluZyBwcm90b2NvbC4gICovCisgICAgaW50IGNtc2dfdHlwZTsJCS8qIFByb3RvY29sIHNwZWNpZmljIHR5cGUuICAqLworI2lmICghZGVmaW5lZCBfX1NUUklDVF9BTlNJX18gJiYgX19HTlVDX18gPj0gMikgfHwgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCisgICAgX19leHRlbnNpb25fXyB1bnNpZ25lZCBjaGFyIF9fY21zZ19kYXRhIF9fZmxleGFycjsgLyogQW5jaWxsYXJ5IGRhdGEuICAqLworI2VuZGlmCisgIH07CisKKy8qIEFuY2lsbGFyeSBkYXRhIG9iamVjdCBtYW5pcHVsYXRpb24gbWFjcm9zLiAgKi8KKyNpZiAoIWRlZmluZWQgX19TVFJJQ1RfQU5TSV9fICYmIF9fR05VQ19fID49IDIpIHx8IF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorIyBkZWZpbmUgQ01TR19EQVRBKGNtc2cpICgoY21zZyktPl9fY21zZ19kYXRhKQorI2Vsc2UKKyMgZGVmaW5lIENNU0dfREFUQShjbXNnKSAoKHVuc2lnbmVkIGNoYXIgKikgKChzdHJ1Y3QgY21zZ2hkciAqKSAoY21zZykgKyAxKSkKKyNlbmRpZgorI2RlZmluZSBDTVNHX05YVEhEUihtaGRyLCBjbXNnKSBfX2Ntc2dfbnh0aGRyIChtaGRyLCBjbXNnKQorI2RlZmluZSBDTVNHX0ZJUlNUSERSKG1oZHIpIFwKKyAgKChzaXplX3QpIChtaGRyKS0+bXNnX2NvbnRyb2xsZW4gPj0gc2l6ZW9mIChzdHJ1Y3QgY21zZ2hkcikJCSAgICAgIFwKKyAgID8gKHN0cnVjdCBjbXNnaGRyICopIChtaGRyKS0+bXNnX2NvbnRyb2wgOiAoc3RydWN0IGNtc2doZHIgKikgMCkKKyNkZWZpbmUgQ01TR19BTElHTihsZW4pICgoKGxlbikgKyBzaXplb2YgKHNpemVfdCkgLSAxKSBcCisJCQkgJiAoc2l6ZV90KSB+KHNpemVvZiAoc2l6ZV90KSAtIDEpKQorI2RlZmluZSBDTVNHX1NQQUNFKGxlbikgKENNU0dfQUxJR04gKGxlbikgXAorCQkJICsgQ01TR19BTElHTiAoc2l6ZW9mIChzdHJ1Y3QgY21zZ2hkcikpKQorI2RlZmluZSBDTVNHX0xFTihsZW4pICAgKENNU0dfQUxJR04gKHNpemVvZiAoc3RydWN0IGNtc2doZHIpKSArIChsZW4pKQorCitleHRlcm4gc3RydWN0IGNtc2doZHIgKl9fY21zZ19ueHRoZHIgKHN0cnVjdCBtc2doZHIgKl9fbWhkciwKKwkJCQkgICAgICBzdHJ1Y3QgY21zZ2hkciAqX19jbXNnKSBfX1RIUk9XOworI2lmZGVmIF9fVVNFX0VYVEVSTl9JTkxJTkVTCisjIGlmbmRlZiBfRVhURVJOX0lOTElORQorIyAgZGVmaW5lIF9FWFRFUk5fSU5MSU5FIF9fZXh0ZXJuX2lubGluZQorIyBlbmRpZgorX0VYVEVSTl9JTkxJTkUgc3RydWN0IGNtc2doZHIgKgorX19OVEggKF9fY21zZ19ueHRoZHIgKHN0cnVjdCBtc2doZHIgKl9fbWhkciwgc3RydWN0IGNtc2doZHIgKl9fY21zZykpCit7CisgIGlmICgoc2l6ZV90KSBfX2Ntc2ctPmNtc2dfbGVuIDwgc2l6ZW9mIChzdHJ1Y3QgY21zZ2hkcikpCisgICAgLyogVGhlIGtlcm5lbCBoZWFkZXIgZG9lcyB0aGlzIHNvIHRoZXJlIG1heSBiZSBhIHJlYXNvbi4gICovCisgICAgcmV0dXJuIDA7CisKKyAgX19jbXNnID0gKHN0cnVjdCBjbXNnaGRyICopICgodW5zaWduZWQgY2hhciAqKSBfX2Ntc2cKKwkJCSAgICAgICArIENNU0dfQUxJR04gKF9fY21zZy0+Y21zZ19sZW4pKTsKKyAgaWYgKCh1bnNpZ25lZCBjaGFyICopIChfX2Ntc2cgKyAxKSA+ICgodW5zaWduZWQgY2hhciAqKSBfX21oZHItPm1zZ19jb250cm9sCisJCQkJCSsgX19taGRyLT5tc2dfY29udHJvbGxlbikKKyAgICAgIHx8ICgodW5zaWduZWQgY2hhciAqKSBfX2Ntc2cgKyBDTVNHX0FMSUdOIChfX2Ntc2ctPmNtc2dfbGVuKQorCSAgPiAoKHVuc2lnbmVkIGNoYXIgKikgX19taGRyLT5tc2dfY29udHJvbCArIF9fbWhkci0+bXNnX2NvbnRyb2xsZW4pKSkKKyAgICAvKiBObyBtb3JlIGVudHJpZXMuICAqLworICAgIHJldHVybiAwOworICByZXR1cm4gX19jbXNnOworfQorI2VuZGlmCS8qIFVzZSBgZXh0ZXJuIGlubGluZScuICAqLworCisvKiBTb2NrZXQgbGV2ZWwgbWVzc2FnZSB0eXBlcy4gIFRoaXMgbXVzdCBtYXRjaCB0aGUgZGVmaW5pdGlvbnMgaW4KKyAgIDxsaW51eC9zb2NrZXQuaD4uICAqLworZW51bQorICB7CisgICAgU0NNX1JJR0hUUyA9IDB4MDEJCS8qIFRyYW5zZmVyIGZpbGUgZGVzY3JpcHRvcnMuICAqLworI2RlZmluZSBTQ01fUklHSFRTIFNDTV9SSUdIVFMKKyNpZmRlZiBfX1VTRV9CU0QKKyAgICAsIFNDTV9DUkVERU5USUFMUyA9IDB4MDIJLyogQ3JlZGVudGlhbHMgcGFzc2luZy4gICovCisjIGRlZmluZSBTQ01fQ1JFREVOVElBTFMgU0NNX0NSRURFTlRJQUxTCisjZW5kaWYKKyAgfTsKKworI2lmZGVmIF9fVVNFX0dOVQorLyogVXNlciB2aXNpYmxlIHN0cnVjdHVyZSBmb3IgU0NNX0NSRURFTlRJQUxTIG1lc3NhZ2UgKi8KK3N0cnVjdCB1Y3JlZAoreworICBwaWRfdCBwaWQ7CQkJLyogUElEIG9mIHNlbmRpbmcgcHJvY2Vzcy4gICovCisgIHVpZF90IHVpZDsJCQkvKiBVSUQgb2Ygc2VuZGluZyBwcm9jZXNzLiAgKi8KKyAgZ2lkX3QgZ2lkOwkJCS8qIEdJRCBvZiBzZW5kaW5nIHByb2Nlc3MuICAqLworfTsKKyNlbmRpZgorCisvKiBVZ2x5IHdvcmthcm91bmQgZm9yIHVuY2xlYW4ga2VybmVsIGhlYWRlcnMuICAqLworI2lmICFkZWZpbmVkIF9fVVNFX01JU0MgJiYgIWRlZmluZWQgX19VU0VfR05VCisjIGlmbmRlZiBGSU9HRVRPV04KKyMgIGRlZmluZSBfX1NZU19TT0NLRVRfSF91bmRlZl9GSU9HRVRPV04KKyMgZW5kaWYKKyMgaWZuZGVmIEZJT1NFVE9XTgorIyAgZGVmaW5lIF9fU1lTX1NPQ0tFVF9IX3VuZGVmX0ZJT1NFVE9XTgorIyBlbmRpZgorIyBpZm5kZWYgU0lPQ0FUTUFSSworIyAgZGVmaW5lIF9fU1lTX1NPQ0tFVF9IX3VuZGVmX1NJT0NBVE1BUksKKyMgZW5kaWYKKyMgaWZuZGVmIFNJT0NHUEdSUAorIyAgZGVmaW5lIF9fU1lTX1NPQ0tFVF9IX3VuZGVmX1NJT0NHUEdSUAorIyBlbmRpZgorIyBpZm5kZWYgU0lPQ0dTVEFNUAorIyAgZGVmaW5lIF9fU1lTX1NPQ0tFVF9IX3VuZGVmX1NJT0NHU1RBTVAKKyMgZW5kaWYKKyMgaWZuZGVmIFNJT0NHU1RBTVBOUworIyAgZGVmaW5lIF9fU1lTX1NPQ0tFVF9IX3VuZGVmX1NJT0NHU1RBTVBOUworIyBlbmRpZgorIyBpZm5kZWYgU0lPQ1NQR1JQCisjICBkZWZpbmUgX19TWVNfU09DS0VUX0hfdW5kZWZfU0lPQ1NQR1JQCisjIGVuZGlmCisjZW5kaWYKKworLyogR2V0IHNvY2tldCBtYW5pcHVsYXRpb24gcmVsYXRlZCBpbmZvcm1hdGlvbnMgZnJvbSBrZXJuZWwgaGVhZGVycy4gICovCisjaW5jbHVkZSA8YXNtL3NvY2tldC5oPgorCisjaWYgIWRlZmluZWQgX19VU0VfTUlTQyAmJiAhZGVmaW5lZCBfX1VTRV9HTlUKKyMgaWZkZWYgX19TWVNfU09DS0VUX0hfdW5kZWZfRklPR0VUT1dOCisjICB1bmRlZiBfX1NZU19TT0NLRVRfSF91bmRlZl9GSU9HRVRPV04KKyMgIHVuZGVmIEZJT0dFVE9XTgorIyBlbmRpZgorIyBpZmRlZiBfX1NZU19TT0NLRVRfSF91bmRlZl9GSU9TRVRPV04KKyMgIHVuZGVmIF9fU1lTX1NPQ0tFVF9IX3VuZGVmX0ZJT1NFVE9XTgorIyAgdW5kZWYgRklPU0VUT1dOCisjIGVuZGlmCisjIGlmZGVmIF9fU1lTX1NPQ0tFVF9IX3VuZGVmX1NJT0NBVE1BUksKKyMgIHVuZGVmIF9fU1lTX1NPQ0tFVF9IX3VuZGVmX1NJT0NBVE1BUksKKyMgIHVuZGVmIFNJT0NBVE1BUksKKyMgZW5kaWYKKyMgaWZkZWYgX19TWVNfU09DS0VUX0hfdW5kZWZfU0lPQ0dQR1JQCisjICB1bmRlZiBfX1NZU19TT0NLRVRfSF91bmRlZl9TSU9DR1BHUlAKKyMgIHVuZGVmIFNJT0NHUEdSUAorIyBlbmRpZgorIyBpZmRlZiBfX1NZU19TT0NLRVRfSF91bmRlZl9TSU9DR1NUQU1QCisjICB1bmRlZiBfX1NZU19TT0NLRVRfSF91bmRlZl9TSU9DR1NUQU1QCisjICB1bmRlZiBTSU9DR1NUQU1QCisjIGVuZGlmCisjIGlmZGVmIF9fU1lTX1NPQ0tFVF9IX3VuZGVmX1NJT0NHU1RBTVBOUworIyAgdW5kZWYgX19TWVNfU09DS0VUX0hfdW5kZWZfU0lPQ0dTVEFNUE5TCisjICB1bmRlZiBTSU9DR1NUQU1QTlMKKyMgZW5kaWYKKyMgaWZkZWYgX19TWVNfU09DS0VUX0hfdW5kZWZfU0lPQ1NQR1JQCisjICB1bmRlZiBfX1NZU19TT0NLRVRfSF91bmRlZl9TSU9DU1BHUlAKKyMgIHVuZGVmIFNJT0NTUEdSUAorIyBlbmRpZgorI2VuZGlmCisKKy8qIFN0cnVjdHVyZSB1c2VkIHRvIG1hbmlwdWxhdGUgdGhlIFNPX0xJTkdFUiBvcHRpb24uICAqLworc3RydWN0IGxpbmdlcgorICB7CisgICAgaW50IGxfb25vZmY7CQkvKiBOb256ZXJvIHRvIGxpbmdlciBvbiBjbG9zZS4gICovCisgICAgaW50IGxfbGluZ2VyOwkJLyogVGltZSB0byBsaW5nZXIuICAqLworICB9OworCisjZW5kaWYJLyogYml0cy9zb2NrZXQuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0Mi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNGNiNDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zb2NrZXQyLmgKQEAgLTAsMCArMSw3OCBAQAorLyogQ2hlY2tpbmcgbWFjcm9zIGZvciBzb2NrZXQgZnVuY3Rpb25zLgorICAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9TWVNfU09DS0VUX0gKKyMgZXJyb3IgIk5ldmVyIGluY2x1ZGUgPGJpdHMvc29ja2V0Mi5oPiBkaXJlY3RseTsgdXNlIDxzeXMvc29ja2V0Lmg+IGluc3RlYWQuIgorI2VuZGlmCisKK2V4dGVybiBzc2l6ZV90IF9fcmVjdl9jaGsgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwgc2l6ZV90IF9fYnVmbGVuLAorCQkJICAgaW50IF9fZmxhZ3MpOworZXh0ZXJuIHNzaXplX3QgX19SRURJUkVDVCAoX19yZWN2X2FsaWFzLCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLAorCQkJCQkgIGludCBfX2ZsYWdzKSwgcmVjdik7CitleHRlcm4gc3NpemVfdCBfX1JFRElSRUNUIChfX3JlY3ZfY2hrX3dhcm4sCisJCQkgICAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLCBzaXplX3QgX19idWZsZW4sCisJCQkgICAgaW50IF9fZmxhZ3MpLCBfX3JlY3ZfY2hrKQorICAgICBfX3dhcm5hdHRyICgicmVjdiBjYWxsZWQgd2l0aCBiaWdnZXIgbGVuZ3RoIHRoYW4gc2l6ZSBvZiBkZXN0aW5hdGlvbiAiCisJCSAiYnVmZmVyIik7CisKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgc3NpemVfdAorcmVjdiAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLCBpbnQgX19mbGFncykKK3sKKyAgaWYgKF9fYm9zMCAoX19idWYpICE9IChzaXplX3QpIC0xKQorICAgIHsKKyAgICAgIGlmICghX19idWlsdGluX2NvbnN0YW50X3AgKF9fbikpCisJcmV0dXJuIF9fcmVjdl9jaGsgKF9fZmQsIF9fYnVmLCBfX24sIF9fYm9zMCAoX19idWYpLCBfX2ZsYWdzKTsKKworICAgICAgaWYgKF9fbiA+IF9fYm9zMCAoX19idWYpKQorCXJldHVybiBfX3JlY3ZfY2hrX3dhcm4gKF9fZmQsIF9fYnVmLCBfX24sIF9fYm9zMCAoX19idWYpLCBfX2ZsYWdzKTsKKyAgICB9CisgIHJldHVybiBfX3JlY3ZfYWxpYXMgKF9fZmQsIF9fYnVmLCBfX24sIF9fZmxhZ3MpOworfQorCitleHRlcm4gc3NpemVfdCBfX3JlY3Zmcm9tX2NoayAoaW50IF9fZmQsIHZvaWQgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX24sCisJCQkgICAgICAgc2l6ZV90IF9fYnVmbGVuLCBpbnQgX19mbGFncywKKwkJCSAgICAgICBfX1NPQ0tBRERSX0FSRyBfX2FkZHIsCisJCQkgICAgICAgc29ja2xlbl90ICpfX3Jlc3RyaWN0IF9fYWRkcl9sZW4pOworZXh0ZXJuIHNzaXplX3QgX19SRURJUkVDVCAoX19yZWN2ZnJvbV9hbGlhcywKKwkJCSAgIChpbnQgX19mZCwgdm9pZCAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbiwKKwkJCSAgICBpbnQgX19mbGFncywgX19TT0NLQUREUl9BUkcgX19hZGRyLAorCQkJICAgIHNvY2tsZW5fdCAqX19yZXN0cmljdCBfX2FkZHJfbGVuKSwgcmVjdmZyb20pOworZXh0ZXJuIHNzaXplX3QgX19SRURJUkVDVCAoX19yZWN2ZnJvbV9jaGtfd2FybiwKKwkJCSAgIChpbnQgX19mZCwgdm9pZCAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbiwKKwkJCSAgICBzaXplX3QgX19idWZsZW4sIGludCBfX2ZsYWdzLAorCQkJICAgIF9fU09DS0FERFJfQVJHIF9fYWRkciwKKwkJCSAgICBzb2NrbGVuX3QgKl9fcmVzdHJpY3QgX19hZGRyX2xlbiksIF9fcmVjdmZyb21fY2hrKQorICAgICBfX3dhcm5hdHRyICgicmVjdmZyb20gY2FsbGVkIHdpdGggYmlnZ2VyIGxlbmd0aCB0aGFuIHNpemUgb2YgIgorCQkgImRlc3RpbmF0aW9uIGJ1ZmZlciIpOworCitfX2V4dGVybl9hbHdheXNfaW5saW5lIHNzaXplX3QKK3JlY3Zmcm9tIChpbnQgX19mZCwgdm9pZCAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbiwgaW50IF9fZmxhZ3MsCisJICBfX1NPQ0tBRERSX0FSRyBfX2FkZHIsIHNvY2tsZW5fdCAqX19yZXN0cmljdCBfX2FkZHJfbGVuKQoreworICBpZiAoX19ib3MwIChfX2J1ZikgIT0gKHNpemVfdCkgLTEpCisgICAgeworICAgICAgaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19uKSkKKwlyZXR1cm4gX19yZWN2ZnJvbV9jaGsgKF9fZmQsIF9fYnVmLCBfX24sIF9fYm9zMCAoX19idWYpLCBfX2ZsYWdzLAorCQkJICAgICAgIF9fYWRkciwgX19hZGRyX2xlbik7CisgICAgICBpZiAoX19uID4gX19ib3MwIChfX2J1ZikpCisJcmV0dXJuIF9fcmVjdmZyb21fY2hrX3dhcm4gKF9fZmQsIF9fYnVmLCBfX24sIF9fYm9zMCAoX19idWYpLCBfX2ZsYWdzLAorCQkJCSAgICBfX2FkZHIsIF9fYWRkcl9sZW4pOworICAgIH0KKyAgcmV0dXJuIF9fcmVjdmZyb21fYWxpYXMgKF9fZmQsIF9fYnVmLCBfX24sIF9fZmxhZ3MsIF9fYWRkciwgX19hZGRyX2xlbik7Cit9CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zdGFiLmRlZiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3N0YWIuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNTQ3NzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zdGFiLmRlZgpAQCAtMCwwICsxLDIzNCBAQAorLyogVGFibGUgb2YgREJYIHN5bWJvbCBjb2RlcyBmb3IgdGhlIEdOVSBzeXN0ZW0uCisgICBDb3B5cmlnaHQgKEMpIDE5ODgsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qIFRoaXMgY29udGFpbnMgY29udHJpYnV0aW9uIGZyb20gQ3lnbnVzIFN1cHBvcnQuICAqLworDAorLyogR2xvYmFsIHZhcmlhYmxlLiAgT25seSB0aGUgbmFtZSBpcyBzaWduaWZpY2FudC4KKyAgIFRvIGZpbmQgdGhlIGFkZHJlc3MsIGxvb2sgaW4gdGhlIGNvcnJlc3BvbmRpbmcgZXh0ZXJuYWwgc3ltYm9sLiAgKi8KK19fZGVmaW5lX3N0YWIgKE5fR1NZTSwgMHgyMCwgIkdTWU0iKQorCisvKiBGdW5jdGlvbiBuYW1lIGZvciBCU0QgRm9ydHJhbi4gIE9ubHkgdGhlIG5hbWUgaXMgc2lnbmlmaWNhbnQuCisgICBUbyBmaW5kIHRoZSBhZGRyZXNzLCBsb29rIGluIHRoZSBjb3JyZXNwb25kaW5nIGV4dGVybmFsIHN5bWJvbC4gICovCitfX2RlZmluZV9zdGFiIChOX0ZOQU1FLCAweDIyLCAiRk5BTUUiKQorCisvKiBGdW5jdGlvbiBuYW1lIG9yIHRleHQtc2VnbWVudCB2YXJpYWJsZSBmb3IgQy4gIFZhbHVlIGlzIGl0cyBhZGRyZXNzLgorICAgRGVzYyBpcyBzdXBwb3NlZGx5IHN0YXJ0aW5nIGxpbmUgbnVtYmVyLCBidXQgR0NDIGRvZXNuJ3Qgc2V0IGl0CisgICBhbmQgREJYIHNlZW1zIG5vdCB0byBtaXNzIGl0LiAgKi8KK19fZGVmaW5lX3N0YWIgKE5fRlVOLCAweDI0LCAiRlVOIikKKworLyogRGF0YS1zZWdtZW50IHZhcmlhYmxlIHdpdGggaW50ZXJuYWwgbGlua2FnZS4gIFZhbHVlIGlzIGl0cyBhZGRyZXNzLgorICAgIlN0YXRpYyBTeW0iLiAgKi8KK19fZGVmaW5lX3N0YWIgKE5fU1RTWU0sIDB4MjYsICJTVFNZTSIpCisKKy8qIEJTUy1zZWdtZW50IHZhcmlhYmxlIHdpdGggaW50ZXJuYWwgbGlua2FnZS4gIFZhbHVlIGlzIGl0cyBhZGRyZXNzLiAgKi8KK19fZGVmaW5lX3N0YWIgKE5fTENTWU0sIDB4MjgsICJMQ1NZTSIpCisKKy8qIE5hbWUgb2YgbWFpbiByb3V0aW5lLiAgT25seSB0aGUgbmFtZSBpcyBzaWduaWZpY2FudC4KKyAgIFRoaXMgaXMgbm90IHVzZWQgaW4gQy4gICovCitfX2RlZmluZV9zdGFiIChOX01BSU4sIDB4MmEsICJNQUlOIikKKworLyogR2xvYmFsIHN5bWJvbCBpbiBQYXNjYWwuCisgICBTdXBwb3NlZGx5IHRoZSB2YWx1ZSBpcyBpdHMgbGluZSBudW1iZXI7IEknbSBza2VwdGljYWwuICAqLworX19kZWZpbmVfc3RhYiAoTl9QQywgMHgzMCwgIlBDIikKKworLyogTnVtYmVyIG9mIHN5bWJvbHM6ICAwLCBmaWxlcywsZnVuY3MsbGluZXMgYWNjb3JkaW5nIHRvIFVsdHJpeCBWNC4wLiAqLworX19kZWZpbmVfc3RhYiAoTl9OU1lNUywgMHgzMiwgIk5TWU1TIikKKworLyogIk5vIERTVCBtYXAgZm9yIHN5bTogbmFtZSwgLDAsdHlwZSxpZ25vcmVkIiAgYWNjb3JkaW5nIHRvIFVsdHJpeCBWNC4wLiAqLworX19kZWZpbmVfc3RhYiAoTl9OT01BUCwgMHgzNCwgIk5PTUFQIikKKworLyogTmV3IHN0YWIgZnJvbSBTb2xhcmlzLiAgSSBkb24ndCBrbm93IHdoYXQgaXQgbWVhbnMsIGJ1dCBpdAorICAgZG9uJ3Qgc2VlbSB0byBjb250YWluIHVzZWZ1bCBpbmZvcm1hdGlvbi4gICovCitfX2RlZmluZV9zdGFiIChOX09CSiwgMHgzOCwgIk9CSiIpCisKKy8qIE5ldyBzdGFiIGZyb20gU29sYXJpcy4gIEkgZG9uJ3Qga25vdyB3aGF0IGl0IG1lYW5zLCBidXQgaXQKKyAgIGRvbid0IHNlZW0gdG8gY29udGFpbiB1c2VmdWwgaW5mb3JtYXRpb24uICBQb3NzaWJseSByZWxhdGVkIHRvIHRoZQorICAgb3B0aW1pemF0aW9uIGZsYWdzIHVzZWQgaW4gdGhpcyBtb2R1bGUuICAqLworX19kZWZpbmVfc3RhYiAoTl9PUFQsIDB4M2MsICJPUFQiKQorCisvKiBSZWdpc3RlciB2YXJpYWJsZS4gIFZhbHVlIGlzIG51bWJlciBvZiByZWdpc3Rlci4gICovCitfX2RlZmluZV9zdGFiIChOX1JTWU0sIDB4NDAsICJSU1lNIikKKworLyogTW9kdWxhLTIgY29tcGlsYXRpb24gdW5pdC4gIENhbiBzb21lb25lIHNheSB3aGF0IGluZm8gaXQgY29udGFpbnM/ICAqLworX19kZWZpbmVfc3RhYiAoTl9NMkMsIDB4NDIsICJNMkMiKQorCisvKiBMaW5lIG51bWJlciBpbiB0ZXh0IHNlZ21lbnQuICBEZXNjIGlzIHRoZSBsaW5lIG51bWJlcjsKKyAgIHZhbHVlIGlzIGNvcnJlc3BvbmRpbmcgYWRkcmVzcy4gICovCitfX2RlZmluZV9zdGFiIChOX1NMSU5FLCAweDQ0LCAiU0xJTkUiKQorCisvKiBTaW1pbGFyLCBmb3IgZGF0YSBzZWdtZW50LiAgKi8KK19fZGVmaW5lX3N0YWIgKE5fRFNMSU5FLCAweDQ2LCAiRFNMSU5FIikKKworLyogU2ltaWxhciwgZm9yIGJzcyBzZWdtZW50LiAgKi8KK19fZGVmaW5lX3N0YWIgKE5fQlNMSU5FLCAweDQ4LCAiQlNMSU5FIikKKworLyogU3VuJ3Mgc291cmNlLWNvZGUgYnJvd3NlciBzdGFicy4gID8/IERvbid0IGtub3cgd2hhdCB0aGUgZmllbGRzIGFyZS4KKyAgIFN1cHBvc2VkbHkgdGhlIGZpZWxkIGlzICJwYXRoIHRvIGFzc29jaWF0ZWQgLmNiIGZpbGUiLiAgVEhJUyBWQUxVRQorICAgT1ZFUkxBUFMgV0lUSCBOX0JTTElORSEgICovCitfX2RlZmluZV9zdGFiIChOX0JST1dTLCAweDQ4LCAiQlJPV1MiKQorCisvKiBHTlUgTW9kdWxhLTIgZGVmaW5pdGlvbiBtb2R1bGUgZGVwZW5kZW5jeS4gIFZhbHVlIGlzIHRoZSBtb2RpZmljYXRpb24gdGltZQorICAgb2YgdGhlIGRlZmluaXRpb24gZmlsZS4gIE90aGVyIGlzIG5vbi16ZXJvIGlmIGl0IGlzIGltcG9ydGVkIHdpdGggdGhlCisgICBHTlUgTTIga2V5d29yZCAlSU5JVElBTElaRS4gIFBlcmhhcHMgTl9NMkMgY2FuIGJlIHVzZWQgaWYgdGhlcmUKKyAgIGFyZSBlbm91Z2ggZW1wdHkgZmllbGRzPyAqLworX19kZWZpbmVfc3RhYihOX0RFRkQsIDB4NGEsICJERUZEIikKKworLyogVEhFIEZPTExPV0lORyBUV08gU1RBQiBWQUxVRVMgQ09ORkxJQ1QuICBIYXBwaWx5LCBvbmUgaXMgZm9yIE1vZHVsYS0yCisgICBhbmQgb25lIGlzIGZvciBDKysuICAgU3RpbGwsLi4uICovCisvKiBHTlUgQysrIGV4Y2VwdGlvbiB2YXJpYWJsZS4gIE5hbWUgaXMgdmFyaWFibGUgbmFtZS4gICovCitfX2RlZmluZV9zdGFiIChOX0VIREVDTCwgMHg1MCwgIkVIREVDTCIpCisvKiBNb2R1bGEyIGluZm8gImZvciBpbWMiOiAgbmFtZSwsMCwwLDAgIGFjY29yZGluZyB0byBVbHRyaXggVjQuMC4gICovCitfX2RlZmluZV9zdGFiIChOX01PRDIsIDB4NTAsICJNT0QyIikKKworLyogR05VIEMrKyBgY2F0Y2gnIGNsYXVzZS4gIFZhbHVlIGlzIGl0cyBhZGRyZXNzLiAgRGVzYyBpcyBub256ZXJvIGlmCisgICB0aGlzIGVudHJ5IGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgQ0FVR0hUIHN0YWIgc2F5aW5nIHdoYXQgZXhjZXB0aW9uCisgICB3YXMgY2F1Z2h0LiAgTXVsdGlwbGUgQ0FVR0hUIHN0YWJzIG1lYW5zIHRoYXQgbXVsdGlwbGUgZXhjZXB0aW9ucworICAgY2FuIGJlIGNhdWdodCBoZXJlLiAgSWYgRGVzYyBpcyAwLCBpdCBtZWFucyBhbGwgZXhjZXB0aW9ucyBhcmUgY2F1Z2h0CisgICBoZXJlLiAgKi8KK19fZGVmaW5lX3N0YWIgKE5fQ0FUQ0gsIDB4NTQsICJDQVRDSCIpCisKKy8qIFN0cnVjdHVyZSBvciB1bmlvbiBlbGVtZW50LiAgVmFsdWUgaXMgb2Zmc2V0IGluIHRoZSBzdHJ1Y3R1cmUuICAqLworX19kZWZpbmVfc3RhYiAoTl9TU1lNLCAweDYwLCAiU1NZTSIpCisKKy8qIE5hbWUgb2YgbWFpbiBzb3VyY2UgZmlsZS4KKyAgIFZhbHVlIGlzIHN0YXJ0aW5nIHRleHQgYWRkcmVzcyBvZiB0aGUgY29tcGlsYXRpb24uICAqLworX19kZWZpbmVfc3RhYiAoTl9TTywgMHg2NCwgIlNPIikKKworLyogQXV0b21hdGljIHZhcmlhYmxlIGluIHRoZSBzdGFjay4gIFZhbHVlIGlzIG9mZnNldCBmcm9tIGZyYW1lIHBvaW50ZXIuCisgICBBbHNvIHVzZWQgZm9yIHR5cGUgZGVzY3JpcHRpb25zLiAgKi8KK19fZGVmaW5lX3N0YWIgKE5fTFNZTSwgMHg4MCwgIkxTWU0iKQorCisvKiBCZWdpbm5pbmcgb2YgYW4gaW5jbHVkZSBmaWxlLiAgT25seSBTdW4gdXNlcyB0aGlzLgorICAgSW4gYW4gb2JqZWN0IGZpbGUsIG9ubHkgdGhlIG5hbWUgaXMgc2lnbmlmaWNhbnQuCisgICBUaGUgU3VuIGxpbmtlciBwdXRzIGRhdGEgaW50byBzb21lIG9mIHRoZSBvdGhlciBmaWVsZHMuICAqLworX19kZWZpbmVfc3RhYiAoTl9CSU5DTCwgMHg4MiwgIkJJTkNMIikKKworLyogTmFtZSBvZiBzdWItc291cmNlIGZpbGUgKCNpbmNsdWRlIGZpbGUpLgorICAgVmFsdWUgaXMgc3RhcnRpbmcgdGV4dCBhZGRyZXNzIG9mIHRoZSBjb21waWxhdGlvbi4gICovCitfX2RlZmluZV9zdGFiIChOX1NPTCwgMHg4NCwgIlNPTCIpCisKKy8qIFBhcmFtZXRlciB2YXJpYWJsZS4gIFZhbHVlIGlzIG9mZnNldCBmcm9tIGFyZ3VtZW50IHBvaW50ZXIuCisgICAoT24gbW9zdCBtYWNoaW5lcyB0aGUgYXJndW1lbnQgcG9pbnRlciBpcyB0aGUgc2FtZSBhcyB0aGUgZnJhbWUgcG9pbnRlci4gICovCitfX2RlZmluZV9zdGFiIChOX1BTWU0sIDB4YTAsICJQU1lNIikKKworLyogRW5kIG9mIGFuIGluY2x1ZGUgZmlsZS4gIE5vIG5hbWUuCisgICBUaGlzIGFuZCBOX0JJTkNMIGFjdCBhcyBicmFja2V0cyBhcm91bmQgdGhlIGZpbGUncyBvdXRwdXQuCisgICBJbiBhbiBvYmplY3QgZmlsZSwgdGhlcmUgaXMgbm8gc2lnbmlmaWNhbnQgZGF0YSBpbiB0aGlzIGVudHJ5LgorICAgVGhlIFN1biBsaW5rZXIgcHV0cyBkYXRhIGludG8gc29tZSBvZiB0aGUgZmllbGRzLiAgKi8KK19fZGVmaW5lX3N0YWIgKE5fRUlOQ0wsIDB4YTIsICJFSU5DTCIpCisKKy8qIEFsdGVybmF0ZSBlbnRyeSBwb2ludC4gIFZhbHVlIGlzIGl0cyBhZGRyZXNzLiAgKi8KK19fZGVmaW5lX3N0YWIgKE5fRU5UUlksIDB4YTQsICJFTlRSWSIpCisKKy8qIEJlZ2lubmluZyBvZiBsZXhpY2FsIGJsb2NrLgorICAgVGhlIGRlc2MgaXMgdGhlIG5lc3RpbmcgbGV2ZWwgaW4gbGV4aWNhbCBibG9ja3MuCisgICBUaGUgdmFsdWUgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHN0YXJ0IG9mIHRoZSB0ZXh0IGZvciB0aGUgYmxvY2suCisgICBUaGUgdmFyaWFibGVzIGRlY2xhcmVkIGluc2lkZSB0aGUgYmxvY2sgKnByZWNlZGUqIHRoZSBOX0xCUkFDIHN5bWJvbC4gICovCitfX2RlZmluZV9zdGFiIChOX0xCUkFDLCAweGMwLCAiTEJSQUMiKQorCisvKiBQbGFjZSBob2xkZXIgZm9yIGRlbGV0ZWQgaW5jbHVkZSBmaWxlLiAgUmVwbGFjZXMgYSBOX0JJTkNMIGFuZCBldmVyeXRoaW5nCisgICB1cCB0byB0aGUgY29ycmVzcG9uZGluZyBOX0VJTkNMLiAgVGhlIFN1biBsaW5rZXIgZ2VuZXJhdGVzIHRoZXNlIHdoZW4KKyAgIGl0IGZpbmRzIG11bHRpcGxlIGlkZW50aWNhbCBjb3BpZXMgb2YgdGhlIHN5bWJvbHMgZnJvbSBhbiBpbmNsdWRlIGZpbGUuCisgICBUaGlzIGFwcGVhcnMgb25seSBpbiBvdXRwdXQgZnJvbSB0aGUgU3VuIGxpbmtlci4gICovCitfX2RlZmluZV9zdGFiIChOX0VYQ0wsIDB4YzIsICJFWENMIikKKworLyogTW9kdWxhLTIgc2NvcGUgaW5mb3JtYXRpb24uICBDYW4gc29tZW9uZSBzYXkgd2hhdCBpbmZvIGl0IGNvbnRhaW5zPyAgKi8KK19fZGVmaW5lX3N0YWIgKE5fU0NPUEUsIDB4YzQsICJTQ09QRSIpCisKKy8qIEVuZCBvZiBhIGxleGljYWwgYmxvY2suICBEZXNjIG1hdGNoZXMgdGhlIE5fTEJSQUMncyBkZXNjLgorICAgVGhlIHZhbHVlIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBlbmQgb2YgdGhlIHRleHQgZm9yIHRoZSBibG9jay4gICovCitfX2RlZmluZV9zdGFiIChOX1JCUkFDLCAweGUwLCAiUkJSQUMiKQorCisvKiBCZWdpbiBuYW1lZCBjb21tb24gYmxvY2suICBPbmx5IHRoZSBuYW1lIGlzIHNpZ25pZmljYW50LiAgKi8KK19fZGVmaW5lX3N0YWIgKE5fQkNPTU0sIDB4ZTIsICJCQ09NTSIpCisKKy8qIEVuZCBuYW1lZCBjb21tb24gYmxvY2suICBPbmx5IHRoZSBuYW1lIGlzIHNpZ25pZmljYW50CisgICAoYW5kIGl0IHNob3VsZCBtYXRjaCB0aGUgTl9CQ09NTSkuICAqLworX19kZWZpbmVfc3RhYiAoTl9FQ09NTSwgMHhlNCwgIkVDT01NIikKKworLyogRW5kIGNvbW1vbiAobG9jYWwgbmFtZSk6IHZhbHVlIGlzIGFkZHJlc3MuCisgICBJJ20gbm90IHN1cmUgaG93IHRoaXMgaXMgdXNlZC4gICovCitfX2RlZmluZV9zdGFiIChOX0VDT01MLCAweGU4LCAiRUNPTUwiKQorCisvKiBUaGVzZSBTVEFCJ3MgYXJlIHVzZWQgb24gR291bGQgc3lzdGVtcyBmb3IgTm9uLUJhc2UgcmVnaXN0ZXIgc3ltYm9scworICAgb3Igc29tZXRoaW5nIGxpa2UgdGhhdC4gIEZJWE1FLiAgSSBoYXZlIGFzc2lnbmVkIHRoZSB2YWx1ZXMgYXQgcmFuZG9tCisgICBzaW5jZSBJIGRvbid0IGhhdmUgYSBHb3VsZCBoZXJlLiAgRml4dXBzIGZyb20gR291bGQgZm9sayB3ZWxjb21lLi4uICovCitfX2RlZmluZV9zdGFiIChOX05CVEVYVCwgMHhGMCwgIk5CVEVYVCIpCitfX2RlZmluZV9zdGFiIChOX05CREFUQSwgMHhGMiwgIk5CREFUQSIpCitfX2RlZmluZV9zdGFiIChOX05CQlNTLCAgMHhGNCwgIk5CQlNTIikKK19fZGVmaW5lX3N0YWIgKE5fTkJTVFMsICAweEY2LCAiTkJTVFMiKQorX19kZWZpbmVfc3RhYiAoTl9OQkxDUywgIDB4RjgsICJOQkxDUyIpCisKKy8qIFNlY29uZCBzeW1ib2wgZW50cnkgY29udGFpbmluZyBhIGxlbmd0aC12YWx1ZSBmb3IgdGhlIHByZWNlZGluZyBlbnRyeS4KKyAgIFRoZSB2YWx1ZSBpcyB0aGUgbGVuZ3RoLiAgKi8KK19fZGVmaW5lX3N0YWIgKE5fTEVORywgMHhmZSwgIkxFTkciKQorDAorLyogVGhlIGFib3ZlIGluZm9ybWF0aW9uLCBpbiBtYXRyaXggZm9ybWF0LgorCisJCQlTVEFCIE1BVFJJWAorCV9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKwl8IDAwIC0gMUYgYXJlIG5vdCBkYnggc3RhYiBzeW1ib2xzCQl8CisJfCBJbiBtb3N0IGNhc2VzLCB0aGUgbG93IGJpdCBpcyB0aGUgRVhUZXJuYWwgYml0fAorCisJfCAwMCBVTkRFRiAgfCAwMiBBQlMJfCAwNCBURVhUICAgfCAwNiBEQVRBCXwKKwl8IDAxICB8RVhUICB8IDAzICB8RVhUCXwgMDUgIHxFWFQgIHwgMDcgIHxFWFQJfAorCisJfCAwOCBCU1MgICAgfCAwQSBJTkRSCXwgMEMgRk5fU0VRIHwgMEUgICAJfAorCXwgMDkgIHxFWFQgIHwgMEIgCXwgMEQJICAgIHwgMEYJfAorCisJfCAxMCAJICAgIHwgMTIgQ09NTQl8IDE0IFNFVEEgICB8IDE2IFNFVFQJfAorCXwgMTEJICAgIHwgMTMJfCAxNSAJICAgIHwgMTcJfAorCisJfCAxOCBTRVREICAgfCAxQSBTRVRCCXwgMUMgU0VUViAgIHwgMUUgV0FSTklOR3wKKwl8IDE5CSAgICB8IDFCCXwgMUQgCSAgICB8IDFGIEZOCXwKKworCXxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKwl8IERlYnVnIGVudHJpZXMgd2l0aCBiaXQgMDEgc2V0IGFyZSB1bnVzZWQuCXwKKwl8IDIwIEdTWU0gICB8IDIyIEZOQU1FCXwgMjQgRlVOICAgIHwgMjYgU1RTWU0JfAorCXwgMjggTENTWU0gIHwgMkEgTUFJTgl8IDJDCSAgICB8IDJFCXwKKwl8IDMwIFBDCSAgICB8IDMyIE5TWU1TCXwgMzQgTk9NQVAgIHwgMzYJfAorCXwgMzggT0JKICAgIHwgM0EJfCAzQyBPUFQgICAgfCAzRQl8CisJfCA0MCBSU1lNICAgfCA0MiBNMkMJfCA0NCBTTElORSAgfCA0NiBEU0xJTkUgfAorCXwgNDggQlNMSU5FKnwgNEEgREVGRAl8IDRDICAgICAgICB8IDRFCXwKKwl8IDUwIEVIREVDTCp8IDUyCXwgNTQgQ0FUQ0ggIHwgNTYgICAgICAgIHwKKwl8IDU4ICAgICAgICB8IDVBICAgICAgICB8IDVDICAgICAgICB8IDVFCXwKKwl8IDYwIFNTWU0gICB8IDYyCXwgNjQgU08JICAgIHwgNjYgCXwKKwl8IDY4IAkgICAgfCA2QQl8IDZDCSAgICB8IDZFCXwKKwl8IDcwCSAgICB8IDcyCXwgNzQJICAgIHwgNzYJfAorCXwgNzgJICAgIHwgN0EJfCA3QwkgICAgfCA3RQl8CisJfCA4MCBMU1lNICAgfCA4MiBCSU5DTAl8IDg0IFNPTCAgICB8IDg2CXwKKwl8IDg4CSAgICB8IDhBCXwgOEMJICAgIHwgOEUJfAorCXwgOTAJICAgIHwgOTIJfCA5NAkgICAgfCA5Ngl8CisJfCA5OAkgICAgfCA5QQl8IDlDCSAgICB8IDlFCXwKKwl8IEEwIFBTWU0gICB8IEEyIEVJTkNMCXwgQTQgRU5UUlkgIHwgQTYJfAorCXwgQTgJICAgIHwgQUEJfCBBQwkgICAgfCBBRQl8CisJfCBCMAkgICAgfCBCMgl8IEI0CSAgICB8IEI2CXwKKwl8IEI4CSAgICB8IEJBCXwgQkMJICAgIHwgQkUJfAorCXwgQzAgTEJSQUMgIHwgQzIgRVhDTAl8IEM0IFNDT1BFICB8IEM2CXwKKwl8IEM4CSAgICB8IENBCXwgQ0MJICAgIHwgQ0UJfAorCXwgRDAJICAgIHwgRDIJfCBENAkgICAgfCBENgl8CisJfCBEOAkgICAgfCBEQQl8IERDCSAgICB8IERFCXwKKwl8IEUwIFJCUkFDICB8IEUyIEJDT01NCXwgRTQgRUNPTU0gIHwgRTYJfAorCXwgRTggRUNPTUwgIHwgRUEJfCBFQwkgICAgfCBFRQl8CisJfCBGMAkgICAgfCBGMgl8IEY0CSAgICB8IEY2CXwKKwl8IEY4CSAgICB8IEZBCXwgRkMJICAgIHwgRkUgTEVORwl8CisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogNTAgRUhERUNMIGlzIGFsc28gTU9EMi4KKyAqIDQ4IEJTTElORSBpcyBhbHNvIEJST1dTLgorICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zdGF0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zdGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2NjVmMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3N0YXQuaApAQCAtMCwwICsxLDE2OSBAQAorLyogQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk1LTIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1NZU19TVEFUX0gKKyMgZXJyb3IgIk5ldmVyIGluY2x1ZGUgPGJpdHMvc3RhdC5oPiBkaXJlY3RseTsgdXNlIDxzeXMvc3RhdC5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisvKiBWZXJzaW9ucyBvZiB0aGUgYHN0cnVjdCBzdGF0JyBkYXRhIHN0cnVjdHVyZS4gICovCisjZGVmaW5lIF9TVEFUX1ZFUl9MSU5VWF9PTEQJMQorI2RlZmluZSBfU1RBVF9WRVJfS0VSTkVMCTEKKyNkZWZpbmUgX1NUQVRfVkVSX1NWUjQJCTIKKyNkZWZpbmUgX1NUQVRfVkVSX0xJTlVYCQkzCisjZGVmaW5lIF9TVEFUX1ZFUgkJX1NUQVRfVkVSX0xJTlVYCS8qIFRoZSBvbmUgZGVmaW5lZCBiZWxvdy4gICovCisKKy8qIFZlcnNpb25zIG9mIHRoZSBgeG1rbm9kJyBpbnRlcmZhY2UuICAqLworI2RlZmluZSBfTUtOT0RfVkVSX0xJTlVYCTEKKyNkZWZpbmUgX01LTk9EX1ZFUl9TVlI0CQkyCisjZGVmaW5lIF9NS05PRF9WRVIJCV9NS05PRF9WRVJfTElOVVggLyogVGhlIGJpdHMgZGVmaW5lZCBiZWxvdy4gICovCisKKworc3RydWN0IHN0YXQKKyAgeworICAgIF9fZGV2X3Qgc3RfZGV2OwkJCS8qIERldmljZS4gICovCisgICAgdW5zaWduZWQgc2hvcnQgaW50IF9fcGFkMTsKKyNpZm5kZWYgX19VU0VfRklMRV9PRkZTRVQ2NAorICAgIF9faW5vX3Qgc3RfaW5vOwkJCS8qIEZpbGUgc2VyaWFsIG51bWJlci4JKi8KKyNlbHNlCisgICAgX19pbm9fdCBfX3N0X2lubzsJCQkvKiAzMmJpdCBmaWxlIHNlcmlhbCBudW1iZXIuCSovCisjZW5kaWYKKyAgICBfX21vZGVfdCBzdF9tb2RlOwkJCS8qIEZpbGUgbW9kZS4gICovCisgICAgX19ubGlua190IHN0X25saW5rOwkJCS8qIExpbmsgY291bnQuICAqLworICAgIF9fdWlkX3Qgc3RfdWlkOwkJCS8qIFVzZXIgSUQgb2YgdGhlIGZpbGUncyBvd25lci4JKi8KKyAgICBfX2dpZF90IHN0X2dpZDsJCQkvKiBHcm91cCBJRCBvZiB0aGUgZmlsZSdzIGdyb3VwLiovCisgICAgX19kZXZfdCBzdF9yZGV2OwkJCS8qIERldmljZSBudW1iZXIsIGlmIGRldmljZS4gICovCisgICAgdW5zaWduZWQgc2hvcnQgaW50IF9fcGFkMjsKKyNpZm5kZWYgX19VU0VfRklMRV9PRkZTRVQ2NAorICAgIF9fb2ZmX3Qgc3Rfc2l6ZTsJCQkvKiBTaXplIG9mIGZpbGUsIGluIGJ5dGVzLiAgKi8KKyNlbHNlCisgICAgX19vZmY2NF90IHN0X3NpemU7CQkJLyogU2l6ZSBvZiBmaWxlLCBpbiBieXRlcy4gICovCisjZW5kaWYKKyAgICBfX2Jsa3NpemVfdCBzdF9ibGtzaXplOwkJLyogT3B0aW1hbCBibG9jayBzaXplIGZvciBJL08uICAqLworCisjaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKKyAgICBfX2Jsa2NudF90IHN0X2Jsb2NrczsJCS8qIE51bWJlciA1MTItYnl0ZSBibG9ja3MgYWxsb2NhdGVkLiAqLworI2Vsc2UKKyAgICBfX2Jsa2NudDY0X3Qgc3RfYmxvY2tzOwkJLyogTnVtYmVyIDUxMi1ieXRlIGJsb2NrcyBhbGxvY2F0ZWQuICovCisjZW5kaWYKKyNpZmRlZiBfX1VTRV9NSVNDCisgICAgLyogTmFub3NlY29uZCByZXNvbHV0aW9uIHRpbWVzdGFtcHMgYXJlIHN0b3JlZCBpbiBhIGZvcm1hdAorICAgICAgIGVxdWl2YWxlbnQgdG8gJ3N0cnVjdCB0aW1lc3BlYycuICBUaGlzIGlzIHRoZSB0eXBlIHVzZWQKKyAgICAgICB3aGVuZXZlciBwb3NzaWJsZSBidXQgdGhlIFVuaXggbmFtZXNwYWNlIHJ1bGVzIGRvIG5vdCBhbGxvdyB0aGUKKyAgICAgICBpZGVudGlmaWVyICd0aW1lc3BlYycgdG8gYXBwZWFyIGluIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyLgorICAgICAgIFRoZXJlZm9yZSB3ZSBoYXZlIHRvIGhhbmRsZSB0aGUgdXNlIG9mIHRoaXMgaGVhZGVyIGluIHN0cmljdGx5CisgICAgICAgc3RhbmRhcmQtY29tcGxpYW50IHNvdXJjZXMgc3BlY2lhbC4gICovCisgICAgc3RydWN0IHRpbWVzcGVjIHN0X2F0aW07CQkvKiBUaW1lIG9mIGxhc3QgYWNjZXNzLiAgKi8KKyAgICBzdHJ1Y3QgdGltZXNwZWMgc3RfbXRpbTsJCS8qIFRpbWUgb2YgbGFzdCBtb2RpZmljYXRpb24uICAqLworICAgIHN0cnVjdCB0aW1lc3BlYyBzdF9jdGltOwkJLyogVGltZSBvZiBsYXN0IHN0YXR1cyBjaGFuZ2UuICAqLworIyBkZWZpbmUgc3RfYXRpbWUgc3RfYXRpbS50dl9zZWMJLyogQmFja3dhcmQgY29tcGF0aWJpbGl0eS4gICovCisjIGRlZmluZSBzdF9tdGltZSBzdF9tdGltLnR2X3NlYworIyBkZWZpbmUgc3RfY3RpbWUgc3RfY3RpbS50dl9zZWMKKyNlbHNlCisgICAgX190aW1lX3Qgc3RfYXRpbWU7CQkJLyogVGltZSBvZiBsYXN0IGFjY2Vzcy4gICovCisgICAgdW5zaWduZWQgbG9uZyBpbnQgc3RfYXRpbWVuc2VjOwkvKiBOc2NlY3Mgb2YgbGFzdCBhY2Nlc3MuICAqLworICAgIF9fdGltZV90IHN0X210aW1lOwkJCS8qIFRpbWUgb2YgbGFzdCBtb2RpZmljYXRpb24uICAqLworICAgIHVuc2lnbmVkIGxvbmcgaW50IHN0X210aW1lbnNlYzsJLyogTnNlY3Mgb2YgbGFzdCBtb2RpZmljYXRpb24uICAqLworICAgIF9fdGltZV90IHN0X2N0aW1lOwkJCS8qIFRpbWUgb2YgbGFzdCBzdGF0dXMgY2hhbmdlLiAgKi8KKyAgICB1bnNpZ25lZCBsb25nIGludCBzdF9jdGltZW5zZWM7CS8qIE5zZWNzIG9mIGxhc3Qgc3RhdHVzIGNoYW5nZS4gICovCisjZW5kaWYKKyNpZm5kZWYgX19VU0VfRklMRV9PRkZTRVQ2NAorICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkNDsKKyAgICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDU7CisjZWxzZQorICAgIF9faW5vNjRfdCBzdF9pbm87CQkJLyogRmlsZSBzZXJpYWwgbnVtYmVyLgkqLworI2VuZGlmCisgIH07CisKKyNpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAorc3RydWN0IHN0YXQ2NAorICB7CisgICAgX19kZXZfdCBzdF9kZXY7CQkJLyogRGV2aWNlLiAgKi8KKyAgICB1bnNpZ25lZCBpbnQgX19wYWQxOworCisgICAgX19pbm9fdCBfX3N0X2lubzsJCQkvKiAzMmJpdCBmaWxlIHNlcmlhbCBudW1iZXIuCSovCisgICAgX19tb2RlX3Qgc3RfbW9kZTsJCQkvKiBGaWxlIG1vZGUuICAqLworICAgIF9fbmxpbmtfdCBzdF9ubGluazsJCQkvKiBMaW5rIGNvdW50LiAgKi8KKyAgICBfX3VpZF90IHN0X3VpZDsJCQkvKiBVc2VyIElEIG9mIHRoZSBmaWxlJ3Mgb3duZXIuCSovCisgICAgX19naWRfdCBzdF9naWQ7CQkJLyogR3JvdXAgSUQgb2YgdGhlIGZpbGUncyBncm91cC4qLworICAgIF9fZGV2X3Qgc3RfcmRldjsJCQkvKiBEZXZpY2UgbnVtYmVyLCBpZiBkZXZpY2UuICAqLworICAgIHVuc2lnbmVkIGludCBfX3BhZDI7CisgICAgX19vZmY2NF90IHN0X3NpemU7CQkJLyogU2l6ZSBvZiBmaWxlLCBpbiBieXRlcy4gICovCisgICAgX19ibGtzaXplX3Qgc3RfYmxrc2l6ZTsJCS8qIE9wdGltYWwgYmxvY2sgc2l6ZSBmb3IgSS9PLiAgKi8KKworICAgIF9fYmxrY250NjRfdCBzdF9ibG9ja3M7CQkvKiBOdW1iZXIgNTEyLWJ5dGUgYmxvY2tzIGFsbG9jYXRlZC4gKi8KKyNpZmRlZiBfX1VTRV9NSVNDCisgICAgLyogTmFub3NlY29uZCByZXNvbHV0aW9uIHRpbWVzdGFtcHMgYXJlIHN0b3JlZCBpbiBhIGZvcm1hdAorICAgICAgIGVxdWl2YWxlbnQgdG8gJ3N0cnVjdCB0aW1lc3BlYycuICBUaGlzIGlzIHRoZSB0eXBlIHVzZWQKKyAgICAgICB3aGVuZXZlciBwb3NzaWJsZSBidXQgdGhlIFVuaXggbmFtZXNwYWNlIHJ1bGVzIGRvIG5vdCBhbGxvdyB0aGUKKyAgICAgICBpZGVudGlmaWVyICd0aW1lc3BlYycgdG8gYXBwZWFyIGluIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyLgorICAgICAgIFRoZXJlZm9yZSB3ZSBoYXZlIHRvIGhhbmRsZSB0aGUgdXNlIG9mIHRoaXMgaGVhZGVyIGluIHN0cmljdGx5CisgICAgICAgc3RhbmRhcmQtY29tcGxpYW50IHNvdXJjZXMgc3BlY2lhbC4gICovCisgICAgc3RydWN0IHRpbWVzcGVjIHN0X2F0aW07CQkvKiBUaW1lIG9mIGxhc3QgYWNjZXNzLiAgKi8KKyAgICBzdHJ1Y3QgdGltZXNwZWMgc3RfbXRpbTsJCS8qIFRpbWUgb2YgbGFzdCBtb2RpZmljYXRpb24uICAqLworICAgIHN0cnVjdCB0aW1lc3BlYyBzdF9jdGltOwkJLyogVGltZSBvZiBsYXN0IHN0YXR1cyBjaGFuZ2UuICAqLworI2Vsc2UKKyAgICBfX3RpbWVfdCBzdF9hdGltZTsJCQkvKiBUaW1lIG9mIGxhc3QgYWNjZXNzLiAgKi8KKyAgICB1bnNpZ25lZCBsb25nIGludCBzdF9hdGltZW5zZWM7CS8qIE5zY2VjcyBvZiBsYXN0IGFjY2Vzcy4gICovCisgICAgX190aW1lX3Qgc3RfbXRpbWU7CQkJLyogVGltZSBvZiBsYXN0IG1vZGlmaWNhdGlvbi4gICovCisgICAgdW5zaWduZWQgbG9uZyBpbnQgc3RfbXRpbWVuc2VjOwkvKiBOc2VjcyBvZiBsYXN0IG1vZGlmaWNhdGlvbi4gICovCisgICAgX190aW1lX3Qgc3RfY3RpbWU7CQkJLyogVGltZSBvZiBsYXN0IHN0YXR1cyBjaGFuZ2UuICAqLworICAgIHVuc2lnbmVkIGxvbmcgaW50IHN0X2N0aW1lbnNlYzsJLyogTnNlY3Mgb2YgbGFzdCBzdGF0dXMgY2hhbmdlLiAgKi8KKyNlbmRpZgorICAgIF9faW5vNjRfdCBzdF9pbm87CQkJLyogRmlsZSBzZXJpYWwgbnVtYmVyLgkJKi8KKyAgfTsKKyNlbmRpZgorCisvKiBUZWxsIGNvZGUgd2UgaGF2ZSB0aGVzZSBtZW1iZXJzLiAgKi8KKyNkZWZpbmUJX1NUQVRCVUZfU1RfQkxLU0laRQorI2RlZmluZSBfU1RBVEJVRl9TVF9SREVWCisvKiBOYW5vc2Vjb25kIHJlc29sdXRpb24gdGltZSB2YWx1ZXMgYXJlIHN1cHBvcnRlZC4gICovCisjZGVmaW5lIF9TVEFUQlVGX1NUX05TRUMKKworLyogRW5jb2Rpbmcgb2YgdGhlIGZpbGUgbW9kZS4gICovCisKKyNkZWZpbmUJX19TX0lGTVQJMDE3MDAwMAkvKiBUaGVzZSBiaXRzIGRldGVybWluZSBmaWxlIHR5cGUuICAqLworCisvKiBGaWxlIHR5cGVzLiAgKi8KKyNkZWZpbmUJX19TX0lGRElSCTAwNDAwMDAJLyogRGlyZWN0b3J5LiAgKi8KKyNkZWZpbmUJX19TX0lGQ0hSCTAwMjAwMDAJLyogQ2hhcmFjdGVyIGRldmljZS4gICovCisjZGVmaW5lCV9fU19JRkJMSwkwMDYwMDAwCS8qIEJsb2NrIGRldmljZS4gICovCisjZGVmaW5lCV9fU19JRlJFRwkwMTAwMDAwCS8qIFJlZ3VsYXIgZmlsZS4gICovCisjZGVmaW5lCV9fU19JRklGTwkwMDEwMDAwCS8qIEZJRk8uICAqLworI2RlZmluZQlfX1NfSUZMTksJMDEyMDAwMAkvKiBTeW1ib2xpYyBsaW5rLiAgKi8KKyNkZWZpbmUJX19TX0lGU09DSwkwMTQwMDAwCS8qIFNvY2tldC4gICovCisKKy8qIFBPU0lYLjFiIG9iamVjdHMuICBOb3RlIHRoYXQgdGhlc2UgbWFjcm9zIGFsd2F5cyBldmFsdWF0ZSB0byB6ZXJvLiAgQnV0CisgICB0aGV5IGRvIGl0IGJ5IGVuZm9yY2luZyB0aGUgY29ycmVjdCB1c2Ugb2YgdGhlIG1hY3Jvcy4gICovCisjZGVmaW5lIF9fU19UWVBFSVNNUShidWYpICAoKGJ1ZiktPnN0X21vZGUgLSAoYnVmKS0+c3RfbW9kZSkKKyNkZWZpbmUgX19TX1RZUEVJU1NFTShidWYpICgoYnVmKS0+c3RfbW9kZSAtIChidWYpLT5zdF9tb2RlKQorI2RlZmluZSBfX1NfVFlQRUlTU0hNKGJ1ZikgKChidWYpLT5zdF9tb2RlIC0gKGJ1ZiktPnN0X21vZGUpCisKKy8qIFByb3RlY3Rpb24gYml0cy4gICovCisKKyNkZWZpbmUJX19TX0lTVUlECTA0MDAwCS8qIFNldCB1c2VyIElEIG9uIGV4ZWN1dGlvbi4gICovCisjZGVmaW5lCV9fU19JU0dJRAkwMjAwMAkvKiBTZXQgZ3JvdXAgSUQgb24gZXhlY3V0aW9uLiAgKi8KKyNkZWZpbmUJX19TX0lTVlRYCTAxMDAwCS8qIFNhdmUgc3dhcHBlZCB0ZXh0IGFmdGVyIHVzZSAoc3RpY2t5KS4gICovCisjZGVmaW5lCV9fU19JUkVBRAkwNDAwCS8qIFJlYWQgYnkgb3duZXIuICAqLworI2RlZmluZQlfX1NfSVdSSVRFCTAyMDAJLyogV3JpdGUgYnkgb3duZXIuICAqLworI2RlZmluZQlfX1NfSUVYRUMJMDEwMAkvKiBFeGVjdXRlIGJ5IG93bmVyLiAgKi8KKworI2lmIGRlZmluZWQgX19VU0VfQVRGSUxFIHx8IGRlZmluZWQgX19VU0VfR05VCisvKiBYWFggVGhpcyB3aWxsIGNoYW5nZSB0byB0aGUgbWFjcm8gZm9yIHRoZSBuZXh0IDIwMDggUE9TSVggcmV2aXNpb24uICAqLworIyBkZWZpbmUgVVRJTUVfTk9XCSgoMWwgPDwgMzApIC0gMWwpCisjIGRlZmluZSBVVElNRV9PTUlUCSgoMWwgPDwgMzApIC0gMmwpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3N0YXRmcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc3RhdGZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUyNzg2NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3N0YXRmcy5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMjAwMCwgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfU1lTX1NUQVRGU19ICisjIGVycm9yICJOZXZlciBpbmNsdWRlIDxiaXRzL3N0YXRmcy5oPiBkaXJlY3RseTsgdXNlIDxzeXMvc3RhdGZzLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpbmNsdWRlIDxiaXRzL3R5cGVzLmg+CisKK3N0cnVjdCBzdGF0ZnMKKyAgeworICAgIF9fU1dPUkRfVFlQRSBmX3R5cGU7CisgICAgX19TV09SRF9UWVBFIGZfYnNpemU7CisjaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKKyAgICBfX2ZzYmxrY250X3QgZl9ibG9ja3M7CisgICAgX19mc2Jsa2NudF90IGZfYmZyZWU7CisgICAgX19mc2Jsa2NudF90IGZfYmF2YWlsOworICAgIF9fZnNmaWxjbnRfdCBmX2ZpbGVzOworICAgIF9fZnNmaWxjbnRfdCBmX2ZmcmVlOworI2Vsc2UKKyAgICBfX2ZzYmxrY250NjRfdCBmX2Jsb2NrczsKKyAgICBfX2ZzYmxrY250NjRfdCBmX2JmcmVlOworICAgIF9fZnNibGtjbnQ2NF90IGZfYmF2YWlsOworICAgIF9fZnNmaWxjbnQ2NF90IGZfZmlsZXM7CisgICAgX19mc2ZpbGNudDY0X3QgZl9mZnJlZTsKKyNlbmRpZgorICAgIF9fZnNpZF90IGZfZnNpZDsKKyAgICBfX1NXT1JEX1RZUEUgZl9uYW1lbGVuOworICAgIF9fU1dPUkRfVFlQRSBmX2Zyc2l6ZTsKKyAgICBfX1NXT1JEX1RZUEUgZl9zcGFyZVs1XTsKKyAgfTsKKworI2lmZGVmIF9fVVNFX0xBUkdFRklMRTY0CitzdHJ1Y3Qgc3RhdGZzNjQKKyAgeworICAgIF9fU1dPUkRfVFlQRSBmX3R5cGU7CisgICAgX19TV09SRF9UWVBFIGZfYnNpemU7CisgICAgX19mc2Jsa2NudDY0X3QgZl9ibG9ja3M7CisgICAgX19mc2Jsa2NudDY0X3QgZl9iZnJlZTsKKyAgICBfX2ZzYmxrY250NjRfdCBmX2JhdmFpbDsKKyAgICBfX2ZzZmlsY250NjRfdCBmX2ZpbGVzOworICAgIF9fZnNmaWxjbnQ2NF90IGZfZmZyZWU7CisgICAgX19mc2lkX3QgZl9mc2lkOworICAgIF9fU1dPUkRfVFlQRSBmX25hbWVsZW47CisgICAgX19TV09SRF9UWVBFIGZfZnJzaXplOworICAgIF9fU1dPUkRfVFlQRSBmX3NwYXJlWzVdOworICB9OworI2VuZGlmCisKKy8qIFRlbGwgY29kZSB3ZSBoYXZlIHRoZXNlIG1lbWJlcnMuICAqLworI2RlZmluZSBfU1RBVEZTX0ZfTkFNRUxFTgorI2RlZmluZSBfU1RBVEZTX0ZfRlJTSVpFCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zdGF0dmZzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zdGF0dmZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ3MTdjMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3N0YXR2ZnMuaApAQCAtMCwwICsxLDEwOSBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk3LDE5OTgsMjAwMCwyMDAxLDIwMDIsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfU1lTX1NUQVRWRlNfSAorIyBlcnJvciAiTmV2ZXIgaW5jbHVkZSA8Yml0cy9zdGF0dmZzLmg+IGRpcmVjdGx5OyB1c2UgPHN5cy9zdGF0dmZzLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpbmNsdWRlIDxiaXRzL3R5cGVzLmg+ICAvKiBGb3IgX19mc2Jsa2NudF90IGFuZCBfX2ZzZmlsY250X3QuICAqLworCisjaWYgX19XT1JEU0laRSA9PSAzMgorI2RlZmluZSBfU1RBVFZGU0JVRl9GX1VOVVNFRAorI2VuZGlmCisKK3N0cnVjdCBzdGF0dmZzCisgIHsKKyAgICB1bnNpZ25lZCBsb25nIGludCBmX2JzaXplOworICAgIHVuc2lnbmVkIGxvbmcgaW50IGZfZnJzaXplOworI2lmbmRlZiBfX1VTRV9GSUxFX09GRlNFVDY0CisgICAgX19mc2Jsa2NudF90IGZfYmxvY2tzOworICAgIF9fZnNibGtjbnRfdCBmX2JmcmVlOworICAgIF9fZnNibGtjbnRfdCBmX2JhdmFpbDsKKyAgICBfX2ZzZmlsY250X3QgZl9maWxlczsKKyAgICBfX2ZzZmlsY250X3QgZl9mZnJlZTsKKyAgICBfX2ZzZmlsY250X3QgZl9mYXZhaWw7CisjZWxzZQorICAgIF9fZnNibGtjbnQ2NF90IGZfYmxvY2tzOworICAgIF9fZnNibGtjbnQ2NF90IGZfYmZyZWU7CisgICAgX19mc2Jsa2NudDY0X3QgZl9iYXZhaWw7CisgICAgX19mc2ZpbGNudDY0X3QgZl9maWxlczsKKyAgICBfX2ZzZmlsY250NjRfdCBmX2ZmcmVlOworICAgIF9fZnNmaWxjbnQ2NF90IGZfZmF2YWlsOworI2VuZGlmCisgICAgdW5zaWduZWQgbG9uZyBpbnQgZl9mc2lkOworI2lmZGVmIF9TVEFUVkZTQlVGX0ZfVU5VU0VECisgICAgaW50IF9fZl91bnVzZWQ7CisjZW5kaWYKKyAgICB1bnNpZ25lZCBsb25nIGludCBmX2ZsYWc7CisgICAgdW5zaWduZWQgbG9uZyBpbnQgZl9uYW1lbWF4OworICAgIGludCBfX2Zfc3BhcmVbNl07CisgIH07CisKKyNpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAorc3RydWN0IHN0YXR2ZnM2NAorICB7CisgICAgdW5zaWduZWQgbG9uZyBpbnQgZl9ic2l6ZTsKKyAgICB1bnNpZ25lZCBsb25nIGludCBmX2Zyc2l6ZTsKKyAgICBfX2ZzYmxrY250NjRfdCBmX2Jsb2NrczsKKyAgICBfX2ZzYmxrY250NjRfdCBmX2JmcmVlOworICAgIF9fZnNibGtjbnQ2NF90IGZfYmF2YWlsOworICAgIF9fZnNmaWxjbnQ2NF90IGZfZmlsZXM7CisgICAgX19mc2ZpbGNudDY0X3QgZl9mZnJlZTsKKyAgICBfX2ZzZmlsY250NjRfdCBmX2ZhdmFpbDsKKyAgICB1bnNpZ25lZCBsb25nIGludCBmX2ZzaWQ7CisjaWZkZWYgX1NUQVRWRlNCVUZfRl9VTlVTRUQKKyAgICBpbnQgX19mX3VudXNlZDsKKyNlbmRpZgorICAgIHVuc2lnbmVkIGxvbmcgaW50IGZfZmxhZzsKKyAgICB1bnNpZ25lZCBsb25nIGludCBmX25hbWVtYXg7CisgICAgaW50IF9fZl9zcGFyZVs2XTsKKyAgfTsKKyNlbmRpZgorCisvKiBEZWZpbml0aW9ucyBmb3IgdGhlIGZsYWcgaW4gYGZfZmxhZycuICBUaGVzZSBkZWZpbml0aW9ucyBzaG91bGQgYmUKKyAgIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBkZWZpbml0aW9ucyBpbiA8c3lzL21vdW50Lmg+LiAgKi8KK2VudW0KK3sKKyAgU1RfUkRPTkxZID0gMSwJCS8qIE1vdW50IHJlYWQtb25seS4gICovCisjZGVmaW5lIFNUX1JET05MWQlTVF9SRE9OTFkKKyAgU1RfTk9TVUlEID0gMgkJCS8qIElnbm9yZSBzdWlkIGFuZCBzZ2lkIGJpdHMuICAqLworI2RlZmluZSBTVF9OT1NVSUQJU1RfTk9TVUlECisjaWZkZWYgX19VU0VfR05VCisgICwKKyAgU1RfTk9ERVYgPSA0LAkJCS8qIERpc2FsbG93IGFjY2VzcyB0byBkZXZpY2Ugc3BlY2lhbCBmaWxlcy4gICovCisjIGRlZmluZSBTVF9OT0RFVglTVF9OT0RFVgorICBTVF9OT0VYRUMgPSA4LAkJLyogRGlzYWxsb3cgcHJvZ3JhbSBleGVjdXRpb24uICAqLworIyBkZWZpbmUgU1RfTk9FWEVDCVNUX05PRVhFQworICBTVF9TWU5DSFJPTk9VUyA9IDE2LAkJLyogV3JpdGVzIGFyZSBzeW5jZWQgYXQgb25jZS4gICovCisjIGRlZmluZSBTVF9TWU5DSFJPTk9VUwlTVF9TWU5DSFJPTk9VUworICBTVF9NQU5ETE9DSyA9IDY0LAkJLyogQWxsb3cgbWFuZGF0b3J5IGxvY2tzIG9uIGFuIEZTLiAgKi8KKyMgZGVmaW5lIFNUX01BTkRMT0NLCVNUX01BTkRMT0NLCisgIFNUX1dSSVRFID0gMTI4LAkJLyogV3JpdGUgb24gZmlsZS9kaXJlY3Rvcnkvc3ltbGluay4gICovCisjIGRlZmluZSBTVF9XUklURQlTVF9XUklURQorICBTVF9BUFBFTkQgPSAyNTYsCQkvKiBBcHBlbmQtb25seSBmaWxlLiAgKi8KKyMgZGVmaW5lIFNUX0FQUEVORAlTVF9BUFBFTkQKKyAgU1RfSU1NVVRBQkxFID0gNTEyLAkJLyogSW1tdXRhYmxlIGZpbGUuICAqLworIyBkZWZpbmUgU1RfSU1NVVRBQkxFCVNUX0lNTVVUQUJMRQorICBTVF9OT0FUSU1FID0gMTAyNCwJCS8qIERvIG5vdCB1cGRhdGUgYWNjZXNzIHRpbWVzLiAgKi8KKyMgZGVmaW5lIFNUX05PQVRJTUUJU1RfTk9BVElNRQorICBTVF9OT0RJUkFUSU1FID0gMjA0OCwJCS8qIERvIG5vdCB1cGRhdGUgZGlyZWN0b3J5IGFjY2VzcyB0aW1lcy4gICovCisjIGRlZmluZSBTVF9OT0RJUkFUSU1FCVNUX05PRElSQVRJTUUKKyAgU1RfUkVMQVRJTUUgPSA0MDk2CQkvKiBVcGRhdGUgYXRpbWUgcmVsYXRpdmUgdG8gbXRpbWUvY3RpbWUuICAqLworIyBkZWZpbmUgU1RfUkVMQVRJTUUJU1RfUkVMQVRJTUUKKyNlbmRpZgkvKiBVc2UgR05VLiAgKi8KK307CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zdGRpby1sZGJsLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zdGRpby1sZGJsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UwZjExMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLWxkYmwuaApAQCAtMCwwICsxLDk3IEBACisvKiAtbWxvbmctZG91YmxlLTY0IGNvbXBhdGliaWxpdHkgbW9kZSBmb3Igc3RkaW8gZnVuY3Rpb25zLgorICAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9TVERJT19ICisjIGVycm9yICJOZXZlciBpbmNsdWRlIDxiaXRzL3N0ZGlvLWxkYmwuaD4gZGlyZWN0bHk7IHVzZSA8c3RkaW8uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworX19CRUdJTl9OQU1FU1BBQ0VfU1RECitfX0xEQkxfUkVESVJfREVDTCAoZnByaW50ZikKK19fTERCTF9SRURJUl9ERUNMIChwcmludGYpCitfX0xEQkxfUkVESVJfREVDTCAoc3ByaW50ZikKK19fTERCTF9SRURJUl9ERUNMICh2ZnByaW50ZikKK19fTERCTF9SRURJUl9ERUNMICh2cHJpbnRmKQorX19MREJMX1JFRElSX0RFQ0wgKHZzcHJpbnRmKQorI2lmIGRlZmluZWQgX19VU0VfSVNPQzk5ICYmICFkZWZpbmVkIF9fVVNFX0dOVSBcCisgICAgJiYgIWRlZmluZWQgX19SRURJUkVDVCBcCisgICAgJiYgKGRlZmluZWQgX19TVFJJQ1RfQU5TSV9fIHx8IGRlZmluZWQgX19VU0VfWE9QRU4ySykKK19fTERCTF9SRURJUjFfREVDTCAoZnNjYW5mLCBfX25sZGJsX19faXNvYzk5X2ZzY2FuZikKK19fTERCTF9SRURJUjFfREVDTCAoc2NhbmYsIF9fbmxkYmxfX19pc29jOTlfc2NhbmYpCitfX0xEQkxfUkVESVIxX0RFQ0wgKHNzY2FuZiwgX19ubGRibF9fX2lzb2M5OV9zc2NhbmYpCisjZWxzZQorX19MREJMX1JFRElSX0RFQ0wgKGZzY2FuZikKK19fTERCTF9SRURJUl9ERUNMIChzY2FuZikKK19fTERCTF9SRURJUl9ERUNMIChzc2NhbmYpCisjZW5kaWYKK19fRU5EX05BTUVTUEFDRV9TVEQKKworI2lmIGRlZmluZWQgX19VU0VfQlNEIHx8IGRlZmluZWQgX19VU0VfSVNPQzk5IHx8IGRlZmluZWQgX19VU0VfVU5JWDk4CitfX0JFR0lOX05BTUVTUEFDRV9DOTkKK19fTERCTF9SRURJUl9ERUNMIChzbnByaW50ZikKK19fTERCTF9SRURJUl9ERUNMICh2c25wcmludGYpCitfX0VORF9OQU1FU1BBQ0VfQzk5CisjZW5kaWYKKworI2lmZGVmCV9fVVNFX0lTT0M5OQorX19CRUdJTl9OQU1FU1BBQ0VfQzk5CisjIGlmICFkZWZpbmVkIF9fVVNFX0dOVSAmJiAhZGVmaW5lZCBfX1JFRElSRUNUIFwKKyAgICAgJiYgKGRlZmluZWQgX19TVFJJQ1RfQU5TSV9fIHx8IGRlZmluZWQgX19VU0VfWE9QRU4ySykKK19fTERCTF9SRURJUjFfREVDTCAodmZzY2FuZiwgX19ubGRibF9fX2lzb2M5OV92ZnNjYW5mKQorX19MREJMX1JFRElSMV9ERUNMICh2c2NhbmYsIF9fbmxkYmxfX19pc29jOTlfdnNjYW5mKQorX19MREJMX1JFRElSMV9ERUNMICh2c3NjYW5mLCBfX25sZGJsX19faXNvYzk5X3Zzc2NhbmYpCisjIGVsc2UKK19fTERCTF9SRURJUl9ERUNMICh2ZnNjYW5mKQorX19MREJMX1JFRElSX0RFQ0wgKHZzc2NhbmYpCitfX0xEQkxfUkVESVJfREVDTCAodnNjYW5mKQorIyBlbmRpZgorX19FTkRfTkFNRVNQQUNFX0M5OQorI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9HTlUKK19fTERCTF9SRURJUl9ERUNMICh2ZHByaW50ZikKK19fTERCTF9SRURJUl9ERUNMIChkcHJpbnRmKQorX19MREJMX1JFRElSX0RFQ0wgKHZhc3ByaW50ZikKK19fTERCTF9SRURJUl9ERUNMIChfX2FzcHJpbnRmKQorX19MREJMX1JFRElSX0RFQ0wgKGFzcHJpbnRmKQorX19MREJMX1JFRElSX0RFQ0wgKG9ic3RhY2tfcHJpbnRmKQorX19MREJMX1JFRElSX0RFQ0wgKG9ic3RhY2tfdnByaW50ZikKKyNlbmRpZgorCisjaWYgX19VU0VfRk9SVElGWV9MRVZFTCA+IDAgJiYgZGVmaW5lZCBfX2V4dGVybl9hbHdheXNfaW5saW5lCitfX0xEQkxfUkVESVJfREVDTCAoX19zcHJpbnRmX2NoaykKK19fTERCTF9SRURJUl9ERUNMIChfX3ZzcHJpbnRmX2NoaykKKyMgaWYgZGVmaW5lZCBfX1VTRV9CU0QgfHwgZGVmaW5lZCBfX1VTRV9JU09DOTkgfHwgZGVmaW5lZCBfX1VTRV9VTklYOTgKK19fTERCTF9SRURJUl9ERUNMIChfX3NucHJpbnRmX2NoaykKK19fTERCTF9SRURJUl9ERUNMIChfX3ZzbnByaW50Zl9jaGspCisjIGVuZGlmCisjIGlmIF9fVVNFX0ZPUlRJRllfTEVWRUwgPiAxCitfX0xEQkxfUkVESVJfREVDTCAoX19mcHJpbnRmX2NoaykKK19fTERCTF9SRURJUl9ERUNMIChfX3ByaW50Zl9jaGspCitfX0xEQkxfUkVESVJfREVDTCAoX192ZnByaW50Zl9jaGspCitfX0xEQkxfUkVESVJfREVDTCAoX192cHJpbnRmX2NoaykKKyMgIGlmZGVmIF9fVVNFX0dOVQorX19MREJMX1JFRElSX0RFQ0wgKF9fYXNwcmludGZfY2hrKQorX19MREJMX1JFRElSX0RFQ0wgKF9fdmFzcHJpbnRmX2NoaykKK19fTERCTF9SRURJUl9ERUNMIChfX2RwcmludGZfY2hrKQorX19MREJMX1JFRElSX0RFQ0wgKF9fdmRwcmludGZfY2hrKQorX19MREJMX1JFRElSX0RFQ0wgKF9fb2JzdGFja19wcmludGZfY2hrKQorX19MREJMX1JFRElSX0RFQ0wgKF9fb2JzdGFja192cHJpbnRmX2NoaykKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLWxvY2suaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLWxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGVmZGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8tbG9jay5oCkBAIC0wLDAgKzEsMTExIEBACisvKiBUaHJlYWQgcGFja2FnZSBzcGVjaWZpYyBkZWZpbml0aW9ucyBvZiBzdHJlYW0gbG9jayB0eXBlLiAgTlBUTCB2ZXJzaW9uLgorICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9CSVRTX1NURElPX0xPQ0tfSAorI2RlZmluZSBfQklUU19TVERJT19MT0NLX0ggMQorCisjaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKyNpbmNsdWRlIDxsb3dsZXZlbGxvY2suaD4KKworCisvKiBUaGUgbG9ja2luZyBoZXJlIGlzIHZlcnkgaW5leHBlbnNpdmUsIGV2ZW4gZm9yIGlubGluaW5nLiAgKi8KKyNkZWZpbmUgX0lPX2xvY2tfaW5leHBlbnNpdmUJMQorCit0eXBlZGVmIHN0cnVjdCB7IGludCBsb2NrOyBpbnQgY250OyB2b2lkICpvd25lcjsgfSBfSU9fbG9ja190OworCisjZGVmaW5lIF9JT19sb2NrX2luaXRpYWxpemVyIHsgTExMX0xPQ0tfSU5JVElBTElaRVIsIDAsIE5VTEwgfQorCisjZGVmaW5lIF9JT19sb2NrX2luaXQoX25hbWUpIFwKKyAgKChfbmFtZSkgPSAoX0lPX2xvY2tfdCkgX0lPX2xvY2tfaW5pdGlhbGl6ZXIgLCAwKQorCisjZGVmaW5lIF9JT19sb2NrX2ZpbmkoX25hbWUpIFwKKyAgKCh2b2lkKSAwKQorCisjZGVmaW5lIF9JT19sb2NrX2xvY2soX25hbWUpIFwKKyAgZG8gewkJCQkJCQkJCSAgICAgIFwKKyAgICB2b2lkICpfX3NlbGYgPSBUSFJFQURfU0VMRjsJCQkJCQkgICAgICBcCisgICAgaWYgKChfbmFtZSkub3duZXIgIT0gX19zZWxmKQkJCQkJICAgICAgXAorICAgICAgewkJCQkJCQkJCSAgICAgIFwKKwlsbGxfbG9jayAoKF9uYW1lKS5sb2NrLCBMTExfUFJJVkFURSk7CQkJCSAgICAgIFwKKyAgICAgICAgKF9uYW1lKS5vd25lciA9IF9fc2VsZjsJCQkJCQkgICAgICBcCisgICAgICB9CQkJCQkJCQkJICAgICAgXAorICAgICsrKF9uYW1lKS5jbnQ7CQkJCQkJCSAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfSU9fbG9ja190cnlsb2NrKF9uYW1lKSBcCisgICh7CQkJCQkJCQkJICAgICAgXAorICAgIGludCBfX3Jlc3VsdCA9IDA7CQkJCQkJCSAgICAgIFwKKyAgICB2b2lkICpfX3NlbGYgPSBUSFJFQURfU0VMRjsJCQkJCQkgICAgICBcCisgICAgaWYgKChfbmFtZSkub3duZXIgIT0gX19zZWxmKQkJCQkJICAgICAgXAorICAgICAgewkJCQkJCQkJCSAgICAgIFwKKyAgICAgICAgaWYgKGxsbF90cnlsb2NrICgoX25hbWUpLmxvY2spID09IDApCQkJCSAgICAgIFwKKyAgICAgICAgICB7CQkJCQkJCQkgICAgICBcCisgICAgICAgICAgICAoX25hbWUpLm93bmVyID0gX19zZWxmOwkJCQkJICAgICAgXAorICAgICAgICAgICAgKF9uYW1lKS5jbnQgPSAxOwkJCQkJCSAgICAgIFwKKyAgICAgICAgICB9CQkJCQkJCQkgICAgICBcCisgICAgICAgIGVsc2UJCQkJCQkJCSAgICAgIFwKKyAgICAgICAgICBfX3Jlc3VsdCA9IEVCVVNZOwkJCQkJCSAgICAgIFwKKyAgICAgIH0JCQkJCQkJCQkgICAgICBcCisgICAgZWxzZQkJCQkJCQkJICAgICAgXAorICAgICAgKysoX25hbWUpLmNudDsJCQkJCQkJICAgICAgXAorICAgIF9fcmVzdWx0OwkJCQkJCQkJICAgICAgXAorICB9KQorCisjZGVmaW5lIF9JT19sb2NrX3VubG9jayhfbmFtZSkgXAorICBkbyB7CQkJCQkJCQkJICAgICAgXAorICAgIGlmICgtLShfbmFtZSkuY250ID09IDApCQkJCQkJICAgICAgXAorICAgICAgewkJCQkJCQkJCSAgICAgIFwKKyAgICAgICAgKF9uYW1lKS5vd25lciA9IE5VTEw7CQkJCQkJICAgICAgXAorCWxsbF91bmxvY2sgKChfbmFtZSkubG9jaywgTExMX1BSSVZBVEUpOwkJCQkgICAgICBcCisgICAgICB9CQkJCQkJCQkJICAgICAgXAorICB9IHdoaWxlICgwKQorCisKKworI2RlZmluZSBfSU9fY2xlYW51cF9yZWdpb25fc3RhcnQoX2ZjdCwgX2ZwKSBcCisgIF9fbGliY19jbGVhbnVwX3JlZ2lvbl9zdGFydCAoKChfZnApLT5fZmxhZ3MgJiBfSU9fVVNFUl9MT0NLKSA9PSAwLCBfZmN0LCBfZnApCisjZGVmaW5lIF9JT19jbGVhbnVwX3JlZ2lvbl9zdGFydF9ub2FyZyhfZmN0KSBcCisgIF9fbGliY19jbGVhbnVwX3JlZ2lvbl9zdGFydCAoMSwgX2ZjdCwgTlVMTCkKKyNkZWZpbmUgX0lPX2NsZWFudXBfcmVnaW9uX2VuZChfZG9pdCkgXAorICBfX2xpYmNfY2xlYW51cF9yZWdpb25fZW5kIChfZG9pdCkKKworI2lmIGRlZmluZWQgX0xJQkMgJiYgIWRlZmluZWQgTk9UX0lOX2xpYmMKKworIyBpZmRlZiBfX0VYQ0VQVElPTlMKKyMgIGRlZmluZSBfSU9fYWNxdWlyZV9sb2NrKF9mcCkgXAorICBkbyB7CQkJCQkJCQkJICAgICAgXAorICAgIF9JT19GSUxFICpfSU9fYWNxdWlyZV9sb2NrX2ZpbGUJCQkJCSAgICAgIFwKKwlfX2F0dHJpYnV0ZV9fKChjbGVhbnVwIChfSU9fYWNxdWlyZV9sb2NrX2ZjdCkpKQkJCSAgICAgIFwKKwk9IChfZnApOwkJCQkJCQkgICAgICBcCisgICAgX0lPX2Zsb2NrZmlsZSAoX0lPX2FjcXVpcmVfbG9ja19maWxlKTsKKyMgIGRlZmluZSBfSU9fYWNxdWlyZV9sb2NrX2NsZWFyX2ZsYWdzMihfZnApIFwKKyAgZG8gewkJCQkJCQkJCSAgICAgIFwKKyAgICBfSU9fRklMRSAqX0lPX2FjcXVpcmVfbG9ja19maWxlCQkJCQkgICAgICBcCisJX19hdHRyaWJ1dGVfXygoY2xlYW51cCAoX0lPX2FjcXVpcmVfbG9ja19jbGVhcl9mbGFnczJfZmN0KSkpCSAgICAgIFwKKwk9IChfZnApOwkJCQkJCQkgICAgICBcCisgICAgX0lPX2Zsb2NrZmlsZSAoX0lPX2FjcXVpcmVfbG9ja19maWxlKTsKKyMgZWxzZQorIyAgZGVmaW5lIF9JT19hY3F1aXJlX2xvY2soX2ZwKSBfSU9fYWNxdWlyZV9sb2NrX25lZWRzX2V4Y2VwdGlvbnNfZW5hYmxlZAorIyAgZGVmaW5lIF9JT19hY3F1aXJlX2xvY2tfY2xlYXJfZmxhZ3MyKF9mcCkgX0lPX2FjcXVpcmVfbG9jayAoX2ZwKQorIyBlbmRpZgorIyBkZWZpbmUgX0lPX3JlbGVhc2VfbG9jayhfZnApIDsgfSB3aGlsZSAoMCkKKworI2VuZGlmCisKKyNlbmRpZiAvKiBiaXRzL3N0ZGlvLWxvY2suaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkzMDNjNgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgKQEAgLTAsMCArMSwxOTEgQEAKKy8qIE9wdGltaXppbmcgbWFjcm9zIGFuZCBpbmxpbmUgZnVuY3Rpb25zIGZvciBzdGRpbyBmdW5jdGlvbnMuCisgICBDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDAsIDIwMDEsIDIwMDQsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1NURElPX0gKKyMgZXJyb3IgIk5ldmVyIGluY2x1ZGUgPGJpdHMvc3RkaW8uaD4gZGlyZWN0bHk7IHVzZSA8c3RkaW8uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX2V4dGVybl9pbmxpbmUKKyMgZGVmaW5lIF9fU1RESU9fSU5MSU5FIGlubGluZQorI2Vsc2UKKyMgZGVmaW5lIF9fU1RESU9fSU5MSU5FIF9fZXh0ZXJuX2lubGluZQorI2VuZGlmCisKKworI2lmZGVmIF9fVVNFX0VYVEVSTl9JTkxJTkVTCisvKiBGb3IgLURfRk9SVElGWV9TT1VSQ0V7LD0yfSBiaXRzL3N0ZGlvMi5oIHdpbGwgZGVmaW5lIGEgZGlmZmVyZW50CisgICBpbmxpbmUuICAqLworIyBpZiAhKF9fVVNFX0ZPUlRJRllfTEVWRUwgPiAwICYmIGRlZmluZWQgX19leHRlcm5fYWx3YXlzX2lubGluZSkKKy8qIFdyaXRlIGZvcm1hdHRlZCBvdXRwdXQgdG8gc3Rkb3V0IGZyb20gYXJndW1lbnQgbGlzdCBBUkcuICAqLworX19TVERJT19JTkxJTkUgaW50Cit2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIF9HX3ZhX2xpc3QgX19hcmcpCit7CisgIHJldHVybiB2ZnByaW50ZiAoc3Rkb3V0LCBfX2ZtdCwgX19hcmcpOworfQorIyBlbmRpZgorCisvKiBSZWFkIGEgY2hhcmFjdGVyIGZyb20gc3RkaW4uICAqLworX19TVERJT19JTkxJTkUgaW50CitnZXRjaGFyICh2b2lkKQoreworICByZXR1cm4gX0lPX2dldGMgKHN0ZGluKTsKK30KKworCisjIGlmZGVmIF9fVVNFX01JU0MKKy8qIEZhc3RlciB2ZXJzaW9uIHdoZW4gbG9ja2luZyBpcyBub3QgbmVjZXNzYXJ5LiAgKi8KK19fU1RESU9fSU5MSU5FIGludAorZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fZnApCit7CisgIHJldHVybiBfSU9fZ2V0Y191bmxvY2tlZCAoX19mcCk7Cit9CisjIGVuZGlmIC8qIG1pc2MgKi8KKworCisjIGlmIGRlZmluZWQgX19VU0VfUE9TSVggfHwgZGVmaW5lZCBfX1VTRV9NSVNDCisvKiBUaGlzIGlzIGRlZmluZWQgaW4gUE9TSVguMToxOTk2LiAgKi8KK19fU1RESU9fSU5MSU5FIGludAorZ2V0Y191bmxvY2tlZCAoRklMRSAqX19mcCkKK3sKKyAgcmV0dXJuIF9JT19nZXRjX3VubG9ja2VkIChfX2ZwKTsKK30KKworLyogVGhpcyBpcyBkZWZpbmVkIGluIFBPU0lYLjE6MTk5Ni4gICovCitfX1NURElPX0lOTElORSBpbnQKK2dldGNoYXJfdW5sb2NrZWQgKHZvaWQpCit7CisgIHJldHVybiBfSU9fZ2V0Y191bmxvY2tlZCAoc3RkaW4pOworfQorIyBlbmRpZgkvKiBQT1NJWCB8fCBtaXNjICovCisKKworLyogV3JpdGUgYSBjaGFyYWN0ZXIgdG8gc3Rkb3V0LiAgKi8KK19fU1RESU9fSU5MSU5FIGludAorcHV0Y2hhciAoaW50IF9fYykKK3sKKyAgcmV0dXJuIF9JT19wdXRjIChfX2MsIHN0ZG91dCk7Cit9CisKKworIyBpZmRlZiBfX1VTRV9NSVNDCisvKiBGYXN0ZXIgdmVyc2lvbiB3aGVuIGxvY2tpbmcgaXMgbm90IG5lY2Vzc2FyeS4gICovCitfX1NURElPX0lOTElORSBpbnQKK2ZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkKK3sKKyAgcmV0dXJuIF9JT19wdXRjX3VubG9ja2VkIChfX2MsIF9fc3RyZWFtKTsKK30KKyMgZW5kaWYgLyogbWlzYyAqLworCisKKyMgaWYgZGVmaW5lZCBfX1VTRV9QT1NJWCB8fCBkZWZpbmVkIF9fVVNFX01JU0MKKy8qIFRoaXMgaXMgZGVmaW5lZCBpbiBQT1NJWC4xOjE5OTYuICAqLworX19TVERJT19JTkxJTkUgaW50CitwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkKK3sKKyAgcmV0dXJuIF9JT19wdXRjX3VubG9ja2VkIChfX2MsIF9fc3RyZWFtKTsKK30KKworLyogVGhpcyBpcyBkZWZpbmVkIGluIFBPU0lYLjE6MTk5Ni4gICovCitfX1NURElPX0lOTElORSBpbnQKK3B1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpCit7CisgIHJldHVybiBfSU9fcHV0Y191bmxvY2tlZCAoX19jLCBzdGRvdXQpOworfQorIyBlbmRpZgkvKiBQT1NJWCB8fCBtaXNjICovCisKKworIyBpZmRlZglfX1VTRV9HTlUKKy8qIExpa2UgYGdldGRlbGltJywgYnV0IHJlYWRzIHVwIHRvIGEgbmV3bGluZS4gICovCitfX1NURElPX0lOTElORSBfSU9fc3NpemVfdAorZ2V0bGluZSAoY2hhciAqKl9fbGluZXB0ciwgc2l6ZV90ICpfX24sIEZJTEUgKl9fc3RyZWFtKQoreworICByZXR1cm4gX19nZXRkZWxpbSAoX19saW5lcHRyLCBfX24sICdcbicsIF9fc3RyZWFtKTsKK30KKyMgZW5kaWYgLyogR05VICovCisKKworIyBpZmRlZiBfX1VTRV9NSVNDCisvKiBGYXN0ZXIgdmVyc2lvbnMgd2hlbiBsb2NraW5nIGlzIG5vdCByZXF1aXJlZC4gICovCitfX1NURElPX0lOTElORSBpbnQKK19fTlRIIChmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkpCit7CisgIHJldHVybiBfSU9fZmVvZl91bmxvY2tlZCAoX19zdHJlYW0pOworfQorCisvKiBGYXN0ZXIgdmVyc2lvbnMgd2hlbiBsb2NraW5nIGlzIG5vdCByZXF1aXJlZC4gICovCitfX1NURElPX0lOTElORSBpbnQKK19fTlRIIChmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSkKK3sKKyAgcmV0dXJuIF9JT19mZXJyb3JfdW5sb2NrZWQgKF9fc3RyZWFtKTsKK30KKyMgZW5kaWYgLyogbWlzYyAqLworCisjZW5kaWYgLyogVXNlIGV4dGVybiBpbmxpbmVzLiAgKi8KKworCisjaWYgZGVmaW5lZCBfX1VTRV9NSVNDICYmIGRlZmluZWQgX19HTlVDX18gJiYgZGVmaW5lZCBfX09QVElNSVpFX18gXAorICAgICYmICFkZWZpbmVkIF9fY3BsdXNwbHVzCisvKiBQZXJmb3JtIHNvbWUgc2ltcGxlIG9wdGltaXphdGlvbnMuICAqLworIyBkZWZpbmUgZnJlYWRfdW5sb2NrZWQocHRyLCBzaXplLCBuLCBzdHJlYW0pIFwKKyAgKF9fZXh0ZW5zaW9uX18gKChfX2J1aWx0aW5fY29uc3RhbnRfcCAoc2l6ZSkgJiYgX19idWlsdGluX2NvbnN0YW50X3AgKG4pICAgIFwKKwkJICAgJiYgKHNpemVfdCkgKHNpemUpICogKHNpemVfdCkgKG4pIDw9IDgJCSAgICAgIFwKKwkJICAgJiYgKHNpemVfdCkgKHNpemUpICE9IDApCQkJCSAgICAgIFwKKwkJICA/ICh7IGNoYXIgKl9fcHRyID0gKGNoYXIgKikgKHB0cik7CQkJICAgICAgXAorCQkgICAgICAgRklMRSAqX19zdHJlYW0gPSAoc3RyZWFtKTsJCQkgICAgICBcCisJCSAgICAgICBzaXplX3QgX19jbnQ7CQkJCQkgICAgICBcCisJCSAgICAgICBmb3IgKF9fY250ID0gKHNpemVfdCkgKHNpemUpICogKHNpemVfdCkgKG4pOwkgICAgICBcCisJCQkgICAgX19jbnQgPiAwOyAtLV9fY250KQkJCQkgICAgICBcCisJCQkgewkJCQkJCSAgICAgIFwKKwkJCSAgIGludCBfX2MgPSBfSU9fZ2V0Y191bmxvY2tlZCAoX19zdHJlYW0pOwkgICAgICBcCisJCQkgICBpZiAoX19jID09IEVPRikJCQkJICAgICAgXAorCQkJICAgICBicmVhazsJCQkJCSAgICAgIFwKKwkJCSAgICpfX3B0cisrID0gX19jOwkJCQkgICAgICBcCisJCQkgfQkJCQkJCSAgICAgIFwKKwkJICAgICAgICgoc2l6ZV90KSAoc2l6ZSkgKiAoc2l6ZV90KSAobikgLSBfX2NudCkJCSAgICAgIFwKKwkJCS8gKHNpemVfdCkgKHNpemUpOyB9KQkJCQkgICAgICBcCisJCSAgOiAoKChfX2J1aWx0aW5fY29uc3RhbnRfcCAoc2l6ZSkgJiYgKHNpemVfdCkgKHNpemUpID09IDApICAgXAorCQkgICAgICB8fCAoX19idWlsdGluX2NvbnN0YW50X3AgKG4pICYmIChzaXplX3QpIChuKSA9PSAwKSkgICAgIFwKKwkJCS8qIEV2YWx1YXRlIGFsbCBwYXJhbWV0ZXJzIG9uY2UuICAqLwkJICAgICAgXAorCQkgICAgID8gKCh2b2lkKSAocHRyKSwgKHZvaWQpIChzdHJlYW0pLCAodm9pZCkgKHNpemUpLAkgICAgICBcCisJCQkodm9pZCkgKG4pLCAoc2l6ZV90KSAwKQkJCQkgICAgICBcCisJCSAgICAgOiBmcmVhZF91bmxvY2tlZCAocHRyLCBzaXplLCBuLCBzdHJlYW0pKSkpCisKKyMgZGVmaW5lIGZ3cml0ZV91bmxvY2tlZChwdHIsIHNpemUsIG4sIHN0cmVhbSkgXAorICAoX19leHRlbnNpb25fXyAoKF9fYnVpbHRpbl9jb25zdGFudF9wIChzaXplKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAobikgICAgXAorCQkgICAmJiAoc2l6ZV90KSAoc2l6ZSkgKiAoc2l6ZV90KSAobikgPD0gOAkJICAgICAgXAorCQkgICAmJiAoc2l6ZV90KSAoc2l6ZSkgIT0gMCkJCQkJICAgICAgXAorCQkgID8gKHsgY29uc3QgY2hhciAqX19wdHIgPSAoY29uc3QgY2hhciAqKSAocHRyKTsJICAgICAgXAorCQkgICAgICAgRklMRSAqX19zdHJlYW0gPSAoc3RyZWFtKTsJCQkgICAgICBcCisJCSAgICAgICBzaXplX3QgX19jbnQ7CQkJCQkgICAgICBcCisJCSAgICAgICBmb3IgKF9fY250ID0gKHNpemVfdCkgKHNpemUpICogKHNpemVfdCkgKG4pOwkgICAgICBcCisJCQkgICAgX19jbnQgPiAwOyAtLV9fY250KQkJCQkgICAgICBcCisJCQkgaWYgKF9JT19wdXRjX3VubG9ja2VkICgqX19wdHIrKywgX19zdHJlYW0pID09IEVPRikgICBcCisJCQkgICBicmVhazsJCQkJCSAgICAgIFwKKwkJICAgICAgICgoc2l6ZV90KSAoc2l6ZSkgKiAoc2l6ZV90KSAobikgLSBfX2NudCkJCSAgICAgIFwKKwkJCS8gKHNpemVfdCkgKHNpemUpOyB9KQkJCQkgICAgICBcCisJCSAgOiAoKChfX2J1aWx0aW5fY29uc3RhbnRfcCAoc2l6ZSkgJiYgKHNpemVfdCkgKHNpemUpID09IDApICAgXAorCQkgICAgICB8fCAoX19idWlsdGluX2NvbnN0YW50X3AgKG4pICYmIChzaXplX3QpIChuKSA9PSAwKSkgICAgIFwKKwkJCS8qIEV2YWx1YXRlIGFsbCBwYXJhbWV0ZXJzIG9uY2UuICAqLwkJICAgICAgXAorCQkgICAgID8gKCh2b2lkKSAocHRyKSwgKHZvaWQpIChzdHJlYW0pLCAodm9pZCkgKHNpemUpLAkgICAgICBcCisJCQkodm9pZCkgKG4pLCAoc2l6ZV90KSAwKQkJCQkgICAgICBcCisJCSAgICAgOiBmd3JpdGVfdW5sb2NrZWQgKHB0ciwgc2l6ZSwgbiwgc3RyZWFtKSkpKQorI2VuZGlmCisKKy8qIERlZmluZSBoZWxwZXIgbWFjcm8uICAqLworI3VuZGVmIF9fU1RESU9fSU5MSU5FCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zdGRpbzIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMjVhYWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zdGRpbzIuaApAQCAtMCwwICsxLDM3NCBAQAorLyogQ2hlY2tpbmcgbWFjcm9zIGZvciBzdGRpbyBmdW5jdGlvbnMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1NURElPX0gKKyMgZXJyb3IgIk5ldmVyIGluY2x1ZGUgPGJpdHMvc3RkaW8yLmg+IGRpcmVjdGx5OyB1c2UgPHN0ZGlvLmg+IGluc3RlYWQuIgorI2VuZGlmCisKK2V4dGVybiBpbnQgX19zcHJpbnRmX2NoayAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX2ZsYWcsIHNpemVfdCBfX3NsZW4sCisJCQkgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSBfX1RIUk9XOworZXh0ZXJuIGludCBfX3ZzcHJpbnRmX2NoayAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX2ZsYWcsIHNpemVfdCBfX3NsZW4sCisJCQkgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCisJCQkgICBfR192YV9saXN0IF9fYXApIF9fVEhST1c7CisKKyNpZmRlZiBfX3ZhX2FyZ19wYWNrCitfX2V4dGVybl9hbHdheXNfaW5saW5lIGludAorX19OVEggKHNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikpCit7CisgIHJldHVybiBfX2J1aWx0aW5fX19zcHJpbnRmX2NoayAoX19zLCBfX1VTRV9GT1JUSUZZX0xFVkVMIC0gMSwKKwkJCQkgIF9fYm9zIChfX3MpLCBfX2ZtdCwgX192YV9hcmdfcGFjayAoKSk7Cit9CisjZWxpZiAhZGVmaW5lZCBfX2NwbHVzcGx1cworIyBkZWZpbmUgc3ByaW50ZihzdHIsIC4uLikgXAorICBfX2J1aWx0aW5fX19zcHJpbnRmX2NoayAoc3RyLCBfX1VTRV9GT1JUSUZZX0xFVkVMIC0gMSwgX19ib3MgKHN0ciksIFwKKwkJCSAgIF9fVkFfQVJHU19fKQorI2VuZGlmCisKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgaW50CitfX05USCAodnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsCisJCSBfR192YV9saXN0IF9fYXApKQoreworICByZXR1cm4gX19idWlsdGluX19fdnNwcmludGZfY2hrIChfX3MsIF9fVVNFX0ZPUlRJRllfTEVWRUwgLSAxLAorCQkJCSAgIF9fYm9zIChfX3MpLCBfX2ZtdCwgX19hcCk7Cit9CisKKyNpZiBkZWZpbmVkIF9fVVNFX0JTRCB8fCBkZWZpbmVkIF9fVVNFX0lTT0M5OSB8fCBkZWZpbmVkIF9fVVNFX1VOSVg5OAorCitleHRlcm4gaW50IF9fc25wcmludGZfY2hrIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwgaW50IF9fZmxhZywKKwkJCSAgIHNpemVfdCBfX3NsZW4sIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKKwkJCSAgIC4uLikgX19USFJPVzsKK2V4dGVybiBpbnQgX192c25wcmludGZfY2hrIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwgaW50IF9fZmxhZywKKwkJCSAgICBzaXplX3QgX19zbGVuLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCisJCQkgICAgX0dfdmFfbGlzdCBfX2FwKSBfX1RIUk9XOworCisjIGlmZGVmIF9fdmFfYXJnX3BhY2sKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgaW50CitfX05USCAoc25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAorCQkgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pKQoreworICByZXR1cm4gX19idWlsdGluX19fc25wcmludGZfY2hrIChfX3MsIF9fbiwgX19VU0VfRk9SVElGWV9MRVZFTCAtIDEsCisJCQkJICAgX19ib3MgKF9fcyksIF9fZm10LCBfX3ZhX2FyZ19wYWNrICgpKTsKK30KKyMgZWxpZiAhZGVmaW5lZCBfX2NwbHVzcGx1cworIyAgZGVmaW5lIHNucHJpbnRmKHN0ciwgbGVuLCAuLi4pIFwKKyAgX19idWlsdGluX19fc25wcmludGZfY2hrIChzdHIsIGxlbiwgX19VU0VfRk9SVElGWV9MRVZFTCAtIDEsIF9fYm9zIChzdHIpLCBcCisJCQkgICAgX19WQV9BUkdTX18pCisjIGVuZGlmCisKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgaW50CitfX05USCAodnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKKwkJICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIF9HX3ZhX2xpc3QgX19hcCkpCit7CisgIHJldHVybiBfX2J1aWx0aW5fX192c25wcmludGZfY2hrIChfX3MsIF9fbiwgX19VU0VfRk9SVElGWV9MRVZFTCAtIDEsCisJCQkJICAgIF9fYm9zIChfX3MpLCBfX2ZtdCwgX19hcCk7Cit9CisKKyNlbmRpZgorCisjaWYgX19VU0VfRk9SVElGWV9MRVZFTCA+IDEKKworZXh0ZXJuIGludCBfX2ZwcmludGZfY2hrIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBpbnQgX19mbGFnLAorCQkJICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLik7CitleHRlcm4gaW50IF9fcHJpbnRmX2NoayAoaW50IF9fZmxhZywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pOworZXh0ZXJuIGludCBfX3ZmcHJpbnRmX2NoayAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgaW50IF9fZmxhZywKKwkJCSAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX0dfdmFfbGlzdCBfX2FwKTsKK2V4dGVybiBpbnQgX192cHJpbnRmX2NoayAoaW50IF9fZmxhZywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAorCQkJICBfR192YV9saXN0IF9fYXApOworCisjIGlmZGVmIF9fdmFfYXJnX3BhY2sKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgaW50CitmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKK3sKKyAgcmV0dXJuIF9fZnByaW50Zl9jaGsgKF9fc3RyZWFtLCBfX1VTRV9GT1JUSUZZX0xFVkVMIC0gMSwgX19mbXQsCisJCQlfX3ZhX2FyZ19wYWNrICgpKTsKK30KKworX19leHRlcm5fYWx3YXlzX2lubGluZSBpbnQKK3ByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCit7CisgIHJldHVybiBfX3ByaW50Zl9jaGsgKF9fVVNFX0ZPUlRJRllfTEVWRUwgLSAxLCBfX2ZtdCwgX192YV9hcmdfcGFjayAoKSk7Cit9CisjIGVsaWYgIWRlZmluZWQgX19jcGx1c3BsdXMKKyMgIGRlZmluZSBwcmludGYoLi4uKSBcCisgIF9fcHJpbnRmX2NoayAoX19VU0VfRk9SVElGWV9MRVZFTCAtIDEsIF9fVkFfQVJHU19fKQorIyAgZGVmaW5lIGZwcmludGYoc3RyZWFtLCAuLi4pIFwKKyAgX19mcHJpbnRmX2NoayAoc3RyZWFtLCBfX1VTRV9GT1JUSUZZX0xFVkVMIC0gMSwgX19WQV9BUkdTX18pCisjIGVuZGlmCisKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgaW50Cit2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIF9HX3ZhX2xpc3QgX19hcCkKK3sKKyNpZmRlZiBfX1VTRV9FWFRFUk5fSU5MSU5FUworICByZXR1cm4gX192ZnByaW50Zl9jaGsgKHN0ZG91dCwgX19VU0VfRk9SVElGWV9MRVZFTCAtIDEsIF9fZm10LCBfX2FwKTsKKyNlbHNlCisgIHJldHVybiBfX3ZwcmludGZfY2hrIChfX1VTRV9GT1JUSUZZX0xFVkVMIC0gMSwgX19mbXQsIF9fYXApOworI2VuZGlmCit9CisKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgaW50Cit2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKKwkgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgX0dfdmFfbGlzdCBfX2FwKQoreworICByZXR1cm4gX192ZnByaW50Zl9jaGsgKF9fc3RyZWFtLCBfX1VTRV9GT1JUSUZZX0xFVkVMIC0gMSwgX19mbXQsIF9fYXApOworfQorCisjIGlmZGVmIF9fVVNFX0dOVQorCitleHRlcm4gaW50IF9fYXNwcmludGZfY2hrIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwgaW50IF9fZmxhZywKKwkJCSAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpIF9fd3VyOworZXh0ZXJuIGludCBfX3Zhc3ByaW50Zl9jaGsgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLCBpbnQgX19mbGFnLAorCQkJICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgX0dfdmFfbGlzdCBfX2FyZykKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKSBfX3d1cjsKK2V4dGVybiBpbnQgX19kcHJpbnRmX2NoayAoaW50IF9fZmQsIGludCBfX2ZsYWcsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwKKwkJCSAgLi4uKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKK2V4dGVybiBpbnQgX192ZHByaW50Zl9jaGsgKGludCBfX2ZkLCBpbnQgX19mbGFnLAorCQkJICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBfR192YV9saXN0IF9fYXJnKQorICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKK2V4dGVybiBpbnQgX19vYnN0YWNrX3ByaW50Zl9jaGsgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKKwkJCQkgaW50IF9fZmxhZywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAorCQkJCSAuLi4pCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CitleHRlcm4gaW50IF9fb2JzdGFja192cHJpbnRmX2NoayAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAorCQkJCSAgaW50IF9fZmxhZywKKwkJCQkgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKKwkJCQkgIF9HX3ZhX2xpc3QgX19hcmdzKQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOworCisjICBpZmRlZiBfX3ZhX2FyZ19wYWNrCitfX2V4dGVybl9hbHdheXNfaW5saW5lIGludAorX19OVEggKGFzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pKQoreworICByZXR1cm4gX19hc3ByaW50Zl9jaGsgKF9fcHRyLCBfX1VTRV9GT1JUSUZZX0xFVkVMIC0gMSwgX19mbXQsCisJCQkgX192YV9hcmdfcGFjayAoKSk7Cit9CisKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgaW50CitfX05USCAoX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwKKwkJICAgLi4uKSkKK3sKKyAgcmV0dXJuIF9fYXNwcmludGZfY2hrIChfX3B0ciwgX19VU0VfRk9SVElGWV9MRVZFTCAtIDEsIF9fZm10LAorCQkJIF9fdmFfYXJnX3BhY2sgKCkpOworfQorCitfX2V4dGVybl9hbHdheXNfaW5saW5lIGludAorZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQoreworICByZXR1cm4gX19kcHJpbnRmX2NoayAoX19mZCwgX19VU0VfRk9SVElGWV9MRVZFTCAtIDEsIF9fZm10LAorCQkJX192YV9hcmdfcGFjayAoKSk7Cit9CisKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgaW50CitfX05USCAob2JzdGFja19wcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKKwkJICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKSkKK3sKKyAgcmV0dXJuIF9fb2JzdGFja19wcmludGZfY2hrIChfX29ic3RhY2ssIF9fVVNFX0ZPUlRJRllfTEVWRUwgLSAxLCBfX2ZtdCwKKwkJCSAgICAgICBfX3ZhX2FyZ19wYWNrICgpKTsKK30KKyMgIGVsaWYgIWRlZmluZWQgX19jcGx1c3BsdXMKKyMgICBkZWZpbmUgYXNwcmludGYocHRyLCAuLi4pIFwKKyAgX19hc3ByaW50Zl9jaGsgKHB0ciwgX19VU0VfRk9SVElGWV9MRVZFTCAtIDEsIF9fVkFfQVJHU19fKQorIyAgIGRlZmluZSBfX2FzcHJpbnRmKHB0ciwgLi4uKSBcCisgIF9fYXNwcmludGZfY2hrIChwdHIsIF9fVVNFX0ZPUlRJRllfTEVWRUwgLSAxLCBfX1ZBX0FSR1NfXykKKyMgICBkZWZpbmUgZHByaW50ZihmZCwgLi4uKSBcCisgIF9fZHByaW50Zl9jaGsgKGZkLCBfX1VTRV9GT1JUSUZZX0xFVkVMIC0gMSwgX19WQV9BUkdTX18pCisjICAgZGVmaW5lIG9ic3RhY2tfcHJpbnRmKG9ic3RhY2ssIC4uLikgXAorICBfX29ic3RhY2tfcHJpbnRmX2NoayAob2JzdGFjaywgX19VU0VfRk9SVElGWV9MRVZFTCAtIDEsIF9fVkFfQVJHU19fKQorIyAgZW5kaWYKKworX19leHRlcm5fYWx3YXlzX2lubGluZSBpbnQKK19fTlRIICh2YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsCisJCSAgX0dfdmFfbGlzdCBfX2FwKSkKK3sKKyAgcmV0dXJuIF9fdmFzcHJpbnRmX2NoayAoX19wdHIsIF9fVVNFX0ZPUlRJRllfTEVWRUwgLSAxLCBfX2ZtdCwgX19hcCk7Cit9CisKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgaW50Cit2ZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgX0dfdmFfbGlzdCBfX2FwKQoreworICByZXR1cm4gX192ZHByaW50Zl9jaGsgKF9fZmQsIF9fVVNFX0ZPUlRJRllfTEVWRUwgLSAxLCBfX2ZtdCwgX19hcCk7Cit9CisKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgaW50CitfX05USCAob2JzdGFja192cHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCisJCQlfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIF9HX3ZhX2xpc3QgX19hcCkpCit7CisgIHJldHVybiBfX29ic3RhY2tfdnByaW50Zl9jaGsgKF9fb2JzdGFjaywgX19VU0VfRk9SVElGWV9MRVZFTCAtIDEsIF9fZm10LAorCQkJCV9fYXApOworfQorCisjIGVuZGlmCisKKyNlbmRpZgorCitleHRlcm4gY2hhciAqX19nZXRzX2NoayAoY2hhciAqX19zdHIsIHNpemVfdCkgX193dXI7CitleHRlcm4gY2hhciAqX19SRURJUkVDVCAoX19nZXRzX3dhcm4sIChjaGFyICpfX3N0ciksIGdldHMpCisgICAgIF9fd3VyIF9fd2FybmF0dHIgKCJwbGVhc2UgdXNlIGZnZXRzIG9yIGdldGxpbmUgaW5zdGVhZCwgZ2V0cyBjYW4ndCAiCisJCSAgICAgICAic3BlY2lmeSBidWZmZXIgc2l6ZSIpOworCitfX2V4dGVybl9hbHdheXNfaW5saW5lIF9fd3VyIGNoYXIgKgorZ2V0cyAoY2hhciAqX19zdHIpCit7CisgIGlmIChfX2JvcyAoX19zdHIpICE9IChzaXplX3QpIC0xKQorICAgIHJldHVybiBfX2dldHNfY2hrIChfX3N0ciwgX19ib3MgKF9fc3RyKSk7CisgIHJldHVybiBfX2dldHNfd2FybiAoX19zdHIpOworfQorCitleHRlcm4gY2hhciAqX19mZ2V0c19jaGsgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19zaXplLCBpbnQgX19uLAorCQkJICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSBfX3d1cjsKK2V4dGVybiBjaGFyICpfX1JFRElSRUNUIChfX2ZnZXRzX2FsaWFzLAorCQkJIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwKKwkJCSAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSksIGZnZXRzKSBfX3d1cjsKK2V4dGVybiBjaGFyICpfX1JFRElSRUNUIChfX2ZnZXRzX2Noa193YXJuLAorCQkJIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fc2l6ZSwgaW50IF9fbiwKKwkJCSAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSksIF9fZmdldHNfY2hrKQorICAgICBfX3d1ciBfX3dhcm5hdHRyICgiZmdldHMgY2FsbGVkIHdpdGggYmlnZ2VyIHNpemUgdGhhbiBsZW5ndGggIgorCQkgICAgICAgIm9mIGRlc3RpbmF0aW9uIGJ1ZmZlciIpOworCitfX2V4dGVybl9hbHdheXNfaW5saW5lIF9fd3VyIGNoYXIgKgorZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQoreworICBpZiAoX19ib3MgKF9fcykgIT0gKHNpemVfdCkgLTEpCisgICAgeworICAgICAgaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19uKSB8fCBfX24gPD0gMCkKKwlyZXR1cm4gX19mZ2V0c19jaGsgKF9fcywgX19ib3MgKF9fcyksIF9fbiwgX19zdHJlYW0pOworCisgICAgICBpZiAoKHNpemVfdCkgX19uID4gX19ib3MgKF9fcykpCisJcmV0dXJuIF9fZmdldHNfY2hrX3dhcm4gKF9fcywgX19ib3MgKF9fcyksIF9fbiwgX19zdHJlYW0pOworICAgIH0KKyAgcmV0dXJuIF9fZmdldHNfYWxpYXMgKF9fcywgX19uLCBfX3N0cmVhbSk7Cit9CisKK2V4dGVybiBzaXplX3QgX19mcmVhZF9jaGsgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3B0cmxlbiwKKwkJCSAgIHNpemVfdCBfX3NpemUsIHNpemVfdCBfX24sCisJCQkgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSBfX3d1cjsKK2V4dGVybiBzaXplX3QgX19SRURJUkVDVCAoX19mcmVhZF9hbGlhcywKKwkJCSAgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCisJCQkgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSwKKwkJCSAgZnJlYWQpIF9fd3VyOworZXh0ZXJuIHNpemVfdCBfX1JFRElSRUNUIChfX2ZyZWFkX2Noa193YXJuLAorCQkJICAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fcHRybGVuLAorCQkJICAgc2l6ZV90IF9fc2l6ZSwgc2l6ZV90IF9fbiwKKwkJCSAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pLAorCQkJICBfX2ZyZWFkX2NoaykKKyAgICAgX193dXIgX193YXJuYXR0ciAoImZyZWFkIGNhbGxlZCB3aXRoIGJpZ2dlciBzaXplICogbm1lbWIgdGhhbiBsZW5ndGggIgorCQkgICAgICAgIm9mIGRlc3RpbmF0aW9uIGJ1ZmZlciIpOworCitfX2V4dGVybl9hbHdheXNfaW5saW5lIF9fd3VyIHNpemVfdAorZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsIHNpemVfdCBfX24sCisgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKK3sKKyAgaWYgKF9fYm9zMCAoX19wdHIpICE9IChzaXplX3QpIC0xKQorICAgIHsKKyAgICAgIGlmICghX19idWlsdGluX2NvbnN0YW50X3AgKF9fc2l6ZSkKKwkgIHx8ICFfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19uKQorCSAgfHwgKF9fc2l6ZSB8IF9fbikgPj0gKCgoc2l6ZV90KSAxKSA8PCAoOCAqIHNpemVvZiAoc2l6ZV90KSAvIDIpKSkKKwlyZXR1cm4gX19mcmVhZF9jaGsgKF9fcHRyLCBfX2JvczAgKF9fcHRyKSwgX19zaXplLCBfX24sIF9fc3RyZWFtKTsKKworICAgICAgaWYgKF9fc2l6ZSAqIF9fbiA+IF9fYm9zMCAoX19wdHIpKQorCXJldHVybiBfX2ZyZWFkX2Noa193YXJuIChfX3B0ciwgX19ib3MwIChfX3B0ciksIF9fc2l6ZSwgX19uLCBfX3N0cmVhbSk7CisgICAgfQorICByZXR1cm4gX19mcmVhZF9hbGlhcyAoX19wdHIsIF9fc2l6ZSwgX19uLCBfX3N0cmVhbSk7Cit9CisKKyNpZmRlZiBfX1VTRV9HTlUKK2V4dGVybiBjaGFyICpfX2ZnZXRzX3VubG9ja2VkX2NoayAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX3NpemUsCisJCQkJICAgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgX193dXI7CitleHRlcm4gY2hhciAqX19SRURJUkVDVCAoX19mZ2V0c191bmxvY2tlZF9hbGlhcywKKwkJCSAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sCisJCQkgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pLCBmZ2V0c191bmxvY2tlZCkgX193dXI7CitleHRlcm4gY2hhciAqX19SRURJUkVDVCAoX19mZ2V0c191bmxvY2tlZF9jaGtfd2FybiwKKwkJCSAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX3NpemUsIGludCBfX24sCisJCQkgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pLCBfX2ZnZXRzX3VubG9ja2VkX2NoaykKKyAgICAgX193dXIgX193YXJuYXR0ciAoImZnZXRzX3VubG9ja2VkIGNhbGxlZCB3aXRoIGJpZ2dlciBzaXplIHRoYW4gbGVuZ3RoICIKKwkJICAgICAgICJvZiBkZXN0aW5hdGlvbiBidWZmZXIiKTsKKworX19leHRlcm5fYWx3YXlzX2lubGluZSBfX3d1ciBjaGFyICoKK2ZnZXRzX3VubG9ja2VkIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKK3sKKyAgaWYgKF9fYm9zIChfX3MpICE9IChzaXplX3QpIC0xKQorICAgIHsKKyAgICAgIGlmICghX19idWlsdGluX2NvbnN0YW50X3AgKF9fbikgfHwgX19uIDw9IDApCisJcmV0dXJuIF9fZmdldHNfdW5sb2NrZWRfY2hrIChfX3MsIF9fYm9zIChfX3MpLCBfX24sIF9fc3RyZWFtKTsKKworICAgICAgaWYgKChzaXplX3QpIF9fbiA+IF9fYm9zIChfX3MpKQorCXJldHVybiBfX2ZnZXRzX3VubG9ja2VkX2Noa193YXJuIChfX3MsIF9fYm9zIChfX3MpLCBfX24sIF9fc3RyZWFtKTsKKyAgICB9CisgIHJldHVybiBfX2ZnZXRzX3VubG9ja2VkX2FsaWFzIChfX3MsIF9fbiwgX19zdHJlYW0pOworfQorI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9NSVNDCisjIHVuZGVmIGZyZWFkX3VubG9ja2VkCitleHRlcm4gc2l6ZV90IF9fZnJlYWRfdW5sb2NrZWRfY2hrICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19wdHJsZW4sCisJCQkJICAgIHNpemVfdCBfX3NpemUsIHNpemVfdCBfX24sCisJCQkJICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIF9fd3VyOworZXh0ZXJuIHNpemVfdCBfX1JFRElSRUNUIChfX2ZyZWFkX3VubG9ja2VkX2FsaWFzLAorCQkJICAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKKwkJCSAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pLAorCQkJICBmcmVhZF91bmxvY2tlZCkgX193dXI7CitleHRlcm4gc2l6ZV90IF9fUkVESVJFQ1QgKF9fZnJlYWRfdW5sb2NrZWRfY2hrX3dhcm4sCisJCQkgICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19wdHJsZW4sCisJCQkgICBzaXplX3QgX19zaXplLCBzaXplX3QgX19uLAorCQkJICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSksCisJCQkgIF9fZnJlYWRfdW5sb2NrZWRfY2hrKQorICAgICBfX3d1ciBfX3dhcm5hdHRyICgiZnJlYWRfdW5sb2NrZWQgY2FsbGVkIHdpdGggYmlnZ2VyIHNpemUgKiBubWVtYiB0aGFuICIKKwkJICAgICAgICJsZW5ndGggb2YgZGVzdGluYXRpb24gYnVmZmVyIik7CisKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgX193dXIgc2l6ZV90CitmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwgc2l6ZV90IF9fbiwKKwkJRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKK3sKKyAgaWYgKF9fYm9zMCAoX19wdHIpICE9IChzaXplX3QpIC0xKQorICAgIHsKKyAgICAgIGlmICghX19idWlsdGluX2NvbnN0YW50X3AgKF9fc2l6ZSkKKwkgIHx8ICFfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19uKQorCSAgfHwgKF9fc2l6ZSB8IF9fbikgPj0gKCgoc2l6ZV90KSAxKSA8PCAoOCAqIHNpemVvZiAoc2l6ZV90KSAvIDIpKSkKKwlyZXR1cm4gX19mcmVhZF91bmxvY2tlZF9jaGsgKF9fcHRyLCBfX2JvczAgKF9fcHRyKSwgX19zaXplLCBfX24sCisJCQkJICAgICBfX3N0cmVhbSk7CisKKyAgICAgIGlmIChfX3NpemUgKiBfX24gPiBfX2JvczAgKF9fcHRyKSkKKwlyZXR1cm4gX19mcmVhZF91bmxvY2tlZF9jaGtfd2FybiAoX19wdHIsIF9fYm9zMCAoX19wdHIpLCBfX3NpemUsIF9fbiwKKwkJCQkJICBfX3N0cmVhbSk7CisgICAgfQorCisjIGlmZGVmIF9fVVNFX0VYVEVSTl9JTkxJTkVTCisgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19zaXplKQorICAgICAgJiYgX19idWlsdGluX2NvbnN0YW50X3AgKF9fbikKKyAgICAgICYmIChfX3NpemUgfCBfX24pIDwgKCgoc2l6ZV90KSAxKSA8PCAoOCAqIHNpemVvZiAoc2l6ZV90KSAvIDIpKQorICAgICAgJiYgX19zaXplICogX19uIDw9IDgpCisgICAgeworICAgICAgc2l6ZV90IF9fY250ID0gX19zaXplICogX19uOworICAgICAgY2hhciAqX19jcHRyID0gKGNoYXIgKikgX19wdHI7CisgICAgICBpZiAoX19jbnQgPT0gMCkKKwlyZXR1cm4gMDsKKworICAgICAgZm9yICg7IF9fY250ID4gMDsgLS1fX2NudCkKKwl7CisJICBpbnQgX19jID0gX0lPX2dldGNfdW5sb2NrZWQgKF9fc3RyZWFtKTsKKwkgIGlmIChfX2MgPT0gRU9GKQorCSAgICBicmVhazsKKwkgICpfX2NwdHIrKyA9IF9fYzsKKwl9CisgICAgICByZXR1cm4gKF9fY3B0ciAtIChjaGFyICopIF9fcHRyKSAvIF9fc2l6ZTsKKyAgICB9CisjIGVuZGlmCisgIHJldHVybiBfX2ZyZWFkX3VubG9ja2VkX2FsaWFzIChfX3B0ciwgX19zaXplLCBfX24sIF9fc3RyZWFtKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zdGRpb19saW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDlmOWQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgKQEAgLTAsMCArMSw0MSBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk3LCAxOTk4LCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWYgIWRlZmluZWQgX1NURElPX0ggJiYgIWRlZmluZWQgX19uZWVkX0ZPUEVOX01BWCAmJiAhZGVmaW5lZCBfX25lZWRfSU9WX01BWAorIyBlcnJvciAiTmV2ZXIgaW5jbHVkZSA8Yml0cy9zdGRpb19saW0uaD4gZGlyZWN0bHk7IHVzZSA8c3RkaW8uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmZGVmIF9TVERJT19ICisjIGRlZmluZSBMX3RtcG5hbSAyMAorIyBkZWZpbmUgVE1QX01BWCAyMzgzMjgKKyMgZGVmaW5lIEZJTEVOQU1FX01BWCA0MDk2CisKKyMgaWZkZWYgX19VU0VfUE9TSVgKKyMgIGRlZmluZSBMX2N0ZXJtaWQgOQorIyAgZGVmaW5lIExfY3VzZXJpZCA5CisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgX19uZWVkX0ZPUEVOX01BWCB8fCBkZWZpbmVkIF9TVERJT19ICisjIHVuZGVmICBGT1BFTl9NQVgKKyMgZGVmaW5lIEZPUEVOX01BWCAxNgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIF9fbmVlZF9JT1ZfTUFYICYmICFkZWZpbmVkIElPVl9NQVgKKyMgZGVmaW5lIElPVl9NQVggMTAyNAorI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zdGRsaWItbGRibC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc3RkbGliLWxkYmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDhlMWY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc3RkbGliLWxkYmwuaApAQCAtMCwwICsxLDQyIEBACisvKiAtbWxvbmctZG91YmxlLTY0IGNvbXBhdGliaWxpdHkgbW9kZSBmb3IgPHN0ZGxpYi5oPiBmdW5jdGlvbnMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1NURExJQl9ICisjIGVycm9yICJOZXZlciBpbmNsdWRlIDxiaXRzL3N0ZGxpYi1sZGJsLmg+IGRpcmVjdGx5OyB1c2UgPHN0ZGxpYi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZkZWYJX19VU0VfSVNPQzk5CitfX0JFR0lOX05BTUVTUEFDRV9DOTkKK19fTERCTF9SRURJUjFfREVDTCAoc3RydG9sZCwgc3RydG9kKQorX19FTkRfTkFNRVNQQUNFX0M5OQorI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9HTlUKK19fTERCTF9SRURJUjFfREVDTCAoc3RydG9sZF9sLCBzdHJ0b2RfbCkKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfX1VTRV9TVklEIHx8IGRlZmluZWQgX19VU0VfWE9QRU5fRVhURU5ERUQKKyMgaWZkZWYgX19VU0VfTUlTQworX19MREJMX1JFRElSMV9ERUNMIChxZWN2dCwgZWN2dCkKK19fTERCTF9SRURJUjFfREVDTCAocWZjdnQsIGZjdnQpCitfX0xEQkxfUkVESVIxX0RFQ0wgKHFnY3Z0LCBnY3Z0KQorX19MREJMX1JFRElSMV9ERUNMIChxZWN2dF9yLCBlY3Z0X3IpCitfX0xEQkxfUkVESVIxX0RFQ0wgKHFmY3Z0X3IsIGZjdnRfcikKKyMgZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc3RkbGliLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zdGRsaWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmFmNWU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc3RkbGliLmgKQEAgLTAsMCArMSwxNTYgQEAKKy8qIENoZWNraW5nIG1hY3JvcyBmb3Igc3RkbGliIGZ1bmN0aW9ucy4KKyAgIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfU1RETElCX0gKKyMgZXJyb3IgIk5ldmVyIGluY2x1ZGUgPGJpdHMvc3RkbGliLmg+IGRpcmVjdGx5OyB1c2UgPHN0ZGxpYi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCitleHRlcm4gY2hhciAqX19yZWFscGF0aF9jaGsgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCisJCQkgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCwKKwkJCSAgICAgc2l6ZV90IF9fcmVzb2x2ZWRsZW4pIF9fVEhST1cgX193dXI7CitleHRlcm4gY2hhciAqX19SRURJUkVDVF9OVEggKF9fcmVhbHBhdGhfYWxpYXMsCisJCQkgICAgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAorCQkJICAgICAgY2hhciAqX19yZXN0cmljdCBfX3Jlc29sdmVkKSwgcmVhbHBhdGgpIF9fd3VyOworZXh0ZXJuIGNoYXIgKl9fUkVESVJFQ1RfTlRIIChfX3JlYWxwYXRoX2Noa193YXJuLAorCQkJICAgICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKKwkJCSAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCwKKwkJCSAgICAgIHNpemVfdCBfX3Jlc29sdmVkbGVuKSwgX19yZWFscGF0aF9jaGspIF9fd3VyCisgICAgIF9fd2FybmF0dHIgKCJzZWNvbmQgYXJndW1lbnQgb2YgcmVhbHBhdGggbXVzdCBiZSBlaXRoZXIgTlVMTCBvciBhdCAiCisJCSAibGVhc3QgUEFUSF9NQVggYnl0ZXMgbG9uZyBidWZmZXIiKTsKKworX19leHRlcm5fYWx3YXlzX2lubGluZSBfX3d1ciBjaGFyICoKK19fTlRIIChyZWFscGF0aCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwgY2hhciAqX19yZXN0cmljdCBfX3Jlc29sdmVkKSkKK3sKKyAgaWYgKF9fYm9zIChfX3Jlc29sdmVkKSAhPSAoc2l6ZV90KSAtMSkKKyAgICB7CisjaWYgZGVmaW5lZCBfTElCQ19MSU1JVFNfSF8gJiYgZGVmaW5lZCBQQVRIX01BWAorICAgICAgaWYgKF9fYm9zIChfX3Jlc29sdmVkKSA8IFBBVEhfTUFYKQorCXJldHVybiBfX3JlYWxwYXRoX2Noa193YXJuIChfX25hbWUsIF9fcmVzb2x2ZWQsIF9fYm9zIChfX3Jlc29sdmVkKSk7CisjZW5kaWYKKyAgICAgIHJldHVybiBfX3JlYWxwYXRoX2NoayAoX19uYW1lLCBfX3Jlc29sdmVkLCBfX2JvcyAoX19yZXNvbHZlZCkpOworICAgIH0KKworICByZXR1cm4gX19yZWFscGF0aF9hbGlhcyAoX19uYW1lLCBfX3Jlc29sdmVkKTsKK30KKworCitleHRlcm4gaW50IF9fcHRzbmFtZV9yX2NoayAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4sCisJCQkgICAgc2l6ZV90IF9fbnJlYWwpIF9fVEhST1cgX19ub25udWxsICgoMikpOworZXh0ZXJuIGludCBfX1JFRElSRUNUX05USCAoX19wdHNuYW1lX3JfYWxpYXMsIChpbnQgX19mZCwgY2hhciAqX19idWYsCisJCQkJCSAgICAgICBzaXplX3QgX19idWZsZW4pLCBwdHNuYW1lX3IpCisgICAgIF9fbm9ubnVsbCAoKDIpKTsKK2V4dGVybiBpbnQgX19SRURJUkVDVF9OVEggKF9fcHRzbmFtZV9yX2Noa193YXJuLAorCQkJICAgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAorCQkJICAgIHNpemVfdCBfX25yZWFsKSwgX19wdHNuYW1lX3JfY2hrKQorICAgICBfX25vbm51bGwgKCgyKSkgX193YXJuYXR0ciAoInB0c25hbWVfciBjYWxsZWQgd2l0aCBidWZsZW4gYmlnZ2VyIHRoYW4gIgorCQkJCSAic2l6ZSBvZiBidWYiKTsKKworX19leHRlcm5fYWx3YXlzX2lubGluZSBpbnQKK19fTlRIIChwdHNuYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSkKK3sKKyAgaWYgKF9fYm9zIChfX2J1ZikgIT0gKHNpemVfdCkgLTEpCisgICAgeworICAgICAgaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19idWZsZW4pKQorCXJldHVybiBfX3B0c25hbWVfcl9jaGsgKF9fZmQsIF9fYnVmLCBfX2J1ZmxlbiwgX19ib3MgKF9fYnVmKSk7CisgICAgICBpZiAoX19idWZsZW4gPiBfX2JvcyAoX19idWYpKQorCXJldHVybiBfX3B0c25hbWVfcl9jaGtfd2FybiAoX19mZCwgX19idWYsIF9fYnVmbGVuLCBfX2JvcyAoX19idWYpKTsKKyAgICB9CisgIHJldHVybiBfX3B0c25hbWVfcl9hbGlhcyAoX19mZCwgX19idWYsIF9fYnVmbGVuKTsKK30KKworCitleHRlcm4gaW50IF9fd2N0b21iX2NoayAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIsIHNpemVfdCBfX2J1ZmxlbikKKyAgX19USFJPVyBfX3d1cjsKK2V4dGVybiBpbnQgX19SRURJUkVDVF9OVEggKF9fd2N0b21iX2FsaWFzLCAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpLAorCQkJICAgd2N0b21iKSBfX3d1cjsKKworX19leHRlcm5fYWx3YXlzX2lubGluZSBfX3d1ciBpbnQKK19fTlRIICh3Y3RvbWIgKGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSkKK3sKKyAgLyogV2Ugd291bGQgaGF2ZSB0byBpbmNsdWRlIDxsaW1pdHMuaD4gdG8gZ2V0IGEgZGVmaW5pdGlvbiBvZiBNQl9MRU5fTUFYLgorICAgICBCdXQgdGhpcyB3b3VsZCBvbmx5IGRpc3R1cmIgdGhlIG5hbWVzcGFjZS4gIFNvIHdlIGRlZmluZSBvdXIgb3duCisgICAgIHZlcnNpb24gaGVyZS4gICovCisjZGVmaW5lIF9fU1RETElCX01CX0xFTl9NQVgJMTYKKyNpZiBkZWZpbmVkIE1CX0xFTl9NQVggJiYgTUJfTEVOX01BWCAhPSBfX1NURExJQl9NQl9MRU5fTUFYCisjIGVycm9yICJBc3N1bWVkIHZhbHVlIG9mIE1CX0xFTl9NQVggd3JvbmciCisjZW5kaWYKKyAgaWYgKF9fYm9zIChfX3MpICE9IChzaXplX3QpIC0xICYmIF9fU1RETElCX01CX0xFTl9NQVggPiBfX2JvcyAoX19zKSkKKyAgICByZXR1cm4gX193Y3RvbWJfY2hrIChfX3MsIF9fd2NoYXIsIF9fYm9zIChfX3MpKTsKKyAgcmV0dXJuIF9fd2N0b21iX2FsaWFzIChfX3MsIF9fd2NoYXIpOworfQorCisKK2V4dGVybiBzaXplX3QgX19tYnN0b3djc19jaGsgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3QsCisJCQkgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsCisJCQkgICAgICBzaXplX3QgX19sZW4sIHNpemVfdCBfX2RzdGxlbikgX19USFJPVzsKK2V4dGVybiBzaXplX3QgX19SRURJUkVDVF9OVEggKF9fbWJzdG93Y3NfYWxpYXMsCisJCQkgICAgICAod2NoYXJfdCAqX19yZXN0cmljdCBfX2RzdCwKKwkJCSAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsCisJCQkgICAgICAgc2l6ZV90IF9fbGVuKSwgbWJzdG93Y3MpOworZXh0ZXJuIHNpemVfdCBfX1JFRElSRUNUX05USCAoX19tYnN0b3djc19jaGtfd2FybiwKKwkJCSAgICAgICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAorCQkJICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywKKwkJCSAgICAgICBzaXplX3QgX19sZW4sIHNpemVfdCBfX2RzdGxlbiksIF9fbWJzdG93Y3NfY2hrKQorICAgICBfX3dhcm5hdHRyICgibWJzdG93Y3MgY2FsbGVkIHdpdGggZHN0IGJ1ZmZlciBzbWFsbGVyIHRoYW4gbGVuICIKKwkJICIqIHNpemVvZiAod2NoYXJfdCkiKTsKKworX19leHRlcm5fYWx3YXlzX2lubGluZSBzaXplX3QKK19fTlRIIChtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX2RzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLAorCQkgc2l6ZV90IF9fbGVuKSkKK3sKKyAgaWYgKF9fYm9zIChfX2RzdCkgIT0gKHNpemVfdCkgLTEpCisgICAgeworICAgICAgaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19sZW4pKQorCXJldHVybiBfX21ic3Rvd2NzX2NoayAoX19kc3QsIF9fc3JjLCBfX2xlbiwKKwkJCSAgICAgICBfX2JvcyAoX19kc3QpIC8gc2l6ZW9mICh3Y2hhcl90KSk7CisKKyAgICAgIGlmIChfX2xlbiA+IF9fYm9zIChfX2RzdCkgLyBzaXplb2YgKHdjaGFyX3QpKQorCXJldHVybiBfX21ic3Rvd2NzX2Noa193YXJuIChfX2RzdCwgX19zcmMsIF9fbGVuLAorCQkJCSAgICAgX19ib3MgKF9fZHN0KSAvIHNpemVvZiAod2NoYXJfdCkpOworICAgIH0KKyAgcmV0dXJuIF9fbWJzdG93Y3NfYWxpYXMgKF9fZHN0LCBfX3NyYywgX19sZW4pOworfQorCisKK2V4dGVybiBzaXplX3QgX193Y3N0b21ic19jaGsgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsCisJCQkgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsCisJCQkgICAgICBzaXplX3QgX19sZW4sIHNpemVfdCBfX2RzdGxlbikgX19USFJPVzsKK2V4dGVybiBzaXplX3QgX19SRURJUkVDVF9OVEggKF9fd2NzdG9tYnNfYWxpYXMsCisJCQkgICAgICAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwKKwkJCSAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsCisJCQkgICAgICAgc2l6ZV90IF9fbGVuKSwgd2NzdG9tYnMpOworZXh0ZXJuIHNpemVfdCBfX1JFRElSRUNUX05USCAoX193Y3N0b21ic19jaGtfd2FybiwKKwkJCSAgICAgIChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LAorCQkJICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywKKwkJCSAgICAgICBzaXplX3QgX19sZW4sIHNpemVfdCBfX2RzdGxlbiksIF9fd2NzdG9tYnNfY2hrKQorICAgICBfX3dhcm5hdHRyICgid2NzdG9tYnMgY2FsbGVkIHdpdGggZHN0IGJ1ZmZlciBzbWFsbGVyIHRoYW4gbGVuIik7CisKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgc2l6ZV90CitfX05USCAod2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywKKwkJIHNpemVfdCBfX2xlbikpCit7CisgIGlmIChfX2JvcyAoX19kc3QpICE9IChzaXplX3QpIC0xKQorICAgIHsKKyAgICAgIGlmICghX19idWlsdGluX2NvbnN0YW50X3AgKF9fbGVuKSkKKwlyZXR1cm4gX193Y3N0b21ic19jaGsgKF9fZHN0LCBfX3NyYywgX19sZW4sIF9fYm9zIChfX2RzdCkpOworICAgICAgaWYgKF9fbGVuID4gX19ib3MgKF9fZHN0KSkKKwlyZXR1cm4gX193Y3N0b21ic19jaGtfd2FybiAoX19kc3QsIF9fc3JjLCBfX2xlbiwgX19ib3MgKF9fZHN0KSk7CisgICAgfQorICByZXR1cm4gX193Y3N0b21ic19hbGlhcyAoX19kc3QsIF9fc3JjLCBfX2xlbik7Cit9CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3N0cmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNmY5NTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcuaApAQCAtMCwwICsxLDMxIEBACisvKiBPcHRpbWl6ZWQsIGlubGluZWQgc3RyaW5nIGZ1bmN0aW9ucy4gIEFSTSB2ZXJzaW9uLgorICAgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9TVFJJTkdfSAorIyBlcnJvciAiTmV2ZXIgdXNlIDxiaXRzL3N0cmluZy5oPiBkaXJlY3RseTsgaW5jbHVkZSA8c3RyaW5nLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKy8qIFdlIG11c3QgZGVmZWF0IHRoZSBnZW5lcmljIG9wdGltaXplZCB2ZXJzaW9ucyBvZiB0aGVzZSBmdW5jdGlvbnMgaW4KKyAgIDxiaXRzL3N0cmluZzIuaD4gc2luY2UgdGhleSBkb24ndCB3b3JrIG9uIHRoZSBBUk0uICBUaGlzIGlzIGJlY2F1c2UKKyAgIHRoZSBnYW1lcyB0aGV5IHBsYXkgd2l0aCB0aGUgX19TVFJJTkcyX0NPUFlfQVJSIyBzdHJ1Y3R1cmVzIGZhaWwKKyAgIHdoZW4gc3RydWN0cyBhcmUgYWx3YXlzIDMyLWJpdCBhbGlnbmVkLgorICAgWFhYIFNob3VsZCBwcm92aWRlIHN1aXRhYmx5IG9wdGltYWwgcmVwbGFjZW1lbnRzLiAgKi8KKyNkZWZpbmUgX0hBVkVfU1RSSU5HX0FSQ0hfc3RyY3B5IDEKKyNkZWZpbmUgX0hBVkVfU1RSSU5HX0FSQ0hfc3RwY3B5IDEKKyNkZWZpbmUgX0hBVkVfU1RSSU5HX0FSQ0hfbWVtcGNweSAxCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI5OGJlZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaApAQCAtMCwwICsxLDEzNTQgQEAKKy8qIE1hY2hpbmUtaW5kZXBlbmRhbnQgc3RyaW5nIGZ1bmN0aW9uIG9wdGltaXphdGlvbnMuCisgICBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMywgMjAwNCwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorICAgQ29udHJpYnV0ZWQgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTcuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9TVFJJTkdfSAorIyBlcnJvciAiTmV2ZXIgdXNlIDxiaXRzL3N0cmluZzIuaD4gZGlyZWN0bHk7IGluY2x1ZGUgPHN0cmluZy5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgX19OT19TVFJJTkdfSU5MSU5FUyAmJiAhZGVmaW5lZCBfX0JPVU5ERURfUE9JTlRFUlNfXworCisvKiBVbmxpa2UgdGhlIGRlZmluaXRpb25zIGluIHRoZSBoZWFkZXIgPGJpdHMvc3RyaW5nLmg+IHRoZQorICAgZGVmaW5pdGlvbnMgY29udGFpbmVkIGhlcmUgYXJlIG5vdCBvcHRpbWl6ZWQgZG93biB0byBhc3NlbWJsZXIKKyAgIGxldmVsLiAgVGhvc2Ugb3B0aW1pemF0aW9ucyBhcmUgbm90IGFsd2F5cyBhIGdvb2QgaWRlYSBzaW5jZSB0aGlzCisgICBtZWFucyB0aGUgY29kZSBzaXplIGluY3JlYXNlcyBhIGxvdC4gIEluc3RlYWQgdGhlIGRlZmluaXRpb25zIGhlcmUKKyAgIG9wdGltaXplIHNvbWUgZnVuY3Rpb25zIGluIGEgd2F5IHdoaWNoIGRvIG5vdCBkcmFtYXRpY2FsbHkKKyAgIGluY3JlYXNlIHRoZSBjb2RlIHNpemUgYW5kIHdoaWNoIGRvIG5vdCB1c2UgYXNzZW1ibGVyLiAgVGhlIG1haW4KKyAgIHRyaWNrIGlzIHRvIHVzZSBHQ0MncyBgX19idWlsdGluX2NvbnN0YW50X3AnIGZ1bmN0aW9uLgorCisgICBFdmVyeSBmdW5jdGlvbiBYWFggd2hpY2ggaGFzIGEgZGVmaW5lZCB2ZXJzaW9uIGluCisgICA8Yml0cy9zdHJpbmcuaD4gbXVzdCBiZSBhY2NvbXBhbmllZCBieSBhIHN5bWJvbCBfSEFWRV9TVFJJTkdfQVJDSF9YWFgKKyAgIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBnZXQgcmVkZWZpbml0aW9ucy4KKworICAgV2UgbXVzdCB1c2UgaGVyZSBtYWNyb3MgaW5zdGVhZCBvZiBpbmxpbmUgZnVuY3Rpb25zIHNpbmNlIHRoZQorICAgdHJpY2sgd29uJ3Qgd29yayB3aXRoIHRoZSBsYXR0ZXIuICAqLworCisjaWZuZGVmIF9fU1RSSU5HX0lOTElORQorIyBpZmRlZiBfX2NwbHVzcGx1cworIyAgZGVmaW5lIF9fU1RSSU5HX0lOTElORSBpbmxpbmUKKyMgZWxzZQorIyAgZGVmaW5lIF9fU1RSSU5HX0lOTElORSBfX2V4dGVybl9pbmxpbmUKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgX1NUUklOR19BUkNIX3VuYWxpZ25lZAorLyogSWYgd2UgY2FuIGRvIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzZXMgd2UgbXVzdCBrbm93IHRoZSBlbmRpYW5lc3MuICAqLworIyBpbmNsdWRlIDxlbmRpYW4uaD4KKyMgaW5jbHVkZSA8Yml0cy90eXBlcy5oPgorCisjIGlmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKyMgIGRlZmluZSBfX1NUUklORzJfU01BTExfR0VUMTYoc3JjLCBpZHgpIFwKKyAgICAgKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHNyYykpW2lkeCArIDFdIDw8IDgJICAgICAgXAorICAgICAgfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChzcmMpKVtpZHhdKQorIyAgZGVmaW5lIF9fU1RSSU5HMl9TTUFMTF9HRVQzMihzcmMsIGlkeCkgXAorICAgICAoKCgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChzcmMpKVtpZHggKyAzXSA8PCA4ICAgICAgXAorCXwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbaWR4ICsgMl0pIDw8IDggICBcCisgICAgICAgfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChzcmMpKVtpZHggKyAxXSkgPDwgOCAgICBcCisgICAgICB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHNyYykpW2lkeF0pCisjIGVsc2UKKyMgIGRlZmluZSBfX1NUUklORzJfU01BTExfR0VUMTYoc3JjLCBpZHgpIFwKKyAgICAgKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHNyYykpW2lkeF0gPDwgOAkgICAgICBcCisgICAgICB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHNyYykpW2lkeCArIDFdKQorIyAgZGVmaW5lIF9fU1RSSU5HMl9TTUFMTF9HRVQzMihzcmMsIGlkeCkgXAorICAgICAoKCgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChzcmMpKVtpZHhdIDw8IDgJICAgICAgXAorCXwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbaWR4ICsgMV0pIDw8IDggICBcCisgICAgICAgfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChzcmMpKVtpZHggKyAyXSkgPDwgOCAgICBcCisgICAgICB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHNyYykpW2lkeCArIDNdKQorIyBlbmRpZgorI2Vsc2UKKy8qIFRoZXNlIGFyZSBhIGZldyB0eXBlcyB3ZSBuZWVkIGZvciB0aGUgb3B0aW1pemF0aW9ucyBpZiB3ZSBjYW5ub3QKKyAgIHVzZSB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzc2VzLiAgKi8KKyMgZGVmaW5lIF9fU1RSSU5HMl9DT1BZX1RZUEUoTikgXAorICB0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGNoYXIgX19hcnJbTl07IH0JCQkJICAgICAgXAorICAgIF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgX19TVFJJTkcyX0NPUFlfQVJSIyNOCitfX1NUUklORzJfQ09QWV9UWVBFICgyKTsKK19fU1RSSU5HMl9DT1BZX1RZUEUgKDMpOworX19TVFJJTkcyX0NPUFlfVFlQRSAoNCk7CitfX1NUUklORzJfQ09QWV9UWVBFICg1KTsKK19fU1RSSU5HMl9DT1BZX1RZUEUgKDYpOworX19TVFJJTkcyX0NPUFlfVFlQRSAoNyk7CitfX1NUUklORzJfQ09QWV9UWVBFICg4KTsKKyMgdW5kZWYgX19TVFJJTkcyX0NPUFlfVFlQRQorI2VuZGlmCisKKy8qIERlcmVmZXJlbmNpbmcgYSBwb2ludGVyIGFyZyB0byBydW4gc2l6ZW9mIG9uIGl0IGZhaWxzIGZvciB0aGUgdm9pZAorICAgcG9pbnRlciBjYXNlLCBzbyB3ZSB1c2UgdGhpcyBpbnN0ZWFkLgorICAgTm90ZSB0aGF0IF9feCBpcyBldmFsdWF0ZWQgdHdpY2UuICovCisjZGVmaW5lIF9fc3RyaW5nMl8xYnB0cl9wKF9feCkgXAorICAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoX194KSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShfX3gpID09IDEpCisKKy8qIFNldCBOIGJ5dGVzIG9mIFMgdG8gQy4gICovCisjaWYgIWRlZmluZWQgX0hBVkVfU1RSSU5HX0FSQ0hfbWVtc2V0CisjIGlmICFfX0dOVUNfUFJFUkVRICgzLCAwKQorIyAgaWYgX1NUUklOR19BUkNIX3VuYWxpZ25lZAorIyAgIGRlZmluZSBtZW1zZXQocywgYywgbikgXAorICAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKG4pICYmIChuKSA8PSAxNgkJCSAgICAgIFwKKwkJICA/ICgobikgPT0gMQkJCQkJCSAgICAgIFwKKwkJICAgICA/IF9fbWVtc2V0XzEgKHMsIGMpCQkJCSAgICAgIFwKKwkJICAgICA6IF9fbWVtc2V0X2djIChzLCBjLCBuKSkJCQkJICAgICAgXAorCQkgIDogKF9fYnVpbHRpbl9jb25zdGFudF9wIChjKSAmJiAoYykgPT0gJ1wwJwkJICAgICAgXAorCQkgICAgID8gKHsgdm9pZCAqX19zID0gKHMpOyBfX2J6ZXJvIChfX3MsIG4pOyBfX3M7IH0pCSAgICAgIFwKKwkJICAgICA6IG1lbXNldCAocywgYywgbikpKSkKKworIyAgIGRlZmluZSBfX21lbXNldF8xKHMsIGMpICh7IHZvaWQgKl9fcyA9IChzKTsJCQkJICAgICAgXAorCQkJICAgICooKF9fdWludDhfdCAqKSBfX3MpID0gKF9fdWludDhfdCkgYzsgX19zOyB9KQorCisjICAgZGVmaW5lIF9fbWVtc2V0X2djKHMsIGMsIG4pIFwKKyAgKHsgdm9pZCAqX19zID0gKHMpOwkJCQkJCQkgICAgICBcCisgICAgIHVuaW9uIHsJCQkJCQkJCSAgICAgIFwKKyAgICAgICB1bnNpZ25lZCBpbnQgX191aTsJCQkJCQkgICAgICBcCisgICAgICAgdW5zaWduZWQgc2hvcnQgaW50IF9fdXNpOwkJCQkJICAgICAgXAorICAgICAgIHVuc2lnbmVkIGNoYXIgX191YzsJCQkJCQkgICAgICBcCisgICAgIH0gKl9fdSA9IF9fczsJCQkJCQkJICAgICAgXAorICAgICBfX3VpbnQ4X3QgX19jID0gKF9fdWludDhfdCkgKGMpOwkJCQkJICAgICAgXAorCQkJCQkJCQkJICAgICAgXAorICAgICAvKiBUaGlzIGBzd2l0Y2gnIHN0YXRlbWVudCB3aWxsIGJlIHJlbW92ZWQgYXQgY29tcGlsZS10aW1lLiAgKi8JICAgICAgXAorICAgICBzd2l0Y2ggKCh1bnNpZ25lZCBpbnQpIChuKSkJCQkJCSAgICAgIFwKKyAgICAgICB7CQkJCQkJCQkgICAgICBcCisgICAgICAgY2FzZSAxNToJCQkJCQkJCSAgICAgIFwKKwkgX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsJCQkJCSAgICAgIFwKKwkgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CQkJICAgICAgXAorICAgICAgIGNhc2UgMTE6CQkJCQkJCQkgICAgICBcCisJIF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7CQkJCQkgICAgICBcCisJIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOwkJCSAgICAgIFwKKyAgICAgICBjYXNlIDc6CQkJCQkJCQkgICAgICBcCisJIF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7CQkJCQkgICAgICBcCisJIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOwkJCSAgICAgIFwKKyAgICAgICBjYXNlIDM6CQkJCQkJCQkgICAgICBcCisJIF9fdS0+X191c2kgPSAodW5zaWduZWQgc2hvcnQgaW50KSBfX2MgKiAweDAxMDE7CQkgICAgICBcCisJIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDIpOwkJCSAgICAgIFwKKwkgX191LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsJCQkJICAgICAgXAorCSBicmVhazsJCQkJCQkJCSAgICAgIFwKKwkJCQkJCQkJCSAgICAgIFwKKyAgICAgICBjYXNlIDE0OgkJCQkJCQkJICAgICAgXAorCSBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOwkJCQkJICAgICAgXAorCSBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsJCQkgICAgICBcCisgICAgICAgY2FzZSAxMDoJCQkJCQkJCSAgICAgIFwKKwkgX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsJCQkJCSAgICAgIFwKKwkgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CQkJICAgICAgXAorICAgICAgIGNhc2UgNjoJCQkJCQkJCSAgICAgIFwKKwkgX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsJCQkJCSAgICAgIFwKKwkgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CQkJICAgICAgXAorICAgICAgIGNhc2UgMjoJCQkJCQkJCSAgICAgIFwKKwkgX191LT5fX3VzaSA9ICh1bnNpZ25lZCBzaG9ydCBpbnQpIF9fYyAqIDB4MDEwMTsJCSAgICAgIFwKKwkgYnJlYWs7CQkJCQkJCQkgICAgICBcCisJCQkJCQkJCQkgICAgICBcCisgICAgICAgY2FzZSAxMzoJCQkJCQkJCSAgICAgIFwKKwkgX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsJCQkJCSAgICAgIFwKKwkgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CQkJICAgICAgXAorICAgICAgIGNhc2UgOToJCQkJCQkJCSAgICAgIFwKKwkgX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsJCQkJCSAgICAgIFwKKwkgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CQkJICAgICAgXAorICAgICAgIGNhc2UgNToJCQkJCQkJCSAgICAgIFwKKwkgX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsJCQkJCSAgICAgIFwKKwkgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CQkJICAgICAgXAorICAgICAgIGNhc2UgMToJCQkJCQkJCSAgICAgIFwKKwkgX191LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsJCQkJICAgICAgXAorCSBicmVhazsJCQkJCQkJCSAgICAgIFwKKwkJCQkJCQkJCSAgICAgIFwKKyAgICAgICBjYXNlIDE2OgkJCQkJCQkJICAgICAgXAorCSBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOwkJCQkJICAgICAgXAorCSBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsJCQkgICAgICBcCisgICAgICAgY2FzZSAxMjoJCQkJCQkJCSAgICAgIFwKKwkgX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsJCQkJCSAgICAgIFwKKwkgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CQkJICAgICAgXAorICAgICAgIGNhc2UgODoJCQkJCQkJCSAgICAgIFwKKwkgX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsJCQkJCSAgICAgIFwKKwkgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CQkJICAgICAgXAorICAgICAgIGNhc2UgNDoJCQkJCQkJCSAgICAgIFwKKwkgX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsJCQkJCSAgICAgIFwKKyAgICAgICBjYXNlIDA6CQkJCQkJCQkgICAgICBcCisJIGJyZWFrOwkJCQkJCQkJICAgICAgXAorICAgICAgIH0JCQkJCQkJCSAgICAgIFwKKwkJCQkJCQkJCSAgICAgIFwKKyAgICAgX19zOyB9KQorIyAgZWxzZQorIyAgIGRlZmluZSBtZW1zZXQocywgYywgbikgXAorICAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKGMpICYmIChjKSA9PSAnXDAnCQkgICAgICBcCisJCSAgPyAoeyB2b2lkICpfX3MgPSAocyk7IF9fYnplcm8gKF9fcywgbik7IF9fczsgfSkJICAgICAgXAorCQkgIDogbWVtc2V0IChzLCBjLCBuKSkpCisjICBlbmRpZgorIyBlbmRpZgorCisvKiBHQ0MgPCAzLjAgb3B0aW1pemVzIG1lbXNldChzLCAwLCBuKSBidXQgbm90IGJ6ZXJvKHMsIG4pLgorICAgVGhlIG9wdGltaXphdGlvbiBpcyBicm9rZW4gYmVmb3JlIEVHQ1MgMS4xLgorICAgR0NDIDMuMCsgaGFzIF9fYnVpbHRpbl9iemVybyBhcyB3ZWxsLCBidXQgYXQgbGVhc3QgdGlsbCBHQ0MgMy40CisgICBpZiBpdCBkZWNpZGVzIHRvIGNhbGwgdGhlIGxpYnJhcnkgZnVuY3Rpb24sIGl0IGNhbGxzIG1lbXNldAorICAgYW5kIG5vdCBiemVyby4gICovCisjIGlmIF9fR05VQ19QUkVSRVEgKDIsIDkxKQorIyAgZGVmaW5lIF9fYnplcm8ocywgbikgX19idWlsdGluX21lbXNldCAocywgJ1wwJywgbikKKyMgZW5kaWYKKworI2VuZGlmCisKKworLyogQ29weSBOIGJ5dGVzIGZyb20gU1JDIHRvIERFU1QsIHJldHVybmluZyBwb2ludGVyIHRvIGJ5dGUgZm9sbG93aW5nIHRoZQorICAgbGFzdCBjb3BpZWQuICAqLworI2lmZGVmIF9fVVNFX0dOVQorIyBpZiAhZGVmaW5lZCBfSEFWRV9TVFJJTkdfQVJDSF9tZW1wY3B5IHx8IGRlZmluZWQgX0ZPUkNFX0lOTElORVMKKyMgIGlmbmRlZiBfSEFWRV9TVFJJTkdfQVJDSF9tZW1wY3B5CisjICAgaWYgX19HTlVDX1BSRVJFUSAoMywgNCkKKyMgICAgZGVmaW5lIF9fbWVtcGNweShkZXN0LCBzcmMsIG4pIF9fYnVpbHRpbl9tZW1wY3B5IChkZXN0LCBzcmMsIG4pCisjICAgZWxpZiBfX0dOVUNfUFJFUkVRICgzLCAwKQorIyAgICBkZWZpbmUgX19tZW1wY3B5KGRlc3QsIHNyYywgbikgXAorICAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKHNyYykgJiYgX19idWlsdGluX2NvbnN0YW50X3AgKG4pICAgICAgXAorCQkgICYmIF9fc3RyaW5nMl8xYnB0cl9wIChzcmMpICYmIG4gPD0gOAkJCSAgICAgIFwKKwkJICA/IF9fYnVpbHRpbl9tZW1jcHkgKGRlc3QsIHNyYywgbikgKyAobikJCSAgICAgIFwKKwkJICA6IF9fbWVtcGNweSAoZGVzdCwgc3JjLCBuKSkpCisjICAgZWxzZQorIyAgICBkZWZpbmUgX19tZW1wY3B5KGRlc3QsIHNyYywgbikgXAorICAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKHNyYykgJiYgX19idWlsdGluX2NvbnN0YW50X3AgKG4pICAgICAgXAorCQkgICYmIF9fc3RyaW5nMl8xYnB0cl9wIChzcmMpICYmIG4gPD0gOAkJCSAgICAgIFwKKwkJICA/IF9fbWVtcGNweV9zbWFsbCAoZGVzdCwgX19tZW1wY3B5X2FyZ3MgKHNyYyksIG4pCSAgICAgIFwKKwkJICA6IF9fbWVtcGNweSAoZGVzdCwgc3JjLCBuKSkpCisjICAgZW5kaWYKKy8qIEluIGdsaWJjIHdlIHVzZSB0aGlzIGZ1bmN0aW9uIGZyZXF1ZW50bHkgYnV0IGZvciBuYW1lc3BhY2UgcmVhc29ucworICAgd2UgaGF2ZSB0byB1c2UgdGhlIG5hbWUgYF9fbWVtcGNweScuICAqLworIyAgIGRlZmluZSBtZW1wY3B5KGRlc3QsIHNyYywgbikgX19tZW1wY3B5IChkZXN0LCBzcmMsIG4pCisjICBlbmRpZgorCisjICBpZiAhX19HTlVDX1BSRVJFUSAoMywgMCkgfHwgZGVmaW5lZCBfRk9SQ0VfSU5MSU5FUworIyAgIGlmIF9TVFJJTkdfQVJDSF91bmFsaWduZWQKKyMgICAgaWZuZGVmIF9GT1JDRV9JTkxJTkVTCisjICAgICBkZWZpbmUgX19tZW1wY3B5X2FyZ3Moc3JjKSBcCisgICAgICgoX19jb25zdCBjaGFyICopIChzcmMpKVswXSwgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzJdLAkJICAgICAgXAorICAgICAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbNF0sICgoX19jb25zdCBjaGFyICopIChzcmMpKVs2XSwJCSAgICAgIFwKKyAgICAgX19leHRlbnNpb25fXyBfX1NUUklORzJfU01BTExfR0VUMTYgKHNyYywgMCksCQkJICAgICAgXAorICAgICBfX2V4dGVuc2lvbl9fIF9fU1RSSU5HMl9TTUFMTF9HRVQxNiAoc3JjLCA0KSwJCQkgICAgICBcCisgICAgIF9fZXh0ZW5zaW9uX18gX19TVFJJTkcyX1NNQUxMX0dFVDMyIChzcmMsIDApLAkJCSAgICAgIFwKKyAgICAgX19leHRlbnNpb25fXyBfX1NUUklORzJfU01BTExfR0VUMzIgKHNyYywgNCkKKyMgICAgZW5kaWYKK19fU1RSSU5HX0lOTElORSB2b2lkICpfX21lbXBjcHlfc21hbGwgKHZvaWQgKiwgY2hhciwgY2hhciwgY2hhciwgY2hhciwKKwkJCQkgICAgICAgX191aW50MTZfdCwgX191aW50MTZfdCwgX191aW50MzJfdCwKKwkJCQkgICAgICAgX191aW50MzJfdCwgc2l6ZV90KTsKK19fU1RSSU5HX0lOTElORSB2b2lkICoKK19fbWVtcGNweV9zbWFsbCAodm9pZCAqX19kZXN0MSwKKwkJIGNoYXIgX19zcmMwXzEsIGNoYXIgX19zcmMyXzEsIGNoYXIgX19zcmM0XzEsIGNoYXIgX19zcmM2XzEsCisJCSBfX3VpbnQxNl90IF9fc3JjMF8yLCBfX3VpbnQxNl90IF9fc3JjNF8yLAorCQkgX191aW50MzJfdCBfX3NyYzBfNCwgX191aW50MzJfdCBfX3NyYzRfNCwKKwkJIHNpemVfdCBfX3NyY2xlbikKK3sKKyAgdW5pb24geworICAgIF9fdWludDMyX3QgX191aTsKKyAgICBfX3VpbnQxNl90IF9fdXNpOworICAgIHVuc2lnbmVkIGNoYXIgX191YzsKKyAgICB1bnNpZ25lZCBjaGFyIF9fYzsKKyAgfSAqX191ID0gX19kZXN0MTsKKyAgc3dpdGNoICgodW5zaWduZWQgaW50KSBfX3NyY2xlbikKKyAgICB7CisgICAgY2FzZSAxOgorICAgICAgX191LT5fX2MgPSBfX3NyYzBfMTsKKyAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDEpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgX191LT5fX3VzaSA9IF9fc3JjMF8yOworICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgMik7CisgICAgICBicmVhazsKKyAgICBjYXNlIDM6CisgICAgICBfX3UtPl9fdXNpID0gX19zcmMwXzI7CisgICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAyKTsKKyAgICAgIF9fdS0+X19jID0gX19zcmMyXzE7CisgICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAxKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgNDoKKyAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OworICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIDU6CisgICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKKyAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOworICAgICAgX191LT5fX2MgPSBfX3NyYzRfMTsKKyAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDEpOworICAgICAgYnJlYWs7CisgICAgY2FzZSA2OgorICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CisgICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsKKyAgICAgIF9fdS0+X191c2kgPSBfX3NyYzRfMjsKKyAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSA3OgorICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CisgICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsKKyAgICAgIF9fdS0+X191c2kgPSBfX3NyYzRfMjsKKyAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDIpOworICAgICAgX191LT5fX2MgPSBfX3NyYzZfMTsKKyAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDEpOworICAgICAgYnJlYWs7CisgICAgY2FzZSA4OgorICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CisgICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsKKyAgICAgIF9fdS0+X191aSA9IF9fc3JjNF80OworICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CisgICAgICBicmVhazsKKyAgICB9CisgIHJldHVybiAodm9pZCAqKSBfX3U7Cit9CisjICAgZWxzZQorIyAgICBpZm5kZWYgX0ZPUkNFX0lOTElORVMKKyMgICAgIGRlZmluZSBfX21lbXBjcHlfYXJncyhzcmMpIFwKKyAgICAgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzBdLAkJCQkJICAgICAgXAorICAgICBfX2V4dGVuc2lvbl9fICgoX19TVFJJTkcyX0NPUFlfQVJSMikJCQkJICAgICAgXAorICAgICAgeyB7ICgoX19jb25zdCBjaGFyICopIChzcmMpKVswXSwgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzFdIH0gfSksICAgICAgXAorICAgICBfX2V4dGVuc2lvbl9fICgoX19TVFJJTkcyX0NPUFlfQVJSMykJCQkJICAgICAgXAorICAgICAgeyB7ICgoX19jb25zdCBjaGFyICopIChzcmMpKVswXSwgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzFdLAkgICAgICBcCisJICAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbMl0gfSB9KSwJCQkJICAgICAgXAorICAgICBfX2V4dGVuc2lvbl9fICgoX19TVFJJTkcyX0NPUFlfQVJSNCkJCQkJICAgICAgXAorICAgICAgeyB7ICgoX19jb25zdCBjaGFyICopIChzcmMpKVswXSwgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzFdLAkgICAgICBcCisJICAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbMl0sICgoX19jb25zdCBjaGFyICopIChzcmMpKVszXSB9IH0pLCAgICAgIFwKKyAgICAgX19leHRlbnNpb25fXyAoKF9fU1RSSU5HMl9DT1BZX0FSUjUpCQkJCSAgICAgIFwKKyAgICAgIHsgeyAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbMF0sICgoX19jb25zdCBjaGFyICopIChzcmMpKVsxXSwJICAgICAgXAorCSAgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzJdLCAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbM10sCSAgICAgIFwKKwkgICgoX19jb25zdCBjaGFyICopIChzcmMpKVs0XSB9IH0pLAkJCQkgICAgICBcCisgICAgIF9fZXh0ZW5zaW9uX18gKChfX1NUUklORzJfQ09QWV9BUlI2KQkJCQkgICAgICBcCisgICAgICB7IHsgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzBdLCAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbMV0sCSAgICAgIFwKKwkgICgoX19jb25zdCBjaGFyICopIChzcmMpKVsyXSwgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzNdLAkgICAgICBcCisJICAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbNF0sICgoX19jb25zdCBjaGFyICopIChzcmMpKVs1XSB9IH0pLCAgICAgIFwKKyAgICAgX19leHRlbnNpb25fXyAoKF9fU1RSSU5HMl9DT1BZX0FSUjcpCQkJCSAgICAgIFwKKyAgICAgIHsgeyAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbMF0sICgoX19jb25zdCBjaGFyICopIChzcmMpKVsxXSwJICAgICAgXAorCSAgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzJdLCAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbM10sCSAgICAgIFwKKwkgICgoX19jb25zdCBjaGFyICopIChzcmMpKVs0XSwgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzVdLAkgICAgICBcCisJICAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbNl0gfSB9KSwJCQkJICAgICAgXAorICAgICBfX2V4dGVuc2lvbl9fICgoX19TVFJJTkcyX0NPUFlfQVJSOCkJCQkJICAgICAgXAorICAgICAgeyB7ICgoX19jb25zdCBjaGFyICopIChzcmMpKVswXSwgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzFdLAkgICAgICBcCisJICAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbMl0sICgoX19jb25zdCBjaGFyICopIChzcmMpKVszXSwJICAgICAgXAorCSAgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzRdLCAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbNV0sCSAgICAgIFwKKwkgICgoX19jb25zdCBjaGFyICopIChzcmMpKVs2XSwgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzddIH0gfSkKKyMgICAgZW5kaWYKK19fU1RSSU5HX0lOTElORSB2b2lkICpfX21lbXBjcHlfc21hbGwgKHZvaWQgKiwgY2hhciwgX19TVFJJTkcyX0NPUFlfQVJSMiwKKwkJCQkgICAgICAgX19TVFJJTkcyX0NPUFlfQVJSMywKKwkJCQkgICAgICAgX19TVFJJTkcyX0NPUFlfQVJSNCwKKwkJCQkgICAgICAgX19TVFJJTkcyX0NPUFlfQVJSNSwKKwkJCQkgICAgICAgX19TVFJJTkcyX0NPUFlfQVJSNiwKKwkJCQkgICAgICAgX19TVFJJTkcyX0NPUFlfQVJSNywKKwkJCQkgICAgICAgX19TVFJJTkcyX0NPUFlfQVJSOCwgc2l6ZV90KTsKK19fU1RSSU5HX0lOTElORSB2b2lkICoKK19fbWVtcGNweV9zbWFsbCAodm9pZCAqX19kZXN0LCBjaGFyIF9fc3JjMSwKKwkJIF9fU1RSSU5HMl9DT1BZX0FSUjIgX19zcmMyLCBfX1NUUklORzJfQ09QWV9BUlIzIF9fc3JjMywKKwkJIF9fU1RSSU5HMl9DT1BZX0FSUjQgX19zcmM0LCBfX1NUUklORzJfQ09QWV9BUlI1IF9fc3JjNSwKKwkJIF9fU1RSSU5HMl9DT1BZX0FSUjYgX19zcmM2LCBfX1NUUklORzJfQ09QWV9BUlI3IF9fc3JjNywKKwkJIF9fU1RSSU5HMl9DT1BZX0FSUjggX19zcmM4LCBzaXplX3QgX19zcmNsZW4pCit7CisgIHVuaW9uIHsKKyAgICBjaGFyIF9fYzsKKyAgICBfX1NUUklORzJfQ09QWV9BUlIyIF9fc2NhMjsKKyAgICBfX1NUUklORzJfQ09QWV9BUlIzIF9fc2NhMzsKKyAgICBfX1NUUklORzJfQ09QWV9BUlI0IF9fc2NhNDsKKyAgICBfX1NUUklORzJfQ09QWV9BUlI1IF9fc2NhNTsKKyAgICBfX1NUUklORzJfQ09QWV9BUlI2IF9fc2NhNjsKKyAgICBfX1NUUklORzJfQ09QWV9BUlI3IF9fc2NhNzsKKyAgICBfX1NUUklORzJfQ09QWV9BUlI4IF9fc2NhODsKKyAgfSAqX191ID0gX19kZXN0OworICBzd2l0Y2ggKCh1bnNpZ25lZCBpbnQpIF9fc3JjbGVuKQorICAgIHsKKyAgICBjYXNlIDE6CisgICAgICBfX3UtPl9fYyA9IF9fc3JjMTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgIF9fZXh0ZW5zaW9uX18gX191LT5fX3NjYTIgPSBfX3NyYzI7CisgICAgICBicmVhazsKKyAgICBjYXNlIDM6CisgICAgICBfX2V4dGVuc2lvbl9fIF9fdS0+X19zY2EzID0gX19zcmMzOworICAgICAgYnJlYWs7CisgICAgY2FzZSA0OgorICAgICAgX19leHRlbnNpb25fXyBfX3UtPl9fc2NhNCA9IF9fc3JjNDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgNToKKyAgICAgIF9fZXh0ZW5zaW9uX18gX191LT5fX3NjYTUgPSBfX3NyYzU7CisgICAgICBicmVhazsKKyAgICBjYXNlIDY6CisgICAgICBfX2V4dGVuc2lvbl9fIF9fdS0+X19zY2E2ID0gX19zcmM2OworICAgICAgYnJlYWs7CisgICAgY2FzZSA3OgorICAgICAgX19leHRlbnNpb25fXyBfX3UtPl9fc2NhNyA9IF9fc3JjNzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgODoKKyAgICAgIF9fZXh0ZW5zaW9uX18gX191LT5fX3NjYTggPSBfX3NyYzg7CisgICAgICBicmVhazsKKyAgICB9CisgIHJldHVybiBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyBfX3NyY2xlbik7Cit9CisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBSZXR1cm4gcG9pbnRlciB0byBDIGluIFMuICAqLworI2lmbmRlZiBfSEFWRV9TVFJJTkdfQVJDSF9zdHJjaHIKK2V4dGVybiB2b2lkICpfX3Jhd21lbWNociAoY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jKTsKKyMgaWYgX19HTlVDX1BSRVJFUSAoMywgMikKKyMgIGRlZmluZSBzdHJjaHIocywgYykgXAorICAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKGMpICYmICFfX2J1aWx0aW5fY29uc3RhbnRfcCAocykJICAgICAgXAorCQkgICYmIChjKSA9PSAnXDAnCQkJCQkgICAgICBcCisJCSAgPyAoY2hhciAqKSBfX3Jhd21lbWNociAocywgYykJCQkJICAgICAgXAorCQkgIDogX19idWlsdGluX3N0cmNociAocywgYykpKQorIyBlbHNlCisjICBkZWZpbmUgc3RyY2hyKHMsIGMpIFwKKyAgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChjKSAmJiAoYykgPT0gJ1wwJwkJICAgICAgXAorCQkgID8gKGNoYXIgKikgX19yYXdtZW1jaHIgKHMsIGMpCQkJCSAgICAgIFwKKwkJICA6IHN0cmNociAocywgYykpKQorIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29weSBTUkMgdG8gREVTVC4gICovCisjaWYgKCFkZWZpbmVkIF9IQVZFX1NUUklOR19BUkNIX3N0cmNweSAmJiAhX19HTlVDX1BSRVJFUSAoMywgMCkpIFwKKyAgICB8fCBkZWZpbmVkIF9GT1JDRV9JTkxJTkVTCisjIGlmICFkZWZpbmVkIF9IQVZFX1NUUklOR19BUkNIX3N0cmNweSAmJiAhX19HTlVDX1BSRVJFUSAoMywgMCkKKyMgIGRlZmluZSBzdHJjcHkoZGVzdCwgc3JjKSBcCisgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoc3JjKQkJCQkgICAgICBcCisJCSAgPyAoX19zdHJpbmcyXzFicHRyX3AgKHNyYykgJiYgc3RybGVuIChzcmMpICsgMSA8PSA4CSAgICAgIFwKKwkJICAgICA/IF9fc3RyY3B5X3NtYWxsIChkZXN0LCBfX3N0cmNweV9hcmdzIChzcmMpLAkgICAgICBcCisJCQkJICAgICAgIHN0cmxlbiAoc3JjKSArIDEpCQkgICAgICBcCisJCSAgICAgOiAoY2hhciAqKSBtZW1jcHkgKGRlc3QsIHNyYywgc3RybGVuIChzcmMpICsgMSkpCSAgICAgIFwKKwkJICA6IHN0cmNweSAoZGVzdCwgc3JjKSkpCisjIGVuZGlmCisKKyMgaWYgX1NUUklOR19BUkNIX3VuYWxpZ25lZAorIyAgaWZuZGVmIF9GT1JDRV9JTkxJTkVTCisjICAgZGVmaW5lIF9fc3RyY3B5X2FyZ3Moc3JjKSBcCisgICAgIF9fZXh0ZW5zaW9uX18gX19TVFJJTkcyX1NNQUxMX0dFVDE2IChzcmMsIDApLAkJCSAgICAgIFwKKyAgICAgX19leHRlbnNpb25fXyBfX1NUUklORzJfU01BTExfR0VUMTYgKHNyYywgNCksCQkJICAgICAgXAorICAgICBfX2V4dGVuc2lvbl9fIF9fU1RSSU5HMl9TTUFMTF9HRVQzMiAoc3JjLCAwKSwJCQkgICAgICBcCisgICAgIF9fZXh0ZW5zaW9uX18gX19TVFJJTkcyX1NNQUxMX0dFVDMyIChzcmMsIDQpCisjICBlbmRpZgorX19TVFJJTkdfSU5MSU5FIGNoYXIgKl9fc3RyY3B5X3NtYWxsIChjaGFyICosIF9fdWludDE2X3QsIF9fdWludDE2X3QsCisJCQkJICAgICAgX191aW50MzJfdCwgX191aW50MzJfdCwgc2l6ZV90KTsKK19fU1RSSU5HX0lOTElORSBjaGFyICoKK19fc3RyY3B5X3NtYWxsIChjaGFyICpfX2Rlc3QsCisJCV9fdWludDE2X3QgX19zcmMwXzIsIF9fdWludDE2X3QgX19zcmM0XzIsCisJCV9fdWludDMyX3QgX19zcmMwXzQsIF9fdWludDMyX3QgX19zcmM0XzQsCisJCXNpemVfdCBfX3NyY2xlbikKK3sKKyAgdW5pb24geworICAgIF9fdWludDMyX3QgX191aTsKKyAgICBfX3VpbnQxNl90IF9fdXNpOworICAgIHVuc2lnbmVkIGNoYXIgX191YzsKKyAgfSAqX191ID0gKHZvaWQgKikgX19kZXN0OworICBzd2l0Y2ggKCh1bnNpZ25lZCBpbnQpIF9fc3JjbGVuKQorICAgIHsKKyAgICBjYXNlIDE6CisgICAgICBfX3UtPl9fdWMgPSAnXDAnOworICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgX191LT5fX3VzaSA9IF9fc3JjMF8yOworICAgICAgYnJlYWs7CisgICAgY2FzZSAzOgorICAgICAgX191LT5fX3VzaSA9IF9fc3JjMF8yOworICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgMik7CisgICAgICBfX3UtPl9fdWMgPSAnXDAnOworICAgICAgYnJlYWs7CisgICAgY2FzZSA0OgorICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CisgICAgICBicmVhazsKKyAgICBjYXNlIDU6CisgICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKKyAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOworICAgICAgX191LT5fX3VjID0gJ1wwJzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgNjoKKyAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OworICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CisgICAgICBfX3UtPl9fdXNpID0gX19zcmM0XzI7CisgICAgICBicmVhazsKKyAgICBjYXNlIDc6CisgICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKKyAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOworICAgICAgX191LT5fX3VzaSA9IF9fc3JjNF8yOworICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgMik7CisgICAgICBfX3UtPl9fdWMgPSAnXDAnOworICAgICAgYnJlYWs7CisgICAgY2FzZSA4OgorICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CisgICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsKKyAgICAgIF9fdS0+X191aSA9IF9fc3JjNF80OworICAgICAgYnJlYWs7CisgICAgfQorICByZXR1cm4gX19kZXN0OworfQorIyBlbHNlCisjICBpZm5kZWYgX0ZPUkNFX0lOTElORVMKKyMgICBkZWZpbmUgX19zdHJjcHlfYXJncyhzcmMpIFwKKyAgICAgX19leHRlbnNpb25fXyAoKF9fU1RSSU5HMl9DT1BZX0FSUjIpCQkJCSAgICAgIFwKKyAgICAgIHsgeyAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbMF0sICdcMCcgfSB9KSwJCQkgICAgICBcCisgICAgIF9fZXh0ZW5zaW9uX18gKChfX1NUUklORzJfQ09QWV9BUlIzKQkJCQkgICAgICBcCisgICAgICB7IHsgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzBdLCAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbMV0sCSAgICAgIFwKKwkgICdcMCcgfSB9KSwJCQkJCQkJICAgICAgXAorICAgICBfX2V4dGVuc2lvbl9fICgoX19TVFJJTkcyX0NPUFlfQVJSNCkJCQkJICAgICAgXAorICAgICAgeyB7ICgoX19jb25zdCBjaGFyICopIChzcmMpKVswXSwgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzFdLAkgICAgICBcCisJICAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbMl0sICdcMCcgfSB9KSwJCQkgICAgICBcCisgICAgIF9fZXh0ZW5zaW9uX18gKChfX1NUUklORzJfQ09QWV9BUlI1KQkJCQkgICAgICBcCisgICAgICB7IHsgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzBdLCAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbMV0sCSAgICAgIFwKKwkgICgoX19jb25zdCBjaGFyICopIChzcmMpKVsyXSwgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzNdLAkgICAgICBcCisJICAnXDAnIH0gfSksCQkJCQkJCSAgICAgIFwKKyAgICAgX19leHRlbnNpb25fXyAoKF9fU1RSSU5HMl9DT1BZX0FSUjYpCQkJCSAgICAgIFwKKyAgICAgIHsgeyAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbMF0sICgoX19jb25zdCBjaGFyICopIChzcmMpKVsxXSwJICAgICAgXAorCSAgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzJdLCAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbM10sCSAgICAgIFwKKwkgICgoX19jb25zdCBjaGFyICopIChzcmMpKVs0XSwgJ1wwJyB9IH0pLAkJCSAgICAgIFwKKyAgICAgX19leHRlbnNpb25fXyAoKF9fU1RSSU5HMl9DT1BZX0FSUjcpCQkJCSAgICAgIFwKKyAgICAgIHsgeyAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbMF0sICgoX19jb25zdCBjaGFyICopIChzcmMpKVsxXSwJICAgICAgXAorCSAgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzJdLCAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbM10sCSAgICAgIFwKKwkgICgoX19jb25zdCBjaGFyICopIChzcmMpKVs0XSwgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzVdLAkgICAgICBcCisJICAnXDAnIH0gfSksCQkJCQkJCSAgICAgIFwKKyAgICAgX19leHRlbnNpb25fXyAoKF9fU1RSSU5HMl9DT1BZX0FSUjgpCQkJCSAgICAgIFwKKyAgICAgIHsgeyAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbMF0sICgoX19jb25zdCBjaGFyICopIChzcmMpKVsxXSwJICAgICAgXAorCSAgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzJdLCAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbM10sCSAgICAgIFwKKwkgICgoX19jb25zdCBjaGFyICopIChzcmMpKVs0XSwgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzVdLAkgICAgICBcCisJICAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbNl0sICdcMCcgfSB9KQorIyAgZW5kaWYKK19fU1RSSU5HX0lOTElORSBjaGFyICpfX3N0cmNweV9zbWFsbCAoY2hhciAqLCBfX1NUUklORzJfQ09QWV9BUlIyLAorCQkJCSAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjMsCisJCQkJICAgICAgX19TVFJJTkcyX0NPUFlfQVJSNCwKKwkJCQkgICAgICBfX1NUUklORzJfQ09QWV9BUlI1LAorCQkJCSAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjYsCisJCQkJICAgICAgX19TVFJJTkcyX0NPUFlfQVJSNywKKwkJCQkgICAgICBfX1NUUklORzJfQ09QWV9BUlI4LCBzaXplX3QpOworX19TVFJJTkdfSU5MSU5FIGNoYXIgKgorX19zdHJjcHlfc21hbGwgKGNoYXIgKl9fZGVzdCwKKwkJX19TVFJJTkcyX0NPUFlfQVJSMiBfX3NyYzIsIF9fU1RSSU5HMl9DT1BZX0FSUjMgX19zcmMzLAorCQlfX1NUUklORzJfQ09QWV9BUlI0IF9fc3JjNCwgX19TVFJJTkcyX0NPUFlfQVJSNSBfX3NyYzUsCisJCV9fU1RSSU5HMl9DT1BZX0FSUjYgX19zcmM2LCBfX1NUUklORzJfQ09QWV9BUlI3IF9fc3JjNywKKwkJX19TVFJJTkcyX0NPUFlfQVJSOCBfX3NyYzgsIHNpemVfdCBfX3NyY2xlbikKK3sKKyAgdW5pb24geworICAgIGNoYXIgX19jOworICAgIF9fU1RSSU5HMl9DT1BZX0FSUjIgX19zY2EyOworICAgIF9fU1RSSU5HMl9DT1BZX0FSUjMgX19zY2EzOworICAgIF9fU1RSSU5HMl9DT1BZX0FSUjQgX19zY2E0OworICAgIF9fU1RSSU5HMl9DT1BZX0FSUjUgX19zY2E1OworICAgIF9fU1RSSU5HMl9DT1BZX0FSUjYgX19zY2E2OworICAgIF9fU1RSSU5HMl9DT1BZX0FSUjcgX19zY2E3OworICAgIF9fU1RSSU5HMl9DT1BZX0FSUjggX19zY2E4OworICB9ICpfX3UgPSAodm9pZCAqKSBfX2Rlc3Q7CisgIHN3aXRjaCAoKHVuc2lnbmVkIGludCkgX19zcmNsZW4pCisgICAgeworICAgIGNhc2UgMToKKyAgICAgIF9fdS0+X19jID0gJ1wwJzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgIF9fZXh0ZW5zaW9uX18gX191LT5fX3NjYTIgPSBfX3NyYzI7CisgICAgICBicmVhazsKKyAgICBjYXNlIDM6CisgICAgICBfX2V4dGVuc2lvbl9fIF9fdS0+X19zY2EzID0gX19zcmMzOworICAgICAgYnJlYWs7CisgICAgY2FzZSA0OgorICAgICAgX19leHRlbnNpb25fXyBfX3UtPl9fc2NhNCA9IF9fc3JjNDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgNToKKyAgICAgIF9fZXh0ZW5zaW9uX18gX191LT5fX3NjYTUgPSBfX3NyYzU7CisgICAgICBicmVhazsKKyAgICBjYXNlIDY6CisgICAgICBfX2V4dGVuc2lvbl9fIF9fdS0+X19zY2E2ID0gX19zcmM2OworICAgICAgYnJlYWs7CisgICAgY2FzZSA3OgorICAgICAgX19leHRlbnNpb25fXyBfX3UtPl9fc2NhNyA9IF9fc3JjNzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgODoKKyAgICAgIF9fZXh0ZW5zaW9uX18gX191LT5fX3NjYTggPSBfX3NyYzg7CisgICAgICBicmVhazsKKyAgfQorICByZXR1cm4gX19kZXN0OworfQorIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29weSBTUkMgdG8gREVTVCwgcmV0dXJuaW5nIHBvaW50ZXIgdG8gZmluYWwgTlVMIGJ5dGUuICAqLworI2lmZGVmIF9fVVNFX0dOVQorIyBpZiAhZGVmaW5lZCBfSEFWRV9TVFJJTkdfQVJDSF9zdHBjcHkgfHwgZGVmaW5lZCBfRk9SQ0VfSU5MSU5FUworIyAgaWZuZGVmIF9IQVZFX1NUUklOR19BUkNIX3N0cGNweQorIyAgIGlmIF9fR05VQ19QUkVSRVEgKDMsIDQpCisjICAgIGRlZmluZSBfX3N0cGNweShkZXN0LCBzcmMpIF9fYnVpbHRpbl9zdHBjcHkgKGRlc3QsIHNyYykKKyMgICBlbGlmIF9fR05VQ19QUkVSRVEgKDMsIDApCisjICAgIGRlZmluZSBfX3N0cGNweShkZXN0LCBzcmMpIFwKKyAgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChzcmMpCQkJCSAgICAgIFwKKwkJICA/IChfX3N0cmluZzJfMWJwdHJfcCAoc3JjKSAmJiBzdHJsZW4gKHNyYykgKyAxIDw9IDgJICAgICAgXAorCQkgICAgID8gX19idWlsdGluX3N0cmNweSAoZGVzdCwgc3JjKSArIHN0cmxlbiAoc3JjKQkgICAgICBcCisJCSAgICAgOiAoKGNoYXIgKikgKF9fbWVtcGNweSkgKGRlc3QsIHNyYywgc3RybGVuIChzcmMpICsgMSkgICAgXAorCQkJLSAxKSkJCQkJCQkgICAgICBcCisJCSAgOiBfX3N0cGNweSAoZGVzdCwgc3JjKSkpCisjICAgZWxzZQorIyAgICBkZWZpbmUgX19zdHBjcHkoZGVzdCwgc3JjKSBcCisgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoc3JjKQkJCQkgICAgICBcCisJCSAgPyAoX19zdHJpbmcyXzFicHRyX3AgKHNyYykgJiYgc3RybGVuIChzcmMpICsgMSA8PSA4CSAgICAgIFwKKwkJICAgICA/IF9fc3RwY3B5X3NtYWxsIChkZXN0LCBfX3N0cGNweV9hcmdzIChzcmMpLAkgICAgICBcCisJCQkJICAgICAgIHN0cmxlbiAoc3JjKSArIDEpCQkgICAgICBcCisJCSAgICAgOiAoKGNoYXIgKikgKF9fbWVtcGNweSkgKGRlc3QsIHNyYywgc3RybGVuIChzcmMpICsgMSkgICAgXAorCQkJLSAxKSkJCQkJCQkgICAgICBcCisJCSAgOiBfX3N0cGNweSAoZGVzdCwgc3JjKSkpCisjICAgZW5kaWYKKy8qIEluIGdsaWJjIHdlIHVzZSB0aGlzIGZ1bmN0aW9uIGZyZXF1ZW50bHkgYnV0IGZvciBuYW1lc3BhY2UgcmVhc29ucworICAgd2UgaGF2ZSB0byB1c2UgdGhlIG5hbWUgYF9fc3RwY3B5Jy4gICovCisjICAgZGVmaW5lIHN0cGNweShkZXN0LCBzcmMpIF9fc3RwY3B5IChkZXN0LCBzcmMpCisjICBlbmRpZgorCisjICBpZiAhX19HTlVDX1BSRVJFUSAoMywgMCkgfHwgZGVmaW5lZCBfRk9SQ0VfSU5MSU5FUworIyAgIGlmIF9TVFJJTkdfQVJDSF91bmFsaWduZWQKKyMgICAgaWZuZGVmIF9GT1JDRV9JTkxJTkVTCisjICAgICBkZWZpbmUgX19zdHBjcHlfYXJncyhzcmMpIFwKKyAgICAgX19leHRlbnNpb25fXyBfX1NUUklORzJfU01BTExfR0VUMTYgKHNyYywgMCksCQkJICAgICAgXAorICAgICBfX2V4dGVuc2lvbl9fIF9fU1RSSU5HMl9TTUFMTF9HRVQxNiAoc3JjLCA0KSwJCQkgICAgICBcCisgICAgIF9fZXh0ZW5zaW9uX18gX19TVFJJTkcyX1NNQUxMX0dFVDMyIChzcmMsIDApLAkJCSAgICAgIFwKKyAgICAgX19leHRlbnNpb25fXyBfX1NUUklORzJfU01BTExfR0VUMzIgKHNyYywgNCkKKyMgICAgZW5kaWYKK19fU1RSSU5HX0lOTElORSBjaGFyICpfX3N0cGNweV9zbWFsbCAoY2hhciAqLCBfX3VpbnQxNl90LCBfX3VpbnQxNl90LAorCQkJCSAgICAgIF9fdWludDMyX3QsIF9fdWludDMyX3QsIHNpemVfdCk7CitfX1NUUklOR19JTkxJTkUgY2hhciAqCitfX3N0cGNweV9zbWFsbCAoY2hhciAqX19kZXN0LAorCQlfX3VpbnQxNl90IF9fc3JjMF8yLCBfX3VpbnQxNl90IF9fc3JjNF8yLAorCQlfX3VpbnQzMl90IF9fc3JjMF80LCBfX3VpbnQzMl90IF9fc3JjNF80LAorCQlzaXplX3QgX19zcmNsZW4pCit7CisgIHVuaW9uIHsKKyAgICB1bnNpZ25lZCBpbnQgX191aTsKKyAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX191c2k7CisgICAgdW5zaWduZWQgY2hhciBfX3VjOworICAgIGNoYXIgX19jOworICB9ICpfX3UgPSAodm9pZCAqKSBfX2Rlc3Q7CisgIHN3aXRjaCAoKHVuc2lnbmVkIGludCkgX19zcmNsZW4pCisgICAgeworICAgIGNhc2UgMToKKyAgICAgIF9fdS0+X191YyA9ICdcMCc7CisgICAgICBicmVhazsKKyAgICBjYXNlIDI6CisgICAgICBfX3UtPl9fdXNpID0gX19zcmMwXzI7CisgICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAxKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMzoKKyAgICAgIF9fdS0+X191c2kgPSBfX3NyYzBfMjsKKyAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDIpOworICAgICAgX191LT5fX3VjID0gJ1wwJzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgNDoKKyAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OworICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgMyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIDU6CisgICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKKyAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOworICAgICAgX191LT5fX3VjID0gJ1wwJzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgNjoKKyAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OworICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CisgICAgICBfX3UtPl9fdXNpID0gX19zcmM0XzI7CisgICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAxKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgNzoKKyAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OworICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CisgICAgICBfX3UtPl9fdXNpID0gX19zcmM0XzI7CisgICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAyKTsKKyAgICAgIF9fdS0+X191YyA9ICdcMCc7CisgICAgICBicmVhazsKKyAgICBjYXNlIDg6CisgICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKKyAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOworICAgICAgX191LT5fX3VpID0gX19zcmM0XzQ7CisgICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAzKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgcmV0dXJuICZfX3UtPl9fYzsKK30KKyMgICBlbHNlCisjICAgIGlmbmRlZiBfRk9SQ0VfSU5MSU5FUworIyAgICAgZGVmaW5lIF9fc3RwY3B5X2FyZ3Moc3JjKSBcCisgICAgIF9fZXh0ZW5zaW9uX18gKChfX1NUUklORzJfQ09QWV9BUlIyKQkJCQkgICAgICBcCisgICAgICB7IHsgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzBdLCAnXDAnIH0gfSksCQkJICAgICAgXAorICAgICBfX2V4dGVuc2lvbl9fICgoX19TVFJJTkcyX0NPUFlfQVJSMykJCQkJICAgICAgXAorICAgICAgeyB7ICgoX19jb25zdCBjaGFyICopIChzcmMpKVswXSwgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzFdLAkgICAgICBcCisJICAnXDAnIH0gfSksCQkJCQkJCSAgICAgIFwKKyAgICAgX19leHRlbnNpb25fXyAoKF9fU1RSSU5HMl9DT1BZX0FSUjQpCQkJCSAgICAgIFwKKyAgICAgIHsgeyAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbMF0sICgoX19jb25zdCBjaGFyICopIChzcmMpKVsxXSwJICAgICAgXAorCSAgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzJdLCAnXDAnIH0gfSksCQkJICAgICAgXAorICAgICBfX2V4dGVuc2lvbl9fICgoX19TVFJJTkcyX0NPUFlfQVJSNSkJCQkJICAgICAgXAorICAgICAgeyB7ICgoX19jb25zdCBjaGFyICopIChzcmMpKVswXSwgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzFdLAkgICAgICBcCisJICAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbMl0sICgoX19jb25zdCBjaGFyICopIChzcmMpKVszXSwJICAgICAgXAorCSAgJ1wwJyB9IH0pLAkJCQkJCQkgICAgICBcCisgICAgIF9fZXh0ZW5zaW9uX18gKChfX1NUUklORzJfQ09QWV9BUlI2KQkJCQkgICAgICBcCisgICAgICB7IHsgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzBdLCAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbMV0sCSAgICAgIFwKKwkgICgoX19jb25zdCBjaGFyICopIChzcmMpKVsyXSwgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzNdLAkgICAgICBcCisJICAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbNF0sICdcMCcgfSB9KSwJCQkgICAgICBcCisgICAgIF9fZXh0ZW5zaW9uX18gKChfX1NUUklORzJfQ09QWV9BUlI3KQkJCQkgICAgICBcCisgICAgICB7IHsgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzBdLCAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbMV0sCSAgICAgIFwKKwkgICgoX19jb25zdCBjaGFyICopIChzcmMpKVsyXSwgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzNdLAkgICAgICBcCisJICAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbNF0sICgoX19jb25zdCBjaGFyICopIChzcmMpKVs1XSwJICAgICAgXAorCSAgJ1wwJyB9IH0pLAkJCQkJCQkgICAgICBcCisgICAgIF9fZXh0ZW5zaW9uX18gKChfX1NUUklORzJfQ09QWV9BUlI4KQkJCQkgICAgICBcCisgICAgICB7IHsgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzBdLCAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbMV0sCSAgICAgIFwKKwkgICgoX19jb25zdCBjaGFyICopIChzcmMpKVsyXSwgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzNdLAkgICAgICBcCisJICAoKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbNF0sICgoX19jb25zdCBjaGFyICopIChzcmMpKVs1XSwJICAgICAgXAorCSAgKChfX2NvbnN0IGNoYXIgKikgKHNyYykpWzZdLCAnXDAnIH0gfSkKKyMgICAgZW5kaWYKK19fU1RSSU5HX0lOTElORSBjaGFyICpfX3N0cGNweV9zbWFsbCAoY2hhciAqLCBfX1NUUklORzJfQ09QWV9BUlIyLAorCQkJCSAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjMsCisJCQkJICAgICAgX19TVFJJTkcyX0NPUFlfQVJSNCwKKwkJCQkgICAgICBfX1NUUklORzJfQ09QWV9BUlI1LAorCQkJCSAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjYsCisJCQkJICAgICAgX19TVFJJTkcyX0NPUFlfQVJSNywKKwkJCQkgICAgICBfX1NUUklORzJfQ09QWV9BUlI4LCBzaXplX3QpOworX19TVFJJTkdfSU5MSU5FIGNoYXIgKgorX19zdHBjcHlfc21hbGwgKGNoYXIgKl9fZGVzdCwKKwkJX19TVFJJTkcyX0NPUFlfQVJSMiBfX3NyYzIsIF9fU1RSSU5HMl9DT1BZX0FSUjMgX19zcmMzLAorCQlfX1NUUklORzJfQ09QWV9BUlI0IF9fc3JjNCwgX19TVFJJTkcyX0NPUFlfQVJSNSBfX3NyYzUsCisJCV9fU1RSSU5HMl9DT1BZX0FSUjYgX19zcmM2LCBfX1NUUklORzJfQ09QWV9BUlI3IF9fc3JjNywKKwkJX19TVFJJTkcyX0NPUFlfQVJSOCBfX3NyYzgsIHNpemVfdCBfX3NyY2xlbikKK3sKKyAgdW5pb24geworICAgIGNoYXIgX19jOworICAgIF9fU1RSSU5HMl9DT1BZX0FSUjIgX19zY2EyOworICAgIF9fU1RSSU5HMl9DT1BZX0FSUjMgX19zY2EzOworICAgIF9fU1RSSU5HMl9DT1BZX0FSUjQgX19zY2E0OworICAgIF9fU1RSSU5HMl9DT1BZX0FSUjUgX19zY2E1OworICAgIF9fU1RSSU5HMl9DT1BZX0FSUjYgX19zY2E2OworICAgIF9fU1RSSU5HMl9DT1BZX0FSUjcgX19zY2E3OworICAgIF9fU1RSSU5HMl9DT1BZX0FSUjggX19zY2E4OworICB9ICpfX3UgPSAodm9pZCAqKSBfX2Rlc3Q7CisgIHN3aXRjaCAoKHVuc2lnbmVkIGludCkgX19zcmNsZW4pCisgICAgeworICAgIGNhc2UgMToKKyAgICAgIF9fdS0+X19jID0gJ1wwJzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgIF9fZXh0ZW5zaW9uX18gX191LT5fX3NjYTIgPSBfX3NyYzI7CisgICAgICBicmVhazsKKyAgICBjYXNlIDM6CisgICAgICBfX2V4dGVuc2lvbl9fIF9fdS0+X19zY2EzID0gX19zcmMzOworICAgICAgYnJlYWs7CisgICAgY2FzZSA0OgorICAgICAgX19leHRlbnNpb25fXyBfX3UtPl9fc2NhNCA9IF9fc3JjNDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgNToKKyAgICAgIF9fZXh0ZW5zaW9uX18gX191LT5fX3NjYTUgPSBfX3NyYzU7CisgICAgICBicmVhazsKKyAgICBjYXNlIDY6CisgICAgICBfX2V4dGVuc2lvbl9fIF9fdS0+X19zY2E2ID0gX19zcmM2OworICAgICAgYnJlYWs7CisgICAgY2FzZSA3OgorICAgICAgX19leHRlbnNpb25fXyBfX3UtPl9fc2NhNyA9IF9fc3JjNzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgODoKKyAgICAgIF9fZXh0ZW5zaW9uX18gX191LT5fX3NjYTggPSBfX3NyYzg7CisgICAgICBicmVhazsKKyAgfQorICByZXR1cm4gX19kZXN0ICsgX19zcmNsZW4gLSAxOworfQorIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKworLyogQ29weSBubyBtb3JlIHRoYW4gTiBjaGFyYWN0ZXJzIG9mIFNSQyB0byBERVNULiAgKi8KKyNpZm5kZWYgX0hBVkVfU1RSSU5HX0FSQ0hfc3RybmNweQorIyBpZiBfX0dOVUNfUFJFUkVRICgzLCAyKQorIyAgZGVmaW5lIHN0cm5jcHkoZGVzdCwgc3JjLCBuKSBfX2J1aWx0aW5fc3RybmNweSAoZGVzdCwgc3JjLCBuKQorIyBlbHNlCisjICBkZWZpbmUgc3RybmNweShkZXN0LCBzcmMsIG4pIFwKKyAgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChzcmMpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wIChuKSAgICAgIFwKKwkJICA/IChzdHJsZW4gKHNyYykgKyAxID49ICgoc2l6ZV90KSAobikpCQkJICAgICAgXAorCQkgICAgID8gKGNoYXIgKikgbWVtY3B5IChkZXN0LCBzcmMsIG4pCQkJICAgICAgXAorCQkgICAgIDogc3RybmNweSAoZGVzdCwgc3JjLCBuKSkJCQkJICAgICAgXAorCQkgIDogc3RybmNweSAoZGVzdCwgc3JjLCBuKSkpCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBBcHBlbmQgbm8gbW9yZSB0aGFuIE4gY2hhcmFjdGVycyBmcm9tIFNSQyBvbnRvIERFU1QuICAqLworI2lmbmRlZiBfSEFWRV9TVFJJTkdfQVJDSF9zdHJuY2F0CisjIGlmZGVmIF9VU0VfU1RSSU5HX0FSQ0hfc3RyY2hyCisjICBkZWZpbmUgc3RybmNhdChkZXN0LCBzcmMsIG4pIFwKKyAgKF9fZXh0ZW5zaW9uX18gKHsgY2hhciAqX19kZXN0ID0gKGRlc3QpOwkJCQkgICAgICBcCisJCSAgICBfX2J1aWx0aW5fY29uc3RhbnRfcCAoc3JjKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAobikgICAgXAorCQkgICAgPyAoc3RybGVuIChzcmMpIDwgKChzaXplX3QpIChuKSkJCQkgICAgICBcCisJCSAgICAgICA/IHN0cmNhdCAoX19kZXN0LCBzcmMpCQkJCSAgICAgIFwKKwkJICAgICAgIDogKCooKGNoYXIgKikgX19tZW1wY3B5IChzdHJjaHIgKF9fZGVzdCwgJ1wwJyksCSAgICAgIFwKKwkJCQkJCXNyYywgbikpID0gJ1wwJywgX19kZXN0KSkgICAgIFwKKwkJICAgIDogc3RybmNhdCAoZGVzdCwgc3JjLCBuKTsgfSkpCisjIGVsaWYgX19HTlVDX1BSRVJFUSAoMywgMikKKyMgIGRlZmluZSBzdHJuY2F0KGRlc3QsIHNyYywgbikgX19idWlsdGluX3N0cm5jYXQgKGRlc3QsIHNyYywgbikKKyMgZWxzZQorIyAgZGVmaW5lIHN0cm5jYXQoZGVzdCwgc3JjLCBuKSBcCisgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoc3JjKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAobikgICAgICBcCisJCSAgPyAoc3RybGVuIChzcmMpIDwgKChzaXplX3QpIChuKSkJCQkgICAgICBcCisJCSAgICAgPyBzdHJjYXQgKGRlc3QsIHNyYykJCQkJICAgICAgXAorCQkgICAgIDogc3RybmNhdCAoZGVzdCwgc3JjLCBuKSkJCQkJICAgICAgXAorCQkgIDogc3RybmNhdCAoZGVzdCwgc3JjLCBuKSkpCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBDb21wYXJlIGNoYXJhY3RlcnMgb2YgUzEgYW5kIFMyLiAgKi8KKyNpZm5kZWYgX0hBVkVfU1RSSU5HX0FSQ0hfc3RyY21wCisjIGlmIF9fR05VQ19QUkVSRVEgKDMsIDIpCisjICBkZWZpbmUgc3RyY21wKHMxLCBzMikgXAorICBfX2V4dGVuc2lvbl9fCQkJCQkJCQkgICAgICBcCisgICh7IHNpemVfdCBfX3MxX2xlbiwgX19zMl9sZW47CQkJCQkJICAgICAgXAorICAgICAoX19idWlsdGluX2NvbnN0YW50X3AgKHMxKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAoczIpCQkgICAgICBcCisgICAgICAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKHMxKSwgX19zMl9sZW4gPSBzdHJsZW4gKHMyKSwJCSAgICAgIFwKKwkgICghX19zdHJpbmcyXzFicHRyX3AgKHMxKSB8fCBfX3MxX2xlbiA+PSA0KQkJCSAgICAgIFwKKwkgICYmICghX19zdHJpbmcyXzFicHRyX3AgKHMyKSB8fCBfX3MyX2xlbiA+PSA0KSkJCSAgICAgIFwKKyAgICAgID8gX19idWlsdGluX3N0cmNtcCAoczEsIHMyKQkJCQkJICAgICAgXAorICAgICAgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKHMxKSAmJiBfX3N0cmluZzJfMWJwdHJfcCAoczEpCQkgICAgICBcCisJICYmIChfX3MxX2xlbiA9IHN0cmxlbiAoczEpLCBfX3MxX2xlbiA8IDQpCQkJICAgICAgXAorCSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoczIpICYmIF9fc3RyaW5nMl8xYnB0cl9wIChzMikJCSAgICAgIFwKKwkgICAgPyBfX2J1aWx0aW5fc3RyY21wIChzMSwgczIpCQkJCQkgICAgICBcCisJICAgIDogX19zdHJjbXBfY2cgKHMxLCBzMiwgX19zMV9sZW4pKQkJCQkgICAgICBcCisJIDogKF9fYnVpbHRpbl9jb25zdGFudF9wIChzMikgJiYgX19zdHJpbmcyXzFicHRyX3AgKHMyKQkJICAgICAgXAorCSAgICAmJiAoX19zMl9sZW4gPSBzdHJsZW4gKHMyKSwgX19zMl9sZW4gPCA0KQkJCSAgICAgIFwKKwkgICAgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKHMxKSAmJiBfX3N0cmluZzJfMWJwdHJfcCAoczEpCSAgICAgIFwKKwkgICAgICAgPyBfX2J1aWx0aW5fc3RyY21wIChzMSwgczIpCQkJCSAgICAgIFwKKwkgICAgICAgOiBfX3N0cmNtcF9nYyAoczEsIHMyLCBfX3MyX2xlbikpCQkJICAgICAgXAorCSAgICA6IF9fYnVpbHRpbl9zdHJjbXAgKHMxLCBzMikpKSk7IH0pCisjIGVsc2UKKyMgIGRlZmluZSBzdHJjbXAoczEsIHMyKSBcCisgIF9fZXh0ZW5zaW9uX18JCQkJCQkJCSAgICAgIFwKKyAgKHsgc2l6ZV90IF9fczFfbGVuLCBfX3MyX2xlbjsJCQkJCQkgICAgICBcCisgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoczEpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wIChzMikJCSAgICAgIFwKKyAgICAgICYmIChfX3MxX2xlbiA9IHN0cmxlbiAoczEpLCBfX3MyX2xlbiA9IHN0cmxlbiAoczIpLAkJICAgICAgXAorCSAgKCFfX3N0cmluZzJfMWJwdHJfcCAoczEpIHx8IF9fczFfbGVuID49IDQpCQkJICAgICAgXAorCSAgJiYgKCFfX3N0cmluZzJfMWJwdHJfcCAoczIpIHx8IF9fczJfbGVuID49IDQpKQkJICAgICAgXAorICAgICAgPyBtZW1jbXAgKChfX2NvbnN0IGNoYXIgKikgKHMxKSwgKF9fY29uc3QgY2hhciAqKSAoczIpLAkJICAgICAgXAorCQkoX19zMV9sZW4gPCBfX3MyX2xlbiA/IF9fczFfbGVuIDogX19zMl9sZW4pICsgMSkJICAgICAgXAorICAgICAgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKHMxKSAmJiBfX3N0cmluZzJfMWJwdHJfcCAoczEpCQkgICAgICBcCisJICYmIChfX3MxX2xlbiA9IHN0cmxlbiAoczEpLCBfX3MxX2xlbiA8IDQpCQkJICAgICAgXAorCSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoczIpICYmIF9fc3RyaW5nMl8xYnB0cl9wIChzMikJCSAgICAgIFwKKwkgICAgPyBfX3N0cmNtcF9jYyAoczEsIHMyLCBfX3MxX2xlbikJCQkJICAgICAgXAorCSAgICA6IF9fc3RyY21wX2NnIChzMSwgczIsIF9fczFfbGVuKSkJCQkJICAgICAgXAorCSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoczIpICYmIF9fc3RyaW5nMl8xYnB0cl9wIChzMikJCSAgICAgIFwKKwkgICAgJiYgKF9fczJfbGVuID0gc3RybGVuIChzMiksIF9fczJfbGVuIDwgNCkJCQkgICAgICBcCisJICAgID8gKF9fYnVpbHRpbl9jb25zdGFudF9wIChzMSkgJiYgX19zdHJpbmcyXzFicHRyX3AgKHMxKQkgICAgICBcCisJICAgICAgID8gX19zdHJjbXBfY2MgKHMxLCBzMiwgX19zMl9sZW4pCQkJCSAgICAgIFwKKwkgICAgICAgOiBfX3N0cmNtcF9nYyAoczEsIHMyLCBfX3MyX2xlbikpCQkJICAgICAgXAorCSAgICA6IHN0cmNtcCAoczEsIHMyKSkpKTsgfSkKKyMgZW5kaWYKKworIyBkZWZpbmUgX19zdHJjbXBfY2MoczEsIHMyLCBsKSBcCisgIChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9CQkJCSAgICAgIFwKKwkJICAgICAgKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHMxKSlbMF0gICBcCisJCSAgICAgICAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoczIpKVswXSk7XAorCQkgICAgaWYgKGwgPiAwICYmIF9fcmVzdWx0ID09IDApCQkJCSAgICAgIFwKKwkJICAgICAgewkJCQkJCQkgICAgICBcCisJCQlfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKQkJICAgICAgXAorCQkJCSAgICAgKF9fY29uc3QgY2hhciAqKSAoczEpKVsxXQkJICAgICAgXAorCQkJCSAgICAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopCSAgICAgIFwKKwkJCQkgICAgICAgKF9fY29uc3QgY2hhciAqKSAoczIpKVsxXSk7CSAgICAgIFwKKwkJCWlmIChsID4gMSAmJiBfX3Jlc3VsdCA9PSAwKQkJCSAgICAgIFwKKwkJCSAgewkJCQkJCSAgICAgIFwKKwkJCSAgICBfX3Jlc3VsdCA9CQkJCQkgICAgICBcCisJCQkgICAgICAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikJCSAgICAgIFwKKwkJCQkoX19jb25zdCBjaGFyICopIChzMSkpWzJdCQkgICAgICBcCisJCQkgICAgICAgLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKQkJICAgICAgXAorCQkJCSAgKF9fY29uc3QgY2hhciAqKSAoczIpKVsyXSk7CQkgICAgICBcCisJCQkgICAgaWYgKGwgPiAyICYmIF9fcmVzdWx0ID09IDApCQkJICAgICAgXAorCQkJICAgICAgX19yZXN1bHQgPQkJCQkgICAgICBcCisJCQkJKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopCQkgICAgICBcCisJCQkJICAoX19jb25zdCBjaGFyICopIChzMSkpWzNdCQkgICAgICBcCisJCQkJIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikJCSAgICAgIFwKKwkJCQkgICAgKF9fY29uc3QgY2hhciAqKSAoczIpKVszXSk7CQkgICAgICBcCisJCQkgIH0JCQkJCQkgICAgICBcCisJCSAgICAgIH0JCQkJCQkJICAgICAgXAorCQkgICAgX19yZXN1bHQ7IH0pKQorCisjIGRlZmluZSBfX3N0cmNtcF9jZyhzMSwgczIsIGwxKSBcCisgIChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19zMiA9CQkJICAgICAgXAorCQkgICAgICAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHMyKTsJICAgICAgXAorCQkgICAgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0JCQkJICAgICAgXAorCQkgICAgICAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoczEpKVswXSAgIFwKKwkJICAgICAgIC0gX19zMlswXSk7CQkJCQkgICAgICBcCisJCSAgICBpZiAobDEgPiAwICYmIF9fcmVzdWx0ID09IDApCQkJICAgICAgXAorCQkgICAgICB7CQkJCQkJCSAgICAgIFwKKwkJCV9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopCQkgICAgICBcCisJCQkJICAgICAoX19jb25zdCBjaGFyICopIChzMSkpWzFdIC0gX19zMlsxXSk7ICAgIFwKKwkJCWlmIChsMSA+IDEgJiYgX19yZXN1bHQgPT0gMCkJCQkgICAgICBcCisJCQkgIHsJCQkJCQkgICAgICBcCisJCQkgICAgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikJICAgICAgXAorCQkJCQkgKF9fY29uc3QgY2hhciAqKSAoczEpKVsyXSAtIF9fczJbMl0pO1wKKwkJCSAgICBpZiAobDEgPiAyICYmIF9fcmVzdWx0ID09IDApCQkgICAgICBcCisJCQkgICAgICBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKQkgICAgICBcCisJCQkJCSAgKF9fY29uc3QgY2hhciAqKSAgKHMxKSlbM10JICAgICAgXAorCQkJCQkgIC0gX19zMlszXSk7CQkJICAgICAgXAorCQkJICB9CQkJCQkJICAgICAgXAorCQkgICAgICB9CQkJCQkJCSAgICAgIFwKKwkJICAgIF9fcmVzdWx0OyB9KSkKKworIyBkZWZpbmUgX19zdHJjbXBfZ2MoczEsIHMyLCBsMikgXAorICAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczEgPQkJCSAgICAgIFwKKwkJICAgICAgKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChzMSk7CSAgICAgIFwKKwkJICAgIHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9CQkJCSAgICAgIFwKKwkJICAgICAgX19zMVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopCQkgICAgICBcCisJCQkJIChfX2NvbnN0IGNoYXIgKikgKHMyKSlbMF07CQkgICAgICBcCisJCSAgICBpZiAobDIgPiAwICYmIF9fcmVzdWx0ID09IDApCQkJICAgICAgXAorCQkgICAgICB7CQkJCQkJCSAgICAgIFwKKwkJCV9fcmVzdWx0ID0gKF9fczFbMV0JCQkJICAgICAgXAorCQkJCSAgICAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopCSAgICAgIFwKKwkJCQkgICAgICAgKF9fY29uc3QgY2hhciAqKSAoczIpKVsxXSk7CSAgICAgIFwKKwkJCWlmIChsMiA+IDEgJiYgX19yZXN1bHQgPT0gMCkJCQkgICAgICBcCisJCQkgIHsJCQkJCQkgICAgICBcCisJCQkgICAgX19yZXN1bHQgPQkJCQkJICAgICAgXAorCQkJICAgICAgKF9fczFbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKQkgICAgICBcCisJCQkJCSAgKF9fY29uc3QgY2hhciAqKSAoczIpKVsyXSk7CSAgICAgIFwKKwkJCSAgICBpZiAobDIgPiAyICYmIF9fcmVzdWx0ID09IDApCQkgICAgICBcCisJCQkgICAgICBfX3Jlc3VsdCA9CQkJCSAgICAgIFwKKwkJCQkoX19zMVszXQkJCQkgICAgICBcCisJCQkJIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikJCSAgICAgIFwKKwkJCQkgICAgKF9fY29uc3QgY2hhciAqKSAoczIpKVszXSk7CQkgICAgICBcCisJCQkgIH0JCQkJCQkgICAgICBcCisJCSAgICAgIH0JCQkJCQkJICAgICAgXAorCQkgICAgX19yZXN1bHQ7IH0pKQorI2VuZGlmCisKKworLyogQ29tcGFyZSBOIGNoYXJhY3RlcnMgb2YgUzEgYW5kIFMyLiAgKi8KKyNpZm5kZWYgX0hBVkVfU1RSSU5HX0FSQ0hfc3RybmNtcAorIyBkZWZpbmUgc3RybmNtcChzMSwgczIsIG4pCQkJCQkJICAgICAgXAorICAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKG4pCQkJCSAgICAgIFwKKwkJICAmJiAoKF9fYnVpbHRpbl9jb25zdGFudF9wIChzMSkJCQkgICAgICBcCisJCSAgICAgICAmJiBzdHJsZW4gKHMxKSA8ICgoc2l6ZV90KSAobikpKQkJCSAgICAgIFwKKwkJICAgICAgfHwgKF9fYnVpbHRpbl9jb25zdGFudF9wIChzMikJCQkgICAgICBcCisJCQkgICYmIHN0cmxlbiAoczIpIDwgKChzaXplX3QpIChuKSkpKQkJICAgICAgXAorCQkgID8gc3RyY21wIChzMSwgczIpIDogc3RybmNtcCAoczEsIHMyLCBuKSkpCisjZW5kaWYKKworCisvKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgaW5pdGlhbCBzZWdtZW50IG9mIFMgd2hpY2gKKyAgIGNvbnNpc3RzIGVudGlyZWx5IG9mIGNoYXJhY3RlcnMgbm90IGluIFJFSkVDVC4gICovCisjaWYgIWRlZmluZWQgX0hBVkVfU1RSSU5HX0FSQ0hfc3RyY3NwbiB8fCBkZWZpbmVkIF9GT1JDRV9JTkxJTkVTCisjIGlmbmRlZiBfSEFWRV9TVFJJTkdfQVJDSF9zdHJjc3BuCisjICBpZiBfX0dOVUNfUFJFUkVRICgzLCAyKQorIyAgIGRlZmluZSBzdHJjc3BuKHMsIHJlamVjdCkgXAorICBfX2V4dGVuc2lvbl9fCQkJCQkJCQkgICAgICBcCisgICh7IGNoYXIgX19yMCwgX19yMSwgX19yMjsJCQkJCQkgICAgICBcCisgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCAocmVqZWN0KSAmJiBfX3N0cmluZzJfMWJwdHJfcCAocmVqZWN0KQkgICAgICBcCisgICAgICA/ICgoX19idWlsdGluX2NvbnN0YW50X3AgKHMpICYmIF9fc3RyaW5nMl8xYnB0cl9wIChzKSkJCSAgICAgIFwKKwkgPyBfX2J1aWx0aW5fc3RyY3NwbiAocywgcmVqZWN0KQkJCQkgICAgICBcCisJIDogKChfX3IwID0gKChfX2NvbnN0IGNoYXIgKikgKHJlamVjdCkpWzBdLCBfX3IwID09ICdcMCcpCSAgICAgIFwKKwkgICAgPyBzdHJsZW4gKHMpCQkJCQkJICAgICAgXAorCSAgICA6ICgoX19yMSA9ICgoX19jb25zdCBjaGFyICopIChyZWplY3QpKVsxXSwgX19yMSA9PSAnXDAnKQkgICAgICBcCisJICAgICAgID8gX19zdHJjc3BuX2MxIChzLCBfX3IwKQkJCQkJICAgICAgXAorCSAgICAgICA6ICgoX19yMiA9ICgoX19jb25zdCBjaGFyICopIChyZWplY3QpKVsyXSwgX19yMiA9PSAnXDAnKQkgICAgICBcCisJCSAgPyBfX3N0cmNzcG5fYzIgKHMsIF9fcjAsIF9fcjEpCQkJICAgICAgXAorCQkgIDogKCgoX19jb25zdCBjaGFyICopIChyZWplY3QpKVszXSA9PSAnXDAnCQkgICAgICBcCisJCSAgICAgPyBfX3N0cmNzcG5fYzMgKHMsIF9fcjAsIF9fcjEsIF9fcjIpCQkgICAgICBcCisJCSAgICAgOiBfX2J1aWx0aW5fc3RyY3NwbiAocywgcmVqZWN0KSkpKSkpCQkgICAgICBcCisgICAgICA6IF9fYnVpbHRpbl9zdHJjc3BuIChzLCByZWplY3QpKTsgfSkKKyMgIGVsc2UKKyMgICBkZWZpbmUgc3RyY3NwbihzLCByZWplY3QpIFwKKyAgX19leHRlbnNpb25fXwkJCQkJCQkJICAgICAgXAorICAoeyBjaGFyIF9fcjAsIF9fcjEsIF9fcjI7CQkJCQkJICAgICAgXAorICAgICAoX19idWlsdGluX2NvbnN0YW50X3AgKHJlamVjdCkgJiYgX19zdHJpbmcyXzFicHRyX3AgKHJlamVjdCkJICAgICAgXAorICAgICAgPyAoKF9fcjAgPSAoKF9fY29uc3QgY2hhciAqKSAocmVqZWN0KSlbMF0sIF9fcjAgPT0gJ1wwJykJCSAgICAgIFwKKwkgPyBzdHJsZW4gKHMpCQkJCQkJCSAgICAgIFwKKwkgOiAoKF9fcjEgPSAoKF9fY29uc3QgY2hhciAqKSAocmVqZWN0KSlbMV0sIF9fcjEgPT0gJ1wwJykJICAgICAgXAorCSAgICA/IF9fc3RyY3Nwbl9jMSAocywgX19yMCkJCQkJCSAgICAgIFwKKwkgICAgOiAoKF9fcjIgPSAoKF9fY29uc3QgY2hhciAqKSAocmVqZWN0KSlbMl0sIF9fcjIgPT0gJ1wwJykJICAgICAgXAorCSAgICAgICA/IF9fc3RyY3Nwbl9jMiAocywgX19yMCwgX19yMSkJCQkJICAgICAgXAorCSAgICAgICA6ICgoKF9fY29uc3QgY2hhciAqKSAocmVqZWN0KSlbM10gPT0gJ1wwJwkJICAgICAgXAorCQkgID8gX19zdHJjc3BuX2MzIChzLCBfX3IwLCBfX3IxLCBfX3IyKQkJCSAgICAgIFwKKwkJICA6IHN0cmNzcG4gKHMsIHJlamVjdCkpKSkpCQkJCSAgICAgIFwKKyAgICAgIDogc3RyY3NwbiAocywgcmVqZWN0KSk7IH0pCisjICBlbmRpZgorIyBlbmRpZgorCitfX1NUUklOR19JTkxJTkUgc2l6ZV90IF9fc3RyY3Nwbl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX3JlamVjdCk7CitfX1NUUklOR19JTkxJTkUgc2l6ZV90CitfX3N0cmNzcG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19yZWplY3QpCit7CisgIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CisgIHdoaWxlIChfX3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdCkKKyAgICArK19fcmVzdWx0OworICByZXR1cm4gX19yZXN1bHQ7Cit9CisKK19fU1RSSU5HX0lOTElORSBzaXplX3QgX19zdHJjc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fcmVqZWN0MSwKKwkJCQkgICAgIGludCBfX3JlamVjdDIpOworX19TVFJJTkdfSU5MSU5FIHNpemVfdAorX19zdHJjc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fcmVqZWN0MSwgaW50IF9fcmVqZWN0MikKK3sKKyAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKKyAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gIT0gJ1wwJyAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MQorCSAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MikKKyAgICArK19fcmVzdWx0OworICByZXR1cm4gX19yZXN1bHQ7Cit9CisKK19fU1RSSU5HX0lOTElORSBzaXplX3QgX19zdHJjc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fcmVqZWN0MSwKKwkJCQkgICAgIGludCBfX3JlamVjdDIsIGludCBfX3JlamVjdDMpOworX19TVFJJTkdfSU5MSU5FIHNpemVfdAorX19zdHJjc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fcmVqZWN0MSwgaW50IF9fcmVqZWN0MiwKKwkgICAgICBpbnQgX19yZWplY3QzKQoreworICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOworICB3aGlsZSAoX19zW19fcmVzdWx0XSAhPSAnXDAnICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QxCisJICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QyICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QzKQorICAgICsrX19yZXN1bHQ7CisgIHJldHVybiBfX3Jlc3VsdDsKK30KKyNlbmRpZgorCisKKy8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbml0aWFsIHNlZ21lbnQgb2YgUyB3aGljaAorICAgY29uc2lzdHMgZW50aXJlbHkgb2YgY2hhcmFjdGVycyBpbiBBQ0NFUFQuICAqLworI2lmICFkZWZpbmVkIF9IQVZFX1NUUklOR19BUkNIX3N0cnNwbiB8fCBkZWZpbmVkIF9GT1JDRV9JTkxJTkVTCisjIGlmbmRlZiBfSEFWRV9TVFJJTkdfQVJDSF9zdHJzcG4KKyMgIGlmIF9fR05VQ19QUkVSRVEgKDMsIDIpCisjICAgZGVmaW5lIHN0cnNwbihzLCBhY2NlcHQpIFwKKyAgX19leHRlbnNpb25fXwkJCQkJCQkJICAgICAgXAorICAoeyBjaGFyIF9fYTAsIF9fYTEsIF9fYTI7CQkJCQkJICAgICAgXAorICAgICAoX19idWlsdGluX2NvbnN0YW50X3AgKGFjY2VwdCkgJiYgX19zdHJpbmcyXzFicHRyX3AgKGFjY2VwdCkJICAgICAgXAorICAgICAgPyAoKF9fYnVpbHRpbl9jb25zdGFudF9wIChzKSAmJiBfX3N0cmluZzJfMWJwdHJfcCAocykpCQkgICAgICBcCisJID8gX19idWlsdGluX3N0cnNwbiAocywgYWNjZXB0KQkJCQkJICAgICAgXAorCSA6ICgoX19hMCA9ICgoX19jb25zdCBjaGFyICopIChhY2NlcHQpKVswXSwgX19hMCA9PSAnXDAnKQkgICAgICBcCisJICAgID8gKCh2b2lkKSAocyksIDApCQkJCQkJICAgICAgXAorCSAgICA6ICgoX19hMSA9ICgoX19jb25zdCBjaGFyICopIChhY2NlcHQpKVsxXSwgX19hMSA9PSAnXDAnKQkgICAgICBcCisJICAgICAgID8gX19zdHJzcG5fYzEgKHMsIF9fYTApCQkJCQkgICAgICBcCisJICAgICAgIDogKChfX2EyID0gKChfX2NvbnN0IGNoYXIgKikgKGFjY2VwdCkpWzJdLCBfX2EyID09ICdcMCcpCSAgICAgIFwKKwkJICA/IF9fc3Ryc3BuX2MyIChzLCBfX2EwLCBfX2ExKQkJCQkgICAgICBcCisJCSAgOiAoKChfX2NvbnN0IGNoYXIgKikgKGFjY2VwdCkpWzNdID09ICdcMCcJCSAgICAgIFwKKwkJICAgICA/IF9fc3Ryc3BuX2MzIChzLCBfX2EwLCBfX2ExLCBfX2EyKQkJICAgICAgXAorCQkgICAgIDogX19idWlsdGluX3N0cnNwbiAocywgYWNjZXB0KSkpKSkpCQkgICAgICBcCisgICAgICA6IF9fYnVpbHRpbl9zdHJzcG4gKHMsIGFjY2VwdCkpOyB9KQorIyAgZWxzZQorIyAgIGRlZmluZSBzdHJzcG4ocywgYWNjZXB0KSBcCisgIF9fZXh0ZW5zaW9uX18JCQkJCQkJCSAgICAgIFwKKyAgKHsgY2hhciBfX2EwLCBfX2ExLCBfX2EyOwkJCQkJCSAgICAgIFwKKyAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wIChhY2NlcHQpICYmIF9fc3RyaW5nMl8xYnB0cl9wIChhY2NlcHQpCSAgICAgIFwKKyAgICAgID8gKChfX2EwID0gKChfX2NvbnN0IGNoYXIgKikgKGFjY2VwdCkpWzBdLCBfX2EwID09ICdcMCcpCQkgICAgICBcCisJID8gKCh2b2lkKSAocyksIDApCQkJCQkJICAgICAgXAorCSA6ICgoX19hMSA9ICgoX19jb25zdCBjaGFyICopIChhY2NlcHQpKVsxXSwgX19hMSA9PSAnXDAnKQkgICAgICBcCisJICAgID8gX19zdHJzcG5fYzEgKHMsIF9fYTApCQkJCQkgICAgICBcCisJICAgIDogKChfX2EyID0gKChfX2NvbnN0IGNoYXIgKikgKGFjY2VwdCkpWzJdLCBfX2EyID09ICdcMCcpCSAgICAgIFwKKwkgICAgICAgPyBfX3N0cnNwbl9jMiAocywgX19hMCwgX19hMSkJCQkJICAgICAgXAorCSAgICAgICA6ICgoKF9fY29uc3QgY2hhciAqKSAoYWNjZXB0KSlbM10gPT0gJ1wwJwkJICAgICAgXAorCQkgID8gX19zdHJzcG5fYzMgKHMsIF9fYTAsIF9fYTEsIF9fYTIpCQkJICAgICAgXAorCQkgIDogc3Ryc3BuIChzLCBhY2NlcHQpKSkpKQkJCQkgICAgICBcCisgICAgICA6IHN0cnNwbiAocywgYWNjZXB0KSk7IH0pCisjICBlbmRpZgorIyBlbmRpZgorCitfX1NUUklOR19JTkxJTkUgc2l6ZV90IF9fc3Ryc3BuX2MxIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0KTsKK19fU1RSSU5HX0lOTElORSBzaXplX3QKK19fc3Ryc3BuX2MxIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0KQoreworICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOworICAvKiBQbGVhc2Ugbm90ZSB0aGF0IF9fYWNjZXB0IG5ldmVyIGNhbiBiZSAnXDAnLiAgKi8KKyAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQpCisgICAgKytfX3Jlc3VsdDsKKyAgcmV0dXJuIF9fcmVzdWx0OworfQorCitfX1NUUklOR19JTkxJTkUgc2l6ZV90IF9fc3Ryc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwKKwkJCQkgICAgaW50IF9fYWNjZXB0Mik7CitfX1NUUklOR19JTkxJTkUgc2l6ZV90CitfX3N0cnNwbl9jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2FjY2VwdDIpCit7CisgIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CisgIC8qIFBsZWFzZSBub3RlIHRoYXQgX19hY2NlcHQxIGFuZCBfX2FjY2VwdDIgbmV2ZXIgY2FuIGJlICdcMCcuICAqLworICB3aGlsZSAoX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDEgfHwgX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDIpCisgICAgKytfX3Jlc3VsdDsKKyAgcmV0dXJuIF9fcmVzdWx0OworfQorCitfX1NUUklOR19JTkxJTkUgc2l6ZV90IF9fc3Ryc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwKKwkJCQkgICAgaW50IF9fYWNjZXB0MiwgaW50IF9fYWNjZXB0Myk7CitfX1NUUklOR19JTkxJTkUgc2l6ZV90CitfX3N0cnNwbl9jMyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2FjY2VwdDIsIGludCBfX2FjY2VwdDMpCit7CisgIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CisgIC8qIFBsZWFzZSBub3RlIHRoYXQgX19hY2NlcHQxIHRvIF9fYWNjZXB0MyBuZXZlciBjYW4gYmUgJ1wwJy4gICovCisgIHdoaWxlIChfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MSB8fCBfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MgorCSB8fCBfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MykKKyAgICArK19fcmVzdWx0OworICByZXR1cm4gX19yZXN1bHQ7Cit9CisjZW5kaWYKKworCisvKiBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIGluIFMgb2YgYW55IGNoYXJhY3RlciBpbiBBQ0NFUFQuICAqLworI2lmICFkZWZpbmVkIF9IQVZFX1NUUklOR19BUkNIX3N0cnBicmsgfHwgZGVmaW5lZCBfRk9SQ0VfSU5MSU5FUworIyBpZm5kZWYgX0hBVkVfU1RSSU5HX0FSQ0hfc3RycGJyaworIyAgaWYgX19HTlVDX1BSRVJFUSAoMywgMikKKyMgICBkZWZpbmUgc3RycGJyayhzLCBhY2NlcHQpIFwKKyAgX19leHRlbnNpb25fXwkJCQkJCQkJICAgICAgXAorICAoeyBjaGFyIF9fYTAsIF9fYTEsIF9fYTI7CQkJCQkJICAgICAgXAorICAgICAoX19idWlsdGluX2NvbnN0YW50X3AgKGFjY2VwdCkgJiYgX19zdHJpbmcyXzFicHRyX3AgKGFjY2VwdCkJICAgICAgXAorICAgICAgPyAoKF9fYnVpbHRpbl9jb25zdGFudF9wIChzKSAmJiBfX3N0cmluZzJfMWJwdHJfcCAocykpCQkgICAgICBcCisJID8gX19idWlsdGluX3N0cnBicmsgKHMsIGFjY2VwdCkJCQkJICAgICAgXAorCSA6ICgoX19hMCA9ICgoX19jb25zdCBjaGFyICAqKSAoYWNjZXB0KSlbMF0sIF9fYTAgPT0gJ1wwJykJICAgICAgXAorCSAgICA/ICgodm9pZCkgKHMpLCAoY2hhciAqKSBOVUxMKQkJCQkgICAgICBcCisJICAgIDogKChfX2ExID0gKChfX2NvbnN0IGNoYXIgKikgKGFjY2VwdCkpWzFdLCBfX2ExID09ICdcMCcpCSAgICAgIFwKKwkgICAgICAgPyBfX2J1aWx0aW5fc3RyY2hyIChzLCBfX2EwKQkJCQkgICAgICBcCisJICAgICAgIDogKChfX2EyID0gKChfX2NvbnN0IGNoYXIgKikgKGFjY2VwdCkpWzJdLCBfX2EyID09ICdcMCcpCSAgICAgIFwKKwkJICA/IF9fc3RycGJya19jMiAocywgX19hMCwgX19hMSkJCQkgICAgICBcCisJCSAgOiAoKChfX2NvbnN0IGNoYXIgKikgKGFjY2VwdCkpWzNdID09ICdcMCcJCSAgICAgIFwKKwkJICAgICA/IF9fc3RycGJya19jMyAocywgX19hMCwgX19hMSwgX19hMikJCSAgICAgIFwKKwkJICAgICA6IF9fYnVpbHRpbl9zdHJwYnJrIChzLCBhY2NlcHQpKSkpKSkJCSAgICAgIFwKKyAgICAgIDogX19idWlsdGluX3N0cnBicmsgKHMsIGFjY2VwdCkpOyB9KQorIyAgZWxzZQorIyAgIGRlZmluZSBzdHJwYnJrKHMsIGFjY2VwdCkgXAorICBfX2V4dGVuc2lvbl9fCQkJCQkJCQkgICAgICBcCisgICh7IGNoYXIgX19hMCwgX19hMSwgX19hMjsJCQkJCQkgICAgICBcCisgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYWNjZXB0KSAmJiBfX3N0cmluZzJfMWJwdHJfcCAoYWNjZXB0KQkgICAgICBcCisgICAgICA/ICgoX19hMCA9ICgoX19jb25zdCBjaGFyICAqKSAoYWNjZXB0KSlbMF0sIF9fYTAgPT0gJ1wwJykJCSAgICAgIFwKKwkgPyAoKHZvaWQpIChzKSwgKGNoYXIgKikgTlVMTCkJCQkJCSAgICAgIFwKKwkgOiAoKF9fYTEgPSAoKF9fY29uc3QgY2hhciAqKSAoYWNjZXB0KSlbMV0sIF9fYTEgPT0gJ1wwJykJICAgICAgXAorCSAgICA/IHN0cmNociAocywgX19hMCkJCQkJCQkgICAgICBcCisJICAgIDogKChfX2EyID0gKChfX2NvbnN0IGNoYXIgKikgKGFjY2VwdCkpWzJdLCBfX2EyID09ICdcMCcpCSAgICAgIFwKKwkgICAgICAgPyBfX3N0cnBicmtfYzIgKHMsIF9fYTAsIF9fYTEpCQkJCSAgICAgIFwKKwkgICAgICAgOiAoKChfX2NvbnN0IGNoYXIgKikgKGFjY2VwdCkpWzNdID09ICdcMCcJCSAgICAgIFwKKwkJICA/IF9fc3RycGJya19jMyAocywgX19hMCwgX19hMSwgX19hMikJCQkgICAgICBcCisJCSAgOiBzdHJwYnJrIChzLCBhY2NlcHQpKSkpKQkJCQkgICAgICBcCisgICAgICA6IHN0cnBicmsgKHMsIGFjY2VwdCkpOyB9KQorIyAgZW5kaWYKKyMgZW5kaWYKKworX19TVFJJTkdfSU5MSU5FIGNoYXIgKl9fc3RycGJya19jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsCisJCQkJICAgICBpbnQgX19hY2NlcHQyKTsKK19fU1RSSU5HX0lOTElORSBjaGFyICoKK19fc3RycGJya19jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2FjY2VwdDIpCit7CisgIC8qIFBsZWFzZSBub3RlIHRoYXQgX19hY2NlcHQxIGFuZCBfX2FjY2VwdDIgbmV2ZXIgY2FuIGJlICdcMCcuICAqLworICB3aGlsZSAoKl9fcyAhPSAnXDAnICYmICpfX3MgIT0gX19hY2NlcHQxICYmICpfX3MgIT0gX19hY2NlcHQyKQorICAgICsrX19zOworICByZXR1cm4gKl9fcyA9PSAnXDAnID8gTlVMTCA6IChjaGFyICopIChzaXplX3QpIF9fczsKK30KKworX19TVFJJTkdfSU5MSU5FIGNoYXIgKl9fc3RycGJya19jMyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsCisJCQkJICAgICBpbnQgX19hY2NlcHQyLCBpbnQgX19hY2NlcHQzKTsKK19fU1RSSU5HX0lOTElORSBjaGFyICoKK19fc3RycGJya19jMyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2FjY2VwdDIsCisJICAgICAgaW50IF9fYWNjZXB0MykKK3sKKyAgLyogUGxlYXNlIG5vdGUgdGhhdCBfX2FjY2VwdDEgdG8gX19hY2NlcHQzIG5ldmVyIGNhbiBiZSAnXDAnLiAgKi8KKyAgd2hpbGUgKCpfX3MgIT0gJ1wwJyAmJiAqX19zICE9IF9fYWNjZXB0MSAmJiAqX19zICE9IF9fYWNjZXB0MgorCSAmJiAqX19zICE9IF9fYWNjZXB0MykKKyAgICArK19fczsKKyAgcmV0dXJuICpfX3MgPT0gJ1wwJyA/IE5VTEwgOiAoY2hhciAqKSAoc2l6ZV90KSBfX3M7Cit9CisjZW5kaWYKKworCisvKiBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIE5FRURMRSBpbiBIQVlTVEFDSy4gIE5ld2VyIGdjYyB2ZXJzaW9ucworICAgZG8gdGhpcyBpdHNlbGYuICAqLworI2lmICFkZWZpbmVkIF9IQVZFX1NUUklOR19BUkNIX3N0cnN0ciAmJiAhX19HTlVDX1BSRVJFUSAoMiwgOTcpCisjIGRlZmluZSBzdHJzdHIoaGF5c3RhY2ssIG5lZWRsZSkgXAorICAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKG5lZWRsZSkgJiYgX19zdHJpbmcyXzFicHRyX3AgKG5lZWRsZSkgXAorCQkgID8gKCgoX19jb25zdCBjaGFyICopIChuZWVkbGUpKVswXSA9PSAnXDAnCQkgICAgICBcCisJCSAgICAgPyAoY2hhciAqKSAoc2l6ZV90KSAoaGF5c3RhY2spCQkJICAgICAgXAorCQkgICAgIDogKCgoX19jb25zdCBjaGFyICopIChuZWVkbGUpKVsxXSA9PSAnXDAnCQkgICAgICBcCisJCQk/IHN0cmNociAoaGF5c3RhY2ssCQkJCSAgICAgIFwKKwkJCQkgICgoX19jb25zdCBjaGFyICopIChuZWVkbGUpKVswXSkgCSAgICAgIFwKKwkJCTogc3Ryc3RyIChoYXlzdGFjaywgbmVlZGxlKSkpCQkJICAgICAgXAorCQkgIDogc3Ryc3RyIChoYXlzdGFjaywgbmVlZGxlKSkpCisjZW5kaWYKKworCisjaWYgIWRlZmluZWQgX0hBVkVfU1RSSU5HX0FSQ0hfc3RydG9rX3IgfHwgZGVmaW5lZCBfRk9SQ0VfSU5MSU5FUworIyBpZm5kZWYgX0hBVkVfU1RSSU5HX0FSQ0hfc3RydG9rX3IKKyMgIGRlZmluZSBfX3N0cnRva19yKHMsIHNlcCwgbmV4dHApIFwKKyAgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChzZXApICYmIF9fc3RyaW5nMl8xYnB0cl9wIChzZXApCSAgICAgIFwKKwkJICAmJiAoKF9fY29uc3QgY2hhciAqKSAoc2VwKSlbMF0gIT0gJ1wwJwkJICAgICAgXAorCQkgICYmICgoX19jb25zdCBjaGFyICopIChzZXApKVsxXSA9PSAnXDAnCQkgICAgICBcCisJCSAgPyBfX3N0cnRva19yXzFjIChzLCAoKF9fY29uc3QgY2hhciAqKSAoc2VwKSlbMF0sIG5leHRwKSAgICAgXAorCQkgIDogX19zdHJ0b2tfciAocywgc2VwLCBuZXh0cCkpKQorIyBlbmRpZgorCitfX1NUUklOR19JTkxJTkUgY2hhciAqX19zdHJ0b2tfcl8xYyAoY2hhciAqX19zLCBjaGFyIF9fc2VwLCBjaGFyICoqX19uZXh0cCk7CitfX1NUUklOR19JTkxJTkUgY2hhciAqCitfX3N0cnRva19yXzFjIChjaGFyICpfX3MsIGNoYXIgX19zZXAsIGNoYXIgKipfX25leHRwKQoreworICBjaGFyICpfX3Jlc3VsdDsKKyAgaWYgKF9fcyA9PSBOVUxMKQorICAgIF9fcyA9ICpfX25leHRwOworICB3aGlsZSAoKl9fcyA9PSBfX3NlcCkKKyAgICArK19fczsKKyAgX19yZXN1bHQgPSBOVUxMOworICBpZiAoKl9fcyAhPSAnXDAnKQorICAgIHsKKyAgICAgIF9fcmVzdWx0ID0gX19zKys7CisgICAgICB3aGlsZSAoKl9fcyAhPSAnXDAnKQorCWlmICgqX19zKysgPT0gX19zZXApCisJICB7CisJICAgIF9fc1stMV0gPSAnXDAnOworCSAgICBicmVhazsKKwkgIH0KKyAgICB9CisgICpfX25leHRwID0gX19zOworICByZXR1cm4gX19yZXN1bHQ7Cit9CisjIGlmIGRlZmluZWQgX19VU0VfUE9TSVggfHwgZGVmaW5lZCBfX1VTRV9NSVNDCisjICBkZWZpbmUgc3RydG9rX3Iocywgc2VwLCBuZXh0cCkgX19zdHJ0b2tfciAocywgc2VwLCBuZXh0cCkKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiAhZGVmaW5lZCBfSEFWRV9TVFJJTkdfQVJDSF9zdHJzZXAgfHwgZGVmaW5lZCBfRk9SQ0VfSU5MSU5FUworIyBpZm5kZWYgX0hBVkVfU1RSSU5HX0FSQ0hfc3Ryc2VwCisKK2V4dGVybiBjaGFyICpfX3N0cnNlcF9nIChjaGFyICoqX19zdHJpbmdwLCBfX2NvbnN0IGNoYXIgKl9fZGVsaW0pOworIyAgZGVmaW5lIF9fc3Ryc2VwKHMsIHJlamVjdCkgXAorICBfX2V4dGVuc2lvbl9fCQkJCQkJCQkgICAgICBcCisgICh7IGNoYXIgX19yMCwgX19yMSwgX19yMjsJCQkJCQkgICAgICBcCisgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCAocmVqZWN0KSAmJiBfX3N0cmluZzJfMWJwdHJfcCAocmVqZWN0KQkgICAgICBcCisgICAgICAmJiAoX19yMCA9ICgoX19jb25zdCBjaGFyICopIChyZWplY3QpKVswXSwJCQkgICAgICBcCisJICAoKF9fY29uc3QgY2hhciAqKSAocmVqZWN0KSlbMF0gIT0gJ1wwJykJCQkgICAgICBcCisgICAgICA/ICgoX19yMSA9ICgoX19jb25zdCBjaGFyICopIChyZWplY3QpKVsxXSwJCQkgICAgICBcCisJICgoX19jb25zdCBjaGFyICopIChyZWplY3QpKVsxXSA9PSAnXDAnKQkJCSAgICAgIFwKKwkgPyBfX3N0cnNlcF8xYyAocywgX19yMCkJCQkJCSAgICAgIFwKKwkgOiAoKF9fcjIgPSAoKF9fY29uc3QgY2hhciAqKSAocmVqZWN0KSlbMl0sIF9fcjIgPT0gJ1wwJykJICAgICAgXAorCSAgICA/IF9fc3Ryc2VwXzJjIChzLCBfX3IwLCBfX3IxKQkJCQkgICAgICBcCisJICAgIDogKCgoX19jb25zdCBjaGFyICopIChyZWplY3QpKVszXSA9PSAnXDAnCQkJICAgICAgXAorCSAgICAgICA/IF9fc3Ryc2VwXzNjIChzLCBfX3IwLCBfX3IxLCBfX3IyKQkJCSAgICAgIFwKKwkgICAgICAgOiBfX3N0cnNlcF9nIChzLCByZWplY3QpKSkpCQkJCSAgICAgIFwKKyAgICAgIDogX19zdHJzZXBfZyAocywgcmVqZWN0KSk7IH0pCisjIGVuZGlmCisKK19fU1RSSU5HX0lOTElORSBjaGFyICpfX3N0cnNlcF8xYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdCk7CitfX1NUUklOR19JTkxJTkUgY2hhciAqCitfX3N0cnNlcF8xYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdCkKK3sKKyAgcmVnaXN0ZXIgY2hhciAqX19yZXR2YWwgPSAqX19zOworICBpZiAoX19yZXR2YWwgIT0gTlVMTCAmJiAoKl9fcyA9IHN0cmNociAoX19yZXR2YWwsIF9fcmVqZWN0KSkgIT0gTlVMTCkKKyAgICAqKCpfX3MpKysgPSAnXDAnOworICByZXR1cm4gX19yZXR2YWw7Cit9CisKK19fU1RSSU5HX0lOTElORSBjaGFyICpfX3N0cnNlcF8yYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyKTsKK19fU1RSSU5HX0lOTElORSBjaGFyICoKK19fc3Ryc2VwXzJjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIpCit7CisgIHJlZ2lzdGVyIGNoYXIgKl9fcmV0dmFsID0gKl9fczsKKyAgaWYgKF9fcmV0dmFsICE9IE5VTEwpCisgICAgeworICAgICAgcmVnaXN0ZXIgY2hhciAqX19jcCA9IF9fcmV0dmFsOworICAgICAgd2hpbGUgKDEpCisJeworCSAgaWYgKCpfX2NwID09ICdcMCcpCisJICAgIHsKKwkgICAgICBfX2NwID0gTlVMTDsKKwkgIGJyZWFrOworCSAgICB9CisJICBpZiAoKl9fY3AgPT0gX19yZWplY3QxIHx8ICpfX2NwID09IF9fcmVqZWN0MikKKwkgICAgeworCSAgICAgICpfX2NwKysgPSAnXDAnOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICArK19fY3A7CisJfQorICAgICAgKl9fcyA9IF9fY3A7CisgICAgfQorICByZXR1cm4gX19yZXR2YWw7Cit9CisKK19fU1RSSU5HX0lOTElORSBjaGFyICpfX3N0cnNlcF8zYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyLAorCQkJCSAgIGNoYXIgX19yZWplY3QzKTsKK19fU1RSSU5HX0lOTElORSBjaGFyICoKK19fc3Ryc2VwXzNjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIsIGNoYXIgX19yZWplY3QzKQoreworICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7CisgIGlmIChfX3JldHZhbCAhPSBOVUxMKQorICAgIHsKKyAgICAgIHJlZ2lzdGVyIGNoYXIgKl9fY3AgPSBfX3JldHZhbDsKKyAgICAgIHdoaWxlICgxKQorCXsKKwkgIGlmICgqX19jcCA9PSAnXDAnKQorCSAgICB7CisJICAgICAgX19jcCA9IE5VTEw7CisJICBicmVhazsKKwkgICAgfQorCSAgaWYgKCpfX2NwID09IF9fcmVqZWN0MSB8fCAqX19jcCA9PSBfX3JlamVjdDIgfHwgKl9fY3AgPT0gX19yZWplY3QzKQorCSAgICB7CisJICAgICAgKl9fY3ArKyA9ICdcMCc7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgICsrX19jcDsKKwl9CisgICAgICAqX19zID0gX19jcDsKKyAgICB9CisgIHJldHVybiBfX3JldHZhbDsKK30KKyMgaWZkZWYgX19VU0VfQlNECisjICBkZWZpbmUgc3Ryc2VwKHMsIHJlamVjdCkgX19zdHJzZXAgKHMsIHJlamVjdCkKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBXZSBuZWVkIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMgZm9yIGlubGluZSBzdHJkdXAoKS4KKyAgIFJlZmVycmluZyB0byBzdGRsaWIuaCAoZXZlbiBtaW5pbWFsbHkpIGlzIG5vdCBhbGxvd2VkCisgICBpbiBhbnkgb2YgdGhlIHRpZ2h0IHN0YW5kYXJkcyBjb21wbGlhbnQgbW9kZXMuICAqLworI2lmZGVmIF9fVVNFX01JU0MKKworIyBpZiAhZGVmaW5lZCBfSEFWRV9TVFJJTkdfQVJDSF9zdHJkdXAgfHwgIWRlZmluZWQgX0hBVkVfU1RSSU5HX0FSQ0hfc3RybmR1cAorIyAgZGVmaW5lIF9fbmVlZF9tYWxsb2NfYW5kX2NhbGxvYworIyAgaW5jbHVkZSA8c3RkbGliLmg+CisjIGVuZGlmCisKKyMgaWZuZGVmIF9IQVZFX1NUUklOR19BUkNIX3N0cmR1cAorCitleHRlcm4gY2hhciAqX19zdHJkdXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcpIF9fVEhST1cgX19hdHRyaWJ1dGVfbWFsbG9jX187CisjICBkZWZpbmUgX19zdHJkdXAocykgXAorICAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKHMpICYmIF9fc3RyaW5nMl8xYnB0cl9wIChzKQkgICAgICBcCisJCSAgPyAoKChfX2NvbnN0IGNoYXIgKikgKHMpKVswXSA9PSAnXDAnCQkJICAgICAgXAorCQkgICAgID8gKGNoYXIgKikgY2FsbG9jICgoc2l6ZV90KSAxLCAoc2l6ZV90KSAxKQkJICAgICAgXAorCQkgICAgIDogKHsgc2l6ZV90IF9fbGVuID0gc3RybGVuIChzKSArIDE7CQkgICAgICBcCisJCQkgIGNoYXIgKl9fcmV0dmFsID0gKGNoYXIgKikgbWFsbG9jIChfX2xlbik7CSAgICAgIFwKKwkJCSAgaWYgKF9fcmV0dmFsICE9IE5VTEwpCQkJCSAgICAgIFwKKwkJCSAgICBfX3JldHZhbCA9IChjaGFyICopIG1lbWNweSAoX19yZXR2YWwsIHMsIF9fbGVuKTsgIFwKKwkJCSAgX19yZXR2YWw7IH0pKQkJCQkJICAgICAgXAorCQkgIDogX19zdHJkdXAgKHMpKSkKKworIyAgaWYgZGVmaW5lZCBfX1VTRV9TVklEIHx8IGRlZmluZWQgX19VU0VfQlNEIHx8IGRlZmluZWQgX19VU0VfWE9QRU5fRVhURU5ERUQKKyMgICBkZWZpbmUgc3RyZHVwKHMpIF9fc3RyZHVwIChzKQorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgX0hBVkVfU1RSSU5HX0FSQ0hfc3RybmR1cAorCitleHRlcm4gY2hhciAqX19zdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19uKQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX21hbGxvY19fOworIyAgZGVmaW5lIF9fc3RybmR1cChzLCBuKSBcCisgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAocykgJiYgX19zdHJpbmcyXzFicHRyX3AgKHMpCSAgICAgIFwKKwkJICA/ICgoKF9fY29uc3QgY2hhciAqKSAocykpWzBdID09ICdcMCcJCQkgICAgICBcCisJCSAgICAgPyAoY2hhciAqKSBjYWxsb2MgKChzaXplX3QpIDEsIChzaXplX3QpIDEpCQkgICAgICBcCisJCSAgICAgOiAoeyBzaXplX3QgX19sZW4gPSBzdHJsZW4gKHMpICsgMTsJCSAgICAgIFwKKwkJCSAgc2l6ZV90IF9fbiA9IChuKTsJCQkJICAgICAgXAorCQkJICBjaGFyICpfX3JldHZhbDsJCQkJICAgICAgXAorCQkJICBpZiAoX19uIDwgX19sZW4pCQkJCSAgICAgIFwKKwkJCSAgICBfX2xlbiA9IF9fbiArIDE7CQkJCSAgICAgIFwKKwkJCSAgX19yZXR2YWwgPSAoY2hhciAqKSBtYWxsb2MgKF9fbGVuKTsJCSAgICAgIFwKKwkJCSAgaWYgKF9fcmV0dmFsICE9IE5VTEwpCQkJCSAgICAgIFwKKwkJCSAgICB7CQkJCQkJICAgICAgXAorCQkJICAgICAgX19yZXR2YWxbX19sZW4gLSAxXSA9ICdcMCc7CQkgICAgICBcCisJCQkgICAgICBfX3JldHZhbCA9IChjaGFyICopIG1lbWNweSAoX19yZXR2YWwsIHMsCSAgICAgIFwKKwkJCQkJCQkgIF9fbGVuIC0gMSk7CSAgICAgIFwKKwkJCSAgICB9CQkJCQkJICAgICAgXAorCQkJICBfX3JldHZhbDsgfSkpCQkJCQkgICAgICBcCisJCSAgOiBfX3N0cm5kdXAgKHMsIG4pKSkKKworIyAgaWZkZWYgX19VU0VfR05VCisjICAgZGVmaW5lIHN0cm5kdXAocywgbikgX19zdHJuZHVwIChzLCBuKQorIyAgZW5kaWYKKyMgZW5kaWYKKworI2VuZGlmIC8qIFVzZSBtaXNjLiBvciB1c2UgR05VLiAgKi8KKworI2lmbmRlZiBfRk9SQ0VfSU5MSU5FUworIyB1bmRlZiBfX1NUUklOR19JTkxJTkUKKyNlbmRpZgorCisjZW5kaWYgLyogTm8gc3RyaW5nIGlubGluZXMuICAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NTkzZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmczLmgKQEAgLTAsMCArMSwxNTQgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfU1RSSU5HX0gKKyMgZXJyb3IgIk5ldmVyIHVzZSA8Yml0cy9zdHJpbmczLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxzdHJpbmcuaD4gaW5zdGVhZC4iCisjZW5kaWYKKworX193YXJuZGVjbCAoX193YXJuX21lbXNldF96ZXJvX2xlbiwKKwkgICAgIm1lbXNldCB1c2VkIHdpdGggY29uc3RhbnQgemVybyBsZW5ndGggcGFyYW1ldGVyOyB0aGlzIGNvdWxkIGJlIGR1ZSB0byB0cmFuc3Bvc2VkIHBhcmFtZXRlcnMiKTsKKworI2lmbmRlZiBfX2NwbHVzcGx1cworLyogWFhYIFRoaXMgaXMgdGVtcG9yYXJpbHkuICBXZSBzaG91bGQgbm90IHJlZGVmaW5lIGFueSBvZiB0aGUgc3ltYm9scworICAgYW5kIGluc3RlYWQgaW50ZWdyYXRlIHRoZSBlcnJvciBjaGVja2luZyBpbnRvIHRoZSBvcmlnaW5hbAorICAgZGVmaW5pdGlvbnMuICAqLworIyB1bmRlZiBtZW1jcHkKKyMgdW5kZWYgbWVtbW92ZQorIyB1bmRlZiBtZW1zZXQKKyMgdW5kZWYgc3RyY2F0CisjIHVuZGVmIHN0cmNweQorIyB1bmRlZiBzdHJuY2F0CisjIHVuZGVmIHN0cm5jcHkKKyMgaWZkZWYgX19VU0VfR05VCisjICB1bmRlZiBtZW1wY3B5CisjICB1bmRlZiBzdHBjcHkKKyMgZW5kaWYKKyMgaWZkZWYgX19VU0VfQlNECisjICB1bmRlZiBiY29weQorIyAgdW5kZWYgYnplcm8KKyMgZW5kaWYKKyNlbmRpZgorCisKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgdm9pZCAqCitfX05USCAobWVtY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLAorCSAgICAgICBzaXplX3QgX19sZW4pKQoreworICByZXR1cm4gX19idWlsdGluX19fbWVtY3B5X2NoayAoX19kZXN0LCBfX3NyYywgX19sZW4sIF9fYm9zMCAoX19kZXN0KSk7Cit9CisKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgdm9pZCAqCitfX05USCAobWVtbW92ZSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywKKwkJc2l6ZV90IF9fbGVuKSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9fX21lbW1vdmVfY2hrIChfX2Rlc3QsIF9fc3JjLCBfX2xlbiwgX19ib3MwIChfX2Rlc3QpKTsKK30KKworI2lmZGVmIF9fVVNFX0dOVQorX19leHRlcm5fYWx3YXlzX2lubGluZSB2b2lkICoKK19fTlRIIChtZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLAorCQlzaXplX3QgX19sZW4pKQoreworICByZXR1cm4gX19idWlsdGluX19fbWVtcGNweV9jaGsgKF9fZGVzdCwgX19zcmMsIF9fbGVuLCBfX2JvczAgKF9fZGVzdCkpOworfQorI2VuZGlmCisKKworLyogVGhlIGZpcnN0IHR3byB0ZXN0cyBoZXJlIGhlbHAgdG8gY2F0Y2ggYSBzb21ld2hhdCBjb21tb24gcHJvYmxlbQorICAgd2hlcmUgdGhlIHNlY29uZCBhbmQgdGhpcmQgcGFyYW1ldGVyIGFyZSB0cmFuc3Bvc2VkLiAgVGhpcyBpcworICAgZXNwZWNpYWxseSBwcm9ibGVtYXRpYyBpZiB0aGUgaW50ZW5kZWQgZmlsbCB2YWx1ZSBpcyB6ZXJvLiAgSW4gdGhpcworICAgY2FzZSBubyB3b3JrIGlzIGRvbmUgYXQgYWxsLiAgV2UgZGV0ZWN0IHRoZXNlIHByb2JsZW1zIGJ5IHJlZmVycmluZworICAgbm9uLWV4aXN0aW5nIGZ1bmN0aW9ucy4gICovCitfX2V4dGVybl9hbHdheXNfaW5saW5lIHZvaWQgKgorX19OVEggKG1lbXNldCAodm9pZCAqX19kZXN0LCBpbnQgX19jaCwgc2l6ZV90IF9fbGVuKSkKK3sKKyAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChfX2xlbikgJiYgX19sZW4gPT0gMCkKKyAgICB7CisgICAgICBfX3dhcm5fbWVtc2V0X3plcm9fbGVuICgpOworICAgICAgcmV0dXJuIF9fZGVzdDsKKyAgICB9CisgIHJldHVybiBfX2J1aWx0aW5fX19tZW1zZXRfY2hrIChfX2Rlc3QsIF9fY2gsIF9fbGVuLCBfX2JvczAgKF9fZGVzdCkpOworfQorCisjaWZkZWYgX19VU0VfQlNECitfX2V4dGVybl9hbHdheXNfaW5saW5lIHZvaWQKK19fTlRIIChiY29weSAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCB2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKKwkgICAgICBzaXplX3QgX19sZW4pKQoreworICAodm9pZCkgX19idWlsdGluX19fbWVtbW92ZV9jaGsgKF9fZGVzdCwgX19zcmMsIF9fbGVuLCBfX2JvczAgKF9fZGVzdCkpOworfQorCitfX2V4dGVybl9hbHdheXNfaW5saW5lIHZvaWQKK19fTlRIIChiemVybyAodm9pZCAqX19kZXN0LCBzaXplX3QgX19sZW4pKQoreworICAodm9pZCkgX19idWlsdGluX19fbWVtc2V0X2NoayAoX19kZXN0LCAnXDAnLCBfX2xlbiwgX19ib3MwIChfX2Rlc3QpKTsKK30KKyNlbmRpZgorCitfX2V4dGVybl9hbHdheXNfaW5saW5lIGNoYXIgKgorX19OVEggKHN0cmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykpCit7CisgIHJldHVybiBfX2J1aWx0aW5fX19zdHJjcHlfY2hrIChfX2Rlc3QsIF9fc3JjLCBfX2JvcyAoX19kZXN0KSk7Cit9CisKKyNpZmRlZiBfX1VTRV9HTlUKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgY2hhciAqCitfX05USCAoc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9fX3N0cGNweV9jaGsgKF9fZGVzdCwgX19zcmMsIF9fYm9zIChfX2Rlc3QpKTsKK30KKyNlbmRpZgorCisKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgY2hhciAqCitfX05USCAoc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywKKwkJc2l6ZV90IF9fbGVuKSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9fX3N0cm5jcHlfY2hrIChfX2Rlc3QsIF9fc3JjLCBfX2xlbiwgX19ib3MgKF9fZGVzdCkpOworfQorCisvLyBYWFggV2UgaGF2ZSBubyBjb3JyZXNwb25kaW5nIGJ1aWx0aW4geWV0LgorZXh0ZXJuIGNoYXIgKl9fc3RwbmNweV9jaGsgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyICpfX3NyYywgc2l6ZV90IF9fbiwKKwkJCSAgICBzaXplX3QgX19kZXN0bGVuKSBfX1RIUk9XOworZXh0ZXJuIGNoYXIgKl9fUkVESVJFQ1RfTlRIIChfX3N0cG5jcHlfYWxpYXMsIChjaGFyICpfX2Rlc3QsCisJCQkJCSAgICAgICBfX2NvbnN0IGNoYXIgKl9fc3JjLAorCQkJCQkgICAgICAgc2l6ZV90IF9fbiksIHN0cG5jcHkpOworCitfX2V4dGVybl9hbHdheXNfaW5saW5lIGNoYXIgKgorX19OVEggKHN0cG5jcHkgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyICpfX3NyYywgc2l6ZV90IF9fbikpCit7CisgIGlmIChfX2JvcyAoX19kZXN0KSAhPSAoc2l6ZV90KSAtMQorICAgICAgJiYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19uKSB8fCBfX24gPD0gX19ib3MgKF9fZGVzdCkpKQorICAgIHJldHVybiBfX3N0cG5jcHlfY2hrIChfX2Rlc3QsIF9fc3JjLCBfX24sIF9fYm9zIChfX2Rlc3QpKTsKKyAgcmV0dXJuIF9fc3RwbmNweV9hbGlhcyAoX19kZXN0LCBfX3NyYywgX19uKTsKK30KKworCitfX2V4dGVybl9hbHdheXNfaW5saW5lIGNoYXIgKgorX19OVEggKHN0cmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykpCit7CisgIHJldHVybiBfX2J1aWx0aW5fX19zdHJjYXRfY2hrIChfX2Rlc3QsIF9fc3JjLCBfX2JvcyAoX19kZXN0KSk7Cit9CisKKworX19leHRlcm5fYWx3YXlzX2lubGluZSBjaGFyICoKK19fTlRIIChzdHJuY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLAorCQlzaXplX3QgX19sZW4pKQoreworICByZXR1cm4gX19idWlsdGluX19fc3RybmNhdF9jaGsgKF9fZGVzdCwgX19zcmMsIF9fbGVuLCBfX2JvcyAoX19kZXN0KSk7Cit9CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zdHJvcHRzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zdHJvcHRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhlMmMyYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3N0cm9wdHMuaApAQCAtMCwwICsxLDIzMSBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9TVFJPUFRTX0gKKyMgZXJyb3IgIk5ldmVyIGluY2x1ZGUgPGJpdHMvc3Ryb3B0cy5oPiBkaXJlY3RseTsgdXNlIDxzdHJvcHRzLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX0JJVFNfU1RST1BUU19ICisjZGVmaW5lIF9CSVRTX1NUUk9QVFNfSAkxCisKKyNpbmNsdWRlIDxiaXRzL3R5cGVzLmg+CisKKy8qIE1hY3JvcyB1c2VkIGFzIGByZXF1ZXN0JyBhcmd1bWVudCB0byBgaW9jdGwnLiAgKi8KKyNkZWZpbmUgX19TSUQJCSgnUycgPDwgOCkKKworI2RlZmluZSBJX05SRUFECSAgICAoX19TSUQgfCAxKQkvKiBDb3VudHMgdGhlIG51bWJlciBvZiBkYXRhIGJ5dGVzIGluIHRoZSBkYXRhCisJCQkJICAgYmxvY2sgaW4gdGhlIGZpcnN0IG1lc3NhZ2UuICAqLworI2RlZmluZSBJX1BVU0gJICAgIChfX1NJRCB8IDIpCS8qIFB1c2ggU1RSRUFNUyBtb2R1bGUgb250byB0b3Agb2YgdGhlIGN1cnJlbnQKKwkJCQkgICBTVFJFQU0sIGp1c3QgYmVsb3cgdGhlIFNUUkVBTSBoZWFkLiAgKi8KKyNkZWZpbmUgSV9QT1AJICAgIChfX1NJRCB8IDMpCS8qIFJlbW92ZSBTVFJFQU1TIG1vZHVsZSBmcm9tIGp1c3QgYmVsb3cgdGhlCisJCQkJICAgU1RSRUFNIGhlYWQuICAqLworI2RlZmluZSBJX0xPT0sJICAgIChfX1NJRCB8IDQpCS8qIFJldHJpZXZlIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUganVzdCBiZWxvdworCQkJCSAgIHRoZSBTVFJFQU0gaGVhZCBhbmQgcGxhY2UgaXQgaW4gYSBjaGFyYWN0ZXIKKwkJCQkgICBzdHJpbmcuICAqLworI2RlZmluZSBJX0ZMVVNICSAgICAoX19TSUQgfCA1KQkvKiBGbHVzaCBhbGwgaW5wdXQgYW5kL29yIG91dHB1dC4gICovCisjZGVmaW5lIElfU1JET1BUICAgIChfX1NJRCB8IDYpCS8qIFNldHMgdGhlIHJlYWQgbW9kZS4gICovCisjZGVmaW5lIElfR1JET1BUICAgIChfX1NJRCB8IDcpCS8qIFJldHVybnMgdGhlIGN1cnJlbnQgcmVhZCBtb2RlIHNldHRpbmcuICAqLworI2RlZmluZSBJX1NUUgkgICAgKF9fU0lEIHwgOCkJLyogQ29uc3RydWN0IGFuIGludGVybmFsIFNUUkVBTVMgYGlvY3RsJworCQkJCSAgIG1lc3NhZ2UgYW5kIHNlbmQgdGhhdCBtZXNzYWdlIGRvd25zdHJlYW0uICovCisjZGVmaW5lIElfU0VUU0lHICAgIChfX1NJRCB8IDkpCS8qIEluZm9ybSB0aGUgU1RSRUFNIGhlYWQgdGhhdCB0aGUgcHJvY2VzcworCQkJCSAgIHdhbnRzIHRoZSBTSUdQT0xMIHNpZ25hbCBpc3N1ZWQuICAqLworI2RlZmluZSBJX0dFVFNJRyAgICAoX19TSUQgfDEwKSAvKiBSZXR1cm4gdGhlIGV2ZW50cyBmb3Igd2hpY2ggdGhlIGNhbGxpbmcKKwkJCQkgICBwcm9jZXNzIGlzIGN1cnJlbnRseSByZWdpc3RlcmVkIHRvIGJlIHNlbnQKKwkJCQkgICBhIFNJR1BPTEwgc2lnbmFsLiAgKi8KKyNkZWZpbmUgSV9GSU5ECSAgICAoX19TSUQgfDExKSAvKiBDb21wYXJlcyB0aGUgbmFtZXMgb2YgYWxsIG1vZHVsZXMgY3VycmVudGx5CisJCQkJICAgcHJlc2VudCBpbiB0aGUgU1RSRUFNIHRvIHRoZSBuYW1lIHBvaW50ZWQgdG8KKwkJCQkgICBieSBgYXJnJy4gICovCisjZGVmaW5lIElfTElOSwkgICAgKF9fU0lEIHwxMikgLyogQ29ubmVjdCB0d28gU1RSRUFNcy4gICovCisjZGVmaW5lIElfVU5MSU5LICAgIChfX1NJRCB8MTMpIC8qIERpc2Nvbm5lY3RzIHRoZSB0d28gU1RSRUFNcy4gICovCisjZGVmaW5lIElfUEVFSwkgICAgKF9fU0lEIHwxNSkgLyogQWxsb3dzIGEgcHJvY2VzcyB0byByZXRyaWV2ZSB0aGUgaW5mb3JtYXRpb24KKwkJCQkgICBpbiB0aGUgZmlyc3QgbWVzc2FnZSBvbiB0aGUgU1RSRUFNIGhlYWQgcmVhZAorCQkJCSAgIHF1ZXVlIHdpdGhvdXQgdGFraW5nIHRoZSBtZXNzYWdlIG9mZiB0aGUKKwkJCQkgICBxdWV1ZS4gICovCisjZGVmaW5lIElfRkRJTlNFUlQgIChfX1NJRCB8MTYpIC8qIENyZWF0ZSBhIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkCisJCQkJICAgYnVmZmVyKHMpLCBhZGRzIGluZm9ybWF0aW9uIGFib3V0IGFub3RoZXIKKwkJCQkgICBTVFJFQU0sIGFuZCBzZW5kIHRoZSBtZXNzYWdlIGRvd25zdHJlYW0uICAqLworI2RlZmluZSBJX1NFTkRGRCAgICAoX19TSUQgfDE3KSAvKiBSZXF1ZXN0cyB0aGUgU1RSRUFNIGFzc29jaWF0ZWQgd2l0aCBgZmlsZGVzJworCQkJCSAgIHRvIHNlbmQgYSBtZXNzYWdlLCBjb250YWluaW5nIGEgZmlsZQorCQkJCSAgIHBvaW50ZXIsIHRvIHRoZSBTVFJFQU0gaGVhZCBhdCB0aGUgb3RoZXIgZW5kCisJCQkJICAgb2YgYSBTVFJFQU1TIHBpcGUuICAqLworI2RlZmluZSBJX1JFQ1ZGRCAgICAoX19TSUQgfDE0KSAvKiBOb24tRUZUIGRlZmluaXRpb24uICAqLworI2RlZmluZSBJX1NXUk9QVCAgICAoX19TSUQgfDE5KSAvKiBTZXQgdGhlIHdyaXRlIG1vZGUuICAqLworI2RlZmluZSBJX0dXUk9QVCAgICAoX19TSUQgfDIwKSAvKiBSZXR1cm4gdGhlIGN1cnJlbnQgd3JpdGUgbW9kZSBzZXR0aW5nLiAgKi8KKyNkZWZpbmUgSV9MSVNUCSAgICAoX19TSUQgfDIxKSAvKiBMaXN0IGFsbCB0aGUgbW9kdWxlIG5hbWVzIG9uIHRoZSBTVFJFQU0sIHVwCisJCQkJICAgdG8gYW5kIGluY2x1ZGluZyB0aGUgdG9wbW9zdCBkcml2ZXIgbmFtZS4gKi8KKyNkZWZpbmUgSV9QTElOSwkgICAgKF9fU0lEIHwyMikgLyogQ29ubmVjdCB0d28gU1RSRUFNcyB3aXRoIGEgcGVyc2lzdGVudAorCQkJCSAgIGxpbmsuICAqLworI2RlZmluZSBJX1BVTkxJTksgICAoX19TSUQgfDIzKSAvKiBEaXNjb25uZWN0IHRoZSB0d28gU1RSRUFNcyB0aGF0IHdlcmUKKwkJCQkgICBjb25uZWN0ZWQgd2l0aCBhIHBlcnNpc3RlbnQgbGluay4gICovCisjZGVmaW5lIElfRkxVU0hCQU5EIChfX1NJRCB8MjgpIC8qIEZsdXNoIG9ubHkgYmFuZCBzcGVjaWZpZWQuICAqLworI2RlZmluZSBJX0NLQkFORCAgICAoX19TSUQgfDI5KSAvKiBDaGVjayBpZiB0aGUgbWVzc2FnZSBvZiBhIGdpdmVuIHByaW9yaXR5CisJCQkJICAgYmFuZCBleGlzdHMgb24gdGhlIFNUUkVBTSBoZWFkIHJlYWQKKwkJCQkgICBxdWV1ZS4gICovCisjZGVmaW5lIElfR0VUQkFORCAgIChfX1NJRCB8MzApIC8qIFJldHVybiB0aGUgcHJpb3JpdHkgYmFuZCBvZiB0aGUgZmlyc3QKKwkJCQkgICBtZXNzYWdlIG9uIHRoZSBTVFJFQU0gaGVhZCByZWFkIHF1ZXVlLiAgKi8KKyNkZWZpbmUgSV9BVE1BUksgICAgKF9fU0lEIHwzMSkgLyogU2VlIGlmIHRoZSBjdXJyZW50IG1lc3NhZ2Ugb24gdGhlIFNUUkVBTQorCQkJCSAgIGhlYWQgcmVhZCBxdWV1ZSBpcyAibWFya2VkIiBieSBzb21lIG1vZHVsZQorCQkJCSAgIGRvd25zdHJlYW0uICAqLworI2RlZmluZSBJX1NFVENMVElNRSAoX19TSUQgfDMyKSAvKiBTZXQgdGhlIHRpbWUgdGhlIFNUUkVBTSBoZWFkIHdpbGwgZGVsYXkgd2hlbgorCQkJCSAgIGEgU1RSRUFNIGlzIGNsb3NpbmcgYW5kIHRoZXJlIGlzIGRhdGEgb24KKwkJCQkgICB0aGUgd3JpdGUgcXVldWVzLiAgKi8KKyNkZWZpbmUgSV9HRVRDTFRJTUUgKF9fU0lEIHwzMykgLyogR2V0IGN1cnJlbnQgdmFsdWUgZm9yIGNsb3NpbmcgdGltZW91dC4gICovCisjZGVmaW5lIElfQ0FOUFVUICAgIChfX1NJRCB8MzQpIC8qIENoZWNrIGlmIGEgY2VydGFpbiBiYW5kIGlzIHdyaXRhYmxlLiAgKi8KKworCisvKiBVc2VkIGluIGBJX0xPT0snIHJlcXVlc3QuICAqLworI2RlZmluZSBGTU5BTUVTWgk4CS8qIGNvbXBhdGliaWxpdHkgdy9Vbml4V2FyZS9Tb2xhcmlzLiAgKi8KKworLyogRmx1c2ggb3B0aW9ucy4gICovCisjZGVmaW5lIEZMVVNIUgkJMHgwMQkvKiBGbHVzaCByZWFkIHF1ZXVlcy4gICovCisjZGVmaW5lIEZMVVNIVwkJMHgwMgkvKiBGbHVzaCB3cml0ZSBxdWV1ZXMuICAqLworI2RlZmluZSBGTFVTSFJXCQkweDAzCS8qIEZsdXNoIHJlYWQgYW5kIHdyaXRlIHF1ZXVlcy4gICovCisjaWZkZWYgX19VU0VfR05VCisjIGRlZmluZSBGTFVTSEJBTkQJMHgwNAkvKiBGbHVzaCBvbmx5IHNwZWNpZmllZCBiYW5kLiAgKi8KKyNlbmRpZgorCisvKiBQb3NzaWJsZSBhcmd1bWVudHMgZm9yIGBJX1NFVFNJRycuICAqLworI2RlZmluZSBTX0lOUFVUCQkweDAwMDEJLyogQSBtZXNzYWdlLCBvdGhlciB0aGFuIGEgaGlnaC1wcmlvcml0eQorCQkJCSAgIG1lc3NhZ2UsIGhhcyBhcnJpdmVkLiAgKi8KKyNkZWZpbmUgU19ISVBSSQkJMHgwMDAyCS8qIEEgaGlnaC1wcmlvcml0eSBtZXNzYWdlIGlzIHByZXNlbnQuICAqLworI2RlZmluZSBTX09VVFBVVAkweDAwMDQJLyogVGhlIHdyaXRlIHF1ZXVlIGZvciBub3JtYWwgZGF0YSBpcyBubyBsb25nZXIKKwkJCQkgICBmdWxsLiAgKi8KKyNkZWZpbmUgU19NU0cJCTB4MDAwOAkvKiBBIFNUUkVBTVMgc2lnbmFsIG1lc3NhZ2UgdGhhdCBjb250YWlucyB0aGUKKwkJCQkgICBTSUdQT0xMIHNpZ25hbCByZWFjaGVzIHRoZSBmcm9udCBvZiB0aGUKKwkJCQkgICBTVFJFQU0gaGVhZCByZWFkIHF1ZXVlLiAgKi8KKyNkZWZpbmUgU19FUlJPUgkJMHgwMDEwCS8qIE5vdGlmaWNhdGlvbiBvZiBhbiBlcnJvciBjb25kaXRpb24uICAqLworI2RlZmluZSBTX0hBTkdVUAkweDAwMjAJLyogTm90aWZpY2F0aW9uIG9mIGEgaGFuZ3VwLiAgKi8KKyNkZWZpbmUgU19SRE5PUk0JMHgwMDQwCS8qIEEgbm9ybWFsIG1lc3NhZ2UgaGFzIGFycml2ZWQuICAqLworI2RlZmluZSBTX1dSTk9STQlTX09VVFBVVAorI2RlZmluZSBTX1JEQkFORAkweDAwODAJLyogQSBtZXNzYWdlIHdpdGggYSBub24temVybyBwcmlvcml0eSBoYXMKKwkJCQkgICBhcnJpdmVkLiAgKi8KKyNkZWZpbmUgU19XUkJBTkQJMHgwMTAwCS8qIFRoZSB3cml0ZSBxdWV1ZSBmb3IgYSBub24temVybyBwcmlvcml0eQorCQkJCSAgIGJhbmQgaXMgbm8gbG9uZ2VyIGZ1bGwuICAqLworI2RlZmluZSBTX0JBTkRVUkcJMHgwMjAwCS8qIFdoZW4gdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIFNfUkRCQU5ELAorCQkJCSAgIFNJR1VSRyBpcyBnZW5lcmF0ZWQgaW5zdGVhZCBvZiBTSUdQT0xMIHdoZW4KKwkJCQkgICBhIHByaW9yaXR5IG1lc3NhZ2UgcmVhY2hlcyB0aGUgZnJvbnQgb2YgdGhlCisJCQkJICAgU1RSRUFNIGhlYWQgcmVhZCBxdWV1ZS4gICovCisKKy8qIE9wdGlvbiBmb3IgYElfUEVFSycuICAqLworI2RlZmluZSBSU19ISVBSSQkweDAxCS8qIE9ubHkgbG9vayBmb3IgaGlnaC1wcmlvcml0eSBtZXNzYWdlcy4gICovCisKKy8qIE9wdGlvbnMgZm9yIGBJX1NSRE9QVCcuICAqLworI2RlZmluZSBSTk9STQkJMHgwMDAwCS8qIEJ5dGUtU1RSRUFNIG1vZGUsIHRoZSBkZWZhdWx0LiAgKi8KKyNkZWZpbmUgUk1TR0QJCTB4MDAwMQkvKiBNZXNzYWdlLWRpc2NhcmQgbW9kZS4gICAqLworI2RlZmluZSBSTVNHTgkJMHgwMDAyCS8qIE1lc3NhZ2Utbm9uZGlzY2FyZCBtb2RlLiAgICovCisjZGVmaW5lIFJQUk9UREFUCTB4MDAwNAkvKiBEZWxpdmVyIHRoZSBjb250cm9sIHBhcnQgb2YgYSBtZXNzYWdlIGFzCisJCQkJICAgZGF0YS4gICovCisjZGVmaW5lIFJQUk9URElTCTB4MDAwOAkvKiBEaXNjYXJkIHRoZSBjb250cm9sIHBhcnQgb2YgYSBtZXNzYWdlLAorCQkJCSAgIGRlbGl2ZXJpbmcgYW55IGRhdGEgcGFydC4gICovCisjZGVmaW5lIFJQUk9UTk9STQkweDAwMTAJLyogRmFpbCBgcmVhZCcgd2l0aCBFQkFETVNHIGlmIGEgbWVzc2FnZQorCQkJCSAgIGNvbnRhaW5pbmcgYSBjb250cm9sIHBhcnQgaXMgYXQgdGhlIGZyb250CisJCQkJICAgb2YgdGhlIFNUUkVBTSBoZWFkIHJlYWQgcXVldWUuICAqLworI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgUlBST1RNQVNLCTB4MDAxQwkvKiBUaGUgUlBST1QgYml0cyAqLworI2VuZGlmCisKKy8qIFBvc3NpYmxlIG1vZGUgZm9yIGBJX1NXUk9QVCcuICAqLworI2RlZmluZSBTTkRaRVJPCQkweDAwMQkvKiBTZW5kIGEgemVyby1sZW5ndGggbWVzc2FnZSBkb3duc3RyZWFtIHdoZW4gYQorCQkJCSAgIGB3cml0ZScgb2YgMCBieXRlcyBvY2N1cnMuICAqLworI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgU05EUElQRQkweDAwMgkvKiBTZW5kIFNJR1BJUEUgb24gd3JpdGUgYW5kIHB1dG1zZyBpZgorCQkJCSAgIHNkX3dlcnJvciBpcyBzZXQuICAqLworI2VuZGlmCisKKy8qIEFyZ3VtZW50cyBmb3IgYElfQVRNQVJLJy4gICovCisjZGVmaW5lIEFOWU1BUksJCTB4MDEJLyogQ2hlY2sgaWYgdGhlIG1lc3NhZ2UgaXMgbWFya2VkLiAgKi8KKyNkZWZpbmUgTEFTVE1BUksJMHgwMgkvKiBDaGVjayBpZiB0aGUgbWVzc2FnZSBpcyB0aGUgbGFzdCBvbmUgbWFya2VkCisJCQkJICAgb24gdGhlIHF1ZXVlLiAgKi8KKworLyogQXJndW1lbnQgZm9yIGBJX1VOTElOSycuICAqLworI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgTVVYSURfQUxMCSgtMSkJLyogVW5saW5rIGFsbCBTVFJFQU1zIGxpbmtlZCB0byB0aGUgU1RSRUFNCisJCQkJICAgYXNzb2NpYXRlZCB3aXRoIGBmaWxkZXMnLiAgKi8KKyNlbmRpZgorCisKKy8qIE1hY3JvcyBmb3IgYGdldG1zZycsIGBnZXRwbXNnJywgYHB1dG1zZycgYW5kIGBwdXRwbXNnJy4gICovCisjZGVmaW5lIE1TR19ISVBSSQkweDAxCS8qIFNlbmQvcmVjZWl2ZSBoaWdoIHByaW9yaXR5IG1lc3NhZ2UuICAqLworI2RlZmluZSBNU0dfQU5ZCQkweDAyCS8qIFJlY2VpdmUgYW55IG1lc3NhZ2UuICAqLworI2RlZmluZSBNU0dfQkFORAkweDA0CS8qIFJlY2VpdmUgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBiYW5kLiAgKi8KKworLyogVmFsdWVzIHJldHVybmVkIGJ5IGdldG1zZyBhbmQgZ2V0cG1zZyAqLworI2RlZmluZSBNT1JFQ1RMCQkxCS8qIE1vcmUgY29udHJvbCBpbmZvcm1hdGlvbiBpcyBsZWZ0IGluCisJCQkJICAgbWVzc2FnZS4gICovCisjZGVmaW5lIE1PUkVEQVRBCTIJLyogTW9yZSBkYXRhIGlzIGxlZnQgaW4gbWVzc2FnZS4gICovCisKKworLyogU3RydWN0dXJlIHVzZWQgZm9yIHRoZSBJX0ZMVVNIQkFORCBpb2N0bCBvbiBzdHJlYW1zLiAgKi8KK3N0cnVjdCBiYW5kaW5mbworICB7CisgICAgdW5zaWduZWQgY2hhciBiaV9wcmk7CisgICAgaW50IGJpX2ZsYWc7CisgIH07CisKK3N0cnVjdCBzdHJidWYKKyAgeworICAgIGludCBtYXhsZW47CQkvKiBNYXhpbXVtIGJ1ZmZlciBsZW5ndGguICAqLworICAgIGludCBsZW47CQkvKiBMZW5ndGggb2YgZGF0YS4gICovCisgICAgY2hhciAqYnVmOwkJLyogUG9pbnRlciB0byBidWZmZXIuICAqLworICB9OworCitzdHJ1Y3Qgc3RycGVlaworICB7CisgICAgc3RydWN0IHN0cmJ1ZiBjdGxidWY7CisgICAgc3RydWN0IHN0cmJ1ZiBkYXRhYnVmOworICAgIHRfdXNjYWxhcl90IGZsYWdzOwkJCS8qIFVuaXhXYXJlL1NvbGFyaXMgY29tcGF0aWJpbGl0eS4gICovCisgIH07CisKK3N0cnVjdCBzdHJmZGluc2VydAorICB7CisgICAgc3RydWN0IHN0cmJ1ZiBjdGxidWY7CisgICAgc3RydWN0IHN0cmJ1ZiBkYXRhYnVmOworICAgIHRfdXNjYWxhcl90IGZsYWdzOwkJCS8qIFVuaXhXYXJlL1NvbGFyaXMgY29tcGF0aWJpbGl0eS4gICovCisgICAgaW50IGZpbGRlczsKKyAgICBpbnQgb2Zmc2V0OworICB9OworCitzdHJ1Y3Qgc3RyaW9jdGwKKyAgeworICAgIGludCBpY19jbWQ7CisgICAgaW50IGljX3RpbW91dDsKKyAgICBpbnQgaWNfbGVuOworICAgIGNoYXIgKmljX2RwOworICB9OworCitzdHJ1Y3Qgc3RycmVjdmZkCisgIHsKKyAgICBpbnQgZmQ7CisgICAgdWlkX3QgdWlkOworICAgIGdpZF90IGdpZDsKKyAgICBjaGFyIF9fZmlsbFs4XTsJCQkvKiBVbml4V2FyZS9Tb2xhcmlzIGNvbXBhdGliaWxpdHkgKi8KKyAgfTsKKworCitzdHJ1Y3Qgc3RyX21saXN0CisgIHsKKyAgICBjaGFyIGxfbmFtZVtGTU5BTUVTWiArIDFdOworICB9OworCitzdHJ1Y3Qgc3RyX2xpc3QKKyAgeworICAgIGludCBzbF9ubW9kczsKKyAgICBzdHJ1Y3Qgc3RyX21saXN0ICpzbF9tb2RsaXN0OworICB9OworCisjZW5kaWYgLyogYml0cy9zdHJvcHRzLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3N5c19lcnJsaXN0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zeXNfZXJybGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNTU2ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zeXNfZXJybGlzdC5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qIERlY2xhcmUgc3lzX2Vycmxpc3QgYW5kIHN5c19uZXJyLCBvciBkb24ndC4gIENvbXBhdGliaWxpdHkgKGRvKSB2ZXJzaW9uLgorICAgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9TVERJT19ICisjIGVycm9yICJOZXZlciBpbmNsdWRlIDxiaXRzL3N5c19lcnJsaXN0Lmg+IGRpcmVjdGx5OyB1c2UgPHN0ZGlvLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKy8qIHN5c19lcnJsaXN0IGFuZCBzeXNfbmVyciBhcmUgZGVwcmVjYXRlZC4gIFVzZSBzdHJlcnJvciBpbnN0ZWFkLiAgKi8KKworI2lmZGVmICBfX1VTRV9CU0QKK2V4dGVybiBpbnQgc3lzX25lcnI7CitleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJsaXN0W107CisjZW5kaWYKKyNpZmRlZiAgX19VU0VfR05VCitleHRlcm4gaW50IF9zeXNfbmVycjsKK2V4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3QgX3N5c19lcnJsaXN0W107CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3N5c2NhbGwuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3N5c2NhbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mjc3M2QwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc3lzY2FsbC5oCkBAIC0wLDAgKzEsMzM0IEBACisvKiBHZW5lcmF0ZWQgYXQgbGliYyBidWlsZCB0aW1lIGZyb20ga2VybmVsIHN5c2NhbGwgbGlzdC4gICovCisKKyNpZm5kZWYgX1NZU0NBTExfSAorIyBlcnJvciAiTmV2ZXIgdXNlIDxiaXRzL3N5c2NhbGwuaD4gZGlyZWN0bHk7IGluY2x1ZGUgPHN5cy9zeXNjYWxsLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNkZWZpbmUgU1lTX09BQklfU1lTQ0FMTF9CQVNFIF9fTlJfT0FCSV9TWVNDQUxMX0JBU0UKKyNkZWZpbmUgU1lTX1NZU0NBTExfQkFTRSBfX05SX1NZU0NBTExfQkFTRQorI2RlZmluZSBTWVNfX2xsc2VlayBfX05SX19sbHNlZWsKKyNkZWZpbmUgU1lTX19uZXdzZWxlY3QgX19OUl9fbmV3c2VsZWN0CisjZGVmaW5lIFNZU19fc3lzY3RsIF9fTlJfX3N5c2N0bAorI2RlZmluZSBTWVNfYWNjZXB0IF9fTlJfYWNjZXB0CisjZGVmaW5lIFNZU19hY2NlcHQ0IF9fTlJfYWNjZXB0NAorI2RlZmluZSBTWVNfYWNjZXNzIF9fTlJfYWNjZXNzCisjZGVmaW5lIFNZU19hY2N0IF9fTlJfYWNjdAorI2RlZmluZSBTWVNfYWRkX2tleSBfX05SX2FkZF9rZXkKKyNkZWZpbmUgU1lTX2FkanRpbWV4IF9fTlJfYWRqdGltZXgKKyNkZWZpbmUgU1lTX2FybV9mYWR2aXNlNjRfNjQgX19OUl9hcm1fZmFkdmlzZTY0XzY0CisjZGVmaW5lIFNZU19hcm1fc3luY19maWxlX3JhbmdlIF9fTlJfYXJtX3N5bmNfZmlsZV9yYW5nZQorI2RlZmluZSBTWVNfYmRmbHVzaCBfX05SX2JkZmx1c2gKKyNkZWZpbmUgU1lTX2JpbmQgX19OUl9iaW5kCisjZGVmaW5lIFNZU19icmsgX19OUl9icmsKKyNkZWZpbmUgU1lTX2NhcGdldCBfX05SX2NhcGdldAorI2RlZmluZSBTWVNfY2Fwc2V0IF9fTlJfY2Fwc2V0CisjZGVmaW5lIFNZU19jaGRpciBfX05SX2NoZGlyCisjZGVmaW5lIFNZU19jaG1vZCBfX05SX2NobW9kCisjZGVmaW5lIFNZU19jaG93biBfX05SX2Nob3duCisjZGVmaW5lIFNZU19jaG93bjMyIF9fTlJfY2hvd24zMgorI2RlZmluZSBTWVNfY2hyb290IF9fTlJfY2hyb290CisjZGVmaW5lIFNZU19jbG9ja19nZXRyZXMgX19OUl9jbG9ja19nZXRyZXMKKyNkZWZpbmUgU1lTX2Nsb2NrX2dldHRpbWUgX19OUl9jbG9ja19nZXR0aW1lCisjZGVmaW5lIFNZU19jbG9ja19uYW5vc2xlZXAgX19OUl9jbG9ja19uYW5vc2xlZXAKKyNkZWZpbmUgU1lTX2Nsb2NrX3NldHRpbWUgX19OUl9jbG9ja19zZXR0aW1lCisjZGVmaW5lIFNZU19jbG9uZSBfX05SX2Nsb25lCisjZGVmaW5lIFNZU19jbG9zZSBfX05SX2Nsb3NlCisjZGVmaW5lIFNZU19jb25uZWN0IF9fTlJfY29ubmVjdAorI2RlZmluZSBTWVNfY3JlYXQgX19OUl9jcmVhdAorI2RlZmluZSBTWVNfZGVsZXRlX21vZHVsZSBfX05SX2RlbGV0ZV9tb2R1bGUKKyNkZWZpbmUgU1lTX2R1cCBfX05SX2R1cAorI2RlZmluZSBTWVNfZHVwMiBfX05SX2R1cDIKKyNkZWZpbmUgU1lTX2R1cDMgX19OUl9kdXAzCisjZGVmaW5lIFNZU19lcG9sbF9jcmVhdGUgX19OUl9lcG9sbF9jcmVhdGUKKyNkZWZpbmUgU1lTX2Vwb2xsX2NyZWF0ZTEgX19OUl9lcG9sbF9jcmVhdGUxCisjZGVmaW5lIFNZU19lcG9sbF9jdGwgX19OUl9lcG9sbF9jdGwKKyNkZWZpbmUgU1lTX2Vwb2xsX3B3YWl0IF9fTlJfZXBvbGxfcHdhaXQKKyNkZWZpbmUgU1lTX2Vwb2xsX3dhaXQgX19OUl9lcG9sbF93YWl0CisjZGVmaW5lIFNZU19ldmVudGZkIF9fTlJfZXZlbnRmZAorI2RlZmluZSBTWVNfZXZlbnRmZDIgX19OUl9ldmVudGZkMgorI2RlZmluZSBTWVNfZXhlY3ZlIF9fTlJfZXhlY3ZlCisjZGVmaW5lIFNZU19leGl0IF9fTlJfZXhpdAorI2RlZmluZSBTWVNfZXhpdF9ncm91cCBfX05SX2V4aXRfZ3JvdXAKKyNkZWZpbmUgU1lTX2ZhY2Nlc3NhdCBfX05SX2ZhY2Nlc3NhdAorI2RlZmluZSBTWVNfZmFsbG9jYXRlIF9fTlJfZmFsbG9jYXRlCisjZGVmaW5lIFNZU19mYW5vdGlmeV9pbml0IF9fTlJfZmFub3RpZnlfaW5pdAorI2RlZmluZSBTWVNfZmFub3RpZnlfbWFyayBfX05SX2Zhbm90aWZ5X21hcmsKKyNkZWZpbmUgU1lTX2ZjaGRpciBfX05SX2ZjaGRpcgorI2RlZmluZSBTWVNfZmNobW9kIF9fTlJfZmNobW9kCisjZGVmaW5lIFNZU19mY2htb2RhdCBfX05SX2ZjaG1vZGF0CisjZGVmaW5lIFNZU19mY2hvd24gX19OUl9mY2hvd24KKyNkZWZpbmUgU1lTX2ZjaG93bjMyIF9fTlJfZmNob3duMzIKKyNkZWZpbmUgU1lTX2ZjaG93bmF0IF9fTlJfZmNob3duYXQKKyNkZWZpbmUgU1lTX2ZjbnRsIF9fTlJfZmNudGwKKyNkZWZpbmUgU1lTX2ZjbnRsNjQgX19OUl9mY250bDY0CisjZGVmaW5lIFNZU19mZGF0YXN5bmMgX19OUl9mZGF0YXN5bmMKKyNkZWZpbmUgU1lTX2ZnZXR4YXR0ciBfX05SX2ZnZXR4YXR0cgorI2RlZmluZSBTWVNfZmxpc3R4YXR0ciBfX05SX2ZsaXN0eGF0dHIKKyNkZWZpbmUgU1lTX2Zsb2NrIF9fTlJfZmxvY2sKKyNkZWZpbmUgU1lTX2ZvcmsgX19OUl9mb3JrCisjZGVmaW5lIFNZU19mcmVtb3ZleGF0dHIgX19OUl9mcmVtb3ZleGF0dHIKKyNkZWZpbmUgU1lTX2ZzZXR4YXR0ciBfX05SX2ZzZXR4YXR0cgorI2RlZmluZSBTWVNfZnN0YXQgX19OUl9mc3RhdAorI2RlZmluZSBTWVNfZnN0YXQ2NCBfX05SX2ZzdGF0NjQKKyNkZWZpbmUgU1lTX2ZzdGF0YXQ2NCBfX05SX2ZzdGF0YXQ2NAorI2RlZmluZSBTWVNfZnN0YXRmcyBfX05SX2ZzdGF0ZnMKKyNkZWZpbmUgU1lTX2ZzdGF0ZnM2NCBfX05SX2ZzdGF0ZnM2NAorI2RlZmluZSBTWVNfZnN5bmMgX19OUl9mc3luYworI2RlZmluZSBTWVNfZnRydW5jYXRlIF9fTlJfZnRydW5jYXRlCisjZGVmaW5lIFNZU19mdHJ1bmNhdGU2NCBfX05SX2Z0cnVuY2F0ZTY0CisjZGVmaW5lIFNZU19mdXRleCBfX05SX2Z1dGV4CisjZGVmaW5lIFNZU19mdXRpbWVzYXQgX19OUl9mdXRpbWVzYXQKKyNkZWZpbmUgU1lTX2dldF9tZW1wb2xpY3kgX19OUl9nZXRfbWVtcG9saWN5CisjZGVmaW5lIFNZU19nZXRfcm9idXN0X2xpc3QgX19OUl9nZXRfcm9idXN0X2xpc3QKKyNkZWZpbmUgU1lTX2dldGNwdSBfX05SX2dldGNwdQorI2RlZmluZSBTWVNfZ2V0Y3dkIF9fTlJfZ2V0Y3dkCisjZGVmaW5lIFNZU19nZXRkZW50cyBfX05SX2dldGRlbnRzCisjZGVmaW5lIFNZU19nZXRkZW50czY0IF9fTlJfZ2V0ZGVudHM2NAorI2RlZmluZSBTWVNfZ2V0ZWdpZCBfX05SX2dldGVnaWQKKyNkZWZpbmUgU1lTX2dldGVnaWQzMiBfX05SX2dldGVnaWQzMgorI2RlZmluZSBTWVNfZ2V0ZXVpZCBfX05SX2dldGV1aWQKKyNkZWZpbmUgU1lTX2dldGV1aWQzMiBfX05SX2dldGV1aWQzMgorI2RlZmluZSBTWVNfZ2V0Z2lkIF9fTlJfZ2V0Z2lkCisjZGVmaW5lIFNZU19nZXRnaWQzMiBfX05SX2dldGdpZDMyCisjZGVmaW5lIFNZU19nZXRncm91cHMgX19OUl9nZXRncm91cHMKKyNkZWZpbmUgU1lTX2dldGdyb3VwczMyIF9fTlJfZ2V0Z3JvdXBzMzIKKyNkZWZpbmUgU1lTX2dldGl0aW1lciBfX05SX2dldGl0aW1lcgorI2RlZmluZSBTWVNfZ2V0cGVlcm5hbWUgX19OUl9nZXRwZWVybmFtZQorI2RlZmluZSBTWVNfZ2V0cGdpZCBfX05SX2dldHBnaWQKKyNkZWZpbmUgU1lTX2dldHBncnAgX19OUl9nZXRwZ3JwCisjZGVmaW5lIFNZU19nZXRwaWQgX19OUl9nZXRwaWQKKyNkZWZpbmUgU1lTX2dldHBwaWQgX19OUl9nZXRwcGlkCisjZGVmaW5lIFNZU19nZXRwcmlvcml0eSBfX05SX2dldHByaW9yaXR5CisjZGVmaW5lIFNZU19nZXRyZXNnaWQgX19OUl9nZXRyZXNnaWQKKyNkZWZpbmUgU1lTX2dldHJlc2dpZDMyIF9fTlJfZ2V0cmVzZ2lkMzIKKyNkZWZpbmUgU1lTX2dldHJlc3VpZCBfX05SX2dldHJlc3VpZAorI2RlZmluZSBTWVNfZ2V0cmVzdWlkMzIgX19OUl9nZXRyZXN1aWQzMgorI2RlZmluZSBTWVNfZ2V0cnVzYWdlIF9fTlJfZ2V0cnVzYWdlCisjZGVmaW5lIFNZU19nZXRzaWQgX19OUl9nZXRzaWQKKyNkZWZpbmUgU1lTX2dldHNvY2tuYW1lIF9fTlJfZ2V0c29ja25hbWUKKyNkZWZpbmUgU1lTX2dldHNvY2tvcHQgX19OUl9nZXRzb2Nrb3B0CisjZGVmaW5lIFNZU19nZXR0aWQgX19OUl9nZXR0aWQKKyNkZWZpbmUgU1lTX2dldHRpbWVvZmRheSBfX05SX2dldHRpbWVvZmRheQorI2RlZmluZSBTWVNfZ2V0dWlkIF9fTlJfZ2V0dWlkCisjZGVmaW5lIFNZU19nZXR1aWQzMiBfX05SX2dldHVpZDMyCisjZGVmaW5lIFNZU19nZXR4YXR0ciBfX05SX2dldHhhdHRyCisjZGVmaW5lIFNZU19pbml0X21vZHVsZSBfX05SX2luaXRfbW9kdWxlCisjZGVmaW5lIFNZU19pbm90aWZ5X2FkZF93YXRjaCBfX05SX2lub3RpZnlfYWRkX3dhdGNoCisjZGVmaW5lIFNZU19pbm90aWZ5X2luaXQgX19OUl9pbm90aWZ5X2luaXQKKyNkZWZpbmUgU1lTX2lub3RpZnlfaW5pdDEgX19OUl9pbm90aWZ5X2luaXQxCisjZGVmaW5lIFNZU19pbm90aWZ5X3JtX3dhdGNoIF9fTlJfaW5vdGlmeV9ybV93YXRjaAorI2RlZmluZSBTWVNfaW9fY2FuY2VsIF9fTlJfaW9fY2FuY2VsCisjZGVmaW5lIFNZU19pb19kZXN0cm95IF9fTlJfaW9fZGVzdHJveQorI2RlZmluZSBTWVNfaW9fZ2V0ZXZlbnRzIF9fTlJfaW9fZ2V0ZXZlbnRzCisjZGVmaW5lIFNZU19pb19zZXR1cCBfX05SX2lvX3NldHVwCisjZGVmaW5lIFNZU19pb19zdWJtaXQgX19OUl9pb19zdWJtaXQKKyNkZWZpbmUgU1lTX2lvY3RsIF9fTlJfaW9jdGwKKyNkZWZpbmUgU1lTX2lvcHJpb19nZXQgX19OUl9pb3ByaW9fZ2V0CisjZGVmaW5lIFNZU19pb3ByaW9fc2V0IF9fTlJfaW9wcmlvX3NldAorI2RlZmluZSBTWVNfa2V4ZWNfbG9hZCBfX05SX2tleGVjX2xvYWQKKyNkZWZpbmUgU1lTX2tleWN0bCBfX05SX2tleWN0bAorI2RlZmluZSBTWVNfa2lsbCBfX05SX2tpbGwKKyNkZWZpbmUgU1lTX2xjaG93biBfX05SX2xjaG93bgorI2RlZmluZSBTWVNfbGNob3duMzIgX19OUl9sY2hvd24zMgorI2RlZmluZSBTWVNfbGdldHhhdHRyIF9fTlJfbGdldHhhdHRyCisjZGVmaW5lIFNZU19saW5rIF9fTlJfbGluaworI2RlZmluZSBTWVNfbGlua2F0IF9fTlJfbGlua2F0CisjZGVmaW5lIFNZU19saXN0ZW4gX19OUl9saXN0ZW4KKyNkZWZpbmUgU1lTX2xpc3R4YXR0ciBfX05SX2xpc3R4YXR0cgorI2RlZmluZSBTWVNfbGxpc3R4YXR0ciBfX05SX2xsaXN0eGF0dHIKKyNkZWZpbmUgU1lTX2xvb2t1cF9kY29va2llIF9fTlJfbG9va3VwX2Rjb29raWUKKyNkZWZpbmUgU1lTX2xyZW1vdmV4YXR0ciBfX05SX2xyZW1vdmV4YXR0cgorI2RlZmluZSBTWVNfbHNlZWsgX19OUl9sc2VlaworI2RlZmluZSBTWVNfbHNldHhhdHRyIF9fTlJfbHNldHhhdHRyCisjZGVmaW5lIFNZU19sc3RhdCBfX05SX2xzdGF0CisjZGVmaW5lIFNZU19sc3RhdDY0IF9fTlJfbHN0YXQ2NAorI2RlZmluZSBTWVNfbWFkdmlzZSBfX05SX21hZHZpc2UKKyNkZWZpbmUgU1lTX21iaW5kIF9fTlJfbWJpbmQKKyNkZWZpbmUgU1lTX21pbmNvcmUgX19OUl9taW5jb3JlCisjZGVmaW5lIFNZU19ta2RpciBfX05SX21rZGlyCisjZGVmaW5lIFNZU19ta2RpcmF0IF9fTlJfbWtkaXJhdAorI2RlZmluZSBTWVNfbWtub2QgX19OUl9ta25vZAorI2RlZmluZSBTWVNfbWtub2RhdCBfX05SX21rbm9kYXQKKyNkZWZpbmUgU1lTX21sb2NrIF9fTlJfbWxvY2sKKyNkZWZpbmUgU1lTX21sb2NrYWxsIF9fTlJfbWxvY2thbGwKKyNkZWZpbmUgU1lTX21tYXAyIF9fTlJfbW1hcDIKKyNkZWZpbmUgU1lTX21vdW50IF9fTlJfbW91bnQKKyNkZWZpbmUgU1lTX21vdmVfcGFnZXMgX19OUl9tb3ZlX3BhZ2VzCisjZGVmaW5lIFNZU19tcHJvdGVjdCBfX05SX21wcm90ZWN0CisjZGVmaW5lIFNZU19tcV9nZXRzZXRhdHRyIF9fTlJfbXFfZ2V0c2V0YXR0cgorI2RlZmluZSBTWVNfbXFfbm90aWZ5IF9fTlJfbXFfbm90aWZ5CisjZGVmaW5lIFNZU19tcV9vcGVuIF9fTlJfbXFfb3BlbgorI2RlZmluZSBTWVNfbXFfdGltZWRyZWNlaXZlIF9fTlJfbXFfdGltZWRyZWNlaXZlCisjZGVmaW5lIFNZU19tcV90aW1lZHNlbmQgX19OUl9tcV90aW1lZHNlbmQKKyNkZWZpbmUgU1lTX21xX3VubGluayBfX05SX21xX3VubGluaworI2RlZmluZSBTWVNfbXJlbWFwIF9fTlJfbXJlbWFwCisjZGVmaW5lIFNZU19tc2djdGwgX19OUl9tc2djdGwKKyNkZWZpbmUgU1lTX21zZ2dldCBfX05SX21zZ2dldAorI2RlZmluZSBTWVNfbXNncmN2IF9fTlJfbXNncmN2CisjZGVmaW5lIFNZU19tc2dzbmQgX19OUl9tc2dzbmQKKyNkZWZpbmUgU1lTX21zeW5jIF9fTlJfbXN5bmMKKyNkZWZpbmUgU1lTX211bmxvY2sgX19OUl9tdW5sb2NrCisjZGVmaW5lIFNZU19tdW5sb2NrYWxsIF9fTlJfbXVubG9ja2FsbAorI2RlZmluZSBTWVNfbXVubWFwIF9fTlJfbXVubWFwCisjZGVmaW5lIFNZU19uYW5vc2xlZXAgX19OUl9uYW5vc2xlZXAKKyNkZWZpbmUgU1lTX25mc3NlcnZjdGwgX19OUl9uZnNzZXJ2Y3RsCisjZGVmaW5lIFNZU19uaWNlIF9fTlJfbmljZQorI2RlZmluZSBTWVNfb3BlbiBfX05SX29wZW4KKyNkZWZpbmUgU1lTX29wZW5hdCBfX05SX29wZW5hdAorI2RlZmluZSBTWVNfcGF1c2UgX19OUl9wYXVzZQorI2RlZmluZSBTWVNfcGNpY29uZmlnX2lvYmFzZSBfX05SX3BjaWNvbmZpZ19pb2Jhc2UKKyNkZWZpbmUgU1lTX3BjaWNvbmZpZ19yZWFkIF9fTlJfcGNpY29uZmlnX3JlYWQKKyNkZWZpbmUgU1lTX3BjaWNvbmZpZ193cml0ZSBfX05SX3BjaWNvbmZpZ193cml0ZQorI2RlZmluZSBTWVNfcGVyZl9ldmVudF9vcGVuIF9fTlJfcGVyZl9ldmVudF9vcGVuCisjZGVmaW5lIFNZU19wZXJzb25hbGl0eSBfX05SX3BlcnNvbmFsaXR5CisjZGVmaW5lIFNZU19waXBlIF9fTlJfcGlwZQorI2RlZmluZSBTWVNfcGlwZTIgX19OUl9waXBlMgorI2RlZmluZSBTWVNfcGl2b3Rfcm9vdCBfX05SX3Bpdm90X3Jvb3QKKyNkZWZpbmUgU1lTX3BvbGwgX19OUl9wb2xsCisjZGVmaW5lIFNZU19wcG9sbCBfX05SX3Bwb2xsCisjZGVmaW5lIFNZU19wcmN0bCBfX05SX3ByY3RsCisjZGVmaW5lIFNZU19wcmVhZDY0IF9fTlJfcHJlYWQ2NAorI2RlZmluZSBTWVNfcHJlYWR2IF9fTlJfcHJlYWR2CisjZGVmaW5lIFNZU19wcmxpbWl0NjQgX19OUl9wcmxpbWl0NjQKKyNkZWZpbmUgU1lTX3BzZWxlY3Q2IF9fTlJfcHNlbGVjdDYKKyNkZWZpbmUgU1lTX3B0cmFjZSBfX05SX3B0cmFjZQorI2RlZmluZSBTWVNfcHdyaXRlNjQgX19OUl9wd3JpdGU2NAorI2RlZmluZSBTWVNfcHdyaXRldiBfX05SX3B3cml0ZXYKKyNkZWZpbmUgU1lTX3F1b3RhY3RsIF9fTlJfcXVvdGFjdGwKKyNkZWZpbmUgU1lTX3JlYWQgX19OUl9yZWFkCisjZGVmaW5lIFNZU19yZWFkYWhlYWQgX19OUl9yZWFkYWhlYWQKKyNkZWZpbmUgU1lTX3JlYWRsaW5rIF9fTlJfcmVhZGxpbmsKKyNkZWZpbmUgU1lTX3JlYWRsaW5rYXQgX19OUl9yZWFkbGlua2F0CisjZGVmaW5lIFNZU19yZWFkdiBfX05SX3JlYWR2CisjZGVmaW5lIFNZU19yZWJvb3QgX19OUl9yZWJvb3QKKyNkZWZpbmUgU1lTX3JlY3YgX19OUl9yZWN2CisjZGVmaW5lIFNZU19yZWN2ZnJvbSBfX05SX3JlY3Zmcm9tCisjZGVmaW5lIFNZU19yZWN2bW1zZyBfX05SX3JlY3ZtbXNnCisjZGVmaW5lIFNZU19yZWN2bXNnIF9fTlJfcmVjdm1zZworI2RlZmluZSBTWVNfcmVtYXBfZmlsZV9wYWdlcyBfX05SX3JlbWFwX2ZpbGVfcGFnZXMKKyNkZWZpbmUgU1lTX3JlbW92ZXhhdHRyIF9fTlJfcmVtb3ZleGF0dHIKKyNkZWZpbmUgU1lTX3JlbmFtZSBfX05SX3JlbmFtZQorI2RlZmluZSBTWVNfcmVuYW1lYXQgX19OUl9yZW5hbWVhdAorI2RlZmluZSBTWVNfcmVxdWVzdF9rZXkgX19OUl9yZXF1ZXN0X2tleQorI2RlZmluZSBTWVNfcmVzdGFydF9zeXNjYWxsIF9fTlJfcmVzdGFydF9zeXNjYWxsCisjZGVmaW5lIFNZU19ybWRpciBfX05SX3JtZGlyCisjZGVmaW5lIFNZU19ydF9zaWdhY3Rpb24gX19OUl9ydF9zaWdhY3Rpb24KKyNkZWZpbmUgU1lTX3J0X3NpZ3BlbmRpbmcgX19OUl9ydF9zaWdwZW5kaW5nCisjZGVmaW5lIFNZU19ydF9zaWdwcm9jbWFzayBfX05SX3J0X3NpZ3Byb2NtYXNrCisjZGVmaW5lIFNZU19ydF9zaWdxdWV1ZWluZm8gX19OUl9ydF9zaWdxdWV1ZWluZm8KKyNkZWZpbmUgU1lTX3J0X3NpZ3JldHVybiBfX05SX3J0X3NpZ3JldHVybgorI2RlZmluZSBTWVNfcnRfc2lnc3VzcGVuZCBfX05SX3J0X3NpZ3N1c3BlbmQKKyNkZWZpbmUgU1lTX3J0X3NpZ3RpbWVkd2FpdCBfX05SX3J0X3NpZ3RpbWVkd2FpdAorI2RlZmluZSBTWVNfcnRfdGdzaWdxdWV1ZWluZm8gX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbworI2RlZmluZSBTWVNfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXgKKyNkZWZpbmUgU1lTX3NjaGVkX2dldF9wcmlvcml0eV9taW4gX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluCisjZGVmaW5lIFNZU19zY2hlZF9nZXRhZmZpbml0eSBfX05SX3NjaGVkX2dldGFmZmluaXR5CisjZGVmaW5lIFNZU19zY2hlZF9nZXRwYXJhbSBfX05SX3NjaGVkX2dldHBhcmFtCisjZGVmaW5lIFNZU19zY2hlZF9nZXRzY2hlZHVsZXIgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIKKyNkZWZpbmUgU1lTX3NjaGVkX3JyX2dldF9pbnRlcnZhbCBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbAorI2RlZmluZSBTWVNfc2NoZWRfc2V0YWZmaW5pdHkgX19OUl9zY2hlZF9zZXRhZmZpbml0eQorI2RlZmluZSBTWVNfc2NoZWRfc2V0cGFyYW0gX19OUl9zY2hlZF9zZXRwYXJhbQorI2RlZmluZSBTWVNfc2NoZWRfc2V0c2NoZWR1bGVyIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCisjZGVmaW5lIFNZU19zY2hlZF95aWVsZCBfX05SX3NjaGVkX3lpZWxkCisjZGVmaW5lIFNZU19zZW1jdGwgX19OUl9zZW1jdGwKKyNkZWZpbmUgU1lTX3NlbWdldCBfX05SX3NlbWdldAorI2RlZmluZSBTWVNfc2Vtb3AgX19OUl9zZW1vcAorI2RlZmluZSBTWVNfc2VtdGltZWRvcCBfX05SX3NlbXRpbWVkb3AKKyNkZWZpbmUgU1lTX3NlbmQgX19OUl9zZW5kCisjZGVmaW5lIFNZU19zZW5kZmlsZSBfX05SX3NlbmRmaWxlCisjZGVmaW5lIFNZU19zZW5kZmlsZTY0IF9fTlJfc2VuZGZpbGU2NAorI2RlZmluZSBTWVNfc2VuZG1zZyBfX05SX3NlbmRtc2cKKyNkZWZpbmUgU1lTX3NlbmR0byBfX05SX3NlbmR0bworI2RlZmluZSBTWVNfc2V0X21lbXBvbGljeSBfX05SX3NldF9tZW1wb2xpY3kKKyNkZWZpbmUgU1lTX3NldF9yb2J1c3RfbGlzdCBfX05SX3NldF9yb2J1c3RfbGlzdAorI2RlZmluZSBTWVNfc2V0X3RpZF9hZGRyZXNzIF9fTlJfc2V0X3RpZF9hZGRyZXNzCisjZGVmaW5lIFNZU19zZXRkb21haW5uYW1lIF9fTlJfc2V0ZG9tYWlubmFtZQorI2RlZmluZSBTWVNfc2V0ZnNnaWQgX19OUl9zZXRmc2dpZAorI2RlZmluZSBTWVNfc2V0ZnNnaWQzMiBfX05SX3NldGZzZ2lkMzIKKyNkZWZpbmUgU1lTX3NldGZzdWlkIF9fTlJfc2V0ZnN1aWQKKyNkZWZpbmUgU1lTX3NldGZzdWlkMzIgX19OUl9zZXRmc3VpZDMyCisjZGVmaW5lIFNZU19zZXRnaWQgX19OUl9zZXRnaWQKKyNkZWZpbmUgU1lTX3NldGdpZDMyIF9fTlJfc2V0Z2lkMzIKKyNkZWZpbmUgU1lTX3NldGdyb3VwcyBfX05SX3NldGdyb3VwcworI2RlZmluZSBTWVNfc2V0Z3JvdXBzMzIgX19OUl9zZXRncm91cHMzMgorI2RlZmluZSBTWVNfc2V0aG9zdG5hbWUgX19OUl9zZXRob3N0bmFtZQorI2RlZmluZSBTWVNfc2V0aXRpbWVyIF9fTlJfc2V0aXRpbWVyCisjZGVmaW5lIFNZU19zZXRwZ2lkIF9fTlJfc2V0cGdpZAorI2RlZmluZSBTWVNfc2V0cHJpb3JpdHkgX19OUl9zZXRwcmlvcml0eQorI2RlZmluZSBTWVNfc2V0cmVnaWQgX19OUl9zZXRyZWdpZAorI2RlZmluZSBTWVNfc2V0cmVnaWQzMiBfX05SX3NldHJlZ2lkMzIKKyNkZWZpbmUgU1lTX3NldHJlc2dpZCBfX05SX3NldHJlc2dpZAorI2RlZmluZSBTWVNfc2V0cmVzZ2lkMzIgX19OUl9zZXRyZXNnaWQzMgorI2RlZmluZSBTWVNfc2V0cmVzdWlkIF9fTlJfc2V0cmVzdWlkCisjZGVmaW5lIFNZU19zZXRyZXN1aWQzMiBfX05SX3NldHJlc3VpZDMyCisjZGVmaW5lIFNZU19zZXRyZXVpZCBfX05SX3NldHJldWlkCisjZGVmaW5lIFNZU19zZXRyZXVpZDMyIF9fTlJfc2V0cmV1aWQzMgorI2RlZmluZSBTWVNfc2V0cmxpbWl0IF9fTlJfc2V0cmxpbWl0CisjZGVmaW5lIFNZU19zZXRzaWQgX19OUl9zZXRzaWQKKyNkZWZpbmUgU1lTX3NldHNvY2tvcHQgX19OUl9zZXRzb2Nrb3B0CisjZGVmaW5lIFNZU19zZXR0aW1lb2ZkYXkgX19OUl9zZXR0aW1lb2ZkYXkKKyNkZWZpbmUgU1lTX3NldHVpZCBfX05SX3NldHVpZAorI2RlZmluZSBTWVNfc2V0dWlkMzIgX19OUl9zZXR1aWQzMgorI2RlZmluZSBTWVNfc2V0eGF0dHIgX19OUl9zZXR4YXR0cgorI2RlZmluZSBTWVNfc2htYXQgX19OUl9zaG1hdAorI2RlZmluZSBTWVNfc2htY3RsIF9fTlJfc2htY3RsCisjZGVmaW5lIFNZU19zaG1kdCBfX05SX3NobWR0CisjZGVmaW5lIFNZU19zaG1nZXQgX19OUl9zaG1nZXQKKyNkZWZpbmUgU1lTX3NodXRkb3duIF9fTlJfc2h1dGRvd24KKyNkZWZpbmUgU1lTX3NpZ2FjdGlvbiBfX05SX3NpZ2FjdGlvbgorI2RlZmluZSBTWVNfc2lnYWx0c3RhY2sgX19OUl9zaWdhbHRzdGFjaworI2RlZmluZSBTWVNfc2lnbmFsZmQgX19OUl9zaWduYWxmZAorI2RlZmluZSBTWVNfc2lnbmFsZmQ0IF9fTlJfc2lnbmFsZmQ0CisjZGVmaW5lIFNZU19zaWdwZW5kaW5nIF9fTlJfc2lncGVuZGluZworI2RlZmluZSBTWVNfc2lncHJvY21hc2sgX19OUl9zaWdwcm9jbWFzaworI2RlZmluZSBTWVNfc2lncmV0dXJuIF9fTlJfc2lncmV0dXJuCisjZGVmaW5lIFNZU19zaWdzdXNwZW5kIF9fTlJfc2lnc3VzcGVuZAorI2RlZmluZSBTWVNfc29ja2V0IF9fTlJfc29ja2V0CisjZGVmaW5lIFNZU19zb2NrZXRwYWlyIF9fTlJfc29ja2V0cGFpcgorI2RlZmluZSBTWVNfc3BsaWNlIF9fTlJfc3BsaWNlCisjZGVmaW5lIFNZU19zdGF0IF9fTlJfc3RhdAorI2RlZmluZSBTWVNfc3RhdDY0IF9fTlJfc3RhdDY0CisjZGVmaW5lIFNZU19zdGF0ZnMgX19OUl9zdGF0ZnMKKyNkZWZpbmUgU1lTX3N0YXRmczY0IF9fTlJfc3RhdGZzNjQKKyNkZWZpbmUgU1lTX3N3YXBvZmYgX19OUl9zd2Fwb2ZmCisjZGVmaW5lIFNZU19zd2Fwb24gX19OUl9zd2Fwb24KKyNkZWZpbmUgU1lTX3N5bWxpbmsgX19OUl9zeW1saW5rCisjZGVmaW5lIFNZU19zeW1saW5rYXQgX19OUl9zeW1saW5rYXQKKyNkZWZpbmUgU1lTX3N5bmMgX19OUl9zeW5jCisjZGVmaW5lIFNZU19zeW5jX2ZpbGVfcmFuZ2UyIF9fTlJfc3luY19maWxlX3JhbmdlMgorI2RlZmluZSBTWVNfc3lzZnMgX19OUl9zeXNmcworI2RlZmluZSBTWVNfc3lzaW5mbyBfX05SX3N5c2luZm8KKyNkZWZpbmUgU1lTX3N5c2xvZyBfX05SX3N5c2xvZworI2RlZmluZSBTWVNfdGVlIF9fTlJfdGVlCisjZGVmaW5lIFNZU190Z2tpbGwgX19OUl90Z2tpbGwKKyNkZWZpbmUgU1lTX3RpbWVyX2NyZWF0ZSBfX05SX3RpbWVyX2NyZWF0ZQorI2RlZmluZSBTWVNfdGltZXJfZGVsZXRlIF9fTlJfdGltZXJfZGVsZXRlCisjZGVmaW5lIFNZU190aW1lcl9nZXRvdmVycnVuIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1bgorI2RlZmluZSBTWVNfdGltZXJfZ2V0dGltZSBfX05SX3RpbWVyX2dldHRpbWUKKyNkZWZpbmUgU1lTX3RpbWVyX3NldHRpbWUgX19OUl90aW1lcl9zZXR0aW1lCisjZGVmaW5lIFNZU190aW1lcmZkX2NyZWF0ZSBfX05SX3RpbWVyZmRfY3JlYXRlCisjZGVmaW5lIFNZU190aW1lcmZkX2dldHRpbWUgX19OUl90aW1lcmZkX2dldHRpbWUKKyNkZWZpbmUgU1lTX3RpbWVyZmRfc2V0dGltZSBfX05SX3RpbWVyZmRfc2V0dGltZQorI2RlZmluZSBTWVNfdGltZXMgX19OUl90aW1lcworI2RlZmluZSBTWVNfdGtpbGwgX19OUl90a2lsbAorI2RlZmluZSBTWVNfdHJ1bmNhdGUgX19OUl90cnVuY2F0ZQorI2RlZmluZSBTWVNfdHJ1bmNhdGU2NCBfX05SX3RydW5jYXRlNjQKKyNkZWZpbmUgU1lTX3VnZXRybGltaXQgX19OUl91Z2V0cmxpbWl0CisjZGVmaW5lIFNZU191bWFzayBfX05SX3VtYXNrCisjZGVmaW5lIFNZU191bW91bnQyIF9fTlJfdW1vdW50MgorI2RlZmluZSBTWVNfdW5hbWUgX19OUl91bmFtZQorI2RlZmluZSBTWVNfdW5saW5rIF9fTlJfdW5saW5rCisjZGVmaW5lIFNZU191bmxpbmthdCBfX05SX3VubGlua2F0CisjZGVmaW5lIFNZU191bnNoYXJlIF9fTlJfdW5zaGFyZQorI2RlZmluZSBTWVNfdXNlbGliIF9fTlJfdXNlbGliCisjZGVmaW5lIFNZU191c3RhdCBfX05SX3VzdGF0CisjZGVmaW5lIFNZU191dGltZW5zYXQgX19OUl91dGltZW5zYXQKKyNkZWZpbmUgU1lTX3V0aW1lcyBfX05SX3V0aW1lcworI2RlZmluZSBTWVNfdmZvcmsgX19OUl92Zm9yaworI2RlZmluZSBTWVNfdmhhbmd1cCBfX05SX3ZoYW5ndXAKKyNkZWZpbmUgU1lTX3Ztc3BsaWNlIF9fTlJfdm1zcGxpY2UKKyNkZWZpbmUgU1lTX3ZzZXJ2ZXIgX19OUl92c2VydmVyCisjZGVmaW5lIFNZU193YWl0NCBfX05SX3dhaXQ0CisjZGVmaW5lIFNZU193YWl0aWQgX19OUl93YWl0aWQKKyNkZWZpbmUgU1lTX3dyaXRlIF9fTlJfd3JpdGUKKyNkZWZpbmUgU1lTX3dyaXRldiBfX05SX3dyaXRldgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc3lzbG9nLWxkYmwuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3N5c2xvZy1sZGJsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE0ZTcwYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3N5c2xvZy1sZGJsLmgKQEAgLTAsMCArMSwzNiBAQAorLyogLW1sb25nLWRvdWJsZS02NCBjb21wYXRpYmlsaXR5IG1vZGUgZm9yIHN5c2xvZyBmdW5jdGlvbnMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1NZU19TWVNMT0dfSAorIyBlcnJvciAiTmV2ZXIgaW5jbHVkZSA8Yml0cy9zeXNsb2ctbGRibC5oPiBkaXJlY3RseTsgdXNlIDxzeXMvc3lzbG9nLmg+IGluc3RlYWQuIgorI2VuZGlmCisKK19fTERCTF9SRURJUl9ERUNMIChzeXNsb2cpCisKKyNpZmRlZiBfX1VTRV9CU0QKK19fTERCTF9SRURJUl9ERUNMICh2c3lzbG9nKQorI2VuZGlmCisKKyNpZiBfX1VTRV9GT1JUSUZZX0xFVkVMID4gMCAmJiBkZWZpbmVkIF9fZXh0ZXJuX2Fsd2F5c19pbmxpbmUKK19fTERCTF9SRURJUl9ERUNMIChfX3N5c2xvZ19jaGspCisKKyMgaWZkZWYgX19VU0VfQlNECitfX0xEQkxfUkVESVJfREVDTCAoX192c3lzbG9nX2NoaykKKyMgZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvc3lzbG9nLXBhdGguaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3N5c2xvZy1wYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiYmQ2YgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3N5c2xvZy1wYXRoLmgKQEAgLTAsMCArMSwyOSBAQAorLyogPGJpdHMvc3lzbG9nLXBhdGguaD4gLS0gX1BBVEhfTE9HIGRlZmluaXRpb24KKyAgIENvcHlyaWdodCAoQykgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfU1lTX1NZU0xPR19ICisjIGVycm9yICJOZXZlciBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseS4gIFVzZSA8c3lzL3N5c2xvZy5oPiBpbnN0ZWFkIgorI2VuZGlmCisKKyNpZm5kZWYgX0JJVFNfU1lTTE9HX1BBVEhfSAorI2RlZmluZSBfQklUU19TWVNMT0dfUEFUSF9IIDEKKworI2RlZmluZQlfUEFUSF9MT0cJIi9kZXYvbG9nIgorCisjZW5kaWYgLyogYml0cy9zeXNsb2ctcGF0aC5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zeXNsb2cuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3N5c2xvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1M2IzMGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy9zeXNsb2cuaApAQCAtMCwwICsxLDUwIEBACisvKiBDaGVja2luZyBtYWNyb3MgZm9yIHN5c2xvZyBmdW5jdGlvbnMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1NZU19TWVNMT0dfSAorIyBlcnJvciAiTmV2ZXIgaW5jbHVkZSA8Yml0cy9zeXNsb2cuaD4gZGlyZWN0bHk7IHVzZSA8c3lzL3N5c2xvZy5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisKK2V4dGVybiB2b2lkIF9fc3lzbG9nX2NoayAoaW50IF9fcHJpLCBpbnQgX19mbGFnLCBfX2NvbnN0IGNoYXIgKl9fZm10LCAuLi4pCisgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOworCisjaWZkZWYgX192YV9hcmdfcGFjaworX19leHRlcm5fYWx3YXlzX2lubGluZSB2b2lkCitzeXNsb2cgKGludCBfX3ByaSwgX19jb25zdCBjaGFyICpfX2ZtdCwgLi4uKQoreworICByZXR1cm4gX19zeXNsb2dfY2hrIChfX3ByaSwgX19VU0VfRk9SVElGWV9MRVZFTCAtIDEsIF9fZm10LCBfX3ZhX2FyZ19wYWNrICgpKTsKK30KKyNlbGlmICFkZWZpbmVkIF9fY3BsdXNwbHVzCisjIGRlZmluZSBzeXNsb2cocHJpLCAuLi4pIFwKKyAgX19zeXNsb2dfY2hrIChwcmksIF9fVVNFX0ZPUlRJRllfTEVWRUwgLSAxLCBfX1ZBX0FSR1NfXykKKyNlbmRpZgorCisKKyNpZmRlZiBfX1VTRV9CU0QKK2V4dGVybiB2b2lkIF9fdnN5c2xvZ19jaGsgKGludCBfX3ByaSwgaW50IF9fZmxhZywgX19jb25zdCBjaGFyICpfX2ZtdCwKKwkJCSAgIF9fZ251Y192YV9saXN0IF9fYXApCisgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOworCitfX2V4dGVybl9hbHdheXNfaW5saW5lIHZvaWQKK3ZzeXNsb2cgKGludCBfX3ByaSwgX19jb25zdCBjaGFyICpfX2ZtdCwgX19nbnVjX3ZhX2xpc3QgX19hcCkKK3sKKyAgcmV0dXJuIF9fdnN5c2xvZ19jaGsgKF9fcHJpLCAgX19VU0VfRk9SVElGWV9MRVZFTCAtIDEsIF9fZm10LCBfX2FwKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvdGVybWlvcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvdGVybWlvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MWU0YWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy90ZXJtaW9zLmgKQEAgLTAsMCArMSwyMTggQEAKKy8qIHRlcm1pb3MgdHlwZSBhbmQgbWFjcm8gZGVmaW5pdGlvbnMuICBMaW51eCB2ZXJzaW9uLgorICAgQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAzLCAyMDA1CisJRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1RFUk1JT1NfSAorIyBlcnJvciAiTmV2ZXIgaW5jbHVkZSA8Yml0cy90ZXJtaW9zLmg+IGRpcmVjdGx5OyB1c2UgPHRlcm1pb3MuaD4gaW5zdGVhZC4iCisjZW5kaWYKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyCWNjX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlzcGVlZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJdGNmbGFnX3Q7CisKKyNkZWZpbmUgTkNDUyAzMgorc3RydWN0IHRlcm1pb3MKKyAgeworICAgIHRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisgICAgdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisgICAgdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworICAgIHRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisgICAgY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCisgICAgY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCisgICAgc3BlZWRfdCBjX2lzcGVlZDsJCS8qIGlucHV0IHNwZWVkICovCisgICAgc3BlZWRfdCBjX29zcGVlZDsJCS8qIG91dHB1dCBzcGVlZCAqLworI2RlZmluZSBfSEFWRV9TVFJVQ1RfVEVSTUlPU19DX0lTUEVFRCAxCisjZGVmaW5lIF9IQVZFX1NUUlVDVF9URVJNSU9TX0NfT1NQRUVEIDEKKyAgfTsKKworLyogY19jYyBjaGFyYWN0ZXJzICovCisjZGVmaW5lIFZJTlRSIDAKKyNkZWZpbmUgVlFVSVQgMQorI2RlZmluZSBWRVJBU0UgMgorI2RlZmluZSBWS0lMTCAzCisjZGVmaW5lIFZFT0YgNAorI2RlZmluZSBWVElNRSA1CisjZGVmaW5lIFZNSU4gNgorI2RlZmluZSBWU1dUQyA3CisjZGVmaW5lIFZTVEFSVCA4CisjZGVmaW5lIFZTVE9QIDkKKyNkZWZpbmUgVlNVU1AgMTAKKyNkZWZpbmUgVkVPTCAxMQorI2RlZmluZSBWUkVQUklOVCAxMgorI2RlZmluZSBWRElTQ0FSRCAxMworI2RlZmluZSBWV0VSQVNFIDE0CisjZGVmaW5lIFZMTkVYVCAxNQorI2RlZmluZSBWRU9MMiAxNgorCisvKiBjX2lmbGFnIGJpdHMgKi8KKyNkZWZpbmUgSUdOQlJLCTAwMDAwMDEKKyNkZWZpbmUgQlJLSU5UCTAwMDAwMDIKKyNkZWZpbmUgSUdOUEFSCTAwMDAwMDQKKyNkZWZpbmUgUEFSTVJLCTAwMDAwMTAKKyNkZWZpbmUgSU5QQ0sJMDAwMDAyMAorI2RlZmluZSBJU1RSSVAJMDAwMDA0MAorI2RlZmluZSBJTkxDUgkwMDAwMTAwCisjZGVmaW5lIElHTkNSCTAwMDAyMDAKKyNkZWZpbmUgSUNSTkwJMDAwMDQwMAorI2RlZmluZSBJVUNMQwkwMDAxMDAwCisjZGVmaW5lIElYT04JMDAwMjAwMAorI2RlZmluZSBJWEFOWQkwMDA0MDAwCisjZGVmaW5lIElYT0ZGCTAwMTAwMDAKKyNkZWZpbmUgSU1BWEJFTAkwMDIwMDAwCisjZGVmaW5lIElVVEY4CTAwNDAwMDAKKworLyogY19vZmxhZyBiaXRzICovCisjZGVmaW5lIE9QT1NUCTAwMDAwMDEKKyNkZWZpbmUgT0xDVUMJMDAwMDAwMgorI2RlZmluZSBPTkxDUgkwMDAwMDA0CisjZGVmaW5lIE9DUk5MCTAwMDAwMTAKKyNkZWZpbmUgT05PQ1IJMDAwMDAyMAorI2RlZmluZSBPTkxSRVQJMDAwMDA0MAorI2RlZmluZSBPRklMTAkwMDAwMTAwCisjZGVmaW5lIE9GREVMCTAwMDAyMDAKKyNpZiBkZWZpbmVkIF9fVVNFX01JU0MgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTgorIyBkZWZpbmUgTkxETFkJMDAwMDQwMAorIyBkZWZpbmUgICBOTDAJMDAwMDAwMAorIyBkZWZpbmUgICBOTDEJMDAwMDQwMAorIyBkZWZpbmUgQ1JETFkJMDAwMzAwMAorIyBkZWZpbmUgICBDUjAJMDAwMDAwMAorIyBkZWZpbmUgICBDUjEJMDAwMTAwMAorIyBkZWZpbmUgICBDUjIJMDAwMjAwMAorIyBkZWZpbmUgICBDUjMJMDAwMzAwMAorIyBkZWZpbmUgVEFCRExZCTAwMTQwMDAKKyMgZGVmaW5lICAgVEFCMAkwMDAwMDAwCisjIGRlZmluZSAgIFRBQjEJMDAwNDAwMAorIyBkZWZpbmUgICBUQUIyCTAwMTAwMDAKKyMgZGVmaW5lICAgVEFCMwkwMDE0MDAwCisjIGRlZmluZSBCU0RMWQkwMDIwMDAwCisjIGRlZmluZSAgIEJTMAkwMDAwMDAwCisjIGRlZmluZSAgIEJTMQkwMDIwMDAwCisjIGRlZmluZSBGRkRMWQkwMTAwMDAwCisjIGRlZmluZSAgIEZGMAkwMDAwMDAwCisjIGRlZmluZSAgIEZGMQkwMTAwMDAwCisjZW5kaWYKKworI2RlZmluZSBWVERMWQkwMDQwMDAwCisjZGVmaW5lICAgVlQwCTAwMDAwMDAKKyNkZWZpbmUgICBWVDEJMDA0MDAwMAorCisjaWZkZWYgX19VU0VfTUlTQworIyBkZWZpbmUgWFRBQlMJMDAxNDAwMAorI2VuZGlmCisKKy8qIGNfY2ZsYWcgYml0IG1lYW5pbmcgKi8KKyNpZmRlZiBfX1VTRV9NSVNDCisjIGRlZmluZSBDQkFVRAkwMDEwMDE3CisjZW5kaWYKKyNkZWZpbmUgIEIwCTAwMDAwMDAJCS8qIGhhbmcgdXAgKi8KKyNkZWZpbmUgIEI1MAkwMDAwMDAxCisjZGVmaW5lICBCNzUJMDAwMDAwMgorI2RlZmluZSAgQjExMAkwMDAwMDAzCisjZGVmaW5lICBCMTM0CTAwMDAwMDQKKyNkZWZpbmUgIEIxNTAJMDAwMDAwNQorI2RlZmluZSAgQjIwMAkwMDAwMDA2CisjZGVmaW5lICBCMzAwCTAwMDAwMDcKKyNkZWZpbmUgIEI2MDAJMDAwMDAxMAorI2RlZmluZSAgQjEyMDAJMDAwMDAxMQorI2RlZmluZSAgQjE4MDAJMDAwMDAxMgorI2RlZmluZSAgQjI0MDAJMDAwMDAxMworI2RlZmluZSAgQjQ4MDAJMDAwMDAxNAorI2RlZmluZSAgQjk2MDAJMDAwMDAxNQorI2RlZmluZSAgQjE5MjAwCTAwMDAwMTYKKyNkZWZpbmUgIEIzODQwMAkwMDAwMDE3CisjaWZkZWYgX19VU0VfTUlTQworIyBkZWZpbmUgRVhUQSBCMTkyMDAKKyMgZGVmaW5lIEVYVEIgQjM4NDAwCisjZW5kaWYKKyNkZWZpbmUgQ1NJWkUJMDAwMDA2MAorI2RlZmluZSAgIENTNQkwMDAwMDAwCisjZGVmaW5lICAgQ1M2CTAwMDAwMjAKKyNkZWZpbmUgICBDUzcJMDAwMDA0MAorI2RlZmluZSAgIENTOAkwMDAwMDYwCisjZGVmaW5lIENTVE9QQgkwMDAwMTAwCisjZGVmaW5lIENSRUFECTAwMDAyMDAKKyNkZWZpbmUgUEFSRU5CCTAwMDA0MDAKKyNkZWZpbmUgUEFST0RECTAwMDEwMDAKKyNkZWZpbmUgSFVQQ0wJMDAwMjAwMAorI2RlZmluZSBDTE9DQUwJMDAwNDAwMAorI2lmZGVmIF9fVVNFX01JU0MKKyMgZGVmaW5lIENCQVVERVggMDAxMDAwMAorI2VuZGlmCisjZGVmaW5lICBCNTc2MDAgICAwMDEwMDAxCisjZGVmaW5lICBCMTE1MjAwICAwMDEwMDAyCisjZGVmaW5lICBCMjMwNDAwICAwMDEwMDAzCisjZGVmaW5lICBCNDYwODAwICAwMDEwMDA0CisjZGVmaW5lICBCNTAwMDAwICAwMDEwMDA1CisjZGVmaW5lICBCNTc2MDAwICAwMDEwMDA2CisjZGVmaW5lICBCOTIxNjAwICAwMDEwMDA3CisjZGVmaW5lICBCMTAwMDAwMCAwMDEwMDEwCisjZGVmaW5lICBCMTE1MjAwMCAwMDEwMDExCisjZGVmaW5lICBCMTUwMDAwMCAwMDEwMDEyCisjZGVmaW5lICBCMjAwMDAwMCAwMDEwMDEzCisjZGVmaW5lICBCMjUwMDAwMCAwMDEwMDE0CisjZGVmaW5lICBCMzAwMDAwMCAwMDEwMDE1CisjZGVmaW5lICBCMzUwMDAwMCAwMDEwMDE2CisjZGVmaW5lICBCNDAwMDAwMCAwMDEwMDE3CisjZGVmaW5lIF9fTUFYX0JBVUQgQjQwMDAwMDAKKyNpZmRlZiBfX1VTRV9NSVNDCisjIGRlZmluZSBDSUJBVUQJICAwMDIwMDM2MDAwMDAJCS8qIGlucHV0IGJhdWQgcmF0ZSAobm90IHVzZWQpICovCisjIGRlZmluZSBDTVNQQVIgICAwMTAwMDAwMDAwMDAJCS8qIG1hcmsgb3Igc3BhY2UgKHN0aWNrKSBwYXJpdHkgKi8KKyMgZGVmaW5lIENSVFNDVFMgIDAyMDAwMDAwMDAwMAkJLyogZmxvdyBjb250cm9sICovCisjZW5kaWYKKworLyogY19sZmxhZyBiaXRzICovCisjZGVmaW5lIElTSUcJMDAwMDAwMQorI2RlZmluZSBJQ0FOT04JMDAwMDAwMgorI2lmIGRlZmluZWQgX19VU0VfTUlTQyB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOCisjIGRlZmluZSBYQ0FTRQkwMDAwMDA0CisjZW5kaWYKKyNkZWZpbmUgRUNITwkwMDAwMDEwCisjZGVmaW5lIEVDSE9FCTAwMDAwMjAKKyNkZWZpbmUgRUNIT0sJMDAwMDA0MAorI2RlZmluZSBFQ0hPTkwJMDAwMDEwMAorI2RlZmluZSBOT0ZMU0gJMDAwMDIwMAorI2RlZmluZSBUT1NUT1AJMDAwMDQwMAorI2lmZGVmIF9fVVNFX01JU0MKKyMgZGVmaW5lIEVDSE9DVEwgMDAwMTAwMAorIyBkZWZpbmUgRUNIT1BSVCAwMDAyMDAwCisjIGRlZmluZSBFQ0hPS0UJIDAwMDQwMDAKKyMgZGVmaW5lIEZMVVNITwkgMDAxMDAwMAorIyBkZWZpbmUgUEVORElOCSAwMDQwMDAwCisjZW5kaWYKKyNkZWZpbmUgSUVYVEVOCTAxMDAwMDAKKworLyogdGNmbG93KCkgYW5kIFRDWE9OQyB1c2UgdGhlc2UgKi8KKyNkZWZpbmUJVENPT0ZGCQkwCisjZGVmaW5lCVRDT09OCQkxCisjZGVmaW5lCVRDSU9GRgkJMgorI2RlZmluZQlUQ0lPTgkJMworCisvKiB0Y2ZsdXNoKCkgYW5kIFRDRkxTSCB1c2UgdGhlc2UgKi8KKyNkZWZpbmUJVENJRkxVU0gJMAorI2RlZmluZQlUQ09GTFVTSAkxCisjZGVmaW5lCVRDSU9GTFVTSAkyCisKKy8qIHRjc2V0YXR0ciB1c2VzIHRoZXNlICovCisjZGVmaW5lCVRDU0FOT1cJCTAKKyNkZWZpbmUJVENTQURSQUlOCTEKKyNkZWZpbmUJVENTQUZMVVNICTIKKworCisjZGVmaW5lIF9JT1RfdGVybWlvcyAvKiBIdXJkIGlvY3RsIHR5cGUgZmllbGQuICAqLyBcCisgIF9JT1QgKF9JT1RTIChjZmxhZ190KSwgNCwgX0lPVFMgKGNjX3QpLCBOQ0NTLCBfSU9UUyAoc3BlZWRfdCksIDIpCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy90aW1lLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMxODRkMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaApAQCAtMCwwICsxLDc1IEBACisvKiBTeXN0ZW0tZGVwZW5kZW50IHRpbWluZyBkZWZpbml0aW9ucy4gIEdlbmVyaWMgdmVyc2lvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5NiwxOTk3LDE5OTktMjAwMiwyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisvKgorICogTmV2ZXIgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHk7IHVzZSA8dGltZS5oPiBpbnN0ZWFkLgorICovCisKKyNpZm5kZWYgX19uZWVkX3RpbWV2YWwKKyMgaWZuZGVmIF9CSVRTX1RJTUVfSAorIyAgZGVmaW5lIF9CSVRTX1RJTUVfSAkxCisKKy8qIElTTy9JRUMgOTg5OToxOTkwIDcuMTIuMTogPHRpbWUuaD4KKyAgIFRoZSBtYWNybyBgQ0xPQ0tTX1BFUl9TRUMnIGlzIHRoZSBudW1iZXIgcGVyIHNlY29uZCBvZiB0aGUgdmFsdWUKKyAgIHJldHVybmVkIGJ5IHRoZSBgY2xvY2snIGZ1bmN0aW9uLiAqLworLyogQ0FFIFhTSCwgSXNzdWUgNCwgVmVyc2lvbiAyOiA8dGltZS5oPgorICAgVGhlIHZhbHVlIG9mIENMT0NLU19QRVJfU0VDIGlzIHJlcXVpcmVkIHRvIGJlIDEgbWlsbGlvbiBvbiBhbGwKKyAgIFhTSS1jb25mb3JtYW50IHN5c3RlbXMuICovCisjICBkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMgIDEwMDAwMDBsCisKKyMgIGlmICFkZWZpbmVkIF9fU1RSSUNUX0FOU0lfXyAmJiAhZGVmaW5lZCBfX1VTRV9YT1BFTjJLCisvKiBFdmVuIHRob3VnaCBDTE9DS1NfUEVSX1NFQyBoYXMgc3VjaCBhIHN0cmFuZ2UgdmFsdWUgQ0xLX1RDSworICAgcHJlc2VudHMgdGhlIHJlYWwgdmFsdWUgZm9yIGNsb2NrIHRpY2tzIHBlciBzZWNvbmQgZm9yIHRoZSBzeXN0ZW0uICAqLworIyAgIGluY2x1ZGUgPGJpdHMvdHlwZXMuaD4KK2V4dGVybiBsb25nIGludCBfX3N5c2NvbmYgKGludCk7CisjICAgZGVmaW5lIENMS19UQ0sgKChfX2Nsb2NrX3QpIF9fc3lzY29uZiAoMikpCS8qIDIgaXMgX1NDX0NMS19UQ0sgKi8KKyMgIGVuZGlmCisKKyMgIGlmZGVmIF9fVVNFX1BPU0lYMTk5MzA5CisvKiBJZGVudGlmaWVyIGZvciBzeXN0ZW0td2lkZSByZWFsdGltZSBjbG9jay4gICovCisjICAgZGVmaW5lIENMT0NLX1JFQUxUSU1FCQkwCisvKiBNb25vdG9uaWMgc3lzdGVtLXdpZGUgY2xvY2suICAqLworIyAgIGRlZmluZSBDTE9DS19NT05PVE9OSUMJCTEKKy8qIEhpZ2gtcmVzb2x1dGlvbiB0aW1lciBmcm9tIHRoZSBDUFUuICAqLworIyAgIGRlZmluZSBDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQJMgorLyogVGhyZWFkLXNwZWNpZmljIENQVS10aW1lIGNsb2NrLiAgKi8KKyMgICBkZWZpbmUgQ0xPQ0tfVEhSRUFEX0NQVVRJTUVfSUQJMworCisvKiBGbGFnIHRvIGluZGljYXRlIHRpbWUgaXMgYWJzb2x1dGUuICAqLworIyAgIGRlZmluZSBUSU1FUl9BQlNUSU1FCQkxCisjICBlbmRpZgorCisjIGVuZGlmCS8qIGJpdHMvdGltZS5oICovCisjZW5kaWYKKworI2lmZGVmIF9fbmVlZF90aW1ldmFsCisjIHVuZGVmIF9fbmVlZF90aW1ldmFsCisjIGlmbmRlZiBfU1RSVUNUX1RJTUVWQUwKKyMgIGRlZmluZSBfU1RSVUNUX1RJTUVWQUwJMQorIyAgaW5jbHVkZSA8Yml0cy90eXBlcy5oPgorCisvKiBBIHRpbWUgdmFsdWUgdGhhdCBpcyBhY2N1cmF0ZSB0byB0aGUgbmVhcmVzdAorICAgbWljcm9zZWNvbmQgYnV0IGFsc28gaGFzIGEgcmFuZ2Ugb2YgeWVhcnMuICAqLworc3RydWN0IHRpbWV2YWwKKyAgeworICAgIF9fdGltZV90IHR2X3NlYzsJCS8qIFNlY29uZHMuICAqLworICAgIF9fc3VzZWNvbmRzX3QgdHZfdXNlYzsJLyogTWljcm9zZWNvbmRzLiAgKi8KKyAgfTsKKyMgZW5kaWYJLyogc3RydWN0IHRpbWV2YWwgKi8KKyNlbmRpZgkvKiBuZWVkIHRpbWV2YWwgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYmU4MmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oCkBAIC0wLDAgKzEsMTk3IEBACisvKiBiaXRzL3R5cGVzLmggLS0gZGVmaW5pdGlvbnMgb2YgX18qX3QgdHlwZXMgdW5kZXJseWluZyAqX3QgdHlwZXMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qCisgKiBOZXZlciBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseTsgdXNlIDxzeXMvdHlwZXMuaD4gaW5zdGVhZC4KKyAqLworCisjaWZuZGVmCV9CSVRTX1RZUEVTX0gKKyNkZWZpbmUJX0JJVFNfVFlQRVNfSAkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorI2luY2x1ZGUgPGJpdHMvd29yZHNpemUuaD4KKworLyogQ29udmVuaWVuY2UgdHlwZXMuICAqLwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191X3Nob3J0OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX191X2xvbmc7CisKKy8qIEZpeGVkLXNpemUgdHlwZXMsIHVuZGVybHlpbmcgdHlwZXMgZGVwZW5kIG9uIHdvcmQgc2l6ZSBhbmQgY29tcGlsZXIuICAqLwordHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7Cit0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKK3R5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OworI2lmIF9fV09SRFNJWkUgPT0gNjQKK3R5cGVkZWYgc2lnbmVkIGxvbmcgaW50IF9faW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX191aW50NjRfdDsKKyNlbGlmIGRlZmluZWQgX19HTElCQ19IQVZFX0xPTkdfTE9ORworX19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKK19fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWludDY0X3Q7CisjZW5kaWYKKworLyogcXVhZF90IGlzIGFsc28gNjQgYml0cy4gICovCisjaWYgX19XT1JEU0laRSA9PSA2NAordHlwZWRlZiBsb25nIGludCBfX3F1YWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX191X3F1YWRfdDsKKyNlbGlmIGRlZmluZWQgX19HTElCQ19IQVZFX0xPTkdfTE9ORworX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7CitfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90OworI2Vsc2UKK3R5cGVkZWYgc3RydWN0Cit7CisgIGxvbmcgX192YWxbMl07Cit9IF9fcXVhZF90OwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX191X2xvbmcgX192YWxbMl07Cit9IF9fdV9xdWFkX3Q7CisjZW5kaWYKKworCisvKiBUaGUgbWFjaGluZS1kZXBlbmRlbnQgZmlsZSA8Yml0cy90eXBlc2l6ZXMuaD4gZGVmaW5lcyBfXypfVF9UWVBFCisgICBtYWNyb3MgZm9yIGVhY2ggb2YgdGhlIE9TIHR5cGVzIHdlIGRlZmluZSBiZWxvdy4gIFRoZSBkZWZpbml0aW9ucworICAgb2YgdGhvc2UgbWFjcm9zIG11c3QgdXNlIHRoZSBmb2xsb3dpbmcgbWFjcm9zIGZvciB1bmRlcmx5aW5nIHR5cGVzLgorICAgV2UgZGVmaW5lIF9fUzxTSVpFPl9UWVBFIGFuZCBfX1U8U0laRT5fVFlQRSBmb3IgdGhlIHNpZ25lZCBhbmQgdW5zaWduZWQKKyAgIHZhcmlhbnRzIG9mIGVhY2ggb2YgdGhlIGZvbGxvd2luZyBpbnRlZ2VyIHR5cGVzIG9uIHRoaXMgbWFjaGluZS4KKworCTE2CQktLSAibmF0dXJhbCIgMTYtYml0IHR5cGUgKGFsd2F5cyBzaG9ydCkKKwkzMgkJLS0gIm5hdHVyYWwiIDMyLWJpdCB0eXBlIChhbHdheXMgaW50KQorCTY0CQktLSAibmF0dXJhbCIgNjQtYml0IHR5cGUgKGxvbmcgb3IgbG9uZyBsb25nKQorCUxPTkczMgkJLS0gMzItYml0IHR5cGUsIHRyYWRpdGlvbmFsbHkgbG9uZworCVFVQUQJCS0tIDY0LWJpdCB0eXBlLCBhbHdheXMgbG9uZyBsb25nCisJV09SRAkJLS0gbmF0dXJhbCB0eXBlIG9mIF9fV09SRFNJWkUgYml0cyAoaW50IG9yIGxvbmcpCisJTE9OR1dPUkQJLS0gdHlwZSBvZiBfX1dPUkRTSVpFIGJpdHMsIHRyYWRpdGlvbmFsbHkgbG9uZworCisgICBXZSBkaXN0aW5ndWlzaCBXT1JEL0xPTkdXT1JELCAzMi9MT05HMzIsIGFuZCA2NC9RVUFEIHNvIHRoYXQgdGhlCisgICBjb252ZW50aW9uYWwgdXNlcyBvZiBgbG9uZycgb3IgYGxvbmcgbG9uZycgdHlwZSBtb2RpZmllcnMgbWF0Y2ggdGhlCisgICB0eXBlcyB3ZSBkZWZpbmUsIGV2ZW4gd2hlbiBhIGxlc3MtYWRvcm5lZCB0eXBlIHdvdWxkIGJlIHRoZSBzYW1lIHNpemUuCisgICBUaGlzIG1hdHRlcnMgZm9yIChzb21ld2hhdCkgcG9ydGFibHkgd3JpdGluZyBwcmludGYvc2NhbmYgZm9ybWF0cyBmb3IKKyAgIHRoZXNlIHR5cGVzLCB3aGVyZSB1c2luZyB0aGUgYXBwcm9wcmlhdGUgbCBvciBsbCBmb3JtYXQgbW9kaWZpZXJzIGNhbgorICAgbWFrZSB0aGUgdHlwZWRlZnMgYW5kIHRoZSBmb3JtYXRzIG1hdGNoIHVwIGFjcm9zcyBhbGwgR05VIHBsYXRmb3Jtcy4gIElmCisgICB3ZSB1c2VkIGBsb25nJyB3aGVuIGl0J3MgNjQgYml0cyB3aGVyZSBgbG9uZyBsb25nJyBpcyBleHBlY3RlZCwgdGhlbiB0aGUKKyAgIGNvbXBpbGVyIHdvdWxkIHdhcm4gYWJvdXQgdGhlIGZvcm1hdHMgbm90IG1hdGNoaW5nIHRoZSBhcmd1bWVudCB0eXBlcywKKyAgIGFuZCB0aGUgcHJvZ3JhbW1lciBjaGFuZ2luZyB0aGVtIHRvIHNodXQgdXAgdGhlIGNvbXBpbGVyIHdvdWxkIGJyZWFrIHRoZQorICAgcHJvZ3JhbSdzIHBvcnRhYmlsaXR5LgorCisgICBIZXJlIHdlIGFzc3VtZSB3aGF0IGlzIHByZXNlbnRseSB0aGUgY2FzZSBpbiBhbGwgdGhlIEdDQyBjb25maWd1cmF0aW9ucworICAgd2Ugc3VwcG9ydDogbG9uZyBsb25nIGlzIGFsd2F5cyA2NCBiaXRzLCBsb25nIGlzIGFsd2F5cyB3b3JkL2FkZHJlc3Mgc2l6ZSwKKyAgIGFuZCBpbnQgaXMgYWx3YXlzIDMyIGJpdHMuICAqLworCisjZGVmaW5lCV9fUzE2X1RZUEUJCXNob3J0IGludAorI2RlZmluZSBfX1UxNl9UWVBFCQl1bnNpZ25lZCBzaG9ydCBpbnQKKyNkZWZpbmUJX19TMzJfVFlQRQkJaW50CisjZGVmaW5lIF9fVTMyX1RZUEUJCXVuc2lnbmVkIGludAorI2RlZmluZSBfX1NMT05HV09SRF9UWVBFCWxvbmcgaW50CisjZGVmaW5lIF9fVUxPTkdXT1JEX1RZUEUJdW5zaWduZWQgbG9uZyBpbnQKKyNpZiBfX1dPUkRTSVpFID09IDMyCisjIGRlZmluZSBfX1NRVUFEX1RZUEUJCV9fcXVhZF90CisjIGRlZmluZSBfX1VRVUFEX1RZUEUJCV9fdV9xdWFkX3QKKyMgZGVmaW5lIF9fU1dPUkRfVFlQRQkJaW50CisjIGRlZmluZSBfX1VXT1JEX1RZUEUJCXVuc2lnbmVkIGludAorIyBkZWZpbmUgX19TTE9ORzMyX1RZUEUJCWxvbmcgaW50CisjIGRlZmluZSBfX1VMT05HMzJfVFlQRQkJdW5zaWduZWQgbG9uZyBpbnQKKyMgZGVmaW5lIF9fUzY0X1RZUEUJCV9fcXVhZF90CisjIGRlZmluZSBfX1U2NF9UWVBFCQlfX3VfcXVhZF90CisvKiBXZSB3YW50IF9fZXh0ZW5zaW9uX18gYmVmb3JlIHR5cGVkZWYncyB0aGF0IHVzZSBub25zdGFuZGFyZCBiYXNlIHR5cGVzCisgICBzdWNoIGFzIGBsb25nIGxvbmcnIGluIEM4OSBtb2RlLiAgKi8KKyMgZGVmaW5lIF9fU1REX1RZUEUJCV9fZXh0ZW5zaW9uX18gdHlwZWRlZgorI2VsaWYgX19XT1JEU0laRSA9PSA2NAorIyBkZWZpbmUgX19TUVVBRF9UWVBFCQlsb25nIGludAorIyBkZWZpbmUgX19VUVVBRF9UWVBFCQl1bnNpZ25lZCBsb25nIGludAorIyBkZWZpbmUgX19TV09SRF9UWVBFCQlsb25nIGludAorIyBkZWZpbmUgX19VV09SRF9UWVBFCQl1bnNpZ25lZCBsb25nIGludAorIyBkZWZpbmUgX19TTE9ORzMyX1RZUEUJCWludAorIyBkZWZpbmUgX19VTE9ORzMyX1RZUEUJCXVuc2lnbmVkIGludAorIyBkZWZpbmUgX19TNjRfVFlQRQkJbG9uZyBpbnQKKyMgZGVmaW5lIF9fVTY0X1RZUEUJCXVuc2lnbmVkIGxvbmcgaW50CisvKiBObyBuZWVkIHRvIG1hcmsgdGhlIHR5cGVkZWYgd2l0aCBfX2V4dGVuc2lvbl9fLiAgICovCisjIGRlZmluZSBfX1NURF9UWVBFCQl0eXBlZGVmCisjZWxzZQorIyBlcnJvcgorI2VuZGlmCisjaW5jbHVkZSA8Yml0cy90eXBlc2l6ZXMuaD4JLyogRGVmaW5lcyBfXypfVF9UWVBFIG1hY3Jvcy4gICovCisKKworX19TVERfVFlQRSBfX0RFVl9UX1RZUEUgX19kZXZfdDsJLyogVHlwZSBvZiBkZXZpY2UgbnVtYmVycy4gICovCitfX1NURF9UWVBFIF9fVUlEX1RfVFlQRSBfX3VpZF90OwkvKiBUeXBlIG9mIHVzZXIgaWRlbnRpZmljYXRpb25zLiAgKi8KK19fU1REX1RZUEUgX19HSURfVF9UWVBFIF9fZ2lkX3Q7CS8qIFR5cGUgb2YgZ3JvdXAgaWRlbnRpZmljYXRpb25zLiAgKi8KK19fU1REX1RZUEUgX19JTk9fVF9UWVBFIF9faW5vX3Q7CS8qIFR5cGUgb2YgZmlsZSBzZXJpYWwgbnVtYmVycy4gICovCitfX1NURF9UWVBFIF9fSU5PNjRfVF9UWVBFIF9faW5vNjRfdDsJLyogVHlwZSBvZiBmaWxlIHNlcmlhbCBudW1iZXJzIChMRlMpLiovCitfX1NURF9UWVBFIF9fTU9ERV9UX1RZUEUgX19tb2RlX3Q7CS8qIFR5cGUgb2YgZmlsZSBhdHRyaWJ1dGUgYml0bWFza3MuICAqLworX19TVERfVFlQRSBfX05MSU5LX1RfVFlQRSBfX25saW5rX3Q7CS8qIFR5cGUgb2YgZmlsZSBsaW5rIGNvdW50cy4gICovCitfX1NURF9UWVBFIF9fT0ZGX1RfVFlQRSBfX29mZl90OwkvKiBUeXBlIG9mIGZpbGUgc2l6ZXMgYW5kIG9mZnNldHMuICAqLworX19TVERfVFlQRSBfX09GRjY0X1RfVFlQRSBfX29mZjY0X3Q7CS8qIFR5cGUgb2YgZmlsZSBzaXplcyBhbmQgb2Zmc2V0cyAoTEZTKS4gICovCitfX1NURF9UWVBFIF9fUElEX1RfVFlQRSBfX3BpZF90OwkvKiBUeXBlIG9mIHByb2Nlc3MgaWRlbnRpZmljYXRpb25zLiAgKi8KK19fU1REX1RZUEUgX19GU0lEX1RfVFlQRSBfX2ZzaWRfdDsJLyogVHlwZSBvZiBmaWxlIHN5c3RlbSBJRHMuICAqLworX19TVERfVFlQRSBfX0NMT0NLX1RfVFlQRSBfX2Nsb2NrX3Q7CS8qIFR5cGUgb2YgQ1BVIHVzYWdlIGNvdW50cy4gICovCitfX1NURF9UWVBFIF9fUkxJTV9UX1RZUEUgX19ybGltX3Q7CS8qIFR5cGUgZm9yIHJlc291cmNlIG1lYXN1cmVtZW50LiAgKi8KK19fU1REX1RZUEUgX19STElNNjRfVF9UWVBFIF9fcmxpbTY0X3Q7CS8qIFR5cGUgZm9yIHJlc291cmNlIG1lYXN1cmVtZW50IChMRlMpLiAgKi8KK19fU1REX1RZUEUgX19JRF9UX1RZUEUgX19pZF90OwkJLyogR2VuZXJhbCB0eXBlIGZvciBJRHMuICAqLworX19TVERfVFlQRSBfX1RJTUVfVF9UWVBFIF9fdGltZV90OwkvKiBTZWNvbmRzIHNpbmNlIHRoZSBFcG9jaC4gICovCitfX1NURF9UWVBFIF9fVVNFQ09ORFNfVF9UWVBFIF9fdXNlY29uZHNfdDsgLyogQ291bnQgb2YgbWljcm9zZWNvbmRzLiAgKi8KK19fU1REX1RZUEUgX19TVVNFQ09ORFNfVF9UWVBFIF9fc3VzZWNvbmRzX3Q7IC8qIFNpZ25lZCBjb3VudCBvZiBtaWNyb3NlY29uZHMuICAqLworCitfX1NURF9UWVBFIF9fREFERFJfVF9UWVBFIF9fZGFkZHJfdDsJLyogVGhlIHR5cGUgb2YgYSBkaXNrIGFkZHJlc3MuICAqLworX19TVERfVFlQRSBfX1NXQkxLX1RfVFlQRSBfX3N3YmxrX3Q7CS8qIFR5cGUgb2YgYSBzd2FwIGJsb2NrIG1heWJlPyAgKi8KK19fU1REX1RZUEUgX19LRVlfVF9UWVBFIF9fa2V5X3Q7CS8qIFR5cGUgb2YgYW4gSVBDIGtleS4gICovCisKKy8qIENsb2NrIElEIHVzZWQgaW4gY2xvY2sgYW5kIHRpbWVyIGZ1bmN0aW9ucy4gICovCitfX1NURF9UWVBFIF9fQ0xPQ0tJRF9UX1RZUEUgX19jbG9ja2lkX3Q7CisKKy8qIFRpbWVyIElEIHJldHVybmVkIGJ5IGB0aW1lcl9jcmVhdGUnLiAgKi8KK19fU1REX1RZUEUgX19USU1FUl9UX1RZUEUgX190aW1lcl90OworCisvKiBUeXBlIHRvIHJlcHJlc2VudCBibG9jayBzaXplLiAgKi8KK19fU1REX1RZUEUgX19CTEtTSVpFX1RfVFlQRSBfX2Jsa3NpemVfdDsKKworLyogVHlwZXMgZnJvbSB0aGUgTGFyZ2UgRmlsZSBTdXBwb3J0IGludGVyZmFjZS4gICovCisKKy8qIFR5cGUgdG8gY291bnQgbnVtYmVyIG9mIGRpc2sgYmxvY2tzLiAgKi8KK19fU1REX1RZUEUgX19CTEtDTlRfVF9UWVBFIF9fYmxrY250X3Q7CitfX1NURF9UWVBFIF9fQkxLQ05UNjRfVF9UWVBFIF9fYmxrY250NjRfdDsKKworLyogVHlwZSB0byBjb3VudCBmaWxlIHN5c3RlbSBibG9ja3MuICAqLworX19TVERfVFlQRSBfX0ZTQkxLQ05UX1RfVFlQRSBfX2ZzYmxrY250X3Q7CitfX1NURF9UWVBFIF9fRlNCTEtDTlQ2NF9UX1RZUEUgX19mc2Jsa2NudDY0X3Q7CisKKy8qIFR5cGUgdG8gY291bnQgZmlsZSBzeXN0ZW0gbm9kZXMuICAqLworX19TVERfVFlQRSBfX0ZTRklMQ05UX1RfVFlQRSBfX2ZzZmlsY250X3Q7CitfX1NURF9UWVBFIF9fRlNGSUxDTlQ2NF9UX1RZUEUgX19mc2ZpbGNudDY0X3Q7CisKK19fU1REX1RZUEUgX19TU0laRV9UX1RZUEUgX19zc2l6ZV90OyAvKiBUeXBlIG9mIGEgYnl0ZSBjb3VudCwgb3IgZXJyb3IuICAqLworCisvKiBUaGVzZSBmZXcgZG9uJ3QgcmVhbGx5IHZhcnkgYnkgc3lzdGVtLCB0aGV5IGFsd2F5cyBjb3JyZXNwb25kCisgICB0byBvbmUgb2YgdGhlIG90aGVyIGRlZmluZWQgdHlwZXMuICAqLwordHlwZWRlZiBfX29mZjY0X3QgX19sb2ZmX3Q7CS8qIFR5cGUgb2YgZmlsZSBzaXplcyBhbmQgb2Zmc2V0cyAoTEZTKS4gICovCit0eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7Cit0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKKworLyogRHVwbGljYXRlcyBpbmZvIGZyb20gc3RkaW50LmggYnV0IHRoaXMgaXMgdXNlZCBpbiB1bmlzdGQuaC4gICovCitfX1NURF9UWVBFIF9fU1dPUkRfVFlQRSBfX2ludHB0cl90OworCisvKiBEdXBsaWNhdGUgaW5mbyBmcm9tIHN5cy9zb2NrZXQuaC4gICovCitfX1NURF9UWVBFIF9fVTMyX1RZUEUgX19zb2NrbGVuX3Q7CisKKworI3VuZGVmIF9fU1REX1RZUEUKKworI2VuZGlmIC8qIGJpdHMvdHlwZXMuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvdHlwZXNpemVzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy90eXBlc2l6ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTIyNmM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvdHlwZXNpemVzLmgKQEAgLTAsMCArMSw2NiBAQAorLyogYml0cy90eXBlc2l6ZXMuaCAtLSB1bmRlcmx5aW5nIHR5cGVzIGZvciAqX3QuICBHZW5lcmljIHZlcnNpb24uCisgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX0JJVFNfVFlQRVNfSAorIyBlcnJvciAiTmV2ZXIgaW5jbHVkZSA8Yml0cy90eXBlc2l6ZXMuaD4gZGlyZWN0bHk7IHVzZSA8c3lzL3R5cGVzLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYJX0JJVFNfVFlQRVNJWkVTX0gKKyNkZWZpbmUJX0JJVFNfVFlQRVNJWkVTX0gJMQorCisvKiBTZWUgPGJpdHMvdHlwZXMuaD4gZm9yIHRoZSBtZWFuaW5nIG9mIHRoZXNlIG1hY3Jvcy4gIFRoaXMgZmlsZSBleGlzdHMgc28KKyAgIHRoYXQgPGJpdHMvdHlwZXMuaD4gbmVlZCBub3QgdmFyeSBhY3Jvc3MgZGlmZmVyZW50IEdOVSBwbGF0Zm9ybXMuICAqLworCisjZGVmaW5lIF9fREVWX1RfVFlQRQkJX19VUVVBRF9UWVBFCisjZGVmaW5lIF9fVUlEX1RfVFlQRQkJX19VMzJfVFlQRQorI2RlZmluZSBfX0dJRF9UX1RZUEUJCV9fVTMyX1RZUEUKKyNkZWZpbmUgX19JTk9fVF9UWVBFCQlfX1VMT05HV09SRF9UWVBFCisjZGVmaW5lIF9fSU5PNjRfVF9UWVBFCQlfX1VRVUFEX1RZUEUKKyNkZWZpbmUgX19NT0RFX1RfVFlQRQkJX19VMzJfVFlQRQorI2RlZmluZSBfX05MSU5LX1RfVFlQRQkJX19VV09SRF9UWVBFCisjZGVmaW5lIF9fT0ZGX1RfVFlQRQkJX19TTE9OR1dPUkRfVFlQRQorI2RlZmluZSBfX09GRjY0X1RfVFlQRQkJX19TUVVBRF9UWVBFCisjZGVmaW5lIF9fUElEX1RfVFlQRQkJX19TMzJfVFlQRQorI2RlZmluZSBfX1JMSU1fVF9UWVBFCQlfX1VMT05HV09SRF9UWVBFCisjZGVmaW5lIF9fUkxJTTY0X1RfVFlQRQkJX19VUVVBRF9UWVBFCisjZGVmaW5lCV9fQkxLQ05UX1RfVFlQRQkJX19TTE9OR1dPUkRfVFlQRQorI2RlZmluZQlfX0JMS0NOVDY0X1RfVFlQRQlfX1NRVUFEX1RZUEUKKyNkZWZpbmUJX19GU0JMS0NOVF9UX1RZUEUJX19VTE9OR1dPUkRfVFlQRQorI2RlZmluZQlfX0ZTQkxLQ05UNjRfVF9UWVBFCV9fVVFVQURfVFlQRQorI2RlZmluZQlfX0ZTRklMQ05UX1RfVFlQRQlfX1VMT05HV09SRF9UWVBFCisjZGVmaW5lCV9fRlNGSUxDTlQ2NF9UX1RZUEUJX19VUVVBRF9UWVBFCisjZGVmaW5lCV9fSURfVF9UWVBFCQlfX1UzMl9UWVBFCisjZGVmaW5lIF9fQ0xPQ0tfVF9UWVBFCQlfX1NMT05HV09SRF9UWVBFCisjZGVmaW5lIF9fVElNRV9UX1RZUEUJCV9fU0xPTkdXT1JEX1RZUEUKKyNkZWZpbmUgX19VU0VDT05EU19UX1RZUEUJX19VMzJfVFlQRQorI2RlZmluZSBfX1NVU0VDT05EU19UX1RZUEUJX19TTE9OR1dPUkRfVFlQRQorI2RlZmluZSBfX0RBRERSX1RfVFlQRQkJX19TMzJfVFlQRQorI2RlZmluZSBfX1NXQkxLX1RfVFlQRQkJX19TTE9OR1dPUkRfVFlQRQorI2RlZmluZSBfX0tFWV9UX1RZUEUJCV9fUzMyX1RZUEUKKyNkZWZpbmUgX19DTE9DS0lEX1RfVFlQRQlfX1MzMl9UWVBFCisjZGVmaW5lIF9fVElNRVJfVF9UWVBFCQl2b2lkICoKKyNkZWZpbmUgX19CTEtTSVpFX1RfVFlQRQlfX1NMT05HV09SRF9UWVBFCisjZGVmaW5lIF9fRlNJRF9UX1RZUEUJCXN0cnVjdCB7IGludCBfX3ZhbFsyXTsgfQorI2RlZmluZSBfX1NTSVpFX1RfVFlQRQkJX19TV09SRF9UWVBFCisKKy8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyB0aGF0IGNhbiBmaXQgaW4gYW4gYGZkX3NldCcuICAqLworI2RlZmluZQlfX0ZEX1NFVFNJWkUJCTEwMjQKKworCisjZW5kaWYgLyogYml0cy90eXBlc2l6ZXMuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvdWlvLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy91aW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTI4M2VkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvdWlvLmgKQEAgLTAsMCArMSw1MCBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWYgIWRlZmluZWQgX1NZU19VSU9fSCAmJiAhZGVmaW5lZCBfRkNOVExfSAorIyBlcnJvciAiTmV2ZXIgaW5jbHVkZSA8Yml0cy91aW8uaD4gZGlyZWN0bHk7IHVzZSA8c3lzL3Vpby5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9CSVRTX1VJT19ICisjZGVmaW5lIF9CSVRTX1VJT19ICTEKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisKKy8qIFdlIHNob3VsZCBub3JtYWxseSB1c2UgdGhlIExpbnV4IGtlcm5lbCBoZWFkZXIgZmlsZSB0byBkZWZpbmUgdGhpcworICAgdHlwZSBhbmQgbWFjcm9zIGJ1dCB0aGlzIGNhbGxzIGZvciB0cm91YmxlIGJlY2F1c2Ugb2YgdGhlIGhlYWRlcgorICAgaW5jbHVkZXMgb3RoZXIga2VybmVsIGhlYWRlcnMuICAqLworCisvKiBTaXplIG9mIG9iamVjdCB3aGljaCBjYW4gYmUgd3JpdHRlbiBhdG9taWNhbGx5LgorCisgICBUaGlzIG1hY3JvIGhhcyBkaWZmZXJlbnQgdmFsdWVzIGluIGRpZmZlcmVudCBrZXJuZWwgdmVyc2lvbnMuICBUaGUKKyAgIGxhdGVzdCB2ZXJzaW9ucyBvZiB0aGUga2VybmVsIHVzZSAxMDI0IGFuZCB0aGlzIGlzIGdvb2QgY2hvaWNlLiAgU2luY2UKKyAgIHRoZSBDIGxpYnJhcnkgaW1wbGVtZW50YXRpb24gb2YgcmVhZHYvd3JpdGV2IGlzIGFibGUgdG8gZW11bGF0ZSB0aGUKKyAgIGZ1bmN0aW9uYWxpdHkgZXZlbiBpZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcga2VybmVsIGRvZXMgbm90IHN1cHBvcnQKKyAgIHRoaXMgbGFyZ2UgdmFsdWUgdGhlIHJlYWR2L3dyaXRldiBjYWxsIHdpbGwgbm90IGZhaWwgYmVjYXVzZSBvZiB0aGlzLiAgKi8KKyNkZWZpbmUgVUlPX01BWElPVgkxMDI0CisKKworLyogU3RydWN0dXJlIGZvciBzY2F0dGVyL2dhdGhlciBJL08uICAqLworc3RydWN0IGlvdmVjCisgIHsKKyAgICB2b2lkICppb3ZfYmFzZTsJLyogUG9pbnRlciB0byBkYXRhLiAgKi8KKyAgICBzaXplX3QgaW92X2xlbjsJLyogTGVuZ3RoIG9mIGRhdGEuICAqLworICB9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3VuaXN0ZC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvdW5pc3RkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI5YjRjYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3VuaXN0ZC5oCkBAIC0wLDAgKzEsMzg2IEBACisvKiBDaGVja2luZyBtYWNyb3MgZm9yIHVuaXN0ZCBmdW5jdGlvbnMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1VOSVNURF9ICisjIGVycm9yICJOZXZlciBpbmNsdWRlIDxiaXRzL3VuaXN0ZC5oPiBkaXJlY3RseTsgdXNlIDx1bmlzdGQuaD4gaW5zdGVhZC4iCisjZW5kaWYKKworZXh0ZXJuIHNzaXplX3QgX19yZWFkX2NoayAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsCisJCQkgICBzaXplX3QgX19idWZsZW4pIF9fd3VyOworZXh0ZXJuIHNzaXplX3QgX19SRURJUkVDVCAoX19yZWFkX2FsaWFzLCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLAorCQkJCQkgIHNpemVfdCBfX25ieXRlcyksIHJlYWQpIF9fd3VyOworZXh0ZXJuIHNzaXplX3QgX19SRURJUkVDVCAoX19yZWFkX2Noa193YXJuLAorCQkJICAgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzLAorCQkJICAgIHNpemVfdCBfX2J1ZmxlbiksIF9fcmVhZF9jaGspCisgICAgIF9fd3VyIF9fd2FybmF0dHIgKCJyZWFkIGNhbGxlZCB3aXRoIGJpZ2dlciBsZW5ndGggdGhhbiBzaXplIG9mICIKKwkJICAgICAgICJ0aGUgZGVzdGluYXRpb24gYnVmZmVyIik7CisKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgX193dXIgc3NpemVfdAorcmVhZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpCit7CisgIGlmIChfX2JvczAgKF9fYnVmKSAhPSAoc2l6ZV90KSAtMSkKKyAgICB7CisgICAgICBpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wIChfX25ieXRlcykpCisJcmV0dXJuIF9fcmVhZF9jaGsgKF9fZmQsIF9fYnVmLCBfX25ieXRlcywgX19ib3MwIChfX2J1ZikpOworCisgICAgICBpZiAoX19uYnl0ZXMgPiBfX2JvczAgKF9fYnVmKSkKKwlyZXR1cm4gX19yZWFkX2Noa193YXJuIChfX2ZkLCBfX2J1ZiwgX19uYnl0ZXMsIF9fYm9zMCAoX19idWYpKTsKKyAgICB9CisgIHJldHVybiBfX3JlYWRfYWxpYXMgKF9fZmQsIF9fYnVmLCBfX25ieXRlcyk7Cit9CisKKyNpZmRlZiBfX1VTRV9VTklYOTgKK2V4dGVybiBzc2l6ZV90IF9fcHJlYWRfY2hrIChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywKKwkJCSAgICBfX29mZl90IF9fb2Zmc2V0LCBzaXplX3QgX19idWZzaXplKSBfX3d1cjsKK2V4dGVybiBzc2l6ZV90IF9fcHJlYWQ2NF9jaGsgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzLAorCQkJICAgICAgX19vZmY2NF90IF9fb2Zmc2V0LCBzaXplX3QgX19idWZzaXplKSBfX3d1cjsKK2V4dGVybiBzc2l6ZV90IF9fUkVESVJFQ1QgKF9fcHJlYWRfYWxpYXMsCisJCQkgICAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsCisJCQkgICAgX19vZmZfdCBfX29mZnNldCksIHByZWFkKSBfX3d1cjsKK2V4dGVybiBzc2l6ZV90IF9fUkVESVJFQ1QgKF9fcHJlYWQ2NF9hbGlhcywKKwkJCSAgIChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywKKwkJCSAgICBfX29mZjY0X3QgX19vZmZzZXQpLCBwcmVhZDY0KSBfX3d1cjsKK2V4dGVybiBzc2l6ZV90IF9fUkVESVJFQ1QgKF9fcHJlYWRfY2hrX3dhcm4sCisJCQkgICAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsCisJCQkgICAgX19vZmZfdCBfX29mZnNldCwgc2l6ZV90IF9fYnVmc2l6ZSksIF9fcHJlYWRfY2hrKQorICAgICBfX3d1ciBfX3dhcm5hdHRyICgicHJlYWQgY2FsbGVkIHdpdGggYmlnZ2VyIGxlbmd0aCB0aGFuIHNpemUgb2YgIgorCQkgICAgICAgInRoZSBkZXN0aW5hdGlvbiBidWZmZXIiKTsKK2V4dGVybiBzc2l6ZV90IF9fUkVESVJFQ1QgKF9fcHJlYWQ2NF9jaGtfd2FybiwKKwkJCSAgIChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywKKwkJCSAgICBfX29mZjY0X3QgX19vZmZzZXQsIHNpemVfdCBfX2J1ZnNpemUpLAorCQkJICAgIF9fcHJlYWQ2NF9jaGspCisgICAgIF9fd3VyIF9fd2FybmF0dHIgKCJwcmVhZDY0IGNhbGxlZCB3aXRoIGJpZ2dlciBsZW5ndGggdGhhbiBzaXplIG9mICIKKwkJICAgICAgICJ0aGUgZGVzdGluYXRpb24gYnVmZmVyIik7CisKKyMgaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgX193dXIgc3NpemVfdAorcHJlYWQgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzLCBfX29mZl90IF9fb2Zmc2V0KQoreworICBpZiAoX19ib3MwIChfX2J1ZikgIT0gKHNpemVfdCkgLTEpCisgICAgeworICAgICAgaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19uYnl0ZXMpKQorCXJldHVybiBfX3ByZWFkX2NoayAoX19mZCwgX19idWYsIF9fbmJ5dGVzLCBfX29mZnNldCwgX19ib3MwIChfX2J1ZikpOworCisgICAgICBpZiAoIF9fbmJ5dGVzID4gX19ib3MwIChfX2J1ZikpCisJcmV0dXJuIF9fcHJlYWRfY2hrX3dhcm4gKF9fZmQsIF9fYnVmLCBfX25ieXRlcywgX19vZmZzZXQsCisJCQkJIF9fYm9zMCAoX19idWYpKTsKKyAgICB9CisgIHJldHVybiBfX3ByZWFkX2FsaWFzIChfX2ZkLCBfX2J1ZiwgX19uYnl0ZXMsIF9fb2Zmc2V0KTsKK30KKyMgZWxzZQorX19leHRlcm5fYWx3YXlzX2lubGluZSBfX3d1ciBzc2l6ZV90CitwcmVhZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsIF9fb2ZmNjRfdCBfX29mZnNldCkKK3sKKyAgaWYgKF9fYm9zMCAoX19idWYpICE9IChzaXplX3QpIC0xKQorICAgIHsKKyAgICAgIGlmICghX19idWlsdGluX2NvbnN0YW50X3AgKF9fbmJ5dGVzKSkKKwlyZXR1cm4gX19wcmVhZDY0X2NoayAoX19mZCwgX19idWYsIF9fbmJ5dGVzLCBfX29mZnNldCwgX19ib3MwIChfX2J1ZikpOworCisgICAgICBpZiAoIF9fbmJ5dGVzID4gX19ib3MwIChfX2J1ZikpCisJcmV0dXJuIF9fcHJlYWQ2NF9jaGtfd2FybiAoX19mZCwgX19idWYsIF9fbmJ5dGVzLCBfX29mZnNldCwKKwkJCQkgICBfX2JvczAgKF9fYnVmKSk7CisgICAgfQorCisgIHJldHVybiBfX3ByZWFkNjRfYWxpYXMgKF9fZmQsIF9fYnVmLCBfX25ieXRlcywgX19vZmZzZXQpOworfQorIyBlbmRpZgorCisjIGlmZGVmIF9fVVNFX0xBUkdFRklMRTY0CitfX2V4dGVybl9hbHdheXNfaW5saW5lIF9fd3VyIHNzaXplX3QKK3ByZWFkNjQgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzLCBfX29mZjY0X3QgX19vZmZzZXQpCit7CisgIGlmIChfX2JvczAgKF9fYnVmKSAhPSAoc2l6ZV90KSAtMSkKKyAgICB7CisgICAgICBpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wIChfX25ieXRlcykpCisJcmV0dXJuIF9fcHJlYWQ2NF9jaGsgKF9fZmQsIF9fYnVmLCBfX25ieXRlcywgX19vZmZzZXQsIF9fYm9zMCAoX19idWYpKTsKKworICAgICAgaWYgKCBfX25ieXRlcyA+IF9fYm9zMCAoX19idWYpKQorCXJldHVybiBfX3ByZWFkNjRfY2hrX3dhcm4gKF9fZmQsIF9fYnVmLCBfX25ieXRlcywgX19vZmZzZXQsCisJCQkJICAgX19ib3MwIChfX2J1ZikpOworICAgIH0KKworICByZXR1cm4gX19wcmVhZDY0X2FsaWFzIChfX2ZkLCBfX2J1ZiwgX19uYnl0ZXMsIF9fb2Zmc2V0KTsKK30KKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfX1VTRV9CU0QgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTl9FWFRFTkRFRCB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOMksKK2V4dGVybiBzc2l6ZV90IF9fcmVhZGxpbmtfY2hrIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXRoLAorCQkJICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbiwKKwkJCSAgICAgICBzaXplX3QgX19idWZsZW4pCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSwgMikpIF9fd3VyOworZXh0ZXJuIHNzaXplX3QgX19SRURJUkVDVF9OVEggKF9fcmVhZGxpbmtfYWxpYXMsCisJCQkgICAgICAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3BhdGgsCisJCQkJY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSwgcmVhZGxpbmspCisgICAgIF9fbm9ubnVsbCAoKDEsIDIpKSBfX3d1cjsKK2V4dGVybiBzc2l6ZV90IF9fUkVESVJFQ1RfTlRIIChfX3JlYWRsaW5rX2Noa193YXJuLAorCQkJICAgICAgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXRoLAorCQkJCWNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbiwKKwkJCQlzaXplX3QgX19idWZsZW4pLCBfX3JlYWRsaW5rX2NoaykKKyAgICAgX19ub25udWxsICgoMSwgMikpIF9fd3VyIF9fd2FybmF0dHIgKCJyZWFkbGluayBjYWxsZWQgd2l0aCBiaWdnZXIgbGVuZ3RoICIKKwkJCQkJICAidGhhbiBzaXplIG9mIGRlc3RpbmF0aW9uIGJ1ZmZlciIpOworCitfX2V4dGVybl9hbHdheXNfaW5saW5lIF9fbm9ubnVsbCAoKDEsIDIpKSBfX3d1ciBzc2l6ZV90CitfX05USCAocmVhZGxpbmsgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3BhdGgsIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCisJCSBzaXplX3QgX19sZW4pKQoreworICBpZiAoX19ib3MgKF9fYnVmKSAhPSAoc2l6ZV90KSAtMSkKKyAgICB7CisgICAgICBpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wIChfX2xlbikpCisJcmV0dXJuIF9fcmVhZGxpbmtfY2hrIChfX3BhdGgsIF9fYnVmLCBfX2xlbiwgX19ib3MgKF9fYnVmKSk7CisKKyAgICAgIGlmICggX19sZW4gPiBfX2JvcyAoX19idWYpKQorCXJldHVybiBfX3JlYWRsaW5rX2Noa193YXJuIChfX3BhdGgsIF9fYnVmLCBfX2xlbiwgX19ib3MgKF9fYnVmKSk7CisgICAgfQorICByZXR1cm4gX19yZWFkbGlua19hbGlhcyAoX19wYXRoLCBfX2J1ZiwgX19sZW4pOworfQorI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9BVEZJTEUKK2V4dGVybiBzc2l6ZV90IF9fcmVhZGxpbmthdF9jaGsgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXRoLAorCQkJCSBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4sCisJCQkJIHNpemVfdCBfX2J1ZmxlbikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgyLCAzKSkgX193dXI7CitleHRlcm4gc3NpemVfdCBfX1JFRElSRUNUX05USCAoX19yZWFkbGlua2F0X2FsaWFzLAorCQkJICAgICAgIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcGF0aCwKKwkJCQljaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pLAorCQkJICAgICAgIHJlYWRsaW5rYXQpCisgICAgIF9fbm9ubnVsbCAoKDIsIDMpKSBfX3d1cjsKK2V4dGVybiBzc2l6ZV90IF9fUkVESVJFQ1RfTlRIIChfX3JlYWRsaW5rYXRfY2hrX3dhcm4sCisJCQkgICAgICAgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXRoLAorCQkJCWNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbiwKKwkJCQlzaXplX3QgX19idWZsZW4pLCBfX3JlYWRsaW5rYXRfY2hrKQorICAgICBfX25vbm51bGwgKCgyLCAzKSkgX193dXIgX193YXJuYXR0ciAoInJlYWRsaW5rYXQgY2FsbGVkIHdpdGggYmlnZ2VyICIKKwkJCQkJICAibGVuZ3RoIHRoYW4gc2l6ZSBvZiBkZXN0aW5hdGlvbiAiCisJCQkJCSAgImJ1ZmZlciIpOworCitfX2V4dGVybl9hbHdheXNfaW5saW5lIF9fbm9ubnVsbCAoKDIsIDMpKSBfX3d1ciBzc2l6ZV90CitfX05USCAocmVhZGxpbmthdCAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3BhdGgsCisJCSAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikpCit7CisgIGlmIChfX2JvcyAoX19idWYpICE9IChzaXplX3QpIC0xKQorICAgIHsKKyAgICAgIGlmICghX19idWlsdGluX2NvbnN0YW50X3AgKF9fbGVuKSkKKwlyZXR1cm4gX19yZWFkbGlua2F0X2NoayAoX19mZCwgX19wYXRoLCBfX2J1ZiwgX19sZW4sIF9fYm9zIChfX2J1ZikpOworCisgICAgICBpZiAoX19sZW4gPiBfX2JvcyAoX19idWYpKQorCXJldHVybiBfX3JlYWRsaW5rYXRfY2hrX3dhcm4gKF9fZmQsIF9fcGF0aCwgX19idWYsIF9fbGVuLAorCQkJCSAgICAgIF9fYm9zIChfX2J1ZikpOworICAgIH0KKyAgcmV0dXJuIF9fcmVhZGxpbmthdF9hbGlhcyAoX19mZCwgX19wYXRoLCBfX2J1ZiwgX19sZW4pOworfQorI2VuZGlmCisKK2V4dGVybiBjaGFyICpfX2dldGN3ZF9jaGsgKGNoYXIgKl9fYnVmLCBzaXplX3QgX19zaXplLCBzaXplX3QgX19idWZsZW4pCisgICAgIF9fVEhST1cgX193dXI7CitleHRlcm4gY2hhciAqX19SRURJUkVDVF9OVEggKF9fZ2V0Y3dkX2FsaWFzLAorCQkJICAgICAoY2hhciAqX19idWYsIHNpemVfdCBfX3NpemUpLCBnZXRjd2QpIF9fd3VyOworZXh0ZXJuIGNoYXIgKl9fUkVESVJFQ1RfTlRIIChfX2dldGN3ZF9jaGtfd2FybiwKKwkJCSAgICAgKGNoYXIgKl9fYnVmLCBzaXplX3QgX19zaXplLCBzaXplX3QgX19idWZsZW4pLAorCQkJICAgICBfX2dldGN3ZF9jaGspCisgICAgIF9fd3VyIF9fd2FybmF0dHIgKCJnZXRjd2QgY2FsbGVyIHdpdGggYmlnZ2VyIGxlbmd0aCB0aGFuIHNpemUgb2YgIgorCQkgICAgICAgImRlc3RpbmF0aW9uIGJ1ZmZlciIpOworCitfX2V4dGVybl9hbHdheXNfaW5saW5lIF9fd3VyIGNoYXIgKgorX19OVEggKGdldGN3ZCAoY2hhciAqX19idWYsIHNpemVfdCBfX3NpemUpKQoreworICBpZiAoX19ib3MgKF9fYnVmKSAhPSAoc2l6ZV90KSAtMSkKKyAgICB7CisgICAgICBpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wIChfX3NpemUpKQorCXJldHVybiBfX2dldGN3ZF9jaGsgKF9fYnVmLCBfX3NpemUsIF9fYm9zIChfX2J1ZikpOworCisgICAgICBpZiAoX19zaXplID4gX19ib3MgKF9fYnVmKSkKKwlyZXR1cm4gX19nZXRjd2RfY2hrX3dhcm4gKF9fYnVmLCBfX3NpemUsIF9fYm9zIChfX2J1ZikpOworICAgIH0KKyAgcmV0dXJuIF9fZ2V0Y3dkX2FsaWFzIChfX2J1ZiwgX19zaXplKTsKK30KKworI2lmIGRlZmluZWQgX19VU0VfQlNEIHx8IGRlZmluZWQgX19VU0VfWE9QRU5fRVhURU5ERUQKK2V4dGVybiBjaGFyICpfX2dldHdkX2NoayAoY2hhciAqX19idWYsIHNpemVfdCBidWZsZW4pCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpIF9fd3VyOworZXh0ZXJuIGNoYXIgKl9fUkVESVJFQ1RfTlRIIChfX2dldHdkX3dhcm4sIChjaGFyICpfX2J1ZiksIGdldHdkKQorICAgICBfX25vbm51bGwgKCgxKSkgX193dXIgX193YXJuYXR0ciAoInBsZWFzZSB1c2UgZ2V0Y3dkIGluc3RlYWQsIGFzIGdldHdkICIKKwkJCQkgICAgICAgImRvZXNuJ3Qgc3BlY2lmeSBidWZmZXIgc2l6ZSIpOworCitfX2V4dGVybl9hbHdheXNfaW5saW5lIF9fbm9ubnVsbCAoKDEpKSBfX2F0dHJpYnV0ZV9kZXByZWNhdGVkX18gX193dXIgY2hhciAqCitfX05USCAoZ2V0d2QgKGNoYXIgKl9fYnVmKSkKK3sKKyAgaWYgKF9fYm9zIChfX2J1ZikgIT0gKHNpemVfdCkgLTEpCisgICAgcmV0dXJuIF9fZ2V0d2RfY2hrIChfX2J1ZiwgX19ib3MgKF9fYnVmKSk7CisgIHJldHVybiBfX2dldHdkX3dhcm4gKF9fYnVmKTsKK30KKyNlbmRpZgorCitleHRlcm4gc2l6ZV90IF9fY29uZnN0cl9jaGsgKGludCBfX25hbWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19sZW4sCisJCQkgICAgIHNpemVfdCBfX2J1ZmxlbikgX19USFJPVzsKK2V4dGVybiBzaXplX3QgX19SRURJUkVDVF9OVEggKF9fY29uZnN0cl9hbGlhcywgKGludCBfX25hbWUsIGNoYXIgKl9fYnVmLAorCQkJCQkJc2l6ZV90IF9fbGVuKSwgY29uZnN0cik7CitleHRlcm4gc2l6ZV90IF9fUkVESVJFQ1RfTlRIIChfX2NvbmZzdHJfY2hrX3dhcm4sCisJCQkgICAgICAoaW50IF9fbmFtZSwgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbiwKKwkJCSAgICAgICBzaXplX3QgX19idWZsZW4pLCBfX2NvbmZzdHJfY2hrKQorICAgICBfX3dhcm5hdHRyICgiY29uZnN0ciBjYWxsZWQgd2l0aCBiaWdnZXIgbGVuZ3RoIHRoYW4gc2l6ZSBvZiBkZXN0aW5hdGlvbiAiCisJCSAiYnVmZmVyIik7CisKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgc2l6ZV90CitfX05USCAoY29uZnN0ciAoaW50IF9fbmFtZSwgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikpCit7CisgIGlmIChfX2JvcyAoX19idWYpICE9IChzaXplX3QpIC0xKQorICAgIHsKKyAgICAgIGlmICghX19idWlsdGluX2NvbnN0YW50X3AgKF9fbGVuKSkKKwlyZXR1cm4gX19jb25mc3RyX2NoayAoX19uYW1lLCBfX2J1ZiwgX19sZW4sIF9fYm9zIChfX2J1ZikpOworCisgICAgICBpZiAoX19ib3MgKF9fYnVmKSA8IF9fbGVuKQorCXJldHVybiBfX2NvbmZzdHJfY2hrX3dhcm4gKF9fbmFtZSwgX19idWYsIF9fbGVuLCBfX2JvcyAoX19idWYpKTsKKyAgICB9CisgIHJldHVybiBfX2NvbmZzdHJfYWxpYXMgKF9fbmFtZSwgX19idWYsIF9fbGVuKTsKK30KKworCitleHRlcm4gaW50IF9fZ2V0Z3JvdXBzX2NoayAoaW50IF9fc2l6ZSwgX19naWRfdCBfX2xpc3RbXSwgc2l6ZV90IF9fbGlzdGxlbikKKyAgICAgX19USFJPVyBfX3d1cjsKK2V4dGVybiBpbnQgX19SRURJUkVDVF9OVEggKF9fZ2V0Z3JvdXBzX2FsaWFzLCAoaW50IF9fc2l6ZSwgX19naWRfdCBfX2xpc3RbXSksCisJCQkgICBnZXRncm91cHMpIF9fd3VyOworZXh0ZXJuIGludCBfX1JFRElSRUNUX05USCAoX19nZXRncm91cHNfY2hrX3dhcm4sCisJCQkgICAoaW50IF9fc2l6ZSwgX19naWRfdCBfX2xpc3RbXSwgc2l6ZV90IF9fbGlzdGxlbiksCisJCQkgICBfX2dldGdyb3Vwc19jaGspCisgICAgIF9fd3VyIF9fd2FybmF0dHIgKCJnZXRncm91cHMgY2FsbGVkIHdpdGggYmlnZ2VyIGdyb3VwIGNvdW50IHRoYW4gd2hhdCAiCisJCSAgICAgICAiY2FuIGZpdCBpbnRvIGRlc3RpbmF0aW9uIGJ1ZmZlciIpOworCitfX2V4dGVybl9hbHdheXNfaW5saW5lIGludAorX19OVEggKGdldGdyb3VwcyAoaW50IF9fc2l6ZSwgX19naWRfdCBfX2xpc3RbXSkpCit7CisgIGlmIChfX2JvcyAoX19saXN0KSAhPSAoc2l6ZV90KSAtMSkKKyAgICB7CisgICAgICBpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wIChfX3NpemUpIHx8IF9fc2l6ZSA8IDApCisJcmV0dXJuIF9fZ2V0Z3JvdXBzX2NoayAoX19zaXplLCBfX2xpc3QsIF9fYm9zIChfX2xpc3QpKTsKKworICAgICAgaWYgKF9fc2l6ZSAqIHNpemVvZiAoX19naWRfdCkgPiBfX2JvcyAoX19saXN0KSkKKwlyZXR1cm4gX19nZXRncm91cHNfY2hrX3dhcm4gKF9fc2l6ZSwgX19saXN0LCBfX2JvcyAoX19saXN0KSk7CisgICAgfQorICByZXR1cm4gX19nZXRncm91cHNfYWxpYXMgKF9fc2l6ZSwgX19saXN0KTsKK30KKworCitleHRlcm4gaW50IF9fdHR5bmFtZV9yX2NoayAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4sCisJCQkgICAgc2l6ZV90IF9fbnJlYWwpIF9fVEhST1cgX19ub25udWxsICgoMikpOworZXh0ZXJuIGludCBfX1JFRElSRUNUX05USCAoX190dHluYW1lX3JfYWxpYXMsIChpbnQgX19mZCwgY2hhciAqX19idWYsCisJCQkJCSAgICAgICBzaXplX3QgX19idWZsZW4pLCB0dHluYW1lX3IpCisgICAgIF9fbm9ubnVsbCAoKDIpKTsKK2V4dGVybiBpbnQgX19SRURJUkVDVF9OVEggKF9fdHR5bmFtZV9yX2Noa193YXJuLAorCQkJICAgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAorCQkJICAgIHNpemVfdCBfX25yZWFsKSwgX190dHluYW1lX3JfY2hrKQorICAgICBfX25vbm51bGwgKCgyKSkgX193YXJuYXR0ciAoInR0eW5hbWVfciBjYWxsZWQgd2l0aCBiaWdnZXIgYnVmbGVuIHRoYW4gIgorCQkJCSAic2l6ZSBvZiBkZXN0aW5hdGlvbiBidWZmZXIiKTsKKworX19leHRlcm5fYWx3YXlzX2lubGluZSBpbnQKK19fTlRIICh0dHluYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSkKK3sKKyAgaWYgKF9fYm9zIChfX2J1ZikgIT0gKHNpemVfdCkgLTEpCisgICAgeworICAgICAgaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19idWZsZW4pKQorCXJldHVybiBfX3R0eW5hbWVfcl9jaGsgKF9fZmQsIF9fYnVmLCBfX2J1ZmxlbiwgX19ib3MgKF9fYnVmKSk7CisKKyAgICAgIGlmIChfX2J1ZmxlbiA+IF9fYm9zIChfX2J1ZikpCisJcmV0dXJuIF9fdHR5bmFtZV9yX2Noa193YXJuIChfX2ZkLCBfX2J1ZiwgX19idWZsZW4sIF9fYm9zIChfX2J1ZikpOworICAgIH0KKyAgcmV0dXJuIF9fdHR5bmFtZV9yX2FsaWFzIChfX2ZkLCBfX2J1ZiwgX19idWZsZW4pOworfQorCisKKyNpZiBkZWZpbmVkIF9fVVNFX1JFRU5UUkFOVCB8fCBkZWZpbmVkIF9fVVNFX1BPU0lYMTk5NTA2CitleHRlcm4gaW50IF9fZ2V0bG9naW5fcl9jaGsgKGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4sIHNpemVfdCBfX25yZWFsKQorICAgICBfX25vbm51bGwgKCgxKSk7CitleHRlcm4gaW50IF9fUkVESVJFQ1QgKF9fZ2V0bG9naW5fcl9hbGlhcywgKGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pLAorCQkgICAgICAgZ2V0bG9naW5fcikgX19ub25udWxsICgoMSkpOworZXh0ZXJuIGludCBfX1JFRElSRUNUIChfX2dldGxvZ2luX3JfY2hrX3dhcm4sCisJCSAgICAgICAoY2hhciAqX19idWYsIHNpemVfdCBfX2J1Zmxlbiwgc2l6ZV90IF9fbnJlYWwpLAorCQkgICAgICAgX19nZXRsb2dpbl9yX2NoaykKKyAgICAgX19ub25udWxsICgoMSkpIF9fd2FybmF0dHIgKCJnZXRsb2dpbl9yIGNhbGxlZCB3aXRoIGJpZ2dlciBidWZsZW4gdGhhbiAiCisJCQkJICJzaXplIG9mIGRlc3RpbmF0aW9uIGJ1ZmZlciIpOworCitfX2V4dGVybl9hbHdheXNfaW5saW5lIGludAorZ2V0bG9naW5fciAoY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikKK3sKKyAgaWYgKF9fYm9zIChfX2J1ZikgIT0gKHNpemVfdCkgLTEpCisgICAgeworICAgICAgaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19idWZsZW4pKQorCXJldHVybiBfX2dldGxvZ2luX3JfY2hrIChfX2J1ZiwgX19idWZsZW4sIF9fYm9zIChfX2J1ZikpOworCisgICAgICBpZiAoX19idWZsZW4gPiBfX2JvcyAoX19idWYpKQorCXJldHVybiBfX2dldGxvZ2luX3JfY2hrX3dhcm4gKF9fYnVmLCBfX2J1ZmxlbiwgX19ib3MgKF9fYnVmKSk7CisgICAgfQorICByZXR1cm4gX19nZXRsb2dpbl9yX2FsaWFzIChfX2J1ZiwgX19idWZsZW4pOworfQorI2VuZGlmCisKKworI2lmIGRlZmluZWQgX19VU0VfQlNEIHx8IGRlZmluZWQgX19VU0VfVU5JWDk4CitleHRlcm4gaW50IF9fZ2V0aG9zdG5hbWVfY2hrIChjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLCBzaXplX3QgX19ucmVhbCkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CitleHRlcm4gaW50IF9fUkVESVJFQ1RfTlRIIChfX2dldGhvc3RuYW1lX2FsaWFzLCAoY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbiksCisJCQkgICBnZXRob3N0bmFtZSkgX19ub25udWxsICgoMSkpOworZXh0ZXJuIGludCBfX1JFRElSRUNUX05USCAoX19nZXRob3N0bmFtZV9jaGtfd2FybiwKKwkJCSAgIChjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLCBzaXplX3QgX19ucmVhbCksCisJCQkgICBfX2dldGhvc3RuYW1lX2NoaykKKyAgICAgX19ub25udWxsICgoMSkpIF9fd2FybmF0dHIgKCJnZXRob3N0bmFtZSBjYWxsZWQgd2l0aCBiaWdnZXIgYnVmbGVuIHRoYW4gIgorCQkJCSAic2l6ZSBvZiBkZXN0aW5hdGlvbiBidWZmZXIiKTsKKworX19leHRlcm5fYWx3YXlzX2lubGluZSBpbnQKK19fTlRIIChnZXRob3N0bmFtZSAoY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikpCit7CisgIGlmIChfX2JvcyAoX19idWYpICE9IChzaXplX3QpIC0xKQorICAgIHsKKyAgICAgIGlmICghX19idWlsdGluX2NvbnN0YW50X3AgKF9fYnVmbGVuKSkKKwlyZXR1cm4gX19nZXRob3N0bmFtZV9jaGsgKF9fYnVmLCBfX2J1ZmxlbiwgX19ib3MgKF9fYnVmKSk7CisKKyAgICAgIGlmIChfX2J1ZmxlbiA+IF9fYm9zIChfX2J1ZikpCisJcmV0dXJuIF9fZ2V0aG9zdG5hbWVfY2hrX3dhcm4gKF9fYnVmLCBfX2J1ZmxlbiwgX19ib3MgKF9fYnVmKSk7CisgICAgfQorICByZXR1cm4gX19nZXRob3N0bmFtZV9hbGlhcyAoX19idWYsIF9fYnVmbGVuKTsKK30KKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkIF9fVVNFX0JTRCB8fCAoZGVmaW5lZCBfX1VTRV9YT1BFTiAmJiAhZGVmaW5lZCBfX1VTRV9VTklYOTgpCitleHRlcm4gaW50IF9fZ2V0ZG9tYWlubmFtZV9jaGsgKGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4sIHNpemVfdCBfX25yZWFsKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKSBfX3d1cjsKK2V4dGVybiBpbnQgX19SRURJUkVDVF9OVEggKF9fZ2V0ZG9tYWlubmFtZV9hbGlhcywgKGNoYXIgKl9fYnVmLAorCQkJCQkJICAgc2l6ZV90IF9fYnVmbGVuKSwKKwkJCSAgIGdldGRvbWFpbm5hbWUpIF9fbm9ubnVsbCAoKDEpKSBfX3d1cjsKK2V4dGVybiBpbnQgX19SRURJUkVDVF9OVEggKF9fZ2V0ZG9tYWlubmFtZV9jaGtfd2FybiwKKwkJCSAgIChjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLCBzaXplX3QgX19ucmVhbCksCisJCQkgICBfX2dldGRvbWFpbm5hbWVfY2hrKQorICAgICBfX25vbm51bGwgKCgxKSkgX193dXIgX193YXJuYXR0ciAoImdldGRvbWFpbm5hbWUgY2FsbGVkIHdpdGggYmlnZ2VyICIKKwkJCQkgICAgICAgImJ1ZmxlbiB0aGFuIHNpemUgb2YgZGVzdGluYXRpb24gIgorCQkJCSAgICAgICAiYnVmZmVyIik7CisKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgaW50CitfX05USCAoZ2V0ZG9tYWlubmFtZSAoY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikpCit7CisgIGlmIChfX2JvcyAoX19idWYpICE9IChzaXplX3QpIC0xKQorICAgIHsKKyAgICAgIGlmICghX19idWlsdGluX2NvbnN0YW50X3AgKF9fYnVmbGVuKSkKKwlyZXR1cm4gX19nZXRkb21haW5uYW1lX2NoayAoX19idWYsIF9fYnVmbGVuLCBfX2JvcyAoX19idWYpKTsKKworICAgICAgaWYgKF9fYnVmbGVuID4gX19ib3MgKF9fYnVmKSkKKwlyZXR1cm4gX19nZXRkb21haW5uYW1lX2Noa193YXJuIChfX2J1ZiwgX19idWZsZW4sIF9fYm9zIChfX2J1ZikpOworICAgIH0KKyAgcmV0dXJuIF9fZ2V0ZG9tYWlubmFtZV9hbGlhcyAoX19idWYsIF9fYnVmbGVuKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvdXN0YXQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3VzdGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjljNmI3MgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3VzdGF0LmgKQEAgLTAsMCArMSwzMSBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk3LCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9TWVNfVVNUQVRfSAorIyBlcnJvciAiTmV2ZXIgaW5jbHVkZSA8Yml0cy91c3RhdC5oPiBkaXJlY3RseTsgdXNlIDxzeXMvdXN0YXQuaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCitzdHJ1Y3QgdXN0YXQKKyAgeworICAgIF9fZGFkZHJfdCBmX3RmcmVlOwkJLyogTnVtYmVyIG9mIGZyZWUgYmxvY2tzLiAgKi8KKyAgICBfX2lub190IGZfdGlub2RlOwkJLyogTnVtYmVyIG9mIGZyZWUgaW5vZGVzLiAgKi8KKyAgICBjaGFyIGZfZm5hbWVbNl07CisgICAgY2hhciBmX2ZwYWNrWzZdOworICB9OwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvdXRtcC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvdXRtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NTVhZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy91dG1wLmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qIFRoZSBgc3RydWN0IHV0bXAnIHR5cGUsIGRlc2NyaWJpbmcgZW50cmllcyBpbiB0aGUgdXRtcCBmaWxlLiAgR05VIHZlcnNpb24uCisgICBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDIKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9VVE1QX0gKKyMgZXJyb3IgIk5ldmVyIGluY2x1ZGUgPGJpdHMvdXRtcC5oPiBkaXJlY3RseTsgdXNlIDx1dG1wLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpbmNsdWRlIDxwYXRocy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8Yml0cy93b3Jkc2l6ZS5oPgorCisKKyNkZWZpbmUgVVRfTElORVNJWkUJMzIKKyNkZWZpbmUgVVRfTkFNRVNJWkUJMzIKKyNkZWZpbmUgVVRfSE9TVFNJWkUJMjU2CisKKworLyogVGhlIHN0cnVjdHVyZSBkZXNjcmliaW5nIGFuIGVudHJ5IGluIHRoZSBkYXRhYmFzZSBvZgorICAgcHJldmlvdXMgbG9naW5zLiAgKi8KK3N0cnVjdCBsYXN0bG9nCisgIHsKKyNpZiBfX1dPUkRTSVpFID09IDY0ICYmIGRlZmluZWQgX19XT1JEU0laRV9DT01QQVQzMgorICAgIGludDMyX3QgbGxfdGltZTsKKyNlbHNlCisgICAgX190aW1lX3QgbGxfdGltZTsKKyNlbmRpZgorICAgIGNoYXIgbGxfbGluZVtVVF9MSU5FU0laRV07CisgICAgY2hhciBsbF9ob3N0W1VUX0hPU1RTSVpFXTsKKyAgfTsKKworCisvKiBUaGUgc3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIHN0YXR1cyBvZiBhIHRlcm1pbmF0ZWQgcHJvY2Vzcy4gIFRoaXMKKyAgIHR5cGUgaXMgdXNlZCBpbiBgc3RydWN0IHV0bXAnIGJlbG93LiAgKi8KK3N0cnVjdCBleGl0X3N0YXR1cworICB7CisgICAgc2hvcnQgaW50IGVfdGVybWluYXRpb247CS8qIFByb2Nlc3MgdGVybWluYXRpb24gc3RhdHVzLiAgKi8KKyAgICBzaG9ydCBpbnQgZV9leGl0OwkJLyogUHJvY2VzcyBleGl0IHN0YXR1cy4gICovCisgIH07CisKKworLyogVGhlIHN0cnVjdHVyZSBkZXNjcmliaW5nIGFuIGVudHJ5IGluIHRoZSB1c2VyIGFjY291bnRpbmcgZGF0YWJhc2UuICAqLworc3RydWN0IHV0bXAKK3sKKyAgc2hvcnQgaW50IHV0X3R5cGU7CQkvKiBUeXBlIG9mIGxvZ2luLiAgKi8KKyAgcGlkX3QgdXRfcGlkOwkJCS8qIFByb2Nlc3MgSUQgb2YgbG9naW4gcHJvY2Vzcy4gICovCisgIGNoYXIgdXRfbGluZVtVVF9MSU5FU0laRV07CS8qIERldmljZW5hbWUuICAqLworICBjaGFyIHV0X2lkWzRdOwkJLyogSW5pdHRhYiBJRC4gICovCisgIGNoYXIgdXRfdXNlcltVVF9OQU1FU0laRV07CS8qIFVzZXJuYW1lLiAgKi8KKyAgY2hhciB1dF9ob3N0W1VUX0hPU1RTSVpFXTsJLyogSG9zdG5hbWUgZm9yIHJlbW90ZSBsb2dpbi4gICovCisgIHN0cnVjdCBleGl0X3N0YXR1cyB1dF9leGl0OwkvKiBFeGl0IHN0YXR1cyBvZiBhIHByb2Nlc3MgbWFya2VkCisJCQkJICAgYXMgREVBRF9QUk9DRVNTLiAgKi8KKy8qIFRoZSB1dF9zZXNzaW9uIGFuZCB1dF90diBmaWVsZHMgbXVzdCBiZSB0aGUgc2FtZSBzaXplIHdoZW4gY29tcGlsZWQKKyAgIDMyLSBhbmQgNjQtYml0LiAgVGhpcyBhbGxvd3MgZGF0YSBmaWxlcyBhbmQgc2hhcmVkIG1lbW9yeSB0byBiZQorICAgc2hhcmVkIGJldHdlZW4gMzItIGFuZCA2NC1iaXQgYXBwbGljYXRpb25zLiAgKi8KKyNpZiBfX1dPUkRTSVpFID09IDY0ICYmIGRlZmluZWQgX19XT1JEU0laRV9DT01QQVQzMgorICBpbnQzMl90IHV0X3Nlc3Npb247CQkvKiBTZXNzaW9uIElELCB1c2VkIGZvciB3aW5kb3dpbmcuICAqLworICBzdHJ1Y3QKKyAgeworICAgIGludDMyX3QgdHZfc2VjOwkJLyogU2Vjb25kcy4gICovCisgICAgaW50MzJfdCB0dl91c2VjOwkJLyogTWljcm9zZWNvbmRzLiAgKi8KKyAgfSB1dF90djsJCQkvKiBUaW1lIGVudHJ5IHdhcyBtYWRlLiAgKi8KKyNlbHNlCisgIGxvbmcgaW50IHV0X3Nlc3Npb247CQkvKiBTZXNzaW9uIElELCB1c2VkIGZvciB3aW5kb3dpbmcuICAqLworICBzdHJ1Y3QgdGltZXZhbCB1dF90djsJCS8qIFRpbWUgZW50cnkgd2FzIG1hZGUuICAqLworI2VuZGlmCisKKyAgaW50MzJfdCB1dF9hZGRyX3Y2WzRdOwkvKiBJbnRlcm5ldCBhZGRyZXNzIG9mIHJlbW90ZSBob3N0LiAgKi8KKyAgY2hhciBfX3VudXNlZFsyMF07CQkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gICovCit9OworCisvKiBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBoYWNrcy4gICovCisjZGVmaW5lIHV0X25hbWUJCXV0X3VzZXIKKyNpZm5kZWYgX05PX1VUX1RJTUUKKy8qIFdlIGhhdmUgYSBwcm9ibGVtIGhlcmU6IGB1dF90aW1lJyBpcyBhbHNvIHVzZWQgb3RoZXJ3aXNlLiAgRGVmaW5lCisgICBfTk9fVVRfVElNRSBpZiB0aGUgY29tcGlsZXIgY29tcGxhaW5zLiAgKi8KKyMgZGVmaW5lIHV0X3RpbWUJdXRfdHYudHZfc2VjCisjZW5kaWYKKyNkZWZpbmUgdXRfeHRpbWUJdXRfdHYudHZfc2VjCisjZGVmaW5lIHV0X2FkZHIJCXV0X2FkZHJfdjZbMF0KKworCisvKiBWYWx1ZXMgZm9yIHRoZSBgdXRfdHlwZScgZmllbGQgb2YgYSBgc3RydWN0IHV0bXAnLiAgKi8KKyNkZWZpbmUgRU1QVFkJCTAJLyogTm8gdmFsaWQgdXNlciBhY2NvdW50aW5nIGluZm9ybWF0aW9uLiAgKi8KKworI2RlZmluZSBSVU5fTFZMCQkxCS8qIFRoZSBzeXN0ZW0ncyBydW5sZXZlbC4gICovCisjZGVmaW5lIEJPT1RfVElNRQkyCS8qIFRpbWUgb2Ygc3lzdGVtIGJvb3QuICAqLworI2RlZmluZSBORVdfVElNRQkzCS8qIFRpbWUgYWZ0ZXIgc3lzdGVtIGNsb2NrIGNoYW5nZWQuICAqLworI2RlZmluZSBPTERfVElNRQk0CS8qIFRpbWUgd2hlbiBzeXN0ZW0gY2xvY2sgY2hhbmdlZC4gICovCisKKyNkZWZpbmUgSU5JVF9QUk9DRVNTCTUJLyogUHJvY2VzcyBzcGF3bmVkIGJ5IHRoZSBpbml0IHByb2Nlc3MuICAqLworI2RlZmluZSBMT0dJTl9QUk9DRVNTCTYJLyogU2Vzc2lvbiBsZWFkZXIgb2YgYSBsb2dnZWQgaW4gdXNlci4gICovCisjZGVmaW5lIFVTRVJfUFJPQ0VTUwk3CS8qIE5vcm1hbCBwcm9jZXNzLiAgKi8KKyNkZWZpbmUgREVBRF9QUk9DRVNTCTgJLyogVGVybWluYXRlZCBwcm9jZXNzLiAgKi8KKworI2RlZmluZSBBQ0NPVU5USU5HCTkKKworLyogT2xkIExpbnV4IG5hbWUgZm9yIHRoZSBFTVBUWSB0eXBlLiAgKi8KKyNkZWZpbmUgVVRfVU5LTk9XTglFTVBUWQorCisKKy8qIFRlbGwgdGhlIHVzZXIgdGhhdCB3ZSBoYXZlIGEgbW9kZXJuIHN5c3RlbSB3aXRoIFVUX0hPU1QsIFVUX1BJRCwKKyAgIFVUX1RZUEUsIFVUX0lEIGFuZCBVVF9UViBmaWVsZHMuICAqLworI2RlZmluZSBfSEFWRV9VVF9UWVBFCTEKKyNkZWZpbmUgX0hBVkVfVVRfUElECTEKKyNkZWZpbmUgX0hBVkVfVVRfSUQJMQorI2RlZmluZSBfSEFWRV9VVF9UVgkxCisjZGVmaW5lIF9IQVZFX1VUX0hPU1QJMQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvdXRtcHguaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3V0bXB4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg0Y2RhNgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3V0bXB4LmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qIFN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIGZvciB0aGUgdXNlciBhY2NvdW50aW5nIGRhdGFiYXNlLiAgR05VIHZlcnNpb24uCisgICBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDIwMDAsIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1VUTVBYX0gKKyMgZXJyb3IgIk5ldmVyIGluY2x1ZGUgPGJpdHMvdXRtcHguaD4gZGlyZWN0bHk7IHVzZSA8dXRtcHguaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2luY2x1ZGUgPGJpdHMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPGJpdHMvd29yZHNpemUuaD4KKworCisjaWZkZWYgX19VU0VfR05VCisjIGluY2x1ZGUgPHBhdGhzLmg+CisjIGRlZmluZSBfUEFUSF9VVE1QWAlfUEFUSF9VVE1QCisjIGRlZmluZSBfUEFUSF9XVE1QWAlfUEFUSF9XVE1QCisjZW5kaWYKKworCisjZGVmaW5lIF9fVVRfTElORVNJWkUJMzIKKyNkZWZpbmUgX19VVF9OQU1FU0laRQkzMgorI2RlZmluZSBfX1VUX0hPU1RTSVpFCTI1NgorCisKKy8qIFRoZSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgc3RhdHVzIG9mIGEgdGVybWluYXRlZCBwcm9jZXNzLiAgVGhpcworICAgdHlwZSBpcyB1c2VkIGluIGBzdHJ1Y3QgdXRtcHgnIGJlbG93LiAgKi8KK3N0cnVjdCBfX2V4aXRfc3RhdHVzCisgIHsKKyNpZmRlZiBfX1VTRV9HTlUKKyAgICBzaG9ydCBpbnQgZV90ZXJtaW5hdGlvbjsJLyogUHJvY2VzcyB0ZXJtaW5hdGlvbiBzdGF0dXMuICAqLworICAgIHNob3J0IGludCBlX2V4aXQ7CQkvKiBQcm9jZXNzIGV4aXQgc3RhdHVzLiAgKi8KKyNlbHNlCisgICAgc2hvcnQgaW50IF9fZV90ZXJtaW5hdGlvbjsJLyogUHJvY2VzcyB0ZXJtaW5hdGlvbiBzdGF0dXMuICAqLworICAgIHNob3J0IGludCBfX2VfZXhpdDsJCS8qIFByb2Nlc3MgZXhpdCBzdGF0dXMuICAqLworI2VuZGlmCisgIH07CisKKworLyogVGhlIHN0cnVjdHVyZSBkZXNjcmliaW5nIGFuIGVudHJ5IGluIHRoZSB1c2VyIGFjY291bnRpbmcgZGF0YWJhc2UuICAqLworc3RydWN0IHV0bXB4Cit7CisgIHNob3J0IGludCB1dF90eXBlOwkJLyogVHlwZSBvZiBsb2dpbi4gICovCisgIF9fcGlkX3QgdXRfcGlkOwkJLyogUHJvY2VzcyBJRCBvZiBsb2dpbiBwcm9jZXNzLiAgKi8KKyAgY2hhciB1dF9saW5lW19fVVRfTElORVNJWkVdOwkvKiBEZXZpY2VuYW1lLiAgKi8KKyAgY2hhciB1dF9pZFs0XTsJCS8qIEluaXR0YWIgSUQuICovCisgIGNoYXIgdXRfdXNlcltfX1VUX05BTUVTSVpFXTsJLyogVXNlcm5hbWUuICAqLworICBjaGFyIHV0X2hvc3RbX19VVF9IT1NUU0laRV07CS8qIEhvc3RuYW1lIGZvciByZW1vdGUgbG9naW4uICAqLworICBzdHJ1Y3QgX19leGl0X3N0YXR1cyB1dF9leGl0OwkvKiBFeGl0IHN0YXR1cyBvZiBhIHByb2Nlc3MgbWFya2VkCisJCQkJICAgYXMgREVBRF9QUk9DRVNTLiAgKi8KKworLyogVGhlIGZpZWxkcyB1dF9zZXNzaW9uIGFuZCB1dF90diBtdXN0IGJlIHRoZSBzYW1lIHNpemUgd2hlbiBjb21waWxlZAorICAgMzItIGFuZCA2NC1iaXQuICBUaGlzIGFsbG93cyBmaWxlcyBhbmQgc2hhcmVkIG1lbW9yeSB0byBiZSBzaGFyZWQKKyAgIGJldHdlZW4gMzItIGFuZCA2NC1iaXQgYXBwbGljYXRpb25zLiAgKi8KKyNpZiBfX1dPUkRTSVpFID09IDY0ICYmIGRlZmluZWQgX19XT1JEU0laRV9DT01QQVQzMgorICBfX2ludDMyX3QgdXRfc2Vzc2lvbjsJCS8qIFNlc3Npb24gSUQsIHVzZWQgZm9yIHdpbmRvd2luZy4gICovCisgIHN0cnVjdAorICB7CisgICAgX19pbnQzMl90IHR2X3NlYzsJCS8qIFNlY29uZHMuICAqLworICAgIF9faW50MzJfdCB0dl91c2VjOwkJLyogTWljcm9zZWNvbmRzLiAgKi8KKyAgfSB1dF90djsJCQkvKiBUaW1lIGVudHJ5IHdhcyBtYWRlLiAgKi8KKyNlbHNlCisgIGxvbmcgaW50IHV0X3Nlc3Npb247CQkvKiBTZXNzaW9uIElELCB1c2VkIGZvciB3aW5kb3dpbmcuICAqLworICBzdHJ1Y3QgdGltZXZhbCB1dF90djsJCS8qIFRpbWUgZW50cnkgd2FzIG1hZGUuICAqLworI2VuZGlmCisgIF9faW50MzJfdCB1dF9hZGRyX3Y2WzRdOwkvKiBJbnRlcm5ldCBhZGRyZXNzIG9mIHJlbW90ZSBob3N0LiAgKi8KKyAgY2hhciBfX3VudXNlZFsyMF07CQkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gICovCit9OworCisKKy8qIFZhbHVlcyBmb3IgdGhlIGB1dF90eXBlJyBmaWVsZCBvZiBhIGBzdHJ1Y3QgdXRtcHgnLiAgKi8KKyNkZWZpbmUgRU1QVFkJCTAJLyogTm8gdmFsaWQgdXNlciBhY2NvdW50aW5nIGluZm9ybWF0aW9uLiAgKi8KKworI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgUlVOX0xWTAkxCS8qIFRoZSBzeXN0ZW0ncyBydW5sZXZlbC4gICovCisjZW5kaWYKKyNkZWZpbmUgQk9PVF9USU1FCTIJLyogVGltZSBvZiBzeXN0ZW0gYm9vdC4gICovCisjZGVmaW5lIE5FV19USU1FCTMJLyogVGltZSBhZnRlciBzeXN0ZW0gY2xvY2sgY2hhbmdlZC4gICovCisjZGVmaW5lIE9MRF9USU1FCTQJLyogVGltZSB3aGVuIHN5c3RlbSBjbG9jayBjaGFuZ2VkLiAgKi8KKworI2RlZmluZSBJTklUX1BST0NFU1MJNQkvKiBQcm9jZXNzIHNwYXduZWQgYnkgdGhlIGluaXQgcHJvY2Vzcy4gICovCisjZGVmaW5lIExPR0lOX1BST0NFU1MJNgkvKiBTZXNzaW9uIGxlYWRlciBvZiBhIGxvZ2dlZCBpbiB1c2VyLiAgKi8KKyNkZWZpbmUgVVNFUl9QUk9DRVNTCTcJLyogTm9ybWFsIHByb2Nlc3MuICAqLworI2RlZmluZSBERUFEX1BST0NFU1MJOAkvKiBUZXJtaW5hdGVkIHByb2Nlc3MuICAqLworCisjaWZkZWYgX19VU0VfR05VCisjIGRlZmluZSBBQ0NPVU5USU5HCTkJLyogU3lzdGVtIGFjY291bnRpbmcuICAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy91dHNuYW1lLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy91dHNuYW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVlNzFlMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3V0c25hbWUuaApAQCAtMCwwICsxLDI5IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1NZU19VVFNOQU1FX0gKKyMgZXJyb3IgIk5ldmVyIGluY2x1ZGUgPGJpdHMvdXRzbmFtZS5oPiBkaXJlY3RseTsgdXNlIDxzeXMvdXRzbmFtZS5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisvKiBMZW5ndGggb2YgdGhlIGVudHJpZXMgaW4gYHN0cnVjdCB1dHNuYW1lJyBpcyA2NS4gICovCisjZGVmaW5lIF9VVFNOQU1FX0xFTkdUSCA2NQorCisvKiBMaW51eCBwcm92aWRlcyBhcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRoZSBgc3RydWN0IHV0c25hbWUnCisgICB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBkb21haW4uICBEZWZpbmUgX1VUU05BTUVfRE9NQUlOX0xFTkdUSAorICAgdG8gYSB2YWx1ZSAhPSAwIHRvIGFjdGl2YXRlIHRoaXMgZW50cnkuICAqLworI2RlZmluZSBfVVRTTkFNRV9ET01BSU5fTEVOR1RIIF9VVFNOQU1FX0xFTkdUSApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvd2FpdGZsYWdzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy93YWl0ZmxhZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjRjZWRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvd2FpdGZsYWdzLmgKQEAgLTAsMCArMSwzOCBAQAorLyogRGVmaW5pdGlvbnMgb2YgZmxhZyBiaXRzIGZvciBgd2FpdHBpZCcgZXQgYWwuCisgICBDb3B5cmlnaHQgKEMpIDE5OTIsMTk5NiwxOTk3LDIwMDAsMjAwNCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWYgIWRlZmluZWQgX1NZU19XQUlUX0ggJiYgIWRlZmluZWQgX1NURExJQl9ICisjIGVycm9yICJOZXZlciBpbmNsdWRlIDxiaXRzL3dhaXRmbGFncy5oPiBkaXJlY3RseTsgdXNlIDxzeXMvd2FpdC5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisKKy8qIEJpdHMgaW4gdGhlIHRoaXJkIGFyZ3VtZW50IHRvIGB3YWl0cGlkJy4gICovCisjZGVmaW5lCVdOT0hBTkcJCTEJLyogRG9uJ3QgYmxvY2sgd2FpdGluZy4gICovCisjZGVmaW5lCVdVTlRSQUNFRAkyCS8qIFJlcG9ydCBzdGF0dXMgb2Ygc3RvcHBlZCBjaGlsZHJlbi4gICovCisKKy8qIEJpdHMgaW4gdGhlIGZvdXJ0aCBhcmd1bWVudCB0byBgd2FpdGlkJy4gICovCisjZGVmaW5lIFdTVE9QUEVECTIJLyogUmVwb3J0IHN0b3BwZWQgY2hpbGQgKHNhbWUgYXMgV1VOVFJBQ0VEKS4gKi8KKyNkZWZpbmUgV0VYSVRFRAkJNAkvKiBSZXBvcnQgZGVhZCBjaGlsZC4gICovCisjZGVmaW5lIFdDT05USU5VRUQJOAkvKiBSZXBvcnQgY29udGludWVkIGNoaWxkLiAgKi8KKyNkZWZpbmUgV05PV0FJVAkJMHgwMTAwMDAwMCAvKiBEb24ndCByZWFwLCBqdXN0IHBvbGwgc3RhdHVzLiAgKi8KKworI2RlZmluZSBfX1dOT1RIUkVBRCAgICAgMHgyMDAwMDAwMCAvKiBEb24ndCB3YWl0IG9uIGNoaWxkcmVuIG9mIG90aGVyIHRocmVhZHMKKwkJCQkgICAgICBpbiB0aGlzIGdyb3VwICovCisjZGVmaW5lIF9fV0FMTAkJMHg0MDAwMDAwMCAvKiBXYWl0IGZvciBhbnkgY2hpbGQuICAqLworI2RlZmluZSBfX1dDTE9ORQkweDgwMDAwMDAwIC8qIFdhaXQgZm9yIGNsb25lZCBwcm9jZXNzLiAgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0dXMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0dXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTljMjI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oCkBAIC0wLDAgKzEsMTA2IEBACisvKiBEZWZpbml0aW9ucyBvZiBzdGF0dXMgYml0cyBmb3IgYHdhaXQnIGV0IGFsLgorICAgQ29weXJpZ2h0IChDKSAxOTkyLDE5OTQsMTk5NiwxOTk3LDIwMDAsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmICFkZWZpbmVkIF9TWVNfV0FJVF9IICYmICFkZWZpbmVkIF9TVERMSUJfSAorIyBlcnJvciAiTmV2ZXIgaW5jbHVkZSA8Yml0cy93YWl0c3RhdHVzLmg+IGRpcmVjdGx5OyB1c2UgPHN5cy93YWl0Lmg+IGluc3RlYWQuIgorI2VuZGlmCisKKworLyogRXZlcnl0aGluZyBleHRhbnQgc28gZmFyIHVzZXMgdGhlc2Ugc2FtZSBiaXRzLiAgKi8KKworCisvKiBJZiBXSUZFWElURUQoU1RBVFVTKSwgdGhlIGxvdy1vcmRlciA4IGJpdHMgb2YgdGhlIHN0YXR1cy4gICovCisjZGVmaW5lCV9fV0VYSVRTVEFUVVMoc3RhdHVzKQkoKChzdGF0dXMpICYgMHhmZjAwKSA+PiA4KQorCisvKiBJZiBXSUZTSUdOQUxFRChTVEFUVVMpLCB0aGUgdGVybWluYXRpbmcgc2lnbmFsLiAgKi8KKyNkZWZpbmUJX19XVEVSTVNJRyhzdGF0dXMpCSgoc3RhdHVzKSAmIDB4N2YpCisKKy8qIElmIFdJRlNUT1BQRUQoU1RBVFVTKSwgdGhlIHNpZ25hbCB0aGF0IHN0b3BwZWQgdGhlIGNoaWxkLiAgKi8KKyNkZWZpbmUJX19XU1RPUFNJRyhzdGF0dXMpCV9fV0VYSVRTVEFUVVMoc3RhdHVzKQorCisvKiBOb256ZXJvIGlmIFNUQVRVUyBpbmRpY2F0ZXMgbm9ybWFsIHRlcm1pbmF0aW9uLiAgKi8KKyNkZWZpbmUJX19XSUZFWElURUQoc3RhdHVzKQkoX19XVEVSTVNJRyhzdGF0dXMpID09IDApCisKKy8qIE5vbnplcm8gaWYgU1RBVFVTIGluZGljYXRlcyB0ZXJtaW5hdGlvbiBieSBhIHNpZ25hbC4gICovCisjZGVmaW5lIF9fV0lGU0lHTkFMRUQoc3RhdHVzKSBcCisgICgoKHNpZ25lZCBjaGFyKSAoKChzdGF0dXMpICYgMHg3ZikgKyAxKSA+PiAxKSA+IDApCisKKy8qIE5vbnplcm8gaWYgU1RBVFVTIGluZGljYXRlcyB0aGUgY2hpbGQgaXMgc3RvcHBlZC4gICovCisjZGVmaW5lCV9fV0lGU1RPUFBFRChzdGF0dXMpCSgoKHN0YXR1cykgJiAweGZmKSA9PSAweDdmKQorCisvKiBOb256ZXJvIGlmIFNUQVRVUyBpbmRpY2F0ZXMgdGhlIGNoaWxkIGNvbnRpbnVlZCBhZnRlciBhIHN0b3AuICBXZSBvbmx5CisgICBkZWZpbmUgdGhpcyBpZiA8Yml0cy93YWl0ZmxhZ3MuaD4gcHJvdmlkZXMgdGhlIFdDT05USU5VRUQgZmxhZyBiaXQuICAqLworI2lmZGVmIFdDT05USU5VRUQKKyMgZGVmaW5lIF9fV0lGQ09OVElOVUVEKHN0YXR1cykJKChzdGF0dXMpID09IF9fV19DT05USU5VRUQpCisjZW5kaWYKKworLyogTm9uemVybyBpZiBTVEFUVVMgaW5kaWNhdGVzIHRoZSBjaGlsZCBkdW1wZWQgY29yZS4gICovCisjZGVmaW5lCV9fV0NPUkVEVU1QKHN0YXR1cykJKChzdGF0dXMpICYgX19XQ09SRUZMQUcpCisKKy8qIE1hY3JvcyBmb3IgY29uc3RydWN0aW5nIHN0YXR1cyB2YWx1ZXMuICAqLworI2RlZmluZQlfX1dfRVhJVENPREUocmV0LCBzaWcpCSgocmV0KSA8PCA4IHwgKHNpZykpCisjZGVmaW5lCV9fV19TVE9QQ09ERShzaWcpCSgoc2lnKSA8PCA4IHwgMHg3ZikKKyNkZWZpbmUgX19XX0NPTlRJTlVFRAkJMHhmZmZmCisjZGVmaW5lCV9fV0NPUkVGTEFHCQkweDgwCisKKworI2lmZGVmCV9fVVNFX0JTRAorCisjIGluY2x1ZGUgPGVuZGlhbi5oPgorCit1bmlvbiB3YWl0CisgIHsKKyAgICBpbnQgd19zdGF0dXM7CisgICAgc3RydWN0CisgICAgICB7CisjIGlmCV9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKwl1bnNpZ25lZCBpbnQgX193X3Rlcm1zaWc6NzsgLyogVGVybWluYXRpbmcgc2lnbmFsLiAgKi8KKwl1bnNpZ25lZCBpbnQgX193X2NvcmVkdW1wOjE7IC8qIFNldCBpZiBkdW1wZWQgY29yZS4gICovCisJdW5zaWduZWQgaW50IF9fd19yZXRjb2RlOjg7IC8qIFJldHVybiBjb2RlIGlmIGV4aXRlZCBub3JtYWxseS4gICovCisJdW5zaWduZWQgaW50OjE2OworIyBlbmRpZgkJCQkvKiBMaXR0bGUgZW5kaWFuLiAgKi8KKyMgaWYJX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorCXVuc2lnbmVkIGludDoxNjsKKwl1bnNpZ25lZCBpbnQgX193X3JldGNvZGU6ODsKKwl1bnNpZ25lZCBpbnQgX193X2NvcmVkdW1wOjE7CisJdW5zaWduZWQgaW50IF9fd190ZXJtc2lnOjc7CisjIGVuZGlmCQkJCS8qIEJpZyBlbmRpYW4uICAqLworICAgICAgfSBfX3dhaXRfdGVybWluYXRlZDsKKyAgICBzdHJ1Y3QKKyAgICAgIHsKKyMgaWYJX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTgorCXVuc2lnbmVkIGludCBfX3dfc3RvcHZhbDo4OyAvKiBXX1NUT1BQRUQgaWYgc3RvcHBlZC4gICovCisJdW5zaWduZWQgaW50IF9fd19zdG9wc2lnOjg7IC8qIFN0b3BwaW5nIHNpZ25hbC4gICovCisJdW5zaWduZWQgaW50OjE2OworIyBlbmRpZgkJCQkvKiBMaXR0bGUgZW5kaWFuLiAgKi8KKyMgaWYJX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorCXVuc2lnbmVkIGludDoxNjsKKwl1bnNpZ25lZCBpbnQgX193X3N0b3BzaWc6ODsgLyogU3RvcHBpbmcgc2lnbmFsLiAgKi8KKwl1bnNpZ25lZCBpbnQgX193X3N0b3B2YWw6ODsgLyogV19TVE9QUEVEIGlmIHN0b3BwZWQuICAqLworIyBlbmRpZgkJCQkvKiBCaWcgZW5kaWFuLiAgKi8KKyAgICAgIH0gX193YWl0X3N0b3BwZWQ7CisgIH07CisKKyMgZGVmaW5lIHdfdGVybXNpZwlfX3dhaXRfdGVybWluYXRlZC5fX3dfdGVybXNpZworIyBkZWZpbmUgd19jb3JlZHVtcAlfX3dhaXRfdGVybWluYXRlZC5fX3dfY29yZWR1bXAKKyMgZGVmaW5lIHdfcmV0Y29kZQlfX3dhaXRfdGVybWluYXRlZC5fX3dfcmV0Y29kZQorIyBkZWZpbmUgd19zdG9wc2lnCV9fd2FpdF9zdG9wcGVkLl9fd19zdG9wc2lnCisjIGRlZmluZSB3X3N0b3B2YWwJX193YWl0X3N0b3BwZWQuX193X3N0b3B2YWwKKworI2VuZGlmCS8qIFVzZSBCU0QuICAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvd2NoYXItbGRibC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvd2NoYXItbGRibC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwYTZhNjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy93Y2hhci1sZGJsLmgKQEAgLTAsMCArMSw3NSBAQAorLyogLW1sb25nLWRvdWJsZS02NCBjb21wYXRpYmlsaXR5IG1vZGUgZm9yIDx3Y2hhci5oPiBmdW5jdGlvbnMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1dDSEFSX0gKKyMgZXJyb3IgIk5ldmVyIGluY2x1ZGUgPGJpdHMvd2NoYXItbGRibC5oPiBkaXJlY3RseTsgdXNlIDx3Y2hhci5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfX1VTRV9JU09DOTUgfHwgZGVmaW5lZCBfX1VTRV9VTklYOTgKK19fQkVHSU5fTkFNRVNQQUNFX0M5OQorX19MREJMX1JFRElSX0RFQ0wgKGZ3cHJpbnRmKTsKK19fTERCTF9SRURJUl9ERUNMICh3cHJpbnRmKTsKK19fTERCTF9SRURJUl9ERUNMIChzd3ByaW50Zik7CitfX0xEQkxfUkVESVJfREVDTCAodmZ3cHJpbnRmKTsKK19fTERCTF9SRURJUl9ERUNMICh2d3ByaW50Zik7CitfX0xEQkxfUkVESVJfREVDTCAodnN3cHJpbnRmKTsKKyMgaWYgZGVmaW5lZCBfX1VTRV9JU09DOTkgJiYgIWRlZmluZWQgX19VU0VfR05VIFwKKyAgICAgJiYgIWRlZmluZWQgX19SRURJUkVDVCBcCisgICAgICYmIChkZWZpbmVkIF9fU1RSSUNUX0FOU0lfXyB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOMkspCitfX0xEQkxfUkVESVIxX0RFQ0wgKGZ3c2NhbmYsIF9fbmxkYmxfX19pc29jOTlfZndzY2FuZikKK19fTERCTF9SRURJUjFfREVDTCAod3NjYW5mLCBfX25sZGJsX19faXNvYzk5X3dzY2FuZikgIAorX19MREJMX1JFRElSMV9ERUNMIChzd3NjYW5mLCBfX25sZGJsX19faXNvYzk5X3N3c2NhbmYpCisjIGVsc2UKK19fTERCTF9SRURJUl9ERUNMIChmd3NjYW5mKTsKK19fTERCTF9SRURJUl9ERUNMICh3c2NhbmYpOworX19MREJMX1JFRElSX0RFQ0wgKHN3c2NhbmYpOworIyBlbmRpZgorX19FTkRfTkFNRVNQQUNFX0M5OQorI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9JU09DOTkKK19fQkVHSU5fTkFNRVNQQUNFX0M5OQorX19MREJMX1JFRElSMV9ERUNMICh3Y3N0b2xkLCB3Y3N0b2QpOworIyBpZiAhZGVmaW5lZCBfX1VTRV9HTlUgJiYgIWRlZmluZWQgX19SRURJUkVDVCBcCisgICAgICYmIChkZWZpbmVkIF9fU1RSSUNUX0FOU0lfXyB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOMkspCitfX0xEQkxfUkVESVIxX0RFQ0wgKHZmd3NjYW5mLCBfX25sZGJsX19faXNvYzk5X3Zmd3NjYW5mKQorX19MREJMX1JFRElSMV9ERUNMICh2d3NjYW5mLCBfX25sZGJsX19faXNvYzk5X3Z3c2NhbmYpICAKK19fTERCTF9SRURJUjFfREVDTCAodnN3c2NhbmYsIF9fbmxkYmxfX19pc29jOTlfdnN3c2NhbmYpCisjIGVsc2UKK19fTERCTF9SRURJUl9ERUNMICh2ZndzY2FuZik7CitfX0xEQkxfUkVESVJfREVDTCAodndzY2FuZik7CitfX0xEQkxfUkVESVJfREVDTCAodnN3c2NhbmYpOworIyBlbmRpZgorX19FTkRfTkFNRVNQQUNFX0M5OQorI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9HTlUKK19fTERCTF9SRURJUjFfREVDTCAod2NzdG9sZF9sLCB3Y3N0b2RfbCk7CisjZW5kaWYKKworI2lmIF9fVVNFX0ZPUlRJRllfTEVWRUwgPiAwICYmIGRlZmluZWQgX19leHRlcm5fYWx3YXlzX2lubGluZQorX19MREJMX1JFRElSX0RFQ0wgKF9fc3dwcmludGZfY2hrKQorX19MREJMX1JFRElSX0RFQ0wgKF9fdnN3cHJpbnRmX2NoaykKKyMgaWYgX19VU0VfRk9SVElGWV9MRVZFTCA+IDEKK19fTERCTF9SRURJUl9ERUNMIChfX2Z3cHJpbnRmX2NoaykKK19fTERCTF9SRURJUl9ERUNMIChfX3dwcmludGZfY2hrKQorX19MREJMX1JFRElSX0RFQ0wgKF9fdmZ3cHJpbnRmX2NoaykKK19fTERCTF9SRURJUl9ERUNMIChfX3Z3cHJpbnRmX2NoaykKKyMgZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3djaGFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYxZjU2MwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3djaGFyLmgKQEAgLTAsMCArMSwyNiBAQAorLyogd2NoYXJfdCB0eXBlIHJlbGF0ZWQgZGVmaW5pdGlvbnMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX0JJVFNfV0NIQVJfSAorI2RlZmluZSBfQklUU19XQ0hBUl9ICTEKKworI2RlZmluZSBfX1dDSEFSX01JTgkoLTIxNDc0ODM2NDcgLSAxKQorI2RlZmluZSBfX1dDSEFSX01BWAkoMjE0NzQ4MzY0NykKKworI2VuZGlmCS8qIGJpdHMvd2NoYXIuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIyLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy93Y2hhcjIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWM0Y2UxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIyLmgKQEAgLTAsMCArMSw1OTAgQEAKKy8qIENoZWNraW5nIG1hY3JvcyBmb3Igd2NoYXIgZnVuY3Rpb25zLgorICAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9XQ0hBUl9ICisjIGVycm9yICJOZXZlciBpbmNsdWRlIDxiaXRzL3djaGFyMi5oPiBkaXJlY3RseTsgdXNlIDx3Y2hhci5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisKK2V4dGVybiB3Y2hhcl90ICpfX3dtZW1jcHlfY2hrICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCisJCQkgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24sCisJCQkgICAgICAgc2l6ZV90IF9fbnMxKSBfX1RIUk9XOworZXh0ZXJuIHdjaGFyX3QgKl9fUkVESVJFQ1RfTlRIIChfX3dtZW1jcHlfYWxpYXMsCisJCQkJKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKKwkJCQkgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pLAorCQkJCXdtZW1jcHkpOworZXh0ZXJuIHdjaGFyX3QgKl9fUkVESVJFQ1RfTlRIIChfX3dtZW1jcHlfY2hrX3dhcm4sCisJCQkJKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKKwkJCQkgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24sCisJCQkJIHNpemVfdCBfX25zMSksIF9fd21lbWNweV9jaGspCisgICAgIF9fd2FybmF0dHIgKCJ3bWVtY3B5IGNhbGxlZCB3aXRoIGxlbmd0aCBiaWdnZXIgdGhhbiBzaXplIG9mIGRlc3RpbmF0aW9uICIKKwkJICJidWZmZXIiKTsKKworX19leHRlcm5fYWx3YXlzX2lubGluZSB3Y2hhcl90ICoKK19fTlRIICh3bWVtY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLAorCQlzaXplX3QgX19uKSkKK3sKKyAgaWYgKF9fYm9zMCAoX19zMSkgIT0gKHNpemVfdCkgLTEpCisgICAgeworICAgICAgaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19uKSkKKwlyZXR1cm4gX193bWVtY3B5X2NoayAoX19zMSwgX19zMiwgX19uLAorCQkJICAgICAgX19ib3MwIChfX3MxKSAvIHNpemVvZiAod2NoYXJfdCkpOworCisgICAgICBpZiAoX19uID4gX19ib3MwIChfX3MxKSAvIHNpemVvZiAod2NoYXJfdCkpCisJcmV0dXJuIF9fd21lbWNweV9jaGtfd2FybiAoX19zMSwgX19zMiwgX19uLAorCQkJCSAgIF9fYm9zMCAoX19zMSkgLyBzaXplb2YgKHdjaGFyX3QpKTsKKyAgICB9CisgIHJldHVybiBfX3dtZW1jcHlfYWxpYXMgKF9fczEsIF9fczIsIF9fbik7Cit9CisKKworZXh0ZXJuIHdjaGFyX3QgKl9fd21lbW1vdmVfY2hrICh3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCisJCQkJc2l6ZV90IF9fbiwgc2l6ZV90IF9fbnMxKSBfX1RIUk9XOworZXh0ZXJuIHdjaGFyX3QgKl9fUkVESVJFQ1RfTlRIIChfX3dtZW1tb3ZlX2FsaWFzLCAod2NoYXJfdCAqX19zMSwKKwkJCQkJCSAgIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKKwkJCQkJCSAgIHNpemVfdCBfX24pLCB3bWVtbW92ZSk7CitleHRlcm4gd2NoYXJfdCAqX19SRURJUkVDVF9OVEggKF9fd21lbW1vdmVfY2hrX3dhcm4sCisJCQkJKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKKwkJCQkgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24sCisJCQkJIHNpemVfdCBfX25zMSksIF9fd21lbW1vdmVfY2hrKQorICAgICBfX3dhcm5hdHRyICgid21lbW1vdmUgY2FsbGVkIHdpdGggbGVuZ3RoIGJpZ2dlciB0aGFuIHNpemUgb2YgZGVzdGluYXRpb24gIgorCQkgImJ1ZmZlciIpOworCitfX2V4dGVybl9hbHdheXNfaW5saW5lIHdjaGFyX3QgKgorX19OVEggKHdtZW1tb3ZlICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLAorCQkgc2l6ZV90IF9fbikpCit7CisgIGlmIChfX2JvczAgKF9fczEpICE9IChzaXplX3QpIC0xKQorICAgIHsKKyAgICAgIGlmICghX19idWlsdGluX2NvbnN0YW50X3AgKF9fbikpCisJcmV0dXJuIF9fd21lbW1vdmVfY2hrIChfX3MxLCBfX3MyLCBfX24sCisJCQkgICAgICAgX19ib3MwIChfX3MxKSAvIHNpemVvZiAod2NoYXJfdCkpOworCisgICAgICBpZiAoX19uID4gX19ib3MwIChfX3MxKSAvIHNpemVvZiAod2NoYXJfdCkpCisJcmV0dXJuIF9fd21lbW1vdmVfY2hrX3dhcm4gKF9fczEsIF9fczIsIF9fbiwKKwkJCQkgICAgX19ib3MwIChfX3MxKSAvIHNpemVvZiAod2NoYXJfdCkpOworICAgIH0KKyAgcmV0dXJuIF9fd21lbW1vdmVfYWxpYXMgKF9fczEsIF9fczIsIF9fbik7Cit9CisKKworI2lmZGVmIF9fVVNFX0dOVQorZXh0ZXJuIHdjaGFyX3QgKl9fd21lbXBjcHlfY2hrICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCisJCQkJX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24sCisJCQkJc2l6ZV90IF9fbnMxKSBfX1RIUk9XOworZXh0ZXJuIHdjaGFyX3QgKl9fUkVESVJFQ1RfTlRIIChfX3dtZW1wY3B5X2FsaWFzLAorCQkJCSh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCisJCQkJIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLAorCQkJCSBzaXplX3QgX19uKSwgd21lbXBjcHkpOworZXh0ZXJuIHdjaGFyX3QgKl9fUkVESVJFQ1RfTlRIIChfX3dtZW1wY3B5X2Noa193YXJuLAorCQkJCSh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCisJCQkJIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uLAorCQkJCSBzaXplX3QgX19uczEpLCBfX3dtZW1wY3B5X2NoaykKKyAgICAgX193YXJuYXR0ciAoIndtZW1wY3B5IGNhbGxlZCB3aXRoIGxlbmd0aCBiaWdnZXIgdGhhbiBzaXplIG9mIGRlc3RpbmF0aW9uICIKKwkJICJidWZmZXIiKTsKKworX19leHRlcm5fYWx3YXlzX2lubGluZSB3Y2hhcl90ICoKK19fTlRIICh3bWVtcGNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMiwKKwkJIHNpemVfdCBfX24pKQoreworICBpZiAoX19ib3MwIChfX3MxKSAhPSAoc2l6ZV90KSAtMSkKKyAgICB7CisgICAgICBpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wIChfX24pKQorCXJldHVybiBfX3dtZW1wY3B5X2NoayAoX19zMSwgX19zMiwgX19uLAorCQkJICAgICAgIF9fYm9zMCAoX19zMSkgLyBzaXplb2YgKHdjaGFyX3QpKTsKKworICAgICAgaWYgKF9fbiA+IF9fYm9zMCAoX19zMSkgLyBzaXplb2YgKHdjaGFyX3QpKQorCXJldHVybiBfX3dtZW1wY3B5X2Noa193YXJuIChfX3MxLCBfX3MyLCBfX24sCisJCQkJICAgIF9fYm9zMCAoX19zMSkgLyBzaXplb2YgKHdjaGFyX3QpKTsKKyAgICB9CisgIHJldHVybiBfX3dtZW1wY3B5X2FsaWFzIChfX3MxLCBfX3MyLCBfX24pOworfQorI2VuZGlmCisKKworZXh0ZXJuIHdjaGFyX3QgKl9fd21lbXNldF9jaGsgKHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24sCisJCQkgICAgICAgc2l6ZV90IF9fbnMpIF9fVEhST1c7CitleHRlcm4gd2NoYXJfdCAqX19SRURJUkVDVF9OVEggKF9fd21lbXNldF9hbGlhcywgKHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX2MsCisJCQkJCQkgIHNpemVfdCBfX24pLCB3bWVtc2V0KTsKK2V4dGVybiB3Y2hhcl90ICpfX1JFRElSRUNUX05USCAoX193bWVtc2V0X2Noa193YXJuLAorCQkJCSh3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uLAorCQkJCSBzaXplX3QgX19ucyksIF9fd21lbXNldF9jaGspCisgICAgIF9fd2FybmF0dHIgKCJ3bWVtc2V0IGNhbGxlZCB3aXRoIGxlbmd0aCBiaWdnZXIgdGhhbiBzaXplIG9mIGRlc3RpbmF0aW9uICIKKwkJICJidWZmZXIiKTsKKworX19leHRlcm5fYWx3YXlzX2lubGluZSB3Y2hhcl90ICoKK19fTlRIICh3bWVtc2V0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pKQoreworICBpZiAoX19ib3MwIChfX3MpICE9IChzaXplX3QpIC0xKQorICAgIHsKKyAgICAgIGlmICghX19idWlsdGluX2NvbnN0YW50X3AgKF9fbikpCisJcmV0dXJuIF9fd21lbXNldF9jaGsgKF9fcywgX19jLCBfX24sIF9fYm9zMCAoX19zKSAvIHNpemVvZiAod2NoYXJfdCkpOworCisgICAgICBpZiAoX19uID4gX19ib3MwIChfX3MpIC8gc2l6ZW9mICh3Y2hhcl90KSkKKwlyZXR1cm4gX193bWVtc2V0X2Noa193YXJuIChfX3MsIF9fYywgX19uLAorCQkJCSAgIF9fYm9zMCAoX19zKSAvIHNpemVvZiAod2NoYXJfdCkpOworICAgIH0KKyAgcmV0dXJuIF9fd21lbXNldF9hbGlhcyAoX19zLCBfX2MsIF9fbik7Cit9CisKKworZXh0ZXJuIHdjaGFyX3QgKl9fd2NzY3B5X2NoayAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCisJCQkgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsCisJCQkgICAgICBzaXplX3QgX19uKSBfX1RIUk9XOworZXh0ZXJuIHdjaGFyX3QgKl9fUkVESVJFQ1RfTlRIIChfX3djc2NweV9hbGlhcywKKwkJCQkod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCisJCQkJIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYyksIHdjc2NweSk7CisKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgd2NoYXJfdCAqCitfX05USCAod2NzY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMpKQoreworICBpZiAoX19ib3MgKF9fZGVzdCkgIT0gKHNpemVfdCkgLTEpCisgICAgcmV0dXJuIF9fd2NzY3B5X2NoayAoX19kZXN0LCBfX3NyYywgX19ib3MgKF9fZGVzdCkgLyBzaXplb2YgKHdjaGFyX3QpKTsKKyAgcmV0dXJuIF9fd2NzY3B5X2FsaWFzIChfX2Rlc3QsIF9fc3JjKTsKK30KKworCitleHRlcm4gd2NoYXJfdCAqX193Y3BjcHlfY2hrICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMsCisJCQkgICAgICBzaXplX3QgX19kZXN0bGVuKSBfX1RIUk9XOworZXh0ZXJuIHdjaGFyX3QgKl9fUkVESVJFQ1RfTlRIIChfX3djcGNweV9hbGlhcywgKHdjaGFyX3QgKl9fZGVzdCwKKwkJCQkJCSBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjKSwKKwkJCQl3Y3BjcHkpOworCitfX2V4dGVybl9hbHdheXNfaW5saW5lIHdjaGFyX3QgKgorX19OVEggKHdjcGNweSAod2NoYXJfdCAqX19kZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjKSkKK3sKKyAgaWYgKF9fYm9zIChfX2Rlc3QpICE9IChzaXplX3QpIC0xKQorICAgIHJldHVybiBfX3djcGNweV9jaGsgKF9fZGVzdCwgX19zcmMsIF9fYm9zIChfX2Rlc3QpIC8gc2l6ZW9mICh3Y2hhcl90KSk7CisgIHJldHVybiBfX3djcGNweV9hbGlhcyAoX19kZXN0LCBfX3NyYyk7Cit9CisKKworZXh0ZXJuIHdjaGFyX3QgKl9fd2NzbmNweV9jaGsgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAorCQkJICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbiwKKwkJCSAgICAgICBzaXplX3QgX19kZXN0bGVuKSBfX1RIUk9XOworZXh0ZXJuIHdjaGFyX3QgKl9fUkVESVJFQ1RfTlRIIChfX3djc25jcHlfYWxpYXMsCisJCQkJKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAorCQkJCSBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsCisJCQkJIHNpemVfdCBfX24pLCB3Y3NuY3B5KTsKK2V4dGVybiB3Y2hhcl90ICpfX1JFRElSRUNUX05USCAoX193Y3NuY3B5X2Noa193YXJuLAorCQkJCSh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKKwkJCQkgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLAorCQkJCSBzaXplX3QgX19uLCBzaXplX3QgX19kZXN0bGVuKSwgX193Y3NuY3B5X2NoaykKKyAgICAgX193YXJuYXR0ciAoIndjc25jcHkgY2FsbGVkIHdpdGggbGVuZ3RoIGJpZ2dlciB0aGFuIHNpemUgb2YgZGVzdGluYXRpb24gIgorCQkgImJ1ZmZlciIpOworCitfX2V4dGVybl9hbHdheXNfaW5saW5lIHdjaGFyX3QgKgorX19OVEggKHdjc25jcHkgKHdjaGFyX3QgKl9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3NyYywgc2l6ZV90IF9fbikpCit7CisgIGlmIChfX2JvcyAoX19kZXN0KSAhPSAoc2l6ZV90KSAtMSkKKyAgICB7CisgICAgICBpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wIChfX24pKQorCXJldHVybiBfX3djc25jcHlfY2hrIChfX2Rlc3QsIF9fc3JjLCBfX24sCisJCQkgICAgICBfX2JvcyAoX19kZXN0KSAvIHNpemVvZiAod2NoYXJfdCkpOworICAgICAgaWYgKF9fbiA+IF9fYm9zIChfX2Rlc3QpIC8gc2l6ZW9mICh3Y2hhcl90KSkKKwlyZXR1cm4gX193Y3NuY3B5X2Noa193YXJuIChfX2Rlc3QsIF9fc3JjLCBfX24sCisJCQkJICAgX19ib3MgKF9fZGVzdCkgLyBzaXplb2YgKHdjaGFyX3QpKTsKKyAgICB9CisgIHJldHVybiBfX3djc25jcHlfYWxpYXMgKF9fZGVzdCwgX19zcmMsIF9fbik7Cit9CisKKworZXh0ZXJuIHdjaGFyX3QgKl9fd2NwbmNweV9jaGsgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAorCQkJICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbiwKKwkJCSAgICAgICBzaXplX3QgX19kZXN0bGVuKSBfX1RIUk9XOworZXh0ZXJuIHdjaGFyX3QgKl9fUkVESVJFQ1RfTlRIIChfX3djcG5jcHlfYWxpYXMsCisJCQkJKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAorCQkJCSBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsCisJCQkJIHNpemVfdCBfX24pLCB3Y3BuY3B5KTsKK2V4dGVybiB3Y2hhcl90ICpfX1JFRElSRUNUX05USCAoX193Y3BuY3B5X2Noa193YXJuLAorCQkJCSh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKKwkJCQkgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLAorCQkJCSBzaXplX3QgX19uLCBzaXplX3QgX19kZXN0bGVuKSwgX193Y3BuY3B5X2NoaykKKyAgICAgX193YXJuYXR0ciAoIndjcG5jcHkgY2FsbGVkIHdpdGggbGVuZ3RoIGJpZ2dlciB0aGFuIHNpemUgb2YgZGVzdGluYXRpb24gIgorCQkgImJ1ZmZlciIpOworCitfX2V4dGVybl9hbHdheXNfaW5saW5lIHdjaGFyX3QgKgorX19OVEggKHdjcG5jcHkgKHdjaGFyX3QgKl9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3NyYywgc2l6ZV90IF9fbikpCit7CisgIGlmIChfX2JvcyAoX19kZXN0KSAhPSAoc2l6ZV90KSAtMSkKKyAgICB7CisgICAgICBpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wIChfX24pKQorCXJldHVybiBfX3djcG5jcHlfY2hrIChfX2Rlc3QsIF9fc3JjLCBfX24sCisJCQkgICAgICBfX2JvcyAoX19kZXN0KSAvIHNpemVvZiAod2NoYXJfdCkpOworICAgICAgaWYgKF9fbiA+IF9fYm9zIChfX2Rlc3QpIC8gc2l6ZW9mICh3Y2hhcl90KSkKKwlyZXR1cm4gX193Y3BuY3B5X2Noa193YXJuIChfX2Rlc3QsIF9fc3JjLCBfX24sCisJCQkJICAgX19ib3MgKF9fZGVzdCkgLyBzaXplb2YgKHdjaGFyX3QpKTsKKyAgICB9CisgIHJldHVybiBfX3djcG5jcHlfYWxpYXMgKF9fZGVzdCwgX19zcmMsIF9fbik7Cit9CisKKworZXh0ZXJuIHdjaGFyX3QgKl9fd2NzY2F0X2NoayAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCisJCQkgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsCisJCQkgICAgICBzaXplX3QgX19kZXN0bGVuKSBfX1RIUk9XOworZXh0ZXJuIHdjaGFyX3QgKl9fUkVESVJFQ1RfTlRIIChfX3djc2NhdF9hbGlhcywKKwkJCQkod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCisJCQkJIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYyksIHdjc2NhdCk7CisKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgd2NoYXJfdCAqCitfX05USCAod2NzY2F0ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMpKQoreworICBpZiAoX19ib3MgKF9fZGVzdCkgIT0gKHNpemVfdCkgLTEpCisgICAgcmV0dXJuIF9fd2NzY2F0X2NoayAoX19kZXN0LCBfX3NyYywgX19ib3MgKF9fZGVzdCkgLyBzaXplb2YgKHdjaGFyX3QpKTsKKyAgcmV0dXJuIF9fd2NzY2F0X2FsaWFzIChfX2Rlc3QsIF9fc3JjKTsKK30KKworCitleHRlcm4gd2NoYXJfdCAqX193Y3NuY2F0X2NoayAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCisJCQkgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLAorCQkJICAgICAgIHNpemVfdCBfX24sIHNpemVfdCBfX2Rlc3RsZW4pIF9fVEhST1c7CitleHRlcm4gd2NoYXJfdCAqX19SRURJUkVDVF9OVEggKF9fd2NzbmNhdF9hbGlhcywKKwkJCQkod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCisJCQkJIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywKKwkJCQkgc2l6ZV90IF9fbiksIHdjc25jYXQpOworCitfX2V4dGVybl9hbHdheXNfaW5saW5lIHdjaGFyX3QgKgorX19OVEggKHdjc25jYXQgKHdjaGFyX3QgKl9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3NyYywgc2l6ZV90IF9fbikpCit7CisgIGlmIChfX2JvcyAoX19kZXN0KSAhPSAoc2l6ZV90KSAtMSkKKyAgICByZXR1cm4gX193Y3NuY2F0X2NoayAoX19kZXN0LCBfX3NyYywgX19uLAorCQkJICBfX2JvcyAoX19kZXN0KSAvIHNpemVvZiAod2NoYXJfdCkpOworICByZXR1cm4gX193Y3NuY2F0X2FsaWFzIChfX2Rlc3QsIF9fc3JjLCBfX24pOworfQorCisKK2V4dGVybiBpbnQgX19zd3ByaW50Zl9jaGsgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAorCQkJICAgaW50IF9fZmxhZywgc2l6ZV90IF9fc19sZW4sCisJCQkgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKKyAgICAgX19USFJPVyAvKiBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX193cHJpbnRmX18sIDUsIDYpKSkgKi87CisKK2V4dGVybiBpbnQgX19SRURJUkVDVF9OVEhfTERCTCAoX19zd3ByaW50Zl9hbGlhcywKKwkJCQkod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCisJCQkJIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKSwKKwkJCQlzd3ByaW50Zik7CisKKyNpZmRlZiBfX3ZhX2FyZ19wYWNrCitfX2V4dGVybl9hbHdheXNfaW5saW5lIGludAorX19OVEggKHN3cHJpbnRmICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKKwkJIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKSkKK3sKKyAgaWYgKF9fYm9zIChfX3MpICE9IChzaXplX3QpIC0xIHx8IF9fVVNFX0ZPUlRJRllfTEVWRUwgPiAxKQorICAgIHJldHVybiBfX3N3cHJpbnRmX2NoayAoX19zLCBfX24sIF9fVVNFX0ZPUlRJRllfTEVWRUwgLSAxLAorCQkJICAgX19ib3MgKF9fcykgLyBzaXplb2YgKHdjaGFyX3QpLAorCQkJICAgX19mbXQsIF9fdmFfYXJnX3BhY2sgKCkpOworICByZXR1cm4gX19zd3ByaW50Zl9hbGlhcyAoX19zLCBfX24sIF9fZm10LCBfX3ZhX2FyZ19wYWNrICgpKTsKK30KKyNlbGlmICFkZWZpbmVkIF9fY3BsdXNwbHVzCisvKiBYWFggV2UgbWlnaHQgd2FudCB0byBoYXZlIHN1cHBvcnQgaW4gZ2NjIGZvciBzd3ByaW50Zi4gICovCisjIGRlZmluZSBzd3ByaW50ZihzLCBuLCAuLi4pIFwKKyAgKF9fYm9zIChzKSAhPSAoc2l6ZV90KSAtMSB8fCBfX1VTRV9GT1JUSUZZX0xFVkVMID4gMQkJCSAgICAgIFwKKyAgID8gX19zd3ByaW50Zl9jaGsgKHMsIG4sIF9fVVNFX0ZPUlRJRllfTEVWRUwgLSAxLAkJCSAgICAgIFwKKwkJICAgICBfX2JvcyAocykgLyBzaXplb2YgKHdjaGFyX3QpLCBfX1ZBX0FSR1NfXykJCSAgICAgIFwKKyAgIDogc3dwcmludGYgKHMsIG4sIF9fVkFfQVJHU19fKSkKKyNlbmRpZgorCitleHRlcm4gaW50IF9fdnN3cHJpbnRmX2NoayAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCisJCQkgICAgaW50IF9fZmxhZywgc2l6ZV90IF9fc19sZW4sCisJCQkgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAorCQkJICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQorICAgICBfX1RIUk9XIC8qIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3dwcmludGZfXywgNSwgMCkpKSAqLzsKKworZXh0ZXJuIGludCBfX1JFRElSRUNUX05USF9MREJMIChfX3Zzd3ByaW50Zl9hbGlhcywKKwkJCQkod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCisJCQkJIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2ZtdCwKKwkJCQkgX19nbnVjX3ZhX2xpc3QgX19hcCksIHZzd3ByaW50Zik7CisKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgaW50CitfX05USCAodnN3cHJpbnRmICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKKwkJICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mbXQsIF9fZ251Y192YV9saXN0IF9fYXApKQoreworICBpZiAoX19ib3MgKF9fcykgIT0gKHNpemVfdCkgLTEgfHwgX19VU0VfRk9SVElGWV9MRVZFTCA+IDEpCisgICAgcmV0dXJuIF9fdnN3cHJpbnRmX2NoayAoX19zLCBfX24sICBfX1VTRV9GT1JUSUZZX0xFVkVMIC0gMSwKKwkJCSAgICBfX2JvcyAoX19zKSAvIHNpemVvZiAod2NoYXJfdCksIF9fZm10LCBfX2FwKTsKKyAgcmV0dXJuIF9fdnN3cHJpbnRmX2FsaWFzIChfX3MsIF9fbiwgX19mbXQsIF9fYXApOworfQorCisKKyNpZiBfX1VTRV9GT1JUSUZZX0xFVkVMID4gMQorCitleHRlcm4gaW50IF9fZndwcmludGZfY2hrIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGludCBfX2ZsYWcsCisJCQkgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLik7CitleHRlcm4gaW50IF9fd3ByaW50Zl9jaGsgKGludCBfX2ZsYWcsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKKwkJCSAgLi4uKTsKK2V4dGVybiBpbnQgX192ZndwcmludGZfY2hrIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGludCBfX2ZsYWcsCisJCQkgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAorCQkJICAgIF9fZ251Y192YV9saXN0IF9fYXApOworZXh0ZXJuIGludCBfX3Z3cHJpbnRmX2NoayAoaW50IF9fZmxhZywgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAorCQkJICAgX19nbnVjX3ZhX2xpc3QgX19hcCk7CisKKyMgaWZkZWYgX192YV9hcmdfcGFjaworX19leHRlcm5fYWx3YXlzX2lubGluZSBpbnQKK3dwcmludGYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQoreworICByZXR1cm4gX193cHJpbnRmX2NoayAoX19VU0VfRk9SVElGWV9MRVZFTCAtIDEsIF9fZm10LCBfX3ZhX2FyZ19wYWNrICgpKTsKK30KKworX19leHRlcm5fYWx3YXlzX2lubGluZSBpbnQKK2Z3cHJpbnRmIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQoreworICByZXR1cm4gX19md3ByaW50Zl9jaGsgKF9fc3RyZWFtLCBfX1VTRV9GT1JUSUZZX0xFVkVMIC0gMSwgX19mbXQsCisJCQkgX192YV9hcmdfcGFjayAoKSk7Cit9CisjIGVsaWYgIWRlZmluZWQgX19jcGx1c3BsdXMKKyMgIGRlZmluZSB3cHJpbnRmKC4uLikgXAorICBfX3dwcmludGZfY2hrIChfX1VTRV9GT1JUSUZZX0xFVkVMIC0gMSwgX19WQV9BUkdTX18pCisjICBkZWZpbmUgZndwcmludGYoc3RyZWFtLCAuLi4pIFwKKyAgX19md3ByaW50Zl9jaGsgKHN0cmVhbSwgX19VU0VfRk9SVElGWV9MRVZFTCAtIDEsIF9fVkFfQVJHU19fKQorIyBlbmRpZgorCitfX2V4dGVybl9hbHdheXNfaW5saW5lIGludAordndwcmludGYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2ZtdCwgX19nbnVjX3ZhX2xpc3QgX19hcCkKK3sKKyAgcmV0dXJuIF9fdndwcmludGZfY2hrIChfX1VTRV9GT1JUSUZZX0xFVkVMIC0gMSwgX19mbXQsIF9fYXApOworfQorCitfX2V4dGVybl9hbHdheXNfaW5saW5lIGludAordmZ3cHJpbnRmIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCisJICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm10LCBfX2dudWNfdmFfbGlzdCBfX2FwKQoreworICByZXR1cm4gX192ZndwcmludGZfY2hrIChfX3N0cmVhbSwgX19VU0VfRk9SVElGWV9MRVZFTCAtIDEsIF9fZm10LCBfX2FwKTsKK30KKworI2VuZGlmCisKK2V4dGVybiB3Y2hhcl90ICpfX2ZnZXR3c19jaGsgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19zaXplLCBpbnQgX19uLAorCQkJICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSBfX3d1cjsKK2V4dGVybiB3Y2hhcl90ICpfX1JFRElSRUNUIChfX2ZnZXR3c19hbGlhcywKKwkJCSAgICAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIGludCBfX24sCisJCQkgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSksIGZnZXR3cykgX193dXI7CitleHRlcm4gd2NoYXJfdCAqX19SRURJUkVDVCAoX19mZ2V0d3NfY2hrX3dhcm4sCisJCQkgICAgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19zaXplLCBpbnQgX19uLAorCQkJICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pLCBfX2ZnZXR3c19jaGspCisgICAgIF9fd3VyIF9fd2FybmF0dHIgKCJmZ2V0d3MgY2FsbGVkIHdpdGggYmlnZ2VyIHNpemUgdGhhbiBsZW5ndGggIgorCQkgICAgICAgIm9mIGRlc3RpbmF0aW9uIGJ1ZmZlciIpOworCitfX2V4dGVybl9hbHdheXNfaW5saW5lIF9fd3VyIHdjaGFyX3QgKgorZmdldHdzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQoreworICBpZiAoX19ib3MgKF9fcykgIT0gKHNpemVfdCkgLTEpCisgICAgeworICAgICAgaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19uKSB8fCBfX24gPD0gMCkKKwlyZXR1cm4gX19mZ2V0d3NfY2hrIChfX3MsIF9fYm9zIChfX3MpIC8gc2l6ZW9mICh3Y2hhcl90KSwKKwkJCSAgICAgX19uLCBfX3N0cmVhbSk7CisKKyAgICAgIGlmICgoc2l6ZV90KSBfX24gPiBfX2JvcyAoX19zKSAvIHNpemVvZiAod2NoYXJfdCkpCisJcmV0dXJuIF9fZmdldHdzX2Noa193YXJuIChfX3MsIF9fYm9zIChfX3MpIC8gc2l6ZW9mICh3Y2hhcl90KSwKKwkJCQkgIF9fbiwgX19zdHJlYW0pOworICAgIH0KKyAgcmV0dXJuIF9fZmdldHdzX2FsaWFzIChfX3MsIF9fbiwgX19zdHJlYW0pOworfQorCisjaWZkZWYgX19VU0VfR05VCitleHRlcm4gd2NoYXJfdCAqX19mZ2V0d3NfdW5sb2NrZWRfY2hrICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fc2l6ZSwKKwkJCQkgICAgICAgaW50IF9fbiwgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQorICBfX3d1cjsKK2V4dGVybiB3Y2hhcl90ICpfX1JFRElSRUNUIChfX2ZnZXR3c191bmxvY2tlZF9hbGlhcywKKwkJCSAgICAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIGludCBfX24sCisJCQkgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSksIGZnZXR3c191bmxvY2tlZCkKKyAgX193dXI7CitleHRlcm4gd2NoYXJfdCAqX19SRURJUkVDVCAoX19mZ2V0d3NfdW5sb2NrZWRfY2hrX3dhcm4sCisJCQkgICAgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19zaXplLCBpbnQgX19uLAorCQkJICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pLAorCQkJICAgIF9fZmdldHdzX3VubG9ja2VkX2NoaykKKyAgICAgX193dXIgX193YXJuYXR0ciAoImZnZXR3c191bmxvY2tlZCBjYWxsZWQgd2l0aCBiaWdnZXIgc2l6ZSB0aGFuIGxlbmd0aCAiCisJCSAgICAgICAib2YgZGVzdGluYXRpb24gYnVmZmVyIik7CisKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgX193dXIgd2NoYXJfdCAqCitmZ2V0d3NfdW5sb2NrZWQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLCBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCit7CisgIGlmIChfX2JvcyAoX19zKSAhPSAoc2l6ZV90KSAtMSkKKyAgICB7CisgICAgICBpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wIChfX24pIHx8IF9fbiA8PSAwKQorCXJldHVybiBfX2ZnZXR3c191bmxvY2tlZF9jaGsgKF9fcywgX19ib3MgKF9fcykgLyBzaXplb2YgKHdjaGFyX3QpLAorCQkJCSAgICAgIF9fbiwgX19zdHJlYW0pOworCisgICAgICBpZiAoKHNpemVfdCkgX19uID4gX19ib3MgKF9fcykgLyBzaXplb2YgKHdjaGFyX3QpKQorCXJldHVybiBfX2ZnZXR3c191bmxvY2tlZF9jaGtfd2FybiAoX19zLCBfX2JvcyAoX19zKSAvIHNpemVvZiAod2NoYXJfdCksCisJCQkJCSAgIF9fbiwgX19zdHJlYW0pOworICAgIH0KKyAgcmV0dXJuIF9fZmdldHdzX3VubG9ja2VkX2FsaWFzIChfX3MsIF9fbiwgX19zdHJlYW0pOworfQorI2VuZGlmCisKKworZXh0ZXJuIHNpemVfdCBfX3djcnRvbWJfY2hrIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhciwgbWJzdGF0ZV90ICpfX3AsCisJCQkgIHNpemVfdCBfX2J1ZmxlbikgX19USFJPVyBfX3d1cjsKK2V4dGVybiBzaXplX3QgX19SRURJUkVDVF9OVEggKF9fd2NydG9tYl9hbGlhcywKKwkJCSAgICAgIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgd2NoYXJfdCBfX3djaGFyLAorCQkJICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSwgd2NydG9tYikgX193dXI7CisKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgX193dXIgc2l6ZV90CitfX05USCAod2NydG9tYiAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIsIG1ic3RhdGVfdCAqX19wcykpCit7CisgIC8qIFdlIHdvdWxkIGhhdmUgdG8gaW5jbHVkZSA8bGltaXRzLmg+IHRvIGdldCBhIGRlZmluaXRpb24gb2YgTUJfTEVOX01BWC4KKyAgICAgQnV0IHRoaXMgd291bGQgb25seSBkaXN0dXJiIHRoZSBuYW1lc3BhY2UuICBTbyB3ZSBkZWZpbmUgb3VyIG93bgorICAgICB2ZXJzaW9uIGhlcmUuICAqLworI2RlZmluZSBfX1dDSEFSX01CX0xFTl9NQVgJMTYKKyNpZiBkZWZpbmVkIE1CX0xFTl9NQVggJiYgTUJfTEVOX01BWCAhPSBfX1dDSEFSX01CX0xFTl9NQVgKKyMgZXJyb3IgIkFzc3VtZWQgdmFsdWUgb2YgTUJfTEVOX01BWCB3cm9uZyIKKyNlbmRpZgorICBpZiAoX19ib3MgKF9fcykgIT0gKHNpemVfdCkgLTEgJiYgX19XQ0hBUl9NQl9MRU5fTUFYID4gX19ib3MgKF9fcykpCisgICAgcmV0dXJuIF9fd2NydG9tYl9jaGsgKF9fcywgX193Y2hhciwgX19wcywgX19ib3MgKF9fcykpOworICByZXR1cm4gX193Y3J0b21iX2FsaWFzIChfX3MsIF9fd2NoYXIsIF9fcHMpOworfQorCisKK2V4dGVybiBzaXplX3QgX19tYnNydG93Y3NfY2hrICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAorCQkJICAgICAgIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMsCisJCQkgICAgICAgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcywKKwkJCSAgICAgICBzaXplX3QgX19kc3RsZW4pIF9fVEhST1c7CitleHRlcm4gc2l6ZV90IF9fUkVESVJFQ1RfTlRIIChfX21ic3J0b3djc19hbGlhcywKKwkJCSAgICAgICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAorCQkJICAgICAgIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMsCisJCQkgICAgICAgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcyksCisJCQkgICAgICBtYnNydG93Y3MpOworZXh0ZXJuIHNpemVfdCBfX1JFRElSRUNUX05USCAoX19tYnNydG93Y3NfY2hrX3dhcm4sCisJCQkgICAgICAod2NoYXJfdCAqX19yZXN0cmljdCBfX2RzdCwKKwkJCSAgICAgICBfX2NvbnN0IGNoYXIgKipfX3Jlc3RyaWN0IF9fc3JjLAorCQkJICAgICAgIHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMsCisJCQkgICAgICAgc2l6ZV90IF9fZHN0bGVuKSwgX19tYnNydG93Y3NfY2hrKQorICAgICBfX3dhcm5hdHRyICgibWJzcnRvd2NzIGNhbGxlZCB3aXRoIGRzdCBidWZmZXIgc21hbGxlciB0aGFuIGxlbiAiCisJCSAiKiBzaXplb2YgKHdjaGFyX3QpIik7CisKK19fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgc2l6ZV90CitfX05USCAobWJzcnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LCBfX2NvbnN0IGNoYXIgKipfX3Jlc3RyaWN0IF9fc3JjLAorCQkgIHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpKQoreworICBpZiAoX19ib3MgKF9fZHN0KSAhPSAoc2l6ZV90KSAtMSkKKyAgICB7CisgICAgICBpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wIChfX2xlbikpCisJcmV0dXJuIF9fbWJzcnRvd2NzX2NoayAoX19kc3QsIF9fc3JjLCBfX2xlbiwgX19wcywKKwkJCQlfX2JvcyAoX19kc3QpIC8gc2l6ZW9mICh3Y2hhcl90KSk7CisKKyAgICAgIGlmIChfX2xlbiA+IF9fYm9zIChfX2RzdCkgLyBzaXplb2YgKHdjaGFyX3QpKQorCXJldHVybiBfX21ic3J0b3djc19jaGtfd2FybiAoX19kc3QsIF9fc3JjLCBfX2xlbiwgX19wcywKKwkJCQkgICAgIF9fYm9zIChfX2RzdCkgLyBzaXplb2YgKHdjaGFyX3QpKTsKKyAgICB9CisgIHJldHVybiBfX21ic3J0b3djc19hbGlhcyAoX19kc3QsIF9fc3JjLCBfX2xlbiwgX19wcyk7Cit9CisKKworZXh0ZXJuIHNpemVfdCBfX3djc3J0b21ic19jaGsgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsCisJCQkgICAgICAgX19jb25zdCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywKKwkJCSAgICAgICBzaXplX3QgX19sZW4sIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzLAorCQkJICAgICAgIHNpemVfdCBfX2RzdGxlbikgX19USFJPVzsKK2V4dGVybiBzaXplX3QgX19SRURJUkVDVF9OVEggKF9fd2NzcnRvbWJzX2FsaWFzLAorCQkJICAgICAgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsCisJCQkgICAgICAgX19jb25zdCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywKKwkJCSAgICAgICBzaXplX3QgX19sZW4sIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSwKKwkJCSAgICAgIHdjc3J0b21icyk7CitleHRlcm4gc2l6ZV90IF9fUkVESVJFQ1RfTlRIIChfX3djc3J0b21ic19jaGtfd2FybiwKKwkJCSAgICAgIChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LAorCQkJICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsCisJCQkgICAgICAgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcywKKwkJCSAgICAgICBzaXplX3QgX19kc3RsZW4pLCBfX3djc3J0b21ic19jaGspCisgICAgX193YXJuYXR0ciAoIndjc3J0b21icyBjYWxsZWQgd2l0aCBkc3QgYnVmZmVyIHNtYWxsZXIgdGhhbiBsZW4iKTsKKworX19leHRlcm5fYWx3YXlzX2lubGluZSBzaXplX3QKK19fTlRIICh3Y3NydG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsCisJCSAgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykpCit7CisgIGlmIChfX2JvcyAoX19kc3QpICE9IChzaXplX3QpIC0xKQorICAgIHsKKyAgICAgIGlmICghX19idWlsdGluX2NvbnN0YW50X3AgKF9fbGVuKSkKKwlyZXR1cm4gX193Y3NydG9tYnNfY2hrIChfX2RzdCwgX19zcmMsIF9fbGVuLCBfX3BzLCBfX2JvcyAoX19kc3QpKTsKKworICAgICAgaWYgKF9fbGVuID4gX19ib3MgKF9fZHN0KSkKKwlyZXR1cm4gX193Y3NydG9tYnNfY2hrX3dhcm4gKF9fZHN0LCBfX3NyYywgX19sZW4sIF9fcHMsIF9fYm9zIChfX2RzdCkpOworICAgIH0KKyAgcmV0dXJuIF9fd2NzcnRvbWJzX2FsaWFzIChfX2RzdCwgX19zcmMsIF9fbGVuLCBfX3BzKTsKK30KKworCisjaWZkZWYgX19VU0VfR05VCitleHRlcm4gc2l6ZV90IF9fbWJzbnJ0b3djc19jaGsgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3QsCisJCQkJX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbm1jLAorCQkJCXNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMsCisJCQkJc2l6ZV90IF9fZHN0bGVuKSBfX1RIUk9XOworZXh0ZXJuIHNpemVfdCBfX1JFRElSRUNUX05USCAoX19tYnNucnRvd2NzX2FsaWFzLAorCQkJICAgICAgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3QsCisJCQkgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbm1jLAorCQkJICAgICAgIHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpLAorCQkJICAgICAgbWJzbnJ0b3djcyk7CitleHRlcm4gc2l6ZV90IF9fUkVESVJFQ1RfTlRIIChfX21ic25ydG93Y3NfY2hrX3dhcm4sCisJCQkgICAgICAod2NoYXJfdCAqX19yZXN0cmljdCBfX2RzdCwKKwkJCSAgICAgICBfX2NvbnN0IGNoYXIgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19ubWMsCisJCQkgICAgICAgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcywKKwkJCSAgICAgICBzaXplX3QgX19kc3RsZW4pLCBfX21ic25ydG93Y3NfY2hrKQorICAgICBfX3dhcm5hdHRyICgibWJzbnJ0b3djcyBjYWxsZWQgd2l0aCBkc3QgYnVmZmVyIHNtYWxsZXIgdGhhbiBsZW4gIgorCQkgIiogc2l6ZW9mICh3Y2hhcl90KSIpOworCitfX2V4dGVybl9hbHdheXNfaW5saW5lIHNpemVfdAorX19OVEggKG1ic25ydG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3QsIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMsCisJCSAgIHNpemVfdCBfX25tYywgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykpCit7CisgIGlmIChfX2JvcyAoX19kc3QpICE9IChzaXplX3QpIC0xKQorICAgIHsKKyAgICAgIGlmICghX19idWlsdGluX2NvbnN0YW50X3AgKF9fbGVuKSkKKwlyZXR1cm4gX19tYnNucnRvd2NzX2NoayAoX19kc3QsIF9fc3JjLCBfX25tYywgX19sZW4sIF9fcHMsCisJCQkJIF9fYm9zIChfX2RzdCkgLyBzaXplb2YgKHdjaGFyX3QpKTsKKworICAgICAgaWYgKF9fbGVuID4gX19ib3MgKF9fZHN0KSAvIHNpemVvZiAod2NoYXJfdCkpCisJcmV0dXJuIF9fbWJzbnJ0b3djc19jaGtfd2FybiAoX19kc3QsIF9fc3JjLCBfX25tYywgX19sZW4sIF9fcHMsCisJCQkJICAgICAgX19ib3MgKF9fZHN0KSAvIHNpemVvZiAod2NoYXJfdCkpOworICAgIH0KKyAgcmV0dXJuIF9fbWJzbnJ0b3djc19hbGlhcyAoX19kc3QsIF9fc3JjLCBfX25tYywgX19sZW4sIF9fcHMpOworfQorCisKK2V4dGVybiBzaXplX3QgX193Y3NucnRvbWJzX2NoayAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwKKwkJCQlfX2NvbnN0IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fc3JjLAorCQkJCXNpemVfdCBfX253Yywgc2l6ZV90IF9fbGVuLAorCQkJCW1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzLCBzaXplX3QgX19kc3RsZW4pCisgICAgIF9fVEhST1c7CitleHRlcm4gc2l6ZV90IF9fUkVESVJFQ1RfTlRIIChfX3djc25ydG9tYnNfYWxpYXMsCisJCQkgICAgICAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwKKwkJCSAgICAgICBfX2NvbnN0IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fc3JjLAorCQkJICAgICAgIHNpemVfdCBfX253Yywgc2l6ZV90IF9fbGVuLAorCQkJICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSwgd2NzbnJ0b21icyk7CitleHRlcm4gc2l6ZV90IF9fUkVESVJFQ1RfTlRIIChfX3djc25ydG9tYnNfY2hrX3dhcm4sCisJCQkgICAgICAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwKKwkJCSAgICAgICBfX2NvbnN0IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fc3JjLAorCQkJICAgICAgIHNpemVfdCBfX253Yywgc2l6ZV90IF9fbGVuLAorCQkJICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzLAorCQkJICAgICAgIHNpemVfdCBfX2RzdGxlbiksIF9fd2NzbnJ0b21ic19jaGspCisgICAgIF9fd2FybmF0dHIgKCJ3Y3NucnRvbWJzIGNhbGxlZCB3aXRoIGRzdCBidWZmZXIgc21hbGxlciB0aGFuIGxlbiIpOworCitfX2V4dGVybl9hbHdheXNfaW5saW5lIHNpemVfdAorX19OVEggKHdjc25ydG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsCisJCSAgIHNpemVfdCBfX253Yywgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykpCit7CisgIGlmIChfX2JvcyAoX19kc3QpICE9IChzaXplX3QpIC0xKQorICAgIHsKKyAgICAgIGlmICghX19idWlsdGluX2NvbnN0YW50X3AgKF9fbGVuKSkKKwlyZXR1cm4gX193Y3NucnRvbWJzX2NoayAoX19kc3QsIF9fc3JjLCBfX253YywgX19sZW4sIF9fcHMsCisJCQkJIF9fYm9zIChfX2RzdCkpOworCisgICAgICBpZiAoX19sZW4gPiBfX2JvcyAoX19kc3QpKQorCXJldHVybiBfX3djc25ydG9tYnNfY2hrX3dhcm4gKF9fZHN0LCBfX3NyYywgX19ud2MsIF9fbGVuLCBfX3BzLAorCQkJCSAgICAgIF9fYm9zIChfX2RzdCkpOworICAgIH0KKyAgcmV0dXJuIF9fd2NzbnJ0b21ic19hbGlhcyAoX19kc3QsIF9fc3JjLCBfX253YywgX19sZW4sIF9fcHMpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvd29yZHNpemUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTY0M2I2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMvd29yZHNpemUuaApAQCAtMCwwICsxLDE5IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNkZWZpbmUgX19XT1JEU0laRQkzMgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjM2MTE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OSwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyoKKyAqIE5ldmVyIGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5OyB1c2UgPGxpbWl0cy5oPiBpbnN0ZWFkLgorICovCisKKy8qIEFkZGl0aW9uYWwgZGVmaW5pdGlvbnMgZnJvbSBYL09wZW4gUG9ydGFiaWxpdHkgR3VpZGUsIElzc3VlIDQsIFZlcnNpb24gMgorICAgU3lzdGVtIEludGVyZmFjZXMgYW5kIEhlYWRlcnMsIDQuMTYgPGxpbWl0cy5oPgorCisgICBQbGVhc2Ugbm90ZSBvbmx5IHRoZSB2YWx1ZXMgd2hpY2ggYXJlIG5vdCBncmVhdGVyIHRoYW4gdGhlIG1pbmltdW0KKyAgIHN0YXRlZCBpbiB0aGUgc3RhbmRhcmQgZG9jdW1lbnQgYXJlIGxpc3RlZC4gIFRoZSBgc3lzY29uZicgZnVuY3Rpb25zCisgICBzaG91bGQgYmUgdXNlZCB0byBvYnRhaW4gdGhlIGFjdHVhbCB2YWx1ZS4gICovCisKKyNpZm5kZWYgX1hPUEVOX0xJTV9ICisjZGVmaW5lIF9YT1BFTl9MSU1fSAkxCisKKyNkZWZpbmUgX19uZWVkX0lPVl9NQVgKKyNpbmNsdWRlIDxiaXRzL3N0ZGlvX2xpbS5oPgorCisvKiBXZSBkbyBub3QgcHJvdmlkZSBmaXhlZCB2YWx1ZXMgZm9yCisKKyAgIEFSR19NQVgJTWF4aW11bSBsZW5ndGggb2YgYXJndW1lbnQgdG8gdGhlIGBleGVjJyBmdW5jdGlvbgorCQlpbmNsdWRpbmcgZW52aXJvbm1lbnQgZGF0YS4KKworICAgQVRFWElUX01BWAlNYXhpbXVtIG51bWJlciBvZiBmdW5jdGlvbnMgdGhhdCBtYXkgYmUgcmVnaXN0ZXJlZAorCQl3aXRoIGBhdGV4aXQnLgorCisgICBDSElMRF9NQVgJTWF4aW11bSBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIHByb2Nlc3NlcyBwZXIgcmVhbAorCQl1c2VyIElELgorCisgICBPUEVOX01BWAlNYXhpbXVtIG51bWJlciBvZiBmaWxlcyB0aGF0IG9uZSBwcm9jZXNzIGNhbiBoYXZlIG9wZW4KKwkJYXQgYW55b25lIHRpbWUuCisKKyAgIFBBR0VTSVpFCisgICBQQUdFX1NJWkUJU2l6ZSBvZiBieXRlcyBvZiBhIHBhZ2UuCisKKyAgIFBBU1NfTUFYCU1heGltdW0gbnVtYmVyIG9mIHNpZ25pZmljYW50IGJ5dGVzIGluIGEgcGFzc3dvcmQuCisKKyAgIFdlIG9ubHkgcHJvdmlkZSBhIGZpeGVkIGxpbWl0IGZvcgorCisgICBJT1ZfTUFYCU1heGltdW0gbnVtYmVyIG9mIGBpb3ZlYycgc3RydWN0dXJlcyB0aGF0IG9uZSBwcm9jZXNzIGhhcworCQlhdmFpbGFibGUgZm9yIHVzZSB3aXRoIGByZWFkdicgb3Igd3JpdGV2Jy4KKworICAgaWYgdGhpcyBpcyBpbmRlZWQgZml4ZWQgYnkgdGhlIHVuZGVybHlpbmcgc3lzdGVtLgorKi8KKworCisvKiBNYXhpbXVtIG51bWJlciBvZiBgaW92ZWMnIHN0cnVjdHVyZXMgdGhhdCBvbmUgcHJvY2VzcyBoYXMgYXZhaWxhYmxlCisgICBmb3IgdXNlIHdpdGggYHJlYWR2JyBvciB3cml0ZXYnLiAgKi8KKyNkZWZpbmUJX1hPUEVOX0lPVl9NQVgJX1BPU0lYX1VJT19NQVhJT1YKKworCisvKiBNYXhpbXVtIHZhbHVlIG9mIGBkaWdpdCcgaW4gY2FsbHMgdG8gdGhlIGBwcmludGYnIGFuZCBgc2NhbmYnCisgICBmdW5jdGlvbnMuICBXZSBoYXZlIG5vIGxpbWl0LCBzbyByZXR1cm4gYSByZWFzb25hYmxlIHZhbHVlLiAgKi8KKyNkZWZpbmUgTkxfQVJHTUFYCV9QT1NJWF9BUkdfTUFYCisKKy8qIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIGEgYExBTkcnIG5hbWUuICBXZSBoYXZlIG5vIGxpbWl0LiAgKi8KKyNkZWZpbmUgTkxfTEFOR01BWAlfUE9TSVgyX0xJTkVfTUFYCisKKy8qIE1heGltdW0gbWVzc2FnZSBudW1iZXIuICBXZSBoYXZlIG5vIGxpbWl0LiAgKi8KKyNkZWZpbmUgTkxfTVNHTUFYCUlOVF9NQVgKKworLyogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gTi10by0xIGNvbGxhdGlvbiBtYXBwaW5nLiAgV2UgaGF2ZSBubworICAgbGltaXQuICAqLworI2RlZmluZSBOTF9OTUFYCQlJTlRfTUFYCisKKy8qIE1heGltdW0gc2V0IG51bWJlci4gIFdlIGhhdmUgbm8gbGltaXQuICAqLworI2RlZmluZSBOTF9TRVRNQVgJSU5UX01BWAorCisvKiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiBhIG1lc3NhZ2UuICBXZSBoYXZlIG5vIGxpbWl0LiAgKi8KKyNkZWZpbmUgTkxfVEVYVE1BWAlJTlRfTUFYCisKKy8qIERlZmF1bHQgcHJvY2VzcyBwcmlvcml0eS4gICovCisjZGVmaW5lIE5aRVJPCQkyMAorCisKKy8qIE51bWJlciBvZiBiaXRzIGluIGEgd29yZCBvZiB0eXBlIGBpbnQnLiAgKi8KKyNpZmRlZiBJTlRfTUFYCisjIGlmIElOVF9NQVggPT0gMzI3NjcKKyMgIGRlZmluZSBXT1JEX0JJVAkxNgorIyBlbHNlCisjICBpZiBJTlRfTUFYID09IDIxNDc0ODM2NDcKKyMgICBkZWZpbmUgV09SRF9CSVQJMzIKKyMgIGVsc2UKKy8qIFNhZmUgYXNzdW1wdGlvbi4gICovCisjICAgZGVmaW5lIFdPUkRfQklUCTY0CisjICBlbmRpZgorIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBfX0lOVF9NQVhfXworIyBpZiBfX0lOVF9NQVhfXyA9PSAzMjc2NworIyAgZGVmaW5lIFdPUkRfQklUCTE2CisjIGVsc2UKKyMgIGlmIF9fSU5UX01BWF9fID09IDIxNDc0ODM2NDcKKyMgICBkZWZpbmUgV09SRF9CSVQJMzIKKyMgIGVsc2UKKy8qIFNhZmUgYXNzdW1wdGlvbi4gICovCisjICAgZGVmaW5lIFdPUkRfQklUCTY0CisjICBlbmRpZgorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIFdPUkRfQklUCTMyCisjZW5kaWYKKworLyogTnVtYmVyIG9mIGJpdHMgaW4gYSB3b3JkIG9mIHR5cGUgYGxvbmcgaW50Jy4gICovCisjaWZkZWYgTE9OR19NQVgKKyMgaWYgTE9OR19NQVggPT0gMjE0NzQ4MzY0NworIyAgZGVmaW5lIExPTkdfQklUCTMyCisjIGVsc2UKKy8qIFNhZmUgYXNzdW1wdGlvbi4gICovCisjICBkZWZpbmUgTE9OR19CSVQJNjQKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgX19MT05HX01BWF9fCisjIGlmIF9fTE9OR19NQVhfXyA9PSAyMTQ3NDgzNjQ3CisjICBkZWZpbmUgTE9OR19CSVQJMzIKKyMgZWxzZQorLyogU2FmZSBhc3N1bXB0aW9uLiAgKi8KKyMgIGRlZmluZSBMT05HX0JJVAk2NAorIyBlbmRpZgorI2Vsc2UKKyMgaW5jbHVkZSA8Yml0cy93b3Jkc2l6ZS5oPgorIyBpZiBfX1dPUkRTSVpFID09IDY0CisjICBkZWZpbmUgTE9OR19CSVQJNjQKKyMgZWxzZQorIyAgZGVmaW5lIExPTkdfQklUCTMyCisjIGVuZGlmCisjZW5kaWYKKworI2VuZGlmIC8qIGJpdHMveG9wZW5fbGltLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9iaXRzL3h0aXR5cGVzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy94dGl0eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMWJmYjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYml0cy94dGl0eXBlcy5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qIGJpdHMveHRpdHlwZXMuaCAtLSBEZWZpbmUgc29tZSB0eXBlcyB1c2VkIGJ5IDxiaXRzL3N0cm9wdHMuaD4uICBHZW5lcmljLgorICAgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9TVFJPUFRTX0gKKyMgZXJyb3IgIk5ldmVyIGluY2x1ZGUgPGJpdHMveHRpdHlwZXMuaD4gZGlyZWN0bHk7IHVzZSA8c3Ryb3B0cy5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9CSVRTX1hUSVRZUEVTX0gKKyNkZWZpbmUgX0JJVFNfWFRJVFlQRVNfSAkxCisKKyNpbmNsdWRlIDxiaXRzL3R5cGVzLmg+CisKKy8qIFRoaXMgdHlwZSBpcyB1c2VkIGJ5IHNvbWUgc3RydWN0cyBpbiA8Yml0cy9zdHJvcHRzLmg+LiAgKi8KK3R5cGVkZWYgX19TTE9OR1dPUkRfVFlQRSBfX3Rfc2NhbGFyX3Q7Cit0eXBlZGVmIF9fVUxPTkdXT1JEX1RZUEUgX190X3VzY2FsYXJfdDsKKworCisjZW5kaWYgLyogYml0cy94dGl0eXBlcy5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYnl0ZXN3YXAuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ieXRlc3dhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MWQ0ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvYnl0ZXN3YXAuaApAQCAtMCwwICsxLDQwIEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX0JZVEVTV0FQX0gKKyNkZWZpbmUgX0JZVEVTV0FQX0gJMQorCisvKiBHZXQgdGhlIG1hY2hpbmUgc3BlY2lmaWMsIG9wdGltaXplZCBkZWZpbml0aW9ucy4gICovCisjaW5jbHVkZSA8Yml0cy9ieXRlc3dhcC5oPgorCisKKy8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgbXVzdCBhbGwgYmUgbWFjcm9zIHNpbmNlIG90aGVyd2lzZSBzb21lCisgICBvZiB0aGUgcG9zc2libGUgb3B0aW1pemF0aW9ucyBhcmUgbm90IHBvc3NpYmxlLiAgKi8KKworLyogUmV0dXJuIGEgdmFsdWUgd2l0aCBhbGwgYnl0ZXMgaW4gdGhlIDE2IGJpdCBhcmd1bWVudCBzd2FwcGVkLiAgKi8KKyNkZWZpbmUgYnN3YXBfMTYoeCkgX19ic3dhcF8xNiAoeCkKKworLyogUmV0dXJuIGEgdmFsdWUgd2l0aCBhbGwgYnl0ZXMgaW4gdGhlIDMyIGJpdCBhcmd1bWVudCBzd2FwcGVkLiAgKi8KKyNkZWZpbmUgYnN3YXBfMzIoeCkgX19ic3dhcF8zMiAoeCkKKworI2lmIGRlZmluZWQgX19HTlVDX18gJiYgX19HTlVDX18gPj0gMgorLyogUmV0dXJuIGEgdmFsdWUgd2l0aCBhbGwgYnl0ZXMgaW4gdGhlIDY0IGJpdCBhcmd1bWVudCBzd2FwcGVkLiAgKi8KKyMgZGVmaW5lIGJzd2FwXzY0KHgpIF9fYnN3YXBfNjQgKHgpCisjZW5kaWYKKworI2VuZGlmIC8qIGJ5dGVzd2FwLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9jb21wbGV4LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvY29tcGxleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MWFhZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvY29tcGxleC5oCkBAIC0wLDAgKzEsMTE0IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qCisgKglJU08gQzk5OiAgNy4zIENvbXBsZXggYXJpdGhtZXRpYwk8Y29tcGxleC5oPgorICovCisKKyNpZm5kZWYgX0NPTVBMRVhfSAorI2RlZmluZSBfQ09NUExFWF9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKy8qIEdldCBnZW5lcmFsIGFuZCBJU08gQzk5IHNwZWNpZmljIGluZm9ybWF0aW9uLiAgKi8KKyNpbmNsdWRlIDxiaXRzL21hdGhkZWYuaD4KKworX19CRUdJTl9ERUNMUworCisvKiBXZSBtaWdodCBuZWVkIHRvIGFkZCBzdXBwb3J0IGZvciBtb3JlIGNvbXBpbGVycyBoZXJlLiAgQnV0IHNpbmNlIElTTworICAgQzk5IGlzIG91dCBob3BlZnVsbHkgYWxsIG1haW50YWluZWQgY29tcGlsZXJzIHdpbGwgc29vbiBwcm92aWRlIHRoZSBkYXRhCisgICB0eXBlcyBgZmxvYXQgY29tcGxleCcgYW5kIGBkb3VibGUgY29tcGxleCcuICAqLworI2lmIF9fR05VQ19QUkVSRVEgKDIsIDcpICYmICFfX0dOVUNfUFJFUkVRICgyLCA5NykKKyMgZGVmaW5lIF9Db21wbGV4IF9fY29tcGxleF9fCisjZW5kaWYKKworI2RlZmluZSBjb21wbGV4CQlfQ29tcGxleAorCisvKiBOYXJyb3dlc3QgaW1hZ2luYXJ5IHVuaXQuICBUaGlzIGRlcGVuZHMgb24gdGhlIGZsb2F0aW5nLXBvaW50CisgICBldmFsdWF0aW9uIG1ldGhvZC4KKyAgIFhYWCBUaGlzIHByb2JhYmx5IGhhcyB0byBnbyBpbnRvIGEgZ2NjIHJlbGF0ZWQgZmlsZS4gICovCisjZGVmaW5lIF9Db21wbGV4X0kJKF9fZXh0ZW5zaW9uX18gMS4waUYpCisKKy8qIEFub3RoZXIgbW9yZSBkZXNjcmlwdGl2ZSBuYW1lIGlzIGBJJy4KKyAgIFhYWCBPbmNlIHdlIGhhdmUgdGhlIGltYWdpbmFyeSBzdXBwb3J0IHN3aXRjaCB0aGlzIHRvIF9JbWFnaW5hcnlfSS4gICovCisjdW5kZWYgSQorI2RlZmluZSBJIF9Db21wbGV4X0kKKworLyogVGhlIGZpbGUgPGJpdHMvY21hdGhjYWxscy5oPiBjb250YWlucyB0aGUgcHJvdG90eXBlcyBmb3IgYWxsIHRoZQorICAgYWN0dWFsIG1hdGggZnVuY3Rpb25zLiAgVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGZvciB0aG9zZSBwcm90b3R5cGVzLAorICAgc28gd2UgY2FuIGVhc2lseSBkZWNsYXJlIGVhY2ggZnVuY3Rpb24gYXMgYm90aCBgbmFtZScgYW5kIGBfX25hbWUnLAorICAgYW5kIGNhbiBkZWNsYXJlIHRoZSBmbG9hdCB2ZXJzaW9ucyBgbmFtZWYnIGFuZCBgX19uYW1lZicuICAqLworCisjZGVmaW5lIF9fTUFUSENBTEwoZnVuY3Rpb24sIGFyZ3MpCVwKKyAgX19NQVRIREVDTCAoX01kb3VibGVfY29tcGxleF8sZnVuY3Rpb24sIGFyZ3MpCisjZGVmaW5lIF9fTUFUSERFQ0wodHlwZSwgZnVuY3Rpb24sIGFyZ3MpIFwKKyAgX19NQVRIREVDTF8xKHR5cGUsIGZ1bmN0aW9uLCBhcmdzKTsgXAorICBfX01BVEhERUNMXzEodHlwZSwgX19DT05DQVQoX18sZnVuY3Rpb24pLCBhcmdzKQorI2RlZmluZSBfX01BVEhERUNMXzEodHlwZSwgZnVuY3Rpb24sIGFyZ3MpIFwKKyAgZXh0ZXJuIHR5cGUgX19NQVRIX1BSRUNOQU1FKGZ1bmN0aW9uKSBhcmdzIF9fVEhST1cKKworI2RlZmluZSBfTWRvdWJsZV8gCQlkb3VibGUKKyNkZWZpbmUgX19NQVRIX1BSRUNOQU1FKG5hbWUpCW5hbWUKKyNpbmNsdWRlIDxiaXRzL2NtYXRoY2FsbHMuaD4KKyN1bmRlZglfTWRvdWJsZV8KKyN1bmRlZglfX01BVEhfUFJFQ05BTUUKKworLyogTm93IHRoZSBmbG9hdCB2ZXJzaW9ucy4gICovCisjaWZuZGVmIF9NZmxvYXRfCisjIGRlZmluZSBfTWZsb2F0XwkJZmxvYXQKKyNlbmRpZgorI2RlZmluZSBfTWRvdWJsZV8gCQlfTWZsb2F0XworI2lmZGVmIF9fU1REQ19fCisjIGRlZmluZSBfX01BVEhfUFJFQ05BTUUobmFtZSkJbmFtZSMjZgorI2Vsc2UKKyMgZGVmaW5lIF9fTUFUSF9QUkVDTkFNRShuYW1lKQluYW1lLyoqL2YKKyNlbmRpZgorI2luY2x1ZGUgPGJpdHMvY21hdGhjYWxscy5oPgorI3VuZGVmCV9NZG91YmxlXworI3VuZGVmCV9fTUFUSF9QUkVDTkFNRQorCisvKiBBbmQgdGhlIGxvbmcgZG91YmxlIHZlcnNpb25zLiAgSXQgaXMgbm9uLWNyaXRpY2FsIHRvIGRlZmluZSB0aGVtCisgICBoZXJlIHVuY29uZGl0aW9uYWxseSBzaW5jZSBgbG9uZyBkb3VibGUnIGlzIHJlcXVpcmVkIGluIElTTyBDOTkuICAqLworI2lmIChfX1NURENfXyAtIDAgfHwgX19HTlVDX18gLSAwKSBcCisgICAgJiYgKCFkZWZpbmVkIF9fTk9fTE9OR19ET1VCTEVfTUFUSCB8fCBkZWZpbmVkIF9fTERCTF9DT01QQVQpCisjIGlmZGVmIF9fTERCTF9DT01QQVQKKyMgIHVuZGVmIF9fTUFUSERFQ0xfMQorIyAgZGVmaW5lIF9fTUFUSERFQ0xfMSh0eXBlLCBmdW5jdGlvbiwgYXJncykgXAorICBleHRlcm4gdHlwZSBfX1JFRElSRUNUX05USChfX01BVEhfUFJFQ05BTUUoZnVuY3Rpb24pLCBhcmdzLCBmdW5jdGlvbikKKyMgZW5kaWYKKworIyBpZm5kZWYgX01sb25nX2RvdWJsZV8KKyMgIGRlZmluZSBfTWxvbmdfZG91YmxlXwlsb25nIGRvdWJsZQorIyBlbmRpZgorIyBkZWZpbmUgX01kb3VibGVfIAkJX01sb25nX2RvdWJsZV8KKyMgaWZkZWYgX19TVERDX18KKyMgIGRlZmluZSBfX01BVEhfUFJFQ05BTUUobmFtZSkJbmFtZSMjbAorIyBlbHNlCisjICBkZWZpbmUgX19NQVRIX1BSRUNOQU1FKG5hbWUpCW5hbWUvKiovbAorIyBlbmRpZgorIyBpbmNsdWRlIDxiaXRzL2NtYXRoY2FsbHMuaD4KKyNlbmRpZgorI3VuZGVmCV9NZG91YmxlXworI3VuZGVmCV9fTUFUSF9QUkVDTkFNRQorI3VuZGVmCV9fTUFUSERFQ0xfMQorI3VuZGVmCV9fTUFUSERFQ0wKKyN1bmRlZglfX01BVEhDQUxMCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBjb21wbGV4LmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9jcGlvLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvY3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZTMyNzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvY3Bpby5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qIEV4dGVuZGVkIGNwaW8gZm9ybWF0IGZyb20gUE9TSVguMS4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgTk9URTogVGhlIGNhbm9uaWNhbCBzb3VyY2Ugb2YgdGhpcyBmaWxlIGlzIG1haW50YWluZWQgd2l0aCB0aGUgR05VIGNwaW8uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9DUElPX0gKKyNkZWZpbmUgX0NQSU9fSCAxCisKKy8qIEEgY3BpbyBhcmNoaXZlIGNvbnNpc3RzIG9mIGEgc2VxdWVuY2Ugb2YgZmlsZXMuCisgICBFYWNoIGZpbGUgaGFzIGEgNzYgYnl0ZSBoZWFkZXIsCisgICBhIHZhcmlhYmxlIGxlbmd0aCwgTlVMIHRlcm1pbmF0ZWQgZmlsZW5hbWUsCisgICBhbmQgdmFyaWFibGUgbGVuZ3RoIGZpbGUgZGF0YS4KKyAgIEEgaGVhZGVyIGZvciBhIGZpbGVuYW1lICJUUkFJTEVSISEhIiBpbmRpY2F0ZXMgdGhlIGVuZCBvZiB0aGUgYXJjaGl2ZS4gICovCisKKy8qIEFsbCB0aGUgZmllbGRzIGluIHRoZSBoZWFkZXIgYXJlIElTTyA2NDYgKGFwcHJveGltYXRlbHkgQVNDSUkpIHN0cmluZ3MKKyAgIG9mIG9jdGFsIG51bWJlcnMsIGxlZnQgcGFkZGVkLCBub3QgTlVMIHRlcm1pbmF0ZWQuCisKKyAgIEZpZWxkIE5hbWUJTGVuZ3RoIGluIEJ5dGVzCU5vdGVzCisgICBjX21hZ2ljCTYJCW11c3QgYmUgIjA3MDcwNyIKKyAgIGNfZGV2CTYKKyAgIGNfaW5vCTYKKyAgIGNfbW9kZQk2CQlzZWUgYmVsb3cgZm9yIHZhbHVlCisgICBjX3VpZAk2CisgICBjX2dpZAk2CisgICBjX25saW5rCTYKKyAgIGNfcmRldgk2CQlvbmx5IHZhbGlkIGZvciBjaHIgYW5kIGJsayBzcGVjaWFsIGZpbGVzCisgICBjX210aW1lCTExCisgICBjX25hbWVzaXplCTYJCWNvdW50IGluY2x1ZGVzIHRlcm1pbmF0aW5nIE5VTCBpbiBwYXRobmFtZQorICAgY19maWxlc2l6ZQkxMQkJbXVzdCBiZSAwIGZvciBGSUZPcyBhbmQgZGlyZWN0b3JpZXMgICovCisKKy8qIFZhbHVlIGZvciB0aGUgZmllbGQgYGNfbWFnaWMnLiAgKi8KKyNkZWZpbmUgTUFHSUMJIjA3MDcwNyIKKworLyogVmFsdWVzIGZvciBjX21vZGUsIE9SJ2QgdG9nZXRoZXI6ICovCisKKyNkZWZpbmUgQ19JUlVTUgkJMDAwNDAwCisjZGVmaW5lIENfSVdVU1IJCTAwMDIwMAorI2RlZmluZSBDX0lYVVNSCQkwMDAxMDAKKyNkZWZpbmUgQ19JUkdSUAkJMDAwMDQwCisjZGVmaW5lIENfSVdHUlAJCTAwMDAyMAorI2RlZmluZSBDX0lYR1JQCQkwMDAwMTAKKyNkZWZpbmUgQ19JUk9USAkJMDAwMDA0CisjZGVmaW5lIENfSVdPVEgJCTAwMDAwMgorI2RlZmluZSBDX0lYT1RICQkwMDAwMDEKKworI2RlZmluZSBDX0lTVUlECQkwMDQwMDAKKyNkZWZpbmUgQ19JU0dJRAkJMDAyMDAwCisjZGVmaW5lIENfSVNWVFgJCTAwMTAwMAorCisjZGVmaW5lIENfSVNCTEsJCTA2MDAwMAorI2RlZmluZSBDX0lTQ0hSCQkwMjAwMDAKKyNkZWZpbmUgQ19JU0RJUgkJMDQwMDAwCisjZGVmaW5lIENfSVNGSUZPCTAxMDAwMAorI2RlZmluZSBDX0lTU09DSwkwMTQwMDAwCisjZGVmaW5lIENfSVNMTksJCTAxMjAwMDAKKyNkZWZpbmUgQ19JU0NURwkJMDExMDAwMAorI2RlZmluZSBDX0lTUkVHCQkwMTAwMDAwCisKKyNlbmRpZiAvKiBjcGlvLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9jcnlwdC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2NyeXB0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNiODlkOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9jcnlwdC5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBVRkMtY3J5cHQ6IHVsdHJhIGZhc3QgY3J5cHQoMykgaW1wbGVtZW50YXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTEsOTIsOTMsOTYsOTcsOTgsMjAwMCwyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAqIDAyMTExLTEzMDcgVVNBLgorICoKKyAqIEAoIyljcnlwdC5oCTEuNSAxMi8yMC85NgorICoKKyAqLworCisjaWZuZGVmIF9DUllQVF9ICisjZGVmaW5lIF9DUllQVF9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKK19fQkVHSU5fREVDTFMKKworLyogRW5jcnlwdCBhdCBtb3N0IDggY2hhcmFjdGVycyBmcm9tIEtFWSB1c2luZyBzYWx0IHRvIHBlcnR1cmIgREVTLiAgKi8KK2V4dGVybiBjaGFyICpjcnlwdCAoX19jb25zdCBjaGFyICpfX2tleSwgX19jb25zdCBjaGFyICpfX3NhbHQpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSwgMikpOworCisvKiBTZXR1cCBERVMgdGFibGVzIGFjY29yZGluZyBLRVkuICAqLworZXh0ZXJuIHZvaWQgc2V0a2V5IChfX2NvbnN0IGNoYXIgKl9fa2V5KSBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworLyogRW5jcnlwdCBkYXRhIGluIEJMT0NLIGluIHBsYWNlIGlmIEVERkxBRyBpcyB6ZXJvOyBvdGhlcndpc2UgZGVjcnlwdAorICAgYmxvY2sgaW4gcGxhY2UuICAqLworZXh0ZXJuIHZvaWQgZW5jcnlwdCAoY2hhciAqX19ibG9jaywgaW50IF9fZWRmbGFnKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworI2lmZGVmIF9fVVNFX0dOVQorLyogUmVlbnRyYW50IHZlcnNpb25zIG9mIHRoZSBmdW5jdGlvbnMgYWJvdmUuICBUaGUgYWRkaXRpb25hbCBhcmd1bWVudAorICAgcG9pbnRzIHRvIGEgc3RydWN0dXJlIHdoZXJlIHRoZSByZXN1bHRzIGFyZSBwbGFjZWQgaW4uICAqLworc3RydWN0IGNyeXB0X2RhdGEKKyAgeworICAgIGNoYXIga2V5c2NoZWRbMTYgKiA4XTsKKyAgICBjaGFyIHNiMFszMjc2OF07CisgICAgY2hhciBzYjFbMzI3NjhdOworICAgIGNoYXIgc2IyWzMyNzY4XTsKKyAgICBjaGFyIHNiM1szMjc2OF07CisgICAgLyogZW5kLW9mLWFsaWdtZW50LWNyaXRpY2FsLWRhdGEgKi8KKyAgICBjaGFyIGNyeXB0XzNfYnVmWzE0XTsKKyAgICBjaGFyIGN1cnJlbnRfc2FsdFsyXTsKKyAgICBsb25nIGludCBjdXJyZW50X3NhbHRiaXRzOworICAgIGludCAgZGlyZWN0aW9uLCBpbml0aWFsaXplZDsKKyAgfTsKKworZXh0ZXJuIGNoYXIgKmNyeXB0X3IgKF9fY29uc3QgY2hhciAqX19rZXksIF9fY29uc3QgY2hhciAqX19zYWx0LAorCQkgICAgICBzdHJ1Y3QgY3J5cHRfZGF0YSAqIF9fcmVzdHJpY3QgX19kYXRhKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDIsIDMpKTsKKworZXh0ZXJuIHZvaWQgc2V0a2V5X3IgKF9fY29uc3QgY2hhciAqX19rZXksCisJCSAgICAgIHN0cnVjdCBjcnlwdF9kYXRhICogX19yZXN0cmljdCBfX2RhdGEpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSwgMikpOworCitleHRlcm4gdm9pZCBlbmNyeXB0X3IgKGNoYXIgKl9fYmxvY2ssIGludCBfX2VkZmxhZywKKwkJICAgICAgIHN0cnVjdCBjcnlwdF9kYXRhICogX19yZXN0cmljdCBfX2RhdGEpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSwgMykpOworI2VuZGlmCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZgkvKiBjcnlwdC5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvY3R5cGUuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9jdHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMWUyNWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvY3R5cGUuaApAQCAtMCwwICsxLDMyNSBAQAorLyogQ29weXJpZ2h0IChDKSAxOTkxLDkyLDkzLDk1LDk2LDk3LDk4LDk5LDIwMDEsMjAwMiwyMDA0LDIwMDcsMjAwOAorICAgCUZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisvKgorICoJSVNPIEM5OSBTdGFuZGFyZCA3LjQ6IENoYXJhY3RlciBoYW5kbGluZwk8Y3R5cGUuaD4KKyAqLworCisjaWZuZGVmCV9DVFlQRV9ICisjZGVmaW5lCV9DVFlQRV9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaW5jbHVkZSA8Yml0cy90eXBlcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKKyNpZm5kZWYgX0lTYml0CisvKiBUaGVzZSBhcmUgYWxsIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgY2hhcmFjdGVycy4KKyAgIElmIHRoZXJlIGdldCB0byBiZSBtb3JlIHRoYW4gMTYgZGlzdGluY3QgY2hhcmFjdGVyaXN0aWNzLAorICAgbWFueSB0aGluZ3MgbXVzdCBiZSBjaGFuZ2VkIHRoYXQgdXNlIGB1bnNpZ25lZCBzaG9ydCBpbnQncy4KKworICAgVGhlIGNoYXJhY3RlcmlzdGljcyBhcmUgc3RvcmVkIGFsd2F5cyBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgKGJpZworICAgZW5kaWFuKS4gIFdlIGRlZmluZSB0aGUgYml0IHZhbHVlIGludGVycHJldGF0aW9ucyBoZXJlIGRlcGVuZGVudCBvbiB0aGUKKyAgIG1hY2hpbmUncyBieXRlIG9yZGVyLiAgKi8KKworIyBpbmNsdWRlIDxlbmRpYW4uaD4KKyMgaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorIyAgZGVmaW5lIF9JU2JpdChiaXQpCSgxIDw8IChiaXQpKQorIyBlbHNlIC8qIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4gKi8KKyMgIGRlZmluZSBfSVNiaXQoYml0KQkoKGJpdCkgPCA4ID8gKCgxIDw8IChiaXQpKSA8PCA4KSA6ICgoMSA8PCAoYml0KSkgPj4gOCkpCisjIGVuZGlmCisKK2VudW0KK3sKKyAgX0lTdXBwZXIgPSBfSVNiaXQgKDApLAkvKiBVUFBFUkNBU0UuICAqLworICBfSVNsb3dlciA9IF9JU2JpdCAoMSksCS8qIGxvd2VyY2FzZS4gICovCisgIF9JU2FscGhhID0gX0lTYml0ICgyKSwJLyogQWxwaGFiZXRpYy4gICovCisgIF9JU2RpZ2l0ID0gX0lTYml0ICgzKSwJLyogTnVtZXJpYy4gICovCisgIF9JU3hkaWdpdCA9IF9JU2JpdCAoNCksCS8qIEhleGFkZWNpbWFsIG51bWVyaWMuICAqLworICBfSVNzcGFjZSA9IF9JU2JpdCAoNSksCS8qIFdoaXRlc3BhY2UuICAqLworICBfSVNwcmludCA9IF9JU2JpdCAoNiksCS8qIFByaW50aW5nLiAgKi8KKyAgX0lTZ3JhcGggPSBfSVNiaXQgKDcpLAkvKiBHcmFwaGljYWwuICAqLworICBfSVNibGFuayA9IF9JU2JpdCAoOCksCS8qIEJsYW5rICh1c3VhbGx5IFNQQyBhbmQgVEFCKS4gICovCisgIF9JU2NudHJsID0gX0lTYml0ICg5KSwJLyogQ29udHJvbCBjaGFyYWN0ZXIuICAqLworICBfSVNwdW5jdCA9IF9JU2JpdCAoMTApLAkvKiBQdW5jdHVhdGlvbi4gICovCisgIF9JU2FsbnVtID0gX0lTYml0ICgxMSkJLyogQWxwaGFudW1lcmljLiAgKi8KK307CisjZW5kaWYgLyogISBfSVNiaXQgICovCisKKy8qIFRoZXNlIGFyZSBkZWZpbmVkIGluIGN0eXBlLWluZm8uYy4KKyAgIFRoZSBkZWNsYXJhdGlvbnMgaGVyZSBtdXN0IG1hdGNoIHRob3NlIGluIGxvY2FsZWluZm8uaC4KKworICAgSW4gdGhlIHRocmVhZC1zcGVjaWZpYyBsb2NhbGUgbW9kZWwgKHNlZSBgdXNlbG9jYWxlJyBpbiA8bG9jYWxlLmg+KQorICAgd2UgY2Fubm90IHVzZSBnbG9iYWwgdmFyaWFibGVzIGZvciB0aGVzZSBhcyB3YXMgZG9uZSBpbiB0aGUgcGFzdC4KKyAgIEluc3RlYWQsIHRoZSBmb2xsb3dpbmcgYWNjZXNzb3IgZnVuY3Rpb25zIHJldHVybiB0aGUgYWRkcmVzcyBvZgorICAgZWFjaCB2YXJpYWJsZSwgd2hpY2ggaXMgbG9jYWwgdG8gdGhlIGN1cnJlbnQgdGhyZWFkIGlmIG11bHRpdGhyZWFkZWQuCisKKyAgIFRoZXNlIHBvaW50IGludG8gYXJyYXlzIG9mIDM4NCwgc28gdGhleSBjYW4gYmUgaW5kZXhlZCBieSBhbnkgYHVuc2lnbmVkCisgICBjaGFyJyB2YWx1ZSBbMCwyNTVdOyBieSBFT0YgKC0xKTsgb3IgYnkgYW55IGBzaWduZWQgY2hhcicgdmFsdWUKKyAgIFstMTI4LC0xKS4gIElTTyBDIHJlcXVpcmVzIHRoYXQgdGhlIGN0eXBlIGZ1bmN0aW9ucyB3b3JrIGZvciBgdW5zaWduZWQKKyAgIGNoYXInIHZhbHVlcyBhbmQgZm9yIEVPRjsgd2UgYWxzbyBzdXBwb3J0IG5lZ2F0aXZlIGBzaWduZWQgY2hhcicgdmFsdWVzCisgICBmb3IgYnJva2VuIG9sZCBwcm9ncmFtcy4gIFRoZSBjYXNlIGNvbnZlcnNpb24gYXJyYXlzIGFyZSBvZiBgaW50J3MKKyAgIHJhdGhlciB0aGFuIGB1bnNpZ25lZCBjaGFyJ3MgYmVjYXVzZSB0b2xvd2VyIChFT0YpIG11c3QgYmUgRU9GLCB3aGljaAorICAgZG9lc24ndCBmaXQgaW50byBhbiBgdW5zaWduZWQgY2hhcicuICBCdXQgdG9kYXkgbW9yZSBpbXBvcnRhbnQgaXMgdGhhdAorICAgdGhlIGFycmF5cyBhcmUgYWxzbyB1c2VkIGZvciBtdWx0aS1ieXRlIGNoYXJhY3RlciBzZXRzLiAgKi8KK2V4dGVybiBfX2NvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqKl9fY3R5cGVfYl9sb2MgKHZvaWQpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3QpKTsKK2V4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqKl9fY3R5cGVfdG9sb3dlcl9sb2MgKHZvaWQpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3QpKTsKK2V4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqKl9fY3R5cGVfdG91cHBlcl9sb2MgKHZvaWQpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3QpKTsKKworI2RlZmluZSBfX2lzY3R5cGUoYywgdHlwZSkgXAorICAoKCpfX2N0eXBlX2JfbG9jICgpKVsoaW50KSAoYyldICYgKHVuc2lnbmVkIHNob3J0IGludCkgdHlwZSkKKworI2RlZmluZQlfX2lzYXNjaWkoYykJKCgoYykgJiB+MHg3ZikgPT0gMCkJLyogSWYgQyBpcyBhIDcgYml0IHZhbHVlLiAgKi8KKyNkZWZpbmUJX190b2FzY2lpKGMpCSgoYykgJiAweDdmKQkJLyogTWFzayBvZmYgaGlnaCBiaXRzLiAgKi8KKworI2RlZmluZQlfX2V4Y3R5cGUobmFtZSkJZXh0ZXJuIGludCBuYW1lIChpbnQpIF9fVEhST1cKKworX19CRUdJTl9OQU1FU1BBQ0VfU1RECisKKy8qIFRoZSBmb2xsb3dpbmcgbmFtZXMgYXJlIGFsbCBmdW5jdGlvbnM6CisgICAgIGludCBpc0NIQVJBQ1RFUklTVElDKGludCBjKTsKKyAgIHdoaWNoIHJldHVybiBub256ZXJvIGlmZiBDIGhhcyBDSEFSQUNURVJJU1RJQy4KKyAgIEZvciB0aGUgbWVhbmluZyBvZiB0aGUgY2hhcmFjdGVyaXN0aWMgbmFtZXMsIHNlZSB0aGUgYGVudW0nIGFib3ZlLiAgKi8KK19fZXhjdHlwZSAoaXNhbG51bSk7CitfX2V4Y3R5cGUgKGlzYWxwaGEpOworX19leGN0eXBlIChpc2NudHJsKTsKK19fZXhjdHlwZSAoaXNkaWdpdCk7CitfX2V4Y3R5cGUgKGlzbG93ZXIpOworX19leGN0eXBlIChpc2dyYXBoKTsKK19fZXhjdHlwZSAoaXNwcmludCk7CitfX2V4Y3R5cGUgKGlzcHVuY3QpOworX19leGN0eXBlIChpc3NwYWNlKTsKK19fZXhjdHlwZSAoaXN1cHBlcik7CitfX2V4Y3R5cGUgKGlzeGRpZ2l0KTsKKworCisvKiBSZXR1cm4gdGhlIGxvd2VyY2FzZSB2ZXJzaW9uIG9mIEMuICAqLworZXh0ZXJuIGludCB0b2xvd2VyIChpbnQgX19jKSBfX1RIUk9XOworCisvKiBSZXR1cm4gdGhlIHVwcGVyY2FzZSB2ZXJzaW9uIG9mIEMuICAqLworZXh0ZXJuIGludCB0b3VwcGVyIChpbnQgX19jKSBfX1RIUk9XOworCitfX0VORF9OQU1FU1BBQ0VfU1RECisKKworLyogSVNPIEM5OSBpbnRyb2R1Y2VkIG9uZSBuZXcgZnVuY3Rpb24uICAqLworI2lmZGVmCV9fVVNFX0lTT0M5OQorX19CRUdJTl9OQU1FU1BBQ0VfQzk5CisKK19fZXhjdHlwZSAoaXNibGFuayk7CisKK19fRU5EX05BTUVTUEFDRV9DOTkKKyNlbmRpZgorCisjaWZkZWYgX19VU0VfR05VCisvKiBUZXN0IEMgZm9yIGEgc2V0IG9mIGNoYXJhY3RlciBjbGFzc2VzIGFjY29yZGluZyB0byBNQVNLLiAgKi8KK2V4dGVybiBpbnQgaXNjdHlwZSAoaW50IF9fYywgaW50IF9fbWFzaykgX19USFJPVzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfX1VTRV9TVklEIHx8IGRlZmluZWQgX19VU0VfTUlTQyB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOCisKKy8qIFJldHVybiBub256ZXJvIGlmZiBDIGlzIGluIHRoZSBBU0NJSSBzZXQKKyAgIChpLmUuLCBpcyBubyBtb3JlIHRoYW4gNyBiaXRzIHdpZGUpLiAgKi8KK2V4dGVybiBpbnQgaXNhc2NpaSAoaW50IF9fYykgX19USFJPVzsKKworLyogUmV0dXJuIHRoZSBwYXJ0IG9mIEMgdGhhdCBpcyBpbiB0aGUgQVNDSUkgc2V0CisgICAoaS5lLiwgdGhlIGxvdy1vcmRlciA3IGJpdHMgb2YgQykuICAqLworZXh0ZXJuIGludCB0b2FzY2lpIChpbnQgX19jKSBfX1RIUk9XOworCisvKiBUaGVzZSBhcmUgdGhlIHNhbWUgYXMgYHRvdXBwZXInIGFuZCBgdG9sb3dlcicgZXhjZXB0IHRoYXQgdGhleSBkbyBub3QKKyAgIGNoZWNrIHRoZSBhcmd1bWVudCBmb3IgYmVpbmcgaW4gdGhlIHJhbmdlIG9mIGEgYGNoYXInLiAgKi8KK19fZXhjdHlwZSAoX3RvdXBwZXIpOworX19leGN0eXBlIChfdG9sb3dlcik7CisjZW5kaWYgLyogVXNlIFNWSUQgb3IgdXNlIG1pc2MuICAqLworCisvKiBUaGlzIGNvZGUgaXMgbmVlZGVkIGZvciB0aGUgb3B0aW1pemVkIG1hcHBpbmcgZnVuY3Rpb25zLiAgKi8KKyNkZWZpbmUgX190b2JvZHkoYywgZiwgYSwgYXJncykgXAorICAoX19leHRlbnNpb25fXwkJCQkJCQkgICAgICBcCisgICAoeyBpbnQgX19yZXM7CQkJCQkJCSAgICAgIFwKKyAgICAgIGlmIChzaXplb2YgKGMpID4gMSkJCQkJCQkgICAgICBcCisJewkJCQkJCQkJICAgICAgXAorCSAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChjKSkJCQkJCSAgICAgIFwKKwkgICAgewkJCQkJCQkJICAgICAgXAorCSAgICAgIGludCBfX2MgPSAoYyk7CQkJCQkJICAgICAgXAorCSAgICAgIF9fcmVzID0gX19jIDwgLTEyOCB8fCBfX2MgPiAyNTUgPyBfX2MgOiAoYSlbX19jXTsJCSAgICAgIFwKKwkgICAgfQkJCQkJCQkJICAgICAgXAorCSAgZWxzZQkJCQkJCQkJICAgICAgXAorCSAgICBfX3JlcyA9IGYgYXJnczsJCQkJCQkgICAgICBcCisJfQkJCQkJCQkJICAgICAgXAorICAgICAgZWxzZQkJCQkJCQkJICAgICAgXAorCV9fcmVzID0gKGEpWyhpbnQpIChjKV07CQkJCQkJICAgICAgXAorICAgICAgX19yZXM7IH0pKQorCisjaWYgIWRlZmluZWQgX19OT19DVFlQRSAmJiAhZGVmaW5lZCBfX2NwbHVzcGx1cworIyBkZWZpbmUgaXNhbG51bShjKQlfX2lzY3R5cGUoKGMpLCBfSVNhbG51bSkKKyMgZGVmaW5lIGlzYWxwaGEoYykJX19pc2N0eXBlKChjKSwgX0lTYWxwaGEpCisjIGRlZmluZSBpc2NudHJsKGMpCV9faXNjdHlwZSgoYyksIF9JU2NudHJsKQorIyBkZWZpbmUgaXNkaWdpdChjKQlfX2lzY3R5cGUoKGMpLCBfSVNkaWdpdCkKKyMgZGVmaW5lIGlzbG93ZXIoYykJX19pc2N0eXBlKChjKSwgX0lTbG93ZXIpCisjIGRlZmluZSBpc2dyYXBoKGMpCV9faXNjdHlwZSgoYyksIF9JU2dyYXBoKQorIyBkZWZpbmUgaXNwcmludChjKQlfX2lzY3R5cGUoKGMpLCBfSVNwcmludCkKKyMgZGVmaW5lIGlzcHVuY3QoYykJX19pc2N0eXBlKChjKSwgX0lTcHVuY3QpCisjIGRlZmluZSBpc3NwYWNlKGMpCV9faXNjdHlwZSgoYyksIF9JU3NwYWNlKQorIyBkZWZpbmUgaXN1cHBlcihjKQlfX2lzY3R5cGUoKGMpLCBfSVN1cHBlcikKKyMgZGVmaW5lIGlzeGRpZ2l0KGMpCV9faXNjdHlwZSgoYyksIF9JU3hkaWdpdCkKKworIyBpZmRlZiBfX1VTRV9JU09DOTkKKyMgIGRlZmluZSBpc2JsYW5rKGMpCV9faXNjdHlwZSgoYyksIF9JU2JsYW5rKQorIyBlbmRpZgorCisjIGlmZGVmIF9fVVNFX0VYVEVSTl9JTkxJTkVTCitfX2V4dGVybl9pbmxpbmUgaW50CitfX05USCAodG9sb3dlciAoaW50IF9fYykpCit7CisgIHJldHVybiBfX2MgPj0gLTEyOCAmJiBfX2MgPCAyNTYgPyAoKl9fY3R5cGVfdG9sb3dlcl9sb2MgKCkpW19fY10gOiBfX2M7Cit9CisKK19fZXh0ZXJuX2lubGluZSBpbnQKK19fTlRIICh0b3VwcGVyIChpbnQgX19jKSkKK3sKKyAgcmV0dXJuIF9fYyA+PSAtMTI4ICYmIF9fYyA8IDI1NiA/ICgqX19jdHlwZV90b3VwcGVyX2xvYyAoKSlbX19jXSA6IF9fYzsKK30KKyMgZW5kaWYKKworIyBpZiBfX0dOVUNfXyA+PSAyICYmIGRlZmluZWQgX19PUFRJTUlaRV9fICYmICFkZWZpbmVkIF9fY3BsdXNwbHVzCisjICBkZWZpbmUgdG9sb3dlcihjKQlfX3RvYm9keSAoYywgdG9sb3dlciwgKl9fY3R5cGVfdG9sb3dlcl9sb2MgKCksIChjKSkKKyMgIGRlZmluZSB0b3VwcGVyKGMpCV9fdG9ib2R5IChjLCB0b3VwcGVyLCAqX19jdHlwZV90b3VwcGVyX2xvYyAoKSwgKGMpKQorIyBlbmRpZiAvKiBPcHRpbWl6aW5nIGdjYyAqLworCisjIGlmIGRlZmluZWQgX19VU0VfU1ZJRCB8fCBkZWZpbmVkIF9fVVNFX01JU0MgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTgorIyAgZGVmaW5lIGlzYXNjaWkoYykJX19pc2FzY2lpIChjKQorIyAgZGVmaW5lIHRvYXNjaWkoYykJX190b2FzY2lpIChjKQorCisjICBkZWZpbmUgX3RvbG93ZXIoYykJKChpbnQpICgqX19jdHlwZV90b2xvd2VyX2xvYyAoKSlbKGludCkgKGMpXSkKKyMgIGRlZmluZSBfdG91cHBlcihjKQkoKGludCkgKCpfX2N0eXBlX3RvdXBwZXJfbG9jICgpKVsoaW50KSAoYyldKQorIyBlbmRpZgorCisjZW5kaWYgLyogTm90IF9fTk9fQ1RZUEUuICAqLworCisKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIFRoZSBjb25jZXB0IG9mIG9uZSBzdGF0aWMgbG9jYWxlIHBlciBjYXRlZ29yeSBpcyBub3QgdmVyeSB3ZWxsCisgICB0aG91Z2h0IG91dC4gIE1hbnkgYXBwbGljYXRpb25zIHdpbGwgbmVlZCB0byBwcm9jZXNzIGl0cyBkYXRhIHVzaW5nCisgICBpbmZvcm1hdGlvbiBmcm9tIHNldmVyYWwgZGlmZmVyZW50IGxvY2FsZXMuICBBbm90aGVyIGFwcGxpY2F0aW9uIGlzCisgICB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGludGVybmF0aW9uYWxpemF0aW9uIGhhbmRsaW5nIGluIHRoZQorICAgdXBjb21pbmcgSVNPIEMrKyBzdGFuZGFyZCBsaWJyYXJ5LiAgVG8gc3VwcG9ydCB0aGlzIGFub3RoZXIgc2V0IG9mCisgICB0aGUgZnVuY3Rpb25zIHVzaW5nIGxvY2FsZSBkYXRhIGV4aXN0IHdoaWNoIGhhdmUgYW4gYWRkaXRpb25hbAorICAgYXJndW1lbnQuCisKKyAgIEF0dGVudGlvbjogYWxsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgKm5vdCogc3RhbmRhcmRpemVkIGluIGFueSBmb3JtLgorICAgVGhpcyBpcyBhIHByb29mLW9mLWNvbmNlcHQgaW1wbGVtZW50YXRpb24uICAqLworCisvKiBTdHJ1Y3R1cmUgZm9yIHJlZW50cmFudCBsb2NhbGUgdXNpbmcgZnVuY3Rpb25zLiAgVGhpcyBpcyBhbgorICAgKGFsbW9zdCkgb3BhcXVlIHR5cGUgZm9yIHRoZSB1c2VyIGxldmVsIHByb2dyYW1zLiAgKi8KKyMgaW5jbHVkZSA8eGxvY2FsZS5oPgorCisvKiBUaGVzZSBkZWZpbml0aW9ucyBhcmUgc2ltaWxhciB0byB0aGUgb25lcyBhYm92ZSBidXQgYWxsIGZ1bmN0aW9ucworICAgdGFrZSBhcyBhbiBhcmd1bWVudCBhIGhhbmRsZSBmb3IgdGhlIGxvY2FsZSB3aGljaCBzaGFsbCBiZSB1c2VkLiAgKi8KKyMgIGRlZmluZSBfX2lzY3R5cGVfbChjLCB0eXBlLCBsb2NhbGUpIFwKKyAgKChsb2NhbGUpLT5fX2N0eXBlX2JbKGludCkgKGMpXSAmICh1bnNpZ25lZCBzaG9ydCBpbnQpIHR5cGUpCisKKyMgZGVmaW5lIF9fZXhjdHlwZV9sKG5hbWUpIAkJCQkJCSAgICAgIFwKKyAgZXh0ZXJuIGludCBuYW1lIChpbnQsIF9fbG9jYWxlX3QpIF9fVEhST1cKKworLyogVGhlIGZvbGxvd2luZyBuYW1lcyBhcmUgYWxsIGZ1bmN0aW9uczoKKyAgICAgaW50IGlzQ0hBUkFDVEVSSVNUSUMoaW50IGMsIGxvY2FsZV90ICpsb2NhbGUpOworICAgd2hpY2ggcmV0dXJuIG5vbnplcm8gaWZmIEMgaGFzIENIQVJBQ1RFUklTVElDLgorICAgRm9yIHRoZSBtZWFuaW5nIG9mIHRoZSBjaGFyYWN0ZXJpc3RpYyBuYW1lcywgc2VlIHRoZSBgZW51bScgYWJvdmUuICAqLworX19leGN0eXBlX2wgKGlzYWxudW1fbCk7CitfX2V4Y3R5cGVfbCAoaXNhbHBoYV9sKTsKK19fZXhjdHlwZV9sIChpc2NudHJsX2wpOworX19leGN0eXBlX2wgKGlzZGlnaXRfbCk7CitfX2V4Y3R5cGVfbCAoaXNsb3dlcl9sKTsKK19fZXhjdHlwZV9sIChpc2dyYXBoX2wpOworX19leGN0eXBlX2wgKGlzcHJpbnRfbCk7CitfX2V4Y3R5cGVfbCAoaXNwdW5jdF9sKTsKK19fZXhjdHlwZV9sIChpc3NwYWNlX2wpOworX19leGN0eXBlX2wgKGlzdXBwZXJfbCk7CitfX2V4Y3R5cGVfbCAoaXN4ZGlnaXRfbCk7CisKK19fZXhjdHlwZV9sIChpc2JsYW5rX2wpOworCisKKy8qIFJldHVybiB0aGUgbG93ZXJjYXNlIHZlcnNpb24gb2YgQyBpbiBsb2NhbGUgTC4gICovCitleHRlcm4gaW50IF9fdG9sb3dlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgX19USFJPVzsKK2V4dGVybiBpbnQgdG9sb3dlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgX19USFJPVzsKKworLyogUmV0dXJuIHRoZSB1cHBlcmNhc2UgdmVyc2lvbiBvZiBDLiAgKi8KK2V4dGVybiBpbnQgX190b3VwcGVyX2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSBfX1RIUk9XOworZXh0ZXJuIGludCB0b3VwcGVyX2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSBfX1RIUk9XOworCisjIGlmIF9fR05VQ19fID49IDIgJiYgZGVmaW5lZCBfX09QVElNSVpFX18gJiYgIWRlZmluZWQgX19jcGx1c3BsdXMKKyMgIGRlZmluZSBfX3RvbG93ZXJfbChjLCBsb2NhbGUpIFwKKyAgX190b2JvZHkgKGMsIF9fdG9sb3dlcl9sLCAobG9jYWxlKS0+X19jdHlwZV90b2xvd2VyLCAoYywgbG9jYWxlKSkKKyMgIGRlZmluZSBfX3RvdXBwZXJfbChjLCBsb2NhbGUpIFwKKyAgX190b2JvZHkgKGMsIF9fdG91cHBlcl9sLCAobG9jYWxlKS0+X19jdHlwZV90b3VwcGVyLCAoYywgbG9jYWxlKSkKKyMgIGRlZmluZSB0b2xvd2VyX2woYywgbG9jYWxlKQlfX3RvbG93ZXJfbCAoKGMpLCAobG9jYWxlKSkKKyMgIGRlZmluZSB0b3VwcGVyX2woYywgbG9jYWxlKQlfX3RvdXBwZXJfbCAoKGMpLCAobG9jYWxlKSkKKyMgZW5kaWYJLyogT3B0aW1pemluZyBnY2MgKi8KKworCisjIGlmbmRlZiBfX05PX0NUWVBFCisjICBkZWZpbmUgX19pc2FsbnVtX2woYyxsKQlfX2lzY3R5cGVfbCgoYyksIF9JU2FsbnVtLCAobCkpCisjICBkZWZpbmUgX19pc2FscGhhX2woYyxsKQlfX2lzY3R5cGVfbCgoYyksIF9JU2FscGhhLCAobCkpCisjICBkZWZpbmUgX19pc2NudHJsX2woYyxsKQlfX2lzY3R5cGVfbCgoYyksIF9JU2NudHJsLCAobCkpCisjICBkZWZpbmUgX19pc2RpZ2l0X2woYyxsKQlfX2lzY3R5cGVfbCgoYyksIF9JU2RpZ2l0LCAobCkpCisjICBkZWZpbmUgX19pc2xvd2VyX2woYyxsKQlfX2lzY3R5cGVfbCgoYyksIF9JU2xvd2VyLCAobCkpCisjICBkZWZpbmUgX19pc2dyYXBoX2woYyxsKQlfX2lzY3R5cGVfbCgoYyksIF9JU2dyYXBoLCAobCkpCisjICBkZWZpbmUgX19pc3ByaW50X2woYyxsKQlfX2lzY3R5cGVfbCgoYyksIF9JU3ByaW50LCAobCkpCisjICBkZWZpbmUgX19pc3B1bmN0X2woYyxsKQlfX2lzY3R5cGVfbCgoYyksIF9JU3B1bmN0LCAobCkpCisjICBkZWZpbmUgX19pc3NwYWNlX2woYyxsKQlfX2lzY3R5cGVfbCgoYyksIF9JU3NwYWNlLCAobCkpCisjICBkZWZpbmUgX19pc3VwcGVyX2woYyxsKQlfX2lzY3R5cGVfbCgoYyksIF9JU3VwcGVyLCAobCkpCisjICBkZWZpbmUgX19pc3hkaWdpdF9sKGMsbCkJX19pc2N0eXBlX2woKGMpLCBfSVN4ZGlnaXQsIChsKSkKKworIyAgZGVmaW5lIF9faXNibGFua19sKGMsbCkJX19pc2N0eXBlX2woKGMpLCBfSVNibGFuaywgKGwpKQorCisjICBpZiBkZWZpbmVkIF9fVVNFX1NWSUQgfHwgZGVmaW5lZCBfX1VTRV9NSVNDIHx8IGRlZmluZWQgX19VU0VfWE9QRU4KKyMgICBkZWZpbmUgX19pc2FzY2lpX2woYyxsKQkoKGwpLCBfX2lzYXNjaWkgKGMpKQorIyAgIGRlZmluZSBfX3RvYXNjaWlfbChjLGwpCSgobCksIF9fdG9hc2NpaSAoYykpCisjICBlbmRpZgorCisjICBkZWZpbmUgaXNhbG51bV9sKGMsbCkJX19pc2FsbnVtX2wgKChjKSwgKGwpKQorIyAgZGVmaW5lIGlzYWxwaGFfbChjLGwpCV9faXNhbHBoYV9sICgoYyksIChsKSkKKyMgIGRlZmluZSBpc2NudHJsX2woYyxsKQlfX2lzY250cmxfbCAoKGMpLCAobCkpCisjICBkZWZpbmUgaXNkaWdpdF9sKGMsbCkJX19pc2RpZ2l0X2wgKChjKSwgKGwpKQorIyAgZGVmaW5lIGlzbG93ZXJfbChjLGwpCV9faXNsb3dlcl9sICgoYyksIChsKSkKKyMgIGRlZmluZSBpc2dyYXBoX2woYyxsKQlfX2lzZ3JhcGhfbCAoKGMpLCAobCkpCisjICBkZWZpbmUgaXNwcmludF9sKGMsbCkJX19pc3ByaW50X2wgKChjKSwgKGwpKQorIyAgZGVmaW5lIGlzcHVuY3RfbChjLGwpCV9faXNwdW5jdF9sICgoYyksIChsKSkKKyMgIGRlZmluZSBpc3NwYWNlX2woYyxsKQlfX2lzc3BhY2VfbCAoKGMpLCAobCkpCisjICBkZWZpbmUgaXN1cHBlcl9sKGMsbCkJX19pc3VwcGVyX2wgKChjKSwgKGwpKQorIyAgZGVmaW5lIGlzeGRpZ2l0X2woYyxsKQlfX2lzeGRpZ2l0X2wgKChjKSwgKGwpKQorCisjICBkZWZpbmUgaXNibGFua19sKGMsbCkJX19pc2JsYW5rX2wgKChjKSwgKGwpKQorCisjICBpZiBkZWZpbmVkIF9fVVNFX1NWSUQgfHwgZGVmaW5lZCBfX1VTRV9NSVNDIHx8IGRlZmluZWQgX19VU0VfWE9QRU4KKyMgICBkZWZpbmUgaXNhc2NpaV9sKGMsbCkJX19pc2FzY2lpX2wgKChjKSwgKGwpKQorIyAgIGRlZmluZSB0b2FzY2lpX2woYyxsKQlfX3RvYXNjaWlfbCAoKGMpLCAobCkpCisjICBlbmRpZgorCisjIGVuZGlmIC8qIE5vdCBfX05PX0NUWVBFLiAgKi8KKworI2VuZGlmIC8qIFVzZSBHTlUuICAqLworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogY3R5cGUuaCAgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9kaXJlbnQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9kaXJlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDQxNDdkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2RpcmVudC5oCkBAIC0wLDAgKzEsMzUxIEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTEtMjAwMCwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyoKKyAqCVBPU0lYIFN0YW5kYXJkOiA1LjEuMiBEaXJlY3RvcnkgT3BlcmF0aW9ucwk8ZGlyZW50Lmg+CisgKi8KKworI2lmbmRlZglfRElSRU5UX0gKKyNkZWZpbmUJX0RJUkVOVF9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKK19fQkVHSU5fREVDTFMKKworI2luY2x1ZGUgPGJpdHMvdHlwZXMuaD4KKworI2lmZGVmIF9fVVNFX1hPUEVOCisjIGlmbmRlZiBfX2lub190X2RlZmluZWQKKyMgIGlmbmRlZiBfX1VTRV9GSUxFX09GRlNFVDY0Cit0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CisjICBlbHNlCit0eXBlZGVmIF9faW5vNjRfdCBpbm9fdDsKKyMgIGVuZGlmCisjICBkZWZpbmUgX19pbm9fdF9kZWZpbmVkCisjIGVuZGlmCisjIGlmIGRlZmluZWQgX19VU0VfTEFSR0VGSUxFNjQgJiYgIWRlZmluZWQgX19pbm82NF90X2RlZmluZWQKK3R5cGVkZWYgX19pbm82NF90IGlubzY0X3Q7CisjICBkZWZpbmUgX19pbm82NF90X2RlZmluZWQKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBUaGlzIGZpbGUgZGVmaW5lcyBgc3RydWN0IGRpcmVudCcuCisKKyAgIEl0IGRlZmluZXMgdGhlIG1hY3JvIGBfRElSRU5UX0hBVkVfRF9OQU1MRU4nIGlmZiB0aGVyZSBpcyBhIGBkX25hbWxlbicKKyAgIG1lbWJlciB0aGF0IGdpdmVzIHRoZSBsZW5ndGggb2YgYGRfbmFtZScuCisKKyAgIEl0IGRlZmluZXMgdGhlIG1hY3JvIGBfRElSRU5UX0hBVkVfRF9SRUNMRU4nIGlmZiB0aGVyZSBpcyBhIGBkX3JlY2xlbicKKyAgIG1lbWJlciB0aGF0IGdpdmVzIHRoZSBzaXplIG9mIHRoZSBlbnRpcmUgZGlyZWN0b3J5IGVudHJ5LgorCisgICBJdCBkZWZpbmVzIHRoZSBtYWNybyBgX0RJUkVOVF9IQVZFX0RfT0ZGJyBpZmYgdGhlcmUgaXMgYSBgZF9vZmYnCisgICBtZW1iZXIgdGhhdCBnaXZlcyB0aGUgZmlsZSBvZmZzZXQgb2YgdGhlIG5leHQgZGlyZWN0b3J5IGVudHJ5LgorCisgICBJdCBkZWZpbmVzIHRoZSBtYWNybyBgX0RJUkVOVF9IQVZFX0RfVFlQRScgaWZmIHRoZXJlIGlzIGEgYGRfdHlwZScKKyAgIG1lbWJlciB0aGF0IGdpdmVzIHRoZSB0eXBlIG9mIHRoZSBmaWxlLgorICovCisKKyNpbmNsdWRlIDxiaXRzL2RpcmVudC5oPgorCisjaWYgKGRlZmluZWQgX19VU0VfQlNEIHx8IGRlZmluZWQgX19VU0VfTUlTQykgJiYgIWRlZmluZWQgZF9maWxlbm8KKyMgZGVmaW5lIGRfaW5vCWRfZmlsZW5vCQkgLyogQmFja3dhcmQgY29tcGF0aWJpbGl0eS4gICovCisjZW5kaWYKKworLyogVGhlc2UgbWFjcm9zIGV4dHJhY3Qgc2l6ZSBpbmZvcm1hdGlvbiBmcm9tIGEgYHN0cnVjdCBkaXJlbnQgKicuCisgICBUaGV5IG1heSBldmFsdWF0ZSB0aGVpciBhcmd1bWVudCBtdWx0aXBsZSB0aW1lcywgc28gaXQgbXVzdCBub3QKKyAgIGhhdmUgc2lkZSBlZmZlY3RzLiAgRWFjaCBvZiB0aGVzZSBtYXkgaW52b2x2ZSBhIHJlbGF0aXZlbHkgY29zdGx5CisgICBjYWxsIHRvIGBzdHJsZW4nIG9uIHNvbWUgc3lzdGVtcywgc28gdGhlc2UgdmFsdWVzIHNob3VsZCBiZSBjYWNoZWQuCisKKyAgIF9EX0VYQUNUX05BTUxFTiAoRFApCXJldHVybnMgdGhlIGxlbmd0aCBvZiBEUC0+ZF9uYW1lLCBub3QgaW5jbHVkaW5nCisgICBpdHMgdGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIuCisKKyAgIF9EX0FMTE9DX05BTUxFTiAoRFApCXJldHVybnMgYSBzaXplIGF0IGxlYXN0IChfRF9FWEFDVF9OQU1MRU4gKERQKSArIDEpOworICAgdGhhdCBpcywgdGhlIGFsbG9jYXRpb24gc2l6ZSBuZWVkZWQgdG8gaG9sZCB0aGUgRFAtPmRfbmFtZSBzdHJpbmcuCisgICBVc2UgdGhpcyBtYWNybyB3aGVuIHlvdSBkb24ndCBuZWVkIHRoZSBleGFjdCBsZW5ndGgsIGp1c3QgYW4gdXBwZXIgYm91bmQuCisgICBUaGlzIG1hY3JvIGlzIGxlc3MgbGlrZWx5IHRvIHJlcXVpcmUgY2FsbGluZyBgc3RybGVuJyB0aGFuIF9EX0VYQUNUX05BTUxFTi4KKyAgICovCisKKyNpZmRlZiBfRElSRU5UX0hBVkVfRF9OQU1MRU4KKyMgZGVmaW5lIF9EX0VYQUNUX05BTUxFTihkKSAoKGQpLT5kX25hbWxlbikKKyMgZGVmaW5lIF9EX0FMTE9DX05BTUxFTihkKSAoX0RfRVhBQ1RfTkFNTEVOIChkKSArIDEpCisjZWxzZQorIyBkZWZpbmUgX0RfRVhBQ1RfTkFNTEVOKGQpIChzdHJsZW4gKChkKS0+ZF9uYW1lKSkKKyMgaWZkZWYgX0RJUkVOVF9IQVZFX0RfUkVDTEVOCisjICBkZWZpbmUgX0RfQUxMT0NfTkFNTEVOKGQpICgoKGNoYXIgKikgKGQpICsgKGQpLT5kX3JlY2xlbikgLSAmKGQpLT5kX25hbWVbMF0pCisjIGVsc2UKKyMgIGRlZmluZSBfRF9BTExPQ19OQU1MRU4oZCkgKHNpemVvZiAoZCktPmRfbmFtZSA+IDEgPyBzaXplb2YgKGQpLT5kX25hbWUgOiBcCisJCQkgICAgICBfRF9FWEFDVF9OQU1MRU4gKGQpICsgMSkKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZmRlZiBfX1VTRV9CU0QKKy8qIEZpbGUgdHlwZXMgZm9yIGBkX3R5cGUnLiAgKi8KK2VudW0KKyAgeworICAgIERUX1VOS05PV04gPSAwLAorIyBkZWZpbmUgRFRfVU5LTk9XTglEVF9VTktOT1dOCisgICAgRFRfRklGTyA9IDEsCisjIGRlZmluZSBEVF9GSUZPCURUX0ZJRk8KKyAgICBEVF9DSFIgPSAyLAorIyBkZWZpbmUgRFRfQ0hSCQlEVF9DSFIKKyAgICBEVF9ESVIgPSA0LAorIyBkZWZpbmUgRFRfRElSCQlEVF9ESVIKKyAgICBEVF9CTEsgPSA2LAorIyBkZWZpbmUgRFRfQkxLCQlEVF9CTEsKKyAgICBEVF9SRUcgPSA4LAorIyBkZWZpbmUgRFRfUkVHCQlEVF9SRUcKKyAgICBEVF9MTksgPSAxMCwKKyMgZGVmaW5lIERUX0xOSwkJRFRfTE5LCisgICAgRFRfU09DSyA9IDEyLAorIyBkZWZpbmUgRFRfU09DSwlEVF9TT0NLCisgICAgRFRfV0hUID0gMTQKKyMgZGVmaW5lIERUX1dIVAkJRFRfV0hUCisgIH07CisKKy8qIENvbnZlcnQgYmV0d2VlbiBzdGF0IHN0cnVjdHVyZSB0eXBlcyBhbmQgZGlyZWN0b3J5IHR5cGVzLiAgKi8KKyMgZGVmaW5lIElGVE9EVChtb2RlKQkoKChtb2RlKSAmIDAxNzAwMDApID4+IDEyKQorIyBkZWZpbmUgRFRUT0lGKGRpcnR5cGUpCSgoZGlydHlwZSkgPDwgMTIpCisjZW5kaWYKKworCisvKiBUaGlzIGlzIHRoZSBkYXRhIHR5cGUgb2YgZGlyZWN0b3J5IHN0cmVhbSBvYmplY3RzLgorICAgVGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgb3BhcXVlIHRvIHVzZXJzLiAgKi8KK3R5cGVkZWYgc3RydWN0IF9fZGlyc3RyZWFtIERJUjsKKworLyogT3BlbiBhIGRpcmVjdG9yeSBzdHJlYW0gb24gTkFNRS4KKyAgIFJldHVybiBhIERJUiBzdHJlYW0gb24gdGhlIGRpcmVjdG9yeSwgb3IgTlVMTCBpZiBpdCBjb3VsZCBub3QgYmUgb3BlbmVkLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBESVIgKm9wZW5kaXIgKF9fY29uc3QgY2hhciAqX19uYW1lKSBfX25vbm51bGwgKCgxKSk7CisKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIFNhbWUgYXMgb3BlbmRpciwgYnV0IG9wZW4gdGhlIHN0cmVhbSBvbiB0aGUgZmlsZSBkZXNjcmlwdG9yIEZELgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBESVIgKmZkb3BlbmRpciAoaW50IF9fZmQpOworI2VuZGlmCisKKy8qIENsb3NlIHRoZSBkaXJlY3Rvcnkgc3RyZWFtIERJUlAuCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCAtMSBpZiBub3QuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBjbG9zZWRpciAoRElSICpfX2RpcnApIF9fbm9ubnVsbCAoKDEpKTsKKworLyogUmVhZCBhIGRpcmVjdG9yeSBlbnRyeSBmcm9tIERJUlAuICBSZXR1cm4gYSBwb2ludGVyIHRvIGEgYHN0cnVjdAorICAgZGlyZW50JyBkZXNjcmliaW5nIHRoZSBlbnRyeSwgb3IgTlVMTCBmb3IgRU9GIG9yIGVycm9yLiAgVGhlCisgICBzdG9yYWdlIHJldHVybmVkIG1heSBiZSBvdmVyd3JpdHRlbiBieSBhIGxhdGVyIHJlYWRkaXIgY2FsbCBvbiB0aGUKKyAgIHNhbWUgRElSIHN0cmVhbS4KKworICAgSWYgdGhlIExhcmdlIEZpbGUgU3VwcG9ydCBBUEkgaXMgc2VsZWN0ZWQgd2UgaGF2ZSB0byB1c2UgdGhlCisgICBhcHByb3ByaWF0ZSBpbnRlcmZhY2UuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworI2lmbmRlZiBfX1VTRV9GSUxFX09GRlNFVDY0CitleHRlcm4gc3RydWN0IGRpcmVudCAqcmVhZGRpciAoRElSICpfX2RpcnApIF9fbm9ubnVsbCAoKDEpKTsKKyNlbHNlCisjIGlmZGVmIF9fUkVESVJFQ1QKK2V4dGVybiBzdHJ1Y3QgZGlyZW50ICpfX1JFRElSRUNUIChyZWFkZGlyLCAoRElSICpfX2RpcnApLCByZWFkZGlyNjQpCisgICAgIF9fbm9ubnVsbCAoKDEpKTsKKyMgZWxzZQorIyAgZGVmaW5lIHJlYWRkaXIgcmVhZGRpcjY0CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9fVVNFX0xBUkdFRklMRTY0CitleHRlcm4gc3RydWN0IGRpcmVudDY0ICpyZWFkZGlyNjQgKERJUiAqX19kaXJwKSBfX25vbm51bGwgKCgxKSk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgX19VU0VfUE9TSVggfHwgZGVmaW5lZCBfX1VTRV9NSVNDCisvKiBSZWVudHJhbnQgdmVyc2lvbiBvZiBgcmVhZGRpcicuICBSZXR1cm4gaW4gUkVTVUxUIGEgcG9pbnRlciB0byB0aGUKKyAgIG5leHQgZW50cnkuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworIyBpZm5kZWYgX19VU0VfRklMRV9PRkZTRVQ2NAorZXh0ZXJuIGludCByZWFkZGlyX3IgKERJUiAqX19yZXN0cmljdCBfX2RpcnAsCisJCSAgICAgIHN0cnVjdCBkaXJlbnQgKl9fcmVzdHJpY3QgX19lbnRyeSwKKwkJICAgICAgc3RydWN0IGRpcmVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpCisgICAgIF9fbm9ubnVsbCAoKDEsIDIsIDMpKTsKKyMgZWxzZQorIyAgaWZkZWYgX19SRURJUkVDVAorZXh0ZXJuIGludCBfX1JFRElSRUNUIChyZWFkZGlyX3IsCisJCSAgICAgICAoRElSICpfX3Jlc3RyaWN0IF9fZGlycCwKKwkJCXN0cnVjdCBkaXJlbnQgKl9fcmVzdHJpY3QgX19lbnRyeSwKKwkJCXN0cnVjdCBkaXJlbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0KSwKKwkJICAgICAgIHJlYWRkaXI2NF9yKSBfX25vbm51bGwgKCgxLCAyLCAzKSk7CisjICBlbHNlCisjICAgZGVmaW5lIHJlYWRkaXJfciByZWFkZGlyNjRfcgorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAorZXh0ZXJuIGludCByZWFkZGlyNjRfciAoRElSICpfX3Jlc3RyaWN0IF9fZGlycCwKKwkJCXN0cnVjdCBkaXJlbnQ2NCAqX19yZXN0cmljdCBfX2VudHJ5LAorCQkJc3RydWN0IGRpcmVudDY0ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkKKyAgICAgX19ub25udWxsICgoMSwgMiwgMykpOworIyBlbmRpZgorI2VuZGlmCS8qIFBPU0lYIG9yIG1pc2MgKi8KKworLyogUmV3aW5kIERJUlAgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZGlyZWN0b3J5LiAgKi8KK2V4dGVybiB2b2lkIHJld2luZGRpciAoRElSICpfX2RpcnApIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisjaWYgZGVmaW5lZCBfX1VTRV9CU0QgfHwgZGVmaW5lZCBfX1VTRV9NSVNDIHx8IGRlZmluZWQgX19VU0VfWE9QRU4KKyMgaW5jbHVkZSA8Yml0cy90eXBlcy5oPgorCisvKiBTZWVrIHRvIHBvc2l0aW9uIFBPUyBvbiBESVJQLiAgKi8KK2V4dGVybiB2b2lkIHNlZWtkaXIgKERJUiAqX19kaXJwLCBsb25nIGludCBfX3BvcykgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKy8qIFJldHVybiB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiBESVJQLiAgKi8KK2V4dGVybiBsb25nIGludCB0ZWxsZGlyIChESVIgKl9fZGlycCkgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgX19VU0VfQlNEIHx8IGRlZmluZWQgX19VU0VfTUlTQworCisvKiBSZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciB1c2VkIGJ5IERJUlAuICAqLworZXh0ZXJuIGludCBkaXJmZCAoRElSICpfX2RpcnApIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisjIGlmIGRlZmluZWQgX19PUFRJTUlaRV9fICYmIGRlZmluZWQgX0RJUl9kaXJmZAorIyAgZGVmaW5lIGRpcmZkKGRpcnApCV9ESVJfZGlyZmQgKGRpcnApCisjIGVuZGlmCisKKyMgaWZuZGVmIE1BWE5BTUxFTgorLyogR2V0IHRoZSBkZWZpbml0aW9ucyBvZiB0aGUgUE9TSVguMSBsaW1pdHMuICAqLworIyAgaW5jbHVkZSA8Yml0cy9wb3NpeDFfbGltLmg+CisKKy8qIGBNQVhOQU1MRU4nIGlzIHRoZSBCU0QgbmFtZSBmb3Igd2hhdCBQT1NJWCBjYWxscyBgTkFNRV9NQVgnLiAgKi8KKyMgIGlmZGVmIE5BTUVfTUFYCisjICAgZGVmaW5lIE1BWE5BTUxFTglOQU1FX01BWAorIyAgZWxzZQorIyAgIGRlZmluZSBNQVhOQU1MRU4JMjU1CisjICBlbmRpZgorIyBlbmRpZgorCisjIGRlZmluZSBfX25lZWRfc2l6ZV90CisjIGluY2x1ZGUgPHN0ZGRlZi5oPgorCisvKiBTY2FuIHRoZSBkaXJlY3RvcnkgRElSLCBjYWxsaW5nIFNFTEVDVE9SIG9uIGVhY2ggZGlyZWN0b3J5IGVudHJ5LgorICAgRW50cmllcyBmb3Igd2hpY2ggU0VMRUNUIHJldHVybnMgbm9uemVybyBhcmUgaW5kaXZpZHVhbGx5IG1hbGxvYydkLAorICAgc29ydGVkIHVzaW5nIHFzb3J0IHdpdGggQ01QLCBhbmQgY29sbGVjdGVkIGluIGEgbWFsbG9jJ2QgYXJyYXkgaW4KKyAgICpOQU1FTElTVC4gIFJldHVybnMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNlbGVjdGVkLCBvciAtMSBvbiBlcnJvci4gICovCisjIGlmbmRlZiBfX1VTRV9GSUxFX09GRlNFVDY0CitleHRlcm4gaW50IHNjYW5kaXIgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RpciwKKwkJICAgIHN0cnVjdCBkaXJlbnQgKioqX19yZXN0cmljdCBfX25hbWVsaXN0LAorCQkgICAgaW50ICgqX19zZWxlY3RvcikgKF9fY29uc3Qgc3RydWN0IGRpcmVudCAqKSwKKwkJICAgIGludCAoKl9fY21wKSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKSkKKyAgICAgX19ub25udWxsICgoMSwgMikpOworIyBlbHNlCisjICBpZmRlZiBfX1JFRElSRUNUCitleHRlcm4gaW50IF9fUkVESVJFQ1QgKHNjYW5kaXIsCisJCSAgICAgICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGlyLAorCQkJc3RydWN0IGRpcmVudCAqKipfX3Jlc3RyaWN0IF9fbmFtZWxpc3QsCisJCQlpbnQgKCpfX3NlbGVjdG9yKSAoX19jb25zdCBzdHJ1Y3QgZGlyZW50ICopLAorCQkJaW50ICgqX19jbXApIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopKSwKKwkJICAgICAgIHNjYW5kaXI2NCkgX19ub25udWxsICgoMSwgMikpOworIyAgZWxzZQorIyAgIGRlZmluZSBzY2FuZGlyIHNjYW5kaXI2NAorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZiBkZWZpbmVkIF9fVVNFX0dOVSAmJiBkZWZpbmVkIF9fVVNFX0xBUkdFRklMRTY0CisvKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYHNjYW5kaXInIGJ1dCBpdCB1c2VzIHRoZSA2NGJpdCBkaXJlbnQgc3RydWN0dXJlLgorICAgUGxlYXNlIG5vdGUgdGhhdCB0aGUgQ01QIGZ1bmN0aW9uIG11c3Qgbm93IHdvcmsgd2l0aCBzdHJ1Y3QgZGlyZW50NjQgKiouICAqLworZXh0ZXJuIGludCBzY2FuZGlyNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RpciwKKwkJICAgICAgc3RydWN0IGRpcmVudDY0ICoqKl9fcmVzdHJpY3QgX19uYW1lbGlzdCwKKwkJICAgICAgaW50ICgqX19zZWxlY3RvcikgKF9fY29uc3Qgc3RydWN0IGRpcmVudDY0ICopLAorCQkgICAgICBpbnQgKCpfX2NtcCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKikpCisgICAgIF9fbm9ubnVsbCAoKDEsIDIpKTsKKyMgZW5kaWYKKworLyogRnVuY3Rpb24gdG8gY29tcGFyZSB0d28gYHN0cnVjdCBkaXJlbnQncyBhbHBoYWJldGljYWxseS4gICovCisjIGlmbmRlZiBfX1VTRV9GSUxFX09GRlNFVDY0CitleHRlcm4gaW50IGFscGhhc29ydCAoX19jb25zdCB2b2lkICpfX2UxLCBfX2NvbnN0IHZvaWQgKl9fZTIpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfcHVyZV9fIF9fbm9ubnVsbCAoKDEsIDIpKTsKKyMgZWxzZQorIyAgaWZkZWYgX19SRURJUkVDVAorZXh0ZXJuIGludCBfX1JFRElSRUNUX05USCAoYWxwaGFzb3J0LAorCQkJICAgKF9fY29uc3Qgdm9pZCAqX19lMSwgX19jb25zdCB2b2lkICpfX2UyKSwKKwkJCSAgIGFscGhhc29ydDY0KSBfX2F0dHJpYnV0ZV9wdXJlX18gX19ub25udWxsICgoMSwgMikpOworIyAgZWxzZQorIyAgIGRlZmluZSBhbHBoYXNvcnQgYWxwaGFzb3J0NjQKKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWYgZGVmaW5lZCBfX1VTRV9HTlUgJiYgZGVmaW5lZCBfX1VTRV9MQVJHRUZJTEU2NAorZXh0ZXJuIGludCBhbHBoYXNvcnQ2NCAoX19jb25zdCB2b2lkICpfX2UxLCBfX2NvbnN0IHZvaWQgKl9fZTIpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfcHVyZV9fIF9fbm9ubnVsbCAoKDEsIDIpKTsKKyMgZW5kaWYKKworIyBpZmRlZiBfX1VTRV9HTlUKKy8qIEZ1bmN0aW9uIHRvIGNvbXBhcmUgdHdvIGBzdHJ1Y3QgZGlyZW50J3MgYnkgbmFtZSAmIHZlcnNpb24uICAqLworIyAgaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKK2V4dGVybiBpbnQgdmVyc2lvbnNvcnQgKF9fY29uc3Qgdm9pZCAqX19lMSwgX19jb25zdCB2b2lkICpfX2UyKQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX3B1cmVfXyBfX25vbm51bGwgKCgxLCAyKSk7CisjICBlbHNlCisjICAgaWZkZWYgX19SRURJUkVDVAorZXh0ZXJuIGludCBfX1JFRElSRUNUX05USCAodmVyc2lvbnNvcnQsCisJCQkgICAoX19jb25zdCB2b2lkICpfX2UxLCBfX2NvbnN0IHZvaWQgKl9fZTIpLAorCQkJICAgdmVyc2lvbnNvcnQ2NCkKKyAgICAgX19hdHRyaWJ1dGVfcHVyZV9fIF9fbm9ubnVsbCAoKDEsIDIpKTsKKyMgICBlbHNlCisjICAgIGRlZmluZSB2ZXJzaW9uc29ydCB2ZXJzaW9uc29ydDY0CisjICAgZW5kaWYKKyMgIGVuZGlmCisKKyMgIGlmZGVmIF9fVVNFX0xBUkdFRklMRTY0CitleHRlcm4gaW50IHZlcnNpb25zb3J0NjQgKF9fY29uc3Qgdm9pZCAqX19lMSwgX19jb25zdCB2b2lkICpfX2UyKQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX3B1cmVfXyBfX25vbm51bGwgKCgxLCAyKSk7CisjICBlbmRpZgorIyBlbmRpZgorCisvKiBSZWFkIGRpcmVjdG9yeSBlbnRyaWVzIGZyb20gRkQgaW50byBCVUYsIHJlYWRpbmcgYXQgbW9zdCBOQllURVMuCisgICBSZWFkaW5nIHN0YXJ0cyBhdCBvZmZzZXQgKkJBU0VQLCBhbmQgKkJBU0VQIGlzIHVwZGF0ZWQgd2l0aCB0aGUgbmV3CisgICBwb3NpdGlvbiBhZnRlciByZWFkaW5nLiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQ7IHplcm8gd2hlbiBhdAorICAgZW5kIG9mIGRpcmVjdG9yeTsgb3IgLTEgZm9yIGVycm9ycy4gICovCisjIGlmbmRlZiBfX1VTRV9GSUxFX09GRlNFVDY0CitleHRlcm4gX19zc2l6ZV90IGdldGRpcmVudHJpZXMgKGludCBfX2ZkLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAorCQkJCXNpemVfdCBfX25ieXRlcywKKwkJCQlfX29mZl90ICpfX3Jlc3RyaWN0IF9fYmFzZXApCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMiwgNCkpOworIyBlbHNlCisjICBpZmRlZiBfX1JFRElSRUNUCitleHRlcm4gX19zc2l6ZV90IF9fUkVESVJFQ1RfTlRIIChnZXRkaXJlbnRyaWVzLAorCQkJCSAoaW50IF9fZmQsIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCisJCQkJICBzaXplX3QgX19uYnl0ZXMsCisJCQkJICBfX29mZjY0X3QgKl9fcmVzdHJpY3QgX19iYXNlcCksCisJCQkJIGdldGRpcmVudHJpZXM2NCkgX19ub25udWxsICgoMiwgNCkpOworIyAgZWxzZQorIyAgIGRlZmluZSBnZXRkaXJlbnRyaWVzIGdldGRpcmVudHJpZXM2NAorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAorZXh0ZXJuIF9fc3NpemVfdCBnZXRkaXJlbnRyaWVzNjQgKGludCBfX2ZkLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAorCQkJCSAgc2l6ZV90IF9fbmJ5dGVzLAorCQkJCSAgX19vZmY2NF90ICpfX3Jlc3RyaWN0IF9fYmFzZXApCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMiwgNCkpOworIyBlbmRpZgorCisjZW5kaWYgLyogVXNlIEJTRCBvciBtaXNjLiAgKi8KKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIGRpcmVudC5oICAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2RsZmNuLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZGxmY24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTM3M2VkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2RsZmNuLmgKQEAgLTAsMCArMSwxOTIgQEAKKy8qIFVzZXIgZnVuY3Rpb25zIGZvciBydW4tdGltZSBkeW5hbWljIGxvYWRpbmcuCisgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwyMDAwLDIwMDEsMjAwMywyMDA0LDIwMDYKKwlGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZglfRExGQ05fSAorI2RlZmluZQlfRExGQ05fSCAxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorI2RlZmluZSBfX25lZWRfc2l6ZV90CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8qIENvbGxlY3QgdmFyaW91cyBzeXN0ZW0gZGVwZW5kZW50IGRlZmluaXRpb25zIGFuZCBkZWNsYXJhdGlvbnMuICAqLworI2luY2x1ZGUgPGJpdHMvZGxmY24uaD4KKworCisjaWZkZWYgX19VU0VfR05VCisvKiBJZiB0aGUgZmlyc3QgYXJndW1lbnQgb2YgYGRsc3ltJyBvciBgZGx2c3ltJyBpcyBzZXQgdG8gUlRMRF9ORVhUCisgICB0aGUgcnVuLXRpbWUgYWRkcmVzcyBvZiB0aGUgc3ltYm9sIGNhbGxlZCBOQU1FIGluIHRoZSBuZXh0IHNoYXJlZAorICAgb2JqZWN0IGlzIHJldHVybmVkLiAgVGhlICJuZXh0IiByZWxhdGlvbiBpcyBkZWZpbmVkIGJ5IHRoZSBvcmRlcgorICAgdGhlIHNoYXJlZCBvYmplY3RzIHdlcmUgbG9hZGVkLiAgKi8KKyMgZGVmaW5lIFJUTERfTkVYVAkoKHZvaWQgKikgLTFsKQorCisvKiBJZiB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYGRsc3ltJyBvciBgZGx2c3ltJyBpcyBzZXQgdG8gUlRMRF9ERUZBVUxUCisgICB0aGUgcnVuLXRpbWUgYWRkcmVzcyBvZiB0aGUgc3ltYm9sIGNhbGxlZCBOQU1FIGluIHRoZSBnbG9iYWwgc2NvcGUKKyAgIGlzIHJldHVybmVkLiAgKi8KKyMgZGVmaW5lIFJUTERfREVGQVVMVAkoKHZvaWQgKikgMCkKKworCisvKiBUeXBlIGZvciBuYW1lc3BhY2UgaW5kZWNlcy4gICovCit0eXBlZGVmIGxvbmcgaW50IExtaWRfdDsKKworLyogU3BlY2lhbCBuYW1lc3BhY2UgSUQgdmFsdWVzLiAgKi8KKyMgZGVmaW5lIExNX0lEX0JBU0UJMAkvKiBJbml0aWFsIG5hbWVzcGFjZS4gICovCisjIGRlZmluZSBMTV9JRF9ORVdMTQktMQkvKiBGb3IgZGxtb3BlbjogcmVxdWVzdCBuZXcgbmFtZXNwYWNlLiAgKi8KKyNlbmRpZgorCisKK19fQkVHSU5fREVDTFMKKworLyogT3BlbiB0aGUgc2hhcmVkIG9iamVjdCBGSUxFIGFuZCBtYXAgaXQgaW47IHJldHVybiBhIGhhbmRsZSB0aGF0IGNhbiBiZQorICAgcGFzc2VkIHRvIGBkbHN5bScgdG8gZ2V0IHN5bWJvbCB2YWx1ZXMgZnJvbSBpdC4gICovCitleHRlcm4gdm9pZCAqZGxvcGVuIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fbW9kZSkgX19USFJPVzsKKworLyogVW5tYXAgYW5kIGNsb3NlIGEgc2hhcmVkIG9iamVjdCBvcGVuZWQgYnkgYGRsb3BlbicuCisgICBUaGUgaGFuZGxlIGNhbm5vdCBiZSB1c2VkIGFnYWluIGFmdGVyIGNhbGxpbmcgYGRsY2xvc2UnLiAgKi8KK2V4dGVybiBpbnQgZGxjbG9zZSAodm9pZCAqX19oYW5kbGUpIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisvKiBGaW5kIHRoZSBydW4tdGltZSBhZGRyZXNzIGluIHRoZSBzaGFyZWQgb2JqZWN0IEhBTkRMRSByZWZlcnMgdG8KKyAgIG9mIHRoZSBzeW1ib2wgY2FsbGVkIE5BTUUuICAqLworZXh0ZXJuIHZvaWQgKmRsc3ltICh2b2lkICpfX3Jlc3RyaWN0IF9faGFuZGxlLAorCQkgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSkgX19USFJPVyBfX25vbm51bGwgKCgyKSk7CisKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIExpa2UgYGRsb3BlbicsIGJ1dCByZXF1ZXN0IG9iamVjdCB0byBiZSBhbGxvY2F0ZWQgaW4gYSBuZXcgbmFtZXNwYWNlLiAgKi8KK2V4dGVybiB2b2lkICpkbG1vcGVuIChMbWlkX3QgX19uc2lkLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fbW9kZSkgX19USFJPVzsKKworLyogRmluZCB0aGUgcnVuLXRpbWUgYWRkcmVzcyBpbiB0aGUgc2hhcmVkIG9iamVjdCBIQU5ETEUgcmVmZXJzIHRvCisgICBvZiB0aGUgc3ltYm9sIGNhbGxlZCBOQU1FIHdpdGggVkVSU0lPTi4gICovCitleHRlcm4gdm9pZCAqZGx2c3ltICh2b2lkICpfX3Jlc3RyaWN0IF9faGFuZGxlLAorCQkgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCisJCSAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fdmVyc2lvbikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgyLCAzKSk7CisjZW5kaWYKKworLyogV2hlbiBhbnkgb2YgdGhlIGFib3ZlIGZ1bmN0aW9ucyBmYWlscywgY2FsbCB0aGlzIGZ1bmN0aW9uCisgICB0byByZXR1cm4gYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZXJyb3IuICBFYWNoIGNhbGwgcmVzZXRzCisgICB0aGUgZXJyb3Igc3RyaW5nIHNvIHRoYXQgYSBmb2xsb3dpbmcgY2FsbCByZXR1cm5zIG51bGwuICAqLworZXh0ZXJuIGNoYXIgKmRsZXJyb3IgKHZvaWQpIF9fVEhST1c7CisKKworI2lmZGVmIF9fVVNFX0dOVQorLyogU3RydWN0dXJlIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgb2JqZWN0IHNlYXJjaGVkIHVzaW5nCisgICBgZGxhZGRyJy4gICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX2NvbnN0IGNoYXIgKmRsaV9mbmFtZTsJLyogRmlsZSBuYW1lIG9mIGRlZmluaW5nIG9iamVjdC4gICovCisgIHZvaWQgKmRsaV9mYmFzZTsJCS8qIExvYWQgYWRkcmVzcyBvZiB0aGF0IG9iamVjdC4gICovCisgIF9fY29uc3QgY2hhciAqZGxpX3NuYW1lOwkvKiBOYW1lIG9mIG5lYXJlc3Qgc3ltYm9sLiAgKi8KKyAgdm9pZCAqZGxpX3NhZGRyOwkJLyogRXhhY3QgdmFsdWUgb2YgbmVhcmVzdCBzeW1ib2wuICAqLworfSBEbF9pbmZvOworCisvKiBGaWxsIGluICpJTkZPIHdpdGggdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhYm91dCBBRERSRVNTLgorICAgUmV0dXJucyAwIGlmZiBubyBzaGFyZWQgb2JqZWN0J3Mgc2VnbWVudHMgY29udGFpbiB0aGF0IGFkZHJlc3MuICAqLworZXh0ZXJuIGludCBkbGFkZHIgKF9fY29uc3Qgdm9pZCAqX19hZGRyZXNzLCBEbF9pbmZvICpfX2luZm8pCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMikpOworCisvKiBTYW1lIGFzIGBkbGFkZHInLCBidXQgYWRkaXRpb25hbGx5IHNldHMgKkVYVFJBX0lORk8gYWNjb3JkaW5nIHRvIEZMQUdTLiAgKi8KK2V4dGVybiBpbnQgZGxhZGRyMSAoX19jb25zdCB2b2lkICpfX2FkZHJlc3MsIERsX2luZm8gKl9faW5mbywKKwkJICAgIHZvaWQgKipfX2V4dHJhX2luZm8sIGludCBfX2ZsYWdzKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDIpKTsKKworLyogVGhlc2UgYXJlIHRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSBGTEFHUyBhcmd1bWVudCB0byBgZGxhZGRyMScuCisgICBUaGlzIGluZGljYXRlcyB3aGF0IGV4dHJhIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBhdCAqRVhUUkFfSU5GTy4KKyAgIEl0IG1heSBhbHNvIGJlIHplcm8sIGluIHdoaWNoIGNhc2UgdGhlIEVYVFJBX0lORk8gYXJndW1lbnQgaXMgbm90IHVzZWQuICAqLworZW51bQorICB7CisgICAgLyogTWF0Y2hpbmcgc3ltYm9sIHRhYmxlIGVudHJ5IChjb25zdCBFbGZOTl9TeW0gKikuICAqLworICAgIFJUTERfRExfU1lNRU5UID0gMSwKKworICAgIC8qIFRoZSBvYmplY3QgY29udGFpbmluZyB0aGUgYWRkcmVzcyAoc3RydWN0IGxpbmtfbWFwICopLiAgKi8KKyAgICBSVExEX0RMX0xJTktNQVAgPSAyCisgIH07CisKKworLyogR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBzaGFyZWQgb2JqZWN0IEhBTkRMRSByZWZlcnMgdG8uCisgICBSRVFVRVNUIGlzIGZyb20gYW1vbmcgdGhlIHZhbHVlcyBiZWxvdywgYW5kIGRldGVybWluZXMgdGhlIHVzZSBvZiBBUkcuCisKKyAgIE9uIHN1Y2Nlc3MsIHJldHVybnMgemVyby4gIE9uIGZhaWx1cmUsIHJldHVybnMgLTEgYW5kIHJlY29yZHMgYW4gZXJyb3IKKyAgIG1lc3NhZ2UgdG8gYmUgZmV0Y2hlZCB3aXRoIGBkbGVycm9yJy4gICovCitleHRlcm4gaW50IGRsaW5mbyAodm9pZCAqX19yZXN0cmljdCBfX2hhbmRsZSwKKwkJICAgaW50IF9fcmVxdWVzdCwgdm9pZCAqX19yZXN0cmljdCBfX2FyZykKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxLCAzKSk7CisKKy8qIFRoZXNlIGFyZSB0aGUgcG9zc2libGUgdmFsdWVzIGZvciB0aGUgUkVRVUVTVCBhcmd1bWVudCB0byBgZGxpbmZvJy4gICovCitlbnVtCisgIHsKKyAgICAvKiBUcmVhdCBBUkcgYXMgYGxtaWRfdCAqJzsgc3RvcmUgbmFtZXNwYWNlIElEIGZvciBIQU5ETEUgdGhlcmUuICAqLworICAgIFJUTERfRElfTE1JRCA9IDEsCisKKyAgICAvKiBUcmVhdCBBUkcgYXMgYHN0cnVjdCBsaW5rX21hcCAqKic7CisgICAgICAgc3RvcmUgdGhlIGBzdHJ1Y3QgbGlua19tYXAgKicgZm9yIEhBTkRMRSB0aGVyZS4gICovCisgICAgUlRMRF9ESV9MSU5LTUFQID0gMiwKKworICAgIFJUTERfRElfQ09ORklHQUREUiA9IDMsCS8qIFVuc3VwcG9ydGVkLCBkZWZpbmVkIGJ5IFNvbGFyaXMuICAqLworCisgICAgLyogVHJlYXQgQVJHIGFzIGBEbF9zZXJpbmZvIConIChzZWUgYmVsb3cpLCBhbmQgZmlsbCBpbiB0byBkZXNjcmliZSB0aGUKKyAgICAgICBkaXJlY3RvcmllcyB0aGF0IHdpbGwgYmUgc2VhcmNoZWQgZm9yIGRlcGVuZGVuY2llcyBvZiB0aGlzIG9iamVjdC4KKyAgICAgICBSVExEX0RJX1NFUklORk9TSVpFIGZpbGxzIGluIGp1c3QgdGhlIGBkbHNfY250JyBhbmQgYGRsc19zaXplJworICAgICAgIGVudHJpZXMgdG8gaW5kaWNhdGUgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB0aGF0IG11c3QgYmUgcGFzc2VkIHRvCisgICAgICAgUlRMRF9ESV9TRVJJTkZPIHRvIGZpbGwgaW4gdGhlIGZ1bGwgaW5mb3JtYXRpb24uICAqLworICAgIFJUTERfRElfU0VSSU5GTyA9IDQsCisgICAgUlRMRF9ESV9TRVJJTkZPU0laRSA9IDUsCisKKyAgICAvKiBUcmVhdCBBUkcgYXMgYGNoYXIgKicsIGFuZCBzdG9yZSB0aGVyZSB0aGUgZGlyZWN0b3J5IG5hbWUgdXNlZCB0bworICAgICAgIGV4cGFuZCAkT1JJR0lOIGluIHRoaXMgc2hhcmVkIG9iamVjdCdzIGRlcGVuZGVuY3kgZmlsZSBuYW1lcy4gICovCisgICAgUlRMRF9ESV9PUklHSU4gPSA2LAorCisgICAgUlRMRF9ESV9QUk9GSUxFTkFNRSA9IDcsCS8qIFVuc3VwcG9ydGVkLCBkZWZpbmVkIGJ5IFNvbGFyaXMuICAqLworICAgIFJUTERfRElfUFJPRklMRU9VVCA9IDgsCS8qIFVuc3VwcG9ydGVkLCBkZWZpbmVkIGJ5IFNvbGFyaXMuICAqLworCisgICAgLyogVHJlYXQgQVJHIGFzIGBzaXplX3QgKicsIGFuZCBzdG9yZSB0aGVyZSB0aGUgVExTIG1vZHVsZSBJRAorICAgICAgIG9mIHRoaXMgb2JqZWN0J3MgUFRfVExTIHNlZ21lbnQsIGFzIHVzZWQgaW4gVExTIHJlbG9jYXRpb25zOworICAgICAgIHN0b3JlIHplcm8gaWYgdGhpcyBvYmplY3QgZG9lcyBub3QgZGVmaW5lIGEgUFRfVExTIHNlZ21lbnQuICAqLworICAgIFJUTERfRElfVExTX01PRElEID0gOSwKKworICAgIC8qIFRyZWF0IEFSRyBhcyBgdm9pZCAqKicsIGFuZCBzdG9yZSB0aGVyZSBhIHBvaW50ZXIgdG8gdGhlIGNhbGxpbmcKKyAgICAgICB0aHJlYWQncyBUTFMgYmxvY2sgY29ycmVzcG9uZGluZyB0byB0aGlzIG9iamVjdCdzIFBUX1RMUyBzZWdtZW50LgorICAgICAgIFN0b3JlIGEgbnVsbCBwb2ludGVyIGlmIHRoaXMgb2JqZWN0IGRvZXMgbm90IGRlZmluZSBhIFBUX1RMUworICAgICAgIHNlZ21lbnQsIG9yIGlmIHRoZSBjYWxsaW5nIHRocmVhZCBoYXMgbm90IGFsbG9jYXRlZCBhIGJsb2NrIGZvciBpdC4gICovCisgICAgUlRMRF9ESV9UTFNfREFUQSA9IDEwLAorCisgICAgUlRMRF9ESV9NQVggPSAxMCwKKyAgfTsKKworCisvKiBUaGlzIGlzIHRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIGBEbF9zZXJpbmZvJywgYmVsb3cuCisgICBUaGUgYGRsc19uYW1lJyBtZW1iZXIgcG9pbnRzIHRvIHNwYWNlIGluIHRoZSBidWZmZXIgcGFzc2VkIHRvIGBkbGluZm8nLiAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIGNoYXIgKmRsc19uYW1lOwkJLyogTmFtZSBvZiBsaWJyYXJ5IHNlYXJjaCBwYXRoIGRpcmVjdG9yeS4gICovCisgIHVuc2lnbmVkIGludCBkbHNfZmxhZ3M7CS8qIEluZGljYXRlcyB3aGVyZSB0aGlzIGRpcmVjdG9yeSBjYW1lIGZyb20uICovCit9IERsX3NlcnBhdGg7CisKKy8qIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSB0aGF0IG11c3QgYmUgcGFzc2VkIChieSByZWZlcmVuY2UpIHRvIGBkbGluZm8nIGZvcgorICAgdGhlIFJUTERfRElfU0VSSU5GTyBhbmQgUlRMRF9ESV9TRVJJTkZPU0laRSByZXF1ZXN0cy4gICovCit0eXBlZGVmIHN0cnVjdAoreworICBzaXplX3QgZGxzX3NpemU7CQkvKiBTaXplIGluIGJ5dGVzIG9mIHRoZSB3aG9sZSBidWZmZXIuICAqLworICB1bnNpZ25lZCBpbnQgZGxzX2NudDsJCS8qIE51bWJlciBvZiBlbGVtZW50cyBpbiBgZGxzX3NlcnBhdGgnLiAgKi8KKyAgRGxfc2VycGF0aCBkbHNfc2VycGF0aFsxXTsJLyogQWN0dWFsbHkgbG9uZ2VyLCBkbHNfY250IGVsZW1lbnRzLiAgKi8KK30gRGxfc2VyaW5mbzsKKyNlbmRpZiAvKiBfX1VTRV9HTlUgKi8KKworCitfX0VORF9ERUNMUworCisjZW5kaWYJLyogZGxmY24uaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2RybS9kcm0uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9kcm0vZHJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JiMGVmMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9kcm0vZHJtLmgKQEAgLTAsMCArMSw3ODcgQEAKKy8qKgorICogXGZpbGUgZHJtLmgKKyAqIEhlYWRlciBmb3IgdGhlIERpcmVjdCBSZW5kZXJpbmcgTWFuYWdlcgorICoKKyAqIFxhdXRob3IgUmlja2FyZCBFLiAoUmlrKSBGYWl0aCA8ZmFpdGhAdmFsaW51eC5jb20+CisgKgorICogXHBhciBBY2tub3dsZWRnbWVudHM6CisgKiBEZWMgMTk5OSwgUmljaGFyZCBIZW5kZXJzb24gPHJ0aEB0d2lkZGxlLm5ldD4sIG1vdmUgdG8gZ2VuZXJpYyBcYyBjbXB4Y2hnLgorICovCisKKy8qCisgKiBDb3B5cmlnaHQgMTk5OSBQcmVjaXNpb24gSW5zaWdodCwgSW5jLiwgQ2VkYXIgUGFyaywgVGV4YXMuCisgKiBDb3B5cmlnaHQgMjAwMCBWQSBMaW51eCBTeXN0ZW1zLCBJbmMuLCBTdW5ueXZhbGUsIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBWQSBMSU5VWCBTWVNURU1TIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX0RSTV9IXworI2RlZmluZSBfRFJNX0hfCisKKyNpZiBkZWZpbmVkKF9fbGludXhfXykKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2lvY3RsLmg+Cit0eXBlZGVmIHVuc2lnbmVkIGludCBkcm1faGFuZGxlX3Q7CisKKyNlbHNlIC8qIE9uZSBvZiB0aGUgQlNEcyAqLworCisjaW5jbHVkZSA8c3lzL2lvY2NvbS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgordHlwZWRlZiBpbnQ4X3QgICBfX3M4OwordHlwZWRlZiB1aW50OF90ICBfX3U4OwordHlwZWRlZiBpbnQxNl90ICBfX3MxNjsKK3R5cGVkZWYgdWludDE2X3QgX191MTY7Cit0eXBlZGVmIGludDMyX3QgIF9fczMyOwordHlwZWRlZiB1aW50MzJfdCBfX3UzMjsKK3R5cGVkZWYgaW50NjRfdCAgX19zNjQ7Cit0eXBlZGVmIHVpbnQ2NF90IF9fdTY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGRybV9oYW5kbGVfdDsKKworI2VuZGlmCisKKyNkZWZpbmUgRFJNX05BTUUJImRybSIJICAvKio8IE5hbWUgaW4ga2VybmVsLCAvZGV2LCBhbmQgL3Byb2MgKi8KKyNkZWZpbmUgRFJNX01JTl9PUkRFUgk1CSAgLyoqPCBBdCBsZWFzdCAyXjUgYnl0ZXMgPSAzMiBieXRlcyAqLworI2RlZmluZSBEUk1fTUFYX09SREVSCTIyCSAgLyoqPCBVcCB0byAyXjIyIGJ5dGVzID0gNE1CICovCisjZGVmaW5lIERSTV9SQU1fUEVSQ0VOVCAxMAkgIC8qKjwgSG93IG11Y2ggc3lzdGVtIHJhbSBjYW4gd2UgbG9jaz8gKi8KKworI2RlZmluZSBfRFJNX0xPQ0tfSEVMRAkweDgwMDAwMDAwVSAvKio8IEhhcmR3YXJlIGxvY2sgaXMgaGVsZCAqLworI2RlZmluZSBfRFJNX0xPQ0tfQ09OVAkweDQwMDAwMDAwVSAvKio8IEhhcmR3YXJlIGxvY2sgaXMgY29udGVuZGVkICovCisjZGVmaW5lIF9EUk1fTE9DS19JU19IRUxEKGxvY2spCSAgICgobG9jaykgJiBfRFJNX0xPQ0tfSEVMRCkKKyNkZWZpbmUgX0RSTV9MT0NLX0lTX0NPTlQobG9jaykJICAgKChsb2NrKSAmIF9EUk1fTE9DS19DT05UKQorI2RlZmluZSBfRFJNX0xPQ0tJTkdfQ09OVEVYVChsb2NrKSAoKGxvY2spICYgfihfRFJNX0xPQ0tfSEVMRHxfRFJNX0xPQ0tfQ09OVCkpCisKK3R5cGVkZWYgdW5zaWduZWQgaW50IGRybV9jb250ZXh0X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBkcm1fZHJhd2FibGVfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IGRybV9tYWdpY190OworCisvKioKKyAqIENsaXByZWN0LgorICoKKyAqIFx3YXJuaW5nOiBJZiB5b3UgY2hhbmdlIHRoaXMgc3RydWN0dXJlLCBtYWtlIHN1cmUgeW91IGNoYW5nZQorICogWEY4NkRSSUNsaXBSZWN0UmVjIGluIHRoZSBzZXJ2ZXIgYXMgd2VsbAorICoKKyAqIFxub3RlIEtXOiBBY3R1YWxseSBpdCdzIGlsbGVnYWwgdG8gY2hhbmdlIGVpdGhlciBmb3IKKyAqIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHJlYXNvbnMuCisgKi8KK3N0cnVjdCBkcm1fY2xpcF9yZWN0IHsKKwl1bnNpZ25lZCBzaG9ydCB4MTsKKwl1bnNpZ25lZCBzaG9ydCB5MTsKKwl1bnNpZ25lZCBzaG9ydCB4MjsKKwl1bnNpZ25lZCBzaG9ydCB5MjsKK307CisKKy8qKgorICogRHJhd2FibGUgaW5mb3JtYXRpb24uCisgKi8KK3N0cnVjdCBkcm1fZHJhd2FibGVfaW5mbyB7CisJdW5zaWduZWQgaW50IG51bV9yZWN0czsKKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqcmVjdHM7Cit9OworCisvKioKKyAqIFRleHR1cmUgcmVnaW9uLAorICovCitzdHJ1Y3QgZHJtX3RleF9yZWdpb24geworCXVuc2lnbmVkIGNoYXIgbmV4dDsKKwl1bnNpZ25lZCBjaGFyIHByZXY7CisJdW5zaWduZWQgY2hhciBpbl91c2U7CisJdW5zaWduZWQgY2hhciBwYWRkaW5nOworCXVuc2lnbmVkIGludCBhZ2U7Cit9OworCisvKioKKyAqIEhhcmR3YXJlIGxvY2suCisgKgorICogVGhlIGxvY2sgc3RydWN0dXJlIGlzIGEgc2ltcGxlIGNhY2hlLWxpbmUgYWxpZ25lZCBpbnRlZ2VyLiAgVG8gYXZvaWQKKyAqIHByb2Nlc3NvciBidXMgY29udGVudGlvbiBvbiBhIG11bHRpcHJvY2Vzc29yIHN5c3RlbSwgdGhlcmUgc2hvdWxkIG5vdCBiZSBhbnkKKyAqIG90aGVyIGRhdGEgc3RvcmVkIGluIHRoZSBzYW1lIGNhY2hlIGxpbmUuCisgKi8KK3N0cnVjdCBkcm1faHdfbG9jayB7CisJX192b2xhdGlsZV9fIHVuc2lnbmVkIGludCBsb2NrOwkJLyoqPCBsb2NrIHZhcmlhYmxlICovCisJY2hhciBwYWRkaW5nWzYwXTsJCQkvKio8IFBhZCB0byBjYWNoZSBsaW5lICovCit9OworCisvKioKKyAqIERSTV9JT0NUTF9WRVJTSU9OIGlvY3RsIGFyZ3VtZW50IHR5cGUuCisgKgorICogXHNhIGRybUdldFZlcnNpb24oKS4KKyAqLworc3RydWN0IGRybV92ZXJzaW9uIHsKKwlpbnQgdmVyc2lvbl9tYWpvcjsJICAvKio8IE1ham9yIHZlcnNpb24gKi8KKwlpbnQgdmVyc2lvbl9taW5vcjsJICAvKio8IE1pbm9yIHZlcnNpb24gKi8KKwlpbnQgdmVyc2lvbl9wYXRjaGxldmVsOwkgIC8qKjwgUGF0Y2ggbGV2ZWwgKi8KKwlzaXplX3QgbmFtZV9sZW47CSAgLyoqPCBMZW5ndGggb2YgbmFtZSBidWZmZXIgKi8KKwljaGFyICpuYW1lOwkgIC8qKjwgTmFtZSBvZiBkcml2ZXIgKi8KKwlzaXplX3QgZGF0ZV9sZW47CSAgLyoqPCBMZW5ndGggb2YgZGF0ZSBidWZmZXIgKi8KKwljaGFyICpkYXRlOwkgIC8qKjwgVXNlci1zcGFjZSBidWZmZXIgdG8gaG9sZCBkYXRlICovCisJc2l6ZV90IGRlc2NfbGVuOwkgIC8qKjwgTGVuZ3RoIG9mIGRlc2MgYnVmZmVyICovCisJY2hhciAqZGVzYzsJICAvKio8IFVzZXItc3BhY2UgYnVmZmVyIHRvIGhvbGQgZGVzYyAqLworfTsKKworLyoqCisgKiBEUk1fSU9DVExfR0VUX1VOSVFVRSBpb2N0bCBhcmd1bWVudCB0eXBlLgorICoKKyAqIFxzYSBkcm1HZXRCdXNpZCgpIGFuZCBkcm1TZXRCdXNJZCgpLgorICovCitzdHJ1Y3QgZHJtX3VuaXF1ZSB7CisJc2l6ZV90IHVuaXF1ZV9sZW47CSAgLyoqPCBMZW5ndGggb2YgdW5pcXVlICovCisJY2hhciAqdW5pcXVlOwkgIC8qKjwgVW5pcXVlIG5hbWUgZm9yIGRyaXZlciBpbnN0YW50aWF0aW9uICovCit9OworCitzdHJ1Y3QgZHJtX2xpc3QgeworCWludCBjb3VudDsJCSAgLyoqPCBMZW5ndGggb2YgdXNlci1zcGFjZSBzdHJ1Y3R1cmVzICovCisJc3RydWN0IGRybV92ZXJzaW9uICp2ZXJzaW9uOworfTsKKworc3RydWN0IGRybV9ibG9jayB7CisJaW50IHVudXNlZDsKK307CisKKy8qKgorICogRFJNX0lPQ1RMX0NPTlRST0wgaW9jdGwgYXJndW1lbnQgdHlwZS4KKyAqCisgKiBcc2EgZHJtQ3RsSW5zdEhhbmRsZXIoKSBhbmQgZHJtQ3RsVW5pbnN0SGFuZGxlcigpLgorICovCitzdHJ1Y3QgZHJtX2NvbnRyb2wgeworCWVudW0geworCQlEUk1fQUREX0NPTU1BTkQsCisJCURSTV9STV9DT01NQU5ELAorCQlEUk1fSU5TVF9IQU5ETEVSLAorCQlEUk1fVU5JTlNUX0hBTkRMRVIKKwl9IGZ1bmM7CisJaW50IGlycTsKK307CisKKy8qKgorICogVHlwZSBvZiBtZW1vcnkgdG8gbWFwLgorICovCitlbnVtIGRybV9tYXBfdHlwZSB7CisJX0RSTV9GUkFNRV9CVUZGRVIgPSAwLAkgIC8qKjwgV0MgKG5vIGNhY2hpbmcpLCBubyBjb3JlIGR1bXAgKi8KKwlfRFJNX1JFR0lTVEVSUyA9IDEsCSAgLyoqPCBubyBjYWNoaW5nLCBubyBjb3JlIGR1bXAgKi8KKwlfRFJNX1NITSA9IDIsCQkgIC8qKjwgc2hhcmVkLCBjYWNoZWQgKi8KKwlfRFJNX0FHUCA9IDMsCQkgIC8qKjwgQUdQL0dBUlQgKi8KKwlfRFJNX1NDQVRURVJfR0FUSEVSID0gNCwgIC8qKjwgU2NhdHRlci9nYXRoZXIgbWVtb3J5IGZvciBQQ0kgRE1BICovCisJX0RSTV9DT05TSVNURU5UID0gNSwJICAvKio8IENvbnNpc3RlbnQgbWVtb3J5IGZvciBQQ0kgRE1BICovCisJX0RSTV9HRU0gPSA2LAkJICAvKio8IEdFTSBvYmplY3QgKi8KK307CisKKy8qKgorICogTWVtb3J5IG1hcHBpbmcgZmxhZ3MuCisgKi8KK2VudW0gZHJtX21hcF9mbGFncyB7CisJX0RSTV9SRVNUUklDVEVEID0gMHgwMSwJICAgICAvKio8IENhbm5vdCBiZSBtYXBwZWQgdG8gdXNlci12aXJ0dWFsICovCisJX0RSTV9SRUFEX09OTFkgPSAweDAyLAorCV9EUk1fTE9DS0VEID0gMHgwNCwJICAgICAvKio8IHNoYXJlZCwgY2FjaGVkLCBsb2NrZWQgKi8KKwlfRFJNX0tFUk5FTCA9IDB4MDgsCSAgICAgLyoqPCBrZXJuZWwgcmVxdWlyZXMgYWNjZXNzICovCisJX0RSTV9XUklURV9DT01CSU5JTkcgPSAweDEwLCAvKio8IHVzZSB3cml0ZS1jb21iaW5pbmcgaWYgYXZhaWxhYmxlICovCisJX0RSTV9DT05UQUlOU19MT0NLID0gMHgyMCwgICAvKio8IFNITSBwYWdlIHRoYXQgY29udGFpbnMgbG9jayAqLworCV9EUk1fUkVNT1ZBQkxFID0gMHg0MCwJICAgICAvKio8IFJlbW92YWJsZSBtYXBwaW5nICovCisJX0RSTV9EUklWRVIgPSAweDgwCSAgICAgLyoqPCBNYW5hZ2VkIGJ5IGRyaXZlciAqLworfTsKKworc3RydWN0IGRybV9jdHhfcHJpdl9tYXAgeworCXVuc2lnbmVkIGludCBjdHhfaWQ7CSAvKio8IENvbnRleHQgcmVxdWVzdGluZyBwcml2YXRlIG1hcHBpbmcgKi8KKwl2b2lkICpoYW5kbGU7CQkgLyoqPCBIYW5kbGUgb2YgbWFwICovCit9OworCisvKioKKyAqIERSTV9JT0NUTF9HRVRfTUFQLCBEUk1fSU9DVExfQUREX01BUCBhbmQgRFJNX0lPQ1RMX1JNX01BUCBpb2N0bHMKKyAqIGFyZ3VtZW50IHR5cGUuCisgKgorICogXHNhIGRybUFkZE1hcCgpLgorICovCitzdHJ1Y3QgZHJtX21hcCB7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CSAvKio8IFJlcXVlc3RlZCBwaHlzaWNhbCBhZGRyZXNzICgwIGZvciBTQVJFQSkqLworCXVuc2lnbmVkIGxvbmcgc2l6ZTsJIC8qKjwgUmVxdWVzdGVkIHBoeXNpY2FsIHNpemUgKGJ5dGVzKSAqLworCWVudW0gZHJtX21hcF90eXBlIHR5cGU7CSAvKio8IFR5cGUgb2YgbWVtb3J5IHRvIG1hcCAqLworCWVudW0gZHJtX21hcF9mbGFncyBmbGFnczsJIC8qKjwgRmxhZ3MgKi8KKwl2b2lkICpoYW5kbGU7CQkgLyoqPCBVc2VyLXNwYWNlOiAiSGFuZGxlIiB0byBwYXNzIHRvIG1tYXAoKSAqLworCQkJCSAvKio8IEtlcm5lbC1zcGFjZToga2VybmVsLXZpcnR1YWwgYWRkcmVzcyAqLworCWludCBtdHJyOwkJIC8qKjwgTVRSUiBzbG90IHVzZWQgKi8KKwkvKiAgIFByaXZhdGUgZGF0YSAqLworfTsKKworLyoqCisgKiBEUk1fSU9DVExfR0VUX0NMSUVOVCBpb2N0bCBhcmd1bWVudCB0eXBlLgorICovCitzdHJ1Y3QgZHJtX2NsaWVudCB7CisJaW50IGlkeDsJCS8qKjwgV2hpY2ggY2xpZW50IGRlc2lyZWQ/ICovCisJaW50IGF1dGg7CQkvKio8IElzIGNsaWVudCBhdXRoZW50aWNhdGVkPyAqLworCXVuc2lnbmVkIGxvbmcgcGlkOwkvKio8IFByb2Nlc3MgSUQgKi8KKwl1bnNpZ25lZCBsb25nIHVpZDsJLyoqPCBVc2VyIElEICovCisJdW5zaWduZWQgbG9uZyBtYWdpYzsJLyoqPCBNYWdpYyAqLworCXVuc2lnbmVkIGxvbmcgaW9jczsJLyoqPCBJb2N0bCBjb3VudCAqLworfTsKKworZW51bSBkcm1fc3RhdF90eXBlIHsKKwlfRFJNX1NUQVRfTE9DSywKKwlfRFJNX1NUQVRfT1BFTlMsCisJX0RSTV9TVEFUX0NMT1NFUywKKwlfRFJNX1NUQVRfSU9DVExTLAorCV9EUk1fU1RBVF9MT0NLUywKKwlfRFJNX1NUQVRfVU5MT0NLUywKKwlfRFJNX1NUQVRfVkFMVUUsCS8qKjwgR2VuZXJpYyB2YWx1ZSAqLworCV9EUk1fU1RBVF9CWVRFLAkJLyoqPCBHZW5lcmljIGJ5dGUgY291bnRlciAoMTAyNGJ5dGVzL0spICovCisJX0RSTV9TVEFUX0NPVU5ULAkvKio8IEdlbmVyaWMgbm9uLWJ5dGUgY291bnRlciAoMTAwMC9rKSAqLworCisJX0RSTV9TVEFUX0lSUSwJCS8qKjwgSVJRICovCisJX0RSTV9TVEFUX1BSSU1BUlksCS8qKjwgUHJpbWFyeSBETUEgYnl0ZXMgKi8KKwlfRFJNX1NUQVRfU0VDT05EQVJZLAkvKio8IFNlY29uZGFyeSBETUEgYnl0ZXMgKi8KKwlfRFJNX1NUQVRfRE1BLAkJLyoqPCBETUEgKi8KKwlfRFJNX1NUQVRfU1BFQ0lBTCwJLyoqPCBTcGVjaWFsIERNQSAoZS5nLiwgcHJpb3JpdHkgb3IgcG9sbGVkKSAqLworCV9EUk1fU1RBVF9NSVNTRUQJLyoqPCBNaXNzZWQgRE1BIG9wcG9ydHVuaXR5ICovCisJICAgIC8qIEFkZCB0byB0aGUgKkVORCogb2YgdGhlIGxpc3QgKi8KK307CisKKy8qKgorICogRFJNX0lPQ1RMX0dFVF9TVEFUUyBpb2N0bCBhcmd1bWVudCB0eXBlLgorICovCitzdHJ1Y3QgZHJtX3N0YXRzIHsKKwl1bnNpZ25lZCBsb25nIGNvdW50OworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJCWVudW0gZHJtX3N0YXRfdHlwZSB0eXBlOworCX0gZGF0YVsxNV07Cit9OworCisvKioKKyAqIEhhcmR3YXJlIGxvY2tpbmcgZmxhZ3MuCisgKi8KK2VudW0gZHJtX2xvY2tfZmxhZ3MgeworCV9EUk1fTE9DS19SRUFEWSA9IDB4MDEsCSAgICAgLyoqPCBXYWl0IHVudGlsIGhhcmR3YXJlIGlzIHJlYWR5IGZvciBETUEgKi8KKwlfRFJNX0xPQ0tfUVVJRVNDRU5UID0gMHgwMiwgIC8qKjwgV2FpdCB1bnRpbCBoYXJkd2FyZSBxdWllc2NlbnQgKi8KKwlfRFJNX0xPQ0tfRkxVU0ggPSAweDA0LAkgICAgIC8qKjwgRmx1c2ggdGhpcyBjb250ZXh0J3MgRE1BIHF1ZXVlIGZpcnN0ICovCisJX0RSTV9MT0NLX0ZMVVNIX0FMTCA9IDB4MDgsICAvKio8IEZsdXNoIGFsbCBETUEgcXVldWVzIGZpcnN0ICovCisJLyogVGhlc2UgKkhBTFQqIGZsYWdzIGFyZW4ndCBzdXBwb3J0ZWQgeWV0CisJICAgLS0gdGhleSB3aWxsIGJlIHVzZWQgdG8gc3VwcG9ydCB0aGUKKwkgICBmdWxsLXNjcmVlbiBER0EtbGlrZSBtb2RlLiAqLworCV9EUk1fSEFMVF9BTExfUVVFVUVTID0gMHgxMCwgLyoqPCBIYWx0IGFsbCBjdXJyZW50IGFuZCBmdXR1cmUgcXVldWVzICovCisJX0RSTV9IQUxUX0NVUl9RVUVVRVMgPSAweDIwICAvKio8IEhhbHQgYWxsIGN1cnJlbnQgcXVldWVzICovCit9OworCisvKioKKyAqIERSTV9JT0NUTF9MT0NLLCBEUk1fSU9DVExfVU5MT0NLIGFuZCBEUk1fSU9DVExfRklOSVNIIGlvY3RsIGFyZ3VtZW50IHR5cGUuCisgKgorICogXHNhIGRybUdldExvY2soKSBhbmQgZHJtVW5sb2NrKCkuCisgKi8KK3N0cnVjdCBkcm1fbG9jayB7CisJaW50IGNvbnRleHQ7CisJZW51bSBkcm1fbG9ja19mbGFncyBmbGFnczsKK307CisKKy8qKgorICogRE1BIGZsYWdzCisgKgorICogXHdhcm5pbmcKKyAqIFRoZXNlIHZhbHVlcyBcZSBtdXN0IG1hdGNoIHhmODZkcm0uaC4KKyAqCisgKiBcc2EgZHJtX2RtYS4KKyAqLworZW51bSBkcm1fZG1hX2ZsYWdzIHsKKwkvKiBGbGFncyBmb3IgRE1BIGJ1ZmZlciBkaXNwYXRjaCAqLworCV9EUk1fRE1BX0JMT0NLID0gMHgwMSwJICAgICAgLyoqPAorCQkJCSAgICAgICAqIEJsb2NrIHVudGlsIGJ1ZmZlciBkaXNwYXRjaGVkLgorCQkJCSAgICAgICAqCisJCQkJICAgICAgICogXG5vdGUgVGhlIGJ1ZmZlciBtYXkgbm90IHlldCBoYXZlCisJCQkJICAgICAgICogYmVlbiBwcm9jZXNzZWQgYnkgdGhlIGhhcmR3YXJlIC0tCisJCQkJICAgICAgICogZ2V0dGluZyBhIGhhcmR3YXJlIGxvY2sgd2l0aCB0aGUKKwkJCQkgICAgICAgKiBoYXJkd2FyZSBxdWllc2NlbnQgd2lsbCBlbnN1cmUKKwkJCQkgICAgICAgKiB0aGF0IHRoZSBidWZmZXIgaGFzIGJlZW4KKwkJCQkgICAgICAgKiBwcm9jZXNzZWQuCisJCQkJICAgICAgICovCisJX0RSTV9ETUFfV0hJTEVfTE9DS0VEID0gMHgwMiwgLyoqPCBEaXNwYXRjaCB3aGlsZSBsb2NrIGhlbGQgKi8KKwlfRFJNX0RNQV9QUklPUklUWSA9IDB4MDQsICAgICAvKio8IEhpZ2ggcHJpb3JpdHkgZGlzcGF0Y2ggKi8KKworCS8qIEZsYWdzIGZvciBETUEgYnVmZmVyIHJlcXVlc3QgKi8KKwlfRFJNX0RNQV9XQUlUID0gMHgxMCwJICAgICAgLyoqPCBXYWl0IGZvciBmcmVlIGJ1ZmZlcnMgKi8KKwlfRFJNX0RNQV9TTUFMTEVSX09LID0gMHgyMCwgICAvKio8IFNtYWxsZXItdGhhbi1yZXF1ZXN0ZWQgYnVmZmVycyBPSyAqLworCV9EUk1fRE1BX0xBUkdFUl9PSyA9IDB4NDAgICAgIC8qKjwgTGFyZ2VyLXRoYW4tcmVxdWVzdGVkIGJ1ZmZlcnMgT0sgKi8KK307CisKKy8qKgorICogRFJNX0lPQ1RMX0FERF9CVUZTIGFuZCBEUk1fSU9DVExfTUFSS19CVUZTIGlvY3RsIGFyZ3VtZW50IHR5cGUuCisgKgorICogXHNhIGRybUFkZEJ1ZnMoKS4KKyAqLworc3RydWN0IGRybV9idWZfZGVzYyB7CisJaW50IGNvdW50OwkJIC8qKjwgTnVtYmVyIG9mIGJ1ZmZlcnMgb2YgdGhpcyBzaXplICovCisJaW50IHNpemU7CQkgLyoqPCBTaXplIGluIGJ5dGVzICovCisJaW50IGxvd19tYXJrOwkJIC8qKjwgTG93IHdhdGVyIG1hcmsgKi8KKwlpbnQgaGlnaF9tYXJrOwkJIC8qKjwgSGlnaCB3YXRlciBtYXJrICovCisJZW51bSB7CisJCV9EUk1fUEFHRV9BTElHTiA9IDB4MDEsCS8qKjwgQWxpZ24gb24gcGFnZSBib3VuZGFyaWVzIGZvciBETUEgKi8KKwkJX0RSTV9BR1BfQlVGRkVSID0gMHgwMiwJLyoqPCBCdWZmZXIgaXMgaW4gQUdQIHNwYWNlICovCisJCV9EUk1fU0dfQlVGRkVSID0gMHgwNCwJLyoqPCBTY2F0dGVyL2dhdGhlciBtZW1vcnkgYnVmZmVyICovCisJCV9EUk1fRkJfQlVGRkVSID0gMHgwOCwJLyoqPCBCdWZmZXIgaXMgaW4gZnJhbWUgYnVmZmVyICovCisJCV9EUk1fUENJX0JVRkZFUl9STyA9IDB4MTAgLyoqPCBNYXAgUENJIERNQSBidWZmZXIgcmVhZC1vbmx5ICovCisJfSBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGFncF9zdGFydDsgLyoqPAorCQkJCSAgKiBTdGFydCBhZGRyZXNzIG9mIHdoZXJlIHRoZSBBR1AgYnVmZmVycyBhcmUKKwkJCQkgICogaW4gdGhlIEFHUCBhcGVydHVyZQorCQkJCSAgKi8KK307CisKKy8qKgorICogRFJNX0lPQ1RMX0lORk9fQlVGUyBpb2N0bCBhcmd1bWVudCB0eXBlLgorICovCitzdHJ1Y3QgZHJtX2J1Zl9pbmZvIHsKKwlpbnQgY291bnQ7CQkvKio8IEVudHJpZXMgaW4gbGlzdCAqLworCXN0cnVjdCBkcm1fYnVmX2Rlc2MgKmxpc3Q7Cit9OworCisvKioKKyAqIERSTV9JT0NUTF9GUkVFX0JVRlMgaW9jdGwgYXJndW1lbnQgdHlwZS4KKyAqLworc3RydWN0IGRybV9idWZfZnJlZSB7CisJaW50IGNvdW50OworCWludCAqbGlzdDsKK307CisKKy8qKgorICogQnVmZmVyIGluZm9ybWF0aW9uCisgKgorICogXHNhIGRybV9idWZfbWFwLgorICovCitzdHJ1Y3QgZHJtX2J1Zl9wdWIgeworCWludCBpZHg7CQkgICAgICAgLyoqPCBJbmRleCBpbnRvIHRoZSBtYXN0ZXIgYnVmZmVyIGxpc3QgKi8KKwlpbnQgdG90YWw7CQkgICAgICAgLyoqPCBCdWZmZXIgc2l6ZSAqLworCWludCB1c2VkOwkJICAgICAgIC8qKjwgQW1vdW50IG9mIGJ1ZmZlciBpbiB1c2UgKGZvciBETUEpICovCisJdm9pZCAqYWRkcmVzczsJICAgICAgIC8qKjwgQWRkcmVzcyBvZiBidWZmZXIgKi8KK307CisKKy8qKgorICogRFJNX0lPQ1RMX01BUF9CVUZTIGlvY3RsIGFyZ3VtZW50IHR5cGUuCisgKi8KK3N0cnVjdCBkcm1fYnVmX21hcCB7CisJaW50IGNvdW50OwkJLyoqPCBMZW5ndGggb2YgdGhlIGJ1ZmZlciBsaXN0ICovCisJdm9pZCAqdmlydHVhbDsJCS8qKjwgTW1hcCdkIGFyZWEgaW4gdXNlci12aXJ0dWFsICovCisJc3RydWN0IGRybV9idWZfcHViICpsaXN0OwkvKio8IEJ1ZmZlciBpbmZvcm1hdGlvbiAqLworfTsKKworLyoqCisgKiBEUk1fSU9DVExfRE1BIGlvY3RsIGFyZ3VtZW50IHR5cGUuCisgKgorICogSW5kaWNlcyBoZXJlIHJlZmVyIHRvIHRoZSBvZmZzZXQgaW50byB0aGUgYnVmZmVyIGxpc3QgaW4gZHJtX2J1Zl9nZXQuCisgKgorICogXHNhIGRybURNQSgpLgorICovCitzdHJ1Y3QgZHJtX2RtYSB7CisJaW50IGNvbnRleHQ7CQkJICAvKio8IENvbnRleHQgaGFuZGxlICovCisJaW50IHNlbmRfY291bnQ7CQkJICAvKio8IE51bWJlciBvZiBidWZmZXJzIHRvIHNlbmQgKi8KKwlpbnQgKnNlbmRfaW5kaWNlczsJICAvKio8IExpc3Qgb2YgaGFuZGxlcyB0byBidWZmZXJzICovCisJaW50ICpzZW5kX3NpemVzOwkJICAvKio8IExlbmd0aHMgb2YgZGF0YSB0byBzZW5kICovCisJZW51bSBkcm1fZG1hX2ZsYWdzIGZsYWdzOwkgIC8qKjwgRmxhZ3MgKi8KKwlpbnQgcmVxdWVzdF9jb3VudDsJCSAgLyoqPCBOdW1iZXIgb2YgYnVmZmVycyByZXF1ZXN0ZWQgKi8KKwlpbnQgcmVxdWVzdF9zaXplOwkJICAvKio8IERlc2lyZWQgc2l6ZSBmb3IgYnVmZmVycyAqLworCWludCAqcmVxdWVzdF9pbmRpY2VzOwkgIC8qKjwgQnVmZmVyIGluZm9ybWF0aW9uICovCisJaW50ICpyZXF1ZXN0X3NpemVzOworCWludCBncmFudGVkX2NvdW50OwkJICAvKio8IE51bWJlciBvZiBidWZmZXJzIGdyYW50ZWQgKi8KK307CisKK2VudW0gZHJtX2N0eF9mbGFncyB7CisJX0RSTV9DT05URVhUX1BSRVNFUlZFRCA9IDB4MDEsCisJX0RSTV9DT05URVhUXzJET05MWSA9IDB4MDIKK307CisKKy8qKgorICogRFJNX0lPQ1RMX0FERF9DVFggaW9jdGwgYXJndW1lbnQgdHlwZS4KKyAqCisgKiBcc2EgZHJtQ3JlYXRlQ29udGV4dCgpIGFuZCBkcm1EZXN0cm95Q29udGV4dCgpLgorICovCitzdHJ1Y3QgZHJtX2N0eCB7CisJZHJtX2NvbnRleHRfdCBoYW5kbGU7CisJZW51bSBkcm1fY3R4X2ZsYWdzIGZsYWdzOworfTsKKworLyoqCisgKiBEUk1fSU9DVExfUkVTX0NUWCBpb2N0bCBhcmd1bWVudCB0eXBlLgorICovCitzdHJ1Y3QgZHJtX2N0eF9yZXMgeworCWludCBjb3VudDsKKwlzdHJ1Y3QgZHJtX2N0eCAqY29udGV4dHM7Cit9OworCisvKioKKyAqIERSTV9JT0NUTF9BRERfRFJBVyBhbmQgRFJNX0lPQ1RMX1JNX0RSQVcgaW9jdGwgYXJndW1lbnQgdHlwZS4KKyAqLworc3RydWN0IGRybV9kcmF3IHsKKwlkcm1fZHJhd2FibGVfdCBoYW5kbGU7Cit9OworCisvKioKKyAqIERSTV9JT0NUTF9VUERBVEVfRFJBVyBpb2N0bCBhcmd1bWVudCB0eXBlLgorICovCit0eXBlZGVmIGVudW0geworCURSTV9EUkFXQUJMRV9DTElQUkVDVFMsCit9IGRybV9kcmF3YWJsZV9pbmZvX3R5cGVfdDsKKworc3RydWN0IGRybV91cGRhdGVfZHJhdyB7CisJZHJtX2RyYXdhYmxlX3QgaGFuZGxlOworCXVuc2lnbmVkIGludCB0eXBlOworCXVuc2lnbmVkIGludCBudW07CisJdW5zaWduZWQgbG9uZyBsb25nIGRhdGE7Cit9OworCisvKioKKyAqIERSTV9JT0NUTF9HRVRfTUFHSUMgYW5kIERSTV9JT0NUTF9BVVRIX01BR0lDIGlvY3RsIGFyZ3VtZW50IHR5cGUuCisgKi8KK3N0cnVjdCBkcm1fYXV0aCB7CisJZHJtX21hZ2ljX3QgbWFnaWM7Cit9OworCisvKioKKyAqIERSTV9JT0NUTF9JUlFfQlVTSUQgaW9jdGwgYXJndW1lbnQgdHlwZS4KKyAqCisgKiBcc2EgZHJtR2V0SW50ZXJydXB0RnJvbUJ1c0lEKCkuCisgKi8KK3N0cnVjdCBkcm1faXJxX2J1c2lkIHsKKwlpbnQgaXJxOwkvKio8IElSUSBudW1iZXIgKi8KKwlpbnQgYnVzbnVtOwkvKio8IGJ1cyBudW1iZXIgKi8KKwlpbnQgZGV2bnVtOwkvKio8IGRldmljZSBudW1iZXIgKi8KKwlpbnQgZnVuY251bTsJLyoqPCBmdW5jdGlvbiBudW1iZXIgKi8KK307CisKK2VudW0gZHJtX3ZibGFua19zZXFfdHlwZSB7CisJX0RSTV9WQkxBTktfQUJTT0xVVEUgPSAweDAsCS8qKjwgV2FpdCBmb3Igc3BlY2lmaWMgdmJsYW5rIHNlcXVlbmNlIG51bWJlciAqLworCV9EUk1fVkJMQU5LX1JFTEFUSVZFID0gMHgxLAkvKio8IFdhaXQgZm9yIGdpdmVuIG51bWJlciBvZiB2YmxhbmtzICovCisJX0RSTV9WQkxBTktfRVZFTlQgPSAweDQwMDAwMDAsICAgLyoqPCBTZW5kIGV2ZW50IGluc3RlYWQgb2YgYmxvY2tpbmcgKi8KKwlfRFJNX1ZCTEFOS19GTElQID0gMHg4MDAwMDAwLCAgIC8qKjwgU2NoZWR1bGVkIGJ1ZmZlciBzd2FwIHNob3VsZCBmbGlwICovCisJX0RSTV9WQkxBTktfTkVYVE9OTUlTUyA9IDB4MTAwMDAwMDAsCS8qKjwgSWYgbWlzc2VkLCB3YWl0IGZvciBuZXh0IHZibGFuayAqLworCV9EUk1fVkJMQU5LX1NFQ09OREFSWSA9IDB4MjAwMDAwMDAsCS8qKjwgU2Vjb25kYXJ5IGRpc3BsYXkgY29udHJvbGxlciAqLworCV9EUk1fVkJMQU5LX1NJR05BTCA9IDB4NDAwMDAwMDAJLyoqPCBTZW5kIHNpZ25hbCBpbnN0ZWFkIG9mIGJsb2NraW5nLCB1bnN1cHBvcnRlZCAqLworfTsKKworI2RlZmluZSBfRFJNX1ZCTEFOS19UWVBFU19NQVNLIChfRFJNX1ZCTEFOS19BQlNPTFVURSB8IF9EUk1fVkJMQU5LX1JFTEFUSVZFKQorI2RlZmluZSBfRFJNX1ZCTEFOS19GTEFHU19NQVNLIChfRFJNX1ZCTEFOS19FVkVOVCB8IF9EUk1fVkJMQU5LX1NJR05BTCB8IFwKKwkJCQlfRFJNX1ZCTEFOS19TRUNPTkRBUlkgfCBfRFJNX1ZCTEFOS19ORVhUT05NSVNTKQorCitzdHJ1Y3QgZHJtX3dhaXRfdmJsYW5rX3JlcXVlc3QgeworCWVudW0gZHJtX3ZibGFua19zZXFfdHlwZSB0eXBlOworCXVuc2lnbmVkIGludCBzZXF1ZW5jZTsKKwl1bnNpZ25lZCBsb25nIHNpZ25hbDsKK307CisKK3N0cnVjdCBkcm1fd2FpdF92YmxhbmtfcmVwbHkgeworCWVudW0gZHJtX3ZibGFua19zZXFfdHlwZSB0eXBlOworCXVuc2lnbmVkIGludCBzZXF1ZW5jZTsKKwlsb25nIHR2YWxfc2VjOworCWxvbmcgdHZhbF91c2VjOworfTsKKworLyoqCisgKiBEUk1fSU9DVExfV0FJVF9WQkxBTksgaW9jdGwgYXJndW1lbnQgdHlwZS4KKyAqCisgKiBcc2EgZHJtV2FpdFZCbGFuaygpLgorICovCit1bmlvbiBkcm1fd2FpdF92YmxhbmsgeworCXN0cnVjdCBkcm1fd2FpdF92YmxhbmtfcmVxdWVzdCByZXF1ZXN0OworCXN0cnVjdCBkcm1fd2FpdF92YmxhbmtfcmVwbHkgcmVwbHk7Cit9OworCisjZGVmaW5lIF9EUk1fUFJFX01PREVTRVQgMQorI2RlZmluZSBfRFJNX1BPU1RfTU9ERVNFVCAyCisKKy8qKgorICogRFJNX0lPQ1RMX01PREVTRVRfQ1RMIGlvY3RsIGFyZ3VtZW50IHR5cGUKKyAqCisgKiBcc2EgZHJtTW9kZXNldEN0bCgpLgorICovCitzdHJ1Y3QgZHJtX21vZGVzZXRfY3RsIHsKKwlfX3UzMiBjcnRjOworCV9fdTMyIGNtZDsKK307CisKKy8qKgorICogRFJNX0lPQ1RMX0FHUF9FTkFCTEUgaW9jdGwgYXJndW1lbnQgdHlwZS4KKyAqCisgKiBcc2EgZHJtQWdwRW5hYmxlKCkuCisgKi8KK3N0cnVjdCBkcm1fYWdwX21vZGUgeworCXVuc2lnbmVkIGxvbmcgbW9kZTsJLyoqPCBBR1AgbW9kZSAqLworfTsKKworLyoqCisgKiBEUk1fSU9DVExfQUdQX0FMTE9DIGFuZCBEUk1fSU9DVExfQUdQX0ZSRUUgaW9jdGxzIGFyZ3VtZW50IHR5cGUuCisgKgorICogXHNhIGRybUFncEFsbG9jKCkgYW5kIGRybUFncEZyZWUoKS4KKyAqLworc3RydWN0IGRybV9hZ3BfYnVmZmVyIHsKKwl1bnNpZ25lZCBsb25nIHNpemU7CS8qKjwgSW4gYnl0ZXMgLS0gd2lsbCByb3VuZCB0byBwYWdlIGJvdW5kYXJ5ICovCisJdW5zaWduZWQgbG9uZyBoYW5kbGU7CS8qKjwgVXNlZCBmb3IgYmluZGluZyAvIHVuYmluZGluZyAqLworCXVuc2lnbmVkIGxvbmcgdHlwZTsJLyoqPCBUeXBlIG9mIG1lbW9yeSB0byBhbGxvY2F0ZSAqLworCXVuc2lnbmVkIGxvbmcgcGh5c2ljYWw7CS8qKjwgUGh5c2ljYWwgdXNlZCBieSBpODEwICovCit9OworCisvKioKKyAqIERSTV9JT0NUTF9BR1BfQklORCBhbmQgRFJNX0lPQ1RMX0FHUF9VTkJJTkQgaW9jdGxzIGFyZ3VtZW50IHR5cGUuCisgKgorICogXHNhIGRybUFncEJpbmQoKSBhbmQgZHJtQWdwVW5iaW5kKCkuCisgKi8KK3N0cnVjdCBkcm1fYWdwX2JpbmRpbmcgeworCXVuc2lnbmVkIGxvbmcgaGFuZGxlOwkvKio8IEZyb20gZHJtX2FncF9idWZmZXIgKi8KKwl1bnNpZ25lZCBsb25nIG9mZnNldDsJLyoqPCBJbiBieXRlcyAtLSB3aWxsIHJvdW5kIHRvIHBhZ2UgYm91bmRhcnkgKi8KK307CisKKy8qKgorICogRFJNX0lPQ1RMX0FHUF9JTkZPIGlvY3RsIGFyZ3VtZW50IHR5cGUuCisgKgorICogXHNhIGRybUFncFZlcnNpb25NYWpvcigpLCBkcm1BZ3BWZXJzaW9uTWlub3IoKSwgZHJtQWdwR2V0TW9kZSgpLAorICogZHJtQWdwQmFzZSgpLCBkcm1BZ3BTaXplKCksIGRybUFncE1lbW9yeVVzZWQoKSwgZHJtQWdwTWVtb3J5QXZhaWwoKSwKKyAqIGRybUFncFZlbmRvcklkKCkgYW5kIGRybUFncERldmljZUlkKCkuCisgKi8KK3N0cnVjdCBkcm1fYWdwX2luZm8geworCWludCBhZ3BfdmVyc2lvbl9tYWpvcjsKKwlpbnQgYWdwX3ZlcnNpb25fbWlub3I7CisJdW5zaWduZWQgbG9uZyBtb2RlOworCXVuc2lnbmVkIGxvbmcgYXBlcnR1cmVfYmFzZTsJLyogcGh5c2ljYWwgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgYXBlcnR1cmVfc2l6ZTsJLyogYnl0ZXMgKi8KKwl1bnNpZ25lZCBsb25nIG1lbW9yeV9hbGxvd2VkOwkvKiBieXRlcyAqLworCXVuc2lnbmVkIGxvbmcgbWVtb3J5X3VzZWQ7CisKKwkvKiBQQ0kgaW5mb3JtYXRpb24gKi8KKwl1bnNpZ25lZCBzaG9ydCBpZF92ZW5kb3I7CisJdW5zaWduZWQgc2hvcnQgaWRfZGV2aWNlOworfTsKKworLyoqCisgKiBEUk1fSU9DVExfU0dfQUxMT0MgaW9jdGwgYXJndW1lbnQgdHlwZS4KKyAqLworc3RydWN0IGRybV9zY2F0dGVyX2dhdGhlciB7CisJdW5zaWduZWQgbG9uZyBzaXplOwkvKio8IEluIGJ5dGVzIC0tIHdpbGwgcm91bmQgdG8gcGFnZSBib3VuZGFyeSAqLworCXVuc2lnbmVkIGxvbmcgaGFuZGxlOwkvKio8IFVzZWQgZm9yIG1hcHBpbmcgLyB1bm1hcHBpbmcgKi8KK307CisKKy8qKgorICogRFJNX0lPQ1RMX1NFVF9WRVJTSU9OIGlvY3RsIGFyZ3VtZW50IHR5cGUuCisgKi8KK3N0cnVjdCBkcm1fc2V0X3ZlcnNpb24geworCWludCBkcm1fZGlfbWFqb3I7CisJaW50IGRybV9kaV9taW5vcjsKKwlpbnQgZHJtX2RkX21ham9yOworCWludCBkcm1fZGRfbWlub3I7Cit9OworCisvKiogRFJNX0lPQ1RMX0dFTV9DTE9TRSBpb2N0bCBhcmd1bWVudCB0eXBlICovCitzdHJ1Y3QgZHJtX2dlbV9jbG9zZSB7CisJLyoqIEhhbmRsZSBvZiB0aGUgb2JqZWN0IHRvIGJlIGNsb3NlZC4gKi8KKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOworfTsKKworLyoqIERSTV9JT0NUTF9HRU1fRkxJTksgaW9jdGwgYXJndW1lbnQgdHlwZSAqLworc3RydWN0IGRybV9nZW1fZmxpbmsgeworCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgYmVpbmcgbmFtZWQgKi8KKwlfX3UzMiBoYW5kbGU7CisKKwkvKiogUmV0dXJuZWQgZ2xvYmFsIG5hbWUgKi8KKwlfX3UzMiBuYW1lOworfTsKKworLyoqIERSTV9JT0NUTF9HRU1fT1BFTiBpb2N0bCBhcmd1bWVudCB0eXBlICovCitzdHJ1Y3QgZHJtX2dlbV9vcGVuIHsKKwkvKiogTmFtZSBvZiBvYmplY3QgYmVpbmcgb3BlbmVkICovCisJX191MzIgbmFtZTsKKworCS8qKiBSZXR1cm5lZCBoYW5kbGUgZm9yIHRoZSBvYmplY3QgKi8KKwlfX3UzMiBoYW5kbGU7CisKKwkvKiogUmV0dXJuZWQgc2l6ZSBvZiB0aGUgb2JqZWN0ICovCisJX191NjQgc2l6ZTsKK307CisKKyNpbmNsdWRlICJkcm1fbW9kZS5oIgorCisjZGVmaW5lIERSTV9JT0NUTF9CQVNFCQkJJ2QnCisjZGVmaW5lIERSTV9JTyhucikJCQlfSU8oRFJNX0lPQ1RMX0JBU0UsbnIpCisjZGVmaW5lIERSTV9JT1IobnIsdHlwZSkJCV9JT1IoRFJNX0lPQ1RMX0JBU0UsbnIsdHlwZSkKKyNkZWZpbmUgRFJNX0lPVyhucix0eXBlKQkJX0lPVyhEUk1fSU9DVExfQkFTRSxucix0eXBlKQorI2RlZmluZSBEUk1fSU9XUihucix0eXBlKQkJX0lPV1IoRFJNX0lPQ1RMX0JBU0UsbnIsdHlwZSkKKworI2RlZmluZSBEUk1fSU9DVExfVkVSU0lPTgkJRFJNX0lPV1IoMHgwMCwgc3RydWN0IGRybV92ZXJzaW9uKQorI2RlZmluZSBEUk1fSU9DVExfR0VUX1VOSVFVRQkJRFJNX0lPV1IoMHgwMSwgc3RydWN0IGRybV91bmlxdWUpCisjZGVmaW5lIERSTV9JT0NUTF9HRVRfTUFHSUMJCURSTV9JT1IoIDB4MDIsIHN0cnVjdCBkcm1fYXV0aCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0lSUV9CVVNJRAkJRFJNX0lPV1IoMHgwMywgc3RydWN0IGRybV9pcnFfYnVzaWQpCisjZGVmaW5lIERSTV9JT0NUTF9HRVRfTUFQICAgICAgICAgICAgICAgRFJNX0lPV1IoMHgwNCwgc3RydWN0IGRybV9tYXApCisjZGVmaW5lIERSTV9JT0NUTF9HRVRfQ0xJRU5UICAgICAgICAgICAgRFJNX0lPV1IoMHgwNSwgc3RydWN0IGRybV9jbGllbnQpCisjZGVmaW5lIERSTV9JT0NUTF9HRVRfU1RBVFMgICAgICAgICAgICAgRFJNX0lPUiggMHgwNiwgc3RydWN0IGRybV9zdGF0cykKKyNkZWZpbmUgRFJNX0lPQ1RMX1NFVF9WRVJTSU9OCQlEUk1fSU9XUigweDA3LCBzdHJ1Y3QgZHJtX3NldF92ZXJzaW9uKQorI2RlZmluZSBEUk1fSU9DVExfTU9ERVNFVF9DVEwgICAgICAgICAgIERSTV9JT1coMHgwOCwgc3RydWN0IGRybV9tb2Rlc2V0X2N0bCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0dFTV9DTE9TRQkJRFJNX0lPVyAoMHgwOSwgc3RydWN0IGRybV9nZW1fY2xvc2UpCisjZGVmaW5lIERSTV9JT0NUTF9HRU1fRkxJTksJCURSTV9JT1dSKDB4MGEsIHN0cnVjdCBkcm1fZ2VtX2ZsaW5rKQorI2RlZmluZSBEUk1fSU9DVExfR0VNX09QRU4JCURSTV9JT1dSKDB4MGIsIHN0cnVjdCBkcm1fZ2VtX29wZW4pCisKKyNkZWZpbmUgRFJNX0lPQ1RMX1NFVF9VTklRVUUJCURSTV9JT1coIDB4MTAsIHN0cnVjdCBkcm1fdW5pcXVlKQorI2RlZmluZSBEUk1fSU9DVExfQVVUSF9NQUdJQwkJRFJNX0lPVyggMHgxMSwgc3RydWN0IGRybV9hdXRoKQorI2RlZmluZSBEUk1fSU9DVExfQkxPQ0sJCQlEUk1fSU9XUigweDEyLCBzdHJ1Y3QgZHJtX2Jsb2NrKQorI2RlZmluZSBEUk1fSU9DVExfVU5CTE9DSwkJRFJNX0lPV1IoMHgxMywgc3RydWN0IGRybV9ibG9jaykKKyNkZWZpbmUgRFJNX0lPQ1RMX0NPTlRST0wJCURSTV9JT1coIDB4MTQsIHN0cnVjdCBkcm1fY29udHJvbCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0FERF9NQVAJCURSTV9JT1dSKDB4MTUsIHN0cnVjdCBkcm1fbWFwKQorI2RlZmluZSBEUk1fSU9DVExfQUREX0JVRlMJCURSTV9JT1dSKDB4MTYsIHN0cnVjdCBkcm1fYnVmX2Rlc2MpCisjZGVmaW5lIERSTV9JT0NUTF9NQVJLX0JVRlMJCURSTV9JT1coIDB4MTcsIHN0cnVjdCBkcm1fYnVmX2Rlc2MpCisjZGVmaW5lIERSTV9JT0NUTF9JTkZPX0JVRlMJCURSTV9JT1dSKDB4MTgsIHN0cnVjdCBkcm1fYnVmX2luZm8pCisjZGVmaW5lIERSTV9JT0NUTF9NQVBfQlVGUwkJRFJNX0lPV1IoMHgxOSwgc3RydWN0IGRybV9idWZfbWFwKQorI2RlZmluZSBEUk1fSU9DVExfRlJFRV9CVUZTCQlEUk1fSU9XKCAweDFhLCBzdHJ1Y3QgZHJtX2J1Zl9mcmVlKQorCisjZGVmaW5lIERSTV9JT0NUTF9STV9NQVAJCURSTV9JT1coIDB4MWIsIHN0cnVjdCBkcm1fbWFwKQorCisjZGVmaW5lIERSTV9JT0NUTF9TRVRfU0FSRUFfQ1RYCQlEUk1fSU9XKCAweDFjLCBzdHJ1Y3QgZHJtX2N0eF9wcml2X21hcCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0dFVF9TQVJFQV9DVFggCURSTV9JT1dSKDB4MWQsIHN0cnVjdCBkcm1fY3R4X3ByaXZfbWFwKQorCisjZGVmaW5lIERSTV9JT0NUTF9TRVRfTUFTVEVSICAgICAgICAgICAgRFJNX0lPKDB4MWUpCisjZGVmaW5lIERSTV9JT0NUTF9EUk9QX01BU1RFUiAgICAgICAgICAgRFJNX0lPKDB4MWYpCisKKyNkZWZpbmUgRFJNX0lPQ1RMX0FERF9DVFgJCURSTV9JT1dSKDB4MjAsIHN0cnVjdCBkcm1fY3R4KQorI2RlZmluZSBEUk1fSU9DVExfUk1fQ1RYCQlEUk1fSU9XUigweDIxLCBzdHJ1Y3QgZHJtX2N0eCkKKyNkZWZpbmUgRFJNX0lPQ1RMX01PRF9DVFgJCURSTV9JT1coIDB4MjIsIHN0cnVjdCBkcm1fY3R4KQorI2RlZmluZSBEUk1fSU9DVExfR0VUX0NUWAkJRFJNX0lPV1IoMHgyMywgc3RydWN0IGRybV9jdHgpCisjZGVmaW5lIERSTV9JT0NUTF9TV0lUQ0hfQ1RYCQlEUk1fSU9XKCAweDI0LCBzdHJ1Y3QgZHJtX2N0eCkKKyNkZWZpbmUgRFJNX0lPQ1RMX05FV19DVFgJCURSTV9JT1coIDB4MjUsIHN0cnVjdCBkcm1fY3R4KQorI2RlZmluZSBEUk1fSU9DVExfUkVTX0NUWAkJRFJNX0lPV1IoMHgyNiwgc3RydWN0IGRybV9jdHhfcmVzKQorI2RlZmluZSBEUk1fSU9DVExfQUREX0RSQVcJCURSTV9JT1dSKDB4MjcsIHN0cnVjdCBkcm1fZHJhdykKKyNkZWZpbmUgRFJNX0lPQ1RMX1JNX0RSQVcJCURSTV9JT1dSKDB4MjgsIHN0cnVjdCBkcm1fZHJhdykKKyNkZWZpbmUgRFJNX0lPQ1RMX0RNQQkJCURSTV9JT1dSKDB4MjksIHN0cnVjdCBkcm1fZG1hKQorI2RlZmluZSBEUk1fSU9DVExfTE9DSwkJCURSTV9JT1coIDB4MmEsIHN0cnVjdCBkcm1fbG9jaykKKyNkZWZpbmUgRFJNX0lPQ1RMX1VOTE9DSwkJRFJNX0lPVyggMHgyYiwgc3RydWN0IGRybV9sb2NrKQorI2RlZmluZSBEUk1fSU9DVExfRklOSVNICQlEUk1fSU9XKCAweDJjLCBzdHJ1Y3QgZHJtX2xvY2spCisKKyNkZWZpbmUgRFJNX0lPQ1RMX0dFTV9QUklNRV9PUEVOICAgICAgICBEUk1fSU9XUigweDJlLCBzdHJ1Y3QgZHJtX2dlbV9vcGVuKQorCisjZGVmaW5lIERSTV9JT0NUTF9BR1BfQUNRVUlSRQkJRFJNX0lPKCAgMHgzMCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0FHUF9SRUxFQVNFCQlEUk1fSU8oICAweDMxKQorI2RlZmluZSBEUk1fSU9DVExfQUdQX0VOQUJMRQkJRFJNX0lPVyggMHgzMiwgc3RydWN0IGRybV9hZ3BfbW9kZSkKKyNkZWZpbmUgRFJNX0lPQ1RMX0FHUF9JTkZPCQlEUk1fSU9SKCAweDMzLCBzdHJ1Y3QgZHJtX2FncF9pbmZvKQorI2RlZmluZSBEUk1fSU9DVExfQUdQX0FMTE9DCQlEUk1fSU9XUigweDM0LCBzdHJ1Y3QgZHJtX2FncF9idWZmZXIpCisjZGVmaW5lIERSTV9JT0NUTF9BR1BfRlJFRQkJRFJNX0lPVyggMHgzNSwgc3RydWN0IGRybV9hZ3BfYnVmZmVyKQorI2RlZmluZSBEUk1fSU9DVExfQUdQX0JJTkQJCURSTV9JT1coIDB4MzYsIHN0cnVjdCBkcm1fYWdwX2JpbmRpbmcpCisjZGVmaW5lIERSTV9JT0NUTF9BR1BfVU5CSU5ECQlEUk1fSU9XKCAweDM3LCBzdHJ1Y3QgZHJtX2FncF9iaW5kaW5nKQorCisjZGVmaW5lIERSTV9JT0NUTF9TR19BTExPQwkJRFJNX0lPV1IoMHgzOCwgc3RydWN0IGRybV9zY2F0dGVyX2dhdGhlcikKKyNkZWZpbmUgRFJNX0lPQ1RMX1NHX0ZSRUUJCURSTV9JT1coIDB4MzksIHN0cnVjdCBkcm1fc2NhdHRlcl9nYXRoZXIpCisKKyNkZWZpbmUgRFJNX0lPQ1RMX1dBSVRfVkJMQU5LCQlEUk1fSU9XUigweDNhLCB1bmlvbiBkcm1fd2FpdF92YmxhbmspCisKKyNkZWZpbmUgRFJNX0lPQ1RMX1VQREFURV9EUkFXCQlEUk1fSU9XKDB4M2YsIHN0cnVjdCBkcm1fdXBkYXRlX2RyYXcpCisKKyNkZWZpbmUgRFJNX0lPQ1RMX01PREVfR0VUUkVTT1VSQ0VTCURSTV9JT1dSKDB4QTAsIHN0cnVjdCBkcm1fbW9kZV9jYXJkX3JlcykKKyNkZWZpbmUgRFJNX0lPQ1RMX01PREVfR0VUQ1JUQwkJRFJNX0lPV1IoMHhBMSwgc3RydWN0IGRybV9tb2RlX2NydGMpCisjZGVmaW5lIERSTV9JT0NUTF9NT0RFX1NFVENSVEMJCURSTV9JT1dSKDB4QTIsIHN0cnVjdCBkcm1fbW9kZV9jcnRjKQorI2RlZmluZSBEUk1fSU9DVExfTU9ERV9DVVJTT1IJCURSTV9JT1dSKDB4QTMsIHN0cnVjdCBkcm1fbW9kZV9jdXJzb3IpCisjZGVmaW5lIERSTV9JT0NUTF9NT0RFX0dFVEdBTU1BCQlEUk1fSU9XUigweEE0LCBzdHJ1Y3QgZHJtX21vZGVfY3J0Y19sdXQpCisjZGVmaW5lIERSTV9JT0NUTF9NT0RFX1NFVEdBTU1BCQlEUk1fSU9XUigweEE1LCBzdHJ1Y3QgZHJtX21vZGVfY3J0Y19sdXQpCisjZGVmaW5lIERSTV9JT0NUTF9NT0RFX0dFVEVOQ09ERVIJRFJNX0lPV1IoMHhBNiwgc3RydWN0IGRybV9tb2RlX2dldF9lbmNvZGVyKQorI2RlZmluZSBEUk1fSU9DVExfTU9ERV9HRVRDT05ORUNUT1IJRFJNX0lPV1IoMHhBNywgc3RydWN0IGRybV9tb2RlX2dldF9jb25uZWN0b3IpCisjZGVmaW5lIERSTV9JT0NUTF9NT0RFX0FUVEFDSE1PREUJRFJNX0lPV1IoMHhBOCwgc3RydWN0IGRybV9tb2RlX21vZGVfY21kKQorI2RlZmluZSBEUk1fSU9DVExfTU9ERV9ERVRBQ0hNT0RFCURSTV9JT1dSKDB4QTksIHN0cnVjdCBkcm1fbW9kZV9tb2RlX2NtZCkKKworI2RlZmluZSBEUk1fSU9DVExfTU9ERV9HRVRQUk9QRVJUWQlEUk1fSU9XUigweEFBLCBzdHJ1Y3QgZHJtX21vZGVfZ2V0X3Byb3BlcnR5KQorI2RlZmluZSBEUk1fSU9DVExfTU9ERV9TRVRQUk9QRVJUWQlEUk1fSU9XUigweEFCLCBzdHJ1Y3QgZHJtX21vZGVfY29ubmVjdG9yX3NldF9wcm9wZXJ0eSkKKyNkZWZpbmUgRFJNX0lPQ1RMX01PREVfR0VUUFJPUEJMT0IJRFJNX0lPV1IoMHhBQywgc3RydWN0IGRybV9tb2RlX2dldF9ibG9iKQorI2RlZmluZSBEUk1fSU9DVExfTU9ERV9HRVRGQgkJRFJNX0lPV1IoMHhBRCwgc3RydWN0IGRybV9tb2RlX2ZiX2NtZCkKKyNkZWZpbmUgRFJNX0lPQ1RMX01PREVfQURERkIJCURSTV9JT1dSKDB4QUUsIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQpCisjZGVmaW5lIERSTV9JT0NUTF9NT0RFX1JNRkIJCURSTV9JT1dSKDB4QUYsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgRFJNX0lPQ1RMX01PREVfUEFHRV9GTElQCURSTV9JT1dSKDB4QjAsIHN0cnVjdCBkcm1fbW9kZV9jcnRjX3BhZ2VfZmxpcCkKKyNkZWZpbmUgRFJNX0lPQ1RMX01PREVfRElSVFlGQgkJRFJNX0lPV1IoMHhCMSwgc3RydWN0IGRybV9tb2RlX2ZiX2RpcnR5X2NtZCkKKworLyoqCisgKiBEZXZpY2Ugc3BlY2lmaWMgaW9jdGxzIHNob3VsZCBvbmx5IGJlIGluIHRoZWlyIHJlc3BlY3RpdmUgaGVhZGVycworICogVGhlIGRldmljZSBzcGVjaWZpYyBpb2N0bCByYW5nZSBpcyBmcm9tIDB4NDAgdG8gMHg5OS4KKyAqIEdlbmVyaWMgSU9DVExTIHJlc3RhcnQgYXQgMHhBMC4KKyAqCisgKiBcc2EgZHJtQ29tbWFuZE5vbmUoKSwgZHJtQ29tbWFuZFJlYWQoKSwgZHJtQ29tbWFuZFdyaXRlKCksIGFuZAorICogZHJtQ29tbWFuZFJlYWRXcml0ZSgpLgorICovCisjZGVmaW5lIERSTV9DT01NQU5EX0JBU0UgICAgICAgICAgICAgICAgMHg0MAorI2RlZmluZSBEUk1fQ09NTUFORF9FTkQJCQkweEEwCisKKy8qKgorICogSGVhZGVyIGZvciBldmVudHMgd3JpdHRlbiBiYWNrIHRvIHVzZXJzcGFjZSBvbiB0aGUgZHJtIGZkLiAgVGhlCisgKiB0eXBlIGRlZmluZXMgdGhlIHR5cGUgb2YgZXZlbnQsIHRoZSBsZW5ndGggc3BlY2lmaWVzIHRoZSB0b3RhbAorICogbGVuZ3RoIG9mIHRoZSBldmVudCAoaW5jbHVkaW5nIHRoZSBoZWFkZXIpLCBhbmQgdXNlcl9kYXRhIGlzCisgKiB0eXBpY2FsbHkgYSA2NCBiaXQgdmFsdWUgcGFzc2VkIHdpdGggdGhlIGlvY3RsIHRoYXQgdHJpZ2dlcmVkIHRoZQorICogZXZlbnQuICBBIHJlYWQgb24gdGhlIGRybSBmZCB3aWxsIGFsd2F5cyBvbmx5IHJldHVybiBjb21wbGV0ZQorICogZXZlbnRzLCB0aGF0IGlzLCBpZiBmb3IgZXhhbXBsZSB0aGUgcmVhZCBidWZmZXIgaXMgMTAwIGJ5dGVzLCBhbmQKKyAqIHRoZXJlIGFyZSB0d28gNjQgYnl0ZSBldmVudHMgcGVuZGluZywgb25seSBvbmUgd2lsbCBiZSByZXR1cm5lZC4KKyAqCisgKiBFdmVudCB0eXBlcyAwIC0gMHg3ZmZmZmZmZiBhcmUgZ2VuZXJpYyBkcm0gZXZlbnRzLCAweDgwMDAwMDAwIGFuZAorICogdXAgYXJlIGNoaXBzZXQgc3BlY2lmaWMuCisgKi8KK3N0cnVjdCBkcm1fZXZlbnQgeworCV9fdTMyIHR5cGU7CisJX191MzIgbGVuZ3RoOworfTsKKworI2RlZmluZSBEUk1fRVZFTlRfVkJMQU5LIDB4MDEKKyNkZWZpbmUgRFJNX0VWRU5UX0ZMSVBfQ09NUExFVEUgMHgwMgorCitzdHJ1Y3QgZHJtX2V2ZW50X3ZibGFuayB7CisJc3RydWN0IGRybV9ldmVudCBiYXNlOworCV9fdTY0IHVzZXJfZGF0YTsKKwlfX3UzMiB0dl9zZWM7CisJX191MzIgdHZfdXNlYzsKKwlfX3UzMiBzZXF1ZW5jZTsKKwlfX3UzMiByZXNlcnZlZDsKK307CisKKy8qIHR5cGVkZWYgYXJlYSAqLwordHlwZWRlZiBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBkcm1fY2xpcF9yZWN0X3Q7Cit0eXBlZGVmIHN0cnVjdCBkcm1fZHJhd2FibGVfaW5mbyBkcm1fZHJhd2FibGVfaW5mb190OwordHlwZWRlZiBzdHJ1Y3QgZHJtX3RleF9yZWdpb24gZHJtX3RleF9yZWdpb25fdDsKK3R5cGVkZWYgc3RydWN0IGRybV9od19sb2NrIGRybV9od19sb2NrX3Q7Cit0eXBlZGVmIHN0cnVjdCBkcm1fdmVyc2lvbiBkcm1fdmVyc2lvbl90OwordHlwZWRlZiBzdHJ1Y3QgZHJtX3VuaXF1ZSBkcm1fdW5pcXVlX3Q7Cit0eXBlZGVmIHN0cnVjdCBkcm1fbGlzdCBkcm1fbGlzdF90OwordHlwZWRlZiBzdHJ1Y3QgZHJtX2Jsb2NrIGRybV9ibG9ja190OwordHlwZWRlZiBzdHJ1Y3QgZHJtX2NvbnRyb2wgZHJtX2NvbnRyb2xfdDsKK3R5cGVkZWYgZW51bSBkcm1fbWFwX3R5cGUgZHJtX21hcF90eXBlX3Q7Cit0eXBlZGVmIGVudW0gZHJtX21hcF9mbGFncyBkcm1fbWFwX2ZsYWdzX3Q7Cit0eXBlZGVmIHN0cnVjdCBkcm1fY3R4X3ByaXZfbWFwIGRybV9jdHhfcHJpdl9tYXBfdDsKK3R5cGVkZWYgc3RydWN0IGRybV9tYXAgZHJtX21hcF90OwordHlwZWRlZiBzdHJ1Y3QgZHJtX2NsaWVudCBkcm1fY2xpZW50X3Q7Cit0eXBlZGVmIGVudW0gZHJtX3N0YXRfdHlwZSBkcm1fc3RhdF90eXBlX3Q7Cit0eXBlZGVmIHN0cnVjdCBkcm1fc3RhdHMgZHJtX3N0YXRzX3Q7Cit0eXBlZGVmIGVudW0gZHJtX2xvY2tfZmxhZ3MgZHJtX2xvY2tfZmxhZ3NfdDsKK3R5cGVkZWYgc3RydWN0IGRybV9sb2NrIGRybV9sb2NrX3Q7Cit0eXBlZGVmIGVudW0gZHJtX2RtYV9mbGFncyBkcm1fZG1hX2ZsYWdzX3Q7Cit0eXBlZGVmIHN0cnVjdCBkcm1fYnVmX2Rlc2MgZHJtX2J1Zl9kZXNjX3Q7Cit0eXBlZGVmIHN0cnVjdCBkcm1fYnVmX2luZm8gZHJtX2J1Zl9pbmZvX3Q7Cit0eXBlZGVmIHN0cnVjdCBkcm1fYnVmX2ZyZWUgZHJtX2J1Zl9mcmVlX3Q7Cit0eXBlZGVmIHN0cnVjdCBkcm1fYnVmX3B1YiBkcm1fYnVmX3B1Yl90OwordHlwZWRlZiBzdHJ1Y3QgZHJtX2J1Zl9tYXAgZHJtX2J1Zl9tYXBfdDsKK3R5cGVkZWYgc3RydWN0IGRybV9kbWEgZHJtX2RtYV90OwordHlwZWRlZiB1bmlvbiBkcm1fd2FpdF92YmxhbmsgZHJtX3dhaXRfdmJsYW5rX3Q7Cit0eXBlZGVmIHN0cnVjdCBkcm1fYWdwX21vZGUgZHJtX2FncF9tb2RlX3Q7Cit0eXBlZGVmIGVudW0gZHJtX2N0eF9mbGFncyBkcm1fY3R4X2ZsYWdzX3Q7Cit0eXBlZGVmIHN0cnVjdCBkcm1fY3R4IGRybV9jdHhfdDsKK3R5cGVkZWYgc3RydWN0IGRybV9jdHhfcmVzIGRybV9jdHhfcmVzX3Q7Cit0eXBlZGVmIHN0cnVjdCBkcm1fZHJhdyBkcm1fZHJhd190OwordHlwZWRlZiBzdHJ1Y3QgZHJtX3VwZGF0ZV9kcmF3IGRybV91cGRhdGVfZHJhd190OwordHlwZWRlZiBzdHJ1Y3QgZHJtX2F1dGggZHJtX2F1dGhfdDsKK3R5cGVkZWYgc3RydWN0IGRybV9pcnFfYnVzaWQgZHJtX2lycV9idXNpZF90OwordHlwZWRlZiBlbnVtIGRybV92Ymxhbmtfc2VxX3R5cGUgZHJtX3ZibGFua19zZXFfdHlwZV90OworCit0eXBlZGVmIHN0cnVjdCBkcm1fYWdwX2J1ZmZlciBkcm1fYWdwX2J1ZmZlcl90OwordHlwZWRlZiBzdHJ1Y3QgZHJtX2FncF9iaW5kaW5nIGRybV9hZ3BfYmluZGluZ190OwordHlwZWRlZiBzdHJ1Y3QgZHJtX2FncF9pbmZvIGRybV9hZ3BfaW5mb190OwordHlwZWRlZiBzdHJ1Y3QgZHJtX3NjYXR0ZXJfZ2F0aGVyIGRybV9zY2F0dGVyX2dhdGhlcl90OwordHlwZWRlZiBzdHJ1Y3QgZHJtX3NldF92ZXJzaW9uIGRybV9zZXRfdmVyc2lvbl90OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9kcm0vZHJtX21vZGUuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9kcm0vZHJtX21vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmM3Mzk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2RybS9kcm1fbW9kZS5oCkBAIC0wLDAgKzEsMzQ3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3IERhdmUgQWlybGllIDxhaXJsaWVkQGxpbnV4LmllPgorICogQ29weXJpZ2h0IChjKSAyMDA3IEpha29iIEJvcm5lY3JhbnR6IDx3YWxsYnJha2VyQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBSZWQgSGF0IEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IFR1bmdzdGVuIEdyYXBoaWNzLCBJbmMuLCBDZWRhciBQYXJrLCBUWC4sIFVTQQorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfRFJNX01PREVfSAorI2RlZmluZSBfRFJNX01PREVfSAorCisjZGVmaW5lIERSTV9ESVNQTEFZX0lORk9fTEVOCTMyCisjZGVmaW5lIERSTV9DT05ORUNUT1JfTkFNRV9MRU4JMzIKKyNkZWZpbmUgRFJNX0RJU1BMQVlfTU9ERV9MRU4JMzIKKyNkZWZpbmUgRFJNX1BST1BfTkFNRV9MRU4JMzIKKworI2RlZmluZSBEUk1fTU9ERV9UWVBFX0JVSUxUSU4JKDE8PDApCisjZGVmaW5lIERSTV9NT0RFX1RZUEVfQ0xPQ0tfQwkoKDE8PDEpIHwgRFJNX01PREVfVFlQRV9CVUlMVElOKQorI2RlZmluZSBEUk1fTU9ERV9UWVBFX0NSVENfQwkoKDE8PDIpIHwgRFJNX01PREVfVFlQRV9CVUlMVElOKQorI2RlZmluZSBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRAkoMTw8MykKKyNkZWZpbmUgRFJNX01PREVfVFlQRV9ERUZBVUxUCSgxPDw0KQorI2RlZmluZSBEUk1fTU9ERV9UWVBFX1VTRVJERUYJKDE8PDUpCisjZGVmaW5lIERSTV9NT0RFX1RZUEVfRFJJVkVSCSgxPDw2KQorCisvKiBWaWRlbyBtb2RlIGZsYWdzICovCisvKiBiaXQgY29tcGF0aWJsZSB3aXRoIHRoZSB4b3JnIGRlZmluaXRpb25zLiAqLworI2RlZmluZSBEUk1fTU9ERV9GTEFHX1BIU1lOQwkoMTw8MCkKKyNkZWZpbmUgRFJNX01PREVfRkxBR19OSFNZTkMJKDE8PDEpCisjZGVmaW5lIERSTV9NT0RFX0ZMQUdfUFZTWU5DCSgxPDwyKQorI2RlZmluZSBEUk1fTU9ERV9GTEFHX05WU1lOQwkoMTw8MykKKyNkZWZpbmUgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UJKDE8PDQpCisjZGVmaW5lIERSTV9NT0RFX0ZMQUdfREJMU0NBTgkoMTw8NSkKKyNkZWZpbmUgRFJNX01PREVfRkxBR19DU1lOQwkoMTw8NikKKyNkZWZpbmUgRFJNX01PREVfRkxBR19QQ1NZTkMJKDE8PDcpCisjZGVmaW5lIERSTV9NT0RFX0ZMQUdfTkNTWU5DCSgxPDw4KQorI2RlZmluZSBEUk1fTU9ERV9GTEFHX0hTS0VXCSgxPDw5KSAvKiBoc2tldyBwcm92aWRlZCAqLworI2RlZmluZSBEUk1fTU9ERV9GTEFHX0JDQVNUCSgxPDwxMCkKKyNkZWZpbmUgRFJNX01PREVfRkxBR19QSVhNVVgJKDE8PDExKQorI2RlZmluZSBEUk1fTU9ERV9GTEFHX0RCTENMSwkoMTw8MTIpCisjZGVmaW5lIERSTV9NT0RFX0ZMQUdfQ0xLRElWMgkoMTw8MTMpCisKKy8qIERQTVMgZmxhZ3MgKi8KKy8qIGJpdCBjb21wYXRpYmxlIHdpdGggdGhlIHhvcmcgZGVmaW5pdGlvbnMuICovCisjZGVmaW5lIERSTV9NT0RFX0RQTVNfT04JMAorI2RlZmluZSBEUk1fTU9ERV9EUE1TX1NUQU5EQlkJMQorI2RlZmluZSBEUk1fTU9ERV9EUE1TX1NVU1BFTkQJMgorI2RlZmluZSBEUk1fTU9ERV9EUE1TX09GRgkzCisKKy8qIFNjYWxpbmcgbW9kZSBvcHRpb25zICovCisjZGVmaW5lIERSTV9NT0RFX1NDQUxFX05PTkUJCTAgLyogVW5tb2RpZmllZCB0aW1pbmcgKGRpc3BsYXkgb3IKKwkJCQkJICAgICBzb2Z0d2FyZSBjYW4gc3RpbGwgc2NhbGUpICovCisjZGVmaW5lIERSTV9NT0RFX1NDQUxFX0ZVTExTQ1JFRU4JMSAvKiBGdWxsIHNjcmVlbiwgaWdub3JlIGFzcGVjdCAqLworI2RlZmluZSBEUk1fTU9ERV9TQ0FMRV9DRU5URVIJCTIgLyogQ2VudGVyZWQsIG5vIHNjYWxpbmcgKi8KKyNkZWZpbmUgRFJNX01PREVfU0NBTEVfQVNQRUNUCQkzIC8qIEZ1bGwgc2NyZWVuLCBwcmVzZXJ2ZSBhc3BlY3QgKi8KKworLyogRGl0aGVyaW5nIG1vZGUgb3B0aW9ucyAqLworI2RlZmluZSBEUk1fTU9ERV9ESVRIRVJJTkdfT0ZGCTAKKyNkZWZpbmUgRFJNX01PREVfRElUSEVSSU5HX09OCTEKKyNkZWZpbmUgRFJNX01PREVfRElUSEVSSU5HX0FVVE8gMgorCisvKiBEaXJ0eSBpbmZvIG9wdGlvbnMgKi8KKyNkZWZpbmUgRFJNX01PREVfRElSVFlfT0ZGICAgICAgMAorI2RlZmluZSBEUk1fTU9ERV9ESVJUWV9PTiAgICAgICAxCisjZGVmaW5lIERSTV9NT0RFX0RJUlRZX0FOTk9UQVRFIDIKKworc3RydWN0IGRybV9tb2RlX21vZGVpbmZvIHsKKwlfX3UzMiBjbG9jazsKKwlfX3UxNiBoZGlzcGxheSwgaHN5bmNfc3RhcnQsIGhzeW5jX2VuZCwgaHRvdGFsLCBoc2tldzsKKwlfX3UxNiB2ZGlzcGxheSwgdnN5bmNfc3RhcnQsIHZzeW5jX2VuZCwgdnRvdGFsLCB2c2NhbjsKKworCV9fdTMyIHZyZWZyZXNoOworCisJX191MzIgZmxhZ3M7CisJX191MzIgdHlwZTsKKwljaGFyIG5hbWVbRFJNX0RJU1BMQVlfTU9ERV9MRU5dOworfTsKKworc3RydWN0IGRybV9tb2RlX2NhcmRfcmVzIHsKKwlfX3U2NCBmYl9pZF9wdHI7CisJX191NjQgY3J0Y19pZF9wdHI7CisJX191NjQgY29ubmVjdG9yX2lkX3B0cjsKKwlfX3U2NCBlbmNvZGVyX2lkX3B0cjsKKwlfX3UzMiBjb3VudF9mYnM7CisJX191MzIgY291bnRfY3J0Y3M7CisJX191MzIgY291bnRfY29ubmVjdG9yczsKKwlfX3UzMiBjb3VudF9lbmNvZGVyczsKKwlfX3UzMiBtaW5fd2lkdGgsIG1heF93aWR0aDsKKwlfX3UzMiBtaW5faGVpZ2h0LCBtYXhfaGVpZ2h0OworfTsKKworc3RydWN0IGRybV9tb2RlX2NydGMgeworCV9fdTY0IHNldF9jb25uZWN0b3JzX3B0cjsKKwlfX3UzMiBjb3VudF9jb25uZWN0b3JzOworCisJX191MzIgY3J0Y19pZDsgLyoqPCBJZCAqLworCV9fdTMyIGZiX2lkOyAvKio8IElkIG9mIGZyYW1lYnVmZmVyICovCisKKwlfX3UzMiB4LCB5OyAvKio8IFBvc2l0aW9uIG9uIHRoZSBmcmFtZXVmZmVyICovCisKKwlfX3UzMiBnYW1tYV9zaXplOworCV9fdTMyIG1vZGVfdmFsaWQ7CisJc3RydWN0IGRybV9tb2RlX21vZGVpbmZvIG1vZGU7Cit9OworCisjZGVmaW5lIERSTV9NT0RFX0VOQ09ERVJfTk9ORQkwCisjZGVmaW5lIERSTV9NT0RFX0VOQ09ERVJfREFDCTEKKyNkZWZpbmUgRFJNX01PREVfRU5DT0RFUl9UTURTCTIKKyNkZWZpbmUgRFJNX01PREVfRU5DT0RFUl9MVkRTCTMKKyNkZWZpbmUgRFJNX01PREVfRU5DT0RFUl9UVkRBQwk0CisKK3N0cnVjdCBkcm1fbW9kZV9nZXRfZW5jb2RlciB7CisJX191MzIgZW5jb2Rlcl9pZDsKKwlfX3UzMiBlbmNvZGVyX3R5cGU7CisKKwlfX3UzMiBjcnRjX2lkOyAvKio8IElkIG9mIGNydGMgKi8KKworCV9fdTMyIHBvc3NpYmxlX2NydGNzOworCV9fdTMyIHBvc3NpYmxlX2Nsb25lczsKK307CisKKy8qIFRoaXMgaXMgZm9yIGNvbm5lY3RvcnMgd2l0aCBtdWx0aXBsZSBzaWduYWwgdHlwZXMuICovCisvKiBUcnkgdG8gbWF0Y2ggRFJNX01PREVfQ09OTkVDVE9SX1ggYXMgY2xvc2VseSBhcyBwb3NzaWJsZS4gKi8KKyNkZWZpbmUgRFJNX01PREVfU1VCQ09OTkVDVE9SX0F1dG9tYXRpYwkwCisjZGVmaW5lIERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9Vbmtub3duCTAKKyNkZWZpbmUgRFJNX01PREVfU1VCQ09OTkVDVE9SX0RWSUQJMworI2RlZmluZSBEUk1fTU9ERV9TVUJDT05ORUNUT1JfRFZJQQk0CisjZGVmaW5lIERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9Db21wb3NpdGUJNQorI2RlZmluZSBEUk1fTU9ERV9TVUJDT05ORUNUT1JfU1ZJREVPCTYKKyNkZWZpbmUgRFJNX01PREVfU1VCQ09OTkVDVE9SX0NvbXBvbmVudAk4CisjZGVmaW5lIERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9TQ0FSVAk5CisKKyNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX1Vua25vd24JMAorI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfVkdBCQkxCisjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJCQkyCisjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklECQkzCisjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklBCQk0CisjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9Db21wb3NpdGUJNQorI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPCTYKKyNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMJCTcKKyNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX0NvbXBvbmVudAk4CisjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl85UGluRElOCTkKKyNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0CTEwCisjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQQkxMQorI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUIJMTIKKyNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX1RWCQkxMworI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfZURQCQkxNAorCitzdHJ1Y3QgZHJtX21vZGVfZ2V0X2Nvbm5lY3RvciB7CisKKwlfX3U2NCBlbmNvZGVyc19wdHI7CisJX191NjQgbW9kZXNfcHRyOworCV9fdTY0IHByb3BzX3B0cjsKKwlfX3U2NCBwcm9wX3ZhbHVlc19wdHI7CisKKwlfX3UzMiBjb3VudF9tb2RlczsKKwlfX3UzMiBjb3VudF9wcm9wczsKKwlfX3UzMiBjb3VudF9lbmNvZGVyczsKKworCV9fdTMyIGVuY29kZXJfaWQ7IC8qKjwgQ3VycmVudCBFbmNvZGVyICovCisJX191MzIgY29ubmVjdG9yX2lkOyAvKio8IElkICovCisJX191MzIgY29ubmVjdG9yX3R5cGU7CisJX191MzIgY29ubmVjdG9yX3R5cGVfaWQ7CisKKwlfX3UzMiBjb25uZWN0aW9uOworCV9fdTMyIG1tX3dpZHRoLCBtbV9oZWlnaHQ7IC8qKjwgSHhXIGluIG1pbGxpbWV0ZXJzICovCisJX191MzIgc3VicGl4ZWw7Cit9OworCisjZGVmaW5lIERSTV9NT0RFX1BST1BfUEVORElORwkoMTw8MCkKKyNkZWZpbmUgRFJNX01PREVfUFJPUF9SQU5HRQkoMTw8MSkKKyNkZWZpbmUgRFJNX01PREVfUFJPUF9JTU1VVEFCTEUJKDE8PDIpCisjZGVmaW5lIERSTV9NT0RFX1BST1BfRU5VTQkoMTw8MykgLyogZW51bWVyYXRlZCB0eXBlIHdpdGggdGV4dCBzdHJpbmdzICovCisjZGVmaW5lIERSTV9NT0RFX1BST1BfQkxPQgkoMTw8NCkKKworc3RydWN0IGRybV9tb2RlX3Byb3BlcnR5X2VudW0geworCV9fdTY0IHZhbHVlOworCWNoYXIgbmFtZVtEUk1fUFJPUF9OQU1FX0xFTl07Cit9OworCitzdHJ1Y3QgZHJtX21vZGVfZ2V0X3Byb3BlcnR5IHsKKwlfX3U2NCB2YWx1ZXNfcHRyOyAvKiB2YWx1ZXMgYW5kIGJsb2IgbGVuZ3RocyAqLworCV9fdTY0IGVudW1fYmxvYl9wdHI7IC8qIGVudW0gYW5kIGJsb2IgaWQgcHRycyAqLworCisJX191MzIgcHJvcF9pZDsKKwlfX3UzMiBmbGFnczsKKwljaGFyIG5hbWVbRFJNX1BST1BfTkFNRV9MRU5dOworCisJX191MzIgY291bnRfdmFsdWVzOworCV9fdTMyIGNvdW50X2VudW1fYmxvYnM7Cit9OworCitzdHJ1Y3QgZHJtX21vZGVfY29ubmVjdG9yX3NldF9wcm9wZXJ0eSB7CisJX191NjQgdmFsdWU7CisJX191MzIgcHJvcF9pZDsKKwlfX3UzMiBjb25uZWN0b3JfaWQ7Cit9OworCitzdHJ1Y3QgZHJtX21vZGVfZ2V0X2Jsb2IgeworCV9fdTMyIGJsb2JfaWQ7CisJX191MzIgbGVuZ3RoOworCV9fdTY0IGRhdGE7Cit9OworCitzdHJ1Y3QgZHJtX21vZGVfZmJfY21kIHsKKwlfX3UzMiBmYl9pZDsKKwlfX3UzMiB3aWR0aCwgaGVpZ2h0OworCV9fdTMyIHBpdGNoOworCV9fdTMyIGJwcDsKKwlfX3UzMiBkZXB0aDsKKwkvKiBkcml2ZXIgc3BlY2lmaWMgaGFuZGxlICovCisJX191MzIgaGFuZGxlOworfTsKKworI2RlZmluZSBEUk1fTU9ERV9GQl9ESVJUWV9BTk5PVEFURV9DT1BZIDB4MDEKKyNkZWZpbmUgRFJNX01PREVfRkJfRElSVFlfQU5OT1RBVEVfRklMTCAweDAyCisjZGVmaW5lIERSTV9NT0RFX0ZCX0RJUlRZX0ZMQUdTICAgICAgICAgMHgwMworCisvKgorICogTWFyayBhIHJlZ2lvbiBvZiBhIGZyYW1lYnVmZmVyIGFzIGRpcnR5LgorICoKKyAqIFNvbWUgaGFyZHdhcmUgZG9lcyBub3QgYXV0b21hdGljYWxseSB1cGRhdGUgZGlzcGxheSBjb250ZW50cworICogYXMgYSBoYXJkd2FyZSBvciBzb2Z0d2FyZSBkcmF3IHRvIGEgZnJhbWVidWZmZXIuIFRoaXMgaW9jdGwKKyAqIGFsbG93cyB1c2Vyc3BhY2UgdG8gdGVsbCB0aGUga2VybmVsIGFuZCB0aGUgaGFyZHdhcmUgd2hhdAorICogcmVnaW9ucyBvZiB0aGUgZnJhbWVidWZmZXIgaGF2ZSBjaGFuZ2VkLgorICoKKyAqIFRoZSBrZXJuZWwgb3IgaGFyZHdhcmUgaXMgZnJlZSB0byB1cGRhdGUgbW9yZSB0aGVuIGp1c3QgdGhlCisgKiByZWdpb24gc3BlY2lmaWVkIGJ5IHRoZSBjbGlwIHJlY3RzLiBUaGUga2VybmVsIG9yIGhhcmR3YXJlCisgKiBtYXkgYWxzbyBkZWxheSBhbmQvb3IgY29hbGVzY2Ugc2V2ZXJhbCBjYWxscyB0byBkaXJ0eSBpbnRvIGEKKyAqIHNpbmdsZSB1cGRhdGUuCisgKgorICogVXNlcnNwYWNlIG1heSBhbm5vdGF0ZSB0aGUgdXBkYXRlcywgdGhlIGFubm90YXRlcyBhcmUgYQorICogcHJvbWlzZSBtYWRlIGJ5IHRoZSBjYWxsZXIgdGhhdCB0aGUgY2hhbmdlIGlzIGVpdGhlciBhIGNvcHkKKyAqIG9mIHBpeGVscyBvciBhIGZpbGwgb2YgYSBzaW5nbGUgY29sb3IgaW4gdGhlIHJlZ2lvbiBzcGVjaWZpZWQuCisgKgorICogSWYgdGhlIERSTV9NT0RFX0ZCX0RJUlRZX0FOTk9UQVRFX0NPUFkgZmxhZyBpcyBnaXZlbiB0aGVuCisgKiB0aGUgbnVtYmVyIG9mIHVwZGF0ZWQgcmVnaW9ucyBhcmUgaGFsZiBvZiBudW1fY2xpcHMgZ2l2ZW4sCisgKiB3aGVyZSB0aGUgY2xpcCByZWN0cyBhcmUgcGFpcmVkIGluIHNyYyBhbmQgZHN0LiBUaGUgd2lkdGggYW5kCisgKiBoZWlnaHQgb2YgZWFjaCBvbmUgb2YgdGhlIHBhaXJzIG11c3QgbWF0Y2guCisgKgorICogSWYgdGhlIERSTV9NT0RFX0ZCX0RJUlRZX0FOTk9UQVRFX0ZJTEwgZmxhZyBpcyBnaXZlbiB0aGUgY2FsbGVyCisgKiBwcm9taXNlcyB0aGF0IHRoZSByZWdpb24gc3BlY2lmaWVkIG9mIHRoZSBjbGlwIHJlY3RzIGlzIGZpbGxlZAorICogY29tcGxldGVseSB3aXRoIGEgc2luZ2xlIGNvbG9yIGFzIGdpdmVuIGluIHRoZSBjb2xvciBhcmd1bWVudC4KKyAqLworCitzdHJ1Y3QgZHJtX21vZGVfZmJfZGlydHlfY21kIHsKKwlfX3UzMiBmYl9pZDsKKwlfX3UzMiBmbGFnczsKKwlfX3UzMiBjb2xvcjsKKwlfX3UzMiBudW1fY2xpcHM7CisJX191NjQgY2xpcHNfcHRyOworfTsKKworc3RydWN0IGRybV9tb2RlX21vZGVfY21kIHsKKwlfX3UzMiBjb25uZWN0b3JfaWQ7CisJc3RydWN0IGRybV9tb2RlX21vZGVpbmZvIG1vZGU7Cit9OworCisjZGVmaW5lIERSTV9NT0RFX0NVUlNPUl9CTwkoMTw8MCkKKyNkZWZpbmUgRFJNX01PREVfQ1VSU09SX01PVkUJKDE8PDEpCisKKy8qCisgKiBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIGluIGZsYWdzIGRpZmZyZW50IG1lbWJlcnMgYXJlIHVzZWQuCisgKgorICogQ1VSU09SX0JPIHVzZXMKKyAqICAgIGNydGMKKyAqICAgIHdpZHRoCisgKiAgICBoZWlnaHQKKyAqICAgIGhhbmRsZSAtIGlmIDAgdHVybnMgdGhlIGN1cnNvciBvZgorICoKKyAqIENVUlNPUl9NT1ZFIHVzZXMKKyAqICAgIGNydGMKKyAqICAgIHgKKyAqICAgIHkKKyAqLworc3RydWN0IGRybV9tb2RlX2N1cnNvciB7CisJX191MzIgZmxhZ3M7CisJX191MzIgY3J0Y19pZDsKKwlfX3MzMiB4OworCV9fczMyIHk7CisJX191MzIgd2lkdGg7CisJX191MzIgaGVpZ2h0OworCS8qIGRyaXZlciBzcGVjaWZpYyBoYW5kbGUgKi8KKwlfX3UzMiBoYW5kbGU7Cit9OworCitzdHJ1Y3QgZHJtX21vZGVfY3J0Y19sdXQgeworCV9fdTMyIGNydGNfaWQ7CisJX191MzIgZ2FtbWFfc2l6ZTsKKworCS8qIHBvaW50ZXJzIHRvIGFycmF5cyAqLworCV9fdTY0IHJlZDsKKwlfX3U2NCBncmVlbjsKKwlfX3U2NCBibHVlOworfTsKKworI2RlZmluZSBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQgMHgwMQorI2RlZmluZSBEUk1fTU9ERV9QQUdFX0ZMSVBfRkxBR1MgRFJNX01PREVfUEFHRV9GTElQX0VWRU5UCisKKy8qCisgKiBSZXF1ZXN0IGEgcGFnZSBmbGlwIG9uIHRoZSBzcGVjaWZpZWQgY3J0Yy4KKyAqCisgKiBUaGlzIGlvY3RsIHdpbGwgYXNrIEtNUyB0byBzY2hlZHVsZSBhIHBhZ2UgZmxpcCBmb3IgdGhlIHNwZWNpZmllZAorICogY3J0Yy4gIE9uY2UgYW55IHBlbmRpbmcgcmVuZGVyaW5nIHRhcmdldGluZyB0aGUgc3BlY2lmaWVkIGZiIChhcyBvZgorICogaW9jdGwgdGltZSkgaGFzIGNvbXBsZXRlZCwgdGhlIGNydGMgd2lsbCBiZSByZXByb2dyYW1tZWQgdG8gZGlzcGxheQorICogdGhhdCBmYiBhZnRlciB0aGUgbmV4dCB2ZXJ0aWNhbCByZWZyZXNoLiAgVGhlIGlvY3RsIHJldHVybnMKKyAqIGltbWVkaWF0ZWx5LCBidXQgc3Vic2VxdWVudCByZW5kZXJpbmcgdG8gdGhlIGN1cnJlbnQgZmIgd2lsbCBibG9jaworICogaW4gdGhlIGV4ZWNidWZmZXIgaW9jdGwgdW50aWwgdGhlIHBhZ2UgZmxpcCBoYXBwZW5zLiAgSWYgYSBwYWdlCisgKiBmbGlwIGlzIGFscmVhZHkgcGVuZGluZyBhcyB0aGUgaW9jdGwgaXMgY2FsbGVkLCBFQlVTWSB3aWxsIGJlCisgKiByZXR1cm5lZC4KKyAqCisgKiBUaGUgaW9jdGwgc3VwcG9ydHMgb25lIGZsYWcsIERSTV9NT0RFX1BBR0VfRkxJUF9FVkVOVCwgd2hpY2ggd2lsbAorICogcmVxdWVzdCB0aGF0IGRybSBzZW5kcyBiYWNrIGEgdmJsYW5rIGV2ZW50IChzZWUgZHJtLmg6IHN0cnVjdAorICogZHJtX2V2ZW50X3ZibGFuaykgd2hlbiB0aGUgcGFnZSBmbGlwIGlzIGRvbmUuICBUaGUgdXNlcl9kYXRhIGZpZWxkCisgKiBwYXNzZWQgaW4gd2l0aCB0aGlzIGlvY3RsIHdpbGwgYmUgcmV0dXJuZWQgYXMgdGhlIHVzZXJfZGF0YSBmaWVsZAorICogaW4gdGhlIHZibGFuayBldmVudCBzdHJ1Y3QuCisgKgorICogVGhlIHJlc2VydmVkIGZpZWxkIG11c3QgYmUgemVybyB1bnRpbCB3ZSBmaWd1cmUgb3V0IHNvbWV0aGluZworICogY2xldmVyIHRvIHVzZSBpdCBmb3IuCisgKi8KKworc3RydWN0IGRybV9tb2RlX2NydGNfcGFnZV9mbGlwIHsKKwlfX3UzMiBjcnRjX2lkOworCV9fdTMyIGZiX2lkOworCV9fdTMyIGZsYWdzOworCV9fdTMyIHJlc2VydmVkOworCV9fdTY0IHVzZXJfZGF0YTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2RybS9kcm1fc2FyZWEuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9kcm0vZHJtX3NhcmVhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMyNTU1OAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9kcm0vZHJtX3NhcmVhLmgKQEAgLTAsMCArMSw4MiBAQAorLyoqCisgKiBcZmlsZSBkcm1fc2FyZWEuaAorICogXGJyaWVmIFNBUkVBIGRlZmluaXRpb25zCisgKgorICogXGF1dGhvciBNaWNoZWwgRMOkbnplciA8bWljaGVsQGRhZW56ZXIubmV0PgorICovCisKKy8qCisgKiBDb3B5cmlnaHQgMjAwMiBUdW5nc3RlbiBHcmFwaGljcywgSW5jLiwgQ2VkYXIgUGFyaywgVGV4YXMuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUVU5HU1RFTiBHUkFQSElDUyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9EUk1fU0FSRUFfSF8KKyNkZWZpbmUgX0RSTV9TQVJFQV9IXworCisjaW5jbHVkZSAiZHJtLmgiCisKKy8qIFNBUkVBIGFyZWEgbmVlZHMgdG8gYmUgYXQgbGVhc3QgYSBwYWdlICovCisjaWYgZGVmaW5lZChfX2FscGhhX18pCisjZGVmaW5lIFNBUkVBX01BWCAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwVQorI2VsaWYgZGVmaW5lZChfX2lhNjRfXykKKyNkZWZpbmUgU0FSRUFfTUFYICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwVQkvKiA2NGtCICovCisjZWxzZQorLyogSW50ZWwgODMwTSBkcml2ZXIgbmVlZHMgYXQgbGVhc3QgOGsgU0FSRUEgKi8KKyNkZWZpbmUgU0FSRUFfTUFYICAgICAgICAgICAgICAgICAgICAgICAweDIwMDBVCisjZW5kaWYKKworLyoqIE1heGltdW0gbnVtYmVyIG9mIGRyYXdhYmxlcyBpbiB0aGUgU0FSRUEgKi8KKyNkZWZpbmUgU0FSRUFfTUFYX0RSQVdBQkxFUwkJMjU2CisKKyNkZWZpbmUgU0FSRUFfRFJBV0FCTEVfQ0xBSU1FRF9FTlRSWSAgICAweDgwMDAwMDAwCisKKy8qKiBTQVJFQSBkcmF3YWJsZSAqLworc3RydWN0IGRybV9zYXJlYV9kcmF3YWJsZSB7CisJdW5zaWduZWQgaW50IHN0YW1wOworCXVuc2lnbmVkIGludCBmbGFnczsKK307CisKKy8qKiBTQVJFQSBmcmFtZSAqLworc3RydWN0IGRybV9zYXJlYV9mcmFtZSB7CisJdW5zaWduZWQgaW50IHg7CisJdW5zaWduZWQgaW50IHk7CisJdW5zaWduZWQgaW50IHdpZHRoOworCXVuc2lnbmVkIGludCBoZWlnaHQ7CisJdW5zaWduZWQgaW50IGZ1bGxzY3JlZW47Cit9OworCisvKiogU0FSRUEgKi8KK3N0cnVjdCBkcm1fc2FyZWEgeworICAgIC8qKiBmaXJzdCB0aGluZyBpcyBhbHdheXMgdGhlIERSTSBsb2NraW5nIHN0cnVjdHVyZSAqLworCXN0cnVjdCBkcm1faHdfbG9jayBsb2NrOworICAgIC8qKiBcdG9kbyBVc2UgcmVhZGVycy93cml0ZXIgbG9jayBmb3IgZHJtX3NhcmVhOjpkcmF3YWJsZV9sb2NrICovCisJc3RydWN0IGRybV9od19sb2NrIGRyYXdhYmxlX2xvY2s7CisJc3RydWN0IGRybV9zYXJlYV9kcmF3YWJsZSBkcmF3YWJsZVRhYmxlW1NBUkVBX01BWF9EUkFXQUJMRVNdOwkvKio8IGRyYXdhYmxlcyAqLworCXN0cnVjdCBkcm1fc2FyZWFfZnJhbWUgZnJhbWU7CS8qKjwgZnJhbWUgKi8KKwlkcm1fY29udGV4dF90IGR1bW15X2NvbnRleHQ7Cit9OworCit0eXBlZGVmIHN0cnVjdCBkcm1fc2FyZWFfZHJhd2FibGUgZHJtX3NhcmVhX2RyYXdhYmxlX3Q7Cit0eXBlZGVmIHN0cnVjdCBkcm1fc2FyZWFfZnJhbWUgZHJtX3NhcmVhX2ZyYW1lX3Q7Cit0eXBlZGVmIHN0cnVjdCBkcm1fc2FyZWEgZHJtX3NhcmVhX3Q7CisKKyNlbmRpZgkJCQkvKiBfRFJNX1NBUkVBX0hfICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZHJtL2k4MTBfZHJtLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZHJtL2k4MTBfZHJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ExMGJiNgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9kcm0vaTgxMF9kcm0uaApAQCAtMCwwICsxLDI4MSBAQAorI2lmbmRlZiBfSTgxMF9EUk1fSF8KKyNkZWZpbmUgX0k4MTBfRFJNX0hfCisKKy8qIFdBUk5JTkc6IFRoZXNlIGRlZmluZXMgbXVzdCBiZSB0aGUgc2FtZSBhcyB3aGF0IHRoZSBYc2VydmVyIHVzZXMuCisgKiBpZiB5b3UgY2hhbmdlIHRoZW0sIHlvdSBtdXN0IGNoYW5nZSB0aGUgZGVmaW5lcyBpbiB0aGUgWHNlcnZlci4KKyAqLworCisjaWZuZGVmIF9JODEwX0RFRklORVNfCisjZGVmaW5lIF9JODEwX0RFRklORVNfCisKKyNkZWZpbmUgSTgxMF9ETUFfQlVGX09SREVSCQkxMgorI2RlZmluZSBJODEwX0RNQV9CVUZfU1ogCQkoMTw8STgxMF9ETUFfQlVGX09SREVSKQorI2RlZmluZSBJODEwX0RNQV9CVUZfTlIgCQkyNTYKKyNkZWZpbmUgSTgxMF9OUl9TQVJFQV9DTElQUkVDVFMgCTgKKworLyogRWFjaCByZWdpb24gaXMgYSBtaW5pbXVtIG9mIDY0aywgYW5kIHRoZXJlIGFyZSBhdCBtb3N0IDY0IG9mIHRoZW0uCisgKi8KKyNkZWZpbmUgSTgxMF9OUl9URVhfUkVHSU9OUyA2NAorI2RlZmluZSBJODEwX0xPR19NSU5fVEVYX1JFR0lPTl9TSVpFIDE2CisjZW5kaWYKKworI2RlZmluZSBJODEwX1VQTE9BRF9URVgwSU1BR0UgIDB4MQkvKiBoYW5kbGVkIGNsaWVudHNpZGUgKi8KKyNkZWZpbmUgSTgxMF9VUExPQURfVEVYMUlNQUdFICAweDIJLyogaGFuZGxlZCBjbGllbnRzaWRlICovCisjZGVmaW5lIEk4MTBfVVBMT0FEX0NUWCAgICAgICAgMHg0CisjZGVmaW5lIEk4MTBfVVBMT0FEX0JVRkZFUlMgICAgMHg4CisjZGVmaW5lIEk4MTBfVVBMT0FEX1RFWDAgICAgICAgMHgxMAorI2RlZmluZSBJODEwX1VQTE9BRF9URVgxICAgICAgIDB4MjAKKyNkZWZpbmUgSTgxMF9VUExPQURfQ0xJUFJFQ1RTICAweDQwCisKKy8qIEluZGljZXMgaW50byBidWYuU2V0dXAgd2hlcmUgdmFyaW91cyBiaXRzIG9mIHN0YXRlIGFyZSBtaXJyb3JlZCBwZXIKKyAqIGNvbnRleHQgYW5kIHBlciBidWZmZXIuICBUaGVzZSBjYW4gYmUgZmlyZWQgYXQgdGhlIGNhcmQgYXMgYSB1bml0LAorICogb3IgaW4gYSBwaWVjZXdpc2UgZmFzaGlvbiBhcyByZXF1aXJlZC4KKyAqLworCisvKiBEZXN0YnVmZmVyIHN0YXRlCisgKiAgICAtIGJhY2tidWZmZXIgbGluZWFyIG9mZnNldCBhbmQgcGl0Y2ggLS0gaW52YXJpZW50IGluIHRoZSBjdXJyZW50IGRyaQorICogICAgLSB6YnVmZmVyIGxpbmVhciBvZmZzZXQgYW5kIHBpdGNoIC0tIGFsc28gaW52YXJpZW50CisgKiAgICAtIGRyYXdpbmcgb3JpZ2luIGluIGJhY2sgYW5kIGRlcHRoIGJ1ZmZlcnMuCisgKgorICogS2VlcCB0aGUgZGVwdGgvYmFjayBidWZmZXIgc3RhdGUgaGVyZSB0byBhY2NvbW1vZGF0ZSBwcml2YXRlIGJ1ZmZlcnMKKyAqIGluIHRoZSBmdXR1cmUuCisgKi8KKyNkZWZpbmUgSTgxMF9ERVNUUkVHX0RJMCAgMAkvKiBDTURfT1BfREVTVEJVRkZFUl9JTkZPICgyIGR3b3JkcykgKi8KKyNkZWZpbmUgSTgxMF9ERVNUUkVHX0RJMSAgMQorI2RlZmluZSBJODEwX0RFU1RSRUdfRFYwICAyCS8qIEdGWF9PUF9ERVNUQlVGRkVSX1ZBUlMgKDIgZHdvcmRzKSAqLworI2RlZmluZSBJODEwX0RFU1RSRUdfRFYxICAzCisjZGVmaW5lIEk4MTBfREVTVFJFR19EUjAgIDQJLyogR0ZYX09QX0RSQVdSRUNUX0lORk8gKDQgZHdvcmRzKSAqLworI2RlZmluZSBJODEwX0RFU1RSRUdfRFIxICA1CisjZGVmaW5lIEk4MTBfREVTVFJFR19EUjIgIDYKKyNkZWZpbmUgSTgxMF9ERVNUUkVHX0RSMyAgNworI2RlZmluZSBJODEwX0RFU1RSRUdfRFI0ICA4CisjZGVmaW5lIEk4MTBfREVTVF9TRVRVUF9TSVpFIDEwCisKKy8qIENvbnRleHQgc3RhdGUKKyAqLworI2RlZmluZSBJODEwX0NUWFJFR19DRjAgICAwCS8qIEdGWF9PUF9DT0xPUl9GQUNUT1IgKi8KKyNkZWZpbmUgSTgxMF9DVFhSRUdfQ0YxICAgMQorI2RlZmluZSBJODEwX0NUWFJFR19TVDAgICAyCS8qIEdGWF9PUF9TVElQUExFICovCisjZGVmaW5lIEk4MTBfQ1RYUkVHX1NUMSAgIDMKKyNkZWZpbmUgSTgxMF9DVFhSRUdfVkYgICAgNAkvKiBHRlhfT1BfVkVSVEVYX0ZNVCAqLworI2RlZmluZSBJODEwX0NUWFJFR19NVCAgICA1CS8qIEdGWF9PUF9NQVBfVEVYRUxTICovCisjZGVmaW5lIEk4MTBfQ1RYUkVHX01DMCAgIDYJLyogR0ZYX09QX01BUF9DT0xPUl9TVEFHRVMgLSBzdGFnZSAwICovCisjZGVmaW5lIEk4MTBfQ1RYUkVHX01DMSAgIDcJLyogR0ZYX09QX01BUF9DT0xPUl9TVEFHRVMgLSBzdGFnZSAxICovCisjZGVmaW5lIEk4MTBfQ1RYUkVHX01DMiAgIDgJLyogR0ZYX09QX01BUF9DT0xPUl9TVEFHRVMgLSBzdGFnZSAyICovCisjZGVmaW5lIEk4MTBfQ1RYUkVHX01BMCAgIDkJLyogR0ZYX09QX01BUF9BTFBIQV9TVEFHRVMgLSBzdGFnZSAwICovCisjZGVmaW5lIEk4MTBfQ1RYUkVHX01BMSAgIDEwCS8qIEdGWF9PUF9NQVBfQUxQSEFfU1RBR0VTIC0gc3RhZ2UgMSAqLworI2RlZmluZSBJODEwX0NUWFJFR19NQTIgICAxMQkvKiBHRlhfT1BfTUFQX0FMUEhBX1NUQUdFUyAtIHN0YWdlIDIgKi8KKyNkZWZpbmUgSTgxMF9DVFhSRUdfU0RNICAgMTIJLyogR0ZYX09QX1NSQ19ERVNUX01PTk8gKi8KKyNkZWZpbmUgSTgxMF9DVFhSRUdfRk9HICAgMTMJLyogR0ZYX09QX0ZPR19DT0xPUiAqLworI2RlZmluZSBJODEwX0NUWFJFR19CMSAgICAxNAkvKiBHRlhfT1BfQk9PTF8xICovCisjZGVmaW5lIEk4MTBfQ1RYUkVHX0IyICAgIDE1CS8qIEdGWF9PUF9CT09MXzIgKi8KKyNkZWZpbmUgSTgxMF9DVFhSRUdfTENTICAgMTYJLyogR0ZYX09QX0xJTkVXSURUSF9DVUxMX1NIQURFX01PREUgKi8KKyNkZWZpbmUgSTgxMF9DVFhSRUdfUFYgICAgMTcJLyogR0ZYX09QX1BWX1JVTEUgLS0gSW52YXJpZW50ISAqLworI2RlZmluZSBJODEwX0NUWFJFR19aQSAgICAxOAkvKiBHRlhfT1BfWkJJQVNfQUxQSEFGVU5DICovCisjZGVmaW5lIEk4MTBfQ1RYUkVHX0FBICAgIDE5CS8qIEdGWF9PUF9BTlRJQUxJQVMgKi8KKyNkZWZpbmUgSTgxMF9DVFhfU0VUVVBfU0laRSAyMAorCisvKiBUZXh0dXJlIHN0YXRlIChwZXIgdGV4IHVuaXQpCisgKi8KKyNkZWZpbmUgSTgxMF9URVhSRUdfTUkwICAwCS8qIEdGWF9PUF9NQVBfSU5GTyAoNCBkd29yZHMpICovCisjZGVmaW5lIEk4MTBfVEVYUkVHX01JMSAgMQorI2RlZmluZSBJODEwX1RFWFJFR19NSTIgIDIKKyNkZWZpbmUgSTgxMF9URVhSRUdfTUkzICAzCisjZGVmaW5lIEk4MTBfVEVYUkVHX01GICAgNAkvKiBHRlhfT1BfTUFQX0ZJTFRFUiAqLworI2RlZmluZSBJODEwX1RFWFJFR19NTEMgIDUJLyogR0ZYX09QX01BUF9MT0RfQ1RMICovCisjZGVmaW5lIEk4MTBfVEVYUkVHX01MTCAgNgkvKiBHRlhfT1BfTUFQX0xPRF9MSU1JVFMgKi8KKyNkZWZpbmUgSTgxMF9URVhSRUdfTUNTICA3CS8qIEdGWF9PUF9NQVBfQ09PUkRfU0VUUyA/Pz8gKi8KKyNkZWZpbmUgSTgxMF9URVhfU0VUVVBfU0laRSA4CisKKy8qIEZsYWdzIGZvciBjbGVhciBpb2N0bAorICovCisjZGVmaW5lIEk4MTBfRlJPTlQgICAweDEKKyNkZWZpbmUgSTgxMF9CQUNLICAgIDB4MgorI2RlZmluZSBJODEwX0RFUFRIICAgMHg0CisKK3R5cGVkZWYgZW51bSBfZHJtX2k4MTBfaW5pdF9mdW5jIHsKKwlJODEwX0lOSVRfRE1BID0gMHgwMSwKKwlJODEwX0NMRUFOVVBfRE1BID0gMHgwMiwKKwlJODEwX0lOSVRfRE1BXzFfNCA9IDB4MDMKK30gZHJtX2k4MTBfaW5pdF9mdW5jX3Q7CisKKy8qIFRoaXMgaXMgdGhlIGluaXQgc3RydWN0dXJlIGFmdGVyIHYxLjIgKi8KK3R5cGVkZWYgc3RydWN0IF9kcm1faTgxMF9pbml0IHsKKwlkcm1faTgxMF9pbml0X2Z1bmNfdCBmdW5jOworCXVuc2lnbmVkIGludCBtbWlvX29mZnNldDsKKwl1bnNpZ25lZCBpbnQgYnVmZmVyc19vZmZzZXQ7CisJaW50IHNhcmVhX3ByaXZfb2Zmc2V0OworCXVuc2lnbmVkIGludCByaW5nX3N0YXJ0OworCXVuc2lnbmVkIGludCByaW5nX2VuZDsKKwl1bnNpZ25lZCBpbnQgcmluZ19zaXplOworCXVuc2lnbmVkIGludCBmcm9udF9vZmZzZXQ7CisJdW5zaWduZWQgaW50IGJhY2tfb2Zmc2V0OworCXVuc2lnbmVkIGludCBkZXB0aF9vZmZzZXQ7CisJdW5zaWduZWQgaW50IG92ZXJsYXlfb2Zmc2V0OworCXVuc2lnbmVkIGludCBvdmVybGF5X3BoeXNpY2FsOworCXVuc2lnbmVkIGludCB3OworCXVuc2lnbmVkIGludCBoOworCXVuc2lnbmVkIGludCBwaXRjaDsKKwl1bnNpZ25lZCBpbnQgcGl0Y2hfYml0czsKK30gZHJtX2k4MTBfaW5pdF90OworCisvKiBUaGlzIGlzIHRoZSBpbml0IHN0cnVjdHVyZSBwcmlvciB0byB2MS4yICovCit0eXBlZGVmIHN0cnVjdCBfZHJtX2k4MTBfcHJlMTJfaW5pdCB7CisJZHJtX2k4MTBfaW5pdF9mdW5jX3QgZnVuYzsKKwl1bnNpZ25lZCBpbnQgbW1pb19vZmZzZXQ7CisJdW5zaWduZWQgaW50IGJ1ZmZlcnNfb2Zmc2V0OworCWludCBzYXJlYV9wcml2X29mZnNldDsKKwl1bnNpZ25lZCBpbnQgcmluZ19zdGFydDsKKwl1bnNpZ25lZCBpbnQgcmluZ19lbmQ7CisJdW5zaWduZWQgaW50IHJpbmdfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgZnJvbnRfb2Zmc2V0OworCXVuc2lnbmVkIGludCBiYWNrX29mZnNldDsKKwl1bnNpZ25lZCBpbnQgZGVwdGhfb2Zmc2V0OworCXVuc2lnbmVkIGludCB3OworCXVuc2lnbmVkIGludCBoOworCXVuc2lnbmVkIGludCBwaXRjaDsKKwl1bnNpZ25lZCBpbnQgcGl0Y2hfYml0czsKK30gZHJtX2k4MTBfcHJlMTJfaW5pdF90OworCisvKiBXYXJuaW5nOiBJZiB5b3UgY2hhbmdlIHRoZSBTQVJFQSBzdHJ1Y3R1cmUgeW91IG11c3QgY2hhbmdlIHRoZSBYc2VydmVyCisgKiBzdHJ1Y3R1cmUgYXMgd2VsbCAqLworCit0eXBlZGVmIHN0cnVjdCBfZHJtX2k4MTBfdGV4X3JlZ2lvbiB7CisJdW5zaWduZWQgY2hhciBuZXh0LCBwcmV2OwkvKiBpbmRpY2VzIHRvIGZvcm0gYSBjaXJjdWxhciBMUlUgICovCisJdW5zaWduZWQgY2hhciBpbl91c2U7CS8qIG93bmVkIGJ5IGEgY2xpZW50LCBvciBmcmVlPyAqLworCWludCBhZ2U7CQkvKiB0cmFja2VkIGJ5IGNsaWVudHMgdG8gdXBkYXRlIGxvY2FsIExSVSdzICovCit9IGRybV9pODEwX3RleF9yZWdpb25fdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2RybV9pODEwX3NhcmVhIHsKKwl1bnNpZ25lZCBpbnQgQ29udGV4dFN0YXRlW0k4MTBfQ1RYX1NFVFVQX1NJWkVdOworCXVuc2lnbmVkIGludCBCdWZmZXJTdGF0ZVtJODEwX0RFU1RfU0VUVVBfU0laRV07CisJdW5zaWduZWQgaW50IFRleFN0YXRlWzJdW0k4MTBfVEVYX1NFVFVQX1NJWkVdOworCXVuc2lnbmVkIGludCBkaXJ0eTsKKworCXVuc2lnbmVkIGludCBuYm94OworCXN0cnVjdCBkcm1fY2xpcF9yZWN0IGJveGVzW0k4MTBfTlJfU0FSRUFfQ0xJUFJFQ1RTXTsKKworCS8qIE1haW50YWluIGFuIExSVSBvZiBjb250aWd1b3VzIHJlZ2lvbnMgb2YgdGV4dHVyZSBzcGFjZS4gIElmCisJICogeW91IHRoaW5rIHlvdSBvd24gYSByZWdpb24gb2YgdGV4dHVyZSBtZW1vcnksIGFuZCBpdCBoYXMgYW4KKwkgKiBhZ2UgZGlmZmVyZW50IHRvIHRoZSBvbmUgeW91IHNldCwgdGhlbiB5b3UgYXJlIG1pc3Rha2VuIGFuZAorCSAqIGl0IGhhcyBiZWVuIHN0b2xlbiBieSBhbm90aGVyIGNsaWVudC4gIElmIGdsb2JhbCB0ZXhBZ2UKKwkgKiBoYXNuJ3QgY2hhbmdlZCwgdGhlcmUgaXMgbm8gbmVlZCB0byB3YWxrIHRoZSBsaXN0LgorCSAqCisJICogVGhlc2UgcmVnaW9ucyBjYW4gYmUgdXNlZCBhcyBhIHByb3h5IGZvciB0aGUgZmluZS1ncmFpbmVkCisJICogdGV4dHVyZSBpbmZvcm1hdGlvbiBvZiBvdGhlciBjbGllbnRzIC0gYnkgbWFpbnRhaW5pbmcgdGhlbQorCSAqIGluIHRoZSBzYW1lIGxydSB3aGljaCBpcyB1c2VkIHRvIGFnZSB0aGVpciBvd24gdGV4dHVyZXMsCisJICogY2xpZW50cyBoYXZlIGFuIGFwcHJveGltYXRlIGxydSBmb3IgdGhlIHdob2xlIG9mIGdsb2JhbAorCSAqIHRleHR1cmUgc3BhY2UsIGFuZCBjYW4gbWFrZSBpbmZvcm1lZCBkZWNpc2lvbnMgYXMgdG8gd2hpY2gKKwkgKiBhcmVhcyB0byBraWNrIG91dC4gIFRoZXJlIGlzIG5vIG5lZWQgdG8gY2hvb3NlIHdoZXRoZXIgdG8KKwkgKiBraWNrIG91dCB5b3VyIG93biB0ZXh0dXJlIG9yIHNvbWVvbmUgZWxzZSdzIC0gc2ltcGx5IGVqZWN0CisJICogdGhlbSBhbGwgaW4gTFJVIG9yZGVyLgorCSAqLworCisJZHJtX2k4MTBfdGV4X3JlZ2lvbl90IHRleExpc3RbSTgxMF9OUl9URVhfUkVHSU9OUyArIDFdOworCS8qIExhc3QgZWx0IGlzIHNlbnRpbmFsICovCisJaW50IHRleEFnZTsJCS8qIGxhc3QgdGltZSB0ZXh0dXJlIHdhcyB1cGxvYWRlZCAqLworCWludCBsYXN0X2VucXVldWU7CS8qIGxhc3QgdGltZSBhIGJ1ZmZlciB3YXMgZW5xdWV1ZWQgKi8KKwlpbnQgbGFzdF9kaXNwYXRjaDsJLyogYWdlIG9mIHRoZSBtb3N0IHJlY2VudGx5IGRpc3BhdGNoZWQgYnVmZmVyICovCisJaW50IGxhc3RfcXVpZXNjZW50OwkvKiAgKi8KKwlpbnQgY3R4T3duZXI7CQkvKiBsYXN0IGNvbnRleHQgdG8gdXBsb2FkIHN0YXRlICovCisKKwlpbnQgdmVydGV4X3ByaW07CisKKwlpbnQgcGZfZW5hYmxlZDsJCS8qIGlzIHBhZ2VmbGlwcGluZyBhbGxvd2VkPyAqLworCWludCBwZl9hY3RpdmU7CisJaW50IHBmX2N1cnJlbnRfcGFnZTsJLyogd2hpY2ggYnVmZmVyIGlzIGJlaW5nIGRpc3BsYXllZD8gKi8KK30gZHJtX2k4MTBfc2FyZWFfdDsKKworLyogV0FSTklORzogSWYgeW91IGNoYW5nZSBhbnkgb2YgdGhlc2UgZGVmaW5lcywgbWFrZSBzdXJlIHRvIGNoYW5nZSB0aGUKKyAqIGRlZmluZXMgaW4gdGhlIFhzZXJ2ZXIgZmlsZSAoeGY4NmRybU1nYS5oKQorICovCisKKy8qIGk4MTAgc3BlY2lmaWMgaW9jdGxzCisgKiBUaGUgZGV2aWNlIHNwZWNpZmljIGlvY3RsIHJhbmdlIGlzIDB4NDAgdG8gMHg3OS4KKyAqLworI2RlZmluZSBEUk1fSTgxMF9JTklUCQkweDAwCisjZGVmaW5lIERSTV9JODEwX1ZFUlRFWAkJMHgwMQorI2RlZmluZSBEUk1fSTgxMF9DTEVBUgkJMHgwMgorI2RlZmluZSBEUk1fSTgxMF9GTFVTSAkJMHgwMworI2RlZmluZSBEUk1fSTgxMF9HRVRBR0UJCTB4MDQKKyNkZWZpbmUgRFJNX0k4MTBfR0VUQlVGCQkweDA1CisjZGVmaW5lIERSTV9JODEwX1NXQVAJCTB4MDYKKyNkZWZpbmUgRFJNX0k4MTBfQ09QWQkJMHgwNworI2RlZmluZSBEUk1fSTgxMF9ET0NPUFkJCTB4MDgKKyNkZWZpbmUgRFJNX0k4MTBfT1YwSU5GTwkweDA5CisjZGVmaW5lIERSTV9JODEwX0ZTVEFUVVMJMHgwYQorI2RlZmluZSBEUk1fSTgxMF9PVjBGTElQCTB4MGIKKyNkZWZpbmUgRFJNX0k4MTBfTUMJCTB4MGMKKyNkZWZpbmUgRFJNX0k4MTBfUlNUQVRVUwkweDBkCisjZGVmaW5lIERSTV9JODEwX0ZMSVAJCTB4MGUKKworI2RlZmluZSBEUk1fSU9DVExfSTgxMF9JTklUCQlEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k4MTBfSU5JVCwgZHJtX2k4MTBfaW5pdF90KQorI2RlZmluZSBEUk1fSU9DVExfSTgxMF9WRVJURVgJCURSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTgxMF9WRVJURVgsIGRybV9pODEwX3ZlcnRleF90KQorI2RlZmluZSBEUk1fSU9DVExfSTgxMF9DTEVBUgkJRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JODEwX0NMRUFSLCBkcm1faTgxMF9jbGVhcl90KQorI2RlZmluZSBEUk1fSU9DVExfSTgxMF9GTFVTSAkJRFJNX0lPKCAgRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JODEwX0ZMVVNIKQorI2RlZmluZSBEUk1fSU9DVExfSTgxMF9HRVRBR0UJCURSTV9JTyggIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTgxMF9HRVRBR0UpCisjZGVmaW5lIERSTV9JT0NUTF9JODEwX0dFVEJVRgkJRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JODEwX0dFVEJVRiwgZHJtX2k4MTBfZG1hX3QpCisjZGVmaW5lIERSTV9JT0NUTF9JODEwX1NXQVAJCURSTV9JTyggIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTgxMF9TV0FQKQorI2RlZmluZSBEUk1fSU9DVExfSTgxMF9DT1BZCQlEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k4MTBfQ09QWSwgZHJtX2k4MTBfY29weV90KQorI2RlZmluZSBEUk1fSU9DVExfSTgxMF9ET0NPUFkJCURSTV9JTyggIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTgxMF9ET0NPUFkpCisjZGVmaW5lIERSTV9JT0NUTF9JODEwX09WMElORk8JCURSTV9JT1IoIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTgxMF9PVjBJTkZPLCBkcm1faTgxMF9vdmVybGF5X3QpCisjZGVmaW5lIERSTV9JT0NUTF9JODEwX0ZTVEFUVVMJCURSTV9JTyAoIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTgxMF9GU1RBVFVTKQorI2RlZmluZSBEUk1fSU9DVExfSTgxMF9PVjBGTElQCQlEUk1fSU8gKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k4MTBfT1YwRkxJUCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k4MTBfTUMJCURSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTgxMF9NQywgZHJtX2k4MTBfbWNfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k4MTBfUlNUQVRVUwkJRFJNX0lPICggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JODEwX1JTVEFUVVMpCisjZGVmaW5lIERSTV9JT0NUTF9JODEwX0ZMSVAgICAgICAgICAgICAgRFJNX0lPICggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JODEwX0ZMSVApCisKK3R5cGVkZWYgc3RydWN0IF9kcm1faTgxMF9jbGVhciB7CisJaW50IGNsZWFyX2NvbG9yOworCWludCBjbGVhcl9kZXB0aDsKKwlpbnQgZmxhZ3M7Cit9IGRybV9pODEwX2NsZWFyX3Q7CisKKy8qIFRoZXNlIG1heSBiZSBwbGFjZWhvbGRlcnMgaWYgd2UgaGF2ZSBtb3JlIGNsaXByZWN0cyB0aGFuCisgKiBJODEwX05SX1NBUkVBX0NMSVBSRUNUUy4gIEluIHRoYXQgY2FzZSwgdGhlIGNsaWVudCBzZXRzIGRpc2NhcmQgdG8KKyAqIGZhbHNlLCBpbmRpY2F0aW5nIHRoYXQgdGhlIGJ1ZmZlciB3aWxsIGJlIGRpc3BhdGNoZWQgYWdhaW4gd2l0aCBhCisgKiBuZXcgc2V0IG9mIGNsaXByZWN0cy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2RybV9pODEwX3ZlcnRleCB7CisJaW50IGlkeDsJCS8qIGJ1ZmZlciBpbmRleCAqLworCWludCB1c2VkOwkJLyogbnIgYnl0ZXMgaW4gdXNlICovCisJaW50IGRpc2NhcmQ7CQkvKiBjbGllbnQgaXMgZmluaXNoZWQgd2l0aCB0aGUgYnVmZmVyPyAqLworfSBkcm1faTgxMF92ZXJ0ZXhfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2RybV9pODEwX2NvcHlfdCB7CisJaW50IGlkeDsJCS8qIGJ1ZmZlciBpbmRleCAqLworCWludCB1c2VkOwkJLyogbnIgYnl0ZXMgaW4gdXNlICovCisJdm9pZCAqYWRkcmVzczsJCS8qIEFkZHJlc3MgdG8gY29weSBmcm9tICovCit9IGRybV9pODEwX2NvcHlfdDsKKworI2RlZmluZSBQUl9UUklBTkdMRVMgICAgICAgICAoMHgwPDwxOCkKKyNkZWZpbmUgUFJfVFJJU1RSSVBfMCAgICAgICAgKDB4MTw8MTgpCisjZGVmaW5lIFBSX1RSSVNUUklQXzEgICAgICAgICgweDI8PDE4KQorI2RlZmluZSBQUl9UUklGQU4gICAgICAgICAgICAoMHgzPDwxOCkKKyNkZWZpbmUgUFJfUE9MWUdPTiAgICAgICAgICAgKDB4NDw8MTgpCisjZGVmaW5lIFBSX0xJTkVTICAgICAgICAgICAgICgweDU8PDE4KQorI2RlZmluZSBQUl9MSU5FU1RSSVAgICAgICAgICAoMHg2PDwxOCkKKyNkZWZpbmUgUFJfUkVDVFMgICAgICAgICAgICAgKDB4Nzw8MTgpCisjZGVmaW5lIFBSX01BU0sgICAgICAgICAgICAgICgweDc8PDE4KQorCit0eXBlZGVmIHN0cnVjdCBkcm1faTgxMF9kbWEgeworCXZvaWQgKnZpcnR1YWw7CisJaW50IHJlcXVlc3RfaWR4OworCWludCByZXF1ZXN0X3NpemU7CisJaW50IGdyYW50ZWQ7Cit9IGRybV9pODEwX2RtYV90OworCit0eXBlZGVmIHN0cnVjdCBfZHJtX2k4MTBfb3ZlcmxheV90IHsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OwkvKiBBZGRyZXNzIG9mIHRoZSBPdmVybGF5IFJlZ3MgKi8KKwl1bnNpZ25lZCBpbnQgcGh5c2ljYWw7Cit9IGRybV9pODEwX292ZXJsYXlfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2RybV9pODEwX21jIHsKKwlpbnQgaWR4OwkJLyogYnVmZmVyIGluZGV4ICovCisJaW50IHVzZWQ7CQkvKiBuciBieXRlcyBpbiB1c2UgKi8KKwlpbnQgbnVtX2Jsb2NrczsJCS8qIG51bWJlciBvZiBHRlhCbG9ja3MgKi8KKwlpbnQgKmxlbmd0aDsJCS8qIExpc3Qgb2YgbGVuZ3RocyBmb3IgR0ZYQmxvY2tzIChGVVRVUkUpICovCisJdW5zaWduZWQgaW50IGxhc3RfcmVuZGVyOwkvKiBMYXN0IFJlbmRlciBSZXF1ZXN0ICovCit9IGRybV9pODEwX21jX3Q7CisKKyNlbmRpZgkJCQkvKiBfSTgxMF9EUk1fSF8gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9kcm0vaTgzMF9kcm0uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9kcm0vaTgzMF9kcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDA2MDVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2RybS9pODMwX2RybS5oCkBAIC0wLDAgKzEsMzQyIEBACisjaWZuZGVmIF9JODMwX0RSTV9IXworI2RlZmluZSBfSTgzMF9EUk1fSF8KKworLyogV0FSTklORzogVGhlc2UgZGVmaW5lcyBtdXN0IGJlIHRoZSBzYW1lIGFzIHdoYXQgdGhlIFhzZXJ2ZXIgdXNlcy4KKyAqIGlmIHlvdSBjaGFuZ2UgdGhlbSwgeW91IG11c3QgY2hhbmdlIHRoZSBkZWZpbmVzIGluIHRoZSBYc2VydmVyLgorICoKKyAqIEtXOiBBY3R1YWxseSwgeW91IGNhbid0IGV2ZXIgY2hhbmdlIHRoZW0gYmVjYXVzZSBkb2luZyBzbyB3b3VsZAorICogYnJlYWsgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisgKi8KKworI2lmbmRlZiBfSTgzMF9ERUZJTkVTXworI2RlZmluZSBfSTgzMF9ERUZJTkVTXworCisjZGVmaW5lIEk4MzBfRE1BX0JVRl9PUkRFUgkJMTIKKyNkZWZpbmUgSTgzMF9ETUFfQlVGX1NaCQkJKDE8PEk4MzBfRE1BX0JVRl9PUkRFUikKKyNkZWZpbmUgSTgzMF9ETUFfQlVGX05SCQkJMjU2CisjZGVmaW5lIEk4MzBfTlJfU0FSRUFfQ0xJUFJFQ1RTCQk4CisKKy8qIEVhY2ggcmVnaW9uIGlzIGEgbWluaW11bSBvZiA2NGssIGFuZCB0aGVyZSBhcmUgYXQgbW9zdCA2NCBvZiB0aGVtLgorICovCisjZGVmaW5lIEk4MzBfTlJfVEVYX1JFR0lPTlMgNjQKKyNkZWZpbmUgSTgzMF9MT0dfTUlOX1RFWF9SRUdJT05fU0laRSAxNgorCisvKiBLVzogVGhlc2UgYXJlbid0IGNvcnJlY3QgYnV0IHNvbWVvbmUgc2V0IHRoZW0gdG8gdHdvIGFuZCB0aGVuCisgKiByZWxlYXNlZCB0aGUgbW9kdWxlLiAgTm93IHdlIGNhbid0IGNoYW5nZSB0aGVtIGFzIGRvaW5nIHNvIHdvdWxkCisgKiBicmVhayBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKyAqLworI2RlZmluZSBJODMwX1RFWFRVUkVfQ09VTlQJMgorI2RlZmluZSBJODMwX1RFWEJMRU5EX0NPVU5UCUk4MzBfVEVYVFVSRV9DT1VOVAorCisjZGVmaW5lIEk4MzBfVEVYQkxFTkRfU0laRQkxMgkvKiAoNCBhcmdzICsgb3ApICogMiArIENPTE9SX0ZBQ1RPUiAqLworCisjZGVmaW5lIEk4MzBfVVBMT0FEX0NUWAkJCTB4MQorI2RlZmluZSBJODMwX1VQTE9BRF9CVUZGRVJTCQkweDIKKyNkZWZpbmUgSTgzMF9VUExPQURfQ0xJUFJFQ1RTCQkweDQKKyNkZWZpbmUgSTgzMF9VUExPQURfVEVYMF9JTUFHRQkJMHgxMDAJLyogaGFuZGxlZCBjbGllbnRzaWRlICovCisjZGVmaW5lIEk4MzBfVVBMT0FEX1RFWDBfQ1VCRQkJMHgyMDAJLyogaGFuZGxlZCBjbGllbnRzaWRlICovCisjZGVmaW5lIEk4MzBfVVBMT0FEX1RFWDFfSU1BR0UJCTB4NDAwCS8qIGhhbmRsZWQgY2xpZW50c2lkZSAqLworI2RlZmluZSBJODMwX1VQTE9BRF9URVgxX0NVQkUJCTB4ODAwCS8qIGhhbmRsZWQgY2xpZW50c2lkZSAqLworI2RlZmluZSBJODMwX1VQTE9BRF9URVgyX0lNQUdFCQkweDEwMDAJLyogaGFuZGxlZCBjbGllbnRzaWRlICovCisjZGVmaW5lIEk4MzBfVVBMT0FEX1RFWDJfQ1VCRQkJMHgyMDAwCS8qIGhhbmRsZWQgY2xpZW50c2lkZSAqLworI2RlZmluZSBJODMwX1VQTE9BRF9URVgzX0lNQUdFCQkweDQwMDAJLyogaGFuZGxlZCBjbGllbnRzaWRlICovCisjZGVmaW5lIEk4MzBfVVBMT0FEX1RFWDNfQ1VCRQkJMHg4MDAwCS8qIGhhbmRsZWQgY2xpZW50c2lkZSAqLworI2RlZmluZSBJODMwX1VQTE9BRF9URVhfTl9JTUFHRShuKQkoMHgxMDAgPDwgKG4gKiAyKSkKKyNkZWZpbmUgSTgzMF9VUExPQURfVEVYX05fQ1VCRShuKQkoMHgyMDAgPDwgKG4gKiAyKSkKKyNkZWZpbmUgSTgzMF9VUExPQURfVEVYSU1BR0VfTUFTSwkweGZmMDAKKyNkZWZpbmUgSTgzMF9VUExPQURfVEVYMAkJCTB4MTAwMDAKKyNkZWZpbmUgSTgzMF9VUExPQURfVEVYMQkJCTB4MjAwMDAKKyNkZWZpbmUgSTgzMF9VUExPQURfVEVYMgkJCTB4NDAwMDAKKyNkZWZpbmUgSTgzMF9VUExPQURfVEVYMwkJCTB4ODAwMDAKKyNkZWZpbmUgSTgzMF9VUExPQURfVEVYX04obikJCSgweDEwMDAwIDw8IChuKSkKKyNkZWZpbmUgSTgzMF9VUExPQURfVEVYX01BU0sJCTB4ZjAwMDAKKyNkZWZpbmUgSTgzMF9VUExPQURfVEVYQkxFTkQwCQkweDEwMDAwMAorI2RlZmluZSBJODMwX1VQTE9BRF9URVhCTEVORDEJCTB4MjAwMDAwCisjZGVmaW5lIEk4MzBfVVBMT0FEX1RFWEJMRU5EMgkJMHg0MDAwMDAKKyNkZWZpbmUgSTgzMF9VUExPQURfVEVYQkxFTkQzCQkweDgwMDAwMAorI2RlZmluZSBJODMwX1VQTE9BRF9URVhCTEVORF9OKG4pCSgweDEwMDAwMCA8PCAobikpCisjZGVmaW5lIEk4MzBfVVBMT0FEX1RFWEJMRU5EX01BU0sJMHhmMDAwMDAKKyNkZWZpbmUgSTgzMF9VUExPQURfVEVYX1BBTEVUVEVfTihuKSAgICAoMHgxMDAwMDAwIDw8IChuKSkKKyNkZWZpbmUgSTgzMF9VUExPQURfVEVYX1BBTEVUVEVfU0hBUkVECTB4NDAwMDAwMAorI2RlZmluZSBJODMwX1VQTE9BRF9TVElQUExFCQkweDgwMDAwMDAKKworLyogSW5kaWNlcyBpbnRvIGJ1Zi5TZXR1cCB3aGVyZSB2YXJpb3VzIGJpdHMgb2Ygc3RhdGUgYXJlIG1pcnJvcmVkIHBlcgorICogY29udGV4dCBhbmQgcGVyIGJ1ZmZlci4gIFRoZXNlIGNhbiBiZSBmaXJlZCBhdCB0aGUgY2FyZCBhcyBhIHVuaXQsCisgKiBvciBpbiBhIHBpZWNld2lzZSBmYXNoaW9uIGFzIHJlcXVpcmVkLgorICovCisKKy8qIERlc3RidWZmZXIgc3RhdGUKKyAqICAgIC0gYmFja2J1ZmZlciBsaW5lYXIgb2Zmc2V0IGFuZCBwaXRjaCAtLSBpbnZhcmllbnQgaW4gdGhlIGN1cnJlbnQgZHJpCisgKiAgICAtIHpidWZmZXIgbGluZWFyIG9mZnNldCBhbmQgcGl0Y2ggLS0gYWxzbyBpbnZhcmllbnQKKyAqICAgIC0gZHJhd2luZyBvcmlnaW4gaW4gYmFjayBhbmQgZGVwdGggYnVmZmVycy4KKyAqCisgKiBLZWVwIHRoZSBkZXB0aC9iYWNrIGJ1ZmZlciBzdGF0ZSBoZXJlIHRvIGFjY29tbW9kYXRlIHByaXZhdGUgYnVmZmVycworICogaW4gdGhlIGZ1dHVyZS4KKyAqLworCisjZGVmaW5lIEk4MzBfREVTVFJFR19DQlVGQUREUiAwCisjZGVmaW5lIEk4MzBfREVTVFJFR19EQlVGQUREUiAxCisjZGVmaW5lIEk4MzBfREVTVFJFR19EVjAgMgorI2RlZmluZSBJODMwX0RFU1RSRUdfRFYxIDMKKyNkZWZpbmUgSTgzMF9ERVNUUkVHX1NFTkFCTEUgNAorI2RlZmluZSBJODMwX0RFU1RSRUdfU1IwIDUKKyNkZWZpbmUgSTgzMF9ERVNUUkVHX1NSMSA2CisjZGVmaW5lIEk4MzBfREVTVFJFR19TUjIgNworI2RlZmluZSBJODMwX0RFU1RSRUdfRFIwIDgKKyNkZWZpbmUgSTgzMF9ERVNUUkVHX0RSMSA5CisjZGVmaW5lIEk4MzBfREVTVFJFR19EUjIgMTAKKyNkZWZpbmUgSTgzMF9ERVNUUkVHX0RSMyAxMQorI2RlZmluZSBJODMwX0RFU1RSRUdfRFI0IDEyCisjZGVmaW5lIEk4MzBfREVTVF9TRVRVUF9TSVpFIDEzCisKKy8qIENvbnRleHQgc3RhdGUKKyAqLworI2RlZmluZSBJODMwX0NUWFJFR19TVEFURTEJCTAKKyNkZWZpbmUgSTgzMF9DVFhSRUdfU1RBVEUyCQkxCisjZGVmaW5lIEk4MzBfQ1RYUkVHX1NUQVRFMwkJMgorI2RlZmluZSBJODMwX0NUWFJFR19TVEFURTQJCTMKKyNkZWZpbmUgSTgzMF9DVFhSRUdfU1RBVEU1CQk0CisjZGVmaW5lIEk4MzBfQ1RYUkVHX0lBTFBIQUIJCTUKKyNkZWZpbmUgSTgzMF9DVFhSRUdfU1RFTkNJTFRTVAkJNgorI2RlZmluZSBJODMwX0NUWFJFR19FTkFCTEVTXzEJCTcKKyNkZWZpbmUgSTgzMF9DVFhSRUdfRU5BQkxFU18yCQk4CisjZGVmaW5lIEk4MzBfQ1RYUkVHX0FBCQkJOQorI2RlZmluZSBJODMwX0NUWFJFR19GT0dDT0xPUgkJMTAKKyNkZWZpbmUgSTgzMF9DVFhSRUdfQkxFTkRDT0xSMAkJMTEKKyNkZWZpbmUgSTgzMF9DVFhSRUdfQkxFTkRDT0xSCQkxMgkvKiBEd29yZCAxIG9mIDIgZHdvcmQgY29tbWFuZCAqLworI2RlZmluZSBJODMwX0NUWFJFR19WRgkJCTEzCisjZGVmaW5lIEk4MzBfQ1RYUkVHX1ZGMgkJCTE0CisjZGVmaW5lIEk4MzBfQ1RYUkVHX01DU0IwCQkxNQorI2RlZmluZSBJODMwX0NUWFJFR19NQ1NCMQkJMTYKKyNkZWZpbmUgSTgzMF9DVFhfU0VUVVBfU0laRQkJMTcKKworLyogMS4zOiBTdGlwcGxlIHN0YXRlCisgKi8KKyNkZWZpbmUgSTgzMF9TVFBSRUdfU1QwIDAKKyNkZWZpbmUgSTgzMF9TVFBSRUdfU1QxIDEKKyNkZWZpbmUgSTgzMF9TVFBfU0VUVVBfU0laRSAyCisKKy8qIFRleHR1cmUgc3RhdGUgKHBlciB0ZXggdW5pdCkKKyAqLworCisjZGVmaW5lIEk4MzBfVEVYUkVHX01JMAkwCS8qIEdGWF9PUF9NQVBfSU5GTyAoNiBkd29yZHMpICovCisjZGVmaW5lIEk4MzBfVEVYUkVHX01JMQkxCisjZGVmaW5lIEk4MzBfVEVYUkVHX01JMgkyCisjZGVmaW5lIEk4MzBfVEVYUkVHX01JMwkzCisjZGVmaW5lIEk4MzBfVEVYUkVHX01JNAk0CisjZGVmaW5lIEk4MzBfVEVYUkVHX01JNQk1CisjZGVmaW5lIEk4MzBfVEVYUkVHX01GCTYJLyogR0ZYX09QX01BUF9GSUxURVIgKi8KKyNkZWZpbmUgSTgzMF9URVhSRUdfTUxDCTcJLyogR0ZYX09QX01BUF9MT0RfQ1RMICovCisjZGVmaW5lIEk4MzBfVEVYUkVHX01MTAk4CS8qIEdGWF9PUF9NQVBfTE9EX0xJTUlUUyAqLworI2RlZmluZSBJODMwX1RFWFJFR19NQ1MJOQkvKiBHRlhfT1BfTUFQX0NPT1JEX1NFVFMgKi8KKyNkZWZpbmUgSTgzMF9URVhfU0VUVVBfU0laRSAxMAorCisjZGVmaW5lIEk4MzBfVEVYUkVHX1RNMExJICAgICAgMAkvKiBsb2FkIGltbWVkaWF0ZSAyIHRleHR1cmUgbWFwIG4gKi8KKyNkZWZpbmUgSTgzMF9URVhSRUdfVE0wUzAgICAgICAxCisjZGVmaW5lIEk4MzBfVEVYUkVHX1RNMFMxICAgICAgMgorI2RlZmluZSBJODMwX1RFWFJFR19UTTBTMiAgICAgIDMKKyNkZWZpbmUgSTgzMF9URVhSRUdfVE0wUzMgICAgICA0CisjZGVmaW5lIEk4MzBfVEVYUkVHX1RNMFM0ICAgICAgNQorI2RlZmluZSBJODMwX1RFWFJFR19OT1AwICAgICAgIDYJLyogbm9vcCAqLworI2RlZmluZSBJODMwX1RFWFJFR19OT1AxICAgICAgIDcJLyogbm9vcCAqLworI2RlZmluZSBJODMwX1RFWFJFR19OT1AyICAgICAgIDgJLyogbm9vcCAqLworI2RlZmluZSBfX0k4MzBfVEVYUkVHX01DUyAgICAgIDkJLyogR0ZYX09QX01BUF9DT09SRF9TRVRTIC0tIHNoYXJlZCAqLworI2RlZmluZSBfX0k4MzBfVEVYX1NFVFVQX1NJWkUgICAxMAorCisjZGVmaW5lIEk4MzBfRlJPTlQgICAweDEKKyNkZWZpbmUgSTgzMF9CQUNLICAgIDB4MgorI2RlZmluZSBJODMwX0RFUFRIICAgMHg0CisKKyNlbmRpZgkJCQkvKiBfSTgzMF9ERUZJTkVTXyAqLworCit0eXBlZGVmIHN0cnVjdCBfZHJtX2k4MzBfaW5pdCB7CisJZW51bSB7CisJCUk4MzBfSU5JVF9ETUEgPSAweDAxLAorCQlJODMwX0NMRUFOVVBfRE1BID0gMHgwMgorCX0gZnVuYzsKKwl1bnNpZ25lZCBpbnQgbW1pb19vZmZzZXQ7CisJdW5zaWduZWQgaW50IGJ1ZmZlcnNfb2Zmc2V0OworCWludCBzYXJlYV9wcml2X29mZnNldDsKKwl1bnNpZ25lZCBpbnQgcmluZ19zdGFydDsKKwl1bnNpZ25lZCBpbnQgcmluZ19lbmQ7CisJdW5zaWduZWQgaW50IHJpbmdfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgZnJvbnRfb2Zmc2V0OworCXVuc2lnbmVkIGludCBiYWNrX29mZnNldDsKKwl1bnNpZ25lZCBpbnQgZGVwdGhfb2Zmc2V0OworCXVuc2lnbmVkIGludCB3OworCXVuc2lnbmVkIGludCBoOworCXVuc2lnbmVkIGludCBwaXRjaDsKKwl1bnNpZ25lZCBpbnQgcGl0Y2hfYml0czsKKwl1bnNpZ25lZCBpbnQgYmFja19waXRjaDsKKwl1bnNpZ25lZCBpbnQgZGVwdGhfcGl0Y2g7CisJdW5zaWduZWQgaW50IGNwcDsKK30gZHJtX2k4MzBfaW5pdF90OworCisvKiBXYXJuaW5nOiBJZiB5b3UgY2hhbmdlIHRoZSBTQVJFQSBzdHJ1Y3R1cmUgeW91IG11c3QgY2hhbmdlIHRoZSBYc2VydmVyCisgKiBzdHJ1Y3R1cmUgYXMgd2VsbCAqLworCit0eXBlZGVmIHN0cnVjdCBfZHJtX2k4MzBfdGV4X3JlZ2lvbiB7CisJdW5zaWduZWQgY2hhciBuZXh0LCBwcmV2OwkvKiBpbmRpY2VzIHRvIGZvcm0gYSBjaXJjdWxhciBMUlUgICovCisJdW5zaWduZWQgY2hhciBpbl91c2U7CS8qIG93bmVkIGJ5IGEgY2xpZW50LCBvciBmcmVlPyAqLworCWludCBhZ2U7CQkvKiB0cmFja2VkIGJ5IGNsaWVudHMgdG8gdXBkYXRlIGxvY2FsIExSVSdzICovCit9IGRybV9pODMwX3RleF9yZWdpb25fdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2RybV9pODMwX3NhcmVhIHsKKwl1bnNpZ25lZCBpbnQgQ29udGV4dFN0YXRlW0k4MzBfQ1RYX1NFVFVQX1NJWkVdOworCXVuc2lnbmVkIGludCBCdWZmZXJTdGF0ZVtJODMwX0RFU1RfU0VUVVBfU0laRV07CisJdW5zaWduZWQgaW50IFRleFN0YXRlW0k4MzBfVEVYVFVSRV9DT1VOVF1bSTgzMF9URVhfU0VUVVBfU0laRV07CisJdW5zaWduZWQgaW50IFRleEJsZW5kU3RhdGVbSTgzMF9URVhCTEVORF9DT1VOVF1bSTgzMF9URVhCTEVORF9TSVpFXTsKKwl1bnNpZ25lZCBpbnQgVGV4QmxlbmRTdGF0ZVdvcmRzVXNlZFtJODMwX1RFWEJMRU5EX0NPVU5UXTsKKwl1bnNpZ25lZCBpbnQgUGFsZXR0ZVsyXVsyNTZdOworCXVuc2lnbmVkIGludCBkaXJ0eTsKKworCXVuc2lnbmVkIGludCBuYm94OworCXN0cnVjdCBkcm1fY2xpcF9yZWN0IGJveGVzW0k4MzBfTlJfU0FSRUFfQ0xJUFJFQ1RTXTsKKworCS8qIE1haW50YWluIGFuIExSVSBvZiBjb250aWd1b3VzIHJlZ2lvbnMgb2YgdGV4dHVyZSBzcGFjZS4gIElmCisJICogeW91IHRoaW5rIHlvdSBvd24gYSByZWdpb24gb2YgdGV4dHVyZSBtZW1vcnksIGFuZCBpdCBoYXMgYW4KKwkgKiBhZ2UgZGlmZmVyZW50IHRvIHRoZSBvbmUgeW91IHNldCwgdGhlbiB5b3UgYXJlIG1pc3Rha2VuIGFuZAorCSAqIGl0IGhhcyBiZWVuIHN0b2xlbiBieSBhbm90aGVyIGNsaWVudC4gIElmIGdsb2JhbCB0ZXhBZ2UKKwkgKiBoYXNuJ3QgY2hhbmdlZCwgdGhlcmUgaXMgbm8gbmVlZCB0byB3YWxrIHRoZSBsaXN0LgorCSAqCisJICogVGhlc2UgcmVnaW9ucyBjYW4gYmUgdXNlZCBhcyBhIHByb3h5IGZvciB0aGUgZmluZS1ncmFpbmVkCisJICogdGV4dHVyZSBpbmZvcm1hdGlvbiBvZiBvdGhlciBjbGllbnRzIC0gYnkgbWFpbnRhaW5pbmcgdGhlbQorCSAqIGluIHRoZSBzYW1lIGxydSB3aGljaCBpcyB1c2VkIHRvIGFnZSB0aGVpciBvd24gdGV4dHVyZXMsCisJICogY2xpZW50cyBoYXZlIGFuIGFwcHJveGltYXRlIGxydSBmb3IgdGhlIHdob2xlIG9mIGdsb2JhbAorCSAqIHRleHR1cmUgc3BhY2UsIGFuZCBjYW4gbWFrZSBpbmZvcm1lZCBkZWNpc2lvbnMgYXMgdG8gd2hpY2gKKwkgKiBhcmVhcyB0byBraWNrIG91dC4gIFRoZXJlIGlzIG5vIG5lZWQgdG8gY2hvb3NlIHdoZXRoZXIgdG8KKwkgKiBraWNrIG91dCB5b3VyIG93biB0ZXh0dXJlIG9yIHNvbWVvbmUgZWxzZSdzIC0gc2ltcGx5IGVqZWN0CisJICogdGhlbSBhbGwgaW4gTFJVIG9yZGVyLgorCSAqLworCisJZHJtX2k4MzBfdGV4X3JlZ2lvbl90IHRleExpc3RbSTgzMF9OUl9URVhfUkVHSU9OUyArIDFdOworCS8qIExhc3QgZWx0IGlzIHNlbnRpbmFsICovCisJaW50IHRleEFnZTsJCS8qIGxhc3QgdGltZSB0ZXh0dXJlIHdhcyB1cGxvYWRlZCAqLworCWludCBsYXN0X2VucXVldWU7CS8qIGxhc3QgdGltZSBhIGJ1ZmZlciB3YXMgZW5xdWV1ZWQgKi8KKwlpbnQgbGFzdF9kaXNwYXRjaDsJLyogYWdlIG9mIHRoZSBtb3N0IHJlY2VudGx5IGRpc3BhdGNoZWQgYnVmZmVyICovCisJaW50IGxhc3RfcXVpZXNjZW50OwkvKiAgKi8KKwlpbnQgY3R4T3duZXI7CQkvKiBsYXN0IGNvbnRleHQgdG8gdXBsb2FkIHN0YXRlICovCisKKwlpbnQgdmVydGV4X3ByaW07CisKKwlpbnQgcGZfZW5hYmxlZDsJCS8qIGlzIHBhZ2VmbGlwcGluZyBhbGxvd2VkPyAqLworCWludCBwZl9hY3RpdmU7CisJaW50IHBmX2N1cnJlbnRfcGFnZTsJLyogd2hpY2ggYnVmZmVyIGlzIGJlaW5nIGRpc3BsYXllZD8gKi8KKworCWludCBwZXJmX2JveGVzOwkJLyogcGVyZm9ybWFuY2UgYm94ZXMgdG8gYmUgZGlzcGxheWVkICovCisKKwkvKiBIZXJlJ3MgdGhlIHN0YXRlIGZvciB0ZXh1bml0cyAyLDM6CisJICovCisJdW5zaWduZWQgaW50IFRleFN0YXRlMltJODMwX1RFWF9TRVRVUF9TSVpFXTsKKwl1bnNpZ25lZCBpbnQgVGV4QmxlbmRTdGF0ZTJbSTgzMF9URVhCTEVORF9TSVpFXTsKKwl1bnNpZ25lZCBpbnQgVGV4QmxlbmRTdGF0ZVdvcmRzVXNlZDI7CisKKwl1bnNpZ25lZCBpbnQgVGV4U3RhdGUzW0k4MzBfVEVYX1NFVFVQX1NJWkVdOworCXVuc2lnbmVkIGludCBUZXhCbGVuZFN0YXRlM1tJODMwX1RFWEJMRU5EX1NJWkVdOworCXVuc2lnbmVkIGludCBUZXhCbGVuZFN0YXRlV29yZHNVc2VkMzsKKworCXVuc2lnbmVkIGludCBTdGlwcGxlU3RhdGVbSTgzMF9TVFBfU0VUVVBfU0laRV07Cit9IGRybV9pODMwX3NhcmVhX3Q7CisKKy8qIEZsYWdzIGZvciBwZXJmX2JveGVzCisgKi8KKyNkZWZpbmUgSTgzMF9CT1hfUklOR19FTVBUWSAgICAweDEJLyogcG9wdWxhdGVkIGJ5IGtlcm5lbCAqLworI2RlZmluZSBJODMwX0JPWF9GTElQICAgICAgICAgIDB4MgkvKiBwb3B1bGF0ZWQgYnkga2VybmVsICovCisjZGVmaW5lIEk4MzBfQk9YX1dBSVQgICAgICAgICAgMHg0CS8qIHBvcHVsYXRlZCBieSBrZXJuZWwgJiBjbGllbnQgKi8KKyNkZWZpbmUgSTgzMF9CT1hfVEVYVFVSRV9MT0FEICAweDgJLyogcG9wdWxhdGVkIGJ5IGtlcm5lbCAqLworI2RlZmluZSBJODMwX0JPWF9MT1NUX0NPTlRFWFQgIDB4MTAJLyogcG9wdWxhdGVkIGJ5IGNsaWVudCAqLworCisvKiBJODMwIHNwZWNpZmljIGlvY3RscworICogVGhlIGRldmljZSBzcGVjaWZpYyBpb2N0bCByYW5nZSBpcyAweDQwIHRvIDB4NzkuCisgKi8KKyNkZWZpbmUgRFJNX0k4MzBfSU5JVAkweDAwCisjZGVmaW5lIERSTV9JODMwX1ZFUlRFWAkweDAxCisjZGVmaW5lIERSTV9JODMwX0NMRUFSCTB4MDIKKyNkZWZpbmUgRFJNX0k4MzBfRkxVU0gJMHgwMworI2RlZmluZSBEUk1fSTgzMF9HRVRBR0UJMHgwNAorI2RlZmluZSBEUk1fSTgzMF9HRVRCVUYJMHgwNQorI2RlZmluZSBEUk1fSTgzMF9TV0FQCTB4MDYKKyNkZWZpbmUgRFJNX0k4MzBfQ09QWQkweDA3CisjZGVmaW5lIERSTV9JODMwX0RPQ09QWQkweDA4CisjZGVmaW5lIERSTV9JODMwX0ZMSVAJMHgwOQorI2RlZmluZSBEUk1fSTgzMF9JUlFfRU1JVAkweDBhCisjZGVmaW5lIERSTV9JODMwX0lSUV9XQUlUCTB4MGIKKyNkZWZpbmUgRFJNX0k4MzBfR0VUUEFSQU0JMHgwYworI2RlZmluZSBEUk1fSTgzMF9TRVRQQVJBTQkweDBkCisKKyNkZWZpbmUgRFJNX0lPQ1RMX0k4MzBfSU5JVAkJRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JODMwX0lOSVQsIGRybV9pODMwX2luaXRfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k4MzBfVkVSVEVYCQlEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k4MzBfVkVSVEVYLCBkcm1faTgzMF92ZXJ0ZXhfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k4MzBfQ0xFQVIJCURSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTgzMF9DTEVBUiwgZHJtX2k4MzBfY2xlYXJfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k4MzBfRkxVU0gJCURSTV9JTyAoIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTgzMF9GTFVTSCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k4MzBfR0VUQUdFCQlEUk1fSU8gKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k4MzBfR0VUQUdFKQorI2RlZmluZSBEUk1fSU9DVExfSTgzMF9HRVRCVUYJCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTgzMF9HRVRCVUYsIGRybV9pODMwX2RtYV90KQorI2RlZmluZSBEUk1fSU9DVExfSTgzMF9TV0FQCQlEUk1fSU8gKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k4MzBfU1dBUCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k4MzBfQ09QWQkJRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JODMwX0NPUFksIGRybV9pODMwX2NvcHlfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k4MzBfRE9DT1BZCQlEUk1fSU8gKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k4MzBfRE9DT1BZKQorI2RlZmluZSBEUk1fSU9DVExfSTgzMF9GTElQCQlEUk1fSU8gKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k4MzBfRkxJUCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k4MzBfSVJRX0VNSVQgICAgICAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k4MzBfSVJRX0VNSVQsIGRybV9pODMwX2lycV9lbWl0X3QpCisjZGVmaW5lIERSTV9JT0NUTF9JODMwX0lSUV9XQUlUICAgICAgICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JODMwX0lSUV9XQUlULCBkcm1faTgzMF9pcnFfd2FpdF90KQorI2RlZmluZSBEUk1fSU9DVExfSTgzMF9HRVRQQVJBTSAgICAgICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTgzMF9HRVRQQVJBTSwgZHJtX2k4MzBfZ2V0cGFyYW1fdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k4MzBfU0VUUEFSQU0gICAgICAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k4MzBfU0VUUEFSQU0sIGRybV9pODMwX3NldHBhcmFtX3QpCisKK3R5cGVkZWYgc3RydWN0IF9kcm1faTgzMF9jbGVhciB7CisJaW50IGNsZWFyX2NvbG9yOworCWludCBjbGVhcl9kZXB0aDsKKwlpbnQgZmxhZ3M7CisJdW5zaWduZWQgaW50IGNsZWFyX2NvbG9ybWFzazsKKwl1bnNpZ25lZCBpbnQgY2xlYXJfZGVwdGhtYXNrOworfSBkcm1faTgzMF9jbGVhcl90OworCisvKiBUaGVzZSBtYXkgYmUgcGxhY2Vob2xkZXJzIGlmIHdlIGhhdmUgbW9yZSBjbGlwcmVjdHMgdGhhbgorICogSTgzMF9OUl9TQVJFQV9DTElQUkVDVFMuICBJbiB0aGF0IGNhc2UsIHRoZSBjbGllbnQgc2V0cyBkaXNjYXJkIHRvCisgKiBmYWxzZSwgaW5kaWNhdGluZyB0aGF0IHRoZSBidWZmZXIgd2lsbCBiZSBkaXNwYXRjaGVkIGFnYWluIHdpdGggYQorICogbmV3IHNldCBvZiBjbGlwcmVjdHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IF9kcm1faTgzMF92ZXJ0ZXggeworCWludCBpZHg7CQkvKiBidWZmZXIgaW5kZXggKi8KKwlpbnQgdXNlZDsJCS8qIG5yIGJ5dGVzIGluIHVzZSAqLworCWludCBkaXNjYXJkOwkJLyogY2xpZW50IGlzIGZpbmlzaGVkIHdpdGggdGhlIGJ1ZmZlcj8gKi8KK30gZHJtX2k4MzBfdmVydGV4X3Q7CisKK3R5cGVkZWYgc3RydWN0IF9kcm1faTgzMF9jb3B5X3QgeworCWludCBpZHg7CQkvKiBidWZmZXIgaW5kZXggKi8KKwlpbnQgdXNlZDsJCS8qIG5yIGJ5dGVzIGluIHVzZSAqLworCXZvaWQgKmFkZHJlc3M7CS8qIEFkZHJlc3MgdG8gY29weSBmcm9tICovCit9IGRybV9pODMwX2NvcHlfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZHJtX2k4MzBfZG1hIHsKKwl2b2lkICp2aXJ0dWFsOworCWludCByZXF1ZXN0X2lkeDsKKwlpbnQgcmVxdWVzdF9zaXplOworCWludCBncmFudGVkOworfSBkcm1faTgzMF9kbWFfdDsKKworLyogMS4zOiBVc2Vyc3BhY2UgY2FuIHJlcXVlc3QgJiB3YWl0IG9uIGlycSdzOgorICovCit0eXBlZGVmIHN0cnVjdCBkcm1faTgzMF9pcnFfZW1pdCB7CisJaW50ICppcnFfc2VxOworfSBkcm1faTgzMF9pcnFfZW1pdF90OworCit0eXBlZGVmIHN0cnVjdCBkcm1faTgzMF9pcnFfd2FpdCB7CisJaW50IGlycV9zZXE7Cit9IGRybV9pODMwX2lycV93YWl0X3Q7CisKKy8qIDEuMzogTmV3IGlvY3RsIHRvIHF1ZXJ5IGtlcm5lbCBwYXJhbXM6CisgKi8KKyNkZWZpbmUgSTgzMF9QQVJBTV9JUlFfQUNUSVZFICAgICAgICAgICAgMQorCit0eXBlZGVmIHN0cnVjdCBkcm1faTgzMF9nZXRwYXJhbSB7CisJaW50IHBhcmFtOworCWludCAqdmFsdWU7Cit9IGRybV9pODMwX2dldHBhcmFtX3Q7CisKKy8qIDEuMzogTmV3IGlvY3RsIHRvIHNldCBrZXJuZWwgcGFyYW1zOgorICovCisjZGVmaW5lIEk4MzBfU0VUUEFSQU1fVVNFX01JX0JBVENIQlVGRkVSX1NUQVJUICAgICAgICAgICAgMQorCit0eXBlZGVmIHN0cnVjdCBkcm1faTgzMF9zZXRwYXJhbSB7CisJaW50IHBhcmFtOworCWludCB2YWx1ZTsKK30gZHJtX2k4MzBfc2V0cGFyYW1fdDsKKworI2VuZGlmCQkJCS8qIF9JODMwX0RSTV9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2RybS9pOTE1X2RybS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2RybS9pOTE1X2RybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNmY2ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmgKQEAgLTAsMCArMSw4MjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMyBUdW5nc3RlbiBHcmFwaGljcywgSW5jLiwgQ2VkYXIgUGFyaywgVGV4YXMuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRVTkdTVEVOIEdSQVBISUNTIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaWZuZGVmIF9JOTE1X0RSTV9IXworI2RlZmluZSBfSTkxNV9EUk1fSF8KKworI2luY2x1ZGUgImRybS5oIgorCisvKiBQbGVhc2Ugbm90ZSB0aGF0IG1vZGlmaWNhdGlvbnMgdG8gYWxsIHN0cnVjdHMgZGVmaW5lZCBoZXJlIGFyZQorICogc3ViamVjdCB0byBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBjb25zdHJhaW50cy4KKyAqLworCisKKy8qIEVhY2ggcmVnaW9uIGlzIGEgbWluaW11bSBvZiAxNmssIGFuZCB0aGVyZSBhcmUgYXQgbW9zdCAyNTUgb2YgdGhlbS4KKyAqLworI2RlZmluZSBJOTE1X05SX1RFWF9SRUdJT05TIDI1NQkvKiB0YWJsZSBzaXplIDJrIC0gbWF4aW11bSBkdWUgdG8gdXNlCisJCQkJICogb2YgY2hhcnMgZm9yIG5leHQvcHJldiBpbmRpY2VzICovCisjZGVmaW5lIEk5MTVfTE9HX01JTl9URVhfUkVHSU9OX1NJWkUgMTQKKwordHlwZWRlZiBzdHJ1Y3QgX2RybV9pOTE1X2luaXQgeworCWVudW0geworCQlJOTE1X0lOSVRfRE1BID0gMHgwMSwKKwkJSTkxNV9DTEVBTlVQX0RNQSA9IDB4MDIsCisJCUk5MTVfUkVTVU1FX0RNQSA9IDB4MDMKKwl9IGZ1bmM7CisJdW5zaWduZWQgaW50IG1taW9fb2Zmc2V0OworCWludCBzYXJlYV9wcml2X29mZnNldDsKKwl1bnNpZ25lZCBpbnQgcmluZ19zdGFydDsKKwl1bnNpZ25lZCBpbnQgcmluZ19lbmQ7CisJdW5zaWduZWQgaW50IHJpbmdfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgZnJvbnRfb2Zmc2V0OworCXVuc2lnbmVkIGludCBiYWNrX29mZnNldDsKKwl1bnNpZ25lZCBpbnQgZGVwdGhfb2Zmc2V0OworCXVuc2lnbmVkIGludCB3OworCXVuc2lnbmVkIGludCBoOworCXVuc2lnbmVkIGludCBwaXRjaDsKKwl1bnNpZ25lZCBpbnQgcGl0Y2hfYml0czsKKwl1bnNpZ25lZCBpbnQgYmFja19waXRjaDsKKwl1bnNpZ25lZCBpbnQgZGVwdGhfcGl0Y2g7CisJdW5zaWduZWQgaW50IGNwcDsKKwl1bnNpZ25lZCBpbnQgY2hpcHNldDsKK30gZHJtX2k5MTVfaW5pdF90OworCit0eXBlZGVmIHN0cnVjdCBfZHJtX2k5MTVfc2FyZWEgeworCXN0cnVjdCBkcm1fdGV4X3JlZ2lvbiB0ZXhMaXN0W0k5MTVfTlJfVEVYX1JFR0lPTlMgKyAxXTsKKwlpbnQgbGFzdF91cGxvYWQ7CS8qIGxhc3QgdGltZSB0ZXh0dXJlIHdhcyB1cGxvYWRlZCAqLworCWludCBsYXN0X2VucXVldWU7CS8qIGxhc3QgdGltZSBhIGJ1ZmZlciB3YXMgZW5xdWV1ZWQgKi8KKwlpbnQgbGFzdF9kaXNwYXRjaDsJLyogYWdlIG9mIHRoZSBtb3N0IHJlY2VudGx5IGRpc3BhdGNoZWQgYnVmZmVyICovCisJaW50IGN0eE93bmVyOwkJLyogbGFzdCBjb250ZXh0IHRvIHVwbG9hZCBzdGF0ZSAqLworCWludCB0ZXhBZ2U7CisJaW50IHBmX2VuYWJsZWQ7CQkvKiBpcyBwYWdlZmxpcHBpbmcgYWxsb3dlZD8gKi8KKwlpbnQgcGZfYWN0aXZlOworCWludCBwZl9jdXJyZW50X3BhZ2U7CS8qIHdoaWNoIGJ1ZmZlciBpcyBiZWluZyBkaXNwbGF5ZWQ/ICovCisJaW50IHBlcmZfYm94ZXM7CQkvKiBwZXJmb3JtYW5jZSBib3hlcyB0byBiZSBkaXNwbGF5ZWQgKi8KKwlpbnQgd2lkdGgsIGhlaWdodDsgICAgICAvKiBzY3JlZW4gc2l6ZSBpbiBwaXhlbHMgKi8KKworCWRybV9oYW5kbGVfdCBmcm9udF9oYW5kbGU7CisJaW50IGZyb250X29mZnNldDsKKwlpbnQgZnJvbnRfc2l6ZTsKKworCWRybV9oYW5kbGVfdCBiYWNrX2hhbmRsZTsKKwlpbnQgYmFja19vZmZzZXQ7CisJaW50IGJhY2tfc2l6ZTsKKworCWRybV9oYW5kbGVfdCBkZXB0aF9oYW5kbGU7CisJaW50IGRlcHRoX29mZnNldDsKKwlpbnQgZGVwdGhfc2l6ZTsKKworCWRybV9oYW5kbGVfdCB0ZXhfaGFuZGxlOworCWludCB0ZXhfb2Zmc2V0OworCWludCB0ZXhfc2l6ZTsKKwlpbnQgbG9nX3RleF9ncmFudWxhcml0eTsKKwlpbnQgcGl0Y2g7CisJaW50IHJvdGF0aW9uOyAgICAgICAgICAgLyogMCwgOTAsIDE4MCBvciAyNzAgKi8KKwlpbnQgcm90YXRlZF9vZmZzZXQ7CisJaW50IHJvdGF0ZWRfc2l6ZTsKKwlpbnQgcm90YXRlZF9waXRjaDsKKwlpbnQgdmlydHVhbFgsIHZpcnR1YWxZOworCisJdW5zaWduZWQgaW50IGZyb250X3RpbGVkOworCXVuc2lnbmVkIGludCBiYWNrX3RpbGVkOworCXVuc2lnbmVkIGludCBkZXB0aF90aWxlZDsKKwl1bnNpZ25lZCBpbnQgcm90YXRlZF90aWxlZDsKKwl1bnNpZ25lZCBpbnQgcm90YXRlZDJfdGlsZWQ7CisKKwlpbnQgcGlwZUFfeDsKKwlpbnQgcGlwZUFfeTsKKwlpbnQgcGlwZUFfdzsKKwlpbnQgcGlwZUFfaDsKKwlpbnQgcGlwZUJfeDsKKwlpbnQgcGlwZUJfeTsKKwlpbnQgcGlwZUJfdzsKKwlpbnQgcGlwZUJfaDsKKworCS8qIGZpbGwgb3V0IHNvbWUgc3BhY2UgZm9yIG9sZCB1c2Vyc3BhY2UgdHJpcGxlIGJ1ZmZlciAqLworCWRybV9oYW5kbGVfdCB1bnVzZWRfaGFuZGxlOworCV9fdTMyIHVudXNlZDEsIHVudXNlZDIsIHVudXNlZDM7CisKKwkvKiBidWZmZXIgb2JqZWN0IGhhbmRsZXMgZm9yIHN0YXRpYyBidWZmZXJzLiBNYXkgY2hhbmdlCisJICogb3ZlciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNsaWVudC4KKwkgKi8KKwlfX3UzMiBmcm9udF9ib19oYW5kbGU7CisJX191MzIgYmFja19ib19oYW5kbGU7CisJX191MzIgdW51c2VkX2JvX2hhbmRsZTsKKwlfX3UzMiBkZXB0aF9ib19oYW5kbGU7CisKK30gZHJtX2k5MTVfc2FyZWFfdDsKKworLyogZHVlIHRvIHVzZXJzcGFjZSBidWlsZGluZyBhZ2FpbnN0IHRoZXNlIGhlYWRlcnMgd2UgbmVlZCBzb21lIGNvbXBhdCBoZXJlICovCisjZGVmaW5lIHBsYW5lQV94IHBpcGVBX3gKKyNkZWZpbmUgcGxhbmVBX3kgcGlwZUFfeQorI2RlZmluZSBwbGFuZUFfdyBwaXBlQV93CisjZGVmaW5lIHBsYW5lQV9oIHBpcGVBX2gKKyNkZWZpbmUgcGxhbmVCX3ggcGlwZUJfeAorI2RlZmluZSBwbGFuZUJfeSBwaXBlQl95CisjZGVmaW5lIHBsYW5lQl93IHBpcGVCX3cKKyNkZWZpbmUgcGxhbmVCX2ggcGlwZUJfaAorCisvKiBGbGFncyBmb3IgcGVyZl9ib3hlcworICovCisjZGVmaW5lIEk5MTVfQk9YX1JJTkdfRU1QVFkgICAgMHgxCisjZGVmaW5lIEk5MTVfQk9YX0ZMSVAgICAgICAgICAgMHgyCisjZGVmaW5lIEk5MTVfQk9YX1dBSVQgICAgICAgICAgMHg0CisjZGVmaW5lIEk5MTVfQk9YX1RFWFRVUkVfTE9BRCAgMHg4CisjZGVmaW5lIEk5MTVfQk9YX0xPU1RfQ09OVEVYVCAgMHgxMAorCisvKiBJOTE1IHNwZWNpZmljIGlvY3RscworICogVGhlIGRldmljZSBzcGVjaWZpYyBpb2N0bCByYW5nZSBpcyAweDQwIHRvIDB4NzkuCisgKi8KKyNkZWZpbmUgRFJNX0k5MTVfSU5JVAkJMHgwMAorI2RlZmluZSBEUk1fSTkxNV9GTFVTSAkJMHgwMQorI2RlZmluZSBEUk1fSTkxNV9GTElQCQkweDAyCisjZGVmaW5lIERSTV9JOTE1X0JBVENIQlVGRkVSCTB4MDMKKyNkZWZpbmUgRFJNX0k5MTVfSVJRX0VNSVQJMHgwNAorI2RlZmluZSBEUk1fSTkxNV9JUlFfV0FJVAkweDA1CisjZGVmaW5lIERSTV9JOTE1X0dFVFBBUkFNCTB4MDYKKyNkZWZpbmUgRFJNX0k5MTVfU0VUUEFSQU0JMHgwNworI2RlZmluZSBEUk1fSTkxNV9BTExPQwkJMHgwOAorI2RlZmluZSBEUk1fSTkxNV9GUkVFCQkweDA5CisjZGVmaW5lIERSTV9JOTE1X0lOSVRfSEVBUAkweDBhCisjZGVmaW5lIERSTV9JOTE1X0NNREJVRkZFUgkweDBiCisjZGVmaW5lIERSTV9JOTE1X0RFU1RST1lfSEVBUAkweDBjCisjZGVmaW5lIERSTV9JOTE1X1NFVF9WQkxBTktfUElQRQkweDBkCisjZGVmaW5lIERSTV9JOTE1X0dFVF9WQkxBTktfUElQRQkweDBlCisjZGVmaW5lIERSTV9JOTE1X1ZCTEFOS19TV0FQCTB4MGYKKyNkZWZpbmUgRFJNX0k5MTVfSFdTX0FERFIJMHgxMQorI2RlZmluZSBEUk1fSTkxNV9HRU1fSU5JVAkweDEzCisjZGVmaW5lIERSTV9JOTE1X0dFTV9FWEVDQlVGRkVSCTB4MTQKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX1BJTgkweDE1CisjZGVmaW5lIERSTV9JOTE1X0dFTV9VTlBJTgkweDE2CisjZGVmaW5lIERSTV9JOTE1X0dFTV9CVVNZCTB4MTcKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX1RIUk9UVExFCTB4MTgKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX0VOVEVSVlQJMHgxOQorI2RlZmluZSBEUk1fSTkxNV9HRU1fTEVBVkVWVAkweDFhCisjZGVmaW5lIERSTV9JOTE1X0dFTV9DUkVBVEUJMHgxYgorI2RlZmluZSBEUk1fSTkxNV9HRU1fUFJFQUQJMHgxYworI2RlZmluZSBEUk1fSTkxNV9HRU1fUFdSSVRFCTB4MWQKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX01NQVAJMHgxZQorI2RlZmluZSBEUk1fSTkxNV9HRU1fU0VUX0RPTUFJTgkweDFmCisjZGVmaW5lIERSTV9JOTE1X0dFTV9TV19GSU5JU0gJMHgyMAorI2RlZmluZSBEUk1fSTkxNV9HRU1fU0VUX1RJTElORwkweDIxCisjZGVmaW5lIERSTV9JOTE1X0dFTV9HRVRfVElMSU5HCTB4MjIKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX0dFVF9BUEVSVFVSRSAweDIzCisjZGVmaW5lIERSTV9JOTE1X0dFTV9NTUFQX0dUVAkweDI0CisjZGVmaW5lIERSTV9JOTE1X0dFVF9QSVBFX0ZST01fQ1JUQ19JRAkweDI1CisjZGVmaW5lIERSTV9JOTE1X0dFTV9NQURWSVNFCTB4MjYKKyNkZWZpbmUgRFJNX0k5MTVfT1ZFUkxBWV9QVVRfSU1BR0UJMHgyNworI2RlZmluZSBEUk1fSTkxNV9PVkVSTEFZX0FUVFJTCTB4MjgKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX0VYRUNCVUZGRVIyCTB4MjkKKworI2RlZmluZSBEUk1fSU9DVExfSTkxNV9JTklUCQlEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfSU5JVCwgZHJtX2k5MTVfaW5pdF90KQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9GTFVTSAkJRFJNX0lPICggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0ZMVVNIKQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9GTElQCQlEUk1fSU8gKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfRkxJUCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfQkFUQ0hCVUZGRVIJRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0JBVENIQlVGRkVSLCBkcm1faTkxNV9iYXRjaGJ1ZmZlcl90KQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9JUlFfRU1JVCAgICAgICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9JUlFfRU1JVCwgZHJtX2k5MTVfaXJxX2VtaXRfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfSVJRX1dBSVQgICAgICAgICBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfSVJRX1dBSVQsIGRybV9pOTE1X2lycV93YWl0X3QpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFVFBBUkFNICAgICAgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFVFBBUkFNLCBkcm1faTkxNV9nZXRwYXJhbV90KQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9TRVRQQVJBTSAgICAgICAgIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9TRVRQQVJBTSwgZHJtX2k5MTVfc2V0cGFyYW1fdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfQUxMT0MgICAgICAgICAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfQUxMT0MsIGRybV9pOTE1X21lbV9hbGxvY190KQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9GUkVFICAgICAgICAgICAgIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9GUkVFLCBkcm1faTkxNV9tZW1fZnJlZV90KQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9JTklUX0hFQVAgICAgICAgIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9JTklUX0hFQVAsIGRybV9pOTE1X21lbV9pbml0X2hlYXBfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfQ01EQlVGRkVSCURSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9DTURCVUZGRVIsIGRybV9pOTE1X2NtZGJ1ZmZlcl90KQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9ERVNUUk9ZX0hFQVAJRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0RFU1RST1lfSEVBUCwgZHJtX2k5MTVfbWVtX2Rlc3Ryb3lfaGVhcF90KQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9TRVRfVkJMQU5LX1BJUEUJRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X1NFVF9WQkxBTktfUElQRSwgZHJtX2k5MTVfdmJsYW5rX3BpcGVfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VUX1ZCTEFOS19QSVBFCURSTV9JT1IoIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRVRfVkJMQU5LX1BJUEUsIGRybV9pOTE1X3ZibGFua19waXBlX3QpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X1ZCTEFOS19TV0FQCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9WQkxBTktfU1dBUCwgZHJtX2k5MTVfdmJsYW5rX3N3YXBfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfSFdTX0FERFIJCURSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0hXU19BRERSLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2luaXQpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9JTklUCQlEUk1fSU9XKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fSU5JVCwgc3RydWN0IGRybV9pOTE1X2dlbV9pbml0KQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fRVhFQ0JVRkZFUglEUk1fSU9XKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fRVhFQ0JVRkZFUiwgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyKQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fRVhFQ0JVRkZFUjIJRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0VYRUNCVUZGRVIyLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyKQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fUElOCQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1BJTiwgc3RydWN0IGRybV9pOTE1X2dlbV9waW4pCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9VTlBJTglEUk1fSU9XKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fVU5QSU4sIHN0cnVjdCBkcm1faTkxNV9nZW1fdW5waW4pCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9CVVNZCQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0JVU1ksIHN0cnVjdCBkcm1faTkxNV9nZW1fYnVzeSkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX1RIUk9UVExFCURSTV9JTyAoIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fVEhST1RUTEUpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9FTlRFUlZUCURSTV9JTyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0VOVEVSVlQpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9MRUFWRVZUCURSTV9JTyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0xFQVZFVlQpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9DUkVBVEUJRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9DUkVBVEUsIHN0cnVjdCBkcm1faTkxNV9nZW1fY3JlYXRlKQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fUFJFQUQJRFJNX0lPVyAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9QUkVBRCwgc3RydWN0IGRybV9pOTE1X2dlbV9wcmVhZCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX1BXUklURQlEUk1fSU9XIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1BXUklURSwgc3RydWN0IGRybV9pOTE1X2dlbV9wd3JpdGUpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9NTUFQCQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX01NQVAsIHN0cnVjdCBkcm1faTkxNV9nZW1fbW1hcCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX01NQVBfR1RUCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fTU1BUF9HVFQsIHN0cnVjdCBkcm1faTkxNV9nZW1fbW1hcF9ndHQpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9TRVRfRE9NQUlOCURSTV9JT1cgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fU0VUX0RPTUFJTiwgc3RydWN0IGRybV9pOTE1X2dlbV9zZXRfZG9tYWluKQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fU1dfRklOSVNICURSTV9JT1cgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fU1dfRklOSVNILCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3N3X2ZpbmlzaCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX1NFVF9USUxJTkcJRFJNX0lPV1IgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fU0VUX1RJTElORywgc3RydWN0IGRybV9pOTE1X2dlbV9zZXRfdGlsaW5nKQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fR0VUX1RJTElORwlEUk1fSU9XUiAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9HRVRfVElMSU5HLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2dldF90aWxpbmcpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9HRVRfQVBFUlRVUkUJRFJNX0lPUiAgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fR0VUX0FQRVJUVVJFLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2dldF9hcGVydHVyZSkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VUX1BJUEVfRlJPTV9DUlRDX0lEIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRVRfUElQRV9GUk9NX0NSVENfSUQsIHN0cnVjdCBkcm1faTkxNV9nZXRfcGlwZV9mcm9tX2NydGNfaWQpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9NQURWSVNFCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fTUFEVklTRSwgc3RydWN0IGRybV9pOTE1X2dlbV9tYWR2aXNlKQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9PVkVSTEFZX1BVVF9JTUFHRQlEUk1fSU9XKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSU9DVExfSTkxNV9PVkVSTEFZX0FUVFJTLCBzdHJ1Y3QgZHJtX2ludGVsX292ZXJsYXlfcHV0X2ltYWdlKQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9PVkVSTEFZX0FUVFJTCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9PVkVSTEFZX0FUVFJTLCBzdHJ1Y3QgZHJtX2ludGVsX292ZXJsYXlfYXR0cnMpCisKKy8qIEFsbG93IGRyaXZlcnMgdG8gc3VibWl0IGJhdGNoYnVmZmVycyBkaXJlY3RseSB0byBoYXJkd2FyZSwgcmVseWluZworICogb24gdGhlIHNlY3VyaXR5IG1lY2hhbmlzbXMgcHJvdmlkZWQgYnkgaGFyZHdhcmUuCisgKi8KK3R5cGVkZWYgc3RydWN0IGRybV9pOTE1X2JhdGNoYnVmZmVyIHsKKwlpbnQgc3RhcnQ7CQkvKiBhZ3Agb2Zmc2V0ICovCisJaW50IHVzZWQ7CQkvKiBuciBieXRlcyBpbiB1c2UgKi8KKwlpbnQgRFIxOwkJLyogaHcgZmxhZ3MgZm9yIEdGWF9PUF9EUkFXUkVDVF9JTkZPICovCisJaW50IERSNDsJCS8qIHdpbmRvdyBvcmlnaW4gZm9yIEdGWF9PUF9EUkFXUkVDVF9JTkZPICovCisJaW50IG51bV9jbGlwcmVjdHM7CS8qIG11bGl0cGFzcyB3aXRoIG11bHRpcGxlIGNsaXByZWN0cz8gKi8KKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHJlY3RzOwkvKiBwb2ludGVyIHRvIHVzZXJzcGFjZSBjbGlwcmVjdHMgKi8KK30gZHJtX2k5MTVfYmF0Y2hidWZmZXJfdDsKKworLyogQXMgYWJvdmUsIGJ1dCBwYXNzIGEgcG9pbnRlciB0byB1c2Vyc3BhY2UgYnVmZmVyIHdoaWNoIGNhbiBiZQorICogdmFsaWRhdGVkIGJ5IHRoZSBrZXJuZWwgcHJpb3IgdG8gc2VuZGluZyB0byBoYXJkd2FyZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2RybV9pOTE1X2NtZGJ1ZmZlciB7CisJY2hhciAqYnVmOwkvKiBwb2ludGVyIHRvIHVzZXJzcGFjZSBjb21tYW5kIGJ1ZmZlciAqLworCWludCBzejsJCQkvKiBuciBieXRlcyBpbiBidWYgKi8KKwlpbnQgRFIxOwkJLyogaHcgZmxhZ3MgZm9yIEdGWF9PUF9EUkFXUkVDVF9JTkZPICovCisJaW50IERSNDsJCS8qIHdpbmRvdyBvcmlnaW4gZm9yIEdGWF9PUF9EUkFXUkVDVF9JTkZPICovCisJaW50IG51bV9jbGlwcmVjdHM7CS8qIG11bGl0cGFzcyB3aXRoIG11bHRpcGxlIGNsaXByZWN0cz8gKi8KKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHJlY3RzOwkvKiBwb2ludGVyIHRvIHVzZXJzcGFjZSBjbGlwcmVjdHMgKi8KK30gZHJtX2k5MTVfY21kYnVmZmVyX3Q7CisKKy8qIFVzZXJzcGFjZSBjYW4gcmVxdWVzdCAmIHdhaXQgb24gaXJxJ3M6CisgKi8KK3R5cGVkZWYgc3RydWN0IGRybV9pOTE1X2lycV9lbWl0IHsKKwlpbnQgKmlycV9zZXE7Cit9IGRybV9pOTE1X2lycV9lbWl0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGRybV9pOTE1X2lycV93YWl0IHsKKwlpbnQgaXJxX3NlcTsKK30gZHJtX2k5MTVfaXJxX3dhaXRfdDsKKworLyogSW9jdGwgdG8gcXVlcnkga2VybmVsIHBhcmFtczoKKyAqLworI2RlZmluZSBJOTE1X1BBUkFNX0lSUV9BQ1RJVkUgICAgICAgICAgICAxCisjZGVmaW5lIEk5MTVfUEFSQU1fQUxMT1dfQkFUQ0hCVUZGRVIgICAgIDIKKyNkZWZpbmUgSTkxNV9QQVJBTV9MQVNUX0RJU1BBVENIICAgICAgICAgMworI2RlZmluZSBJOTE1X1BBUkFNX0NISVBTRVRfSUQgICAgICAgICAgICA0CisjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX0dFTSAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgSTkxNV9QQVJBTV9OVU1fRkVOQ0VTX0FWQUlMICAgICAgNgorI2RlZmluZSBJOTE1X1BBUkFNX0hBU19PVkVSTEFZICAgICAgICAgICA3CisjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX1BBR0VGTElQUElORwkgOAorI2RlZmluZSBJOTE1X1BBUkFNX0hBU19FWEVDQlVGMiAgICAgICAgICA5CisjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX0JTRAkJIDEwCisjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX0JMVAkJIDExCisjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX1JFTEFYRURfRkVOQ0lORwkgMTIKKyNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfQ09IRVJFTlRfUklOR1MJIDEzCisKK3R5cGVkZWYgc3RydWN0IGRybV9pOTE1X2dldHBhcmFtIHsKKwlpbnQgcGFyYW07CisJaW50ICp2YWx1ZTsKK30gZHJtX2k5MTVfZ2V0cGFyYW1fdDsKKworLyogSW9jdGwgdG8gc2V0IGtlcm5lbCBwYXJhbXM6CisgKi8KKyNkZWZpbmUgSTkxNV9TRVRQQVJBTV9VU0VfTUlfQkFUQ0hCVUZGRVJfU1RBUlQgICAgICAgICAgICAxCisjZGVmaW5lIEk5MTVfU0VUUEFSQU1fVEVYX0xSVV9MT0dfR1JBTlVMQVJJVFkgICAgICAgICAgICAgMgorI2RlZmluZSBJOTE1X1NFVFBBUkFNX0FMTE9XX0JBVENIQlVGRkVSICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSTkxNV9TRVRQQVJBTV9OVU1fVVNFRF9GRU5DRVMgICAgICAgICAgICAgICAgICAgICA0CisKK3R5cGVkZWYgc3RydWN0IGRybV9pOTE1X3NldHBhcmFtIHsKKwlpbnQgcGFyYW07CisJaW50IHZhbHVlOworfSBkcm1faTkxNV9zZXRwYXJhbV90OworCisvKiBBIG1lbW9yeSBtYW5hZ2VyIGZvciByZWdpb25zIG9mIHNoYXJlZCBtZW1vcnk6CisgKi8KKyNkZWZpbmUgSTkxNV9NRU1fUkVHSU9OX0FHUCAxCisKK3R5cGVkZWYgc3RydWN0IGRybV9pOTE1X21lbV9hbGxvYyB7CisJaW50IHJlZ2lvbjsKKwlpbnQgYWxpZ25tZW50OworCWludCBzaXplOworCWludCAqcmVnaW9uX29mZnNldDsJLyogb2Zmc2V0IGZyb20gc3RhcnQgb2YgZmIgb3IgYWdwICovCit9IGRybV9pOTE1X21lbV9hbGxvY190OworCit0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9tZW1fZnJlZSB7CisJaW50IHJlZ2lvbjsKKwlpbnQgcmVnaW9uX29mZnNldDsKK30gZHJtX2k5MTVfbWVtX2ZyZWVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfbWVtX2luaXRfaGVhcCB7CisJaW50IHJlZ2lvbjsKKwlpbnQgc2l6ZTsKKwlpbnQgc3RhcnQ7Cit9IGRybV9pOTE1X21lbV9pbml0X2hlYXBfdDsKKworLyogQWxsb3cgbWVtb3J5IG1hbmFnZXIgdG8gYmUgdG9ybiBkb3duIGFuZCByZS1pbml0aWFsaXplZCAoZWcgb24KKyAqIHJvdGF0ZSk6CisgKi8KK3R5cGVkZWYgc3RydWN0IGRybV9pOTE1X21lbV9kZXN0cm95X2hlYXAgeworCWludCByZWdpb247Cit9IGRybV9pOTE1X21lbV9kZXN0cm95X2hlYXBfdDsKKworLyogQWxsb3cgWCBzZXJ2ZXIgdG8gY29uZmlndXJlIHdoaWNoIHBpcGVzIHRvIG1vbml0b3IgZm9yIHZibGFuayBzaWduYWxzCisgKi8KKyNkZWZpbmUJRFJNX0k5MTVfVkJMQU5LX1BJUEVfQQkxCisjZGVmaW5lCURSTV9JOTE1X1ZCTEFOS19QSVBFX0IJMgorCit0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV92YmxhbmtfcGlwZSB7CisJaW50IHBpcGU7Cit9IGRybV9pOTE1X3ZibGFua19waXBlX3Q7CisKKy8qIFNjaGVkdWxlIGJ1ZmZlciBzd2FwIGF0IGdpdmVuIHZlcnRpY2FsIGJsYW5rOgorICovCit0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV92Ymxhbmtfc3dhcCB7CisJZHJtX2RyYXdhYmxlX3QgZHJhd2FibGU7CisJZW51bSBkcm1fdmJsYW5rX3NlcV90eXBlIHNlcXR5cGU7CisJdW5zaWduZWQgaW50IHNlcXVlbmNlOworfSBkcm1faTkxNV92Ymxhbmtfc3dhcF90OworCit0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9od3NfYWRkciB7CisJX191NjQgYWRkcjsKK30gZHJtX2k5MTVfaHdzX2FkZHJfdDsKKworc3RydWN0IGRybV9pOTE1X2dlbV9pbml0IHsKKwkvKioKKwkgKiBCZWdpbm5pbmcgb2Zmc2V0IGluIHRoZSBHVFQgdG8gYmUgbWFuYWdlZCBieSB0aGUgRFJNIG1lbW9yeQorCSAqIG1hbmFnZXIuCisJICovCisJX191NjQgZ3R0X3N0YXJ0OworCS8qKgorCSAqIEVuZGluZyBvZmZzZXQgaW4gdGhlIEdUVCB0byBiZSBtYW5hZ2VkIGJ5IHRoZSBEUk0gbWVtb3J5CisJICogbWFuYWdlci4KKwkgKi8KKwlfX3U2NCBndHRfZW5kOworfTsKKworc3RydWN0IGRybV9pOTE1X2dlbV9jcmVhdGUgeworCS8qKgorCSAqIFJlcXVlc3RlZCBzaXplIGZvciB0aGUgb2JqZWN0LgorCSAqCisJICogVGhlIChwYWdlLWFsaWduZWQpIGFsbG9jYXRlZCBzaXplIGZvciB0aGUgb2JqZWN0IHdpbGwgYmUgcmV0dXJuZWQuCisJICovCisJX191NjQgc2l6ZTsKKwkvKioKKwkgKiBSZXR1cm5lZCBoYW5kbGUgZm9yIHRoZSBvYmplY3QuCisJICoKKwkgKiBPYmplY3QgaGFuZGxlcyBhcmUgbm9uemVyby4KKwkgKi8KKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOworfTsKKworc3RydWN0IGRybV9pOTE1X2dlbV9wcmVhZCB7CisJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCBiZWluZyByZWFkLiAqLworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBwYWQ7CisJLyoqIE9mZnNldCBpbnRvIHRoZSBvYmplY3QgdG8gcmVhZCBmcm9tICovCisJX191NjQgb2Zmc2V0OworCS8qKiBMZW5ndGggb2YgZGF0YSB0byByZWFkICovCisJX191NjQgc2l6ZTsKKwkvKioKKwkgKiBQb2ludGVyIHRvIHdyaXRlIHRoZSBkYXRhIGludG8uCisJICoKKwkgKiBUaGlzIGlzIGEgZml4ZWQtc2l6ZSB0eXBlIGZvciAzMi82NCBjb21wYXRpYmlsaXR5LgorCSAqLworCV9fdTY0IGRhdGFfcHRyOworfTsKKworc3RydWN0IGRybV9pOTE1X2dlbV9wd3JpdGUgeworCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgYmVpbmcgd3JpdHRlbiB0by4gKi8KKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOworCS8qKiBPZmZzZXQgaW50byB0aGUgb2JqZWN0IHRvIHdyaXRlIHRvICovCisJX191NjQgb2Zmc2V0OworCS8qKiBMZW5ndGggb2YgZGF0YSB0byB3cml0ZSAqLworCV9fdTY0IHNpemU7CisJLyoqCisJICogUG9pbnRlciB0byByZWFkIHRoZSBkYXRhIGZyb20uCisJICoKKwkgKiBUaGlzIGlzIGEgZml4ZWQtc2l6ZSB0eXBlIGZvciAzMi82NCBjb21wYXRpYmlsaXR5LgorCSAqLworCV9fdTY0IGRhdGFfcHRyOworfTsKKworc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwIHsKKwkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIG1hcHBlZC4gKi8KKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOworCS8qKiBPZmZzZXQgaW4gdGhlIG9iamVjdCB0byBtYXAuICovCisJX191NjQgb2Zmc2V0OworCS8qKgorCSAqIExlbmd0aCBvZiBkYXRhIHRvIG1hcC4KKwkgKgorCSAqIFRoZSB2YWx1ZSB3aWxsIGJlIHBhZ2UtYWxpZ25lZC4KKwkgKi8KKwlfX3U2NCBzaXplOworCS8qKgorCSAqIFJldHVybmVkIHBvaW50ZXIgdGhlIGRhdGEgd2FzIG1hcHBlZCBhdC4KKwkgKgorCSAqIFRoaXMgaXMgYSBmaXhlZC1zaXplIHR5cGUgZm9yIDMyLzY0IGNvbXBhdGliaWxpdHkuCisJICovCisJX191NjQgYWRkcl9wdHI7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21tYXBfZ3R0IHsKKwkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIG1hcHBlZC4gKi8KKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOworCS8qKgorCSAqIEZha2Ugb2Zmc2V0IHRvIHVzZSBmb3Igc3Vic2VxdWVudCBtbWFwIGNhbGwKKwkgKgorCSAqIFRoaXMgaXMgYSBmaXhlZC1zaXplIHR5cGUgZm9yIDMyLzY0IGNvbXBhdGliaWxpdHkuCisJICovCisJX191NjQgb2Zmc2V0OworfTsKKworc3RydWN0IGRybV9pOTE1X2dlbV9zZXRfZG9tYWluIHsKKwkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0ICovCisJX191MzIgaGFuZGxlOworCisJLyoqIE5ldyByZWFkIGRvbWFpbnMgKi8KKwlfX3UzMiByZWFkX2RvbWFpbnM7CisKKwkvKiogTmV3IHdyaXRlIGRvbWFpbiAqLworCV9fdTMyIHdyaXRlX2RvbWFpbjsKK307CisKK3N0cnVjdCBkcm1faTkxNV9nZW1fc3dfZmluaXNoIHsKKwkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0ICovCisJX191MzIgaGFuZGxlOworfTsKKworc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHsKKwkvKioKKwkgKiBIYW5kbGUgb2YgdGhlIGJ1ZmZlciBiZWluZyBwb2ludGVkIHRvIGJ5IHRoaXMgcmVsb2NhdGlvbiBlbnRyeS4KKwkgKgorCSAqIEl0J3MgYXBwZWFsaW5nIHRvIG1ha2UgdGhpcyBiZSBhbiBpbmRleCBpbnRvIHRoZSBtbV92YWxpZGF0ZV9lbnRyeQorCSAqIGxpc3QgdG8gcmVmZXIgdG8gdGhlIGJ1ZmZlciwgYnV0IHRoaXMgYWxsb3dzIHRoZSBkcml2ZXIgdG8gY3JlYXRlCisJICogYSByZWxvY2F0aW9uIGxpc3QgZm9yIHN0YXRlIGJ1ZmZlcnMgYW5kIG5vdCByZS13cml0ZSBpdCBwZXIKKwkgKiBleGVjIHVzaW5nIHRoZSBidWZmZXIuCisJICovCisJX191MzIgdGFyZ2V0X2hhbmRsZTsKKworCS8qKgorCSAqIFZhbHVlIHRvIGJlIGFkZGVkIHRvIHRoZSBvZmZzZXQgb2YgdGhlIHRhcmdldCBidWZmZXIgdG8gbWFrZSB1cAorCSAqIHRoZSByZWxvY2F0aW9uIGVudHJ5LgorCSAqLworCV9fdTMyIGRlbHRhOworCisJLyoqIE9mZnNldCBpbiB0aGUgYnVmZmVyIHRoZSByZWxvY2F0aW9uIGVudHJ5IHdpbGwgYmUgd3JpdHRlbiBpbnRvICovCisJX191NjQgb2Zmc2V0OworCisJLyoqCisJICogT2Zmc2V0IHZhbHVlIG9mIHRoZSB0YXJnZXQgYnVmZmVyIHRoYXQgdGhlIHJlbG9jYXRpb24gZW50cnkgd2FzIGxhc3QKKwkgKiB3cml0dGVuIGFzLgorCSAqCisJICogSWYgdGhlIGJ1ZmZlciBoYXMgdGhlIHNhbWUgb2Zmc2V0IGFzIGxhc3QgdGltZSwgd2UgY2FuIHNraXAgc3luY2luZworCSAqIGFuZCB3cml0aW5nIHRoZSByZWxvY2F0aW9uLiAgVGhpcyB2YWx1ZSBpcyB3cml0dGVuIGJhY2sgb3V0IGJ5CisJICogdGhlIGV4ZWNidWZmZXIgaW9jdGwgd2hlbiB0aGUgcmVsb2NhdGlvbiBpcyB3cml0dGVuLgorCSAqLworCV9fdTY0IHByZXN1bWVkX29mZnNldDsKKworCS8qKgorCSAqIFRhcmdldCBtZW1vcnkgZG9tYWlucyByZWFkIGJ5IHRoaXMgb3BlcmF0aW9uLgorCSAqLworCV9fdTMyIHJlYWRfZG9tYWluczsKKworCS8qKgorCSAqIFRhcmdldCBtZW1vcnkgZG9tYWlucyB3cml0dGVuIGJ5IHRoaXMgb3BlcmF0aW9uLgorCSAqCisJICogTm90ZSB0aGF0IG9ubHkgb25lIGRvbWFpbiBtYXkgYmUgd3JpdHRlbiBieSB0aGUgd2hvbGUKKwkgKiBleGVjYnVmZmVyIG9wZXJhdGlvbiwgc28gdGhhdCB3aGVyZSB0aGVyZSBhcmUgY29uZmxpY3RzLAorCSAqIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGdldCAtRUlOVkFMIGJhY2suCisJICovCisJX191MzIgd3JpdGVfZG9tYWluOworfTsKKworLyoqIEB7CisgKiBJbnRlbCBtZW1vcnkgZG9tYWlucworICoKKyAqIE1vc3Qgb2YgdGhlc2UganVzdCBhbGlnbiB3aXRoIHRoZSB2YXJpb3VzIGNhY2hlcyBpbgorICogdGhlIHN5c3RlbSBhbmQgYXJlIHVzZWQgdG8gZmx1c2ggYW5kIGludmFsaWRhdGUgYXMKKyAqIG9iamVjdHMgZW5kIHVwIGNhY2hlZCBpbiBkaWZmZXJlbnQgZG9tYWlucy4KKyAqLworLyoqIENQVSBjYWNoZSAqLworI2RlZmluZSBJOTE1X0dFTV9ET01BSU5fQ1BVCQkweDAwMDAwMDAxCisvKiogUmVuZGVyIGNhY2hlLCB1c2VkIGJ5IDJEIGFuZCAzRCBkcmF3aW5nICovCisjZGVmaW5lIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIJCTB4MDAwMDAwMDIKKy8qKiBTYW1wbGVyIGNhY2hlLCB1c2VkIGJ5IHRleHR1cmUgZW5naW5lICovCisjZGVmaW5lIEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSCQkweDAwMDAwMDA0CisvKiogQ29tbWFuZCBxdWV1ZSwgdXNlZCB0byBsb2FkIGJhdGNoIGJ1ZmZlcnMgKi8KKyNkZWZpbmUgSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQJCTB4MDAwMDAwMDgKKy8qKiBJbnN0cnVjdGlvbiBjYWNoZSwgdXNlZCBieSBzaGFkZXIgcHJvZ3JhbXMgKi8KKyNkZWZpbmUgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OCTB4MDAwMDAwMTAKKy8qKiBWZXJ0ZXggYWRkcmVzcyBjYWNoZSAqLworI2RlZmluZSBJOTE1X0dFTV9ET01BSU5fVkVSVEVYCQkweDAwMDAwMDIwCisvKiogR1RUIGRvbWFpbiAtIGFwZXJ0dXJlIGFuZCBzY2Fub3V0ICovCisjZGVmaW5lIEk5MTVfR0VNX0RPTUFJTl9HVFQJCTB4MDAwMDAwNDAKKy8qKiBAfSAqLworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0IHsKKwkvKioKKwkgKiBVc2VyJ3MgaGFuZGxlIGZvciBhIGJ1ZmZlciB0byBiZSBib3VuZCBpbnRvIHRoZSBHVFQgZm9yIHRoaXMKKwkgKiBvcGVyYXRpb24uCisJICovCisJX191MzIgaGFuZGxlOworCisJLyoqIE51bWJlciBvZiByZWxvY2F0aW9ucyB0byBiZSBwZXJmb3JtZWQgb24gdGhpcyBidWZmZXIgKi8KKwlfX3UzMiByZWxvY2F0aW9uX2NvdW50OworCS8qKgorCSAqIFBvaW50ZXIgdG8gYXJyYXkgb2Ygc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IGNvbnRhaW5pbmcKKwkgKiB0aGUgcmVsb2NhdGlvbnMgdG8gYmUgcGVyZm9ybWVkIGluIHRoaXMgYnVmZmVyLgorCSAqLworCV9fdTY0IHJlbG9jc19wdHI7CisKKwkvKiogUmVxdWlyZWQgYWxpZ25tZW50IGluIGdyYXBoaWNzIGFwZXJ0dXJlICovCisJX191NjQgYWxpZ25tZW50OworCisJLyoqCisJICogUmV0dXJuZWQgdmFsdWUgb2YgdGhlIHVwZGF0ZWQgb2Zmc2V0IG9mIHRoZSBvYmplY3QsIGZvciBmdXR1cmUKKwkgKiBwcmVzdW1lZF9vZmZzZXQgd3JpdGVzLgorCSAqLworCV9fdTY0IG9mZnNldDsKK307CisKK3N0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlciB7CisJLyoqCisJICogTGlzdCBvZiBidWZmZXJzIHRvIGJlIHZhbGlkYXRlZCB3aXRoIHRoZWlyIHJlbG9jYXRpb25zIHRvIGJlCisJICogcGVyZm9ybWVuZCBvbiB0aGVtLgorCSAqCisJICogVGhpcyBpcyBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2Ygc3RydWN0IGRybV9pOTE1X2dlbV92YWxpZGF0ZV9lbnRyeS4KKwkgKgorCSAqIFRoZXNlIGJ1ZmZlcnMgbXVzdCBiZSBsaXN0ZWQgaW4gYW4gb3JkZXIgc3VjaCB0aGF0IGFsbCByZWxvY2F0aW9ucworCSAqIGEgYnVmZmVyIGlzIHBlcmZvcm1pbmcgcmVmZXIgdG8gYnVmZmVycyB0aGF0IGhhdmUgYWxyZWFkeSBhcHBlYXJlZAorCSAqIGluIHRoZSB2YWxpZGF0ZSBsaXN0LgorCSAqLworCV9fdTY0IGJ1ZmZlcnNfcHRyOworCV9fdTMyIGJ1ZmZlcl9jb3VudDsKKworCS8qKiBPZmZzZXQgaW4gdGhlIGJhdGNoYnVmZmVyIHRvIHN0YXJ0IGV4ZWN1dGlvbiBmcm9tLiAqLworCV9fdTMyIGJhdGNoX3N0YXJ0X29mZnNldDsKKwkvKiogQnl0ZXMgdXNlZCBpbiBiYXRjaGJ1ZmZlciBmcm9tIGJhdGNoX3N0YXJ0X29mZnNldCAqLworCV9fdTMyIGJhdGNoX2xlbjsKKwlfX3UzMiBEUjE7CisJX191MzIgRFI0OworCV9fdTMyIG51bV9jbGlwcmVjdHM7CisJLyoqIFRoaXMgaXMgYSBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHJlY3RzICovCisJX191NjQgY2xpcHJlY3RzX3B0cjsKK307CisKK3N0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIHsKKwkvKioKKwkgKiBVc2VyJ3MgaGFuZGxlIGZvciBhIGJ1ZmZlciB0byBiZSBib3VuZCBpbnRvIHRoZSBHVFQgZm9yIHRoaXMKKwkgKiBvcGVyYXRpb24uCisJICovCisJX191MzIgaGFuZGxlOworCisJLyoqIE51bWJlciBvZiByZWxvY2F0aW9ucyB0byBiZSBwZXJmb3JtZWQgb24gdGhpcyBidWZmZXIgKi8KKwlfX3UzMiByZWxvY2F0aW9uX2NvdW50OworCS8qKgorCSAqIFBvaW50ZXIgdG8gYXJyYXkgb2Ygc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IGNvbnRhaW5pbmcKKwkgKiB0aGUgcmVsb2NhdGlvbnMgdG8gYmUgcGVyZm9ybWVkIGluIHRoaXMgYnVmZmVyLgorCSAqLworCV9fdTY0IHJlbG9jc19wdHI7CisKKwkvKiogUmVxdWlyZWQgYWxpZ25tZW50IGluIGdyYXBoaWNzIGFwZXJ0dXJlICovCisJX191NjQgYWxpZ25tZW50OworCisJLyoqCisJICogUmV0dXJuZWQgdmFsdWUgb2YgdGhlIHVwZGF0ZWQgb2Zmc2V0IG9mIHRoZSBvYmplY3QsIGZvciBmdXR1cmUKKwkgKiBwcmVzdW1lZF9vZmZzZXQgd3JpdGVzLgorCSAqLworCV9fdTY0IG9mZnNldDsKKworI2RlZmluZSBFWEVDX09CSkVDVF9ORUVEU19GRU5DRSAoMTw8MCkKKwlfX3U2NCBmbGFnczsKKwlfX3U2NCByc3ZkMTsKKwlfX3U2NCByc3ZkMjsKK307CisKK3N0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgeworCS8qKgorCSAqIExpc3Qgb2YgZ2VtX2V4ZWNfb2JqZWN0MiBzdHJ1Y3RzCisJICovCisJX191NjQgYnVmZmVyc19wdHI7CisJX191MzIgYnVmZmVyX2NvdW50OworCisJLyoqIE9mZnNldCBpbiB0aGUgYmF0Y2hidWZmZXIgdG8gc3RhcnQgZXhlY3V0aW9uIGZyb20uICovCisJX191MzIgYmF0Y2hfc3RhcnRfb2Zmc2V0OworCS8qKiBCeXRlcyB1c2VkIGluIGJhdGNoYnVmZmVyIGZyb20gYmF0Y2hfc3RhcnRfb2Zmc2V0ICovCisJX191MzIgYmF0Y2hfbGVuOworCV9fdTMyIERSMTsKKwlfX3UzMiBEUjQ7CisJX191MzIgbnVtX2NsaXByZWN0czsKKwkvKiogVGhpcyBpcyBhIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcmVjdHMgKi8KKwlfX3U2NCBjbGlwcmVjdHNfcHRyOworI2RlZmluZSBJOTE1X0VYRUNfUklOR19NQVNLICAgICAgICAgICAgICAoNzw8MCkKKyNkZWZpbmUgSTkxNV9FWEVDX0RFRkFVTFQgICAgICAgICAgICAgICAgKDA8PDApCisjZGVmaW5lIEk5MTVfRVhFQ19SRU5ERVIgICAgICAgICAgICAgICAgICgxPDwwKQorI2RlZmluZSBJOTE1X0VYRUNfQlNEICAgICAgICAgICAgICAgICAgICAoMjw8MCkKKyNkZWZpbmUgSTkxNV9FWEVDX0JMVCAgICAgICAgICAgICAgICAgICAgKDM8PDApCisJX191NjQgZmxhZ3M7CisJX191NjQgcnN2ZDE7CisJX191NjQgcnN2ZDI7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3BpbiB7CisJLyoqIEhhbmRsZSBvZiB0aGUgYnVmZmVyIHRvIGJlIHBpbm5lZC4gKi8KKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOworCisJLyoqIGFsaWdubWVudCByZXF1aXJlZCB3aXRoaW4gdGhlIGFwZXJ0dXJlICovCisJX191NjQgYWxpZ25tZW50OworCisJLyoqIFJldHVybmVkIEdUVCBvZmZzZXQgb2YgdGhlIGJ1ZmZlci4gKi8KKwlfX3U2NCBvZmZzZXQ7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3VucGluIHsKKwkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gYmUgdW5waW5uZWQuICovCisJX191MzIgaGFuZGxlOworCV9fdTMyIHBhZDsKK307CisKK3N0cnVjdCBkcm1faTkxNV9nZW1fYnVzeSB7CisJLyoqIEhhbmRsZSBvZiB0aGUgYnVmZmVyIHRvIGNoZWNrIGZvciBidXN5ICovCisJX191MzIgaGFuZGxlOworCisJLyoqIFJldHVybiBidXN5IHN0YXR1cyAoMSBpZiBidXN5LCAwIGlmIGlkbGUpICovCisJX191MzIgYnVzeTsKK307CisKKyNkZWZpbmUgSTkxNV9USUxJTkdfTk9ORQkwCisjZGVmaW5lIEk5MTVfVElMSU5HX1gJCTEKKyNkZWZpbmUgSTkxNV9USUxJTkdfWQkJMgorCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV9OT05FCQkwCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV85CQkxCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV85XzEwCQkyCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV85XzExCQkzCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV85XzEwXzExCTQKKy8qIE5vdCBzZWVuIGJ5IHVzZXJsYW5kICovCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dOCTUKKy8qIFNlZW4gYnkgdXNlcmxhbmQuICovCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV85XzE3CQk2CisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV85XzEwXzE3CTcKKworc3RydWN0IGRybV9pOTE1X2dlbV9zZXRfdGlsaW5nIHsKKwkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gaGF2ZSBpdHMgdGlsaW5nIHN0YXRlIHVwZGF0ZWQgKi8KKwlfX3UzMiBoYW5kbGU7CisKKwkvKioKKwkgKiBUaWxpbmcgbW9kZSBmb3IgdGhlIG9iamVjdCAoSTkxNV9USUxJTkdfTk9ORSwgSTkxNV9USUxJTkdfWCwKKwkgKiBJOTE1X1RJTElOR19ZKS4KKwkgKgorCSAqIFRoaXMgdmFsdWUgaXMgdG8gYmUgc2V0IG9uIHJlcXVlc3QsIGFuZCB3aWxsIGJlIHVwZGF0ZWQgYnkgdGhlCisJICoga2VybmVsIG9uIHN1Y2Nlc3NmdWwgcmV0dXJuIHdpdGggdGhlIGFjdHVhbCBjaG9zZW4gdGlsaW5nIGxheW91dC4KKwkgKgorCSAqIFRoZSB0aWxpbmcgbW9kZSBtYXkgYmUgZGVtb3RlZCB0byBJOTE1X1RJTElOR19OT05FIHdoZW4gdGhlIHN5c3RlbQorCSAqIGhhcyBiaXQgNiBzd2l6emxpbmcgdGhhdCBjYW4ndCBiZSBtYW5hZ2VkIGNvcnJlY3RseSBieSBHRU0uCisJICoKKwkgKiBCdWZmZXIgY29udGVudHMgYmVjb21lIHVuZGVmaW5lZCB3aGVuIGNoYW5naW5nIHRpbGluZ19tb2RlLgorCSAqLworCV9fdTMyIHRpbGluZ19tb2RlOworCisJLyoqCisJICogU3RyaWRlIGluIGJ5dGVzIGZvciB0aGUgb2JqZWN0IHdoZW4gaW4gSTkxNV9USUxJTkdfWCBvcgorCSAqIEk5MTVfVElMSU5HX1kuCisJICovCisJX191MzIgc3RyaWRlOworCisJLyoqCisJICogUmV0dXJuZWQgYWRkcmVzcyBiaXQgNiBzd2l6emxpbmcgcmVxdWlyZWQgZm9yIENQVSBhY2Nlc3MgdGhyb3VnaAorCSAqIG1tYXAgbWFwcGluZy4KKwkgKi8KKwlfX3UzMiBzd2l6emxlX21vZGU7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2dldF90aWxpbmcgeworCS8qKiBIYW5kbGUgb2YgdGhlIGJ1ZmZlciB0byBnZXQgdGlsaW5nIHN0YXRlIGZvci4gKi8KKwlfX3UzMiBoYW5kbGU7CisKKwkvKioKKwkgKiBDdXJyZW50IHRpbGluZyBtb2RlIGZvciB0aGUgb2JqZWN0IChJOTE1X1RJTElOR19OT05FLCBJOTE1X1RJTElOR19YLAorCSAqIEk5MTVfVElMSU5HX1kpLgorCSAqLworCV9fdTMyIHRpbGluZ19tb2RlOworCisJLyoqCisJICogUmV0dXJuZWQgYWRkcmVzcyBiaXQgNiBzd2l6emxpbmcgcmVxdWlyZWQgZm9yIENQVSBhY2Nlc3MgdGhyb3VnaAorCSAqIG1tYXAgbWFwcGluZy4KKwkgKi8KKwlfX3UzMiBzd2l6emxlX21vZGU7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2dldF9hcGVydHVyZSB7CisJLyoqIFRvdGFsIHNpemUgb2YgdGhlIGFwZXJ0dXJlIHVzZWQgYnkgaTkxNV9nZW1fZXhlY2J1ZmZlciwgaW4gYnl0ZXMgKi8KKwlfX3U2NCBhcGVyX3NpemU7CisKKwkvKioKKwkgKiBBdmFpbGFibGUgc3BhY2UgaW4gdGhlIGFwZXJ0dXJlIHVzZWQgYnkgaTkxNV9nZW1fZXhlY2J1ZmZlciwgaW4KKwkgKiBieXRlcworCSAqLworCV9fdTY0IGFwZXJfYXZhaWxhYmxlX3NpemU7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2V0X3BpcGVfZnJvbV9jcnRjX2lkIHsKKwkvKiogSUQgb2YgQ1JUQyBiZWluZyByZXF1ZXN0ZWQgKiovCisJX191MzIgY3J0Y19pZDsKKworCS8qKiBwaXBlIG9mIHJlcXVlc3RlZCBDUlRDICoqLworCV9fdTMyIHBpcGU7Cit9OworCisjZGVmaW5lIEk5MTVfTUFEVl9XSUxMTkVFRCAwCisjZGVmaW5lIEk5MTVfTUFEVl9ET05UTkVFRCAxCisjZGVmaW5lIF9fSTkxNV9NQURWX1BVUkdFRCAyIC8qIGludGVybmFsIHN0YXRlICovCisKK3N0cnVjdCBkcm1faTkxNV9nZW1fbWFkdmlzZSB7CisJLyoqIEhhbmRsZSBvZiB0aGUgYnVmZmVyIHRvIGNoYW5nZSB0aGUgYmFja2luZyBzdG9yZSBhZHZpY2UgKi8KKwlfX3UzMiBoYW5kbGU7CisKKwkvKiBBZHZpY2U6IGVpdGhlciB0aGUgYnVmZmVyIHdpbGwgYmUgbmVlZGVkIGFnYWluIGluIHRoZSBuZWFyIGZ1dHVyZSwKKwkgKiAgICAgICAgIG9yIHdvbnQgYmUgYW5kIGNvdWxkIGJlIGRpc2NhcmRlZCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuCisJICovCisJX191MzIgbWFkdjsKKworCS8qKiBXaGV0aGVyIHRoZSBiYWNraW5nIHN0b3JlIHN0aWxsIGV4aXN0cy4gKi8KKwlfX3UzMiByZXRhaW5lZDsKK307CisKKy8qIGZsYWdzICovCisjZGVmaW5lIEk5MTVfT1ZFUkxBWV9UWVBFX01BU0sgCQkweGZmCisjZGVmaW5lIEk5MTVfT1ZFUkxBWV9ZVVZfUExBTkFSIAkweDAxCisjZGVmaW5lIEk5MTVfT1ZFUkxBWV9ZVVZfUEFDS0VEIAkweDAyCisjZGVmaW5lIEk5MTVfT1ZFUkxBWV9SR0IJCTB4MDMKKworI2RlZmluZSBJOTE1X09WRVJMQVlfREVQVEhfTUFTSwkJMHhmZjAwCisjZGVmaW5lIEk5MTVfT1ZFUkxBWV9SR0IyNAkJMHgxMDAwCisjZGVmaW5lIEk5MTVfT1ZFUkxBWV9SR0IxNgkJMHgyMDAwCisjZGVmaW5lIEk5MTVfT1ZFUkxBWV9SR0IxNQkJMHgzMDAwCisjZGVmaW5lIEk5MTVfT1ZFUkxBWV9ZVVY0MjIJCTB4MDEwMAorI2RlZmluZSBJOTE1X09WRVJMQVlfWVVWNDExCQkweDAyMDAKKyNkZWZpbmUgSTkxNV9PVkVSTEFZX1lVVjQyMAkJMHgwMzAwCisjZGVmaW5lIEk5MTVfT1ZFUkxBWV9ZVVY0MTAJCTB4MDQwMAorCisjZGVmaW5lIEk5MTVfT1ZFUkxBWV9TV0FQX01BU0sJCTB4ZmYwMDAwCisjZGVmaW5lIEk5MTVfT1ZFUkxBWV9OT19TV0FQCQkweDAwMDAwMAorI2RlZmluZSBJOTE1X09WRVJMQVlfVVZfU1dBUAkJMHgwMTAwMDAKKyNkZWZpbmUgSTkxNV9PVkVSTEFZX1lfU1dBUAkJMHgwMjAwMDAKKyNkZWZpbmUgSTkxNV9PVkVSTEFZX1lfQU5EX1VWX1NXQVAJMHgwMzAwMDAKKworI2RlZmluZSBJOTE1X09WRVJMQVlfRkxBR1NfTUFTSwkJMHhmZjAwMDAwMAorI2RlZmluZSBJOTE1X09WRVJMQVlfRU5BQkxFCQkweDAxMDAwMDAwCisKK3N0cnVjdCBkcm1faW50ZWxfb3ZlcmxheV9wdXRfaW1hZ2UgeworCS8qIHZhcmlvdXMgZmxhZ3MgYW5kIHNyYyBmb3JtYXQgZGVzY3JpcHRpb24gKi8KKwlfX3UzMiBmbGFnczsKKwkvKiBzb3VyY2UgcGljdHVyZSBkZXNjcmlwdGlvbiAqLworCV9fdTMyIGJvX2hhbmRsZTsKKwkvKiBzdHJpZGUgdmFsdWVzIGFuZCBvZmZzZXRzIGFyZSBpbiBieXRlcywgYnVmZmVyIHJlbGF0aXZlICovCisJX191MTYgc3RyaWRlX1k7IC8qIHN0cmlkZSBmb3IgcGFja2VkIGZvcm1hdHMgKi8KKwlfX3UxNiBzdHJpZGVfVVY7CisJX191MzIgb2Zmc2V0X1k7IC8qIG9mZnNldCBmb3IgcGFja2V0IGZvcm1hdHMgKi8KKwlfX3UzMiBvZmZzZXRfVTsKKwlfX3UzMiBvZmZzZXRfVjsKKwkvKiBpbiBwaXhlbHMgKi8KKwlfX3UxNiBzcmNfd2lkdGg7CisJX191MTYgc3JjX2hlaWdodDsKKwkvKiB0byBjb21wZW5zYXRlIHRoZSBzY2FsaW5nIGZhY3RvcnMgZm9yIHBhcnRpYWxseSBjb3ZlcmVkIHN1cmZhY2VzICovCisJX191MTYgc3JjX3NjYW5fd2lkdGg7CisJX191MTYgc3JjX3NjYW5faGVpZ2h0OworCS8qIG91dHB1dCBjcnRjIGRlc2NyaXB0aW9uICovCisJX191MzIgY3J0Y19pZDsKKwlfX3UxNiBkc3RfeDsKKwlfX3UxNiBkc3RfeTsKKwlfX3UxNiBkc3Rfd2lkdGg7CisJX191MTYgZHN0X2hlaWdodDsKK307CisKKy8qIGZsYWdzICovCisjZGVmaW5lIEk5MTVfT1ZFUkxBWV9VUERBVEVfQVRUUlMJKDE8PDApCisjZGVmaW5lIEk5MTVfT1ZFUkxBWV9VUERBVEVfR0FNTUEJKDE8PDEpCitzdHJ1Y3QgZHJtX2ludGVsX292ZXJsYXlfYXR0cnMgeworCV9fdTMyIGZsYWdzOworCV9fdTMyIGNvbG9yX2tleTsKKwlfX3MzMiBicmlnaHRuZXNzOworCV9fdTMyIGNvbnRyYXN0OworCV9fdTMyIHNhdHVyYXRpb247CisJX191MzIgZ2FtbWEwOworCV9fdTMyIGdhbW1hMTsKKwlfX3UzMiBnYW1tYTI7CisJX191MzIgZ2FtbWEzOworCV9fdTMyIGdhbW1hNDsKKwlfX3UzMiBnYW1tYTU7Cit9OworCisjZW5kaWYJCQkJLyogX0k5MTVfRFJNX0hfICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZHJtL21nYV9kcm0uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9kcm0vbWdhX2RybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYTkxNDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZHJtL21nYV9kcm0uaApAQCAtMCwwICsxLDQxOSBAQAorLyogbWdhX2RybS5oIC0tIFB1YmxpYyBoZWFkZXIgZm9yIHRoZSBNYXRyb3ggZzIwMC9nNDAwIGRyaXZlciAtKi0gbGludXgtYyAtKi0KKyAqIENyZWF0ZWQ6IFR1ZSBKYW4gMjUgMDE6NTA6MDEgMTk5OSBieSBqaGFydG1hbm5AcHJlY2lzaW9uaW5zaWdodC5jb20KKyAqCisgKiBDb3B5cmlnaHQgMTk5OSBQcmVjaXNpb24gSW5zaWdodCwgSW5jLiwgQ2VkYXIgUGFyaywgVGV4YXMuCisgKiBDb3B5cmlnaHQgMjAwMCBWQSBMaW51eCBTeXN0ZW1zLCBJbmMuLCBTdW5ueXZhbGUsIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBWQSBMSU5VWCBTWVNURU1TIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBKZWZmIEhhcnRtYW5uIDxqaGFydG1hbm5AdmFsaW51eC5jb20+CisgKiAgICBLZWl0aCBXaGl0d2VsbCA8a2VpdGhAdHVuZ3N0ZW5ncmFwaGljcy5jb20+CisgKgorICogUmV3cml0dGVuIGJ5OgorICogICAgR2FyZXRoIEh1Z2hlcyA8Z2FyZXRoQHZhbGludXguY29tPgorICovCisKKyNpZm5kZWYgX19NR0FfRFJNX0hfXworI2RlZmluZSBfX01HQV9EUk1fSF9fCisKKyNpbmNsdWRlICJkcm0uaCIKKworLyogV0FSTklORzogSWYgeW91IGNoYW5nZSBhbnkgb2YgdGhlc2UgZGVmaW5lcywgbWFrZSBzdXJlIHRvIGNoYW5nZSB0aGUKKyAqIGRlZmluZXMgaW4gdGhlIFhzZXJ2ZXIgZmlsZSAobWdhX3NhcmVhLmgpCisgKi8KKworI2lmbmRlZiBfX01HQV9TQVJFQV9ERUZJTkVTX18KKyNkZWZpbmUgX19NR0FfU0FSRUFfREVGSU5FU19fCisKKy8qIFdBUlAgcGlwZSBmbGFncworICovCisjZGVmaW5lIE1HQV9GCQkJMHgxCS8qIGZvZyAqLworI2RlZmluZSBNR0FfQQkJCTB4MgkvKiBhbHBoYSAqLworI2RlZmluZSBNR0FfUwkJCTB4NAkvKiBzcGVjdWxhciAqLworI2RlZmluZSBNR0FfVDIJCQkweDgJLyogbXVsdGl0ZXh0dXJlICovCisKKyNkZWZpbmUgTUdBX1dBUlBfVEdaCQkwCisjZGVmaW5lIE1HQV9XQVJQX1RHWkYJCShNR0FfRikKKyNkZWZpbmUgTUdBX1dBUlBfVEdaQQkJKE1HQV9BKQorI2RlZmluZSBNR0FfV0FSUF9UR1pBRgkJKE1HQV9GfE1HQV9BKQorI2RlZmluZSBNR0FfV0FSUF9UR1pTCQkoTUdBX1MpCisjZGVmaW5lIE1HQV9XQVJQX1RHWlNGCQkoTUdBX1N8TUdBX0YpCisjZGVmaW5lIE1HQV9XQVJQX1RHWlNBCQkoTUdBX1N8TUdBX0EpCisjZGVmaW5lIE1HQV9XQVJQX1RHWlNBRgkJKE1HQV9TfE1HQV9GfE1HQV9BKQorI2RlZmluZSBNR0FfV0FSUF9UMkdaCQkoTUdBX1QyKQorI2RlZmluZSBNR0FfV0FSUF9UMkdaRgkJKE1HQV9UMnxNR0FfRikKKyNkZWZpbmUgTUdBX1dBUlBfVDJHWkEJCShNR0FfVDJ8TUdBX0EpCisjZGVmaW5lIE1HQV9XQVJQX1QyR1pBRgkJKE1HQV9UMnxNR0FfQXxNR0FfRikKKyNkZWZpbmUgTUdBX1dBUlBfVDJHWlMJCShNR0FfVDJ8TUdBX1MpCisjZGVmaW5lIE1HQV9XQVJQX1QyR1pTRgkJKE1HQV9UMnxNR0FfU3xNR0FfRikKKyNkZWZpbmUgTUdBX1dBUlBfVDJHWlNBCQkoTUdBX1QyfE1HQV9TfE1HQV9BKQorI2RlZmluZSBNR0FfV0FSUF9UMkdaU0FGCShNR0FfVDJ8TUdBX1N8TUdBX0Z8TUdBX0EpCisKKyNkZWZpbmUgTUdBX01BWF9HMjAwX1BJUEVTCTgJLyogbm8gbXVsdGl0ZXggKi8KKyNkZWZpbmUgTUdBX01BWF9HNDAwX1BJUEVTCTE2CisjZGVmaW5lIE1HQV9NQVhfV0FSUF9QSVBFUwlNR0FfTUFYX0c0MDBfUElQRVMKKyNkZWZpbmUgTUdBX1dBUlBfVUNPREVfU0laRQkzMjc2OAkvKiBpbiBieXRlcyAqLworCisjZGVmaW5lIE1HQV9DQVJEX1RZUEVfRzIwMAkxCisjZGVmaW5lIE1HQV9DQVJEX1RZUEVfRzQwMAkyCisjZGVmaW5lIE1HQV9DQVJEX1RZUEVfRzQ1MAkzCS8qIG5vdCBjdXJyZW50bHkgdXNlZCAqLworI2RlZmluZSBNR0FfQ0FSRF9UWVBFX0c1NTAJNAorCisjZGVmaW5lIE1HQV9GUk9OVAkJMHgxCisjZGVmaW5lIE1HQV9CQUNLCQkweDIKKyNkZWZpbmUgTUdBX0RFUFRICQkweDQKKworLyogV2hhdCBuZWVkcyB0byBiZSBjaGFuZ2VkIGZvciB0aGUgY3VycmVudCB2ZXJ0ZXggZG1hIGJ1ZmZlcj8KKyAqLworI2RlZmluZSBNR0FfVVBMT0FEX0NPTlRFWFQJMHgxCisjZGVmaW5lIE1HQV9VUExPQURfVEVYMAkJMHgyCisjZGVmaW5lIE1HQV9VUExPQURfVEVYMQkJMHg0CisjZGVmaW5lIE1HQV9VUExPQURfUElQRQkJMHg4CisjZGVmaW5lIE1HQV9VUExPQURfVEVYMElNQUdFCTB4MTAJLyogaGFuZGxlZCBjbGllbnQtc2lkZSAqLworI2RlZmluZSBNR0FfVVBMT0FEX1RFWDFJTUFHRQkweDIwCS8qIGhhbmRsZWQgY2xpZW50LXNpZGUgKi8KKyNkZWZpbmUgTUdBX1VQTE9BRF8yRAkJMHg0MAorI2RlZmluZSBNR0FfV0FJVF9BR0UJCTB4ODAJLyogaGFuZGxlZCBjbGllbnQtc2lkZSAqLworI2RlZmluZSBNR0FfVVBMT0FEX0NMSVBSRUNUUwkweDEwMAkvKiBoYW5kbGVkIGNsaWVudC1zaWRlICovCisjaWYgMAorI2RlZmluZSBNR0FfRE1BX0ZMVVNICQkweDIwMAkvKiBzZXQgd2hlbiBzb21lb25lIGdldHMgdGhlIGxvY2sKKwkJCQkJICAgcXVpZXNjZW50ICovCisjZW5kaWYKKworLyogMzIgYnVmZmVycyBvZiA2NGsgZWFjaCwgdG90YWwgMiBtZWcuCisgKi8KKyNkZWZpbmUgTUdBX0JVRkZFUl9TSVpFCQkoMSA8PCAxNikKKyNkZWZpbmUgTUdBX05VTV9CVUZGRVJTCQkxMjgKKworLyogS2VlcCB0aGVzZSBzbWFsbCBmb3IgdGVzdGluZy4KKyAqLworI2RlZmluZSBNR0FfTlJfU0FSRUFfQ0xJUFJFQ1RTCTgKKworLyogMiBoZWFwcyAoMSBmb3IgY2FyZCwgMSBmb3IgYWdwKSwgZWFjaCBkaXZpZGVkIGludG8gdXB0byAxMjgKKyAqIHJlZ2lvbnMsIHN1YmplY3QgdG8gYSBtaW5pbXVtIHJlZ2lvbiBzaXplIG9mICgxPDwxNikgPT0gNjRrLgorICoKKyAqIENsaWVudHMgbWF5IHN1YmRpdmlkZSByZWdpb25zIGludGVybmFsbHksIGJ1dCB3aGVuIHNoYXJpbmcgYmV0d2VlbgorICogY2xpZW50cywgdGhlIHJlZ2lvbiBzaXplIGlzIHRoZSBtaW5pbXVtIGdyYW51bGFyaXR5LgorICovCisKKyNkZWZpbmUgTUdBX0NBUkRfSEVBUAkJCTAKKyNkZWZpbmUgTUdBX0FHUF9IRUFQCQkJMQorI2RlZmluZSBNR0FfTlJfVEVYX0hFQVBTCQkyCisjZGVmaW5lIE1HQV9OUl9URVhfUkVHSU9OUwkJMTYKKyNkZWZpbmUgTUdBX0xPR19NSU5fVEVYX1JFR0lPTl9TSVpFCTE2CisKKyNkZWZpbmUgIERSTV9NR0FfSURMRV9SRVRSWSAgICAgICAgICAyMDQ4CisKKyNlbmRpZgkJCQkvKiBfX01HQV9TQVJFQV9ERUZJTkVTX18gKi8KKworLyogU2V0dXAgcmVnaXN0ZXJzIGZvciAzRCBjb250ZXh0CisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgZHN0b3JnOworCXVuc2lnbmVkIGludCBtYWNjZXNzOworCXVuc2lnbmVkIGludCBwbG53dDsKKwl1bnNpZ25lZCBpbnQgZHdnY3RsOworCXVuc2lnbmVkIGludCBhbHBoYWN0cmw7CisJdW5zaWduZWQgaW50IGZvZ2NvbG9yOworCXVuc2lnbmVkIGludCB3ZmxhZzsKKwl1bnNpZ25lZCBpbnQgdGR1YWxzdGFnZTA7CisJdW5zaWduZWQgaW50IHRkdWFsc3RhZ2UxOworCXVuc2lnbmVkIGludCBmY29sOworCXVuc2lnbmVkIGludCBzdGVuY2lsOworCXVuc2lnbmVkIGludCBzdGVuY2lsY3RsOworfSBkcm1fbWdhX2NvbnRleHRfcmVnc190OworCisvKiBTZXR1cCByZWdpc3RlcnMgZm9yIDJELCBYIHNlcnZlcgorICovCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IHBpdGNoOworfSBkcm1fbWdhX3NlcnZlcl9yZWdzX3Q7CisKKy8qIFNldHVwIHJlZ2lzdGVycyBmb3IgZWFjaCB0ZXh0dXJlIHVuaXQKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCB0ZXhjdGw7CisJdW5zaWduZWQgaW50IHRleGN0bDI7CisJdW5zaWduZWQgaW50IHRleGZpbHRlcjsKKwl1bnNpZ25lZCBpbnQgdGV4Ym9yZGVyY29sOworCXVuc2lnbmVkIGludCB0ZXhvcmc7CisJdW5zaWduZWQgaW50IHRleHdpZHRoOworCXVuc2lnbmVkIGludCB0ZXhoZWlnaHQ7CisJdW5zaWduZWQgaW50IHRleG9yZzE7CisJdW5zaWduZWQgaW50IHRleG9yZzI7CisJdW5zaWduZWQgaW50IHRleG9yZzM7CisJdW5zaWduZWQgaW50IHRleG9yZzQ7Cit9IGRybV9tZ2FfdGV4dHVyZV9yZWdzX3Q7CisKKy8qIEdlbmVyYWwgYWdpbmcgbWVjaGFuaXNtCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgaGVhZDsJLyogUG9zaXRpb24gb2YgaGVhZCBwb2ludGVyICAgICAgICAgICovCisJdW5zaWduZWQgaW50IHdyYXA7CS8qIFByaW1hcnkgRE1BIHdyYXAgY291bnQgICAgICAgICAgICAqLworfSBkcm1fbWdhX2FnZV90OworCit0eXBlZGVmIHN0cnVjdCBfZHJtX21nYV9zYXJlYSB7CisJLyogVGhlIGNoYW5uZWwgZm9yIGNvbW11bmljYXRpb24gb2Ygc3RhdGUgaW5mb3JtYXRpb24gdG8gdGhlIGtlcm5lbAorCSAqIG9uIGZpcmluZyBhIHZlcnRleCBkbWEgYnVmZmVyLgorCSAqLworCWRybV9tZ2FfY29udGV4dF9yZWdzX3QgY29udGV4dF9zdGF0ZTsKKwlkcm1fbWdhX3NlcnZlcl9yZWdzX3Qgc2VydmVyX3N0YXRlOworCWRybV9tZ2FfdGV4dHVyZV9yZWdzX3QgdGV4X3N0YXRlWzJdOworCXVuc2lnbmVkIGludCB3YXJwX3BpcGU7CisJdW5zaWduZWQgaW50IGRpcnR5OworCXVuc2lnbmVkIGludCB2ZXJ0c2l6ZTsKKworCS8qIFRoZSBjdXJyZW50IGNsaXByZWN0cywgb3IgYSBzdWJzZXQgdGhlcmVvZi4KKwkgKi8KKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBib3hlc1tNR0FfTlJfU0FSRUFfQ0xJUFJFQ1RTXTsKKwl1bnNpZ25lZCBpbnQgbmJveDsKKworCS8qIEluZm9ybWF0aW9uIGFib3V0IHRoZSBtb3N0IHJlY2VudGx5IHVzZWQgM2QgZHJhd2FibGUuICBUaGUKKwkgKiBjbGllbnQgZmlsbHMgaW4gdGhlIHJlcV8qIGZpZWxkcywgdGhlIHNlcnZlciBmaWxscyBpbiB0aGUKKwkgKiBleHBvcnRlZF8gZmllbGRzIGFuZCBwdXRzIHRoZSBjbGlwcmVjdHMgaW50byBib3hlcywgYWJvdmUuCisJICoKKwkgKiBUaGUgY2xpZW50IGNsZWFycyB0aGUgZXhwb3J0ZWRfZHJhd2FibGUgZmllbGQgYmVmb3JlCisJICogY2xvYmJlcmluZyB0aGUgYm94ZXMgZGF0YS4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgcmVxX2RyYXdhYmxlOwkvKiB0aGUgWCBkcmF3YWJsZSBpZCAqLworCXVuc2lnbmVkIGludCByZXFfZHJhd19idWZmZXI7CS8qIE1HQV9GUk9OVCBvciBNR0FfQkFDSyAqLworCisJdW5zaWduZWQgaW50IGV4cG9ydGVkX2RyYXdhYmxlOworCXVuc2lnbmVkIGludCBleHBvcnRlZF9pbmRleDsKKwl1bnNpZ25lZCBpbnQgZXhwb3J0ZWRfc3RhbXA7CisJdW5zaWduZWQgaW50IGV4cG9ydGVkX2J1ZmZlcnM7CisJdW5zaWduZWQgaW50IGV4cG9ydGVkX25mcm9udDsKKwl1bnNpZ25lZCBpbnQgZXhwb3J0ZWRfbmJhY2s7CisJaW50IGV4cG9ydGVkX2JhY2tfeCwgZXhwb3J0ZWRfZnJvbnRfeCwgZXhwb3J0ZWRfdzsKKwlpbnQgZXhwb3J0ZWRfYmFja195LCBleHBvcnRlZF9mcm9udF95LCBleHBvcnRlZF9oOworCXN0cnVjdCBkcm1fY2xpcF9yZWN0IGV4cG9ydGVkX2JveGVzW01HQV9OUl9TQVJFQV9DTElQUkVDVFNdOworCisJLyogQ291bnRlcnMgZm9yIGFnaW5nIHRleHR1cmVzIGFuZCBmb3IgY2xpZW50LXNpZGUgdGhyb3R0bGluZy4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgc3RhdHVzWzRdOworCXVuc2lnbmVkIGludCBsYXN0X3dyYXA7CisKKwlkcm1fbWdhX2FnZV90IGxhc3RfZnJhbWU7CisJdW5zaWduZWQgaW50IGxhc3RfZW5xdWV1ZTsJLyogbGFzdCB0aW1lIGEgYnVmZmVyIHdhcyBlbnF1ZXVlZCAqLworCXVuc2lnbmVkIGludCBsYXN0X2Rpc3BhdGNoOwkvKiBhZ2Ugb2YgdGhlIG1vc3QgcmVjZW50bHkgZGlzcGF0Y2hlZCBidWZmZXIgKi8KKwl1bnNpZ25lZCBpbnQgbGFzdF9xdWllc2NlbnQ7CS8qICAqLworCisJLyogTFJVIGxpc3RzIGZvciB0ZXh0dXJlIG1lbW9yeSBpbiBhZ3Agc3BhY2UgYW5kIG9uIHRoZSBjYXJkLgorCSAqLworCXN0cnVjdCBkcm1fdGV4X3JlZ2lvbiB0ZXhMaXN0W01HQV9OUl9URVhfSEVBUFNdW01HQV9OUl9URVhfUkVHSU9OUyArIDFdOworCXVuc2lnbmVkIGludCB0ZXhBZ2VbTUdBX05SX1RFWF9IRUFQU107CisKKwkvKiBNZWNoYW5pc20gdG8gdmFsaWRhdGUgY2FyZCBzdGF0ZS4KKwkgKi8KKwlpbnQgY3R4T3duZXI7Cit9IGRybV9tZ2Ffc2FyZWFfdDsKKworLyogTUdBIHNwZWNpZmljIGlvY3RscworICogVGhlIGRldmljZSBzcGVjaWZpYyBpb2N0bCByYW5nZSBpcyAweDQwIHRvIDB4NzkuCisgKi8KKyNkZWZpbmUgRFJNX01HQV9JTklUICAgICAweDAwCisjZGVmaW5lIERSTV9NR0FfRkxVU0ggICAgMHgwMQorI2RlZmluZSBEUk1fTUdBX1JFU0VUICAgIDB4MDIKKyNkZWZpbmUgRFJNX01HQV9TV0FQICAgICAweDAzCisjZGVmaW5lIERSTV9NR0FfQ0xFQVIgICAgMHgwNAorI2RlZmluZSBEUk1fTUdBX1ZFUlRFWCAgIDB4MDUKKyNkZWZpbmUgRFJNX01HQV9JTkRJQ0VTICAweDA2CisjZGVmaW5lIERSTV9NR0FfSUxPQUQgICAgMHgwNworI2RlZmluZSBEUk1fTUdBX0JMSVQgICAgIDB4MDgKKyNkZWZpbmUgRFJNX01HQV9HRVRQQVJBTSAweDA5CisKKy8qIDMuMjoKKyAqIGlvY3RscyBmb3Igb3BlcmF0aW5nIG9uIGZlbmNlcy4KKyAqLworI2RlZmluZSBEUk1fTUdBX1NFVF9GRU5DRSAgICAgIDB4MGEKKyNkZWZpbmUgRFJNX01HQV9XQUlUX0ZFTkNFICAgICAweDBiCisjZGVmaW5lIERSTV9NR0FfRE1BX0JPT1RTVFJBUCAgMHgwYworCisjZGVmaW5lIERSTV9JT0NUTF9NR0FfSU5JVCAgICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfSU5JVCwgZHJtX21nYV9pbml0X3QpCisjZGVmaW5lIERSTV9JT0NUTF9NR0FfRkxVU0ggICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfRkxVU0gsIHN0cnVjdCBkcm1fbG9jaykKKyNkZWZpbmUgRFJNX0lPQ1RMX01HQV9SRVNFVCAgICBEUk1fSU8oICBEUk1fQ09NTUFORF9CQVNFICsgRFJNX01HQV9SRVNFVCkKKyNkZWZpbmUgRFJNX0lPQ1RMX01HQV9TV0FQICAgICBEUk1fSU8oICBEUk1fQ09NTUFORF9CQVNFICsgRFJNX01HQV9TV0FQKQorI2RlZmluZSBEUk1fSU9DVExfTUdBX0NMRUFSICAgIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTUdBX0NMRUFSLCBkcm1fbWdhX2NsZWFyX3QpCisjZGVmaW5lIERSTV9JT0NUTF9NR0FfVkVSVEVYICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfVkVSVEVYLCBkcm1fbWdhX3ZlcnRleF90KQorI2RlZmluZSBEUk1fSU9DVExfTUdBX0lORElDRVMgIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTUdBX0lORElDRVMsIGRybV9tZ2FfaW5kaWNlc190KQorI2RlZmluZSBEUk1fSU9DVExfTUdBX0lMT0FEICAgIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTUdBX0lMT0FELCBkcm1fbWdhX2lsb2FkX3QpCisjZGVmaW5lIERSTV9JT0NUTF9NR0FfQkxJVCAgICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfQkxJVCwgZHJtX21nYV9ibGl0X3QpCisjZGVmaW5lIERSTV9JT0NUTF9NR0FfR0VUUEFSQU0gRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfR0VUUEFSQU0sIGRybV9tZ2FfZ2V0cGFyYW1fdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX01HQV9TRVRfRkVOQ0UgICAgIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTUdBX1NFVF9GRU5DRSwgX191MzIpCisjZGVmaW5lIERSTV9JT0NUTF9NR0FfV0FJVF9GRU5DRSAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX01HQV9XQUlUX0ZFTkNFLCBfX3UzMikKKyNkZWZpbmUgRFJNX0lPQ1RMX01HQV9ETUFfQk9PVFNUUkFQIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTUdBX0RNQV9CT09UU1RSQVAsIGRybV9tZ2FfZG1hX2Jvb3RzdHJhcF90KQorCit0eXBlZGVmIHN0cnVjdCBfZHJtX21nYV93YXJwX2luZGV4IHsKKwlpbnQgaW5zdGFsbGVkOworCXVuc2lnbmVkIGxvbmcgcGh5c19hZGRyOworCWludCBzaXplOworfSBkcm1fbWdhX3dhcnBfaW5kZXhfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZHJtX21nYV9pbml0IHsKKwllbnVtIHsKKwkJTUdBX0lOSVRfRE1BID0gMHgwMSwKKwkJTUdBX0NMRUFOVVBfRE1BID0gMHgwMgorCX0gZnVuYzsKKworCXVuc2lnbmVkIGxvbmcgc2FyZWFfcHJpdl9vZmZzZXQ7CisKKwlpbnQgY2hpcHNldDsKKwlpbnQgc2dyYW07CisKKwl1bnNpZ25lZCBpbnQgbWFjY2VzczsKKworCXVuc2lnbmVkIGludCBmYl9jcHA7CisJdW5zaWduZWQgaW50IGZyb250X29mZnNldCwgZnJvbnRfcGl0Y2g7CisJdW5zaWduZWQgaW50IGJhY2tfb2Zmc2V0LCBiYWNrX3BpdGNoOworCisJdW5zaWduZWQgaW50IGRlcHRoX2NwcDsKKwl1bnNpZ25lZCBpbnQgZGVwdGhfb2Zmc2V0LCBkZXB0aF9waXRjaDsKKworCXVuc2lnbmVkIGludCB0ZXh0dXJlX29mZnNldFtNR0FfTlJfVEVYX0hFQVBTXTsKKwl1bnNpZ25lZCBpbnQgdGV4dHVyZV9zaXplW01HQV9OUl9URVhfSEVBUFNdOworCisJdW5zaWduZWQgbG9uZyBmYl9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBtbWlvX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIHN0YXR1c19vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyB3YXJwX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIHByaW1hcnlfb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgYnVmZmVyc19vZmZzZXQ7Cit9IGRybV9tZ2FfaW5pdF90OworCit0eXBlZGVmIHN0cnVjdCBkcm1fbWdhX2RtYV9ib290c3RyYXAgeworCS8qKgorCSAqIFxuYW1lIEFHUCB0ZXh0dXJlIHJlZ2lvbgorCSAqCisJICogT24gcmV0dXJuIGZyb20gdGhlIERSTV9NR0FfRE1BX0JPT1RTVFJBUCBpb2N0bCwgdGhlc2UgZmllbGRzIHdpbGwKKwkgKiBiZSBmaWxsZWQgaW4gd2l0aCB0aGUgYWN0dWFsIEFHUCB0ZXh0dXJlIHNldHRpbmdzLgorCSAqCisJICogXHdhcm5pbmcKKwkgKiBJZiB0aGVzZSBmaWVsZHMgYXJlIG5vbi16ZXJvLCBidXQgZG1hX21nYV9kbWFfYm9vdHN0cmFwOjphZ3BfbW9kZQorCSAqIGlzIHplcm8sIGl0IG1lYW5zIHRoYXQgUENJIG1lbW9yeSAobW9zdCBsaWtlbHkgdGhyb3VnaCB0aGUgdXNlIG9mCisJICogYW4gSU9NTVUpIGlzIGJlaW5nIHVzZWQgZm9yICJBR1AiIHRleHR1cmVzLgorCSAqLworCS8qQHsgKi8KKwl1bnNpZ25lZCBsb25nIHRleHR1cmVfaGFuZGxlOyAvKio8IEhhbmRsZSB1c2VkIHRvIG1hcCBBR1AgdGV4dHVyZXMuICovCisJX191MzIgdGV4dHVyZV9zaXplOwkgICAgICAvKio8IFNpemUgb2YgdGhlIEFHUCB0ZXh0dXJlIHJlZ2lvbi4gKi8KKwkvKkB9ICovCisKKwkvKioKKwkgKiBSZXF1ZXN0ZWQgc2l6ZSBvZiB0aGUgcHJpbWFyeSBETUEgcmVnaW9uLgorCSAqCisJICogT24gcmV0dXJuIGZyb20gdGhlIERSTV9NR0FfRE1BX0JPT1RTVFJBUCBpb2N0bCwgdGhpcyBmaWVsZCB3aWxsIGJlCisJICogZmlsbGVkIGluIHdpdGggdGhlIGFjdHVhbCBBR1AgbW9kZS4gIElmIEFHUCB3YXMgbm90IGF2YWlsYWJsZQorCSAqLworCV9fdTMyIHByaW1hcnlfc2l6ZTsKKworCS8qKgorCSAqIFJlcXVlc3RlZCBudW1iZXIgb2Ygc2Vjb25kYXJ5IERNQSBidWZmZXJzLgorCSAqCisJICogT24gcmV0dXJuIGZyb20gdGhlIERSTV9NR0FfRE1BX0JPT1RTVFJBUCBpb2N0bCwgdGhpcyBmaWVsZCB3aWxsIGJlCisJICogZmlsbGVkIGluIHdpdGggdGhlIGFjdHVhbCBudW1iZXIgb2Ygc2Vjb25kYXJ5IERNQSBidWZmZXJzCisJICogYWxsb2NhdGVkLiAgUGFydGljdWxhcmx5IHdoZW4gUENJIERNQSBpcyB1c2VkLCB0aGlzIG1heSBiZQorCSAqIChzdWJ0YW50aWFsbHkpIGxlc3MgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZC4KKwkgKi8KKwlfX3UzMiBzZWNvbmRhcnlfYmluX2NvdW50OworCisJLyoqCisJICogUmVxdWVzdGVkIHNpemUgb2YgZWFjaCBzZWNvbmRhcnkgRE1BIGJ1ZmZlci4KKwkgKgorCSAqIFdoaWxlIHRoZSBrZXJuZWwgXGIgaXMgZnJlZSB0byByZWR1Y2UKKwkgKiBkbWFfbWdhX2RtYV9ib290c3RyYXA6OnNlY29uZGFyeV9iaW5fY291bnQsIGl0IGlzIFxiIG5vdCBhbGxvd2VkCisJICogdG8gcmVkdWNlIGRtYV9tZ2FfZG1hX2Jvb3RzdHJhcDo6c2Vjb25kYXJ5X2Jpbl9zaXplLgorCSAqLworCV9fdTMyIHNlY29uZGFyeV9iaW5fc2l6ZTsKKworCS8qKgorCSAqIEJpdC13aXNlIG1hc2sgb2YgQUdQU1RBVDJfKiB2YWx1ZXMuICBDdXJyZW50bHkgb25seSBcYyBBR1BTVEFUMl8xWCwKKwkgKiBcYyBBR1BTVEFUMl8yWCwgYW5kIFxjIEFHUFNUQVQyXzRYIGFyZSBzdXBwb3J0ZWQuICBJZiB0aGlzIHZhbHVlIGlzCisJICogemVybywgaXQgbWVhbnMgdGhhdCBQQ0kgRE1BIHNob3VsZCBiZSB1c2VkLCBldmVuIGlmIEFHUCBpcworCSAqIHBvc3NpYmxlLgorCSAqCisJICogT24gcmV0dXJuIGZyb20gdGhlIERSTV9NR0FfRE1BX0JPT1RTVFJBUCBpb2N0bCwgdGhpcyBmaWVsZCB3aWxsIGJlCisJICogZmlsbGVkIGluIHdpdGggdGhlIGFjdHVhbCBBR1AgbW9kZS4gIElmIEFHUCB3YXMgbm90IGF2YWlsYWJsZQorCSAqIChpLmUuLCBQQ0kgRE1BIHdhcyB1c2VkKSwgdGhpcyB2YWx1ZSB3aWxsIGJlIHplcm8uCisJICovCisJX191MzIgYWdwX21vZGU7CisKKwkvKioKKwkgKiBEZXNpcmVkIEFHUCBHQVJUIHNpemUsIG1lYXN1cmVkIGluIG1lZ2FieXRlcy4KKwkgKi8KKwlfX3U4IGFncF9zaXplOworfSBkcm1fbWdhX2RtYV9ib290c3RyYXBfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZHJtX21nYV9jbGVhciB7CisJdW5zaWduZWQgaW50IGZsYWdzOworCXVuc2lnbmVkIGludCBjbGVhcl9jb2xvcjsKKwl1bnNpZ25lZCBpbnQgY2xlYXJfZGVwdGg7CisJdW5zaWduZWQgaW50IGNvbG9yX21hc2s7CisJdW5zaWduZWQgaW50IGRlcHRoX21hc2s7Cit9IGRybV9tZ2FfY2xlYXJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZHJtX21nYV92ZXJ0ZXggeworCWludCBpZHg7CQkvKiBidWZmZXIgdG8gcXVldWUgKi8KKwlpbnQgdXNlZDsJCS8qIGJ5dGVzIGluIHVzZSAqLworCWludCBkaXNjYXJkOwkJLyogY2xpZW50IGZpbmlzaGVkIHdpdGggYnVmZmVyPyAgKi8KK30gZHJtX21nYV92ZXJ0ZXhfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZHJtX21nYV9pbmRpY2VzIHsKKwlpbnQgaWR4OwkJLyogYnVmZmVyIHRvIHF1ZXVlICovCisJdW5zaWduZWQgaW50IHN0YXJ0OworCXVuc2lnbmVkIGludCBlbmQ7CisJaW50IGRpc2NhcmQ7CQkvKiBjbGllbnQgZmluaXNoZWQgd2l0aCBidWZmZXI/ICAqLworfSBkcm1fbWdhX2luZGljZXNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZHJtX21nYV9pbG9hZCB7CisJaW50IGlkeDsKKwl1bnNpZ25lZCBpbnQgZHN0b3JnOworCXVuc2lnbmVkIGludCBsZW5ndGg7Cit9IGRybV9tZ2FfaWxvYWRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2RybV9tZ2FfYmxpdCB7CisJdW5zaWduZWQgaW50IHBsYW5lbWFzazsKKwl1bnNpZ25lZCBpbnQgc3Jjb3JnOworCXVuc2lnbmVkIGludCBkc3Rvcmc7CisJaW50IHNyY19waXRjaCwgZHN0X3BpdGNoOworCWludCBkZWx0YV9zeCwgZGVsdGFfc3k7CisJaW50IGRlbHRhX2R4LCBkZWx0YV9keTsKKwlpbnQgaGVpZ2h0LCB5ZGlyOwkvKiBmbGlwIGltYWdlIHZlcnRpY2FsbHkgKi8KKwlpbnQgc291cmNlX3BpdGNoLCBkZXN0X3BpdGNoOworfSBkcm1fbWdhX2JsaXRfdDsKKworLyogMy4xOiBBbiBpb2N0bCB0byBnZXQgcGFyYW1ldGVycyB0aGF0IGFyZW4ndCBhdmFpbGFibGUgdG8gdGhlIDNkCisgKiBjbGllbnQgYW55IG90aGVyIHdheS4KKyAqLworI2RlZmluZSBNR0FfUEFSQU1fSVJRX05SICAgICAgICAgICAgMQorCisvKiAzLjI6IFF1ZXJ5IHRoZSBhY3R1YWwgY2FyZCB0eXBlLiAgVGhlIEREWCBvbmx5IGRpc3Rpbmd1aXNoZXMgYmV0d2VlbgorICogRzIwMCBjaGlwcyBhbmQgbm9uLUcyMDAgY2hpcHMsIHdoaWNoIGl0IGNhbGxzIEc0MDAuICBJdCB0dXJucyBvdXQgdGhhdAorICogdGhlcmUgYXJlIHNvbWUgdmVyeSBzdWJsdGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgRzR4MCBjaGlwcyBhbmQgdGhlIEc1NTAKKyAqIGNoaXBzLiAgVXNpbmcgdGhpcyBwYXJhbWV0ZXIgcXVlcnksIGEgY2xpZW50LXNpZGUgZHJpdmVyIGNhbiBkZXRlY3QgdGhlCisgKiBkaWZmZXJlbmNlIGJldHdlZW4gYSBHNHgwIGFuZCBhIEc1NTAuCisgKi8KKyNkZWZpbmUgTUdBX1BBUkFNX0NBUkRfVFlQRSAgICAgICAgIDIKKwordHlwZWRlZiBzdHJ1Y3QgZHJtX21nYV9nZXRwYXJhbSB7CisJaW50IHBhcmFtOworCXZvaWQgKnZhbHVlOworfSBkcm1fbWdhX2dldHBhcmFtX3Q7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2RybS9ub3V2ZWF1X2RybS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2RybS9ub3V2ZWF1X2RybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNTU5MGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZHJtL25vdXZlYXVfZHJtLmgKQEAgLTAsMCArMSwyMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNSBTdGVwaGFuZSBNYXJjaGVzaW4uCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBWQSBMSU5VWCBTWVNURU1TIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX19OT1VWRUFVX0RSTV9IX18KKyNkZWZpbmUgX19OT1VWRUFVX0RSTV9IX18KKworI2RlZmluZSBOT1VWRUFVX0RSTV9IRUFERVJfUEFUQ0hMRVZFTCAxNgorCitzdHJ1Y3QgZHJtX25vdXZlYXVfY2hhbm5lbF9hbGxvYyB7CisJdWludDMyX3QgICAgIGZiX2N0eGRtYV9oYW5kbGU7CisJdWludDMyX3QgICAgIHR0X2N0eGRtYV9oYW5kbGU7CisKKwlpbnQgICAgICAgICAgY2hhbm5lbDsKKwl1aW50MzJfdCAgICAgcHVzaGJ1Zl9kb21haW5zOworCisJLyogTm90aWZpZXIgbWVtb3J5ICovCisJdWludDMyX3QgICAgIG5vdGlmaWVyX2hhbmRsZTsKKworCS8qIERSTS1lbmZvcmNlZCBzdWJjaGFubmVsIGFzc2lnbm1lbnRzICovCisJc3RydWN0IHsKKwkJdWludDMyX3QgaGFuZGxlOworCQl1aW50MzJfdCBncmNsYXNzOworCX0gc3ViY2hhbls4XTsKKwl1aW50MzJfdCBucl9zdWJjaGFuOworfTsKKworc3RydWN0IGRybV9ub3V2ZWF1X2NoYW5uZWxfZnJlZSB7CisJaW50IGNoYW5uZWw7Cit9OworCitzdHJ1Y3QgZHJtX25vdXZlYXVfZ3JvYmpfYWxsb2MgeworCWludCAgICAgIGNoYW5uZWw7CisJdWludDMyX3QgaGFuZGxlOworCWludCAgICAgIGNsYXNzOworfTsKKworc3RydWN0IGRybV9ub3V2ZWF1X25vdGlmaWVyb2JqX2FsbG9jIHsKKwl1aW50MzJfdCBjaGFubmVsOworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJfdCBzaXplOworCXVpbnQzMl90IG9mZnNldDsKK307CisKK3N0cnVjdCBkcm1fbm91dmVhdV9ncHVvYmpfZnJlZSB7CisJaW50ICAgICAgY2hhbm5lbDsKKwl1aW50MzJfdCBoYW5kbGU7Cit9OworCisvKiBGSVhNRSA6IG1heWJlIHVuaWZ5IHtHRVQsU0VUfVBBUkFNcyAqLworI2RlZmluZSBOT1VWRUFVX0dFVFBBUkFNX1BDSV9WRU5ET1IgICAgICAzCisjZGVmaW5lIE5PVVZFQVVfR0VUUEFSQU1fUENJX0RFVklDRSAgICAgIDQKKyNkZWZpbmUgTk9VVkVBVV9HRVRQQVJBTV9CVVNfVFlQRSAgICAgICAgNQorI2RlZmluZSBOT1VWRUFVX0dFVFBBUkFNX0ZCX1BIWVNJQ0FMICAgICA2CisjZGVmaW5lIE5PVVZFQVVfR0VUUEFSQU1fQUdQX1BIWVNJQ0FMICAgIDcKKyNkZWZpbmUgTk9VVkVBVV9HRVRQQVJBTV9GQl9TSVpFICAgICAgICAgOAorI2RlZmluZSBOT1VWRUFVX0dFVFBBUkFNX0FHUF9TSVpFICAgICAgICA5CisjZGVmaW5lIE5PVVZFQVVfR0VUUEFSQU1fUENJX1BIWVNJQ0FMICAgIDEwCisjZGVmaW5lIE5PVVZFQVVfR0VUUEFSQU1fQ0hJUFNFVF9JRCAgICAgIDExCisjZGVmaW5lIE5PVVZFQVVfR0VUUEFSQU1fVk1fVlJBTV9CQVNFICAgIDEyCisjZGVmaW5lIE5PVVZFQVVfR0VUUEFSQU1fR1JBUEhfVU5JVFMgICAgIDEzCisjZGVmaW5lIE5PVVZFQVVfR0VUUEFSQU1fUFRJTUVSX1RJTUUgICAgIDE0CisjZGVmaW5lIE5PVVZFQVVfR0VUUEFSQU1fSEFTX0JPX1VTQUdFICAgIDE1CitzdHJ1Y3QgZHJtX25vdXZlYXVfZ2V0cGFyYW0geworCXVpbnQ2NF90IHBhcmFtOworCXVpbnQ2NF90IHZhbHVlOworfTsKKworc3RydWN0IGRybV9ub3V2ZWF1X3NldHBhcmFtIHsKKwl1aW50NjRfdCBwYXJhbTsKKwl1aW50NjRfdCB2YWx1ZTsKK307CisKKyNkZWZpbmUgTk9VVkVBVV9HRU1fRE9NQUlOX0NQVSAgICAgICAoMSA8PCAwKQorI2RlZmluZSBOT1VWRUFVX0dFTV9ET01BSU5fVlJBTSAgICAgICgxIDw8IDEpCisjZGVmaW5lIE5PVVZFQVVfR0VNX0RPTUFJTl9HQVJUICAgICAgKDEgPDwgMikKKyNkZWZpbmUgTk9VVkVBVV9HRU1fRE9NQUlOX01BUFBBQkxFICAoMSA8PCAzKQorCisjZGVmaW5lIE5PVVZFQVVfR0VNX1RJTEVfTEFZT1VUX01BU0sgMHgwMDAwZmYwMAorI2RlZmluZSBOT1VWRUFVX0dFTV9USUxFXzE2QlBQICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTk9VVkVBVV9HRU1fVElMRV8zMkJQUCAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIE5PVVZFQVVfR0VNX1RJTEVfWkVUQSAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBOT1VWRUFVX0dFTV9USUxFX05PTkNPTlRJRyAgIDB4MDAwMDAwMDgKKworc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9pbmZvIHsKKwl1aW50MzJfdCBoYW5kbGU7CisJdWludDMyX3QgZG9tYWluOworCXVpbnQ2NF90IHNpemU7CisJdWludDY0X3Qgb2Zmc2V0OworCXVpbnQ2NF90IG1hcF9oYW5kbGU7CisJdWludDMyX3QgdGlsZV9tb2RlOworCXVpbnQzMl90IHRpbGVfZmxhZ3M7Cit9OworCitzdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX25ldyB7CisJc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9pbmZvIGluZm87CisJdWludDMyX3QgY2hhbm5lbF9oaW50OworCXVpbnQzMl90IGFsaWduOworfTsKKworI2RlZmluZSBOT1VWRUFVX0dFTV9NQVhfQlVGRkVSUyAxMDI0CitzdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX3B1c2hidWZfYm9fcHJlc3VtZWQgeworCXVpbnQzMl90IHZhbGlkOworCXVpbnQzMl90IGRvbWFpbjsKKwl1aW50NjRfdCBvZmZzZXQ7Cit9OworCitzdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX3B1c2hidWZfYm8geworCXVpbnQ2NF90IHVzZXJfcHJpdjsKKwl1aW50MzJfdCBoYW5kbGU7CisJdWludDMyX3QgcmVhZF9kb21haW5zOworCXVpbnQzMl90IHdyaXRlX2RvbWFpbnM7CisJdWludDMyX3QgdmFsaWRfZG9tYWluczsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX3B1c2hidWZfYm9fcHJlc3VtZWQgcHJlc3VtZWQ7Cit9OworCisjZGVmaW5lIE5PVVZFQVVfR0VNX1JFTE9DX0xPVyAgKDEgPDwgMCkKKyNkZWZpbmUgTk9VVkVBVV9HRU1fUkVMT0NfSElHSCAoMSA8PCAxKQorI2RlZmluZSBOT1VWRUFVX0dFTV9SRUxPQ19PUiAgICgxIDw8IDIpCisjZGVmaW5lIE5PVVZFQVVfR0VNX01BWF9SRUxPQ1MgMTAyNAorc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9wdXNoYnVmX3JlbG9jIHsKKwl1aW50MzJfdCByZWxvY19ib19pbmRleDsKKwl1aW50MzJfdCByZWxvY19ib19vZmZzZXQ7CisJdWludDMyX3QgYm9faW5kZXg7CisJdWludDMyX3QgZmxhZ3M7CisJdWludDMyX3QgZGF0YTsKKwl1aW50MzJfdCB2b3I7CisJdWludDMyX3QgdG9yOworfTsKKworI2RlZmluZSBOT1VWRUFVX0dFTV9NQVhfUFVTSCA1MTIKK3N0cnVjdCBkcm1fbm91dmVhdV9nZW1fcHVzaGJ1Zl9wdXNoIHsKKwl1aW50MzJfdCBib19pbmRleDsKKwl1aW50MzJfdCBwYWQ7CisJdWludDY0X3Qgb2Zmc2V0OworCXVpbnQ2NF90IGxlbmd0aDsKK307CisKK3N0cnVjdCBkcm1fbm91dmVhdV9nZW1fcHVzaGJ1ZiB7CisJdWludDMyX3QgY2hhbm5lbDsKKwl1aW50MzJfdCBucl9idWZmZXJzOworCXVpbnQ2NF90IGJ1ZmZlcnM7CisJdWludDMyX3QgbnJfcmVsb2NzOworCXVpbnQzMl90IG5yX3B1c2g7CisJdWludDY0X3QgcmVsb2NzOworCXVpbnQ2NF90IHB1c2g7CisJdWludDMyX3Qgc3VmZml4MDsKKwl1aW50MzJfdCBzdWZmaXgxOworCXVpbnQ2NF90IHZyYW1fYXZhaWxhYmxlOworCXVpbnQ2NF90IGdhcnRfYXZhaWxhYmxlOworfTsKKworI2RlZmluZSBOT1VWRUFVX0dFTV9DUFVfUFJFUF9OT1dBSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBOT1VWRUFVX0dFTV9DUFVfUFJFUF9OT0JMT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBOT1VWRUFVX0dFTV9DUFVfUFJFUF9XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9jcHVfcHJlcCB7CisJdWludDMyX3QgaGFuZGxlOworCXVpbnQzMl90IGZsYWdzOworfTsKKworc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9jcHVfZmluaSB7CisJdWludDMyX3QgaGFuZGxlOworfTsKKworZW51bSBub3V2ZWF1X2J1c190eXBlIHsKKwlOVl9BR1AgICAgID0gMCwKKwlOVl9QQ0kgICAgID0gMSwKKwlOVl9QQ0lFICAgID0gMiwKK307CisKK3N0cnVjdCBkcm1fbm91dmVhdV9zYXJlYSB7Cit9OworCisjZGVmaW5lIERSTV9OT1VWRUFVX0dFVFBBUkFNICAgICAgICAgICAweDAwCisjZGVmaW5lIERSTV9OT1VWRUFVX1NFVFBBUkFNICAgICAgICAgICAweDAxCisjZGVmaW5lIERSTV9OT1VWRUFVX0NIQU5ORUxfQUxMT0MgICAgICAweDAyCisjZGVmaW5lIERSTV9OT1VWRUFVX0NIQU5ORUxfRlJFRSAgICAgICAweDAzCisjZGVmaW5lIERSTV9OT1VWRUFVX0dST0JKX0FMTE9DICAgICAgICAweDA0CisjZGVmaW5lIERSTV9OT1VWRUFVX05PVElGSUVST0JKX0FMTE9DICAweDA1CisjZGVmaW5lIERSTV9OT1VWRUFVX0dQVU9CSl9GUkVFICAgICAgICAweDA2CisjZGVmaW5lIERSTV9OT1VWRUFVX0dFTV9ORVcgICAgICAgICAgICAweDQwCisjZGVmaW5lIERSTV9OT1VWRUFVX0dFTV9QVVNIQlVGICAgICAgICAweDQxCisjZGVmaW5lIERSTV9OT1VWRUFVX0dFTV9DUFVfUFJFUCAgICAgICAweDQyCisjZGVmaW5lIERSTV9OT1VWRUFVX0dFTV9DUFVfRklOSSAgICAgICAweDQzCisjZGVmaW5lIERSTV9OT1VWRUFVX0dFTV9JTkZPICAgICAgICAgICAweDQ0CisKKyNkZWZpbmUgRFJNX0lPQ1RMX05PVVZFQVVfR0VUUEFSQU0gICAgICAgICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTk9VVkVBVV9HRVRQQVJBTSwgc3RydWN0IGRybV9ub3V2ZWF1X2dldHBhcmFtKQorI2RlZmluZSBEUk1fSU9DVExfTk9VVkVBVV9TRVRQQVJBTSAgICAgICAgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9OT1VWRUFVX1NFVFBBUkFNLCBzdHJ1Y3QgZHJtX25vdXZlYXVfc2V0cGFyYW0pCisjZGVmaW5lIERSTV9JT0NUTF9OT1VWRUFVX0NIQU5ORUxfQUxMT0MgICAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX05PVVZFQVVfQ0hBTk5FTF9BTExPQywgc3RydWN0IGRybV9ub3V2ZWF1X2NoYW5uZWxfYWxsb2MpCisjZGVmaW5lIERSTV9JT0NUTF9OT1VWRUFVX0NIQU5ORUxfRlJFRSAgICAgICBEUk1fSU9XIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX05PVVZFQVVfQ0hBTk5FTF9GUkVFLCBzdHJ1Y3QgZHJtX25vdXZlYXVfY2hhbm5lbF9mcmVlKQorI2RlZmluZSBEUk1fSU9DVExfTk9VVkVBVV9HUk9CSl9BTExPQyAgICAgICAgRFJNX0lPVyAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9OT1VWRUFVX0dST0JKX0FMTE9DLCBzdHJ1Y3QgZHJtX25vdXZlYXVfZ3JvYmpfYWxsb2MpCisjZGVmaW5lIERSTV9JT0NUTF9OT1VWRUFVX05PVElGSUVST0JKX0FMTE9DICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX05PVVZFQVVfTk9USUZJRVJPQkpfQUxMT0MsIHN0cnVjdCBkcm1fbm91dmVhdV9ub3RpZmllcm9ial9hbGxvYykKKyNkZWZpbmUgRFJNX0lPQ1RMX05PVVZFQVVfR1BVT0JKX0ZSRUUgICAgICAgIERSTV9JT1cgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTk9VVkVBVV9HUFVPQkpfRlJFRSwgc3RydWN0IGRybV9ub3V2ZWF1X2dwdW9ial9mcmVlKQorI2RlZmluZSBEUk1fSU9DVExfTk9VVkVBVV9HRU1fTkVXICAgICAgICAgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9OT1VWRUFVX0dFTV9ORVcsIHN0cnVjdCBkcm1fbm91dmVhdV9nZW1fbmV3KQorI2RlZmluZSBEUk1fSU9DVExfTk9VVkVBVV9HRU1fUFVTSEJVRiAgICAgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9OT1VWRUFVX0dFTV9QVVNIQlVGLCBzdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX3B1c2hidWYpCisjZGVmaW5lIERSTV9JT0NUTF9OT1VWRUFVX0dFTV9DUFVfUFJFUCAgICAgICBEUk1fSU9XIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX05PVVZFQVVfR0VNX0NQVV9QUkVQLCBzdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX2NwdV9wcmVwKQorI2RlZmluZSBEUk1fSU9DVExfTk9VVkVBVV9HRU1fQ1BVX0ZJTkkgICAgICAgRFJNX0lPVyAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9OT1VWRUFVX0dFTV9DUFVfRklOSSwgc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9jcHVfZmluaSkKKyNkZWZpbmUgRFJNX0lPQ1RMX05PVVZFQVVfR0VNX0lORk8gICAgICAgICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTk9VVkVBVV9HRU1fSU5GTywgc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9pbmZvKQorCisjZW5kaWYgLyogX19OT1VWRUFVX0RSTV9IX18gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9kcm0vcjEyOF9kcm0uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9kcm0vcjEyOF9kcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGU3OGZmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2RybS9yMTI4X2RybS5oCkBAIC0wLDAgKzEsMzI2IEBACisvKiByMTI4X2RybS5oIC0tIFB1YmxpYyBoZWFkZXIgZm9yIHRoZSByMTI4IGRyaXZlciAtKi0gbGludXgtYyAtKi0KKyAqIENyZWF0ZWQ6IFdlZCBBcHIgIDUgMTk6MjQ6MTkgMjAwMCBieSBrZXZpbkBwcmVjaXNpb25pbnNpZ2h0LmNvbQorICovCisvKgorICogQ29weXJpZ2h0IDIwMDAgUHJlY2lzaW9uIEluc2lnaHQsIEluYy4sIENlZGFyIFBhcmssIFRleGFzLgorICogQ29weXJpZ2h0IDIwMDAgVkEgTGludXggU3lzdGVtcywgSW5jLiwgU3Vubnl2YWxlLCBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogUFJFQ0lTSU9OIElOU0lHSFQgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIEdhcmV0aCBIdWdoZXMgPGdhcmV0aEB2YWxpbnV4LmNvbT4KKyAqICAgIEtldmluIEUuIE1hcnRpbiA8bWFydGluQHZhbGludXguY29tPgorICovCisKKyNpZm5kZWYgX19SMTI4X0RSTV9IX18KKyNkZWZpbmUgX19SMTI4X0RSTV9IX18KKworLyogV0FSTklORzogSWYgeW91IGNoYW5nZSBhbnkgb2YgdGhlc2UgZGVmaW5lcywgbWFrZSBzdXJlIHRvIGNoYW5nZSB0aGUKKyAqIGRlZmluZXMgaW4gdGhlIFggc2VydmVyIGZpbGUgKHIxMjhfc2FyZWEuaCkKKyAqLworI2lmbmRlZiBfX1IxMjhfU0FSRUFfREVGSU5FU19fCisjZGVmaW5lIF9fUjEyOF9TQVJFQV9ERUZJTkVTX18KKworLyogV2hhdCBuZWVkcyB0byBiZSBjaGFuZ2VkIGZvciB0aGUgY3VycmVudCB2ZXJ0ZXggYnVmZmVyPworICovCisjZGVmaW5lIFIxMjhfVVBMT0FEX0NPTlRFWFQJCTB4MDAxCisjZGVmaW5lIFIxMjhfVVBMT0FEX1NFVFVQCQkweDAwMgorI2RlZmluZSBSMTI4X1VQTE9BRF9URVgwCQkweDAwNAorI2RlZmluZSBSMTI4X1VQTE9BRF9URVgxCQkweDAwOAorI2RlZmluZSBSMTI4X1VQTE9BRF9URVgwSU1BR0VTCQkweDAxMAorI2RlZmluZSBSMTI4X1VQTE9BRF9URVgxSU1BR0VTCQkweDAyMAorI2RlZmluZSBSMTI4X1VQTE9BRF9DT1JFCQkweDA0MAorI2RlZmluZSBSMTI4X1VQTE9BRF9NQVNLUwkJMHgwODAKKyNkZWZpbmUgUjEyOF9VUExPQURfV0lORE9XCQkweDEwMAorI2RlZmluZSBSMTI4X1VQTE9BRF9DTElQUkVDVFMJCTB4MjAwCS8qIGhhbmRsZWQgY2xpZW50LXNpZGUgKi8KKyNkZWZpbmUgUjEyOF9SRVFVSVJFX1FVSUVTQ0VOQ0UJCTB4NDAwCisjZGVmaW5lIFIxMjhfVVBMT0FEX0FMTAkJCTB4N2ZmCisKKyNkZWZpbmUgUjEyOF9GUk9OVAkJCTB4MQorI2RlZmluZSBSMTI4X0JBQ0sJCQkweDIKKyNkZWZpbmUgUjEyOF9ERVBUSAkJCTB4NAorCisvKiBQcmltaXRpdmUgdHlwZXMKKyAqLworI2RlZmluZSBSMTI4X1BPSU5UUwkJCTB4MQorI2RlZmluZSBSMTI4X0xJTkVTCQkJMHgyCisjZGVmaW5lIFIxMjhfTElORV9TVFJJUAkJCTB4MworI2RlZmluZSBSMTI4X1RSSUFOR0xFUwkJCTB4NAorI2RlZmluZSBSMTI4X1RSSUFOR0xFX0ZBTgkJMHg1CisjZGVmaW5lIFIxMjhfVFJJQU5HTEVfU1RSSVAJCTB4NgorCisvKiBWZXJ0ZXgvaW5kaXJlY3QgYnVmZmVyIHNpemUKKyAqLworI2RlZmluZSBSMTI4X0JVRkZFUl9TSVpFCQkxNjM4NAorCisvKiBCeXRlIG9mZnNldHMgZm9yIGluZGlyZWN0IGJ1ZmZlciBkYXRhCisgKi8KKyNkZWZpbmUgUjEyOF9JTkRFWF9QUklNX09GRlNFVAkJMjAKKyNkZWZpbmUgUjEyOF9IT1NUREFUQV9CTElUX09GRlNFVAkzMgorCisvKiBLZWVwIHRoZXNlIHNtYWxsIGZvciB0ZXN0aW5nLgorICovCisjZGVmaW5lIFIxMjhfTlJfU0FSRUFfQ0xJUFJFQ1RTCQkxMgorCisvKiBUaGVyZSBhcmUgMiBoZWFwcyAobG9jYWwvQUdQKS4gIEVhY2ggcmVnaW9uIHdpdGhpbiBhIGhlYXAgaXMgYQorICogIG1pbmltdW0gb2YgNjRrLCBhbmQgdGhlcmUgYXJlIGF0IG1vc3QgNjQgb2YgdGhlbSBwZXIgaGVhcC4KKyAqLworI2RlZmluZSBSMTI4X0xPQ0FMX1RFWF9IRUFQCQkwCisjZGVmaW5lIFIxMjhfQUdQX1RFWF9IRUFQCQkxCisjZGVmaW5lIFIxMjhfTlJfVEVYX0hFQVBTCQkyCisjZGVmaW5lIFIxMjhfTlJfVEVYX1JFR0lPTlMJCTY0CisjZGVmaW5lIFIxMjhfTE9HX1RFWF9HUkFOVUxBUklUWQkxNgorCisjZGVmaW5lIFIxMjhfTlJfQ09OVEVYVF9SRUdTCQkxMgorCisjZGVmaW5lIFIxMjhfTUFYX1RFWFRVUkVfTEVWRUxTCQkxMQorI2RlZmluZSBSMTI4X01BWF9URVhUVVJFX1VOSVRTCQkyCisKKyNlbmRpZgkJCQkvKiBfX1IxMjhfU0FSRUFfREVGSU5FU19fICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwkvKiBDb250ZXh0IHN0YXRlIC0gY2FuIGJlIHdyaXR0ZW4gaW4gb25lIGxhcmdlIGNodW5rICovCisJdW5zaWduZWQgaW50IGRzdF9waXRjaF9vZmZzZXRfYzsKKwl1bnNpZ25lZCBpbnQgZHBfZ3VpX21hc3Rlcl9jbnRsX2M7CisJdW5zaWduZWQgaW50IHNjX3RvcF9sZWZ0X2M7CisJdW5zaWduZWQgaW50IHNjX2JvdHRvbV9yaWdodF9jOworCXVuc2lnbmVkIGludCB6X29mZnNldF9jOworCXVuc2lnbmVkIGludCB6X3BpdGNoX2M7CisJdW5zaWduZWQgaW50IHpfc3Rlbl9jbnRsX2M7CisJdW5zaWduZWQgaW50IHRleF9jbnRsX2M7CisJdW5zaWduZWQgaW50IG1pc2NfM2Rfc3RhdGVfY250bF9yZWc7CisJdW5zaWduZWQgaW50IHRleHR1cmVfY2xyX2NtcF9jbHJfYzsKKwl1bnNpZ25lZCBpbnQgdGV4dHVyZV9jbHJfY21wX21za19jOworCXVuc2lnbmVkIGludCBmb2dfY29sb3JfYzsKKworCS8qIFRleHR1cmUgc3RhdGUgKi8KKwl1bnNpZ25lZCBpbnQgdGV4X3NpemVfcGl0Y2hfYzsKKwl1bnNpZ25lZCBpbnQgY29uc3RhbnRfY29sb3JfYzsKKworCS8qIFNldHVwIHN0YXRlICovCisJdW5zaWduZWQgaW50IHBtNF92Y19mcHVfc2V0dXA7CisJdW5zaWduZWQgaW50IHNldHVwX2NudGw7CisKKwkvKiBNYXNrIHN0YXRlICovCisJdW5zaWduZWQgaW50IGRwX3dyaXRlX21hc2s7CisJdW5zaWduZWQgaW50IHN0ZW5fcmVmX21hc2tfYzsKKwl1bnNpZ25lZCBpbnQgcGxhbmVfM2RfbWFza19jOworCisJLyogV2luZG93IHN0YXRlICovCisJdW5zaWduZWQgaW50IHdpbmRvd194eV9vZmZzZXQ7CisKKwkvKiBDb3JlIHN0YXRlICovCisJdW5zaWduZWQgaW50IHNjYWxlXzNkX2NudGw7Cit9IGRybV9yMTI4X2NvbnRleHRfcmVnc190OworCisvKiBTZXR1cCByZWdpc3RlcnMgZm9yIGVhY2ggdGV4dHVyZSB1bml0CisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgdGV4X2NudGw7CisJdW5zaWduZWQgaW50IHRleF9jb21iaW5lX2NudGw7CisJdW5zaWduZWQgaW50IHRleF9zaXplX3BpdGNoOworCXVuc2lnbmVkIGludCB0ZXhfb2Zmc2V0W1IxMjhfTUFYX1RFWFRVUkVfTEVWRUxTXTsKKwl1bnNpZ25lZCBpbnQgdGV4X2JvcmRlcl9jb2xvcjsKK30gZHJtX3IxMjhfdGV4dHVyZV9yZWdzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGRybV9yMTI4X3NhcmVhIHsKKwkvKiBUaGUgY2hhbm5lbCBmb3IgY29tbXVuaWNhdGlvbiBvZiBzdGF0ZSBpbmZvcm1hdGlvbiB0byB0aGUga2VybmVsCisJICogb24gZmlyaW5nIGEgdmVydGV4IGJ1ZmZlci4KKwkgKi8KKwlkcm1fcjEyOF9jb250ZXh0X3JlZ3NfdCBjb250ZXh0X3N0YXRlOworCWRybV9yMTI4X3RleHR1cmVfcmVnc190IHRleF9zdGF0ZVtSMTI4X01BWF9URVhUVVJFX1VOSVRTXTsKKwl1bnNpZ25lZCBpbnQgZGlydHk7CisJdW5zaWduZWQgaW50IHZlcnRzaXplOworCXVuc2lnbmVkIGludCB2Y19mb3JtYXQ7CisKKwkvKiBUaGUgY3VycmVudCBjbGlwcmVjdHMsIG9yIGEgc3Vic2V0IHRoZXJlb2YuCisJICovCisJc3RydWN0IGRybV9jbGlwX3JlY3QgYm94ZXNbUjEyOF9OUl9TQVJFQV9DTElQUkVDVFNdOworCXVuc2lnbmVkIGludCBuYm94OworCisJLyogQ291bnRlcnMgZm9yIGNsaWVudC1zaWRlIHRocm90dGxpbmcgb2YgcmVuZGVyaW5nIGNsaWVudHMuCisJICovCisJdW5zaWduZWQgaW50IGxhc3RfZnJhbWU7CisJdW5zaWduZWQgaW50IGxhc3RfZGlzcGF0Y2g7CisKKwlzdHJ1Y3QgZHJtX3RleF9yZWdpb24gdGV4X2xpc3RbUjEyOF9OUl9URVhfSEVBUFNdW1IxMjhfTlJfVEVYX1JFR0lPTlMgKyAxXTsKKwl1bnNpZ25lZCBpbnQgdGV4X2FnZVtSMTI4X05SX1RFWF9IRUFQU107CisJaW50IGN0eF9vd25lcjsKKwlpbnQgcGZBbGxvd1BhZ2VGbGlwOwkvKiBudW1iZXIgb2YgM2Qgd2luZG93cyAoMCwxLDIgb3IgbW9yZSkgKi8KKwlpbnQgcGZDdXJyZW50UGFnZTsJLyogd2hpY2ggYnVmZmVyIGlzIGJlaW5nIGRpc3BsYXllZD8gKi8KK30gZHJtX3IxMjhfc2FyZWFfdDsKKworLyogV0FSTklORzogSWYgeW91IGNoYW5nZSBhbnkgb2YgdGhlc2UgZGVmaW5lcywgbWFrZSBzdXJlIHRvIGNoYW5nZSB0aGUKKyAqIGRlZmluZXMgaW4gdGhlIFhzZXJ2ZXIgZmlsZSAoeGY4NmRybVIxMjguaCkKKyAqLworCisvKiBSYWdlIDEyOCBzcGVjaWZpYyBpb2N0bHMKKyAqIFRoZSBkZXZpY2Ugc3BlY2lmaWMgaW9jdGwgcmFuZ2UgaXMgMHg0MCB0byAweDc5LgorICovCisjZGVmaW5lIERSTV9SMTI4X0lOSVQgICAgICAgMHgwMAorI2RlZmluZSBEUk1fUjEyOF9DQ0VfU1RBUlQgIDB4MDEKKyNkZWZpbmUgRFJNX1IxMjhfQ0NFX1NUT1AgICAweDAyCisjZGVmaW5lIERSTV9SMTI4X0NDRV9SRVNFVCAgMHgwMworI2RlZmluZSBEUk1fUjEyOF9DQ0VfSURMRSAgIDB4MDQKKy8qIDB4MDUgbm90IHVzZWQgKi8KKyNkZWZpbmUgRFJNX1IxMjhfUkVTRVQgICAgICAweDA2CisjZGVmaW5lIERSTV9SMTI4X1NXQVAgICAgICAgMHgwNworI2RlZmluZSBEUk1fUjEyOF9DTEVBUiAgICAgIDB4MDgKKyNkZWZpbmUgRFJNX1IxMjhfVkVSVEVYICAgICAweDA5CisjZGVmaW5lIERSTV9SMTI4X0lORElDRVMgICAgMHgwYQorI2RlZmluZSBEUk1fUjEyOF9CTElUICAgICAgIDB4MGIKKyNkZWZpbmUgRFJNX1IxMjhfREVQVEggICAgICAweDBjCisjZGVmaW5lIERSTV9SMTI4X1NUSVBQTEUgICAgMHgwZAorLyogMHgwZSBub3QgdXNlZCAqLworI2RlZmluZSBEUk1fUjEyOF9JTkRJUkVDVCAgIDB4MGYKKyNkZWZpbmUgRFJNX1IxMjhfRlVMTFNDUkVFTiAweDEwCisjZGVmaW5lIERSTV9SMTI4X0NMRUFSMiAgICAgMHgxMQorI2RlZmluZSBEUk1fUjEyOF9HRVRQQVJBTSAgIDB4MTIKKyNkZWZpbmUgRFJNX1IxMjhfRkxJUCAgICAgICAweDEzCisKKyNkZWZpbmUgRFJNX0lPQ1RMX1IxMjhfSU5JVCAgICAgICBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1IxMjhfSU5JVCwgZHJtX3IxMjhfaW5pdF90KQorI2RlZmluZSBEUk1fSU9DVExfUjEyOF9DQ0VfU1RBUlQgIERSTV9JTyggIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUjEyOF9DQ0VfU1RBUlQpCisjZGVmaW5lIERSTV9JT0NUTF9SMTI4X0NDRV9TVE9QICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SMTI4X0NDRV9TVE9QLCBkcm1fcjEyOF9jY2Vfc3RvcF90KQorI2RlZmluZSBEUk1fSU9DVExfUjEyOF9DQ0VfUkVTRVQgIERSTV9JTyggIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUjEyOF9DQ0VfUkVTRVQpCisjZGVmaW5lIERSTV9JT0NUTF9SMTI4X0NDRV9JRExFICAgRFJNX0lPKCAgRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SMTI4X0NDRV9JRExFKQorLyogMHgwNSBub3QgdXNlZCAqLworI2RlZmluZSBEUk1fSU9DVExfUjEyOF9SRVNFVCAgICAgIERSTV9JTyggIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUjEyOF9SRVNFVCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1IxMjhfU1dBUCAgICAgICBEUk1fSU8oICBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1IxMjhfU1dBUCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1IxMjhfQ0xFQVIgICAgICBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1IxMjhfQ0xFQVIsIGRybV9yMTI4X2NsZWFyX3QpCisjZGVmaW5lIERSTV9JT0NUTF9SMTI4X1ZFUlRFWCAgICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SMTI4X1ZFUlRFWCwgZHJtX3IxMjhfdmVydGV4X3QpCisjZGVmaW5lIERSTV9JT0NUTF9SMTI4X0lORElDRVMgICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SMTI4X0lORElDRVMsIGRybV9yMTI4X2luZGljZXNfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1IxMjhfQkxJVCAgICAgICBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1IxMjhfQkxJVCwgZHJtX3IxMjhfYmxpdF90KQorI2RlZmluZSBEUk1fSU9DVExfUjEyOF9ERVBUSCAgICAgIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUjEyOF9ERVBUSCwgZHJtX3IxMjhfZGVwdGhfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1IxMjhfU1RJUFBMRSAgICBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1IxMjhfU1RJUFBMRSwgZHJtX3IxMjhfc3RpcHBsZV90KQorLyogMHgwZSBub3QgdXNlZCAqLworI2RlZmluZSBEUk1fSU9DVExfUjEyOF9JTkRJUkVDVCAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUjEyOF9JTkRJUkVDVCwgZHJtX3IxMjhfaW5kaXJlY3RfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1IxMjhfRlVMTFNDUkVFTiBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1IxMjhfRlVMTFNDUkVFTiwgZHJtX3IxMjhfZnVsbHNjcmVlbl90KQorI2RlZmluZSBEUk1fSU9DVExfUjEyOF9DTEVBUjIgICAgIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUjEyOF9DTEVBUjIsIGRybV9yMTI4X2NsZWFyMl90KQorI2RlZmluZSBEUk1fSU9DVExfUjEyOF9HRVRQQVJBTSAgIERSTV9JT1dSKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1IxMjhfR0VUUEFSQU0sIGRybV9yMTI4X2dldHBhcmFtX3QpCisjZGVmaW5lIERSTV9JT0NUTF9SMTI4X0ZMSVAgICAgICAgRFJNX0lPKCAgRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SMTI4X0ZMSVApCisKK3R5cGVkZWYgc3RydWN0IGRybV9yMTI4X2luaXQgeworCWVudW0geworCQlSMTI4X0lOSVRfQ0NFID0gMHgwMSwKKwkJUjEyOF9DTEVBTlVQX0NDRSA9IDB4MDIKKwl9IGZ1bmM7CisJdW5zaWduZWQgbG9uZyBzYXJlYV9wcml2X29mZnNldDsKKwlpbnQgaXNfcGNpOworCWludCBjY2VfbW9kZTsKKwlpbnQgY2NlX3NlY3VyZTsKKwlpbnQgcmluZ19zaXplOworCWludCB1c2VjX3RpbWVvdXQ7CisKKwl1bnNpZ25lZCBpbnQgZmJfYnBwOworCXVuc2lnbmVkIGludCBmcm9udF9vZmZzZXQsIGZyb250X3BpdGNoOworCXVuc2lnbmVkIGludCBiYWNrX29mZnNldCwgYmFja19waXRjaDsKKwl1bnNpZ25lZCBpbnQgZGVwdGhfYnBwOworCXVuc2lnbmVkIGludCBkZXB0aF9vZmZzZXQsIGRlcHRoX3BpdGNoOworCXVuc2lnbmVkIGludCBzcGFuX29mZnNldDsKKworCXVuc2lnbmVkIGxvbmcgZmJfb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgbW1pb19vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyByaW5nX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIHJpbmdfcnB0cl9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBidWZmZXJzX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIGFncF90ZXh0dXJlc19vZmZzZXQ7Cit9IGRybV9yMTI4X2luaXRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZHJtX3IxMjhfY2NlX3N0b3AgeworCWludCBmbHVzaDsKKwlpbnQgaWRsZTsKK30gZHJtX3IxMjhfY2NlX3N0b3BfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZHJtX3IxMjhfY2xlYXIgeworCXVuc2lnbmVkIGludCBmbGFnczsKKwl1bnNpZ25lZCBpbnQgY2xlYXJfY29sb3I7CisJdW5zaWduZWQgaW50IGNsZWFyX2RlcHRoOworCXVuc2lnbmVkIGludCBjb2xvcl9tYXNrOworCXVuc2lnbmVkIGludCBkZXB0aF9tYXNrOworfSBkcm1fcjEyOF9jbGVhcl90OworCit0eXBlZGVmIHN0cnVjdCBkcm1fcjEyOF92ZXJ0ZXggeworCWludCBwcmltOworCWludCBpZHg7CQkvKiBJbmRleCBvZiB2ZXJ0ZXggYnVmZmVyICovCisJaW50IGNvdW50OwkJLyogTnVtYmVyIG9mIHZlcnRpY2VzIGluIGJ1ZmZlciAqLworCWludCBkaXNjYXJkOwkJLyogQ2xpZW50IGZpbmlzaGVkIHdpdGggYnVmZmVyPyAqLworfSBkcm1fcjEyOF92ZXJ0ZXhfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZHJtX3IxMjhfaW5kaWNlcyB7CisJaW50IHByaW07CisJaW50IGlkeDsKKwlpbnQgc3RhcnQ7CisJaW50IGVuZDsKKwlpbnQgZGlzY2FyZDsJCS8qIENsaWVudCBmaW5pc2hlZCB3aXRoIGJ1ZmZlcj8gKi8KK30gZHJtX3IxMjhfaW5kaWNlc190OworCit0eXBlZGVmIHN0cnVjdCBkcm1fcjEyOF9ibGl0IHsKKwlpbnQgaWR4OworCWludCBwaXRjaDsKKwlpbnQgb2Zmc2V0OworCWludCBmb3JtYXQ7CisJdW5zaWduZWQgc2hvcnQgeCwgeTsKKwl1bnNpZ25lZCBzaG9ydCB3aWR0aCwgaGVpZ2h0OworfSBkcm1fcjEyOF9ibGl0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGRybV9yMTI4X2RlcHRoIHsKKwllbnVtIHsKKwkJUjEyOF9XUklURV9TUEFOID0gMHgwMSwKKwkJUjEyOF9XUklURV9QSVhFTFMgPSAweDAyLAorCQlSMTI4X1JFQURfU1BBTiA9IDB4MDMsCisJCVIxMjhfUkVBRF9QSVhFTFMgPSAweDA0CisJfSBmdW5jOworCWludCBuOworCWludCAqeDsKKwlpbnQgKnk7CisJdW5zaWduZWQgaW50ICpidWZmZXI7CisJdW5zaWduZWQgY2hhciAqbWFzazsKK30gZHJtX3IxMjhfZGVwdGhfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZHJtX3IxMjhfc3RpcHBsZSB7CisJdW5zaWduZWQgaW50ICptYXNrOworfSBkcm1fcjEyOF9zdGlwcGxlX3Q7CisKK3R5cGVkZWYgc3RydWN0IGRybV9yMTI4X2luZGlyZWN0IHsKKwlpbnQgaWR4OworCWludCBzdGFydDsKKwlpbnQgZW5kOworCWludCBkaXNjYXJkOworfSBkcm1fcjEyOF9pbmRpcmVjdF90OworCit0eXBlZGVmIHN0cnVjdCBkcm1fcjEyOF9mdWxsc2NyZWVuIHsKKwllbnVtIHsKKwkJUjEyOF9JTklUX0ZVTExTQ1JFRU4gPSAweDAxLAorCQlSMTI4X0NMRUFOVVBfRlVMTFNDUkVFTiA9IDB4MDIKKwl9IGZ1bmM7Cit9IGRybV9yMTI4X2Z1bGxzY3JlZW5fdDsKKworLyogMi4zOiBBbiBpb2N0bCB0byBnZXQgcGFyYW1ldGVycyB0aGF0IGFyZW4ndCBhdmFpbGFibGUgdG8gdGhlIDNkCisgKiBjbGllbnQgYW55IG90aGVyIHdheS4KKyAqLworI2RlZmluZSBSMTI4X1BBUkFNX0lSUV9OUiAgICAgICAgICAgIDEKKwordHlwZWRlZiBzdHJ1Y3QgZHJtX3IxMjhfZ2V0cGFyYW0geworCWludCBwYXJhbTsKKwl2b2lkICp2YWx1ZTsKK30gZHJtX3IxMjhfZ2V0cGFyYW1fdDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NTgyNmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaApAQCAtMCwwICsxLDkxNiBAQAorLyogcmFkZW9uX2RybS5oIC0tIFB1YmxpYyBoZWFkZXIgZm9yIHRoZSByYWRlb24gZHJpdmVyIC0qLSBsaW51eC1jIC0qLQorICoKKyAqIENvcHlyaWdodCAyMDAwIFByZWNpc2lvbiBJbnNpZ2h0LCBJbmMuLCBDZWRhciBQYXJrLCBUZXhhcy4KKyAqIENvcHlyaWdodCAyMDAwIFZBIExpbnV4IFN5c3RlbXMsIEluYy4sIEZyZW1vbnQsIENhbGlmb3JuaWEuCisgKiBDb3B5cmlnaHQgMjAwMiBUdW5nc3RlbiBHcmFwaGljcywgSW5jLiwgQ2VkYXIgUGFyaywgVGV4YXMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBQUkVDSVNJT04gSU5TSUdIVCBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgS2V2aW4gRS4gTWFydGluIDxtYXJ0aW5AdmFsaW51eC5jb20+CisgKiAgICBHYXJldGggSHVnaGVzIDxnYXJldGhAdmFsaW51eC5jb20+CisgKiAgICBLZWl0aCBXaGl0d2VsbCA8a2VpdGhAdHVuZ3N0ZW5ncmFwaGljcy5jb20+CisgKi8KKworI2lmbmRlZiBfX1JBREVPTl9EUk1fSF9fCisjZGVmaW5lIF9fUkFERU9OX0RSTV9IX18KKworI2luY2x1ZGUgImRybS5oIgorCisvKiBXQVJOSU5HOiBJZiB5b3UgY2hhbmdlIGFueSBvZiB0aGVzZSBkZWZpbmVzLCBtYWtlIHN1cmUgdG8gY2hhbmdlIHRoZQorICogZGVmaW5lcyBpbiB0aGUgWCBzZXJ2ZXIgZmlsZSAocmFkZW9uX3NhcmVhLmgpCisgKi8KKyNpZm5kZWYgX19SQURFT05fU0FSRUFfREVGSU5FU19fCisjZGVmaW5lIF9fUkFERU9OX1NBUkVBX0RFRklORVNfXworCisvKiBPbGQgc3R5bGUgc3RhdGUgZmxhZ3MsIHJlcXVpcmVkIGZvciBzYXJlYSBpbnRlcmZhY2UgKDEuMSBhbmQgMS4yCisgKiBjbGVhcnMpIGFuZCAxLjIgZHJtX3ZlcnRleDIgaW9jdGwuCisgKi8KKyNkZWZpbmUgUkFERU9OX1VQTE9BRF9DT05URVhUCQkweDAwMDAwMDAxCisjZGVmaW5lIFJBREVPTl9VUExPQURfVkVSVEZNVAkJMHgwMDAwMDAwMgorI2RlZmluZSBSQURFT05fVVBMT0FEX0xJTkUJCTB4MDAwMDAwMDQKKyNkZWZpbmUgUkFERU9OX1VQTE9BRF9CVU1QTUFQCQkweDAwMDAwMDA4CisjZGVmaW5lIFJBREVPTl9VUExPQURfTUFTS1MJCTB4MDAwMDAwMTAKKyNkZWZpbmUgUkFERU9OX1VQTE9BRF9WSUVXUE9SVAkJMHgwMDAwMDAyMAorI2RlZmluZSBSQURFT05fVVBMT0FEX1NFVFVQCQkweDAwMDAwMDQwCisjZGVmaW5lIFJBREVPTl9VUExPQURfVENMCQkweDAwMDAwMDgwCisjZGVmaW5lIFJBREVPTl9VUExPQURfTUlTQwkJMHgwMDAwMDEwMAorI2RlZmluZSBSQURFT05fVVBMT0FEX1RFWDAJCTB4MDAwMDAyMDAKKyNkZWZpbmUgUkFERU9OX1VQTE9BRF9URVgxCQkweDAwMDAwNDAwCisjZGVmaW5lIFJBREVPTl9VUExPQURfVEVYMgkJMHgwMDAwMDgwMAorI2RlZmluZSBSQURFT05fVVBMT0FEX1RFWDBJTUFHRVMJMHgwMDAwMTAwMAorI2RlZmluZSBSQURFT05fVVBMT0FEX1RFWDFJTUFHRVMJMHgwMDAwMjAwMAorI2RlZmluZSBSQURFT05fVVBMT0FEX1RFWDJJTUFHRVMJMHgwMDAwNDAwMAorI2RlZmluZSBSQURFT05fVVBMT0FEX0NMSVBSRUNUUwkJMHgwMDAwODAwMAkvKiBoYW5kbGVkIGNsaWVudC1zaWRlICovCisjZGVmaW5lIFJBREVPTl9SRVFVSVJFX1FVSUVTQ0VOQ0UJMHgwMDAxMDAwMAorI2RlZmluZSBSQURFT05fVVBMT0FEX1pCSUFTCQkweDAwMDIwMDAwCS8qIHZlcnNpb24gMS4yIGFuZCBuZXdlciAqLworI2RlZmluZSBSQURFT05fVVBMT0FEX0FMTAkJMHgwMDNlZmZmZgorI2RlZmluZSBSQURFT05fVVBMT0FEX0NPTlRFWFRfQUxMICAgICAgIDB4MDAzZTAxZmYKKworLyogTmV3IHN0eWxlIHBlci1wYWNrZXQgaWRlbnRpZmllcnMgZm9yIHVzZSBpbiBjbWRfYnVmZmVyIGlvY3RsIHdpdGgKKyAqIHRoZSBSQURFT05fRU1JVF9QQUNLRVQgY29tbWFuZC4gIENvbW1lbnRzIHJlbGF0ZSBuZXcgcGFja2V0cyB0byBvbGQKKyAqIHN0YXRlIGJpdHMgYW5kIHRoZSBwYWNrZXQgc2l6ZToKKyAqLworI2RlZmluZSBSQURFT05fRU1JVF9QUF9NSVNDICAgICAgICAgICAgICAgICAgICAgICAgIDAJLyogY29udGV4dC83ICovCisjZGVmaW5lIFJBREVPTl9FTUlUX1BQX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBjb250ZXh0LzMgKi8KKyNkZWZpbmUgUkFERU9OX0VNSVRfUkIzRF9DT0xPUlBJVENIICAgICAgICAgICAgICAgICAyCS8qIGNvbnRleHQvMSAqLworI2RlZmluZSBSQURFT05fRU1JVF9SRV9MSU5FX1BBVFRFUk4gICAgICAgICAgICAgICAgIDMJLyogbGluZS8yICovCisjZGVmaW5lIFJBREVPTl9FTUlUX1NFX0xJTkVfV0lEVEggICAgICAgICAgICAgICAgICAgNAkvKiBsaW5lLzEgKi8KKyNkZWZpbmUgUkFERU9OX0VNSVRfUFBfTFVNX01BVFJJWCAgICAgICAgICAgICAgICAgICA1CS8qIGJ1bXBtYXAvMSAqLworI2RlZmluZSBSQURFT05fRU1JVF9QUF9ST1RfTUFUUklYXzAgICAgICAgICAgICAgICAgIDYJLyogYnVtcG1hcC8yICovCisjZGVmaW5lIFJBREVPTl9FTUlUX1JCM0RfU1RFTkNJTFJFRk1BU0sgICAgICAgICAgICAgNwkvKiBtYXNrcy8zICovCisjZGVmaW5lIFJBREVPTl9FTUlUX1NFX1ZQT1JUX1hTQ0FMRSAgICAgICAgICAgICAgICAgOAkvKiB2aWV3cG9ydC82ICovCisjZGVmaW5lIFJBREVPTl9FTUlUX1NFX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgOQkvKiBzZXR1cC8yICovCisjZGVmaW5lIFJBREVPTl9FTUlUX1NFX0NOVExfU1RBVFVTICAgICAgICAgICAgICAgICAgMTAJLyogc2V0dXAvMSAqLworI2RlZmluZSBSQURFT05fRU1JVF9SRV9NSVNDICAgICAgICAgICAgICAgICAgICAgICAgIDExCS8qIG1pc2MvMSAqLworI2RlZmluZSBSQURFT05fRU1JVF9QUF9UWEZJTFRFUl8wICAgICAgICAgICAgICAgICAgIDEyCS8qIHRleDAvNiAqLworI2RlZmluZSBSQURFT05fRU1JVF9QUF9CT1JERVJfQ09MT1JfMCAgICAgICAgICAgICAgIDEzCS8qIHRleDAvMSAqLworI2RlZmluZSBSQURFT05fRU1JVF9QUF9UWEZJTFRFUl8xICAgICAgICAgICAgICAgICAgIDE0CS8qIHRleDEvNiAqLworI2RlZmluZSBSQURFT05fRU1JVF9QUF9CT1JERVJfQ09MT1JfMSAgICAgICAgICAgICAgIDE1CS8qIHRleDEvMSAqLworI2RlZmluZSBSQURFT05fRU1JVF9QUF9UWEZJTFRFUl8yICAgICAgICAgICAgICAgICAgIDE2CS8qIHRleDIvNiAqLworI2RlZmluZSBSQURFT05fRU1JVF9QUF9CT1JERVJfQ09MT1JfMiAgICAgICAgICAgICAgIDE3CS8qIHRleDIvMSAqLworI2RlZmluZSBSQURFT05fRU1JVF9TRV9aQklBU19GQUNUT1IgICAgICAgICAgICAgICAgIDE4CS8qIHpiaWFzLzIgKi8KKyNkZWZpbmUgUkFERU9OX0VNSVRfU0VfVENMX09VVFBVVF9WVFhfRk1UICAgICAgICAgICAxOQkvKiB0Y2wvMTEgKi8KKyNkZWZpbmUgUkFERU9OX0VNSVRfU0VfVENMX01BVEVSSUFMX0VNTUlTU0lWRV9SRUQgICAyMAkvKiBtYXRlcmlhbC8xNyAqLworI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhDQkxFTkRfMCAgICAgICAgICAgICAgICAgICAgIDIxCS8qIHRleDAvNCAqLworI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhDQkxFTkRfMSAgICAgICAgICAgICAgICAgICAgIDIyCS8qIHRleDEvNCAqLworI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhDQkxFTkRfMiAgICAgICAgICAgICAgICAgICAgIDIzCS8qIHRleDIvNCAqLworI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhDQkxFTkRfMyAgICAgICAgICAgICAgICAgICAgIDI0CS8qIHRleDMvNCAqLworI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhDQkxFTkRfNCAgICAgICAgICAgICAgICAgICAgIDI1CS8qIHRleDQvNCAqLworI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhDQkxFTkRfNSAgICAgICAgICAgICAgICAgICAgIDI2CS8qIHRleDUvNCAqLworI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhDQkxFTkRfNiAgICAgICAgICAgICAgICAgICAgIDI3CS8qIC80ICovCisjZGVmaW5lIFIyMDBfRU1JVF9QUF9UWENCTEVORF83ICAgICAgICAgICAgICAgICAgICAgMjgJLyogLzQgKi8KKyNkZWZpbmUgUjIwMF9FTUlUX1RDTF9MSUdIVF9NT0RFTF9DVExfMCAgICAgICAgICAgICAyOQkvKiB0Y2wvNyAqLworI2RlZmluZSBSMjAwX0VNSVRfVEZBQ1RPUl8wICAgICAgICAgICAgICAgICAgICAgICAgIDMwCS8qIHRmLzcgKi8KKyNkZWZpbmUgUjIwMF9FTUlUX1ZUWF9GTVRfMCAgICAgICAgICAgICAgICAgICAgICAgICAzMQkvKiB2dHgvNSAqLworI2RlZmluZSBSMjAwX0VNSVRfVkFQX0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCS8qIHZhcC8xICovCisjZGVmaW5lIFIyMDBfRU1JVF9NQVRSSVhfU0VMRUNUXzAgICAgICAgICAgICAgICAgICAgMzMJLyogbXNsLzUgKi8KKyNkZWZpbmUgUjIwMF9FTUlUX1RFWF9QUk9DX0NUTF8yICAgICAgICAgICAgICAgICAgICAzNAkvKiB0Y2cvNSAqLworI2RlZmluZSBSMjAwX0VNSVRfVENMX1VDUF9WRVJUX0JMRU5EX0NUTCAgICAgICAgICAgIDM1CS8qIHRjbC8xICovCisjZGVmaW5lIFIyMDBfRU1JVF9QUF9UWEZJTFRFUl8wICAgICAgICAgICAgICAgICAgICAgMzYJLyogdGV4MC82ICovCisjZGVmaW5lIFIyMDBfRU1JVF9QUF9UWEZJTFRFUl8xICAgICAgICAgICAgICAgICAgICAgMzcJLyogdGV4MS82ICovCisjZGVmaW5lIFIyMDBfRU1JVF9QUF9UWEZJTFRFUl8yICAgICAgICAgICAgICAgICAgICAgMzgJLyogdGV4Mi82ICovCisjZGVmaW5lIFIyMDBfRU1JVF9QUF9UWEZJTFRFUl8zICAgICAgICAgICAgICAgICAgICAgMzkJLyogdGV4My82ICovCisjZGVmaW5lIFIyMDBfRU1JVF9QUF9UWEZJTFRFUl80ICAgICAgICAgICAgICAgICAgICAgNDAJLyogdGV4NC82ICovCisjZGVmaW5lIFIyMDBfRU1JVF9QUF9UWEZJTFRFUl81ICAgICAgICAgICAgICAgICAgICAgNDEJLyogdGV4NS82ICovCisjZGVmaW5lIFIyMDBfRU1JVF9QUF9UWE9GRlNFVF8wICAgICAgICAgICAgICAgICAgICAgNDIJLyogdGV4MC8xICovCisjZGVmaW5lIFIyMDBfRU1JVF9QUF9UWE9GRlNFVF8xICAgICAgICAgICAgICAgICAgICAgNDMJLyogdGV4MS8xICovCisjZGVmaW5lIFIyMDBfRU1JVF9QUF9UWE9GRlNFVF8yICAgICAgICAgICAgICAgICAgICAgNDQJLyogdGV4Mi8xICovCisjZGVmaW5lIFIyMDBfRU1JVF9QUF9UWE9GRlNFVF8zICAgICAgICAgICAgICAgICAgICAgNDUJLyogdGV4My8xICovCisjZGVmaW5lIFIyMDBfRU1JVF9QUF9UWE9GRlNFVF80ICAgICAgICAgICAgICAgICAgICAgNDYJLyogdGV4NC8xICovCisjZGVmaW5lIFIyMDBfRU1JVF9QUF9UWE9GRlNFVF81ICAgICAgICAgICAgICAgICAgICAgNDcJLyogdGV4NS8xICovCisjZGVmaW5lIFIyMDBfRU1JVF9WVEVfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgNDgJLyogdnRlLzEgKi8KKyNkZWZpbmUgUjIwMF9FTUlUX09VVFBVVF9WVFhfQ09NUF9TRUwgICAgICAgICAgICAgICA0OQkvKiB2dHgvMSAqLworI2RlZmluZSBSMjAwX0VNSVRfUFBfVEFNX0RFQlVHMyAgICAgICAgICAgICAgICAgICAgIDUwCS8qIHRhbS8xICovCisjZGVmaW5lIFIyMDBfRU1JVF9QUF9DTlRMX1ggICAgICAgICAgICAgICAgICAgICAgICAgNTEJLyogY3N0LzEgKi8KKyNkZWZpbmUgUjIwMF9FTUlUX1JCM0RfREVQVEhYWV9PRkZTRVQgICAgICAgICAgICAgICA1MgkvKiBjc3QvMSAqLworI2RlZmluZSBSMjAwX0VNSVRfUkVfQVVYX1NDSVNTT1JfQ05UTCAgICAgICAgICAgICAgIDUzCS8qIGNzdC8xICovCisjZGVmaW5lIFIyMDBfRU1JVF9SRV9TQ0lTU09SX1RMXzAgICAgICAgICAgICAgICAgICAgNTQJLyogY3N0LzIgKi8KKyNkZWZpbmUgUjIwMF9FTUlUX1JFX1NDSVNTT1JfVExfMSAgICAgICAgICAgICAgICAgICA1NQkvKiBjc3QvMiAqLworI2RlZmluZSBSMjAwX0VNSVRfUkVfU0NJU1NPUl9UTF8yICAgICAgICAgICAgICAgICAgIDU2CS8qIGNzdC8yICovCisjZGVmaW5lIFIyMDBfRU1JVF9TRV9WQVBfQ05UTF9TVEFUVVMgICAgICAgICAgICAgICAgNTcJLyogY3N0LzEgKi8KKyNkZWZpbmUgUjIwMF9FTUlUX1NFX1ZUWF9TVEFURV9DTlRMICAgICAgICAgICAgICAgICA1OAkvKiBjc3QvMSAqLworI2RlZmluZSBSMjAwX0VNSVRfUkVfUE9JTlRTSVpFICAgICAgICAgICAgICAgICAgICAgIDU5CS8qIGNzdC8xICovCisjZGVmaW5lIFIyMDBfRU1JVF9UQ0xfSU5QVVRfVlRYX1ZFQ1RPUl9BRERSXzAgICAgICAgNjAJLyogY3N0LzQgKi8KKyNkZWZpbmUgUjIwMF9FTUlUX1BQX0NVQklDX0ZBQ0VTXzAgICAgICAgICAgICAgICAgICA2MQorI2RlZmluZSBSMjAwX0VNSVRfUFBfQ1VCSUNfT0ZGU0VUU18wICAgICAgICAgICAgICAgIDYyCisjZGVmaW5lIFIyMDBfRU1JVF9QUF9DVUJJQ19GQUNFU18xICAgICAgICAgICAgICAgICAgNjMKKyNkZWZpbmUgUjIwMF9FTUlUX1BQX0NVQklDX09GRlNFVFNfMSAgICAgICAgICAgICAgICA2NAorI2RlZmluZSBSMjAwX0VNSVRfUFBfQ1VCSUNfRkFDRVNfMiAgICAgICAgICAgICAgICAgIDY1CisjZGVmaW5lIFIyMDBfRU1JVF9QUF9DVUJJQ19PRkZTRVRTXzIgICAgICAgICAgICAgICAgNjYKKyNkZWZpbmUgUjIwMF9FTUlUX1BQX0NVQklDX0ZBQ0VTXzMgICAgICAgICAgICAgICAgICA2NworI2RlZmluZSBSMjAwX0VNSVRfUFBfQ1VCSUNfT0ZGU0VUU18zICAgICAgICAgICAgICAgIDY4CisjZGVmaW5lIFIyMDBfRU1JVF9QUF9DVUJJQ19GQUNFU180ICAgICAgICAgICAgICAgICAgNjkKKyNkZWZpbmUgUjIwMF9FTUlUX1BQX0NVQklDX09GRlNFVFNfNCAgICAgICAgICAgICAgICA3MAorI2RlZmluZSBSMjAwX0VNSVRfUFBfQ1VCSUNfRkFDRVNfNSAgICAgICAgICAgICAgICAgIDcxCisjZGVmaW5lIFIyMDBfRU1JVF9QUF9DVUJJQ19PRkZTRVRTXzUgICAgICAgICAgICAgICAgNzIKKyNkZWZpbmUgUkFERU9OX0VNSVRfUFBfVEVYX1NJWkVfMCAgICAgICAgICAgICAgICAgICA3MworI2RlZmluZSBSQURFT05fRU1JVF9QUF9URVhfU0laRV8xICAgICAgICAgICAgICAgICAgIDc0CisjZGVmaW5lIFJBREVPTl9FTUlUX1BQX1RFWF9TSVpFXzIgICAgICAgICAgICAgICAgICAgNzUKKyNkZWZpbmUgUjIwMF9FTUlUX1JCM0RfQkxFTkRDT0xPUiAgICAgICAgICAgICAgICAgICA3NgorI2RlZmluZSBSMjAwX0VNSVRfVENMX1BPSU5UX1NQUklURV9DTlRMICAgICAgICAgICAgIDc3CisjZGVmaW5lIFJBREVPTl9FTUlUX1BQX0NVQklDX0ZBQ0VTXzAgICAgICAgICAgICAgICAgNzgKKyNkZWZpbmUgUkFERU9OX0VNSVRfUFBfQ1VCSUNfT0ZGU0VUU19UMCAgICAgICAgICAgICA3OQorI2RlZmluZSBSQURFT05fRU1JVF9QUF9DVUJJQ19GQUNFU18xICAgICAgICAgICAgICAgIDgwCisjZGVmaW5lIFJBREVPTl9FTUlUX1BQX0NVQklDX09GRlNFVFNfVDEgICAgICAgICAgICAgODEKKyNkZWZpbmUgUkFERU9OX0VNSVRfUFBfQ1VCSUNfRkFDRVNfMiAgICAgICAgICAgICAgICA4MgorI2RlZmluZSBSQURFT05fRU1JVF9QUF9DVUJJQ19PRkZTRVRTX1QyICAgICAgICAgICAgIDgzCisjZGVmaW5lIFIyMDBfRU1JVF9QUF9UUklfUEVSRl9DTlRMICAgICAgICAgICAgICAgICAgODQKKyNkZWZpbmUgUjIwMF9FTUlUX1BQX0FGU18wICAgICAgICAgICAgICAgICAgICAgICAgICA4NQorI2RlZmluZSBSMjAwX0VNSVRfUFBfQUZTXzEgICAgICAgICAgICAgICAgICAgICAgICAgIDg2CisjZGVmaW5lIFIyMDBfRU1JVF9BVEZfVEZBQ1RPUiAgICAgICAgICAgICAgICAgICAgICAgODcKKyNkZWZpbmUgUjIwMF9FTUlUX1BQX1RYQ1RMQUxMXzAgICAgICAgICAgICAgICAgICAgICA4OAorI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhDVExBTExfMSAgICAgICAgICAgICAgICAgICAgIDg5CisjZGVmaW5lIFIyMDBfRU1JVF9QUF9UWENUTEFMTF8yICAgICAgICAgICAgICAgICAgICAgOTAKKyNkZWZpbmUgUjIwMF9FTUlUX1BQX1RYQ1RMQUxMXzMgICAgICAgICAgICAgICAgICAgICA5MQorI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhDVExBTExfNCAgICAgICAgICAgICAgICAgICAgIDkyCisjZGVmaW5lIFIyMDBfRU1JVF9QUF9UWENUTEFMTF81ICAgICAgICAgICAgICAgICAgICAgOTMKKyNkZWZpbmUgUjIwMF9FTUlUX1ZBUF9QVlNfQ05UTCAgICAgICAgICAgICAgICAgICAgICA5NAorI2RlZmluZSBSQURFT05fTUFYX1NUQVRFX1BBQ0tFVFMgICAgICAgICAgICAgICAgICAgIDk1CisKKy8qIENvbW1hbmRzIHVuZGVyc3Rvb2QgYnkgY21kX2J1ZmZlciBpb2N0bC4gIE1vcmUgY2FuIGJlIGFkZGVkIGJ1dAorICogb2J2aW91c2x5IHRoZXNlIGNhbid0IGJlIHJlbW92ZWQgb3IgY2hhbmdlZDoKKyAqLworI2RlZmluZSBSQURFT05fQ01EX1BBQ0tFVCAgICAgIDEJLyogZW1pdCBvbmUgb2YgdGhlIHJlZ2lzdGVyIHBhY2tldHMgYWJvdmUgKi8KKyNkZWZpbmUgUkFERU9OX0NNRF9TQ0FMQVJTICAgICAyCS8qIGVtaXQgc2NhbGFyIGRhdGEgKi8KKyNkZWZpbmUgUkFERU9OX0NNRF9WRUNUT1JTICAgICAzCS8qIGVtaXQgdmVjdG9yIGRhdGEgKi8KKyNkZWZpbmUgUkFERU9OX0NNRF9ETUFfRElTQ0FSRCA0CS8qIGRpc2NhcmQgY3VycmVudCBkbWEgYnVmICovCisjZGVmaW5lIFJBREVPTl9DTURfUEFDS0VUMyAgICAgNQkvKiBlbWl0IGh3IHBhY2tldCAqLworI2RlZmluZSBSQURFT05fQ01EX1BBQ0tFVDNfQ0xJUCA2CS8qIGVtaXQgaHcgcGFja2V0IHdyYXBwZWQgaW4gY2xpcHJlY3RzICovCisjZGVmaW5lIFJBREVPTl9DTURfU0NBTEFSUzIgICAgIDcJLyogcjIwMCBzdG9wZ2FwICovCisjZGVmaW5lIFJBREVPTl9DTURfV0FJVCAgICAgICAgIDgJLyogZW1pdCBodyB3YWl0IGNvbW1hbmRzIC0tIG5vdGU6CisJCQkJCSAqICBkb2Vzbid0IG1ha2UgdGhlIGNwdSB3YWl0LCBqdXN0CisJCQkJCSAqICB0aGUgZ3JhcGhpY3MgaGFyZHdhcmUgKi8KKyNkZWZpbmUgUkFERU9OX0NNRF9WRUNMSU5FQVIJOSAgICAgICAvKiBhbm90aGVyIHIyMDAgc3RvcGdhcCAqLworCit0eXBlZGVmIHVuaW9uIHsKKwlpbnQgaTsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBjaGFyIGNtZF90eXBlLCBwYWQwLCBwYWQxLCBwYWQyOworCX0gaGVhZGVyOworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgY21kX3R5cGUsIHBhY2tldF9pZCwgcGFkMCwgcGFkMTsKKwl9IHBhY2tldDsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBjaGFyIGNtZF90eXBlLCBvZmZzZXQsIHN0cmlkZSwgY291bnQ7CisJfSBzY2FsYXJzOworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgY21kX3R5cGUsIG9mZnNldCwgc3RyaWRlLCBjb3VudDsKKwl9IHZlY3RvcnM7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgY2hhciBjbWRfdHlwZSwgYWRkcl9sbywgYWRkcl9oaSwgY291bnQ7CisJfSB2ZWNsaW5lYXI7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgY2hhciBjbWRfdHlwZSwgYnVmX2lkeCwgcGFkMCwgcGFkMTsKKwl9IGRtYTsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBjaGFyIGNtZF90eXBlLCBmbGFncywgcGFkMCwgcGFkMTsKKwl9IHdhaXQ7Cit9IGRybV9yYWRlb25fY21kX2hlYWRlcl90OworCisjZGVmaW5lIFJBREVPTl9XQUlUXzJEICAweDEKKyNkZWZpbmUgUkFERU9OX1dBSVRfM0QgIDB4MgorCisvKiBBbGxvd2VkIHBhcmFtZXRlcnMgZm9yIFIzMDBfQ01EX1BBQ0tFVDMKKyAqLworI2RlZmluZSBSMzAwX0NNRF9QQUNLRVQzX0NMRUFSCQkwCisjZGVmaW5lIFIzMDBfQ01EX1BBQ0tFVDNfUkFXCQkxCisKKy8qIENvbW1hbmRzIHVuZGVyc3Rvb2QgYnkgY21kX2J1ZmZlciBpb2N0bCBmb3IgUjMwMC4KKyAqIFRoZSBpbnRlcmZhY2UgaGFzIG5vdCBiZWVuIHN0YWJpbGl6ZWQsIHNvIHNvbWUgb2YgdGhlc2UgbWF5IGJlIHJlbW92ZWQKKyAqIGFuZCBldmVudHVhbGx5IHJlb3JkZXJlZCBiZWZvcmUgc3RhYmlsaXphdGlvbi4KKyAqLworI2RlZmluZSBSMzAwX0NNRF9QQUNLRVQwCQkxCisjZGVmaW5lIFIzMDBfQ01EX1ZQVQkJCTIJLyogZW1pdCB2ZXJ0ZXggcHJvZ3JhbSB1cGxvYWQgKi8KKyNkZWZpbmUgUjMwMF9DTURfUEFDS0VUMwkJMwkvKiBlbWl0IGEgcGFja2V0MyAqLworI2RlZmluZSBSMzAwX0NNRF9FTkQzRAkJCTQJLyogZW1pdCBzZXF1ZW5jZSBlbmRpbmcgM2QgcmVuZGVyaW5nICovCisjZGVmaW5lIFIzMDBfQ01EX0NQX0RFTEFZCQk1CisjZGVmaW5lIFIzMDBfQ01EX0RNQV9ESVNDQVJECQk2CisjZGVmaW5lIFIzMDBfQ01EX1dBSVQJCQk3CisjCWRlZmluZSBSMzAwX1dBSVRfMkQJCTB4MQorIwlkZWZpbmUgUjMwMF9XQUlUXzNECQkweDIKKy8qIHRoZXNlIHR3byBkZWZpbmVzIGFyZSBET0lORyBJVCBXUk9ORyAtIGhvd2V2ZXIKKyAqIHdlIGhhdmUgdXNlcnNwYWNlIHdoaWNoIHJlbGllcyBvbiB1c2luZyB0aGVzZS4KKyAqIFRoZSB3YWl0IGludGVyZmFjZSBpcyBiYWNrd2FyZHMgY29tcGF0IG5ldyAKKyAqIGNvZGUgc2hvdWxkIHVzZSB0aGUgTkVXX1dBSVQgZGVmaW5lcyBiZWxvdworICogVEhFU0UgQVJFIE5PVCBCSVQgRklFTERTCisgKi8KKyMJZGVmaW5lIFIzMDBfV0FJVF8yRF9DTEVBTgkweDMKKyMJZGVmaW5lIFIzMDBfV0FJVF8zRF9DTEVBTgkweDQKKworIwlkZWZpbmUgUjMwMF9ORVdfV0FJVF8yRF8zRAkweDMKKyMJZGVmaW5lIFIzMDBfTkVXX1dBSVRfMkRfMkRfQ0xFQU4JMHg0CisjCWRlZmluZSBSMzAwX05FV19XQUlUXzNEXzNEX0NMRUFOCTB4NgorIwlkZWZpbmUgUjMwMF9ORVdfV0FJVF8yRF8yRF9DTEVBTl8zRF8zRF9DTEVBTgkweDgKKworI2RlZmluZSBSMzAwX0NNRF9TQ1JBVENICQk4CisjZGVmaW5lIFIzMDBfQ01EX1I1MDBGUCAgICAgICAgICAgICAgICAgOQorCit0eXBlZGVmIHVuaW9uIHsKKwl1bnNpZ25lZCBpbnQgdTsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBjaGFyIGNtZF90eXBlLCBwYWQwLCBwYWQxLCBwYWQyOworCX0gaGVhZGVyOworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgY21kX3R5cGUsIGNvdW50LCByZWdsbywgcmVnaGk7CisJfSBwYWNrZXQwOworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgY21kX3R5cGUsIGNvdW50LCBhZHJsbywgYWRyaGk7CisJfSB2cHU7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgY2hhciBjbWRfdHlwZSwgcGFja2V0LCBwYWQwLCBwYWQxOworCX0gcGFja2V0MzsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBjaGFyIGNtZF90eXBlLCBwYWNrZXQ7CisJCXVuc2lnbmVkIHNob3J0IGNvdW50OwkvKiBhbW91bnQgb2YgcGFja2V0MiB0byBlbWl0ICovCisJfSBkZWxheTsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBjaGFyIGNtZF90eXBlLCBidWZfaWR4LCBwYWQwLCBwYWQxOworCX0gZG1hOworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgY21kX3R5cGUsIGZsYWdzLCBwYWQwLCBwYWQxOworCX0gd2FpdDsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBjaGFyIGNtZF90eXBlLCByZWcsIG5fYnVmcywgZmxhZ3M7CisJfSBzY3JhdGNoOworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgY21kX3R5cGUsIGNvdW50LCBhZHJsbywgYWRyaGlfZmxhZ3M7CisJfSByNTAwZnA7Cit9IGRybV9yMzAwX2NtZF9oZWFkZXJfdDsKKworI2RlZmluZSBSQURFT05fRlJPTlQJCQkweDEKKyNkZWZpbmUgUkFERU9OX0JBQ0sJCQkweDIKKyNkZWZpbmUgUkFERU9OX0RFUFRICQkJMHg0CisjZGVmaW5lIFJBREVPTl9TVEVOQ0lMCQkJMHg4CisjZGVmaW5lIFJBREVPTl9DTEVBUl9GQVNUWgkJMHg4MDAwMDAwMAorI2RlZmluZSBSQURFT05fVVNFX0hJRVJaCQkweDQwMDAwMDAwCisjZGVmaW5lIFJBREVPTl9VU0VfQ09NUF9aQlVGCQkweDIwMDAwMDAwCisKKyNkZWZpbmUgUjUwMEZQX0NPTlNUQU5UX1RZUEUgICgxIDw8IDEpCisjZGVmaW5lIFI1MDBGUF9DT05TVEFOVF9DTEFNUCAoMSA8PCAyKQorCisvKiBQcmltaXRpdmUgdHlwZXMKKyAqLworI2RlZmluZSBSQURFT05fUE9JTlRTCQkJMHgxCisjZGVmaW5lIFJBREVPTl9MSU5FUwkJCTB4MgorI2RlZmluZSBSQURFT05fTElORV9TVFJJUAkJMHgzCisjZGVmaW5lIFJBREVPTl9UUklBTkdMRVMJCTB4NAorI2RlZmluZSBSQURFT05fVFJJQU5HTEVfRkFOCQkweDUKKyNkZWZpbmUgUkFERU9OX1RSSUFOR0xFX1NUUklQCQkweDYKKworLyogVmVydGV4L2luZGlyZWN0IGJ1ZmZlciBzaXplCisgKi8KKyNkZWZpbmUgUkFERU9OX0JVRkZFUl9TSVpFCQk2NTUzNgorCisvKiBCeXRlIG9mZnNldHMgZm9yIGluZGlyZWN0IGJ1ZmZlciBkYXRhCisgKi8KKyNkZWZpbmUgUkFERU9OX0lOREVYX1BSSU1fT0ZGU0VUCTIwCisKKyNkZWZpbmUgUkFERU9OX1NDUkFUQ0hfUkVHX09GRlNFVAkzMgorCisjZGVmaW5lIFI2MDBfU0NSQVRDSF9SRUdfT0ZGU0VUICAgICAgICAgMjU2CisKKyNkZWZpbmUgUkFERU9OX05SX1NBUkVBX0NMSVBSRUNUUwkxMgorCisvKiBUaGVyZSBhcmUgMiBoZWFwcyAobG9jYWwvR0FSVCkuICBFYWNoIHJlZ2lvbiB3aXRoaW4gYSBoZWFwIGlzIGEKKyAqIG1pbmltdW0gb2YgNjRrLCBhbmQgdGhlcmUgYXJlIGF0IG1vc3QgNjQgb2YgdGhlbSBwZXIgaGVhcC4KKyAqLworI2RlZmluZSBSQURFT05fTE9DQUxfVEVYX0hFQVAJCTAKKyNkZWZpbmUgUkFERU9OX0dBUlRfVEVYX0hFQVAJCTEKKyNkZWZpbmUgUkFERU9OX05SX1RFWF9IRUFQUwkJMgorI2RlZmluZSBSQURFT05fTlJfVEVYX1JFR0lPTlMJCTY0CisjZGVmaW5lIFJBREVPTl9MT0dfVEVYX0dSQU5VTEFSSVRZCTE2CisKKyNkZWZpbmUgUkFERU9OX01BWF9URVhUVVJFX0xFVkVMUwkxMgorI2RlZmluZSBSQURFT05fTUFYX1RFWFRVUkVfVU5JVFMJMworCisjZGVmaW5lIFJBREVPTl9NQVhfU1VSRkFDRVMJCTgKKworLyogQmxpdHMgaGF2ZSBzdHJpY3Qgb2Zmc2V0IHJ1bGVzLiAgQWxsIGJsaXQgb2Zmc2V0IG11c3QgYmUgYWxpZ25lZCBvbgorICogYSAxSy1ieXRlIGJvdW5kYXJ5LgorICovCisjZGVmaW5lIFJBREVPTl9PRkZTRVRfU0hJRlQgICAgICAgICAgICAgMTAKKyNkZWZpbmUgUkFERU9OX09GRlNFVF9BTElHTiAgICAgICAgICAgICAoMSA8PCBSQURFT05fT0ZGU0VUX1NISUZUKQorI2RlZmluZSBSQURFT05fT0ZGU0VUX01BU0sgICAgICAgICAgICAgIChSQURFT05fT0ZGU0VUX0FMSUdOIC0gMSkKKworI2VuZGlmCQkJCS8qIF9fUkFERU9OX1NBUkVBX0RFRklORVNfXyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IHJlZDsKKwl1bnNpZ25lZCBpbnQgZ3JlZW47CisJdW5zaWduZWQgaW50IGJsdWU7CisJdW5zaWduZWQgaW50IGFscGhhOworfSByYWRlb25fY29sb3JfcmVnc190OworCit0eXBlZGVmIHN0cnVjdCB7CisJLyogQ29udGV4dCBzdGF0ZSAqLworCXVuc2lnbmVkIGludCBwcF9taXNjOwkvKiAweDFjMTQgKi8KKwl1bnNpZ25lZCBpbnQgcHBfZm9nX2NvbG9yOworCXVuc2lnbmVkIGludCByZV9zb2xpZF9jb2xvcjsKKwl1bnNpZ25lZCBpbnQgcmIzZF9ibGVuZGNudGw7CisJdW5zaWduZWQgaW50IHJiM2RfZGVwdGhvZmZzZXQ7CisJdW5zaWduZWQgaW50IHJiM2RfZGVwdGhwaXRjaDsKKwl1bnNpZ25lZCBpbnQgcmIzZF96c3RlbmNpbGNudGw7CisKKwl1bnNpZ25lZCBpbnQgcHBfY250bDsJLyogMHgxYzM4ICovCisJdW5zaWduZWQgaW50IHJiM2RfY250bDsKKwl1bnNpZ25lZCBpbnQgcmIzZF9jb2xvcm9mZnNldDsKKwl1bnNpZ25lZCBpbnQgcmVfd2lkdGhfaGVpZ2h0OworCXVuc2lnbmVkIGludCByYjNkX2NvbG9ycGl0Y2g7CisJdW5zaWduZWQgaW50IHNlX2NudGw7CisKKwkvKiBWZXJ0ZXggZm9ybWF0IHN0YXRlICovCisJdW5zaWduZWQgaW50IHNlX2Nvb3JkX2ZtdDsJLyogMHgxYzUwICovCisKKwkvKiBMaW5lIHN0YXRlICovCisJdW5zaWduZWQgaW50IHJlX2xpbmVfcGF0dGVybjsJLyogMHgxY2QwICovCisJdW5zaWduZWQgaW50IHJlX2xpbmVfc3RhdGU7CisKKwl1bnNpZ25lZCBpbnQgc2VfbGluZV93aWR0aDsJLyogMHgxZGI4ICovCisKKwkvKiBCdW1wbWFwIHN0YXRlICovCisJdW5zaWduZWQgaW50IHBwX2x1bV9tYXRyaXg7CS8qIDB4MWQwMCAqLworCisJdW5zaWduZWQgaW50IHBwX3JvdF9tYXRyaXhfMDsJLyogMHgxZDU4ICovCisJdW5zaWduZWQgaW50IHBwX3JvdF9tYXRyaXhfMTsKKworCS8qIE1hc2sgc3RhdGUgKi8KKwl1bnNpZ25lZCBpbnQgcmIzZF9zdGVuY2lscmVmbWFzazsJLyogMHgxZDdjICovCisJdW5zaWduZWQgaW50IHJiM2Rfcm9wY250bDsKKwl1bnNpZ25lZCBpbnQgcmIzZF9wbGFuZW1hc2s7CisKKwkvKiBWaWV3cG9ydCBzdGF0ZSAqLworCXVuc2lnbmVkIGludCBzZV92cG9ydF94c2NhbGU7CS8qIDB4MWQ5OCAqLworCXVuc2lnbmVkIGludCBzZV92cG9ydF94b2Zmc2V0OworCXVuc2lnbmVkIGludCBzZV92cG9ydF95c2NhbGU7CisJdW5zaWduZWQgaW50IHNlX3Zwb3J0X3lvZmZzZXQ7CisJdW5zaWduZWQgaW50IHNlX3Zwb3J0X3pzY2FsZTsKKwl1bnNpZ25lZCBpbnQgc2VfdnBvcnRfem9mZnNldDsKKworCS8qIFNldHVwIHN0YXRlICovCisJdW5zaWduZWQgaW50IHNlX2NudGxfc3RhdHVzOwkvKiAweDIxNDAgKi8KKworCS8qIE1pc2Mgc3RhdGUgKi8KKwl1bnNpZ25lZCBpbnQgcmVfdG9wX2xlZnQ7CS8qIDB4MjZjMCAqLworCXVuc2lnbmVkIGludCByZV9taXNjOworfSBkcm1fcmFkZW9uX2NvbnRleHRfcmVnc190OworCit0eXBlZGVmIHN0cnVjdCB7CisJLyogWmJpYXMgc3RhdGUgKi8KKwl1bnNpZ25lZCBpbnQgc2VfemJpYXNfZmFjdG9yOwkvKiAweDFkYWMgKi8KKwl1bnNpZ25lZCBpbnQgc2VfemJpYXNfY29uc3RhbnQ7Cit9IGRybV9yYWRlb25fY29udGV4dDJfcmVnc190OworCisvKiBTZXR1cCByZWdpc3RlcnMgZm9yIGVhY2ggdGV4dHVyZSB1bml0CisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgcHBfdHhmaWx0ZXI7CisJdW5zaWduZWQgaW50IHBwX3R4Zm9ybWF0OworCXVuc2lnbmVkIGludCBwcF90eG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgcHBfdHhjYmxlbmQ7CisJdW5zaWduZWQgaW50IHBwX3R4YWJsZW5kOworCXVuc2lnbmVkIGludCBwcF90ZmFjdG9yOworCXVuc2lnbmVkIGludCBwcF9ib3JkZXJfY29sb3I7Cit9IGRybV9yYWRlb25fdGV4dHVyZV9yZWdzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgc3RhcnQ7CisJdW5zaWduZWQgaW50IGZpbmlzaDsKKwl1bnNpZ25lZCBpbnQgcHJpbTo4OworCXVuc2lnbmVkIGludCBzdGF0ZWlkeDo4OworCXVuc2lnbmVkIGludCBudW12ZXJ0czoxNjsJLyogb3ZlcmxvYWRlZCBhcyBvZmZzZXQvNjQgZm9yIGVsdCBwcmltcyAqLworCXVuc2lnbmVkIGludCB2Y19mb3JtYXQ7CS8qIHZlcnRleCBmb3JtYXQgKi8KK30gZHJtX3JhZGVvbl9wcmltX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlkcm1fcmFkZW9uX2NvbnRleHRfcmVnc190IGNvbnRleHQ7CisJZHJtX3JhZGVvbl90ZXh0dXJlX3JlZ3NfdCB0ZXhbUkFERU9OX01BWF9URVhUVVJFX1VOSVRTXTsKKwlkcm1fcmFkZW9uX2NvbnRleHQyX3JlZ3NfdCBjb250ZXh0MjsKKwl1bnNpZ25lZCBpbnQgZGlydHk7Cit9IGRybV9yYWRlb25fc3RhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCS8qIFRoZSBjaGFubmVsIGZvciBjb21tdW5pY2F0aW9uIG9mIHN0YXRlIGluZm9ybWF0aW9uIHRvIHRoZQorCSAqIGtlcm5lbCBvbiBmaXJpbmcgYSB2ZXJ0ZXggYnVmZmVyIHdpdGggZWl0aGVyIG9mIHRoZQorCSAqIG9ic29sZXRlZCB2ZXJ0ZXgvaW5kZXggaW9jdGxzLgorCSAqLworCWRybV9yYWRlb25fY29udGV4dF9yZWdzX3QgY29udGV4dF9zdGF0ZTsKKwlkcm1fcmFkZW9uX3RleHR1cmVfcmVnc190IHRleF9zdGF0ZVtSQURFT05fTUFYX1RFWFRVUkVfVU5JVFNdOworCXVuc2lnbmVkIGludCBkaXJ0eTsKKwl1bnNpZ25lZCBpbnQgdmVydHNpemU7CisJdW5zaWduZWQgaW50IHZjX2Zvcm1hdDsKKworCS8qIFRoZSBjdXJyZW50IGNsaXByZWN0cywgb3IgYSBzdWJzZXQgdGhlcmVvZi4KKwkgKi8KKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBib3hlc1tSQURFT05fTlJfU0FSRUFfQ0xJUFJFQ1RTXTsKKwl1bnNpZ25lZCBpbnQgbmJveDsKKworCS8qIENvdW50ZXJzIGZvciBjbGllbnQtc2lkZSB0aHJvdHRsaW5nIG9mIHJlbmRlcmluZyBjbGllbnRzLgorCSAqLworCXVuc2lnbmVkIGludCBsYXN0X2ZyYW1lOworCXVuc2lnbmVkIGludCBsYXN0X2Rpc3BhdGNoOworCXVuc2lnbmVkIGludCBsYXN0X2NsZWFyOworCisJc3RydWN0IGRybV90ZXhfcmVnaW9uIHRleF9saXN0W1JBREVPTl9OUl9URVhfSEVBUFNdW1JBREVPTl9OUl9URVhfUkVHSU9OUyArCisJCQkJCQkgICAgICAgMV07CisJdW5zaWduZWQgaW50IHRleF9hZ2VbUkFERU9OX05SX1RFWF9IRUFQU107CisJaW50IGN0eF9vd25lcjsKKwlpbnQgcGZTdGF0ZTsJCS8qIG51bWJlciBvZiAzZCB3aW5kb3dzICgwLDEsMm9ybW9yZSkgKi8KKwlpbnQgcGZDdXJyZW50UGFnZTsJLyogd2hpY2ggYnVmZmVyIGlzIGJlaW5nIGRpc3BsYXllZD8gKi8KKwlpbnQgY3J0YzJfYmFzZTsJCS8qIENSVEMyIGZyYW1lIG9mZnNldCAqLworCWludCB0aWxpbmdfZW5hYmxlZDsJLyogc2V0IGJ5IGRybSwgcmVhZCBieSAyZCArIDNkIGNsaWVudHMgKi8KK30gZHJtX3JhZGVvbl9zYXJlYV90OworCisvKiBXQVJOSU5HOiBJZiB5b3UgY2hhbmdlIGFueSBvZiB0aGVzZSBkZWZpbmVzLCBtYWtlIHN1cmUgdG8gY2hhbmdlIHRoZQorICogZGVmaW5lcyBpbiB0aGUgWHNlcnZlciBmaWxlICh4Zjg2ZHJtUmFkZW9uLmgpCisgKgorICogS1c6IGFjdHVhbGx5IGl0J3MgaWxsZWdhbCB0byBjaGFuZ2UgYW55IG9mIHRoaXMgKGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5KS4KKyAqLworCisvKiBSYWRlb24gc3BlY2lmaWMgaW9jdGxzCisgKiBUaGUgZGV2aWNlIHNwZWNpZmljIGlvY3RsIHJhbmdlIGlzIDB4NDAgdG8gMHg3OS4KKyAqLworI2RlZmluZSBEUk1fUkFERU9OX0NQX0lOSVQgICAgMHgwMAorI2RlZmluZSBEUk1fUkFERU9OX0NQX1NUQVJUICAgMHgwMQorI2RlZmluZSBEUk1fUkFERU9OX0NQX1NUT1AgICAgMHgwMgorI2RlZmluZSBEUk1fUkFERU9OX0NQX1JFU0VUICAgMHgwMworI2RlZmluZSBEUk1fUkFERU9OX0NQX0lETEUgICAgMHgwNAorI2RlZmluZSBEUk1fUkFERU9OX1JFU0VUICAgICAgMHgwNQorI2RlZmluZSBEUk1fUkFERU9OX0ZVTExTQ1JFRU4gMHgwNgorI2RlZmluZSBEUk1fUkFERU9OX1NXQVAgICAgICAgMHgwNworI2RlZmluZSBEUk1fUkFERU9OX0NMRUFSICAgICAgMHgwOAorI2RlZmluZSBEUk1fUkFERU9OX1ZFUlRFWCAgICAgMHgwOQorI2RlZmluZSBEUk1fUkFERU9OX0lORElDRVMgICAgMHgwQQorI2RlZmluZSBEUk1fUkFERU9OX05PVF9VU0VECisjZGVmaW5lIERSTV9SQURFT05fU1RJUFBMRSAgICAweDBDCisjZGVmaW5lIERSTV9SQURFT05fSU5ESVJFQ1QgICAweDBECisjZGVmaW5lIERSTV9SQURFT05fVEVYVFVSRSAgICAweDBFCisjZGVmaW5lIERSTV9SQURFT05fVkVSVEVYMiAgICAweDBGCisjZGVmaW5lIERSTV9SQURFT05fQ01EQlVGICAgICAweDEwCisjZGVmaW5lIERSTV9SQURFT05fR0VUUEFSQU0gICAweDExCisjZGVmaW5lIERSTV9SQURFT05fRkxJUCAgICAgICAweDEyCisjZGVmaW5lIERSTV9SQURFT05fQUxMT0MgICAgICAweDEzCisjZGVmaW5lIERSTV9SQURFT05fRlJFRSAgICAgICAweDE0CisjZGVmaW5lIERSTV9SQURFT05fSU5JVF9IRUFQICAweDE1CisjZGVmaW5lIERSTV9SQURFT05fSVJRX0VNSVQgICAweDE2CisjZGVmaW5lIERSTV9SQURFT05fSVJRX1dBSVQgICAweDE3CisjZGVmaW5lIERSTV9SQURFT05fQ1BfUkVTVU1FICAweDE4CisjZGVmaW5lIERSTV9SQURFT05fU0VUUEFSQU0gICAweDE5CisjZGVmaW5lIERSTV9SQURFT05fU1VSRl9BTExPQyAweDFhCisjZGVmaW5lIERSTV9SQURFT05fU1VSRl9GUkVFICAweDFiCisvKiBLTVMgaW9jdGwgKi8KKyNkZWZpbmUgRFJNX1JBREVPTl9HRU1fSU5GTwkJMHgxYworI2RlZmluZSBEUk1fUkFERU9OX0dFTV9DUkVBVEUJCTB4MWQKKyNkZWZpbmUgRFJNX1JBREVPTl9HRU1fTU1BUAkJMHgxZQorI2RlZmluZSBEUk1fUkFERU9OX0dFTV9QUkVBRAkJMHgyMQorI2RlZmluZSBEUk1fUkFERU9OX0dFTV9QV1JJVEUJCTB4MjIKKyNkZWZpbmUgRFJNX1JBREVPTl9HRU1fU0VUX0RPTUFJTgkweDIzCisjZGVmaW5lIERSTV9SQURFT05fR0VNX1dBSVRfSURMRQkweDI0CisjZGVmaW5lIERSTV9SQURFT05fQ1MJCQkweDI2CisjZGVmaW5lIERSTV9SQURFT05fSU5GTwkJCTB4MjcKKyNkZWZpbmUgRFJNX1JBREVPTl9HRU1fU0VUX1RJTElORwkweDI4CisjZGVmaW5lIERSTV9SQURFT05fR0VNX0dFVF9USUxJTkcJMHgyOQorI2RlZmluZSBEUk1fUkFERU9OX0dFTV9CVVNZCQkweDJhCisKKyNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9DUF9JTklUICAgIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX0NQX0lOSVQsIGRybV9yYWRlb25faW5pdF90KQorI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX0NQX1NUQVJUICAgRFJNX0lPKCAgRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fQ1BfU1RBUlQpCisjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fQ1BfU1RPUCAgICBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9DUF9TVE9QLCBkcm1fcmFkZW9uX2NwX3N0b3BfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9DUF9SRVNFVCAgIERSTV9JTyggIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX0NQX1JFU0VUKQorI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX0NQX0lETEUgICAgRFJNX0lPKCAgRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fQ1BfSURMRSkKKyNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9SRVNFVCAgICAgIERSTV9JTyggIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX1JFU0VUKQorI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX0ZVTExTQ1JFRU4gRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fRlVMTFNDUkVFTiwgZHJtX3JhZGVvbl9mdWxsc2NyZWVuX3QpCisjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fU1dBUCAgICAgICBEUk1fSU8oICBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9TV0FQKQorI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX0NMRUFSICAgICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fQ0xFQVIsIGRybV9yYWRlb25fY2xlYXJfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9WRVJURVggICAgIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX1ZFUlRFWCwgZHJtX3JhZGVvbl92ZXJ0ZXhfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9JTkRJQ0VTICAgIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX0lORElDRVMsIGRybV9yYWRlb25faW5kaWNlc190KQorI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX1NUSVBQTEUgICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fU1RJUFBMRSwgZHJtX3JhZGVvbl9zdGlwcGxlX3QpCisjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fSU5ESVJFQ1QgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9JTkRJUkVDVCwgZHJtX3JhZGVvbl9pbmRpcmVjdF90KQorI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX1RFWFRVUkUgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fVEVYVFVSRSwgZHJtX3JhZGVvbl90ZXh0dXJlX3QpCisjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fVkVSVEVYMiAgICBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9WRVJURVgyLCBkcm1fcmFkZW9uX3ZlcnRleDJfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9DTURCVUYgICAgIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX0NNREJVRiwgZHJtX3JhZGVvbl9jbWRfYnVmZmVyX3QpCisjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fR0VUUEFSQU0gICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9HRVRQQVJBTSwgZHJtX3JhZGVvbl9nZXRwYXJhbV90KQorI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX0ZMSVAgICAgICAgRFJNX0lPKCAgRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fRkxJUCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9BTExPQyAgICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX0FMTE9DLCBkcm1fcmFkZW9uX21lbV9hbGxvY190KQorI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX0ZSRUUgICAgICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fRlJFRSwgZHJtX3JhZGVvbl9tZW1fZnJlZV90KQorI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX0lOSVRfSEVBUCAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fSU5JVF9IRUFQLCBkcm1fcmFkZW9uX21lbV9pbml0X2hlYXBfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9JUlFfRU1JVCAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX0lSUV9FTUlULCBkcm1fcmFkZW9uX2lycV9lbWl0X3QpCisjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fSVJRX1dBSVQgICBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9JUlFfV0FJVCwgZHJtX3JhZGVvbl9pcnFfd2FpdF90KQorI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX0NQX1JFU1VNRSAgRFJNX0lPKCAgRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fQ1BfUkVTVU1FKQorI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX1NFVFBBUkFNICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fU0VUUEFSQU0sIGRybV9yYWRlb25fc2V0cGFyYW1fdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9TVVJGX0FMTE9DIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX1NVUkZfQUxMT0MsIGRybV9yYWRlb25fc3VyZmFjZV9hbGxvY190KQorI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX1NVUkZfRlJFRSAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fU1VSRl9GUkVFLCBkcm1fcmFkZW9uX3N1cmZhY2VfZnJlZV90KQorLyogS01TICovCisjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fR0VNX0lORk8JRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fR0VNX0lORk8sIHN0cnVjdCBkcm1fcmFkZW9uX2dlbV9pbmZvKQorI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX0dFTV9DUkVBVEUJRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fR0VNX0NSRUFURSwgc3RydWN0IGRybV9yYWRlb25fZ2VtX2NyZWF0ZSkKKyNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9HRU1fTU1BUAlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9HRU1fTU1BUCwgc3RydWN0IGRybV9yYWRlb25fZ2VtX21tYXApCisjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fR0VNX1BSRUFECURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX0dFTV9QUkVBRCwgc3RydWN0IGRybV9yYWRlb25fZ2VtX3ByZWFkKQorI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX0dFTV9QV1JJVEUJRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fR0VNX1BXUklURSwgc3RydWN0IGRybV9yYWRlb25fZ2VtX3B3cml0ZSkKKyNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9HRU1fU0VUX0RPTUFJTglEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9HRU1fU0VUX0RPTUFJTiwgc3RydWN0IGRybV9yYWRlb25fZ2VtX3NldF9kb21haW4pCisjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fR0VNX1dBSVRfSURMRQlEUk1fSU9XKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX0dFTV9XQUlUX0lETEUsIHN0cnVjdCBkcm1fcmFkZW9uX2dlbV93YWl0X2lkbGUpCisjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fQ1MJCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX0NTLCBzdHJ1Y3QgZHJtX3JhZGVvbl9jcykKKyNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9JTkZPCQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9JTkZPLCBzdHJ1Y3QgZHJtX3JhZGVvbl9pbmZvKQorI2RlZmluZSBEUk1fSU9DVExfUkFERU9OX0dFTV9TRVRfVElMSU5HCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUkFERU9OX0dFTV9TRVRfVElMSU5HLCBzdHJ1Y3QgZHJtX3JhZGVvbl9nZW1fc2V0X3RpbGluZykKKyNkZWZpbmUgRFJNX0lPQ1RMX1JBREVPTl9HRU1fR0VUX1RJTElORwlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1JBREVPTl9HRU1fR0VUX1RJTElORywgc3RydWN0IGRybV9yYWRlb25fZ2VtX2dldF90aWxpbmcpCisjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fR0VNX0JVU1kJRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9SQURFT05fR0VNX0JVU1ksIHN0cnVjdCBkcm1fcmFkZW9uX2dlbV9idXN5KQorCit0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX2luaXQgeworCWVudW0geworCQlSQURFT05fSU5JVF9DUCA9IDB4MDEsCisJCVJBREVPTl9DTEVBTlVQX0NQID0gMHgwMiwKKwkJUkFERU9OX0lOSVRfUjIwMF9DUCA9IDB4MDMsCisJCVJBREVPTl9JTklUX1IzMDBfQ1AgPSAweDA0LAorCQlSQURFT05fSU5JVF9SNjAwX0NQID0gMHgwNQorCX0gZnVuYzsKKwl1bnNpZ25lZCBsb25nIHNhcmVhX3ByaXZfb2Zmc2V0OworCWludCBpc19wY2k7CisJaW50IGNwX21vZGU7CisJaW50IGdhcnRfc2l6ZTsKKwlpbnQgcmluZ19zaXplOworCWludCB1c2VjX3RpbWVvdXQ7CisKKwl1bnNpZ25lZCBpbnQgZmJfYnBwOworCXVuc2lnbmVkIGludCBmcm9udF9vZmZzZXQsIGZyb250X3BpdGNoOworCXVuc2lnbmVkIGludCBiYWNrX29mZnNldCwgYmFja19waXRjaDsKKwl1bnNpZ25lZCBpbnQgZGVwdGhfYnBwOworCXVuc2lnbmVkIGludCBkZXB0aF9vZmZzZXQsIGRlcHRoX3BpdGNoOworCisJdW5zaWduZWQgbG9uZyBmYl9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBtbWlvX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIHJpbmdfb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgcmluZ19ycHRyX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIGJ1ZmZlcnNfb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgZ2FydF90ZXh0dXJlc19vZmZzZXQ7Cit9IGRybV9yYWRlb25faW5pdF90OworCit0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX2NwX3N0b3AgeworCWludCBmbHVzaDsKKwlpbnQgaWRsZTsKK30gZHJtX3JhZGVvbl9jcF9zdG9wX3Q7CisKK3R5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fZnVsbHNjcmVlbiB7CisJZW51bSB7CisJCVJBREVPTl9JTklUX0ZVTExTQ1JFRU4gPSAweDAxLAorCQlSQURFT05fQ0xFQU5VUF9GVUxMU0NSRUVOID0gMHgwMgorCX0gZnVuYzsKK30gZHJtX3JhZGVvbl9mdWxsc2NyZWVuX3Q7CisKKyNkZWZpbmUgQ0xFQVJfWDEJMAorI2RlZmluZSBDTEVBUl9ZMQkxCisjZGVmaW5lIENMRUFSX1gyCTIKKyNkZWZpbmUgQ0xFQVJfWTIJMworI2RlZmluZSBDTEVBUl9ERVBUSAk0CisKK3R5cGVkZWYgdW5pb24gZHJtX3JhZGVvbl9jbGVhcl9yZWN0IHsKKwlmbG9hdCBmWzVdOworCXVuc2lnbmVkIGludCB1aVs1XTsKK30gZHJtX3JhZGVvbl9jbGVhcl9yZWN0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fY2xlYXIgeworCXVuc2lnbmVkIGludCBmbGFnczsKKwl1bnNpZ25lZCBpbnQgY2xlYXJfY29sb3I7CisJdW5zaWduZWQgaW50IGNsZWFyX2RlcHRoOworCXVuc2lnbmVkIGludCBjb2xvcl9tYXNrOworCXVuc2lnbmVkIGludCBkZXB0aF9tYXNrOwkvKiBtaXNuYW1lZCBmaWVsZDogIHNob3VsZCBiZSBzdGVuY2lsICovCisJZHJtX3JhZGVvbl9jbGVhcl9yZWN0X3QgKmRlcHRoX2JveGVzOworfSBkcm1fcmFkZW9uX2NsZWFyX3Q7CisKK3R5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fdmVydGV4IHsKKwlpbnQgcHJpbTsKKwlpbnQgaWR4OwkJLyogSW5kZXggb2YgdmVydGV4IGJ1ZmZlciAqLworCWludCBjb3VudDsJCS8qIE51bWJlciBvZiB2ZXJ0aWNlcyBpbiBidWZmZXIgKi8KKwlpbnQgZGlzY2FyZDsJCS8qIENsaWVudCBmaW5pc2hlZCB3aXRoIGJ1ZmZlcj8gKi8KK30gZHJtX3JhZGVvbl92ZXJ0ZXhfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9pbmRpY2VzIHsKKwlpbnQgcHJpbTsKKwlpbnQgaWR4OworCWludCBzdGFydDsKKwlpbnQgZW5kOworCWludCBkaXNjYXJkOwkJLyogQ2xpZW50IGZpbmlzaGVkIHdpdGggYnVmZmVyPyAqLworfSBkcm1fcmFkZW9uX2luZGljZXNfdDsKKworLyogdjEuMiAtIG9ic29sZXRlcyBkcm1fcmFkZW9uX3ZlcnRleCBhbmQgZHJtX3JhZGVvbl9pbmRpY2VzCisgKiAgICAgIC0gYWxsb3dzIG11bHRpcGxlIHByaW1pdGl2ZXMgYW5kIHN0YXRlIGNoYW5nZXMgaW4gYSBzaW5nbGUgaW9jdGwKKyAqICAgICAgLSBzdXBwb3J0cyBkcml2ZXIgY2hhbmdlIHRvIGVtaXQgbmF0aXZlIHByaW1pdGl2ZXMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl92ZXJ0ZXgyIHsKKwlpbnQgaWR4OwkJLyogSW5kZXggb2YgdmVydGV4IGJ1ZmZlciAqLworCWludCBkaXNjYXJkOwkJLyogQ2xpZW50IGZpbmlzaGVkIHdpdGggYnVmZmVyPyAqLworCWludCBucl9zdGF0ZXM7CisJZHJtX3JhZGVvbl9zdGF0ZV90ICpzdGF0ZTsKKwlpbnQgbnJfcHJpbXM7CisJZHJtX3JhZGVvbl9wcmltX3QgKnByaW07Cit9IGRybV9yYWRlb25fdmVydGV4Ml90OworCisvKiB2MS4zIC0gb2Jzb2xldGVzIGRybV9yYWRlb25fdmVydGV4MgorICogICAgICAtIGFsbG93cyBhcmJpdGFyaWx5IGxhcmdlIGNsaXByZWN0IGxpc3QKKyAqICAgICAgLSBhbGxvd3MgdXBkYXRpbmcgb2YgdGNsIHBhY2tldCwgdmVjdG9yIGFuZCBzY2FsYXIgc3RhdGUKKyAqICAgICAgLSBhbGxvd3MgbWVtb3J5LWVmZmljaWVudCBkZXNjcmlwdGlvbiBvZiBzdGF0ZSB1cGRhdGVzCisgKiAgICAgIC0gYWxsb3dzIHN0YXRlIHRvIGJlIGVtaXR0ZWQgd2l0aG91dCBhIHByaW1pdGl2ZQorICogICAgICAgICAgIChmb3IgY2xlYXJzLCBjdHggc3dpdGNoZXMpCisgKiAgICAgIC0gYWxsb3dzIG1vcmUgdGhhbiBvbmUgZG1hIGJ1ZmZlciB0byBiZSByZWZlcmVuY2VkIHBlciBpb2N0bAorICogICAgICAtIHN1cHBvcnRzIHRjbCBkcml2ZXIKKyAqICAgICAgLSBtYXkgYmUgZXh0ZW5kZWQgaW4gZnV0dXJlIHZlcnNpb25zIHdpdGggbmV3IGNtZCB0eXBlcywgcGFja2V0cworICovCit0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX2NtZF9idWZmZXIgeworCWludCBidWZzejsKKwljaGFyICpidWY7CisJaW50IG5ib3g7CisJc3RydWN0IGRybV9jbGlwX3JlY3QgKmJveGVzOworfSBkcm1fcmFkZW9uX2NtZF9idWZmZXJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl90ZXhfaW1hZ2UgeworCXVuc2lnbmVkIGludCB4LCB5OwkvKiBCbGl0IGNvb3JkaW5hdGVzICovCisJdW5zaWduZWQgaW50IHdpZHRoLCBoZWlnaHQ7CisJY29uc3Qgdm9pZCAqZGF0YTsKK30gZHJtX3JhZGVvbl90ZXhfaW1hZ2VfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl90ZXh0dXJlIHsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCWludCBwaXRjaDsKKwlpbnQgZm9ybWF0OworCWludCB3aWR0aDsJCS8qIFRleHR1cmUgaW1hZ2UgY29vcmRpbmF0ZXMgKi8KKwlpbnQgaGVpZ2h0OworCWRybV9yYWRlb25fdGV4X2ltYWdlX3QgKmltYWdlOworfSBkcm1fcmFkZW9uX3RleHR1cmVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9zdGlwcGxlIHsKKwl1bnNpZ25lZCBpbnQgKm1hc2s7Cit9IGRybV9yYWRlb25fc3RpcHBsZV90OworCit0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX2luZGlyZWN0IHsKKwlpbnQgaWR4OworCWludCBzdGFydDsKKwlpbnQgZW5kOworCWludCBkaXNjYXJkOworfSBkcm1fcmFkZW9uX2luZGlyZWN0X3Q7CisKKy8qIGVudW0gZm9yIGNhcmQgdHlwZSBwYXJhbWV0ZXJzICovCisjZGVmaW5lIFJBREVPTl9DQVJEX1BDSSAwCisjZGVmaW5lIFJBREVPTl9DQVJEX0FHUCAxCisjZGVmaW5lIFJBREVPTl9DQVJEX1BDSUUgMgorCisvKiAxLjM6IEFuIGlvY3RsIHRvIGdldCBwYXJhbWV0ZXJzIHRoYXQgYXJlbid0IGF2YWlsYWJsZSB0byB0aGUgM2QKKyAqIGNsaWVudCBhbnkgb3RoZXIgd2F5LgorICovCisjZGVmaW5lIFJBREVPTl9QQVJBTV9HQVJUX0JVRkZFUl9PRkZTRVQgICAgMQkvKiBjYXJkIG9mZnNldCBvZiAxc3QgR0FSVCBidWZmZXIgKi8KKyNkZWZpbmUgUkFERU9OX1BBUkFNX0xBU1RfRlJBTUUgICAgICAgICAgICAyCisjZGVmaW5lIFJBREVPTl9QQVJBTV9MQVNUX0RJU1BBVENIICAgICAgICAgMworI2RlZmluZSBSQURFT05fUEFSQU1fTEFTVF9DTEVBUiAgICAgICAgICAgIDQKKy8qIEFkZGVkIHdpdGggRFJNIHZlcnNpb24gMS42LiAqLworI2RlZmluZSBSQURFT05fUEFSQU1fSVJRX05SICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgUkFERU9OX1BBUkFNX0dBUlRfQkFTRSAgICAgICAgICAgICA2CS8qIGNhcmQgb2Zmc2V0IG9mIEdBUlQgYmFzZSAqLworLyogQWRkZWQgd2l0aCBEUk0gdmVyc2lvbiAxLjguICovCisjZGVmaW5lIFJBREVPTl9QQVJBTV9SRUdJU1RFUl9IQU5ETEUgICAgICAgNwkvKiBmb3IgZHJtTWFwKCkgKi8KKyNkZWZpbmUgUkFERU9OX1BBUkFNX1NUQVRVU19IQU5ETEUgICAgICAgICA4CisjZGVmaW5lIFJBREVPTl9QQVJBTV9TQVJFQV9IQU5ETEUgICAgICAgICAgOQorI2RlZmluZSBSQURFT05fUEFSQU1fR0FSVF9URVhfSEFORExFICAgICAgIDEwCisjZGVmaW5lIFJBREVPTl9QQVJBTV9TQ1JBVENIX09GRlNFVCAgICAgICAgMTEKKyNkZWZpbmUgUkFERU9OX1BBUkFNX0NBUkRfVFlQRSAgICAgICAgICAgICAxMgorI2RlZmluZSBSQURFT05fUEFSQU1fVkJMQU5LX0NSVEMgICAgICAgICAgIDEzICAgLyogVkJMQU5LIENSVEMgKi8KKyNkZWZpbmUgUkFERU9OX1BBUkFNX0ZCX0xPQ0FUSU9OICAgICAgICAgICAxNCAgIC8qIEZCIGxvY2F0aW9uICovCisjZGVmaW5lIFJBREVPTl9QQVJBTV9OVU1fR0JfUElQRVMgICAgICAgICAgMTUgICAvKiBudW0gR0IgcGlwZXMgKi8KKyNkZWZpbmUgUkFERU9OX1BBUkFNX0RFVklDRV9JRCAgICAgICAgICAgICAxNgorI2RlZmluZSBSQURFT05fUEFSQU1fTlVNX1pfUElQRVMgICAgICAgICAgIDE3ICAgLyogbnVtIFogcGlwZXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9nZXRwYXJhbSB7CisJaW50IHBhcmFtOworCXZvaWQgKnZhbHVlOworfSBkcm1fcmFkZW9uX2dldHBhcmFtX3Q7CisKKy8qIDEuNjogU2V0IHVwIGEgbWVtb3J5IG1hbmFnZXIgZm9yIHJlZ2lvbnMgb2Ygc2hhcmVkIG1lbW9yeToKKyAqLworI2RlZmluZSBSQURFT05fTUVNX1JFR0lPTl9HQVJUIDEKKyNkZWZpbmUgUkFERU9OX01FTV9SRUdJT05fRkIgICAyCisKK3R5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fbWVtX2FsbG9jIHsKKwlpbnQgcmVnaW9uOworCWludCBhbGlnbm1lbnQ7CisJaW50IHNpemU7CisJaW50ICpyZWdpb25fb2Zmc2V0OwkvKiBvZmZzZXQgZnJvbSBzdGFydCBvZiBmYiBvciBHQVJUICovCit9IGRybV9yYWRlb25fbWVtX2FsbG9jX3Q7CisKK3R5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fbWVtX2ZyZWUgeworCWludCByZWdpb247CisJaW50IHJlZ2lvbl9vZmZzZXQ7Cit9IGRybV9yYWRlb25fbWVtX2ZyZWVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9tZW1faW5pdF9oZWFwIHsKKwlpbnQgcmVnaW9uOworCWludCBzaXplOworCWludCBzdGFydDsKK30gZHJtX3JhZGVvbl9tZW1faW5pdF9oZWFwX3Q7CisKKy8qIDEuNjogVXNlcnNwYWNlIGNhbiByZXF1ZXN0ICYgd2FpdCBvbiBpcnEnczoKKyAqLwordHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9pcnFfZW1pdCB7CisJaW50ICppcnFfc2VxOworfSBkcm1fcmFkZW9uX2lycV9lbWl0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGRybV9yYWRlb25faXJxX3dhaXQgeworCWludCBpcnFfc2VxOworfSBkcm1fcmFkZW9uX2lycV93YWl0X3Q7CisKKy8qIDEuMTA6IENsaWVudHMgdGVsbCB0aGUgRFJNIHdoZXJlIHRoZXkgdGhpbmsgdGhlIGZyYW1lYnVmZmVyIGlzIGxvY2F0ZWQgaW4KKyAqIHRoZSBjYXJkJ3MgYWRkcmVzcyBzcGFjZSwgdmlhIGEgbmV3IGdlbmVyaWMgaW9jdGwgdG8gc2V0IHBhcmFtZXRlcnMKKyAqLworCit0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX3NldHBhcmFtIHsKKwl1bnNpZ25lZCBpbnQgcGFyYW07CisJX19zNjQgdmFsdWU7Cit9IGRybV9yYWRlb25fc2V0cGFyYW1fdDsKKworI2RlZmluZSBSQURFT05fU0VUUEFSQU1fRkJfTE9DQVRJT04gICAgMQkvKiBkZXRlcm1pbmVkIGZyYW1lYnVmZmVyIGxvY2F0aW9uICovCisjZGVmaW5lIFJBREVPTl9TRVRQQVJBTV9TV0lUQ0hfVElMSU5HICAyCS8qIGVuYWJsZS9kaXNhYmxlIGNvbG9yIHRpbGluZyAqLworI2RlZmluZSBSQURFT05fU0VUUEFSQU1fUENJR0FSVF9MT0NBVElPTiAzCS8qIFBDSSBHYXJ0IExvY2F0aW9uICovCisjZGVmaW5lIFJBREVPTl9TRVRQQVJBTV9ORVdfTUVNTUFQIDQJCS8qIFVzZSBuZXcgbWVtb3J5IG1hcCAqLworI2RlZmluZSBSQURFT05fU0VUUEFSQU1fUENJR0FSVF9UQUJMRV9TSVpFIDUgICAgLyogUENJIEdBUlQgVGFibGUgU2l6ZSAqLworI2RlZmluZSBSQURFT05fU0VUUEFSQU1fVkJMQU5LX0NSVEMgNiAgICAgICAgICAgLyogVkJMQU5LIENSVEMgKi8KKy8qIDEuMTQ6IENsaWVudHMgY2FuIGFsbG9jYXRlL2ZyZWUgYSBzdXJmYWNlCisgKi8KK3R5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fc3VyZmFjZV9hbGxvYyB7CisJdW5zaWduZWQgaW50IGFkZHJlc3M7CisJdW5zaWduZWQgaW50IHNpemU7CisJdW5zaWduZWQgaW50IGZsYWdzOworfSBkcm1fcmFkZW9uX3N1cmZhY2VfYWxsb2NfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9zdXJmYWNlX2ZyZWUgeworCXVuc2lnbmVkIGludCBhZGRyZXNzOworfSBkcm1fcmFkZW9uX3N1cmZhY2VfZnJlZV90OworCisjZGVmaW5lCURSTV9SQURFT05fVkJMQU5LX0NSVEMxCQkxCisjZGVmaW5lCURSTV9SQURFT05fVkJMQU5LX0NSVEMyCQkyCisKKy8qCisgKiBLZXJuZWwgbW9kZXNldHRpbmcgd29ybGQgYmVsb3cuCisgKi8KKyNkZWZpbmUgUkFERU9OX0dFTV9ET01BSU5fQ1BVCQkweDEKKyNkZWZpbmUgUkFERU9OX0dFTV9ET01BSU5fR1RUCQkweDIKKyNkZWZpbmUgUkFERU9OX0dFTV9ET01BSU5fVlJBTQkJMHg0CisKK3N0cnVjdCBkcm1fcmFkZW9uX2dlbV9pbmZvIHsKKwl1aW50NjRfdAlnYXJ0X3NpemU7CisJdWludDY0X3QJdnJhbV9zaXplOworCXVpbnQ2NF90CXZyYW1fdmlzaWJsZTsKK307CisKKyNkZWZpbmUgUkFERU9OX0dFTV9OT19CQUNLSU5HX1NUT1JFIDEKKworc3RydWN0IGRybV9yYWRlb25fZ2VtX2NyZWF0ZSB7CisJdWludDY0X3QJc2l6ZTsKKwl1aW50NjRfdAlhbGlnbm1lbnQ7CisJdWludDMyX3QJaGFuZGxlOworCXVpbnQzMl90CWluaXRpYWxfZG9tYWluOworCXVpbnQzMl90CWZsYWdzOworfTsKKworI2RlZmluZSBSQURFT05fVElMSU5HX01BQ1JPICAgICAgIDB4MQorI2RlZmluZSBSQURFT05fVElMSU5HX01JQ1JPICAgICAgIDB4MgorI2RlZmluZSBSQURFT05fVElMSU5HX1NXQVBfMTZCSVQgIDB4NAorI2RlZmluZSBSQURFT05fVElMSU5HX1NXQVBfMzJCSVQgIDB4OAorI2RlZmluZSBSQURFT05fVElMSU5HX1NVUkZBQ0UgICAgIDB4MTAgLyogdGhpcyBvYmplY3QgcmVxdWlyZXMgYSBzdXJmYWNlCisJCQkJCSogd2hlbiBtYXBwZWQgLSBpLmUuIGZyb250IGJ1ZmZlciAqLworI2RlZmluZSBSQURFT05fVElMSU5HX01JQ1JPX1NRVUFSRSAweDIwCisKK3N0cnVjdCBkcm1fcmFkZW9uX2dlbV9zZXRfdGlsaW5nIHsKKwl1aW50MzJfdAloYW5kbGU7CisJdWludDMyX3QJdGlsaW5nX2ZsYWdzOworCXVpbnQzMl90CXBpdGNoOworfTsKKworc3RydWN0IGRybV9yYWRlb25fZ2VtX2dldF90aWxpbmcgeworCXVpbnQzMl90CWhhbmRsZTsKKwl1aW50MzJfdAl0aWxpbmdfZmxhZ3M7CisJdWludDMyX3QJcGl0Y2g7Cit9OworCitzdHJ1Y3QgZHJtX3JhZGVvbl9nZW1fbW1hcCB7CisJdWludDMyX3QJaGFuZGxlOworCXVpbnQzMl90CXBhZDsKKwl1aW50NjRfdAlvZmZzZXQ7CisJdWludDY0X3QJc2l6ZTsKKwl1aW50NjRfdAlhZGRyX3B0cjsKK307CisKK3N0cnVjdCBkcm1fcmFkZW9uX2dlbV9zZXRfZG9tYWluIHsKKwl1aW50MzJfdAloYW5kbGU7CisJdWludDMyX3QJcmVhZF9kb21haW5zOworCXVpbnQzMl90CXdyaXRlX2RvbWFpbjsKK307CisKK3N0cnVjdCBkcm1fcmFkZW9uX2dlbV93YWl0X2lkbGUgeworCXVpbnQzMl90CWhhbmRsZTsKKwl1aW50MzJfdAlwYWQ7Cit9OworCitzdHJ1Y3QgZHJtX3JhZGVvbl9nZW1fYnVzeSB7CisJdWludDMyX3QJaGFuZGxlOworCXVpbnQzMl90ICAgICAgICBkb21haW47Cit9OworCitzdHJ1Y3QgZHJtX3JhZGVvbl9nZW1fcHJlYWQgeworCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgYmVpbmcgcmVhZC4gKi8KKwl1aW50MzJfdCBoYW5kbGU7CisJdWludDMyX3QgcGFkOworCS8qKiBPZmZzZXQgaW50byB0aGUgb2JqZWN0IHRvIHJlYWQgZnJvbSAqLworCXVpbnQ2NF90IG9mZnNldDsKKwkvKiogTGVuZ3RoIG9mIGRhdGEgdG8gcmVhZCAqLworCXVpbnQ2NF90IHNpemU7CisJLyoqIFBvaW50ZXIgdG8gd3JpdGUgdGhlIGRhdGEgaW50by4gKi8KKwkvKiB2b2lkICosIGJ1dCBwb2ludGVycyBhcmUgbm90IDMyLzY0IGNvbXBhdGlibGUgKi8KKwl1aW50NjRfdCBkYXRhX3B0cjsKK307CisKK3N0cnVjdCBkcm1fcmFkZW9uX2dlbV9wd3JpdGUgeworCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgYmVpbmcgd3JpdHRlbiB0by4gKi8KKwl1aW50MzJfdCBoYW5kbGU7CisJdWludDMyX3QgcGFkOworCS8qKiBPZmZzZXQgaW50byB0aGUgb2JqZWN0IHRvIHdyaXRlIHRvICovCisJdWludDY0X3Qgb2Zmc2V0OworCS8qKiBMZW5ndGggb2YgZGF0YSB0byB3cml0ZSAqLworCXVpbnQ2NF90IHNpemU7CisJLyoqIFBvaW50ZXIgdG8gcmVhZCB0aGUgZGF0YSBmcm9tLiAqLworCS8qIHZvaWQgKiwgYnV0IHBvaW50ZXJzIGFyZSBub3QgMzIvNjQgY29tcGF0aWJsZSAqLworCXVpbnQ2NF90IGRhdGFfcHRyOworfTsKKworI2RlZmluZSBSQURFT05fQ0hVTktfSURfUkVMT0NTCTB4MDEKKyNkZWZpbmUgUkFERU9OX0NIVU5LX0lEX0lCCTB4MDIKKworc3RydWN0IGRybV9yYWRlb25fY3NfY2h1bmsgeworCXVpbnQzMl90CQljaHVua19pZDsKKwl1aW50MzJfdAkJbGVuZ3RoX2R3OworCXVpbnQ2NF90CQljaHVua19kYXRhOworfTsKKworc3RydWN0IGRybV9yYWRlb25fY3NfcmVsb2MgeworCXVpbnQzMl90CQloYW5kbGU7CisJdWludDMyX3QJCXJlYWRfZG9tYWluczsKKwl1aW50MzJfdAkJd3JpdGVfZG9tYWluOworCXVpbnQzMl90CQlmbGFnczsKK307CisKK3N0cnVjdCBkcm1fcmFkZW9uX2NzIHsKKwl1aW50MzJfdAkJbnVtX2NodW5rczsKKwl1aW50MzJfdAkJY3NfaWQ7CisJLyogdGhpcyBwb2ludHMgdG8gdWludDY0X3QgKiB3aGljaCBwb2ludCB0byBjcyBjaHVua3MgKi8KKwl1aW50NjRfdAkJY2h1bmtzOworCS8qIHVwZGF0ZXMgdG8gdGhlIGxpbWl0cyBhZnRlciB0aGlzIENTIGlvY3RsICovCisJdWludDY0X3QJCWdhcnRfbGltaXQ7CisJdWludDY0X3QJCXZyYW1fbGltaXQ7Cit9OworCisjZGVmaW5lIFJBREVPTl9JTkZPX0RFVklDRV9JRAkJMHgwMAorI2RlZmluZSBSQURFT05fSU5GT19OVU1fR0JfUElQRVMJMHgwMQorI2RlZmluZSBSQURFT05fSU5GT19OVU1fWl9QSVBFUyAJMHgwMgorI2RlZmluZSBSQURFT05fSU5GT19BQ0NFTF9XT1JLSU5HCTB4MDMKKyNkZWZpbmUgUkFERU9OX0lORk9fQ1JUQ19GUk9NX0lECTB4MDQKKyNkZWZpbmUgUkFERU9OX0lORk9fQUNDRUxfV09SS0lORzIJMHgwNQorI2RlZmluZSBSQURFT05fSU5GT19USUxJTkdfQ09ORklHCTB4MDYKKyNkZWZpbmUgUkFERU9OX0lORk9fV0FOVF9IWVBFUloJCTB4MDcKKworc3RydWN0IGRybV9yYWRlb25faW5mbyB7CisJdWludDMyX3QJCXJlcXVlc3Q7CisJdWludDMyX3QJCXBhZDsKKwl1aW50NjRfdAkJdmFsdWU7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9kcm0vc2F2YWdlX2RybS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2RybS9zYXZhZ2VfZHJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVjZTdiNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9kcm0vc2F2YWdlX2RybS5oCkBAIC0wLDAgKzEsMjEwIEBACisvKiBzYXZhZ2VfZHJtLmggLS0gUHVibGljIGhlYWRlciBmb3IgdGhlIHNhdmFnZSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwNCAgRmVsaXggS3VlaGxpbmcKKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBGRUxJWCBLVUVITElORyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRgorICogQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9fU0FWQUdFX0RSTV9IX18KKyNkZWZpbmUgX19TQVZBR0VfRFJNX0hfXworCisjaWZuZGVmIF9fU0FWQUdFX1NBUkVBX0RFRklORVNfXworI2RlZmluZSBfX1NBVkFHRV9TQVJFQV9ERUZJTkVTX18KKworLyogMiBoZWFwcyAoMSBmb3IgY2FyZCwgMSBmb3IgYWdwKSwgZWFjaCBkaXZpZGVkIGludG8gdXB0byAxMjgKKyAqIHJlZ2lvbnMsIHN1YmplY3QgdG8gYSBtaW5pbXVtIHJlZ2lvbiBzaXplIG9mICgxPDwxNikgPT0gNjRrLgorICoKKyAqIENsaWVudHMgbWF5IHN1YmRpdmlkZSByZWdpb25zIGludGVybmFsbHksIGJ1dCB3aGVuIHNoYXJpbmcgYmV0d2VlbgorICogY2xpZW50cywgdGhlIHJlZ2lvbiBzaXplIGlzIHRoZSBtaW5pbXVtIGdyYW51bGFyaXR5LgorICovCisKKyNkZWZpbmUgU0FWQUdFX0NBUkRfSEVBUAkJMAorI2RlZmluZSBTQVZBR0VfQUdQX0hFQVAJCQkxCisjZGVmaW5lIFNBVkFHRV9OUl9URVhfSEVBUFMJCTIKKyNkZWZpbmUgU0FWQUdFX05SX1RFWF9SRUdJT05TCQkxNgorI2RlZmluZSBTQVZBR0VfTE9HX01JTl9URVhfUkVHSU9OX1NJWkUJMTYKKworI2VuZGlmCQkJCS8qIF9fU0FWQUdFX1NBUkVBX0RFRklORVNfXyAqLworCit0eXBlZGVmIHN0cnVjdCBfZHJtX3NhdmFnZV9zYXJlYSB7CisJLyogTFJVIGxpc3RzIGZvciB0ZXh0dXJlIG1lbW9yeSBpbiBhZ3Agc3BhY2UgYW5kIG9uIHRoZSBjYXJkLgorCSAqLworCXN0cnVjdCBkcm1fdGV4X3JlZ2lvbiB0ZXhMaXN0W1NBVkFHRV9OUl9URVhfSEVBUFNdW1NBVkFHRV9OUl9URVhfUkVHSU9OUyArCisJCQkJCQkgICAgICAxXTsKKwl1bnNpZ25lZCBpbnQgdGV4QWdlW1NBVkFHRV9OUl9URVhfSEVBUFNdOworCisJLyogTWVjaGFuaXNtIHRvIHZhbGlkYXRlIGNhcmQgc3RhdGUuCisJICovCisJaW50IGN0eE93bmVyOworfSBkcm1fc2F2YWdlX3NhcmVhX3QsICpkcm1fc2F2YWdlX3NhcmVhX3B0cjsKKworLyogU2F2YWdlLXNwZWNpZmljIGlvY3RscworICovCisjZGVmaW5lIERSTV9TQVZBR0VfQkNJX0lOSVQJCTB4MDAKKyNkZWZpbmUgRFJNX1NBVkFHRV9CQ0lfQ01EQlVGICAgICAgICAgICAweDAxCisjZGVmaW5lIERSTV9TQVZBR0VfQkNJX0VWRU5UX0VNSVQJMHgwMgorI2RlZmluZSBEUk1fU0FWQUdFX0JDSV9FVkVOVF9XQUlUCTB4MDMKKworI2RlZmluZSBEUk1fSU9DVExfU0FWQUdFX0JDSV9JTklUCQlEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1NBVkFHRV9CQ0lfSU5JVCwgZHJtX3NhdmFnZV9pbml0X3QpCisjZGVmaW5lIERSTV9JT0NUTF9TQVZBR0VfQkNJX0NNREJVRgkJRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9TQVZBR0VfQkNJX0NNREJVRiwgZHJtX3NhdmFnZV9jbWRidWZfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1NBVkFHRV9CQ0lfRVZFTlRfRU1JVAlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1NBVkFHRV9CQ0lfRVZFTlRfRU1JVCwgZHJtX3NhdmFnZV9ldmVudF9lbWl0X3QpCisjZGVmaW5lIERSTV9JT0NUTF9TQVZBR0VfQkNJX0VWRU5UX1dBSVQJRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9TQVZBR0VfQkNJX0VWRU5UX1dBSVQsIGRybV9zYXZhZ2VfZXZlbnRfd2FpdF90KQorCisjZGVmaW5lIFNBVkFHRV9ETUFfUENJCTEKKyNkZWZpbmUgU0FWQUdFX0RNQV9BR1AJMwordHlwZWRlZiBzdHJ1Y3QgZHJtX3NhdmFnZV9pbml0IHsKKwllbnVtIHsKKwkJU0FWQUdFX0lOSVRfQkNJID0gMSwKKwkJU0FWQUdFX0NMRUFOVVBfQkNJID0gMgorCX0gZnVuYzsKKwl1bnNpZ25lZCBpbnQgc2FyZWFfcHJpdl9vZmZzZXQ7CisKKwkvKiBzb21lIHBhcmFtZXRlcnMgKi8KKwl1bnNpZ25lZCBpbnQgY29iX3NpemU7CisJdW5zaWduZWQgaW50IGJjaV90aHJlc2hvbGRfbG8sIGJjaV90aHJlc2hvbGRfaGk7CisJdW5zaWduZWQgaW50IGRtYV90eXBlOworCisJLyogZnJhbWUgYnVmZmVyIGxheW91dCAqLworCXVuc2lnbmVkIGludCBmYl9icHA7CisJdW5zaWduZWQgaW50IGZyb250X29mZnNldCwgZnJvbnRfcGl0Y2g7CisJdW5zaWduZWQgaW50IGJhY2tfb2Zmc2V0LCBiYWNrX3BpdGNoOworCXVuc2lnbmVkIGludCBkZXB0aF9icHA7CisJdW5zaWduZWQgaW50IGRlcHRoX29mZnNldCwgZGVwdGhfcGl0Y2g7CisKKwkvKiBsb2NhbCB0ZXh0dXJlcyAqLworCXVuc2lnbmVkIGludCB0ZXh0dXJlX29mZnNldDsKKwl1bnNpZ25lZCBpbnQgdGV4dHVyZV9zaXplOworCisJLyogcGh5c2ljYWwgbG9jYXRpb25zIG9mIG5vbi1wZXJtYW5lbnQgbWFwcyAqLworCXVuc2lnbmVkIGxvbmcgc3RhdHVzX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIGJ1ZmZlcnNfb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgYWdwX3RleHR1cmVzX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIGNtZF9kbWFfb2Zmc2V0OworfSBkcm1fc2F2YWdlX2luaXRfdDsKKwordHlwZWRlZiB1bmlvbiBkcm1fc2F2YWdlX2NtZF9oZWFkZXIgZHJtX3NhdmFnZV9jbWRfaGVhZGVyX3Q7Cit0eXBlZGVmIHN0cnVjdCBkcm1fc2F2YWdlX2NtZGJ1ZiB7CisJLyogY29tbWFuZCBidWZmZXIgaW4gY2xpZW50J3MgYWRkcmVzcyBzcGFjZSAqLworCWRybV9zYXZhZ2VfY21kX2hlYWRlcl90ICpjbWRfYWRkcjsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsJLyogc2l6ZSBvZiB0aGUgY29tbWFuZCBidWZmZXIgaW4gNjRiaXQgdW5pdHMgKi8KKworCXVuc2lnbmVkIGludCBkbWFfaWR4OwkvKiBETUEgYnVmZmVyIGluZGV4IHRvIHVzZSAqLworCWludCBkaXNjYXJkOwkJLyogZGlzY2FyZCBETUEgYnVmZmVyIHdoZW4gZG9uZSAqLworCS8qIHZlcnRleCBidWZmZXIgaW4gY2xpZW50J3MgYWRkcmVzcyBzcGFjZSAqLworCXVuc2lnbmVkIGludCAqdmJfYWRkcjsKKwl1bnNpZ25lZCBpbnQgdmJfc2l6ZTsJLyogc2l6ZSBvZiBjbGllbnQgdmVydGV4IGJ1ZmZlciBpbiBieXRlcyAqLworCXVuc2lnbmVkIGludCB2Yl9zdHJpZGU7CS8qIHN0cmlkZSBvZiB2ZXJ0aWNlcyBpbiAzMmJpdCB3b3JkcyAqLworCS8qIGJveGVzIGluIGNsaWVudCdzIGFkZHJlc3Mgc3BhY2UgKi8KKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqYm94X2FkZHI7CisJdW5zaWduZWQgaW50IG5ib3g7CS8qIG51bWJlciBvZiBjbGlwcGluZyBib3hlcyAqLworfSBkcm1fc2F2YWdlX2NtZGJ1Zl90OworCisjZGVmaW5lIFNBVkFHRV9XQUlUXzJEICAweDEJLyogd2FpdCBmb3IgMkQgaWRsZSBiZWZvcmUgdXBkYXRpbmcgZXZlbnQgdGFnICovCisjZGVmaW5lIFNBVkFHRV9XQUlUXzNEICAweDIJLyogd2FpdCBmb3IgM0QgaWRsZSBiZWZvcmUgdXBkYXRpbmcgZXZlbnQgdGFnICovCisjZGVmaW5lIFNBVkFHRV9XQUlUX0lSUSAweDQJLyogZW1pdCBvciB3YWl0IGZvciBJUlEsIG5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KK3R5cGVkZWYgc3RydWN0IGRybV9zYXZhZ2VfZXZlbnQgeworCXVuc2lnbmVkIGludCBjb3VudDsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7Cit9IGRybV9zYXZhZ2VfZXZlbnRfZW1pdF90LCBkcm1fc2F2YWdlX2V2ZW50X3dhaXRfdDsKKworLyogQ29tbWFuZHMgZm9yIHRoZSBjbWRidWYgaW9jdGwKKyAqLworI2RlZmluZSBTQVZBR0VfQ01EX1NUQVRFCTAJLyogYSByYW5nZSBvZiBzdGF0ZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU0FWQUdFX0NNRF9ETUFfUFJJTQkxCS8qIHZlcnRpY2VzIGZyb20gRE1BIGJ1ZmZlciAqLworI2RlZmluZSBTQVZBR0VfQ01EX1ZCX1BSSU0JMgkvKiB2ZXJ0aWNlcyBmcm9tIGNsaWVudCB2ZXJ0ZXggYnVmZmVyICovCisjZGVmaW5lIFNBVkFHRV9DTURfRE1BX0lEWAkzCS8qIGluZGV4ZWQgdmVydGljZXMgZnJvbSBETUEgYnVmZmVyICovCisjZGVmaW5lIFNBVkFHRV9DTURfVkJfSURYCTQJLyogaW5kZXhlZCB2ZXJ0aWNlcyBjbGllbnQgdmVydGV4IGJ1ZmZlciAqLworI2RlZmluZSBTQVZBR0VfQ01EX0NMRUFSCTUJLyogY2xlYXIgYnVmZmVycyAqLworI2RlZmluZSBTQVZBR0VfQ01EX1NXQVAJCTYJLyogc3dhcCBidWZmZXJzICovCisKKy8qIFByaW1pdGl2ZSB0eXBlcworKi8KKyNkZWZpbmUgU0FWQUdFX1BSSU1fVFJJTElTVAkwCS8qIHRyaWFuZ2xlIGxpc3QgKi8KKyNkZWZpbmUgU0FWQUdFX1BSSU1fVFJJU1RSSVAJMQkvKiB0cmlhbmdsZSBzdHJpcCAqLworI2RlZmluZSBTQVZBR0VfUFJJTV9UUklGQU4JMgkvKiB0cmlhbmdsZSBmYW4gKi8KKyNkZWZpbmUgU0FWQUdFX1BSSU1fVFJJTElTVF8yMDEJMwkvKiByZW9yZGVyIHZlcnRzIGZvciBjb3JyZWN0IGZsYXQKKwkJCQkJICogc2hhZGluZyBvbiBzM2QgKi8KKworLyogU2tpcCBmbGFncyAodmVydGV4IGZvcm1hdCkKKyAqLworI2RlZmluZSBTQVZBR0VfU0tJUF9aCQkweDAxCisjZGVmaW5lIFNBVkFHRV9TS0lQX1cJCTB4MDIKKyNkZWZpbmUgU0FWQUdFX1NLSVBfQzAJCTB4MDQKKyNkZWZpbmUgU0FWQUdFX1NLSVBfQzEJCTB4MDgKKyNkZWZpbmUgU0FWQUdFX1NLSVBfUzAJCTB4MTAKKyNkZWZpbmUgU0FWQUdFX1NLSVBfVDAJCTB4MjAKKyNkZWZpbmUgU0FWQUdFX1NLSVBfU1QwCQkweDMwCisjZGVmaW5lIFNBVkFHRV9TS0lQX1MxCQkweDQwCisjZGVmaW5lIFNBVkFHRV9TS0lQX1QxCQkweDgwCisjZGVmaW5lIFNBVkFHRV9TS0lQX1NUMQkJMHhjMAorI2RlZmluZSBTQVZBR0VfU0tJUF9BTExfUzNECTB4M2YKKyNkZWZpbmUgU0FWQUdFX1NLSVBfQUxMX1M0CTB4ZmYKKworLyogQnVmZmVyIG5hbWVzIGZvciBjbGVhciBjb21tYW5kCisgKi8KKyNkZWZpbmUgU0FWQUdFX0ZST05UCQkweDEKKyNkZWZpbmUgU0FWQUdFX0JBQ0sJCTB4MgorI2RlZmluZSBTQVZBR0VfREVQVEgJCTB4NAorCisvKiA2NC1iaXQgY29tbWFuZCBoZWFkZXIKKyAqLwordW5pb24gZHJtX3NhdmFnZV9jbWRfaGVhZGVyIHsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBjaGFyIGNtZDsJLyogY29tbWFuZCAqLworCQl1bnNpZ25lZCBjaGFyIHBhZDA7CisJCXVuc2lnbmVkIHNob3J0IHBhZDE7CisJCXVuc2lnbmVkIHNob3J0IHBhZDI7CisJCXVuc2lnbmVkIHNob3J0IHBhZDM7CisJfSBjbWQ7CQkJLyogZ2VuZXJpYyAqLworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgY21kOworCQl1bnNpZ25lZCBjaGFyIGdsb2JhbDsJLyogbmVlZCBpZGxlIGVuZ2luZT8gKi8KKwkJdW5zaWduZWQgc2hvcnQgY291bnQ7CS8qIG51bWJlciBvZiBjb25zZWN1dGl2ZSByZWdpc3RlcnMgKi8KKwkJdW5zaWduZWQgc2hvcnQgc3RhcnQ7CS8qIGZpcnN0IHJlZ2lzdGVyICovCisJCXVuc2lnbmVkIHNob3J0IHBhZDM7CisJfSBzdGF0ZTsJCS8qIFNBVkFHRV9DTURfU1RBVEUgKi8KKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBjaGFyIGNtZDsKKwkJdW5zaWduZWQgY2hhciBwcmltOwkvKiBwcmltaXRpdmUgdHlwZSAqLworCQl1bnNpZ25lZCBzaG9ydCBza2lwOwkvKiB2ZXJ0ZXggZm9ybWF0IChza2lwIGZsYWdzKSAqLworCQl1bnNpZ25lZCBzaG9ydCBjb3VudDsJLyogbnVtYmVyIG9mIHZlcnRpY2VzICovCisJCXVuc2lnbmVkIHNob3J0IHN0YXJ0OwkvKiBmaXJzdCB2ZXJ0ZXggaW4gRE1BL3ZlcnRleCBidWZmZXIgKi8KKwl9IHByaW07CQkJLyogU0FWQUdFX0NNRF9ETUFfUFJJTSwgU0FWQUdFX0NNRF9WQl9QUklNICovCisJc3RydWN0IHsKKwkJdW5zaWduZWQgY2hhciBjbWQ7CisJCXVuc2lnbmVkIGNoYXIgcHJpbTsKKwkJdW5zaWduZWQgc2hvcnQgc2tpcDsKKwkJdW5zaWduZWQgc2hvcnQgY291bnQ7CS8qIG51bWJlciBvZiBpbmRpY2VzIHRoYXQgZm9sbG93ICovCisJCXVuc2lnbmVkIHNob3J0IHBhZDM7CisJfSBpZHg7CQkJLyogU0FWQUdFX0NNRF9ETUFfSURYLCBTQVZBR0VfQ01EX1ZCX0lEWCAqLworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgY21kOworCQl1bnNpZ25lZCBjaGFyIHBhZDA7CisJCXVuc2lnbmVkIHNob3J0IHBhZDE7CisJCXVuc2lnbmVkIGludCBmbGFnczsKKwl9IGNsZWFyMDsJCS8qIFNBVkFHRV9DTURfQ0xFQVIgKi8KKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBpbnQgbWFzazsKKwkJdW5zaWduZWQgaW50IHZhbHVlOworCX0gY2xlYXIxOwkJLyogU0FWQUdFX0NNRF9DTEVBUiBkYXRhICovCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9kcm0vc2lzX2RybS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2RybS9zaXNfZHJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBmN2IzOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9kcm0vc2lzX2RybS5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qIHNpc19kcnYuaCAtLSBQcml2YXRlIGhlYWRlciBmb3Igc2lzIGRyaXZlciAtKi0gbGludXgtYyAtKi0gKi8KKy8qCisgKiBDb3B5cmlnaHQgMjAwNSBFcmljIEFuaG9sdAorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisKKyNpZm5kZWYgX19TSVNfRFJNX0hfXworI2RlZmluZSBfX1NJU19EUk1fSF9fCisKKy8qIFNpUyBzcGVjaWZpYyBpb2N0bHMgKi8KKyNkZWZpbmUgTk9UX1VTRURfMF8zCisjZGVmaW5lIERSTV9TSVNfRkJfQUxMT0MJMHgwNAorI2RlZmluZSBEUk1fU0lTX0ZCX0ZSRUUJICAgICAgICAweDA1CisjZGVmaW5lIE5PVF9VU0VEXzZfMTIKKyNkZWZpbmUgRFJNX1NJU19BR1BfSU5JVAkweDEzCisjZGVmaW5lIERSTV9TSVNfQUdQX0FMTE9DCTB4MTQKKyNkZWZpbmUgRFJNX1NJU19BR1BfRlJFRQkweDE1CisjZGVmaW5lIERSTV9TSVNfRkJfSU5JVAkgICAgICAgIDB4MTYKKworI2RlZmluZSBEUk1fSU9DVExfU0lTX0ZCX0FMTE9DCQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1NJU19GQl9BTExPQywgZHJtX3Npc19tZW1fdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1NJU19GQl9GUkVFCQlEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1NJU19GQl9GUkVFLCBkcm1fc2lzX21lbV90KQorI2RlZmluZSBEUk1fSU9DVExfU0lTX0FHUF9JTklUCQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1NJU19BR1BfSU5JVCwgZHJtX3Npc19hZ3BfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1NJU19BR1BfQUxMT0MJCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fU0lTX0FHUF9BTExPQywgZHJtX3Npc19tZW1fdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1NJU19BR1BfRlJFRQkJRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9TSVNfQUdQX0ZSRUUsIGRybV9zaXNfbWVtX3QpCisjZGVmaW5lIERSTV9JT0NUTF9TSVNfRkJfSU5JVAkJRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9TSVNfRkJfSU5JVCwgZHJtX3Npc19mYl90KQorLyoKKyNkZWZpbmUgRFJNX0lPQ1RMX1NJU19GTElQCQlEUk1fSU9XKCAweDQ4LCBkcm1fc2lzX2ZsaXBfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1NJU19GTElQX0lOSVQJCURSTV9JTyggIDB4NDkpCisjZGVmaW5lIERSTV9JT0NUTF9TSVNfRkxJUF9GSU5BTAlEUk1fSU8oICAweDUwKQorKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCWludCBjb250ZXh0OworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisJdW5zaWduZWQgaW50IHNpemU7CisJdW5zaWduZWQgbG9uZyBmcmVlOworfSBkcm1fc2lzX21lbV90OworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IG9mZnNldCwgc2l6ZTsKK30gZHJtX3Npc19hZ3BfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBvZmZzZXQsIHNpemU7Cit9IGRybV9zaXNfZmJfdDsKKworI2VuZGlmCQkJCS8qIF9fU0lTX0RSTV9IX18gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9kcm0vdmlhX2RybS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2RybS92aWFfZHJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgyZjg3OQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9kcm0vdmlhX2RybS5oCkBAIC0wLDAgKzEsMjc1IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwMyBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDAzIFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBWSUEsIFMzIEdSQVBISUNTLCBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBfVklBX0RSTV9IXworI2RlZmluZSBfVklBX0RSTV9IXworCisjaW5jbHVkZSAiZHJtLmgiCisKKy8qIFdBUk5JTkc6IFRoZXNlIGRlZmluZXMgbXVzdCBiZSB0aGUgc2FtZSBhcyB3aGF0IHRoZSBYc2VydmVyIHVzZXMuCisgKiBpZiB5b3UgY2hhbmdlIHRoZW0sIHlvdSBtdXN0IGNoYW5nZSB0aGUgZGVmaW5lcyBpbiB0aGUgWHNlcnZlci4KKyAqLworCisjaWZuZGVmIF9WSUFfREVGSU5FU18KKyNkZWZpbmUgX1ZJQV9ERUZJTkVTXworCisjaW5jbHVkZSAidmlhX2RybWNsaWVudC5oIgorCisjZGVmaW5lIFZJQV9OUl9TQVJFQV9DTElQUkVDVFMJCTgKKyNkZWZpbmUgVklBX05SX1hWTUNfUE9SVFMgICAgICAgICAgICAgICAxMAorI2RlZmluZSBWSUFfTlJfWFZNQ19MT0NLUyAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgVklBX01BWF9DQUNIRUxJTkVfU0laRSAgICAgICAgICA2NAorI2RlZmluZSBYVk1DTE9DS1BUUihzYVByaXYsbG9ja05vKQkJCQkJXAorCSgoX192b2xhdGlsZV9fIHN0cnVjdCBkcm1faHdfbG9jayAqKSgoKCgodW5zaWduZWQgbG9uZykgKHNhUHJpdiktPlh2TUNMb2NrQXJlYSkgKyBcCisJCQkJICAgICAgKFZJQV9NQVhfQ0FDSEVMSU5FX1NJWkUgLSAxKSkgJglcCisJCQkJICAgICB+KFZJQV9NQVhfQ0FDSEVMSU5FX1NJWkUgLSAxKSkgKwlcCisJCQkJICAgIFZJQV9NQVhfQ0FDSEVMSU5FX1NJWkUqKGxvY2tObykpKQorCisvKiBFYWNoIHJlZ2lvbiBpcyBhIG1pbmltdW0gb2YgNjRrLCBhbmQgdGhlcmUgYXJlIGF0IG1vc3QgNjQgb2YgdGhlbS4KKyAqLworI2RlZmluZSBWSUFfTlJfVEVYX1JFR0lPTlMgNjQKKyNkZWZpbmUgVklBX0xPR19NSU5fVEVYX1JFR0lPTl9TSVpFIDE2CisjZW5kaWYKKworI2RlZmluZSBWSUFfVVBMT0FEX1RFWDBJTUFHRSAgMHgxCS8qIGhhbmRsZWQgY2xpZW50c2lkZSAqLworI2RlZmluZSBWSUFfVVBMT0FEX1RFWDFJTUFHRSAgMHgyCS8qIGhhbmRsZWQgY2xpZW50c2lkZSAqLworI2RlZmluZSBWSUFfVVBMT0FEX0NUWCAgICAgICAgMHg0CisjZGVmaW5lIFZJQV9VUExPQURfQlVGRkVSUyAgICAweDgKKyNkZWZpbmUgVklBX1VQTE9BRF9URVgwICAgICAgIDB4MTAKKyNkZWZpbmUgVklBX1VQTE9BRF9URVgxICAgICAgIDB4MjAKKyNkZWZpbmUgVklBX1VQTE9BRF9DTElQUkVDVFMgIDB4NDAKKyNkZWZpbmUgVklBX1VQTE9BRF9BTEwgICAgICAgIDB4ZmYKKworLyogVklBIHNwZWNpZmljIGlvY3RscyAqLworI2RlZmluZSBEUk1fVklBX0FMTE9DTUVNCTB4MDAKKyNkZWZpbmUgRFJNX1ZJQV9GUkVFTUVNCSAgICAgICAgMHgwMQorI2RlZmluZSBEUk1fVklBX0FHUF9JTklUCTB4MDIKKyNkZWZpbmUgRFJNX1ZJQV9GQl9JTklUCSAgICAgICAgMHgwMworI2RlZmluZSBEUk1fVklBX01BUF9JTklUCTB4MDQKKyNkZWZpbmUgRFJNX1ZJQV9ERUNfRlVURVggICAgICAgMHgwNQorI2RlZmluZSBOT1RfVVNFRAorI2RlZmluZSBEUk1fVklBX0RNQV9JTklUCTB4MDcKKyNkZWZpbmUgRFJNX1ZJQV9DTURCVUZGRVIJMHgwOAorI2RlZmluZSBEUk1fVklBX0ZMVVNICSAgICAgICAgMHgwOQorI2RlZmluZSBEUk1fVklBX1BDSUNNRAkgICAgICAgIDB4MGEKKyNkZWZpbmUgRFJNX1ZJQV9DTURCVUZfU0laRQkweDBiCisjZGVmaW5lIE5PVF9VU0VECisjZGVmaW5lIERSTV9WSUFfV0FJVF9JUlEgICAgICAgIDB4MGQKKyNkZWZpbmUgRFJNX1ZJQV9ETUFfQkxJVCAgICAgICAgMHgwZQorI2RlZmluZSBEUk1fVklBX0JMSVRfU1lOQyAgICAgICAweDBmCisKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZJQV9BTExPQ01FTQkgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVklBX0FMTE9DTUVNLCBkcm1fdmlhX21lbV90KQorI2RlZmluZSBEUk1fSU9DVExfVklBX0ZSRUVNRU0JICBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZJQV9GUkVFTUVNLCBkcm1fdmlhX21lbV90KQorI2RlZmluZSBEUk1fSU9DVExfVklBX0FHUF9JTklUCSAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WSUFfQUdQX0lOSVQsIGRybV92aWFfYWdwX3QpCisjZGVmaW5lIERSTV9JT0NUTF9WSUFfRkJfSU5JVAkgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVklBX0ZCX0lOSVQsIGRybV92aWFfZmJfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZJQV9NQVBfSU5JVAkgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVklBX01BUF9JTklULCBkcm1fdmlhX2luaXRfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZJQV9ERUNfRlVURVggICBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZJQV9ERUNfRlVURVgsIGRybV92aWFfZnV0ZXhfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZJQV9ETUFfSU5JVAkgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVklBX0RNQV9JTklULCBkcm1fdmlhX2RtYV9pbml0X3QpCisjZGVmaW5lIERSTV9JT0NUTF9WSUFfQ01EQlVGRkVSCSAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WSUFfQ01EQlVGRkVSLCBkcm1fdmlhX2NtZGJ1ZmZlcl90KQorI2RlZmluZSBEUk1fSU9DVExfVklBX0ZMVVNICSAgRFJNX0lPKCAgRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WSUFfRkxVU0gpCisjZGVmaW5lIERSTV9JT0NUTF9WSUFfUENJQ01ECSAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WSUFfUENJQ01ELCBkcm1fdmlhX2NtZGJ1ZmZlcl90KQorI2RlZmluZSBEUk1fSU9DVExfVklBX0NNREJVRl9TSVpFIERSTV9JT1dSKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZJQV9DTURCVUZfU0laRSwgXAorCQkJCQkgICAgZHJtX3ZpYV9jbWRidWZfc2l6ZV90KQorI2RlZmluZSBEUk1fSU9DVExfVklBX1dBSVRfSVJRICAgIERSTV9JT1dSKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZJQV9XQUlUX0lSUSwgZHJtX3ZpYV9pcnF3YWl0X3QpCisjZGVmaW5lIERSTV9JT0NUTF9WSUFfRE1BX0JMSVQgICAgRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZJQV9ETUFfQkxJVCwgZHJtX3ZpYV9kbWFibGl0X3QpCisjZGVmaW5lIERSTV9JT0NUTF9WSUFfQkxJVF9TWU5DICAgRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZJQV9CTElUX1NZTkMsIGRybV92aWFfYmxpdHN5bmNfdCkKKworLyogSW5kaWNlcyBpbnRvIGJ1Zi5TZXR1cCB3aGVyZSB2YXJpb3VzIGJpdHMgb2Ygc3RhdGUgYXJlIG1pcnJvcmVkIHBlcgorICogY29udGV4dCBhbmQgcGVyIGJ1ZmZlci4gIFRoZXNlIGNhbiBiZSBmaXJlZCBhdCB0aGUgY2FyZCBhcyBhIHVuaXQsCisgKiBvciBpbiBhIHBpZWNld2lzZSBmYXNoaW9uIGFzIHJlcXVpcmVkLgorICovCisKKyNkZWZpbmUgVklBX1RFWF9TRVRVUF9TSVpFIDgKKworLyogRmxhZ3MgZm9yIGNsZWFyIGlvY3RsCisgKi8KKyNkZWZpbmUgVklBX0ZST05UICAgMHgxCisjZGVmaW5lIFZJQV9CQUNLICAgIDB4MgorI2RlZmluZSBWSUFfREVQVEggICAweDQKKyNkZWZpbmUgVklBX1NURU5DSUwgMHg4CisjZGVmaW5lIFZJQV9NRU1fVklERU8gICAwCS8qIG1hdGNoZXMgZHJtIGNvbnN0YW50ICovCisjZGVmaW5lIFZJQV9NRU1fQUdQICAgICAxCS8qIG1hdGNoZXMgZHJtIGNvbnN0YW50ICovCisjZGVmaW5lIFZJQV9NRU1fU1lTVEVNICAyCisjZGVmaW5lIFZJQV9NRU1fTUlYRUQgICAzCisjZGVmaW5lIFZJQV9NRU1fVU5LTk9XTiA0CisKK3R5cGVkZWYgc3RydWN0IHsKKwlfX3UzMiBvZmZzZXQ7CisJX191MzIgc2l6ZTsKK30gZHJtX3ZpYV9hZ3BfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCV9fdTMyIG9mZnNldDsKKwlfX3UzMiBzaXplOworfSBkcm1fdmlhX2ZiX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlfX3UzMiBjb250ZXh0OworCV9fdTMyIHR5cGU7CisJX191MzIgc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGluZGV4OworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworfSBkcm1fdmlhX21lbV90OworCit0eXBlZGVmIHN0cnVjdCBfZHJtX3ZpYV9pbml0IHsKKwllbnVtIHsKKwkJVklBX0lOSVRfTUFQID0gMHgwMSwKKwkJVklBX0NMRUFOVVBfTUFQID0gMHgwMgorCX0gZnVuYzsKKworCXVuc2lnbmVkIGxvbmcgc2FyZWFfcHJpdl9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBmYl9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBtbWlvX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIGFncEFkZHI7Cit9IGRybV92aWFfaW5pdF90OworCit0eXBlZGVmIHN0cnVjdCBfZHJtX3ZpYV9mdXRleCB7CisJZW51bSB7CisJCVZJQV9GVVRFWF9XQUlUID0gMHgwMCwKKwkJVklBX0ZVVEVYX1dBS0UgPSAwWDAxCisJfSBmdW5jOworCV9fdTMyIG1zOworCV9fdTMyIGxvY2s7CisJX191MzIgdmFsOworfSBkcm1fdmlhX2Z1dGV4X3Q7CisKK3R5cGVkZWYgc3RydWN0IF9kcm1fdmlhX2RtYV9pbml0IHsKKwllbnVtIHsKKwkJVklBX0lOSVRfRE1BID0gMHgwMSwKKwkJVklBX0NMRUFOVVBfRE1BID0gMHgwMiwKKwkJVklBX0RNQV9JTklUSUFMSVpFRCA9IDB4MDMKKwl9IGZ1bmM7CisKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdW5zaWduZWQgbG9uZyByZWdfcGF1c2VfYWRkcjsKK30gZHJtX3ZpYV9kbWFfaW5pdF90OworCit0eXBlZGVmIHN0cnVjdCBfZHJtX3ZpYV9jbWRidWZmZXIgeworCWNoYXIgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIHNpemU7Cit9IGRybV92aWFfY21kYnVmZmVyX3Q7CisKKy8qIFdhcm5pbmc6IElmIHlvdSBjaGFuZ2UgdGhlIFNBUkVBIHN0cnVjdHVyZSB5b3UgbXVzdCBjaGFuZ2UgdGhlIFhzZXJ2ZXIKKyAqIHN0cnVjdHVyZSBhcyB3ZWxsICovCisKK3R5cGVkZWYgc3RydWN0IF9kcm1fdmlhX3RleF9yZWdpb24geworCXVuc2lnbmVkIGNoYXIgbmV4dCwgcHJldjsJLyogaW5kaWNlcyB0byBmb3JtIGEgY2lyY3VsYXIgTFJVICAqLworCXVuc2lnbmVkIGNoYXIgaW5Vc2U7CS8qIG93bmVkIGJ5IGEgY2xpZW50LCBvciBmcmVlPyAqLworCWludCBhZ2U7CQkvKiB0cmFja2VkIGJ5IGNsaWVudHMgdG8gdXBkYXRlIGxvY2FsIExSVSdzICovCit9IGRybV92aWFfdGV4X3JlZ2lvbl90OworCit0eXBlZGVmIHN0cnVjdCBfZHJtX3ZpYV9zYXJlYSB7CisJdW5zaWduZWQgaW50IGRpcnR5OworCXVuc2lnbmVkIGludCBuYm94OworCXN0cnVjdCBkcm1fY2xpcF9yZWN0IGJveGVzW1ZJQV9OUl9TQVJFQV9DTElQUkVDVFNdOworCWRybV92aWFfdGV4X3JlZ2lvbl90IHRleExpc3RbVklBX05SX1RFWF9SRUdJT05TICsgMV07CisJaW50IHRleEFnZTsJCS8qIGxhc3QgdGltZSB0ZXh0dXJlIHdhcyB1cGxvYWRlZCAqLworCWludCBjdHhPd25lcjsJCS8qIGxhc3QgY29udGV4dCB0byB1cGxvYWQgc3RhdGUgKi8KKwlpbnQgdmVydGV4UHJpbTsKKworCS8qCisJICogQmVsb3cgaXMgZm9yIFh2TUMuCisJICogV2Ugd2FudCB0aGUgbG9jayBpbnRlZ2VycyBhbG9uZSBvbiwgYW5kIGFsaWduZWQgdG8sIGEgY2FjaGUgbGluZS4KKwkgKiBUaGVyZWZvcmUgdGhpcyBzb21ld2hhdCBzdHJhbmdlIGNvbnN0cnVjdC4KKwkgKi8KKworCWNoYXIgWHZNQ0xvY2tBcmVhW1ZJQV9NQVhfQ0FDSEVMSU5FX1NJWkUgKiAoVklBX05SX1hWTUNfTE9DS1MgKyAxKV07CisKKwl1bnNpZ25lZCBpbnQgWHZNQ0Rpc3BsYXlpbmdbVklBX05SX1hWTUNfUE9SVFNdOworCXVuc2lnbmVkIGludCBYdk1DU3ViUGljT25bVklBX05SX1hWTUNfUE9SVFNdOworCXVuc2lnbmVkIGludCBYdk1DQ3R4Tm9HcmFiYmVkOwkvKiBMYXN0IGNvbnRleHQgdG8gaG9sZCBkZWNvZGVyICovCisKKwkvKiBVc2VkIGJ5IHRoZSAzZCBkcml2ZXIgb25seSBhdCB0aGlzIHBvaW50LCBmb3IgcGFnZWZsaXBwaW5nOgorCSAqLworCXVuc2lnbmVkIGludCBwZkN1cnJlbnRPZmZzZXQ7Cit9IGRybV92aWFfc2FyZWFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2RybV92aWFfY21kYnVmX3NpemUgeworCWVudW0geworCQlWSUFfQ01EQlVGX1NQQUNFID0gMHgwMSwKKwkJVklBX0NNREJVRl9MQUcgPSAweDAyCisJfSBmdW5jOworCWludCB3YWl0OworCV9fdTMyIHNpemU7Cit9IGRybV92aWFfY21kYnVmX3NpemVfdDsKKwordHlwZWRlZiBlbnVtIHsKKwlWSUFfSVJRX0FCU09MVVRFID0gMHgwLAorCVZJQV9JUlFfUkVMQVRJVkUgPSAweDEsCisJVklBX0lSUV9TSUdOQUwgPSAweDEwMDAwMDAwLAorCVZJQV9JUlFfRk9SQ0VfU0VRVUVOQ0UgPSAweDIwMDAwMDAwCit9IHZpYV9pcnFfc2VxX3R5cGVfdDsKKworI2RlZmluZSBWSUFfSVJRX0ZMQUdTX01BU0sgMHhGMDAwMDAwMAorCitlbnVtIGRybV92aWFfaXJxcyB7CisJZHJtX3ZpYV9pcnFfaHF2MCA9IDAsCisJZHJtX3ZpYV9pcnFfaHF2MSwKKwlkcm1fdmlhX2lycV9kbWEwX2RkLAorCWRybV92aWFfaXJxX2RtYTBfdGQsCisJZHJtX3ZpYV9pcnFfZG1hMV9kZCwKKwlkcm1fdmlhX2lycV9kbWExX3RkLAorCWRybV92aWFfaXJxX251bQorfTsKKworc3RydWN0IGRybV92aWFfd2FpdF9pcnFfcmVxdWVzdCB7CisJdW5zaWduZWQgaXJxOworCXZpYV9pcnFfc2VxX3R5cGVfdCB0eXBlOworCV9fdTMyIHNlcXVlbmNlOworCV9fdTMyIHNpZ25hbDsKK307CisKK3R5cGVkZWYgdW5pb24gZHJtX3ZpYV9pcnF3YWl0IHsKKwlzdHJ1Y3QgZHJtX3ZpYV93YWl0X2lycV9yZXF1ZXN0IHJlcXVlc3Q7CisJc3RydWN0IGRybV93YWl0X3ZibGFua19yZXBseSByZXBseTsKK30gZHJtX3ZpYV9pcnF3YWl0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGRybV92aWFfYmxpdHN5bmMgeworCV9fdTMyIHN5bmNfaGFuZGxlOworCXVuc2lnbmVkIGVuZ2luZTsKK30gZHJtX3ZpYV9ibGl0c3luY190OworCisvKiAtICogQmVsb3csImZsYWdzIiBpcyBjdXJyZW50bHkgdW51c2VkIGJ1dCB3aWxsIGJlIHVzZWQgZm9yIHBvc3NpYmxlIGZ1dHVyZQorICogZXh0ZW5zaW9ucyBsaWtlIGtlcm5lbCBzcGFjZSBib3VuY2UgYnVmZmVycyBmb3IgYmFkIGFsaWdubWVudHMgYW5kCisgKiBibGl0IGVuZ2luZSBidXN5LXdhaXQgcG9sbGluZyBmb3IgYmV0dGVyIGxhdGVuY3kgaW4gdGhlIGFic2VuY2Ugb2YKKyAqIGludGVycnVwdHMuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgZHJtX3ZpYV9kbWFibGl0IHsKKwlfX3UzMiBudW1fbGluZXM7CisJX191MzIgbGluZV9sZW5ndGg7CisKKwlfX3UzMiBmYl9hZGRyOworCV9fdTMyIGZiX3N0cmlkZTsKKworCXVuc2lnbmVkIGNoYXIgKm1lbV9hZGRyOworCV9fdTMyIG1lbV9zdHJpZGU7CisKKwlfX3UzMiBmbGFnczsKKwlpbnQgdG9fZmI7CisKKwlkcm1fdmlhX2JsaXRzeW5jX3Qgc3luYzsKK30gZHJtX3ZpYV9kbWFibGl0X3Q7CisKKyNlbmRpZgkJCQkvKiBfVklBX0RSTV9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2RybS92bXdnZnhfZHJtLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZHJtL3Ztd2dmeF9kcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTBlNmJmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2RybS92bXdnZnhfZHJtLmgKQEAgLTAsMCArMSw2MTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCDCqSAyMDA5IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fVk1XR0ZYX0RSTV9IX18KKyNkZWZpbmUgX19WTVdHRlhfRFJNX0hfXworCisjZGVmaW5lIERSTV9WTVdfTUFYX1NVUkZBQ0VfRkFDRVMgNgorI2RlZmluZSBEUk1fVk1XX01BWF9NSVBfTEVWRUxTIDI0CisKKyNkZWZpbmUgRFJNX1ZNV19FWFRfTkFNRV9MRU4gMTI4CisKKyNkZWZpbmUgRFJNX1ZNV19HRVRfUEFSQU0gICAgICAgICAgICAwCisjZGVmaW5lIERSTV9WTVdfQUxMT0NfRE1BQlVGICAgICAgICAgMQorI2RlZmluZSBEUk1fVk1XX1VOUkVGX0RNQUJVRiAgICAgICAgIDIKKyNkZWZpbmUgRFJNX1ZNV19DVVJTT1JfQllQQVNTICAgICAgICAzCisvKiBndWFyZGVkIGJ5IERSTV9WTVdfUEFSQU1fTlVNX1NUUkVBTVMgIT0gMCovCisjZGVmaW5lIERSTV9WTVdfQ09OVFJPTF9TVFJFQU0gICAgICAgNAorI2RlZmluZSBEUk1fVk1XX0NMQUlNX1NUUkVBTSAgICAgICAgIDUKKyNkZWZpbmUgRFJNX1ZNV19VTlJFRl9TVFJFQU0gICAgICAgICA2CisvKiBndWFyZGVkIGJ5IERSTV9WTVdfUEFSQU1fM0QgPT0gMSAqLworI2RlZmluZSBEUk1fVk1XX0NSRUFURV9DT05URVhUICAgICAgIDcKKyNkZWZpbmUgRFJNX1ZNV19VTlJFRl9DT05URVhUICAgICAgICA4CisjZGVmaW5lIERSTV9WTVdfQ1JFQVRFX1NVUkZBQ0UgICAgICAgOQorI2RlZmluZSBEUk1fVk1XX1VOUkVGX1NVUkZBQ0UgICAgICAgIDEwCisjZGVmaW5lIERSTV9WTVdfUkVGX1NVUkZBQ0UgICAgICAgICAgMTEKKyNkZWZpbmUgRFJNX1ZNV19FWEVDQlVGICAgICAgICAgICAgICAxMgorI2RlZmluZSBEUk1fVk1XX0ZJRk9fREVCVUcgICAgICAgICAgIDEzCisjZGVmaW5lIERSTV9WTVdfRkVOQ0VfV0FJVCAgICAgICAgICAgMTQKKy8qIGd1YXJkZWQgYnkgbWlub3IgdmVyc2lvbiA+PSAyICovCisjZGVmaW5lIERSTV9WTVdfVVBEQVRFX0xBWU9VVCAgICAgICAgMTUKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogRFJNX1ZNV19HRVRfUEFSQU0gLSBnZXQgZGV2aWNlIGluZm9ybWF0aW9uLgorICoKKyAqIERSTV9WTVdfUEFSQU1fRklGT19PRkZTRVQ6CisgKiBPZmZzZXQgdG8gdXNlIHRvIG1hcCB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgRklGTyByZWFkLW9ubHkuCisgKiBUaGUgZmlmbyBpcyBtYXBwZWQgdXNpbmcgdGhlIG1tYXAoKSBzeXN0ZW0gY2FsbCBvbiB0aGUgZHJtIGRldmljZS4KKyAqCisgKiBEUk1fVk1XX1BBUkFNX09WRVJMQVlfSU9DVEw6CisgKiBEb2VzIHRoZSBkcml2ZXIgc3VwcG9ydCB0aGUgb3ZlcmxheSBpb2N0bC4KKyAqLworCisjZGVmaW5lIERSTV9WTVdfUEFSQU1fTlVNX1NUUkVBTVMgICAgICAwCisjZGVmaW5lIERSTV9WTVdfUEFSQU1fTlVNX0ZSRUVfU1RSRUFNUyAxCisjZGVmaW5lIERSTV9WTVdfUEFSQU1fM0QgICAgICAgICAgICAgICAyCisjZGVmaW5lIERSTV9WTVdfUEFSQU1fRklGT19PRkZTRVQgICAgICAzCisjZGVmaW5lIERSTV9WTVdfUEFSQU1fSFdfQ0FQUyAgICAgICAgICA0CisjZGVmaW5lIERSTV9WTVdfUEFSQU1fRklGT19DQVBTICAgICAgICA1CisjZGVmaW5lIERSTV9WTVdfUEFSQU1fTUFYX0ZCX1NJWkUgICAgICA2CisKKy8qKgorICogc3RydWN0IGRybV92bXdfZ2V0cGFyYW1fYXJnCisgKgorICogQHZhbHVlOiBSZXR1cm5lZCB2YWx1ZS4gLy9PdXQKKyAqIEBwYXJhbTogUGFyYW1ldGVyIHRvIHF1ZXJ5LiAvL0luLgorICoKKyAqIEFyZ3VtZW50IHRvIHRoZSBEUk1fVk1XX0dFVF9QQVJBTSBJb2N0bC4KKyAqLworCitzdHJ1Y3QgZHJtX3Ztd19nZXRwYXJhbV9hcmcgeworCXVpbnQ2NF90IHZhbHVlOworCXVpbnQzMl90IHBhcmFtOworCXVpbnQzMl90IHBhZDY0OworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIERSTV9WTVdfRVhURU5TSU9OIC0gUXVlcnkgZGV2aWNlIGV4dGVuc2lvbnMuCisgKi8KKworLyoqCisgKiBzdHJ1Y3QgZHJtX3Ztd19leHRlbnNpb25fcmVwCisgKgorICogQGV4aXN0czogVGhlIHF1ZXJpZWQgZXh0ZW5zaW9uIGV4aXN0cy4KKyAqIEBkcml2ZXJfaW9jdGxfb2Zmc2V0OiBJb2N0bCBudW1iZXIgb2YgdGhlIGZpcnN0IGlvY3RsIGluIHRoZSBleHRlbnNpb24uCisgKiBAZHJpdmVyX3NhcmVhX29mZnNldDogT2Zmc2V0IHRvIGFueSBzcGFjZSBpbiB0aGUgRFJJIFNBUkVBCisgKiB1c2VkIGJ5IHRoZSBleHRlbnNpb24uCisgKiBAbWFqb3I6IE1ham9yIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBleHRlbnNpb24uCisgKiBAbWlub3I6IE1pbm9yIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBleHRlbnNpb24uCisgKiBAcGw6IFBhdGNoIGxldmVsIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBleHRlbnNpb24uCisgKgorICogT3V0cHV0IGFyZ3VtZW50IHRvIHRoZSBEUk1fVk1XX0VYVEVOU0lPTiBJb2N0bC4KKyAqLworCitzdHJ1Y3QgZHJtX3Ztd19leHRlbnNpb25fcmVwIHsKKwlpbnQzMl90IGV4aXN0czsKKwl1aW50MzJfdCBkcml2ZXJfaW9jdGxfb2Zmc2V0OworCXVpbnQzMl90IGRyaXZlcl9zYXJlYV9vZmZzZXQ7CisJdWludDMyX3QgbWFqb3I7CisJdWludDMyX3QgbWlub3I7CisJdWludDMyX3QgcGw7CisJdWludDMyX3QgcGFkNjQ7Cit9OworCisvKioKKyAqIHVuaW9uIGRybV92bXdfZXh0ZW5zaW9uX2FyZworICoKKyAqIEBleHRlbnNpb24gLSBBc2NpaSBuYW1lIG9mIHRoZSBleHRlbnNpb24gdG8gYmUgcXVlcmllZC4gLy9JbgorICogQHJlcCAtIFJlcGx5IGFzIGRlZmluZWQgYWJvdmUuIC8vT3V0CisgKgorICogQXJndW1lbnQgdG8gdGhlIERSTV9WTVdfRVhURU5TSU9OIElvY3RsLgorICovCisKK3VuaW9uIGRybV92bXdfZXh0ZW5zaW9uX2FyZyB7CisJY2hhciBleHRlbnNpb25bRFJNX1ZNV19FWFRfTkFNRV9MRU5dOworCXN0cnVjdCBkcm1fdm13X2V4dGVuc2lvbl9yZXAgcmVwOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIERSTV9WTVdfQ1JFQVRFX0NPTlRFWFQgLSBDcmVhdGUgYSBob3N0IGNvbnRleHQuCisgKgorICogQWxsb2NhdGVzIGEgZGV2aWNlIHVuaXF1ZSBjb250ZXh0IGlkLCBhbmQgcXVldWVzIGEgY3JlYXRlIGNvbnRleHQgY29tbWFuZAorICogZm9yIHRoZSBob3N0LiBEb2VzIG5vdCB3YWl0IGZvciBob3N0IGNvbXBsZXRpb24uCisgKi8KKworLyoqCisgKiBzdHJ1Y3QgZHJtX3Ztd19jb250ZXh0X2FyZworICoKKyAqIEBjaWQ6IERldmljZSB1bmlxdWUgY29udGV4dCBJRC4KKyAqCisgKiBPdXRwdXQgYXJndW1lbnQgdG8gdGhlIERSTV9WTVdfQ1JFQVRFX0NPTlRFWFQgSW9jdGwuCisgKiBJbnB1dCBhcmd1bWVudCB0byB0aGUgRFJNX1ZNV19VTlJFRl9DT05URVhUIElvY3RsLgorICovCisKK3N0cnVjdCBkcm1fdm13X2NvbnRleHRfYXJnIHsKKwlpbnQzMl90IGNpZDsKKwl1aW50MzJfdCBwYWQ2NDsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBEUk1fVk1XX1VOUkVGX0NPTlRFWFQgLSBDcmVhdGUgYSBob3N0IGNvbnRleHQuCisgKgorICogRnJlZXMgYSBnbG9iYWwgY29udGV4dCBpZCwgYW5kIHF1ZXVlcyBhIGRlc3Ryb3kgaG9zdCBjb21tYW5kIGZvciB0aGUgaG9zdC4KKyAqIERvZXMgbm90IHdhaXQgZm9yIGhvc3QgY29tcGxldGlvbi4gVGhlIGNvbnRleHQgSUQgY2FuIGJlIHVzZWQgZGlyZWN0bHkKKyAqIGluIHRoZSBjb21tYW5kIHN0cmVhbSBhbmQgc2hvd3MgdXAgYXMgdGhlIHNhbWUgY29udGV4dCBJRCBvbiB0aGUgaG9zdC4KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogRFJNX1ZNV19DUkVBVEVfU1VSRkFDRSAtIENyZWF0ZSBhIGhvc3Qgc3VmYWNlLgorICoKKyAqIEFsbG9jYXRlcyBhIGRldmljZSB1bmlxdWUgc3VyZmFjZSBpZCwgYW5kIHF1ZXVlcyBhIGNyZWF0ZSBzdXJmYWNlIGNvbW1hbmQKKyAqIGZvciB0aGUgaG9zdC4gRG9lcyBub3Qgd2FpdCBmb3IgaG9zdCBjb21wbGV0aW9uLiBUaGUgc3VyZmFjZSBJRCBjYW4gYmUKKyAqIHVzZWQgZGlyZWN0bHkgaW4gdGhlIGNvbW1hbmQgc3RyZWFtIGFuZCBzaG93cyB1cCBhcyB0aGUgc2FtZSBzdXJmYWNlCisgKiBJRCBvbiB0aGUgaG9zdC4KKyAqLworCisvKioKKyAqIHN0cnVjdCBkcm1fd212X3N1cmZhY2VfY3JlYXRlX3JlcQorICoKKyAqIEBmbGFnczogU3VyZmFjZSBmbGFncyBhcyB1bmRlcnN0b29kIGJ5IHRoZSBob3N0LgorICogQGZvcm1hdDogU3VyZmFjZSBmb3JtYXQgYXMgdW5kZXJzdG9vZCBieSB0aGUgaG9zdC4KKyAqIEBtaXBfbGV2ZWxzOiBOdW1iZXIgb2YgbWlwIGxldmVscyBmb3IgZWFjaCBmYWNlLgorICogQW4gdW51c2VkIGZhY2Ugc2hvdWxkIGhhdmUgMCBlbmNvZGVkLgorICogQHNpemVfYWRkcjogQWRkcmVzcyBvZiBhIHVzZXItc3BhY2UgYXJyYXkgb2Ygc3J1Y3QgZHJtX3Ztd19zaXplCisgKiBjYXN0IHRvIGFuIHVpbnQ2NF90IGZvciAzMi02NCBiaXQgY29tcGF0aWJpbGl0eS4KKyAqIFRoZSBzaXplIG9mIHRoZSBhcnJheSBzaG91bGQgZXF1YWwgdGhlIHRvdGFsIG51bWJlciBvZiBtaXBtYXAgbGV2ZWxzLgorICogQHNoYXJlYWJsZTogQm9vbGVhbiB3aGV0aGVyIG90aGVyIGNsaWVudHMgKGFzIGlkZW50aWZpZWQgYnkgZmlsZSBkZXNjcmlwdG9ycykKKyAqIG1heSByZWZlcmVuY2UgdGhpcyBzdXJmYWNlLgorICogQHNjYW5vdXQ6IEJvb2xlYW4gd2hldGhlciB0aGUgc3VyZmFjZSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGEKKyAqIHNjYW5vdXQuCisgKgorICogSW5wdXQgZGF0YSB0byB0aGUgRFJNX1ZNV19DUkVBVEVfU1VSRkFDRSBJb2N0bC4KKyAqIE91dHB1dCBkYXRhIGZyb20gdGhlIERSTV9WTVdfUkVGX1NVUkZBQ0UgSW9jdGwuCisgKi8KKworc3RydWN0IGRybV92bXdfc3VyZmFjZV9jcmVhdGVfcmVxIHsKKwl1aW50MzJfdCBmbGFnczsKKwl1aW50MzJfdCBmb3JtYXQ7CisJdWludDMyX3QgbWlwX2xldmVsc1tEUk1fVk1XX01BWF9TVVJGQUNFX0ZBQ0VTXTsKKwl1aW50NjRfdCBzaXplX2FkZHI7CisJaW50MzJfdCBzaGFyZWFibGU7CisJaW50MzJfdCBzY2Fub3V0OworfTsKKworLyoqCisgKiBzdHJ1Y3QgZHJtX3dtdl9zdXJmYWNlX2FyZworICoKKyAqIEBzaWQ6IFN1cmZhY2UgaWQgb2YgY3JlYXRlZCBzdXJmYWNlIG9yIHN1cmZhY2UgdG8gZGVzdHJveSBvciByZWZlcmVuY2UuCisgKgorICogT3V0cHV0IGRhdGEgZnJvbSB0aGUgRFJNX1ZNV19DUkVBVEVfU1VSRkFDRSBJb2N0bC4KKyAqIElucHV0IGFyZ3VtZW50IHRvIHRoZSBEUk1fVk1XX1VOUkVGX1NVUkZBQ0UgSW9jdGwuCisgKiBJbnB1dCBhcmd1bWVudCB0byB0aGUgRFJNX1ZNV19SRUZfU1VSRkFDRSBJb2N0bC4KKyAqLworCitzdHJ1Y3QgZHJtX3Ztd19zdXJmYWNlX2FyZyB7CisJaW50MzJfdCBzaWQ7CisJdWludDMyX3QgcGFkNjQ7Cit9OworCisvKioKKyAqIHN0cnVjdCBkcm1fdm13X3NpemUgaW9jdGwuCisgKgorICogQHdpZHRoIC0gbWlwIGxldmVsIHdpZHRoCisgKiBAaGVpZ2h0IC0gbWlwIGxldmVsIGhlaWdodAorICogQGRlcHRoIC0gbWlwIGxldmVsIGRlcHRoCisgKgorICogRGVzY3JpcHRpb24gb2YgYSBtaXAgbGV2ZWwuCisgKiBJbnB1dCBkYXRhIHRvIHRoZSBEUk1fV01XX0NSRUFURV9TVVJGQUNFIElvY3RsLgorICovCisKK3N0cnVjdCBkcm1fdm13X3NpemUgeworCXVpbnQzMl90IHdpZHRoOworCXVpbnQzMl90IGhlaWdodDsKKwl1aW50MzJfdCBkZXB0aDsKKwl1aW50MzJfdCBwYWQ2NDsKK307CisKKy8qKgorICogdW5pb24gZHJtX3Ztd19zdXJmYWNlX2NyZWF0ZV9hcmcKKyAqCisgKiBAcmVwOiBPdXRwdXQgZGF0YSBhcyBkZXNjcmliZWQgYWJvdmUuCisgKiBAcmVxOiBJbnB1dCBkYXRhIGFzIGRlc2NyaWJlZCBhYm92ZS4KKyAqCisgKiBBcmd1bWVudCB0byB0aGUgRFJNX1ZNV19DUkVBVEVfU1VSRkFDRSBJb2N0bC4KKyAqLworCit1bmlvbiBkcm1fdm13X3N1cmZhY2VfY3JlYXRlX2FyZyB7CisJc3RydWN0IGRybV92bXdfc3VyZmFjZV9hcmcgcmVwOworCXN0cnVjdCBkcm1fdm13X3N1cmZhY2VfY3JlYXRlX3JlcSByZXE7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogRFJNX1ZNV19SRUZfU1VSRkFDRSAtIFJlZmVyZW5jZSBhIGhvc3Qgc3VyZmFjZS4KKyAqCisgKiBQdXRzIGEgcmVmZXJlbmNlIG9uIGEgaG9zdCBzdXJmYWNlIHdpdGggYSBnaXZlIHNpZCwgYXMgcHJldmlvdXNseQorICogcmV0dXJuZWQgYnkgdGhlIERSTV9WTVdfQ1JFQVRFX1NVUkZBQ0UgaW9jdGwuCisgKiBBIHJlZmVyZW5jZSB3aWxsIG1ha2Ugc3VyZSB0aGUgc3VyZmFjZSBpc24ndCBkZXN0cm95ZWQgd2hpbGUgd2UgaG9sZAorICogaXQgYW5kIHdpbGwgYWxsb3cgdGhlIGNhbGxpbmcgY2xpZW50IHRvIHVzZSB0aGUgc3VyZmFjZSBJRCBpbiB0aGUgY29tbWFuZAorICogc3RyZWFtLgorICoKKyAqIE9uIHN1Y2Nlc3NmdWwgcmV0dXJuLCB0aGUgSW9jdGwgcmV0dXJucyB0aGUgc3VyZmFjZSBpbmZvcm1hdGlvbiBnaXZlbgorICogaW4gdGhlIERSTV9WTVdfQ1JFQVRFX1NVUkZBQ0UgaW9jdGwuCisgKi8KKworLyoqCisgKiB1bmlvbiBkcm1fdm13X3N1cmZhY2VfcmVmZXJlbmNlX2FyZworICoKKyAqIEByZXA6IE91dHB1dCBkYXRhIGFzIGRlc2NyaWJlZCBhYm92ZS4KKyAqIEByZXE6IElucHV0IGRhdGEgYXMgZGVzY3JpYmVkIGFib3ZlLgorICoKKyAqIEFyZ3VtZW50IHRvIHRoZSBEUk1fVk1XX1JFRl9TVVJGQUNFIElvY3RsLgorICovCisKK3VuaW9uIGRybV92bXdfc3VyZmFjZV9yZWZlcmVuY2VfYXJnIHsKKwlzdHJ1Y3QgZHJtX3Ztd19zdXJmYWNlX2NyZWF0ZV9yZXEgcmVwOworCXN0cnVjdCBkcm1fdm13X3N1cmZhY2VfYXJnIHJlcTsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBEUk1fVk1XX1VOUkVGX1NVUkZBQ0UgLSBVbnJlZmVyZW5jZSBhIGhvc3Qgc3VyZmFjZS4KKyAqCisgKiBDbGVhciBhIHJlZmVyZW5jZSBwcmV2aW91c2x5IHB1dCBvbiBhIGhvc3Qgc3VyZmFjZS4KKyAqIFdoZW4gYWxsIHJlZmVyZW5jZXMgYXJlIGdvbmUsIGluY2x1ZGluZyB0aGUgb25lIGltcGxpY2l0bHkgcGxhY2VkCisgKiBvbiBjcmVhdGlvbiwKKyAqIGEgZGVzdHJveSBzdXJmYWNlIGNvbW1hbmQgd2lsbCBiZSBxdWV1ZWQgZm9yIHRoZSBob3N0LgorICogRG9lcyBub3Qgd2FpdCBmb3IgY29tcGxldGlvbi4KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogRFJNX1ZNV19FWEVDQlVGCisgKgorICogU3VibWl0IGEgY29tbWFuZCBidWZmZXIgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgaG9zdCwgYW5kIHJldHVybiBhCisgKiBmZW5jZSBzZXF1ZW5jZSB0aGF0IHdoZW4gc2lnbmFsZWQsIGluZGljYXRlcyB0aGF0IHRoZSBjb21tYW5kIGJ1ZmZlciBoYXMKKyAqIGV4ZWN1dGVkLgorICovCisKKy8qKgorICogc3RydWN0IGRybV92bXdfZXhlY2J1Zl9hcmcKKyAqCisgKiBAY29tbWFuZHM6IFVzZXItc3BhY2UgYWRkcmVzcyBvZiBhIGNvbW1hbmQgYnVmZmVyIGNhc3QgdG8gYW4gdWludDY0X3QuCisgKiBAY29tbWFuZC1zaXplOiBTaXplIGluIGJ5dGVzIG9mIHRoZSBjb21tYW5kIGJ1ZmZlci4KKyAqIEB0aHJvdHRsZS11czogU2xlZXAgdW50aWwgc29mdHdhcmUgaXMgbGVzcyB0aGFuIEB0aHJvdHRsZV91cworICogbWljcm9zZWNvbmRzIGFoZWFkIG9mIGhhcmR3YXJlLiBUaGUgZHJpdmVyIG1heSByb3VuZCB0aGlzIHZhbHVlCisgKiB0byB0aGUgbmVhcmVzdCBrZXJuZWwgdGljay4KKyAqIEBmZW5jZV9yZXA6IFVzZXItc3BhY2UgYWRkcmVzcyBvZiBhIHN0cnVjdCBkcm1fdm13X2ZlbmNlX3JlcCBjYXN0IHRvIGFuCisgKiB1aW50NjRfdC4KKyAqIEB2ZXJzaW9uOiBBbGxvd3MgZXhwYW5kaW5nIHRoZSBleGVjYnVmIGlvY3RsIHBhcmFtZXRlcnMgd2l0aG91dCBicmVha2luZworICogYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHNpbmNlIHVzZXItc3BhY2Ugd2lsbCBhbHdheXMgdGVsbCB0aGUga2VybmVsCisgKiB3aGljaCB2ZXJzaW9uIGl0IHVzZXMuCisgKiBAZmxhZ3M6IEV4ZWNidWYgZmxhZ3MuIE5vbmUgY3VycmVudGx5LgorICoKKyAqIEFyZ3VtZW50IHRvIHRoZSBEUk1fVk1XX0VYRUNCVUYgSW9jdGwuCisgKi8KKworI2RlZmluZSBEUk1fVk1XX0VYRUNCVUZfVkVSU0lPTiAwCisKK3N0cnVjdCBkcm1fdm13X2V4ZWNidWZfYXJnIHsKKwl1aW50NjRfdCBjb21tYW5kczsKKwl1aW50MzJfdCBjb21tYW5kX3NpemU7CisJdWludDMyX3QgdGhyb3R0bGVfdXM7CisJdWludDY0X3QgZmVuY2VfcmVwOworCSB1aW50MzJfdCB2ZXJzaW9uOworCSB1aW50MzJfdCBmbGFnczsKK307CisKKy8qKgorICogc3RydWN0IGRybV92bXdfZmVuY2VfcmVwCisgKgorICogQGZlbmNlX3NlcTogRmVuY2Ugc2VxdWVuY2UgYXNzb2NpYXRlZCB3aXRoIGEgY29tbWFuZCBzdWJtaXNzaW9uLgorICogQGVycm9yOiBUaGlzIG1lbWJlciBzaG91bGQndmUgYmVlbiBzZXQgdG8gLUVGQVVMVCBvbiBzdWJtaXNzaW9uLgorICogVGhlIGZvbGxvd2luZyBhY3Rpb25zIHNob3VsZCBiZSB0YWtlIG9uIGNvbXBsZXRpb246CisgKiBlcnJvciA9PSAtRUZBVUxUOiBGZW5jZSBjb21tdW5pY2F0aW9uIGZhaWxlZC4gVGhlIGhvc3QgaXMgc3luY2hyb25pemVkLgorICogVXNlIHRoZSBsYXN0IGZlbmNlIGlkIHJlYWQgZnJvbSB0aGUgRklGTyBmZW5jZSByZWdpc3Rlci4KKyAqIGVycm9yICE9IDAgJiYgZXJyb3IgIT0gLUVGQVVMVDoKKyAqIEZlbmNlIHN1Ym1pc3Npb24gZmFpbGVkLiBUaGUgaG9zdCBpcyBzeW5jaHJvbml6ZWQuIFVzZSB0aGUgZmVuY2Vfc2VxIG1lbWJlci4KKyAqIGVycm9yID09IDA6IEFsbCBpcyBPSywgVGhlIGhvc3QgbWF5IG5vdCBiZSBzeW5jaHJvbml6ZWQuCisgKiBVc2UgdGhlIGZlbmNlX3NlcSBtZW1iZXIuCisgKgorICogSW5wdXQgLyBPdXRwdXQgZGF0YSB0byB0aGUgRFJNX1ZNV19FWEVDQlVGIElvY3RsLgorICovCisKK3N0cnVjdCBkcm1fdm13X2ZlbmNlX3JlcCB7CisJdWludDY0X3QgZmVuY2Vfc2VxOworCWludDMyX3QgZXJyb3I7CisJdWludDMyX3QgcGFkNjQ7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogRFJNX1ZNV19BTExPQ19ETUFCVUYKKyAqCisgKiBBbGxvY2F0ZSBhIERNQSBidWZmZXIgdGhhdCBpcyB2aXNpYmxlIGFsc28gdG8gdGhlIGhvc3QuCisgKiBOT1RFOiBUaGUgYnVmZmVyIGlzCisgKiBpZGVudGlmaWVkIGJ5IGEgaGFuZGxlIGFuZCBhbiBvZmZzZXQsIHdoaWNoIGFyZSBwcml2YXRlIHRvIHRoZSBndWVzdCwgYnV0CisgKiB1c2VhYmxlIGluIHRoZSBjb21tYW5kIHN0cmVhbS4gVGhlIGd1ZXN0IGtlcm5lbCBtYXkgdHJhbnNsYXRlIHRoZXNlCisgKiBhbmQgcGF0Y2ggdXAgdGhlIGNvbW1hbmQgc3RyZWFtIGFjY29yZGluZ2x5LiBJbiB0aGUgZnV0dXJlLCB0aGUgb2Zmc2V0IG1heQorICogYmUgemVybyBhdCBhbGwgdGltZXMsIG9yIGl0IG1heSBkaXNhcHBlYXIgZnJvbSB0aGUgaW50ZXJmYWNlIGJlZm9yZSBpdCBpcworICogZml4ZWQuCisgKgorICogVGhlIERNQSBidWZmZXIgbWF5IHN0YXkgdXNlci1zcGFjZSBtYXBwZWQgaW4gdGhlIGd1ZXN0IGF0IGFsbCB0aW1lcywKKyAqIGFuZCBpcyB0aHVzIHN1aXRhYmxlIGZvciBzdWItYWxsb2NhdGlvbi4KKyAqCisgKiBETUEgYnVmZmVycyBhcmUgbWFwcGVkIHVzaW5nIHRoZSBtbWFwKCkgc3lzY2FsbCBvbiB0aGUgZHJtIGRldmljZS4KKyAqLworCisvKioKKyAqIHN0cnVjdCBkcm1fdm13X2FsbG9jX2RtYWJ1Zl9yZXEKKyAqCisgKiBAc2l6ZTogUmVxdWlyZWQgbWluaW11bSBzaXplIG9mIHRoZSBidWZmZXIuCisgKgorICogSW5wdXQgZGF0YSB0byB0aGUgRFJNX1ZNV19BTExPQ19ETUFCVUYgSW9jdGwuCisgKi8KKworc3RydWN0IGRybV92bXdfYWxsb2NfZG1hYnVmX3JlcSB7CisJdWludDMyX3Qgc2l6ZTsKKwl1aW50MzJfdCBwYWQ2NDsKK307CisKKy8qKgorICogc3RydWN0IGRybV92bXdfZG1hYnVmX3JlcAorICoKKyAqIEBtYXBfaGFuZGxlOiBPZmZzZXQgdG8gdXNlIGluIHRoZSBtbWFwKCkgY2FsbCB1c2VkIHRvIG1hcCB0aGUgYnVmZmVyLgorICogQGhhbmRsZTogSGFuZGxlIHVuaXF1ZSB0byB0aGlzIGJ1ZmZlci4gVXNlZCBmb3IgdW5yZWZlcmVuY2luZy4KKyAqIEBjdXJfZ21yX2lkOiBHTVIgaWQgdG8gdXNlIGluIHRoZSBjb21tYW5kIHN0cmVhbSB3aGVuIHRoaXMgYnVmZmVyIGlzCisgKiByZWZlcmVuY2VkLiBTZWUgbm90IGFib3ZlLgorICogQGN1cl9nbXJfb2Zmc2V0OiBPZmZzZXQgdG8gdXNlIGluIHRoZSBjb21tYW5kIHN0cmVhbSB3aGVuIHRoaXMgYnVmZmVyIGlzCisgKiByZWZlcmVuY2VkLiBTZWUgbm90ZSBhYm92ZS4KKyAqCisgKiBPdXRwdXQgZGF0YSBmcm9tIHRoZSBEUk1fVk1XX0FMTE9DX0RNQUJVRiBJb2N0bC4KKyAqLworCitzdHJ1Y3QgZHJtX3Ztd19kbWFidWZfcmVwIHsKKwl1aW50NjRfdCBtYXBfaGFuZGxlOworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJfdCBjdXJfZ21yX2lkOworCXVpbnQzMl90IGN1cl9nbXJfb2Zmc2V0OworCXVpbnQzMl90IHBhZDY0OworfTsKKworLyoqCisgKiB1bmlvbiBkcm1fdm13X2RtYWJ1Zl9hcmcKKyAqCisgKiBAcmVxOiBJbnB1dCBkYXRhIGFzIGRlc2NyaWJlZCBhYm92ZS4KKyAqIEByZXA6IE91dHB1dCBkYXRhIGFzIGRlc2NyaWJlZCBhYm92ZS4KKyAqCisgKiBBcmd1bWVudCB0byB0aGUgRFJNX1ZNV19BTExPQ19ETUFCVUYgSW9jdGwuCisgKi8KKwordW5pb24gZHJtX3Ztd19hbGxvY19kbWFidWZfYXJnIHsKKwlzdHJ1Y3QgZHJtX3Ztd19hbGxvY19kbWFidWZfcmVxIHJlcTsKKwlzdHJ1Y3QgZHJtX3Ztd19kbWFidWZfcmVwIHJlcDsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBEUk1fVk1XX1VOUkVGX0RNQUJVRiAtIEZyZWUgYSBETUEgYnVmZmVyLgorICoKKyAqLworCisvKioKKyAqIHN0cnVjdCBkcm1fdm13X3VucmVmX2RtYWJ1Zl9hcmcKKyAqCisgKiBAaGFuZGxlOiBIYW5kbGUgaW5kaWNhdGluZyB3aGF0IGJ1ZmZlciB0byBmcmVlLiBPYnRhaW5lZCBmcm9tIHRoZQorICogRFJNX1ZNV19BTExPQ19ETUFCVUYgSW9jdGwuCisgKgorICogQXJndW1lbnQgdG8gdGhlIERSTV9WTVdfVU5SRUZfRE1BQlVGIElvY3RsLgorICovCisKK3N0cnVjdCBkcm1fdm13X3VucmVmX2RtYWJ1Zl9hcmcgeworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJfdCBwYWQ2NDsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBEUk1fVk1XX0ZJRk9fREVCVUcgLSBHZXQgbGFzdCBGSUZPIHN1Ym1pc3Npb24uCisgKgorICogVGhpcyBJT0NUTCBjb3BpZXMgdGhlIGxhc3QgRklGTyBzdWJtaXNzaW9uIGRpcmVjdGx5IG91dCBvZiB0aGUgRklGTyBidWZmZXIuCisgKi8KKworLyoqCisgKiBzdHJ1Y3QgZHJtX3Ztd19maWZvX2RlYnVnX2FyZworICoKKyAqIEBkZWJ1Z19idWZmZXI6IFVzZXIgc3BhY2UgYWRkcmVzcyBvZiBhIGRlYnVnX2J1ZmZlciBjYXN0IHRvIGFuIHVpbnQ2NF90IC8vSW4KKyAqIEBkZWJ1Z19idWZmZXJfc2l6ZTogU2l6ZSBpbiBieXRlcyBvZiBkZWJ1ZyBidWZmZXIgLy9JbgorICogQHVzZWRfc2l6ZTogTnVtYmVyIG9mIGJ5dGVzIGNvcGllZCB0byB0aGUgYnVmZmVyIC8vIE91dAorICogQGRpZF9ub3RfZml0OiBCb29sZWFuIGluZGljYXRpbmcgdGhhdCB0aGUgZmlmbyBjb250ZW50cyBkaWQgbm90IGZpdC4gLy9PdXQKKyAqCisgKiBBcmd1bWVudCB0byB0aGUgRFJNX1ZNV19GSUZPX0RFQlVHIElvY3RsLgorICovCisKK3N0cnVjdCBkcm1fdm13X2ZpZm9fZGVidWdfYXJnIHsKKwl1aW50NjRfdCBkZWJ1Z19idWZmZXI7CisJdWludDMyX3QgZGVidWdfYnVmZmVyX3NpemU7CisJdWludDMyX3QgdXNlZF9zaXplOworCWludDMyX3QgZGlkX25vdF9maXQ7CisJdWludDMyX3QgcGFkNjQ7Cit9OworCitzdHJ1Y3QgZHJtX3Ztd19mZW5jZV93YWl0X2FyZyB7CisJdWludDY0X3Qgc2VxdWVuY2U7CisJdWludDY0X3Qga2VybmVsX2Nvb2tpZTsKKwlpbnQzMl90IGNvb2tpZV92YWxpZDsKKwlpbnQzMl90IHBhZDY0OworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIERSTV9WTVdfQ09OVFJPTF9TVFJFQU0gLSBDb250cm9sIG92ZXJsYXlzLCBha2Egc3RyZWFtcy4KKyAqCisgKiBUaGlzIElPQ1RMIGNvbnRyb2xzIHRoZSBvdmVybGF5IHVuaXRzIG9mIHRoZSBzdmdhIGRldmljZS4KKyAqIFRoZSBTVkdBIG92ZXJsYXkgdW5pdHMgZG9lcyBub3Qgd29yayBsaWtlIHJlZ3VsYXIgaGFyZHdhcmUgdW5pdHMgaW4KKyAqIHRoYXQgdGhleSBkbyBub3QgYXV0b21hdGljYWx5IHJlYWQgYmFjayB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIGRtYQorICogYnVmZmVyLiBCdXQgaW5zdGVhZCBvbmx5IHJlYWQgYmFjayBmb3IgZWFjaCBjYWxsIHRvIHRoaXMgaW9jdGwsIGFuZAorICogYXQgYW55IHBvaW50IGJldHdlZW4gdGhpcyBjYWxsIGJlaW5nIG1hZGUgYW5kIGEgZm9sbG93aW5nIGNhbGwgdGhhdAorICogZWl0aGVyIGNoYW5nZXMgdGhlIGJ1ZmZlciBvciBkaXNhYmxlcyB0aGUgc3RyZWFtLgorICovCisKKy8qKgorICogc3RydWN0IGRybV92bXdfcmVjdAorICoKKyAqIERlZmluZXMgYSByZWN0YW5nbGUuIFVzZWQgaW4gdGhlIG92ZXJsYXkgaW9jdGwgdG8gZGVmaW5lCisgKiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHJlY3RhbmdsZS4KKyAqLworCitzdHJ1Y3QgZHJtX3Ztd19yZWN0IHsKKwlpbnQzMl90IHg7CisJaW50MzJfdCB5OworCXVpbnQzMl90IHc7CisJdWludDMyX3QgaDsKK307CisKKy8qKgorICogc3RydWN0IGRybV92bXdfY29udHJvbF9zdHJlYW1fYXJnCisgKgorICogQHN0cmVhbV9pZDogU3RlYXJtIHRvIGNvbnRyb2wKKyAqIEBlbmFibGVkOiBJZiBmYWxzZSBhbGwgZm9sbG93aW5nIGFyZ3VtZW50cyBhcmUgaWdub3JlZC4KKyAqIEBoYW5kbGU6IEhhbmRsZSB0byBidWZmZXIgZm9yIGdldHRpbmcgZGF0YSBmcm9tLgorICogQGZvcm1hdDogRm9ybWF0IG9mIHRoZSBvdmVybGF5IGFzIHVuZGVyc3Rvb2QgYnkgdGhlIGhvc3QuCisgKiBAd2lkdGg6IFdpZHRoIG9mIHRoZSBvdmVybGF5LgorICogQGhlaWdodDogSGVpZ2h0IG9mIHRoZSBvdmVybGF5LgorICogQHNpemU6IFNpemUgb2YgdGhlIG92ZXJsYXkgaW4gYnl0ZXMuCisgKiBAcGl0Y2g6IEFycmF5IG9mIHBpdGNoZXMsIHRoZSB0d28gbGFzdCBhcmUgb25seSB1c2VkIGZvciBZVVYxMiBmb3JtYXRzLgorICogQG9mZnNldDogT2Zmc2V0IGZyb20gc3RhcnQgb2YgZG1hIGJ1ZmZlciB0byBvdmVybGF5LgorICogQHNyYzogU291cmNlIHJlY3QsIG11c3QgYmUgd2l0aGluIHRoZSBkZWZpbmVkIGFyZWEgYWJvdmUuCisgKiBAZHN0OiBEZXN0aW5hdGlvbiByZWN0LCB4IGFuZCB5IG1heSBiZSBuZWdhdGl2ZS4KKyAqCisgKiBBcmd1bWVudCB0byB0aGUgRFJNX1ZNV19DT05UUk9MX1NUUkVBTSBJb2N0bC4KKyAqLworCitzdHJ1Y3QgZHJtX3Ztd19jb250cm9sX3N0cmVhbV9hcmcgeworCXVpbnQzMl90IHN0cmVhbV9pZDsKKwl1aW50MzJfdCBlbmFibGVkOworCisJdWludDMyX3QgZmxhZ3M7CisJdWludDMyX3QgY29sb3Jfa2V5OworCisJdWludDMyX3QgaGFuZGxlOworCXVpbnQzMl90IG9mZnNldDsKKwlpbnQzMl90IGZvcm1hdDsKKwl1aW50MzJfdCBzaXplOworCXVpbnQzMl90IHdpZHRoOworCXVpbnQzMl90IGhlaWdodDsKKwl1aW50MzJfdCBwaXRjaFszXTsKKworCXVpbnQzMl90IHBhZDY0OworCXN0cnVjdCBkcm1fdm13X3JlY3Qgc3JjOworCXN0cnVjdCBkcm1fdm13X3JlY3QgZHN0OworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIERSTV9WTVdfQ1VSU09SX0JZUEFTUyAtIEdpdmUgZXh0cmEgaW5mb3JtYXRpb24gYWJvdXQgY3Vyc29yIGJ5cGFzcy4KKyAqCisgKi8KKworI2RlZmluZSBEUk1fVk1XX0NVUlNPUl9CWVBBU1NfQUxMICAgICgxIDw8IDApCisjZGVmaW5lIERSTV9WTVdfQ1VSU09SX0JZUEFTU19GTEFHUyAgICAgICAoMSkKKworLyoqCisgKiBzdHJ1Y3QgZHJtX3Ztd19jdXJzb3JfYnlwYXNzX2FyZworICoKKyAqIEBmbGFnczogRmxhZ3MuCisgKiBAY3J0Y19pZDogQ3J0YyBpZCwgb25seSB1c2VkIGlmIERNUl9DVVJTT1JfQllQQVNTX0FMTCBpc24ndCBwYXNzZWQuCisgKiBAeHBvczogWCBwb3NpdGlvbiBvZiBjdXJzb3IuCisgKiBAeXBvczogWSBwb3NpdGlvbiBvZiBjdXJzb3IuCisgKiBAeGhvdDogWCBob3RzcG90LgorICogQHlob3Q6IFkgaG90c3BvdC4KKyAqCisgKiBBcmd1bWVudCB0byB0aGUgRFJNX1ZNV19DVVJTT1JfQllQQVNTIElvY3RsLgorICovCisKK3N0cnVjdCBkcm1fdm13X2N1cnNvcl9ieXBhc3NfYXJnIHsKKwl1aW50MzJfdCBmbGFnczsKKwl1aW50MzJfdCBjcnRjX2lkOworCWludDMyX3QgeHBvczsKKwlpbnQzMl90IHlwb3M7CisJaW50MzJfdCB4aG90OworCWludDMyX3QgeWhvdDsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBEUk1fVk1XX0NMQUlNX1NUUkVBTSAtIENsYWltIGEgc2luZ2xlIHN0cmVhbS4KKyAqLworCisvKioKKyAqIHN0cnVjdCBkcm1fdm13X2NvbnRleHRfYXJnCisgKgorICogQHN0cmVhbV9pZDogRGV2aWNlIHVuaXF1ZSBjb250ZXh0IElELgorICoKKyAqIE91dHB1dCBhcmd1bWVudCB0byB0aGUgRFJNX1ZNV19DUkVBVEVfQ09OVEVYVCBJb2N0bC4KKyAqIElucHV0IGFyZ3VtZW50IHRvIHRoZSBEUk1fVk1XX1VOUkVGX0NPTlRFWFQgSW9jdGwuCisgKi8KKworc3RydWN0IGRybV92bXdfc3RyZWFtX2FyZyB7CisJdWludDMyX3Qgc3RyZWFtX2lkOworCXVpbnQzMl90IHBhZDY0OworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIERSTV9WTVdfVU5SRUZfU1RSRUFNIC0gVW5jbGFpbSBhIHN0cmVhbS4KKyAqCisgKiBSZXR1cm4gYSBzaW5nbGUgc3RyZWFtIHRoYXQgd2FzIGNsYWltZWQgYnkgdGhpcyBwcm9jZXNzLiBBbHNvIG1ha2VzCisgKiBzdXJlIHRoYXQgdGhlIHN0cmVhbSBoYXMgYmVlbiBzdG9wcGVkLgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBEUk1fVk1XX1VQREFURV9MQVlPVVQgLSBVcGRhdGUgbGF5b3V0CisgKgorICogVXBkYXRlcyB0aGUgcHJlZmVyZWQgbW9kZXMgYW5kIGNvbm5lY3Rpb24gc3RhdHVzIGZvciBjb25uZWN0b3JzLiBUaGUKKyAqIGNvbW1hbmQgY29uaXNpdHMgb2Ygb25lIGRybV92bXdfdXBkYXRlX2xheW91dF9hcmcgcG9pbnRpbmcgb3V0IGEgYXJyYXkKKyAqIG9mIG51bV9vdXRwdXRzIGRybV92bXdfcmVjdCdzLgorICovCisKKy8qKgorICogc3RydWN0IGRybV92bXdfdXBkYXRlX2xheW91dF9hcmcKKyAqCisgKiBAbnVtX291dHB1dHM6IG51bWJlciBvZiBhY3RpdmUKKyAqIEByZWN0czogcG9pbnRlciB0byBhcnJheSBvZiBkcm1fdm13X3JlY3QKKyAqCisgKiBJbnB1dCBhcmd1bWVudCB0byB0aGUgRFJNX1ZNV19VUERBVEVfTEFZT1VUIElvY3RsLgorICovCisKK3N0cnVjdCBkcm1fdm13X3VwZGF0ZV9sYXlvdXRfYXJnIHsKKwl1aW50MzJfdCBudW1fb3V0cHV0czsKKwl1aW50MzJfdCBwYWQ2NDsKKwl1aW50NjRfdCByZWN0czsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2VsZi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2VsZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZjJkNjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZWxmLmgKQEAgLTAsMCArMSwyNjkzIEBACisvKiBUaGlzIGZpbGUgZGVmaW5lcyBzdGFuZGFyZCBFTEYgdHlwZXMsIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MuCisgICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMywyMDA0LDIwMDUsMjAwNiwyMDA3LDIwMDgKKwlGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfRUxGX0gKKyNkZWZpbmUJX0VMRl9IIDEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKK19fQkVHSU5fREVDTFMKKworLyogU3RhbmRhcmQgRUxGIHR5cGVzLiAgKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisvKiBUeXBlIGZvciBhIDE2LWJpdCBxdWFudGl0eS4gICovCit0eXBlZGVmIHVpbnQxNl90IEVsZjMyX0hhbGY7Cit0eXBlZGVmIHVpbnQxNl90IEVsZjY0X0hhbGY7CisKKy8qIFR5cGVzIGZvciBzaWduZWQgYW5kIHVuc2lnbmVkIDMyLWJpdCBxdWFudGl0aWVzLiAgKi8KK3R5cGVkZWYgdWludDMyX3QgRWxmMzJfV29yZDsKK3R5cGVkZWYJaW50MzJfdCAgRWxmMzJfU3dvcmQ7Cit0eXBlZGVmIHVpbnQzMl90IEVsZjY0X1dvcmQ7Cit0eXBlZGVmCWludDMyX3QgIEVsZjY0X1N3b3JkOworCisvKiBUeXBlcyBmb3Igc2lnbmVkIGFuZCB1bnNpZ25lZCA2NC1iaXQgcXVhbnRpdGllcy4gICovCit0eXBlZGVmIHVpbnQ2NF90IEVsZjMyX1h3b3JkOwordHlwZWRlZglpbnQ2NF90ICBFbGYzMl9TeHdvcmQ7Cit0eXBlZGVmIHVpbnQ2NF90IEVsZjY0X1h3b3JkOwordHlwZWRlZglpbnQ2NF90ICBFbGY2NF9TeHdvcmQ7CisKKy8qIFR5cGUgb2YgYWRkcmVzc2VzLiAgKi8KK3R5cGVkZWYgdWludDMyX3QgRWxmMzJfQWRkcjsKK3R5cGVkZWYgdWludDY0X3QgRWxmNjRfQWRkcjsKKworLyogVHlwZSBvZiBmaWxlIG9mZnNldHMuICAqLwordHlwZWRlZiB1aW50MzJfdCBFbGYzMl9PZmY7Cit0eXBlZGVmIHVpbnQ2NF90IEVsZjY0X09mZjsKKworLyogVHlwZSBmb3Igc2VjdGlvbiBpbmRpY2VzLCB3aGljaCBhcmUgMTYtYml0IHF1YW50aXRpZXMuICAqLwordHlwZWRlZiB1aW50MTZfdCBFbGYzMl9TZWN0aW9uOwordHlwZWRlZiB1aW50MTZfdCBFbGY2NF9TZWN0aW9uOworCisvKiBUeXBlIGZvciB2ZXJzaW9uIHN5bWJvbCBpbmZvcm1hdGlvbi4gICovCit0eXBlZGVmIEVsZjMyX0hhbGYgRWxmMzJfVmVyc3ltOwordHlwZWRlZiBFbGY2NF9IYWxmIEVsZjY0X1ZlcnN5bTsKKworCisvKiBUaGUgRUxGIGZpbGUgaGVhZGVyLiAgVGhpcyBhcHBlYXJzIGF0IHRoZSBzdGFydCBvZiBldmVyeSBFTEYgZmlsZS4gICovCisKKyNkZWZpbmUgRUlfTklERU5UICgxNikKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgdW5zaWduZWQgY2hhcgllX2lkZW50W0VJX05JREVOVF07CS8qIE1hZ2ljIG51bWJlciBhbmQgb3RoZXIgaW5mbyAqLworICBFbGYzMl9IYWxmCWVfdHlwZTsJCQkvKiBPYmplY3QgZmlsZSB0eXBlICovCisgIEVsZjMyX0hhbGYJZV9tYWNoaW5lOwkJLyogQXJjaGl0ZWN0dXJlICovCisgIEVsZjMyX1dvcmQJZV92ZXJzaW9uOwkJLyogT2JqZWN0IGZpbGUgdmVyc2lvbiAqLworICBFbGYzMl9BZGRyCWVfZW50cnk7CQkvKiBFbnRyeSBwb2ludCB2aXJ0dWFsIGFkZHJlc3MgKi8KKyAgRWxmMzJfT2ZmCWVfcGhvZmY7CQkvKiBQcm9ncmFtIGhlYWRlciB0YWJsZSBmaWxlIG9mZnNldCAqLworICBFbGYzMl9PZmYJZV9zaG9mZjsJCS8qIFNlY3Rpb24gaGVhZGVyIHRhYmxlIGZpbGUgb2Zmc2V0ICovCisgIEVsZjMyX1dvcmQJZV9mbGFnczsJCS8qIFByb2Nlc3Nvci1zcGVjaWZpYyBmbGFncyAqLworICBFbGYzMl9IYWxmCWVfZWhzaXplOwkJLyogRUxGIGhlYWRlciBzaXplIGluIGJ5dGVzICovCisgIEVsZjMyX0hhbGYJZV9waGVudHNpemU7CQkvKiBQcm9ncmFtIGhlYWRlciB0YWJsZSBlbnRyeSBzaXplICovCisgIEVsZjMyX0hhbGYJZV9waG51bTsJCS8qIFByb2dyYW0gaGVhZGVyIHRhYmxlIGVudHJ5IGNvdW50ICovCisgIEVsZjMyX0hhbGYJZV9zaGVudHNpemU7CQkvKiBTZWN0aW9uIGhlYWRlciB0YWJsZSBlbnRyeSBzaXplICovCisgIEVsZjMyX0hhbGYJZV9zaG51bTsJCS8qIFNlY3Rpb24gaGVhZGVyIHRhYmxlIGVudHJ5IGNvdW50ICovCisgIEVsZjMyX0hhbGYJZV9zaHN0cm5keDsJCS8qIFNlY3Rpb24gaGVhZGVyIHN0cmluZyB0YWJsZSBpbmRleCAqLworfSBFbGYzMl9FaGRyOworCit0eXBlZGVmIHN0cnVjdAoreworICB1bnNpZ25lZCBjaGFyCWVfaWRlbnRbRUlfTklERU5UXTsJLyogTWFnaWMgbnVtYmVyIGFuZCBvdGhlciBpbmZvICovCisgIEVsZjY0X0hhbGYJZV90eXBlOwkJCS8qIE9iamVjdCBmaWxlIHR5cGUgKi8KKyAgRWxmNjRfSGFsZgllX21hY2hpbmU7CQkvKiBBcmNoaXRlY3R1cmUgKi8KKyAgRWxmNjRfV29yZAllX3ZlcnNpb247CQkvKiBPYmplY3QgZmlsZSB2ZXJzaW9uICovCisgIEVsZjY0X0FkZHIJZV9lbnRyeTsJCS8qIEVudHJ5IHBvaW50IHZpcnR1YWwgYWRkcmVzcyAqLworICBFbGY2NF9PZmYJZV9waG9mZjsJCS8qIFByb2dyYW0gaGVhZGVyIHRhYmxlIGZpbGUgb2Zmc2V0ICovCisgIEVsZjY0X09mZgllX3Nob2ZmOwkJLyogU2VjdGlvbiBoZWFkZXIgdGFibGUgZmlsZSBvZmZzZXQgKi8KKyAgRWxmNjRfV29yZAllX2ZsYWdzOwkJLyogUHJvY2Vzc29yLXNwZWNpZmljIGZsYWdzICovCisgIEVsZjY0X0hhbGYJZV9laHNpemU7CQkvKiBFTEYgaGVhZGVyIHNpemUgaW4gYnl0ZXMgKi8KKyAgRWxmNjRfSGFsZgllX3BoZW50c2l6ZTsJCS8qIFByb2dyYW0gaGVhZGVyIHRhYmxlIGVudHJ5IHNpemUgKi8KKyAgRWxmNjRfSGFsZgllX3BobnVtOwkJLyogUHJvZ3JhbSBoZWFkZXIgdGFibGUgZW50cnkgY291bnQgKi8KKyAgRWxmNjRfSGFsZgllX3NoZW50c2l6ZTsJCS8qIFNlY3Rpb24gaGVhZGVyIHRhYmxlIGVudHJ5IHNpemUgKi8KKyAgRWxmNjRfSGFsZgllX3NobnVtOwkJLyogU2VjdGlvbiBoZWFkZXIgdGFibGUgZW50cnkgY291bnQgKi8KKyAgRWxmNjRfSGFsZgllX3Noc3RybmR4OwkJLyogU2VjdGlvbiBoZWFkZXIgc3RyaW5nIHRhYmxlIGluZGV4ICovCit9IEVsZjY0X0VoZHI7CisKKy8qIEZpZWxkcyBpbiB0aGUgZV9pZGVudCBhcnJheS4gIFRoZSBFSV8qIG1hY3JvcyBhcmUgaW5kaWNlcyBpbnRvIHRoZQorICAgYXJyYXkuICBUaGUgbWFjcm9zIHVuZGVyIGVhY2ggRUlfKiBtYWNybyBhcmUgdGhlIHZhbHVlcyB0aGUgYnl0ZQorICAgbWF5IGhhdmUuICAqLworCisjZGVmaW5lIEVJX01BRzAJCTAJCS8qIEZpbGUgaWRlbnRpZmljYXRpb24gYnl0ZSAwIGluZGV4ICovCisjZGVmaW5lIEVMRk1BRzAJCTB4N2YJCS8qIE1hZ2ljIG51bWJlciBieXRlIDAgKi8KKworI2RlZmluZSBFSV9NQUcxCQkxCQkvKiBGaWxlIGlkZW50aWZpY2F0aW9uIGJ5dGUgMSBpbmRleCAqLworI2RlZmluZSBFTEZNQUcxCQknRScJCS8qIE1hZ2ljIG51bWJlciBieXRlIDEgKi8KKworI2RlZmluZSBFSV9NQUcyCQkyCQkvKiBGaWxlIGlkZW50aWZpY2F0aW9uIGJ5dGUgMiBpbmRleCAqLworI2RlZmluZSBFTEZNQUcyCQknTCcJCS8qIE1hZ2ljIG51bWJlciBieXRlIDIgKi8KKworI2RlZmluZSBFSV9NQUczCQkzCQkvKiBGaWxlIGlkZW50aWZpY2F0aW9uIGJ5dGUgMyBpbmRleCAqLworI2RlZmluZSBFTEZNQUczCQknRicJCS8qIE1hZ2ljIG51bWJlciBieXRlIDMgKi8KKworLyogQ29uZ2xvbWVyYXRpb24gb2YgdGhlIGlkZW50aWZpY2F0aW9uIGJ5dGVzLCBmb3IgZWFzeSB0ZXN0aW5nIGFzIGEgd29yZC4gICovCisjZGVmaW5lCUVMRk1BRwkJIlwxNzdFTEYiCisjZGVmaW5lCVNFTEZNQUcJCTQKKworI2RlZmluZSBFSV9DTEFTUwk0CQkvKiBGaWxlIGNsYXNzIGJ5dGUgaW5kZXggKi8KKyNkZWZpbmUgRUxGQ0xBU1NOT05FCTAJCS8qIEludmFsaWQgY2xhc3MgKi8KKyNkZWZpbmUgRUxGQ0xBU1MzMgkxCQkvKiAzMi1iaXQgb2JqZWN0cyAqLworI2RlZmluZSBFTEZDTEFTUzY0CTIJCS8qIDY0LWJpdCBvYmplY3RzICovCisjZGVmaW5lIEVMRkNMQVNTTlVNCTMKKworI2RlZmluZSBFSV9EQVRBCQk1CQkvKiBEYXRhIGVuY29kaW5nIGJ5dGUgaW5kZXggKi8KKyNkZWZpbmUgRUxGREFUQU5PTkUJMAkJLyogSW52YWxpZCBkYXRhIGVuY29kaW5nICovCisjZGVmaW5lIEVMRkRBVEEyTFNCCTEJCS8qIDIncyBjb21wbGVtZW50LCBsaXR0bGUgZW5kaWFuICovCisjZGVmaW5lIEVMRkRBVEEyTVNCCTIJCS8qIDIncyBjb21wbGVtZW50LCBiaWcgZW5kaWFuICovCisjZGVmaW5lIEVMRkRBVEFOVU0JMworCisjZGVmaW5lIEVJX1ZFUlNJT04JNgkJLyogRmlsZSB2ZXJzaW9uIGJ5dGUgaW5kZXggKi8KKwkJCQkJLyogVmFsdWUgbXVzdCBiZSBFVl9DVVJSRU5UICovCisKKyNkZWZpbmUgRUlfT1NBQkkJNwkJLyogT1MgQUJJIGlkZW50aWZpY2F0aW9uICovCisjZGVmaW5lIEVMRk9TQUJJX05PTkUJCTAJLyogVU5JWCBTeXN0ZW0gViBBQkkgKi8KKyNkZWZpbmUgRUxGT1NBQklfU1lTVgkJMAkvKiBBbGlhcy4gICovCisjZGVmaW5lIEVMRk9TQUJJX0hQVVgJCTEJLyogSFAtVVggKi8KKyNkZWZpbmUgRUxGT1NBQklfTkVUQlNECQkyCS8qIE5ldEJTRC4gICovCisjZGVmaW5lIEVMRk9TQUJJX0xJTlVYCQkzCS8qIExpbnV4LiAgKi8KKyNkZWZpbmUgRUxGT1NBQklfU09MQVJJUwk2CS8qIFN1biBTb2xhcmlzLiAgKi8KKyNkZWZpbmUgRUxGT1NBQklfQUlYCQk3CS8qIElCTSBBSVguICAqLworI2RlZmluZSBFTEZPU0FCSV9JUklYCQk4CS8qIFNHSSBJcml4LiAgKi8KKyNkZWZpbmUgRUxGT1NBQklfRlJFRUJTRAk5CS8qIEZyZWVCU0QuICAqLworI2RlZmluZSBFTEZPU0FCSV9UUlU2NAkJMTAJLyogQ29tcGFxIFRSVTY0IFVOSVguICAqLworI2RlZmluZSBFTEZPU0FCSV9NT0RFU1RPCTExCS8qIE5vdmVsbCBNb2Rlc3RvLiAgKi8KKyNkZWZpbmUgRUxGT1NBQklfT1BFTkJTRAkxMgkvKiBPcGVuQlNELiAgKi8KKyNkZWZpbmUgRUxGT1NBQklfQVJNCQk5NwkvKiBBUk0gKi8KKyNkZWZpbmUgRUxGT1NBQklfU1RBTkRBTE9ORQkyNTUJLyogU3RhbmRhbG9uZSAoZW1iZWRkZWQpIGFwcGxpY2F0aW9uICovCisKKyNkZWZpbmUgRUlfQUJJVkVSU0lPTgk4CQkvKiBBQkkgdmVyc2lvbiAqLworCisjZGVmaW5lIEVJX1BBRAkJOQkJLyogQnl0ZSBpbmRleCBvZiBwYWRkaW5nIGJ5dGVzICovCisKKy8qIExlZ2FsIHZhbHVlcyBmb3IgZV90eXBlIChvYmplY3QgZmlsZSB0eXBlKS4gICovCisKKyNkZWZpbmUgRVRfTk9ORQkJMAkJLyogTm8gZmlsZSB0eXBlICovCisjZGVmaW5lIEVUX1JFTAkJMQkJLyogUmVsb2NhdGFibGUgZmlsZSAqLworI2RlZmluZSBFVF9FWEVDCQkyCQkvKiBFeGVjdXRhYmxlIGZpbGUgKi8KKyNkZWZpbmUgRVRfRFlOCQkzCQkvKiBTaGFyZWQgb2JqZWN0IGZpbGUgKi8KKyNkZWZpbmUgRVRfQ09SRQkJNAkJLyogQ29yZSBmaWxlICovCisjZGVmaW5lCUVUX05VTQkJNQkJLyogTnVtYmVyIG9mIGRlZmluZWQgdHlwZXMgKi8KKyNkZWZpbmUgRVRfTE9PUwkJMHhmZTAwCQkvKiBPUy1zcGVjaWZpYyByYW5nZSBzdGFydCAqLworI2RlZmluZSBFVF9ISU9TCQkweGZlZmYJCS8qIE9TLXNwZWNpZmljIHJhbmdlIGVuZCAqLworI2RlZmluZSBFVF9MT1BST0MJMHhmZjAwCQkvKiBQcm9jZXNzb3Itc3BlY2lmaWMgcmFuZ2Ugc3RhcnQgKi8KKyNkZWZpbmUgRVRfSElQUk9DCTB4ZmZmZgkJLyogUHJvY2Vzc29yLXNwZWNpZmljIHJhbmdlIGVuZCAqLworCisvKiBMZWdhbCB2YWx1ZXMgZm9yIGVfbWFjaGluZSAoYXJjaGl0ZWN0dXJlKS4gICovCisKKyNkZWZpbmUgRU1fTk9ORQkJIDAJCS8qIE5vIG1hY2hpbmUgKi8KKyNkZWZpbmUgRU1fTTMyCQkgMQkJLyogQVQmVCBXRSAzMjEwMCAqLworI2RlZmluZSBFTV9TUEFSQwkgMgkJLyogU1VOIFNQQVJDICovCisjZGVmaW5lIEVNXzM4NgkJIDMJCS8qIEludGVsIDgwMzg2ICovCisjZGVmaW5lIEVNXzY4SwkJIDQJCS8qIE1vdG9yb2xhIG02OGsgZmFtaWx5ICovCisjZGVmaW5lIEVNXzg4SwkJIDUJCS8qIE1vdG9yb2xhIG04OGsgZmFtaWx5ICovCisjZGVmaW5lIEVNXzg2MAkJIDcJCS8qIEludGVsIDgwODYwICovCisjZGVmaW5lIEVNX01JUFMJCSA4CQkvKiBNSVBTIFIzMDAwIGJpZy1lbmRpYW4gKi8KKyNkZWZpbmUgRU1fUzM3MAkJIDkJCS8qIElCTSBTeXN0ZW0vMzcwICovCisjZGVmaW5lIEVNX01JUFNfUlMzX0xFCTEwCQkvKiBNSVBTIFIzMDAwIGxpdHRsZS1lbmRpYW4gKi8KKworI2RlZmluZSBFTV9QQVJJU0MJMTUJCS8qIEhQUEEgKi8KKyNkZWZpbmUgRU1fVlBQNTAwCTE3CQkvKiBGdWppdHN1IFZQUDUwMCAqLworI2RlZmluZSBFTV9TUEFSQzMyUExVUwkxOAkJLyogU3VuJ3MgInY4cGx1cyIgKi8KKyNkZWZpbmUgRU1fOTYwCQkxOQkJLyogSW50ZWwgODA5NjAgKi8KKyNkZWZpbmUgRU1fUFBDCQkyMAkJLyogUG93ZXJQQyAqLworI2RlZmluZSBFTV9QUEM2NAkyMQkJLyogUG93ZXJQQyA2NC1iaXQgKi8KKyNkZWZpbmUgRU1fUzM5MAkJMjIJCS8qIElCTSBTMzkwICovCisKKyNkZWZpbmUgRU1fVjgwMAkJMzYJCS8qIE5FQyBWODAwIHNlcmllcyAqLworI2RlZmluZSBFTV9GUjIwCQkzNwkJLyogRnVqaXRzdSBGUjIwICovCisjZGVmaW5lIEVNX1JIMzIJCTM4CQkvKiBUUlcgUkgtMzIgKi8KKyNkZWZpbmUgRU1fUkNFCQkzOQkJLyogTW90b3JvbGEgUkNFICovCisjZGVmaW5lIEVNX0FSTQkJNDAJCS8qIEFSTSAqLworI2RlZmluZSBFTV9GQUtFX0FMUEhBCTQxCQkvKiBEaWdpdGFsIEFscGhhICovCisjZGVmaW5lIEVNX1NICQk0MgkJLyogSGl0YWNoaSBTSCAqLworI2RlZmluZSBFTV9TUEFSQ1Y5CTQzCQkvKiBTUEFSQyB2OSA2NC1iaXQgKi8KKyNkZWZpbmUgRU1fVFJJQ09SRQk0NAkJLyogU2llbWVucyBUcmljb3JlICovCisjZGVmaW5lIEVNX0FSQwkJNDUJCS8qIEFyZ29uYXV0IFJJU0MgQ29yZSAqLworI2RlZmluZSBFTV9IOF8zMDAJNDYJCS8qIEhpdGFjaGkgSDgvMzAwICovCisjZGVmaW5lIEVNX0g4XzMwMEgJNDcJCS8qIEhpdGFjaGkgSDgvMzAwSCAqLworI2RlZmluZSBFTV9IOFMJCTQ4CQkvKiBIaXRhY2hpIEg4UyAqLworI2RlZmluZSBFTV9IOF81MDAJNDkJCS8qIEhpdGFjaGkgSDgvNTAwICovCisjZGVmaW5lIEVNX0lBXzY0CTUwCQkvKiBJbnRlbCBNZXJjZWQgKi8KKyNkZWZpbmUgRU1fTUlQU19YCTUxCQkvKiBTdGFuZm9yZCBNSVBTLVggKi8KKyNkZWZpbmUgRU1fQ09MREZJUkUJNTIJCS8qIE1vdG9yb2xhIENvbGRmaXJlICovCisjZGVmaW5lIEVNXzY4SEMxMgk1MwkJLyogTW90b3JvbGEgTTY4SEMxMiAqLworI2RlZmluZSBFTV9NTUEJCTU0CQkvKiBGdWppdHN1IE1NQSBNdWx0aW1lZGlhIEFjY2VsZXJhdG9yKi8KKyNkZWZpbmUgRU1fUENQCQk1NQkJLyogU2llbWVucyBQQ1AgKi8KKyNkZWZpbmUgRU1fTkNQVQkJNTYJCS8qIFNvbnkgbkNQVSBlbWJlZWRlZCBSSVNDICovCisjZGVmaW5lIEVNX05EUjEJCTU3CQkvKiBEZW5zbyBORFIxIG1pY3JvcHJvY2Vzc29yICovCisjZGVmaW5lIEVNX1NUQVJDT1JFCTU4CQkvKiBNb3Rvcm9sYSBTdGFydCpDb3JlIHByb2Nlc3NvciAqLworI2RlZmluZSBFTV9NRTE2CQk1OQkJLyogVG95b3RhIE1FMTYgcHJvY2Vzc29yICovCisjZGVmaW5lIEVNX1NUMTAwCTYwCQkvKiBTVE1pY3JvZWxlY3Ryb25pYyBTVDEwMCBwcm9jZXNzb3IgKi8KKyNkZWZpbmUgRU1fVElOWUoJNjEJCS8qIEFkdmFuY2VkIExvZ2ljIENvcnAuIFRpbnlqIGVtYi5mYW0qLworI2RlZmluZSBFTV9YODZfNjQJNjIJCS8qIEFNRCB4ODYtNjQgYXJjaGl0ZWN0dXJlICovCisjZGVmaW5lIEVNX1BEU1AJCTYzCQkvKiBTb255IERTUCBQcm9jZXNzb3IgKi8KKworI2RlZmluZSBFTV9GWDY2CQk2NgkJLyogU2llbWVucyBGWDY2IG1pY3JvY29udHJvbGxlciAqLworI2RlZmluZSBFTV9TVDlQTFVTCTY3CQkvKiBTVE1pY3JvZWxlY3Ryb25pY3MgU1Q5KyA4LzE2IG1jICovCisjZGVmaW5lIEVNX1NUNwkJNjgJCS8qIFNUbWljcm9lbGVjdHJvbmljcyBTVDcgOCBiaXQgbWMgKi8KKyNkZWZpbmUgRU1fNjhIQzE2CTY5CQkvKiBNb3Rvcm9sYSBNQzY4SEMxNiBtaWNyb2NvbnRyb2xsZXIgKi8KKyNkZWZpbmUgRU1fNjhIQzExCTcwCQkvKiBNb3Rvcm9sYSBNQzY4SEMxMSBtaWNyb2NvbnRyb2xsZXIgKi8KKyNkZWZpbmUgRU1fNjhIQzA4CTcxCQkvKiBNb3Rvcm9sYSBNQzY4SEMwOCBtaWNyb2NvbnRyb2xsZXIgKi8KKyNkZWZpbmUgRU1fNjhIQzA1CTcyCQkvKiBNb3Rvcm9sYSBNQzY4SEMwNSBtaWNyb2NvbnRyb2xsZXIgKi8KKyNkZWZpbmUgRU1fU1ZYCQk3MwkJLyogU2lsaWNvbiBHcmFwaGljcyBTVnggKi8KKyNkZWZpbmUgRU1fU1QxOQkJNzQJCS8qIFNUTWljcm9lbGVjdHJvbmljcyBTVDE5IDggYml0IG1jICovCisjZGVmaW5lIEVNX1ZBWAkJNzUJCS8qIERpZ2l0YWwgVkFYICovCisjZGVmaW5lIEVNX0NSSVMJCTc2CQkvKiBBeGlzIENvbW11bmljYXRpb25zIDMyLWJpdCBlbWJlZGRlZCBwcm9jZXNzb3IgKi8KKyNkZWZpbmUgRU1fSkFWRUxJTgk3NwkJLyogSW5maW5lb24gVGVjaG5vbG9naWVzIDMyLWJpdCBlbWJlZGRlZCBwcm9jZXNzb3IgKi8KKyNkZWZpbmUgRU1fRklSRVBBVEgJNzgJCS8qIEVsZW1lbnQgMTQgNjQtYml0IERTUCBQcm9jZXNzb3IgKi8KKyNkZWZpbmUgRU1fWlNQCQk3OQkJLyogTFNJIExvZ2ljIDE2LWJpdCBEU1AgUHJvY2Vzc29yICovCisjZGVmaW5lIEVNX01NSVgJCTgwCQkvKiBEb25hbGQgS251dGgncyBlZHVjYXRpb25hbCA2NC1iaXQgcHJvY2Vzc29yICovCisjZGVmaW5lIEVNX0hVQU5ZCTgxCQkvKiBIYXJ2YXJkIFVuaXZlcnNpdHkgbWFjaGluZS1pbmRlcGVuZGVudCBvYmplY3QgZmlsZXMgKi8KKyNkZWZpbmUgRU1fUFJJU00JODIJCS8qIFNpVGVyYSBQcmlzbSAqLworI2RlZmluZSBFTV9BVlIJCTgzCQkvKiBBdG1lbCBBVlIgOC1iaXQgbWljcm9jb250cm9sbGVyICovCisjZGVmaW5lIEVNX0ZSMzAJCTg0CQkvKiBGdWppdHN1IEZSMzAgKi8KKyNkZWZpbmUgRU1fRDEwVgkJODUJCS8qIE1pdHN1YmlzaGkgRDEwViAqLworI2RlZmluZSBFTV9EMzBWCQk4NgkJLyogTWl0c3ViaXNoaSBEMzBWICovCisjZGVmaW5lIEVNX1Y4NTAJCTg3CQkvKiBORUMgdjg1MCAqLworI2RlZmluZSBFTV9NMzJSCQk4OAkJLyogTWl0c3ViaXNoaSBNMzJSICovCisjZGVmaW5lIEVNX01OMTAzMDAJODkJCS8qIE1hdHN1c2hpdGEgTU4xMDMwMCAqLworI2RlZmluZSBFTV9NTjEwMjAwCTkwCQkvKiBNYXRzdXNoaXRhIE1OMTAyMDAgKi8KKyNkZWZpbmUgRU1fUEoJCTkxCQkvKiBwaWNvSmF2YSAqLworI2RlZmluZSBFTV9PUEVOUklTQwk5MgkJLyogT3BlblJJU0MgMzItYml0IGVtYmVkZGVkIHByb2Nlc3NvciAqLworI2RlZmluZSBFTV9BUkNfQTUJOTMJCS8qIEFSQyBDb3JlcyBUYW5nZW50LUE1ICovCisjZGVmaW5lIEVNX1hURU5TQQk5NAkJLyogVGVuc2lsaWNhIFh0ZW5zYSBBcmNoaXRlY3R1cmUgKi8KKyNkZWZpbmUgRU1fTlVNCQk5NQorCisvKiBJZiBpdCBpcyBuZWNlc3NhcnkgdG8gYXNzaWduIG5ldyB1bm9mZmljaWFsIEVNXyogdmFsdWVzLCBwbGVhc2UKKyAgIHBpY2sgbGFyZ2UgcmFuZG9tIG51bWJlcnMgKDB4ODUyMywgMHhhN2YyLCBldGMuKSB0byBtaW5pbWl6ZSB0aGUKKyAgIGNoYW5jZXMgb2YgY29sbGlzaW9uIHdpdGggb2ZmaWNpYWwgb3Igbm9uLUdOVSB1bm9mZmljaWFsIHZhbHVlcy4gICovCisKKyNkZWZpbmUgRU1fQUxQSEEJMHg5MDI2CisKKy8qIExlZ2FsIHZhbHVlcyBmb3IgZV92ZXJzaW9uICh2ZXJzaW9uKS4gICovCisKKyNkZWZpbmUgRVZfTk9ORQkJMAkJLyogSW52YWxpZCBFTEYgdmVyc2lvbiAqLworI2RlZmluZSBFVl9DVVJSRU5UCTEJCS8qIEN1cnJlbnQgdmVyc2lvbiAqLworI2RlZmluZSBFVl9OVU0JCTIKKworLyogU2VjdGlvbiBoZWFkZXIuICAqLworCit0eXBlZGVmIHN0cnVjdAoreworICBFbGYzMl9Xb3JkCXNoX25hbWU7CQkvKiBTZWN0aW9uIG5hbWUgKHN0cmluZyB0YmwgaW5kZXgpICovCisgIEVsZjMyX1dvcmQJc2hfdHlwZTsJCS8qIFNlY3Rpb24gdHlwZSAqLworICBFbGYzMl9Xb3JkCXNoX2ZsYWdzOwkJLyogU2VjdGlvbiBmbGFncyAqLworICBFbGYzMl9BZGRyCXNoX2FkZHI7CQkvKiBTZWN0aW9uIHZpcnR1YWwgYWRkciBhdCBleGVjdXRpb24gKi8KKyAgRWxmMzJfT2ZmCXNoX29mZnNldDsJCS8qIFNlY3Rpb24gZmlsZSBvZmZzZXQgKi8KKyAgRWxmMzJfV29yZAlzaF9zaXplOwkJLyogU2VjdGlvbiBzaXplIGluIGJ5dGVzICovCisgIEVsZjMyX1dvcmQJc2hfbGluazsJCS8qIExpbmsgdG8gYW5vdGhlciBzZWN0aW9uICovCisgIEVsZjMyX1dvcmQJc2hfaW5mbzsJCS8qIEFkZGl0aW9uYWwgc2VjdGlvbiBpbmZvcm1hdGlvbiAqLworICBFbGYzMl9Xb3JkCXNoX2FkZHJhbGlnbjsJCS8qIFNlY3Rpb24gYWxpZ25tZW50ICovCisgIEVsZjMyX1dvcmQJc2hfZW50c2l6ZTsJCS8qIEVudHJ5IHNpemUgaWYgc2VjdGlvbiBob2xkcyB0YWJsZSAqLworfSBFbGYzMl9TaGRyOworCit0eXBlZGVmIHN0cnVjdAoreworICBFbGY2NF9Xb3JkCXNoX25hbWU7CQkvKiBTZWN0aW9uIG5hbWUgKHN0cmluZyB0YmwgaW5kZXgpICovCisgIEVsZjY0X1dvcmQJc2hfdHlwZTsJCS8qIFNlY3Rpb24gdHlwZSAqLworICBFbGY2NF9Yd29yZAlzaF9mbGFnczsJCS8qIFNlY3Rpb24gZmxhZ3MgKi8KKyAgRWxmNjRfQWRkcglzaF9hZGRyOwkJLyogU2VjdGlvbiB2aXJ0dWFsIGFkZHIgYXQgZXhlY3V0aW9uICovCisgIEVsZjY0X09mZglzaF9vZmZzZXQ7CQkvKiBTZWN0aW9uIGZpbGUgb2Zmc2V0ICovCisgIEVsZjY0X1h3b3JkCXNoX3NpemU7CQkvKiBTZWN0aW9uIHNpemUgaW4gYnl0ZXMgKi8KKyAgRWxmNjRfV29yZAlzaF9saW5rOwkJLyogTGluayB0byBhbm90aGVyIHNlY3Rpb24gKi8KKyAgRWxmNjRfV29yZAlzaF9pbmZvOwkJLyogQWRkaXRpb25hbCBzZWN0aW9uIGluZm9ybWF0aW9uICovCisgIEVsZjY0X1h3b3JkCXNoX2FkZHJhbGlnbjsJCS8qIFNlY3Rpb24gYWxpZ25tZW50ICovCisgIEVsZjY0X1h3b3JkCXNoX2VudHNpemU7CQkvKiBFbnRyeSBzaXplIGlmIHNlY3Rpb24gaG9sZHMgdGFibGUgKi8KK30gRWxmNjRfU2hkcjsKKworLyogU3BlY2lhbCBzZWN0aW9uIGluZGljZXMuICAqLworCisjZGVmaW5lIFNITl9VTkRFRgkwCQkvKiBVbmRlZmluZWQgc2VjdGlvbiAqLworI2RlZmluZSBTSE5fTE9SRVNFUlZFCTB4ZmYwMAkJLyogU3RhcnQgb2YgcmVzZXJ2ZWQgaW5kaWNlcyAqLworI2RlZmluZSBTSE5fTE9QUk9DCTB4ZmYwMAkJLyogU3RhcnQgb2YgcHJvY2Vzc29yLXNwZWNpZmljICovCisjZGVmaW5lIFNITl9CRUZPUkUJMHhmZjAwCQkvKiBPcmRlciBzZWN0aW9uIGJlZm9yZSBhbGwgb3RoZXJzCisJCQkJCSAgIChTb2xhcmlzKS4gICovCisjZGVmaW5lIFNITl9BRlRFUgkweGZmMDEJCS8qIE9yZGVyIHNlY3Rpb24gYWZ0ZXIgYWxsIG90aGVycworCQkJCQkgICAoU29sYXJpcykuICAqLworI2RlZmluZSBTSE5fSElQUk9DCTB4ZmYxZgkJLyogRW5kIG9mIHByb2Nlc3Nvci1zcGVjaWZpYyAqLworI2RlZmluZSBTSE5fTE9PUwkweGZmMjAJCS8qIFN0YXJ0IG9mIE9TLXNwZWNpZmljICovCisjZGVmaW5lIFNITl9ISU9TCTB4ZmYzZgkJLyogRW5kIG9mIE9TLXNwZWNpZmljICovCisjZGVmaW5lIFNITl9BQlMJCTB4ZmZmMQkJLyogQXNzb2NpYXRlZCBzeW1ib2wgaXMgYWJzb2x1dGUgKi8KKyNkZWZpbmUgU0hOX0NPTU1PTgkweGZmZjIJCS8qIEFzc29jaWF0ZWQgc3ltYm9sIGlzIGNvbW1vbiAqLworI2RlZmluZSBTSE5fWElOREVYCTB4ZmZmZgkJLyogSW5kZXggaXMgaW4gZXh0cmEgdGFibGUuICAqLworI2RlZmluZSBTSE5fSElSRVNFUlZFCTB4ZmZmZgkJLyogRW5kIG9mIHJlc2VydmVkIGluZGljZXMgKi8KKworLyogTGVnYWwgdmFsdWVzIGZvciBzaF90eXBlIChzZWN0aW9uIHR5cGUpLiAgKi8KKworI2RlZmluZSBTSFRfTlVMTAkgIDAJCS8qIFNlY3Rpb24gaGVhZGVyIHRhYmxlIGVudHJ5IHVudXNlZCAqLworI2RlZmluZSBTSFRfUFJPR0JJVFMJICAxCQkvKiBQcm9ncmFtIGRhdGEgKi8KKyNkZWZpbmUgU0hUX1NZTVRBQgkgIDIJCS8qIFN5bWJvbCB0YWJsZSAqLworI2RlZmluZSBTSFRfU1RSVEFCCSAgMwkJLyogU3RyaW5nIHRhYmxlICovCisjZGVmaW5lIFNIVF9SRUxBCSAgNAkJLyogUmVsb2NhdGlvbiBlbnRyaWVzIHdpdGggYWRkZW5kcyAqLworI2RlZmluZSBTSFRfSEFTSAkgIDUJCS8qIFN5bWJvbCBoYXNoIHRhYmxlICovCisjZGVmaW5lIFNIVF9EWU5BTUlDCSAgNgkJLyogRHluYW1pYyBsaW5raW5nIGluZm9ybWF0aW9uICovCisjZGVmaW5lIFNIVF9OT1RFCSAgNwkJLyogTm90ZXMgKi8KKyNkZWZpbmUgU0hUX05PQklUUwkgIDgJCS8qIFByb2dyYW0gc3BhY2Ugd2l0aCBubyBkYXRhIChic3MpICovCisjZGVmaW5lIFNIVF9SRUwJCSAgOQkJLyogUmVsb2NhdGlvbiBlbnRyaWVzLCBubyBhZGRlbmRzICovCisjZGVmaW5lIFNIVF9TSExJQgkgIDEwCQkvKiBSZXNlcnZlZCAqLworI2RlZmluZSBTSFRfRFlOU1lNCSAgMTEJCS8qIER5bmFtaWMgbGlua2VyIHN5bWJvbCB0YWJsZSAqLworI2RlZmluZSBTSFRfSU5JVF9BUlJBWQkgIDE0CQkvKiBBcnJheSBvZiBjb25zdHJ1Y3RvcnMgKi8KKyNkZWZpbmUgU0hUX0ZJTklfQVJSQVkJICAxNQkJLyogQXJyYXkgb2YgZGVzdHJ1Y3RvcnMgKi8KKyNkZWZpbmUgU0hUX1BSRUlOSVRfQVJSQVkgMTYJCS8qIEFycmF5IG9mIHByZS1jb25zdHJ1Y3RvcnMgKi8KKyNkZWZpbmUgU0hUX0dST1VQCSAgMTcJCS8qIFNlY3Rpb24gZ3JvdXAgKi8KKyNkZWZpbmUgU0hUX1NZTVRBQl9TSE5EWCAgMTgJCS8qIEV4dGVuZGVkIHNlY3Rpb24gaW5kZWNlcyAqLworI2RlZmluZQlTSFRfTlVNCQkgIDE5CQkvKiBOdW1iZXIgb2YgZGVmaW5lZCB0eXBlcy4gICovCisjZGVmaW5lIFNIVF9MT09TCSAgMHg2MDAwMDAwMAkvKiBTdGFydCBPUy1zcGVjaWZpYy4gICovCisjZGVmaW5lIFNIVF9HTlVfQVRUUklCVVRFUyAweDZmZmZmZmY1CS8qIE9iamVjdCBhdHRyaWJ1dGVzLiAgKi8KKyNkZWZpbmUgU0hUX0dOVV9IQVNICSAgMHg2ZmZmZmZmNgkvKiBHTlUtc3R5bGUgaGFzaCB0YWJsZS4gICovCisjZGVmaW5lIFNIVF9HTlVfTElCTElTVAkgIDB4NmZmZmZmZjcJLyogUHJlbGluayBsaWJyYXJ5IGxpc3QgKi8KKyNkZWZpbmUgU0hUX0NIRUNLU1VNCSAgMHg2ZmZmZmZmOAkvKiBDaGVja3N1bSBmb3IgRFNPIGNvbnRlbnQuICAqLworI2RlZmluZSBTSFRfTE9TVU5XCSAgMHg2ZmZmZmZmYQkvKiBTdW4tc3BlY2lmaWMgbG93IGJvdW5kLiAgKi8KKyNkZWZpbmUgU0hUX1NVTldfbW92ZQkgIDB4NmZmZmZmZmEKKyNkZWZpbmUgU0hUX1NVTldfQ09NREFUICAgMHg2ZmZmZmZmYgorI2RlZmluZSBTSFRfU1VOV19zeW1pbmZvICAweDZmZmZmZmZjCisjZGVmaW5lIFNIVF9HTlVfdmVyZGVmCSAgMHg2ZmZmZmZmZAkvKiBWZXJzaW9uIGRlZmluaXRpb24gc2VjdGlvbi4gICovCisjZGVmaW5lIFNIVF9HTlVfdmVybmVlZAkgIDB4NmZmZmZmZmUJLyogVmVyc2lvbiBuZWVkcyBzZWN0aW9uLiAgKi8KKyNkZWZpbmUgU0hUX0dOVV92ZXJzeW0JICAweDZmZmZmZmZmCS8qIFZlcnNpb24gc3ltYm9sIHRhYmxlLiAgKi8KKyNkZWZpbmUgU0hUX0hJU1VOVwkgIDB4NmZmZmZmZmYJLyogU3VuLXNwZWNpZmljIGhpZ2ggYm91bmQuICAqLworI2RlZmluZSBTSFRfSElPUwkgIDB4NmZmZmZmZmYJLyogRW5kIE9TLXNwZWNpZmljIHR5cGUgKi8KKyNkZWZpbmUgU0hUX0xPUFJPQwkgIDB4NzAwMDAwMDAJLyogU3RhcnQgb2YgcHJvY2Vzc29yLXNwZWNpZmljICovCisjZGVmaW5lIFNIVF9ISVBST0MJICAweDdmZmZmZmZmCS8qIEVuZCBvZiBwcm9jZXNzb3Itc3BlY2lmaWMgKi8KKyNkZWZpbmUgU0hUX0xPVVNFUgkgIDB4ODAwMDAwMDAJLyogU3RhcnQgb2YgYXBwbGljYXRpb24tc3BlY2lmaWMgKi8KKyNkZWZpbmUgU0hUX0hJVVNFUgkgIDB4OGZmZmZmZmYJLyogRW5kIG9mIGFwcGxpY2F0aW9uLXNwZWNpZmljICovCisKKy8qIExlZ2FsIHZhbHVlcyBmb3Igc2hfZmxhZ3MgKHNlY3Rpb24gZmxhZ3MpLiAgKi8KKworI2RlZmluZSBTSEZfV1JJVEUJICAgICAoMSA8PCAwKQkvKiBXcml0YWJsZSAqLworI2RlZmluZSBTSEZfQUxMT0MJICAgICAoMSA8PCAxKQkvKiBPY2N1cGllcyBtZW1vcnkgZHVyaW5nIGV4ZWN1dGlvbiAqLworI2RlZmluZSBTSEZfRVhFQ0lOU1RSCSAgICAgKDEgPDwgMikJLyogRXhlY3V0YWJsZSAqLworI2RlZmluZSBTSEZfTUVSR0UJICAgICAoMSA8PCA0KQkvKiBNaWdodCBiZSBtZXJnZWQgKi8KKyNkZWZpbmUgU0hGX1NUUklOR1MJICAgICAoMSA8PCA1KQkvKiBDb250YWlucyBudWwtdGVybWluYXRlZCBzdHJpbmdzICovCisjZGVmaW5lIFNIRl9JTkZPX0xJTksJICAgICAoMSA8PCA2KQkvKiBgc2hfaW5mbycgY29udGFpbnMgU0hUIGluZGV4ICovCisjZGVmaW5lIFNIRl9MSU5LX09SREVSCSAgICAgKDEgPDwgNykJLyogUHJlc2VydmUgb3JkZXIgYWZ0ZXIgY29tYmluaW5nICovCisjZGVmaW5lIFNIRl9PU19OT05DT05GT1JNSU5HICgxIDw8IDgpCS8qIE5vbi1zdGFuZGFyZCBPUyBzcGVjaWZpYyBoYW5kbGluZworCQkJCQkgICByZXF1aXJlZCAqLworI2RlZmluZSBTSEZfR1JPVVAJICAgICAoMSA8PCA5KQkvKiBTZWN0aW9uIGlzIG1lbWJlciBvZiBhIGdyb3VwLiAgKi8KKyNkZWZpbmUgU0hGX1RMUwkJICAgICAoMSA8PCAxMCkJLyogU2VjdGlvbiBob2xkIHRocmVhZC1sb2NhbCBkYXRhLiAgKi8KKyNkZWZpbmUgU0hGX01BU0tPUwkgICAgIDB4MGZmMDAwMDAJLyogT1Mtc3BlY2lmaWMuICAqLworI2RlZmluZSBTSEZfTUFTS1BST0MJICAgICAweGYwMDAwMDAwCS8qIFByb2Nlc3Nvci1zcGVjaWZpYyAqLworI2RlZmluZSBTSEZfT1JERVJFRAkgICAgICgxIDw8IDMwKQkvKiBTcGVjaWFsIG9yZGVyaW5nIHJlcXVpcmVtZW50CisJCQkJCSAgIChTb2xhcmlzKS4gICovCisjZGVmaW5lIFNIRl9FWENMVURFCSAgICAgKDEgPDwgMzEpCS8qIFNlY3Rpb24gaXMgZXhjbHVkZWQgdW5sZXNzCisJCQkJCSAgIHJlZmVyZW5jZWQgb3IgYWxsb2NhdGVkIChTb2xhcmlzKS4qLworCisvKiBTZWN0aW9uIGdyb3VwIGhhbmRsaW5nLiAgKi8KKyNkZWZpbmUgR1JQX0NPTURBVAkweDEJCS8qIE1hcmsgZ3JvdXAgYXMgQ09NREFULiAgKi8KKworLyogU3ltYm9sIHRhYmxlIGVudHJ5LiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgRWxmMzJfV29yZAlzdF9uYW1lOwkJLyogU3ltYm9sIG5hbWUgKHN0cmluZyB0YmwgaW5kZXgpICovCisgIEVsZjMyX0FkZHIJc3RfdmFsdWU7CQkvKiBTeW1ib2wgdmFsdWUgKi8KKyAgRWxmMzJfV29yZAlzdF9zaXplOwkJLyogU3ltYm9sIHNpemUgKi8KKyAgdW5zaWduZWQgY2hhcglzdF9pbmZvOwkJLyogU3ltYm9sIHR5cGUgYW5kIGJpbmRpbmcgKi8KKyAgdW5zaWduZWQgY2hhcglzdF9vdGhlcjsJCS8qIFN5bWJvbCB2aXNpYmlsaXR5ICovCisgIEVsZjMyX1NlY3Rpb24Jc3Rfc2huZHg7CQkvKiBTZWN0aW9uIGluZGV4ICovCit9IEVsZjMyX1N5bTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgRWxmNjRfV29yZAlzdF9uYW1lOwkJLyogU3ltYm9sIG5hbWUgKHN0cmluZyB0YmwgaW5kZXgpICovCisgIHVuc2lnbmVkIGNoYXIJc3RfaW5mbzsJCS8qIFN5bWJvbCB0eXBlIGFuZCBiaW5kaW5nICovCisgIHVuc2lnbmVkIGNoYXIgc3Rfb3RoZXI7CQkvKiBTeW1ib2wgdmlzaWJpbGl0eSAqLworICBFbGY2NF9TZWN0aW9uCXN0X3NobmR4OwkJLyogU2VjdGlvbiBpbmRleCAqLworICBFbGY2NF9BZGRyCXN0X3ZhbHVlOwkJLyogU3ltYm9sIHZhbHVlICovCisgIEVsZjY0X1h3b3JkCXN0X3NpemU7CQkvKiBTeW1ib2wgc2l6ZSAqLworfSBFbGY2NF9TeW07CisKKy8qIFRoZSBzeW1pbmZvIHNlY3Rpb24gaWYgYXZhaWxhYmxlIGNvbnRhaW5zIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQKKyAgIGV2ZXJ5IGR5bmFtaWMgc3ltYm9sLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgRWxmMzJfSGFsZiBzaV9ib3VuZHRvOwkJLyogRGlyZWN0IGJpbmRpbmdzLCBzeW1ib2wgYm91bmQgdG8gKi8KKyAgRWxmMzJfSGFsZiBzaV9mbGFnczsJCQkvKiBQZXIgc3ltYm9sIGZsYWdzICovCit9IEVsZjMyX1N5bWluZm87CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEVsZjY0X0hhbGYgc2lfYm91bmR0bzsJCS8qIERpcmVjdCBiaW5kaW5ncywgc3ltYm9sIGJvdW5kIHRvICovCisgIEVsZjY0X0hhbGYgc2lfZmxhZ3M7CQkJLyogUGVyIHN5bWJvbCBmbGFncyAqLworfSBFbGY2NF9TeW1pbmZvOworCisvKiBQb3NzaWJsZSB2YWx1ZXMgZm9yIHNpX2JvdW5kdG8uICAqLworI2RlZmluZSBTWU1JTkZPX0JUX1NFTEYJCTB4ZmZmZgkvKiBTeW1ib2wgYm91bmQgdG8gc2VsZiAqLworI2RlZmluZSBTWU1JTkZPX0JUX1BBUkVOVAkweGZmZmUJLyogU3ltYm9sIGJvdW5kIHRvIHBhcmVudCAqLworI2RlZmluZSBTWU1JTkZPX0JUX0xPV1JFU0VSVkUJMHhmZjAwCS8qIEJlZ2lubmluZyBvZiByZXNlcnZlZCBlbnRyaWVzICovCisKKy8qIFBvc3NpYmxlIGJpdG1hc2tzIGZvciBzaV9mbGFncy4gICovCisjZGVmaW5lIFNZTUlORk9fRkxHX0RJUkVDVAkweDAwMDEJLyogRGlyZWN0IGJvdW5kIHN5bWJvbCAqLworI2RlZmluZSBTWU1JTkZPX0ZMR19QQVNTVEhSVQkweDAwMDIJLyogUGFzcy10aHJ1IHN5bWJvbCBmb3IgdHJhbnNsYXRvciAqLworI2RlZmluZSBTWU1JTkZPX0ZMR19DT1BZCTB4MDAwNAkvKiBTeW1ib2wgaXMgYSBjb3B5LXJlbG9jICovCisjZGVmaW5lIFNZTUlORk9fRkxHX0xBWllMT0FECTB4MDAwOAkvKiBTeW1ib2wgYm91bmQgdG8gb2JqZWN0IHRvIGJlIGxhenkKKwkJCQkJICAgbG9hZGVkICovCisvKiBTeW1pbmZvIHZlcnNpb24gdmFsdWVzLiAgKi8KKyNkZWZpbmUgU1lNSU5GT19OT05FCQkwCisjZGVmaW5lIFNZTUlORk9fQ1VSUkVOVAkJMQorI2RlZmluZSBTWU1JTkZPX05VTQkJMgorCisKKy8qIEhvdyB0byBleHRyYWN0IGFuZCBpbnNlcnQgaW5mb3JtYXRpb24gaGVsZCBpbiB0aGUgc3RfaW5mbyBmaWVsZC4gICovCisKKyNkZWZpbmUgRUxGMzJfU1RfQklORCh2YWwpCQkoKCh1bnNpZ25lZCBjaGFyKSAodmFsKSkgPj4gNCkKKyNkZWZpbmUgRUxGMzJfU1RfVFlQRSh2YWwpCQkoKHZhbCkgJiAweGYpCisjZGVmaW5lIEVMRjMyX1NUX0lORk8oYmluZCwgdHlwZSkJKCgoYmluZCkgPDwgNCkgKyAoKHR5cGUpICYgMHhmKSkKKworLyogQm90aCBFbGYzMl9TeW0gYW5kIEVsZjY0X1N5bSB1c2UgdGhlIHNhbWUgb25lLWJ5dGUgc3RfaW5mbyBmaWVsZC4gICovCisjZGVmaW5lIEVMRjY0X1NUX0JJTkQodmFsKQkJRUxGMzJfU1RfQklORCAodmFsKQorI2RlZmluZSBFTEY2NF9TVF9UWVBFKHZhbCkJCUVMRjMyX1NUX1RZUEUgKHZhbCkKKyNkZWZpbmUgRUxGNjRfU1RfSU5GTyhiaW5kLCB0eXBlKQlFTEYzMl9TVF9JTkZPICgoYmluZCksICh0eXBlKSkKKworLyogTGVnYWwgdmFsdWVzIGZvciBTVF9CSU5EIHN1YmZpZWxkIG9mIHN0X2luZm8gKHN5bWJvbCBiaW5kaW5nKS4gICovCisKKyNkZWZpbmUgU1RCX0xPQ0FMCTAJCS8qIExvY2FsIHN5bWJvbCAqLworI2RlZmluZSBTVEJfR0xPQkFMCTEJCS8qIEdsb2JhbCBzeW1ib2wgKi8KKyNkZWZpbmUgU1RCX1dFQUsJMgkJLyogV2VhayBzeW1ib2wgKi8KKyNkZWZpbmUJU1RCX05VTQkJMwkJLyogTnVtYmVyIG9mIGRlZmluZWQgdHlwZXMuICAqLworI2RlZmluZSBTVEJfTE9PUwkxMAkJLyogU3RhcnQgb2YgT1Mtc3BlY2lmaWMgKi8KKyNkZWZpbmUgU1RCX0hJT1MJMTIJCS8qIEVuZCBvZiBPUy1zcGVjaWZpYyAqLworI2RlZmluZSBTVEJfTE9QUk9DCTEzCQkvKiBTdGFydCBvZiBwcm9jZXNzb3Itc3BlY2lmaWMgKi8KKyNkZWZpbmUgU1RCX0hJUFJPQwkxNQkJLyogRW5kIG9mIHByb2Nlc3Nvci1zcGVjaWZpYyAqLworCisvKiBMZWdhbCB2YWx1ZXMgZm9yIFNUX1RZUEUgc3ViZmllbGQgb2Ygc3RfaW5mbyAoc3ltYm9sIHR5cGUpLiAgKi8KKworI2RlZmluZSBTVFRfTk9UWVBFCTAJCS8qIFN5bWJvbCB0eXBlIGlzIHVuc3BlY2lmaWVkICovCisjZGVmaW5lIFNUVF9PQkpFQ1QJMQkJLyogU3ltYm9sIGlzIGEgZGF0YSBvYmplY3QgKi8KKyNkZWZpbmUgU1RUX0ZVTkMJMgkJLyogU3ltYm9sIGlzIGEgY29kZSBvYmplY3QgKi8KKyNkZWZpbmUgU1RUX1NFQ1RJT04JMwkJLyogU3ltYm9sIGFzc29jaWF0ZWQgd2l0aCBhIHNlY3Rpb24gKi8KKyNkZWZpbmUgU1RUX0ZJTEUJNAkJLyogU3ltYm9sJ3MgbmFtZSBpcyBmaWxlIG5hbWUgKi8KKyNkZWZpbmUgU1RUX0NPTU1PTgk1CQkvKiBTeW1ib2wgaXMgYSBjb21tb24gZGF0YSBvYmplY3QgKi8KKyNkZWZpbmUgU1RUX1RMUwkJNgkJLyogU3ltYm9sIGlzIHRocmVhZC1sb2NhbCBkYXRhIG9iamVjdCovCisjZGVmaW5lCVNUVF9OVU0JCTcJCS8qIE51bWJlciBvZiBkZWZpbmVkIHR5cGVzLiAgKi8KKyNkZWZpbmUgU1RUX0xPT1MJMTAJCS8qIFN0YXJ0IG9mIE9TLXNwZWNpZmljICovCisjZGVmaW5lIFNUVF9ISU9TCTEyCQkvKiBFbmQgb2YgT1Mtc3BlY2lmaWMgKi8KKyNkZWZpbmUgU1RUX0xPUFJPQwkxMwkJLyogU3RhcnQgb2YgcHJvY2Vzc29yLXNwZWNpZmljICovCisjZGVmaW5lIFNUVF9ISVBST0MJMTUJCS8qIEVuZCBvZiBwcm9jZXNzb3Itc3BlY2lmaWMgKi8KKworCisvKiBTeW1ib2wgdGFibGUgaW5kaWNlcyBhcmUgZm91bmQgaW4gdGhlIGhhc2ggYnVja2V0cyBhbmQgY2hhaW4gdGFibGUKKyAgIG9mIGEgc3ltYm9sIGhhc2ggdGFibGUgc2VjdGlvbi4gIFRoaXMgc3BlY2lhbCBpbmRleCB2YWx1ZSBpbmRpY2F0ZXMKKyAgIHRoZSBlbmQgb2YgYSBjaGFpbiwgbWVhbmluZyBubyBmdXJ0aGVyIHN5bWJvbHMgYXJlIGZvdW5kIGluIHRoYXQgYnVja2V0LiAgKi8KKworI2RlZmluZSBTVE5fVU5ERUYJMAkJLyogRW5kIG9mIGEgY2hhaW4uICAqLworCisKKy8qIEhvdyB0byBleHRyYWN0IGFuZCBpbnNlcnQgaW5mb3JtYXRpb24gaGVsZCBpbiB0aGUgc3Rfb3RoZXIgZmllbGQuICAqLworCisjZGVmaW5lIEVMRjMyX1NUX1ZJU0lCSUxJVFkobykJKChvKSAmIDB4MDMpCisKKy8qIEZvciBFTEY2NCB0aGUgZGVmaW5pdGlvbnMgYXJlIHRoZSBzYW1lLiAgKi8KKyNkZWZpbmUgRUxGNjRfU1RfVklTSUJJTElUWShvKQlFTEYzMl9TVF9WSVNJQklMSVRZIChvKQorCisvKiBTeW1ib2wgdmlzaWJpbGl0eSBzcGVjaWZpY2F0aW9uIGVuY29kZWQgaW4gdGhlIHN0X290aGVyIGZpZWxkLiAgKi8KKyNkZWZpbmUgU1RWX0RFRkFVTFQJMAkJLyogRGVmYXVsdCBzeW1ib2wgdmlzaWJpbGl0eSBydWxlcyAqLworI2RlZmluZSBTVFZfSU5URVJOQUwJMQkJLyogUHJvY2Vzc29yIHNwZWNpZmljIGhpZGRlbiBjbGFzcyAqLworI2RlZmluZSBTVFZfSElEREVOCTIJCS8qIFN5bSB1bmF2YWlsYWJsZSBpbiBvdGhlciBtb2R1bGVzICovCisjZGVmaW5lIFNUVl9QUk9URUNURUQJMwkJLyogTm90IHByZWVtcHRpYmxlLCBub3QgZXhwb3J0ZWQgKi8KKworCisvKiBSZWxvY2F0aW9uIHRhYmxlIGVudHJ5IHdpdGhvdXQgYWRkZW5kIChpbiBzZWN0aW9uIG9mIHR5cGUgU0hUX1JFTCkuICAqLworCit0eXBlZGVmIHN0cnVjdAoreworICBFbGYzMl9BZGRyCXJfb2Zmc2V0OwkJLyogQWRkcmVzcyAqLworICBFbGYzMl9Xb3JkCXJfaW5mbzsJCQkvKiBSZWxvY2F0aW9uIHR5cGUgYW5kIHN5bWJvbCBpbmRleCAqLworfSBFbGYzMl9SZWw7CisKKy8qIEkgaGF2ZSBzZWVuIHR3byBkaWZmZXJlbnQgZGVmaW5pdGlvbnMgb2YgdGhlIEVsZjY0X1JlbCBhbmQKKyAgIEVsZjY0X1JlbGEgc3RydWN0dXJlcywgc28gd2UnbGwgbGVhdmUgdGhlbSBvdXQgdW50aWwgTm92ZWxsIChvcgorICAgd2hvZXZlcikgZ2V0cyB0aGVpciBhY3QgdG9nZXRoZXIuICAqLworLyogVGhlIGZvbGxvd2luZywgYXQgbGVhc3QsIGlzIHVzZWQgb24gU3BhcmMgdjksIE1JUFMsIGFuZCBBbHBoYS4gICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEVsZjY0X0FkZHIJcl9vZmZzZXQ7CQkvKiBBZGRyZXNzICovCisgIEVsZjY0X1h3b3JkCXJfaW5mbzsJCQkvKiBSZWxvY2F0aW9uIHR5cGUgYW5kIHN5bWJvbCBpbmRleCAqLworfSBFbGY2NF9SZWw7CisKKy8qIFJlbG9jYXRpb24gdGFibGUgZW50cnkgd2l0aCBhZGRlbmQgKGluIHNlY3Rpb24gb2YgdHlwZSBTSFRfUkVMQSkuICAqLworCit0eXBlZGVmIHN0cnVjdAoreworICBFbGYzMl9BZGRyCXJfb2Zmc2V0OwkJLyogQWRkcmVzcyAqLworICBFbGYzMl9Xb3JkCXJfaW5mbzsJCQkvKiBSZWxvY2F0aW9uIHR5cGUgYW5kIHN5bWJvbCBpbmRleCAqLworICBFbGYzMl9Td29yZAlyX2FkZGVuZDsJCS8qIEFkZGVuZCAqLworfSBFbGYzMl9SZWxhOworCit0eXBlZGVmIHN0cnVjdAoreworICBFbGY2NF9BZGRyCXJfb2Zmc2V0OwkJLyogQWRkcmVzcyAqLworICBFbGY2NF9Yd29yZAlyX2luZm87CQkJLyogUmVsb2NhdGlvbiB0eXBlIGFuZCBzeW1ib2wgaW5kZXggKi8KKyAgRWxmNjRfU3h3b3JkCXJfYWRkZW5kOwkJLyogQWRkZW5kICovCit9IEVsZjY0X1JlbGE7CisKKy8qIEhvdyB0byBleHRyYWN0IGFuZCBpbnNlcnQgaW5mb3JtYXRpb24gaGVsZCBpbiB0aGUgcl9pbmZvIGZpZWxkLiAgKi8KKworI2RlZmluZSBFTEYzMl9SX1NZTSh2YWwpCQkoKHZhbCkgPj4gOCkKKyNkZWZpbmUgRUxGMzJfUl9UWVBFKHZhbCkJCSgodmFsKSAmIDB4ZmYpCisjZGVmaW5lIEVMRjMyX1JfSU5GTyhzeW0sIHR5cGUpCQkoKChzeW0pIDw8IDgpICsgKCh0eXBlKSAmIDB4ZmYpKQorCisjZGVmaW5lIEVMRjY0X1JfU1lNKGkpCQkJKChpKSA+PiAzMikKKyNkZWZpbmUgRUxGNjRfUl9UWVBFKGkpCQkJKChpKSAmIDB4ZmZmZmZmZmYpCisjZGVmaW5lIEVMRjY0X1JfSU5GTyhzeW0sdHlwZSkJCSgoKChFbGY2NF9Yd29yZCkgKHN5bSkpIDw8IDMyKSArICh0eXBlKSkKKworLyogUHJvZ3JhbSBzZWdtZW50IGhlYWRlci4gICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEVsZjMyX1dvcmQJcF90eXBlOwkJCS8qIFNlZ21lbnQgdHlwZSAqLworICBFbGYzMl9PZmYJcF9vZmZzZXQ7CQkvKiBTZWdtZW50IGZpbGUgb2Zmc2V0ICovCisgIEVsZjMyX0FkZHIJcF92YWRkcjsJCS8qIFNlZ21lbnQgdmlydHVhbCBhZGRyZXNzICovCisgIEVsZjMyX0FkZHIJcF9wYWRkcjsJCS8qIFNlZ21lbnQgcGh5c2ljYWwgYWRkcmVzcyAqLworICBFbGYzMl9Xb3JkCXBfZmlsZXN6OwkJLyogU2VnbWVudCBzaXplIGluIGZpbGUgKi8KKyAgRWxmMzJfV29yZAlwX21lbXN6OwkJLyogU2VnbWVudCBzaXplIGluIG1lbW9yeSAqLworICBFbGYzMl9Xb3JkCXBfZmxhZ3M7CQkvKiBTZWdtZW50IGZsYWdzICovCisgIEVsZjMyX1dvcmQJcF9hbGlnbjsJCS8qIFNlZ21lbnQgYWxpZ25tZW50ICovCit9IEVsZjMyX1BoZHI7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEVsZjY0X1dvcmQJcF90eXBlOwkJCS8qIFNlZ21lbnQgdHlwZSAqLworICBFbGY2NF9Xb3JkCXBfZmxhZ3M7CQkvKiBTZWdtZW50IGZsYWdzICovCisgIEVsZjY0X09mZglwX29mZnNldDsJCS8qIFNlZ21lbnQgZmlsZSBvZmZzZXQgKi8KKyAgRWxmNjRfQWRkcglwX3ZhZGRyOwkJLyogU2VnbWVudCB2aXJ0dWFsIGFkZHJlc3MgKi8KKyAgRWxmNjRfQWRkcglwX3BhZGRyOwkJLyogU2VnbWVudCBwaHlzaWNhbCBhZGRyZXNzICovCisgIEVsZjY0X1h3b3JkCXBfZmlsZXN6OwkJLyogU2VnbWVudCBzaXplIGluIGZpbGUgKi8KKyAgRWxmNjRfWHdvcmQJcF9tZW1zejsJCS8qIFNlZ21lbnQgc2l6ZSBpbiBtZW1vcnkgKi8KKyAgRWxmNjRfWHdvcmQJcF9hbGlnbjsJCS8qIFNlZ21lbnQgYWxpZ25tZW50ICovCit9IEVsZjY0X1BoZHI7CisKKy8qIExlZ2FsIHZhbHVlcyBmb3IgcF90eXBlIChzZWdtZW50IHR5cGUpLiAgKi8KKworI2RlZmluZQlQVF9OVUxMCQkwCQkvKiBQcm9ncmFtIGhlYWRlciB0YWJsZSBlbnRyeSB1bnVzZWQgKi8KKyNkZWZpbmUgUFRfTE9BRAkJMQkJLyogTG9hZGFibGUgcHJvZ3JhbSBzZWdtZW50ICovCisjZGVmaW5lIFBUX0RZTkFNSUMJMgkJLyogRHluYW1pYyBsaW5raW5nIGluZm9ybWF0aW9uICovCisjZGVmaW5lIFBUX0lOVEVSUAkzCQkvKiBQcm9ncmFtIGludGVycHJldGVyICovCisjZGVmaW5lIFBUX05PVEUJCTQJCS8qIEF1eGlsaWFyeSBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBQVF9TSExJQgk1CQkvKiBSZXNlcnZlZCAqLworI2RlZmluZSBQVF9QSERSCQk2CQkvKiBFbnRyeSBmb3IgaGVhZGVyIHRhYmxlIGl0c2VsZiAqLworI2RlZmluZSBQVF9UTFMJCTcJCS8qIFRocmVhZC1sb2NhbCBzdG9yYWdlIHNlZ21lbnQgKi8KKyNkZWZpbmUJUFRfTlVNCQk4CQkvKiBOdW1iZXIgb2YgZGVmaW5lZCB0eXBlcyAqLworI2RlZmluZSBQVF9MT09TCQkweDYwMDAwMDAwCS8qIFN0YXJ0IG9mIE9TLXNwZWNpZmljICovCisjZGVmaW5lIFBUX0dOVV9FSF9GUkFNRQkweDY0NzRlNTUwCS8qIEdDQyAuZWhfZnJhbWVfaGRyIHNlZ21lbnQgKi8KKyNkZWZpbmUgUFRfR05VX1NUQUNLCTB4NjQ3NGU1NTEJLyogSW5kaWNhdGVzIHN0YWNrIGV4ZWN1dGFiaWxpdHkgKi8KKyNkZWZpbmUgUFRfR05VX1JFTFJPCTB4NjQ3NGU1NTIJLyogUmVhZC1vbmx5IGFmdGVyIHJlbG9jYXRpb24gKi8KKyNkZWZpbmUgUFRfUEFYX0ZMQUdTCTB4NjUwNDE1ODAJLyogSW5kaWNhdGVzIFBhWCBmbGFnIG1hcmtpbmdzICovCisjZGVmaW5lIFBUX0xPU1VOVwkweDZmZmZmZmZhCisjZGVmaW5lIFBUX1NVTldCU1MJMHg2ZmZmZmZmYQkvKiBTdW4gU3BlY2lmaWMgc2VnbWVudCAqLworI2RlZmluZSBQVF9TVU5XU1RBQ0sJMHg2ZmZmZmZmYgkvKiBTdGFjayBzZWdtZW50ICovCisjZGVmaW5lIFBUX0hJU1VOVwkweDZmZmZmZmZmCisjZGVmaW5lIFBUX0hJT1MJCTB4NmZmZmZmZmYJLyogRW5kIG9mIE9TLXNwZWNpZmljICovCisjZGVmaW5lIFBUX0xPUFJPQwkweDcwMDAwMDAwCS8qIFN0YXJ0IG9mIHByb2Nlc3Nvci1zcGVjaWZpYyAqLworI2RlZmluZSBQVF9ISVBST0MJMHg3ZmZmZmZmZgkvKiBFbmQgb2YgcHJvY2Vzc29yLXNwZWNpZmljICovCisKKy8qIExlZ2FsIHZhbHVlcyBmb3IgcF9mbGFncyAoc2VnbWVudCBmbGFncykuICAqLworCisjZGVmaW5lIFBGX1gJCSgxIDw8IDApCS8qIFNlZ21lbnQgaXMgZXhlY3V0YWJsZSAqLworI2RlZmluZSBQRl9XCQkoMSA8PCAxKQkvKiBTZWdtZW50IGlzIHdyaXRhYmxlICovCisjZGVmaW5lIFBGX1IJCSgxIDw8IDIpCS8qIFNlZ21lbnQgaXMgcmVhZGFibGUgKi8KKyNkZWZpbmUgUEZfUEFHRUVYRUMJKDEgPDwgNCkJLyogRW5hYmxlICBQQUdFRVhFQyAqLworI2RlZmluZSBQRl9OT1BBR0VFWEVDCSgxIDw8IDUpCS8qIERpc2FibGUgUEFHRUVYRUMgKi8KKyNkZWZpbmUgUEZfU0VHTUVYRUMJKDEgPDwgNikJLyogRW5hYmxlICBTRUdNRVhFQyAqLworI2RlZmluZSBQRl9OT1NFR01FWEVDCSgxIDw8IDcpCS8qIERpc2FibGUgU0VHTUVYRUMgKi8KKyNkZWZpbmUgUEZfTVBST1RFQ1QJKDEgPDwgOCkJLyogRW5hYmxlICBNUFJPVEVDVCAqLworI2RlZmluZSBQRl9OT01QUk9URUNUCSgxIDw8IDkpCS8qIERpc2FibGUgTVBST1RFQ1QgKi8KKyNkZWZpbmUgUEZfUkFOREVYRUMJKDEgPDwgMTApCS8qIEVuYWJsZSAgUkFOREVYRUMgKi8KKyNkZWZpbmUgUEZfTk9SQU5ERVhFQwkoMSA8PCAxMSkJLyogRGlzYWJsZSBSQU5ERVhFQyAqLworI2RlZmluZSBQRl9FTVVUUkFNUAkoMSA8PCAxMikJLyogRW5hYmxlICBFTVVUUkFNUCAqLworI2RlZmluZSBQRl9OT0VNVVRSQU1QCSgxIDw8IDEzKQkvKiBEaXNhYmxlIEVNVVRSQU1QICovCisjZGVmaW5lIFBGX1JBTkRNTUFQCSgxIDw8IDE0KQkvKiBFbmFibGUgIFJBTkRNTUFQICovCisjZGVmaW5lIFBGX05PUkFORE1NQVAJKDEgPDwgMTUpCS8qIERpc2FibGUgUkFORE1NQVAgKi8KKyNkZWZpbmUgUEZfTUFTS09TCTB4MGZmMDAwMDAJLyogT1Mtc3BlY2lmaWMgKi8KKyNkZWZpbmUgUEZfTUFTS1BST0MJMHhmMDAwMDAwMAkvKiBQcm9jZXNzb3Itc3BlY2lmaWMgKi8KKworLyogTGVnYWwgdmFsdWVzIGZvciBub3RlIHNlZ21lbnQgZGVzY3JpcHRvciB0eXBlcyBmb3IgY29yZSBmaWxlcy4gKi8KKworI2RlZmluZSBOVF9QUlNUQVRVUwkxCQkvKiBDb250YWlucyBjb3B5IG9mIHByc3RhdHVzIHN0cnVjdCAqLworI2RlZmluZSBOVF9GUFJFR1NFVAkyCQkvKiBDb250YWlucyBjb3B5IG9mIGZwcmVnc2V0IHN0cnVjdCAqLworI2RlZmluZSBOVF9QUlBTSU5GTwkzCQkvKiBDb250YWlucyBjb3B5IG9mIHBycHNpbmZvIHN0cnVjdCAqLworI2RlZmluZSBOVF9QUlhSRUcJNAkJLyogQ29udGFpbnMgY29weSBvZiBwcnhyZWdzZXQgc3RydWN0ICovCisjZGVmaW5lIE5UX1RBU0tTVFJVQ1QJNAkJLyogQ29udGFpbnMgY29weSBvZiB0YXNrIHN0cnVjdHVyZSAqLworI2RlZmluZSBOVF9QTEFURk9STQk1CQkvKiBTdHJpbmcgZnJvbSBzeXNpbmZvKFNJX1BMQVRGT1JNKSAqLworI2RlZmluZSBOVF9BVVhWCQk2CQkvKiBDb250YWlucyBjb3B5IG9mIGF1eHYgYXJyYXkgKi8KKyNkZWZpbmUgTlRfR1dJTkRPV1MJNwkJLyogQ29udGFpbnMgY29weSBvZiBnd2luZG93cyBzdHJ1Y3QgKi8KKyNkZWZpbmUgTlRfQVNSUwkJOAkJLyogQ29udGFpbnMgY29weSBvZiBhc3JzZXQgc3RydWN0ICovCisjZGVmaW5lIE5UX1BTVEFUVVMJMTAJCS8qIENvbnRhaW5zIGNvcHkgb2YgcHN0YXR1cyBzdHJ1Y3QgKi8KKyNkZWZpbmUgTlRfUFNJTkZPCTEzCQkvKiBDb250YWlucyBjb3B5IG9mIHBzaW5mbyBzdHJ1Y3QgKi8KKyNkZWZpbmUgTlRfUFJDUkVECTE0CQkvKiBDb250YWlucyBjb3B5IG9mIHByY3JlZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgTlRfVVRTTkFNRQkxNQkJLyogQ29udGFpbnMgY29weSBvZiB1dHNuYW1lIHN0cnVjdCAqLworI2RlZmluZSBOVF9MV1BTVEFUVVMJMTYJCS8qIENvbnRhaW5zIGNvcHkgb2YgbHdwc3RhdHVzIHN0cnVjdCAqLworI2RlZmluZSBOVF9MV1BTSU5GTwkxNwkJLyogQ29udGFpbnMgY29weSBvZiBsd3BpbmZvIHN0cnVjdCAqLworI2RlZmluZSBOVF9QUkZQWFJFRwkyMAkJLyogQ29udGFpbnMgY29weSBvZiBmcHJ4cmVnc2V0IHN0cnVjdCAqLworI2RlZmluZSBOVF9QUlhGUFJFRwkweDQ2ZTYyYjdmCS8qIENvbnRhaW5zIGNvcHkgb2YgdXNlcl9meHNyX3N0cnVjdCAqLworI2RlZmluZSBOVF9QUENfVk1YCTB4MTAwCQkvKiBQb3dlclBDIEFsdGl2ZWMvVk1YIHJlZ2lzdGVycyAqLworI2RlZmluZSBOVF9QUENfU1BFCTB4MTAxCQkvKiBQb3dlclBDIFNQRS9FVlIgcmVnaXN0ZXJzICovCisjZGVmaW5lIE5UXzM4Nl9UTFMJMHgyMDAJCS8qIGkzODYgVExTIHNsb3RzIChzdHJ1Y3QgdXNlcl9kZXNjKSAqLworCisvKiBMZWdhbCB2YWx1ZXMgZm9yIHRoZSBub3RlIHNlZ21lbnQgZGVzY3JpcHRvciB0eXBlcyBmb3Igb2JqZWN0IGZpbGVzLiAgKi8KKworI2RlZmluZSBOVF9WRVJTSU9OCTEJCS8qIENvbnRhaW5zIGEgdmVyc2lvbiBzdHJpbmcuICAqLworCisKKy8qIER5bmFtaWMgc2VjdGlvbiBlbnRyeS4gICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEVsZjMyX1N3b3JkCWRfdGFnOwkJCS8qIER5bmFtaWMgZW50cnkgdHlwZSAqLworICB1bmlvbgorICAgIHsKKyAgICAgIEVsZjMyX1dvcmQgZF92YWw7CQkJLyogSW50ZWdlciB2YWx1ZSAqLworICAgICAgRWxmMzJfQWRkciBkX3B0cjsJCQkvKiBBZGRyZXNzIHZhbHVlICovCisgICAgfSBkX3VuOworfSBFbGYzMl9EeW47CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEVsZjY0X1N4d29yZAlkX3RhZzsJCQkvKiBEeW5hbWljIGVudHJ5IHR5cGUgKi8KKyAgdW5pb24KKyAgICB7CisgICAgICBFbGY2NF9Yd29yZCBkX3ZhbDsJCS8qIEludGVnZXIgdmFsdWUgKi8KKyAgICAgIEVsZjY0X0FkZHIgZF9wdHI7CQkJLyogQWRkcmVzcyB2YWx1ZSAqLworICAgIH0gZF91bjsKK30gRWxmNjRfRHluOworCisvKiBMZWdhbCB2YWx1ZXMgZm9yIGRfdGFnIChkeW5hbWljIGVudHJ5IHR5cGUpLiAgKi8KKworI2RlZmluZSBEVF9OVUxMCQkwCQkvKiBNYXJrcyBlbmQgb2YgZHluYW1pYyBzZWN0aW9uICovCisjZGVmaW5lIERUX05FRURFRAkxCQkvKiBOYW1lIG9mIG5lZWRlZCBsaWJyYXJ5ICovCisjZGVmaW5lIERUX1BMVFJFTFNaCTIJCS8qIFNpemUgaW4gYnl0ZXMgb2YgUExUIHJlbG9jcyAqLworI2RlZmluZSBEVF9QTFRHT1QJMwkJLyogUHJvY2Vzc29yIGRlZmluZWQgdmFsdWUgKi8KKyNkZWZpbmUgRFRfSEFTSAkJNAkJLyogQWRkcmVzcyBvZiBzeW1ib2wgaGFzaCB0YWJsZSAqLworI2RlZmluZSBEVF9TVFJUQUIJNQkJLyogQWRkcmVzcyBvZiBzdHJpbmcgdGFibGUgKi8KKyNkZWZpbmUgRFRfU1lNVEFCCTYJCS8qIEFkZHJlc3Mgb2Ygc3ltYm9sIHRhYmxlICovCisjZGVmaW5lIERUX1JFTEEJCTcJCS8qIEFkZHJlc3Mgb2YgUmVsYSByZWxvY3MgKi8KKyNkZWZpbmUgRFRfUkVMQVNaCTgJCS8qIFRvdGFsIHNpemUgb2YgUmVsYSByZWxvY3MgKi8KKyNkZWZpbmUgRFRfUkVMQUVOVAk5CQkvKiBTaXplIG9mIG9uZSBSZWxhIHJlbG9jICovCisjZGVmaW5lIERUX1NUUlNaCTEwCQkvKiBTaXplIG9mIHN0cmluZyB0YWJsZSAqLworI2RlZmluZSBEVF9TWU1FTlQJMTEJCS8qIFNpemUgb2Ygb25lIHN5bWJvbCB0YWJsZSBlbnRyeSAqLworI2RlZmluZSBEVF9JTklUCQkxMgkJLyogQWRkcmVzcyBvZiBpbml0IGZ1bmN0aW9uICovCisjZGVmaW5lIERUX0ZJTkkJCTEzCQkvKiBBZGRyZXNzIG9mIHRlcm1pbmF0aW9uIGZ1bmN0aW9uICovCisjZGVmaW5lIERUX1NPTkFNRQkxNAkJLyogTmFtZSBvZiBzaGFyZWQgb2JqZWN0ICovCisjZGVmaW5lIERUX1JQQVRICTE1CQkvKiBMaWJyYXJ5IHNlYXJjaCBwYXRoIChkZXByZWNhdGVkKSAqLworI2RlZmluZSBEVF9TWU1CT0xJQwkxNgkJLyogU3RhcnQgc3ltYm9sIHNlYXJjaCBoZXJlICovCisjZGVmaW5lIERUX1JFTAkJMTcJCS8qIEFkZHJlc3Mgb2YgUmVsIHJlbG9jcyAqLworI2RlZmluZSBEVF9SRUxTWgkxOAkJLyogVG90YWwgc2l6ZSBvZiBSZWwgcmVsb2NzICovCisjZGVmaW5lIERUX1JFTEVOVAkxOQkJLyogU2l6ZSBvZiBvbmUgUmVsIHJlbG9jICovCisjZGVmaW5lIERUX1BMVFJFTAkyMAkJLyogVHlwZSBvZiByZWxvYyBpbiBQTFQgKi8KKyNkZWZpbmUgRFRfREVCVUcJMjEJCS8qIEZvciBkZWJ1Z2dpbmc7IHVuc3BlY2lmaWVkICovCisjZGVmaW5lIERUX1RFWFRSRUwJMjIJCS8qIFJlbG9jIG1pZ2h0IG1vZGlmeSAudGV4dCAqLworI2RlZmluZSBEVF9KTVBSRUwJMjMJCS8qIEFkZHJlc3Mgb2YgUExUIHJlbG9jcyAqLworI2RlZmluZQlEVF9CSU5EX05PVwkyNAkJLyogUHJvY2VzcyByZWxvY2F0aW9ucyBvZiBvYmplY3QgKi8KKyNkZWZpbmUJRFRfSU5JVF9BUlJBWQkyNQkJLyogQXJyYXkgd2l0aCBhZGRyZXNzZXMgb2YgaW5pdCBmY3QgKi8KKyNkZWZpbmUJRFRfRklOSV9BUlJBWQkyNgkJLyogQXJyYXkgd2l0aCBhZGRyZXNzZXMgb2YgZmluaSBmY3QgKi8KKyNkZWZpbmUJRFRfSU5JVF9BUlJBWVNaCTI3CQkvKiBTaXplIGluIGJ5dGVzIG9mIERUX0lOSVRfQVJSQVkgKi8KKyNkZWZpbmUJRFRfRklOSV9BUlJBWVNaCTI4CQkvKiBTaXplIGluIGJ5dGVzIG9mIERUX0ZJTklfQVJSQVkgKi8KKyNkZWZpbmUgRFRfUlVOUEFUSAkyOQkJLyogTGlicmFyeSBzZWFyY2ggcGF0aCAqLworI2RlZmluZSBEVF9GTEFHUwkzMAkJLyogRmxhZ3MgZm9yIHRoZSBvYmplY3QgYmVpbmcgbG9hZGVkICovCisjZGVmaW5lIERUX0VOQ09ESU5HCTMyCQkvKiBTdGFydCBvZiBlbmNvZGVkIHJhbmdlICovCisjZGVmaW5lIERUX1BSRUlOSVRfQVJSQVkgMzIJCS8qIEFycmF5IHdpdGggYWRkcmVzc2VzIG9mIHByZWluaXQgZmN0Ki8KKyNkZWZpbmUgRFRfUFJFSU5JVF9BUlJBWVNaIDMzCQkvKiBzaXplIGluIGJ5dGVzIG9mIERUX1BSRUlOSVRfQVJSQVkgKi8KKyNkZWZpbmUJRFRfTlVNCQkzNAkJLyogTnVtYmVyIHVzZWQgKi8KKyNkZWZpbmUgRFRfTE9PUwkJMHg2MDAwMDAwZAkvKiBTdGFydCBvZiBPUy1zcGVjaWZpYyAqLworI2RlZmluZSBEVF9ISU9TCQkweDZmZmZmMDAwCS8qIEVuZCBvZiBPUy1zcGVjaWZpYyAqLworI2RlZmluZSBEVF9MT1BST0MJMHg3MDAwMDAwMAkvKiBTdGFydCBvZiBwcm9jZXNzb3Itc3BlY2lmaWMgKi8KKyNkZWZpbmUgRFRfSElQUk9DCTB4N2ZmZmZmZmYJLyogRW5kIG9mIHByb2Nlc3Nvci1zcGVjaWZpYyAqLworI2RlZmluZQlEVF9QUk9DTlVNCURUX01JUFNfTlVNCS8qIE1vc3QgdXNlZCBieSBhbnkgcHJvY2Vzc29yICovCisKKy8qIERUXyogZW50cmllcyB3aGljaCBmYWxsIGJldHdlZW4gRFRfVkFMUk5HSEkgJiBEVF9WQUxSTkdMTyB1c2UgdGhlCisgICBEeW4uZF91bi5kX3ZhbCBmaWVsZCBvZiB0aGUgRWxmKl9EeW4gc3RydWN0dXJlLiAgVGhpcyBmb2xsb3dzIFN1bidzCisgICBhcHByb2FjaC4gICovCisjZGVmaW5lIERUX1ZBTFJOR0xPCTB4NmZmZmZkMDAKKyNkZWZpbmUgRFRfR05VX1BSRUxJTktFRCAweDZmZmZmZGY1CS8qIFByZWxpbmtpbmcgdGltZXN0YW1wICovCisjZGVmaW5lIERUX0dOVV9DT05GTElDVFNaIDB4NmZmZmZkZjYJLyogU2l6ZSBvZiBjb25mbGljdCBzZWN0aW9uICovCisjZGVmaW5lIERUX0dOVV9MSUJMSVNUU1ogMHg2ZmZmZmRmNwkvKiBTaXplIG9mIGxpYnJhcnkgbGlzdCAqLworI2RlZmluZSBEVF9DSEVDS1NVTQkweDZmZmZmZGY4CisjZGVmaW5lIERUX1BMVFBBRFNaCTB4NmZmZmZkZjkKKyNkZWZpbmUgRFRfTU9WRUVOVAkweDZmZmZmZGZhCisjZGVmaW5lIERUX01PVkVTWgkweDZmZmZmZGZiCisjZGVmaW5lIERUX0ZFQVRVUkVfMQkweDZmZmZmZGZjCS8qIEZlYXR1cmUgc2VsZWN0aW9uIChEVEZfKikuICAqLworI2RlZmluZSBEVF9QT1NGTEFHXzEJMHg2ZmZmZmRmZAkvKiBGbGFncyBmb3IgRFRfKiBlbnRyaWVzLCBlZmZlY3RpbmcKKwkJCQkJICAgdGhlIGZvbGxvd2luZyBEVF8qIGVudHJ5LiAgKi8KKyNkZWZpbmUgRFRfU1lNSU5TWgkweDZmZmZmZGZlCS8qIFNpemUgb2Ygc3ltaW5mbyB0YWJsZSAoaW4gYnl0ZXMpICovCisjZGVmaW5lIERUX1NZTUlORU5UCTB4NmZmZmZkZmYJLyogRW50cnkgc2l6ZSBvZiBzeW1pbmZvICovCisjZGVmaW5lIERUX1ZBTFJOR0hJCTB4NmZmZmZkZmYKKyNkZWZpbmUgRFRfVkFMVEFHSURYKHRhZykJKERUX1ZBTFJOR0hJIC0gKHRhZykpCS8qIFJldmVyc2Ugb3JkZXIhICovCisjZGVmaW5lIERUX1ZBTE5VTSAxMgorCisvKiBEVF8qIGVudHJpZXMgd2hpY2ggZmFsbCBiZXR3ZWVuIERUX0FERFJSTkdISSAmIERUX0FERFJSTkdMTyB1c2UgdGhlCisgICBEeW4uZF91bi5kX3B0ciBmaWVsZCBvZiB0aGUgRWxmKl9EeW4gc3RydWN0dXJlLgorCisgICBJZiBhbnkgYWRqdXN0bWVudCBpcyBtYWRlIHRvIHRoZSBFTEYgb2JqZWN0IGFmdGVyIGl0IGhhcyBiZWVuCisgICBidWlsdCB0aGVzZSBlbnRyaWVzIHdpbGwgbmVlZCB0byBiZSBhZGp1c3RlZC4gICovCisjZGVmaW5lIERUX0FERFJSTkdMTwkweDZmZmZmZTAwCisjZGVmaW5lIERUX0dOVV9IQVNICTB4NmZmZmZlZjUJLyogR05VLXN0eWxlIGhhc2ggdGFibGUuICAqLworI2RlZmluZSBEVF9UTFNERVNDX1BMVAkweDZmZmZmZWY2CisjZGVmaW5lIERUX1RMU0RFU0NfR09UCTB4NmZmZmZlZjcKKyNkZWZpbmUgRFRfR05VX0NPTkZMSUNUCTB4NmZmZmZlZjgJLyogU3RhcnQgb2YgY29uZmxpY3Qgc2VjdGlvbiAqLworI2RlZmluZSBEVF9HTlVfTElCTElTVAkweDZmZmZmZWY5CS8qIExpYnJhcnkgbGlzdCAqLworI2RlZmluZSBEVF9DT05GSUcJMHg2ZmZmZmVmYQkvKiBDb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLiAgKi8KKyNkZWZpbmUgRFRfREVQQVVESVQJMHg2ZmZmZmVmYgkvKiBEZXBlbmRlbmN5IGF1ZGl0aW5nLiAgKi8KKyNkZWZpbmUgRFRfQVVESVQJMHg2ZmZmZmVmYwkvKiBPYmplY3QgYXVkaXRpbmcuICAqLworI2RlZmluZQlEVF9QTFRQQUQJMHg2ZmZmZmVmZAkvKiBQTFQgcGFkZGluZy4gICovCisjZGVmaW5lCURUX01PVkVUQUIJMHg2ZmZmZmVmZQkvKiBNb3ZlIHRhYmxlLiAgKi8KKyNkZWZpbmUgRFRfU1lNSU5GTwkweDZmZmZmZWZmCS8qIFN5bWluZm8gdGFibGUuICAqLworI2RlZmluZSBEVF9BRERSUk5HSEkJMHg2ZmZmZmVmZgorI2RlZmluZSBEVF9BRERSVEFHSURYKHRhZykJKERUX0FERFJSTkdISSAtICh0YWcpKQkvKiBSZXZlcnNlIG9yZGVyISAqLworI2RlZmluZSBEVF9BRERSTlVNIDExCisKKy8qIFRoZSB2ZXJzaW9uaW5nIGVudHJ5IHR5cGVzLiAgVGhlIG5leHQgYXJlIGRlZmluZWQgYXMgcGFydCBvZiB0aGUKKyAgIEdOVSBleHRlbnNpb24uICAqLworI2RlZmluZSBEVF9WRVJTWU0JMHg2ZmZmZmZmMAorCisjZGVmaW5lIERUX1JFTEFDT1VOVAkweDZmZmZmZmY5CisjZGVmaW5lIERUX1JFTENPVU5UCTB4NmZmZmZmZmEKKworLyogVGhlc2Ugd2VyZSBjaG9zZW4gYnkgU3VuLiAgKi8KKyNkZWZpbmUgRFRfRkxBR1NfMQkweDZmZmZmZmZiCS8qIFN0YXRlIGZsYWdzLCBzZWUgREZfMV8qIGJlbG93LiAgKi8KKyNkZWZpbmUJRFRfVkVSREVGCTB4NmZmZmZmZmMJLyogQWRkcmVzcyBvZiB2ZXJzaW9uIGRlZmluaXRpb24KKwkJCQkJICAgdGFibGUgKi8KKyNkZWZpbmUJRFRfVkVSREVGTlVNCTB4NmZmZmZmZmQJLyogTnVtYmVyIG9mIHZlcnNpb24gZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUJRFRfVkVSTkVFRAkweDZmZmZmZmZlCS8qIEFkZHJlc3Mgb2YgdGFibGUgd2l0aCBuZWVkZWQKKwkJCQkJICAgdmVyc2lvbnMgKi8KKyNkZWZpbmUJRFRfVkVSTkVFRE5VTQkweDZmZmZmZmZmCS8qIE51bWJlciBvZiBuZWVkZWQgdmVyc2lvbnMgKi8KKyNkZWZpbmUgRFRfVkVSU0lPTlRBR0lEWCh0YWcpCShEVF9WRVJORUVETlVNIC0gKHRhZykpCS8qIFJldmVyc2Ugb3JkZXIhICovCisjZGVmaW5lIERUX1ZFUlNJT05UQUdOVU0gMTYKKworLyogU3VuIGFkZGVkIHRoZXNlIG1hY2hpbmUtaW5kZXBlbmRlbnQgZXh0ZW5zaW9ucyBpbiB0aGUgInByb2Nlc3Nvci1zcGVjaWZpYyIKKyAgIHJhbmdlLiAgQmUgY29tcGF0aWJsZS4gICovCisjZGVmaW5lIERUX0FVWElMSUFSWSAgICAweDdmZmZmZmZkICAgICAgLyogU2hhcmVkIG9iamVjdCB0byBsb2FkIGJlZm9yZSBzZWxmICovCisjZGVmaW5lIERUX0ZJTFRFUiAgICAgICAweDdmZmZmZmZmICAgICAgLyogU2hhcmVkIG9iamVjdCB0byBnZXQgdmFsdWVzIGZyb20gKi8KKyNkZWZpbmUgRFRfRVhUUkFUQUdJRFgodGFnKQkoKEVsZjMyX1dvcmQpLSgoRWxmMzJfU3dvcmQpICh0YWcpIDw8MT4+MSktMSkKKyNkZWZpbmUgRFRfRVhUUkFOVU0JMworCisvKiBWYWx1ZXMgb2YgYGRfdW4uZF92YWwnIGluIHRoZSBEVF9GTEFHUyBlbnRyeS4gICovCisjZGVmaW5lIERGX09SSUdJTgkweDAwMDAwMDAxCS8qIE9iamVjdCBtYXkgdXNlIERGX09SSUdJTiAqLworI2RlZmluZSBERl9TWU1CT0xJQwkweDAwMDAwMDAyCS8qIFN5bWJvbCByZXNvbHV0aW9ucyBzdGFydHMgaGVyZSAqLworI2RlZmluZSBERl9URVhUUkVMCTB4MDAwMDAwMDQJLyogT2JqZWN0IGNvbnRhaW5zIHRleHQgcmVsb2NhdGlvbnMgKi8KKyNkZWZpbmUgREZfQklORF9OT1cJMHgwMDAwMDAwOAkvKiBObyBsYXp5IGJpbmRpbmcgZm9yIHRoaXMgb2JqZWN0ICovCisjZGVmaW5lIERGX1NUQVRJQ19UTFMJMHgwMDAwMDAxMAkvKiBNb2R1bGUgdXNlcyB0aGUgc3RhdGljIFRMUyBtb2RlbCAqLworCisvKiBTdGF0ZSBmbGFncyBzZWxlY3RhYmxlIGluIHRoZSBgZF91bi5kX3ZhbCcgZWxlbWVudCBvZiB0aGUgRFRfRkxBR1NfMQorICAgZW50cnkgaW4gdGhlIGR5bmFtaWMgc2VjdGlvbi4gICovCisjZGVmaW5lIERGXzFfTk9XCTB4MDAwMDAwMDEJLyogU2V0IFJUTERfTk9XIGZvciB0aGlzIG9iamVjdC4gICovCisjZGVmaW5lIERGXzFfR0xPQkFMCTB4MDAwMDAwMDIJLyogU2V0IFJUTERfR0xPQkFMIGZvciB0aGlzIG9iamVjdC4gICovCisjZGVmaW5lIERGXzFfR1JPVVAJMHgwMDAwMDAwNAkvKiBTZXQgUlRMRF9HUk9VUCBmb3IgdGhpcyBvYmplY3QuICAqLworI2RlZmluZSBERl8xX05PREVMRVRFCTB4MDAwMDAwMDgJLyogU2V0IFJUTERfTk9ERUxFVEUgZm9yIHRoaXMgb2JqZWN0LiovCisjZGVmaW5lIERGXzFfTE9BREZMVFIJMHgwMDAwMDAxMAkvKiBUcmlnZ2VyIGZpbHRlZSBsb2FkaW5nIGF0IHJ1bnRpbWUuKi8KKyNkZWZpbmUgREZfMV9JTklURklSU1QJMHgwMDAwMDAyMAkvKiBTZXQgUlRMRF9JTklURklSU1QgZm9yIHRoaXMgb2JqZWN0Ki8KKyNkZWZpbmUgREZfMV9OT09QRU4JMHgwMDAwMDA0MAkvKiBTZXQgUlRMRF9OT09QRU4gZm9yIHRoaXMgb2JqZWN0LiAgKi8KKyNkZWZpbmUgREZfMV9PUklHSU4JMHgwMDAwMDA4MAkvKiAkT1JJR0lOIG11c3QgYmUgaGFuZGxlZC4gICovCisjZGVmaW5lIERGXzFfRElSRUNUCTB4MDAwMDAxMDAJLyogRGlyZWN0IGJpbmRpbmcgZW5hYmxlZC4gICovCisjZGVmaW5lIERGXzFfVFJBTlMJMHgwMDAwMDIwMAorI2RlZmluZSBERl8xX0lOVEVSUE9TRQkweDAwMDAwNDAwCS8qIE9iamVjdCBpcyB1c2VkIHRvIGludGVycG9zZS4gICovCisjZGVmaW5lIERGXzFfTk9ERUZMSUIJMHgwMDAwMDgwMAkvKiBJZ25vcmUgZGVmYXVsdCBsaWIgc2VhcmNoIHBhdGguICAqLworI2RlZmluZSBERl8xX05PRFVNUAkweDAwMDAxMDAwCS8qIE9iamVjdCBjYW4ndCBiZSBkbGR1bXAnZWQuICAqLworI2RlZmluZSBERl8xX0NPTkZBTFQJMHgwMDAwMjAwMAkvKiBDb25maWd1cmF0aW9uIGFsdGVybmF0aXZlIGNyZWF0ZWQuKi8KKyNkZWZpbmUgREZfMV9FTkRGSUxURUUJMHgwMDAwNDAwMAkvKiBGaWx0ZWUgdGVybWluYXRlcyBmaWx0ZXJzIHNlYXJjaC4gKi8KKyNkZWZpbmUJREZfMV9ESVNQUkVMRE5FCTB4MDAwMDgwMDAJLyogRGlzcCByZWxvYyBhcHBsaWVkIGF0IGJ1aWxkIHRpbWUuICovCisjZGVmaW5lCURGXzFfRElTUFJFTFBORAkweDAwMDEwMDAwCS8qIERpc3AgcmVsb2MgYXBwbGllZCBhdCBydW4tdGltZS4gICovCisKKy8qIEZsYWdzIGZvciB0aGUgZmVhdHVyZSBzZWxlY3Rpb24gaW4gRFRfRkVBVFVSRV8xLiAgKi8KKyNkZWZpbmUgRFRGXzFfUEFSSU5JVAkweDAwMDAwMDAxCisjZGVmaW5lIERURl8xX0NPTkZFWFAJMHgwMDAwMDAwMgorCisvKiBGbGFncyBpbiB0aGUgRFRfUE9TRkxBR18xIGVudHJ5IGVmZmVjdGluZyBvbmx5IHRoZSBuZXh0IERUXyogZW50cnkuICAqLworI2RlZmluZSBERl9QMV9MQVpZTE9BRAkweDAwMDAwMDAxCS8qIExhenlsb2FkIGZvbGxvd2luZyBvYmplY3QuICAqLworI2RlZmluZSBERl9QMV9HUk9VUFBFUk0JMHgwMDAwMDAwMgkvKiBTeW1ib2xzIGZyb20gbmV4dCBvYmplY3QgYXJlIG5vdAorCQkJCQkgICBnZW5lcmFsbHkgYXZhaWxhYmxlLiAgKi8KKworLyogVmVyc2lvbiBkZWZpbml0aW9uIHNlY3Rpb25zLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgRWxmMzJfSGFsZgl2ZF92ZXJzaW9uOwkJLyogVmVyc2lvbiByZXZpc2lvbiAqLworICBFbGYzMl9IYWxmCXZkX2ZsYWdzOwkJLyogVmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICBFbGYzMl9IYWxmCXZkX25keDsJCQkvKiBWZXJzaW9uIEluZGV4ICovCisgIEVsZjMyX0hhbGYJdmRfY250OwkJCS8qIE51bWJlciBvZiBhc3NvY2lhdGVkIGF1eCBlbnRyaWVzICovCisgIEVsZjMyX1dvcmQJdmRfaGFzaDsJCS8qIFZlcnNpb24gbmFtZSBoYXNoIHZhbHVlICovCisgIEVsZjMyX1dvcmQJdmRfYXV4OwkJCS8qIE9mZnNldCBpbiBieXRlcyB0byB2ZXJkYXV4IGFycmF5ICovCisgIEVsZjMyX1dvcmQJdmRfbmV4dDsJCS8qIE9mZnNldCBpbiBieXRlcyB0byBuZXh0IHZlcmRlZgorCQkJCQkgICBlbnRyeSAqLworfSBFbGYzMl9WZXJkZWY7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEVsZjY0X0hhbGYJdmRfdmVyc2lvbjsJCS8qIFZlcnNpb24gcmV2aXNpb24gKi8KKyAgRWxmNjRfSGFsZgl2ZF9mbGFnczsJCS8qIFZlcnNpb24gaW5mb3JtYXRpb24gKi8KKyAgRWxmNjRfSGFsZgl2ZF9uZHg7CQkJLyogVmVyc2lvbiBJbmRleCAqLworICBFbGY2NF9IYWxmCXZkX2NudDsJCQkvKiBOdW1iZXIgb2YgYXNzb2NpYXRlZCBhdXggZW50cmllcyAqLworICBFbGY2NF9Xb3JkCXZkX2hhc2g7CQkvKiBWZXJzaW9uIG5hbWUgaGFzaCB2YWx1ZSAqLworICBFbGY2NF9Xb3JkCXZkX2F1eDsJCQkvKiBPZmZzZXQgaW4gYnl0ZXMgdG8gdmVyZGF1eCBhcnJheSAqLworICBFbGY2NF9Xb3JkCXZkX25leHQ7CQkvKiBPZmZzZXQgaW4gYnl0ZXMgdG8gbmV4dCB2ZXJkZWYKKwkJCQkJICAgZW50cnkgKi8KK30gRWxmNjRfVmVyZGVmOworCisKKy8qIExlZ2FsIHZhbHVlcyBmb3IgdmRfdmVyc2lvbiAodmVyc2lvbiByZXZpc2lvbikuICAqLworI2RlZmluZSBWRVJfREVGX05PTkUJMAkJLyogTm8gdmVyc2lvbiAqLworI2RlZmluZSBWRVJfREVGX0NVUlJFTlQJMQkJLyogQ3VycmVudCB2ZXJzaW9uICovCisjZGVmaW5lIFZFUl9ERUZfTlVNCTIJCS8qIEdpdmVuIHZlcnNpb24gbnVtYmVyICovCisKKy8qIExlZ2FsIHZhbHVlcyBmb3IgdmRfZmxhZ3MgKHZlcnNpb24gaW5mb3JtYXRpb24gZmxhZ3MpLiAgKi8KKyNkZWZpbmUgVkVSX0ZMR19CQVNFCTB4MQkJLyogVmVyc2lvbiBkZWZpbml0aW9uIG9mIGZpbGUgaXRzZWxmICovCisjZGVmaW5lIFZFUl9GTEdfV0VBSwkweDIJCS8qIFdlYWsgdmVyc2lvbiBpZGVudGlmaWVyICovCisKKy8qIFZlcnN5bSBzeW1ib2wgaW5kZXggdmFsdWVzLiAgKi8KKyNkZWZpbmUJVkVSX05EWF9MT0NBTAkJMAkvKiBTeW1ib2wgaXMgbG9jYWwuICAqLworI2RlZmluZQlWRVJfTkRYX0dMT0JBTAkJMQkvKiBTeW1ib2wgaXMgZ2xvYmFsLiAgKi8KKyNkZWZpbmUJVkVSX05EWF9MT1JFU0VSVkUJMHhmZjAwCS8qIEJlZ2lubmluZyBvZiByZXNlcnZlZCBlbnRyaWVzLiAgKi8KKyNkZWZpbmUJVkVSX05EWF9FTElNSU5BVEUJMHhmZjAxCS8qIFN5bWJvbCBpcyB0byBiZSBlbGltaW5hdGVkLiAgKi8KKworLyogQXV4aWFsaWFyeSB2ZXJzaW9uIGluZm9ybWF0aW9uLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgRWxmMzJfV29yZAl2ZGFfbmFtZTsJCS8qIFZlcnNpb24gb3IgZGVwZW5kZW5jeSBuYW1lcyAqLworICBFbGYzMl9Xb3JkCXZkYV9uZXh0OwkJLyogT2Zmc2V0IGluIGJ5dGVzIHRvIG5leHQgdmVyZGF1eAorCQkJCQkgICBlbnRyeSAqLworfSBFbGYzMl9WZXJkYXV4OworCit0eXBlZGVmIHN0cnVjdAoreworICBFbGY2NF9Xb3JkCXZkYV9uYW1lOwkJLyogVmVyc2lvbiBvciBkZXBlbmRlbmN5IG5hbWVzICovCisgIEVsZjY0X1dvcmQJdmRhX25leHQ7CQkvKiBPZmZzZXQgaW4gYnl0ZXMgdG8gbmV4dCB2ZXJkYXV4CisJCQkJCSAgIGVudHJ5ICovCit9IEVsZjY0X1ZlcmRhdXg7CisKKworLyogVmVyc2lvbiBkZXBlbmRlbmN5IHNlY3Rpb24uICAqLworCit0eXBlZGVmIHN0cnVjdAoreworICBFbGYzMl9IYWxmCXZuX3ZlcnNpb247CQkvKiBWZXJzaW9uIG9mIHN0cnVjdHVyZSAqLworICBFbGYzMl9IYWxmCXZuX2NudDsJCQkvKiBOdW1iZXIgb2YgYXNzb2NpYXRlZCBhdXggZW50cmllcyAqLworICBFbGYzMl9Xb3JkCXZuX2ZpbGU7CQkvKiBPZmZzZXQgb2YgZmlsZW5hbWUgZm9yIHRoaXMKKwkJCQkJICAgZGVwZW5kZW5jeSAqLworICBFbGYzMl9Xb3JkCXZuX2F1eDsJCQkvKiBPZmZzZXQgaW4gYnl0ZXMgdG8gdmVybmF1eCBhcnJheSAqLworICBFbGYzMl9Xb3JkCXZuX25leHQ7CQkvKiBPZmZzZXQgaW4gYnl0ZXMgdG8gbmV4dCB2ZXJuZWVkCisJCQkJCSAgIGVudHJ5ICovCit9IEVsZjMyX1Zlcm5lZWQ7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEVsZjY0X0hhbGYJdm5fdmVyc2lvbjsJCS8qIFZlcnNpb24gb2Ygc3RydWN0dXJlICovCisgIEVsZjY0X0hhbGYJdm5fY250OwkJCS8qIE51bWJlciBvZiBhc3NvY2lhdGVkIGF1eCBlbnRyaWVzICovCisgIEVsZjY0X1dvcmQJdm5fZmlsZTsJCS8qIE9mZnNldCBvZiBmaWxlbmFtZSBmb3IgdGhpcworCQkJCQkgICBkZXBlbmRlbmN5ICovCisgIEVsZjY0X1dvcmQJdm5fYXV4OwkJCS8qIE9mZnNldCBpbiBieXRlcyB0byB2ZXJuYXV4IGFycmF5ICovCisgIEVsZjY0X1dvcmQJdm5fbmV4dDsJCS8qIE9mZnNldCBpbiBieXRlcyB0byBuZXh0IHZlcm5lZWQKKwkJCQkJICAgZW50cnkgKi8KK30gRWxmNjRfVmVybmVlZDsKKworCisvKiBMZWdhbCB2YWx1ZXMgZm9yIHZuX3ZlcnNpb24gKHZlcnNpb24gcmV2aXNpb24pLiAgKi8KKyNkZWZpbmUgVkVSX05FRURfTk9ORQkgMAkJLyogTm8gdmVyc2lvbiAqLworI2RlZmluZSBWRVJfTkVFRF9DVVJSRU5UIDEJCS8qIEN1cnJlbnQgdmVyc2lvbiAqLworI2RlZmluZSBWRVJfTkVFRF9OVU0JIDIJCS8qIEdpdmVuIHZlcnNpb24gbnVtYmVyICovCisKKy8qIEF1eGlsaWFyeSBuZWVkZWQgdmVyc2lvbiBpbmZvcm1hdGlvbi4gICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEVsZjMyX1dvcmQJdm5hX2hhc2g7CQkvKiBIYXNoIHZhbHVlIG9mIGRlcGVuZGVuY3kgbmFtZSAqLworICBFbGYzMl9IYWxmCXZuYV9mbGFnczsJCS8qIERlcGVuZGVuY3kgc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KKyAgRWxmMzJfSGFsZgl2bmFfb3RoZXI7CQkvKiBVbnVzZWQgKi8KKyAgRWxmMzJfV29yZAl2bmFfbmFtZTsJCS8qIERlcGVuZGVuY3kgbmFtZSBzdHJpbmcgb2Zmc2V0ICovCisgIEVsZjMyX1dvcmQJdm5hX25leHQ7CQkvKiBPZmZzZXQgaW4gYnl0ZXMgdG8gbmV4dCB2ZXJuYXV4CisJCQkJCSAgIGVudHJ5ICovCit9IEVsZjMyX1Zlcm5hdXg7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEVsZjY0X1dvcmQJdm5hX2hhc2g7CQkvKiBIYXNoIHZhbHVlIG9mIGRlcGVuZGVuY3kgbmFtZSAqLworICBFbGY2NF9IYWxmCXZuYV9mbGFnczsJCS8qIERlcGVuZGVuY3kgc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KKyAgRWxmNjRfSGFsZgl2bmFfb3RoZXI7CQkvKiBVbnVzZWQgKi8KKyAgRWxmNjRfV29yZAl2bmFfbmFtZTsJCS8qIERlcGVuZGVuY3kgbmFtZSBzdHJpbmcgb2Zmc2V0ICovCisgIEVsZjY0X1dvcmQJdm5hX25leHQ7CQkvKiBPZmZzZXQgaW4gYnl0ZXMgdG8gbmV4dCB2ZXJuYXV4CisJCQkJCSAgIGVudHJ5ICovCit9IEVsZjY0X1Zlcm5hdXg7CisKKworLyogTGVnYWwgdmFsdWVzIGZvciB2bmFfZmxhZ3MuICAqLworI2RlZmluZSBWRVJfRkxHX1dFQUsJMHgyCQkvKiBXZWFrIHZlcnNpb24gaWRlbnRpZmllciAqLworCisKKy8qIEF1eGlsaWFyeSB2ZWN0b3IuICAqLworCisvKiBUaGlzIHZlY3RvciBpcyBub3JtYWxseSBvbmx5IHVzZWQgYnkgdGhlIHByb2dyYW0gaW50ZXJwcmV0ZXIuICBUaGUKKyAgIHVzdWFsIGRlZmluaXRpb24gaW4gYW4gQUJJIHN1cHBsZW1lbnQgdXNlcyB0aGUgbmFtZSBhdXh2X3QuICBUaGUKKyAgIHZlY3RvciBpcyBub3QgdXN1YWxseSBkZWZpbmVkIGluIGEgc3RhbmRhcmQgPGVsZi5oPiBmaWxlLCBidXQgaXQKKyAgIGNhbid0IGh1cnQuICBXZSByZW5hbWUgaXQgdG8gYXZvaWQgY29uZmxpY3RzLiAgVGhlIHNpemVzIG9mIHRoZXNlCisgICB0eXBlcyBhcmUgYW4gYXJyYW5nZW1lbnQgYmV0d2VlbiB0aGUgZXhlYyBzZXJ2ZXIgYW5kIHRoZSBwcm9ncmFtCisgICBpbnRlcnByZXRlciwgc28gd2UgZG9uJ3QgZnVsbHkgc3BlY2lmeSB0aGVtIGhlcmUuICAqLworCit0eXBlZGVmIHN0cnVjdAoreworICB1aW50MzJfdCBhX3R5cGU7CQkvKiBFbnRyeSB0eXBlICovCisgIHVuaW9uCisgICAgeworICAgICAgdWludDMyX3QgYV92YWw7CQkvKiBJbnRlZ2VyIHZhbHVlICovCisgICAgICAvKiBXZSB1c2UgdG8gaGF2ZSBwb2ludGVyIGVsZW1lbnRzIGFkZGVkIGhlcmUuICBXZSBjYW5ub3QgZG8gdGhhdCwKKwkgdGhvdWdoLCBzaW5jZSBpdCBkb2VzIG5vdCB3b3JrIHdoZW4gdXNpbmcgMzItYml0IGRlZmluaXRpb25zCisJIG9uIDY0LWJpdCBwbGF0Zm9ybXMgYW5kIHZpY2UgdmVyc2EuICAqLworICAgIH0gYV91bjsKK30gRWxmMzJfYXV4dl90OworCit0eXBlZGVmIHN0cnVjdAoreworICB1aW50NjRfdCBhX3R5cGU7CQkvKiBFbnRyeSB0eXBlICovCisgIHVuaW9uCisgICAgeworICAgICAgdWludDY0X3QgYV92YWw7CQkvKiBJbnRlZ2VyIHZhbHVlICovCisgICAgICAvKiBXZSB1c2UgdG8gaGF2ZSBwb2ludGVyIGVsZW1lbnRzIGFkZGVkIGhlcmUuICBXZSBjYW5ub3QgZG8gdGhhdCwKKwkgdGhvdWdoLCBzaW5jZSBpdCBkb2VzIG5vdCB3b3JrIHdoZW4gdXNpbmcgMzItYml0IGRlZmluaXRpb25zCisJIG9uIDY0LWJpdCBwbGF0Zm9ybXMgYW5kIHZpY2UgdmVyc2EuICAqLworICAgIH0gYV91bjsKK30gRWxmNjRfYXV4dl90OworCisvKiBMZWdhbCB2YWx1ZXMgZm9yIGFfdHlwZSAoZW50cnkgdHlwZSkuICAqLworCisjZGVmaW5lIEFUX05VTEwJCTAJCS8qIEVuZCBvZiB2ZWN0b3IgKi8KKyNkZWZpbmUgQVRfSUdOT1JFCTEJCS8qIEVudHJ5IHNob3VsZCBiZSBpZ25vcmVkICovCisjZGVmaW5lIEFUX0VYRUNGRAkyCQkvKiBGaWxlIGRlc2NyaXB0b3Igb2YgcHJvZ3JhbSAqLworI2RlZmluZSBBVF9QSERSCQkzCQkvKiBQcm9ncmFtIGhlYWRlcnMgZm9yIHByb2dyYW0gKi8KKyNkZWZpbmUgQVRfUEhFTlQJNAkJLyogU2l6ZSBvZiBwcm9ncmFtIGhlYWRlciBlbnRyeSAqLworI2RlZmluZSBBVF9QSE5VTQk1CQkvKiBOdW1iZXIgb2YgcHJvZ3JhbSBoZWFkZXJzICovCisjZGVmaW5lIEFUX1BBR0VTWgk2CQkvKiBTeXN0ZW0gcGFnZSBzaXplICovCisjZGVmaW5lIEFUX0JBU0UJCTcJCS8qIEJhc2UgYWRkcmVzcyBvZiBpbnRlcnByZXRlciAqLworI2RlZmluZSBBVF9GTEFHUwk4CQkvKiBGbGFncyAqLworI2RlZmluZSBBVF9FTlRSWQk5CQkvKiBFbnRyeSBwb2ludCBvZiBwcm9ncmFtICovCisjZGVmaW5lIEFUX05PVEVMRgkxMAkJLyogUHJvZ3JhbSBpcyBub3QgRUxGICovCisjZGVmaW5lIEFUX1VJRAkJMTEJCS8qIFJlYWwgdWlkICovCisjZGVmaW5lIEFUX0VVSUQJCTEyCQkvKiBFZmZlY3RpdmUgdWlkICovCisjZGVmaW5lIEFUX0dJRAkJMTMJCS8qIFJlYWwgZ2lkICovCisjZGVmaW5lIEFUX0VHSUQJCTE0CQkvKiBFZmZlY3RpdmUgZ2lkICovCisjZGVmaW5lIEFUX0NMS1RDSwkxNwkJLyogRnJlcXVlbmN5IG9mIHRpbWVzKCkgKi8KKworLyogU29tZSBtb3JlIHNwZWNpYWwgYV90eXBlIHZhbHVlcyBkZXNjcmliaW5nIHRoZSBoYXJkd2FyZS4gICovCisjZGVmaW5lIEFUX1BMQVRGT1JNCTE1CQkvKiBTdHJpbmcgaWRlbnRpZnlpbmcgcGxhdGZvcm0uICAqLworI2RlZmluZSBBVF9IV0NBUAkxNgkJLyogTWFjaGluZSBkZXBlbmRlbnQgaGludHMgYWJvdXQKKwkJCQkJICAgcHJvY2Vzc29yIGNhcGFiaWxpdGllcy4gICovCisKKy8qIFRoaXMgZW50cnkgZ2l2ZXMgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgRlBVIGluaXRpYWxpemF0aW9uCisgICBwZXJmb3JtZWQgYnkgdGhlIGtlcm5lbC4gICovCisjZGVmaW5lIEFUX0ZQVUNXCTE4CQkvKiBVc2VkIEZQVSBjb250cm9sIHdvcmQuICAqLworCisvKiBDYWNoZSBibG9jayBzaXplcy4gICovCisjZGVmaW5lIEFUX0RDQUNIRUJTSVpFCTE5CQkvKiBEYXRhIGNhY2hlIGJsb2NrIHNpemUuICAqLworI2RlZmluZSBBVF9JQ0FDSEVCU0laRQkyMAkJLyogSW5zdHJ1Y3Rpb24gY2FjaGUgYmxvY2sgc2l6ZS4gICovCisjZGVmaW5lIEFUX1VDQUNIRUJTSVpFCTIxCQkvKiBVbmlmaWVkIGNhY2hlIGJsb2NrIHNpemUuICAqLworCisvKiBBIHNwZWNpYWwgaWdub3JlZCB2YWx1ZSBmb3IgUFBDLCB1c2VkIGJ5IHRoZSBrZXJuZWwgdG8gY29udHJvbCB0aGUKKyAgIGludGVycHJldGF0aW9uIG9mIHRoZSBBVVhWLiBNdXN0IGJlID4gMTYuICAqLworI2RlZmluZSBBVF9JR05PUkVQUEMJMjIJCS8qIEVudHJ5IHNob3VsZCBiZSBpZ25vcmVkLiAgKi8KKworI2RlZmluZQlBVF9TRUNVUkUJMjMJCS8qIEJvb2xlYW4sIHdhcyBleGVjIHNldHVpZC1saWtlPyAgKi8KKworI2RlZmluZSBBVF9FWEVDRk4JMzEJCS8qIEZpbGVuYW1lIG9mIGV4ZWN1dGFibGUuICAqLworCisvKiBQb2ludGVyIHRvIHRoZSBnbG9iYWwgc3lzdGVtIHBhZ2UgdXNlZCBmb3Igc3lzdGVtIGNhbGxzIGFuZCBvdGhlcgorICAgbmljZSB0aGluZ3MuICAqLworI2RlZmluZSBBVF9TWVNJTkZPCTMyCisjZGVmaW5lIEFUX1NZU0lORk9fRUhEUgkzMworCisvKiBTaGFwZXMgb2YgdGhlIGNhY2hlcy4gIEJpdHMgMC0zIGNvbnRhaW5zIGFzc29jaWF0aXZpdHk7IGJpdHMgNC03IGNvbnRhaW5zCisgICBsb2cyIG9mIGxpbmUgc2l6ZTsgbWFzayB0aG9zZSB0byBnZXQgY2FjaGUgc2l6ZS4gICovCisjZGVmaW5lIEFUX0wxSV9DQUNIRVNIQVBFCTM0CisjZGVmaW5lIEFUX0wxRF9DQUNIRVNIQVBFCTM1CisjZGVmaW5lIEFUX0wyX0NBQ0hFU0hBUEUJMzYKKyNkZWZpbmUgQVRfTDNfQ0FDSEVTSEFQRQkzNworCisvKiBOb3RlIHNlY3Rpb24gY29udGVudHMuICBFYWNoIGVudHJ5IGluIHRoZSBub3RlIHNlY3Rpb24gYmVnaW5zIHdpdGgKKyAgIGEgaGVhZGVyIG9mIGEgZml4ZWQgZm9ybS4gICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEVsZjMyX1dvcmQgbl9uYW1lc3o7CQkJLyogTGVuZ3RoIG9mIHRoZSBub3RlJ3MgbmFtZS4gICovCisgIEVsZjMyX1dvcmQgbl9kZXNjc3o7CQkJLyogTGVuZ3RoIG9mIHRoZSBub3RlJ3MgZGVzY3JpcHRvci4gICovCisgIEVsZjMyX1dvcmQgbl90eXBlOwkJCS8qIFR5cGUgb2YgdGhlIG5vdGUuICAqLworfSBFbGYzMl9OaGRyOworCit0eXBlZGVmIHN0cnVjdAoreworICBFbGY2NF9Xb3JkIG5fbmFtZXN6OwkJCS8qIExlbmd0aCBvZiB0aGUgbm90ZSdzIG5hbWUuICAqLworICBFbGY2NF9Xb3JkIG5fZGVzY3N6OwkJCS8qIExlbmd0aCBvZiB0aGUgbm90ZSdzIGRlc2NyaXB0b3IuICAqLworICBFbGY2NF9Xb3JkIG5fdHlwZTsJCQkvKiBUeXBlIG9mIHRoZSBub3RlLiAgKi8KK30gRWxmNjRfTmhkcjsKKworLyogS25vd24gbmFtZXMgb2Ygbm90ZXMuICAqLworCisvKiBTb2xhcmlzIGVudHJpZXMgaW4gdGhlIG5vdGUgc2VjdGlvbiBoYXZlIHRoaXMgbmFtZS4gICovCisjZGVmaW5lIEVMRl9OT1RFX1NPTEFSSVMJIlNVTlcgU29sYXJpcyIKKworLyogTm90ZSBlbnRyaWVzIGZvciBHTlUgc3lzdGVtcyBoYXZlIHRoaXMgbmFtZS4gICovCisjZGVmaW5lIEVMRl9OT1RFX0dOVQkJIkdOVSIKKworCisvKiBEZWZpbmVkIHR5cGVzIG9mIG5vdGVzIGZvciBTb2xhcmlzLiAgKi8KKworLyogVmFsdWUgb2YgZGVzY3JpcHRvciAob25lIHdvcmQpIGlzIGRlc2lyZWQgcGFnZXNpemUgZm9yIHRoZSBiaW5hcnkuICAqLworI2RlZmluZSBFTEZfTk9URV9QQUdFU0laRV9ISU5UCTEKKworCisvKiBEZWZpbmVkIG5vdGUgdHlwZXMgZm9yIEdOVSBzeXN0ZW1zLiAgKi8KKworLyogQUJJIGluZm9ybWF0aW9uLiAgVGhlIGRlc2NyaXB0b3IgY29uc2lzdHMgb2Ygd29yZHM6CisgICB3b3JkIDA6IE9TIGRlc2NyaXB0b3IKKyAgIHdvcmQgMTogbWFqb3IgdmVyc2lvbiBvZiB0aGUgQUJJCisgICB3b3JkIDI6IG1pbm9yIHZlcnNpb24gb2YgdGhlIEFCSQorICAgd29yZCAzOiBzdWJtaW5vciB2ZXJzaW9uIG9mIHRoZSBBQkkKKyovCisjZGVmaW5lIE5UX0dOVV9BQklfVEFHCTEKKyNkZWZpbmUgRUxGX05PVEVfQUJJCU5UX0dOVV9BQklfVEFHIC8qIE9sZCBuYW1lLiAgKi8KKworLyogS25vd24gT1Nlcy4gIFRoZXNlIHZhbHVlcyBjYW4gYXBwZWFyIGluIHdvcmQgMCBvZiBhbgorICAgTlRfR05VX0FCSV9UQUcgbm90ZSBzZWN0aW9uIGVudHJ5LiAgKi8KKyNkZWZpbmUgRUxGX05PVEVfT1NfTElOVVgJMAorI2RlZmluZSBFTEZfTk9URV9PU19HTlUJCTEKKyNkZWZpbmUgRUxGX05PVEVfT1NfU09MQVJJUzIJMgorI2RlZmluZSBFTEZfTk9URV9PU19GUkVFQlNECTMKKworLyogU3ludGhldGljIGh3Y2FwIGluZm9ybWF0aW9uLiAgVGhlIGRlc2NyaXB0b3IgYmVnaW5zIHdpdGggdHdvIHdvcmRzOgorICAgd29yZCAwOiBudW1iZXIgb2YgZW50cmllcworICAgd29yZCAxOiBiaXRtYXNrIG9mIGVuYWJsZWQgZW50cmllcworICAgVGhlbiBmb2xsb3cgdmFyaWFibGUtbGVuZ3RoIGVudHJpZXMsIG9uZSBieXRlIGZvbGxvd2VkIGJ5IGEKKyAgICdcMCctdGVybWluYXRlZCBod2NhcCBuYW1lIHN0cmluZy4gIFRoZSBieXRlIGdpdmVzIHRoZSBiaXQKKyAgIG51bWJlciB0byB0ZXN0IGlmIGVuYWJsZWQsICgxVSA8PCBiaXQpICYgYml0bWFzay4gICovCisjZGVmaW5lIE5UX0dOVV9IV0NBUAkyCisKKy8qIEJ1aWxkIElEIGJpdHMgYXMgZ2VuZXJhdGVkIGJ5IGxkIC0tYnVpbGQtaWQuCisgICBUaGUgZGVzY3JpcHRvciBjb25zaXN0cyBvZiBhbnkgbm9uemVybyBudW1iZXIgb2YgYnl0ZXMuICAqLworI2RlZmluZSBOVF9HTlVfQlVJTERfSUQJMworCisKKy8qIE1vdmUgcmVjb3Jkcy4gICovCit0eXBlZGVmIHN0cnVjdAoreworICBFbGYzMl9Yd29yZCBtX3ZhbHVlOwkJLyogU3ltYm9sIHZhbHVlLiAgKi8KKyAgRWxmMzJfV29yZCBtX2luZm87CQkvKiBTaXplIGFuZCBpbmRleC4gICovCisgIEVsZjMyX1dvcmQgbV9wb2Zmc2V0OwkJLyogU3ltYm9sIG9mZnNldC4gICovCisgIEVsZjMyX0hhbGYgbV9yZXBlYXQ7CQkvKiBSZXBlYXQgY291bnQuICAqLworICBFbGYzMl9IYWxmIG1fc3RyaWRlOwkJLyogU3RyaWRlIGluZm8uICAqLworfSBFbGYzMl9Nb3ZlOworCit0eXBlZGVmIHN0cnVjdAoreworICBFbGY2NF9Yd29yZCBtX3ZhbHVlOwkJLyogU3ltYm9sIHZhbHVlLiAgKi8KKyAgRWxmNjRfWHdvcmQgbV9pbmZvOwkJLyogU2l6ZSBhbmQgaW5kZXguICAqLworICBFbGY2NF9Yd29yZCBtX3BvZmZzZXQ7CS8qIFN5bWJvbCBvZmZzZXQuICAqLworICBFbGY2NF9IYWxmIG1fcmVwZWF0OwkJLyogUmVwZWF0IGNvdW50LiAgKi8KKyAgRWxmNjRfSGFsZiBtX3N0cmlkZTsJCS8qIFN0cmlkZSBpbmZvLiAgKi8KK30gRWxmNjRfTW92ZTsKKworLyogTWFjcm8gdG8gY29uc3RydWN0IG1vdmUgcmVjb3Jkcy4gICovCisjZGVmaW5lIEVMRjMyX01fU1lNKGluZm8pCSgoaW5mbykgPj4gOCkKKyNkZWZpbmUgRUxGMzJfTV9TSVpFKGluZm8pCSgodW5zaWduZWQgY2hhcikgKGluZm8pKQorI2RlZmluZSBFTEYzMl9NX0lORk8oc3ltLCBzaXplKQkoKChzeW0pIDw8IDgpICsgKHVuc2lnbmVkIGNoYXIpIChzaXplKSkKKworI2RlZmluZSBFTEY2NF9NX1NZTShpbmZvKQlFTEYzMl9NX1NZTSAoaW5mbykKKyNkZWZpbmUgRUxGNjRfTV9TSVpFKGluZm8pCUVMRjMyX01fU0laRSAoaW5mbykKKyNkZWZpbmUgRUxGNjRfTV9JTkZPKHN5bSwgc2l6ZSkJRUxGMzJfTV9JTkZPIChzeW0sIHNpemUpCisKKworLyogTW90b3JvbGEgNjhrIHNwZWNpZmljIGRlZmluaXRpb25zLiAgKi8KKworLyogVmFsdWVzIGZvciBFbGYzMl9FaGRyLmVfZmxhZ3MuICAqLworI2RlZmluZSBFRl9DUFUzMgkweDAwODEwMDAwCisKKy8qIG02OGsgcmVsb2NzLiAgKi8KKworI2RlZmluZSBSXzY4S19OT05FCTAJCS8qIE5vIHJlbG9jICovCisjZGVmaW5lIFJfNjhLXzMyCTEJCS8qIERpcmVjdCAzMiBiaXQgICovCisjZGVmaW5lIFJfNjhLXzE2CTIJCS8qIERpcmVjdCAxNiBiaXQgICovCisjZGVmaW5lIFJfNjhLXzgJCTMJCS8qIERpcmVjdCA4IGJpdCAgKi8KKyNkZWZpbmUgUl82OEtfUEMzMgk0CQkvKiBQQyByZWxhdGl2ZSAzMiBiaXQgKi8KKyNkZWZpbmUgUl82OEtfUEMxNgk1CQkvKiBQQyByZWxhdGl2ZSAxNiBiaXQgKi8KKyNkZWZpbmUgUl82OEtfUEM4CTYJCS8qIFBDIHJlbGF0aXZlIDggYml0ICovCisjZGVmaW5lIFJfNjhLX0dPVDMyCTcJCS8qIDMyIGJpdCBQQyByZWxhdGl2ZSBHT1QgZW50cnkgKi8KKyNkZWZpbmUgUl82OEtfR09UMTYJOAkJLyogMTYgYml0IFBDIHJlbGF0aXZlIEdPVCBlbnRyeSAqLworI2RlZmluZSBSXzY4S19HT1Q4CTkJCS8qIDggYml0IFBDIHJlbGF0aXZlIEdPVCBlbnRyeSAqLworI2RlZmluZSBSXzY4S19HT1QzMk8JMTAJCS8qIDMyIGJpdCBHT1Qgb2Zmc2V0ICovCisjZGVmaW5lIFJfNjhLX0dPVDE2TwkxMQkJLyogMTYgYml0IEdPVCBvZmZzZXQgKi8KKyNkZWZpbmUgUl82OEtfR09UOE8JMTIJCS8qIDggYml0IEdPVCBvZmZzZXQgKi8KKyNkZWZpbmUgUl82OEtfUExUMzIJMTMJCS8qIDMyIGJpdCBQQyByZWxhdGl2ZSBQTFQgYWRkcmVzcyAqLworI2RlZmluZSBSXzY4S19QTFQxNgkxNAkJLyogMTYgYml0IFBDIHJlbGF0aXZlIFBMVCBhZGRyZXNzICovCisjZGVmaW5lIFJfNjhLX1BMVDgJMTUJCS8qIDggYml0IFBDIHJlbGF0aXZlIFBMVCBhZGRyZXNzICovCisjZGVmaW5lIFJfNjhLX1BMVDMyTwkxNgkJLyogMzIgYml0IFBMVCBvZmZzZXQgKi8KKyNkZWZpbmUgUl82OEtfUExUMTZPCTE3CQkvKiAxNiBiaXQgUExUIG9mZnNldCAqLworI2RlZmluZSBSXzY4S19QTFQ4TwkxOAkJLyogOCBiaXQgUExUIG9mZnNldCAqLworI2RlZmluZSBSXzY4S19DT1BZCTE5CQkvKiBDb3B5IHN5bWJvbCBhdCBydW50aW1lICovCisjZGVmaW5lIFJfNjhLX0dMT0JfREFUCTIwCQkvKiBDcmVhdGUgR09UIGVudHJ5ICovCisjZGVmaW5lIFJfNjhLX0pNUF9TTE9UCTIxCQkvKiBDcmVhdGUgUExUIGVudHJ5ICovCisjZGVmaW5lIFJfNjhLX1JFTEFUSVZFCTIyCQkvKiBBZGp1c3QgYnkgcHJvZ3JhbSBiYXNlICovCisvKiBLZWVwIHRoaXMgdGhlIGxhc3QgZW50cnkuICAqLworI2RlZmluZSBSXzY4S19OVU0JMjMKKworLyogSW50ZWwgODAzODYgc3BlY2lmaWMgZGVmaW5pdGlvbnMuICAqLworCisvKiBpMzg2IHJlbG9jcy4gICovCisKKyNkZWZpbmUgUl8zODZfTk9ORQkgICAwCQkvKiBObyByZWxvYyAqLworI2RlZmluZSBSXzM4Nl8zMgkgICAxCQkvKiBEaXJlY3QgMzIgYml0ICAqLworI2RlZmluZSBSXzM4Nl9QQzMyCSAgIDIJCS8qIFBDIHJlbGF0aXZlIDMyIGJpdCAqLworI2RlZmluZSBSXzM4Nl9HT1QzMgkgICAzCQkvKiAzMiBiaXQgR09UIGVudHJ5ICovCisjZGVmaW5lIFJfMzg2X1BMVDMyCSAgIDQJCS8qIDMyIGJpdCBQTFQgYWRkcmVzcyAqLworI2RlZmluZSBSXzM4Nl9DT1BZCSAgIDUJCS8qIENvcHkgc3ltYm9sIGF0IHJ1bnRpbWUgKi8KKyNkZWZpbmUgUl8zODZfR0xPQl9EQVQJICAgNgkJLyogQ3JlYXRlIEdPVCBlbnRyeSAqLworI2RlZmluZSBSXzM4Nl9KTVBfU0xPVAkgICA3CQkvKiBDcmVhdGUgUExUIGVudHJ5ICovCisjZGVmaW5lIFJfMzg2X1JFTEFUSVZFCSAgIDgJCS8qIEFkanVzdCBieSBwcm9ncmFtIGJhc2UgKi8KKyNkZWZpbmUgUl8zODZfR09UT0ZGCSAgIDkJCS8qIDMyIGJpdCBvZmZzZXQgdG8gR09UICovCisjZGVmaW5lIFJfMzg2X0dPVFBDCSAgIDEwCQkvKiAzMiBiaXQgUEMgcmVsYXRpdmUgb2Zmc2V0IHRvIEdPVCAqLworI2RlZmluZSBSXzM4Nl8zMlBMVAkgICAxMQorI2RlZmluZSBSXzM4Nl9UTFNfVFBPRkYJICAgMTQJCS8qIE9mZnNldCBpbiBzdGF0aWMgVExTIGJsb2NrICovCisjZGVmaW5lIFJfMzg2X1RMU19JRQkgICAxNQkJLyogQWRkcmVzcyBvZiBHT1QgZW50cnkgZm9yIHN0YXRpYyBUTFMKKwkJCQkJICAgYmxvY2sgb2Zmc2V0ICovCisjZGVmaW5lIFJfMzg2X1RMU19HT1RJRQkgICAxNgkJLyogR09UIGVudHJ5IGZvciBzdGF0aWMgVExTIGJsb2NrCisJCQkJCSAgIG9mZnNldCAqLworI2RlZmluZSBSXzM4Nl9UTFNfTEUJICAgMTcJCS8qIE9mZnNldCByZWxhdGl2ZSB0byBzdGF0aWMgVExTCisJCQkJCSAgIGJsb2NrICovCisjZGVmaW5lIFJfMzg2X1RMU19HRAkgICAxOAkJLyogRGlyZWN0IDMyIGJpdCBmb3IgR05VIHZlcnNpb24gb2YKKwkJCQkJICAgZ2VuZXJhbCBkeW5hbWljIHRocmVhZCBsb2NhbCBkYXRhICovCisjZGVmaW5lIFJfMzg2X1RMU19MRE0JICAgMTkJCS8qIERpcmVjdCAzMiBiaXQgZm9yIEdOVSB2ZXJzaW9uIG9mCisJCQkJCSAgIGxvY2FsIGR5bmFtaWMgdGhyZWFkIGxvY2FsIGRhdGEKKwkJCQkJICAgaW4gTEUgY29kZSAqLworI2RlZmluZSBSXzM4Nl8xNgkgICAyMAorI2RlZmluZSBSXzM4Nl9QQzE2CSAgIDIxCisjZGVmaW5lIFJfMzg2XzgJCSAgIDIyCisjZGVmaW5lIFJfMzg2X1BDOAkgICAyMworI2RlZmluZSBSXzM4Nl9UTFNfR0RfMzIJICAgMjQJCS8qIERpcmVjdCAzMiBiaXQgZm9yIGdlbmVyYWwgZHluYW1pYworCQkJCQkgICB0aHJlYWQgbG9jYWwgZGF0YSAqLworI2RlZmluZSBSXzM4Nl9UTFNfR0RfUFVTSCAgMjUJCS8qIFRhZyBmb3IgcHVzaGwgaW4gR0QgVExTIGNvZGUgKi8KKyNkZWZpbmUgUl8zODZfVExTX0dEX0NBTEwgIDI2CQkvKiBSZWxvY2F0aW9uIGZvciBjYWxsIHRvCisJCQkJCSAgIF9fdGxzX2dldF9hZGRyKCkgKi8KKyNkZWZpbmUgUl8zODZfVExTX0dEX1BPUCAgIDI3CQkvKiBUYWcgZm9yIHBvcGwgaW4gR0QgVExTIGNvZGUgKi8KKyNkZWZpbmUgUl8zODZfVExTX0xETV8zMiAgIDI4CQkvKiBEaXJlY3QgMzIgYml0IGZvciBsb2NhbCBkeW5hbWljCisJCQkJCSAgIHRocmVhZCBsb2NhbCBkYXRhIGluIExFIGNvZGUgKi8KKyNkZWZpbmUgUl8zODZfVExTX0xETV9QVVNIIDI5CQkvKiBUYWcgZm9yIHB1c2hsIGluIExETSBUTFMgY29kZSAqLworI2RlZmluZSBSXzM4Nl9UTFNfTERNX0NBTEwgMzAJCS8qIFJlbG9jYXRpb24gZm9yIGNhbGwgdG8KKwkJCQkJICAgX190bHNfZ2V0X2FkZHIoKSBpbiBMRE0gY29kZSAqLworI2RlZmluZSBSXzM4Nl9UTFNfTERNX1BPUCAgMzEJCS8qIFRhZyBmb3IgcG9wbCBpbiBMRE0gVExTIGNvZGUgKi8KKyNkZWZpbmUgUl8zODZfVExTX0xET18zMiAgIDMyCQkvKiBPZmZzZXQgcmVsYXRpdmUgdG8gVExTIGJsb2NrICovCisjZGVmaW5lIFJfMzg2X1RMU19JRV8zMgkgICAzMwkJLyogR09UIGVudHJ5IGZvciBuZWdhdGVkIHN0YXRpYyBUTFMKKwkJCQkJICAgYmxvY2sgb2Zmc2V0ICovCisjZGVmaW5lIFJfMzg2X1RMU19MRV8zMgkgICAzNAkJLyogTmVnYXRlZCBvZmZzZXQgcmVsYXRpdmUgdG8gc3RhdGljCisJCQkJCSAgIFRMUyBibG9jayAqLworI2RlZmluZSBSXzM4Nl9UTFNfRFRQTU9EMzIgMzUJCS8qIElEIG9mIG1vZHVsZSBjb250YWluaW5nIHN5bWJvbCAqLworI2RlZmluZSBSXzM4Nl9UTFNfRFRQT0ZGMzIgMzYJCS8qIE9mZnNldCBpbiBUTFMgYmxvY2sgKi8KKyNkZWZpbmUgUl8zODZfVExTX1RQT0ZGMzIgIDM3CQkvKiBOZWdhdGVkIG9mZnNldCBpbiBzdGF0aWMgVExTIGJsb2NrICovCisvKiAzOD8gKi8KKyNkZWZpbmUgUl8zODZfVExTX0dPVERFU0MgIDM5CQkvKiBHT1Qgb2Zmc2V0IGZvciBUTFMgZGVzY3JpcHRvci4gICovCisjZGVmaW5lIFJfMzg2X1RMU19ERVNDX0NBTEwgNDAJCS8qIE1hcmtlciBvZiBjYWxsIHRocm91Z2ggVExTCisJCQkJCSAgIGRlc2NyaXB0b3IgZm9yCisJCQkJCSAgIHJlbGF4YXRpb24uICAqLworI2RlZmluZSBSXzM4Nl9UTFNfREVTQyAgICAgNDEJCS8qIFRMUyBkZXNjcmlwdG9yIGNvbnRhaW5pbmcKKwkJCQkJICAgcG9pbnRlciB0byBjb2RlIGFuZCB0bworCQkJCQkgICBhcmd1bWVudCwgcmV0dXJuaW5nIHRoZSBUTFMKKwkJCQkJICAgb2Zmc2V0IGZvciB0aGUgc3ltYm9sLiAgKi8KKy8qIEtlZXAgdGhpcyB0aGUgbGFzdCBlbnRyeS4gICovCisjZGVmaW5lIFJfMzg2X05VTQkgICA0MgorCisvKiBTVU4gU1BBUkMgc3BlY2lmaWMgZGVmaW5pdGlvbnMuICAqLworCisvKiBMZWdhbCB2YWx1ZXMgZm9yIFNUX1RZUEUgc3ViZmllbGQgb2Ygc3RfaW5mbyAoc3ltYm9sIHR5cGUpLiAgKi8KKworI2RlZmluZSBTVFRfU1BBUkNfUkVHSVNURVIJMTMJLyogR2xvYmFsIHJlZ2lzdGVyIHJlc2VydmVkIHRvIGFwcC4gKi8KKworLyogVmFsdWVzIGZvciBFbGY2NF9FaGRyLmVfZmxhZ3MuICAqLworCisjZGVmaW5lIEVGX1NQQVJDVjlfTU0JCTMKKyNkZWZpbmUgRUZfU1BBUkNWOV9UU08JCTAKKyNkZWZpbmUgRUZfU1BBUkNWOV9QU08JCTEKKyNkZWZpbmUgRUZfU1BBUkNWOV9STU8JCTIKKyNkZWZpbmUgRUZfU1BBUkNfTEVEQVRBCQkweDgwMDAwMCAvKiBsaXR0bGUgZW5kaWFuIGRhdGEgKi8KKyNkZWZpbmUgRUZfU1BBUkNfRVhUX01BU0sJMHhGRkZGMDAKKyNkZWZpbmUgRUZfU1BBUkNfMzJQTFVTCQkweDAwMDEwMCAvKiBnZW5lcmljIFY4KyBmZWF0dXJlcyAqLworI2RlZmluZSBFRl9TUEFSQ19TVU5fVVMxCTB4MDAwMjAwIC8qIFN1biBVbHRyYVNQQVJDMSBleHRlbnNpb25zICovCisjZGVmaW5lIEVGX1NQQVJDX0hBTF9SMQkJMHgwMDA0MDAgLyogSEFMIFIxIGV4dGVuc2lvbnMgKi8KKyNkZWZpbmUgRUZfU1BBUkNfU1VOX1VTMwkweDAwMDgwMCAvKiBTdW4gVWx0cmFTUEFSQ0lJSSBleHRlbnNpb25zICovCisKKy8qIFNQQVJDIHJlbG9jcy4gICovCisKKyNkZWZpbmUgUl9TUEFSQ19OT05FCQkwCS8qIE5vIHJlbG9jICovCisjZGVmaW5lIFJfU1BBUkNfOAkJMQkvKiBEaXJlY3QgOCBiaXQgKi8KKyNkZWZpbmUgUl9TUEFSQ18xNgkJMgkvKiBEaXJlY3QgMTYgYml0ICovCisjZGVmaW5lIFJfU1BBUkNfMzIJCTMJLyogRGlyZWN0IDMyIGJpdCAqLworI2RlZmluZSBSX1NQQVJDX0RJU1A4CQk0CS8qIFBDIHJlbGF0aXZlIDggYml0ICovCisjZGVmaW5lIFJfU1BBUkNfRElTUDE2CQk1CS8qIFBDIHJlbGF0aXZlIDE2IGJpdCAqLworI2RlZmluZSBSX1NQQVJDX0RJU1AzMgkJNgkvKiBQQyByZWxhdGl2ZSAzMiBiaXQgKi8KKyNkZWZpbmUgUl9TUEFSQ19XRElTUDMwCQk3CS8qIFBDIHJlbGF0aXZlIDMwIGJpdCBzaGlmdGVkICovCisjZGVmaW5lIFJfU1BBUkNfV0RJU1AyMgkJOAkvKiBQQyByZWxhdGl2ZSAyMiBiaXQgc2hpZnRlZCAqLworI2RlZmluZSBSX1NQQVJDX0hJMjIJCTkJLyogSGlnaCAyMiBiaXQgKi8KKyNkZWZpbmUgUl9TUEFSQ18yMgkJMTAJLyogRGlyZWN0IDIyIGJpdCAqLworI2RlZmluZSBSX1NQQVJDXzEzCQkxMQkvKiBEaXJlY3QgMTMgYml0ICovCisjZGVmaW5lIFJfU1BBUkNfTE8xMAkJMTIJLyogVHJ1bmNhdGVkIDEwIGJpdCAqLworI2RlZmluZSBSX1NQQVJDX0dPVDEwCQkxMwkvKiBUcnVuY2F0ZWQgMTAgYml0IEdPVCBlbnRyeSAqLworI2RlZmluZSBSX1NQQVJDX0dPVDEzCQkxNAkvKiAxMyBiaXQgR09UIGVudHJ5ICovCisjZGVmaW5lIFJfU1BBUkNfR09UMjIJCTE1CS8qIDIyIGJpdCBHT1QgZW50cnkgc2hpZnRlZCAqLworI2RlZmluZSBSX1NQQVJDX1BDMTAJCTE2CS8qIFBDIHJlbGF0aXZlIDEwIGJpdCB0cnVuY2F0ZWQgKi8KKyNkZWZpbmUgUl9TUEFSQ19QQzIyCQkxNwkvKiBQQyByZWxhdGl2ZSAyMiBiaXQgc2hpZnRlZCAqLworI2RlZmluZSBSX1NQQVJDX1dQTFQzMAkJMTgJLyogMzAgYml0IFBDIHJlbGF0aXZlIFBMVCBhZGRyZXNzICovCisjZGVmaW5lIFJfU1BBUkNfQ09QWQkJMTkJLyogQ29weSBzeW1ib2wgYXQgcnVudGltZSAqLworI2RlZmluZSBSX1NQQVJDX0dMT0JfREFUCTIwCS8qIENyZWF0ZSBHT1QgZW50cnkgKi8KKyNkZWZpbmUgUl9TUEFSQ19KTVBfU0xPVAkyMQkvKiBDcmVhdGUgUExUIGVudHJ5ICovCisjZGVmaW5lIFJfU1BBUkNfUkVMQVRJVkUJMjIJLyogQWRqdXN0IGJ5IHByb2dyYW0gYmFzZSAqLworI2RlZmluZSBSX1NQQVJDX1VBMzIJCTIzCS8qIERpcmVjdCAzMiBiaXQgdW5hbGlnbmVkICovCisKKy8qIEFkZGl0aW9uYWwgU3BhcmM2NCByZWxvY3MuICAqLworCisjZGVmaW5lIFJfU1BBUkNfUExUMzIJCTI0CS8qIERpcmVjdCAzMiBiaXQgcmVmIHRvIFBMVCBlbnRyeSAqLworI2RlZmluZSBSX1NQQVJDX0hJUExUMjIJCTI1CS8qIEhpZ2ggMjIgYml0IFBMVCBlbnRyeSAqLworI2RlZmluZSBSX1NQQVJDX0xPUExUMTAJCTI2CS8qIFRydW5jYXRlZCAxMCBiaXQgUExUIGVudHJ5ICovCisjZGVmaW5lIFJfU1BBUkNfUENQTFQzMgkJMjcJLyogUEMgcmVsIDMyIGJpdCByZWYgdG8gUExUIGVudHJ5ICovCisjZGVmaW5lIFJfU1BBUkNfUENQTFQyMgkJMjgJLyogUEMgcmVsIGhpZ2ggMjIgYml0IFBMVCBlbnRyeSAqLworI2RlZmluZSBSX1NQQVJDX1BDUExUMTAJCTI5CS8qIFBDIHJlbCB0cnVuYyAxMCBiaXQgUExUIGVudHJ5ICovCisjZGVmaW5lIFJfU1BBUkNfMTAJCTMwCS8qIERpcmVjdCAxMCBiaXQgKi8KKyNkZWZpbmUgUl9TUEFSQ18xMQkJMzEJLyogRGlyZWN0IDExIGJpdCAqLworI2RlZmluZSBSX1NQQVJDXzY0CQkzMgkvKiBEaXJlY3QgNjQgYml0ICovCisjZGVmaW5lIFJfU1BBUkNfT0xPMTAJCTMzCS8qIDEwYml0IHdpdGggc2Vjb25kYXJ5IDEzYml0IGFkZGVuZCAqLworI2RlZmluZSBSX1NQQVJDX0hIMjIJCTM0CS8qIFRvcCAyMiBiaXRzIG9mIGRpcmVjdCA2NCBiaXQgKi8KKyNkZWZpbmUgUl9TUEFSQ19ITTEwCQkzNQkvKiBIaWdoIG1pZGRsZSAxMCBiaXRzIG9mIC4uLiAqLworI2RlZmluZSBSX1NQQVJDX0xNMjIJCTM2CS8qIExvdyBtaWRkbGUgMjIgYml0cyBvZiAuLi4gKi8KKyNkZWZpbmUgUl9TUEFSQ19QQ19ISDIyCQkzNwkvKiBUb3AgMjIgYml0cyBvZiBwYyByZWwgNjQgYml0ICovCisjZGVmaW5lIFJfU1BBUkNfUENfSE0xMAkJMzgJLyogSGlnaCBtaWRkbGUgMTAgYml0IG9mIC4uLiAqLworI2RlZmluZSBSX1NQQVJDX1BDX0xNMjIJCTM5CS8qIExvdyBtaWdnbGUgMjIgYml0cyBvZiAuLi4gKi8KKyNkZWZpbmUgUl9TUEFSQ19XRElTUDE2CQk0MAkvKiBQQyByZWxhdGl2ZSAxNiBiaXQgc2hpZnRlZCAqLworI2RlZmluZSBSX1NQQVJDX1dESVNQMTkJCTQxCS8qIFBDIHJlbGF0aXZlIDE5IGJpdCBzaGlmdGVkICovCisjZGVmaW5lIFJfU1BBUkNfNwkJNDMJLyogRGlyZWN0IDcgYml0ICovCisjZGVmaW5lIFJfU1BBUkNfNQkJNDQJLyogRGlyZWN0IDUgYml0ICovCisjZGVmaW5lIFJfU1BBUkNfNgkJNDUJLyogRGlyZWN0IDYgYml0ICovCisjZGVmaW5lIFJfU1BBUkNfRElTUDY0CQk0NgkvKiBQQyByZWxhdGl2ZSA2NCBiaXQgKi8KKyNkZWZpbmUgUl9TUEFSQ19QTFQ2NAkJNDcJLyogRGlyZWN0IDY0IGJpdCByZWYgdG8gUExUIGVudHJ5ICovCisjZGVmaW5lIFJfU1BBUkNfSElYMjIJCTQ4CS8qIEhpZ2ggMjIgYml0IGNvbXBsZW1lbnRlZCAqLworI2RlZmluZSBSX1NQQVJDX0xPWDEwCQk0OQkvKiBUcnVuY2F0ZWQgMTEgYml0IGNvbXBsZW1lbnRlZCAqLworI2RlZmluZSBSX1NQQVJDX0g0NAkJNTAJLyogRGlyZWN0IGhpZ2ggMTIgb2YgNDQgYml0ICovCisjZGVmaW5lIFJfU1BBUkNfTTQ0CQk1MQkvKiBEaXJlY3QgbWlkIDIyIG9mIDQ0IGJpdCAqLworI2RlZmluZSBSX1NQQVJDX0w0NAkJNTIJLyogRGlyZWN0IGxvdyAxMCBvZiA0NCBiaXQgKi8KKyNkZWZpbmUgUl9TUEFSQ19SRUdJU1RFUgk1MwkvKiBHbG9iYWwgcmVnaXN0ZXIgdXNhZ2UgKi8KKyNkZWZpbmUgUl9TUEFSQ19VQTY0CQk1NAkvKiBEaXJlY3QgNjQgYml0IHVuYWxpZ25lZCAqLworI2RlZmluZSBSX1NQQVJDX1VBMTYJCTU1CS8qIERpcmVjdCAxNiBiaXQgdW5hbGlnbmVkICovCisjZGVmaW5lIFJfU1BBUkNfVExTX0dEX0hJMjIJNTYKKyNkZWZpbmUgUl9TUEFSQ19UTFNfR0RfTE8xMAk1NworI2RlZmluZSBSX1NQQVJDX1RMU19HRF9BREQJNTgKKyNkZWZpbmUgUl9TUEFSQ19UTFNfR0RfQ0FMTAk1OQorI2RlZmluZSBSX1NQQVJDX1RMU19MRE1fSEkyMgk2MAorI2RlZmluZSBSX1NQQVJDX1RMU19MRE1fTE8xMAk2MQorI2RlZmluZSBSX1NQQVJDX1RMU19MRE1fQURECTYyCisjZGVmaW5lIFJfU1BBUkNfVExTX0xETV9DQUxMCTYzCisjZGVmaW5lIFJfU1BBUkNfVExTX0xET19ISVgyMgk2NAorI2RlZmluZSBSX1NQQVJDX1RMU19MRE9fTE9YMTAJNjUKKyNkZWZpbmUgUl9TUEFSQ19UTFNfTERPX0FERAk2NgorI2RlZmluZSBSX1NQQVJDX1RMU19JRV9ISTIyCTY3CisjZGVmaW5lIFJfU1BBUkNfVExTX0lFX0xPMTAJNjgKKyNkZWZpbmUgUl9TUEFSQ19UTFNfSUVfTEQJNjkKKyNkZWZpbmUgUl9TUEFSQ19UTFNfSUVfTERYCTcwCisjZGVmaW5lIFJfU1BBUkNfVExTX0lFX0FERAk3MQorI2RlZmluZSBSX1NQQVJDX1RMU19MRV9ISVgyMgk3MgorI2RlZmluZSBSX1NQQVJDX1RMU19MRV9MT1gxMAk3MworI2RlZmluZSBSX1NQQVJDX1RMU19EVFBNT0QzMgk3NAorI2RlZmluZSBSX1NQQVJDX1RMU19EVFBNT0Q2NAk3NQorI2RlZmluZSBSX1NQQVJDX1RMU19EVFBPRkYzMgk3NgorI2RlZmluZSBSX1NQQVJDX1RMU19EVFBPRkY2NAk3NworI2RlZmluZSBSX1NQQVJDX1RMU19UUE9GRjMyCTc4CisjZGVmaW5lIFJfU1BBUkNfVExTX1RQT0ZGNjQJNzkKKy8qIEtlZXAgdGhpcyB0aGUgbGFzdCBlbnRyeS4gICovCisjZGVmaW5lIFJfU1BBUkNfTlVNCQk4MAorCisvKiBGb3IgU3BhcmM2NCwgbGVnYWwgdmFsdWVzIGZvciBkX3RhZyBvZiBFbGY2NF9EeW4uICAqLworCisjZGVmaW5lIERUX1NQQVJDX1JFR0lTVEVSIDB4NzAwMDAwMDEKKyNkZWZpbmUgRFRfU1BBUkNfTlVNCTIKKworLyogQml0cyBwcmVzZW50IGluIEFUX0hXQ0FQIG9uIFNQQVJDLiAgKi8KKworI2RlZmluZSBIV0NBUF9TUEFSQ19GTFVTSAkxCS8qIFRoZSBDUFUgc3VwcG9ydHMgZmx1c2ggaW5zbi4gICovCisjZGVmaW5lIEhXQ0FQX1NQQVJDX1NUQkFSCTIKKyNkZWZpbmUgSFdDQVBfU1BBUkNfU1dBUAk0CisjZGVmaW5lIEhXQ0FQX1NQQVJDX01VTERJVgk4CisjZGVmaW5lIEhXQ0FQX1NQQVJDX1Y5CQkxNgkvKiBUaGUgQ1BVIGlzIHY5LCBzbyB2OHBsdXMgaXMgb2suICAqLworI2RlZmluZSBIV0NBUF9TUEFSQ19VTFRSQTMJMzIKKyNkZWZpbmUgSFdDQVBfU1BBUkNfQkxLSU5JVAk2NAkvKiBTdW40diB3aXRoIGJsb2NrLWluaXQvbG9hZC10d2luLiAgKi8KKyNkZWZpbmUgSFdDQVBfU1BBUkNfTjIJCTEyOAorCisvKiBNSVBTIFIzMDAwIHNwZWNpZmljIGRlZmluaXRpb25zLiAgKi8KKworLyogTGVnYWwgdmFsdWVzIGZvciBlX2ZsYWdzIGZpZWxkIG9mIEVsZjMyX0VoZHIuICAqLworCisjZGVmaW5lIEVGX01JUFNfTk9SRU9SREVSICAgMQkJLyogQSAubm9yZW9yZGVyIGRpcmVjdGl2ZSB3YXMgdXNlZCAqLworI2RlZmluZSBFRl9NSVBTX1BJQwkgICAgMgkJLyogQ29udGFpbnMgUElDIGNvZGUgKi8KKyNkZWZpbmUgRUZfTUlQU19DUElDCSAgICA0CQkvKiBVc2VzIFBJQyBjYWxsaW5nIHNlcXVlbmNlICovCisjZGVmaW5lIEVGX01JUFNfWEdPVAkgICAgOAorI2RlZmluZSBFRl9NSVBTXzY0QklUX1dISVJMIDE2CisjZGVmaW5lIEVGX01JUFNfQUJJMgkgICAgMzIKKyNkZWZpbmUgRUZfTUlQU19BQklfT04zMiAgICA2NAorI2RlZmluZSBFRl9NSVBTX0FSQ0gJICAgIDB4ZjAwMDAwMDAJLyogTUlQUyBhcmNoaXRlY3R1cmUgbGV2ZWwgKi8KKworLyogTGVnYWwgdmFsdWVzIGZvciBNSVBTIGFyY2hpdGVjdHVyZSBsZXZlbC4gICovCisKKyNkZWZpbmUgRUZfTUlQU19BUkNIXzEJICAgIDB4MDAwMDAwMDAJLyogLW1pcHMxIGNvZGUuICAqLworI2RlZmluZSBFRl9NSVBTX0FSQ0hfMgkgICAgMHgxMDAwMDAwMAkvKiAtbWlwczIgY29kZS4gICovCisjZGVmaW5lIEVGX01JUFNfQVJDSF8zCSAgICAweDIwMDAwMDAwCS8qIC1taXBzMyBjb2RlLiAgKi8KKyNkZWZpbmUgRUZfTUlQU19BUkNIXzQJICAgIDB4MzAwMDAwMDAJLyogLW1pcHM0IGNvZGUuICAqLworI2RlZmluZSBFRl9NSVBTX0FSQ0hfNQkgICAgMHg0MDAwMDAwMAkvKiAtbWlwczUgY29kZS4gICovCisjZGVmaW5lIEVGX01JUFNfQVJDSF8zMgkgICAgMHg2MDAwMDAwMAkvKiBNSVBTMzIgY29kZS4gICovCisjZGVmaW5lIEVGX01JUFNfQVJDSF82NAkgICAgMHg3MDAwMDAwMAkvKiBNSVBTNjQgY29kZS4gICovCisKKy8qIFRoZSBmb2xsb3dpbmcgYXJlIG5vbi1vZmZpY2lhbCBuYW1lcyBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLiAgKi8KKworI2RlZmluZSBFX01JUFNfQVJDSF8xCSAgMHgwMDAwMDAwMAkvKiAtbWlwczEgY29kZS4gICovCisjZGVmaW5lIEVfTUlQU19BUkNIXzIJICAweDEwMDAwMDAwCS8qIC1taXBzMiBjb2RlLiAgKi8KKyNkZWZpbmUgRV9NSVBTX0FSQ0hfMwkgIDB4MjAwMDAwMDAJLyogLW1pcHMzIGNvZGUuICAqLworI2RlZmluZSBFX01JUFNfQVJDSF80CSAgMHgzMDAwMDAwMAkvKiAtbWlwczQgY29kZS4gICovCisjZGVmaW5lIEVfTUlQU19BUkNIXzUJICAweDQwMDAwMDAwCS8qIC1taXBzNSBjb2RlLiAgKi8KKyNkZWZpbmUgRV9NSVBTX0FSQ0hfMzIJICAweDYwMDAwMDAwCS8qIE1JUFMzMiBjb2RlLiAgKi8KKyNkZWZpbmUgRV9NSVBTX0FSQ0hfNjQJICAweDcwMDAwMDAwCS8qIE1JUFM2NCBjb2RlLiAgKi8KKworLyogU3BlY2lhbCBzZWN0aW9uIGluZGljZXMuICAqLworCisjZGVmaW5lIFNITl9NSVBTX0FDT01NT04gICAgMHhmZjAwCS8qIEFsbG9jYXRlZCBjb21tb24gc3ltYm9scyAqLworI2RlZmluZSBTSE5fTUlQU19URVhUCSAgICAweGZmMDEJLyogQWxsb2NhdGVkIHRlc3Qgc3ltYm9scy4gICovCisjZGVmaW5lIFNITl9NSVBTX0RBVEEJICAgIDB4ZmYwMgkvKiBBbGxvY2F0ZWQgZGF0YSBzeW1ib2xzLiAgKi8KKyNkZWZpbmUgU0hOX01JUFNfU0NPTU1PTiAgICAweGZmMDMJLyogU21hbGwgY29tbW9uIHN5bWJvbHMgKi8KKyNkZWZpbmUgU0hOX01JUFNfU1VOREVGSU5FRCAweGZmMDQJLyogU21hbGwgdW5kZWZpbmVkIHN5bWJvbHMgKi8KKworLyogTGVnYWwgdmFsdWVzIGZvciBzaF90eXBlIGZpZWxkIG9mIEVsZjMyX1NoZHIuICAqLworCisjZGVmaW5lIFNIVF9NSVBTX0xJQkxJU1QgICAgICAgMHg3MDAwMDAwMCAvKiBTaGFyZWQgb2JqZWN0cyB1c2VkIGluIGxpbmsgKi8KKyNkZWZpbmUgU0hUX01JUFNfTVNZTQkgICAgICAgMHg3MDAwMDAwMQorI2RlZmluZSBTSFRfTUlQU19DT05GTElDVCAgICAgIDB4NzAwMDAwMDIgLyogQ29uZmxpY3Rpbmcgc3ltYm9scyAqLworI2RlZmluZSBTSFRfTUlQU19HUFRBQgkgICAgICAgMHg3MDAwMDAwMyAvKiBHbG9iYWwgZGF0YSBhcmVhIHNpemVzICovCisjZGVmaW5lIFNIVF9NSVBTX1VDT0RFCSAgICAgICAweDcwMDAwMDA0IC8qIFJlc2VydmVkIGZvciBTR0kvTUlQUyBjb21waWxlcnMgKi8KKyNkZWZpbmUgU0hUX01JUFNfREVCVUcJICAgICAgIDB4NzAwMDAwMDUgLyogTUlQUyBFQ09GRiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24qLworI2RlZmluZSBTSFRfTUlQU19SRUdJTkZPICAgICAgIDB4NzAwMDAwMDYgLyogUmVnaXN0ZXIgdXNhZ2UgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgU0hUX01JUFNfUEFDS0FHRSAgICAgICAweDcwMDAwMDA3CisjZGVmaW5lIFNIVF9NSVBTX1BBQ0tTWU0gICAgICAgMHg3MDAwMDAwOAorI2RlZmluZSBTSFRfTUlQU19SRUxECSAgICAgICAweDcwMDAwMDA5CisjZGVmaW5lIFNIVF9NSVBTX0lGQUNFICAgICAgICAgMHg3MDAwMDAwYgorI2RlZmluZSBTSFRfTUlQU19DT05URU5UICAgICAgIDB4NzAwMDAwMGMKKyNkZWZpbmUgU0hUX01JUFNfT1BUSU9OUyAgICAgICAweDcwMDAwMDBkIC8qIE1pc2NlbGxhbmVvdXMgb3B0aW9ucy4gICovCisjZGVmaW5lIFNIVF9NSVBTX1NIRFIJICAgICAgIDB4NzAwMDAwMTAKKyNkZWZpbmUgU0hUX01JUFNfRkRFU0MJICAgICAgIDB4NzAwMDAwMTEKKyNkZWZpbmUgU0hUX01JUFNfRVhUU1lNCSAgICAgICAweDcwMDAwMDEyCisjZGVmaW5lIFNIVF9NSVBTX0RFTlNFCSAgICAgICAweDcwMDAwMDEzCisjZGVmaW5lIFNIVF9NSVBTX1BERVNDCSAgICAgICAweDcwMDAwMDE0CisjZGVmaW5lIFNIVF9NSVBTX0xPQ1NZTQkgICAgICAgMHg3MDAwMDAxNQorI2RlZmluZSBTSFRfTUlQU19BVVhTWU0JICAgICAgIDB4NzAwMDAwMTYKKyNkZWZpbmUgU0hUX01JUFNfT1BUU1lNCSAgICAgICAweDcwMDAwMDE3CisjZGVmaW5lIFNIVF9NSVBTX0xPQ1NUUgkgICAgICAgMHg3MDAwMDAxOAorI2RlZmluZSBTSFRfTUlQU19MSU5FCSAgICAgICAweDcwMDAwMDE5CisjZGVmaW5lIFNIVF9NSVBTX1JGREVTQwkgICAgICAgMHg3MDAwMDAxYQorI2RlZmluZSBTSFRfTUlQU19ERUxUQVNZTSAgICAgIDB4NzAwMDAwMWIKKyNkZWZpbmUgU0hUX01JUFNfREVMVEFJTlNUICAgICAweDcwMDAwMDFjCisjZGVmaW5lIFNIVF9NSVBTX0RFTFRBQ0xBU1MgICAgMHg3MDAwMDAxZAorI2RlZmluZSBTSFRfTUlQU19EV0FSRiAgICAgICAgIDB4NzAwMDAwMWUgLyogRFdBUkYgZGVidWdnaW5nIGluZm9ybWF0aW9uLiAgKi8KKyNkZWZpbmUgU0hUX01JUFNfREVMVEFERUNMICAgICAweDcwMDAwMDFmCisjZGVmaW5lIFNIVF9NSVBTX1NZTUJPTF9MSUIgICAgMHg3MDAwMDAyMAorI2RlZmluZSBTSFRfTUlQU19FVkVOVFMJICAgICAgIDB4NzAwMDAwMjEgLyogRXZlbnQgc2VjdGlvbi4gICovCisjZGVmaW5lIFNIVF9NSVBTX1RSQU5TTEFURSAgICAgMHg3MDAwMDAyMgorI2RlZmluZSBTSFRfTUlQU19QSVhJRQkgICAgICAgMHg3MDAwMDAyMworI2RlZmluZSBTSFRfTUlQU19YTEFURQkgICAgICAgMHg3MDAwMDAyNAorI2RlZmluZSBTSFRfTUlQU19YTEFURV9ERUJVRyAgIDB4NzAwMDAwMjUKKyNkZWZpbmUgU0hUX01JUFNfV0hJUkwJICAgICAgIDB4NzAwMDAwMjYKKyNkZWZpbmUgU0hUX01JUFNfRUhfUkVHSU9OICAgICAweDcwMDAwMDI3CisjZGVmaW5lIFNIVF9NSVBTX1hMQVRFX09MRCAgICAgMHg3MDAwMDAyOAorI2RlZmluZSBTSFRfTUlQU19QRFJfRVhDRVBUSU9OIDB4NzAwMDAwMjkKKworLyogTGVnYWwgdmFsdWVzIGZvciBzaF9mbGFncyBmaWVsZCBvZiBFbGYzMl9TaGRyLiAgKi8KKworI2RlZmluZSBTSEZfTUlQU19HUFJFTAkgMHgxMDAwMDAwMAkvKiBNdXN0IGJlIHBhcnQgb2YgZ2xvYmFsIGRhdGEgYXJlYSAqLworI2RlZmluZSBTSEZfTUlQU19NRVJHRQkgMHgyMDAwMDAwMAorI2RlZmluZSBTSEZfTUlQU19BRERSCSAweDQwMDAwMDAwCisjZGVmaW5lIFNIRl9NSVBTX1NUUklOR1MgMHg4MDAwMDAwMAorI2RlZmluZSBTSEZfTUlQU19OT1NUUklQIDB4MDgwMDAwMDAKKyNkZWZpbmUgU0hGX01JUFNfTE9DQUwJIDB4MDQwMDAwMDAKKyNkZWZpbmUgU0hGX01JUFNfTkFNRVMJIDB4MDIwMDAwMDAKKyNkZWZpbmUgU0hGX01JUFNfTk9EVVBFCSAweDAxMDAwMDAwCisKKworLyogU3ltYm9sIHRhYmxlcy4gICovCisKKy8qIE1JUFMgc3BlY2lmaWMgdmFsdWVzIGZvciBgc3Rfb3RoZXInLiAgKi8KKyNkZWZpbmUgU1RPX01JUFNfREVGQVVMVAkJMHgwCisjZGVmaW5lIFNUT19NSVBTX0lOVEVSTkFMCQkweDEKKyNkZWZpbmUgU1RPX01JUFNfSElEREVOCQkJMHgyCisjZGVmaW5lIFNUT19NSVBTX1BST1RFQ1RFRAkJMHgzCisjZGVmaW5lIFNUT19NSVBTX1BMVAkJCTB4OAorI2RlZmluZSBTVE9fTUlQU19TQ19BTElHTl9VTlVTRUQJMHhmZgorCisvKiBNSVBTIHNwZWNpZmljIHZhbHVlcyBmb3IgYHN0X2luZm8nLiAgKi8KKyNkZWZpbmUgU1RCX01JUFNfU1BMSVRfQ09NTU9OCQkxMworCisvKiBFbnRyaWVzIGZvdW5kIGluIHNlY3Rpb25zIG9mIHR5cGUgU0hUX01JUFNfR1BUQUIuICAqLworCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdAorICAgIHsKKyAgICAgIEVsZjMyX1dvcmQgZ3RfY3VycmVudF9nX3ZhbHVlOwkvKiAtRyB2YWx1ZSB1c2VkIGZvciBjb21waWxhdGlvbiAqLworICAgICAgRWxmMzJfV29yZCBndF91bnVzZWQ7CQkvKiBOb3QgdXNlZCAqLworICAgIH0gZ3RfaGVhZGVyOwkJCS8qIEZpcnN0IGVudHJ5IGluIHNlY3Rpb24gKi8KKyAgc3RydWN0CisgICAgeworICAgICAgRWxmMzJfV29yZCBndF9nX3ZhbHVlOwkJLyogSWYgdGhpcyB2YWx1ZSB3ZXJlIHVzZWQgZm9yIC1HICovCisgICAgICBFbGYzMl9Xb3JkIGd0X2J5dGVzOwkJLyogVGhpcyBtYW55IGJ5dGVzIHdvdWxkIGJlIHVzZWQgKi8KKyAgICB9IGd0X2VudHJ5OwkJCQkvKiBTdWJzZXF1ZW50IGVudHJpZXMgaW4gc2VjdGlvbiAqLworfSBFbGYzMl9ncHRhYjsKKworLyogRW50cnkgZm91bmQgaW4gc2VjdGlvbnMgb2YgdHlwZSBTSFRfTUlQU19SRUdJTkZPLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgRWxmMzJfV29yZAlyaV9ncHJtYXNrOwkJLyogR2VuZXJhbCByZWdpc3RlcnMgdXNlZCAqLworICBFbGYzMl9Xb3JkCXJpX2Nwcm1hc2tbNF07CQkvKiBDb3Byb2Nlc3NvciByZWdpc3RlcnMgdXNlZCAqLworICBFbGYzMl9Td29yZAlyaV9ncF92YWx1ZTsJCS8qICRncCByZWdpc3RlciB2YWx1ZSAqLworfSBFbGYzMl9SZWdJbmZvOworCisvKiBFbnRyaWVzIGZvdW5kIGluIHNlY3Rpb25zIG9mIHR5cGUgU0hUX01JUFNfT1BUSU9OUy4gICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIHVuc2lnbmVkIGNoYXIga2luZDsJCS8qIERldGVybWluZXMgaW50ZXJwcmV0YXRpb24gb2YgdGhlCisJCQkJICAgdmFyaWFibGUgcGFydCBvZiBkZXNjcmlwdG9yLiAgKi8KKyAgdW5zaWduZWQgY2hhciBzaXplOwkJLyogU2l6ZSBvZiBkZXNjcmlwdG9yLCBpbmNsdWRpbmcgaGVhZGVyLiAgKi8KKyAgRWxmMzJfU2VjdGlvbiBzZWN0aW9uOwkvKiBTZWN0aW9uIGhlYWRlciBpbmRleCBvZiBzZWN0aW9uIGFmZmVjdGVkLAorCQkJCSAgIDAgZm9yIGdsb2JhbCBvcHRpb25zLiAgKi8KKyAgRWxmMzJfV29yZCBpbmZvOwkJLyogS2luZC1zcGVjaWZpYyBpbmZvcm1hdGlvbi4gICovCit9IEVsZl9PcHRpb25zOworCisvKiBWYWx1ZXMgZm9yIGBraW5kJyBmaWVsZCBpbiBFbGZfT3B0aW9ucy4gICovCisKKyNkZWZpbmUgT0RLX05VTEwJMAkvKiBVbmRlZmluZWQuICAqLworI2RlZmluZSBPREtfUkVHSU5GTwkxCS8qIFJlZ2lzdGVyIHVzYWdlIGluZm9ybWF0aW9uLiAgKi8KKyNkZWZpbmUgT0RLX0VYQ0VQVElPTlMJMgkvKiBFeGNlcHRpb24gcHJvY2Vzc2luZyBvcHRpb25zLiAgKi8KKyNkZWZpbmUgT0RLX1BBRAkJMwkvKiBTZWN0aW9uIHBhZGRpbmcgb3B0aW9ucy4gICovCisjZGVmaW5lIE9ES19IV1BBVENICTQJLyogSGFyZHdhcmUgd29ya2Fyb3VuZHMgcGVyZm9ybWVkICovCisjZGVmaW5lIE9ES19GSUxMCTUJLyogcmVjb3JkIHRoZSBmaWxsIHZhbHVlIHVzZWQgYnkgdGhlIGxpbmtlci4gKi8KKyNkZWZpbmUgT0RLX1RBR1MJNgkvKiByZXNlcnZlIHNwYWNlIGZvciBkZXNrdG9wIHRvb2xzIHRvIHdyaXRlLiAqLworI2RlZmluZSBPREtfSFdBTkQJNwkvKiBIVyB3b3JrYXJvdW5kcy4gICdBTkQnIGJpdHMgd2hlbiBtZXJnaW5nLiAqLworI2RlZmluZSBPREtfSFdPUgk4CS8qIEhXIHdvcmthcm91bmRzLiAgJ09SJyBiaXRzIHdoZW4gbWVyZ2luZy4gICovCisKKy8qIFZhbHVlcyBmb3IgYGluZm8nIGluIEVsZl9PcHRpb25zIGZvciBPREtfRVhDRVBUSU9OUyBlbnRyaWVzLiAgKi8KKworI2RlZmluZSBPRVhfRlBVX01JTgkweDFmCS8qIEZQRSdzIHdoaWNoIE1VU1QgYmUgZW5hYmxlZC4gICovCisjZGVmaW5lIE9FWF9GUFVfTUFYCTB4MWYwMAkvKiBGUEUncyB3aGljaCBNQVkgYmUgZW5hYmxlZC4gICovCisjZGVmaW5lIE9FWF9QQUdFMAkweDEwMDAwCS8qIHBhZ2UgemVybyBtdXN0IGJlIG1hcHBlZC4gICovCisjZGVmaW5lIE9FWF9TTU0JCTB4MjAwMDAJLyogRm9yY2Ugc2VxdWVudGlhbCBtZW1vcnkgbW9kZT8gICovCisjZGVmaW5lIE9FWF9GUERCVUcJMHg0MDAwMAkvKiBGb3JjZSBmbG9hdGluZyBwb2ludCBkZWJ1ZyBtb2RlPyAgKi8KKyNkZWZpbmUgT0VYX1BSRUNJU0VGUAlPRVhfRlBEQlVHCisjZGVmaW5lIE9FWF9ESVNNSVNTCTB4ODAwMDAJLyogRGlzbWlzcyBpbnZhbGlkIGFkZHJlc3MgZmF1bHRzPyAgKi8KKworI2RlZmluZSBPRVhfRlBVX0lOVkFMCTB4MTAKKyNkZWZpbmUgT0VYX0ZQVV9ESVYwCTB4MDgKKyNkZWZpbmUgT0VYX0ZQVV9PRkxPCTB4MDQKKyNkZWZpbmUgT0VYX0ZQVV9VRkxPCTB4MDIKKyNkZWZpbmUgT0VYX0ZQVV9JTkVYCTB4MDEKKworLyogTWFza3MgZm9yIGBpbmZvJyBpbiBFbGZfT3B0aW9ucyBmb3IgYW4gT0RLX0hXUEFUQ0ggZW50cnkuICAqLworCisjZGVmaW5lIE9IV19SNEtFT1AJMHgxCS8qIFI0MDAwIGVuZC1vZi1wYWdlIHBhdGNoLiAgKi8KKyNkZWZpbmUgT0hXX1I4S1BGRVRDSAkweDIJLyogbWF5IG5lZWQgUjgwMDAgcHJlZmV0Y2ggcGF0Y2guICAqLworI2RlZmluZSBPSFdfUjVLRU9QCTB4NAkvKiBSNTAwMCBlbmQtb2YtcGFnZSBwYXRjaC4gICovCisjZGVmaW5lIE9IV19SNUtDVlRMCTB4OAkvKiBSNTAwMCBjdnQuW2RzXS5sIGJ1Zy4gIGNsZWFuPTEuICAqLworCisjZGVmaW5lIE9QQURfUFJFRklYCTB4MQorI2RlZmluZSBPUEFEX1BPU1RGSVgJMHgyCisjZGVmaW5lIE9QQURfU1lNQk9MCTB4NAorCisvKiBFbnRyeSBmb3VuZCBpbiBgLm9wdGlvbnMnIHNlY3Rpb24uICAqLworCit0eXBlZGVmIHN0cnVjdAoreworICBFbGYzMl9Xb3JkIGh3cF9mbGFnczE7CS8qIEV4dHJhIGZsYWdzLiAgKi8KKyAgRWxmMzJfV29yZCBod3BfZmxhZ3MyOwkvKiBFeHRyYSBmbGFncy4gICovCit9IEVsZl9PcHRpb25zX0h3OworCisvKiBNYXNrcyBmb3IgYGluZm8nIGluIEVsZk9wdGlvbnMgZm9yIE9ES19IV0FORCBhbmQgT0RLX0hXT1IgZW50cmllcy4gICovCisKKyNkZWZpbmUgT0hXQTBfUjRLRU9QX0NIRUNLRUQJMHgwMDAwMDAwMQorI2RlZmluZSBPSFdBMV9SNEtFT1BfQ0xFQU4JMHgwMDAwMDAwMgorCisvKiBNSVBTIHJlbG9jcy4gICovCisKKyNkZWZpbmUgUl9NSVBTX05PTkUJCTAJLyogTm8gcmVsb2MgKi8KKyNkZWZpbmUgUl9NSVBTXzE2CQkxCS8qIERpcmVjdCAxNiBiaXQgKi8KKyNkZWZpbmUgUl9NSVBTXzMyCQkyCS8qIERpcmVjdCAzMiBiaXQgKi8KKyNkZWZpbmUgUl9NSVBTX1JFTDMyCQkzCS8qIFBDIHJlbGF0aXZlIDMyIGJpdCAqLworI2RlZmluZSBSX01JUFNfMjYJCTQJLyogRGlyZWN0IDI2IGJpdCBzaGlmdGVkICovCisjZGVmaW5lIFJfTUlQU19ISTE2CQk1CS8qIEhpZ2ggMTYgYml0ICovCisjZGVmaW5lIFJfTUlQU19MTzE2CQk2CS8qIExvdyAxNiBiaXQgKi8KKyNkZWZpbmUgUl9NSVBTX0dQUkVMMTYJCTcJLyogR1AgcmVsYXRpdmUgMTYgYml0ICovCisjZGVmaW5lIFJfTUlQU19MSVRFUkFMCQk4CS8qIDE2IGJpdCBsaXRlcmFsIGVudHJ5ICovCisjZGVmaW5lIFJfTUlQU19HT1QxNgkJOQkvKiAxNiBiaXQgR09UIGVudHJ5ICovCisjZGVmaW5lIFJfTUlQU19QQzE2CQkxMAkvKiBQQyByZWxhdGl2ZSAxNiBiaXQgKi8KKyNkZWZpbmUgUl9NSVBTX0NBTEwxNgkJMTEJLyogMTYgYml0IEdPVCBlbnRyeSBmb3IgZnVuY3Rpb24gKi8KKyNkZWZpbmUgUl9NSVBTX0dQUkVMMzIJCTEyCS8qIEdQIHJlbGF0aXZlIDMyIGJpdCAqLworCisjZGVmaW5lIFJfTUlQU19TSElGVDUJCTE2CisjZGVmaW5lIFJfTUlQU19TSElGVDYJCTE3CisjZGVmaW5lIFJfTUlQU182NAkJMTgKKyNkZWZpbmUgUl9NSVBTX0dPVF9ESVNQCQkxOQorI2RlZmluZSBSX01JUFNfR09UX1BBR0UJCTIwCisjZGVmaW5lIFJfTUlQU19HT1RfT0ZTVAkJMjEKKyNkZWZpbmUgUl9NSVBTX0dPVF9ISTE2CQkyMgorI2RlZmluZSBSX01JUFNfR09UX0xPMTYJCTIzCisjZGVmaW5lIFJfTUlQU19TVUIJCTI0CisjZGVmaW5lIFJfTUlQU19JTlNFUlRfQQkJMjUKKyNkZWZpbmUgUl9NSVBTX0lOU0VSVF9CCQkyNgorI2RlZmluZSBSX01JUFNfREVMRVRFCQkyNworI2RlZmluZSBSX01JUFNfSElHSEVSCQkyOAorI2RlZmluZSBSX01JUFNfSElHSEVTVAkJMjkKKyNkZWZpbmUgUl9NSVBTX0NBTExfSEkxNgkzMAorI2RlZmluZSBSX01JUFNfQ0FMTF9MTzE2CTMxCisjZGVmaW5lIFJfTUlQU19TQ05fRElTUAkJMzIKKyNkZWZpbmUgUl9NSVBTX1JFTDE2CQkzMworI2RlZmluZSBSX01JUFNfQUREX0lNTUVESUFURQkzNAorI2RlZmluZSBSX01JUFNfUEpVTVAJCTM1CisjZGVmaW5lIFJfTUlQU19SRUxHT1QJCTM2CisjZGVmaW5lIFJfTUlQU19KQUxSCQkzNworI2RlZmluZSBSX01JUFNfVExTX0RUUE1PRDMyCTM4CS8qIE1vZHVsZSBudW1iZXIgMzIgYml0ICovCisjZGVmaW5lIFJfTUlQU19UTFNfRFRQUkVMMzIJMzkJLyogTW9kdWxlLXJlbGF0aXZlIG9mZnNldCAzMiBiaXQgKi8KKyNkZWZpbmUgUl9NSVBTX1RMU19EVFBNT0Q2NAk0MAkvKiBNb2R1bGUgbnVtYmVyIDY0IGJpdCAqLworI2RlZmluZSBSX01JUFNfVExTX0RUUFJFTDY0CTQxCS8qIE1vZHVsZS1yZWxhdGl2ZSBvZmZzZXQgNjQgYml0ICovCisjZGVmaW5lIFJfTUlQU19UTFNfR0QJCTQyCS8qIDE2IGJpdCBHT1Qgb2Zmc2V0IGZvciBHRCAqLworI2RlZmluZSBSX01JUFNfVExTX0xETQkJNDMJLyogMTYgYml0IEdPVCBvZmZzZXQgZm9yIExETSAqLworI2RlZmluZSBSX01JUFNfVExTX0RUUFJFTF9ISTE2CTQ0CS8qIE1vZHVsZS1yZWxhdGl2ZSBvZmZzZXQsIGhpZ2ggMTYgYml0cyAqLworI2RlZmluZSBSX01JUFNfVExTX0RUUFJFTF9MTzE2CTQ1CS8qIE1vZHVsZS1yZWxhdGl2ZSBvZmZzZXQsIGxvdyAxNiBiaXRzICovCisjZGVmaW5lIFJfTUlQU19UTFNfR09UVFBSRUwJNDYJLyogMTYgYml0IEdPVCBvZmZzZXQgZm9yIElFICovCisjZGVmaW5lIFJfTUlQU19UTFNfVFBSRUwzMgk0NwkvKiBUUC1yZWxhdGl2ZSBvZmZzZXQsIDMyIGJpdCAqLworI2RlZmluZSBSX01JUFNfVExTX1RQUkVMNjQJNDgJLyogVFAtcmVsYXRpdmUgb2Zmc2V0LCA2NCBiaXQgKi8KKyNkZWZpbmUgUl9NSVBTX1RMU19UUFJFTF9ISTE2CTQ5CS8qIFRQLXJlbGF0aXZlIG9mZnNldCwgaGlnaCAxNiBiaXRzICovCisjZGVmaW5lIFJfTUlQU19UTFNfVFBSRUxfTE8xNgk1MAkvKiBUUC1yZWxhdGl2ZSBvZmZzZXQsIGxvdyAxNiBiaXRzICovCisjZGVmaW5lIFJfTUlQU19HTE9CX0RBVAkJNTEKKyNkZWZpbmUgUl9NSVBTX0NPUFkJCTEyNgorI2RlZmluZSBSX01JUFNfSlVNUF9TTE9UICAgICAgICAxMjcKKy8qIEtlZXAgdGhpcyB0aGUgbGFzdCBlbnRyeS4gICovCisjZGVmaW5lIFJfTUlQU19OVU0JCTEyOAorCisvKiBMZWdhbCB2YWx1ZXMgZm9yIHBfdHlwZSBmaWVsZCBvZiBFbGYzMl9QaGRyLiAgKi8KKworI2RlZmluZSBQVF9NSVBTX1JFR0lORk8JMHg3MDAwMDAwMAkvKiBSZWdpc3RlciB1c2FnZSBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBQVF9NSVBTX1JUUFJPQyAgMHg3MDAwMDAwMQkvKiBSdW50aW1lIHByb2NlZHVyZSB0YWJsZS4gKi8KKyNkZWZpbmUgUFRfTUlQU19PUFRJT05TIDB4NzAwMDAwMDIKKworLyogU3BlY2lhbCBwcm9ncmFtIGhlYWRlciB0eXBlcy4gICovCisKKyNkZWZpbmUgUEZfTUlQU19MT0NBTAkweDEwMDAwMDAwCisKKy8qIExlZ2FsIHZhbHVlcyBmb3IgZF90YWcgZmllbGQgb2YgRWxmMzJfRHluLiAgKi8KKworI2RlZmluZSBEVF9NSVBTX1JMRF9WRVJTSU9OICAweDcwMDAwMDAxCS8qIFJ1bnRpbWUgbGlua2VyIGludGVyZmFjZSB2ZXJzaW9uICovCisjZGVmaW5lIERUX01JUFNfVElNRV9TVEFNUCAgIDB4NzAwMDAwMDIJLyogVGltZXN0YW1wICovCisjZGVmaW5lIERUX01JUFNfSUNIRUNLU1VNICAgIDB4NzAwMDAwMDMJLyogQ2hlY2tzdW0gKi8KKyNkZWZpbmUgRFRfTUlQU19JVkVSU0lPTiAgICAgMHg3MDAwMDAwNAkvKiBWZXJzaW9uIHN0cmluZyAoc3RyaW5nIHRibCBpbmRleCkgKi8KKyNkZWZpbmUgRFRfTUlQU19GTEFHUwkgICAgIDB4NzAwMDAwMDUJLyogRmxhZ3MgKi8KKyNkZWZpbmUgRFRfTUlQU19CQVNFX0FERFJFU1MgMHg3MDAwMDAwNgkvKiBCYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgRFRfTUlQU19NU1lNCSAgICAgMHg3MDAwMDAwNworI2RlZmluZSBEVF9NSVBTX0NPTkZMSUNUICAgICAweDcwMDAwMDA4CS8qIEFkZHJlc3Mgb2YgQ09ORkxJQ1Qgc2VjdGlvbiAqLworI2RlZmluZSBEVF9NSVBTX0xJQkxJU1QJICAgICAweDcwMDAwMDA5CS8qIEFkZHJlc3Mgb2YgTElCTElTVCBzZWN0aW9uICovCisjZGVmaW5lIERUX01JUFNfTE9DQUxfR09UTk8gIDB4NzAwMDAwMGEJLyogTnVtYmVyIG9mIGxvY2FsIEdPVCBlbnRyaWVzICovCisjZGVmaW5lIERUX01JUFNfQ09ORkxJQ1ROTyAgIDB4NzAwMDAwMGIJLyogTnVtYmVyIG9mIENPTkZMSUNUIGVudHJpZXMgKi8KKyNkZWZpbmUgRFRfTUlQU19MSUJMSVNUTk8gICAgMHg3MDAwMDAxMAkvKiBOdW1iZXIgb2YgTElCTElTVCBlbnRyaWVzICovCisjZGVmaW5lIERUX01JUFNfU1lNVEFCTk8gICAgIDB4NzAwMDAwMTEJLyogTnVtYmVyIG9mIERZTlNZTSBlbnRyaWVzICovCisjZGVmaW5lIERUX01JUFNfVU5SRUZFWFROTyAgIDB4NzAwMDAwMTIJLyogRmlyc3QgZXh0ZXJuYWwgRFlOU1lNICovCisjZGVmaW5lIERUX01JUFNfR09UU1lNCSAgICAgMHg3MDAwMDAxMwkvKiBGaXJzdCBHT1QgZW50cnkgaW4gRFlOU1lNICovCisjZGVmaW5lIERUX01JUFNfSElQQUdFTk8gICAgIDB4NzAwMDAwMTQJLyogTnVtYmVyIG9mIEdPVCBwYWdlIHRhYmxlIGVudHJpZXMgKi8KKyNkZWZpbmUgRFRfTUlQU19STERfTUFQCSAgICAgMHg3MDAwMDAxNgkvKiBBZGRyZXNzIG9mIHJ1biB0aW1lIGxvYWRlciBtYXAuICAqLworI2RlZmluZSBEVF9NSVBTX0RFTFRBX0NMQVNTICAweDcwMDAwMDE3CS8qIERlbHRhIEMrKyBjbGFzcyBkZWZpbml0aW9uLiAgKi8KKyNkZWZpbmUgRFRfTUlQU19ERUxUQV9DTEFTU19OTyAgICAweDcwMDAwMDE4IC8qIE51bWJlciBvZiBlbnRyaWVzIGluCisJCQkJCQlEVF9NSVBTX0RFTFRBX0NMQVNTLiAgKi8KKyNkZWZpbmUgRFRfTUlQU19ERUxUQV9JTlNUQU5DRSAgICAweDcwMDAwMDE5IC8qIERlbHRhIEMrKyBjbGFzcyBpbnN0YW5jZXMuICAqLworI2RlZmluZSBEVF9NSVBTX0RFTFRBX0lOU1RBTkNFX05PIDB4NzAwMDAwMWEgLyogTnVtYmVyIG9mIGVudHJpZXMgaW4KKwkJCQkJCURUX01JUFNfREVMVEFfSU5TVEFOQ0UuICAqLworI2RlZmluZSBEVF9NSVBTX0RFTFRBX1JFTE9DICAweDcwMDAwMDFiIC8qIERlbHRhIHJlbG9jYXRpb25zLiAgKi8KKyNkZWZpbmUgRFRfTUlQU19ERUxUQV9SRUxPQ19OTyAweDcwMDAwMDFjIC8qIE51bWJlciBvZiBlbnRyaWVzIGluCisJCQkJCSAgICAgRFRfTUlQU19ERUxUQV9SRUxPQy4gICovCisjZGVmaW5lIERUX01JUFNfREVMVEFfU1lNICAgIDB4NzAwMDAwMWQgLyogRGVsdGEgc3ltYm9scyB0aGF0IERlbHRhCisJCQkJCSAgIHJlbG9jYXRpb25zIHJlZmVyIHRvLiAgKi8KKyNkZWZpbmUgRFRfTUlQU19ERUxUQV9TWU1fTk8gMHg3MDAwMDAxZSAvKiBOdW1iZXIgb2YgZW50cmllcyBpbgorCQkJCQkgICBEVF9NSVBTX0RFTFRBX1NZTS4gICovCisjZGVmaW5lIERUX01JUFNfREVMVEFfQ0xBU1NTWU0gMHg3MDAwMDAyMCAvKiBEZWx0YSBzeW1ib2xzIHRoYXQgaG9sZCB0aGUKKwkJCQkJICAgICBjbGFzcyBkZWNsYXJhdGlvbi4gICovCisjZGVmaW5lIERUX01JUFNfREVMVEFfQ0xBU1NTWU1fTk8gMHg3MDAwMDAyMSAvKiBOdW1iZXIgb2YgZW50cmllcyBpbgorCQkJCQkJRFRfTUlQU19ERUxUQV9DTEFTU1NZTS4gICovCisjZGVmaW5lIERUX01JUFNfQ1hYX0ZMQUdTICAgIDB4NzAwMDAwMjIgLyogRmxhZ3MgaW5kaWNhdGluZyBmb3IgQysrIGZsYXZvci4gICovCisjZGVmaW5lIERUX01JUFNfUElYSUVfSU5JVCAgIDB4NzAwMDAwMjMKKyNkZWZpbmUgRFRfTUlQU19TWU1CT0xfTElCICAgMHg3MDAwMDAyNAorI2RlZmluZSBEVF9NSVBTX0xPQ0FMUEFHRV9HT1RJRFggMHg3MDAwMDAyNQorI2RlZmluZSBEVF9NSVBTX0xPQ0FMX0dPVElEWCAweDcwMDAwMDI2CisjZGVmaW5lIERUX01JUFNfSElEREVOX0dPVElEWCAweDcwMDAwMDI3CisjZGVmaW5lIERUX01JUFNfUFJPVEVDVEVEX0dPVElEWCAweDcwMDAwMDI4CisjZGVmaW5lIERUX01JUFNfT1BUSU9OUwkgICAgIDB4NzAwMDAwMjkgLyogQWRkcmVzcyBvZiAub3B0aW9ucy4gICovCisjZGVmaW5lIERUX01JUFNfSU5URVJGQUNFICAgIDB4NzAwMDAwMmEgLyogQWRkcmVzcyBvZiAuaW50ZXJmYWNlLiAgKi8KKyNkZWZpbmUgRFRfTUlQU19EWU5TVFJfQUxJR04gMHg3MDAwMDAyYgorI2RlZmluZSBEVF9NSVBTX0lOVEVSRkFDRV9TSVpFIDB4NzAwMDAwMmMgLyogU2l6ZSBvZiB0aGUgLmludGVyZmFjZSBzZWN0aW9uLiAqLworI2RlZmluZSBEVF9NSVBTX1JMRF9URVhUX1JFU09MVkVfQUREUiAweDcwMDAwMDJkIC8qIEFkZHJlc3Mgb2YgcmxkX3RleHRfcnNvbHZlCisJCQkJCQkgICAgZnVuY3Rpb24gc3RvcmVkIGluIEdPVC4gICovCisjZGVmaW5lIERUX01JUFNfUEVSRl9TVUZGSVggIDB4NzAwMDAwMmUgLyogRGVmYXVsdCBzdWZmaXggb2YgZHNvIHRvIGJlIGFkZGVkCisJCQkJCSAgIGJ5IHJsZCBvbiBkbG9wZW4oKSBjYWxscy4gICovCisjZGVmaW5lIERUX01JUFNfQ09NUEFDVF9TSVpFIDB4NzAwMDAwMmYgLyogKE8zMilTaXplIG9mIGNvbXBhY3QgcmVsIHNlY3Rpb24uICovCisjZGVmaW5lIERUX01JUFNfR1BfVkFMVUUgICAgIDB4NzAwMDAwMzAgLyogR1AgdmFsdWUgZm9yIGF1eCBHT1RzLiAgKi8KKyNkZWZpbmUgRFRfTUlQU19BVVhfRFlOQU1JQyAgMHg3MDAwMDAzMSAvKiBBZGRyZXNzIG9mIGF1eCAuZHluYW1pYy4gICovCisvKiBUaGUgYWRkcmVzcyBvZiAuZ290LnBsdCBpbiBhbiBleGVjdXRhYmxlIHVzaW5nIHRoZSBuZXcgbm9uLVBJQyBBQkkuICAqLworI2RlZmluZSBEVF9NSVBTX1BMVEdPVAkgICAgIDB4NzAwMDAwMzIKKy8qIFRoZSBiYXNlIG9mIHRoZSBQTFQgaW4gYW4gZXhlY3V0YWJsZSB1c2luZyB0aGUgbmV3IG5vbi1QSUMgQUJJIGlmIHRoYXQKKyAgIFBMVCBpcyB3cml0YWJsZS4gIEZvciBhIG5vbi13cml0YWJsZSBQTFQsIHRoaXMgaXMgb21pdHRlZCBvciBoYXMgYSB6ZXJvCisgICB2YWx1ZS4gICovCisjZGVmaW5lIERUX01JUFNfUldQTFQgICAgICAgIDB4NzAwMDAwMzQKKyNkZWZpbmUgRFRfTUlQU19OVU0JICAgICAweDM1CisKKy8qIExlZ2FsIHZhbHVlcyBmb3IgRFRfTUlQU19GTEFHUyBFbGYzMl9EeW4gZW50cnkuICAqLworCisjZGVmaW5lIFJIRl9OT05FCQkgICAwCQkvKiBObyBmbGFncyAqLworI2RlZmluZSBSSEZfUVVJQ0tTVEFSVAkJICAgKDEgPDwgMCkJLyogVXNlIHF1aWNrc3RhcnQgKi8KKyNkZWZpbmUgUkhGX05PVFBPVAkJICAgKDEgPDwgMSkJLyogSGFzaCBzaXplIG5vdCBwb3dlciBvZiAyICovCisjZGVmaW5lIFJIRl9OT19MSUJSQVJZX1JFUExBQ0VNRU5UICgxIDw8IDIpCS8qIElnbm9yZSBMRF9MSUJSQVJZX1BBVEggKi8KKyNkZWZpbmUgUkhGX05PX01PVkUJCSAgICgxIDw8IDMpCisjZGVmaW5lIFJIRl9TR0lfT05MWQkJICAgKDEgPDwgNCkKKyNkZWZpbmUgUkhGX0dVQVJBTlRFRV9JTklUCSAgICgxIDw8IDUpCisjZGVmaW5lIFJIRl9ERUxUQV9DX1BMVVNfUExVUwkgICAoMSA8PCA2KQorI2RlZmluZSBSSEZfR1VBUkFOVEVFX1NUQVJUX0lOSVQgICAoMSA8PCA3KQorI2RlZmluZSBSSEZfUElYSUUJCSAgICgxIDw8IDgpCisjZGVmaW5lIFJIRl9ERUZBVUxUX0RFTEFZX0xPQUQJICAgKDEgPDwgOSkKKyNkZWZpbmUgUkhGX1JFUVVJQ0tTVEFSVAkgICAoMSA8PCAxMCkKKyNkZWZpbmUgUkhGX1JFUVVJQ0tTVEFSVEVECSAgICgxIDw8IDExKQorI2RlZmluZSBSSEZfQ09SRAkJICAgKDEgPDwgMTIpCisjZGVmaW5lIFJIRl9OT19VTlJFU19VTkRFRgkgICAoMSA8PCAxMykKKyNkZWZpbmUgUkhGX1JMRF9PUkRFUl9TQUZFCSAgICgxIDw8IDE0KQorCisvKiBFbnRyaWVzIGZvdW5kIGluIHNlY3Rpb25zIG9mIHR5cGUgU0hUX01JUFNfTElCTElTVC4gICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEVsZjMyX1dvcmQgbF9uYW1lOwkJLyogTmFtZSAoc3RyaW5nIHRhYmxlIGluZGV4KSAqLworICBFbGYzMl9Xb3JkIGxfdGltZV9zdGFtcDsJLyogVGltZXN0YW1wICovCisgIEVsZjMyX1dvcmQgbF9jaGVja3N1bTsJLyogQ2hlY2tzdW0gKi8KKyAgRWxmMzJfV29yZCBsX3ZlcnNpb247CQkvKiBJbnRlcmZhY2UgdmVyc2lvbiAqLworICBFbGYzMl9Xb3JkIGxfZmxhZ3M7CQkvKiBGbGFncyAqLworfSBFbGYzMl9MaWI7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEVsZjY0X1dvcmQgbF9uYW1lOwkJLyogTmFtZSAoc3RyaW5nIHRhYmxlIGluZGV4KSAqLworICBFbGY2NF9Xb3JkIGxfdGltZV9zdGFtcDsJLyogVGltZXN0YW1wICovCisgIEVsZjY0X1dvcmQgbF9jaGVja3N1bTsJLyogQ2hlY2tzdW0gKi8KKyAgRWxmNjRfV29yZCBsX3ZlcnNpb247CQkvKiBJbnRlcmZhY2UgdmVyc2lvbiAqLworICBFbGY2NF9Xb3JkIGxfZmxhZ3M7CQkvKiBGbGFncyAqLworfSBFbGY2NF9MaWI7CisKKworLyogTGVnYWwgdmFsdWVzIGZvciBsX2ZsYWdzLiAgKi8KKworI2RlZmluZSBMTF9OT05FCQkgIDAKKyNkZWZpbmUgTExfRVhBQ1RfTUFUQ0gJICAoMSA8PCAwKQkvKiBSZXF1aXJlIGV4YWN0IG1hdGNoICovCisjZGVmaW5lIExMX0lHTk9SRV9JTlRfVkVSICgxIDw8IDEpCS8qIElnbm9yZSBpbnRlcmZhY2UgdmVyc2lvbiAqLworI2RlZmluZSBMTF9SRVFVSVJFX01JTk9SICAoMSA8PCAyKQorI2RlZmluZSBMTF9FWFBPUlRTCSAgKDEgPDwgMykKKyNkZWZpbmUgTExfREVMQVlfTE9BRAkgICgxIDw8IDQpCisjZGVmaW5lIExMX0RFTFRBCSAgKDEgPDwgNSkKKworLyogRW50cmllcyBmb3VuZCBpbiBzZWN0aW9ucyBvZiB0eXBlIFNIVF9NSVBTX0NPTkZMSUNULiAgKi8KKwordHlwZWRlZiBFbGYzMl9BZGRyIEVsZjMyX0NvbmZsaWN0OworCisKKy8qIEhQUEEgc3BlY2lmaWMgZGVmaW5pdGlvbnMuICAqLworCisvKiBMZWdhbCB2YWx1ZXMgZm9yIGVfZmxhZ3MgZmllbGQgb2YgRWxmMzJfRWhkci4gICovCisKKyNkZWZpbmUgRUZfUEFSSVNDX1RSQVBOSUwJMHgwMDAxMDAwMCAvKiBUcmFwIG5pbCBwb2ludGVyIGRlcmVmZXJlbmNlLiAgKi8KKyNkZWZpbmUgRUZfUEFSSVNDX0VYVAkJMHgwMDAyMDAwMCAvKiBQcm9ncmFtIHVzZXMgYXJjaC4gZXh0ZW5zaW9ucy4gKi8KKyNkZWZpbmUgRUZfUEFSSVNDX0xTQgkJMHgwMDA0MDAwMCAvKiBQcm9ncmFtIGV4cGVjdHMgbGl0dGxlIGVuZGlhbi4gKi8KKyNkZWZpbmUgRUZfUEFSSVNDX1dJREUJCTB4MDAwODAwMDAgLyogUHJvZ3JhbSBleHBlY3RzIHdpZGUgbW9kZS4gICovCisjZGVmaW5lIEVGX1BBUklTQ19OT19LQUJQCTB4MDAxMDAwMDAgLyogTm8ga2VybmVsIGFzc2lzdGVkIGJyYW5jaAorCQkJCQkgICAgICBwcmVkaWN0aW9uLiAgKi8KKyNkZWZpbmUgRUZfUEFSSVNDX0xBWllTV0FQCTB4MDA0MDAwMDAgLyogQWxsb3cgbGF6eSBzd2FwcGluZy4gICovCisjZGVmaW5lIEVGX1BBUklTQ19BUkNICQkweDAwMDBmZmZmIC8qIEFyY2hpdGVjdHVyZSB2ZXJzaW9uLiAgKi8KKworLyogRGVmaW5lZCB2YWx1ZXMgZm9yIGBlX2ZsYWdzICYgRUZfUEFSSVNDX0FSQ0gnIGFyZTogICovCisKKyNkZWZpbmUgRUZBX1BBUklTQ18xXzAJCSAgICAweDAyMGIgLyogUEEtUklTQyAxLjAgYmlnLWVuZGlhbi4gICovCisjZGVmaW5lIEVGQV9QQVJJU0NfMV8xCQkgICAgMHgwMjEwIC8qIFBBLVJJU0MgMS4xIGJpZy1lbmRpYW4uICAqLworI2RlZmluZSBFRkFfUEFSSVNDXzJfMAkJICAgIDB4MDIxNCAvKiBQQS1SSVNDIDIuMCBiaWctZW5kaWFuLiAgKi8KKworLyogQWRkaXRpb25hbCBzZWN0aW9uIGluZGVjZXMuICAqLworCisjZGVmaW5lIFNITl9QQVJJU0NfQU5TSV9DT01NT04JMHhmZjAwCSAgIC8qIFNlY3Rpb24gZm9yIHRlbmF0aXZlbHkgZGVjbGFyZWQKKwkJCQkJICAgICAgc3ltYm9scyBpbiBBTlNJIEMuICAqLworI2RlZmluZSBTSE5fUEFSSVNDX0hVR0VfQ09NTU9OCTB4ZmYwMQkgICAvKiBDb21tb24gYmxvY2tzIGluIGh1Z2UgbW9kZWwuICAqLworCisvKiBMZWdhbCB2YWx1ZXMgZm9yIHNoX3R5cGUgZmllbGQgb2YgRWxmMzJfU2hkci4gICovCisKKyNkZWZpbmUgU0hUX1BBUklTQ19FWFQJCTB4NzAwMDAwMDAgLyogQ29udGFpbnMgcHJvZHVjdCBzcGVjaWZpYyBleHQuICovCisjZGVmaW5lIFNIVF9QQVJJU0NfVU5XSU5ECTB4NzAwMDAwMDEgLyogVW53aW5kIGluZm9ybWF0aW9uLiAgKi8KKyNkZWZpbmUgU0hUX1BBUklTQ19ET0MJCTB4NzAwMDAwMDIgLyogRGVidWcgaW5mbyBmb3Igb3B0aW1pemVkIGNvZGUuICovCisKKy8qIExlZ2FsIHZhbHVlcyBmb3Igc2hfZmxhZ3MgZmllbGQgb2YgRWxmMzJfU2hkci4gICovCisKKyNkZWZpbmUgU0hGX1BBUklTQ19TSE9SVAkweDIwMDAwMDAwIC8qIFNlY3Rpb24gd2l0aCBzaG9ydCBhZGRyZXNzaW5nLiAqLworI2RlZmluZSBTSEZfUEFSSVNDX0hVR0UJCTB4NDAwMDAwMDAgLyogU2VjdGlvbiBmYXIgZnJvbSBncC4gICovCisjZGVmaW5lIFNIRl9QQVJJU0NfU0JQCQkweDgwMDAwMDAwIC8qIFN0YXRpYyBicmFuY2ggcHJlZGljdGlvbiBjb2RlLiAqLworCisvKiBMZWdhbCB2YWx1ZXMgZm9yIFNUX1RZUEUgc3ViZmllbGQgb2Ygc3RfaW5mbyAoc3ltYm9sIHR5cGUpLiAgKi8KKworI2RlZmluZSBTVFRfUEFSSVNDX01JTExJQ09ERQkxMwkvKiBNaWxsaWNvZGUgZnVuY3Rpb24gZW50cnkgcG9pbnQuICAqLworCisjZGVmaW5lIFNUVF9IUF9PUEFRVUUJCShTVFRfTE9PUyArIDB4MSkKKyNkZWZpbmUgU1RUX0hQX1NUVUIJCShTVFRfTE9PUyArIDB4MikKKworLyogSFBQQSByZWxvY3MuICAqLworCisjZGVmaW5lIFJfUEFSSVNDX05PTkUJCTAJLyogTm8gcmVsb2MuICAqLworI2RlZmluZSBSX1BBUklTQ19ESVIzMgkJMQkvKiBEaXJlY3QgMzItYml0IHJlZmVyZW5jZS4gICovCisjZGVmaW5lIFJfUEFSSVNDX0RJUjIxTAkJMgkvKiBMZWZ0IDIxIGJpdHMgb2YgZWZmLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfRElSMTdSCQkzCS8qIFJpZ2h0IDE3IGJpdHMgb2YgZWZmLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfRElSMTdGCQk0CS8qIDE3IGJpdHMgb2YgZWZmLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfRElSMTRSCQk2CS8qIFJpZ2h0IDE0IGJpdHMgb2YgZWZmLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfUENSRUwzMgk5CS8qIDMyLWJpdCByZWwuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19QQ1JFTDIxTAkxMAkvKiBMZWZ0IDIxIGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfUENSRUwxN1IJMTEJLyogUmlnaHQgMTcgYml0cyBvZiByZWwuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19QQ1JFTDE3RgkxMgkvKiAxNyBiaXRzIG9mIHJlbC4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTRSCTE0CS8qIFJpZ2h0IDE0IGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfRFBSRUwyMUwJMTgJLyogTGVmdCAyMSBiaXRzIG9mIHJlbC4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX0RQUkVMMTRSCTIyCS8qIFJpZ2h0IDE0IGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfR1BSRUwyMUwJMjYJLyogR1AtcmVsYXRpdmUsIGxlZnQgMjEgYml0cy4gICovCisjZGVmaW5lIFJfUEFSSVNDX0dQUkVMMTRSCTMwCS8qIEdQLXJlbGF0aXZlLCByaWdodCAxNCBiaXRzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkYyMUwJMzQJLyogTFQtcmVsYXRpdmUsIGxlZnQgMjEgYml0cy4gICovCisjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGMTRSCTM4CS8qIExULXJlbGF0aXZlLCByaWdodCAxNCBiaXRzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfU0VDUkVMMzIJNDEJLyogMzIgYml0cyBzZWN0aW9uIHJlbC4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX1NFR0JBU0UJNDgJLyogTm8gcmVsb2NhdGlvbiwgc2V0IHNlZ21lbnQgYmFzZS4gICovCisjZGVmaW5lIFJfUEFSSVNDX1NFR1JFTDMyCTQ5CS8qIDMyIGJpdHMgc2VnbWVudCByZWwuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19QTFRPRkYyMUwJNTAJLyogUExUIHJlbC4gYWRkcmVzcywgbGVmdCAyMSBiaXRzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMTRSCTU0CS8qIFBMVCByZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLworI2RlZmluZSBSX1BBUklTQ19MVE9GRl9GUFRSMzIJNTcJLyogMzIgYml0cyBMVC1yZWwuIGZ1bmN0aW9uIHBvaW50ZXIuICovCisjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX0ZQVFIyMUwJNTgJLyogTFQtcmVsLiBmY3QgcHRyLCBsZWZ0IDIxIGJpdHMuICovCisjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX0ZQVFIxNFIJNjIJLyogTFQtcmVsLiBmY3QgcHRyLCByaWdodCAxNCBiaXRzLiAqLworI2RlZmluZSBSX1BBUklTQ19GUFRSNjQJCTY0CS8qIDY0IGJpdHMgZnVuY3Rpb24gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX1BMQUJFTDMyCTY1CS8qIDMyIGJpdHMgZnVuY3Rpb24gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX1BMQUJFTDIxTAk2NgkvKiBMZWZ0IDIxIGJpdHMgb2YgZmRlc2MgYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX1BMQUJFTDE0Ugk3MAkvKiBSaWdodCAxNCBiaXRzIG9mIGZkZXNjIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19QQ1JFTDY0CTcyCS8qIDY0IGJpdHMgUEMtcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfUENSRUwyMkYJNzQJLyogMjIgYml0cyBQQy1yZWwuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19QQ1JFTDE0V1IJNzUJLyogUEMtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfUENSRUwxNERSCTc2CS8qIFBDIHJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTZGCTc3CS8qIDE2IGJpdHMgUEMtcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfUENSRUwxNldGCTc4CS8qIDE2IGJpdHMgUEMtcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfUENSRUwxNkRGCTc5CS8qIDE2IGJpdHMgUEMtcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfRElSNjQJCTgwCS8qIDY0IGJpdHMgb2YgZWZmLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfRElSMTRXUgk4MwkvKiAxNCBiaXRzIG9mIGVmZi4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX0RJUjE0RFIJODQJLyogMTQgYml0cyBvZiBlZmYuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19ESVIxNkYJCTg1CS8qIDE2IGJpdHMgb2YgZWZmLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfRElSMTZXRgk4NgkvKiAxNiBiaXRzIG9mIGVmZi4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX0RJUjE2REYJODcJLyogMTYgYml0cyBvZiBlZmYuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19HUFJFTDY0CTg4CS8qIDY0IGJpdHMgb2YgR1AtcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfR1BSRUwxNFdSCTkxCS8qIEdQLXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisjZGVmaW5lIFJfUEFSSVNDX0dQUkVMMTREUgk5MgkvKiBHUC1yZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLworI2RlZmluZSBSX1BBUklTQ19HUFJFTDE2Rgk5MwkvKiAxNiBiaXRzIEdQLXJlbC4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX0dQUkVMMTZXRgk5NAkvKiAxNiBiaXRzIEdQLXJlbC4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX0dQUkVMMTZERgk5NQkvKiAxNiBiaXRzIEdQLXJlbC4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGNjQJOTYJLyogNjQgYml0cyBMVC1yZWwuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19MVE9GRjE0V1IJOTkJLyogTFQtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkYxNERSCTEwMAkvKiBMVC1yZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLworI2RlZmluZSBSX1BBUklTQ19MVE9GRjE2RgkxMDEJLyogMTYgYml0cyBMVC1yZWwuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19MVE9GRjE2V0YJMTAyCS8qIDE2IGJpdHMgTFQtcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkYxNkRGCTEwMwkvKiAxNiBiaXRzIExULXJlbC4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX1NFQ1JFTDY0CTEwNAkvKiA2NCBiaXRzIHNlY3Rpb24gcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfU0VHUkVMNjQJMTEyCS8qIDY0IGJpdHMgc2VnbWVudCByZWwuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNFdSCTExNQkvKiBQTFQtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMTREUgkxMTYJLyogUExULXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisjZGVmaW5lIFJfUEFSSVNDX1BMVE9GRjE2RgkxMTcJLyogMTYgYml0cyBMVC1yZWwuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNldGCTExOAkvKiAxNiBiaXRzIFBMVC1yZWwuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNkRGCTExOQkvKiAxNiBiaXRzIFBMVC1yZWwuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19MVE9GRl9GUFRSNjQJMTIwCS8qIDY0IGJpdHMgTFQtcmVsLiBmdW5jdGlvbiBwdHIuICAqLworI2RlZmluZSBSX1BBUklTQ19MVE9GRl9GUFRSMTRXUgkxMjMJLyogTFQtcmVsLiBmY3QuIHB0ci4sIHJpZ2h0IDE0IGJpdHMuICovCisjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX0ZQVFIxNERSCTEyNAkvKiBMVC1yZWwuIGZjdC4gcHRyLiwgcmlnaHQgMTQgYml0cy4gKi8KKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfRlBUUjE2RgkxMjUJLyogMTYgYml0cyBMVC1yZWwuIGZ1bmN0aW9uIHB0ci4gICovCisjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX0ZQVFIxNldGCTEyNgkvKiAxNiBiaXRzIExULXJlbC4gZnVuY3Rpb24gcHRyLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfRlBUUjE2REYJMTI3CS8qIDE2IGJpdHMgTFQtcmVsLiBmdW5jdGlvbiBwdHIuICAqLworI2RlZmluZSBSX1BBUklTQ19MT1JFU0VSVkUJMTI4CisjZGVmaW5lIFJfUEFSSVNDX0NPUFkJCTEyOAkvKiBDb3B5IHJlbG9jYXRpb24uICAqLworI2RlZmluZSBSX1BBUklTQ19JUExUCQkxMjkJLyogRHluYW1pYyByZWxvYywgaW1wb3J0ZWQgUExUICovCisjZGVmaW5lIFJfUEFSSVNDX0VQTFQJCTEzMAkvKiBEeW5hbWljIHJlbG9jLCBleHBvcnRlZCBQTFQgKi8KKyNkZWZpbmUgUl9QQVJJU0NfVFBSRUwzMgkxNTMJLyogMzIgYml0cyBUUC1yZWwuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19UUFJFTDIxTAkxNTQJLyogVFAtcmVsLiBhZGRyZXNzLCBsZWZ0IDIxIGJpdHMuICAqLworI2RlZmluZSBSX1BBUklTQ19UUFJFTDE0UgkxNTgJLyogVFAtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfVFAyMUwJMTYyCS8qIExULVRQLXJlbC4gYWRkcmVzcywgbGVmdCAyMSBiaXRzLiAqLworI2RlZmluZSBSX1BBUklTQ19MVE9GRl9UUDE0UgkxNjYJLyogTFQtVFAtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiovCisjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX1RQMTRGCTE2NwkvKiAxNCBiaXRzIExULVRQLXJlbC4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX1RQUkVMNjQJMjE2CS8qIDY0IGJpdHMgVFAtcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfVFBSRUwxNFdSCTIxOQkvKiBUUC1yZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLworI2RlZmluZSBSX1BBUklTQ19UUFJFTDE0RFIJMjIwCS8qIFRQLXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisjZGVmaW5lIFJfUEFSSVNDX1RQUkVMMTZGCTIyMQkvKiAxNiBiaXRzIFRQLXJlbC4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX1RQUkVMMTZXRgkyMjIJLyogMTYgYml0cyBUUC1yZWwuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19UUFJFTDE2REYJMjIzCS8qIDE2IGJpdHMgVFAtcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfVFA2NAkyMjQJLyogNjQgYml0cyBMVC1UUC1yZWwuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19MVE9GRl9UUDE0V1IJMjI3CS8qIExULVRQLXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4qLworI2RlZmluZSBSX1BBUklTQ19MVE9GRl9UUDE0RFIJMjI4CS8qIExULVRQLXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4qLworI2RlZmluZSBSX1BBUklTQ19MVE9GRl9UUDE2RgkyMjkJLyogMTYgYml0cyBMVC1UUC1yZWwuIGFkZHJlc3MuICAqLworI2RlZmluZSBSX1BBUklTQ19MVE9GRl9UUDE2V0YJMjMwCS8qIDE2IGJpdHMgTFQtVFAtcmVsLiBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfVFAxNkRGCTIzMQkvKiAxNiBiaXRzIExULVRQLXJlbC4gYWRkcmVzcy4gICovCisjZGVmaW5lIFJfUEFSSVNDX0dOVV9WVEVOVFJZCTIzMgorI2RlZmluZSBSX1BBUklTQ19HTlVfVlRJTkhFUklUCTIzMworI2RlZmluZSBSX1BBUklTQ19UTFNfR0QyMUwJMjM0CS8qIEdEIDIxLWJpdCBsZWZ0LiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfVExTX0dEMTRSCTIzNQkvKiBHRCAxNC1iaXQgcmlnaHQuICAqLworI2RlZmluZSBSX1BBUklTQ19UTFNfR0RDQUxMCTIzNgkvKiBHRCBjYWxsIHRvIF9fdF9nX2EuICAqLworI2RlZmluZSBSX1BBUklTQ19UTFNfTERNMjFMCTIzNwkvKiBMRCBtb2R1bGUgMjEtYml0IGxlZnQuICAqLworI2RlZmluZSBSX1BBUklTQ19UTFNfTERNMTRSCTIzOAkvKiBMRCBtb2R1bGUgMTQtYml0IHJpZ2h0LiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfVExTX0xETUNBTEwJMjM5CS8qIExEIG1vZHVsZSBjYWxsIHRvIF9fdF9nX2EuICAqLworI2RlZmluZSBSX1BBUklTQ19UTFNfTERPMjFMCTI0MAkvKiBMRCBvZmZzZXQgMjEtYml0IGxlZnQuICAqLworI2RlZmluZSBSX1BBUklTQ19UTFNfTERPMTRSCTI0MQkvKiBMRCBvZmZzZXQgMTQtYml0IHJpZ2h0LiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfVExTX0RUUE1PRDMyCTI0MgkvKiBEVFAgbW9kdWxlIDMyLWJpdC4gICovCisjZGVmaW5lIFJfUEFSSVNDX1RMU19EVFBNT0Q2NAkyNDMJLyogRFRQIG1vZHVsZSA2NC1iaXQuICAqLworI2RlZmluZSBSX1BBUklTQ19UTFNfRFRQT0ZGMzIJMjQ0CS8qIERUUCBvZmZzZXQgMzItYml0LiAgKi8KKyNkZWZpbmUgUl9QQVJJU0NfVExTX0RUUE9GRjY0CTI0NQkvKiBEVFAgb2Zmc2V0IDMyLWJpdC4gICovCisjZGVmaW5lIFJfUEFSSVNDX1RMU19MRTIxTAlSX1BBUklTQ19UUFJFTDIxTAorI2RlZmluZSBSX1BBUklTQ19UTFNfTEUxNFIJUl9QQVJJU0NfVFBSRUwxNFIKKyNkZWZpbmUgUl9QQVJJU0NfVExTX0lFMjFMCVJfUEFSSVNDX0xUT0ZGX1RQMjFMCisjZGVmaW5lIFJfUEFSSVNDX1RMU19JRTE0UglSX1BBUklTQ19MVE9GRl9UUDE0UgorI2RlZmluZSBSX1BBUklTQ19UTFNfVFBSRUwzMglSX1BBUklTQ19UUFJFTDMyCisjZGVmaW5lIFJfUEFSSVNDX1RMU19UUFJFTDY0CVJfUEFSSVNDX1RQUkVMNjQKKyNkZWZpbmUgUl9QQVJJU0NfSElSRVNFUlZFCTI1NQorCisvKiBMZWdhbCB2YWx1ZXMgZm9yIHBfdHlwZSBmaWVsZCBvZiBFbGYzMl9QaGRyL0VsZjY0X1BoZHIuICAqLworCisjZGVmaW5lIFBUX0hQX1RMUwkJKFBUX0xPT1MgKyAweDApCisjZGVmaW5lIFBUX0hQX0NPUkVfTk9ORQkJKFBUX0xPT1MgKyAweDEpCisjZGVmaW5lIFBUX0hQX0NPUkVfVkVSU0lPTgkoUFRfTE9PUyArIDB4MikKKyNkZWZpbmUgUFRfSFBfQ09SRV9LRVJORUwJKFBUX0xPT1MgKyAweDMpCisjZGVmaW5lIFBUX0hQX0NPUkVfQ09NTQkJKFBUX0xPT1MgKyAweDQpCisjZGVmaW5lIFBUX0hQX0NPUkVfUFJPQwkJKFBUX0xPT1MgKyAweDUpCisjZGVmaW5lIFBUX0hQX0NPUkVfTE9BREFCTEUJKFBUX0xPT1MgKyAweDYpCisjZGVmaW5lIFBUX0hQX0NPUkVfU1RBQ0sJKFBUX0xPT1MgKyAweDcpCisjZGVmaW5lIFBUX0hQX0NPUkVfU0hNCQkoUFRfTE9PUyArIDB4OCkKKyNkZWZpbmUgUFRfSFBfQ09SRV9NTUYJCShQVF9MT09TICsgMHg5KQorI2RlZmluZSBQVF9IUF9QQVJBTExFTAkJKFBUX0xPT1MgKyAweDEwKQorI2RlZmluZSBQVF9IUF9GQVNUQklORAkJKFBUX0xPT1MgKyAweDExKQorI2RlZmluZSBQVF9IUF9PUFRfQU5OT1QJCShQVF9MT09TICsgMHgxMikKKyNkZWZpbmUgUFRfSFBfSFNMX0FOTk9UCQkoUFRfTE9PUyArIDB4MTMpCisjZGVmaW5lIFBUX0hQX1NUQUNLCQkoUFRfTE9PUyArIDB4MTQpCisKKyNkZWZpbmUgUFRfUEFSSVNDX0FSQ0hFWFQJMHg3MDAwMDAwMAorI2RlZmluZSBQVF9QQVJJU0NfVU5XSU5ECTB4NzAwMDAwMDEKKworLyogTGVnYWwgdmFsdWVzIGZvciBwX2ZsYWdzIGZpZWxkIG9mIEVsZjMyX1BoZHIvRWxmNjRfUGhkci4gICovCisKKyNkZWZpbmUgUEZfUEFSSVNDX1NCUAkJMHgwODAwMDAwMAorCisjZGVmaW5lIFBGX0hQX1BBR0VfU0laRQkJMHgwMDEwMDAwMAorI2RlZmluZSBQRl9IUF9GQVJfU0hBUkVECTB4MDAyMDAwMDAKKyNkZWZpbmUgUEZfSFBfTkVBUl9TSEFSRUQJMHgwMDQwMDAwMAorI2RlZmluZSBQRl9IUF9DT0RFCQkweDAxMDAwMDAwCisjZGVmaW5lIFBGX0hQX01PRElGWQkJMHgwMjAwMDAwMAorI2RlZmluZSBQRl9IUF9MQVpZU1dBUAkJMHgwNDAwMDAwMAorI2RlZmluZSBQRl9IUF9TQlAJCTB4MDgwMDAwMDAKKworCisvKiBBbHBoYSBzcGVjaWZpYyBkZWZpbml0aW9ucy4gICovCisKKy8qIExlZ2FsIHZhbHVlcyBmb3IgZV9mbGFncyBmaWVsZCBvZiBFbGY2NF9FaGRyLiAgKi8KKworI2RlZmluZSBFRl9BTFBIQV8zMkJJVAkJMQkvKiBBbGwgYWRkcmVzc2VzIG11c3QgYmUgPCAyR0IuICAqLworI2RlZmluZSBFRl9BTFBIQV9DQU5SRUxBWAkyCS8qIFJlbG9jYXRpb25zIGZvciByZWxheGluZyBleGlzdC4gICovCisKKy8qIExlZ2FsIHZhbHVlcyBmb3Igc2hfdHlwZSBmaWVsZCBvZiBFbGY2NF9TaGRyLiAgKi8KKworLyogVGhlc2UgdHdvIGFyZSBwcmltZXJpbHkgY29uY2VybmVkIHdpdGggRUNPRkYgZGVidWdnaW5nIGluZm8uICAqLworI2RlZmluZSBTSFRfQUxQSEFfREVCVUcJCTB4NzAwMDAwMDEKKyNkZWZpbmUgU0hUX0FMUEhBX1JFR0lORk8JMHg3MDAwMDAwMgorCisvKiBMZWdhbCB2YWx1ZXMgZm9yIHNoX2ZsYWdzIGZpZWxkIG9mIEVsZjY0X1NoZHIuICAqLworCisjZGVmaW5lIFNIRl9BTFBIQV9HUFJFTAkJMHgxMDAwMDAwMAorCisvKiBMZWdhbCB2YWx1ZXMgZm9yIHN0X290aGVyIGZpZWxkIG9mIEVsZjY0X1N5bS4gICovCisjZGVmaW5lIFNUT19BTFBIQV9OT1BWCQkweDgwCS8qIE5vIFBWIHJlcXVpcmVkLiAgKi8KKyNkZWZpbmUgU1RPX0FMUEhBX1NURF9HUExPQUQJMHg4OAkvKiBQViBvbmx5IHVzZWQgZm9yIGluaXRpYWwgbGRncC4gICovCisKKy8qIEFscGhhIHJlbG9jcy4gICovCisKKyNkZWZpbmUgUl9BTFBIQV9OT05FCQkwCS8qIE5vIHJlbG9jICovCisjZGVmaW5lIFJfQUxQSEFfUkVGTE9ORwkJMQkvKiBEaXJlY3QgMzIgYml0ICovCisjZGVmaW5lIFJfQUxQSEFfUkVGUVVBRAkJMgkvKiBEaXJlY3QgNjQgYml0ICovCisjZGVmaW5lIFJfQUxQSEFfR1BSRUwzMgkJMwkvKiBHUCByZWxhdGl2ZSAzMiBiaXQgKi8KKyNkZWZpbmUgUl9BTFBIQV9MSVRFUkFMCQk0CS8qIEdQIHJlbGF0aXZlIDE2IGJpdCB3L29wdGltaXphdGlvbiAqLworI2RlZmluZSBSX0FMUEhBX0xJVFVTRQkJNQkvKiBPcHRpbWl6YXRpb24gaGludCBmb3IgTElURVJBTCAqLworI2RlZmluZSBSX0FMUEhBX0dQRElTUAkJNgkvKiBBZGQgZGlzcGxhY2VtZW50IHRvIEdQICovCisjZGVmaW5lIFJfQUxQSEFfQlJBRERSCQk3CS8qIFBDKzQgcmVsYXRpdmUgMjMgYml0IHNoaWZ0ZWQgKi8KKyNkZWZpbmUgUl9BTFBIQV9ISU5UCQk4CS8qIFBDKzQgcmVsYXRpdmUgMTYgYml0IHNoaWZ0ZWQgKi8KKyNkZWZpbmUgUl9BTFBIQV9TUkVMMTYJCTkJLyogUEMgcmVsYXRpdmUgMTYgYml0ICovCisjZGVmaW5lIFJfQUxQSEFfU1JFTDMyCQkxMAkvKiBQQyByZWxhdGl2ZSAzMiBiaXQgKi8KKyNkZWZpbmUgUl9BTFBIQV9TUkVMNjQJCTExCS8qIFBDIHJlbGF0aXZlIDY0IGJpdCAqLworI2RlZmluZSBSX0FMUEhBX0dQUkVMSElHSAkxNwkvKiBHUCByZWxhdGl2ZSAzMiBiaXQsIGhpZ2ggMTYgYml0cyAqLworI2RlZmluZSBSX0FMUEhBX0dQUkVMTE9XCTE4CS8qIEdQIHJlbGF0aXZlIDMyIGJpdCwgbG93IDE2IGJpdHMgKi8KKyNkZWZpbmUgUl9BTFBIQV9HUFJFTDE2CQkxOQkvKiBHUCByZWxhdGl2ZSAxNiBiaXQgKi8KKyNkZWZpbmUgUl9BTFBIQV9DT1BZCQkyNAkvKiBDb3B5IHN5bWJvbCBhdCBydW50aW1lICovCisjZGVmaW5lIFJfQUxQSEFfR0xPQl9EQVQJMjUJLyogQ3JlYXRlIEdPVCBlbnRyeSAqLworI2RlZmluZSBSX0FMUEhBX0pNUF9TTE9UCTI2CS8qIENyZWF0ZSBQTFQgZW50cnkgKi8KKyNkZWZpbmUgUl9BTFBIQV9SRUxBVElWRQkyNwkvKiBBZGp1c3QgYnkgcHJvZ3JhbSBiYXNlICovCisjZGVmaW5lIFJfQUxQSEFfVExTX0dEX0hJCTI4CisjZGVmaW5lIFJfQUxQSEFfVExTR0QJCTI5CisjZGVmaW5lIFJfQUxQSEFfVExTX0xETQkJMzAKKyNkZWZpbmUgUl9BTFBIQV9EVFBNT0Q2NAkzMQorI2RlZmluZSBSX0FMUEhBX0dPVERUUFJFTAkzMgorI2RlZmluZSBSX0FMUEhBX0RUUFJFTDY0CTMzCisjZGVmaW5lIFJfQUxQSEFfRFRQUkVMSEkJMzQKKyNkZWZpbmUgUl9BTFBIQV9EVFBSRUxMTwkzNQorI2RlZmluZSBSX0FMUEhBX0RUUFJFTDE2CTM2CisjZGVmaW5lIFJfQUxQSEFfR09UVFBSRUwJMzcKKyNkZWZpbmUgUl9BTFBIQV9UUFJFTDY0CQkzOAorI2RlZmluZSBSX0FMUEhBX1RQUkVMSEkJCTM5CisjZGVmaW5lIFJfQUxQSEFfVFBSRUxMTwkJNDAKKyNkZWZpbmUgUl9BTFBIQV9UUFJFTDE2CQk0MQorLyogS2VlcCB0aGlzIHRoZSBsYXN0IGVudHJ5LiAgKi8KKyNkZWZpbmUgUl9BTFBIQV9OVU0JCTQ2CisKKy8qIE1hZ2ljIHZhbHVlcyBvZiB0aGUgTElUVVNFIHJlbG9jYXRpb24gYWRkZW5kLiAgKi8KKyNkZWZpbmUgTElUVVNFX0FMUEhBX0FERFIJMAorI2RlZmluZSBMSVRVU0VfQUxQSEFfQkFTRQkxCisjZGVmaW5lIExJVFVTRV9BTFBIQV9CWVRPRkYJMgorI2RlZmluZSBMSVRVU0VfQUxQSEFfSlNSCTMKKyNkZWZpbmUgTElUVVNFX0FMUEhBX1RMU19HRAk0CisjZGVmaW5lIExJVFVTRV9BTFBIQV9UTFNfTERNCTUKKworLyogTGVnYWwgdmFsdWVzIGZvciBkX3RhZyBvZiBFbGY2NF9EeW4uICAqLworI2RlZmluZSBEVF9BTFBIQV9QTFRSTwkJKERUX0xPUFJPQyArIDApCisjZGVmaW5lIERUX0FMUEhBX05VTQkJMQorCisvKiBQb3dlclBDIHNwZWNpZmljIGRlY2xhcmF0aW9ucyAqLworCisvKiBWYWx1ZXMgZm9yIEVsZjMyLzY0X0VoZHIuZV9mbGFncy4gICovCisjZGVmaW5lIEVGX1BQQ19FTUIJCTB4ODAwMDAwMDAJLyogUG93ZXJQQyBlbWJlZGRlZCBmbGFnICovCisKKy8qIEN5Z251cyBsb2NhbCBiaXRzIGJlbG93ICovCisjZGVmaW5lIEVGX1BQQ19SRUxPQ0FUQUJMRQkweDAwMDEwMDAwCS8qIFBvd2VyUEMgLW1yZWxvY2F0YWJsZSBmbGFnKi8KKyNkZWZpbmUgRUZfUFBDX1JFTE9DQVRBQkxFX0xJQgkweDAwMDA4MDAwCS8qIFBvd2VyUEMgLW1yZWxvY2F0YWJsZS1saWIKKwkJCQkJCSAgIGZsYWcgKi8KKworLyogUG93ZXJQQyByZWxvY2F0aW9ucyBkZWZpbmVkIGJ5IHRoZSBBQklzICovCisjZGVmaW5lIFJfUFBDX05PTkUJCTAKKyNkZWZpbmUgUl9QUENfQUREUjMyCQkxCS8qIDMyYml0IGFic29sdXRlIGFkZHJlc3MgKi8KKyNkZWZpbmUgUl9QUENfQUREUjI0CQkyCS8qIDI2Yml0IGFkZHJlc3MsIDIgYml0cyBpZ25vcmVkLiAgKi8KKyNkZWZpbmUgUl9QUENfQUREUjE2CQkzCS8qIDE2Yml0IGFic29sdXRlIGFkZHJlc3MgKi8KKyNkZWZpbmUgUl9QUENfQUREUjE2X0xPCQk0CS8qIGxvd2VyIDE2Yml0IG9mIGFic29sdXRlIGFkZHJlc3MgKi8KKyNkZWZpbmUgUl9QUENfQUREUjE2X0hJCQk1CS8qIGhpZ2ggMTZiaXQgb2YgYWJzb2x1dGUgYWRkcmVzcyAqLworI2RlZmluZSBSX1BQQ19BRERSMTZfSEEJCTYJLyogYWRqdXN0ZWQgaGlnaCAxNmJpdCAqLworI2RlZmluZSBSX1BQQ19BRERSMTQJCTcJLyogMTZiaXQgYWRkcmVzcywgMiBiaXRzIGlnbm9yZWQgKi8KKyNkZWZpbmUgUl9QUENfQUREUjE0X0JSVEFLRU4JOAorI2RlZmluZSBSX1BQQ19BRERSMTRfQlJOVEFLRU4JOQorI2RlZmluZSBSX1BQQ19SRUwyNAkJMTAJLyogUEMgcmVsYXRpdmUgMjYgYml0ICovCisjZGVmaW5lIFJfUFBDX1JFTDE0CQkxMQkvKiBQQyByZWxhdGl2ZSAxNiBiaXQgKi8KKyNkZWZpbmUgUl9QUENfUkVMMTRfQlJUQUtFTgkxMgorI2RlZmluZSBSX1BQQ19SRUwxNF9CUk5UQUtFTgkxMworI2RlZmluZSBSX1BQQ19HT1QxNgkJMTQKKyNkZWZpbmUgUl9QUENfR09UMTZfTE8JCTE1CisjZGVmaW5lIFJfUFBDX0dPVDE2X0hJCQkxNgorI2RlZmluZSBSX1BQQ19HT1QxNl9IQQkJMTcKKyNkZWZpbmUgUl9QUENfUExUUkVMMjQJCTE4CisjZGVmaW5lIFJfUFBDX0NPUFkJCTE5CisjZGVmaW5lIFJfUFBDX0dMT0JfREFUCQkyMAorI2RlZmluZSBSX1BQQ19KTVBfU0xPVAkJMjEKKyNkZWZpbmUgUl9QUENfUkVMQVRJVkUJCTIyCisjZGVmaW5lIFJfUFBDX0xPQ0FMMjRQQwkJMjMKKyNkZWZpbmUgUl9QUENfVUFERFIzMgkJMjQKKyNkZWZpbmUgUl9QUENfVUFERFIxNgkJMjUKKyNkZWZpbmUgUl9QUENfUkVMMzIJCTI2CisjZGVmaW5lIFJfUFBDX1BMVDMyCQkyNworI2RlZmluZSBSX1BQQ19QTFRSRUwzMgkJMjgKKyNkZWZpbmUgUl9QUENfUExUMTZfTE8JCTI5CisjZGVmaW5lIFJfUFBDX1BMVDE2X0hJCQkzMAorI2RlZmluZSBSX1BQQ19QTFQxNl9IQQkJMzEKKyNkZWZpbmUgUl9QUENfU0RBUkVMMTYJCTMyCisjZGVmaW5lIFJfUFBDX1NFQ1RPRkYJCTMzCisjZGVmaW5lIFJfUFBDX1NFQ1RPRkZfTE8JMzQKKyNkZWZpbmUgUl9QUENfU0VDVE9GRl9ISQkzNQorI2RlZmluZSBSX1BQQ19TRUNUT0ZGX0hBCTM2CisKKy8qIFBvd2VyUEMgcmVsb2NhdGlvbnMgZGVmaW5lZCBmb3IgdGhlIFRMUyBhY2Nlc3MgQUJJLiAgKi8KKyNkZWZpbmUgUl9QUENfVExTCQk2NyAvKiBub25lCShzeW0rYWRkKUB0bHMgKi8KKyNkZWZpbmUgUl9QUENfRFRQTU9EMzIJCTY4IC8qIHdvcmQzMgkoc3ltK2FkZClAZHRwbW9kICovCisjZGVmaW5lIFJfUFBDX1RQUkVMMTYJCTY5IC8qIGhhbGYxNioJKHN5bSthZGQpQHRwcmVsICovCisjZGVmaW5lIFJfUFBDX1RQUkVMMTZfTE8JNzAgLyogaGFsZjE2CShzeW0rYWRkKUB0cHJlbEBsICovCisjZGVmaW5lIFJfUFBDX1RQUkVMMTZfSEkJNzEgLyogaGFsZjE2CShzeW0rYWRkKUB0cHJlbEBoICovCisjZGVmaW5lIFJfUFBDX1RQUkVMMTZfSEEJNzIgLyogaGFsZjE2CShzeW0rYWRkKUB0cHJlbEBoYSAqLworI2RlZmluZSBSX1BQQ19UUFJFTDMyCQk3MyAvKiB3b3JkMzIJKHN5bSthZGQpQHRwcmVsICovCisjZGVmaW5lIFJfUFBDX0RUUFJFTDE2CQk3NCAvKiBoYWxmMTYqCShzeW0rYWRkKUBkdHByZWwgKi8KKyNkZWZpbmUgUl9QUENfRFRQUkVMMTZfTE8JNzUgLyogaGFsZjE2CShzeW0rYWRkKUBkdHByZWxAbCAqLworI2RlZmluZSBSX1BQQ19EVFBSRUwxNl9ISQk3NiAvKiBoYWxmMTYJKHN5bSthZGQpQGR0cHJlbEBoICovCisjZGVmaW5lIFJfUFBDX0RUUFJFTDE2X0hBCTc3IC8qIGhhbGYxNgkoc3ltK2FkZClAZHRwcmVsQGhhICovCisjZGVmaW5lIFJfUFBDX0RUUFJFTDMyCQk3OCAvKiB3b3JkMzIJKHN5bSthZGQpQGR0cHJlbCAqLworI2RlZmluZSBSX1BQQ19HT1RfVExTR0QxNgk3OSAvKiBoYWxmMTYqCShzeW0rYWRkKUBnb3RAdGxzZ2QgKi8KKyNkZWZpbmUgUl9QUENfR09UX1RMU0dEMTZfTE8JODAgLyogaGFsZjE2CShzeW0rYWRkKUBnb3RAdGxzZ2RAbCAqLworI2RlZmluZSBSX1BQQ19HT1RfVExTR0QxNl9ISQk4MSAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEB0bHNnZEBoICovCisjZGVmaW5lIFJfUFBDX0dPVF9UTFNHRDE2X0hBCTgyIC8qIGhhbGYxNgkoc3ltK2FkZClAZ290QHRsc2dkQGhhICovCisjZGVmaW5lIFJfUFBDX0dPVF9UTFNMRDE2CTgzIC8qIGhhbGYxNioJKHN5bSthZGQpQGdvdEB0bHNsZCAqLworI2RlZmluZSBSX1BQQ19HT1RfVExTTEQxNl9MTwk4NCAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEB0bHNsZEBsICovCisjZGVmaW5lIFJfUFBDX0dPVF9UTFNMRDE2X0hJCTg1IC8qIGhhbGYxNgkoc3ltK2FkZClAZ290QHRsc2xkQGggKi8KKyNkZWZpbmUgUl9QUENfR09UX1RMU0xEMTZfSEEJODYgLyogaGFsZjE2CShzeW0rYWRkKUBnb3RAdGxzbGRAaGEgKi8KKyNkZWZpbmUgUl9QUENfR09UX1RQUkVMMTYJODcgLyogaGFsZjE2Kgkoc3ltK2FkZClAZ290QHRwcmVsICovCisjZGVmaW5lIFJfUFBDX0dPVF9UUFJFTDE2X0xPCTg4IC8qIGhhbGYxNgkoc3ltK2FkZClAZ290QHRwcmVsQGwgKi8KKyNkZWZpbmUgUl9QUENfR09UX1RQUkVMMTZfSEkJODkgLyogaGFsZjE2CShzeW0rYWRkKUBnb3RAdHByZWxAaCAqLworI2RlZmluZSBSX1BQQ19HT1RfVFBSRUwxNl9IQQk5MCAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEB0cHJlbEBoYSAqLworI2RlZmluZSBSX1BQQ19HT1RfRFRQUkVMMTYJOTEgLyogaGFsZjE2Kgkoc3ltK2FkZClAZ290QGR0cHJlbCAqLworI2RlZmluZSBSX1BQQ19HT1RfRFRQUkVMMTZfTE8JOTIgLyogaGFsZjE2Kgkoc3ltK2FkZClAZ290QGR0cHJlbEBsICovCisjZGVmaW5lIFJfUFBDX0dPVF9EVFBSRUwxNl9ISQk5MyAvKiBoYWxmMTYqCShzeW0rYWRkKUBnb3RAZHRwcmVsQGggKi8KKyNkZWZpbmUgUl9QUENfR09UX0RUUFJFTDE2X0hBCTk0IC8qIGhhbGYxNioJKHN5bSthZGQpQGdvdEBkdHByZWxAaGEgKi8KKworLyogS2VlcCB0aGlzIHRoZSBsYXN0IGVudHJ5LiAgKi8KKyNkZWZpbmUgUl9QUENfTlVNCQk5NQorCisvKiBUaGUgcmVtYWluaW5nIHJlbG9jcyBhcmUgZnJvbSB0aGUgRW1iZWRkZWQgRUxGIEFCSSwgYW5kIGFyZSBub3QKKyAgIGluIHRoZSBTVlI0IEVMRiBBQkkuICAqLworI2RlZmluZSBSX1BQQ19FTUJfTkFERFIzMgkxMDEKKyNkZWZpbmUgUl9QUENfRU1CX05BRERSMTYJMTAyCisjZGVmaW5lIFJfUFBDX0VNQl9OQUREUjE2X0xPCTEwMworI2RlZmluZSBSX1BQQ19FTUJfTkFERFIxNl9ISQkxMDQKKyNkZWZpbmUgUl9QUENfRU1CX05BRERSMTZfSEEJMTA1CisjZGVmaW5lIFJfUFBDX0VNQl9TREFJMTYJMTA2CisjZGVmaW5lIFJfUFBDX0VNQl9TREEySTE2CTEwNworI2RlZmluZSBSX1BQQ19FTUJfU0RBMlJFTAkxMDgKKyNkZWZpbmUgUl9QUENfRU1CX1NEQTIxCQkxMDkJLyogMTYgYml0IG9mZnNldCBpbiBTREEgKi8KKyNkZWZpbmUgUl9QUENfRU1CX01SS1JFRgkxMTAKKyNkZWZpbmUgUl9QUENfRU1CX1JFTFNFQzE2CTExMQorI2RlZmluZSBSX1BQQ19FTUJfUkVMU1RfTE8JMTEyCisjZGVmaW5lIFJfUFBDX0VNQl9SRUxTVF9ISQkxMTMKKyNkZWZpbmUgUl9QUENfRU1CX1JFTFNUX0hBCTExNAorI2RlZmluZSBSX1BQQ19FTUJfQklUX0ZMRAkxMTUKKyNkZWZpbmUgUl9QUENfRU1CX1JFTFNEQQkxMTYJLyogMTYgYml0IHJlbGF0aXZlIG9mZnNldCBpbiBTREEgKi8KKworLyogRGlhYiB0b29sIHJlbG9jYXRpb25zLiAgKi8KKyNkZWZpbmUgUl9QUENfRElBQl9TREEyMV9MTwkxODAJLyogbGlrZSBFTUJfU0RBMjEsIGJ1dCBsb3dlciAxNiBiaXQgKi8KKyNkZWZpbmUgUl9QUENfRElBQl9TREEyMV9ISQkxODEJLyogbGlrZSBFTUJfU0RBMjEsIGJ1dCBoaWdoIDE2IGJpdCAqLworI2RlZmluZSBSX1BQQ19ESUFCX1NEQTIxX0hBCTE4MgkvKiBsaWtlIEVNQl9TREEyMSwgYWRqdXN0ZWQgaGlnaCAxNiAqLworI2RlZmluZSBSX1BQQ19ESUFCX1JFTFNEQV9MTwkxODMJLyogbGlrZSBFTUJfUkVMU0RBLCBidXQgbG93ZXIgMTYgYml0ICovCisjZGVmaW5lIFJfUFBDX0RJQUJfUkVMU0RBX0hJCTE4NAkvKiBsaWtlIEVNQl9SRUxTREEsIGJ1dCBoaWdoIDE2IGJpdCAqLworI2RlZmluZSBSX1BQQ19ESUFCX1JFTFNEQV9IQQkxODUJLyogbGlrZSBFTUJfUkVMU0RBLCBhZGp1c3RlZCBoaWdoIDE2ICovCisKKy8qIEdOVSByZWxvY3MgdXNlZCBpbiBQSUMgY29kZSBzZXF1ZW5jZXMuICAqLworI2RlZmluZSBSX1BQQ19SRUwxNgkJMjQ5CS8qIHdvcmQzMiAgIChzeW0tLikgKi8KKyNkZWZpbmUgUl9QUENfUkVMMTZfTE8JCTI1MAkvKiBoYWxmMTYgICAoc3ltLS4pQGwgKi8KKyNkZWZpbmUgUl9QUENfUkVMMTZfSEkJCTI1MQkvKiBoYWxmMTYgICAoc3ltLS4pQGggKi8KKyNkZWZpbmUgUl9QUENfUkVMMTZfSEEJCTI1MgkvKiBoYWxmMTYgICAoc3ltLS4pQGhhICovCisKKy8qIFRoaXMgaXMgYSBwaG9ueSByZWxvYyB0byBoYW5kbGUgYW55IG9sZCBmYXNoaW9uZWQgVE9DMTYgcmVmZXJlbmNlcworICAgdGhhdCBtYXkgc3RpbGwgYmUgaW4gb2JqZWN0IGZpbGVzLiAgKi8KKyNkZWZpbmUgUl9QUENfVE9DMTYJCTI1NQorCisvKiBQb3dlclBDIHNwZWNpZmljIHZhbHVlcyBmb3IgdGhlIER5biBkX3RhZyBmaWVsZC4gICovCisjZGVmaW5lIERUX1BQQ19HT1QJCShEVF9MT1BST0MgKyAwKQorI2RlZmluZSBEVF9QUENfTlVNCQkxCisKKy8qIFBvd2VyUEM2NCByZWxvY2F0aW9ucyBkZWZpbmVkIGJ5IHRoZSBBQklzICovCisjZGVmaW5lIFJfUFBDNjRfTk9ORQkJUl9QUENfTk9ORQorI2RlZmluZSBSX1BQQzY0X0FERFIzMgkJUl9QUENfQUREUjMyIC8qIDMyYml0IGFic29sdXRlIGFkZHJlc3MgKi8KKyNkZWZpbmUgUl9QUEM2NF9BRERSMjQJCVJfUFBDX0FERFIyNCAvKiAyNmJpdCBhZGRyZXNzLCB3b3JkIGFsaWduZWQgKi8KKyNkZWZpbmUgUl9QUEM2NF9BRERSMTYJCVJfUFBDX0FERFIxNiAvKiAxNmJpdCBhYnNvbHV0ZSBhZGRyZXNzICovCisjZGVmaW5lIFJfUFBDNjRfQUREUjE2X0xPCVJfUFBDX0FERFIxNl9MTwkvKiBsb3dlciAxNmJpdHMgb2YgYWRkcmVzcyAqLworI2RlZmluZSBSX1BQQzY0X0FERFIxNl9ISQlSX1BQQ19BRERSMTZfSEkJLyogaGlnaCAxNmJpdHMgb2YgYWRkcmVzcy4gKi8KKyNkZWZpbmUgUl9QUEM2NF9BRERSMTZfSEEJUl9QUENfQUREUjE2X0hBIC8qIGFkanVzdGVkIGhpZ2ggMTZiaXRzLiAgKi8KKyNkZWZpbmUgUl9QUEM2NF9BRERSMTQJCVJfUFBDX0FERFIxNCAvKiAxNmJpdCBhZGRyZXNzLCB3b3JkIGFsaWduZWQgKi8KKyNkZWZpbmUgUl9QUEM2NF9BRERSMTRfQlJUQUtFTglSX1BQQ19BRERSMTRfQlJUQUtFTgorI2RlZmluZSBSX1BQQzY0X0FERFIxNF9CUk5UQUtFTglSX1BQQ19BRERSMTRfQlJOVEFLRU4KKyNkZWZpbmUgUl9QUEM2NF9SRUwyNAkJUl9QUENfUkVMMjQgLyogUEMtcmVsLiAyNiBiaXQsIHdvcmQgYWxpZ25lZCAqLworI2RlZmluZSBSX1BQQzY0X1JFTDE0CQlSX1BQQ19SRUwxNCAvKiBQQyByZWxhdGl2ZSAxNiBiaXQgKi8KKyNkZWZpbmUgUl9QUEM2NF9SRUwxNF9CUlRBS0VOCVJfUFBDX1JFTDE0X0JSVEFLRU4KKyNkZWZpbmUgUl9QUEM2NF9SRUwxNF9CUk5UQUtFTglSX1BQQ19SRUwxNF9CUk5UQUtFTgorI2RlZmluZSBSX1BQQzY0X0dPVDE2CQlSX1BQQ19HT1QxNgorI2RlZmluZSBSX1BQQzY0X0dPVDE2X0xPCVJfUFBDX0dPVDE2X0xPCisjZGVmaW5lIFJfUFBDNjRfR09UMTZfSEkJUl9QUENfR09UMTZfSEkKKyNkZWZpbmUgUl9QUEM2NF9HT1QxNl9IQQlSX1BQQ19HT1QxNl9IQQorCisjZGVmaW5lIFJfUFBDNjRfQ09QWQkJUl9QUENfQ09QWQorI2RlZmluZSBSX1BQQzY0X0dMT0JfREFUCVJfUFBDX0dMT0JfREFUCisjZGVmaW5lIFJfUFBDNjRfSk1QX1NMT1QJUl9QUENfSk1QX1NMT1QKKyNkZWZpbmUgUl9QUEM2NF9SRUxBVElWRQlSX1BQQ19SRUxBVElWRQorCisjZGVmaW5lIFJfUFBDNjRfVUFERFIzMgkJUl9QUENfVUFERFIzMgorI2RlZmluZSBSX1BQQzY0X1VBRERSMTYJCVJfUFBDX1VBRERSMTYKKyNkZWZpbmUgUl9QUEM2NF9SRUwzMgkJUl9QUENfUkVMMzIKKyNkZWZpbmUgUl9QUEM2NF9QTFQzMgkJUl9QUENfUExUMzIKKyNkZWZpbmUgUl9QUEM2NF9QTFRSRUwzMglSX1BQQ19QTFRSRUwzMgorI2RlZmluZSBSX1BQQzY0X1BMVDE2X0xPCVJfUFBDX1BMVDE2X0xPCisjZGVmaW5lIFJfUFBDNjRfUExUMTZfSEkJUl9QUENfUExUMTZfSEkKKyNkZWZpbmUgUl9QUEM2NF9QTFQxNl9IQQlSX1BQQ19QTFQxNl9IQQorCisjZGVmaW5lIFJfUFBDNjRfU0VDVE9GRgkJUl9QUENfU0VDVE9GRgorI2RlZmluZSBSX1BQQzY0X1NFQ1RPRkZfTE8JUl9QUENfU0VDVE9GRl9MTworI2RlZmluZSBSX1BQQzY0X1NFQ1RPRkZfSEkJUl9QUENfU0VDVE9GRl9ISQorI2RlZmluZSBSX1BQQzY0X1NFQ1RPRkZfSEEJUl9QUENfU0VDVE9GRl9IQQorI2RlZmluZSBSX1BQQzY0X0FERFIzMAkJMzcgLyogd29yZDMwIChTICsgQSAtIFApID4+IDIgKi8KKyNkZWZpbmUgUl9QUEM2NF9BRERSNjQJCTM4IC8qIGRvdWJsZXdvcmQ2NCBTICsgQSAqLworI2RlZmluZSBSX1BQQzY0X0FERFIxNl9ISUdIRVIJMzkgLyogaGFsZjE2ICNoaWdoZXIoUyArIEEpICovCisjZGVmaW5lIFJfUFBDNjRfQUREUjE2X0hJR0hFUkEJNDAgLyogaGFsZjE2ICNoaWdoZXJhKFMgKyBBKSAqLworI2RlZmluZSBSX1BQQzY0X0FERFIxNl9ISUdIRVNUCTQxIC8qIGhhbGYxNiAjaGlnaGVzdChTICsgQSkgKi8KKyNkZWZpbmUgUl9QUEM2NF9BRERSMTZfSElHSEVTVEEJNDIgLyogaGFsZjE2ICNoaWdoZXN0YShTICsgQSkgKi8KKyNkZWZpbmUgUl9QUEM2NF9VQUREUjY0CQk0MyAvKiBkb3VibGV3b3JkNjQgUyArIEEgKi8KKyNkZWZpbmUgUl9QUEM2NF9SRUw2NAkJNDQgLyogZG91Ymxld29yZDY0IFMgKyBBIC0gUCAqLworI2RlZmluZSBSX1BQQzY0X1BMVDY0CQk0NSAvKiBkb3VibGV3b3JkNjQgTCArIEEgKi8KKyNkZWZpbmUgUl9QUEM2NF9QTFRSRUw2NAk0NiAvKiBkb3VibGV3b3JkNjQgTCArIEEgLSBQICovCisjZGVmaW5lIFJfUFBDNjRfVE9DMTYJCTQ3IC8qIGhhbGYxNiogUyArIEEgLSAuVE9DICovCisjZGVmaW5lIFJfUFBDNjRfVE9DMTZfTE8JNDggLyogaGFsZjE2ICNsbyhTICsgQSAtIC5UT0MuKSAqLworI2RlZmluZSBSX1BQQzY0X1RPQzE2X0hJCTQ5IC8qIGhhbGYxNiAjaGkoUyArIEEgLSAuVE9DLikgKi8KKyNkZWZpbmUgUl9QUEM2NF9UT0MxNl9IQQk1MCAvKiBoYWxmMTYgI2hhKFMgKyBBIC0gLlRPQy4pICovCisjZGVmaW5lIFJfUFBDNjRfVE9DCQk1MSAvKiBkb3VibGV3b3JkNjQgLlRPQyAqLworI2RlZmluZSBSX1BQQzY0X1BMVEdPVDE2CTUyIC8qIGhhbGYxNiogTSArIEEgKi8KKyNkZWZpbmUgUl9QUEM2NF9QTFRHT1QxNl9MTwk1MyAvKiBoYWxmMTYgI2xvKE0gKyBBKSAqLworI2RlZmluZSBSX1BQQzY0X1BMVEdPVDE2X0hJCTU0IC8qIGhhbGYxNiAjaGkoTSArIEEpICovCisjZGVmaW5lIFJfUFBDNjRfUExUR09UMTZfSEEJNTUgLyogaGFsZjE2ICNoYShNICsgQSkgKi8KKworI2RlZmluZSBSX1BQQzY0X0FERFIxNl9EUwk1NiAvKiBoYWxmMTZkcyogKFMgKyBBKSA+PiAyICovCisjZGVmaW5lIFJfUFBDNjRfQUREUjE2X0xPX0RTCTU3IC8qIGhhbGYxNmRzICAjbG8oUyArIEEpID4+IDIgKi8KKyNkZWZpbmUgUl9QUEM2NF9HT1QxNl9EUwk1OCAvKiBoYWxmMTZkcyogKEcgKyBBKSA+PiAyICovCisjZGVmaW5lIFJfUFBDNjRfR09UMTZfTE9fRFMJNTkgLyogaGFsZjE2ZHMgICNsbyhHICsgQSkgPj4gMiAqLworI2RlZmluZSBSX1BQQzY0X1BMVDE2X0xPX0RTCTYwIC8qIGhhbGYxNmRzICAjbG8oTCArIEEpID4+IDIgKi8KKyNkZWZpbmUgUl9QUEM2NF9TRUNUT0ZGX0RTCTYxIC8qIGhhbGYxNmRzKiAoUiArIEEpID4+IDIgKi8KKyNkZWZpbmUgUl9QUEM2NF9TRUNUT0ZGX0xPX0RTCTYyIC8qIGhhbGYxNmRzICAjbG8oUiArIEEpID4+IDIgKi8KKyNkZWZpbmUgUl9QUEM2NF9UT0MxNl9EUwk2MyAvKiBoYWxmMTZkcyogKFMgKyBBIC0gLlRPQy4pID4+IDIgKi8KKyNkZWZpbmUgUl9QUEM2NF9UT0MxNl9MT19EUwk2NCAvKiBoYWxmMTZkcyAgI2xvKFMgKyBBIC0gLlRPQy4pID4+IDIgKi8KKyNkZWZpbmUgUl9QUEM2NF9QTFRHT1QxNl9EUwk2NSAvKiBoYWxmMTZkcyogKE0gKyBBKSA+PiAyICovCisjZGVmaW5lIFJfUFBDNjRfUExUR09UMTZfTE9fRFMJNjYgLyogaGFsZjE2ZHMgICNsbyhNICsgQSkgPj4gMiAqLworCisvKiBQb3dlclBDNjQgcmVsb2NhdGlvbnMgZGVmaW5lZCBmb3IgdGhlIFRMUyBhY2Nlc3MgQUJJLiAgKi8KKyNkZWZpbmUgUl9QUEM2NF9UTFMJCTY3IC8qIG5vbmUJKHN5bSthZGQpQHRscyAqLworI2RlZmluZSBSX1BQQzY0X0RUUE1PRDY0CTY4IC8qIGRvdWJsZXdvcmQ2NCAoc3ltK2FkZClAZHRwbW9kICovCisjZGVmaW5lIFJfUFBDNjRfVFBSRUwxNgkJNjkgLyogaGFsZjE2Kgkoc3ltK2FkZClAdHByZWwgKi8KKyNkZWZpbmUgUl9QUEM2NF9UUFJFTDE2X0xPCTcwIC8qIGhhbGYxNgkoc3ltK2FkZClAdHByZWxAbCAqLworI2RlZmluZSBSX1BQQzY0X1RQUkVMMTZfSEkJNzEgLyogaGFsZjE2CShzeW0rYWRkKUB0cHJlbEBoICovCisjZGVmaW5lIFJfUFBDNjRfVFBSRUwxNl9IQQk3MiAvKiBoYWxmMTYJKHN5bSthZGQpQHRwcmVsQGhhICovCisjZGVmaW5lIFJfUFBDNjRfVFBSRUw2NAkJNzMgLyogZG91Ymxld29yZDY0IChzeW0rYWRkKUB0cHJlbCAqLworI2RlZmluZSBSX1BQQzY0X0RUUFJFTDE2CTc0IC8qIGhhbGYxNioJKHN5bSthZGQpQGR0cHJlbCAqLworI2RlZmluZSBSX1BQQzY0X0RUUFJFTDE2X0xPCTc1IC8qIGhhbGYxNgkoc3ltK2FkZClAZHRwcmVsQGwgKi8KKyNkZWZpbmUgUl9QUEM2NF9EVFBSRUwxNl9ISQk3NiAvKiBoYWxmMTYJKHN5bSthZGQpQGR0cHJlbEBoICovCisjZGVmaW5lIFJfUFBDNjRfRFRQUkVMMTZfSEEJNzcgLyogaGFsZjE2CShzeW0rYWRkKUBkdHByZWxAaGEgKi8KKyNkZWZpbmUgUl9QUEM2NF9EVFBSRUw2NAk3OCAvKiBkb3VibGV3b3JkNjQgKHN5bSthZGQpQGR0cHJlbCAqLworI2RlZmluZSBSX1BQQzY0X0dPVF9UTFNHRDE2CTc5IC8qIGhhbGYxNioJKHN5bSthZGQpQGdvdEB0bHNnZCAqLworI2RlZmluZSBSX1BQQzY0X0dPVF9UTFNHRDE2X0xPCTgwIC8qIGhhbGYxNgkoc3ltK2FkZClAZ290QHRsc2dkQGwgKi8KKyNkZWZpbmUgUl9QUEM2NF9HT1RfVExTR0QxNl9ISQk4MSAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEB0bHNnZEBoICovCisjZGVmaW5lIFJfUFBDNjRfR09UX1RMU0dEMTZfSEEJODIgLyogaGFsZjE2CShzeW0rYWRkKUBnb3RAdGxzZ2RAaGEgKi8KKyNkZWZpbmUgUl9QUEM2NF9HT1RfVExTTEQxNgk4MyAvKiBoYWxmMTYqCShzeW0rYWRkKUBnb3RAdGxzbGQgKi8KKyNkZWZpbmUgUl9QUEM2NF9HT1RfVExTTEQxNl9MTwk4NCAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEB0bHNsZEBsICovCisjZGVmaW5lIFJfUFBDNjRfR09UX1RMU0xEMTZfSEkJODUgLyogaGFsZjE2CShzeW0rYWRkKUBnb3RAdGxzbGRAaCAqLworI2RlZmluZSBSX1BQQzY0X0dPVF9UTFNMRDE2X0hBCTg2IC8qIGhhbGYxNgkoc3ltK2FkZClAZ290QHRsc2xkQGhhICovCisjZGVmaW5lIFJfUFBDNjRfR09UX1RQUkVMMTZfRFMJODcgLyogaGFsZjE2ZHMqCShzeW0rYWRkKUBnb3RAdHByZWwgKi8KKyNkZWZpbmUgUl9QUEM2NF9HT1RfVFBSRUwxNl9MT19EUyA4OCAvKiBoYWxmMTZkcyAoc3ltK2FkZClAZ290QHRwcmVsQGwgKi8KKyNkZWZpbmUgUl9QUEM2NF9HT1RfVFBSRUwxNl9ISQk4OSAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEB0cHJlbEBoICovCisjZGVmaW5lIFJfUFBDNjRfR09UX1RQUkVMMTZfSEEJOTAgLyogaGFsZjE2CShzeW0rYWRkKUBnb3RAdHByZWxAaGEgKi8KKyNkZWZpbmUgUl9QUEM2NF9HT1RfRFRQUkVMMTZfRFMJOTEgLyogaGFsZjE2ZHMqCShzeW0rYWRkKUBnb3RAZHRwcmVsICovCisjZGVmaW5lIFJfUFBDNjRfR09UX0RUUFJFTDE2X0xPX0RTIDkyIC8qIGhhbGYxNmRzIChzeW0rYWRkKUBnb3RAZHRwcmVsQGwgKi8KKyNkZWZpbmUgUl9QUEM2NF9HT1RfRFRQUkVMMTZfSEkJOTMgLyogaGFsZjE2CShzeW0rYWRkKUBnb3RAZHRwcmVsQGggKi8KKyNkZWZpbmUgUl9QUEM2NF9HT1RfRFRQUkVMMTZfSEEJOTQgLyogaGFsZjE2CShzeW0rYWRkKUBnb3RAZHRwcmVsQGhhICovCisjZGVmaW5lIFJfUFBDNjRfVFBSRUwxNl9EUwk5NSAvKiBoYWxmMTZkcyoJKHN5bSthZGQpQHRwcmVsICovCisjZGVmaW5lIFJfUFBDNjRfVFBSRUwxNl9MT19EUwk5NiAvKiBoYWxmMTZkcwkoc3ltK2FkZClAdHByZWxAbCAqLworI2RlZmluZSBSX1BQQzY0X1RQUkVMMTZfSElHSEVSCTk3IC8qIGhhbGYxNgkoc3ltK2FkZClAdHByZWxAaGlnaGVyICovCisjZGVmaW5lIFJfUFBDNjRfVFBSRUwxNl9ISUdIRVJBCTk4IC8qIGhhbGYxNgkoc3ltK2FkZClAdHByZWxAaGlnaGVyYSAqLworI2RlZmluZSBSX1BQQzY0X1RQUkVMMTZfSElHSEVTVAk5OSAvKiBoYWxmMTYJKHN5bSthZGQpQHRwcmVsQGhpZ2hlc3QgKi8KKyNkZWZpbmUgUl9QUEM2NF9UUFJFTDE2X0hJR0hFU1RBIDEwMCAvKiBoYWxmMTYJKHN5bSthZGQpQHRwcmVsQGhpZ2hlc3RhICovCisjZGVmaW5lIFJfUFBDNjRfRFRQUkVMMTZfRFMJMTAxIC8qIGhhbGYxNmRzKiAoc3ltK2FkZClAZHRwcmVsICovCisjZGVmaW5lIFJfUFBDNjRfRFRQUkVMMTZfTE9fRFMJMTAyIC8qIGhhbGYxNmRzCShzeW0rYWRkKUBkdHByZWxAbCAqLworI2RlZmluZSBSX1BQQzY0X0RUUFJFTDE2X0hJR0hFUgkxMDMgLyogaGFsZjE2CShzeW0rYWRkKUBkdHByZWxAaGlnaGVyICovCisjZGVmaW5lIFJfUFBDNjRfRFRQUkVMMTZfSElHSEVSQSAxMDQgLyogaGFsZjE2CShzeW0rYWRkKUBkdHByZWxAaGlnaGVyYSAqLworI2RlZmluZSBSX1BQQzY0X0RUUFJFTDE2X0hJR0hFU1QgMTA1IC8qIGhhbGYxNgkoc3ltK2FkZClAZHRwcmVsQGhpZ2hlc3QgKi8KKyNkZWZpbmUgUl9QUEM2NF9EVFBSRUwxNl9ISUdIRVNUQSAxMDYgLyogaGFsZjE2CShzeW0rYWRkKUBkdHByZWxAaGlnaGVzdGEgKi8KKworLyogS2VlcCB0aGlzIHRoZSBsYXN0IGVudHJ5LiAgKi8KKyNkZWZpbmUgUl9QUEM2NF9OVU0JCTEwNworCisvKiBQb3dlclBDNjQgc3BlY2lmaWMgdmFsdWVzIGZvciB0aGUgRHluIGRfdGFnIGZpZWxkLiAgKi8KKyNkZWZpbmUgRFRfUFBDNjRfR0xJTksgIChEVF9MT1BST0MgKyAwKQorI2RlZmluZSBEVF9QUEM2NF9PUEQJKERUX0xPUFJPQyArIDEpCisjZGVmaW5lIERUX1BQQzY0X09QRFNaCShEVF9MT1BST0MgKyAyKQorI2RlZmluZSBEVF9QUEM2NF9OVU0gICAgMworCisKKy8qIEFSTSBzcGVjaWZpYyBkZWNsYXJhdGlvbnMgKi8KKworLyogUHJvY2Vzc29yIHNwZWNpZmljIGZsYWdzIGZvciB0aGUgRUxGIGhlYWRlciBlX2ZsYWdzIGZpZWxkLiAgKi8KKyNkZWZpbmUgRUZfQVJNX1JFTEVYRUMgICAgIDB4MDEKKyNkZWZpbmUgRUZfQVJNX0hBU0VOVFJZICAgIDB4MDIKKyNkZWZpbmUgRUZfQVJNX0lOVEVSV09SSyAgIDB4MDQKKyNkZWZpbmUgRUZfQVJNX0FQQ1NfMjYgICAgIDB4MDgKKyNkZWZpbmUgRUZfQVJNX0FQQ1NfRkxPQVQgIDB4MTAKKyNkZWZpbmUgRUZfQVJNX1BJQyAgICAgICAgIDB4MjAKKyNkZWZpbmUgRUZfQVJNX0FMSUdOOCAgICAgIDB4NDAJCS8qIDgtYml0IHN0cnVjdHVyZSBhbGlnbm1lbnQgaXMgaW4gdXNlICovCisjZGVmaW5lIEVGX0FSTV9ORVdfQUJJICAgICAweDgwCisjZGVmaW5lIEVGX0FSTV9PTERfQUJJICAgICAweDEwMAorCisvKiBPdGhlciBjb25zdGFudHMgZGVmaW5lZCBpbiB0aGUgQVJNIEVMRiBzcGVjLiB2ZXJzaW9uIEItMDEuICAqLworLyogTkIuIFRoZXNlIGNvbmZsaWN0IHdpdGggdmFsdWVzIGRlZmluZWQgYWJvdmUuICAqLworI2RlZmluZSBFRl9BUk1fU1lNU0FSRVNPUlRFRAkweDA0CisjZGVmaW5lIEVGX0FSTV9EWU5TWU1TVVNFU0VHSURYIDB4MDgKKyNkZWZpbmUgRUZfQVJNX01BUFNZTVNGSVJTVAkweDEwCisjZGVmaW5lIEVGX0FSTV9FQUJJTUFTSwkJMFhGRjAwMDAwMAorCisjZGVmaW5lIEVGX0FSTV9FQUJJX1ZFUlNJT04oZmxhZ3MpICgoZmxhZ3MpICYgRUZfQVJNX0VBQklNQVNLKQorI2RlZmluZSBFRl9BUk1fRUFCSV9VTktOT1dOICAweDAwMDAwMDAwCisjZGVmaW5lIEVGX0FSTV9FQUJJX1ZFUjEgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgRUZfQVJNX0VBQklfVkVSMiAgICAgMHgwMjAwMDAwMAorCisvKiBBZGRpdGlvbmFsIHN5bWJvbCB0eXBlcyBmb3IgVGh1bWIgKi8KKyNkZWZpbmUgU1RUX0FSTV9URlVOQyAgICAgIDB4ZAorCisvKiBBUk0tc3BlY2lmaWMgdmFsdWVzIGZvciBzaF9mbGFncyAqLworI2RlZmluZSBTSEZfQVJNX0VOVFJZU0VDVCAgMHgxMDAwMDAwMCAgIC8qIFNlY3Rpb24gY29udGFpbnMgYW4gZW50cnkgcG9pbnQgKi8KKyNkZWZpbmUgU0hGX0FSTV9DT01ERUYgICAgIDB4ODAwMDAwMDAgICAvKiBTZWN0aW9uIG1heSBiZSBtdWx0aXBseSBkZWZpbmVkCisJCQkJCSAgIGluIHRoZSBpbnB1dCB0byBhIGxpbmsgc3RlcCAqLworCisvKiBBUk0tc3BlY2lmaWMgcHJvZ3JhbSBoZWFkZXIgZmxhZ3MgKi8KKyNkZWZpbmUgUEZfQVJNX1NCICAgICAgICAgIDB4MTAwMDAwMDAgICAvKiBTZWdtZW50IGNvbnRhaW5zIHRoZSBsb2NhdGlvbgorCQkJCQkgICBhZGRyZXNzZWQgYnkgdGhlIHN0YXRpYyBiYXNlICovCisKKy8qIFByb2Nlc3NvciBzcGVjaWZpYyB2YWx1ZXMgZm9yIHRoZSBQaGRyIHBfdHlwZSBmaWVsZC4gICovCisjZGVmaW5lIFBUX0FSTV9FWElEWAkweDcwMDAwMDAxCS8qIC5BUk0uZXhpZHggc2VnbWVudCAqLworCisvKiBBUk0gcmVsb2NzLiAgKi8KKworI2RlZmluZSBSX0FSTV9OT05FCQkwCS8qIE5vIHJlbG9jICovCisjZGVmaW5lIFJfQVJNX1BDMjQJCTEJLyogUEMgcmVsYXRpdmUgMjYgYml0IGJyYW5jaCAqLworI2RlZmluZSBSX0FSTV9BQlMzMgkJMgkvKiBEaXJlY3QgMzIgYml0ICAqLworI2RlZmluZSBSX0FSTV9SRUwzMgkJMwkvKiBQQyByZWxhdGl2ZSAzMiBiaXQgKi8KKyNkZWZpbmUgUl9BUk1fUEMxMwkJNAorI2RlZmluZSBSX0FSTV9BQlMxNgkJNQkvKiBEaXJlY3QgMTYgYml0ICovCisjZGVmaW5lIFJfQVJNX0FCUzEyCQk2CS8qIERpcmVjdCAxMiBiaXQgKi8KKyNkZWZpbmUgUl9BUk1fVEhNX0FCUzUJCTcKKyNkZWZpbmUgUl9BUk1fQUJTOAkJOAkvKiBEaXJlY3QgOCBiaXQgKi8KKyNkZWZpbmUgUl9BUk1fU0JSRUwzMgkJOQorI2RlZmluZSBSX0FSTV9USE1fUEMyMgkJMTAKKyNkZWZpbmUgUl9BUk1fVEhNX1BDOAkJMTEKKyNkZWZpbmUgUl9BUk1fQU1QX1ZDQUxMOQkxMgorI2RlZmluZSBSX0FSTV9TV0kyNAkJMTMKKyNkZWZpbmUgUl9BUk1fVEhNX1NXSTgJCTE0CisjZGVmaW5lIFJfQVJNX1hQQzI1CQkxNQorI2RlZmluZSBSX0FSTV9USE1fWFBDMjIJCTE2CisjZGVmaW5lIFJfQVJNX1RMU19EVFBNT0QzMgkxNwkvKiBJRCBvZiBtb2R1bGUgY29udGFpbmluZyBzeW1ib2wgKi8KKyNkZWZpbmUgUl9BUk1fVExTX0RUUE9GRjMyCTE4CS8qIE9mZnNldCBpbiBUTFMgYmxvY2sgKi8KKyNkZWZpbmUgUl9BUk1fVExTX1RQT0ZGMzIJMTkJLyogT2Zmc2V0IGluIHN0YXRpYyBUTFMgYmxvY2sgKi8KKyNkZWZpbmUgUl9BUk1fQ09QWQkJMjAJLyogQ29weSBzeW1ib2wgYXQgcnVudGltZSAqLworI2RlZmluZSBSX0FSTV9HTE9CX0RBVAkJMjEJLyogQ3JlYXRlIEdPVCBlbnRyeSAqLworI2RlZmluZSBSX0FSTV9KVU1QX1NMT1QJCTIyCS8qIENyZWF0ZSBQTFQgZW50cnkgKi8KKyNkZWZpbmUgUl9BUk1fUkVMQVRJVkUJCTIzCS8qIEFkanVzdCBieSBwcm9ncmFtIGJhc2UgKi8KKyNkZWZpbmUgUl9BUk1fR09UT0ZGCQkyNAkvKiAzMiBiaXQgb2Zmc2V0IHRvIEdPVCAqLworI2RlZmluZSBSX0FSTV9HT1RQQwkJMjUJLyogMzIgYml0IFBDIHJlbGF0aXZlIG9mZnNldCB0byBHT1QgKi8KKyNkZWZpbmUgUl9BUk1fR09UMzIJCTI2CS8qIDMyIGJpdCBHT1QgZW50cnkgKi8KKyNkZWZpbmUgUl9BUk1fUExUMzIJCTI3CS8qIDMyIGJpdCBQTFQgYWRkcmVzcyAqLworI2RlZmluZSBSX0FSTV9BTFVfUENSRUxfN18wCTMyCisjZGVmaW5lIFJfQVJNX0FMVV9QQ1JFTF8xNV84CTMzCisjZGVmaW5lIFJfQVJNX0FMVV9QQ1JFTF8yM18xNQkzNAorI2RlZmluZSBSX0FSTV9MRFJfU0JSRUxfMTFfMAkzNQorI2RlZmluZSBSX0FSTV9BTFVfU0JSRUxfMTlfMTIJMzYKKyNkZWZpbmUgUl9BUk1fQUxVX1NCUkVMXzI3XzIwCTM3CisjZGVmaW5lIFJfQVJNX0dOVV9WVEVOVFJZCTEwMAorI2RlZmluZSBSX0FSTV9HTlVfVlRJTkhFUklUCTEwMQorI2RlZmluZSBSX0FSTV9USE1fUEMxMQkJMTAyCS8qIHRodW1iIHVuY29uZGl0aW9uYWwgYnJhbmNoICovCisjZGVmaW5lIFJfQVJNX1RITV9QQzkJCTEwMwkvKiB0aHVtYiBjb25kaXRpb25hbCBicmFuY2ggKi8KKyNkZWZpbmUgUl9BUk1fVExTX0dEMzIJCTEwNAkvKiBQQy1yZWwgMzIgYml0IGZvciBnbG9iYWwgZHluYW1pYworCQkJCQkgICB0aHJlYWQgbG9jYWwgZGF0YSAqLworI2RlZmluZSBSX0FSTV9UTFNfTERNMzIJCTEwNQkvKiBQQy1yZWwgMzIgYml0IGZvciBsb2NhbCBkeW5hbWljCisJCQkJCSAgIHRocmVhZCBsb2NhbCBkYXRhICovCisjZGVmaW5lIFJfQVJNX1RMU19MRE8zMgkJMTA2CS8qIDMyIGJpdCBvZmZzZXQgcmVsYXRpdmUgdG8gVExTCisJCQkJCSAgIGJsb2NrICovCisjZGVmaW5lIFJfQVJNX1RMU19JRTMyCQkxMDcJLyogUEMtcmVsIDMyIGJpdCBmb3IgR09UIGVudHJ5IG9mCisJCQkJCSAgIHN0YXRpYyBUTFMgYmxvY2sgb2Zmc2V0ICovCisjZGVmaW5lIFJfQVJNX1RMU19MRTMyCQkxMDgJLyogMzIgYml0IG9mZnNldCByZWxhdGl2ZSB0byBzdGF0aWMKKwkJCQkJICAgVExTIGJsb2NrICovCisjZGVmaW5lIFJfQVJNX1JYUEMyNQkJMjQ5CisjZGVmaW5lIFJfQVJNX1JTQlJFTDMyCQkyNTAKKyNkZWZpbmUgUl9BUk1fVEhNX1JQQzIyCQkyNTEKKyNkZWZpbmUgUl9BUk1fUlJFTDMyCQkyNTIKKyNkZWZpbmUgUl9BUk1fUkFCUzIyCQkyNTMKKyNkZWZpbmUgUl9BUk1fUlBDMjQJCTI1NAorI2RlZmluZSBSX0FSTV9SQkFTRQkJMjU1CisvKiBLZWVwIHRoaXMgdGhlIGxhc3QgZW50cnkuICAqLworI2RlZmluZSBSX0FSTV9OVU0JCTI1NgorCisvKiBJQS02NCBzcGVjaWZpYyBkZWNsYXJhdGlvbnMuICAqLworCisvKiBQcm9jZXNzb3Igc3BlY2lmaWMgZmxhZ3MgZm9yIHRoZSBFaGRyIGVfZmxhZ3MgZmllbGQuICAqLworI2RlZmluZSBFRl9JQV82NF9NQVNLT1MJCTB4MDAwMDAwMGYJLyogb3Mtc3BlY2lmaWMgZmxhZ3MgKi8KKyNkZWZpbmUgRUZfSUFfNjRfQUJJNjQJCTB4MDAwMDAwMTAJLyogNjQtYml0IEFCSSAqLworI2RlZmluZSBFRl9JQV82NF9BUkNICQkweGZmMDAwMDAwCS8qIGFyY2guIHZlcnNpb24gbWFzayAqLworCisvKiBQcm9jZXNzb3Igc3BlY2lmaWMgdmFsdWVzIGZvciB0aGUgUGhkciBwX3R5cGUgZmllbGQuICAqLworI2RlZmluZSBQVF9JQV82NF9BUkNIRVhUCShQVF9MT1BST0MgKyAwKQkvKiBhcmNoIGV4dGVuc2lvbiBiaXRzICovCisjZGVmaW5lIFBUX0lBXzY0X1VOV0lORAkJKFBUX0xPUFJPQyArIDEpCS8qIGlhNjQgdW53aW5kIGJpdHMgKi8KKyNkZWZpbmUgUFRfSUFfNjRfSFBfT1BUX0FOT1QJKFBUX0xPT1MgKyAweDEyKQorI2RlZmluZSBQVF9JQV82NF9IUF9IU0xfQU5PVAkoUFRfTE9PUyArIDB4MTMpCisjZGVmaW5lIFBUX0lBXzY0X0hQX1NUQUNLCShQVF9MT09TICsgMHgxNCkKKworLyogUHJvY2Vzc29yIHNwZWNpZmljIGZsYWdzIGZvciB0aGUgUGhkciBwX2ZsYWdzIGZpZWxkLiAgKi8KKyNkZWZpbmUgUEZfSUFfNjRfTk9SRUNPVgkweDgwMDAwMDAwCS8qIHNwZWMgaW5zbnMgdy9vIHJlY292ZXJ5ICovCisKKy8qIFByb2Nlc3NvciBzcGVjaWZpYyB2YWx1ZXMgZm9yIHRoZSBTaGRyIHNoX3R5cGUgZmllbGQuICAqLworI2RlZmluZSBTSFRfSUFfNjRfRVhUCQkoU0hUX0xPUFJPQyArIDApIC8qIGV4dGVuc2lvbiBiaXRzICovCisjZGVmaW5lIFNIVF9JQV82NF9VTldJTkQJKFNIVF9MT1BST0MgKyAxKSAvKiB1bndpbmQgYml0cyAqLworCisvKiBQcm9jZXNzb3Igc3BlY2lmaWMgZmxhZ3MgZm9yIHRoZSBTaGRyIHNoX2ZsYWdzIGZpZWxkLiAgKi8KKyNkZWZpbmUgU0hGX0lBXzY0X1NIT1JUCQkweDEwMDAwMDAwCS8qIHNlY3Rpb24gbmVhciBncCAqLworI2RlZmluZSBTSEZfSUFfNjRfTk9SRUNPVgkweDIwMDAwMDAwCS8qIHNwZWMgaW5zbnMgdy9vIHJlY292ZXJ5ICovCisKKy8qIFByb2Nlc3NvciBzcGVjaWZpYyB2YWx1ZXMgZm9yIHRoZSBEeW4gZF90YWcgZmllbGQuICAqLworI2RlZmluZSBEVF9JQV82NF9QTFRfUkVTRVJWRQkoRFRfTE9QUk9DICsgMCkKKyNkZWZpbmUgRFRfSUFfNjRfTlVNCQkxCisKKy8qIElBLTY0IHJlbG9jYXRpb25zLiAgKi8KKyNkZWZpbmUgUl9JQTY0X05PTkUJCTB4MDAJLyogbm9uZSAqLworI2RlZmluZSBSX0lBNjRfSU1NMTQJCTB4MjEJLyogc3ltYm9sICsgYWRkZW5kLCBhZGQgaW1tMTQgKi8KKyNkZWZpbmUgUl9JQTY0X0lNTTIyCQkweDIyCS8qIHN5bWJvbCArIGFkZGVuZCwgYWRkIGltbTIyICovCisjZGVmaW5lIFJfSUE2NF9JTU02NAkJMHgyMwkvKiBzeW1ib2wgKyBhZGRlbmQsIG1vdiBpbW02NCAqLworI2RlZmluZSBSX0lBNjRfRElSMzJNU0IJCTB4MjQJLyogc3ltYm9sICsgYWRkZW5kLCBkYXRhNCBNU0IgKi8KKyNkZWZpbmUgUl9JQTY0X0RJUjMyTFNCCQkweDI1CS8qIHN5bWJvbCArIGFkZGVuZCwgZGF0YTQgTFNCICovCisjZGVmaW5lIFJfSUE2NF9ESVI2NE1TQgkJMHgyNgkvKiBzeW1ib2wgKyBhZGRlbmQsIGRhdGE4IE1TQiAqLworI2RlZmluZSBSX0lBNjRfRElSNjRMU0IJCTB4MjcJLyogc3ltYm9sICsgYWRkZW5kLCBkYXRhOCBMU0IgKi8KKyNkZWZpbmUgUl9JQTY0X0dQUkVMMjIJCTB4MmEJLyogQGdwcmVsKHN5bSArIGFkZCksIGFkZCBpbW0yMiAqLworI2RlZmluZSBSX0lBNjRfR1BSRUw2NEkJCTB4MmIJLyogQGdwcmVsKHN5bSArIGFkZCksIG1vdiBpbW02NCAqLworI2RlZmluZSBSX0lBNjRfR1BSRUwzMk1TQgkweDJjCS8qIEBncHJlbChzeW0gKyBhZGQpLCBkYXRhNCBNU0IgKi8KKyNkZWZpbmUgUl9JQTY0X0dQUkVMMzJMU0IJMHgyZAkvKiBAZ3ByZWwoc3ltICsgYWRkKSwgZGF0YTQgTFNCICovCisjZGVmaW5lIFJfSUE2NF9HUFJFTDY0TVNCCTB4MmUJLyogQGdwcmVsKHN5bSArIGFkZCksIGRhdGE4IE1TQiAqLworI2RlZmluZSBSX0lBNjRfR1BSRUw2NExTQgkweDJmCS8qIEBncHJlbChzeW0gKyBhZGQpLCBkYXRhOCBMU0IgKi8KKyNkZWZpbmUgUl9JQTY0X0xUT0ZGMjIJCTB4MzIJLyogQGx0b2ZmKHN5bSArIGFkZCksIGFkZCBpbW0yMiAqLworI2RlZmluZSBSX0lBNjRfTFRPRkY2NEkJCTB4MzMJLyogQGx0b2ZmKHN5bSArIGFkZCksIG1vdiBpbW02NCAqLworI2RlZmluZSBSX0lBNjRfUExUT0ZGMjIJCTB4M2EJLyogQHBsdG9mZihzeW0gKyBhZGQpLCBhZGQgaW1tMjIgKi8KKyNkZWZpbmUgUl9JQTY0X1BMVE9GRjY0SQkweDNiCS8qIEBwbHRvZmYoc3ltICsgYWRkKSwgbW92IGltbTY0ICovCisjZGVmaW5lIFJfSUE2NF9QTFRPRkY2NE1TQgkweDNlCS8qIEBwbHRvZmYoc3ltICsgYWRkKSwgZGF0YTggTVNCICovCisjZGVmaW5lIFJfSUE2NF9QTFRPRkY2NExTQgkweDNmCS8qIEBwbHRvZmYoc3ltICsgYWRkKSwgZGF0YTggTFNCICovCisjZGVmaW5lIFJfSUE2NF9GUFRSNjRJCQkweDQzCS8qIEBmcHRyKHN5bSArIGFkZCksIG1vdiBpbW02NCAqLworI2RlZmluZSBSX0lBNjRfRlBUUjMyTVNCCTB4NDQJLyogQGZwdHIoc3ltICsgYWRkKSwgZGF0YTQgTVNCICovCisjZGVmaW5lIFJfSUE2NF9GUFRSMzJMU0IJMHg0NQkvKiBAZnB0cihzeW0gKyBhZGQpLCBkYXRhNCBMU0IgKi8KKyNkZWZpbmUgUl9JQTY0X0ZQVFI2NE1TQgkweDQ2CS8qIEBmcHRyKHN5bSArIGFkZCksIGRhdGE4IE1TQiAqLworI2RlZmluZSBSX0lBNjRfRlBUUjY0TFNCCTB4NDcJLyogQGZwdHIoc3ltICsgYWRkKSwgZGF0YTggTFNCICovCisjZGVmaW5lIFJfSUE2NF9QQ1JFTDYwQgkJMHg0OAkvKiBAcGNyZWwoc3ltICsgYWRkKSwgYnJsICovCisjZGVmaW5lIFJfSUE2NF9QQ1JFTDIxQgkJMHg0OQkvKiBAcGNyZWwoc3ltICsgYWRkKSwgcHRiLCBjYWxsICovCisjZGVmaW5lIFJfSUE2NF9QQ1JFTDIxTQkJMHg0YQkvKiBAcGNyZWwoc3ltICsgYWRkKSwgY2hrLnMgKi8KKyNkZWZpbmUgUl9JQTY0X1BDUkVMMjFGCQkweDRiCS8qIEBwY3JlbChzeW0gKyBhZGQpLCBmY2hrZiAqLworI2RlZmluZSBSX0lBNjRfUENSRUwzMk1TQgkweDRjCS8qIEBwY3JlbChzeW0gKyBhZGQpLCBkYXRhNCBNU0IgKi8KKyNkZWZpbmUgUl9JQTY0X1BDUkVMMzJMU0IJMHg0ZAkvKiBAcGNyZWwoc3ltICsgYWRkKSwgZGF0YTQgTFNCICovCisjZGVmaW5lIFJfSUE2NF9QQ1JFTDY0TVNCCTB4NGUJLyogQHBjcmVsKHN5bSArIGFkZCksIGRhdGE4IE1TQiAqLworI2RlZmluZSBSX0lBNjRfUENSRUw2NExTQgkweDRmCS8qIEBwY3JlbChzeW0gKyBhZGQpLCBkYXRhOCBMU0IgKi8KKyNkZWZpbmUgUl9JQTY0X0xUT0ZGX0ZQVFIyMgkweDUyCS8qIEBsdG9mZihAZnB0cihzK2EpKSwgaW1tMjIgKi8KKyNkZWZpbmUgUl9JQTY0X0xUT0ZGX0ZQVFI2NEkJMHg1MwkvKiBAbHRvZmYoQGZwdHIocythKSksIGltbTY0ICovCisjZGVmaW5lIFJfSUE2NF9MVE9GRl9GUFRSMzJNU0IJMHg1NAkvKiBAbHRvZmYoQGZwdHIocythKSksIGRhdGE0IE1TQiAqLworI2RlZmluZSBSX0lBNjRfTFRPRkZfRlBUUjMyTFNCCTB4NTUJLyogQGx0b2ZmKEBmcHRyKHMrYSkpLCBkYXRhNCBMU0IgKi8KKyNkZWZpbmUgUl9JQTY0X0xUT0ZGX0ZQVFI2NE1TQgkweDU2CS8qIEBsdG9mZihAZnB0cihzK2EpKSwgZGF0YTggTVNCICovCisjZGVmaW5lIFJfSUE2NF9MVE9GRl9GUFRSNjRMU0IJMHg1NwkvKiBAbHRvZmYoQGZwdHIocythKSksIGRhdGE4IExTQiAqLworI2RlZmluZSBSX0lBNjRfU0VHUkVMMzJNU0IJMHg1YwkvKiBAc2VncmVsKHN5bSArIGFkZCksIGRhdGE0IE1TQiAqLworI2RlZmluZSBSX0lBNjRfU0VHUkVMMzJMU0IJMHg1ZAkvKiBAc2VncmVsKHN5bSArIGFkZCksIGRhdGE0IExTQiAqLworI2RlZmluZSBSX0lBNjRfU0VHUkVMNjRNU0IJMHg1ZQkvKiBAc2VncmVsKHN5bSArIGFkZCksIGRhdGE4IE1TQiAqLworI2RlZmluZSBSX0lBNjRfU0VHUkVMNjRMU0IJMHg1ZgkvKiBAc2VncmVsKHN5bSArIGFkZCksIGRhdGE4IExTQiAqLworI2RlZmluZSBSX0lBNjRfU0VDUkVMMzJNU0IJMHg2NAkvKiBAc2VjcmVsKHN5bSArIGFkZCksIGRhdGE0IE1TQiAqLworI2RlZmluZSBSX0lBNjRfU0VDUkVMMzJMU0IJMHg2NQkvKiBAc2VjcmVsKHN5bSArIGFkZCksIGRhdGE0IExTQiAqLworI2RlZmluZSBSX0lBNjRfU0VDUkVMNjRNU0IJMHg2NgkvKiBAc2VjcmVsKHN5bSArIGFkZCksIGRhdGE4IE1TQiAqLworI2RlZmluZSBSX0lBNjRfU0VDUkVMNjRMU0IJMHg2NwkvKiBAc2VjcmVsKHN5bSArIGFkZCksIGRhdGE4IExTQiAqLworI2RlZmluZSBSX0lBNjRfUkVMMzJNU0IJCTB4NmMJLyogZGF0YSA0ICsgUkVMICovCisjZGVmaW5lIFJfSUE2NF9SRUwzMkxTQgkJMHg2ZAkvKiBkYXRhIDQgKyBSRUwgKi8KKyNkZWZpbmUgUl9JQTY0X1JFTDY0TVNCCQkweDZlCS8qIGRhdGEgOCArIFJFTCAqLworI2RlZmluZSBSX0lBNjRfUkVMNjRMU0IJCTB4NmYJLyogZGF0YSA4ICsgUkVMICovCisjZGVmaW5lIFJfSUE2NF9MVFYzMk1TQgkJMHg3NAkvKiBzeW1ib2wgKyBhZGRlbmQsIGRhdGE0IE1TQiAqLworI2RlZmluZSBSX0lBNjRfTFRWMzJMU0IJCTB4NzUJLyogc3ltYm9sICsgYWRkZW5kLCBkYXRhNCBMU0IgKi8KKyNkZWZpbmUgUl9JQTY0X0xUVjY0TVNCCQkweDc2CS8qIHN5bWJvbCArIGFkZGVuZCwgZGF0YTggTVNCICovCisjZGVmaW5lIFJfSUE2NF9MVFY2NExTQgkJMHg3NwkvKiBzeW1ib2wgKyBhZGRlbmQsIGRhdGE4IExTQiAqLworI2RlZmluZSBSX0lBNjRfUENSRUwyMUJJCTB4NzkJLyogQHBjcmVsKHN5bSArIGFkZCksIDIxYml0IGluc3QgKi8KKyNkZWZpbmUgUl9JQTY0X1BDUkVMMjIJCTB4N2EJLyogQHBjcmVsKHN5bSArIGFkZCksIDIyYml0IGluc3QgKi8KKyNkZWZpbmUgUl9JQTY0X1BDUkVMNjRJCQkweDdiCS8qIEBwY3JlbChzeW0gKyBhZGQpLCA2NGJpdCBpbnN0ICovCisjZGVmaW5lIFJfSUE2NF9JUExUTVNCCQkweDgwCS8qIGR5bmFtaWMgcmVsb2MsIGltcG9ydGVkIFBMVCwgTVNCICovCisjZGVmaW5lIFJfSUE2NF9JUExUTFNCCQkweDgxCS8qIGR5bmFtaWMgcmVsb2MsIGltcG9ydGVkIFBMVCwgTFNCICovCisjZGVmaW5lIFJfSUE2NF9DT1BZCQkweDg0CS8qIGNvcHkgcmVsb2NhdGlvbiAqLworI2RlZmluZSBSX0lBNjRfU1VCCQkweDg1CS8qIEFkZGVuZCBhbmQgc3ltYm9sIGRpZmZlcmVuY2UgKi8KKyNkZWZpbmUgUl9JQTY0X0xUT0ZGMjJYCQkweDg2CS8qIExUT0ZGMjIsIHJlbGF4YWJsZS4gICovCisjZGVmaW5lIFJfSUE2NF9MRFhNT1YJCTB4ODcJLyogVXNlIG9mIExUT0ZGMjJYLiAgKi8KKyNkZWZpbmUgUl9JQTY0X1RQUkVMMTQJCTB4OTEJLyogQHRwcmVsKHN5bSArIGFkZCksIGltbTE0ICovCisjZGVmaW5lIFJfSUE2NF9UUFJFTDIyCQkweDkyCS8qIEB0cHJlbChzeW0gKyBhZGQpLCBpbW0yMiAqLworI2RlZmluZSBSX0lBNjRfVFBSRUw2NEkJCTB4OTMJLyogQHRwcmVsKHN5bSArIGFkZCksIGltbTY0ICovCisjZGVmaW5lIFJfSUE2NF9UUFJFTDY0TVNCCTB4OTYJLyogQHRwcmVsKHN5bSArIGFkZCksIGRhdGE4IE1TQiAqLworI2RlZmluZSBSX0lBNjRfVFBSRUw2NExTQgkweDk3CS8qIEB0cHJlbChzeW0gKyBhZGQpLCBkYXRhOCBMU0IgKi8KKyNkZWZpbmUgUl9JQTY0X0xUT0ZGX1RQUkVMMjIJMHg5YQkvKiBAbHRvZmYoQHRwcmVsKHMrYSkpLCBpbW0yICovCisjZGVmaW5lIFJfSUE2NF9EVFBNT0Q2NE1TQgkweGE2CS8qIEBkdHBtb2Qoc3ltICsgYWRkKSwgZGF0YTggTVNCICovCisjZGVmaW5lIFJfSUE2NF9EVFBNT0Q2NExTQgkweGE3CS8qIEBkdHBtb2Qoc3ltICsgYWRkKSwgZGF0YTggTFNCICovCisjZGVmaW5lIFJfSUE2NF9MVE9GRl9EVFBNT0QyMgkweGFhCS8qIEBsdG9mZihAZHRwbW9kKHN5bSArIGFkZCkpLCBpbW0yMiAqLworI2RlZmluZSBSX0lBNjRfRFRQUkVMMTQJCTB4YjEJLyogQGR0cHJlbChzeW0gKyBhZGQpLCBpbW0xNCAqLworI2RlZmluZSBSX0lBNjRfRFRQUkVMMjIJCTB4YjIJLyogQGR0cHJlbChzeW0gKyBhZGQpLCBpbW0yMiAqLworI2RlZmluZSBSX0lBNjRfRFRQUkVMNjRJCTB4YjMJLyogQGR0cHJlbChzeW0gKyBhZGQpLCBpbW02NCAqLworI2RlZmluZSBSX0lBNjRfRFRQUkVMMzJNU0IJMHhiNAkvKiBAZHRwcmVsKHN5bSArIGFkZCksIGRhdGE0IE1TQiAqLworI2RlZmluZSBSX0lBNjRfRFRQUkVMMzJMU0IJMHhiNQkvKiBAZHRwcmVsKHN5bSArIGFkZCksIGRhdGE0IExTQiAqLworI2RlZmluZSBSX0lBNjRfRFRQUkVMNjRNU0IJMHhiNgkvKiBAZHRwcmVsKHN5bSArIGFkZCksIGRhdGE4IE1TQiAqLworI2RlZmluZSBSX0lBNjRfRFRQUkVMNjRMU0IJMHhiNwkvKiBAZHRwcmVsKHN5bSArIGFkZCksIGRhdGE4IExTQiAqLworI2RlZmluZSBSX0lBNjRfTFRPRkZfRFRQUkVMMjIJMHhiYQkvKiBAbHRvZmYoQGR0cHJlbChzK2EpKSwgaW1tMjIgKi8KKworLyogU0ggc3BlY2lmaWMgZGVjbGFyYXRpb25zICovCisKKy8qIFNIIHJlbG9jcy4gICovCisjZGVmaW5lCVJfU0hfTk9ORQkJMAorI2RlZmluZQlSX1NIX0RJUjMyCQkxCisjZGVmaW5lCVJfU0hfUkVMMzIJCTIKKyNkZWZpbmUJUl9TSF9ESVI4V1BOCQkzCisjZGVmaW5lCVJfU0hfSU5EMTJXCQk0CisjZGVmaW5lCVJfU0hfRElSOFdQTAkJNQorI2RlZmluZQlSX1NIX0RJUjhXUFoJCTYKKyNkZWZpbmUJUl9TSF9ESVI4QlAJCTcKKyNkZWZpbmUJUl9TSF9ESVI4VwkJOAorI2RlZmluZQlSX1NIX0RJUjhMCQk5CisjZGVmaW5lCVJfU0hfU1dJVENIMTYJCTI1CisjZGVmaW5lCVJfU0hfU1dJVENIMzIJCTI2CisjZGVmaW5lCVJfU0hfVVNFUwkJMjcKKyNkZWZpbmUJUl9TSF9DT1VOVAkJMjgKKyNkZWZpbmUJUl9TSF9BTElHTgkJMjkKKyNkZWZpbmUJUl9TSF9DT0RFCQkzMAorI2RlZmluZQlSX1NIX0RBVEEJCTMxCisjZGVmaW5lCVJfU0hfTEFCRUwJCTMyCisjZGVmaW5lCVJfU0hfU1dJVENIOAkJMzMKKyNkZWZpbmUJUl9TSF9HTlVfVlRJTkhFUklUCTM0CisjZGVmaW5lCVJfU0hfR05VX1ZURU5UUlkJMzUKKyNkZWZpbmUJUl9TSF9UTFNfR0RfMzIJCTE0NAorI2RlZmluZQlSX1NIX1RMU19MRF8zMgkJMTQ1CisjZGVmaW5lCVJfU0hfVExTX0xET18zMgkJMTQ2CisjZGVmaW5lCVJfU0hfVExTX0lFXzMyCQkxNDcKKyNkZWZpbmUJUl9TSF9UTFNfTEVfMzIJCTE0OAorI2RlZmluZQlSX1NIX1RMU19EVFBNT0QzMgkxNDkKKyNkZWZpbmUJUl9TSF9UTFNfRFRQT0ZGMzIJMTUwCisjZGVmaW5lCVJfU0hfVExTX1RQT0ZGMzIJMTUxCisjZGVmaW5lCVJfU0hfR09UMzIJCTE2MAorI2RlZmluZQlSX1NIX1BMVDMyCQkxNjEKKyNkZWZpbmUJUl9TSF9DT1BZCQkxNjIKKyNkZWZpbmUJUl9TSF9HTE9CX0RBVAkJMTYzCisjZGVmaW5lCVJfU0hfSk1QX1NMT1QJCTE2NAorI2RlZmluZQlSX1NIX1JFTEFUSVZFCQkxNjUKKyNkZWZpbmUJUl9TSF9HT1RPRkYJCTE2NgorI2RlZmluZQlSX1NIX0dPVFBDCQkxNjcKKy8qIEtlZXAgdGhpcyB0aGUgbGFzdCBlbnRyeS4gICovCisjZGVmaW5lCVJfU0hfTlVNCQkyNTYKKworLyogQWRkaXRpb25hbCBzMzkwIHJlbG9jcyAqLworCisjZGVmaW5lIFJfMzkwX05PTkUJCTAJLyogTm8gcmVsb2MuICAqLworI2RlZmluZSBSXzM5MF84CQkJMQkvKiBEaXJlY3QgOCBiaXQuICAqLworI2RlZmluZSBSXzM5MF8xMgkJMgkvKiBEaXJlY3QgMTIgYml0LiAgKi8KKyNkZWZpbmUgUl8zOTBfMTYJCTMJLyogRGlyZWN0IDE2IGJpdC4gICovCisjZGVmaW5lIFJfMzkwXzMyCQk0CS8qIERpcmVjdCAzMiBiaXQuICAqLworI2RlZmluZSBSXzM5MF9QQzMyCQk1CS8qIFBDIHJlbGF0aXZlIDMyIGJpdC4JKi8KKyNkZWZpbmUgUl8zOTBfR09UMTIJCTYJLyogMTIgYml0IEdPVCBvZmZzZXQuICAqLworI2RlZmluZSBSXzM5MF9HT1QzMgkJNwkvKiAzMiBiaXQgR09UIG9mZnNldC4gICovCisjZGVmaW5lIFJfMzkwX1BMVDMyCQk4CS8qIDMyIGJpdCBQQyByZWxhdGl2ZSBQTFQgYWRkcmVzcy4gICovCisjZGVmaW5lIFJfMzkwX0NPUFkJCTkJLyogQ29weSBzeW1ib2wgYXQgcnVudGltZS4gICovCisjZGVmaW5lIFJfMzkwX0dMT0JfREFUCQkxMAkvKiBDcmVhdGUgR09UIGVudHJ5LiAgKi8KKyNkZWZpbmUgUl8zOTBfSk1QX1NMT1QJCTExCS8qIENyZWF0ZSBQTFQgZW50cnkuICAqLworI2RlZmluZSBSXzM5MF9SRUxBVElWRQkJMTIJLyogQWRqdXN0IGJ5IHByb2dyYW0gYmFzZS4gICovCisjZGVmaW5lIFJfMzkwX0dPVE9GRjMyCQkxMwkvKiAzMiBiaXQgb2Zmc2V0IHRvIEdPVC4JICovCisjZGVmaW5lIFJfMzkwX0dPVFBDCQkxNAkvKiAzMiBiaXQgUEMgcmVsYXRpdmUgb2Zmc2V0IHRvIEdPVC4gICovCisjZGVmaW5lIFJfMzkwX0dPVDE2CQkxNQkvKiAxNiBiaXQgR09UIG9mZnNldC4gICovCisjZGVmaW5lIFJfMzkwX1BDMTYJCTE2CS8qIFBDIHJlbGF0aXZlIDE2IGJpdC4JKi8KKyNkZWZpbmUgUl8zOTBfUEMxNkRCTAkJMTcJLyogUEMgcmVsYXRpdmUgMTYgYml0IHNoaWZ0ZWQgYnkgMS4gICovCisjZGVmaW5lIFJfMzkwX1BMVDE2REJMCQkxOAkvKiAxNiBiaXQgUEMgcmVsLiBQTFQgc2hpZnRlZCBieSAxLiAgKi8KKyNkZWZpbmUgUl8zOTBfUEMzMkRCTAkJMTkJLyogUEMgcmVsYXRpdmUgMzIgYml0IHNoaWZ0ZWQgYnkgMS4gICovCisjZGVmaW5lIFJfMzkwX1BMVDMyREJMCQkyMAkvKiAzMiBiaXQgUEMgcmVsLiBQTFQgc2hpZnRlZCBieSAxLiAgKi8KKyNkZWZpbmUgUl8zOTBfR09UUENEQkwJCTIxCS8qIDMyIGJpdCBQQyByZWwuIEdPVCBzaGlmdGVkIGJ5IDEuICAqLworI2RlZmluZSBSXzM5MF82NAkJMjIJLyogRGlyZWN0IDY0IGJpdC4gICovCisjZGVmaW5lIFJfMzkwX1BDNjQJCTIzCS8qIFBDIHJlbGF0aXZlIDY0IGJpdC4JKi8KKyNkZWZpbmUgUl8zOTBfR09UNjQJCTI0CS8qIDY0IGJpdCBHT1Qgb2Zmc2V0LiAgKi8KKyNkZWZpbmUgUl8zOTBfUExUNjQJCTI1CS8qIDY0IGJpdCBQQyByZWxhdGl2ZSBQTFQgYWRkcmVzcy4gICovCisjZGVmaW5lIFJfMzkwX0dPVEVOVAkJMjYJLyogMzIgYml0IFBDIHJlbC4gdG8gR09UIGVudHJ5ID4+IDEuICovCisjZGVmaW5lIFJfMzkwX0dPVE9GRjE2CQkyNwkvKiAxNiBiaXQgb2Zmc2V0IHRvIEdPVC4gKi8KKyNkZWZpbmUgUl8zOTBfR09UT0ZGNjQJCTI4CS8qIDY0IGJpdCBvZmZzZXQgdG8gR09ULiAqLworI2RlZmluZSBSXzM5MF9HT1RQTFQxMgkJMjkJLyogMTIgYml0IG9mZnNldCB0byBqdW1wIHNsb3QuCSovCisjZGVmaW5lIFJfMzkwX0dPVFBMVDE2CQkzMAkvKiAxNiBiaXQgb2Zmc2V0IHRvIGp1bXAgc2xvdC4JKi8KKyNkZWZpbmUgUl8zOTBfR09UUExUMzIJCTMxCS8qIDMyIGJpdCBvZmZzZXQgdG8ganVtcCBzbG90LgkqLworI2RlZmluZSBSXzM5MF9HT1RQTFQ2NAkJMzIJLyogNjQgYml0IG9mZnNldCB0byBqdW1wIHNsb3QuCSovCisjZGVmaW5lIFJfMzkwX0dPVFBMVEVOVAkJMzMJLyogMzIgYml0IHJlbC4gb2Zmc2V0IHRvIGp1bXAgc2xvdC4gICovCisjZGVmaW5lIFJfMzkwX1BMVE9GRjE2CQkzNAkvKiAxNiBiaXQgb2Zmc2V0IGZyb20gR09UIHRvIFBMVC4gKi8KKyNkZWZpbmUgUl8zOTBfUExUT0ZGMzIJCTM1CS8qIDMyIGJpdCBvZmZzZXQgZnJvbSBHT1QgdG8gUExULiAqLworI2RlZmluZSBSXzM5MF9QTFRPRkY2NAkJMzYJLyogMTYgYml0IG9mZnNldCBmcm9tIEdPVCB0byBQTFQuICovCisjZGVmaW5lIFJfMzkwX1RMU19MT0FECQkzNwkvKiBUYWcgZm9yIGxvYWQgaW5zbiBpbiBUTFMgY29kZS4gICovCisjZGVmaW5lIFJfMzkwX1RMU19HRENBTEwJMzgJLyogVGFnIGZvciBmdW5jdGlvbiBjYWxsIGluIGdlbmVyYWwKKwkJCQkJICAgZHluYW1pYyBUTFMgY29kZS4gKi8KKyNkZWZpbmUgUl8zOTBfVExTX0xEQ0FMTAkzOQkvKiBUYWcgZm9yIGZ1bmN0aW9uIGNhbGwgaW4gbG9jYWwKKwkJCQkJICAgZHluYW1pYyBUTFMgY29kZS4gKi8KKyNkZWZpbmUgUl8zOTBfVExTX0dEMzIJCTQwCS8qIERpcmVjdCAzMiBiaXQgZm9yIGdlbmVyYWwgZHluYW1pYworCQkJCQkgICB0aHJlYWQgbG9jYWwgZGF0YS4gICovCisjZGVmaW5lIFJfMzkwX1RMU19HRDY0CQk0MQkvKiBEaXJlY3QgNjQgYml0IGZvciBnZW5lcmFsIGR5bmFtaWMKKwkJCQkJICB0aHJlYWQgbG9jYWwgZGF0YS4gICovCisjZGVmaW5lIFJfMzkwX1RMU19HT1RJRTEyCTQyCS8qIDEyIGJpdCBHT1Qgb2Zmc2V0IGZvciBzdGF0aWMgVExTCisJCQkJCSAgIGJsb2NrIG9mZnNldC4gICovCisjZGVmaW5lIFJfMzkwX1RMU19HT1RJRTMyCTQzCS8qIDMyIGJpdCBHT1Qgb2Zmc2V0IGZvciBzdGF0aWMgVExTCisJCQkJCSAgIGJsb2NrIG9mZnNldC4gICovCisjZGVmaW5lIFJfMzkwX1RMU19HT1RJRTY0CTQ0CS8qIDY0IGJpdCBHT1Qgb2Zmc2V0IGZvciBzdGF0aWMgVExTCisJCQkJCSAgIGJsb2NrIG9mZnNldC4gKi8KKyNkZWZpbmUgUl8zOTBfVExTX0xETTMyCQk0NQkvKiBEaXJlY3QgMzIgYml0IGZvciBsb2NhbCBkeW5hbWljCisJCQkJCSAgIHRocmVhZCBsb2NhbCBkYXRhIGluIExFIGNvZGUuICAqLworI2RlZmluZSBSXzM5MF9UTFNfTERNNjQJCTQ2CS8qIERpcmVjdCA2NCBiaXQgZm9yIGxvY2FsIGR5bmFtaWMKKwkJCQkJICAgdGhyZWFkIGxvY2FsIGRhdGEgaW4gTEUgY29kZS4gICovCisjZGVmaW5lIFJfMzkwX1RMU19JRTMyCQk0NwkvKiAzMiBiaXQgYWRkcmVzcyBvZiBHT1QgZW50cnkgZm9yCisJCQkJCSAgIG5lZ2F0ZWQgc3RhdGljIFRMUyBibG9jayBvZmZzZXQuICAqLworI2RlZmluZSBSXzM5MF9UTFNfSUU2NAkJNDgJLyogNjQgYml0IGFkZHJlc3Mgb2YgR09UIGVudHJ5IGZvcgorCQkJCQkgICBuZWdhdGVkIHN0YXRpYyBUTFMgYmxvY2sgb2Zmc2V0LiAgKi8KKyNkZWZpbmUgUl8zOTBfVExTX0lFRU5UCQk0OQkvKiAzMiBiaXQgcmVsLiBvZmZzZXQgdG8gR09UIGVudHJ5IGZvcgorCQkJCQkgICBuZWdhdGVkIHN0YXRpYyBUTFMgYmxvY2sgb2Zmc2V0LiAgKi8KKyNkZWZpbmUgUl8zOTBfVExTX0xFMzIJCTUwCS8qIDMyIGJpdCBuZWdhdGVkIG9mZnNldCByZWxhdGl2ZSB0bworCQkJCQkgICBzdGF0aWMgVExTIGJsb2NrLiAgKi8KKyNkZWZpbmUgUl8zOTBfVExTX0xFNjQJCTUxCS8qIDY0IGJpdCBuZWdhdGVkIG9mZnNldCByZWxhdGl2ZSB0bworCQkJCQkgICBzdGF0aWMgVExTIGJsb2NrLiAgKi8KKyNkZWZpbmUgUl8zOTBfVExTX0xETzMyCQk1MgkvKiAzMiBiaXQgb2Zmc2V0IHJlbGF0aXZlIHRvIFRMUworCQkJCQkgICBibG9jay4gICovCisjZGVmaW5lIFJfMzkwX1RMU19MRE82NAkJNTMJLyogNjQgYml0IG9mZnNldCByZWxhdGl2ZSB0byBUTFMKKwkJCQkJICAgYmxvY2suICAqLworI2RlZmluZSBSXzM5MF9UTFNfRFRQTU9ECTU0CS8qIElEIG9mIG1vZHVsZSBjb250YWluaW5nIHN5bWJvbC4gICovCisjZGVmaW5lIFJfMzkwX1RMU19EVFBPRkYJNTUJLyogT2Zmc2V0IGluIFRMUyBibG9jay4JICovCisjZGVmaW5lIFJfMzkwX1RMU19UUE9GRgkJNTYJLyogTmVnYXRlZCBvZmZzZXQgaW4gc3RhdGljIFRMUworCQkJCQkgICBibG9jay4gICovCisjZGVmaW5lIFJfMzkwXzIwCQk1NwkvKiBEaXJlY3QgMjAgYml0LiAgKi8KKyNkZWZpbmUgUl8zOTBfR09UMjAJCTU4CS8qIDIwIGJpdCBHT1Qgb2Zmc2V0LiAgKi8KKyNkZWZpbmUgUl8zOTBfR09UUExUMjAJCTU5CS8qIDIwIGJpdCBvZmZzZXQgdG8ganVtcCBzbG90LiAgKi8KKyNkZWZpbmUgUl8zOTBfVExTX0dPVElFMjAJNjAJLyogMjAgYml0IEdPVCBvZmZzZXQgZm9yIHN0YXRpYyBUTFMKKwkJCQkJICAgYmxvY2sgb2Zmc2V0LiAgKi8KKy8qIEtlZXAgdGhpcyB0aGUgbGFzdCBlbnRyeS4gICovCisjZGVmaW5lIFJfMzkwX05VTQkJNjEKKworCisvKiBDUklTIHJlbG9jYXRpb25zLiAgKi8KKyNkZWZpbmUgUl9DUklTX05PTkUJCTAKKyNkZWZpbmUgUl9DUklTXzgJCTEKKyNkZWZpbmUgUl9DUklTXzE2CQkyCisjZGVmaW5lIFJfQ1JJU18zMgkJMworI2RlZmluZSBSX0NSSVNfOF9QQ1JFTAkJNAorI2RlZmluZSBSX0NSSVNfMTZfUENSRUwJCTUKKyNkZWZpbmUgUl9DUklTXzMyX1BDUkVMCQk2CisjZGVmaW5lIFJfQ1JJU19HTlVfVlRJTkhFUklUCTcKKyNkZWZpbmUgUl9DUklTX0dOVV9WVEVOVFJZCTgKKyNkZWZpbmUgUl9DUklTX0NPUFkJCTkKKyNkZWZpbmUgUl9DUklTX0dMT0JfREFUCQkxMAorI2RlZmluZSBSX0NSSVNfSlVNUF9TTE9UCTExCisjZGVmaW5lIFJfQ1JJU19SRUxBVElWRQkJMTIKKyNkZWZpbmUgUl9DUklTXzE2X0dPVAkJMTMKKyNkZWZpbmUgUl9DUklTXzMyX0dPVAkJMTQKKyNkZWZpbmUgUl9DUklTXzE2X0dPVFBMVAkxNQorI2RlZmluZSBSX0NSSVNfMzJfR09UUExUCTE2CisjZGVmaW5lIFJfQ1JJU18zMl9HT1RSRUwJMTcKKyNkZWZpbmUgUl9DUklTXzMyX1BMVF9HT1RSRUwJMTgKKyNkZWZpbmUgUl9DUklTXzMyX1BMVF9QQ1JFTAkxOQorCisjZGVmaW5lIFJfQ1JJU19OVU0JCTIwCisKKworLyogQU1EIHg4Ni02NCByZWxvY2F0aW9ucy4gICovCisjZGVmaW5lIFJfWDg2XzY0X05PTkUJCTAJLyogTm8gcmVsb2MgKi8KKyNkZWZpbmUgUl9YODZfNjRfNjQJCTEJLyogRGlyZWN0IDY0IGJpdCAgKi8KKyNkZWZpbmUgUl9YODZfNjRfUEMzMgkJMgkvKiBQQyByZWxhdGl2ZSAzMiBiaXQgc2lnbmVkICovCisjZGVmaW5lIFJfWDg2XzY0X0dPVDMyCQkzCS8qIDMyIGJpdCBHT1QgZW50cnkgKi8KKyNkZWZpbmUgUl9YODZfNjRfUExUMzIJCTQJLyogMzIgYml0IFBMVCBhZGRyZXNzICovCisjZGVmaW5lIFJfWDg2XzY0X0NPUFkJCTUJLyogQ29weSBzeW1ib2wgYXQgcnVudGltZSAqLworI2RlZmluZSBSX1g4Nl82NF9HTE9CX0RBVAk2CS8qIENyZWF0ZSBHT1QgZW50cnkgKi8KKyNkZWZpbmUgUl9YODZfNjRfSlVNUF9TTE9UCTcJLyogQ3JlYXRlIFBMVCBlbnRyeSAqLworI2RlZmluZSBSX1g4Nl82NF9SRUxBVElWRQk4CS8qIEFkanVzdCBieSBwcm9ncmFtIGJhc2UgKi8KKyNkZWZpbmUgUl9YODZfNjRfR09UUENSRUwJOQkvKiAzMiBiaXQgc2lnbmVkIFBDIHJlbGF0aXZlCisJCQkJCSAgIG9mZnNldCB0byBHT1QgKi8KKyNkZWZpbmUgUl9YODZfNjRfMzIJCTEwCS8qIERpcmVjdCAzMiBiaXQgemVybyBleHRlbmRlZCAqLworI2RlZmluZSBSX1g4Nl82NF8zMlMJCTExCS8qIERpcmVjdCAzMiBiaXQgc2lnbiBleHRlbmRlZCAqLworI2RlZmluZSBSX1g4Nl82NF8xNgkJMTIJLyogRGlyZWN0IDE2IGJpdCB6ZXJvIGV4dGVuZGVkICovCisjZGVmaW5lIFJfWDg2XzY0X1BDMTYJCTEzCS8qIDE2IGJpdCBzaWduIGV4dGVuZGVkIHBjIHJlbGF0aXZlICovCisjZGVmaW5lIFJfWDg2XzY0XzgJCTE0CS8qIERpcmVjdCA4IGJpdCBzaWduIGV4dGVuZGVkICAqLworI2RlZmluZSBSX1g4Nl82NF9QQzgJCTE1CS8qIDggYml0IHNpZ24gZXh0ZW5kZWQgcGMgcmVsYXRpdmUgKi8KKyNkZWZpbmUgUl9YODZfNjRfRFRQTU9ENjQJMTYJLyogSUQgb2YgbW9kdWxlIGNvbnRhaW5pbmcgc3ltYm9sICovCisjZGVmaW5lIFJfWDg2XzY0X0RUUE9GRjY0CTE3CS8qIE9mZnNldCBpbiBtb2R1bGUncyBUTFMgYmxvY2sgKi8KKyNkZWZpbmUgUl9YODZfNjRfVFBPRkY2NAkxOAkvKiBPZmZzZXQgaW4gaW5pdGlhbCBUTFMgYmxvY2sgKi8KKyNkZWZpbmUgUl9YODZfNjRfVExTR0QJCTE5CS8qIDMyIGJpdCBzaWduZWQgUEMgcmVsYXRpdmUgb2Zmc2V0CisJCQkJCSAgIHRvIHR3byBHT1QgZW50cmllcyBmb3IgR0Qgc3ltYm9sICovCisjZGVmaW5lIFJfWDg2XzY0X1RMU0xECQkyMAkvKiAzMiBiaXQgc2lnbmVkIFBDIHJlbGF0aXZlIG9mZnNldAorCQkJCQkgICB0byB0d28gR09UIGVudHJpZXMgZm9yIExEIHN5bWJvbCAqLworI2RlZmluZSBSX1g4Nl82NF9EVFBPRkYzMgkyMQkvKiBPZmZzZXQgaW4gVExTIGJsb2NrICovCisjZGVmaW5lIFJfWDg2XzY0X0dPVFRQT0ZGCTIyCS8qIDMyIGJpdCBzaWduZWQgUEMgcmVsYXRpdmUgb2Zmc2V0CisJCQkJCSAgIHRvIEdPVCBlbnRyeSBmb3IgSUUgc3ltYm9sICovCisjZGVmaW5lIFJfWDg2XzY0X1RQT0ZGMzIJMjMJLyogT2Zmc2V0IGluIGluaXRpYWwgVExTIGJsb2NrICovCisjZGVmaW5lIFJfWDg2XzY0X1BDNjQJCTI0CS8qIFBDIHJlbGF0aXZlIDY0IGJpdCAqLworI2RlZmluZSBSX1g4Nl82NF9HT1RPRkY2NAkyNQkvKiA2NCBiaXQgb2Zmc2V0IHRvIEdPVCAqLworI2RlZmluZSBSX1g4Nl82NF9HT1RQQzMyCTI2CS8qIDMyIGJpdCBzaWduZWQgcGMgcmVsYXRpdmUKKwkJCQkJICAgb2Zmc2V0IHRvIEdPVCAqLworLyogMjcgLi4gMzMgKi8KKyNkZWZpbmUgUl9YODZfNjRfR09UUEMzMl9UTFNERVNDIDM0CS8qIEdPVCBvZmZzZXQgZm9yIFRMUyBkZXNjcmlwdG9yLiAgKi8KKyNkZWZpbmUgUl9YODZfNjRfVExTREVTQ19DQUxMICAgMzUJLyogTWFya2VyIGZvciBjYWxsIHRocm91Z2ggVExTCisJCQkJCSAgIGRlc2NyaXB0b3IuICAqLworI2RlZmluZSBSX1g4Nl82NF9UTFNERVNDICAgICAgICAzNgkvKiBUTFMgZGVzY3JpcHRvci4gICovCisKKyNkZWZpbmUgUl9YODZfNjRfTlVNCQkzNworCisKKy8qIEFNMzMgcmVsb2NhdGlvbnMuICAqLworI2RlZmluZSBSX01OMTAzMDBfTk9ORQkJMAkvKiBObyByZWxvYy4gICovCisjZGVmaW5lIFJfTU4xMDMwMF8zMgkJMQkvKiBEaXJlY3QgMzIgYml0LiAgKi8KKyNkZWZpbmUgUl9NTjEwMzAwXzE2CQkyCS8qIERpcmVjdCAxNiBiaXQuICAqLworI2RlZmluZSBSX01OMTAzMDBfOAkJMwkvKiBEaXJlY3QgOCBiaXQuICAqLworI2RlZmluZSBSX01OMTAzMDBfUENSRUwzMgk0CS8qIFBDLXJlbGF0aXZlIDMyLWJpdC4gICovCisjZGVmaW5lIFJfTU4xMDMwMF9QQ1JFTDE2CTUJLyogUEMtcmVsYXRpdmUgMTYtYml0IHNpZ25lZC4gICovCisjZGVmaW5lIFJfTU4xMDMwMF9QQ1JFTDgJNgkvKiBQQy1yZWxhdGl2ZSA4LWJpdCBzaWduZWQuICAqLworI2RlZmluZSBSX01OMTAzMDBfR05VX1ZUSU5IRVJJVAk3CS8qIEFuY2llbnQgQysrIHZ0YWJsZSBnYXJiYWdlLi4uICovCisjZGVmaW5lIFJfTU4xMDMwMF9HTlVfVlRFTlRSWQk4CS8qIC4uLiBjb2xsZWN0aW9uIGFubm90YXRpb24uICAqLworI2RlZmluZSBSX01OMTAzMDBfMjQJCTkJLyogRGlyZWN0IDI0IGJpdC4gICovCisjZGVmaW5lIFJfTU4xMDMwMF9HT1RQQzMyCTEwCS8qIDMyLWJpdCBQQ3JlbCBvZmZzZXQgdG8gR09ULiAgKi8KKyNkZWZpbmUgUl9NTjEwMzAwX0dPVFBDMTYJMTEJLyogMTYtYml0IFBDcmVsIG9mZnNldCB0byBHT1QuICAqLworI2RlZmluZSBSX01OMTAzMDBfR09UT0ZGMzIJMTIJLyogMzItYml0IG9mZnNldCBmcm9tIEdPVC4gICovCisjZGVmaW5lIFJfTU4xMDMwMF9HT1RPRkYyNAkxMwkvKiAyNC1iaXQgb2Zmc2V0IGZyb20gR09ULiAgKi8KKyNkZWZpbmUgUl9NTjEwMzAwX0dPVE9GRjE2CTE0CS8qIDE2LWJpdCBvZmZzZXQgZnJvbSBHT1QuICAqLworI2RlZmluZSBSX01OMTAzMDBfUExUMzIJCTE1CS8qIDMyLWJpdCBQQ3JlbCB0byBQTFQgZW50cnkuICAqLworI2RlZmluZSBSX01OMTAzMDBfUExUMTYJCTE2CS8qIDE2LWJpdCBQQ3JlbCB0byBQTFQgZW50cnkuICAqLworI2RlZmluZSBSX01OMTAzMDBfR09UMzIJCTE3CS8qIDMyLWJpdCBvZmZzZXQgdG8gR09UIGVudHJ5LiAgKi8KKyNkZWZpbmUgUl9NTjEwMzAwX0dPVDI0CQkxOAkvKiAyNC1iaXQgb2Zmc2V0IHRvIEdPVCBlbnRyeS4gICovCisjZGVmaW5lIFJfTU4xMDMwMF9HT1QxNgkJMTkJLyogMTYtYml0IG9mZnNldCB0byBHT1QgZW50cnkuICAqLworI2RlZmluZSBSX01OMTAzMDBfQ09QWQkJMjAJLyogQ29weSBzeW1ib2wgYXQgcnVudGltZS4gICovCisjZGVmaW5lIFJfTU4xMDMwMF9HTE9CX0RBVAkyMQkvKiBDcmVhdGUgR09UIGVudHJ5LiAgKi8KKyNkZWZpbmUgUl9NTjEwMzAwX0pNUF9TTE9UCTIyCS8qIENyZWF0ZSBQTFQgZW50cnkuICAqLworI2RlZmluZSBSX01OMTAzMDBfUkVMQVRJVkUJMjMJLyogQWRqdXN0IGJ5IHByb2dyYW0gYmFzZS4gICovCisKKyNkZWZpbmUgUl9NTjEwMzAwX05VTQkJMjQKKworCisvKiBNMzJSIHJlbG9jcy4gICovCisjZGVmaW5lIFJfTTMyUl9OT05FCQkwCS8qIE5vIHJlbG9jLiAqLworI2RlZmluZSBSX00zMlJfMTYJCTEJLyogRGlyZWN0IDE2IGJpdC4gKi8KKyNkZWZpbmUgUl9NMzJSXzMyCQkyCS8qIERpcmVjdCAzMiBiaXQuICovCisjZGVmaW5lIFJfTTMyUl8yNAkJMwkvKiBEaXJlY3QgMjQgYml0LiAqLworI2RlZmluZSBSX00zMlJfMTBfUENSRUwJCTQJLyogUEMgcmVsYXRpdmUgMTAgYml0IHNoaWZ0ZWQuICovCisjZGVmaW5lIFJfTTMyUl8xOF9QQ1JFTAkJNQkvKiBQQyByZWxhdGl2ZSAxOCBiaXQgc2hpZnRlZC4gKi8KKyNkZWZpbmUgUl9NMzJSXzI2X1BDUkVMCQk2CS8qIFBDIHJlbGF0aXZlIDI2IGJpdCBzaGlmdGVkLiAqLworI2RlZmluZSBSX00zMlJfSEkxNl9VTE8JCTcJLyogSGlnaCAxNiBiaXQgd2l0aCB1bnNpZ25lZCBsb3cuICovCisjZGVmaW5lIFJfTTMyUl9ISTE2X1NMTwkJOAkvKiBIaWdoIDE2IGJpdCB3aXRoIHNpZ25lZCBsb3cuICovCisjZGVmaW5lIFJfTTMyUl9MTzE2CQk5CS8qIExvdyAxNiBiaXQuICovCisjZGVmaW5lIFJfTTMyUl9TREExNgkJMTAJLyogMTYgYml0IG9mZnNldCBpbiBTREEuICovCisjZGVmaW5lIFJfTTMyUl9HTlVfVlRJTkhFUklUCTExCisjZGVmaW5lIFJfTTMyUl9HTlVfVlRFTlRSWQkxMgorLyogTTMyUiByZWxvY3MgdXNlIFNIVF9SRUxBLiAgKi8KKyNkZWZpbmUgUl9NMzJSXzE2X1JFTEEJCTMzCS8qIERpcmVjdCAxNiBiaXQuICovCisjZGVmaW5lIFJfTTMyUl8zMl9SRUxBCQkzNAkvKiBEaXJlY3QgMzIgYml0LiAqLworI2RlZmluZSBSX00zMlJfMjRfUkVMQQkJMzUJLyogRGlyZWN0IDI0IGJpdC4gKi8KKyNkZWZpbmUgUl9NMzJSXzEwX1BDUkVMX1JFTEEJMzYJLyogUEMgcmVsYXRpdmUgMTAgYml0IHNoaWZ0ZWQuICovCisjZGVmaW5lIFJfTTMyUl8xOF9QQ1JFTF9SRUxBCTM3CS8qIFBDIHJlbGF0aXZlIDE4IGJpdCBzaGlmdGVkLiAqLworI2RlZmluZSBSX00zMlJfMjZfUENSRUxfUkVMQQkzOAkvKiBQQyByZWxhdGl2ZSAyNiBiaXQgc2hpZnRlZC4gKi8KKyNkZWZpbmUgUl9NMzJSX0hJMTZfVUxPX1JFTEEJMzkJLyogSGlnaCAxNiBiaXQgd2l0aCB1bnNpZ25lZCBsb3cgKi8KKyNkZWZpbmUgUl9NMzJSX0hJMTZfU0xPX1JFTEEJNDAJLyogSGlnaCAxNiBiaXQgd2l0aCBzaWduZWQgbG93ICovCisjZGVmaW5lIFJfTTMyUl9MTzE2X1JFTEEJNDEJLyogTG93IDE2IGJpdCAqLworI2RlZmluZSBSX00zMlJfU0RBMTZfUkVMQQk0MgkvKiAxNiBiaXQgb2Zmc2V0IGluIFNEQSAqLworI2RlZmluZSBSX00zMlJfUkVMQV9HTlVfVlRJTkhFUklUCTQzCisjZGVmaW5lIFJfTTMyUl9SRUxBX0dOVV9WVEVOVFJZCTQ0CisjZGVmaW5lIFJfTTMyUl9SRUwzMgkJNDUJLyogUEMgcmVsYXRpdmUgMzIgYml0LiAgKi8KKworI2RlZmluZSBSX00zMlJfR09UMjQJCTQ4CS8qIDI0IGJpdCBHT1QgZW50cnkgKi8KKyNkZWZpbmUgUl9NMzJSXzI2X1BMVFJFTAk0OQkvKiAyNiBiaXQgUEMgcmVsYXRpdmUgdG8gUExUIHNoaWZ0ZWQgKi8KKyNkZWZpbmUgUl9NMzJSX0NPUFkJCTUwCS8qIENvcHkgc3ltYm9sIGF0IHJ1bnRpbWUgKi8KKyNkZWZpbmUgUl9NMzJSX0dMT0JfREFUCQk1MQkvKiBDcmVhdGUgR09UIGVudHJ5ICovCisjZGVmaW5lIFJfTTMyUl9KTVBfU0xPVAkJNTIJLyogQ3JlYXRlIFBMVCBlbnRyeSAqLworI2RlZmluZSBSX00zMlJfUkVMQVRJVkUJCTUzCS8qIEFkanVzdCBieSBwcm9ncmFtIGJhc2UgKi8KKyNkZWZpbmUgUl9NMzJSX0dPVE9GRgkJNTQJLyogMjQgYml0IG9mZnNldCB0byBHT1QgKi8KKyNkZWZpbmUgUl9NMzJSX0dPVFBDMjQJCTU1CS8qIDI0IGJpdCBQQyByZWxhdGl2ZSBvZmZzZXQgdG8gR09UICovCisjZGVmaW5lIFJfTTMyUl9HT1QxNl9ISV9VTE8JNTYJLyogSGlnaCAxNiBiaXQgR09UIGVudHJ5IHdpdGggdW5zaWduZWQKKwkJCQkJICAgbG93ICovCisjZGVmaW5lIFJfTTMyUl9HT1QxNl9ISV9TTE8JNTcJLyogSGlnaCAxNiBiaXQgR09UIGVudHJ5IHdpdGggc2lnbmVkCisJCQkJCSAgIGxvdyAqLworI2RlZmluZSBSX00zMlJfR09UMTZfTE8JCTU4CS8qIExvdyAxNiBiaXQgR09UIGVudHJ5ICovCisjZGVmaW5lIFJfTTMyUl9HT1RQQ19ISV9VTE8JNTkJLyogSGlnaCAxNiBiaXQgUEMgcmVsYXRpdmUgb2Zmc2V0IHRvCisJCQkJCSAgIEdPVCB3aXRoIHVuc2lnbmVkIGxvdyAqLworI2RlZmluZSBSX00zMlJfR09UUENfSElfU0xPCTYwCS8qIEhpZ2ggMTYgYml0IFBDIHJlbGF0aXZlIG9mZnNldCB0bworCQkJCQkgICBHT1Qgd2l0aCBzaWduZWQgbG93ICovCisjZGVmaW5lIFJfTTMyUl9HT1RQQ19MTwkJNjEJLyogTG93IDE2IGJpdCBQQyByZWxhdGl2ZSBvZmZzZXQgdG8KKwkJCQkJICAgR09UICovCisjZGVmaW5lIFJfTTMyUl9HT1RPRkZfSElfVUxPCTYyCS8qIEhpZ2ggMTYgYml0IG9mZnNldCB0byBHT1QKKwkJCQkJICAgd2l0aCB1bnNpZ25lZCBsb3cgKi8KKyNkZWZpbmUgUl9NMzJSX0dPVE9GRl9ISV9TTE8JNjMJLyogSGlnaCAxNiBiaXQgb2Zmc2V0IHRvIEdPVAorCQkJCQkgICB3aXRoIHNpZ25lZCBsb3cgKi8KKyNkZWZpbmUgUl9NMzJSX0dPVE9GRl9MTwk2NAkvKiBMb3cgMTYgYml0IG9mZnNldCB0byBHT1QgKi8KKyNkZWZpbmUgUl9NMzJSX05VTQkJMjU2CS8qIEtlZXAgdGhpcyB0aGUgbGFzdCBlbnRyeS4gKi8KKworCitfX0VORF9ERUNMUworCisjZW5kaWYJLyogZWxmLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9lbmRpYW4uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9lbmRpYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2QwMzBhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2VuZGlhbi5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5MiwgMTk5NiwgMTk5NywgMjAwMCwgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZglfRU5ESUFOX0gKKyNkZWZpbmUJX0VORElBTl9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKy8qIERlZmluaXRpb25zIGZvciBieXRlIG9yZGVyLCBhY2NvcmRpbmcgdG8gc2lnbmlmaWNhbmNlIG9mIGJ5dGVzLAorICAgZnJvbSBsb3cgYWRkcmVzc2VzIHRvIGhpZ2ggYWRkcmVzc2VzLiAgVGhlIHZhbHVlIGlzIHdoYXQgeW91IGdldCBieQorICAgcHV0dGluZyAnNCcgaW4gdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSwgJzMnIGluIHRoZSBzZWNvbmQgbW9zdAorICAgc2lnbmlmaWNhbnQgYnl0ZSwgJzInIGluIHRoZSBzZWNvbmQgbGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSwgYW5kICcxJworICAgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUsIGFuZCB0aGVuIHdyaXRpbmcgZG93biBvbmUgZGlnaXQgZm9yCisgICBlYWNoIGJ5dGUsIHN0YXJ0aW5nIHdpdGggdGhlIGJ5dGUgYXQgdGhlIGxvd2VzdCBhZGRyZXNzIGF0IHRoZSBsZWZ0LAorICAgYW5kIHByb2NlZWRpbmcgdG8gdGhlIGJ5dGUgd2l0aCB0aGUgaGlnaGVzdCBhZGRyZXNzIGF0IHRoZSByaWdodC4gICovCisKKyNkZWZpbmUJX19MSVRUTEVfRU5ESUFOCTEyMzQKKyNkZWZpbmUJX19CSUdfRU5ESUFOCTQzMjEKKyNkZWZpbmUJX19QRFBfRU5ESUFOCTM0MTIKKworLyogVGhpcyBmaWxlIGRlZmluZXMgYF9fQllURV9PUkRFUicgZm9yIHRoZSBwYXJ0aWN1bGFyIG1hY2hpbmUuICAqLworI2luY2x1ZGUgPGJpdHMvZW5kaWFuLmg+CisKKy8qIFNvbWUgbWFjaGluZXMgbWF5IG5lZWQgdG8gdXNlIGEgZGlmZmVyZW50IGVuZGlhbm5lc3MgZm9yIGZsb2F0aW5nIHBvaW50CisgICB2YWx1ZXMuICAqLworI2lmbmRlZiBfX0ZMT0FUX1dPUkRfT1JERVIKKyMgZGVmaW5lIF9fRkxPQVRfV09SRF9PUkRFUiBfX0JZVEVfT1JERVIKKyNlbmRpZgorCisjaWZkZWYJX19VU0VfQlNECisjIGRlZmluZSBMSVRUTEVfRU5ESUFOCV9fTElUVExFX0VORElBTgorIyBkZWZpbmUgQklHX0VORElBTglfX0JJR19FTkRJQU4KKyMgZGVmaW5lIFBEUF9FTkRJQU4JX19QRFBfRU5ESUFOCisjIGRlZmluZSBCWVRFX09SREVSCV9fQllURV9PUkRFUgorI2VuZGlmCisKKyNpZiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOCisjIGRlZmluZSBfX0xPTkdfTE9OR19QQUlSKEhJLCBMTykgTE8sIEhJCisjZWxpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCisjIGRlZmluZSBfX0xPTkdfTE9OR19QQUlSKEhJLCBMTykgSEksIExPCisjZW5kaWYKKworCisjaWZkZWYgX19VU0VfQlNECisvKiBDb252ZXJzaW9uIGludGVyZmFjZXMuICAqLworIyBpbmNsdWRlIDxiaXRzL2J5dGVzd2FwLmg+CisKKyMgaWYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTgorIyAgZGVmaW5lIGh0b2JlMTYoeCkgX19ic3dhcF8xNiAoeCkKKyMgIGRlZmluZSBodG9sZTE2KHgpICh4KQorIyAgZGVmaW5lIGJlMTZ0b2goeCkgX19ic3dhcF8xNiAoeCkKKyMgIGRlZmluZSBsZTE2dG9oKHgpICh4KQorCisjICBkZWZpbmUgaHRvYmUzMih4KSBfX2Jzd2FwXzMyICh4KQorIyAgZGVmaW5lIGh0b2xlMzIoeCkgKHgpCisjICBkZWZpbmUgYmUzMnRvaCh4KSBfX2Jzd2FwXzMyICh4KQorIyAgZGVmaW5lIGxlMzJ0b2goeCkgKHgpCisKKyMgIGRlZmluZSBodG9iZTY0KHgpIF9fYnN3YXBfNjQgKHgpCisjICBkZWZpbmUgaHRvbGU2NCh4KSAoeCkKKyMgIGRlZmluZSBiZTY0dG9oKHgpIF9fYnN3YXBfNjQgKHgpCisjICBkZWZpbmUgbGU2NHRvaCh4KSAoeCkKKyMgZWxzZQorIyAgZGVmaW5lIGh0b2JlMTYoeCkgKHgpCisjICBkZWZpbmUgaHRvbGUxNih4KSBfX2Jzd2FwXzE2ICh4KQorIyAgZGVmaW5lIGJlMTZ0b2goeCkgKHgpCisjICBkZWZpbmUgbGUxNnRvaCh4KSBfX2Jzd2FwXzE2ICh4KQorCisjICBkZWZpbmUgaHRvYmUzMih4KSAoeCkKKyMgIGRlZmluZSBodG9sZTMyKHgpIF9fYnN3YXBfMzIgKHgpCisjICBkZWZpbmUgYmUzMnRvaCh4KSAoeCkKKyMgIGRlZmluZSBsZTMydG9oKHgpIF9fYnN3YXBfMzIgKHgpCisKKyMgIGRlZmluZSBodG9iZTY0KHgpICh4KQorIyAgZGVmaW5lIGh0b2xlNjQoeCkgX19ic3dhcF82NCAoeCkKKyMgIGRlZmluZSBiZTY0dG9oKHgpICh4KQorIyAgZGVmaW5lIGxlNjR0b2goeCkgX19ic3dhcF82NCAoeCkKKyMgZW5kaWYKKyNlbmRpZgorCisjZW5kaWYJLyogZW5kaWFuLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9lbnZ6LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZW52ei5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NDJkZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZW52ei5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qIFJvdXRpbmVzIGZvciBkZWFsaW5nIHdpdGggJ1wwJyBzZXBhcmF0ZWQgZW52aXJvbm1lbnQgdmVjdG9ycworICAgQ29weXJpZ2h0IChDKSAxOTk1LCA5NiwgOTgsIDk5LCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9FTlZaX0gKKyNkZWZpbmUgX0VOVlpfSAkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKworLyogRW52eidzIGFyZSBhcmd6J3MgdG9vLCBhbmQgc2hvdWxkIGJlIGNyZWF0ZWQgZXRjLiwgdXNpbmcgdGhlIHNhbWUKKyAgIHJvdXRpbmVzLiAgKi8KKyNpbmNsdWRlIDxhcmd6Lmg+CisKK19fQkVHSU5fREVDTFMKKworLyogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGVudHJ5IGluIEVOVlogZm9yIE5BTUUsIG9yIDAgaWYgdGhlcmUgaXMgbm9uZS4gICovCitleHRlcm4gY2hhciAqZW52el9lbnRyeSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZW52eiwgc2l6ZV90IF9fZW52el9sZW4sCisJCQkgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSkKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9wdXJlX187CisKKy8qIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSBwb3J0aW9uIG9mIHRoZSBlbnRyeSBpbiBFTlZaIGZvciBOQU1FLCBvciAwCisgICBpZiB0aGVyZSBpcyBub25lLiAgKi8KK2V4dGVybiBjaGFyICplbnZ6X2dldCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZW52eiwgc2l6ZV90IF9fZW52el9sZW4sCisJCSAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lKQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX3B1cmVfXzsKKworLyogQWRkcyBhbiBlbnRyeSBmb3IgTkFNRSB3aXRoIHZhbHVlIFZBTFVFIHRvIEVOVlogJiBFTlZaX0xFTi4gIElmIGFuIGVudHJ5CisgICB3aXRoIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gRU5WWiwgaXQgaXMgcmVtb3ZlZC4gIElmIFZBTFVFIGlzCisgICBOVUxMLCB0aGVuIHRoZSBuZXcgZW50cnkgd2lsbCBhIHNwZWNpYWwgbnVsbCBvbmUsIGZvciB3aGljaCBlbnZ6X2dldCB3aWxsCisgICByZXR1cm4gTlVMTCwgYWx0aG91Z2ggZW52el9lbnRyeSB3aWxsIHN0aWxsIHJldHVybiBhbiBlbnRyeTsgdGhpcyBpcyBoYW5keQorICAgYmVjYXVzZSB3aGVuIG1lcmdpbmcgd2l0aCBhbm90aGVyIGVudnosIHRoZSBudWxsIGVudHJ5IGNhbiBvdmVycmlkZSBhbgorICAgZW50cnkgaW4gdGhlIG90aGVyIG9uZS4gIE51bGwgZW50cmllcyBjYW4gYmUgcmVtb3ZlZCB3aXRoIGVudnpfc3RyaXAgKCkuICAqLworZXh0ZXJuIGVycm9yX3QgZW52el9hZGQgKGNoYXIgKipfX3Jlc3RyaWN0IF9fZW52eiwKKwkJCSBzaXplX3QgKl9fcmVzdHJpY3QgX19lbnZ6X2xlbiwKKwkJCSBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAorCQkJIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3ZhbHVlKSBfX1RIUk9XOworCisvKiBBZGRzIGVhY2ggZW50cnkgaW4gRU5WWjIgdG8gRU5WWiAmIEVOVlpfTEVOLCBhcyBpZiB3aXRoIGVudnpfYWRkKCkuICBJZgorICAgT1ZFUlJJREUgaXMgdHJ1ZSwgdGhlbiB2YWx1ZXMgaW4gRU5WWjIgd2lsbCBzdXBlcnNlZGUgdGhvc2Ugd2l0aCB0aGUgc2FtZQorICAgbmFtZSBpbiBFTlYsIG90aGVyd2lzZSBub3QuICAqLworZXh0ZXJuIGVycm9yX3QgZW52el9tZXJnZSAoY2hhciAqKl9fcmVzdHJpY3QgX19lbnZ6LAorCQkJICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fZW52el9sZW4sCisJCQkgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19lbnZ6MiwKKwkJCSAgIHNpemVfdCBfX2VudnoyX2xlbiwgaW50IF9fb3ZlcnJpZGUpIF9fVEhST1c7CisKKy8qIFJlbW92ZSB0aGUgZW50cnkgZm9yIE5BTUUgZnJvbSBFTlZaICYgRU5WWl9MRU4sIGlmIGFueS4gICovCitleHRlcm4gdm9pZCBlbnZ6X3JlbW92ZSAoY2hhciAqKl9fcmVzdHJpY3QgX19lbnZ6LAorCQkJIHNpemVfdCAqX19yZXN0cmljdCBfX2VudnpfbGVuLAorCQkJIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUpIF9fVEhST1c7CisKKy8qIFJlbW92ZSBudWxsIGVudHJpZXMuICAqLworZXh0ZXJuIHZvaWQgZW52el9zdHJpcCAoY2hhciAqKl9fcmVzdHJpY3QgX19lbnZ6LAorCQkJc2l6ZV90ICpfX3Jlc3RyaWN0IF9fZW52el9sZW4pIF9fVEhST1c7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBlbnZ6LmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9lcnIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9lcnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmYzNTUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2Vyci5oCkBAIC0wLDAgKzEsNTggQEAKKy8qIDQuNEJTRCB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgZXJyb3IgbWVzc2FnZXMuCisgICBDb3B5cmlnaHQgKEMpIDE5OTUsMTk5NiwxOTk3LDE5OTgsMTk5OSwyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmCV9FUlJfSAorI2RlZmluZQlfRVJSX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworI2RlZmluZQlfX25lZWRfX192YV9saXN0CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaWZuZGVmCV9fR05VQ19WQV9MSVNUCisjIGRlZmluZSBfX2dudWNfdmFfbGlzdAlfX3B0cl90CisjZW5kaWYKKworX19CRUdJTl9ERUNMUworCisvKiBQcmludCAicHJvZ3JhbTogIiwgRk9STUFULCAiOiAiLCB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyaW5nIGZvciBlcnJubywKKyAgIGFuZCBhIG5ld2xpbmUsIG9uIHN0ZGVyci4gICovCitleHRlcm4gdm9pZCB3YXJuIChfX2NvbnN0IGNoYXIgKl9fZm9ybWF0LCAuLi4pCisgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAxLCAyKSkpOworZXh0ZXJuIHZvaWQgdndhcm4gKF9fY29uc3QgY2hhciAqX19mb3JtYXQsIF9fZ251Y192YV9saXN0KQorICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMSwgMCkpKTsKKworLyogTGlrZXdpc2UsIGJ1dCB3aXRob3V0ICI6ICIgYW5kIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJpbmcuICAqLworZXh0ZXJuIHZvaWQgd2FybnggKF9fY29uc3QgY2hhciAqX19mb3JtYXQsIC4uLikKKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDEsIDIpKSk7CitleHRlcm4gdm9pZCB2d2FybnggKF9fY29uc3QgY2hhciAqX19mb3JtYXQsIF9fZ251Y192YV9saXN0KQorICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMSwgMCkpKTsKKworLyogTGlrZXdpc2UsIGFuZCB0aGVuIGV4aXQgd2l0aCBTVEFUVVMuICAqLworZXh0ZXJuIHZvaWQgZXJyIChpbnQgX19zdGF0dXMsIF9fY29uc3QgY2hhciAqX19mb3JtYXQsIC4uLikKKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXywgX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKK2V4dGVybiB2b2lkIHZlcnIgKGludCBfX3N0YXR1cywgX19jb25zdCBjaGFyICpfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QpCisgICAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18sIF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CitleHRlcm4gdm9pZCBlcnJ4IChpbnQgX19zdGF0dXMsIF9fY29uc3QgY2hhciAqX19mb3JtYXQsIC4uLikKKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXywgX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKK2V4dGVybiB2b2lkIHZlcnJ4IChpbnQgX19zdGF0dXMsIF9fY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCkKKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXywgX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmCS8qIGVyci5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZXJybm8uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9lcnJuby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzM2IwYzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZXJybm8uaApAQCAtMCwwICsxLDczIEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTEsOTIsOTMsOTQsOTUsOTYsOTcsMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyoKKyAqCUlTTyBDOTkgU3RhbmRhcmQ6IDcuNSBFcnJvcnMJPGVycm5vLmg+CisgKi8KKworI2lmbmRlZglfRVJSTk9fSAorCisvKiBUaGUgaW5jbHVkZXIgZGVmaW5lZCBfX25lZWRfRW1hdGggaWYgaGUgd2FudHMgb25seSB0aGUgZGVmaW5pdGlvbnMKKyAgIG9mIEVET00gYW5kIEVSQU5HRSwgYW5kIG5vdCBldmVyeXRoaW5nIGVsc2UuICAqLworI2lmbmRlZglfX25lZWRfRW1hdGgKKyMgZGVmaW5lIF9FUlJOT19ICTEKKyMgaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNlbmRpZgorCitfX0JFR0lOX0RFQ0xTCisKKy8qIEdldCB0aGUgZXJyb3IgbnVtYmVyIGNvbnN0YW50cyBmcm9tIHRoZSBzeXN0ZW0tc3BlY2lmaWMgZmlsZS4KKyAgIFRoaXMgZmlsZSB3aWxsIHRlc3QgX19uZWVkX0VtYXRoIGFuZCBfRVJSTk9fSC4gICovCisjaW5jbHVkZSA8Yml0cy9lcnJuby5oPgorI3VuZGVmCV9fbmVlZF9FbWF0aAorCisjaWZkZWYJX0VSUk5PX0gKKworLyogRGVjbGFyZSB0aGUgYGVycm5vJyB2YXJpYWJsZSwgdW5sZXNzIGl0J3MgZGVmaW5lZCBhcyBhIG1hY3JvIGJ5CisgICBiaXRzL2Vycm5vLmguICBUaGlzIGlzIHRoZSBjYXNlIGluIEdOVSwgd2hlcmUgaXQgaXMgYSBwZXItdGhyZWFkCisgICB2YXJpYWJsZS4gIFRoaXMgcmVkZWNsYXJhdGlvbiB1c2luZyB0aGUgbWFjcm8gc3RpbGwgd29ya3MsIGJ1dCBpdAorICAgd2lsbCBiZSBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIHdpdGhvdXQgYSBwcm90b3R5cGUgYW5kIG1heSB0cmlnZ2VyCisgICBhIC1Xc3RyaWN0LXByb3RvdHlwZXMgd2FybmluZy4gICovCisjaWZuZGVmCWVycm5vCitleHRlcm4gaW50IGVycm5vOworI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9HTlUKKworLyogVGhlIGZ1bGwgYW5kIHNpbXBsZSBmb3JtcyBvZiB0aGUgbmFtZSB3aXRoIHdoaWNoIHRoZSBwcm9ncmFtIHdhcworICAgaW52b2tlZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc2V0IHVwIGF1dG9tYXRpY2FsbHkgYXQgc3RhcnR1cCBiYXNlZCBvbgorICAgdGhlIHZhbHVlIG9mIEFSR1ZbMF0gKHRoaXMgd29ya3Mgb25seSBpZiB5b3UgdXNlIEdOVSBsZCkuICAqLworZXh0ZXJuIGNoYXIgKnByb2dyYW1faW52b2NhdGlvbl9uYW1lLCAqcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWU7CisjZW5kaWYgLyogX19VU0VfR05VICovCisjZW5kaWYgLyogX0VSUk5PX0ggKi8KKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9FUlJOT19IICovCisKKy8qIFRoZSBIdXJkIDxiaXRzL2Vycm5vLmg+IGRlZmluZXMgYGVycm9yX3QnIGFzIGFuIGVudW1lcmF0ZWQgdHlwZSBzbworICAgdGhhdCBwcmludGluZyBgZXJyb3JfdCcgdmFsdWVzIGluIHRoZSBkZWJ1Z2dlciBzaG93cyB0aGUgbmFtZXMuICBXZQorICAgbWlnaHQgbmVlZCB0aGlzIGRlZmluaXRpb24gc29tZXRpbWVzIGV2ZW4gaWYgdGhpcyBmaWxlIHdhcyBpbmNsdWRlZAorICAgYmVmb3JlLiAgKi8KKyNpZiBkZWZpbmVkIF9fVVNFX0dOVSB8fCBkZWZpbmVkIF9fbmVlZF9lcnJvcl90CisjIGlmbmRlZiBfX2Vycm9yX3RfZGVmaW5lZAordHlwZWRlZiBpbnQgZXJyb3JfdDsKKyMgIGRlZmluZSBfX2Vycm9yX3RfZGVmaW5lZAkxCisjIGVuZGlmCisjIHVuZGVmIF9fbmVlZF9lcnJvcl90CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9lcnJvci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2Vycm9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAzMjFlNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9lcnJvci5oCkBAIC0wLDAgKzEsNTggQEAKKy8qIERlY2xhcmF0aW9uIGZvciBlcnJvci1yZXBvcnRpbmcgZnVuY3Rpb24KKyAgIENvcHlyaWdodCAoQykgMTk5NSwxOTk2LDE5OTcsMjAwMywyMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX0VSUk9SX0gKKyNkZWZpbmUgX0VSUk9SX0ggMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworCitfX0JFR0lOX0RFQ0xTCisKKy8qIFByaW50IGEgbWVzc2FnZSB3aXRoIGBmcHJpbnRmIChzdGRlcnIsIEZPUk1BVCwgLi4uKSc7CisgICBpZiBFUlJOVU0gaXMgbm9uemVybywgZm9sbG93IGl0IHdpdGggIjogIiBhbmQgc3RyZXJyb3IgKEVSUk5VTSkuCisgICBJZiBTVEFUVVMgaXMgbm9uemVybywgdGVybWluYXRlIHRoZSBwcm9ncmFtIHdpdGggYGV4aXQgKFNUQVRVUyknLiAgKi8KKworZXh0ZXJuIHZvaWQgZXJyb3IgKGludCBfX3N0YXR1cywgaW50IF9fZXJybnVtLCBfX2NvbnN0IGNoYXIgKl9fZm9ybWF0LCAuLi4pCisgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOworCitleHRlcm4gdm9pZCBlcnJvcl9hdF9saW5lIChpbnQgX19zdGF0dXMsIGludCBfX2Vycm51bSwgX19jb25zdCBjaGFyICpfX2ZuYW1lLAorCQkJICAgdW5zaWduZWQgaW50IF9fbGluZW5vLCBfX2NvbnN0IGNoYXIgKl9fZm9ybWF0LCAuLi4pCisgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCA1LCA2KSkpOworCisvKiBJZiBOVUxMLCBlcnJvciB3aWxsIGZsdXNoIHN0ZG91dCwgdGhlbiBwcmludCBvbiBzdGRlcnIgdGhlIHByb2dyYW0KKyAgIG5hbWUsIGEgY29sb24gYW5kIGEgc3BhY2UuICBPdGhlcndpc2UsIGVycm9yIHdpbGwgY2FsbCB0aGlzCisgICBmdW5jdGlvbiB3aXRob3V0IHBhcmFtZXRlcnMgaW5zdGVhZC4gICovCitleHRlcm4gdm9pZCAoKmVycm9yX3ByaW50X3Byb2duYW1lKSAodm9pZCk7CisKKy8qIFRoaXMgdmFyaWFibGUgaXMgaW5jcmVtZW50ZWQgZWFjaCB0aW1lIGBlcnJvcicgaXMgY2FsbGVkLiAgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgZXJyb3JfbWVzc2FnZV9jb3VudDsKKworLyogU29tZXRpbWVzIHdlIHdhbnQgdG8gaGF2ZSBhdCBtb3N0IG9uZSBlcnJvciBwZXIgbGluZS4gIFRoaXMKKyAgIHZhcmlhYmxlIGNvbnRyb2xzIHdoZXRoZXIgdGhpcyBtb2RlIGlzIHNlbGVjdGVkIG9yIG5vdC4gICovCitleHRlcm4gaW50IGVycm9yX29uZV9wZXJfbGluZTsKKworCisjaWYgZGVmaW5lZCBfX2V4dGVybl9hbHdheXNfaW5saW5lICYmIGRlZmluZWQgX192YV9hcmdfcGFjaworIyBpbmNsdWRlIDxiaXRzL2Vycm9yLmg+CisjZW5kaWYKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIGVycm9yLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9leGVjaW5mby5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2V4ZWNpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE2MTRjYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9leGVjaW5mby5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfRVhFQ0lORk9fSAorI2RlZmluZSBfRVhFQ0lORk9fSCAxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKKy8qIFN0b3JlIHVwIHRvIFNJWkUgcmV0dXJuIGFkZHJlc3Mgb2YgdGhlIGN1cnJlbnQgcHJvZ3JhbSBzdGF0ZSBpbgorICAgQVJSQVkgYW5kIHJldHVybiB0aGUgZXhhY3QgbnVtYmVyIG9mIHZhbHVlcyBzdG9yZWQuICAqLworZXh0ZXJuIGludCBiYWNrdHJhY2UgKHZvaWQgKipfX2FycmF5LCBpbnQgX19zaXplKSBfX25vbm51bGwgKCgxKSk7CisKKworLyogUmV0dXJuIG5hbWVzIG9mIGZ1bmN0aW9ucyBmcm9tIHRoZSBiYWNrdHJhY2UgbGlzdCBpbiBBUlJBWSBpbiBhIG5ld2x5CisgICBtYWxsb2MoKWVkIG1lbW9yeSBibG9jay4gICovCitleHRlcm4gY2hhciAqKmJhY2t0cmFjZV9zeW1ib2xzICh2b2lkICpfX2NvbnN0ICpfX2FycmF5LCBpbnQgX19zaXplKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gYmFja3RyYWNlX3N5bWJvbHMoKSBidXQgaXQgd3JpdGVzIHRoZSByZXN1bHQKKyAgIGltbWVkaWF0ZWx5IHRvIGEgZmlsZS4gICovCitleHRlcm4gdm9pZCBiYWNrdHJhY2Vfc3ltYm9sc19mZCAodm9pZCAqX19jb25zdCAqX19hcnJheSwgaW50IF9fc2l6ZSwgaW50IF9fZmQpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogZXhlY2luZm8uaCAgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9mY250bC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2ZjbnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMwYmIzMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9mY250bC5oCkBAIC0wLDAgKzEsMjIyIEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTEsMTk5MiwxOTk0LTIwMDEsMjAwMywyMDA0LDIwMDUsMjAwNiwyMDA3CisJRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qCisgKglQT1NJWCBTdGFuZGFyZDogNi41IEZpbGUgQ29udHJvbCBPcGVyYXRpb25zCTxmY250bC5oPgorICovCisKKyNpZm5kZWYJX0ZDTlRMX0gKKyNkZWZpbmUJX0ZDTlRMX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworLyogVGhpcyBtdXN0IGJlIGVhcmx5IHNvIDxiaXRzL2ZjbnRsLmg+IGNhbiBkZWZpbmUgdHlwZXMgd2lubmluZ2x5LiAgKi8KK19fQkVHSU5fREVDTFMKKworLyogR2V0IHRoZSBkZWZpbml0aW9ucyBvZiBPXyosIEZfKiwgRkRfKjogYWxsIHRoZQorICAgbnVtYmVycyBhbmQgZmxhZyBiaXRzIGZvciBgb3BlbicsIGBmY250bCcsIGV0IGFsLiAgKi8KKyNpbmNsdWRlIDxiaXRzL2ZjbnRsLmg+CisKKy8qIEZvciBYUEcgYWxsIHN5bWJvbHMgZnJvbSA8c3lzL3N0YXQuaD4gc2hvdWxkIGFsc28gYmUgYXZhaWxhYmxlLiAgKi8KKyNpZmRlZiBfX1VTRV9YT1BFTgorIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisKKyNpZmRlZglfX1VTRV9NSVNDCisjIGlmbmRlZiBSX09LCQkJLyogVmVyYmF0aW0gZnJvbSA8dW5pc3RkLmg+LiAgVWdoLiAgKi8KKy8qIFZhbHVlcyBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCB0byBhY2Nlc3MuCisgICBUaGVzZSBtYXkgYmUgT1InZCB0b2dldGhlci4gICovCisjICBkZWZpbmUgUl9PSwk0CQkvKiBUZXN0IGZvciByZWFkIHBlcm1pc3Npb24uICAqLworIyAgZGVmaW5lIFdfT0sJMgkJLyogVGVzdCBmb3Igd3JpdGUgcGVybWlzc2lvbi4gICovCisjICBkZWZpbmUgWF9PSwkxCQkvKiBUZXN0IGZvciBleGVjdXRlIHBlcm1pc3Npb24uICAqLworIyAgZGVmaW5lIEZfT0sJMAkJLyogVGVzdCBmb3IgZXhpc3RlbmNlLiAgKi8KKyMgZW5kaWYKKyNlbmRpZiAvKiBVc2UgbWlzYy4gICovCisKKy8qIFhQRyB3YW50cyB0aGUgZm9sbG93aW5nIHN5bWJvbHMuICAqLworI2lmZGVmIF9fVVNFX1hPUEVOCQkvKiA8c3RkaW8uaD4gaGFzIHRoZSBzYW1lIGRlZmluaXRpb25zLiAgKi8KKyMgZGVmaW5lIFNFRUtfU0VUCTAJLyogU2VlayBmcm9tIGJlZ2lubmluZyBvZiBmaWxlLiAgKi8KKyMgZGVmaW5lIFNFRUtfQ1VSCTEJLyogU2VlayBmcm9tIGN1cnJlbnQgcG9zaXRpb24uICAqLworIyBkZWZpbmUgU0VFS19FTkQJMgkvKiBTZWVrIGZyb20gZW5kIG9mIGZpbGUuICAqLworI2VuZGlmCS8qIFhQRyAqLworCisjaWZkZWYgX19VU0VfQVRGSUxFCisjIGRlZmluZSBBVF9GRENXRAkJLTEwMAkvKiBTcGVjaWFsIHZhbHVlIHVzZWQgdG8gaW5kaWNhdGUKKwkJCQkJICAgdGhlICphdCBmdW5jdGlvbnMgc2hvdWxkIHVzZSB0aGUKKwkJCQkJICAgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gKi8KKyMgZGVmaW5lIEFUX1NZTUxJTktfTk9GT0xMT1cJMHgxMDAJLyogRG8gbm90IGZvbGxvdyBzeW1ib2xpYyBsaW5rcy4gICovCisjIGRlZmluZSBBVF9SRU1PVkVESVIJCTB4MjAwCS8qIFJlbW92ZSBkaXJlY3RvcnkgaW5zdGVhZCBvZgorCQkJCQkgICB1bmxpbmtpbmcgZmlsZS4gICovCisjIGRlZmluZSBBVF9TWU1MSU5LX0ZPTExPVwkweDQwMAkvKiBGb2xsb3cgc3ltYm9saWMgbGlua3MuICAqLworIyBkZWZpbmUgQVRfRUFDQ0VTUwkJMHgyMDAJLyogVGVzdCBhY2Nlc3MgcGVybWl0dGVkIGZvcgorCQkJCQkgICBlZmZlY3RpdmUgSURzLCBub3QgcmVhbCBJRHMuICAqLworI2VuZGlmCisKKy8qIERvIHRoZSBmaWxlIGNvbnRyb2wgb3BlcmF0aW9uIGRlc2NyaWJlZCBieSBDTUQgb24gRkQuCisgICBUaGUgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgaW50ZXJwcmV0ZWQgZGVwZW5kaW5nIG9uIENNRC4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aAorICAgX19USFJPVy4gICovCitleHRlcm4gaW50IGZjbnRsIChpbnQgX19mZCwgaW50IF9fY21kLCAuLi4pOworCisvKiBPcGVuIEZJTEUgYW5kIHJldHVybiBhIG5ldyBmaWxlIGRlc2NyaXB0b3IgZm9yIGl0LCBvciAtMSBvbiBlcnJvci4KKyAgIE9GTEFHIGRldGVybWluZXMgdGhlIHR5cGUgb2YgYWNjZXNzIHVzZWQuICBJZiBPX0NSRUFUIGlzIG9uIE9GTEFHLAorICAgdGhlIHRoaXJkIGFyZ3VtZW50IGlzIHRha2VuIGFzIGEgYG1vZGVfdCcsIHRoZSBtb2RlIG9mIHRoZSBjcmVhdGVkIGZpbGUuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGgKKyAgIF9fVEhST1cuICAqLworI2lmbmRlZiBfX1VTRV9GSUxFX09GRlNFVDY0CitleHRlcm4gaW50IG9wZW4gKF9fY29uc3QgY2hhciAqX19maWxlLCBpbnQgX19vZmxhZywgLi4uKSBfX25vbm51bGwgKCgxKSk7CisjZWxzZQorIyBpZmRlZiBfX1JFRElSRUNUCitleHRlcm4gaW50IF9fUkVESVJFQ1QgKG9wZW4sIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fb2ZsYWcsIC4uLiksIG9wZW42NCkKKyAgICAgX19ub25udWxsICgoMSkpOworIyBlbHNlCisjICBkZWZpbmUgb3BlbiBvcGVuNjQKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIF9fVVNFX0xBUkdFRklMRTY0CitleHRlcm4gaW50IG9wZW42NCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX29mbGFnLCAuLi4pIF9fbm9ubnVsbCAoKDEpKTsKKyNlbmRpZgorCisjaWZkZWYgX19VU0VfQVRGSUxFCisvKiBTaW1pbGFyIHRvIGBvcGVuJyBidXQgYSByZWxhdGl2ZSBwYXRoIG5hbWUgaXMgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8KKyAgIHRoZSBkaXJlY3RvcnkgZm9yIHdoaWNoIEZEIGlzIGEgZGVzY3JpcHRvci4KKworICAgTk9URTogc29tZSBvdGhlciBgb3BlbmF0JyBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0IGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eQorICAgdGhyb3VnaCB0aGlzIGludGVyZmFjZSwgZXNwZWNpYWxseSB1c2luZyB0aGUgT19YQVRUUiBmbGFnLiAgVGhpcyBpcyBub3QKKyAgIHlldCBzdXBwb3J0ZWQgaGVyZS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aAorICAgX19USFJPVy4gICovCisjIGlmbmRlZiBfX1VTRV9GSUxFX09GRlNFVDY0CitleHRlcm4gaW50IG9wZW5hdCAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19maWxlLCBpbnQgX19vZmxhZywgLi4uKQorICAgICBfX25vbm51bGwgKCgyKSk7CisjIGVsc2UKKyMgIGlmZGVmIF9fUkVESVJFQ1QKK2V4dGVybiBpbnQgX19SRURJUkVDVCAob3BlbmF0LCAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19maWxlLCBpbnQgX19vZmxhZywKKwkJCQkuLi4pLCBvcGVuYXQ2NCkgX19ub25udWxsICgoMikpOworIyAgZWxzZQorIyAgIGRlZmluZSBvcGVuYXQgb3BlbmF0NjQKKyMgIGVuZGlmCisjIGVuZGlmCisKK2V4dGVybiBpbnQgb3BlbmF0NjQgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fb2ZsYWcsIC4uLikKKyAgICAgX19ub25udWxsICgoMikpOworI2VuZGlmCisKKy8qIENyZWF0ZSBhbmQgb3BlbiBGSUxFLCB3aXRoIG1vZGUgTU9ERS4gIFRoaXMgdGFrZXMgYW4gYGludCcgTU9ERQorICAgYXJndW1lbnQgYmVjYXVzZSB0aGF0IGlzIHdoYXQgYG1vZGVfdCcgd2lsbCBiZSB3aWRlbmVkIHRvLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoCisgICBfX1RIUk9XLiAgKi8KKyNpZm5kZWYgX19VU0VfRklMRV9PRkZTRVQ2NAorZXh0ZXJuIGludCBjcmVhdCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fbW9kZV90IF9fbW9kZSkgX19ub25udWxsICgoMSkpOworI2Vsc2UKKyMgaWZkZWYgX19SRURJUkVDVAorZXh0ZXJuIGludCBfX1JFRElSRUNUIChjcmVhdCwgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX21vZGVfdCBfX21vZGUpLAorCQkgICAgICAgY3JlYXQ2NCkgX19ub25udWxsICgoMSkpOworIyBlbHNlCisjICBkZWZpbmUgY3JlYXQgY3JlYXQ2NAorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgX19VU0VfTEFSR0VGSUxFNjQKK2V4dGVybiBpbnQgY3JlYXQ2NCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fbW9kZV90IF9fbW9kZSkgX19ub25udWxsICgoMSkpOworI2VuZGlmCisKKyNpZiAhZGVmaW5lZCBGX0xPQ0sgJiYgKGRlZmluZWQgX19VU0VfTUlTQyB8fCAoZGVmaW5lZCBfX1VTRV9YT1BFTl9FWFRFTkRFRCBcCisJCQkJCSAgICAgICAmJiAhZGVmaW5lZCBfX1VTRV9QT1NJWCkpCisvKiBOT1RFOiBUaGVzZSBkZWNsYXJhdGlvbnMgYWxzbyBhcHBlYXIgaW4gPHVuaXN0ZC5oPjsgYmUgc3VyZSB0byBrZWVwIGJvdGgKKyAgIGZpbGVzIGNvbnNpc3RlbnQuICBTb21lIHN5c3RlbXMgaGF2ZSB0aGVtIHRoZXJlIGFuZCBzb21lIGhlcmUsIGFuZCBzb21lCisgICBzb2Z0d2FyZSBkZXBlbmRzIG9uIHRoZSBtYWNyb3MgYmVpbmcgZGVmaW5lZCB3aXRob3V0IGluY2x1ZGluZyBib3RoLiAgKi8KKworLyogYGxvY2tmJyBpcyBhIHNpbXBsZXIgaW50ZXJmYWNlIHRvIHRoZSBsb2NraW5nIGZhY2lsaXRpZXMgb2YgYGZjbnRsJy4KKyAgIExFTiBpcyBhbHdheXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlvbi4KKyAgIFRoZSBDTUQgYXJndW1lbnQgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmcuICAqLworCisjIGRlZmluZSBGX1VMT0NLIDAJLyogVW5sb2NrIGEgcHJldmlvdXNseSBsb2NrZWQgcmVnaW9uLiAgKi8KKyMgZGVmaW5lIEZfTE9DSyAgMQkvKiBMb2NrIGEgcmVnaW9uIGZvciBleGNsdXNpdmUgdXNlLiAgKi8KKyMgZGVmaW5lIEZfVExPQ0sgMgkvKiBUZXN0IGFuZCBsb2NrIGEgcmVnaW9uIGZvciBleGNsdXNpdmUgdXNlLiAgKi8KKyMgZGVmaW5lIEZfVEVTVCAgMwkvKiBUZXN0IGEgcmVnaW9uIGZvciBvdGhlciBwcm9jZXNzZXMgbG9ja3MuICAqLworCisjIGlmbmRlZiBfX1VTRV9GSUxFX09GRlNFVDY0CitleHRlcm4gaW50IGxvY2tmIChpbnQgX19mZCwgaW50IF9fY21kLCBfX29mZl90IF9fbGVuKTsKKyMgZWxzZQorIyBpZmRlZiBfX1JFRElSRUNUCitleHRlcm4gaW50IF9fUkVESVJFQ1QgKGxvY2tmLCAoaW50IF9fZmQsIGludCBfX2NtZCwgX19vZmY2NF90IF9fbGVuKSwgbG9ja2Y2NCk7CisjIGVsc2UKKyMgIGRlZmluZSBsb2NrZiBsb2NrZjY0CisjIGVuZGlmCisjIGVuZGlmCisjIGlmZGVmIF9fVVNFX0xBUkdFRklMRTY0CitleHRlcm4gaW50IGxvY2tmNjQgKGludCBfX2ZkLCBpbnQgX19jbWQsIF9fb2ZmNjRfdCBfX2xlbik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9fVVNFX1hPUEVOMksKKy8qIEFkdmljZSB0aGUgc3lzdGVtIGFib3V0IHRoZSBleHBlY3RlZCBiZWhhdmlvdXIgb2YgdGhlIGFwcGxpY2F0aW9uIHdpdGgKKyAgIHJlc3BlY3QgdG8gdGhlIGZpbGUgYXNzb2NpYXRlZCB3aXRoIEZELiAgKi8KKyMgaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKK2V4dGVybiBpbnQgcG9zaXhfZmFkdmlzZSAoaW50IF9fZmQsIF9fb2ZmX3QgX19vZmZzZXQsIF9fb2ZmX3QgX19sZW4sCisJCQkgIGludCBfX2FkdmlzZSkgX19USFJPVzsKKyMgZWxzZQorIyBpZmRlZiBfX1JFRElSRUNUX05USAorZXh0ZXJuIGludCBfX1JFRElSRUNUX05USCAocG9zaXhfZmFkdmlzZSwgKGludCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQsCisJCQkJCSAgIF9fb2ZmNjRfdCBfX2xlbiwgaW50IF9fYWR2aXNlKSwKKwkJCSAgIHBvc2l4X2ZhZHZpc2U2NCk7CisjIGVsc2UKKyMgIGRlZmluZSBwb3NpeF9mYWR2aXNlIHBvc2l4X2ZhZHZpc2U2NAorIyBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAorZXh0ZXJuIGludCBwb3NpeF9mYWR2aXNlNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQsIF9fb2ZmNjRfdCBfX2xlbiwKKwkJCSAgICBpbnQgX19hZHZpc2UpIF9fVEhST1c7CisjIGVuZGlmCisKKworLyogUmVzZXJ2ZSBzdG9yYWdlIGZvciB0aGUgZGF0YSBvZiB0aGUgZmlsZSBhc3NvY2lhdGVkIHdpdGggRkQuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnRzIGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KKyMgaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKK2V4dGVybiBpbnQgcG9zaXhfZmFsbG9jYXRlIChpbnQgX19mZCwgX19vZmZfdCBfX29mZnNldCwgX19vZmZfdCBfX2xlbik7CisjIGVsc2UKKyMgaWZkZWYgX19SRURJUkVDVAorZXh0ZXJuIGludCBfX1JFRElSRUNUIChwb3NpeF9mYWxsb2NhdGUsIChpbnQgX19mZCwgX19vZmY2NF90IF9fb2Zmc2V0LAorCQkJCQkgX19vZmY2NF90IF9fbGVuKSwKKwkJICAgICAgIHBvc2l4X2ZhbGxvY2F0ZTY0KTsKKyMgZWxzZQorIyAgZGVmaW5lIHBvc2l4X2ZhbGxvY2F0ZSBwb3NpeF9mYWxsb2NhdGU2NAorIyBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAorZXh0ZXJuIGludCBwb3NpeF9mYWxsb2NhdGU2NCAoaW50IF9fZmQsIF9fb2ZmNjRfdCBfX29mZnNldCwgX19vZmY2NF90IF9fbGVuKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIERlZmluZSBzb21lIGlubGluZXMgaGVscGluZyB0byBjYXRjaCBjb21tb24gcHJvYmxlbXMuICAqLworI2lmIF9fVVNFX0ZPUlRJRllfTEVWRUwgPiAwICYmIGRlZmluZWQgX19leHRlcm5fYWx3YXlzX2lubGluZSBcCisgICAgJiYgZGVmaW5lZCBfX3ZhX2FyZ19wYWNrX2xlbgorIyBpbmNsdWRlIDxiaXRzL2ZjbnRsMi5oPgorI2VuZGlmCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBmY250bC5oICAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTQ0ZTM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgKQEAgLTAsMCArMSwzNTcgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5MSwxOTkyLDE5OTMsMTk5NS0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYJX0ZFQVRVUkVTX0gKKyNkZWZpbmUJX0ZFQVRVUkVTX0gJMQorCisvKiBUaGVzZSBhcmUgZGVmaW5lZCBieSB0aGUgdXNlciAob3IgdGhlIGNvbXBpbGVyKQorICAgdG8gc3BlY2lmeSB0aGUgZGVzaXJlZCBlbnZpcm9ubWVudDoKKworICAgX19TVFJJQ1RfQU5TSV9fCUlTTyBTdGFuZGFyZCBDLgorICAgX0lTT0M5OV9TT1VSQ0UJRXh0ZW5zaW9ucyB0byBJU08gQzg5IGZyb20gSVNPIEM5OS4KKyAgIF9QT1NJWF9TT1VSQ0UJSUVFRSBTdGQgMTAwMy4xLgorICAgX1BPU0lYX0NfU09VUkNFCUlmID09MSwgbGlrZSBfUE9TSVhfU09VUkNFOyBpZiA+PTIgYWRkIElFRUUgU3RkIDEwMDMuMjsKKwkJCWlmID49MTk5MzA5TCwgYWRkIElFRUUgU3RkIDEwMDMuMWItMTk5MzsKKwkJCWlmID49MTk5NTA2TCwgYWRkIElFRUUgU3RkIDEwMDMuMWMtMTk5NTsKKwkJCWlmID49MjAwMTEyTCwgYWxsIG9mIElFRUUgMTAwMy4xLTIwMDQKKyAgIF9YT1BFTl9TT1VSQ0UJSW5jbHVkZXMgUE9TSVggYW5kIFhQRyB0aGluZ3MuICBTZXQgdG8gNTAwIGlmCisJCQlTaW5nbGUgVW5peCBjb25mb3JtYW5jZSBpcyB3YW50ZWQsIHRvIDYwMCBmb3IgdGhlCisJCQl1cGNvbWluZyBzaXh0aCByZXZpc2lvbi4KKyAgIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgWFBHIHRoaW5ncyBhbmQgWC9PcGVuIFVuaXggZXh0ZW5zaW9ucy4KKyAgIF9MQVJHRUZJTEVfU09VUkNFCVNvbWUgbW9yZSBmdW5jdGlvbnMgZm9yIGNvcnJlY3Qgc3RhbmRhcmQgSS9PLgorICAgX0xBUkdFRklMRTY0X1NPVVJDRQlBZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkgZnJvbSBMRlMgZm9yIGxhcmdlIGZpbGVzLgorICAgX0ZJTEVfT0ZGU0VUX0JJVFM9TglTZWxlY3QgZGVmYXVsdCBmaWxlc3lzdGVtIGludGVyZmFjZS4KKyAgIF9CU0RfU09VUkNFCQlJU08gQywgUE9TSVgsIGFuZCA0LjNCU0QgdGhpbmdzLgorICAgX1NWSURfU09VUkNFCQlJU08gQywgUE9TSVgsIGFuZCBTVklEIHRoaW5ncy4KKyAgIF9BVEZJTEVfU09VUkNFCUFkZGl0aW9uYWwgKmF0IGludGVyZmFjZXMuCisgICBfR05VX1NPVVJDRQkJQWxsIG9mIHRoZSBhYm92ZSwgcGx1cyBHTlUgZXh0ZW5zaW9ucy4KKyAgIF9SRUVOVFJBTlQJCVNlbGVjdCBhZGRpdGlvbmFsbHkgcmVlbnRyYW50IG9iamVjdC4KKyAgIF9USFJFQURfU0FGRQkJU2FtZSBhcyBfUkVFTlRSQU5ULCBvZnRlbiB1c2VkIGJ5IG90aGVyIHN5c3RlbXMuCisgICBfRk9SVElGWV9TT1VSQ0UJSWYgc2V0IHRvIG51bWVyaWMgdmFsdWUgPiAwIGFkZGl0aW9uYWwgc2VjdXJpdHkKKwkJCW1lYXN1cmVzIGFyZSBkZWZpbmVkLCBhY2NvcmRpbmcgdG8gbGV2ZWwuCisKKyAgIFRoZSBgLWFuc2knIHN3aXRjaCB0byB0aGUgR05VIEMgY29tcGlsZXIgZGVmaW5lcyBfX1NUUklDVF9BTlNJX18uCisgICBJZiBub25lIG9mIHRoZXNlIGFyZSBkZWZpbmVkLCB0aGUgZGVmYXVsdCBpcyB0byBoYXZlIF9TVklEX1NPVVJDRSwKKyAgIF9CU0RfU09VUkNFLCBhbmQgX1BPU0lYX1NPVVJDRSBzZXQgdG8gb25lIGFuZCBfUE9TSVhfQ19TT1VSQ0Ugc2V0IHRvCisgICAyMDAxMTJMLiAgSWYgbW9yZSB0aGFuIG9uZSBvZiB0aGVzZSBhcmUgZGVmaW5lZCwgdGhleSBhY2N1bXVsYXRlLgorICAgRm9yIGV4YW1wbGUgX19TVFJJQ1RfQU5TSV9fLCBfUE9TSVhfU09VUkNFIGFuZCBfUE9TSVhfQ19TT1VSQ0UKKyAgIHRvZ2V0aGVyIGdpdmUgeW91IElTTyBDLCAxMDAzLjEsIGFuZCAxMDAzLjIsIGJ1dCBub3RoaW5nIGVsc2UuCisKKyAgIFRoZXNlIGFyZSBkZWZpbmVkIGJ5IHRoaXMgZmlsZSBhbmQgYXJlIHVzZWQgYnkgdGhlCisgICBoZWFkZXIgZmlsZXMgdG8gZGVjaWRlIHdoYXQgdG8gZGVjbGFyZSBvciBkZWZpbmU6CisKKyAgIF9fVVNFX0lTT0M5OQkJRGVmaW5lIElTTyBDOTkgdGhpbmdzLgorICAgX19VU0VfSVNPQzk1CQlEZWZpbmUgSVNPIEM5MCBBTUQxIChDOTUpIHRoaW5ncy4KKyAgIF9fVVNFX1BPU0lYCQlEZWZpbmUgSUVFRSBTdGQgMTAwMy4xIHRoaW5ncy4KKyAgIF9fVVNFX1BPU0lYMgkJRGVmaW5lIElFRUUgU3RkIDEwMDMuMiB0aGluZ3MuCisgICBfX1VTRV9QT1NJWDE5OTMwOQlEZWZpbmUgSUVFRSBTdGQgMTAwMy4xLCBhbmQgLjFiIHRoaW5ncy4KKyAgIF9fVVNFX1BPU0lYMTk5NTA2CURlZmluZSBJRUVFIFN0ZCAxMDAzLjEsIC4xYiwgLjFjIGFuZCAuMWkgdGhpbmdzLgorICAgX19VU0VfWE9QRU4JCURlZmluZSBYUEcgdGhpbmdzLgorICAgX19VU0VfWE9QRU5fRVhURU5ERUQJRGVmaW5lIFgvT3BlbiBVbml4IHRoaW5ncy4KKyAgIF9fVVNFX1VOSVg5OAkJRGVmaW5lIFNpbmdsZSBVbml4IFYyIHRoaW5ncy4KKyAgIF9fVVNFX1hPUEVOMksgICAgICAgIERlZmluZSBYUEc2IHRoaW5ncy4KKyAgIF9fVVNFX0xBUkdFRklMRQlEZWZpbmUgY29ycmVjdCBzdGFuZGFyZCBJL08gdGhpbmdzLgorICAgX19VU0VfTEFSR0VGSUxFNjQJRGVmaW5lIExGUyB0aGluZ3Mgd2l0aCBzZXBhcmF0ZSBuYW1lcy4KKyAgIF9fVVNFX0ZJTEVfT0ZGU0VUNjQJRGVmaW5lIDY0Yml0IGludGVyZmFjZSBhcyBkZWZhdWx0LgorICAgX19VU0VfQlNECQlEZWZpbmUgNC4zQlNEIHRoaW5ncy4KKyAgIF9fVVNFX1NWSUQJCURlZmluZSBTVklEIHRoaW5ncy4KKyAgIF9fVVNFX01JU0MJCURlZmluZSB0aGluZ3MgY29tbW9uIHRvIEJTRCBhbmQgU3lzdGVtIFYgVW5peC4KKyAgIF9fVVNFX0FURklMRQkJRGVmaW5lICphdCBpbnRlcmZhY2VzIGFuZCBBVF8qIGNvbnN0YW50cyBmb3IgdGhlbS4KKyAgIF9fVVNFX0dOVQkJRGVmaW5lIEdOVSBleHRlbnNpb25zLgorICAgX19VU0VfUkVFTlRSQU5UCURlZmluZSByZWVudHJhbnQvdGhyZWFkLXNhZmUgKl9yIGZ1bmN0aW9ucy4KKyAgIF9fVVNFX0ZPUlRJRllfTEVWRUwJQWRkaXRpb25hbCBzZWN1cml0eSBtZWFzdXJlcyB1c2VkLCBhY2NvcmRpbmcgdG8gbGV2ZWwuCisgICBfX0ZBVk9SX0JTRAkJRmF2b3IgNC4zQlNEIHRoaW5ncyBpbiBjYXNlcyBvZiBjb25mbGljdC4KKworICAgVGhlIG1hY3JvcyBgX19HTlVfTElCUkFSWV9fJywgYF9fR0xJQkNfXycsIGFuZCBgX19HTElCQ19NSU5PUl9fJyBhcmUKKyAgIGRlZmluZWQgYnkgdGhpcyBmaWxlIHVuY29uZGl0aW9uYWxseS4gIGBfX0dOVV9MSUJSQVJZX18nIGlzIHByb3ZpZGVkCisgICBvbmx5IGZvciBjb21wYXRpYmlsaXR5LiAgQWxsIG5ldyBjb2RlIHNob3VsZCB1c2UgdGhlIG90aGVyIHN5bWJvbHMKKyAgIHRvIHRlc3QgZm9yIGZlYXR1cmVzLgorCisgICBBbGwgbWFjcm9zIGxpc3RlZCBhYm92ZSBhcyBwb3NzaWJseSBiZWluZyBkZWZpbmVkIGJ5IHRoaXMgZmlsZSBhcmUKKyAgIGV4cGxpY2l0bHkgdW5kZWZpbmVkIGlmIHRoZXkgYXJlIG5vdCBleHBsaWNpdGx5IGRlZmluZWQuCisgICBGZWF0dXJlLXRlc3QgbWFjcm9zIHRoYXQgYXJlIG5vdCBkZWZpbmVkIGJ5IHRoZSB1c2VyIG9yIGNvbXBpbGVyCisgICBidXQgYXJlIGltcGxpZWQgYnkgdGhlIG90aGVyIGZlYXR1cmUtdGVzdCBtYWNyb3MgZGVmaW5lZCAob3IgYnkgdGhlCisgICBsYWNrIG9mIGFueSBkZWZpbml0aW9ucykgYXJlIGRlZmluZWQgYnkgdGhlIGZpbGUuICAqLworCisKKy8qIFVuZGVmaW5lIGV2ZXJ5dGhpbmcsIHNvIHdlIGdldCBhIGNsZWFuIHNsYXRlLiAgKi8KKyN1bmRlZglfX1VTRV9JU09DOTkKKyN1bmRlZglfX1VTRV9JU09DOTUKKyN1bmRlZglfX1VTRV9QT1NJWAorI3VuZGVmCV9fVVNFX1BPU0lYMgorI3VuZGVmCV9fVVNFX1BPU0lYMTk5MzA5CisjdW5kZWYJX19VU0VfUE9TSVgxOTk1MDYKKyN1bmRlZglfX1VTRV9YT1BFTgorI3VuZGVmCV9fVVNFX1hPUEVOX0VYVEVOREVECisjdW5kZWYJX19VU0VfVU5JWDk4CisjdW5kZWYJX19VU0VfWE9QRU4ySworI3VuZGVmCV9fVVNFX0xBUkdFRklMRQorI3VuZGVmCV9fVVNFX0xBUkdFRklMRTY0CisjdW5kZWYJX19VU0VfRklMRV9PRkZTRVQ2NAorI3VuZGVmCV9fVVNFX0JTRAorI3VuZGVmCV9fVVNFX1NWSUQKKyN1bmRlZglfX1VTRV9NSVNDCisjdW5kZWYJX19VU0VfQVRGSUxFCisjdW5kZWYJX19VU0VfR05VCisjdW5kZWYJX19VU0VfUkVFTlRSQU5UCisjdW5kZWYJX19VU0VfRk9SVElGWV9MRVZFTAorI3VuZGVmCV9fRkFWT1JfQlNECisjdW5kZWYJX19LRVJORUxfU1RSSUNUX05BTUVTCisKKy8qIFN1cHByZXNzIGtlcm5lbC1uYW1lIHNwYWNlIHBvbGx1dGlvbiB1bmxlc3MgdXNlciBleHByZXNzZWRseSBhc2tzCisgICBmb3IgaXQuICAqLworI2lmbmRlZiBfTE9PU0VfS0VSTkVMX05BTUVTCisjIGRlZmluZSBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMKKyNlbmRpZgorCisvKiBBbHdheXMgdXNlIElTTyBDIHRoaW5ncy4gICovCisjZGVmaW5lCV9fVVNFX0FOU0kJMQorCisvKiBDb252ZW5pZW5jZSBtYWNyb3MgdG8gdGVzdCB0aGUgdmVyc2lvbnMgb2YgZ2xpYmMgYW5kIGdjYy4KKyAgIFVzZSB0aGVtIGxpa2UgdGhpczoKKyAgICNpZiBfX0dOVUNfUFJFUkVRICgyLDgpCisgICAuLi4gY29kZSByZXF1aXJpbmcgZ2NjIDIuOCBvciBsYXRlciAuLi4KKyAgICNlbmRpZgorICAgTm90ZSAtIHRoZXkgd29uJ3Qgd29yayBmb3IgZ2NjMSBvciBnbGliYzEsIHNpbmNlIHRoZSBfTUlOT1IgbWFjcm9zCisgICB3ZXJlIG5vdCBkZWZpbmVkIHRoZW4uICAqLworI2lmIGRlZmluZWQgX19HTlVDX18gJiYgZGVmaW5lZCBfX0dOVUNfTUlOT1JfXworIyBkZWZpbmUgX19HTlVDX1BSRVJFUShtYWosIG1pbikgXAorCSgoX19HTlVDX18gPDwgMTYpICsgX19HTlVDX01JTk9SX18gPj0gKChtYWopIDw8IDE2KSArIChtaW4pKQorI2Vsc2UKKyMgZGVmaW5lIF9fR05VQ19QUkVSRVEobWFqLCBtaW4pIDAKKyNlbmRpZgorCisKKy8qIElmIF9CU0RfU09VUkNFIHdhcyBkZWZpbmVkIGJ5IHRoZSB1c2VyLCBmYXZvciBCU0Qgb3ZlciBQT1NJWC4gICovCisjaWYgZGVmaW5lZCBfQlNEX1NPVVJDRSAmJiBcCisgICAgIShkZWZpbmVkIF9QT1NJWF9TT1VSQ0UgfHwgZGVmaW5lZCBfUE9TSVhfQ19TT1VSQ0UgfHwgXAorICAgICAgZGVmaW5lZCBfWE9QRU5fU09VUkNFIHx8IGRlZmluZWQgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCB8fCBcCisgICAgICBkZWZpbmVkIF9HTlVfU09VUkNFIHx8IGRlZmluZWQgX1NWSURfU09VUkNFKQorIyBkZWZpbmUgX19GQVZPUl9CU0QJMQorI2VuZGlmCisKKy8qIElmIF9HTlVfU09VUkNFIHdhcyBkZWZpbmVkIGJ5IHRoZSB1c2VyLCB0dXJuIG9uIGFsbCB0aGUgb3RoZXIgZmVhdHVyZXMuICAqLworI2lmZGVmIF9HTlVfU09VUkNFCisjIHVuZGVmICBfSVNPQzk5X1NPVVJDRQorIyBkZWZpbmUgX0lTT0M5OV9TT1VSQ0UJMQorIyB1bmRlZiAgX1BPU0lYX1NPVVJDRQorIyBkZWZpbmUgX1BPU0lYX1NPVVJDRQkxCisjIHVuZGVmICBfUE9TSVhfQ19TT1VSQ0UKKyMgZGVmaW5lIF9QT1NJWF9DX1NPVVJDRQkyMDAxMTJMCisjIHVuZGVmICBfWE9QRU5fU09VUkNFCisjIGRlZmluZSBfWE9QRU5fU09VUkNFCTYwMAorIyB1bmRlZiAgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAorIyBkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAkxCisjIHVuZGVmCSBfTEFSR0VGSUxFNjRfU09VUkNFCisjIGRlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCTEKKyMgdW5kZWYgIF9CU0RfU09VUkNFCisjIGRlZmluZSBfQlNEX1NPVVJDRQkxCisjIHVuZGVmICBfU1ZJRF9TT1VSQ0UKKyMgZGVmaW5lIF9TVklEX1NPVVJDRQkxCisjIHVuZGVmICBfQVRGSUxFX1NPVVJDRQorIyBkZWZpbmUgX0FURklMRV9TT1VSQ0UJMQorI2VuZGlmCisKKy8qIElmIG5vdGhpbmcgKG90aGVyIHRoYW4gX0dOVV9TT1VSQ0UpIGlzIGRlZmluZWQsCisgICBkZWZpbmUgX0JTRF9TT1VSQ0UgYW5kIF9TVklEX1NPVVJDRS4gICovCisjaWYgKCFkZWZpbmVkIF9fU1RSSUNUX0FOU0lfXyAmJiAhZGVmaW5lZCBfSVNPQzk5X1NPVVJDRSAmJiBcCisgICAgICFkZWZpbmVkIF9QT1NJWF9TT1VSQ0UgJiYgIWRlZmluZWQgX1BPU0lYX0NfU09VUkNFICYmIFwKKyAgICAgIWRlZmluZWQgX1hPUEVOX1NPVVJDRSAmJiAhZGVmaW5lZCBfWE9QRU5fU09VUkNFX0VYVEVOREVEICYmIFwKKyAgICAgIWRlZmluZWQgX0JTRF9TT1VSQ0UgJiYgIWRlZmluZWQgX1NWSURfU09VUkNFKQorIyBkZWZpbmUgX0JTRF9TT1VSQ0UJMQorIyBkZWZpbmUgX1NWSURfU09VUkNFCTEKKyNlbmRpZgorCisvKiBUaGlzIGlzIHRvIGVuYWJsZSB0aGUgSVNPIEM5OSBleHRlbnNpb24uICBBbHNvIHJlY29nbml6ZSB0aGUgb2xkIG1hY3JvCisgICB3aGljaCB3YXMgdXNlZCBwcmlvciB0byB0aGUgc3RhbmRhcmQgYWNjZXB0YW5jZS4gIFRoaXMgbWFjcm8gd2lsbAorICAgZXZlbnR1YWxseSBnbyBhd2F5IGFuZCB0aGUgZmVhdHVyZXMgZW5hYmxlZCBieSBkZWZhdWx0IG9uY2UgdGhlIElTTyBDOTkKKyAgIHN0YW5kYXJkIGlzIHdpZGVseSBhZG9wdGVkLiAgKi8KKyNpZiAoZGVmaW5lZCBfSVNPQzk5X1NPVVJDRSB8fCBkZWZpbmVkIF9JU09DOVhfU09VUkNFIFwKKyAgICAgfHwgKGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpKQorIyBkZWZpbmUgX19VU0VfSVNPQzk5CTEKKyNlbmRpZgorCisvKiBUaGlzIGlzIHRvIGVuYWJsZSB0aGUgSVNPIEM5MCBBbWVuZG1lbnQgMToxOTk1IGV4dGVuc2lvbi4gICovCisjaWYgKGRlZmluZWQgX0lTT0M5OV9TT1VSQ0UgfHwgZGVmaW5lZCBfSVNPQzlYX1NPVVJDRSBcCisgICAgIHx8IChkZWZpbmVkIF9fU1REQ19WRVJTSU9OX18gJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk0MDlMKSkKKyMgZGVmaW5lIF9fVVNFX0lTT0M5NQkxCisjZW5kaWYKKworLyogSWYgbm9uZSBvZiB0aGUgQU5TSS9QT1NJWCBtYWNyb3MgYXJlIGRlZmluZWQsIHVzZSBQT1NJWC4xIGFuZCBQT1NJWC4yCisgICAoYW5kIElFRUUgU3RkIDEwMDMuMWItMTk5MyB1bmxlc3MgX1hPUEVOX1NPVVJDRSBpcyBkZWZpbmVkKS4gICovCisjaWYgKCghZGVmaW5lZCBfX1NUUklDVF9BTlNJX18gfHwgKF9YT1BFTl9TT1VSQ0UgLSAwKSA+PSA1MDApICYmIFwKKyAgICAgIWRlZmluZWQgX1BPU0lYX1NPVVJDRSAmJiAhZGVmaW5lZCBfUE9TSVhfQ19TT1VSQ0UpCisjIGRlZmluZSBfUE9TSVhfU09VUkNFCTEKKyMgaWYgZGVmaW5lZCBfWE9QRU5fU09VUkNFICYmIChfWE9QRU5fU09VUkNFIC0gMCkgPCA1MDAKKyMgIGRlZmluZSBfUE9TSVhfQ19TT1VSQ0UJMgorIyBlbGlmIGRlZmluZWQgX1hPUEVOX1NPVVJDRSAmJiAoX1hPUEVOX1NPVVJDRSAtIDApIDwgNjAwCisjICBkZWZpbmUgX1BPU0lYX0NfU09VUkNFCTE5OTUwNkwKKyMgZWxzZQorIyAgZGVmaW5lIF9QT1NJWF9DX1NPVVJDRQkyMDAxMTJMCisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgX1BPU0lYX1NPVVJDRSB8fCBfUE9TSVhfQ19TT1VSQ0UgPj0gMSB8fCBkZWZpbmVkIF9YT1BFTl9TT1VSQ0UKKyMgZGVmaW5lIF9fVVNFX1BPU0lYCTEKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfUE9TSVhfQ19TT1VSQ0UgJiYgX1BPU0lYX0NfU09VUkNFID49IDIgfHwgZGVmaW5lZCBfWE9QRU5fU09VUkNFCisjIGRlZmluZSBfX1VTRV9QT1NJWDIJMQorI2VuZGlmCisKKyNpZiAoX1BPU0lYX0NfU09VUkNFIC0gMCkgPj0gMTk5MzA5TAorIyBkZWZpbmUgX19VU0VfUE9TSVgxOTkzMDkJMQorI2VuZGlmCisKKyNpZiAoX1BPU0lYX0NfU09VUkNFIC0gMCkgPj0gMTk5NTA2TAorIyBkZWZpbmUgX19VU0VfUE9TSVgxOTk1MDYJMQorI2VuZGlmCisKKyNpZiAoX1BPU0lYX0NfU09VUkNFIC0gMCkgPj0gMjAwMTEyTAorIyBkZWZpbmUgX19VU0VfWE9QRU4ySwkJMQorI2VuZGlmCisKKyNpZmRlZglfWE9QRU5fU09VUkNFCisjIGRlZmluZSBfX1VTRV9YT1BFTgkxCisjIGlmIChfWE9QRU5fU09VUkNFIC0gMCkgPj0gNTAwCisjICBkZWZpbmUgX19VU0VfWE9QRU5fRVhURU5ERUQJMQorIyAgZGVmaW5lIF9fVVNFX1VOSVg5OAkxCisjICB1bmRlZiBfTEFSR0VGSUxFX1NPVVJDRQorIyAgZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFCTEKKyMgIGlmIChfWE9QRU5fU09VUkNFIC0gMCkgPj0gNjAwCisjICAgZGVmaW5lIF9fVVNFX1hPUEVOMksJMQorIyAgIHVuZGVmIF9fVVNFX0lTT0M5OQorIyAgIGRlZmluZSBfX1VTRV9JU09DOTkJCTEKKyMgIGVuZGlmCisjIGVsc2UKKyMgIGlmZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKyMgICBkZWZpbmUgX19VU0VfWE9QRU5fRVhURU5ERUQJMQorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX0xBUkdFRklMRV9TT1VSQ0UKKyMgZGVmaW5lIF9fVVNFX0xBUkdFRklMRQkxCisjZW5kaWYKKworI2lmZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKyMgZGVmaW5lIF9fVVNFX0xBUkdFRklMRTY0CTEKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfRklMRV9PRkZTRVRfQklUUyAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorIyBkZWZpbmUgX19VU0VfRklMRV9PRkZTRVQ2NAkxCisjZW5kaWYKKworI2lmIGRlZmluZWQgX0JTRF9TT1VSQ0UgfHwgZGVmaW5lZCBfU1ZJRF9TT1VSQ0UKKyMgZGVmaW5lIF9fVVNFX01JU0MJMQorI2VuZGlmCisKKyNpZmRlZglfQlNEX1NPVVJDRQorIyBkZWZpbmUgX19VU0VfQlNECTEKKyNlbmRpZgorCisjaWZkZWYJX1NWSURfU09VUkNFCisjIGRlZmluZSBfX1VTRV9TVklECTEKKyNlbmRpZgorCisjaWZkZWYJX0FURklMRV9TT1VSQ0UKKyMgZGVmaW5lIF9fVVNFX0FURklMRQkxCisjZW5kaWYKKworI2lmZGVmCV9HTlVfU09VUkNFCisjIGRlZmluZSBfX1VTRV9HTlUJMQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIF9SRUVOVFJBTlQgfHwgZGVmaW5lZCBfVEhSRUFEX1NBRkUKKyMgZGVmaW5lIF9fVVNFX1JFRU5UUkFOVAkxCisjZW5kaWYKKworI2lmIGRlZmluZWQgX0ZPUlRJRllfU09VUkNFICYmIF9GT1JUSUZZX1NPVVJDRSA+IDAgXAorICAgICYmIF9fR05VQ19QUkVSRVEgKDQsIDEpICYmIGRlZmluZWQgX19PUFRJTUlaRV9fICYmIF9fT1BUSU1JWkVfXyA+IDAKKyMgaWYgX0ZPUlRJRllfU09VUkNFID4gMQorIyAgZGVmaW5lIF9fVVNFX0ZPUlRJRllfTEVWRUwgMgorIyBlbHNlCisjICBkZWZpbmUgX19VU0VfRk9SVElGWV9MRVZFTCAxCisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgX19VU0VfRk9SVElGWV9MRVZFTCAwCisjZW5kaWYKKworLyogV2UgZG8gc3VwcG9ydCB0aGUgSUVDIDU1OSBtYXRoIGZ1bmN0aW9uYWxpdHksIHJlYWwgYW5kIGNvbXBsZXguICAqLworI2RlZmluZSBfX1NURENfSUVDXzU1OV9fCQkxCisjZGVmaW5lIF9fU1REQ19JRUNfNTU5X0NPTVBMRVhfXwkxCisKKy8qIHdjaGFyX3QgdXNlcyBJU08gMTA2NDYtMSAoMm5kIGVkLiwgcHVibGlzaGVkIDIwMDAtMDktMTUpIC8gVW5pY29kZSAzLjEuICAqLworI2RlZmluZSBfX1NURENfSVNPXzEwNjQ2X18JCTIwMDAwOUwKKworLyogVGhpcyBtYWNybyBpbmRpY2F0ZXMgdGhhdCB0aGUgaW5zdGFsbGVkIGxpYnJhcnkgaXMgdGhlIEdOVSBDIExpYnJhcnkuCisgICBGb3IgaGlzdG9yaWMgcmVhc29ucyB0aGUgdmFsdWUgbm93IGlzIDYgYW5kIHRoaXMgd2lsbCBzdGF5IGZyb20gbm93CisgICBvbi4gIFRoZSB1c2Ugb2YgdGhpcyB2YXJpYWJsZSBpcyBkZXByZWNhdGVkLiAgVXNlIF9fR0xJQkNfXyBhbmQKKyAgIF9fR0xJQkNfTUlOT1JfXyBub3cgKHNlZSBiZWxvdykgd2hlbiB5b3Ugd2FudCB0byB0ZXN0IGZvciBhIHNwZWNpZmljCisgICBHTlUgQyBsaWJyYXJ5IHZlcnNpb24gYW5kIHVzZSB0aGUgdmFsdWVzIGluIDxnbnUvbGliLW5hbWVzLmg+IHRvIGdldAorICAgdGhlIHNvbmFtZXMgb2YgdGhlIHNoYXJlZCBsaWJyYXJpZXMuICAqLworI3VuZGVmICBfX0dOVV9MSUJSQVJZX18KKyNkZWZpbmUgX19HTlVfTElCUkFSWV9fIDYKKworLyogTWFqb3IgYW5kIG1pbm9yIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBHTlUgQyBsaWJyYXJ5IHBhY2thZ2UuICBVc2UKKyAgIHRoZXNlIG1hY3JvcyB0byB0ZXN0IGZvciBmZWF0dXJlcyBpbiBzcGVjaWZpYyByZWxlYXNlcy4gICovCisjZGVmaW5lCV9fR0xJQkNfXwkyCisjZGVmaW5lCV9fR0xJQkNfTUlOT1JfXwk5CisKKyNkZWZpbmUgX19HTElCQ19QUkVSRVEobWFqLCBtaW4pIFwKKwkoKF9fR0xJQkNfXyA8PCAxNikgKyBfX0dMSUJDX01JTk9SX18gPj0gKChtYWopIDw8IDE2KSArIChtaW4pKQorCisvKiBEZWNpZGUgd2hldGhlciBhIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSBsb25nIGxvbmcgZGF0YXR5cGVzLiAgKi8KKyNpZiBkZWZpbmVkIF9fR05VQ19fIFwKKyAgICB8fCAoZGVmaW5lZCBfX1BHSSAmJiBkZWZpbmVkIF9faTM4Nl9fICkgXAorICAgIHx8IChkZWZpbmVkIF9fSU5URUxfQ09NUElMRVIgJiYgKGRlZmluZWQgX19pMzg2X18gfHwgZGVmaW5lZCBfX2lhNjRfXykpIFwKKyAgICB8fCAoZGVmaW5lZCBfX1NURENfVkVSU0lPTl9fICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkKKyMgZGVmaW5lIF9fR0xJQkNfSEFWRV9MT05HX0xPTkcJMQorI2VuZGlmCisKKy8qIFRoaXMgaXMgaGVyZSBvbmx5IGJlY2F1c2UgZXZlcnkgaGVhZGVyIGZpbGUgYWxyZWFkeSBpbmNsdWRlcyB0aGlzIG9uZS4gICovCisjaWZuZGVmIF9fQVNTRU1CTEVSX18KKyMgaWZuZGVmIF9TWVNfQ0RFRlNfSAorIyAgaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjIGVuZGlmCisKKy8qIElmIHdlIGRvbid0IGhhdmUgX19SRURJUkVDVCwgcHJvdG90eXBlcyB3aWxsIGJlIG1pc3NpbmcgaWYKKyAgIF9fVVNFX0ZJTEVfT0ZGU0VUNjQgYnV0IG5vdCBfX1VTRV9MQVJHRUZJTEVbNjRdLiAqLworIyBpZiBkZWZpbmVkIF9fVVNFX0ZJTEVfT0ZGU0VUNjQgJiYgIWRlZmluZWQgX19SRURJUkVDVAorIyAgZGVmaW5lIF9fVVNFX0xBUkdFRklMRQkxCisjICBkZWZpbmUgX19VU0VfTEFSR0VGSUxFNjQJMQorIyBlbmRpZgorCisjZW5kaWYJLyogIUFTU0VNQkxFUiAqLworCisvKiBEZWNpZGUgd2hldGhlciB3ZSBjYW4gZGVmaW5lICdleHRlcm4gaW5saW5lJyBmdW5jdGlvbnMgaW4gaGVhZGVycy4gICovCisjaWYgX19HTlVDX1BSRVJFUSAoMiwgNykgJiYgZGVmaW5lZCBfX09QVElNSVpFX18gXAorICAgICYmICFkZWZpbmVkIF9fT1BUSU1JWkVfU0laRV9fICYmICFkZWZpbmVkIF9fTk9fSU5MSU5FX18gXAorICAgICYmIGRlZmluZWQgX19leHRlcm5faW5saW5lCisjIGRlZmluZSBfX1VTRV9FWFRFUk5fSU5MSU5FUwkxCisjZW5kaWYKKworCisvKiBUaGlzIGlzIGhlcmUgb25seSBiZWNhdXNlIGV2ZXJ5IGhlYWRlciBmaWxlIGFscmVhZHkgaW5jbHVkZXMgdGhpcyBvbmUuCisgICBHZXQgdGhlIGRlZmluaXRpb25zIG9mIGFsbCB0aGUgYXBwcm9wcmlhdGUgYF9fc3R1Yl9GVU5DVElPTicgc3ltYm9scy4KKyAgIDxnbnUvc3R1YnMuaD4gY29udGFpbnMgYCNkZWZpbmUgX19zdHViX0ZVTkNUSU9OJyB3aGVuIEZVTkNUSU9OIGlzIGEgc3R1YgorICAgdGhhdCB3aWxsIGFsd2F5cyByZXR1cm4gZmFpbHVyZSAoYW5kIHNldCBlcnJubyB0byBFTk9TWVMpLiAgKi8KKyNpbmNsdWRlIDxnbnUvc3R1YnMuaD4KKworCisjZW5kaWYJLyogZmVhdHVyZXMuaCAgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9mZW52LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZmVudi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMDZmMDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZmVudi5oCkBAIC0wLDAgKzEsMTM2IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTksIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qCisgKiBJU08gQzk5IDcuNjogRmxvYXRpbmctcG9pbnQgZW52aXJvbm1lbnQJPGZlbnYuaD4KKyAqLworCisjaWZuZGVmIF9GRU5WX0gKKyNkZWZpbmUgX0ZFTlZfSAkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCisvKiBHZXQgdGhlIGFyY2hpdGVjdHVyZSBkZXBlbmRlbmQgZGVmaW5pdGlvbnMuICBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zCisgICBhcmUgZXhwZWN0ZWQgdG8gYmUgZG9uZToKKworICAgZmVudl90CXR5cGUgZm9yIG9iamVjdCByZXByZXNlbnRpbmcgYW4gZW50aXJlIGZsb2F0aW5nLXBvaW50CisJCWVudmlyb25tZW50CisKKyAgIEZFX0RGTF9FTlYJbWFjcm8gb2YgdHlwZSBwb2ludGVyIHRvIGZlbnZfdCB0byBiZSB1c2VkIGFzIHRoZSBhcmd1bWVudAorCQl0byBmdW5jdGlvbnMgdGFraW5nIGFuIGFyZ3VtZW50IG9mIHR5cGUgZmVudl90OyBpbiB0aGlzCisJCWNhc2UgdGhlIGRlZmF1bHQgZW52aXJvbm1lbnQgd2lsbCBiZSB1c2VkCisKKyAgIGZleGNlcHRfdAl0eXBlIGZvciBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBmbG9hdGluZy1wb2ludCBleGNlcHRpb24KKwkJZmxhZ3MgaW5jbHVkaW5nIHN0YXR1cyBhc3NvY2lhdGVkIHdpdGggdGhlIGZsYWdzCisKKyAgIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBkZWZpbmVkIGlmZiB0aGUgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgdGhpcworICAga2luZCBvZiBleGNlcHRpb24uCisgICBGRV9JTkVYQUNUCQlpbmV4YWN0IHJlc3VsdAorICAgRkVfRElWQllaRVJPCQlkaXZpc2lvbiBieSB6ZXJvCisgICBGRV9VTkRFUkZMT1cJCXJlc3VsdCBub3QgcmVwcmVzZW50YWJsZSBkdWUgdG8gdW5kZXJmbG93CisgICBGRV9PVkVSRkxPVwkJcmVzdWx0IG5vdCByZXByZXNlbnRhYmxlIGR1ZSB0byBvdmVyZmxvdworICAgRkVfSU5WQUxJRAkJaW52YWxpZCBvcGVyYXRpb24KKworICAgRkVfQUxMX0VYQ0VQVAliaXR3aXNlIE9SIG9mIGFsbCBzdXBwb3J0ZWQgZXhjZXB0aW9ucworCisgICBUaGUgbmV4dCBtYWNyb3MgYXJlIGRlZmluZWQgaWZmIHRoZSBhcHByb3ByaWF0ZSByb3VuZGluZyBtb2RlIGlzCisgICBzdXBwb3J0ZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uLgorICAgRkVfVE9ORUFSRVNUCQlyb3VuZCB0byBuZWFyZXN0CisgICBGRV9VUFdBUkQJCXJvdW5kIHRvd2FyZCArSW5mCisgICBGRV9ET1dOV0FSRAkJcm91bmQgdG93YXJkIC1JbmYKKyAgIEZFX1RPV0FSRFpFUk8Jcm91bmQgdG93YXJkIDAKKyovCisjaW5jbHVkZSA8Yml0cy9mZW52Lmg+CisKK19fQkVHSU5fREVDTFMKKworLyogRmxvYXRpbmctcG9pbnQgZXhjZXB0aW9uIGhhbmRsaW5nLiAgKi8KKworLyogQ2xlYXIgdGhlIHN1cHBvcnRlZCBleGNlcHRpb25zIHJlcHJlc2VudGVkIGJ5IEVYQ0VQVFMuICAqLworZXh0ZXJuIGludCBmZWNsZWFyZXhjZXB0IChpbnQgX19leGNlcHRzKSBfX1RIUk9XOworCisvKiBTdG9yZSBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBleGNlcHRpb24gZmxhZ3MKKyAgIGluZGljYXRlZCBieSBFWENFUFRTIGluIHRoZSBvYmplY3QgcG9pbnRlZCB0byBieSBGTEFHUC4gICovCitleHRlcm4gaW50IGZlZ2V0ZXhjZXB0ZmxhZyAoZmV4Y2VwdF90ICpfX2ZsYWdwLCBpbnQgX19leGNlcHRzKSBfX1RIUk9XOworCisvKiBSYWlzZSB0aGUgc3VwcG9ydGVkIGV4Y2VwdGlvbnMgcmVwcmVzZW50ZWQgYnkgRVhDRVBUUy4gICovCitleHRlcm4gaW50IGZlcmFpc2VleGNlcHQgKGludCBfX2V4Y2VwdHMpIF9fVEhST1c7CisKKy8qIFNldCBjb21wbGV0ZSBzdGF0dXMgZm9yIGV4Y2VwdGlvbnMgaW5kaWNhdGVkIGJ5IEVYQ0VQVFMgYWNjb3JkaW5nIHRvCisgICB0aGUgcmVwcmVzZW50YXRpb24gaW4gdGhlIG9iamVjdCBwb2ludGVkIHRvIGJ5IEZMQUdQLiAgKi8KK2V4dGVybiBpbnQgZmVzZXRleGNlcHRmbGFnIChfX2NvbnN0IGZleGNlcHRfdCAqX19mbGFncCwgaW50IF9fZXhjZXB0cykgX19USFJPVzsKKworLyogRGV0ZXJtaW5lIHdoaWNoIG9mIHN1YnNldCBvZiB0aGUgZXhjZXB0aW9ucyBzcGVjaWZpZWQgYnkgRVhDRVBUUyBhcmUKKyAgIGN1cnJlbnRseSBzZXQuICAqLworZXh0ZXJuIGludCBmZXRlc3RleGNlcHQgKGludCBfX2V4Y2VwdHMpIF9fVEhST1c7CisKKworLyogUm91bmRpbmcgY29udHJvbC4gICovCisKKy8qIEdldCBjdXJyZW50IHJvdW5kaW5nIGRpcmVjdGlvbi4gICovCitleHRlcm4gaW50IGZlZ2V0cm91bmQgKHZvaWQpIF9fVEhST1c7CisKKy8qIEVzdGFibGlzaCB0aGUgcm91bmRpbmcgZGlyZWN0aW9uIHJlcHJlc2VudGVkIGJ5IFJPVU5ELiAgKi8KK2V4dGVybiBpbnQgZmVzZXRyb3VuZCAoaW50IF9fcm91bmRpbmdfZGlyZWN0aW9uKSBfX1RIUk9XOworCisKKy8qIEZsb2F0aW5nLXBvaW50IGVudmlyb25tZW50LiAgKi8KKworLyogU3RvcmUgdGhlIGN1cnJlbnQgZmxvYXRpbmctcG9pbnQgZW52aXJvbm1lbnQgaW4gdGhlIG9iamVjdCBwb2ludGVkCisgICB0byBieSBFTlZQLiAgKi8KK2V4dGVybiBpbnQgZmVnZXRlbnYgKGZlbnZfdCAqX19lbnZwKSBfX1RIUk9XOworCisvKiBTYXZlIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGluIHRoZSBvYmplY3QgcG9pbnRlZCB0byBieSBFTlZQLCBjbGVhcgorICAgZXhjZXB0aW9uIGZsYWdzIGFuZCBpbnN0YWxsIGEgbm9uLXN0b3AgbW9kZSAoaWYgYXZhaWxhYmxlKSBmb3IgYWxsCisgICBleGNlcHRpb25zLiAgKi8KK2V4dGVybiBpbnQgZmVob2xkZXhjZXB0IChmZW52X3QgKl9fZW52cCkgX19USFJPVzsKKworLyogRXN0YWJsaXNoIHRoZSBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCByZXByZXNlbnRlZCBieSB0aGUgb2JqZWN0CisgICBwb2ludGVkIHRvIGJ5IEVOVlAuICAqLworZXh0ZXJuIGludCBmZXNldGVudiAoX19jb25zdCBmZW52X3QgKl9fZW52cCkgX19USFJPVzsKKworLyogU2F2ZSBjdXJyZW50IGV4Y2VwdGlvbnMgaW4gdGVtcG9yYXJ5IHN0b3JhZ2UsIGluc3RhbGwgZW52aXJvbm1lbnQKKyAgIHJlcHJlc2VudGVkIGJ5IG9iamVjdCBwb2ludGVkIHRvIGJ5IEVOVlAgYW5kIHJhaXNlIGV4Y2VwdGlvbnMKKyAgIGFjY29yZGluZyB0byBzYXZlZCBleGNlcHRpb25zLiAgKi8KK2V4dGVybiBpbnQgZmV1cGRhdGVlbnYgKF9fY29uc3QgZmVudl90ICpfX2VudnApIF9fVEhST1c7CisKKworLyogSW5jbHVkZSBvcHRpbWl6YXRpb24uICAqLworI2lmZGVmIF9fT1BUSU1JWkVfXworIyBpbmNsdWRlIDxiaXRzL2ZlbnZpbmxpbmUuaD4KKyNlbmRpZgorCisjaWZkZWYgX19VU0VfR05VCisKKy8qIEVuYWJsZSBpbmRpdmlkdWFsIGV4Y2VwdGlvbnMuICBXaWxsIG5vdCBlbmFibGUgbW9yZSBleGNlcHRpb25zIHRoYW4KKyAgIEVYQ0VQVFMgc3BlY2lmaWVzLiAgUmV0dXJucyB0aGUgcHJldmlvdXMgZW5hYmxlZCBleGNlcHRpb25zIGlmIGFsbAorICAgZXhjZXB0aW9ucyBhcmUgc3VjY2Vzc2Z1bGx5IHNldCwgb3RoZXJ3aXNlIHJldHVybnMgLTEuICAqLworZXh0ZXJuIGludCBmZWVuYWJsZWV4Y2VwdCAoaW50IF9fZXhjZXB0cykgX19USFJPVzsKKworLyogRGlzYWJsZSBpbmRpdmlkdWFsIGV4Y2VwdGlvbnMuICBXaWxsIG5vdCBkaXNhYmxlIG1vcmUgZXhjZXB0aW9ucyB0aGFuCisgICBFWENFUFRTIHNwZWNpZmllcy4gIFJldHVybnMgdGhlIHByZXZpb3VzIGVuYWJsZWQgZXhjZXB0aW9ucyBpZiBhbGwKKyAgIGV4Y2VwdGlvbnMgYXJlIHN1Y2Nlc3NmdWxseSBkaXNhYmxlZCwgb3RoZXJ3aXNlIHJldHVybnMgLTEuICAqLworZXh0ZXJuIGludCBmZWRpc2FibGVleGNlcHQgKGludCBfX2V4Y2VwdHMpIF9fVEhST1c7CisKKy8qIFJldHVybiBlbmFibGVkIGV4Y2VwdGlvbnMuICAqLworZXh0ZXJuIGludCBmZWdldGV4Y2VwdCAodm9pZCkgX19USFJPVzsKKyNlbmRpZgorCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogZmVudi5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZm10bXNnLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZm10bXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNlM2U1MwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9mbXRtc2cuaApAQCAtMCwwICsxLDEwNiBAQAorLyogTWVzc2FnZSBkaXNwbGF5IGhhbmRsaW5nLgorICAgQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk5LCAyMDAwLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9fRk1UTVNHX0gKKyNkZWZpbmUgX19GTVRNU0dfSAkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCisKK19fQkVHSU5fREVDTFMKKworLyogVmFsdWVzIHRvIGNvbnRyb2wgYGZtdG1zZycgZnVuY3Rpb24uICAqLworZW51bQoreworICBNTV9IQVJEID0gMHgwMDEsCS8qIFNvdXJjZSBvZiB0aGUgY29uZGl0aW9uIGlzIGhhcmR3YXJlLiAgKi8KKyNkZWZpbmUgTU1fSEFSRCBNTV9IQVJECisgIE1NX1NPRlQgPSAweDAwMiwJLyogU291cmNlIG9mIHRoZSBjb25kaXRpb24gaXMgc29mdHdhcmUuICAqLworI2RlZmluZSBNTV9TT0ZUIE1NX1NPRlQKKyAgTU1fRklSTSA9IDB4MDA0LAkvKiBTb3VyY2Ugb2YgdGhlIGNvbmRpdGlvbiBpcyBmaXJtd2FyZS4gICovCisjZGVmaW5lIE1NX0ZJUk0gTU1fRklSTQorICBNTV9BUFBMID0gMHgwMDgsCS8qIENvbmRpdGlvbiBkZXRlY3RlZCBieSBhcHBsaWNhdGlvbi4gICovCisjZGVmaW5lIE1NX0FQUEwgTU1fQVBQTAorICBNTV9VVElMID0gMHgwMTAsCS8qIENvbmRpdGlvbiBkZXRlY3RlZCBieSB1dGlsaXR5LiAgKi8KKyNkZWZpbmUgTU1fVVRJTCBNTV9VVElMCisgIE1NX09QU1lTID0gMHgwMjAsCS8qIENvbmRpdGlvbiBkZXRlY3RlZCBieSBvcGVyYXRpbmcgc3lzdGVtLiAgKi8KKyNkZWZpbmUgTU1fT1BTWVMgTU1fT1BTWVMKKyAgTU1fUkVDT1ZFUiA9IDB4MDQwLAkvKiBSZWNvdmVyYWJsZSBlcnJvci4gICovCisjZGVmaW5lIE1NX1JFQ09WRVIgTU1fUkVDT1ZFUgorICBNTV9OUkVDT1YgPSAweDA4MCwJLyogTm9uLXJlY292ZXJhYmxlIGVycm9yLiAgKi8KKyNkZWZpbmUgTU1fTlJFQ09WIE1NX05SRUNPVgorICBNTV9QUklOVCA9IDB4MTAwLAkvKiBEaXNwbGF5IG1lc3NhZ2UgaW4gc3RhbmRhcmQgZXJyb3IuICAqLworI2RlZmluZSBNTV9QUklOVCBNTV9QUklOVAorICBNTV9DT05TT0xFID0gMHgyMDAJLyogRGlzcGxheSBtZXNzYWdlIG9uIHN5c3RlbSBjb25zb2xlLiAgKi8KKyNkZWZpbmUgTU1fQ09OU09MRSBNTV9DT05TT0xFCit9OworCisvKiBWYWx1ZXMgdG8gYmUgZm9yIFNFVkVSSVRZIHBhcmFtZXRlciBvZiBgZm10bXNnJy4gICovCitlbnVtCit7CisgIE1NX05PU0VWID0gMCwJCS8qIE5vIHNldmVyaXR5IGxldmVsIHByb3ZpZGVkIGZvciB0aGUgbWVzc2FnZS4gICovCisjZGVmaW5lIE1NX05PU0VWIE1NX05PU0VWCisgIE1NX0hBTFQsCQkvKiBFcnJvciBjYXVzaW5nIGFwcGxpY2F0aW9uIHRvIGhhbHQuICAqLworI2RlZmluZSBNTV9IQUxUIE1NX0hBTFQKKyAgTU1fRVJST1IsCQkvKiBBcHBsaWNhdGlvbiBoYXMgZW5jb3VudGVyZWQgYSBub24tZmF0YWwgZmF1bHQuICAqLworI2RlZmluZSBNTV9FUlJPUiBNTV9FUlJPUgorICBNTV9XQVJOSU5HLAkJLyogQXBwbGljYXRpb24gaGFzIGRldGVjdGVkIHVudXN1YWwgbm9uLWVycm9yCisJCQkgICBjb25kaXRpb24uICAqLworI2RlZmluZSBNTV9XQVJOSU5HIE1NX1dBUk5JTkcKKyAgTU1fSU5GTwkJLyogSW5mb3JtYXRpdmUgbWVzc2FnZS4gICovCisjZGVmaW5lIE1NX0lORk8gTU1fSU5GTworfTsKKworCisvKiBNYWNyb3Mgd2hpY2ggY2FuIGJlIHVzZWQgYXMgbnVsbCB2YWx1ZXMgZm9yIHRoZSBhcmd1bWVudHMgb2YgYGZtdG1zZycuICAqLworI2RlZmluZSBNTV9OVUxMTEJMCSgoY2hhciAqKSAwKQorI2RlZmluZSBNTV9OVUxMU0VWCTAKKyNkZWZpbmUgTU1fTlVMTE1DCSgobG9uZyBpbnQpIDApCisjZGVmaW5lIE1NX05VTExUWFQJKChjaGFyICopIDApCisjZGVmaW5lIE1NX05VTExBQ1QJKChjaGFyICopIDApCisjZGVmaW5lIE1NX05VTExUQUcJKChjaGFyICopIDApCisKKworLyogUG9zc2libGUgcmV0dXJuIHZhbHVlcyBvZiBgZm10bXNnJy4gICovCitlbnVtCit7CisgIE1NX05PVE9LID0gLTEsCisjZGVmaW5lIE1NX05PVE9LIE1NX05PVE9LCisgIE1NX09LID0gMCwKKyNkZWZpbmUgTU1fT0sgTU1fT0sKKyAgTU1fTk9NU0cgPSAxLAorI2RlZmluZSBNTV9OT01TRyBNTV9OT01TRworICBNTV9OT0NPTiA9IDQKKyNkZWZpbmUgTU1fTk9DT04gTU1fTk9DT04KK307CisKKworLyogUHJpbnQgbWVzc2FnZSB3aXRoIGdpdmVuIENMQVNTSUZJQ0FUSU9OLCBMQUJFTCwgU0VWRVJJVFksIFRFWFQsIEFDVElPTgorICAgYW5kIFRBRyB0byBjb25zb2xlIG9yIHN0YW5kYXJkIGVycm9yLiAgKi8KK2V4dGVybiBpbnQgZm10bXNnIChsb25nIGludCBfX2NsYXNzaWZpY2F0aW9uLCBfX2NvbnN0IGNoYXIgKl9fbGFiZWwsCisJCSAgIGludCBfX3NldmVyaXR5LCBfX2NvbnN0IGNoYXIgKl9fdGV4dCwKKwkJICAgX19jb25zdCBjaGFyICpfX2FjdGlvbiwgX19jb25zdCBjaGFyICpfX3RhZyk7CisKKyNpZmRlZiBfX1VTRV9TVklECisvKiBBZGQgb3IgcmVtb3ZlIHNldmVyaXR5IGxldmVsLiAgKi8KK2V4dGVybiBpbnQgYWRkc2V2ZXJpdHkgKGludCBfX3NldmVyaXR5LCBfX2NvbnN0IGNoYXIgKl9fc3RyaW5nKSBfX1RIUk9XOworI2VuZGlmCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBmbXRtc2cuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2ZubWF0Y2guaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9mbm1hdGNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVmYjAwNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9mbm1hdGNoLmgKQEAgLTAsMCArMSw3MiBAQAorLyogQ29weXJpZ2h0IChDKSAxOTkxLTkzLDk2LDk3LDk4LDk5LDIwMDEsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZglfRk5NQVRDSF9ICisjZGVmaW5lCV9GTk1BVENIX0gJMQorCisjaWZkZWYJX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZm5kZWYgY29uc3QKKyMgaWYgKGRlZmluZWQgX19TVERDX18gJiYgX19TVERDX18pIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKKyMgIGRlZmluZSBfX2NvbnN0CWNvbnN0CisjIGVsc2UKKyMgIGRlZmluZSBfX2NvbnN0CisjIGVuZGlmCisjZW5kaWYKKworLyogV2UgI3VuZGVmIHRoZXNlIGJlZm9yZSBkZWZpbmluZyB0aGVtIGJlY2F1c2Ugc29tZSBsb3Npbmcgc3lzdGVtcworICAgKEhQLVVYIEEuMDguMDcgZm9yIGV4YW1wbGUpIGRlZmluZSB0aGVzZSBpbiA8dW5pc3RkLmg+LiAgKi8KKyN1bmRlZglGTk1fUEFUSE5BTUUKKyN1bmRlZglGTk1fTk9FU0NBUEUKKyN1bmRlZglGTk1fUEVSSU9ECisKKy8qIEJpdHMgc2V0IGluIHRoZSBGTEFHUyBhcmd1bWVudCB0byBgZm5tYXRjaCcuICAqLworI2RlZmluZQlGTk1fUEFUSE5BTUUJKDEgPDwgMCkgLyogTm8gd2lsZGNhcmQgY2FuIGV2ZXIgbWF0Y2ggYC8nLiAgKi8KKyNkZWZpbmUJRk5NX05PRVNDQVBFCSgxIDw8IDEpIC8qIEJhY2tzbGFzaGVzIGRvbid0IHF1b3RlIHNwZWNpYWwgY2hhcnMuICAqLworI2RlZmluZQlGTk1fUEVSSU9ECSgxIDw8IDIpIC8qIExlYWRpbmcgYC4nIGlzIG1hdGNoZWQgb25seSBleHBsaWNpdGx5LiAgKi8KKworI2lmICFkZWZpbmVkIF9QT1NJWF9DX1NPVVJDRSB8fCBfUE9TSVhfQ19TT1VSQ0UgPCAyIHx8IGRlZmluZWQgX0dOVV9TT1VSQ0UKKyMgZGVmaW5lIEZOTV9GSUxFX05BTUUJIEZOTV9QQVRITkFNRQkvKiBQcmVmZXJyZWQgR05VIG5hbWUuICAqLworIyBkZWZpbmUgRk5NX0xFQURJTkdfRElSICgxIDw8IDMpCS8qIElnbm9yZSBgLy4uLicgYWZ0ZXIgYSBtYXRjaC4gICovCisjIGRlZmluZSBGTk1fQ0FTRUZPTEQJICgxIDw8IDQpCS8qIENvbXBhcmUgd2l0aG91dCByZWdhcmQgdG8gY2FzZS4gICovCisjIGRlZmluZSBGTk1fRVhUTUFUQ0gJICgxIDw8IDUpCS8qIFVzZSBrc2gtbGlrZSBleHRlbmRlZCBtYXRjaGluZy4gKi8KKyNlbmRpZgorCisvKiBWYWx1ZSByZXR1cm5lZCBieSBgZm5tYXRjaCcgaWYgU1RSSU5HIGRvZXMgbm90IG1hdGNoIFBBVFRFUk4uICAqLworI2RlZmluZQlGTk1fTk9NQVRDSAkxCisKKy8qIFRoaXMgdmFsdWUgaXMgcmV0dXJuZWQgaWYgdGhlIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHN1cHBvcnQKKyAgIGBmbm1hdGNoJy4gIFNpbmNlIHRoaXMgaXMgbm90IHRoZSBjYXNlIGhlcmUgaXQgd2lsbCBuZXZlciBiZQorICAgcmV0dXJuZWQgYnV0IHRoZSBjb25mb3JtYW5jZSB0ZXN0IHN1aXRlcyBzdGlsbCByZXF1aXJlIHRoZSBzeW1ib2wKKyAgIHRvIGJlIGRlZmluZWQuICAqLworI2lmZGVmIF9YT1BFTl9TT1VSQ0UKKyMgZGVmaW5lIEZOTV9OT1NZUwkoLTEpCisjZW5kaWYKKworLyogTWF0Y2ggTkFNRSBhZ2FpbnN0IHRoZSBmaWxlbmFtZSBwYXR0ZXJuIFBBVFRFUk4sCisgICByZXR1cm5pbmcgemVybyBpZiBpdCBtYXRjaGVzLCBGTk1fTk9NQVRDSCBpZiBub3QuICAqLworZXh0ZXJuIGludCBmbm1hdGNoIChfX2NvbnN0IGNoYXIgKl9fcGF0dGVybiwgX19jb25zdCBjaGFyICpfX25hbWUsCisJCSAgICBpbnQgX19mbGFncyk7CisKKyNpZmRlZglfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBmbm1hdGNoLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9mcHVfY29udHJvbC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2ZwdV9jb250cm9sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVkNzc2NAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9mcHVfY29udHJvbC5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qIEZQVSBjb250cm9sIHdvcmQgZGVmaW5pdGlvbnMuICBBUk0gVkZQIHZlcnNpb24uCisgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICAgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworI2lmbmRlZiBfRlBVX0NPTlRST0xfSAorI2RlZmluZSBfRlBVX0NPTlRST0xfSAorCisvKiBtYXNraW5nIG9mIGludGVycnVwdHMgKi8KKyNkZWZpbmUgX0ZQVV9NQVNLX0lNCTB4MDAwMDAxMDAJLyogaW52YWxpZCBvcGVyYXRpb24gKi8KKyNkZWZpbmUgX0ZQVV9NQVNLX1pNCTB4MDAwMDAyMDAJLyogZGl2aWRlIGJ5IHplcm8gKi8KKyNkZWZpbmUgX0ZQVV9NQVNLX09NCTB4MDAwMDA0MDAJLyogb3ZlcmZsb3cgKi8KKyNkZWZpbmUgX0ZQVV9NQVNLX1VNCTB4MDAwMDA4MDAJLyogdW5kZXJmbG93ICovCisjZGVmaW5lIF9GUFVfTUFTS19QTQkweDAwMDAxMDAwCS8qIGluZXhhY3QgKi8KKworLyogU29tZSBiaXRzIGluIHRoZSBGUFNDUiBhcmUgbm90IHlldCBkZWZpbmVkLiAgVGhleSBtdXN0IGJlIHByZXNlcnZlZCB3aGVuCisgICBtb2RpZnlpbmcgdGhlIGNvbnRlbnRzLiAgKi8KKyNkZWZpbmUgX0ZQVV9SRVNFUlZFRAkweDBlMDhlMGUwCisjZGVmaW5lIF9GUFVfREVGQVVMVCAgICAweDAwMDAwMDAwCisvKiBEZWZhdWx0ICsgZXhjZXB0aW9ucyBlbmFibGVkLiAqLworI2RlZmluZSBfRlBVX0lFRUUJKF9GUFVfREVGQVVMVCB8IDB4MDAwMDFmMDApCisKKy8qIFR5cGUgb2YgdGhlIGNvbnRyb2wgd29yZC4gICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBmcHVfY29udHJvbF90OworCisvKiBNYWNyb3MgZm9yIGFjY2Vzc2luZyB0aGUgaGFyZHdhcmUgY29udHJvbCB3b3JkLiAgKi8KKy8qIFRoaXMgaXMgZm1yeCAlMCwgZnBzY3IuICAqLworI2RlZmluZSBfRlBVX0dFVENXKGN3KSBcCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgibXJjIHAxMCwgNywgJTAsIGNyMSwgY3IwLCAwIiA6ICI9ciIgKGN3KSkKKy8qIFRoaXMgaXMgZm14ciBmcHNjciwgJTAuICAqLworI2RlZmluZSBfRlBVX1NFVENXKGN3KSBcCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgibWNyIHAxMCwgNywgJTAsIGNyMSwgY3IwLCAwIiA6IDogInIiIChjdykpCisKKy8qIERlZmF1bHQgY29udHJvbCB3b3JkIHNldCBhdCBzdGFydHVwLiAgKi8KK2V4dGVybiBmcHVfY29udHJvbF90IF9fZnB1X2NvbnRyb2w7CisKKyNlbmRpZiAvKiBfRlBVX0NPTlRST0xfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2ZzdGFiLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZnN0YWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGVjYWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2ZzdGFiLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk4MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIylmc3RhYi5oCTguMSAoQmVya2VsZXkpIDYvMi85MworICovCisKKyNpZm5kZWYgX0ZTVEFCX0gKKyNkZWZpbmUgX0ZTVEFCX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworLyoKKyAqIEZpbGUgc3lzdGVtIHRhYmxlLCBzZWUgZnN0YWIoNSkuCisgKgorICogVXNlZCBieSBkdW1wLCBtb3VudCwgdW1vdW50LCBzd2Fwb24sIGZzY2ssIGRmLCAuLi4KKyAqCisgKiBGb3IgdWZzIGZzX3NwZWMgZmllbGQgaXMgdGhlIGJsb2NrIHNwZWNpYWwgbmFtZS4gIFByb2dyYW1zIHRoYXQgd2FudCB0bworICogdXNlIHRoZSBjaGFyYWN0ZXIgc3BlY2lhbCBuYW1lIG11c3QgY3JlYXRlIHRoYXQgbmFtZSBieSBwcmVwZW5kaW5nIGEgJ3InCisgKiBhZnRlciB0aGUgcmlnaHQgbW9zdCBzbGFzaC4gIFF1b3RhIGZpbGVzIGFyZSBhbHdheXMgbmFtZWQgInF1b3RhcyIsIHNvCisgKiBpZiB0eXBlIGlzICJycSIsIHRoZW4gdXNlIGNvbmNhdGVuYXRpb24gb2YgZnNfZmlsZSBhbmQgInF1b3RhcyIgdG8gbG9jYXRlCisgKiBxdW90YSBmaWxlLgorICovCisjZGVmaW5lCV9QQVRIX0ZTVEFCCSIvZXRjL2ZzdGFiIgorI2RlZmluZQlGU1RBQgkJIi9ldGMvZnN0YWIiCS8qIGRlcHJlY2F0ZWQgKi8KKworI2RlZmluZQlGU1RBQl9SVwkicnciCQkvKiByZWFkL3dyaXRlIGRldmljZSAqLworI2RlZmluZQlGU1RBQl9SUQkicnEiCQkvKiByZWFkL3dyaXRlIHdpdGggcXVvdGFzICovCisjZGVmaW5lCUZTVEFCX1JPCSJybyIJCS8qIHJlYWQtb25seSBkZXZpY2UgKi8KKyNkZWZpbmUJRlNUQUJfU1cJInN3IgkJLyogc3dhcCBkZXZpY2UgKi8KKyNkZWZpbmUJRlNUQUJfWFgJInh4IgkJLyogaWdub3JlIHRvdGFsbHkgKi8KKworc3RydWN0IGZzdGFiCisgIHsKKyAgICBjaGFyICpmc19zcGVjOwkJCS8qIGJsb2NrIHNwZWNpYWwgZGV2aWNlIG5hbWUgKi8KKyAgICBjaGFyICpmc19maWxlOwkJCS8qIGZpbGUgc3lzdGVtIHBhdGggcHJlZml4ICovCisgICAgY2hhciAqZnNfdmZzdHlwZTsJCQkvKiBGaWxlIHN5c3RlbSB0eXBlLCB1ZnMsIG5mcyAqLworICAgIGNoYXIgKmZzX21udG9wczsJCQkvKiBNb3VudCBvcHRpb25zIGFsYSAtbyAqLworICAgIGNvbnN0IGNoYXIgKmZzX3R5cGU7CQkvKiBGU1RBQl8qIGZyb20gZnNfbW50b3BzICovCisgICAgaW50CWZzX2ZyZXE7CQkJLyogZHVtcCBmcmVxdWVuY3ksIGluIGRheXMgKi8KKyAgICBpbnQJZnNfcGFzc25vOwkJCS8qIHBhc3MgbnVtYmVyIG9uIHBhcmFsbGVsIGR1bXAgKi8KKyAgfTsKKworCitfX0JFR0lOX0RFQ0xTCisKK2V4dGVybiBzdHJ1Y3QgZnN0YWIgKmdldGZzZW50ICh2b2lkKSBfX1RIUk9XOworZXh0ZXJuIHN0cnVjdCBmc3RhYiAqZ2V0ZnNzcGVjIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgX19USFJPVzsKK2V4dGVybiBzdHJ1Y3QgZnN0YWIgKmdldGZzZmlsZSAoX19jb25zdCBjaGFyICpfX25hbWUpIF9fVEhST1c7CitleHRlcm4gaW50IHNldGZzZW50ICh2b2lkKSBfX1RIUk9XOworZXh0ZXJuIHZvaWQgZW5kZnNlbnQgKHZvaWQpIF9fVEhST1c7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBmc3RhYi5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZnRzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEwNzBiYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9mdHMuaApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OSwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIylmdHMuaAk4LjMgKEJlcmtlbGV5KSA4LzE0Lzk0CisgKi8KKworI2lmbmRlZglfRlRTX0gKKyNkZWZpbmUJX0ZUU19IIDEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8qIFRoZSBmdHMgaW50ZXJmYWNlIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBMRlMgaW50ZXJmYWNlIHdoaWNoCisgICB0cmFuc3BhcmVudGx5IHVzZXMgdGhlIDY0LWJpdCBmaWxlIGFjY2VzcyBmdW5jdGlvbnMuICAqLworI2lmZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKKyMgZXJyb3IgIjxmdHMuaD4gY2Fubm90IGJlIHVzZWQgd2l0aCAtRF9GSUxFX09GRlNFVF9CSVRTPT02NCIKKyNlbmRpZgorCisKK3R5cGVkZWYgc3RydWN0IHsKKwlzdHJ1Y3QgX2Z0c2VudCAqZnRzX2N1cjsJLyogY3VycmVudCBub2RlICovCisJc3RydWN0IF9mdHNlbnQgKmZ0c19jaGlsZDsJLyogbGlua2VkIGxpc3Qgb2YgY2hpbGRyZW4gKi8KKwlzdHJ1Y3QgX2Z0c2VudCAqKmZ0c19hcnJheTsJLyogc29ydCBhcnJheSAqLworCWRldl90IGZ0c19kZXY7CQkJLyogc3RhcnRpbmcgZGV2aWNlICMgKi8KKwljaGFyICpmdHNfcGF0aDsJCQkvKiBwYXRoIGZvciB0aGlzIGRlc2NlbnQgKi8KKwlpbnQgZnRzX3JmZDsJCQkvKiBmZCBmb3Igcm9vdCAqLworCWludCBmdHNfcGF0aGxlbjsJCS8qIHNpemVvZihwYXRoKSAqLworCWludCBmdHNfbml0ZW1zOwkJCS8qIGVsZW1lbnRzIGluIHRoZSBzb3J0IGFycmF5ICovCisJaW50ICgqZnRzX2NvbXBhcikgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsgLyogY29tcGFyZSBmbiAqLworCisjZGVmaW5lCUZUU19DT01GT0xMT1cJMHgwMDAxCQkvKiBmb2xsb3cgY29tbWFuZCBsaW5lIHN5bWxpbmtzICovCisjZGVmaW5lCUZUU19MT0dJQ0FMCTB4MDAwMgkJLyogbG9naWNhbCB3YWxrICovCisjZGVmaW5lCUZUU19OT0NIRElSCTB4MDAwNAkJLyogZG9uJ3QgY2hhbmdlIGRpcmVjdG9yaWVzICovCisjZGVmaW5lCUZUU19OT1NUQVQJMHgwMDA4CQkvKiBkb24ndCBnZXQgc3RhdCBpbmZvICovCisjZGVmaW5lCUZUU19QSFlTSUNBTAkweDAwMTAJCS8qIHBoeXNpY2FsIHdhbGsgKi8KKyNkZWZpbmUJRlRTX1NFRURPVAkweDAwMjAJCS8qIHJldHVybiBkb3QgYW5kIGRvdC1kb3QgKi8KKyNkZWZpbmUJRlRTX1hERVYJMHgwMDQwCQkvKiBkb24ndCBjcm9zcyBkZXZpY2VzICovCisjZGVmaW5lIEZUU19XSElURU9VVAkweDAwODAJCS8qIHJldHVybiB3aGl0ZW91dCBpbmZvcm1hdGlvbiAqLworI2RlZmluZQlGVFNfT1BUSU9OTUFTSwkweDAwZmYJCS8qIHZhbGlkIHVzZXIgb3B0aW9uIG1hc2sgKi8KKworI2RlZmluZQlGVFNfTkFNRU9OTFkJMHgwMTAwCQkvKiAocHJpdmF0ZSkgY2hpbGQgbmFtZXMgb25seSAqLworI2RlZmluZQlGVFNfU1RPUAkweDAyMDAJCS8qIChwcml2YXRlKSB1bnJlY292ZXJhYmxlIGVycm9yICovCisJaW50IGZ0c19vcHRpb25zOwkJLyogZnRzX29wZW4gb3B0aW9ucywgZ2xvYmFsIGZsYWdzICovCit9IEZUUzsKKwordHlwZWRlZiBzdHJ1Y3QgX2Z0c2VudCB7CisJc3RydWN0IF9mdHNlbnQgKmZ0c19jeWNsZTsJLyogY3ljbGUgbm9kZSAqLworCXN0cnVjdCBfZnRzZW50ICpmdHNfcGFyZW50OwkvKiBwYXJlbnQgZGlyZWN0b3J5ICovCisJc3RydWN0IF9mdHNlbnQgKmZ0c19saW5rOwkvKiBuZXh0IGZpbGUgaW4gZGlyZWN0b3J5ICovCisJbG9uZyBmdHNfbnVtYmVyOwkgICAgICAgIC8qIGxvY2FsIG51bWVyaWMgdmFsdWUgKi8KKwl2b2lkICpmdHNfcG9pbnRlcjsJICAgICAgICAvKiBsb2NhbCBhZGRyZXNzIHZhbHVlICovCisJY2hhciAqZnRzX2FjY3BhdGg7CQkvKiBhY2Nlc3MgcGF0aCAqLworCWNoYXIgKmZ0c19wYXRoOwkJCS8qIHJvb3QgcGF0aCAqLworCWludCBmdHNfZXJybm87CQkJLyogZXJybm8gZm9yIHRoaXMgbm9kZSAqLworCWludCBmdHNfc3ltZmQ7CQkJLyogZmQgZm9yIHN5bWxpbmsgKi8KKwl1X3Nob3J0IGZ0c19wYXRobGVuOwkJLyogc3RybGVuKGZ0c19wYXRoKSAqLworCXVfc2hvcnQgZnRzX25hbWVsZW47CQkvKiBzdHJsZW4oZnRzX25hbWUpICovCisKKwlpbm9fdCBmdHNfaW5vOwkJCS8qIGlub2RlICovCisJZGV2X3QgZnRzX2RldjsJCQkvKiBkZXZpY2UgKi8KKwlubGlua190IGZ0c19ubGluazsJCS8qIGxpbmsgY291bnQgKi8KKworI2RlZmluZQlGVFNfUk9PVFBBUkVOVExFVkVMCS0xCisjZGVmaW5lCUZUU19ST09UTEVWRUwJCSAwCisJc2hvcnQgZnRzX2xldmVsOwkJLyogZGVwdGggKC0xIHRvIE4pICovCisKKyNkZWZpbmUJRlRTX0QJCSAxCQkvKiBwcmVvcmRlciBkaXJlY3RvcnkgKi8KKyNkZWZpbmUJRlRTX0RDCQkgMgkJLyogZGlyZWN0b3J5IHRoYXQgY2F1c2VzIGN5Y2xlcyAqLworI2RlZmluZQlGVFNfREVGQVVMVAkgMwkJLyogbm9uZSBvZiB0aGUgYWJvdmUgKi8KKyNkZWZpbmUJRlRTX0ROUgkJIDQJCS8qIHVucmVhZGFibGUgZGlyZWN0b3J5ICovCisjZGVmaW5lCUZUU19ET1QJCSA1CQkvKiBkb3Qgb3IgZG90LWRvdCAqLworI2RlZmluZQlGVFNfRFAJCSA2CQkvKiBwb3N0b3JkZXIgZGlyZWN0b3J5ICovCisjZGVmaW5lCUZUU19FUlIJCSA3CQkvKiBlcnJvcjsgZXJybm8gaXMgc2V0ICovCisjZGVmaW5lCUZUU19GCQkgOAkJLyogcmVndWxhciBmaWxlICovCisjZGVmaW5lCUZUU19JTklUCSA5CQkvKiBpbml0aWFsaXplZCBvbmx5ICovCisjZGVmaW5lCUZUU19OUwkJMTAJCS8qIHN0YXQoMikgZmFpbGVkICovCisjZGVmaW5lCUZUU19OU09LCTExCQkvKiBubyBzdGF0KDIpIHJlcXVlc3RlZCAqLworI2RlZmluZQlGVFNfU0wJCTEyCQkvKiBzeW1ib2xpYyBsaW5rICovCisjZGVmaW5lCUZUU19TTE5PTkUJMTMJCS8qIHN5bWJvbGljIGxpbmsgd2l0aG91dCB0YXJnZXQgKi8KKyNkZWZpbmUgRlRTX1cJCTE0CQkvKiB3aGl0ZW91dCBvYmplY3QgKi8KKwl1X3Nob3J0IGZ0c19pbmZvOwkJLyogdXNlciBmbGFncyBmb3IgRlRTRU5UIHN0cnVjdHVyZSAqLworCisjZGVmaW5lCUZUU19ET05UQ0hESVIJIDB4MDEJCS8qIGRvbid0IGNoZGlyIC4uIHRvIHRoZSBwYXJlbnQgKi8KKyNkZWZpbmUJRlRTX1NZTUZPTExPVwkgMHgwMgkJLyogZm9sbG93ZWQgYSBzeW1saW5rIHRvIGdldCBoZXJlICovCisJdV9zaG9ydCBmdHNfZmxhZ3M7CQkvKiBwcml2YXRlIGZsYWdzIGZvciBGVFNFTlQgc3RydWN0dXJlICovCisKKyNkZWZpbmUJRlRTX0FHQUlOCSAxCQkvKiByZWFkIG5vZGUgYWdhaW4gKi8KKyNkZWZpbmUJRlRTX0ZPTExPVwkgMgkJLyogZm9sbG93IHN5bWJvbGljIGxpbmsgKi8KKyNkZWZpbmUJRlRTX05PSU5TVFIJIDMJCS8qIG5vIGluc3RydWN0aW9ucyAqLworI2RlZmluZQlGVFNfU0tJUAkgNAkJLyogZGlzY2FyZCBub2RlICovCisJdV9zaG9ydCBmdHNfaW5zdHI7CQkvKiBmdHNfc2V0KCkgaW5zdHJ1Y3Rpb25zICovCisKKwlzdHJ1Y3Qgc3RhdCAqZnRzX3N0YXRwOwkJLyogc3RhdCgyKSBpbmZvcm1hdGlvbiAqLworCWNoYXIgZnRzX25hbWVbMV07CQkvKiBmaWxlIG5hbWUgKi8KK30gRlRTRU5UOworCitfX0JFR0lOX0RFQ0xTCitGVFNFTlQJKmZ0c19jaGlsZHJlbiAoRlRTICosIGludCk7CitpbnQJIGZ0c19jbG9zZSAoRlRTICopOworRlRTCSpmdHNfb3BlbiAoY2hhciAqIGNvbnN0ICosIGludCwKKwkJICAgaW50ICgqKShjb25zdCBGVFNFTlQgKiosIGNvbnN0IEZUU0VOVCAqKikpOworRlRTRU5UCSpmdHNfcmVhZCAoRlRTICopOworaW50CSBmdHNfc2V0IChGVFMgKiwgRlRTRU5UICosIGludCkgX19USFJPVzsKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBmdHMuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2Z0dy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2Z0dy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZGZmODgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZnR3LmgKQEAgLTAsMCArMSwxNzggQEAKKy8qIENvcHlyaWdodCAoQykgMTk5MiwxOTk2LTE5OTksMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisvKgorICoJWC9PcGVuIFBvcnRhYmlsaXR5IEd1aWRlIDQuMjogZnR3LmgKKyAqLworCisjaWZuZGVmIF9GVFdfSAorI2RlZmluZQlfRlRXX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKworX19CRUdJTl9ERUNMUworCisvKiBWYWx1ZXMgZm9yIHRoZSBGTEFHIGFyZ3VtZW50IHRvIHRoZSB1c2VyIGZ1bmN0aW9uIHBhc3NlZCB0byBgZnR3JworICAgYW5kICduZnR3Jy4gICovCitlbnVtCit7CisgIEZUV19GLAkJLyogUmVndWxhciBmaWxlLiAgKi8KKyNkZWZpbmUgRlRXX0YJIEZUV19GCisgIEZUV19ELAkJLyogRGlyZWN0b3J5LiAgKi8KKyNkZWZpbmUgRlRXX0QJIEZUV19ECisgIEZUV19ETlIsCQkvKiBVbnJlYWRhYmxlIGRpcmVjdG9yeS4gICovCisjZGVmaW5lIEZUV19ETlIJIEZUV19ETlIKKyAgRlRXX05TLAkJLyogVW5zdGF0YWJsZSBmaWxlLiAgKi8KKyNkZWZpbmUgRlRXX05TCSBGVFdfTlMKKworI2lmIGRlZmluZWQgX19VU0VfQlNEIHx8IGRlZmluZWQgX19VU0VfWE9QRU5fRVhURU5ERUQKKworICBGVFdfU0wsCQkvKiBTeW1ib2xpYyBsaW5rLiAgKi8KKyMgZGVmaW5lIEZUV19TTAkgRlRXX1NMCisjZW5kaWYKKworI2lmZGVmIF9fVVNFX1hPUEVOX0VYVEVOREVECisvKiBUaGVzZSBmbGFncyBhcmUgb25seSBwYXNzZWQgZnJvbSB0aGUgYG5mdHcnIGZ1bmN0aW9uLiAgKi8KKyAgRlRXX0RQLAkJLyogRGlyZWN0b3J5LCBhbGwgc3ViZGlycyBoYXZlIGJlZW4gdmlzaXRlZC4gKi8KKyMgZGVmaW5lIEZUV19EUAkgRlRXX0RQCisgIEZUV19TTE4JCS8qIFN5bWJvbGljIGxpbmsgbmFtaW5nIG5vbi1leGlzdGluZyBmaWxlLiAgKi8KKyMgZGVmaW5lIEZUV19TTE4gRlRXX1NMTgorCisjZW5kaWYJLyogZXh0ZW5kZWQgWC9PcGVuICovCit9OworCisKKyNpZmRlZiBfX1VTRV9YT1BFTl9FWFRFTkRFRAorLyogRmxhZ3MgZm9yIGZvdXJ0aCBhcmd1bWVudCBvZiBgbmZ0dycuICAqLworZW51bQoreworICBGVFdfUEhZUyA9IDEsCQkvKiBQZXJmb3JtIHBoeXNpY2FsIHdhbGssIGlnbm9yZSBzeW1saW5rcy4gICovCisjIGRlZmluZSBGVFdfUEhZUwlGVFdfUEhZUworICBGVFdfTU9VTlQgPSAyLAkvKiBSZXBvcnQgb25seSBmaWxlcyBvbiBzYW1lIGZpbGUgc3lzdGVtIGFzIHRoZQorCQkJICAgYXJndW1lbnQuICAqLworIyBkZWZpbmUgRlRXX01PVU5UCUZUV19NT1VOVAorICBGVFdfQ0hESVIgPSA0LAkvKiBDaGFuZ2UgdG8gY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgcHJvY2Vzc2luZyBpdC4gICovCisjIGRlZmluZSBGVFdfQ0hESVIJRlRXX0NIRElSCisgIEZUV19ERVBUSCA9IDgJCS8qIFJlcG9ydCBmaWxlcyBpbiBkaXJlY3RvcnkgYmVmb3JlIGRpcmVjdG9yeSBpdHNlbGYuKi8KKyMgZGVmaW5lIEZUV19ERVBUSAlGVFdfREVQVEgKKyMgaWZkZWYgX19VU0VfR05VCisgICwKKyAgRlRXX0FDVElPTlJFVFZBTCA9IDE2CS8qIEFzc3VtZSBjYWxsYmFjayB0byByZXR1cm4gRlRXXyogdmFsdWVzIGluc3RlYWQgb2YKKwkJCSAgIHplcm8gdG8gY29udGludWUgYW5kIG5vbi16ZXJvIHRvIHRlcm1pbmF0ZS4gICovCisjICBkZWZpbmUgRlRXX0FDVElPTlJFVFZBTCBGVFdfQUNUSU9OUkVUVkFMCisjIGVuZGlmCit9OworCisjaWZkZWYgX19VU0VfR05VCisvKiBSZXR1cm4gdmFsdWVzIGZyb20gY2FsbGJhY2sgZnVuY3Rpb25zLiAgKi8KK2VudW0KK3sKKyAgRlRXX0NPTlRJTlVFID0gMCwJLyogQ29udGludWUgd2l0aCBuZXh0IHNpYmxpbmcgb3IgZm9yIEZUV19EIHdpdGggdGhlCisJCQkgICBmaXJzdCBjaGlsZC4gICovCisjIGRlZmluZSBGVFdfQ09OVElOVUUJRlRXX0NPTlRJTlVFCisgIEZUV19TVE9QID0gMSwJCS8qIFJldHVybiBmcm9tIGBmdHcnIG9yIGBuZnR3JyB3aXRoIEZUV19TVE9QIGFzIHJldHVybgorCQkJICAgdmFsdWUuICAqLworIyBkZWZpbmUgRlRXX1NUT1AJRlRXX1NUT1AKKyAgRlRXX1NLSVBfU1VCVFJFRSA9IDIsCS8qIE9ubHkgbWVhbmluZ2Z1bCBmb3IgRlRXX0Q6IERvbid0IHdhbGsgdGhyb3VnaCB0aGUKKwkJCSAgIHN1YnRyZWUsIGluc3RlYWQganVzdCBjb250aW51ZSB3aXRoIGl0cyBuZXh0CisJCQkgICBzaWJsaW5nLiAqLworIyBkZWZpbmUgRlRXX1NLSVBfU1VCVFJFRSBGVFdfU0tJUF9TVUJUUkVFCisgIEZUV19TS0lQX1NJQkxJTkdTID0gMywvKiBDb250aW51ZSB3aXRoIEZUV19EUCBjYWxsYmFjayBmb3IgY3VycmVudCBkaXJlY3RvcnkKKwkJCSAgICAoaWYgRlRXX0RFUFRIKSBhbmQgdGhlbiBpdHMgc2libGluZ3MuICAqLworIyBkZWZpbmUgRlRXX1NLSVBfU0lCTElOR1MgRlRXX1NLSVBfU0lCTElOR1MKK307CisjZW5kaWYKKworLyogU3RydWN0dXJlIHVzZWQgZm9yIGZvdXJ0aCBhcmd1bWVudCB0byBjYWxsYmFjayBmdW5jdGlvbiBmb3IgYG5mdHcnLiAgKi8KK3N0cnVjdCBGVFcKKyAgeworICAgIGludCBiYXNlOworICAgIGludCBsZXZlbDsKKyAgfTsKKyNlbmRpZgkvKiBleHRlbmRlZCBYL09wZW4gKi8KKworCisvKiBDb252ZW5pZW50IHR5cGVzIGZvciBjYWxsYmFjayBmdW5jdGlvbnMuICAqLwordHlwZWRlZiBpbnQgKCpfX2Z0d19mdW5jX3QpIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUsCisJCQkgICAgIF9fY29uc3Qgc3RydWN0IHN0YXQgKl9fc3RhdHVzLCBpbnQgX19mbGFnKTsKKyNpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAordHlwZWRlZiBpbnQgKCpfX2Z0dzY0X2Z1bmNfdCkgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSwKKwkJCSAgICAgICBfX2NvbnN0IHN0cnVjdCBzdGF0NjQgKl9fc3RhdHVzLCBpbnQgX19mbGFnKTsKKyNlbmRpZgorI2lmZGVmIF9fVVNFX1hPUEVOX0VYVEVOREVECit0eXBlZGVmIGludCAoKl9fbmZ0d19mdW5jX3QpIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUsCisJCQkgICAgICBfX2NvbnN0IHN0cnVjdCBzdGF0ICpfX3N0YXR1cywgaW50IF9fZmxhZywKKwkJCSAgICAgIHN0cnVjdCBGVFcgKl9faW5mbyk7CisjIGlmZGVmIF9fVVNFX0xBUkdFRklMRTY0Cit0eXBlZGVmIGludCAoKl9fbmZ0dzY0X2Z1bmNfdCkgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSwKKwkJCQlfX2NvbnN0IHN0cnVjdCBzdGF0NjQgKl9fc3RhdHVzLAorCQkJCWludCBfX2ZsYWcsIHN0cnVjdCBGVFcgKl9faW5mbyk7CisjIGVuZGlmCisjZW5kaWYKKworLyogQ2FsbCBhIGZ1bmN0aW9uIG9uIGV2ZXJ5IGVsZW1lbnQgaW4gYSBkaXJlY3RvcnkgdHJlZS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCisjaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKK2V4dGVybiBpbnQgZnR3IChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2Z0d19mdW5jX3QgX19mdW5jLCBpbnQgX19kZXNjcmlwdG9ycykKKyAgICAgX19ub25udWxsICgoMSwgMikpOworI2Vsc2UKKyMgaWZkZWYgX19SRURJUkVDVAorZXh0ZXJuIGludCBfX1JFRElSRUNUIChmdHcsIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2Z0d19mdW5jX3QgX19mdW5jLAorCQkJICAgICBpbnQgX19kZXNjcmlwdG9ycyksIGZ0dzY0KSBfX25vbm51bGwgKCgxLCAyKSk7CisjIGVsc2UKKyMgIGRlZmluZSBmdHcgZnR3NjQKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIF9fVVNFX0xBUkdFRklMRTY0CitleHRlcm4gaW50IGZ0dzY0IChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2Z0dzY0X2Z1bmNfdCBfX2Z1bmMsCisJCSAgaW50IF9fZGVzY3JpcHRvcnMpIF9fbm9ubnVsbCAoKDEsIDIpKTsKKyNlbmRpZgorCisjaWZkZWYgX19VU0VfWE9QRU5fRVhURU5ERUQKKy8qIENhbGwgYSBmdW5jdGlvbiBvbiBldmVyeSBlbGVtZW50IGluIGEgZGlyZWN0b3J5IHRyZWUuICBGTEFHIGFsbG93cworICAgdG8gc3BlY2lmeSB0aGUgYmVoYXZpb3VyIG1vcmUgZGV0YWlsZWQuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworIyBpZm5kZWYgX19VU0VfRklMRV9PRkZTRVQ2NAorZXh0ZXJuIGludCBuZnR3IChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX25mdHdfZnVuY190IF9fZnVuYywgaW50IF9fZGVzY3JpcHRvcnMsCisJCSBpbnQgX19mbGFnKSBfX25vbm51bGwgKCgxLCAyKSk7CisjIGVsc2UKKyMgIGlmZGVmIF9fUkVESVJFQ1QKK2V4dGVybiBpbnQgX19SRURJUkVDVCAobmZ0dywgKF9fY29uc3QgY2hhciAqX19kaXIsIF9fbmZ0d19mdW5jX3QgX19mdW5jLAorCQkJICAgICAgaW50IF9fZGVzY3JpcHRvcnMsIGludCBfX2ZsYWcpLCBuZnR3NjQpCisgICAgIF9fbm9ubnVsbCAoKDEsIDIpKTsKKyMgIGVsc2UKKyMgICBkZWZpbmUgbmZ0dyBuZnR3NjQKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmZGVmIF9fVVNFX0xBUkdFRklMRTY0CitleHRlcm4gaW50IG5mdHc2NCAoX19jb25zdCBjaGFyICpfX2RpciwgX19uZnR3NjRfZnVuY190IF9fZnVuYywKKwkJICAgaW50IF9fZGVzY3JpcHRvcnMsIGludCBfX2ZsYWcpIF9fbm9ubnVsbCAoKDEsIDIpKTsKKyMgZW5kaWYKKyNlbmRpZgorCitfX0VORF9ERUNMUworCisjZW5kaWYJLyogZnR3LmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9nY29udi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2djb252LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk0NjMzNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9nY29udi5oCkBAIC0wLDAgKzEsMTgwIEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTctMTk5OSwgMjAwMC0yMDAyLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisvKiBUaGlzIGhlYWRlciBwcm92aWRlcyBubyBpbnRlcmZhY2UgZm9yIGEgdXNlciB0byB0aGUgaW50ZXJuYWxzIG9mCisgICB0aGUgZ2NvbnYgaW1wbGVtZW50YXRpb24gaW4gdGhlIGxpYmMuICBUaGVyZWZvcmUgdGhlcmUgaXMgbm8gdXNlCisgICBmb3IgdGhlc2UgZGVmaW5pdGlvbnMgYmVzaWRlIGZvciB3cml0aW5nIGFkZGl0aW9uYWwgZ2NvbnYgbW9kdWxlcy4gICovCisKKyNpZm5kZWYgX0dDT05WX0gKKyNkZWZpbmUgX0dDT05WX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNkZWZpbmUgX19uZWVkX21ic3RhdGVfdAorI2RlZmluZSBfX25lZWRfd2ludF90CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNkZWZpbmUgX19uZWVkX3NpemVfdAorI2RlZmluZSBfX25lZWRfd2NoYXJfdAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisvKiBJU08gMTA2NDYgdmFsdWUgdXNlZCB0byBzaWduYWwgaW52YWxpZCB2YWx1ZS4gICovCisjZGVmaW5lIF9fVU5LTk9XTl8xMDY0Nl9DSEFSCSgod2NoYXJfdCkgMHhmZmZkKQorCisvKiBFcnJvciBjb2RlcyBmb3IgZ2NvbnYgZnVuY3Rpb25zLiAgKi8KK2VudW0KK3sKKyAgX19HQ09OVl9PSyA9IDAsCisgIF9fR0NPTlZfTk9DT05WLAorICBfX0dDT05WX05PREIsCisgIF9fR0NPTlZfTk9NRU0sCisKKyAgX19HQ09OVl9FTVBUWV9JTlBVVCwKKyAgX19HQ09OVl9GVUxMX09VVFBVVCwKKyAgX19HQ09OVl9JTExFR0FMX0lOUFVULAorICBfX0dDT05WX0lOQ09NUExFVEVfSU5QVVQsCisKKyAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1IsCisgIF9fR0NPTlZfSU5URVJOQUxfRVJST1IKK307CisKKworLyogRmxhZ3MgdGhlIGBfX2djb252X29wZW4nIGZ1bmN0aW9uIGNhbiBzZXQuICAqLworZW51bQoreworICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEsCisgIF9fR0NPTlZfSUdOT1JFX0VSUk9SUyA9IDB4MDAwMgorfTsKKworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucy4gICovCitzdHJ1Y3QgX19nY29udl9zdGVwOworc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhOworc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdDsKK3N0cnVjdCBfX2djb252X3RyYW5zX2RhdGE7CisKKworLyogVHlwZSBvZiBhIGNvbnZlcnNpb24gZnVuY3Rpb24uICAqLwordHlwZWRlZiBpbnQgKCpfX2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCisJCQkgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKKwkJCSAgICB1bnNpZ25lZCBjaGFyICoqLCBzaXplX3QgKiwgaW50LCBpbnQpOworCisvKiBUeXBlIG9mIGEgc3BlY2lhbGl6ZWQgY29udmVyc2lvbiBmdW5jdGlvbiBmb3IgYSBzaW5nbGUgYnl0ZSB0byBJTlRFUk5BTC4gICovCit0eXBlZGVmIHdpbnRfdCAoKl9fZ2NvbnZfYnRvd2NfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLCB1bnNpZ25lZCBjaGFyKTsKKworLyogQ29uc3RydWN0b3IgYW5kIGRlc3RydWN0b3IgZm9yIGxvY2FsIGRhdGEgZm9yIGNvbnZlcnNpb24gc3RlcC4gICovCit0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwordHlwZWRlZiB2b2lkICgqX19nY29udl9lbmRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKKworCisvKiBUeXBlIG9mIGEgdHJhbnNsaXRlcmF0aW9uL3RyYW5zc2NyaXB0aW9uIGZ1bmN0aW9uLiAgKi8KK3R5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosCisJCQkJICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwgdm9pZCAqLAorCQkJCSAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCisJCQkJICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosCisJCQkJICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKiwKKwkJCQkgIHNpemVfdCAqKTsKKworLyogRnVuY3Rpb24gdG8gY2FsbCB0byBwcm92aWRlIHRyYW5zbGl0ZXJhdGlvbiBtb2R1bGUgd2l0aCBjb250ZXh0LiAgKi8KK3R5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19jb250ZXh0X2ZjdCkgKHZvaWQgKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCisJCQkJCSAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCisJCQkJCSAgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOworCisvKiBGdW5jdGlvbiB0byBxdWVyeSBtb2R1bGUgYWJvdXQgc3VwcG9ydGVkIGVuY29kZWQgY2hhcmFjdGVyIHNldHMuICAqLwordHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX3F1ZXJ5X2ZjdCkgKF9fY29uc3QgY2hhciAqLCBfX2NvbnN0IGNoYXIgKioqLAorCQkJCQlzaXplX3QgKik7CisKKy8qIENvbnN0cnVjdG9yIGFuZCBkZXN0cnVjdG9yIGZvciBsb2NhbCBkYXRhIGZvciB0cmFuc2xpdGVyYXRpb24uICAqLwordHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29uc3QgY2hhciAqKTsKK3R5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCkgKHZvaWQgKik7CisKK3N0cnVjdCBfX2djb252X3RyYW5zX2RhdGEKK3sKKyAgLyogVHJhbnNsaXRlcmF0aW9uL1RyYW5zc2NyaXB0aW9uIGZ1bmN0aW9uLiAgKi8KKyAgX19nY29udl90cmFuc19mY3QgX190cmFuc19mY3Q7CisgIF9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsKKyAgX19nY29udl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKKyAgdm9pZCAqX19kYXRhOworICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX25leHQ7Cit9OworCisKKy8qIERlc2NyaXB0aW9uIG9mIGEgY29udmVyc2lvbiBzdGVwLiAgKi8KK3N0cnVjdCBfX2djb252X3N0ZXAKK3sKKyAgc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdCAqX19zaGxpYl9oYW5kbGU7CisgIF9fY29uc3QgY2hhciAqX19tb2RuYW1lOworCisgIGludCBfX2NvdW50ZXI7CisKKyAgY2hhciAqX19mcm9tX25hbWU7CisgIGNoYXIgKl9fdG9fbmFtZTsKKworICBfX2djb252X2ZjdCBfX2ZjdDsKKyAgX19nY29udl9idG93Y19mY3QgX19idG93Y19mY3Q7CisgIF9fZ2NvbnZfaW5pdF9mY3QgX19pbml0X2ZjdDsKKyAgX19nY29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKKworICAvKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCBvciBwcm9kdWNlZCBpbiB0aGlzCisgICAgIHN0ZXAuICBUaGlzIGhlbHBzIG9wdGltaXppbmcgdGhlIGJ1ZmZlciBzaXplcy4gICovCisgIGludCBfX21pbl9uZWVkZWRfZnJvbTsKKyAgaW50IF9fbWF4X25lZWRlZF9mcm9tOworICBpbnQgX19taW5fbmVlZGVkX3RvOworICBpbnQgX19tYXhfbmVlZGVkX3RvOworCisgIC8qIEZsYWcgd2hldGhlciB0aGlzIGlzIGEgc3RhdGVmdWwgZW5jb2Rpbmcgb3Igbm90LiAgKi8KKyAgaW50IF9fc3RhdGVmdWw7CisKKyAgdm9pZCAqX19kYXRhOwkJLyogUG9pbnRlciB0byBzdGVwLWxvY2FsIGRhdGEuICAqLworfTsKKworLyogQWRkaXRpb25hbCBkYXRhIGZvciBzdGVwcyBpbiB1c2Ugb2YgY29udmVyc2lvbiBkZXNjcmlwdG9yLiAgVGhpcyBpcworICAgYWxsb2NhdGVkIGJ5IHRoZSBgaW5pdCcgZnVuY3Rpb24uICAqLworc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhCit7CisgIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmOyAgICAvKiBPdXRwdXQgYnVmZmVyIGZvciB0aGlzIHN0ZXAuICAqLworICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZmVuZDsgLyogQWRkcmVzcyBvZiBmaXJzdCBieXRlIGFmdGVyIHRoZSBvdXRwdXQKKwkJCQkgYnVmZmVyLiAgKi8KKworICAvKiBJcyB0aGlzIHRoZSBsYXN0IG1vZHVsZSBpbiB0aGUgY2hhaW4uICAqLworICBpbnQgX19mbGFnczsKKworICAvKiBDb3VudGVyIGZvciBudW1iZXIgb2YgaW52b2NhdGlvbnMgb2YgdGhlIG1vZHVsZSBmdW5jdGlvbiBmb3IgdGhpcworICAgICBkZXNjcmlwdG9yLiAgKi8KKyAgaW50IF9faW52b2NhdGlvbl9jb3VudGVyOworCisgIC8qIEZsYWcgd2hldGhlciB0aGlzIGlzIGFuIGludGVybmFsIHVzZSBvZiB0aGUgbW9kdWxlIChpbiB0aGUgbWIqdG93YyoKKyAgICAgYW5kIHdjKnRvbWIqIGZ1bmN0aW9ucykgb3IgcmVndWxhciB3aXRoIGljb252KDMpLiAgKi8KKyAgaW50IF9faW50ZXJuYWxfdXNlOworCisgIF9fbWJzdGF0ZV90ICpfX3N0YXRlcDsKKyAgX19tYnN0YXRlX3QgX19zdGF0ZTsJLyogVGhpcyBlbGVtZW50IG11c3Qgbm90IGJlIHVzZWQgZGlyZWN0bHkgYnkKKwkJCSAgIGFueSBtb2R1bGU7IGFsd2F5cyB1c2UgU1RBVEVQISAgKi8KKworICAvKiBUcmFuc2xpdGVyYXRpb24gaW5mb3JtYXRpb24uICAqLworICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX3RyYW5zOworfTsKKworCisvKiBDb21iaW5lIGNvbnZlcnNpb24gc3RlcCBkZXNjcmlwdGlvbiB3aXRoIGRhdGEuICAqLwordHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCit7CisgIHNpemVfdCBfX25zdGVwczsKKyAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKKyAgX19leHRlbnNpb25fXyBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhIF9fZmxleGFycjsKK30gKl9fZ2NvbnZfdDsKKworI2VuZGlmIC8qIGdjb252LmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9nZXRvcHQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9nZXRvcHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2EwMjZjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2dldG9wdC5oCkBAIC0wLDAgKzEsMTc3IEBACisvKiBEZWNsYXJhdGlvbnMgZm9yIGdldG9wdC4KKyAgIENvcHlyaWdodCAoQykgMTk4OS0xOTk0LDE5OTYtMTk5OSwyMDAxLDIwMDMsMjAwNAorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX0dFVE9QVF9ICisKKyNpZm5kZWYgX19uZWVkX2dldG9wdAorIyBkZWZpbmUgX0dFVE9QVF9IIDEKKyNlbmRpZgorCisvKiBJZiBfX0dOVV9MSUJSQVJZX18gaXMgbm90IGFscmVhZHkgZGVmaW5lZCwgZWl0aGVyIHdlIGFyZSBiZWluZyB1c2VkCisgICBzdGFuZGFsb25lLCBvciB0aGlzIGlzIHRoZSBmaXJzdCBoZWFkZXIgaW5jbHVkZWQgaW4gdGhlIHNvdXJjZSBmaWxlLgorICAgSWYgd2UgYXJlIGJlaW5nIHVzZWQgd2l0aCBnbGliYywgd2UgbmVlZCB0byBpbmNsdWRlIDxmZWF0dXJlcy5oPiwgYnV0CisgICB0aGF0IGRvZXMgbm90IGV4aXN0IGlmIHdlIGFyZSBzdGFuZGFsb25lLiAgU286IGlmIF9fR05VX0xJQlJBUllfXyBpcworICAgbm90IGRlZmluZWQsIGluY2x1ZGUgPGN0eXBlLmg+LCB3aGljaCB3aWxsIHB1bGwgaW4gPGZlYXR1cmVzLmg+IGZvciB1cworICAgaWYgaXQncyBmcm9tIGdsaWJjLiAgKFdoeSBjdHlwZS5oPyAgSXQncyBndWFyYW50ZWVkIHRvIGV4aXN0IGFuZCBpdAorICAgZG9lc24ndCBmbG9vZCB0aGUgbmFtZXNwYWNlIHdpdGggc3R1ZmYgdGhlIHdheSBzb21lIG90aGVyIGhlYWRlcnMgZG8uKSAgKi8KKyNpZiAhZGVmaW5lZCBfX0dOVV9MSUJSQVJZX18KKyMgaW5jbHVkZSA8Y3R5cGUuaD4KKyNlbmRpZgorCisjaWZuZGVmIF9fVEhST1cKKyMgaWZuZGVmIF9fR05VQ19QUkVSRVEKKyMgIGRlZmluZSBfX0dOVUNfUFJFUkVRKG1haiwgbWluKSAoMCkKKyMgZW5kaWYKKyMgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBfX0dOVUNfUFJFUkVRICgyLDgpCisjICBkZWZpbmUgX19USFJPVwl0aHJvdyAoKQorIyBlbHNlCisjICBkZWZpbmUgX19USFJPVworIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZglfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogRm9yIGNvbW11bmljYXRpb24gZnJvbSBgZ2V0b3B0JyB0byB0aGUgY2FsbGVyLgorICAgV2hlbiBgZ2V0b3B0JyBmaW5kcyBhbiBvcHRpb24gdGhhdCB0YWtlcyBhbiBhcmd1bWVudCwKKyAgIHRoZSBhcmd1bWVudCB2YWx1ZSBpcyByZXR1cm5lZCBoZXJlLgorICAgQWxzbywgd2hlbiBgb3JkZXJpbmcnIGlzIFJFVFVSTl9JTl9PUkRFUiwKKyAgIGVhY2ggbm9uLW9wdGlvbiBBUkdWLWVsZW1lbnQgaXMgcmV0dXJuZWQgaGVyZS4gICovCisKK2V4dGVybiBjaGFyICpvcHRhcmc7CisKKy8qIEluZGV4IGluIEFSR1Ygb2YgdGhlIG5leHQgZWxlbWVudCB0byBiZSBzY2FubmVkLgorICAgVGhpcyBpcyB1c2VkIGZvciBjb21tdW5pY2F0aW9uIHRvIGFuZCBmcm9tIHRoZSBjYWxsZXIKKyAgIGFuZCBmb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHN1Y2Nlc3NpdmUgY2FsbHMgdG8gYGdldG9wdCcuCisKKyAgIE9uIGVudHJ5IHRvIGBnZXRvcHQnLCB6ZXJvIG1lYW5zIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGw7IGluaXRpYWxpemUuCisKKyAgIFdoZW4gYGdldG9wdCcgcmV0dXJucyAtMSwgdGhpcyBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG9mIHRoZQorICAgbm9uLW9wdGlvbiBlbGVtZW50cyB0aGF0IHRoZSBjYWxsZXIgc2hvdWxkIGl0c2VsZiBzY2FuLgorCisgICBPdGhlcndpc2UsIGBvcHRpbmQnIGNvbW11bmljYXRlcyBmcm9tIG9uZSBjYWxsIHRvIHRoZSBuZXh0CisgICBob3cgbXVjaCBvZiBBUkdWIGhhcyBiZWVuIHNjYW5uZWQgc28gZmFyLiAgKi8KKworZXh0ZXJuIGludCBvcHRpbmQ7CisKKy8qIENhbGxlcnMgc3RvcmUgemVybyBoZXJlIHRvIGluaGliaXQgdGhlIGVycm9yIG1lc3NhZ2UgYGdldG9wdCcgcHJpbnRzCisgICBmb3IgdW5yZWNvZ25pemVkIG9wdGlvbnMuICAqLworCitleHRlcm4gaW50IG9wdGVycjsKKworLyogU2V0IHRvIGFuIG9wdGlvbiBjaGFyYWN0ZXIgd2hpY2ggd2FzIHVucmVjb2duaXplZC4gICovCisKK2V4dGVybiBpbnQgb3B0b3B0OworCisjaWZuZGVmIF9fbmVlZF9nZXRvcHQKKy8qIERlc2NyaWJlIHRoZSBsb25nLW5hbWVkIG9wdGlvbnMgcmVxdWVzdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KKyAgIFRoZSBMT05HX09QVElPTlMgYXJndW1lbnQgdG8gZ2V0b3B0X2xvbmcgb3IgZ2V0b3B0X2xvbmdfb25seSBpcyBhIHZlY3RvcgorICAgb2YgYHN0cnVjdCBvcHRpb24nIHRlcm1pbmF0ZWQgYnkgYW4gZWxlbWVudCBjb250YWluaW5nIGEgbmFtZSB3aGljaCBpcworICAgemVyby4KKworICAgVGhlIGZpZWxkIGBoYXNfYXJnJyBpczoKKyAgIG5vX2FyZ3VtZW50CQkob3IgMCkgaWYgdGhlIG9wdGlvbiBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50LAorICAgcmVxdWlyZWRfYXJndW1lbnQJKG9yIDEpIGlmIHRoZSBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQsCisgICBvcHRpb25hbF9hcmd1bWVudCAJKG9yIDIpIGlmIHRoZSBvcHRpb24gdGFrZXMgYW4gb3B0aW9uYWwgYXJndW1lbnQuCisKKyAgIElmIHRoZSBmaWVsZCBgZmxhZycgaXMgbm90IE5VTEwsIGl0IHBvaW50cyB0byBhIHZhcmlhYmxlIHRoYXQgaXMgc2V0CisgICB0byB0aGUgdmFsdWUgZ2l2ZW4gaW4gdGhlIGZpZWxkIGB2YWwnIHdoZW4gdGhlIG9wdGlvbiBpcyBmb3VuZCwgYnV0CisgICBsZWZ0IHVuY2hhbmdlZCBpZiB0aGUgb3B0aW9uIGlzIG5vdCBmb3VuZC4KKworICAgVG8gaGF2ZSBhIGxvbmctbmFtZWQgb3B0aW9uIGRvIHNvbWV0aGluZyBvdGhlciB0aGFuIHNldCBhbiBgaW50JyB0bworICAgYSBjb21waWxlZC1pbiBjb25zdGFudCwgc3VjaCBhcyBzZXQgYSB2YWx1ZSBmcm9tIGBvcHRhcmcnLCBzZXQgdGhlCisgICBvcHRpb24ncyBgZmxhZycgZmllbGQgdG8gemVybyBhbmQgaXRzIGB2YWwnIGZpZWxkIHRvIGEgbm9uemVybworICAgdmFsdWUgKHRoZSBlcXVpdmFsZW50IHNpbmdsZS1sZXR0ZXIgb3B0aW9uIGNoYXJhY3RlciwgaWYgdGhlcmUgaXMKKyAgIG9uZSkuICBGb3IgbG9uZyBvcHRpb25zIHRoYXQgaGF2ZSBhIHplcm8gYGZsYWcnIGZpZWxkLCBgZ2V0b3B0JworICAgcmV0dXJucyB0aGUgY29udGVudHMgb2YgdGhlIGB2YWwnIGZpZWxkLiAgKi8KKworc3RydWN0IG9wdGlvbgoreworICBjb25zdCBjaGFyICpuYW1lOworICAvKiBoYXNfYXJnIGNhbid0IGJlIGFuIGVudW0gYmVjYXVzZSBzb21lIGNvbXBpbGVycyBjb21wbGFpbiBhYm91dAorICAgICB0eXBlIG1pc21hdGNoZXMgaW4gYWxsIHRoZSBjb2RlIHRoYXQgYXNzdW1lcyBpdCBpcyBhbiBpbnQuICAqLworICBpbnQgaGFzX2FyZzsKKyAgaW50ICpmbGFnOworICBpbnQgdmFsOworfTsKKworLyogTmFtZXMgZm9yIHRoZSB2YWx1ZXMgb2YgdGhlIGBoYXNfYXJnJyBmaWVsZCBvZiBgc3RydWN0IG9wdGlvbicuICAqLworCisjIGRlZmluZSBub19hcmd1bWVudAkJMAorIyBkZWZpbmUgcmVxdWlyZWRfYXJndW1lbnQJMQorIyBkZWZpbmUgb3B0aW9uYWxfYXJndW1lbnQJMgorI2VuZGlmCS8qIG5lZWQgZ2V0b3B0ICovCisKKworLyogR2V0IGRlZmluaXRpb25zIGFuZCBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgdG8gcHJvY2VzcyB0aGUKKyAgIGFyZ3VtZW50cyBpbiBBUkdWIChBUkdDIG9mIHRoZW0sIG1pbnVzIHRoZSBwcm9ncmFtIG5hbWUpIGZvcgorICAgb3B0aW9ucyBnaXZlbiBpbiBPUFRTLgorCisgICBSZXR1cm4gdGhlIG9wdGlvbiBjaGFyYWN0ZXIgZnJvbSBPUFRTIGp1c3QgcmVhZC4gIFJldHVybiAtMSB3aGVuCisgICB0aGVyZSBhcmUgbm8gbW9yZSBvcHRpb25zLiAgRm9yIHVucmVjb2duaXplZCBvcHRpb25zLCBvciBvcHRpb25zCisgICBtaXNzaW5nIGFyZ3VtZW50cywgYG9wdG9wdCcgaXMgc2V0IHRvIHRoZSBvcHRpb24gbGV0dGVyLCBhbmQgJz8nIGlzCisgICByZXR1cm5lZC4KKworICAgVGhlIE9QVFMgc3RyaW5nIGlzIGEgbGlzdCBvZiBjaGFyYWN0ZXJzIHdoaWNoIGFyZSByZWNvZ25pemVkIG9wdGlvbgorICAgbGV0dGVycywgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBjb2xvbnMsIHNwZWNpZnlpbmcgdGhhdCB0aGF0IGxldHRlcgorICAgdGFrZXMgYW4gYXJndW1lbnQsIHRvIGJlIHBsYWNlZCBpbiBgb3B0YXJnJy4KKworICAgSWYgYSBsZXR0ZXIgaW4gT1BUUyBpcyBmb2xsb3dlZCBieSB0d28gY29sb25zLCBpdHMgYXJndW1lbnQgaXMKKyAgIG9wdGlvbmFsLiAgVGhpcyBiZWhhdmlvciBpcyBzcGVjaWZpYyB0byB0aGUgR05VIGBnZXRvcHQnLgorCisgICBUaGUgYXJndW1lbnQgYC0tJyBjYXVzZXMgcHJlbWF0dXJlIHRlcm1pbmF0aW9uIG9mIGFyZ3VtZW50CisgICBzY2FubmluZywgZXhwbGljaXRseSB0ZWxsaW5nIGBnZXRvcHQnIHRoYXQgdGhlcmUgYXJlIG5vIG1vcmUKKyAgIG9wdGlvbnMuCisKKyAgIElmIE9QVFMgYmVnaW5zIHdpdGggYC0tJywgdGhlbiBub24tb3B0aW9uIGFyZ3VtZW50cyBhcmUgdHJlYXRlZCBhcworICAgYXJndW1lbnRzIHRvIHRoZSBvcHRpb24gJ1wwJy4gIFRoaXMgYmVoYXZpb3IgaXMgc3BlY2lmaWMgdG8gdGhlIEdOVQorICAgYGdldG9wdCcuICAqLworCisjaWZkZWYgX19HTlVfTElCUkFSWV9fCisvKiBNYW55IG90aGVyIGxpYnJhcmllcyBoYXZlIGNvbmZsaWN0aW5nIHByb3RvdHlwZXMgZm9yIGdldG9wdCwgd2l0aAorICAgZGlmZmVyZW5jZXMgaW4gdGhlIGNvbnN0cywgaW4gc3RkbGliLmguICBUbyBhdm9pZCBjb21waWxhdGlvbgorICAgZXJyb3JzLCBvbmx5IHByb3RvdHlwZSBnZXRvcHQgZm9yIHRoZSBHTlUgQyBsaWJyYXJ5LiAgKi8KK2V4dGVybiBpbnQgZ2V0b3B0IChpbnQgX19fYXJnYywgY2hhciAqY29uc3QgKl9fX2FyZ3YsIGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzKQorICAgICAgIF9fVEhST1c7CisjZWxzZSAvKiBub3QgX19HTlVfTElCUkFSWV9fICovCitleHRlcm4gaW50IGdldG9wdCAoKTsKKyNlbmRpZiAvKiBfX0dOVV9MSUJSQVJZX18gKi8KKworI2lmbmRlZiBfX25lZWRfZ2V0b3B0CitleHRlcm4gaW50IGdldG9wdF9sb25nIChpbnQgX19fYXJnYywgY2hhciAqY29uc3QgKl9fX2FyZ3YsCisJCQljb25zdCBjaGFyICpfX3Nob3J0b3B0cywKKwkJICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpfX2xvbmdvcHRzLCBpbnQgKl9fbG9uZ2luZCkKKyAgICAgICBfX1RIUk9XOworZXh0ZXJuIGludCBnZXRvcHRfbG9uZ19vbmx5IChpbnQgX19fYXJnYywgY2hhciAqY29uc3QgKl9fX2FyZ3YsCisJCQkgICAgIGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzLAorCQkgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqX19sb25nb3B0cywgaW50ICpfX2xvbmdpbmQpCisgICAgICAgX19USFJPVzsKKworI2VuZGlmCisKKyNpZmRlZglfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKy8qIE1ha2Ugc3VyZSB3ZSBsYXRlciBjYW4gZ2V0IGFsbCB0aGUgZGVmaW5pdGlvbnMgYW5kIGRlY2xhcmF0aW9ucy4gICovCisjdW5kZWYgX19uZWVkX2dldG9wdAorCisjZW5kaWYgLyogZ2V0b3B0LmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9nbG9iLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZ2xvYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNDAxZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZ2xvYi5oCkBAIC0wLDAgKzEsMTk0IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTEsOTIsOTUtOTgsMjAwMCwyMDAxLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYJX0dMT0JfSAorI2RlZmluZQlfR0xPQl9ICTEKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKKy8qIFdlIG5lZWQgYHNpemVfdCcgZm9yIHRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMuICAqLworI2lmbmRlZiBfX3NpemVfdAorIyBpZiBkZWZpbmVkIF9fR05VQ19fICYmIF9fR05VQ19fID49IDIKK3R5cGVkZWYgX19TSVpFX1RZUEVfXyBfX3NpemVfdDsKKyMgIGlmZGVmIF9fVVNFX1hPUEVOCit0eXBlZGVmIF9fU0laRV9UWVBFX18gc2l6ZV90OworIyAgZW5kaWYKKyMgZWxzZQorIyAgaW5jbHVkZSA8c3RkZGVmLmg+CisjICBpZm5kZWYgX19zaXplX3QKKyMgICBkZWZpbmUgX19zaXplX3Qgc2l6ZV90CisjICBlbmRpZgorIyBlbmRpZgorI2Vsc2UKKy8qIFRoZSBHTlUgQ0Mgc3RkZGVmLmggdmVyc2lvbiBkZWZpbmVzIF9fc2l6ZV90IGFzIGVtcHR5LiAgV2UgbmVlZCBhIHJlYWwKKyAgIGRlZmluaXRpb24uICAqLworIyB1bmRlZiBfX3NpemVfdAorIyBkZWZpbmUgX19zaXplX3Qgc2l6ZV90CisjZW5kaWYKKworLyogQml0cyBzZXQgaW4gdGhlIEZMQUdTIGFyZ3VtZW50IHRvIGBnbG9iJy4gICovCisjZGVmaW5lCUdMT0JfRVJSCSgxIDw8IDApLyogUmV0dXJuIG9uIHJlYWQgZXJyb3JzLiAgKi8KKyNkZWZpbmUJR0xPQl9NQVJLCSgxIDw8IDEpLyogQXBwZW5kIGEgc2xhc2ggdG8gZWFjaCBuYW1lLiAgKi8KKyNkZWZpbmUJR0xPQl9OT1NPUlQJKDEgPDwgMikvKiBEb24ndCBzb3J0IHRoZSBuYW1lcy4gICovCisjZGVmaW5lCUdMT0JfRE9PRkZTCSgxIDw8IDMpLyogSW5zZXJ0IFBHTE9CLT5nbF9vZmZzIE5VTExzLiAgKi8KKyNkZWZpbmUJR0xPQl9OT0NIRUNLCSgxIDw8IDQpLyogSWYgbm90aGluZyBtYXRjaGVzLCByZXR1cm4gdGhlIHBhdHRlcm4uICAqLworI2RlZmluZQlHTE9CX0FQUEVORAkoMSA8PCA1KS8qIEFwcGVuZCB0byByZXN1bHRzIG9mIGEgcHJldmlvdXMgY2FsbC4gICovCisjZGVmaW5lCUdMT0JfTk9FU0NBUEUJKDEgPDwgNikvKiBCYWNrc2xhc2hlcyBkb24ndCBxdW90ZSBtZXRhY2hhcmFjdGVycy4gICovCisjZGVmaW5lCUdMT0JfUEVSSU9ECSgxIDw8IDcpLyogTGVhZGluZyBgLicgY2FuIGJlIG1hdGNoZWQgYnkgbWV0YWNoYXJzLiAgKi8KKworI2lmICFkZWZpbmVkIF9fVVNFX1BPU0lYMiB8fCBkZWZpbmVkIF9fVVNFX0JTRCB8fCBkZWZpbmVkIF9fVVNFX0dOVQorIyBkZWZpbmUgR0xPQl9NQUdDSEFSCSAoMSA8PCA4KS8qIFNldCBpbiBnbF9mbGFncyBpZiBhbnkgbWV0YWNoYXJzIHNlZW4uICAqLworIyBkZWZpbmUgR0xPQl9BTFRESVJGVU5DICgxIDw8IDkpLyogVXNlIGdsX29wZW5kaXIgZXQgYWwgZnVuY3Rpb25zLiAgKi8KKyMgZGVmaW5lIEdMT0JfQlJBQ0UJICgxIDw8IDEwKS8qIEV4cGFuZCAie2EsYn0iIHRvICJhIiAiYiIuICAqLworIyBkZWZpbmUgR0xPQl9OT01BR0lDCSAoMSA8PCAxMSkvKiBJZiBubyBtYWdpYyBjaGFycywgcmV0dXJuIHRoZSBwYXR0ZXJuLiAgKi8KKyMgZGVmaW5lIEdMT0JfVElMREUJICgxIDw8IDEyKS8qIEV4cGFuZCB+dXNlciBhbmQgfiB0byBob21lIGRpcmVjdG9yaWVzLiAqLworIyBkZWZpbmUgR0xPQl9PTkxZRElSCSAoMSA8PCAxMykvKiBNYXRjaCBvbmx5IGRpcmVjdG9yaWVzLiAgKi8KKyMgZGVmaW5lIEdMT0JfVElMREVfQ0hFQ0sgKDEgPDwgMTQpLyogTGlrZSBHTE9CX1RJTERFIGJ1dCByZXR1cm4gYW4gZXJyb3IKKwkJCQkgICAgICBpZiB0aGUgdXNlciBuYW1lIGlzIG5vdCBhdmFpbGFibGUuICAqLworIyBkZWZpbmUgX19HTE9CX0ZMQUdTCShHTE9CX0VSUnxHTE9CX01BUkt8R0xPQl9OT1NPUlR8R0xPQl9ET09GRlN8IFwKKwkJCSBHTE9CX05PRVNDQVBFfEdMT0JfTk9DSEVDS3xHTE9CX0FQUEVORHwgICAgIFwKKwkJCSBHTE9CX1BFUklPRHxHTE9CX0FMVERJUkZVTkN8R0xPQl9CUkFDRXwgICAgIFwKKwkJCSBHTE9CX05PTUFHSUN8R0xPQl9USUxERXxHTE9CX09OTFlESVJ8R0xPQl9USUxERV9DSEVDSykKKyNlbHNlCisjIGRlZmluZSBfX0dMT0JfRkxBR1MJKEdMT0JfRVJSfEdMT0JfTUFSS3xHTE9CX05PU09SVHxHTE9CX0RPT0ZGU3wgXAorCQkJIEdMT0JfTk9FU0NBUEV8R0xPQl9OT0NIRUNLfEdMT0JfQVBQRU5EfCAgICAgXAorCQkJIEdMT0JfUEVSSU9EKQorI2VuZGlmCisKKy8qIEVycm9yIHJldHVybnMgZnJvbSBgZ2xvYicuICAqLworI2RlZmluZQlHTE9CX05PU1BBQ0UJMQkvKiBSYW4gb3V0IG9mIG1lbW9yeS4gICovCisjZGVmaW5lCUdMT0JfQUJPUlRFRAkyCS8qIFJlYWQgZXJyb3IuICAqLworI2RlZmluZQlHTE9CX05PTUFUQ0gJMwkvKiBObyBtYXRjaGVzIGZvdW5kLiAgKi8KKyNkZWZpbmUgR0xPQl9OT1NZUwk0CS8qIE5vdCBpbXBsZW1lbnRlZC4gICovCisjaWZkZWYgX19VU0VfR05VCisvKiBQcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGlzIGZpbGUgZGVmaW5lZCBHTE9CX0FCRU5EIGluc3RlYWQgb2YKKyAgIEdMT0JfQUJPUlRFRC4gIFByb3ZpZGUgYSBjb21wYXRpYmlsaXR5IGRlZmluaXRpb24gaGVyZS4gICovCisjIGRlZmluZSBHTE9CX0FCRU5EIEdMT0JfQUJPUlRFRAorI2VuZGlmCisKKy8qIFN0cnVjdHVyZSBkZXNjcmliaW5nIGEgZ2xvYmJpbmcgcnVuLiAgKi8KKyNpZmRlZiBfX1VTRV9HTlUKK3N0cnVjdCBzdGF0OworI2VuZGlmCit0eXBlZGVmIHN0cnVjdAorICB7CisgICAgX19zaXplX3QgZ2xfcGF0aGM7CQkvKiBDb3VudCBvZiBwYXRocyBtYXRjaGVkIGJ5IHRoZSBwYXR0ZXJuLiAgKi8KKyAgICBjaGFyICoqZ2xfcGF0aHY7CQkvKiBMaXN0IG9mIG1hdGNoZWQgcGF0aG5hbWVzLiAgKi8KKyAgICBfX3NpemVfdCBnbF9vZmZzOwkJLyogU2xvdHMgdG8gcmVzZXJ2ZSBpbiBgZ2xfcGF0aHYnLiAgKi8KKyAgICBpbnQgZ2xfZmxhZ3M7CQkvKiBTZXQgdG8gRkxBR1MsIG1heWJlIHwgR0xPQl9NQUdDSEFSLiAgKi8KKworICAgIC8qIElmIHRoZSBHTE9CX0FMVERJUkZVTkMgZmxhZyBpcyBzZXQsIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zCisgICAgICAgYXJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgbm9ybWFsIGZpbGUgYWNjZXNzIGZ1bmN0aW9ucy4gICovCisgICAgdm9pZCAoKmdsX2Nsb3NlZGlyKSAodm9pZCAqKTsKKyNpZmRlZiBfX1VTRV9HTlUKKyAgICBzdHJ1Y3QgZGlyZW50ICooKmdsX3JlYWRkaXIpICh2b2lkICopOworI2Vsc2UKKyAgICB2b2lkICooKmdsX3JlYWRkaXIpICh2b2lkICopOworI2VuZGlmCisgICAgdm9pZCAqKCpnbF9vcGVuZGlyKSAoX19jb25zdCBjaGFyICopOworI2lmZGVmIF9fVVNFX0dOVQorICAgIGludCAoKmdsX2xzdGF0KSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0LCBzdHJ1Y3Qgc3RhdCAqX19yZXN0cmljdCk7CisgICAgaW50ICgqZ2xfc3RhdCkgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCwgc3RydWN0IHN0YXQgKl9fcmVzdHJpY3QpOworI2Vsc2UKKyAgICBpbnQgKCpnbF9sc3RhdCkgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCwgdm9pZCAqX19yZXN0cmljdCk7CisgICAgaW50ICgqZ2xfc3RhdCkgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCwgdm9pZCAqX19yZXN0cmljdCk7CisjZW5kaWYKKyAgfSBnbG9iX3Q7CisKKyNpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAorIyBpZmRlZiBfX1VTRV9HTlUKK3N0cnVjdCBzdGF0NjQ7CisjIGVuZGlmCit0eXBlZGVmIHN0cnVjdAorICB7CisgICAgX19zaXplX3QgZ2xfcGF0aGM7CisgICAgY2hhciAqKmdsX3BhdGh2OworICAgIF9fc2l6ZV90IGdsX29mZnM7CisgICAgaW50IGdsX2ZsYWdzOworCisgICAgLyogSWYgdGhlIEdMT0JfQUxURElSRlVOQyBmbGFnIGlzIHNldCwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMKKyAgICAgICBhcmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgZmlsZSBhY2Nlc3MgZnVuY3Rpb25zLiAgKi8KKyAgICB2b2lkICgqZ2xfY2xvc2VkaXIpICh2b2lkICopOworIyBpZmRlZiBfX1VTRV9HTlUKKyAgICBzdHJ1Y3QgZGlyZW50NjQgKigqZ2xfcmVhZGRpcikgKHZvaWQgKik7CisjIGVsc2UKKyAgICB2b2lkICooKmdsX3JlYWRkaXIpICh2b2lkICopOworIyBlbmRpZgorICAgIHZvaWQgKigqZ2xfb3BlbmRpcikgKF9fY29uc3QgY2hhciAqKTsKKyMgaWZkZWYgX19VU0VfR05VCisgICAgaW50ICgqZ2xfbHN0YXQpIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QsIHN0cnVjdCBzdGF0NjQgKl9fcmVzdHJpY3QpOworICAgIGludCAoKmdsX3N0YXQpIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QsIHN0cnVjdCBzdGF0NjQgKl9fcmVzdHJpY3QpOworIyBlbHNlCisgICAgaW50ICgqZ2xfbHN0YXQpIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QsIHZvaWQgKl9fcmVzdHJpY3QpOworICAgIGludCAoKmdsX3N0YXQpIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QsIHZvaWQgKl9fcmVzdHJpY3QpOworIyBlbmRpZgorICB9IGdsb2I2NF90OworI2VuZGlmCisKKyNpZiBfX1VTRV9GSUxFX09GRlNFVDY0ICYmIF9fR05VQ19fIDwgMgorIyBkZWZpbmUgZ2xvYiBnbG9iNjQKKyMgZGVmaW5lIGdsb2JmcmVlIGdsb2JmcmVlNjQKKyNlbmRpZgorCisvKiBEbyBnbG9iIHNlYXJjaGluZyBmb3IgUEFUVEVSTiwgcGxhY2luZyByZXN1bHRzIGluIFBHTE9CLgorICAgVGhlIGJpdHMgZGVmaW5lZCBhYm92ZSBtYXkgYmUgc2V0IGluIEZMQUdTLgorICAgSWYgYSBkaXJlY3RvcnkgY2Fubm90IGJlIG9wZW5lZCBvciByZWFkIGFuZCBFUlJGVU5DIGlzIG5vdCBuaWwsCisgICBpdCBpcyBjYWxsZWQgd2l0aCB0aGUgcGF0aG5hbWUgdGhhdCBjYXVzZWQgdGhlIGVycm9yLCBhbmQgdGhlCisgICBgZXJybm8nIHZhbHVlIGZyb20gdGhlIGZhaWxpbmcgY2FsbDsgaWYgaXQgcmV0dXJucyBub24temVybworICAgYGdsb2InIHJldHVybnMgR0xPQl9BQkVORDsgaWYgaXQgcmV0dXJucyB6ZXJvLCB0aGUgZXJyb3IgaXMgaWdub3JlZC4KKyAgIElmIG1lbW9yeSBjYW5ub3QgYmUgYWxsb2NhdGVkIGZvciBQR0xPQiwgR0xPQl9OT1NQQUNFIGlzIHJldHVybmVkLgorICAgT3RoZXJ3aXNlLCBgZ2xvYicgcmV0dXJucyB6ZXJvLiAgKi8KKyNpZiAhZGVmaW5lZCBfX1VTRV9GSUxFX09GRlNFVDY0IHx8IF9fR05VQ19fIDwgMgorZXh0ZXJuIGludCBnbG9iIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXR0ZXJuLCBpbnQgX19mbGFncywKKwkJIGludCAoKl9fZXJyZnVuYykgKF9fY29uc3QgY2hhciAqLCBpbnQpLAorCQkgZ2xvYl90ICpfX3Jlc3RyaWN0IF9fcGdsb2IpIF9fVEhST1c7CisKKy8qIEZyZWUgc3RvcmFnZSBhbGxvY2F0ZWQgaW4gUEdMT0IgYnkgYSBwcmV2aW91cyBgZ2xvYicgY2FsbC4gICovCitleHRlcm4gdm9pZCBnbG9iZnJlZSAoZ2xvYl90ICpfX3BnbG9iKSBfX1RIUk9XOworI2Vsc2UKK2V4dGVybiBpbnQgX19SRURJUkVDVF9OVEggKGdsb2IsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXR0ZXJuLAorCQkJCSAgaW50IF9fZmxhZ3MsCisJCQkJICBpbnQgKCpfX2VycmZ1bmMpIChfX2NvbnN0IGNoYXIgKiwgaW50KSwKKwkJCQkgIGdsb2JfdCAqX19yZXN0cmljdCBfX3BnbG9iKSwgZ2xvYjY0KTsKKworZXh0ZXJuIHZvaWQgX19SRURJUkVDVF9OVEggKGdsb2JmcmVlLCAoZ2xvYl90ICpfX3BnbG9iKSwgZ2xvYmZyZWU2NCk7CisjZW5kaWYKKworI2lmZGVmIF9fVVNFX0xBUkdFRklMRTY0CitleHRlcm4gaW50IGdsb2I2NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcGF0dGVybiwgaW50IF9fZmxhZ3MsCisJCSAgIGludCAoKl9fZXJyZnVuYykgKF9fY29uc3QgY2hhciAqLCBpbnQpLAorCQkgICBnbG9iNjRfdCAqX19yZXN0cmljdCBfX3BnbG9iKSBfX1RIUk9XOworCitleHRlcm4gdm9pZCBnbG9iZnJlZTY0IChnbG9iNjRfdCAqX19wZ2xvYikgX19USFJPVzsKKyNlbmRpZgorCisKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIFJldHVybiBub256ZXJvIGlmIFBBVFRFUk4gY29udGFpbnMgYW55IG1ldGFjaGFyYWN0ZXJzLgorICAgTWV0YWNoYXJhY3RlcnMgY2FuIGJlIHF1b3RlZCB3aXRoIGJhY2tzbGFzaGVzIGlmIFFVT1RFIGlzIG5vbnplcm8uCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHBhcnQgb2YgdGhlIGludGVyZmFjZSBzcGVjaWZpZWQgYnkgUE9TSVguMgorICAgYnV0IHNldmVyYWwgcHJvZ3JhbXMgd2FudCB0byB1c2UgaXQuICAqLworZXh0ZXJuIGludCBnbG9iX3BhdHRlcm5fcCAoX19jb25zdCBjaGFyICpfX3BhdHRlcm4sIGludCBfX3F1b3RlKSBfX1RIUk9XOworI2VuZGlmCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBnbG9iLmggICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZ251LXZlcnNpb25zLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZ251LXZlcnNpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTllNjE3YwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9nbnUtdmVyc2lvbnMuaApAQCAtMCwwICsxLDUzIEBACisvKiBIZWFkZXIgd2l0aCBpbnRlcmZhY2UgdmVyc2lvbiBtYWNyb3MgZm9yIGxpYnJhcnkgcGllY2VzIGNvcGllZCBlbHNld2hlcmUuCisgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX0dOVV9WRVJTSU9OU19ICisjZGVmaW5lCV9HTlVfVkVSU0lPTlNfSAkxCisKKy8qIFRoaXMgZmlsZSBleGlzdHMgdG8gZGVmaW5lIHRoZXNlIGZldyBtYWNyb3MuICBFYWNoIHNwZWNpZmllcyBhIHZlcnNpb24KKyAgIG51bWJlciBhc3NvY2lhdGVkIHdpdGggdGhlIGxpYnJhcnkgaW50ZXJmYWNlIG9mIGEgcGllY2Ugb2YgdGhlIEMgbGlicmFyeQorICAgd2hpY2ggaXMgYWxzbyBkaXN0cmlidXRlZCB3aXRoIG90aGVyIEdOVSBwYWNrYWdlcy4gIFRoZXNlIHBpZWNlcyBhcmUKKyAgIGJvdGggcGFydCBvZiB0aGUgR05VIEMgbGlicmFyeSBhbmQgYWxzbyBkaXN0cmlidXRlZCB3aXRoIG90aGVyIEdOVQorICAgcGFja2FnZXMgc28gdGhvc2UgcGFja2FnZXMgbWF5IHVzZSB0aGVpciBmYWNpbGl0aWVzIG9uIHN5c3RlbXMgbGFja2luZworICAgdGhlIEdOVSBDIGxpYnJhcnkuICBUaGUgc291cmNlIGZpbGVzIGZvciBlYWNoIHBpZWNlIHN1cnJvdW5kIGFsbCB0aGVpcgorICAgY29kZSB3aXRoIGAjaWZuZGVmIEVMSURFX0NPREUnIGFmdGVyIGRlZmluaW5nIGl0IHdpdGggdGhpczoKKworICAgI2RlZmluZSBPQlNUQUNLX0lOVEVSRkFDRV9WRVJTSU9OIDEKKyAgICNpZiAhZGVmaW5lZCAoX0xJQkMpICYmIGRlZmluZWQgKF9fR05VX0xJQlJBUllfXykgJiYgX19HTlVfTElCUkFSWV9fID4gMQorICAgI2luY2x1ZGUgPGdudS12ZXJzaW9ucy5oPgorICAgI2lmIF9HTlVfT0JTVEFDS19JTlRFUkZBQ0VfVkVSU0lPTiA9PSBPQlNUQUNLX0lOVEVSRkFDRV9WRVJTSU9OCisgICAjZGVmaW5lIEVMSURFX0NPREUKKyAgICNlbmRpZgorICAgI2VuZGlmCisKKyAgIFRoaXMgYWxsb3dzIHRob3NlIG9uZSB0byBhdm9pZCBjb21waWxpbmcgdGhvc2UgZmlsZXMgd2hlbiBwYXJ0IG9mIGEgR05VCisgICBwYWNrYWdlIG5vdCBsaWJjLCBvbiBhIHN5c3RlbSB1c2luZyBhIEdOVSBDIGxpYnJhcnkgdGhhdCBzdXBwb3J0cyB0aGUKKyAgIHNhbWUgaW50ZXJmYWNlLgorCisgICBQbGVhc2UgcHJlc2VydmUgdGhlIGZvcm1hdCBvZiB0aGUgY29tbWVudHMgYWZ0ZXIgZWFjaCBtYWNyby4gIEFuZAorICAgcmVtZW1iZXIsIGlmIGFueSBvZiB0aGVzZSB2ZXJzaW9ucyBjaGFuZ2UsIHRoZSBsaWJjLnNvIG1ham9yIHZlcnNpb24KKyAgIG51bWJlciBtdXN0IGNoYW5nZSB0b28gKHNvIGF2b2lkIGl0KSEgICovCisKKyNkZWZpbmUgX0dOVV9PQlNUQUNLX0lOVEVSRkFDRV9WRVJTSU9OCTEgLyogdnMgbWFsbG9jL29ic3RhY2suYyAqLworI2RlZmluZSBfR05VX1JFR0VYX0lOVEVSRkFDRV9WRVJTSU9OCTEgLyogdnMgcG9zaXgvcmVnZXguYyAqLworI2RlZmluZSBfR05VX0dMT0JfSU5URVJGQUNFX1ZFUlNJT04JMSAvKiB2cyBwb3NpeC9nbG9iLmMgKi8KKyNkZWZpbmUgX0dOVV9HRVRPUFRfSU5URVJGQUNFX1ZFUlNJT04JMiAvKiB2cyBwb3NpeC9nZXRvcHQuYyBhbmQKKwkJCQkJICAgICBwb3NpeC9nZXRvcHQxLmMgKi8KKworI2VuZGlmCS8qIGdudS12ZXJzaW9ucy5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZ251L2xpYi1uYW1lcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2dudS9saWItbmFtZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTQ3YzY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2dudS9saWItbmFtZXMuaApAQCAtMCwwICsxLDI5IEBACisvKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQuCisgICBJdCBkZWZpbmVzIG1hY3JvcyB0byBhbGxvdyB1c2VyIHByb2dyYW0gdG8gZmluZCB0aGUgc2hhcmVkCisgICBsaWJyYXJ5IGZpbGVzIHdoaWNoIGNvbWUgYXMgcGFydCBvZiBHTlUgbGliYy4gICovCisjaWZuZGVmIF9fR05VX0xJQl9OQU1FU19ICisjZGVmaW5lIF9fR05VX0xJQl9OQU1FU19ICTEKKworI2RlZmluZSBMRF9MSU5VWF9TTyAgICAgICAgICAgICAgICAgICAgICJsZC1saW51eC5zby4zIgorI2RlZmluZSBMRF9TTyAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZC1saW51eC5zby4zIgorI2RlZmluZSBMSUJBTkxfU08gICAgICAgICAgICAgICAgICAgICAgICJsaWJhbmwuc28uMSIKKyNkZWZpbmUgTElCQlJPS0VOTE9DQUxFX1NPICAgICAgICAgICAgICAibGliQnJva2VuTG9jYWxlLnNvLjEiCisjZGVmaW5lIExJQkNSWVBUX1NPICAgICAgICAgICAgICAgICAgICAgImxpYmNyeXB0LnNvLjEiCisjZGVmaW5lIExJQkNfU08gICAgICAgICAgICAgICAgICAgICAgICAgImxpYmMuc28uNiIKKyNkZWZpbmUgTElCRExfU08gICAgICAgICAgICAgICAgICAgICAgICAibGliZGwuc28uMiIKKyNkZWZpbmUgTElCTV9TTyAgICAgICAgICAgICAgICAgICAgICAgICAibGlibS5zby42IgorI2RlZmluZSBMSUJOU0xfU08gICAgICAgICAgICAgICAgICAgICAgICJsaWJuc2wuc28uMSIKKyNkZWZpbmUgTElCTlNTX0NPTVBBVF9TTyAgICAgICAgICAgICAgICAibGlibnNzX2NvbXBhdC5zby4yIgorI2RlZmluZSBMSUJOU1NfRE5TX1NPICAgICAgICAgICAgICAgICAgICJsaWJuc3NfZG5zLnNvLjIiCisjZGVmaW5lIExJQk5TU19GSUxFU19TTyAgICAgICAgICAgICAgICAgImxpYm5zc19maWxlcy5zby4yIgorI2RlZmluZSBMSUJOU1NfSEVTSU9EX1NPICAgICAgICAgICAgICAgICJsaWJuc3NfaGVzaW9kLnNvLjIiCisjZGVmaW5lIExJQk5TU19MREFQX1NPICAgICAgICAgICAgICAgICAgImxpYm5zc19sZGFwLnNvLjIiCisjZGVmaW5lIExJQk5TU19OSVNQTFVTX1NPICAgICAgICAgICAgICAgImxpYm5zc19uaXNwbHVzLnNvLjIiCisjZGVmaW5lIExJQk5TU19OSVNfU08gICAgICAgICAgICAgICAgICAgImxpYm5zc19uaXMuc28uMiIKKyNkZWZpbmUgTElCUFRIUkVBRF9TTyAgICAgICAgICAgICAgICAgICAibGlicHRocmVhZC5zby4wIgorI2RlZmluZSBMSUJSRVNPTFZfU08gICAgICAgICAgICAgICAgICAgICJsaWJyZXNvbHYuc28uMiIKKyNkZWZpbmUgTElCUlRfU08gICAgICAgICAgICAgICAgICAgICAgICAibGlicnQuc28uMSIKKyNkZWZpbmUgTElCVEhSRUFEX0RCX1NPICAgICAgICAgICAgICAgICAibGlidGhyZWFkX2RiLnNvLjEiCisjZGVmaW5lIExJQlVUSUxfU08gICAgICAgICAgICAgICAgICAgICAgImxpYnV0aWwuc28uMSIKKworI2VuZGlmCS8qIGdudS9saWItbmFtZXMuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2dudS9saWJjLXZlcnNpb24uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9nbnUvbGliYy12ZXJzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcwNzFmZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9nbnUvbGliYy12ZXJzaW9uLmgKQEAgLTAsMCArMSwzNSBAQAorLyogSW50ZXJmYWNlIHRvIEdOVSBsaWJjIHNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgdmVyc2lvbiBpbmZvcm1hdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfR05VX0xJQkNfVkVSU0lPTl9ICisjZGVmaW5lCV9HTlVfTElCQ19WRVJTSU9OX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworX19CRUdJTl9ERUNMUworCisvKiBSZXR1cm4gc3RyaW5nIGRlc2NyaWJpbmcgcmVsZWFzZSBzdGF0dXMgb2YgY3VycmVudGx5IHJ1bm5pbmcgR05VIGxpYmMuICAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKmdudV9nZXRfbGliY19yZWxlYXNlICh2b2lkKSBfX1RIUk9XOworCisvKiBSZXR1cm4gc3RyaW5nIGRlc2NyaWJpbmcgdmVyc2lvbiBvZiBjdXJyZW50bHkgcnVubmluZyBHTlUgbGliYy4gICovCitleHRlcm4gY29uc3QgY2hhciAqZ251X2dldF9saWJjX3ZlcnNpb24gKHZvaWQpIF9fVEhST1c7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZgkvKiBnbnUvbGliYy12ZXJzaW9uLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWRmMmI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2dudS9zdHVicy5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC4KKyAgIEl0IGRlZmluZXMgYSBzeW1ib2wgYF9fc3R1Yl9GVU5DVElPTicgZm9yIGVhY2ggZnVuY3Rpb24KKyAgIGluIHRoZSBDIGxpYnJhcnkgd2hpY2ggaXMgYSBzdHViLCBtZWFuaW5nIGl0IHdpbGwgZmFpbAorICAgZXZlcnkgdGltZSBjYWxsZWQsIHVzdWFsbHkgc2V0dGluZyBlcnJubyB0byBFTk9TWVMuICAqLworCisjaWZkZWYgX0xJQkMKKyAjZXJyb3IgQXBwbGljYXRpb25zIG1heSBub3QgZGVmaW5lIHRoZSBtYWNybyBfTElCQworI2VuZGlmCisKKyNkZWZpbmUgX19zdHViX2NoZmxhZ3MKKyNkZWZpbmUgX19zdHViX2NyZWF0ZV9tb2R1bGUKKyNkZWZpbmUgX19zdHViX2ZhdHRhY2gKKyNkZWZpbmUgX19zdHViX2ZjaGZsYWdzCisjZGVmaW5lIF9fc3R1Yl9mZGV0YWNoCisjZGVmaW5lIF9fc3R1Yl9nZXRfa2VybmVsX3N5bXMKKyNkZWZpbmUgX19zdHViX2dldGNvbnRleHQKKyNkZWZpbmUgX19zdHViX2dldG1zZworI2RlZmluZSBfX3N0dWJfZ2V0cG1zZworI2RlZmluZSBfX3N0dWJfZ3R0eQorI2RlZmluZSBfX3N0dWJfbGNobW9kCisjZGVmaW5lIF9fc3R1Yl9tYWtlY29udGV4dAorI2RlZmluZSBfX3N0dWJfcHV0bXNnCisjZGVmaW5lIF9fc3R1Yl9wdXRwbXNnCisjZGVmaW5lIF9fc3R1Yl9xdWVyeV9tb2R1bGUKKyNkZWZpbmUgX19zdHViX3Jldm9rZQorI2RlZmluZSBfX3N0dWJfc2V0Y29udGV4dAorI2RlZmluZSBfX3N0dWJfc2V0bG9naW4KKyNkZWZpbmUgX19zdHViX3NpZ3JldHVybgorI2RlZmluZSBfX3N0dWJfc3N0aworI2RlZmluZSBfX3N0dWJfc3R0eQorI2RlZmluZSBfX3N0dWJfc3dhcGNvbnRleHQKKyNkZWZpbmUgX19zdHViX3N5bmNfZmlsZV9yYW5nZQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2dycC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2dycC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3Y2M2OWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvZ3JwLmgKQEAgLTAsMCArMSwyMDUgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5MSwxOTkyLDE5OTUtMjAwMSwyMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qCisgKglQT1NJWCBTdGFuZGFyZDogOS4yLjEgR3JvdXAgRGF0YWJhc2UgQWNjZXNzCTxncnAuaD4KKyAqLworCisjaWZuZGVmCV9HUlBfSAorI2RlZmluZQlfR1JQX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworX19CRUdJTl9ERUNMUworCisjaW5jbHVkZSA8Yml0cy90eXBlcy5oPgorCisjZGVmaW5lIF9fbmVlZF9zaXplX3QKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworCisvKiBGb3IgdGhlIFNpbmdsZSBVbml4IHNwZWNpZmljYXRpb24gd2UgbXVzdCBkZWZpbmUgdGhpcyB0eXBlIGhlcmUuICAqLworI2lmIChkZWZpbmVkIF9fVVNFX1hPUEVOIHx8IGRlZmluZWQgX19VU0VfWE9QRU4ySykgJiYgIWRlZmluZWQgX19naWRfdF9kZWZpbmVkCit0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CisjIGRlZmluZSBfX2dpZF90X2RlZmluZWQKKyNlbmRpZgorCisvKiBUaGUgZ3JvdXAgc3RydWN0dXJlLgkgKi8KK3N0cnVjdCBncm91cAorICB7CisgICAgY2hhciAqZ3JfbmFtZTsJCS8qIEdyb3VwIG5hbWUuCSovCisgICAgY2hhciAqZ3JfcGFzc3dkOwkJLyogUGFzc3dvcmQuCSovCisgICAgX19naWRfdCBncl9naWQ7CQkvKiBHcm91cCBJRC4JKi8KKyAgICBjaGFyICoqZ3JfbWVtOwkJLyogTWVtYmVyIGxpc3QuCSovCisgIH07CisKKworI2lmIGRlZmluZWQgX19VU0VfU1ZJRCB8fCBkZWZpbmVkIF9fVVNFX0dOVQorIyBkZWZpbmUgX19uZWVkX0ZJTEUKKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkIF9fVVNFX1NWSUQgfHwgZGVmaW5lZCBfX1VTRV9CU0QgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTl9FWFRFTkRFRAorLyogUmV3aW5kIHRoZSBncm91cC1maWxlIHN0cmVhbS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gdm9pZCBzZXRncmVudCAodm9pZCk7CisKKy8qIENsb3NlIHRoZSBncm91cC1maWxlIHN0cmVhbS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gdm9pZCBlbmRncmVudCAodm9pZCk7CisKKy8qIFJlYWQgYW4gZW50cnkgZnJvbSB0aGUgZ3JvdXAtZmlsZSBzdHJlYW0sIG9wZW5pbmcgaXQgaWYgbmVjZXNzYXJ5LgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBzdHJ1Y3QgZ3JvdXAgKmdldGdyZW50ICh2b2lkKTsKKyNlbmRpZgorCisjaWZkZWYJX19VU0VfU1ZJRAorLyogUmVhZCBhIGdyb3VwIGVudHJ5IGZyb20gU1RSRUFNLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBwYXJ0IG9mIFBPU0lYIGFuZCB0aGVyZWZvcmUgbm8gb2ZmaWNpYWwKKyAgIGNhbmNlbGxhdGlvbiBwb2ludC4gIEJ1dCBkdWUgdG8gc2ltaWxhcml0eSB3aXRoIGFuIFBPU0lYIGludGVyZmFjZQorICAgb3IgZHVlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBpdCBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQKKyAgIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gc3RydWN0IGdyb3VwICpmZ2V0Z3JlbnQgKEZJTEUgKl9fc3RyZWFtKTsKKyNlbmRpZgorCisjaWZkZWYgX19VU0VfR05VCisvKiBXcml0ZSB0aGUgZ2l2ZW4gZW50cnkgb250byB0aGUgZ2l2ZW4gc3RyZWFtLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBwYXJ0IG9mIFBPU0lYIGFuZCB0aGVyZWZvcmUgbm8gb2ZmaWNpYWwKKyAgIGNhbmNlbGxhdGlvbiBwb2ludC4gIEJ1dCBkdWUgdG8gc2ltaWxhcml0eSB3aXRoIGFuIFBPU0lYIGludGVyZmFjZQorICAgb3IgZHVlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBpdCBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQKKyAgIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gaW50IHB1dGdyZW50IChfX2NvbnN0IHN0cnVjdCBncm91cCAqX19yZXN0cmljdCBfX3AsCisJCSAgICAgRklMRSAqX19yZXN0cmljdCBfX2YpOworI2VuZGlmCisKKy8qIFNlYXJjaCBmb3IgYW4gZW50cnkgd2l0aCBhIG1hdGNoaW5nIGdyb3VwIElELgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBzdHJ1Y3QgZ3JvdXAgKmdldGdyZ2lkIChfX2dpZF90IF9fZ2lkKTsKKworLyogU2VhcmNoIGZvciBhbiBlbnRyeSB3aXRoIGEgbWF0Y2hpbmcgZ3JvdXAgbmFtZS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gc3RydWN0IGdyb3VwICpnZXRncm5hbSAoX19jb25zdCBjaGFyICpfX25hbWUpOworCisjaWYgZGVmaW5lZCBfX1VTRV9QT1NJWCB8fCBkZWZpbmVkIF9fVVNFX01JU0MKKworIyBpZmRlZiBfX1VTRV9NSVNDCisvKiBSZWFzb25hYmxlIHZhbHVlIGZvciB0aGUgYnVmZmVyIHNpemVkIHVzZWQgaW4gdGhlIHJlZW50cmFudAorICAgZnVuY3Rpb25zIGJlbG93LiAgQnV0IGJldHRlciB1c2UgYHN5c2NvbmYnLiAgKi8KKyMgIGRlZmluZSBOU1NfQlVGTEVOX0dST1VQCTEwMjQKKyMgZW5kaWYKKworLyogUmVlbnRyYW50IHZlcnNpb25zIG9mIHNvbWUgb2YgdGhlIGZ1bmN0aW9ucyBhYm92ZS4KKworICAgUExFQVNFIE5PVEU6IHRoZSBgZ2V0Z3JlbnRfcicgZnVuY3Rpb24gaXMgbm90ICh5ZXQpIHN0YW5kYXJkaXplZC4KKyAgIFRoZSBpbnRlcmZhY2UgbWF5IGNoYW5nZSBpbiBsYXRlciB2ZXJzaW9ucyBvZiB0aGlzIGxpYnJhcnkuICBCdXQKKyAgIHRoZSBpbnRlcmZhY2UgaXMgZGVzaWduZWQgZm9sbG93aW5nIHRoZSBwcmluY2lwYWxzIHVzZWQgZm9yIHRoZQorICAgb3RoZXIgcmVlbnRyYW50IGZ1bmN0aW9ucyBzbyB0aGUgY2hhbmNlcyBhcmUgZ29vZCB0aGlzIGlzIHdoYXQgdGhlCisgICBQT1NJWCBwZW9wbGUgd291bGQgY2hvb3NlLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBwYXJ0IG9mIFBPU0lYIGFuZCB0aGVyZWZvcmUgbm8gb2ZmaWNpYWwKKyAgIGNhbmNlbGxhdGlvbiBwb2ludC4gIEJ1dCBkdWUgdG8gc2ltaWxhcml0eSB3aXRoIGFuIFBPU0lYIGludGVyZmFjZQorICAgb3IgZHVlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBpdCBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQKKyAgIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGggX19USFJPVy4gICovCisKKyMgaWZkZWYgX19VU0VfR05VCitleHRlcm4gaW50IGdldGdyZW50X3IgKHN0cnVjdCBncm91cCAqX19yZXN0cmljdCBfX3Jlc3VsdGJ1ZiwKKwkJICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWZmZXIsIHNpemVfdCBfX2J1ZmxlbiwKKwkJICAgICAgIHN0cnVjdCBncm91cCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpOworIyBlbmRpZgorCisvKiBTZWFyY2ggZm9yIGFuIGVudHJ5IHdpdGggYSBtYXRjaGluZyBncm91cCBJRC4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gaW50IGdldGdyZ2lkX3IgKF9fZ2lkX3QgX19naWQsIHN0cnVjdCBncm91cCAqX19yZXN0cmljdCBfX3Jlc3VsdGJ1ZiwKKwkJICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWZmZXIsIHNpemVfdCBfX2J1ZmxlbiwKKwkJICAgICAgIHN0cnVjdCBncm91cCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpOworCisvKiBTZWFyY2ggZm9yIGFuIGVudHJ5IHdpdGggYSBtYXRjaGluZyBncm91cCBuYW1lLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgZ2V0Z3JuYW1fciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKKwkJICAgICAgIHN0cnVjdCBncm91cCAqX19yZXN0cmljdCBfX3Jlc3VsdGJ1ZiwKKwkJICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWZmZXIsIHNpemVfdCBfX2J1ZmxlbiwKKwkJICAgICAgIHN0cnVjdCBncm91cCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpOworCisjIGlmZGVmCV9fVVNFX1NWSUQKKy8qIFJlYWQgYSBncm91cCBlbnRyeSBmcm9tIFNUUkVBTS4gIFRoaXMgZnVuY3Rpb24gaXMgbm90IHN0YW5kYXJkaXplZAorICAgYW4gcHJvYmFibHkgbmV2ZXIgd2lsbC4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgcGFydCBvZiBQT1NJWCBhbmQgdGhlcmVmb3JlIG5vIG9mZmljaWFsCisgICBjYW5jZWxsYXRpb24gcG9pbnQuICBCdXQgZHVlIHRvIHNpbWlsYXJpdHkgd2l0aCBhbiBQT1NJWCBpbnRlcmZhY2UKKyAgIG9yIGR1ZSB0byB0aGUgaW1wbGVtZW50YXRpb24gaXQgaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kCisgICB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBmZ2V0Z3JlbnRfciAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKKwkJCXN0cnVjdCBncm91cCAqX19yZXN0cmljdCBfX3Jlc3VsdGJ1ZiwKKwkJCWNoYXIgKl9fcmVzdHJpY3QgX19idWZmZXIsIHNpemVfdCBfX2J1ZmxlbiwKKwkJCXN0cnVjdCBncm91cCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpOworIyBlbmRpZgorCisjZW5kaWYJLyogUE9TSVggb3IgcmVlbnRyYW50ICovCisKKworI2lmZGVmCV9fVVNFX0JTRAorCisjIGRlZmluZSBfX25lZWRfc2l6ZV90CisjIGluY2x1ZGUgPHN0ZGRlZi5oPgorCisvKiBTZXQgdGhlIGdyb3VwIHNldCBmb3IgdGhlIGN1cnJlbnQgdXNlciB0byBHUk9VUFMgKE4gb2YgdGhlbSkuICAqLworZXh0ZXJuIGludCBzZXRncm91cHMgKHNpemVfdCBfX24sIF9fY29uc3QgX19naWRfdCAqX19ncm91cHMpIF9fVEhST1c7CisKKy8qIFN0b3JlIGF0IG1vc3QgKk5HUk9VUFMgbWVtYmVycyBvZiB0aGUgZ3JvdXAgc2V0IGZvciBVU0VSIGludG8KKyAgICpHUk9VUFMuICBBbHNvIGluY2x1ZGUgR1JPVVAuICBUaGUgYWN0dWFsIG51bWJlciBvZiBncm91cHMgZm91bmQgaXMKKyAgIHJldHVybmVkIGluICpOR1JPVVBTLiAgUmV0dXJuIC0xIGlmIHRoZSBpZiAqTkdST1VQUyBpcyB0b28gc21hbGwuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGl0IGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgZ2V0Z3JvdXBsaXN0IChfX2NvbnN0IGNoYXIgKl9fdXNlciwgX19naWRfdCBfX2dyb3VwLAorCQkJIF9fZ2lkX3QgKl9fZ3JvdXBzLCBpbnQgKl9fbmdyb3Vwcyk7CisKKy8qIEluaXRpYWxpemUgdGhlIGdyb3VwIHNldCBmb3IgdGhlIGN1cnJlbnQgdXNlcgorICAgYnkgcmVhZGluZyB0aGUgZ3JvdXAgZGF0YWJhc2UgYW5kIHVzaW5nIGFsbCBncm91cHMKKyAgIG9mIHdoaWNoIFVTRVIgaXMgYSBtZW1iZXIuICBBbHNvIGluY2x1ZGUgR1JPVVAuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGl0IGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgaW5pdGdyb3VwcyAoX19jb25zdCBjaGFyICpfX3VzZXIsIF9fZ2lkX3QgX19ncm91cCk7CisKKyNlbmRpZiAvKiBVc2UgQlNELiAgKi8KKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIGdycC5oICAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2ljb252LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvaWNvbnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWViZjliCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2ljb252LmgKQEAgLTAsMCArMSw1NiBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9JQ09OVl9ICisjZGVmaW5lIF9JQ09OVl9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjZGVmaW5lIF9fbmVlZF9zaXplX3QKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworCitfX0JFR0lOX0RFQ0xTCisKKy8qIElkZW50aWZpZXIgZm9yIGNvbnZlcnNpb24gbWV0aG9kIGZyb20gb25lIGNvZGVzZXQgdG8gYW5vdGhlci4gICovCit0eXBlZGVmIHZvaWQgKmljb252X3Q7CisKKworLyogQWxsb2NhdGUgZGVzY3JpcHRvciBmb3IgY29kZSBjb252ZXJzaW9uIGZyb20gY29kZXNldCBGUk9NQ09ERSB0bworICAgY29kZXNldCBUT0NPREUuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnRzIGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpY29udl90IGljb252X29wZW4gKF9fY29uc3QgY2hhciAqX190b2NvZGUsIF9fY29uc3QgY2hhciAqX19mcm9tY29kZSk7CisKKy8qIENvbnZlcnQgYXQgbW9zdCAqSU5CWVRFU0xFRlQgYnl0ZXMgZnJvbSAqSU5CVUYgYWNjb3JkaW5nIHRvIHRoZQorICAgY29kZSBjb252ZXJzaW9uIGFsZ29yaXRobSBzcGVjaWZpZWQgYnkgQ0QgYW5kIHBsYWNlIHVwIHRvCisgICAqT1VUQllURVNMRUZUIGJ5dGVzIGluIGJ1ZmZlciBhdCAqT1VUQlVGLiAgKi8KK2V4dGVybiBzaXplX3QgaWNvbnYgKGljb252X3QgX19jZCwgY2hhciAqKl9fcmVzdHJpY3QgX19pbmJ1ZiwKKwkJICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19pbmJ5dGVzbGVmdCwKKwkJICAgICBjaGFyICoqX19yZXN0cmljdCBfX291dGJ1ZiwKKwkJICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19vdXRieXRlc2xlZnQpOworCisvKiBGcmVlIHJlc291cmNlcyBhbGxvY2F0ZWQgZm9yIGRlc2NyaXB0b3IgQ0QgZm9yIGNvZGUgY29udmVyc2lvbi4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludHMgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBpY29udl9jbG9zZSAoaWNvbnZfdCBfX2NkKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIGljb252LmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9pZWVlNzU0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvaWVlZTc1NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxN2MyOWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvaWVlZTc1NC5oCkBAIC0wLDAgKzEsMTk5IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTUsIDE5OTYsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX0lFRUU3NTRfSAorCisjZGVmaW5lIF9JRUVFNzU0X0ggMQorI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKyNpbmNsdWRlIDxlbmRpYW4uaD4KKworX19CRUdJTl9ERUNMUworCit1bmlvbiBpZWVlNzU0X2Zsb2F0CisgIHsKKyAgICBmbG9hdCBmOworCisgICAgLyogVGhpcyBpcyB0aGUgSUVFRSA3NTQgc2luZ2xlLXByZWNpc2lvbiBmb3JtYXQuICAqLworICAgIHN0cnVjdAorICAgICAgeworI2lmCV9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4KKwl1bnNpZ25lZCBpbnQgbmVnYXRpdmU6MTsKKwl1bnNpZ25lZCBpbnQgZXhwb25lbnQ6ODsKKwl1bnNpZ25lZCBpbnQgbWFudGlzc2E6MjM7CisjZW5kaWYJCQkJLyogQmlnIGVuZGlhbi4gICovCisjaWYJX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTgorCXVuc2lnbmVkIGludCBtYW50aXNzYToyMzsKKwl1bnNpZ25lZCBpbnQgZXhwb25lbnQ6ODsKKwl1bnNpZ25lZCBpbnQgbmVnYXRpdmU6MTsKKyNlbmRpZgkJCQkvKiBMaXR0bGUgZW5kaWFuLiAgKi8KKyAgICAgIH0gaWVlZTsKKworICAgIC8qIFRoaXMgZm9ybWF0IG1ha2VzIGl0IGVhc2llciB0byBzZWUgaWYgYSBOYU4gaXMgYSBzaWduYWxsaW5nIE5hTi4gICovCisgICAgc3RydWN0CisgICAgICB7CisjaWYJX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorCXVuc2lnbmVkIGludCBuZWdhdGl2ZToxOworCXVuc2lnbmVkIGludCBleHBvbmVudDo4OworCXVuc2lnbmVkIGludCBxdWlldF9uYW46MTsKKwl1bnNpZ25lZCBpbnQgbWFudGlzc2E6MjI7CisjZW5kaWYJCQkJLyogQmlnIGVuZGlhbi4gICovCisjaWYJX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTgorCXVuc2lnbmVkIGludCBtYW50aXNzYToyMjsKKwl1bnNpZ25lZCBpbnQgcXVpZXRfbmFuOjE7CisJdW5zaWduZWQgaW50IGV4cG9uZW50Ojg7CisJdW5zaWduZWQgaW50IG5lZ2F0aXZlOjE7CisjZW5kaWYJCQkJLyogTGl0dGxlIGVuZGlhbi4gICovCisgICAgICB9IGllZWVfbmFuOworICB9OworCisjZGVmaW5lIElFRUU3NTRfRkxPQVRfQklBUwkweDdmIC8qIEFkZGVkIHRvIGV4cG9uZW50LiAgKi8KKworCit1bmlvbiBpZWVlNzU0X2RvdWJsZQorICB7CisgICAgZG91YmxlIGQ7CisKKyAgICAvKiBUaGlzIGlzIHRoZSBJRUVFIDc1NCBkb3VibGUtcHJlY2lzaW9uIGZvcm1hdC4gICovCisgICAgc3RydWN0CisgICAgICB7CisjaWYJX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorCXVuc2lnbmVkIGludCBuZWdhdGl2ZToxOworCXVuc2lnbmVkIGludCBleHBvbmVudDoxMTsKKwkvKiBUb2dldGhlciB0aGVzZSBjb21wcmlzZSB0aGUgbWFudGlzc2EuICAqLworCXVuc2lnbmVkIGludCBtYW50aXNzYTA6MjA7CisJdW5zaWduZWQgaW50IG1hbnRpc3NhMTozMjsKKyNlbmRpZgkJCQkvKiBCaWcgZW5kaWFuLiAgKi8KKyNpZglfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOCisjIGlmCV9fRkxPQVRfV09SRF9PUkRFUiA9PSBfX0JJR19FTkRJQU4KKwl1bnNpZ25lZCBpbnQgbWFudGlzc2EwOjIwOworCXVuc2lnbmVkIGludCBleHBvbmVudDoxMTsKKwl1bnNpZ25lZCBpbnQgbmVnYXRpdmU6MTsKKwl1bnNpZ25lZCBpbnQgbWFudGlzc2ExOjMyOworIyBlbHNlCisJLyogVG9nZXRoZXIgdGhlc2UgY29tcHJpc2UgdGhlIG1hbnRpc3NhLiAgKi8KKwl1bnNpZ25lZCBpbnQgbWFudGlzc2ExOjMyOworCXVuc2lnbmVkIGludCBtYW50aXNzYTA6MjA7CisJdW5zaWduZWQgaW50IGV4cG9uZW50OjExOworCXVuc2lnbmVkIGludCBuZWdhdGl2ZToxOworIyBlbmRpZgorI2VuZGlmCQkJCS8qIExpdHRsZSBlbmRpYW4uICAqLworICAgICAgfSBpZWVlOworCisgICAgLyogVGhpcyBmb3JtYXQgbWFrZXMgaXQgZWFzaWVyIHRvIHNlZSBpZiBhIE5hTiBpcyBhIHNpZ25hbGxpbmcgTmFOLiAgKi8KKyAgICBzdHJ1Y3QKKyAgICAgIHsKKyNpZglfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCisJdW5zaWduZWQgaW50IG5lZ2F0aXZlOjE7CisJdW5zaWduZWQgaW50IGV4cG9uZW50OjExOworCXVuc2lnbmVkIGludCBxdWlldF9uYW46MTsKKwkvKiBUb2dldGhlciB0aGVzZSBjb21wcmlzZSB0aGUgbWFudGlzc2EuICAqLworCXVuc2lnbmVkIGludCBtYW50aXNzYTA6MTk7CisJdW5zaWduZWQgaW50IG1hbnRpc3NhMTozMjsKKyNlbHNlCisjIGlmCV9fRkxPQVRfV09SRF9PUkRFUiA9PSBfX0JJR19FTkRJQU4KKwl1bnNpZ25lZCBpbnQgbWFudGlzc2EwOjE5OworCXVuc2lnbmVkIGludCBxdWlldF9uYW46MTsKKwl1bnNpZ25lZCBpbnQgZXhwb25lbnQ6MTE7CisJdW5zaWduZWQgaW50IG5lZ2F0aXZlOjE7CisJdW5zaWduZWQgaW50IG1hbnRpc3NhMTozMjsKKyMgZWxzZQorCS8qIFRvZ2V0aGVyIHRoZXNlIGNvbXByaXNlIHRoZSBtYW50aXNzYS4gICovCisJdW5zaWduZWQgaW50IG1hbnRpc3NhMTozMjsKKwl1bnNpZ25lZCBpbnQgbWFudGlzc2EwOjE5OworCXVuc2lnbmVkIGludCBxdWlldF9uYW46MTsKKwl1bnNpZ25lZCBpbnQgZXhwb25lbnQ6MTE7CisJdW5zaWduZWQgaW50IG5lZ2F0aXZlOjE7CisjIGVuZGlmCisjZW5kaWYKKyAgICAgIH0gaWVlZV9uYW47CisgIH07CisKKyNkZWZpbmUgSUVFRTc1NF9ET1VCTEVfQklBUwkweDNmZiAvKiBBZGRlZCB0byBleHBvbmVudC4gICovCisKKwordW5pb24gaWVlZTg1NF9sb25nX2RvdWJsZQorICB7CisgICAgbG9uZyBkb3VibGUgZDsKKworICAgIC8qIFRoaXMgaXMgdGhlIElFRUUgODU0IGRvdWJsZS1leHRlbmRlZC1wcmVjaXNpb24gZm9ybWF0LiAgKi8KKyAgICBzdHJ1Y3QKKyAgICAgIHsKKyNpZglfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCisJdW5zaWduZWQgaW50IG5lZ2F0aXZlOjE7CisJdW5zaWduZWQgaW50IGV4cG9uZW50OjE1OworCXVuc2lnbmVkIGludCBlbXB0eToxNjsKKwl1bnNpZ25lZCBpbnQgbWFudGlzc2EwOjMyOworCXVuc2lnbmVkIGludCBtYW50aXNzYTE6MzI7CisjZW5kaWYKKyNpZglfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOCisjIGlmCV9fRkxPQVRfV09SRF9PUkRFUiA9PSBfX0JJR19FTkRJQU4KKwl1bnNpZ25lZCBpbnQgZXhwb25lbnQ6MTU7CisJdW5zaWduZWQgaW50IG5lZ2F0aXZlOjE7CisJdW5zaWduZWQgaW50IGVtcHR5OjE2OworCXVuc2lnbmVkIGludCBtYW50aXNzYTA6MzI7CisJdW5zaWduZWQgaW50IG1hbnRpc3NhMTozMjsKKyMgZWxzZQorCXVuc2lnbmVkIGludCBtYW50aXNzYTE6MzI7CisJdW5zaWduZWQgaW50IG1hbnRpc3NhMDozMjsKKwl1bnNpZ25lZCBpbnQgZXhwb25lbnQ6MTU7CisJdW5zaWduZWQgaW50IG5lZ2F0aXZlOjE7CisJdW5zaWduZWQgaW50IGVtcHR5OjE2OworIyBlbmRpZgorI2VuZGlmCisgICAgICB9IGllZWU7CisKKyAgICAvKiBUaGlzIGlzIGZvciBOYU5zIGluIHRoZSBJRUVFIDg1NCBkb3VibGUtZXh0ZW5kZWQtcHJlY2lzaW9uIGZvcm1hdC4gICovCisgICAgc3RydWN0CisgICAgICB7CisjaWYJX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorCXVuc2lnbmVkIGludCBuZWdhdGl2ZToxOworCXVuc2lnbmVkIGludCBleHBvbmVudDoxNTsKKwl1bnNpZ25lZCBpbnQgZW1wdHk6MTY7CisJdW5zaWduZWQgaW50IG9uZToxOworCXVuc2lnbmVkIGludCBxdWlldF9uYW46MTsKKwl1bnNpZ25lZCBpbnQgbWFudGlzc2EwOjMwOworCXVuc2lnbmVkIGludCBtYW50aXNzYTE6MzI7CisjZW5kaWYKKyNpZglfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOCisjIGlmCV9fRkxPQVRfV09SRF9PUkRFUiA9PSBfX0JJR19FTkRJQU4KKwl1bnNpZ25lZCBpbnQgZXhwb25lbnQ6MTU7CisJdW5zaWduZWQgaW50IG5lZ2F0aXZlOjE7CisJdW5zaWduZWQgaW50IGVtcHR5OjE2OworCXVuc2lnbmVkIGludCBtYW50aXNzYTA6MzA7CisJdW5zaWduZWQgaW50IHF1aWV0X25hbjoxOworCXVuc2lnbmVkIGludCBvbmU6MTsKKwl1bnNpZ25lZCBpbnQgbWFudGlzc2ExOjMyOworIyBlbHNlCisJdW5zaWduZWQgaW50IG1hbnRpc3NhMTozMjsKKwl1bnNpZ25lZCBpbnQgbWFudGlzc2EwOjMwOworCXVuc2lnbmVkIGludCBxdWlldF9uYW46MTsKKwl1bnNpZ25lZCBpbnQgb25lOjE7CisJdW5zaWduZWQgaW50IGV4cG9uZW50OjE1OworCXVuc2lnbmVkIGludCBuZWdhdGl2ZToxOworCXVuc2lnbmVkIGludCBlbXB0eToxNjsKKyMgZW5kaWYKKyNlbmRpZgorICAgICAgfSBpZWVlX25hbjsKKyAgfTsKKworI2RlZmluZSBJRUVFODU0X0xPTkdfRE9VQkxFX0JJQVMgMHgzZmZmCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBpZWVlNzU0LmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9pZmFkZHJzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvaWZhZGRycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNmExNTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvaWZhZGRycy5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qIGlmYWRkcnMuaCAtLSBkZWNsYXJhdGlvbnMgZm9yIGdldHRpbmcgbmV0d29yayBpbnRlcmZhY2UgYWRkcmVzc2VzCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX0lGQUREUlNfSAorI2RlZmluZSBfSUZBRERSU19ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorCitfX0JFR0lOX0RFQ0xTCisKKy8qIFRoZSBgZ2V0aWZhZGRycycgZnVuY3Rpb24gZ2VuZXJhdGVzIGEgbGlua2VkIGxpc3Qgb2YgdGhlc2Ugc3RydWN0dXJlcy4KKyAgIEVhY2ggZWxlbWVudCBvZiB0aGUgbGlzdCBkZXNjcmliZXMgb25lIG5ldHdvcmsgaW50ZXJmYWNlLiAgKi8KK3N0cnVjdCBpZmFkZHJzCit7CisgIHN0cnVjdCBpZmFkZHJzICppZmFfbmV4dDsJLyogUG9pbnRlciB0byB0aGUgbmV4dCBzdHJ1Y3R1cmUuICAqLworCisgIGNoYXIgKmlmYV9uYW1lOwkJLyogTmFtZSBvZiB0aGlzIG5ldHdvcmsgaW50ZXJmYWNlLiAgKi8KKyAgdW5zaWduZWQgaW50IGlmYV9mbGFnczsJLyogRmxhZ3MgYXMgZnJvbSBTSU9DR0lGRkxBR1MgaW9jdGwuICAqLworCisgIHN0cnVjdCBzb2NrYWRkciAqaWZhX2FkZHI7CS8qIE5ldHdvcmsgYWRkcmVzcyBvZiB0aGlzIGludGVyZmFjZS4gICovCisgIHN0cnVjdCBzb2NrYWRkciAqaWZhX25ldG1hc2s7IC8qIE5ldG1hc2sgb2YgdGhpcyBpbnRlcmZhY2UuICAqLworICB1bmlvbgorICB7CisgICAgLyogQXQgbW9zdCBvbmUgb2YgdGhlIGZvbGxvd2luZyB0d28gaXMgdmFsaWQuICBJZiB0aGUgSUZGX0JST0FEQ0FTVAorICAgICAgIGJpdCBpcyBzZXQgaW4gYGlmYV9mbGFncycsIHRoZW4gYGlmYV9icm9hZGFkZHInIGlzIHZhbGlkLiAgSWYgdGhlCisgICAgICAgSUZGX1BPSU5UT1BPSU5UIGJpdCBpcyBzZXQsIHRoZW4gYGlmYV9kc3RhZGRyJyBpcyB2YWxpZC4KKyAgICAgICBJdCBpcyBuZXZlciB0aGUgY2FzZSB0aGF0IGJvdGggdGhlc2UgYml0cyBhcmUgc2V0IGF0IG9uY2UuICAqLworICAgIHN0cnVjdCBzb2NrYWRkciAqaWZ1X2Jyb2FkYWRkcjsgLyogQnJvYWRjYXN0IGFkZHJlc3Mgb2YgdGhpcyBpbnRlcmZhY2UuICovCisgICAgc3RydWN0IHNvY2thZGRyICppZnVfZHN0YWRkcjsgLyogUG9pbnQtdG8tcG9pbnQgZGVzdGluYXRpb24gYWRkcmVzcy4gICovCisgIH0gaWZhX2lmdTsKKyAgLyogVGhlc2UgdmVyeSBzYW1lIG1hY3JvcyBhcmUgZGVmaW5lZCBieSA8bmV0L2lmLmg+IGZvciBgc3RydWN0IGlmYWRkcicuCisgICAgIFNvIGlmIHRoZXkgYXJlIGRlZmluZWQgYWxyZWFkeSwgdGhlIGV4aXN0aW5nIGRlZmluaXRpb25zIHdpbGwgYmUgZmluZS4gICovCisjIGlmbmRlZiBpZmFfYnJvYWRhZGRyCisjICBkZWZpbmUgaWZhX2Jyb2FkYWRkcglpZmFfaWZ1LmlmdV9icm9hZGFkZHIKKyMgZW5kaWYKKyMgaWZuZGVmIGlmYV9kc3RhZGRyCisjICBkZWZpbmUgaWZhX2RzdGFkZHIJaWZhX2lmdS5pZnVfZHN0YWRkcgorIyBlbmRpZgorCisgIHZvaWQgKmlmYV9kYXRhOwkJLyogQWRkcmVzcy1zcGVjaWZpYyBkYXRhIChtYXkgYmUgdW51c2VkKS4gICovCit9OworCisKKy8qIENyZWF0ZSBhIGxpbmtlZCBsaXN0IG9mIGBzdHJ1Y3QgaWZhZGRycycgc3RydWN0dXJlcywgb25lIGZvciBlYWNoCisgICBuZXR3b3JrIGludGVyZmFjZSBvbiB0aGUgaG9zdCBtYWNoaW5lLiAgSWYgc3VjY2Vzc2Z1bCwgc3RvcmUgdGhlCisgICBsaXN0IGluICpJRkFQIGFuZCByZXR1cm4gMC4gIE9uIGVycm9ycywgcmV0dXJuIC0xIGFuZCBzZXQgYGVycm5vJy4KKworICAgVGhlIHN0b3JhZ2UgcmV0dXJuZWQgaW4gKklGQVAgaXMgYWxsb2NhdGVkIGR5bmFtaWNhbGx5IGFuZCBjYW4KKyAgIG9ubHkgYmUgcHJvcGVybHkgZnJlZWQgYnkgcGFzc2luZyBpdCB0byBgZnJlZWlmYWRkcnMnLiAgKi8KK2V4dGVybiBpbnQgZ2V0aWZhZGRycyAoc3RydWN0IGlmYWRkcnMgKipfX2lmYXApIF9fVEhST1c7CisKKy8qIFJlY2xhaW0gdGhlIHN0b3JhZ2UgYWxsb2NhdGVkIGJ5IGEgcHJldmlvdXMgYGdldGlmYWRkcnMnIGNhbGwuICAqLworZXh0ZXJuIHZvaWQgZnJlZWlmYWRkcnMgKHN0cnVjdCBpZmFkZHJzICpfX2lmYSkgIF9fVEhST1c7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBpZmFkZHJzLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9pbnR0eXBlcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2ludHR5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYwZmZmYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9pbnR0eXBlcy5oCkBAIC0wLDAgKzEsNDQ0IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMSwgMjAwNCwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyoKKyAqCUlTTyBDOTk6IDcuOCBGb3JtYXQgY29udmVyc2lvbiBvZiBpbnRlZ2VyIHR5cGVzCTxpbnR0eXBlcy5oPgorICovCisKKyNpZm5kZWYgX0lOVFRZUEVTX0gKKyNkZWZpbmUgX0lOVFRZUEVTX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKy8qIEdldCB0aGUgdHlwZSBkZWZpbml0aW9ucy4gICovCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKy8qIEdldCBhIGRlZmluaXRpb24gZm9yIHdjaGFyX3QuICBCdXQgd2UgbXVzdCBub3QgZGVmaW5lIHdjaGFyX3QgaXRzZWxmLiAgKi8KKyNpZm5kZWYgX19fX2d3Y2hhcl90X2RlZmluZWQKKyMgaWZkZWYgX19jcGx1c3BsdXMKKyMgIGRlZmluZSBfX2d3Y2hhcl90IHdjaGFyX3QKKyMgZWxpZiBkZWZpbmVkIF9fV0NIQVJfVFlQRV9fCit0eXBlZGVmIF9fV0NIQVJfVFlQRV9fIF9fZ3djaGFyX3Q7CisjIGVsc2UKKyMgIGRlZmluZSBfX25lZWRfd2NoYXJfdAorIyAgaW5jbHVkZSA8c3RkZGVmLmg+Cit0eXBlZGVmIHdjaGFyX3QgX19nd2NoYXJfdDsKKyMgZW5kaWYKKyMgZGVmaW5lIF9fX19nd2NoYXJfdF9kZWZpbmVkCTEKKyNlbmRpZgorCisKKy8qIFRoZSBJU08gQzk5IHN0YW5kYXJkIHNwZWNpZmllcyB0aGF0IHRoZXNlIG1hY3JvcyBtdXN0IG9ubHkgYmUKKyAgIGRlZmluZWQgaWYgZXhwbGljaXRseSByZXF1ZXN0ZWQuICAqLworI2lmICFkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX19TVERDX0ZPUk1BVF9NQUNST1MKKworIyBpZiBfX1dPUkRTSVpFID09IDY0CisjICBkZWZpbmUgX19QUkk2NF9QUkVGSVgJImwiCisjICBkZWZpbmUgX19QUklQVFJfUFJFRklYCSJsIgorIyBlbHNlCisjICBkZWZpbmUgX19QUkk2NF9QUkVGSVgJImxsIgorIyAgZGVmaW5lIF9fUFJJUFRSX1BSRUZJWAorIyBlbmRpZgorCisvKiBNYWNyb3MgZm9yIHByaW50aW5nIGZvcm1hdCBzcGVjaWZpZXJzLiAgKi8KKworLyogRGVjaW1hbCBub3RhdGlvbi4gICovCisjIGRlZmluZSBQUklkOAkJImQiCisjIGRlZmluZSBQUklkMTYJCSJkIgorIyBkZWZpbmUgUFJJZDMyCQkiZCIKKyMgZGVmaW5lIFBSSWQ2NAkJX19QUkk2NF9QUkVGSVggImQiCisKKyMgZGVmaW5lIFBSSWRMRUFTVDgJImQiCisjIGRlZmluZSBQUklkTEVBU1QxNgkiZCIKKyMgZGVmaW5lIFBSSWRMRUFTVDMyCSJkIgorIyBkZWZpbmUgUFJJZExFQVNUNjQJX19QUkk2NF9QUkVGSVggImQiCisKKyMgZGVmaW5lIFBSSWRGQVNUOAkiZCIKKyMgZGVmaW5lIFBSSWRGQVNUMTYJX19QUklQVFJfUFJFRklYICJkIgorIyBkZWZpbmUgUFJJZEZBU1QzMglfX1BSSVBUUl9QUkVGSVggImQiCisjIGRlZmluZSBQUklkRkFTVDY0CV9fUFJJNjRfUFJFRklYICJkIgorCisKKyMgZGVmaW5lIFBSSWk4CQkiaSIKKyMgZGVmaW5lIFBSSWkxNgkJImkiCisjIGRlZmluZSBQUklpMzIJCSJpIgorIyBkZWZpbmUgUFJJaTY0CQlfX1BSSTY0X1BSRUZJWCAiaSIKKworIyBkZWZpbmUgUFJJaUxFQVNUOAkiaSIKKyMgZGVmaW5lIFBSSWlMRUFTVDE2CSJpIgorIyBkZWZpbmUgUFJJaUxFQVNUMzIJImkiCisjIGRlZmluZSBQUklpTEVBU1Q2NAlfX1BSSTY0X1BSRUZJWCAiaSIKKworIyBkZWZpbmUgUFJJaUZBU1Q4CSJpIgorIyBkZWZpbmUgUFJJaUZBU1QxNglfX1BSSVBUUl9QUkVGSVggImkiCisjIGRlZmluZSBQUklpRkFTVDMyCV9fUFJJUFRSX1BSRUZJWCAiaSIKKyMgZGVmaW5lIFBSSWlGQVNUNjQJX19QUkk2NF9QUkVGSVggImkiCisKKy8qIE9jdGFsIG5vdGF0aW9uLiAgKi8KKyMgZGVmaW5lIFBSSW84CQkibyIKKyMgZGVmaW5lIFBSSW8xNgkJIm8iCisjIGRlZmluZSBQUklvMzIJCSJvIgorIyBkZWZpbmUgUFJJbzY0CQlfX1BSSTY0X1BSRUZJWCAibyIKKworIyBkZWZpbmUgUFJJb0xFQVNUOAkibyIKKyMgZGVmaW5lIFBSSW9MRUFTVDE2CSJvIgorIyBkZWZpbmUgUFJJb0xFQVNUMzIJIm8iCisjIGRlZmluZSBQUklvTEVBU1Q2NAlfX1BSSTY0X1BSRUZJWCAibyIKKworIyBkZWZpbmUgUFJJb0ZBU1Q4CSJvIgorIyBkZWZpbmUgUFJJb0ZBU1QxNglfX1BSSVBUUl9QUkVGSVggIm8iCisjIGRlZmluZSBQUklvRkFTVDMyCV9fUFJJUFRSX1BSRUZJWCAibyIKKyMgZGVmaW5lIFBSSW9GQVNUNjQJX19QUkk2NF9QUkVGSVggIm8iCisKKy8qIFVuc2lnbmVkIGludGVnZXJzLiAgKi8KKyMgZGVmaW5lIFBSSXU4CQkidSIKKyMgZGVmaW5lIFBSSXUxNgkJInUiCisjIGRlZmluZSBQUkl1MzIJCSJ1IgorIyBkZWZpbmUgUFJJdTY0CQlfX1BSSTY0X1BSRUZJWCAidSIKKworIyBkZWZpbmUgUFJJdUxFQVNUOAkidSIKKyMgZGVmaW5lIFBSSXVMRUFTVDE2CSJ1IgorIyBkZWZpbmUgUFJJdUxFQVNUMzIJInUiCisjIGRlZmluZSBQUkl1TEVBU1Q2NAlfX1BSSTY0X1BSRUZJWCAidSIKKworIyBkZWZpbmUgUFJJdUZBU1Q4CSJ1IgorIyBkZWZpbmUgUFJJdUZBU1QxNglfX1BSSVBUUl9QUkVGSVggInUiCisjIGRlZmluZSBQUkl1RkFTVDMyCV9fUFJJUFRSX1BSRUZJWCAidSIKKyMgZGVmaW5lIFBSSXVGQVNUNjQJX19QUkk2NF9QUkVGSVggInUiCisKKy8qIGxvd2VyY2FzZSBoZXhhZGVjaW1hbCBub3RhdGlvbi4gICovCisjIGRlZmluZSBQUkl4OAkJIngiCisjIGRlZmluZSBQUkl4MTYJCSJ4IgorIyBkZWZpbmUgUFJJeDMyCQkieCIKKyMgZGVmaW5lIFBSSXg2NAkJX19QUkk2NF9QUkVGSVggIngiCisKKyMgZGVmaW5lIFBSSXhMRUFTVDgJIngiCisjIGRlZmluZSBQUkl4TEVBU1QxNgkieCIKKyMgZGVmaW5lIFBSSXhMRUFTVDMyCSJ4IgorIyBkZWZpbmUgUFJJeExFQVNUNjQJX19QUkk2NF9QUkVGSVggIngiCisKKyMgZGVmaW5lIFBSSXhGQVNUOAkieCIKKyMgZGVmaW5lIFBSSXhGQVNUMTYJX19QUklQVFJfUFJFRklYICJ4IgorIyBkZWZpbmUgUFJJeEZBU1QzMglfX1BSSVBUUl9QUkVGSVggIngiCisjIGRlZmluZSBQUkl4RkFTVDY0CV9fUFJJNjRfUFJFRklYICJ4IgorCisvKiBVUFBFUkNBU0UgaGV4YWRlY2ltYWwgbm90YXRpb24uICAqLworIyBkZWZpbmUgUFJJWDgJCSJYIgorIyBkZWZpbmUgUFJJWDE2CQkiWCIKKyMgZGVmaW5lIFBSSVgzMgkJIlgiCisjIGRlZmluZSBQUklYNjQJCV9fUFJJNjRfUFJFRklYICJYIgorCisjIGRlZmluZSBQUklYTEVBU1Q4CSJYIgorIyBkZWZpbmUgUFJJWExFQVNUMTYJIlgiCisjIGRlZmluZSBQUklYTEVBU1QzMgkiWCIKKyMgZGVmaW5lIFBSSVhMRUFTVDY0CV9fUFJJNjRfUFJFRklYICJYIgorCisjIGRlZmluZSBQUklYRkFTVDgJIlgiCisjIGRlZmluZSBQUklYRkFTVDE2CV9fUFJJUFRSX1BSRUZJWCAiWCIKKyMgZGVmaW5lIFBSSVhGQVNUMzIJX19QUklQVFJfUFJFRklYICJYIgorIyBkZWZpbmUgUFJJWEZBU1Q2NAlfX1BSSTY0X1BSRUZJWCAiWCIKKworCisvKiBNYWNyb3MgZm9yIHByaW50aW5nIGBpbnRtYXhfdCcgYW5kIGB1aW50bWF4X3QnLiAgKi8KKyMgZGVmaW5lIFBSSWRNQVgJX19QUkk2NF9QUkVGSVggImQiCisjIGRlZmluZSBQUklpTUFYCV9fUFJJNjRfUFJFRklYICJpIgorIyBkZWZpbmUgUFJJb01BWAlfX1BSSTY0X1BSRUZJWCAibyIKKyMgZGVmaW5lIFBSSXVNQVgJX19QUkk2NF9QUkVGSVggInUiCisjIGRlZmluZSBQUkl4TUFYCV9fUFJJNjRfUFJFRklYICJ4IgorIyBkZWZpbmUgUFJJWE1BWAlfX1BSSTY0X1BSRUZJWCAiWCIKKworCisvKiBNYWNyb3MgZm9yIHByaW50aW5nIGBpbnRwdHJfdCcgYW5kIGB1aW50cHRyX3QnLiAgKi8KKyMgZGVmaW5lIFBSSWRQVFIJX19QUklQVFJfUFJFRklYICJkIgorIyBkZWZpbmUgUFJJaVBUUglfX1BSSVBUUl9QUkVGSVggImkiCisjIGRlZmluZSBQUklvUFRSCV9fUFJJUFRSX1BSRUZJWCAibyIKKyMgZGVmaW5lIFBSSXVQVFIJX19QUklQVFJfUFJFRklYICJ1IgorIyBkZWZpbmUgUFJJeFBUUglfX1BSSVBUUl9QUkVGSVggIngiCisjIGRlZmluZSBQUklYUFRSCV9fUFJJUFRSX1BSRUZJWCAiWCIKKworCisvKiBNYWNyb3MgZm9yIHNjYW5uaW5nIGZvcm1hdCBzcGVjaWZpZXJzLiAgKi8KKworLyogU2lnbmVkIGRlY2ltYWwgbm90YXRpb24uICAqLworIyBkZWZpbmUgU0NOZDgJCSJoaGQiCisjIGRlZmluZSBTQ05kMTYJCSJoZCIKKyMgZGVmaW5lIFNDTmQzMgkJImQiCisjIGRlZmluZSBTQ05kNjQJCV9fUFJJNjRfUFJFRklYICJkIgorCisjIGRlZmluZSBTQ05kTEVBU1Q4CSJoaGQiCisjIGRlZmluZSBTQ05kTEVBU1QxNgkiaGQiCisjIGRlZmluZSBTQ05kTEVBU1QzMgkiZCIKKyMgZGVmaW5lIFNDTmRMRUFTVDY0CV9fUFJJNjRfUFJFRklYICJkIgorCisjIGRlZmluZSBTQ05kRkFTVDgJImhoZCIKKyMgZGVmaW5lIFNDTmRGQVNUMTYJX19QUklQVFJfUFJFRklYICJkIgorIyBkZWZpbmUgU0NOZEZBU1QzMglfX1BSSVBUUl9QUkVGSVggImQiCisjIGRlZmluZSBTQ05kRkFTVDY0CV9fUFJJNjRfUFJFRklYICJkIgorCisvKiBTaWduZWQgZGVjaW1hbCBub3RhdGlvbi4gICovCisjIGRlZmluZSBTQ05pOAkJImhoaSIKKyMgZGVmaW5lIFNDTmkxNgkJImhpIgorIyBkZWZpbmUgU0NOaTMyCQkiaSIKKyMgZGVmaW5lIFNDTmk2NAkJX19QUkk2NF9QUkVGSVggImkiCisKKyMgZGVmaW5lIFNDTmlMRUFTVDgJImhoaSIKKyMgZGVmaW5lIFNDTmlMRUFTVDE2CSJoaSIKKyMgZGVmaW5lIFNDTmlMRUFTVDMyCSJpIgorIyBkZWZpbmUgU0NOaUxFQVNUNjQJX19QUkk2NF9QUkVGSVggImkiCisKKyMgZGVmaW5lIFNDTmlGQVNUOAkiaGhpIgorIyBkZWZpbmUgU0NOaUZBU1QxNglfX1BSSVBUUl9QUkVGSVggImkiCisjIGRlZmluZSBTQ05pRkFTVDMyCV9fUFJJUFRSX1BSRUZJWCAiaSIKKyMgZGVmaW5lIFNDTmlGQVNUNjQJX19QUkk2NF9QUkVGSVggImkiCisKKy8qIFVuc2lnbmVkIGRlY2ltYWwgbm90YXRpb24uICAqLworIyBkZWZpbmUgU0NOdTgJCSJoaHUiCisjIGRlZmluZSBTQ051MTYJCSJodSIKKyMgZGVmaW5lIFNDTnUzMgkJInUiCisjIGRlZmluZSBTQ051NjQJCV9fUFJJNjRfUFJFRklYICJ1IgorCisjIGRlZmluZSBTQ051TEVBU1Q4CSJoaHUiCisjIGRlZmluZSBTQ051TEVBU1QxNgkiaHUiCisjIGRlZmluZSBTQ051TEVBU1QzMgkidSIKKyMgZGVmaW5lIFNDTnVMRUFTVDY0CV9fUFJJNjRfUFJFRklYICJ1IgorCisjIGRlZmluZSBTQ051RkFTVDgJImhodSIKKyMgZGVmaW5lIFNDTnVGQVNUMTYJX19QUklQVFJfUFJFRklYICJ1IgorIyBkZWZpbmUgU0NOdUZBU1QzMglfX1BSSVBUUl9QUkVGSVggInUiCisjIGRlZmluZSBTQ051RkFTVDY0CV9fUFJJNjRfUFJFRklYICJ1IgorCisvKiBPY3RhbCBub3RhdGlvbi4gICovCisjIGRlZmluZSBTQ05vOAkJImhobyIKKyMgZGVmaW5lIFNDTm8xNgkJImhvIgorIyBkZWZpbmUgU0NObzMyCQkibyIKKyMgZGVmaW5lIFNDTm82NAkJX19QUkk2NF9QUkVGSVggIm8iCisKKyMgZGVmaW5lIFNDTm9MRUFTVDgJImhobyIKKyMgZGVmaW5lIFNDTm9MRUFTVDE2CSJobyIKKyMgZGVmaW5lIFNDTm9MRUFTVDMyCSJvIgorIyBkZWZpbmUgU0NOb0xFQVNUNjQJX19QUkk2NF9QUkVGSVggIm8iCisKKyMgZGVmaW5lIFNDTm9GQVNUOAkiaGhvIgorIyBkZWZpbmUgU0NOb0ZBU1QxNglfX1BSSVBUUl9QUkVGSVggIm8iCisjIGRlZmluZSBTQ05vRkFTVDMyCV9fUFJJUFRSX1BSRUZJWCAibyIKKyMgZGVmaW5lIFNDTm9GQVNUNjQJX19QUkk2NF9QUkVGSVggIm8iCisKKy8qIEhleGFkZWNpbWFsIG5vdGF0aW9uLiAgKi8KKyMgZGVmaW5lIFNDTng4CQkiaGh4IgorIyBkZWZpbmUgU0NOeDE2CQkiaHgiCisjIGRlZmluZSBTQ054MzIJCSJ4IgorIyBkZWZpbmUgU0NOeDY0CQlfX1BSSTY0X1BSRUZJWCAieCIKKworIyBkZWZpbmUgU0NOeExFQVNUOAkiaGh4IgorIyBkZWZpbmUgU0NOeExFQVNUMTYJImh4IgorIyBkZWZpbmUgU0NOeExFQVNUMzIJIngiCisjIGRlZmluZSBTQ054TEVBU1Q2NAlfX1BSSTY0X1BSRUZJWCAieCIKKworIyBkZWZpbmUgU0NOeEZBU1Q4CSJoaHgiCisjIGRlZmluZSBTQ054RkFTVDE2CV9fUFJJUFRSX1BSRUZJWCAieCIKKyMgZGVmaW5lIFNDTnhGQVNUMzIJX19QUklQVFJfUFJFRklYICJ4IgorIyBkZWZpbmUgU0NOeEZBU1Q2NAlfX1BSSTY0X1BSRUZJWCAieCIKKworCisvKiBNYWNyb3MgZm9yIHNjYW5uaW5nIGBpbnRtYXhfdCcgYW5kIGB1aW50bWF4X3QnLiAgKi8KKyMgZGVmaW5lIFNDTmRNQVgJX19QUkk2NF9QUkVGSVggImQiCisjIGRlZmluZSBTQ05pTUFYCV9fUFJJNjRfUFJFRklYICJpIgorIyBkZWZpbmUgU0NOb01BWAlfX1BSSTY0X1BSRUZJWCAibyIKKyMgZGVmaW5lIFNDTnVNQVgJX19QUkk2NF9QUkVGSVggInUiCisjIGRlZmluZSBTQ054TUFYCV9fUFJJNjRfUFJFRklYICJ4IgorCisvKiBNYWNyb3MgZm9yIHNjYW5pbmcgYGludHB0cl90JyBhbmQgYHVpbnRwdHJfdCcuICAqLworIyBkZWZpbmUgU0NOZFBUUglfX1BSSVBUUl9QUkVGSVggImQiCisjIGRlZmluZSBTQ05pUFRSCV9fUFJJUFRSX1BSRUZJWCAiaSIKKyMgZGVmaW5lIFNDTm9QVFIJX19QUklQVFJfUFJFRklYICJvIgorIyBkZWZpbmUgU0NOdVBUUglfX1BSSVBUUl9QUkVGSVggInUiCisjIGRlZmluZSBTQ054UFRSCV9fUFJJUFRSX1BSRUZJWCAieCIKKworI2VuZGlmCS8qIEMrKyAmJiBmb3JtYXQgbWFjcm9zICovCisKKworX19CRUdJTl9ERUNMUworCisjaWYgX19XT1JEU0laRSA9PSA2NAorCisvKiBXZSBoYXZlIHRvIGRlZmluZSB0aGUgYHVpbnRtYXhfdCcgdHlwZSB1c2luZyBgbGRpdl90Jy4gICovCit0eXBlZGVmIHN0cnVjdAorICB7CisgICAgbG9uZyBpbnQgcXVvdDsJCS8qIFF1b3RpZW50LiAgKi8KKyAgICBsb25nIGludCByZW07CQkvKiBSZW1haW5kZXIuICAqLworICB9IGltYXhkaXZfdDsKKworI2Vsc2UKKworLyogV2UgaGF2ZSB0byBkZWZpbmUgdGhlIGB1aW50bWF4X3QnIHR5cGUgdXNpbmcgYGxsZGl2X3QnLiAgKi8KK3R5cGVkZWYgc3RydWN0CisgIHsKKyAgICBsb25nIGxvbmcgaW50IHF1b3Q7CQkvKiBRdW90aWVudC4gICovCisgICAgbG9uZyBsb25nIGludCByZW07CQkvKiBSZW1haW5kZXIuICAqLworICB9IGltYXhkaXZfdDsKKworI2VuZGlmCisKKworLyogQ29tcHV0ZSBhYnNvbHV0ZSB2YWx1ZSBvZiBOLiAgKi8KK2V4dGVybiBpbnRtYXhfdCBpbWF4YWJzIChpbnRtYXhfdCBfX24pIF9fVEhST1cgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOworCisvKiBSZXR1cm4gdGhlIGBpbWF4ZGl2X3QnIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSBvZiBOVU1FUiBvdmVyIERFTk9NLiAqLworZXh0ZXJuIGltYXhkaXZfdCBpbWF4ZGl2IChpbnRtYXhfdCBfX251bWVyLCBpbnRtYXhfdCBfX2Rlbm9tKQorICAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CisKKy8qIExpa2UgYHN0cnRvbCcgYnV0IGNvbnZlcnQgdG8gYGludG1heF90Jy4gICovCitleHRlcm4gaW50bWF4X3Qgc3RydG9pbWF4IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAorCQkJICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIF9fVEhST1c7CisKKy8qIExpa2UgYHN0cnRvdWwnIGJ1dCBjb252ZXJ0IHRvIGB1aW50bWF4X3QnLiAgKi8KK2V4dGVybiB1aW50bWF4X3Qgc3RydG91bWF4IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAorCQkJICAgIGNoYXIgKiogX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgX19USFJPVzsKKworLyogTGlrZSBgd2NzdG9sJyBidXQgY29udmVydCB0byBgaW50bWF4X3QnLiAgKi8KK2V4dGVybiBpbnRtYXhfdCB3Y3N0b2ltYXggKF9fY29uc3QgX19nd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCisJCQkgICBfX2d3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKKyAgICAgX19USFJPVzsKKworLyogTGlrZSBgd2NzdG91bCcgYnV0IGNvbnZlcnQgdG8gYHVpbnRtYXhfdCcuICAqLworZXh0ZXJuIHVpbnRtYXhfdCB3Y3N0b3VtYXggKF9fY29uc3QgX19nd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCisJCQkgICAgX19nd2NoYXJfdCAqKiBfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQorICAgICBfX1RIUk9XOworCisjaWZkZWYgX19VU0VfRVhURVJOX0lOTElORVMKKworIyBpZiBfX1dPUkRTSVpFID09IDY0CisKK2V4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKKwkJCQkgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKKwkJCQkgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKKyAgX19USFJPVyBfX25vbm51bGwgKCgxKSkgX193dXI7CisvKiBMaWtlIGBzdHJ0b2wnIGJ1dCBjb252ZXJ0IHRvIGBpbnRtYXhfdCcuICAqLworX19leHRlcm5faW5saW5lIGludG1heF90CitfX05USCAoc3RydG9pbWF4IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgZW5kcHRyLAorCQkgIGludCBiYXNlKSkKK3sKKyAgcmV0dXJuIF9fc3RydG9sX2ludGVybmFsIChucHRyLCBlbmRwdHIsIGJhc2UsIDApOworfQorCitleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKgorCQkJCQkgICAgIF9fcmVzdHJpY3QgX19ucHRyLAorCQkJCQkgICAgIGNoYXIgKiogX19yZXN0cmljdCBfX2VuZHB0ciwKKwkJCQkJICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKKyAgX19USFJPVyBfX25vbm51bGwgKCgxKSkgX193dXI7CisvKiBMaWtlIGBzdHJ0b3VsJyBidXQgY29udmVydCB0byBgdWludG1heF90Jy4gICovCitfX2V4dGVybl9pbmxpbmUgdWludG1heF90CitfX05USCAoc3RydG91bWF4IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgZW5kcHRyLAorCQkgIGludCBiYXNlKSkKK3sKKyAgcmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAobnB0ciwgZW5kcHRyLCBiYXNlLCAwKTsKK30KKworZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2ludGVybmFsIChfX2NvbnN0IF9fZ3djaGFyX3QgKiBfX3Jlc3RyaWN0IF9fbnB0ciwKKwkJCQkgICBfX2d3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKKwkJCQkgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKKyAgX19USFJPVyBfX25vbm51bGwgKCgxKSkgX193dXI7CisvKiBMaWtlIGB3Y3N0b2wnIGJ1dCBjb252ZXJ0IHRvIGBpbnRtYXhfdCcuICAqLworX19leHRlcm5faW5saW5lIGludG1heF90CitfX05USCAod2NzdG9pbWF4IChfX2NvbnN0IF9fZ3djaGFyX3QgKl9fcmVzdHJpY3QgbnB0ciwKKwkJICBfX2d3Y2hhcl90ICoqX19yZXN0cmljdCBlbmRwdHIsIGludCBiYXNlKSkKK3sKKyAgcmV0dXJuIF9fd2NzdG9sX2ludGVybmFsIChucHRyLCBlbmRwdHIsIGJhc2UsIDApOworfQorCitleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX193Y3N0b3VsX2ludGVybmFsIChfX2NvbnN0IF9fZ3djaGFyX3QgKgorCQkJCQkgICAgIF9fcmVzdHJpY3QgX19ucHRyLAorCQkJCQkgICAgIF9fZ3djaGFyX3QgKioKKwkJCQkJICAgICBfX3Jlc3RyaWN0IF9fZW5kcHRyLAorCQkJCQkgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKQorICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKSBfX3d1cjsKKy8qIExpa2UgYHdjc3RvdWwnIGJ1dCBjb252ZXJ0IHRvIGB1aW50bWF4X3QnLiAgKi8KK19fZXh0ZXJuX2lubGluZSB1aW50bWF4X3QKK19fTlRIICh3Y3N0b3VtYXggKF9fY29uc3QgX19nd2NoYXJfdCAqX19yZXN0cmljdCBucHRyLAorCQkgIF9fZ3djaGFyX3QgKipfX3Jlc3RyaWN0IGVuZHB0ciwgaW50IGJhc2UpKQoreworICByZXR1cm4gX193Y3N0b3VsX2ludGVybmFsIChucHRyLCBlbmRwdHIsIGJhc2UsIDApOworfQorCisjIGVsc2UgLyogX19XT1JEU0laRSA9PSAzMiAqLworCitfX2V4dGVuc2lvbl9fCitleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCisJCQkJCSBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKKwkJCQkJIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKQorICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKSBfX3d1cjsKKy8qIExpa2UgYHN0cnRvbCcgYnV0IGNvbnZlcnQgdG8gYGludG1heF90Jy4gICovCitfX2V4dGVybl9pbmxpbmUgaW50bWF4X3QKK19fTlRIIChzdHJ0b2ltYXggKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBucHRyLCBjaGFyICoqX19yZXN0cmljdCBlbmRwdHIsCisJCSAgaW50IGJhc2UpKQoreworICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChucHRyLCBlbmRwdHIsIGJhc2UsIDApOworfQorCitfX2V4dGVuc2lvbl9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKgorCQkJCQkJICAgX19yZXN0cmljdCBfX25wdHIsCisJCQkJCQkgICBjaGFyICoqCisJCQkJCQkgICBfX3Jlc3RyaWN0IF9fZW5kcHRyLAorCQkJCQkJICAgaW50IF9fYmFzZSwKKwkJCQkJCSAgIGludCBfX2dyb3VwKQorICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKSBfX3d1cjsKKy8qIExpa2UgYHN0cnRvdWwnIGJ1dCBjb252ZXJ0IHRvIGB1aW50bWF4X3QnLiAgKi8KK19fZXh0ZXJuX2lubGluZSB1aW50bWF4X3QKK19fTlRIIChzdHJ0b3VtYXggKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBucHRyLCBjaGFyICoqX19yZXN0cmljdCBlbmRwdHIsCisJCSAgaW50IGJhc2UpKQoreworICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5hbCAobnB0ciwgZW5kcHRyLCBiYXNlLCAwKTsKK30KKworX19leHRlbnNpb25fXworZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX193Y3N0b2xsX2ludGVybmFsIChfX2NvbnN0IF9fZ3djaGFyX3QgKgorCQkJCQkgX19yZXN0cmljdCBfX25wdHIsCisJCQkJCSBfX2d3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKKwkJCQkJIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKQorICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKSBfX3d1cjsKKy8qIExpa2UgYHdjc3RvbCcgYnV0IGNvbnZlcnQgdG8gYGludG1heF90Jy4gICovCitfX2V4dGVybl9pbmxpbmUgaW50bWF4X3QKK19fTlRIICh3Y3N0b2ltYXggKF9fY29uc3QgX19nd2NoYXJfdCAqX19yZXN0cmljdCBucHRyLAorCQkgIF9fZ3djaGFyX3QgKipfX3Jlc3RyaWN0IGVuZHB0ciwgaW50IGJhc2UpKQoreworICByZXR1cm4gX193Y3N0b2xsX2ludGVybmFsIChucHRyLCBlbmRwdHIsIGJhc2UsIDApOworfQorCisKK19fZXh0ZW5zaW9uX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fd2NzdG91bGxfaW50ZXJuYWwgKF9fY29uc3QgX19nd2NoYXJfdCAqCisJCQkJCQkgICBfX3Jlc3RyaWN0IF9fbnB0ciwKKwkJCQkJCSAgIF9fZ3djaGFyX3QgKioKKwkJCQkJCSAgIF9fcmVzdHJpY3QgX19lbmRwdHIsCisJCQkJCQkgICBpbnQgX19iYXNlLAorCQkJCQkJICAgaW50IF9fZ3JvdXApCisgIF9fVEhST1cgX19ub25udWxsICgoMSkpIF9fd3VyOworLyogTGlrZSBgd2NzdG91bCcgYnV0IGNvbnZlcnQgdG8gYHVpbnRtYXhfdCcuICAqLworX19leHRlcm5faW5saW5lIHVpbnRtYXhfdAorX19OVEggKHdjc3RvdW1heCAoX19jb25zdCBfX2d3Y2hhcl90ICpfX3Jlc3RyaWN0IG5wdHIsCisJCSAgX19nd2NoYXJfdCAqKl9fcmVzdHJpY3QgZW5kcHRyLCBpbnQgYmFzZSkpCit7CisgIHJldHVybiBfX3djc3RvdWxsX2ludGVybmFsIChucHRyLCBlbmRwdHIsIGJhc2UsIDApOworfQorCisjIGVuZGlmCS8qIF9fV09SRFNJWkUgPT0gMzIJKi8KKyNlbmRpZgkvKiBVc2UgZXh0ZXJuIGlubGluZXMuICAqLworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogaW50dHlwZXMuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xhbmdpbmZvLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGM0MjMyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgKQEAgLTAsMCArMSw1OTggQEAKKy8qIEFjY2VzcyB0byBsb2NhbGUtZGVwZW5kZW50IHBhcmFtZXRlcnMuCisgICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiwyMDAzLDIwMDQsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfTEFOR0lORk9fSAorI2RlZmluZQlfTEFOR0lORk9fSCAxCisKKy8qIEdldCB0aGUgdHlwZSBkZWZpbml0aW9uLiAgKi8KKyNpbmNsdWRlIDxubF90eXBlcy5oPgorCisjaW5jbHVkZSA8Yml0cy9sb2NhbGUuaD4JLyogRGVmaW5lIHRoZSBfX0xDXyogY2F0ZWdvcnkgbmFtZXMuICAqLworCisKK19fQkVHSU5fREVDTFMKKworLyogQ29uc3RydWN0IGFuIGBubF9pdGVtJyB2YWx1ZSBmb3IgYG5sX2xhbmdpbmZvJyBmcm9tIGEgbG9jYWxlIGNhdGVnb3J5CisgICAoTENfKikgYW5kIGFuIGl0ZW0gaW5kZXggd2l0aGluIHRoZSBjYXRlZ29yeS4gIFNvbWUgY29kZSBtYXkgZGVwZW5kIG9uCisgICB0aGUgaXRlbSB2YWx1ZXMgd2l0aGluIGEgY2F0ZWdvcnkgaW5jcmVhc2luZyBtb25vdG9uaWNhbGx5IHdpdGggdGhlCisgICBpbmRpY2VzLiAgKi8KKyNkZWZpbmUgX05MX0lURU0oY2F0ZWdvcnksIGluZGV4KQkoKChjYXRlZ29yeSkgPDwgMTYpIHwgKGluZGV4KSkKKworLyogRXh0cmFjdCB0aGUgY2F0ZWdvcnkgYW5kIGl0ZW0gaW5kZXggZnJvbSBhIGNvbnN0cnVjdGVkIGBubF9pdGVtJyB2YWx1ZS4gICovCisjZGVmaW5lIF9OTF9JVEVNX0NBVEVHT1JZKGl0ZW0pCQkoKGludCkgKGl0ZW0pID4+IDE2KQorI2RlZmluZSBfTkxfSVRFTV9JTkRFWChpdGVtKQkJKChpbnQpIChpdGVtKSAmIDB4ZmZmZikKKworLyogRW51bWVyYXRpb24gb2YgbG9jYWxlIGl0ZW1zIHRoYXQgY2FuIGJlIHF1ZXJpZWQgd2l0aCBgbmxfbGFuZ2luZm8nLiAgKi8KK2VudW0KK3sKKyAgLyogTENfVElNRSBjYXRlZ29yeTogZGF0ZSBhbmQgdGltZSBmb3JtYXR0aW5nLiAgKi8KKworICAvKiBBYmJyZXZpYXRlZCBkYXlzIG9mIHRoZSB3ZWVrLiAqLworICBBQkRBWV8xID0gX05MX0lURU0gKF9fTENfVElNRSwgMCksIC8qIFN1biAqLworI2RlZmluZSBBQkRBWV8xCQkJQUJEQVlfMQorICBBQkRBWV8yLAorI2RlZmluZSBBQkRBWV8yCQkJQUJEQVlfMgorICBBQkRBWV8zLAorI2RlZmluZSBBQkRBWV8zCQkJQUJEQVlfMworICBBQkRBWV80LAorI2RlZmluZSBBQkRBWV80CQkJQUJEQVlfNAorICBBQkRBWV81LAorI2RlZmluZSBBQkRBWV81CQkJQUJEQVlfNQorICBBQkRBWV82LAorI2RlZmluZSBBQkRBWV82CQkJQUJEQVlfNgorICBBQkRBWV83LAorI2RlZmluZSBBQkRBWV83CQkJQUJEQVlfNworCisgIC8qIExvbmctbmFtZWQgZGF5cyBvZiB0aGUgd2Vlay4gKi8KKyAgREFZXzEsCQkJLyogU3VuZGF5ICovCisjZGVmaW5lIERBWV8xCQkJREFZXzEKKyAgREFZXzIsCQkJLyogTW9uZGF5ICovCisjZGVmaW5lIERBWV8yCQkJREFZXzIKKyAgREFZXzMsCQkJLyogVHVlc2RheSAqLworI2RlZmluZSBEQVlfMwkJCURBWV8zCisgIERBWV80LAkJCS8qIFdlZG5lc2RheSAqLworI2RlZmluZSBEQVlfNAkJCURBWV80CisgIERBWV81LAkJCS8qIFRodXJzZGF5ICovCisjZGVmaW5lIERBWV81CQkJREFZXzUKKyAgREFZXzYsCQkJLyogRnJpZGF5ICovCisjZGVmaW5lIERBWV82CQkJREFZXzYKKyAgREFZXzcsCQkJLyogU2F0dXJkYXkgKi8KKyNkZWZpbmUgREFZXzcJCQlEQVlfNworCisgIC8qIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLiAgKi8KKyAgQUJNT05fMSwJCQkvKiBKYW4gKi8KKyNkZWZpbmUgQUJNT05fMQkJCUFCTU9OXzEKKyAgQUJNT05fMiwKKyNkZWZpbmUgQUJNT05fMgkJCUFCTU9OXzIKKyAgQUJNT05fMywKKyNkZWZpbmUgQUJNT05fMwkJCUFCTU9OXzMKKyAgQUJNT05fNCwKKyNkZWZpbmUgQUJNT05fNAkJCUFCTU9OXzQKKyAgQUJNT05fNSwKKyNkZWZpbmUgQUJNT05fNQkJCUFCTU9OXzUKKyAgQUJNT05fNiwKKyNkZWZpbmUgQUJNT05fNgkJCUFCTU9OXzYKKyAgQUJNT05fNywKKyNkZWZpbmUgQUJNT05fNwkJCUFCTU9OXzcKKyAgQUJNT05fOCwKKyNkZWZpbmUgQUJNT05fOAkJCUFCTU9OXzgKKyAgQUJNT05fOSwKKyNkZWZpbmUgQUJNT05fOQkJCUFCTU9OXzkKKyAgQUJNT05fMTAsCisjZGVmaW5lIEFCTU9OXzEwCQlBQk1PTl8xMAorICBBQk1PTl8xMSwKKyNkZWZpbmUgQUJNT05fMTEJCUFCTU9OXzExCisgIEFCTU9OXzEyLAorI2RlZmluZSBBQk1PTl8xMgkJQUJNT05fMTIKKworICAvKiBMb25nIG1vbnRoIG5hbWVzLiAgKi8KKyAgTU9OXzEsCQkJLyogSmFudWFyeSAqLworI2RlZmluZSBNT05fMQkJCU1PTl8xCisgIE1PTl8yLAorI2RlZmluZSBNT05fMgkJCU1PTl8yCisgIE1PTl8zLAorI2RlZmluZSBNT05fMwkJCU1PTl8zCisgIE1PTl80LAorI2RlZmluZSBNT05fNAkJCU1PTl80CisgIE1PTl81LAorI2RlZmluZSBNT05fNQkJCU1PTl81CisgIE1PTl82LAorI2RlZmluZSBNT05fNgkJCU1PTl82CisgIE1PTl83LAorI2RlZmluZSBNT05fNwkJCU1PTl83CisgIE1PTl84LAorI2RlZmluZSBNT05fOAkJCU1PTl84CisgIE1PTl85LAorI2RlZmluZSBNT05fOQkJCU1PTl85CisgIE1PTl8xMCwKKyNkZWZpbmUgTU9OXzEwCQkJTU9OXzEwCisgIE1PTl8xMSwKKyNkZWZpbmUgTU9OXzExCQkJTU9OXzExCisgIE1PTl8xMiwKKyNkZWZpbmUgTU9OXzEyCQkJTU9OXzEyCisKKyAgQU1fU1RSLAkJCS8qIEFudGUgbWVyaWRpZW0gc3RyaW5nLiAgKi8KKyNkZWZpbmUgQU1fU1RSCQkJQU1fU1RSCisgIFBNX1NUUiwJCQkvKiBQb3N0IG1lcmlkaWVtIHN0cmluZy4gICovCisjZGVmaW5lIFBNX1NUUgkJCVBNX1NUUgorCisgIERfVF9GTVQsCQkJLyogRGF0ZSBhbmQgdGltZSBmb3JtYXQgZm9yIHN0cmZ0aW1lLiAgKi8KKyNkZWZpbmUgRF9UX0ZNVAkJCURfVF9GTVQKKyAgRF9GTVQsCQkJLyogRGF0ZSBmb3JtYXQgZm9yIHN0cmZ0aW1lLiAgKi8KKyNkZWZpbmUgRF9GTVQJCQlEX0ZNVAorICBUX0ZNVCwJCQkvKiBUaW1lIGZvcm1hdCBmb3Igc3RyZnRpbWUuICAqLworI2RlZmluZSBUX0ZNVAkJCVRfRk1UCisgIFRfRk1UX0FNUE0sCQkJLyogMTItaG91ciB0aW1lIGZvcm1hdCBmb3Igc3RyZnRpbWUuICAqLworI2RlZmluZSBUX0ZNVF9BTVBNCQlUX0ZNVF9BTVBNCisKKyAgRVJBLAkJCQkvKiBBbHRlcm5hdGUgZXJhLiAgKi8KKyNkZWZpbmUgRVJBCQkJRVJBCisgIF9fRVJBX1lFQVIsCQkJLyogWWVhciBpbiBhbHRlcm5hdGUgZXJhIGZvcm1hdC4gICovCisjaWZkZWYgX19VU0VfR05VCisjIGRlZmluZSBFUkFfWUVBUgkJX19FUkFfWUVBUgorI2VuZGlmCisgIEVSQV9EX0ZNVCwJCQkvKiBEYXRlIGluIGFsdGVybmF0ZSBlcmEgZm9ybWF0LiAgKi8KKyNkZWZpbmUgRVJBX0RfRk1UCQlFUkFfRF9GTVQKKyAgQUxUX0RJR0lUUywJCQkvKiBBbHRlcm5hdGUgc3ltYm9scyBmb3IgZGlnaXRzLiAgKi8KKyNkZWZpbmUgQUxUX0RJR0lUUwkJQUxUX0RJR0lUUworICBFUkFfRF9UX0ZNVCwJCQkvKiBEYXRlIGFuZCB0aW1lIGluIGFsdGVybmF0ZSBlcmEgZm9ybWF0LiAgKi8KKyNkZWZpbmUgRVJBX0RfVF9GTVQJCUVSQV9EX1RfRk1UCisgIEVSQV9UX0ZNVCwJCQkvKiBUaW1lIGluIGFsdGVybmF0ZSBlcmEgZm9ybWF0LiAgKi8KKyNkZWZpbmUgRVJBX1RfRk1UCQlFUkFfVF9GTVQKKworICBfTkxfVElNRV9FUkFfTlVNX0VOVFJJRVMsCS8qIE51bWJlciBlbnRyaWVzIGluIHRoZSBlcmEgYXJyYXlzLiAgKi8KKyAgX05MX1RJTUVfRVJBX0VOVFJJRVMsCQkvKiBTdHJ1Y3R1cmUgd2l0aCBlcmEgZW50cmllcyBpbiB1c2FibGUgZm9ybS4qLworCisgIF9OTF9XQUJEQVlfMSwJCS8qIFN1biAqLworICBfTkxfV0FCREFZXzIsCisgIF9OTF9XQUJEQVlfMywKKyAgX05MX1dBQkRBWV80LAorICBfTkxfV0FCREFZXzUsCisgIF9OTF9XQUJEQVlfNiwKKyAgX05MX1dBQkRBWV83LAorCisgIC8qIExvbmctbmFtZWQgZGF5cyBvZiB0aGUgd2Vlay4gKi8KKyAgX05MX1dEQVlfMSwJCS8qIFN1bmRheSAqLworICBfTkxfV0RBWV8yLAkJLyogTW9uZGF5ICovCisgIF9OTF9XREFZXzMsCQkvKiBUdWVzZGF5ICovCisgIF9OTF9XREFZXzQsCQkvKiBXZWRuZXNkYXkgKi8KKyAgX05MX1dEQVlfNSwJCS8qIFRodXJzZGF5ICovCisgIF9OTF9XREFZXzYsCQkvKiBGcmlkYXkgKi8KKyAgX05MX1dEQVlfNywJCS8qIFNhdHVyZGF5ICovCisKKyAgLyogQWJicmV2aWF0ZWQgbW9udGggbmFtZXMuICAqLworICBfTkxfV0FCTU9OXzEsCQkvKiBKYW4gKi8KKyAgX05MX1dBQk1PTl8yLAorICBfTkxfV0FCTU9OXzMsCisgIF9OTF9XQUJNT05fNCwKKyAgX05MX1dBQk1PTl81LAorICBfTkxfV0FCTU9OXzYsCisgIF9OTF9XQUJNT05fNywKKyAgX05MX1dBQk1PTl84LAorICBfTkxfV0FCTU9OXzksCisgIF9OTF9XQUJNT05fMTAsCisgIF9OTF9XQUJNT05fMTEsCisgIF9OTF9XQUJNT05fMTIsCisKKyAgLyogTG9uZyBtb250aCBuYW1lcy4gICovCisgIF9OTF9XTU9OXzEsCQkvKiBKYW51YXJ5ICovCisgIF9OTF9XTU9OXzIsCisgIF9OTF9XTU9OXzMsCisgIF9OTF9XTU9OXzQsCisgIF9OTF9XTU9OXzUsCisgIF9OTF9XTU9OXzYsCisgIF9OTF9XTU9OXzcsCisgIF9OTF9XTU9OXzgsCisgIF9OTF9XTU9OXzksCisgIF9OTF9XTU9OXzEwLAorICBfTkxfV01PTl8xMSwKKyAgX05MX1dNT05fMTIsCisKKyAgX05MX1dBTV9TVFIsCQkvKiBBbnRlIG1lcmlkaWVtIHN0cmluZy4gICovCisgIF9OTF9XUE1fU1RSLAkJLyogUG9zdCBtZXJpZGllbSBzdHJpbmcuICAqLworCisgIF9OTF9XRF9UX0ZNVCwJCS8qIERhdGUgYW5kIHRpbWUgZm9ybWF0IGZvciBzdHJmdGltZS4gICovCisgIF9OTF9XRF9GTVQsCQkvKiBEYXRlIGZvcm1hdCBmb3Igc3RyZnRpbWUuICAqLworICBfTkxfV1RfRk1ULAkJLyogVGltZSBmb3JtYXQgZm9yIHN0cmZ0aW1lLiAgKi8KKyAgX05MX1dUX0ZNVF9BTVBNLAkvKiAxMi1ob3VyIHRpbWUgZm9ybWF0IGZvciBzdHJmdGltZS4gICovCisKKyAgX05MX1dFUkFfWUVBUiwJLyogWWVhciBpbiBhbHRlcm5hdGUgZXJhIGZvcm1hdC4gICovCisgIF9OTF9XRVJBX0RfRk1ULAkvKiBEYXRlIGluIGFsdGVybmF0ZSBlcmEgZm9ybWF0LiAgKi8KKyAgX05MX1dBTFRfRElHSVRTLAkvKiBBbHRlcm5hdGUgc3ltYm9scyBmb3IgZGlnaXRzLiAgKi8KKyAgX05MX1dFUkFfRF9UX0ZNVCwJLyogRGF0ZSBhbmQgdGltZSBpbiBhbHRlcm5hdGUgZXJhIGZvcm1hdC4gICovCisgIF9OTF9XRVJBX1RfRk1ULAkvKiBUaW1lIGluIGFsdGVybmF0ZSBlcmEgZm9ybWF0LiAgKi8KKworICBfTkxfVElNRV9XRUVLX05EQVlTLAorICBfTkxfVElNRV9XRUVLXzFTVERBWSwKKyAgX05MX1RJTUVfV0VFS18xU1RXRUVLLAorICBfTkxfVElNRV9GSVJTVF9XRUVLREFZLAorICBfTkxfVElNRV9GSVJTVF9XT1JLREFZLAorICBfTkxfVElNRV9DQUxfRElSRUNUSU9OLAorICBfTkxfVElNRV9USU1FWk9ORSwKKworICBfREFURV9GTVQsCQkvKiBzdHJmdGltZSBmb3JtYXQgZm9yIGRhdGUuICAqLworI2RlZmluZSBfREFURV9GTVQJX0RBVEVfRk1UCisgIF9OTF9XX0RBVEVfRk1ULAorCisgIF9OTF9USU1FX0NPREVTRVQsCisKKyAgX05MX05VTV9MQ19USU1FLAkvKiBOdW1iZXIgb2YgaW5kaWNlcyBpbiBMQ19USU1FIGNhdGVnb3J5LiAgKi8KKworICAvKiBMQ19DT0xMQVRFIGNhdGVnb3J5OiB0ZXh0IHNvcnRpbmcuCisgICAgIFRoaXMgaW5mb3JtYXRpb24gaXMgYWNjZXNzZWQgYnkgdGhlIHN0cmNvbGwgYW5kIHN0cnhmcm0gZnVuY3Rpb25zLgorICAgICBUaGVzZSBgbmxfbGFuZ2luZm8nIG5hbWVzIGFyZSB1c2VkIG9ubHkgaW50ZXJuYWxseS4gICovCisgIF9OTF9DT0xMQVRFX05SVUxFUyA9IF9OTF9JVEVNIChfX0xDX0NPTExBVEUsIDApLAorICBfTkxfQ09MTEFURV9SVUxFU0VUUywKKyAgX05MX0NPTExBVEVfVEFCTEVNQiwKKyAgX05MX0NPTExBVEVfV0VJR0hUTUIsCisgIF9OTF9DT0xMQVRFX0VYVFJBTUIsCisgIF9OTF9DT0xMQVRFX0lORElSRUNUTUIsCisgIF9OTF9DT0xMQVRFX0dBUDEsCisgIF9OTF9DT0xMQVRFX0dBUDIsCisgIF9OTF9DT0xMQVRFX0dBUDMsCisgIF9OTF9DT0xMQVRFX1RBQkxFV0MsCisgIF9OTF9DT0xMQVRFX1dFSUdIVFdDLAorICBfTkxfQ09MTEFURV9FWFRSQVdDLAorICBfTkxfQ09MTEFURV9JTkRJUkVDVFdDLAorICBfTkxfQ09MTEFURV9TWU1CX0hBU0hfU0laRU1CLAorICBfTkxfQ09MTEFURV9TWU1CX1RBQkxFTUIsCisgIF9OTF9DT0xMQVRFX1NZTUJfRVhUUkFNQiwKKyAgX05MX0NPTExBVEVfQ09MTFNFUU1CLAorICBfTkxfQ09MTEFURV9DT0xMU0VRV0MsCisgIF9OTF9DT0xMQVRFX0NPREVTRVQsCisgIF9OTF9OVU1fTENfQ09MTEFURSwKKworICAvKiBMQ19DVFlQRSBjYXRlZ29yeTogY2hhcmFjdGVyIGNsYXNzaWZpY2F0aW9uLgorICAgICBUaGlzIGluZm9ybWF0aW9uIGlzIGFjY2Vzc2VkIGJ5IHRoZSBmdW5jdGlvbnMgaW4gPGN0eXBlLmg+LgorICAgICBUaGVzZSBgbmxfbGFuZ2luZm8nIG5hbWVzIGFyZSB1c2VkIG9ubHkgaW50ZXJuYWxseS4gICovCisgIF9OTF9DVFlQRV9DTEFTUyA9IF9OTF9JVEVNIChfX0xDX0NUWVBFLCAwKSwKKyAgX05MX0NUWVBFX1RPVVBQRVIsCisgIF9OTF9DVFlQRV9HQVAxLAorICBfTkxfQ1RZUEVfVE9MT1dFUiwKKyAgX05MX0NUWVBFX0dBUDIsCisgIF9OTF9DVFlQRV9DTEFTUzMyLAorICBfTkxfQ1RZUEVfR0FQMywKKyAgX05MX0NUWVBFX0dBUDQsCisgIF9OTF9DVFlQRV9HQVA1LAorICBfTkxfQ1RZUEVfR0FQNiwKKyAgX05MX0NUWVBFX0NMQVNTX05BTUVTLAorICBfTkxfQ1RZUEVfTUFQX05BTUVTLAorICBfTkxfQ1RZUEVfV0lEVEgsCisgIF9OTF9DVFlQRV9NQl9DVVJfTUFYLAorICBfTkxfQ1RZUEVfQ09ERVNFVF9OQU1FLAorICBDT0RFU0VUID0gX05MX0NUWVBFX0NPREVTRVRfTkFNRSwKKyNkZWZpbmUgQ09ERVNFVAkJCUNPREVTRVQKKyAgX05MX0NUWVBFX1RPVVBQRVIzMiwKKyAgX05MX0NUWVBFX1RPTE9XRVIzMiwKKyAgX05MX0NUWVBFX0NMQVNTX09GRlNFVCwKKyAgX05MX0NUWVBFX01BUF9PRkZTRVQsCisgIF9OTF9DVFlQRV9JTkRJR0lUU19NQl9MRU4sCisgIF9OTF9DVFlQRV9JTkRJR0lUUzBfTUIsCisgIF9OTF9DVFlQRV9JTkRJR0lUUzFfTUIsCisgIF9OTF9DVFlQRV9JTkRJR0lUUzJfTUIsCisgIF9OTF9DVFlQRV9JTkRJR0lUUzNfTUIsCisgIF9OTF9DVFlQRV9JTkRJR0lUUzRfTUIsCisgIF9OTF9DVFlQRV9JTkRJR0lUUzVfTUIsCisgIF9OTF9DVFlQRV9JTkRJR0lUUzZfTUIsCisgIF9OTF9DVFlQRV9JTkRJR0lUUzdfTUIsCisgIF9OTF9DVFlQRV9JTkRJR0lUUzhfTUIsCisgIF9OTF9DVFlQRV9JTkRJR0lUUzlfTUIsCisgIF9OTF9DVFlQRV9JTkRJR0lUU19XQ19MRU4sCisgIF9OTF9DVFlQRV9JTkRJR0lUUzBfV0MsCisgIF9OTF9DVFlQRV9JTkRJR0lUUzFfV0MsCisgIF9OTF9DVFlQRV9JTkRJR0lUUzJfV0MsCisgIF9OTF9DVFlQRV9JTkRJR0lUUzNfV0MsCisgIF9OTF9DVFlQRV9JTkRJR0lUUzRfV0MsCisgIF9OTF9DVFlQRV9JTkRJR0lUUzVfV0MsCisgIF9OTF9DVFlQRV9JTkRJR0lUUzZfV0MsCisgIF9OTF9DVFlQRV9JTkRJR0lUUzdfV0MsCisgIF9OTF9DVFlQRV9JTkRJR0lUUzhfV0MsCisgIF9OTF9DVFlQRV9JTkRJR0lUUzlfV0MsCisgIF9OTF9DVFlQRV9PVVRESUdJVDBfTUIsCisgIF9OTF9DVFlQRV9PVVRESUdJVDFfTUIsCisgIF9OTF9DVFlQRV9PVVRESUdJVDJfTUIsCisgIF9OTF9DVFlQRV9PVVRESUdJVDNfTUIsCisgIF9OTF9DVFlQRV9PVVRESUdJVDRfTUIsCisgIF9OTF9DVFlQRV9PVVRESUdJVDVfTUIsCisgIF9OTF9DVFlQRV9PVVRESUdJVDZfTUIsCisgIF9OTF9DVFlQRV9PVVRESUdJVDdfTUIsCisgIF9OTF9DVFlQRV9PVVRESUdJVDhfTUIsCisgIF9OTF9DVFlQRV9PVVRESUdJVDlfTUIsCisgIF9OTF9DVFlQRV9PVVRESUdJVDBfV0MsCisgIF9OTF9DVFlQRV9PVVRESUdJVDFfV0MsCisgIF9OTF9DVFlQRV9PVVRESUdJVDJfV0MsCisgIF9OTF9DVFlQRV9PVVRESUdJVDNfV0MsCisgIF9OTF9DVFlQRV9PVVRESUdJVDRfV0MsCisgIF9OTF9DVFlQRV9PVVRESUdJVDVfV0MsCisgIF9OTF9DVFlQRV9PVVRESUdJVDZfV0MsCisgIF9OTF9DVFlQRV9PVVRESUdJVDdfV0MsCisgIF9OTF9DVFlQRV9PVVRESUdJVDhfV0MsCisgIF9OTF9DVFlQRV9PVVRESUdJVDlfV0MsCisgIF9OTF9DVFlQRV9UUkFOU0xJVF9UQUJfU0laRSwKKyAgX05MX0NUWVBFX1RSQU5TTElUX0ZST01fSURYLAorICBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJPTV9UQkwsCisgIF9OTF9DVFlQRV9UUkFOU0xJVF9UT19JRFgsCisgIF9OTF9DVFlQRV9UUkFOU0xJVF9UT19UQkwsCisgIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkdfTEVOLAorICBfTkxfQ1RZUEVfVFJBTlNMSVRfREVGQVVMVF9NSVNTSU5HLAorICBfTkxfQ1RZUEVfVFJBTlNMSVRfSUdOT1JFX0xFTiwKKyAgX05MX0NUWVBFX1RSQU5TTElUX0lHTk9SRSwKKyAgX05MX0NUWVBFX01BUF9UT19OT05BU0NJSSwKKyAgX05MX0NUWVBFX0VYVFJBX01BUF8xLAorICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzIsCisgIF9OTF9DVFlQRV9FWFRSQV9NQVBfMywKKyAgX05MX0NUWVBFX0VYVFJBX01BUF80LAorICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzUsCisgIF9OTF9DVFlQRV9FWFRSQV9NQVBfNiwKKyAgX05MX0NUWVBFX0VYVFJBX01BUF83LAorICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzgsCisgIF9OTF9DVFlQRV9FWFRSQV9NQVBfOSwKKyAgX05MX0NUWVBFX0VYVFJBX01BUF8xMCwKKyAgX05MX0NUWVBFX0VYVFJBX01BUF8xMSwKKyAgX05MX0NUWVBFX0VYVFJBX01BUF8xMiwKKyAgX05MX0NUWVBFX0VYVFJBX01BUF8xMywKKyAgX05MX0NUWVBFX0VYVFJBX01BUF8xNCwKKyAgX05MX05VTV9MQ19DVFlQRSwKKworICAvKiBMQ19NT05FVEFSWSBjYXRlZ29yeTogZm9ybWF0dGluZyBvZiBtb25ldGFyeSBxdWFudGl0aWVzLgorICAgICBUaGVzZSBpdGVtcyBlYWNoIGNvcnJlc3BvbmQgdG8gYSBtZW1iZXIgb2YgYHN0cnVjdCBsY29udicsCisgICAgIGRlZmluZWQgaW4gPGxvY2FsZS5oPi4gICovCisgIF9fSU5UX0NVUlJfU1lNQk9MID0gX05MX0lURU0gKF9fTENfTU9ORVRBUlksIDApLAorI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgSU5UX0NVUlJfU1lNQk9MCV9fSU5UX0NVUlJfU1lNQk9MCisjZW5kaWYKKyAgX19DVVJSRU5DWV9TWU1CT0wsCisjaWZkZWYgX19VU0VfR05VCisjIGRlZmluZSBDVVJSRU5DWV9TWU1CT0wJX19DVVJSRU5DWV9TWU1CT0wKKyNlbmRpZgorICBfX01PTl9ERUNJTUFMX1BPSU5ULAorI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgTU9OX0RFQ0lNQUxfUE9JTlQJX19NT05fREVDSU1BTF9QT0lOVAorI2VuZGlmCisgIF9fTU9OX1RIT1VTQU5EU19TRVAsCisjaWZkZWYgX19VU0VfR05VCisjIGRlZmluZSBNT05fVEhPVVNBTkRTX1NFUAlfX01PTl9USE9VU0FORFNfU0VQCisjZW5kaWYKKyAgX19NT05fR1JPVVBJTkcsCisjaWZkZWYgX19VU0VfR05VCisjIGRlZmluZSBNT05fR1JPVVBJTkcJCV9fTU9OX0dST1VQSU5HCisjZW5kaWYKKyAgX19QT1NJVElWRV9TSUdOLAorI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgUE9TSVRJVkVfU0lHTgkJX19QT1NJVElWRV9TSUdOCisjZW5kaWYKKyAgX19ORUdBVElWRV9TSUdOLAorI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgTkVHQVRJVkVfU0lHTgkJX19ORUdBVElWRV9TSUdOCisjZW5kaWYKKyAgX19JTlRfRlJBQ19ESUdJVFMsCisjaWZkZWYgX19VU0VfR05VCisjIGRlZmluZSBJTlRfRlJBQ19ESUdJVFMJX19JTlRfRlJBQ19ESUdJVFMKKyNlbmRpZgorICBfX0ZSQUNfRElHSVRTLAorI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgRlJBQ19ESUdJVFMJCV9fRlJBQ19ESUdJVFMKKyNlbmRpZgorICBfX1BfQ1NfUFJFQ0VERVMsCisjaWZkZWYgX19VU0VfR05VCisjIGRlZmluZSBQX0NTX1BSRUNFREVTCQlfX1BfQ1NfUFJFQ0VERVMKKyNlbmRpZgorICBfX1BfU0VQX0JZX1NQQUNFLAorI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgUF9TRVBfQllfU1BBQ0UJCV9fUF9TRVBfQllfU1BBQ0UKKyNlbmRpZgorICBfX05fQ1NfUFJFQ0VERVMsCisjaWZkZWYgX19VU0VfR05VCisjIGRlZmluZSBOX0NTX1BSRUNFREVTCQlfX05fQ1NfUFJFQ0VERVMKKyNlbmRpZgorICBfX05fU0VQX0JZX1NQQUNFLAorI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgTl9TRVBfQllfU1BBQ0UJCV9fTl9TRVBfQllfU1BBQ0UKKyNlbmRpZgorICBfX1BfU0lHTl9QT1NOLAorI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgUF9TSUdOX1BPU04JCV9fUF9TSUdOX1BPU04KKyNlbmRpZgorICBfX05fU0lHTl9QT1NOLAorI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgTl9TSUdOX1BPU04JCV9fTl9TSUdOX1BPU04KKyNlbmRpZgorICBfTkxfTU9ORVRBUllfQ1JOQ1lTVFIsCisjZGVmaW5lIENSTkNZU1RSCQlfTkxfTU9ORVRBUllfQ1JOQ1lTVFIKKyAgX19JTlRfUF9DU19QUkVDRURFUywKKyNpZmRlZiBfX1VTRV9HTlUKKyMgZGVmaW5lIElOVF9QX0NTX1BSRUNFREVTCV9fSU5UX1BfQ1NfUFJFQ0VERVMKKyNlbmRpZgorICBfX0lOVF9QX1NFUF9CWV9TUEFDRSwKKyNpZmRlZiBfX1VTRV9HTlUKKyMgZGVmaW5lIElOVF9QX1NFUF9CWV9TUEFDRQlfX0lOVF9QX1NFUF9CWV9TUEFDRQorI2VuZGlmCisgIF9fSU5UX05fQ1NfUFJFQ0VERVMsCisjaWZkZWYgX19VU0VfR05VCisjIGRlZmluZSBJTlRfTl9DU19QUkVDRURFUwlfX0lOVF9OX0NTX1BSRUNFREVTCisjZW5kaWYKKyAgX19JTlRfTl9TRVBfQllfU1BBQ0UsCisjaWZkZWYgX19VU0VfR05VCisjIGRlZmluZSBJTlRfTl9TRVBfQllfU1BBQ0UJX19JTlRfTl9TRVBfQllfU1BBQ0UKKyNlbmRpZgorICBfX0lOVF9QX1NJR05fUE9TTiwKKyNpZmRlZiBfX1VTRV9HTlUKKyMgZGVmaW5lIElOVF9QX1NJR05fUE9TTglfX0lOVF9QX1NJR05fUE9TTgorI2VuZGlmCisgIF9fSU5UX05fU0lHTl9QT1NOLAorI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgSU5UX05fU0lHTl9QT1NOCV9fSU5UX05fU0lHTl9QT1NOCisjZW5kaWYKKyAgX05MX01PTkVUQVJZX0RVT19JTlRfQ1VSUl9TWU1CT0wsCisgIF9OTF9NT05FVEFSWV9EVU9fQ1VSUkVOQ1lfU1lNQk9MLAorICBfTkxfTU9ORVRBUllfRFVPX0lOVF9GUkFDX0RJR0lUUywKKyAgX05MX01PTkVUQVJZX0RVT19GUkFDX0RJR0lUUywKKyAgX05MX01PTkVUQVJZX0RVT19QX0NTX1BSRUNFREVTLAorICBfTkxfTU9ORVRBUllfRFVPX1BfU0VQX0JZX1NQQUNFLAorICBfTkxfTU9ORVRBUllfRFVPX05fQ1NfUFJFQ0VERVMsCisgIF9OTF9NT05FVEFSWV9EVU9fTl9TRVBfQllfU1BBQ0UsCisgIF9OTF9NT05FVEFSWV9EVU9fSU5UX1BfQ1NfUFJFQ0VERVMsCisgIF9OTF9NT05FVEFSWV9EVU9fSU5UX1BfU0VQX0JZX1NQQUNFLAorICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX0NTX1BSRUNFREVTLAorICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX1NFUF9CWV9TUEFDRSwKKyAgX05MX01PTkVUQVJZX0RVT19QX1NJR05fUE9TTiwKKyAgX05MX01PTkVUQVJZX0RVT19OX1NJR05fUE9TTiwKKyAgX05MX01PTkVUQVJZX0RVT19JTlRfUF9TSUdOX1BPU04sCisgIF9OTF9NT05FVEFSWV9EVU9fSU5UX05fU0lHTl9QT1NOLAorICBfTkxfTU9ORVRBUllfVU5PX1ZBTElEX0ZST00sCisgIF9OTF9NT05FVEFSWV9VTk9fVkFMSURfVE8sCisgIF9OTF9NT05FVEFSWV9EVU9fVkFMSURfRlJPTSwKKyAgX05MX01PTkVUQVJZX0RVT19WQUxJRF9UTywKKyAgX05MX01PTkVUQVJZX0NPTlZFUlNJT05fUkFURSwKKyAgX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsCisgIF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLAorICBfTkxfTU9ORVRBUllfQ09ERVNFVCwKKyAgX05MX05VTV9MQ19NT05FVEFSWSwKKworICAvKiBMQ19OVU1FUklDIGNhdGVnb3J5OiBmb3JtYXR0aW5nIG9mIG51bWJlcnMuCisgICAgIFRoZXNlIGFsc28gY29ycmVzcG9uZCB0byBtZW1iZXJzIG9mIGBzdHJ1Y3QgbGNvbnYnOyBzZWUgPGxvY2FsZS5oPi4gICovCisgIF9fREVDSU1BTF9QT0lOVCA9IF9OTF9JVEVNIChfX0xDX05VTUVSSUMsIDApLAorI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgREVDSU1BTF9QT0lOVAkJX19ERUNJTUFMX1BPSU5UCisjZW5kaWYKKyAgUkFESVhDSEFSID0gX19ERUNJTUFMX1BPSU5ULAorI2RlZmluZSBSQURJWENIQVIJCVJBRElYQ0hBUgorICBfX1RIT1VTQU5EU19TRVAsCisjaWZkZWYgX19VU0VfR05VCisjIGRlZmluZSBUSE9VU0FORFNfU0VQCQlfX1RIT1VTQU5EU19TRVAKKyNlbmRpZgorICBUSE9VU0VQID0gX19USE9VU0FORFNfU0VQLAorI2RlZmluZSBUSE9VU0VQCQkJVEhPVVNFUAorICBfX0dST1VQSU5HLAorI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgR1JPVVBJTkcJCV9fR1JPVVBJTkcKKyNlbmRpZgorICBfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLAorICBfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLAorICBfTkxfTlVNRVJJQ19DT0RFU0VULAorICBfTkxfTlVNX0xDX05VTUVSSUMsCisKKyAgX19ZRVNFWFBSID0gX05MX0lURU0gKF9fTENfTUVTU0FHRVMsIDApLCAvKiBSZWdleCBtYXRjaGluZyBgYHllcycnIGlucHV0LiAgKi8KKyNkZWZpbmUgWUVTRVhQUgkJCV9fWUVTRVhQUgorICBfX05PRVhQUiwJCQkvKiBSZWdleCBtYXRjaGluZyBgYG5vJycgaW5wdXQuICAqLworI2RlZmluZSBOT0VYUFIJCQlfX05PRVhQUgorICBfX1lFU1NUUiwJCQkvKiBPdXRwdXQgc3RyaW5nIGZvciBgYHllcycnLiAgKi8KKyNpZiBkZWZpbmVkIF9fVVNFX0dOVSB8fCAoZGVmaW5lZCBfX1VTRV9YT1BFTiAmJiAhZGVmaW5lZCBfX1VTRV9YT1BFTjJLKQorIyBkZWZpbmUgWUVTU1RSCQkJX19ZRVNTVFIKKyNlbmRpZgorICBfX05PU1RSLAkJCS8qIE91dHB1dCBzdHJpbmcgZm9yIGBgbm8nJy4gICovCisjaWYgZGVmaW5lZCBfX1VTRV9HTlUgfHwgKGRlZmluZWQgX19VU0VfWE9QRU4gJiYgIWRlZmluZWQgX19VU0VfWE9QRU4ySykKKyMgZGVmaW5lIE5PU1RSCQkJX19OT1NUUgorI2VuZGlmCisgIF9OTF9NRVNTQUdFU19DT0RFU0VULAorICBfTkxfTlVNX0xDX01FU1NBR0VTLAorCisgIF9OTF9QQVBFUl9IRUlHSFQgPSBfTkxfSVRFTSAoX19MQ19QQVBFUiwgMCksCisgIF9OTF9QQVBFUl9XSURUSCwKKyAgX05MX1BBUEVSX0NPREVTRVQsCisgIF9OTF9OVU1fTENfUEFQRVIsCisKKyAgX05MX05BTUVfTkFNRV9GTVQgPSBfTkxfSVRFTSAoX19MQ19OQU1FLCAwKSwKKyAgX05MX05BTUVfTkFNRV9HRU4sCisgIF9OTF9OQU1FX05BTUVfTVIsCisgIF9OTF9OQU1FX05BTUVfTVJTLAorICBfTkxfTkFNRV9OQU1FX01JU1MsCisgIF9OTF9OQU1FX05BTUVfTVMsCisgIF9OTF9OQU1FX0NPREVTRVQsCisgIF9OTF9OVU1fTENfTkFNRSwKKworICBfTkxfQUREUkVTU19QT1NUQUxfRk1UID0gX05MX0lURU0gKF9fTENfQUREUkVTUywgMCksCisgIF9OTF9BRERSRVNTX0NPVU5UUllfTkFNRSwKKyAgX05MX0FERFJFU1NfQ09VTlRSWV9QT1NULAorICBfTkxfQUREUkVTU19DT1VOVFJZX0FCMiwKKyAgX05MX0FERFJFU1NfQ09VTlRSWV9BQjMsCisgIF9OTF9BRERSRVNTX0NPVU5UUllfQ0FSLAorICBfTkxfQUREUkVTU19DT1VOVFJZX05VTSwKKyAgX05MX0FERFJFU1NfQ09VTlRSWV9JU0JOLAorICBfTkxfQUREUkVTU19MQU5HX05BTUUsCisgIF9OTF9BRERSRVNTX0xBTkdfQUIsCisgIF9OTF9BRERSRVNTX0xBTkdfVEVSTSwKKyAgX05MX0FERFJFU1NfTEFOR19MSUIsCisgIF9OTF9BRERSRVNTX0NPREVTRVQsCisgIF9OTF9OVU1fTENfQUREUkVTUywKKworICBfTkxfVEVMRVBIT05FX1RFTF9JTlRfRk1UID0gX05MX0lURU0gKF9fTENfVEVMRVBIT05FLCAwKSwKKyAgX05MX1RFTEVQSE9ORV9URUxfRE9NX0ZNVCwKKyAgX05MX1RFTEVQSE9ORV9JTlRfU0VMRUNULAorICBfTkxfVEVMRVBIT05FX0lOVF9QUkVGSVgsCisgIF9OTF9URUxFUEhPTkVfQ09ERVNFVCwKKyAgX05MX05VTV9MQ19URUxFUEhPTkUsCisKKyAgX05MX01FQVNVUkVNRU5UX01FQVNVUkVNRU5UID0gX05MX0lURU0gKF9fTENfTUVBU1VSRU1FTlQsIDApLAorICBfTkxfTUVBU1VSRU1FTlRfQ09ERVNFVCwKKyAgX05MX05VTV9MQ19NRUFTVVJFTUVOVCwKKworICBfTkxfSURFTlRJRklDQVRJT05fVElUTEUgPSBfTkxfSVRFTSAoX19MQ19JREVOVElGSUNBVElPTiwgMCksCisgIF9OTF9JREVOVElGSUNBVElPTl9TT1VSQ0UsCisgIF9OTF9JREVOVElGSUNBVElPTl9BRERSRVNTLAorICBfTkxfSURFTlRJRklDQVRJT05fQ09OVEFDVCwKKyAgX05MX0lERU5USUZJQ0FUSU9OX0VNQUlMLAorICBfTkxfSURFTlRJRklDQVRJT05fVEVMLAorICBfTkxfSURFTlRJRklDQVRJT05fRkFYLAorICBfTkxfSURFTlRJRklDQVRJT05fTEFOR1VBR0UsCisgIF9OTF9JREVOVElGSUNBVElPTl9URVJSSVRPUlksCisgIF9OTF9JREVOVElGSUNBVElPTl9BVURJRU5DRSwKKyAgX05MX0lERU5USUZJQ0FUSU9OX0FQUExJQ0FUSU9OLAorICBfTkxfSURFTlRJRklDQVRJT05fQUJCUkVWSUFUSU9OLAorICBfTkxfSURFTlRJRklDQVRJT05fUkVWSVNJT04sCisgIF9OTF9JREVOVElGSUNBVElPTl9EQVRFLAorICBfTkxfSURFTlRJRklDQVRJT05fQ0FURUdPUlksCisgIF9OTF9JREVOVElGSUNBVElPTl9DT0RFU0VULAorICBfTkxfTlVNX0xDX0lERU5USUZJQ0FUSU9OLAorCisgIC8qIFRoaXMgbWFya3MgdGhlIGhpZ2hlc3QgdmFsdWUgdXNlZC4gICovCisgIF9OTF9OVU0KK307CisKKy8qIFRoaXMgbWFjcm8gcHJvZHVjZXMgYW4gaXRlbSB5b3UgY2FuIHBhc3MgdG8gYG5sX2xhbmdpbmZvJyBvcgorICAgYG5sX2xhbmdpbmZvX2wnIHRvIGdldCB0aGUgbmFtZSBvZiB0aGUgbG9jYWxlIGluIHVzZSBmb3IgQ0FURUdPUlkuICAqLworI2RlZmluZSBfTkxfTE9DQUxFX05BTUUoY2F0ZWdvcnkpCV9OTF9JVEVNICgoY2F0ZWdvcnkpLCAtMSkKKyNpZmRlZiBfX1VTRV9HTlUKKyMgZGVmaW5lIE5MX0xPQ0FMRV9OQU1FKGNhdGVnb3J5KQlfTkxfTE9DQUxFX05BTUUgKGNhdGVnb3J5KQorI2VuZGlmCisKKworLyogUmV0dXJuIHRoZSBjdXJyZW50IGxvY2FsZSdzIHZhbHVlIGZvciBJVEVNLgorICAgSWYgSVRFTSBpcyBpbnZhbGlkLCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuCisKKyAgIFRoZSBzdHJpbmcgcmV0dXJuZWQgd2lsbCBub3QgY2hhbmdlIHVudGlsIGBzZXRsb2NhbGUnIGlzIGNhbGxlZDsKKyAgIGl0IGlzIHVzdWFsbHkgaW4gcmVhZC1vbmx5IG1lbW9yeSBhbmQgY2Fubm90IGJlIG1vZGlmaWVkLiAgKi8KKworZXh0ZXJuIGNoYXIgKm5sX2xhbmdpbmZvIChubF9pdGVtIF9faXRlbSkgX19USFJPVzsKKworCisjaWZkZWYJX19VU0VfR05VCisvKiBUaGlzIGludGVyZmFjZSBpcyBmb3IgdGhlIGV4dGVuZGVkIGxvY2FsZSBtb2RlbC4gIFNlZSA8bG9jYWxlLmg+IGZvcgorICAgbW9yZSBpbmZvcm1hdGlvbi4gICovCisKKy8qIEdldCBsb2NhbGUgZGF0YXR5cGUgZGVmaW5pdGlvbi4gICovCisjIGluY2x1ZGUgPHhsb2NhbGUuaD4KKworLyogSnVzdCBsaWtlIG5sX2xhbmdpbmZvIGJ1dCBnZXQgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIGxvY2FsZSBvYmplY3QgTC4gICovCitleHRlcm4gY2hhciAqbmxfbGFuZ2luZm9fbCAobmxfaXRlbSBfX2l0ZW0sIF9fbG9jYWxlX3QgbCk7CisjZW5kaWYKKworX19FTkRfREVDTFMKKworI2VuZGlmCS8qIGxhbmdpbmZvLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9sYXN0bG9nLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGFzdGxvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYzQyNTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGFzdGxvZy5oCkBAIC0wLDAgKzEsNCBAQAorLyogVGhpcyBoZWFkZXIgZmlsZSBpcyB1c2VkIGluIDQuM0JTRCB0byBkZWZpbmUgYHN0cnVjdCBsYXN0bG9nJywKKyAgIHdoaWNoIHdlIGRlZmluZSBpbiA8Yml0cy91dG1wLmg+LiAgKi8KKworI2luY2x1ZGUgPHV0bXAuaD4KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saWJnZW4uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saWJnZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjUyNTQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpYmdlbi5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OSwgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfTElCR0VOX0gKKyNkZWZpbmUgX0xJQkdFTl9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKK19fQkVHSU5fREVDTFMKKworLyogUmV0dXJuIGRpcmVjdG9yeSBwYXJ0IG9mIFBBVEggb3IgIi4iIGlmIG5vbmUgaXMgYXZhaWxhYmxlLiAgKi8KK2V4dGVybiBjaGFyICpkaXJuYW1lIChjaGFyICpfX3BhdGgpIF9fVEhST1c7CisKKy8qIFJldHVybiBmaW5hbCBjb21wb25lbnQgb2YgUEFUSC4KKworICAgVGhpcyBpcyB0aGUgd2VpcmQgWFBHIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbi4gIEl0IHNvbWV0aW1lcyB3aWxsCisgICBtb2RpZnkgaXRzIGFyZ3VtZW50LiAgVGhlcmVmb3JlIHdlIG5vcm1hbGx5IHVzZSB0aGUgR05VIHZlcnNpb24gKGluCisgICA8c3RyaW5nLmg+KSBhbmQgb25seSBpZiB0aGlzIGhlYWRlciBpcyBpbmNsdWRlZCBtYWtlIHRoZSBYUEcKKyAgIHZlcnNpb24gYXZhaWxhYmxlIHVuZGVyIHRoZSByZWFsIG5hbWUuICAqLworZXh0ZXJuIGNoYXIgKl9feHBnX2Jhc2VuYW1lIChjaGFyICpfX3BhdGgpIF9fVEhST1c7CisjZGVmaW5lIGJhc2VuYW1lCV9feHBnX2Jhc2VuYW1lCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBsaWJnZW4uaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpYmludGwuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saWJpbnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ0ZGVjMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saWJpbnRsLmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qIE1lc3NhZ2UgY2F0YWxvZ3MgZm9yIGludGVybmF0aW9uYWxpemF0aW9uLgorICAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIFRoaXMgZmlsZSBpcyBkZXJpdmVkIGZyb20gdGhlIGZpbGUgbGliZ2V0dGV4dC5oIGluIHRoZSBHTlUgZ2V0dGV4dCBwYWNrYWdlLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfTElCSU5UTF9ICisjZGVmaW5lIF9MSUJJTlRMX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworLyogV2UgZGVmaW5lIGFuIGFkZGl0aW9uYWwgc3ltYm9sIHRvIHNpZ25hbCB0aGF0IHdlIHVzZSB0aGUgR05VCisgICBpbXBsZW1lbnRhdGlvbiBvZiBnZXR0ZXh0LiAgKi8KKyNkZWZpbmUgX19VU0VfR05VX0dFVFRFWFQgMQorCisvKiBQcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdXBwb3J0ZWQgZmlsZSBmb3JtYXRzLiAgUmV0dXJucyB0aGUKKyAgIG1heGltdW0gbWlub3IgcmV2aXNpb24gbnVtYmVyIHN1cHBvcnRlZCBmb3IgYSBnaXZlbiBtYWpvciByZXZpc2lvbi4gICovCisjZGVmaW5lIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKG1ham9yKSBcCisgICgobWFqb3IpID09IDAgPyAxIDogLTEpCisKK19fQkVHSU5fREVDTFMKKworLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQKKyAgIExDX01FU1NBR0VTIGxvY2FsZS4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBNU0dJRCBpdHNlbGYgKHRoZSBkZWZhdWx0CisgICB0ZXh0KS4gICovCitleHRlcm4gY2hhciAqZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX21zZ2lkKQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX2Zvcm1hdF9hcmdfXyAoMSk7CisKKy8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudAorICAgTENfTUVTU0FHRVMgbG9jYWxlLiAgKi8KK2V4dGVybiBjaGFyICpkZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZCkKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9mb3JtYXRfYXJnX18gKDIpOworZXh0ZXJuIGNoYXIgKl9fZGdldHRleHQgKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBfX2NvbnN0IGNoYXIgKl9fbXNnaWQpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfZm9ybWF0X2FyZ19fICgyKTsKKworLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50IENBVEVHT1JZCisgICBsb2NhbGUuICAqLworZXh0ZXJuIGNoYXIgKmRjZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisJCQlfX2NvbnN0IGNoYXIgKl9fbXNnaWQsIGludCBfX2NhdGVnb3J5KQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX2Zvcm1hdF9hcmdfXyAoMik7CitleHRlcm4gY2hhciAqX19kY2dldHRleHQgKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorCQkJICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQsIGludCBfX2NhdGVnb3J5KQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX2Zvcm1hdF9hcmdfXyAoMik7CisKKworLyogU2ltaWxhciB0byBgZ2V0dGV4dCcgYnV0IHNlbGVjdCB0aGUgcGx1cmFsIGZvcm0gY29ycmVzcG9uZGluZyB0byB0aGUKKyAgIG51bWJlciBOLiAgKi8KK2V4dGVybiBjaGFyICpuZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX21zZ2lkMSwgX19jb25zdCBjaGFyICpfX21zZ2lkMiwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fbikKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9mb3JtYXRfYXJnX18gKDEpIF9fYXR0cmlidXRlX2Zvcm1hdF9hcmdfXyAoMik7CisKKy8qIFNpbWlsYXIgdG8gYGRnZXR0ZXh0JyBidXQgc2VsZWN0IHRoZSBwbHVyYWwgZm9ybSBjb3JyZXNwb25kaW5nIHRvIHRoZQorICAgbnVtYmVyIE4uICAqLworZXh0ZXJuIGNoYXIgKmRuZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZDEsCisJCQlfX2NvbnN0IGNoYXIgKl9fbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBfX24pCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfZm9ybWF0X2FyZ19fICgyKSBfX2F0dHJpYnV0ZV9mb3JtYXRfYXJnX18gKDMpOworCisvKiBTaW1pbGFyIHRvIGBkY2dldHRleHQnIGJ1dCBzZWxlY3QgdGhlIHBsdXJhbCBmb3JtIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisgICBudW1iZXIgTi4gICovCitleHRlcm4gY2hhciAqZGNuZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZDEsCisJCQkgX19jb25zdCBjaGFyICpfX21zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgX19uLAorCQkJIGludCBfX2NhdGVnb3J5KQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX2Zvcm1hdF9hcmdfXyAoMikgX19hdHRyaWJ1dGVfZm9ybWF0X2FyZ19fICgzKTsKKworCisvKiBTZXQgdGhlIGN1cnJlbnQgZGVmYXVsdCBtZXNzYWdlIGNhdGFsb2cgdG8gRE9NQUlOTkFNRS4KKyAgIElmIERPTUFJTk5BTUUgaXMgbnVsbCwgcmV0dXJuIHRoZSBjdXJyZW50IGRlZmF1bHQuCisgICBJZiBET01BSU5OQU1FIGlzICIiLCByZXNldCB0byB0aGUgZGVmYXVsdCBvZiAibWVzc2FnZXMiLiAgKi8KK2V4dGVybiBjaGFyICp0ZXh0ZG9tYWluIChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSkgX19USFJPVzsKKworLyogU3BlY2lmeSB0aGF0IHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyB3aWxsIGJlIGZvdW5kCisgICBpbiBESVJOQU1FIHJhdGhlciB0aGFuIGluIHRoZSBzeXN0ZW0gbG9jYWxlIGRhdGEgYmFzZS4gICovCitleHRlcm4gY2hhciAqYmluZHRleHRkb21haW4gKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorCQkJICAgICBfX2NvbnN0IGNoYXIgKl9fZGlybmFtZSkgX19USFJPVzsKKworLyogU3BlY2lmeSB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIGluIHdoaWNoIHRoZSBtZXNzYWdlcyBmcm9tIHRoZQorICAgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgd2lsbCBiZSByZXR1cm5lZC4gICovCitleHRlcm4gY2hhciAqYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorCQkJCSAgICAgIF9fY29uc3QgY2hhciAqX19jb2Rlc2V0KSBfX1RIUk9XOworCisKKy8qIE9wdGltaXplZCB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiBhYm92ZS4gICovCisjaWYgZGVmaW5lZCBfX09QVElNSVpFX18gJiYgIWRlZmluZWQgX19jcGx1c3BsdXMKKworLyogV2UgbmVlZCBOVUxMIGZvciBgZ2V0dGV4dCcuICAqLworIyBkZWZpbmUgX19uZWVkX05VTEwKKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8qIFdlIG5lZWQgTENfTUVTU0FHRVMgZm9yIGBkZ2V0dGV4dCcuICAqLworIyBpbmNsdWRlIDxsb2NhbGUuaD4KKworLyogVGhlc2UgbXVzdCBiZSBtYWNyb3MuICBJbmxpbmVkIGZ1bmN0aW9ucyBhcmUgdXNlbGVzcyBiZWNhdXNlIHRoZQorICAgYF9fYnVpbHRpbl9jb25zdGFudF9wJyBwcmVkaWNhdGUgaW4gZGNnZXR0ZXh0IHdvdWxkIGFsd2F5cyByZXR1cm4KKyAgIGZhbHNlLiAgKi8KKworIyBkZWZpbmUgZ2V0dGV4dChtc2dpZCkgZGdldHRleHQgKE5VTEwsIG1zZ2lkKQorCisjIGRlZmluZSBkZ2V0dGV4dChkb21haW5uYW1lLCBtc2dpZCkgXAorICBkY2dldHRleHQgKGRvbWFpbm5hbWUsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKworIyBkZWZpbmUgbmdldHRleHQobXNnaWQxLCBtc2dpZDIsIG4pIGRuZ2V0dGV4dCAoTlVMTCwgbXNnaWQxLCBtc2dpZDIsIG4pCisKKyMgZGVmaW5lIGRuZ2V0dGV4dChkb21haW5uYW1lLCBtc2dpZDEsIG1zZ2lkMiwgbikgXAorICBkY25nZXR0ZXh0IChkb21haW5uYW1lLCBtc2dpZDEsIG1zZ2lkMiwgbiwgTENfTUVTU0FHRVMpCisKKyNlbmRpZgkvKiBPcHRpbWl6aW5nLiAgKi8KKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIGxpYmludGwuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpYmlvLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGliaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDM4MTJmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpYmlvLmgKQEAgLTAsMCArMSw1NTMgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5MS0xOTk1LDE5OTctMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisgICBXcml0dGVuIGJ5IFBlciBCb3RobmVyIDxib3RobmVyQGN5Z251cy5jb20+LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLgorCisgICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpZiB5b3UgbGluayB0aGUgY29kZSBpbiB0aGlzIGZpbGUgd2l0aAorICAgZmlsZXMgY29tcGlsZWQgd2l0aCBhIEdOVSBjb21waWxlciB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsCisgICB0aGF0IGRvZXMgbm90IGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisgICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QKKyAgIGhvd2V2ZXIgaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZQorICAgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICAgVGhpcyBleGNlcHRpb24gYXBwbGllcyB0byBjb2RlIHJlbGVhc2VkIGJ5IGl0cyBjb3B5cmlnaHQgaG9sZGVycworICAgaW4gZmlsZXMgY29udGFpbmluZyB0aGUgZXhjZXB0aW9uLiAgKi8KKworI2lmbmRlZiBfSU9fU1RESU9fSAorI2RlZmluZSBfSU9fU1RESU9fSAorCisjaW5jbHVkZSA8X0dfY29uZmlnLmg+CisvKiBBTEwgb2YgdGhlc2Ugc2hvdWxkIGJlIGRlZmluZWQgaW4gX0dfY29uZmlnLmggKi8KKyNkZWZpbmUgX0lPX3Bvc190IF9HX2Zwb3NfdCAvKiBvYnNvbGV0ZSAqLworI2RlZmluZSBfSU9fZnBvc190IF9HX2Zwb3NfdAorI2RlZmluZSBfSU9fZnBvczY0X3QgX0dfZnBvczY0X3QKKyNkZWZpbmUgX0lPX3NpemVfdCBfR19zaXplX3QKKyNkZWZpbmUgX0lPX3NzaXplX3QgX0dfc3NpemVfdAorI2RlZmluZSBfSU9fb2ZmX3QgX0dfb2ZmX3QKKyNkZWZpbmUgX0lPX29mZjY0X3QgX0dfb2ZmNjRfdAorI2RlZmluZSBfSU9fcGlkX3QgX0dfcGlkX3QKKyNkZWZpbmUgX0lPX3VpZF90IF9HX3VpZF90CisjZGVmaW5lIF9JT19pY29udl90IF9HX2ljb252X3QKKyNkZWZpbmUgX0lPX0hBVkVfU1lTX1dBSVQgX0dfSEFWRV9TWVNfV0FJVAorI2RlZmluZSBfSU9fSEFWRV9TVF9CTEtTSVpFIF9HX0hBVkVfU1RfQkxLU0laRQorI2RlZmluZSBfSU9fQlVGU0laIF9HX0JVRlNJWgorI2RlZmluZSBfSU9fdmFfbGlzdCBfR192YV9saXN0CisjZGVmaW5lIF9JT193aW50X3QgX0dfd2ludF90CisKKyNpZmRlZiBfR19ORUVEX1NUREFSR19ICisvKiBUaGlzIGRlZmluZSBhdm9pZHMgbmFtZSBwb2xsdXRpb24gaWYgd2UncmUgdXNpbmcgR05VIHN0ZGFyZy5oICovCisjIGRlZmluZSBfX25lZWRfX192YV9saXN0CisjIGluY2x1ZGUgPHN0ZGFyZy5oPgorIyBpZmRlZiBfX0dOVUNfVkFfTElTVAorIyAgdW5kZWYgX0lPX3ZhX2xpc3QKKyMgIGRlZmluZSBfSU9fdmFfbGlzdCBfX2dudWNfdmFfbGlzdAorIyBlbmRpZiAvKiBfX0dOVUNfVkFfTElTVCAqLworI2VuZGlmCisKKyNpZm5kZWYgX19QCisjIGlmIF9HX0hBVkVfU1lTX0NERUZTCisjICBpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyMgZWxzZQorIyAgaWZkZWYgX19TVERDX18KKyMgICBkZWZpbmUgX19QKHApIHAKKyMgICBkZWZpbmUgX19QTVQocCkgcAorIyAgZWxzZQorIyAgIGRlZmluZSBfX1AocCkgKCkKKyMgICBkZWZpbmUgX19QTVQocCkgKCkKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYgLyohX19QKi8KKworLyogRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKyNpZm5kZWYgX1BBUkFNUworIyBkZWZpbmUgX1BBUkFNUyhwcm90b3MpIF9fUChwcm90b3MpCisjZW5kaWYgLyohX1BBUkFNUyovCisKKyNpZm5kZWYgX19TVERDX18KKyMgaWZuZGVmIGNvbnN0CisjICBkZWZpbmUgY29uc3QKKyMgZW5kaWYKKyNlbmRpZgorI2RlZmluZSBfSU9fVU5JRklFRF9KVU1QVEFCTEVTIDEKKyNpZm5kZWYgX0dfSEFWRV9QUklOVEZfRlAKKyMgZGVmaW5lIF9JT19VU0VfRFRPQSAxCisjZW5kaWYKKworI2lmbmRlZiBFT0YKKyMgZGVmaW5lIEVPRiAoLTEpCisjZW5kaWYKKyNpZm5kZWYgTlVMTAorIyBpZiBkZWZpbmVkIF9fR05VR19fICYmIFwKKyAgICAoX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDgpKQorIyAgZGVmaW5lIE5VTEwgKF9fbnVsbCkKKyMgZWxzZQorIyAgaWYgIWRlZmluZWQoX19jcGx1c3BsdXMpCisjICAgZGVmaW5lIE5VTEwgKCh2b2lkKikwKQorIyAgZWxzZQorIyAgIGRlZmluZSBOVUxMICgwKQorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIF9JT1NfSU5QVVQJMQorI2RlZmluZSBfSU9TX09VVFBVVAkyCisjZGVmaW5lIF9JT1NfQVRFTkQJNAorI2RlZmluZSBfSU9TX0FQUEVORAk4CisjZGVmaW5lIF9JT1NfVFJVTkMJMTYKKyNkZWZpbmUgX0lPU19OT0NSRUFURQkzMgorI2RlZmluZSBfSU9TX05PUkVQTEFDRQk2NAorI2RlZmluZSBfSU9TX0JJTgkxMjgKKworLyogTWFnaWMgbnVtYmVycyBhbmQgYml0cyBmb3IgdGhlIF9mbGFncyBmaWVsZC4KKyAgIFRoZSBtYWdpYyBudW1iZXJzIHVzZSB0aGUgaGlnaC1vcmRlciBiaXRzIG9mIF9mbGFnczsKKyAgIHRoZSByZW1haW5pbmcgYml0cyBhcmUgYXZhaWxhYmxlIGZvciB2YXJpYWJsZSBmbGFncy4KKyAgIE5vdGU6IFRoZSBtYWdpYyBudW1iZXJzIG11c3QgYWxsIGJlIG5lZ2F0aXZlIGlmIHN0ZGlvCisgICBlbXVsYXRpb24gaXMgZGVzaXJlZC4gKi8KKworI2RlZmluZSBfSU9fTUFHSUMgMHhGQkFEMDAwMCAvKiBNYWdpYyBudW1iZXIgKi8KKyNkZWZpbmUgX09MRF9TVERJT19NQUdJQyAweEZBQkMwMDAwIC8qIEVtdWxhdGUgb2xkIHN0ZGlvLiAqLworI2RlZmluZSBfSU9fTUFHSUNfTUFTSyAweEZGRkYwMDAwCisjZGVmaW5lIF9JT19VU0VSX0JVRiAxIC8qIFVzZXIgb3ducyBidWZmZXI7IGRvbid0IGRlbGV0ZSBpdCBvbiBjbG9zZS4gKi8KKyNkZWZpbmUgX0lPX1VOQlVGRkVSRUQgMgorI2RlZmluZSBfSU9fTk9fUkVBRFMgNCAvKiBSZWFkaW5nIG5vdCBhbGxvd2VkICovCisjZGVmaW5lIF9JT19OT19XUklURVMgOCAvKiBXcml0aW5nIG5vdCBhbGxvd2QgKi8KKyNkZWZpbmUgX0lPX0VPRl9TRUVOIDB4MTAKKyNkZWZpbmUgX0lPX0VSUl9TRUVOIDB4MjAKKyNkZWZpbmUgX0lPX0RFTEVURV9ET05UX0NMT1NFIDB4NDAgLyogRG9uJ3QgY2FsbCBjbG9zZShfZmlsZW5vKSBvbiBjbGVhbnVwLiAqLworI2RlZmluZSBfSU9fTElOS0VEIDB4ODAgLyogU2V0IGlmIGxpbmtlZCAodXNpbmcgX2NoYWluKSB0byBzdHJlYW1idWY6Ol9saXN0X2FsbC4qLworI2RlZmluZSBfSU9fSU5fQkFDS1VQIDB4MTAwCisjZGVmaW5lIF9JT19MSU5FX0JVRiAweDIwMAorI2RlZmluZSBfSU9fVElFRF9QVVRfR0VUIDB4NDAwIC8qIFNldCBpZiBwdXQgYW5kIGdldCBwb2ludGVyIGxvZ2ljbHkgdGllZC4gKi8KKyNkZWZpbmUgX0lPX0NVUlJFTlRMWV9QVVRUSU5HIDB4ODAwCisjZGVmaW5lIF9JT19JU19BUFBFTkRJTkcgMHgxMDAwCisjZGVmaW5lIF9JT19JU19GSUxFQlVGIDB4MjAwMAorI2RlZmluZSBfSU9fQkFEX1NFRU4gMHg0MDAwCisjZGVmaW5lIF9JT19VU0VSX0xPQ0sgMHg4MDAwCisKKyNkZWZpbmUgX0lPX0ZMQUdTMl9NTUFQIDEKKyNkZWZpbmUgX0lPX0ZMQUdTMl9OT1RDQU5DRUwgMgorI2lmZGVmIF9MSUJDCisjIGRlZmluZSBfSU9fRkxBR1MyX0ZPUlRJRlkgNAorI2VuZGlmCisjZGVmaW5lIF9JT19GTEFHUzJfVVNFUl9XQlVGIDgKKyNpZmRlZiBfTElCQworIyBkZWZpbmUgX0lPX0ZMQUdTMl9TQ0FORl9TVEQgMTYKKyNlbmRpZgorCisvKiBUaGVzZSBhcmUgImZvcm1hdHRpbmcgZmxhZ3MiIG1hdGNoaW5nIHRoZSBpb3N0cmVhbSBmbXRmbGFncyBlbnVtIHZhbHVlcy4gKi8KKyNkZWZpbmUgX0lPX1NLSVBXUyAwMQorI2RlZmluZSBfSU9fTEVGVCAwMgorI2RlZmluZSBfSU9fUklHSFQgMDQKKyNkZWZpbmUgX0lPX0lOVEVSTkFMIDAxMAorI2RlZmluZSBfSU9fREVDIDAyMAorI2RlZmluZSBfSU9fT0NUIDA0MAorI2RlZmluZSBfSU9fSEVYIDAxMDAKKyNkZWZpbmUgX0lPX1NIT1dCQVNFIDAyMDAKKyNkZWZpbmUgX0lPX1NIT1dQT0lOVCAwNDAwCisjZGVmaW5lIF9JT19VUFBFUkNBU0UgMDEwMDAKKyNkZWZpbmUgX0lPX1NIT1dQT1MgMDIwMDAKKyNkZWZpbmUgX0lPX1NDSUVOVElGSUMgMDQwMDAKKyNkZWZpbmUgX0lPX0ZJWEVEIDAxMDAwMAorI2RlZmluZSBfSU9fVU5JVEJVRiAwMjAwMDAKKyNkZWZpbmUgX0lPX1NURElPIDA0MDAwMAorI2RlZmluZSBfSU9fRE9OVF9DTE9TRSAwMTAwMDAwCisjZGVmaW5lIF9JT19CT09MQUxQSEEgMDIwMDAwMAorCisKK3N0cnVjdCBfSU9fanVtcF90OyAgc3RydWN0IF9JT19GSUxFOworCisvKiBIYW5kbGUgbG9jay4gICovCisjaWZkZWYgX0lPX01UU0FGRV9JTworIyBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBfX0dMSUJDX18gPj0gMgorIyAgaW5jbHVkZSA8Yml0cy9zdGRpby1sb2NrLmg+CisjIGVsc2UKKy8qIyBpbmNsdWRlIDxjb210aHJlYWQuaD4qLworIyBlbmRpZgorI2Vsc2UKK3R5cGVkZWYgdm9pZCBfSU9fbG9ja190OworI2VuZGlmCisKKworLyogQSBzdHJlYW1tYXJrZXIgcmVtZW1iZXJzIGEgcG9zaXRpb24gaW4gYSBidWZmZXIuICovCisKK3N0cnVjdCBfSU9fbWFya2VyIHsKKyAgc3RydWN0IF9JT19tYXJrZXIgKl9uZXh0OworICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOworICAvKiBJZiBfcG9zID49IDAKKyBpdCBwb2ludHMgdG8gX2J1Zi0+R2Jhc2UoKStfcG9zLiBGSVhNRSBjb21tZW50ICovCisgIC8qIGlmIF9wb3MgPCAwLCBpdCBwb2ludHMgdG8gX2J1Zi0+ZUJwdHIoKStfcG9zLiBGSVhNRSBjb21tZW50ICovCisgIGludCBfcG9zOworI2lmIDAKKyAgICB2b2lkIHNldF9zdHJlYW1wb3Moc3RyZWFtcG9zIHNwKSB7IF9zcG9zID0gc3A7IH0KKyAgICB2b2lkIHNldF9vZmZzZXQoaW50IG9mZnNldCkgeyBfcG9zID0gb2Zmc2V0OyBfc3BvcyA9IChzdHJlYW1wb3MpKC0yKTsgfQorICBwdWJsaWM6CisgICAgc3RyZWFtbWFya2VyKHN0cmVhbWJ1ZiAqc2IpOworICAgIH5zdHJlYW1tYXJrZXIoKTsKKyAgICBpbnQgc2F2aW5nKCkgeyByZXR1cm4gIF9zcG9zID09IC0yOyB9CisgICAgaW50IGRlbHRhKHN0cmVhbW1hcmtlciYpOworICAgIGludCBkZWx0YSgpOworI2VuZGlmCit9OworCisvKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgZnJvbSB0aGUgbGlic3RkYysrIGNvZGVjdnQgY2xhc3MuICAqLworZW51bSBfX2NvZGVjdnRfcmVzdWx0Cit7CisgIF9fY29kZWN2dF9vaywKKyAgX19jb2RlY3Z0X3BhcnRpYWwsCisgIF9fY29kZWN2dF9lcnJvciwKKyAgX19jb2RlY3Z0X25vY29udgorfTsKKworI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBfR0xJQkNQUF9VU0VfV0NIQVJfVAorLyogVGhlIG9yZGVyIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgZm9sbG93aW5nIHN0cnVjdCBtdXN0IG1hdGNoIHRoZSBvcmRlcgorICAgb2YgdGhlIHZpcnR1YWwgZnVuY3Rpb25zIGluIHRoZSBsaWJzdGRjKysgY29kZWN2dCBjbGFzcy4gICovCitzdHJ1Y3QgX0lPX2NvZGVjdnQKK3sKKyAgdm9pZCAoKl9fY29kZWN2dF9kZXN0cikgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKKyAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19jb2RlY3Z0X2RvX291dCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqLAorCQkJCQkgICAgIF9fbWJzdGF0ZV90ICosCisJCQkJCSAgICAgY29uc3Qgd2NoYXJfdCAqLAorCQkJCQkgICAgIGNvbnN0IHdjaGFyX3QgKiwKKwkJCQkJICAgICBjb25zdCB3Y2hhcl90ICoqLCBjaGFyICosCisJCQkJCSAgICAgY2hhciAqLCBjaGFyICoqKTsKKyAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19jb2RlY3Z0X2RvX3Vuc2hpZnQpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwKKwkJCQkJCSBfX21ic3RhdGVfdCAqLCBjaGFyICosCisJCQkJCQkgY2hhciAqLCBjaGFyICoqKTsKKyAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19jb2RlY3Z0X2RvX2luKSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCisJCQkJCSAgICBfX21ic3RhdGVfdCAqLAorCQkJCQkgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCisJCQkJCSAgICBjb25zdCBjaGFyICoqLCB3Y2hhcl90ICosCisJCQkJCSAgICB3Y2hhcl90ICosIHdjaGFyX3QgKiopOworICBpbnQgKCpfX2NvZGVjdnRfZG9fZW5jb2RpbmcpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CisgIGludCAoKl9fY29kZWN2dF9kb19hbHdheXNfbm9jb252KSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOworICBpbnQgKCpfX2NvZGVjdnRfZG9fbGVuZ3RoKSAoc3RydWN0IF9JT19jb2RlY3Z0ICosIF9fbWJzdGF0ZV90ICosCisJCQkgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgX0lPX3NpemVfdCk7CisgIGludCAoKl9fY29kZWN2dF9kb19tYXhfbGVuZ3RoKSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOworCisgIF9JT19pY29udl90IF9fY2RfaW47CisgIF9JT19pY29udl90IF9fY2Rfb3V0OworfTsKKworLyogRXh0cmEgZGF0YSBmb3Igd2lkZSBjaGFyYWN0ZXIgc3RyZWFtcy4gICovCitzdHJ1Y3QgX0lPX3dpZGVfZGF0YQoreworICB3Y2hhcl90ICpfSU9fcmVhZF9wdHI7CS8qIEN1cnJlbnQgcmVhZCBwb2ludGVyICovCisgIHdjaGFyX3QgKl9JT19yZWFkX2VuZDsJLyogRW5kIG9mIGdldCBhcmVhLiAqLworICB3Y2hhcl90ICpfSU9fcmVhZF9iYXNlOwkvKiBTdGFydCBvZiBwdXRiYWNrK2dldCBhcmVhLiAqLworICB3Y2hhcl90ICpfSU9fd3JpdGVfYmFzZTsJLyogU3RhcnQgb2YgcHV0IGFyZWEuICovCisgIHdjaGFyX3QgKl9JT193cml0ZV9wdHI7CS8qIEN1cnJlbnQgcHV0IHBvaW50ZXIuICovCisgIHdjaGFyX3QgKl9JT193cml0ZV9lbmQ7CS8qIEVuZCBvZiBwdXQgYXJlYS4gKi8KKyAgd2NoYXJfdCAqX0lPX2J1Zl9iYXNlOwkvKiBTdGFydCBvZiByZXNlcnZlIGFyZWEuICovCisgIHdjaGFyX3QgKl9JT19idWZfZW5kOwkJLyogRW5kIG9mIHJlc2VydmUgYXJlYS4gKi8KKyAgLyogVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIHVzZWQgdG8gc3VwcG9ydCBiYWNraW5nIHVwIGFuZCB1bmRvLiAqLworICB3Y2hhcl90ICpfSU9fc2F2ZV9iYXNlOwkvKiBQb2ludGVyIHRvIHN0YXJ0IG9mIG5vbi1jdXJyZW50IGdldCBhcmVhLiAqLworICB3Y2hhcl90ICpfSU9fYmFja3VwX2Jhc2U7CS8qIFBvaW50ZXIgdG8gZmlyc3QgdmFsaWQgY2hhcmFjdGVyIG9mCisJCQkJICAgYmFja3VwIGFyZWEgKi8KKyAgd2NoYXJfdCAqX0lPX3NhdmVfZW5kOwkvKiBQb2ludGVyIHRvIGVuZCBvZiBub24tY3VycmVudCBnZXQgYXJlYS4gKi8KKworICBfX21ic3RhdGVfdCBfSU9fc3RhdGU7CisgIF9fbWJzdGF0ZV90IF9JT19sYXN0X3N0YXRlOworICBzdHJ1Y3QgX0lPX2NvZGVjdnQgX2NvZGVjdnQ7CisKKyAgd2NoYXJfdCBfc2hvcnRidWZbMV07CisKKyAgY29uc3Qgc3RydWN0IF9JT19qdW1wX3QgKl93aWRlX3Z0YWJsZTsKK307CisjZW5kaWYKKworc3RydWN0IF9JT19GSUxFIHsKKyAgaW50IF9mbGFnczsJCS8qIEhpZ2gtb3JkZXIgd29yZCBpcyBfSU9fTUFHSUM7IHJlc3QgaXMgZmxhZ3MuICovCisjZGVmaW5lIF9JT19maWxlX2ZsYWdzIF9mbGFncworCisgIC8qIFRoZSBmb2xsb3dpbmcgcG9pbnRlcnMgY29ycmVzcG9uZCB0byB0aGUgQysrIHN0cmVhbWJ1ZiBwcm90b2NvbC4gKi8KKyAgLyogTm90ZTogIFRrIHVzZXMgdGhlIF9JT19yZWFkX3B0ciBhbmQgX0lPX3JlYWRfZW5kIGZpZWxkcyBkaXJlY3RseS4gKi8KKyAgY2hhciogX0lPX3JlYWRfcHRyOwkvKiBDdXJyZW50IHJlYWQgcG9pbnRlciAqLworICBjaGFyKiBfSU9fcmVhZF9lbmQ7CS8qIEVuZCBvZiBnZXQgYXJlYS4gKi8KKyAgY2hhciogX0lPX3JlYWRfYmFzZTsJLyogU3RhcnQgb2YgcHV0YmFjaytnZXQgYXJlYS4gKi8KKyAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CS8qIFN0YXJ0IG9mIHB1dCBhcmVhLiAqLworICBjaGFyKiBfSU9fd3JpdGVfcHRyOwkvKiBDdXJyZW50IHB1dCBwb2ludGVyLiAqLworICBjaGFyKiBfSU9fd3JpdGVfZW5kOwkvKiBFbmQgb2YgcHV0IGFyZWEuICovCisgIGNoYXIqIF9JT19idWZfYmFzZTsJLyogU3RhcnQgb2YgcmVzZXJ2ZSBhcmVhLiAqLworICBjaGFyKiBfSU9fYnVmX2VuZDsJLyogRW5kIG9mIHJlc2VydmUgYXJlYS4gKi8KKyAgLyogVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIHVzZWQgdG8gc3VwcG9ydCBiYWNraW5nIHVwIGFuZCB1bmRvLiAqLworICBjaGFyICpfSU9fc2F2ZV9iYXNlOyAvKiBQb2ludGVyIHRvIHN0YXJ0IG9mIG5vbi1jdXJyZW50IGdldCBhcmVhLiAqLworICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7ICAvKiBQb2ludGVyIHRvIGZpcnN0IHZhbGlkIGNoYXJhY3RlciBvZiBiYWNrdXAgYXJlYSAqLworICBjaGFyICpfSU9fc2F2ZV9lbmQ7IC8qIFBvaW50ZXIgdG8gZW5kIG9mIG5vbi1jdXJyZW50IGdldCBhcmVhLiAqLworCisgIHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKKworICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKKworICBpbnQgX2ZpbGVubzsKKyNpZiAwCisgIGludCBfYmxrc2l6ZTsKKyNlbHNlCisgIGludCBfZmxhZ3MyOworI2VuZGlmCisgIF9JT19vZmZfdCBfb2xkX29mZnNldDsgLyogVGhpcyB1c2VkIHRvIGJlIF9vZmZzZXQgYnV0IGl0J3MgdG9vIHNtYWxsLiAgKi8KKworI2RlZmluZSBfX0hBVkVfQ09MVU1OIC8qIHRlbXBvcmFyeSAqLworICAvKiAxK2NvbHVtbiBudW1iZXIgb2YgcGJhc2UoKTsgMCBpcyB1bmtub3duLiAqLworICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKKyAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CisgIGNoYXIgX3Nob3J0YnVmWzFdOworCisgIC8qICBjaGFyKiBfc2F2ZV9ncHRyOyAgY2hhciogX3NhdmVfZWdwdHI7ICovCisKKyAgX0lPX2xvY2tfdCAqX2xvY2s7CisjaWZkZWYgX0lPX1VTRV9PTERfSU9fRklMRQorfTsKKworc3RydWN0IF9JT19GSUxFX2NvbXBsZXRlCit7CisgIHN0cnVjdCBfSU9fRklMRSBfZmlsZTsKKyNlbmRpZgorI2lmIGRlZmluZWQgX0dfSU9fSU9fRklMRV9WRVJTSU9OICYmIF9HX0lPX0lPX0ZJTEVfVkVSU0lPTiA9PSAweDIwMDAxCisgIF9JT19vZmY2NF90IF9vZmZzZXQ7CisjIGlmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBfR0xJQkNQUF9VU0VfV0NIQVJfVAorICAvKiBXaWRlIGNoYXJhY3RlciBzdHJlYW0gc3R1ZmYuICAqLworICBzdHJ1Y3QgX0lPX2NvZGVjdnQgKl9jb2RlY3Z0OworICBzdHJ1Y3QgX0lPX3dpZGVfZGF0YSAqX3dpZGVfZGF0YTsKKyAgc3RydWN0IF9JT19GSUxFICpfZnJlZXJlc19saXN0OworICB2b2lkICpfZnJlZXJlc19idWY7CisgIHNpemVfdCBfZnJlZXJlc19zaXplOworIyBlbHNlCisgIHZvaWQgKl9fcGFkMTsKKyAgdm9pZCAqX19wYWQyOworICB2b2lkICpfX3BhZDM7CisgIHZvaWQgKl9fcGFkNDsKKyAgc2l6ZV90IF9fcGFkNTsKKyMgZW5kaWYKKyAgaW50IF9tb2RlOworICAvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IGludG8gdHJvdWJsZSBhZ2Fpbi4gICovCisgIGNoYXIgX3VudXNlZDJbMTUgKiBzaXplb2YgKGludCkgLSA0ICogc2l6ZW9mICh2b2lkICopIC0gc2l6ZW9mIChzaXplX3QpXTsKKyNlbmRpZgorfTsKKworI2lmbmRlZiBfX2NwbHVzcGx1cwordHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgX0lPX0ZJTEU7CisjZW5kaWYKKworc3RydWN0IF9JT19GSUxFX3BsdXM7CisKK2V4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKK2V4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87CitleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOworI2lmbmRlZiBfTElCQworI2RlZmluZSBfSU9fc3RkaW4gKChfSU9fRklMRSopKCZfSU9fMl8xX3N0ZGluXykpCisjZGVmaW5lIF9JT19zdGRvdXQgKChfSU9fRklMRSopKCZfSU9fMl8xX3N0ZG91dF8pKQorI2RlZmluZSBfSU9fc3RkZXJyICgoX0lPX0ZJTEUqKSgmX0lPXzJfMV9zdGRlcnJfKSkKKyNlbHNlCitleHRlcm4gX0lPX0ZJTEUgKl9JT19zdGRpbiBhdHRyaWJ1dGVfaGlkZGVuOworZXh0ZXJuIF9JT19GSUxFICpfSU9fc3Rkb3V0IGF0dHJpYnV0ZV9oaWRkZW47CitleHRlcm4gX0lPX0ZJTEUgKl9JT19zdGRlcnIgYXR0cmlidXRlX2hpZGRlbjsKKyNlbmRpZgorCisKKy8qIEZ1bmN0aW9ucyB0byBkbyBJL08gYW5kIGZpbGUgbWFuYWdlbWVudCBmb3IgYSBzdHJlYW0uICAqLworCisvKiBSZWFkIE5CWVRFUyBieXRlcyBmcm9tIENPT0tJRSBpbnRvIGEgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQlVGLgorICAgUmV0dXJuIG51bWJlciBvZiBieXRlcyByZWFkLiAgKi8KK3R5cGVkZWYgX19zc2l6ZV90IF9faW9fcmVhZF9mbiAodm9pZCAqX19jb29raWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpOworCisvKiBXcml0ZSBOIGJ5dGVzIHBvaW50ZWQgdG8gYnkgQlVGIHRvIENPT0tJRS4gIFdyaXRlIGFsbCBOIGJ5dGVzCisgICB1bmxlc3MgdGhlcmUgaXMgYW4gZXJyb3IuICBSZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4sIG9yIC0xIGlmCisgICB0aGVyZSBpcyBhbiBlcnJvciB3aXRob3V0IHdyaXRpbmcgYW55dGhpbmcuICBJZiB0aGUgZmlsZSBoYXMgYmVlbgorICAgb3BlbmVkIGZvciBhcHBlbmQgKF9fbW9kZS5fX2FwcGVuZCBzZXQpLCB0aGVuIHNldCB0aGUgZmlsZSBwb2ludGVyCisgICB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCB0aGVuIGRvIHRoZSB3cml0ZTsgaWYgbm90LCBqdXN0IHdyaXRlIGF0CisgICB0aGUgY3VycmVudCBmaWxlIHBvaW50ZXIuICAqLwordHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAodm9pZCAqX19jb29raWUsIF9fY29uc3QgY2hhciAqX19idWYsCisJCQkJIHNpemVfdCBfX24pOworCisvKiBNb3ZlIENPT0tJRSdzIGZpbGUgcG9zaXRpb24gdG8gKlBPUyBieXRlcyBmcm9tIHRoZQorICAgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIChpZiBXIGlzIFNFRUtfU0VUKSwKKyAgIHRoZSBjdXJyZW50IHBvc2l0aW9uIChpZiBXIGlzIFNFRUtfQ1VSKSwKKyAgIG9yIHRoZSBlbmQgb2YgdGhlIGZpbGUgKGlmIFcgaXMgU0VFS19FTkQpLgorICAgU2V0ICpQT1MgdG8gdGhlIG5ldyBmaWxlIHBvc2l0aW9uLgorICAgUmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwsIG5vbnplcm8gaWYgbm90LiAgKi8KK3R5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqX19jb29raWUsIF9JT19vZmY2NF90ICpfX3BvcywgaW50IF9fdyk7CisKKy8qIENsb3NlIENPT0tJRS4gICovCit0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CisKKworI2lmZGVmIF9HTlVfU09VUkNFCisvKiBVc2VyLXZpc2libGUgbmFtZXMgZm9yIHRoZSBhYm92ZS4gICovCit0eXBlZGVmIF9faW9fcmVhZF9mbiBjb29raWVfcmVhZF9mdW5jdGlvbl90OwordHlwZWRlZiBfX2lvX3dyaXRlX2ZuIGNvb2tpZV93cml0ZV9mdW5jdGlvbl90OwordHlwZWRlZiBfX2lvX3NlZWtfZm4gY29va2llX3NlZWtfZnVuY3Rpb25fdDsKK3R5cGVkZWYgX19pb19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25fdDsKKworLyogVGhlIHN0cnVjdHVyZSB3aXRoIHRoZSBjb29raWUgZnVuY3Rpb24gcG9pbnRlcnMuICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19pb19yZWFkX2ZuICpyZWFkOwkJLyogUmVhZCBieXRlcy4gICovCisgIF9faW9fd3JpdGVfZm4gKndyaXRlOwkJLyogV3JpdGUgYnl0ZXMuICAqLworICBfX2lvX3NlZWtfZm4gKnNlZWs7CQkvKiBTZWVrL3RlbGwgZmlsZSBwb3NpdGlvbi4gICovCisgIF9faW9fY2xvc2VfZm4gKmNsb3NlOwkJLyogQ2xvc2UgZmlsZS4gICovCit9IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7Cit0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgY29va2llX2lvX2Z1bmN0aW9uc190OworCitzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlOworCisvKiBJbml0aWFsaXplIG9uZSBvZiB0aG9zZS4gICovCitleHRlcm4gdm9pZCBfSU9fY29va2llX2luaXQgKHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2ZpbGUsIGludCBfX3JlYWRfd3JpdGUsCisJCQkgICAgIHZvaWQgKl9fY29va2llLCBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9fZm5zKTsKKyNlbmRpZgorCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKik7CitleHRlcm4gaW50IF9fdWZsb3cgKF9JT19GSUxFICopOworZXh0ZXJuIGludCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpOworI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBfR0xJQkNQUF9VU0VfV0NIQVJfVAorZXh0ZXJuIF9JT193aW50X3QgX193dW5kZXJmbG93IChfSU9fRklMRSAqKTsKK2V4dGVybiBfSU9fd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKTsKK2V4dGVybiBfSU9fd2ludF90IF9fd292ZXJmbG93IChfSU9fRklMRSAqLCBfSU9fd2ludF90KTsKKyNlbmRpZgorCisjaWYgIF9fR05VQ19fID49IDMKKyMgZGVmaW5lIF9JT19CRShleHByLCByZXMpIF9fYnVpbHRpbl9leHBlY3QgKChleHByKSwgcmVzKQorI2Vsc2UKKyMgZGVmaW5lIF9JT19CRShleHByLCByZXMpIChleHByKQorI2VuZGlmCisKKyNkZWZpbmUgX0lPX2dldGNfdW5sb2NrZWQoX2ZwKSBcCisgICAgICAgKF9JT19CRSAoKF9mcCktPl9JT19yZWFkX3B0ciA+PSAoX2ZwKS0+X0lPX3JlYWRfZW5kLCAwKSBcCisJPyBfX3VmbG93IChfZnApIDogKih1bnNpZ25lZCBjaGFyICopIChfZnApLT5fSU9fcmVhZF9wdHIrKykKKyNkZWZpbmUgX0lPX3BlZWtjX3VubG9ja2VkKF9mcCkgXAorICAgICAgIChfSU9fQkUgKChfZnApLT5fSU9fcmVhZF9wdHIgPj0gKF9mcCktPl9JT19yZWFkX2VuZCwgMCkgXAorCSAgJiYgX191bmRlcmZsb3cgKF9mcCkgPT0gRU9GID8gRU9GIFwKKwk6ICoodW5zaWduZWQgY2hhciAqKSAoX2ZwKS0+X0lPX3JlYWRfcHRyKQorI2RlZmluZSBfSU9fcHV0Y191bmxvY2tlZChfY2gsIF9mcCkgXAorICAgKF9JT19CRSAoKF9mcCktPl9JT193cml0ZV9wdHIgPj0gKF9mcCktPl9JT193cml0ZV9lbmQsIDApIFwKKyAgICA/IF9fb3ZlcmZsb3cgKF9mcCwgKHVuc2lnbmVkIGNoYXIpIChfY2gpKSBcCisgICAgOiAodW5zaWduZWQgY2hhcikgKCooX2ZwKS0+X0lPX3dyaXRlX3B0cisrID0gKF9jaCkpKQorCisjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIF9HTElCQ1BQX1VTRV9XQ0hBUl9UCisjIGRlZmluZSBfSU9fZ2V0d2NfdW5sb2NrZWQoX2ZwKSBcCisgIChfSU9fQkUgKChfZnApLT5fd2lkZV9kYXRhLT5fSU9fcmVhZF9wdHIgPj0gKF9mcCktPl93aWRlX2RhdGEtPl9JT19yZWFkX2VuZCxcCisJICAgMCkgXAorICAgPyBfX3d1ZmxvdyAoX2ZwKSA6IChfSU9fd2ludF90KSAqKF9mcCktPl93aWRlX2RhdGEtPl9JT19yZWFkX3B0cisrKQorIyBkZWZpbmUgX0lPX3B1dHdjX3VubG9ja2VkKF93Y2gsIF9mcCkgXAorICAoX0lPX0JFICgoX2ZwKS0+X3dpZGVfZGF0YS0+X0lPX3dyaXRlX3B0ciBcCisJICAgPj0gKF9mcCktPl93aWRlX2RhdGEtPl9JT193cml0ZV9lbmQsIDApIFwKKyAgID8gX193b3ZlcmZsb3cgKF9mcCwgX3djaCkgXAorICAgOiAoX0lPX3dpbnRfdCkgKCooX2ZwKS0+X3dpZGVfZGF0YS0+X0lPX3dyaXRlX3B0cisrID0gKF93Y2gpKSkKKyNlbmRpZgorCisjZGVmaW5lIF9JT19mZW9mX3VubG9ja2VkKF9fZnApICgoKF9fZnApLT5fZmxhZ3MgJiBfSU9fRU9GX1NFRU4pICE9IDApCisjZGVmaW5lIF9JT19mZXJyb3JfdW5sb2NrZWQoX19mcCkgKCgoX19mcCktPl9mbGFncyAmIF9JT19FUlJfU0VFTikgIT0gMCkKKworZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApOworZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApOworZXh0ZXJuIGludCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIF9fVEhST1c7CitleHRlcm4gaW50IF9JT19mZXJyb3IgKF9JT19GSUxFICpfX2ZwKSBfX1RIUk9XOworCitleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxFICpfX2ZwKTsKKworLyogVGhpcyBvbmUgaXMgZm9yIEVtYWNzLiAqLworI2RlZmluZSBfSU9fUEVORElOR19PVVRQVVRfQ09VTlQoX2ZwKQlcCisJKChfZnApLT5fSU9fd3JpdGVfcHRyIC0gKF9mcCktPl9JT193cml0ZV9iYXNlKQorCitleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklMRSAqKSBfX1RIUk9XOworZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSBfX1RIUk9XOworZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSBfX1RIUk9XOworCisjaWZkZWYgX0lPX01UU0FGRV9JTworIyBkZWZpbmUgX0lPX3BlZWtjKF9mcCkgX0lPX3BlZWtjX2xvY2tlZCAoX2ZwKQorIyBkZWZpbmUgX0lPX2Zsb2NrZmlsZShfZnApIFwKKyAgaWYgKCgoX2ZwKS0+X2ZsYWdzICYgX0lPX1VTRVJfTE9DSykgPT0gMCkgX0lPX2Zsb2NrZmlsZSAoX2ZwKQorIyBkZWZpbmUgX0lPX2Z1bmxvY2tmaWxlKF9mcCkgXAorICBpZiAoKChfZnApLT5fZmxhZ3MgJiBfSU9fVVNFUl9MT0NLKSA9PSAwKSBfSU9fZnVubG9ja2ZpbGUgKF9mcCkKKyNlbHNlCisjIGRlZmluZSBfSU9fcGVla2MoX2ZwKSBfSU9fcGVla2NfdW5sb2NrZWQgKF9mcCkKKyMgZGVmaW5lIF9JT19mbG9ja2ZpbGUoX2ZwKSAvKiovCisjIGRlZmluZSBfSU9fZnVubG9ja2ZpbGUoX2ZwKSAvKiovCisjIGRlZmluZSBfSU9fZnRyeWxvY2tmaWxlKF9mcCkgLyoqLworIyBkZWZpbmUgX0lPX2NsZWFudXBfcmVnaW9uX3N0YXJ0KF9mY3QsIF9mcCkgLyoqLworIyBkZWZpbmUgX0lPX2NsZWFudXBfcmVnaW9uX2VuZChfRG9pdCkgLyoqLworI2VuZGlmIC8qICFfSU9fTVRTQUZFX0lPICovCisKK2V4dGVybiBpbnQgX0lPX3Zmc2NhbmYgKF9JT19GSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsCisJCQlfSU9fdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KTsKK2V4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwKKwkJCSBfSU9fdmFfbGlzdCk7CitleHRlcm4gX0lPX3NzaXplX3QgX0lPX3BhZG4gKF9JT19GSUxFICosIGludCwgX0lPX3NzaXplX3QpOworZXh0ZXJuIF9JT19zaXplX3QgX0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIF9JT19zaXplX3QpOworCitleHRlcm4gX0lPX29mZjY0X3QgX0lPX3NlZWtvZmYgKF9JT19GSUxFICosIF9JT19vZmY2NF90LCBpbnQsIGludCk7CitleHRlcm4gX0lPX29mZjY0X3QgX0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9JT19vZmY2NF90LCBpbnQpOworCitleHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgX19USFJPVzsKKworI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBfR0xJQkNQUF9VU0VfV0NIQVJfVAorZXh0ZXJuIF9JT193aW50X3QgX0lPX2dldHdjIChfSU9fRklMRSAqX19mcCk7CitleHRlcm4gX0lPX3dpbnRfdCBfSU9fcHV0d2MgKHdjaGFyX3QgX193YywgX0lPX0ZJTEUgKl9fZnApOworZXh0ZXJuIGludCBfSU9fZndpZGUgKF9JT19GSUxFICpfX2ZwLCBpbnQgX19tb2RlKSBfX1RIUk9XOworIyBpZiBfX0dOVUNfXyA+PSAyCisvKiBXaGlsZSBjb21waWxpbmcgZ2xpYmMgd2UgaGF2ZSB0byBoYW5kbGUgY29tcGF0aWJpbGl0eSB3aXRoIHZlcnkgb2xkCisgICB2ZXJzaW9ucy4gICovCisjICBpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgU0hBUkVECisjICAgaW5jbHVkZSA8c2hsaWItY29tcGF0Lmg+CisjICAgaWYgU0hMSUJfQ09NUEFUIChsaWJjLCBHTElCQ18yXzAsIEdMSUJDXzJfMSkKKyMgICAgZGVmaW5lIF9JT19md2lkZV9tYXliZV9pbmNvbXBhdGlibGUgXAorICAoX19idWlsdGluX2V4cGVjdCAoJl9JT19zdGRpbl91c2VkID09IE5VTEwsIDApKQorZXh0ZXJuIGNvbnN0IGludCBfSU9fc3RkaW5fdXNlZDsKK3dlYWtfZXh0ZXJuIChfSU9fc3RkaW5fdXNlZCk7CisjICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZm5kZWYgX0lPX2Z3aWRlX21heWJlX2luY29tcGF0aWJsZQorIyAgIGRlZmluZSBfSU9fZndpZGVfbWF5YmVfaW5jb21wYXRpYmxlICgwKQorIyAgZW5kaWYKKy8qIEEgc3BlY2lhbCBvcHRpbWl6ZWQgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24gYWJvdmUuICBJdCBvcHRpbWl6ZXMgdGhlCisgICBjYXNlIG9mIGluaXRpYWxpemluZyBhbiB1bm9yaWVudGVkIGJ5dGUgc3RyZWFtLiAgKi8KKyMgIGRlZmluZSBfSU9fZndpZGUoX19mcCwgX19tb2RlKSBcCisgICh7IGludCBfX3Jlc3VsdCA9IChfX21vZGUpOwkJCQkJCSAgICAgIFwKKyAgICAgaWYgKF9fcmVzdWx0IDwgMCAmJiAhIF9JT19md2lkZV9tYXliZV9pbmNvbXBhdGlibGUpCQkgICAgICBcCisgICAgICAgewkJCQkJCQkJICAgICAgXAorCSBpZiAoKF9fZnApLT5fbW9kZSA9PSAwKQkJCQkJICAgICAgXAorCSAgIC8qIFdlIGtub3cgdGhhdCBhbGwgd2UgaGF2ZSB0byBkbyBpcyB0byBzZXQgdGhlIGZsYWcuICAqLwkgICAgICBcCisJICAgKF9fZnApLT5fbW9kZSA9IC0xOwkJCQkJCSAgICAgIFwKKwkgX19yZXN1bHQgPSAoX19mcCktPl9tb2RlOwkJCQkJICAgICAgXAorICAgICAgIH0JCQkJCQkJCSAgICAgIFwKKyAgICAgZWxzZSBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKF9fbW9kZSkgJiYgKF9fbW9kZSkgPT0gMCkJCSAgICAgIFwKKyAgICAgICBfX3Jlc3VsdCA9IF9JT19md2lkZV9tYXliZV9pbmNvbXBhdGlibGUgPyAtMSA6IChfX2ZwKS0+X21vZGU7CSAgICAgIFwKKyAgICAgZWxzZQkJCQkJCQkJICAgICAgXAorICAgICAgIF9fcmVzdWx0ID0gX0lPX2Z3aWRlIChfX2ZwLCBfX3Jlc3VsdCk7CQkJCSAgICAgIFwKKyAgICAgX19yZXN1bHQ7IH0pCisjIGVuZGlmCisKK2V4dGVybiBpbnQgX0lPX3Zmd3NjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0LAorCQkJIF9JT192YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpOworZXh0ZXJuIGludCBfSU9fdmZ3cHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCwKKwkJCSAgX0lPX3ZhX2xpc3QpOworZXh0ZXJuIF9JT19zc2l6ZV90IF9JT193cGFkbiAoX0lPX0ZJTEUgKiwgd2ludF90LCBfSU9fc3NpemVfdCk7CitleHRlcm4gdm9pZCBfSU9fZnJlZV93YmFja3VwX2FyZWEgKF9JT19GSUxFICopIF9fVEhST1c7CisjZW5kaWYKKworI2lmZGVmIF9fTERCTF9DT01QQVQKKyMgaW5jbHVkZSA8Yml0cy9saWJpby1sZGJsLmg+CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9JT19TVERJT19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGltaXRzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGltaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U5YTVkZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW1pdHMuaApAQCAtMCwwICsxLDE1NCBAQAorLyogQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDA1CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyoKKyAqCUlTTyBDOTkgU3RhbmRhcmQ6IDcuMTAvNS4yLjQuMi4xIFNpemVzIG9mIGludGVnZXIgdHlwZXMJPGxpbWl0cy5oPgorICovCisKKyNpZm5kZWYgX0xJQkNfTElNSVRTX0hfCisjZGVmaW5lIF9MSUJDX0xJTUlUU19IXwkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCisKKy8qIE1heGltdW0gbGVuZ3RoIG9mIGFueSBtdWx0aWJ5dGUgY2hhcmFjdGVyIGluIGFueSBsb2NhbGUuCisgICBXZSBkZWZpbmUgdGhpcyB2YWx1ZSBoZXJlIHNpbmNlIHRoZSBnY2MgaGVhZGVyIGRvZXMgbm90IGRlZmluZQorICAgdGhlIGNvcnJlY3QgdmFsdWUuICAqLworI2RlZmluZSBNQl9MRU5fTUFYCTE2CisKKworLyogSWYgd2UgYXJlIG5vdCB1c2luZyBHTlUgQ0Mgd2UgaGF2ZSB0byBkZWZpbmUgYWxsIHRoZSBzeW1ib2xzIG91cnNlbGYuCisgICBPdGhlcndpc2UgdXNlIGdjYydzIGRlZmluaXRpb25zIChzZWUgYmVsb3cpLiAgKi8KKyNpZiAhZGVmaW5lZCBfX0dOVUNfXyB8fCBfX0dOVUNfXyA8IDIKKworLyogV2Ugb25seSBwcm90ZWN0IGZyb20gbXVsdGlwbGUgaW5jbHVzaW9uIGhlcmUsIGJlY2F1c2UgYWxsIHRoZSBvdGhlcgorICAgI2luY2x1ZGUncyBwcm90ZWN0IHRoZW1zZWx2ZXMsIGFuZCBpbiBHQ0MgMiB3ZSBtYXkgI2luY2x1ZGVfbmV4dCB0aHJvdWdoCisgICBtdWx0aXBsZSBjb3BpZXMgb2YgdGhpcyBmaWxlIGJlZm9yZSB3ZSBnZXQgdG8gR0NDJ3MuICAqLworIyBpZm5kZWYgX0xJTUlUU19ICisjICBkZWZpbmUgX0xJTUlUU19ICTEKKworI2luY2x1ZGUgPGJpdHMvd29yZHNpemUuaD4KKworLyogV2UgZG9uJ3QgaGF2ZSAjaW5jbHVkZV9uZXh0LgorICAgRGVmaW5lIEFOU0kgPGxpbWl0cy5oPiBmb3Igc3RhbmRhcmQgMzItYml0IHdvcmRzLiAgKi8KKworLyogVGhlc2UgYXNzdW1lIDgtYml0IGBjaGFyJ3MsIDE2LWJpdCBgc2hvcnQgaW50J3MsCisgICBhbmQgMzItYml0IGBpbnQncyBhbmQgYGxvbmcgaW50J3MuICAqLworCisvKiBOdW1iZXIgb2YgYml0cyBpbiBhIGBjaGFyJy4JKi8KKyMgIGRlZmluZSBDSEFSX0JJVAk4CisKKy8qIE1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGEgYHNpZ25lZCBjaGFyJyBjYW4gaG9sZC4gICovCisjICBkZWZpbmUgU0NIQVJfTUlOCSgtMTI4KQorIyAgZGVmaW5lIFNDSEFSX01BWAkxMjcKKworLyogTWF4aW11bSB2YWx1ZSBhbiBgdW5zaWduZWQgY2hhcicgY2FuIGhvbGQuICAoTWluaW11bSBpcyAwLikgICovCisjICBkZWZpbmUgVUNIQVJfTUFYCTI1NQorCisvKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBhIGBjaGFyJyBjYW4gaG9sZC4gICovCisjICBpZmRlZiBfX0NIQVJfVU5TSUdORURfXworIyAgIGRlZmluZSBDSEFSX01JTgkwCisjICAgZGVmaW5lIENIQVJfTUFYCVVDSEFSX01BWAorIyAgZWxzZQorIyAgIGRlZmluZSBDSEFSX01JTglTQ0hBUl9NSU4KKyMgICBkZWZpbmUgQ0hBUl9NQVgJU0NIQVJfTUFYCisjICBlbmRpZgorCisvKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBhIGBzaWduZWQgc2hvcnQgaW50JyBjYW4gaG9sZC4gICovCisjICBkZWZpbmUgU0hSVF9NSU4JKC0zMjc2OCkKKyMgIGRlZmluZSBTSFJUX01BWAkzMjc2NworCisvKiBNYXhpbXVtIHZhbHVlIGFuIGB1bnNpZ25lZCBzaG9ydCBpbnQnIGNhbiBob2xkLiAgKE1pbmltdW0gaXMgMC4pICAqLworIyAgZGVmaW5lIFVTSFJUX01BWAk2NTUzNQorCisvKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBhIGBzaWduZWQgaW50JyBjYW4gaG9sZC4gICovCisjICBkZWZpbmUgSU5UX01JTgkoLUlOVF9NQVggLSAxKQorIyAgZGVmaW5lIElOVF9NQVgJMjE0NzQ4MzY0NworCisvKiBNYXhpbXVtIHZhbHVlIGFuIGB1bnNpZ25lZCBpbnQnIGNhbiBob2xkLiAgKE1pbmltdW0gaXMgMC4pICAqLworIyAgZGVmaW5lIFVJTlRfTUFYCTQyOTQ5NjcyOTVVCisKKy8qIE1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGEgYHNpZ25lZCBsb25nIGludCcgY2FuIGhvbGQuICAqLworIyAgaWYgX19XT1JEU0laRSA9PSA2NAorIyAgIGRlZmluZSBMT05HX01BWAk5MjIzMzcyMDM2ODU0Nzc1ODA3TAorIyAgZWxzZQorIyAgIGRlZmluZSBMT05HX01BWAkyMTQ3NDgzNjQ3TAorIyAgZW5kaWYKKyMgIGRlZmluZSBMT05HX01JTgkoLUxPTkdfTUFYIC0gMUwpCisKKy8qIE1heGltdW0gdmFsdWUgYW4gYHVuc2lnbmVkIGxvbmcgaW50JyBjYW4gaG9sZC4gIChNaW5pbXVtIGlzIDAuKSAgKi8KKyMgIGlmIF9fV09SRFNJWkUgPT0gNjQKKyMgICBkZWZpbmUgVUxPTkdfTUFYCTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUwKKyMgIGVsc2UKKyMgICBkZWZpbmUgVUxPTkdfTUFYCTQyOTQ5NjcyOTVVTAorIyAgZW5kaWYKKworIyAgaWZkZWYgX19VU0VfSVNPQzk5CisKKy8qIE1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGEgYHNpZ25lZCBsb25nIGxvbmcgaW50JyBjYW4gaG9sZC4gICovCisjICAgZGVmaW5lIExMT05HX01BWAk5MjIzMzcyMDM2ODU0Nzc1ODA3TEwKKyMgICBkZWZpbmUgTExPTkdfTUlOCSgtTExPTkdfTUFYIC0gMUxMKQorCisvKiBNYXhpbXVtIHZhbHVlIGFuIGB1bnNpZ25lZCBsb25nIGxvbmcgaW50JyBjYW4gaG9sZC4gIChNaW5pbXVtIGlzIDAuKSAgKi8KKyMgICBkZWZpbmUgVUxMT05HX01BWAkxODQ0Njc0NDA3MzcwOTU1MTYxNVVMTAorCisjICBlbmRpZiAvKiBJU08gQzk5ICovCisKKyMgZW5kaWYJLyogbGltaXRzLmggICovCisjZW5kaWYJLyogR0NDIDIuICAqLworCisjZW5kaWYJLyogIV9MSUJDX0xJTUlUU19IXyAqLworCisgLyogR2V0IHRoZSBjb21waWxlcidzIGxpbWl0cy5oLCB3aGljaCBkZWZpbmVzIGFsbW9zdCBhbGwgdGhlIElTTyBjb25zdGFudHMuCisKKyAgICBXZSBwdXQgdGhpcyAjaW5jbHVkZV9uZXh0IG91dHNpZGUgdGhlIGRvdWJsZSBpbmNsdXNpb24gY2hlY2sgYmVjYXVzZQorICAgIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBpbmNsdWRlIHRoaXMgZmlsZSBtb3JlIHRoYW4gb25jZSBhbmQgc3RpbGwgZ2V0CisgICAgdGhlIGRlZmluaXRpb25zIGZyb20gZ2NjJ3MgaGVhZGVyLiAgKi8KKyNpZiBkZWZpbmVkIF9fR05VQ19fICYmICFkZWZpbmVkIF9HQ0NfTElNSVRTX0hfCisvKiBgX0dDQ19MSU1JVFNfSF8nIGlzIHdoYXQgR0NDJ3MgZmlsZSBkZWZpbmVzLiAgKi8KKyMgaW5jbHVkZV9uZXh0IDxsaW1pdHMuaD4KKyNlbmRpZgorCisvKiBUaGUgPGxpbWl0cy5oPiBmaWxlcyBpbiBzb21lIGdjYyB2ZXJzaW9ucyBkb24ndCBkZWZpbmUgTExPTkdfTUlOLAorICAgTExPTkdfTUFYLCBhbmQgVUxMT05HX01BWC4gIEluc3RlYWQgb25seSB0aGUgdmFsdWVzIGdjYyBkZWZpbmVkIGZvcgorICAgYWdlcyBhcmUgYXZhaWxhYmxlLiAgKi8KKyNpZiBkZWZpbmVkIF9fVVNFX0lTT0M5OSAmJiBkZWZpbmVkIF9fR05VQ19fCisjIGlmbmRlZiBMTE9OR19NSU4KKyMgIGRlZmluZSBMTE9OR19NSU4JKC1MTE9OR19NQVgtMSkKKyMgZW5kaWYKKyMgaWZuZGVmIExMT05HX01BWAorIyAgZGVmaW5lIExMT05HX01BWAlfX0xPTkdfTE9OR19NQVhfXworIyBlbmRpZgorIyBpZm5kZWYgVUxMT05HX01BWAorIyAgZGVmaW5lIFVMTE9OR19NQVgJKExMT05HX01BWCAqIDJVTEwgKyAxKQorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZglfX1VTRV9QT1NJWAorLyogUE9TSVggYWRkcyB0aGluZ3MgdG8gPGxpbWl0cy5oPi4gICovCisjIGluY2x1ZGUgPGJpdHMvcG9zaXgxX2xpbS5oPgorI2VuZGlmCisKKyNpZmRlZglfX1VTRV9QT1NJWDIKKyMgaW5jbHVkZSA8Yml0cy9wb3NpeDJfbGltLmg+CisjZW5kaWYKKworI2lmZGVmCV9fVVNFX1hPUEVOCisjIGluY2x1ZGUgPGJpdHMveG9wZW5fbGltLmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW5rLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGluay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NjUzMWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGluay5oCkBAIC0wLDAgKzEsMTk0IEBACisvKiBEYXRhIHN0cnVjdHVyZSBmb3IgY29tbXVuaWNhdGlvbiBmcm9tIHRoZSBydW4tdGltZSBkeW5hbWljIGxpbmtlciBmb3IKKyAgIGxvYWRlZCBFTEYgc2hhcmVkIG9iamVjdHMuCisgICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMSwgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZglfTElOS19ICisjZGVmaW5lCV9MSU5LX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxlbGYuaD4KKyNpbmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisvKiBXZSB1c2UgdGhpcyBtYWNybyB0byByZWZlciB0byBFTEYgdHlwZXMgaW5kZXBlbmRlbnQgb2YgdGhlIG5hdGl2ZSB3b3Jkc2l6ZS4KKyAgIGBFbGZXKFRZUEUpJyBpcyB1c2VkIGluIHBsYWNlIG9mIGBFbGYzMl9UWVBFJyBvciBgRWxmNjRfVFlQRScuICAqLworI2RlZmluZSBFbGZXKHR5cGUpCV9FbGZXIChFbGYsIF9fRUxGX05BVElWRV9DTEFTUywgdHlwZSkKKyNkZWZpbmUgX0VsZlcoZSx3LHQpCV9FbGZXXzEgKGUsIHcsIF8jI3QpCisjZGVmaW5lIF9FbGZXXzEoZSx3LHQpCWUjI3cjI3QKKworI2luY2x1ZGUgPGJpdHMvZWxmY2xhc3MuaD4JCS8qIERlZmluZXMgX19FTEZfTkFUSVZFX0NMQVNTLiAgKi8KKyNpbmNsdWRlIDxiaXRzL2xpbmsuaD4KKworLyogUmVuZGV6dm91cyBzdHJ1Y3R1cmUgdXNlZCBieSB0aGUgcnVuLXRpbWUgZHluYW1pYyBsaW5rZXIgdG8gY29tbXVuaWNhdGUKKyAgIGRldGFpbHMgb2Ygc2hhcmVkIG9iamVjdCBsb2FkaW5nIHRvIHRoZSBkZWJ1Z2dlci4gIElmIHRoZSBleGVjdXRhYmxlJ3MKKyAgIGR5bmFtaWMgc2VjdGlvbiBoYXMgYSBEVF9ERUJVRyBlbGVtZW50LCB0aGUgcnVuLXRpbWUgbGlua2VyIHNldHMgdGhhdAorICAgZWxlbWVudCdzIHZhbHVlIHRvIHRoZSBhZGRyZXNzIHdoZXJlIHRoaXMgc3RydWN0dXJlIGNhbiBiZSBmb3VuZC4gICovCisKK3N0cnVjdCByX2RlYnVnCisgIHsKKyAgICBpbnQgcl92ZXJzaW9uOwkJLyogVmVyc2lvbiBudW1iZXIgZm9yIHRoaXMgcHJvdG9jb2wuICAqLworCisgICAgc3RydWN0IGxpbmtfbWFwICpyX21hcDsJLyogSGVhZCBvZiB0aGUgY2hhaW4gb2YgbG9hZGVkIG9iamVjdHMuICAqLworCisgICAgLyogVGhpcyBpcyB0aGUgYWRkcmVzcyBvZiBhIGZ1bmN0aW9uIGludGVybmFsIHRvIHRoZSBydW4tdGltZSBsaW5rZXIsCisgICAgICAgdGhhdCB3aWxsIGFsd2F5cyBiZSBjYWxsZWQgd2hlbiB0aGUgbGlua2VyIGJlZ2lucyB0byBtYXAgaW4gYQorICAgICAgIGxpYnJhcnkgb3IgdW5tYXAgaXQsIGFuZCBhZ2FpbiB3aGVuIHRoZSBtYXBwaW5nIGNoYW5nZSBpcyBjb21wbGV0ZS4KKyAgICAgICBUaGUgZGVidWdnZXIgY2FuIHNldCBhIGJyZWFrcG9pbnQgYXQgdGhpcyBhZGRyZXNzIGlmIGl0IHdhbnRzIHRvCisgICAgICAgbm90aWNlIHNoYXJlZCBvYmplY3QgbWFwcGluZyBjaGFuZ2VzLiAgKi8KKyAgICBFbGZXKEFkZHIpIHJfYnJrOworICAgIGVudW0KKyAgICAgIHsKKwkvKiBUaGlzIHN0YXRlIHZhbHVlIGRlc2NyaWJlcyB0aGUgbWFwcGluZyBjaGFuZ2UgdGFraW5nIHBsYWNlIHdoZW4KKwkgICB0aGUgYHJfYnJrJyBhZGRyZXNzIGlzIGNhbGxlZC4gICovCisJUlRfQ09OU0lTVEVOVCwJCS8qIE1hcHBpbmcgY2hhbmdlIGlzIGNvbXBsZXRlLiAgKi8KKwlSVF9BREQsCQkJLyogQmVnaW5uaW5nIHRvIGFkZCBhIG5ldyBvYmplY3QuICAqLworCVJUX0RFTEVURQkJLyogQmVnaW5uaW5nIHRvIHJlbW92ZSBhbiBvYmplY3QgbWFwcGluZy4gICovCisgICAgICB9IHJfc3RhdGU7CisKKyAgICBFbGZXKEFkZHIpIHJfbGRiYXNlOwkvKiBCYXNlIGFkZHJlc3MgdGhlIGxpbmtlciBpcyBsb2FkZWQgYXQuICAqLworICB9OworCisvKiBUaGlzIGlzIHRoZSBpbnN0YW5jZSBvZiB0aGF0IHN0cnVjdHVyZSB1c2VkIGJ5IHRoZSBkeW5hbWljIGxpbmtlci4gICovCitleHRlcm4gc3RydWN0IHJfZGVidWcgX3JfZGVidWc7CisKKy8qIFRoaXMgc3ltYm9sIHJlZmVycyB0byB0aGUgImR5bmFtaWMgc3RydWN0dXJlIiBpbiB0aGUgYC5keW5hbWljJyBzZWN0aW9uCisgICBvZiB3aGF0ZXZlciBtb2R1bGUgcmVmZXJzIHRvIGBfRFlOQU1JQycuICBTbywgdG8gZmluZCBpdHMgb3duCisgICBgc3RydWN0IHJfZGVidWcnLCBhIHByb2dyYW0gY291bGQgZG86CisgICAgIGZvciAoZHluID0gX0RZTkFNSUM7IGR5bi0+ZF90YWcgIT0gRFRfTlVMTDsgKytkeW4pCisgICAgICAgaWYgKGR5bi0+ZF90YWcgPT0gRFRfREVCVUcpCisJIHJfZGVidWcgPSAoc3RydWN0IHJfZGVidWcgKikgZHluLT5kX3VuLmRfcHRyOworICAgKi8KK2V4dGVybiBFbGZXKER5bikgX0RZTkFNSUNbXTsKKworLyogU3RydWN0dXJlIGRlc2NyaWJpbmcgYSBsb2FkZWQgc2hhcmVkIG9iamVjdC4gIFRoZSBgbF9uZXh0JyBhbmQgYGxfcHJldicKKyAgIG1lbWJlcnMgZm9ybSBhIGNoYWluIG9mIGFsbCB0aGUgc2hhcmVkIG9iamVjdHMgbG9hZGVkIGF0IHN0YXJ0dXAuCisKKyAgIFRoZXNlIGRhdGEgc3RydWN0dXJlcyBleGlzdCBpbiBzcGFjZSB1c2VkIGJ5IHRoZSBydW4tdGltZSBkeW5hbWljIGxpbmtlcjsKKyAgIG1vZGlmeWluZyB0aGVtIG1heSBoYXZlIGRpc2FzdHJvdXMgcmVzdWx0cy4gICovCisKK3N0cnVjdCBsaW5rX21hcAorICB7CisgICAgLyogVGhlc2UgZmlyc3QgZmV3IG1lbWJlcnMgYXJlIHBhcnQgb2YgdGhlIHByb3RvY29sIHdpdGggdGhlIGRlYnVnZ2VyLgorICAgICAgIFRoaXMgaXMgdGhlIHNhbWUgZm9ybWF0IHVzZWQgaW4gU1ZSNC4gICovCisKKyAgICBFbGZXKEFkZHIpIGxfYWRkcjsJCS8qIEJhc2UgYWRkcmVzcyBzaGFyZWQgb2JqZWN0IGlzIGxvYWRlZCBhdC4gICovCisgICAgY2hhciAqbF9uYW1lOwkJLyogQWJzb2x1dGUgZmlsZSBuYW1lIG9iamVjdCB3YXMgZm91bmQgaW4uICAqLworICAgIEVsZlcoRHluKSAqbF9sZDsJCS8qIER5bmFtaWMgc2VjdGlvbiBvZiB0aGUgc2hhcmVkIG9iamVjdC4gICovCisgICAgc3RydWN0IGxpbmtfbWFwICpsX25leHQsICpsX3ByZXY7IC8qIENoYWluIG9mIGxvYWRlZCBvYmplY3RzLiAgKi8KKyAgfTsKKworI2lmZGVmIF9fVVNFX0dOVQorCisvKiBWZXJzaW9uIG51bWJlcnMgZm9yIGxhX3ZlcnNpb24gaGFuZHNoYWtlIGludGVyZmFjZS4gICovCisjZGVmaW5lIExBVl9DVVJSRU5UCTEKKworLyogQWN0aXZpdHkgdHlwZXMgc2lnbmFsZWQgdGhyb3VnaCBsYV9hY3Rpdml0eS4gICovCitlbnVtCisgIHsKKyAgICBMQV9BQ1RfQ09OU0lTVEVOVCwJCS8qIExpbmsgbWFwIGNvbnNpc3RlbnQgYWdhaW4uICAqLworICAgIExBX0FDVF9BREQsCQkJLyogTmV3IG9iamVjdCB3aWxsIGJlIGFkZGVkLiAgKi8KKyAgICBMQV9BQ1RfREVMRVRFCQkvKiBPYmplY3RzIHdpbGwgYmUgcmVtb3ZlZC4gICovCisgIH07CisKKy8qIFZhbHVlcyByZXByZXNlbnRpbmcgb3JpZ2luIG9mIG5hbWUgZm9yIGR5bmFtaWMgbG9hZGluZy4gICovCitlbnVtCisgIHsKKyAgICBMQV9TRVJfT1JJRyA9IDB4MDEsCQkvKiBPcmlnaW5hbCBuYW1lLiAgKi8KKyAgICBMQV9TRVJfTElCUEFUSCA9IDB4MDIsCS8qIERpcmVjdG9yeSBmcm9tIExEX0xJQlJBUllfUEFUSC4gICovCisgICAgTEFfU0VSX1JVTlBBVEggPSAweDA0LAkvKiBEaXJlY3RvcnkgZnJvbSBSUEFUSC9SVU5QQVRILiAgKi8KKyAgICBMQV9TRVJfQ09ORklHID0gMHgwOCwJLyogRm91bmQgdGhyb3VnaCBsZGNvbmZpZy4gICovCisgICAgTEFfU0VSX0RFRkFVTFQgPSAweDQwLAkvKiBEZWZhdWx0IGRpcmVjdG9yeS4gICovCisgICAgTEFfU0VSX1NFQ1VSRSA9IDB4ODAJLyogVW51c2VkLiAgKi8KKyAgfTsKKworLyogVmFsdWVzIGZvciBsYV9vYmpvcGVuIHJldHVybiB2YWx1ZS4gICovCitlbnVtCisgIHsKKyAgICBMQV9GTEdfQklORFRPID0gMHgwMSwJLyogQXVkaXQgc3ltYm9scyBib3VuZCB0byB0aGlzIG9iamVjdC4gICovCisgICAgTEFfRkxHX0JJTkRGUk9NID0gMHgwMgkvKiBBdWRpdCBzeW1ib2xzIGJvdW5kIGZyb20gdGhpcyBvYmplY3QuICAqLworICB9OworCisvKiBWYWx1ZXMgZm9yIGxhX3N5bWJpbmQgZmxhZ3MgcGFyYW1ldGVyLiAgKi8KK2VudW0KKyAgeworICAgIExBX1NZTUJfTk9QTFRFTlRFUiA9IDB4MDEsCS8qIGxhX3BsdGVudGVyIHdpbGwgbm90IGJlIGNhbGxlZC4gICovCisgICAgTEFfU1lNQl9OT1BMVEVYSVQgPSAweDAyLAkvKiBsYV9wbHRleGl0IHdpbGwgbm90IGJlIGNhbGxlZC4gICovCisgICAgTEFfU1lNQl9TVFJVQ1RDQUxMID0gMHgwNCwJLyogUmV0dXJuIHZhbHVlIGlzIGEgc3RydWN0dXJlLiAgKi8KKyAgICBMQV9TWU1CX0RMU1lNID0gMHgwOCwJLyogQmluZGluZyBkdWUgdG8gZGxzeW0gY2FsbC4gICovCisgICAgTEFfU1lNQl9BTFRWQUxVRSA9IDB4MTAJLyogVmFsdWUgaGFzIGJlZW4gY2hhbmdlZCBieSBhIHByZXZpb3VzCisJCQkJICAgbGFfc3ltYmluZCBjYWxsLiAgKi8KKyAgfTsKKworc3RydWN0IGRsX3BoZHJfaW5mbworICB7CisgICAgRWxmVyhBZGRyKSBkbHBpX2FkZHI7CisgICAgY29uc3QgY2hhciAqZGxwaV9uYW1lOworICAgIGNvbnN0IEVsZlcoUGhkcikgKmRscGlfcGhkcjsKKyAgICBFbGZXKEhhbGYpIGRscGlfcGhudW07CisKKyAgICAvKiBOb3RlOiBGb2xsb3dpbmcgbWVtYmVycyB3ZXJlIGludHJvZHVjZWQgYWZ0ZXIgdGhlIGZpcnN0CisgICAgICAgdmVyc2lvbiBvZiB0aGlzIHN0cnVjdHVyZSB3YXMgYXZhaWxhYmxlLiAgQ2hlY2sgdGhlIFNJWkUKKyAgICAgICBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGRsX2l0ZXJhdGVfcGhkciBjYWxsYmFjayB0byBkZXRlcm1pbmUKKyAgICAgICB3aGV0aGVyIG9yIG5vdCBlYWNoIGxhdGVyIG1lbWJlciBpcyBhdmFpbGFibGUuICAqLworCisgICAgLyogSW5jcmVtZW50ZWQgd2hlbiBhIG5ldyBvYmplY3QgbWF5IGhhdmUgYmVlbiBhZGRlZC4gICovCisgICAgdW5zaWduZWQgbG9uZyBsb25nIGludCBkbHBpX2FkZHM7CisgICAgLyogSW5jcmVtZW50ZWQgd2hlbiBhbiBvYmplY3QgbWF5IGhhdmUgYmVlbiByZW1vdmVkLiAgKi8KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IGRscGlfc3ViczsKKworICAgIC8qIElmIHRoZXJlIGlzIGEgUFRfVExTIHNlZ21lbnQsIGl0cyBtb2R1bGUgSUQgYXMgdXNlZCBpbgorICAgICAgIFRMUyByZWxvY2F0aW9ucywgZWxzZSB6ZXJvLiAgKi8KKyAgICBzaXplX3QgZGxwaV90bHNfbW9kaWQ7CisKKyAgICAvKiBUaGUgYWRkcmVzcyBvZiB0aGUgY2FsbGluZyB0aHJlYWQncyBpbnN0YW5jZSBvZiB0aGlzIG1vZHVsZSdzCisgICAgICAgUFRfVExTIHNlZ21lbnQsIGlmIGl0IGhhcyBvbmUgYW5kIGl0IGhhcyBiZWVuIGFsbG9jYXRlZAorICAgICAgIGluIHRoZSBjYWxsaW5nIHRocmVhZCwgb3RoZXJ3aXNlIGEgbnVsbCBwb2ludGVyLiAgKi8KKyAgICB2b2lkICpkbHBpX3Rsc19kYXRhOworICB9OworCitfX0JFR0lOX0RFQ0xTCisKK2V4dGVybiBpbnQgZGxfaXRlcmF0ZV9waGRyIChpbnQgKCpfX2NhbGxiYWNrKSAoc3RydWN0IGRsX3BoZHJfaW5mbyAqLAorCQkJCQkgICAgICAgc2l6ZV90LCB2b2lkICopLAorCQkJICAgIHZvaWQgKl9fZGF0YSk7CisKKworLyogUHJvdG90eXBlcyBmb3IgdGhlIGxkLnNvIGF1ZGl0aW5nIGludGVyZmFjZXMuICBUaGVzZSBhcmUgbm90CisgICBkZWZpbmVkIGFueXdoZXJlIGluIGxkLnNvIGJ1dCBpbnN0ZWFkIGhhdmUgdG8gYmUgcHJvdmlkZWQgYnkgdGhlCisgICBhdWRpdGluZyBEU08uICAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBsYV92ZXJzaW9uICh1bnNpZ25lZCBpbnQgX192ZXJzaW9uKTsKK2V4dGVybiB2b2lkIGxhX2FjdGl2aXR5ICh1aW50cHRyX3QgKl9fY29va2llLCB1bnNpZ25lZCBpbnQgX19mbGFnKTsKK2V4dGVybiBjaGFyICpsYV9vYmpzZWFyY2ggKGNvbnN0IGNoYXIgKl9fbmFtZSwgdWludHB0cl90ICpfX2Nvb2tpZSwKKwkJCSAgIHVuc2lnbmVkIGludCBfX2ZsYWcpOworZXh0ZXJuIHVuc2lnbmVkIGludCBsYV9vYmpvcGVuIChzdHJ1Y3QgbGlua19tYXAgKl9fbWFwLCBMbWlkX3QgX19sbWlkLAorCQkJCXVpbnRwdHJfdCAqX19jb29raWUpOworZXh0ZXJuIHZvaWQgbGFfcHJlaW5pdCAodWludHB0cl90ICpfX2Nvb2tpZSk7CitleHRlcm4gdWludHB0cl90IGxhX3N5bWJpbmQzMiAoRWxmMzJfU3ltICpfX3N5bSwgdW5zaWduZWQgaW50IF9fbmR4LAorCQkJICAgICAgIHVpbnRwdHJfdCAqX19yZWZjb29rLCB1aW50cHRyX3QgKl9fZGVmY29vaywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgKl9fZmxhZ3MsIGNvbnN0IGNoYXIgKl9fc3ltbmFtZSk7CitleHRlcm4gdWludHB0cl90IGxhX3N5bWJpbmQ2NCAoRWxmNjRfU3ltICpfX3N5bSwgdW5zaWduZWQgaW50IF9fbmR4LAorCQkJICAgICAgIHVpbnRwdHJfdCAqX19yZWZjb29rLCB1aW50cHRyX3QgKl9fZGVmY29vaywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgKl9fZmxhZ3MsIGNvbnN0IGNoYXIgKl9fc3ltbmFtZSk7CitleHRlcm4gdW5zaWduZWQgaW50IGxhX29iamNsb3NlICh1aW50cHRyX3QgKl9fY29va2llKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmCisKKyNlbmRpZiAvKiBsaW5rLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hLm91dC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2Eub3V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEyNzE5NAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hLm91dC5oCkBAIC0wLDAgKzEsMjcwIEBACisjaWZuZGVmIF9fQV9PVVRfR05VX0hfXworI2RlZmluZSBfX0FfT1VUX0dOVV9IX18KKworI2RlZmluZSBfX0dOVV9FWEVDX01BQ1JPU19fCisKKyNpZm5kZWYgX19TVFJVQ1RfRVhFQ19PVkVSUklERV9fCisKKyNpbmNsdWRlIDxhc20vYS5vdXQuaD4KKworI2VuZGlmIC8qIF9fU1RSVUNUX0VYRUNfT1ZFUlJJREVfXyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiB0aGVzZSBnbyBpbiB0aGUgTl9NQUNIVFlQRSBmaWVsZCAqLworZW51bSBtYWNoaW5lX3R5cGUgeworI2lmIGRlZmluZWQgKE1fT0xEU1VOMikKKyAgTV9fT0xEU1VOMiA9IE1fT0xEU1VOMiwKKyNlbHNlCisgIE1fT0xEU1VOMiA9IDAsCisjZW5kaWYKKyNpZiBkZWZpbmVkIChNXzY4MDEwKQorICBNX182ODAxMCA9IE1fNjgwMTAsCisjZWxzZQorICBNXzY4MDEwID0gMSwKKyNlbmRpZgorI2lmIGRlZmluZWQgKE1fNjgwMjApCisgIE1fXzY4MDIwID0gTV82ODAyMCwKKyNlbHNlCisgIE1fNjgwMjAgPSAyLAorI2VuZGlmCisjaWYgZGVmaW5lZCAoTV9TUEFSQykKKyAgTV9fU1BBUkMgPSBNX1NQQVJDLAorI2Vsc2UKKyAgTV9TUEFSQyA9IDMsCisjZW5kaWYKKyAgLyogc2tpcCBhIGJ1bmNoIHNvIHdlIGRvbid0IHJ1biBpbnRvIGFueSBvZiBzdW4ncyBudW1iZXJzICovCisgIE1fMzg2ID0gMTAwLAorICBNX01JUFMxID0gMTUxLAkvKiBNSVBTIFIzMDAwL1IzMDAwIGJpbmFyeSAqLworICBNX01JUFMyID0gMTUyCQkvKiBNSVBTIFI2MDAwL1I0MDAwIGJpbmFyeSAqLworfTsKKworI2lmICFkZWZpbmVkIChOX01BR0lDKQorI2RlZmluZSBOX01BR0lDKGV4ZWMpICgoZXhlYykuYV9pbmZvICYgMHhmZmZmKQorI2VuZGlmCisjZGVmaW5lIE5fTUFDSFRZUEUoZXhlYykgKChlbnVtIG1hY2hpbmVfdHlwZSkoKChleGVjKS5hX2luZm8gPj4gMTYpICYgMHhmZikpCisjZGVmaW5lIE5fRkxBR1MoZXhlYykgKCgoZXhlYykuYV9pbmZvID4+IDI0KSAmIDB4ZmYpCisjZGVmaW5lIE5fU0VUX0lORk8oZXhlYywgbWFnaWMsIHR5cGUsIGZsYWdzKSBcCisJKChleGVjKS5hX2luZm8gPSAoKG1hZ2ljKSAmIDB4ZmZmZikgXAorCSB8ICgoKGludCkodHlwZSkgJiAweGZmKSA8PCAxNikgXAorCSB8ICgoKGZsYWdzKSAmIDB4ZmYpIDw8IDI0KSkKKyNkZWZpbmUgTl9TRVRfTUFHSUMoZXhlYywgbWFnaWMpIFwKKwkoKGV4ZWMpLmFfaW5mbyA9ICgoKGV4ZWMpLmFfaW5mbyAmIDB4ZmZmZjAwMDApIHwgKChtYWdpYykgJiAweGZmZmYpKSkKKworI2RlZmluZSBOX1NFVF9NQUNIVFlQRShleGVjLCBtYWNodHlwZSkgXAorCSgoZXhlYykuYV9pbmZvID0gXAorCSAoKGV4ZWMpLmFfaW5mbyYweGZmMDBmZmZmKSB8ICgoKChpbnQpKG1hY2h0eXBlKSkmMHhmZikgPDwgMTYpKQorCisjZGVmaW5lIE5fU0VUX0ZMQUdTKGV4ZWMsIGZsYWdzKSBcCisJKChleGVjKS5hX2luZm8gPSBcCisJICgoZXhlYykuYV9pbmZvJjB4MDBmZmZmZmYpIHwgKCgoZmxhZ3MpICYgMHhmZikgPDwgMjQpKQorCisvKiBDb2RlIGluZGljYXRpbmcgb2JqZWN0IGZpbGUgb3IgaW1wdXJlIGV4ZWN1dGFibGUuICAqLworI2RlZmluZSBPTUFHSUMgMDQwNworLyogQ29kZSBpbmRpY2F0aW5nIHB1cmUgZXhlY3V0YWJsZS4gICovCisjZGVmaW5lIE5NQUdJQyAwNDEwCisvKiBDb2RlIGluZGljYXRpbmcgZGVtYW5kLXBhZ2VkIGV4ZWN1dGFibGUuICAqLworI2RlZmluZSBaTUFHSUMgMDQxMworLyogVGhpcyBpbmRpY2F0ZXMgYSBkZW1hbmQtcGFnZWQgZXhlY3V0YWJsZSB3aXRoIHRoZSBoZWFkZXIgaW4gdGhlIHRleHQuIAorICAgVGhlIGZpcnN0IHBhZ2UgaXMgdW5tYXBwZWQgdG8gaGVscCB0cmFwIE5VTEwgcG9pbnRlciByZWZlcmVuY2VzICovCisjZGVmaW5lIFFNQUdJQyAwMzE0CisKKy8qIENvZGUgaW5kaWNhdGluZyBjb3JlIGZpbGUuICAqLworI2RlZmluZSBDTUFHSUMgMDQyMQorCisjaWYgIWRlZmluZWQgKE5fQkFETUFHKQorI2RlZmluZSBOX0JBRE1BRyh4KQkgIChOX01BR0lDKHgpICE9IE9NQUdJQwkJXAorCQkJJiYgTl9NQUdJQyh4KSAhPSBOTUFHSUMJCVwKKyAgCQkJJiYgTl9NQUdJQyh4KSAhPSBaTUFHSUMgXAorCQkgICAgICAgICYmIE5fTUFHSUMoeCkgIT0gUU1BR0lDKQorI2VuZGlmCisKKyNkZWZpbmUgX05fSERST0ZGKHgpICgxMDI0IC0gc2l6ZW9mIChzdHJ1Y3QgZXhlYykpCisKKyNpZiAhZGVmaW5lZCAoTl9UWFRPRkYpCisjZGVmaW5lIE5fVFhUT0ZGKHgpIFwKKyAoTl9NQUdJQyh4KSA9PSBaTUFHSUMgPyBfTl9IRFJPRkYoKHgpKSArIHNpemVvZiAoc3RydWN0IGV4ZWMpIDogXAorICAoTl9NQUdJQyh4KSA9PSBRTUFHSUMgPyAwIDogc2l6ZW9mIChzdHJ1Y3QgZXhlYykpKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCAoTl9EQVRPRkYpCisjZGVmaW5lIE5fREFUT0ZGKHgpIChOX1RYVE9GRih4KSArICh4KS5hX3RleHQpCisjZW5kaWYKKworI2lmICFkZWZpbmVkIChOX1RSRUxPRkYpCisjZGVmaW5lIE5fVFJFTE9GRih4KSAoTl9EQVRPRkYoeCkgKyAoeCkuYV9kYXRhKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCAoTl9EUkVMT0ZGKQorI2RlZmluZSBOX0RSRUxPRkYoeCkgKE5fVFJFTE9GRih4KSArIE5fVFJTSVpFKHgpKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCAoTl9TWU1PRkYpCisjZGVmaW5lIE5fU1lNT0ZGKHgpIChOX0RSRUxPRkYoeCkgKyBOX0RSU0laRSh4KSkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgKE5fU1RST0ZGKQorI2RlZmluZSBOX1NUUk9GRih4KSAoTl9TWU1PRkYoeCkgKyBOX1NZTVNJWkUoeCkpCisjZW5kaWYKKworLyogQWRkcmVzcyBvZiB0ZXh0IHNlZ21lbnQgaW4gbWVtb3J5IGFmdGVyIGl0IGlzIGxvYWRlZC4gICovCisjaWYgIWRlZmluZWQgKE5fVFhUQUREUikKKyNkZWZpbmUgTl9UWFRBRERSKHgpIChOX01BR0lDKHgpID09IFFNQUdJQyA/IFBBR0VfU0laRSA6IDApCisjZW5kaWYKKworLyogQWRkcmVzcyBvZiBkYXRhIHNlZ21lbnQgaW4gbWVtb3J5IGFmdGVyIGl0IGlzIGxvYWRlZC4KKyAgIE5vdGUgdGhhdCBpdCBpcyB1cCB0byB5b3UgdG8gZGVmaW5lIFNFR01FTlRfU0laRQorICAgb24gbWFjaGluZXMgbm90IGxpc3RlZCBoZXJlLiAgKi8KKyNpZiBkZWZpbmVkKHZheCkgfHwgZGVmaW5lZChocDMwMCkgfHwgZGVmaW5lZChweXIpCisjZGVmaW5lIFNFR01FTlRfU0laRSBwYWdlX3NpemUKKyNlbmRpZgorI2lmZGVmCXNvbnkKKyNkZWZpbmUJU0VHTUVOVF9TSVpFCTB4MjAwMAorI2VuZGlmCS8qIFNvbnkuICAqLworI2lmZGVmIGlzNjhrCisjZGVmaW5lIFNFR01FTlRfU0laRSAweDIwMDAwCisjZW5kaWYKKyNpZiBkZWZpbmVkKG02OGspICYmIGRlZmluZWQoUE9SVEFSKQorI2RlZmluZSBQQUdFX1NJWkUgMHg0MDAKKyNkZWZpbmUgU0VHTUVOVF9TSVpFIFBBR0VfU0laRQorI2VuZGlmCisKKyNpZmRlZiBsaW51eAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX19tYzY4MDAwX18pCisjZGVmaW5lIFNFR01FTlRfU0laRQkxMDI0CisjZWxzZQorI2lmbmRlZiBTRUdNRU5UX1NJWkUKKyNkZWZpbmUgU0VHTUVOVF9TSVpFICAgZ2V0cGFnZXNpemUoKQorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIF9OX1NFR01FTlRfUk9VTkQoeCkgQUxJR04oeCwgU0VHTUVOVF9TSVpFKQorCisjZGVmaW5lIF9OX1RYVEVOREFERFIoeCkgKE5fVFhUQUREUih4KSsoeCkuYV90ZXh0KQorCisjaWZuZGVmIE5fREFUQUREUgorI2RlZmluZSBOX0RBVEFERFIoeCkgXAorICAgIChOX01BR0lDKHgpPT1PTUFHSUM/IChfTl9UWFRFTkRBRERSKHgpKSBcCisgICAgIDogKF9OX1NFR01FTlRfUk9VTkQgKF9OX1RYVEVOREFERFIoeCkpKSkKKyNlbmRpZgorCisvKiBBZGRyZXNzIG9mIGJzcyBzZWdtZW50IGluIG1lbW9yeSBhZnRlciBpdCBpcyBsb2FkZWQuICAqLworI2lmICFkZWZpbmVkIChOX0JTU0FERFIpCisjZGVmaW5lIE5fQlNTQUREUih4KSAoTl9EQVRBRERSKHgpICsgKHgpLmFfZGF0YSkKKyNlbmRpZgorDAorI2lmICFkZWZpbmVkIChOX05MSVNUX0RFQ0xBUkVEKQorc3RydWN0IG5saXN0IHsKKyAgdW5pb24geworICAgIGNoYXIgKm5fbmFtZTsKKyAgICBzdHJ1Y3Qgbmxpc3QgKm5fbmV4dDsKKyAgICBsb25nIG5fc3RyeDsKKyAgfSBuX3VuOworICB1bnNpZ25lZCBjaGFyIG5fdHlwZTsKKyAgY2hhciBuX290aGVyOworICBzaG9ydCBuX2Rlc2M7CisgIHVuc2lnbmVkIGxvbmcgbl92YWx1ZTsKK307CisjZW5kaWYgLyogbm8gTl9OTElTVF9ERUNMQVJFRC4gICovCisKKyNpZiAhZGVmaW5lZCAoTl9VTkRGKQorI2RlZmluZSBOX1VOREYgMAorI2VuZGlmCisjaWYgIWRlZmluZWQgKE5fQUJTKQorI2RlZmluZSBOX0FCUyAyCisjZW5kaWYKKyNpZiAhZGVmaW5lZCAoTl9URVhUKQorI2RlZmluZSBOX1RFWFQgNAorI2VuZGlmCisjaWYgIWRlZmluZWQgKE5fREFUQSkKKyNkZWZpbmUgTl9EQVRBIDYKKyNlbmRpZgorI2lmICFkZWZpbmVkIChOX0JTUykKKyNkZWZpbmUgTl9CU1MgOAorI2VuZGlmCisjaWYgIWRlZmluZWQgKE5fRk4pCisjZGVmaW5lIE5fRk4gMTUKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgKE5fRVhUKQorI2RlZmluZSBOX0VYVCAxCisjZW5kaWYKKyNpZiAhZGVmaW5lZCAoTl9UWVBFKQorI2RlZmluZSBOX1RZUEUgMDM2CisjZW5kaWYKKyNpZiAhZGVmaW5lZCAoTl9TVEFCKQorI2RlZmluZSBOX1NUQUIgMDM0MAorI2VuZGlmCisKKy8qIFRoZSBmb2xsb3dpbmcgdHlwZSBpbmRpY2F0ZXMgdGhlIGRlZmluaXRpb24gb2YgYSBzeW1ib2wgYXMgYmVpbmcKKyAgIGFuIGluZGlyZWN0IHJlZmVyZW5jZSB0byBhbm90aGVyIHN5bWJvbC4gIFRoZSBvdGhlciBzeW1ib2wKKyAgIGFwcGVhcnMgYXMgYW4gdW5kZWZpbmVkIHJlZmVyZW5jZSwgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoaXMgc3ltYm9sLgorCisgICBJbmRpcmVjdGlvbiBpcyBhc3ltbWV0cmljYWwuICBUaGUgb3RoZXIgc3ltYm9sJ3MgdmFsdWUgd2lsbCBiZSB1c2VkCisgICB0byBzYXRpc2Z5IHJlcXVlc3RzIGZvciB0aGUgaW5kaXJlY3Qgc3ltYm9sLCBidXQgbm90IHZpY2UgdmVyc2EuCisgICBJZiB0aGUgb3RoZXIgc3ltYm9sIGRvZXMgbm90IGhhdmUgYSBkZWZpbml0aW9uLCBsaWJyYXJpZXMgd2lsbAorICAgYmUgc2VhcmNoZWQgdG8gZmluZCBhIGRlZmluaXRpb24uICAqLworI2RlZmluZSBOX0lORFIgMHhhCisKKy8qIFRoZSBmb2xsb3dpbmcgc3ltYm9scyByZWZlciB0byBzZXQgZWxlbWVudHMuCisgICBBbGwgdGhlIE5fU0VUW0FUREJdIHN5bWJvbHMgd2l0aCB0aGUgc2FtZSBuYW1lIGZvcm0gb25lIHNldC4KKyAgIFNwYWNlIGlzIGFsbG9jYXRlZCBmb3IgdGhlIHNldCBpbiB0aGUgdGV4dCBzZWN0aW9uLCBhbmQgZWFjaCBzZXQKKyAgIGVsZW1lbnQncyB2YWx1ZSBpcyBzdG9yZWQgaW50byBvbmUgd29yZCBvZiB0aGUgc3BhY2UuCisgICBUaGUgZmlyc3Qgd29yZCBvZiB0aGUgc3BhY2UgaXMgdGhlIGxlbmd0aCBvZiB0aGUgc2V0IChudW1iZXIgb2YgZWxlbWVudHMpLgorCisgICBUaGUgYWRkcmVzcyBvZiB0aGUgc2V0IGlzIG1hZGUgaW50byBhbiBOX1NFVFYgc3ltYm9sCisgICB3aG9zZSBuYW1lIGlzIHRoZSBzYW1lIGFzIHRoZSBuYW1lIG9mIHRoZSBzZXQuCisgICBUaGlzIHN5bWJvbCBhY3RzIGxpa2UgYSBOX0RBVEEgZ2xvYmFsIHN5bWJvbAorICAgaW4gdGhhdCBpdCBjYW4gc2F0aXNmeSB1bmRlZmluZWQgZXh0ZXJuYWwgcmVmZXJlbmNlcy4gICovCisKKy8qIFRoZXNlIGFwcGVhciBhcyBpbnB1dCB0byBMRCwgaW4gYSAubyBmaWxlLiAgKi8KKyNkZWZpbmUJTl9TRVRBCTB4MTQJCS8qIEFic29sdXRlIHNldCBlbGVtZW50IHN5bWJvbCAqLworI2RlZmluZQlOX1NFVFQJMHgxNgkJLyogVGV4dCBzZXQgZWxlbWVudCBzeW1ib2wgKi8KKyNkZWZpbmUJTl9TRVRECTB4MTgJCS8qIERhdGEgc2V0IGVsZW1lbnQgc3ltYm9sICovCisjZGVmaW5lCU5fU0VUQgkweDFBCQkvKiBCc3Mgc2V0IGVsZW1lbnQgc3ltYm9sICovCisKKy8qIFRoaXMgaXMgb3V0cHV0IGZyb20gTEQuICAqLworI2RlZmluZSBOX1NFVFYJMHgxQwkJLyogUG9pbnRlciB0byBzZXQgdmVjdG9yIGluIGRhdGEgYXJlYS4gICovCisMCisjaWYgIWRlZmluZWQgKE5fUkVMT0NBVElPTl9JTkZPX0RFQ0xBUkVEKQorLyogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGEgc2luZ2xlIHJlbG9jYXRpb24gdG8gYmUgcGVyZm9ybWVkLgorICAgVGhlIHRleHQtcmVsb2NhdGlvbiBzZWN0aW9uIG9mIHRoZSBmaWxlIGlzIGEgdmVjdG9yIG9mIHRoZXNlIHN0cnVjdHVyZXMsCisgICBhbGwgb2Ygd2hpY2ggYXBwbHkgdG8gdGhlIHRleHQgc2VjdGlvbi4KKyAgIExpa2V3aXNlLCB0aGUgZGF0YS1yZWxvY2F0aW9uIHNlY3Rpb24gYXBwbGllcyB0byB0aGUgZGF0YSBzZWN0aW9uLiAgKi8KKworc3RydWN0IHJlbG9jYXRpb25faW5mbworeworICAvKiBBZGRyZXNzICh3aXRoaW4gc2VnbWVudCkgdG8gYmUgcmVsb2NhdGVkLiAgKi8KKyAgaW50IHJfYWRkcmVzczsKKyAgLyogVGhlIG1lYW5pbmcgb2Ygcl9zeW1ib2xudW0gZGVwZW5kcyBvbiByX2V4dGVybi4gICovCisgIHVuc2lnbmVkIGludCByX3N5bWJvbG51bToyNDsKKyAgLyogTm9uemVybyBtZWFucyB2YWx1ZSBpcyBhIHBjLXJlbGF0aXZlIG9mZnNldAorICAgICBhbmQgaXQgc2hvdWxkIGJlIHJlbG9jYXRlZCBmb3IgY2hhbmdlcyBpbiBpdHMgb3duIGFkZHJlc3MKKyAgICAgYXMgd2VsbCBhcyBmb3IgY2hhbmdlcyBpbiB0aGUgc3ltYm9sIG9yIHNlY3Rpb24gc3BlY2lmaWVkLiAgKi8KKyAgdW5zaWduZWQgaW50IHJfcGNyZWw6MTsKKyAgLyogTGVuZ3RoIChhcyBleHBvbmVudCBvZiAyKSBvZiB0aGUgZmllbGQgdG8gYmUgcmVsb2NhdGVkLgorICAgICBUaHVzLCBhIHZhbHVlIG9mIDIgaW5kaWNhdGVzIDE8PDIgYnl0ZXMuICAqLworICB1bnNpZ25lZCBpbnQgcl9sZW5ndGg6MjsKKyAgLyogMSA9PiByZWxvY2F0ZSB3aXRoIHZhbHVlIG9mIHN5bWJvbC4KKyAgICAgICAgICByX3N5bWJvbG51bSBpcyB0aGUgaW5kZXggb2YgdGhlIHN5bWJvbAorCSAgaW4gZmlsZSdzIHRoZSBzeW1ib2wgdGFibGUuCisgICAgIDAgPT4gcmVsb2NhdGUgd2l0aCB0aGUgYWRkcmVzcyBvZiBhIHNlZ21lbnQuCisgICAgICAgICAgcl9zeW1ib2xudW0gaXMgTl9URVhULCBOX0RBVEEsIE5fQlNTIG9yIE5fQUJTCisJICAodGhlIE5fRVhUIGJpdCBtYXkgYmUgc2V0IGFsc28sIGJ1dCBzaWduaWZpZXMgbm90aGluZykuICAqLworICB1bnNpZ25lZCBpbnQgcl9leHRlcm46MTsKKyAgLyogRm91ciBiaXRzIHRoYXQgYXJlbid0IHVzZWQsIGJ1dCB3aGVuIHdyaXRpbmcgYW4gb2JqZWN0IGZpbGUKKyAgICAgaXQgaXMgZGVzaXJhYmxlIHRvIGNsZWFyIHRoZW0uICAqLworI2lmZGVmIE5TMzJLCisgIHVuc2lnbmVkIHJfYnNyOjE7CisgIHVuc2lnbmVkIHJfZGlzcDoxOworICB1bnNpZ25lZCByX3BhZDoyOworI2Vsc2UKKyAgdW5zaWduZWQgaW50IHJfcGFkOjQ7CisjZW5kaWYKK307CisjZW5kaWYgLyogbm8gTl9SRUxPQ0FUSU9OX0lORk9fREVDTEFSRUQuICAqLworCisjZW5kaWYgLypfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfX0FfT1VUX0dOVV9IX18gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hY2N0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYWNjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYzJkYTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYWNjdC5oCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogIEJTRCBQcm9jZXNzIEFjY291bnRpbmcgZm9yIExpbnV4IC0gRGVmaW5pdGlvbnMKKyAqCisgKiAgQXV0aG9yOiBNYXJjbyB2YW4gV2llcmluZ2VuIChtdndAcGxhbmV0cy5lbG0ubmV0KQorICoKKyAqICBUaGlzIGhlYWRlciBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBuZWVkZWQgdG8gaW1wbGVtZW50CisgKiAgQlNELXN0eWxlIHByb2Nlc3MgYWNjb3VudGluZy4gVGhlIGtlcm5lbCBhY2NvdW50aW5nIGNvZGUgYW5kIGFsbAorICogIHVzZXItbGV2ZWwgcHJvZ3JhbXMgdGhhdCB0cnkgdG8gZG8gc29tZXRoaW5nIHVzZWZ1bCB3aXRoIHRoZQorICogIHByb2Nlc3MgYWNjb3VudGluZyBsb2cgbXVzdCBpbmNsdWRlIHRoaXMgZmlsZS4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1IC0gMTk5NyBNYXJjbyB2YW4gV2llcmluZ2VuIC0gRUxNIENvbnN1bHRhbmN5IEIuVi4KKyAqCisgKi8KKworI2lmbmRlZiBfTElOVVhfQUNDVF9ICisjZGVmaW5lIF9MSU5VWF9BQ0NUX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vcGFyYW0uaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKy8qIAorICogIGNvbXBfdCBpcyBhIDE2LWJpdCAiZmxvYXRpbmciIHBvaW50IG51bWJlciB3aXRoIGEgMy1iaXQgYmFzZSA4CisgKiAgZXhwb25lbnQgYW5kIGEgMTMtYml0IGZyYWN0aW9uLgorICogIGNvbXAyX3QgaXMgMjQtYml0IHdpdGggNS1iaXQgYmFzZSAyIGV4cG9uZW50IGFuZCAyMCBiaXQgZnJhY3Rpb24KKyAqICAobGVhZGluZyAxIG5vdCBzdG9yZWQpLgorICogIFNlZSBsaW51eC9rZXJuZWwvYWNjdC5jIGZvciB0aGUgc3BlY2lmaWMgZW5jb2Rpbmcgc3lzdGVtcyB1c2VkLgorICovCisKK3R5cGVkZWYgX191MTYJY29tcF90OwordHlwZWRlZiBfX3UzMgljb21wMl90OworCisvKgorICogICBhY2NvdW50aW5nIGZpbGUgcmVjb3JkCisgKgorICogICBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHdyaXR0ZW4gb3V0IHRvIHRoZQorICogICBwcm9jZXNzIGFjY291bnRpbmcgZmlsZSB3aGVuZXZlciBhIHByb2Nlc3MgZXhpdHMuCisgKi8KKworI2RlZmluZSBBQ0NUX0NPTU0JMTYKKworc3RydWN0IGFjY3QKK3sKKwljaGFyCQlhY19mbGFnOwkJLyogRmxhZ3MgKi8KKwljaGFyCQlhY192ZXJzaW9uOwkJLyogQWx3YXlzIHNldCB0byBBQ0NUX1ZFUlNJT04gKi8KKwkvKiBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHkgYmFjayB1bnRpbCAyLjAgKi8KKwlfX3UxNgkJYWNfdWlkMTY7CQkvKiBMU0Igb2YgUmVhbCBVc2VyIElEICovCisJX191MTYJCWFjX2dpZDE2OwkJLyogTFNCIG9mIFJlYWwgR3JvdXAgSUQgKi8KKwlfX3UxNgkJYWNfdHR5OwkJCS8qIENvbnRyb2wgVGVybWluYWwgKi8KKwlfX3UzMgkJYWNfYnRpbWU7CQkvKiBQcm9jZXNzIENyZWF0aW9uIFRpbWUgKi8KKwljb21wX3QJCWFjX3V0aW1lOwkJLyogVXNlciBUaW1lICovCisJY29tcF90CQlhY19zdGltZTsJCS8qIFN5c3RlbSBUaW1lICovCisJY29tcF90CQlhY19ldGltZTsJCS8qIEVsYXBzZWQgVGltZSAqLworCWNvbXBfdAkJYWNfbWVtOwkJCS8qIEF2ZXJhZ2UgTWVtb3J5IFVzYWdlICovCisJY29tcF90CQlhY19pbzsJCQkvKiBDaGFycyBUcmFuc2ZlcnJlZCAqLworCWNvbXBfdAkJYWNfcnc7CQkJLyogQmxvY2tzIFJlYWQgb3IgV3JpdHRlbiAqLworCWNvbXBfdAkJYWNfbWluZmx0OwkJLyogTWlub3IgUGFnZWZhdWx0cyAqLworCWNvbXBfdAkJYWNfbWFqZmx0OwkJLyogTWFqb3IgUGFnZWZhdWx0cyAqLworCWNvbXBfdAkJYWNfc3dhcHM7CQkvKiBOdW1iZXIgb2YgU3dhcHMgKi8KKy8qIG02OGsgaGFkIG5vIHBhZGRpbmcgaGVyZS4gKi8KKwlfX3UxNgkJYWNfYWh6OwkJCS8qIEFIWiAqLworCV9fdTMyCQlhY19leGl0Y29kZTsJCS8qIEV4aXRjb2RlICovCisJY2hhcgkJYWNfY29tbVtBQ0NUX0NPTU0gKyAxXTsJLyogQ29tbWFuZCBOYW1lICovCisJX191OAkJYWNfZXRpbWVfaGk7CQkvKiBFbGFwc2VkIFRpbWUgTVNCICovCisJX191MTYJCWFjX2V0aW1lX2xvOwkJLyogRWxhcHNlZCBUaW1lIExTQiAqLworCV9fdTMyCQlhY191aWQ7CQkJLyogUmVhbCBVc2VyIElEICovCisJX191MzIJCWFjX2dpZDsJCQkvKiBSZWFsIEdyb3VwIElEICovCit9OworCitzdHJ1Y3QgYWNjdF92MworeworCWNoYXIJCWFjX2ZsYWc7CQkvKiBGbGFncyAqLworCWNoYXIJCWFjX3ZlcnNpb247CQkvKiBBbHdheXMgc2V0IHRvIEFDQ1RfVkVSU0lPTiAqLworCV9fdTE2CQlhY190dHk7CQkJLyogQ29udHJvbCBUZXJtaW5hbCAqLworCV9fdTMyCQlhY19leGl0Y29kZTsJCS8qIEV4aXRjb2RlICovCisJX191MzIJCWFjX3VpZDsJCQkvKiBSZWFsIFVzZXIgSUQgKi8KKwlfX3UzMgkJYWNfZ2lkOwkJCS8qIFJlYWwgR3JvdXAgSUQgKi8KKwlfX3UzMgkJYWNfcGlkOwkJCS8qIFByb2Nlc3MgSUQgKi8KKwlfX3UzMgkJYWNfcHBpZDsJCS8qIFBhcmVudCBQcm9jZXNzIElEICovCisJX191MzIJCWFjX2J0aW1lOwkJLyogUHJvY2VzcyBDcmVhdGlvbiBUaW1lICovCisJZmxvYXQJCWFjX2V0aW1lOwkJLyogRWxhcHNlZCBUaW1lICovCisJY29tcF90CQlhY191dGltZTsJCS8qIFVzZXIgVGltZSAqLworCWNvbXBfdAkJYWNfc3RpbWU7CQkvKiBTeXN0ZW0gVGltZSAqLworCWNvbXBfdAkJYWNfbWVtOwkJCS8qIEF2ZXJhZ2UgTWVtb3J5IFVzYWdlICovCisJY29tcF90CQlhY19pbzsJCQkvKiBDaGFycyBUcmFuc2ZlcnJlZCAqLworCWNvbXBfdAkJYWNfcnc7CQkJLyogQmxvY2tzIFJlYWQgb3IgV3JpdHRlbiAqLworCWNvbXBfdAkJYWNfbWluZmx0OwkJLyogTWlub3IgUGFnZWZhdWx0cyAqLworCWNvbXBfdAkJYWNfbWFqZmx0OwkJLyogTWFqb3IgUGFnZWZhdWx0cyAqLworCWNvbXBfdAkJYWNfc3dhcHM7CQkvKiBOdW1iZXIgb2YgU3dhcHMgKi8KKwljaGFyCQlhY19jb21tW0FDQ1RfQ09NTV07CS8qIENvbW1hbmQgTmFtZSAqLworfTsKKworLyoKKyAqICBhY2NvdW50aW5nIGZsYWdzCisgKi8KKwkJCQkvKiBiaXQgc2V0IHdoZW4gdGhlIHByb2Nlc3MgLi4uICovCisjZGVmaW5lIEFGT1JLCQkweDAxCS8qIC4uLiBleGVjdXRlZCBmb3JrLCBidXQgZGlkIG5vdCBleGVjICovCisjZGVmaW5lIEFTVQkJMHgwMgkvKiAuLi4gdXNlZCBzdXBlci11c2VyIHByaXZpbGVnZXMgKi8KKyNkZWZpbmUgQUNPTVBBVAkJMHgwNAkvKiAuLi4gdXNlZCBjb21wYXRpYmlsaXR5IG1vZGUgKFZBWCBvbmx5IG5vdCB1c2VkKSAqLworI2RlZmluZSBBQ09SRQkJMHgwOAkvKiAuLi4gZHVtcGVkIGNvcmUgKi8KKyNkZWZpbmUgQVhTSUcJCTB4MTAJLyogLi4uIHdhcyBraWxsZWQgYnkgYSBzaWduYWwgKi8KKworI2lmZGVmIF9fQklHX0VORElBTgorI2RlZmluZSBBQ0NUX0JZVEVPUkRFUgkweDgwCS8qIGFjY291bnRpbmcgZmlsZSBpcyBiaWcgZW5kaWFuICovCisjZWxzZQorI2RlZmluZSBBQ0NUX0JZVEVPUkRFUgkweDAwCS8qIGFjY291bnRpbmcgZmlsZSBpcyBsaXR0bGUgZW5kaWFuICovCisjZW5kaWYKKworI2RlZmluZSBBQ0NUX1ZFUlNJT04JMgorI2RlZmluZSBBSFoJCShIWikKKworCisjZW5kaWYJLyogX0xJTlVYX0FDQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2FkYi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2FkYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MTUwMjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYWRiLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIERlZmluaXRpb25zIGZvciBBREIgKEFwcGxlIERlc2t0b3AgQnVzKSBzdXBwb3J0LgorICovCisjaWZuZGVmIF9fQURCX0gKKyNkZWZpbmUgX19BREJfSAorCisvKiBBREIgY29tbWFuZHMgKi8KKyNkZWZpbmUgQURCX0JVU1JFU0VUCQkwCisjZGVmaW5lIEFEQl9GTFVTSChpZCkJCSgweDAxIHwgKChpZCkgPDwgNCkpCisjZGVmaW5lIEFEQl9XUklURVJFRyhpZCwgcmVnKQkoMHgwOCB8IChyZWcpIHwgKChpZCkgPDwgNCkpCisjZGVmaW5lIEFEQl9SRUFEUkVHKGlkLCByZWcpCSgweDBDIHwgKHJlZykgfCAoKGlkKSA8PCA0KSkKKworLyogQURCIGRlZmF1bHQgZGV2aWNlIElEcyAodXBwZXIgNCBiaXRzIG9mIEFEQiBjb21tYW5kIGJ5dGUpICovCisjZGVmaW5lIEFEQl9ET05HTEUJMQkvKiAic29mdHdhcmUgZXhlY3V0aW9uIGNvbnRyb2wiIGRldmljZXMgKi8KKyNkZWZpbmUgQURCX0tFWUJPQVJECTIKKyNkZWZpbmUgQURCX01PVVNFCTMKKyNkZWZpbmUgQURCX1RBQkxFVAk0CisjZGVmaW5lIEFEQl9NT0RFTQk1CisjZGVmaW5lIEFEQl9NSVNDCTcJLyogbWF5YmUgYSBtb25pdG9yICovCisKKyNkZWZpbmUgQURCX1JFVF9PSwkwCisjZGVmaW5lIEFEQl9SRVRfVElNRU9VVAkzCisKKy8qIFRoZSBraW5kIG9mIEFEQiByZXF1ZXN0LiBUaGUgY29udHJvbGxlciBtYXkgZW11bGF0ZSBzb21lCisgICBvciBhbGwgb2YgdGhvc2UgQ1VEQS9QTVUgcGFja2V0IGtpbmRzICovCisjZGVmaW5lIEFEQl9QQUNLRVQJMAorI2RlZmluZSBDVURBX1BBQ0tFVAkxCisjZGVmaW5lIEVSUk9SX1BBQ0tFVAkyCisjZGVmaW5lIFRJTUVSX1BBQ0tFVAkzCisjZGVmaW5lIFBPV0VSX1BBQ0tFVAk0CisjZGVmaW5lIE1BQ0lJQ19QQUNLRVQJNQorI2RlZmluZSBQTVVfUEFDS0VUCTYKKyNkZWZpbmUgQURCX1FVRVJZCTcKKworLyogQURCIHF1ZXJpZXMgKi8KKworLyogQURCX1FVRVJZX0dFVERFVklORk8KKyAqIFF1ZXJ5IEFEQiBzbG90IGZvciBkZXZpY2UgcHJlc2VuY2UKKyAqIGRhdGFbMl0gPSBpZCwgcmVwWzBdID0gb3JpZyBhZGRyLCByZXBbMV0gPSBoYW5kbGVyX2lkCisgKi8KKyNkZWZpbmUgQURCX1FVRVJZX0dFVERFVklORk8JMQorCisKKyNlbmRpZiAvKiBfX0FEQl9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYWRmc19mcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2FkZnNfZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzlhNWExCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2FkZnNfZnMuaApAQCAtMCwwICsxLDQ0IEBACisjaWZuZGVmIF9BREZTX0ZTX0gKKyNkZWZpbmUgX0FERlNfRlNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgorCisvKgorICogRGlzYyBSZWNvcmQgYXQgZGlzYyBhZGRyZXNzIDB4YzAwCisgKi8KK3N0cnVjdCBhZGZzX2Rpc2NyZWNvcmQgeworICAgIF9fdTggIGxvZzJzZWNzaXplOworICAgIF9fdTggIHNlY3NwZXJ0cmFjazsKKyAgICBfX3U4ICBoZWFkczsKKyAgICBfX3U4ICBkZW5zaXR5OworICAgIF9fdTggIGlkbGVuOworICAgIF9fdTggIGxvZzJicG1iOworICAgIF9fdTggIHNrZXc7CisgICAgX191OCAgYm9vdG9wdGlvbjsKKyAgICBfX3U4ICBsb3dzZWN0b3I7CisgICAgX191OCAgbnpvbmVzOworICAgIF9fbGUxNiB6b25lX3NwYXJlOworICAgIF9fbGUzMiByb290OworICAgIF9fbGUzMiBkaXNjX3NpemU7CisgICAgX19sZTE2IGRpc2NfaWQ7CisgICAgX191OCAgZGlzY19uYW1lWzEwXTsKKyAgICBfX2xlMzIgZGlzY190eXBlOworICAgIF9fbGUzMiBkaXNjX3NpemVfaGlnaDsKKyAgICBfX3U4ICBsb2cyc2hhcmVzaXplOjQ7CisgICAgX191OCAgdW51c2VkNDA6NDsKKyAgICBfX3U4ICBiaWdfZmxhZzoxOworICAgIF9fdTggIHVudXNlZDQxOjE7CisgICAgX191OCAgbnpvbmVzX2hpZ2g7CisgICAgX19sZTMyIGZvcm1hdF92ZXJzaW9uOworICAgIF9fbGUzMiByb290X3NpemU7CisgICAgX191OCAgdW51c2VkNTJbNjAgLSA1Ml07Cit9OworCisjZGVmaW5lIEFERlNfRElTQ1JFQ09SRAkJKDB4YzAwKQorI2RlZmluZSBBREZTX0RSX09GRlNFVAkJKDB4MWMwKQorI2RlZmluZSBBREZTX0RSX1NJWkUJCSA2MAorI2RlZmluZSBBREZTX0RSX1NJWkVfQklUUwkoQURGU19EUl9TSVpFIDw8IDMpCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYWZmc19oYXJkYmxvY2tzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYWZmc19oYXJkYmxvY2tzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFiOTQ4YwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hZmZzX2hhcmRibG9ja3MuaApAQCAtMCwwICsxLDY4IEBACisjaWZuZGVmCUFGRlNfSEFSREJMT0NLU19ICisjZGVmaW5lCUFGRlNfSEFSREJMT0NLU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBKdXN0IHRoZSBuZWVkZWQgZGVmaW5pdGlvbnMgZm9yIHRoZSBSREIgb2YgYW4gQW1pZ2EgSEQuICovCisKK3N0cnVjdCBSaWdpZERpc2tCbG9jayB7CisJX191MzIJcmRiX0lEOworCV9fYmUzMglyZGJfU3VtbWVkTG9uZ3M7CisJX19zMzIJcmRiX0Noa1N1bTsKKwlfX3UzMglyZGJfSG9zdElEOworCV9fYmUzMglyZGJfQmxvY2tCeXRlczsKKwlfX3UzMglyZGJfRmxhZ3M7CisJX191MzIJcmRiX0JhZEJsb2NrTGlzdDsKKwlfX2JlMzIJcmRiX1BhcnRpdGlvbkxpc3Q7CisJX191MzIJcmRiX0ZpbGVTeXNIZWFkZXJMaXN0OworCV9fdTMyCXJkYl9Ecml2ZUluaXQ7CisJX191MzIJcmRiX1Jlc2VydmVkMVs2XTsKKwlfX3UzMglyZGJfQ3lsaW5kZXJzOworCV9fdTMyCXJkYl9TZWN0b3JzOworCV9fdTMyCXJkYl9IZWFkczsKKwlfX3UzMglyZGJfSW50ZXJsZWF2ZTsKKwlfX3UzMglyZGJfUGFyazsKKwlfX3UzMglyZGJfUmVzZXJ2ZWQyWzNdOworCV9fdTMyCXJkYl9Xcml0ZVByZUNvbXA7CisJX191MzIJcmRiX1JlZHVjZWRXcml0ZTsKKwlfX3UzMglyZGJfU3RlcFJhdGU7CisJX191MzIJcmRiX1Jlc2VydmVkM1s1XTsKKwlfX3UzMglyZGJfUkRCQmxvY2tzTG87CisJX191MzIJcmRiX1JEQkJsb2Nrc0hpOworCV9fdTMyCXJkYl9Mb0N5bGluZGVyOworCV9fdTMyCXJkYl9IaUN5bGluZGVyOworCV9fdTMyCXJkYl9DeWxCbG9ja3M7CisJX191MzIJcmRiX0F1dG9QYXJrU2Vjb25kczsKKwlfX3UzMglyZGJfSGlnaFJEU0tCbG9jazsKKwlfX3UzMglyZGJfUmVzZXJ2ZWQ0OworCWNoYXIJcmRiX0Rpc2tWZW5kb3JbOF07CisJY2hhcglyZGJfRGlza1Byb2R1Y3RbMTZdOworCWNoYXIJcmRiX0Rpc2tSZXZpc2lvbls0XTsKKwljaGFyCXJkYl9Db250cm9sbGVyVmVuZG9yWzhdOworCWNoYXIJcmRiX0NvbnRyb2xsZXJQcm9kdWN0WzE2XTsKKwljaGFyCXJkYl9Db250cm9sbGVyUmV2aXNpb25bNF07CisJX191MzIJcmRiX1Jlc2VydmVkNVsxMF07Cit9OworCisjZGVmaW5lCUlETkFNRV9SSUdJRERJU0sJMHg1MjQ0NTM0QgkvKiAiUkRTSyIgKi8KKworc3RydWN0IFBhcnRpdGlvbkJsb2NrIHsKKwlfX2JlMzIJcGJfSUQ7CisJX19iZTMyCXBiX1N1bW1lZExvbmdzOworCV9fczMyCXBiX0Noa1N1bTsKKwlfX3UzMglwYl9Ib3N0SUQ7CisJX19iZTMyCXBiX05leHQ7CisJX191MzIJcGJfRmxhZ3M7CisJX191MzIJcGJfUmVzZXJ2ZWQxWzJdOworCV9fdTMyCXBiX0RldkZsYWdzOworCV9fdTgJcGJfRHJpdmVOYW1lWzMyXTsKKwlfX3UzMglwYl9SZXNlcnZlZDJbMTVdOworCV9fYmUzMglwYl9FbnZpcm9ubWVudFsxN107CisJX191MzIJcGJfRVJlc2VydmVkWzE1XTsKK307CisKKyNkZWZpbmUJSUROQU1FX1BBUlRJVElPTgkweDUwNDE1MjU0CS8qICJQQVJUIiAqLworCisjZGVmaW5lIFJEQl9BTExPQ0FUSU9OX0xJTUlUCTE2CisKKyNlbmRpZgkvKiBBRkZTX0hBUkRCTE9DS1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2FncGdhcnQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hZ3BnYXJ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNmOTVkZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hZ3BnYXJ0LmgKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBBR1BHQVJUIG1vZHVsZSB2ZXJzaW9uIDAuOTkKKyAqIENvcHlyaWdodCAoQykgMTk5OSBKZWZmIEhhcnRtYW5uCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgUHJlY2lzaW9uIEluc2lnaHQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMTk5OSBYaSBHcmFwaGljcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogSkVGRiBIQVJUTUFOTiwgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgCisgKiBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2lmbmRlZiBfQUdQX0gKKyNkZWZpbmUgX0FHUF9IIDEKKworI2RlZmluZSBBR1BJT0NfQkFTRSAgICAgICAnQScKKyNkZWZpbmUgQUdQSU9DX0lORk8gICAgICAgX0lPUiAoQUdQSU9DX0JBU0UsIDAsIHN0cnVjdCBhZ3BfaW5mbyopCisjZGVmaW5lIEFHUElPQ19BQ1FVSVJFICAgIF9JTyAgKEFHUElPQ19CQVNFLCAxKQorI2RlZmluZSBBR1BJT0NfUkVMRUFTRSAgICBfSU8gIChBR1BJT0NfQkFTRSwgMikKKyNkZWZpbmUgQUdQSU9DX1NFVFVQICAgICAgX0lPVyAoQUdQSU9DX0JBU0UsIDMsIHN0cnVjdCBhZ3Bfc2V0dXAqKQorI2RlZmluZSBBR1BJT0NfUkVTRVJWRSAgICBfSU9XIChBR1BJT0NfQkFTRSwgNCwgc3RydWN0IGFncF9yZWdpb24qKQorI2RlZmluZSBBR1BJT0NfUFJPVEVDVCAgICBfSU9XIChBR1BJT0NfQkFTRSwgNSwgc3RydWN0IGFncF9yZWdpb24qKQorI2RlZmluZSBBR1BJT0NfQUxMT0NBVEUgICBfSU9XUihBR1BJT0NfQkFTRSwgNiwgc3RydWN0IGFncF9hbGxvY2F0ZSopCisjZGVmaW5lIEFHUElPQ19ERUFMTE9DQVRFIF9JT1cgKEFHUElPQ19CQVNFLCA3LCBpbnQpCisjZGVmaW5lIEFHUElPQ19CSU5EICAgICAgIF9JT1cgKEFHUElPQ19CQVNFLCA4LCBzdHJ1Y3QgYWdwX2JpbmQqKQorI2RlZmluZSBBR1BJT0NfVU5CSU5EICAgICBfSU9XIChBR1BJT0NfQkFTRSwgOSwgc3RydWN0IGFncF91bmJpbmQqKQorI2RlZmluZSBBR1BJT0NfQ0hJUFNFVF9GTFVTSCBfSU8gKEFHUElPQ19CQVNFLCAxMCkKKworI2RlZmluZSBBR1BfREVWSUNFICAgICAgIi9kZXYvYWdwZ2FydCIKKworI2lmbmRlZiBUUlVFCisjZGVmaW5lIFRSVUUgMQorI2VuZGlmCisKKyNpZm5kZWYgRkFMU0UKKyNkZWZpbmUgRkFMU0UgMAorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgYWdwX3ZlcnNpb24geworCV9fdTE2IG1ham9yOworCV9fdTE2IG1pbm9yOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgX2FncF9pbmZvIHsKKwlzdHJ1Y3QgYWdwX3ZlcnNpb24gdmVyc2lvbjsJLyogdmVyc2lvbiBvZiB0aGUgZHJpdmVyICAgICAgICAqLworCV9fdTMyIGJyaWRnZV9pZDsJLyogYnJpZGdlIHZlbmRvci9kZXZpY2UgICAgICAgICAqLworCV9fdTMyIGFncF9tb2RlOwkJLyogbW9kZSBpbmZvIG9mIGJyaWRnZSAgICAgICAgICAqLworCXVuc2lnbmVkIGxvbmcgYXBlcl9iYXNlOy8qIGJhc2Ugb2YgYXBlcnR1cmUgICAgICAgICAgICAgKi8KKwlzaXplX3QgYXBlcl9zaXplOwkvKiBzaXplIG9mIGFwZXJ0dXJlICAgICAgICAgICAgICovCisJc2l6ZV90IHBnX3RvdGFsOwkvKiBtYXggcGFnZXMgKHN3YXAgKyBzeXN0ZW0pICAgICovCisJc2l6ZV90IHBnX3N5c3RlbTsJLyogbWF4IHBhZ2VzIChzeXN0ZW0pICAgICAgICAgICAqLworCXNpemVfdCBwZ191c2VkOwkJLyogY3VycmVudCBwYWdlcyB1c2VkICAgICAgICAgICAqLworfSBhZ3BfaW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QgX2FncF9zZXR1cCB7CisJX191MzIgYWdwX21vZGU7CQkvKiBtb2RlIGluZm8gb2YgYnJpZGdlICAgICAgICAgICovCit9IGFncF9zZXR1cDsKKworLyoKKyAqIFRoZSAicHJvdCIgZG93biBiZWxvdyBuZWVkcyBzdGlsbCBhICJzbGVlcCIgZmxhZyBzb21laG93IC4uLgorICovCit0eXBlZGVmIHN0cnVjdCBfYWdwX3NlZ21lbnQgeworCV9fa2VybmVsX29mZl90IHBnX3N0YXJ0OwkvKiBzdGFydGluZyBwYWdlIHRvIHBvcHVsYXRlICAgICovCisJX19rZXJuZWxfc2l6ZV90IHBnX2NvdW50OwkvKiBudW1iZXIgb2YgcGFnZXMgICAgICAgICAgICAgICovCisJaW50IHByb3Q7CQkJLyogcHJvdCBmbGFncyBmb3IgbW1hcCAgICAgICAgICAqLworfSBhZ3Bfc2VnbWVudDsKKwordHlwZWRlZiBzdHJ1Y3QgX2FncF9yZWdpb24geworCV9fa2VybmVsX3BpZF90IHBpZDsJCS8qIHBpZCBvZiBwcm9jZXNzICAgICAgICovCisJX19rZXJuZWxfc2l6ZV90IHNlZ19jb3VudDsJLyogbnVtYmVyIG9mIHNlZ21lbnRzICAgKi8KKwlzdHJ1Y3QgX2FncF9zZWdtZW50ICpzZWdfbGlzdDsKK30gYWdwX3JlZ2lvbjsKKwordHlwZWRlZiBzdHJ1Y3QgX2FncF9hbGxvY2F0ZSB7CisJaW50IGtleTsJCS8qIHRhZyBvZiBhbGxvY2F0aW9uICAgICAgICAgICAgKi8KKwlfX2tlcm5lbF9zaXplX3QgcGdfY291bnQ7LyogbnVtYmVyIG9mIHBhZ2VzICAgICAgICAgICAgICovCisJX191MzIgdHlwZTsJCS8qIDAgPT0gbm9ybWFsLCBvdGhlciBkZXZzcGVjICAgKi8KKyAgIAlfX3UzMiBwaHlzaWNhbDsgICAgICAgICAvKiBkZXZpY2Ugc3BlY2lmaWMgKHNvbWUgZGV2aWNlcyAgCisJCQkJICogbmVlZCBhIHBoeXMgYWRkcmVzcyBvZiB0aGUgICAgIAorCQkJCSAqIGFjdHVhbCBwYWdlIGJlaGluZCB0aGUgZ2F0dCAgICAKKwkJCQkgKiB0YWJsZSkgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBhZ3BfYWxsb2NhdGU7CisKK3R5cGVkZWYgc3RydWN0IF9hZ3BfYmluZCB7CisJaW50IGtleTsJCS8qIHRhZyBvZiBhbGxvY2F0aW9uICAgICAgICAgICAgKi8KKwlfX2tlcm5lbF9vZmZfdCBwZ19zdGFydDsvKiBzdGFydGluZyBwYWdlIHRvIHBvcHVsYXRlICAgICovCit9IGFncF9iaW5kOworCit0eXBlZGVmIHN0cnVjdCBfYWdwX3VuYmluZCB7CisJaW50IGtleTsJCS8qIHRhZyBvZiBhbGxvY2F0aW9uICAgICAgICAgICAgKi8KKwlfX3UzMiBwcmlvcml0eTsJCS8qIHByaW9yaXR5IGZvciBwYWdpbmcgb3V0ICAgICAgKi8KK30gYWdwX3VuYmluZDsKKworCisjZW5kaWYJCQkJLyogX0FHUF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYWlvX2FiaS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2Fpb19hYmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzg3MzE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2Fpb19hYmkuaApAQCAtMCwwICsxLDExMSBAQAorLyogaW5jbHVkZS9saW51eC9haW9fYWJpLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwMCwyMDAxLDIwMDIgUmVkIEhhdC4KKyAqCisgKiBXcml0dGVuIGJ5IEJlbmphbWluIExhSGFpc2UgPGJjcmxAa3ZhY2sub3JnPgorICoKKyAqIERpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEx2MiAoc2VlIC4uLy4uL0NPUFlJTkcpIG9yIHVuZGVyIAorICogdGhlIGZvbGxvd2luZyB0ZXJtcy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyAqIGRvY3VtZW50YXRpb24gaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcy4gIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5LCBleHByZXNzIG9yIGltcGxpZWQuICBSZWQgSGF0IG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dAorICogdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLgorICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFJFRCBIQVQgQkUgTElBQkxFIFRPIEFOWSBQQVJUWSBGT1IgRElSRUNULCBJTkRJUkVDVCwKKyAqIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTiwgRVZFTiBJRiBSRUQgSEFUIEhBUyBCRUVOIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBSRUQgSEFUIERJU0NMQUlNUyBBTlkgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFLiAgVEhFIFNPRlRXQVJFIFBST1ZJREVEIEhFUkVVTkRFUiBJUyBPTiBBTiAiQVMgSVMiIEJBU0lTLCBBTkQKKyAqIFJFRCBIQVQgSEFTIE5PIE9CTElHQVRJT04gVE8gUFJPVklERSBNQUlOVEVOQU5DRSwgU1VQUE9SVCwgVVBEQVRFUywKKyAqIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KKyAqLworI2lmbmRlZiBfX0xJTlVYX19BSU9fQUJJX0gKKyNkZWZpbmUgX19MSU5VWF9fQUlPX0FCSV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nCWFpb19jb250ZXh0X3Q7CisKK2VudW0geworCUlPQ0JfQ01EX1BSRUFEID0gMCwKKwlJT0NCX0NNRF9QV1JJVEUgPSAxLAorCUlPQ0JfQ01EX0ZTWU5DID0gMiwKKwlJT0NCX0NNRF9GRFNZTkMgPSAzLAorCS8qIFRoZXNlIHR3byBhcmUgZXhwZXJpbWVudGFsLgorCSAqIElPQ0JfQ01EX1BSRUFEWCA9IDQsCisJICogSU9DQl9DTURfUE9MTCA9IDUsCisJICovCisJSU9DQl9DTURfTk9PUCA9IDYsCisJSU9DQl9DTURfUFJFQURWID0gNywKKwlJT0NCX0NNRF9QV1JJVEVWID0gOCwKK307CisKKy8qCisgKiBWYWxpZCBmbGFncyBmb3IgdGhlICJhaW9fZmxhZ3MiIG1lbWJlciBvZiB0aGUgInN0cnVjdCBpb2NiIi4KKyAqCisgKiBJT0NCX0ZMQUdfUkVTRkQgLSBTZXQgaWYgdGhlICJhaW9fcmVzZmQiIG1lbWJlciBvZiB0aGUgInN0cnVjdCBpb2NiIgorICogICAgICAgICAgICAgICAgICAgaXMgdmFsaWQuCisgKi8KKyNkZWZpbmUgSU9DQl9GTEFHX1JFU0ZECQkoMSA8PCAwKQorCisvKiByZWFkKCkgZnJvbSAvZGV2L2FpbyByZXR1cm5zIHRoZXNlIHN0cnVjdHVyZXMuICovCitzdHJ1Y3QgaW9fZXZlbnQgeworCV9fdTY0CQlkYXRhOwkJLyogdGhlIGRhdGEgZmllbGQgZnJvbSB0aGUgaW9jYiAqLworCV9fdTY0CQlvYmo7CQkvKiB3aGF0IGlvY2IgdGhpcyBldmVudCBjYW1lIGZyb20gKi8KKwlfX3M2NAkJcmVzOwkJLyogcmVzdWx0IGNvZGUgZm9yIHRoaXMgZXZlbnQgKi8KKwlfX3M2NAkJcmVzMjsJCS8qIHNlY29uZGFyeSByZXN1bHQgKi8KK307CisKKyNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKyNkZWZpbmUgUEFEREVEKHgseSkJeCwgeQorI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisjZGVmaW5lIFBBRERFRCh4LHkpCXksIHgKKyNlbHNlCisjZXJyb3IgZWRpdCBmb3IgeW91ciBvZGQgYnl0ZW9yZGVyLgorI2VuZGlmCisKKy8qCisgKiB3ZSBhbHdheXMgdXNlIGEgNjRiaXQgb2ZmX3Qgd2hlbiBjb21tdW5pY2F0aW5nCisgKiB3aXRoIHVzZXJsYW5kLiAgaXRzIHVwIHRvIGxpYnJhcmllcyB0byBkbyB0aGUKKyAqIHByb3BlciBwYWRkaW5nIGFuZCBhaW9fZXJyb3IgYWJzdHJhY3Rpb24KKyAqLworCitzdHJ1Y3QgaW9jYiB7CisJLyogdGhlc2UgYXJlIGludGVybmFsIHRvIHRoZSBrZXJuZWwvbGliYy4gKi8KKwlfX3U2NAlhaW9fZGF0YTsJLyogZGF0YSB0byBiZSByZXR1cm5lZCBpbiBldmVudCdzIGRhdGEgKi8KKwlfX3UzMglQQURERUQoYWlvX2tleSwgYWlvX3Jlc2VydmVkMSk7CisJCQkJLyogdGhlIGtlcm5lbCBzZXRzIGFpb19rZXkgdG8gdGhlIHJlcSAjICovCisKKwkvKiBjb21tb24gZmllbGRzICovCisJX191MTYJYWlvX2xpb19vcGNvZGU7CS8qIHNlZSBJT0NCX0NNRF8gYWJvdmUgKi8KKwlfX3MxNglhaW9fcmVxcHJpbzsKKwlfX3UzMglhaW9fZmlsZGVzOworCisJX191NjQJYWlvX2J1ZjsKKwlfX3U2NAlhaW9fbmJ5dGVzOworCV9fczY0CWFpb19vZmZzZXQ7CisKKwkvKiBleHRyYSBwYXJhbWV0ZXJzICovCisJX191NjQJYWlvX3Jlc2VydmVkMjsJLyogVE9ETzogdXNlIHRoaXMgZm9yIGEgKHN0cnVjdCBzaWdldmVudCAqKSAqLworCisJLyogZmxhZ3MgZm9yIHRoZSAic3RydWN0IGlvY2IiICovCisJX191MzIJYWlvX2ZsYWdzOworCisJLyoKKwkgKiBpZiB0aGUgSU9DQl9GTEFHX1JFU0ZEIGZsYWcgb2YgImFpb19mbGFncyIgaXMgc2V0LCB0aGlzIGlzIGFuCisJICogZXZlbnRmZCB0byBzaWduYWwgQUlPIHJlYWRpbmVzcyB0bworCSAqLworCV9fdTMyCWFpb19yZXNmZDsKK307IC8qIDY0IGJ5dGVzICovCisKKyN1bmRlZiBJRkJJRworI3VuZGVmIElGTElUVExFCisKKyNlbmRpZiAvKiBfX0xJTlVYX19BSU9fQUJJX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2FwbV9iaW9zLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYXBtX2Jpb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWUxOWEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2FwbV9iaW9zLmgKQEAgLTAsMCArMSwxMzUgQEAKKyNpZm5kZWYgX0xJTlVYX0FQTV9ICisjZGVmaW5lIF9MSU5VWF9BUE1fSAorCisvKgorICogSW5jbHVkZSBmaWxlIGZvciB0aGUgaW50ZXJmYWNlIHRvIGFuIEFQTSBCSU9TCisgKiBDb3B5cmlnaHQgMTk5NC0yMDAxIFN0ZXBoZW4gUm90aHdlbGwgKHNmckBjYW5iLmF1dWcub3JnLmF1KQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlhcG1fZXZlbnRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJYXBtX2V2ZW50aW5mb190OworCitzdHJ1Y3QgYXBtX2Jpb3NfaW5mbyB7CisJX191MTYJdmVyc2lvbjsKKwlfX3UxNgljc2VnOworCV9fdTMyCW9mZnNldDsKKwlfX3UxNgljc2VnXzE2OworCV9fdTE2CWRzZWc7CisJX191MTYJZmxhZ3M7CisJX191MTYJY3NlZ19sZW47CisJX191MTYJY3NlZ18xNl9sZW47CisJX191MTYJZHNlZ19sZW47Cit9OworCisKKy8qCisgKiBQb3dlciBzdGF0ZXMKKyAqLworI2RlZmluZSBBUE1fU1RBVEVfUkVBRFkJCTB4MDAwMAorI2RlZmluZSBBUE1fU1RBVEVfU1RBTkRCWQkweDAwMDEKKyNkZWZpbmUgQVBNX1NUQVRFX1NVU1BFTkQJMHgwMDAyCisjZGVmaW5lIEFQTV9TVEFURV9PRkYJCTB4MDAwMworI2RlZmluZSBBUE1fU1RBVEVfQlVTWQkJMHgwMDA0CisjZGVmaW5lIEFQTV9TVEFURV9SRUpFQ1QJMHgwMDA1CisjZGVmaW5lIEFQTV9TVEFURV9PRU1fU1lTCTB4MDAyMAorI2RlZmluZSBBUE1fU1RBVEVfT0VNX0RFVgkweDAwNDAKKworI2RlZmluZSBBUE1fU1RBVEVfRElTQUJMRQkweDAwMDAKKyNkZWZpbmUgQVBNX1NUQVRFX0VOQUJMRQkweDAwMDEKKworI2RlZmluZSBBUE1fU1RBVEVfRElTRU5HQUdFCTB4MDAwMAorI2RlZmluZSBBUE1fU1RBVEVfRU5HQUdFCTB4MDAwMQorCisvKgorICogRXZlbnRzIChyZXN1bHRzIG9mIEdldCBQTSBFdmVudCkKKyAqLworI2RlZmluZSBBUE1fU1lTX1NUQU5EQlkJCTB4MDAwMQorI2RlZmluZSBBUE1fU1lTX1NVU1BFTkQJCTB4MDAwMgorI2RlZmluZSBBUE1fTk9STUFMX1JFU1VNRQkweDAwMDMKKyNkZWZpbmUgQVBNX0NSSVRJQ0FMX1JFU1VNRQkweDAwMDQKKyNkZWZpbmUgQVBNX0xPV19CQVRURVJZCQkweDAwMDUKKyNkZWZpbmUgQVBNX1BPV0VSX1NUQVRVU19DSEFOR0UJMHgwMDA2CisjZGVmaW5lIEFQTV9VUERBVEVfVElNRQkJMHgwMDA3CisjZGVmaW5lIEFQTV9DUklUSUNBTF9TVVNQRU5ECTB4MDAwOAorI2RlZmluZSBBUE1fVVNFUl9TVEFOREJZCTB4MDAwOQorI2RlZmluZSBBUE1fVVNFUl9TVVNQRU5ECTB4MDAwYQorI2RlZmluZSBBUE1fU1RBTkRCWV9SRVNVTUUJMHgwMDBiCisjZGVmaW5lIEFQTV9DQVBBQklMSVRZX0NIQU5HRQkweDAwMGMKKworLyoKKyAqIEVycm9yIGNvZGVzCisgKi8KKyNkZWZpbmUgQVBNX1NVQ0NFU1MJCTB4MDAKKyNkZWZpbmUgQVBNX0RJU0FCTEVECQkweDAxCisjZGVmaW5lIEFQTV9DT05ORUNURUQJCTB4MDIKKyNkZWZpbmUgQVBNX05PVF9DT05ORUNURUQJMHgwMworI2RlZmluZSBBUE1fMTZfQ09OTkVDVEVECTB4MDUKKyNkZWZpbmUgQVBNXzE2X1VOU1VQUE9SVEVECTB4MDYKKyNkZWZpbmUgQVBNXzMyX0NPTk5FQ1RFRAkweDA3CisjZGVmaW5lIEFQTV8zMl9VTlNVUFBPUlRFRAkweDA4CisjZGVmaW5lIEFQTV9CQURfREVWSUNFCQkweDA5CisjZGVmaW5lIEFQTV9CQURfUEFSQU0JCTB4MGEKKyNkZWZpbmUgQVBNX05PVF9FTkdBR0VECQkweDBiCisjZGVmaW5lIEFQTV9CQURfRlVOQ1RJT04JMHgwYworI2RlZmluZSBBUE1fUkVTVU1FX0RJU0FCTEVECTB4MGQKKyNkZWZpbmUgQVBNX05PX0VSUk9SCQkweDUzCisjZGVmaW5lIEFQTV9CQURfU1RBVEUJCTB4NjAKKyNkZWZpbmUgQVBNX05PX0VWRU5UUwkJMHg4MAorI2RlZmluZSBBUE1fTk9UX1BSRVNFTlQJCTB4ODYKKworLyoKKyAqIEFQTSBEZXZpY2UgSURzCisgKi8KKyNkZWZpbmUgQVBNX0RFVklDRV9CSU9TCQkweDAwMDAKKyNkZWZpbmUgQVBNX0RFVklDRV9BTEwJCTB4MDAwMQorI2RlZmluZSBBUE1fREVWSUNFX0RJU1BMQVkJMHgwMTAwCisjZGVmaW5lIEFQTV9ERVZJQ0VfU1RPUkFHRQkweDAyMDAKKyNkZWZpbmUgQVBNX0RFVklDRV9QQVJBTExFTAkweDAzMDAKKyNkZWZpbmUgQVBNX0RFVklDRV9TRVJJQUwJMHgwNDAwCisjZGVmaW5lIEFQTV9ERVZJQ0VfTkVUV09SSwkweDA1MDAKKyNkZWZpbmUgQVBNX0RFVklDRV9QQ01DSUEJMHgwNjAwCisjZGVmaW5lIEFQTV9ERVZJQ0VfQkFUVEVSWQkweDgwMDAKKyNkZWZpbmUgQVBNX0RFVklDRV9PRU0JCTB4ZTAwMAorI2RlZmluZSBBUE1fREVWSUNFX09MRF9BTEwJMHhmZmZmCisjZGVmaW5lIEFQTV9ERVZJQ0VfQ0xBU1MJMHgwMGZmCisjZGVmaW5lIEFQTV9ERVZJQ0VfTUFTSwkJMHhmZjAwCisKKworLyoKKyAqIEJhdHRlcnkgc3RhdHVzCisgKi8KKyNkZWZpbmUgQVBNX01BWF9CQVRURVJJRVMJMgorCisvKgorICogQVBNIGRlZmluZWQgY2FwYWJpbGl0eSBiaXQgZmxhZ3MKKyAqLworI2RlZmluZSBBUE1fQ0FQX0dMT0JBTF9TVEFOREJZCQkweDAwMDEKKyNkZWZpbmUgQVBNX0NBUF9HTE9CQUxfU1VTUEVORAkJMHgwMDAyCisjZGVmaW5lIEFQTV9DQVBfUkVTVU1FX1NUQU5EQllfVElNRVIJMHgwMDA0IC8qIFRpbWVyIHJlc3VtZSBmcm9tIHN0YW5kYnkgKi8KKyNkZWZpbmUgQVBNX0NBUF9SRVNVTUVfU1VTUEVORF9USU1FUgkweDAwMDggLyogVGltZXIgcmVzdW1lIGZyb20gc3VzcGVuZCAqLworI2RlZmluZSBBUE1fQ0FQX1JFU1VNRV9TVEFOREJZX1JJTkcJMHgwMDEwIC8qIFJlc3VtZSBvbiBSaW5nIGZyIHN0YW5kYnkgKi8KKyNkZWZpbmUgQVBNX0NBUF9SRVNVTUVfU1VTUEVORF9SSU5HCTB4MDAyMCAvKiBSZXN1bWUgb24gUmluZyBmciBzdXNwZW5kICovCisjZGVmaW5lIEFQTV9DQVBfUkVTVU1FX1NUQU5EQllfUENNQ0lBCTB4MDA0MCAvKiBSZXN1bWUgb24gUENNQ0lBIFJpbmcJKi8KKyNkZWZpbmUgQVBNX0NBUF9SRVNVTUVfU1VTUEVORF9QQ01DSUEJMHgwMDgwIC8qIFJlc3VtZSBvbiBQQ01DSUEgUmluZwkqLworCisvKgorICogaW9jdGwgb3BlcmF0aW9ucworICovCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworI2RlZmluZSBBUE1fSU9DX1NUQU5EQlkJCV9JTygnQScsIDEpCisjZGVmaW5lIEFQTV9JT0NfU1VTUEVORAkJX0lPKCdBJywgMikKKworI2VuZGlmCS8qIExJTlVYX0FQTV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYXJjZmIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hcmNmYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMWU3NjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYXJjZmIuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX19MSU5VWF9BUkNGQl9IX18KKyNkZWZpbmUgX19MSU5VWF9BUkNGQl9IX18KKworI2RlZmluZSBGQklPX1dBSVRFVkVOVAkJX0lPKCdGJywgMHg4OCkKKyNkZWZpbmUgRkJJT19HRVRDT05UUk9MMglfSU9SKCdGJywgMHg4OSwgc2l6ZV90KQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2F0YWxrLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYXRhbGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDFjM2UzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2F0YWxrLmgKQEAgLTAsMCArMSw0MyBAQAorI2lmbmRlZiBfX0xJTlVYX0FUQUxLX0hfXworI2RlZmluZSBfX0xJTlVYX0FUQUxLX0hfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKy8qCisgKiBBcHBsZVRhbGsgbmV0d29ya2luZyBzdHJ1Y3R1cmVzCisgKgorICogVGhlIGZvbGxvd2luZyBhcmUgZGlyZWN0bHkgcmVmZXJlbmNlZCBmcm9tIHRoZSBVbml2ZXJzaXR5IE9mIE1pY2hpZ2FuCisgKiBuZXRhdGFsayBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLgorICovCisjZGVmaW5lIEFUUE9SVF9GSVJTVAkxCisjZGVmaW5lIEFUUE9SVF9SRVNFUlZFRAkxMjgKKyNkZWZpbmUgQVRQT1JUX0xBU1QJMjU0CQkvKiAyNTQgaXMgb25seSBsZWdhbCBvbiBsb2NhbHRhbGsgKi8gCisjZGVmaW5lIEFUQUREUl9BTllORVQJKF9fdTE2KTAKKyNkZWZpbmUgQVRBRERSX0FOWU5PREUJKF9fdTgpMAorI2RlZmluZSBBVEFERFJfQU5ZUE9SVCAgKF9fdTgpMAorI2RlZmluZSBBVEFERFJfQkNBU1QJKF9fdTgpMjU1CisjZGVmaW5lIEREUF9NQVhTWgk1ODcKKyNkZWZpbmUgRERQX01BWEhPUFMgICAgIDE1CQkvKiA0IGJpdHMgb2YgaG9wIGNvdW50ZXIgKi8KKworI2RlZmluZSBTSU9DQVRBTEtESUZBRERSICAgICAgIChTSU9DUFJPVE9QUklWQVRFICsgMCkKKworc3RydWN0IGF0YWxrX2FkZHIgeworCV9fYmUxNglzX25ldDsKKwlfX3U4CXNfbm9kZTsKK307CisKK3N0cnVjdCBzb2NrYWRkcl9hdCB7CisJc2FfZmFtaWx5X3QJICBzYXRfZmFtaWx5OworCV9fdTgJCSAgc2F0X3BvcnQ7CisJc3RydWN0IGF0YWxrX2FkZHIgc2F0X2FkZHI7CisJY2hhcgkJICBzYXRfemVyb1s4XTsKK307CisKK3N0cnVjdCBhdGFsa19uZXRyYW5nZSB7CisJX191OAlucl9waGFzZTsKKwlfX2JlMTYJbnJfZmlyc3RuZXQ7CisJX19iZTE2CW5yX2xhc3RuZXQ7Cit9OworCisjZW5kaWYgLyogX19MSU5VWF9BVEFMS19IX18gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdG0uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTFjMzZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2F0bS5oCkBAIC0wLDAgKzEsMjQxIEBACisvKiBhdG0uaCAtIGdlbmVyYWwgQVRNIGRlY2xhcmF0aW9ucyAqLworIAorLyogV3JpdHRlbiAxOTk1LTIwMDAgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIExSQy9JQ0EgKi8KKyAKKworLyoKKyAqIFdBUk5JTkc6IFVzZXItc3BhY2UgcHJvZ3JhbXMgc2hvdWxkIG5vdCAjaW5jbHVkZSA8bGludXgvYXRtLmg+IGRpcmVjdGx5LgorICogICAgICAgICAgSW5zdGVhZCwgI2luY2x1ZGUgPGF0bS5oPgorICovCisKKyNpZm5kZWYgX0xJTlVYX0FUTV9ICisjZGVmaW5lIF9MSU5VWF9BVE1fSAorCisvKgorICogQkVHSU5feHggYW5kIEVORF94eCBtYXJrZXJzIGFyZSB1c2VkIGZvciBhdXRvbWF0aWMgZ2VuZXJhdGlvbiBvZgorICogZG9jdW1lbnRhdGlvbi4gRG8gbm90IGNoYW5nZSB0aGVtLgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2F0bWFwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bXNhcC5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bWlvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKworLyogZ2VuZXJhbCBBVE0gY29uc3RhbnRzICovCisjZGVmaW5lIEFUTV9DRUxMX1NJWkUJCSAgICA1MwkvKiBBVE0gY2VsbCBzaXplIGluY2wuIGhlYWRlciAqLworI2RlZmluZSBBVE1fQ0VMTF9QQVlMT0FECSAgICA0OAkvKiBBVE0gcGF5bG9hZCBzaXplICovCisjZGVmaW5lIEFUTV9BQUwwX1NEVQkJICAgIDUyCS8qIEFBTDAgU0RVIHNpemUgKi8KKyNkZWZpbmUgQVRNX01BWF9BQUwzNF9QRFUJIDY1NTM1CS8qIG1heGltdW0gQUFMMy80IFBEVSBwYXlsb2FkICovCisjZGVmaW5lIEFUTV9BQUw1X1RSQUlMRVIJICAgICA4CS8qIEFBTDUgdHJhaWxlciBzaXplICovCisjZGVmaW5lIEFUTV9NQVhfQUFMNV9QRFUJIDY1NTM1CS8qIG1heGltdW0gQUFMNSBQRFUgcGF5bG9hZCAqLworI2RlZmluZSBBVE1fTUFYX0NEVgkJICA5OTk5CS8qIG1heGltdW0gKGRlZmF1bHQpIENEViAqLworI2RlZmluZSBBVE1fTk9UX1JTVl9WQ0kJCSAgICAzMgkvKiBmaXJzdCBub24tcmVzZXJ2ZWQgVkNJIHZhbHVlICovCisKKyNkZWZpbmUgQVRNX01BWF9WUEkJCSAgIDI1NQkvKiBtYXhpbXVtIFZQSSBhdCB0aGUgVU5JICovCisjZGVmaW5lIEFUTV9NQVhfVlBJX05OSQkJICA0MDk2CS8qIG1heGltdW0gVlBJIGF0IHRoZSBOTkkgKi8KKyNkZWZpbmUgQVRNX01BWF9WQ0kJCSA2NTUzNQkvKiBtYXhpbXVtIFZDSSAqLworCisKKy8qICJwcm90Y29sIiB2YWx1ZXMgZm9yIHRoZSBzb2NrZXQgc3lzdGVtIGNhbGwgKi8KKyNkZWZpbmUgQVRNX05PX0FBTAkwCQkvKiBBQUwgbm90IHNwZWNpZmllZCAqLworI2RlZmluZSBBVE1fQUFMMAkxMwkJLyogInJhdyIgQVRNIGNlbGxzICovCisjZGVmaW5lIEFUTV9BQUwxCTEJCS8qIEFBTDEgKENCUikgKi8KKyNkZWZpbmUgQVRNX0FBTDIJMgkJLyogQUFMMiAoVkJSKSAqLworI2RlZmluZSBBVE1fQUFMMzQJMwkJLyogQUFMMy80IChkYXRhKSAqLworI2RlZmluZSBBVE1fQUFMNQk1CQkvKiBBQUw1IChkYXRhKSAqLworCisvKgorICogc29ja2V0IG9wdGlvbiBuYW1lIGNvZGluZyBmdW5jdGlvbnMKKyAqCisgKiBOb3RlIHRoYXQgX19TT19FTkNPREUgYW5kIF9fU09fTEVWRUwgYXJlIHNvbWV3aGF0IGEgaGFjayBzaW5jZSB0aGUKKyAqIDw8IDIyIG9ubHkgcmVzZXJ2ZXMgOSBiaXRzIGZvciB0aGUgbGV2ZWwuICBPbiBzb21lIGFyY2hpdGVjdHVyZXMKKyAqIFNPTF9TT0NLRVQgaXMgMHhGRkZGLCBzbyB0aGF0J3MgYSBiaXQgb2YgYSBwcm9ibGVtCisgKi8KKworI2RlZmluZSBfX1NPX0VOQ09ERShsLG4sdCkJKCgoKGwpICYgMHgxRkYpIDw8IDIyKSB8ICgobikgPDwgMTYpIHwgXAorCQkJCXNpemVvZih0KSkKKyNkZWZpbmUgX19TT19MRVZFTF9NQVRDSChjLG0pCSgoKGMpID4+IDIyKSA9PSAoKG0pICYgMHgxRkYpKQorI2RlZmluZSBfX1NPX05VTUJFUihjKQkJKCgoYykgPj4gMTYpICYgMHgzZikKKyNkZWZpbmUgX19TT19TSVpFKGMpCQkoKGMpICYgMHgzZmZmKQorCisvKgorICogQVRNIGxheWVyCisgKi8KKworI2RlZmluZSBTT19TRVRDTFAJX19TT19FTkNPREUoU09MX0FUTSwwLGludCkKKwkJCSAgICAvKiBzZXQgQ0xQIGJpdCB2YWx1ZSAtIFRPRE8gKi8KKyNkZWZpbmUgU09fQ0lSQU5HRQlfX1NPX0VOQ09ERShTT0xfQVRNLDEsc3RydWN0IGF0bV9jaXJhbmdlKQorCQkJICAgIC8qIGNvbm5lY3Rpb24gaWRlbnRpZmllciByYW5nZTsgc29ja2V0IG11c3QgYmUKKwkJCSAgICAgICBib3VuZCBvciBjb25uZWN0ZWQgKi8KKyNkZWZpbmUgU09fQVRNUU9TCV9fU09fRU5DT0RFKFNPTF9BVE0sMixzdHJ1Y3QgYXRtX3FvcykKKwkJCSAgICAvKiBRdWFsaXR5IG9mIFNlcnZpY2Ugc2V0dGluZyAqLworI2RlZmluZSBTT19BVE1TQVAJX19TT19FTkNPREUoU09MX0FUTSwzLHN0cnVjdCBhdG1fc2FwKQorCQkJICAgIC8qIFNlcnZpY2UgQWNjZXNzIFBvaW50ICovCisjZGVmaW5lIFNPX0FUTVBWQwlfX1NPX0VOQ09ERShTT0xfQVRNLDQsc3RydWN0IHNvY2thZGRyX2F0bXB2YykKKwkJCSAgICAvKiAiUFZDIiBhZGRyZXNzIChhbHNvIGZvciBTVkNzKTsgZ2V0IG9ubHkgKi8KKyNkZWZpbmUgU09fTVVMVElQT0lOVAlfX1NPX0VOQ09ERShTT0xfQVRNLCA1LCBpbnQpCisJCQkgICAgLyogbWFrZSB0aGlzIHZjIGEgcDJtcCAqLworCisKKy8qCisgKiBOb3RlIEBAQDogc2luY2UgdGhlIHNvY2tldCBsYXllcnMgZG9uJ3QgcmVhbGx5IGRpc3Rpbmd1aXNoIHRoZSBjb250cm9sIGFuZAorICogdGhlIGRhdGEgcGxhbmUgYnV0IGdlbmVyYWxseSBzZWVtcyB0byBiZSBkYXRhIHBsYW5lLWNlbnRyaWMsIGFueSBsYXllciBpcworICogYWJvdXQgZXF1YWxseSB3cm9uZyBmb3IgdGhlIFNBUC4gSWYgeW91IGhhdmUgYSBiZXR0ZXIgaWRlYSBhYm91dCB0aGlzLAorICogcGxlYXNlIHNwZWFrIHVwIC4uLgorICovCisKKworLyogQVRNIGNlbGwgaGVhZGVyIChmb3IgQUFMMCkgKi8KKworLyogQkVHSU5fQ0ggKi8KKyNkZWZpbmUgQVRNX0hEUl9HRkNfTUFTSwkweGYwMDAwMDAwCisjZGVmaW5lIEFUTV9IRFJfR0ZDX1NISUZUCTI4CisjZGVmaW5lIEFUTV9IRFJfVlBJX01BU0sJMHgwZmYwMDAwMAorI2RlZmluZSBBVE1fSERSX1ZQSV9TSElGVAkyMAorI2RlZmluZSBBVE1fSERSX1ZDSV9NQVNLCTB4MDAwZmZmZjAKKyNkZWZpbmUgQVRNX0hEUl9WQ0lfU0hJRlQJNAorI2RlZmluZSBBVE1fSERSX1BUSV9NQVNLCTB4MDAwMDAwMGUKKyNkZWZpbmUgQVRNX0hEUl9QVElfU0hJRlQJMQorI2RlZmluZSBBVE1fSERSX0NMUAkJMHgwMDAwMDAwMQorLyogRU5EX0NIICovCisKKworLyogUFRJIGNvZGluZ3MgKi8KKworLyogQkVHSU5fUFRJICovCisjZGVmaW5lIEFUTV9QVElfVVMwCTAgIC8qIHVzZXIgZGF0YSBjZWxsLCBjb25nZXN0aW9uIG5vdCBleHAsIFNEVS10eXBlIDAgKi8KKyNkZWZpbmUgQVRNX1BUSV9VUzEJMSAgLyogdXNlciBkYXRhIGNlbGwsIGNvbmdlc3Rpb24gbm90IGV4cCwgU0RVLXR5cGUgMSAqLworI2RlZmluZSBBVE1fUFRJX1VDRVMwCTIgIC8qIHVzZXIgZGF0YSBjZWxsLCBjb25nLiBleHBlcmllbmNlZCwgU0RVLXR5cGUgMCAqLworI2RlZmluZSBBVE1fUFRJX1VDRVMxCTMgIC8qIHVzZXIgZGF0YSBjZWxsLCBjb25nLiBleHBlcmllbmNlZCwgU0RVLXR5cGUgMSAqLworI2RlZmluZSBBVE1fUFRJX1NFR0Y1CTQgIC8qIHNlZ21lbnQgT0FNIEY1IGZsb3cgcmVsYXRlZCBjZWxsICovCisjZGVmaW5lIEFUTV9QVElfRTJFRjUJNSAgLyogZW5kLXRvLWVuZCBPQU0gRjUgZmxvdyByZWxhdGVkIGNlbGwgKi8KKyNkZWZpbmUgQVRNX1BUSV9SU1ZfUk0JNiAgLyogcmVzZXJ2ZWQgZm9yIHRyYWZmaWMgY29udHJvbC9yZXNvdXJjZSBtZ210ICovCisjZGVmaW5lIEFUTV9QVElfUlNWCTcgIC8qIHJlc2VydmVkICovCisvKiBFTkRfUFRJICovCisKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgaXRlbXMgc2hvdWxkIHN0YXkgaW4gbGludXgvYXRtLmgsIHdoaWNoIHNob3VsZCBiZSBsaW5rZWQgdG8KKyAqIG5ldGF0bS9hdG0uaAorICovCisKKy8qIFRyYWZmaWMgZGVzY3JpcHRpb24gKi8KKworI2RlZmluZSBBVE1fTk9ORQkwCQkvKiBubyB0cmFmZmljICovCisjZGVmaW5lIEFUTV9VQlIJCTEKKyNkZWZpbmUgQVRNX0NCUgkJMgorI2RlZmluZSBBVE1fVkJSCQkzCisjZGVmaW5lIEFUTV9BQlIJCTQKKyNkZWZpbmUgQVRNX0FOWUNMQVNTCTUJCS8qIGNvbXBhdGlibGUgd2l0aCBldmVyeXRoaW5nICovCisKKyNkZWZpbmUgQVRNX01BWF9QQ1IJLTEJCS8qIG1heGltdW0gYXZhaWxhYmxlIFBDUiAqLworCitzdHJ1Y3QgYXRtX3RyYWZwcm0geworCXVuc2lnbmVkIGNoYXIJdHJhZmZpY19jbGFzczsJLyogdHJhZmZpYyBjbGFzcyAoQVRNX1VCUiwgLi4uKSAqLworCWludAkJbWF4X3BjcjsJLyogbWF4aW11bSBQQ1IgaW4gY2VsbHMgcGVyIHNlY29uZCAqLworCWludAkJcGNyOwkJLyogZGVzaXJlZCBQQ1IgaW4gY2VsbHMgcGVyIHNlY29uZCAqLworCWludAkJbWluX3BjcjsJLyogbWluaW11bSBQQ1IgaW4gY2VsbHMgcGVyIHNlY29uZCAqLworCWludAkJbWF4X2NkdjsJLyogbWF4aW11bSBDRFYgaW4gbWljcm9zZWNvbmRzICovCisJaW50CQltYXhfc2R1OwkvKiBtYXhpbXVtIFNEVSBpbiBieXRlcyAqLworICAgICAgICAvKiBleHRyYSBwYXJhbXMgZm9yIEFCUiAqLworICAgICAgICB1bnNpZ25lZCBpbnQgCWljcjsgICAgICAgICAJLyogSW5pdGlhbCBDZWxsIFJhdGUgKDI0LWJpdCkgKi8KKyAgICAgICAgdW5zaWduZWQgaW50CXRiZTsJCS8qIFRyYW5zaWVudCBCdWZmZXIgRXhwb3N1cmUgKDI0LWJpdCkgKi8gCisgICAgICAgIHVuc2lnbmVkIGludCAJZnJ0dCA6IDI0OwkvKiBGaXhlZCBSb3VuZCBUcmlwIFRpbWUgKDI0LWJpdCkgKi8KKyAgICAgICAgdW5zaWduZWQgaW50IAlyaWYgIDogNDsgICAgICAgLyogUmF0ZSBJbmNyZW1lbnQgRmFjdG9yICg0LWJpdCkgKi8KKyAgICAgICAgdW5zaWduZWQgaW50IAlyZGYgIDogNDsgICAgICAgLyogUmF0ZSBEZWNyZWFzZSBGYWN0b3IgKDQtYml0KSAqLworICAgICAgICB1bnNpZ25lZCBpbnQgbnJtX3ByZXMgIDoxOyAgICAgIC8qIG5ybSBwcmVzZW50IGJpdCAqLworICAgICAgICB1bnNpZ25lZCBpbnQgdHJtX3ByZXMgIDoxOyAgICAgCS8qIHJtIHByZXNlbnQgYml0ICovCisgICAgICAgIHVuc2lnbmVkIGludCBhZHRmX3ByZXMgOjE7ICAgICAJLyogYWR0ZiBwcmVzZW50IGJpdCAqLworICAgICAgICB1bnNpZ25lZCBpbnQgY2RmX3ByZXMgIDoxOyAgICAJLyogY2RmIHByZXNlbnQgYml0Ki8KKyAgICAgICAgdW5zaWduZWQgaW50IG5ybSAgICAgICA6MzsgICAgIAkvKiBNYXggIyBvZiBDZWxscyBmb3IgZWFjaCBmb3J3YXJkIFJNIGNlbGwgKDMtYml0KSAqLworICAgICAgICB1bnNpZ25lZCBpbnQgdHJtICAgICAgIDozOyAgICAJLyogVGltZSBiZXR3ZWVuIGZvcndhcmQgUk0gY2VsbHMgKDMtYml0KSAqLyAgICAKKwl1bnNpZ25lZCBpbnQgYWR0ZiAgICAgIDoxMDsgICAgIC8qIEFDUiBEZWNyZWFzZSBUaW1lIEZhY3RvciAoMTAtYml0KSAqLworCXVuc2lnbmVkIGludCBjZGYgICAgICAgOjM7ICAgICAgLyogQ3V0b2ZmIERlY3JlYXNlIEZhY3RvciAoMy1iaXQpICovCisgICAgICAgIHVuc2lnbmVkIGludCBzcGFyZSAgICAgOjk7ICAgICAgLyogc3BhcmUgYml0cyAqLyAKK307CisKK3N0cnVjdCBhdG1fcW9zIHsKKwlzdHJ1Y3QgYXRtX3RyYWZwcm0gdHh0cDsJLyogcGFyYW1ldGVycyBpbiBUWCBkaXJlY3Rpb24gKi8KKwlzdHJ1Y3QgYXRtX3RyYWZwcm0gcnh0cCBfX0FUTV9BUElfQUxJR047CisJCQkJCS8qIHBhcmFtZXRlcnMgaW4gUlggZGlyZWN0aW9uICovCisJdW5zaWduZWQgY2hhciBhYWwgX19BVE1fQVBJX0FMSUdOOworfTsKKworLyogUFZDIGFkZHJlc3NpbmcgKi8KKworI2RlZmluZSBBVE1fSVRGX0FOWQktMQkJLyogIm1hZ2ljIiBQVkMgYWRkcmVzcyB2YWx1ZXMgKi8KKyNkZWZpbmUgQVRNX1ZQSV9BTlkJLTEKKyNkZWZpbmUgQVRNX1ZDSV9BTlkJLTEKKyNkZWZpbmUgQVRNX1ZQSV9VTlNQRUMJLTIKKyNkZWZpbmUgQVRNX1ZDSV9VTlNQRUMJLTIKKworCitzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjIHsKKwl1bnNpZ25lZCBzaG9ydCAJc2FwX2ZhbWlseTsJLyogYWRkcmVzcyBmYW1pbHksIEFGX0FUTVBWQyAgKi8KKwlzdHJ1Y3QgewkJCS8qIFBWQyBhZGRyZXNzICovCisJCXNob3J0CWl0ZjsJCS8qIEFUTSBpbnRlcmZhY2UgKi8KKwkJc2hvcnQJdnBpOwkJLyogVlBJIChvbmx5IDggYml0cyBhdCBVTkkpICovCisJCWludAl2Y2k7CQkvKiBWQ0kgKG9ubHkgMTYgYml0cyBhdCBVTkkpICovCisJfSBzYXBfYWRkciBfX0FUTV9BUElfQUxJR047CS8qIFBWQyBhZGRyZXNzICovCit9OworCisvKiBTVkMgYWRkcmVzc2luZyAqLworCisjZGVmaW5lCUFUTV9FU0FfTEVOCTIwCQkvKiBBVE0gRW5kIFN5c3RlbSBBZGRyZXNzIGxlbmd0aCAqLworI2RlZmluZSBBVE1fRTE2NF9MRU4JMTIJCS8qIG1heGltdW0gRS4xNjQgbnVtYmVyIGxlbmd0aCAqLworCisjZGVmaW5lIEFUTV9BRklfRENDCTB4MzkJCS8qIERDQyBBVE0gRm9ybWF0ICovCisjZGVmaW5lIEFUTV9BRklfSUNECTB4NDcJCS8qIElDRCBBVE0gRm9ybWF0ICovCisjZGVmaW5lIEFUTV9BRklfRTE2NAkweDQ1CQkvKiBFLjE2NCBBVE0gRm9ybWF0ICovCisjZGVmaW5lIEFUTV9BRklfTE9DQUwJMHg0OQkJLyogTG9jYWwgQVRNIEZvcm1hdCAqLyAKKworI2RlZmluZSBBVE1fQUZJX0RDQ19HUk9VUAkweEJECS8qIERDQyBBVE0gR3JvdXAgRm9ybWF0ICovCisjZGVmaW5lIEFUTV9BRklfSUNEX0dST1VQCTB4QzUJLyogSUNEIEFUTSBHcm91cCBGb3JtYXQgKi8KKyNkZWZpbmUgQVRNX0FGSV9FMTY0X0dST1VQCTB4QzMJLyogRS4xNjQgQVRNIEdyb3VwIEZvcm1hdCAqLworI2RlZmluZSBBVE1fQUZJX0xPQ0FMX0dST1VQCTB4QzcJLyogTG9jYWwgQVRNIEdyb3VwIEZvcm1hdCAqLworCisjZGVmaW5lIEFUTV9MSUpfTk9ORQkwCQkvKiBubyBsZWFmLWluaXRpYXRlZCBqb2luICovCisjZGVmaW5lIEFUTV9MSUoJCTEJCS8qIHJlcXVlc3Qgam9pbmluZyAqLworI2RlZmluZSBBVE1fTElKX1JQSgkyCQkvKiBzZXQgdG8gcm9vdC1wcm9tcHRlZCBqb2luICovCisjZGVmaW5lIEFUTV9MSUpfTkoJMwkJLyogc2V0IHRvIG5ldHdvcmsgam9pbiAqLworCisKK3N0cnVjdCBzb2NrYWRkcl9hdG1zdmMgeworICAgIHVuc2lnbmVkIHNob3J0IAlzYXNfZmFtaWx5OwkvKiBhZGRyZXNzIGZhbWlseSwgQUZfQVRNU1ZDICovCisgICAgc3RydWN0IHsJCQkJLyogU1ZDIGFkZHJlc3MgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhcglwcnZbQVRNX0VTQV9MRU5dOy8qIHByaXZhdGUgQVRNIGFkZHJlc3MgKi8KKyAgICAgICAgY2hhcgkJcHViW0FUTV9FMTY0X0xFTisxXTsgLyogcHVibGljIGFkZHJlc3MgKEUuMTY0KSAqLworICAgIAkJCQkJLyogdW51c2VkIGFkZHJlc3NlcyBtdXN0IGJlIGJ6ZXJvJ2VkICovCisJY2hhcgkJbGlqX3R5cGU7CS8qIHJvbGUgaW4gTElKIGNhbGw7IG9uZSBvZiBBVE1fTElKKiAqLworCV9fdTMyCWxpal9pZDsJCS8qIExJSiBjYWxsIGlkZW50aWZpZXIgKi8KKyAgICB9IHNhc19hZGRyIF9fQVRNX0FQSV9BTElHTjsJCS8qIFNWQyBhZGRyZXNzICovCit9OworCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG1zdmNfYWRkcl9pbl91c2Uoc3RydWN0IHNvY2thZGRyX2F0bXN2YyBhZGRyKQoreworCXJldHVybiAqYWRkci5zYXNfYWRkci5wcnYgfHwgKmFkZHIuc2FzX2FkZHIucHViOworfQorCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG1wdmNfYWRkcl9pbl91c2Uoc3RydWN0IHNvY2thZGRyX2F0bXB2YyBhZGRyKQoreworCXJldHVybiBhZGRyLnNhcF9hZGRyLml0ZiB8fCBhZGRyLnNhcF9hZGRyLnZwaSB8fCBhZGRyLnNhcF9hZGRyLnZjaTsKK30KKworCisvKgorICogU29tZSBzdHVmZiBmb3IgbGludXgvc29ja2lvcy5oCisgKi8KKworc3RydWN0IGF0bWlmX3Npb2MgeworCWludCBudW1iZXI7CisJaW50IGxlbmd0aDsKKwl2b2lkICphcmc7Cit9OworCisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgYXRtX2JhY2tlbmRfdDsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2F0bV9lbmkuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdG1fZW5pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRmMzE3OQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdG1fZW5pLmgKQEAgLTAsMCArMSwyMyBAQAorLyogYXRtX2VuaS5oIC0gRHJpdmVyLXNwZWNpZmljIGRlY2xhcmF0aW9ucyBvZiB0aGUgRU5JIGRyaXZlciAoZm9yIHVzZSBieQorCSAgICAgICBkcml2ZXItc3BlY2lmaWMgdXRpbGl0aWVzKSAqLworCisvKiBXcml0dGVuIDE5OTUtMjAwMCBieSBXZXJuZXIgQWxtZXNiZXJnZXIsIEVQRkwgTFJDL0lDQSAqLworCisKKyNpZm5kZWYgTElOVVhfQVRNX0VOSV9ICisjZGVmaW5lIExJTlVYX0FUTV9FTklfSAorCisjaW5jbHVkZSA8bGludXgvYXRtaW9jLmg+CisKKworc3RydWN0IGVuaV9tdWx0aXBsaWVycyB7CisJaW50IHR4LHJ4OwkvKiB2YWx1ZXMgYXJlIGluIHBlcmNlbnQgYW5kIG11c3QgYmUgPiAxMDAgKi8KK307CisKKworI2RlZmluZSBFTklfTUVNRFVNUCAgICAgX0lPVygnYScsQVRNSU9DX1NBUlBSVixzdHJ1Y3QgYXRtaWZfc2lvYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByaW50ayBtZW1vcnkgbWFwICovCisjZGVmaW5lIEVOSV9TRVRNVUxUCV9JT1coJ2EnLEFUTUlPQ19TQVJQUlYrNyxzdHJ1Y3QgYXRtaWZfc2lvYykKKwkJCQkJCS8qIHNldCBidWZmZXIgbXVsdGlwbGllcnMgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYXRtX2hlLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYXRtX2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE3NzEzYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdG1faGUuaApAQCAtMCwwICsxLDIwIEBACisvKiBhdG1faGUuaCAqLworCisjaWZuZGVmIExJTlVYX0FUTV9IRV9ICisjZGVmaW5lIExJTlVYX0FUTV9IRV9ICisKKyNpbmNsdWRlIDxsaW51eC9hdG1pb2MuaD4KKworI2RlZmluZSBIRV9HRVRfUkVHCV9JT1coJ2EnLCBBVE1JT0NfU0FSUFJWLCBzdHJ1Y3QgYXRtaWZfc2lvYykKKworI2RlZmluZSBIRV9SRUdUWVBFX1BDSQkxCisjZGVmaW5lIEhFX1JFR1RZUEVfUkNNCTIKKyNkZWZpbmUgSEVfUkVHVFlQRV9UQ00JMworI2RlZmluZSBIRV9SRUdUWVBFX01CT1gJNAorCitzdHJ1Y3QgaGVfaW9jdGxfcmVnIHsKKwl1bnNpZ25lZCBhZGRyLCB2YWw7CisJY2hhciB0eXBlOworfTsKKworI2VuZGlmIC8qIExJTlVYX0FUTV9IRV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYXRtX2lkdDc3MTA1LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYXRtX2lkdDc3MTA1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI3MjQwMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdG1faWR0NzcxMDUuaApAQCAtMCwwICsxLDI4IEBACisvKiBhdG1faWR0NzcxMDUuaCAtIERyaXZlci1zcGVjaWZpYyBkZWNsYXJhdGlvbnMgb2YgdGhlIElEVDc3MTA1IGRyaXZlciAoZm9yCisgKiB1c2UgYnkgZHJpdmVyLXNwZWNpZmljIHV0aWxpdGllcykgKi8KKworLyogV3JpdHRlbiAxOTk5IGJ5IEdyZWcgQmFua3MgPGduYkBsaW51eGZhbi5jb20+LiBDb3BpZWQgZnJvbSBhdG1fc3VuaS5oLiAqLworCisKKyNpZm5kZWYgTElOVVhfQVRNX0lEVDc3MTA1X0gKKyNkZWZpbmUgTElOVVhfQVRNX0lEVDc3MTA1X0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvYXRtaW9jLmg+CisjaW5jbHVkZSA8bGludXgvYXRtZGV2Lmg+CisKKy8qCisgKiBTdHJ1Y3R1cmUgZm9yIElEVDc3MTA1X0dFVFNUQVQgYW5kIElEVDc3MTA1X0dFVFNUQVRaIGlvY3Rscy4KKyAqIFBvaW50ZWQgdG8gYnkgYGFyZycgaW4gYXRtaWZfc2lvYy4KKyAqLworc3RydWN0IGlkdDc3MTA1X3N0YXRzIHsKKyAgICAgICAgX191MzIgc3ltYm9sX2Vycm9yczsgIC8qIHdpcmUgc3ltYm9sIGVycm9ycyAqLworICAgICAgICBfX3UzMiB0eF9jZWxsczsgICAgICAgLyogY2VsbHMgdHJhbnNtaXR0ZWQgKi8KKyAgICAgICAgX191MzIgcnhfY2VsbHM7ICAgICAgIC8qIGNlbGxzIHJlY2VpdmVkICovCisgICAgICAgIF9fdTMyIHJ4X2hlY19lcnJvcnM7ICAvKiBIZWFkZXIgRXJyb3IgQ2hlY2sgZXJyb3JzIG9uIHJlY2VpdmUgKi8KK307CisKKyNkZWZpbmUgSURUNzcxMDVfR0VUU1RBVAlfSU9XKCdhJyxBVE1JT0NfUEhZUFJWKzIsc3RydWN0IGF0bWlmX3Npb2MpCS8qIGdldCBzdGF0cyAqLworI2RlZmluZSBJRFQ3NzEwNV9HRVRTVEFUWglfSU9XKCdhJyxBVE1JT0NfUEhZUFJWKzMsc3RydWN0IGF0bWlmX3Npb2MpCS8qIGdldCBzdGF0cyBhbmQgemVybyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdG1fbmljc3Rhci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2F0bV9uaWNzdGFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3Yjc5ZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdG1fbmljc3Rhci5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBhdG1fbmljc3Rhci5oCisgKgorICogRHJpdmVyLXNwZWNpZmljIGRlY2xhcmF0aW9ucyBmb3IgdXNlIGJ5IE5JQ1NUQVIgZHJpdmVyIHNwZWNpZmljIHV0aWxzLgorICoKKyAqIEF1dGhvcjogUnVpIFByaW9yCisgKgorICogKEMpIElORVNDIDE5OTgKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgTElOVVhfQVRNX05JQ1NUQVJfSAorI2RlZmluZSBMSU5VWF9BVE1fTklDU1RBUl9ICisKKy8qIE5vdGU6IG5vbi1rZXJuZWwgcHJvZ3JhbXMgaW5jbHVkaW5nIHRoaXMgZmlsZSBtdXN0IGFsc28gaW5jbHVkZQorICogc3lzL3R5cGVzLmggZm9yIHN0cnVjdCB0aW1ldmFsCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2F0bWFwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bWlvYy5oPgorCisjZGVmaW5lIE5TX0dFVFBTVEFUCV9JT1dSKCdhJyxBVE1JT0NfU0FSUFJWKzEsc3RydWN0IGF0bWlmX3Npb2MpCisJCQkJCQkvKiBnZXQgcG9vbCBzdGF0aXN0aWNzICovCisjZGVmaW5lIE5TX1NFVEJVRkxFVglfSU9XKCdhJyxBVE1JT0NfU0FSUFJWKzIsc3RydWN0IGF0bWlmX3Npb2MpCisJCQkJCQkvKiBzZXQgYnVmZmVyIGxldmVsIG1hcmtlcnMgKi8KKyNkZWZpbmUgTlNfQURKQlVGTEVWCV9JTygnYScsQVRNSU9DX1NBUlBSViszKQorCQkJCQkJLyogYWRqdXN0IGJ1ZmZlciBsZXZlbCAqLworCit0eXBlZGVmIHN0cnVjdCBidWZfbnIKK3sKKyAgIHVuc2lnbmVkIG1pbjsKKyAgIHVuc2lnbmVkIGluaXQ7CisgICB1bnNpZ25lZCBtYXg7Cit9YnVmX25yOworCisKK3R5cGVkZWYgc3RydWN0IHBvb2xfbGV2ZWxzCit7CisgICBpbnQgYnVmdHlwZTsKKyAgIGludCBjb3VudDsJCS8qIChBdCBsZWFzdCBmb3Igbm93KSBvbmx5IHVzZWQgaW4gTlNfR0VUUFNUQVQgKi8KKyAgIGJ1Zl9uciBsZXZlbDsKK30gcG9vbF9sZXZlbHM7CisKKy8qIHR5cGUgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogKi8KKyNkZWZpbmUgTlNfQlVGVFlQRV9TTUFMTCAxCisjZGVmaW5lIE5TX0JVRlRZUEVfTEFSR0UgMgorI2RlZmluZSBOU19CVUZUWVBFX0hVR0UgMworI2RlZmluZSBOU19CVUZUWVBFX0lPVkVDIDQKKworCisjZW5kaWYgLyogTElOVVhfQVRNX05JQ1NUQVJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2F0bV90Y3AuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdG1fdGNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUyZTZhYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdG1fdGNwLmgKQEAgLTAsMCArMSw2MSBAQAorLyogYXRtX3RjcC5oIC0gRHJpdmVyLXNwZWNpZmljIGRlY2xhcmF0aW9ucyBvZiB0aGUgQVRNVENQIGRyaXZlciAoZm9yIHVzZSBieQorCSAgICAgICBkcml2ZXItc3BlY2lmaWMgdXRpbGl0aWVzKSAqLworCisvKiBXcml0dGVuIDE5OTctMjAwMCBieSBXZXJuZXIgQWxtZXNiZXJnZXIsIEVQRkwgTFJDL0lDQSAqLworCisKKyNpZm5kZWYgTElOVVhfQVRNX1RDUF9ICisjZGVmaW5lIExJTlVYX0FUTV9UQ1BfSAorCisjaW5jbHVkZSA8bGludXgvYXRtYXBpLmg+CisjaW5jbHVkZSA8bGludXgvYXRtLmg+CisjaW5jbHVkZSA8bGludXgvYXRtaW9jLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworCisvKgorICogQWxsIHZhbHVlcyBpbiBzdHJ1Y3QgYXRtdGNwX2hkciBhcmUgaW4gbmV0d29yayBieXRlIG9yZGVyCisgKi8KKworc3RydWN0IGF0bXRjcF9oZHIgeworCV9fdTE2CXZwaTsKKwlfX3UxNgl2Y2k7CisJX191MzIJbGVuZ3RoOwkJLyogLi4uIG9mIGRhdGEgcGFydCAqLworfTsKKworLyoKKyAqIEFsbCB2YWx1ZXMgaW4gc3RydWN0IGF0bXRjcF9jb21tYW5kIGFyZSBpbiBob3N0IGJ5dGUgb3JkZXIKKyAqLworCisjZGVmaW5lIEFUTVRDUF9IRFJfTUFHSUMJKH4wKQkvKiB0aGlzIGxlbmd0aCBpbmRpY2F0ZXMgYSBjb21tYW5kICovCisjZGVmaW5lIEFUTVRDUF9DVFJMX09QRU4JMQkvKiByZXF1ZXN0L3JlcGx5ICovCisjZGVmaW5lIEFUTVRDUF9DVFJMX0NMT1NFCTIJLyogcmVxdWVzdC9yZXBseSAqLworCitzdHJ1Y3QgYXRtdGNwX2NvbnRyb2wgeworCXN0cnVjdCBhdG10Y3BfaGRyIGhkcjsJLyogbXVzdCBiZSBmaXJzdCAqLworCWludCB0eXBlOwkJLyogbWVzc2FnZSB0eXBlOyBib3RoIGRpcmVjdGlvbnMgKi8KKwlhdG1fa3B0cl90IHZjYzsJCS8qIGJvdGggZGlyZWN0aW9ucyAqLworCXN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgYWRkcjsgLyogc3VnZ2VzdGVkIHZhbHVlIGZyb20ga2VybmVsICovCisJc3RydWN0IGF0bV9xb3MJcW9zOwkvKiBib3RoIGRpcmVjdGlvbnMgKi8KKwlpbnQgcmVzdWx0OwkJLyogdG8ga2VybmVsIG9ubHkgKi8KK30gX19BVE1fQVBJX0FMSUdOOworCisvKgorICogRmllbGQgdXNhZ2U6CisgKiBNZXNzZ2UgdHlwZQlkaXIuCWhkci52P2kJdHlwZQlhZGRyCXFvcwl2Y2MJcmVzdWx0CisgKiAtLS0tLS0tLS0tLSAgLS0tLQktLS0tLS0tIC0tLS0JLS0tLQktLS0JLS0tCS0tLS0tLQorICogT1BFTgkJSy0+RAlZCVkJWQlZCVkJMAorICogT1BFTgkJRC0+SwktCVkJWQlZCVkJWQorICogQ0xPU0UJSy0+RAktCS0JWQktCVkJMAorICogQ0xPU0UJRC0+SwktCS0JLQktCVkJWQorICovCisKKyNkZWZpbmUgU0lPQ1NJRkFUTVRDUAlfSU8oJ2EnLEFUTUlPQ19JVEYpCS8qIHNldCBBVE1UQ1AgbW9kZSAqLworI2RlZmluZSBBVE1UQ1BfQ1JFQVRFCV9JTygnYScsQVRNSU9DX0lURisxNCkJLyogY3JlYXRlIHBlcnNpc3RlbnQgQVRNVENQCisJCQkJCQkgICBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgQVRNVENQX1JFTU9WRQlfSU8oJ2EnLEFUTUlPQ19JVEYrMTUpCS8qIGRlc3Ryb3kgcGVyc2lzdGVudCBBVE1UQ1AKKwkJCQkJCSAgIGludGVyZmFjZSAqLworCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYXRtX3phdG0uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdG1femF0bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZjBmYTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYXRtX3phdG0uaApAQCAtMCwwICsxLDUyIEBACisvKiBhdG1femF0bS5oIC0gRHJpdmVyLXNwZWNpZmljIGRlY2xhcmF0aW9ucyBvZiB0aGUgWkFUTSBkcml2ZXIgKGZvciB1c2UgYnkKKwkJZHJpdmVyLXNwZWNpZmljIHV0aWxpdGllcykgKi8KKworLyogV3JpdHRlbiAxOTk1LTE5OTkgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIExSQy9JQ0EgKi8KKworCisjaWZuZGVmIExJTlVYX0FUTV9aQVRNX0gKKyNkZWZpbmUgTElOVVhfQVRNX1pBVE1fSAorCisvKgorICogTm90ZTogbm9uLWtlcm5lbCBwcm9ncmFtcyBpbmNsdWRpbmcgdGhpcyBmaWxlIG11c3QgYWxzbyBpbmNsdWRlCisgKiBzeXMvdHlwZXMuaCBmb3Igc3RydWN0IHRpbWV2YWwKKyAqLworCisjaW5jbHVkZSA8bGludXgvYXRtYXBpLmg+CisjaW5jbHVkZSA8bGludXgvYXRtaW9jLmg+CisKKyNkZWZpbmUgWkFUTV9HRVRQT09MCV9JT1coJ2EnLEFUTUlPQ19TQVJQUlYrMSxzdHJ1Y3QgYXRtaWZfc2lvYykKKwkJCQkJCS8qIGdldCBwb29sIHN0YXRpc3RpY3MgKi8KKyNkZWZpbmUgWkFUTV9HRVRQT09MWglfSU9XKCdhJyxBVE1JT0NfU0FSUFJWKzIsc3RydWN0IGF0bWlmX3Npb2MpCisJCQkJCQkvKiBnZXQgc3RhdGlzdGljcyBhbmQgemVybyAqLworI2RlZmluZSBaQVRNX1NFVFBPT0wJX0lPVygnYScsQVRNSU9DX1NBUlBSViszLHN0cnVjdCBhdG1pZl9zaW9jKQorCQkJCQkJLyogc2V0IHBvb2wgcGFyYW1ldGVycyAqLworCitzdHJ1Y3QgemF0bV9wb29sX2luZm8geworCWludCByZWZfY291bnQ7CQkJLyogZnJlZSBidWZmZXIgcG9vbCB1c2FnZSBjb3VudGVycyAqLworCWludCBsb3dfd2F0ZXIsaGlnaF93YXRlcjsJLyogcmVmaWxsIHBhcmFtZXRlcnMgKi8KKwlpbnQgcnFhX2NvdW50LHJxdV9jb3VudDsJLyogcXVldWUgY29uZGl0aW9uIGNvdW50ZXJzICovCisJaW50IG9mZnNldCxuZXh0X29mZjsJCS8qIGFsaWdubWVudCBvcHRpbWl6YXRpb25zOiBvZmZzZXQgKi8KKwlpbnQgbmV4dF9jbnQsbmV4dF90aHJlczsJLyogcmVwZXRpdGlvbiBjb3VudGVyIGFuZCB0aHJlc2hvbGQgKi8KK307CisKK3N0cnVjdCB6YXRtX3Bvb2xfcmVxIHsKKwlpbnQgcG9vbF9udW07CQkJLyogcG9vbCBudW1iZXIgKi8KKwlzdHJ1Y3QgemF0bV9wb29sX2luZm8gaW5mbzsJLyogYWN0dWFsIGluZm9ybWF0aW9uICovCit9OworCitzdHJ1Y3QgemF0bV90X2hpc3QgeworCXN0cnVjdCB0aW1ldmFsIHJlYWw7CQkvKiByZWFsICh3YWxsLWNsb2NrKSB0aW1lICovCisJc3RydWN0IHRpbWV2YWwgZXhwZWN0ZWQ7CS8qIGV4cGVjdGVkIHJlYWwgdGltZSAqLworfTsKKworCisjZGVmaW5lIFpBVE1fT0FNX1BPT0wJCTAJLyogZnJlZSBidWZmZXIgcG9vbCBmb3IgT0FNIGNlbGxzICovCisjZGVmaW5lIFpBVE1fQUFMMF9QT09MCQkxCS8qIGZyZWUgYnVmZmVyIHBvb2wgZm9yIEFBTDAgY2VsbHMgKi8KKyNkZWZpbmUgWkFUTV9BQUw1X1BPT0xfQkFTRQkyCS8qIGZpcnN0IEFBTDUgZnJlZSBidWZmZXIgcG9vbCAqLworI2RlZmluZSBaQVRNX0xBU1RfUE9PTAlaQVRNX0FBTDVfUE9PTF9CQVNFKzEwIC8qIG1heC4gNjQga0IgKi8KKworI2RlZmluZSBaQVRNX1RJTUVSX0hJU1RPUllfU0laRQkxNgkvKiBudW1iZXIgb2YgdGltZXIgYWRqdXN0bWVudHMgdG8KKwkJCQkJICAgcmVjb3JkOyBtdXN0IGJlIDJebiAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdG1hcGkuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdG1hcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmU1NGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2F0bWFwaS5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGF0bWFwaS5oIC0gQVRNIEFQSSB1c2VyIHNwYWNlL2tlcm5lbCBjb21wYXRpYmlsaXR5ICovCisgCisvKiBXcml0dGVuIDE5OTksMjAwMCBieSBXZXJuZXIgQWxtZXNiZXJnZXIsIEVQRkwgSUNBICovCisgCisKKyNpZm5kZWYgX0xJTlVYX0FUTUFQSV9ICisjZGVmaW5lIF9MSU5VWF9BVE1BUElfSAorCisjaWYgZGVmaW5lZChfX3NwYXJjX18pIHx8IGRlZmluZWQoX19pYTY0X18pCisvKiBzdWNoIGFsaWdubWVudCBpcyBub3QgcmVxdWlyZWQgb24gMzIgYml0IHNwYXJjcywgYnV0IHdlIGNhbid0CisgICBmaWd1cmUgdGhhdCB3ZSBhcmUgb24gYSBzcGFyYzY0IHdoaWxlIGNvbXBpbGluZyB1c2VyLXNwYWNlIHByb2dyYW1zLiAqLworI2RlZmluZSBfX0FUTV9BUElfQUxJR04JX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpCisjZWxzZQorI2RlZmluZSBfX0FUTV9BUElfQUxJR04KKyNlbmRpZgorCisKKy8qCisgKiBPcGFxdWUgdHlwZSBmb3Iga2VybmVsIHBvaW50ZXJzLiBOb3RlIHRoYXQgXyBpcyBuZXZlciBhY2Nlc3NlZC4gV2UgbmVlZAorICogdGhlIHN0cnVjdCBpbiBvcmRlciBoaWRlIHRoZSBhcnJheSwgc28gdGhhdCB3ZSBjYW4gbWFrZSBzaW1wbGUgYXNzaWdubWVudHMKKyAqIGluc3RlYWQgb2YgYmVpbmcgZm9yY2VkIHRvIHVzZSBtZW1jcHkuIEl0IGFsc28gaW1wcm92ZXMgZXJyb3IgcmVwb3J0aW5nIGZvcgorICogY29kZSB0aGF0IHN0aWxsIGFzc3VtZXMgdGhhdCB3ZSdyZSBwYXNzaW5nIHVuc2lnbmVkIGxvbmdzLgorICoKKyAqIENvbnZlbnRpb246IE5VTEwgcG9pbnRlcnMgYXJlIHBhc3NlZCBhcyBhIGZpZWxkIG9mIGFsbCB6ZXJvZXMuCisgKi8KKyAKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgY2hhciBfWzhdOyB9IF9fQVRNX0FQSV9BTElHTiBhdG1fa3B0cl90OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdG1hcnAuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdG1hcnAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzFmNGJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2F0bWFycC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qIGF0bWFycC5oIC0gQVRNIEFSUCBwcm90b2NvbCBhbmQga2VybmVsLWRlbW9uIGludGVyZmFjZSBkZWZpbml0aW9ucyAqLworIAorLyogV3JpdHRlbiAxOTk1LTE5OTkgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIExSQy9JQ0EgKi8KKyAKKworI2lmbmRlZiBfTElOVVhfQVRNQVJQX0gKKyNkZWZpbmUgX0xJTlVYX0FUTUFSUF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bWFwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bWlvYy5oPgorCisKKyNkZWZpbmUgQVRNQVJQX1JFVFJZX0RFTEFZIDMwCQkvKiByZXF1ZXN0IG5leHQgcmVzb2x1dGlvbiBvciBmb3JnZXQKKwkJCQkJICAgTkFLIGFmdGVyIDMwIHNlYyAtIHNob3VsZCBnbyBpbnRvCisJCQkJCSAgIGF0bWNsaXAuaCAqLworI2RlZmluZSBBVE1BUlBfTUFYX1VOUkVTX1BBQ0tFVFMgNQkvKiBxdWV1ZSB0aGF0IG1hbnkgcGFja2V0cyB3aGlsZQorCQkJCQkgICB3YWl0aW5nIGZvciB0aGUgcmVzb2x2ZXIgKi8KKworCisjZGVmaW5lIEFUTUFSUERfQ1RSTAlfSU8oJ2EnLEFUTUlPQ19DTElQKzEpCS8qIGJlY29tZSBhdG1hcnBkIGN0cmwgc29jayAqLworI2RlZmluZSBBVE1BUlBfTUtJUAlfSU8oJ2EnLEFUTUlPQ19DTElQKzIpCS8qIGF0dGFjaCBzb2NrZXQgdG8gSVAgKi8KKyNkZWZpbmUgQVRNQVJQX1NFVEVOVFJZCV9JTygnYScsQVRNSU9DX0NMSVArMykJLyogZmlsbCBvciBoaWRlIEFSUCBlbnRyeSAqLworI2RlZmluZSBBVE1BUlBfRU5DQVAJX0lPKCdhJyxBVE1JT0NfQ0xJUCs1KQkvKiBjaGFuZ2UgZW5jYXBzdWxhdGlvbiAqLworCisKK2VudW0gYXRtYXJwX2N0cmxfdHlwZSB7CisJYWN0X2ludmFsaWQsCQkvKiBjYXRjaCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZXMgKi8KKwlhY3RfbmVlZCwJCS8qIG5lZWQgYWRkcmVzcyByZXNvbHV0aW9uICovCisJYWN0X3VwLAkJCS8qIGludGVyZmFjZSBpcyBjb21pbmcgdXAgKi8KKwlhY3RfZG93biwJCS8qIGludGVyZmFjZSBpcyBnb2luZyBkb3duICovCisJYWN0X2NoYW5nZQkJLyogaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gaGFzIGNoYW5nZWQgKi8KK307CisKK3N0cnVjdCBhdG1hcnBfY3RybCB7CisJZW51bSBhdG1hcnBfY3RybF90eXBlCXR5cGU7CS8qIG1lc3NhZ2UgdHlwZSAqLworCWludAkJCWl0Zl9udW07LyogaW50ZXJmYWNlIG51bWJlciAoaWYgcHJlc2VudCkgKi8KKwlfX2JlMzIJCQlpcDsJLyogSVAgYWRkcmVzcyAoYWN0X25lZWQgb25seSkgKi8KK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2F0bWJyMjY4NC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2F0bWJyMjY4NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYjI2MjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYXRtYnIyNjg0LmgKQEAgLTAsMCArMSwxMTcgQEAKKyNpZm5kZWYgX0xJTlVYX0FUTUJSMjY4NF9ICisjZGVmaW5lIF9MSU5VWF9BVE1CUjI2ODRfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pZi5oPgkJLyogRm9yIElGTkFNU0laICovCisKKy8qCisgKiBUeXBlIG9mIG1lZGlhIHdlJ3JlIGJyaWRnaW5nIChldGhlcm5ldCwgdG9rZW4gcmluZywgZXRjKSAgQ3VycmVudGx5IG9ubHkKKyAqIGV0aGVybmV0IGlzIHN1cHBvcnRlZAorICovCisjZGVmaW5lIEJSMjY4NF9NRURJQV9FVEhFUk5FVAkoMCkJLyogODAyLjMgKi8KKyNkZWZpbmUgQlIyNjg0X01FRElBXzgwMl80CSgxKQkvKiA4MDIuNCAqLworI2RlZmluZSBCUjI2ODRfTUVESUFfVFIJCSgyKQkvKiA4MDIuNSAtIHRva2VuIHJpbmcgKi8KKyNkZWZpbmUgQlIyNjg0X01FRElBX0ZEREkJKDMpCisjZGVmaW5lIEJSMjY4NF9NRURJQV84MDJfNgkoNCkJLyogODAyLjYgKi8KKworCQkJCQkvKiB1c2VkIG9ubHkgYXQgZGV2aWNlIGNyZWF0aW9uOiAgKi8KKyNkZWZpbmUgQlIyNjg0X0ZMQUdfUk9VVEVECSgxPDwxNikJLyogcGF5bG9hZCBpcyByb3V0ZWQsIG5vdCBicmlkZ2VkICovCisKKy8qCisgKiBJcyB0aGVyZSBGQ1MgaW5ib3VuZCBvbiB0aGlzIFZDPyAgVGhpcyBjdXJyZW50bHkgaXNuJ3Qgc3VwcG9ydGVkLgorICovCisjZGVmaW5lIEJSMjY4NF9GQ1NJTl9OTwkJKDApCisjZGVmaW5lIEJSMjY4NF9GQ1NJTl9JR05PUkUJKDEpCisjZGVmaW5lIEJSMjY4NF9GQ1NJTl9WRVJJRlkJKDIpCisKKy8qCisgKiBJcyB0aGVyZSBGQ1Mgb3V0Ym91bmQgb24gdGhpcyBWQz8gIFRoaXMgY3VycmVudGx5IGlzbid0IHN1cHBvcnRlZC4KKyAqLworI2RlZmluZSBCUjI2ODRfRkNTT1VUX05PCSgwKQorI2RlZmluZSBCUjI2ODRfRkNTT1VUX1NFTkRaRVJPCSgxKQorI2RlZmluZSBCUjI2ODRfRkNTT1VUX0dFTkVSQVRFCSgyKQorCisvKgorICogRG9lcyB0aGlzIFZDIGluY2x1ZGUgTExDIGVuY2Fwc3VsYXRpb24/CisgKi8KKyNkZWZpbmUgQlIyNjg0X0VOQ0FQU19WQwkoMCkJLyogVkMtbXV4ICovCisjZGVmaW5lIEJSMjY4NF9FTkNBUFNfTExDCSgxKQorI2RlZmluZSBCUjI2ODRfRU5DQVBTX0FVVE9ERVRFQ1QgKDIpCS8qIFVuc3Vwb3J0ZWQgKi8KKworLyoKKyAqIElzIHRoaXMgVkMgYnJpZGdlZCBvciByb3V0ZWQ/CisgKi8KKworI2RlZmluZSBCUjI2ODRfUEFZTE9BRF9ST1VURUQgICAoMCkKKyNkZWZpbmUgQlIyNjg0X1BBWUxPQURfQlJJREdFRCAgKDEpCisKKy8qCisgKiBUaGlzIGlzIGZvciB0aGUgQVRNX05FV0JBQ0tFTkRJRiBjYWxsIC0gdGhlc2UgYXJlIGxpa2Ugc29ja2V0IGZhbWlsaWVzOgorICogdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIHN0cnVjdHVyZSBpcyB0aGUgYmFja2VuZCBudW1iZXIgYW5kIHRoZSByZXN0CisgKiBpcyBwZXItYmFja2VuZCBzcGVjaWZpYworICovCitzdHJ1Y3QgYXRtX25ld2lmX2JyMjY4NCB7CisJYXRtX2JhY2tlbmRfdCBiYWNrZW5kX251bTsJLyogQVRNX0JBQ0tFTkRfQlIyNjg0ICovCisJaW50IG1lZGlhOwkJLyogQlIyNjg0X01FRElBXyosIGZsYWdzIGluIHVwcGVyIGJpdHMgKi8KKwljaGFyIGlmbmFtZVtJRk5BTVNJWl07CisJaW50IG10dTsKK307CisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHNwZWNpZnkgYSBicjI2ODQgaW50ZXJmYWNlIC0gZWl0aGVyIGJ5IGEKKyAqIHBvc2l0aXZlIGludGVnZXIgKHJldHVybmVkIGJ5IEFUTV9ORVdCQUNLRU5ESUYpIG9yIHRoZSBpbnRlcmZhY2VzIG5hbWUKKyAqLworI2RlZmluZSBCUjI2ODRfRklORF9CWU5PVEhJTkcJKDApCisjZGVmaW5lIEJSMjY4NF9GSU5EX0JZTlVNCSgxKQorI2RlZmluZSBCUjI2ODRfRklORF9CWUlGTkFNRQkoMikKK3N0cnVjdCBicjI2ODRfaWZfc3BlYyB7CisJaW50IG1ldGhvZDsJCS8qIEJSMjY4NF9GSU5EXyogKi8KKwl1bmlvbiB7CisJCWNoYXIgaWZuYW1lW0lGTkFNU0laXTsKKwkJaW50IGRldm51bTsKKwl9IHNwZWM7Cit9OworCisvKgorICogVGhpcyBpcyBmb3IgdGhlIEFUTV9TRVRCQUNLRU5EIGNhbGwgLSB0aGVzZSBhcmUgbGlrZSBzb2NrZXQgZmFtaWxpZXM6CisgKiB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgc3RydWN0dXJlIGlzIHRoZSBiYWNrZW5kIG51bWJlciBhbmQgdGhlIHJlc3QKKyAqIGlzIHBlci1iYWNrZW5kIHNwZWNpZmljCisgKi8KK3N0cnVjdCBhdG1fYmFja2VuZF9icjI2ODQgeworCWF0bV9iYWNrZW5kX3QgYmFja2VuZF9udW07CS8qIEFUTV9CQUNLRU5EX0JSMjY4NCAqLworCXN0cnVjdCBicjI2ODRfaWZfc3BlYyBpZnNwZWM7CisJaW50IGZjc19pbjsJCS8qIEJSMjY4NF9GQ1NJTl8qICovCisJaW50IGZjc19vdXQ7CQkvKiBCUjI2ODRfRkNTT1VUXyogKi8KKwlpbnQgZmNzX2F1dG87CQkvKiAxOiBmY3Nfe2luLG91dH0gZGlzYWJsZWQgaWYgbm8gRkNTIHJ4J2VkICovCisJaW50IGVuY2FwczsJCS8qIEJSMjY4NF9FTkNBUFNfKiAqLworCWludCBoYXNfdnBpaWQ7CQkvKiAxOiB1c2UgdnBuX2lkIC0gVW5zdXBwb3J0ZWQgKi8KKwlfX3U4IHZwbl9pZFs3XTsKKwlpbnQgc2VuZF9wYWRkaW5nOwkvKiB1bnN1cHBvcnRlZCAqLworCWludCBtaW5fc2l6ZTsJCS8qIHdlIHdpbGwgcGFkIHNtYWxsZXIgcGFja2V0cyB0aGFuIHRoaXMgKi8KK307CisKKy8qCisgKiBUaGUgQlIyNjg0X1NFVEZJTFQgaW9jdGwgaXMgYW4gZXhwZXJpbWVudGFsIG1lY2hhbmlzbSBmb3IgZm9sa3MKKyAqIHRlcm1pbmF0aW5nIGEgbGFyZ2UgbnVtYmVyIG9mIElQLW9ubHkgdmNjJ3MuICBXaGVuIG5ldGZpbHRlciBhbGxvd3MKKyAqIGVmZmljaWVudCBwZXItaWYgaW4vb3V0IGZpbHRlcnMsIHRoaXMgc3VwcG9ydCB3aWxsIGJlIHJlbW92ZWQKKyAqLworc3RydWN0IGJyMjY4NF9maWx0ZXIgeworCV9fYmUzMiBwcmVmaXg7CQkvKiBuZXR3b3JrIGJ5dGUgb3JkZXIgKi8KKwlfX2JlMzIgbmV0bWFzazsJCS8qIDAgPSBkaXNhYmxlIGZpbHRlciAqLworfTsKKworc3RydWN0IGJyMjY4NF9maWx0ZXJfc2V0IHsKKwlzdHJ1Y3QgYnIyNjg0X2lmX3NwZWMgaWZzcGVjOworCXN0cnVjdCBicjI2ODRfZmlsdGVyIGZpbHRlcjsKK307CisKK2VudW0gYnIyNjg0X3BheWxvYWQgeworCXBfcm91dGVkID0gQlIyNjg0X1BBWUxPQURfUk9VVEVELAorCXBfYnJpZGdlZCA9IEJSMjY4NF9QQVlMT0FEX0JSSURHRUQsCit9OworCisjZGVmaW5lIEJSMjY4NF9TRVRGSUxUCV9JT1coICdhJywgQVRNSU9DX0JBQ0tFTkQgKyAwLCBcCisJCQkJc3RydWN0IGJyMjY4NF9maWx0ZXJfc2V0KQorCisjZW5kaWYgLyogX0xJTlVYX0FUTUJSMjY4NF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYXRtY2xpcC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2F0bWNsaXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmM5NGM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2F0bWNsaXAuaApAQCAtMCwwICsxLDIxIEBACisvKiBhdG1jbGlwLmggLSBDbGFzc2ljYWwgSVAgb3ZlciBBVE0gKi8KKyAKKy8qIFdyaXR0ZW4gMTk5NS0xOTk4IGJ5IFdlcm5lciBBbG1lc2JlcmdlciwgRVBGTCBMUkMvSUNBICovCisgCisKKyNpZm5kZWYgTElOVVhfQVRNQ0xJUF9ICisjZGVmaW5lIExJTlVYX0FUTUNMSVBfSAorCisjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bWlvYy5oPgorCisKKyNkZWZpbmUgUkZDMTQ4M0xMQ19MRU4JOAkJLyogTExDK09VSStQSUQgPSA4ICovCisjZGVmaW5lIFJGQzE2MjZfTVRVCTkxODAJCS8qIFJGQzE2MjYgZGVmYXVsdCBNVFUgKi8KKworI2RlZmluZSBDTElQX0RFRkFVTFRfSURMRVRJTUVSIDEyMDAJLyogMjAgbWludXRlcywgc2VlIFJGQzE3NTUgKi8KKyNkZWZpbmUgQ0xJUF9DSEVDS19JTlRFUlZBTAkgMTAJLyogY2hlY2sgZXZlcnkgdGVuIHNlY29uZHMgKi8KKworI2RlZmluZQlTSU9DTUtDTElQCV9JTygnYScsQVRNSU9DX0NMSVApCS8qIGNyZWF0ZSBJUCBpbnRlcmZhY2UgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYXRtZGV2LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYXRtZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM1MWE0YgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdG1kZXYuaApAQCAtMCwwICsxLDIxNSBAQAorLyogYXRtZGV2LmggLSBBVE0gZGV2aWNlIGRyaXZlciBkZWNsYXJhdGlvbnMgYW5kIHZhcmlvdXMgcmVsYXRlZCBpdGVtcyAqLworIAorLyogV3JpdHRlbiAxOTk1LTIwMDAgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIExSQy9JQ0EgKi8KKyAKKworI2lmbmRlZiBMSU5VWF9BVE1ERVZfSAorI2RlZmluZSBMSU5VWF9BVE1ERVZfSAorCisKKyNpbmNsdWRlIDxsaW51eC9hdG1hcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG0uaD4KKyNpbmNsdWRlIDxsaW51eC9hdG1pb2MuaD4KKworCisjZGVmaW5lIEVTSV9MRU4JCTYKKworI2RlZmluZSBBVE1fT0MzX1BDUgkoMTU1NTIwMDAwLzI3MCoyNjAvOC81MykKKwkJCS8qIE9DMyBsaW5rIHJhdGU6ICAxNTU1MjAwMDAgYnBzCisJCQkgICBTT05FVCBvdmVyaGVhZDogLzI3MCoyNjAgKDkgc2VjdGlvbiwgMSBwYXRoKQorCQkJICAgYml0cyBwZXIgY2VsbDogIC84LzUzCisJCQkgICBtYXggY2VsbCByYXRlOiAgMzUzMjA3LjU0NyBjZWxscy9zZWMgKi8KKyNkZWZpbmUgQVRNXzI1X1BDUgkoKDI1NjAwMDAwLzgtODAwMCkvNTQpCisJCQkvKiAyNSBNYnBzIEFUTSBjZWxsIHJhdGUgKDU5MTExKSAqLworI2RlZmluZSBBVE1fT0MxMl9QQ1IJKDYyMjA4MDAwMC8xMDgwKjEwNDAvOC81MykKKwkJCS8qIE9DMTIgbGluayByYXRlOiA2MjIwODAwMDAgYnBzCisJCQkgICBTT05FVCBvdmVyaGVhZDogLzEwODAqMTA0MAorCQkJICAgYml0cyBwZXIgY2VsbDogIC84LzUzCisJCQkgICBtYXggY2VsbCByYXRlOiAgMTQxMjgzMC4xODggY2VsbHMvc2VjICovCisjZGVmaW5lIEFUTV9EUzNfUENSCSg4MDAwKjEyKQorCQkJLyogRFMzOiAxMiBjZWxscyBpbiBhIDEyNSB1c2VjIHRpbWUgc2xvdCAqLworCisKKyNkZWZpbmUgX19BQUxfU1RBVF9JVEVNUyBcCisgICAgX19IQU5ETEVfSVRFTSh0eCk7CQkJLyogVFggb2theSAqLyBcCisgICAgX19IQU5ETEVfSVRFTSh0eF9lcnIpOwkJLyogVFggZXJyb3JzICovIFwKKyAgICBfX0hBTkRMRV9JVEVNKHJ4KTsJCQkvKiBSWCBva2F5ICovIFwKKyAgICBfX0hBTkRMRV9JVEVNKHJ4X2Vycik7CQkvKiBSWCBlcnJvcnMgKi8gXAorICAgIF9fSEFORExFX0lURU0ocnhfZHJvcCk7CQkvKiBSWCBvdXQgb2YgbWVtb3J5ICovCisKK3N0cnVjdCBhdG1fYWFsX3N0YXRzIHsKKyNkZWZpbmUgX19IQU5ETEVfSVRFTShpKSBpbnQgaQorCV9fQUFMX1NUQVRfSVRFTVMKKyN1bmRlZiBfX0hBTkRMRV9JVEVNCit9OworCisKK3N0cnVjdCBhdG1fZGV2X3N0YXRzIHsKKwlzdHJ1Y3QgYXRtX2FhbF9zdGF0cyBhYWwwOworCXN0cnVjdCBhdG1fYWFsX3N0YXRzIGFhbDM0OworCXN0cnVjdCBhdG1fYWFsX3N0YXRzIGFhbDU7Cit9IF9fQVRNX0FQSV9BTElHTjsKKworCisjZGVmaW5lIEFUTV9HRVRMSU5LUkFURQlfSU9XKCdhJyxBVE1JT0NfSVRGKzEsc3RydWN0IGF0bWlmX3Npb2MpCisJCQkJCS8qIGdldCBsaW5rIHJhdGUgKi8KKyNkZWZpbmUgQVRNX0dFVE5BTUVTCV9JT1coJ2EnLEFUTUlPQ19JVEYrMyxzdHJ1Y3QgYXRtX2lvYnVmKQorCQkJCQkvKiBnZXQgaW50ZXJmYWNlIG5hbWVzIChudW1iZXJzKSAqLworI2RlZmluZSBBVE1fR0VUVFlQRQlfSU9XKCdhJyxBVE1JT0NfSVRGKzQsc3RydWN0IGF0bWlmX3Npb2MpCisJCQkJCS8qIGdldCBpbnRlcmZhY2UgdHlwZSBuYW1lICovCisjZGVmaW5lIEFUTV9HRVRFU0kJX0lPVygnYScsQVRNSU9DX0lURis1LHN0cnVjdCBhdG1pZl9zaW9jKQorCQkJCQkvKiBnZXQgaW50ZXJmYWNlIEVTSSAqLworI2RlZmluZSBBVE1fR0VUQUREUglfSU9XKCdhJyxBVE1JT0NfSVRGKzYsc3RydWN0IGF0bWlmX3Npb2MpCisJCQkJCS8qIGdldCBpdGYncyBsb2NhbCBBVE0gYWRkci4gbGlzdCAqLworI2RlZmluZSBBVE1fUlNUQUREUglfSU9XKCdhJyxBVE1JT0NfSVRGKzcsc3RydWN0IGF0bWlmX3Npb2MpCisJCQkJCS8qIHJlc2V0IGl0ZidzIEFUTSBhZGRyZXNzIGxpc3QgKi8KKyNkZWZpbmUgQVRNX0FEREFERFIJX0lPVygnYScsQVRNSU9DX0lURis4LHN0cnVjdCBhdG1pZl9zaW9jKQorCQkJCQkvKiBhZGQgYSBsb2NhbCBBVE0gYWRkcmVzcyAqLworI2RlZmluZSBBVE1fREVMQUREUglfSU9XKCdhJyxBVE1JT0NfSVRGKzksc3RydWN0IGF0bWlmX3Npb2MpCisJCQkJCS8qIHJlbW92ZSBhIGxvY2FsIEFUTSBhZGRyZXNzICovCisjZGVmaW5lIEFUTV9HRVRDSVJBTkdFCV9JT1coJ2EnLEFUTUlPQ19JVEYrMTAsc3RydWN0IGF0bWlmX3Npb2MpCisJCQkJCS8qIGdldCBjb25uZWN0aW9uIGlkZW50aWZpZXIgcmFuZ2UgKi8KKyNkZWZpbmUgQVRNX1NFVENJUkFOR0UJX0lPVygnYScsQVRNSU9DX0lURisxMSxzdHJ1Y3QgYXRtaWZfc2lvYykKKwkJCQkJLyogc2V0IGNvbm5lY3Rpb24gaWRlbnRpZmllciByYW5nZSAqLworI2RlZmluZSBBVE1fU0VURVNJCV9JT1coJ2EnLEFUTUlPQ19JVEYrMTIsc3RydWN0IGF0bWlmX3Npb2MpCisJCQkJCS8qIHNldCBpbnRlcmZhY2UgRVNJICovCisjZGVmaW5lIEFUTV9TRVRFU0lGCV9JT1coJ2EnLEFUTUlPQ19JVEYrMTMsc3RydWN0IGF0bWlmX3Npb2MpCisJCQkJCS8qIGZvcmNlIGludGVyZmFjZSBFU0kgKi8KKyNkZWZpbmUgQVRNX0FERExFQ1NBRERSCV9JT1coJ2EnLCBBVE1JT0NfSVRGKzE0LCBzdHJ1Y3QgYXRtaWZfc2lvYykKKwkJCQkJLyogcmVnaXN0ZXIgYSBMRUNTIGFkZHJlc3MgKi8KKyNkZWZpbmUgQVRNX0RFTExFQ1NBRERSCV9JT1coJ2EnLCBBVE1JT0NfSVRGKzE1LCBzdHJ1Y3QgYXRtaWZfc2lvYykKKwkJCQkJLyogdW5yZWdpc3RlciBhIExFQ1MgYWRkcmVzcyAqLworI2RlZmluZSBBVE1fR0VUTEVDU0FERFIJX0lPVygnYScsIEFUTUlPQ19JVEYrMTYsIHN0cnVjdCBhdG1pZl9zaW9jKQorCQkJCQkvKiByZXRyaWV2ZSBMRUNTIGFkZHJlc3MoZXMpICovCisKKyNkZWZpbmUgQVRNX0dFVFNUQVQJX0lPVygnYScsQVRNSU9DX1NBUkNPTSswLHN0cnVjdCBhdG1pZl9zaW9jKQorCQkJCQkvKiBnZXQgQUFMIGxheWVyIHN0YXRpc3RpY3MgKi8KKyNkZWZpbmUgQVRNX0dFVFNUQVRaCV9JT1coJ2EnLEFUTUlPQ19TQVJDT00rMSxzdHJ1Y3QgYXRtaWZfc2lvYykKKwkJCQkJLyogZ2V0IEFBTCBsYXllciBzdGF0aXN0aWNzIGFuZCB6ZXJvICovCisjZGVmaW5lIEFUTV9HRVRMT09QCV9JT1coJ2EnLEFUTUlPQ19TQVJDT00rMixzdHJ1Y3QgYXRtaWZfc2lvYykKKwkJCQkJLyogZ2V0IGxvb3BiYWNrIG1vZGUgKi8KKyNkZWZpbmUgQVRNX1NFVExPT1AJX0lPVygnYScsQVRNSU9DX1NBUkNPTSszLHN0cnVjdCBhdG1pZl9zaW9jKQorCQkJCQkvKiBzZXQgbG9vcGJhY2sgbW9kZSAqLworI2RlZmluZSBBVE1fUVVFUllMT09QCV9JT1coJ2EnLEFUTUlPQ19TQVJDT00rNCxzdHJ1Y3QgYXRtaWZfc2lvYykKKwkJCQkJLyogcXVlcnkgc3VwcG9ydGVkIGxvb3BiYWNrIG1vZGVzICovCisjZGVmaW5lIEFUTV9TRVRTQwlfSU9XKCdhJyxBVE1JT0NfU1BFQ0lBTCsxLGludCkKKwkJCQkJLyogZW5hYmxlIG9yIGRpc2FibGUgc2luZ2xlLWNvcHkgKi8KKyNkZWZpbmUgQVRNX1NFVEJBQ0tFTkQJX0lPVygnYScsQVRNSU9DX1NQRUNJQUwrMixhdG1fYmFja2VuZF90KQorCQkJCQkvKiBzZXQgYmFja2VuZCBoYW5kbGVyICovCisjZGVmaW5lIEFUTV9ORVdCQUNLRU5ESUYgX0lPVygnYScsQVRNSU9DX1NQRUNJQUwrMyxhdG1fYmFja2VuZF90KQorCQkJCQkvKiB1c2UgYmFja2VuZCB0byBtYWtlIG5ldyBpZiAqLworI2RlZmluZSBBVE1fQUREUEFSVFkgIAlfSU9XKCdhJywgQVRNSU9DX1NQRUNJQUwrNCxzdHJ1Y3QgYXRtX2lvYnVmKQorIAkJCQkJLyogYWRkIHBhcnR5IHRvIHAybXAgY2FsbCAqLworI2lmZGVmIENPTkZJR19DT01QQVQKKy8qIEl0IGFjdHVhbGx5IHRha2VzIHN0cnVjdCBzb2NrYWRkcl9hdG1zdmMsIG5vdCBzdHJ1Y3QgYXRtX2lvYnVmICovCisjZGVmaW5lIENPTVBBVF9BVE1fQUREUEFSVFkgIAlfSU9XKCdhJywgQVRNSU9DX1NQRUNJQUwrNCxzdHJ1Y3QgY29tcGF0X2F0bV9pb2J1ZikKKyNlbmRpZgorI2RlZmluZSBBVE1fRFJPUFBBUlRZIAlfSU9XKCdhJywgQVRNSU9DX1NQRUNJQUwrNSxpbnQpCisJCQkJCS8qIGRyb3AgcGFydHkgZnJvbSBwMm1wIGNhbGwgKi8KKworLyoKKyAqIFRoZXNlIGFyZSBiYWNrZW5kIGhhbmRrZXJzIHRoYXQgY2FuIGJlIHNldCB2aWEgdGhlIEFUTV9TRVRCQUNLRU5EIGNhbGwKKyAqIGFib3ZlLiAgSW4gdGhlIGZ1dHVyZSB3ZSBtYXkgc3VwcG9ydCBkeW5hbWljIGxvYWRpbmcgb2YgdGhlc2UgLSBmb3Igbm93LAorICogdGhleSdyZSBqdXN0IGJlaW5nIHVzZWQgdG8gc2hhcmUgdGhlIEFUTUlPQ19CQUNLRU5EIGlvY3RscworICovCisjZGVmaW5lIEFUTV9CQUNLRU5EX1JBVwkJMAkKKyNkZWZpbmUgQVRNX0JBQ0tFTkRfUFBQCQkxCS8qIFBQUG9BVE0gLSBSRkMyMzY0ICovCisjZGVmaW5lIEFUTV9CQUNLRU5EX0JSMjY4NAkyCS8qIEJyaWRnZWQgUkZDMTQ4My8yNjg0ICovCisKKy8qIGZvciBBVE1fR0VUVFlQRSAqLworI2RlZmluZSBBVE1fSVRGVFlQX0xFTgk4CS8qIG1heGltdW0gbGVuZ3RoIG9mIGludGVyZmFjZSB0eXBlIG5hbWUgKi8KKworLyoKKyAqIExvb3BiYWNrIG1vZGVzIGZvciBBVE1fe1BIWSxTQVJ9X3tHRVQsU0VUfUxPT1AKKyAqLworCisvKiBQb2ludCBvZiBsb29wYmFjawkJCQlDUFUtLT5TQVItLT5QSFktLT5saW5lLS0+IC4uLiAqLworI2RlZmluZSBfX0FUTV9MTV9OT05FCTAJLyogbm8gbG9vcCBiYWNrICAgICBeICAgICBeICAgICBeICAgICAgXiAgICAgICovCisjZGVmaW5lIF9fQVRNX0xNX0FBTAkxCS8qIGxvb3AgYmFjayBQRFVzIC0tJyAgICAgfCAgICAgfCAgICAgIHwgICAgICAqLworI2RlZmluZSBfX0FUTV9MTV9BVE0JMgkvKiBsb29wIGJhY2sgQVRNIGNlbGxzIC0tLScgICAgIHwgICAgICB8ICAgICAgKi8KKy8qIFJFU0VSVkVECQk0CWxvb3AgYmFjayBvbiBQSFkgc2lkZSAgLS0tJwkJICAgICAgKi8KKyNkZWZpbmUgX19BVE1fTE1fUEhZCTgJLyogbG9vcCBiYWNrIGJpdHMgKGRpZ2l0YWwpIC0tLS0nICAgICAgfCAgICAgICovCisjZGVmaW5lIF9fQVRNX0xNX0FOQUxPRyAxNgkvKiBsb29wIGJhY2sgdGhlIGFuYWxvZyBzaWduYWwgLS0tLS0tLS0nICAgICAgKi8KKworLyogRGlyZWN0aW9uIG9mIGxvb3BiYWNrICovCisjZGVmaW5lIF9fQVRNX0xNX01LTE9DKG4pCSgobikpCSAgICAvKiBMb2NhbCAoaS5lLiBsb29wIFRYIHRvIFJYKSAqLworI2RlZmluZSBfX0FUTV9MTV9NS1JNVChuKQkoKG4pIDw8IDgpICAvKiBSZW1vdGUgKGkuZS4gbG9vcCBSWCB0byBUWCkgKi8KKworI2RlZmluZSBfX0FUTV9MTV9YVExPQyhuKQkoKG4pICYgMHhmZikKKyNkZWZpbmUgX19BVE1fTE1fWFRSTVQobikJKCgobikgPj4gOCkgJiAweGZmKQorCisjZGVmaW5lIEFUTV9MTV9OT05FCTAJLyogbm8gbG9vcGJhY2sgKi8KKworI2RlZmluZSBBVE1fTE1fTE9DX0FBTAlfX0FUTV9MTV9NS0xPQyhfX0FUTV9MTV9BQUwpCisjZGVmaW5lIEFUTV9MTV9MT0NfQVRNCV9fQVRNX0xNX01LTE9DKF9fQVRNX0xNX0FUTSkKKyNkZWZpbmUgQVRNX0xNX0xPQ19QSFkJX19BVE1fTE1fTUtMT0MoX19BVE1fTE1fUEhZKQorI2RlZmluZSBBVE1fTE1fTE9DX0FOQUxPRyBfX0FUTV9MTV9NS0xPQyhfX0FUTV9MTV9BTkFMT0cpCisKKyNkZWZpbmUgQVRNX0xNX1JNVF9BQUwJX19BVE1fTE1fTUtSTVQoX19BVE1fTE1fQUFMKQorI2RlZmluZSBBVE1fTE1fUk1UX0FUTQlfX0FUTV9MTV9NS1JNVChfX0FUTV9MTV9BVE0pCisjZGVmaW5lIEFUTV9MTV9STVRfUEhZCV9fQVRNX0xNX01LUk1UKF9fQVRNX0xNX1BIWSkKKyNkZWZpbmUgQVRNX0xNX1JNVF9BTkFMT0cgX19BVE1fTE1fTUtSTVQoX19BVE1fTE1fQU5BTE9HKQorCisvKgorICogTm90ZTogQVRNX0xNX0xPQ18qIGFuZCBBVE1fTE1fUk1UXyogY2FuIGJlIGNvbWJpbmVkLCBwcm92aWRlZCB0aGF0CisgKiBfX0FUTV9MTV9YVExPQyh4KSA8PSBfX0FUTV9MTV9YVFJNVCh4KQorICovCisKKworc3RydWN0IGF0bV9pb2J1ZiB7CisJaW50IGxlbmd0aDsKKwl2b2lkICpidWZmZXI7Cit9OworCisvKiBmb3IgQVRNX0dFVENJUkFOR0UgLyBBVE1fU0VUQ0lSQU5HRSAqLworCisjZGVmaW5lIEFUTV9DSV9NQVggICAgICAtMSAgICAgICAgICAgICAgLyogdXNlIG1heGltdW0gcmFuZ2Ugb2YgVlBJL1ZDSSAqLworIAorc3RydWN0IGF0bV9jaXJhbmdlIHsKKwlzaWduZWQgY2hhcgl2cGlfYml0czsJLyogMS4uOCwgQVRNX0NJX01BWCAoLTEpIGZvciBtYXhpbXVtICovCisJc2lnbmVkIGNoYXIJdmNpX2JpdHM7CS8qIDEuLjE2LCBBVE1fQ0lfTUFYICgtMSkgZm9yIG1heGltdW0gKi8KK307CisKKy8qIGZvciBBVE1fU0VUU0M7IGFjdHVhbGx5IHRha2VuIGZyb20gdGhlIEFUTV9WRiBudW1iZXIgc3BhY2UgKi8KKworI2RlZmluZSBBVE1fU0NfUlgJMTAyNAkJLyogZW5hYmxlIFJYIHNpbmdsZS1jb3B5ICovCisjZGVmaW5lIEFUTV9TQ19UWAkyMDQ4CQkvKiBlbmFibGUgVFggc2luZ2xlLWNvcHkgKi8KKworI2RlZmluZSBBVE1fQkFDS0xPR19ERUZBVUxUIDMyIC8qIGlmIHdlIGdldCBtb3JlLCB3ZSdyZSBsaWtlbHkgdG8gdGltZSBvdXQKKwkJCQkgIGFueXdheSAqLworCisvKiBNRjogY2hhbmdlX3FvcyAoTW9kaWZ5KSBmbGFncyAqLworCisjZGVmaW5lIEFUTV9NRl9JTU1FRAkgMQkvKiBCbG9jayB1bnRpbCBjaGFuZ2UgaXMgZWZmZWN0aXZlICovCisjZGVmaW5lIEFUTV9NRl9JTkNfUlNWCSAyCS8qIENoYW5nZSByZXNlcnZhdGlvbiBvbiBpbmNyZWFzZSAqLworI2RlZmluZSBBVE1fTUZfSU5DX1NIUAkgNAkvKiBDaGFuZ2Ugc2hhcGluZyBvbiBpbmNyZWFzZSAqLworI2RlZmluZSBBVE1fTUZfREVDX1JTVgkgOAkvKiBDaGFuZ2UgcmVzZXJ2YXRpb24gb24gZGVjcmVhc2UgKi8KKyNkZWZpbmUgQVRNX01GX0RFQ19TSFAJMTYJLyogQ2hhbmdlIHNoYXBpbmcgb24gZGVjcmVhc2UgKi8KKyNkZWZpbmUgQVRNX01GX0JXRAkzMgkvKiBTZXQgdGhlIGJhY2t3YXJkIGRpcmVjdGlvbiBwYXJhbWV0ZXJzICovCisKKyNkZWZpbmUgQVRNX01GX1NFVAkoQVRNX01GX0lOQ19SU1YgfCBBVE1fTUZfSU5DX1NIUCB8IEFUTV9NRl9ERUNfUlNWIHwgXAorCQkJICBBVE1fTUZfREVDX1NIUCB8IEFUTV9NRl9CV0QpCisKKy8qCisgKiBBVE1fVlNfKiBhcmUgdXNlZCB0byBleHByZXNzIFZDIHN0YXRlIGluIGEgaHVtYW4tZnJpZW5kbHkgd2F5LgorICovCisKKyNkZWZpbmUgQVRNX1ZTX0lETEUJMAkvKiBWQyBpcyBub3QgdXNlZCAqLworI2RlZmluZSBBVE1fVlNfQ09OTkVDVEVEIDEJLyogVkMgaXMgY29ubmVjdGVkICovCisjZGVmaW5lIEFUTV9WU19DTE9TSU5HCTIJLyogVkMgaXMgY2xvc2luZyAqLworI2RlZmluZSBBVE1fVlNfTElTVEVOCTMJLyogVkMgaXMgbGlzdGVuaW5nIGZvciBpbmNvbWluZyBzZXR1cHMgKi8KKyNkZWZpbmUgQVRNX1ZTX0lOVVNFCTQJLyogVkMgaXMgaW4gdXNlIChyZWdpc3RlcmVkIHdpdGggYXRtc2lnZCkgKi8KKyNkZWZpbmUgQVRNX1ZTX0JPVU5ECTUJLyogVkMgaXMgYm91bmQgKi8KKworI2RlZmluZSBBVE1fVlMyVFhUX01BUCBcCisgICAgIklETEUiLCAiQ09OTkVDVEVEIiwgIkNMT1NJTkciLCAiTElTVEVOIiwgIklOVVNFIiwgIkJPVU5EIgorCisjZGVmaW5lIEFUTV9WRjJUWFRfTUFQIFwKKyAgICAiQUREUiIsCSJSRUFEWSIsCSJQQVJUSUFMIiwJIlJFR0lTIiwgXAorICAgICJSRUxFQVNFRCIsICJIQVNRT1MiLAkiTElTVEVOIiwJIk1FVEEiLCBcCisgICAgIjI1NiIsCSI1MTIiLAkJIjEwMjQiLAkJIjIwNDgiLCBcCisgICAgIlNFU1NJT04iLAkiSEFTU0FQIiwJIkJPVU5EIiwJIkNMT1NFIgorCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYXRtaW9jLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYXRtaW9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdmNjdhYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdG1pb2MuaApAQCAtMCwwICsxLDQxIEBACisvKiBhdG1pb2MuaCAtIHJhbmdlcyBmb3IgQVRNLXJlbGF0ZWQgaW9jdGwgbnVtYmVycyAqLworIAorLyogV3JpdHRlbiAxOTk1LTE5OTkgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIExSQy9JQ0EgKi8KKworCisvKgorICogU2VlIGh0dHA6Ly9pY2F3d3cxLmVwZmwuY2gvbGludXgtYXRtL21hZ2ljLmh0bWwgZm9yIHRoZSBjb21wbGV0ZSBsaXN0IG9mCisgKiAibWFnaWMiIGlvY3RsIG51bWJlcnMuCisgKi8KKworCisjaWZuZGVmIF9MSU5VWF9BVE1JT0NfSAorI2RlZmluZSBfTElOVVhfQVRNSU9DX0gKKworI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorCQkvKiBldmVyeWJvZHkgaW5jbHVkaW5nIGF0bWlvYy5oIHdpbGwgYWxzbyBuZWVkIF9JT3ssUixXLFdSfSAqLworCisjZGVmaW5lIEFUTUlPQ19QSFlDT00JICAweDAwIC8qIFBIWSBkZXZpY2UgY29tbW9uIGlvY3RscywgZ2xvYmFsbHkgdW5pcXVlICovCisjZGVmaW5lIEFUTUlPQ19QSFlDT01fRU5EIDB4MGYKKyNkZWZpbmUgQVRNSU9DX1BIWVRZUAkgIDB4MTAgLyogUEhZIGRldiB0eXBlIGlvY3RscywgdW5pcXVlIHBlciBQSFkgdHlwZSAqLworI2RlZmluZSBBVE1JT0NfUEhZVFlQX0VORCAweDJmCisjZGVmaW5lIEFUTUlPQ19QSFlQUlYJICAweDMwIC8qIFBIWSBkZXYgcHJpdmF0ZSBpb2N0bHMsIHVuaXF1ZSBwZXIgZHJpdmVyICovCisjZGVmaW5lIEFUTUlPQ19QSFlQUlZfRU5EIDB4NGYKKyNkZWZpbmUgQVRNSU9DX1NBUkNPTQkgIDB4NTAgLyogU0FSIGRldmljZSBjb21tb24gaW9jdGxzLCBnbG9iYWxseSB1bmlxdWUgKi8KKyNkZWZpbmUgQVRNSU9DX1NBUkNPTV9FTkQgMHg1MAorI2RlZmluZSBBVE1JT0NfU0FSUFJWCSAgMHg2MCAvKiBTQVIgZGV2IHByaXZhdGUgaW9jdGxzLCB1bmlxdWUgcGVyIGRyaXZlciAqLworI2RlZmluZSBBVE1JT0NfU0FSUFJWX0VORCAweDdmCisjZGVmaW5lIEFUTUlPQ19JVEYJICAweDgwIC8qIEludGVyZmFjZSBpb2N0bHMsIGdsb2JhbGx5IHVuaXF1ZSAqLworI2RlZmluZSBBVE1JT0NfSVRGX0VORAkgIDB4OGYKKyNkZWZpbmUgQVRNSU9DX0JBQ0tFTkQJICAweDkwIC8qIEFUTSBnZW5lcmljIGJhY2tlbmQgaW9jdGxzLCB1LiBwZXIgYmFja2VuZCAqLworI2RlZmluZSBBVE1JT0NfQkFDS0VORF9FTkQgMHhhZgorLyogMHhiMC0weGJmOiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworI2RlZmluZSBBVE1JT0NfQVJFUVVJUEEJICAweGMwIC8qIEFwcGxpY2F0aW9uIHJlcXVlc3RlZCBJUCBvdmVyIEFUTSwgZ2xvYi4gdS4gKi8KKyNkZWZpbmUgQVRNSU9DX0xBTkUJICAweGQwIC8qIExBTiBFbXVsYXRpb24sIGdsb2JhbGx5IHVuaXF1ZSAqLworI2RlZmluZSBBVE1JT0NfTVBPQSAgICAgICAweGQ4IC8qIE1QT0EsIGdsb2JhbGx5IHVuaXF1ZSAqLworI2RlZmluZQlBVE1JT0NfQ0xJUAkgIDB4ZTAgLyogQ2xhc3NpY2FsIElQIG92ZXIgQVRNIGNvbnRyb2wsIGdsb2JhbGx5IHUuICovCisjZGVmaW5lCUFUTUlPQ19DTElQX0VORAkgIDB4ZWYKKyNkZWZpbmUJQVRNSU9DX1NQRUNJQUwJICAweGYwIC8qIFNwZWNpYWwtcHVycG9zZSBjb250cm9scywgZ2xvYmFsbHkgdW5pcXVlICovCisjZGVmaW5lCUFUTUlPQ19TUEVDSUFMX0VORCAweGZmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2F0bWxlYy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2F0bWxlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YzkxN2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYXRtbGVjLmgKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIEFUTSBMYW4gRW11bGF0aW9uIERhZW1vbiBkcml2ZXIgaW50ZXJmYWNlCisgKgorICogTWFya28gS2lpc2tpbGEgPG1raWlza2lsYUB5YWhvby5jb20+CisgKi8KKworI2lmbmRlZiBfQVRNTEVDX0hfCisjZGVmaW5lIF9BVE1MRUNfSF8KKworI2luY2x1ZGUgPGxpbnV4L2F0bWFwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bWlvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogQVRNIGxlYyBkYWVtb24gY29udHJvbCBzb2NrZXQgKi8KKyNkZWZpbmUgQVRNTEVDX0NUUkwJX0lPKCdhJywgQVRNSU9DX0xBTkUpCisjZGVmaW5lIEFUTUxFQ19EQVRBCV9JTygnYScsIEFUTUlPQ19MQU5FKzEpCisjZGVmaW5lIEFUTUxFQ19NQ0FTVAlfSU8oJ2EnLCBBVE1JT0NfTEFORSsyKQorCisvKiBNYXhpbXVtIG51bWJlciBvZiBMRUMgaW50ZXJmYWNlcyAodHdlYWthYmxlKSAqLworI2RlZmluZSBNQVhfTEVDX0lURiA0OAorCisvKgorICogRnJvbSB0aGUgdG90YWwgb2YgTUFYX0xFQ19JVEYsIGxhc3QgTlVNX1RSX0RFVlMgYXJlIHJlc2VydmVkIGZvciBUb2tlbiBSaW5nLgorICogRS5nLiBpZiBNQVhfTEVDX0lURiA9IDQ4IGFuZCBOVU1fVFJfREVWUyA9IDgsIHRoZW4gbGVjMC1sZWMzOSBhcmUgZm9yCisgKiBFdGhlcm5ldCBFTEFOcyBhbmQgbGVjNDAtbGVjNDcgYXJlIGZvciBUb2tlbiBSaW5nIEVMQU5TLgorICovCisjZGVmaW5lIE5VTV9UUl9ERVZTIDgKKwordHlwZWRlZiBlbnVtIHsKKwlsX3NldF9tYWNfYWRkciwKKwlsX2RlbF9tYWNfYWRkciwKKwlsX3N2Y19zZXR1cCwKKwlsX2FkZHJfZGVsZXRlLAorCWxfdG9wb2xvZ3lfY2hhbmdlLAorCWxfZmx1c2hfY29tcGxldGUsCisJbF9hcnBfdXBkYXRlLAorCWxfbmFycF9yZXEsCQkvKiBMQU5FMiBtYW5kYXRlcyB0aGUgdXNlIG9mIHRoaXMgKi8KKwlsX2NvbmZpZywKKwlsX2ZsdXNoX3RyYW5faWQsCisJbF9zZXRfbGVjaWQsCisJbF9hcnBfeG10LAorCWxfcmRlc2NfYXJwX3htdCwKKwlsX2Fzc29jaWF0ZV9yZXEsCisJbF9zaG91bGRfYnJpZGdlCQkvKiBzaG91bGQgd2UgYnJpZGdlIHRoaXMgTUFDPyAqLworfSBhdG1sZWNfbXNnX3R5cGU7CisKKyNkZWZpbmUgQVRNTEVDX01TR19UWVBFX01BWCBsX3Nob3VsZF9icmlkZ2UKKworc3RydWN0IGF0bWxlY19jb25maWdfbXNnIHsKKwl1bnNpZ25lZCBpbnQgbWF4aW11bV91bmtub3duX2ZyYW1lX2NvdW50OworCXVuc2lnbmVkIGludCBtYXhfdW5rbm93bl9mcmFtZV90aW1lOworCXVuc2lnbmVkIHNob3J0IG1heF9yZXRyeV9jb3VudDsKKwl1bnNpZ25lZCBpbnQgYWdpbmdfdGltZTsKKwl1bnNpZ25lZCBpbnQgZm9yd2FyZF9kZWxheV90aW1lOworCXVuc2lnbmVkIGludCBhcnBfcmVzcG9uc2VfdGltZTsKKwl1bnNpZ25lZCBpbnQgZmx1c2hfdGltZW91dDsKKwl1bnNpZ25lZCBpbnQgcGF0aF9zd2l0Y2hpbmdfZGVsYXk7CisJdW5zaWduZWQgaW50IGxhbmVfdmVyc2lvbjsJLyogTEFORTI6IDEgZm9yIExBTkV2MSwgMiBmb3IgTEFORXYyICovCisJaW50IG10dTsKKwlpbnQgaXNfcHJveHk7Cit9OworCitzdHJ1Y3QgYXRtbGVjX21zZyB7CisJYXRtbGVjX21zZ190eXBlIHR5cGU7CisJaW50IHNpemVvZnRsdnM7CQkvKiBMQU5FMjogaWYgIT0gMCwgdGx2cyBmb2xsb3cgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1bnNpZ25lZCBjaGFyIG1hY19hZGRyW0VUSF9BTEVOXTsKKwkJCXVuc2lnbmVkIGNoYXIgYXRtX2FkZHJbQVRNX0VTQV9MRU5dOworCQkJdW5zaWduZWQgaW50IGZsYWc7CS8qCisJCQkJCQkgKiBUb3BvbG9neV9jaGFuZ2UgZmxhZywKKwkJCQkJCSAqIHJlbW90ZWZsYWcsIHBlcm1hbmVudCBmbGFnLAorCQkJCQkJICogbGVjaWQsIHRyYW5zYWN0aW9uIGlkCisJCQkJCQkgKi8KKwkJCXVuc2lnbmVkIGludCB0YXJnZXRsZXNzX2xlX2FycDsJLyogTEFORTIgKi8KKwkJCXVuc2lnbmVkIGludCBub19zb3VyY2VfbGVfbmFycDsJLyogTEFORTIgKi8KKwkJfSBub3JtYWw7CisJCXN0cnVjdCBhdG1sZWNfY29uZmlnX21zZyBjb25maWc7CisJCXN0cnVjdCB7CisJCQlfX3UxNiBsZWNfaWQ7CQkJCS8qIHJlcXVlc3RvciBsZWNfaWQgICovCisJCQlfX3UzMiB0cmFuX2lkOwkJCQkvKiB0cmFuc2FjdGlvbiBpZCAgICAqLworCQkJdW5zaWduZWQgY2hhciBtYWNfYWRkcltFVEhfQUxFTl07CS8qIGRzdCBtYWMgYWRkciAgICAgICovCisJCQl1bnNpZ25lZCBjaGFyIGF0bV9hZGRyW0FUTV9FU0FfTEVOXTsJLyogcmVxZXN0b3IgQVRNIGFkZHIgKi8KKwkJfSBwcm94eTsJLyoKKwkJCQkgKiBGb3IgbWFwcGluZyBMRV9BUlAgcmVxdWVzdHMgdG8gcmVzcG9uc2VzLiBGaWxsZWQgYnkKKwkJCQkgKiB6ZXBwZWxpbiwgcmV0dXJuZWQgYnkga2VybmVsLiBVc2VkIG9ubHkgd2hlbiBwcm94eWluZworCQkJCSAqLworCX0gY29udGVudDsKK30gX19BVE1fQVBJX0FMSUdOOworCitzdHJ1Y3QgYXRtbGVjX2lvYyB7CisJaW50IGRldl9udW07CisJdW5zaWduZWQgY2hhciBhdG1fYWRkcltBVE1fRVNBX0xFTl07CisJdW5zaWduZWQgY2hhciByZWNlaXZlOwkvKiAxPSByZWNlaXZlIHZjYywgMCA9IHNlbmQgdmNjICovCit9OworI2VuZGlmIC8qIF9BVE1MRUNfSF8gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdG1tcGMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdG1tcGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWJhNTc4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2F0bW1wYy5oCkBAIC0wLDAgKzEsMTI2IEBACisjaWZuZGVmIF9BVE1NUENfSF8KKyNkZWZpbmUgX0FUTU1QQ19IXworCisjaW5jbHVkZSA8bGludXgvYXRtYXBpLmg+CisjaW5jbHVkZSA8bGludXgvYXRtaW9jLmg+CisjaW5jbHVkZSA8bGludXgvYXRtLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBBVE1NUENfQ1RSTCBfSU8oJ2EnLCBBVE1JT0NfTVBPQSkKKyNkZWZpbmUgQVRNTVBDX0RBVEEgX0lPKCdhJywgQVRNSU9DX01QT0ErMSkKKworI2RlZmluZSBNUENfU09DS0VUX0lOR1JFU1MgMQorI2RlZmluZSBNUENfU09DS0VUX0VHUkVTUyAgMgorCitzdHJ1Y3QgYXRtbXBjX2lvYyB7CisgICAgICAgIGludCBkZXZfbnVtOworICAgICAgICBfX2JlMzIgaXBhZGRyOyAgICAgICAgICAgICAgLyogdGhlIElQIGFkZHJlc3Mgb2YgdGhlIHNob3J0Y3V0ICAgICovCisgICAgICAgIGludCB0eXBlOyAgICAgICAgICAgICAgICAgICAgIC8qIGluZ3Jlc3Mgb3IgZWdyZXNzICAgICAgICAgICAgICAgICAqLworfTsKKwordHlwZWRlZiBzdHJ1Y3QgaW5fY3RybF9pbmZvIHsKKyAgICAgICAgX191OCAgIExhc3RfTkhSUF9DSUVfY29kZTsKKyAgICAgICAgX191OCAgIExhc3RfUTI5MzFfY2F1c2VfdmFsdWU7CisgICAgICAgIF9fdTggICBlZ19NUENfQVRNX2FkZHJbQVRNX0VTQV9MRU5dOworICAgICAgICBfX2JlMzIgIHRhZzsKKyAgICAgICAgX19iZTMyICBpbl9kc3RfaXA7ICAgICAgLyogSVAgYWRkcmVzcyB0aGlzIGluZ3Jlc3MgTVBDIHNlbmRzIHBhY2tldHMgdG8gKi8KKyAgICAgICAgX191MTYgIGhvbGRpbmdfdGltZTsKKyAgICAgICAgX191MzIgIHJlcXVlc3RfaWQ7Cit9IGluX2N0cmxfaW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QgZWdfY3RybF9pbmZvIHsKKyAgICAgICAgX191OCAgIERMTF9oZWFkZXJbMjU2XTsKKyAgICAgICAgX191OCAgIERIX2xlbmd0aDsKKyAgICAgICAgX19iZTMyICBjYWNoZV9pZDsKKyAgICAgICAgX19iZTMyICB0YWc7CisgICAgICAgIF9fYmUzMiAgbXBzX2lwOworICAgICAgICBfX2JlMzIgIGVnX2RzdF9pcDsgICAgICAvKiBJUCBhZGRyZXNzIHRvIHdoaWNoIGluZ3Jlc3MgTVBDIHNlbmRzIHBhY2tldHMgKi8KKyAgICAgICAgX191OCAgIGluX01QQ19kYXRhX0FUTV9hZGRyW0FUTV9FU0FfTEVOXTsKKyAgICAgICAgX191MTYgIGhvbGRpbmdfdGltZTsKK30gZWdfY3RybF9pbmZvOworCitzdHJ1Y3QgbXBjX3BhcmFtZXRlcnMgeworICAgICAgICBfX3UxNiBtcGNfcDE7ICAgLyogU2hvcnRjdXQtU2V0dXAgRnJhbWUgQ291bnQgICAgKi8KKyAgICAgICAgX191MTYgbXBjX3AyOyAgIC8qIFNob3J0Y3V0LVNldHVwIEZyYW1lIFRpbWUgICAgICovCisgICAgICAgIF9fdTggbXBjX3AzWzhdOyAvKiBGbG93LWRldGVjdGlvbiBQcm90b2NvbHMgICAgICAqLworICAgICAgICBfX3UxNiBtcGNfcDQ7ICAgLyogTVBDIEluaXRpYWwgUmV0cnkgVGltZSAgICAgICAgKi8KKyAgICAgICAgX191MTYgbXBjX3A1OyAgIC8qIE1QQyBSZXRyeSBUaW1lIE1heGltdW0gICAgICAgICovCisgICAgICAgIF9fdTE2IG1wY19wNjsgICAvKiBIb2xkIERvd24gVGltZSAgICAgICAgICAgICAgICAqLworfSA7CisKK3N0cnVjdCBrX21lc3NhZ2UgeworICAgICAgICBfX3UxNiB0eXBlOworICAgICAgICBfX2JlMzIgaXBfbWFzazsKKyAgICAgICAgX191OCAgTVBTX2N0cmxbQVRNX0VTQV9MRU5dOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICAgICAgaW5fY3RybF9pbmZvIGluX2luZm87CisgICAgICAgICAgICAgICAgZWdfY3RybF9pbmZvIGVnX2luZm87CisgICAgICAgICAgICAgICAgc3RydWN0IG1wY19wYXJhbWV0ZXJzIHBhcmFtczsKKyAgICAgICAgfSBjb250ZW50OworICAgICAgICBzdHJ1Y3QgYXRtX3FvcyBxb3M7ICAgICAgIAorfSBfX0FUTV9BUElfQUxJR047CisKK3N0cnVjdCBsbGNfc25hcF9oZHIgeworCS8qIFJGQyAxNDgzIExMQy9TTkFQIGVuY2Fwc3VsYXRpb24gZm9yIHJvdXRlZCBJUCBQRFVzICovCisgICAgICAgIF9fdTggIGRzYXA7ICAgIC8qIERlc3RpbmF0aW9uIFNlcnZpY2UgQWNjZXNzIFBvaW50ICgweEFBKSAgICAgKi8KKyAgICAgICAgX191OCAgc3NhcDsgICAgLyogU291cmNlIFNlcnZpY2UgQWNjZXNzIFBvaW50ICAgICAgKDB4QUEpICAgICAqLworICAgICAgICBfX3U4ICB1aTsgICAgICAvKiBVbm51bWJlcmVkIEluZm9ybWF0aW9uICAgICAgICAgICAoMHgwMykgICAgICovCisgICAgICAgIF9fdTggIG9yZ1szXTsgIC8qIE9yZ2FuaXphdGlvbmFsIGlkZW50aWZpY2F0aW9uICAgICgweDAwMDAwMCkgKi8KKyAgICAgICAgX191OCAgdHlwZVsyXTsgLyogRXRoZXIgdHlwZSAoZm9yIElQKSAgICAgICAgICAgICAgKDB4MDgwMCkgICAqLworfTsKKworLyogVExWcyB0aGlzIE1QQyByZWNvZ25pemVzICovCisjZGVmaW5lIFRMVl9NUE9BX0RFVklDRV9UWVBFICAgICAgICAgMHgwMGEwM2UyYSAgCisKKy8qIE1QT0EgZGV2aWNlIHR5cGVzIGluIE1QT0EgRGV2aWNlIFR5cGUgVExWICovCisjZGVmaW5lIE5PTl9NUE9BICAgIDAKKyNkZWZpbmUgTVBTICAgICAgICAgMQorI2RlZmluZSBNUEMgICAgICAgICAyCisjZGVmaW5lIE1QU19BTkRfTVBDIDMKKworCisvKiBNUEMgcGFyYW1ldGVyIGRlZmF1bHRzICovCisKKyNkZWZpbmUgTVBDX1AxIDEwICAvKiBTaG9ydGN1dC1TZXR1cCBGcmFtZSBDb3VudCAgKi8gCisjZGVmaW5lIE1QQ19QMiAxICAgLyogU2hvcnRjdXQtU2V0dXAgRnJhbWUgVGltZSAgICovCisjZGVmaW5lIE1QQ19QMyAwICAgLyogRmxvdy1kZXRlY3Rpb24gUHJvdG9jb2xzICAgICovCisjZGVmaW5lIE1QQ19QNCA1ICAgLyogTVBDIEluaXRpYWwgUmV0cnkgVGltZSAgICAgICovCisjZGVmaW5lIE1QQ19QNSA0MCAgLyogTVBDIFJldHJ5IFRpbWUgTWF4aW11bSAgICAgICovCisjZGVmaW5lIE1QQ19QNiAxNjAgLyogSG9sZCBEb3duIFRpbWUgICAgICAgICAgICAgICovCisjZGVmaW5lIEhPTERJTkdfVElNRV9ERUZBVUxUIDEyMDAgLyogc2FtZSBhcyBNUFMtcDcgKi8KKworLyogTVBDIGNvbnN0YW50cyAqLworCisjZGVmaW5lIE1QQ19DMSAyICAgLyogUmV0cnkgVGltZSBNdWx0aXBsaWVyICAgICAgICovCisjZGVmaW5lIE1QQ19DMiA2MCAgLyogSW5pdGlhbCBLZWVwLUFsaXZlIExpZmV0aW1lICovCisKKy8qIE1lc3NhZ2UgdHlwZXMgLSB0byBNUE9BIGRhZW1vbiAqLworCisjZGVmaW5lIFNORF9NUE9BX1JFU19SUVNUICAgIDIwMQorI2RlZmluZSBTRVRfTVBTX0NUUkxfQUREUiAgICAyMDIKKyNkZWZpbmUgU05EX01QT0FfUkVTX1JUUlkgICAgMjAzIC8qIERpZmZlcmVudCB0eXBlIGluIGEgcmV0cnkgZHVlIHRvIHJlcSBpZCAgICAgICAgICovCisjZGVmaW5lIFNUT1BfS0VFUF9BTElWRV9TTSAgIDIwNAorI2RlZmluZSBFR1JFU1NfRU5UUllfUkVNT1ZFRCAyMDUKKyNkZWZpbmUgU05EX0VHUkVTU19QVVJHRSAgICAgMjA2CisjZGVmaW5lIERJRSAgICAgICAgICAgICAgICAgIDIwNyAvKiB0ZWxsIHRoZSBkYWVtb24gdG8gZXhpdCgpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQVRBX1BMQU5FX1BVUkdFICAgICAyMDggLyogRGF0YSBwbGFuZSBwdXJnZSBiZWNhdXNlIG9mIGVncmVzcyBjYWNoZSBoaXQgbWlzcyBvciBkZWFkIE1QUyAqLworI2RlZmluZSBPUEVOX0lOR1JFU1NfU1ZDICAgICAyMDkKKworLyogTWVzc2FnZSB0eXBlcyAtIGZyb20gTVBPQSBkYWVtb24gKi8KKworI2RlZmluZSBNUE9BX1RSSUdHRVJfUkNWRCAgICAgMTAxCisjZGVmaW5lIE1QT0FfUkVTX1JFUExZX1JDVkQgICAxMDIKKyNkZWZpbmUgSU5HUkVTU19QVVJHRV9SQ1ZEICAgIDEwMworI2RlZmluZSBFR1JFU1NfUFVSR0VfUkNWRCAgICAgMTA0CisjZGVmaW5lIE1QU19ERUFUSCAgICAgICAgICAgICAxMDUKKyNkZWZpbmUgQ0FDSEVfSU1QT1NfUkNWRCAgICAgIDEwNgorI2RlZmluZSBTRVRfTVBDX0NUUkxfQUREUiAgICAgMTA3IC8qIE91ciBNUEMncyBjb250cm9sIEFUTSBhZGRyZXNzICAgKi8KKyNkZWZpbmUgU0VUX01QU19NQUNfQUREUiAgICAgIDEwOAorI2RlZmluZSBDTEVBTl9VUF9BTkRfRVhJVCAgICAgMTA5CisjZGVmaW5lIFNFVF9NUENfUEFSQU1TICAgICAgICAxMTAgLyogTVBDIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAgICAqLworCisvKiBNZXNzYWdlIHR5cGVzIC0gYmlkaXJlY3Rpb25hbCAqLyAgICAgICAKKworI2RlZmluZSBSRUxPQUQgICAgICAgICAgICAgICAgMzAxIC8qIGtpbGwgLUhVUCB0aGUgZGFlbW9uIGZvciByZWxvYWQgKi8KKworI2VuZGlmIC8qIF9BVE1NUENfSF8gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdG1wcHAuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdG1wcHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDBkY2NlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2F0bXBwcC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qIGF0bXBwcC5oIC0gUkZDMjM2NCBQUFBvQVRNICovCisKKy8qIFdyaXR0ZW4gMjAwMCBieSBNaXRjaGVsbCBCbGFuayBKciAqLworCisjaWZuZGVmIF9MSU5VWF9BVE1QUFBfSAorI2RlZmluZSBfTElOVVhfQVRNUFBQX0gKKworI2luY2x1ZGUgPGxpbnV4L2F0bS5oPgorCisjZGVmaW5lIFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QJKDApCisjZGVmaW5lIFBQUE9BVE1fRU5DQVBTX1ZDCQkoMSkKKyNkZWZpbmUgUFBQT0FUTV9FTkNBUFNfTExDCQkoMikKKworLyoKKyAqIFRoaXMgaXMgZm9yIHRoZSBBVE1fU0VUQkFDS0VORCBjYWxsIC0gdGhlc2UgYXJlIGxpa2Ugc29ja2V0IGZhbWlsaWVzOgorICogdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIHN0cnVjdHVyZSBpcyB0aGUgYmFja2VuZCBudW1iZXIgYW5kIHRoZSByZXN0CisgKiBpcyBwZXItYmFja2VuZCBzcGVjaWZpYworICovCitzdHJ1Y3QgYXRtX2JhY2tlbmRfcHBwIHsKKwlhdG1fYmFja2VuZF90CWJhY2tlbmRfbnVtOwkvKiBBVE1fQkFDS0VORF9QUFAgKi8KKwlpbnQJCWVuY2FwczsJCS8qIFBQUE9BVE1fRU5DQVBTXyogKi8KK307CisKKyNlbmRpZgkvKiBfTElOVVhfQVRNUFBQX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdG1zYXAuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdG1zYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTliMTA0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2F0bXNhcC5oCkBAIC0wLDAgKzEsMTYyIEBACisvKiBhdG1zYXAuaCAtIEFUTSBTZXJ2aWNlIEFjY2VzcyBQb2ludCBhZGRyZXNzaW5nIGRlZmluaXRpb25zICovCisKKy8qIFdyaXR0ZW4gMTk5NS0xOTk5IGJ5IFdlcm5lciBBbG1lc2JlcmdlciwgRVBGTCBMUkMvSUNBICovCisKKworI2lmbmRlZiBfTElOVVhfQVRNU0FQX0gKKyNkZWZpbmUgX0xJTlVYX0FUTVNBUF9ICisKKyNpbmNsdWRlIDxsaW51eC9hdG1hcGkuaD4KKworLyoKKyAqIEJFR0lOX3h4IGFuZCBFTkRfeHggbWFya2VycyBhcmUgdXNlZCBmb3IgYXV0b21hdGljIGdlbmVyYXRpb24gb2YKKyAqIGRvY3VtZW50YXRpb24uIERvIG5vdCBjaGFuZ2UgdGhlbS4KKyAqLworCisKKy8qCisgKiBMYXllciAyIHByb3RvY29sIGlkZW50aWZpZXJzCisgKi8KKworLyogQkVHSU5fTDIgKi8KKyNkZWZpbmUgQVRNX0wyX05PTkUJMAkvKiBMMiBub3Qgc3BlY2lmaWVkICovCisjZGVmaW5lIEFUTV9MMl9JU08xNzQ1ICAweDAxCS8qIEJhc2ljIG1vZGUgSVNPIDE3NDUgKi8KKyNkZWZpbmUgQVRNX0wyX1EyOTEJMHgwMgkvKiBJVFUtVCBRLjI5MSAoUmVjLiBJLjQ0MSkgKi8KKyNkZWZpbmUgQVRNX0wyX1gyNV9MTAkweDA2CS8qIElUVS1UIFguMjUsIGxpbmsgbGF5ZXIgKi8KKyNkZWZpbmUgQVRNX0wyX1gyNV9NTAkweDA3CS8qIElUVS1UIFguMjUsIG11bHRpbGluayAqLworI2RlZmluZSBBVE1fTDJfTEFQQgkweDA4CS8qIEV4dGVuZGVkIExBUEIsIGhhbGYtZHVwbGV4IChSZWMuIFQuNzEpICovCisjZGVmaW5lIEFUTV9MMl9IRExDX0FSTQkweDA5CS8qIEhETEMgQVJNIChJU08vSUVDIDQzMzUpICovCisjZGVmaW5lIEFUTV9MMl9IRExDX05STQkweDBhCS8qIEhETEMgTlJNIChJU08vSUVDIDQzMzUpICovCisjZGVmaW5lIEFUTV9MMl9IRExDX0FCTQkweDBiCS8qIEhETEMgQUJNIChJU08vSUVDIDQzMzUpICovCisjZGVmaW5lIEFUTV9MMl9JU084ODAyCTB4MGMJLyogTEFOIExMQyAoSVNPL0lFQyA4ODAyLzIpICovCisjZGVmaW5lIEFUTV9MMl9YNzUJMHgwZAkvKiBJVFUtVCBYLjc1LCBTTFAgKi8KKyNkZWZpbmUgQVRNX0wyX1E5MjIJMHgwZQkvKiBJVFUtVCBRLjkyMiAqLworI2RlZmluZSBBVE1fTDJfVVNFUgkweDEwCS8qIHVzZXItc3BlY2lmaWVkICovCisjZGVmaW5lIEFUTV9MMl9JU083Nzc2CTB4MTEJLyogSVNPIDc3NzYgRFRFLURURSAqLworLyogRU5EX0wyICovCisKKworLyoKKyAqIExheWVyIDMgcHJvdG9jb2wgaWRlbnRpZmllcnMKKyAqLworCisvKiBCRUdJTl9MMyAqLworI2RlZmluZSBBVE1fTDNfTk9ORQkwCS8qIEwzIG5vdCBzcGVjaWZpZWQgKi8KKyNkZWZpbmUgQVRNX0wzX1gyNQkweDA2CS8qIElUVS1UIFguMjUsIHBhY2tldCBsYXllciAqLworI2RlZmluZSBBVE1fTDNfSVNPODIwOAkweDA3CS8qIElTTy9JRUMgODIwOCAqLworI2RlZmluZSBBVE1fTDNfWDIyMwkweDA4CS8qIElUVS1UIFguMjIzIHwgSVNPL0lFQyA4ODc4ICovCisjZGVmaW5lIEFUTV9MM19JU084NDczCTB4MDkJLyogSVRVLVQgWC4yMzMgfCBJU08vSUVDIDg0NzMgKi8KKyNkZWZpbmUgQVRNX0wzX1Q3MAkweDBhCS8qIElUVS1UIFQuNzAgbWluaW11bSBuZXR3b3JrIGxheWVyICovCisjZGVmaW5lIEFUTV9MM19UUjk1NzcJMHgwYgkvKiBJU08vSUVDIFRSIDk1NzcgKi8KKyNkZWZpbmUgQVRNX0wzX0gzMTAJMHgwYwkvKiBJVFUtVCBSZWNvbW1lbmRhdGlvbiBILjMxMCAqLworI2RlZmluZSBBVE1fTDNfSDMyMQkweDBkCS8qIElUVS1UIFJlY29tbWVuZGF0aW9uIEguMzIxICovCisjZGVmaW5lIEFUTV9MM19VU0VSCTB4MTAJLyogdXNlci1zcGVjaWZpZWQgKi8KKy8qIEVORF9MMyAqLworCisKKy8qCisgKiBIaWdoIGxheWVyIGlkZW50aWZpZXJzCisgKi8KKworLyogQkVHSU5fSEwgKi8KKyNkZWZpbmUgQVRNX0hMX05PTkUJMAkvKiBITCBub3Qgc3BlY2lmaWVkICovCisjZGVmaW5lIEFUTV9ITF9JU08JMHgwMQkvKiBJU08gKi8KKyNkZWZpbmUgQVRNX0hMX1VTRVIJMHgwMgkvKiB1c2VyLXNwZWNpZmljICovCisjZGVmaW5lIEFUTV9ITF9ITFAJMHgwMwkvKiBoaWdoIGxheWVyIHByb2ZpbGUgLSBVTkkgMy4wIG9ubHkgKi8KKyNkZWZpbmUgQVRNX0hMX1ZFTkRPUgkweDA0CS8qIHZlbmRvci1zcGVjaWZpYyBhcHBsaWNhdGlvbiBpZGVudGlmaWVyICovCisvKiBFTkRfSEwgKi8KKworCisvKgorICogSVRVLVQgY29kZWQgbW9kZSBvZiBvcGVyYXRpb24KKyAqLworCisvKiBCRUdJTl9JTUQgKi8KKyNkZWZpbmUgQVRNX0lNRF9OT05FCSAwCS8qIG1vZGUgbm90IHNwZWNpZmllZCAqLworI2RlZmluZSBBVE1fSU1EX05PUk1BTAkgMQkvKiBub3JtYWwgbW9kZSBvZiBvcGVyYXRpb24gKi8KKyNkZWZpbmUgQVRNX0lNRF9FWFRFTkRFRCAyCS8qIGV4dGVuZGVkIG1vZGUgb2Ygb3BlcmF0aW9uICovCisvKiBFTkRfSU1EICovCisKKy8qCisgKiBILjMxMCBjb2RlIHBvaW50cworICovCisKKyNkZWZpbmUgQVRNX1RUX05PTkUJMAkvKiB0ZXJtaW5hbCB0eXBlIG5vdCBzcGVjaWZpZWQgKi8KKyNkZWZpbmUgQVRNX1RUX1JYCTEJLyogcmVjZWl2ZSBvbmx5ICovCisjZGVmaW5lIEFUTV9UVF9UWAkyCS8qIHNlbmQgb25seSAqLworI2RlZmluZSBBVE1fVFRfUlhUWAkzCS8qIHJlY2VpdmUgYW5kIHNlbmQgKi8KKworI2RlZmluZSBBVE1fTUNfTk9ORQkwCS8qIG5vIG11bHRpcGxleGluZyAqLworI2RlZmluZSBBVE1fTUNfVFMJMQkvKiB0cmFuc3BvcnQgc3RyZWFtIChUUykgKi8KKyNkZWZpbmUgQVRNX01DX1RTX0ZFQwkyCS8qIHRyYW5zcG9ydCBzdHJlYW0gd2l0aCBmb3J3YXJkIGVycm9yIGNvcnIuICovCisjZGVmaW5lIEFUTV9NQ19QUwkzCS8qIHByb2dyYW0gc3RyZWFtIChQUykgKi8KKyNkZWZpbmUgQVRNX01DX1BTX0ZFQwk0CS8qIHByb2dyYW0gc3RyZWFtIHdpdGggZm9yd2FyZCBlcnJvciBjb3JyLiAqLworI2RlZmluZSBBVE1fTUNfSDIyMQk1CS8qIElUVS1UIFJlYy4gSC4yMjEgKi8KKworLyoKKyAqIFNBUCBzdHJ1Y3R1cmVzCisgKi8KKworI2RlZmluZSBBVE1fTUFYX0hMSQk4CS8qIG1heGltdW0gaGlnaC1sYXllciBpbmZvcm1hdGlvbiBsZW5ndGggKi8KKworCitzdHJ1Y3QgYXRtX2JsbGkgeworICAgIHVuc2lnbmVkIGNoYXIgbDJfcHJvdG87CS8qIGxheWVyIDIgcHJvdG9jb2wgKi8KKyAgICB1bmlvbiB7CisJc3RydWN0IHsKKwkgICAgdW5zaWduZWQgY2hhciBtb2RlOwkvKiBtb2RlIG9mIG9wZXJhdGlvbiAoQVRNX0lNRF94eHgpLCAwIGlmICovCisJCQkJLyogYWJzZW50ICovCisJICAgIHVuc2lnbmVkIGNoYXIgd2luZG93OyAvKiB3aW5kb3cgc2l6ZSAoayksIDEtMTI3ICgwIHRvIG9taXQpICovCisJfSBpdHU7CQkJLyogSVRVLVQgZW5jb2RpbmcgKi8KKwl1bnNpZ25lZCBjaGFyIHVzZXI7CS8qIHVzZXItc3BlY2lmaWVkIGwyIGluZm9ybWF0aW9uICovCisgICAgfSBsMjsKKyAgICB1bnNpZ25lZCBjaGFyIGwzX3Byb3RvOwkvKiBsYXllciAzIHByb3RvY29sICovCisgICAgdW5pb24geworCXN0cnVjdCB7CisJICAgIHVuc2lnbmVkIGNoYXIgbW9kZTsJLyogbW9kZSBvZiBvcGVyYXRpb24gKEFUTV9JTURfeHh4KSwgMCBpZiAqLworCQkJCS8qIGFic2VudCAqLworCSAgICB1bnNpZ25lZCBjaGFyIGRlZl9zaXplOyAvKiBkZWZhdWx0IHBhY2tldCBzaXplIChsb2cyKSwgNC0xMiAoMCB0byAqLworCQkJCSAgICAvKiBvbWl0KSAqLworCSAgICB1bnNpZ25lZCBjaGFyIHdpbmRvdzsvKiBwYWNrZXQgd2luZG93IHNpemUsIDEtMTI3ICgwIHRvIG9taXQpICovCisJfSBpdHU7CQkJLyogSVRVLVQgZW5jb2RpbmcgKi8KKwl1bnNpZ25lZCBjaGFyIHVzZXI7CS8qIHVzZXIgc3BlY2lmaWVkIGwzIGluZm9ybWF0aW9uICovCisJc3RydWN0IHsJCSAgICAgIC8qIGlmIGwzX3Byb3RvID0gQVRNX0wzX0gzMTAgKi8KKwkgICAgdW5zaWduZWQgY2hhciB0ZXJtX3R5cGU7ICAvKiB0ZXJtaW5hbCB0eXBlICovCisJICAgIHVuc2lnbmVkIGNoYXIgZndfbXB4X2NhcDsgLyogZm9yd2FyZCBtdWx0aXBsZXhpbmcgY2FwYWJpbGl0eSAqLworCQkJCSAgICAgIC8qIG9ubHkgaWYgdGVybV90eXBlICE9IEFUTV9UVF9OT05FICovCisJICAgIHVuc2lnbmVkIGNoYXIgYndfbXB4X2NhcDsgLyogYmFja3dhcmQgbXVsdGlwbGV4aW5nIGNhcGFiaWxpdHkgKi8KKwkJCQkgICAgICAvKiBvbmx5IGlmIHRlcm1fdHlwZSAhPSBBVE1fVFRfTk9ORSAqLworCX0gaDMxMDsKKwlzdHJ1Y3QgewkJICAvKiBpZiBsM19wcm90byA9IEFUTV9MM19UUjk1NzcgKi8KKwkgICAgdW5zaWduZWQgY2hhciBpcGk7CSAgLyogaW5pdGlhbCBwcm90b2NvbCBpZCAqLworCSAgICB1bnNpZ25lZCBjaGFyIHNuYXBbNV07LyogSUVFRSA4MDIuMSBTTkFQIGlkZW50aWZpZXIgKi8KKwkJCQkgIC8qIChvbmx5IGlmIGlwaSA9PSBOTFBJRF9JRUVFODAyXzFfU05BUCkgKi8KKwl9IHRyOTU3NzsKKyAgICB9IGwzOworfSBfX0FUTV9BUElfQUxJR047CisKKworc3RydWN0IGF0bV9iaGxpIHsKKyAgICB1bnNpZ25lZCBjaGFyIGhsX3R5cGU7CS8qIGhpZ2ggbGF5ZXIgaW5mb3JtYXRpb24gdHlwZSAqLworICAgIHVuc2lnbmVkIGNoYXIgaGxfbGVuZ3RoOwkvKiBsZW5ndGggKG9ubHkgaWYgaGxfdHlwZSA9PSBBVE1fSExfVVNFUiB8fCAqLworCQkJCS8qIGhsX3R5cGUgPT0gQVRNX0hMX0lTTykgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGhsX2luZm9bQVRNX01BWF9ITEldOy8qIGhpZ2ggbGF5ZXIgaW5mb3JtYXRpb24gKi8KK307CisKKworI2RlZmluZSBBVE1fTUFYX0JMTEkJMwkJLyogbWF4aW11bSBudW1iZXIgb2YgQkxMSSBlbGVtZW50cyAqLworCisKK3N0cnVjdCBhdG1fc2FwIHsKKwlzdHJ1Y3QgYXRtX2JobGkgYmhsaTsJCS8qIGxvY2FsIFNBUCwgaGlnaC1sYXllciBpbmZvcm1hdGlvbiAqLworCXN0cnVjdCBhdG1fYmxsaSBibGxpW0FUTV9NQVhfQkxMSV0gX19BVE1fQVBJX0FMSUdOOworCQkJCQkvKiBsb2NhbCBTQVAsIGxvdy1sYXllciBpbmZvICovCit9OworCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBibGxpX2luX3VzZShzdHJ1Y3QgYXRtX2JsbGkgYmxsaSkKK3sKKwlyZXR1cm4gYmxsaS5sMl9wcm90byB8fCBibGxpLmwzX3Byb3RvOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdG1zdmMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdG1zdmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTcxNTgzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2F0bXN2Yy5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qIGF0bXN2Yy5oIC0gQVRNIHNpZ25hbGluZyBrZXJuZWwtZGVtb24gaW50ZXJmYWNlIGRlZmluaXRpb25zICovCisgCisvKiBXcml0dGVuIDE5OTUtMjAwMCBieSBXZXJuZXIgQWxtZXNiZXJnZXIsIEVQRkwgTFJDL0lDQSAqLworIAorCisjaWZuZGVmIF9MSU5VWF9BVE1TVkNfSAorI2RlZmluZSBfTElOVVhfQVRNU1ZDX0gKKworI2luY2x1ZGUgPGxpbnV4L2F0bWFwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bS5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bWlvYy5oPgorCisKKyNkZWZpbmUgQVRNU0lHRF9DVFJMIF9JTygnYScsQVRNSU9DX1NQRUNJQUwpCisJCQkJLyogYmVjb21lIEFUTSBzaWduYWxpbmcgZGVtb24gY29udHJvbCBzb2NrZXQgKi8KKworZW51bSBhdG1zdmNfbXNnX3R5cGUgeyBhc19jYXRjaF9udWxsLCBhc19iaW5kLCBhc19jb25uZWN0LCBhc19hY2NlcHQsIGFzX3JlamVjdCwKKwkJICAgICAgIGFzX2xpc3RlbiwgYXNfb2theSwgYXNfZXJyb3IsIGFzX2luZGljYXRlLCBhc19jbG9zZSwKKwkJICAgICAgIGFzX2l0Zl9ub3RpZnksIGFzX21vZGlmeSwgYXNfaWRlbnRpZnksIGFzX3Rlcm1pbmF0ZSwKKwkJICAgICAgIGFzX2FkZHBhcnR5LCBhc19kcm9wcGFydHkgfTsKKworc3RydWN0IGF0bXN2Y19tc2cgeworCWVudW0gYXRtc3ZjX21zZ190eXBlIHR5cGU7CisJYXRtX2twdHJfdCB2Y2M7CisJYXRtX2twdHJfdCBsaXN0ZW5fdmNjOwkJLyogaW5kaWNhdGUgKi8KKwlpbnQgcmVwbHk7CQkJLyogZm9yIG9rYXkgYW5kIGNsb3NlOgkJICAgKi8KKwkJCQkJLyogICA8IDA6IGVycm9yIGJlZm9yZSBhY3RpdmUJICAgKi8KKwkJCQkJLyogICAgICAgIChzaWdkIGhhcyBkaXNjYXJkZWQgY3R4KSAqLworCQkJCQkvKiAgID09MDogc3VjY2VzcwkJICAgKi8KKwkJCQkgICAgICAgIC8qICAgPiAwOiBlcnJvciB3aGVuIGFjdGl2ZSAoc3RpbGwgKi8KKwkJCQkJLyogICAgICAgIG5lZWQgdG8gY2xvc2UpCSAgICovCisJc3RydWN0IHNvY2thZGRyX2F0bXB2YyBwdmM7CS8qIGluZGljYXRlLCBva2F5IChjb25uZWN0KSAqLworCXN0cnVjdCBzb2NrYWRkcl9hdG1zdmMgbG9jYWw7CS8qIGxvY2FsIFNWQyBhZGRyZXNzICovCisJc3RydWN0IGF0bV9xb3MgcW9zOwkJLyogUU9TIHBhcmFtZXRlcnMgKi8KKwlzdHJ1Y3QgYXRtX3NhcCBzYXA7CQkvKiBTQVAgKi8KKwl1bnNpZ25lZCBpbnQgc2Vzc2lvbjsJCS8qIGZvciBwMnBtICovCisJc3RydWN0IHNvY2thZGRyX2F0bXN2YyBzdmM7CS8qIFNWQyBhZGRyZXNzICovCit9IF9fQVRNX0FQSV9BTElHTjsKKworLyoKKyAqIE1lc3NhZ2UgY29udGVudHM6IHNlZSBmdHA6Ly9pY2FmdHAuZXBmbC5jaC9wdWIvbGludXgvYXRtL2RvY3MvaXNwLSoudGFyLmd6CisgKi8KKworLyoKKyAqIFNvbWUgcG9saWN5IHN0dWZmIGZvciBhdG1zaWdkIGFuZCBmb3IgbmV0L2F0bS9zdmMuYy4gQm90aCBoYXZlIHRvIGFncmVlIG9uCisgKiB3aGF0IFBDUiBpcyB1c2VkIHRvIHJlcXVlc3QgYmFuZHdpZHRoIGZyb20gdGhlIGRldmljZSBkcml2ZXIuIG5ldC9hdG0vc3ZjLmMKKyAqIHRyaWVzIHRvIGRvIGJldHRlciB0aGFuIHRoYXQsIGJ1dCBvbmx5IGlmIHRoZXJlJ3Mgbm8gcm91dGluZyBkZWNpc2lvbiAoaS5lLgorICogaWYgc2lnbmFsaW5nIG9ubHkgdXNlcyBvbmUgQVRNIGludGVyZmFjZSkuCisgKi8KKworI2RlZmluZSBTRUxFQ1RfVE9QX1BDUih0cCkgKCh0cCkucGNyID8gKHRwKS5wY3IgOiBcCisgICh0cCkubWF4X3BjciAmJiAodHApLm1heF9wY3IgIT0gQVRNX01BWF9QQ1IgPyAodHApLm1heF9wY3IgOiBcCisgICh0cCkubWluX3BjciA/ICh0cCkubWluX3BjciA6IEFUTV9NQVhfUENSKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdWRpdC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ2MWRjOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdWRpdC5oCkBAIC0wLDAgKzEsMzYyIEBACisvKiBhdWRpdC5oIC0tIEF1ZGl0aW5nIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgMjAwMy0yMDA0IFJlZCBIYXQgSW5jLiwgRHVyaGFtLCBOb3J0aCBDYXJvbGluYS4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIFdyaXR0ZW4gYnkgUmlja2FyZCBFLiAoUmlrKSBGYWl0aCA8ZmFpdGhAcmVkaGF0LmNvbT4KKyAqCisgKi8KKworI2lmbmRlZiBfTElOVVhfQVVESVRfSF8KKyNkZWZpbmUgX0xJTlVYX0FVRElUX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2VsZi1lbS5oPgorCisvKiBUaGUgbmV0bGluayBtZXNzYWdlcyBmb3IgdGhlIGF1ZGl0IHN5c3RlbSBpcyBkaXZpZGVkIGludG8gYmxvY2tzOgorICogMTAwMCAtIDEwOTkgYXJlIGZvciBjb21tYW5kaW5nIHRoZSBhdWRpdCBzeXN0ZW0KKyAqIDExMDAgLSAxMTk5IHVzZXIgc3BhY2UgdHJ1c3RlZCBhcHBsaWNhdGlvbiBtZXNzYWdlcworICogMTIwMCAtIDEyOTkgbWVzc2FnZXMgaW50ZXJuYWwgdG8gdGhlIGF1ZGl0IGRhZW1vbgorICogMTMwMCAtIDEzOTkgYXVkaXQgZXZlbnQgbWVzc2FnZXMKKyAqIDE0MDAgLSAxNDk5IFNFIExpbnV4IHVzZQorICogMTUwMCAtIDE1OTkga2VybmVsIExTUFAgZXZlbnRzCisgKiAxNjAwIC0gMTY5OSBrZXJuZWwgY3J5cHRvIGV2ZW50cworICogMTcwMCAtIDE3OTkga2VybmVsIGFub21hbHkgcmVjb3JkcworICogMTgwMCAtIDE4OTkga2VybmVsIGludGVncml0eSBldmVudHMKKyAqIDE5MDAgLSAxOTk5IGZ1dHVyZSBrZXJuZWwgdXNlCisgKiAyMDAwIGlzIGZvciBvdGhlcndpc2UgdW5jbGFzc2lmaWVkIGtlcm5lbCBhdWRpdCBtZXNzYWdlcyAobGVnYWN5KQorICogMjAwMSAtIDIwOTkgdW51c2VkIChrZXJuZWwpCisgKiAyMTAwIC0gMjE5OSB1c2VyIHNwYWNlIGFub21hbHkgcmVjb3JkcworICogMjIwMCAtIDIyOTkgdXNlciBzcGFjZSBhY3Rpb25zIHRha2VuIGluIHJlc3BvbnNlIHRvIGFub21hbGllcworICogMjMwMCAtIDIzOTkgdXNlciBzcGFjZSBnZW5lcmF0ZWQgTFNQUCBldmVudHMKKyAqIDI0MDAgLSAyNDk5IHVzZXIgc3BhY2UgY3J5cHRvIGV2ZW50cworICogMjUwMCAtIDI5OTkgZnV0dXJlIHVzZXIgc3BhY2UgKG1heWJlIGludGVncml0eSBsYWJlbHMgYW5kIHJlbGF0ZWQgZXZlbnRzKQorICoKKyAqIE1lc3NhZ2VzIGZyb20gMTAwMC0xMTk5IGFyZSBiaS1kaXJlY3Rpb25hbC4gMTIwMC0xMjk5ICYgMjEwMCAtIDI5OTkgYXJlCisgKiBleGNsdXNpdmVseSB1c2VyIHNwYWNlLiAxMzAwLTIwOTkgaXMga2VybmVsIC0tPiB1c2VyIHNwYWNlIAorICogY29tbXVuaWNhdGlvbi4KKyAqLworI2RlZmluZSBBVURJVF9HRVQJCTEwMDAJLyogR2V0IHN0YXR1cyAqLworI2RlZmluZSBBVURJVF9TRVQJCTEwMDEJLyogU2V0IHN0YXR1cyAoZW5hYmxlL2Rpc2FibGUvYXVkaXRkKSAqLworI2RlZmluZSBBVURJVF9MSVNUCQkxMDAyCS8qIExpc3Qgc3lzY2FsbCBydWxlcyAtLSBkZXByZWNhdGVkICovCisjZGVmaW5lIEFVRElUX0FERAkJMTAwMwkvKiBBZGQgc3lzY2FsbCBydWxlIC0tIGRlcHJlY2F0ZWQgKi8KKyNkZWZpbmUgQVVESVRfREVMCQkxMDA0CS8qIERlbGV0ZSBzeXNjYWxsIHJ1bGUgLS0gZGVwcmVjYXRlZCAqLworI2RlZmluZSBBVURJVF9VU0VSCQkxMDA1CS8qIE1lc3NhZ2UgZnJvbSB1c2Vyc3BhY2UgLS0gZGVwcmVjYXRlZCAqLworI2RlZmluZSBBVURJVF9MT0dJTgkJMTAwNgkvKiBEZWZpbmUgdGhlIGxvZ2luIGlkIGFuZCBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBBVURJVF9XQVRDSF9JTlMJCTEwMDcJLyogSW5zZXJ0IGZpbGUvZGlyIHdhdGNoIGVudHJ5ICovCisjZGVmaW5lIEFVRElUX1dBVENIX1JFTQkJMTAwOAkvKiBSZW1vdmUgZmlsZS9kaXIgd2F0Y2ggZW50cnkgKi8KKyNkZWZpbmUgQVVESVRfV0FUQ0hfTElTVAkxMDA5CS8qIExpc3QgYWxsIGZpbGUvZGlyIHdhdGNoZXMgKi8KKyNkZWZpbmUgQVVESVRfU0lHTkFMX0lORk8JMTAxMAkvKiBHZXQgaW5mbyBhYm91dCBzZW5kZXIgb2Ygc2lnbmFsIHRvIGF1ZGl0ZCAqLworI2RlZmluZSBBVURJVF9BRERfUlVMRQkJMTAxMQkvKiBBZGQgc3lzY2FsbCBmaWx0ZXJpbmcgcnVsZSAqLworI2RlZmluZSBBVURJVF9ERUxfUlVMRQkJMTAxMgkvKiBEZWxldGUgc3lzY2FsbCBmaWx0ZXJpbmcgcnVsZSAqLworI2RlZmluZSBBVURJVF9MSVNUX1JVTEVTCTEwMTMJLyogTGlzdCBzeXNjYWxsIGZpbHRlcmluZyBydWxlcyAqLworI2RlZmluZSBBVURJVF9UUklNCQkxMDE0CS8qIFRyaW0ganVuayBmcm9tIHdhdGNoZWQgdHJlZSAqLworI2RlZmluZSBBVURJVF9NQUtFX0VRVUlWCTEwMTUJLyogQXBwZW5kIHRvIHdhdGNoZWQgdHJlZSAqLworI2RlZmluZSBBVURJVF9UVFlfR0VUCQkxMDE2CS8qIEdldCBUVFkgYXVkaXRpbmcgc3RhdHVzICovCisjZGVmaW5lIEFVRElUX1RUWV9TRVQJCTEwMTcJLyogU2V0IFRUWSBhdWRpdGluZyBzdGF0dXMgKi8KKworI2RlZmluZSBBVURJVF9GSVJTVF9VU0VSX01TRwkxMTAwCS8qIFVzZXJzcGFjZSBtZXNzYWdlcyBtb3N0bHkgdW5pbnRlcmVzdGluZyB0byBrZXJuZWwgKi8KKyNkZWZpbmUgQVVESVRfVVNFUl9BVkMJCTExMDcJLyogV2UgZmlsdGVyIHRoaXMgZGlmZmVyZW50bHkgKi8KKyNkZWZpbmUgQVVESVRfVVNFUl9UVFkJCTExMjQJLyogTm9uLUlDQU5PTiBUVFkgaW5wdXQgbWVhbmluZyAqLworI2RlZmluZSBBVURJVF9MQVNUX1VTRVJfTVNHCTExOTkKKyNkZWZpbmUgQVVESVRfRklSU1RfVVNFUl9NU0cyCTIxMDAJLyogTW9yZSB1c2VyIHNwYWNlIG1lc3NhZ2VzICovCisjZGVmaW5lIEFVRElUX0xBU1RfVVNFUl9NU0cyCTI5OTkKKyAKKyNkZWZpbmUgQVVESVRfREFFTU9OX1NUQVJUICAgICAgMTIwMCAgICAvKiBEYWVtb24gc3RhcnR1cCByZWNvcmQgKi8KKyNkZWZpbmUgQVVESVRfREFFTU9OX0VORCAgICAgICAgMTIwMSAgICAvKiBEYWVtb24gbm9ybWFsIHN0b3AgcmVjb3JkICovCisjZGVmaW5lIEFVRElUX0RBRU1PTl9BQk9SVCAgICAgIDEyMDIgICAgLyogRGFlbW9uIGVycm9yIHN0b3AgcmVjb3JkICovCisjZGVmaW5lIEFVRElUX0RBRU1PTl9DT05GSUcgICAgIDEyMDMgICAgLyogRGFlbW9uIGNvbmZpZyBjaGFuZ2UgKi8KKworI2RlZmluZSBBVURJVF9TWVNDQUxMCQkxMzAwCS8qIFN5c2NhbGwgZXZlbnQgKi8KKy8qICNkZWZpbmUgQVVESVRfRlNfV0FUQ0gJMTMwMQkgKiBEZXByZWNhdGVkICovCisjZGVmaW5lIEFVRElUX1BBVEgJCTEzMDIJLyogRmlsZW5hbWUgcGF0aCBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBBVURJVF9JUEMJCTEzMDMJLyogSVBDIHJlY29yZCAqLworI2RlZmluZSBBVURJVF9TT0NLRVRDQUxMCTEzMDQJLyogc3lzX3NvY2tldGNhbGwgYXJndW1lbnRzICovCisjZGVmaW5lIEFVRElUX0NPTkZJR19DSEFOR0UJMTMwNQkvKiBBdWRpdCBzeXN0ZW0gY29uZmlndXJhdGlvbiBjaGFuZ2UgKi8KKyNkZWZpbmUgQVVESVRfU09DS0FERFIJCTEzMDYJLyogc29ja2FkZHIgY29waWVkIGFzIHN5c2NhbGwgYXJnICovCisjZGVmaW5lIEFVRElUX0NXRAkJMTMwNwkvKiBDdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5ICovCisjZGVmaW5lIEFVRElUX0VYRUNWRQkJMTMwOQkvKiBleGVjdmUgYXJndW1lbnRzICovCisjZGVmaW5lIEFVRElUX0lQQ19TRVRfUEVSTQkxMzExCS8qIElQQyBuZXcgcGVybWlzc2lvbnMgcmVjb3JkIHR5cGUgKi8KKyNkZWZpbmUgQVVESVRfTVFfT1BFTgkJMTMxMgkvKiBQT1NJWCBNUSBvcGVuIHJlY29yZCB0eXBlICovCisjZGVmaW5lIEFVRElUX01RX1NFTkRSRUNWCTEzMTMJLyogUE9TSVggTVEgc2VuZC9yZWNlaXZlIHJlY29yZCB0eXBlICovCisjZGVmaW5lIEFVRElUX01RX05PVElGWQkJMTMxNAkvKiBQT1NJWCBNUSBub3RpZnkgcmVjb3JkIHR5cGUgKi8KKyNkZWZpbmUgQVVESVRfTVFfR0VUU0VUQVRUUgkxMzE1CS8qIFBPU0lYIE1RIGdldC9zZXQgYXR0cmlidXRlIHJlY29yZCB0eXBlICovCisjZGVmaW5lIEFVRElUX0tFUk5FTF9PVEhFUgkxMzE2CS8qIEZvciB1c2UgYnkgM3JkIHBhcnR5IG1vZHVsZXMgKi8KKyNkZWZpbmUgQVVESVRfRkRfUEFJUgkJMTMxNyAgICAvKiBhdWRpdCByZWNvcmQgZm9yIHBpcGUvc29ja2V0cGFpciAqLworI2RlZmluZSBBVURJVF9PQkpfUElECQkxMzE4CS8qIHB0cmFjZSB0YXJnZXQgKi8KKyNkZWZpbmUgQVVESVRfVFRZCQkxMzE5CS8qIElucHV0IG9uIGFuIGFkbWluaXN0cmF0aXZlIFRUWSAqLworI2RlZmluZSBBVURJVF9FT0UJCTEzMjAJLyogRW5kIG9mIG11bHRpLXJlY29yZCBldmVudCAqLworI2RlZmluZSBBVURJVF9CUFJNX0ZDQVBTCTEzMjEJLyogSW5mb3JtYXRpb24gYWJvdXQgZmNhcHMgaW5jcmVhc2luZyBwZXJtcyAqLworI2RlZmluZSBBVURJVF9DQVBTRVQJCTEzMjIJLyogUmVjb3JkIHNob3dpbmcgYXJndW1lbnQgdG8gc3lzX2NhcHNldCAqLworI2RlZmluZSBBVURJVF9NTUFQCQkxMzIzCS8qIFJlY29yZCBzaG93aW5nIGRlc2NyaXB0b3IgYW5kIGZsYWdzIGluIG1tYXAgKi8KKworI2RlZmluZSBBVURJVF9BVkMJCTE0MDAJLyogU0UgTGludXggYXZjIGRlbmlhbCBvciBncmFudCAqLworI2RlZmluZSBBVURJVF9TRUxJTlVYX0VSUgkxNDAxCS8qIEludGVybmFsIFNFIExpbnV4IEVycm9ycyAqLworI2RlZmluZSBBVURJVF9BVkNfUEFUSAkJMTQwMgkvKiBkZW50cnksIHZmc21vdW50IHBhaXIgZnJvbSBhdmMgKi8KKyNkZWZpbmUgQVVESVRfTUFDX1BPTElDWV9MT0FECTE0MDMJLyogUG9saWN5IGZpbGUgbG9hZCAqLworI2RlZmluZSBBVURJVF9NQUNfU1RBVFVTCTE0MDQJLyogQ2hhbmdlZCBlbmZvcmNpbmcscGVybWlzc2l2ZSxvZmYgKi8KKyNkZWZpbmUgQVVESVRfTUFDX0NPTkZJR19DSEFOR0UJMTQwNQkvKiBDaGFuZ2VzIHRvIGJvb2xlYW5zICovCisjZGVmaW5lIEFVRElUX01BQ19VTkxCTF9BTExPVwkxNDA2CS8qIE5ldExhYmVsOiBhbGxvdyB1bmxhYmVsZWQgdHJhZmZpYyAqLworI2RlZmluZSBBVURJVF9NQUNfQ0lQU09WNF9BREQJMTQwNwkvKiBOZXRMYWJlbDogYWRkIENJUFNPdjQgRE9JIGVudHJ5ICovCisjZGVmaW5lIEFVRElUX01BQ19DSVBTT1Y0X0RFTAkxNDA4CS8qIE5ldExhYmVsOiBkZWwgQ0lQU092NCBET0kgZW50cnkgKi8KKyNkZWZpbmUgQVVESVRfTUFDX01BUF9BREQJMTQwOQkvKiBOZXRMYWJlbDogYWRkIExTTSBkb21haW4gbWFwcGluZyAqLworI2RlZmluZSBBVURJVF9NQUNfTUFQX0RFTAkxNDEwCS8qIE5ldExhYmVsOiBkZWwgTFNNIGRvbWFpbiBtYXBwaW5nICovCisjZGVmaW5lIEFVRElUX01BQ19JUFNFQ19BRERTQQkxNDExCS8qIE5vdCB1c2VkICovCisjZGVmaW5lIEFVRElUX01BQ19JUFNFQ19ERUxTQQkxNDEyCS8qIE5vdCB1c2VkICAqLworI2RlZmluZSBBVURJVF9NQUNfSVBTRUNfQUREU1BECTE0MTMJLyogTm90IHVzZWQgKi8KKyNkZWZpbmUgQVVESVRfTUFDX0lQU0VDX0RFTFNQRAkxNDE0CS8qIE5vdCB1c2VkICovCisjZGVmaW5lIEFVRElUX01BQ19JUFNFQ19FVkVOVAkxNDE1CS8qIEF1ZGl0IGFuIElQU2VjIGV2ZW50ICovCisjZGVmaW5lIEFVRElUX01BQ19VTkxCTF9TVENBREQJMTQxNgkvKiBOZXRMYWJlbDogYWRkIGEgc3RhdGljIGxhYmVsICovCisjZGVmaW5lIEFVRElUX01BQ19VTkxCTF9TVENERUwJMTQxNwkvKiBOZXRMYWJlbDogZGVsIGEgc3RhdGljIGxhYmVsICovCisKKyNkZWZpbmUgQVVESVRfRklSU1RfS0VSTl9BTk9NX01TRyAgIDE3MDAKKyNkZWZpbmUgQVVESVRfTEFTVF9LRVJOX0FOT01fTVNHICAgIDE3OTkKKyNkZWZpbmUgQVVESVRfQU5PTV9QUk9NSVNDVU9VUyAgICAgIDE3MDAgLyogRGV2aWNlIGNoYW5nZWQgcHJvbWlzY3VvdXMgbW9kZSAqLworI2RlZmluZSBBVURJVF9BTk9NX0FCRU5EICAgICAgICAgICAgMTcwMSAvKiBQcm9jZXNzIGVuZGVkIGFibm9ybWFsbHkgKi8KKyNkZWZpbmUgQVVESVRfSU5URUdSSVRZX0RBVEEJICAgIDE4MDAgLyogRGF0YSBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uICovCisjZGVmaW5lIEFVRElUX0lOVEVHUklUWV9NRVRBREFUQSAgICAxODAxIC8qIE1ldGFkYXRhIGludGVncml0eSB2ZXJpZmljYXRpb24gKi8KKyNkZWZpbmUgQVVESVRfSU5URUdSSVRZX1NUQVRVUwkgICAgMTgwMiAvKiBJbnRlZ3JpdHkgZW5hYmxlIHN0YXR1cyAqLworI2RlZmluZSBBVURJVF9JTlRFR1JJVFlfSEFTSAkgICAgMTgwMyAvKiBJbnRlZ3JpdHkgSEFTSCB0eXBlICovCisjZGVmaW5lIEFVRElUX0lOVEVHUklUWV9QQ1IJICAgIDE4MDQgLyogUENSIGludmFsaWRhdGlvbiBtc2dzICovCisjZGVmaW5lIEFVRElUX0lOVEVHUklUWV9SVUxFCSAgICAxODA1IC8qIHBvbGljeSBydWxlICovCisKKyNkZWZpbmUgQVVESVRfS0VSTkVMCQkyMDAwCS8qIEFzeW5jaHJvbm91cyBhdWRpdCByZWNvcmQuIE5PVCBBIFJFUVVFU1QuICovCisKKy8qIFJ1bGUgZmxhZ3MgKi8KKyNkZWZpbmUgQVVESVRfRklMVEVSX1VTRVIJMHgwMAkvKiBBcHBseSBydWxlIHRvIHVzZXItZ2VuZXJhdGVkIG1lc3NhZ2VzICovCisjZGVmaW5lIEFVRElUX0ZJTFRFUl9UQVNLCTB4MDEJLyogQXBwbHkgcnVsZSBhdCB0YXNrIGNyZWF0aW9uIChub3Qgc3lzY2FsbCkgKi8KKyNkZWZpbmUgQVVESVRfRklMVEVSX0VOVFJZCTB4MDIJLyogQXBwbHkgcnVsZSBhdCBzeXNjYWxsIGVudHJ5ICovCisjZGVmaW5lIEFVRElUX0ZJTFRFUl9XQVRDSAkweDAzCS8qIEFwcGx5IHJ1bGUgdG8gZmlsZSBzeXN0ZW0gd2F0Y2hlcyAqLworI2RlZmluZSBBVURJVF9GSUxURVJfRVhJVAkweDA0CS8qIEFwcGx5IHJ1bGUgYXQgc3lzY2FsbCBleGl0ICovCisjZGVmaW5lIEFVRElUX0ZJTFRFUl9UWVBFCTB4MDUJLyogQXBwbHkgcnVsZSBhdCBhdWRpdF9sb2dfc3RhcnQgKi8KKworI2RlZmluZSBBVURJVF9OUl9GSUxURVJTCTYKKworI2RlZmluZSBBVURJVF9GSUxURVJfUFJFUEVORAkweDEwCS8qIFByZXBlbmQgdG8gZnJvbnQgb2YgbGlzdCAqLworCisvKiBSdWxlIGFjdGlvbnMgKi8KKyNkZWZpbmUgQVVESVRfTkVWRVIgICAgMAkvKiBEbyBub3QgYnVpbGQgY29udGV4dCBpZiBydWxlIG1hdGNoZXMgKi8KKyNkZWZpbmUgQVVESVRfUE9TU0lCTEUgMQkvKiBCdWlsZCBjb250ZXh0IGlmIHJ1bGUgbWF0Y2hlcyAgKi8KKyNkZWZpbmUgQVVESVRfQUxXQVlTICAgMgkvKiBHZW5lcmF0ZSBhdWRpdCByZWNvcmQgaWYgcnVsZSBtYXRjaGVzICovCisKKy8qIFJ1bGUgc3RydWN0dXJlIHNpemVzIC0tIGlmIHRoZXNlIGNoYW5nZSwgZGlmZmVyZW50IEFVRElUX0FERCBhbmQKKyAqIEFVRElUX0xJU1QgY29tbWFuZHMgbXVzdCBiZSBpbXBsZW1lbnRlZC4gKi8KKyNkZWZpbmUgQVVESVRfTUFYX0ZJRUxEUyAgIDY0CisjZGVmaW5lIEFVRElUX01BWF9LRVlfTEVOICAyNTYKKyNkZWZpbmUgQVVESVRfQklUTUFTS19TSVpFIDY0CisjZGVmaW5lIEFVRElUX1dPUkQobnIpICgoX191MzIpKChucikvMzIpKQorI2RlZmluZSBBVURJVF9CSVQobnIpICAoMSA8PCAoKG5yKSAtIEFVRElUX1dPUkQobnIpKjMyKSkKKworI2RlZmluZSBBVURJVF9TWVNDQUxMX0NMQVNTRVMgMTYKKyNkZWZpbmUgQVVESVRfQ0xBU1NfRElSX1dSSVRFIDAKKyNkZWZpbmUgQVVESVRfQ0xBU1NfRElSX1dSSVRFXzMyIDEKKyNkZWZpbmUgQVVESVRfQ0xBU1NfQ0hBVFRSIDIKKyNkZWZpbmUgQVVESVRfQ0xBU1NfQ0hBVFRSXzMyIDMKKyNkZWZpbmUgQVVESVRfQ0xBU1NfUkVBRCA0CisjZGVmaW5lIEFVRElUX0NMQVNTX1JFQURfMzIgNQorI2RlZmluZSBBVURJVF9DTEFTU19XUklURSA2CisjZGVmaW5lIEFVRElUX0NMQVNTX1dSSVRFXzMyIDcKKyNkZWZpbmUgQVVESVRfQ0xBU1NfU0lHTkFMIDgKKyNkZWZpbmUgQVVESVRfQ0xBU1NfU0lHTkFMXzMyIDkKKworLyogVGhpcyBiaXRtYXNrIGlzIHVzZWQgdG8gdmFsaWRhdGUgdXNlciBpbnB1dC4gIEl0IHJlcHJlc2VudHMgYWxsIGJpdHMgdGhhdAorICogYXJlIGN1cnJlbnRseSB1c2VkIGluIGFuIGF1ZGl0IGZpZWxkIGNvbnN0YW50IHVuZGVyc3Rvb2QgYnkgdGhlIGtlcm5lbC4KKyAqIElmIHlvdSBhcmUgYWRkaW5nIGEgbmV3ICNkZWZpbmUgQVVESVRfPHdoYXRldmVyPiwgcGxlYXNlIGVuc3VyZSB0aGF0CisgKiBBVURJVF9VTlVTRURfQklUUyBpcyB1cGRhdGVkIGlmIG5lZWQgYmUuICovCisjZGVmaW5lIEFVRElUX1VOVVNFRF9CSVRTCTB4MDdGRkZDMDAKKworCisvKiBSdWxlIGZpZWxkcyAqLworCQkJCS8qIFRoZXNlIGFyZSB1c2VmdWwgd2hlbiBjaGVja2luZyB0aGUKKwkJCQkgKiB0YXNrIHN0cnVjdHVyZSBhdCB0YXNrIGNyZWF0aW9uIHRpbWUKKwkJCQkgKiAoQVVESVRfUEVSX1RBU0spLiAgKi8KKyNkZWZpbmUgQVVESVRfUElECTAKKyNkZWZpbmUgQVVESVRfVUlECTEKKyNkZWZpbmUgQVVESVRfRVVJRAkyCisjZGVmaW5lIEFVRElUX1NVSUQJMworI2RlZmluZSBBVURJVF9GU1VJRAk0CisjZGVmaW5lIEFVRElUX0dJRAk1CisjZGVmaW5lIEFVRElUX0VHSUQJNgorI2RlZmluZSBBVURJVF9TR0lECTcKKyNkZWZpbmUgQVVESVRfRlNHSUQJOAorI2RlZmluZSBBVURJVF9MT0dJTlVJRAk5CisjZGVmaW5lIEFVRElUX1BFUlMJMTAKKyNkZWZpbmUgQVVESVRfQVJDSAkxMQorI2RlZmluZSBBVURJVF9NU0dUWVBFCTEyCisjZGVmaW5lIEFVRElUX1NVQkpfVVNFUgkxMwkvKiBzZWN1cml0eSBsYWJlbCB1c2VyICovCisjZGVmaW5lIEFVRElUX1NVQkpfUk9MRQkxNAkvKiBzZWN1cml0eSBsYWJlbCByb2xlICovCisjZGVmaW5lIEFVRElUX1NVQkpfVFlQRQkxNQkvKiBzZWN1cml0eSBsYWJlbCB0eXBlICovCisjZGVmaW5lIEFVRElUX1NVQkpfU0VOCTE2CS8qIHNlY3VyaXR5IGxhYmVsIHNlbnNpdGl2aXR5IGxhYmVsICovCisjZGVmaW5lIEFVRElUX1NVQkpfQ0xSCTE3CS8qIHNlY3VyaXR5IGxhYmVsIGNsZWFyYW5jZSBsYWJlbCAqLworI2RlZmluZSBBVURJVF9QUElECTE4CisjZGVmaW5lIEFVRElUX09CSl9VU0VSCTE5CisjZGVmaW5lIEFVRElUX09CSl9ST0xFCTIwCisjZGVmaW5lIEFVRElUX09CSl9UWVBFCTIxCisjZGVmaW5lIEFVRElUX09CSl9MRVZfTE9XCTIyCisjZGVmaW5lIEFVRElUX09CSl9MRVZfSElHSAkyMworCisJCQkJLyogVGhlc2UgYXJlIE9OTFkgdXNlZnVsIHdoZW4gY2hlY2tpbmcKKwkJCQkgKiBhdCBzeXNjYWxsIGV4aXQgdGltZSAoQVVESVRfQVRfRVhJVCkuICovCisjZGVmaW5lIEFVRElUX0RFVk1BSk9SCTEwMAorI2RlZmluZSBBVURJVF9ERVZNSU5PUgkxMDEKKyNkZWZpbmUgQVVESVRfSU5PREUJMTAyCisjZGVmaW5lIEFVRElUX0VYSVQJMTAzCisjZGVmaW5lIEFVRElUX1NVQ0NFU1MgICAxMDQJLyogZXhpdCA+PSAwOyB2YWx1ZSBpZ25vcmVkICovCisjZGVmaW5lIEFVRElUX1dBVENICTEwNQorI2RlZmluZSBBVURJVF9QRVJNCTEwNgorI2RlZmluZSBBVURJVF9ESVIJMTA3CisjZGVmaW5lIEFVRElUX0ZJTEVUWVBFCTEwOAorCisjZGVmaW5lIEFVRElUX0FSRzAgICAgICAyMDAKKyNkZWZpbmUgQVVESVRfQVJHMSAgICAgIChBVURJVF9BUkcwKzEpCisjZGVmaW5lIEFVRElUX0FSRzIgICAgICAoQVVESVRfQVJHMCsyKQorI2RlZmluZSBBVURJVF9BUkczICAgICAgKEFVRElUX0FSRzArMykKKworI2RlZmluZSBBVURJVF9GSUxURVJLRVkJMjEwCisKKyNkZWZpbmUgQVVESVRfTkVHQVRFCQkJMHg4MDAwMDAwMAorCisvKiBUaGVzZSBhcmUgdGhlIHN1cHBvcnRlZCBvcGVyYXRvcnMuCisgKgk0ICAyICAxICA4CisgKgk9ICA+ICA8ICA/CisgKgktLS0tLS0tLS0tCisgKgkwICAwICAwCSAwCTAwCW5vbnNlbnNlCisgKgkwICAwICAwCSAxCTA4CSYgIGJpdCBtYXNrCisgKgkwICAwICAxCSAwCTEwCTwKKyAqCTAgIDEgIDAJIDAJMjAJPgorICoJMCAgMSAgMQkgMAkzMAkhPQorICoJMSAgMCAgMAkgMAk0MAk9CisgKgkxICAwICAwCSAxCTQ4CSY9ICBiaXQgdGVzdAorICoJMSAgMCAgMQkgMAk1MAk8PQorICoJMSAgMSAgMAkgMAk2MAk+PQorICoJMSAgMSAgMQkgMQk3OAlhbGwgb3BlcmF0b3JzCisgKi8KKyNkZWZpbmUgQVVESVRfQklUX01BU0sJCQkweDA4MDAwMDAwCisjZGVmaW5lIEFVRElUX0xFU1NfVEhBTgkJCTB4MTAwMDAwMDAKKyNkZWZpbmUgQVVESVRfR1JFQVRFUl9USEFOCQkweDIwMDAwMDAwCisjZGVmaW5lIEFVRElUX05PVF9FUVVBTAkJCTB4MzAwMDAwMDAKKyNkZWZpbmUgQVVESVRfRVFVQUwJCQkweDQwMDAwMDAwCisjZGVmaW5lIEFVRElUX0JJVF9URVNUCQkJKEFVRElUX0JJVF9NQVNLfEFVRElUX0VRVUFMKQorI2RlZmluZSBBVURJVF9MRVNTX1RIQU5fT1JfRVFVQUwJKEFVRElUX0xFU1NfVEhBTnxBVURJVF9FUVVBTCkKKyNkZWZpbmUgQVVESVRfR1JFQVRFUl9USEFOX09SX0VRVUFMCShBVURJVF9HUkVBVEVSX1RIQU58QVVESVRfRVFVQUwpCisjZGVmaW5lIEFVRElUX09QRVJBVE9SUwkJCShBVURJVF9FUVVBTHxBVURJVF9OT1RfRVFVQUx8QVVESVRfQklUX01BU0spCisKK2VudW0geworCUF1ZGl0X2VxdWFsLAorCUF1ZGl0X25vdF9lcXVhbCwKKwlBdWRpdF9iaXRtYXNrLAorCUF1ZGl0X2JpdHRlc3QsCisJQXVkaXRfbHQsCisJQXVkaXRfZ3QsCisJQXVkaXRfbGUsCisJQXVkaXRfZ2UsCisJQXVkaXRfYmFkCit9OworCisvKiBTdGF0dXMgc3ltYm9scyAqLworCQkJCS8qIE1hc2sgdmFsdWVzICovCisjZGVmaW5lIEFVRElUX1NUQVRVU19FTkFCTEVECQkweDAwMDEKKyNkZWZpbmUgQVVESVRfU1RBVFVTX0ZBSUxVUkUJCTB4MDAwMgorI2RlZmluZSBBVURJVF9TVEFUVVNfUElECQkweDAwMDQKKyNkZWZpbmUgQVVESVRfU1RBVFVTX1JBVEVfTElNSVQJCTB4MDAwOAorI2RlZmluZSBBVURJVF9TVEFUVVNfQkFDS0xPR19MSU1JVAkweDAwMTAKKwkJCQkvKiBGYWlsdXJlLXRvLWxvZyBhY3Rpb25zICovCisjZGVmaW5lIEFVRElUX0ZBSUxfU0lMRU5UCTAKKyNkZWZpbmUgQVVESVRfRkFJTF9QUklOVEsJMQorI2RlZmluZSBBVURJVF9GQUlMX1BBTklDCTIKKworLyogZGlzdGluZ3Vpc2ggc3lzY2FsbCB0YWJsZXMgKi8KKyNkZWZpbmUgX19BVURJVF9BUkNIXzY0QklUIDB4ODAwMDAwMDAKKyNkZWZpbmUgX19BVURJVF9BUkNIX0xFCSAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQVVESVRfQVJDSF9BTFBIQQkoRU1fQUxQSEF8X19BVURJVF9BUkNIXzY0QklUfF9fQVVESVRfQVJDSF9MRSkKKyNkZWZpbmUgQVVESVRfQVJDSF9BUk0JCShFTV9BUk18X19BVURJVF9BUkNIX0xFKQorI2RlZmluZSBBVURJVF9BUkNIX0FSTUVCCShFTV9BUk0pCisjZGVmaW5lIEFVRElUX0FSQ0hfQ1JJUwkJKEVNX0NSSVN8X19BVURJVF9BUkNIX0xFKQorI2RlZmluZSBBVURJVF9BUkNIX0ZSVgkJKEVNX0ZSVikKKyNkZWZpbmUgQVVESVRfQVJDSF9IODMwMAkoRU1fSDhfMzAwKQorI2RlZmluZSBBVURJVF9BUkNIX0kzODYJCShFTV8zODZ8X19BVURJVF9BUkNIX0xFKQorI2RlZmluZSBBVURJVF9BUkNIX0lBNjQJCShFTV9JQV82NHxfX0FVRElUX0FSQ0hfNjRCSVR8X19BVURJVF9BUkNIX0xFKQorI2RlZmluZSBBVURJVF9BUkNIX00zMlIJCShFTV9NMzJSKQorI2RlZmluZSBBVURJVF9BUkNIX002OEsJCShFTV82OEspCisjZGVmaW5lIEFVRElUX0FSQ0hfTUlQUwkJKEVNX01JUFMpCisjZGVmaW5lIEFVRElUX0FSQ0hfTUlQU0VMCShFTV9NSVBTfF9fQVVESVRfQVJDSF9MRSkKKyNkZWZpbmUgQVVESVRfQVJDSF9NSVBTNjQJKEVNX01JUFN8X19BVURJVF9BUkNIXzY0QklUKQorI2RlZmluZSBBVURJVF9BUkNIX01JUFNFTDY0CShFTV9NSVBTfF9fQVVESVRfQVJDSF82NEJJVHxfX0FVRElUX0FSQ0hfTEUpCisjZGVmaW5lIEFVRElUX0FSQ0hfUEFSSVNDCShFTV9QQVJJU0MpCisjZGVmaW5lIEFVRElUX0FSQ0hfUEFSSVNDNjQJKEVNX1BBUklTQ3xfX0FVRElUX0FSQ0hfNjRCSVQpCisjZGVmaW5lIEFVRElUX0FSQ0hfUFBDCQkoRU1fUFBDKQorI2RlZmluZSBBVURJVF9BUkNIX1BQQzY0CShFTV9QUEM2NHxfX0FVRElUX0FSQ0hfNjRCSVQpCisjZGVmaW5lIEFVRElUX0FSQ0hfUzM5MAkJKEVNX1MzOTApCisjZGVmaW5lIEFVRElUX0FSQ0hfUzM5MFgJKEVNX1MzOTB8X19BVURJVF9BUkNIXzY0QklUKQorI2RlZmluZSBBVURJVF9BUkNIX1NICQkoRU1fU0gpCisjZGVmaW5lIEFVRElUX0FSQ0hfU0hFTAkJKEVNX1NIfF9fQVVESVRfQVJDSF9MRSkKKyNkZWZpbmUgQVVESVRfQVJDSF9TSDY0CQkoRU1fU0h8X19BVURJVF9BUkNIXzY0QklUKQorI2RlZmluZSBBVURJVF9BUkNIX1NIRUw2NAkoRU1fU0h8X19BVURJVF9BUkNIXzY0QklUfF9fQVVESVRfQVJDSF9MRSkKKyNkZWZpbmUgQVVESVRfQVJDSF9TUEFSQwkoRU1fU1BBUkMpCisjZGVmaW5lIEFVRElUX0FSQ0hfU1BBUkM2NAkoRU1fU1BBUkNWOXxfX0FVRElUX0FSQ0hfNjRCSVQpCisjZGVmaW5lIEFVRElUX0FSQ0hfWDg2XzY0CShFTV9YODZfNjR8X19BVURJVF9BUkNIXzY0QklUfF9fQVVESVRfQVJDSF9MRSkKKworI2RlZmluZSBBVURJVF9QRVJNX0VYRUMJCTEKKyNkZWZpbmUgQVVESVRfUEVSTV9XUklURQkyCisjZGVmaW5lIEFVRElUX1BFUk1fUkVBRAkJNAorI2RlZmluZSBBVURJVF9QRVJNX0FUVFIJCTgKKworc3RydWN0IGF1ZGl0X3N0YXR1cyB7CisJX191MzIJCW1hc2s7CQkvKiBCaXQgbWFzayBmb3IgdmFsaWQgZW50cmllcyAqLworCV9fdTMyCQllbmFibGVkOwkvKiAxID0gZW5hYmxlZCwgMCA9IGRpc2FibGVkICovCisJX191MzIJCWZhaWx1cmU7CS8qIEZhaWx1cmUtdG8tbG9nIGFjdGlvbiAqLworCV9fdTMyCQlwaWQ7CQkvKiBwaWQgb2YgYXVkaXRkIHByb2Nlc3MgKi8KKwlfX3UzMgkJcmF0ZV9saW1pdDsJLyogbWVzc2FnZXMgcmF0ZSBsaW1pdCAocGVyIHNlY29uZCkgKi8KKwlfX3UzMgkJYmFja2xvZ19saW1pdDsJLyogd2FpdGluZyBtZXNzYWdlcyBsaW1pdCAqLworCV9fdTMyCQlsb3N0OwkJLyogbWVzc2FnZXMgbG9zdCAqLworCV9fdTMyCQliYWNrbG9nOwkvKiBtZXNzYWdlcyB3YWl0aW5nIGluIHF1ZXVlICovCit9OworCitzdHJ1Y3QgYXVkaXRfdHR5X3N0YXR1cyB7CisJX191MzIJCWVuYWJsZWQ7IC8qIDEgPSBlbmFibGVkLCAwID0gZGlzYWJsZWQgKi8KK307CisKKy8qIGF1ZGl0X3J1bGVfZGF0YSBzdXBwb3J0cyBmaWx0ZXIgcnVsZXMgd2l0aCBib3RoIGludGVnZXIgYW5kIHN0cmluZworICogZmllbGRzLiAgSXQgY29ycmVzcG9uZHMgd2l0aCBBVURJVF9BRERfUlVMRSwgQVVESVRfREVMX1JVTEUgYW5kCisgKiBBVURJVF9MSVNUX1JVTEVTIHJlcXVlc3RzLgorICovCitzdHJ1Y3QgYXVkaXRfcnVsZV9kYXRhIHsKKwlfX3UzMgkJZmxhZ3M7CS8qIEFVRElUX1BFUl97VEFTSyxDQUxMfSwgQVVESVRfUFJFUEVORCAqLworCV9fdTMyCQlhY3Rpb247CS8qIEFVRElUX05FVkVSLCBBVURJVF9QT1NTSUJMRSwgQVVESVRfQUxXQVlTICovCisJX191MzIJCWZpZWxkX2NvdW50OworCV9fdTMyCQltYXNrW0FVRElUX0JJVE1BU0tfU0laRV07IC8qIHN5c2NhbGwocykgYWZmZWN0ZWQgKi8KKwlfX3UzMgkJZmllbGRzW0FVRElUX01BWF9GSUVMRFNdOworCV9fdTMyCQl2YWx1ZXNbQVVESVRfTUFYX0ZJRUxEU107CisJX191MzIJCWZpZWxkZmxhZ3NbQVVESVRfTUFYX0ZJRUxEU107CisJX191MzIJCWJ1ZmxlbjsJLyogdG90YWwgbGVuZ3RoIG9mIHN0cmluZyBmaWVsZHMgKi8KKwljaGFyCQlidWZbMF07CS8qIHN0cmluZyBmaWVsZHMgYnVmZmVyICovCit9OworCisvKiBhdWRpdF9ydWxlIGlzIHN1cHBvcnRlZCB0byBtYWludGFpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGgKKyAqIHVzZXJzcGFjZS4gIEl0IHN1cHBvcnRzIGludGVnZXIgZmllbGRzIG9ubHkgYW5kIGNvcnJlc3BvbmRzIHRvCisgKiBBVURJVF9BREQsIEFVRElUX0RFTCBhbmQgQVVESVRfTElTVCByZXF1ZXN0cy4KKyAqLworc3RydWN0IGF1ZGl0X3J1bGUgewkJLyogZm9yIEFVRElUX0xJU1QsIEFVRElUX0FERCwgYW5kIEFVRElUX0RFTCAqLworCV9fdTMyCQlmbGFnczsJLyogQVVESVRfUEVSX3tUQVNLLENBTEx9LCBBVURJVF9QUkVQRU5EICovCisJX191MzIJCWFjdGlvbjsJLyogQVVESVRfTkVWRVIsIEFVRElUX1BPU1NJQkxFLCBBVURJVF9BTFdBWVMgKi8KKwlfX3UzMgkJZmllbGRfY291bnQ7CisJX191MzIJCW1hc2tbQVVESVRfQklUTUFTS19TSVpFXTsKKwlfX3UzMgkJZmllbGRzW0FVRElUX01BWF9GSUVMRFNdOworCV9fdTMyCQl2YWx1ZXNbQVVESVRfTUFYX0ZJRUxEU107Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdXRvX2ZzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYXV0b19mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZjg2ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYXV0b19mcy5oCkBAIC0wLDAgKzEsODAgQEAKKy8qIC0qLSBsaW51eC1jIC0qLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKKyAqICAgCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L2F1dG9fZnMuaAorICoKKyAqICAgQ29weXJpZ2h0IDE5OTcgVHJhbnNtZXRhIENvcnBvcmF0aW9uIC0gQWxsIFJpZ2h0cyBSZXNlcnZlZAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwgYW5kIGlzIG1hZGUgYXZhaWxhYmxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIG9yIGF0IHlvdXIKKyAqIG9wdGlvbiwgYW55IGxhdGVyIHZlcnNpb24sIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworI2lmbmRlZiBfTElOVVhfQVVUT19GU19ICisjZGVmaW5lIF9MSU5VWF9BVVRPX0ZTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisKKy8qIFRoaXMgZmlsZSBkZXNjcmliZXMgYXV0b2ZzIHYzICovCisjZGVmaW5lIEFVVE9GU19QUk9UT19WRVJTSU9OCTMKKworLyogUmFuZ2Ugb2YgcHJvdG9jb2wgdmVyc2lvbnMgZGVmaW5lZCAqLworI2RlZmluZSBBVVRPRlNfTUFYX1BST1RPX1ZFUlNJT04JQVVUT0ZTX1BST1RPX1ZFUlNJT04KKyNkZWZpbmUgQVVUT0ZTX01JTl9QUk9UT19WRVJTSU9OCUFVVE9GU19QUk9UT19WRVJTSU9OCisKKy8qCisgKiBBcmNoaXRlY3R1cmVzIHdoZXJlIGJvdGggMzItIGFuZCA2NC1iaXQgYmluYXJpZXMgY2FuIGJlIGV4ZWN1dGVkCisgKiBvbiA2NC1iaXQga2VybmVscyBuZWVkIHRoaXMuICBUaGlzIGtlZXBzIHRoZSBzdHJ1Y3R1cmUgZm9ybWF0CisgKiB1bmlmb3JtLCBhbmQgbWFrZXMgc3VyZSB0aGUgd2FpdF9xdWV1ZV90b2tlbiBpc24ndCB0b28gYmlnIHRvIGJlCisgKiBwYXNzZWQgYmFjayBkb3duIHRvIHRoZSBrZXJuZWwuCisgKgorICogVGhpcyBhc3N1bWVzIHRoYXQgb24gdGhlc2UgYXJjaGl0ZWN0dXJlczoKKyAqIG1vZGUgICAgIDMyIGJpdCAgICA2NCBiaXQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGludCAgICAgIDMyIGJpdCAgICAzMiBiaXQKKyAqIGxvbmcgICAgIDMyIGJpdCAgICA2NCBiaXQKKyAqCisgKiBJZiBzbywgMzItYml0IHVzZXItc3BhY2UgY29kZSBzaG91bGQgYmUgYmFja3dhcmRzIGNvbXBhdGlibGUuCisgKi8KKworI2lmIGRlZmluZWQoX19zcGFyY19fKSB8fCBkZWZpbmVkKF9fbWlwc19fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIFwKKyB8fCBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9fczM5MF9fKQordHlwZWRlZiB1bnNpZ25lZCBpbnQgYXV0b2ZzX3dxdF90OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBhdXRvZnNfd3F0X3Q7CisjZW5kaWYKKworLyogUGFja2V0IHR5cGVzICovCisjZGVmaW5lIGF1dG9mc19wdHlwZV9taXNzaW5nCTAJLyogTWlzc2luZyBlbnRyeSAobW91bnQgcmVxdWVzdCkgKi8KKyNkZWZpbmUgYXV0b2ZzX3B0eXBlX2V4cGlyZQkxCS8qIEV4cGlyZSBlbnRyeSAodW1vdW50IHJlcXVlc3QpICovCisKK3N0cnVjdCBhdXRvZnNfcGFja2V0X2hkciB7CisJaW50IHByb3RvX3ZlcnNpb247CQkvKiBQcm90b2NvbCB2ZXJzaW9uICovCisJaW50IHR5cGU7CQkJLyogVHlwZSBvZiBwYWNrZXQgKi8KK307CisKK3N0cnVjdCBhdXRvZnNfcGFja2V0X21pc3NpbmcgeworCXN0cnVjdCBhdXRvZnNfcGFja2V0X2hkciBoZHI7CisgICAgICAgIGF1dG9mc193cXRfdCB3YWl0X3F1ZXVlX3Rva2VuOworCWludCBsZW47CisJY2hhciBuYW1lW05BTUVfTUFYKzFdOworfTsJCisKKy8qIHYzIGV4cGlyZSAodmlhIGlvY3RsKSAqLworc3RydWN0IGF1dG9mc19wYWNrZXRfZXhwaXJlIHsKKwlzdHJ1Y3QgYXV0b2ZzX3BhY2tldF9oZHIgaGRyOworCWludCBsZW47CisJY2hhciBuYW1lW05BTUVfTUFYKzFdOworfTsKKworI2RlZmluZSBBVVRPRlNfSU9DX1JFQURZICAgICAgX0lPKDB4OTMsMHg2MCkKKyNkZWZpbmUgQVVUT0ZTX0lPQ19GQUlMICAgICAgIF9JTygweDkzLDB4NjEpCisjZGVmaW5lIEFVVE9GU19JT0NfQ0FUQVRPTklDICBfSU8oMHg5MywweDYyKQorI2RlZmluZSBBVVRPRlNfSU9DX1BST1RPVkVSICAgX0lPUigweDkzLDB4NjMsaW50KQorI2RlZmluZSBBVVRPRlNfSU9DX1NFVFRJTUVPVVQzMiBfSU9XUigweDkzLDB4NjQsY29tcGF0X3Vsb25nX3QpCisjZGVmaW5lIEFVVE9GU19JT0NfU0VUVElNRU9VVCBfSU9XUigweDkzLDB4NjQsdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgQVVUT0ZTX0lPQ19FWFBJUkUgICAgIF9JT1IoMHg5MywweDY1LHN0cnVjdCBhdXRvZnNfcGFja2V0X2V4cGlyZSkKKworI2VuZGlmIC8qIF9MSU5VWF9BVVRPX0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdXRvX2ZzNC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2F1dG9fZnM0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YxZGIzNgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdXRvX2ZzNC5oCkBAIC0wLDAgKzEsMTY0IEBACisvKiAtKi0gYyAtKi0KKyAqIGxpbnV4L2luY2x1ZGUvbGludXgvYXV0b19mczQuaAorICoKKyAqIENvcHlyaWdodCAxOTk5LTIwMDAgSmVyZW15IEZpdHpoYXJkaW5nZSA8amVyZW15QGdvb3Aub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwgYW5kIGlzIG1hZGUgYXZhaWxhYmxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIG9yIGF0IHlvdXIKKyAqIG9wdGlvbiwgYW55IGxhdGVyIHZlcnNpb24sIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICovCisKKyNpZm5kZWYgX0xJTlVYX0FVVE9fRlM0X0gKKyNkZWZpbmUgX0xJTlVYX0FVVE9fRlM0X0gKKworLyogSW5jbHVkZSBjb21tb24gdjMgZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2F1dG9fZnMuaD4KKworLyogYXV0b2ZzIHY0IGRlZmluaXRpb25zICovCisjdW5kZWYgQVVUT0ZTX1BST1RPX1ZFUlNJT04KKyN1bmRlZiBBVVRPRlNfTUlOX1BST1RPX1ZFUlNJT04KKyN1bmRlZiBBVVRPRlNfTUFYX1BST1RPX1ZFUlNJT04KKworI2RlZmluZSBBVVRPRlNfUFJPVE9fVkVSU0lPTgkJNQorI2RlZmluZSBBVVRPRlNfTUlOX1BST1RPX1ZFUlNJT04JMworI2RlZmluZSBBVVRPRlNfTUFYX1BST1RPX1ZFUlNJT04JNQorCisjZGVmaW5lIEFVVE9GU19QUk9UT19TVUJWRVJTSU9OCQkxCisKKy8qIE1hc2sgZm9yIGV4cGlyZSBiZWhhdmlvdXIgKi8KKyNkZWZpbmUgQVVUT0ZTX0VYUF9JTU1FRElBVEUJCTEKKyNkZWZpbmUgQVVUT0ZTX0VYUF9MRUFWRVMJCTIKKworI2RlZmluZSBBVVRPRlNfVFlQRV9BTlkJCQkwVQorI2RlZmluZSBBVVRPRlNfVFlQRV9JTkRJUkVDVAkJMVUKKyNkZWZpbmUgQVVUT0ZTX1RZUEVfRElSRUNUCQkyVQorI2RlZmluZSBBVVRPRlNfVFlQRV9PRkZTRVQJCTRVCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2F1dG9mc190eXBlX2luZGlyZWN0KHVuc2lnbmVkIGludCAqdHlwZSkKK3sKKwkqdHlwZSA9IEFVVE9GU19UWVBFX0lORElSRUNUOworCXJldHVybjsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IGF1dG9mc190eXBlX2luZGlyZWN0KHVuc2lnbmVkIGludCB0eXBlKQoreworCXJldHVybiAodHlwZSA9PSBBVVRPRlNfVFlQRV9JTkRJUkVDVCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2F1dG9mc190eXBlX2RpcmVjdCh1bnNpZ25lZCBpbnQgKnR5cGUpCit7CisJKnR5cGUgPSBBVVRPRlNfVFlQRV9ESVJFQ1Q7CisJcmV0dXJuOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgYXV0b2ZzX3R5cGVfZGlyZWN0KHVuc2lnbmVkIGludCB0eXBlKQoreworCXJldHVybiAodHlwZSA9PSBBVVRPRlNfVFlQRV9ESVJFQ1QpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9hdXRvZnNfdHlwZV9vZmZzZXQodW5zaWduZWQgaW50ICp0eXBlKQoreworCSp0eXBlID0gQVVUT0ZTX1RZUEVfT0ZGU0VUOworCXJldHVybjsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IGF1dG9mc190eXBlX29mZnNldCh1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwlyZXR1cm4gKHR5cGUgPT0gQVVUT0ZTX1RZUEVfT0ZGU0VUKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IGF1dG9mc190eXBlX3RyaWdnZXIodW5zaWduZWQgaW50IHR5cGUpCit7CisJcmV0dXJuICh0eXBlID09IEFVVE9GU19UWVBFX0RJUkVDVCB8fCB0eXBlID09IEFVVE9GU19UWVBFX09GRlNFVCk7Cit9CisKKy8qCisgKiBUaGlzIGlzbid0IHJlYWxseSBhIHR5cGUgYXMgd2UgdXNlIGl0IHRvIHNheSAibm8gdHlwZSBzZXQiIHRvCisgKiBpbmRpY2F0ZSB3ZSB3YW50IHRvIHNlYXJjaCBmb3IgImFueSIgbW91bnQgaW4gdGhlCisgKiBhdXRvZnNfZGV2X2lvY3RsX2lzbW91bnRwb2ludCgpIGRldmljZSBpb2N0bCBmdW5jdGlvbi4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfYXV0b2ZzX3R5cGVfYW55KHVuc2lnbmVkIGludCAqdHlwZSkKK3sKKwkqdHlwZSA9IEFVVE9GU19UWVBFX0FOWTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBhdXRvZnNfdHlwZV9hbnkodW5zaWduZWQgaW50IHR5cGUpCit7CisJcmV0dXJuICh0eXBlID09IEFVVE9GU19UWVBFX0FOWSk7Cit9CisKKy8qIERhZW1vbiBub3RpZmljYXRpb24gcGFja2V0IHR5cGVzICovCitlbnVtIGF1dG9mc19ub3RpZnkgeworCU5GWV9OT05FLAorCU5GWV9NT1VOVCwKKwlORllfRVhQSVJFCit9OworCisvKiBLZXJuZWwgcHJvdG9jb2wgdmVyc2lvbiA0IHBhY2tldCB0eXBlcyAqLworCisvKiBFeHBpcmUgZW50cnkgKHVtb3VudCByZXF1ZXN0KSAqLworI2RlZmluZSBhdXRvZnNfcHR5cGVfZXhwaXJlX211bHRpCTIKKworLyogS2VybmVsIHByb3RvY29sIHZlcnNpb24gNSBwYWNrZXQgdHlwZXMgKi8KKworLyogSW5kaXJlY3QgbW91bnQgbWlzc2luZyBhbmQgZXhwaXJlIHJlcXVlc3RzLiAqLworI2RlZmluZSBhdXRvZnNfcHR5cGVfbWlzc2luZ19pbmRpcmVjdAkzCisjZGVmaW5lIGF1dG9mc19wdHlwZV9leHBpcmVfaW5kaXJlY3QJNAorCisvKiBEaXJlY3QgbW91bnQgbWlzc2luZyBhbmQgZXhwaXJlIHJlcXVlc3RzICovCisjZGVmaW5lIGF1dG9mc19wdHlwZV9taXNzaW5nX2RpcmVjdAk1CisjZGVmaW5lIGF1dG9mc19wdHlwZV9leHBpcmVfZGlyZWN0CTYKKworLyogdjQgbXVsdGkgZXhwaXJlICh2aWEgcGlwZSkgKi8KK3N0cnVjdCBhdXRvZnNfcGFja2V0X2V4cGlyZV9tdWx0aSB7CisJc3RydWN0IGF1dG9mc19wYWNrZXRfaGRyIGhkcjsKKyAgICAgICAgYXV0b2ZzX3dxdF90IHdhaXRfcXVldWVfdG9rZW47CisJaW50IGxlbjsKKwljaGFyIG5hbWVbTkFNRV9NQVgrMV07Cit9OworCit1bmlvbiBhdXRvZnNfcGFja2V0X3VuaW9uIHsKKwlzdHJ1Y3QgYXV0b2ZzX3BhY2tldF9oZHIgaGRyOworCXN0cnVjdCBhdXRvZnNfcGFja2V0X21pc3NpbmcgbWlzc2luZzsKKwlzdHJ1Y3QgYXV0b2ZzX3BhY2tldF9leHBpcmUgZXhwaXJlOworCXN0cnVjdCBhdXRvZnNfcGFja2V0X2V4cGlyZV9tdWx0aSBleHBpcmVfbXVsdGk7Cit9OworCisvKiBhdXRvZnMgdjUgY29tbW9uIHBhY2tldCBzdHJ1Y3QgKi8KK3N0cnVjdCBhdXRvZnNfdjVfcGFja2V0IHsKKwlzdHJ1Y3QgYXV0b2ZzX3BhY2tldF9oZHIgaGRyOworCWF1dG9mc193cXRfdCB3YWl0X3F1ZXVlX3Rva2VuOworCV9fdTMyIGRldjsKKwlfX3U2NCBpbm87CisJX191MzIgdWlkOworCV9fdTMyIGdpZDsKKwlfX3UzMiBwaWQ7CisJX191MzIgdGdpZDsKKwlfX3UzMiBsZW47CisJY2hhciBuYW1lW05BTUVfTUFYKzFdOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgYXV0b2ZzX3Y1X3BhY2tldCBhdXRvZnNfcGFja2V0X21pc3NpbmdfaW5kaXJlY3RfdDsKK3R5cGVkZWYgc3RydWN0IGF1dG9mc192NV9wYWNrZXQgYXV0b2ZzX3BhY2tldF9leHBpcmVfaW5kaXJlY3RfdDsKK3R5cGVkZWYgc3RydWN0IGF1dG9mc192NV9wYWNrZXQgYXV0b2ZzX3BhY2tldF9taXNzaW5nX2RpcmVjdF90OwordHlwZWRlZiBzdHJ1Y3QgYXV0b2ZzX3Y1X3BhY2tldCBhdXRvZnNfcGFja2V0X2V4cGlyZV9kaXJlY3RfdDsKKwordW5pb24gYXV0b2ZzX3Y1X3BhY2tldF91bmlvbiB7CisJc3RydWN0IGF1dG9mc19wYWNrZXRfaGRyIGhkcjsKKwlzdHJ1Y3QgYXV0b2ZzX3Y1X3BhY2tldCB2NV9wYWNrZXQ7CisJYXV0b2ZzX3BhY2tldF9taXNzaW5nX2luZGlyZWN0X3QgbWlzc2luZ19pbmRpcmVjdDsKKwlhdXRvZnNfcGFja2V0X2V4cGlyZV9pbmRpcmVjdF90IGV4cGlyZV9pbmRpcmVjdDsKKwlhdXRvZnNfcGFja2V0X21pc3NpbmdfZGlyZWN0X3QgbWlzc2luZ19kaXJlY3Q7CisJYXV0b2ZzX3BhY2tldF9leHBpcmVfZGlyZWN0X3QgZXhwaXJlX2RpcmVjdDsKK307CisKKyNkZWZpbmUgQVVUT0ZTX0lPQ19FWFBJUkVfTVVMVEkJCV9JT1coMHg5MywweDY2LGludCkKKyNkZWZpbmUgQVVUT0ZTX0lPQ19FWFBJUkVfSU5ESVJFQ1QJQVVUT0ZTX0lPQ19FWFBJUkVfTVVMVEkKKyNkZWZpbmUgQVVUT0ZTX0lPQ19FWFBJUkVfRElSRUNUCUFVVE9GU19JT0NfRVhQSVJFX01VTFRJCisjZGVmaW5lIEFVVE9GU19JT0NfUFJPVE9TVUJWRVIJCV9JT1IoMHg5MywweDY3LGludCkKKyNkZWZpbmUgQVVUT0ZTX0lPQ19BU0tVTU9VTlQJCV9JT1IoMHg5MywweDcwLGludCkKKworCisjZW5kaWYgLyogX0xJTlVYX0FVVE9fRlM0X0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdXh2ZWMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9hdXh2ZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmQxM2NmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2F1eHZlYy5oCkBAIC0wLDAgKzEsMzUgQEAKKyNpZm5kZWYgX0xJTlVYX0FVWFZFQ19ICisjZGVmaW5lIF9MSU5VWF9BVVhWRUNfSAorCisjaW5jbHVkZSA8YXNtL2F1eHZlYy5oPgorCisvKiBTeW1ib2xpYyB2YWx1ZXMgZm9yIHRoZSBlbnRyaWVzIGluIHRoZSBhdXhpbGlhcnkgdGFibGUKKyAgIHB1dCBvbiB0aGUgaW5pdGlhbCBzdGFjayAqLworI2RlZmluZSBBVF9OVUxMICAgMAkvKiBlbmQgb2YgdmVjdG9yICovCisjZGVmaW5lIEFUX0lHTk9SRSAxCS8qIGVudHJ5IHNob3VsZCBiZSBpZ25vcmVkICovCisjZGVmaW5lIEFUX0VYRUNGRCAyCS8qIGZpbGUgZGVzY3JpcHRvciBvZiBwcm9ncmFtICovCisjZGVmaW5lIEFUX1BIRFIgICAzCS8qIHByb2dyYW0gaGVhZGVycyBmb3IgcHJvZ3JhbSAqLworI2RlZmluZSBBVF9QSEVOVCAgNAkvKiBzaXplIG9mIHByb2dyYW0gaGVhZGVyIGVudHJ5ICovCisjZGVmaW5lIEFUX1BITlVNICA1CS8qIG51bWJlciBvZiBwcm9ncmFtIGhlYWRlcnMgKi8KKyNkZWZpbmUgQVRfUEFHRVNaIDYJLyogc3lzdGVtIHBhZ2Ugc2l6ZSAqLworI2RlZmluZSBBVF9CQVNFICAgNwkvKiBiYXNlIGFkZHJlc3Mgb2YgaW50ZXJwcmV0ZXIgKi8KKyNkZWZpbmUgQVRfRkxBR1MgIDgJLyogZmxhZ3MgKi8KKyNkZWZpbmUgQVRfRU5UUlkgIDkJLyogZW50cnkgcG9pbnQgb2YgcHJvZ3JhbSAqLworI2RlZmluZSBBVF9OT1RFTEYgMTAJLyogcHJvZ3JhbSBpcyBub3QgRUxGICovCisjZGVmaW5lIEFUX1VJRCAgICAxMQkvKiByZWFsIHVpZCAqLworI2RlZmluZSBBVF9FVUlEICAgMTIJLyogZWZmZWN0aXZlIHVpZCAqLworI2RlZmluZSBBVF9HSUQgICAgMTMJLyogcmVhbCBnaWQgKi8KKyNkZWZpbmUgQVRfRUdJRCAgIDE0CS8qIGVmZmVjdGl2ZSBnaWQgKi8KKyNkZWZpbmUgQVRfUExBVEZPUk0gMTUgIC8qIHN0cmluZyBpZGVudGlmeWluZyBDUFUgZm9yIG9wdGltaXphdGlvbnMgKi8KKyNkZWZpbmUgQVRfSFdDQVAgIDE2ICAgIC8qIGFyY2ggZGVwZW5kZW50IGhpbnRzIGF0IENQVSBjYXBhYmlsaXRpZXMgKi8KKyNkZWZpbmUgQVRfQ0xLVENLIDE3CS8qIGZyZXF1ZW5jeSBhdCB3aGljaCB0aW1lcygpIGluY3JlbWVudHMgKi8KKy8qIEFUXyogdmFsdWVzIDE4IHRocm91Z2ggMjIgYXJlIHJlc2VydmVkICovCisjZGVmaW5lIEFUX1NFQ1VSRSAyMyAgIC8qIHNlY3VyZSBtb2RlIGJvb2xlYW4gKi8KKyNkZWZpbmUgQVRfQkFTRV9QTEFURk9STSAyNAkvKiBzdHJpbmcgaWRlbnRpZnlpbmcgcmVhbCBwbGF0Zm9ybSwgbWF5CisJCQkJICogZGlmZmVyIGZyb20gQVRfUExBVEZPUk0uICovCisjZGVmaW5lIEFUX1JBTkRPTSAyNQkvKiBhZGRyZXNzIG9mIDE2IHJhbmRvbSBieXRlcyAqLworCisjZGVmaW5lIEFUX0VYRUNGTiAgMzEJLyogZmlsZW5hbWUgb2YgcHJvZ3JhbSAqLworCisKKyNlbmRpZiAvKiBfTElOVVhfQVVYVkVDX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9heDI1LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYXgyNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YzExZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYXgyNS5oCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogVGhlc2UgYXJlIHRoZSBwdWJsaWMgZWxlbWVudHMgb2YgdGhlIExpbnV4IGtlcm5lbCBBWC4yNSBjb2RlLiBBIHNpbWlsYXIKKyAqIGZpbGUgbmV0cm9tLmggZXhpc3RzIGZvciB0aGUgTkVUL1JPTSBwcm90b2NvbC4KKyAqLworCisjaWZuZGVmCUFYMjVfS0VSTkVMX0gKKyNkZWZpbmUJQVgyNV9LRVJORUxfSAorCisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisKKyNkZWZpbmUgQVgyNV9NVFUJMjU2CisjZGVmaW5lIEFYMjVfTUFYX0RJR0lTICA4CisKKyNkZWZpbmUgQVgyNV9XSU5ET1cJMQorI2RlZmluZSBBWDI1X1QxCQkyCisjZGVmaW5lIEFYMjVfTjIJCTMKKyNkZWZpbmUgQVgyNV9UMwkJNAorI2RlZmluZSBBWDI1X1QyCQk1CisjZGVmaW5lCUFYMjVfQkFDS09GRgk2CisjZGVmaW5lCUFYMjVfRVhUU0VRCTcKKyNkZWZpbmUJQVgyNV9QSURJTkNMCTgKKyNkZWZpbmUgQVgyNV9JRExFCTkKKyNkZWZpbmUgQVgyNV9QQUNMRU4JMTAKKyNkZWZpbmUgQVgyNV9JQU1ESUdJCTEyCisKKyNkZWZpbmUgQVgyNV9LSUxMCTk5CisKKyNkZWZpbmUgU0lPQ0FYMjVHRVRVSUQJCShTSU9DUFJPVE9QUklWQVRFKzApCisjZGVmaW5lIFNJT0NBWDI1QUREVUlECQkoU0lPQ1BST1RPUFJJVkFURSsxKQorI2RlZmluZSBTSU9DQVgyNURFTFVJRAkJKFNJT0NQUk9UT1BSSVZBVEUrMikKKyNkZWZpbmUgU0lPQ0FYMjVOT1VJRAkJKFNJT0NQUk9UT1BSSVZBVEUrMykKKyNkZWZpbmUgU0lPQ0FYMjVPUFRSVAkJKFNJT0NQUk9UT1BSSVZBVEUrNykKKyNkZWZpbmUgU0lPQ0FYMjVDVExDT04JCShTSU9DUFJPVE9QUklWQVRFKzgpCisjZGVmaW5lIFNJT0NBWDI1R0VUSU5GT09MRAkoU0lPQ1BST1RPUFJJVkFURSs5KQorI2RlZmluZSBTSU9DQVgyNUFEREZXRAkJKFNJT0NQUk9UT1BSSVZBVEUrMTApCisjZGVmaW5lIFNJT0NBWDI1REVMRldECQkoU0lPQ1BST1RPUFJJVkFURSsxMSkKKyNkZWZpbmUgU0lPQ0FYMjVERVZDVEwgICAgICAgICAgKFNJT0NQUk9UT1BSSVZBVEUrMTIpCisjZGVmaW5lIFNJT0NBWDI1R0VUSU5GTyAgICAgICAgIChTSU9DUFJPVE9QUklWQVRFKzEzKQorCisjZGVmaW5lIEFYMjVfU0VUX1JUX0lQTU9ERQkyCisKKyNkZWZpbmUgQVgyNV9OT1VJRF9ERUZBVUxUCTAKKyNkZWZpbmUgQVgyNV9OT1VJRF9CTE9DSwkxCisKK3R5cGVkZWYgc3RydWN0IHsKKwljaGFyCQlheDI1X2NhbGxbN107CS8qIDYgY2FsbCArIFNTSUQgKHNoaWZ0ZWQgYXNjaWkhKSAqLworfSBheDI1X2FkZHJlc3M7CisKK3N0cnVjdCBzb2NrYWRkcl9heDI1IHsKKwlzYV9mYW1pbHlfdAlzYXgyNV9mYW1pbHk7CisJYXgyNV9hZGRyZXNzCXNheDI1X2NhbGw7CisJaW50CQlzYXgyNV9uZGlnaXM7CisJLyogRGlnaXBlYXRlciBheDI1X2FkZHJlc3Mgc2V0cyBmb2xsb3cgKi8KK307CisKKyNkZWZpbmUgc2F4MjVfdWlkCXNheDI1X25kaWdpcworCitzdHJ1Y3QgZnVsbF9zb2NrYWRkcl9heDI1IHsKKwlzdHJ1Y3Qgc29ja2FkZHJfYXgyNSBmc2FfYXgyNTsKKwlheDI1X2FkZHJlc3MJZnNhX2RpZ2lwZWF0ZXJbQVgyNV9NQVhfRElHSVNdOworfTsKKworc3RydWN0IGF4MjVfcm91dGVzX3N0cnVjdCB7CisJYXgyNV9hZGRyZXNzCXBvcnRfYWRkcjsKKwlheDI1X2FkZHJlc3MJZGVzdF9hZGRyOworCXVuc2lnbmVkIGNoYXIJZGlnaV9jb3VudDsKKwlheDI1X2FkZHJlc3MJZGlnaV9hZGRyW0FYMjVfTUFYX0RJR0lTXTsKK307CisKK3N0cnVjdCBheDI1X3JvdXRlX29wdF9zdHJ1Y3QgeworCWF4MjVfYWRkcmVzcwlwb3J0X2FkZHI7CisJYXgyNV9hZGRyZXNzCWRlc3RfYWRkcjsKKwlpbnQJCWNtZDsKKwlpbnQJCWFyZzsKK307CisKK3N0cnVjdCBheDI1X2N0bF9zdHJ1Y3QgeworICAgICAgICBheDI1X2FkZHJlc3MgICAgICAgICAgICBwb3J0X2FkZHI7CisgICAgICAgIGF4MjVfYWRkcmVzcyAgICAgICAgICAgIHNvdXJjZV9hZGRyOworICAgICAgICBheDI1X2FkZHJlc3MgICAgICAgICAgICBkZXN0X2FkZHI7CisgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIGNtZDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyAgICAgICAgICAgYXJnOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICBkaWdpX2NvdW50OworICAgICAgICBheDI1X2FkZHJlc3MgICAgICAgICAgICBkaWdpX2FkZHJbQVgyNV9NQVhfRElHSVNdOworfTsKKworLyogdGhpcyB3aWxsIGdvIGF3YXkuIFBsZWFzZSBkbyBub3QgZXhwb3J0IHRvIHVzZXIgbGFuZCAqLworc3RydWN0IGF4MjVfaW5mb19zdHJ1Y3RfZGVwcmVjYXRlZCB7CisJdW5zaWduZWQgaW50CW4yLCBuMmNvdW50OworCXVuc2lnbmVkIGludAl0MSwgdDF0aW1lcjsKKwl1bnNpZ25lZCBpbnQJdDIsIHQydGltZXI7CisJdW5zaWduZWQgaW50CXQzLCB0M3RpbWVyOworCXVuc2lnbmVkIGludAlpZGxlLCBpZGxldGltZXI7CisJdW5zaWduZWQgaW50CXN0YXRlOworCXVuc2lnbmVkIGludAlyY3ZfcSwgc25kX3E7Cit9OworCitzdHJ1Y3QgYXgyNV9pbmZvX3N0cnVjdCB7CisJdW5zaWduZWQgaW50CW4yLCBuMmNvdW50OworCXVuc2lnbmVkIGludAl0MSwgdDF0aW1lcjsKKwl1bnNpZ25lZCBpbnQJdDIsIHQydGltZXI7CisJdW5zaWduZWQgaW50CXQzLCB0M3RpbWVyOworCXVuc2lnbmVkIGludAlpZGxlLCBpZGxldGltZXI7CisJdW5zaWduZWQgaW50CXN0YXRlOworCXVuc2lnbmVkIGludAlyY3ZfcSwgc25kX3E7CisJdW5zaWduZWQgaW50CXZzLCB2ciwgdmEsIHZzX21heDsKKwl1bnNpZ25lZCBpbnQJcGFjbGVuOworCXVuc2lnbmVkIGludAl3aW5kb3c7Cit9OworCitzdHJ1Y3QgYXgyNV9md2Rfc3RydWN0IHsKKwlheDI1X2FkZHJlc3MJcG9ydF9mcm9tOworCWF4MjVfYWRkcmVzcwlwb3J0X3RvOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYjFsbGkuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9iMWxsaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxM2Y3MTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYjFsbGkuaApAQCAtMCwwICsxLDczIEBACisvKiAkSWQ6IGIxbGxpLmgsdiAxLjguOC4zIDIwMDEvMDkvMjMgMjI6MjU6MDUga2FpIEV4cCAkCisgKgorICogSVNETiBsb3dsZXZlbC1tb2R1bGUgZm9yIEFWTSBCMS1jYXJkLgorICoKKyAqIENvcHlyaWdodCAxOTk2IGJ5IENhcnN0ZW4gUGFldGggKGNhbGxlQGNhbGxlLmluLWJlcmxpbi5kZSkKKyAqCisgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCisgKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICoKKyAqLworCisjaWZuZGVmIF9CMUxMSV9IXworI2RlZmluZSBfQjFMTElfSF8KKy8qCisgKiBzdHJ1Y3QgZm9yIGxvYWRpbmcgdDQgZmlsZSAKKyAqLwordHlwZWRlZiBzdHJ1Y3QgYXZtYjFfdDRmaWxlIHsKKwlpbnQgbGVuOworCXVuc2lnbmVkIGNoYXIgKmRhdGE7Cit9IGF2bWIxX3Q0ZmlsZTsKKwordHlwZWRlZiBzdHJ1Y3QgYXZtYjFfbG9hZGRlZiB7CisJaW50IGNvbnRyOworCWF2bWIxX3Q0ZmlsZSB0NGZpbGU7Cit9IGF2bWIxX2xvYWRkZWY7CisKK3R5cGVkZWYgc3RydWN0IGF2bWIxX2xvYWRhbmRjb25maWdkZWYgeworCWludCBjb250cjsKKwlhdm1iMV90NGZpbGUgdDRmaWxlOworICAgICAgICBhdm1iMV90NGZpbGUgdDRjb25maWc7IAorfSBhdm1iMV9sb2FkYW5kY29uZmlnZGVmOworCit0eXBlZGVmIHN0cnVjdCBhdm1iMV9yZXNldGRlZiB7CisJaW50IGNvbnRyOworfSBhdm1iMV9yZXNldGRlZjsKKwordHlwZWRlZiBzdHJ1Y3QgYXZtYjFfZ2V0ZGVmIHsKKwlpbnQgY29udHI7CisJaW50IGNhcmR0eXBlOworCWludCBjYXJkc3RhdGU7Cit9IGF2bWIxX2dldGRlZjsKKworLyoKKyAqIHN0cnVjdCBmb3IgYWRkaW5nIG5ldyBjYXJkcyAKKyAqLwordHlwZWRlZiBzdHJ1Y3QgYXZtYjFfY2FyZGRlZiB7CisJaW50IHBvcnQ7CisJaW50IGlycTsKK30gYXZtYjFfY2FyZGRlZjsKKworI2RlZmluZSBBVk1fQ0FSRFRZUEVfQjEJCTAKKyNkZWZpbmUgQVZNX0NBUkRUWVBFX1QxCQkxCisjZGVmaW5lIEFWTV9DQVJEVFlQRV9NMQkJMgorI2RlZmluZSBBVk1fQ0FSRFRZUEVfTTIJCTMKKwordHlwZWRlZiBzdHJ1Y3QgYXZtYjFfZXh0Y2FyZGRlZiB7CisJaW50IHBvcnQ7CisJaW50IGlycTsKKyAgICAgICAgaW50IGNhcmR0eXBlOworICAgICAgICBpbnQgY2FyZG5yOyAgLyogZm9yIEhFTUEvVDEgKi8KK30gYXZtYjFfZXh0Y2FyZGRlZjsKKworI2RlZmluZQlBVk1CMV9MT0FECQkwCS8qIGxvYWQgaW1hZ2UgdG8gY2FyZCAqLworI2RlZmluZSBBVk1CMV9BRERDQVJECQkxCS8qIGFkZCBhIG5ldyBjYXJkIC0gT0JTT0xFVEUgKi8KKyNkZWZpbmUgQVZNQjFfUkVTRVRDQVJECQkyCS8qIHJlc2V0IGEgY2FyZCAqLworI2RlZmluZQlBVk1CMV9MT0FEX0FORF9DT05GSUcJMwkvKiBsb2FkIGltYWdlIGFuZCBjb25maWcgdG8gY2FyZCAqLworI2RlZmluZQlBVk1CMV9BRERDQVJEX1dJVEhfVFlQRQk0CS8qIGFkZCBhIG5ldyBjYXJkLCB3aXRoIGNhcmR0eXBlICovCisjZGVmaW5lIEFWTUIxX0dFVF9DQVJESU5GTwk1CS8qIGdldCBjYXJkdHlwZSAqLworI2RlZmluZSBBVk1CMV9SRU1PVkVDQVJECTYJLyogcmVtb3ZlIGEgY2FyZCAtIE9CU09MRVRFICovCisKKyNkZWZpbmUJQVZNQjFfUkVHSVNURVJDQVJEX0lTX09CU09MRVRFCisKKyNlbmRpZgkJCQkvKiBfQjFMTElfSF8gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9iYXljb20uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9iYXljb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTI0OWUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2JheWNvbS5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBUaGUgTGludXggQkFZQ09NIGRyaXZlciBmb3IgdGhlIEJheWNvbSBzZXJpYWwgMTIwMCBiYXVkIG1vZGVtCisgKiBhbmQgdGhlIHBhcmFsbGVsIDk2MDAgYmF1ZCBtb2RlbQorICogKEMpIDE5OTctMTk5OCBieSBUaG9tYXMgU2FpbGVyLCBIQjlKTlgvQUU0V0EKKyAqLworCisjaWZuZGVmIF9CQVlDT01fSAorI2RlZmluZSBfQkFZQ09NX0gKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qCisgKiBzdHJ1Y3RzIGZvciB0aGUgSU9DVEwgY29tbWFuZHMKKyAqLworCitzdHJ1Y3QgYmF5Y29tX2RlYnVnX2RhdGEgeworCXVuc2lnbmVkIGxvbmcgZGVidWcxOworCXVuc2lnbmVkIGxvbmcgZGVidWcyOworCWxvbmcgZGVidWczOworfTsKKworc3RydWN0IGJheWNvbV9pb2N0bCB7CisJaW50IGNtZDsKKwl1bmlvbiB7CisJCXN0cnVjdCBiYXljb21fZGVidWdfZGF0YSBkYmc7CisJfSBkYXRhOworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIGlvY3RsIHZhbHVlcyBjaGFuZ2UgZm9yIGJheWNvbQorICovCisjZGVmaW5lIEJBWUNPTUNUTF9HRVRERUJVRyAgICAgICAweDkyCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNlbmRpZiAvKiBfQkFZQ09NX0ggKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYmZzX2ZzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYmZzX2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwYjM1NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9iZnNfZnMuaApAQCAtMCwwICsxLDgxIEBACisvKgorICoJaW5jbHVkZS9saW51eC9iZnNfZnMuaCAtIEJGUyBkYXRhIHN0cnVjdHVyZXMgb24gZGlzay4KKyAqCUNvcHlyaWdodCAoQykgMTk5OSBUaWdyYW4gQWl2YXppYW4gPHRpZ3JhbkB2ZXJpdGFzLmNvbT4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9CRlNfRlNfSAorI2RlZmluZSBfTElOVVhfQkZTX0ZTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgQkZTX0JTSVpFX0JJVFMJCTkKKyNkZWZpbmUgQkZTX0JTSVpFCQkoMTw8QkZTX0JTSVpFX0JJVFMpCisKKyNkZWZpbmUgQkZTX01BR0lDCQkweDFCQURGQUNFCisjZGVmaW5lIEJGU19ST09UX0lOTwkJMgorI2RlZmluZSBCRlNfSU5PREVTX1BFUl9CTE9DSwk4CisKKy8qIFNWUjQgdm5vZGUgdHlwZSB2YWx1ZXMgKGJmc19pbm9kZS0+aV92dHlwZSkgKi8KKyNkZWZpbmUgQkZTX1ZESVIgMkwKKyNkZWZpbmUgQkZTX1ZSRUcgMUwKKworLyogQkZTIGlub2RlIGxheW91dCBvbiBkaXNrICovCitzdHJ1Y3QgYmZzX2lub2RlIHsKKwlfX2xlMTYgaV9pbm87CisJX191MTYgaV91bnVzZWQ7CisJX19sZTMyIGlfc2Jsb2NrOworCV9fbGUzMiBpX2VibG9jazsKKwlfX2xlMzIgaV9lb2Zmc2V0OworCV9fbGUzMiBpX3Z0eXBlOworCV9fbGUzMiBpX21vZGU7CisJX19sZTMyIGlfdWlkOworCV9fbGUzMiBpX2dpZDsKKwlfX2xlMzIgaV9ubGluazsKKwlfX2xlMzIgaV9hdGltZTsKKwlfX2xlMzIgaV9tdGltZTsKKwlfX2xlMzIgaV9jdGltZTsKKwlfX3UzMiBpX3BhZGRpbmdbNF07Cit9OworCisjZGVmaW5lIEJGU19OQU1FTEVOCQkxNAkKKyNkZWZpbmUgQkZTX0RJUkVOVF9TSVpFCQkxNgorI2RlZmluZSBCRlNfRElSU19QRVJfQkxPQ0sJMzIKKworc3RydWN0IGJmc19kaXJlbnQgeworCV9fbGUxNiBpbm87CisJY2hhciBuYW1lW0JGU19OQU1FTEVOXTsKK307CisKKy8qIEJGUyBzdXBlcmJsb2NrIGxheW91dCBvbiBkaXNrICovCitzdHJ1Y3QgYmZzX3N1cGVyX2Jsb2NrIHsKKwlfX2xlMzIgc19tYWdpYzsKKwlfX2xlMzIgc19zdGFydDsKKwlfX2xlMzIgc19lbmQ7CisJX19sZTMyIHNfZnJvbTsKKwlfX2xlMzIgc190bzsKKwlfX3MzMiBzX2Jmcm9tOworCV9fczMyIHNfYnRvOworCWNoYXIgIHNfZnNuYW1lWzZdOworCWNoYXIgIHNfdm9sdW1lWzZdOworCV9fdTMyIHNfcGFkZGluZ1sxMThdOworfTsKKworCisjZGVmaW5lIEJGU19PRkYySU5PKG9mZnNldCkgXAorICAgICAgICAoKCgob2Zmc2V0KSAtIEJGU19CU0laRSkgLyBzaXplb2Yoc3RydWN0IGJmc19pbm9kZSkpICsgQkZTX1JPT1RfSU5PKQorCisjZGVmaW5lIEJGU19JTk8yT0ZGKGlubykgXAorCSgoX191MzIpKCgoaW5vKSAtIEJGU19ST09UX0lOTykgKiBzaXplb2Yoc3RydWN0IGJmc19pbm9kZSkpICsgQkZTX0JTSVpFKQorI2RlZmluZSBCRlNfTlpGSUxFU0laRShpcCkgXAorICAgICAgICAoKGxlMzJfdG9fY3B1KChpcCktPmlfZW9mZnNldCkgKyAxKSAtICBsZTMyX3RvX2NwdSgoaXApLT5pX3NibG9jaykgKiBCRlNfQlNJWkUpCisKKyNkZWZpbmUgQkZTX0ZJTEVTSVpFKGlwKSBcCisgICAgICAgICgoaXApLT5pX3NibG9jayA9PSAwID8gMCA6IEJGU19OWkZJTEVTSVpFKGlwKSkKKworI2RlZmluZSBCRlNfRklMRUJMT0NLUyhpcCkgXAorICAgICAgICAoKGlwKS0+aV9zYmxvY2sgPT0gMCA/IDAgOiAobGUzMl90b19jcHUoKGlwKS0+aV9lYmxvY2spICsgMSkgLSAgbGUzMl90b19jcHUoKGlwKS0+aV9zYmxvY2spKQorI2RlZmluZSBCRlNfVU5DTEVBTihiZnNfc2IsIHNiKQlcCisJKChsZTMyX3RvX2NwdShiZnNfc2ItPnNfZnJvbSkgIT0gLTEpICYmIChsZTMyX3RvX2NwdShiZnNfc2ItPnNfdG8pICE9IC0xKSAmJiAhKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkKKworCisjZW5kaWYJLyogX0xJTlVYX0JGU19GU19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYmluZm10cy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDE2Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaApAQCAtMCwwICsxLDIwIEBACisjaWZuZGVmIF9MSU5VWF9CSU5GTVRTX0gKKyNkZWZpbmUgX0xJTlVYX0JJTkZNVFNfSAorCisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgorCitzdHJ1Y3QgcHRfcmVnczsKKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgbWF4aW11bSBsZW5ndGggYW5kIG1heGltdW0gbnVtYmVyIG9mIHN0cmluZ3MgcGFzc2VkIHRvIHRoZQorICogZXhlY3ZlKCkgc3lzdGVtIGNhbGwuICBNQVhfQVJHX1NUUkxFTiBpcyBlc3NlbnRpYWxseSByYW5kb20gYnV0IHNlcnZlcyB0bworICogcHJldmVudCB0aGUga2VybmVsIGZyb20gYmVpbmcgdW5kdWx5IGltcGFjdGVkIGJ5IG1pc2FkZHJlc3NlZCBwb2ludGVycy4KKyAqIE1BWF9BUkdfU1RSSU5HUyBpcyBjaG9zZW4gdG8gZml0IGluIGEgc2lnbmVkIDMyLWJpdCBpbnRlZ2VyLgorICovCisjZGVmaW5lIE1BWF9BUkdfU1RSTEVOIChQQUdFX1NJWkUgKiAzMikKKyNkZWZpbmUgTUFYX0FSR19TVFJJTkdTIDB4N0ZGRkZGRkYKKworLyogc2l6ZW9mKGxpbnV4X2JpbnBybS0+YnVmKSAqLworI2RlZmluZSBCSU5QUk1fQlVGX1NJWkUgMTI4CisKKyNlbmRpZiAvKiBfTElOVVhfQklORk1UU19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVmZjFjNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaApAQCAtMCwwICsxLDE5NSBAQAorLyoKKyAqIEJsb2NrIGRhdGEgdHlwZXMgYW5kIGNvbnN0YW50cy4gIERpcmVjdGx5IGluY2x1ZGUgdGhpcyBmaWxlIG9ubHkgdG8KKyAqIGJyZWFrIGluY2x1ZGUgZGVwZW5kZW5jeSBsb29wLgorICovCisjaWZuZGVmIF9fTElOVVhfQkxLX1RZUEVTX0gKKyNkZWZpbmUgX19MSU5VWF9CTEtfVFlQRVNfSAorCisjaWZkZWYgQ09ORklHX0JMT0NLCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgYmlvX3NldDsKK3N0cnVjdCBiaW87CitzdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkOworc3RydWN0IHBhZ2U7CitzdHJ1Y3QgYmxvY2tfZGV2aWNlOwordHlwZWRlZiB2b2lkIChiaW9fZW5kX2lvX3QpIChzdHJ1Y3QgYmlvICosIGludCk7Cit0eXBlZGVmIHZvaWQgKGJpb19kZXN0cnVjdG9yX3QpIChzdHJ1Y3QgYmlvICopOworCisvKgorICogd2FzIHVuc2lnbmVkIHNob3J0LCBidXQgd2UgbWlnaHQgYXMgd2VsbCBiZSByZWFkeSBmb3IgPiA2NGtCIEkvTyBwYWdlcworICovCitzdHJ1Y3QgYmlvX3ZlYyB7CisJc3RydWN0IHBhZ2UJKmJ2X3BhZ2U7CisJdW5zaWduZWQgaW50CWJ2X2xlbjsKKwl1bnNpZ25lZCBpbnQJYnZfb2Zmc2V0OworfTsKKworLyoKKyAqIG1haW4gdW5pdCBvZiBJL08gZm9yIHRoZSBibG9jayBsYXllciBhbmQgbG93ZXIgbGF5ZXJzIChpZSBkcml2ZXJzIGFuZAorICogc3RhY2tpbmcgZHJpdmVycykKKyAqLworc3RydWN0IGJpbyB7CisJc2VjdG9yX3QJCWJpX3NlY3RvcjsJLyogZGV2aWNlIGFkZHJlc3MgaW4gNTEyIGJ5dGUKKwkJCQkJCSAgIHNlY3RvcnMgKi8KKwlzdHJ1Y3QgYmlvCQkqYmlfbmV4dDsJLyogcmVxdWVzdCBxdWV1ZSBsaW5rICovCisJc3RydWN0IGJsb2NrX2RldmljZQkqYmlfYmRldjsKKwl1bnNpZ25lZCBsb25nCQliaV9mbGFnczsJLyogc3RhdHVzLCBjb21tYW5kLCBldGMgKi8KKwl1bnNpZ25lZCBsb25nCQliaV9ydzsJCS8qIGJvdHRvbSBiaXRzIFJFQUQvV1JJVEUsCisJCQkJCQkgKiB0b3AgYml0cyBwcmlvcml0eQorCQkJCQkJICovCisKKwl1bnNpZ25lZCBzaG9ydAkJYmlfdmNudDsJLyogaG93IG1hbnkgYmlvX3ZlYydzICovCisJdW5zaWduZWQgc2hvcnQJCWJpX2lkeDsJCS8qIGN1cnJlbnQgaW5kZXggaW50byBidmxfdmVjICovCisKKwkvKiBOdW1iZXIgb2Ygc2VnbWVudHMgaW4gdGhpcyBCSU8gYWZ0ZXIKKwkgKiBwaHlzaWNhbCBhZGRyZXNzIGNvYWxlc2NpbmcgaXMgcGVyZm9ybWVkLgorCSAqLworCXVuc2lnbmVkIGludAkJYmlfcGh5c19zZWdtZW50czsKKworCXVuc2lnbmVkIGludAkJYmlfc2l6ZTsJLyogcmVzaWR1YWwgSS9PIGNvdW50ICovCisKKwkvKgorCSAqIFRvIGtlZXAgdHJhY2sgb2YgdGhlIG1heCBzZWdtZW50IHNpemUsIHdlIGFjY291bnQgZm9yIHRoZQorCSAqIHNpemVzIG9mIHRoZSBmaXJzdCBhbmQgbGFzdCBtZXJnZWFibGUgc2VnbWVudHMgaW4gdGhpcyBiaW8uCisJICovCisJdW5zaWduZWQgaW50CQliaV9zZWdfZnJvbnRfc2l6ZTsKKwl1bnNpZ25lZCBpbnQJCWJpX3NlZ19iYWNrX3NpemU7CisKKwl1bnNpZ25lZCBpbnQJCWJpX21heF92ZWNzOwkvKiBtYXggYnZsX3ZlY3Mgd2UgY2FuIGhvbGQgKi8KKworCXVuc2lnbmVkIGludAkJYmlfY29tcF9jcHU7CS8qIGNvbXBsZXRpb24gQ1BVICovCisKKwlhdG9taWNfdAkJYmlfY250OwkJLyogcGluIGNvdW50ICovCisKKwlzdHJ1Y3QgYmlvX3ZlYwkJKmJpX2lvX3ZlYzsJLyogdGhlIGFjdHVhbCB2ZWMgbGlzdCAqLworCisJYmlvX2VuZF9pb190CQkqYmlfZW5kX2lvOworCisJdm9pZAkJCSpiaV9wcml2YXRlOworI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSU5URUdSSVRZKQorCXN0cnVjdCBiaW9faW50ZWdyaXR5X3BheWxvYWQgKmJpX2ludGVncml0eTsgIC8qIGRhdGEgaW50ZWdyaXR5ICovCisjZW5kaWYKKworCWJpb19kZXN0cnVjdG9yX3QJKmJpX2Rlc3RydWN0b3I7CS8qIGRlc3RydWN0b3IgKi8KKworCS8qCisJICogV2UgY2FuIF9faW5saW5lX18gYSBudW1iZXIgb2YgdmVjcyBhdCB0aGUgZW5kIG9mIHRoZSBiaW8sIHRvIGF2b2lkCisJICogZG91YmxlIGFsbG9jYXRpb25zIGZvciBhIHNtYWxsIG51bWJlciBvZiBiaW9fdmVjcy4gVGhpcyBtZW1iZXIKKwkgKiBNVVNUIG9idmlvdXNseSBiZSBrZXB0IGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgYmlvLgorCSAqLworCXN0cnVjdCBiaW9fdmVjCQliaV9pbmxpbmVfdmVjc1swXTsKK307CisKKy8qCisgKiBiaW8gZmxhZ3MKKyAqLworI2RlZmluZSBCSU9fVVBUT0RBVEUJMAkvKiBvayBhZnRlciBJL08gY29tcGxldGlvbiAqLworI2RlZmluZSBCSU9fUldfQkxPQ0sJMQkvKiBSV19BSEVBRCBzZXQsIGFuZCByZWFkL3dyaXRlIHdvdWxkIGJsb2NrICovCisjZGVmaW5lIEJJT19FT0YJCTIJLyogb3V0LW91dC1ib3VuZHMgZXJyb3IgKi8KKyNkZWZpbmUgQklPX1NFR19WQUxJRAkzCS8qIGJpX3BoeXNfc2VnbWVudHMgdmFsaWQgKi8KKyNkZWZpbmUgQklPX0NMT05FRAk0CS8qIGRvZXNuJ3Qgb3duIGRhdGEgKi8KKyNkZWZpbmUgQklPX0JPVU5DRUQJNQkvKiBiaW8gaXMgYSBib3VuY2UgYmlvICovCisjZGVmaW5lIEJJT19VU0VSX01BUFBFRCA2CS8qIGNvbnRhaW5zIHVzZXIgcGFnZXMgKi8KKyNkZWZpbmUgQklPX0VPUE5PVFNVUFAJNwkvKiBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lIEJJT19DUFVfQUZGSU5FCTgJLyogY29tcGxldGUgYmlvIG9uIHNhbWUgQ1BVIGFzIHN1Ym1pdHRlZCAqLworI2RlZmluZSBCSU9fTlVMTF9NQVBQRUQgOQkvKiBjb250YWlucyBpbnZhbGlkIHVzZXIgcGFnZXMgKi8KKyNkZWZpbmUgQklPX0ZTX0lOVEVHUklUWSAxMAkvKiBmcyBvd25zIGludGVncml0eSBkYXRhLCBub3QgYmxvY2sgbGF5ZXIgKi8KKyNkZWZpbmUgQklPX1FVSUVUCTExCS8qIE1ha2UgQklPIFF1aWV0ICovCisjZGVmaW5lIEJJT19NQVBQRURfSU5URUdSSVRZIDEyLyogaW50ZWdyaXR5IG1ldGFkYXRhIGhhcyBiZWVuIHJlbWFwcGVkICovCisjZGVmaW5lIGJpb19mbGFnZ2VkKGJpbywgZmxhZykJKChiaW8pLT5iaV9mbGFncyAmICgxIDw8IChmbGFnKSkpCisKKy8qCisgKiB0b3AgNCBiaXRzIG9mIGJpbyBmbGFncyBpbmRpY2F0ZSB0aGUgcG9vbCB0aGlzIGJpbyBjYW1lIGZyb20KKyAqLworI2RlZmluZSBCSU9fUE9PTF9CSVRTCQkoNCkKKyNkZWZpbmUgQklPX1BPT0xfTk9ORQkJKCgxVUwgPDwgQklPX1BPT0xfQklUUykgLSAxKQorI2RlZmluZSBCSU9fUE9PTF9PRkZTRVQJCShCSVRTX1BFUl9MT05HIC0gQklPX1BPT0xfQklUUykKKyNkZWZpbmUgQklPX1BPT0xfTUFTSwkJKDFVTCA8PCBCSU9fUE9PTF9PRkZTRVQpCisjZGVmaW5lIEJJT19QT09MX0lEWChiaW8pCSgoYmlvKS0+YmlfZmxhZ3MgPj4gQklPX1BPT0xfT0ZGU0VUKQorCisjZW5kaWYgLyogQ09ORklHX0JMT0NLICovCisKKy8qCisgKiBSZXF1ZXN0IGZsYWdzLiAgRm9yIHVzZSBpbiB0aGUgY21kX2ZsYWdzIGZpZWxkIG9mIHN0cnVjdCByZXF1ZXN0LCBhbmQgaW4KKyAqIGJpX3J3IG9mIHN0cnVjdCBiaW8uICBOb3RlIHRoYXQgc29tZSBmbGFncyBhcmUgb25seSB2YWxpZCBpbiBlaXRoZXIgb25lLgorICovCitlbnVtIHJxX2ZsYWdfYml0cyB7CisJLyogY29tbW9uIGZsYWdzICovCisJX19SRVFfV1JJVEUsCQkvKiBub3Qgc2V0LCByZWFkLiBzZXQsIHdyaXRlICovCisJX19SRVFfRkFJTEZBU1RfREVWLAkvKiBubyBkcml2ZXIgcmV0cmllcyBvZiBkZXZpY2UgZXJyb3JzICovCisJX19SRVFfRkFJTEZBU1RfVFJBTlNQT1JULCAvKiBubyBkcml2ZXIgcmV0cmllcyBvZiB0cmFuc3BvcnQgZXJyb3JzICovCisJX19SRVFfRkFJTEZBU1RfRFJJVkVSLAkvKiBubyBkcml2ZXIgcmV0cmllcyBvZiBkcml2ZXIgZXJyb3JzICovCisKKwlfX1JFUV9TWU5DLAkJLyogcmVxdWVzdCBpcyBzeW5jIChzeW5jIHdyaXRlIG9yIHJlYWQpICovCisJX19SRVFfTUVUQSwJCS8qIG1ldGFkYXRhIGlvIHJlcXVlc3QgKi8KKwlfX1JFUV9ESVNDQVJELAkJLyogcmVxdWVzdCB0byBkaXNjYXJkIHNlY3RvcnMgKi8KKwlfX1JFUV9OT0lETEUsCQkvKiBkb24ndCBhbnRpY2lwYXRlIG1vcmUgSU8gYWZ0ZXIgdGhpcyBvbmUgKi8KKworCS8qIGJpbyBvbmx5IGZsYWdzICovCisJX19SRVFfVU5QTFVHLAkJLyogdW5wbHVnIHRoZSBpbW1lZGlhdGVseSBhZnRlciBzdWJtaXNzaW9uICovCisJX19SRVFfUkFIRUFELAkJLyogcmVhZCBhaGVhZCwgY2FuIGZhaWwgYW55dGltZSAqLworCV9fUkVRX1RIUk9UVExFRCwJLyogVGhpcyBiaW8gaGFzIGFscmVhZHkgYmVlbiBzdWJqZWN0ZWQgdG8KKwkJCQkgKiB0aHJvdHRsaW5nIHJ1bGVzLiBEb24ndCBkbyBpdCBhZ2Fpbi4gKi8KKworCS8qIHJlcXVlc3Qgb25seSBmbGFncyAqLworCV9fUkVRX1NPUlRFRCwJCS8qIGVsZXZhdG9yIGtub3dzIGFib3V0IHRoaXMgcmVxdWVzdCAqLworCV9fUkVRX1NPRlRCQVJSSUVSLAkvKiBtYXkgbm90IGJlIHBhc3NlZCBieSBpb3NjaGVkdWxlciAqLworCV9fUkVRX0ZVQSwJCS8qIGZvcmNlZCB1bml0IGFjY2VzcyAqLworCV9fUkVRX05PTUVSR0UsCQkvKiBkb24ndCB0b3VjaCB0aGlzIGZvciBtZXJnaW5nICovCisJX19SRVFfU1RBUlRFRCwJCS8qIGRyaXZlIGFscmVhZHkgbWF5IGhhdmUgc3RhcnRlZCB0aGlzIG9uZSAqLworCV9fUkVRX0RPTlRQUkVQLAkJLyogZG9uJ3QgY2FsbCBwcmVwIGZvciB0aGlzIG9uZSAqLworCV9fUkVRX1FVRVVFRCwJCS8qIHVzZXMgcXVldWVpbmcgKi8KKwlfX1JFUV9FTFZQUklWLAkJLyogZWxldmF0b3IgcHJpdmF0ZSBkYXRhIGF0dGFjaGVkICovCisJX19SRVFfRkFJTEVELAkJLyogc2V0IGlmIHRoZSByZXF1ZXN0IGZhaWxlZCAqLworCV9fUkVRX1FVSUVULAkJLyogZG9uJ3Qgd29ycnkgYWJvdXQgZXJyb3JzICovCisJX19SRVFfUFJFRU1QVCwJCS8qIHNldCBmb3IgImlkZV9wcmVlbXB0IiByZXF1ZXN0cyAqLworCV9fUkVRX0FMTE9DRUQsCQkvKiByZXF1ZXN0IGNhbWUgZnJvbSBvdXIgYWxsb2MgcG9vbCAqLworCV9fUkVRX0NPUFlfVVNFUiwJLyogY29udGFpbnMgY29waWVzIG9mIHVzZXIgcGFnZXMgKi8KKwlfX1JFUV9GTFVTSCwJCS8qIHJlcXVlc3QgZm9yIGNhY2hlIGZsdXNoICovCisJX19SRVFfSU9fU1RBVCwJCS8qIGFjY291bnQgSS9PIHN0YXQgKi8KKwlfX1JFUV9NSVhFRF9NRVJHRSwJLyogbWVyZ2Ugb2YgZGlmZmVyZW50IHR5cGVzLCBmYWlsIHNlcGFyYXRlbHkgKi8KKwlfX1JFUV9TRUNVUkUsCQkvKiBzZWN1cmUgZGlzY2FyZCAodXNlZCB3aXRoIF9fUkVRX0RJU0NBUkQpICovCisJX19SRVFfTlJfQklUUywJCS8qIHN0b3BzIGhlcmUgKi8KK307CisKKyNkZWZpbmUgUkVRX1dSSVRFCQkoMSA8PCBfX1JFUV9XUklURSkKKyNkZWZpbmUgUkVRX0ZBSUxGQVNUX0RFVgkoMSA8PCBfX1JFUV9GQUlMRkFTVF9ERVYpCisjZGVmaW5lIFJFUV9GQUlMRkFTVF9UUkFOU1BPUlQJKDEgPDwgX19SRVFfRkFJTEZBU1RfVFJBTlNQT1JUKQorI2RlZmluZSBSRVFfRkFJTEZBU1RfRFJJVkVSCSgxIDw8IF9fUkVRX0ZBSUxGQVNUX0RSSVZFUikKKyNkZWZpbmUgUkVRX1NZTkMJCSgxIDw8IF9fUkVRX1NZTkMpCisjZGVmaW5lIFJFUV9NRVRBCQkoMSA8PCBfX1JFUV9NRVRBKQorI2RlZmluZSBSRVFfRElTQ0FSRAkJKDEgPDwgX19SRVFfRElTQ0FSRCkKKyNkZWZpbmUgUkVRX05PSURMRQkJKDEgPDwgX19SRVFfTk9JRExFKQorCisjZGVmaW5lIFJFUV9GQUlMRkFTVF9NQVNLIFwKKwkoUkVRX0ZBSUxGQVNUX0RFViB8IFJFUV9GQUlMRkFTVF9UUkFOU1BPUlQgfCBSRVFfRkFJTEZBU1RfRFJJVkVSKQorI2RlZmluZSBSRVFfQ09NTU9OX01BU0sgXAorCShSRVFfV1JJVEUgfCBSRVFfRkFJTEZBU1RfTUFTSyB8IFJFUV9TWU5DIHwgUkVRX01FVEEgfCBSRVFfRElTQ0FSRCB8IFwKKwkgUkVRX05PSURMRSB8IFJFUV9GTFVTSCB8IFJFUV9GVUEpCisjZGVmaW5lIFJFUV9DTE9ORV9NQVNLCQlSRVFfQ09NTU9OX01BU0sKKworI2RlZmluZSBSRVFfVU5QTFVHCQkoMSA8PCBfX1JFUV9VTlBMVUcpCisjZGVmaW5lIFJFUV9SQUhFQUQJCSgxIDw8IF9fUkVRX1JBSEVBRCkKKyNkZWZpbmUgUkVRX1RIUk9UVExFRAkJKDEgPDwgX19SRVFfVEhST1RUTEVEKQorCisjZGVmaW5lIFJFUV9TT1JURUQJCSgxIDw8IF9fUkVRX1NPUlRFRCkKKyNkZWZpbmUgUkVRX1NPRlRCQVJSSUVSCQkoMSA8PCBfX1JFUV9TT0ZUQkFSUklFUikKKyNkZWZpbmUgUkVRX0ZVQQkJCSgxIDw8IF9fUkVRX0ZVQSkKKyNkZWZpbmUgUkVRX05PTUVSR0UJCSgxIDw8IF9fUkVRX05PTUVSR0UpCisjZGVmaW5lIFJFUV9TVEFSVEVECQkoMSA8PCBfX1JFUV9TVEFSVEVEKQorI2RlZmluZSBSRVFfRE9OVFBSRVAJCSgxIDw8IF9fUkVRX0RPTlRQUkVQKQorI2RlZmluZSBSRVFfUVVFVUVECQkoMSA8PCBfX1JFUV9RVUVVRUQpCisjZGVmaW5lIFJFUV9FTFZQUklWCQkoMSA8PCBfX1JFUV9FTFZQUklWKQorI2RlZmluZSBSRVFfRkFJTEVECQkoMSA8PCBfX1JFUV9GQUlMRUQpCisjZGVmaW5lIFJFUV9RVUlFVAkJKDEgPDwgX19SRVFfUVVJRVQpCisjZGVmaW5lIFJFUV9QUkVFTVBUCQkoMSA8PCBfX1JFUV9QUkVFTVBUKQorI2RlZmluZSBSRVFfQUxMT0NFRAkJKDEgPDwgX19SRVFfQUxMT0NFRCkKKyNkZWZpbmUgUkVRX0NPUFlfVVNFUgkJKDEgPDwgX19SRVFfQ09QWV9VU0VSKQorI2RlZmluZSBSRVFfRkxVU0gJCSgxIDw8IF9fUkVRX0ZMVVNIKQorI2RlZmluZSBSRVFfSU9fU1RBVAkJKDEgPDwgX19SRVFfSU9fU1RBVCkKKyNkZWZpbmUgUkVRX01JWEVEX01FUkdFCQkoMSA8PCBfX1JFUV9NSVhFRF9NRVJHRSkKKyNkZWZpbmUgUkVRX1NFQ1VSRQkJKDEgPDwgX19SRVFfU0VDVVJFKQorCisjZW5kaWYgLyogX19MSU5VWF9CTEtfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2Jsa3BnLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYmxrcGcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTJkZDRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2Jsa3BnLmgKQEAgLTAsMCArMSw1OCBAQAorI2lmbmRlZiBfTElOVVhfQkxLUEdfSAorI2RlZmluZSBfTElOVVhfQkxLUEdfSAorCisvKgorICogUGFydGl0aW9uIHRhYmxlIGFuZCBkaXNrIGdlb21ldHJ5IGhhbmRsaW5nCisgKgorICogQSBzaW5nbGUgaW9jdGwgd2l0aCBsb3RzIG9mIHN1YmZ1bmN0aW9uczoKKyAqCisgKiBEZXZpY2UgbnVtYmVyIHN0dWZmOgorICogICAgZ2V0X3dob2xlX2Rpc2soKQkJKGdpdmVuIHRoZSBkZXZpY2UgbnVtYmVyIG9mIGEgcGFydGl0aW9uLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZCB0aGUgZGV2aWNlIG51bWJlciBvZiB0aGUgZW5jb21wYXNzaW5nIGRpc2spCisgKiAgICBnZXRfYWxsX3BhcnRpdGlvbnMoKQkoZ2l2ZW4gdGhlIGRldmljZSBudW1iZXIgb2YgYSBkaXNrLCByZXR1cm4gdGhlCisgKgkJCQkgZGV2aWNlIG51bWJlcnMgb2YgYWxsIGl0cyBrbm93biBwYXJ0aXRpb25zKQorICoKKyAqIFBhcnRpdGlvbiBzdHVmZjoKKyAqICAgIGFkZF9wYXJ0aXRpb24oKQorICogICAgZGVsZXRlX3BhcnRpdGlvbigpCisgKiAgICB0ZXN0X3BhcnRpdGlvbl9pbl91c2UoKQkoYWxzbyBmb3IgdGVzdF9kaXNrX2luX3VzZSkKKyAqCisgKiBHZW9tZXRyeSBzdHVmZjoKKyAqICAgIGdldF9nZW9tZXRyeSgpCisgKiAgICBzZXRfZ2VvbWV0cnkoKQorICogICAgZ2V0X2Jpb3NfZHJpdmVkYXRhKCkKKyAqCisgKiBGb3IgdG9kYXksIG9ubHkgdGhlIHBhcnRpdGlvbiBzdHVmZiAtIGFlYiwgOTkwNTE1CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNkZWZpbmUgQkxLUEcgICAgICBfSU8oMHgxMiwxMDUpCisKKy8qIFRoZSBhcmd1bWVudCBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBibGtwZ19pb2N0bF9hcmcgeworICAgICAgICBpbnQgb3A7CisgICAgICAgIGludCBmbGFnczsKKyAgICAgICAgaW50IGRhdGFsZW47CisgICAgICAgIHZvaWQgKmRhdGE7Cit9OworCisvKiBUaGUgc3ViZnVuY3Rpb25zIChmb3IgdGhlIG9wIGZpZWxkKSAqLworI2RlZmluZSBCTEtQR19BRERfUEFSVElUSU9OCTEKKyNkZWZpbmUgQkxLUEdfREVMX1BBUlRJVElPTgkyCisKKy8qIFNpemVzIG9mIG5hbWUgZmllbGRzLiBVbnVzZWQgYXQgcHJlc2VudC4gKi8KKyNkZWZpbmUgQkxLUEdfREVWTkFNRUxUSAk2NAorI2RlZmluZSBCTEtQR19WT0xOQU1FTFRICTY0CisKKy8qIFRoZSBkYXRhIHN0cnVjdHVyZSBmb3IgQUREX1BBUlRJVElPTiBhbmQgREVMX1BBUlRJVElPTiAqLworc3RydWN0IGJsa3BnX3BhcnRpdGlvbiB7CisJbG9uZyBsb25nIHN0YXJ0OwkJLyogc3RhcnRpbmcgb2Zmc2V0IGluIGJ5dGVzICovCisJbG9uZyBsb25nIGxlbmd0aDsJCS8qIGxlbmd0aCBpbiBieXRlcyAqLworCWludCBwbm87CQkJLyogcGFydGl0aW9uIG51bWJlciAqLworCWNoYXIgZGV2bmFtZVtCTEtQR19ERVZOQU1FTFRIXTsJLyogcGFydGl0aW9uIG5hbWUsIGxpa2Ugc2RhNSBvciBjMGQxcDIsCisJCQkJCSAgIHRvIGJlIHVzZWQgaW4ga2VybmVsIG1lc3NhZ2VzICovCisJY2hhciB2b2xuYW1lW0JMS1BHX1ZPTE5BTUVMVEhdOwkvKiB2b2x1bWUgbGFiZWwgKi8KK307CisKKyNlbmRpZiAvKiBfTElOVVhfQkxLUEdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkM2ExN2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKQEAgLTAsMCArMSwxNDEgQEAKKyNpZm5kZWYgQkxLVFJBQ0VfSAorI2RlZmluZSBCTEtUUkFDRV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICogVHJhY2UgY2F0ZWdvcmllcworICovCitlbnVtIGJsa3RyYWNlX2NhdCB7CisJQkxLX1RDX1JFQUQJPSAxIDw8IDAsCS8qIHJlYWRzICovCisJQkxLX1RDX1dSSVRFCT0gMSA8PCAxLAkvKiB3cml0ZXMgKi8KKwlCTEtfVENfQkFSUklFUgk9IDEgPDwgMiwJLyogYmFycmllciAqLworCUJMS19UQ19TWU5DCT0gMSA8PCAzLAkvKiBzeW5jIElPICovCisJQkxLX1RDX1NZTkNJTwk9IEJMS19UQ19TWU5DLAorCUJMS19UQ19RVUVVRQk9IDEgPDwgNCwJLyogcXVldWVpbmcvbWVyZ2luZyAqLworCUJMS19UQ19SRVFVRVVFCT0gMSA8PCA1LAkvKiByZXF1ZXVlaW5nICovCisJQkxLX1RDX0lTU1VFCT0gMSA8PCA2LAkvKiBpc3N1ZSAqLworCUJMS19UQ19DT01QTEVURQk9IDEgPDwgNywJLyogY29tcGxldGlvbnMgKi8KKwlCTEtfVENfRlMJPSAxIDw8IDgsCS8qIGZzIHJlcXVlc3RzICovCisJQkxLX1RDX1BDCT0gMSA8PCA5LAkvKiBwYyByZXF1ZXN0cyAqLworCUJMS19UQ19OT1RJRlkJPSAxIDw8IDEwLAkvKiBzcGVjaWFsIG1lc3NhZ2UgKi8KKwlCTEtfVENfQUhFQUQJPSAxIDw8IDExLAkvKiByZWFkYWhlYWQgKi8KKwlCTEtfVENfTUVUQQk9IDEgPDwgMTIsCS8qIG1ldGFkYXRhICovCisJQkxLX1RDX0RJU0NBUkQJPSAxIDw8IDEzLAkvKiBkaXNjYXJkIHJlcXVlc3RzICovCisJQkxLX1RDX0RSVl9EQVRBCT0gMSA8PCAxNCwJLyogYmluYXJ5IHBlci1kcml2ZXIgZGF0YSAqLworCisJQkxLX1RDX0VORAk9IDEgPDwgMTUsCS8qIG9ubHkgMTYtYml0cywgcmVtaW5kZXIgKi8KK307CisKKyNkZWZpbmUgQkxLX1RDX1NISUZUCQkoMTYpCisjZGVmaW5lIEJMS19UQ19BQ1QoYWN0KQkJKChhY3QpIDw8IEJMS19UQ19TSElGVCkKKworLyoKKyAqIEJhc2ljIHRyYWNlIGFjdGlvbnMKKyAqLworZW51bSBibGt0cmFjZV9hY3QgeworCV9fQkxLX1RBX1FVRVVFID0gMSwJCS8qIHF1ZXVlZCAqLworCV9fQkxLX1RBX0JBQ0tNRVJHRSwJCS8qIGJhY2sgbWVyZ2VkIHRvIGV4aXN0aW5nIHJxICovCisJX19CTEtfVEFfRlJPTlRNRVJHRSwJCS8qIGZyb250IG1lcmdlIHRvIGV4aXN0aW5nIHJxICovCisJX19CTEtfVEFfR0VUUlEsCQkJLyogYWxsb2NhdGVkIG5ldyByZXF1ZXN0ICovCisJX19CTEtfVEFfU0xFRVBSUSwJCS8qIHNsZWVwaW5nIG9uIHJxIGFsbG9jYXRpb24gKi8KKwlfX0JMS19UQV9SRVFVRVVFLAkJLyogcmVxdWVzdCByZXF1ZXVlZCAqLworCV9fQkxLX1RBX0lTU1VFLAkJCS8qIHNlbnQgdG8gZHJpdmVyICovCisJX19CTEtfVEFfQ09NUExFVEUsCQkvKiBjb21wbGV0ZWQgYnkgZHJpdmVyICovCisJX19CTEtfVEFfUExVRywJCQkvKiBxdWV1ZSB3YXMgcGx1Z2dlZCAqLworCV9fQkxLX1RBX1VOUExVR19JTywJCS8qIHF1ZXVlIHdhcyB1bnBsdWdnZWQgYnkgaW8gKi8KKwlfX0JMS19UQV9VTlBMVUdfVElNRVIsCQkvKiBxdWV1ZSB3YXMgdW5wbHVnZ2VkIGJ5IHRpbWVyICovCisJX19CTEtfVEFfSU5TRVJULAkJLyogaW5zZXJ0IHJlcXVlc3QgKi8KKwlfX0JMS19UQV9TUExJVCwJCQkvKiBiaW8gd2FzIHNwbGl0ICovCisJX19CTEtfVEFfQk9VTkNFLAkJLyogYmlvIHdhcyBib3VuY2VkICovCisJX19CTEtfVEFfUkVNQVAsCQkJLyogYmlvIHdhcyByZW1hcHBlZCAqLworCV9fQkxLX1RBX0FCT1JULAkJCS8qIHJlcXVlc3QgYWJvcnRlZCAqLworCV9fQkxLX1RBX0RSVl9EQVRBLAkJLyogZHJpdmVyLXNwZWNpZmljIGJpbmFyeSBkYXRhICovCit9OworCisvKgorICogTm90aWZ5IGV2ZW50cy4KKyAqLworZW51bSBibGt0cmFjZV9ub3RpZnkgeworCV9fQkxLX1ROX1BST0NFU1MgPSAwLAkJLyogZXN0YWJsaXNoIHBpZC9uYW1lIG1hcHBpbmcgKi8KKwlfX0JMS19UTl9USU1FU1RBTVAsCQkvKiBpbmNsdWRlIHN5c3RlbSBjbG9jayAqLworCV9fQkxLX1ROX01FU1NBR0UsCQkvKiBDaGFyYWN0ZXIgc3RyaW5nIG1lc3NhZ2UgKi8KK307CisKKworLyoKKyAqIFRyYWNlIGFjdGlvbnMgaW4gZnVsbC4gQWRkaXRpb25hbGx5LCByZWFkIG9yIHdyaXRlIGlzIG1hc2tlZAorICovCisjZGVmaW5lIEJMS19UQV9RVUVVRQkJKF9fQkxLX1RBX1FVRVVFIHwgQkxLX1RDX0FDVChCTEtfVENfUVVFVUUpKQorI2RlZmluZSBCTEtfVEFfQkFDS01FUkdFCShfX0JMS19UQV9CQUNLTUVSR0UgfCBCTEtfVENfQUNUKEJMS19UQ19RVUVVRSkpCisjZGVmaW5lIEJMS19UQV9GUk9OVE1FUkdFCShfX0JMS19UQV9GUk9OVE1FUkdFIHwgQkxLX1RDX0FDVChCTEtfVENfUVVFVUUpKQorI2RlZmluZQlCTEtfVEFfR0VUUlEJCShfX0JMS19UQV9HRVRSUSB8IEJMS19UQ19BQ1QoQkxLX1RDX1FVRVVFKSkKKyNkZWZpbmUJQkxLX1RBX1NMRUVQUlEJCShfX0JMS19UQV9TTEVFUFJRIHwgQkxLX1RDX0FDVChCTEtfVENfUVVFVUUpKQorI2RlZmluZQlCTEtfVEFfUkVRVUVVRQkJKF9fQkxLX1RBX1JFUVVFVUUgfCBCTEtfVENfQUNUKEJMS19UQ19SRVFVRVVFKSkKKyNkZWZpbmUgQkxLX1RBX0lTU1VFCQkoX19CTEtfVEFfSVNTVUUgfCBCTEtfVENfQUNUKEJMS19UQ19JU1NVRSkpCisjZGVmaW5lIEJMS19UQV9DT01QTEVURQkJKF9fQkxLX1RBX0NPTVBMRVRFfCBCTEtfVENfQUNUKEJMS19UQ19DT01QTEVURSkpCisjZGVmaW5lIEJMS19UQV9QTFVHCQkoX19CTEtfVEFfUExVRyB8IEJMS19UQ19BQ1QoQkxLX1RDX1FVRVVFKSkKKyNkZWZpbmUgQkxLX1RBX1VOUExVR19JTwkoX19CTEtfVEFfVU5QTFVHX0lPIHwgQkxLX1RDX0FDVChCTEtfVENfUVVFVUUpKQorI2RlZmluZSBCTEtfVEFfVU5QTFVHX1RJTUVSCShfX0JMS19UQV9VTlBMVUdfVElNRVIgfCBCTEtfVENfQUNUKEJMS19UQ19RVUVVRSkpCisjZGVmaW5lIEJMS19UQV9JTlNFUlQJCShfX0JMS19UQV9JTlNFUlQgfCBCTEtfVENfQUNUKEJMS19UQ19RVUVVRSkpCisjZGVmaW5lIEJMS19UQV9TUExJVAkJKF9fQkxLX1RBX1NQTElUKQorI2RlZmluZSBCTEtfVEFfQk9VTkNFCQkoX19CTEtfVEFfQk9VTkNFKQorI2RlZmluZSBCTEtfVEFfUkVNQVAJCShfX0JMS19UQV9SRU1BUCB8IEJMS19UQ19BQ1QoQkxLX1RDX1FVRVVFKSkKKyNkZWZpbmUgQkxLX1RBX0FCT1JUCQkoX19CTEtfVEFfQUJPUlQgfCBCTEtfVENfQUNUKEJMS19UQ19RVUVVRSkpCisjZGVmaW5lIEJMS19UQV9EUlZfREFUQQkoX19CTEtfVEFfRFJWX0RBVEEgfCBCTEtfVENfQUNUKEJMS19UQ19EUlZfREFUQSkpCisKKyNkZWZpbmUgQkxLX1ROX1BST0NFU1MJCShfX0JMS19UTl9QUk9DRVNTIHwgQkxLX1RDX0FDVChCTEtfVENfTk9USUZZKSkKKyNkZWZpbmUgQkxLX1ROX1RJTUVTVEFNUAkoX19CTEtfVE5fVElNRVNUQU1QIHwgQkxLX1RDX0FDVChCTEtfVENfTk9USUZZKSkKKyNkZWZpbmUgQkxLX1ROX01FU1NBR0UJCShfX0JMS19UTl9NRVNTQUdFIHwgQkxLX1RDX0FDVChCTEtfVENfTk9USUZZKSkKKworI2RlZmluZSBCTEtfSU9fVFJBQ0VfTUFHSUMJMHg2NTYxNzQwMAorI2RlZmluZSBCTEtfSU9fVFJBQ0VfVkVSU0lPTgkweDA3CisKKy8qCisgKiBUaGUgdHJhY2UgaXRzZWxmCisgKi8KK3N0cnVjdCBibGtfaW9fdHJhY2UgeworCV9fdTMyIG1hZ2ljOwkJLyogTUFHSUMgPDwgOCB8IHZlcnNpb24gKi8KKwlfX3UzMiBzZXF1ZW5jZTsJCS8qIGV2ZW50IG51bWJlciAqLworCV9fdTY0IHRpbWU7CQkvKiBpbiBtaWNyb3NlY29uZHMgKi8KKwlfX3U2NCBzZWN0b3I7CQkvKiBkaXNrIG9mZnNldCAqLworCV9fdTMyIGJ5dGVzOwkJLyogdHJhbnNmZXIgbGVuZ3RoICovCisJX191MzIgYWN0aW9uOwkJLyogd2hhdCBoYXBwZW5lZCAqLworCV9fdTMyIHBpZDsJCS8qIHdobyBkaWQgaXQgKi8KKwlfX3UzMiBkZXZpY2U7CQkvKiBkZXZpY2UgbnVtYmVyICovCisJX191MzIgY3B1OwkJLyogb24gd2hhdCBjcHUgZGlkIGl0IGhhcHBlbiAqLworCV9fdTE2IGVycm9yOwkJLyogY29tcGxldGlvbiBlcnJvciAqLworCV9fdTE2IHBkdV9sZW47CQkvKiBsZW5ndGggb2YgZGF0YSBhZnRlciB0aGlzIHRyYWNlICovCit9OworCisvKgorICogVGhlIHJlbWFwIGV2ZW50CisgKi8KK3N0cnVjdCBibGtfaW9fdHJhY2VfcmVtYXAgeworCV9fYmUzMiBkZXZpY2VfZnJvbTsKKwlfX2JlMzIgZGV2aWNlX3RvOworCV9fYmU2NCBzZWN0b3JfZnJvbTsKK307CisKK2VudW0geworCUJsa3RyYWNlX3NldHVwID0gMSwKKwlCbGt0cmFjZV9ydW5uaW5nLAorCUJsa3RyYWNlX3N0b3BwZWQsCit9OworCisjZGVmaW5lIEJMS1RSQUNFX0JERVZfU0laRQkzMgorCisvKgorICogVXNlciBzZXR1cCBzdHJ1Y3R1cmUgcGFzc2VkIHdpdGggQkxLVFJBQ0VTVEFSVAorICovCitzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAgeworCWNoYXIgbmFtZVtCTEtUUkFDRV9CREVWX1NJWkVdOwkvKiBvdXRwdXQgKi8KKwlfX3UxNiBhY3RfbWFzazsJCQkvKiBpbnB1dCAqLworCV9fdTMyIGJ1Zl9zaXplOwkJCS8qIGlucHV0ICovCisJX191MzIgYnVmX25yOwkJCS8qIGlucHV0ICovCisJX191NjQgc3RhcnRfbGJhOworCV9fdTY0IGVuZF9sYmE7CisJX191MzIgcGlkOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYnBxZXRoZXIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9icHFldGhlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YzM1ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYnBxZXRoZXIuaApAQCAtMCwwICsxLDQxIEBACisjaWZuZGVmCV9fQlBRRVRIRVJfSAorI2RlZmluZQlfX0JQUUVUSEVSX0gKKworLyoKKyAqIAlEZWZpbmVzIGZvciB0aGUgQlBRRVRIRVIgcHNldWRvIGRldmljZSBkcml2ZXIKKyAqLworCisjaWZuZGVmIF9fTElOVVhfSUZfRVRIRVJfSAorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjZW5kaWYKKworI2RlZmluZSBTSU9DU0JQUUVUSE9QVAkJKFNJT0NERVZQUklWQVRFKzApCS8qIHJlc2VydmVkICovCisjZGVmaW5lIFNJT0NTQlBRRVRIQUREUgkJKFNJT0NERVZQUklWQVRFKzEpCisgCitzdHJ1Y3QgYnBxX2V0aGFkZHIgeworCXVuc2lnbmVkIGNoYXIgZGVzdGluYXRpb25bRVRIX0FMRU5dOworCXVuc2lnbmVkIGNoYXIgYWNjZXB0W0VUSF9BTEVOXTsKK307CisKKy8qIAorICogRm9yIFNJT0NTQlBRRVRIT1BUIC0gdGhpcyBpcyBjb21wYXRpYmxlIHdpdGggUEkyL1BhY2tldFR3aW4gY2FyZCBkcml2ZXJzLAorICogY3VycmVudGx5IG5vdCBpbXBsZW1lbnRlZCwgdGhvdWdoLiBJZiBzb21lb25lIHdhbnRzIHRvIGhvb2sgYSByYWRpbworICogdG8gaGlzIEV0aGVybmV0IGNhcmQgaGUgbWF5IGZpbmQgdGhpcyB1c2VmdWwuIDstKQorICovCisKKyNkZWZpbmUgU0lPQ0dCUFFFVEhQQVJBTQkweDUwMDAgIC8qIGdldCBMZXZlbCAxIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgU0lPQ1NCUFFFVEhQQVJBTQkweDUwMDEgIC8qIHNldCAqLworCitzdHJ1Y3QgYnBxX3JlcSAgeworICAgIGludCBjbWQ7CisgICAgaW50IHNwZWVkOwkJCS8qIHVudXNlZCAqLworICAgIGludCBjbG9ja21vZGU7CQkvKiB1bnVzZWQgKi8KKyAgICBpbnQgdHhkZWxheTsKKyAgICB1bnNpZ25lZCBjaGFyIHBlcnNpc3Q7CS8qIHVudXNlZCAqLworICAgIGludCBzbG90aW1lOwkJLyogdW51c2VkICovCisgICAgaW50IHNxdWVsZGVsYXk7CisgICAgaW50IGRtYWNoYW47CQkvKiB1bnVzZWQgKi8KKyAgICBpbnQgaXJxOwkJCS8qIHVudXNlZCAqLworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYnNnLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvYnNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYxMmQ1YwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9ic2cuaApAQCAtMCwwICsxLDY1IEBACisjaWZuZGVmIEJTR19ICisjZGVmaW5lIEJTR19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIEJTR19QUk9UT0NPTF9TQ1NJCQkwCisKKyNkZWZpbmUgQlNHX1NVQl9QUk9UT0NPTF9TQ1NJX0NNRAkwCisjZGVmaW5lIEJTR19TVUJfUFJPVE9DT0xfU0NTSV9UTUYJMQorI2RlZmluZSBCU0dfU1VCX1BST1RPQ09MX1NDU0lfVFJBTlNQT1JUCTIKKworLyoKKyAqIEZvciBmbGFncyBtZW1iZXIgYmVsb3cKKyAqIHNnLmggc2dfaW9faGRyIGFsc28gaGFzIGJpdHMgZGVmaW5lZCBmb3IgaXQncyBmbGFncyBtZW1iZXIuIEhvd2V2ZXIKKyAqIG5vbmUgb2YgdGhlc2UgYml0cyBhcmUgaW1wbGVtZW50ZWQvdXNlZCBieSBic2cuIFRoZSBiaXRzIGJlbG93IGFyZQorICogYWxsb2NhdGVkIHRvIG5vdCBjb25mbGljdCB3aXRoIHNnLmggb25lcyBhbnl3YXkuCisgKi8KKyNkZWZpbmUgQlNHX0ZMQUdfUV9BVF9UQUlMIDB4MTAgLyogZGVmYXVsdCwgPT0gMCBhdCB0aGlzIGJpdCwgaXMgUV9BVF9IRUFEICovCisKK3N0cnVjdCBzZ19pb192NCB7CisJX19zMzIgZ3VhcmQ7CQkvKiBbaV0gJ1EnIHRvIGRpZmZlcmVudGlhdGUgZnJvbSB2MyAqLworCV9fdTMyIHByb3RvY29sOwkJLyogW2ldIDAgLT4gU0NTSSAsIC4uLi4gKi8KKwlfX3UzMiBzdWJwcm90b2NvbDsJLyogW2ldIDAgLT4gU0NTSSBjb21tYW5kLCAxIC0+IFNDU0kgdGFzaworCQkJCSAgIG1hbmFnZW1lbnQgZnVuY3Rpb24sIC4uLi4gKi8KKworCV9fdTMyIHJlcXVlc3RfbGVuOwkvKiBbaV0gaW4gYnl0ZXMgKi8KKwlfX3U2NCByZXF1ZXN0OwkJLyogW2ldLCBbKmldIHtTQ1NJOiBjZGJ9ICovCisJX191NjQgcmVxdWVzdF90YWc7CS8qIFtpXSB7U0NTSTogdGFzayB0YWcgKG9ubHkgaWYgZmxhZ2dlZCl9ICovCisJX191MzIgcmVxdWVzdF9hdHRyOwkvKiBbaV0ge1NDU0k6IHRhc2sgYXR0cmlidXRlfSAqLworCV9fdTMyIHJlcXVlc3RfcHJpb3JpdHk7CS8qIFtpXSB7U0NTSTogdGFzayBwcmlvcml0eX0gKi8KKwlfX3UzMiByZXF1ZXN0X2V4dHJhOwkvKiBbaV0ge3NwYXJlLCBmb3IgcGFkZGluZ30gKi8KKwlfX3UzMiBtYXhfcmVzcG9uc2VfbGVuOwkvKiBbaV0gaW4gYnl0ZXMgKi8KKwlfX3U2NCByZXNwb25zZTsJCS8qIFtpXSwgWypvXSB7U0NTSTogKGF1dG8pc2Vuc2UgZGF0YX0gKi8KKworICAgICAgICAvKiAiZG91dF8iOiBkYXRhIG91dCAodG8gZGV2aWNlKTsgImRpbl8iOiBkYXRhIGluIChmcm9tIGRldmljZSkgKi8KKwlfX3UzMiBkb3V0X2lvdmVjX2NvdW50OwkvKiBbaV0gMCAtPiAiZmxhdCIgZG91dCB0cmFuc2ZlciBlbHNlCisJCQkJICAgZG91dF94ZmVyIHBvaW50cyB0byBhcnJheSBvZiBpb3ZlYyAqLworCV9fdTMyIGRvdXRfeGZlcl9sZW47CS8qIFtpXSBieXRlcyB0byBiZSB0cmFuc2ZlcnJlZCB0byBkZXZpY2UgKi8KKwlfX3UzMiBkaW5faW92ZWNfY291bnQ7CS8qIFtpXSAwIC0+ICJmbGF0IiBkaW4gdHJhbnNmZXIgKi8KKwlfX3UzMiBkaW5feGZlcl9sZW47CS8qIFtpXSBieXRlcyB0byBiZSB0cmFuc2ZlcnJlZCBmcm9tIGRldmljZSAqLworCV9fdTY0IGRvdXRfeGZlcnA7CS8qIFtpXSwgWyppXSAqLworCV9fdTY0IGRpbl94ZmVycDsJLyogW2ldLCBbKm9dICovCisKKwlfX3UzMiB0aW1lb3V0OwkJLyogW2ldIHVuaXRzOiBtaWxsaXNlY29uZCAqLworCV9fdTMyIGZsYWdzOwkJLyogW2ldIGJpdCBtYXNrICovCisJX191NjQgdXNyX3B0cjsJCS8qIFtpLT5vXSB1bnVzZWQgaW50ZXJuYWxseSAqLworCV9fdTMyIHNwYXJlX2luOwkJLyogW2ldICovCisKKwlfX3UzMiBkcml2ZXJfc3RhdHVzOwkvKiBbb10gMCAtPiBvayAqLworCV9fdTMyIHRyYW5zcG9ydF9zdGF0dXM7CS8qIFtvXSAwIC0+IG9rICovCisJX191MzIgZGV2aWNlX3N0YXR1czsJLyogW29dIHtTQ1NJOiBjb21tYW5kIGNvbXBsZXRpb24gc3RhdHVzfSAqLworCV9fdTMyIHJldHJ5X2RlbGF5OwkvKiBbb10ge1NDU0k6IHN0YXR1cyBhdXhpbGlhcnkgaW5mb3JtYXRpb259ICovCisJX191MzIgaW5mbzsJCS8qIFtvXSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uICovCisJX191MzIgZHVyYXRpb247CQkvKiBbb10gdGltZSB0byBjb21wbGV0ZSwgaW4gbWlsbGlzZWNvbmRzICovCisJX191MzIgcmVzcG9uc2VfbGVuOwkvKiBbb10gYnl0ZXMgb2YgcmVzcG9uc2UgYWN0dWFsbHkgd3JpdHRlbiAqLworCV9fczMyIGRpbl9yZXNpZDsJLyogW29dIGRpbl94ZmVyX2xlbiAtIGFjdHVhbF9kaW5feGZlcl9sZW4gKi8KKwlfX3MzMiBkb3V0X3Jlc2lkOwkvKiBbb10gZG91dF94ZmVyX2xlbiAtIGFjdHVhbF9kb3V0X3hmZXJfbGVuICovCisJX191NjQgZ2VuZXJhdGVkX3RhZzsJLyogW29dIHtTQ1NJOiB0cmFuc3BvcnQgZ2VuZXJhdGVkIHRhc2sgdGFnfSAqLworCV9fdTMyIHNwYXJlX291dDsJLyogW29dICovCisKKwlfX3UzMiBwYWRkaW5nOworfTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvYmlnX2VuZGlhbi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9iaWdfZW5kaWFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRlZjk4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvYmlnX2VuZGlhbi5oCkBAIC0wLDAgKzEsMTA1IEBACisjaWZuZGVmIF9MSU5VWF9CWVRFT1JERVJfQklHX0VORElBTl9ICisjZGVmaW5lIF9MSU5VWF9CWVRFT1JERVJfQklHX0VORElBTl9ICisKKyNpZm5kZWYgX19CSUdfRU5ESUFOCisjZGVmaW5lIF9fQklHX0VORElBTiA0MzIxCisjZW5kaWYKKyNpZm5kZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECisjZGVmaW5lIF9fQklHX0VORElBTl9CSVRGSUVMRAorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YWIuaD4KKworI2RlZmluZSBfX2NvbnN0YW50X2h0b25sKHgpICgoX19iZTMyKShfX3UzMikoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfbnRvaGwoeCkgKChfX3UzMikoX19iZTMyKSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9odG9ucyh4KSAoKF9fYmUxNikoX191MTYpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X250b2hzKHgpICgoX191MTYpKF9fYmUxNikoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2xlNjQoeCkgKChfX2xlNjQpX19fY29uc3RhbnRfc3dhYjY0KCh4KSkpCisjZGVmaW5lIF9fY29uc3RhbnRfbGU2NF90b19jcHUoeCkgX19fY29uc3RhbnRfc3dhYjY0KChfX3U2NCkoX19sZTY0KSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9jcHVfdG9fbGUzMih4KSAoKF9fbGUzMilfX19jb25zdGFudF9zd2FiMzIoKHgpKSkKKyNkZWZpbmUgX19jb25zdGFudF9sZTMyX3RvX2NwdSh4KSBfX19jb25zdGFudF9zd2FiMzIoKF9fdTMyKShfX2xlMzIpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2NwdV90b19sZTE2KHgpICgoX19sZTE2KV9fX2NvbnN0YW50X3N3YWIxNigoeCkpKQorI2RlZmluZSBfX2NvbnN0YW50X2xlMTZfdG9fY3B1KHgpIF9fX2NvbnN0YW50X3N3YWIxNigoX191MTYpKF9fbGUxNikoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2JlNjQoeCkgKChfX2JlNjQpKF9fdTY0KSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9iZTY0X3RvX2NwdSh4KSAoKF9fdTY0KShfX2JlNjQpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2NwdV90b19iZTMyKHgpICgoX19iZTMyKShfX3UzMikoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfYmUzMl90b19jcHUoeCkgKChfX3UzMikoX19iZTMyKSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9jcHVfdG9fYmUxNih4KSAoKF9fYmUxNikoX191MTYpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2JlMTZfdG9fY3B1KHgpICgoX191MTYpKF9fYmUxNikoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2xlNjQoeCkgKChfX2xlNjQpX19zd2FiNjQoKHgpKSkKKyNkZWZpbmUgX19sZTY0X3RvX2NwdSh4KSBfX3N3YWI2NCgoX191NjQpKF9fbGU2NCkoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2xlMzIoeCkgKChfX2xlMzIpX19zd2FiMzIoKHgpKSkKKyNkZWZpbmUgX19sZTMyX3RvX2NwdSh4KSBfX3N3YWIzMigoX191MzIpKF9fbGUzMikoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2xlMTYoeCkgKChfX2xlMTYpX19zd2FiMTYoKHgpKSkKKyNkZWZpbmUgX19sZTE2X3RvX2NwdSh4KSBfX3N3YWIxNigoX191MTYpKF9fbGUxNikoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2JlNjQoeCkgKChfX2JlNjQpKF9fdTY0KSh4KSkKKyNkZWZpbmUgX19iZTY0X3RvX2NwdSh4KSAoKF9fdTY0KShfX2JlNjQpKHgpKQorI2RlZmluZSBfX2NwdV90b19iZTMyKHgpICgoX19iZTMyKShfX3UzMikoeCkpCisjZGVmaW5lIF9fYmUzMl90b19jcHUoeCkgKChfX3UzMikoX19iZTMyKSh4KSkKKyNkZWZpbmUgX19jcHVfdG9fYmUxNih4KSAoKF9fYmUxNikoX191MTYpKHgpKQorI2RlZmluZSBfX2JlMTZfdG9fY3B1KHgpICgoX191MTYpKF9fYmUxNikoeCkpCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbGU2NCBfX2NwdV90b19sZTY0cChjb25zdCBfX3U2NCAqcCkKK3sKKwlyZXR1cm4gKF9fbGU2NClfX3N3YWI2NHAocCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBfX3U2NCBfX2xlNjRfdG9fY3B1cChjb25zdCBfX2xlNjQgKnApCit7CisJcmV0dXJuIF9fc3dhYjY0cCgoX191NjQgKilwKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIF9fbGUzMiBfX2NwdV90b19sZTMycChjb25zdCBfX3UzMiAqcCkKK3sKKwlyZXR1cm4gKF9fbGUzMilfX3N3YWIzMnAocCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBfX3UzMiBfX2xlMzJfdG9fY3B1cChjb25zdCBfX2xlMzIgKnApCit7CisJcmV0dXJuIF9fc3dhYjMycCgoX191MzIgKilwKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIF9fbGUxNiBfX2NwdV90b19sZTE2cChjb25zdCBfX3UxNiAqcCkKK3sKKwlyZXR1cm4gKF9fbGUxNilfX3N3YWIxNnAocCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBfX3UxNiBfX2xlMTZfdG9fY3B1cChjb25zdCBfX2xlMTYgKnApCit7CisJcmV0dXJuIF9fc3dhYjE2cCgoX191MTYgKilwKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIF9fYmU2NCBfX2NwdV90b19iZTY0cChjb25zdCBfX3U2NCAqcCkKK3sKKwlyZXR1cm4gKF9fYmU2NCkqcDsKK30KK3N0YXRpYyBfX2lubGluZV9fIF9fdTY0IF9fYmU2NF90b19jcHVwKGNvbnN0IF9fYmU2NCAqcCkKK3sKKwlyZXR1cm4gKF9fdTY0KSpwOworfQorc3RhdGljIF9faW5saW5lX18gX19iZTMyIF9fY3B1X3RvX2JlMzJwKGNvbnN0IF9fdTMyICpwKQoreworCXJldHVybiAoX19iZTMyKSpwOworfQorc3RhdGljIF9faW5saW5lX18gX191MzIgX19iZTMyX3RvX2NwdXAoY29uc3QgX19iZTMyICpwKQoreworCXJldHVybiAoX191MzIpKnA7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBfX2JlMTYgX19jcHVfdG9fYmUxNnAoY29uc3QgX191MTYgKnApCit7CisJcmV0dXJuIChfX2JlMTYpKnA7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBfX3UxNiBfX2JlMTZfdG9fY3B1cChjb25zdCBfX2JlMTYgKnApCit7CisJcmV0dXJuIChfX3UxNikqcDsKK30KKyNkZWZpbmUgX19jcHVfdG9fbGU2NHMoeCkgX19zd2FiNjRzKCh4KSkKKyNkZWZpbmUgX19sZTY0X3RvX2NwdXMoeCkgX19zd2FiNjRzKCh4KSkKKyNkZWZpbmUgX19jcHVfdG9fbGUzMnMoeCkgX19zd2FiMzJzKCh4KSkKKyNkZWZpbmUgX19sZTMyX3RvX2NwdXMoeCkgX19zd2FiMzJzKCh4KSkKKyNkZWZpbmUgX19jcHVfdG9fbGUxNnMoeCkgX19zd2FiMTZzKCh4KSkKKyNkZWZpbmUgX19sZTE2X3RvX2NwdXMoeCkgX19zd2FiMTZzKCh4KSkKKyNkZWZpbmUgX19jcHVfdG9fYmU2NHMoeCkgZG8geyAodm9pZCkoeCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fYmU2NF90b19jcHVzKHgpIGRvIHsgKHZvaWQpKHgpOyB9IHdoaWxlICgwKQorI2RlZmluZSBfX2NwdV90b19iZTMycyh4KSBkbyB7ICh2b2lkKSh4KTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX19iZTMyX3RvX2NwdXMoeCkgZG8geyAodm9pZCkoeCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fY3B1X3RvX2JlMTZzKHgpIGRvIHsgKHZvaWQpKHgpOyB9IHdoaWxlICgwKQorI2RlZmluZSBfX2JlMTZfdG9fY3B1cyh4KSBkbyB7ICh2b2lkKSh4KTsgfSB3aGlsZSAoMCkKKworCisjZW5kaWYgLyogX0xJTlVYX0JZVEVPUkRFUl9CSUdfRU5ESUFOX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRlOGExNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oCkBAIC0wLDAgKzEsMTA1IEBACisjaWZuZGVmIF9MSU5VWF9CWVRFT1JERVJfTElUVExFX0VORElBTl9ICisjZGVmaW5lIF9MSU5VWF9CWVRFT1JERVJfTElUVExFX0VORElBTl9ICisKKyNpZm5kZWYgX19MSVRUTEVfRU5ESUFOCisjZGVmaW5lIF9fTElUVExFX0VORElBTiAxMjM0CisjZW5kaWYKKyNpZm5kZWYgX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxECisjZGVmaW5lIF9fTElUVExFX0VORElBTl9CSVRGSUVMRAorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YWIuaD4KKworI2RlZmluZSBfX2NvbnN0YW50X2h0b25sKHgpICgoX19iZTMyKV9fX2NvbnN0YW50X3N3YWIzMigoeCkpKQorI2RlZmluZSBfX2NvbnN0YW50X250b2hsKHgpIF9fX2NvbnN0YW50X3N3YWIzMigoX19iZTMyKSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9odG9ucyh4KSAoKF9fYmUxNilfX19jb25zdGFudF9zd2FiMTYoKHgpKSkKKyNkZWZpbmUgX19jb25zdGFudF9udG9ocyh4KSBfX19jb25zdGFudF9zd2FiMTYoKF9fYmUxNikoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2xlNjQoeCkgKChfX2xlNjQpKF9fdTY0KSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9sZTY0X3RvX2NwdSh4KSAoKF9fdTY0KShfX2xlNjQpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2NwdV90b19sZTMyKHgpICgoX19sZTMyKShfX3UzMikoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfbGUzMl90b19jcHUoeCkgKChfX3UzMikoX19sZTMyKSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9jcHVfdG9fbGUxNih4KSAoKF9fbGUxNikoX191MTYpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2xlMTZfdG9fY3B1KHgpICgoX191MTYpKF9fbGUxNikoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2JlNjQoeCkgKChfX2JlNjQpX19fY29uc3RhbnRfc3dhYjY0KCh4KSkpCisjZGVmaW5lIF9fY29uc3RhbnRfYmU2NF90b19jcHUoeCkgX19fY29uc3RhbnRfc3dhYjY0KChfX3U2NCkoX19iZTY0KSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9jcHVfdG9fYmUzMih4KSAoKF9fYmUzMilfX19jb25zdGFudF9zd2FiMzIoKHgpKSkKKyNkZWZpbmUgX19jb25zdGFudF9iZTMyX3RvX2NwdSh4KSBfX19jb25zdGFudF9zd2FiMzIoKF9fdTMyKShfX2JlMzIpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2NwdV90b19iZTE2KHgpICgoX19iZTE2KV9fX2NvbnN0YW50X3N3YWIxNigoeCkpKQorI2RlZmluZSBfX2NvbnN0YW50X2JlMTZfdG9fY3B1KHgpIF9fX2NvbnN0YW50X3N3YWIxNigoX191MTYpKF9fYmUxNikoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2xlNjQoeCkgKChfX2xlNjQpKF9fdTY0KSh4KSkKKyNkZWZpbmUgX19sZTY0X3RvX2NwdSh4KSAoKF9fdTY0KShfX2xlNjQpKHgpKQorI2RlZmluZSBfX2NwdV90b19sZTMyKHgpICgoX19sZTMyKShfX3UzMikoeCkpCisjZGVmaW5lIF9fbGUzMl90b19jcHUoeCkgKChfX3UzMikoX19sZTMyKSh4KSkKKyNkZWZpbmUgX19jcHVfdG9fbGUxNih4KSAoKF9fbGUxNikoX191MTYpKHgpKQorI2RlZmluZSBfX2xlMTZfdG9fY3B1KHgpICgoX191MTYpKF9fbGUxNikoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2JlNjQoeCkgKChfX2JlNjQpX19zd2FiNjQoKHgpKSkKKyNkZWZpbmUgX19iZTY0X3RvX2NwdSh4KSBfX3N3YWI2NCgoX191NjQpKF9fYmU2NCkoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2JlMzIoeCkgKChfX2JlMzIpX19zd2FiMzIoKHgpKSkKKyNkZWZpbmUgX19iZTMyX3RvX2NwdSh4KSBfX3N3YWIzMigoX191MzIpKF9fYmUzMikoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2JlMTYoeCkgKChfX2JlMTYpX19zd2FiMTYoKHgpKSkKKyNkZWZpbmUgX19iZTE2X3RvX2NwdSh4KSBfX3N3YWIxNigoX191MTYpKF9fYmUxNikoeCkpCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbGU2NCBfX2NwdV90b19sZTY0cChjb25zdCBfX3U2NCAqcCkKK3sKKwlyZXR1cm4gKF9fbGU2NCkqcDsKK30KK3N0YXRpYyBfX2lubGluZV9fIF9fdTY0IF9fbGU2NF90b19jcHVwKGNvbnN0IF9fbGU2NCAqcCkKK3sKKwlyZXR1cm4gKF9fdTY0KSpwOworfQorc3RhdGljIF9faW5saW5lX18gX19sZTMyIF9fY3B1X3RvX2xlMzJwKGNvbnN0IF9fdTMyICpwKQoreworCXJldHVybiAoX19sZTMyKSpwOworfQorc3RhdGljIF9faW5saW5lX18gX191MzIgX19sZTMyX3RvX2NwdXAoY29uc3QgX19sZTMyICpwKQoreworCXJldHVybiAoX191MzIpKnA7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBfX2xlMTYgX19jcHVfdG9fbGUxNnAoY29uc3QgX191MTYgKnApCit7CisJcmV0dXJuIChfX2xlMTYpKnA7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBfX3UxNiBfX2xlMTZfdG9fY3B1cChjb25zdCBfX2xlMTYgKnApCit7CisJcmV0dXJuIChfX3UxNikqcDsKK30KK3N0YXRpYyBfX2lubGluZV9fIF9fYmU2NCBfX2NwdV90b19iZTY0cChjb25zdCBfX3U2NCAqcCkKK3sKKwlyZXR1cm4gKF9fYmU2NClfX3N3YWI2NHAocCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBfX3U2NCBfX2JlNjRfdG9fY3B1cChjb25zdCBfX2JlNjQgKnApCit7CisJcmV0dXJuIF9fc3dhYjY0cCgoX191NjQgKilwKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIF9fYmUzMiBfX2NwdV90b19iZTMycChjb25zdCBfX3UzMiAqcCkKK3sKKwlyZXR1cm4gKF9fYmUzMilfX3N3YWIzMnAocCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBfX3UzMiBfX2JlMzJfdG9fY3B1cChjb25zdCBfX2JlMzIgKnApCit7CisJcmV0dXJuIF9fc3dhYjMycCgoX191MzIgKilwKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIF9fYmUxNiBfX2NwdV90b19iZTE2cChjb25zdCBfX3UxNiAqcCkKK3sKKwlyZXR1cm4gKF9fYmUxNilfX3N3YWIxNnAocCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBfX3UxNiBfX2JlMTZfdG9fY3B1cChjb25zdCBfX2JlMTYgKnApCit7CisJcmV0dXJuIF9fc3dhYjE2cCgoX191MTYgKilwKTsKK30KKyNkZWZpbmUgX19jcHVfdG9fbGU2NHMoeCkgZG8geyAodm9pZCkoeCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fbGU2NF90b19jcHVzKHgpIGRvIHsgKHZvaWQpKHgpOyB9IHdoaWxlICgwKQorI2RlZmluZSBfX2NwdV90b19sZTMycyh4KSBkbyB7ICh2b2lkKSh4KTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX19sZTMyX3RvX2NwdXMoeCkgZG8geyAodm9pZCkoeCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fY3B1X3RvX2xlMTZzKHgpIGRvIHsgKHZvaWQpKHgpOyB9IHdoaWxlICgwKQorI2RlZmluZSBfX2xlMTZfdG9fY3B1cyh4KSBkbyB7ICh2b2lkKSh4KTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX19jcHVfdG9fYmU2NHMoeCkgX19zd2FiNjRzKCh4KSkKKyNkZWZpbmUgX19iZTY0X3RvX2NwdXMoeCkgX19zd2FiNjRzKCh4KSkKKyNkZWZpbmUgX19jcHVfdG9fYmUzMnMoeCkgX19zd2FiMzJzKCh4KSkKKyNkZWZpbmUgX19iZTMyX3RvX2NwdXMoeCkgX19zd2FiMzJzKCh4KSkKKyNkZWZpbmUgX19jcHVfdG9fYmUxNnMoeCkgX19zd2FiMTZzKCh4KSkKKyNkZWZpbmUgX19iZTE2X3RvX2NwdXMoeCkgX19zd2FiMTZzKCh4KSkKKworCisjZW5kaWYgLyogX0xJTlVYX0JZVEVPUkRFUl9MSVRUTEVfRU5ESUFOX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9jYW4uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9jYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTgzMzMzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2Nhbi5oCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogbGludXgvY2FuLmgKKyAqCisgKiBEZWZpbml0aW9ucyBmb3IgQ0FOIG5ldHdvcmsgbGF5ZXIgKHNvY2tldCBhZGRyIC8gQ0FOIGZyYW1lIC8gQ0FOIGZpbHRlcikKKyAqCisgKiBBdXRob3JzOiBPbGl2ZXIgSGFydGtvcHAgPG9saXZlci5oYXJ0a29wcEB2b2xrc3dhZ2VuLmRlPgorICogICAgICAgICAgVXJzIFRodWVybWFubiAgIDx1cnMudGh1ZXJtYW5uQHZvbGtzd2FnZW4uZGU+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNyBWb2xrc3dhZ2VuIEdyb3VwIEVsZWN0cm9uaWMgUmVzZWFyY2gKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU2VuZCBmZWVkYmFjayB0byA8c29ja2V0Y2FuLXVzZXJzQGxpc3RzLmJlcmxpb3MuZGU+CisgKgorICovCisKKyNpZm5kZWYgQ0FOX0gKKyNkZWZpbmUgQ0FOX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisKKy8qIGNvbnRyb2xsZXIgYXJlYSBuZXR3b3JrIChDQU4pIGtlcm5lbCBkZWZpbml0aW9ucyAqLworCisvKiBzcGVjaWFsIGFkZHJlc3MgZGVzY3JpcHRpb24gZmxhZ3MgZm9yIHRoZSBDQU5fSUQgKi8KKyNkZWZpbmUgQ0FOX0VGRl9GTEFHIDB4ODAwMDAwMDBVIC8qIEVGRi9TRkYgaXMgc2V0IGluIHRoZSBNU0IgKi8KKyNkZWZpbmUgQ0FOX1JUUl9GTEFHIDB4NDAwMDAwMDBVIC8qIHJlbW90ZSB0cmFuc21pc3Npb24gcmVxdWVzdCAqLworI2RlZmluZSBDQU5fRVJSX0ZMQUcgMHgyMDAwMDAwMFUgLyogZXJyb3IgZnJhbWUgKi8KKworLyogdmFsaWQgYml0cyBpbiBDQU4gSUQgZm9yIGZyYW1lIGZvcm1hdHMgKi8KKyNkZWZpbmUgQ0FOX1NGRl9NQVNLIDB4MDAwMDA3RkZVIC8qIHN0YW5kYXJkIGZyYW1lIGZvcm1hdCAoU0ZGKSAqLworI2RlZmluZSBDQU5fRUZGX01BU0sgMHgxRkZGRkZGRlUgLyogZXh0ZW5kZWQgZnJhbWUgZm9ybWF0IChFRkYpICovCisjZGVmaW5lIENBTl9FUlJfTUFTSyAweDFGRkZGRkZGVSAvKiBvbWl0IEVGRiwgUlRSLCBFUlIgZmxhZ3MgKi8KKworLyoKKyAqIENvbnRyb2xsZXIgQXJlYSBOZXR3b3JrIElkZW50aWZpZXIgc3RydWN0dXJlCisgKgorICogYml0IDAtMjgJOiBDQU4gaWRlbnRpZmllciAoMTEvMjkgYml0KQorICogYml0IDI5CTogZXJyb3IgZnJhbWUgZmxhZyAoMCA9IGRhdGEgZnJhbWUsIDEgPSBlcnJvciBmcmFtZSkKKyAqIGJpdCAzMAk6IHJlbW90ZSB0cmFuc21pc3Npb24gcmVxdWVzdCBmbGFnICgxID0gcnRyIGZyYW1lKQorICogYml0IDMxCTogZnJhbWUgZm9ybWF0IGZsYWcgKDAgPSBzdGFuZGFyZCAxMSBiaXQsIDEgPSBleHRlbmRlZCAyOSBiaXQpCisgKi8KK3R5cGVkZWYgX191MzIgY2FuaWRfdDsKKworLyoKKyAqIENvbnRyb2xsZXIgQXJlYSBOZXR3b3JrIEVycm9yIEZyYW1lIE1hc2sgc3RydWN0dXJlCisgKgorICogYml0IDAtMjgJOiBlcnJvciBjbGFzcyBtYXNrIChzZWUgaW5jbHVkZS9saW51eC9jYW4vZXJyb3IuaCkKKyAqIGJpdCAyOS0zMQk6IHNldCB0byB6ZXJvCisgKi8KK3R5cGVkZWYgX191MzIgY2FuX2Vycl9tYXNrX3Q7CisKKy8qKgorICogc3RydWN0IGNhbl9mcmFtZSAtIGJhc2ljIENBTiBmcmFtZSBzdHJ1Y3R1cmUKKyAqIEBjYW5faWQ6ICB0aGUgQ0FOIElEIG9mIHRoZSBmcmFtZSBhbmQgQ0FOXypfRkxBRyBmbGFncywgc2VlIGFib3ZlLgorICogQGNhbl9kbGM6IHRoZSBkYXRhIGxlbmd0aCBmaWVsZCBvZiB0aGUgQ0FOIGZyYW1lCisgKiBAZGF0YTogICAgdGhlIENBTiBmcmFtZSBwYXlsb2FkLgorICovCitzdHJ1Y3QgY2FuX2ZyYW1lIHsKKwljYW5pZF90IGNhbl9pZDsgIC8qIDMyIGJpdCBDQU5fSUQgKyBFRkYvUlRSL0VSUiBmbGFncyAqLworCV9fdTggICAgY2FuX2RsYzsgLyogZGF0YSBsZW5ndGggY29kZTogMCAuLiA4ICovCisJX191OCAgICBkYXRhWzhdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKK307CisKKy8qIHBhcnRpY3VsYXIgcHJvdG9jb2xzIG9mIHRoZSBwcm90b2NvbCBmYW1pbHkgUEZfQ0FOICovCisjZGVmaW5lIENBTl9SQVcJCTEgLyogUkFXIHNvY2tldHMgKi8KKyNkZWZpbmUgQ0FOX0JDTQkJMiAvKiBCcm9hZGNhc3QgTWFuYWdlciAqLworI2RlZmluZSBDQU5fVFAxNgkzIC8qIFZBRyBUcmFuc3BvcnQgUHJvdG9jb2wgdjEuNiAqLworI2RlZmluZSBDQU5fVFAyMAk0IC8qIFZBRyBUcmFuc3BvcnQgUHJvdG9jb2wgdjIuMCAqLworI2RlZmluZSBDQU5fTUNORVQJNSAvKiBCb3NjaCBNQ05ldCAqLworI2RlZmluZSBDQU5fSVNPVFAJNiAvKiBJU08gMTU3NjUtMiBUcmFuc3BvcnQgUHJvdG9jb2wgKi8KKyNkZWZpbmUgQ0FOX05QUk9UTwk3CisKKyNkZWZpbmUgU09MX0NBTl9CQVNFIDEwMAorCisvKioKKyAqIHN0cnVjdCBzb2NrYWRkcl9jYW4gLSB0aGUgc29ja2FkZHIgc3RydWN0dXJlIGZvciBDQU4gc29ja2V0cworICogQGNhbl9mYW1pbHk6ICBhZGRyZXNzIGZhbWlseSBudW1iZXIgQUZfQ0FOLgorICogQGNhbl9pZmluZGV4OiBDQU4gbmV0d29yayBpbnRlcmZhY2UgaW5kZXguCisgKiBAY2FuX2FkZHI6ICAgIHByb3RvY29sIHNwZWNpZmljIGFkZHJlc3MgaW5mb3JtYXRpb24KKyAqLworc3RydWN0IHNvY2thZGRyX2NhbiB7CisJc2FfZmFtaWx5X3QgY2FuX2ZhbWlseTsKKwlpbnQgICAgICAgICBjYW5faWZpbmRleDsKKwl1bmlvbiB7CisJCS8qIHRyYW5zcG9ydCBwcm90b2NvbCBjbGFzcyBhZGRyZXNzIGluZm9ybWF0aW9uIChlLmcuIElTT1RQKSAqLworCQlzdHJ1Y3QgeyBjYW5pZF90IHJ4X2lkLCB0eF9pZDsgfSB0cDsKKworCQkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIENBTiBwcm90b2NvbHMgYWRkcmVzcyBpbmZvcm1hdGlvbiAqLworCX0gY2FuX2FkZHI7Cit9OworCisvKioKKyAqIHN0cnVjdCBjYW5fZmlsdGVyIC0gQ0FOIElEIGJhc2VkIGZpbHRlciBpbiBjYW5fcmVnaXN0ZXIoKS4KKyAqIEBjYW5faWQ6ICAgcmVsZXZhbnQgYml0cyBvZiBDQU4gSUQgd2hpY2ggYXJlIG5vdCBtYXNrZWQgb3V0LgorICogQGNhbl9tYXNrOiBDQU4gbWFzayAoc2VlIGRlc2NyaXB0aW9uKQorICoKKyAqIERlc2NyaXB0aW9uOgorICogQSBmaWx0ZXIgbWF0Y2hlcywgd2hlbgorICoKKyAqICAgICAgICAgIDxyZWNlaXZlZF9jYW5faWQ+ICYgbWFzayA9PSBjYW5faWQgJiBtYXNrCisgKgorICogVGhlIGZpbHRlciBjYW4gYmUgaW52ZXJ0ZWQgKENBTl9JTlZfRklMVEVSIGJpdCBzZXQgaW4gY2FuX2lkKSBvciBpdCBjYW4KKyAqIGZpbHRlciBmb3IgZXJyb3IgZnJhbWVzIChDQU5fRVJSX0ZMQUcgYml0IHNldCBpbiBtYXNrKS4KKyAqLworc3RydWN0IGNhbl9maWx0ZXIgeworCWNhbmlkX3QgY2FuX2lkOworCWNhbmlkX3QgY2FuX21hc2s7Cit9OworCisjZGVmaW5lIENBTl9JTlZfRklMVEVSIDB4MjAwMDAwMDBVIC8qIHRvIGJlIHNldCBpbiBjYW5fZmlsdGVyLmNhbl9pZCAqLworCisjZW5kaWYgLyogQ0FOX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9jYW4vYmNtLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvY2FuL2JjbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MzJiMjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvY2FuL2JjbS5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBsaW51eC9jYW4vYmNtLmgKKyAqCisgKiBEZWZpbml0aW9ucyBmb3IgQ0FOIEJyb2FkY2FzdCBNYW5hZ2VyIChCQ00pCisgKgorICogQXV0aG9yOiBPbGl2ZXIgSGFydGtvcHAgPG9saXZlci5oYXJ0a29wcEB2b2xrc3dhZ2VuLmRlPgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDcgVm9sa3N3YWdlbiBHcm91cCBFbGVjdHJvbmljIFJlc2VhcmNoCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNlbmQgZmVlZGJhY2sgdG8gPHNvY2tldGNhbi11c2Vyc0BsaXN0cy5iZXJsaW9zLmRlPgorICoKKyAqLworCisjaWZuZGVmIENBTl9CQ01fSAorI2RlZmluZSBDQU5fQkNNX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qKgorICogc3RydWN0IGJjbV9tc2dfaGVhZCAtIGhlYWQgb2YgbWVzc2FnZXMgdG8vZnJvbSB0aGUgYnJvYWRjYXN0IG1hbmFnZXIKKyAqIEBvcGNvZGU6ICAgIG9wY29kZSwgc2VlIGVudW0gYmVsb3cuCisgKiBAZmxhZ3M6ICAgICBzcGVjaWFsIGZsYWdzLCBzZWUgYmVsb3cuCisgKiBAY291bnQ6ICAgICBudW1iZXIgb2YgZnJhbWVzIHRvIHNlbmQgYmVmb3JlIGNoYW5naW5nIGludGVydmFsLgorICogQGl2YWwxOiAgICAgaW50ZXJ2YWwgZm9yIHRoZSBmaXJzdCBAY291bnQgZnJhbWVzLgorICogQGl2YWwyOiAgICAgaW50ZXJ2YWwgZm9yIHRoZSBmb2xsb3dpbmcgZnJhbWVzLgorICogQGNhbl9pZDogICAgQ0FOIElEIG9mIGZyYW1lcyB0byBiZSBzZW50IG9yIHJlY2VpdmVkLgorICogQG5mcmFtZXM6ICAgbnVtYmVyIG9mIGZyYW1lcyBhcHBlbmRlZCB0byB0aGUgbWVzc2FnZSBoZWFkLgorICogQGZyYW1lczogICAgYXJyYXkgb2YgQ0FOIGZyYW1lcy4KKyAqLworc3RydWN0IGJjbV9tc2dfaGVhZCB7CisJX191MzIgb3Bjb2RlOworCV9fdTMyIGZsYWdzOworCV9fdTMyIGNvdW50OworCXN0cnVjdCB0aW1ldmFsIGl2YWwxLCBpdmFsMjsKKwljYW5pZF90IGNhbl9pZDsKKwlfX3UzMiBuZnJhbWVzOworCXN0cnVjdCBjYW5fZnJhbWUgZnJhbWVzWzBdOworfTsKKworZW51bSB7CisJVFhfU0VUVVAgPSAxLAkvKiBjcmVhdGUgKGN5Y2xpYykgdHJhbnNtaXNzaW9uIHRhc2sgKi8KKwlUWF9ERUxFVEUsCS8qIHJlbW92ZSAoY3ljbGljKSB0cmFuc21pc3Npb24gdGFzayAqLworCVRYX1JFQUQsCS8qIHJlYWQgcHJvcGVydGllcyBvZiAoY3ljbGljKSB0cmFuc21pc3Npb24gdGFzayAqLworCVRYX1NFTkQsCS8qIHNlbmQgb25lIENBTiBmcmFtZSAqLworCVJYX1NFVFVQLAkvKiBjcmVhdGUgUlggY29udGVudCBmaWx0ZXIgc3Vic2NyaXB0aW9uICovCisJUlhfREVMRVRFLAkvKiByZW1vdmUgUlggY29udGVudCBmaWx0ZXIgc3Vic2NyaXB0aW9uICovCisJUlhfUkVBRCwJLyogcmVhZCBwcm9wZXJ0aWVzIG9mIFJYIGNvbnRlbnQgZmlsdGVyIHN1YnNjcmlwdGlvbiAqLworCVRYX1NUQVRVUywJLyogcmVwbHkgdG8gVFhfUkVBRCByZXF1ZXN0ICovCisJVFhfRVhQSVJFRCwJLyogbm90aWZpY2F0aW9uIG9uIHBlcmZvcm1lZCB0cmFuc21pc3Npb25zIChjb3VudD0wKSAqLworCVJYX1NUQVRVUywJLyogcmVwbHkgdG8gUlhfUkVBRCByZXF1ZXN0ICovCisJUlhfVElNRU9VVCwJLyogY3ljbGljIG1lc3NhZ2UgaXMgYWJzZW50ICovCisJUlhfQ0hBTkdFRAkvKiB1cGRhdGVkIENBTiBmcmFtZSAoZGV0ZWN0ZWQgY29udGVudCBjaGFuZ2UpICovCit9OworCisjZGVmaW5lIFNFVFRJTUVSICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIFNUQVJUVElNRVIgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFRYX0NPVU5URVZUICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFRYX0FOTk9VTkNFICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFRYX0NQX0NBTl9JRCAgICAgICAgMHgwMDEwCisjZGVmaW5lIFJYX0ZJTFRFUl9JRCAgICAgICAgMHgwMDIwCisjZGVmaW5lIFJYX0NIRUNLX0RMQyAgICAgICAgMHgwMDQwCisjZGVmaW5lIFJYX05PX0FVVE9USU1FUiAgICAgMHgwMDgwCisjZGVmaW5lIFJYX0FOTk9VTkNFX1JFU1VNRSAgMHgwMTAwCisjZGVmaW5lIFRYX1JFU0VUX01VTFRJX0lEWCAgMHgwMjAwCisjZGVmaW5lIFJYX1JUUl9GUkFNRSAgICAgICAgMHgwNDAwCisKKyNlbmRpZiAvKiBDQU5fQkNNX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9jYW4vZXJyb3IuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9jYW4vZXJyb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDEyN2ZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2Nhbi9lcnJvci5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBsaW51eC9jYW4vZXJyb3IuaAorICoKKyAqIERlZmluaXRpb25zIG9mIHRoZSBDQU4gZXJyb3IgZnJhbWUgdG8gYmUgZmlsdGVyZWQgYW5kIHBhc3NlZCB0byB0aGUgdXNlci4KKyAqCisgKiBBdXRob3I6IE9saXZlciBIYXJ0a29wcCA8b2xpdmVyLmhhcnRrb3BwQHZvbGtzd2FnZW4uZGU+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNyBWb2xrc3dhZ2VuIEdyb3VwIEVsZWN0cm9uaWMgUmVzZWFyY2gKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU2VuZCBmZWVkYmFjayB0byA8c29ja2V0Y2FuLXVzZXJzQGxpc3RzLmJlcmxpb3MuZGU+CisgKgorICovCisKKyNpZm5kZWYgQ0FOX0VSUk9SX0gKKyNkZWZpbmUgQ0FOX0VSUk9SX0gKKworI2RlZmluZSBDQU5fRVJSX0RMQyA4IC8qIGRsYyBmb3IgZXJyb3IgZnJhbWVzICovCisKKy8qIGVycm9yIGNsYXNzIChtYXNrKSBpbiBjYW5faWQgKi8KKyNkZWZpbmUgQ0FOX0VSUl9UWF9USU1FT1VUICAgMHgwMDAwMDAwMVUgLyogVFggdGltZW91dCAoYnkgbmV0ZGV2aWNlIGRyaXZlcikgKi8KKyNkZWZpbmUgQ0FOX0VSUl9MT1NUQVJCICAgICAgMHgwMDAwMDAwMlUgLyogbG9zdCBhcmJpdHJhdGlvbiAgICAvIGRhdGFbMF0gICAgKi8KKyNkZWZpbmUgQ0FOX0VSUl9DUlRMICAgICAgICAgMHgwMDAwMDAwNFUgLyogY29udHJvbGxlciBwcm9ibGVtcyAvIGRhdGFbMV0gICAgKi8KKyNkZWZpbmUgQ0FOX0VSUl9QUk9UICAgICAgICAgMHgwMDAwMDAwOFUgLyogcHJvdG9jb2wgdmlvbGF0aW9ucyAvIGRhdGFbMi4uM10gKi8KKyNkZWZpbmUgQ0FOX0VSUl9UUlggICAgICAgICAgMHgwMDAwMDAxMFUgLyogdHJhbnNjZWl2ZXIgc3RhdHVzICAvIGRhdGFbNF0gICAgKi8KKyNkZWZpbmUgQ0FOX0VSUl9BQ0sgICAgICAgICAgMHgwMDAwMDAyMFUgLyogcmVjZWl2ZWQgbm8gQUNLIG9uIHRyYW5zbWlzc2lvbiAqLworI2RlZmluZSBDQU5fRVJSX0JVU09GRiAgICAgICAweDAwMDAwMDQwVSAvKiBidXMgb2ZmICovCisjZGVmaW5lIENBTl9FUlJfQlVTRVJST1IgICAgIDB4MDAwMDAwODBVIC8qIGJ1cyBlcnJvciAobWF5IGZsb29kISkgKi8KKyNkZWZpbmUgQ0FOX0VSUl9SRVNUQVJURUQgICAgMHgwMDAwMDEwMFUgLyogY29udHJvbGxlciByZXN0YXJ0ZWQgKi8KKworLyogYXJiaXRyYXRpb24gbG9zdCBpbiBiaXQgLi4uIC8gZGF0YVswXSAqLworI2RlZmluZSBDQU5fRVJSX0xPU1RBUkJfVU5TUEVDICAgMHgwMCAvKiB1bnNwZWNpZmllZCAqLworCQkJCSAgICAgIC8qIGVsc2UgYml0IG51bWJlciBpbiBiaXRzdHJlYW0gKi8KKworLyogZXJyb3Igc3RhdHVzIG9mIENBTi1jb250cm9sbGVyIC8gZGF0YVsxXSAqLworI2RlZmluZSBDQU5fRVJSX0NSVExfVU5TUEVDICAgICAgMHgwMCAvKiB1bnNwZWNpZmllZCAqLworI2RlZmluZSBDQU5fRVJSX0NSVExfUlhfT1ZFUkZMT1cgMHgwMSAvKiBSWCBidWZmZXIgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgQ0FOX0VSUl9DUlRMX1RYX09WRVJGTE9XIDB4MDIgLyogVFggYnVmZmVyIG92ZXJmbG93ICovCisjZGVmaW5lIENBTl9FUlJfQ1JUTF9SWF9XQVJOSU5HICAweDA0IC8qIHJlYWNoZWQgd2FybmluZyBsZXZlbCBmb3IgUlggZXJyb3JzICovCisjZGVmaW5lIENBTl9FUlJfQ1JUTF9UWF9XQVJOSU5HICAweDA4IC8qIHJlYWNoZWQgd2FybmluZyBsZXZlbCBmb3IgVFggZXJyb3JzICovCisjZGVmaW5lIENBTl9FUlJfQ1JUTF9SWF9QQVNTSVZFICAweDEwIC8qIHJlYWNoZWQgZXJyb3IgcGFzc2l2ZSBzdGF0dXMgUlggKi8KKyNkZWZpbmUgQ0FOX0VSUl9DUlRMX1RYX1BBU1NJVkUgIDB4MjAgLyogcmVhY2hlZCBlcnJvciBwYXNzaXZlIHN0YXR1cyBUWCAqLworCQkJCSAgICAgIC8qIChhdCBsZWFzdCBvbmUgZXJyb3IgY291bnRlciBleGNlZWRzICovCisJCQkJICAgICAgLyogdGhlIHByb3RvY29sLWRlZmluZWQgbGV2ZWwgb2YgMTI3KSAgKi8KKworLyogZXJyb3IgaW4gQ0FOIHByb3RvY29sICh0eXBlKSAvIGRhdGFbMl0gKi8KKyNkZWZpbmUgQ0FOX0VSUl9QUk9UX1VOU1BFQyAgICAgIDB4MDAgLyogdW5zcGVjaWZpZWQgKi8KKyNkZWZpbmUgQ0FOX0VSUl9QUk9UX0JJVCAgICAgICAgIDB4MDEgLyogc2luZ2xlIGJpdCBlcnJvciAqLworI2RlZmluZSBDQU5fRVJSX1BST1RfRk9STSAgICAgICAgMHgwMiAvKiBmcmFtZSBmb3JtYXQgZXJyb3IgKi8KKyNkZWZpbmUgQ0FOX0VSUl9QUk9UX1NUVUZGICAgICAgIDB4MDQgLyogYml0IHN0dWZmaW5nIGVycm9yICovCisjZGVmaW5lIENBTl9FUlJfUFJPVF9CSVQwICAgICAgICAweDA4IC8qIHVuYWJsZSB0byBzZW5kIGRvbWluYW50IGJpdCAqLworI2RlZmluZSBDQU5fRVJSX1BST1RfQklUMSAgICAgICAgMHgxMCAvKiB1bmFibGUgdG8gc2VuZCByZWNlc3NpdmUgYml0ICovCisjZGVmaW5lIENBTl9FUlJfUFJPVF9PVkVSTE9BRCAgICAweDIwIC8qIGJ1cyBvdmVybG9hZCAqLworI2RlZmluZSBDQU5fRVJSX1BST1RfQUNUSVZFICAgICAgMHg0MCAvKiBhY3RpdmUgZXJyb3IgYW5ub3VuY2VtZW50ICovCisjZGVmaW5lIENBTl9FUlJfUFJPVF9UWCAgICAgICAgICAweDgwIC8qIGVycm9yIG9jY3VyZWQgb24gdHJhbnNtaXNzaW9uICovCisKKy8qIGVycm9yIGluIENBTiBwcm90b2NvbCAobG9jYXRpb24pIC8gZGF0YVszXSAqLworI2RlZmluZSBDQU5fRVJSX1BST1RfTE9DX1VOU1BFQyAgMHgwMCAvKiB1bnNwZWNpZmllZCAqLworI2RlZmluZSBDQU5fRVJSX1BST1RfTE9DX1NPRiAgICAgMHgwMyAvKiBzdGFydCBvZiBmcmFtZSAqLworI2RlZmluZSBDQU5fRVJSX1BST1RfTE9DX0lEMjhfMjEgMHgwMiAvKiBJRCBiaXRzIDI4IC0gMjEgKFNGRjogMTAgLSAzKSAqLworI2RlZmluZSBDQU5fRVJSX1BST1RfTE9DX0lEMjBfMTggMHgwNiAvKiBJRCBiaXRzIDIwIC0gMTggKFNGRjogMiAtIDAgKSovCisjZGVmaW5lIENBTl9FUlJfUFJPVF9MT0NfU1JUUiAgICAweDA0IC8qIHN1YnN0aXR1dGUgUlRSIChTRkY6IFJUUikgKi8KKyNkZWZpbmUgQ0FOX0VSUl9QUk9UX0xPQ19JREUgICAgIDB4MDUgLyogaWRlbnRpZmllciBleHRlbnNpb24gKi8KKyNkZWZpbmUgQ0FOX0VSUl9QUk9UX0xPQ19JRDE3XzEzIDB4MDcgLyogSUQgYml0cyAxNy0xMyAqLworI2RlZmluZSBDQU5fRVJSX1BST1RfTE9DX0lEMTJfMDUgMHgwRiAvKiBJRCBiaXRzIDEyLTUgKi8KKyNkZWZpbmUgQ0FOX0VSUl9QUk9UX0xPQ19JRDA0XzAwIDB4MEUgLyogSUQgYml0cyA0LTAgKi8KKyNkZWZpbmUgQ0FOX0VSUl9QUk9UX0xPQ19SVFIgICAgIDB4MEMgLyogUlRSICovCisjZGVmaW5lIENBTl9FUlJfUFJPVF9MT0NfUkVTMSAgICAweDBEIC8qIHJlc2VydmVkIGJpdCAxICovCisjZGVmaW5lIENBTl9FUlJfUFJPVF9MT0NfUkVTMCAgICAweDA5IC8qIHJlc2VydmVkIGJpdCAwICovCisjZGVmaW5lIENBTl9FUlJfUFJPVF9MT0NfRExDICAgICAweDBCIC8qIGRhdGEgbGVuZ3RoIGNvZGUgKi8KKyNkZWZpbmUgQ0FOX0VSUl9QUk9UX0xPQ19EQVRBICAgIDB4MEEgLyogZGF0YSBzZWN0aW9uICovCisjZGVmaW5lIENBTl9FUlJfUFJPVF9MT0NfQ1JDX1NFUSAweDA4IC8qIENSQyBzZXF1ZW5jZSAqLworI2RlZmluZSBDQU5fRVJSX1BST1RfTE9DX0NSQ19ERUwgMHgxOCAvKiBDUkMgZGVsaW1pdGVyICovCisjZGVmaW5lIENBTl9FUlJfUFJPVF9MT0NfQUNLICAgICAweDE5IC8qIEFDSyBzbG90ICovCisjZGVmaW5lIENBTl9FUlJfUFJPVF9MT0NfQUNLX0RFTCAweDFCIC8qIEFDSyBkZWxpbWl0ZXIgKi8KKyNkZWZpbmUgQ0FOX0VSUl9QUk9UX0xPQ19FT0YgICAgIDB4MUEgLyogZW5kIG9mIGZyYW1lICovCisjZGVmaW5lIENBTl9FUlJfUFJPVF9MT0NfSU5URVJNICAweDEyIC8qIGludGVybWlzc2lvbiAqLworCisvKiBlcnJvciBzdGF0dXMgb2YgQ0FOLXRyYW5zY2VpdmVyIC8gZGF0YVs0XSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQU5IIENBTkwgKi8KKyNkZWZpbmUgQ0FOX0VSUl9UUlhfVU5TUEVDICAgICAgICAgICAgIDB4MDAgLyogMDAwMCAwMDAwICovCisjZGVmaW5lIENBTl9FUlJfVFJYX0NBTkhfTk9fV0lSRSAgICAgICAweDA0IC8qIDAwMDAgMDEwMCAqLworI2RlZmluZSBDQU5fRVJSX1RSWF9DQU5IX1NIT1JUX1RPX0JBVCAgMHgwNSAvKiAwMDAwIDAxMDEgKi8KKyNkZWZpbmUgQ0FOX0VSUl9UUlhfQ0FOSF9TSE9SVF9UT19WQ0MgIDB4MDYgLyogMDAwMCAwMTEwICovCisjZGVmaW5lIENBTl9FUlJfVFJYX0NBTkhfU0hPUlRfVE9fR05EICAweDA3IC8qIDAwMDAgMDExMSAqLworI2RlZmluZSBDQU5fRVJSX1RSWF9DQU5MX05PX1dJUkUgICAgICAgMHg0MCAvKiAwMTAwIDAwMDAgKi8KKyNkZWZpbmUgQ0FOX0VSUl9UUlhfQ0FOTF9TSE9SVF9UT19CQVQgIDB4NTAgLyogMDEwMSAwMDAwICovCisjZGVmaW5lIENBTl9FUlJfVFJYX0NBTkxfU0hPUlRfVE9fVkNDICAweDYwIC8qIDAxMTAgMDAwMCAqLworI2RlZmluZSBDQU5fRVJSX1RSWF9DQU5MX1NIT1JUX1RPX0dORCAgMHg3MCAvKiAwMTExIDAwMDAgKi8KKyNkZWZpbmUgQ0FOX0VSUl9UUlhfQ0FOTF9TSE9SVF9UT19DQU5IIDB4ODAgLyogMTAwMCAwMDAwICovCisKKy8qIGNvbnRyb2xsZXIgc3BlY2lmaWMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiAvIGRhdGFbNS4uN10gKi8KKworI2VuZGlmIC8qIENBTl9FUlJPUl9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvY2FuL25ldGxpbmsuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9jYW4vbmV0bGluay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNTBkZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvY2FuL25ldGxpbmsuaApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIGxpbnV4L2Nhbi9uZXRsaW5rLmgKKyAqCisgKiBEZWZpbml0aW9ucyBmb3IgdGhlIENBTiBuZXRsaW5rIGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBXb2xmZ2FuZyBHcmFuZGVnZ2VyIDx3Z0BncmFuZGVnZ2VyLmNvbT4KKyAqCisgKiBTZW5kIGZlZWRiYWNrIHRvIDxzb2NrZXRjYW4tdXNlcnNAbGlzdHMuYmVybGlvcy5kZT4KKyAqCisgKi8KKworI2lmbmRlZiBDQU5fTkVUTElOS19ICisjZGVmaW5lIENBTl9ORVRMSU5LX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBDQU4gYml0LXRpbWluZyBwYXJhbWV0ZXJzCisgKgorICogRm9yIGZ1dGhlciBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlYWQgY2hhcHRlciAiOCBCSVQgVElNSU5HCisgKiBSRVFVSVJFTUVOVFMiIG9mIHRoZSAiQm9zY2ggQ0FOIFNwZWNpZmljYXRpb24gdmVyc2lvbiAyLjAiCisgKiBhdCBodHRwOi8vd3d3LnNlbWljb25kdWN0b3JzLmJvc2NoLmRlL3BkZi9jYW4yc3BlYy5wZGYuCisgKi8KK3N0cnVjdCBjYW5fYml0dGltaW5nIHsKKwlfX3UzMiBiaXRyYXRlOwkJLyogQml0LXJhdGUgaW4gYml0cy9zZWNvbmQgKi8KKwlfX3UzMiBzYW1wbGVfcG9pbnQ7CS8qIFNhbXBsZSBwb2ludCBpbiBvbmUtdGVudGggb2YgYSBwZXJjZW50ICovCisJX191MzIgdHE7CQkvKiBUaW1lIHF1YW50YSAoVFEpIGluIG5hbm9zZWNvbmRzICovCisJX191MzIgcHJvcF9zZWc7CQkvKiBQcm9wYWdhdGlvbiBzZWdtZW50IGluIFRRcyAqLworCV9fdTMyIHBoYXNlX3NlZzE7CS8qIFBoYXNlIGJ1ZmZlciBzZWdtZW50IDEgaW4gVFFzICovCisJX191MzIgcGhhc2Vfc2VnMjsJLyogUGhhc2UgYnVmZmVyIHNlZ21lbnQgMiBpbiBUUXMgKi8KKwlfX3UzMiBzanc7CQkvKiBTeW5jaHJvbmlzYXRpb24ganVtcCB3aWR0aCBpbiBUUXMgKi8KKwlfX3UzMiBicnA7CQkvKiBCaXQtcmF0ZSBwcmVzY2FsZXIgKi8KK307CisKKy8qCisgKiBDQU4gaGFyd2FyZS1kZXBlbmRlbnQgYml0LXRpbWluZyBjb25zdGFudAorICoKKyAqIFVzZWQgZm9yIGNhbGN1bGF0aW5nIGFuZCBjaGVja2luZyBiaXQtdGltaW5nIHBhcmFtZXRlcnMKKyAqLworc3RydWN0IGNhbl9iaXR0aW1pbmdfY29uc3QgeworCWNoYXIgbmFtZVsxNl07CQkvKiBOYW1lIG9mIHRoZSBDQU4gY29udHJvbGxlciBoYXJkd2FyZSAqLworCV9fdTMyIHRzZWcxX21pbjsJLyogVGltZSBzZWdlbWVudCAxID0gcHJvcF9zZWcgKyBwaGFzZV9zZWcxICovCisJX191MzIgdHNlZzFfbWF4OworCV9fdTMyIHRzZWcyX21pbjsJLyogVGltZSBzZWdlbWVudCAyID0gcGhhc2Vfc2VnMiAqLworCV9fdTMyIHRzZWcyX21heDsKKwlfX3UzMiBzandfbWF4OwkJLyogU3luY2hyb25pc2F0aW9uIGp1bXAgd2lkdGggKi8KKwlfX3UzMiBicnBfbWluOwkJLyogQml0LXJhdGUgcHJlc2NhbGVyICovCisJX191MzIgYnJwX21heDsKKwlfX3UzMiBicnBfaW5jOworfTsKKworLyoKKyAqIENBTiBjbG9jayBwYXJhbWV0ZXJzCisgKi8KK3N0cnVjdCBjYW5fY2xvY2sgeworCV9fdTMyIGZyZXE7CQkvKiBDQU4gc3lzdGVtIGNsb2NrIGZyZXF1ZW5jeSBpbiBIeiAqLworfTsKKworLyoKKyAqIENBTiBvcGVyYXRpb25hbCBhbmQgZXJyb3Igc3RhdGVzCisgKi8KK2VudW0gY2FuX3N0YXRlIHsKKwlDQU5fU1RBVEVfRVJST1JfQUNUSVZFID0gMCwJLyogUlgvVFggZXJyb3IgY291bnQgPCA5NiAqLworCUNBTl9TVEFURV9FUlJPUl9XQVJOSU5HLAkvKiBSWC9UWCBlcnJvciBjb3VudCA8IDEyOCAqLworCUNBTl9TVEFURV9FUlJPUl9QQVNTSVZFLAkvKiBSWC9UWCBlcnJvciBjb3VudCA8IDI1NiAqLworCUNBTl9TVEFURV9CVVNfT0ZGLAkJLyogUlgvVFggZXJyb3IgY291bnQgPj0gMjU2ICovCisJQ0FOX1NUQVRFX1NUT1BQRUQsCQkvKiBEZXZpY2UgaXMgc3RvcHBlZCAqLworCUNBTl9TVEFURV9TTEVFUElORywJCS8qIERldmljZSBpcyBzbGVlcGluZyAqLworCUNBTl9TVEFURV9NQVgKK307CisKKy8qCisgKiBDQU4gYnVzIGVycm9yIGNvdW50ZXJzCisgKi8KK3N0cnVjdCBjYW5fYmVycl9jb3VudGVyIHsKKwlfX3UxNiB0eGVycjsKKwlfX3UxNiByeGVycjsKK307CisKKy8qCisgKiBDQU4gY29udHJvbGxlciBtb2RlCisgKi8KK3N0cnVjdCBjYW5fY3RybG1vZGUgeworCV9fdTMyIG1hc2s7CisJX191MzIgZmxhZ3M7Cit9OworCisjZGVmaW5lIENBTl9DVFJMTU9ERV9MT09QQkFDSwkJMHgwMQkvKiBMb29wYmFjayBtb2RlICovCisjZGVmaW5lIENBTl9DVFJMTU9ERV9MSVNURU5PTkxZCQkweDAyIAkvKiBMaXN0ZW4tb25seSBtb2RlICovCisjZGVmaW5lIENBTl9DVFJMTU9ERV8zX1NBTVBMRVMJCTB4MDQJLyogVHJpcGxlIHNhbXBsaW5nIG1vZGUgKi8KKyNkZWZpbmUgQ0FOX0NUUkxNT0RFX09ORV9TSE9UCQkweDA4CS8qIE9uZS1TaG90IG1vZGUgKi8KKyNkZWZpbmUgQ0FOX0NUUkxNT0RFX0JFUlJfUkVQT1JUSU5HCTB4MTAJLyogQnVzLWVycm9yIHJlcG9ydGluZyAqLworCisvKgorICogQ0FOIGRldmljZSBzdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBjYW5fZGV2aWNlX3N0YXRzIHsKKwlfX3UzMiBidXNfZXJyb3I7CS8qIEJ1cyBlcnJvcnMgKi8KKwlfX3UzMiBlcnJvcl93YXJuaW5nOwkvKiBDaGFuZ2VzIHRvIGVycm9yIHdhcm5pbmcgc3RhdGUgKi8KKwlfX3UzMiBlcnJvcl9wYXNzaXZlOwkvKiBDaGFuZ2VzIHRvIGVycm9yIHBhc3NpdmUgc3RhdGUgKi8KKwlfX3UzMiBidXNfb2ZmOwkJLyogQ2hhbmdlcyB0byBidXMgb2ZmIHN0YXRlICovCisJX191MzIgYXJiaXRyYXRpb25fbG9zdDsgLyogQXJiaXRyYXRpb24gbG9zdCBlcnJvcnMgKi8KKwlfX3UzMiByZXN0YXJ0czsJCS8qIENBTiBjb250cm9sbGVyIHJlLXN0YXJ0cyAqLworfTsKKworLyoKKyAqIENBTiBuZXRsaW5rIGludGVyZmFjZQorICovCitlbnVtIHsKKwlJRkxBX0NBTl9VTlNQRUMsCisJSUZMQV9DQU5fQklUVElNSU5HLAorCUlGTEFfQ0FOX0JJVFRJTUlOR19DT05TVCwKKwlJRkxBX0NBTl9DTE9DSywKKwlJRkxBX0NBTl9TVEFURSwKKwlJRkxBX0NBTl9DVFJMTU9ERSwKKwlJRkxBX0NBTl9SRVNUQVJUX01TLAorCUlGTEFfQ0FOX1JFU1RBUlQsCisJSUZMQV9DQU5fQkVSUl9DT1VOVEVSLAorCV9fSUZMQV9DQU5fTUFYCit9OworCisjZGVmaW5lIElGTEFfQ0FOX01BWAkoX19JRkxBX0NBTl9NQVggLSAxKQorCisjZW5kaWYgLyogQ0FOX05FVExJTktfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2Nhbi9yYXcuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9jYW4vcmF3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJhMGY4NwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9jYW4vcmF3LmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIGxpbnV4L2Nhbi9yYXcuaAorICoKKyAqIERlZmluaXRpb25zIGZvciByYXcgQ0FOIHNvY2tldHMKKyAqCisgKiBBdXRob3JzOiBPbGl2ZXIgSGFydGtvcHAgPG9saXZlci5oYXJ0a29wcEB2b2xrc3dhZ2VuLmRlPgorICogICAgICAgICAgVXJzIFRodWVybWFubiAgIDx1cnMudGh1ZXJtYW5uQHZvbGtzd2FnZW4uZGU+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNyBWb2xrc3dhZ2VuIEdyb3VwIEVsZWN0cm9uaWMgUmVzZWFyY2gKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU2VuZCBmZWVkYmFjayB0byA8c29ja2V0Y2FuLXVzZXJzQGxpc3RzLmJlcmxpb3MuZGU+CisgKgorICovCisKKyNpZm5kZWYgQ0FOX1JBV19ICisjZGVmaW5lIENBTl9SQVdfSAorCisjaW5jbHVkZSA8bGludXgvY2FuLmg+CisKKyNkZWZpbmUgU09MX0NBTl9SQVcgKFNPTF9DQU5fQkFTRSArIENBTl9SQVcpCisKKy8qIGZvciBzb2NrZXQgb3B0aW9ucyBhZmZlY3RpbmcgdGhlIHNvY2tldCAobm90IHRoZSBnbG9iYWwgc3lzdGVtKSAqLworCitlbnVtIHsKKwlDQU5fUkFXX0ZJTFRFUiA9IDEsCS8qIHNldCAwIC4uIG4gY2FuX2ZpbHRlcihzKSAgICAgICAgICAqLworCUNBTl9SQVdfRVJSX0ZJTFRFUiwJLyogc2V0IGZpbHRlciBmb3IgZXJyb3IgZnJhbWVzICAgICAgICovCisJQ0FOX1JBV19MT09QQkFDSywJLyogbG9jYWwgbG9vcGJhY2sgKGRlZmF1bHQ6b24pICAgICAgICovCisJQ0FOX1JBV19SRUNWX09XTl9NU0dTCS8qIHJlY2VpdmUgbXkgb3duIG1zZ3MgKGRlZmF1bHQ6b2ZmKSAqLworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzFjZjgzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaApAQCAtMCwwICsxLDM0NCBAQAorLyoKKyAqIFRoaXMgaXMgPGxpbnV4L2NhcGFiaWxpdHkuaD4KKyAqCisgKiBBbmRyZXcgRy4gTW9yZ2FuIDxtb3JnYW5Aa2VybmVsLm9yZz4KKyAqIEFsZXhhbmRlciBLamVsZGFhcyA8YXN0b3JAZ3VhcmRpYW4ubm8+CisgKiB3aXRoIGhlbHAgZnJvbSBBbGVwaDEsIFJvbGFuZCBCdXJlc3VuZCBhbmQgQW5kcmV3IE1haW4uCisgKgorICogU2VlIGhlcmUgZm9yIHRoZSBsaWJjYXAgbGlicmFyeSAoIlBPU0lYIGRyYWZ0IiBjb21wbGlhbmNlKToKKyAqCisgKiBmdHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvbGlicy9zZWN1cml0eS9saW51eC1wcml2cy9rZXJuZWwtMi42LworICovCisKKyNpZm5kZWYgX0xJTlVYX0NBUEFCSUxJVFlfSAorI2RlZmluZSBfTElOVVhfQ0FQQUJJTElUWV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKKy8qIFVzZXItbGV2ZWwgZG8gbW9zdCBvZiB0aGUgbWFwcGluZyBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlcgorICAgY2FwYWJpbGl0aWVzIGJhc2VkIG9uIHRoZSB2ZXJzaW9uIHRhZyBnaXZlbiBieSB0aGUga2VybmVsLiBUaGUKKyAgIGtlcm5lbCBtaWdodCBiZSBzb21ld2hhdCBiYWNrd2FyZHMgY29tcGF0aWJsZSwgYnV0IGRvbid0IGJldCBvbgorICAgaXQuICovCisKKy8qIE5vdGUsIGNhcF90LCBpcyBkZWZpbmVkIGJ5IFBPU0lYIChkcmFmdCkgdG8gYmUgYW4gIm9wYXF1ZSIgcG9pbnRlciB0bworICAgYSBzZXQgb2YgdGhyZWUgY2FwYWJpbGl0eSBzZXRzLiAgVGhlIHRyYW5zcG9zaXRpb24gb2YgMyp0aGUKKyAgIGZvbGxvd2luZyBzdHJ1Y3R1cmUgdG8gc3VjaCBhIGNvbXBvc2l0ZSBpcyBiZXR0ZXIgaGFuZGxlZCBpbiBhIHVzZXIKKyAgIGxpYnJhcnkgc2luY2UgdGhlIGRyYWZ0IHN0YW5kYXJkIHJlcXVpcmVzIHRoZSB1c2Ugb2YgbWFsbG9jL2ZyZWUKKyAgIGV0Yy4uICovCisKKyNkZWZpbmUgX0xJTlVYX0NBUEFCSUxJVFlfVkVSU0lPTl8xICAweDE5OTgwMzMwCisjZGVmaW5lIF9MSU5VWF9DQVBBQklMSVRZX1UzMlNfMSAgICAgMQorCisjZGVmaW5lIF9MSU5VWF9DQVBBQklMSVRZX1ZFUlNJT05fMiAgMHgyMDA3MTAyNiAgLyogZGVwcmVjYXRlZCAtIHVzZSB2MyAqLworI2RlZmluZSBfTElOVVhfQ0FQQUJJTElUWV9VMzJTXzIgICAgIDIKKworI2RlZmluZSBfTElOVVhfQ0FQQUJJTElUWV9WRVJTSU9OXzMgIDB4MjAwODA1MjIKKyNkZWZpbmUgX0xJTlVYX0NBUEFCSUxJVFlfVTMyU18zICAgICAyCisKK3R5cGVkZWYgc3RydWN0IF9fdXNlcl9jYXBfaGVhZGVyX3N0cnVjdCB7CisJX191MzIgdmVyc2lvbjsKKwlpbnQgcGlkOworfSAqY2FwX3VzZXJfaGVhZGVyX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9fdXNlcl9jYXBfZGF0YV9zdHJ1Y3QgeworICAgICAgICBfX3UzMiBlZmZlY3RpdmU7CisgICAgICAgIF9fdTMyIHBlcm1pdHRlZDsKKyAgICAgICAgX191MzIgaW5oZXJpdGFibGU7Cit9ICpjYXBfdXNlcl9kYXRhX3Q7CisKKworI2RlZmluZSBWRlNfQ0FQX1JFVklTSU9OX01BU0sJMHhGRjAwMDAwMAorI2RlZmluZSBWRlNfQ0FQX1JFVklTSU9OX1NISUZUCTI0CisjZGVmaW5lIFZGU19DQVBfRkxBR1NfTUFTSwl+VkZTX0NBUF9SRVZJU0lPTl9NQVNLCisjZGVmaW5lIFZGU19DQVBfRkxBR1NfRUZGRUNUSVZFCTB4MDAwMDAxCisKKyNkZWZpbmUgVkZTX0NBUF9SRVZJU0lPTl8xCTB4MDEwMDAwMDAKKyNkZWZpbmUgVkZTX0NBUF9VMzJfMSAgICAgICAgICAgMQorI2RlZmluZSBYQVRUUl9DQVBTX1NaXzEgICAgICAgICAoc2l6ZW9mKF9fbGUzMikqKDEgKyAyKlZGU19DQVBfVTMyXzEpKQorCisjZGVmaW5lIFZGU19DQVBfUkVWSVNJT05fMgkweDAyMDAwMDAwCisjZGVmaW5lIFZGU19DQVBfVTMyXzIgICAgICAgICAgIDIKKyNkZWZpbmUgWEFUVFJfQ0FQU19TWl8yICAgICAgICAgKHNpemVvZihfX2xlMzIpKigxICsgMipWRlNfQ0FQX1UzMl8yKSkKKworI2RlZmluZSBYQVRUUl9DQVBTX1NaICAgICAgICAgICBYQVRUUl9DQVBTX1NaXzIKKyNkZWZpbmUgVkZTX0NBUF9VMzIgICAgICAgICAgICAgVkZTX0NBUF9VMzJfMgorI2RlZmluZSBWRlNfQ0FQX1JFVklTSU9OCVZGU19DQVBfUkVWSVNJT05fMgorCitzdHJ1Y3QgdmZzX2NhcF9kYXRhIHsKKwlfX2xlMzIgbWFnaWNfZXRjOyAgICAgICAgICAgIC8qIExpdHRsZSBlbmRpYW4gKi8KKwlzdHJ1Y3QgeworCQlfX2xlMzIgcGVybWl0dGVkOyAgICAvKiBMaXR0bGUgZW5kaWFuICovCisJCV9fbGUzMiBpbmhlcml0YWJsZTsgIC8qIExpdHRsZSBlbmRpYW4gKi8KKwl9IGRhdGFbVkZTX0NBUF9VMzJdOworfTsKKworCisvKgorICogQmFja3dhcmRseSBjb21wYXRpYmxlIGRlZmluaXRpb24gZm9yIHNvdXJjZSBjb2RlIC0gdHJhcHBlZCBpbiBhCisgKiAzMi1iaXQgd29ybGQuIElmIHlvdSBmaW5kIHlvdSBuZWVkIHRoaXMsIHBsZWFzZSBjb25zaWRlciB1c2luZworICogbGliY2FwIHRvIHVudHJhcCB5b3Vyc2VsZi4uLgorICovCisjZGVmaW5lIF9MSU5VWF9DQVBBQklMSVRZX1ZFUlNJT04gIF9MSU5VWF9DQVBBQklMSVRZX1ZFUlNJT05fMQorI2RlZmluZSBfTElOVVhfQ0FQQUJJTElUWV9VMzJTICAgICBfTElOVVhfQ0FQQUJJTElUWV9VMzJTXzEKKworCisKKy8qKgorICoqIFBPU0lYLWRyYWZ0IGRlZmluZWQgY2FwYWJpbGl0aWVzLgorICoqLworCisvKiBJbiBhIHN5c3RlbSB3aXRoIHRoZSBbX1BPU0lYX0NIT1dOX1JFU1RSSUNURURdIG9wdGlvbiBkZWZpbmVkLCB0aGlzCisgICBvdmVycmlkZXMgdGhlIHJlc3RyaWN0aW9uIG9mIGNoYW5naW5nIGZpbGUgb3duZXJzaGlwIGFuZCBncm91cAorICAgb3duZXJzaGlwLiAqLworCisjZGVmaW5lIENBUF9DSE9XTiAgICAgICAgICAgIDAKKworLyogT3ZlcnJpZGUgYWxsIERBQyBhY2Nlc3MsIGluY2x1ZGluZyBBQ0wgZXhlY3V0ZSBhY2Nlc3MgaWYKKyAgIFtfUE9TSVhfQUNMXSBpcyBkZWZpbmVkLiBFeGNsdWRpbmcgREFDIGFjY2VzcyBjb3ZlcmVkIGJ5CisgICBDQVBfTElOVVhfSU1NVVRBQkxFLiAqLworCisjZGVmaW5lIENBUF9EQUNfT1ZFUlJJREUgICAgIDEKKworLyogT3ZlcnJpZGVzIGFsbCBEQUMgcmVzdHJpY3Rpb25zIHJlZ2FyZGluZyByZWFkIGFuZCBzZWFyY2ggb24gZmlsZXMKKyAgIGFuZCBkaXJlY3RvcmllcywgaW5jbHVkaW5nIEFDTCByZXN0cmljdGlvbnMgaWYgW19QT1NJWF9BQ0xdIGlzCisgICBkZWZpbmVkLiBFeGNsdWRpbmcgREFDIGFjY2VzcyBjb3ZlcmVkIGJ5IENBUF9MSU5VWF9JTU1VVEFCTEUuICovCisKKyNkZWZpbmUgQ0FQX0RBQ19SRUFEX1NFQVJDSCAgMgorCisvKiBPdmVycmlkZXMgYWxsIHJlc3RyaWN0aW9ucyBhYm91dCBhbGxvd2VkIG9wZXJhdGlvbnMgb24gZmlsZXMsIHdoZXJlCisgICBmaWxlIG93bmVyIElEIG11c3QgYmUgZXF1YWwgdG8gdGhlIHVzZXIgSUQsIGV4Y2VwdCB3aGVyZSBDQVBfRlNFVElECisgICBpcyBhcHBsaWNhYmxlLiBJdCBkb2Vzbid0IG92ZXJyaWRlIE1BQyBhbmQgREFDIHJlc3RyaWN0aW9ucy4gKi8KKworI2RlZmluZSBDQVBfRk9XTkVSICAgICAgICAgICAzCisKKy8qIE92ZXJyaWRlcyB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9ucyB0aGF0IHRoZSBlZmZlY3RpdmUgdXNlciBJRAorICAgc2hhbGwgbWF0Y2ggdGhlIGZpbGUgb3duZXIgSUQgd2hlbiBzZXR0aW5nIHRoZSBTX0lTVUlEIGFuZCBTX0lTR0lECisgICBiaXRzIG9uIHRoYXQgZmlsZTsgdGhhdCB0aGUgZWZmZWN0aXZlIGdyb3VwIElEIChvciBvbmUgb2YgdGhlCisgICBzdXBwbGVtZW50YXJ5IGdyb3VwIElEcykgc2hhbGwgbWF0Y2ggdGhlIGZpbGUgb3duZXIgSUQgd2hlbiBzZXR0aW5nCisgICB0aGUgU19JU0dJRCBiaXQgb24gdGhhdCBmaWxlOyB0aGF0IHRoZSBTX0lTVUlEIGFuZCBTX0lTR0lEIGJpdHMgYXJlCisgICBjbGVhcmVkIG9uIHN1Y2Nlc3NmdWwgcmV0dXJuIGZyb20gY2hvd24oMikgKG5vdCBpbXBsZW1lbnRlZCkuICovCisKKyNkZWZpbmUgQ0FQX0ZTRVRJRCAgICAgICAgICAgNAorCisvKiBPdmVycmlkZXMgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhlIHJlYWwgb3IgZWZmZWN0aXZlIHVzZXIgSUQgb2YgYQorICAgcHJvY2VzcyBzZW5kaW5nIGEgc2lnbmFsIG11c3QgbWF0Y2ggdGhlIHJlYWwgb3IgZWZmZWN0aXZlIHVzZXIgSUQKKyAgIG9mIHRoZSBwcm9jZXNzIHJlY2VpdmluZyB0aGUgc2lnbmFsLiAqLworCisjZGVmaW5lIENBUF9LSUxMICAgICAgICAgICAgIDUKKworLyogQWxsb3dzIHNldGdpZCgyKSBtYW5pcHVsYXRpb24gKi8KKy8qIEFsbG93cyBzZXRncm91cHMoMikgKi8KKy8qIEFsbG93cyBmb3JnZWQgZ2lkcyBvbiBzb2NrZXQgY3JlZGVudGlhbHMgcGFzc2luZy4gKi8KKworI2RlZmluZSBDQVBfU0VUR0lEICAgICAgICAgICA2CisKKy8qIEFsbG93cyBzZXQqdWlkKDIpIG1hbmlwdWxhdGlvbiAoaW5jbHVkaW5nIGZzdWlkKS4gKi8KKy8qIEFsbG93cyBmb3JnZWQgcGlkcyBvbiBzb2NrZXQgY3JlZGVudGlhbHMgcGFzc2luZy4gKi8KKworI2RlZmluZSBDQVBfU0VUVUlEICAgICAgICAgICA3CisKKworLyoqCisgKiogTGludXgtc3BlY2lmaWMgY2FwYWJpbGl0aWVzCisgKiovCisKKy8qIFdpdGhvdXQgVkZTIHN1cHBvcnQgZm9yIGNhcGFiaWxpdGllczoKKyAqICAgVHJhbnNmZXIgYW55IGNhcGFiaWxpdHkgaW4geW91ciBwZXJtaXR0ZWQgc2V0IHRvIGFueSBwaWQsCisgKiAgIHJlbW92ZSBhbnkgY2FwYWJpbGl0eSBpbiB5b3VyIHBlcm1pdHRlZCBzZXQgZnJvbSBhbnkgcGlkCisgKiBXaXRoIFZGUyBzdXBwb3J0IGZvciBjYXBhYmlsaXRpZXMgKG5laXRoZXIgb2YgYWJvdmUsIGJ1dCkKKyAqICAgQWRkIGFueSBjYXBhYmlsaXR5IGZyb20gY3VycmVudCdzIGNhcGFiaWxpdHkgYm91bmRpbmcgc2V0CisgKiAgICAgICB0byB0aGUgY3VycmVudCBwcm9jZXNzJyBpbmhlcml0YWJsZSBzZXQKKyAqICAgQWxsb3cgdGFraW5nIGJpdHMgb3V0IG9mIGNhcGFiaWxpdHkgYm91bmRpbmcgc2V0CisgKiAgIEFsbG93IG1vZGlmaWNhdGlvbiBvZiB0aGUgc2VjdXJlYml0cyBmb3IgYSBwcm9jZXNzCisgKi8KKworI2RlZmluZSBDQVBfU0VUUENBUCAgICAgICAgICA4CisKKy8qIEFsbG93IG1vZGlmaWNhdGlvbiBvZiBTX0lNTVVUQUJMRSBhbmQgU19BUFBFTkQgZmlsZSBhdHRyaWJ1dGVzICovCisKKyNkZWZpbmUgQ0FQX0xJTlVYX0lNTVVUQUJMRSAgOQorCisvKiBBbGxvd3MgYmluZGluZyB0byBUQ1AvVURQIHNvY2tldHMgYmVsb3cgMTAyNCAqLworLyogQWxsb3dzIGJpbmRpbmcgdG8gQVRNIFZDSXMgYmVsb3cgMzIgKi8KKworI2RlZmluZSBDQVBfTkVUX0JJTkRfU0VSVklDRSAxMAorCisvKiBBbGxvdyBicm9hZGNhc3RpbmcsIGxpc3RlbiB0byBtdWx0aWNhc3QgKi8KKworI2RlZmluZSBDQVBfTkVUX0JST0FEQ0FTVCAgICAxMQorCisvKiBBbGxvdyBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiAqLworLyogQWxsb3cgYWRtaW5pc3RyYXRpb24gb2YgSVAgZmlyZXdhbGwsIG1hc3F1ZXJhZGluZyBhbmQgYWNjb3VudGluZyAqLworLyogQWxsb3cgc2V0dGluZyBkZWJ1ZyBvcHRpb24gb24gc29ja2V0cyAqLworLyogQWxsb3cgbW9kaWZpY2F0aW9uIG9mIHJvdXRpbmcgdGFibGVzICovCisvKiBBbGxvdyBzZXR0aW5nIGFyYml0cmFyeSBwcm9jZXNzIC8gcHJvY2VzcyBncm91cCBvd25lcnNoaXAgb24KKyAgIHNvY2tldHMgKi8KKy8qIEFsbG93IGJpbmRpbmcgdG8gYW55IGFkZHJlc3MgZm9yIHRyYW5zcGFyZW50IHByb3h5aW5nICovCisvKiBBbGxvdyBzZXR0aW5nIFRPUyAodHlwZSBvZiBzZXJ2aWNlKSAqLworLyogQWxsb3cgc2V0dGluZyBwcm9taXNjdW91cyBtb2RlICovCisvKiBBbGxvdyBjbGVhcmluZyBkcml2ZXIgc3RhdGlzdGljcyAqLworLyogQWxsb3cgbXVsdGljYXN0aW5nICovCisvKiBBbGxvdyByZWFkL3dyaXRlIG9mIGRldmljZS1zcGVjaWZpYyByZWdpc3RlcnMgKi8KKy8qIEFsbG93IGFjdGl2YXRpb24gb2YgQVRNIGNvbnRyb2wgc29ja2V0cyAqLworCisjZGVmaW5lIENBUF9ORVRfQURNSU4gICAgICAgIDEyCisKKy8qIEFsbG93IHVzZSBvZiBSQVcgc29ja2V0cyAqLworLyogQWxsb3cgdXNlIG9mIFBBQ0tFVCBzb2NrZXRzICovCisKKyNkZWZpbmUgQ0FQX05FVF9SQVcgICAgICAgICAgMTMKKworLyogQWxsb3cgbG9ja2luZyBvZiBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzICovCisvKiBBbGxvdyBtbG9jayBhbmQgbWxvY2thbGwgKHdoaWNoIGRvZXNuJ3QgcmVhbGx5IGhhdmUgYW55dGhpbmcgdG8gZG8KKyAgIHdpdGggSVBDKSAqLworCisjZGVmaW5lIENBUF9JUENfTE9DSyAgICAgICAgIDE0CisKKy8qIE92ZXJyaWRlIElQQyBvd25lcnNoaXAgY2hlY2tzICovCisKKyNkZWZpbmUgQ0FQX0lQQ19PV05FUiAgICAgICAgMTUKKworLyogSW5zZXJ0IGFuZCByZW1vdmUga2VybmVsIG1vZHVsZXMgLSBtb2RpZnkga2VybmVsIHdpdGhvdXQgbGltaXQgKi8KKyNkZWZpbmUgQ0FQX1NZU19NT0RVTEUgICAgICAgMTYKKworLyogQWxsb3cgaW9wZXJtL2lvcGwgYWNjZXNzICovCisvKiBBbGxvdyBzZW5kaW5nIFVTQiBtZXNzYWdlcyB0byBhbnkgZGV2aWNlIHZpYSAvcHJvYy9idXMvdXNiICovCisKKyNkZWZpbmUgQ0FQX1NZU19SQVdJTyAgICAgICAgMTcKKworLyogQWxsb3cgdXNlIG9mIGNocm9vdCgpICovCisKKyNkZWZpbmUgQ0FQX1NZU19DSFJPT1QgICAgICAgMTgKKworLyogQWxsb3cgcHRyYWNlKCkgb2YgYW55IHByb2Nlc3MgKi8KKworI2RlZmluZSBDQVBfU1lTX1BUUkFDRSAgICAgICAxOQorCisvKiBBbGxvdyBjb25maWd1cmF0aW9uIG9mIHByb2Nlc3MgYWNjb3VudGluZyAqLworCisjZGVmaW5lIENBUF9TWVNfUEFDQ1QgICAgICAgIDIwCisKKy8qIEFsbG93IGNvbmZpZ3VyYXRpb24gb2YgdGhlIHNlY3VyZSBhdHRlbnRpb24ga2V5ICovCisvKiBBbGxvdyBhZG1pbmlzdHJhdGlvbiBvZiB0aGUgcmFuZG9tIGRldmljZSAqLworLyogQWxsb3cgZXhhbWluYXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gb2YgZGlzayBxdW90YXMgKi8KKy8qIEFsbG93IGNvbmZpZ3VyaW5nIHRoZSBrZXJuZWwncyBzeXNsb2cgKHByaW50ayBiZWhhdmlvdXIpICovCisvKiBBbGxvdyBzZXR0aW5nIHRoZSBkb21haW5uYW1lICovCisvKiBBbGxvdyBzZXR0aW5nIHRoZSBob3N0bmFtZSAqLworLyogQWxsb3cgY2FsbGluZyBiZGZsdXNoKCkgKi8KKy8qIEFsbG93IG1vdW50KCkgYW5kIHVtb3VudCgpLCBzZXR0aW5nIHVwIG5ldyBzbWIgY29ubmVjdGlvbiAqLworLyogQWxsb3cgc29tZSBhdXRvZnMgcm9vdCBpb2N0bHMgKi8KKy8qIEFsbG93IG5mc3NlcnZjdGwgKi8KKy8qIEFsbG93IFZNODZfUkVRVUVTVF9JUlEgKi8KKy8qIEFsbG93IHRvIHJlYWQvd3JpdGUgcGNpIGNvbmZpZyBvbiBhbHBoYSAqLworLyogQWxsb3cgaXJpeF9wcmN0bCBvbiBtaXBzIChzZXRzdGFja3NpemUpICovCisvKiBBbGxvdyBmbHVzaGluZyBhbGwgY2FjaGUgb24gbTY4ayAoc3lzX2NhY2hlZmx1c2gpICovCisvKiBBbGxvdyByZW1vdmluZyBzZW1hcGhvcmVzICovCisvKiBVc2VkIGluc3RlYWQgb2YgQ0FQX0NIT1dOIHRvICJjaG93biIgSVBDIG1lc3NhZ2UgcXVldWVzLCBzZW1hcGhvcmVzCisgICBhbmQgc2hhcmVkIG1lbW9yeSAqLworLyogQWxsb3cgbG9ja2luZy91bmxvY2tpbmcgb2Ygc2hhcmVkIG1lbW9yeSBzZWdtZW50ICovCisvKiBBbGxvdyB0dXJuaW5nIHN3YXAgb24vb2ZmICovCisvKiBBbGxvdyBmb3JnZWQgcGlkcyBvbiBzb2NrZXQgY3JlZGVudGlhbHMgcGFzc2luZyAqLworLyogQWxsb3cgc2V0dGluZyByZWFkYWhlYWQgYW5kIGZsdXNoaW5nIGJ1ZmZlcnMgb24gYmxvY2sgZGV2aWNlcyAqLworLyogQWxsb3cgc2V0dGluZyBnZW9tZXRyeSBpbiBmbG9wcHkgZHJpdmVyICovCisvKiBBbGxvdyB0dXJuaW5nIERNQSBvbi9vZmYgaW4geGQgZHJpdmVyICovCisvKiBBbGxvdyBhZG1pbmlzdHJhdGlvbiBvZiBtZCBkZXZpY2VzIChtb3N0bHkgdGhlIGFib3ZlLCBidXQgc29tZQorICAgZXh0cmEgaW9jdGxzKSAqLworLyogQWxsb3cgdHVuaW5nIHRoZSBpZGUgZHJpdmVyICovCisvKiBBbGxvdyBhY2Nlc3MgdG8gdGhlIG52cmFtIGRldmljZSAqLworLyogQWxsb3cgYWRtaW5pc3RyYXRpb24gb2YgYXBtX2Jpb3MsIHNlcmlhbCBhbmQgYnR0diAoVFYpIGRldmljZSAqLworLyogQWxsb3cgbWFudWZhY3R1cmVyIGNvbW1hbmRzIGluIGlzZG4gQ0FQSSBzdXBwb3J0IGRyaXZlciAqLworLyogQWxsb3cgcmVhZGluZyBub24tc3RhbmRhcmRpemVkIHBvcnRpb25zIG9mIHBjaSBjb25maWd1cmF0aW9uIHNwYWNlICovCisvKiBBbGxvdyBEREkgZGVidWcgaW9jdGwgb24gc2JwY2QgZHJpdmVyICovCisvKiBBbGxvdyBzZXR0aW5nIHVwIHNlcmlhbCBwb3J0cyAqLworLyogQWxsb3cgc2VuZGluZyByYXcgcWljLTExNyBjb21tYW5kcyAqLworLyogQWxsb3cgZW5hYmxpbmcvZGlzYWJsaW5nIHRhZ2dlZCBxdWV1aW5nIG9uIFNDU0kgY29udHJvbGxlcnMgYW5kIHNlbmRpbmcKKyAgIGFyYml0cmFyeSBTQ1NJIGNvbW1hbmRzICovCisvKiBBbGxvdyBzZXR0aW5nIGVuY3J5cHRpb24ga2V5IG9uIGxvb3BiYWNrIGZpbGVzeXN0ZW0gKi8KKy8qIEFsbG93IHNldHRpbmcgem9uZSByZWNsYWltIHBvbGljeSAqLworCisjZGVmaW5lIENBUF9TWVNfQURNSU4gICAgICAgIDIxCisKKy8qIEFsbG93IHVzZSBvZiByZWJvb3QoKSAqLworCisjZGVmaW5lIENBUF9TWVNfQk9PVCAgICAgICAgIDIyCisKKy8qIEFsbG93IHJhaXNpbmcgcHJpb3JpdHkgYW5kIHNldHRpbmcgcHJpb3JpdHkgb24gb3RoZXIgKGRpZmZlcmVudAorICAgVUlEKSBwcm9jZXNzZXMgKi8KKy8qIEFsbG93IHVzZSBvZiBGSUZPIGFuZCByb3VuZC1yb2JpbiAocmVhbHRpbWUpIHNjaGVkdWxpbmcgb24gb3duCisgICBwcm9jZXNzZXMgYW5kIHNldHRpbmcgdGhlIHNjaGVkdWxpbmcgYWxnb3JpdGhtIHVzZWQgYnkgYW5vdGhlcgorICAgcHJvY2Vzcy4gKi8KKy8qIEFsbG93IHNldHRpbmcgY3B1IGFmZmluaXR5IG9uIG90aGVyIHByb2Nlc3NlcyAqLworCisjZGVmaW5lIENBUF9TWVNfTklDRSAgICAgICAgIDIzCisKKy8qIE92ZXJyaWRlIHJlc291cmNlIGxpbWl0cy4gU2V0IHJlc291cmNlIGxpbWl0cy4gKi8KKy8qIE92ZXJyaWRlIHF1b3RhIGxpbWl0cy4gKi8KKy8qIE92ZXJyaWRlIHJlc2VydmVkIHNwYWNlIG9uIGV4dDIgZmlsZXN5c3RlbSAqLworLyogTW9kaWZ5IGRhdGEgam91cm5hbGluZyBtb2RlIG9uIGV4dDMgZmlsZXN5c3RlbSAodXNlcyBqb3VybmFsaW5nCisgICByZXNvdXJjZXMpICovCisvKiBOT1RFOiBleHQyIGhvbm9ycyBmc3VpZCB3aGVuIGNoZWNraW5nIGZvciByZXNvdXJjZSBvdmVycmlkZXMsIHNvCisgICB5b3UgY2FuIG92ZXJyaWRlIHVzaW5nIGZzdWlkIHRvbyAqLworLyogT3ZlcnJpZGUgc2l6ZSByZXN0cmljdGlvbnMgb24gSVBDIG1lc3NhZ2UgcXVldWVzICovCisvKiBBbGxvdyBtb3JlIHRoYW4gNjRoeiBpbnRlcnJ1cHRzIGZyb20gdGhlIHJlYWwtdGltZSBjbG9jayAqLworLyogT3ZlcnJpZGUgbWF4IG51bWJlciBvZiBjb25zb2xlcyBvbiBjb25zb2xlIGFsbG9jYXRpb24gKi8KKy8qIE92ZXJyaWRlIG1heCBudW1iZXIgb2Yga2V5bWFwcyAqLworCisjZGVmaW5lIENBUF9TWVNfUkVTT1VSQ0UgICAgIDI0CisKKy8qIEFsbG93IG1hbmlwdWxhdGlvbiBvZiBzeXN0ZW0gY2xvY2sgKi8KKy8qIEFsbG93IGlyaXhfc3RpbWUgb24gbWlwcyAqLworLyogQWxsb3cgc2V0dGluZyB0aGUgcmVhbC10aW1lIGNsb2NrICovCisKKyNkZWZpbmUgQ0FQX1NZU19USU1FICAgICAgICAgMjUKKworLyogQWxsb3cgY29uZmlndXJhdGlvbiBvZiB0dHkgZGV2aWNlcyAqLworLyogQWxsb3cgdmhhbmd1cCgpIG9mIHR0eSAqLworCisjZGVmaW5lIENBUF9TWVNfVFRZX0NPTkZJRyAgIDI2CisKKy8qIEFsbG93IHRoZSBwcml2aWxlZ2VkIGFzcGVjdHMgb2YgbWtub2QoKSAqLworCisjZGVmaW5lIENBUF9NS05PRCAgICAgICAgICAgIDI3CisKKy8qIEFsbG93IHRha2luZyBvZiBsZWFzZXMgb24gZmlsZXMgKi8KKworI2RlZmluZSBDQVBfTEVBU0UgICAgICAgICAgICAyOAorCisjZGVmaW5lIENBUF9BVURJVF9XUklURSAgICAgIDI5CisKKyNkZWZpbmUgQ0FQX0FVRElUX0NPTlRST0wgICAgMzAKKworI2RlZmluZSBDQVBfU0VURkNBUAkgICAgIDMxCisKKy8qIE92ZXJyaWRlIE1BQyBhY2Nlc3MuCisgICBUaGUgYmFzZSBrZXJuZWwgZW5mb3JjZXMgbm8gTUFDIHBvbGljeS4KKyAgIEFuIExTTSBtYXkgZW5mb3JjZSBhIE1BQyBwb2xpY3ksIGFuZCBpZiBpdCBkb2VzIGFuZCBpdCBjaG9vc2VzCisgICB0byBpbXBsZW1lbnQgY2FwYWJpbGl0eSBiYXNlZCBvdmVycmlkZXMgb2YgdGhhdCBwb2xpY3ksIHRoaXMgaXMKKyAgIHRoZSBjYXBhYmlsaXR5IGl0IHNob3VsZCB1c2UgdG8gZG8gc28uICovCisKKyNkZWZpbmUgQ0FQX01BQ19PVkVSUklERSAgICAgMzIKKworLyogQWxsb3cgTUFDIGNvbmZpZ3VyYXRpb24gb3Igc3RhdGUgY2hhbmdlcy4KKyAgIFRoZSBiYXNlIGtlcm5lbCByZXF1aXJlcyBubyBNQUMgY29uZmlndXJhdGlvbi4KKyAgIEFuIExTTSBtYXkgZW5mb3JjZSBhIE1BQyBwb2xpY3ksIGFuZCBpZiBpdCBkb2VzIGFuZCBpdCBjaG9vc2VzCisgICB0byBpbXBsZW1lbnQgY2FwYWJpbGl0eSBiYXNlZCBjaGVja3Mgb24gbW9kaWZpY2F0aW9ucyB0byB0aGF0CisgICBwb2xpY3kgb3IgdGhlIGRhdGEgcmVxdWlyZWQgdG8gbWFpbnRhaW4gaXQsIHRoaXMgaXMgdGhlCisgICBjYXBhYmlsaXR5IGl0IHNob3VsZCB1c2UgdG8gZG8gc28uICovCisKKyNkZWZpbmUgQ0FQX01BQ19BRE1JTiAgICAgICAgMzMKKworI2RlZmluZSBDQVBfTEFTVF9DQVAgICAgICAgICBDQVBfTUFDX0FETUlOCisKKyNkZWZpbmUgY2FwX3ZhbGlkKHgpICgoeCkgPj0gMCAmJiAoeCkgPD0gQ0FQX0xBU1RfQ0FQKQorCisvKgorICogQml0IGxvY2F0aW9uIG9mIGVhY2ggY2FwYWJpbGl0eSAodXNlZCBieSB1c2VyLXNwYWNlIGxpYnJhcnkgYW5kIGtlcm5lbCkKKyAqLworCisjZGVmaW5lIENBUF9UT19JTkRFWCh4KSAgICAgKCh4KSA+PiA1KSAgICAgICAgLyogMSA8PCA1ID09IGJpdHMgaW4gX191MzIgKi8KKyNkZWZpbmUgQ0FQX1RPX01BU0soeCkgICAgICAoMSA8PCAoKHgpICYgMzEpKSAvKiBtYXNrIGZvciBpbmRleGVkIF9fdTMyICovCisKKworI2VuZGlmIC8qICFfTElOVVhfQ0FQQUJJTElUWV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvY2FwaS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2NhcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTAwYWY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2NhcGkuaApAQCAtMCwwICsxLDEzMSBAQAorLyogJElkOiBjYXBpLmgsdiAxLjQuNi4xIDIwMDEvMDkvMjMgMjI6MjU6MDUga2FpIEV4cCAkCisgKiAKKyAqIENBUEkgMi4wIEludGVyZmFjZSBmb3IgTGludXgKKyAqIAorICogQ29weXJpZ2h0IDE5OTcgYnkgQ2Fyc3RlbiBQYWV0aCAoY2FsbGVAY2FsbGUuaW4tYmVybGluLmRlKQorICogCisgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCisgKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICoKKyAqLworCisjaWZuZGVmIF9fTElOVVhfQ0FQSV9IX18KKyNkZWZpbmUgX19MSU5VWF9DQVBJX0hfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbGNhcGkuaD4KKworLyoKKyAqIENBUElfUkVHSVNURVIKKyAqLworCit0eXBlZGVmIHN0cnVjdCBjYXBpX3JlZ2lzdGVyX3BhcmFtcyB7CS8qIENBUElfUkVHSVNURVIgKi8KKwlfX3UzMiBsZXZlbDNjbnQ7CS8qIE5vLiBvZiBzaW11bGF0bmVvdXMgdXNlciBkYXRhIGNvbm5lY3Rpb25zICovCisJX191MzIgZGF0YWJsa2NudDsJLyogTm8uIG9mIGJ1ZmZlcmVkIGRhdGEgbWVzc2FnZXMgKi8KKwlfX3UzMiBkYXRhYmxrbGVuOwkvKiBTaXplIG9mIGJ1ZmZlcmVkIGRhdGEgbWVzc2FnZXMgKi8KK30gY2FwaV9yZWdpc3Rlcl9wYXJhbXM7CisKKyNkZWZpbmUJQ0FQSV9SRUdJU1RFUglfSU9XKCdDJywweDAxLHN0cnVjdCBjYXBpX3JlZ2lzdGVyX3BhcmFtcykKKworLyoKKyAqIENBUElfR0VUX01BTlVGQUNUVVJFUgorICovCisKKyNkZWZpbmUgQ0FQSV9NQU5VRkFDVFVSRVJfTEVOCQk2NAorCisjZGVmaW5lCUNBUElfR0VUX01BTlVGQUNUVVJFUglfSU9XUignQycsMHgwNixpbnQpCS8qIGJyb2tlbjogd2FudGVkIHNpemUgNjQgKENBUElfTUFOVUZBQ1RVUkVSX0xFTikgKi8KKworLyoKKyAqIENBUElfR0VUX1ZFUlNJT04KKyAqLworCit0eXBlZGVmIHN0cnVjdCBjYXBpX3ZlcnNpb24geworCV9fdTMyIG1ham9ydmVyc2lvbjsKKwlfX3UzMiBtaW5vcnZlcnNpb247CisJX191MzIgbWFqb3JtYW51dmVyc2lvbjsKKwlfX3UzMiBtaW5vcm1hbnV2ZXJzaW9uOworfSBjYXBpX3ZlcnNpb247CisKKyNkZWZpbmUgQ0FQSV9HRVRfVkVSU0lPTglfSU9XUignQycsMHgwNyxzdHJ1Y3QgY2FwaV92ZXJzaW9uKQorCisvKgorICogQ0FQSV9HRVRfU0VSSUFMCisgKi8KKworI2RlZmluZSBDQVBJX1NFUklBTF9MRU4JCTgKKyNkZWZpbmUgQ0FQSV9HRVRfU0VSSUFMCQlfSU9XUignQycsMHgwOCxpbnQpCS8qIGJyb2tlbjogd2FudGVkIHNpemUgOCAoQ0FQSV9TRVJJQUxfTEVOKSAqLworCisvKgorICogQ0FQSV9HRVRfUFJPRklMRQorICovCisKK3R5cGVkZWYgc3RydWN0IGNhcGlfcHJvZmlsZSB7CisJX191MTYgbmNvbnRyb2xsZXI7CS8qIG51bWJlciBvZiBpbnN0YWxsZWQgY29udHJvbGxlciAqLworCV9fdTE2IG5iY2hhbm5lbDsJLyogbnVtYmVyIG9mIEItQ2hhbm5lbHMgKi8KKwlfX3UzMiBnb3B0aW9uczsJCS8qIGdsb2JhbCBvcHRpb25zICovCisJX191MzIgc3VwcG9ydDE7CQkvKiBCMSBwcm90b2NvbHMgc3VwcG9ydCAqLworCV9fdTMyIHN1cHBvcnQyOwkJLyogQjIgcHJvdG9jb2xzIHN1cHBvcnQgKi8KKwlfX3UzMiBzdXBwb3J0MzsJCS8qIEIzIHByb3RvY29scyBzdXBwb3J0ICovCisJX191MzIgcmVzZXJ2ZWRbNl07CS8qIHJlc2VydmVkICovCisJX191MzIgbWFudVs1XTsJCS8qIG1hbnVmYWN0dXJlciBzcGVjaWZpYyBpbmZvcm1hdGlvbiAqLworfSBjYXBpX3Byb2ZpbGU7CisKKyNkZWZpbmUgQ0FQSV9HRVRfUFJPRklMRQlfSU9XUignQycsMHgwOSxzdHJ1Y3QgY2FwaV9wcm9maWxlKQorCit0eXBlZGVmIHN0cnVjdCBjYXBpX21hbnVmYWN0dXJlcl9jbWQgeworCXVuc2lnbmVkIGxvbmcgY21kOworCXZvaWQgKmRhdGE7Cit9IGNhcGlfbWFudWZhY3R1cmVyX2NtZDsKKworLyoKKyAqIENBUElfTUFOVUZBQ1RVUkVSX0NNRAorICovCisKKyNkZWZpbmUgQ0FQSV9NQU5VRkFDVFVSRVJfQ01ECV9JT1dSKCdDJywweDIwLCBzdHJ1Y3QgY2FwaV9tYW51ZmFjdHVyZXJfY21kKQorCisvKgorICogQ0FQSV9HRVRfRVJSQ09ERQorICogY2FwaSBlcnJjb2RlIGlzIHNldCwgKiBpZiByZWFkLCB3cml0ZSwgb3IgaW9jdGwgcmV0dXJucyBFSU8sCisgKiBpb2N0bCByZXR1cm5zIGVycmNvZGUgZGlyZWN0bHksIGFuZCBpbiBhcmcsIGlmICE9IDAKKyAqLworCisjZGVmaW5lIENBUElfR0VUX0VSUkNPREUJX0lPUignQycsMHgyMSwgX191MTYpCisKKy8qCisgKiBDQVBJX0lOU1RBTExFRAorICovCisjZGVmaW5lIENBUElfSU5TVEFMTEVECQlfSU9SKCdDJywweDIyLCBfX3UxNikKKworCisvKgorICogbWVtYmVyIGNvbnRyIGlzIGlucHV0IGZvcgorICogQ0FQSV9HRVRfTUFOVUZBQ1RVUkVSLCBDQVBJX1ZFUlNJT04sIENBUElfR0VUX1NFUklBTAorICogYW5kIENBUElfR0VUX1BST0ZJTEUKKyAqLwordHlwZWRlZiB1bmlvbiBjYXBpX2lvY3RsX3N0cnVjdCB7CisJX191MzIgY29udHI7CisJY2FwaV9yZWdpc3Rlcl9wYXJhbXMgcnBhcmFtczsKKwlfX3U4IG1hbnVmYWN0dXJlcltDQVBJX01BTlVGQUNUVVJFUl9MRU5dOworCWNhcGlfdmVyc2lvbiB2ZXJzaW9uOworCV9fdTggc2VyaWFsW0NBUElfU0VSSUFMX0xFTl07CisJY2FwaV9wcm9maWxlIHByb2ZpbGU7CisJY2FwaV9tYW51ZmFjdHVyZXJfY21kIGNtZDsKKwlfX3UxNiBlcnJjb2RlOworfSBjYXBpX2lvY3RsX3N0cnVjdDsKKworLyoKKyAqIE1pZGRsZXdhcmUgZXh0ZW5zaW9uCisgKi8KKworI2RlZmluZSBDQVBJRkxBR19ISUdISkFDS0lORwkweDAwMDEKKworI2RlZmluZSBDQVBJX0dFVF9GTEFHUwkJX0lPUignQycsMHgyMywgdW5zaWduZWQpCisjZGVmaW5lIENBUElfU0VUX0ZMQUdTCQlfSU9SKCdDJywweDI0LCB1bnNpZ25lZCkKKyNkZWZpbmUgQ0FQSV9DTFJfRkxBR1MJCV9JT1IoJ0MnLDB4MjUsIHVuc2lnbmVkKQorCisjZGVmaW5lIENBUElfTkNDSV9PUEVOQ09VTlQJX0lPUignQycsMHgyNiwgdW5zaWduZWQpCisKKyNkZWZpbmUgQ0FQSV9OQ0NJX0dFVFVOSVQJX0lPUignQycsMHgyNywgdW5zaWduZWQpCisKKyNlbmRpZgkJCQkvKiBfX0xJTlVYX0NBUElfSF9fICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvY2Npc3NfZGVmcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2NjaXNzX2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTZiNjcwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2NjaXNzX2RlZnMuaApAQCAtMCwwICsxLDEzMCBAQAorI2lmbmRlZiBDQ0lTU19ERUZTX0gKKyNkZWZpbmUgQ0NJU1NfREVGU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBnZW5lcmFsIGJvdW5kYXJ5IGRlZmluaXRpb25zICovCisjZGVmaW5lIFNFTlNFSU5GT0JZVEVTICAgICAgICAgIDMyIC8qIG5vdGUgdGhhdCB0aGlzIHZhbHVlIG1heSB2YXJ5CisJCQkJICAgICAgYmV0d2VlbiBob3N0IGltcGxlbWVudGF0aW9ucyAqLworCisvKiBDb21tYW5kIFN0YXR1cyB2YWx1ZSAqLworI2RlZmluZSBDTURfU1VDQ0VTUyAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgQ01EX1RBUkdFVF9TVEFUVVMgICAgICAgMHgwMDAxCisjZGVmaW5lIENNRF9EQVRBX1VOREVSUlVOICAgICAgIDB4MDAwMgorI2RlZmluZSBDTURfREFUQV9PVkVSUlVOICAgICAgICAweDAwMDMKKyNkZWZpbmUgQ01EX0lOVkFMSUQgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIENNRF9QUk9UT0NPTF9FUlIgICAgICAgIDB4MDAwNQorI2RlZmluZSBDTURfSEFSRFdBUkVfRVJSICAgICAgICAweDAwMDYKKyNkZWZpbmUgQ01EX0NPTk5FQ1RJT05fTE9TVCAgICAgMHgwMDA3CisjZGVmaW5lIENNRF9BQk9SVEVEICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBDTURfQUJPUlRfRkFJTEVEICAgICAgICAweDAwMDkKKyNkZWZpbmUgQ01EX1VOU09MSUNJVEVEX0FCT1JUICAgMHgwMDBBCisjZGVmaW5lIENNRF9USU1FT1VUICAgICAgICAgICAgIDB4MDAwQgorI2RlZmluZSBDTURfVU5BQk9SVEFCTEUJCTB4MDAwQworCisvKiB0cmFuc2ZlciBkaXJlY3Rpb24gKi8KKyNkZWZpbmUgWEZFUl9OT05FICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBYRkVSX1dSSVRFICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIFhGRVJfUkVBRCAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgWEZFUl9SU1ZEICAgICAgICAgICAgICAgMHgwMworCisvKiB0YXNrIGF0dHJpYnV0ZSAqLworI2RlZmluZSBBVFRSX1VOVEFHR0VEICAgICAgICAgICAweDAwCisjZGVmaW5lIEFUVFJfU0lNUExFICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQVRUUl9IRUFET0ZRVUVVRSAgICAgICAgMHgwNQorI2RlZmluZSBBVFRSX09SREVSRUQgICAgICAgICAgICAweDA2CisjZGVmaW5lIEFUVFJfQUNBICAgICAgICAgICAgICAgIDB4MDcKKworLyogY2RiIHR5cGUgKi8KKyNkZWZpbmUgVFlQRV9DTUQJCQkJMHgwMAorI2RlZmluZSBUWVBFX01TRwkJCQkweDAxCisKKy8qIFR5cGUgZGVmcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgc3RydWN0cyAqLworI2RlZmluZSBCWVRFIF9fdTgKKyNkZWZpbmUgV09SRCBfX3UxNgorI2RlZmluZSBIV09SRCBfX3UxNgorI2RlZmluZSBEV09SRCBfX3UzMgorCisjZGVmaW5lIENJU1NfTUFYX0xVTgkxMDI0CisKKyNkZWZpbmUgTEVWRUwyTFVOICAgMSAvKiBpbmRleCBpbnRvIFRhcmdldCh4KSBzdHJ1Y3R1cmUsIGR1ZSB0byBieXRlIHN3YXBwaW5nICovCisjZGVmaW5lIExFVkVMM0xVTiAgIDAKKworI3ByYWdtYSBwYWNrKDEpCisKKy8qIENvbW1hbmQgTGlzdCBTdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgdW5pb24gX1NDU0kzQWRkcl9zdHJ1Y3QgeworICAgc3RydWN0IHsKKyAgICBCWVRFIERldjsKKyAgICBCWVRFIEJ1czo2OworICAgIEJZVEUgTW9kZToyOyAgICAgICAgLyogYjAwICovCisgIH0gUGVyaXBEZXY7CisgICBzdHJ1Y3QgeworICAgIEJZVEUgRGV2TFNCOworICAgIEJZVEUgRGV2TVNCOjY7CisgICAgQllURSBNb2RlOjI7ICAgICAgICAvKiBiMDEgKi8KKyAgfSBMb2dEZXY7CisgICBzdHJ1Y3QgeworICAgIEJZVEUgRGV2OjU7CisgICAgQllURSBCdXM6MzsKKyAgICBCWVRFIFRhcmc6NjsKKyAgICBCWVRFIE1vZGU6MjsgICAgICAgIC8qIGIxMCAqLworICB9IExvZ1VuaXQ7Cit9IFNDU0kzQWRkcl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF9QaHlzRGV2QWRkcl9zdHJ1Y3QgeworICBEV09SRCAgICAgICAgICAgICBUYXJnZXRJZDoyNDsKKyAgRFdPUkQgICAgICAgICAgICAgQnVzOjY7CisgIERXT1JEICAgICAgICAgICAgIE1vZGU6MjsKKyAgU0NTSTNBZGRyX3N0cnVjdCAgVGFyZ2V0WzJdOyAvKiAyIGxldmVsIHRhcmdldCBkZXZpY2UgYWRkciAqLworfSBQaHlzRGV2QWRkcl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF9Mb2dEZXZBZGRyX3N0cnVjdCB7CisgIERXT1JEICAgICAgICAgICAgVm9sSWQ6MzA7CisgIERXT1JEICAgICAgICAgICAgTW9kZToyOworICBCWVRFICAgICAgICAgICAgIHJlc2VydmVkWzRdOworfSBMb2dEZXZBZGRyX3N0cnVjdDsKKwordHlwZWRlZiB1bmlvbiBfTFVOQWRkcl9zdHJ1Y3QgeworICBCWVRFICAgICAgICAgICAgICAgTHVuQWRkckJ5dGVzWzhdOworICBTQ1NJM0FkZHJfc3RydWN0ICAgU0NTSTNMdW5bNF07CisgIFBoeXNEZXZBZGRyX3N0cnVjdCBQaHlzRGV2OworICBMb2dEZXZBZGRyX3N0cnVjdCAgTG9nRGV2OworfSBMVU5BZGRyX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgX1JlcXVlc3RCbG9ja19zdHJ1Y3QgeworICBCWVRFICAgQ0RCTGVuOworICBzdHJ1Y3QgeworICAgIEJZVEUgVHlwZTozOworICAgIEJZVEUgQXR0cmlidXRlOjM7CisgICAgQllURSBEaXJlY3Rpb246MjsKKyAgfSBUeXBlOworICBIV09SRCAgVGltZW91dDsKKyAgQllURSAgIENEQlsxNl07Cit9IFJlcXVlc3RCbG9ja19zdHJ1Y3Q7CisKK3R5cGVkZWYgdW5pb24gX01vcmVFcnJJbmZvX3N0cnVjdHsKKyAgc3RydWN0IHsKKyAgICBCWVRFICBSZXNlcnZlZFszXTsKKyAgICBCWVRFICBUeXBlOworICAgIERXT1JEIEVycm9ySW5mbzsKKyAgfSBDb21tb25fSW5mbzsKKyAgc3RydWN0eworICAgIEJZVEUgIFJlc2VydmVkWzJdOworICAgIEJZVEUgIG9mZmVuc2Vfc2l6ZTsgLyogc2l6ZSBvZiBvZmZlbmRpbmcgZW50cnkgKi8KKyAgICBCWVRFICBvZmZlbnNlX251bTsgIC8qIGJ5dGUgIyBvZiBvZmZlbnNlIDAtYmFzZSAqLworICAgIERXT1JEIG9mZmVuc2VfdmFsdWU7CisgIH0gSW52YWxpZF9DbWQ7Cit9IE1vcmVFcnJJbmZvX3N0cnVjdDsKK3R5cGVkZWYgc3RydWN0IF9FcnJvckluZm9fc3RydWN0IHsKKyAgQllURSAgICAgICAgICAgICAgIFNjc2lTdGF0dXM7CisgIEJZVEUgICAgICAgICAgICAgICBTZW5zZUxlbjsKKyAgSFdPUkQgICAgICAgICAgICAgIENvbW1hbmRTdGF0dXM7CisgIERXT1JEICAgICAgICAgICAgICBSZXNpZHVhbENudDsKKyAgTW9yZUVyckluZm9fc3RydWN0IE1vcmVFcnJJbmZvOworICBCWVRFICAgICAgICAgICAgICAgU2Vuc2VJbmZvW1NFTlNFSU5GT0JZVEVTXTsKK30gRXJyb3JJbmZvX3N0cnVjdDsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIENDSVNTX0RFRlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2NjaXNzX2lvY3RsLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvY2Npc3NfaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzVjMmIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2NjaXNzX2lvY3RsLmgKQEAgLTAsMCArMSw4OCBAQAorI2lmbmRlZiBDQ0lTU19JT0NUTEgKKyNkZWZpbmUgQ0NJU1NfSU9DVExICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvY2Npc3NfZGVmcy5oPgorCisjZGVmaW5lIENDSVNTX0lPQ19NQUdJQyAnQicKKworCit0eXBlZGVmIHN0cnVjdCBfY2Npc3NfcGNpX2luZm9fc3RydWN0Cit7CisJdW5zaWduZWQgY2hhciAJYnVzOworCXVuc2lnbmVkIGNoYXIgCWRldl9mbjsKKwl1bnNpZ25lZCBzaG9ydAlkb21haW47CisJX191MzIgCQlib2FyZF9pZDsKK30gY2Npc3NfcGNpX2luZm9fc3RydWN0OyAKKwordHlwZWRlZiBzdHJ1Y3QgX2NjaXNzX2NvYWxpbnRfc3RydWN0Cit7CisJX191MzIgIGRlbGF5OworCV9fdTMyICBjb3VudDsKK30gY2Npc3NfY29hbGludF9zdHJ1Y3Q7CisKK3R5cGVkZWYgY2hhciBOb2RlTmFtZV90eXBlWzE2XTsKKwordHlwZWRlZiBfX3UzMiBIZWFydGJlYXRfdHlwZTsKKworI2RlZmluZSBDSVNTX1BBUlNDU0lVMiAJMHgwMDAxCisjZGVmaW5lIENJU1NfUEFSQ1NDSVUzIAkweDAwMDIKKyNkZWZpbmUgQ0lTU19GSUJSRTFHCTB4MDEwMAorI2RlZmluZSBDSVNTX0ZJQlJFMkcJMHgwMjAwCit0eXBlZGVmIF9fdTMyIEJ1c1R5cGVzX3R5cGU7CisKK3R5cGVkZWYgY2hhciBGaXJtd2FyZVZlcl90eXBlWzRdOwordHlwZWRlZiBfX3UzMiBEcml2ZXJWZXJfdHlwZTsKKworI2RlZmluZSBNQVhfS01BTExPQ19TSVpFIDEyODAwMAorCit0eXBlZGVmIHN0cnVjdCBfSU9DVExfQ29tbWFuZF9zdHJ1Y3QgeworICBMVU5BZGRyX3N0cnVjdAkgICBMVU5faW5mbzsKKyAgUmVxdWVzdEJsb2NrX3N0cnVjdCAgICAgIFJlcXVlc3Q7CisgIEVycm9ySW5mb19zdHJ1Y3QgIAkgICBlcnJvcl9pbmZvOyAKKyAgV09SRAkJCSAgIGJ1Zl9zaXplOyAgLyogc2l6ZSBpbiBieXRlcyBvZiB0aGUgYnVmICovCisgIEJZVEUJCQkgICAqYnVmOworfSBJT0NUTF9Db21tYW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgX0JJR19JT0NUTF9Db21tYW5kX3N0cnVjdCB7CisgIExVTkFkZHJfc3RydWN0CSAgIExVTl9pbmZvOworICBSZXF1ZXN0QmxvY2tfc3RydWN0ICAgICAgUmVxdWVzdDsKKyAgRXJyb3JJbmZvX3N0cnVjdCAgCSAgIGVycm9yX2luZm87CisgIERXT1JECQkJICAgbWFsbG9jX3NpemU7IC8qIDwgTUFYX0tNQUxMT0NfU0laRSBpbiBjY2lzcy5jICovCisgIERXT1JECQkJICAgYnVmX3NpemU7ICAgIC8qIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGJ1ZiAqLworICAJCQkJICAgICAgICAvKiA8IG1hbGxvY19zaXplICogTUFYU0dFTlRSSUVTICovCisgIEJZVEUJCQkgICAqYnVmOworfSBCSUdfSU9DVExfQ29tbWFuZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF9Mb2d2b2xJbmZvX3N0cnVjdHsKKwlfX3UzMglMdW5JRDsKKwlpbnQJbnVtX29wZW5zOyAgLyogbnVtYmVyIG9mIG9wZW5zIG9uIHRoZSBsb2dpY2FsIHZvbHVtZSAqLworCWludAludW1fcGFydHM7ICAvKiBudW1iZXIgb2YgcGFydGl0aW9ucyBjb25maWd1cmVkIG9uIGxvZ3ZvbCAqLworfSBMb2d2b2xJbmZvX3N0cnVjdDsKKworI2RlZmluZSBDQ0lTU19HRVRQQ0lJTkZPIF9JT1IoQ0NJU1NfSU9DX01BR0lDLCAxLCBjY2lzc19wY2lfaW5mb19zdHJ1Y3QpCisKKyNkZWZpbmUgQ0NJU1NfR0VUSU5USU5GTyBfSU9SKENDSVNTX0lPQ19NQUdJQywgMiwgY2Npc3NfY29hbGludF9zdHJ1Y3QpCisjZGVmaW5lIENDSVNTX1NFVElOVElORk8gX0lPVyhDQ0lTU19JT0NfTUFHSUMsIDMsIGNjaXNzX2NvYWxpbnRfc3RydWN0KQorCisjZGVmaW5lIENDSVNTX0dFVE5PREVOQU1FIF9JT1IoQ0NJU1NfSU9DX01BR0lDLCA0LCBOb2RlTmFtZV90eXBlKQorI2RlZmluZSBDQ0lTU19TRVROT0RFTkFNRSBfSU9XKENDSVNTX0lPQ19NQUdJQywgNSwgTm9kZU5hbWVfdHlwZSkKKworI2RlZmluZSBDQ0lTU19HRVRIRUFSVEJFQVQgX0lPUihDQ0lTU19JT0NfTUFHSUMsIDYsIEhlYXJ0YmVhdF90eXBlKQorI2RlZmluZSBDQ0lTU19HRVRCVVNUWVBFUyAgX0lPUihDQ0lTU19JT0NfTUFHSUMsIDcsIEJ1c1R5cGVzX3R5cGUpCisjZGVmaW5lIENDSVNTX0dFVEZJUk1WRVIgICBfSU9SKENDSVNTX0lPQ19NQUdJQywgOCwgRmlybXdhcmVWZXJfdHlwZSkKKyNkZWZpbmUgQ0NJU1NfR0VURFJJVlZFUiAgIF9JT1IoQ0NJU1NfSU9DX01BR0lDLCA5LCBEcml2ZXJWZXJfdHlwZSkKKyNkZWZpbmUgQ0NJU1NfUkVWQUxJRFZPTFMgIF9JTyhDQ0lTU19JT0NfTUFHSUMsIDEwKQorI2RlZmluZSBDQ0lTU19QQVNTVEhSVQkgICBfSU9XUihDQ0lTU19JT0NfTUFHSUMsIDExLCBJT0NUTF9Db21tYW5kX3N0cnVjdCkKKyNkZWZpbmUgQ0NJU1NfREVSRUdESVNLCSAgIF9JTyhDQ0lTU19JT0NfTUFHSUMsIDEyKQorCisvKiBubyBsb25nZXIgdXNlZC4uLiB1c2UgUkVHTkVXRCBpbnN0ZWFkICovIAorI2RlZmluZSBDQ0lTU19SRUdORVdESVNLICBfSU9XKENDSVNTX0lPQ19NQUdJQywgMTMsIGludCkKKworI2RlZmluZSBDQ0lTU19SRUdORVdECSAgIF9JTyhDQ0lTU19JT0NfTUFHSUMsIDE0KQorI2RlZmluZSBDQ0lTU19SRVNDQU5ESVNLICAgX0lPKENDSVNTX0lPQ19NQUdJQywgMTYpCisjZGVmaW5lIENDSVNTX0dFVExVTklORk8gICBfSU9SKENDSVNTX0lPQ19NQUdJQywgMTcsIExvZ3ZvbEluZm9fc3RydWN0KQorI2RlZmluZSBDQ0lTU19CSUdfUEFTU1RIUlUgX0lPV1IoQ0NJU1NfSU9DX01BR0lDLCAxOCwgQklHX0lPQ1RMX0NvbW1hbmRfc3RydWN0KQorCisjZW5kaWYgIApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2Nkay5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2Nkay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MDhkYWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvY2RrLmgKQEAgLTAsMCArMSw0ODYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWNkay5oICAtLSBDREsgaW50ZXJmYWNlIGRlZmluaXRpb25zLgorICoKKyAqCUNvcHlyaWdodCAoQykgMTk5Ni0xOTk4ICBTdGFsbGlvbiBUZWNobm9sb2dpZXMKKyAqCUNvcHlyaWdodCAoQykgMTk5NC0xOTk2ICBHcmVnIFVuZ2VyZXIuCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKglNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKglHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICoJRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZglfQ0RLX0gKKyNkZWZpbmUJX0NES19ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNwcmFnbWEJcGFjaygyKQorCisvKgorICoJVGhlIGZvbGxvd2luZyBzZXQgb2YgZGVmaW5pdGlvbnMgaXMgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZQorICoJc2hhcmVkIG1lbW9yeSBpbnRlcmZhY2Ugb2YgdGhlIFN0YWxsaW9uIGludGVsbGlnZW50IG11bHRpcG9ydCBzZXJpYWwKKyAqCWJvYXJkcy4gVGhlIGRlZmluaXRpb25zIGluIHRoaXMgZmlsZSBhcmUgdGFrZW4gZGlyZWN0bHkgZnJvbSB0aGUKKyAqCWRvY3VtZW50IHRpdGxlZCAiR2VuZXJpYyBTdGFja2FibGUgSW50ZXJmYWNlLCBEb3dubG9hZGVyIGFuZAorICoJQ29tbXVuaWNhdGlvbnMgRGV2ZWxvcG1lbnQgS2l0Ii4KKyAqLworCisvKgorICoJRGVmaW5lIHRoZSBzZXQgb2YgaW1wb3J0YW50IHNoYXJlZCBtZW1vcnkgYWRkcmVzc2VzLiBUaGVzZSBhcmUKKyAqCXJlcXVpcmVkIHRvIGluaXRpYWxpemUgdGhlIGJvYXJkIGFuZCBnZXQgdGhpbmdzIHN0YXJ0ZWQuIEFsbCBvZiB0aGVzZQorICoJYWRkcmVzc2VzIGFyZSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNoYXJlZCBtZW1vcnkuCisgKi8KKyNkZWZpbmUJQ0RLX1NJR0FERFIJMHgyMDAKKyNkZWZpbmUJQ0RLX0ZFQVRBRERSCTB4MjgwCisjZGVmaW5lCUNES19DREtBRERSCTB4MzAwCisjZGVmaW5lCUNES19SRFlBRERSCTB4MjYyCisKKyNkZWZpbmUJQ0RLX0FMSVZFTUFSS0VSCTEzCisKKy8qCisgKglPbiBoYXJkd2FyZSBwb3dlciB1cCB0aGUgUk9NcyBsb2NhdGVkIG9uIHRoZSBFYXN5Q29ubmVjdGlvbiA4LzY0IHdpbGwKKyAqCWZpbGwgb3V0IHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlIGluZm9ybWF0aW9uIGludG8gc2hhcmVkIG1lbW9yeS4gVGhpcworICoJd2F5IHRoZSBob3N0IHN5c3RlbSBjYW4gcXVpY2tseSBkZXRlcm1pbmUgdGhhdCB0aGUgYm9hcmQgaXMgcHJlc2VudAorICoJYW5kIGlzIG9wZXJhdGlvbmFsLgorICovCit0eXBlZGVmIHN0cnVjdCBjZGtlY3BzaWcgeworCXVuc2lnbmVkIGxvbmcJbWFnaWM7CisJdW5zaWduZWQgc2hvcnQJcm9tdmVyOworCXVuc2lnbmVkIHNob3J0CWNwdXR5cGU7CisJdW5zaWduZWQgY2hhcglwYW5lbGlkWzhdOworfSBjZGtlY3BzaWdfdDsKKworI2RlZmluZQlFQ1BfTUFHSUMJMHgyMTUwNDM0NQorCisvKgorICoJT24gaGFyZHdhcmUgcG93ZXIgdXAgdGhlIFJPTXMgbG9jYXRlZCBvbiB0aGUgT05ib2FyZCwgU3RhbGxpb24gYW5kCisgKglCcnVtYnlzIHdpbGwgZmlsbCBvdXQgdGhlIGZvbGxvd2luZyBzaWduYXR1cmUgaW5mb3JtYXRpb24gaW50byBzaGFyZWQKKyAqCW1lbW9yeS4gVGhpcyB3YXkgdGhlIGhvc3Qgc3lzdGVtIGNhbiBxdWlja2x5IGRldGVybWluZSB0aGF0IHRoZSBib2FyZAorICoJaXMgcHJlc2VudCBhbmQgaXMgb3BlcmF0aW9uYWwuCisgKi8KK3R5cGVkZWYgc3RydWN0IGNka29uYnNpZyB7CisJdW5zaWduZWQgc2hvcnQJbWFnaWMwOworCXVuc2lnbmVkIHNob3J0CW1hZ2ljMTsKKwl1bnNpZ25lZCBzaG9ydAltYWdpYzI7CisJdW5zaWduZWQgc2hvcnQJbWFnaWMzOworCXVuc2lnbmVkIHNob3J0CXJvbXZlcjsKKwl1bnNpZ25lZCBzaG9ydAltZW1vZmY7CisJdW5zaWduZWQgc2hvcnQJbWVtc2VnOworCXVuc2lnbmVkIHNob3J0CWFtYXNrMDsKKwl1bnNpZ25lZCBzaG9ydAlwaWM7CisJdW5zaWduZWQgc2hvcnQJc3RhdHVzOworCXVuc2lnbmVkIHNob3J0CWJ0eXBlOworCXVuc2lnbmVkIHNob3J0CWNsa3RpY2tzOworCXVuc2lnbmVkIHNob3J0CWNsa3NwZWVkOworCXVuc2lnbmVkIHNob3J0CWFtYXNrMTsKKwl1bnNpZ25lZCBzaG9ydAlhbWFzazI7Cit9IGNka29uYnNpZ190OworCisjZGVmaW5lCU9OQl9NQUdJQzAJMHhmMmE3CisjZGVmaW5lCU9OQl9NQUdJQzEJMHhhMTQ5CisjZGVmaW5lCU9OQl9NQUdJQzIJMHg2MzUyCisjZGVmaW5lCU9OQl9NQUdJQzMJMHhmMTIxCisKKy8qCisgKglEZWZpbmUgdGhlIGZlYXR1cmUgYXJlYSBzdHJ1Y3R1cmUuIFRoZSBmZWF0dXJlIGFyZWEgaXMgdGhlIHNldCBvZgorICoJc3RhcnR1cCBwYXJhbWV0ZXJzIHVzZWQgYnkgdGhlIHNsYXZlIGltYWdlIHdoZW4gaXQgc3RhcnRzIGV4ZWN1dGluZy4KKyAqCVRoZXkgYWxsb3cgZm9yIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGJ1ZmZlciBzaXplcywgZGVidWcgdHJhY2UsIGV0Yy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgY2RrZmVhdHVyZSB7CisJdW5zaWduZWQgbG9uZwlkZWJ1ZzsKKwl1bnNpZ25lZCBsb25nCWJhbm5lcjsKKwl1bnNpZ25lZCBsb25nCWV0eXBlOworCXVuc2lnbmVkIGxvbmcJbnJkZXZzOworCXVuc2lnbmVkIGxvbmcJYnJkc3BlYzsKKwl1bnNpZ25lZCBsb25nCXR4cnFzaXplOworCXVuc2lnbmVkIGxvbmcJcnhycXNpemU7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKK30gY2RrZmVhdHVyZV90OworCisjZGVmaW5lCUVUWVBfRERLCTAKKyNkZWZpbmUJRVRZUF9DREsJMQorCisvKgorICoJRGVmaW5lIHRoZSBDREsgaGVhZGVyIHN0cnVjdHVyZS4gVGhpcyBpcyB0aGUgaW5mbyB0aGF0IHRoZSBzbGF2ZQorICoJZW52aXJvbm1lbnQgc2V0cyB1cCBhZnRlciBpdCBoYXMgYmVlbiBkb3dubG9hZGVkIGFuZCBzdGFydGVkLiBJdAorICoJZXNzZW50aWFsbHkgcHJvdmlkZXMgYSBtZW1vcnkgbWFwIGZvciB0aGUgc2hhcmVkIG1lbW9yeSBpbnRlcmZhY2UuCisgKi8KK3R5cGVkZWYgc3RydWN0IGNka2hkciB7CisJdW5zaWduZWQgc2hvcnQJY29tbWFuZDsKKwl1bnNpZ25lZCBzaG9ydAlzdGF0dXM7CisJdW5zaWduZWQgc2hvcnQJcG9ydDsKKwl1bnNpZ25lZCBzaG9ydAltb2RlOworCXVuc2lnbmVkIGxvbmcJY21kX2J1ZlsxNF07CisJdW5zaWduZWQgc2hvcnQJYWxpdmVfY250OworCXVuc2lnbmVkIHNob3J0CWludHJwdF9tb2RlOworCXVuc2lnbmVkIGNoYXIJaW50cnB0X2lkWzhdOworCXVuc2lnbmVkIGNoYXIJdmVyX3JlbGVhc2U7CisJdW5zaWduZWQgY2hhcgl2ZXJfbW9kaWZpY2F0aW9uOworCXVuc2lnbmVkIGNoYXIJdmVyX2ZpeDsKKwl1bnNpZ25lZCBjaGFyCWRlYWRtYW5fcmVzdGFydDsKKwl1bnNpZ25lZCBzaG9ydAlkZWFkbWFuOworCXVuc2lnbmVkIHNob3J0CW5yZGV2czsKKwl1bnNpZ25lZCBsb25nCW1lbXA7CisJdW5zaWduZWQgbG9uZwlob3N0cDsKKwl1bnNpZ25lZCBsb25nCXNsYXZlcDsKKwl1bnNpZ25lZCBjaGFyCWhvc3RyZXE7CisJdW5zaWduZWQgY2hhcglzbGF2ZXJlcTsKKwl1bnNpZ25lZCBjaGFyCWNtZF9yZXNlcnZlZFszMF07Cit9IGNka2hkcl90OworCisjZGVmaW5lCU1PREVfRERLCTAKKyNkZWZpbmUJTU9ERV9DREsJMQorCisjZGVmaW5lCUlNRF9JTlRSCTB4MAorI2RlZmluZQlJTURfUFBJTlRSCTB4MQorI2RlZmluZQlJTURfUE9MTAkweGZmCisKKy8qCisgKglEZWZpbmUgdGhlIG1lbW9yeSBtYXBwaW5nIHN0cnVjdHVyZS4gVGhpcyBzdHJ1Y3R1cmUgaXMgcG9pbnRlZCB0byBieQorICoJdGhlIG1lbXAgZmllbGQgaW4gdGhlIHN0bGNka2hkciBzdHJ1Y3QuIEFzIG1hbnkgYXMgdGhlc2Ugc3RydWN0dXJlcworICoJYXMgcmVxdWlyZWQgYXJlIGxheWVkIG91dCBpbiBzaGFyZWQgbWVtb3J5IHRvIGRlZmluZSBob3cgdGhlIHJlc3Qgb2YKKyAqCXNoYXJlZCBtZW1vcnkgaXMgZGl2aWRlZCB1cC4gVGhlcmUgd2lsbCBiZSBvbmUgZm9yIGVhY2ggcG9ydC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgY2RrbWVtIHsKKwl1bnNpZ25lZCBzaG9ydAlkdHlwZTsKKwl1bnNpZ25lZCBsb25nCW9mZnNldDsKK30gY2RrbWVtX3Q7CisKKyNkZWZpbmUJVFlQX1VOREVGSU5FRAkweDAKKyNkZWZpbmUJVFlQX0FTWU5DVFJMCTB4MQorI2RlZmluZQlUWVBfQVNZTkMJMHgyMAorI2RlZmluZQlUWVBfUEFSQUxMRUwJMHg0MAorI2RlZmluZQlUWVBfU1lOQ1gyMQkweDYwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCUZvbGxvd2luZyBpcyBhIHNldCBvZiBkZWZpbmVzIGFuZCBzdHJ1Y3R1cmVzIHVzZWQgdG8gYWN0dWFsbHkgZGVhbAorICoJd2l0aCB0aGUgc2VyaWFsIHBvcnRzIG9uIHRoZSBib2FyZC4gRmlyc3RseSBpcyB0aGUgc2V0IG9mIGNvbW1hbmRzCisgKgl0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIHBvcnRzLgorICovCisjZGVmaW5lCUFTWUNNRAkJKCgodW5zaWduZWQgbG9uZykgJ2EnKSA8PCA4KQorCisjZGVmaW5lCUFfTlVMTAkJKEFTWUNNRCB8IDApCisjZGVmaW5lCUFfRkxVU0gJCShBU1lDTUQgfCAxKQorI2RlZmluZQlBX0JSRUFLCQkoQVNZQ01EIHwgMikKKyNkZWZpbmUJQV9HRVRQT1JUCShBU1lDTUQgfCAzKQorI2RlZmluZQlBX1NFVFBPUlQJKEFTWUNNRCB8IDQpCisjZGVmaW5lCUFfU0VUUE9SVEYJKEFTWUNNRCB8IDUpCisjZGVmaW5lCUFfU0VUUE9SVEZUWAkoQVNZQ01EIHwgNikKKyNkZWZpbmUJQV9TRVRQT1JURlJYCShBU1lDTUQgfCA3KQorI2RlZmluZQlBX0dFVFNJR05BTFMJKEFTWUNNRCB8IDgpCisjZGVmaW5lCUFfU0VUU0lHTkFMUwkoQVNZQ01EIHwgOSkKKyNkZWZpbmUJQV9TRVRTSUdOQUxTRgkoQVNZQ01EIHwgMTApCisjZGVmaW5lCUFfU0VUU0lHTkFMU0ZUWAkoQVNZQ01EIHwgMTEpCisjZGVmaW5lCUFfU0VUU0lHTkFMU0ZSWAkoQVNZQ01EIHwgMTIpCisjZGVmaW5lCUFfR0VUTk9USUZZCShBU1lDTUQgfCAxMykKKyNkZWZpbmUJQV9TRVROT1RJRlkJKEFTWUNNRCB8IDE0KQorI2RlZmluZQlBX05PVElGWQkoQVNZQ01EIHwgMTUpCisjZGVmaW5lCUFfUE9SVENUUkwJKEFTWUNNRCB8IDE2KQorI2RlZmluZQlBX0dFVFNUQVRTCShBU1lDTUQgfCAxNykKKyNkZWZpbmUJQV9SUVNUQVRFCShBU1lDTUQgfCAxOCkKKyNkZWZpbmUJQV9GTE9XU1RBVEUJKEFTWUNNRCB8IDE5KQorI2RlZmluZQlBX0NMRUFSU1RBVFMJKEFTWUNNRCB8IDIwKQorCisvKgorICoJRGVmaW5lIHRob3NlIGFyZ3VtZW50cyB1c2VkIGZvciBzaW1wbGUgY29tbWFuZHMuCisgKi8KKyNkZWZpbmUJRkxVU0hSWAkJMHgxCisjZGVmaW5lCUZMVVNIVFgJCTB4MgorCisjZGVmaW5lCUJSRUFLT04JCS0xCisjZGVmaW5lCUJSRUFLT0ZGCS0yCisKKy8qCisgKglEZWZpbmUgdGhlIHBvcnQgc2V0dGluZyBzdHJ1Y3R1cmUsIGFuZCBhbGwgdGhvc2UgZGVmaW5lcyB0aGF0IGdvIGFsb25nCisgKgl3aXRoIGl0LiBCYXNpY2FsbHkgdGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoaXMKKyAqCXBvcnQ6IGJhdWQgcmF0ZSwgY2hhcnMsIHBhcml0eSwgaW5wdXQvb3V0cHV0IGNoYXIgY29va2luZyBldGMuCisgKi8KK3R5cGVkZWYgc3RydWN0IGFzeXBvcnQgeworCXVuc2lnbmVkIGxvbmcJYmF1ZG91dDsKKwl1bnNpZ25lZCBsb25nCWJhdWRpbjsKKwl1bnNpZ25lZCBsb25nCWlmbGFnOworCXVuc2lnbmVkIGxvbmcJb2ZsYWc7CisJdW5zaWduZWQgbG9uZwlsZmxhZzsKKwl1bnNpZ25lZCBsb25nCXBmbGFnOworCXVuc2lnbmVkIGxvbmcJZmxvdzsKKwl1bnNpZ25lZCBsb25nCXNwYXJlMTsKKwl1bnNpZ25lZCBzaG9ydAl2dGltZTsKKwl1bnNpZ25lZCBzaG9ydAl2bWluOworCXVuc2lnbmVkIHNob3J0CXR4bG87CisJdW5zaWduZWQgc2hvcnQJdHhoaTsKKwl1bnNpZ25lZCBzaG9ydAlyeGxvOworCXVuc2lnbmVkIHNob3J0CXJ4aGk7CisJdW5zaWduZWQgc2hvcnQJcnhob2c7CisJdW5zaWduZWQgc2hvcnQJc3BhcmUyOworCXVuc2lnbmVkIGNoYXIJY3NpemU7CisJdW5zaWduZWQgY2hhcglzdG9wYnM7CisJdW5zaWduZWQgY2hhcglwYXJpdHk7CisJdW5zaWduZWQgY2hhcglzdG9waW47CisJdW5zaWduZWQgY2hhcglzdGFydGluOworCXVuc2lnbmVkIGNoYXIJc3RvcG91dDsKKwl1bnNpZ25lZCBjaGFyCXN0YXJ0b3V0OworCXVuc2lnbmVkIGNoYXIJcGFybWFyazsKKwl1bnNpZ25lZCBjaGFyCWJya21hcms7CisJdW5zaWduZWQgY2hhcgljY1sxMV07Cit9IGFzeXBvcnRfdDsKKworI2RlZmluZQlQVF9TVE9QMQkweDAKKyNkZWZpbmUJUFRfU1RPUDE1CTB4MQorI2RlZmluZQlQVF9TVE9QMgkweDIKKworI2RlZmluZQlQVF9OT1BBUklUWQkweDAKKyNkZWZpbmUJUFRfT0REUEFSSVRZCTB4MQorI2RlZmluZQlQVF9FVkVOUEFSSVRZCTB4MgorI2RlZmluZQlQVF9NQVJLUEFSSVRZCTB4MworI2RlZmluZQlQVF9TUEFDRVBBUklUWQkweDQKKworI2RlZmluZQlGX05PTkUJCTB4MAorI2RlZmluZQlGX0lYT04JCTB4MQorI2RlZmluZQlGX0lYT0ZGCQkweDIKKyNkZWZpbmUJRl9JWEFOWQkJMHg0CisjZGVmaW5lCUZfSU9YQU5ZCTB4OAorI2RlZmluZQlGX1JUU0ZMT1cJMHgxMAorI2RlZmluZQlGX0NUU0ZMT1cJMHgyMAorI2RlZmluZQlGX0RUUkZMT1cJMHg0MAorI2RlZmluZQlGX0RDREZMT1cJMHg4MAorI2RlZmluZQlGX0RTUk9GTE9XCTB4MTAwCisjZGVmaW5lCUZfRFNSSUZMT1cJMHgyMDAKKworI2RlZmluZQlGSV9OT1JYCQkweDEKKyNkZWZpbmUJRklfUkFXCQkweDIKKyNkZWZpbmUJRklfSVNUUklQCTB4NAorI2RlZmluZQlGSV9VQ0xDCQkweDgKKyNkZWZpbmUJRklfSU5MQ1IJMHgxMAorI2RlZmluZQlGSV9JQ1JOTAkweDIwCisjZGVmaW5lCUZJX0lHTkNSCTB4NDAKKyNkZWZpbmUJRklfSUdOQlJFQUsJMHg4MAorI2RlZmluZQlGSV9EU0NSREJSRUFLCTB4MTAwCisjZGVmaW5lCUZJXzFNQVJLQlJFQUsJMHgyMDAKKyNkZWZpbmUJRklfMk1BUktCUkVBSwkweDQwMAorI2RlZmluZQlGSV9YQ0hOR0JSRUFLCTB4ODAwCisjZGVmaW5lCUZJX0lHTlJYRVJSUwkweDEwMDAKKyNkZWZpbmUJRklfRFNDRFJYRVJSUwkweDIwMDAKKyNkZWZpbmUJRklfMU1BUktSWEVSUlMJMHg0MDAwCisjZGVmaW5lCUZJXzJNQVJLUlhFUlJTCTB4ODAwMAorI2RlZmluZQlGSV9YQ0hOR1JYRVJSUwkweDEwMDAwCisjZGVmaW5lCUZJX0RTQ1JETlVMTAkweDIwMDAwCisKKyNkZWZpbmUJRk9fT0xDVUMJMHgxCisjZGVmaW5lCUZPX09OTENSCTB4MgorI2RlZmluZQlGT19PT0NSTkwJMHg0CisjZGVmaW5lCUZPX09OT0NSCTB4OAorI2RlZmluZQlGT19PTkxSRVQJMHgxMAorI2RlZmluZQlGT19PTkwJCTB4MjAKKyNkZWZpbmUJRk9fT0JTCQkweDQwCisjZGVmaW5lCUZPX09WVAkJMHg4MAorI2RlZmluZQlGT19PRkYJCTB4MTAwCisjZGVmaW5lCUZPX09UQUIxCTB4MjAwCisjZGVmaW5lCUZPX09UQUIyCTB4NDAwCisjZGVmaW5lCUZPX09UQUIzCTB4ODAwCisjZGVmaW5lCUZPX09DUjEJCTB4MTAwMAorI2RlZmluZQlGT19PQ1IyCQkweDIwMDAKKyNkZWZpbmUJRk9fT0NSMwkJMHg0MDAwCisjZGVmaW5lCUZPX09GSUxMCTB4ODAwMAorI2RlZmluZQlGT19PREVMTAkweDEwMDAwCisKKyNkZWZpbmUJUF9SVFNMT0NLCTB4MQorI2RlZmluZQlQX0NUU0xPQ0sJMHgyCisjZGVmaW5lCVBfTUFQUlRTCTB4NAorI2RlZmluZQlQX01BUENUUwkweDgKKyNkZWZpbmUJUF9MT09QQkFDSwkweDEwCisjZGVmaW5lCVBfRFRSRk9MTE9XCTB4MjAKKyNkZWZpbmUJUF9GQUtFRENECTB4NDAKKworI2RlZmluZQlQX1JYSU1JTgkweDEwMDAwCisjZGVmaW5lCVBfUlhJVElNRQkweDIwMDAwCisjZGVmaW5lCVBfUlhUSE9MRAkweDQwMDAwCisKKy8qCisgKglEZWZpbmUgYSBzdHJ1Y3R1cmUgdG8gY29tbXVuaWNhdGUgc2VyaWFsIHBvcnQgc2lnbmFsIGFuZCBkYXRhIHN0YXRlCisgKglpbmZvcm1hdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgYXN5c2lncyB7CisJdW5zaWduZWQgbG9uZwlkYXRhOworCXVuc2lnbmVkIGxvbmcJc2lnbmFsOworCXVuc2lnbmVkIGxvbmcJc2lndmFsdWU7Cit9IGFzeXNpZ3NfdDsKKworI2RlZmluZQlEVF9UWEJVU1kJMHgxCisjZGVmaW5lCURUX1RYRU1QVFkJMHgyCisjZGVmaW5lCURUX1RYTE9XCTB4NAorI2RlZmluZQlEVF9UWEhJR0gJMHg4CisjZGVmaW5lCURUX1RYRlVMTAkweDEwCisjZGVmaW5lCURUX1RYSE9HCTB4MjAKKyNkZWZpbmUJRFRfVFhGTE9XRUQJMHg0MAorI2RlZmluZQlEVF9UWEJSRUFLCTB4ODAKKworI2RlZmluZQlEVF9SWEJVU1kJMHgxMDAKKyNkZWZpbmUJRFRfUlhFTVBUWQkweDIwMAorI2RlZmluZQlEVF9SWExPVwkweDQwMAorI2RlZmluZQlEVF9SWEhJR0gJMHg4MDAKKyNkZWZpbmUJRFRfUlhGVUxMCTB4MTAwMAorI2RlZmluZQlEVF9SWEhPRwkweDIwMDAKKyNkZWZpbmUJRFRfUlhGTE9XRUQJMHg0MDAwCisjZGVmaW5lCURUX1JYQlJFQUsJMHg4MDAwCisKKyNkZWZpbmUJU0dfRFRSCQkweDEKKyNkZWZpbmUJU0dfRENECQkweDIKKyNkZWZpbmUJU0dfUlRTCQkweDQKKyNkZWZpbmUJU0dfQ1RTCQkweDgKKyNkZWZpbmUJU0dfRFNSCQkweDEwCisjZGVmaW5lCVNHX1JJCQkweDIwCisKKy8qCisgKglEZWZpbmUgdGhlIG5vdGlmaWNhdGlvbiBzZXR0aW5nIHN0cnVjdHVyZS4gVGhpcyBpcyB1c2VkIHRvIHRlbGwgdGhlCisgKglwb3J0IHdoYXQgZXZlbnRzIHdlIHdhbnQgdG8gYmUgaW5mb3JtZWQgYWJvdXQuIEZpZWxkcyBoZXJlIHVzZSB0aGUKKyAqCXNhbWUgZGVmaW5lcyBhcyBmb3IgdGhlIGFzeXNpZ3Mgc3RydWN0dXJlIGFib3ZlLgorICovCit0eXBlZGVmIHN0cnVjdCBhc3lub3RpZnkgeworCXVuc2lnbmVkIGxvbmcJY3RybDsKKwl1bnNpZ25lZCBsb25nCWRhdGE7CisJdW5zaWduZWQgbG9uZwlzaWduYWw7CisJdW5zaWduZWQgbG9uZwlzaWd2YWx1ZTsKK30gYXN5bm90aWZ5X3Q7CisKKy8qCisgKglEZWZpbmUgdGhlIHBvcnQgY29udHJvbCBzdHJ1Y3R1cmUuIEl0IGlzIHVzZWQgdG8gZG8gZmluZSBncmFpbgorICoJY29udHJvbCBvcGVyYXRpb25zIG9uIHRoZSBwb3J0LgorICovCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZwlyeGN0cmw7CisJdW5zaWduZWQgbG9uZwl0eGN0cmw7CisJY2hhcgkJcnhpbWRjaDsKKwljaGFyCQl0eGltZGNoOworCWNoYXIJCXNwYXJlMTsKKwljaGFyCQlzcGFyZTI7Cit9IGFzeWN0cmxfdDsKKworI2RlZmluZQlDVF9FTkFCTEUJMHgxCisjZGVmaW5lCUNUX0RJU0FCTEUJMHgyCisjZGVmaW5lCUNUX1NUT1AJCTB4NAorI2RlZmluZQlDVF9TVEFSVAkweDgKKyNkZWZpbmUJQ1RfU1RBUlRGTE9XCTB4MTAKKyNkZWZpbmUJQ1RfU1RPUEZMT1cJMHgyMAorI2RlZmluZQlDVF9TRU5EQ0hSCTB4NDAKKworLyoKKyAqCURlZmluZSB0aGUgc3RhdHMgc3RydWN0dXJlIGtlcHQgZm9yIGVhY2ggcG9ydC4gVGhpcyBpcyBhIHVzZWZ1bCBzZXQKKyAqCW9mIGRhdGEgY29sbGVjdGVkIGZvciBlYWNoIHBvcnQgb24gdGhlIHNsYXZlLiBUaGUgQV9HRVRTVEFUUyBjb21tYW5kCisgKglpcyB1c2VkIHRvIHJldHJpZXZlIHRoaXMgZGF0YSBmcm9tIHRoZSBzbGF2ZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgYXN5c3RhdHMgeworCXVuc2lnbmVkIGxvbmcJb3BlbnM7CisJdW5zaWduZWQgbG9uZwl0eGNoYXJzOworCXVuc2lnbmVkIGxvbmcJcnhjaGFyczsKKwl1bnNpZ25lZCBsb25nCXR4cmluZ3E7CisJdW5zaWduZWQgbG9uZwlyeHJpbmdxOworCXVuc2lnbmVkIGxvbmcJdHhtc2dzOworCXVuc2lnbmVkIGxvbmcJcnhtc2dzOworCXVuc2lnbmVkIGxvbmcJdHhmbHVzaGVzOworCXVuc2lnbmVkIGxvbmcJcnhmbHVzaGVzOworCXVuc2lnbmVkIGxvbmcJb3ZlcnJ1bnM7CisJdW5zaWduZWQgbG9uZwlmcmFtaW5nOworCXVuc2lnbmVkIGxvbmcJcGFyaXR5OworCXVuc2lnbmVkIGxvbmcJcmluZ292ZXI7CisJdW5zaWduZWQgbG9uZwlsb3N0OworCXVuc2lnbmVkIGxvbmcJcnhzdGFydDsKKwl1bnNpZ25lZCBsb25nCXJ4c3RvcDsKKwl1bnNpZ25lZCBsb25nCXR4c3RhcnQ7CisJdW5zaWduZWQgbG9uZwl0eHN0b3A7CisJdW5zaWduZWQgbG9uZwlkY2RjbnQ7CisJdW5zaWduZWQgbG9uZwlkdHJjbnQ7CisJdW5zaWduZWQgbG9uZwljdHNjbnQ7CisJdW5zaWduZWQgbG9uZwlydHNjbnQ7CisJdW5zaWduZWQgbG9uZwlkc3JjbnQ7CisJdW5zaWduZWQgbG9uZwlyaWNudDsKKwl1bnNpZ25lZCBsb25nCXR4YnJlYWtzOworCXVuc2lnbmVkIGxvbmcJcnhicmVha3M7CisJdW5zaWduZWQgbG9uZwlzaWduYWxzOworCXVuc2lnbmVkIGxvbmcJc3RhdGU7CisJdW5zaWduZWQgbG9uZwlod2lkOworfSBhc3lzdGF0c190OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglBbGwgY29tbWFuZCBhbmQgY29udHJvbCBjb21tdW5pY2F0aW9uIHdpdGggYSBkZXZpY2Ugb24gdGhlIHNsYXZlIGlzCisgKgl2aWEgYSBjb250cm9sIGJsb2NrIGluIHNoYXJlZCBtZW1vcnkuIEVhY2ggZGV2aWNlIGhhcyBpdHMgb3duIGNvbnRyb2wKKyAqCWJsb2NrLCBkZWZpbmVkIGJ5IHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlLiBUaGUgY29udHJvbCBibG9jayBhbGxvd3MKKyAqCXRoZSBob3N0IHRvIG9wZW4sIGNsb3NlIGFuZCBjb250cm9sIHRoZSBkZXZpY2Ugb24gdGhlIHNsYXZlLgorICovCit0eXBlZGVmIHN0cnVjdCBjZGtjdHJsIHsKKwl1bnNpZ25lZCBjaGFyCW9wZW47CisJdW5zaWduZWQgY2hhcgljbG9zZTsKKwl1bnNpZ25lZCBsb25nCW9wZW5hcmc7CisJdW5zaWduZWQgbG9uZwljbG9zZWFyZzsKKwl1bnNpZ25lZCBsb25nCWNtZDsKKwl1bnNpZ25lZCBsb25nCXN0YXR1czsKKwl1bnNpZ25lZCBsb25nCWFyZ3NbMzJdOworfSBjZGtjdHJsX3Q7CisKKy8qCisgKglFYWNoIGRldmljZSBvbiB0aGUgc2xhdmUgcGFzc2VzIGRhdGEgdG8gYW5kIGZyb20gdGhlIGhvc3QgdmlhIGEgcmluZworICoJcXVldWUgaW4gc2hhcmVkIG1lbW9yeS4gRGVmaW5lIGEgcmluZyBxdWV1ZSBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUKKyAqCXZpdGFsIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggcmluZyBxdWV1ZS4gVHdvIHJpbmcgcXVldWVzIHdpbGwgYmUKKyAqCWFsbG9jYXRlZCBmb3IgZWFjaCBwb3J0LCBvbmUgZm9yIHJlY2VpdmUgZGF0YSBhbmQgb25lIGZvciB0cmFuc21pdAorICoJZGF0YS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgY2RrYXN5cnEgeworCXVuc2lnbmVkIGxvbmcJb2Zmc2V0OworCXVuc2lnbmVkIHNob3J0CXNpemU7CisJdW5zaWduZWQgc2hvcnQJaGVhZDsKKwl1bnNpZ25lZCBzaG9ydAl0YWlsOworfSBjZGthc3lycV90OworCisvKgorICoJRWFjaCBhc3luY2hyb25vdXMgcG9ydCBpcyBkZWZpbmVkIGluIHNoYXJlZCBtZW1vcnkgYnkgdGhlIGZvbGxvd2luZworICoJc3RydWN0dXJlLiBJdCBjb250YWlucyBhIGNvbnRyb2wgYmxvY2sgdG8gY29tbWFuZCBhIGRldmljZSwgYW5kIGFsc28KKyAqCXRoZSBuZWNlc3NhcnkgZGF0YSBjaGFubmVsIGluZm9ybWF0aW9uIGFzIHdlbGwuCisgKi8KK3R5cGVkZWYgc3RydWN0IGNka2FzeSB7CisJY2RrY3RybF90CWN0cmw7CisJdW5zaWduZWQgc2hvcnQJbm90aWZ5OworCWFzeW5vdGlmeV90CWNoYW5nZWQ7CisJdW5zaWduZWQgc2hvcnQJcmVjZWl2ZTsKKwljZGthc3lycV90CXJ4cTsKKwl1bnNpZ25lZCBzaG9ydAl0cmFuc21pdDsKKwljZGthc3lycV90CXR4cTsKK30gY2RrYXN5X3Q7CisKKyNwcmFnbWEJcGFjaygpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCURlZmluZSB0aGUgc2V0IG9mIGlvY3RscyB1c2VkIGJ5IHRoZSBkcml2ZXIgdG8gZG8gc3BlY2lhbCB0aGluZ3MKKyAqCXRvIHRoZSBib2FyZC4gVGhlc2UgaW5jbHVkZSBpbnRlcnJ1cHRpbmcgaXQsIGFuZCBpbml0aWFsaXppbmcKKyAqCXRoZSBkcml2ZXIgYWZ0ZXIgYm9hcmQgc3RhcnR1cCBhbmQgc2h1dGRvd24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisjZGVmaW5lCVNUTF9CSU5UUglfSU8oJ3MnLDIwKQorI2RlZmluZQlTVExfQlNUQVJUCV9JTygncycsMjEpCisjZGVmaW5lCVNUTF9CU1RPUAlfSU8oJ3MnLDIyKQorI2RlZmluZQlTVExfQlJFU0VUCV9JTygncycsMjMpCisKKy8qCisgKglEZWZpbmUgYSBzZXQgb2YgaW9jdGwgZXh0ZW5zaW9ucywgdXNlZCB0byBnZXQgYXQgc3BlY2lhbCBzdHVmZi4KKyAqLworI2RlZmluZQlTVExfR0VUUEZMQUcJX0lPKCdzJyw4MCkKKyNkZWZpbmUJU1RMX1NFVFBGTEFHCV9JTygncycsODEpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2Nkcm9tLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvY2Ryb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWRjYWYxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2Nkcm9tLmgKQEAgLTAsMCArMSw5MTIgQEAKKy8qCisgKiAtLSA8bGludXgvY2Ryb20uaD4KKyAqIEdlbmVyYWwgaGVhZGVyIGZpbGUgZm9yIGxpbnV4IENELVJPTSBkcml2ZXJzIAorICogQ29weXJpZ2h0IChDKSAxOTkyICAgICAgICAgRGF2aWQgR2lsbGVyLCByYWZldG1hZEBveHkuZWR1CisgKiAgICAgICAgICAgICAgIDE5OTQsIDE5OTUgICBFYmVyaGFyZCBNw7Zua2ViZXJnLCBlbW9lbmtlQGd3ZGcuZGUKKyAqICAgICAgICAgICAgICAgMTk5NiAgICAgICAgIERhdmlkIHZhbiBMZWV1d2VuLCBkYXZpZEB0bS50bm8ubmwKKyAqICAgICAgICAgICAgICAgMTk5NywgMTk5OCAgIEVyaWsgQW5kZXJzZW4sIGFuZGVyc2VlQGRlYmlhbi5vcmcKKyAqICAgICAgICAgICAgICAgMTk5OC0yMDAyICAgIEplbnMgQXhib2UsIGF4Ym9lQHN1c2UuZGUKKyAqLworIAorI2lmbmRlZglfTElOVVhfQ0RST01fSAorI2RlZmluZQlfTElOVVhfQ0RST01fSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBcyBvZiBMaW51eCAyLjEueCwgYWxsIExpbnV4IENELVJPTSBhcHBsaWNhdGlvbiBwcm9ncmFtcyB3aWxsIHVzZSB0aGlzIAorICogKGFuZCBvbmx5IHRoaXMpIGluY2x1ZGUgZmlsZS4gIEl0IGlzIG15IGhvcGUgdG8gcHJvdmlkZSBMaW51eCB3aXRoCisgKiBhIHVuaWZvcm0gaW50ZXJmYWNlIGJldHdlZW4gc29mdHdhcmUgYWNjZXNzaW5nIENELVJPTXMgYW5kIHRoZSB2YXJpb3VzIAorICogZGV2aWNlIGRyaXZlcnMgdGhhdCBhY3R1YWxseSB0YWxrIHRvIHRoZSBkcml2ZXMuICBUaGVyZSBtYXkgc3RpbGwgYmUKKyAqIDIzIGRpZmZlcmVudCBraW5kcyBvZiBzdHJhbmdlIENELVJPTSBkcml2ZXMsIGJ1dCBhdCBsZWFzdCB0aGVyZSB3aWxsIAorICogbm93IGJlIG9uZSwgYW5kIG9ubHkgb25lLCBMaW51eCBDRC1ST00gaW50ZXJmYWNlLgorICoKKyAqIEFkZGl0aW9uYWxseSwgYXMgb2YgTGludXggMi4xLngsIGFsbCBMaW51eCBhcHBsaWNhdGlvbiBwcm9ncmFtcyAKKyAqIHNob3VsZCB1c2UgdGhlIE9fTk9OQkxPQ0sgb3B0aW9uIHdoZW4gb3BlbmluZyBhIENELVJPTSBkZXZpY2UgCisgKiBmb3Igc3Vic2VxdWVudCBpb2N0bCBjb21tYW5kcy4gIFRoaXMgYWxsb3dzIGZvciBuZWF0IHN5c3RlbSBlcnJvcnMgCisgKiBsaWtlICJObyBtZWRpdW0gZm91bmQiIG9yICJXcm9uZyBtZWRpdW0gdHlwZSIgdXBvbiBhdHRlbXB0aW5nIHRvIAorICogbW91bnQgb3IgcGxheSBhbiBlbXB0eSBzbG90LCBtb3VudCBhbiBhdWRpbyBkaXNjLCBvciBwbGF5IGEgZGF0YSBkaXNjLgorICogR2VuZXJhbGx5LCBjaGFuZ2luZyBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHRvIHN1cHBvcnQgT19OT05CTE9DSworICogaXMgYXMgZWFzeSBhcyB0aGUgZm9sbG93aW5nOgorICogICAgICAgLSAgICBkcml2ZSA9IG9wZW4oIi9kZXYvY2Ryb20iLCBPX1JET05MWSk7CisgKiAgICAgICArICAgIGRyaXZlID0gb3BlbigiL2Rldi9jZHJvbSIsIE9fUkRPTkxZIHwgT19OT05CTE9DSyk7CisgKiBJdCBpcyB3b3J0aCB0aGUgc21hbGwgY2hhbmdlLgorICoKKyAqICBQYXRjaGVzIGZvciBtYW55IGNvbW1vbiBDRCBwcm9ncmFtcyAocHJvdmlkZWQgYnkgRGF2aWQgQS4gdmFuIExlZXV3ZW4pCisgKiAgY2FuIGJlIGZvdW5kIGF0OiAgZnRwOi8vZnRwLmd3ZGcuZGUvcHViL2xpbnV4L2Nkcm9tL2RyaXZlcnMvY20yMDYvCisgKiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBXaGVuIGEgZHJpdmVyIHN1cHBvcnRzIGEgY2VydGFpbiBmdW5jdGlvbiwgYnV0IHRoZSBjZHJvbSBkcml2ZSB3ZSBhcmUgCisgKiB1c2luZyBkb2Vzbid0LCB3ZSB3aWxsIHJldHVybiB0aGUgZXJyb3IgRURSSVZFX0NBTlRfRE9fVEhJUy4gIFdlIHdpbGwgCisgKiBib3Jyb3cgdGhlICJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCIgZXJyb3IgZnJvbSB0aGUgbmV0d29yayBmb2xrcyB0byAKKyAqIGFjY29tcGxpc2ggdGhpcy4gIE1heWJlIHNvbWVkYXkgd2Ugd2lsbCBnZXQgYSBtb3JlIHRhcmdldGVkIGVycm9yIGNvZGUsIAorICogYnV0IHRoaXMgd2lsbCBkbyBmb3Igbm93Li4uICovCisjZGVmaW5lIEVEUklWRV9DQU5UX0RPX1RISVMgIEVPUE5PVFNVUFAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoZSBDRC1ST00gSU9DVEwgY29tbWFuZHMgIC0tIHRoZXNlIHNob3VsZCBiZSBzdXBwb3J0ZWQgYnkgCisgKiBhbGwgdGhlIHZhcmlvdXMgY2Ryb20gZHJpdmVycy4gIEZvciB0aGUgQ0QtUk9NIGlvY3Rscywgd2UgCisgKiB3aWxsIGNvbW1hbmRlZXIgYnl0ZSAweDUzLCBvciAnUycuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQ0RST01QQVVTRQkJMHg1MzAxIC8qIFBhdXNlIEF1ZGlvIE9wZXJhdGlvbiAqLyAKKyNkZWZpbmUgQ0RST01SRVNVTUUJCTB4NTMwMiAvKiBSZXN1bWUgcGF1c2VkIEF1ZGlvIE9wZXJhdGlvbiAqLworI2RlZmluZSBDRFJPTVBMQVlNU0YJCTB4NTMwMyAvKiBQbGF5IEF1ZGlvIE1TRiAoc3RydWN0IGNkcm9tX21zZikgKi8KKyNkZWZpbmUgQ0RST01QTEFZVFJLSU5ECQkweDUzMDQgLyogUGxheSBBdWRpbyBUcmFjay9pbmRleCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNkcm9tX3RpKSAqLworI2RlZmluZSBDRFJPTVJFQURUT0NIRFIJCTB4NTMwNSAvKiBSZWFkIFRPQyBoZWFkZXIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjZHJvbV90b2NoZHIpICovCisjZGVmaW5lIENEUk9NUkVBRFRPQ0VOVFJZCTB4NTMwNiAvKiBSZWFkIFRPQyBlbnRyeSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNkcm9tX3RvY2VudHJ5KSAqLworI2RlZmluZSBDRFJPTVNUT1AJCTB4NTMwNyAvKiBTdG9wIHRoZSBjZHJvbSBkcml2ZSAqLworI2RlZmluZSBDRFJPTVNUQVJUCQkweDUzMDggLyogU3RhcnQgdGhlIGNkcm9tIGRyaXZlICovCisjZGVmaW5lIENEUk9NRUpFQ1QJCTB4NTMwOSAvKiBFamVjdHMgdGhlIGNkcm9tIG1lZGlhICovCisjZGVmaW5lIENEUk9NVk9MQ1RSTAkJMHg1MzBhIC8qIENvbnRyb2wgb3V0cHV0IHZvbHVtZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNkcm9tX3ZvbGN0cmwpICovCisjZGVmaW5lIENEUk9NU1VCQ0hOTAkJMHg1MzBiIC8qIFJlYWQgc3ViY2hhbm5lbCBkYXRhIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY2Ryb21fc3ViY2hubCkgKi8KKyNkZWZpbmUgQ0RST01SRUFETU9ERTIJCTB4NTMwYyAvKiBSZWFkIENEUk9NIG1vZGUgMiBkYXRhICgyMzM2IEJ5dGVzKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNkcm9tX3JlYWQpICovCisjZGVmaW5lIENEUk9NUkVBRE1PREUxCQkweDUzMGQgLyogUmVhZCBDRFJPTSBtb2RlIDEgZGF0YSAoMjA0OCBCeXRlcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNkcm9tX3JlYWQpICovCisjZGVmaW5lIENEUk9NUkVBREFVRElPCQkweDUzMGUgLyogKHN0cnVjdCBjZHJvbV9yZWFkX2F1ZGlvKSAqLworI2RlZmluZSBDRFJPTUVKRUNUX1NXCQkweDUzMGYgLyogZW5hYmxlKDEpL2Rpc2FibGUoMCkgYXV0by1lamVjdGluZyAqLworI2RlZmluZSBDRFJPTU1VTFRJU0VTU0lPTgkweDUzMTAgLyogT2J0YWluIHRoZSBzdGFydC1vZi1sYXN0LXNlc3Npb24gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcyBvZiBtdWx0aSBzZXNzaW9uIGRpc2tzIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY2Ryb21fbXVsdGlzZXNzaW9uKSAqLworI2RlZmluZSBDRFJPTV9HRVRfTUNOCQkweDUzMTEgLyogT2J0YWluIHRoZSAiVW5pdmVyc2FsIFByb2R1Y3QgQ29kZSIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgYXZhaWxhYmxlIChzdHJ1Y3QgY2Ryb21fbWNuKSAqLworI2RlZmluZSBDRFJPTV9HRVRfVVBDCQlDRFJPTV9HRVRfTUNOICAvKiBUaGlzIG9uZSBpcyBkZXByZWNhdGVkLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dCBoZXJlIGFueXdheSBmb3IgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBDRFJPTVJFU0VUCQkweDUzMTIgLyogaGFyZC1yZXNldCB0aGUgZHJpdmUgKi8KKyNkZWZpbmUgQ0RST01WT0xSRUFECQkweDUzMTMgLyogR2V0IHRoZSBkcml2ZSdzIHZvbHVtZSBzZXR0aW5nIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjZHJvbV92b2xjdHJsKSAqLworI2RlZmluZSBDRFJPTVJFQURSQVcJCTB4NTMxNAkvKiByZWFkIGRhdGEgaW4gcmF3IG1vZGUgKDIzNTIgQnl0ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjZHJvbV9yZWFkKSAqLworLyogCisgKiBUaGVzZSBpb2N0bHMgYXJlIHVzZWQgb25seSB1c2VkIGluIGF6dGNkLmMgYW5kIG9wdGNkLmMKKyAqLworI2RlZmluZSBDRFJPTVJFQURDT09LRUQJCTB4NTMxNQkvKiByZWFkIGRhdGEgaW4gY29va2VkIG1vZGUgKi8KKyNkZWZpbmUgQ0RST01TRUVLCQkweDUzMTYgIC8qIHNlZWsgbXNmIGFkZHJlc3MgKi8KKyAgCisvKgorICogVGhpcyBpb2N0bCBpcyBvbmx5IHVzZWQgYnkgdGhlIHNjc2ktY2QgZHJpdmVyLiAgCisgICBJdCBpcyBmb3IgcGxheWluZyBhdWRpbyBpbiBsb2dpY2FsIGJsb2NrIGFkZHJlc3NpbmcgbW9kZS4KKyAqLworI2RlZmluZSBDRFJPTVBMQVlCTEsJCTB4NTMxNwkvKiAoc3RydWN0IGNkcm9tX2JsaykgKi8KKworLyogCisgKiBUaGVzZSBpb2N0bHMgYXJlIG9ubHkgdXNlZCBpbiBvcHRjZC5jCisgKi8KKyNkZWZpbmUgQ0RST01SRUFEQUxMCQkweDUzMTgJLyogcmVhZCBhbGwgMjY0NiBieXRlcyAqLworCisvKiAKKyAqIFRoZXNlIGlvY3RscyBhcmUgKG5vdykgb25seSBpbiBpZGUtY2QuYyBmb3IgY29udHJvbGxpbmcgCisgKiBkcml2ZSBzcGluZG93biB0aW1lLiAgVGhleSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlCisgKiBVbmlmb3JtIGRyaXZlciwgdmlhIGdlbmVyaWMgcGFja2V0IGNvbW1hbmRzLCBHUENNRF9NT0RFX1NFTEVDVF8xMCwKKyAqIEdQQ01EX01PREVfU0VOU0VfMTAgYW5kIHRoZSBHUE1PREVfUE9XRVJfUEFHRS4uLgorICogIC1FcmlrCisgKi8KKyNkZWZpbmUgQ0RST01HRVRTUElORE9XTiAgICAgICAgMHg1MzFkCisjZGVmaW5lIENEUk9NU0VUU1BJTkRPV04gICAgICAgIDB4NTMxZQorCisvKiAKKyAqIFRoZXNlIGlvY3RscyBhcmUgaW1wbGVtZW50ZWQgdGhyb3VnaCB0aGUgdW5pZm9ybSBDRC1ST00gZHJpdmVyCisgKiBUaGV5IF93aWxsXyBiZSBhZG9wdGVkIGJ5IGFsbCBDRC1ST00gZHJpdmVycywgd2hlbiBhbGwgdGhlIENELVJPTQorICogZHJpdmVycyBhcmUgZXZlbnR1YWxseSBwb3J0ZWQgdG8gdGhlIHVuaWZvcm0gQ0QtUk9NIGRyaXZlciBpbnRlcmZhY2UuCisgKi8KKyNkZWZpbmUgQ0RST01DTE9TRVRSQVkJCTB4NTMxOQkvKiBwZW5kYW50IG9mIENEUk9NRUpFQ1QgKi8KKyNkZWZpbmUgQ0RST01fU0VUX09QVElPTlMJMHg1MzIwICAvKiBTZXQgYmVoYXZpb3Igb3B0aW9ucyAqLworI2RlZmluZSBDRFJPTV9DTEVBUl9PUFRJT05TCTB4NTMyMSAgLyogQ2xlYXIgYmVoYXZpb3Igb3B0aW9ucyAqLworI2RlZmluZSBDRFJPTV9TRUxFQ1RfU1BFRUQJMHg1MzIyICAvKiBTZXQgdGhlIENELVJPTSBzcGVlZCAqLworI2RlZmluZSBDRFJPTV9TRUxFQ1RfRElTQwkweDUzMjMgIC8qIFNlbGVjdCBkaXNjIChmb3IganVrZS1ib3hlcykgKi8KKyNkZWZpbmUgQ0RST01fTUVESUFfQ0hBTkdFRAkweDUzMjUgIC8qIENoZWNrIGlzIG1lZGlhIGNoYW5nZWQgICovCisjZGVmaW5lIENEUk9NX0RSSVZFX1NUQVRVUwkweDUzMjYgIC8qIEdldCB0cmF5IHBvc2l0aW9uLCBldGMuICovCisjZGVmaW5lIENEUk9NX0RJU0NfU1RBVFVTCTB4NTMyNyAgLyogR2V0IGRpc2MgdHlwZSwgZXRjLiAqLworI2RlZmluZSBDRFJPTV9DSEFOR0VSX05TTE9UUyAgICAweDUzMjggIC8qIEdldCBudW1iZXIgb2Ygc2xvdHMgKi8KKyNkZWZpbmUgQ0RST01fTE9DS0RPT1IJCTB4NTMyOSAgLyogbG9jayBvciB1bmxvY2sgZG9vciAqLworI2RlZmluZSBDRFJPTV9ERUJVRwkJMHg1MzMwCS8qIFR1cm4gZGVidWcgbWVzc2FnZXMgb24vb2ZmICovCisjZGVmaW5lIENEUk9NX0dFVF9DQVBBQklMSVRZCTB4NTMzMQkvKiBnZXQgY2FwYWJpbGl0aWVzICovCisKKy8qIE5vdGUgdGhhdCBzY3NpL3Njc2lfaW9jdGwuaCBhbHNvIHVzZXMgMHg1MzgyIC0gMHg1Mzg2LgorICogRnV0dXJlIENEUk9NIGlvY3RscyBzaG91bGQgYmUga2VwdCBiZWxvdyAweDUzN0YKKyAqLworCisvKiBUaGlzIGlvY3RsIGlzIG9ubHkgdXNlZCBieSBzYnBjZCBhdCB0aGUgbW9tZW50ICovCisjZGVmaW5lIENEUk9NQVVESU9CVUZTSVogICAgICAgIDB4NTM4MgkvKiBzZXQgdGhlIGF1ZGlvIGJ1ZmZlciBzaXplICovCisJCQkJCS8qIGNvbmZsaWN0IHdpdGggU0NTSV9JT0NUTF9HRVRfSURMVU4gKi8KKworLyogRFZELVJPTSBTcGVjaWZpYyBpb2N0bHMgKi8KKyNkZWZpbmUgRFZEX1JFQURfU1RSVUNUCQkweDUzOTAgIC8qIFJlYWQgc3RydWN0dXJlICovCisjZGVmaW5lIERWRF9XUklURV9TVFJVQ1QJMHg1MzkxICAvKiBXcml0ZSBzdHJ1Y3R1cmUgKi8KKyNkZWZpbmUgRFZEX0FVVEgJCTB4NTM5MiAgLyogQXV0aGVudGljYXRpb24gKi8KKworI2RlZmluZSBDRFJPTV9TRU5EX1BBQ0tFVAkweDUzOTMJLyogc2VuZCBhIHBhY2tldCB0byB0aGUgZHJpdmUgKi8KKyNkZWZpbmUgQ0RST01fTkVYVF9XUklUQUJMRQkweDUzOTQJLyogZ2V0IG5leHQgd3JpdGFibGUgYmxvY2sgKi8KKyNkZWZpbmUgQ0RST01fTEFTVF9XUklUVEVOCTB4NTM5NQkvKiBnZXQgbGFzdCBibG9jayB3cml0dGVuIG9uIGRpc2MgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENEUk9NIElPQ1RMIHN0cnVjdHVyZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBBZGRyZXNzIGluIE1TRiBmb3JtYXQgKi8KK3N0cnVjdCBjZHJvbV9tc2YwCQkKK3sKKwlfX3U4CW1pbnV0ZTsKKwlfX3U4CXNlY29uZDsKKwlfX3U4CWZyYW1lOworfTsKKworLyogQWRkcmVzcyBpbiBlaXRoZXIgTVNGIG9yIGxvZ2ljYWwgZm9ybWF0ICovCit1bmlvbiBjZHJvbV9hZGRyCQkKK3sKKwlzdHJ1Y3QgY2Ryb21fbXNmMAltc2Y7CisJaW50CQkJbGJhOworfTsKKworLyogVGhpcyBzdHJ1Y3QgaXMgdXNlZCBieSB0aGUgQ0RST01QTEFZTVNGIGlvY3RsICovIAorc3RydWN0IGNkcm9tX21zZiAKK3sKKwlfX3U4CWNkbXNmX21pbjA7CS8qIHN0YXJ0IG1pbnV0ZSAqLworCV9fdTgJY2Rtc2Zfc2VjMDsJLyogc3RhcnQgc2Vjb25kICovCisJX191OAljZG1zZl9mcmFtZTA7CS8qIHN0YXJ0IGZyYW1lICovCisJX191OAljZG1zZl9taW4xOwkvKiBlbmQgbWludXRlICovCisJX191OAljZG1zZl9zZWMxOwkvKiBlbmQgc2Vjb25kICovCisJX191OAljZG1zZl9mcmFtZTE7CS8qIGVuZCBmcmFtZSAqLworfTsKKworLyogVGhpcyBzdHJ1Y3QgaXMgdXNlZCBieSB0aGUgQ0RST01QTEFZVFJLSU5EIGlvY3RsICovCitzdHJ1Y3QgY2Ryb21fdGkgCit7CisJX191OAljZHRpX3RyazA7CS8qIHN0YXJ0IHRyYWNrICovCisJX191OAljZHRpX2luZDA7CS8qIHN0YXJ0IGluZGV4ICovCisJX191OAljZHRpX3RyazE7CS8qIGVuZCB0cmFjayAqLworCV9fdTgJY2R0aV9pbmQxOwkvKiBlbmQgaW5kZXggKi8KK307CisKKy8qIFRoaXMgc3RydWN0IGlzIHVzZWQgYnkgdGhlIENEUk9NUkVBRFRPQ0hEUiBpb2N0bCAqLworc3RydWN0IGNkcm9tX3RvY2hkciAJCit7CisJX191OAljZHRoX3RyazA7CS8qIHN0YXJ0IHRyYWNrICovCisJX191OAljZHRoX3RyazE7CS8qIGVuZCB0cmFjayAqLworfTsKKworLyogVGhpcyBzdHJ1Y3QgaXMgdXNlZCBieSB0aGUgQ0RST01WT0xDVFJMIGFuZCBDRFJPTVZPTFJFQUQgaW9jdGxzICovCitzdHJ1Y3QgY2Ryb21fdm9sY3RybAoreworCV9fdTgJY2hhbm5lbDA7CisJX191OAljaGFubmVsMTsKKwlfX3U4CWNoYW5uZWwyOworCV9fdTgJY2hhbm5lbDM7Cit9OworCisvKiBUaGlzIHN0cnVjdCBpcyB1c2VkIGJ5IHRoZSBDRFJPTVNVQkNITkwgaW9jdGwgKi8KK3N0cnVjdCBjZHJvbV9zdWJjaG5sIAoreworCV9fdTgJY2RzY19mb3JtYXQ7CisJX191OAljZHNjX2F1ZGlvc3RhdHVzOworCV9fdTgJY2RzY19hZHI6CTQ7CisJX191OAljZHNjX2N0cmw6CTQ7CisJX191OAljZHNjX3RyazsKKwlfX3U4CWNkc2NfaW5kOworCXVuaW9uIGNkcm9tX2FkZHIgY2RzY19hYnNhZGRyOworCXVuaW9uIGNkcm9tX2FkZHIgY2RzY19yZWxhZGRyOworfTsKKworCisvKiBUaGlzIHN0cnVjdCBpcyB1c2VkIGJ5IHRoZSBDRFJPTVJFQURUT0NFTlRSWSBpb2N0bCAqLworc3RydWN0IGNkcm9tX3RvY2VudHJ5IAoreworCV9fdTgJY2R0ZV90cmFjazsKKwlfX3U4CWNkdGVfYWRyCTo0OworCV9fdTgJY2R0ZV9jdHJsCTo0OworCV9fdTgJY2R0ZV9mb3JtYXQ7CisJdW5pb24gY2Ryb21fYWRkciBjZHRlX2FkZHI7CisJX191OAljZHRlX2RhdGFtb2RlOworfTsKKworLyogVGhpcyBzdHJ1Y3QgaXMgdXNlZCBieSB0aGUgQ0RST01SRUFETU9ERTEsIGFuZCBDRFJPTVJFQURNT0RFMiBpb2N0bHMgKi8KK3N0cnVjdCBjZHJvbV9yZWFkICAgICAgCit7CisJaW50CWNkcmVhZF9sYmE7CisJY2hhciAJKmNkcmVhZF9idWZhZGRyOworCWludAljZHJlYWRfYnVmbGVuOworfTsKKworLyogVGhpcyBzdHJ1Y3QgaXMgdXNlZCBieSB0aGUgQ0RST01SRUFEQVVESU8gaW9jdGwgKi8KK3N0cnVjdCBjZHJvbV9yZWFkX2F1ZGlvCit7CisJdW5pb24gY2Ryb21fYWRkciBhZGRyOyAvKiBmcmFtZSBhZGRyZXNzICovCisJX191OCBhZGRyX2Zvcm1hdDsgICAgICAvKiBDRFJPTV9MQkEgb3IgQ0RST01fTVNGICovCisJaW50IG5mcmFtZXM7ICAgICAgICAgICAvKiBudW1iZXIgb2YgMjM1Mi1ieXRlLWZyYW1lcyB0byByZWFkIGF0IG9uY2UgKi8KKwlfX3U4ICpidWY7ICAgICAgLyogZnJhbWUgYnVmZmVyIChzaXplOiBuZnJhbWVzKjIzNTIgYnl0ZXMpICovCit9OworCisvKiBUaGlzIHN0cnVjdCBpcyB1c2VkIHdpdGggdGhlIENEUk9NTVVMVElTRVNTSU9OIGlvY3RsICovCitzdHJ1Y3QgY2Ryb21fbXVsdGlzZXNzaW9uCit7CisJdW5pb24gY2Ryb21fYWRkciBhZGRyOyAvKiBmcmFtZSBhZGRyZXNzOiBzdGFydC1vZi1sYXN0LXNlc3Npb24gCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vdCB0aGUgbmV3ICJmcmFtZSAxNiIhKS4gIE9ubHkgdmFsaWQKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgInhhX2ZsYWciIGlzIHRydWUuICovCisJX191OCB4YV9mbGFnOyAgICAgICAgLyogMTogImlzIFhBIGRpc2siICovCisJX191OCBhZGRyX2Zvcm1hdDsgICAgLyogQ0RST01fTEJBIG9yIENEUk9NX01TRiAqLworfTsKKworLyogVGhpcyBzdHJ1Y3QgaXMgdXNlZCB3aXRoIHRoZSBDRFJPTV9HRVRfTUNOIGlvY3RsLiAgCisgKiBWZXJ5IGZldyBhdWRpbyBkaXNjcyBhY3R1YWxseSBoYXZlIFVuaXZlcnNhbCBQcm9kdWN0IENvZGUgaW5mb3JtYXRpb24sIAorICogd2hpY2ggc2hvdWxkIGp1c3QgYmUgdGhlIE1lZGl1bSBDYXRhbG9nIE51bWJlciBvbiB0aGUgYm94LiAgQWxzbyBub3RlIAorICogdGhhdCB0aGUgd2F5IHRoZSBjb2RlaXMgd3JpdHRlbiBvbiBDRCBpcyBfbm90XyB1bmlmb3JtIGFjcm9zcyBhbGwgZGlzY3MhCisgKi8gIAorc3RydWN0IGNkcm9tX21jbiAKK3sKKyAgX191OCBtZWRpdW1fY2F0YWxvZ19udW1iZXJbMTRdOyAvKiAxMyBBU0NJSSBkaWdpdHMsIG51bGwtdGVybWluYXRlZCAqLworfTsKKworLyogVGhpcyBpcyB1c2VkIGJ5IHRoZSBDRFJPTVBMQVlCTEsgaW9jdGwgKi8KK3N0cnVjdCBjZHJvbV9ibGsgCit7CisJdW5zaWduZWQgZnJvbTsKKwl1bnNpZ25lZCBzaG9ydCBsZW47Cit9OworCisjZGVmaW5lIENEUk9NX1BBQ0tFVF9TSVpFCTEyCisKKyNkZWZpbmUgQ0dDX0RBVEFfVU5LTk9XTgkwCisjZGVmaW5lIENHQ19EQVRBX1dSSVRFCQkxCisjZGVmaW5lIENHQ19EQVRBX1JFQUQJCTIKKyNkZWZpbmUgQ0dDX0RBVEFfTk9ORQkJMworCisvKiBmb3IgQ0RST01fUEFDS0VUX0NPTU1BTkQgaW9jdGwgKi8KK3N0cnVjdCBjZHJvbV9nZW5lcmljX2NvbW1hbmQKK3sKKwl1bnNpZ25lZCBjaGFyIAkJY21kW0NEUk9NX1BBQ0tFVF9TSVpFXTsKKwl1bnNpZ25lZCBjaGFyCQkqYnVmZmVyOworCXVuc2lnbmVkIGludCAJCWJ1ZmxlbjsKKwlpbnQJCQlzdGF0OworCXN0cnVjdCByZXF1ZXN0X3NlbnNlCSpzZW5zZTsKKwl1bnNpZ25lZCBjaGFyCQlkYXRhX2RpcmVjdGlvbjsKKwlpbnQJCQlxdWlldDsKKwlpbnQJCQl0aW1lb3V0OworCXZvaWQJCQkqcmVzZXJ2ZWRbMV07CS8qIHVudXNlZCwgYWN0dWFsbHkgKi8KK307CisKKy8qCisgKiBBIENELVJPTSBwaHlzaWNhbCBzZWN0b3Igc2l6ZSBpcyAyMDQ4LCAyMDUyLCAyMDU2LCAyMzI0LCAyMzMyLCAyMzM2LCAKKyAqIDIzNDAsIG9yIDIzNTIgYnl0ZXMgbG9uZy4gIAorCisqICAgICAgICAgU2VjdG9yIHR5cGVzIG9mIHRoZSBzdGFuZGFyZCBDRC1ST00gZGF0YSBmb3JtYXRzOgorICoKKyAqIGZvcm1hdCAgIHNlY3RvciB0eXBlICAgICAgICAgICAgICAgdXNlciBkYXRhIHNpemUgKGJ5dGVzKQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgMSAgICAgKFJlZCBCb29rKSAgICBDRC1EQSAgICAgICAgICAyMzUyICAgIChDRF9GUkFNRVNJWkVfUkFXKQorICogICAyICAgICAoWWVsbG93IEJvb2spIE1vZGUxIEZvcm0xICAgIDIwNDggICAgKENEX0ZSQU1FU0laRSkKKyAqICAgMyAgICAgKFllbGxvdyBCb29rKSBNb2RlMSBGb3JtMiAgICAyMzM2ICAgIChDRF9GUkFNRVNJWkVfUkFXMCkKKyAqICAgNCAgICAgKEdyZWVuIEJvb2spICBNb2RlMiBGb3JtMSAgICAyMDQ4ICAgIChDRF9GUkFNRVNJWkUpCisgKiAgIDUgICAgIChHcmVlbiBCb29rKSAgTW9kZTIgRm9ybTIgICAgMjMyOCAgICAoMjMyNCs0IHNwYXJlIGJ5dGVzKQorICoKKyAqCisgKiAgICAgICBUaGUgbGF5b3V0IG9mIHRoZSBzdGFuZGFyZCBDRC1ST00gZGF0YSBmb3JtYXRzOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIC0gYXVkaW8gKHJlZCk6ICAgICAgICAgICAgICAgICAgfCBhdWRpb19zYW1wbGVfYnl0ZXMgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAyMzUyICAgICAgICB8CisgKgorICogLSBkYXRhICh5ZWxsb3csIG1vZGUxKTogICAgICAgICB8IHN5bmMgLSBoZWFkIC0gZGF0YSAtIEVEQyAtIHplcm8gLSBFQ0MgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMiAgLSAgIDQgIC0gMjA0OCAtICA0ICAtICAgOCAgLSAyNzYgfAorICoKKyAqIC0gZGF0YSAoeWVsbG93LCBtb2RlMik6ICAgICAgICAgfCBzeW5jIC0gaGVhZCAtIGRhdGEgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMiAgLSAgIDQgIC0gMjMzNiB8CisgKgorICogLSBYQSBkYXRhIChncmVlbiwgbW9kZTIgZm9ybTEpOiB8IHN5bmMgLSBoZWFkIC0gc3ViIC0gZGF0YSAtIEVEQyAtIEVDQyB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEyICAtICAgNCAgLSAgOCAgLSAyMDQ4IC0gIDQgIC0gMjc2IHwKKyAqCisgKiAtIFhBIGRhdGEgKGdyZWVuLCBtb2RlMiBmb3JtMik6IHwgc3luYyAtIGhlYWQgLSBzdWIgLSBkYXRhIC0gU3BhcmUgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMiAgLSAgIDQgIC0gIDggIC0gMjMyNCAtICA0ICAgIHwKKyAqCisgKi8KKworLyogU29tZSBnZW5lcmFsbHkgdXNlZnVsIENELVJPTSBpbmZvcm1hdGlvbiAtLSBtb3N0bHkgYmFzZWQgb24gdGhlIGFib3ZlICovCisjZGVmaW5lIENEX01JTlMgICAgICAgICAgICAgIDc0IC8qIG1heC4gbWludXRlcyBwZXIgQ0QsIG5vdCByZWFsbHkgYSBsaW1pdCAqLworI2RlZmluZSBDRF9TRUNTICAgICAgICAgICAgICA2MCAvKiBzZWNvbmRzIHBlciBtaW51dGUgKi8KKyNkZWZpbmUgQ0RfRlJBTUVTICAgICAgICAgICAgNzUgLyogZnJhbWVzIHBlciBzZWNvbmQgKi8KKyNkZWZpbmUgQ0RfU1lOQ19TSVpFICAgICAgICAgMTIgLyogMTIgc3luYyBieXRlcyBwZXIgcmF3IGRhdGEgZnJhbWUgKi8KKyNkZWZpbmUgQ0RfTVNGX09GRlNFVCAgICAgICAxNTAgLyogTVNGIG51bWJlcmluZyBvZmZzZXQgb2YgZmlyc3QgZnJhbWUgKi8KKyNkZWZpbmUgQ0RfQ0hVTktfU0laRSAgICAgICAgMjQgLyogbG93ZXN0LWxldmVsICJkYXRhIGJ5dGVzIHBpZWNlIiAqLworI2RlZmluZSBDRF9OVU1fT0ZfQ0hVTktTICAgICA5OCAvKiBjaHVua3MgcGVyIGZyYW1lICovCisjZGVmaW5lIENEX0ZSQU1FU0laRV9TVUIgICAgIDk2IC8qIHN1YmNoYW5uZWwgZGF0YSAiZnJhbWUiIHNpemUgKi8KKyNkZWZpbmUgQ0RfSEVBRF9TSVpFICAgICAgICAgIDQgLyogaGVhZGVyIChhZGRyZXNzKSBieXRlcyBwZXIgcmF3IGRhdGEgZnJhbWUgKi8KKyNkZWZpbmUgQ0RfU1VCSEVBRF9TSVpFICAgICAgIDggLyogc3ViaGVhZGVyIGJ5dGVzIHBlciByYXcgWEEgZGF0YSBmcmFtZSAqLworI2RlZmluZSBDRF9FRENfU0laRSAgICAgICAgICAgNCAvKiBieXRlcyBFREMgcGVyIG1vc3QgcmF3IGRhdGEgZnJhbWUgdHlwZXMgKi8KKyNkZWZpbmUgQ0RfWkVST19TSVpFICAgICAgICAgIDggLyogYnl0ZXMgemVybyBwZXIgeWVsbG93IGJvb2sgbW9kZSAxIGZyYW1lICovCisjZGVmaW5lIENEX0VDQ19TSVpFICAgICAgICAgMjc2IC8qIGJ5dGVzIEVDQyBwZXIgbW9zdCByYXcgZGF0YSBmcmFtZSB0eXBlcyAqLworI2RlZmluZSBDRF9GUkFNRVNJWkUgICAgICAgMjA0OCAvKiBieXRlcyBwZXIgZnJhbWUsICJjb29rZWQiIG1vZGUgKi8KKyNkZWZpbmUgQ0RfRlJBTUVTSVpFX1JBVyAgIDIzNTIgLyogYnl0ZXMgcGVyIGZyYW1lLCAicmF3IiBtb2RlICovCisjZGVmaW5lIENEX0ZSQU1FU0laRV9SQVdFUiAyNjQ2IC8qIFRoZSBtYXhpbXVtIHBvc3NpYmxlIHJldHVybmVkIGJ5dGVzICovIAorLyogbW9zdCBkcml2ZXMgZG9uJ3QgZGVsaXZlciBldmVyeXRoaW5nOiAqLworI2RlZmluZSBDRF9GUkFNRVNJWkVfUkFXMSAoQ0RfRlJBTUVTSVpFX1JBVy1DRF9TWU5DX1NJWkUpIC8qMjM0MCovCisjZGVmaW5lIENEX0ZSQU1FU0laRV9SQVcwIChDRF9GUkFNRVNJWkVfUkFXLUNEX1NZTkNfU0laRS1DRF9IRUFEX1NJWkUpIC8qMjMzNiovCisKKyNkZWZpbmUgQ0RfWEFfSEVBRCAgICAgICAgKENEX0hFQURfU0laRStDRF9TVUJIRUFEX1NJWkUpIC8qICJiZWZvcmUgZGF0YSIgcGFydCBvZiByYXcgWEEgZnJhbWUgKi8KKyNkZWZpbmUgQ0RfWEFfVEFJTCAgICAgICAgKENEX0VEQ19TSVpFK0NEX0VDQ19TSVpFKSAvKiAiYWZ0ZXIgZGF0YSIgcGFydCBvZiByYXcgWEEgZnJhbWUgKi8KKyNkZWZpbmUgQ0RfWEFfU1lOQ19IRUFEICAgKENEX1NZTkNfU0laRStDRF9YQV9IRUFEKSAvKiBzeW5jIGJ5dGVzICsgaGVhZGVyIG9mIFhBIGZyYW1lICovCisKKy8qIENELVJPTSBhZGRyZXNzIHR5cGVzIChjZHJvbV90b2NlbnRyeS5jZHRlX2Zvcm1hdCkgKi8KKyNkZWZpbmUJQ0RST01fTEJBIDB4MDEgLyogImxvZ2ljYWwgYmxvY2siOiBmaXJzdCBmcmFtZSBpcyAjMCAqLworI2RlZmluZQlDRFJPTV9NU0YgMHgwMiAvKiAibWludXRlLXNlY29uZC1mcmFtZSI6IGJpbmFyeSwgbm90IGJjZCBoZXJlISAqLworCisvKiBiaXQgdG8gdGVsbCB3aGV0aGVyIHRyYWNrIGlzIGRhdGEgb3IgYXVkaW8gKGNkcm9tX3RvY2VudHJ5LmNkdGVfY3RybCkgKi8KKyNkZWZpbmUJQ0RST01fREFUQV9UUkFDSwkweDA0CisKKy8qIFRoZSBsZWFkb3V0IHRyYWNrIGlzIGFsd2F5cyAweEFBLCByZWdhcmRsZXNzIG9mICMgb2YgdHJhY2tzIG9uIGRpc2MgKi8KKyNkZWZpbmUJQ0RST01fTEVBRE9VVAkJMHhBQQorCisvKiBhdWRpbyBzdGF0ZXMgKGZyb20gU0NTSS0yLCBidXQgc2VlbiB3aXRoIG90aGVyIGRyaXZlcywgdG9vKSAqLworI2RlZmluZQlDRFJPTV9BVURJT19JTlZBTElECTB4MDAJLyogYXVkaW8gc3RhdHVzIG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUJQ0RST01fQVVESU9fUExBWQkweDExCS8qIGF1ZGlvIHBsYXkgb3BlcmF0aW9uIGluIHByb2dyZXNzICovCisjZGVmaW5lCUNEUk9NX0FVRElPX1BBVVNFRAkweDEyCS8qIGF1ZGlvIHBsYXkgb3BlcmF0aW9uIHBhdXNlZCAqLworI2RlZmluZQlDRFJPTV9BVURJT19DT01QTEVURUQJMHgxMwkvKiBhdWRpbyBwbGF5IHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgKi8KKyNkZWZpbmUJQ0RST01fQVVESU9fRVJST1IJMHgxNAkvKiBhdWRpbyBwbGF5IHN0b3BwZWQgZHVlIHRvIGVycm9yICovCisjZGVmaW5lCUNEUk9NX0FVRElPX05PX1NUQVRVUwkweDE1CS8qIG5vIGN1cnJlbnQgYXVkaW8gc3RhdHVzIHRvIHJldHVybiAqLworCisvKiBjYXBhYmlsaXR5IGZsYWdzIHVzZWQgd2l0aCB0aGUgdW5pZm9ybSBDRC1ST00gZHJpdmVyICovIAorI2RlZmluZSBDRENfQ0xPU0VfVFJBWQkJMHgxICAgICAvKiBjYWRkeSBzeXN0ZW1zIF9jYW4ndF8gY2xvc2UgKi8KKyNkZWZpbmUgQ0RDX09QRU5fVFJBWQkJMHgyICAgICAvKiBidXQgX2Nhbl8gZWplY3QuICAqLworI2RlZmluZSBDRENfTE9DSwkJMHg0ICAgICAvKiBkaXNhYmxlIG1hbnVhbCBlamVjdCAqLworI2RlZmluZSBDRENfU0VMRUNUX1NQRUVEIAkweDggICAgIC8qIHByb2dyYW1tYWJsZSBzcGVlZCAqLworI2RlZmluZSBDRENfU0VMRUNUX0RJU0MJCTB4MTAgICAgLyogc2VsZWN0IGRpc2MgZnJvbSBqdWtlLWJveCAqLworI2RlZmluZSBDRENfTVVMVElfU0VTU0lPTiAJMHgyMCAgICAvKiByZWFkIHNlc3Npb25zPjEgKi8KKyNkZWZpbmUgQ0RDX01DTgkJCTB4NDAgICAgLyogTWVkaXVtIENhdGFsb2cgTnVtYmVyICovCisjZGVmaW5lIENEQ19NRURJQV9DSEFOR0VEIAkweDgwICAgIC8qIG1lZGlhIGNoYW5nZWQgKi8KKyNkZWZpbmUgQ0RDX1BMQVlfQVVESU8JCTB4MTAwICAgLyogYXVkaW8gZnVuY3Rpb25zICovCisjZGVmaW5lIENEQ19SRVNFVCAgICAgICAgICAgICAgIDB4MjAwICAgLyogaGFyZCByZXNldCBkZXZpY2UgKi8KKyNkZWZpbmUgQ0RDX0RSSVZFX1NUQVRVUyAgICAgICAgMHg4MDAgICAvKiBkcml2ZXIgaW1wbGVtZW50cyBkcml2ZSBzdGF0dXMgKi8KKyNkZWZpbmUgQ0RDX0dFTkVSSUNfUEFDS0VUCTB4MTAwMAkvKiBkcml2ZXIgaW1wbGVtZW50cyBnZW5lcmljIHBhY2tldHMgKi8KKyNkZWZpbmUgQ0RDX0NEX1IJCTB4MjAwMAkvKiBkcml2ZSBpcyBhIENELVIgKi8KKyNkZWZpbmUgQ0RDX0NEX1JXCQkweDQwMDAJLyogZHJpdmUgaXMgYSBDRC1SVyAqLworI2RlZmluZSBDRENfRFZECQkJMHg4MDAwCS8qIGRyaXZlIGlzIGEgRFZEICovCisjZGVmaW5lIENEQ19EVkRfUgkJMHgxMDAwMAkvKiBkcml2ZSBjYW4gd3JpdGUgRFZELVIgKi8KKyNkZWZpbmUgQ0RDX0RWRF9SQU0JCTB4MjAwMDAJLyogZHJpdmUgY2FuIHdyaXRlIERWRC1SQU0gKi8KKyNkZWZpbmUgQ0RDX01PX0RSSVZFCQkweDQwMDAwIC8qIGRyaXZlIGlzIGFuIE1PIGRldmljZSAqLworI2RlZmluZSBDRENfTVJXCQkJMHg4MDAwMCAvKiBkcml2ZSBjYW4gcmVhZCBNUlcgKi8KKyNkZWZpbmUgQ0RDX01SV19XCQkweDEwMDAwMCAvKiBkcml2ZSBjYW4gd3JpdGUgTVJXICovCisjZGVmaW5lIENEQ19SQU0JCQkweDIwMDAwMCAvKiBvayB0byBvcGVuIGZvciBXUklURSAqLworCisvKiBkcml2ZSBzdGF0dXMgcG9zc2liaWxpdGllcyByZXR1cm5lZCBieSBDRFJPTV9EUklWRV9TVEFUVVMgaW9jdGwgKi8KKyNkZWZpbmUgQ0RTX05PX0lORk8JCTAJLyogaWYgbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIENEU19OT19ESVNDCQkxCisjZGVmaW5lIENEU19UUkFZX09QRU4JCTIKKyNkZWZpbmUgQ0RTX0RSSVZFX05PVF9SRUFEWQkzCisjZGVmaW5lIENEU19ESVNDX09LCQk0CisKKy8qIHJldHVybiB2YWx1ZXMgZm9yIHRoZSBDRFJPTV9ESVNDX1NUQVRVUyBpb2N0bCAqLworLyogY2FuIGFsc28gcmV0dXJuIENEU19OT19bSU5GT3xESVNDXSwgZnJvbSBhYm92ZSAqLworI2RlZmluZSBDRFNfQVVESU8JCTEwMAorI2RlZmluZSBDRFNfREFUQV8xCQkxMDEKKyNkZWZpbmUgQ0RTX0RBVEFfMgkJMTAyCisjZGVmaW5lIENEU19YQV8yXzEJCTEwMworI2RlZmluZSBDRFNfWEFfMl8yCQkxMDQKKyNkZWZpbmUgQ0RTX01JWEVECQkxMDUKKworLyogVXNlci1jb25maWd1cmFibGUgYmVoYXZpb3Igb3B0aW9ucyBmb3IgdGhlIHVuaWZvcm0gQ0QtUk9NIGRyaXZlciAqLworI2RlZmluZSBDRE9fQVVUT19DTE9TRQkJMHgxICAgICAvKiBjbG9zZSB0cmF5IG9uIGZpcnN0IG9wZW4oKSAqLworI2RlZmluZSBDRE9fQVVUT19FSkVDVAkJMHgyICAgICAvKiBvcGVuIHRyYXkgb24gbGFzdCByZWxlYXNlKCkgKi8KKyNkZWZpbmUgQ0RPX1VTRV9GRkxBR1MJCTB4NCAgICAgLyogdXNlIE9fTk9OQkxPQ0sgaW5mb3JtYXRpb24gb24gb3BlbiAqLworI2RlZmluZSBDRE9fTE9DSwkJMHg4ICAgICAvKiBsb2NrIHRyYXkgb24gb3BlbiBmaWxlcyAqLworI2RlZmluZSBDRE9fQ0hFQ0tfVFlQRQkJMHgxMCAgICAvKiBjaGVjayB0eXBlIG9uIG9wZW4gZm9yIGRhdGEgKi8KKworLyogU3BlY2lhbCBjb2RlcyB1c2VkIHdoZW4gc3BlY2lmeWluZyBjaGFuZ2VyIHNsb3RzLiAqLworI2RlZmluZSBDRFNMX05PTkUgICAgICAgCShJTlRfTUFYLTEpCisjZGVmaW5lIENEU0xfQ1VSUkVOVCAgICAJSU5UX01BWAorCisvKiBGb3IgcGFydGl0aW9uIGJhc2VkIG11bHRpc2Vzc2lvbiBhY2Nlc3MuIElERSBjYW4gaGFuZGxlIDY0IHBhcnRpdGlvbnMKKyAqIHBlciBkcml2ZSAtIFNDU0kgQ0QtUk9NJ3MgdXNlIG1pbm9ycyB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdGhlCisgKiB2YXJpb3VzIGRyaXZlcywgc28gd2UgY2FuJ3QgZG8gbXVsdGlzZXNzaW9ucyB0aGUgc2FtZSB3YXkgdGhlcmUuCisgKiBVc2UgdGhlIC1vIHNlc3Npb249eCBvcHRpb24gdG8gbW91bnQgb24gdGhlbS4KKyAqLworI2RlZmluZSBDRF9QQVJUX01BWAkJNjQKKyNkZWZpbmUgQ0RfUEFSVF9NQVNLCQkoQ0RfUEFSVF9NQVggLSAxKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHZW5lcmljIFBhY2tldCBjb21tYW5kcywgTU1DIGNvbW1hbmRzLCBhbmQgc3VjaAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIC8qIFRoZSBnZW5lcmljIHBhY2tldCBjb21tYW5kIG9wY29kZXMgZm9yIENEL0RWRCBMb2dpY2FsIFVuaXRzLAorICogRnJvbSBUYWJsZSA1NyBvZiB0aGUgU0ZGODA5MCBWZXIuIDMgKE10LiBGdWppKSBkcmFmdCBzdGFuZGFyZC4gKi8KKyNkZWZpbmUgR1BDTURfQkxBTksJCQkgICAgMHhhMQorI2RlZmluZSBHUENNRF9DTE9TRV9UUkFDSwkJICAgIDB4NWIKKyNkZWZpbmUgR1BDTURfRkxVU0hfQ0FDSEUJCSAgICAweDM1CisjZGVmaW5lIEdQQ01EX0ZPUk1BVF9VTklUCQkgICAgMHgwNAorI2RlZmluZSBHUENNRF9HRVRfQ09ORklHVVJBVElPTgkJICAgIDB4NDYKKyNkZWZpbmUgR1BDTURfR0VUX0VWRU5UX1NUQVRVU19OT1RJRklDQVRJT04gMHg0YQorI2RlZmluZSBHUENNRF9HRVRfUEVSRk9STUFOQ0UJCSAgICAweGFjCisjZGVmaW5lIEdQQ01EX0lOUVVJUlkJCQkgICAgMHgxMgorI2RlZmluZSBHUENNRF9MT0FEX1VOTE9BRAkJICAgIDB4YTYKKyNkZWZpbmUgR1BDTURfTUVDSEFOSVNNX1NUQVRVUwkJICAgIDB4YmQKKyNkZWZpbmUgR1BDTURfTU9ERV9TRUxFQ1RfMTAJCSAgICAweDU1CisjZGVmaW5lIEdQQ01EX01PREVfU0VOU0VfMTAJCSAgICAweDVhCisjZGVmaW5lIEdQQ01EX1BBVVNFX1JFU1VNRQkJICAgIDB4NGIKKyNkZWZpbmUgR1BDTURfUExBWV9BVURJT18xMAkJICAgIDB4NDUKKyNkZWZpbmUgR1BDTURfUExBWV9BVURJT19NU0YJCSAgICAweDQ3CisjZGVmaW5lIEdQQ01EX1BMQVlfQVVESU9fVEkJCSAgICAweDQ4CisjZGVmaW5lIEdQQ01EX1BMQVlfQ0QJCQkgICAgMHhiYworI2RlZmluZSBHUENNRF9QUkVWRU5UX0FMTE9XX01FRElVTV9SRU1PVkFMICAweDFlCisjZGVmaW5lIEdQQ01EX1JFQURfMTAJCQkgICAgMHgyOAorI2RlZmluZSBHUENNRF9SRUFEXzEyCQkJICAgIDB4YTgKKyNkZWZpbmUgR1BDTURfUkVBRF9CVUZGRVIJCSAgICAweDNjCisjZGVmaW5lIEdQQ01EX1JFQURfQlVGRkVSX0NBUEFDSVRZCSAgICAweDVjCisjZGVmaW5lIEdQQ01EX1JFQURfQ0RWRF9DQVBBQ0lUWQkgICAgMHgyNQorI2RlZmluZSBHUENNRF9SRUFEX0NECQkJICAgIDB4YmUKKyNkZWZpbmUgR1BDTURfUkVBRF9DRF9NU0YJCSAgICAweGI5CisjZGVmaW5lIEdQQ01EX1JFQURfRElTQ19JTkZPCQkgICAgMHg1MQorI2RlZmluZSBHUENNRF9SRUFEX0RWRF9TVFJVQ1RVUkUJICAgIDB4YWQKKyNkZWZpbmUgR1BDTURfUkVBRF9GT1JNQVRfQ0FQQUNJVElFUwkgICAgMHgyMworI2RlZmluZSBHUENNRF9SRUFEX0hFQURFUgkJICAgIDB4NDQKKyNkZWZpbmUgR1BDTURfUkVBRF9UUkFDS19SWk9ORV9JTkZPCSAgICAweDUyCisjZGVmaW5lIEdQQ01EX1JFQURfU1VCQ0hBTk5FTAkJICAgIDB4NDIKKyNkZWZpbmUgR1BDTURfUkVBRF9UT0NfUE1BX0FUSVAJCSAgICAweDQzCisjZGVmaW5lIEdQQ01EX1JFUEFJUl9SWk9ORV9UUkFDSwkgICAgMHg1OAorI2RlZmluZSBHUENNRF9SRVBPUlRfS0VZCQkgICAgMHhhNAorI2RlZmluZSBHUENNRF9SRVFVRVNUX1NFTlNFCQkgICAgMHgwMworI2RlZmluZSBHUENNRF9SRVNFUlZFX1JaT05FX1RSQUNLCSAgICAweDUzCisjZGVmaW5lIEdQQ01EX1NFTkRfQ1VFX1NIRUVUCQkgICAgMHg1ZAorI2RlZmluZSBHUENNRF9TQ0FOCQkJICAgIDB4YmEKKyNkZWZpbmUgR1BDTURfU0VFSwkJCSAgICAweDJiCisjZGVmaW5lIEdQQ01EX1NFTkRfRFZEX1NUUlVDVFVSRQkgICAgMHhiZgorI2RlZmluZSBHUENNRF9TRU5EX0VWRU5UCQkgICAgMHhhMgorI2RlZmluZSBHUENNRF9TRU5EX0tFWQkJCSAgICAweGEzCisjZGVmaW5lIEdQQ01EX1NFTkRfT1BDCQkJICAgIDB4NTQKKyNkZWZpbmUgR1BDTURfU0VUX1JFQURfQUhFQUQJCSAgICAweGE3CisjZGVmaW5lIEdQQ01EX1NFVF9TVFJFQU1JTkcJCSAgICAweGI2CisjZGVmaW5lIEdQQ01EX1NUQVJUX1NUT1BfVU5JVAkJICAgIDB4MWIKKyNkZWZpbmUgR1BDTURfU1RPUF9QTEFZX1NDQU4JCSAgICAweDRlCisjZGVmaW5lIEdQQ01EX1RFU1RfVU5JVF9SRUFEWQkJICAgIDB4MDAKKyNkZWZpbmUgR1BDTURfVkVSSUZZXzEwCQkJICAgIDB4MmYKKyNkZWZpbmUgR1BDTURfV1JJVEVfMTAJCQkgICAgMHgyYQorI2RlZmluZSBHUENNRF9XUklURV8xMgkJCSAgICAweGFhCisjZGVmaW5lIEdQQ01EX1dSSVRFX0FORF9WRVJJRllfMTAJICAgIDB4MmUKKyNkZWZpbmUgR1BDTURfV1JJVEVfQlVGRkVSCQkgICAgMHgzYgorLyogVGhpcyBpcyBsaXN0ZWQgYXMgb3B0aW9uYWwgaW4gQVRBUEkgMi42LCBidXQgaXMgKGN1cmlvdXNseSkgCisgKiBtaXNzaW5nIGZyb20gTXQuIEZ1amksIFRhYmxlIDU3LiAgSXQgX2lzXyBtZW50aW9uZWQgaW4gTXQuIEZ1amkKKyAqIFRhYmxlIDM3NyBhcyBhbiBNTUMgY29tbWFuZCBmb3IgU0NTaSBkZXZpY2VzIHRob3VnaC4uLiAgTW9zdCBBVEFQSQorICogZHJpdmVzIHN1cHBvcnQgaXQuICovCisjZGVmaW5lIEdQQ01EX1NFVF9TUEVFRAkJCSAgICAweGJiCisvKiBUaGlzIHNlZW1zIHRvIGJlIGEgU0NTSSBzcGVjaWZpYyBDRC1ST00gb3Bjb2RlIAorICogdG8gcGxheSBkYXRhIGF0IHRyYWNrL2luZGV4ICovCisjZGVmaW5lIEdQQ01EX1BMQVlBVURJT19USQkJICAgIDB4NDgKKy8qCisgKiBGcm9tIE1TIE1lZGlhIFN0YXR1cyBOb3RpZmljYXRpb24gU3VwcG9ydCBTcGVjaWZpY2F0aW9uLiBGb3IKKyAqIG9sZGVyIGRyaXZlcyBvbmx5LgorICovCisjZGVmaW5lIEdQQ01EX0dFVF9NRURJQV9TVEFUVVMJCSAgICAweGRhCisKKy8qIE1vZGUgcGFnZSBjb2RlcyBmb3IgbW9kZSBzZW5zZS9zZXQgKi8KKyNkZWZpbmUgR1BNT0RFX1ZFTkRPUl9QQUdFCQkweDAwCisjZGVmaW5lIEdQTU9ERV9SX1dfRVJST1JfUEFHRQkJMHgwMQorI2RlZmluZSBHUE1PREVfV1JJVEVfUEFSTVNfUEFHRQkJMHgwNQorI2RlZmluZSBHUE1PREVfV0NBQ0hJTkdfUEFHRQkJMHgwOAorI2RlZmluZSBHUE1PREVfQVVESU9fQ1RMX1BBR0UJCTB4MGUKKyNkZWZpbmUgR1BNT0RFX1BPV0VSX1BBR0UJCTB4MWEKKyNkZWZpbmUgR1BNT0RFX0ZBVUxUX0ZBSUxfUEFHRQkJMHgxYworI2RlZmluZSBHUE1PREVfVE9fUFJPVEVDVF9QQUdFCQkweDFkCisjZGVmaW5lIEdQTU9ERV9DQVBBQklMSVRJRVNfUEFHRQkweDJhCisjZGVmaW5lIEdQTU9ERV9BTExfUEFHRVMJCTB4M2YKKy8qIE5vdCBpbiBNdC4gRnVqaSwgYnV0IGluIEFUQVBJIDIuNiAtLSBkZXByZWNhdGVkIG5vdyBpbiBmYXZvcgorICogb2YgTU9ERV9TRU5TRV9QT1dFUl9QQUdFICovCisjZGVmaW5lIEdQTU9ERV9DRFJPTV9QQUdFCQkweDBkCisKKworCisvKiBEVkQgc3RydWN0IHR5cGVzICovCisjZGVmaW5lIERWRF9TVFJVQ1RfUEhZU0lDQUwJMHgwMAorI2RlZmluZSBEVkRfU1RSVUNUX0NPUFlSSUdIVAkweDAxCisjZGVmaW5lIERWRF9TVFJVQ1RfRElTQ0tFWQkweDAyCisjZGVmaW5lIERWRF9TVFJVQ1RfQkNBCQkweDAzCisjZGVmaW5lIERWRF9TVFJVQ1RfTUFOVUZBQ1QJMHgwNAorCitzdHJ1Y3QgZHZkX2xheWVyIHsKKwlfX3U4IGJvb2tfdmVyc2lvbgk6IDQ7CisJX191OCBib29rX3R5cGUJCTogNDsKKwlfX3U4IG1pbl9yYXRlCQk6IDQ7CisJX191OCBkaXNjX3NpemUJCTogNDsKKwlfX3U4IGxheWVyX3R5cGUJCTogNDsKKwlfX3U4IHRyYWNrX3BhdGgJCTogMTsKKwlfX3U4IG5sYXllcnMJCTogMjsKKwlfX3U4IHRyYWNrX2RlbnNpdHkJOiA0OworCV9fdTggbGluZWFyX2RlbnNpdHkJOiA0OworCV9fdTggYmNhCQk6IDE7CisJX191MzIgc3RhcnRfc2VjdG9yOworCV9fdTMyIGVuZF9zZWN0b3I7CisJX191MzIgZW5kX3NlY3Rvcl9sMDsKK307CisKKyNkZWZpbmUgRFZEX0xBWUVSUwk0CisKK3N0cnVjdCBkdmRfcGh5c2ljYWwgeworCV9fdTggdHlwZTsKKwlfX3U4IGxheWVyX251bTsKKwlzdHJ1Y3QgZHZkX2xheWVyIGxheWVyW0RWRF9MQVlFUlNdOworfTsKKworc3RydWN0IGR2ZF9jb3B5cmlnaHQgeworCV9fdTggdHlwZTsKKworCV9fdTggbGF5ZXJfbnVtOworCV9fdTggY3BzdDsKKwlfX3U4IHJtaTsKK307CisKK3N0cnVjdCBkdmRfZGlzY2tleSB7CisJX191OCB0eXBlOworCisJdW5zaWduZWQgYWdpZAkJOiAyOworCV9fdTggdmFsdWVbMjA0OF07Cit9OworCitzdHJ1Y3QgZHZkX2JjYSB7CisJX191OCB0eXBlOworCisJaW50IGxlbjsKKwlfX3U4IHZhbHVlWzE4OF07Cit9OworCitzdHJ1Y3QgZHZkX21hbnVmYWN0IHsKKwlfX3U4IHR5cGU7CisKKwlfX3U4IGxheWVyX251bTsKKwlpbnQgbGVuOworCV9fdTggdmFsdWVbMjA0OF07Cit9OworCit0eXBlZGVmIHVuaW9uIHsKKwlfX3U4IHR5cGU7CisKKwlzdHJ1Y3QgZHZkX3BoeXNpY2FsCXBoeXNpY2FsOworCXN0cnVjdCBkdmRfY29weXJpZ2h0CWNvcHlyaWdodDsKKwlzdHJ1Y3QgZHZkX2Rpc2NrZXkJZGlzY2tleTsKKwlzdHJ1Y3QgZHZkX2JjYQkJYmNhOworCXN0cnVjdCBkdmRfbWFudWZhY3QJbWFudWZhY3Q7Cit9IGR2ZF9zdHJ1Y3Q7CisKKy8qCisgKiBEVkQgYXV0aGVudGljYXRpb24gaW9jdGwKKyAqLworCisvKiBBdXRoZW50aWNhdGlvbiBzdGF0ZXMgKi8KKyNkZWZpbmUgRFZEX0xVX1NFTkRfQUdJRAkwCisjZGVmaW5lIERWRF9IT1NUX1NFTkRfQ0hBTExFTkdFCTEKKyNkZWZpbmUgRFZEX0xVX1NFTkRfS0VZMQkyCisjZGVmaW5lIERWRF9MVV9TRU5EX0NIQUxMRU5HRQkzCisjZGVmaW5lIERWRF9IT1NUX1NFTkRfS0VZMgk0CisKKy8qIFRlcm1pbmF0aW9uIHN0YXRlcyAqLworI2RlZmluZSBEVkRfQVVUSF9FU1RBQkxJU0hFRAk1CisjZGVmaW5lIERWRF9BVVRIX0ZBSUxVUkUJNgorCisvKiBPdGhlciBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgRFZEX0xVX1NFTkRfVElUTEVfS0VZCTcKKyNkZWZpbmUgRFZEX0xVX1NFTkRfQVNGCQk4CisjZGVmaW5lIERWRF9JTlZBTElEQVRFX0FHSUQJOQorI2RlZmluZSBEVkRfTFVfU0VORF9SUENfU1RBVEUJMTAKKyNkZWZpbmUgRFZEX0hPU1RfU0VORF9SUENfU1RBVEUJMTEKKworLyogU3RhdGUgZGF0YSAqLwordHlwZWRlZiBfX3U4IGR2ZF9rZXlbNV07CQkvKiA0MC1iaXQgdmFsdWUsIE1TQiBpcyBmaXJzdCBlbGVtLiAqLwordHlwZWRlZiBfX3U4IGR2ZF9jaGFsbGVuZ2VbMTBdOwkvKiA4MC1iaXQgdmFsdWUsIE1TQiBpcyBmaXJzdCBlbGVtLiAqLworCitzdHJ1Y3QgZHZkX2x1X3NlbmRfYWdpZCB7CisJX191OCB0eXBlOworCXVuc2lnbmVkIGFnaWQJCTogMjsKK307CisKK3N0cnVjdCBkdmRfaG9zdF9zZW5kX2NoYWxsZW5nZSB7CisJX191OCB0eXBlOworCXVuc2lnbmVkIGFnaWQJCTogMjsKKworCWR2ZF9jaGFsbGVuZ2UgY2hhbDsKK307CisKK3N0cnVjdCBkdmRfc2VuZF9rZXkgeworCV9fdTggdHlwZTsKKwl1bnNpZ25lZCBhZ2lkCQk6IDI7CisKKwlkdmRfa2V5IGtleTsKK307CisKK3N0cnVjdCBkdmRfbHVfc2VuZF9jaGFsbGVuZ2UgeworCV9fdTggdHlwZTsKKwl1bnNpZ25lZCBhZ2lkCQk6IDI7CisKKwlkdmRfY2hhbGxlbmdlIGNoYWw7Cit9OworCisjZGVmaW5lIERWRF9DUE1fTk9fQ09QWVJJR0hUCTAKKyNkZWZpbmUgRFZEX0NQTV9DT1BZUklHSFRFRAkxCisKKyNkZWZpbmUgRFZEX0NQX1NFQ19OT05FCQkwCisjZGVmaW5lIERWRF9DUF9TRUNfRVhJU1QJMQorCisjZGVmaW5lIERWRF9DR01TX1VOUkVTVFJJQ1RFRAkwCisjZGVmaW5lIERWRF9DR01TX1NJTkdMRQkJMgorI2RlZmluZSBEVkRfQ0dNU19SRVNUUklDVEVECTMKKworc3RydWN0IGR2ZF9sdV9zZW5kX3RpdGxlX2tleSB7CisJX191OCB0eXBlOworCXVuc2lnbmVkIGFnaWQJCTogMjsKKworCWR2ZF9rZXkgdGl0bGVfa2V5OworCWludCBsYmE7CisJdW5zaWduZWQgY3BtCQk6IDE7CisJdW5zaWduZWQgY3Bfc2VjCQk6IDE7CisJdW5zaWduZWQgY2dtcwkJOiAyOworfTsKKworc3RydWN0IGR2ZF9sdV9zZW5kX2FzZiB7CisJX191OCB0eXBlOworCXVuc2lnbmVkIGFnaWQJCTogMjsKKworCXVuc2lnbmVkIGFzZgkJOiAxOworfTsKKworc3RydWN0IGR2ZF9ob3N0X3NlbmRfcnBjc3RhdGUgeworCV9fdTggdHlwZTsKKwlfX3U4IHBkcmM7Cit9OworCitzdHJ1Y3QgZHZkX2x1X3NlbmRfcnBjc3RhdGUgeworCV9fdTggdHlwZQkJOiAyOworCV9fdTggdnJhCQk6IDM7CisJX191OCB1Y2NhCQk6IDM7CisJX191OCByZWdpb25fbWFzazsKKwlfX3U4IHJwY19zY2hlbWU7Cit9OworCit0eXBlZGVmIHVuaW9uIHsKKwlfX3U4IHR5cGU7CisKKwlzdHJ1Y3QgZHZkX2x1X3NlbmRfYWdpZAkJbHNhOworCXN0cnVjdCBkdmRfaG9zdF9zZW5kX2NoYWxsZW5nZQloc2M7CisJc3RydWN0IGR2ZF9zZW5kX2tleQkJbHNrOworCXN0cnVjdCBkdmRfbHVfc2VuZF9jaGFsbGVuZ2UJbHNjOworCXN0cnVjdCBkdmRfc2VuZF9rZXkJCWhzazsKKwlzdHJ1Y3QgZHZkX2x1X3NlbmRfdGl0bGVfa2V5CWxzdGs7CisJc3RydWN0IGR2ZF9sdV9zZW5kX2FzZgkJbHNhc2Y7CisJc3RydWN0IGR2ZF9ob3N0X3NlbmRfcnBjc3RhdGUJaHJwY3M7CisJc3RydWN0IGR2ZF9sdV9zZW5kX3JwY3N0YXRlCWxycGNzOworfSBkdmRfYXV0aGluZm87CisKK3N0cnVjdCByZXF1ZXN0X3NlbnNlIHsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4IHZhbGlkCQk6IDE7CisJX191OCBlcnJvcl9jb2RlCQk6IDc7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4IGVycm9yX2NvZGUJCTogNzsKKwlfX3U4IHZhbGlkCQk6IDE7CisjZW5kaWYKKwlfX3U4IHNlZ21lbnRfbnVtYmVyOworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTggcmVzZXJ2ZWQxCQk6IDI7CisJX191OCBpbGkJCTogMTsKKwlfX3U4IHJlc2VydmVkMgkJOiAxOworCV9fdTggc2Vuc2Vfa2V5CQk6IDQ7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4IHNlbnNlX2tleQkJOiA0OworCV9fdTggcmVzZXJ2ZWQyCQk6IDE7CisJX191OCBpbGkJCTogMTsKKwlfX3U4IHJlc2VydmVkMQkJOiAyOworI2VuZGlmCisJX191OCBpbmZvcm1hdGlvbls0XTsKKwlfX3U4IGFkZF9zZW5zZV9sZW47CisJX191OCBjb21tYW5kX2luZm9bNF07CisJX191OCBhc2M7CisJX191OCBhc2NxOworCV9fdTggZnJ1YzsKKwlfX3U4IHNrc1szXTsKKwlfX3U4IGFzYls0Nl07Cit9OworCisvKgorICogZmVhdHVyZSBwcm9maWxlCisgKi8KKyNkZWZpbmUgQ0RGX1JXUlQJMHgwMDIwCS8qICJSYW5kb20gV3JpdGFibGUiICovCisjZGVmaW5lIENERl9IV0RNCTB4MDAyNAkvKiAiSGFyZHdhcmUgRGVmZWN0IE1hbmFnZW1lbnQiICovCisjZGVmaW5lIENERl9NUlcgCTB4MDAyOAorCisvKgorICogbWVkaWEgc3RhdHVzIGJpdHMKKyAqLworI2RlZmluZSBDRE1fTVJXX05PVE1SVwkJCTAKKyNkZWZpbmUgQ0RNX01SV19CR0ZPUk1BVF9JTkFDVElWRQkxCisjZGVmaW5lIENETV9NUldfQkdGT1JNQVRfQUNUSVZFCQkyCisjZGVmaW5lIENETV9NUldfQkdGT1JNQVRfQ09NUExFVEUJMworCisvKgorICogbXJ3IGFkZHJlc3Mgc3BhY2VzCisgKi8KKyNkZWZpbmUgTVJXX0xCQV9ETUEJCQkwCisjZGVmaW5lIE1SV19MQkFfR0FBCQkJMQorCisvKgorICogbXJ3IG1vZGUgcGFnZXMgKGZpcnN0IGlzIGRlcHJlY2F0ZWQpIC0tIHByb2JlZCBhdCBpbml0IHRpbWUgYW5kCisgKiBjZGktPm1yd19tb2RlX3BhZ2UgaXMgc2V0CisgKi8KKyNkZWZpbmUgTVJXX01PREVfUENfUFJFMQkJMHgyYworI2RlZmluZSBNUldfTU9ERV9QQwkJCTB4MDMKKworc3RydWN0IG1yd19mZWF0dXJlX2Rlc2MgeworCV9fYmUxNiBmZWF0dXJlX2NvZGU7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCisJX191OCByZXNlcnZlZDEJCTogMjsKKwlfX3U4IGZlYXR1cmVfdmVyc2lvbgk6IDQ7CisJX191OCBwZXJzaXN0ZW50CQk6IDE7CisJX191OCBjdXJyCQk6IDE7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4IGN1cnIJCTogMTsKKwlfX3U4IHBlcnNpc3RlbnQJCTogMTsKKwlfX3U4IGZlYXR1cmVfdmVyc2lvbgk6IDQ7CisJX191OCByZXNlcnZlZDEJCTogMjsKKyNlbmRpZgorCV9fdTggYWRkX2xlbjsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4IHJlc2VydmVkMgkJOiA3OworCV9fdTggd3JpdGUJCTogMTsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTggd3JpdGUJCTogMTsKKwlfX3U4IHJlc2VydmVkMgkJOiA3OworI2VuZGlmCisJX191OCByZXNlcnZlZDM7CisJX191OCByZXNlcnZlZDQ7CisJX191OCByZXNlcnZlZDU7Cit9OworCisvKiBjZi4gbW1jNHIwMmcucGRmIDUuMy4xMCBSYW5kb20gV3JpdGFibGUgRmVhdHVyZSAoMDAyMGgpIHBnIDE5NyBvZiA2MzUgKi8KK3N0cnVjdCByd3J0X2ZlYXR1cmVfZGVzYyB7CisJX19iZTE2IGZlYXR1cmVfY29kZTsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4IHJlc2VydmVkMQkJOiAyOworCV9fdTggZmVhdHVyZV92ZXJzaW9uCTogNDsKKwlfX3U4IHBlcnNpc3RlbnQJCTogMTsKKwlfX3U4IGN1cnIJCTogMTsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTggY3VycgkJOiAxOworCV9fdTggcGVyc2lzdGVudAkJOiAxOworCV9fdTggZmVhdHVyZV92ZXJzaW9uCTogNDsKKwlfX3U4IHJlc2VydmVkMQkJOiAyOworI2VuZGlmCisJX191OCBhZGRfbGVuOworCV9fdTMyIGxhc3RfbGJhOworCV9fdTMyIGJsb2NrX3NpemU7CisJX191MTYgYmxvY2tpbmc7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCisJX191OCByZXNlcnZlZDIJCTogNzsKKwlfX3U4IHBhZ2VfcHJlc2VudAk6IDE7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4IHBhZ2VfcHJlc2VudAk6IDE7CisJX191OCByZXNlcnZlZDIJCTogNzsKKyNlbmRpZgorCV9fdTggcmVzZXJ2ZWQzOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCV9fYmUxNiBkaXNjX2luZm9ybWF0aW9uX2xlbmd0aDsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4IHJlc2VydmVkMQkJCTogMzsKKyAgICAgICAgX191OCBlcmFzYWJsZQkJCTogMTsKKyAgICAgICAgX191OCBib3JkZXJfc3RhdHVzCQk6IDI7CisgICAgICAgIF9fdTggZGlzY19zdGF0dXMJCTogMjsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorICAgICAgICBfX3U4IGRpc2Nfc3RhdHVzCQk6IDI7CisgICAgICAgIF9fdTggYm9yZGVyX3N0YXR1cwkJOiAyOworICAgICAgICBfX3U4IGVyYXNhYmxlCQkJOiAxOworCV9fdTggcmVzZXJ2ZWQxCQkJOiAzOworI2Vsc2UKKyNlcnJvciAiUGxlYXNlIGZpeCA8YXNtL2J5dGVvcmRlci5oPiIKKyNlbmRpZgorCV9fdTggbl9maXJzdF90cmFjazsKKwlfX3U4IG5fc2Vzc2lvbnNfbHNiOworCV9fdTggZmlyc3RfdHJhY2tfbHNiOworCV9fdTggbGFzdF90cmFja19sc2I7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCisJX191OCBkaWRfdgkJCTogMTsKKyAgICAgICAgX191OCBkYmNfdgkJCTogMTsKKyAgICAgICAgX191OCB1cnUJCQk6IDE7CisgICAgICAgIF9fdTggcmVzZXJ2ZWQyCQkJOiAyOworCV9fdTggZGJpdAkJCTogMTsKKwlfX3U4IG1yd19zdGF0dXMJCQk6IDI7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4IG1yd19zdGF0dXMJCQk6IDI7CisJX191OCBkYml0CQkJOiAxOworICAgICAgICBfX3U4IHJlc2VydmVkMgkJCTogMjsKKyAgICAgICAgX191OCB1cnUJCQk6IDE7CisgICAgICAgIF9fdTggZGJjX3YJCQk6IDE7CisJX191OCBkaWRfdgkJCTogMTsKKyNlbmRpZgorCV9fdTggZGlzY190eXBlOworCV9fdTggbl9zZXNzaW9uc19tc2I7CisJX191OCBmaXJzdF90cmFja19tc2I7CisJX191OCBsYXN0X3RyYWNrX21zYjsKKwlfX3UzMiBkaXNjX2lkOworCV9fdTMyIGxlYWRfaW47CisJX191MzIgbGVhZF9vdXQ7CisJX191OCBkaXNjX2Jhcl9jb2RlWzhdOworCV9fdTggcmVzZXJ2ZWQzOworCV9fdTggbl9vcGM7Cit9IGRpc2NfaW5mb3JtYXRpb247CisKK3R5cGVkZWYgc3RydWN0IHsKKwlfX2JlMTYgdHJhY2tfaW5mb3JtYXRpb25fbGVuZ3RoOworCV9fdTggdHJhY2tfbHNiOworCV9fdTggc2Vzc2lvbl9sc2I7CisJX191OCByZXNlcnZlZDE7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCisJX191OCByZXNlcnZlZDIJCQk6IDI7CisgICAgICAgIF9fdTggZGFtYWdlCQkJOiAxOworICAgICAgICBfX3U4IGNvcHkJCQk6IDE7CisgICAgICAgIF9fdTggdHJhY2tfbW9kZQkJCTogNDsKKwlfX3U4IHJ0CQkJCTogMTsKKwlfX3U4IGJsYW5rCQkJOiAxOworCV9fdTggcGFja2V0CQkJOiAxOworCV9fdTggZnAJCQkJOiAxOworCV9fdTggZGF0YV9tb2RlCQkJOiA0OworCV9fdTggcmVzZXJ2ZWQzCQkJOiA2OworCV9fdTggbHJhX3YJCQk6IDE7CisJX191OCBud2FfdgkJCTogMTsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorICAgICAgICBfX3U4IHRyYWNrX21vZGUJCQk6IDQ7CisgICAgICAgIF9fdTggY29weQkJCTogMTsKKyAgICAgICAgX191OCBkYW1hZ2UJCQk6IDE7CisJX191OCByZXNlcnZlZDIJCQk6IDI7CisJX191OCBkYXRhX21vZGUJCQk6IDQ7CisJX191OCBmcAkJCQk6IDE7CisJX191OCBwYWNrZXQJCQk6IDE7CisJX191OCBibGFuawkJCTogMTsKKwlfX3U4IHJ0CQkJCTogMTsKKwlfX3U4IG53YV92CQkJOiAxOworCV9fdTggbHJhX3YJCQk6IDE7CisJX191OCByZXNlcnZlZDMJCQk6IDY7CisjZW5kaWYKKwlfX2JlMzIgdHJhY2tfc3RhcnQ7CisJX19iZTMyIG5leHRfd3JpdGFibGU7CisJX19iZTMyIGZyZWVfYmxvY2tzOworCV9fYmUzMiBmaXhlZF9wYWNrZXRfc2l6ZTsKKwlfX2JlMzIgdHJhY2tfc2l6ZTsKKwlfX2JlMzIgbGFzdF9yZWNfYWRkcmVzczsKK30gdHJhY2tfaW5mb3JtYXRpb247CisKK3N0cnVjdCBmZWF0dXJlX2hlYWRlciB7CisJX191MzIgZGF0YV9sZW47CisJX191OCByZXNlcnZlZDE7CisJX191OCByZXNlcnZlZDI7CisJX191MTYgY3Vycl9wcm9maWxlOworfTsKKworc3RydWN0IG1vZGVfcGFnZV9oZWFkZXIgeworCV9fYmUxNiBtb2RlX2RhdGFfbGVuZ3RoOworCV9fdTggbWVkaXVtX3R5cGU7CisJX191OCByZXNlcnZlZDE7CisJX191OCByZXNlcnZlZDI7CisJX191OCByZXNlcnZlZDM7CisJX19iZTE2IGRlc2NfbGVuZ3RoOworfTsKKworCisjZW5kaWYgIC8qIF9MSU5VWF9DRFJPTV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvY2dyb3Vwc3RhdHMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9jZ3JvdXBzdGF0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NTNjMzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvY2dyb3Vwc3RhdHMuaApAQCAtMCwwICsxLDcxIEBACisvKiBjZ3JvdXBzdGF0cy5oIC0gZXhwb3J0aW5nIHBlci1jZ3JvdXAgc3RhdGlzdGljcworICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24sIDIwMDcKKyAqIEF1dGhvciBCYWxiaXIgU2luZ2ggPGJhbGJpckBsaW51eC52bmV0LmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIuMSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgX0xJTlVYX0NHUk9VUFNUQVRTX0gKKyNkZWZpbmUgX0xJTlVYX0NHUk9VUFNUQVRTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdGFza3N0YXRzLmg+CisKKy8qCisgKiBEYXRhIHNoYXJlZCBiZXR3ZWVuIHVzZXIgc3BhY2UgYW5kIGtlcm5lbCBzcGFjZSBvbiBhIHBlciBjZ3JvdXAKKyAqIGJhc2lzLiBUaGlzIGRhdGEgaXMgc2hhcmVkIHVzaW5nIHRhc2tzdGF0cy4KKyAqCisgKiBNb3N0IG9mIHRoZXNlIHN0YXRlcyBhcmUgZGVyaXZlZCBieSBsb29raW5nIGF0IHRoZSB0YXNrLT5zdGF0ZSB2YWx1ZQorICogRm9yIHRoZSBucl9pb193YWl0IHN0YXRlLCBhIGZsYWcgaW4gdGhlIGRlbGF5IGFjY291bnRpbmcgc3RydWN0dXJlCisgKiBpbmRpY2F0ZXMgdGhhdCB0aGUgdGFzayBpcyB3YWl0aW5nIG9uIElPCisgKgorICogRWFjaCBtZW1iZXIgaXMgYWxpZ25lZCB0byBhIDggYnl0ZSBib3VuZGFyeS4KKyAqLworc3RydWN0IGNncm91cHN0YXRzIHsKKwlfX3U2NAlucl9zbGVlcGluZzsJCS8qIE51bWJlciBvZiB0YXNrcyBzbGVlcGluZyAqLworCV9fdTY0CW5yX3J1bm5pbmc7CQkvKiBOdW1iZXIgb2YgdGFza3MgcnVubmluZyAqLworCV9fdTY0CW5yX3N0b3BwZWQ7CQkvKiBOdW1iZXIgb2YgdGFza3MgaW4gc3RvcHBlZCBzdGF0ZSAqLworCV9fdTY0CW5yX3VuaW50ZXJydXB0aWJsZTsJLyogTnVtYmVyIG9mIHRhc2tzIGluIHVuaW50ZXJydXB0aWJsZSAqLworCQkJCQkvKiBzdGF0ZSAqLworCV9fdTY0CW5yX2lvX3dhaXQ7CQkvKiBOdW1iZXIgb2YgdGFza3Mgd2FpdGluZyBvbiBJTyAqLworfTsKKworLyoKKyAqIENvbW1hbmRzIHNlbnQgZnJvbSB1c2Vyc3BhY2UKKyAqIE5vdCB2ZXJzaW9uZWQuIE5ldyBjb21tYW5kcyBzaG91bGQgb25seSBiZSBpbnNlcnRlZCBhdCB0aGUgZW51bSdzIGVuZAorICogcHJpb3IgdG8gX19DR1JPVVBTVEFUU19DTURfTUFYCisgKi8KKworZW51bSB7CisJQ0dST1VQU1RBVFNfQ01EX1VOU1BFQyA9IF9fVEFTS1NUQVRTX0NNRF9NQVgsCS8qIFJlc2VydmVkICovCisJQ0dST1VQU1RBVFNfQ01EX0dFVCwJCS8qIHVzZXItPmtlcm5lbCByZXF1ZXN0L2dldC1yZXNwb25zZSAqLworCUNHUk9VUFNUQVRTX0NNRF9ORVcsCQkvKiBrZXJuZWwtPnVzZXIgZXZlbnQgKi8KKwlfX0NHUk9VUFNUQVRTX0NNRF9NQVgsCit9OworCisjZGVmaW5lIENHUk9VUFNUQVRTX0NNRF9NQVggKF9fQ0dST1VQU1RBVFNfQ01EX01BWCAtIDEpCisKK2VudW0geworCUNHUk9VUFNUQVRTX1RZUEVfVU5TUEVDID0gMCwJLyogUmVzZXJ2ZWQgKi8KKwlDR1JPVVBTVEFUU19UWVBFX0NHUk9VUF9TVEFUUywJLyogY29udGFpbnMgbmFtZSArIHN0YXRzICovCisJX19DR1JPVVBTVEFUU19UWVBFX01BWCwKK307CisKKyNkZWZpbmUgQ0dST1VQU1RBVFNfVFlQRV9NQVggKF9fQ0dST1VQU1RBVFNfVFlQRV9NQVggLSAxKQorCitlbnVtIHsKKwlDR1JPVVBTVEFUU19DTURfQVRUUl9VTlNQRUMgPSAwLAorCUNHUk9VUFNUQVRTX0NNRF9BVFRSX0ZELAorCV9fQ0dST1VQU1RBVFNfQ01EX0FUVFJfTUFYLAorfTsKKworI2RlZmluZSBDR1JPVVBTVEFUU19DTURfQVRUUl9NQVggKF9fQ0dST1VQU1RBVFNfQ01EX0FUVFJfTUFYIC0gMSkKKworI2VuZGlmIC8qIF9MSU5VWF9DR1JPVVBTVEFUU19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvY2hpby5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2NoaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTdjZDk4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2NoaW8uaApAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIGlvY3RsIGludGVyZmFjZSBmb3IgdGhlIHNjc2kgbWVkaWEgY2hhbmdlciBkcml2ZXIKKyAqLworCisvKiBjaGFuZ2VyIGVsZW1lbnQgdHlwZXMgKi8KKyNkZWZpbmUgQ0hFVF9NVCAgIDAJLyogbWVkaWEgdHJhbnNwb3J0IGVsZW1lbnQgKHJvYm90KSAqLworI2RlZmluZSBDSEVUX1NUICAgMQkvKiBzdG9yYWdlIGVsZW1lbnQgKG1lZGlhIHNsb3RzKSAqLworI2RlZmluZSBDSEVUX0lFICAgMgkvKiBpbXBvcnQvZXhwb3J0IGVsZW1lbnQgKi8KKyNkZWZpbmUgQ0hFVF9EVCAgIDMJLyogZGF0YSB0cmFuc2ZlciBlbGVtZW50ICh0YXBlL2Nkcm9tL3doYXRldmVyKSAqLworI2RlZmluZSBDSEVUX1YxICAgNAkvKiB2ZW5kb3Igc3BlY2lmaWMgIzEgKi8KKyNkZWZpbmUgQ0hFVF9WMiAgIDUJLyogdmVuZG9yIHNwZWNpZmljICMyICovCisjZGVmaW5lIENIRVRfVjMgICA2CS8qIHZlbmRvciBzcGVjaWZpYyAjMyAqLworI2RlZmluZSBDSEVUX1Y0ICAgNwkvKiB2ZW5kb3Igc3BlY2lmaWMgIzQgKi8KKworCisvKgorICogQ0hJT0dQQVJBTVMKKyAqICAgIHF1ZXJ5IGNoYW5nZXIgcHJvcGVydGllcworICoKKyAqIENISU9WR1BBUkFNUworICogICAgcXVlcnkgdmVuZG9yLXNwZWNpZmljIGVsZW1lbnQgdHlwZXMKKyAqCisgKiAgICBhY2Nlc3NpbmcgZWxlbWVudHMgd29ya3MgYnkgc3BlY2lmaW5nIHR5cGUgYW5kIHVuaXQgb2YgdGhlIGVsZW1lbnQuCisgKiAgICBmb3IgZXhhbXBsZSwgc3RvcmFnZSBlbGVtZW50cyBhcmUgYWRkcmVzc2VkIHdpdGggdHlwZSA9IENIRVRfU1QgYW5kCisgKiAgICB1bml0ID0gMCAuLiBjcF9uc2xvdHMtMQorICoKKyAqLworc3RydWN0IGNoYW5nZXJfcGFyYW1zIHsKKwlpbnQgY3BfY3VycGlja2VyOyAgLyogY3VycmVudCB0cmFuc3BvcnQgZWxlbWVudCAqLworCWludCBjcF9ucGlja2VyczsgICAvKiBudW1iZXIgb2YgdHJhbnNwb3J0IGVsZW1lbnRzICAgICAgKENIRVRfTVQpICovCisJaW50IGNwX25zbG90czsgICAgIC8qIG51bWJlciBvZiBzdG9yYWdlIGVsZW1lbnRzICAgICAgICAoQ0hFVF9TVCkgKi8KKwlpbnQgY3BfbnBvcnRhbHM7ICAgLyogbnVtYmVyIG9mIGltcG9ydC9leHBvcnQgZWxlbWVudHMgIChDSEVUX0lFKSAqLworCWludCBjcF9uZHJpdmVzOyAgICAvKiBudW1iZXIgb2YgZGF0YSB0cmFuc2ZlciBlbGVtZW50cyAgKENIRVRfRFQpICovCit9Oworc3RydWN0IGNoYW5nZXJfdmVuZG9yX3BhcmFtcyB7CisJaW50ICBjdnBfbjE7ICAgICAgIC8qIG51bWJlciBvZiB2ZW5kb3Igc3BlY2lmaWMgZWxlbXMgICAoQ0hFVF9WMSkgKi8KKwljaGFyIGN2cF9sYWJlbDFbMTZdOworCWludCAgY3ZwX24yOyAgICAgICAvKiBudW1iZXIgb2YgdmVuZG9yIHNwZWNpZmljIGVsZW1zICAgKENIRVRfVjIpICovCisJY2hhciBjdnBfbGFiZWwyWzE2XTsKKwlpbnQgIGN2cF9uMzsgICAgICAgLyogbnVtYmVyIG9mIHZlbmRvciBzcGVjaWZpYyBlbGVtcyAgIChDSEVUX1YzKSAqLworCWNoYXIgY3ZwX2xhYmVsM1sxNl07CisJaW50ICBjdnBfbjQ7ICAgICAgIC8qIG51bWJlciBvZiB2ZW5kb3Igc3BlY2lmaWMgZWxlbXMgICAoQ0hFVF9WNCkgKi8KKwljaGFyIGN2cF9sYWJlbDRbMTZdOworCWludCAgcmVzZXJ2ZWRbOF07Cit9OworCisKKy8qCisgKiBDSElPTU9WRQorICogICAgbW92ZSBhIG1lZGl1bSBmcm9tIG9uZSBlbGVtZW50IHRvIGFub3RoZXIKKyAqLworc3RydWN0IGNoYW5nZXJfbW92ZSB7CisJaW50IGNtX2Zyb210eXBlOwkvKiB0eXBlL3VuaXQgb2Ygc291cmNlIGVsZW1lbnQgKi8KKwlpbnQgY21fZnJvbXVuaXQ7CQorCWludCBjbV90b3R5cGU7CS8qIHR5cGUvdW5pdCBvZiBkZXN0aW5hdGlvbiBlbGVtZW50ICovCisJaW50IGNtX3RvdW5pdDsKKwlpbnQgY21fZmxhZ3M7Cit9OworI2RlZmluZSBDTV9JTlZFUlQgICAxICAgLyogZmxhZzogcm90YXRlIG1lZGlhIChmb3IgZG91YmxlLXNpZGVkIGxpa2UgTU9EKSAqLworCisKKy8qCisgKiBDSElPRVhDSEFOR0UKKyAqICAgIG1vdmUgb25lIG1lZGl1bSBmcm9tIGVsZW1lbnQgIzEgdG8gZWxlbWVudCAjMiwKKyAqICAgIGFuZCBhbm90aGVyIG9uZSBmcm9tIGVsZW1lbnQgIzIgdG8gZWxlbWVudCAjMy4KKyAqICAgIGVsZW1lbnQgIzEgYW5kICMzIGFyZSBhbGxvd2VkIHRvIGJlIGlkZW50aWNhbC4KKyAqLworc3RydWN0IGNoYW5nZXJfZXhjaGFuZ2UgeworCWludCBjZV9zcmN0eXBlOwkgICAgLyogdHlwZS91bml0IG9mIGVsZW1lbnQgIzEgKi8KKwlpbnQgY2Vfc3JjdW5pdDsKKwlpbnQgY2VfZmRzdHR5cGU7ICAgIC8qIHR5cGUvdW5pdCBvZiBlbGVtZW50ICMyICovCisJaW50IGNlX2Zkc3R1bml0OworCWludCBjZV9zZHN0dHlwZTsgICAgLyogdHlwZS91bml0IG9mIGVsZW1lbnQgIzMgKi8KKwlpbnQgY2Vfc2RzdHVuaXQ7CisJaW50IGNlX2ZsYWdzOworfTsKKyNkZWZpbmUgQ0VfSU5WRVJUMSAgIDEKKyNkZWZpbmUgQ0VfSU5WRVJUMiAgIDIKKworCisvKgorICogQ0hJT1BPU0lUSU9OCisgKiAgICBtb3ZlIHRoZSB0cmFuc3BvcnQgZWxlbWVudCAocm9ib3QgYXJtKSB0byBhIHNwZWNpZmljIGVsZW1lbnQuCisgKi8KK3N0cnVjdCBjaGFuZ2VyX3Bvc2l0aW9uIHsKKwlpbnQgY3BfdHlwZTsKKwlpbnQgY3BfdW5pdDsKKwlpbnQgY3BfZmxhZ3M7Cit9OworI2RlZmluZSBDUF9JTlZFUlQgICAxCisKKworLyoKKyAqIENISU9HU1RBVFVTCisgKiAgICBnZXQgZWxlbWVudCBzdGF0dXMgZm9yIGFsbCBlbGVtZW50cyBvZiBhIHNwZWNpZmljIHR5cGUKKyAqLworc3RydWN0IGNoYW5nZXJfZWxlbWVudF9zdGF0dXMgeworCWludCAgICAgICAgICAgICBjZXNfdHlwZTsKKwl1bnNpZ25lZCBjaGFyICAgKmNlc19kYXRhOworfTsKKyNkZWZpbmUgQ0VTVEFUVVNfRlVMTCAgICAgMHgwMSAvKiBmdWxsICovCisjZGVmaW5lIENFU1RBVFVTX0lNUEVYUCAgIDB4MDIJLyogbWVkaWEgd2FzIGltcG9ydGVkIChpbnNlcnRlZCBieSBzeXNvcCkgKi8KKyNkZWZpbmUgQ0VTVEFUVVNfRVhDRVBUICAgMHgwNAkvKiBlcnJvciBjb25kaXRpb24gKi8KKyNkZWZpbmUgQ0VTVEFUVVNfQUNDRVNTICAgMHgwOAkvKiBhY2Nlc3MgYWxsb3dlZCAqLworI2RlZmluZSBDRVNUQVRVU19FWEVOQUIgICAweDEwCS8qIGVsZW1lbnQgY2FuIGV4cG9ydCBtZWRpYSAqLworI2RlZmluZSBDRVNUQVRVU19JTkVOQUIgICAweDIwCS8qIGVsZW1lbnQgY2FuIGltcG9ydCBtZWRpYSAqLworCisKKy8qCisgKiBDSElPR0VMRU0KKyAqICAgIGdldCBtb3JlIGRldGFpbGVkIHN0YXR1cyBpbmZvcm1hdGlvbiBmb3IgYSBzaW5nbGUgZWxlbWVudAorICovCitzdHJ1Y3QgY2hhbmdlcl9nZXRfZWxlbWVudCB7CisJaW50CWNnZV90eXBlOwkgLyogdHlwZS91bml0ICovCisJaW50CWNnZV91bml0OworCWludAljZ2Vfc3RhdHVzOyAgICAgIC8qIHN0YXR1cyAqLworCWludCAgICAgY2dlX2Vycm5vOyAgICAgICAvKiBlcnJubyAqLworCWludCAgICAgY2dlX3NyY3R5cGU7ICAgICAvKiBzb3VyY2UgZWxlbWVudCBvZiB0aGUgbGFzdCBtb3ZlL2V4Y2hhbmdlICovCisJaW50ICAgICBjZ2Vfc3JjdW5pdDsKKwlpbnQgICAgIGNnZV9pZDsgICAgICAgICAgLyogc2NzaSBpZCAgKGZvciBkYXRhIHRyYW5zZmVyIGVsZW1lbnRzKSAqLworCWludCAgICAgY2dlX2x1bjsgICAgICAgICAvKiBzY3NpIGx1biAoZm9yIGRhdGEgdHJhbnNmZXIgZWxlbWVudHMpICovCisJY2hhciAgICBjZ2VfcHZvbHRhZ1szNl07IC8qIHByaW1hcnkgdm9sdW1lIHRhZyAqLworCWNoYXIgICAgY2dlX2F2b2x0YWdbMzZdOyAvKiBhbHRlcm5hdGUgdm9sdW1lIHRhZyAqLworCWludCAgICAgY2dlX2ZsYWdzOworfTsKKy8qIGZsYWdzICovCisjZGVmaW5lIENHRV9FUlJOTyAgICAgMHgwMSAgICAgICAvKiBlcnJubyBhdmFpbGFibGUgICAgICAgKi8KKyNkZWZpbmUgQ0dFX0lOVkVSVCAgICAweDAyICAgICAgIC8qIG1lZGlhIGludmVydGVkICAgICAgICAqLworI2RlZmluZSBDR0VfU1JDICAgICAgIDB4MDQgICAgICAgLyogbWVkaWEgc3JjIGF2YWlsYWJsZSAgICovCisjZGVmaW5lIENHRV9JRExVTiAgICAgMHgwOCAgICAgICAvKiBJRCtMVU4gYXZhaWxhYmxlICAgICAgKi8KKyNkZWZpbmUgQ0dFX1BWT0xUQUcgICAweDEwICAgICAgIC8qIHByaW1hcnkgdm9sdW1lIHRhZyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgQ0dFX0FWT0xUQUcgICAweDIwICAgICAgIC8qIGFsdGVybmF0ZSB2b2x1bWUgdGFnIGF2YWlsYWJsZSAqLworCisKKy8qCisgKiBDSElPU1ZPTFRBRworICogICAgc2V0IHZvbHVtZSB0YWcKKyAqLworc3RydWN0IGNoYW5nZXJfc2V0X3ZvbHRhZyB7CisJaW50CWNzdl90eXBlOwkgLyogdHlwZS91bml0ICovCisJaW50CWNzdl91bml0OworCWNoYXIgICAgY3N2X3ZvbHRhZ1szNl07ICAvKiB2b2x1bWUgdGFnICovCisJaW50ICAgICBjc3ZfZmxhZ3M7Cit9OworI2RlZmluZSBDU1ZfUFZPTFRBRyAgIDB4MDEgICAgICAgLyogcHJpbWFyeSB2b2x1bWUgdGFnICovCisjZGVmaW5lIENTVl9BVk9MVEFHICAgMHgwMiAgICAgICAvKiBhbHRlcm5hdGUgdm9sdW1lIHRhZyAqLworI2RlZmluZSBDU1ZfQ0xFQVJUQUcgIDB4MDQgICAgICAgLyogY2xlYXIgdm9sdW1lIHRhZyAqLworCisvKiBpb2N0bHMgKi8KKyNkZWZpbmUgQ0hJT01PVkUgICAgICAgX0lPVygnYycsIDEsc3RydWN0IGNoYW5nZXJfbW92ZSkKKyNkZWZpbmUgQ0hJT0VYQ0hBTkdFICAgX0lPVygnYycsIDIsc3RydWN0IGNoYW5nZXJfZXhjaGFuZ2UpCisjZGVmaW5lIENISU9QT1NJVElPTiAgIF9JT1coJ2MnLCAzLHN0cnVjdCBjaGFuZ2VyX3Bvc2l0aW9uKQorI2RlZmluZSBDSElPR1BJQ0tFUiAgICBfSU9SKCdjJywgNCxpbnQpICAgICAgICAgICAgICAgICAgICAgICAgLyogbm90IGltcGwuICovCisjZGVmaW5lIENISU9TUElDS0VSICAgIF9JT1coJ2MnLCA1LGludCkgICAgICAgICAgICAgICAgICAgICAgICAvKiBub3QgaW1wbC4gKi8KKyNkZWZpbmUgQ0hJT0dQQVJBTVMgICAgX0lPUignYycsIDYsc3RydWN0IGNoYW5nZXJfcGFyYW1zKQorI2RlZmluZSBDSElPR1NUQVRVUyAgICBfSU9XKCdjJywgOCxzdHJ1Y3QgY2hhbmdlcl9lbGVtZW50X3N0YXR1cykKKyNkZWZpbmUgQ0hJT0dFTEVNICAgICAgX0lPVygnYycsMTYsc3RydWN0IGNoYW5nZXJfZ2V0X2VsZW1lbnQpCisjZGVmaW5lIENISU9JTklURUxFTSAgIF9JTygnYycsMTcpCisjZGVmaW5lIENISU9TVk9MVEFHICAgIF9JT1coJ2MnLDE4LHN0cnVjdCBjaGFuZ2VyX3NldF92b2x0YWcpCisjZGVmaW5lIENISU9HVlBBUkFNUyAgIF9JT1IoJ2MnLDE5LHN0cnVjdCBjaGFuZ2VyX3ZlbmRvcl9wYXJhbXMpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIGMtYmFzaWMtb2Zmc2V0OiA4CisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9jbTQwMDBfY3MuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9jbTQwMDBfY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjkyODgwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2NtNDAwMF9jcy5oCkBAIC0wLDAgKzEsNjIgQEAKKyNpZm5kZWYJX0NNNDAwMF9IXworI2RlZmluZQlfQ000MDAwX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lCU1BWF9BVFIJCQkzMworCisjZGVmaW5lCUNNNDAwMF9NQVhfREVWCQk0CisKKy8qIHRob3NlIHR3byBzdHJ1Y3R1cmVzIGFyZSBwYXNzZWQgdmlhIGlvY3RsKCkgZnJvbS90byB1c2Vyc3BhY2UuICBUaGV5IGFyZQorICogdXNlZCBieSBleGlzdGluZyB1c2Vyc3BhY2UgcHJvZ3JhbXMsIHNvIEkga2VwdGggdGhlIGF3a3dhcmQgImJJRlNEIiBuYW1pbmcKKyAqIG5vdCB0byBicmVhayBjb21waWxhdGlvbiBvZiB1c2Vyc3BhY2UgYXBwcy4gLUhXICovCisKK3R5cGVkZWYgc3RydWN0IGF0cmVxIHsKKwlfX3MzMiBhdHJfbGVuOworCXVuc2lnbmVkIGNoYXIgYXRyWzY0XTsKKwlfX3MzMiBwb3dlcl9hY3Q7CisJdW5zaWduZWQgY2hhciBiSUZTRDsKKwl1bnNpZ25lZCBjaGFyIGJJRlNDOworfSBhdHJlcV90OworCisKKy8qIHdoYXQgaXMgcGFydGljdWxhcmx5IHN0dXBpZCBpbiB0aGUgb3JpZ2luYWwgZHJpdmVyIGlzIHRoZSBhcmNoLWRlcGVuZGFudAorICogbWVtYmVyIHNpemVzLiBUaGlzIGxlYWRzIHRvIENPTkZJR19DT01QQVQgYnJlYWthZ2UsIHNpbmNlIDMyYml0IHVzZXJzcGFjZQorICogd2lsbCBsYXkgb3V0IHRoZSBzdHJ1Y3R1cmUgbWVtYmVycyBkaWZmZXJlbnRseSB0aGFuIHRoZSA2NGJpdCBrZXJuZWwuCisgKgorICogSSd2ZSBjaGFuZ2VkICJwdHNyZXEucHJvdG9jb2wiIGZyb20gInVuc2lnbmVkIGxvbmciIHRvICJfX3UzMiIuCisgKiBPbiAzMmJpdCB0aGlzIHdpbGwgbWFrZSBubyBkaWZmZXJlbmNlLiAgV2l0aCA2NGJpdCBrZXJuZWxzLCBpdCB3aWxsIG1ha2UKKyAqIDMyYml0IGFwcHMgd29yaywgdG9vLgorICovCisKK3R5cGVkZWYgc3RydWN0IHB0c3JlcSB7CisJX191MzIgcHJvdG9jb2w7IC8qVD0wOiAyXjAsIFQ9MTogIDJeMSovCisgCXVuc2lnbmVkIGNoYXIgZmxhZ3M7CisgCXVuc2lnbmVkIGNoYXIgcHRzMTsKKyAJdW5zaWduZWQgY2hhciBwdHMyOworCXVuc2lnbmVkIGNoYXIgcHRzMzsKK30gcHRzcmVxX3Q7CisKKyNkZWZpbmUJQ01fSU9DX01BR0lDCQknYycKKyNkZWZpbmUJQ01fSU9DX01BWE5SCSAgICAgICAgMjU1CisKKyNkZWZpbmUJQ01fSU9DR1NUQVRVUwkJX0lPUiAoQ01fSU9DX01BR0lDLCAwLCB1bnNpZ25lZCBjaGFyICopCisjZGVmaW5lCUNNX0lPQ0dBVFIJCV9JT1dSKENNX0lPQ19NQUdJQywgMSwgYXRyZXFfdCAqKQorI2RlZmluZQlDTV9JT0NTUFRTCQlfSU9XIChDTV9JT0NfTUFHSUMsIDIsIHB0c3JlcV90ICopCisjZGVmaW5lCUNNX0lPQ1NSRFIJCV9JTyAgKENNX0lPQ19NQUdJQywgMykKKyNkZWZpbmUgQ01fSU9DQVJET0ZGICAgICAgICAgICAgX0lPICAoQ01fSU9DX01BR0lDLCA0KQorCisjZGVmaW5lIENNX0lPU0RCR0xWTCAgICAgICAgICAgIF9JT1coQ01fSU9DX01BR0lDLCAyNTAsIGludCopCisKKy8qIGNhcmQgYW5kIGRldmljZSBzdGF0ZXMgKi8KKyNkZWZpbmUJQ01fQ0FSRF9JTlNFUlRFRAkJMHgwMQorI2RlZmluZQlDTV9DQVJEX1BPV0VSRUQJCQkweDAyCisjZGVmaW5lCUNNX0FUUl9QUkVTRU5UCQkJMHgwNAorI2RlZmluZQlDTV9BVFJfVkFMSUQJIAkJMHgwOAorI2RlZmluZQlDTV9TVEFURV9WQUxJRAkJCTB4MGYKKy8qIGV4dHJhIGluZm8gb25seSBmcm9tIENNNDAwMCAqLworI2RlZmluZQlDTV9OT19SRUFERVIJCQkweDEwCisjZGVmaW5lCUNNX0JBRF9DQVJECQkJMHgyMAorCisKKyNlbmRpZgkvKiBfQ000MDAwX0hfICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvY25fcHJvYy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2NuX3Byb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGQwY2EyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2NuX3Byb2MuaApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIGNuX3Byb2MuaCAtIHByb2Nlc3MgZXZlbnRzIGNvbm5lY3RvcgorICoKKyAqIENvcHlyaWdodCAoQykgTWF0dCBIZWxzbGV5LCBJQk0gQ29ycC4gMjAwNQorICogQmFzZWQgb24gY25fZm9yay5oIGJ5IE5ndXllbiBBbmggUXV5bmggYW5kIEd1aWxsYXVtZSBUaG91dmVuaW4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBOZ3V5ZW4gQW5oIFF1eW5oIDxhcXV5bmhAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEd1aWxsYXVtZSBUaG91dmVuaW4gPGd1aWxsYXVtZS50aG91dmVuaW5AYnVsbC5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIuMSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgQ05fUFJPQ19ICisjZGVmaW5lIENOX1BST0NfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIFVzZXJzcGFjZSBzZW5kcyB0aGlzIGVudW0gdG8gcmVnaXN0ZXIgd2l0aCB0aGUga2VybmVsIHRoYXQgaXQgaXMgbGlzdGVuaW5nCisgKiBmb3IgZXZlbnRzIG9uIHRoZSBjb25uZWN0b3IuCisgKi8KK2VudW0gcHJvY19jbl9tY2FzdF9vcCB7CisJUFJPQ19DTl9NQ0FTVF9MSVNURU4gPSAxLAorCVBST0NfQ05fTUNBU1RfSUdOT1JFID0gMgorfTsKKworLyoKKyAqIEZyb20gdGhlIHVzZXIncyBwb2ludCBvZiB2aWV3LCB0aGUgcHJvY2VzcworICogSUQgaXMgdGhlIHRocmVhZCBncm91cCBJRCBhbmQgdGhyZWFkIElEIGlzIHRoZSBpbnRlcm5hbAorICoga2VybmVsICJwaWQiLiBTbywgZmllbGRzIGFyZSBhc3NpZ25lZCBhcyBmb2xsb3c6CisgKgorICogIEluIHVzZXIgc3BhY2UgICAgIC0gIEluICBrZXJuZWwgc3BhY2UKKyAqCisgKiBwYXJlbnQgcHJvY2VzcyBJRCAgPSAgcGFyZW50LT50Z2lkCisgKiBwYXJlbnQgdGhyZWFkICBJRCAgPSAgcGFyZW50LT5waWQKKyAqIGNoaWxkICBwcm9jZXNzIElEICA9ICBjaGlsZC0+dGdpZAorICogY2hpbGQgIHRocmVhZCAgSUQgID0gIGNoaWxkLT5waWQKKyAqLworCitzdHJ1Y3QgcHJvY19ldmVudCB7CisJZW51bSB3aGF0IHsKKwkJLyogVXNlIHN1Y2Nlc3NpdmUgYml0cyBzbyB0aGUgZW51bXMgY2FuIGJlIHVzZWQgdG8gcmVjb3JkCisJCSAqIHNldHMgb2YgZXZlbnRzIGFzIHdlbGwKKwkJICovCisJCVBST0NfRVZFTlRfTk9ORSA9IDB4MDAwMDAwMDAsCisJCVBST0NfRVZFTlRfRk9SSyA9IDB4MDAwMDAwMDEsCisJCVBST0NfRVZFTlRfRVhFQyA9IDB4MDAwMDAwMDIsCisJCVBST0NfRVZFTlRfVUlEICA9IDB4MDAwMDAwMDQsCisJCVBST0NfRVZFTlRfR0lEICA9IDB4MDAwMDAwNDAsCisJCVBST0NfRVZFTlRfU0lEICA9IDB4MDAwMDAwODAsCisJCS8qICJuZXh0IiBzaG91bGQgYmUgMHgwMDAwMDQwMCAqLworCQkvKiAibGFzdCIgaXMgdGhlIGxhc3QgcHJvY2VzcyBldmVudDogZXhpdCAqLworCQlQUk9DX0VWRU5UX0VYSVQgPSAweDgwMDAwMDAwCisJfSB3aGF0OworCV9fdTMyIGNwdTsKKwlfX3U2NCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkgdGltZXN0YW1wX25zOworCQkvKiBOdW1iZXIgb2YgbmFubyBzZWNvbmRzIHNpbmNlIHN5c3RlbSBib290ICovCisJdW5pb24geyAvKiBtdXN0IGJlIGxhc3QgZmllbGQgb2YgcHJvY19ldmVudCBzdHJ1Y3QgKi8KKwkJc3RydWN0IHsKKwkJCV9fdTMyIGVycjsKKwkJfSBhY2s7CisKKwkJc3RydWN0IGZvcmtfcHJvY19ldmVudCB7CisJCQlfX2tlcm5lbF9waWRfdCBwYXJlbnRfcGlkOworCQkJX19rZXJuZWxfcGlkX3QgcGFyZW50X3RnaWQ7CisJCQlfX2tlcm5lbF9waWRfdCBjaGlsZF9waWQ7CisJCQlfX2tlcm5lbF9waWRfdCBjaGlsZF90Z2lkOworCQl9IGZvcms7CisKKwkJc3RydWN0IGV4ZWNfcHJvY19ldmVudCB7CisJCQlfX2tlcm5lbF9waWRfdCBwcm9jZXNzX3BpZDsKKwkJCV9fa2VybmVsX3BpZF90IHByb2Nlc3NfdGdpZDsKKwkJfSBleGVjOworCisJCXN0cnVjdCBpZF9wcm9jX2V2ZW50IHsKKwkJCV9fa2VybmVsX3BpZF90IHByb2Nlc3NfcGlkOworCQkJX19rZXJuZWxfcGlkX3QgcHJvY2Vzc190Z2lkOworCQkJdW5pb24geworCQkJCV9fdTMyIHJ1aWQ7IC8qIHRhc2sgdWlkICovCisJCQkJX191MzIgcmdpZDsgLyogdGFzayBnaWQgKi8KKwkJCX0gcjsKKwkJCXVuaW9uIHsKKwkJCQlfX3UzMiBldWlkOworCQkJCV9fdTMyIGVnaWQ7CisJCQl9IGU7CisJCX0gaWQ7CisKKwkJc3RydWN0IHNpZF9wcm9jX2V2ZW50IHsKKwkJCV9fa2VybmVsX3BpZF90IHByb2Nlc3NfcGlkOworCQkJX19rZXJuZWxfcGlkX3QgcHJvY2Vzc190Z2lkOworCQl9IHNpZDsKKworCQlzdHJ1Y3QgZXhpdF9wcm9jX2V2ZW50IHsKKwkJCV9fa2VybmVsX3BpZF90IHByb2Nlc3NfcGlkOworCQkJX19rZXJuZWxfcGlkX3QgcHJvY2Vzc190Z2lkOworCQkJX191MzIgZXhpdF9jb2RlLCBleGl0X3NpZ25hbDsKKwkJfSBleGl0OworCX0gZXZlbnRfZGF0YTsKK307CisKKyNlbmRpZgkvKiBDTl9QUk9DX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9jb2RhLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvY29kYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMGM3ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvY29kYS5oCkBAIC0wLDAgKzEsNzM3IEBACisvKiAKKyAgIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5kZXIgZWl0aGVyIG9mIHRoZSB0d28gbGljZW5zZXMgdGhhdAorICAgZm9sbG93IGF0IHlvdXIgZGlzY3JldGlvbi4KKyovCisKKy8qIEJMVVJCIGxncGwKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kYSBGaWxlIFN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSA1CisKKyAgICAgICAgICBDb3B5cmlnaHQgKGMpIDE5ODctMTk5OSBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eQorICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbCBjb3B5cmlnaHRzIGxpc3RlZCBiZWxvdworCitUaGlzIGNvZGUgaXMgZGlzdHJpYnV0ZWQgIkFTIElTIiB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kIHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2VuY2UgVmVyc2lvbiAyLCBhcworc2hvd24gaW4gdGhlIGZpbGUgTElDRU5TRSwgb3IgdW5kZXIgdGhlIGxpY2Vuc2Ugc2hvd24gYmVsb3cuIFRoZQordGVjaG5pY2FsIGFuZCBmaW5hbmNpYWwgY29udHJpYnV0b3JzIHRvIENvZGEgYXJlIGxpc3RlZCBpbiB0aGUgZmlsZQorQ1JFRElUUy4KKworICAgICAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbCBjb3B5cmlnaHRzIAorKi8KKworLyoKKworICAgICAgICAgICAgQ29kYTogYW4gRXhwZXJpbWVudGFsIERpc3RyaWJ1dGVkIEZpbGUgU3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgNC4wCisKKyAgICAgICAgICBDb3B5cmlnaHQgKGMpIDE5ODctMTk5OSBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eQorICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKworUGVybWlzc2lvbiAgdG8gIHVzZSwgY29weSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworZG9jdW1lbnRhdGlvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgIHByb3ZpZGVkICB0aGF0ICBib3RoICB0aGUgIGNvcHlyaWdodAorbm90aWNlICBhbmQgIHRoaXMgIHBlcm1pc3Npb24gIG5vdGljZSAgYXBwZWFyICBpbiAgYWxsICBjb3BpZXMgIG9mIHRoZQorc29mdHdhcmUsIGRlcml2YXRpdmUgd29ya3Mgb3IgIG1vZGlmaWVkICB2ZXJzaW9ucywgIGFuZCAgYW55ICBwb3J0aW9ucwordGhlcmVvZiwgYW5kIHRoYXQgYm90aCBub3RpY2VzIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZAordGhhdCBjcmVkaXQgaXMgZ2l2ZW4gdG8gQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkgIGluICBhbGwgIGRvY3VtZW50cworYW5kIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpcmVjdCBvciBpbmRpcmVjdCB1c2Ugb2YgdGhpcyBjb2RlIG9yIGl0cworZGVyaXZhdGl2ZXMuCisKK0NPREEgSVMgQU4gRVhQRVJJTUVOVEFMIFNPRlRXQVJFIFNZU1RFTSBBTkQgSVMgIEtOT1dOICBUTyAgSEFWRSAgQlVHUywKK1NPTUUgIE9GICBXSElDSCBNQVkgSEFWRSBTRVJJT1VTIENPTlNFUVVFTkNFUy4gIENBUk5FR0lFIE1FTExPTiBBTExPV1MKK0ZSRUUgVVNFIE9GIFRISVMgU09GVFdBUkUgSU4gSVRTICJBUyBJUyIgQ09ORElUSU9OLiAgIENBUk5FR0lFICBNRUxMT04KK0RJU0NMQUlNUyAgQU5ZICBMSUFCSUxJVFkgIE9GICBBTlkgIEtJTkQgIEZPUiAgQU5ZICBEQU1BR0VTIFdIQVRTT0VWRVIKK1JFU1VMVElORyBESVJFQ1RMWSBPUiBJTkRJUkVDVExZIEZST00gVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFICBPUiAgT0YKK0FOWSBERVJJVkFUSVZFIFdPUksuCisKK0Nhcm5lZ2llICBNZWxsb24gIGVuY291cmFnZXMgIHVzZXJzICBvZiAgdGhpcyAgc29mdHdhcmUgIHRvIHJldHVybiBhbnkKK2ltcHJvdmVtZW50cyBvciBleHRlbnNpb25zIHRoYXQgIHRoZXkgIG1ha2UsICBhbmQgIHRvICBncmFudCAgQ2FybmVnaWUKK01lbGxvbiB0aGUgcmlnaHRzIHRvIHJlZGlzdHJpYnV0ZSB0aGVzZSBjaGFuZ2VzIHdpdGhvdXQgZW5jdW1icmFuY2UuCisqLworCisvKgorICoKKyAqIEJhc2VkIG9uIGNmcy5oIGZyb20gTWFjaCwgYnV0IHJldmFtcGVkIGZvciBpbmNyZWFzZWQgc2ltcGxpY2l0eS4KKyAqIExpbnV4IG1vZGlmaWNhdGlvbnMgYnkgCisgKiBQZXRlciBCcmFhbSwgQXVnIDE5OTYKKyAqLworCisjaWZuZGVmIF9DT0RBX0hFQURFUl8KKyNkZWZpbmUgX0NPREFfSEVBREVSXworCisKKy8qIENhdGNoIG5ldyBfS0VSTkVMIGRlZm4gZm9yIE5ldEJTRCBhbmQgREpHUFAvX19DWUdXSU4zMl9fICovCisjaWYgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBcCisgICgoZGVmaW5lZChESkdQUCkgfHwgZGVmaW5lZChfX0NZR1dJTjMyX18pKSAmJiAhZGVmaW5lZChLRVJORUwpKQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmIAorCisjaWZuZGVmIENPREFfTUFYU1lNTElOS1MKKyNkZWZpbmUgQ09EQV9NQVhTWU1MSU5LUyAxMAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKERKR1BQKSB8fCBkZWZpbmVkKF9fQ1lHV0lOMzJfXykKKyNpZmRlZiBLRVJORUwKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyB1X2xvbmc7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdV9zaG9ydDsKK3R5cGVkZWYgdV9sb25nIGlub190OwordHlwZWRlZiB1X2xvbmcgZGV2X3Q7Cit0eXBlZGVmIHZvaWQgKiBjYWRkcl90OworI2lmZGVmIERPUwordHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IHVfcXVhZF90OworI2Vsc2UgCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1X3F1YWRfdDsKKyNlbmRpZgorCisjZGVmaW5lIF9faW5saW5lX18KKworc3RydWN0IHRpbWVzcGVjIHsKKyAgICAgICAgbG9uZyAgICAgICB0c19zZWM7CisgICAgICAgIGxvbmcgICAgICAgdHNfbnNlYzsKK307CisjZWxzZSAgLyogREpHUFAgYnV0IG5vdCBLRVJORUwgKi8KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdV9xdWFkX3Q7CisjZW5kaWYgLyogIUtFUk5FTCAqLworI2VuZGlmIC8qICFESkdQUCAqLworCisKKyNpZiBkZWZpbmVkKF9fbGludXhfXykKKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjZGVmaW5lIGNkZXZfdCB1X3F1YWRfdAorI2lmICFkZWZpbmVkKF9VUVVBRF9UXykgJiYgKCFkZWZpbmVkKF9fR0xJQkNfXykgfHwgX19HTElCQ19fIDwgMikKKyNkZWZpbmUgX1VRVUFEX1RfIDEKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVfcXVhZF90OworI2VuZGlmCisjZWxzZQorI2RlZmluZSBjZGV2X3QgZGV2X3QKKyNlbmRpZgorCisjaWZkZWYgX19DWUdXSU4zMl9fCitzdHJ1Y3QgdGltZXNwZWMgeworICAgICAgICB0aW1lX3QgIHR2X3NlYzsgICAgICAgICAvKiBzZWNvbmRzICovCisgICAgICAgIGxvbmcgICAgdHZfbnNlYzsgICAgICAgIC8qIG5hbm9zZWNvbmRzICovCit9OworI2VuZGlmCisKKyNpZm5kZWYgX19CSVRfVFlQRVNfREVGSU5FRF9fCisjZGVmaW5lIF9fQklUX1RZUEVTX0RFRklORURfXwordHlwZWRlZiBzaWduZWQgY2hhcgkgICAgICBpbnQ4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIJICAgIHVfaW50OF90OwordHlwZWRlZiBzaG9ydAkJICAgICBpbnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkgICB1X2ludDE2X3Q7Cit0eXBlZGVmIGludAkJICAgICBpbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJICAgdV9pbnQzMl90OworI2VuZGlmCisKKworLyoKKyAqIENmcyBjb25zdGFudHMKKyAqLworI2RlZmluZSBDT0RBX01BWE5BTUxFTiAgIDI1NQorI2RlZmluZSBDT0RBX01BWFBBVEhMRU4gIDEwMjQKKyNkZWZpbmUgQ09EQV9NQVhTWU1MSU5LICAxMAorCisvKiB0aGVzZSBhcmUgQ29kYSdzIHZlcnNpb24gb2YgT19SRE9OTFkgZXRjIGNvbWJpbmF0aW9ucworICogdG8gZGVhbCB3aXRoIFZGUyBvcGVuIG1vZGVzCisgKi8KKyNkZWZpbmUJQ19PX1JFQUQJMHgwMDEKKyNkZWZpbmUJQ19PX1dSSVRFICAgICAgIDB4MDAyCisjZGVmaW5lIENfT19UUlVOQyAgICAgICAweDAxMAorI2RlZmluZSBDX09fRVhDTAkweDEwMAorI2RlZmluZSBDX09fQ1JFQVQJMHgyMDAKKworLyogdGhlc2UgYXJlIHRvIGZpbmQgbW9kZSBiaXRzIGluIFZlbnVzICovIAorI2RlZmluZSBDX01fUkVBRCAgMDA0MDAKKyNkZWZpbmUgQ19NX1dSSVRFIDAwMjAwCisKKy8qIGZvciBhY2Nlc3MgVmVudXMgd2lsbCB1c2UgKi8KKyNkZWZpbmUgQ19BX0NfT0sgICAgOCAgICAgICAgICAgICAgIC8qIFRlc3QgZm9yIHdyaXRpbmcgdXBvbiBjcmVhdGUuICAqLworI2RlZmluZSBDX0FfUl9PSyAgICA0ICAgICAgICAgICAgICAgLyogVGVzdCBmb3IgcmVhZCBwZXJtaXNzaW9uLiAgKi8KKyNkZWZpbmUgQ19BX1dfT0sgICAgMiAgICAgICAgICAgICAgIC8qIFRlc3QgZm9yIHdyaXRlIHBlcm1pc3Npb24uICAqLworI2RlZmluZSBDX0FfWF9PSyAgICAxICAgICAgICAgICAgICAgLyogVGVzdCBmb3IgZXhlY3V0ZSBwZXJtaXNzaW9uLiAgKi8KKyNkZWZpbmUgQ19BX0ZfT0sgICAgMCAgICAgICAgICAgICAgIC8qIFRlc3QgZm9yIGV4aXN0ZW5jZS4gICovCisKKworCisjaWZuZGVmIF9WRU5VU19ESVJFTlRfVF8KKyNkZWZpbmUgX1ZFTlVTX0RJUkVOVF9UXyAxCitzdHJ1Y3QgdmVudXNfZGlyZW50IHsKKyAgICAgICAgdV9pbnQzMl90IGRfZmlsZW5vOwkJLyogZmlsZSBudW1iZXIgb2YgZW50cnkgKi8KKyAgICAgICAgdV9pbnQxNl90IGRfcmVjbGVuOwkJLyogbGVuZ3RoIG9mIHRoaXMgcmVjb3JkICovCisgICAgICAgIHVfaW50OF90ICBkX3R5cGU7CQkJLyogZmlsZSB0eXBlLCBzZWUgYmVsb3cgKi8KKyAgICAgICAgdV9pbnQ4X3QgIGRfbmFtbGVuOwkJLyogbGVuZ3RoIG9mIHN0cmluZyBpbiBkX25hbWUgKi8KKyAgICAgICAgY2hhcgkgIGRfbmFtZVtDT0RBX01BWE5BTUxFTiArIDFdOy8qIG5hbWUgbXVzdCBiZSBubyBsb25nZXIgdGhhbiB0aGlzICovCit9OworI3VuZGVmIERJUlNJWgorI2RlZmluZSBESVJTSVooZHApICAgICAgKChzaXplb2YgKHN0cnVjdCB2ZW51c19kaXJlbnQpIC0gKENPREFfTUFYTkFNTEVOKzEpKSArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKChkcCktPmRfbmFtbGVuKzEgKyAzKSAmfiAzKSkKKworLyoKKyAqIEZpbGUgdHlwZXMKKyAqLworI2RlZmluZQlDRFRfVU5LTk9XTgkgMAorI2RlZmluZQlDRFRfRklGTwkgMQorI2RlZmluZQlDRFRfQ0hSCQkgMgorI2RlZmluZQlDRFRfRElSCQkgNAorI2RlZmluZQlDRFRfQkxLCQkgNgorI2RlZmluZQlDRFRfUkVHCQkgOAorI2RlZmluZQlDRFRfTE5LCQkxMAorI2RlZmluZQlDRFRfU09DSwkxMgorI2RlZmluZQlDRFRfV0hUCQkxNAorCisvKgorICogQ29udmVydCBiZXR3ZWVuIHN0YXQgc3RydWN0dXJlIHR5cGVzIGFuZCBkaXJlY3RvcnkgdHlwZXMuCisgKi8KKyNkZWZpbmUJSUZUT0NEVChtb2RlKQkoKChtb2RlKSAmIDAxNzAwMDApID4+IDEyKQorI2RlZmluZQlDRFRUT0lGKGRpcnR5cGUpCSgoZGlydHlwZSkgPDwgMTIpCisKKyNlbmRpZgorCisjaWZuZGVmIF9WVUlEX1RfCisjZGVmaW5lIF9WVUlEX1RfCit0eXBlZGVmIHVfaW50MzJfdCB2dWlkX3Q7Cit0eXBlZGVmIHVfaW50MzJfdCB2Z2lkX3Q7CisjZW5kaWYgLypfVlVJRF9UXyAqLworCitzdHJ1Y3QgQ29kYUZpZCB7CisJdV9pbnQzMl90IG9wYXF1ZVs0XTsKK307CisKKyNkZWZpbmUgY29kYV9mMmkoZmlkKVwKKwkoZmlkID8gKGZpZC0+b3BhcXVlWzNdIF4gKGZpZC0+b3BhcXVlWzJdPDwxMCkgXiAoZmlkLT5vcGFxdWVbMV08PDIwKSBeIGZpZC0+b3BhcXVlWzBdKSA6IDApCisKKyNpZm5kZWYgX1ZFTlVTX1ZBVFRSX1RfCisjZGVmaW5lIF9WRU5VU19WQVRUUl9UXworLyoKKyAqIFZub2RlIHR5cGVzLiAgVk5PTiBtZWFucyBubyB0eXBlLgorICovCitlbnVtIGNvZGFfdnR5cGUJeyBDX1ZOT04sIENfVlJFRywgQ19WRElSLCBDX1ZCTEssIENfVkNIUiwgQ19WTE5LLCBDX1ZTT0NLLCBDX1ZGSUZPLCBDX1ZCQUQgfTsKKworc3RydWN0IGNvZGFfdmF0dHIgeworCWxvbmcgICAgIAl2YV90eXBlOwkvKiB2bm9kZSB0eXBlIChmb3IgY3JlYXRlKSAqLworCXVfc2hvcnQJCXZhX21vZGU7CS8qIGZpbGVzIGFjY2VzcyBtb2RlIGFuZCB0eXBlICovCisJc2hvcnQJCXZhX25saW5rOwkvKiBudW1iZXIgb2YgcmVmZXJlbmNlcyB0byBmaWxlICovCisJdnVpZF90CQl2YV91aWQ7CQkvKiBvd25lciB1c2VyIGlkICovCisJdmdpZF90CQl2YV9naWQ7CQkvKiBvd25lciBncm91cCBpZCAqLworCWxvbmcJCXZhX2ZpbGVpZDsJLyogZmlsZSBpZCAqLworCXVfcXVhZF90CXZhX3NpemU7CS8qIGZpbGUgc2l6ZSBpbiBieXRlcyAqLworCWxvbmcJCXZhX2Jsb2Nrc2l6ZTsJLyogYmxvY2tzaXplIHByZWZlcnJlZCBmb3IgaS9vICovCisJc3RydWN0IHRpbWVzcGVjCXZhX2F0aW1lOwkvKiB0aW1lIG9mIGxhc3QgYWNjZXNzICovCisJc3RydWN0IHRpbWVzcGVjCXZhX210aW1lOwkvKiB0aW1lIG9mIGxhc3QgbW9kaWZpY2F0aW9uICovCisJc3RydWN0IHRpbWVzcGVjCXZhX2N0aW1lOwkvKiB0aW1lIGZpbGUgY2hhbmdlZCAqLworCXVfbG9uZwkJdmFfZ2VuOwkJLyogZ2VuZXJhdGlvbiBudW1iZXIgb2YgZmlsZSAqLworCXVfbG9uZwkJdmFfZmxhZ3M7CS8qIGZsYWdzIGRlZmluZWQgZm9yIGZpbGUgKi8KKwljZGV2X3QJICAgICAgICB2YV9yZGV2OwkvKiBkZXZpY2Ugc3BlY2lhbCBmaWxlIHJlcHJlc2VudHMgKi8KKwl1X3F1YWRfdAl2YV9ieXRlczsJLyogYnl0ZXMgb2YgZGlzayBzcGFjZSBoZWxkIGJ5IGZpbGUgKi8KKwl1X3F1YWRfdAl2YV9maWxlcmV2OwkvKiBmaWxlIG1vZGlmaWNhdGlvbiBudW1iZXIgKi8KK307CisKKyNlbmRpZiAKKworLyogc3RydWN0dXJlIHVzZWQgYnkgQ09EQV9TVEFURlMgZm9yIGdldHRpbmcgY2FjaGUgaW5mb3JtYXRpb24gZnJvbSB2ZW51cyAqLworc3RydWN0IGNvZGFfc3RhdGZzIHsKKyAgICBpbnQzMl90IGZfYmxvY2tzOworICAgIGludDMyX3QgZl9iZnJlZTsKKyAgICBpbnQzMl90IGZfYmF2YWlsOworICAgIGludDMyX3QgZl9maWxlczsKKyAgICBpbnQzMl90IGZfZmZyZWU7Cit9OworCisvKgorICogS2VybmVsIDwtLT4gVmVudXMgY29tbXVuaWNhdGlvbnMuCisgKi8KKworI2RlZmluZSBDT0RBX1JPT1QJMgorI2RlZmluZSBDT0RBX09QRU5fQllfRkQJMworI2RlZmluZSBDT0RBX09QRU4JNAorI2RlZmluZSBDT0RBX0NMT1NFCTUKKyNkZWZpbmUgQ09EQV9JT0NUTAk2CisjZGVmaW5lIENPREFfR0VUQVRUUgk3CisjZGVmaW5lIENPREFfU0VUQVRUUgk4CisjZGVmaW5lIENPREFfQUNDRVNTCTkKKyNkZWZpbmUgQ09EQV9MT09LVVAJMTAKKyNkZWZpbmUgQ09EQV9DUkVBVEUJMTEKKyNkZWZpbmUgQ09EQV9SRU1PVkUJMTIKKyNkZWZpbmUgQ09EQV9MSU5LCTEzCisjZGVmaW5lIENPREFfUkVOQU1FCTE0CisjZGVmaW5lIENPREFfTUtESVIJMTUKKyNkZWZpbmUgQ09EQV9STURJUgkxNgorI2RlZmluZSBDT0RBX1NZTUxJTksJMTgKKyNkZWZpbmUgQ09EQV9SRUFETElOSwkxOQorI2RlZmluZSBDT0RBX0ZTWU5DCTIwCisjZGVmaW5lIENPREFfVkdFVAkyMgorI2RlZmluZSBDT0RBX1NJR05BTAkyMworI2RlZmluZSBDT0RBX1JFUExBQ0UJIDI0IC8qIERPV05DQUxMICovCisjZGVmaW5lIENPREFfRkxVU0ggICAgICAgMjUgLyogRE9XTkNBTEwgKi8KKyNkZWZpbmUgQ09EQV9QVVJHRVVTRVIgICAyNiAvKiBET1dOQ0FMTCAqLworI2RlZmluZSBDT0RBX1pBUEZJTEUgICAgIDI3IC8qIERPV05DQUxMICovCisjZGVmaW5lIENPREFfWkFQRElSICAgICAgMjggLyogRE9XTkNBTEwgKi8KKyNkZWZpbmUgQ09EQV9QVVJHRUZJRCAgICAzMCAvKiBET1dOQ0FMTCAqLworI2RlZmluZSBDT0RBX09QRU5fQllfUEFUSCAzMQorI2RlZmluZSBDT0RBX1JFU09MVkUgICAgIDMyCisjZGVmaW5lIENPREFfUkVJTlRFR1JBVEUgMzMKKyNkZWZpbmUgQ09EQV9TVEFURlMJIDM0CisjZGVmaW5lIENPREFfU1RPUkUJIDM1CisjZGVmaW5lIENPREFfUkVMRUFTRQkgMzYKKyNkZWZpbmUgQ09EQV9OQ0FMTFMgMzcKKworI2RlZmluZSBET1dOQ0FMTChvcGNvZGUpIChvcGNvZGUgPj0gQ09EQV9SRVBMQUNFICYmIG9wY29kZSA8PSBDT0RBX1BVUkdFRklEKQorCisjZGVmaW5lIFZDX01BWERBVEFTSVpFCSAgICA4MTkyCisjZGVmaW5lIFZDX01BWE1TR1NJWkUgICAgICBzaXplb2YodW5pb24gaW5wdXRBcmdzKStzaXplb2YodW5pb24gb3V0cHV0QXJncykgK1wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQ19NQVhEQVRBU0laRSAgCisKKyNkZWZpbmUgQ0lPQ19LRVJORUxfVkVSU0lPTiBfSU9XUignYycsIDEwLCBzaXplX3QpCisKKyNkZWZpbmUgQ09EQV9LRVJORUxfVkVSU0lPTiAzIC8qIDEyOC1iaXQgZmlsZSBpZGVudGlmaWVycyAqLworCisvKgorICogICAgICAgIFZlbnVzIDwtPiBDb2RhICBSUEMgYXJndW1lbnRzCisgKi8KK3N0cnVjdCBjb2RhX2luX2hkciB7CisgICAgdV9pbnQzMl90IG9wY29kZTsKKyAgICB1X2ludDMyX3QgdW5pcXVlOwkgICAgLyogS2VlcCBtdWx0aXBsZSBvdXRzdGFuZGluZyBtc2dzIGRpc3RpbmN0ICovCisgICAgcGlkX3QgcGlkOworICAgIHBpZF90IHBnaWQ7CisgICAgdnVpZF90IHVpZDsKK307CisKKy8qIFJlYWxseSBpbXBvcnRhbnQgdGhhdCBvcGNvZGUgYW5kIHVuaXF1ZSBhcmUgMXN0IHR3byBmaWVsZHMhICovCitzdHJ1Y3QgY29kYV9vdXRfaGRyIHsKKyAgICB1X2ludDMyX3Qgb3Bjb2RlOworICAgIHVfaW50MzJfdCB1bmlxdWU7CQorICAgIHVfaW50MzJfdCByZXN1bHQ7Cit9OworCisvKiBjb2RhX3Jvb3Q6IE5PX0lOICovCitzdHJ1Y3QgY29kYV9yb290X291dCB7CisgICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworfTsKKworc3RydWN0IGNvZGFfcm9vdF9pbiB7CisgICAgc3RydWN0IGNvZGFfaW5faGRyIGluOworfTsKKworLyogY29kYV9vcGVuOiAqLworc3RydWN0IGNvZGFfb3Blbl9pbiB7CisgICAgc3RydWN0IGNvZGFfaW5faGRyIGloOworICAgIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgICAgaW50CWZsYWdzOworfTsKKworc3RydWN0IGNvZGFfb3Blbl9vdXQgeworICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CisgICAgY2Rldl90CWRldjsKKyAgICBpbm9fdAlpbm9kZTsKK307CisKKworLyogY29kYV9zdG9yZTogKi8KK3N0cnVjdCBjb2RhX3N0b3JlX2luIHsKKyAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CisgICAgc3RydWN0IENvZGFGaWQgVkZpZDsKKyAgICBpbnQJZmxhZ3M7Cit9OworCitzdHJ1Y3QgY29kYV9zdG9yZV9vdXQgeworICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0OworfTsKKworLyogY29kYV9yZWxlYXNlOiAqLworc3RydWN0IGNvZGFfcmVsZWFzZV9pbiB7CisgICAgc3RydWN0IGNvZGFfaW5faGRyIGloOworICAgIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgICAgaW50CWZsYWdzOworfTsKKworc3RydWN0IGNvZGFfcmVsZWFzZV9vdXQgeworICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0OworfTsKKworLyogY29kYV9jbG9zZTogKi8KK3N0cnVjdCBjb2RhX2Nsb3NlX2luIHsKKyAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CisgICAgc3RydWN0IENvZGFGaWQgVkZpZDsKKyAgICBpbnQJZmxhZ3M7Cit9OworCitzdHJ1Y3QgY29kYV9jbG9zZV9vdXQgeworICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0OworfTsKKworLyogY29kYV9pb2N0bDogKi8KK3N0cnVjdCBjb2RhX2lvY3RsX2luIHsKKyAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CisgICAgc3RydWN0IENvZGFGaWQgVkZpZDsKKyAgICBpbnQJY21kOworICAgIGludAlsZW47CisgICAgaW50CXJ3ZmxhZzsKKyAgICBjaGFyICpkYXRhOwkJCS8qIFBsYWNlIGhvbGRlciBmb3IgZGF0YS4gKi8KK307CisKK3N0cnVjdCBjb2RhX2lvY3RsX291dCB7CisgICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKyAgICBpbnQJbGVuOworICAgIGNhZGRyX3QJZGF0YTsJCS8qIFBsYWNlIGhvbGRlciBmb3IgZGF0YS4gKi8KK307CisKKworLyogY29kYV9nZXRhdHRyOiAqLworc3RydWN0IGNvZGFfZ2V0YXR0cl9pbiB7CisgICAgc3RydWN0IGNvZGFfaW5faGRyIGloOworICAgIHN0cnVjdCBDb2RhRmlkIFZGaWQ7Cit9OworCitzdHJ1Y3QgY29kYV9nZXRhdHRyX291dCB7CisgICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKyAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOworfTsKKworCisvKiBjb2RhX3NldGF0dHI6IE5PX09VVCAqLworc3RydWN0IGNvZGFfc2V0YXR0cl9pbiB7CisgICAgc3RydWN0IGNvZGFfaW5faGRyIGloOworICAgIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgICAgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKK307CisKK3N0cnVjdCBjb2RhX3NldGF0dHJfb3V0IHsKKyAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKK307CisKKy8qIGNvZGFfYWNjZXNzOiBOT19PVVQgKi8KK3N0cnVjdCBjb2RhX2FjY2Vzc19pbiB7CisgICAgc3RydWN0IGNvZGFfaW5faGRyIGloOworICAgIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgICAgaW50CWZsYWdzOworfTsKKworc3RydWN0IGNvZGFfYWNjZXNzX291dCB7CisgICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cit9OworCisKKy8qIGxvb2t1cCBmbGFncyAqLworI2RlZmluZSBDTFVfQ0FTRV9TRU5TSVRJVkUgICAgIDB4MDEKKyNkZWZpbmUgQ0xVX0NBU0VfSU5TRU5TSVRJVkUgICAweDAyCisKKy8qIGNvZGFfbG9va3VwOiAqLworc3RydWN0ICBjb2RhX2xvb2t1cF9pbiB7CisgICAgc3RydWN0IGNvZGFfaW5faGRyIGloOworICAgIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgICAgaW50ICAgICAgICAgbmFtZTsJCS8qIFBsYWNlIGhvbGRlciBmb3IgZGF0YS4gKi8KKyAgICBpbnQgICAgICAgICBmbGFnczsJCit9OworCitzdHJ1Y3QgY29kYV9sb29rdXBfb3V0IHsKKyAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOworICAgIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgICAgaW50CXZ0eXBlOworfTsKKworCisvKiBjb2RhX2NyZWF0ZTogKi8KK3N0cnVjdCBjb2RhX2NyZWF0ZV9pbiB7CisgICAgc3RydWN0IGNvZGFfaW5faGRyIGloOworICAgIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgICAgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKKyAgICBpbnQgZXhjbDsKKyAgICBpbnQgbW9kZTsKKyAgICBpbnQgCW5hbWU7CQkvKiBQbGFjZSBob2xkZXIgZm9yIGRhdGEuICovCit9OworCitzdHJ1Y3QgY29kYV9jcmVhdGVfb3V0IHsKKyAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOworICAgIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgICAgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKK307CisKKworLyogY29kYV9yZW1vdmU6IE5PX09VVCAqLworc3RydWN0IGNvZGFfcmVtb3ZlX2luIHsKKyAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CisgICAgc3RydWN0IENvZGFGaWQgVkZpZDsKKyAgICBpbnQgbmFtZTsJCS8qIFBsYWNlIGhvbGRlciBmb3IgZGF0YS4gKi8KK307CisKK3N0cnVjdCBjb2RhX3JlbW92ZV9vdXQgeworICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0OworfTsKKworLyogY29kYV9saW5rOiBOT19PVVQgKi8KK3N0cnVjdCBjb2RhX2xpbmtfaW4geworICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBzb3VyY2VGaWQ7CS8qIGNub2RlIHRvIGxpbmsgKnRvKiAqLworICAgIHN0cnVjdCBDb2RhRmlkIGRlc3RGaWQ7CS8qIERpcmVjdG9yeSBpbiB3aGljaCB0byBwbGFjZSBsaW5rICovCisgICAgaW50IHRuYW1lOwkJLyogUGxhY2UgaG9sZGVyIGZvciBkYXRhLiAqLworfTsKKworc3RydWN0IGNvZGFfbGlua19vdXQgeworICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0OworfTsKKworCisvKiBjb2RhX3JlbmFtZTogTk9fT1VUICovCitzdHJ1Y3QgY29kYV9yZW5hbWVfaW4geworICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBzb3VyY2VGaWQ7CisgICAgaW50IAlzcmNuYW1lOworICAgIHN0cnVjdCBDb2RhRmlkIGRlc3RGaWQ7CisgICAgaW50IAlkZXN0bmFtZTsKK307CisKK3N0cnVjdCBjb2RhX3JlbmFtZV9vdXQgeworICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0OworfTsKKworLyogY29kYV9ta2RpcjogKi8KK3N0cnVjdCBjb2RhX21rZGlyX2luIHsKKyAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CisgICAgc3RydWN0IENvZGFGaWQgVkZpZDsKKyAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOworICAgIGludAkgICBuYW1lOwkJLyogUGxhY2UgaG9sZGVyIGZvciBkYXRhLiAqLworfTsKKworc3RydWN0IGNvZGFfbWtkaXJfb3V0IHsKKyAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOworICAgIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgICAgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKK307CisKKworLyogY29kYV9ybWRpcjogTk9fT1VUICovCitzdHJ1Y3QgY29kYV9ybWRpcl9pbiB7CisgICAgc3RydWN0IGNvZGFfaW5faGRyIGloOworICAgIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgICAgaW50IG5hbWU7CQkvKiBQbGFjZSBob2xkZXIgZm9yIGRhdGEuICovCit9OworCitzdHJ1Y3QgY29kYV9ybWRpcl9vdXQgeworICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0OworfTsKKworLyogY29kYV9zeW1saW5rOiBOT19PVVQgKi8KK3N0cnVjdCBjb2RhX3N5bWxpbmtfaW4geworICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBWRmlkOwkvKiBEaXJlY3RvcnkgdG8gcHV0IHN5bWxpbmsgaW4gKi8KKyAgICBpbnQgc3JjbmFtZTsKKyAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOworICAgIGludCB0bmFtZTsKK307CisKK3N0cnVjdCBjb2RhX3N5bWxpbmtfb3V0IHsKKyAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKK307CisKKy8qIGNvZGFfcmVhZGxpbms6ICovCitzdHJ1Y3QgY29kYV9yZWFkbGlua19pbiB7CisgICAgc3RydWN0IGNvZGFfaW5faGRyIGloOworICAgIHN0cnVjdCBDb2RhRmlkIFZGaWQ7Cit9OworCitzdHJ1Y3QgY29kYV9yZWFkbGlua19vdXQgeworICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CisgICAgaW50CWNvdW50OworICAgIGNhZGRyX3QJZGF0YTsJCS8qIFBsYWNlIGhvbGRlciBmb3IgZGF0YS4gKi8KK307CisKKworLyogY29kYV9mc3luYzogTk9fT1VUICovCitzdHJ1Y3QgY29kYV9mc3luY19pbiB7CisgICAgc3RydWN0IGNvZGFfaW5faGRyIGloOworICAgIHN0cnVjdCBDb2RhRmlkIFZGaWQ7Cit9OworCitzdHJ1Y3QgY29kYV9mc3luY19vdXQgeworICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0OworfTsKKworLyogY29kYV92Z2V0OiAqLworc3RydWN0IGNvZGFfdmdldF9pbiB7CisgICAgc3RydWN0IGNvZGFfaW5faGRyIGloOworICAgIHN0cnVjdCBDb2RhRmlkIFZGaWQ7Cit9OworCitzdHJ1Y3QgY29kYV92Z2V0X291dCB7CisgICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworICAgIGludAl2dHlwZTsKK307CisKKworLyogQ09EQV9TSUdOQUwgaXMgb3V0LW9mLWJhbmQsIGRvZXNuJ3QgbmVlZCBkYXRhLiAqLworLyogQ09EQV9JTlZBTElEQVRFIGlzIGEgdmVudXMtPmtlcm5lbCBjYWxsICovCisvKiBDT0RBX0ZMVVNIIGlzIGEgdmVudXMtPmtlcm5lbCBjYWxsICovCisKKy8qIGNvZGFfcHVyZ2V1c2VyOiAqLworLyogQ09EQV9QVVJHRVVTRVIgaXMgYSB2ZW51cy0+a2VybmVsIGNhbGwgKi8KK3N0cnVjdCBjb2RhX3B1cmdldXNlcl9vdXQgeworICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CisgICAgdnVpZF90IHVpZDsKK307CisKKy8qIGNvZGFfemFwZmlsZTogKi8KKy8qIENPREFfWkFQRklMRSBpcyBhIHZlbnVzLT5rZXJuZWwgY2FsbCAqLworc3RydWN0IGNvZGFfemFwZmlsZV9vdXQgeyAgCisgICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBDb2RhRmlkOworfTsKKworLyogY29kYV96YXBkaXI6ICovCisvKiBDT0RBX1pBUERJUiBpcyBhIHZlbnVzLT5rZXJuZWwgY2FsbCAqLwkKK3N0cnVjdCBjb2RhX3phcGRpcl9vdXQgewkgIAorICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CisgICAgc3RydWN0IENvZGFGaWQgQ29kYUZpZDsKK307CisKKy8qIGNvZGFfcHVyZ2VmaWQ6ICovCisvKiBDT0RBX1BVUkdFRklEIGlzIGEgdmVudXMtPmtlcm5lbCBjYWxsICovCQorc3RydWN0IGNvZGFfcHVyZ2VmaWRfb3V0IHsgCisgICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBDb2RhRmlkOworfTsKKworLyogY29kYV9yZXBsYWNlOiAqLworLyogQ09EQV9SRVBMQUNFIGlzIGEgdmVudXMtPmtlcm5lbCBjYWxsICovCQorc3RydWN0IGNvZGFfcmVwbGFjZV9vdXQgeyAvKiBjb2RhX3JlcGxhY2UgaXMgYSB2ZW51cy0+a2VybmVsIGNhbGwgKi8KKyAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOworICAgIHN0cnVjdCBDb2RhRmlkIE5ld0ZpZDsKKyAgICBzdHJ1Y3QgQ29kYUZpZCBPbGRGaWQ7Cit9OworCisvKiBjb2RhX29wZW5fYnlfZmQ6ICovCitzdHJ1Y3QgY29kYV9vcGVuX2J5X2ZkX2luIHsKKyAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CisgICAgc3RydWN0IENvZGFGaWQgVkZpZDsKKyAgICBpbnQgICAgICAgIGZsYWdzOworfTsKKworc3RydWN0IGNvZGFfb3Blbl9ieV9mZF9vdXQgeworICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CisgICAgaW50IGZkOworCit9OworCisvKiBjb2RhX29wZW5fYnlfcGF0aDogKi8KK3N0cnVjdCBjb2RhX29wZW5fYnlfcGF0aF9pbiB7CisgICAgc3RydWN0IGNvZGFfaW5faGRyIGloOworICAgIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgICAgaW50CWZsYWdzOworfTsKKworc3RydWN0IGNvZGFfb3Blbl9ieV9wYXRoX291dCB7CisgICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKwlpbnQgcGF0aDsKK307CisKKy8qIGNvZGFfc3RhdGZzOiBOT19JTiAqLworc3RydWN0IGNvZGFfc3RhdGZzX2luIHsKKyAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaW47Cit9OworCitzdHJ1Y3QgY29kYV9zdGF0ZnNfb3V0IHsKKyAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOworICAgIHN0cnVjdCBjb2RhX3N0YXRmcyBzdGF0OworfTsKKworLyogCisgKiBPY2Nhc2lvbmFsbHksIHdlIGRvbid0IGNhY2hlIHRoZSBmaWQgcmV0dXJuZWQgYnkgQ09EQV9MT09LVVAuIAorICogRm9yIGluc3RhbmNlLCBpZiB0aGUgZmlkIGlzIGluY29uc2lzdGVudC4gCisgKiBUaGlzIGNhc2UgaXMgaGFuZGxlZCBieSBzZXR0aW5nIHRoZSB0b3AgYml0IG9mIHRoZSB0eXBlIHJlc3VsdCBwYXJhbWV0ZXIuCisgKi8KKyNkZWZpbmUgQ09EQV9OT0NBQ0hFICAgICAgICAgIDB4ODAwMDAwMDAKKwordW5pb24gaW5wdXRBcmdzIHsKKyAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CQkvKiBOQjogZXZlcnkgc3RydWN0IGJlbG93IGJlZ2lucyB3aXRoIGFuIGloICovCisgICAgc3RydWN0IGNvZGFfb3Blbl9pbiBjb2RhX29wZW47CisgICAgc3RydWN0IGNvZGFfc3RvcmVfaW4gY29kYV9zdG9yZTsKKyAgICBzdHJ1Y3QgY29kYV9yZWxlYXNlX2luIGNvZGFfcmVsZWFzZTsKKyAgICBzdHJ1Y3QgY29kYV9jbG9zZV9pbiBjb2RhX2Nsb3NlOworICAgIHN0cnVjdCBjb2RhX2lvY3RsX2luIGNvZGFfaW9jdGw7CisgICAgc3RydWN0IGNvZGFfZ2V0YXR0cl9pbiBjb2RhX2dldGF0dHI7CisgICAgc3RydWN0IGNvZGFfc2V0YXR0cl9pbiBjb2RhX3NldGF0dHI7CisgICAgc3RydWN0IGNvZGFfYWNjZXNzX2luIGNvZGFfYWNjZXNzOworICAgIHN0cnVjdCBjb2RhX2xvb2t1cF9pbiBjb2RhX2xvb2t1cDsKKyAgICBzdHJ1Y3QgY29kYV9jcmVhdGVfaW4gY29kYV9jcmVhdGU7CisgICAgc3RydWN0IGNvZGFfcmVtb3ZlX2luIGNvZGFfcmVtb3ZlOworICAgIHN0cnVjdCBjb2RhX2xpbmtfaW4gY29kYV9saW5rOworICAgIHN0cnVjdCBjb2RhX3JlbmFtZV9pbiBjb2RhX3JlbmFtZTsKKyAgICBzdHJ1Y3QgY29kYV9ta2Rpcl9pbiBjb2RhX21rZGlyOworICAgIHN0cnVjdCBjb2RhX3JtZGlyX2luIGNvZGFfcm1kaXI7CisgICAgc3RydWN0IGNvZGFfc3ltbGlua19pbiBjb2RhX3N5bWxpbms7CisgICAgc3RydWN0IGNvZGFfcmVhZGxpbmtfaW4gY29kYV9yZWFkbGluazsKKyAgICBzdHJ1Y3QgY29kYV9mc3luY19pbiBjb2RhX2ZzeW5jOworICAgIHN0cnVjdCBjb2RhX3ZnZXRfaW4gY29kYV92Z2V0OworICAgIHN0cnVjdCBjb2RhX29wZW5fYnlfZmRfaW4gY29kYV9vcGVuX2J5X2ZkOworICAgIHN0cnVjdCBjb2RhX29wZW5fYnlfcGF0aF9pbiBjb2RhX29wZW5fYnlfcGF0aDsKKyAgICBzdHJ1Y3QgY29kYV9zdGF0ZnNfaW4gY29kYV9zdGF0ZnM7Cit9OworCit1bmlvbiBvdXRwdXRBcmdzIHsKKyAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwkJLyogTkI6IGV2ZXJ5IHN0cnVjdCBiZWxvdyBiZWdpbnMgd2l0aCBhbiBvaCAqLworICAgIHN0cnVjdCBjb2RhX3Jvb3Rfb3V0IGNvZGFfcm9vdDsKKyAgICBzdHJ1Y3QgY29kYV9vcGVuX291dCBjb2RhX29wZW47CisgICAgc3RydWN0IGNvZGFfaW9jdGxfb3V0IGNvZGFfaW9jdGw7CisgICAgc3RydWN0IGNvZGFfZ2V0YXR0cl9vdXQgY29kYV9nZXRhdHRyOworICAgIHN0cnVjdCBjb2RhX2xvb2t1cF9vdXQgY29kYV9sb29rdXA7CisgICAgc3RydWN0IGNvZGFfY3JlYXRlX291dCBjb2RhX2NyZWF0ZTsKKyAgICBzdHJ1Y3QgY29kYV9ta2Rpcl9vdXQgY29kYV9ta2RpcjsKKyAgICBzdHJ1Y3QgY29kYV9yZWFkbGlua19vdXQgY29kYV9yZWFkbGluazsKKyAgICBzdHJ1Y3QgY29kYV92Z2V0X291dCBjb2RhX3ZnZXQ7CisgICAgc3RydWN0IGNvZGFfcHVyZ2V1c2VyX291dCBjb2RhX3B1cmdldXNlcjsKKyAgICBzdHJ1Y3QgY29kYV96YXBmaWxlX291dCBjb2RhX3phcGZpbGU7CisgICAgc3RydWN0IGNvZGFfemFwZGlyX291dCBjb2RhX3phcGRpcjsKKyAgICBzdHJ1Y3QgY29kYV9wdXJnZWZpZF9vdXQgY29kYV9wdXJnZWZpZDsKKyAgICBzdHJ1Y3QgY29kYV9yZXBsYWNlX291dCBjb2RhX3JlcGxhY2U7CisgICAgc3RydWN0IGNvZGFfb3Blbl9ieV9mZF9vdXQgY29kYV9vcGVuX2J5X2ZkOworICAgIHN0cnVjdCBjb2RhX29wZW5fYnlfcGF0aF9vdXQgY29kYV9vcGVuX2J5X3BhdGg7CisgICAgc3RydWN0IGNvZGFfc3RhdGZzX291dCBjb2RhX3N0YXRmczsKK307ICAgIAorCit1bmlvbiBjb2RhX2Rvd25jYWxscyB7CisgICAgLyogQ09EQV9JTlZBTElEQVRFIGlzIGEgdmVudXMtPmtlcm5lbCBjYWxsICovCisgICAgLyogQ09EQV9GTFVTSCBpcyBhIHZlbnVzLT5rZXJuZWwgY2FsbCAqLworICAgIHN0cnVjdCBjb2RhX3B1cmdldXNlcl9vdXQgcHVyZ2V1c2VyOworICAgIHN0cnVjdCBjb2RhX3phcGZpbGVfb3V0IHphcGZpbGU7CisgICAgc3RydWN0IGNvZGFfemFwZGlyX291dCB6YXBkaXI7CisgICAgc3RydWN0IGNvZGFfcHVyZ2VmaWRfb3V0IHB1cmdlZmlkOworICAgIHN0cnVjdCBjb2RhX3JlcGxhY2Vfb3V0IHJlcGxhY2U7Cit9OworCisKKy8qCisgKiBVc2VkIGZvciBpZGVudGlmeWluZyB1c2FnZSBvZiAiQ29udHJvbCIgYW5kIHBpb2N0bHMKKyAqLworCisjZGVmaW5lIFBJT0NQQVJNX01BU0sgMHgwMDAwZmZmZgorc3RydWN0IFZpY2VJb2N0bCB7CisgICAgICAgIHZvaWQgKmluOyAgICAgICAgLyogRGF0YSB0byBiZSB0cmFuc2ZlcnJlZCBpbiAqLworICAgICAgICB2b2lkICpvdXQ7ICAgICAgIC8qIERhdGEgdG8gYmUgdHJhbnNmZXJyZWQgb3V0ICovCisgICAgICAgIHVfc2hvcnQgaW5fc2l6ZTsgICAgICAgIC8qIFNpemUgb2YgaW5wdXQgYnVmZmVyIDw9IDJLICovCisgICAgICAgIHVfc2hvcnQgb3V0X3NpemU7ICAgICAgIC8qIE1heGltdW0gc2l6ZSBvZiBvdXRwdXQgYnVmZmVyLCA8PSAySyAqLworfTsKKworc3RydWN0IFBpb2N0bERhdGEgeworICAgICAgICBjb25zdCBjaGFyICpwYXRoOworICAgICAgICBpbnQgZm9sbG93OworICAgICAgICBzdHJ1Y3QgVmljZUlvY3RsIHZpOworfTsKKworI2RlZmluZSBDT0RBX0NPTlRST0wJCSIuQ09OVFJPTCIKKyNkZWZpbmUgQ09EQV9DT05UUk9MTEVOCQk4CisjZGVmaW5lIENUTF9JTk8JCQktMQorCisvKiBEYXRhIHBhc3NlZCB0byBtb3VudCAqLworCisjZGVmaW5lIENPREFfTU9VTlRfVkVSU0lPTiAxCisKK3N0cnVjdCBjb2RhX21vdW50X2RhdGEgeworCWludAkJdmVyc2lvbjsKKwlpbnQJCWZkOyAgICAgICAvKiBPcGVuZWQgZGV2aWNlICovCit9OworCisjZW5kaWYgCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9jb2RhX3BzZGV2LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvY29kYV9wc2Rldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYWMzMjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvY29kYV9wc2Rldi5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgX19DT0RBX1BTREVWX0gKKyNkZWZpbmUgX19DT0RBX1BTREVWX0gKKworI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CisKKyNkZWZpbmUgQ09EQV9QU0RFVl9NQUpPUiA2NworI2RlZmluZSBNQVhfQ09EQURFVlMgIDUJICAgLyogaG93IG1hbnkgZG8gd2UgYWxsb3cgKi8KKworCisvKiBtZXNzYWdlcyBiZXR3ZWVuIGNvZGEgZmlsZXN5c3RlbSBpbiBrZXJuZWwgYW5kIFZlbnVzICovCitzdHJ1Y3QgdXBjX3JlcSB7CisJc3RydWN0IGxpc3RfaGVhZCAgICB1Y19jaGFpbjsKKwljYWRkcl90CSAgICAgICAgICAgIHVjX2RhdGE7CisJdV9zaG9ydAkgICAgICAgICAgICB1Y19mbGFnczsKKwl1X3Nob3J0ICAgICAgICAgICAgIHVjX2luU2l6ZTsgIC8qIFNpemUgaXMgYXQgbW9zdCA1MDAwIGJ5dGVzICovCisJdV9zaG9ydAkgICAgICAgICAgICB1Y19vdXRTaXplOworCXVfc2hvcnQJICAgICAgICAgICAgdWNfb3Bjb2RlOyAgLyogY29waWVkIGZyb20gZGF0YSB0byBzYXZlIGxvb2t1cCAqLworCWludAkJICAgIHVjX3VuaXF1ZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAgIHVjX3NsZWVwOyAgIC8qIHByb2Nlc3MnIHdhaXQgcXVldWUgKi8KK307CisKKyNkZWZpbmUgQ09EQV9SRVFfQVNZTkMgIDB4MQorI2RlZmluZSBDT0RBX1JFUV9SRUFEICAgMHgyCisjZGVmaW5lIENPREFfUkVRX1dSSVRFICAweDQKKyNkZWZpbmUgQ09EQV9SRVFfQUJPUlQgIDB4OAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9jb2ZmLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvY29mZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNTRhN2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvY29mZi5oCkBAIC0wLDAgKzEsMzUxIEBACisvKiBUaGlzIGZpbGUgaXMgZGVyaXZlZCBmcm9tIHRoZSBHQVMgMi4xLjQgYXNzZW1ibGVyIGNvbnRyb2wgZmlsZS4KKyAgIFRoZSBHQVMgcHJvZHVjdCBpcyB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiBvciBsYXRlci4KKyAgIEFzIHN1Y2gsIHRoaXMgZmlsZSBpcyBhbHNvIHVuZGVyIHRoYXQgbGljZW5zZS4KKworICAgSWYgdGhlIGZpbGUgZm9ybWF0IGNoYW5nZXMgaW4gdGhlIENPRkYgb2JqZWN0LCB0aGlzIGZpbGUgc2hvdWxkIGJlCisgICBzdWJzZXF1ZW50bHkgdXBkYXRlZCB0byByZWZsZWN0IHRoZSBjaGFuZ2VzLgorCisgICBUaGUgYWN0dWFsIGxvYWRlciBtb2R1bGUgb25seSB1c2VzIGEgZmV3IG9mIHRoZXNlIHN0cnVjdHVyZXMuIFRoZSBmdWxsCisgICBzZXQgaXMgZG9jdW1lbnRlZCBoZXJlIGJlY2F1c2UgSSByZWNlaXZlZCB0aGUgZnVsbCBzZXQuIElmIHlvdSB3aXNoCisgICBtb3JlIGluZm9ybWF0aW9uIGFib3V0IENPRkYsIHRoZW4gTydSZWlsbHkgaGFzIGEgdmVyeSBleGNlbGxlbnQgYm9vay4KKyovCisKKyNkZWZpbmUgIEVfU1lNTk1MRU4gIDggICAvKiBOdW1iZXIgb2YgY2hhcmFjdGVycyBpbiBhIHN5bWJvbCBuYW1lICAgICAgICAgKi8KKyNkZWZpbmUgIEVfRklMTk1MRU4gMTQgICAvKiBOdW1iZXIgb2YgY2hhcmFjdGVycyBpbiBhIGZpbGUgbmFtZSAgICAgICAgICAgKi8KKyNkZWZpbmUgIEVfRElNTlVNICAgIDQgICAvKiBOdW1iZXIgb2YgYXJyYXkgZGltZW5zaW9ucyBpbiBhdXhpbGlhcnkgZW50cnkgKi8KKworLyoKKyAqIFRoZXNlIGRlZmluZXMgYXJlIGJ5dGUgb3JkZXIgaW5kZXBlbmRlbnQuIFRoZXJlIGlzIG5vIGFsaWdubWVudCBvZiBmaWVsZHMKKyAqIHBlcm1pdHRlZCBpbiB0aGUgc3RydWN0dXJlcy4gVGhlcmVmb3JlIHRoZXkgYXJlIGRlY2xhcmVkIGFzIGNoYXJhY3RlcnMKKyAqIGFuZCB0aGUgdmFsdWVzIGxvYWRlZCBmcm9tIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb25zLiBJdCBhbHNvIG1ha2VzIGl0CisgKiBuaWNlIHRvIGhhdmUgaXQgImVuZGlhbiIgaW5kZXBlbmRlbnQuCisgKi8KKyAKKy8qIExvYWQgYSBzaG9ydCBpbnQgZnJvbSB0aGUgZm9sbG93aW5nIHRhYmxlcyB3aXRoIGxpdHRsZS1lbmRpYW4gZm9ybWF0cyAqLworI2RlZmluZSBDT0ZGX1NIT1JUX0wocHMpICgoc2hvcnQpKCgodW5zaWduZWQgc2hvcnQpKCh1bnNpZ25lZCBjaGFyKXBzWzFdKTw8OCl8XAorCQkJCSAgKCh1bnNpZ25lZCBzaG9ydCkoKHVuc2lnbmVkIGNoYXIpcHNbMF0pKSkpCisKKy8qIExvYWQgYSBsb25nIGludCBmcm9tIHRoZSBmb2xsb3dpbmcgdGFibGVzIHdpdGggbGl0dGxlLWVuZGlhbiBmb3JtYXRzICovCisjZGVmaW5lIENPRkZfTE9OR19MKHBzKSAoKChsb25nKSgoKHVuc2lnbmVkIGxvbmcpKCh1bnNpZ25lZCBjaGFyKXBzWzNdKTw8MjQpIHxcCisJCQkJICgodW5zaWduZWQgbG9uZykoKHVuc2lnbmVkIGNoYXIpcHNbMl0pPDwxNikgfFwKKwkJCQkgKCh1bnNpZ25lZCBsb25nKSgodW5zaWduZWQgY2hhcilwc1sxXSk8PDgpICB8XAorCQkJCSAoKHVuc2lnbmVkIGxvbmcpKCh1bnNpZ25lZCBjaGFyKXBzWzBdKSkpKSkKKyAKKy8qIExvYWQgYSBzaG9ydCBpbnQgZnJvbSB0aGUgZm9sbG93aW5nIHRhYmxlcyB3aXRoIGJpZy1lbmRpYW4gZm9ybWF0cyAqLworI2RlZmluZSBDT0ZGX1NIT1JUX0gocHMpICgoc2hvcnQpKCgodW5zaWduZWQgc2hvcnQpKCh1bnNpZ25lZCBjaGFyKXBzWzBdKTw8OCl8XAorCQkJCSAgKCh1bnNpZ25lZCBzaG9ydCkoKHVuc2lnbmVkIGNoYXIpcHNbMV0pKSkpCisKKy8qIExvYWQgYSBsb25nIGludCBmcm9tIHRoZSBmb2xsb3dpbmcgdGFibGVzIHdpdGggYmlnLWVuZGlhbiBmb3JtYXRzICovCisjZGVmaW5lIENPRkZfTE9OR19IKHBzKSAoKChsb25nKSgoKHVuc2lnbmVkIGxvbmcpKCh1bnNpZ25lZCBjaGFyKXBzWzBdKTw8MjQpIHxcCisJCQkJICgodW5zaWduZWQgbG9uZykoKHVuc2lnbmVkIGNoYXIpcHNbMV0pPDwxNikgfFwKKwkJCQkgKCh1bnNpZ25lZCBsb25nKSgodW5zaWduZWQgY2hhcilwc1syXSk8PDgpICB8XAorCQkJCSAoKHVuc2lnbmVkIGxvbmcpKCh1bnNpZ25lZCBjaGFyKXBzWzNdKSkpKSkKKworLyogVGhlc2UgbWF5IGJlIG92ZXJyaWRkZW4gbGF0ZXIgYnkgYnJhaW4gZGVhZCBpbXBsZW1lbnRhdGlvbnMgd2hpY2ggZ2VuZXJhdGUKKyAgIGEgYmlnLWVuZGlhbiBoZWFkZXIgd2l0aCBsaXR0bGUtZW5kaWFuIGRhdGEuIEluIHRoYXQgY2FzZSwgZ2VuZXJhdGUgYQorICAgcmVwbGFjZW1lbnQgbWFjcm8gd2hpY2ggdGVzdHMgYSBmbGFnIGFuZCB1c2VzIGVpdGhlciBvZiB0aGUgdHdvIGFib3ZlCisgICBhcyBhcHByb3ByaWF0ZS4gKi8KKworI2RlZmluZSBDT0ZGX0xPTkcodikgICBDT0ZGX0xPTkdfTCh2KQorI2RlZmluZSBDT0ZGX1NIT1JUKHYpICBDT0ZGX1NIT1JUX0wodikKKworLyoqKiBjb2ZmIGluZm9ybWF0aW9uIGZvciBJbnRlbCAzODYvNDg2LiAgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKiogRklMRSBIRUFERVIgKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IENPRkZfZmlsZWhkciB7CisJY2hhciBmX21hZ2ljWzJdOwkvKiBtYWdpYyBudW1iZXIJCQkqLworCWNoYXIgZl9uc2Nuc1syXTsJLyogbnVtYmVyIG9mIHNlY3Rpb25zCQkqLworCWNoYXIgZl90aW1kYXRbNF07CS8qIHRpbWUgJiBkYXRlIHN0YW1wCQkqLworCWNoYXIgZl9zeW1wdHJbNF07CS8qIGZpbGUgcG9pbnRlciB0byBzeW10YWIJKi8KKwljaGFyIGZfbnN5bXNbNF07CS8qIG51bWJlciBvZiBzeW10YWIgZW50cmllcwkqLworCWNoYXIgZl9vcHRoZHJbMl07CS8qIHNpemVvZihvcHRpb25hbCBoZHIpCQkqLworCWNoYXIgZl9mbGFnc1syXTsJLyogZmxhZ3MJCQkqLworfTsKKworLyoKKyAqICAgQml0cyBmb3IgZl9mbGFnczoKKyAqCisgKglGX1JFTEZMRwlyZWxvY2F0aW9uIGluZm8gc3RyaXBwZWQgZnJvbSBmaWxlCisgKglGX0VYRUMJCWZpbGUgaXMgZXhlY3V0YWJsZSAgKGkuZS4gbm8gdW5yZXNvbHZlZCBleHRlcm5hbAorICoJCQlyZWZlcmVuY2VzKQorICoJRl9MTk5PCQlsaW5lIG51bWJlcnMgc3RyaXBwZWQgZnJvbSBmaWxlCisgKglGX0xTWU1TCQlsb2NhbCBzeW1ib2xzIHN0cmlwcGVkIGZyb20gZmlsZQorICoJRl9NSU5NQUwJdGhpcyBpcyBhIG1pbmltYWwgb2JqZWN0IGZpbGUgKCIubSIpIG91dHB1dCBvZiBmZXh0cmFjdAorICoJRl9VUERBVEUJdGhpcyBpcyBhIGZ1bGx5IGJvdW5kIHVwZGF0ZSBmaWxlLCBvdXRwdXQgb2Ygb2dlbgorICoJRl9TV0FCRAkJdGhpcyBmaWxlIGhhcyBoYWQgaXRzIGJ5dGVzIHN3YWJiZWQgKGluIG5hbWVzKQorICoJRl9BUjE2V1IJdGhpcyBmaWxlIGhhcyB0aGUgYnl0ZSBvcmRlcmluZyBvZiBhbiBBUjE2V1IKKyAqCQkJKGUuZy4gMTEvNzApIG1hY2hpbmUKKyAqCUZfQVIzMldSCXRoaXMgZmlsZSBoYXMgdGhlIGJ5dGUgb3JkZXJpbmcgb2YgYW4gQVIzMldSIG1hY2hpbmUKKyAqCQkJKGUuZy4gdmF4IGFuZCBpTlRFTCAzODYpCisgKglGX0FSMzJXCQl0aGlzIGZpbGUgaGFzIHRoZSBieXRlIG9yZGVyaW5nIG9mIGFuIEFSMzJXIG1hY2hpbmUKKyAqCQkJKGUuZy4gM2IsbWF4aSkKKyAqCUZfUEFUQ0gJCWZpbGUgY29udGFpbnMgInBhdGNoIiBsaXN0IGluIG9wdGlvbmFsIGhlYWRlcgorICoJRl9OT0RGCQkobWluaW1hbCBmaWxlIG9ubHkpIG5vIGRlY2lzaW9uIGZ1bmN0aW9ucyBmb3IKKyAqCQkJcmVwbGFjZWQgZnVuY3Rpb25zCisgKi8KKworI2RlZmluZSAgQ09GRl9GX1JFTEZMRwkJMDAwMDAwMQorI2RlZmluZSAgQ09GRl9GX0VYRUMJCTAwMDAwMDIKKyNkZWZpbmUgIENPRkZfRl9MTk5PCQkwMDAwMDA0CisjZGVmaW5lICBDT0ZGX0ZfTFNZTVMJCTAwMDAwMTAKKyNkZWZpbmUgIENPRkZfRl9NSU5NQUwJCTAwMDAwMjAKKyNkZWZpbmUgIENPRkZfRl9VUERBVEUJCTAwMDAwNDAKKyNkZWZpbmUgIENPRkZfRl9TV0FCRAkJMDAwMDEwMAorI2RlZmluZSAgQ09GRl9GX0FSMTZXUgkJMDAwMDIwMAorI2RlZmluZSAgQ09GRl9GX0FSMzJXUgkJMDAwMDQwMAorI2RlZmluZSAgQ09GRl9GX0FSMzJXCQkwMDAxMDAwCisjZGVmaW5lICBDT0ZGX0ZfUEFUQ0gJCTAwMDIwMDAKKyNkZWZpbmUgIENPRkZfRl9OT0RGCQkwMDAyMDAwCisKKyNkZWZpbmUJQ09GRl9JMzg2TUFHSUMJICAgICAgICAweDE0YyAgIC8qIExpbnV4J3Mgc3lzdGVtICAgICovCisKKyNpZiAwICAgLyogUGVyaGFwcywgc29tZWRheSwgdGhlc2UgZm9ybWF0cyBtYXkgYmUgdXNlZC4gICAgICAqLworI2RlZmluZSBDT0ZGX0kzODZQVFhNQUdJQwkweDE1NAorI2RlZmluZSBDT0ZGX0kzODZBSVhNQUdJQwkweDE3NSAgIC8qIElCTSdzIEFJWCBzeXN0ZW0gICovCisjZGVmaW5lIENPRkZfSTM4NkJBRE1BRyh4KSAoKENPRkZfU0hPUlQoKHgpLmZfbWFnaWMpICE9IENPRkZfSTM4Nk1BR0lDKSBcCisJCQkgICYmIENPRkZfU0hPUlQoKHgpLmZfbWFnaWMpICE9IENPRkZfSTM4NlBUWE1BR0lDIFwKKwkJCSAgJiYgQ09GRl9TSE9SVCgoeCkuZl9tYWdpYykgIT0gQ09GRl9JMzg2QUlYTUFHSUMpCisjZWxzZQorI2RlZmluZSBDT0ZGX0kzODZCQURNQUcoeCkgKENPRkZfU0hPUlQoKHgpLmZfbWFnaWMpICE9IENPRkZfSTM4Nk1BR0lDKQorI2VuZGlmCisKKyNkZWZpbmUJQ09GRl9GSUxIRFIJc3RydWN0IENPRkZfZmlsZWhkcgorI2RlZmluZQlDT0ZGX0ZJTEhTWglzaXplb2YoQ09GRl9GSUxIRFIpCisKKy8qKioqKioqKioqKioqKioqKioqKioqIEFPVVQgIk9QVElPTkFMIEhFQURFUiIgKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogTGludXggQ09GRiBtdXN0IGhhdmUgdGhpcyAib3B0aW9uYWwiIGhlYWRlci4gU3RhbmRhcmQgQ09GRiBoYXMgbm8gZW50cnkKKyAgIGxvY2F0aW9uIGZvciB0aGUgImVudHJ5IiBwb2ludC4gVGhleSBub3JtYWxseSB3b3VsZCBzdGFydCB3aXRoIHRoZSBmaXJzdAorICAgbG9jYXRpb24gb2YgdGhlIC50ZXh0IHNlY3Rpb24uIFRoaXMgaXMgbm90IGEgZ29vZCBpZGVhIGZvciBsaW51eC4gU28sCisgICB0aGUgdXNlIG9mIHRoaXMgIm9wdGlvbmFsIiBoZWFkZXIgaXMgbm90IG9wdGlvbmFsLiBJdCBpcyByZXF1aXJlZC4KKworICAgRG8gbm90IGJlIHRlbXB0ZWQgdG8gYXNzdW1lIHRoYXQgdGhlIHNpemUgb2YgdGhlIG9wdGlvbmFsIGhlYWRlciBpcworICAgYSBjb25zdGFudCBhbmQgc2ltcGx5IGluZGV4IHRoZSBuZXh0IGJ5dGUgYnkgdGhlIHNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUuCisgICBVc2UgdGhlICdmX29wdGhkcicgZmllbGQgaW4gdGhlIG1haW4gY29mZiBoZWFkZXIgZm9yIHRoZSBzaXplIG9mIHRoZQorICAgc3RydWN0dXJlIGFjdHVhbGx5IHdyaXR0ZW4gdG8gdGhlIGZpbGUhIQorKi8KKwordHlwZWRlZiBzdHJ1Y3QgCit7CisgIGNoYXIgCW1hZ2ljWzJdOwkJLyogdHlwZSBvZiBmaWxlCQkJCSAqLworICBjaGFyCXZzdGFtcFsyXTsJCS8qIHZlcnNpb24gc3RhbXAJCQkgKi8KKyAgY2hhcgl0c2l6ZVs0XTsJCS8qIHRleHQgc2l6ZSBpbiBieXRlcywgcGFkZGVkIHRvIEZXIGJkcnkgKi8KKyAgY2hhcglkc2l6ZVs0XTsJCS8qIGluaXRpYWxpemVkICAgZGF0YSAiICAgIgkJICovCisgIGNoYXIJYnNpemVbNF07CQkvKiB1bmluaXRpYWxpemVkIGRhdGEgIiAgICIJCSAqLworICBjaGFyCWVudHJ5WzRdOwkJLyogZW50cnkgcHQuCQkJCSAqLworICBjaGFyIAl0ZXh0X3N0YXJ0WzRdOwkJLyogYmFzZSBvZiB0ZXh0IHVzZWQgZm9yIHRoaXMgZmlsZSAgICAgICAqLworICBjaGFyIAlkYXRhX3N0YXJ0WzRdOwkJLyogYmFzZSBvZiBkYXRhIHVzZWQgZm9yIHRoaXMgZmlsZSAgICAgICAqLworfQorQ09GRl9BT1VUSERSOworCisjZGVmaW5lIENPRkZfQU9VVFNaIChzaXplb2YoQ09GRl9BT1VUSERSKSkKKworI2RlZmluZSBDT0ZGX1NUTUFHSUMJMDQwMQorI2RlZmluZSBDT0ZGX09NQUdJQyAgICAgMDQwNAorI2RlZmluZSBDT0ZGX0pNQUdJQyAgICAgMDQwNyAgICAvKiBkaXJ0eSB0ZXh0IGFuZCBkYXRhIGltYWdlLCBjYW4ndCBzaGFyZSAgKi8KKyNkZWZpbmUgQ09GRl9ETUFHSUMgICAgIDA0MTAgICAgLyogZGlydHkgdGV4dCBzZWdtZW50LCBkYXRhIGFsaWduZWQgICAgICAgICovCisjZGVmaW5lIENPRkZfWk1BR0lDICAgICAwNDEzICAgIC8qIFRoZSBwcm9wZXIgbWFnaWMgbnVtYmVyIGZvciBleGVjdXRhYmxlcyAgKi8KKyNkZWZpbmUgQ09GRl9TSE1BR0lDCTA0NDMJLyogc2hhcmVkIGxpYnJhcnkgaGVhZGVyICAgICAgICAgICAgICAgICAgICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqIFNFQ1RJT04gSEVBREVSICoqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBDT0ZGX3NjbmhkciB7CisgIGNoYXIJCXNfbmFtZVs4XTsJLyogc2VjdGlvbiBuYW1lCQkJICAgICovCisgIGNoYXIJCXNfcGFkZHJbNF07CS8qIHBoeXNpY2FsIGFkZHJlc3MsIGFsaWFzZWQgc19ubGliICovCisgIGNoYXIJCXNfdmFkZHJbNF07CS8qIHZpcnR1YWwgYWRkcmVzcwkJICAgICovCisgIGNoYXIJCXNfc2l6ZVs0XTsJLyogc2VjdGlvbiBzaXplCQkJICAgICovCisgIGNoYXIJCXNfc2NucHRyWzRdOwkvKiBmaWxlIHB0ciB0byByYXcgZGF0YSBmb3Igc2VjdGlvbiAqLworICBjaGFyCQlzX3JlbHB0cls0XTsJLyogZmlsZSBwdHIgdG8gcmVsb2NhdGlvbgkgICAgKi8KKyAgY2hhcgkJc19sbm5vcHRyWzRdOwkvKiBmaWxlIHB0ciB0byBsaW5lIG51bWJlcnMJICAgICovCisgIGNoYXIJCXNfbnJlbG9jWzJdOwkvKiBudW1iZXIgb2YgcmVsb2NhdGlvbiBlbnRyaWVzCSAgICAqLworICBjaGFyCQlzX25sbm5vWzJdOwkvKiBudW1iZXIgb2YgbGluZSBudW1iZXIgZW50cmllcyAgICAqLworICBjaGFyCQlzX2ZsYWdzWzRdOwkvKiBmbGFncwkJCSAgICAqLworfTsKKworI2RlZmluZQlDT0ZGX1NDTkhEUglzdHJ1Y3QgQ09GRl9zY25oZHIKKyNkZWZpbmUJQ09GRl9TQ05IU1oJc2l6ZW9mKENPRkZfU0NOSERSKQorCisvKgorICogbmFtZXMgb2YgInNwZWNpYWwiIHNlY3Rpb25zCisgKi8KKworI2RlZmluZSBDT0ZGX1RFWFQJIi50ZXh0IgorI2RlZmluZSBDT0ZGX0RBVEEJIi5kYXRhIgorI2RlZmluZSBDT0ZGX0JTUwkiLmJzcyIKKyNkZWZpbmUgQ09GRl9DT01NRU5UICAgICIuY29tbWVudCIKKyNkZWZpbmUgQ09GRl9MSUIgICAgICAgICIubGliIgorCisjZGVmaW5lIENPRkZfU0VDVF9URVhUICAwICAgICAgLyogU2VjdGlvbiBmb3IgaW5zdHJ1Y3Rpb24gY29kZSAgICAgICAgICAgICAqLworI2RlZmluZSBDT0ZGX1NFQ1RfREFUQSAgMSAgICAgIC8qIFNlY3Rpb24gZm9yIGluaXRpYWxpemVkIGdsb2JhbHMgICAgICAgICAgKi8KKyNkZWZpbmUgQ09GRl9TRUNUX0JTUyAgIDIgICAgICAvKiBTZWN0aW9uIGZvciB1bi1pbml0aWFsaXplZCBnbG9iYWxzICAgICAgICovCisjZGVmaW5lIENPRkZfU0VDVF9SRVFEICAzICAgICAgLyogTWluaW11bSBudW1iZXIgb2Ygc2VjdGlvbnMgZm9yIGdvb2QgZmlsZSAqLworCisjZGVmaW5lIENPRkZfU1RZUF9SRUcgICAgIDB4MDAgLyogcmVndWxhciBzZWdtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0ZGX1NUWVBfRFNFQ1QgICAweDAxIC8qIGR1bW15IHNlZ21lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09GRl9TVFlQX05PTE9BRCAgMHgwMiAvKiBuby1sb2FkIHNlZ21lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRkZfU1RZUF9HUk9VUCAgIDB4MDQgLyogZ3JvdXAgc2VnbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0ZGX1NUWVBfUEFEICAgICAweDA4IC8qIC5wYWQgc2VnbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09GRl9TVFlQX0NPUFkgICAgMHgxMCAvKiBjb3B5IHNlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRkZfU1RZUF9URVhUICAgIDB4MjAgLyogLnRleHQgc2VnbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0ZGX1NUWVBfREFUQSAgICAweDQwIC8qIC5kYXRhIHNlZ21lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09GRl9TVFlQX0JTUyAgICAgMHg4MCAvKiAuYnNzIHNlZ21lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRkZfU1RZUF9JTkZPICAgMHgyMDAgLyogLmNvbW1lbnQgc2VjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0ZGX1NUWVBfT1ZFUiAgIDB4NDAwIC8qIG92ZXJsYXkgc2VjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09GRl9TVFlQX0xJQiAgICAweDgwMCAvKiBsaWJyYXJ5IHNlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qCisgKiBTaGFyZWQgbGlicmFyaWVzIGhhdmUgdGhlIGZvbGxvd2luZyBzZWN0aW9uIGhlYWRlciBpbiB0aGUgZGF0YSBmaWVsZCBmb3IKKyAqIGVhY2ggbGlicmFyeS4KKyAqLworCitzdHJ1Y3QgQ09GRl9zbGliIHsKKyAgY2hhcgkJc2xfZW50c3pbNF07CS8qIFNpemUgb2YgdGhpcyBlbnRyeSAgICAgICAgICAgICAgICovCisgIGNoYXIJCXNsX3BhdGhuZHhbNF07CS8qIHNpemUgb2YgdGhlIGhlYWRlciBmaWVsZCAgICAgICAgICovCit9OworCisjZGVmaW5lCUNPRkZfU0xJQkhECXN0cnVjdCBDT0ZGX3NsaWIKKyNkZWZpbmUJQ09GRl9TTElCU1oJc2l6ZW9mKENPRkZfU0xJQkhEKQorCisvKioqKioqKioqKioqKioqKioqKioqKiBMSU5FIE5VTUJFUlMgKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogMSBsaW5lIG51bWJlciBlbnRyeSBmb3IgZXZlcnkgImJyZWFrcG9pbnRhYmxlIiBzb3VyY2UgbGluZSBpbiBhIHNlY3Rpb24uCisgKiBMaW5lIG51bWJlcnMgYXJlIGdyb3VwZWQgb24gYSBwZXIgZnVuY3Rpb24gYmFzaXM7IGZpcnN0IGVudHJ5IGluIGEgZnVuY3Rpb24KKyAqIGdyb3VwaW5nIHdpbGwgaGF2ZSBsX2xubm8gPSAwIGFuZCBpbiBwbGFjZSBvZiBwaHlzaWNhbCBhZGRyZXNzIHdpbGwgYmUgdGhlCisgKiBzeW1ib2wgdGFibGUgaW5kZXggb2YgdGhlIGZ1bmN0aW9uIG5hbWUuCisgKi8KKworc3RydWN0IENPRkZfbGluZW5vIHsKKyAgdW5pb24geworICAgIGNoYXIgbF9zeW1uZHhbNF07CS8qIGZ1bmN0aW9uIG5hbWUgc3ltYm9sIGluZGV4LCBpZmYgbF9sbm5vID09IDAqLworICAgIGNoYXIgbF9wYWRkcls0XTsJLyogKHBoeXNpY2FsKSBhZGRyZXNzIG9mIGxpbmUgbnVtYmVyCSovCisgIH0gbF9hZGRyOworICBjaGFyIGxfbG5ub1syXTsJLyogbGluZSBudW1iZXIJCSovCit9OworCisjZGVmaW5lCUNPRkZfTElORU5PCXN0cnVjdCBDT0ZGX2xpbmVubworI2RlZmluZQlDT0ZGX0xJTkVTWgk2CisKKy8qKioqKioqKioqKioqKioqKioqKioqIFNZTUJPTFMgKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBDT0ZGX0VfU1lNTk1MRU4JIDgJLyogIyBjaGFyYWN0ZXJzIGluIGEgc2hvcnQgc3ltYm9sIG5hbWUJKi8KKyNkZWZpbmUgQ09GRl9FX0ZJTE5NTEVOCTE0CS8qICMgY2hhcmFjdGVycyBpbiBhIGZpbGUgbmFtZQkJKi8KKyNkZWZpbmUgQ09GRl9FX0RJTU5VTQkgNAkvKiAjIGFycmF5IGRpbWVuc2lvbnMgaW4gYXV4aWxpYXJ5IGVudHJ5ICovCisKKy8qCisgKiAgQWxsIHN5bWJvbHMgYW5kIHNlY3Rpb25zIGhhdmUgdGhlIGZvbGxvd2luZyBkZWZpbml0aW9uCisgKi8KKworc3RydWN0IENPRkZfc3ltZW50IAoreworICB1bmlvbiB7CisgICAgY2hhciBlX25hbWVbRV9TWU1OTUxFTl07ICAgIC8qIFN5bWJvbCBuYW1lIChmaXJzdCA4IGNoYXJhY3RlcnMpICovCisgICAgc3RydWN0IHsKKyAgICAgIGNoYXIgZV96ZXJvZXNbNF07ICAgICAgICAgLyogTGVhZGluZyB6ZXJvcyAqLworICAgICAgY2hhciBlX29mZnNldFs0XTsgICAgICAgICAvKiBPZmZzZXQgaWYgdGhpcyBpcyBhIGhlYWRlciBzZWN0aW9uICovCisgICAgfSBlOworICB9IGU7CisKKyAgY2hhciBlX3ZhbHVlWzRdOyAgICAgICAgICAgICAgLyogVmFsdWUgKGFkZHJlc3MpIG9mIHRoZSBzZWdtZW50ICovCisgIGNoYXIgZV9zY251bVsyXTsgICAgICAgICAgICAgIC8qIFNlY3Rpb24gbnVtYmVyICovCisgIGNoYXIgZV90eXBlWzJdOyAgICAgICAgICAgICAgIC8qIFR5cGUgb2Ygc2VjdGlvbiAqLworICBjaGFyIGVfc2NsYXNzWzFdOyAgICAgICAgICAgICAvKiBMb2FkZXIgY2xhc3MgKi8KKyAgY2hhciBlX251bWF1eFsxXTsgICAgICAgICAgICAgLyogTnVtYmVyIG9mIGF1eGlsaWFyeSBlbnRyaWVzIHdoaWNoIGZvbGxvdyAqLworfTsKKworI2RlZmluZSBDT0ZGX05fQlRNQVNLCSgweGYpICAgLyogTWFzayBmb3IgaW1wb3J0YW50IGNsYXNzIGJpdHMgKi8KKyNkZWZpbmUgQ09GRl9OX1RNQVNLCSgweDMwKSAgLyogTWFzayBmb3IgaW1wb3J0YW50IHR5cGUgYml0cyAgKi8KKyNkZWZpbmUgQ09GRl9OX0JUU0hGVAkoNCkgICAgIC8qICMgYml0cyB0byBzaGlmdCBjbGFzcyBmaWVsZCAgICovCisjZGVmaW5lIENPRkZfTl9UU0hJRlQJKDIpICAgICAvKiAjIGJpdHMgdG8gc2hpZnQgdHlwZSBmaWVsZCAgICAqLworCisvKgorICogIEF1eGlsaWFyeSBlbnRyaWVzIGJlY2F1c2UgdGhlIG1haW4gdGFibGUgaXMgdG9vIGxpbWl0aW5nLgorICovCisgIAordW5pb24gQ09GRl9hdXhlbnQgeworCisvKgorICogIERlYnVnZ2VyIGluZm9ybWF0aW9uCisgKi8KKworICBzdHJ1Y3QgeworICAgIGNoYXIgeF90YWduZHhbNF07CSAgICAgICAgLyogc3RyLCB1biwgb3IgZW51bSB0YWcgaW5keCAqLworICAgIHVuaW9uIHsKKyAgICAgIHN0cnVjdCB7CisJY2hhciAgeF9sbm5vWzJdOyAgICAgICAgLyogZGVjbGFyYXRpb24gbGluZSBudW1iZXIgKi8KKwljaGFyICB4X3NpemVbMl07ICAgICAgICAvKiBzdHIvdW5pb24vYXJyYXkgc2l6ZSAqLworICAgICAgfSB4X2xuc3o7CisgICAgICBjaGFyIHhfZnNpemVbNF07CSAgICAgICAgLyogc2l6ZSBvZiBmdW5jdGlvbiAqLworICAgIH0geF9taXNjOworCisgICAgdW5pb24geworICAgICAgc3RydWN0IHsJCSAgICAgICAgLyogaWYgSVNGQ04sIHRhZywgb3IgLmJiICovCisJY2hhciB4X2xubm9wdHJbNF07CS8qIHB0ciB0byBmY24gbGluZSAjICovCisJY2hhciB4X2VuZG5keFs0XTsJLyogZW50cnkgbmR4IHBhc3QgYmxvY2sgZW5kICovCisgICAgICB9IHhfZmNuOworCisgICAgICBzdHJ1Y3QgewkJICAgICAgICAvKiBpZiBJU0FSWSwgdXAgdG8gNCBkaW1lbi4gKi8KKwljaGFyIHhfZGltZW5bRV9ESU1OVU1dWzJdOworICAgICAgfSB4X2FyeTsKKyAgICB9IHhfZmNuYXJ5OworCisgICAgY2hhciB4X3R2bmR4WzJdOwkvKiB0diBpbmRleCAqLworICB9IHhfc3ltOworCisvKgorICogICBTb3VyY2UgZmlsZSBuYW1lcyAoZGVidWdnZXIgaW5mb3JtYXRpb24pCisgKi8KKworICB1bmlvbiB7CisgICAgY2hhciB4X2ZuYW1lW0VfRklMTk1MRU5dOworICAgIHN0cnVjdCB7CisgICAgICBjaGFyIHhfemVyb2VzWzRdOworICAgICAgY2hhciB4X29mZnNldFs0XTsKKyAgICB9IHhfbjsKKyAgfSB4X2ZpbGU7CisKKy8qCisgKiAgIFNlY3Rpb24gaW5mb3JtYXRpb24KKyAqLworCisgIHN0cnVjdCB7CisgICAgY2hhciB4X3Njbmxlbls0XTsJLyogc2VjdGlvbiBsZW5ndGggKi8KKyAgICBjaGFyIHhfbnJlbG9jWzJdOwkvKiAjIHJlbG9jYXRpb24gZW50cmllcyAqLworICAgIGNoYXIgeF9ubGlubm9bMl07CS8qICMgbGluZSBudW1iZXJzICovCisgIH0geF9zY247CisKKy8qCisgKiAgIFRyYW5zZmVyIHZlY3RvciAoYnJhbmNoIHRhYmxlKQorICovCisgIAorICBzdHJ1Y3QgeworICAgIGNoYXIgeF90dmZpbGxbNF07CS8qIHR2IGZpbGwgdmFsdWUgKi8KKyAgICBjaGFyIHhfdHZsZW5bMl07CS8qIGxlbmd0aCBvZiAudHYgKi8KKyAgICBjaGFyIHhfdHZyYW5bMl1bMl07CS8qIHR2IHJhbmdlICovCisgIH0geF90djsJCS8qIGluZm8gYWJvdXQgLnR2IHNlY3Rpb24gKGluIGF1eGVudCBvZiBzeW1ib2wgLnR2KSkgKi8KK307CisKKyNkZWZpbmUJQ09GRl9TWU1FTlQJc3RydWN0IENPRkZfc3ltZW50CisjZGVmaW5lCUNPRkZfU1lNRVNaCTE4CQorI2RlZmluZQlDT0ZGX0FVWEVOVAl1bmlvbiBDT0ZGX2F1eGVudAorI2RlZmluZQlDT0ZGX0FVWEVTWgkxOAorCisjZGVmaW5lIENPRkZfRVRFWFQJImV0ZXh0IgorCisvKioqKioqKioqKioqKioqKioqKioqKiBSRUxPQ0FUSU9OIERJUkVDVElWRVMgKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IENPRkZfcmVsb2MgeworICBjaGFyIHJfdmFkZHJbNF07ICAgICAgICAvKiBWaXJ0dWFsIGFkZHJlc3Mgb2YgaXRlbSAgICAqLworICBjaGFyIHJfc3ltbmR4WzRdOyAgICAgICAvKiBTeW1ib2wgaW5kZXggaW4gdGhlIHN5bXRhYiAqLworICBjaGFyIHJfdHlwZVsyXTsgICAgICAgICAvKiBSZWxvY2F0aW9uIHR5cGUgICAgICAgICAgICAqLworfTsKKworI2RlZmluZSBDT0ZGX1JFTE9DIHN0cnVjdCBDT0ZGX3JlbG9jCisjZGVmaW5lIENPRkZfUkVMU1ogMTAKKworI2RlZmluZSBDT0ZGX0RFRl9EQVRBX1NFQ1RJT05fQUxJR05NRU5UICA0CisjZGVmaW5lIENPRkZfREVGX0JTU19TRUNUSU9OX0FMSUdOTUVOVCAgIDQKKyNkZWZpbmUgQ09GRl9ERUZfVEVYVF9TRUNUSU9OX0FMSUdOTUVOVCAgNAorCisvKiBGb3IgbmV3IHNlY3Rpb25zIHdlIGhhdmVuJ3QgaGVhcmQgb2YgYmVmb3JlICovCisjZGVmaW5lIENPRkZfREVGX1NFQ1RJT05fQUxJR05NRU5UICAgICAgIDQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9jb21zdGF0cy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2NvbXN0YXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y1ZWE4ZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9jb21zdGF0cy5oCkBAIC0wLDAgKzEsMTE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKgljb21zdGF0cy5oICAtLSBTZXJpYWwgUG9ydCBTdGF0cy4KKyAqCisgKglDb3B5cmlnaHQgKEMpIDE5OTYtMTk5OCAgU3RhbGxpb24gVGVjaG5vbG9naWVzCisgKglDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiAgR3JlZyBVbmdlcmVyLgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKglidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICoJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoJR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKglZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqCUZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYJX0NPTVNUQVRTX0gKKyNkZWZpbmUJX0NPTVNUQVRTX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCVNlcmlhbCBwb3J0IHN0YXRzIHN0cnVjdHVyZS4gVGhlIHN0cnVjdHVyZSBpdHNlbGYgaXMgVUFSVAorICoJaW5kZXBlbmRlbnQsIGJ1dCBzb21lIGZpZWxkcyBtYXkgYmUgVUFSVC9kcml2ZXIgc3BlY2lmaWMgKGZvcgorICoJZXhhbXBsZSBzdGF0ZSkuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcJYnJkOworCXVuc2lnbmVkIGxvbmcJcGFuZWw7CisJdW5zaWduZWQgbG9uZwlwb3J0OworCXVuc2lnbmVkIGxvbmcJaHdpZDsKKwl1bnNpZ25lZCBsb25nCXR5cGU7CisJdW5zaWduZWQgbG9uZwl0eHRvdGFsOworCXVuc2lnbmVkIGxvbmcJcnh0b3RhbDsKKwl1bnNpZ25lZCBsb25nCXR4YnVmZmVyZWQ7CisJdW5zaWduZWQgbG9uZwlyeGJ1ZmZlcmVkOworCXVuc2lnbmVkIGxvbmcJcnhvdmVycnVuOworCXVuc2lnbmVkIGxvbmcJcnhwYXJpdHk7CisJdW5zaWduZWQgbG9uZwlyeGZyYW1pbmc7CisJdW5zaWduZWQgbG9uZwlyeGxvc3Q7CisJdW5zaWduZWQgbG9uZwl0eGJyZWFrczsKKwl1bnNpZ25lZCBsb25nCXJ4YnJlYWtzOworCXVuc2lnbmVkIGxvbmcJdHh4b247CisJdW5zaWduZWQgbG9uZwl0eHhvZmY7CisJdW5zaWduZWQgbG9uZwlyeHhvbjsKKwl1bnNpZ25lZCBsb25nCXJ4eG9mZjsKKwl1bnNpZ25lZCBsb25nCXR4Y3Rzb247CisJdW5zaWduZWQgbG9uZwl0eGN0c29mZjsKKwl1bnNpZ25lZCBsb25nCXJ4cnRzb247CisJdW5zaWduZWQgbG9uZwlyeHJ0c29mZjsKKwl1bnNpZ25lZCBsb25nCW1vZGVtOworCXVuc2lnbmVkIGxvbmcJc3RhdGU7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwl1bnNpZ25lZCBsb25nCXR0eXN0YXRlOworCXVuc2lnbmVkIGxvbmcJY2ZsYWdzOworCXVuc2lnbmVkIGxvbmcJaWZsYWdzOworCXVuc2lnbmVkIGxvbmcJb2ZsYWdzOworCXVuc2lnbmVkIGxvbmcJbGZsYWdzOworCXVuc2lnbmVkIGxvbmcJc2lnbmFsczsKK30gY29tc3RhdHNfdDsKKworCisvKgorICoJQm9hcmQgc3RhdHMgc3RydWN0dXJlLiBSZXR1cm5zIHVzZWZ1bCBpbmZvIGFib3V0IHRoZSBib2FyZC4KKyAqLworCisjZGVmaW5lCUNPTV9NQVhQQU5FTFMJOAorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZwlwYW5lbDsKKwl1bnNpZ25lZCBsb25nCXR5cGU7CisJdW5zaWduZWQgbG9uZwlod2lkOworCXVuc2lnbmVkIGxvbmcJbnJwb3J0czsKK30gY29tcGFuZWxfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcJYnJkOworCXVuc2lnbmVkIGxvbmcJdHlwZTsKKwl1bnNpZ25lZCBsb25nCWh3aWQ7CisJdW5zaWduZWQgbG9uZwlzdGF0ZTsKKwl1bnNpZ25lZCBsb25nCWlvYWRkcjsKKwl1bnNpZ25lZCBsb25nCWlvYWRkcjI7CisJdW5zaWduZWQgbG9uZwltZW1hZGRyOworCXVuc2lnbmVkIGxvbmcJaXJxOworCXVuc2lnbmVkIGxvbmcJbnJwYW5lbHM7CisJdW5zaWduZWQgbG9uZwlucnBvcnRzOworCWNvbXBhbmVsX3QJcGFuZWxzW0NPTV9NQVhQQU5FTFNdOworfSBjb21icmRfdDsKKworCisvKgorICoJRGVmaW5lIHRoZSBpb2N0bCBvcGVyYXRpb25zIGZvciBzdGF0cyBzdHVmZi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNkZWZpbmUJQ09NX0dFVFBPUlRTVEFUUwlfSU8oJ2MnLDMwKQorI2RlZmluZQlDT01fQ0xSUE9SVFNUQVRTCV9JTygnYycsMzEpCisjZGVmaW5lCUNPTV9HRVRCUkRTVEFUUwkJX0lPKCdjJywzMikKKworCisvKgorICoJRGVmaW5lIHRoZSBzZXQgb2YgaW9jdGxzIHRoYXQgZ2l2ZSB1c2VyIGxldmVsIGFjY2VzcyB0byB0aGUKKyAqCXByaXZhdGUgcG9ydCwgcGFuZWwgYW5kIGJvYXJkIHN0cnVjdHVyZXMuIFRoZSBhcmd1bWVudCByZXF1aXJlZAorICoJd2lsbCBiZSBkcml2ZXIgZGVwZW5kZW50ISAgCisgKi8KKyNkZWZpbmUJQ09NX1JFQURQT1JUCQlfSU8oJ2MnLDQwKQorI2RlZmluZQlDT01fUkVBREJPQVJECQlfSU8oJ2MnLDQxKQorI2RlZmluZQlDT01fUkVBRFBBTkVMCQlfSU8oJ2MnLDQyKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjMzNDdkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiAJY29ubmVjdG9yLmgKKyAqIAorICogMjAwNC0yMDA1IENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaWZuZGVmIF9fQ09OTkVDVE9SX0gKKyNkZWZpbmUgX19DT05ORUNUT1JfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIFByb2Nlc3MgRXZlbnRzIGNvbm5lY3RvciB1bmlxdWUgaWRzIC0tIHVzZWQgZm9yIG1lc3NhZ2Ugcm91dGluZworICovCisjZGVmaW5lIENOX0lEWF9QUk9DCQkJMHgxCisjZGVmaW5lIENOX1ZBTF9QUk9DCQkJMHgxCisjZGVmaW5lIENOX0lEWF9DSUZTCQkJMHgyCisjZGVmaW5lIENOX1ZBTF9DSUZTICAgICAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lIENOX1cxX0lEWAkJCTB4MwkvKiB3MSBjb21tdW5pY2F0aW9uICovCisjZGVmaW5lIENOX1cxX1ZBTAkJCTB4MQorI2RlZmluZSBDTl9JRFhfVjg2RAkJCTB4NAorI2RlZmluZSBDTl9WQUxfVjg2RF9VVkVTQUZCCQkweDEKKyNkZWZpbmUgQ05fSURYX0JCCQkJMHg1CS8qIEJsYWNrQm9hcmQsIGZyb20gdGhlIFRTUCBHUEwgc2FtcGxpbmcgZnJhbWV3b3JrICovCisjZGVmaW5lIENOX0RTVF9JRFgJCQkweDYKKyNkZWZpbmUgQ05fRFNUX1ZBTAkJCTB4MQorI2RlZmluZSBDTl9JRFhfRE0JCQkweDcJLyogRGV2aWNlIE1hcHBlciAqLworI2RlZmluZSBDTl9WQUxfRE1fVVNFUlNQQUNFX0xPRwkJMHgxCisjZGVmaW5lIENOX0lEWF9EUkJECQkJMHg4CisjZGVmaW5lIENOX1ZBTF9EUkJECQkJMHgxCisKKyNkZWZpbmUgQ05fTkVUTElOS19VU0VSUwkJOAorCisvKgorICogTWF4aW11bSBjb25uZWN0b3IncyBtZXNzYWdlIHNpemUuCisgKi8KKyNkZWZpbmUgQ09OTkVDVE9SX01BWF9NU0dfU0laRQkJMTYzODQKKworLyoKKyAqIGlkeCBhbmQgdmFsIGFyZSB1bmlxdWUgaWRlbnRpZmllcnMgd2hpY2ggCisgKiBhcmUgdXNlZCBmb3IgbWVzc2FnZSByb3V0aW5nIGFuZCAKKyAqIG11c3QgYmUgcmVnaXN0ZXJlZCBpbiBjb25uZWN0b3IuaCBmb3IgaW4ta2VybmVsIHVzYWdlLgorICovCisKK3N0cnVjdCBjYl9pZCB7CisJX191MzIgaWR4OworCV9fdTMyIHZhbDsKK307CisKK3N0cnVjdCBjbl9tc2cgeworCXN0cnVjdCBjYl9pZCBpZDsKKworCV9fdTMyIHNlcTsKKwlfX3UzMiBhY2s7CisKKwlfX3UxNiBsZW47CQkvKiBMZW5ndGggb2YgdGhlIGZvbGxvd2luZyBkYXRhICovCisJX191MTYgZmxhZ3M7CisJX191OCBkYXRhWzBdOworfTsKKworI2VuZGlmCQkJCS8qIF9fQ09OTkVDVE9SX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9jb25zdC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2NvbnN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIyYzcwNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9jb25zdC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qIGNvbnN0Lmg6IE1hY3JvcyBmb3IgZGVhbGluZyB3aXRoIGNvbnN0YW50cy4gICovCisKKyNpZm5kZWYgX0xJTlVYX0NPTlNUX0gKKyNkZWZpbmUgX0xJTlVYX0NPTlNUX0gKKworLyogU29tZSBjb25zdGFudCBtYWNyb3MgYXJlIHVzZWQgaW4gYm90aCBhc3NlbWJsZXIgYW5kCisgKiBDIGNvZGUuICBUaGVyZWZvcmUgd2UgY2Fubm90IGFubm90YXRlIHRoZW0gYWx3YXlzIHdpdGgKKyAqICdVTCcgYW5kIG90aGVyIHR5cGUgc3BlY2lmaWVycyB1bmlsYXRlcmFsbHkuICBXZQorICogdXNlIHRoZSBmb2xsb3dpbmcgbWFjcm9zIHRvIGRlYWwgd2l0aCB0aGlzLgorICoKKyAqIFNpbWlsYXJseSwgX0FUKCkgd2lsbCBjYXN0IGFuIGV4cHJlc3Npb24gd2l0aCBhIHR5cGUgaW4gQywgYnV0CisgKiBsZWF2ZSBpdCB1bmNoYW5nZWQgaW4gYXNtLgorICovCisKKyNpZmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgX0FDKFgsWSkJWAorI2RlZmluZSBfQVQoVCxYKQlYCisjZWxzZQorI2RlZmluZSBfX0FDKFgsWSkJKFgjI1kpCisjZGVmaW5lIF9BQyhYLFkpCV9fQUMoWCxZKQorI2RlZmluZSBfQVQoVCxYKQkoKFQpKFgpKQorI2VuZGlmCisKKyNlbmRpZiAvKiAhKF9MSU5VWF9DT05TVF9IKSAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2NyYW1mc19mcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2NyYW1mc19mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYzJiZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvY3JhbWZzX2ZzLmgKQEAgLTAsMCArMSw5MiBAQAorI2lmbmRlZiBfX0NSQU1GU19ICisjZGVmaW5lIF9fQ1JBTUZTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KKworI2RlZmluZSBDUkFNRlNfU0lHTkFUVVJFCSJDb21wcmVzc2VkIFJPTUZTIgorCisvKgorICogV2lkdGggb2YgdmFyaW91cyBiaXRmaWVsZHMgaW4gc3RydWN0IGNyYW1mc19pbm9kZS4KKyAqIFByaW1hcmlseSB1c2VkIHRvIGdlbmVyYXRlIHdhcm5pbmdzIGluIG1rY3JhbWZzLgorICovCisjZGVmaW5lIENSQU1GU19NT0RFX1dJRFRIIDE2CisjZGVmaW5lIENSQU1GU19VSURfV0lEVEggMTYKKyNkZWZpbmUgQ1JBTUZTX1NJWkVfV0lEVEggMjQKKyNkZWZpbmUgQ1JBTUZTX0dJRF9XSURUSCA4CisjZGVmaW5lIENSQU1GU19OQU1FTEVOX1dJRFRIIDYKKyNkZWZpbmUgQ1JBTUZTX09GRlNFVF9XSURUSCAyNgorCisvKgorICogU2luY2UgaW5vZGUubmFtZWxlbiBpcyBhIHVuc2lnbmVkIDYtYml0IG51bWJlciwgdGhlIG1heGltdW0gY3JhbWZzCisgKiBwYXRoIGxlbmd0aCBpcyA2MyA8PCAyID0gMjUyLgorICovCisjZGVmaW5lIENSQU1GU19NQVhQQVRITEVOICgoKDEgPDwgQ1JBTUZTX05BTUVMRU5fV0lEVEgpIC0gMSkgPDwgMikKKworLyoKKyAqIFJlYXNvbmFibHkgdGVyc2UgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlub2RlIGRhdGEuCisgKi8KK3N0cnVjdCBjcmFtZnNfaW5vZGUgeworCV9fdTMyIG1vZGU6Q1JBTUZTX01PREVfV0lEVEgsIHVpZDpDUkFNRlNfVUlEX1dJRFRIOworCS8qIFNJWkUgZm9yIGRldmljZSBmaWxlcyBpcyBpX3JkZXYgKi8KKwlfX3UzMiBzaXplOkNSQU1GU19TSVpFX1dJRFRILCBnaWQ6Q1JBTUZTX0dJRF9XSURUSDsKKwkvKiBOQU1FTEVOIGlzIHRoZSBsZW5ndGggb2YgdGhlIGZpbGUgbmFtZSwgZGl2aWRlZCBieSA0IGFuZAorICAgICAgICAgICByb3VuZGVkIHVwLiAgKGNyYW1mcyBkb2Vzbid0IHN1cHBvcnQgaGFyZCBsaW5rcy4pICovCisJLyogT0ZGU0VUOiBGb3Igc3ltbGlua3MgYW5kIG5vbi1lbXB0eSByZWd1bGFyIGZpbGVzLCB0aGlzCisJICAgY29udGFpbnMgdGhlIG9mZnNldCAoZGl2aWRlZCBieSA0KSBvZiB0aGUgZmlsZSBkYXRhIGluCisJICAgY29tcHJlc3NlZCBmb3JtIChzdGFydGluZyB3aXRoIGFuIGFycmF5IG9mIGJsb2NrIHBvaW50ZXJzOworCSAgIHNlZSBSRUFETUUpLiAgRm9yIG5vbi1lbXB0eSBkaXJlY3RvcmllcyBpdCBpcyB0aGUgb2Zmc2V0CisJICAgKGRpdmlkZWQgYnkgNCkgb2YgdGhlIGlub2RlIG9mIHRoZSBmaXJzdCBmaWxlIGluIHRoYXQKKwkgICBkaXJlY3RvcnkuICBGb3IgYW55dGhpbmcgZWxzZSwgb2Zmc2V0IGlzIHplcm8uICovCisJX191MzIgbmFtZWxlbjpDUkFNRlNfTkFNRUxFTl9XSURUSCwgb2Zmc2V0OkNSQU1GU19PRkZTRVRfV0lEVEg7Cit9OworCitzdHJ1Y3QgY3JhbWZzX2luZm8geworCV9fdTMyIGNyYzsKKwlfX3UzMiBlZGl0aW9uOworCV9fdTMyIGJsb2NrczsKKwlfX3UzMiBmaWxlczsKK307CisKKy8qCisgKiBTdXBlcmJsb2NrIGluZm9ybWF0aW9uIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIEZTLgorICovCitzdHJ1Y3QgY3JhbWZzX3N1cGVyIHsKKwlfX3UzMiBtYWdpYzsJCQkvKiAweDI4Y2QzZDQ1IC0gcmFuZG9tIG51bWJlciAqLworCV9fdTMyIHNpemU7CQkJLyogbGVuZ3RoIGluIGJ5dGVzICovCisJX191MzIgZmxhZ3M7CQkJLyogZmVhdHVyZSBmbGFncyAqLworCV9fdTMyIGZ1dHVyZTsJCQkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworCV9fdTggc2lnbmF0dXJlWzE2XTsJCS8qICJDb21wcmVzc2VkIFJPTUZTIiAqLworCXN0cnVjdCBjcmFtZnNfaW5mbyBmc2lkOwkvKiB1bmlxdWUgZmlsZXN5c3RlbSBpbmZvICovCisJX191OCBuYW1lWzE2XTsJCQkvKiB1c2VyLWRlZmluZWQgbmFtZSAqLworCXN0cnVjdCBjcmFtZnNfaW5vZGUgcm9vdDsJLyogcm9vdCBpbm9kZSBkYXRhICovCit9OworCisvKgorICogRmVhdHVyZSBmbGFncworICoKKyAqIDB4MDAwMDAwMDAgLSAweDAwMDAwMGZmOiBmZWF0dXJlcyB0aGF0IHdvcmsgZm9yIGFsbCBwYXN0IGtlcm5lbHMKKyAqIDB4MDAwMDAxMDAgLSAweGZmZmZmZmZmOiBmZWF0dXJlcyB0aGF0IGRvbid0IHdvcmsgZm9yIHBhc3Qga2VybmVscworICovCisjZGVmaW5lIENSQU1GU19GTEFHX0ZTSURfVkVSU0lPTl8yCTB4MDAwMDAwMDEJLyogZnNpZCB2ZXJzaW9uICMyICovCisjZGVmaW5lIENSQU1GU19GTEFHX1NPUlRFRF9ESVJTCQkweDAwMDAwMDAyCS8qIHNvcnRlZCBkaXJzICovCisjZGVmaW5lIENSQU1GU19GTEFHX0hPTEVTCQkweDAwMDAwMTAwCS8qIHN1cHBvcnQgZm9yIGhvbGVzICovCisjZGVmaW5lIENSQU1GU19GTEFHX1dST05HX1NJR05BVFVSRQkweDAwMDAwMjAwCS8qIHJlc2VydmVkICovCisjZGVmaW5lIENSQU1GU19GTEFHX1NISUZURURfUk9PVF9PRkZTRVQJMHgwMDAwMDQwMAkvKiBzaGlmdGVkIHJvb3QgZnMgKi8KKworLyoKKyAqIFZhbGlkIHZhbHVlcyBpbiBzdXBlci5mbGFncy4gIEN1cnJlbnRseSB3ZSByZWZ1c2UgdG8gbW91bnQKKyAqIGlmIChmbGFncyAmIH5DUkFNRlNfU1VQUE9SVEVEX0ZMQUdTKS4gIE1heWJlIHRoYXQgc2hvdWxkIGJlCisgKiBjaGFuZ2VkIHRvIHRlc3Qgc3VwZXIuZnV0dXJlIGluc3RlYWQuCisgKi8KKyNkZWZpbmUgQ1JBTUZTX1NVUFBPUlRFRF9GTEFHUwkoIDB4MDAwMDAwZmYgXAorCQkJCXwgQ1JBTUZTX0ZMQUdfSE9MRVMgXAorCQkJCXwgQ1JBTUZTX0ZMQUdfV1JPTkdfU0lHTkFUVVJFIFwKKwkJCQl8IENSQU1GU19GTEFHX1NISUZURURfUk9PVF9PRkZTRVQgKQorCisvKiBVbmNvbXByZXNzaW9uIGludGVyZmFjZXMgdG8gdGhlIHVuZGVybHlpbmcgemxpYiAqLworaW50IGNyYW1mc191bmNvbXByZXNzX2Jsb2NrKHZvaWQgKmRzdCwgaW50IGRzdGxlbiwgdm9pZCAqc3JjLCBpbnQgc3JjbGVuKTsKK2ludCBjcmFtZnNfdW5jb21wcmVzc19pbml0KHZvaWQpOwordm9pZCBjcmFtZnNfdW5jb21wcmVzc19leGl0KHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9jdWRhLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvY3VkYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YzhiZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvY3VkYS5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgdGFsa2luZyB0byB0aGUgQ1VEQS4gIFRoZSBDVURBIGlzIGEgbWljcm9jb250cm9sbGVyCisgKiB3aGljaCBjb250cm9scyB0aGUgQURCLCBzeXN0ZW0gcG93ZXIsIFJUQywgYW5kIHZhcmlvdXMgb3RoZXIgdGhpbmdzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiBQYXVsIE1hY2tlcnJhcy4KKyAqLworCisvKiBDVURBIGNvbW1hbmRzICgybmQgYnl0ZSkgKi8KKyNkZWZpbmUgQ1VEQV9XQVJNX1NUQVJUCQkwCisjZGVmaW5lIENVREFfQVVUT1BPTEwJCTEKKyNkZWZpbmUgQ1VEQV9HRVRfNjgwNV9BRERSCTIKKyNkZWZpbmUgQ1VEQV9HRVRfVElNRQkJMworI2RlZmluZSBDVURBX0dFVF9QUkFNCQk3CisjZGVmaW5lIENVREFfU0VUXzY4MDVfQUREUgk4CisjZGVmaW5lIENVREFfU0VUX1RJTUUJCTkKKyNkZWZpbmUgQ1VEQV9QT1dFUkRPV04JCTB4YQorI2RlZmluZSBDVURBX1BPV0VSVVBfVElNRQkweGIKKyNkZWZpbmUgQ1VEQV9TRVRfUFJBTQkJMHhjCisjZGVmaW5lIENVREFfTVNfUkVTRVQJCTB4ZAorI2RlZmluZSBDVURBX1NFTkRfREZBQwkJMHhlCisjZGVmaW5lIENVREFfUkVTRVRfU1lTVEVNCTB4MTEKKyNkZWZpbmUgQ1VEQV9TRVRfSVBMCQkweDEyCisjZGVmaW5lIENVREFfU0VUX0FVVE9fUkFURQkweDE0CisjZGVmaW5lIENVREFfR0VUX0FVVE9fUkFURQkweDE2CisjZGVmaW5lIENVREFfU0VUX0RFVklDRV9MSVNUCTB4MTkKKyNkZWZpbmUgQ1VEQV9HRVRfREVWSUNFX0xJU1QJMHgxYQorI2RlZmluZSBDVURBX0dFVF9TRVRfSUlDCTB4MjIKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2N5Y2xhZGVzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvY3ljbGFkZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDVlM2M4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2N5Y2xhZGVzLmgKQEAgLTAsMCArMSw0OTMgQEAKKy8qICRSZXZpc2lvbjogMy4wICQkRGF0ZTogMTk5OC8xMS8wMiAxNDoyMDo1OSAkCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L2N5Y2xhZGVzLmgKKyAqCisgKiBUaGlzIGZpbGUgd2FzIGluaXRpYWxseSB3cml0dGVuIGJ5CisgKiBSYW5kb2xwaCBCZW50c29uIDxiZW50c29uQGdyaWVnLnNlYXNsdWcub3JnPiBhbmQgaXMgbWFpbnRhaW5lZCBieQorICogSXZhbiBQYXNzb3MgPGl2YW5AY3ljbGFkZXMuY29tPi4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGdlbmVyYWwgZGVmaW5pdGlvbnMgZm9yIHRoZSBjeWNsYWRlcy5jIGRyaXZlcgorICokTG9nOiBjeWNsYWRlcy5oLHYgJAorICpSZXZpc2lvbiAzLjEgIDIwMDIvMDEvMjkgMTE6MzY6MTYgIGhlbnJpcXVlCisgKmFkZGVkIHRocm90dGxlIGZpZWxkIG9uIHN0cnVjdCBjeWNsYWRlc19wb3J0IHRvIGluZGljYXRlIHdoZXRoZXIgdGhlCisgKnBvcnQgaXMgdGhyb3R0bGVkIG9yIG5vdAorICoKKyAqUmV2aXNpb24gMy4xICAyMDAwLzA0LzE5IDE4OjUyOjUyICBpdmFuCisgKmNvbnZlcnRlZCBhZGRyZXNzIGZpZWxkcyB0byB1bnNpZ25lZCBsb25nIGFuZCBhZGRlZCBmaWVsZHMgZm9yIHBoeXNpY2FsCisgKmFkZHJlc3NlcyBvbiBjeWNsYWRlc19jYXJkIHN0cnVjdHVyZTsKKyAqCisgKlJldmlzaW9uIDMuMCAgMTk5OC8xMS8wMiAxNDoyMDo1OSAgaXZhbgorICphZGRlZCBucG9ydHMgZmllbGQgb24gY3ljbGFkZXNfY2FyZCBzdHJ1Y3R1cmU7CisgKgorICpSZXZpc2lvbiAyLjUgIDE5OTgvMDgvMDMgMTY6NTc6MDEgIGl2YW4KKyAqYWRkZWQgY3ljbGFkZXNfaWRsZV9zdGF0cyBzdHJ1Y3R1cmU7CisgKiAKKyAqUmV2aXNpb24gMi40ICAxOTk4LzA2LzAxIDEyOjA5OjUzICBpdmFuCisgKnJlbW92ZWQgY2xvc2luZ193YWl0MiBmcm9tIGN5Y2xhZGVzX3BvcnQgc3RydWN0dXJlOworICoKKyAqUmV2aXNpb24gMi4zICAxOTk4LzAzLzE2IDE4OjAxOjEyICBpdmFuCisgKmNoYW5nZXMgaW4gdGhlIGN5Y2xhZGVzX3BvcnQgc3RydWN0dXJlIHRvIGdldCBpdCBjbG9zZXIgdG8gdGhlIAorICpzdGFuZGFyZCBzZXJpYWwgcG9ydCBzdHJ1Y3R1cmU7CisgKmFkZGVkIGNvbnN0YW50cyBmb3IgbmV3IGlvY3RsczsKKyAqCisgKlJldmlzaW9uIDIuMiAgMTk5OC8wMi8xNyAxNjo1MDowMCAgaXZhbgorICpjaGFuZ2VzIGluIHRoZSBjeWNsYWRlc19wb3J0IHN0cnVjdHVyZSAoYWRkaXRpb24gb2Ygc2h1dGRvd25fd2FpdCBhbmQgCisgKmNoaXBfcmV2IHZhcmlhYmxlcyk7CisgKmFkZGVkIGNvbnN0YW50cyBmb3IgbmV3IGlvY3RscyBhbmQgZm9yIENEMTQwMCByZXYuIG51bWJlcnMuCisgKgorICpSZXZpc2lvbiAyLjEJMTk5Ny8xMC8yNCAxNjowMzowMCAgaXZhbgorICphZGRlZCByZmxvdyAod2hpY2ggYWxsb3dzIGVuYWJsaW5nIHRoZSBDRDE0MDAgc3BlY2lhbCBmbG93IGNvbnRyb2wgCisgKmZlYXR1cmUpIGFuZCBydHNkdHJfaW52ICh3aGljaCBhbGxvd3MgRFRSL1JUUyBwaW4gaW52ZXJzaW9uKSB0byAKKyAqY3ljbGFkZXNfcG9ydCBzdHJ1Y3R1cmU7CisgKmFkZGVkIEFscGhhIHN1cHBvcnQKKyAqCisgKlJldmlzaW9uIDIuMCAgMTk5Ny8wNi8zMCAxMDozMDowMCAgaXZhbgorICphZGRlZCBzb21lIG5ldyBkb29yYmVsbCBjb21tYW5kIGNvbnN0YW50cyByZWxhdGVkIHRvIElPQ1RMVyBhbmQKKyAqVUFSVCBlcnJvciBzaWduYWxpbmcKKyAqCisgKlJldmlzaW9uIDEuOCAgMTk5Ny8wNi8wMyAxNTozMDowMCAgaXZhbgorICphZGRlZCBjb25zdGFudCBaRklSTV9ITFQKKyAqYWRkZWQgY29uc3RhbnQgQ3lQQ0lfWmVfd2luICggPSAyICogQ3lfUENJX1p3aW4pCisgKgorICpSZXZpc2lvbiAxLjcgIDE5OTcvMDMvMjYgMTA6MzA6MDAgIGRhbmllbAorICpuZXcgZW50cmllcyBhdCB0aGUgZW5kIG9mIGN5Y2xhZGVzX3BvcnQgc3RydWN0IHRvIHJlYWxsb2NhdGUKKyAqdmFyaWFibGVzIGlsbGVnYWxseSBhbGxvY2F0ZWQgd2l0aGluIGNhcmQgbWVtb3J5LgorICoKKyAqUmV2aXNpb24gMS42ICAxOTk2LzA5LzA5IDE4OjM1OjMwICBiZW50c29uCisgKmZvbGQgaW4gY2hhbmdlcyBmb3IgQ3ljbG9tLVogLS0gaW5jbHVkaW5nIHN0cnVjdHVyZXMgZm9yCisgKmNvbW11bmljYXRpbmcgd2l0aCBib2FyZCBhcyB3ZWxsIG1vZGVzdCBjaGFuZ2VzIHRvIG9yaWdpbmFsCisgKnN0cnVjdHVyZXMgdG8gc3VwcG9ydCBuZXcgZmVhdHVyZXMuCisgKgorICpSZXZpc2lvbiAxLjUgIDE5OTUvMTEvMTMgMjE6MTM6MzEgIGJlbnRzb24KKyAqY2hhbmdlcyBzdWdnZXN0ZWQgYnkgTWljaGFlbCBDaGFzdGFpbiA8bWVjQGR1cmFjZWYuc2hvdXQubmV0PgorICp0byBzdXBwb3J0IHVzZSBvZiB0aGlzIGZpbGUgaW4gbm9uLWtlcm5lbCBhcHBsaWNhdGlvbnMKKyAqCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX0NZQ0xBREVTX0gKKyNkZWZpbmUgX0xJTlVYX0NZQ0xBREVTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBjeWNsYWRlc19tb25pdG9yIHsKKyAgICAgICAgdW5zaWduZWQgbG9uZyAgICAgICAgICAgaW50X2NvdW50OworICAgICAgICB1bnNpZ25lZCBsb25nICAgICAgICAgICBjaGFyX2NvdW50OworICAgICAgICB1bnNpZ25lZCBsb25nICAgICAgICAgICBjaGFyX21heDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyAgICAgICAgICAgY2hhcl9sYXN0OworfTsKKworLyoKKyAqIFRoZXNlIHN0YXRzIGFsbCByZWZsZWN0IGFjdGl2aXR5IHNpbmNlIHRoZSBkZXZpY2Ugd2FzIGxhc3QgaW5pdGlhbGl6ZWQuCisgKiAoaS5lLiwgc2luY2UgdGhlIHBvcnQgd2FzIG9wZW5lZCB3aXRoIG5vIG90aGVyIHByb2Nlc3NlcyBhbHJlYWR5IGhhdmluZyBpdAorICogb3BlbikKKyAqLworc3RydWN0IGN5Y2xhZGVzX2lkbGVfc3RhdHMgeworICAgIF9fa2VybmVsX3RpbWVfdCBpbl91c2U7CS8qIFRpbWUgZGV2aWNlIGhhcyBiZWVuIGluIHVzZSAoc2VjcykgKi8KKyAgICBfX2tlcm5lbF90aW1lX3QgcmVjdl9pZGxlOwkvKiBUaW1lIHNpbmNlIGxhc3QgY2hhciByZWNlaXZlZCAoc2VjcykgKi8KKyAgICBfX2tlcm5lbF90aW1lX3QgeG1pdF9pZGxlOwkvKiBUaW1lIHNpbmNlIGxhc3QgY2hhciB0cmFuc21pdHRlZCAoc2VjcykgKi8KKyAgICB1bnNpZ25lZCBsb25nICByZWN2X2J5dGVzOwkvKiBCeXRlcyByZWNlaXZlZCAqLworICAgIHVuc2lnbmVkIGxvbmcgIHhtaXRfYnl0ZXM7CS8qIEJ5dGVzIHRyYW5zbWl0dGVkICovCisgICAgdW5zaWduZWQgbG9uZyAgb3ZlcnJ1bnM7CS8qIElucHV0IG92ZXJydW5zICovCisgICAgdW5zaWduZWQgbG9uZyAgZnJhbWVfZXJyczsJLyogSW5wdXQgZnJhbWluZyBlcnJvcnMgKi8KKyAgICB1bnNpZ25lZCBsb25nICBwYXJpdHlfZXJyczsJLyogSW5wdXQgcGFyaXR5IGVycm9ycyAqLworfTsKKworI2RlZmluZSBDWUNMQURFU19NQUdJQyAgMHg0MzU5CisKKyNkZWZpbmUgQ1lHRVRNT04gICAgICAgICAgICAgICAgMHg0MzU5MDEKKyNkZWZpbmUgQ1lHRVRUSFJFU0ggICAgICAgICAgICAgMHg0MzU5MDIKKyNkZWZpbmUgQ1lTRVRUSFJFU0ggICAgICAgICAgICAgMHg0MzU5MDMKKyNkZWZpbmUgQ1lHRVRERUZUSFJFU0ggICAgICAgICAgMHg0MzU5MDQKKyNkZWZpbmUgQ1lTRVRERUZUSFJFU0ggICAgICAgICAgMHg0MzU5MDUKKyNkZWZpbmUgQ1lHRVRUSU1FT1VUICAgICAgICAgICAgMHg0MzU5MDYKKyNkZWZpbmUgQ1lTRVRUSU1FT1VUICAgICAgICAgICAgMHg0MzU5MDcKKyNkZWZpbmUgQ1lHRVRERUZUSU1FT1VUICAgICAgICAgMHg0MzU5MDgKKyNkZWZpbmUgQ1lTRVRERUZUSU1FT1VUICAgICAgICAgMHg0MzU5MDkKKyNkZWZpbmUgQ1lTRVRSRkxPVwkJMHg0MzU5MGEKKyNkZWZpbmUgQ1lHRVRSRkxPVwkJMHg0MzU5MGIKKyNkZWZpbmUgQ1lTRVRSVFNEVFJfSU5WCQkweDQzNTkwYworI2RlZmluZSBDWUdFVFJUU0RUUl9JTlYJCTB4NDM1OTBkCisjZGVmaW5lIENZWlNFVFBPTExDWUNMRQkJMHg0MzU5MGUKKyNkZWZpbmUgQ1laR0VUUE9MTENZQ0xFCQkweDQzNTkwZgorI2RlZmluZSBDWUdFVENEMTQwMFZFUgkJMHg0MzU5MTAKKyNkZWZpbmUJQ1lTRVRXQUlUCQkweDQzNTkxMgorI2RlZmluZQlDWUdFVFdBSVQJCTB4NDM1OTEzCisKKy8qKioqKioqKioqKioqKiogQ1lDTE9NLVogQURESVRJT05TICoqKioqKioqKioqKioqKi8KKworI2RlZmluZSBDWklPQyAgICAgICAgICAgKCdNJyA8PCA4KQorI2RlZmluZSBDWl9OQk9BUkRTICAgICAgKENaSU9DfDB4ZmEpCisjZGVmaW5lIENaX0JPT1RfU1RBUlQgICAoQ1pJT0N8MHhmYikKKyNkZWZpbmUgQ1pfQk9PVF9EQVRBICAgIChDWklPQ3wweGZjKQorI2RlZmluZSBDWl9CT09UX0VORCAgICAgKENaSU9DfDB4ZmQpCisjZGVmaW5lIENaX1RFU1QgICAgICAgICAoQ1pJT0N8MHhmZSkKKworI2RlZmluZSBDWl9ERUZfUE9MTAkoSFovMjUpCisKKyNkZWZpbmUgTUFYX0JPQVJEICAgICAgIDQgICAgICAgLyogTWF4IG51bWJlciBvZiBib2FyZHMgKi8KKyNkZWZpbmUgTUFYX0RFViAgICAgICAgIDI1NiAgICAgLyogTWF4IG51bWJlciBvZiBwb3J0cyB0b3RhbCAqLworI2RlZmluZQlDWVpfTUFYX1NQRUVECTkyMTYwMAorCisjZGVmaW5lCUNZWl9GSUZPX1NJWkUJMTYKKworI2RlZmluZSBDWVpfQk9PVF9OV09SRFMgMHgxMDAKK3N0cnVjdCBDWVpfQk9PVF9DVFJMIHsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIG5ib2FyZDsKKyAgICAgICAgaW50ICAgICAgICAgICAgIHN0YXR1c1tNQVhfQk9BUkRdOworICAgICAgICBpbnQgICAgICAgICAgICAgbmNoYW5uZWxbTUFYX0JPQVJEXTsKKyAgICAgICAgaW50ICAgICAgICAgICAgIGZ3X3JldltNQVhfQk9BUkRdOworICAgICAgICB1bnNpZ25lZCBsb25nICAgb2Zmc2V0OworICAgICAgICB1bnNpZ25lZCBsb25nICAgZGF0YVtDWVpfQk9PVF9OV09SRFNdOworfTsKKworCisjaWZuZGVmIERQX1dJTkRPV19TSVpFCisvKgorICoJTWVtb3J5IFdpbmRvdyBTaXplcworICovCisKKyNkZWZpbmUJRFBfV0lORE9XX1NJWkUJCSgweDAwMDgwMDAwKQkvKiB3aW5kb3cgc2l6ZSA1MTIgS2IgKi8KKyNkZWZpbmUJWkVfRFBfV0lORE9XX1NJWkUJKDB4MDAxMDAwMDApCS8qIHdpbmRvdyBzaXplIDEgTWIgKFplIGFuZAorCQkJCQkJICA4Wm8gVi4yICovCisjZGVmaW5lCUNUUkxfV0lORE9XX1NJWkUJKDB4MDAwMDAwODApCS8qIHJ1bnRpbWUgcmVncyAxMjggYnl0ZXMgKi8KKworLyoKKyAqCUNVU1RPTV9SRUcgLSBDeWNsb20tWi9QQ0kgQ3VzdG9tIFJlZ2lzdGVycyBTZXQuIFRoZSBkcml2ZXIKKyAqCW5vcm1hbGx5IHdpbGwgYWNjZXNzIG9ubHkgaW50ZXJlc3RlZCBvbiB0aGUgZnBnYV9pZCwgZnBnYV92ZXJzaW9uLAorICoJc3RhcnRfY3B1IGFuZCBzdG9wX2NwdS4KKyAqLworCitzdHJ1Y3QJQ1VTVE9NX1JFRyB7CisJX191MzIJZnBnYV9pZDsJCS8qIEZQR0EgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgKi8KKwlfX3UzMglmcGdhX3ZlcnNpb247CQkvKiBGUEdBIFZlcnNpb24gTnVtYmVyIFJlZ2lzdGVyICovCisJX191MzIJY3B1X3N0YXJ0OwkJLyogQ1BVIHN0YXJ0IFJlZ2lzdGVyICh3cml0ZSkgKi8KKwlfX3UzMgljcHVfc3RvcDsJCS8qIENQVSBzdG9wIFJlZ2lzdGVyICh3cml0ZSkgKi8KKwlfX3UzMgltaXNjX3JlZzsJCS8qIE1pc2NlbGxhbmVvdXMgUmVnaXN0ZXIgKi8KKwlfX3UzMglpZHRfbW9kZTsJCS8qIElEVCBtb2RlIFJlZ2lzdGVyICovCisJX191MzIJdWFydF9pcnFfc3RhdHVzOwkvKiBVQVJUIElSUSBzdGF0dXMgUmVnaXN0ZXIgKi8KKwlfX3UzMgljbGVhcl90aW1lcjBfaXJxOwkvKiBDbGVhciB0aW1lciBpbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KKwlfX3UzMgljbGVhcl90aW1lcjFfaXJxOwkvKiBDbGVhciB0aW1lciBpbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KKwlfX3UzMgljbGVhcl90aW1lcjJfaXJxOwkvKiBDbGVhciB0aW1lciBpbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KKwlfX3UzMgl0ZXN0X3JlZ2lzdGVyOwkJLyogVGVzdCBSZWdpc3RlciAqLworCV9fdTMyCXRlc3RfY291bnQ7CQkvKiBUZXN0IENvdW50IFJlZ2lzdGVyICovCisJX191MzIJdGltZXJfc2VsZWN0OwkJLyogVGltZXIgc2VsZWN0IHJlZ2lzdGVyICovCisJX191MzIJcHJfdWFydF9pcnFfc3RhdHVzOwkvKiBQcmlvcml0aXplZCBVQVJUIElSUSBzdGF0IFJlZyAqLworCV9fdTMyCXJhbV93YWl0X3N0YXRlOwkJLyogUkFNIHdhaXQtc3RhdGUgUmVnaXN0ZXIgKi8KKwlfX3UzMgl1YXJ0X3dhaXRfc3RhdGU7CS8qIFVBUlQgd2FpdC1zdGF0ZSBSZWdpc3RlciAqLworCV9fdTMyCXRpbWVyX3dhaXRfc3RhdGU7CS8qIHRpbWVyIHdhaXQtc3RhdGUgUmVnaXN0ZXIgKi8KKwlfX3UzMglhY2tfd2FpdF9zdGF0ZTsJCS8qIEFDSyB3YWl0IFN0YXRlIFJlZ2lzdGVyICovCit9OworCisvKgorICoJUlVOVElNRV85MDYwIC0gUExYIFBDSTkwNjBFUyBsb2NhbCBjb25maWd1cmF0aW9uIGFuZCBzaGFyZWQgcnVudGltZQorICoJcmVnaXN0ZXJzLiBUaGlzIHN0cnVjdHVyZSBjYW4gYmUgdXNlZCB0byBhY2Nlc3MgdGhlIDkwNjAgcmVnaXN0ZXJzCisgKgkobWVtb3J5IG1hcHBlZCkuCisgKi8KKworc3RydWN0IFJVTlRJTUVfOTA2MCB7CisJX191MzIJbG9jX2FkZHJfcmFuZ2U7CS8qIDAwaCAtIExvY2FsIEFkZHJlc3MgUmFuZ2UgKi8KKwlfX3UzMglsb2NfYWRkcl9iYXNlOwkvKiAwNGggLSBMb2NhbCBBZGRyZXNzIEJhc2UgKi8KKwlfX3UzMglsb2NfYXJiaXRyOwkvKiAwOGggLSBMb2NhbCBBcmJpdHJhdGlvbiAqLworCV9fdTMyCWVuZGlhbl9kZXNjcjsJLyogMENoIC0gQmlnL0xpdHRsZSBFbmRpYW4gRGVzY3JpcHRvciAqLworCV9fdTMyCWxvY19yb21fcmFuZ2U7CS8qIDEwaCAtIExvY2FsIFJPTSBSYW5nZSAqLworCV9fdTMyCWxvY19yb21fYmFzZTsJLyogMTRoIC0gTG9jYWwgUk9NIEJhc2UgKi8KKwlfX3UzMglsb2NfYnVzX2Rlc2NyOwkvKiAxOGggLSBMb2NhbCBCdXMgZGVzY3JpcHRvciAqLworCV9fdTMyCWxvY19yYW5nZV9tc3Q7CS8qIDFDaCAtIExvY2FsIFJhbmdlIGZvciBNYXN0ZXIgdG8gUENJICovCisJX191MzIJbG9jX2Jhc2VfbXN0OwkvKiAyMGggLSBMb2NhbCBCYXNlIGZvciBNYXN0ZXIgUENJICovCisJX191MzIJbG9jX3JhbmdlX2lvOwkvKiAyNGggLSBMb2NhbCBSYW5nZSBmb3IgTWFzdGVyIElPICovCisJX191MzIJcGNpX2Jhc2VfbXN0OwkvKiAyOGggLSBQQ0kgQmFzZSBmb3IgTWFzdGVyIFBDSSAqLworCV9fdTMyCXBjaV9jb25mX2lvOwkvKiAyQ2ggLSBQQ0kgY29uZmlndXJhdGlvbiBmb3IgTWFzdGVyIElPICovCisJX191MzIJZmlsbGVyMTsJLyogMzBoICovCisJX191MzIJZmlsbGVyMjsJLyogMzRoICovCisJX191MzIJZmlsbGVyMzsJLyogMzhoICovCisJX191MzIJZmlsbGVyNDsJLyogM0NoICovCisJX191MzIJbWFpbF9ib3hfMDsJLyogNDBoIC0gTWFpbCBCb3ggMCAqLworCV9fdTMyCW1haWxfYm94XzE7CS8qIDQ0aCAtIE1haWwgQm94IDEgKi8KKwlfX3UzMgltYWlsX2JveF8yOwkvKiA0OGggLSBNYWlsIEJveCAyICovCisJX191MzIJbWFpbF9ib3hfMzsJLyogNENoIC0gTWFpbCBCb3ggMyAqLworCV9fdTMyCWZpbGxlcjU7CS8qIDUwaCAqLworCV9fdTMyCWZpbGxlcjY7CS8qIDU0aCAqLworCV9fdTMyCWZpbGxlcjc7CS8qIDU4aCAqLworCV9fdTMyCWZpbGxlcjg7CS8qIDVDaCAqLworCV9fdTMyCXBjaV9kb29yYmVsbDsJLyogNjBoIC0gUENJIHRvIExvY2FsIERvb3JiZWxsICovCisJX191MzIJbG9jX2Rvb3JiZWxsOwkvKiA2NGggLSBMb2NhbCB0byBQQ0kgRG9vcmJlbGwgKi8KKwlfX3UzMglpbnRyX2N0cmxfc3RhdDsJLyogNjhoIC0gSW50ZXJydXB0IENvbnRyb2wvU3RhdHVzICovCisJX191MzIJaW5pdF9jdHJsOwkvKiA2Q2ggLSBFRVBST00gY29udHJvbCwgSW5pdCBDb250cm9sLCBldGMgKi8KK307CisKKy8qIFZhbHVlcyBmb3IgdGhlIExvY2FsIEJhc2UgQWRkcmVzcyByZS1tYXAgcmVnaXN0ZXIgKi8KKworI2RlZmluZQlXSU5fUkFNCQkweDAwMDAwMDAxTAkvKiBzZXQgdGhlIHNsaWRpbmcgd2luZG93IHRvIFJBTSAqLworI2RlZmluZQlXSU5fQ1JFRwkweDE0MDAwMDAxTAkvKiBzZXQgdGhlIHdpbmRvdyB0byBjdXN0b20gUmVnaXN0ZXJzICovCisKKy8qIFZhbHVlcyB0aW1lciBzZWxlY3QgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUJVElNRVJfQllfMU0JMHgwMAkJLyogY2xvY2sgZGl2aWRlZCBieSAxTSAqLworI2RlZmluZQlUSU1FUl9CWV8yNTZLCTB4MDEJCS8qIGNsb2NrIGRpdmlkZWQgYnkgMjU2ayAqLworI2RlZmluZQlUSU1FUl9CWV8xMjhLCTB4MDIJCS8qIGNsb2NrIGRpdmlkZWQgYnkgMTI4ayAqLworI2RlZmluZQlUSU1FUl9CWV8zMksJMHgwMwkJLyogY2xvY2sgZGl2aWRlZCBieSAzMmsgKi8KKworLyoqKioqKioqKioqKioqKioqKiAqKioqKioqKioqKioqKioqKiogKioqKioqKioqKioqKioqKioqKi8KKyNlbmRpZgorCisjaWZuZGVmIFpGSVJNX0lECisvKiAjaW5jbHVkZSAiemZ3aW50LmgiICovCisvKioqKioqKioqKioqKioqKioqICoqKioqKioqKioqKioqKioqKiAqKioqKioqKioqKioqKioqKioqLworLyoKKyAqCVRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIGludGVyZmFjaW5nIHdpdGggdGhlCisgKglDeWNsb20tWiBaRklSTSBGaXJtd2FyZS4KKyAqLworCisvKiBHZW5lcmFsIENvbnN0YW50IGRlZmluaXRpb25zICovCisKKyNkZWZpbmUJTUFYX0NIQU4JNjQJCS8qIG1heCBudW1iZXIgb2YgY2hhbm5lbHMgcGVyIGJvYXJkICovCisKKy8qIGZpcm13YXJlIGlkIHN0cnVjdHVyZSAoc2V0IGFmdGVyIGJvb3QpICovCisKKyNkZWZpbmUgSURfQUREUkVTUwkweDAwMDAwMTgwTAkvKiBzaWduYXR1cmUvcG9pbnRlciBhZGRyZXNzICovCisjZGVmaW5lCVpGSVJNX0lECTB4NTU1NzQ2NUFMCS8qIFpGSVJNL1Ugc2lnbmF0dXJlICovCisjZGVmaW5lCVpGSVJNX0hMVAkweDU5NTA1QjVDTAkvKiBaRklSTSBuZWVkcyBleHRlcm5hbCBwb3dlciBzdXBwbHkgKi8KKyNkZWZpbmUJWkZJUk1fUlNUCTB4NTYwNDA2NzRMCS8qIFJTVCBzaWduYWwgKGR1ZSB0byBGVyByZXNldCkgKi8KKworI2RlZmluZQlaRl9USU5BQ1RfREVGCTEwMDAJCS8qIGRlZmF1bHQgaW5hY3Rpdml0eSB0aW1lb3V0IAorCQkJCQkgICAoMTAwMCBtcykgKi8KKyNkZWZpbmUJWkZfVElOQUNUCVpGX1RJTkFDVF9ERUYKKworc3RydWN0CUZJUk1fSUQgeworCV9fdTMyCXNpZ25hdHVyZTsJCS8qIFpGSVJNL1Ugc2lnbmF0dXJlICovCisJX191MzIJemZ3Y3RybF9hZGRyOwkJLyogcG9pbnRlciB0byBaRldfQ1RSTCBzdHJ1Y3R1cmUgKi8KK307CisKKy8qIE9wLiBTeXN0ZW0gaWQgKi8KKworI2RlZmluZQlDX09TX0xJTlVYCTB4MDAwMDAwMzAJLyogZ2VuZXJpYyBMaW51eCBzeXN0ZW0gKi8KKworLyogY2hhbm5lbCBvcF9tb2RlICovCisKKyNkZWZpbmUJQ19DSF9ESVNBQkxFCTB4MDAwMDAwMDAJLyogY2hhbm5lbCBpcyBkaXNhYmxlZCAqLworI2RlZmluZQlDX0NIX1RYRU5BQkxFCTB4MDAwMDAwMDEJLyogY2hhbm5lbCBUeCBlbmFibGVkICovCisjZGVmaW5lCUNfQ0hfUlhFTkFCTEUJMHgwMDAwMDAwMgkvKiBjaGFubmVsIFJ4IGVuYWJsZWQgKi8KKyNkZWZpbmUJQ19DSF9FTkFCTEUJMHgwMDAwMDAwMwkvKiBjaGFubmVsIFR4L1J4IGVuYWJsZWQgKi8KKyNkZWZpbmUJQ19DSF9MT09QQkFDSwkweDAwMDAwMDA0CS8qIExvb3BiYWNrIG1vZGUgKi8KKworLyogY29tbV9wYXJpdHkgLSBwYXJpdHkgKi8KKworI2RlZmluZQlDX1BSX05PTkUJMHgwMDAwMDAwMAkvKiBOb25lICovCisjZGVmaW5lCUNfUFJfT0RECTB4MDAwMDAwMDEJLyogT2RkICovCisjZGVmaW5lIENfUFJfRVZFTgkweDAwMDAwMDAyCS8qIEV2ZW4gKi8KKyNkZWZpbmUgQ19QUl9NQVJLCTB4MDAwMDAwMDQJLyogTWFyayAqLworI2RlZmluZSBDX1BSX1NQQUNFCTB4MDAwMDAwMDgJLyogU3BhY2UgKi8KKyNkZWZpbmUgQ19QUl9QQVJJVFkJMHgwMDAwMDBmZgorCisjZGVmaW5lCUNfUFJfRElTQ0FSRAkweDAwMDAwMTAwCS8qIGRpc2NhcmQgY2hhciB3aXRoIGZyYW1lL3BhciBlcnJvciAqLworI2RlZmluZSBDX1BSX0lHTk9SRQkweDAwMDAwMjAwCS8qIGlnbm9yZSBmcmFtZS9wYXIgZXJyb3IgKi8KKworLyogY29tbV9kYXRhX2wgLSBkYXRhIGxlbmd0aCBhbmQgc3RvcCBiaXRzICovCisKKyNkZWZpbmUgQ19ETF9DUzUJMHgwMDAwMDAwMQorI2RlZmluZSBDX0RMX0NTNgkweDAwMDAwMDAyCisjZGVmaW5lIENfRExfQ1M3CTB4MDAwMDAwMDQKKyNkZWZpbmUgQ19ETF9DUzgJMHgwMDAwMDAwOAorI2RlZmluZQlDX0RMX0NTCQkweDAwMDAwMDBmCisjZGVmaW5lIENfRExfMVNUT1AJMHgwMDAwMDAxMAorI2RlZmluZSBDX0RMXzE1U1RPUAkweDAwMDAwMDIwCisjZGVmaW5lIENfRExfMlNUT1AJMHgwMDAwMDA0MAorI2RlZmluZQlDX0RMX1NUT1AJMHgwMDAwMDBmMAorCisvKiBpbnRlcnJ1cHQgZW5hYmxpbmcvc3RhdHVzICovCisKKyNkZWZpbmUJQ19JTl9ESVNBQkxFCTB4MDAwMDAwMDAJLyogemVybywgZGlzYWJsZSBpbnRlcnJ1cHRzICovCisjZGVmaW5lCUNfSU5fVFhCRU1QVFkJMHgwMDAwMDAwMQkvKiB0eCBidWZmZXIgZW1wdHkgKi8KKyNkZWZpbmUJQ19JTl9UWExPV1dNCTB4MDAwMDAwMDIJLyogdHggYnVmZmVyIGJlbG93IExXTSAqLworI2RlZmluZQlDX0lOX1JYSElXTQkweDAwMDAwMDEwCS8qIHJ4IGJ1ZmZlciBhYm92ZSBIV00gKi8KKyNkZWZpbmUJQ19JTl9SWE5ORFQJMHgwMDAwMDAyMAkvKiByeCBubyBuZXcgZGF0YSB0aW1lb3V0ICovCisjZGVmaW5lCUNfSU5fTURDRAkweDAwMDAwMTAwCS8qIG1vZGVtIERDRCBjaGFuZ2UgKi8KKyNkZWZpbmUJQ19JTl9NRFNSCTB4MDAwMDAyMDAJLyogbW9kZW0gRFNSIGNoYW5nZSAqLworI2RlZmluZQlDX0lOX01SSQkweDAwMDAwNDAwCS8qIG1vZGVtIFJJIGNoYW5nZSAqLworI2RlZmluZQlDX0lOX01DVFMJMHgwMDAwMDgwMAkvKiBtb2RlbSBDVFMgY2hhbmdlICovCisjZGVmaW5lCUNfSU5fUlhCUksJMHgwMDAwMTAwMAkvKiBCcmVhayByZWNlaXZlZCAqLworI2RlZmluZQlDX0lOX1BSX0VSUk9SCTB4MDAwMDIwMDAJLyogcGFyaXR5IGVycm9yICovCisjZGVmaW5lCUNfSU5fRlJfRVJST1IJMHgwMDAwNDAwMAkvKiBmcmFtZSBlcnJvciAqLworI2RlZmluZSBDX0lOX09WUl9FUlJPUiAgMHgwMDAwODAwMCAgICAgIC8qIG92ZXJydW4gZXJyb3IgKi8KKyNkZWZpbmUgQ19JTl9SWE9GTAkweDAwMDEwMDAwICAgICAgLyogUlggYnVmZmVyIG92ZXJmbG93ICovCisjZGVmaW5lIENfSU5fSU9DVExXCTB4MDAwMjAwMDAgICAgICAvKiBJL08gY29udHJvbCB3LyB3YWl0ICovCisjZGVmaW5lIENfSU5fTVJUUwkweDAwMDQwMDAwCS8qIG1vZGVtIFJUUyBkcm9wICovCisjZGVmaW5lIENfSU5fSUNIQVIJMHgwMDA4MDAwMAorIAorLyogZmxvdyBjb250cm9sICovCisKKyNkZWZpbmUJQ19GTF9PWFgJMHgwMDAwMDAwMQkvKiBvdXRwdXQgWG9uL1hvZmYgZmxvdyBjb250cm9sICovCisjZGVmaW5lCUNfRkxfSVhYCTB4MDAwMDAwMDIJLyogb3V0cHV0IFhvbi9Yb2ZmIGZsb3cgY29udHJvbCAqLworI2RlZmluZSBDX0ZMX09JWEFOWQkweDAwMDAwMDA0CS8qIG91dHB1dCBYb24vWG9mZiAoYW55IHhvbikgKi8KKyNkZWZpbmUJQ19GTF9TV0ZMT1cJMHgwMDAwMDAwZgorCisvKiBmbG93IHN0YXR1cyAqLworCisjZGVmaW5lCUNfRlNfVFhJRExFCTB4MDAwMDAwMDAJLyogbm8gVHggZGF0YSBpbiB0aGUgYnVmZmVyIG9yIFVBUlQgKi8KKyNkZWZpbmUJQ19GU19TRU5ESU5HCTB4MDAwMDAwMDEJLyogVUFSVCBpcyBzZW5kaW5nIGRhdGEgKi8KKyNkZWZpbmUJQ19GU19TV0ZMT1cJMHgwMDAwMDAwMgkvKiBUeCBpcyBzdG9wcGVkIGJ5IHJlY2VpdmVkIFhvZmYgKi8KKworLyogcnNfY29udHJvbC9yc19zdGF0dXMgUlMtMjMyIHNpZ25hbHMgKi8KKworI2RlZmluZSBDX1JTX1BBUkFNCTB4ODAwMDAwMDAJLyogSW5kaWNhdGVzIHByZXNlbmNlIG9mIHBhcmFtZXRlciBpbiAKKwkJCQkJICAgSU9DVExNIGNvbW1hbmQgKi8KKyNkZWZpbmUJQ19SU19SVFMJMHgwMDAwMDAwMQkvKiBSVFMgKi8KKyNkZWZpbmUJQ19SU19EVFIJMHgwMDAwMDAwNAkvKiBEVFIgKi8KKyNkZWZpbmUJQ19SU19EQ0QJMHgwMDAwMDEwMAkvKiBDRCAqLworI2RlZmluZQlDX1JTX0RTUgkweDAwMDAwMjAwCS8qIERTUiAqLworI2RlZmluZQlDX1JTX1JJCQkweDAwMDAwNDAwCS8qIFJJICovCisjZGVmaW5lCUNfUlNfQ1RTCTB4MDAwMDA4MDAJLyogQ1RTICovCisKKy8qIGNvbW1hbmRzIEhvc3QgPC0+IEJvYXJkICovCisKKyNkZWZpbmUJQ19DTV9SRVNFVAkweDAxCQkvKiByZXNldC9mbHVzaCBidWZmZXJzICovCisjZGVmaW5lCUNfQ01fSU9DVEwJMHgwMgkJLyogcmUtcmVhZCBDSF9DVFJMICovCisjZGVmaW5lCUNfQ01fSU9DVExXCTB4MDMJCS8qIHJlLXJlYWQgQ0hfQ1RSTCwgaW50ciB3aGVuIGRvbmUgKi8KKyNkZWZpbmUJQ19DTV9JT0NUTE0JMHgwNAkJLyogUlMtMjMyIG91dHB1dHMgY2hhbmdlICovCisjZGVmaW5lCUNfQ01fU0VORFhPRkYJMHgxMAkJLyogc2VuZCBYb2ZmICovCisjZGVmaW5lCUNfQ01fU0VORFhPTgkweDExCQkvKiBzZW5kIFhvbiAqLworI2RlZmluZSBDX0NNX0NMRkxPVwkweDEyCQkvKiBDbGVhciBmbG93IGNvbnRyb2wgKHJlc3VtZSkgKi8KKyNkZWZpbmUJQ19DTV9TRU5EQlJLCTB4NDEJCS8qIHNlbmQgYnJlYWsgKi8KKyNkZWZpbmUJQ19DTV9JTlRCQUNLCTB4NDIJCS8qIEludGVycnVwdCBiYWNrICovCisjZGVmaW5lCUNfQ01fU0VUX0JSRUFLCTB4NDMJCS8qIFR4IGJyZWFrIG9uICovCisjZGVmaW5lCUNfQ01fQ0xSX0JSRUFLCTB4NDQJCS8qIFR4IGJyZWFrIG9mZiAqLworI2RlZmluZQlDX0NNX0NNRF9ET05FCTB4NDUJCS8qIFByZXZpb3VzIGNvbW1hbmQgZG9uZSAqLworI2RlZmluZSBDX0NNX0lOVEJBQ0syCTB4NDYJCS8qIEFsdGVybmF0ZSBJbnRlcnJ1cHQgYmFjayAqLworI2RlZmluZQlDX0NNX1RJTkFDVAkweDUxCQkvKiBzZXQgaW5hY3Rpdml0eSBkZXRlY3Rpb24gKi8KKyNkZWZpbmUJQ19DTV9JUlFfRU5CTAkweDUyCQkvKiBlbmFibGUgZ2VuZXJhdGlvbiBvZiBpbnRlcnJ1cHRzICovCisjZGVmaW5lCUNfQ01fSVJRX0RTQkwJMHg1MwkJLyogZGlzYWJsZSBnZW5lcmF0aW9uIG9mIGludGVycnVwdHMgKi8KKyNkZWZpbmUJQ19DTV9BQ0tfRU5CTAkweDU0CQkvKiBlbmFibGUgYWNrbm93bGVkZ2VkIGludGVycnVwdCBtb2RlICovCisjZGVmaW5lCUNfQ01fQUNLX0RTQkwJMHg1NQkJLyogZGlzYWJsZSBhY2tub3dsZWRnZWQgaW50ciBtb2RlICovCisjZGVmaW5lCUNfQ01fRkxVU0hfUlgJMHg1NgkJLyogZmx1c2hlcyBSeCBidWZmZXIgKi8KKyNkZWZpbmUJQ19DTV9GTFVTSF9UWAkweDU3CQkvKiBmbHVzaGVzIFR4IGJ1ZmZlciAqLworI2RlZmluZSBDX0NNX1FfRU5BQkxFCTB4NTgJCS8qIGVuYWJsZXMgcXVldWUgYWNjZXNzIGZyb20gdGhlIAorCQkJCQkgICBkcml2ZXIgKi8KKyNkZWZpbmUgQ19DTV9RX0RJU0FCTEUgIDB4NTkgICAgICAgICAgICAvKiBkaXNhYmxlcyBxdWV1ZSBhY2Nlc3MgZnJvbSB0aGUgCisJCQkJCSAgIGRyaXZlciAqLworCisjZGVmaW5lCUNfQ01fVFhCRU1QVFkJMHg2MAkJLyogVHggYnVmZmVyIGlzIGVtcHR5ICovCisjZGVmaW5lCUNfQ01fVFhMT1dXTQkweDYxCQkvKiBUeCBidWZmZXIgbG93IHdhdGVyIG1hcmsgKi8KKyNkZWZpbmUJQ19DTV9SWEhJV00JMHg2MgkJLyogUnggYnVmZmVyIGhpZ2ggd2F0ZXIgbWFyayAqLworI2RlZmluZQlDX0NNX1JYTk5EVAkweDYzCQkvKiByeCBubyBuZXcgZGF0YSB0aW1lb3V0ICovCisjZGVmaW5lCUNfQ01fVFhGRU1QVFkJMHg2NAorI2RlZmluZQlDX0NNX0lDSEFSCTB4NjUKKyNkZWZpbmUJQ19DTV9NRENECTB4NzAJCS8qIG1vZGVtIERDRCBjaGFuZ2UgKi8KKyNkZWZpbmUJQ19DTV9NRFNSCTB4NzEJCS8qIG1vZGVtIERTUiBjaGFuZ2UgKi8KKyNkZWZpbmUJQ19DTV9NUkkJMHg3MgkJLyogbW9kZW0gUkkgY2hhbmdlICovCisjZGVmaW5lCUNfQ01fTUNUUwkweDczCQkvKiBtb2RlbSBDVFMgY2hhbmdlICovCisjZGVmaW5lIENfQ01fTVJUUwkweDc0CQkvKiBtb2RlbSBSVFMgZHJvcCAqLworI2RlZmluZQlDX0NNX1JYQlJLCTB4ODQJCS8qIEJyZWFrIHJlY2VpdmVkICovCisjZGVmaW5lCUNfQ01fUFJfRVJST1IJMHg4NQkJLyogUGFyaXR5IGVycm9yICovCisjZGVmaW5lCUNfQ01fRlJfRVJST1IJMHg4NgkJLyogRnJhbWUgZXJyb3IgKi8KKyNkZWZpbmUgQ19DTV9PVlJfRVJST1IgIDB4ODcgICAgICAgICAgICAvKiBPdmVycnVuIGVycm9yICovCisjZGVmaW5lIENfQ01fUlhPRkwJMHg4OCAgICAgICAgICAgIC8qIFJYIGJ1ZmZlciBvdmVyZmxvdyAqLworI2RlZmluZQlDX0NNX0NNREVSUk9SCTB4OTAJCS8qIGNvbW1hbmQgZXJyb3IgKi8KKyNkZWZpbmUJQ19DTV9GQVRBTAkweDkxCQkvKiBmYXRhbCBlcnJvciAqLworI2RlZmluZQlDX0NNX0hXX1JFU0VUCTB4OTIJCS8qIHJlc2V0IGJvYXJkICovCisKKy8qCisgKglDSF9DVFJMIC0gVGhpcyBwZXIgcG9ydCBzdHJ1Y3R1cmUgY29udGFpbnMgYWxsIHBhcmFtZXRlcnMKKyAqCXRoYXQgY29udHJvbCBhbiBzcGVjaWZpYyBwb3J0LiBJdCBjYW4gYmUgc2VlbiBhcyB0aGUKKyAqCWNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIG9mIGEgInN1cGVyLXNlcmlhbC1jb250cm9sbGVyIi4KKyAqLworCitzdHJ1Y3QgQ0hfQ1RSTCB7CisJX191MzIJb3BfbW9kZTsJLyogb3BlcmF0aW9uIG1vZGUgKi8KKwlfX3UzMglpbnRyX2VuYWJsZTsJLyogaW50ZXJydXB0IG1hc2tpbmcgKi8KKwlfX3UzMglzd19mbG93OwkvKiBTVyBmbG93IGNvbnRyb2wgKi8KKwlfX3UzMglmbG93X3N0YXR1czsJLyogb3V0cHV0IGZsb3cgc3RhdHVzICovCisJX191MzIJY29tbV9iYXVkOwkvKiBiYXVkIHJhdGUgIC0gbnVtZXJpY2FsbHkgc3BlY2lmaWVkICovCisJX191MzIJY29tbV9wYXJpdHk7CS8qIHBhcml0eSAqLworCV9fdTMyCWNvbW1fZGF0YV9sOwkvKiBkYXRhIGxlbmd0aC9zdG9wICovCisJX191MzIJY29tbV9mbGFnczsJLyogb3RoZXIgZmxhZ3MgKi8KKwlfX3UzMglod19mbG93OwkvKiBIVyBmbG93IGNvbnRyb2wgKi8KKwlfX3UzMglyc19jb250cm9sOwkvKiBSUy0yMzIgb3V0cHV0cyAqLworCV9fdTMyCXJzX3N0YXR1czsJLyogUlMtMjMyIGlucHV0cyAqLworCV9fdTMyCWZsb3dfeG9uOwkvKiB4b24gY2hhciAqLworCV9fdTMyCWZsb3dfeG9mZjsJLyogeG9mZiBjaGFyICovCisJX191MzIJaHdfb3ZlcmZsb3c7CS8qIGh3IG92ZXJmbG93IGNvdW50ZXIgKi8KKwlfX3UzMglzd19vdmVyZmxvdzsJLyogc3cgb3ZlcmZsb3cgY291bnRlciAqLworCV9fdTMyCWNvbW1fZXJyb3I7CS8qIGZyYW1lL3Bhcml0eSBlcnJvciBjb3VudGVyICovCisJX191MzIgaWNoYXI7CisJX191MzIgZmlsbGVyWzddOworfTsKKworCisvKgorICoJQlVGX0NUUkwgLSBUaGlzIHBlciBjaGFubmVsIHN0cnVjdHVyZSBjb250YWlucworICoJYWxsIFR4IGFuZCBSeCBidWZmZXIgY29udHJvbCBmb3IgYSBnaXZlbiBjaGFubmVsLgorICovCisKK3N0cnVjdAlCVUZfQ1RSTAl7CisJX191MzIJZmxhZ19kbWE7CS8qIGJ1ZmZlcnMgYXJlIGluIEhvc3QgbWVtb3J5ICovCisJX191MzIJdHhfYnVmYWRkcjsJLyogYWRkcmVzcyBvZiB0aGUgdHggYnVmZmVyICovCisJX191MzIJdHhfYnVmc2l6ZTsJLyogdHggYnVmZmVyIHNpemUgKi8KKwlfX3UzMgl0eF90aHJlc2hvbGQ7CS8qIHR4IGxvdyB3YXRlciBtYXJrICovCisJX191MzIJdHhfZ2V0OwkJLyogdGFpbCBpbmRleCB0eCBidWYgKi8KKwlfX3UzMgl0eF9wdXQ7CQkvKiBoZWFkIGluZGV4IHR4IGJ1ZiAqLworCV9fdTMyCXJ4X2J1ZmFkZHI7CS8qIGFkZHJlc3Mgb2YgdGhlIHJ4IGJ1ZmZlciAqLworCV9fdTMyCXJ4X2J1ZnNpemU7CS8qIHJ4IGJ1ZmZlciBzaXplICovCisJX191MzIJcnhfdGhyZXNob2xkOwkvKiByeCBoaWdoIHdhdGVyIG1hcmsgKi8KKwlfX3UzMglyeF9nZXQ7CQkvKiB0YWlsIGluZGV4IHJ4IGJ1ZiAqLworCV9fdTMyCXJ4X3B1dDsJCS8qIGhlYWQgaW5kZXggcnggYnVmICovCisJX191MzIJZmlsbGVyWzVdOwkvKiBmaWxsZXIgdG8gYWxpZ24gc3RydWN0dXJlcyAqLworfTsKKworLyoKKyAqCUJPQVJEX0NUUkwgLSBUaGlzIHBlciBib2FyZCBzdHJ1Y3R1cmUgY29udGFpbnMgYWxsIGdsb2JhbCAKKyAqCWNvbnRyb2wgZmllbGRzIHJlbGF0ZWQgdG8gdGhlIGJvYXJkLgorICovCisKK3N0cnVjdCBCT0FSRF9DVFJMIHsKKworCS8qIHN0YXRpYyBpbmZvIHByb3ZpZGVkIGJ5IHRoZSBvbi1ib2FyZCBDUFUgKi8KKwlfX3UzMgluX2NoYW5uZWw7CS8qIG51bWJlciBvZiBjaGFubmVscyAqLworCV9fdTMyCWZ3X3ZlcnNpb247CS8qIGZpcm13YXJlIHZlcnNpb24gKi8KKworCS8qIHN0YXRpYyBpbmZvIHByb3ZpZGVkIGJ5IHRoZSBkcml2ZXIgKi8KKwlfX3UzMglvcF9zeXN0ZW07CS8qIG9wX3N5c3RlbSBpZCAqLworCV9fdTMyCWRyX3ZlcnNpb247CS8qIGRyaXZlciB2ZXJzaW9uICovCisKKwkvKiBib2FyZCBjb250cm9sIGFyZWEgKi8KKwlfX3UzMglpbmFjdGl2aXR5OwkvKiBpbmFjdGl2aXR5IGNvbnRyb2wgKi8KKworCS8qIGhvc3QgdG8gRlcgY29tbWFuZHMgKi8KKwlfX3UzMgloY21kX2NoYW5uZWw7CS8qIGNoYW5uZWwgbnVtYmVyICovCisJX191MzIJaGNtZF9wYXJhbTsJLyogcG9pbnRlciB0byBwYXJhbWV0ZXJzICovCisKKwkvKiBGVyB0byBIb3N0IGNvbW1hbmRzICovCisJX191MzIJZndjbWRfY2hhbm5lbDsJLyogY2hhbm5lbCBudW1iZXIgKi8KKwlfX3UzMglmd2NtZF9wYXJhbTsJLyogcG9pbnRlciB0byBwYXJhbWV0ZXJzICovCisJX191MzIJemZfaW50X3F1ZXVlX2FkZHI7IC8qIG9mZnNldCBmb3IgSU5UX1FVRVVFIHN0cnVjdHVyZSAqLworCisJLyogZmlsbGVyIHNvIHRoZSBzdHJ1Y3R1cmVzIGFyZSBhbGlnbmVkICovCisJX191MzIJZmlsbGVyWzZdOworfTsKKworLyogSG9zdCBJbnRlcnJ1cHQgUXVldWUgKi8KKworI2RlZmluZSBRVUVVRV9TSVpFCSgxMCpNQVhfQ0hBTikKKworc3RydWN0CUlOVF9RVUVVRSB7CisJdW5zaWduZWQgY2hhcglpbnRyX2NvZGVbUVVFVUVfU0laRV07CisJdW5zaWduZWQgbG9uZwljaGFubmVsW1FVRVVFX1NJWkVdOworCXVuc2lnbmVkIGxvbmcJcGFyYW1bUVVFVUVfU0laRV07CisJdW5zaWduZWQgbG9uZwlwdXQ7CisJdW5zaWduZWQgbG9uZwlnZXQ7Cit9OworCisvKgorICoJWkZXX0NUUkwgLSBUaGlzIGlzIHRoZSBkYXRhIHN0cnVjdHVyZSB0aGF0IGluY2x1ZGVzIGFsbCBvdGhlcgorICoJZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgYnkgdGhlIEZpcm13YXJlLgorICovCisgCitzdHJ1Y3QgWkZXX0NUUkwgeworCXN0cnVjdCBCT0FSRF9DVFJMCWJvYXJkX2N0cmw7CisJc3RydWN0IENIX0NUUkwJCWNoX2N0cmxbTUFYX0NIQU5dOworCXN0cnVjdCBCVUZfQ1RSTAkJYnVmX2N0cmxbTUFYX0NIQU5dOworfTsKKworLyoqKioqKioqKioqKioqKioqKiAqKioqKioqKioqKioqKioqKiogKioqKioqKioqKioqKioqKioqKi8KKyNlbmRpZgorCisjZW5kaWYgLyogX0xJTlVYX0NZQ0xBREVTX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9jeWN4X2NmbS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2N5Y3hfY2ZtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMyZDI2ZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9jeWN4X2NmbS5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorKiBjeWN4X2NmbS5oCUN5Y2xvbSAyWCBXQU4gTGluayBEcml2ZXIuCisqCQlEZWZpbml0aW9ucyBmb3IgdGhlIEN5Y2xvbSAyWCBGaXJtd2FyZSBNb2R1bGUgKENGTSkuCisqCisqIEF1dGhvcjoJQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+CisqCisqIENvcHlyaWdodDoJKGMpIDE5OTgtMjAwMyBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8KKyoKKyogQmFzZWQgb24gc2RsYXNmbS5oIGJ5IEdlbmUgS296aW4gPDc0NjA0LjE1MkBjb21wdXNlcnZlLmNvbT4KKyoKKyoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyogMTk5OC8wOC8wOAlhY21lCQlJbml0aWFsIHZlcnNpb24uCisqLworI2lmbmRlZglfQ1lDWF9DRk1fSAorI2RlZmluZQlfQ1lDWF9DRk1fSAorCisvKiBEZWZpbmVzICovCisKKyNkZWZpbmUJQ0ZNX1ZFUlNJT04JMgorI2RlZmluZQlDRk1fU0lHTkFUVVJFCSJDRk0gLSBDeWNsYWRlcyBDWUNYIEZpcm13YXJlIE1vZHVsZSIKKworLyogbWluL21heCAqLworI2RlZmluZQlDRk1fSU1BR0VfU0laRQkweDIwMDAwCS8qIG1heCBzaXplIG9mIENZQ1ggY29kZSBpbWFnZSBmaWxlICovCisjZGVmaW5lCUNGTV9ERVNDUl9MRU4JMjU2CS8qIG1heCBsZW5ndGggb2YgZGVzY3JpcHRpb24gc3RyaW5nICovCisjZGVmaW5lCUNGTV9NQVhfQ1lDWAkxCS8qIG1heCBudW1iZXIgb2YgY29tcGF0aWJsZSBhZGFwdGVycyAqLworI2RlZmluZQlDRk1fTE9BRF9CVUZTWgkweDQwMAkvKiBidWZmZXIgc2l6ZSBmb3IgcmVzZXQgY29kZSAoYnVmZmVyX2xvYWQpICovCisKKy8qIEZpcm13YXJlIENvbW1hbmRzICovCisjZGVmaW5lIEdFTl9QT1dFUl9PTgkweDEyODAKKworI2RlZmluZSBHRU5fU0VUX1NFRwkweDE0MDEJLyogYm9vdCBzZWdtZW50IHNldHRpbmcuICovCisjZGVmaW5lIEdFTl9CT09UX0RBVAkweDE0MDIJLyogYm9vdCBkYXRhLiAqLworI2RlZmluZSBHRU5fU1RBUlQJMHgxNDAzCS8qIGJvYXJkIHN0YXJ0LiAqLworI2RlZmluZSBHRU5fREVGUEFSCTB4MTQwNAkvKiBidWZmZXIgbGVuZ3RoIGZvciBib290LiAqLworCisvKiBBZGFwdGVyIFR5cGVzICovCisjZGVmaW5lIENZQ1hfMlgJCTIKKy8qIGZvciBub3cgb25seSB0aGUgMlggaXMgc3VwcG9ydGVkLCBubyBwbGFucyB0byBzdXBwb3J0IDhYIG9yIDE2WCAqLworI2RlZmluZSBDWUNYXzhYCQk4CisjZGVmaW5lIENZQ1hfMTZYCTE2CisKKyNkZWZpbmUJQ0ZJRF9YMjVfMlgJNTIwMAorCisvKioKKyAqCXN0cnVjdCBjeWN4X2Z3X2luZm8gLSBmaXJtd2FyZSBtb2R1bGUgaW5mb3JtYXRpb24uCisgKglAY29kZWlkIC0gZmlybXdhcmUgSUQKKyAqCUB2ZXJzaW9uIC0gZmlybXdhcmUgdmVyc2lvbiBudW1iZXIKKyAqCUBhZGFwdGVyIC0gY29tcGF0aWJsZSBhZGFwdGVyIHR5cGVzCisgKglAbWVtc2l6ZSAtIG1pbmltdW0gbWVtb3J5IHNpemUKKyAqCUByZXNlcnZlZCAtIHJlc2VydmVkCisgKglAc3RhcnRvZmZzIC0gZW50cnkgcG9pbnQgb2Zmc2V0CisgKglAd2lub2ZmcyAtIGR1YWwtcG9ydCBtZW1vcnkgd2luZG93IG9mZnNldAorICoJQGNvZGVvZmZzIC0gY29kZSBsb2FkIG9mZnNldAorICoJQGNvZGVzaXplIC0gY29kZSBzaXplCisgKglAZGF0YW9mZnMgLSBjb25maWd1cmF0aW9uIGRhdGEgbG9hZCBvZmZzZXQKKyAqCUBkYXRhc2l6ZSAtIGNvbmZpZ3VyYXRpb24gZGF0YSBzaXplCisgKi8KK3N0cnVjdCBjeWN4X2Z3X2luZm8geworCXVuc2lnbmVkIHNob3J0CWNvZGVpZDsKKwl1bnNpZ25lZCBzaG9ydAl2ZXJzaW9uOworCXVuc2lnbmVkIHNob3J0CWFkYXB0ZXJbQ0ZNX01BWF9DWUNYXTsKKwl1bnNpZ25lZCBsb25nCW1lbXNpemU7CisJdW5zaWduZWQgc2hvcnQJcmVzZXJ2ZWRbMl07CisJdW5zaWduZWQgc2hvcnQJc3RhcnRvZmZzOworCXVuc2lnbmVkIHNob3J0CXdpbm9mZnM7CisJdW5zaWduZWQgc2hvcnQJY29kZW9mZnM7CisJdW5zaWduZWQgbG9uZwljb2Rlc2l6ZTsKKwl1bnNpZ25lZCBzaG9ydAlkYXRhb2ZmczsKKwl1bnNpZ25lZCBsb25nCWRhdGFzaXplOworfTsKKworLyoqCisgKglzdHJ1Y3QgY3ljeF9maXJtd2FyZSAtIENZQ1ggZmlybXdhcmUgZmlsZSBzdHJ1Y3R1cmUKKyAqCUBzaWduYXR1cmUgLSBDRk0gZmlsZSBzaWduYXR1cmUKKyAqCUB2ZXJzaW9uIC0gZmlsZSBmb3JtYXQgdmVyc2lvbgorICoJQGNoZWNrc3VtIC0gaW5mbyArIGltYWdlCisgKglAcmVzZXJ2ZWQgLSByZXNlcnZlZAorICoJQGRlc2NyIC0gZGVzY3JpcHRpb24gc3RyaW5nCisgKglAaW5mbyAtIGZpcm13YXJlIG1vZHVsZSBpbmZvCisgKglAaW1hZ2UgLSBjb2RlIGltYWdlICh2YXJpYWJsZSBzaXplKQorICovCitzdHJ1Y3QgY3ljeF9maXJtd2FyZSB7CisJY2hhcgkJICAgIHNpZ25hdHVyZVs4MF07CisJdW5zaWduZWQgc2hvcnQJICAgIHZlcnNpb247CisJdW5zaWduZWQgc2hvcnQJICAgIGNoZWNrc3VtOworCXVuc2lnbmVkIHNob3J0CSAgICByZXNlcnZlZFs2XTsKKwljaGFyCQkgICAgZGVzY3JbQ0ZNX0RFU0NSX0xFTl07CisJc3RydWN0IGN5Y3hfZndfaW5mbyBpbmZvOworCXVuc2lnbmVkIGNoYXIJICAgIGltYWdlWzBdOworfTsKKworc3RydWN0IGN5Y3hfZndfaGVhZGVyIHsKKwl1bnNpZ25lZCBsb25nICByZXNldF9zaXplOworCXVuc2lnbmVkIGxvbmcgIGRhdGFfc2l6ZTsKKwl1bnNpZ25lZCBsb25nICBjb2RlX3NpemU7Cit9OworI2VuZGlmCS8qIF9DWUNYX0NGTV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZGNibmwuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9kY2JubC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MjM0OTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZGNibmwuaApAQCAtMCwwICsxLDM1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUKKyAqIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgorICoKKyAqIEF1dGhvcjogTHVjeSBMaXUgPGx1Y3kubGl1QGludGVsLmNvbT4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfRENCTkxfSF9fCisjZGVmaW5lIF9fTElOVVhfRENCTkxfSF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgZGNibXNnIHsKKwlfX3U4ICAgICAgICAgICAgICAgZGNiX2ZhbWlseTsKKwlfX3U4ICAgICAgICAgICAgICAgY21kOworCV9fdTE2ICAgICAgICAgICAgICBkY2JfcGFkOworfTsKKworLyoqCisgKiBlbnVtIGRjYm5sX2NvbW1hbmRzIC0gc3VwcG9ydGVkIERDQiBjb21tYW5kcworICoKKyAqIEBEQ0JfQ01EX1VOREVGSU5FRDogdW5zcGVjaWZpZWQgY29tbWFuZCB0byBjYXRjaCBlcnJvcnMKKyAqIEBEQ0JfQ01EX0dTVEFURTogcmVxdWVzdCB0aGUgc3RhdGUgb2YgRENCIGluIHRoZSBkZXZpY2UKKyAqIEBEQ0JfQ01EX1NTVEFURTogc2V0IHRoZSBzdGF0ZSBvZiBEQ0IgaW4gdGhlIGRldmljZQorICogQERDQl9DTURfUEdUWF9HQ0ZHOiByZXF1ZXN0IHRoZSBwcmlvcml0eSBncm91cCBjb25maWd1cmF0aW9uIGZvciBUeAorICogQERDQl9DTURfUEdUWF9TQ0ZHOiBzZXQgdGhlIHByaW9yaXR5IGdyb3VwIGNvbmZpZ3VyYXRpb24gZm9yIFR4CisgKiBARENCX0NNRF9QR1JYX0dDRkc6IHJlcXVlc3QgdGhlIHByaW9yaXR5IGdyb3VwIGNvbmZpZ3VyYXRpb24gZm9yIFJ4CisgKiBARENCX0NNRF9QR1JYX1NDRkc6IHNldCB0aGUgcHJpb3JpdHkgZ3JvdXAgY29uZmlndXJhdGlvbiBmb3IgUngKKyAqIEBEQ0JfQ01EX1BGQ19HQ0ZHOiByZXF1ZXN0IHRoZSBwcmlvcml0eSBmbG93IGNvbnRyb2wgY29uZmlndXJhdGlvbgorICogQERDQl9DTURfUEZDX1NDRkc6IHNldCB0aGUgcHJpb3JpdHkgZmxvdyBjb250cm9sIGNvbmZpZ3VyYXRpb24KKyAqIEBEQ0JfQ01EX1NFVF9BTEw6IGFwcGx5IGFsbCBjaGFuZ2VzIHRvIHRoZSB1bmRlcmx5aW5nIGRldmljZQorICogQERDQl9DTURfR1BFUk1fSFdBRERSOiBnZXQgdGhlIHBlcm1hbmVudCBNQUMgYWRkcmVzcyBvZiB0aGUgdW5kZXJseWluZworICogICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UuICBPbmx5IHVzZWZ1bCB3aGVuIHVzaW5nIGJvbmRpbmcuCisgKiBARENCX0NNRF9HQ0FQOiByZXF1ZXN0IHRoZSBEQ0IgY2FwYWJpbGl0aWVzIG9mIHRoZSBkZXZpY2UKKyAqIEBEQ0JfQ01EX0dOVU1UQ1M6IGdldCB0aGUgbnVtYmVyIG9mIHRyYWZmaWMgY2xhc3NlcyBjdXJyZW50bHkgc3VwcG9ydGVkCisgKiBARENCX0NNRF9TTlVNVENTOiBzZXQgdGhlIG51bWJlciBvZiB0cmFmZmljIGNsYXNzZXMKKyAqIEBEQ0JfQ01EX0dCQ046IHNldCBiYWNrd2FyZCBjb25nZXN0aW9uIG5vdGlmaWNhdGlvbiBjb25maWd1cmF0aW9uCisgKiBARENCX0NNRF9TQkNOOiBnZXQgYmFja3dhcmQgY29uZ2VzdGlvbiBub3RpZmljYXRpb24gY29uZmlncmF0aW9uLgorICogQERDQl9DTURfR0FQUDogZ2V0IGFwcGxpY2F0aW9uIHByb3RvY29sIGNvbmZpZ3VyYXRpb24KKyAqIEBEQ0JfQ01EX1NBUFA6IHNldCBhcHBsaWNhdGlvbiBwcm90b2NvbCBjb25maWd1cmF0aW9uCisgKi8KK2VudW0gZGNibmxfY29tbWFuZHMgeworCURDQl9DTURfVU5ERUZJTkVELAorCisJRENCX0NNRF9HU1RBVEUsCisJRENCX0NNRF9TU1RBVEUsCisKKwlEQ0JfQ01EX1BHVFhfR0NGRywKKwlEQ0JfQ01EX1BHVFhfU0NGRywKKwlEQ0JfQ01EX1BHUlhfR0NGRywKKwlEQ0JfQ01EX1BHUlhfU0NGRywKKworCURDQl9DTURfUEZDX0dDRkcsCisJRENCX0NNRF9QRkNfU0NGRywKKworCURDQl9DTURfU0VUX0FMTCwKKworCURDQl9DTURfR1BFUk1fSFdBRERSLAorCisJRENCX0NNRF9HQ0FQLAorCisJRENCX0NNRF9HTlVNVENTLAorCURDQl9DTURfU05VTVRDUywKKworCURDQl9DTURfUEZDX0dTVEFURSwKKwlEQ0JfQ01EX1BGQ19TU1RBVEUsCisKKwlEQ0JfQ01EX0JDTl9HQ0ZHLAorCURDQl9DTURfQkNOX1NDRkcsCisKKwlEQ0JfQ01EX0dBUFAsCisJRENCX0NNRF9TQVBQLAorCisJX19EQ0JfQ01EX0VOVU1fTUFYLAorCURDQl9DTURfTUFYID0gX19EQ0JfQ01EX0VOVU1fTUFYIC0gMSwKK307CisKKy8qKgorICogZW51bSBkY2JubF9hdHRycyAtIERDQiB0b3AtbGV2ZWwgbmV0bGluayBhdHRyaWJ1dGVzCisgKgorICogQERDQl9BVFRSX1VOREVGSU5FRDogdW5zcGVjaWZpZWQgYXR0cmlidXRlIHRvIGNhdGNoIGVycm9ycworICogQERDQl9BVFRSX0lGTkFNRTogaW50ZXJmYWNlIG5hbWUgb2YgdGhlIHVuZGVybHlpbmcgZGV2aWNlIChOTEFfU1RSSU5HKQorICogQERDQl9BVFRSX1NUQVRFOiBlbmFibGUgc3RhdGUgb2YgRENCIGluIHRoZSBkZXZpY2UgKE5MQV9VOCkKKyAqIEBEQ0JfQVRUUl9QRkNfU1RBVEU6IGVuYWJsZSBzdGF0ZSBvZiBQRkMgaW4gdGhlIGRldmljZSAoTkxBX1U4KQorICogQERDQl9BVFRSX1BGQ19DRkc6IHByaW9yaXR5IGZsb3cgY29udHJvbCBjb25maWd1cmF0aW9uIChOTEFfTkVTVEVEKQorICogQERDQl9BVFRSX05VTV9UQzogbnVtYmVyIG9mIHRyYWZmaWMgY2xhc3NlcyBzdXBwb3J0ZWQgaW4gdGhlIGRldmljZSAoTkxBX1U4KQorICogQERDQl9BVFRSX1BHX0NGRzogcHJpb3JpdHkgZ3JvdXAgY29uZmlndXJhdGlvbiAoTkxBX05FU1RFRCkKKyAqIEBEQ0JfQVRUUl9TRVRfQUxMOiBib29sIHRvIGNvbW1pdCBjaGFuZ2VzIHRvIGhhcmR3YXJlIG9yIG5vdCAoTkxBX1U4KQorICogQERDQl9BVFRSX1BFUk1fSFdBRERSOiBNQUMgYWRkcmVzcyBvZiB0aGUgcGh5c2ljYWwgZGV2aWNlIChOTEFfTkVTVEVEKQorICogQERDQl9BVFRSX0NBUDogRENCIGNhcGFiaWxpdGllcyBvZiB0aGUgZGV2aWNlIChOTEFfTkVTVEVEKQorICogQERDQl9BVFRSX05VTVRDUzogbnVtYmVyIG9mIHRyYWZmaWMgY2xhc3NlcyBzdXBwb3J0ZWQgKE5MQV9ORVNURUQpCisgKiBARENCX0FUVFJfQkNOOiBiYWNrd2FyZCBjb25nZXN0aW9uIG5vdGlmaWNhdGlvbiBjb25maWd1cmF0aW9uIChOTEFfTkVTVEVEKQorICovCitlbnVtIGRjYm5sX2F0dHJzIHsKKwlEQ0JfQVRUUl9VTkRFRklORUQsCisKKwlEQ0JfQVRUUl9JRk5BTUUsCisJRENCX0FUVFJfU1RBVEUsCisJRENCX0FUVFJfUEZDX1NUQVRFLAorCURDQl9BVFRSX1BGQ19DRkcsCisJRENCX0FUVFJfTlVNX1RDLAorCURDQl9BVFRSX1BHX0NGRywKKwlEQ0JfQVRUUl9TRVRfQUxMLAorCURDQl9BVFRSX1BFUk1fSFdBRERSLAorCURDQl9BVFRSX0NBUCwKKwlEQ0JfQVRUUl9OVU1UQ1MsCisJRENCX0FUVFJfQkNOLAorCURDQl9BVFRSX0FQUCwKKworCV9fRENCX0FUVFJfRU5VTV9NQVgsCisJRENCX0FUVFJfTUFYID0gX19EQ0JfQVRUUl9FTlVNX01BWCAtIDEsCit9OworCisvKioKKyAqIGVudW0gZGNibmxfcGZjX2F0dHJzIC0gRENCIFByaW9yaXR5IEZsb3cgQ29udHJvbCB1c2VyIHByaW9yaXR5IG5lc3RlZCBhdHRycworICoKKyAqIEBEQ0JfUEZDX1VQX0FUVFJfVU5ERUZJTkVEOiB1bnNwZWNpZmllZCBhdHRyaWJ1dGUgdG8gY2F0Y2ggZXJyb3JzCisgKiBARENCX1BGQ19VUF9BVFRSXzA6IFByaW9yaXR5IEZsb3cgQ29udHJvbCB2YWx1ZSBmb3IgVXNlciBQcmlvcml0eSAwIChOTEFfVTgpCisgKiBARENCX1BGQ19VUF9BVFRSXzE6IFByaW9yaXR5IEZsb3cgQ29udHJvbCB2YWx1ZSBmb3IgVXNlciBQcmlvcml0eSAxIChOTEFfVTgpCisgKiBARENCX1BGQ19VUF9BVFRSXzI6IFByaW9yaXR5IEZsb3cgQ29udHJvbCB2YWx1ZSBmb3IgVXNlciBQcmlvcml0eSAyIChOTEFfVTgpCisgKiBARENCX1BGQ19VUF9BVFRSXzM6IFByaW9yaXR5IEZsb3cgQ29udHJvbCB2YWx1ZSBmb3IgVXNlciBQcmlvcml0eSAzIChOTEFfVTgpCisgKiBARENCX1BGQ19VUF9BVFRSXzQ6IFByaW9yaXR5IEZsb3cgQ29udHJvbCB2YWx1ZSBmb3IgVXNlciBQcmlvcml0eSA0IChOTEFfVTgpCisgKiBARENCX1BGQ19VUF9BVFRSXzU6IFByaW9yaXR5IEZsb3cgQ29udHJvbCB2YWx1ZSBmb3IgVXNlciBQcmlvcml0eSA1IChOTEFfVTgpCisgKiBARENCX1BGQ19VUF9BVFRSXzY6IFByaW9yaXR5IEZsb3cgQ29udHJvbCB2YWx1ZSBmb3IgVXNlciBQcmlvcml0eSA2IChOTEFfVTgpCisgKiBARENCX1BGQ19VUF9BVFRSXzc6IFByaW9yaXR5IEZsb3cgQ29udHJvbCB2YWx1ZSBmb3IgVXNlciBQcmlvcml0eSA3IChOTEFfVTgpCisgKiBARENCX1BGQ19VUF9BVFRSX01BWDogaGlnaGVzdCBhdHRyaWJ1dGUgbnVtYmVyIGN1cnJlbnRseSBkZWZpbmVkCisgKiBARENCX1BGQ19VUF9BVFRSX0FMTDogYXBwbHkgdG8gYWxsIHByaW9yaXR5IGZsb3cgY29udHJvbCBhdHRycyAoTkxBX0ZMQUcpCisgKgorICovCitlbnVtIGRjYm5sX3BmY191cF9hdHRycyB7CisJRENCX1BGQ19VUF9BVFRSX1VOREVGSU5FRCwKKworCURDQl9QRkNfVVBfQVRUUl8wLAorCURDQl9QRkNfVVBfQVRUUl8xLAorCURDQl9QRkNfVVBfQVRUUl8yLAorCURDQl9QRkNfVVBfQVRUUl8zLAorCURDQl9QRkNfVVBfQVRUUl80LAorCURDQl9QRkNfVVBfQVRUUl81LAorCURDQl9QRkNfVVBfQVRUUl82LAorCURDQl9QRkNfVVBfQVRUUl83LAorCURDQl9QRkNfVVBfQVRUUl9BTEwsCisKKwlfX0RDQl9QRkNfVVBfQVRUUl9FTlVNX01BWCwKKwlEQ0JfUEZDX1VQX0FUVFJfTUFYID0gX19EQ0JfUEZDX1VQX0FUVFJfRU5VTV9NQVggLSAxLAorfTsKKworLyoqCisgKiBlbnVtIGRjYm5sX3BnX2F0dHJzIC0gRENCIFByaW9yaXR5IEdyb3VwIGF0dHJpYnV0ZXMKKyAqCisgKiBARENCX1BHX0FUVFJfVU5ERUZJTkVEOiB1bnNwZWNpZmllZCBhdHRyaWJ1dGUgdG8gY2F0Y2ggZXJyb3JzCisgKiBARENCX1BHX0FUVFJfVENfMDogUHJpb3JpdHkgR3JvdXAgVHJhZmZpYyBDbGFzcyAwIGNvbmZpZ3VyYXRpb24gKE5MQV9ORVNURUQpCisgKiBARENCX1BHX0FUVFJfVENfMTogUHJpb3JpdHkgR3JvdXAgVHJhZmZpYyBDbGFzcyAxIGNvbmZpZ3VyYXRpb24gKE5MQV9ORVNURUQpCisgKiBARENCX1BHX0FUVFJfVENfMjogUHJpb3JpdHkgR3JvdXAgVHJhZmZpYyBDbGFzcyAyIGNvbmZpZ3VyYXRpb24gKE5MQV9ORVNURUQpCisgKiBARENCX1BHX0FUVFJfVENfMzogUHJpb3JpdHkgR3JvdXAgVHJhZmZpYyBDbGFzcyAzIGNvbmZpZ3VyYXRpb24gKE5MQV9ORVNURUQpCisgKiBARENCX1BHX0FUVFJfVENfNDogUHJpb3JpdHkgR3JvdXAgVHJhZmZpYyBDbGFzcyA0IGNvbmZpZ3VyYXRpb24gKE5MQV9ORVNURUQpCisgKiBARENCX1BHX0FUVFJfVENfNTogUHJpb3JpdHkgR3JvdXAgVHJhZmZpYyBDbGFzcyA1IGNvbmZpZ3VyYXRpb24gKE5MQV9ORVNURUQpCisgKiBARENCX1BHX0FUVFJfVENfNjogUHJpb3JpdHkgR3JvdXAgVHJhZmZpYyBDbGFzcyA2IGNvbmZpZ3VyYXRpb24gKE5MQV9ORVNURUQpCisgKiBARENCX1BHX0FUVFJfVENfNzogUHJpb3JpdHkgR3JvdXAgVHJhZmZpYyBDbGFzcyA3IGNvbmZpZ3VyYXRpb24gKE5MQV9ORVNURUQpCisgKiBARENCX1BHX0FUVFJfVENfTUFYOiBoaWdoZXN0IGF0dHJpYnV0ZSBudW1iZXIgY3VycmVudGx5IGRlZmluZWQKKyAqIEBEQ0JfUEdfQVRUUl9UQ19BTEw6IGFwcGx5IHRvIGFsbCB0cmFmZmljIGNsYXNzZXMgKE5MQV9ORVNURUQpCisgKiBARENCX1BHX0FUVFJfQldfSURfMDogUGVyY2VudCBvZiBsaW5rIGJhbmR3aWR0aCBmb3IgUHJpb3JpdHkgR3JvdXAgMCAoTkxBX1U4KQorICogQERDQl9QR19BVFRSX0JXX0lEXzE6IFBlcmNlbnQgb2YgbGluayBiYW5kd2lkdGggZm9yIFByaW9yaXR5IEdyb3VwIDEgKE5MQV9VOCkKKyAqIEBEQ0JfUEdfQVRUUl9CV19JRF8yOiBQZXJjZW50IG9mIGxpbmsgYmFuZHdpZHRoIGZvciBQcmlvcml0eSBHcm91cCAyIChOTEFfVTgpCisgKiBARENCX1BHX0FUVFJfQldfSURfMzogUGVyY2VudCBvZiBsaW5rIGJhbmR3aWR0aCBmb3IgUHJpb3JpdHkgR3JvdXAgMyAoTkxBX1U4KQorICogQERDQl9QR19BVFRSX0JXX0lEXzQ6IFBlcmNlbnQgb2YgbGluayBiYW5kd2lkdGggZm9yIFByaW9yaXR5IEdyb3VwIDQgKE5MQV9VOCkKKyAqIEBEQ0JfUEdfQVRUUl9CV19JRF81OiBQZXJjZW50IG9mIGxpbmsgYmFuZHdpZHRoIGZvciBQcmlvcml0eSBHcm91cCA1IChOTEFfVTgpCisgKiBARENCX1BHX0FUVFJfQldfSURfNjogUGVyY2VudCBvZiBsaW5rIGJhbmR3aWR0aCBmb3IgUHJpb3JpdHkgR3JvdXAgNiAoTkxBX1U4KQorICogQERDQl9QR19BVFRSX0JXX0lEXzc6IFBlcmNlbnQgb2YgbGluayBiYW5kd2lkdGggZm9yIFByaW9yaXR5IEdyb3VwIDcgKE5MQV9VOCkKKyAqIEBEQ0JfUEdfQVRUUl9CV19JRF9NQVg6IGhpZ2hlc3QgYXR0cmlidXRlIG51bWJlciBjdXJyZW50bHkgZGVmaW5lZAorICogQERDQl9QR19BVFRSX0JXX0lEX0FMTDogYXBwbHkgdG8gYWxsIHByaW9yaXR5IGdyb3VwcyAoTkxBX0ZMQUcpCisgKgorICovCitlbnVtIGRjYm5sX3BnX2F0dHJzIHsKKwlEQ0JfUEdfQVRUUl9VTkRFRklORUQsCisKKwlEQ0JfUEdfQVRUUl9UQ18wLAorCURDQl9QR19BVFRSX1RDXzEsCisJRENCX1BHX0FUVFJfVENfMiwKKwlEQ0JfUEdfQVRUUl9UQ18zLAorCURDQl9QR19BVFRSX1RDXzQsCisJRENCX1BHX0FUVFJfVENfNSwKKwlEQ0JfUEdfQVRUUl9UQ182LAorCURDQl9QR19BVFRSX1RDXzcsCisJRENCX1BHX0FUVFJfVENfTUFYLAorCURDQl9QR19BVFRSX1RDX0FMTCwKKworCURDQl9QR19BVFRSX0JXX0lEXzAsCisJRENCX1BHX0FUVFJfQldfSURfMSwKKwlEQ0JfUEdfQVRUUl9CV19JRF8yLAorCURDQl9QR19BVFRSX0JXX0lEXzMsCisJRENCX1BHX0FUVFJfQldfSURfNCwKKwlEQ0JfUEdfQVRUUl9CV19JRF81LAorCURDQl9QR19BVFRSX0JXX0lEXzYsCisJRENCX1BHX0FUVFJfQldfSURfNywKKwlEQ0JfUEdfQVRUUl9CV19JRF9NQVgsCisJRENCX1BHX0FUVFJfQldfSURfQUxMLAorCisJX19EQ0JfUEdfQVRUUl9FTlVNX01BWCwKKwlEQ0JfUEdfQVRUUl9NQVggPSBfX0RDQl9QR19BVFRSX0VOVU1fTUFYIC0gMSwKK307CisKKy8qKgorICogZW51bSBkY2JubF90Y19hdHRycyAtIERDQiBUcmFmZmljIENsYXNzIGF0dHJpYnV0ZXMKKyAqCisgKiBARENCX1RDX0FUVFJfUEFSQU1fVU5ERUZJTkVEOiB1bnNwZWNpZmllZCBhdHRyaWJ1dGUgdG8gY2F0Y2ggZXJyb3JzCisgKiBARENCX1RDX0FUVFJfUEFSQU1fUEdJRDogKE5MQV9VOCkgUHJpb3JpdHkgZ3JvdXAgdGhlIHRyYWZmaWMgY2xhc3MgYmVsb25ncyB0bworICogICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkIHZhbHVlcyBhcmU6ICAwLTcKKyAqIEBEQ0JfVENfQVRUUl9QQVJBTV9VUF9NQVBQSU5HOiAoTkxBX1U4KSBUcmFmZmljIGNsYXNzIHRvIHVzZXIgcHJpb3JpdHkgbWFwCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29tZSBkZXZpY2VzIG1heSBub3Qgc3VwcG9ydCBjaGFuZ2luZyB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyIHByaW9yaXR5IG1hcCBvZiBhIFRDLgorICogQERDQl9UQ19BVFRSX1BBUkFNX1NUUklDVF9QUklPOiAoTkxBX1U4KSBTdHJpY3QgcHJpb3JpdHkgc2V0dGluZworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIC0gbm9uZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gZ3JvdXAgc3RyaWN0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgLSBsaW5rIHN0cmljdAorICogQERDQl9UQ19BVFRSX1BBUkFNX0JXX1BDVDogb3B0aW9uYWwgLSAoTkxBX1U4KSBJZiBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBhbmQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBjb25maWd1cmVkIHRvIHVzZSBsaW5rIHN0cmljdCBwcmlvcml0eSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgaXMgdGhlIHBlcmNlbnRhZ2Ugb2YgYmFuZHdpZHRoIG9mIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHkgZ3JvdXAgdGhpcyB0cmFmZmljIGNsYXNzIGJlbG9uZ3MgdG8KKyAqIEBEQ0JfVENfQVRUUl9QQVJBTV9BTEw6IChOTEFfRkxBRykgYWxsIHRyYWZmaWMgY2xhc3MgcGFyYW1ldGVycworICoKKyAqLworZW51bSBkY2JubF90Y19hdHRycyB7CisJRENCX1RDX0FUVFJfUEFSQU1fVU5ERUZJTkVELAorCisJRENCX1RDX0FUVFJfUEFSQU1fUEdJRCwKKwlEQ0JfVENfQVRUUl9QQVJBTV9VUF9NQVBQSU5HLAorCURDQl9UQ19BVFRSX1BBUkFNX1NUUklDVF9QUklPLAorCURDQl9UQ19BVFRSX1BBUkFNX0JXX1BDVCwKKwlEQ0JfVENfQVRUUl9QQVJBTV9BTEwsCisKKwlfX0RDQl9UQ19BVFRSX1BBUkFNX0VOVU1fTUFYLAorCURDQl9UQ19BVFRSX1BBUkFNX01BWCA9IF9fRENCX1RDX0FUVFJfUEFSQU1fRU5VTV9NQVggLSAxLAorfTsKKworLyoqCisgKiBlbnVtIGRjYm5sX2NhcF9hdHRycyAtIERDQiBDYXBhYmlsaXR5IGF0dHJpYnV0ZXMKKyAqCisgKiBARENCX0NBUF9BVFRSX1VOREVGSU5FRDogdW5zcGVjaWZpZWQgYXR0cmlidXRlIHRvIGNhdGNoIGVycm9ycworICogQERDQl9DQVBfQVRUUl9BTEw6IChOTEFfRkxBRykgYWxsIGNhcGFiaWxpdHkgcGFyYW1ldGVycworICogQERDQl9DQVBfQVRUUl9QRzogKE5MQV9VOCkgZGV2aWNlIHN1cHBvcnRzIFByaW9yaXR5IEdyb3VwcworICogQERDQl9DQVBfQVRUUl9QRkM6IChOTEFfVTgpIGRldmljZSBzdXBwb3J0cyBQcmlvcml0eSBGbG93IENvbnRyb2wKKyAqIEBEQ0JfQ0FQX0FUVFJfVVAyVEM6IChOTEFfVTgpIGRldmljZSBzdXBwb3J0cyB1c2VyIHByaW9yaXR5IHRvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFmZmljIGNsYXNzIG1hcHBpbmcKKyAqIEBEQ0JfQ0FQX0FUVFJfUEdfVENTOiAoTkxBX1U4KSBiaXRtYXAgd2hlcmUgZWFjaCBiaXQgcmVwcmVzZW50cyBhCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHRyYWZmaWMgY2xhc3NlcyB0aGUgZGV2aWNlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gdXNlIGZvciBQcmlvcml0eSBHcm91cHMKKyAqIEBEQ0JfQ0FQX0FUVFJfUEZDX1RDUzogKE5MQV9VOCkgYml0bWFwIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHMgYQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgdHJhZmZpYyBjbGFzc2VzIHRoZSBkZXZpY2UgY2FuIGJlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQgdG8gdXNlIGZvciBQcmlvcml0eSBGbG93IENvbnRyb2wKKyAqIEBEQ0JfQ0FQX0FUVFJfR1NQOiAoTkxBX1U4KSBkZXZpY2Ugc3VwcG9ydHMgZ3JvdXAgc3RyaWN0IHByaW9yaXR5CisgKiBARENCX0NBUF9BVFRSX0JDTjogKE5MQV9VOCkgZGV2aWNlIHN1cHBvcnRzIEJhY2t3YXJkcyBDb25nZXN0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uCisgKi8KK2VudW0gZGNibmxfY2FwX2F0dHJzIHsKKwlEQ0JfQ0FQX0FUVFJfVU5ERUZJTkVELAorCURDQl9DQVBfQVRUUl9BTEwsCisJRENCX0NBUF9BVFRSX1BHLAorCURDQl9DQVBfQVRUUl9QRkMsCisJRENCX0NBUF9BVFRSX1VQMlRDLAorCURDQl9DQVBfQVRUUl9QR19UQ1MsCisJRENCX0NBUF9BVFRSX1BGQ19UQ1MsCisJRENCX0NBUF9BVFRSX0dTUCwKKwlEQ0JfQ0FQX0FUVFJfQkNOLAorCisJX19EQ0JfQ0FQX0FUVFJfRU5VTV9NQVgsCisJRENCX0NBUF9BVFRSX01BWCA9IF9fRENCX0NBUF9BVFRSX0VOVU1fTUFYIC0gMSwKK307CisKKy8qKgorICogZW51bSBkY2JubF9udW10Y3NfYXR0cnMgLSBudW1iZXIgb2YgdHJhZmZpYyBjbGFzc2VzCisgKgorICogQERDQl9OVU1UQ1NfQVRUUl9VTkRFRklORUQ6IHVuc3BlY2lmaWVkIGF0dHJpYnV0ZSB0byBjYXRjaCBlcnJvcnMKKyAqIEBEQ0JfTlVNVENTX0FUVFJfQUxMOiAoTkxBX0ZMQUcpIGFsbCB0cmFmZmljIGNsYXNzIGF0dHJpYnV0ZXMKKyAqIEBEQ0JfTlVNVENTX0FUVFJfUEc6IChOTEFfVTgpIG51bWJlciBvZiB0cmFmZmljIGNsYXNzZXMgdXNlZCBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5IGdyb3VwcworICogQERDQl9OVU1UQ1NfQVRUUl9QRkM6IChOTEFfVTgpIG51bWJlciBvZiB0cmFmZmljIGNsYXNzZXMgd2hpY2ggY2FuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBwcmlvcml0eSBmbG93IGNvbnRyb2wKKyAqLworZW51bSBkY2JubF9udW10Y3NfYXR0cnMgeworCURDQl9OVU1UQ1NfQVRUUl9VTkRFRklORUQsCisJRENCX05VTVRDU19BVFRSX0FMTCwKKwlEQ0JfTlVNVENTX0FUVFJfUEcsCisJRENCX05VTVRDU19BVFRSX1BGQywKKworCV9fRENCX05VTVRDU19BVFRSX0VOVU1fTUFYLAorCURDQl9OVU1UQ1NfQVRUUl9NQVggPSBfX0RDQl9OVU1UQ1NfQVRUUl9FTlVNX01BWCAtIDEsCit9OworCitlbnVtIGRjYm5sX2Jjbl9hdHRyc3sKKwlEQ0JfQkNOX0FUVFJfVU5ERUZJTkVEID0gMCwKKworCURDQl9CQ05fQVRUUl9SUF8wLAorCURDQl9CQ05fQVRUUl9SUF8xLAorCURDQl9CQ05fQVRUUl9SUF8yLAorCURDQl9CQ05fQVRUUl9SUF8zLAorCURDQl9CQ05fQVRUUl9SUF80LAorCURDQl9CQ05fQVRUUl9SUF81LAorCURDQl9CQ05fQVRUUl9SUF82LAorCURDQl9CQ05fQVRUUl9SUF83LAorCURDQl9CQ05fQVRUUl9SUF9BTEwsCisKKwlEQ0JfQkNOX0FUVFJfQkNOQV8wLAorCURDQl9CQ05fQVRUUl9CQ05BXzEsCisJRENCX0JDTl9BVFRSX0FMUEhBLAorCURDQl9CQ05fQVRUUl9CRVRBLAorCURDQl9CQ05fQVRUUl9HRCwKKwlEQ0JfQkNOX0FUVFJfR0ksCisJRENCX0JDTl9BVFRSX1RNQVgsCisJRENCX0JDTl9BVFRSX1RELAorCURDQl9CQ05fQVRUUl9STUlOLAorCURDQl9CQ05fQVRUUl9XLAorCURDQl9CQ05fQVRUUl9SRCwKKwlEQ0JfQkNOX0FUVFJfUlUsCisJRENCX0JDTl9BVFRSX1dSVFQsCisJRENCX0JDTl9BVFRSX1JJLAorCURDQl9CQ05fQVRUUl9DLAorCURDQl9CQ05fQVRUUl9BTEwsCisKKwlfX0RDQl9CQ05fQVRUUl9FTlVNX01BWCwKKwlEQ0JfQkNOX0FUVFJfTUFYID0gX19EQ0JfQkNOX0FUVFJfRU5VTV9NQVggLSAxLAorfTsKKworLyoqCisgKiBlbnVtIGRjYl9nZW5lcmFsX2F0dHJfdmFsdWVzIC0gZ2VuZXJhbCBEQ0IgYXR0cmlidXRlIHZhbHVlcworICoKKyAqIEBEQ0JfQVRUUl9VTkRFRklORUQ6IHZhbHVlIHVzZWQgdG8gaW5kaWNhdGUgYW4gYXR0cmlidXRlIGlzIG5vdCBzdXBwb3J0ZWQKKyAqCisgKi8KK2VudW0gZGNiX2dlbmVyYWxfYXR0cl92YWx1ZXMgeworCURDQl9BVFRSX1ZBTFVFX1VOREVGSU5FRCA9IDB4ZmYKK307CisKKyNkZWZpbmUgRENCX0FQUF9JRFRZUEVfRVRIVFlQRQkweDAwCisjZGVmaW5lIERDQl9BUFBfSURUWVBFX1BPUlROVU0JMHgwMQorZW51bSBkY2JubF9hcHBfYXR0cnMgeworCURDQl9BUFBfQVRUUl9VTkRFRklORUQsCisKKwlEQ0JfQVBQX0FUVFJfSURUWVBFLAorCURDQl9BUFBfQVRUUl9JRCwKKwlEQ0JfQVBQX0FUVFJfUFJJT1JJVFksCisKKwlfX0RDQl9BUFBfQVRUUl9FTlVNX01BWCwKKwlEQ0JfQVBQX0FUVFJfTUFYID0gX19EQ0JfQVBQX0FUVFJfRU5VTV9NQVggLSAxLAorfTsKKworI2VuZGlmIC8qIF9fTElOVVhfRENCTkxfSF9fICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZGNjcC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2RjY3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjMxZTI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2RjY3AuaApAQCAtMCwwICsxLDIyMCBAQAorI2lmbmRlZiBfTElOVVhfRENDUF9ICisjZGVmaW5lIF9MSU5VWF9EQ0NQX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisvKioKKyAqIHN0cnVjdCBkY2NwX2hkciAtIGdlbmVyaWMgcGFydCBvZiBEQ0NQIHBhY2tldCBoZWFkZXIKKyAqCisgKiBAZGNjcGhfc3BvcnQgLSBSZWxldmFudCBwb3J0IG9uIHRoZSBlbmRwb2ludCB0aGF0IHNlbnQgdGhpcyBwYWNrZXQKKyAqIEBkY2NwaF9kcG9ydCAtIFJlbGV2YW50IHBvcnQgb24gdGhlIG90aGVyIGVuZHBvaW50CisgKiBAZGNjcGhfZG9mZiAtIERhdGEgT2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBEQ0NQIGhlYWRlciwgaW4gMzItYml0IHdvcmRzCisgKiBAZGNjcGhfY2N2YWwgLSBVc2VkIGJ5IHRoZSBIQy1TZW5kZXIgQ0NJRAorICogQGRjY3BoX2NzY292IC0gUGFydHMgb2YgdGhlIHBhY2tldCB0aGF0IGFyZSBjb3ZlcmVkIGJ5IHRoZSBDaGVja3N1bSBmaWVsZAorICogQGRjY3BoX2NoZWNrc3VtIC0gSW50ZXJuZXQgY2hlY2tzdW0sIGRlcGVuZHMgb24gZGNjcGhfY3Njb3YKKyAqIEBkY2NwaF94IC0gMCA9IDI0IGJpdCBzZXF1ZW5jZSBudW1iZXIsIDEgPSA0OAorICogQGRjY3BoX3R5cGUgLSBwYWNrZXQgdHlwZSwgc2VlIERDQ1BfUEtUXyBwcmVmaXhlZCBtYWNyb3MKKyAqIEBkY2NwaF9zZXEgLSBzZXF1ZW5jZSBudW1iZXIgaGlnaCBvciBsb3cgb3JkZXIgMjQgYml0cywgZGVwZW5kcyBvbiBkY2NwaF94CisgKi8KK3N0cnVjdCBkY2NwX2hkciB7CisJX19iZTE2CWRjY3BoX3Nwb3J0LAorCQlkY2NwaF9kcG9ydDsKKwlfX3U4CWRjY3BoX2RvZmY7CisjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisJX191OAlkY2NwaF9jc2Nvdjo0LAorCQlkY2NwaF9jY3ZhbDo0OworI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCisJX191OAlkY2NwaF9jY3ZhbDo0LAorCQlkY2NwaF9jc2Nvdjo0OworI2Vsc2UKKyNlcnJvciAgIkFkanVzdCB5b3VyIDxhc20vYnl0ZW9yZGVyLmg+IGRlZmluZXMiCisjZW5kaWYKKwlfX3N1bTE2CWRjY3BoX2NoZWNrc3VtOworI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTgJZGNjcGhfeDoxLAorCQlkY2NwaF90eXBlOjQsCisJCWRjY3BoX3Jlc2VydmVkOjM7CisjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4CWRjY3BoX3Jlc2VydmVkOjMsCisJCWRjY3BoX3R5cGU6NCwKKwkJZGNjcGhfeDoxOworI2Vsc2UKKyNlcnJvciAgIkFkanVzdCB5b3VyIDxhc20vYnl0ZW9yZGVyLmg+IGRlZmluZXMiCisjZW5kaWYKKwlfX3U4CWRjY3BoX3NlcTI7CisJX19iZTE2CWRjY3BoX3NlcTsKK307CisKKy8qKgorICogc3RydWN0IGRjY3BfaGRyX2V4dCAtIHRoZSBsb3cgYml0cyBvZiBhIDQ4IGJpdCBzZXEgcGFja2V0CisgKgorICogQGRjY3BoX3NlcV9sb3cgLSBsb3cgMjQgYml0cyBvZiBhIDQ4IGJpdCBzZXEgcGFja2V0CisgKi8KK3N0cnVjdCBkY2NwX2hkcl9leHQgeworCV9fYmUzMglkY2NwaF9zZXFfbG93OworfTsKKworLyoqCisgKiBzdHJ1Y3QgZGNjcF9oZHJfcmVxdWVzdCAtIENvbm5lY3Rpb24gaW5pdGlhdGlvbiByZXF1ZXN0IGhlYWRlcgorICoKKyAqIEBkY2NwaF9yZXFfc2VydmljZSAtIFNlcnZpY2UgdG8gd2hpY2ggdGhlIGNsaWVudCBhcHAgd2FudHMgdG8gY29ubmVjdAorICovCitzdHJ1Y3QgZGNjcF9oZHJfcmVxdWVzdCB7CisJX19iZTMyCWRjY3BoX3JlcV9zZXJ2aWNlOworfTsKKy8qKgorICogc3RydWN0IGRjY3BfaGRyX2Fja19iaXRzIC0gYWNrbm93bGVkZ21lbnQgYml0cyBjb21tb24gdG8gbW9zdCBwYWNrZXRzCisgKgorICogQGRjY3BoX3Jlc3BfYWNrX25yX2hpZ2ggLSA0OCBiaXQgYWNrIG51bWJlciBoaWdoIG9yZGVyIGJpdHMsIGNvbnRhaW5zIEdTUgorICogQGRjY3BoX3Jlc3BfYWNrX25yX2xvdyAtIDQ4IGJpdCBhY2sgbnVtYmVyIGxvdyBvcmRlciBiaXRzLCBjb250YWlucyBHU1IKKyAqLworc3RydWN0IGRjY3BfaGRyX2Fja19iaXRzIHsKKwlfX2JlMTYJZGNjcGhfcmVzZXJ2ZWQxOworCV9fYmUxNglkY2NwaF9hY2tfbnJfaGlnaDsKKwlfX2JlMzIJZGNjcGhfYWNrX25yX2xvdzsKK307CisvKioKKyAqIHN0cnVjdCBkY2NwX2hkcl9yZXNwb25zZSAtIENvbm5lY3Rpb24gaW5pdGlhdGlvbiByZXNwb25zZSBoZWFkZXIKKyAqCisgKiBAZGNjcGhfcmVzcF9hY2sgLSA0OCBiaXQgQWNrbm93bGVkZ21lbnQgTnVtYmVyIFN1YmhlYWRlciAoNS4zKQorICogQGRjY3BoX3Jlc3Bfc2VydmljZSAtIEVjaG9lcyB0aGUgU2VydmljZSBDb2RlIG9uIGEgcmVjZWl2ZWQgRENDUC1SZXF1ZXN0CisgKi8KK3N0cnVjdCBkY2NwX2hkcl9yZXNwb25zZSB7CisJc3RydWN0IGRjY3BfaGRyX2Fja19iaXRzCWRjY3BoX3Jlc3BfYWNrOworCV9fYmUzMgkJCQlkY2NwaF9yZXNwX3NlcnZpY2U7Cit9OworCisvKioKKyAqIHN0cnVjdCBkY2NwX2hkcl9yZXNldCAtIFVuY29uZGl0aW9uYWxseSBzaHV0IGRvd24gYSBjb25uZWN0aW9uCisgKgorICogQGRjY3BoX3Jlc2V0X2FjayAtIDQ4IGJpdCBBY2tub3dsZWRnbWVudCBOdW1iZXIgU3ViaGVhZGVyICg1LjYpCisgKiBAZGNjcGhfcmVzZXRfY29kZSAtIG9uZSBvZiAlZGNjcF9yZXNldF9jb2RlcworICogQGRjY3BoX3Jlc2V0X2RhdGEgLSB0aGUgRGF0YSAxIC4uLiBEYXRhIDMgZmllbGRzIGZyb20gNS42CisgKi8KK3N0cnVjdCBkY2NwX2hkcl9yZXNldCB7CisJc3RydWN0IGRjY3BfaGRyX2Fja19iaXRzCWRjY3BoX3Jlc2V0X2FjazsKKwlfX3U4CQkJCWRjY3BoX3Jlc2V0X2NvZGUsCisJCQkJCWRjY3BoX3Jlc2V0X2RhdGFbM107Cit9OworCitlbnVtIGRjY3BfcGt0X3R5cGUgeworCURDQ1BfUEtUX1JFUVVFU1QgPSAwLAorCURDQ1BfUEtUX1JFU1BPTlNFLAorCURDQ1BfUEtUX0RBVEEsCisJRENDUF9QS1RfQUNLLAorCURDQ1BfUEtUX0RBVEFBQ0ssCisJRENDUF9QS1RfQ0xPU0VSRVEsCisJRENDUF9QS1RfQ0xPU0UsCisJRENDUF9QS1RfUkVTRVQsCisJRENDUF9QS1RfU1lOQywKKwlEQ0NQX1BLVF9TWU5DQUNLLAorCURDQ1BfUEtUX0lOVkFMSUQsCit9OworCisjZGVmaW5lIERDQ1BfTlJfUEtUX1RZUEVTIERDQ1BfUEtUX0lOVkFMSUQKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IGRjY3BfcGFja2V0X2hkcl9sZW4oY29uc3QgX191OCB0eXBlKQoreworCWlmICh0eXBlID09IERDQ1BfUEtUX0RBVEEpCisJCXJldHVybiAwOworCWlmICh0eXBlID09IERDQ1BfUEtUX0RBVEFBQ0sJfHwKKwkgICAgdHlwZSA9PSBEQ0NQX1BLVF9BQ0sJfHwKKwkgICAgdHlwZSA9PSBEQ0NQX1BLVF9TWU5DCXx8CisJICAgIHR5cGUgPT0gRENDUF9QS1RfU1lOQ0FDSwl8fAorCSAgICB0eXBlID09IERDQ1BfUEtUX0NMT1NFCXx8CisJICAgIHR5cGUgPT0gRENDUF9QS1RfQ0xPU0VSRVEpCisJCXJldHVybiBzaXplb2Yoc3RydWN0IGRjY3BfaGRyX2Fja19iaXRzKTsKKwlpZiAodHlwZSA9PSBEQ0NQX1BLVF9SRVFVRVNUKQorCQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBkY2NwX2hkcl9yZXF1ZXN0KTsKKwlpZiAodHlwZSA9PSBEQ0NQX1BLVF9SRVNQT05TRSkKKwkJcmV0dXJuIHNpemVvZihzdHJ1Y3QgZGNjcF9oZHJfcmVzcG9uc2UpOworCXJldHVybiBzaXplb2Yoc3RydWN0IGRjY3BfaGRyX3Jlc2V0KTsKK30KK2VudW0gZGNjcF9yZXNldF9jb2RlcyB7CisJRENDUF9SRVNFVF9DT0RFX1VOU1BFQ0lGSUVEID0gMCwKKwlEQ0NQX1JFU0VUX0NPREVfQ0xPU0VELAorCURDQ1BfUkVTRVRfQ09ERV9BQk9SVEVELAorCURDQ1BfUkVTRVRfQ09ERV9OT19DT05ORUNUSU9OLAorCURDQ1BfUkVTRVRfQ09ERV9QQUNLRVRfRVJST1IsCisJRENDUF9SRVNFVF9DT0RFX09QVElPTl9FUlJPUiwKKwlEQ0NQX1JFU0VUX0NPREVfTUFOREFUT1JZX0VSUk9SLAorCURDQ1BfUkVTRVRfQ09ERV9DT05ORUNUSU9OX1JFRlVTRUQsCisJRENDUF9SRVNFVF9DT0RFX0JBRF9TRVJWSUNFX0NPREUsCisJRENDUF9SRVNFVF9DT0RFX1RPT19CVVNZLAorCURDQ1BfUkVTRVRfQ09ERV9CQURfSU5JVF9DT09LSUUsCisJRENDUF9SRVNFVF9DT0RFX0FHR1JFU1NJT05fUEVOQUxUWSwKKworCURDQ1BfTUFYX1JFU0VUX0NPREVTCQkvKiBMZWF2ZSBhdCB0aGUgZW5kISAgKi8KK307CisKKy8qIERDQ1Agb3B0aW9ucyAqLworZW51bSB7CisJRENDUE9fUEFERElORyA9IDAsCisJRENDUE9fTUFOREFUT1JZID0gMSwKKwlEQ0NQT19NSU5fUkVTRVJWRUQgPSAzLAorCURDQ1BPX01BWF9SRVNFUlZFRCA9IDMxLAorCURDQ1BPX0NIQU5HRV9MID0gMzIsCisJRENDUE9fQ09ORklSTV9MID0gMzMsCisJRENDUE9fQ0hBTkdFX1IgPSAzNCwKKwlEQ0NQT19DT05GSVJNX1IgPSAzNSwKKwlEQ0NQT19ORFBfQ09VTlQgPSAzNywKKwlEQ0NQT19BQ0tfVkVDVE9SXzAgPSAzOCwKKwlEQ0NQT19BQ0tfVkVDVE9SXzEgPSAzOSwKKwlEQ0NQT19USU1FU1RBTVAgPSA0MSwKKwlEQ0NQT19USU1FU1RBTVBfRUNITyA9IDQyLAorCURDQ1BPX0VMQVBTRURfVElNRSA9IDQzLAorCURDQ1BPX01BWCA9IDQ1LAorCURDQ1BPX01JTl9SWF9DQ0lEX1NQRUNJRklDID0gMTI4LAkvKiBmcm9tIHNlbmRlciB0byByZWNlaXZlciAqLworCURDQ1BPX01BWF9SWF9DQ0lEX1NQRUNJRklDID0gMTkxLAorCURDQ1BPX01JTl9UWF9DQ0lEX1NQRUNJRklDID0gMTkyLAkvKiBmcm9tIHJlY2VpdmVyIHRvIHNlbmRlciAqLworCURDQ1BPX01BWF9UWF9DQ0lEX1NQRUNJRklDID0gMjU1LAorfTsKKy8qIG1heGltdW0gc2l6ZSBvZiBhIHNpbmdsZSBUTFYtZW5jb2RlZCBEQ0NQIG9wdGlvbiAoc2FucyB0eXBlL2xlbiBieXRlcykgKi8KKyNkZWZpbmUgRENDUF9TSU5HTEVfT1BUX01BWExFTgkyNTMKKworLyogRENDUCBDQ0lEUyAqLworZW51bSB7CisJRENDUENfQ0NJRDIgPSAyLAorCURDQ1BDX0NDSUQzID0gMywKK307CisKKy8qIERDQ1AgZmVhdHVyZXMgKFJGQyA0MzQwIHNlY3Rpb24gNi40KSAqLworZW51bSBkY2NwX2ZlYXR1cmVfbnVtYmVycyB7CisJRENDUEZfUkVTRVJWRUQgPSAwLAorCURDQ1BGX0NDSUQgPSAxLAorCURDQ1BGX1NIT1JUX1NFUU5PUyA9IDIsCisJRENDUEZfU0VRVUVOQ0VfV0lORE9XID0gMywKKwlEQ0NQRl9FQ05fSU5DQVBBQkxFID0gNCwKKwlEQ0NQRl9BQ0tfUkFUSU8gPSA1LAorCURDQ1BGX1NFTkRfQUNLX1ZFQ1RPUiA9IDYsCisJRENDUEZfU0VORF9ORFBfQ09VTlQgPSA3LAorCURDQ1BGX01JTl9DU1VNX0NPVkVSID0gOCwKKwlEQ0NQRl9EQVRBX0NIRUNLU1VNID0gOSwKKwkvKiAxMC0xMjcgcmVzZXJ2ZWQgKi8KKwlEQ0NQRl9NSU5fQ0NJRF9TUEVDSUZJQyA9IDEyOCwKKwlEQ0NQRl9TRU5EX0xFVl9SQVRFID0gMTkyLAkvKiBSRkMgNDM0Miwgc2VjLiA4LjQgKi8KKwlEQ0NQRl9NQVhfQ0NJRF9TUEVDSUZJQyA9IDI1NSwKK307CisKKy8qIERDQ1Agc29ja2V0IG9wdGlvbnMgKi8KKyNkZWZpbmUgRENDUF9TT0NLT1BUX1BBQ0tFVF9TSVpFCTEgLyogWFhYIGRlcHJlY2F0ZWQsIHdpdGhvdXQgZWZmZWN0ICovCisjZGVmaW5lIERDQ1BfU09DS09QVF9TRVJWSUNFCQkyCisjZGVmaW5lIERDQ1BfU09DS09QVF9DSEFOR0VfTAkJMworI2RlZmluZSBEQ0NQX1NPQ0tPUFRfQ0hBTkdFX1IJCTQKKyNkZWZpbmUgRENDUF9TT0NLT1BUX0dFVF9DVVJfTVBTCTUKKyNkZWZpbmUgRENDUF9TT0NLT1BUX1NFUlZFUl9USU1FV0FJVAk2CisjZGVmaW5lIERDQ1BfU09DS09QVF9TRU5EX0NTQ09WCQkxMAorI2RlZmluZSBEQ0NQX1NPQ0tPUFRfUkVDVl9DU0NPVgkJMTEKKyNkZWZpbmUgRENDUF9TT0NLT1BUX0FWQUlMQUJMRV9DQ0lEUwkxMgorI2RlZmluZSBEQ0NQX1NPQ0tPUFRfQ0NJRAkJMTMKKyNkZWZpbmUgRENDUF9TT0NLT1BUX1RYX0NDSUQJCTE0CisjZGVmaW5lIERDQ1BfU09DS09QVF9SWF9DQ0lECQkxNQorI2RlZmluZSBEQ0NQX1NPQ0tPUFRfQ0NJRF9SWF9JTkZPCTEyOAorI2RlZmluZSBEQ0NQX1NPQ0tPUFRfQ0NJRF9UWF9JTkZPCTE5MgorCisvKiBtYXhpbXVtIG51bWJlciBvZiBzZXJ2aWNlcyBwcm92aWRlZCBvbiB0aGUgc2FtZSBsaXN0ZW5pbmcgcG9ydCAqLworI2RlZmluZSBEQ0NQX1NFUlZJQ0VfTElTVF9NQVhfTEVOICAgICAgMzIKKworCisjZW5kaWYgLyogX0xJTlVYX0RDQ1BfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2RsbS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2RsbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNzc4MGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZGxtLmgKQEAgLTAsMCArMSw3NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioKKyoqICBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKioKKyoqICBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKKyoqICBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworKiogIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2LjIuCisqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fRExNX0RPVF9IX18KKyNkZWZpbmUgX19ETE1fRE9UX0hfXworCisvKgorICogSW50ZXJmYWNlIHRvIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlciAoRExNKQorICogcm91dGluZXMgYW5kIHN0cnVjdHVyZXMgdG8gdXNlIERMTSBsb2Nrc3BhY2VzCisgKi8KKworLyogTG9jayBsZXZlbHMgYW5kIGZsYWdzIGFyZSBoZXJlICovCisjaW5jbHVkZSA8bGludXgvZGxtY29uc3RhbnRzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwordHlwZWRlZiB2b2lkIGRsbV9sb2Nrc3BhY2VfdDsKKworLyoKKyAqIExvY2sgc3RhdHVzIGJsb2NrCisgKgorICogVXNlIHRoaXMgc3RydWN0dXJlIHRvIHNwZWNpZnkgdGhlIGNvbnRlbnRzIG9mIHRoZSBsb2NrIHZhbHVlIGJsb2NrLiAgRm9yIGEKKyAqIGNvbnZlcnNpb24gcmVxdWVzdCwgdGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBsb2NrIElEIG9mIHRoZQorICogbG9jay4gIERMTSB3cml0ZXMgdGhlIHN0YXR1cyBvZiB0aGUgbG9jayByZXF1ZXN0IGFuZCB0aGUgbG9jayBJRCBhc3NpZ25lZAorICogdG8gdGhlIHJlcXVlc3QgaW4gdGhlIGxvY2sgc3RhdHVzIGJsb2NrLgorICoKKyAqIHNiX2xraWQ6IHRoZSByZXR1cm5lZCBsb2NrIElELiAgSXQgaXMgc2V0IG9uIG5ldyAobm9uLWNvbnZlcnNpb24pIHJlcXVlc3RzLgorICogSXQgaXMgYXZhaWxhYmxlIHdoZW4gZGxtX2xvY2sgcmV0dXJucy4KKyAqCisgKiBzYl9sdmJwdHI6IHNhdmVzIG9yIHJldHVybnMgdGhlIGNvbnRlbnRzIG9mIHRoZSBsb2NrJ3MgTFZCIGFjY29yZGluZyB0byBydWxlcworICogc2hvd24gZm9yIHRoZSBETE1fTEtGX1ZBTEJMSyBmbGFnLgorICoKKyAqIHNiX2ZsYWdzOiBETE1fU0JGX0RFTU9URUQgaXMgcmV0dXJuZWQgaWYgaW4gdGhlIHByb2Nlc3Mgb2YgcHJvbW90aW5nIGEgbG9jaywKKyAqIGl0IHdhcyBmaXJzdCBkZW1vdGVkIHRvIE5MIHRvIGF2b2lkIGNvbnZlcnNpb24gZGVhZGxvY2suCisgKiBETE1fU0JGX1ZBTE5PVFZBTElEIGlzIHJldHVybmVkIGlmIHRoZSByZXNvdXJjZSdzIExWQiBpcyBtYXJrZWQgaW52YWxpZC4KKyAqCisgKiBzYl9zdGF0dXM6IHRoZSByZXR1cm5lZCBzdGF0dXMgb2YgdGhlIGxvY2sgcmVxdWVzdCBzZXQgcHJpb3IgdG8gQVNUCisgKiBleGVjdXRpb24uICBQb3NzaWJsZSByZXR1cm4gdmFsdWVzOgorICoKKyAqIDAgaWYgbG9jayByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsCisgKiAtRUFHQUlOIGlmIHJlcXVlc3Qgd291bGQgYmxvY2sgYW5kIGlzIGZsYWdnZWQgRExNX0xLRl9OT1FVRVVFCisgKiAtRExNX0VVTkxPQ0sgaWYgdW5sb2NrIHJlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWwKKyAqIC1ETE1fRUNBTkNFTCBpZiBhIGNhbmNlbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5CisgKiAtRURFQURMSyBpZiBhIGRlYWRsb2NrIHdhcyBkZXRlY3RlZAorICogLUVUSU1FRE9VVCBpZiB0aGUgbG9jayByZXF1ZXN0IHdhcyBjYW5jZWxlZCBkdWUgdG8gYSB0aW1lb3V0CisgKi8KKworI2RlZmluZSBETE1fU0JGX0RFTU9URUQJCTB4MDEKKyNkZWZpbmUgRExNX1NCRl9WQUxOT1RWQUxJRAkweDAyCisjZGVmaW5lIERMTV9TQkZfQUxUTU9ERQkJMHgwNAorCitzdHJ1Y3QgZGxtX2xrc2IgeworCWludCAJIHNiX3N0YXR1czsKKwlfX3UzMgkgc2JfbGtpZDsKKwljaGFyIAkgc2JfZmxhZ3M7CisJY2hhciAqCSBzYl9sdmJwdHI7Cit9OworCisvKiBkbG1fbmV3X2xvY2tzcGFjZSgpIGZsYWdzICovCisKKyNkZWZpbmUgRExNX0xTRkxfTk9ESVIJCTB4MDAwMDAwMDEKKyNkZWZpbmUgRExNX0xTRkxfVElNRVdBUk4JMHgwMDAwMDAwMgorI2RlZmluZSBETE1fTFNGTF9GUyAgICAgCTB4MDAwMDAwMDQKKyNkZWZpbmUgRExNX0xTRkxfTkVXRVhDTCAgICAgCTB4MDAwMDAwMDgKKworCisjZW5kaWYJCQkJLyogX19ETE1fRE9UX0hfXyAqLworCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZGxtX2RldmljZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2RsbV9kZXZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmQ5ZWJmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2RsbV9kZXZpY2UuaApAQCAtMCwwICsxLDEwOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioKKyoqICBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKioKKyoqICBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKKyoqICBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworKiogIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2LjIuCisqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9MSU5VWF9ETE1fREVWSUNFX0gKKyNkZWZpbmUgX0xJTlVYX0RMTV9ERVZJQ0VfSAorCisvKiBUaGlzIGlzIHRoZSBkZXZpY2UgaW50ZXJmYWNlIGZvciBkbG0sIG1vc3QgdXNlcnMgd2lsbCB1c2UgYSBsaWJyYXJ5CisgKiBpbnRlcmZhY2UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RsbS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgRExNX1VTRVJfTFZCX0xFTgkzMgorCisvKiBWZXJzaW9uIG9mIHRoZSBkZXZpY2UgaW50ZXJmYWNlICovCisjZGVmaW5lIERMTV9ERVZJQ0VfVkVSU0lPTl9NQUpPUiA2CisjZGVmaW5lIERMTV9ERVZJQ0VfVkVSU0lPTl9NSU5PUiAwCisjZGVmaW5lIERMTV9ERVZJQ0VfVkVSU0lPTl9QQVRDSCAxCisKKy8qIHN0cnVjdCBwYXNzZWQgdG8gdGhlIGxvY2sgd3JpdGUgKi8KK3N0cnVjdCBkbG1fbG9ja19wYXJhbXMgeworCV9fdTggbW9kZTsKKwlfX3U4IG5hbWVsZW47CisJX191MTYgdW51c2VkOworCV9fdTMyIGZsYWdzOworCV9fdTMyIGxraWQ7CisJX191MzIgcGFyZW50OworCV9fdTY0IHhpZDsKKwlfX3U2NCB0aW1lb3V0OworCXZvaWQgKmNhc3RwYXJhbTsKKwl2b2lkICpjYXN0YWRkcjsKKwl2b2lkICpiYXN0cGFyYW07CisJdm9pZCAqYmFzdGFkZHI7CisJc3RydWN0IGRsbV9sa3NiICpsa3NiOworCWNoYXIgbHZiW0RMTV9VU0VSX0xWQl9MRU5dOworCWNoYXIgbmFtZVswXTsKK307CisKK3N0cnVjdCBkbG1fbHNwYWNlX3BhcmFtcyB7CisJX191MzIgZmxhZ3M7CisJX191MzIgbWlub3I7CisJY2hhciBuYW1lWzBdOworfTsKKworc3RydWN0IGRsbV9wdXJnZV9wYXJhbXMgeworCV9fdTMyIG5vZGVpZDsKKwlfX3UzMiBwaWQ7Cit9OworCitzdHJ1Y3QgZGxtX3dyaXRlX3JlcXVlc3QgeworCV9fdTMyIHZlcnNpb25bM107CisJX191OCBjbWQ7CisJX191OCBpczY0Yml0OworCV9fdTggdW51c2VkWzJdOworCisJdW5pb24gIHsKKwkJc3RydWN0IGRsbV9sb2NrX3BhcmFtcyAgIGxvY2s7CisJCXN0cnVjdCBkbG1fbHNwYWNlX3BhcmFtcyBsc3BhY2U7CisJCXN0cnVjdCBkbG1fcHVyZ2VfcGFyYW1zICBwdXJnZTsKKwl9IGk7Cit9OworCitzdHJ1Y3QgZGxtX2RldmljZV92ZXJzaW9uIHsKKwlfX3UzMiB2ZXJzaW9uWzNdOworfTsKKworLyogc3RydWN0IHJlYWQgZnJvbSB0aGUgImRldmljZSIgZmQsCisgICBjb25zaXN0cyBtYWlubHkgb2YgdXNlcnNwYWNlIHBvaW50ZXJzIGZvciB0aGUgbGlicmFyeSB0byB1c2UgKi8KKworc3RydWN0IGRsbV9sb2NrX3Jlc3VsdCB7CisJX191MzIgdmVyc2lvblszXTsKKwlfX3UzMiBsZW5ndGg7CisJdm9pZCAqIHVzZXJfYXN0YWRkcjsKKwl2b2lkICogdXNlcl9hc3RwYXJhbTsKKwlzdHJ1Y3QgZGxtX2xrc2IgKiB1c2VyX2xrc2I7CisJc3RydWN0IGRsbV9sa3NiIGxrc2I7CisJX191OCBiYXN0X21vZGU7CisJX191OCB1bnVzZWRbM107CisJLyogT2Zmc2V0cyBtYXkgYmUgemVybyBpZiBubyBkYXRhIGlzIHByZXNlbnQgKi8KKwlfX3UzMiBsdmJfb2Zmc2V0OworfTsKKworLyogQ29tbWFuZHMgcGFzc2VkIHRvIHRoZSBkZXZpY2UgKi8KKyNkZWZpbmUgRExNX1VTRVJfTE9DSyAgICAgICAgIDEKKyNkZWZpbmUgRExNX1VTRVJfVU5MT0NLICAgICAgIDIKKyNkZWZpbmUgRExNX1VTRVJfUVVFUlkgICAgICAgIDMKKyNkZWZpbmUgRExNX1VTRVJfQ1JFQVRFX0xPQ0tTUEFDRSAgNAorI2RlZmluZSBETE1fVVNFUl9SRU1PVkVfTE9DS1NQQUNFICA1CisjZGVmaW5lIERMTV9VU0VSX1BVUkdFICAgICAgICA2CisjZGVmaW5lIERMTV9VU0VSX0RFQURMT0NLICAgICA3CisKKy8qIExvY2tzcGFjZSBmbGFncyAqLworI2RlZmluZSBETE1fVVNFUl9MU0ZMR19BVVRPRlJFRSAgIDEKKyNkZWZpbmUgRExNX1VTRVJfTFNGTEdfRk9SQ0VGUkVFICAyCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZGxtX25ldGxpbmsuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9kbG1fbmV0bGluay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0N2M4ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZGxtX25ldGxpbmsuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCisgKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYuMi4KKyAqLworCisjaWZuZGVmIF9ETE1fTkVUTElOS19ICisjZGVmaW5lIF9ETE1fTkVUTElOS19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitlbnVtIHsKKwlETE1fU1RBVFVTX1dBSVRJTkcgPSAxLAorCURMTV9TVEFUVVNfR1JBTlRFRCA9IDIsCisJRExNX1NUQVRVU19DT05WRVJUID0gMywKK307CisKKyNkZWZpbmUgRExNX0xPQ0tfREFUQV9WRVJTSU9OIDEKKworc3RydWN0IGRsbV9sb2NrX2RhdGEgeworCV9fdTE2IHZlcnNpb247CisJX191MzIgbG9ja3NwYWNlX2lkOworCWludCBub2RlaWQ7CisJaW50IG93bnBpZDsKKwlfX3UzMiBpZDsKKwlfX3UzMiByZW1pZDsKKwlfX3U2NCB4aWQ7CisJX19zOCBzdGF0dXM7CisJX19zOCBncm1vZGU7CisJX19zOCBycW1vZGU7CisJdW5zaWduZWQgbG9uZyB0aW1lc3RhbXA7CisJaW50IHJlc291cmNlX25hbWVsZW47CisJY2hhciByZXNvdXJjZV9uYW1lW0RMTV9SRVNOQU1FX01BWExFTl07Cit9OworCitlbnVtIHsKKwlETE1fQ01EX1VOU1BFQyA9IDAsCisJRExNX0NNRF9IRUxMTywJCS8qIHVzZXItPmtlcm5lbCAqLworCURMTV9DTURfVElNRU9VVCwJLyoga2VybmVsLT51c2VyICovCisJX19ETE1fQ01EX01BWCwKK307CisKKyNkZWZpbmUgRExNX0NNRF9NQVggKF9fRExNX0NNRF9NQVggLSAxKQorCitlbnVtIHsKKwlETE1fVFlQRV9VTlNQRUMgPSAwLAorCURMTV9UWVBFX0xPQ0ssCisJX19ETE1fVFlQRV9NQVgsCit9OworCisjZGVmaW5lIERMTV9UWVBFX01BWCAoX19ETE1fVFlQRV9NQVggLSAxKQorCisjZGVmaW5lIERMTV9HRU5MX1ZFUlNJT04gMHgxCisjZGVmaW5lIERMTV9HRU5MX05BTUUgIkRMTSIKKworI2VuZGlmIC8qIF9ETE1fTkVUTElOS19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZGxtX3Bsb2NrLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZGxtX3Bsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVhODkxYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9kbG1fcGxvY2suaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKKyAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCisgKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugdi4yLgorICovCisKKyNpZm5kZWYgX19ETE1fUExPQ0tfRE9UX0hfXworI2RlZmluZSBfX0RMTV9QTE9DS19ET1RfSF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIERMTV9QTE9DS19NSVNDX05BTUUJCSJkbG1fcGxvY2siCisKKyNkZWZpbmUgRExNX1BMT0NLX1ZFUlNJT05fTUFKT1IJMQorI2RlZmluZSBETE1fUExPQ0tfVkVSU0lPTl9NSU5PUgkxCisjZGVmaW5lIERMTV9QTE9DS19WRVJTSU9OX1BBVENICTAKKworZW51bSB7CisJRExNX1BMT0NLX09QX0xPQ0sgPSAxLAorCURMTV9QTE9DS19PUF9VTkxPQ0ssCisJRExNX1BMT0NLX09QX0dFVCwKK307CisKK3N0cnVjdCBkbG1fcGxvY2tfaW5mbyB7CisJX191MzIgdmVyc2lvblszXTsKKwlfX3U4IG9wdHlwZTsKKwlfX3U4IGV4OworCV9fdTggd2FpdDsKKwlfX3U4IHBhZDsKKwlfX3UzMiBwaWQ7CisJX19zMzIgbm9kZWlkOworCV9fczMyIHJ2OworCV9fdTMyIGZzaWQ7CisJX191NjQgbnVtYmVyOworCV9fdTY0IHN0YXJ0OworCV9fdTY0IGVuZDsKKwlfX3U2NCBvd25lcjsKK307CisKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9kbG1jb25zdGFudHMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9kbG1jb25zdGFudHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2JmMDhkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2RsbWNvbnN0YW50cy5oCkBAIC0wLDAgKzEsMTYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKgorKiogIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiogIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqKgorKiogIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAorKiogIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCisqKiAgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYuMi4KKyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19ETE1DT05TVEFOVFNfRE9UX0hfXworI2RlZmluZSBfX0RMTUNPTlNUQU5UU19ET1RfSF9fCisKKy8qCisgKiBDb25zdGFudHMgdXNlZCBieSBETE0gaW50ZXJmYWNlLgorICovCisKKyNkZWZpbmUgRExNX0xPQ0tTUEFDRV9MRU4gICAgICAgNjQKKyNkZWZpbmUgRExNX1JFU05BTUVfTUFYTEVOICAgICAgNjQKKworCisvKgorICogTG9jayBNb2RlcworICovCisKKyNkZWZpbmUgRExNX0xPQ0tfSVYJCSgtMSkJLyogaW52YWxpZCAqLworI2RlZmluZSBETE1fTE9DS19OTAkJMAkvKiBudWxsICovCisjZGVmaW5lIERMTV9MT0NLX0NSCQkxCS8qIGNvbmN1cnJlbnQgcmVhZCAqLworI2RlZmluZSBETE1fTE9DS19DVwkJMgkvKiBjb25jdXJyZW50IHdyaXRlICovCisjZGVmaW5lIERMTV9MT0NLX1BSCQkzCS8qIHByb3RlY3RlZCByZWFkICovCisjZGVmaW5lIERMTV9MT0NLX1BXCQk0CS8qIHByb3RlY3RlZCB3cml0ZSAqLworI2RlZmluZSBETE1fTE9DS19FWAkJNQkvKiBleGNsdXNpdmUgKi8KKworCisvKgorICogRmxhZ3MgdG8gZGxtX2xvY2sKKyAqCisgKiBETE1fTEtGX05PUVVFVUUKKyAqCisgKiBEbyBub3QgcXVldWUgdGhlIGxvY2sgcmVxdWVzdCBvbiB0aGUgd2FpdCBxdWV1ZSBpZiBpdCBjYW5ub3QgYmUgZ3JhbnRlZAorICogaW1tZWRpYXRlbHkuICBJZiB0aGUgbG9jayBjYW5ub3QgYmUgZ3JhbnRlZCBiZWNhdXNlIG9mIHRoaXMgZmxhZywgRExNIHdpbGwKKyAqIGVpdGhlciByZXR1cm4gLUVBR0FJTiBmcm9tIHRoZSBkbG1fbG9jayBjYWxsIG9yIHdpbGwgcmV0dXJuIDAgZnJvbQorICogZGxtX2xvY2sgYW5kIC1FQUdBSU4gaW4gdGhlIGxvY2sgc3RhdHVzIGJsb2NrIHdoZW4gdGhlIEFTVCBpcyBleGVjdXRlZC4KKyAqCisgKiBETE1fTEtGX0NBTkNFTAorICoKKyAqIFVzZWQgdG8gY2FuY2VsIGEgcGVuZGluZyBsb2NrIHJlcXVlc3Qgb3IgY29udmVyc2lvbi4gIEEgY29udmVydGluZyBsb2NrIGlzCisgKiByZXR1cm5lZCB0byBpdHMgcHJldmlvdXNseSBncmFudGVkIG1vZGUuCisgKgorICogRExNX0xLRl9DT05WRVJUCisgKgorICogSW5kaWNhdGVzIGEgbG9jayBjb252ZXJzaW9uIHJlcXVlc3QuICBGb3IgY29udmVyc2lvbnMgdGhlIG5hbWUgYW5kIG5hbWVsZW4KKyAqIGFyZSBpZ25vcmVkIGFuZCB0aGUgbG9jayBJRCBpbiB0aGUgTEtTQiBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBsb2NrLgorICoKKyAqIERMTV9MS0ZfVkFMQkxLCisgKgorICogUmVxdWVzdHMgRExNIHRvIHJldHVybiB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgbG9jayB2YWx1ZSBibG9jayBpbiB0aGUKKyAqIGxvY2sgc3RhdHVzIGJsb2NrLiAgV2hlbiB0aGlzIGZsYWcgaXMgc2V0IGluIGEgbG9jayBjb252ZXJzaW9uIGZyb20gUFcgb3IgRVgKKyAqIG1vZGVzLCBETE0gYXNzaWducyB0aGUgdmFsdWUgc3BlY2lmaWVkIGluIHRoZSBsb2NrIHN0YXR1cyBibG9jayB0byB0aGUgbG9jaworICogdmFsdWUgYmxvY2sgb2YgdGhlIGxvY2sgcmVzb3VyY2UuICBUaGUgTFZCIGlzIGEgRExNX0xWQl9MRU4gc2l6ZSBhcnJheQorICogY29udGFpbmluZyBhcHBsaWNhdGlvbi1zcGVjaWZpYyBpbmZvcm1hdGlvbi4KKyAqCisgKiBETE1fTEtGX1FVRUNWVAorICoKKyAqIEZvcmNlIGEgY29udmVyc2lvbiByZXF1ZXN0IHRvIGJlIHF1ZXVlZCwgZXZlbiBpZiBpdCBpcyBjb21wYXRpYmxlIHdpdGgKKyAqIHRoZSBncmFudGVkIG1vZGVzIG9mIG90aGVyIGxvY2tzIG9uIHRoZSBzYW1lIHJlc291cmNlLgorICoKKyAqIERMTV9MS0ZfSVZWQUxCTEsKKyAqCisgKiBJbnZhbGlkYXRlIHRoZSBsb2NrIHZhbHVlIGJsb2NrLgorICoKKyAqIERMTV9MS0ZfQ09OVkRFQURMSworICoKKyAqIEFsbG93cyB0aGUgZGxtIHRvIHJlc29sdmUgY29udmVyc2lvbiBkZWFkbG9ja3MgaW50ZXJuYWxseSBieSBkZW1vdGluZyB0aGUKKyAqIGdyYW50ZWQgbW9kZSBvZiBhIGNvbnZlcnRpbmcgbG9jayB0byBOTC4gIFRoZSBETE1fU0JGX0RFTU9URUQgZmxhZyBpcworICogcmV0dXJuZWQgZm9yIGEgY29udmVyc2lvbiB0aGF0J3MgYmVlbiBlZmZlY3RlZCBieSB0aGlzLgorICoKKyAqIERMTV9MS0ZfUEVSU0lTVEVOVAorICoKKyAqIE9ubHkgcmVsZXZhbnQgdG8gbG9ja3Mgb3JpZ2luYXRpbmcgaW4gdXNlcnNwYWNlLiAgQSBwZXJzaXN0ZW50IGxvY2sgd2lsbCBub3QKKyAqIGJlIHJlbW92ZWQgaWYgdGhlIHByb2Nlc3MgaG9sZGluZyB0aGUgbG9jayBleGl0cy4KKyAqCisgKiBETE1fTEtGX05PRExDS1dUCisgKgorICogRG8gbm90IGNhbmNlbCB0aGUgbG9jayBpZiBpdCBnZXRzIGludG8gY29udmVyc2lvbiBkZWFkbG9jay4KKyAqIEV4Y2x1ZGUgdGhpcyBsb2NrIGZyb20gYmVpbmcgbW9uaXRvcmVkIGR1ZSB0byBETE1fTFNGTF9USU1FV0FSTi4KKyAqCisgKiBETE1fTEtGX05PRExDS0JMSworICoKKyAqIG5ldCB5ZXQgaW1wbGVtZW50ZWQKKyAqCisgKiBETE1fTEtGX0VYUEVESVRFCisgKgorICogVXNlZCBvbmx5IHdpdGggbmV3IHJlcXVlc3RzIGZvciBOTCBtb2RlIGxvY2tzLiAgVGVsbHMgdGhlIGxvY2sgbWFuYWdlcgorICogdG8gZ3JhbnQgdGhlIGxvY2ssIGlnbm9yaW5nIG90aGVyIGxvY2tzIGluIGNvbnZlcnQgYW5kIHdhaXQgcXVldWVzLgorICoKKyAqIERMTV9MS0ZfTk9RVUVVRUJBU1QKKyAqCisgKiBTZW5kIGJsb2NraW5nIEFTVCdzIGJlZm9yZSByZXR1cm5pbmcgLUVBR0FJTiB0byB0aGUgY2FsbGVyLiAgSXQgaXMgb25seQorICogdXNlZCBhbG9uZyB3aXRoIHRoZSBOT1FVRVVFIGZsYWcuICBCbG9ja2luZyBBU1QncyBhcmUgbm90IHNlbnQgZm9yIGZhaWxlZAorICogTk9RVUVVRSByZXF1ZXN0cyBvdGhlcndpc2UuCisgKgorICogRExNX0xLRl9IRUFEUVVFCisgKgorICogQWRkIGEgbG9jayB0byB0aGUgaGVhZCBvZiB0aGUgY29udmVydCBvciB3YWl0IHF1ZXVlIHJhdGhlciB0aGFuIHRoZSB0YWlsLgorICoKKyAqIERMTV9MS0ZfTk9PUkRFUgorICoKKyAqIERpc3JlZ2FyZCB0aGUgc3RhbmRhcmQgZ3JhbnQgb3JkZXIgcnVsZXMgYW5kIGdyYW50IGEgbG9jayBhcyBzb29uIGFzIGl0CisgKiBpcyBjb21wYXRpYmxlIHdpdGggb3RoZXIgZ3JhbnRlZCBsb2Nrcy4KKyAqCisgKiBETE1fTEtGX09SUEhBTgorICoKKyAqIG5vdCB5ZXQgaW1wbGVtZW50ZWQKKyAqCisgKiBETE1fTEtGX0FMVFBSCisgKgorICogSWYgdGhlIHJlcXVlc3RlZCBtb2RlIGNhbm5vdCBiZSBncmFudGVkIGltbWVkaWF0ZWx5LCB0cnkgdG8gZ3JhbnQgdGhlIGxvY2sKKyAqIGluIFBSIG1vZGUgaW5zdGVhZC4gIElmIHRoaXMgYWx0ZXJuYXRlIG1vZGUgaXMgZ3JhbnRlZCBpbnN0ZWFkIG9mIHRoZQorICogcmVxdWVzdGVkIG1vZGUsIERMTV9TQkZfQUxUTU9ERSBpcyByZXR1cm5lZCBpbiB0aGUgbGtzYi4KKyAqCisgKiBETE1fTEtGX0FMVENXCisgKgorICogVGhlIHNhbWUgYXMgQUxUUFIsIGJ1dCB0aGUgYWx0ZXJuYXRlIG1vZGUgaXMgQ1cuCisgKgorICogRExNX0xLRl9GT1JDRVVOTE9DSworICoKKyAqIFVubG9jayB0aGUgbG9jayBldmVuIGlmIGl0IGlzIGNvbnZlcnRpbmcgb3Igd2FpdGluZyBvciBoYXMgc3VibG9ja3MuCisgKiBPbmx5IHJlYWxseSBmb3IgdXNlIGJ5IHRoZSB1c2VybGFuZCBkZXZpY2UuYyBjb2RlLgorICoKKyAqLworCisjZGVmaW5lIERMTV9MS0ZfTk9RVUVVRQkJMHgwMDAwMDAwMQorI2RlZmluZSBETE1fTEtGX0NBTkNFTAkJMHgwMDAwMDAwMgorI2RlZmluZSBETE1fTEtGX0NPTlZFUlQJCTB4MDAwMDAwMDQKKyNkZWZpbmUgRExNX0xLRl9WQUxCTEsJCTB4MDAwMDAwMDgKKyNkZWZpbmUgRExNX0xLRl9RVUVDVlQJCTB4MDAwMDAwMTAKKyNkZWZpbmUgRExNX0xLRl9JVlZBTEJMSwkweDAwMDAwMDIwCisjZGVmaW5lIERMTV9MS0ZfQ09OVkRFQURMSwkweDAwMDAwMDQwCisjZGVmaW5lIERMTV9MS0ZfUEVSU0lTVEVOVAkweDAwMDAwMDgwCisjZGVmaW5lIERMTV9MS0ZfTk9ETENLV1QJMHgwMDAwMDEwMAorI2RlZmluZSBETE1fTEtGX05PRExDS0JMSwkweDAwMDAwMjAwCisjZGVmaW5lIERMTV9MS0ZfRVhQRURJVEUJMHgwMDAwMDQwMAorI2RlZmluZSBETE1fTEtGX05PUVVFVUVCQVNUCTB4MDAwMDA4MDAKKyNkZWZpbmUgRExNX0xLRl9IRUFEUVVFCQkweDAwMDAxMDAwCisjZGVmaW5lIERMTV9MS0ZfTk9PUkRFUgkJMHgwMDAwMjAwMAorI2RlZmluZSBETE1fTEtGX09SUEhBTgkJMHgwMDAwNDAwMAorI2RlZmluZSBETE1fTEtGX0FMVFBSCQkweDAwMDA4MDAwCisjZGVmaW5lIERMTV9MS0ZfQUxUQ1cJCTB4MDAwMTAwMDAKKyNkZWZpbmUgRExNX0xLRl9GT1JDRVVOTE9DSwkweDAwMDIwMDAwCisjZGVmaW5lIERMTV9MS0ZfVElNRU9VVAkJMHgwMDA0MDAwMAorCisvKgorICogU29tZSByZXR1cm4gY29kZXMgdGhhdCBhcmUgbm90IGluIGVycm5vLmgKKyAqLworCisjZGVmaW5lIERMTV9FQ0FOQ0VMCQkweDEwMDAxCisjZGVmaW5lIERMTV9FVU5MT0NLCQkweDEwMDAyCisKKyNlbmRpZiAgLyogX19ETE1DT05TVEFOVFNfRE9UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2RtLWlvY3RsLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZG0taW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWVhYjM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2RtLWlvY3RsLmgKQEAgLTAsMCArMSwzMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgLSAyMDAzIFNpc3RpbmEgU29mdHdhcmUgKFVLKSBMaW1pdGVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBSZWQgSGF0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBMR1BMLgorICovCisKKyNpZm5kZWYgX0xJTlVYX0RNX0lPQ1RMX1Y0X0gKKyNkZWZpbmUgX0xJTlVYX0RNX0lPQ1RMX1Y0X0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgRE1fRElSICJtYXBwZXIiCQkvKiBTbGFzaGVzIG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgRE1fQ09OVFJPTF9OT0RFICJjb250cm9sIgorI2RlZmluZSBETV9NQVhfVFlQRV9OQU1FIDE2CisjZGVmaW5lIERNX05BTUVfTEVOIDEyOAorI2RlZmluZSBETV9VVUlEX0xFTiAxMjkKKworLyoKKyAqIEEgdHJhZGl0aW9uYWwgaW9jdGwgaW50ZXJmYWNlIGZvciB0aGUgZGV2aWNlIG1hcHBlci4KKyAqCisgKiBFYWNoIGRldmljZSBjYW4gaGF2ZSB0d28gdGFibGVzIGFzc29jaWF0ZWQgd2l0aCBpdCwgYW4KKyAqICdhY3RpdmUnIHRhYmxlIHdoaWNoIGlzIHRoZSBvbmUgY3VycmVudGx5IHVzZWQgYnkgaW8gcGFzc2luZworICogdGhyb3VnaCB0aGUgZGV2aWNlLCBhbmQgYW4gJ2luYWN0aXZlJyBvbmUgd2hpY2ggaXMgYSB0YWJsZQorICogdGhhdCBpcyBiZWluZyBwcmVwYXJlZCBhcyBhIHJlcGxhY2VtZW50IGZvciB0aGUgJ2FjdGl2ZScgb25lLgorICoKKyAqIERNX1ZFUlNJT046CisgKiBKdXN0IGdldCB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGlvY3RsIGludGVyZmFjZS4KKyAqCisgKiBETV9SRU1PVkVfQUxMOgorICogUmVtb3ZlIGFsbCBkbSBkZXZpY2VzLCBkZXN0cm95IGFsbCB0YWJsZXMuICBPbmx5IHJlYWxseSB1c2VkCisgKiBmb3IgZGVidWcuCisgKgorICogRE1fTElTVF9ERVZJQ0VTOgorICogR2V0IGEgbGlzdCBvZiBhbGwgdGhlIGRtIGRldmljZSBuYW1lcy4KKyAqCisgKiBETV9ERVZfQ1JFQVRFOgorICogQ3JlYXRlIGEgbmV3IGRldmljZSwgbmVpdGhlciB0aGUgJ2FjdGl2ZScgb3IgJ2luYWN0aXZlJyB0YWJsZQorICogc2xvdHMgd2lsbCBiZSBmaWxsZWQuICBUaGUgZGV2aWNlIHdpbGwgYmUgaW4gc3VzcGVuZGVkIHN0YXRlCisgKiBhZnRlciBjcmVhdGlvbiwgaG93ZXZlciBhbnkgaW8gdG8gdGhlIGRldmljZSB3aWxsIGdldCBlcnJvcmVkCisgKiBzaW5jZSBpdCB3aWxsIGJlIG91dC1vZi1ib3VuZHMuCisgKgorICogRE1fREVWX1JFTU9WRToKKyAqIFJlbW92ZSBhIGRldmljZSwgZGVzdHJveSBhbnkgdGFibGVzLgorICoKKyAqIERNX0RFVl9SRU5BTUU6CisgKiBSZW5hbWUgYSBkZXZpY2UuCisgKgorICogRE1fU1VTUEVORDoKKyAqIFRoaXMgcGVyZm9ybXMgYm90aCBzdXNwZW5kIGFuZCByZXN1bWUsIGRlcGVuZGluZyB3aGljaCBmbGFnIGlzCisgKiBwYXNzZWQgaW4uCisgKiBTdXNwZW5kOiBUaGlzIGNvbW1hbmQgd2lsbCBub3QgcmV0dXJuIHVudGlsIGFsbCBwZW5kaW5nIGlvIHRvCisgKiB0aGUgZGV2aWNlIGhhcyBjb21wbGV0ZWQuICBGdXJ0aGVyIGlvIHdpbGwgYmUgZGVmZXJyZWQgdW50aWwKKyAqIHRoZSBkZXZpY2UgaXMgcmVzdW1lZC4KKyAqIFJlc3VtZTogSXQgaXMgbm8gbG9uZ2VyIGFuIGVycm9yIHRvIGlzc3VlIHRoaXMgY29tbWFuZCBvbiBhbgorICogdW5zdXNwZW5kZWQgZGV2aWNlLiAgSWYgYSB0YWJsZSBpcyBwcmVzZW50IGluIHRoZSAnaW5hY3RpdmUnCisgKiBzbG90LCBpdCB3aWxsIGJlIG1vdmVkIHRvIHRoZSBhY3RpdmUgc2xvdCwgdGhlbiB0aGUgb2xkIHRhYmxlCisgKiBmcm9tIHRoZSBhY3RpdmUgc2xvdCB3aWxsIGJlIF9kZXN0cm95ZWRfLiAgRmluYWxseSB0aGUgZGV2aWNlCisgKiBpcyByZXN1bWVkLgorICoKKyAqIERNX0RFVl9TVEFUVVM6CisgKiBSZXRyaWV2ZXMgdGhlIHN0YXR1cyBmb3IgdGhlIHRhYmxlIGluIHRoZSAnYWN0aXZlJyBzbG90LgorICoKKyAqIERNX0RFVl9XQUlUOgorICogV2FpdCBmb3IgYSBzaWduaWZpY2FudCBldmVudCB0byBvY2N1ciB0byB0aGUgZGV2aWNlLiAgVGhpcworICogY291bGQgZWl0aGVyIGJlIGNhdXNlZCBieSBhbiBldmVudCB0cmlnZ2VyZWQgYnkgb25lIG9mIHRoZQorICogdGFyZ2V0cyBvZiB0aGUgdGFibGUgaW4gdGhlICdhY3RpdmUnIHNsb3QsIG9yIGEgdGFibGUgY2hhbmdlLgorICoKKyAqIERNX1RBQkxFX0xPQUQ6CisgKiBMb2FkIGEgdGFibGUgaW50byB0aGUgJ2luYWN0aXZlJyBzbG90IGZvciB0aGUgZGV2aWNlLiAgVGhlCisgKiBkZXZpY2UgZG9lcyBfbm90XyBuZWVkIHRvIGJlIHN1c3BlbmRlZCBwcmlvciB0byB0aGlzIGNvbW1hbmQuCisgKgorICogRE1fVEFCTEVfQ0xFQVI6CisgKiBEZXN0cm95IGFueSB0YWJsZSBpbiB0aGUgJ2luYWN0aXZlJyBzbG90IChpZS4gYWJvcnQpLgorICoKKyAqIERNX1RBQkxFX0RFUFM6CisgKiBSZXR1cm4gYSBzZXQgb2YgZGV2aWNlIGRlcGVuZGVuY2llcyBmb3IgdGhlICdhY3RpdmUnIHRhYmxlLgorICoKKyAqIERNX1RBQkxFX1NUQVRVUzoKKyAqIFJldHVybiB0aGUgdGFyZ2V0cyBzdGF0dXMgZm9yIHRoZSAnYWN0aXZlJyB0YWJsZS4KKyAqCisgKiBETV9UQVJHRVRfTVNHOgorICogUGFzcyBhIG1lc3NhZ2Ugc3RyaW5nIHRvIHRoZSB0YXJnZXQgYXQgYSBzcGVjaWZpYyBvZmZzZXQgb2YgYSBkZXZpY2UuCisgKgorICogRE1fREVWX1NFVF9HRU9NRVRSWToKKyAqIFNldCB0aGUgZ2VvbWV0cnkgb2YgYSBkZXZpY2UgYnkgcGFzc2luZyBpbiBhIHN0cmluZyBpbiB0aGlzIGZvcm1hdDoKKyAqCisgKiAiY3lsaW5kZXJzIGhlYWRzIHNlY3RvcnNfcGVyX3RyYWNrIHN0YXJ0X3NlY3RvciIKKyAqCisgKiBCZXdhcmUgdGhhdCBDSFMgZ2VvbWV0cnkgaXMgbmVhcmx5IG9ic29sZXRlIGFuZCBvbmx5IHByb3ZpZGVkCisgKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGRtIGRldmljZXMgdGhhdCBjYW4gYmUgYm9vdGVkIGJ5IGEgUEMKKyAqIEJJT1MuICBTZWUgc3RydWN0IGhkX2dlb21ldHJ5IGZvciByYW5nZSBsaW1pdHMuICBBbHNvIG5vdGUgdGhhdAorICogdGhlIGdlb21ldHJ5IGlzIGVyYXNlZCBpZiB0aGUgZGV2aWNlIHNpemUgY2hhbmdlcy4KKyAqLworCisvKgorICogQWxsIGlvY3RsIGFyZ3VtZW50cyBjb25zaXN0IG9mIGEgc2luZ2xlIGNodW5rIG9mIG1lbW9yeSwgd2l0aAorICogdGhpcyBzdHJ1Y3R1cmUgYXQgdGhlIHN0YXJ0LiAgSWYgYSB1dWlkIGlzIHNwZWNpZmllZCBhbnkKKyAqIGxvb2t1cCAoZWcuIGZvciBhIERNX0lORk8pIHdpbGwgYmUgZG9uZSBvbiB0aGF0LCAqbm90KiB0aGUKKyAqIG5hbWUuCisgKi8KK3N0cnVjdCBkbV9pb2N0bCB7CisJLyoKKwkgKiBUaGUgdmVyc2lvbiBudW1iZXIgaXMgbWFkZSB1cCBvZiB0aHJlZSBwYXJ0czoKKwkgKiBtYWpvciAtIG5vIGJhY2t3YXJkIG9yIGZvcndhcmQgY29tcGF0aWJpbGl0eSwKKwkgKiBtaW5vciAtIG9ubHkgYmFja3dhcmRzIGNvbXBhdGlibGUsCisJICogcGF0Y2ggLSBib3RoIGJhY2t3YXJkcyBhbmQgZm9yd2FyZHMgY29tcGF0aWJsZS4KKwkgKgorCSAqIEFsbCBjbGllbnRzIG9mIHRoZSBpb2N0bCBpbnRlcmZhY2Ugc2hvdWxkIGZpbGwgaW4gdGhlCisJICogdmVyc2lvbiBudW1iZXIgb2YgdGhlIGludGVyZmFjZSB0aGF0IHRoZXkgd2VyZQorCSAqIGNvbXBpbGVkIHdpdGguCisJICoKKwkgKiBBbGwgcmVjb2duaXNlZCBpb2N0bCBjb21tYW5kcyAoaWUuIHRob3NlIHRoYXQgZG9uJ3QKKwkgKiByZXR1cm4gLUVOT1RUWSkgZmlsbCBvdXQgdGhpcyBmaWVsZCwgZXZlbiBpZiB0aGUKKwkgKiBjb21tYW5kIGZhaWxlZC4KKwkgKi8KKwlfX3UzMiB2ZXJzaW9uWzNdOwkvKiBpbi9vdXQgKi8KKwlfX3UzMiBkYXRhX3NpemU7CS8qIHRvdGFsIHNpemUgb2YgZGF0YSBwYXNzZWQgaW4KKwkJCQkgKiBpbmNsdWRpbmcgdGhpcyBzdHJ1Y3QgKi8KKworCV9fdTMyIGRhdGFfc3RhcnQ7CS8qIG9mZnNldCB0byBzdGFydCBvZiBkYXRhCisJCQkJICogcmVsYXRpdmUgdG8gc3RhcnQgb2YgdGhpcyBzdHJ1Y3QgKi8KKworCV9fdTMyIHRhcmdldF9jb3VudDsJLyogaW4vb3V0ICovCisJX19zMzIgb3Blbl9jb3VudDsJLyogb3V0ICovCisJX191MzIgZmxhZ3M7CQkvKiBpbi9vdXQgKi8KKworCS8qCisJICogZXZlbnRfbnIgaG9sZHMgZWl0aGVyIHRoZSBldmVudCBudW1iZXIgKGlucHV0IGFuZCBvdXRwdXQpIG9yIHRoZQorCSAqIHVkZXYgY29va2llIHZhbHVlIChpbnB1dCBvbmx5KS4KKwkgKiBUaGUgRE1fREVWX1dBSVQgaW9jdGwgdGFrZXMgYW4gZXZlbnQgbnVtYmVyIGFzIGlucHV0LgorCSAqIFRoZSBETV9TVVNQRU5ELCBETV9ERVZfUkVNT1ZFIGFuZCBETV9ERVZfUkVOQU1FIGlvY3RscworCSAqIHVzZSB0aGUgZmllbGQgYXMgYSBjb29raWUgdG8gcmV0dXJuIGluIHRoZSBETV9DT09LSUUKKwkgKiB2YXJpYWJsZSB3aXRoIHRoZSB1ZXZlbnRzIHRoZXkgaXNzdWUuCisJICogRm9yIG91dHB1dCwgdGhlIGlvY3RscyByZXR1cm4gdGhlIGV2ZW50IG51bWJlciwgbm90IHRoZSBjb29raWUuCisJICovCisJX191MzIgZXZlbnRfbnI7ICAgICAgCS8qIGluL291dCAqLworCV9fdTMyIHBhZGRpbmc7CisKKwlfX3U2NCBkZXY7CQkvKiBpbi9vdXQgKi8KKworCWNoYXIgbmFtZVtETV9OQU1FX0xFTl07CS8qIGRldmljZSBuYW1lICovCisJY2hhciB1dWlkW0RNX1VVSURfTEVOXTsJLyogdW5pcXVlIGlkZW50aWZpZXIgZm9yCisJCQkJICogdGhlIGJsb2NrIGRldmljZSAqLworCWNoYXIgZGF0YVs3XTsJCS8qIHBhZGRpbmcgb3IgZGF0YSAqLworfTsKKworLyoKKyAqIFVzZWQgdG8gc3BlY2lmeSB0YWJsZXMuICBUaGVzZSBzdHJ1Y3R1cmVzIGFwcGVhciBhZnRlciB0aGUKKyAqIGRtX2lvY3RsLgorICovCitzdHJ1Y3QgZG1fdGFyZ2V0X3NwZWMgeworCV9fdTY0IHNlY3Rvcl9zdGFydDsKKwlfX3U2NCBsZW5ndGg7CisJX19zMzIgc3RhdHVzOwkJLyogdXNlZCB3aGVuIHJlYWRpbmcgZnJvbSBrZXJuZWwgb25seSAqLworCisJLyoKKwkgKiBMb2NhdGlvbiBvZiB0aGUgbmV4dCBkbV90YXJnZXRfc3BlYy4KKwkgKiAtIFdoZW4gc3BlY2lmeWluZyB0YXJnZXRzIG9uIGEgRE1fVEFCTEVfTE9BRCBjb21tYW5kLCB0aGlzIHZhbHVlIGlzCisJICogICB0aGUgbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSAiY3VycmVudCIgZG1fdGFyZ2V0X3NwZWMKKwkgKiAgIHRvIHRoZSBzdGFydCBvZiB0aGUgIm5leHQiIGRtX3RhcmdldF9zcGVjLgorCSAqIC0gV2hlbiByZXRyaWV2aW5nIHRhcmdldHMgb24gYSBETV9UQUJMRV9TVEFUVVMgY29tbWFuZCwgdGhpcyB2YWx1ZQorCSAqICAgaXMgdGhlIG51bWJlciBvZiBieXRlcyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgZG1fdGFyZ2V0X3NwZWMKKwkgKiAgICh0aGF0IGZvbGxvd3MgdGhlIGRtX2lvY3RsIHN0cnVjdCkgdG8gdGhlIHN0YXJ0IG9mIHRoZSAibmV4dCIKKwkgKiAgIGRtX3RhcmdldF9zcGVjLgorCSAqLworCV9fdTMyIG5leHQ7CisKKwljaGFyIHRhcmdldF90eXBlW0RNX01BWF9UWVBFX05BTUVdOworCisJLyoKKwkgKiBQYXJhbWV0ZXIgc3RyaW5nIHN0YXJ0cyBpbW1lZGlhdGVseSBhZnRlciB0aGlzIG9iamVjdC4KKwkgKiBCZSBjYXJlZnVsIHRvIGFkZCBwYWRkaW5nIGFmdGVyIHN0cmluZyB0byBlbnN1cmUgY29ycmVjdAorCSAqIGFsaWdubWVudCBvZiBzdWJzZXF1ZW50IGRtX3RhcmdldF9zcGVjLgorCSAqLworfTsKKworLyoKKyAqIFVzZWQgdG8gcmV0cmlldmUgdGhlIHRhcmdldCBkZXBlbmRlbmNpZXMuCisgKi8KK3N0cnVjdCBkbV90YXJnZXRfZGVwcyB7CisJX191MzIgY291bnQ7CS8qIEFycmF5IHNpemUgKi8KKwlfX3UzMiBwYWRkaW5nOwkvKiB1bnVzZWQgKi8KKwlfX3U2NCBkZXZbMF07CS8qIG91dCAqLworfTsKKworLyoKKyAqIFVzZWQgdG8gZ2V0IGEgbGlzdCBvZiBhbGwgZG0gZGV2aWNlcy4KKyAqLworc3RydWN0IGRtX25hbWVfbGlzdCB7CisJX191NjQgZGV2OworCV9fdTMyIG5leHQ7CQkvKiBvZmZzZXQgdG8gdGhlIG5leHQgcmVjb3JkIGZyb20KKwkJCQkgICB0aGUgX3N0YXJ0XyBvZiB0aGlzICovCisJY2hhciBuYW1lWzBdOworfTsKKworLyoKKyAqIFVzZWQgdG8gcmV0cmlldmUgdGhlIHRhcmdldCB2ZXJzaW9ucworICovCitzdHJ1Y3QgZG1fdGFyZ2V0X3ZlcnNpb25zIHsKKyAgICAgICAgX191MzIgbmV4dDsKKyAgICAgICAgX191MzIgdmVyc2lvblszXTsKKworICAgICAgICBjaGFyIG5hbWVbMF07Cit9OworCisvKgorICogVXNlZCB0byBwYXNzIG1lc3NhZ2UgdG8gYSB0YXJnZXQKKyAqLworc3RydWN0IGRtX3RhcmdldF9tc2cgeworCV9fdTY0IHNlY3RvcjsJLyogRGV2aWNlIHNlY3RvciAqLworCisJY2hhciBtZXNzYWdlWzBdOworfTsKKworLyoKKyAqIElmIHlvdSBjaGFuZ2UgdGhpcyBtYWtlIHN1cmUgeW91IG1ha2UgdGhlIGNvcnJlc3BvbmRpbmcgY2hhbmdlCisgKiB0byBkbS1pb2N0bC5jOmxvb2t1cF9pb2N0bCgpCisgKi8KK2VudW0geworCS8qIFRvcCBsZXZlbCBjbWRzICovCisJRE1fVkVSU0lPTl9DTUQgPSAwLAorCURNX1JFTU9WRV9BTExfQ01ELAorCURNX0xJU1RfREVWSUNFU19DTUQsCisKKwkvKiBkZXZpY2UgbGV2ZWwgY21kcyAqLworCURNX0RFVl9DUkVBVEVfQ01ELAorCURNX0RFVl9SRU1PVkVfQ01ELAorCURNX0RFVl9SRU5BTUVfQ01ELAorCURNX0RFVl9TVVNQRU5EX0NNRCwKKwlETV9ERVZfU1RBVFVTX0NNRCwKKwlETV9ERVZfV0FJVF9DTUQsCisKKwkvKiBUYWJsZSBsZXZlbCBjbWRzICovCisJRE1fVEFCTEVfTE9BRF9DTUQsCisJRE1fVEFCTEVfQ0xFQVJfQ01ELAorCURNX1RBQkxFX0RFUFNfQ01ELAorCURNX1RBQkxFX1NUQVRVU19DTUQsCisKKwkvKiBBZGRlZCBsYXRlciAqLworCURNX0xJU1RfVkVSU0lPTlNfQ01ELAorCURNX1RBUkdFVF9NU0dfQ01ELAorCURNX0RFVl9TRVRfR0VPTUVUUllfQ01ECit9OworCisjZGVmaW5lIERNX0lPQ1RMIDB4ZmQKKworI2RlZmluZSBETV9WRVJTSU9OICAgICAgIF9JT1dSKERNX0lPQ1RMLCBETV9WRVJTSU9OX0NNRCwgc3RydWN0IGRtX2lvY3RsKQorI2RlZmluZSBETV9SRU1PVkVfQUxMICAgIF9JT1dSKERNX0lPQ1RMLCBETV9SRU1PVkVfQUxMX0NNRCwgc3RydWN0IGRtX2lvY3RsKQorI2RlZmluZSBETV9MSVNUX0RFVklDRVMgIF9JT1dSKERNX0lPQ1RMLCBETV9MSVNUX0RFVklDRVNfQ01ELCBzdHJ1Y3QgZG1faW9jdGwpCisKKyNkZWZpbmUgRE1fREVWX0NSRUFURSAgICBfSU9XUihETV9JT0NUTCwgRE1fREVWX0NSRUFURV9DTUQsIHN0cnVjdCBkbV9pb2N0bCkKKyNkZWZpbmUgRE1fREVWX1JFTU9WRSAgICBfSU9XUihETV9JT0NUTCwgRE1fREVWX1JFTU9WRV9DTUQsIHN0cnVjdCBkbV9pb2N0bCkKKyNkZWZpbmUgRE1fREVWX1JFTkFNRSAgICBfSU9XUihETV9JT0NUTCwgRE1fREVWX1JFTkFNRV9DTUQsIHN0cnVjdCBkbV9pb2N0bCkKKyNkZWZpbmUgRE1fREVWX1NVU1BFTkQgICBfSU9XUihETV9JT0NUTCwgRE1fREVWX1NVU1BFTkRfQ01ELCBzdHJ1Y3QgZG1faW9jdGwpCisjZGVmaW5lIERNX0RFVl9TVEFUVVMgICAgX0lPV1IoRE1fSU9DVEwsIERNX0RFVl9TVEFUVVNfQ01ELCBzdHJ1Y3QgZG1faW9jdGwpCisjZGVmaW5lIERNX0RFVl9XQUlUICAgICAgX0lPV1IoRE1fSU9DVEwsIERNX0RFVl9XQUlUX0NNRCwgc3RydWN0IGRtX2lvY3RsKQorCisjZGVmaW5lIERNX1RBQkxFX0xPQUQgICAgX0lPV1IoRE1fSU9DVEwsIERNX1RBQkxFX0xPQURfQ01ELCBzdHJ1Y3QgZG1faW9jdGwpCisjZGVmaW5lIERNX1RBQkxFX0NMRUFSICAgX0lPV1IoRE1fSU9DVEwsIERNX1RBQkxFX0NMRUFSX0NNRCwgc3RydWN0IGRtX2lvY3RsKQorI2RlZmluZSBETV9UQUJMRV9ERVBTICAgIF9JT1dSKERNX0lPQ1RMLCBETV9UQUJMRV9ERVBTX0NNRCwgc3RydWN0IGRtX2lvY3RsKQorI2RlZmluZSBETV9UQUJMRV9TVEFUVVMgIF9JT1dSKERNX0lPQ1RMLCBETV9UQUJMRV9TVEFUVVNfQ01ELCBzdHJ1Y3QgZG1faW9jdGwpCisKKyNkZWZpbmUgRE1fTElTVF9WRVJTSU9OUyBfSU9XUihETV9JT0NUTCwgRE1fTElTVF9WRVJTSU9OU19DTUQsIHN0cnVjdCBkbV9pb2N0bCkKKworI2RlZmluZSBETV9UQVJHRVRfTVNHCSBfSU9XUihETV9JT0NUTCwgRE1fVEFSR0VUX01TR19DTUQsIHN0cnVjdCBkbV9pb2N0bCkKKyNkZWZpbmUgRE1fREVWX1NFVF9HRU9NRVRSWQlfSU9XUihETV9JT0NUTCwgRE1fREVWX1NFVF9HRU9NRVRSWV9DTUQsIHN0cnVjdCBkbV9pb2N0bCkKKworI2RlZmluZSBETV9WRVJTSU9OX01BSk9SCTQKKyNkZWZpbmUgRE1fVkVSU0lPTl9NSU5PUgkxOAorI2RlZmluZSBETV9WRVJTSU9OX1BBVENITEVWRUwJMAorI2RlZmluZSBETV9WRVJTSU9OX0VYVFJBCSItaW9jdGwgKDIwMTAtMDYtMjkpIgorCisvKiBTdGF0dXMgYml0cyAqLworI2RlZmluZSBETV9SRUFET05MWV9GTEFHCSgxIDw8IDApIC8qIEluL091dCAqLworI2RlZmluZSBETV9TVVNQRU5EX0ZMQUcJCSgxIDw8IDEpIC8qIEluL091dCAqLworI2RlZmluZSBETV9QRVJTSVNURU5UX0RFVl9GTEFHCSgxIDw8IDMpIC8qIEluICovCisKKy8qCisgKiBGbGFnIHBhc3NlZCBpbnRvIGlvY3RsIFNUQVRVUyBjb21tYW5kIHRvIGdldCB0YWJsZSBpbmZvcm1hdGlvbgorICogcmF0aGVyIHRoYW4gY3VycmVudCBzdGF0dXMuCisgKi8KKyNkZWZpbmUgRE1fU1RBVFVTX1RBQkxFX0ZMQUcJKDEgPDwgNCkgLyogSW4gKi8KKworLyoKKyAqIEZsYWdzIHRoYXQgaW5kaWNhdGUgd2hldGhlciBhIHRhYmxlIGlzIHByZXNlbnQgaW4gZWl0aGVyIG9mCisgKiB0aGUgdHdvIHRhYmxlIHNsb3RzIHRoYXQgYSBkZXZpY2UgaGFzLgorICovCisjZGVmaW5lIERNX0FDVElWRV9QUkVTRU5UX0ZMQUcgICAoMSA8PCA1KSAvKiBPdXQgKi8KKyNkZWZpbmUgRE1fSU5BQ1RJVkVfUFJFU0VOVF9GTEFHICgxIDw8IDYpIC8qIE91dCAqLworCisvKgorICogSW5kaWNhdGVzIHRoYXQgdGhlIGJ1ZmZlciBwYXNzZWQgaW4gd2Fzbid0IGJpZyBlbm91Z2ggZm9yIHRoZQorICogcmVzdWx0cy4KKyAqLworI2RlZmluZSBETV9CVUZGRVJfRlVMTF9GTEFHCSgxIDw8IDgpIC8qIE91dCAqLworCisvKgorICogVGhpcyBmbGFnIGlzIG5vdyBpZ25vcmVkLgorICovCisjZGVmaW5lIERNX1NLSVBfQkRHRVRfRkxBRwkoMSA8PCA5KSAvKiBJbiAqLworCisvKgorICogU2V0IHRoaXMgdG8gYXZvaWQgYXR0ZW1wdGluZyB0byBmcmVlemUgYW55IGZpbGVzeXN0ZW0gd2hlbiBzdXNwZW5kaW5nLgorICovCisjZGVmaW5lIERNX1NLSVBfTE9DS0ZTX0ZMQUcJKDEgPDwgMTApIC8qIEluICovCisKKy8qCisgKiBTZXQgdGhpcyB0byBzdXNwZW5kIHdpdGhvdXQgZmx1c2hpbmcgcXVldWVkIGlvcy4KKyAqLworI2RlZmluZSBETV9OT0ZMVVNIX0ZMQUcJCSgxIDw8IDExKSAvKiBJbiAqLworCisvKgorICogSWYgc2V0LCBhbnkgdGFibGUgaW5mb3JtYXRpb24gcmV0dXJuZWQgd2lsbCByZWxhdGUgdG8gdGhlIGluYWN0aXZlCisgKiB0YWJsZSBpbnN0ZWFkIG9mIHRoZSBsaXZlIG9uZS4gIEFsd2F5cyBjaGVjayBETV9JTkFDVElWRV9QUkVTRU5UX0ZMQUcKKyAqIGlzIHNldCBiZWZvcmUgdXNpbmcgdGhlIGRhdGEgcmV0dXJuZWQuCisgKi8KKyNkZWZpbmUgRE1fUVVFUllfSU5BQ1RJVkVfVEFCTEVfRkxBRwkoMSA8PCAxMikgLyogSW4gKi8KKworLyoKKyAqIElmIHNldCwgYSB1ZXZlbnQgd2FzIGdlbmVyYXRlZCBmb3Igd2hpY2ggdGhlIGNhbGxlciBtYXkgbmVlZCB0byB3YWl0LgorICovCisjZGVmaW5lIERNX1VFVkVOVF9HRU5FUkFURURfRkxBRwkoMSA8PCAxMykgLyogT3V0ICovCisKKyNlbmRpZgkJCQkvKiBfTElOVVhfRE1fSU9DVExfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2RtLWxvZy11c2Vyc3BhY2UuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9kbS1sb2ctdXNlcnNwYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMzYzNhMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9kbS1sb2ctdXNlcnNwYWNlLmgKQEAgLTAsMCArMSwzOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBSZWQgSGF0LCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBMR1BMLgorICovCisKKyNpZm5kZWYgX19ETV9MT0dfVVNFUlNQQUNFX0hfXworI2RlZmluZSBfX0RNX0xPR19VU0VSU1BBQ0VfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9kbS1pb2N0bC5oPiAvKiBGb3IgRE1fVVVJRF9MRU4gKi8KKworLyoKKyAqIFRoZSBkZXZpY2UtbWFwcGVyIHVzZXJzcGFjZSBsb2cgbW9kdWxlIGNvbnNpc3RzIG9mIGEga2VybmVsIGNvbXBvbmVudCBhbmQKKyAqIGEgdXNlci1zcGFjZSBjb21wb25lbnQuICBUaGUga2VybmVsIGNvbXBvbmVudCBpbXBsZW1lbnRzIHRoZSBBUEkgZGVmaW5lZAorICogaW4gZG0tZGlydHktbG9nLmguICBJdHMgcHVycG9zZSBpcyBzaW1wbHkgdG8gcGFzcyB0aGUgcGFyYW1ldGVycyBhbmQKKyAqIHJldHVybiB2YWx1ZXMgb2YgdGhvc2UgQVBJIGZ1bmN0aW9ucyBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlci1zcGFjZS4KKyAqCisgKiBCZWxvdyBhcmUgZGVmaW5lZCB0aGUgJ3JlcXVlc3RfdHlwZXMnIC0gRE1fVUxPR19DVFIsIERNX1VMT0dfRFRSLCBldGMuCisgKiBUaGVzZSByZXF1ZXN0IHR5cGVzIHJlcHJlc2VudCB0aGUgZGlmZmVyZW50IGZ1bmN0aW9ucyBpbiB0aGUgZGV2aWNlLW1hcHBlcgorICogZGlydHkgbG9nIEFQSS4gIEVhY2ggb2YgdGhlc2UgaXMgZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGJlbG93LgorICoKKyAqIFRoZSB1c2VyLXNwYWNlIHByb2dyYW0gbXVzdCBsaXN0ZW4gZm9yIHJlcXVlc3RzIGZyb20gdGhlIGtlcm5lbCAocmVwcmVzZW50aW5nCisgKiB0aGUgdmFyaW91cyBBUEkgZnVuY3Rpb25zKSBhbmQgcHJvY2VzcyB0aGVtLgorICoKKyAqIFVzZXItc3BhY2UgYmVnaW5zIGJ5IHNldHRpbmcgdXAgdGhlIGNvbW11bmljYXRpb24gbGluayAoZXJyb3IgY2hlY2tpbmcKKyAqIHJlbW92ZWQgZm9yIGNsYXJpdHkpOgorICoJZmQgPSBzb2NrZXQoUEZfTkVUTElOSywgU09DS19ER1JBTSwgTkVUTElOS19DT05ORUNUT1IpOworICoJYWRkci5ubF9mYW1pbHkgPSBBRl9ORVRMSU5LOworICoJYWRkci5ubF9ncm91cHMgPSBDTl9JRFhfRE07CisgKglhZGRyLm5sX3BpZCA9IDA7CisgKglyID0gYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwgc2l6ZW9mKGFkZHIpKTsKKyAqCW9wdCA9IGFkZHIubmxfZ3JvdXBzOworICoJc2V0c29ja29wdChmZCwgU09MX05FVExJTkssIE5FVExJTktfQUREX01FTUJFUlNISVAsICZvcHQsIHNpemVvZihvcHQpKTsKKyAqCisgKiBVc2VyLXNwYWNlIHdpbGwgdGhlbiB3YWl0IHRvIHJlY2VpdmUgcmVxdWVzdHMgZm9ybSB0aGUga2VybmVsLCB3aGljaCBpdAorICogd2lsbCBwcm9jZXNzIGFzIGRlc2NyaWJlZCBiZWxvdy4gIFRoZSByZXF1ZXN0cyBhcmUgcmVjZWl2ZWQgaW4gdGhlIGZvcm0sCisgKiAoKHN0cnVjdCBkbV91bG9nX3JlcXVlc3QpICsgKGFkZGl0aW9uYWwgZGF0YSkpLiAgRGVwZW5kaW5nIG9uIHRoZSByZXF1ZXN0CisgKiB0eXBlLCB0aGVyZSBtYXkgb3IgbWF5IG5vdCBiZSAnYWRkaXRpb25hbCBkYXRhJy4gIEluIHRoZSBkZXNjcmlwdGlvbnMgYmVsb3csCisgKiB5b3Ugd2lsbCBzZWUgJ1BheWxvYWQtdG8tdXNlcnNwYWNlJyBhbmQgJ1BheWxvYWQtdG8ta2VybmVsJy4gIFRoZQorICogJ1BheWxvYWQtdG8tdXNlcnNwYWNlJyBpcyB3aGF0IHRoZSBrZXJuZWwgc2VuZHMgaW4gJ2FkZGl0aW9uYWwgZGF0YScgYXMKKyAqIG5lY2Vzc2FyeSBwYXJhbWV0ZXJzIHRvIGNvbXBsZXRlIHRoZSByZXF1ZXN0LiAgVGhlICdQYXlsb2FkLXRvLWtlcm5lbCcgaXMKKyAqIHRoZSAnYWRkaXRpb25hbCBkYXRhJyByZXR1cm5lZCB0byB0aGUga2VybmVsIHRoYXQgY29udGFpbnMgdGhlIG5lY2Vzc2FyeQorICogcmVzdWx0cyBvZiB0aGUgcmVxdWVzdC4gIFRoZSAnZGF0YV9zaXplJyBmaWVsZCBpbiB0aGUgZG1fdWxvZ19yZXF1ZXN0CisgKiBzdHJ1Y3R1cmUgZGVub3RlcyB0aGUgYXZhaWxhYmlsaXR5IGFuZCBhbW91bnQgb2YgcGF5bG9hZCBkYXRhLgorICovCisKKy8qCisgKiBETV9VTE9HX0NUUiBjb3JyZXNwb25kcyB0byAoZm91bmQgaW4gZG0tZGlydHktbG9nLmgpOgorICogaW50ICgqY3RyKShzdHJ1Y3QgZG1fZGlydHlfbG9nICpsb2csIHN0cnVjdCBkbV90YXJnZXQgKnRpLAorICoJICAgICAgdW5zaWduZWQgYXJnYywgY2hhciAqKmFyZ3YpOworICoKKyAqIFBheWxvYWQtdG8tdXNlcnNwYWNlOgorICoJQSBzaW5nbGUgc3RyaW5nIGNvbnRhaW5pbmcgYWxsIHRoZSBhcmd2IGFyZ3VtZW50cyBzZXBhcmF0ZWQgYnkgJyAncworICogUGF5bG9hZC10by1rZXJuZWw6CisgKglOb25lLiAgKCdkYXRhX3NpemUnIGluIHRoZSBkbV91bG9nX3JlcXVlc3Qgc3RydWN0IHNob3VsZCBiZSAwLikKKyAqCisgKiBUaGUgVVVJRCBjb250YWluZWQgaW4gdGhlIGRtX3Vsb2dfcmVxdWVzdCBzdHJ1Y3R1cmUgaXMgdGhlIHJlZmVyZW5jZSB0aGF0CisgKiB3aWxsIGJlIHVzZWQgYnkgYWxsIHJlcXVlc3QgdHlwZXMgdG8gYSBzcGVjaWZpYyBsb2cuICBUaGUgY29uc3RydWN0b3IgbXVzdAorICogcmVjb3JkIHRoaXMgYXNzb3RpYXRpb24gd2l0aCBpbnN0YW5jZSBjcmVhdGVkLgorICoKKyAqIFdoZW4gdGhlIHJlcXVlc3QgaGFzIGJlZW4gcHJvY2Vzc2VkLCB1c2VyLXNwYWNlIG11c3QgcmV0dXJuIHRoZQorICogZG1fdWxvZ19yZXF1ZXN0IHRvIHRoZSBrZXJuZWwgLSBzZXR0aW5nIHRoZSAnZXJyb3InIGZpZWxkIGFuZAorICogJ2RhdGFfc2l6ZScgYXBwcm9wcmlhdGVseS4KKyAqLworI2RlZmluZSBETV9VTE9HX0NUUiAgICAgICAgICAgICAgICAgICAgMQorCisvKgorICogRE1fVUxPR19EVFIgY29ycmVzcG9uZHMgdG8gKGZvdW5kIGluIGRtLWRpcnR5LWxvZy5oKToKKyAqIHZvaWQgKCpkdHIpKHN0cnVjdCBkbV9kaXJ0eV9sb2cgKmxvZyk7CisgKgorICogUGF5bG9hZC10by11c2Vyc3BhY2U6CisgKglBIHNpbmdsZSBzdHJpbmcgY29udGFpbmluZyBhbGwgdGhlIGFyZ3YgYXJndW1lbnRzIHNlcGFyYXRlZCBieSAnICdzCisgKiBQYXlsb2FkLXRvLWtlcm5lbDoKKyAqCU5vbmUuICAoJ2RhdGFfc2l6ZScgaW4gdGhlIGRtX3Vsb2dfcmVxdWVzdCBzdHJ1Y3Qgc2hvdWxkIGJlIDAuKQorICoKKyAqIFRoZSBVVUlEIGNvbnRhaW5lZCBpbiB0aGUgZG1fdWxvZ19yZXF1ZXN0IHN0cnVjdHVyZSBpcyBhbGwgdGhhdCBpcworICogbmVjZXNzYXJ5IHRvIGlkZW50aWZ5IHRoZSBsb2cgaW5zdGFuY2UgYmVpbmcgZGVzdHJveWVkLiAgVGhlcmUgaXMgbm8KKyAqIHBheWxvYWQgZGF0YS4KKyAqCisgKiBXaGVuIHRoZSByZXF1ZXN0IGhhcyBiZWVuIHByb2Nlc3NlZCwgdXNlci1zcGFjZSBtdXN0IHJldHVybiB0aGUKKyAqIGRtX3Vsb2dfcmVxdWVzdCB0byB0aGUga2VybmVsIC0gc2V0dGluZyB0aGUgJ2Vycm9yJyBmaWVsZCBhbmQgY2xlYXJpbmcKKyAqICdkYXRhX3NpemUnIGFwcHJvcHJpYXRlbHkuCisgKi8KKyNkZWZpbmUgRE1fVUxPR19EVFIgICAgICAgICAgICAgICAgICAgIDIKKworLyoKKyAqIERNX1VMT0dfUFJFU1VTUEVORCBjb3JyZXNwb25kcyB0byAoZm91bmQgaW4gZG0tZGlydHktbG9nLmgpOgorICogaW50ICgqcHJlc3VzcGVuZCkoc3RydWN0IGRtX2RpcnR5X2xvZyAqbG9nKTsKKyAqCisgKiBQYXlsb2FkLXRvLXVzZXJzcGFjZToKKyAqCU5vbmUuCisgKiBQYXlsb2FkLXRvLWtlcm5lbDoKKyAqCU5vbmUuCisgKgorICogVGhlIFVVSUQgY29udGFpbmVkIGluIHRoZSBkbV91bG9nX3JlcXVlc3Qgc3RydWN0dXJlIGlzIGFsbCB0aGF0IGlzCisgKiBuZWNlc3NhcnkgdG8gaWRlbnRpZnkgdGhlIGxvZyBpbnN0YW5jZSBiZWluZyBwcmVzdXNwZW5kZWQuICBUaGVyZSBpcyBubworICogcGF5bG9hZCBkYXRhLgorICoKKyAqIFdoZW4gdGhlIHJlcXVlc3QgaGFzIGJlZW4gcHJvY2Vzc2VkLCB1c2VyLXNwYWNlIG11c3QgcmV0dXJuIHRoZQorICogZG1fdWxvZ19yZXF1ZXN0IHRvIHRoZSBrZXJuZWwgLSBzZXR0aW5nIHRoZSAnZXJyb3InIGZpZWxkIGFuZAorICogJ2RhdGFfc2l6ZScgYXBwcm9wcmlhdGVseS4KKyAqLworI2RlZmluZSBETV9VTE9HX1BSRVNVU1BFTkQgICAgICAgICAgICAgMworCisvKgorICogRE1fVUxPR19QT1NUU1VTUEVORCBjb3JyZXNwb25kcyB0byAoZm91bmQgaW4gZG0tZGlydHktbG9nLmgpOgorICogaW50ICgqcG9zdHN1c3BlbmQpKHN0cnVjdCBkbV9kaXJ0eV9sb2cgKmxvZyk7CisgKgorICogUGF5bG9hZC10by11c2Vyc3BhY2U6CisgKglOb25lLgorICogUGF5bG9hZC10by1rZXJuZWw6CisgKglOb25lLgorICoKKyAqIFRoZSBVVUlEIGNvbnRhaW5lZCBpbiB0aGUgZG1fdWxvZ19yZXF1ZXN0IHN0cnVjdHVyZSBpcyBhbGwgdGhhdCBpcworICogbmVjZXNzYXJ5IHRvIGlkZW50aWZ5IHRoZSBsb2cgaW5zdGFuY2UgYmVpbmcgcG9zdHN1c3BlbmRlZC4gIFRoZXJlIGlzIG5vCisgKiBwYXlsb2FkIGRhdGEuCisgKgorICogV2hlbiB0aGUgcmVxdWVzdCBoYXMgYmVlbiBwcm9jZXNzZWQsIHVzZXItc3BhY2UgbXVzdCByZXR1cm4gdGhlCisgKiBkbV91bG9nX3JlcXVlc3QgdG8gdGhlIGtlcm5lbCAtIHNldHRpbmcgdGhlICdlcnJvcicgZmllbGQgYW5kCisgKiAnZGF0YV9zaXplJyBhcHByb3ByaWF0ZWx5LgorICovCisjZGVmaW5lIERNX1VMT0dfUE9TVFNVU1BFTkQgICAgICAgICAgICA0CisKKy8qCisgKiBETV9VTE9HX1JFU1VNRSBjb3JyZXNwb25kcyB0byAoZm91bmQgaW4gZG0tZGlydHktbG9nLmgpOgorICogaW50ICgqcmVzdW1lKShzdHJ1Y3QgZG1fZGlydHlfbG9nICpsb2cpOworICoKKyAqIFBheWxvYWQtdG8tdXNlcnNwYWNlOgorICoJTm9uZS4KKyAqIFBheWxvYWQtdG8ta2VybmVsOgorICoJTm9uZS4KKyAqCisgKiBUaGUgVVVJRCBjb250YWluZWQgaW4gdGhlIGRtX3Vsb2dfcmVxdWVzdCBzdHJ1Y3R1cmUgaXMgYWxsIHRoYXQgaXMKKyAqIG5lY2Vzc2FyeSB0byBpZGVudGlmeSB0aGUgbG9nIGluc3RhbmNlIGJlaW5nIHJlc3VtZWQuICBUaGVyZSBpcyBubworICogcGF5bG9hZCBkYXRhLgorICoKKyAqIFdoZW4gdGhlIHJlcXVlc3QgaGFzIGJlZW4gcHJvY2Vzc2VkLCB1c2VyLXNwYWNlIG11c3QgcmV0dXJuIHRoZQorICogZG1fdWxvZ19yZXF1ZXN0IHRvIHRoZSBrZXJuZWwgLSBzZXR0aW5nIHRoZSAnZXJyb3InIGZpZWxkIGFuZAorICogJ2RhdGFfc2l6ZScgYXBwcm9wcmlhdGVseS4KKyAqLworI2RlZmluZSBETV9VTE9HX1JFU1VNRSAgICAgICAgICAgICAgICAgNQorCisvKgorICogRE1fVUxPR19HRVRfUkVHSU9OX1NJWkUgY29ycmVzcG9uZHMgdG8gKGZvdW5kIGluIGRtLWRpcnR5LWxvZy5oKToKKyAqIHVpbnQzMl90ICgqZ2V0X3JlZ2lvbl9zaXplKShzdHJ1Y3QgZG1fZGlydHlfbG9nICpsb2cpOworICoKKyAqIFBheWxvYWQtdG8tdXNlcnNwYWNlOgorICoJTm9uZS4KKyAqIFBheWxvYWQtdG8ta2VybmVsOgorICoJdWludDY0X3QgLSBjb250YWlucyB0aGUgcmVnaW9uIHNpemUKKyAqCisgKiBUaGUgcmVnaW9uIHNpemUgaXMgc29tZXRoaW5nIHRoYXQgd2FzIGRldGVybWluZWQgYXQgY29uc3RydWN0b3IgdGltZS4KKyAqIEl0IGlzIHJldHVybmVkIGluIHRoZSBwYXlsb2FkIGFyZWEgYW5kICdkYXRhX3NpemUnIGlzIHNldCB0bworICogcmVmbGVjdCB0aGlzLgorICoKKyAqIFdoZW4gdGhlIHJlcXVlc3QgaGFzIGJlZW4gcHJvY2Vzc2VkLCB1c2VyLXNwYWNlIG11c3QgcmV0dXJuIHRoZQorICogZG1fdWxvZ19yZXF1ZXN0IHRvIHRoZSBrZXJuZWwgLSBzZXR0aW5nIHRoZSAnZXJyb3InIGZpZWxkIGFwcHJvcHJpYXRlbHkuCisgKi8KKyNkZWZpbmUgRE1fVUxPR19HRVRfUkVHSU9OX1NJWkUgICAgICAgIDYKKworLyoKKyAqIERNX1VMT0dfSVNfQ0xFQU4gY29ycmVzcG9uZHMgdG8gKGZvdW5kIGluIGRtLWRpcnR5LWxvZy5oKToKKyAqIGludCAoKmlzX2NsZWFuKShzdHJ1Y3QgZG1fZGlydHlfbG9nICpsb2csIHJlZ2lvbl90IHJlZ2lvbik7CisgKgorICogUGF5bG9hZC10by11c2Vyc3BhY2U6CisgKgl1aW50NjRfdCAtIHRoZSByZWdpb24gdG8gZ2V0IGNsZWFuIHN0YXR1cyBvbgorICogUGF5bG9hZC10by1rZXJuZWw6CisgKglpbnQ2NF90ICAtIDEgaWYgY2xlYW4sIDAgb3RoZXJ3aXNlCisgKgorICogUGF5bG9hZCBpcyBzaXplb2YodWludDY0X3QpIGFuZCBjb250YWlucyB0aGUgcmVnaW9uIGZvciB3aGljaCB0aGUgY2xlYW4KKyAqIHN0YXR1cyBpcyBiZWluZyBtYWRlLgorICoKKyAqIFdoZW4gdGhlIHJlcXVlc3QgaGFzIGJlZW4gcHJvY2Vzc2VkLCB1c2VyLXNwYWNlIG11c3QgcmV0dXJuIHRoZQorICogZG1fdWxvZ19yZXF1ZXN0IHRvIHRoZSBrZXJuZWwgLSBmaWxsaW5nIHRoZSBwYXlsb2FkIHdpdGggMCAobm90IGNsZWFuKSBvcgorICogMSAoY2xlYW4pLCBzZXR0aW5nICdkYXRhX3NpemUnIGFuZCAnZXJyb3InIGFwcHJvcHJpYXRlbHkuCisgKi8KKyNkZWZpbmUgRE1fVUxPR19JU19DTEVBTiAgICAgICAgICAgICAgIDcKKworLyoKKyAqIERNX1VMT0dfSU5fU1lOQyBjb3JyZXNwb25kcyB0byAoZm91bmQgaW4gZG0tZGlydHktbG9nLmgpOgorICogaW50ICgqaW5fc3luYykoc3RydWN0IGRtX2RpcnR5X2xvZyAqbG9nLCByZWdpb25fdCByZWdpb24sCisgKgkJICBpbnQgY2FuX2Jsb2NrKTsKKyAqCisgKiBQYXlsb2FkLXRvLXVzZXJzcGFjZToKKyAqCXVpbnQ2NF90IC0gdGhlIHJlZ2lvbiB0byBnZXQgc3luYyBzdGF0dXMgb24KKyAqIFBheWxvYWQtdG8ta2VybmVsOgorICoJaW50NjRfdCAtIDEgaWYgaW4tc3luYywgMCBvdGhlcndpc2UKKyAqCisgKiBFeGFjdGx5IHRoZSBzYW1lIGFzICdpc19jbGVhbicgYWJvdmUsIGV4Y2VwdCB0aGlzIHRpbWUgYXNraW5nICJoYXMgdGhlCisgKiByZWdpb24gYmVlbiByZWNvdmVyZWQ/IiB2cy4gImlzIHRoZSByZWdpb24gbm90IGJlaW5nIG1vZGlmaWVkPyIKKyAqLworI2RlZmluZSBETV9VTE9HX0lOX1NZTkMgICAgICAgICAgICAgICAgOAorCisvKgorICogRE1fVUxPR19GTFVTSCBjb3JyZXNwb25kcyB0byAoZm91bmQgaW4gZG0tZGlydHktbG9nLmgpOgorICogaW50ICgqZmx1c2gpKHN0cnVjdCBkbV9kaXJ0eV9sb2cgKmxvZyk7CisgKgorICogUGF5bG9hZC10by11c2Vyc3BhY2U6CisgKglOb25lLgorICogUGF5bG9hZC10by1rZXJuZWw6CisgKglOb25lLgorICoKKyAqIE5vIGluY29taW5nIG9yIG91dGdvaW5nIHBheWxvYWQuICBTaW1wbHkgZmx1c2ggbG9nIHN0YXRlIHRvIGRpc2suCisgKgorICogV2hlbiB0aGUgcmVxdWVzdCBoYXMgYmVlbiBwcm9jZXNzZWQsIHVzZXItc3BhY2UgbXVzdCByZXR1cm4gdGhlCisgKiBkbV91bG9nX3JlcXVlc3QgdG8gdGhlIGtlcm5lbCAtIHNldHRpbmcgdGhlICdlcnJvcicgZmllbGQgYW5kIGNsZWFyaW5nCisgKiAnZGF0YV9zaXplJyBhcHByb3ByaWF0ZWx5LgorICovCisjZGVmaW5lIERNX1VMT0dfRkxVU0ggICAgICAgICAgICAgICAgICA5CisKKy8qCisgKiBETV9VTE9HX01BUktfUkVHSU9OIGNvcnJlc3BvbmRzIHRvIChmb3VuZCBpbiBkbS1kaXJ0eS1sb2cuaCk6CisgKiB2b2lkICgqbWFya19yZWdpb24pKHN0cnVjdCBkbV9kaXJ0eV9sb2cgKmxvZywgcmVnaW9uX3QgcmVnaW9uKTsKKyAqCisgKiBQYXlsb2FkLXRvLXVzZXJzcGFjZToKKyAqCXVpbnQ2NF90IFtdIC0gcmVnaW9uKHMpIHRvIG1hcmsKKyAqIFBheWxvYWQtdG8ta2VybmVsOgorICoJTm9uZS4KKyAqCisgKiBJbmNvbWluZyBwYXlsb2FkIGNvbnRhaW5zIHRoZSBvbmUgb3IgbW9yZSByZWdpb25zIHRvIG1hcmsgZGlydHkuCisgKiBUaGUgbnVtYmVyIG9mIHJlZ2lvbnMgY29udGFpbmVkIGluIHRoZSBwYXlsb2FkIGNhbiBiZSBkZXRlcm1pbmVkIGZyb20KKyAqICdkYXRhX3NpemUvc2l6ZW9mKHVpbnQ2NF90KScuCisgKgorICogV2hlbiB0aGUgcmVxdWVzdCBoYXMgYmVlbiBwcm9jZXNzZWQsIHVzZXItc3BhY2UgbXVzdCByZXR1cm4gdGhlCisgKiBkbV91bG9nX3JlcXVlc3QgdG8gdGhlIGtlcm5lbCAtIHNldHRpbmcgdGhlICdlcnJvcicgZmllbGQgYW5kIGNsZWFyaW5nCisgKiAnZGF0YV9zaXplJyBhcHByb3ByaWF0ZWx5LgorICovCisjZGVmaW5lIERNX1VMT0dfTUFSS19SRUdJT04gICAgICAgICAgIDEwCisKKy8qCisgKiBETV9VTE9HX0NMRUFSX1JFR0lPTiBjb3JyZXNwb25kcyB0byAoZm91bmQgaW4gZG0tZGlydHktbG9nLmgpOgorICogdm9pZCAoKmNsZWFyX3JlZ2lvbikoc3RydWN0IGRtX2RpcnR5X2xvZyAqbG9nLCByZWdpb25fdCByZWdpb24pOworICoKKyAqIFBheWxvYWQtdG8tdXNlcnNwYWNlOgorICoJdWludDY0X3QgW10gLSByZWdpb24ocykgdG8gY2xlYXIKKyAqIFBheWxvYWQtdG8ta2VybmVsOgorICoJTm9uZS4KKyAqCisgKiBJbmNvbWluZyBwYXlsb2FkIGNvbnRhaW5zIHRoZSBvbmUgb3IgbW9yZSByZWdpb25zIHRvIG1hcmsgY2xlYW4uCisgKiBUaGUgbnVtYmVyIG9mIHJlZ2lvbnMgY29udGFpbmVkIGluIHRoZSBwYXlsb2FkIGNhbiBiZSBkZXRlcm1pbmVkIGZyb20KKyAqICdkYXRhX3NpemUvc2l6ZW9mKHVpbnQ2NF90KScuCisgKgorICogV2hlbiB0aGUgcmVxdWVzdCBoYXMgYmVlbiBwcm9jZXNzZWQsIHVzZXItc3BhY2UgbXVzdCByZXR1cm4gdGhlCisgKiBkbV91bG9nX3JlcXVlc3QgdG8gdGhlIGtlcm5lbCAtIHNldHRpbmcgdGhlICdlcnJvcicgZmllbGQgYW5kIGNsZWFyaW5nCisgKiAnZGF0YV9zaXplJyBhcHByb3ByaWF0ZWx5LgorICovCisjZGVmaW5lIERNX1VMT0dfQ0xFQVJfUkVHSU9OICAgICAgICAgIDExCisKKy8qCisgKiBETV9VTE9HX0dFVF9SRVNZTkNfV09SSyBjb3JyZXNwb25kcyB0byAoZm91bmQgaW4gZG0tZGlydHktbG9nLmgpOgorICogaW50ICgqZ2V0X3Jlc3luY193b3JrKShzdHJ1Y3QgZG1fZGlydHlfbG9nICpsb2csIHJlZ2lvbl90ICpyZWdpb24pOworICoKKyAqIFBheWxvYWQtdG8tdXNlcnNwYWNlOgorICoJTm9uZS4KKyAqIFBheWxvYWQtdG8ta2VybmVsOgorICoJeworICoJCWludDY0X3QgaTsgLS0gMSBpZiByZWNvdmVyeSBuZWNlc3NhcnksIDAgb3RoZXJ3aXNlCisgKgkJdWludDY0X3QgcjsgLS0gVGhlIHJlZ2lvbiB0byByZWNvdmVyIGlmIGk9MQorICoJfQorICogJ2RhdGFfc2l6ZScgc2hvdWxkIGJlIHNldCBhcHByb3ByaWF0ZWx5LgorICoKKyAqIFdoZW4gdGhlIHJlcXVlc3QgaGFzIGJlZW4gcHJvY2Vzc2VkLCB1c2VyLXNwYWNlIG11c3QgcmV0dXJuIHRoZQorICogZG1fdWxvZ19yZXF1ZXN0IHRvIHRoZSBrZXJuZWwgLSBzZXR0aW5nIHRoZSAnZXJyb3InIGZpZWxkIGFwcHJvcHJpYXRlbHkuCisgKi8KKyNkZWZpbmUgRE1fVUxPR19HRVRfUkVTWU5DX1dPUksgICAgICAgMTIKKworLyoKKyAqIERNX1VMT0dfU0VUX1JFR0lPTl9TWU5DIGNvcnJlc3BvbmRzIHRvIChmb3VuZCBpbiBkbS1kaXJ0eS1sb2cuaCk6CisgKiB2b2lkICgqc2V0X3JlZ2lvbl9zeW5jKShzdHJ1Y3QgZG1fZGlydHlfbG9nICpsb2csCisgKgkJCSAgIHJlZ2lvbl90IHJlZ2lvbiwgaW50IGluX3N5bmMpOworICoKKyAqIFBheWxvYWQtdG8tdXNlcnNwYWNlOgorICoJeworICoJCXVpbnQ2NF90IC0gcmVnaW9uIHRvIHNldCBzeW5jIHN0YXRlIG9uCisgKgkJaW50NjRfdCAgLSAwIGlmIG5vdC1pbi1zeW5jLCAxIGlmIGluLXN5bmMKKyAqCX0KKyAqIFBheWxvYWQtdG8ta2VybmVsOgorICoJTm9uZS4KKyAqCisgKiBXaGVuIHRoZSByZXF1ZXN0IGhhcyBiZWVuIHByb2Nlc3NlZCwgdXNlci1zcGFjZSBtdXN0IHJldHVybiB0aGUKKyAqIGRtX3Vsb2dfcmVxdWVzdCB0byB0aGUga2VybmVsIC0gc2V0dGluZyB0aGUgJ2Vycm9yJyBmaWVsZCBhbmQgY2xlYXJpbmcKKyAqICdkYXRhX3NpemUnIGFwcHJvcHJpYXRlbHkuCisgKi8KKyNkZWZpbmUgRE1fVUxPR19TRVRfUkVHSU9OX1NZTkMgICAgICAgMTMKKworLyoKKyAqIERNX1VMT0dfR0VUX1NZTkNfQ09VTlQgY29ycmVzcG9uZHMgdG8gKGZvdW5kIGluIGRtLWRpcnR5LWxvZy5oKToKKyAqIHJlZ2lvbl90ICgqZ2V0X3N5bmNfY291bnQpKHN0cnVjdCBkbV9kaXJ0eV9sb2cgKmxvZyk7CisgKgorICogUGF5bG9hZC10by11c2Vyc3BhY2U6CisgKglOb25lLgorICogUGF5bG9hZC10by1rZXJuZWw6CisgKgl1aW50NjRfdCAtIHRoZSBudW1iZXIgb2YgaW4tc3luYyByZWdpb25zCisgKgorICogTm8gaW5jb21pbmcgcGF5bG9hZC4gIEtlcm5lbC1ib3VuZCBwYXlsb2FkIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YKKyAqIHJlZ2lvbnMgdGhhdCBhcmUgaW4tc3luYyAoaW4gYSBzaXplX3QpLgorICoKKyAqIFdoZW4gdGhlIHJlcXVlc3QgaGFzIGJlZW4gcHJvY2Vzc2VkLCB1c2VyLXNwYWNlIG11c3QgcmV0dXJuIHRoZQorICogZG1fdWxvZ19yZXF1ZXN0IHRvIHRoZSBrZXJuZWwgLSBzZXR0aW5nIHRoZSAnZXJyb3InIGZpZWxkIGFuZAorICogJ2RhdGFfc2l6ZScgYXBwcm9wcmlhdGVseS4KKyAqLworI2RlZmluZSBETV9VTE9HX0dFVF9TWU5DX0NPVU5UICAgICAgICAxNAorCisvKgorICogRE1fVUxPR19TVEFUVVNfSU5GTyBjb3JyZXNwb25kcyB0byAoZm91bmQgaW4gZG0tZGlydHktbG9nLmgpOgorICogaW50ICgqc3RhdHVzKShzdHJ1Y3QgZG1fZGlydHlfbG9nICpsb2csIFNUQVRVU1RZUEVfSU5GTywKKyAqCQkgY2hhciAqcmVzdWx0LCB1bnNpZ25lZCBtYXhsZW4pOworICoKKyAqIFBheWxvYWQtdG8tdXNlcnNwYWNlOgorICoJTm9uZS4KKyAqIFBheWxvYWQtdG8ta2VybmVsOgorICoJQ2hhcmFjdGVyIHN0cmluZyBjb250YWluaW5nIFNUQVRVU1RZUEVfSU5GTworICoKKyAqIFdoZW4gdGhlIHJlcXVlc3QgaGFzIGJlZW4gcHJvY2Vzc2VkLCB1c2VyLXNwYWNlIG11c3QgcmV0dXJuIHRoZQorICogZG1fdWxvZ19yZXF1ZXN0IHRvIHRoZSBrZXJuZWwgLSBzZXR0aW5nIHRoZSAnZXJyb3InIGZpZWxkIGFuZAorICogJ2RhdGFfc2l6ZScgYXBwcm9wcmlhdGVseS4KKyAqLworI2RlZmluZSBETV9VTE9HX1NUQVRVU19JTkZPICAgICAgICAgICAxNQorCisvKgorICogRE1fVUxPR19TVEFUVVNfVEFCTEUgY29ycmVzcG9uZHMgdG8gKGZvdW5kIGluIGRtLWRpcnR5LWxvZy5oKToKKyAqIGludCAoKnN0YXR1cykoc3RydWN0IGRtX2RpcnR5X2xvZyAqbG9nLCBTVEFUVVNUWVBFX1RBQkxFLAorICoJCSBjaGFyICpyZXN1bHQsIHVuc2lnbmVkIG1heGxlbik7CisgKgorICogUGF5bG9hZC10by11c2Vyc3BhY2U6CisgKglOb25lLgorICogUGF5bG9hZC10by1rZXJuZWw6CisgKglDaGFyYWN0ZXIgc3RyaW5nIGNvbnRhaW5pbmcgU1RBVFVTVFlQRV9UQUJMRQorICoKKyAqIFdoZW4gdGhlIHJlcXVlc3QgaGFzIGJlZW4gcHJvY2Vzc2VkLCB1c2VyLXNwYWNlIG11c3QgcmV0dXJuIHRoZQorICogZG1fdWxvZ19yZXF1ZXN0IHRvIHRoZSBrZXJuZWwgLSBzZXR0aW5nIHRoZSAnZXJyb3InIGZpZWxkIGFuZAorICogJ2RhdGFfc2l6ZScgYXBwcm9wcmlhdGVseS4KKyAqLworI2RlZmluZSBETV9VTE9HX1NUQVRVU19UQUJMRSAgICAgICAgICAxNgorCisvKgorICogRE1fVUxPR19JU19SRU1PVEVfUkVDT1ZFUklORyBjb3JyZXNwb25kcyB0byAoZm91bmQgaW4gZG0tZGlydHktbG9nLmgpOgorICogaW50ICgqaXNfcmVtb3RlX3JlY292ZXJpbmcpKHN0cnVjdCBkbV9kaXJ0eV9sb2cgKmxvZywgcmVnaW9uX3QgcmVnaW9uKTsKKyAqCisgKiBQYXlsb2FkLXRvLXVzZXJzcGFjZToKKyAqCXVpbnQ2NF90IC0gcmVnaW9uIHRvIGRldGVybWluZSByZWNvdmVyeSBzdGF0dXMgb24KKyAqIFBheWxvYWQtdG8ta2VybmVsOgorICoJeworICoJCWludDY0X3QgaXNfcmVjb3ZlcmluZzsgIC0tIDAgaWYgbm8sIDEgaWYgeWVzCisgKgkJdWludDY0X3QgaW5fc3luY19oaW50OyAgLS0gbG93ZXN0IHJlZ2lvbiBzdGlsbCBuZWVkaW5nIHJlc3luYworICoJfQorICoKKyAqIFdoZW4gdGhlIHJlcXVlc3QgaGFzIGJlZW4gcHJvY2Vzc2VkLCB1c2VyLXNwYWNlIG11c3QgcmV0dXJuIHRoZQorICogZG1fdWxvZ19yZXF1ZXN0IHRvIHRoZSBrZXJuZWwgLSBzZXR0aW5nIHRoZSAnZXJyb3InIGZpZWxkIGFuZAorICogJ2RhdGFfc2l6ZScgYXBwcm9wcmlhdGVseS4KKyAqLworI2RlZmluZSBETV9VTE9HX0lTX1JFTU9URV9SRUNPVkVSSU5HICAxNworCisvKgorICogKERNX1VMT0dfUkVRVUVTVF9NQVNLICYgcmVxdWVzdF90eXBlKSB0byBnZXQgdGhlIHJlcXVlc3QgdHlwZQorICoKKyAqIFBheWxvYWQtdG8tdXNlcnNwYWNlOgorICoJQSBzaW5nbGUgc3RyaW5nIGNvbnRhaW5pbmcgYWxsIHRoZSBhcmd2IGFyZ3VtZW50cyBzZXBhcmF0ZWQgYnkgJyAncworICogUGF5bG9hZC10by1rZXJuZWw6CisgKglOb25lLiAgKCdkYXRhX3NpemUnIGluIHRoZSBkbV91bG9nX3JlcXVlc3Qgc3RydWN0IHNob3VsZCBiZSAwLikKKyAqCisgKiBXZSBhcmUgcmVzZXJ2aW5nIDggYml0cyBvZiB0aGUgMzItYml0ICdyZXF1ZXN0X3R5cGUnIGZpZWxkIGZvciB0aGUKKyAqIHZhcmlvdXMgcmVxdWVzdCB0eXBlcyBhYm92ZS4gIFRoZSByZW1haW5pbmcgMjQtYml0cyBhcmUgY3VycmVudGx5CisgKiBzZXQgdG8gemVybyBhbmQgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjb21wYXRpYmlsaXR5IGNvbmNlcm5zLgorICoKKyAqIFVzZXItc3BhY2Ugc2hvdWxkIGFsd2F5cyB1c2UgRE1fVUxPR19SRVFVRVNUX1RZUEUgdG8gYWNxdWlyZSB0aGUKKyAqIHJlcXVlc3QgdHlwZSBmcm9tIHRoZSAncmVxdWVzdF90eXBlJyBmaWVsZCB0byBtYWludGFpbiBmb3J3YXJkIGNvbXBhdGliaWxpdHkuCisgKi8KKyNkZWZpbmUgRE1fVUxPR19SRVFVRVNUX01BU0sgMHhGRgorI2RlZmluZSBETV9VTE9HX1JFUVVFU1RfVFlQRShyZXF1ZXN0X3R5cGUpIFwKKwkoRE1fVUxPR19SRVFVRVNUX01BU0sgJiAocmVxdWVzdF90eXBlKSkKKworc3RydWN0IGRtX3Vsb2dfcmVxdWVzdCB7CisJLyoKKwkgKiBUaGUgbG9jYWwgdW5pcXVlIGlkZW50aWZpZXIgKGx1aWQpIGFuZCB0aGUgdW5pdmVyc2FsbHkgdW5pcXVlCisJICogaWRlbnRpZmllciAodXVpZCkgYXJlIHVzZWQgdG8gdGllIGEgcmVxdWVzdCB0byBhIHNwZWNpZmljCisJICogbWlycm9yIGxvZy4gIEEgc2luZ2xlIG1hY2hpbmUgbG9nIGNvdWxkIHByb2JhYmx5IG1ha2UgZHVlIHdpdGgKKwkgKiBqdXN0IHRoZSAnbHVpZCcsIGJ1dCBhIGNsdXN0ZXItYXdhcmUgbG9nIG11c3QgdXNlIHRoZSAndXVpZCcgYW5kCisJICogdGhlICdsdWlkJy4gIFRoZSB1dWlkIGlzIHdoYXQgaXMgcmVxdWlyZWQgZm9yIG5vZGUgdG8gbm9kZQorCSAqIGNvbW11bmljYXRpb24gY29uY2VybmluZyBhIHBhcnRpY3VsYXIgbG9nLCBidXQgdGhlICdsdWlkJyBoZWxwcworCSAqIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBsb2dzIHRoYXQgYXJlIGJlaW5nIHN3YXBwZWQgYW5kIGhhdmUgdGhlCisJICogc2FtZSAndXVpZCcuICAoVGhpbmsgImxpdmUiIGFuZCAiaW5hY3RpdmUiIGRldmljZS1tYXBwZXIgdGFibGVzLikKKwkgKi8KKwl1aW50NjRfdCBsdWlkOworCWNoYXIgdXVpZFtETV9VVUlEX0xFTl07CisJY2hhciBwYWRkaW5nWzddOyAgICAgICAgLyogUGFkZGluZyBiZWNhdXNlIERNX1VVSURfTEVOID0gMTI5ICovCisKKwlpbnQzMl90IGVycm9yOyAgICAgICAgICAvKiBVc2VkIHRvIHJlcG9ydCBiYWNrIHByb2Nlc3NpbmcgZXJyb3JzICovCisKKwl1aW50MzJfdCBzZXE7ICAgICAgICAgICAvKiBTZXF1ZW5jZSBudW1iZXIgZm9yIHJlcXVlc3QgKi8KKwl1aW50MzJfdCByZXF1ZXN0X3R5cGU7ICAvKiBETV9VTE9HXyogZGVmaW5lZCBhYm92ZSAqLworCXVpbnQzMl90IGRhdGFfc2l6ZTsgICAgIC8qIEhvdyBtdWNoIGRhdGEgKG5vdCBpbmNsdWRpbmcgdGhpcyBzdHJ1Y3QpICovCisKKwljaGFyIGRhdGFbMF07Cit9OworCisjZW5kaWYgLyogX19ETV9MT0dfVVNFUlNQQUNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2RuLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZG4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzUwNDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2RuLmgKQEAgLTAsMCArMSwxNDYgQEAKKyNpZm5kZWYgX0xJTlVYX0ROX0gKKyNkZWZpbmUgX0xJTlVYX0ROX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisKKwlERUNuZXQgRGF0YSBTdHJ1Y3R1cmVzIGFuZCBDb25zdGFudHMKKworKi8KKworLyogCisgKiBETlBST1RPX05TUCBjYW4ndCBiZSB0aGUgc2FtZSBhcyBTT0xfU09DS0VULCAKKyAqIHNvIGluY3JlbWVudCBlYWNoIGJ5IG9uZSAoY29tcGFyZWQgdG8gVUxUUklYKQorICovCisjZGVmaW5lIEROUFJPVE9fTlNQICAgICAyICAgICAgICAgICAgICAgICAgICAgICAvKiBOU1AgcHJvdG9jb2wgbnVtYmVyICAgICAgICovCisjZGVmaW5lIEROUFJPVE9fUk9VICAgICAzICAgICAgICAgICAgICAgICAgICAgICAvKiBSb3V0aW5nIHByb3RvY29sIG51bWJlciAgICovCisjZGVmaW5lIEROUFJPVE9fTk1MICAgICA0ICAgICAgICAgICAgICAgICAgICAgICAvKiBOZXQgbWd0IHByb3RvY29sIG51bWJlciAgICovCisjZGVmaW5lIEROUFJPVE9fRVZMICAgICA1ICAgICAgICAgICAgICAgICAgICAgICAvKiBFdmwgcHJvdG9jb2wgbnVtYmVyICh1c3IpICovCisjZGVmaW5lIEROUFJPVE9fRVZSICAgICA2ICAgICAgICAgICAgICAgICAgICAgICAvKiBFdmwgcHJvdG9jb2wgbnVtYmVyIChldmwpICovCisjZGVmaW5lIEROUFJPVE9fTlNQVCAgICA3ICAgICAgICAgICAgICAgICAgICAgICAvKiBOU1AgdHJhY2UgcHJvdG9jb2wgbnVtYmVyICovCisKKworI2RlZmluZSBETl9BRERMCQkyCisjZGVmaW5lIEROX01BWEFEREwJMiAvKiBVTFRSSVggaGVhZGVycyBoYXZlIDIwIGhlcmUsIGJ1dCBwYXRod29ya3MgaGFzIDIgKi8KKyNkZWZpbmUgRE5fTUFYT1BUTAkxNgorI2RlZmluZSBETl9NQVhPQkpMCTE2CisjZGVmaW5lIEROX01BWEFDQ0wJNDAKKyNkZWZpbmUgRE5fTUFYQUxJQVNMCTEyOAorI2RlZmluZSBETl9NQVhOT0RFTAkyNTYKKyNkZWZpbmUgRE5CVUZTSVpFCTY1MDIzCisKKy8qIAorICogU0VUL0dFVCBTb2NrZXQgb3B0aW9ucyAgLSBtdXN0IG1hdGNoIHRoZSBEU09fIG51bWJlcnMgYmVsb3cKKyAqLworI2RlZmluZSBTT19DT05EQVRBICAgICAgMQorI2RlZmluZSBTT19DT05BQ0NFU1MgICAgMgorI2RlZmluZSBTT19QUk9YWVVTUiAgICAgMworI2RlZmluZSBTT19MSU5LSU5GTyAgICAgNworCisjZGVmaW5lIERTT19DT05EQVRBICAgICAxICAgICAgICAvKiBTZXQvR2V0IGNvbm5lY3QgZGF0YSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEU09fRElTREFUQSAgICAgMTAgICAgICAgLyogU2V0L0dldCBkaXNjb25uZWN0IGRhdGEgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFNPX0NPTkFDQ0VTUyAgIDIgICAgICAgIC8qIFNldC9HZXQgY29ubmVjdCBhY2Nlc3MgZGF0YSAgICAgICAgICovCisjZGVmaW5lIERTT19BQ0NFUFRNT0RFICA0ICAgICAgICAvKiBTZXQvR2V0IGFjY2VwdCBtb2RlICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEU09fQ09OQUNDRVBUICAgNSAgICAgICAgLyogQWNjZXB0IGRlZmVycmVkIGNvbm5lY3Rpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRFNPX0NPTlJFSkVDVCAgIDYgICAgICAgIC8qIFJlamVjdCBkZWZlcnJlZCBjb25uZWN0aW9uICAgICAgICAgICovCisjZGVmaW5lIERTT19MSU5LSU5GTyAgICA3ICAgICAgICAvKiBTZXQvR2V0IGxpbmsgaW5mb3JtYXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBEU09fU1RSRUFNICAgICAgOCAgICAgICAgLyogU2V0IHNvY2tldCB0eXBlIHRvIHN0cmVhbSAgICAgICAgICAgKi8KKyNkZWZpbmUgRFNPX1NFUVBBQ0tFVCAgIDkgICAgICAgIC8qIFNldCBzb2NrZXQgdHlwZSB0byBzZXF1ZW5jZWQgcGFja2V0ICovCisjZGVmaW5lIERTT19NQVhXSU5ET1cgICAxMSAgICAgICAvKiBNYXhpbXVtIHdpbmRvdyBzaXplIGFsbG93ZWQgICAgICAgICAqLworI2RlZmluZSBEU09fTk9ERUxBWQkxMiAgICAgICAvKiBUdXJuIG9mZiBuYWdsZSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEU09fQ09SSyAgICAgICAgMTMgICAgICAgLyogV2FpdCBmb3IgbW9yZSBkYXRhISAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFNPX1NFUlZJQ0VTCTE0ICAgICAgIC8qIE5TUCBTZXJ2aWNlcyBmaWVsZCAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERTT19JTkZPCTE1ICAgICAgIC8qIE5TUCBJbmZvIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERTT19NQVggICAgICAgICAxNSAgICAgICAvKiBNYXhpbXVtIG9wdGlvbiBudW1iZXIgICAgICAgICAgICAgICAqLworCisKKy8qIExJTksgU3RhdGVzICovCisjZGVmaW5lIExMX0lOQUNUSVZFCTAKKyNkZWZpbmUgTExfQ09OTkVDVElORwkxCisjZGVmaW5lIExMX1JVTk5JTkcJMgorI2RlZmluZSBMTF9ESVNDT05ORUNUSU5HIDMKKworI2RlZmluZSBBQ0NfSU1NRUQgMAorI2RlZmluZSBBQ0NfREVGRVIgMQorCisjZGVmaW5lIFNERl9XSUxEICAgICAgICAxICAgICAgICAgICAgICAgICAgLyogV2lsZCBjYXJkIG9iamVjdCAgICAgICAgICAqLworI2RlZmluZSBTREZfUFJPWFkgICAgICAgMiAgICAgICAgICAgICAgICAgIC8qIEFkZHIgZWxpZ2libGUgZm9yIHByb3h5ICAgKi8KKyNkZWZpbmUgU0RGX1VJQ1BST1hZICAgIDQgICAgICAgICAgICAgICAgICAvKiBVc2UgdWljLWJhc2VkIHByb3h5ICAgICAgICovCisKKy8qIFN0cnVjdHVyZXMgKi8KKworCitzdHJ1Y3QgZG5fbmFkZHIgeworCV9fbGUxNgkJYV9sZW47CisJX191OCBhX2FkZHJbRE5fTUFYQURETF07IC8qIFR3byBieXRlcyBsaXR0bGUgZW5kaWFuICovCit9OworCitzdHJ1Y3Qgc29ja2FkZHJfZG4geworCV9fdTE2CQlzZG5fZmFtaWx5OworCV9fdTgJCXNkbl9mbGFnczsKKwlfX3U4CQlzZG5fb2JqbnVtOworCV9fbGUxNgkJc2RuX29iam5hbWVsOworCV9fdTgJCXNkbl9vYmpuYW1lW0ROX01BWE9CSkxdOworCXN0cnVjdCAgIGRuX25hZGRyCXNkbl9hZGQ7Cit9OworI2RlZmluZSBzZG5fbm9kZWFkZHJsICAgc2RuX2FkZC5hX2xlbiAgIC8qIE5vZGUgYWRkcmVzcyBsZW5ndGggICovCisjZGVmaW5lIHNkbl9ub2RlYWRkciAgICBzZG5fYWRkLmFfYWRkciAgLyogTm9kZSBhZGRyZXNzICAgICAgICAgKi8KKworCisKKy8qCisgKiBERUNuZXQgc2V0L2dldCBEU09fQ09OREFUQSwgRFNPX0RJU0RBVEEgKG9wdGlvbmFsIGRhdGEpIHN0cnVjdHVyZQorICovCitzdHJ1Y3Qgb3B0ZGF0YV9kbiB7CisgICAgICAgIF9fbGUxNiAgb3B0X3N0YXR1czsgICAgIC8qIEV4dGVuZGVkIHN0YXR1cyByZXR1cm4gKi8KKyNkZWZpbmUgb3B0X3N0cyBvcHRfc3RhdHVzCisgICAgICAgIF9fbGUxNiAgb3B0X29wdGw7ICAgICAgIC8qIExlbmd0aCBvZiB1c2VyIGRhdGEgICAgKi8KKyAgICAgICAgX191OCAgIG9wdF9kYXRhWzE2XTsgICAvKiBVc2VyIGRhdGEgICAgICAgICAgICAgICovCit9OworCitzdHJ1Y3QgYWNjZXNzZGF0YV9kbiB7CisJX191OAkJYWNjX2FjY2w7CisJX191OAkJYWNjX2FjY1tETl9NQVhBQ0NMXTsKKwlfX3U4IAkJYWNjX3Bhc3NsOworCV9fdTgJCWFjY19wYXNzW0ROX01BWEFDQ0xdOworCV9fdTggCQlhY2NfdXNlcmw7CisJX191OAkJYWNjX3VzZXJbRE5fTUFYQUNDTF07Cit9OworCisvKgorICogREVDbmV0IGxvZ2ljYWwgbGluayBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGxpbmtpbmZvX2RuIHsKKyAgICAgICAgX191MTYgIGlkbl9zZWdzaXplOyAgICAvKiBTZWdtZW50IHNpemUgZm9yIGxpbmsgKi8KKyAgICAgICAgX191OCAgIGlkbl9saW5rc3RhdGU7ICAvKiBMb2dpY2FsIGxpbmsgc3RhdGUgICAgKi8KK307CisKKy8qCisgKiBFdGhlcm5ldCBhZGRyZXNzIGZvcm1hdCAoZm9yIERFQ25ldCkKKyAqLwordW5pb24gZXRoZXJhZGRyZXNzIHsKKyAgICAgICAgX191OCBkbmVfYWRkcls2XTsgICAgICAgICAgICAgLyogRnVsbCBldGhlcm5ldCBhZGRyZXNzICovCisgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgX191OCBkbmVfaGlvcmRbNF07ICAgIC8qIERFQ25ldCBISU9SRCBwcmVmaXggICAqLworICAgICAgICAgICAgICAgIF9fdTggZG5lX25vZGVhZGRyWzJdOyAvKiBERUNuZXQgbm9kZSBhZGRyZXNzICAgKi8KKyAgfSBkbmVfcmVtb3RlOworfTsKKworCisvKgorICogREVDbmV0IHBoeXNpY2FsIHNvY2tldCBhZGRyZXNzIGZvcm1hdAorICovCitzdHJ1Y3QgZG5fYWRkciB7CisgICAgICAgIF9fbGUxNiBkbmFfZmFtaWx5OyAgICAgIC8qIEFGX0RFQ25ldCAgICAgICAgICAgICAgICovCisgICAgICAgIHVuaW9uIGV0aGVyYWRkcmVzcyBkbmFfbmV0YWRkcjsgLyogREVDbmV0IGV0aGVybmV0IGFkZHJlc3MgKi8KK307CisKKyNkZWZpbmUgREVDTkVUX0lPQ1RMX0JBU0UgMHg4OSAvKiBQUk9UT1BSSVZBVEUgcmFuZ2UgKi8KKworI2RlZmluZSBTSU9DU05FVEFERFIgIF9JT1coREVDTkVUX0lPQ1RMX0JBU0UsIDB4ZTAsIHN0cnVjdCBkbl9uYWRkcikKKyNkZWZpbmUgU0lPQ0dORVRBRERSICBfSU9SKERFQ05FVF9JT0NUTF9CQVNFLCAweGUxLCBzdHJ1Y3QgZG5fbmFkZHIpCisjZGVmaW5lIE9TSU9DU05FVEFERFIgX0lPVyhERUNORVRfSU9DVExfQkFTRSwgMHhlMCwgaW50KQorI2RlZmluZSBPU0lPQ0dORVRBRERSIF9JT1IoREVDTkVUX0lPQ1RMX0JBU0UsIDB4ZTEsIGludCkKKworI2VuZGlmIC8qIF9MSU5VWF9ETl9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZHFibGtfeGZzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZHFibGtfeGZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY1NTI4MAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9kcWJsa194ZnMuaApAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NS0yMDAxLDIwMDQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXQgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisjaWZuZGVmIF9MSU5VWF9EUUJMS19YRlNfSAorI2RlZmluZSBfTElOVVhfRFFCTEtfWEZTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBEaXNrIHF1b3RhIC0gcXVvdGFjdGwoMikgY29tbWFuZHMgZm9yIHRoZSBYRlMgUXVvdGEgTWFuYWdlciAoWFFNKS4KKyAqLworCisjZGVmaW5lIFhRTV9DTUQoeCkJKCgnWCc8PDgpKyh4KSkJLyogbm90ZTogZm9ybXMgZmlyc3QgUUNNRCBhcmd1bWVudCAqLworI2RlZmluZSBYUU1fQ09NTUFORCh4KQkoKCh4KSAmICgweGZmPDw4KSkgPT0gKCdYJzw8OCkpCS8qIHRlc3QgaWYgZm9yIFhGUyAqLworCisjZGVmaW5lIFhRTV9VU1JRVU9UQQkwCS8qIHN5c3RlbSBjYWxsIHVzZXIgcXVvdGEgdHlwZSAqLworI2RlZmluZSBYUU1fR1JQUVVPVEEJMQkvKiBzeXN0ZW0gY2FsbCBncm91cCBxdW90YSB0eXBlICovCisjZGVmaW5lIFhRTV9QUkpRVU9UQQkyCS8qIHN5c3RlbSBjYWxsIHByb2plY3QgcXVvdGEgdHlwZSAqLworI2RlZmluZSBYUU1fTUFYUVVPVEFTCTMKKworI2RlZmluZSBRX1hRVU9UQU9OCVhRTV9DTUQoMSkJLyogZW5hYmxlIGFjY291bnRpbmcvZW5mb3JjZW1lbnQgKi8KKyNkZWZpbmUgUV9YUVVPVEFPRkYJWFFNX0NNRCgyKQkvKiBkaXNhYmxlIGFjY291bnRpbmcvZW5mb3JjZW1lbnQgKi8KKyNkZWZpbmUgUV9YR0VUUVVPVEEJWFFNX0NNRCgzKQkvKiBnZXQgZGlzayBsaW1pdHMgYW5kIHVzYWdlICovCisjZGVmaW5lIFFfWFNFVFFMSU0JWFFNX0NNRCg0KQkvKiBzZXQgZGlzayBsaW1pdHMgKi8KKyNkZWZpbmUgUV9YR0VUUVNUQVQJWFFNX0NNRCg1KQkvKiBnZXQgcXVvdGEgc3Vic3lzdGVtIHN0YXR1cyAqLworI2RlZmluZSBRX1hRVU9UQVJNCVhRTV9DTUQoNikJLyogZnJlZSBkaXNrIHNwYWNlIHVzZWQgYnkgZHF1b3RzICovCisjZGVmaW5lIFFfWFFVT1RBU1lOQwlYUU1fQ01EKDcpCS8qIGRlbGFsbG9jIGZsdXNoLCB1cGRhdGVzIGRxdW90cyAqLworCisvKgorICogZnNfZGlza19xdW90YSBzdHJ1Y3R1cmU6CisgKgorICogVGhpcyBjb250YWlucyB0aGUgY3VycmVudCBxdW90YSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgYSB1c2VyL3Byb2ovZ3JvdXAuCisgKiBJdCBpcyA2NC1iaXQgYWxpZ25lZCwgYW5kIGFsbCB0aGUgYmxrIHVuaXRzIGFyZSBpbiBCQnMgKEJhc2ljIEJsb2Nrcykgb2YKKyAqIDUxMiBieXRlcy4KKyAqLworI2RlZmluZSBGU19EUVVPVF9WRVJTSU9OCTEJLyogZnNfZGlza19xdW90YS5kX3ZlcnNpb24gKi8KK3R5cGVkZWYgc3RydWN0IGZzX2Rpc2tfcXVvdGEgeworCV9fczgJCWRfdmVyc2lvbjsJLyogdmVyc2lvbiBvZiB0aGlzIHN0cnVjdHVyZSAqLworCV9fczgJCWRfZmxhZ3M7CS8qIEZTX3tVU0VSLFBST0osR1JPVVB9X1FVT1RBICovCisJX191MTYJCWRfZmllbGRtYXNrOwkvKiBmaWVsZCBzcGVjaWZpZXIgKi8KKwlfX3UzMgkJZF9pZDsJCS8qIHVzZXIsIHByb2plY3QsIG9yIGdyb3VwIElEICovCisJX191NjQJCWRfYmxrX2hhcmRsaW1pdDsvKiBhYnNvbHV0ZSBsaW1pdCBvbiBkaXNrIGJsa3MgKi8KKwlfX3U2NAkJZF9ibGtfc29mdGxpbWl0Oy8qIHByZWZlcnJlZCBsaW1pdCBvbiBkaXNrIGJsa3MgKi8KKwlfX3U2NAkJZF9pbm9faGFyZGxpbWl0Oy8qIG1heGltdW0gIyBhbGxvY2F0ZWQgaW5vZGVzICovCisJX191NjQJCWRfaW5vX3NvZnRsaW1pdDsvKiBwcmVmZXJyZWQgaW5vZGUgbGltaXQgKi8KKwlfX3U2NAkJZF9iY291bnQ7CS8qICMgZGlzayBibG9ja3Mgb3duZWQgYnkgdGhlIHVzZXIgKi8KKwlfX3U2NAkJZF9pY291bnQ7CS8qICMgaW5vZGVzIG93bmVkIGJ5IHRoZSB1c2VyICovCisJX19zMzIJCWRfaXRpbWVyOwkvKiB6ZXJvIGlmIHdpdGhpbiBpbm9kZSBsaW1pdHMgKi8KKwkJCQkJLyogaWYgbm90LCB3ZSByZWZ1c2Ugc2VydmljZSAqLworCV9fczMyCQlkX2J0aW1lcjsJLyogc2ltaWxhciB0byBhYm92ZTsgZm9yIGRpc2sgYmxvY2tzICovCisJX191MTYJICAJZF9pd2FybnM7ICAgICAgIC8qICMgd2FybmluZ3MgaXNzdWVkIHdydCBudW0gaW5vZGVzICovCisJX191MTYJICAJZF9id2FybnM7ICAgICAgIC8qICMgd2FybmluZ3MgaXNzdWVkIHdydCBkaXNrIGJsb2NrcyAqLworCV9fczMyCQlkX3BhZGRpbmcyOwkvKiBwYWRkaW5nMiAtIGZvciBmdXR1cmUgdXNlICovCisJX191NjQJCWRfcnRiX2hhcmRsaW1pdDsvKiBhYnNvbHV0ZSBsaW1pdCBvbiByZWFsdGltZSBibGtzICovCisJX191NjQJCWRfcnRiX3NvZnRsaW1pdDsvKiBwcmVmZXJyZWQgbGltaXQgb24gUlQgZGlzayBibGtzICovCisJX191NjQJCWRfcnRiY291bnQ7CS8qICMgcmVhbHRpbWUgYmxvY2tzIG93bmVkICovCisJX19zMzIJCWRfcnRidGltZXI7CS8qIHNpbWlsYXIgdG8gYWJvdmU7IGZvciBSVCBkaXNrIGJsa3MgKi8KKwlfX3UxNgkgIAlkX3J0Yndhcm5zOyAgICAgLyogIyB3YXJuaW5ncyBpc3N1ZWQgd3J0IFJUIGRpc2sgYmxrcyAqLworCV9fczE2CQlkX3BhZGRpbmczOwkvKiBwYWRkaW5nMyAtIGZvciBmdXR1cmUgdXNlICovCQorCWNoYXIJCWRfcGFkZGluZzRbOF07CS8qIHlldCBtb3JlIHBhZGRpbmcgKi8KK30gZnNfZGlza19xdW90YV90OworCisvKgorICogVGhlc2UgZmllbGRzIGFyZSBzZW50IHRvIFFfWFNFVFFMSU0gdG8gc3BlY2lmeSBmaWVsZHMgdGhhdCBuZWVkIHRvIGNoYW5nZS4KKyAqLworI2RlZmluZSBGU19EUV9JU09GVAkoMTw8MCkKKyNkZWZpbmUgRlNfRFFfSUhBUkQJKDE8PDEpCisjZGVmaW5lIEZTX0RRX0JTT0ZUCSgxPDwyKQorI2RlZmluZSBGU19EUV9CSEFSRCAJKDE8PDMpCisjZGVmaW5lIEZTX0RRX1JUQlNPRlQJKDE8PDQpCisjZGVmaW5lIEZTX0RRX1JUQkhBUkQJKDE8PDUpCisjZGVmaW5lIEZTX0RRX0xJTUlUX01BU0sJKEZTX0RRX0lTT0ZUIHwgRlNfRFFfSUhBUkQgfCBGU19EUV9CU09GVCB8IFwKKwkJCQkgRlNfRFFfQkhBUkQgfCBGU19EUV9SVEJTT0ZUIHwgRlNfRFFfUlRCSEFSRCkKKy8qCisgKiBUaGVzZSB0aW1lcnMgY2FuIG9ubHkgYmUgc2V0IGluIHN1cGVyIHVzZXIncyBkcXVvdC4gRm9yIG90aGVycywgdGltZXJzIGFyZQorICogYXV0b21hdGljYWxseSBzdGFydGVkIGFuZCBzdG9wcGVkLiBTdXBlcnVzZXJzIHRpbWVyIHZhbHVlcyBzZXQgdGhlIGxpbWl0cworICogZm9yIHRoZSByZXN0LiAgSW4gY2FzZSB0aGVzZSB2YWx1ZXMgYXJlIHplcm8sIHRoZSBEUV97RixCfVRJTUVMSU1JVCB2YWx1ZXMKKyAqIGRlZmluZWQgYmVsb3cgYXJlIHVzZWQuIAorICogVGhlc2UgdmFsdWVzIGFsc28gYXBwbHkgb25seSB0byB0aGUgZF9maWVsZG1hc2sgZmllbGQgZm9yIFFfWFNFVFFMSU0uCisgKi8KKyNkZWZpbmUgRlNfRFFfQlRJTUVSCSgxPDw2KQorI2RlZmluZSBGU19EUV9JVElNRVIJKDE8PDcpCisjZGVmaW5lIEZTX0RRX1JUQlRJTUVSIAkoMTw8OCkKKyNkZWZpbmUgRlNfRFFfVElNRVJfTUFTSwkoRlNfRFFfQlRJTUVSIHwgRlNfRFFfSVRJTUVSIHwgRlNfRFFfUlRCVElNRVIpCisKKy8qCisgKiBXYXJuaW5nIGNvdW50cyBhcmUgc2V0IGluIGJvdGggc3VwZXIgdXNlcidzIGRxdW90IGFuZCBvdGhlcnMuIEZvciBvdGhlcnMsCisgKiB3YXJuaW5ncyBhcmUgc2V0L2NsZWFyZWQgYnkgdGhlIGFkbWluaXN0cmF0b3JzIChvciBhdXRvbWF0aWNhbGx5IGJ5IGdvaW5nCisgKiBiZWxvdyB0aGUgc29mdCBsaW1pdCkuICBTdXBlcnVzZXJzIHdhcm5pbmcgdmFsdWVzIHNldCB0aGUgd2FybmluZyBsaW1pdHMKKyAqIGZvciB0aGUgcmVzdC4gIEluIGNhc2UgdGhlc2UgdmFsdWVzIGFyZSB6ZXJvLCB0aGUgRFFfe0YsQn1XQVJOTElNSVQgdmFsdWVzCisgKiBkZWZpbmVkIGJlbG93IGFyZSB1c2VkLiAKKyAqIFRoZXNlIHZhbHVlcyBhbHNvIGFwcGx5IG9ubHkgdG8gdGhlIGRfZmllbGRtYXNrIGZpZWxkIGZvciBRX1hTRVRRTElNLgorICovCisjZGVmaW5lIEZTX0RRX0JXQVJOUwkoMTw8OSkKKyNkZWZpbmUgRlNfRFFfSVdBUk5TCSgxPDwxMCkKKyNkZWZpbmUgRlNfRFFfUlRCV0FSTlMJKDE8PDExKQorI2RlZmluZSBGU19EUV9XQVJOU19NQVNLCShGU19EUV9CV0FSTlMgfCBGU19EUV9JV0FSTlMgfCBGU19EUV9SVEJXQVJOUykKKworLyoKKyAqIEFjY291bnRpbmcgdmFsdWVzLiAgVGhlc2UgY2FuIG9ubHkgYmUgc2V0IGZvciBmaWxlc3lzdGVtIHdpdGgKKyAqIG5vbi10cmFuc2FjdGlvbmFsIHF1b3RhcyB0aGF0IHJlcXVpcmUgcXVvdGFjaGVjayg4KSBpbiB1c2Vyc3BhY2UuCisgKi8KKyNkZWZpbmUgRlNfRFFfQkNPVU5UCQkoMTw8MTIpCisjZGVmaW5lIEZTX0RRX0lDT1VOVAkJKDE8PDEzKQorI2RlZmluZSBGU19EUV9SVEJDT1VOVAkJKDE8PDE0KQorI2RlZmluZSBGU19EUV9BQ0NUX01BU0sJCShGU19EUV9CQ09VTlQgfCBGU19EUV9JQ09VTlQgfCBGU19EUV9SVEJDT1VOVCkKKworLyoKKyAqIFZhcmlvdXMgZmxhZ3MgcmVsYXRlZCB0byBxdW90YWN0bCgyKS4KKyAqLworI2RlZmluZSBGU19RVU9UQV9VRFFfQUNDVAkoMTw8MCkgIC8qIHVzZXIgcXVvdGEgYWNjb3VudGluZyAqLworI2RlZmluZSBGU19RVU9UQV9VRFFfRU5GRAkoMTw8MSkgIC8qIHVzZXIgcXVvdGEgbGltaXRzIGVuZm9yY2VtZW50ICovCisjZGVmaW5lIEZTX1FVT1RBX0dEUV9BQ0NUCSgxPDwyKSAgLyogZ3JvdXAgcXVvdGEgYWNjb3VudGluZyAqLworI2RlZmluZSBGU19RVU9UQV9HRFFfRU5GRAkoMTw8MykgIC8qIGdyb3VwIHF1b3RhIGxpbWl0cyBlbmZvcmNlbWVudCAqLworI2RlZmluZSBGU19RVU9UQV9QRFFfQUNDVAkoMTw8NCkgIC8qIHByb2plY3QgcXVvdGEgYWNjb3VudGluZyAqLworI2RlZmluZSBGU19RVU9UQV9QRFFfRU5GRAkoMTw8NSkgIC8qIHByb2plY3QgcXVvdGEgbGltaXRzIGVuZm9yY2VtZW50ICovCisKKyNkZWZpbmUgRlNfVVNFUl9RVU9UQQkJKDE8PDApCS8qIHVzZXIgcXVvdGEgdHlwZSAqLworI2RlZmluZSBGU19QUk9KX1FVT1RBCQkoMTw8MSkJLyogcHJvamVjdCBxdW90YSB0eXBlICovCisjZGVmaW5lIEZTX0dST1VQX1FVT1RBCQkoMTw8MikJLyogZ3JvdXAgcXVvdGEgdHlwZSAqLworCisvKgorICogZnNfcXVvdGFfc3RhdCBpcyB0aGUgc3RydWN0IHJldHVybmVkIGluIFFfWEdFVFFTVEFUIGZvciBhIGdpdmVuIGZpbGUgc3lzdGVtLgorICogUHJvdmlkZXMgYSBjZW50cmFsaXplZCB3YXkgdG8gZ2V0IG1ldGEgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHF1b3RhIHN1YnN5c3RlbS4KKyAqIGVnLiBzcGFjZSB0YWtlbiB1cCBmb3IgdXNlciBhbmQgZ3JvdXAgcXVvdGFzLCBudW1iZXIgb2YgZHF1b3RzIGN1cnJlbnRseQorICogaW5jb3JlLgorICovCisjZGVmaW5lIEZTX1FTVEFUX1ZFUlNJT04JMQkvKiBmc19xdW90YV9zdGF0LnFzX3ZlcnNpb24gKi8KKworLyoKKyAqIFNvbWUgYmFzaWMgaW5mb3JtYXRpb24gYWJvdXQgJ3F1b3RhIGZpbGVzJy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgZnNfcWZpbGVzdGF0IHsKKwlfX3U2NAkJcWZzX2lubzsJLyogaW5vZGUgbnVtYmVyICovCisJX191NjQJCXFmc19uYmxrczsJLyogbnVtYmVyIG9mIEJCcyA1MTItYnl0ZS1ibGtzICovCisJX191MzIJCXFmc19uZXh0ZW50czsJLyogbnVtYmVyIG9mIGV4dGVudHMgKi8KK30gZnNfcWZpbGVzdGF0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGZzX3F1b3RhX3N0YXQgeworCV9fczgJCXFzX3ZlcnNpb247CS8qIHZlcnNpb24gbnVtYmVyIGZvciBmdXR1cmUgY2hhbmdlcyAqLworCV9fdTE2CQlxc19mbGFnczsJLyogRlNfUVVPVEFfe1UsUCxHfURRX3tBQ0NULEVORkR9ICovCisJX19zOAkJcXNfcGFkOwkJLyogdW51c2VkICovCisJZnNfcWZpbGVzdGF0X3QJcXNfdXF1b3RhOwkvKiB1c2VyIHF1b3RhIHN0b3JhZ2UgaW5mb3JtYXRpb24gKi8KKwlmc19xZmlsZXN0YXRfdAlxc19ncXVvdGE7CS8qIGdyb3VwIHF1b3RhIHN0b3JhZ2UgaW5mb3JtYXRpb24gKi8KKwlfX3UzMgkJcXNfaW5jb3JlZHFzOwkvKiBudW1iZXIgb2YgZHF1b3RzIGluY29yZSAqLworCV9fczMyCQlxc19idGltZWxpbWl0OyAgLyogbGltaXQgZm9yIGJsa3MgdGltZXIgKi8JCisJX19zMzIJCXFzX2l0aW1lbGltaXQ7ICAvKiBsaW1pdCBmb3IgaW5vZGVzIHRpbWVyICovCQorCV9fczMyCQlxc19ydGJ0aW1lbGltaXQ7LyogbGltaXQgZm9yIHJ0IGJsa3MgdGltZXIgKi8JCisJX191MTYJCXFzX2J3YXJubGltaXQ7CS8qIGxpbWl0IGZvciBudW0gd2FybmluZ3MgKi8KKwlfX3UxNgkJcXNfaXdhcm5saW1pdDsJLyogbGltaXQgZm9yIG51bSB3YXJuaW5ncyAqLworfSBmc19xdW90YV9zdGF0X3Q7CisKKyNlbmRpZgkvKiBfTElOVVhfRFFCTEtfWEZTX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9kdmIvYXVkaW8uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9kdmIvYXVkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWM2NmJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2R2Yi9hdWRpby5oCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogYXVkaW8uaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBSYWxwaCAgTWV0emxlciA8cmFscGhAY29udmVyZ2VuY2UuZGU+CisgKiAgICAgICAgICAgICAgICAgICYgTWFyY3VzIE1ldHpsZXIgPG1hcmN1c0Bjb252ZXJnZW5jZS5kZT4KKyAqICAgICAgICAgICAgICAgICAgICBmb3IgY29udmVyZ2VuY2UgaW50ZWdyYXRlZCBtZWRpYSBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgTGVzc2VyIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9EVkJBVURJT19IXworI2RlZmluZSBfRFZCQVVESU9fSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3R5cGVkZWYgZW51bSB7CisJQVVESU9fU09VUkNFX0RFTVVYLCAvKiBTZWxlY3QgdGhlIGRlbXV4IGFzIHRoZSBtYWluIHNvdXJjZSAqLworCUFVRElPX1NPVVJDRV9NRU1PUlkgLyogU2VsZWN0IGludGVybmFsIG1lbW9yeSBhcyB0aGUgbWFpbiBzb3VyY2UgKi8KK30gYXVkaW9fc3RyZWFtX3NvdXJjZV90OworCisKK3R5cGVkZWYgZW51bSB7CisJQVVESU9fU1RPUFBFRCwgICAgICAvKiBEZXZpY2UgaXMgc3RvcHBlZCAqLworCUFVRElPX1BMQVlJTkcsICAgICAgLyogRGV2aWNlIGlzIGN1cnJlbnRseSBwbGF5aW5nICovCisJQVVESU9fUEFVU0VEICAgICAgICAvKiBEZXZpY2UgaXMgcGF1c2VkICovCit9IGF1ZGlvX3BsYXlfc3RhdGVfdDsKKworCit0eXBlZGVmIGVudW0geworCUFVRElPX1NURVJFTywKKwlBVURJT19NT05PX0xFRlQsCisJQVVESU9fTU9OT19SSUdIVCwKKwlBVURJT19NT05PLAorCUFVRElPX1NURVJFT19TV0FQUEVECit9IGF1ZGlvX2NoYW5uZWxfc2VsZWN0X3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgYXVkaW9fbWl4ZXIgeworCXVuc2lnbmVkIGludCB2b2x1bWVfbGVmdDsKKwl1bnNpZ25lZCBpbnQgdm9sdW1lX3JpZ2h0OworICAvLyB3aGF0IGVsc2UgZG8gd2UgbmVlZD8gYmFzcywgcGFzcy10aHJvdWdoLCAuLi4KK30gYXVkaW9fbWl4ZXJfdDsKKworCit0eXBlZGVmIHN0cnVjdCBhdWRpb19zdGF0dXMgeworCWludCAgICAgICAgICAgICAgICAgICAgQVZfc3luY19zdGF0ZTsgIC8qIHN5bmMgYXVkaW8gYW5kIHZpZGVvPyAqLworCWludCAgICAgICAgICAgICAgICAgICAgbXV0ZV9zdGF0ZTsgICAgIC8qIGF1ZGlvIGlzIG11dGVkICovCisJYXVkaW9fcGxheV9zdGF0ZV90ICAgICBwbGF5X3N0YXRlOyAgICAgLyogY3VycmVudCBwbGF5YmFjayBzdGF0ZSAqLworCWF1ZGlvX3N0cmVhbV9zb3VyY2VfdCAgc3RyZWFtX3NvdXJjZTsgIC8qIGN1cnJlbnQgc3RyZWFtIHNvdXJjZSAqLworCWF1ZGlvX2NoYW5uZWxfc2VsZWN0X3QgY2hhbm5lbF9zZWxlY3Q7IC8qIGN1cnJlbnRseSBzZWxlY3RlZCBjaGFubmVsICovCisJaW50ICAgICAgICAgICAgICAgICAgICBieXBhc3NfbW9kZTsgICAgLyogcGFzcyBvbiBhdWRpbyBkYXRhIHRvICovCisJYXVkaW9fbWl4ZXJfdAkgICAgICAgbWl4ZXJfc3RhdGU7ICAgIC8qIGN1cnJlbnQgbWl4ZXIgc3RhdGUgKi8KK30gYXVkaW9fc3RhdHVzX3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2VwYXJhdGUgZGVjb2RlciBoYXJkd2FyZSAqLworCisKK3R5cGVkZWYKK3N0cnVjdCBhdWRpb19rYXJhb2tleyAgLyogaWYgVm9jYWwxIG9yIFZvY2FsMiBhcmUgbm9uLXplcm8sIHRoZXkgZ2V0IG1peGVkICAqLworCWludCB2b2NhbDE7ICAgIC8qIGludG8gbGVmdCBhbmQgcmlnaHQgdCBhdCA3MCUgZWFjaCAqLworCWludCB2b2NhbDI7ICAgIC8qIGlmIGJvdGgsIFZvY2FsMSBhbmQgVm9jYWwyIGFyZSBub24temVybywgVm9jYWwxIGdldHMqLworCWludCBtZWxvZHk7ICAgIC8qIG1peGVkIGludG8gdGhlIGxlZnQgY2hhbm5lbCBhbmQgKi8KKwkJICAgICAgIC8qIFZvY2FsMiBpbnRvIHRoZSByaWdodCBjaGFubmVsIGF0IDEwMCUgZWFjaC4gKi8KKwkJICAgICAgIC8qIGlmIE1lbG9keSBpcyBub24temVybywgdGhlIG1lbG9keSBjaGFubmVsIGdldHMgbWl4ZWQqLworfSBhdWRpb19rYXJhb2tlX3Q7ICAgICAvKiBpbnRvIGxlZnQgYW5kIHJpZ2h0ICAqLworCisKK3R5cGVkZWYgX191MTYgYXVkaW9fYXR0cmlidXRlc190OworLyogICBiaXRzOiBkZXNjci4gKi8KKy8qICAgMTUtMTMgYXVkaW8gY29kaW5nIG1vZGUgKDA9YWMzLCAyPW1wZWcxLCAzPW1wZWcyZXh0LCA0PUxQQ00sIDY9RFRTLCAqLworLyogICAxMiAgICBtdWx0aWNoYW5uZWwgZXh0ZW5zaW9uICovCisvKiAgIDExLTEwIGF1ZGlvIHR5cGUgKDA9bm90IHNwZWMsIDE9bGFuZ3VhZ2UgaW5jbHVkZWQpICovCisvKiAgICA5LSA4IGF1ZGlvIGFwcGxpY2F0aW9uIG1vZGUgKDA9bm90IHNwZWMsIDE9a2FyYW9rZSwgMj1zdXJyb3VuZCkgKi8KKy8qICAgIDctIDYgUXVhbnRpemF0aW9uIC8gRFJDIChtcGVnIGF1ZGlvOiAxPURSQyBleGlzdHMpKGxwY206IDA9MTZiaXQsICAqLworLyogICAgNS0gNCBTYW1wbGUgZnJlcXVlbmN5IGZzICgwPTQ4a0h6LCAxPTk2a0h6KSAqLworLyogICAgMi0gMCBudW1iZXIgb2YgYXVkaW8gY2hhbm5lbHMgKG4rMSBjaGFubmVscykgKi8KKworCisvKiBmb3IgR0VUX0NBUEFCSUxJVElFUyBhbmQgU0VUX0ZPUk1BVCwgdGhlIGxhdHRlciBzaG91bGQgb25seSBzZXQgb25lIGJpdCAqLworI2RlZmluZSBBVURJT19DQVBfRFRTICAgIDEKKyNkZWZpbmUgQVVESU9fQ0FQX0xQQ00gICAyCisjZGVmaW5lIEFVRElPX0NBUF9NUDEgICAgNAorI2RlZmluZSBBVURJT19DQVBfTVAyICAgIDgKKyNkZWZpbmUgQVVESU9fQ0FQX01QMyAgIDE2CisjZGVmaW5lIEFVRElPX0NBUF9BQUMgICAzMgorI2RlZmluZSBBVURJT19DQVBfT0dHICAgNjQKKyNkZWZpbmUgQVVESU9fQ0FQX1NERFMgMTI4CisjZGVmaW5lIEFVRElPX0NBUF9BQzMgIDI1NgorCisjZGVmaW5lIEFVRElPX1NUT1AgICAgICAgICAgICAgICAgIF9JTygnbycsIDEpCisjZGVmaW5lIEFVRElPX1BMQVkgICAgICAgICAgICAgICAgIF9JTygnbycsIDIpCisjZGVmaW5lIEFVRElPX1BBVVNFICAgICAgICAgICAgICAgIF9JTygnbycsIDMpCisjZGVmaW5lIEFVRElPX0NPTlRJTlVFICAgICAgICAgICAgIF9JTygnbycsIDQpCisjZGVmaW5lIEFVRElPX1NFTEVDVF9TT1VSQ0UgICAgICAgIF9JTygnbycsIDUpCisjZGVmaW5lIEFVRElPX1NFVF9NVVRFICAgICAgICAgICAgIF9JTygnbycsIDYpCisjZGVmaW5lIEFVRElPX1NFVF9BVl9TWU5DICAgICAgICAgIF9JTygnbycsIDcpCisjZGVmaW5lIEFVRElPX1NFVF9CWVBBU1NfTU9ERSAgICAgIF9JTygnbycsIDgpCisjZGVmaW5lIEFVRElPX0NIQU5ORUxfU0VMRUNUICAgICAgIF9JTygnbycsIDkpCisjZGVmaW5lIEFVRElPX0dFVF9TVEFUVVMgICAgICAgICAgIF9JT1IoJ28nLCAxMCwgYXVkaW9fc3RhdHVzX3QpCisKKyNkZWZpbmUgQVVESU9fR0VUX0NBUEFCSUxJVElFUyAgICAgX0lPUignbycsIDExLCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIEFVRElPX0NMRUFSX0JVRkZFUiAgICAgICAgIF9JTygnbycsICAxMikKKyNkZWZpbmUgQVVESU9fU0VUX0lEICAgICAgICAgICAgICAgX0lPKCdvJywgMTMpCisjZGVmaW5lIEFVRElPX1NFVF9NSVhFUiAgICAgICAgICAgIF9JT1coJ28nLCAxNCwgYXVkaW9fbWl4ZXJfdCkKKyNkZWZpbmUgQVVESU9fU0VUX1NUUkVBTVRZUEUgICAgICAgX0lPKCdvJywgMTUpCisjZGVmaW5lIEFVRElPX1NFVF9FWFRfSUQgICAgICAgICAgIF9JTygnbycsIDE2KQorI2RlZmluZSBBVURJT19TRVRfQVRUUklCVVRFUyAgICAgICBfSU9XKCdvJywgMTcsIGF1ZGlvX2F0dHJpYnV0ZXNfdCkKKyNkZWZpbmUgQVVESU9fU0VUX0tBUkFPS0UgICAgICAgICAgX0lPVygnbycsIDE4LCBhdWRpb19rYXJhb2tlX3QpCisKKy8qKgorICogQVVESU9fR0VUX1BUUworICoKKyAqIFJlYWQgdGhlIDMzIGJpdCBwcmVzZW50YXRpb24gdGltZSBzdGFtcCBhcyBkZWZpbmVkCisgKiBpbiBJVFUgVC1SRUMtSC4yMjIuMCAvIElTTy9JRUMgMTM4MTgtMS4KKyAqCisgKiBUaGUgUFRTIHNob3VsZCBiZWxvbmcgdG8gdGhlIGN1cnJlbnRseSBwbGF5ZWQKKyAqIGZyYW1lIGlmIHBvc3NpYmxlLCBidXQgbWF5IGFsc28gYmUgYSB2YWx1ZSBjbG9zZSB0byBpdAorICogbGlrZSB0aGUgUFRTIG9mIHRoZSBsYXN0IGRlY29kZWQgZnJhbWUgb3IgdGhlIGxhc3QgUFRTCisgKiBleHRyYWN0ZWQgYnkgdGhlIFBFUyBwYXJzZXIuCisgKi8KKyNkZWZpbmUgQVVESU9fR0VUX1BUUyAgICAgICAgICAgICAgX0lPUignbycsIDE5LCBfX3U2NCkKKyNkZWZpbmUgQVVESU9fQklMSU5HVUFMX0NIQU5ORUxfU0VMRUNUIF9JTygnbycsIDIwKQorCisjZW5kaWYgLyogX0RWQkFVRElPX0hfICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZHZiL2NhLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZHZiL2NhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4NTM3ZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9kdmIvY2EuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogY2EuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBSYWxwaCAgTWV0emxlciA8cmFscGhAY29udmVyZ2VuY2UuZGU+CisgKiAgICAgICAgICAgICAgICAgICYgTWFyY3VzIE1ldHpsZXIgPG1hcmN1c0Bjb252ZXJnZW5jZS5kZT4KKyAqICAgICAgICAgICAgICAgICAgICBmb3IgY29udmVyZ2VuY2UgaW50ZWdyYXRlZCBtZWRpYSBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgTGVzc2VyIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9EVkJDQV9IXworI2RlZmluZSBfRFZCQ0FfSF8KKworLyogc2xvdCBpbnRlcmZhY2UgdHlwZXMgYW5kIGluZm8gKi8KKwordHlwZWRlZiBzdHJ1Y3QgY2Ffc2xvdF9pbmZvIHsKKwlpbnQgbnVtOyAgICAgICAgICAgICAgIC8qIHNsb3QgbnVtYmVyICovCisKKwlpbnQgdHlwZTsgICAgICAgICAgICAgIC8qIENBIGludGVyZmFjZSB0aGlzIHNsb3Qgc3VwcG9ydHMgKi8KKyNkZWZpbmUgQ0FfQ0kgICAgICAgICAgICAxICAgICAvKiBDSSBoaWdoIGxldmVsIGludGVyZmFjZSAqLworI2RlZmluZSBDQV9DSV9MSU5LICAgICAgIDIgICAgIC8qIENJIGxpbmsgbGF5ZXIgbGV2ZWwgaW50ZXJmYWNlICovCisjZGVmaW5lIENBX0NJX1BIWVMgICAgICAgNCAgICAgLyogQ0kgcGh5c2ljYWwgbGF5ZXIgbGV2ZWwgaW50ZXJmYWNlICovCisjZGVmaW5lIENBX0RFU0NSICAgICAgICAgOCAgICAgLyogYnVpbHQtaW4gZGVzY3JhbWJsZXIgKi8KKyNkZWZpbmUgQ0FfU0MgICAgICAgICAgMTI4ICAgICAvKiBzaW1wbGUgc21hcnQgY2FyZCBpbnRlcmZhY2UgKi8KKworCXVuc2lnbmVkIGludCBmbGFnczsKKyNkZWZpbmUgQ0FfQ0lfTU9EVUxFX1BSRVNFTlQgMSAvKiBtb2R1bGUgKG9yIGNhcmQpIGluc2VydGVkICovCisjZGVmaW5lIENBX0NJX01PRFVMRV9SRUFEWSAgIDIKK30gY2Ffc2xvdF9pbmZvX3Q7CisKKworLyogZGVzY3JhbWJsZXIgdHlwZXMgYW5kIGluZm8gKi8KKwordHlwZWRlZiBzdHJ1Y3QgY2FfZGVzY3JfaW5mbyB7CisJdW5zaWduZWQgaW50IG51bTsgICAgICAgICAgLyogbnVtYmVyIG9mIGF2YWlsYWJsZSBkZXNjcmFtYmxlcnMgKGtleXMpICovCisJdW5zaWduZWQgaW50IHR5cGU7ICAgICAgICAgLyogdHlwZSBvZiBzdXBwb3J0ZWQgc2NyYW1ibGluZyBzeXN0ZW0gKi8KKyNkZWZpbmUgQ0FfRUNEICAgICAgICAgICAxCisjZGVmaW5lIENBX05EUyAgICAgICAgICAgMgorI2RlZmluZSBDQV9EU1MgICAgICAgICAgIDQKK30gY2FfZGVzY3JfaW5mb190OworCit0eXBlZGVmIHN0cnVjdCBjYV9jYXBzIHsKKwl1bnNpZ25lZCBpbnQgc2xvdF9udW07ICAgICAvKiB0b3RhbCBudW1iZXIgb2YgQ0EgY2FyZCBhbmQgbW9kdWxlIHNsb3RzICovCisJdW5zaWduZWQgaW50IHNsb3RfdHlwZTsgICAgLyogT1Igb2YgYWxsIHN1cHBvcnRlZCB0eXBlcyAqLworCXVuc2lnbmVkIGludCBkZXNjcl9udW07ICAgIC8qIHRvdGFsIG51bWJlciBvZiBkZXNjcmFtYmxlciBzbG90cyAoa2V5cykgKi8KKwl1bnNpZ25lZCBpbnQgZGVzY3JfdHlwZTsgICAvKiBPUiBvZiBhbGwgc3VwcG9ydGVkIHR5cGVzICovCit9IGNhX2NhcHNfdDsKKworLyogYSBtZXNzYWdlIHRvL2Zyb20gYSBDSS1DQU0gKi8KK3R5cGVkZWYgc3RydWN0IGNhX21zZyB7CisJdW5zaWduZWQgaW50IGluZGV4OworCXVuc2lnbmVkIGludCB0eXBlOworCXVuc2lnbmVkIGludCBsZW5ndGg7CisJdW5zaWduZWQgY2hhciBtc2dbMjU2XTsKK30gY2FfbXNnX3Q7CisKK3R5cGVkZWYgc3RydWN0IGNhX2Rlc2NyIHsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisJdW5zaWduZWQgaW50IHBhcml0eTsJLyogMCA9PSBldmVuLCAxID09IG9kZCAqLworCXVuc2lnbmVkIGNoYXIgY3dbOF07Cit9IGNhX2Rlc2NyX3Q7CisKK3R5cGVkZWYgc3RydWN0IGNhX3BpZCB7CisJdW5zaWduZWQgaW50IHBpZDsKKwlpbnQgaW5kZXg7CQkvKiAtMSA9PSBkaXNhYmxlKi8KK30gY2FfcGlkX3Q7CisKKyNkZWZpbmUgQ0FfUkVTRVQgICAgICAgICAgX0lPKCdvJywgMTI4KQorI2RlZmluZSBDQV9HRVRfQ0FQICAgICAgICBfSU9SKCdvJywgMTI5LCBjYV9jYXBzX3QpCisjZGVmaW5lIENBX0dFVF9TTE9UX0lORk8gIF9JT1IoJ28nLCAxMzAsIGNhX3Nsb3RfaW5mb190KQorI2RlZmluZSBDQV9HRVRfREVTQ1JfSU5GTyBfSU9SKCdvJywgMTMxLCBjYV9kZXNjcl9pbmZvX3QpCisjZGVmaW5lIENBX0dFVF9NU0cgICAgICAgIF9JT1IoJ28nLCAxMzIsIGNhX21zZ190KQorI2RlZmluZSBDQV9TRU5EX01TRyAgICAgICBfSU9XKCdvJywgMTMzLCBjYV9tc2dfdCkKKyNkZWZpbmUgQ0FfU0VUX0RFU0NSICAgICAgX0lPVygnbycsIDEzNCwgY2FfZGVzY3JfdCkKKyNkZWZpbmUgQ0FfU0VUX1BJRCAgICAgICAgX0lPVygnbycsIDEzNSwgY2FfcGlkX3QpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2R2Yi9kbXguaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9kdmIvZG14LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgxZThhZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9kdmIvZG14LmgKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBkbXguaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBNYXJjdXMgTWV0emxlciA8bWFyY3VzQGNvbnZlcmdlbmNlLmRlPgorICogICAgICAgICAgICAgICAgICAmIFJhbHBoICBNZXR6bGVyIDxyYWxwaEBjb252ZXJnZW5jZS5kZT4KKyAqICAgICAgICAgICAgICAgICAgICBmb3IgY29udmVyZ2VuY2UgaW50ZWdyYXRlZCBtZWRpYSBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9EVkJETVhfSF8KKyNkZWZpbmUgX0RWQkRNWF9IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKworI2RlZmluZSBETVhfRklMVEVSX1NJWkUgMTYKKwordHlwZWRlZiBlbnVtCit7CisJRE1YX09VVF9ERUNPREVSLCAvKiBTdHJlYW1pbmcgZGlyZWN0bHkgdG8gZGVjb2Rlci4gKi8KKwlETVhfT1VUX1RBUCwgICAgIC8qIE91dHB1dCBnb2luZyB0byBhIG1lbW9yeSBidWZmZXIgKi8KKwkJCSAvKiAodG8gYmUgcmV0cmlldmVkIHZpYSB0aGUgcmVhZCBjb21tYW5kKS4qLworCURNWF9PVVRfVFNfVEFQLCAgLyogT3V0cHV0IG11bHRpcGxleGVkIGludG8gYSBuZXcgVFMgICovCisJCQkgLyogKHRvIGJlIHJldHJpZXZlZCBieSByZWFkaW5nIGZyb20gdGhlICovCisJCQkgLyogbG9naWNhbCBEVlIgZGV2aWNlKS4gICAgICAgICAgICAgICAgICovCisJRE1YX09VVF9UU0RFTVVYX1RBUCAvKiBMaWtlIFRTX1RBUCBidXQgcmV0cmlldmVkIGZyb20gdGhlIERNWCBkZXZpY2UgKi8KK30gZG14X291dHB1dF90OworCisKK3R5cGVkZWYgZW51bQoreworCURNWF9JTl9GUk9OVEVORCwgLyogSW5wdXQgZnJvbSBhIGZyb250LWVuZCBkZXZpY2UuICAqLworCURNWF9JTl9EVlIgICAgICAgLyogSW5wdXQgZnJvbSB0aGUgbG9naWNhbCBEVlIgZGV2aWNlLiAgKi8KK30gZG14X2lucHV0X3Q7CisKKwordHlwZWRlZiBlbnVtCit7CisJRE1YX1BFU19BVURJTzAsCisJRE1YX1BFU19WSURFTzAsCisJRE1YX1BFU19URUxFVEVYVDAsCisJRE1YX1BFU19TVUJUSVRMRTAsCisJRE1YX1BFU19QQ1IwLAorCisJRE1YX1BFU19BVURJTzEsCisJRE1YX1BFU19WSURFTzEsCisJRE1YX1BFU19URUxFVEVYVDEsCisJRE1YX1BFU19TVUJUSVRMRTEsCisJRE1YX1BFU19QQ1IxLAorCisJRE1YX1BFU19BVURJTzIsCisJRE1YX1BFU19WSURFTzIsCisJRE1YX1BFU19URUxFVEVYVDIsCisJRE1YX1BFU19TVUJUSVRMRTIsCisJRE1YX1BFU19QQ1IyLAorCisJRE1YX1BFU19BVURJTzMsCisJRE1YX1BFU19WSURFTzMsCisJRE1YX1BFU19URUxFVEVYVDMsCisJRE1YX1BFU19TVUJUSVRMRTMsCisJRE1YX1BFU19QQ1IzLAorCisJRE1YX1BFU19PVEhFUgorfSBkbXhfcGVzX3R5cGVfdDsKKworI2RlZmluZSBETVhfUEVTX0FVRElPICAgIERNWF9QRVNfQVVESU8wCisjZGVmaW5lIERNWF9QRVNfVklERU8gICAgRE1YX1BFU19WSURFTzAKKyNkZWZpbmUgRE1YX1BFU19URUxFVEVYVCBETVhfUEVTX1RFTEVURVhUMAorI2RlZmluZSBETVhfUEVTX1NVQlRJVExFIERNWF9QRVNfU1VCVElUTEUwCisjZGVmaW5lIERNWF9QRVNfUENSICAgICAgRE1YX1BFU19QQ1IwCisKKwordHlwZWRlZiBzdHJ1Y3QgZG14X2ZpbHRlcgoreworCV9fdTggIGZpbHRlcltETVhfRklMVEVSX1NJWkVdOworCV9fdTggIG1hc2tbRE1YX0ZJTFRFUl9TSVpFXTsKKwlfX3U4ICBtb2RlW0RNWF9GSUxURVJfU0laRV07Cit9IGRteF9maWx0ZXJfdDsKKworCitzdHJ1Y3QgZG14X3NjdF9maWx0ZXJfcGFyYW1zCit7CisJX191MTYgICAgICAgICAgcGlkOworCWRteF9maWx0ZXJfdCAgIGZpbHRlcjsKKwlfX3UzMiAgICAgICAgICB0aW1lb3V0OworCV9fdTMyICAgICAgICAgIGZsYWdzOworI2RlZmluZSBETVhfQ0hFQ0tfQ1JDICAgICAgIDEKKyNkZWZpbmUgRE1YX09ORVNIT1QgICAgICAgICAyCisjZGVmaW5lIERNWF9JTU1FRElBVEVfU1RBUlQgNAorI2RlZmluZSBETVhfS0VSTkVMX0NMSUVOVCAgIDB4ODAwMAorfTsKKworCitzdHJ1Y3QgZG14X3Blc19maWx0ZXJfcGFyYW1zCit7CisJX191MTYgICAgICAgICAgcGlkOworCWRteF9pbnB1dF90ICAgIGlucHV0OworCWRteF9vdXRwdXRfdCAgIG91dHB1dDsKKwlkbXhfcGVzX3R5cGVfdCBwZXNfdHlwZTsKKwlfX3UzMiAgICAgICAgICBmbGFnczsKK307CisKK3R5cGVkZWYgc3RydWN0IGRteF9jYXBzIHsKKwlfX3UzMiBjYXBzOworCWludCBudW1fZGVjb2RlcnM7Cit9IGRteF9jYXBzX3Q7CisKK3R5cGVkZWYgZW51bSB7CisJRE1YX1NPVVJDRV9GUk9OVDAgPSAwLAorCURNWF9TT1VSQ0VfRlJPTlQxLAorCURNWF9TT1VSQ0VfRlJPTlQyLAorCURNWF9TT1VSQ0VfRlJPTlQzLAorCURNWF9TT1VSQ0VfRFZSMCAgID0gMTYsCisJRE1YX1NPVVJDRV9EVlIxLAorCURNWF9TT1VSQ0VfRFZSMiwKKwlETVhfU09VUkNFX0RWUjMKK30gZG14X3NvdXJjZV90OworCitzdHJ1Y3QgZG14X3N0YyB7CisJdW5zaWduZWQgaW50IG51bTsJLyogaW5wdXQgOiB3aGljaCBTVEM/IDAuLk4gKi8KKwl1bnNpZ25lZCBpbnQgYmFzZTsJLyogb3V0cHV0OiBkaXZpc29yIGZvciBzdGMgdG8gZ2V0IDkwIGtIeiBjbG9jayAqLworCV9fdTY0IHN0YzsJCS8qIG91dHB1dDogc3RjIGluICdiYXNlJyo5MCBrSHogdW5pdHMgKi8KK307CisKKworI2RlZmluZSBETVhfU1RBUlQgICAgICAgICAgICAgICAgX0lPKCdvJywgNDEpCisjZGVmaW5lIERNWF9TVE9QICAgICAgICAgICAgICAgICBfSU8oJ28nLCA0MikKKyNkZWZpbmUgRE1YX1NFVF9GSUxURVIgICAgICAgICAgIF9JT1coJ28nLCA0Mywgc3RydWN0IGRteF9zY3RfZmlsdGVyX3BhcmFtcykKKyNkZWZpbmUgRE1YX1NFVF9QRVNfRklMVEVSICAgICAgIF9JT1coJ28nLCA0NCwgc3RydWN0IGRteF9wZXNfZmlsdGVyX3BhcmFtcykKKyNkZWZpbmUgRE1YX1NFVF9CVUZGRVJfU0laRSAgICAgIF9JTygnbycsIDQ1KQorI2RlZmluZSBETVhfR0VUX1BFU19QSURTICAgICAgICAgX0lPUignbycsIDQ3LCBfX3UxNls1XSkKKyNkZWZpbmUgRE1YX0dFVF9DQVBTICAgICAgICAgICAgIF9JT1IoJ28nLCA0OCwgZG14X2NhcHNfdCkKKyNkZWZpbmUgRE1YX1NFVF9TT1VSQ0UgICAgICAgICAgIF9JT1coJ28nLCA0OSwgZG14X3NvdXJjZV90KQorI2RlZmluZSBETVhfR0VUX1NUQyAgICAgICAgICAgICAgX0lPV1IoJ28nLCA1MCwgc3RydWN0IGRteF9zdGMpCisjZGVmaW5lIERNWF9BRERfUElEICAgICAgICAgICAgICBfSU9XKCdvJywgNTEsIF9fdTE2KQorI2RlZmluZSBETVhfUkVNT1ZFX1BJRCAgICAgICAgICAgX0lPVygnbycsIDUyLCBfX3UxNikKKworI2VuZGlmIC8qX0RWQkRNWF9IXyovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZHZiL2Zyb250ZW5kLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZHZiL2Zyb250ZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkzYTJiZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9kdmIvZnJvbnRlbmQuaApAQCAtMCwwICsxLDQxNCBAQAorLyoKKyAqIGZyb250ZW5kLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTWFyY3VzIE1ldHpsZXIgPG1hcmN1c0Bjb252ZXJnZW5jZS5kZT4KKyAqCQkgICAgUmFscGggIE1ldHpsZXIgPHJhbHBoQGNvbnZlcmdlbmNlLmRlPgorICoJCSAgICBIb2xnZXIgV2FlY2h0bGVyIDxob2xnZXJAY29udmVyZ2VuY2UuZGU+CisgKgkJICAgIEFuZHJlIERyYXN6aWsgPGFkQGNvbnZlcmdlbmNlLmRlPgorICoJCSAgICBmb3IgY29udmVyZ2VuY2UgaW50ZWdyYXRlZCBtZWRpYSBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9EVkJGUk9OVEVORF9IXworI2RlZmluZSBfRFZCRlJPTlRFTkRfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3R5cGVkZWYgZW51bSBmZV90eXBlIHsKKwlGRV9RUFNLLAorCUZFX1FBTSwKKwlGRV9PRkRNLAorCUZFX0FUU0MKK30gZmVfdHlwZV90OworCisKK3R5cGVkZWYgZW51bSBmZV9jYXBzIHsKKwlGRV9JU19TVFVQSUQJCQk9IDAsCisJRkVfQ0FOX0lOVkVSU0lPTl9BVVRPCQk9IDB4MSwKKwlGRV9DQU5fRkVDXzFfMgkJCT0gMHgyLAorCUZFX0NBTl9GRUNfMl8zCQkJPSAweDQsCisJRkVfQ0FOX0ZFQ18zXzQJCQk9IDB4OCwKKwlGRV9DQU5fRkVDXzRfNQkJCT0gMHgxMCwKKwlGRV9DQU5fRkVDXzVfNgkJCT0gMHgyMCwKKwlGRV9DQU5fRkVDXzZfNwkJCT0gMHg0MCwKKwlGRV9DQU5fRkVDXzdfOAkJCT0gMHg4MCwKKwlGRV9DQU5fRkVDXzhfOQkJCT0gMHgxMDAsCisJRkVfQ0FOX0ZFQ19BVVRPCQkJPSAweDIwMCwKKwlGRV9DQU5fUVBTSwkJCT0gMHg0MDAsCisJRkVfQ0FOX1FBTV8xNgkJCT0gMHg4MDAsCisJRkVfQ0FOX1FBTV8zMgkJCT0gMHgxMDAwLAorCUZFX0NBTl9RQU1fNjQJCQk9IDB4MjAwMCwKKwlGRV9DQU5fUUFNXzEyOAkJCT0gMHg0MDAwLAorCUZFX0NBTl9RQU1fMjU2CQkJPSAweDgwMDAsCisJRkVfQ0FOX1FBTV9BVVRPCQkJPSAweDEwMDAwLAorCUZFX0NBTl9UUkFOU01JU1NJT05fTU9ERV9BVVRPCT0gMHgyMDAwMCwKKwlGRV9DQU5fQkFORFdJRFRIX0FVVE8JCT0gMHg0MDAwMCwKKwlGRV9DQU5fR1VBUkRfSU5URVJWQUxfQVVUTwk9IDB4ODAwMDAsCisJRkVfQ0FOX0hJRVJBUkNIWV9BVVRPCQk9IDB4MTAwMDAwLAorCUZFX0NBTl84VlNCCQkJPSAweDIwMDAwMCwKKwlGRV9DQU5fMTZWU0IJCQk9IDB4NDAwMDAwLAorCUZFX0hBU19FWFRFTkRFRF9DQVBTCQk9IDB4ODAwMDAwLCAgIC8qIFdlIG5lZWQgbW9yZSBiaXRzcGFjZSBmb3IgbmV3ZXIgQVBJcywgaW5kaWNhdGUgdGhpcy4gKi8KKwlGRV9DQU5fVFVSQk9fRkVDCQk9IDB4ODAwMDAwMCwgIC8qIGZyb250ZW5kIHN1cHBvcnRzICJ0dXJibyBmZWMgbW9kdWxhdGlvbiIgKi8KKwlGRV9DQU5fMkdfTU9EVUxBVElPTgkJPSAweDEwMDAwMDAwLCAvKiBmcm9udGVuZCBzdXBwb3J0cyAiMm5kIGdlbmVyYXRpb24gbW9kdWxhdGlvbiIgKERWQi1TMikgKi8KKwlGRV9ORUVEU19CRU5ESU5HCQk9IDB4MjAwMDAwMDAsIC8qIG5vdCBzdXBwb3J0ZWQgYW55bW9yZSwgZG9uJ3QgdXNlIChmcm9udGVuZCByZXF1aXJlcyBmcmVxdWVuY3kgYmVuZGluZykgKi8KKwlGRV9DQU5fUkVDT1ZFUgkJCT0gMHg0MDAwMDAwMCwgLyogZnJvbnRlbmQgY2FuIHJlY292ZXIgZnJvbSBhIGNhYmxlIHVucGx1ZyBhdXRvbWF0aWNhbGx5ICovCisJRkVfQ0FOX01VVEVfVFMJCQk9IDB4ODAwMDAwMDAgIC8qIGZyb250ZW5kIGNhbiBzdG9wIHNwdXJpb3VzIFRTIGRhdGEgb3V0cHV0ICovCit9IGZlX2NhcHNfdDsKKworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kX2luZm8geworCWNoYXIgICAgICAgbmFtZVsxMjhdOworCWZlX3R5cGVfdCAgdHlwZTsKKwlfX3UzMiAgICAgIGZyZXF1ZW5jeV9taW47CisJX191MzIgICAgICBmcmVxdWVuY3lfbWF4OworCV9fdTMyICAgICAgZnJlcXVlbmN5X3N0ZXBzaXplOworCV9fdTMyICAgICAgZnJlcXVlbmN5X3RvbGVyYW5jZTsKKwlfX3UzMiAgICAgIHN5bWJvbF9yYXRlX21pbjsKKwlfX3UzMiAgICAgIHN5bWJvbF9yYXRlX21heDsKKwlfX3UzMiAgICAgIHN5bWJvbF9yYXRlX3RvbGVyYW5jZTsJLyogcHBtICovCisJX191MzIgICAgICBub3RpZmllcl9kZWxheTsJCS8qIERFUFJFQ0FURUQgKi8KKwlmZV9jYXBzX3QgIGNhcHM7Cit9OworCisKKy8qKgorICogIENoZWNrIG91dCB0aGUgRGlTRXFDIGJ1cyBzcGVjIGF2YWlsYWJsZSBvbiBodHRwOi8vd3d3LmV1dGVsc2F0Lm9yZy8gZm9yCisgKiAgdGhlIG1lYW5pbmcgb2YgdGhpcyBzdHJ1Y3QuLi4KKyAqLworc3RydWN0IGR2Yl9kaXNlcWNfbWFzdGVyX2NtZCB7CisJX191OCBtc2cgWzZdOwkvKiAgeyBmcmFtaW5nLCBhZGRyZXNzLCBjb21tYW5kLCBkYXRhIFszXSB9ICovCisJX191OCBtc2dfbGVuOwkvKiAgdmFsaWQgdmFsdWVzIGFyZSAzLi4uNiAgKi8KK307CisKKworc3RydWN0IGR2Yl9kaXNlcWNfc2xhdmVfcmVwbHkgeworCV9fdTggbXNnIFs0XTsJLyogIHsgZnJhbWluZywgZGF0YSBbM10gfSAqLworCV9fdTggbXNnX2xlbjsJLyogIHZhbGlkIHZhbHVlcyBhcmUgMC4uLjQsIDAgbWVhbnMgbm8gbXNnICAqLworCWludCAgdGltZW91dDsJLyogIHJldHVybiBmcm9tIGlvY3RsIGFmdGVyIHRpbWVvdXQgbXMgd2l0aCAqLworfTsJCQkvKiAgZXJyb3Jjb2RlIHdoZW4gbm8gbWVzc2FnZSB3YXMgcmVjZWl2ZWQgICovCisKKwordHlwZWRlZiBlbnVtIGZlX3NlY192b2x0YWdlIHsKKwlTRUNfVk9MVEFHRV8xMywKKwlTRUNfVk9MVEFHRV8xOCwKKwlTRUNfVk9MVEFHRV9PRkYKK30gZmVfc2VjX3ZvbHRhZ2VfdDsKKworCit0eXBlZGVmIGVudW0gZmVfc2VjX3RvbmVfbW9kZSB7CisJU0VDX1RPTkVfT04sCisJU0VDX1RPTkVfT0ZGCit9IGZlX3NlY190b25lX21vZGVfdDsKKworCit0eXBlZGVmIGVudW0gZmVfc2VjX21pbmlfY21kIHsKKwlTRUNfTUlOSV9BLAorCVNFQ19NSU5JX0IKK30gZmVfc2VjX21pbmlfY21kX3Q7CisKKwordHlwZWRlZiBlbnVtIGZlX3N0YXR1cyB7CisJRkVfSEFTX1NJR05BTAk9IDB4MDEsICAgLyogZm91bmQgc29tZXRoaW5nIGFib3ZlIHRoZSBub2lzZSBsZXZlbCAqLworCUZFX0hBU19DQVJSSUVSCT0gMHgwMiwgICAvKiBmb3VuZCBhIERWQiBzaWduYWwgICovCisJRkVfSEFTX1ZJVEVSQkkJPSAweDA0LCAgIC8qIEZFQyBpcyBzdGFibGUgICovCisJRkVfSEFTX1NZTkMJPSAweDA4LCAgIC8qIGZvdW5kIHN5bmMgYnl0ZXMgICovCisJRkVfSEFTX0xPQ0sJPSAweDEwLCAgIC8qIGV2ZXJ5dGhpbmcncyB3b3JraW5nLi4uICovCisJRkVfVElNRURPVVQJPSAweDIwLCAgIC8qIG5vIGxvY2sgd2l0aGluIHRoZSBsYXN0IH4yIHNlY29uZHMgKi8KKwlGRV9SRUlOSVQJPSAweDQwICAgIC8qIGZyb250ZW5kIHdhcyByZWluaXRpYWxpemVkLCAgKi8KK30gZmVfc3RhdHVzX3Q7CQkJICAvKiBhcHBsaWNhdGlvbiBpcyByZWNvbW1lbmRlZCB0byByZXNldCAqLworCQkJCSAgLyogRGlTRXFDLCB0b25lIGFuZCBwYXJhbWV0ZXJzICovCisKK3R5cGVkZWYgZW51bSBmZV9zcGVjdHJhbF9pbnZlcnNpb24geworCUlOVkVSU0lPTl9PRkYsCisJSU5WRVJTSU9OX09OLAorCUlOVkVSU0lPTl9BVVRPCit9IGZlX3NwZWN0cmFsX2ludmVyc2lvbl90OworCisKK3R5cGVkZWYgZW51bSBmZV9jb2RlX3JhdGUgeworCUZFQ19OT05FID0gMCwKKwlGRUNfMV8yLAorCUZFQ18yXzMsCisJRkVDXzNfNCwKKwlGRUNfNF81LAorCUZFQ181XzYsCisJRkVDXzZfNywKKwlGRUNfN184LAorCUZFQ184XzksCisJRkVDX0FVVE8sCisJRkVDXzNfNSwKKwlGRUNfOV8xMCwKK30gZmVfY29kZV9yYXRlX3Q7CisKKwordHlwZWRlZiBlbnVtIGZlX21vZHVsYXRpb24geworCVFQU0ssCisJUUFNXzE2LAorCVFBTV8zMiwKKwlRQU1fNjQsCisJUUFNXzEyOCwKKwlRQU1fMjU2LAorCVFBTV9BVVRPLAorCVZTQl84LAorCVZTQl8xNiwKKwlQU0tfOCwKKwlBUFNLXzE2LAorCUFQU0tfMzIsCisJRFFQU0ssCit9IGZlX21vZHVsYXRpb25fdDsKKwordHlwZWRlZiBlbnVtIGZlX3RyYW5zbWl0X21vZGUgeworCVRSQU5TTUlTU0lPTl9NT0RFXzJLLAorCVRSQU5TTUlTU0lPTl9NT0RFXzhLLAorCVRSQU5TTUlTU0lPTl9NT0RFX0FVVE8sCisJVFJBTlNNSVNTSU9OX01PREVfNEsKK30gZmVfdHJhbnNtaXRfbW9kZV90OworCit0eXBlZGVmIGVudW0gZmVfYmFuZHdpZHRoIHsKKwlCQU5EV0lEVEhfOF9NSFosCisJQkFORFdJRFRIXzdfTUhaLAorCUJBTkRXSURUSF82X01IWiwKKwlCQU5EV0lEVEhfQVVUTworfSBmZV9iYW5kd2lkdGhfdDsKKworCit0eXBlZGVmIGVudW0gZmVfZ3VhcmRfaW50ZXJ2YWwgeworCUdVQVJEX0lOVEVSVkFMXzFfMzIsCisJR1VBUkRfSU5URVJWQUxfMV8xNiwKKwlHVUFSRF9JTlRFUlZBTF8xXzgsCisJR1VBUkRfSU5URVJWQUxfMV80LAorCUdVQVJEX0lOVEVSVkFMX0FVVE8KK30gZmVfZ3VhcmRfaW50ZXJ2YWxfdDsKKworCit0eXBlZGVmIGVudW0gZmVfaGllcmFyY2h5IHsKKwlISUVSQVJDSFlfTk9ORSwKKwlISUVSQVJDSFlfMSwKKwlISUVSQVJDSFlfMiwKKwlISUVSQVJDSFlfNCwKKwlISUVSQVJDSFlfQVVUTworfSBmZV9oaWVyYXJjaHlfdDsKKworCitzdHJ1Y3QgZHZiX3Fwc2tfcGFyYW1ldGVycyB7CisJX191MzIJCXN5bWJvbF9yYXRlOyAgLyogc3ltYm9sIHJhdGUgaW4gU3ltYm9scyBwZXIgc2Vjb25kICovCisJZmVfY29kZV9yYXRlX3QJZmVjX2lubmVyOyAgICAvKiBmb3J3YXJkIGVycm9yIGNvcnJlY3Rpb24gKHNlZSBhYm92ZSkgKi8KK307CisKK3N0cnVjdCBkdmJfcWFtX3BhcmFtZXRlcnMgeworCV9fdTMyCQlzeW1ib2xfcmF0ZTsgLyogc3ltYm9sIHJhdGUgaW4gU3ltYm9scyBwZXIgc2Vjb25kICovCisJZmVfY29kZV9yYXRlX3QJZmVjX2lubmVyOyAgIC8qIGZvcndhcmQgZXJyb3IgY29ycmVjdGlvbiAoc2VlIGFib3ZlKSAqLworCWZlX21vZHVsYXRpb25fdAltb2R1bGF0aW9uOyAgLyogbW9kdWxhdGlvbiB0eXBlIChzZWUgYWJvdmUpICovCit9OworCitzdHJ1Y3QgZHZiX3ZzYl9wYXJhbWV0ZXJzIHsKKwlmZV9tb2R1bGF0aW9uX3QJbW9kdWxhdGlvbjsgIC8qIG1vZHVsYXRpb24gdHlwZSAoc2VlIGFib3ZlKSAqLworfTsKKworc3RydWN0IGR2Yl9vZmRtX3BhcmFtZXRlcnMgeworCWZlX2JhbmR3aWR0aF90ICAgICAgYmFuZHdpZHRoOworCWZlX2NvZGVfcmF0ZV90ICAgICAgY29kZV9yYXRlX0hQOyAgLyogaGlnaCBwcmlvcml0eSBzdHJlYW0gY29kZSByYXRlICovCisJZmVfY29kZV9yYXRlX3QgICAgICBjb2RlX3JhdGVfTFA7ICAvKiBsb3cgcHJpb3JpdHkgc3RyZWFtIGNvZGUgcmF0ZSAqLworCWZlX21vZHVsYXRpb25fdCAgICAgY29uc3RlbGxhdGlvbjsgLyogbW9kdWxhdGlvbiB0eXBlIChzZWUgYWJvdmUpICovCisJZmVfdHJhbnNtaXRfbW9kZV90ICB0cmFuc21pc3Npb25fbW9kZTsKKwlmZV9ndWFyZF9pbnRlcnZhbF90IGd1YXJkX2ludGVydmFsOworCWZlX2hpZXJhcmNoeV90ICAgICAgaGllcmFyY2h5X2luZm9ybWF0aW9uOworfTsKKworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgeworCV9fdTMyIGZyZXF1ZW5jeTsgICAgIC8qIChhYnNvbHV0ZSkgZnJlcXVlbmN5IGluIEh6IGZvciBRQU0vT0ZETS9BVFNDICovCisJCQkgICAgIC8qIGludGVybWVkaWF0ZSBmcmVxdWVuY3kgaW4ga0h6IGZvciBRUFNLICovCisJZmVfc3BlY3RyYWxfaW52ZXJzaW9uX3QgaW52ZXJzaW9uOworCXVuaW9uIHsKKwkJc3RydWN0IGR2Yl9xcHNrX3BhcmFtZXRlcnMgcXBzazsKKwkJc3RydWN0IGR2Yl9xYW1fcGFyYW1ldGVycyAgcWFtOworCQlzdHJ1Y3QgZHZiX29mZG1fcGFyYW1ldGVycyBvZmRtOworCQlzdHJ1Y3QgZHZiX3ZzYl9wYXJhbWV0ZXJzIHZzYjsKKwl9IHU7Cit9OworCisKK3N0cnVjdCBkdmJfZnJvbnRlbmRfZXZlbnQgeworCWZlX3N0YXR1c190IHN0YXR1czsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgcGFyYW1ldGVyczsKK307CisKKy8qIFMyQVBJIENvbW1hbmRzICovCisjZGVmaW5lIERUVl9VTkRFRklORUQJCTAKKyNkZWZpbmUgRFRWX1RVTkUJCTEKKyNkZWZpbmUgRFRWX0NMRUFSCQkyCisjZGVmaW5lIERUVl9GUkVRVUVOQ1kJCTMKKyNkZWZpbmUgRFRWX01PRFVMQVRJT04JCTQKKyNkZWZpbmUgRFRWX0JBTkRXSURUSF9IWgk1CisjZGVmaW5lIERUVl9JTlZFUlNJT04JCTYKKyNkZWZpbmUgRFRWX0RJU0VRQ19NQVNURVIJNworI2RlZmluZSBEVFZfU1lNQk9MX1JBVEUJCTgKKyNkZWZpbmUgRFRWX0lOTkVSX0ZFQwkJOQorI2RlZmluZSBEVFZfVk9MVEFHRQkJMTAKKyNkZWZpbmUgRFRWX1RPTkUJCTExCisjZGVmaW5lIERUVl9QSUxPVAkJMTIKKyNkZWZpbmUgRFRWX1JPTExPRkYJCTEzCisjZGVmaW5lIERUVl9ESVNFUUNfU0xBVkVfUkVQTFkJMTQKKworLyogQmFzaWMgZW51bWVyYXRpb24gc2V0IGZvciBxdWVyeWluZyB1bmxpbWl0ZWQgY2FwYWJpbGl0aWVzICovCisjZGVmaW5lIERUVl9GRV9DQVBBQklMSVRZX0NPVU5UCTE1CisjZGVmaW5lIERUVl9GRV9DQVBBQklMSVRZCTE2CisjZGVmaW5lIERUVl9ERUxJVkVSWV9TWVNURU0JMTcKKworLyogSVNEQi1UIGFuZCBJU0RCLVRzYiAqLworI2RlZmluZSBEVFZfSVNEQlRfUEFSVElBTF9SRUNFUFRJT04JMTgKKyNkZWZpbmUgRFRWX0lTREJUX1NPVU5EX0JST0FEQ0FTVElORwkxOQorCisjZGVmaW5lIERUVl9JU0RCVF9TQl9TVUJDSEFOTkVMX0lECTIwCisjZGVmaW5lIERUVl9JU0RCVF9TQl9TRUdNRU5UX0lEWAkyMQorI2RlZmluZSBEVFZfSVNEQlRfU0JfU0VHTUVOVF9DT1VOVAkyMgorCisjZGVmaW5lIERUVl9JU0RCVF9MQVlFUkFfRkVDCQkJMjMKKyNkZWZpbmUgRFRWX0lTREJUX0xBWUVSQV9NT0RVTEFUSU9OCQkyNAorI2RlZmluZSBEVFZfSVNEQlRfTEFZRVJBX1NFR01FTlRfQ09VTlQJCTI1CisjZGVmaW5lIERUVl9JU0RCVF9MQVlFUkFfVElNRV9JTlRFUkxFQVZJTkcJMjYKKworI2RlZmluZSBEVFZfSVNEQlRfTEFZRVJCX0ZFQwkJCTI3CisjZGVmaW5lIERUVl9JU0RCVF9MQVlFUkJfTU9EVUxBVElPTgkJMjgKKyNkZWZpbmUgRFRWX0lTREJUX0xBWUVSQl9TRUdNRU5UX0NPVU5UCQkyOQorI2RlZmluZSBEVFZfSVNEQlRfTEFZRVJCX1RJTUVfSU5URVJMRUFWSU5HCTMwCisKKyNkZWZpbmUgRFRWX0lTREJUX0xBWUVSQ19GRUMJCQkzMQorI2RlZmluZSBEVFZfSVNEQlRfTEFZRVJDX01PRFVMQVRJT04JCTMyCisjZGVmaW5lIERUVl9JU0RCVF9MQVlFUkNfU0VHTUVOVF9DT1VOVAkJMzMKKyNkZWZpbmUgRFRWX0lTREJUX0xBWUVSQ19USU1FX0lOVEVSTEVBVklORwkzNAorCisjZGVmaW5lIERUVl9BUElfVkVSU0lPTgkJMzUKKworI2RlZmluZSBEVFZfQ09ERV9SQVRFX0hQCTM2CisjZGVmaW5lIERUVl9DT0RFX1JBVEVfTFAJMzcKKyNkZWZpbmUgRFRWX0dVQVJEX0lOVEVSVkFMCTM4CisjZGVmaW5lIERUVl9UUkFOU01JU1NJT05fTU9ERQkzOQorI2RlZmluZSBEVFZfSElFUkFSQ0hZCQk0MAorCisjZGVmaW5lIERUVl9JU0RCVF9MQVlFUl9FTkFCTEVECTQxCisKKyNkZWZpbmUgRFRWX0lTREJTX1RTX0lECQk0MgorCisjZGVmaW5lIERUVl9NQVhfQ09NTUFORAkJCQlEVFZfSVNEQlNfVFNfSUQKKwordHlwZWRlZiBlbnVtIGZlX3BpbG90IHsKKwlQSUxPVF9PTiwKKwlQSUxPVF9PRkYsCisJUElMT1RfQVVUTywKK30gZmVfcGlsb3RfdDsKKwordHlwZWRlZiBlbnVtIGZlX3JvbGxvZmYgeworCVJPTExPRkZfMzUsIC8qIEltcGxpZWQgdmFsdWUgaW4gRFZCLVMsIGRlZmF1bHQgZm9yIERWQi1TMiAqLworCVJPTExPRkZfMjAsCisJUk9MTE9GRl8yNSwKKwlST0xMT0ZGX0FVVE8sCit9IGZlX3JvbGxvZmZfdDsKKwordHlwZWRlZiBlbnVtIGZlX2RlbGl2ZXJ5X3N5c3RlbSB7CisJU1lTX1VOREVGSU5FRCwKKwlTWVNfRFZCQ19BTk5FWF9BQywKKwlTWVNfRFZCQ19BTk5FWF9CLAorCVNZU19EVkJULAorCVNZU19EU1MsCisJU1lTX0RWQlMsCisJU1lTX0RWQlMyLAorCVNZU19EVkJILAorCVNZU19JU0RCVCwKKwlTWVNfSVNEQlMsCisJU1lTX0lTREJDLAorCVNZU19BVFNDLAorCVNZU19BVFNDTUgsCisJU1lTX0RNQlRILAorCVNZU19DTU1CLAorCVNZU19EQUIsCit9IGZlX2RlbGl2ZXJ5X3N5c3RlbV90OworCitzdHJ1Y3QgZHR2X2NtZHNfaCB7CisJY2hhcgkqbmFtZTsJCS8qIEEgZGlzcGxheSBuYW1lIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgKi8KKworCV9fdTMyCWNtZDsJCS8qIEEgdW5pcXVlIElEICovCisKKwkvKiBGbGFncyAqLworCV9fdTMyCXNldDoxOwkJLyogRWl0aGVyIGEgc2V0IG9yIGdldCBwcm9wZXJ0eSAqLworCV9fdTMyCWJ1ZmZlcjoxOwkvKiBEb2VzIHRoaXMgcHJvcGVydHkgdXNlIHRoZSBidWZmZXI/ICovCisJX191MzIJcmVzZXJ2ZWQ6MzA7CS8qIEFsaWduICovCit9OworCitzdHJ1Y3QgZHR2X3Byb3BlcnR5IHsKKwlfX3UzMiBjbWQ7CisJX191MzIgcmVzZXJ2ZWRbM107CisJdW5pb24geworCQlfX3UzMiBkYXRhOworCQlzdHJ1Y3QgeworCQkJX191OCBkYXRhWzMyXTsKKwkJCV9fdTMyIGxlbjsKKwkJCV9fdTMyIHJlc2VydmVkMVszXTsKKwkJCXZvaWQgKnJlc2VydmVkMjsKKwkJfSBidWZmZXI7CisJfSB1OworCWludCByZXN1bHQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogbnVtIG9mIHByb3BlcnRpZXMgY2Fubm90IGV4Y2VlZCBEVFZfSU9DVExfTUFYX01TR1MgcGVyIGlvY3RsICovCisjZGVmaW5lIERUVl9JT0NUTF9NQVhfTVNHUyA2NAorCitzdHJ1Y3QgZHR2X3Byb3BlcnRpZXMgeworCV9fdTMyIG51bTsKKwlzdHJ1Y3QgZHR2X3Byb3BlcnR5ICpwcm9wczsKK307CisKKyNkZWZpbmUgRkVfU0VUX1BST1BFUlRZCQkgICBfSU9XKCdvJywgODIsIHN0cnVjdCBkdHZfcHJvcGVydGllcykKKyNkZWZpbmUgRkVfR0VUX1BST1BFUlRZCQkgICBfSU9SKCdvJywgODMsIHN0cnVjdCBkdHZfcHJvcGVydGllcykKKworCisvKioKKyAqIFdoZW4gc2V0LCB0aGlzIGZsYWcgd2lsbCBkaXNhYmxlIGFueSB6aWd6YWdnaW5nIG9yIG90aGVyICJub3JtYWwiIHR1bmluZworICogYmVoYXZpb3VyLiBBZGRpdGlvbmFsbHksIHRoZXJlIHdpbGwgYmUgbm8gYXV0b21hdGljIG1vbml0b3Jpbmcgb2YgdGhlIGxvY2sKKyAqIHN0YXR1cywgYW5kIGhlbmNlIG5vIGZyb250ZW5kIGV2ZW50cyB3aWxsIGJlIGdlbmVyYXRlZC4gSWYgYSBmcm9udGVuZCBkZXZpY2UKKyAqIGlzIGNsb3NlZCwgdGhpcyBmbGFnIHdpbGwgYmUgYXV0b21hdGljYWxseSB0dXJuZWQgb2ZmIHdoZW4gdGhlIGRldmljZSBpcworICogcmVvcGVuZWQgcmVhZC13cml0ZS4KKyAqLworI2RlZmluZSBGRV9UVU5FX01PREVfT05FU0hPVCAweDAxCisKKworI2RlZmluZSBGRV9HRVRfSU5GTwkJICAgX0lPUignbycsIDYxLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX2luZm8pCisKKyNkZWZpbmUgRkVfRElTRVFDX1JFU0VUX09WRVJMT0FEICAgX0lPKCdvJywgNjIpCisjZGVmaW5lIEZFX0RJU0VRQ19TRU5EX01BU1RFUl9DTUQgIF9JT1coJ28nLCA2Mywgc3RydWN0IGR2Yl9kaXNlcWNfbWFzdGVyX2NtZCkKKyNkZWZpbmUgRkVfRElTRVFDX1JFQ1ZfU0xBVkVfUkVQTFkgX0lPUignbycsIDY0LCBzdHJ1Y3QgZHZiX2Rpc2VxY19zbGF2ZV9yZXBseSkKKyNkZWZpbmUgRkVfRElTRVFDX1NFTkRfQlVSU1QgICAgICAgX0lPKCdvJywgNjUpICAvKiBmZV9zZWNfbWluaV9jbWRfdCAqLworCisjZGVmaW5lIEZFX1NFVF9UT05FCQkgICBfSU8oJ28nLCA2NikgIC8qIGZlX3NlY190b25lX21vZGVfdCAqLworI2RlZmluZSBGRV9TRVRfVk9MVEFHRQkJICAgX0lPKCdvJywgNjcpICAvKiBmZV9zZWNfdm9sdGFnZV90ICovCisjZGVmaW5lIEZFX0VOQUJMRV9ISUdIX0xOQl9WT0xUQUdFIF9JTygnbycsIDY4KSAgLyogaW50ICovCisKKyNkZWZpbmUgRkVfUkVBRF9TVEFUVVMJCSAgIF9JT1IoJ28nLCA2OSwgZmVfc3RhdHVzX3QpCisjZGVmaW5lIEZFX1JFQURfQkVSCQkgICBfSU9SKCdvJywgNzAsIF9fdTMyKQorI2RlZmluZSBGRV9SRUFEX1NJR05BTF9TVFJFTkdUSCAgICBfSU9SKCdvJywgNzEsIF9fdTE2KQorI2RlZmluZSBGRV9SRUFEX1NOUgkJICAgX0lPUignbycsIDcyLCBfX3UxNikKKyNkZWZpbmUgRkVfUkVBRF9VTkNPUlJFQ1RFRF9CTE9DS1MgX0lPUignbycsIDczLCBfX3UzMikKKworI2RlZmluZSBGRV9TRVRfRlJPTlRFTkQJCSAgIF9JT1coJ28nLCA3Niwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzKQorI2RlZmluZSBGRV9HRVRfRlJPTlRFTkQJCSAgIF9JT1IoJ28nLCA3Nywgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzKQorI2RlZmluZSBGRV9TRVRfRlJPTlRFTkRfVFVORV9NT0RFICBfSU8oJ28nLCA4MSkgLyogdW5zaWduZWQgaW50ICovCisjZGVmaW5lIEZFX0dFVF9FVkVOVAkJICAgX0lPUignbycsIDc4LCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX2V2ZW50KQorCisjZGVmaW5lIEZFX0RJU0hORVRXT1JLX1NFTkRfTEVHQUNZX0NNRCBfSU8oJ28nLCA4MCkgLyogdW5zaWduZWQgaW50ICovCisKKyNlbmRpZiAvKl9EVkJGUk9OVEVORF9IXyovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZHZiL25ldC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2R2Yi9uZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDUxZTdlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2R2Yi9uZXQuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogbmV0LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTWFyY3VzIE1ldHpsZXIgPG1hcmN1c0Bjb252ZXJnZW5jZS5kZT4KKyAqICAgICAgICAgICAgICAgICAgJiBSYWxwaCAgTWV0emxlciA8cmFscGhAY29udmVyZ2VuY2UuZGU+CisgKiAgICAgICAgICAgICAgICAgICAgZm9yIGNvbnZlcmdlbmNlIGludGVncmF0ZWQgbWVkaWEgR21iSAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMQorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfRFZCTkVUX0hfCisjZGVmaW5lIF9EVkJORVRfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBkdmJfbmV0X2lmIHsKKwlfX3UxNiBwaWQ7CisJX191MTYgaWZfbnVtOworCV9fdTggIGZlZWR0eXBlOworI2RlZmluZSBEVkJfTkVUX0ZFRURUWVBFX01QRSAwCS8qIG11bHRpIHByb3RvY29sIGVuY2Fwc3VsYXRpb24gKi8KKyNkZWZpbmUgRFZCX05FVF9GRUVEVFlQRV9VTEUgMQkvKiB1bHRyYSBsaWdodHdlaWdodCBlbmNhcHN1bGF0aW9uICovCit9OworCisKKyNkZWZpbmUgTkVUX0FERF9JRiAgICBfSU9XUignbycsIDUyLCBzdHJ1Y3QgZHZiX25ldF9pZikKKyNkZWZpbmUgTkVUX1JFTU9WRV9JRiBfSU8oJ28nLCA1MykKKyNkZWZpbmUgTkVUX0dFVF9JRiAgICBfSU9XUignbycsIDU0LCBzdHJ1Y3QgZHZiX25ldF9pZikKKworCisvKiBiaW5hcnkgY29tcGF0aWJpbGl0eSBjcnVmdDogKi8KK3N0cnVjdCBfX2R2Yl9uZXRfaWZfb2xkIHsKKwlfX3UxNiBwaWQ7CisJX191MTYgaWZfbnVtOworfTsKKyNkZWZpbmUgX19ORVRfQUREX0lGX09MRCBfSU9XUignbycsIDUyLCBzdHJ1Y3QgX19kdmJfbmV0X2lmX29sZCkKKyNkZWZpbmUgX19ORVRfR0VUX0lGX09MRCBfSU9XUignbycsIDU0LCBzdHJ1Y3QgX19kdmJfbmV0X2lmX29sZCkKKworCisjZW5kaWYgLypfRFZCTkVUX0hfKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9kdmIvb3NkLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZHZiL29zZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyOGM3Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZHZiL29zZC5oCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogb3NkLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUmFscGggIE1ldHpsZXIgPHJhbHBoQGNvbnZlcmdlbmNlLmRlPgorICogICAgICAgICAgICAgICAgICAmIE1hcmN1cyBNZXR6bGVyIDxtYXJjdXNAY29udmVyZ2VuY2UuZGU+CisgKiAgICAgICAgICAgICAgICAgICAgZm9yIGNvbnZlcmdlbmNlIGludGVncmF0ZWQgbWVkaWEgR21iSAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIExlc3NlciBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMQorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfRFZCT1NEX0hfCisjZGVmaW5lIF9EVkJPU0RfSF8KKworCisKK3R5cGVkZWYgZW51bSB7CisgIC8vIEFsbCBmdW5jdGlvbnMgcmV0dXJuIC0yIG9uICJub3Qgb3BlbiIKKyAgT1NEX0Nsb3NlPTEsICAgIC8vICgpCisgIC8vIERpc2FibGVzIE9TRCBhbmQgcmVsZWFzZXMgdGhlIGJ1ZmZlcnMKKyAgLy8gcmV0dXJucyAwIG9uIHN1Y2Nlc3MKKyAgT1NEX09wZW4sICAgICAgIC8vICh4MCx5MCx4MSx5MSxCaXRQZXJQaXhlbFsyLzQvOF0oY29sb3ImMHgwRiksbWl4WzAuLjE1XShjb2xvciYweEYwKSkKKyAgLy8gT3BlbnMgT1NEIHdpdGggdGhpcyBzaXplIGFuZCBiaXQgZGVwdGgKKyAgLy8gcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIERSQU0gYWxsb2NhdGlvbiBlcnJvciwgLTIgb24gImFscmVhZHkgb3BlbiIKKyAgT1NEX1Nob3csICAgICAgIC8vICgpCisgIC8vIGVuYWJsZXMgT1NEIG1vZGUKKyAgLy8gcmV0dXJucyAwIG9uIHN1Y2Nlc3MKKyAgT1NEX0hpZGUsICAgICAgIC8vICgpCisgIC8vIGRpc2FibGVzIE9TRCBtb2RlCisgIC8vIHJldHVybnMgMCBvbiBzdWNjZXNzCisgIE9TRF9DbGVhciwgICAgICAvLyAoKQorICAvLyBTZXRzIGFsbCBwaXhlbCB0byBjb2xvciAwCisgIC8vIHJldHVybnMgMCBvbiBzdWNjZXNzCisgIE9TRF9GaWxsLCAgICAgICAvLyAoY29sb3IpCisgIC8vIFNldHMgYWxsIHBpeGVsIHRvIGNvbG9yIDxjb2w+CisgIC8vIHJldHVybnMgMCBvbiBzdWNjZXNzCisgIE9TRF9TZXRDb2xvciwgICAvLyAoY29sb3IsUnt4MH0sR3t5MH0sQnt4MX0sb3BhY2l0eXt5MX0pCisgIC8vIHNldCBwYWxldHRlIGVudHJ5IDxudW0+IHRvIDxyLGcsYj4sIDxtaXg+IGFuZCA8dHJhbnM+IGFwcGx5CisgIC8vIFIsRyxCOiAwLi4yNTUKKyAgLy8gUj1SZWQsIEc9R3JlZW4sIEI9Qmx1ZQorICAvLyBvcGFjaXR5PTA6ICAgICAgcGl4ZWwgb3BhY2l0eSAwJSAob25seSB2aWRlbyBwaXhlbCBzaG93cykKKyAgLy8gb3BhY2l0eT0xLi4yNTQ6IHBpeGVsIG9wYWNpdHkgYXMgc3BlY2lmaWVkIGluIGhlYWRlcgorICAvLyBvcGFjaXR5PTI1NTogICAgcGl4ZWwgb3BhY2l0eSAxMDAlIChvbmx5IE9TRCBwaXhlbCBzaG93cykKKyAgLy8gcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCisgIE9TRF9TZXRQYWxldHRlLCAvLyAoZmlyc3Rjb2xvcntjb2xvcn0sbGFzdGNvbG9ye3gwfSxkYXRhKQorICAvLyBTZXQgYSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgcGFsZXR0ZQorICAvLyBzZXRzIHRoZSBlbnRyaWVzICJmaXJzdGNvbG9yIiB0aHJvdWdoICJsYXN0Y29sb3IiIGZyb20gdGhlIGFycmF5ICJkYXRhIgorICAvLyBkYXRhIGhhcyA0IGJ5dGUgZm9yIGVhY2ggY29sb3I6CisgIC8vIFIsRyxCLCBhbmQgYSBvcGFjaXR5IHZhbHVlOiAwLT50cmFuc3BhcmVudCwgMS4uMjU0LT5taXgsIDI1NS0+cGl4ZWwKKyAgT1NEX1NldFRyYW5zLCAgIC8vICh0cmFuc3BhcmVuY3l7Y29sb3J9KQorICAvLyBTZXRzIHRyYW5zcGFyZW5jeSBvZiBtaXhlZCBwaXhlbCAoMC4uMTUpCisgIC8vIHJldHVybnMgMCBvbiBzdWNjZXNzCisgIE9TRF9TZXRQaXhlbCwgICAvLyAoeDAseTAsY29sb3IpCisgIC8vIHNldHMgcGl4ZWwgPHg+LDx5PiB0byBjb2xvciBudW1iZXIgPGNvbD4KKyAgLy8gcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCisgIE9TRF9HZXRQaXhlbCwgICAvLyAoeDAseTApCisgIC8vIHJldHVybnMgY29sb3IgbnVtYmVyIG9mIHBpeGVsIDx4Piw8eT4sICBvciAtMQorICBPU0RfU2V0Um93LCAgICAgLy8gKHgwLHkwLHgxLGRhdGEpCisgIC8vIGZpbGxzIHBpeGVscyB4MCx5IHRocm91Z2ggIHgxLHkgd2l0aCB0aGUgY29udGVudCBvZiBkYXRhW10KKyAgLy8gcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGNsaXBwaW5nIGFsbCBwaXhlbCAobm8gcGl4ZWwgZHJhd24pCisgIE9TRF9TZXRCbG9jaywgICAvLyAoeDAseTAseDEseTEsaW5jcmVtZW50e2NvbG9yfSxkYXRhKQorICAvLyBmaWxscyBwaXhlbHMgeDAseTAgdGhyb3VnaCAgeDEseTEgd2l0aCB0aGUgY29udGVudCBvZiBkYXRhW10KKyAgLy8gaW5jIGNvbnRhaW5zIHRoZSB3aWR0aCBvZiBvbmUgbGluZSBpbiB0aGUgZGF0YSBibG9jaywKKyAgLy8gaW5jPD0wIHVzZXMgYmxvY2t3aWR0aCBhcyBsaW5ld2lkdGgKKyAgLy8gcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGNsaXBwaW5nIGFsbCBwaXhlbAorICBPU0RfRmlsbFJvdywgICAgLy8gKHgwLHkwLHgxLGNvbG9yKQorICAvLyBmaWxscyBwaXhlbHMgeDAseSB0aHJvdWdoICB4MSx5IHdpdGggdGhlIGNvbG9yIDxjb2w+CisgIC8vIHJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBjbGlwcGluZyBhbGwgcGl4ZWwKKyAgT1NEX0ZpbGxCbG9jaywgIC8vICh4MCx5MCx4MSx5MSxjb2xvcikKKyAgLy8gZmlsbHMgcGl4ZWxzIHgwLHkwIHRocm91Z2ggIHgxLHkxIHdpdGggdGhlIGNvbG9yIDxjb2w+CisgIC8vIHJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBjbGlwcGluZyBhbGwgcGl4ZWwKKyAgT1NEX0xpbmUsICAgICAgIC8vICh4MCx5MCx4MSx5MSxjb2xvcikKKyAgLy8gZHJhdyBhIGxpbmUgZnJvbSB4MCx5MCB0byB4MSx5MSB3aXRoIHRoZSBjb2xvciA8Y29sPgorICAvLyByZXR1cm5zIDAgb24gc3VjY2VzcworICBPU0RfUXVlcnksICAgICAgLy8gKHgwLHkwLHgxLHkxLHhhc3B7Y29sb3J9fSksIHlhc3A9MTEKKyAgLy8gZmlsbHMgcGFyYW1ldGVycyB3aXRoIHRoZSBwaWN0dXJlIGRpbWVuc2lvbnMgYW5kIHRoZSBwaXhlbCBhc3BlY3QgcmF0aW8KKyAgLy8gcmV0dXJucyAwIG9uIHN1Y2Nlc3MKKyAgT1NEX1Rlc3QsICAgICAgIC8vICgpCisgIC8vIGRyYXdzIGEgdGVzdCBwaWN0dXJlLiBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIG9ubHkKKyAgLy8gcmV0dXJucyAwIG9uIHN1Y2Nlc3MKKy8vIFRPRE86IHJlbW92ZSAidGVzdCIgaW4gZmluYWwgdmVyc2lvbgorICBPU0RfVGV4dCwgICAgICAgLy8gKHgwLHkwLHNpemUsY29sb3IsdGV4dCkKKyAgT1NEX1NldFdpbmRvdywgLy8gICh4MCkgc2V0IHdpbmRvdyB3aXRoIG51bWJlciAwPHgwPDggYXMgY3VycmVudAorICBPU0RfTW92ZVdpbmRvdywgLy8gIG1vdmUgY3VycmVudCB3aW5kb3cgdG8gKHgwLCB5MCkKKyAgT1NEX09wZW5SYXcsCS8vIE9wZW4gb3RoZXIgdHlwZXMgb2YgT1NEIHdpbmRvd3MKK30gT1NEX0NvbW1hbmQ7CisKK3R5cGVkZWYgc3RydWN0IG9zZF9jbWRfcyB7CisJT1NEX0NvbW1hbmQgY21kOworCWludCB4MDsKKwlpbnQgeTA7CisJaW50IHgxOworCWludCB5MTsKKwlpbnQgY29sb3I7CisJdm9pZCAqZGF0YTsKK30gb3NkX2NtZF90OworCisvKiBPU0RfT3BlblJhdzogc2V0ICdjb2xvcicgdG8gZGVzaXJlZCB3aW5kb3cgdHlwZSAqLwordHlwZWRlZiBlbnVtIHsKKwlPU0RfQklUTUFQMSwgICAgICAgICAgIC8qIDEgYml0IGJpdG1hcCAqLworCU9TRF9CSVRNQVAyLCAgICAgICAgICAgLyogMiBiaXQgYml0bWFwICovCisJT1NEX0JJVE1BUDQsICAgICAgICAgICAvKiA0IGJpdCBiaXRtYXAgKi8KKwlPU0RfQklUTUFQOCwgICAgICAgICAgIC8qIDggYml0IGJpdG1hcCAqLworCU9TRF9CSVRNQVAxSFIsICAgICAgICAgLyogMSBCaXQgYml0bWFwIGhhbGYgcmVzb2x1dGlvbiAqLworCU9TRF9CSVRNQVAySFIsICAgICAgICAgLyogMiBiaXQgYml0bWFwIGhhbGYgcmVzb2x1dGlvbiAqLworCU9TRF9CSVRNQVA0SFIsICAgICAgICAgLyogNCBiaXQgYml0bWFwIGhhbGYgcmVzb2x1dGlvbiAqLworCU9TRF9CSVRNQVA4SFIsICAgICAgICAgLyogOCBiaXQgYml0bWFwIGhhbGYgcmVzb2x1dGlvbiAqLworCU9TRF9ZQ1JDQjQyMiwgICAgICAgICAgLyogNDoyOjIgWUNSQ0IgR3JhcGhpYyBEaXNwbGF5ICovCisJT1NEX1lDUkNCNDQ0LCAgICAgICAgICAvKiA0OjQ6NCBZQ1JDQiBHcmFwaGljIERpc3BsYXkgKi8KKwlPU0RfWUNSQ0I0NDRIUiwgICAgICAgIC8qIDQ6NDo0IFlDUkNCIGdyYXBoaWMgaGFsZiByZXNvbHV0aW9uICovCisJT1NEX1ZJREVPVFNJWkUsICAgICAgICAvKiBUcnVlIFNpemUgTm9ybWFsIE1QRUcgVmlkZW8gRGlzcGxheSAqLworCU9TRF9WSURFT0hTSVpFLCAgICAgICAgLyogTVBFRyBWaWRlbyBEaXNwbGF5IEhhbGYgUmVzb2x1dGlvbiAqLworCU9TRF9WSURFT1FTSVpFLCAgICAgICAgLyogTVBFRyBWaWRlbyBEaXNwbGF5IFF1YXJ0ZXIgUmVzb2x1dGlvbiAqLworCU9TRF9WSURFT0RTSVpFLCAgICAgICAgLyogTVBFRyBWaWRlbyBEaXNwbGF5IERvdWJsZSBSZXNvbHV0aW9uICovCisJT1NEX1ZJREVPVEhTSVpFLCAgICAgICAvKiBUcnVlIFNpemUgTVBFRyBWaWRlbyBEaXNwbGF5IEhhbGYgUmVzb2x1dGlvbiAqLworCU9TRF9WSURFT1RRU0laRSwgICAgICAgLyogVHJ1ZSBTaXplIE1QRUcgVmlkZW8gRGlzcGxheSBRdWFydGVyIFJlc29sdXRpb24qLworCU9TRF9WSURFT1REU0laRSwgICAgICAgLyogVHJ1ZSBTaXplIE1QRUcgVmlkZW8gRGlzcGxheSBEb3VibGUgUmVzb2x1dGlvbiAqLworCU9TRF9WSURFT05TSVpFLCAgICAgICAgLyogRnVsbCBTaXplIE1QRUcgVmlkZW8gRGlzcGxheSAqLworCU9TRF9DVVJTT1IgICAgICAgICAgICAgLyogQ3Vyc29yICovCit9IG9zZF9yYXdfd2luZG93X3Q7CisKK3R5cGVkZWYgc3RydWN0IG9zZF9jYXBfcyB7CisJaW50ICBjbWQ7CisjZGVmaW5lIE9TRF9DQVBfTUVNU0laRSAgICAgICAgIDEgIC8qIG1lbW9yeSBzaXplICovCisJbG9uZyB2YWw7Cit9IG9zZF9jYXBfdDsKKworCisjZGVmaW5lIE9TRF9TRU5EX0NNRCAgICAgICAgICAgIF9JT1coJ28nLCAxNjAsIG9zZF9jbWRfdCkKKyNkZWZpbmUgT1NEX0dFVF9DQVBBQklMSVRZICAgICAgX0lPUignbycsIDE2MSwgb3NkX2NhcF90KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9kdmIvdmVyc2lvbi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2R2Yi92ZXJzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE3NTQ2YwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9kdmIvdmVyc2lvbi5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiB2ZXJzaW9uLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgSG9sZ2VyIFdhZWNodGxlciA8aG9sZ2VyQGNvbnZlcmdlbmNlLmRlPgorICogICAgICAgICAgICAgICAgICAgIGZvciBjb252ZXJnZW5jZSBpbnRlZ3JhdGVkIG1lZGlhIEdtYkgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX0RWQlZFUlNJT05fSF8KKyNkZWZpbmUgX0RWQlZFUlNJT05fSF8KKworI2RlZmluZSBEVkJfQVBJX1ZFUlNJT04gNQorI2RlZmluZSBEVkJfQVBJX1ZFUlNJT05fTUlOT1IgMgorCisjZW5kaWYgLypfRFZCVkVSU0lPTl9IXyovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZHZiL3ZpZGVvLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZHZiL3ZpZGVvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVjNzlhNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9kdmIvdmlkZW8uaApAQCAtMCwwICsxLDI3MiBAQAorLyoKKyAqIHZpZGVvLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTWFyY3VzIE1ldHpsZXIgPG1hcmN1c0Bjb252ZXJnZW5jZS5kZT4KKyAqICAgICAgICAgICAgICAgICAgJiBSYWxwaCAgTWV0emxlciA8cmFscGhAY29udmVyZ2VuY2UuZGU+CisgKiAgICAgICAgICAgICAgICAgICAgZm9yIGNvbnZlcmdlbmNlIGludGVncmF0ZWQgbWVkaWEgR21iSAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMQorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfRFZCVklERU9fSF8KKyNkZWZpbmUgX0RWQlZJREVPX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKwordHlwZWRlZiBlbnVtIHsKKwlWSURFT19GT1JNQVRfNF8zLCAgICAgLyogU2VsZWN0IDQ6MyBmb3JtYXQgKi8KKwlWSURFT19GT1JNQVRfMTZfOSwgICAgLyogU2VsZWN0IDE2OjkgZm9ybWF0LiAqLworCVZJREVPX0ZPUk1BVF8yMjFfMSAgICAvKiAyLjIxOjEgKi8KK30gdmlkZW9fZm9ybWF0X3Q7CisKKwordHlwZWRlZiBlbnVtIHsKKwkgVklERU9fU1lTVEVNX1BBTCwKKwkgVklERU9fU1lTVEVNX05UU0MsCisJIFZJREVPX1NZU1RFTV9QQUxOLAorCSBWSURFT19TWVNURU1fUEFMTmMsCisJIFZJREVPX1NZU1RFTV9QQUxNLAorCSBWSURFT19TWVNURU1fTlRTQzYwLAorCSBWSURFT19TWVNURU1fUEFMNjAsCisJIFZJREVPX1NZU1RFTV9QQUxNNjAKK30gdmlkZW9fc3lzdGVtX3Q7CisKKwordHlwZWRlZiBlbnVtIHsKKwlWSURFT19QQU5fU0NBTiwgICAgICAgLyogdXNlIHBhbiBhbmQgc2NhbiBmb3JtYXQgKi8KKwlWSURFT19MRVRURVJfQk9YLCAgICAgLyogdXNlIGxldHRlcmJveCBmb3JtYXQgKi8KKwlWSURFT19DRU5URVJfQ1VUX09VVCAgLyogdXNlIGNlbnRlciBjdXQgb3V0IGZvcm1hdCAqLworfSB2aWRlb19kaXNwbGF5Zm9ybWF0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgdzsKKwlpbnQgaDsKKwl2aWRlb19mb3JtYXRfdCBhc3BlY3RfcmF0aW87Cit9IHZpZGVvX3NpemVfdDsKKwordHlwZWRlZiBlbnVtIHsKKwlWSURFT19TT1VSQ0VfREVNVVgsIC8qIFNlbGVjdCB0aGUgZGVtdXggYXMgdGhlIG1haW4gc291cmNlICovCisJVklERU9fU09VUkNFX01FTU9SWSAvKiBJZiB0aGlzIHNvdXJjZSBpcyBzZWxlY3RlZCwgdGhlIHN0cmVhbQorCQkJICAgICAgIGNvbWVzIGZyb20gdGhlIHVzZXIgdGhyb3VnaCB0aGUgd3JpdGUKKwkJCSAgICAgICBzeXN0ZW0gY2FsbCAqLworfSB2aWRlb19zdHJlYW1fc291cmNlX3Q7CisKKwordHlwZWRlZiBlbnVtIHsKKwlWSURFT19TVE9QUEVELCAvKiBWaWRlbyBpcyBzdG9wcGVkICovCisJVklERU9fUExBWUlORywgLyogVmlkZW8gaXMgY3VycmVudGx5IHBsYXlpbmcgKi8KKwlWSURFT19GUkVFWkVEICAvKiBWaWRlbyBpcyBmcmVlemVkICovCit9IHZpZGVvX3BsYXlfc3RhdGVfdDsKKworCisvKiBEZWNvZGVyIGNvbW1hbmRzICovCisjZGVmaW5lIFZJREVPX0NNRF9QTEFZICAgICAgICAoMCkKKyNkZWZpbmUgVklERU9fQ01EX1NUT1AgICAgICAgICgxKQorI2RlZmluZSBWSURFT19DTURfRlJFRVpFICAgICAgKDIpCisjZGVmaW5lIFZJREVPX0NNRF9DT05USU5VRSAgICAoMykKKworLyogRmxhZ3MgZm9yIFZJREVPX0NNRF9GUkVFWkUgKi8KKyNkZWZpbmUgVklERU9fQ01EX0ZSRUVaRV9UT19CTEFDSyAgICAgCSgxIDw8IDApCisKKy8qIEZsYWdzIGZvciBWSURFT19DTURfU1RPUCAqLworI2RlZmluZSBWSURFT19DTURfU1RPUF9UT19CTEFDSyAgICAgIAkoMSA8PCAwKQorI2RlZmluZSBWSURFT19DTURfU1RPUF9JTU1FRElBVEVMWSAgICAgCSgxIDw8IDEpCisKKy8qIFBsYXkgaW5wdXQgZm9ybWF0czogKi8KKy8qIFRoZSBkZWNvZGVyIGhhcyBubyBzcGVjaWFsIGZvcm1hdCByZXF1aXJlbWVudHMgKi8KKyNkZWZpbmUgVklERU9fUExBWV9GTVRfTk9ORSAgICAgICAgICgwKQorLyogVGhlIGRlY29kZXIgcmVxdWlyZXMgZnVsbCBHT1BzICovCisjZGVmaW5lIFZJREVPX1BMQVlfRk1UX0dPUCAgICAgICAgICAoMSkKKworLyogVGhlIHN0cnVjdHVyZSBtdXN0IGJlIHplcm9lZCBiZWZvcmUgdXNlIGJ5IHRoZSBhcHBsaWNhdGlvbgorICAgVGhpcyBlbnN1cmVzIGl0IGNhbiBiZSBleHRlbmRlZCBzYWZlbHkgaW4gdGhlIGZ1dHVyZS4gKi8KK3N0cnVjdCB2aWRlb19jb21tYW5kIHsKKwlfX3UzMiBjbWQ7CisJX191MzIgZmxhZ3M7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX191NjQgcHRzOworCQl9IHN0b3A7CisKKwkJc3RydWN0IHsKKwkJCS8qIDAgb3IgMTAwMCBzcGVjaWZpZXMgbm9ybWFsIHNwZWVkLAorCQkJICAgMSBzcGVjaWZpZXMgZm9yd2FyZCBzaW5nbGUgc3RlcHBpbmcsCisJCQkgICAtMSBzcGVjaWZpZXMgYmFja3dhcmQgc2luZ2xlIHN0ZXBwaW5nLAorCQkJICAgPjE6IHBsYXliYWNrIGF0IHNwZWVkLzEwMDAgb2YgdGhlIG5vcm1hbCBzcGVlZCwKKwkJCSAgIDwtMTogcmV2ZXJzZSBwbGF5YmFjayBhdCAoLXNwZWVkLzEwMDApIG9mIHRoZSBub3JtYWwgc3BlZWQuICovCisJCQlfX3MzMiBzcGVlZDsKKwkJCV9fdTMyIGZvcm1hdDsKKwkJfSBwbGF5OworCisJCXN0cnVjdCB7CisJCQlfX3UzMiBkYXRhWzE2XTsKKwkJfSByYXc7CisJfTsKK307CisKKy8qIEZJRUxEX1VOS05PV04gY2FuIGJlIHVzZWQgaWYgdGhlIGhhcmR3YXJlIGRvZXMgbm90IGtub3cgd2hldGhlcgorICAgdGhlIFZzeW5jIGlzIGZvciBhbiBvZGQsIGV2ZW4gb3IgcHJvZ3Jlc3NpdmUgKGkuZS4gbm9uLWludGVybGFjZWQpCisgICBmaWVsZC4gKi8KKyNkZWZpbmUgVklERU9fVlNZTkNfRklFTERfVU5LTk9XTiAgCSgwKQorI2RlZmluZSBWSURFT19WU1lOQ19GSUVMRF9PREQgCQkoMSkKKyNkZWZpbmUgVklERU9fVlNZTkNfRklFTERfRVZFTgkJKDIpCisjZGVmaW5lIFZJREVPX1ZTWU5DX0ZJRUxEX1BST0dSRVNTSVZFCSgzKQorCitzdHJ1Y3QgdmlkZW9fZXZlbnQgeworCV9fczMyIHR5cGU7CisjZGVmaW5lIFZJREVPX0VWRU5UX1NJWkVfQ0hBTkdFRAkxCisjZGVmaW5lIFZJREVPX0VWRU5UX0ZSQU1FX1JBVEVfQ0hBTkdFRAkyCisjZGVmaW5lIFZJREVPX0VWRU5UX0RFQ09ERVJfU1RPUFBFRCAJMworI2RlZmluZSBWSURFT19FVkVOVF9WU1lOQyAJCTQKKwlfX2tlcm5lbF90aW1lX3QgdGltZXN0YW1wOworCXVuaW9uIHsKKwkJdmlkZW9fc2l6ZV90IHNpemU7CisJCXVuc2lnbmVkIGludCBmcmFtZV9yYXRlOwkvKiBpbiBmcmFtZXMgcGVyIDEwMDBzZWMgKi8KKwkJdW5zaWduZWQgY2hhciB2c3luY19maWVsZDsJLyogdW5rbm93bi9vZGQvZXZlbi9wcm9ncmVzc2l2ZSAqLworCX0gdTsKK307CisKKworc3RydWN0IHZpZGVvX3N0YXR1cyB7CisJaW50ICAgICAgICAgICAgICAgICAgIHZpZGVvX2JsYW5rOyAgIC8qIGJsYW5rIHZpZGVvIG9uIGZyZWV6ZT8gKi8KKwl2aWRlb19wbGF5X3N0YXRlX3QgICAgcGxheV9zdGF0ZTsgICAgLyogY3VycmVudCBzdGF0ZSBvZiBwbGF5YmFjayAqLworCXZpZGVvX3N0cmVhbV9zb3VyY2VfdCBzdHJlYW1fc291cmNlOyAvKiBjdXJyZW50IHNvdXJjZSAoZGVtdXgvbWVtb3J5KSAqLworCXZpZGVvX2Zvcm1hdF90ICAgICAgICB2aWRlb19mb3JtYXQ7ICAvKiBjdXJyZW50IGFzcGVjdCByYXRpbyBvZiBzdHJlYW0qLworCXZpZGVvX2Rpc3BsYXlmb3JtYXRfdCBkaXNwbGF5X2Zvcm1hdDsvKiBzZWxlY3RlZCBjcm9wcGluZyBtb2RlICovCit9OworCisKK3N0cnVjdCB2aWRlb19zdGlsbF9waWN0dXJlIHsKKwljaGFyICppRnJhbWU7ICAgICAgICAvKiBwb2ludGVyIHRvIGEgc2luZ2xlIGlmcmFtZSBpbiBtZW1vcnkgKi8KKwlfX3MzMiBzaXplOworfTsKKworCit0eXBlZGVmCitzdHJ1Y3QgdmlkZW9faGlnaGxpZ2h0IHsKKwlpbnQgICAgIGFjdGl2ZTsgICAgICAvKiAgICAxPXNob3cgaGlnaGxpZ2h0LCAwPWhpZGUgaGlnaGxpZ2h0ICovCisJX191OCAgICBjb250cmFzdDE7ICAgLyogICAgNy0gNCAgUGF0dGVybiBwaXhlbCBjb250cmFzdCAqLworCQkJICAgICAvKiAgICAzLSAwICBCYWNrZ3JvdW5kIHBpeGVsIGNvbnRyYXN0ICovCisJX191OCAgICBjb250cmFzdDI7ICAgLyogICAgNy0gNCAgRW1waGFzaXMgcGl4ZWwtMiBjb250cmFzdCAqLworCQkJICAgICAvKiAgICAzLSAwICBFbXBoYXNpcyBwaXhlbC0xIGNvbnRyYXN0ICovCisJX191OCAgICBjb2xvcjE7ICAgICAgLyogICAgNy0gNCAgUGF0dGVybiBwaXhlbCBjb2xvciAqLworCQkJICAgICAvKiAgICAzLSAwICBCYWNrZ3JvdW5kIHBpeGVsIGNvbG9yICovCisJX191OCAgICBjb2xvcjI7ICAgICAgLyogICAgNy0gNCAgRW1waGFzaXMgcGl4ZWwtMiBjb2xvciAqLworCQkJICAgICAvKiAgICAzLSAwICBFbXBoYXNpcyBwaXhlbC0xIGNvbG9yICovCisJX191MzIgICAgeXBvczsgICAgICAgLyogICAyMy0yMiAgYXV0byBhY3Rpb24gbW9kZSAqLworCQkJICAgICAvKiAgIDIxLTEyICBzdGFydCB5ICovCisJCQkgICAgIC8qICAgIDktIDAgIGVuZCB5ICovCisJX191MzIgICAgeHBvczsgICAgICAgLyogICAyMy0yMiAgYnV0dG9uIGNvbG9yIG51bWJlciAqLworCQkJICAgICAvKiAgIDIxLTEyICBzdGFydCB4ICovCisJCQkgICAgIC8qICAgIDktIDAgIGVuZCB4ICovCit9IHZpZGVvX2hpZ2hsaWdodF90OworCisKK3R5cGVkZWYgc3RydWN0IHZpZGVvX3NwdSB7CisJaW50IGFjdGl2ZTsKKwlpbnQgc3RyZWFtX2lkOworfSB2aWRlb19zcHVfdDsKKworCit0eXBlZGVmIHN0cnVjdCB2aWRlb19zcHVfcGFsZXR0ZSB7ICAgICAgLyogU1BVIFBhbGV0dGUgaW5mb3JtYXRpb24gKi8KKwlpbnQgbGVuZ3RoOworCV9fdTggKnBhbGV0dGU7Cit9IHZpZGVvX3NwdV9wYWxldHRlX3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgdmlkZW9fbmF2aV9wYWNrIHsKKwlpbnQgbGVuZ3RoOyAgICAgICAgICAvKiAwIC4uLiAxMDI0ICovCisJX191OCBkYXRhWzEwMjRdOworfSB2aWRlb19uYXZpX3BhY2tfdDsKKworCit0eXBlZGVmIF9fdTE2IHZpZGVvX2F0dHJpYnV0ZXNfdDsKKy8qICAgYml0czogZGVzY3IuICovCisvKiAgIDE1LTE0IFZpZGVvIGNvbXByZXNzaW9uIG1vZGUgKDA9TVBFRy0xLCAxPU1QRUctMikgKi8KKy8qICAgMTMtMTIgVFYgc3lzdGVtICgwPTUyNS82MCwgMT02MjUvNTApICovCisvKiAgIDExLTEwIEFzcGVjdCByYXRpbyAoMD00OjMsIDM9MTY6OSkgKi8KKy8qICAgIDktIDggcGVybWl0dGVkIGRpc3BsYXkgbW9kZSBvbiA0OjMgbW9uaXRvciAoMD1ib3RoLCAxPW9ubHkgcGFuLXNjYSAqLworLyogICAgNyAgICBsaW5lIDIxLTEgZGF0YSBwcmVzZW50IGluIEdPUCAoMT15ZXMsIDA9bm8pICovCisvKiAgICA2ICAgIGxpbmUgMjEtMiBkYXRhIHByZXNlbnQgaW4gR09QICgxPXllcywgMD1ubykgKi8KKy8qICAgIDUtIDMgc291cmNlIHJlc29sdXRpb24gKDA9NzIweDQ4MC81NzYsIDE9NzA0eDQ4MC81NzYsIDI9MzUyeDQ4MC81NyAqLworLyogICAgMiAgICBzb3VyY2UgbGV0dGVyYm94ZWQgKDE9eWVzLCAwPW5vKSAqLworLyogICAgMCAgICBmaWxtL2NhbWVyYSBtb2RlICgwPWNhbWVyYSwgMT1maWxtICg2MjUvNTAgb25seSkpICovCisKKworLyogYml0IGRlZmluaXRpb25zIGZvciBjYXBhYmlsaXRpZXM6ICovCisvKiBjYW4gdGhlIGhhcmR3YXJlIGRlY29kZSBNUEVHMSBhbmQvb3IgTVBFRzI/ICovCisjZGVmaW5lIFZJREVPX0NBUF9NUEVHMSAgIDEKKyNkZWZpbmUgVklERU9fQ0FQX01QRUcyICAgMgorLyogY2FuIHlvdSBzZW5kIGEgc3lzdGVtIGFuZC9vciBwcm9ncmFtIHN0cmVhbSB0byB2aWRlbyBkZXZpY2U/CisgICAoeW91IHN0aWxsIGhhdmUgdG8gb3BlbiB0aGUgdmlkZW8gYW5kIHRoZSBhdWRpbyBkZXZpY2UgYnV0IG9ubHkKKyAgICBzZW5kIHRoZSBzdHJlYW0gdG8gdGhlIHZpZGVvIGRldmljZSkgKi8KKyNkZWZpbmUgVklERU9fQ0FQX1NZUyAgICAgNAorI2RlZmluZSBWSURFT19DQVBfUFJPRyAgICA4CisvKiBjYW4gdGhlIGRyaXZlciBhbHNvIGhhbmRsZSBTUFUsIE5BVkkgYW5kIENTUyBlbmNvZGVkIGRhdGE/CisgICAoQ1NTIEFQSSBpcyBub3QgcHJlc2VudCB5ZXQpICovCisjZGVmaW5lIFZJREVPX0NBUF9TUFUgICAgMTYKKyNkZWZpbmUgVklERU9fQ0FQX05BVkkgICAzMgorI2RlZmluZSBWSURFT19DQVBfQ1NTICAgIDY0CisKKworI2RlZmluZSBWSURFT19TVE9QICAgICAgICAgICAgICAgICBfSU8oJ28nLCAyMSkKKyNkZWZpbmUgVklERU9fUExBWSAgICAgICAgICAgICAgICAgX0lPKCdvJywgMjIpCisjZGVmaW5lIFZJREVPX0ZSRUVaRSAgICAgICAgICAgICAgIF9JTygnbycsIDIzKQorI2RlZmluZSBWSURFT19DT05USU5VRSAgICAgICAgICAgICBfSU8oJ28nLCAyNCkKKyNkZWZpbmUgVklERU9fU0VMRUNUX1NPVVJDRSAgICAgICAgX0lPKCdvJywgMjUpCisjZGVmaW5lIFZJREVPX1NFVF9CTEFOSyAgICAgICAgICAgIF9JTygnbycsIDI2KQorI2RlZmluZSBWSURFT19HRVRfU1RBVFVTICAgICAgICAgICBfSU9SKCdvJywgMjcsIHN0cnVjdCB2aWRlb19zdGF0dXMpCisjZGVmaW5lIFZJREVPX0dFVF9FVkVOVCAgICAgICAgICAgIF9JT1IoJ28nLCAyOCwgc3RydWN0IHZpZGVvX2V2ZW50KQorI2RlZmluZSBWSURFT19TRVRfRElTUExBWV9GT1JNQVQgICBfSU8oJ28nLCAyOSkKKyNkZWZpbmUgVklERU9fU1RJTExQSUNUVVJFICAgICAgICAgX0lPVygnbycsIDMwLCBzdHJ1Y3QgdmlkZW9fc3RpbGxfcGljdHVyZSkKKyNkZWZpbmUgVklERU9fRkFTVF9GT1JXQVJEICAgICAgICAgX0lPKCdvJywgMzEpCisjZGVmaW5lIFZJREVPX1NMT1dNT1RJT04gICAgICAgICAgIF9JTygnbycsIDMyKQorI2RlZmluZSBWSURFT19HRVRfQ0FQQUJJTElUSUVTICAgICBfSU9SKCdvJywgMzMsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgVklERU9fQ0xFQVJfQlVGRkVSICAgICAgICAgX0lPKCdvJywgIDM0KQorI2RlZmluZSBWSURFT19TRVRfSUQgICAgICAgICAgICAgICBfSU8oJ28nLCAzNSkKKyNkZWZpbmUgVklERU9fU0VUX1NUUkVBTVRZUEUgICAgICAgX0lPKCdvJywgMzYpCisjZGVmaW5lIFZJREVPX1NFVF9GT1JNQVQgICAgICAgICAgIF9JTygnbycsIDM3KQorI2RlZmluZSBWSURFT19TRVRfU1lTVEVNICAgICAgICAgICBfSU8oJ28nLCAzOCkKKyNkZWZpbmUgVklERU9fU0VUX0hJR0hMSUdIVCAgICAgICAgX0lPVygnbycsIDM5LCB2aWRlb19oaWdobGlnaHRfdCkKKyNkZWZpbmUgVklERU9fU0VUX1NQVSAgICAgICAgICAgICAgX0lPVygnbycsIDUwLCB2aWRlb19zcHVfdCkKKyNkZWZpbmUgVklERU9fU0VUX1NQVV9QQUxFVFRFICAgICAgX0lPVygnbycsIDUxLCB2aWRlb19zcHVfcGFsZXR0ZV90KQorI2RlZmluZSBWSURFT19HRVRfTkFWSSAgICAgICAgICAgICBfSU9SKCdvJywgNTIsIHZpZGVvX25hdmlfcGFja190KQorI2RlZmluZSBWSURFT19TRVRfQVRUUklCVVRFUyAgICAgICBfSU8oJ28nLCA1MykKKyNkZWZpbmUgVklERU9fR0VUX1NJWkUgICAgICAgICAgICAgX0lPUignbycsIDU1LCB2aWRlb19zaXplX3QpCisjZGVmaW5lIFZJREVPX0dFVF9GUkFNRV9SQVRFICAgICAgIF9JT1IoJ28nLCA1NiwgdW5zaWduZWQgaW50KQorCisvKioKKyAqIFZJREVPX0dFVF9QVFMKKyAqCisgKiBSZWFkIHRoZSAzMyBiaXQgcHJlc2VudGF0aW9uIHRpbWUgc3RhbXAgYXMgZGVmaW5lZAorICogaW4gSVRVIFQtUkVDLUguMjIyLjAgLyBJU08vSUVDIDEzODE4LTEuCisgKgorICogVGhlIFBUUyBzaG91bGQgYmVsb25nIHRvIHRoZSBjdXJyZW50bHkgcGxheWVkCisgKiBmcmFtZSBpZiBwb3NzaWJsZSwgYnV0IG1heSBhbHNvIGJlIGEgdmFsdWUgY2xvc2UgdG8gaXQKKyAqIGxpa2UgdGhlIFBUUyBvZiB0aGUgbGFzdCBkZWNvZGVkIGZyYW1lIG9yIHRoZSBsYXN0IFBUUworICogZXh0cmFjdGVkIGJ5IHRoZSBQRVMgcGFyc2VyLgorICovCisjZGVmaW5lIFZJREVPX0dFVF9QVFMgICAgICAgICAgICAgIF9JT1IoJ28nLCA1NywgX191NjQpCisKKy8qIFJlYWQgdGhlIG51bWJlciBvZiBkaXNwbGF5ZWQgZnJhbWVzIHNpbmNlIHRoZSBkZWNvZGVyIHdhcyBzdGFydGVkICovCisjZGVmaW5lIFZJREVPX0dFVF9GUkFNRV9DT1VOVCAgCSAgIF9JT1IoJ28nLCA1OCwgX191NjQpCisKKyNkZWZpbmUgVklERU9fQ09NTUFORCAgICAgCSAgIF9JT1dSKCdvJywgNTksIHN0cnVjdCB2aWRlb19jb21tYW5kKQorI2RlZmluZSBWSURFT19UUllfQ09NTUFORCAJICAgX0lPV1IoJ28nLCA2MCwgc3RydWN0IHZpZGVvX2NvbW1hbmQpCisKKyNlbmRpZiAvKl9EVkJWSURFT19IXyovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZWRkLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZWRkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFjMmIxMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9lZGQuaApAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvbGludXgvZWRkLmgKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQgRGVsbCBJbmMuCisgKiAgYnkgTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPgorICoKKyAqIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIGZvciB0aGUgaW50IDEzaCwgYXg9ezQxLDQ4fWgKKyAqIEJJT1MgRW5oYW5jZWQgRGlzayBEcml2ZSBTZXJ2aWNlcworICogVGhpcyBpcyBiYXNlZCBvbiB0aGUgVDEzIGdyb3VwIGRvY3VtZW50IEQxNTcyIFJldmlzaW9uIDAgKEF1Z3VzdCAxNCAyMDAyKQorICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cudDEzLm9yZy9kb2NzMjAwMi9kMTU3MnIwLnBkZi4gIEl0IGlzCisgKiB2ZXJ5IHNpbWlsYXIgdG8gRDE0ODQgUmV2aXNpb24gMyBodHRwOi8vd3d3LnQxMy5vcmcvZG9jczIwMDIvZDE0ODRyMy5wZGYKKyAqCisgKiBJbiBhIG51dHNoZWxsLCBhcmNoL3tpMzg2LHg4Nl82NH0vYm9vdC9zZXR1cC5TIHBvcHVsYXRlcyBhIHNjcmF0Y2gKKyAqIHRhYmxlIGluIHRoZSBib290X3BhcmFtcyB0aGF0IGNvbnRhaW5zIGEgbGlzdCBvZiBCSU9TLWVudW1lcmF0ZWQKKyAqIGJvb3QgZGV2aWNlcy4KKyAqIEluIGFyY2gve2kzODYseDg2XzY0fS9rZXJuZWwvc2V0dXAuYywgdGhpcyBpbmZvcm1hdGlvbiBpcworICogdHJhbnNmZXJyZWQgaW50byB0aGUgZWRkIHN0cnVjdHVyZSwgYW5kIGluIGRyaXZlcnMvZmlybXdhcmUvZWRkLmMsIHRoYXQKKyAqIGluZm9ybWF0aW9uIGlzIHVzZWQgdG8gaWRlbnRpZnkgQklPUyBib290IGRpc2suICBUaGUgY29kZSBpbiBzZXR1cC5TCisgKiBpcyB2ZXJ5IHNlbnNpdGl2ZSB0byB0aGUgc2l6ZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyLjAgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKyNpZm5kZWYgX0xJTlVYX0VERF9ICisjZGVmaW5lIF9MSU5VWF9FRERfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBFREROUiAweDFlOQkJLyogYWRkciBvZiBudW1iZXIgb2YgZWRkX2luZm8gc3RydWN0cyBhdCBFRERCVUYKKwkJCQkgICBpbiBib290X3BhcmFtcyAtIHRyZWF0IHRoaXMgYXMgMSBieXRlICAqLworI2RlZmluZSBFRERCVUYJMHhkMDAJCS8qIGFkZHIgb2YgZWRkX2luZm8gc3RydWN0cyBpbiBib290X3BhcmFtcyAqLworI2RlZmluZSBFRERNQVhOUiA2CQkvKiBudW1iZXIgb2YgZWRkX2luZm8gc3RydWN0cyBzdGFydGluZyBhdCBFRERCVUYgICovCisjZGVmaW5lIEVEREVYVFNJWkUgOAkJLyogY2hhbmdlIHRoZXNlIGlmIHlvdSBtdWNrIHdpdGggdGhlIHN0cnVjdHVyZXMgKi8KKyNkZWZpbmUgRUREUEFSTVNJWkUgNzQKKyNkZWZpbmUgQ0hFQ0tFWFRFTlNJT05TUFJFU0VOVCAweDQxCisjZGVmaW5lIEdFVERFVklDRVBBUkFNRVRFUlMgMHg0OAorI2RlZmluZSBMRUdBQ1lHRVRERVZJQ0VQQVJBTUVURVJTIDB4MDgKKyNkZWZpbmUgRURETUFHSUMxIDB4NTVBQQorI2RlZmluZSBFRERNQUdJQzIgMHhBQTU1CisKKworI2RlZmluZSBSRUFEX1NFQ1RPUlMgMHgwMiAgICAgICAgIC8qIGludDEzIEFIPTB4MDIgaXMgUkVBRF9TRUNUT1JTIGNvbW1hbmQgKi8KKyNkZWZpbmUgRUREX01CUl9TSUdfT0ZGU0VUIDB4MUI4ICAvKiBvZmZzZXQgb2Ygc2lnbmF0dXJlIGluIHRoZSBNQlIgKi8KKyNkZWZpbmUgRUREX01CUl9TSUdfQlVGICAgIDB4MjkwICAvKiBhZGRyIGluIGJvb3QgcGFyYW1zICovCisjZGVmaW5lIEVERF9NQlJfU0lHX01BWCAxNiAgICAgICAgLyogbWF4IG51bWJlciBvZiBzaWduYXR1cmVzIHRvIHN0b3JlICovCisjZGVmaW5lIEVERF9NQlJfU0lHX05SX0JVRiAweDFlYSAgLyogYWRkciBvZiBudW1iZXIgb2YgTUJSIHNpZ250YXVyZXMgYXQgRUREX01CUl9TSUdfQlVGCisJCQkJICAgICBpbiBib290X3BhcmFtcyAtIHRyZWF0IHRoaXMgYXMgMSBieXRlICAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIEVERF9FWFRfRklYRURfRElTS19BQ0NFU1MgICAgICAgICAgICgxIDw8IDApCisjZGVmaW5lIEVERF9FWFRfREVWSUNFX0xPQ0tJTkdfQU5EX0VKRUNUSU5HICgxIDw8IDEpCisjZGVmaW5lIEVERF9FWFRfRU5IQU5DRURfRElTS19EUklWRV9TVVBQT1JUICgxIDw8IDIpCisjZGVmaW5lIEVERF9FWFRfNjRCSVRfRVhURU5TSU9OUyAgICAgICAgICAgICgxIDw8IDMpCisKKyNkZWZpbmUgRUREX0lORk9fRE1BX0JPVU5EQVJZX0VSUk9SX1RSQU5TUEFSRU5UICgxIDw8IDApCisjZGVmaW5lIEVERF9JTkZPX0dFT01FVFJZX1ZBTElEICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIEVERF9JTkZPX1JFTU9WQUJMRSAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIEVERF9JTkZPX1dSSVRFX1ZFUklGWSAgICAgICAgICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIEVERF9JTkZPX01FRElBX0NIQU5HRV9OT1RJRklDQVRJT04gICAgICgxIDw8IDQpCisjZGVmaW5lIEVERF9JTkZPX0xPQ0tBQkxFICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCisjZGVmaW5lIEVERF9JTkZPX05PX01FRElBX1BSRVNFTlQgICAgICAgICAgICAgICgxIDw8IDYpCisjZGVmaW5lIEVERF9JTkZPX1VTRV9JTlQxM19GTjUwICAgICAgICAgICAgICAgICgxIDw8IDcpCisKK3N0cnVjdCBlZGRfZGV2aWNlX3BhcmFtcyB7CisJX191MTYgbGVuZ3RoOworCV9fdTE2IGluZm9fZmxhZ3M7CisJX191MzIgbnVtX2RlZmF1bHRfY3lsaW5kZXJzOworCV9fdTMyIG51bV9kZWZhdWx0X2hlYWRzOworCV9fdTMyIHNlY3RvcnNfcGVyX3RyYWNrOworCV9fdTY0IG51bWJlcl9vZl9zZWN0b3JzOworCV9fdTE2IGJ5dGVzX3Blcl9zZWN0b3I7CisJX191MzIgZHB0ZV9wdHI7CQkvKiAweEZGRkZGRkZGIGZvciBvdXIgcHVycG9zZXMgKi8KKwlfX3UxNiBrZXk7CQkvKiA9IDB4QkVERCAqLworCV9fdTggZGV2aWNlX3BhdGhfaW5mb19sZW5ndGg7CS8qID0gNDQgKi8KKwlfX3U4IHJlc2VydmVkMjsKKwlfX3UxNiByZXNlcnZlZDM7CisJX191OCBob3N0X2J1c190eXBlWzRdOworCV9fdTggaW50ZXJmYWNlX3R5cGVbOF07CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX191MTYgYmFzZV9hZGRyZXNzOworCQkJX191MTYgcmVzZXJ2ZWQxOworCQkJX191MzIgcmVzZXJ2ZWQyOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBpc2E7CisJCXN0cnVjdCB7CisJCQlfX3U4IGJ1czsKKwkJCV9fdTggc2xvdDsKKwkJCV9fdTggZnVuY3Rpb247CisJCQlfX3U4IGNoYW5uZWw7CisJCQlfX3UzMiByZXNlcnZlZDsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcGNpOworCQkvKiBwY2l4IGlzIHNhbWUgYXMgcGNpICovCisJCXN0cnVjdCB7CisJCQlfX3U2NCByZXNlcnZlZDsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaWJuZDsKKwkJc3RydWN0IHsKKwkJCV9fdTY0IHJlc2VydmVkOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB4cHJzOworCQlzdHJ1Y3QgeworCQkJX191NjQgcmVzZXJ2ZWQ7CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGh0cHQ7CisJCXN0cnVjdCB7CisJCQlfX3U2NCByZXNlcnZlZDsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgdW5rbm93bjsKKwl9IGludGVyZmFjZV9wYXRoOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCV9fdTggZGV2aWNlOworCQkJX191OCByZXNlcnZlZDE7CisJCQlfX3UxNiByZXNlcnZlZDI7CisJCQlfX3UzMiByZXNlcnZlZDM7CisJCQlfX3U2NCByZXNlcnZlZDQ7CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGF0YTsKKwkJc3RydWN0IHsKKwkJCV9fdTggZGV2aWNlOworCQkJX191OCBsdW47CisJCQlfX3U4IHJlc2VydmVkMTsKKwkJCV9fdTggcmVzZXJ2ZWQyOworCQkJX191MzIgcmVzZXJ2ZWQzOworCQkJX191NjQgcmVzZXJ2ZWQ0OworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBhdGFwaTsKKwkJc3RydWN0IHsKKwkJCV9fdTE2IGlkOworCQkJX191NjQgbHVuOworCQkJX191MTYgcmVzZXJ2ZWQxOworCQkJX191MzIgcmVzZXJ2ZWQyOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBzY3NpOworCQlzdHJ1Y3QgeworCQkJX191NjQgc2VyaWFsX251bWJlcjsKKwkJCV9fdTY0IHJlc2VydmVkOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB1c2I7CisJCXN0cnVjdCB7CisJCQlfX3U2NCBldWk7CisJCQlfX3U2NCByZXNlcnZlZDsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaTEzOTQ7CisJCXN0cnVjdCB7CisJCQlfX3U2NCB3d2lkOworCQkJX191NjQgbHVuOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBmaWJyZTsKKwkJc3RydWN0IHsKKwkJCV9fdTY0IGlkZW50aXR5X3RhZzsKKwkJCV9fdTY0IHJlc2VydmVkOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBpMm87CisJCXN0cnVjdCB7CisJCQlfX3UzMiBhcnJheV9udW1iZXI7CisJCQlfX3UzMiByZXNlcnZlZDE7CisJCQlfX3U2NCByZXNlcnZlZDI7CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHJhaWQ7CisJCXN0cnVjdCB7CisJCQlfX3U4IGRldmljZTsKKwkJCV9fdTggcmVzZXJ2ZWQxOworCQkJX191MTYgcmVzZXJ2ZWQyOworCQkJX191MzIgcmVzZXJ2ZWQzOworCQkJX191NjQgcmVzZXJ2ZWQ0OworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBzYXRhOworCQlzdHJ1Y3QgeworCQkJX191NjQgcmVzZXJ2ZWQxOworCQkJX191NjQgcmVzZXJ2ZWQyOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB1bmtub3duOworCX0gZGV2aWNlX3BhdGg7CisJX191OCByZXNlcnZlZDQ7CisJX191OCBjaGVja3N1bTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgZWRkX2luZm8geworCV9fdTggZGV2aWNlOworCV9fdTggdmVyc2lvbjsKKwlfX3UxNiBpbnRlcmZhY2Vfc3VwcG9ydDsKKwlfX3UxNiBsZWdhY3lfbWF4X2N5bGluZGVyOworCV9fdTggbGVnYWN5X21heF9oZWFkOworCV9fdTggbGVnYWN5X3NlY3RvcnNfcGVyX3RyYWNrOworCXN0cnVjdCBlZGRfZGV2aWNlX3BhcmFtcyBwYXJhbXM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGVkZCB7CisJdW5zaWduZWQgaW50IG1icl9zaWduYXR1cmVbRUREX01CUl9TSUdfTUFYXTsKKwlzdHJ1Y3QgZWRkX2luZm8gZWRkX2luZm9bRURETUFYTlJdOworCXVuc2lnbmVkIGNoYXIgbWJyX3NpZ25hdHVyZV9ucjsKKwl1bnNpZ25lZCBjaGFyIGVkZF9pbmZvX25yOworfTsKKworI2VuZGlmCQkJCS8qIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYJCQkJLyogX0xJTlVYX0VERF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZWZzX2ZzX3NiLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZWZzX2ZzX3NiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAxYmU5MAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9lZnNfZnNfc2IuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogZWZzX2ZzX3NiLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTkgQWwgU21pdGgKKyAqCisgKiBQb3J0aW9ucyBkZXJpdmVkIGZyb20gSVJJWCBoZWFkZXIgZmlsZXMgKGMpIDE5ODggU2lsaWNvbiBHcmFwaGljcworICovCisKKyNpZm5kZWYgX19FRlNfRlNfU0JfSF9fCisjZGVmaW5lIF9fRUZTX0ZTX1NCX0hfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgorCisvKiBFRlMgc3VwZXJibG9jayBtYWdpYyBudW1iZXJzICovCisjZGVmaW5lIEVGU19NQUdJQwkweDA3Mjk1OQorI2RlZmluZSBFRlNfTkVXTUFHSUMJMHgwNzI5NWEKKworI2RlZmluZSBJU19FRlNfTUFHSUMoeCkJKCh4ID09IEVGU19NQUdJQykgfHwgKHggPT0gRUZTX05FV01BR0lDKSkKKworI2RlZmluZSBFRlNfU1VQRVIJCTEKKyNkZWZpbmUgRUZTX1JPT1RJTk9ERQkJMgorCisvKiBlZnMgc3VwZXJibG9jayBvbiBkaXNrICovCitzdHJ1Y3QgZWZzX3N1cGVyIHsKKwlfX2JlMzIJCWZzX3NpemU7ICAgICAgICAvKiBzaXplIG9mIGZpbGVzeXN0ZW0sIGluIHNlY3RvcnMgKi8KKwlfX2JlMzIJCWZzX2ZpcnN0Y2c7ICAgICAvKiBiYiBvZmZzZXQgdG8gZmlyc3QgY2cgKi8KKwlfX2JlMzIJCWZzX2NnZnNpemU7ICAgICAvKiBzaXplIG9mIGN5bGluZGVyIGdyb3VwIGluIGJiJ3MgKi8KKwlfX2JlMTYJCWZzX2NnaXNpemU7ICAgICAvKiBiYidzIG9mIGlub2RlcyBwZXIgY3lsaW5kZXIgZ3JvdXAgKi8KKwlfX2JlMTYJCWZzX3NlY3RvcnM7ICAgICAvKiBzZWN0b3JzIHBlciB0cmFjayAqLworCV9fYmUxNgkJZnNfaGVhZHM7ICAgICAgIC8qIGhlYWRzIHBlciBjeWxpbmRlciAqLworCV9fYmUxNgkJZnNfbmNnOyAgICAgICAgIC8qICMgb2YgY3lsaW5kZXIgZ3JvdXBzIGluIGZpbGVzeXN0ZW0gKi8KKwlfX2JlMTYJCWZzX2RpcnR5OyAgICAgICAvKiBmcyBuZWVkcyB0byBiZSBmc2NrJ2QgKi8KKwlfX2JlMzIJCWZzX3RpbWU7ICAgICAgICAvKiBsYXN0IHN1cGVyLWJsb2NrIHVwZGF0ZSAqLworCV9fYmUzMgkJZnNfbWFnaWM7ICAgICAgIC8qIG1hZ2ljIG51bWJlciAqLworCWNoYXIJCWZzX2ZuYW1lWzZdOyAgICAvKiBmaWxlIHN5c3RlbSBuYW1lICovCisJY2hhcgkJZnNfZnBhY2tbNl07ICAgIC8qIGZpbGUgc3lzdGVtIHBhY2sgbmFtZSAqLworCV9fYmUzMgkJZnNfYm1zaXplOyAgICAgIC8qIHNpemUgb2YgYml0bWFwIGluIGJ5dGVzICovCisJX19iZTMyCQlmc190ZnJlZTsgICAgICAgLyogdG90YWwgZnJlZSBkYXRhIGJsb2NrcyAqLworCV9fYmUzMgkJZnNfdGlub2RlOyAgICAgIC8qIHRvdGFsIGZyZWUgaW5vZGVzICovCisJX19iZTMyCQlmc19ibWJsb2NrOyAgICAgLyogYml0bWFwIGxvY2F0aW9uLiAqLworCV9fYmUzMgkJZnNfcmVwbHNiOyAgICAgIC8qIExvY2F0aW9uIG9mIHJlcGxpY2F0ZWQgc3VwZXJibG9jay4gKi8KKwlfX2JlMzIJCWZzX2xhc3RpYWxsb2M7ICAvKiBsYXN0IGFsbG9jYXRlZCBpbm9kZSAqLworCWNoYXIJCWZzX3NwYXJlWzIwXTsgICAvKiBzcGFjZSBmb3IgZXhwYW5zaW9uIC0gTVVTVCBCRSBaRVJPICovCisJX19iZTMyCQlmc19jaGVja3N1bTsgICAgLyogY2hlY2tzdW0gb2Ygdm9sdW1lIHBvcnRpb24gb2YgZnMgKi8KK307CisKKy8qIGVmcyBzdXBlcmJsb2NrIGluZm9ybWF0aW9uIGluIG1lbW9yeSAqLworc3RydWN0IGVmc19zYl9pbmZvIHsKKwlfX3UzMglmc19tYWdpYzsJLyogc3VwZXJibG9jayBtYWdpYyBudW1iZXIgKi8KKwlfX3UzMglmc19zdGFydDsJLyogZmlyc3QgYmxvY2sgb2YgZmlsZXN5c3RlbSAqLworCV9fdTMyCWZpcnN0X2Jsb2NrOwkvKiBmaXJzdCBkYXRhIGJsb2NrIGluIGZpbGVzeXN0ZW0gKi8KKwlfX3UzMgl0b3RhbF9ibG9ja3M7CS8qIHRvdGFsIG51bWJlciBvZiBibG9ja3MgaW4gZmlsZXN5c3RlbSAqLworCV9fdTMyCWdyb3VwX3NpemU7CS8qICMgb2YgYmxvY2tzIGEgZ3JvdXAgY29uc2lzdHMgb2YgKi8gCisJX191MzIJZGF0YV9mcmVlOwkvKiAjIG9mIGZyZWUgZGF0YSBibG9ja3MgKi8KKwlfX3UzMglpbm9kZV9mcmVlOwkvKiAjIG9mIGZyZWUgaW5vZGVzICovCisJX191MTYJaW5vZGVfYmxvY2tzOwkvKiAjIG9mIGJsb2NrcyB1c2VkIGZvciBpbm9kZXMgaW4gZXZlcnkgZ3JwICovCisJX191MTYJdG90YWxfZ3JvdXBzOwkvKiAjIG9mIGdyb3VwcyAqLworfTsKKworI2VuZGlmIC8qIF9fRUZTX0ZTX1NCX0hfXyAqLworCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZWxmLWVtLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZWxmLWVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThiZWE3OAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9lbGYtZW0uaApAQCAtMCwwICsxLDU1IEBACisjaWZuZGVmIF9MSU5VWF9FTEZfRU1fSAorI2RlZmluZSBfTElOVVhfRUxGX0VNX0gKKworLyogVGhlc2UgY29uc3RhbnRzIGRlZmluZSB0aGUgdmFyaW91cyBFTEYgdGFyZ2V0IG1hY2hpbmVzICovCisjZGVmaW5lIEVNX05PTkUJCTAKKyNkZWZpbmUgRU1fTTMyCQkxCisjZGVmaW5lIEVNX1NQQVJDCTIKKyNkZWZpbmUgRU1fMzg2CQkzCisjZGVmaW5lIEVNXzY4SwkJNAorI2RlZmluZSBFTV84OEsJCTUKKyNkZWZpbmUgRU1fNDg2CQk2CS8qIFBlcmhhcHMgZGlzdXNlZCAqLworI2RlZmluZSBFTV84NjAJCTcKKyNkZWZpbmUgRU1fTUlQUwkJOAkvKiBNSVBTIFIzMDAwIChvZmZpY2lhbGx5LCBiaWctZW5kaWFuIG9ubHkpICovCisJCQkJLyogTmV4dCB0d28gYXJlIGhpc3RvcmljYWwgYW5kIGJpbmFyaWVzIGFuZAorCQkJCSAgIG1vZHVsZXMgb2YgdGhlc2UgdHlwZXMgd2lsbCBiZSByZWplY3RlZCBieQorCQkJCSAgIExpbnV4LiAgKi8KKyNkZWZpbmUgRU1fTUlQU19SUzNfTEUJMTAJLyogTUlQUyBSMzAwMCBsaXR0bGUtZW5kaWFuICovCisjZGVmaW5lIEVNX01JUFNfUlM0X0JFCTEwCS8qIE1JUFMgUjQwMDAgYmlnLWVuZGlhbiAqLworCisjZGVmaW5lIEVNX1BBUklTQwkxNQkvKiBIUFBBICovCisjZGVmaW5lIEVNX1NQQVJDMzJQTFVTCTE4CS8qIFN1bidzICJ2OHBsdXMiICovCisjZGVmaW5lIEVNX1BQQwkJMjAJLyogUG93ZXJQQyAqLworI2RlZmluZSBFTV9QUEM2NAkyMQkgLyogUG93ZXJQQzY0ICovCisjZGVmaW5lIEVNX1NQVQkJMjMJLyogQ2VsbCBCRSBTUFUgKi8KKyNkZWZpbmUgRU1fU0gJCTQyCS8qIFN1cGVySCAqLworI2RlZmluZSBFTV9TUEFSQ1Y5CTQzCS8qIFNQQVJDIHY5IDY0LWJpdCAqLworI2RlZmluZSBFTV9JQV82NAk1MAkvKiBIUC9JbnRlbCBJQS02NCAqLworI2RlZmluZSBFTV9YODZfNjQJNjIJLyogQU1EIHg4Ni02NCAqLworI2RlZmluZSBFTV9TMzkwCQkyMgkvKiBJQk0gUy8zOTAgKi8KKyNkZWZpbmUgRU1fQ1JJUwkJNzYJLyogQXhpcyBDb21tdW5pY2F0aW9ucyAzMi1iaXQgZW1iZWRkZWQgcHJvY2Vzc29yICovCisjZGVmaW5lIEVNX1Y4NTAJCTg3CS8qIE5FQyB2ODUwICovCisjZGVmaW5lIEVNX00zMlIJCTg4CS8qIFJlbmVzYXMgTTMyUiAqLworI2RlZmluZSBFTV9IOF8zMDAJNDYJLyogUmVuZXNhcyBIOC8zMDAsMzAwSCxIOFMgKi8KKyNkZWZpbmUgRU1fTU4xMDMwMAk4OQkvKiBQYW5hc29uaWMvTUVJIE1OMTAzMDAsIEFNMzMgKi8KKyNkZWZpbmUgRU1fQkxBQ0tGSU4gICAgIDEwNiAgICAgLyogQURJIEJsYWNrZmluIFByb2Nlc3NvciAqLworI2RlZmluZSBFTV9GUlYJCTB4NTQ0MQkvKiBGdWppdHN1IEZSLVYgKi8KKyNkZWZpbmUgRU1fQVZSMzIJMHgxOGFkCS8qIEF0bWVsIEFWUjMyICovCisKKy8qCisgKiBUaGlzIGlzIGFuIGludGVyaW0gdmFsdWUgdGhhdCB3ZSB3aWxsIHVzZSB1bnRpbCB0aGUgY29tbWl0dGVlIGNvbWVzCisgKiB1cCB3aXRoIGEgZmluYWwgbnVtYmVyLgorICovCisjZGVmaW5lIEVNX0FMUEhBCTB4OTAyNgorCisvKiBCb2d1cyBvbGQgdjg1MCBtYWdpYyBudW1iZXIsIHVzZWQgYnkgb2xkIHRvb2xzLiAqLworI2RlZmluZSBFTV9DWUdOVVNfVjg1MAkweDkwODAKKy8qIEJvZ3VzIG9sZCBtMzJyIG1hZ2ljIG51bWJlciwgdXNlZCBieSBvbGQgdG9vbHMuICovCisjZGVmaW5lIEVNX0NZR05VU19NMzJSCTB4OTA0MQorLyogVGhpcyBpcyB0aGUgb2xkIGludGVyaW0gdmFsdWUgZm9yIFMvMzkwIGFyY2hpdGVjdHVyZSAqLworI2RlZmluZSBFTV9TMzkwX09MRAkweEEzOTAKKy8qIEFsc28gUGFuYXNvbmljL01FSSBNTjEwMzAwLCBBTTMzICovCisjZGVmaW5lIEVNX0NZR05VU19NTjEwMzAwIDB4YmVlZgorCisKKyNlbmRpZiAvKiBfTElOVVhfRUxGX0VNX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9lbGYtZmRwaWMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9lbGYtZmRwaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTJmNjM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2VsZi1mZHBpYy5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qIGVsZi1mZHBpYy5oOiBGRFBJQyBFTEYgbG9hZCBtYXAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfTElOVVhfRUxGX0ZEUElDX0gKKyNkZWZpbmUgX0xJTlVYX0VMRl9GRFBJQ19ICisKKyNpbmNsdWRlIDxsaW51eC9lbGYuaD4KKworI2RlZmluZSBQVF9HTlVfU1RBQ0sgICAgKFBUX0xPT1MgKyAweDQ3NGU1NTEpCisKKy8qIHNlZ21lbnQgbWFwcGluZ3MgZm9yIEVMRiBGRFBJQyBsaWJyYXJpZXMvZXhlY3V0YWJsZXMvaW50ZXJwcmV0ZXJzICovCitzdHJ1Y3QgZWxmMzJfZmRwaWNfbG9hZHNlZyB7CisJRWxmMzJfQWRkcglhZGRyOwkJLyogY29yZSBhZGRyZXNzIHRvIHdoaWNoIG1hcHBlZCAqLworCUVsZjMyX0FkZHIJcF92YWRkcjsJLyogVk1BIHJlY29yZGVkIGluIGZpbGUgKi8KKwlFbGYzMl9Xb3JkCXBfbWVtc3o7CS8qIGFsbG9jYXRpb24gc2l6ZSByZWNvcmRlZCBpbiBmaWxlICovCit9OworCitzdHJ1Y3QgZWxmMzJfZmRwaWNfbG9hZG1hcCB7CisJRWxmMzJfSGFsZgl2ZXJzaW9uOwkvKiB2ZXJzaW9uIG9mIHRoZXNlIHN0cnVjdHVyZXMsIGp1c3QgaW4gY2FzZS4uLiAqLworCUVsZjMyX0hhbGYJbnNlZ3M7CQkvKiBudW1iZXIgb2Ygc2VnbWVudHMgKi8KKwlzdHJ1Y3QgZWxmMzJfZmRwaWNfbG9hZHNlZyBzZWdzW107Cit9OworCisjZGVmaW5lIEVMRjMyX0ZEUElDX0xPQURNQVBfVkVSU0lPTgkweDAwMDAKKworLyoKKyAqIGJpbmZtdCBiaW5hcnkgcGFyYW1ldGVycyBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGVsZl9mZHBpY19wYXJhbXMgeworCXN0cnVjdCBlbGZoZHIJCQloZHI7CQkvKiByZWYgY29weSBvZiBFTEYgaGVhZGVyICovCisJc3RydWN0IGVsZl9waGRyCQkJKnBoZHJzOwkJLyogcmVmIGNvcHkgb2YgUFRfUEhEUiB0YWJsZSAqLworCXN0cnVjdCBlbGYzMl9mZHBpY19sb2FkbWFwCSpsb2FkbWFwOwkvKiBsb2FkbWFwIHRvIGJlIHBhc3NlZCB0byB1c2Vyc3BhY2UgKi8KKwl1bnNpZ25lZCBsb25nCQkJZWxmaGRyX2FkZHI7CS8qIG1hcHBlZCBFTEYgaGVhZGVyIHVzZXIgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcJCQlwaF9hZGRyOwkvKiBtYXBwZWQgUFRfUEhEUiB1c2VyIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nCQkJbWFwX2FkZHI7CS8qIG1hcHBlZCBsb2FkbWFwIHVzZXIgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcJCQllbnRyeV9hZGRyOwkvKiBtYXBwZWQgZW50cnkgdXNlciBhZGRyZXNzICovCisJdW5zaWduZWQgbG9uZwkJCXN0YWNrX3NpemU7CS8qIHN0YWNrIHNpemUgcmVxdWVzdGVkIChQVF9HTlVfU1RBQ0spICovCisJdW5zaWduZWQgbG9uZwkJCWR5bmFtaWNfYWRkcjsJLyogbWFwcGVkIFBUX0RZTkFNSUMgdXNlciBhZGRyZXNzICovCisJdW5zaWduZWQgbG9uZwkJCWxvYWRfYWRkcjsJLyogdXNlciBhZGRyZXNzIGF0IHdoaWNoIHRvIG1hcCBiaW5hcnkgKi8KKwl1bnNpZ25lZCBsb25nCQkJZmxhZ3M7CisjZGVmaW5lIEVMRl9GRFBJQ19GTEFHX0FSUkFOR0VNRU5UCTB4MDAwMDAwMGYJLyogUFRfTE9BRCBhcnJhbmdlbWVudCBmbGFncyAqLworI2RlZmluZSBFTEZfRkRQSUNfRkxBR19JTkRFUEVOREVOVAkweDAwMDAwMDAwCS8qIFBUX0xPQURzIGNhbiBiZSBwdXQgYW55d2hlcmUgKi8KKyNkZWZpbmUgRUxGX0ZEUElDX0ZMQUdfSE9OT1VSVkFERFIJMHgwMDAwMDAwMQkvKiBQVF9MT0FELnZhZGRyIG11c3QgYmUgaG9ub3VyZWQgKi8KKyNkZWZpbmUgRUxGX0ZEUElDX0ZMQUdfQ09OU1RESVNQCTB4MDAwMDAwMDIJLyogUFRfTE9BRHMgcmVxdWlyZSBjb25zdGFudAorCQkJCQkJCSAqIGRpc3BsYWNlbWVudCAqLworI2RlZmluZSBFTEZfRkRQSUNfRkxBR19DT05USUdVT1VTCTB4MDAwMDAwMDMJLyogUFRfTE9BRHMgc2hvdWxkIGJlIGNvbnRpZ3VvdXMgKi8KKyNkZWZpbmUgRUxGX0ZEUElDX0ZMQUdfRVhFQ19TVEFDSwkweDAwMDAwMDEwCS8qIFQgaWYgc3RhY2sgdG8gYmUgZXhlY3V0YWJsZSAqLworI2RlZmluZSBFTEZfRkRQSUNfRkxBR19OT0VYRUNfU1RBQ0sJMHgwMDAwMDAyMAkvKiBUIGlmIHN0YWNrIG5vdCB0byBiZSBleGVjdXRhYmxlICovCisjZGVmaW5lIEVMRl9GRFBJQ19GTEFHX0VYRUNVVEFCTEUJMHgwMDAwMDA0MAkvKiBUIGlmIHRoaXMgb2JqZWN0IGlzIHRoZSBleGVjdXRhYmxlICovCisjZGVmaW5lIEVMRl9GRFBJQ19GTEFHX1BSRVNFTlQJCTB4ODAwMDAwMDAJLyogVCBpZiB0aGlzIG9iamVjdCBpcyBwcmVzZW50ICovCit9OworCisKKyNlbmRpZiAvKiBfTElOVVhfRUxGX0ZEUElDX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9lbGYuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9lbGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGRhMDUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2VsZi5oCkBAIC0wLDAgKzEsNDExIEBACisjaWZuZGVmIF9MSU5VWF9FTEZfSAorI2RlZmluZSBfTElOVVhfRUxGX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZWxmLWVtLmg+CisKK3N0cnVjdCBmaWxlOworCisjaWZuZGVmIGVsZl9yZWFkX2ltcGxpZXNfZXhlYworICAvKiBFeGVjdXRhYmxlcyBmb3Igd2hpY2ggZWxmX3JlYWRfaW1wbGllc19leGVjKCkgcmV0dXJucyBUUlVFIHdpbGwKKyAgICAgaGF2ZSB0aGUgUkVBRF9JTVBMSUVTX0VYRUMgcGVyc29uYWxpdHkgZmxhZyBzZXQgYXV0b21hdGljYWxseS4KKyAgICAgT3ZlcnJpZGUgaW4gYXNtL2VsZi5oIGFzIG5lZWRlZC4gICovCisjIGRlZmluZSBlbGZfcmVhZF9pbXBsaWVzX2V4ZWMoZXgsIGhhdmVfcHRfZ251X3N0YWNrKQkwCisjZW5kaWYKKworLyogMzItYml0IEVMRiBiYXNlIHR5cGVzLiAqLwordHlwZWRlZiBfX3UzMglFbGYzMl9BZGRyOwordHlwZWRlZiBfX3UxNglFbGYzMl9IYWxmOwordHlwZWRlZiBfX3UzMglFbGYzMl9PZmY7Cit0eXBlZGVmIF9fczMyCUVsZjMyX1N3b3JkOwordHlwZWRlZiBfX3UzMglFbGYzMl9Xb3JkOworCisvKiA2NC1iaXQgRUxGIGJhc2UgdHlwZXMuICovCit0eXBlZGVmIF9fdTY0CUVsZjY0X0FkZHI7Cit0eXBlZGVmIF9fdTE2CUVsZjY0X0hhbGY7Cit0eXBlZGVmIF9fczE2CUVsZjY0X1NIYWxmOwordHlwZWRlZiBfX3U2NAlFbGY2NF9PZmY7Cit0eXBlZGVmIF9fczMyCUVsZjY0X1N3b3JkOwordHlwZWRlZiBfX3UzMglFbGY2NF9Xb3JkOwordHlwZWRlZiBfX3U2NAlFbGY2NF9Yd29yZDsKK3R5cGVkZWYgX19zNjQJRWxmNjRfU3h3b3JkOworCisvKiBUaGVzZSBjb25zdGFudHMgYXJlIGZvciB0aGUgc2VnbWVudCB0eXBlcyBzdG9yZWQgaW4gdGhlIGltYWdlIGhlYWRlcnMgKi8KKyNkZWZpbmUgUFRfTlVMTCAgICAwCisjZGVmaW5lIFBUX0xPQUQgICAgMQorI2RlZmluZSBQVF9EWU5BTUlDIDIKKyNkZWZpbmUgUFRfSU5URVJQICAzCisjZGVmaW5lIFBUX05PVEUgICAgNAorI2RlZmluZSBQVF9TSExJQiAgIDUKKyNkZWZpbmUgUFRfUEhEUiAgICA2CisjZGVmaW5lIFBUX1RMUyAgICAgNyAgICAgICAgICAgICAgIC8qIFRocmVhZCBsb2NhbCBzdG9yYWdlIHNlZ21lbnQgKi8KKyNkZWZpbmUgUFRfTE9PUyAgICAweDYwMDAwMDAwICAgICAgLyogT1Mtc3BlY2lmaWMgKi8KKyNkZWZpbmUgUFRfSElPUyAgICAweDZmZmZmZmZmICAgICAgLyogT1Mtc3BlY2lmaWMgKi8KKyNkZWZpbmUgUFRfTE9QUk9DICAweDcwMDAwMDAwCisjZGVmaW5lIFBUX0hJUFJPQyAgMHg3ZmZmZmZmZgorI2RlZmluZSBQVF9HTlVfRUhfRlJBTUUJCTB4NjQ3NGU1NTAKKworI2RlZmluZSBQVF9HTlVfU1RBQ0sJKFBUX0xPT1MgKyAweDQ3NGU1NTEpCisKKy8qCisgKiBFeHRlbmRlZCBOdW1iZXJpbmcKKyAqCisgKiBJZiB0aGUgcmVhbCBudW1iZXIgb2YgcHJvZ3JhbSBoZWFkZXIgdGFibGUgZW50cmllcyBpcyBsYXJnZXIgdGhhbgorICogb3IgZXF1YWwgdG8gUE5fWE5VTSgweGZmZmYpLCBpdCBpcyBzZXQgdG8gc2hfaW5mbyBmaWVsZCBvZiB0aGUKKyAqIHNlY3Rpb24gaGVhZGVyIGF0IGluZGV4IDAsIGFuZCBQTl9YTlVNIGlzIHNldCB0byBlX3BobnVtCisgKiBmaWVsZC4gT3RoZXJ3aXNlLCB0aGUgc2VjdGlvbiBoZWFkZXIgYXQgaW5kZXggMCBpcyB6ZXJvCisgKiBpbml0aWFsaXplZCwgaWYgaXQgZXhpc3RzLgorICoKKyAqIFNwZWNpZmljYXRpb25zIGFyZSBhdmFpbGFibGUgaW46CisgKgorICogLSBTdW4gbWljcm9zeXN0ZW1zOiBMaW5rZXIgYW5kIExpYnJhcmllcy4KKyAqICAgUGFydCBObzogODE3LTE5ODQtMTcsIFNlcHRlbWJlciAyMDA4LgorICogICBVUkw6IGh0dHA6Ly9kb2NzLnN1bi5jb20vYXBwL2RvY3MvZG9jLzgxNy0xOTg0CisgKgorICogLSBTeXN0ZW0gViBBQkkgQU1ENjQgQXJjaGl0ZWN0dXJlIFByb2Nlc3NvciBTdXBwbGVtZW50CisgKiAgIERyYWZ0IFZlcnNpb24gMC45OS4sCisgKiAgIE1heSAxMSwgMjAwOS4KKyAqICAgVVJMOiBodHRwOi8vd3d3Lng4Ni02NC5vcmcvCisgKi8KKyNkZWZpbmUgUE5fWE5VTSAweGZmZmYKKworLyogVGhlc2UgY29uc3RhbnRzIGRlZmluZSB0aGUgZGlmZmVyZW50IGVsZiBmaWxlIHR5cGVzICovCisjZGVmaW5lIEVUX05PTkUgICAwCisjZGVmaW5lIEVUX1JFTCAgICAxCisjZGVmaW5lIEVUX0VYRUMgICAyCisjZGVmaW5lIEVUX0RZTiAgICAzCisjZGVmaW5lIEVUX0NPUkUgICA0CisjZGVmaW5lIEVUX0xPUFJPQyAweGZmMDAKKyNkZWZpbmUgRVRfSElQUk9DIDB4ZmZmZgorCisvKiBUaGlzIGlzIHRoZSBpbmZvIHRoYXQgaXMgbmVlZGVkIHRvIHBhcnNlIHRoZSBkeW5hbWljIHNlY3Rpb24gb2YgdGhlIGZpbGUgKi8KKyNkZWZpbmUgRFRfTlVMTAkJMAorI2RlZmluZSBEVF9ORUVERUQJMQorI2RlZmluZSBEVF9QTFRSRUxTWgkyCisjZGVmaW5lIERUX1BMVEdPVAkzCisjZGVmaW5lIERUX0hBU0gJCTQKKyNkZWZpbmUgRFRfU1RSVEFCCTUKKyNkZWZpbmUgRFRfU1lNVEFCCTYKKyNkZWZpbmUgRFRfUkVMQQkJNworI2RlZmluZSBEVF9SRUxBU1oJOAorI2RlZmluZSBEVF9SRUxBRU5UCTkKKyNkZWZpbmUgRFRfU1RSU1oJMTAKKyNkZWZpbmUgRFRfU1lNRU5UCTExCisjZGVmaW5lIERUX0lOSVQJCTEyCisjZGVmaW5lIERUX0ZJTkkJCTEzCisjZGVmaW5lIERUX1NPTkFNRQkxNAorI2RlZmluZSBEVF9SUEFUSCAJMTUKKyNkZWZpbmUgRFRfU1lNQk9MSUMJMTYKKyNkZWZpbmUgRFRfUkVMCSAgICAgICAgMTcKKyNkZWZpbmUgRFRfUkVMU1oJMTgKKyNkZWZpbmUgRFRfUkVMRU5UCTE5CisjZGVmaW5lIERUX1BMVFJFTAkyMAorI2RlZmluZSBEVF9ERUJVRwkyMQorI2RlZmluZSBEVF9URVhUUkVMCTIyCisjZGVmaW5lIERUX0pNUFJFTAkyMworI2RlZmluZSBEVF9FTkNPRElORwkzMgorI2RlZmluZSBPTERfRFRfTE9PUwkweDYwMDAwMDAwCisjZGVmaW5lIERUX0xPT1MJCTB4NjAwMDAwMGQKKyNkZWZpbmUgRFRfSElPUwkJMHg2ZmZmZjAwMAorI2RlZmluZSBEVF9WQUxSTkdMTwkweDZmZmZmZDAwCisjZGVmaW5lIERUX1ZBTFJOR0hJCTB4NmZmZmZkZmYKKyNkZWZpbmUgRFRfQUREUlJOR0xPCTB4NmZmZmZlMDAKKyNkZWZpbmUgRFRfQUREUlJOR0hJCTB4NmZmZmZlZmYKKyNkZWZpbmUgRFRfVkVSU1lNCTB4NmZmZmZmZjAKKyNkZWZpbmUgRFRfUkVMQUNPVU5UCTB4NmZmZmZmZjkKKyNkZWZpbmUgRFRfUkVMQ09VTlQJMHg2ZmZmZmZmYQorI2RlZmluZSBEVF9GTEFHU18xCTB4NmZmZmZmZmIKKyNkZWZpbmUgRFRfVkVSREVGCTB4NmZmZmZmZmMKKyNkZWZpbmUJRFRfVkVSREVGTlVNCTB4NmZmZmZmZmQKKyNkZWZpbmUgRFRfVkVSTkVFRAkweDZmZmZmZmZlCisjZGVmaW5lCURUX1ZFUk5FRUROVU0JMHg2ZmZmZmZmZgorI2RlZmluZSBPTERfRFRfSElPUyAgICAgMHg2ZmZmZmZmZgorI2RlZmluZSBEVF9MT1BST0MJMHg3MDAwMDAwMAorI2RlZmluZSBEVF9ISVBST0MJMHg3ZmZmZmZmZgorCisvKiBUaGlzIGluZm8gaXMgbmVlZGVkIHdoZW4gcGFyc2luZyB0aGUgc3ltYm9sIHRhYmxlICovCisjZGVmaW5lIFNUQl9MT0NBTCAgMAorI2RlZmluZSBTVEJfR0xPQkFMIDEKKyNkZWZpbmUgU1RCX1dFQUsgICAyCisKKyNkZWZpbmUgU1RUX05PVFlQRSAgMAorI2RlZmluZSBTVFRfT0JKRUNUICAxCisjZGVmaW5lIFNUVF9GVU5DICAgIDIKKyNkZWZpbmUgU1RUX1NFQ1RJT04gMworI2RlZmluZSBTVFRfRklMRSAgICA0CisjZGVmaW5lIFNUVF9DT01NT04gIDUKKyNkZWZpbmUgU1RUX1RMUyAgICAgNgorCisjZGVmaW5lIEVMRl9TVF9CSU5EKHgpCQkoKHgpID4+IDQpCisjZGVmaW5lIEVMRl9TVF9UWVBFKHgpCQkoKCh1bnNpZ25lZCBpbnQpIHgpICYgMHhmKQorI2RlZmluZSBFTEYzMl9TVF9CSU5EKHgpCUVMRl9TVF9CSU5EKHgpCisjZGVmaW5lIEVMRjMyX1NUX1RZUEUoeCkJRUxGX1NUX1RZUEUoeCkKKyNkZWZpbmUgRUxGNjRfU1RfQklORCh4KQlFTEZfU1RfQklORCh4KQorI2RlZmluZSBFTEY2NF9TVF9UWVBFKHgpCUVMRl9TVF9UWVBFKHgpCisKK3R5cGVkZWYgc3RydWN0IGR5bmFtaWN7CisgIEVsZjMyX1N3b3JkIGRfdGFnOworICB1bmlvbnsKKyAgICBFbGYzMl9Td29yZAlkX3ZhbDsKKyAgICBFbGYzMl9BZGRyCWRfcHRyOworICB9IGRfdW47Cit9IEVsZjMyX0R5bjsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBFbGY2NF9TeHdvcmQgZF90YWc7CQkvKiBlbnRyeSB0YWcgdmFsdWUgKi8KKyAgdW5pb24geworICAgIEVsZjY0X1h3b3JkIGRfdmFsOworICAgIEVsZjY0X0FkZHIgZF9wdHI7CisgIH0gZF91bjsKK30gRWxmNjRfRHluOworCisvKiBUaGUgZm9sbG93aW5nIGFyZSB1c2VkIHdpdGggcmVsb2NhdGlvbnMgKi8KKyNkZWZpbmUgRUxGMzJfUl9TWU0oeCkgKCh4KSA+PiA4KQorI2RlZmluZSBFTEYzMl9SX1RZUEUoeCkgKCh4KSAmIDB4ZmYpCisKKyNkZWZpbmUgRUxGNjRfUl9TWU0oaSkJCQkoKGkpID4+IDMyKQorI2RlZmluZSBFTEY2NF9SX1RZUEUoaSkJCQkoKGkpICYgMHhmZmZmZmZmZikKKwordHlwZWRlZiBzdHJ1Y3QgZWxmMzJfcmVsIHsKKyAgRWxmMzJfQWRkcglyX29mZnNldDsKKyAgRWxmMzJfV29yZAlyX2luZm87Cit9IEVsZjMyX1JlbDsKKwordHlwZWRlZiBzdHJ1Y3QgZWxmNjRfcmVsIHsKKyAgRWxmNjRfQWRkciByX29mZnNldDsJLyogTG9jYXRpb24gYXQgd2hpY2ggdG8gYXBwbHkgdGhlIGFjdGlvbiAqLworICBFbGY2NF9Yd29yZCByX2luZm87CS8qIGluZGV4IGFuZCB0eXBlIG9mIHJlbG9jYXRpb24gKi8KK30gRWxmNjRfUmVsOworCit0eXBlZGVmIHN0cnVjdCBlbGYzMl9yZWxheworICBFbGYzMl9BZGRyCXJfb2Zmc2V0OworICBFbGYzMl9Xb3JkCXJfaW5mbzsKKyAgRWxmMzJfU3dvcmQJcl9hZGRlbmQ7Cit9IEVsZjMyX1JlbGE7CisKK3R5cGVkZWYgc3RydWN0IGVsZjY0X3JlbGEgeworICBFbGY2NF9BZGRyIHJfb2Zmc2V0OwkvKiBMb2NhdGlvbiBhdCB3aGljaCB0byBhcHBseSB0aGUgYWN0aW9uICovCisgIEVsZjY0X1h3b3JkIHJfaW5mbzsJLyogaW5kZXggYW5kIHR5cGUgb2YgcmVsb2NhdGlvbiAqLworICBFbGY2NF9TeHdvcmQgcl9hZGRlbmQ7CS8qIENvbnN0YW50IGFkZGVuZCB1c2VkIHRvIGNvbXB1dGUgdmFsdWUgKi8KK30gRWxmNjRfUmVsYTsKKwordHlwZWRlZiBzdHJ1Y3QgZWxmMzJfc3lteworICBFbGYzMl9Xb3JkCXN0X25hbWU7CisgIEVsZjMyX0FkZHIJc3RfdmFsdWU7CisgIEVsZjMyX1dvcmQJc3Rfc2l6ZTsKKyAgdW5zaWduZWQgY2hhcglzdF9pbmZvOworICB1bnNpZ25lZCBjaGFyCXN0X290aGVyOworICBFbGYzMl9IYWxmCXN0X3NobmR4OworfSBFbGYzMl9TeW07CisKK3R5cGVkZWYgc3RydWN0IGVsZjY0X3N5bSB7CisgIEVsZjY0X1dvcmQgc3RfbmFtZTsJCS8qIFN5bWJvbCBuYW1lLCBpbmRleCBpbiBzdHJpbmcgdGJsICovCisgIHVuc2lnbmVkIGNoYXIJc3RfaW5mbzsJLyogVHlwZSBhbmQgYmluZGluZyBhdHRyaWJ1dGVzICovCisgIHVuc2lnbmVkIGNoYXIJc3Rfb3RoZXI7CS8qIE5vIGRlZmluZWQgbWVhbmluZywgMCAqLworICBFbGY2NF9IYWxmIHN0X3NobmR4OwkJLyogQXNzb2NpYXRlZCBzZWN0aW9uIGluZGV4ICovCisgIEVsZjY0X0FkZHIgc3RfdmFsdWU7CQkvKiBWYWx1ZSBvZiB0aGUgc3ltYm9sICovCisgIEVsZjY0X1h3b3JkIHN0X3NpemU7CQkvKiBBc3NvY2lhdGVkIHN5bWJvbCBzaXplICovCit9IEVsZjY0X1N5bTsKKworCisjZGVmaW5lIEVJX05JREVOVAkxNgorCit0eXBlZGVmIHN0cnVjdCBlbGYzMl9oZHJ7CisgIHVuc2lnbmVkIGNoYXIJZV9pZGVudFtFSV9OSURFTlRdOworICBFbGYzMl9IYWxmCWVfdHlwZTsKKyAgRWxmMzJfSGFsZgllX21hY2hpbmU7CisgIEVsZjMyX1dvcmQJZV92ZXJzaW9uOworICBFbGYzMl9BZGRyCWVfZW50cnk7ICAvKiBFbnRyeSBwb2ludCAqLworICBFbGYzMl9PZmYJZV9waG9mZjsKKyAgRWxmMzJfT2ZmCWVfc2hvZmY7CisgIEVsZjMyX1dvcmQJZV9mbGFnczsKKyAgRWxmMzJfSGFsZgllX2Voc2l6ZTsKKyAgRWxmMzJfSGFsZgllX3BoZW50c2l6ZTsKKyAgRWxmMzJfSGFsZgllX3BobnVtOworICBFbGYzMl9IYWxmCWVfc2hlbnRzaXplOworICBFbGYzMl9IYWxmCWVfc2hudW07CisgIEVsZjMyX0hhbGYJZV9zaHN0cm5keDsKK30gRWxmMzJfRWhkcjsKKwordHlwZWRlZiBzdHJ1Y3QgZWxmNjRfaGRyIHsKKyAgdW5zaWduZWQgY2hhcgllX2lkZW50W0VJX05JREVOVF07CS8qIEVMRiAibWFnaWMgbnVtYmVyIiAqLworICBFbGY2NF9IYWxmIGVfdHlwZTsKKyAgRWxmNjRfSGFsZiBlX21hY2hpbmU7CisgIEVsZjY0X1dvcmQgZV92ZXJzaW9uOworICBFbGY2NF9BZGRyIGVfZW50cnk7CQkvKiBFbnRyeSBwb2ludCB2aXJ0dWFsIGFkZHJlc3MgKi8KKyAgRWxmNjRfT2ZmIGVfcGhvZmY7CQkvKiBQcm9ncmFtIGhlYWRlciB0YWJsZSBmaWxlIG9mZnNldCAqLworICBFbGY2NF9PZmYgZV9zaG9mZjsJCS8qIFNlY3Rpb24gaGVhZGVyIHRhYmxlIGZpbGUgb2Zmc2V0ICovCisgIEVsZjY0X1dvcmQgZV9mbGFnczsKKyAgRWxmNjRfSGFsZiBlX2Voc2l6ZTsKKyAgRWxmNjRfSGFsZiBlX3BoZW50c2l6ZTsKKyAgRWxmNjRfSGFsZiBlX3BobnVtOworICBFbGY2NF9IYWxmIGVfc2hlbnRzaXplOworICBFbGY2NF9IYWxmIGVfc2hudW07CisgIEVsZjY0X0hhbGYgZV9zaHN0cm5keDsKK30gRWxmNjRfRWhkcjsKKworLyogVGhlc2UgY29uc3RhbnRzIGRlZmluZSB0aGUgcGVybWlzc2lvbnMgb24gc2VjdGlvbnMgaW4gdGhlIHByb2dyYW0KKyAgIGhlYWRlciwgcF9mbGFncy4gKi8KKyNkZWZpbmUgUEZfUgkJMHg0CisjZGVmaW5lIFBGX1cJCTB4MgorI2RlZmluZSBQRl9YCQkweDEKKwordHlwZWRlZiBzdHJ1Y3QgZWxmMzJfcGhkcnsKKyAgRWxmMzJfV29yZAlwX3R5cGU7CisgIEVsZjMyX09mZglwX29mZnNldDsKKyAgRWxmMzJfQWRkcglwX3ZhZGRyOworICBFbGYzMl9BZGRyCXBfcGFkZHI7CisgIEVsZjMyX1dvcmQJcF9maWxlc3o7CisgIEVsZjMyX1dvcmQJcF9tZW1zejsKKyAgRWxmMzJfV29yZAlwX2ZsYWdzOworICBFbGYzMl9Xb3JkCXBfYWxpZ247Cit9IEVsZjMyX1BoZHI7CisKK3R5cGVkZWYgc3RydWN0IGVsZjY0X3BoZHIgeworICBFbGY2NF9Xb3JkIHBfdHlwZTsKKyAgRWxmNjRfV29yZCBwX2ZsYWdzOworICBFbGY2NF9PZmYgcF9vZmZzZXQ7CQkvKiBTZWdtZW50IGZpbGUgb2Zmc2V0ICovCisgIEVsZjY0X0FkZHIgcF92YWRkcjsJCS8qIFNlZ21lbnQgdmlydHVhbCBhZGRyZXNzICovCisgIEVsZjY0X0FkZHIgcF9wYWRkcjsJCS8qIFNlZ21lbnQgcGh5c2ljYWwgYWRkcmVzcyAqLworICBFbGY2NF9Yd29yZCBwX2ZpbGVzejsJCS8qIFNlZ21lbnQgc2l6ZSBpbiBmaWxlICovCisgIEVsZjY0X1h3b3JkIHBfbWVtc3o7CQkvKiBTZWdtZW50IHNpemUgaW4gbWVtb3J5ICovCisgIEVsZjY0X1h3b3JkIHBfYWxpZ247CQkvKiBTZWdtZW50IGFsaWdubWVudCwgZmlsZSAmIG1lbW9yeSAqLworfSBFbGY2NF9QaGRyOworCisvKiBzaF90eXBlICovCisjZGVmaW5lIFNIVF9OVUxMCTAKKyNkZWZpbmUgU0hUX1BST0dCSVRTCTEKKyNkZWZpbmUgU0hUX1NZTVRBQgkyCisjZGVmaW5lIFNIVF9TVFJUQUIJMworI2RlZmluZSBTSFRfUkVMQQk0CisjZGVmaW5lIFNIVF9IQVNICTUKKyNkZWZpbmUgU0hUX0RZTkFNSUMJNgorI2RlZmluZSBTSFRfTk9URQk3CisjZGVmaW5lIFNIVF9OT0JJVFMJOAorI2RlZmluZSBTSFRfUkVMCQk5CisjZGVmaW5lIFNIVF9TSExJQgkxMAorI2RlZmluZSBTSFRfRFlOU1lNCTExCisjZGVmaW5lIFNIVF9OVU0JCTEyCisjZGVmaW5lIFNIVF9MT1BST0MJMHg3MDAwMDAwMAorI2RlZmluZSBTSFRfSElQUk9DCTB4N2ZmZmZmZmYKKyNkZWZpbmUgU0hUX0xPVVNFUgkweDgwMDAwMDAwCisjZGVmaW5lIFNIVF9ISVVTRVIJMHhmZmZmZmZmZgorCisvKiBzaF9mbGFncyAqLworI2RlZmluZSBTSEZfV1JJVEUJMHgxCisjZGVmaW5lIFNIRl9BTExPQwkweDIKKyNkZWZpbmUgU0hGX0VYRUNJTlNUUgkweDQKKyNkZWZpbmUgU0hGX01BU0tQUk9DCTB4ZjAwMDAwMDAKKworLyogc3BlY2lhbCBzZWN0aW9uIGluZGV4ZXMgKi8KKyNkZWZpbmUgU0hOX1VOREVGCTAKKyNkZWZpbmUgU0hOX0xPUkVTRVJWRQkweGZmMDAKKyNkZWZpbmUgU0hOX0xPUFJPQwkweGZmMDAKKyNkZWZpbmUgU0hOX0hJUFJPQwkweGZmMWYKKyNkZWZpbmUgU0hOX0FCUwkJMHhmZmYxCisjZGVmaW5lIFNITl9DT01NT04JMHhmZmYyCisjZGVmaW5lIFNITl9ISVJFU0VSVkUJMHhmZmZmCisgCit0eXBlZGVmIHN0cnVjdCBlbGYzMl9zaGRyIHsKKyAgRWxmMzJfV29yZAlzaF9uYW1lOworICBFbGYzMl9Xb3JkCXNoX3R5cGU7CisgIEVsZjMyX1dvcmQJc2hfZmxhZ3M7CisgIEVsZjMyX0FkZHIJc2hfYWRkcjsKKyAgRWxmMzJfT2ZmCXNoX29mZnNldDsKKyAgRWxmMzJfV29yZAlzaF9zaXplOworICBFbGYzMl9Xb3JkCXNoX2xpbms7CisgIEVsZjMyX1dvcmQJc2hfaW5mbzsKKyAgRWxmMzJfV29yZAlzaF9hZGRyYWxpZ247CisgIEVsZjMyX1dvcmQJc2hfZW50c2l6ZTsKK30gRWxmMzJfU2hkcjsKKwordHlwZWRlZiBzdHJ1Y3QgZWxmNjRfc2hkciB7CisgIEVsZjY0X1dvcmQgc2hfbmFtZTsJCS8qIFNlY3Rpb24gbmFtZSwgaW5kZXggaW4gc3RyaW5nIHRibCAqLworICBFbGY2NF9Xb3JkIHNoX3R5cGU7CQkvKiBUeXBlIG9mIHNlY3Rpb24gKi8KKyAgRWxmNjRfWHdvcmQgc2hfZmxhZ3M7CQkvKiBNaXNjZWxsYW5lb3VzIHNlY3Rpb24gYXR0cmlidXRlcyAqLworICBFbGY2NF9BZGRyIHNoX2FkZHI7CQkvKiBTZWN0aW9uIHZpcnR1YWwgYWRkciBhdCBleGVjdXRpb24gKi8KKyAgRWxmNjRfT2ZmIHNoX29mZnNldDsJCS8qIFNlY3Rpb24gZmlsZSBvZmZzZXQgKi8KKyAgRWxmNjRfWHdvcmQgc2hfc2l6ZTsJCS8qIFNpemUgb2Ygc2VjdGlvbiBpbiBieXRlcyAqLworICBFbGY2NF9Xb3JkIHNoX2xpbms7CQkvKiBJbmRleCBvZiBhbm90aGVyIHNlY3Rpb24gKi8KKyAgRWxmNjRfV29yZCBzaF9pbmZvOwkJLyogQWRkaXRpb25hbCBzZWN0aW9uIGluZm9ybWF0aW9uICovCisgIEVsZjY0X1h3b3JkIHNoX2FkZHJhbGlnbjsJLyogU2VjdGlvbiBhbGlnbm1lbnQgKi8KKyAgRWxmNjRfWHdvcmQgc2hfZW50c2l6ZTsJLyogRW50cnkgc2l6ZSBpZiBzZWN0aW9uIGhvbGRzIHRhYmxlICovCit9IEVsZjY0X1NoZHI7CisKKyNkZWZpbmUJRUlfTUFHMAkJMAkJLyogZV9pZGVudFtdIGluZGV4ZXMgKi8KKyNkZWZpbmUJRUlfTUFHMQkJMQorI2RlZmluZQlFSV9NQUcyCQkyCisjZGVmaW5lCUVJX01BRzMJCTMKKyNkZWZpbmUJRUlfQ0xBU1MJNAorI2RlZmluZQlFSV9EQVRBCQk1CisjZGVmaW5lCUVJX1ZFUlNJT04JNgorI2RlZmluZQlFSV9PU0FCSQk3CisjZGVmaW5lCUVJX1BBRAkJOAorCisjZGVmaW5lCUVMRk1BRzAJCTB4N2YJCS8qIEVJX01BRyAqLworI2RlZmluZQlFTEZNQUcxCQknRScKKyNkZWZpbmUJRUxGTUFHMgkJJ0wnCisjZGVmaW5lCUVMRk1BRzMJCSdGJworI2RlZmluZQlFTEZNQUcJCSJcMTc3RUxGIgorI2RlZmluZQlTRUxGTUFHCQk0CisKKyNkZWZpbmUJRUxGQ0xBU1NOT05FCTAJCS8qIEVJX0NMQVNTICovCisjZGVmaW5lCUVMRkNMQVNTMzIJMQorI2RlZmluZQlFTEZDTEFTUzY0CTIKKyNkZWZpbmUJRUxGQ0xBU1NOVU0JMworCisjZGVmaW5lIEVMRkRBVEFOT05FCTAJCS8qIGVfaWRlbnRbRUlfREFUQV0gKi8KKyNkZWZpbmUgRUxGREFUQTJMU0IJMQorI2RlZmluZSBFTEZEQVRBMk1TQgkyCisKKyNkZWZpbmUgRVZfTk9ORQkJMAkJLyogZV92ZXJzaW9uLCBFSV9WRVJTSU9OICovCisjZGVmaW5lIEVWX0NVUlJFTlQJMQorI2RlZmluZSBFVl9OVU0JCTIKKworI2RlZmluZSBFTEZPU0FCSV9OT05FCTAKKyNkZWZpbmUgRUxGT1NBQklfTElOVVgJMworCisjaWZuZGVmIEVMRl9PU0FCSQorI2RlZmluZSBFTEZfT1NBQkkgRUxGT1NBQklfTk9ORQorI2VuZGlmCisKKy8qCisgKiBOb3RlcyB1c2VkIGluIEVUX0NPUkUuIEFyY2hpdGVjdHVyZXMgZXhwb3J0IHNvbWUgb2YgdGhlIGFyY2ggcmVnaXN0ZXIgc2V0cworICogdXNpbmcgdGhlIGNvcnJlc3BvbmRpbmcgbm90ZSB0eXBlcyB2aWEgdGhlIFBUUkFDRV9HRVRSRUdTRVQgYW5kCisgKiBQVFJBQ0VfU0VUUkVHU0VUIHJlcXVlc3RzLgorICovCisjZGVmaW5lIE5UX1BSU1RBVFVTCTEKKyNkZWZpbmUgTlRfUFJGUFJFRwkyCisjZGVmaW5lIE5UX1BSUFNJTkZPCTMKKyNkZWZpbmUgTlRfVEFTS1NUUlVDVAk0CisjZGVmaW5lIE5UX0FVWFYJCTYKKyNkZWZpbmUgTlRfUFJYRlBSRUcgICAgIDB4NDZlNjJiN2YgICAgICAvKiBjb3BpZWQgZnJvbSBnZGI1LjEvaW5jbHVkZS9lbGYvY29tbW9uLmggKi8KKyNkZWZpbmUgTlRfUFBDX1ZNWAkweDEwMAkJLyogUG93ZXJQQyBBbHRpdmVjL1ZNWCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTlRfUFBDX1NQRQkweDEwMQkJLyogUG93ZXJQQyBTUEUvRVZSIHJlZ2lzdGVycyAqLworI2RlZmluZSBOVF9QUENfVlNYCTB4MTAyCQkvKiBQb3dlclBDIFZTWCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTlRfMzg2X1RMUwkweDIwMAkJLyogaTM4NiBUTFMgc2xvdHMgKHN0cnVjdCB1c2VyX2Rlc2MpICovCisjZGVmaW5lIE5UXzM4Nl9JT1BFUk0JMHgyMDEJCS8qIHg4NiBpbyBwZXJtaXNzaW9uIGJpdG1hcCAoMT1kZW55KSAqLworI2RlZmluZSBOVF9YODZfWFNUQVRFCTB4MjAyCQkvKiB4ODYgZXh0ZW5kZWQgc3RhdGUgdXNpbmcgeHNhdmUgKi8KKyNkZWZpbmUgTlRfUzM5MF9ISUdIX0dQUlMJMHgzMDAJLyogczM5MCB1cHBlciByZWdpc3RlciBoYWx2ZXMgKi8KKyNkZWZpbmUgTlRfUzM5MF9USU1FUgkweDMwMQkJLyogczM5MCB0aW1lciByZWdpc3RlciAqLworI2RlZmluZSBOVF9TMzkwX1RPRENNUAkweDMwMgkJLyogczM5MCBUT0QgY2xvY2sgY29tcGFyYXRvciByZWdpc3RlciAqLworI2RlZmluZSBOVF9TMzkwX1RPRFBSRUcJMHgzMDMJCS8qIHMzOTAgVE9EIHByb2dyYW1tYWJsZSByZWdpc3RlciAqLworI2RlZmluZSBOVF9TMzkwX0NUUlMJMHgzMDQJCS8qIHMzOTAgY29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTlRfUzM5MF9QUkVGSVgJMHgzMDUJCS8qIHMzOTAgcHJlZml4IHJlZ2lzdGVyICovCisjZGVmaW5lIE5UX1MzOTBfTEFTVF9CUkVBSwkweDMwNgkvKiBzMzkwIGJyZWFraW5nIGV2ZW50IGFkZHJlc3MgKi8KKworCisvKiBOb3RlIGhlYWRlciBpbiBhIFBUX05PVEUgc2VjdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3QgZWxmMzJfbm90ZSB7CisgIEVsZjMyX1dvcmQJbl9uYW1lc3o7CS8qIE5hbWUgc2l6ZSAqLworICBFbGYzMl9Xb3JkCW5fZGVzY3N6OwkvKiBDb250ZW50IHNpemUgKi8KKyAgRWxmMzJfV29yZAluX3R5cGU7CQkvKiBDb250ZW50IHR5cGUgKi8KK30gRWxmMzJfTmhkcjsKKworLyogTm90ZSBoZWFkZXIgaW4gYSBQVF9OT1RFIHNlY3Rpb24gKi8KK3R5cGVkZWYgc3RydWN0IGVsZjY0X25vdGUgeworICBFbGY2NF9Xb3JkIG5fbmFtZXN6OwkvKiBOYW1lIHNpemUgKi8KKyAgRWxmNjRfV29yZCBuX2Rlc2NzejsJLyogQ29udGVudCBzaXplICovCisgIEVsZjY0X1dvcmQgbl90eXBlOwkvKiBDb250ZW50IHR5cGUgKi8KK30gRWxmNjRfTmhkcjsKKworI2VuZGlmIC8qIF9MSU5VWF9FTEZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2VsZmNvcmUuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9lbGZjb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRkNzg0YwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9lbGZjb3JlLmgKQEAgLTAsMCArMSw5NiBAQAorI2lmbmRlZiBfTElOVVhfRUxGQ09SRV9ICisjZGVmaW5lIF9MSU5VWF9FTEZDT1JFX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisKK3N0cnVjdCBlbGZfc2lnaW5mbworeworCWludAlzaV9zaWdubzsJCQkvKiBzaWduYWwgbnVtYmVyICovCisJaW50CXNpX2NvZGU7CQkJLyogZXh0cmEgY29kZSAqLworCWludAlzaV9lcnJubzsJCQkvKiBlcnJubyAqLworfTsKKworCit0eXBlZGVmIGVsZl9ncmVnX3QgZ3JlZ190OwordHlwZWRlZiBlbGZfZ3JlZ3NldF90IGdyZWdzZXRfdDsKK3R5cGVkZWYgZWxmX2ZwcmVnc2V0X3QgZnByZWdzZXRfdDsKK3R5cGVkZWYgZWxmX2ZweHJlZ3NldF90IGZweHJlZ3NldF90OworI2RlZmluZSBOR1JFRyBFTEZfTkdSRUcKKworLyoKKyAqIERlZmluaXRpb25zIHRvIGdlbmVyYXRlIEludGVsIFNWUjQtbGlrZSBjb3JlIGZpbGVzLgorICogVGhlc2UgbW9zdGx5IGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgdGhlIFNWUjQgdHlwZXMgd2l0aCAiZWxmXyIKKyAqIHRhY2tlZCBvbiB0aGUgZnJvbnQgdG8gcHJldmVudCBjbGFzaGVzIHdpdGggbGludXggZGVmaW5pdGlvbnMsCisgKiBhbmQgdGhlIHR5cGVkZWYgZm9ybXMgaGF2ZSBiZWVuIGF2b2lkZWQuICBUaGlzIGlzIG1vc3RseSBsaWtlCisgKiB0aGUgU1ZSNCBzdHJ1Y3R1cmUsIGJ1dCBtb3JlIExpbnV4eSwgd2l0aCB0aGluZ3MgdGhhdCBMaW51eCBkb2VzCisgKiBub3Qgc3VwcG9ydCBhbmQgd2hpY2ggZ2RiIGRvZXNuJ3QgcmVhbGx5IHVzZSBleGNsdWRlZC4KKyAqIEZpZWxkcyBwcmVzZW50IGJ1dCBub3QgdXNlZCBhcmUgbWFya2VkIHdpdGggIlhYWCIuCisgKi8KK3N0cnVjdCBlbGZfcHJzdGF0dXMKK3sKKyNpZiAwCisJbG9uZwlwcl9mbGFnczsJLyogWFhYIFByb2Nlc3MgZmxhZ3MgKi8KKwlzaG9ydAlwcl93aHk7CQkvKiBYWFggUmVhc29uIGZvciBwcm9jZXNzIGhhbHQgKi8KKwlzaG9ydAlwcl93aGF0OwkvKiBYWFggTW9yZSBkZXRhaWxlZCByZWFzb24gKi8KKyNlbmRpZgorCXN0cnVjdCBlbGZfc2lnaW5mbyBwcl9pbmZvOwkvKiBJbmZvIGFzc29jaWF0ZWQgd2l0aCBzaWduYWwgKi8KKwlzaG9ydAlwcl9jdXJzaWc7CQkvKiBDdXJyZW50IHNpZ25hbCAqLworCXVuc2lnbmVkIGxvbmcgcHJfc2lncGVuZDsJLyogU2V0IG9mIHBlbmRpbmcgc2lnbmFscyAqLworCXVuc2lnbmVkIGxvbmcgcHJfc2lnaG9sZDsJLyogU2V0IG9mIGhlbGQgc2lnbmFscyAqLworI2lmIDAKKwlzdHJ1Y3Qgc2lnYWx0c3RhY2sgcHJfYWx0c3RhY2s7CS8qIEFsdGVybmF0ZSBzdGFjayBpbmZvICovCisJc3RydWN0IHNpZ2FjdGlvbiBwcl9hY3Rpb247CS8qIFNpZ25hbCBhY3Rpb24gZm9yIGN1cnJlbnQgc2lnICovCisjZW5kaWYKKwlwaWRfdAlwcl9waWQ7CisJcGlkX3QJcHJfcHBpZDsKKwlwaWRfdAlwcl9wZ3JwOworCXBpZF90CXByX3NpZDsKKwlzdHJ1Y3QgdGltZXZhbCBwcl91dGltZTsJLyogVXNlciB0aW1lICovCisJc3RydWN0IHRpbWV2YWwgcHJfc3RpbWU7CS8qIFN5c3RlbSB0aW1lICovCisJc3RydWN0IHRpbWV2YWwgcHJfY3V0aW1lOwkvKiBDdW11bGF0aXZlIHVzZXIgdGltZSAqLworCXN0cnVjdCB0aW1ldmFsIHByX2NzdGltZTsJLyogQ3VtdWxhdGl2ZSBzeXN0ZW0gdGltZSAqLworI2lmIDAKKwlsb25nCXByX2luc3RyOwkJLyogQ3VycmVudCBpbnN0cnVjdGlvbiAqLworI2VuZGlmCisJZWxmX2dyZWdzZXRfdCBwcl9yZWc7CS8qIEdQIHJlZ2lzdGVycyAqLworI2lmZGVmIENPTkZJR19CSU5GTVRfRUxGX0ZEUElDCisJLyogV2hlbiB1c2luZyBGRFBJQywgdGhlIGxvYWRtYXAgYWRkcmVzc2VzIG5lZWQgdG8gYmUgY29tbXVuaWNhdGVkCisJICogdG8gR0RCIGluIG9yZGVyIGZvciBHREIgdG8gZG8gdGhlIG5lY2Vzc2FyeSByZWxvY2F0aW9ucy4gIFRoZQorCSAqIGZpZWxkcyAoYmVsb3cpIHVzZWQgdG8gY29tbXVuaWNhdGUgdGhpcyBpbmZvcm1hdGlvbiBhcmUgcGxhY2VkCisJICogaW1tZWRpYXRlbHkgYWZ0ZXIgYGBwcl9yZWcnJywgc28gdGhhdCB0aGUgbG9hZG1hcCBhZGRyZXNzZXMgbWF5CisJICogYmUgdmlld2VkIGFzIHBhcnQgb2YgdGhlIHJlZ2lzdGVyIHNldCBpZiBzbyBkZXNpcmVkLgorCSAqLworCXVuc2lnbmVkIGxvbmcgcHJfZXhlY19mZHBpY19sb2FkbWFwOworCXVuc2lnbmVkIGxvbmcgcHJfaW50ZXJwX2ZkcGljX2xvYWRtYXA7CisjZW5kaWYKKwlpbnQgcHJfZnB2YWxpZDsJCS8qIFRydWUgaWYgbWF0aCBjby1wcm9jZXNzb3IgYmVpbmcgdXNlZC4gICovCit9OworCisjZGVmaW5lIEVMRl9QUkFSR1NaCSg4MCkJLyogTnVtYmVyIG9mIGNoYXJzIGZvciBhcmdzICovCisKK3N0cnVjdCBlbGZfcHJwc2luZm8KK3sKKwljaGFyCXByX3N0YXRlOwkvKiBudW1lcmljIHByb2Nlc3Mgc3RhdGUgKi8KKwljaGFyCXByX3NuYW1lOwkvKiBjaGFyIGZvciBwcl9zdGF0ZSAqLworCWNoYXIJcHJfem9tYjsJLyogem9tYmllICovCisJY2hhcglwcl9uaWNlOwkvKiBuaWNlIHZhbCAqLworCXVuc2lnbmVkIGxvbmcgcHJfZmxhZzsJLyogZmxhZ3MgKi8KKwlfX2tlcm5lbF91aWRfdAlwcl91aWQ7CisJX19rZXJuZWxfZ2lkX3QJcHJfZ2lkOworCXBpZF90CXByX3BpZCwgcHJfcHBpZCwgcHJfcGdycCwgcHJfc2lkOworCS8qIExvdHMgbWlzc2luZyAqLworCWNoYXIJcHJfZm5hbWVbMTZdOwkvKiBmaWxlbmFtZSBvZiBleGVjdXRhYmxlICovCisJY2hhcglwcl9wc2FyZ3NbRUxGX1BSQVJHU1pdOwkvKiBpbml0aWFsIHBhcnQgb2YgYXJnIGxpc3QgKi8KK307CisKK3R5cGVkZWYgc3RydWN0IGVsZl9wcnN0YXR1cyBwcnN0YXR1c190OwordHlwZWRlZiBzdHJ1Y3QgZWxmX3BycHNpbmZvIHBycHNpbmZvX3Q7CisjZGVmaW5lIFBSQVJHU1ogRUxGX1BSQVJHU1ogCisKKworI2VuZGlmIC8qIF9MSU5VWF9FTEZDT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9lcnJuby5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM4NWZhMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9lcnJuby5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfTElOVVhfRVJSTk9fSAorI2RlZmluZSBfTElOVVhfRVJSTk9fSAorCisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZXJycXVldWUuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9lcnJxdWV1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjYjBhZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZXJycXVldWUuaApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIF9MSU5VWF9FUlJRVUVVRV9ICisjZGVmaW5lIF9MSU5VWF9FUlJRVUVVRV9IIDEKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciB7CisJX191MzIJZWVfZXJybm87CQorCV9fdTgJZWVfb3JpZ2luOworCV9fdTgJZWVfdHlwZTsKKwlfX3U4CWVlX2NvZGU7CisJX191OAllZV9wYWQ7CisJX191MzIgICBlZV9pbmZvOworCV9fdTMyICAgZWVfZGF0YTsKK307CisKKyNkZWZpbmUgU09fRUVfT1JJR0lOX05PTkUJMAorI2RlZmluZSBTT19FRV9PUklHSU5fTE9DQUwJMQorI2RlZmluZSBTT19FRV9PUklHSU5fSUNNUAkyCisjZGVmaW5lIFNPX0VFX09SSUdJTl9JQ01QNgkzCisjZGVmaW5lIFNPX0VFX09SSUdJTl9USU1FU1RBTVBJTkcgNAorCisjZGVmaW5lIFNPX0VFX09GRkVOREVSKGVlKQkoKHN0cnVjdCBzb2NrYWRkciopKChlZSkrMSkpCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZXRodG9vbC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDBhZjAzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaApAQCAtMCwwICsxLDc1MyBAQAorLyoKKyAqIGV0aHRvb2wuaDogRGVmaW5lcyBmb3IgTGludXggZXRodG9vbC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKQorICogQ29weXJpZ2h0IDIwMDEgSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPgorICogUG9ydGlvbnMgQ29weXJpZ2h0IDIwMDEgU3VuIE1pY3Jvc3lzdGVtcyAodGhvY2tpbkBzdW4uY29tKQorICogUG9ydGlvbnMgQ29weXJpZ2h0IDIwMDIgSW50ZWwgKGVsaS5rdXBlcm1hbm5AaW50ZWwuY29tLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocmlzdG9waGVyLmxlZWNoQGludGVsLmNvbSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY290dC5mZWxkbWFuQGludGVsLmNvbSkKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgU3VuIE1pY3Jvc3lzdGVtcyAyMDA4CisgKi8KKworI2lmbmRlZiBfTElOVVhfRVRIVE9PTF9ICisjZGVmaW5lIF9MSU5VWF9FVEhUT09MX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKworLyogVGhpcyBzaG91bGQgd29yayBmb3IgYm90aCAzMiBhbmQgNjQgYml0IHVzZXJsYW5kLiAqLworc3RydWN0IGV0aHRvb2xfY21kIHsKKwlfX3UzMgljbWQ7CisJX191MzIJc3VwcG9ydGVkOwkvKiBGZWF0dXJlcyB0aGlzIGludGVyZmFjZSBzdXBwb3J0cyAqLworCV9fdTMyCWFkdmVydGlzaW5nOwkvKiBGZWF0dXJlcyB0aGlzIGludGVyZmFjZSBhZHZlcnRpc2VzICovCisJX191MTYJc3BlZWQ7CQkvKiBUaGUgZm9yY2VkIHNwZWVkLCAxME1iLCAxMDBNYiwgZ2lnYWJpdCAqLworCV9fdTgJZHVwbGV4OwkJLyogRHVwbGV4LCBoYWxmIG9yIGZ1bGwgKi8KKwlfX3U4CXBvcnQ7CQkvKiBXaGljaCBjb25uZWN0b3IgcG9ydCAqLworCV9fdTgJcGh5X2FkZHJlc3M7CisJX191OAl0cmFuc2NlaXZlcjsJLyogV2hpY2ggdHJhbnNjZWl2ZXIgdG8gdXNlICovCisJX191OAlhdXRvbmVnOwkvKiBFbmFibGUgb3IgZGlzYWJsZSBhdXRvbmVnb3RpYXRpb24gKi8KKwlfX3U4CW1kaW9fc3VwcG9ydDsKKwlfX3UzMgltYXh0eHBrdDsJLyogVHggcGt0cyBiZWZvcmUgZ2VuZXJhdGluZyB0eCBpbnQgKi8KKwlfX3UzMgltYXhyeHBrdDsJLyogUnggcGt0cyBiZWZvcmUgZ2VuZXJhdGluZyByeCBpbnQgKi8KKwlfX3UxNglzcGVlZF9oaTsKKwlfX3U4CWV0aF90cF9tZGl4OworCV9fdTgJcmVzZXJ2ZWQyOworCV9fdTMyCWxwX2FkdmVydGlzaW5nOwkvKiBGZWF0dXJlcyB0aGUgbGluayBwYXJ0bmVyIGFkdmVydGlzZXMgKi8KKwlfX3UzMglyZXNlcnZlZFsyXTsKK307CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgZXRodG9vbF9jbWRfc3BlZWRfc2V0KHN0cnVjdCBldGh0b29sX2NtZCAqZXAsCisJCQkJCQlfX3UzMiBzcGVlZCkKK3sKKworCWVwLT5zcGVlZCA9IChfX3UxNilzcGVlZDsKKwllcC0+c3BlZWRfaGkgPSAoX191MTYpKHNwZWVkID4+IDE2KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX191MzIgZXRodG9vbF9jbWRfc3BlZWQoc3RydWN0IGV0aHRvb2xfY21kICplcCkKK3sKKwlyZXR1cm4gKGVwLT5zcGVlZF9oaSA8PCAxNikgfCBlcC0+c3BlZWQ7Cit9CisKKyNkZWZpbmUgRVRIVE9PTF9GV1ZFUlNfTEVOCTMyCisjZGVmaW5lIEVUSFRPT0xfQlVTSU5GT19MRU4JMzIKKy8qIHRoZXNlIHN0cmluZ3MgYXJlIHNldCB0byB3aGF0ZXZlciB0aGUgZHJpdmVyIGF1dGhvciBkZWNpZGVzLi4uICovCitzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvIHsKKwlfX3UzMgljbWQ7CisJY2hhcglkcml2ZXJbMzJdOwkvKiBkcml2ZXIgc2hvcnQgbmFtZSwgInR1bGlwIiwgImVlcHJvMTAwIiAqLworCWNoYXIJdmVyc2lvblszMl07CS8qIGRyaXZlciB2ZXJzaW9uIHN0cmluZyAqLworCWNoYXIJZndfdmVyc2lvbltFVEhUT09MX0ZXVkVSU19MRU5dOwkvKiBmaXJtd2FyZSB2ZXJzaW9uIHN0cmluZyAqLworCWNoYXIJYnVzX2luZm9bRVRIVE9PTF9CVVNJTkZPX0xFTl07CS8qIEJ1cyBpbmZvIGZvciB0aGlzIElGLiAqLworCQkJCS8qIEZvciBQQ0kgZGV2aWNlcywgdXNlIHBjaV9uYW1lKHBjaV9kZXYpLiAqLworCWNoYXIJcmVzZXJ2ZWQxWzMyXTsKKwljaGFyCXJlc2VydmVkMlsxMl07CisJCQkJLyoKKwkJCQkgKiBTb21lIHN0cnVjdCBtZW1iZXJzIGJlbG93IGFyZSBmaWxsZWQgaW4KKwkJCQkgKiB1c2luZyBvcHMtPmdldF9zc2V0X2NvdW50KCkuICBPYnRhaW5pbmcKKwkJCQkgKiB0aGlzIGluZm8gZnJvbSBldGh0b29sX2RydmluZm8gaXMgbm93CisJCQkJICogZGVwcmVjYXRlZDsgVXNlIEVUSFRPT0xfR1NTRVRfSU5GTworCQkJCSAqIGluc3RlYWQuCisJCQkJICovCisJX191MzIJbl9wcml2X2ZsYWdzOwkvKiBudW1iZXIgb2YgZmxhZ3MgdmFsaWQgaW4gRVRIVE9PTF9HUEZMQUdTICovCisJX191MzIJbl9zdGF0czsJLyogbnVtYmVyIG9mIHU2NCdzIGZyb20gRVRIVE9PTF9HU1RBVFMgKi8KKwlfX3UzMgl0ZXN0aW5mb19sZW47CisJX191MzIJZWVkdW1wX2xlbjsJLyogU2l6ZSBvZiBkYXRhIGZyb20gRVRIVE9PTF9HRUVQUk9NIChieXRlcykgKi8KKwlfX3UzMglyZWdkdW1wX2xlbjsJLyogU2l6ZSBvZiBkYXRhIGZyb20gRVRIVE9PTF9HUkVHUyAoYnl0ZXMpICovCit9OworCisjZGVmaW5lIFNPUEFTU19NQVgJNgorLyogd2FrZS1vbi1sYW4gc2V0dGluZ3MgKi8KK3N0cnVjdCBldGh0b29sX3dvbGluZm8geworCV9fdTMyCWNtZDsKKwlfX3UzMglzdXBwb3J0ZWQ7CisJX191MzIJd29sb3B0czsKKwlfX3U4CXNvcGFzc1tTT1BBU1NfTUFYXTsgLyogU2VjdXJlT24odG0pIHBhc3N3b3JkICovCit9OworCisvKiBmb3IgcGFzc2luZyBzaW5nbGUgdmFsdWVzICovCitzdHJ1Y3QgZXRodG9vbF92YWx1ZSB7CisJX191MzIJY21kOworCV9fdTMyCWRhdGE7Cit9OworCisvKiBmb3IgcGFzc2luZyBiaWcgY2h1bmtzIG9mIGRhdGEgKi8KK3N0cnVjdCBldGh0b29sX3JlZ3MgeworCV9fdTMyCWNtZDsKKwlfX3UzMgl2ZXJzaW9uOyAvKiBkcml2ZXItc3BlY2lmaWMsIGluZGljYXRlcyBkaWZmZXJlbnQgY2hpcHMvcmV2cyAqLworCV9fdTMyCWxlbjsgLyogYnl0ZXMgKi8KKwlfX3U4CWRhdGFbMF07Cit9OworCisvKiBmb3IgcGFzc2luZyBFRVBST00gY2h1bmtzICovCitzdHJ1Y3QgZXRodG9vbF9lZXByb20geworCV9fdTMyCWNtZDsKKwlfX3UzMgltYWdpYzsKKwlfX3UzMglvZmZzZXQ7IC8qIGluIGJ5dGVzICovCisJX191MzIJbGVuOyAvKiBpbiBieXRlcyAqLworCV9fdTgJZGF0YVswXTsKK307CisKKy8qIGZvciBjb25maWd1cmluZyBjb2FsZXNjaW5nIHBhcmFtZXRlcnMgb2YgY2hpcCAqLworc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgeworCV9fdTMyCWNtZDsJLyogRVRIVE9PTF97RyxTfUNPQUxFU0NFICovCisKKwkvKiBIb3cgbWFueSB1c2VjcyB0byBkZWxheSBhbiBSWCBpbnRlcnJ1cHQgYWZ0ZXIKKwkgKiBhIHBhY2tldCBhcnJpdmVzLiAgSWYgMCwgb25seSByeF9tYXhfY29hbGVzY2VkX2ZyYW1lcworCSAqIGlzIHVzZWQuCisJICovCisJX191MzIJcnhfY29hbGVzY2VfdXNlY3M7CisKKwkvKiBIb3cgbWFueSBwYWNrZXRzIHRvIGRlbGF5IGFuIFJYIGludGVycnVwdCBhZnRlcgorCSAqIGEgcGFja2V0IGFycml2ZXMuICBJZiAwLCBvbmx5IHJ4X2NvYWxlc2NlX3VzZWNzIGlzCisJICogdXNlZC4gIEl0IGlzIGlsbGVnYWwgdG8gc2V0IGJvdGggdXNlY3MgYW5kIG1heCBmcmFtZXMKKwkgKiB0byB6ZXJvIGFzIHRoaXMgd291bGQgY2F1c2UgUlggaW50ZXJydXB0cyB0byBuZXZlciBiZQorCSAqIGdlbmVyYXRlZC4KKwkgKi8KKwlfX3UzMglyeF9tYXhfY29hbGVzY2VkX2ZyYW1lczsKKworCS8qIFNhbWUgYXMgYWJvdmUgdHdvIHBhcmFtZXRlcnMsIGV4Y2VwdCB0aGF0IHRoZXNlIHZhbHVlcworCSAqIGFwcGx5IHdoaWxlIGFuIElSUSBpcyBiZWluZyBzZXJ2aWNlZCBieSB0aGUgaG9zdC4gIE5vdAorCSAqIGFsbCBjYXJkcyBzdXBwb3J0IHRoaXMgZmVhdHVyZSBhbmQgdGhlIHZhbHVlcyBhcmUgaWdub3JlZAorCSAqIGluIHRoYXQgY2FzZS4KKwkgKi8KKwlfX3UzMglyeF9jb2FsZXNjZV91c2Vjc19pcnE7CisJX191MzIJcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaXJxOworCisJLyogSG93IG1hbnkgdXNlY3MgdG8gZGVsYXkgYSBUWCBpbnRlcnJ1cHQgYWZ0ZXIKKwkgKiBhIHBhY2tldCBpcyBzZW50LiAgSWYgMCwgb25seSB0eF9tYXhfY29hbGVzY2VkX2ZyYW1lcworCSAqIGlzIHVzZWQuCisJICovCisJX191MzIJdHhfY29hbGVzY2VfdXNlY3M7CisKKwkvKiBIb3cgbWFueSBwYWNrZXRzIHRvIGRlbGF5IGEgVFggaW50ZXJydXB0IGFmdGVyCisJICogYSBwYWNrZXQgaXMgc2VudC4gIElmIDAsIG9ubHkgdHhfY29hbGVzY2VfdXNlY3MgaXMKKwkgKiB1c2VkLiAgSXQgaXMgaWxsZWdhbCB0byBzZXQgYm90aCB1c2VjcyBhbmQgbWF4IGZyYW1lcworCSAqIHRvIHplcm8gYXMgdGhpcyB3b3VsZCBjYXVzZSBUWCBpbnRlcnJ1cHRzIHRvIG5ldmVyIGJlCisJICogZ2VuZXJhdGVkLgorCSAqLworCV9fdTMyCXR4X21heF9jb2FsZXNjZWRfZnJhbWVzOworCisJLyogU2FtZSBhcyBhYm92ZSB0d28gcGFyYW1ldGVycywgZXhjZXB0IHRoYXQgdGhlc2UgdmFsdWVzCisJICogYXBwbHkgd2hpbGUgYW4gSVJRIGlzIGJlaW5nIHNlcnZpY2VkIGJ5IHRoZSBob3N0LiAgTm90CisJICogYWxsIGNhcmRzIHN1cHBvcnQgdGhpcyBmZWF0dXJlIGFuZCB0aGUgdmFsdWVzIGFyZSBpZ25vcmVkCisJICogaW4gdGhhdCBjYXNlLgorCSAqLworCV9fdTMyCXR4X2NvYWxlc2NlX3VzZWNzX2lycTsKKwlfX3UzMgl0eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnE7CisKKwkvKiBIb3cgbWFueSB1c2VjcyB0byBkZWxheSBpbi1tZW1vcnkgc3RhdGlzdGljcworCSAqIGJsb2NrIHVwZGF0ZXMuICBTb21lIGRyaXZlcnMgZG8gbm90IGhhdmUgYW4gaW4tbWVtb3J5CisJICogc3RhdGlzdGljIGJsb2NrLCBhbmQgaW4gc3VjaCBjYXNlcyB0aGlzIHZhbHVlIGlzIGlnbm9yZWQuCisJICogVGhpcyB2YWx1ZSBtdXN0IG5vdCBiZSB6ZXJvLgorCSAqLworCV9fdTMyCXN0YXRzX2Jsb2NrX2NvYWxlc2NlX3VzZWNzOworCisJLyogQWRhcHRpdmUgUlgvVFggY29hbGVzY2luZyBpcyBhbiBhbGdvcml0aG0gaW1wbGVtZW50ZWQgYnkKKwkgKiBzb21lIGRyaXZlcnMgdG8gaW1wcm92ZSBsYXRlbmN5IHVuZGVyIGxvdyBwYWNrZXQgcmF0ZXMgYW5kCisJICogaW1wcm92ZSB0aHJvdWdocHV0IHVuZGVyIGhpZ2ggcGFja2V0IHJhdGVzLiAgU29tZSBkcml2ZXJzCisJICogb25seSBpbXBsZW1lbnQgb25lIG9mIFJYIG9yIFRYIGFkYXB0aXZlIGNvYWxlc2NpbmcuICBBbnl0aGluZworCSAqIG5vdCBpbXBsZW1lbnRlZCBieSB0aGUgZHJpdmVyIGNhdXNlcyB0aGVzZSB2YWx1ZXMgdG8gYmUKKwkgKiBzaWxlbnRseSBpZ25vcmVkLgorCSAqLworCV9fdTMyCXVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZTsKKwlfX3UzMgl1c2VfYWRhcHRpdmVfdHhfY29hbGVzY2U7CisKKwkvKiBXaGVuIHRoZSBwYWNrZXQgcmF0ZSAobWVhc3VyZWQgaW4gcGFja2V0cyBwZXIgc2Vjb25kKQorCSAqIGlzIGJlbG93IHBrdF9yYXRlX2xvdywgdGhlIHtyeCx0eH1fKl9sb3cgcGFyYW1ldGVycyBhcmUKKwkgKiB1c2VkLgorCSAqLworCV9fdTMyCXBrdF9yYXRlX2xvdzsKKwlfX3UzMglyeF9jb2FsZXNjZV91c2Vjc19sb3c7CisJX191MzIJcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93OworCV9fdTMyCXR4X2NvYWxlc2NlX3VzZWNzX2xvdzsKKwlfX3UzMgl0eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3c7CisKKwkvKiBXaGVuIHRoZSBwYWNrZXQgcmF0ZSBpcyBiZWxvdyBwa3RfcmF0ZV9oaWdoIGJ1dCBhYm92ZQorCSAqIHBrdF9yYXRlX2xvdyAoYm90aCBtZWFzdXJlZCBpbiBwYWNrZXRzIHBlciBzZWNvbmQpIHRoZQorCSAqIG5vcm1hbCB7cngsdHh9XyogY29hbGVzY2luZyBwYXJhbWV0ZXJzIGFyZSB1c2VkLgorCSAqLworCisJLyogV2hlbiB0aGUgcGFja2V0IHJhdGUgaXMgKG1lYXN1cmVkIGluIHBhY2tldHMgcGVyIHNlY29uZCkKKwkgKiBpcyBhYm92ZSBwa3RfcmF0ZV9oaWdoLCB0aGUge3J4LHR4fV8qX2hpZ2ggcGFyYW1ldGVycyBhcmUKKwkgKiB1c2VkLgorCSAqLworCV9fdTMyCXBrdF9yYXRlX2hpZ2g7CisJX191MzIJcnhfY29hbGVzY2VfdXNlY3NfaGlnaDsKKwlfX3UzMglyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19oaWdoOworCV9fdTMyCXR4X2NvYWxlc2NlX3VzZWNzX2hpZ2g7CisJX191MzIJdHhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaDsKKworCS8qIEhvdyBvZnRlbiB0byBkbyBhZGFwdGl2ZSBjb2FsZXNjaW5nIHBhY2tldCByYXRlIHNhbXBsaW5nLAorCSAqIG1lYXN1cmVkIGluIHNlY29uZHMuICBNdXN0IG5vdCBiZSB6ZXJvLgorCSAqLworCV9fdTMyCXJhdGVfc2FtcGxlX2ludGVydmFsOworfTsKKworLyogZm9yIGNvbmZpZ3VyaW5nIFJYL1RYIHJpbmcgcGFyYW1ldGVycyAqLworc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtIHsKKwlfX3UzMgljbWQ7CS8qIEVUSFRPT0xfe0csU31SSU5HUEFSQU0gKi8KKworCS8qIFJlYWQgb25seSBhdHRyaWJ1dGVzLiAgVGhlc2UgaW5kaWNhdGUgdGhlIG1heGltdW0gbnVtYmVyCisJICogb2YgcGVuZGluZyBSWC9UWCByaW5nIGVudHJpZXMgdGhlIGRyaXZlciB3aWxsIGFsbG93IHRoZQorCSAqIHVzZXIgdG8gc2V0LgorCSAqLworCV9fdTMyCXJ4X21heF9wZW5kaW5nOworCV9fdTMyCXJ4X21pbmlfbWF4X3BlbmRpbmc7CisJX191MzIJcnhfanVtYm9fbWF4X3BlbmRpbmc7CisJX191MzIJdHhfbWF4X3BlbmRpbmc7CisKKwkvKiBWYWx1ZXMgY2hhbmdlYWJsZSBieSB0aGUgdXNlci4gIFRoZSB2YWxpZCB2YWx1ZXMgYXJlCisJICogaW4gdGhlIHJhbmdlIDEgdG8gdGhlICIqX21heF9wZW5kaW5nIiBjb3VudGVycGFydCBhYm92ZS4KKwkgKi8KKwlfX3UzMglyeF9wZW5kaW5nOworCV9fdTMyCXJ4X21pbmlfcGVuZGluZzsKKwlfX3UzMglyeF9qdW1ib19wZW5kaW5nOworCV9fdTMyCXR4X3BlbmRpbmc7Cit9OworCisvKiBmb3IgY29uZmlndXJpbmcgbGluayBmbG93IGNvbnRyb2wgcGFyYW1ldGVycyAqLworc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSB7CisJX191MzIJY21kOwkvKiBFVEhUT09MX3tHLFN9UEFVU0VQQVJBTSAqLworCisJLyogSWYgdGhlIGxpbmsgaXMgYmVpbmcgYXV0by1uZWdvdGlhdGVkICh2aWEgZXRodG9vbF9jbWQuYXV0b25lZworCSAqIGJlaW5nIHRydWUpIHRoZSB1c2VyIG1heSBzZXQgJ2F1dG9uZXQnIGhlcmUgbm9uLXplcm8gdG8gaGF2ZSB0aGUKKwkgKiBwYXVzZSBwYXJhbWV0ZXJzIGJlIGF1dG8tbmVnb3RpYXRlZCB0b28uICBJbiBzdWNoIGEgY2FzZSwgdGhlCisJICoge3J4LHR4fV9wYXVzZSB2YWx1ZXMgYmVsb3cgZGV0ZXJtaW5lIHdoYXQgY2FwYWJpbGl0aWVzIGFyZQorCSAqIGFkdmVydGlzZWQuCisJICoKKwkgKiBJZiAnYXV0b25lZycgaXMgemVybyBvciB0aGUgbGluayBpcyBub3QgYmVpbmcgYXV0by1uZWdvdGlhdGVkLAorCSAqIHRoZW4ge3J4LHR4fV9wYXVzZSBmb3JjZSB0aGUgZHJpdmVyIHRvIHVzZS9ub3QtdXNlIHBhdXNlCisJICogZmxvdyBjb250cm9sLgorCSAqLworCV9fdTMyCWF1dG9uZWc7CisJX191MzIJcnhfcGF1c2U7CisJX191MzIJdHhfcGF1c2U7Cit9OworCisjZGVmaW5lIEVUSF9HU1RSSU5HX0xFTgkJMzIKK2VudW0gZXRodG9vbF9zdHJpbmdzZXQgeworCUVUSF9TU19URVNUCQk9IDAsCisJRVRIX1NTX1NUQVRTLAorCUVUSF9TU19QUklWX0ZMQUdTLAorCUVUSF9TU19OVFVQTEVfRklMVEVSUywKK307CisKKy8qIGZvciBwYXNzaW5nIHN0cmluZyBzZXRzIGZvciBkYXRhIHRhZ2dpbmcgKi8KK3N0cnVjdCBldGh0b29sX2dzdHJpbmdzIHsKKwlfX3UzMgljbWQ7CQkvKiBFVEhUT09MX0dTVFJJTkdTICovCisJX191MzIJc3RyaW5nX3NldDsJLyogc3RyaW5nIHNldCBpZCBlLmMuIEVUSF9TU19URVNULCBldGMqLworCV9fdTMyCWxlbjsJCS8qIG51bWJlciBvZiBzdHJpbmdzIGluIHRoZSBzdHJpbmcgc2V0ICovCisJX191OAlkYXRhWzBdOworfTsKKworc3RydWN0IGV0aHRvb2xfc3NldF9pbmZvIHsKKwlfX3UzMgljbWQ7CQkvKiBFVEhUT09MX0dTU0VUX0lORk8gKi8KKwlfX3UzMglyZXNlcnZlZDsKKwlfX3U2NAlzc2V0X21hc2s7CS8qIGlucHV0OiBlYWNoIGJpdCBzZWxlY3RzIGFuIHNzZXQgdG8gcXVlcnkgKi8KKwkJCQkvKiBvdXRwdXQ6IGVhY2ggYml0IGEgcmV0dXJuZWQgc3NldCAqLworCV9fdTMyCWRhdGFbMF07CS8qIEVUSF9TU194eHggY291bnQsIGluIG9yZGVyLCBiYXNlZCBvbiBiaXRzCisJCQkJICAgaW4gc3NldF9tYXNrLiAgT25lIGJpdCBpbXBsaWVzIG9uZQorCQkJCSAgIF9fdTMyLCB0d28gYml0cyBpbXBsaWVzIHR3bworCQkJCSAgIF9fdTMyJ3MsIGV0Yy4gKi8KK307CisKK2VudW0gZXRodG9vbF90ZXN0X2ZsYWdzIHsKKwlFVEhfVEVTVF9GTF9PRkZMSU5FCT0gKDEgPDwgMCksCS8qIG9ubGluZSAvIG9mZmxpbmUgKi8KKwlFVEhfVEVTVF9GTF9GQUlMRUQJPSAoMSA8PCAxKSwJLyogdGVzdCBwYXNzZWQgLyBmYWlsZWQgKi8KK307CisKKy8qIGZvciByZXF1ZXN0aW5nIE5JQyB0ZXN0IGFuZCBnZXR0aW5nIHJlc3VsdHMqLworc3RydWN0IGV0aHRvb2xfdGVzdCB7CisJX191MzIJY21kOwkJLyogRVRIVE9PTF9URVNUICovCisJX191MzIJZmxhZ3M7CQkvKiBFVEhfVEVTVF9GTF94eHggKi8KKwlfX3UzMglyZXNlcnZlZDsKKwlfX3UzMglsZW47CQkvKiByZXN1bHQgbGVuZ3RoLCBpbiBudW1iZXIgb2YgdTY0IGVsZW1lbnRzICovCisJX191NjQJZGF0YVswXTsKK307CisKKy8qIGZvciBkdW1waW5nIE5JQy1zcGVjaWZpYyBzdGF0aXN0aWNzICovCitzdHJ1Y3QgZXRodG9vbF9zdGF0cyB7CisJX191MzIJY21kOwkJLyogRVRIVE9PTF9HU1RBVFMgKi8KKwlfX3UzMgluX3N0YXRzOwkvKiBudW1iZXIgb2YgdTY0J3MgYmVpbmcgcmV0dXJuZWQgKi8KKwlfX3U2NAlkYXRhWzBdOworfTsKKworc3RydWN0IGV0aHRvb2xfcGVybV9hZGRyIHsKKwlfX3UzMgljbWQ7CQkvKiBFVEhUT09MX0dQRVJNQUREUiAqLworCV9fdTMyCXNpemU7CisJX191OAlkYXRhWzBdOworfTsKKworLyogYm9vbGVhbiBmbGFncyBjb250cm9sbGluZyBwZXItaW50ZXJmYWNlIGJlaGF2aW9yIGNoYXJhY3RlcmlzdGljcy4KKyAqIFdoZW4gcmVhZGluZywgdGhlIGZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IGEgY2VydGFpbiBiZWhhdmlvcgorICogaXMgZW5hYmxlZC9wcmVzZW50LiAgV2hlbiB3cml0aW5nLCB0aGUgZmxhZyBpbmRpY2F0ZXMgd2hldGhlcgorICogb3Igbm90IHRoZSBkcml2ZXIgc2hvdWxkIHR1cm4gb24gKHNldCkgb3Igb2ZmIChjbGVhcikgYSBiZWhhdmlvci4KKyAqCisgKiBTb21lIGJlaGF2aW9ycyBtYXkgcmVhZC1vbmx5ICh1bmNvbmRpdGlvbmFsbHkgYWJzZW50IG9yIHByZXNlbnQpLgorICogSWYgc3VjaCBpcyB0aGUgY2FzZSwgcmV0dXJuIEVJTlZBTCBpbiB0aGUgc2V0LWZsYWdzIG9wZXJhdGlvbiBpZiB0aGUKKyAqIGZsYWcgZGlmZmVycyBmcm9tIHRoZSByZWFkLW9ubHkgdmFsdWUuCisgKi8KK2VudW0gZXRodG9vbF9mbGFncyB7CisJRVRIX0ZMQUdfVFhWTEFOCQk9ICgxIDw8IDcpLAkvKiBUWCBWTEFOIG9mZmxvYWQgZW5hYmxlZCAqLworCUVUSF9GTEFHX1JYVkxBTgkJPSAoMSA8PCA4KSwJLyogUlggVkxBTiBvZmZsb2FkIGVuYWJsZWQgKi8KKwlFVEhfRkxBR19MUk8JCT0gKDEgPDwgMTUpLAkvKiBMUk8gaXMgZW5hYmxlZCAqLworCUVUSF9GTEFHX05UVVBMRQkJPSAoMSA8PCAyNyksCS8qIE4tdHVwbGUgZmlsdGVycyBlbmFibGVkICovCisJRVRIX0ZMQUdfUlhIQVNICQk9ICgxIDw8IDI4KSwKK307CisKKy8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlcyBhcmUgZm9yIHN1cHBvcnRpbmcgUlggbmV0d29yayBmbG93CisgKiBjbGFzc2lmaWNhdGlvbiBhbmQgUlggbi10dXBsZSBjb25maWd1cmF0aW9uLiBOb3RlLCBhbGwgbXVsdGlieXRlCisgKiBmaWVsZHMsIGUuZy4sIGlwNHNyYywgaXA0ZHN0LCBwc3JjLCBwZHN0LCBzcGksIGV0Yy4gYXJlIGV4cGVjdGVkIHRvCisgKiBiZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCisgKi8KKworLyoqCisgKiBzdHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYyAtIGZsb3cgc3BlY2lmaWNhdGlvbiBmb3IgVENQL0lQdjQgZXRjLgorICogQGlwNHNyYzogU291cmNlIGhvc3QKKyAqIEBpcDRkc3Q6IERlc3RpbmF0aW9uIGhvc3QKKyAqIEBwc3JjOiBTb3VyY2UgcG9ydAorICogQHBkc3Q6IERlc3RpbmF0aW9uIHBvcnQKKyAqIEB0b3M6IFR5cGUtb2Ytc2VydmljZQorICoKKyAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIFRDUC9JUHY0LCBVRFAvSVB2NCBvciBTQ1RQL0lQdjQgZmxvdy4KKyAqLworc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMgeworCV9fYmUzMglpcDRzcmM7CisJX19iZTMyCWlwNGRzdDsKKwlfX2JlMTYJcHNyYzsKKwlfX2JlMTYJcGRzdDsKKwlfX3U4ICAgIHRvczsKK307CisKKy8qKgorICogc3RydWN0IGV0aHRvb2xfYWhfZXNwaXA0X3NwZWMgLSBmbG93IHNwZWNpZmljYXRpb24gZm9yIElQc2VjL0lQdjQKKyAqIEBpcDRzcmM6IFNvdXJjZSBob3N0CisgKiBAaXA0ZHN0OiBEZXN0aW5hdGlvbiBob3N0CisgKiBAc3BpOiBTZWN1cml0eSBwYXJhbWV0ZXJzIGluZGV4CisgKiBAdG9zOiBUeXBlLW9mLXNlcnZpY2UKKyAqCisgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYW4gSVBzZWMgdHJhbnNwb3J0IG9yIHR1bm5lbCBvdmVyIElQdjQuCisgKi8KK3N0cnVjdCBldGh0b29sX2FoX2VzcGlwNF9zcGVjIHsKKwlfX2JlMzIJaXA0c3JjOworCV9fYmUzMglpcDRkc3Q7CisJX19iZTMyCXNwaTsKKwlfX3U4ICAgIHRvczsKK307CisKKyNkZWZpbmUJRVRIX1JYX05GQ19JUDQJMQorCisvKioKKyAqIHN0cnVjdCBldGh0b29sX3VzcmlwNF9zcGVjIC0gZ2VuZXJhbCBmbG93IHNwZWNpZmljYXRpb24gZm9yIElQdjQKKyAqIEBpcDRzcmM6IFNvdXJjZSBob3N0CisgKiBAaXA0ZHN0OiBEZXN0aW5hdGlvbiBob3N0CisgKiBAbDRfNF9ieXRlczogRmlyc3QgNCBieXRlcyBvZiB0cmFuc3BvcnQgKGxheWVyIDQpIGhlYWRlcgorICogQHRvczogVHlwZS1vZi1zZXJ2aWNlCisgKiBAaXBfdmVyOiBWYWx1ZSBtdXN0IGJlICVFVEhfUlhfTkZDX0lQNDsgbWFzayBtdXN0IGJlIDAKKyAqIEBwcm90bzogVHJhbnNwb3J0IHByb3RvY29sIG51bWJlcjsgbWFzayBtdXN0IGJlIDAKKyAqLworc3RydWN0IGV0aHRvb2xfdXNyaXA0X3NwZWMgeworCV9fYmUzMglpcDRzcmM7CisJX19iZTMyCWlwNGRzdDsKKwlfX2JlMzIJbDRfNF9ieXRlczsKKwlfX3U4ICAgIHRvczsKKwlfX3U4ICAgIGlwX3ZlcjsKKwlfX3U4ICAgIHByb3RvOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZXRodG9vbF9yeF9mbG93X3NwZWMgLSBzcGVjaWZpY2F0aW9uIGZvciBSWCBmbG93IGZpbHRlcgorICogQGZsb3dfdHlwZTogVHlwZSBvZiBtYXRjaCB0byBwZXJmb3JtLCBlLmcuICVUQ1BfVjRfRkxPVworICogQGhfdTogRmxvdyBmaWVsZHMgdG8gbWF0Y2ggKGRlcGVuZGVudCBvbiBAZmxvd190eXBlKQorICogQG1fdTogTWFza3MgZm9yIGZsb3cgZmllbGQgYml0cyB0byBiZSBpZ25vcmVkCisgKiBAcmluZ19jb29raWU6IFJYIHJpbmcvcXVldWUgaW5kZXggdG8gZGVsaXZlciB0bywgb3IgJVJYX0NMU19GTE9XX0RJU0MKKyAqCWlmIHBhY2tldHMgc2hvdWxkIGJlIGRpc2NhcmRlZAorICogQGxvY2F0aW9uOiBJbmRleCBvZiBmaWx0ZXIgaW4gaGFyZHdhcmUgdGFibGUKKyAqLworc3RydWN0IGV0aHRvb2xfcnhfZmxvd19zcGVjIHsKKwlfX3UzMgkJZmxvd190eXBlOworCXVuaW9uIHsKKwkJc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMJCXRjcF9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMJCXVkcF9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMJCXNjdHBfaXA0X3NwZWM7CisJCXN0cnVjdCBldGh0b29sX2FoX2VzcGlwNF9zcGVjCQlhaF9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfYWhfZXNwaXA0X3NwZWMJCWVzcF9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfdXNyaXA0X3NwZWMJCXVzcl9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aGhkcgkJCQlldGhlcl9zcGVjOworCQlfX3U4CQkJCQloZGF0YVs3Ml07CisJfSBoX3UsIG1fdTsKKwlfX3U2NAkJcmluZ19jb29raWU7CisJX191MzIJCWxvY2F0aW9uOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAtIGNvbW1hbmQgdG8gZ2V0IG9yIHNldCBSWCBmbG93IGNsYXNzaWZpY2F0aW9uIHJ1bGVzCisgKiBAY21kOiBTcGVjaWZpYyBjb21tYW5kIG51bWJlciAtICVFVEhUT09MX0dSWEZILCAlRVRIVE9PTF9TUlhGSCwKKyAqCSVFVEhUT09MX0dSWFJJTkdTLCAlRVRIVE9PTF9HUlhDTFNSTENOVCwgJUVUSFRPT0xfR1JYQ0xTUlVMRSwKKyAqCSVFVEhUT09MX0dSWENMU1JMQUxMLCAlRVRIVE9PTF9TUlhDTFNSTERFTCBvciAlRVRIVE9PTF9TUlhDTFNSTElOUworICogQGZsb3dfdHlwZTogVHlwZSBvZiBmbG93IHRvIGJlIGFmZmVjdGVkLCBlLmcuICVUQ1BfVjRfRkxPVworICogQGRhdGE6IENvbW1hbmQtZGVwZW5kZW50IHZhbHVlCisgKiBAZnM6IEZsb3cgZmlsdGVyIHNwZWNpZmljYXRpb24KKyAqIEBydWxlX2NudDogTnVtYmVyIG9mIHJ1bGVzIHRvIGJlIGFmZmVjdGVkCisgKiBAcnVsZV9sb2NzOiBBcnJheSBvZiB2YWxpZCBydWxlIGluZGljZXMKKyAqCisgKiBGb3IgJUVUSFRPT0xfR1JYRkggYW5kICVFVEhUT09MX1NSWEZILCBAZGF0YSBpcyBhIGJpdG1hc2sgaW5kaWNhdGluZworICogdGhlIGZpZWxkcyBpbmNsdWRlZCBpbiB0aGUgZmxvdyBoYXNoLCBlLmcuICVSWEhfSVBfU1JDLiAgVGhlIGZvbGxvd2luZworICogc3RydWN0dXJlIGZpZWxkcyBtdXN0IG5vdCBiZSB1c2VkLgorICoKKyAqIEZvciAlRVRIVE9PTF9HUlhSSU5HUywgQGRhdGEgaXMgc2V0IHRvIHRoZSBudW1iZXIgb2YgUlggcmluZ3MvcXVldWVzCisgKiBvbiByZXR1cm4uCisgKgorICogRm9yICVFVEhUT09MX0dSWENMU1JMQ05ULCBAcnVsZV9jbnQgaXMgc2V0IHRvIHRoZSBudW1iZXIgb2YgZGVmaW5lZAorICogcnVsZXMgb24gcmV0dXJuLgorICoKKyAqIEZvciAlRVRIVE9PTF9HUlhDTFNSVUxFLCBAZnMuQGxvY2F0aW9uIHNwZWNpZmllcyB0aGUgaW5kZXggb2YgYW4KKyAqIGV4aXN0aW5nIGZpbHRlciBydWxlIG9uIGVudHJ5IGFuZCBAZnMgY29udGFpbnMgdGhlIHJ1bGUgb24gcmV0dXJuLgorICoKKyAqIEZvciAlRVRIVE9PTF9HUlhDTFNSTEFMTCwgQHJ1bGVfY250IHNwZWNpZmllcyB0aGUgYXJyYXkgc2l6ZSBvZiB0aGUKKyAqIHVzZXIgYnVmZmVyIGZvciBAcnVsZV9sb2NzIG9uIGVudHJ5LiAgT24gcmV0dXJuLCBAZGF0YSBpcyB0aGUgc2l6ZQorICogb2YgdGhlIGZpbHRlciB0YWJsZSBhbmQgQHJ1bGVfbG9jcyBjb250YWlucyB0aGUgaW5kaWNlcyBvZiB0aGUKKyAqIGRlZmluZWQgcnVsZXMuCisgKgorICogRm9yICVFVEhUT09MX1NSWENMU1JMSU5TLCBAZnMgc3BlY2lmaWVzIHRoZSBmaWx0ZXIgcnVsZSB0byBhZGQgb3IKKyAqIHVwZGF0ZS4gIEBmcy5AbG9jYXRpb24gc3BlY2lmaWVzIHRoZSBpbmRleCB0byB1c2UgYW5kIG11c3Qgbm90IGJlCisgKiBpZ25vcmVkLgorICoKKyAqIEZvciAlRVRIVE9PTF9TUlhDTFNSTERFTCwgQGZzLkBsb2NhdGlvbiBzcGVjaWZpZXMgdGhlIGluZGV4IG9mIGFuCisgKiBleGlzdGluZyBmaWx0ZXIgcnVsZSBvbiBlbnRyeS4KKyAqCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBpbmRleGVkIGNsYXNzaWZpY2F0aW9uIHJ1bGVzIGdlbmVyYWxseSByZXF1aXJlcyBhCisgKiBUQ0FNLgorICovCitzdHJ1Y3QgZXRodG9vbF9yeG5mYyB7CisJX191MzIJCQkJY21kOworCV9fdTMyCQkJCWZsb3dfdHlwZTsKKwlfX3U2NAkJCQlkYXRhOworCXN0cnVjdCBldGh0b29sX3J4X2Zsb3dfc3BlYwlmczsKKwlfX3UzMgkJCQlydWxlX2NudDsKKwlfX3UzMgkJCQlydWxlX2xvY3NbMF07Cit9OworCisKKy8qKgorICogc3RydWN0IGV0aHRvb2xfcnhmaF9pbmRpciAtIGNvbW1hbmQgdG8gZ2V0IG9yIHNldCBSWCBmbG93IGhhc2ggaW5kaXJlY3Rpb24KKyAqIEBjbWQ6IFNwZWNpZmljIGNvbW1hbmQgbnVtYmVyIC0gJUVUSFRPT0xfR1JYRkhJTkRJUiBvciAlRVRIVE9PTF9TUlhGSElORElSCisgKiBAc2l6ZTogT24gZW50cnksIHRoZSBhcnJheSBzaXplIG9mIHRoZSB1c2VyIGJ1ZmZlci4gIE9uIHJldHVybiBmcm9tCisgKgklRVRIVE9PTF9HUlhGSElORElSLCB0aGUgYXJyYXkgc2l6ZSBvZiB0aGUgaGFyZHdhcmUgaW5kaXJlY3Rpb24gdGFibGUuCisgKiBAcmluZ19pbmRleDogUlggcmluZy9xdWV1ZSBpbmRleCBmb3IgZWFjaCBoYXNoIHZhbHVlCisgKi8KK3N0cnVjdCBldGh0b29sX3J4ZmhfaW5kaXIgeworCV9fdTMyCWNtZDsKKwlfX3UzMglzaXplOworCV9fdTMyCXJpbmdfaW5kZXhbMF07Cit9OworCisvKioKKyAqIHN0cnVjdCBldGh0b29sX3J4X250dXBsZV9mbG93X3NwZWMgLSBzcGVjaWZpY2F0aW9uIGZvciBSWCBmbG93IGZpbHRlcgorICogQGZsb3dfdHlwZTogVHlwZSBvZiBtYXRjaCB0byBwZXJmb3JtLCBlLmcuICVUQ1BfVjRfRkxPVworICogQGhfdTogRmxvdyBmaWVsZCB2YWx1ZXMgdG8gbWF0Y2ggKGRlcGVuZGVudCBvbiBAZmxvd190eXBlKQorICogQG1fdTogTWFza3MgZm9yIGZsb3cgZmllbGQgdmFsdWUgYml0cyB0byBiZSBpZ25vcmVkCisgKiBAdmxhbl90YWc6IFZMQU4gdGFnIHRvIG1hdGNoCisgKiBAdmxhbl90YWdfbWFzazogTWFzayBmb3IgVkxBTiB0YWcgYml0cyB0byBiZSBpZ25vcmVkCisgKiBAZGF0YTogRHJpdmVyLWRlcGVuZGVudCBkYXRhIHRvIG1hdGNoCisgKiBAZGF0YV9tYXNrOiBNYXNrIGZvciBkcml2ZXItZGVwZW5kZW50IGRhdGEgYml0cyB0byBiZSBpZ25vcmVkCisgKiBAYWN0aW9uOiBSWCByaW5nL3F1ZXVlIGluZGV4IHRvIGRlbGl2ZXIgdG8gKG5vbi1uZWdhdGl2ZSkgb3Igb3RoZXIgYWN0aW9uCisgKgkobmVnYXRpdmUsIGUuZy4gJUVUSFRPT0xfUlhOVFVQTEVfQUNUSU9OX0RST1ApCisgKgorICogRm9yIGZsb3cgdHlwZXMgJVRDUF9WNF9GTE9XLCAlVURQX1Y0X0ZMT1cgYW5kICVTQ1RQX1Y0X0ZMT1csIHdoZXJlCisgKiBhIGZpZWxkIHZhbHVlIGFuZCBtYXNrIGFyZSBib3RoIHplcm8gdGhpcyBpcyB0cmVhdGVkIGFzIGlmIGFsbCBtYXNrCisgKiBiaXRzIGFyZSBzZXQgaS5lLiB0aGUgZmllbGQgaXMgaWdub3JlZC4KKyAqLworc3RydWN0IGV0aHRvb2xfcnhfbnR1cGxlX2Zsb3dfc3BlYyB7CisJX191MzIJCSBmbG93X3R5cGU7CisJdW5pb24geworCQlzdHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYwkJdGNwX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYwkJdWRwX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYwkJc2N0cF9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfYWhfZXNwaXA0X3NwZWMJCWFoX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF9haF9lc3BpcDRfc3BlYwkJZXNwX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF91c3JpcDRfc3BlYwkJdXNyX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRoaGRyCQkJCWV0aGVyX3NwZWM7CisJCV9fdTgJCQkJCWhkYXRhWzcyXTsKKwl9IGhfdSwgbV91OworCisJX191MTYJICAgICAgICB2bGFuX3RhZzsKKwlfX3UxNgkgICAgICAgIHZsYW5fdGFnX21hc2s7CisJX191NjQJCWRhdGE7CisJX191NjQJCWRhdGFfbWFzazsKKworCV9fczMyCQlhY3Rpb247CisjZGVmaW5lIEVUSFRPT0xfUlhOVFVQTEVfQUNUSU9OX0RST1AJKC0xKQkvKiBkcm9wIHBhY2tldCAqLworI2RlZmluZSBFVEhUT09MX1JYTlRVUExFX0FDVElPTl9DTEVBUgkoLTIpCS8qIGNsZWFyIGZpbHRlciAqLworfTsKKworLyoqCisgKiBzdHJ1Y3QgZXRodG9vbF9yeF9udHVwbGUgLSBjb21tYW5kIHRvIHNldCBvciBjbGVhciBSWCBmbG93IGZpbHRlcgorICogQGNtZDogQ29tbWFuZCBudW1iZXIgLSAlRVRIVE9PTF9TUlhOVFVQTEUKKyAqIEBmczogRmxvdyBmaWx0ZXIgc3BlY2lmaWNhdGlvbgorICovCitzdHJ1Y3QgZXRodG9vbF9yeF9udHVwbGUgeworCV9fdTMyCQkJCQljbWQ7CisJc3RydWN0IGV0aHRvb2xfcnhfbnR1cGxlX2Zsb3dfc3BlYwlmczsKK307CisKKyNkZWZpbmUgRVRIVE9PTF9GTEFTSF9NQVhfRklMRU5BTUUJMTI4CitlbnVtIGV0aHRvb2xfZmxhc2hfb3BfdHlwZSB7CisJRVRIVE9PTF9GTEFTSF9BTExfUkVHSU9OUwk9IDAsCit9OworCisvKiBmb3IgcGFzc2luZyBmaXJtd2FyZSBmbGFzaGluZyByZWxhdGVkIHBhcmFtZXRlcnMgKi8KK3N0cnVjdCBldGh0b29sX2ZsYXNoIHsKKwlfX3UzMgljbWQ7CisJX191MzIJcmVnaW9uOworCWNoYXIJZGF0YVtFVEhUT09MX0ZMQVNIX01BWF9GSUxFTkFNRV07Cit9OworCisKKy8qIENNRHMgY3VycmVudGx5IHN1cHBvcnRlZCAqLworI2RlZmluZSBFVEhUT09MX0dTRVQJCTB4MDAwMDAwMDEgLyogR2V0IHNldHRpbmdzLiAqLworI2RlZmluZSBFVEhUT09MX1NTRVQJCTB4MDAwMDAwMDIgLyogU2V0IHNldHRpbmdzLiAqLworI2RlZmluZSBFVEhUT09MX0dEUlZJTkZPCTB4MDAwMDAwMDMgLyogR2V0IGRyaXZlciBpbmZvLiAqLworI2RlZmluZSBFVEhUT09MX0dSRUdTCQkweDAwMDAwMDA0IC8qIEdldCBOSUMgcmVnaXN0ZXJzLiAqLworI2RlZmluZSBFVEhUT09MX0dXT0wJCTB4MDAwMDAwMDUgLyogR2V0IHdha2Utb24tbGFuIG9wdGlvbnMuICovCisjZGVmaW5lIEVUSFRPT0xfU1dPTAkJMHgwMDAwMDAwNiAvKiBTZXQgd2FrZS1vbi1sYW4gb3B0aW9ucy4gKi8KKyNkZWZpbmUgRVRIVE9PTF9HTVNHTFZMCQkweDAwMDAwMDA3IC8qIEdldCBkcml2ZXIgbWVzc2FnZSBsZXZlbCAqLworI2RlZmluZSBFVEhUT09MX1NNU0dMVkwJCTB4MDAwMDAwMDggLyogU2V0IGRyaXZlciBtc2cgbGV2ZWwuICovCisjZGVmaW5lIEVUSFRPT0xfTldBWV9SU1QJMHgwMDAwMDAwOSAvKiBSZXN0YXJ0IGF1dG9uZWdvdGlhdGlvbi4gKi8KKyNkZWZpbmUgRVRIVE9PTF9HTElOSwkJMHgwMDAwMDAwYSAvKiBHZXQgbGluayBzdGF0dXMgKGV0aHRvb2xfdmFsdWUpICovCisjZGVmaW5lIEVUSFRPT0xfR0VFUFJPTQkJMHgwMDAwMDAwYiAvKiBHZXQgRUVQUk9NIGRhdGEgKi8KKyNkZWZpbmUgRVRIVE9PTF9TRUVQUk9NCQkweDAwMDAwMDBjIC8qIFNldCBFRVBST00gZGF0YS4gKi8KKyNkZWZpbmUgRVRIVE9PTF9HQ09BTEVTQ0UJMHgwMDAwMDAwZSAvKiBHZXQgY29hbGVzY2UgY29uZmlnICovCisjZGVmaW5lIEVUSFRPT0xfU0NPQUxFU0NFCTB4MDAwMDAwMGYgLyogU2V0IGNvYWxlc2NlIGNvbmZpZy4gKi8KKyNkZWZpbmUgRVRIVE9PTF9HUklOR1BBUkFNCTB4MDAwMDAwMTAgLyogR2V0IHJpbmcgcGFyYW1ldGVycyAqLworI2RlZmluZSBFVEhUT09MX1NSSU5HUEFSQU0JMHgwMDAwMDAxMSAvKiBTZXQgcmluZyBwYXJhbWV0ZXJzLiAqLworI2RlZmluZSBFVEhUT09MX0dQQVVTRVBBUkFNCTB4MDAwMDAwMTIgLyogR2V0IHBhdXNlIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgRVRIVE9PTF9TUEFVU0VQQVJBTQkweDAwMDAwMDEzIC8qIFNldCBwYXVzZSBwYXJhbWV0ZXJzLiAqLworI2RlZmluZSBFVEhUT09MX0dSWENTVU0JCTB4MDAwMDAwMTQgLyogR2V0IFJYIGh3IGNzdW0gZW5hYmxlIChldGh0b29sX3ZhbHVlKSAqLworI2RlZmluZSBFVEhUT09MX1NSWENTVU0JCTB4MDAwMDAwMTUgLyogU2V0IFJYIGh3IGNzdW0gZW5hYmxlIChldGh0b29sX3ZhbHVlKSAqLworI2RlZmluZSBFVEhUT09MX0dUWENTVU0JCTB4MDAwMDAwMTYgLyogR2V0IFRYIGh3IGNzdW0gZW5hYmxlIChldGh0b29sX3ZhbHVlKSAqLworI2RlZmluZSBFVEhUT09MX1NUWENTVU0JCTB4MDAwMDAwMTcgLyogU2V0IFRYIGh3IGNzdW0gZW5hYmxlIChldGh0b29sX3ZhbHVlKSAqLworI2RlZmluZSBFVEhUT09MX0dTRwkJMHgwMDAwMDAxOCAvKiBHZXQgc2NhdHRlci1nYXRoZXIgZW5hYmxlCisJCQkJCSAgICAqIChldGh0b29sX3ZhbHVlKSAqLworI2RlZmluZSBFVEhUT09MX1NTRwkJMHgwMDAwMDAxOSAvKiBTZXQgc2NhdHRlci1nYXRoZXIgZW5hYmxlCisJCQkJCSAgICAqIChldGh0b29sX3ZhbHVlKS4gKi8KKyNkZWZpbmUgRVRIVE9PTF9URVNUCQkweDAwMDAwMDFhIC8qIGV4ZWN1dGUgTklDIHNlbGYtdGVzdC4gKi8KKyNkZWZpbmUgRVRIVE9PTF9HU1RSSU5HUwkweDAwMDAwMDFiIC8qIGdldCBzcGVjaWZpZWQgc3RyaW5nIHNldCAqLworI2RlZmluZSBFVEhUT09MX1BIWVNfSUQJCTB4MDAwMDAwMWMgLyogaWRlbnRpZnkgdGhlIE5JQyAqLworI2RlZmluZSBFVEhUT09MX0dTVEFUUwkJMHgwMDAwMDAxZCAvKiBnZXQgTklDLXNwZWNpZmljIHN0YXRpc3RpY3MgKi8KKyNkZWZpbmUgRVRIVE9PTF9HVFNPCQkweDAwMDAwMDFlIC8qIEdldCBUU08gZW5hYmxlIChldGh0b29sX3ZhbHVlKSAqLworI2RlZmluZSBFVEhUT09MX1NUU08JCTB4MDAwMDAwMWYgLyogU2V0IFRTTyBlbmFibGUgKGV0aHRvb2xfdmFsdWUpICovCisjZGVmaW5lIEVUSFRPT0xfR1BFUk1BRERSCTB4MDAwMDAwMjAgLyogR2V0IHBlcm1hbmVudCBoYXJkd2FyZSBhZGRyZXNzICovCisjZGVmaW5lIEVUSFRPT0xfR1VGTwkJMHgwMDAwMDAyMSAvKiBHZXQgVUZPIGVuYWJsZSAoZXRodG9vbF92YWx1ZSkgKi8KKyNkZWZpbmUgRVRIVE9PTF9TVUZPCQkweDAwMDAwMDIyIC8qIFNldCBVRk8gZW5hYmxlIChldGh0b29sX3ZhbHVlKSAqLworI2RlZmluZSBFVEhUT09MX0dHU08JCTB4MDAwMDAwMjMgLyogR2V0IEdTTyBlbmFibGUgKGV0aHRvb2xfdmFsdWUpICovCisjZGVmaW5lIEVUSFRPT0xfU0dTTwkJMHgwMDAwMDAyNCAvKiBTZXQgR1NPIGVuYWJsZSAoZXRodG9vbF92YWx1ZSkgKi8KKyNkZWZpbmUgRVRIVE9PTF9HRkxBR1MJCTB4MDAwMDAwMjUgLyogR2V0IGZsYWdzIGJpdG1hcChldGh0b29sX3ZhbHVlKSAqLworI2RlZmluZSBFVEhUT09MX1NGTEFHUwkJMHgwMDAwMDAyNiAvKiBTZXQgZmxhZ3MgYml0bWFwKGV0aHRvb2xfdmFsdWUpICovCisjZGVmaW5lIEVUSFRPT0xfR1BGTEFHUwkJMHgwMDAwMDAyNyAvKiBHZXQgZHJpdmVyLXByaXZhdGUgZmxhZ3MgYml0bWFwICovCisjZGVmaW5lIEVUSFRPT0xfU1BGTEFHUwkJMHgwMDAwMDAyOCAvKiBTZXQgZHJpdmVyLXByaXZhdGUgZmxhZ3MgYml0bWFwICovCisKKyNkZWZpbmUgRVRIVE9PTF9HUlhGSAkJMHgwMDAwMDAyOSAvKiBHZXQgUlggZmxvdyBoYXNoIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgRVRIVE9PTF9TUlhGSAkJMHgwMDAwMDAyYSAvKiBTZXQgUlggZmxvdyBoYXNoIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgRVRIVE9PTF9HR1JPCQkweDAwMDAwMDJiIC8qIEdldCBHUk8gZW5hYmxlIChldGh0b29sX3ZhbHVlKSAqLworI2RlZmluZSBFVEhUT09MX1NHUk8JCTB4MDAwMDAwMmMgLyogU2V0IEdSTyBlbmFibGUgKGV0aHRvb2xfdmFsdWUpICovCisjZGVmaW5lIEVUSFRPT0xfR1JYUklOR1MJMHgwMDAwMDAyZCAvKiBHZXQgUlggcmluZ3MgYXZhaWxhYmxlIGZvciBMQiAqLworI2RlZmluZSBFVEhUT09MX0dSWENMU1JMQ05UCTB4MDAwMDAwMmUgLyogR2V0IFJYIGNsYXNzIHJ1bGUgY291bnQgKi8KKyNkZWZpbmUgRVRIVE9PTF9HUlhDTFNSVUxFCTB4MDAwMDAwMmYgLyogR2V0IFJYIGNsYXNzaWZpY2F0aW9uIHJ1bGUgKi8KKyNkZWZpbmUgRVRIVE9PTF9HUlhDTFNSTEFMTAkweDAwMDAwMDMwIC8qIEdldCBhbGwgUlggY2xhc3NpZmljYXRpb24gcnVsZSAqLworI2RlZmluZSBFVEhUT09MX1NSWENMU1JMREVMCTB4MDAwMDAwMzEgLyogRGVsZXRlIFJYIGNsYXNzaWZpY2F0aW9uIHJ1bGUgKi8KKyNkZWZpbmUgRVRIVE9PTF9TUlhDTFNSTElOUwkweDAwMDAwMDMyIC8qIEluc2VydCBSWCBjbGFzc2lmaWNhdGlvbiBydWxlICovCisjZGVmaW5lIEVUSFRPT0xfRkxBU0hERVYJMHgwMDAwMDAzMyAvKiBGbGFzaCBmaXJtd2FyZSB0byBkZXZpY2UgKi8KKyNkZWZpbmUgRVRIVE9PTF9SRVNFVAkJMHgwMDAwMDAzNCAvKiBSZXNldCBoYXJkd2FyZSAqLworI2RlZmluZSBFVEhUT09MX1NSWE5UVVBMRQkweDAwMDAwMDM1IC8qIEFkZCBhbiBuLXR1cGxlIGZpbHRlciB0byBkZXZpY2UgKi8KKyNkZWZpbmUgRVRIVE9PTF9HUlhOVFVQTEUJMHgwMDAwMDAzNiAvKiBHZXQgbi10dXBsZSBmaWx0ZXJzIGZyb20gZGV2aWNlICovCisjZGVmaW5lIEVUSFRPT0xfR1NTRVRfSU5GTwkweDAwMDAwMDM3IC8qIEdldCBzdHJpbmcgc2V0IGluZm8gKi8KKyNkZWZpbmUgRVRIVE9PTF9HUlhGSElORElSCTB4MDAwMDAwMzggLyogR2V0IFJYIGZsb3cgaGFzaCBpbmRpciduIHRhYmxlICovCisjZGVmaW5lIEVUSFRPT0xfU1JYRkhJTkRJUgkweDAwMDAwMDM5IC8qIFNldCBSWCBmbG93IGhhc2ggaW5kaXInbiB0YWJsZSAqLworCisvKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgY29kZSAqLworI2RlZmluZSBTUEFSQ19FVEhfR1NFVAkJRVRIVE9PTF9HU0VUCisjZGVmaW5lIFNQQVJDX0VUSF9TU0VUCQlFVEhUT09MX1NTRVQKKworLyogSW5kaWNhdGVzIHdoYXQgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgaW50ZXJmYWNlLiAqLworI2RlZmluZSBTVVBQT1JURURfMTBiYXNlVF9IYWxmCQkoMSA8PCAwKQorI2RlZmluZSBTVVBQT1JURURfMTBiYXNlVF9GdWxsCQkoMSA8PCAxKQorI2RlZmluZSBTVVBQT1JURURfMTAwYmFzZVRfSGFsZgkJKDEgPDwgMikKKyNkZWZpbmUgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwJCSgxIDw8IDMpCisjZGVmaW5lIFNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZgkoMSA8PCA0KQorI2RlZmluZSBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwJKDEgPDwgNSkKKyNkZWZpbmUgU1VQUE9SVEVEX0F1dG9uZWcJCSgxIDw8IDYpCisjZGVmaW5lIFNVUFBPUlRFRF9UUAkJCSgxIDw8IDcpCisjZGVmaW5lIFNVUFBPUlRFRF9BVUkJCQkoMSA8PCA4KQorI2RlZmluZSBTVVBQT1JURURfTUlJCQkJKDEgPDwgOSkKKyNkZWZpbmUgU1VQUE9SVEVEX0ZJQlJFCQkJKDEgPDwgMTApCisjZGVmaW5lIFNVUFBPUlRFRF9CTkMJCQkoMSA8PCAxMSkKKyNkZWZpbmUgU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbAkoMSA8PCAxMikKKyNkZWZpbmUgU1VQUE9SVEVEX1BhdXNlCQkJKDEgPDwgMTMpCisjZGVmaW5lIFNVUFBPUlRFRF9Bc3ltX1BhdXNlCQkoMSA8PCAxNCkKKyNkZWZpbmUgU1VQUE9SVEVEXzI1MDBiYXNlWF9GdWxsCSgxIDw8IDE1KQorI2RlZmluZSBTVVBQT1JURURfQmFja3BsYW5lCQkoMSA8PCAxNikKKyNkZWZpbmUgU1VQUE9SVEVEXzEwMDBiYXNlS1hfRnVsbAkoMSA8PCAxNykKKyNkZWZpbmUgU1VQUE9SVEVEXzEwMDAwYmFzZUtYNF9GdWxsCSgxIDw8IDE4KQorI2RlZmluZSBTVVBQT1JURURfMTAwMDBiYXNlS1JfRnVsbAkoMSA8PCAxOSkKKyNkZWZpbmUgU1VQUE9SVEVEXzEwMDAwYmFzZVJfRkVDCSgxIDw8IDIwKQorCisvKiBJbmRpY2F0ZXMgd2hhdCBmZWF0dXJlcyBhcmUgYWR2ZXJ0aXNlZCBieSB0aGUgaW50ZXJmYWNlLiAqLworI2RlZmluZSBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZgkJKDEgPDwgMCkKKyNkZWZpbmUgQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwJCSgxIDw8IDEpCisjZGVmaW5lIEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZgkoMSA8PCAyKQorI2RlZmluZSBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwJKDEgPDwgMykKKyNkZWZpbmUgQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZgkoMSA8PCA0KQorI2RlZmluZSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsCSgxIDw8IDUpCisjZGVmaW5lIEFEVkVSVElTRURfQXV0b25lZwkJKDEgPDwgNikKKyNkZWZpbmUgQURWRVJUSVNFRF9UUAkJCSgxIDw8IDcpCisjZGVmaW5lIEFEVkVSVElTRURfQVVJCQkJKDEgPDwgOCkKKyNkZWZpbmUgQURWRVJUSVNFRF9NSUkJCQkoMSA8PCA5KQorI2RlZmluZSBBRFZFUlRJU0VEX0ZJQlJFCQkoMSA8PCAxMCkKKyNkZWZpbmUgQURWRVJUSVNFRF9CTkMJCQkoMSA8PCAxMSkKKyNkZWZpbmUgQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGwJKDEgPDwgMTIpCisjZGVmaW5lIEFEVkVSVElTRURfUGF1c2UJCSgxIDw8IDEzKQorI2RlZmluZSBBRFZFUlRJU0VEX0FzeW1fUGF1c2UJCSgxIDw8IDE0KQorI2RlZmluZSBBRFZFUlRJU0VEXzI1MDBiYXNlWF9GdWxsCSgxIDw8IDE1KQorI2RlZmluZSBBRFZFUlRJU0VEX0JhY2twbGFuZQkJKDEgPDwgMTYpCisjZGVmaW5lIEFEVkVSVElTRURfMTAwMGJhc2VLWF9GdWxsCSgxIDw8IDE3KQorI2RlZmluZSBBRFZFUlRJU0VEXzEwMDAwYmFzZUtYNF9GdWxsCSgxIDw8IDE4KQorI2RlZmluZSBBRFZFUlRJU0VEXzEwMDAwYmFzZUtSX0Z1bGwJKDEgPDwgMTkpCisjZGVmaW5lIEFEVkVSVElTRURfMTAwMDBiYXNlUl9GRUMJKDEgPDwgMjApCisKKy8qIFRoZSBmb2xsb3dpbmcgYXJlIGFsbCBpbnZvbHZlZCBpbiBmb3JjaW5nIGEgcGFydGljdWxhciBsaW5rCisgKiBtb2RlIGZvciB0aGUgZGV2aWNlIGZvciBzZXR0aW5nIHRoaW5ncy4gIFdoZW4gZ2V0dGluZyB0aGUKKyAqIGRldmljZXMgc2V0dGluZ3MsIHRoZXNlIGluZGljYXRlIHRoZSBjdXJyZW50IG1vZGUgYW5kIHdoZXRoZXIKKyAqIGl0IHdhcyBmb2NlZCB1cCBpbnRvIHRoaXMgbW9kZSBvciBhdXRvbmVnb3RpYXRlZC4KKyAqLworCisvKiBUaGUgZm9yY2VkIHNwZWVkLCAxME1iLCAxMDBNYiwgZ2lnYWJpdCwgMi41R2IsIDEwR2JFLiAqLworI2RlZmluZSBTUEVFRF8xMAkJMTAKKyNkZWZpbmUgU1BFRURfMTAwCQkxMDAKKyNkZWZpbmUgU1BFRURfMTAwMAkJMTAwMAorI2RlZmluZSBTUEVFRF8yNTAwCQkyNTAwCisjZGVmaW5lIFNQRUVEXzEwMDAwCQkxMDAwMAorCisvKiBEdXBsZXgsIGhhbGYgb3IgZnVsbC4gKi8KKyNkZWZpbmUgRFVQTEVYX0hBTEYJCTB4MDAKKyNkZWZpbmUgRFVQTEVYX0ZVTEwJCTB4MDEKKworLyogV2hpY2ggY29ubmVjdG9yIHBvcnQuICovCisjZGVmaW5lIFBPUlRfVFAJCQkweDAwCisjZGVmaW5lIFBPUlRfQVVJCQkweDAxCisjZGVmaW5lIFBPUlRfTUlJCQkweDAyCisjZGVmaW5lIFBPUlRfRklCUkUJCTB4MDMKKyNkZWZpbmUgUE9SVF9CTkMJCTB4MDQKKyNkZWZpbmUgUE9SVF9EQQkJCTB4MDUKKyNkZWZpbmUgUE9SVF9OT05FCQkweGVmCisjZGVmaW5lIFBPUlRfT1RIRVIJCTB4ZmYKKworLyogV2hpY2ggdHJhbnNjZWl2ZXIgdG8gdXNlLiAqLworI2RlZmluZSBYQ1ZSX0lOVEVSTkFMCQkweDAwCisjZGVmaW5lIFhDVlJfRVhURVJOQUwJCTB4MDEKKyNkZWZpbmUgWENWUl9EVU1NWTEJCTB4MDIKKyNkZWZpbmUgWENWUl9EVU1NWTIJCTB4MDMKKyNkZWZpbmUgWENWUl9EVU1NWTMJCTB4MDQKKworLyogRW5hYmxlIG9yIGRpc2FibGUgYXV0b25lZ290aWF0aW9uLiAgSWYgdGhpcyBpcyBzZXQgdG8gZW5hYmxlLAorICogdGhlIGZvcmNlZCBsaW5rIG1vZGVzIGFib3ZlIGFyZSBjb21wbGV0ZWx5IGlnbm9yZWQuCisgKi8KKyNkZWZpbmUgQVVUT05FR19ESVNBQkxFCQkweDAwCisjZGVmaW5lIEFVVE9ORUdfRU5BQkxFCQkweDAxCisKKy8qIE1vZGUgTURJIG9yIE1ESS1YICovCisjZGVmaW5lIEVUSF9UUF9NRElfSU5WQUxJRAkweDAwCisjZGVmaW5lIEVUSF9UUF9NREkJCTB4MDEKKyNkZWZpbmUgRVRIX1RQX01ESV9YCQkweDAyCisKKy8qIFdha2UtT24tTGFuIG9wdGlvbnMuICovCisjZGVmaW5lIFdBS0VfUEhZCQkoMSA8PCAwKQorI2RlZmluZSBXQUtFX1VDQVNUCQkoMSA8PCAxKQorI2RlZmluZSBXQUtFX01DQVNUCQkoMSA8PCAyKQorI2RlZmluZSBXQUtFX0JDQVNUCQkoMSA8PCAzKQorI2RlZmluZSBXQUtFX0FSUAkJKDEgPDwgNCkKKyNkZWZpbmUgV0FLRV9NQUdJQwkJKDEgPDwgNSkKKyNkZWZpbmUgV0FLRV9NQUdJQ1NFQ1VSRQkoMSA8PCA2KSAvKiBvbmx5IG1lYW5pbmdmdWwgaWYgV0FLRV9NQUdJQyAqLworCisvKiBMMi1MNCBuZXR3b3JrIHRyYWZmaWMgZmxvdyB0eXBlcyAqLworI2RlZmluZQlUQ1BfVjRfRkxPVwkweDAxCS8qIGhhc2ggb3Igc3BlYyAodGNwX2lwNF9zcGVjKSAqLworI2RlZmluZQlVRFBfVjRfRkxPVwkweDAyCS8qIGhhc2ggb3Igc3BlYyAodWRwX2lwNF9zcGVjKSAqLworI2RlZmluZQlTQ1RQX1Y0X0ZMT1cJMHgwMwkvKiBoYXNoIG9yIHNwZWMgKHNjdHBfaXA0X3NwZWMpICovCisjZGVmaW5lCUFIX0VTUF9WNF9GTE9XCTB4MDQJLyogaGFzaCBvbmx5ICovCisjZGVmaW5lCVRDUF9WNl9GTE9XCTB4MDUJLyogaGFzaCBvbmx5ICovCisjZGVmaW5lCVVEUF9WNl9GTE9XCTB4MDYJLyogaGFzaCBvbmx5ICovCisjZGVmaW5lCVNDVFBfVjZfRkxPVwkweDA3CS8qIGhhc2ggb25seSAqLworI2RlZmluZQlBSF9FU1BfVjZfRkxPVwkweDA4CS8qIGhhc2ggb25seSAqLworI2RlZmluZQlBSF9WNF9GTE9XCTB4MDkJLyogaGFzaCBvciBzcGVjIChhaF9pcDRfc3BlYykgKi8KKyNkZWZpbmUJRVNQX1Y0X0ZMT1cJMHgwYQkvKiBoYXNoIG9yIHNwZWMgKGVzcF9pcDRfc3BlYykgKi8KKyNkZWZpbmUJQUhfVjZfRkxPVwkweDBiCS8qIGhhc2ggb25seSAqLworI2RlZmluZQlFU1BfVjZfRkxPVwkweDBjCS8qIGhhc2ggb25seSAqLworI2RlZmluZQlJUF9VU0VSX0ZMT1cJMHgwZAkvKiBzcGVjIG9ubHkgKHVzcl9pcDRfc3BlYykgKi8KKyNkZWZpbmUJSVBWNF9GTE9XCTB4MTAJLyogaGFzaCBvbmx5ICovCisjZGVmaW5lCUlQVjZfRkxPVwkweDExCS8qIGhhc2ggb25seSAqLworI2RlZmluZQlFVEhFUl9GTE9XCTB4MTIJLyogc3BlYyBvbmx5IChldGhlcl9zcGVjKSAqLworCisvKiBMMy1MNCBuZXR3b3JrIHRyYWZmaWMgZmxvdyBoYXNoIG9wdGlvbnMgKi8KKyNkZWZpbmUJUlhIX0wyREEJKDEgPDwgMSkKKyNkZWZpbmUJUlhIX1ZMQU4JKDEgPDwgMikKKyNkZWZpbmUJUlhIX0wzX1BST1RPCSgxIDw8IDMpCisjZGVmaW5lCVJYSF9JUF9TUkMJKDEgPDwgNCkKKyNkZWZpbmUJUlhIX0lQX0RTVAkoMSA8PCA1KQorI2RlZmluZQlSWEhfTDRfQl8wXzEJKDEgPDwgNikgLyogc3JjIHBvcnQgaW4gY2FzZSBvZiBUQ1AvVURQL1NDVFAgKi8KKyNkZWZpbmUJUlhIX0w0X0JfMl8zCSgxIDw8IDcpIC8qIGRzdCBwb3J0IGluIGNhc2Ugb2YgVENQL1VEUC9TQ1RQICovCisjZGVmaW5lCVJYSF9ESVNDQVJECSgxIDw8IDMxKQorCisjZGVmaW5lCVJYX0NMU19GTE9XX0RJU0MJMHhmZmZmZmZmZmZmZmZmZmZmVUxMCisKKy8qIFJlc2V0IGZsYWdzICovCisvKiBUaGUgcmVzZXQoKSBvcGVyYXRpb24gbXVzdCBjbGVhciB0aGUgZmxhZ3MgZm9yIHRoZSBjb21wb25lbnRzIHdoaWNoCisgKiB3ZXJlIGFjdHVhbGx5IHJlc2V0LiAgT24gc3VjY2Vzc2Z1bCByZXR1cm4sIHRoZSBmbGFncyBpbmRpY2F0ZSB0aGUKKyAqIGNvbXBvbmVudHMgd2hpY2ggd2VyZSBub3QgcmVzZXQsIGVpdGhlciBiZWNhdXNlIHRoZXkgZG8gbm90IGV4aXN0CisgKiBpbiB0aGUgaGFyZHdhcmUgb3IgYmVjYXVzZSB0aGV5IGNhbm5vdCBiZSByZXNldCBpbmRlcGVuZGVudGx5LiAgVGhlCisgKiBkcml2ZXIgbXVzdCBuZXZlciByZXNldCBhbnkgY29tcG9uZW50cyB0aGF0IHdlcmUgbm90IHJlcXVlc3RlZC4KKyAqLworZW51bSBldGh0b29sX3Jlc2V0X2ZsYWdzIHsKKwkvKiBUaGVzZSBmbGFncyByZXByZXNlbnQgY29tcG9uZW50cyBkZWRpY2F0ZWQgdG8gdGhlIGludGVyZmFjZQorCSAqIHRoZSBjb21tYW5kIGlzIGFkZHJlc3NlZCB0by4gIFNoaWZ0IGFueSBmbGFnIGxlZnQgYnkKKwkgKiBFVEhfUkVTRVRfU0hBUkVEX1NISUZUIHRvIHJlc2V0IGEgc2hhcmVkIGNvbXBvbmVudCBvZiB0aGUKKwkgKiBzYW1lIHR5cGUuCisJICovCisJRVRIX1JFU0VUX01HTVQJCT0gMSA8PCAwLAkvKiBNYW5hZ2VtZW50IHByb2Nlc3NvciAqLworCUVUSF9SRVNFVF9JUlEJCT0gMSA8PCAxLAkvKiBJbnRlcnJ1cHQgcmVxdWVzdGVyICovCisJRVRIX1JFU0VUX0RNQQkJPSAxIDw8IDIsCS8qIERNQSBlbmdpbmUgKi8KKwlFVEhfUkVTRVRfRklMVEVSCT0gMSA8PCAzLAkvKiBGaWx0ZXJpbmcvZmxvdyBkaXJlY3Rpb24gKi8KKwlFVEhfUkVTRVRfT0ZGTE9BRAk9IDEgPDwgNCwJLyogUHJvdG9jb2wgb2ZmbG9hZCAqLworCUVUSF9SRVNFVF9NQUMJCT0gMSA8PCA1LAkvKiBNZWRpYSBhY2Nlc3MgY29udHJvbGxlciAqLworCUVUSF9SRVNFVF9QSFkJCT0gMSA8PCA2LAkvKiBUcmFuc2NlaXZlci9QSFkgKi8KKwlFVEhfUkVTRVRfUkFNCQk9IDEgPDwgNywJLyogUkFNIHNoYXJlZCBiZXR3ZWVuCisJCQkJCQkgKiBtdWx0aXBsZSBjb21wb25lbnRzICovCisKKwlFVEhfUkVTRVRfREVESUNBVEVECT0gMHgwMDAwZmZmZiwJLyogQWxsIGNvbXBvbmVudHMgZGVkaWNhdGVkIHRvCisJCQkJCQkgKiB0aGlzIGludGVyZmFjZSAqLworCUVUSF9SRVNFVF9BTEwJCT0gMHhmZmZmZmZmZiwJLyogQWxsIGNvbXBvbmVudHMgdXNlZCBieSB0aGlzCisJCQkJCQkgKiBpbnRlcmZhY2UsIGV2ZW4gaWYgc2hhcmVkICovCit9OworI2RlZmluZSBFVEhfUkVTRVRfU0hBUkVEX1NISUZUCTE2CisKKyNlbmRpZiAvKiBfTElOVVhfRVRIVE9PTF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZXZlbnRwb2xsLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlkMTlhZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogIGluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmggKCBFZmZpY2VudCBldmVudCBwb2xsaW5nIGltcGxlbWVudGF0aW9uICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsLi4uLDIwMDYJIERhdmlkZSBMaWJlbnppCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKi8KKworI2lmbmRlZiBfTElOVVhfRVZFTlRQT0xMX0gKKyNkZWZpbmUgX0xJTlVYX0VWRU5UUE9MTF9ICisKKy8qIEZvciBPX0NMT0VYRUMgKi8KKyNpbmNsdWRlIDxsaW51eC9mY250bC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIEZsYWdzIGZvciBlcG9sbF9jcmVhdGUxLiAgKi8KKyNkZWZpbmUgRVBPTExfQ0xPRVhFQyBPX0NMT0VYRUMKKworLyogVmFsaWQgb3Bjb2RlcyB0byBpc3N1ZSB0byBzeXNfZXBvbGxfY3RsKCkgKi8KKyNkZWZpbmUgRVBPTExfQ1RMX0FERCAxCisjZGVmaW5lIEVQT0xMX0NUTF9ERUwgMgorI2RlZmluZSBFUE9MTF9DVExfTU9EIDMKKworLyogU2V0IHRoZSBPbmUgU2hvdCBiZWhhdmlvdXIgZm9yIHRoZSB0YXJnZXQgZmlsZSBkZXNjcmlwdG9yICovCisjZGVmaW5lIEVQT0xMT05FU0hPVCAoMSA8PCAzMCkKKworLyogU2V0IHRoZSBFZGdlIFRyaWdnZXJlZCBiZWhhdmlvdXIgZm9yIHRoZSB0YXJnZXQgZmlsZSBkZXNjcmlwdG9yICovCisjZGVmaW5lIEVQT0xMRVQgKDEgPDwgMzEpCisKKy8qIAorICogT24geDg2LTY0IG1ha2UgdGhlIDY0Yml0IHN0cnVjdHVyZSBoYXZlIHRoZSBzYW1lIGFsaWdubWVudCBhcyB0aGUKKyAqIDMyYml0IHN0cnVjdHVyZS4gVGhpcyBtYWtlcyAzMmJpdCBlbXVsYXRpb24gZWFzaWVyLgorICoKKyAqIFVNTC94ODZfNjQgbmVlZHMgdGhlIHNhbWUgcGFja2luZyBhcyB4ODZfNjQKKyAqLworI2lmZGVmIF9feDg2XzY0X18KKyNkZWZpbmUgRVBPTExfUEFDS0VEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpCisjZWxzZQorI2RlZmluZSBFUE9MTF9QQUNLRUQKKyNlbmRpZgorCitzdHJ1Y3QgZXBvbGxfZXZlbnQgeworCV9fdTMyIGV2ZW50czsKKwlfX3U2NCBkYXRhOworfSBFUE9MTF9QQUNLRUQ7CisKKworI2VuZGlmIC8qICNpZm5kZWYgX0xJTlVYX0VWRU5UUE9MTF9IICovCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9leHQyX2ZzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZXh0Ml9mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNTAxNWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZXh0Ml9mcy5oCkBAIC0wLDAgKzEsNTU2IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvbGludXgvZXh0Ml9mcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1CisgKiBSZW15IENhcmQgKGNhcmRAbWFzaS5pYnAuZnIpCisgKiBMYWJvcmF0b2lyZSBNQVNJIC0gSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICoKKyAqICBmcm9tCisgKgorICogIGxpbnV4L2luY2x1ZGUvbGludXgvbWluaXhfZnMuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzCisgKi8KKworI2lmbmRlZiBfTElOVVhfRVhUMl9GU19ICisjZGVmaW5lIF9MSU5VWF9FWFQyX0ZTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KKworLyoKKyAqIFRoZSBzZWNvbmQgZXh0ZW5kZWQgZmlsZXN5c3RlbSBjb25zdGFudHMvc3RydWN0dXJlcworICovCisKKy8qCisgKiBEZWZpbmUgRVhUMkZTX0RFQlVHIHRvIHByb2R1Y2UgZGVidWcgbWVzc2FnZXMKKyAqLworI3VuZGVmIEVYVDJGU19ERUJVRworCisvKgorICogRGVmaW5lIEVYVDJfUkVTRVJWQVRJT04gdG8gcmVzZXJ2ZSBkYXRhIGJsb2NrcyBmb3IgZXhwYW5kaW5nIGZpbGVzCisgKi8KKyNkZWZpbmUgRVhUMl9ERUZBVUxUX1JFU0VSVkVfQkxPQ0tTICAgICA4CisvKm1heCB3aW5kb3cgc2l6ZTogMTAyNChkaXJlY3QgYmxvY2tzKSArIDMoW3QsZF1pbmRpcmVjdCBibG9ja3MpICovCisjZGVmaW5lIEVYVDJfTUFYX1JFU0VSVkVfQkxPQ0tTICAgICAgICAgMTAyNworI2RlZmluZSBFWFQyX1JFU0VSVkVfV0lORE9XX05PVF9BTExPQ0FURUQgMAorLyoKKyAqIFRoZSBzZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0gdmVyc2lvbgorICovCisjZGVmaW5lIEVYVDJGU19EQVRFCQkiOTUvMDgvMDkiCisjZGVmaW5lIEVYVDJGU19WRVJTSU9OCQkiMC41YiIKKworLyoKKyAqIERlYnVnIGNvZGUKKyAqLworI2lmZGVmIEVYVDJGU19ERUJVRworIwlkZWZpbmUgZXh0Ml9kZWJ1ZyhmLCBhLi4uKQl7IFwKKwkJCQkJcHJpbnRrICgiRVhUMi1mcyBERUJVRyAoJXMsICVkKTogJXM6IiwgXAorCQkJCQkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7IFwKKwkJCQkgIAlwcmludGsgKGYsICMjIGEpOyBcCisJCQkJCX0KKyNlbHNlCisjCWRlZmluZSBleHQyX2RlYnVnKGYsIGEuLi4pCS8qKi8KKyNlbmRpZgorCisvKgorICogU3BlY2lhbCBpbm9kZSBudW1iZXJzCisgKi8KKyNkZWZpbmUJRVhUMl9CQURfSU5PCQkgMQkvKiBCYWQgYmxvY2tzIGlub2RlICovCisjZGVmaW5lIEVYVDJfUk9PVF9JTk8JCSAyCS8qIFJvb3QgaW5vZGUgKi8KKyNkZWZpbmUgRVhUMl9CT09UX0xPQURFUl9JTk8JIDUJLyogQm9vdCBsb2FkZXIgaW5vZGUgKi8KKyNkZWZpbmUgRVhUMl9VTkRFTF9ESVJfSU5PCSA2CS8qIFVuZGVsZXRlIGRpcmVjdG9yeSBpbm9kZSAqLworCisvKiBGaXJzdCBub24tcmVzZXJ2ZWQgaW5vZGUgZm9yIG9sZCBleHQyIGZpbGVzeXN0ZW1zICovCisjZGVmaW5lIEVYVDJfR09PRF9PTERfRklSU1RfSU5PCTExCisKKy8qIEFzc3VtZSB0aGF0IHVzZXIgbW9kZSBwcm9ncmFtcyBhcmUgcGFzc2luZyBpbiBhbiBleHQyZnMgc3VwZXJibG9jaywgbm90CisgKiBhIGtlcm5lbCBzdHJ1Y3Qgc3VwZXJfYmxvY2suICBUaGlzIHdpbGwgYWxsb3cgdXMgdG8gY2FsbCB0aGUgZmVhdHVyZS10ZXN0CisgKiBtYWNyb3MgZnJvbSB1c2VyIGxhbmQuICovCisjZGVmaW5lIEVYVDJfU0Ioc2IpCShzYikKKworLyoKKyAqIE1heGltYWwgY291bnQgb2YgbGlua3MgdG8gYSBmaWxlCisgKi8KKyNkZWZpbmUgRVhUMl9MSU5LX01BWAkJMzIwMDAKKworLyoKKyAqIE1hY3JvLWluc3RydWN0aW9ucyB1c2VkIHRvIG1hbmFnZSBzZXZlcmFsIGJsb2NrIHNpemVzCisgKi8KKyNkZWZpbmUgRVhUMl9NSU5fQkxPQ0tfU0laRQkJMTAyNAorI2RlZmluZQlFWFQyX01BWF9CTE9DS19TSVpFCQk0MDk2CisjZGVmaW5lIEVYVDJfTUlOX0JMT0NLX0xPR19TSVpFCQkgIDEwCisjIGRlZmluZSBFWFQyX0JMT0NLX1NJWkUocykJCShFWFQyX01JTl9CTE9DS19TSVpFIDw8IChzKS0+c19sb2dfYmxvY2tfc2l6ZSkKKyNkZWZpbmUJRVhUMl9BRERSX1BFUl9CTE9DSyhzKQkJKEVYVDJfQkxPQ0tfU0laRShzKSAvIHNpemVvZiAoX191MzIpKQorIyBkZWZpbmUgRVhUMl9CTE9DS19TSVpFX0JJVFMocykJKChzKS0+c19sb2dfYmxvY2tfc2l6ZSArIDEwKQorI2RlZmluZSBFWFQyX0lOT0RFX1NJWkUocykJKCgocyktPnNfcmV2X2xldmVsID09IEVYVDJfR09PRF9PTERfUkVWKSA/IFwKKwkJCQkgRVhUMl9HT09EX09MRF9JTk9ERV9TSVpFIDogXAorCQkJCSAocyktPnNfaW5vZGVfc2l6ZSkKKyNkZWZpbmUgRVhUMl9GSVJTVF9JTk8ocykJKCgocyktPnNfcmV2X2xldmVsID09IEVYVDJfR09PRF9PTERfUkVWKSA/IFwKKwkJCQkgRVhUMl9HT09EX09MRF9GSVJTVF9JTk8gOiBcCisJCQkJIChzKS0+c19maXJzdF9pbm8pCisKKy8qCisgKiBNYWNyby1pbnN0cnVjdGlvbnMgdXNlZCB0byBtYW5hZ2UgZnJhZ21lbnRzCisgKi8KKyNkZWZpbmUgRVhUMl9NSU5fRlJBR19TSVpFCQkxMDI0CisjZGVmaW5lCUVYVDJfTUFYX0ZSQUdfU0laRQkJNDA5NgorI2RlZmluZSBFWFQyX01JTl9GUkFHX0xPR19TSVpFCQkgIDEwCisjIGRlZmluZSBFWFQyX0ZSQUdfU0laRShzKQkJKEVYVDJfTUlOX0ZSQUdfU0laRSA8PCAocyktPnNfbG9nX2ZyYWdfc2l6ZSkKKyMgZGVmaW5lIEVYVDJfRlJBR1NfUEVSX0JMT0NLKHMpCShFWFQyX0JMT0NLX1NJWkUocykgLyBFWFQyX0ZSQUdfU0laRShzKSkKKworLyoKKyAqIFN0cnVjdHVyZSBvZiBhIGJsb2NrcyBncm91cCBkZXNjcmlwdG9yCisgKi8KK3N0cnVjdCBleHQyX2dyb3VwX2Rlc2MKK3sKKwlfX2xlMzIJYmdfYmxvY2tfYml0bWFwOwkJLyogQmxvY2tzIGJpdG1hcCBibG9jayAqLworCV9fbGUzMgliZ19pbm9kZV9iaXRtYXA7CQkvKiBJbm9kZXMgYml0bWFwIGJsb2NrICovCisJX19sZTMyCWJnX2lub2RlX3RhYmxlOwkJLyogSW5vZGVzIHRhYmxlIGJsb2NrICovCisJX19sZTE2CWJnX2ZyZWVfYmxvY2tzX2NvdW50OwkvKiBGcmVlIGJsb2NrcyBjb3VudCAqLworCV9fbGUxNgliZ19mcmVlX2lub2Rlc19jb3VudDsJLyogRnJlZSBpbm9kZXMgY291bnQgKi8KKwlfX2xlMTYJYmdfdXNlZF9kaXJzX2NvdW50OwkvKiBEaXJlY3RvcmllcyBjb3VudCAqLworCV9fbGUxNgliZ19wYWQ7CisJX19sZTMyCWJnX3Jlc2VydmVkWzNdOworfTsKKworLyoKKyAqIE1hY3JvLWluc3RydWN0aW9ucyB1c2VkIHRvIG1hbmFnZSBncm91cCBkZXNjcmlwdG9ycworICovCisjIGRlZmluZSBFWFQyX0JMT0NLU19QRVJfR1JPVVAocykJKChzKS0+c19ibG9ja3NfcGVyX2dyb3VwKQorIyBkZWZpbmUgRVhUMl9ERVNDX1BFUl9CTE9DSyhzKQkJKEVYVDJfQkxPQ0tfU0laRShzKSAvIHNpemVvZiAoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYykpCisjIGRlZmluZSBFWFQyX0lOT0RFU19QRVJfR1JPVVAocykJKChzKS0+c19pbm9kZXNfcGVyX2dyb3VwKQorCisvKgorICogQ29uc3RhbnRzIHJlbGF0aXZlIHRvIHRoZSBkYXRhIGJsb2NrcworICovCisjZGVmaW5lCUVYVDJfTkRJUl9CTE9DS1MJCTEyCisjZGVmaW5lCUVYVDJfSU5EX0JMT0NLCQkJRVhUMl9ORElSX0JMT0NLUworI2RlZmluZQlFWFQyX0RJTkRfQkxPQ0sJCQkoRVhUMl9JTkRfQkxPQ0sgKyAxKQorI2RlZmluZQlFWFQyX1RJTkRfQkxPQ0sJCQkoRVhUMl9ESU5EX0JMT0NLICsgMSkKKyNkZWZpbmUJRVhUMl9OX0JMT0NLUwkJCShFWFQyX1RJTkRfQkxPQ0sgKyAxKQorCisvKgorICogSW5vZGUgZmxhZ3MgKEdFVEZMQUdTL1NFVEZMQUdTKQorICovCisjZGVmaW5lCUVYVDJfU0VDUk1fRkwJCQlGU19TRUNSTV9GTAkvKiBTZWN1cmUgZGVsZXRpb24gKi8KKyNkZWZpbmUJRVhUMl9VTlJNX0ZMCQkJRlNfVU5STV9GTAkvKiBVbmRlbGV0ZSAqLworI2RlZmluZQlFWFQyX0NPTVBSX0ZMCQkJRlNfQ09NUFJfRkwJLyogQ29tcHJlc3MgZmlsZSAqLworI2RlZmluZSBFWFQyX1NZTkNfRkwJCQlGU19TWU5DX0ZMCS8qIFN5bmNocm9ub3VzIHVwZGF0ZXMgKi8KKyNkZWZpbmUgRVhUMl9JTU1VVEFCTEVfRkwJCUZTX0lNTVVUQUJMRV9GTAkvKiBJbW11dGFibGUgZmlsZSAqLworI2RlZmluZSBFWFQyX0FQUEVORF9GTAkJCUZTX0FQUEVORF9GTAkvKiB3cml0ZXMgdG8gZmlsZSBtYXkgb25seSBhcHBlbmQgKi8KKyNkZWZpbmUgRVhUMl9OT0RVTVBfRkwJCQlGU19OT0RVTVBfRkwJLyogZG8gbm90IGR1bXAgZmlsZSAqLworI2RlZmluZSBFWFQyX05PQVRJTUVfRkwJCQlGU19OT0FUSU1FX0ZMCS8qIGRvIG5vdCB1cGRhdGUgYXRpbWUgKi8KKy8qIFJlc2VydmVkIGZvciBjb21wcmVzc2lvbiB1c2FnZS4uLiAqLworI2RlZmluZSBFWFQyX0RJUlRZX0ZMCQkJRlNfRElSVFlfRkwKKyNkZWZpbmUgRVhUMl9DT01QUkJMS19GTAkJRlNfQ09NUFJCTEtfRkwJLyogT25lIG9yIG1vcmUgY29tcHJlc3NlZCBjbHVzdGVycyAqLworI2RlZmluZSBFWFQyX05PQ09NUF9GTAkJCUZTX05PQ09NUF9GTAkvKiBEb24ndCBjb21wcmVzcyAqLworI2RlZmluZSBFWFQyX0VDT01QUl9GTAkJCUZTX0VDT01QUl9GTAkvKiBDb21wcmVzc2lvbiBlcnJvciAqLworLyogRW5kIGNvbXByZXNzaW9uIGZsYWdzIC0tLSBtYXliZSBub3QgYWxsIHVzZWQgKi8JCisjZGVmaW5lIEVYVDJfQlRSRUVfRkwJCQlGU19CVFJFRV9GTAkvKiBidHJlZSBmb3JtYXQgZGlyICovCisjZGVmaW5lIEVYVDJfSU5ERVhfRkwJCQlGU19JTkRFWF9GTAkvKiBoYXNoLWluZGV4ZWQgZGlyZWN0b3J5ICovCisjZGVmaW5lIEVYVDJfSU1BR0lDX0ZMCQkJRlNfSU1BR0lDX0ZMCS8qIEFGUyBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgRVhUMl9KT1VSTkFMX0RBVEFfRkwJCUZTX0pPVVJOQUxfREFUQV9GTCAvKiBSZXNlcnZlZCBmb3IgZXh0MyAqLworI2RlZmluZSBFWFQyX05PVEFJTF9GTAkJCUZTX05PVEFJTF9GTAkvKiBmaWxlIHRhaWwgc2hvdWxkIG5vdCBiZSBtZXJnZWQgKi8KKyNkZWZpbmUgRVhUMl9ESVJTWU5DX0ZMCQkJRlNfRElSU1lOQ19GTAkvKiBkaXJzeW5jIGJlaGF2aW91ciAoZGlyZWN0b3JpZXMgb25seSkgKi8KKyNkZWZpbmUgRVhUMl9UT1BESVJfRkwJCQlGU19UT1BESVJfRkwJLyogVG9wIG9mIGRpcmVjdG9yeSBoaWVyYXJjaGllcyovCisjZGVmaW5lIEVYVDJfUkVTRVJWRURfRkwJCUZTX1JFU0VSVkVEX0ZMCS8qIHJlc2VydmVkIGZvciBleHQyIGxpYiAqLworCisjZGVmaW5lIEVYVDJfRkxfVVNFUl9WSVNJQkxFCQlGU19GTF9VU0VSX1ZJU0lCTEUJLyogVXNlciB2aXNpYmxlIGZsYWdzICovCisjZGVmaW5lIEVYVDJfRkxfVVNFUl9NT0RJRklBQkxFCQlGU19GTF9VU0VSX01PRElGSUFCTEUJLyogVXNlciBtb2RpZmlhYmxlIGZsYWdzICovCisKKy8qIEZsYWdzIHRoYXQgc2hvdWxkIGJlIGluaGVyaXRlZCBieSBuZXcgaW5vZGVzIGZyb20gdGhlaXIgcGFyZW50LiAqLworI2RlZmluZSBFWFQyX0ZMX0lOSEVSSVRFRCAoRVhUMl9TRUNSTV9GTCB8IEVYVDJfVU5STV9GTCB8IEVYVDJfQ09NUFJfRkwgfFwKKwkJCSAgIEVYVDJfU1lOQ19GTCB8IEVYVDJfSU1NVVRBQkxFX0ZMIHwgRVhUMl9BUFBFTkRfRkwgfFwKKwkJCSAgIEVYVDJfTk9EVU1QX0ZMIHwgRVhUMl9OT0FUSU1FX0ZMIHwgRVhUMl9DT01QUkJMS19GTHxcCisJCQkgICBFWFQyX05PQ09NUF9GTCB8IEVYVDJfSk9VUk5BTF9EQVRBX0ZMIHxcCisJCQkgICBFWFQyX05PVEFJTF9GTCB8IEVYVDJfRElSU1lOQ19GTCkKKworLyogRmxhZ3MgdGhhdCBhcmUgYXBwcm9wcmlhdGUgZm9yIHJlZ3VsYXIgZmlsZXMgKGFsbCBidXQgZGlyLXNwZWNpZmljIG9uZXMpLiAqLworI2RlZmluZSBFWFQyX1JFR19GTE1BU0sgKH4oRVhUMl9ESVJTWU5DX0ZMIHwgRVhUMl9UT1BESVJfRkwpKQorCisvKiBGbGFncyB0aGF0IGFyZSBhcHByb3ByaWF0ZSBmb3Igbm9uLWRpcmVjdG9yaWVzL3JlZ3VsYXIgZmlsZXMuICovCisjZGVmaW5lIEVYVDJfT1RIRVJfRkxNQVNLIChFWFQyX05PRFVNUF9GTCB8IEVYVDJfTk9BVElNRV9GTCkKKworLyogTWFzayBvdXQgZmxhZ3MgdGhhdCBhcmUgaW5hcHByb3ByaWF0ZSBmb3IgdGhlIGdpdmVuIHR5cGUgb2YgaW5vZGUuICovCitzdGF0aWMgX19pbmxpbmVfXyBfX3UzMiBleHQyX21hc2tfZmxhZ3ModW1vZGVfdCBtb2RlLCBfX3UzMiBmbGFncykKK3sKKwlpZiAoU19JU0RJUihtb2RlKSkKKwkJcmV0dXJuIGZsYWdzOworCWVsc2UgaWYgKFNfSVNSRUcobW9kZSkpCisJCXJldHVybiBmbGFncyAmIEVYVDJfUkVHX0ZMTUFTSzsKKwllbHNlCisJCXJldHVybiBmbGFncyAmIEVYVDJfT1RIRVJfRkxNQVNLOworfQorCisvKgorICogaW9jdGwgY29tbWFuZHMKKyAqLworI2RlZmluZQlFWFQyX0lPQ19HRVRGTEFHUwkJRlNfSU9DX0dFVEZMQUdTCisjZGVmaW5lCUVYVDJfSU9DX1NFVEZMQUdTCQlGU19JT0NfU0VURkxBR1MKKyNkZWZpbmUJRVhUMl9JT0NfR0VUVkVSU0lPTgkJRlNfSU9DX0dFVFZFUlNJT04KKyNkZWZpbmUJRVhUMl9JT0NfU0VUVkVSU0lPTgkJRlNfSU9DX1NFVFZFUlNJT04KKyNkZWZpbmUJRVhUMl9JT0NfR0VUUlNWU1oJCV9JT1IoJ2YnLCA1LCBsb25nKQorI2RlZmluZQlFWFQyX0lPQ19TRVRSU1ZTWgkJX0lPVygnZicsIDYsIGxvbmcpCisKKy8qCisgKiBpb2N0bCBjb21tYW5kcyBpbiAzMiBiaXQgZW11bGF0aW9uCisgKi8KKyNkZWZpbmUgRVhUMl9JT0MzMl9HRVRGTEFHUwkJRlNfSU9DMzJfR0VURkxBR1MKKyNkZWZpbmUgRVhUMl9JT0MzMl9TRVRGTEFHUwkJRlNfSU9DMzJfU0VURkxBR1MKKyNkZWZpbmUgRVhUMl9JT0MzMl9HRVRWRVJTSU9OCQlGU19JT0MzMl9HRVRWRVJTSU9OCisjZGVmaW5lIEVYVDJfSU9DMzJfU0VUVkVSU0lPTgkJRlNfSU9DMzJfU0VUVkVSU0lPTgorCisvKgorICogU3RydWN0dXJlIG9mIGFuIGlub2RlIG9uIHRoZSBkaXNrCisgKi8KK3N0cnVjdCBleHQyX2lub2RlIHsKKwlfX2xlMTYJaV9tb2RlOwkJLyogRmlsZSBtb2RlICovCisJX19sZTE2CWlfdWlkOwkJLyogTG93IDE2IGJpdHMgb2YgT3duZXIgVWlkICovCisJX19sZTMyCWlfc2l6ZTsJCS8qIFNpemUgaW4gYnl0ZXMgKi8KKwlfX2xlMzIJaV9hdGltZTsJLyogQWNjZXNzIHRpbWUgKi8KKwlfX2xlMzIJaV9jdGltZTsJLyogQ3JlYXRpb24gdGltZSAqLworCV9fbGUzMglpX210aW1lOwkvKiBNb2RpZmljYXRpb24gdGltZSAqLworCV9fbGUzMglpX2R0aW1lOwkvKiBEZWxldGlvbiBUaW1lICovCisJX19sZTE2CWlfZ2lkOwkJLyogTG93IDE2IGJpdHMgb2YgR3JvdXAgSWQgKi8KKwlfX2xlMTYJaV9saW5rc19jb3VudDsJLyogTGlua3MgY291bnQgKi8KKwlfX2xlMzIJaV9ibG9ja3M7CS8qIEJsb2NrcyBjb3VudCAqLworCV9fbGUzMglpX2ZsYWdzOwkvKiBGaWxlIGZsYWdzICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX19sZTMyICBsX2lfcmVzZXJ2ZWQxOworCQl9IGxpbnV4MTsKKwkJc3RydWN0IHsKKwkJCV9fbGUzMiAgaF9pX3RyYW5zbGF0b3I7CisJCX0gaHVyZDE7CisJCXN0cnVjdCB7CisJCQlfX2xlMzIgIG1faV9yZXNlcnZlZDE7CisJCX0gbWFzaXgxOworCX0gb3NkMTsJCQkJLyogT1MgZGVwZW5kZW50IDEgKi8KKwlfX2xlMzIJaV9ibG9ja1tFWFQyX05fQkxPQ0tTXTsvKiBQb2ludGVycyB0byBibG9ja3MgKi8KKwlfX2xlMzIJaV9nZW5lcmF0aW9uOwkvKiBGaWxlIHZlcnNpb24gKGZvciBORlMpICovCisJX19sZTMyCWlfZmlsZV9hY2w7CS8qIEZpbGUgQUNMICovCisJX19sZTMyCWlfZGlyX2FjbDsJLyogRGlyZWN0b3J5IEFDTCAqLworCV9fbGUzMglpX2ZhZGRyOwkvKiBGcmFnbWVudCBhZGRyZXNzICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX191OAlsX2lfZnJhZzsJLyogRnJhZ21lbnQgbnVtYmVyICovCisJCQlfX3U4CWxfaV9mc2l6ZTsJLyogRnJhZ21lbnQgc2l6ZSAqLworCQkJX191MTYJaV9wYWQxOworCQkJX19sZTE2CWxfaV91aWRfaGlnaDsJLyogdGhlc2UgMiBmaWVsZHMgICAgKi8KKwkJCV9fbGUxNglsX2lfZ2lkX2hpZ2g7CS8qIHdlcmUgcmVzZXJ2ZWQyWzBdICovCisJCQlfX3UzMglsX2lfcmVzZXJ2ZWQyOworCQl9IGxpbnV4MjsKKwkJc3RydWN0IHsKKwkJCV9fdTgJaF9pX2ZyYWc7CS8qIEZyYWdtZW50IG51bWJlciAqLworCQkJX191OAloX2lfZnNpemU7CS8qIEZyYWdtZW50IHNpemUgKi8KKwkJCV9fbGUxNgloX2lfbW9kZV9oaWdoOworCQkJX19sZTE2CWhfaV91aWRfaGlnaDsKKwkJCV9fbGUxNgloX2lfZ2lkX2hpZ2g7CisJCQlfX2xlMzIJaF9pX2F1dGhvcjsKKwkJfSBodXJkMjsKKwkJc3RydWN0IHsKKwkJCV9fdTgJbV9pX2ZyYWc7CS8qIEZyYWdtZW50IG51bWJlciAqLworCQkJX191OAltX2lfZnNpemU7CS8qIEZyYWdtZW50IHNpemUgKi8KKwkJCV9fdTE2CW1fcGFkMTsKKwkJCV9fdTMyCW1faV9yZXNlcnZlZDJbMl07CisJCX0gbWFzaXgyOworCX0gb3NkMjsJCQkJLyogT1MgZGVwZW5kZW50IDIgKi8KK307CisKKyNkZWZpbmUgaV9zaXplX2hpZ2gJaV9kaXJfYWNsCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8IGRlZmluZWQoX19saW51eF9fKQorI2RlZmluZSBpX3Jlc2VydmVkMQlvc2QxLmxpbnV4MS5sX2lfcmVzZXJ2ZWQxCisjZGVmaW5lIGlfZnJhZwkJb3NkMi5saW51eDIubF9pX2ZyYWcKKyNkZWZpbmUgaV9mc2l6ZQkJb3NkMi5saW51eDIubF9pX2ZzaXplCisjZGVmaW5lIGlfdWlkX2xvdwlpX3VpZAorI2RlZmluZSBpX2dpZF9sb3cJaV9naWQKKyNkZWZpbmUgaV91aWRfaGlnaAlvc2QyLmxpbnV4Mi5sX2lfdWlkX2hpZ2gKKyNkZWZpbmUgaV9naWRfaGlnaAlvc2QyLmxpbnV4Mi5sX2lfZ2lkX2hpZ2gKKyNkZWZpbmUgaV9yZXNlcnZlZDIJb3NkMi5saW51eDIubF9pX3Jlc2VydmVkMgorI2VuZGlmCisKKyNpZmRlZglfX2h1cmRfXworI2RlZmluZSBpX3RyYW5zbGF0b3IJb3NkMS5odXJkMS5oX2lfdHJhbnNsYXRvcgorI2RlZmluZSBpX2ZyYWcJCW9zZDIuaHVyZDIuaF9pX2ZyYWcKKyNkZWZpbmUgaV9mc2l6ZQkJb3NkMi5odXJkMi5oX2lfZnNpemUKKyNkZWZpbmUgaV91aWRfaGlnaAlvc2QyLmh1cmQyLmhfaV91aWRfaGlnaAorI2RlZmluZSBpX2dpZF9oaWdoCW9zZDIuaHVyZDIuaF9pX2dpZF9oaWdoCisjZGVmaW5lIGlfYXV0aG9yCW9zZDIuaHVyZDIuaF9pX2F1dGhvcgorI2VuZGlmCisKKyNpZmRlZglfX21hc2l4X18KKyNkZWZpbmUgaV9yZXNlcnZlZDEJb3NkMS5tYXNpeDEubV9pX3Jlc2VydmVkMQorI2RlZmluZSBpX2ZyYWcJCW9zZDIubWFzaXgyLm1faV9mcmFnCisjZGVmaW5lIGlfZnNpemUJCW9zZDIubWFzaXgyLm1faV9mc2l6ZQorI2RlZmluZSBpX3Jlc2VydmVkMglvc2QyLm1hc2l4Mi5tX2lfcmVzZXJ2ZWQyCisjZW5kaWYKKworLyoKKyAqIEZpbGUgc3lzdGVtIHN0YXRlcworICovCisjZGVmaW5lCUVYVDJfVkFMSURfRlMJCQkweDAwMDEJLyogVW5tb3VudGVkIGNsZWFubHkgKi8KKyNkZWZpbmUJRVhUMl9FUlJPUl9GUwkJCTB4MDAwMgkvKiBFcnJvcnMgZGV0ZWN0ZWQgKi8KKworLyoKKyAqIE1vdW50IGZsYWdzCisgKi8KKyNkZWZpbmUgRVhUMl9NT1VOVF9DSEVDSwkJMHgwMDAwMDEgIC8qIERvIG1vdW50LXRpbWUgY2hlY2tzICovCisjZGVmaW5lIEVYVDJfTU9VTlRfT0xEQUxMT0MJCTB4MDAwMDAyICAvKiBEb24ndCB1c2UgdGhlIG5ldyBPcmxvdiBhbGxvY2F0b3IgKi8KKyNkZWZpbmUgRVhUMl9NT1VOVF9HUlBJRAkJMHgwMDAwMDQgIC8qIENyZWF0ZSBmaWxlcyB3aXRoIGRpcmVjdG9yeSdzIGdyb3VwICovCisjZGVmaW5lIEVYVDJfTU9VTlRfREVCVUcJCTB4MDAwMDA4ICAvKiBTb21lIGRlYnVnZ2luZyBtZXNzYWdlcyAqLworI2RlZmluZSBFWFQyX01PVU5UX0VSUk9SU19DT05UCQkweDAwMDAxMCAgLyogQ29udGludWUgb24gZXJyb3JzICovCisjZGVmaW5lIEVYVDJfTU9VTlRfRVJST1JTX1JPCQkweDAwMDAyMCAgLyogUmVtb3VudCBmcyBybyBvbiBlcnJvcnMgKi8KKyNkZWZpbmUgRVhUMl9NT1VOVF9FUlJPUlNfUEFOSUMJCTB4MDAwMDQwICAvKiBQYW5pYyBvbiBlcnJvcnMgKi8KKyNkZWZpbmUgRVhUMl9NT1VOVF9NSU5JWF9ERgkJMHgwMDAwODAgIC8qIE1pbWljcyB0aGUgTWluaXggc3RhdGZzICovCisjZGVmaW5lIEVYVDJfTU9VTlRfTk9CSAkJCTB4MDAwMTAwICAvKiBObyBidWZmZXJfaGVhZHMgKi8KKyNkZWZpbmUgRVhUMl9NT1VOVF9OT19VSUQzMgkJMHgwMDAyMDAgIC8qIERpc2FibGUgMzItYml0IFVJRHMgKi8KKyNkZWZpbmUgRVhUMl9NT1VOVF9YQVRUUl9VU0VSCQkweDAwNDAwMCAgLyogRXh0ZW5kZWQgdXNlciBhdHRyaWJ1dGVzICovCisjZGVmaW5lIEVYVDJfTU9VTlRfUE9TSVhfQUNMCQkweDAwODAwMCAgLyogUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMgKi8KKyNkZWZpbmUgRVhUMl9NT1VOVF9YSVAJCQkweDAxMDAwMCAgLyogRXhlY3V0ZSBpbiBwbGFjZSAqLworI2RlZmluZSBFWFQyX01PVU5UX1VTUlFVT1RBCQkweDAyMDAwMCAgLyogdXNlciBxdW90YSAqLworI2RlZmluZSBFWFQyX01PVU5UX0dSUFFVT1RBCQkweDA0MDAwMCAgLyogZ3JvdXAgcXVvdGEgKi8KKyNkZWZpbmUgRVhUMl9NT1VOVF9SRVNFUlZBVElPTgkJMHgwODAwMDAgIC8qIFByZWFsbG9jYXRpb24gKi8KKworCisjZGVmaW5lIGNsZWFyX29wdChvLCBvcHQpCQlvICY9IH5FWFQyX01PVU5UXyMjb3B0CisjZGVmaW5lIHNldF9vcHQobywgb3B0KQkJCW8gfD0gRVhUMl9NT1VOVF8jI29wdAorI2RlZmluZSB0ZXN0X29wdChzYiwgb3B0KQkJKEVYVDJfU0Ioc2IpLT5zX21vdW50X29wdCAmIFwKKwkJCQkJIEVYVDJfTU9VTlRfIyNvcHQpCisvKgorICogTWF4aW1hbCBtb3VudCBjb3VudHMgYmV0d2VlbiB0d28gZmlsZXN5c3RlbSBjaGVja3MKKyAqLworI2RlZmluZSBFWFQyX0RGTF9NQVhfTU5UX0NPVU5UCQkyMAkvKiBBbGxvdyAyMCBtb3VudHMgKi8KKyNkZWZpbmUgRVhUMl9ERkxfQ0hFQ0tJTlRFUlZBTAkJMAkvKiBEb24ndCB1c2UgaW50ZXJ2YWwgY2hlY2sgKi8KKworLyoKKyAqIEJlaGF2aW91ciB3aGVuIGRldGVjdGluZyBlcnJvcnMKKyAqLworI2RlZmluZSBFWFQyX0VSUk9SU19DT05USU5VRQkJMQkvKiBDb250aW51ZSBleGVjdXRpb24gKi8KKyNkZWZpbmUgRVhUMl9FUlJPUlNfUk8JCQkyCS8qIFJlbW91bnQgZnMgcmVhZC1vbmx5ICovCisjZGVmaW5lIEVYVDJfRVJST1JTX1BBTklDCQkzCS8qIFBhbmljICovCisjZGVmaW5lIEVYVDJfRVJST1JTX0RFRkFVTFQJCUVYVDJfRVJST1JTX0NPTlRJTlVFCisKKy8qCisgKiBTdHJ1Y3R1cmUgb2YgdGhlIHN1cGVyIGJsb2NrCisgKi8KK3N0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHsKKwlfX2xlMzIJc19pbm9kZXNfY291bnQ7CQkvKiBJbm9kZXMgY291bnQgKi8KKwlfX2xlMzIJc19ibG9ja3NfY291bnQ7CQkvKiBCbG9ja3MgY291bnQgKi8KKwlfX2xlMzIJc19yX2Jsb2Nrc19jb3VudDsJLyogUmVzZXJ2ZWQgYmxvY2tzIGNvdW50ICovCisJX19sZTMyCXNfZnJlZV9ibG9ja3NfY291bnQ7CS8qIEZyZWUgYmxvY2tzIGNvdW50ICovCisJX19sZTMyCXNfZnJlZV9pbm9kZXNfY291bnQ7CS8qIEZyZWUgaW5vZGVzIGNvdW50ICovCisJX19sZTMyCXNfZmlyc3RfZGF0YV9ibG9jazsJLyogRmlyc3QgRGF0YSBCbG9jayAqLworCV9fbGUzMglzX2xvZ19ibG9ja19zaXplOwkvKiBCbG9jayBzaXplICovCisJX19sZTMyCXNfbG9nX2ZyYWdfc2l6ZTsJLyogRnJhZ21lbnQgc2l6ZSAqLworCV9fbGUzMglzX2Jsb2Nrc19wZXJfZ3JvdXA7CS8qICMgQmxvY2tzIHBlciBncm91cCAqLworCV9fbGUzMglzX2ZyYWdzX3Blcl9ncm91cDsJLyogIyBGcmFnbWVudHMgcGVyIGdyb3VwICovCisJX19sZTMyCXNfaW5vZGVzX3Blcl9ncm91cDsJLyogIyBJbm9kZXMgcGVyIGdyb3VwICovCisJX19sZTMyCXNfbXRpbWU7CQkvKiBNb3VudCB0aW1lICovCisJX19sZTMyCXNfd3RpbWU7CQkvKiBXcml0ZSB0aW1lICovCisJX19sZTE2CXNfbW50X2NvdW50OwkJLyogTW91bnQgY291bnQgKi8KKwlfX2xlMTYJc19tYXhfbW50X2NvdW50OwkvKiBNYXhpbWFsIG1vdW50IGNvdW50ICovCisJX19sZTE2CXNfbWFnaWM7CQkvKiBNYWdpYyBzaWduYXR1cmUgKi8KKwlfX2xlMTYJc19zdGF0ZTsJCS8qIEZpbGUgc3lzdGVtIHN0YXRlICovCisJX19sZTE2CXNfZXJyb3JzOwkJLyogQmVoYXZpb3VyIHdoZW4gZGV0ZWN0aW5nIGVycm9ycyAqLworCV9fbGUxNglzX21pbm9yX3Jldl9sZXZlbDsgCS8qIG1pbm9yIHJldmlzaW9uIGxldmVsICovCisJX19sZTMyCXNfbGFzdGNoZWNrOwkJLyogdGltZSBvZiBsYXN0IGNoZWNrICovCisJX19sZTMyCXNfY2hlY2tpbnRlcnZhbDsJLyogbWF4LiB0aW1lIGJldHdlZW4gY2hlY2tzICovCisJX19sZTMyCXNfY3JlYXRvcl9vczsJCS8qIE9TICovCisJX19sZTMyCXNfcmV2X2xldmVsOwkJLyogUmV2aXNpb24gbGV2ZWwgKi8KKwlfX2xlMTYJc19kZWZfcmVzdWlkOwkJLyogRGVmYXVsdCB1aWQgZm9yIHJlc2VydmVkIGJsb2NrcyAqLworCV9fbGUxNglzX2RlZl9yZXNnaWQ7CQkvKiBEZWZhdWx0IGdpZCBmb3IgcmVzZXJ2ZWQgYmxvY2tzICovCisJLyoKKwkgKiBUaGVzZSBmaWVsZHMgYXJlIGZvciBFWFQyX0RZTkFNSUNfUkVWIHN1cGVyYmxvY2tzIG9ubHkuCisJICoKKwkgKiBOb3RlOiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjb21wYXRpYmxlIGZlYXR1cmUgc2V0IGFuZAorCSAqIHRoZSBpbmNvbXBhdGlibGUgZmVhdHVyZSBzZXQgaXMgdGhhdCBpZiB0aGVyZSBpcyBhIGJpdCBzZXQKKwkgKiBpbiB0aGUgaW5jb21wYXRpYmxlIGZlYXR1cmUgc2V0IHRoYXQgdGhlIGtlcm5lbCBkb2Vzbid0CisJICoga25vdyBhYm91dCwgaXQgc2hvdWxkIHJlZnVzZSB0byBtb3VudCB0aGUgZmlsZXN5c3RlbS4KKwkgKiAKKwkgKiBlMmZzY2sncyByZXF1aXJlbWVudHMgYXJlIG1vcmUgc3RyaWN0OyBpZiBpdCBkb2Vzbid0IGtub3cKKwkgKiBhYm91dCBhIGZlYXR1cmUgaW4gZWl0aGVyIHRoZSBjb21wYXRpYmxlIG9yIGluY29tcGF0aWJsZQorCSAqIGZlYXR1cmUgc2V0LCBpdCBtdXN0IGFib3J0IGFuZCBub3QgdHJ5IHRvIG1lZGRsZSB3aXRoCisJICogdGhpbmdzIGl0IGRvZXNuJ3QgdW5kZXJzdGFuZC4uLgorCSAqLworCV9fbGUzMglzX2ZpcnN0X2lubzsgCQkvKiBGaXJzdCBub24tcmVzZXJ2ZWQgaW5vZGUgKi8KKwlfX2xlMTYgICBzX2lub2RlX3NpemU7IAkJLyogc2l6ZSBvZiBpbm9kZSBzdHJ1Y3R1cmUgKi8KKwlfX2xlMTYJc19ibG9ja19ncm91cF9ucjsgCS8qIGJsb2NrIGdyb3VwICMgb2YgdGhpcyBzdXBlcmJsb2NrICovCisJX19sZTMyCXNfZmVhdHVyZV9jb21wYXQ7IAkvKiBjb21wYXRpYmxlIGZlYXR1cmUgc2V0ICovCisJX19sZTMyCXNfZmVhdHVyZV9pbmNvbXBhdDsgCS8qIGluY29tcGF0aWJsZSBmZWF0dXJlIHNldCAqLworCV9fbGUzMglzX2ZlYXR1cmVfcm9fY29tcGF0OyAJLyogcmVhZG9ubHktY29tcGF0aWJsZSBmZWF0dXJlIHNldCAqLworCV9fdTgJc191dWlkWzE2XTsJCS8qIDEyOC1iaXQgdXVpZCBmb3Igdm9sdW1lICovCisJY2hhcglzX3ZvbHVtZV9uYW1lWzE2XTsgCS8qIHZvbHVtZSBuYW1lICovCisJY2hhcglzX2xhc3RfbW91bnRlZFs2NF07IAkvKiBkaXJlY3Rvcnkgd2hlcmUgbGFzdCBtb3VudGVkICovCisJX19sZTMyCXNfYWxnb3JpdGhtX3VzYWdlX2JpdG1hcDsgLyogRm9yIGNvbXByZXNzaW9uICovCisJLyoKKwkgKiBQZXJmb3JtYW5jZSBoaW50cy4gIERpcmVjdG9yeSBwcmVhbGxvY2F0aW9uIHNob3VsZCBvbmx5CisJICogaGFwcGVuIGlmIHRoZSBFWFQyX0NPTVBBVF9QUkVBTExPQyBmbGFnIGlzIG9uLgorCSAqLworCV9fdTgJc19wcmVhbGxvY19ibG9ja3M7CS8qIE5yIG9mIGJsb2NrcyB0byB0cnkgdG8gcHJlYWxsb2NhdGUqLworCV9fdTgJc19wcmVhbGxvY19kaXJfYmxvY2tzOwkvKiBOciB0byBwcmVhbGxvY2F0ZSBmb3IgZGlycyAqLworCV9fdTE2CXNfcGFkZGluZzE7CisJLyoKKwkgKiBKb3VybmFsaW5nIHN1cHBvcnQgdmFsaWQgaWYgRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCBzZXQuCisJICovCisJX191OAlzX2pvdXJuYWxfdXVpZFsxNl07CS8qIHV1aWQgb2Ygam91cm5hbCBzdXBlcmJsb2NrICovCisJX191MzIJc19qb3VybmFsX2ludW07CQkvKiBpbm9kZSBudW1iZXIgb2Ygam91cm5hbCBmaWxlICovCisJX191MzIJc19qb3VybmFsX2RldjsJCS8qIGRldmljZSBudW1iZXIgb2Ygam91cm5hbCBmaWxlICovCisJX191MzIJc19sYXN0X29ycGhhbjsJCS8qIHN0YXJ0IG9mIGxpc3Qgb2YgaW5vZGVzIHRvIGRlbGV0ZSAqLworCV9fdTMyCXNfaGFzaF9zZWVkWzRdOwkJLyogSFRSRUUgaGFzaCBzZWVkICovCisJX191OAlzX2RlZl9oYXNoX3ZlcnNpb247CS8qIERlZmF1bHQgaGFzaCB2ZXJzaW9uIHRvIHVzZSAqLworCV9fdTgJc19yZXNlcnZlZF9jaGFyX3BhZDsKKwlfX3UxNglzX3Jlc2VydmVkX3dvcmRfcGFkOworCV9fbGUzMglzX2RlZmF1bHRfbW91bnRfb3B0czsKKyAJX19sZTMyCXNfZmlyc3RfbWV0YV9iZzsgCS8qIEZpcnN0IG1ldGFibG9jayBibG9jayBncm91cCAqLworCV9fdTMyCXNfcmVzZXJ2ZWRbMTkwXTsJLyogUGFkZGluZyB0byB0aGUgZW5kIG9mIHRoZSBibG9jayAqLworfTsKKworLyoKKyAqIENvZGVzIGZvciBvcGVyYXRpbmcgc3lzdGVtcworICovCisjZGVmaW5lIEVYVDJfT1NfTElOVVgJCTAKKyNkZWZpbmUgRVhUMl9PU19IVVJECQkxCisjZGVmaW5lIEVYVDJfT1NfTUFTSVgJCTIKKyNkZWZpbmUgRVhUMl9PU19GUkVFQlNECQkzCisjZGVmaW5lIEVYVDJfT1NfTElURVMJCTQKKworLyoKKyAqIFJldmlzaW9uIGxldmVscworICovCisjZGVmaW5lIEVYVDJfR09PRF9PTERfUkVWCTAJLyogVGhlIGdvb2Qgb2xkIChvcmlnaW5hbCkgZm9ybWF0ICovCisjZGVmaW5lIEVYVDJfRFlOQU1JQ19SRVYJMSAJLyogVjIgZm9ybWF0IHcvIGR5bmFtaWMgaW5vZGUgc2l6ZXMgKi8KKworI2RlZmluZSBFWFQyX0NVUlJFTlRfUkVWCUVYVDJfR09PRF9PTERfUkVWCisjZGVmaW5lIEVYVDJfTUFYX1NVUFBfUkVWCUVYVDJfRFlOQU1JQ19SRVYKKworI2RlZmluZSBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUgMTI4CisKKy8qCisgKiBGZWF0dXJlIHNldCBkZWZpbml0aW9ucworICovCisKKyNkZWZpbmUgRVhUMl9IQVNfQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykJCQlcCisJKCBFWFQyX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX2NvbXBhdCAmIGNwdV90b19sZTMyKG1hc2spICkKKyNkZWZpbmUgRVhUMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykJCQlcCisJKCBFWFQyX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX3JvX2NvbXBhdCAmIGNwdV90b19sZTMyKG1hc2spICkKKyNkZWZpbmUgRVhUMl9IQVNfSU5DT01QQVRfRkVBVFVSRShzYixtYXNrKQkJCVwKKwkoIEVYVDJfU0Ioc2IpLT5zX2VzLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBjcHVfdG9fbGUzMihtYXNrKSApCisjZGVmaW5lIEVYVDJfU0VUX0NPTVBBVF9GRUFUVVJFKHNiLG1hc2spCQkJXAorCUVYVDJfU0Ioc2IpLT5zX2VzLT5zX2ZlYXR1cmVfY29tcGF0IHw9IGNwdV90b19sZTMyKG1hc2spCisjZGVmaW5lIEVYVDJfU0VUX1JPX0NPTVBBVF9GRUFUVVJFKHNiLG1hc2spCQkJXAorCUVYVDJfU0Ioc2IpLT5zX2VzLT5zX2ZlYXR1cmVfcm9fY29tcGF0IHw9IGNwdV90b19sZTMyKG1hc2spCisjZGVmaW5lIEVYVDJfU0VUX0lOQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykJCQlcCisJRVhUMl9TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9pbmNvbXBhdCB8PSBjcHVfdG9fbGUzMihtYXNrKQorI2RlZmluZSBFWFQyX0NMRUFSX0NPTVBBVF9GRUFUVVJFKHNiLG1hc2spCQkJXAorCUVYVDJfU0Ioc2IpLT5zX2VzLT5zX2ZlYXR1cmVfY29tcGF0ICY9IH5jcHVfdG9fbGUzMihtYXNrKQorI2RlZmluZSBFWFQyX0NMRUFSX1JPX0NPTVBBVF9GRUFUVVJFKHNiLG1hc2spCQkJXAorCUVYVDJfU0Ioc2IpLT5zX2VzLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICY9IH5jcHVfdG9fbGUzMihtYXNrKQorI2RlZmluZSBFWFQyX0NMRUFSX0lOQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykJCQlcCisJRVhUMl9TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9pbmNvbXBhdCAmPSB+Y3B1X3RvX2xlMzIobWFzaykKKworI2RlZmluZSBFWFQyX0ZFQVRVUkVfQ09NUEFUX0RJUl9QUkVBTExPQwkweDAwMDEKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0NPTVBBVF9JTUFHSUNfSU5PREVTCTB4MDAwMgorI2RlZmluZSBFWFQzX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMCQkweDAwMDQKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0NPTVBBVF9FWFRfQVRUUgkJMHgwMDA4CisjZGVmaW5lIEVYVDJfRkVBVFVSRV9DT01QQVRfUkVTSVpFX0lOTwkJMHgwMDEwCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9DT01QQVRfRElSX0lOREVYCQkweDAwMjAKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0NPTVBBVF9BTlkJCQkweGZmZmZmZmZmCisKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVIJMHgwMDAxCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRQkweDAwMDIKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9CVFJFRV9ESVIJMHgwMDA0CisjZGVmaW5lIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfQU5ZCQkweGZmZmZmZmZmCisKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX0NPTVBSRVNTSU9OCTB4MDAwMQorI2RlZmluZSBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEUJCTB4MDAwMgorI2RlZmluZSBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUgkJMHgwMDA0CisjZGVmaW5lIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9KT1VSTkFMX0RFVgkweDAwMDgKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcJCTB4MDAxMAorI2RlZmluZSBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfQU5ZCQkweGZmZmZmZmZmCisKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0NPTVBBVF9TVVBQCUVYVDJfRkVBVFVSRV9DT01QQVRfRVhUX0FUVFIKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX1NVUFAJKEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9GSUxFVFlQRXwgXAorCQkJCQkgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfU1VQUAkoRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVJ8IFwKKwkJCQkJIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRXwgXAorCQkJCQkgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9CVFJFRV9ESVIpCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfVU5TVVBQT1JURUQJfkVYVDJfRkVBVFVSRV9ST19DT01QQVRfU1VQUAorI2RlZmluZSBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfVU5TVVBQT1JURUQJfkVYVDJfRkVBVFVSRV9JTkNPTVBBVF9TVVBQCisKKy8qCisgKiBEZWZhdWx0IHZhbHVlcyBmb3IgdXNlciBhbmQvb3IgZ3JvdXAgdXNpbmcgcmVzZXJ2ZWQgYmxvY2tzCisgKi8KKyNkZWZpbmUJRVhUMl9ERUZfUkVTVUlECQkwCisjZGVmaW5lCUVYVDJfREVGX1JFU0dJRAkJMAorCisvKgorICogRGVmYXVsdCBtb3VudCBvcHRpb25zCisgKi8KKyNkZWZpbmUgRVhUMl9ERUZNX0RFQlVHCQkweDAwMDEKKyNkZWZpbmUgRVhUMl9ERUZNX0JTREdST1VQUwkweDAwMDIKKyNkZWZpbmUgRVhUMl9ERUZNX1hBVFRSX1VTRVIJMHgwMDA0CisjZGVmaW5lIEVYVDJfREVGTV9BQ0wJCTB4MDAwOAorI2RlZmluZSBFWFQyX0RFRk1fVUlEMTYJCTB4MDAxMAorICAgIC8qIE5vdCB1c2VkIGJ5IGV4dDIsIGJ1dCByZXNlcnZlZCBmb3IgdXNlIGJ5IGV4dDMgKi8KKyNkZWZpbmUgRVhUM19ERUZNX0pNT0RFCQkweDAwNjAgCisjZGVmaW5lIEVYVDNfREVGTV9KTU9ERV9EQVRBCTB4MDAyMAorI2RlZmluZSBFWFQzX0RFRk1fSk1PREVfT1JERVJFRAkweDAwNDAKKyNkZWZpbmUgRVhUM19ERUZNX0pNT0RFX1dCQUNLCTB4MDA2MAorCisvKgorICogU3RydWN0dXJlIG9mIGEgZGlyZWN0b3J5IGVudHJ5CisgKi8KKyNkZWZpbmUgRVhUMl9OQU1FX0xFTiAyNTUKKworc3RydWN0IGV4dDJfZGlyX2VudHJ5IHsKKwlfX2xlMzIJaW5vZGU7CQkJLyogSW5vZGUgbnVtYmVyICovCisJX19sZTE2CXJlY19sZW47CQkvKiBEaXJlY3RvcnkgZW50cnkgbGVuZ3RoICovCisJX19sZTE2CW5hbWVfbGVuOwkJLyogTmFtZSBsZW5ndGggKi8KKwljaGFyCW5hbWVbRVhUMl9OQU1FX0xFTl07CS8qIEZpbGUgbmFtZSAqLworfTsKKworLyoKKyAqIFRoZSBuZXcgdmVyc2lvbiBvZiB0aGUgZGlyZWN0b3J5IGVudHJ5LiAgU2luY2UgRVhUMiBzdHJ1Y3R1cmVzIGFyZQorICogc3RvcmVkIGluIGludGVsIGJ5dGUgb3JkZXIsIGFuZCB0aGUgbmFtZV9sZW4gZmllbGQgY291bGQgbmV2ZXIgYmUKKyAqIGJpZ2dlciB0aGFuIDI1NSBjaGFycywgaXQncyBzYWZlIHRvIHJlY2xhaW0gdGhlIGV4dHJhIGJ5dGUgZm9yIHRoZQorICogZmlsZV90eXBlIGZpZWxkLgorICovCitzdHJ1Y3QgZXh0Ml9kaXJfZW50cnlfMiB7CisJX19sZTMyCWlub2RlOwkJCS8qIElub2RlIG51bWJlciAqLworCV9fbGUxNglyZWNfbGVuOwkJLyogRGlyZWN0b3J5IGVudHJ5IGxlbmd0aCAqLworCV9fdTgJbmFtZV9sZW47CQkvKiBOYW1lIGxlbmd0aCAqLworCV9fdTgJZmlsZV90eXBlOworCWNoYXIJbmFtZVtFWFQyX05BTUVfTEVOXTsJLyogRmlsZSBuYW1lICovCit9OworCisvKgorICogRXh0MiBkaXJlY3RvcnkgZmlsZSB0eXBlcy4gIE9ubHkgdGhlIGxvdyAzIGJpdHMgYXJlIHVzZWQuICBUaGUKKyAqIG90aGVyIGJpdHMgYXJlIHJlc2VydmVkIGZvciBub3cuCisgKi8KK2VudW0geworCUVYVDJfRlRfVU5LTk9XTgkJPSAwLAorCUVYVDJfRlRfUkVHX0ZJTEUJPSAxLAorCUVYVDJfRlRfRElSCQk9IDIsCisJRVhUMl9GVF9DSFJERVYJCT0gMywKKwlFWFQyX0ZUX0JMS0RFVgkJPSA0LAorCUVYVDJfRlRfRklGTwkJPSA1LAorCUVYVDJfRlRfU09DSwkJPSA2LAorCUVYVDJfRlRfU1lNTElOSwkJPSA3LAorCUVYVDJfRlRfTUFYCit9OworCisvKgorICogRVhUMl9ESVJfUEFEIGRlZmluZXMgdGhlIGRpcmVjdG9yeSBlbnRyaWVzIGJvdW5kYXJpZXMKKyAqCisgKiBOT1RFOiBJdCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNAorICovCisjZGVmaW5lIEVYVDJfRElSX1BBRAkJIAk0CisjZGVmaW5lIEVYVDJfRElSX1JPVU5EIAkJCShFWFQyX0RJUl9QQUQgLSAxKQorI2RlZmluZSBFWFQyX0RJUl9SRUNfTEVOKG5hbWVfbGVuKQkoKChuYW1lX2xlbikgKyA4ICsgRVhUMl9ESVJfUk9VTkQpICYgXAorCQkJCQkgfkVYVDJfRElSX1JPVU5EKQorI2RlZmluZSBFWFQyX01BWF9SRUNfTEVOCQkoKDE8PDE2KS0xKQorCisjZW5kaWYJLyogX0xJTlVYX0VYVDJfRlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2ZhZHZpc2UuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9mYWR2aXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThlNzQ3MQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9mYWR2aXNlLmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBGQURWSVNFX0hfSU5DTFVERUQKKyNkZWZpbmUgRkFEVklTRV9IX0lOQ0xVREVECisKKyNkZWZpbmUgUE9TSVhfRkFEVl9OT1JNQUwJMCAvKiBObyBmdXJ0aGVyIHNwZWNpYWwgdHJlYXRtZW50LiAgKi8KKyNkZWZpbmUgUE9TSVhfRkFEVl9SQU5ET00JMSAvKiBFeHBlY3QgcmFuZG9tIHBhZ2UgcmVmZXJlbmNlcy4gICovCisjZGVmaW5lIFBPU0lYX0ZBRFZfU0VRVUVOVElBTAkyIC8qIEV4cGVjdCBzZXF1ZW50aWFsIHBhZ2UgcmVmZXJlbmNlcy4gICovCisjZGVmaW5lIFBPU0lYX0ZBRFZfV0lMTE5FRUQJMyAvKiBXaWxsIG5lZWQgdGhlc2UgcGFnZXMuICAqLworCisvKgorICogVGhlIGFkdmlzZSB2YWx1ZXMgZm9yIFBPU0lYX0ZBRFZfRE9OVE5FRUQgYW5kIFBPU0lYX0FEVl9OT1JFVVNFCisgKiBmb3IgczM5MC02NCBkaWZmZXIgZnJvbSB0aGUgdmFsdWVzIGZvciB0aGUgcmVzdCBvZiB0aGUgd29ybGQuCisgKi8KKyNpZiBkZWZpbmVkKF9fczM5MHhfXykKKyNkZWZpbmUgUE9TSVhfRkFEVl9ET05UTkVFRAk2IC8qIERvbid0IG5lZWQgdGhlc2UgcGFnZXMuICAqLworI2RlZmluZSBQT1NJWF9GQURWX05PUkVVU0UJNyAvKiBEYXRhIHdpbGwgYmUgYWNjZXNzZWQgb25jZS4gICovCisjZWxzZQorI2RlZmluZSBQT1NJWF9GQURWX0RPTlRORUVECTQgLyogRG9uJ3QgbmVlZCB0aGVzZSBwYWdlcy4gICovCisjZGVmaW5lIFBPU0lYX0ZBRFZfTk9SRVVTRQk1IC8qIERhdGEgd2lsbCBiZSBhY2Nlc3NlZCBvbmNlLiAgKi8KKyNlbmRpZgorCisjZW5kaWYJLyogRkFEVklTRV9IX0lOQ0xVREVEICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZmFsbG9jLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZmFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBjZWY1NgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9mYWxsb2MuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX0ZBTExPQ19IXworI2RlZmluZSBfRkFMTE9DX0hfCisKKyNkZWZpbmUgRkFMTE9DX0ZMX0tFRVBfU0laRQkweDAxIC8qIGRlZmF1bHQgaXMgZXh0ZW5kIHNpemUgKi8KKworCisjZW5kaWYgLyogX0ZBTExPQ19IXyAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2Zhbm90aWZ5LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZmFub3RpZnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzgwZTVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2Zhbm90aWZ5LmgKQEAgLTAsMCArMSwxMTYgQEAKKyNpZm5kZWYgX0xJTlVYX0ZBTk9USUZZX0gKKyNkZWZpbmUgX0xJTlVYX0ZBTk9USUZZX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIHRoZSBmb2xsb3dpbmcgZXZlbnRzIHRoYXQgdXNlci1zcGFjZSBjYW4gcmVnaXN0ZXIgZm9yICovCisjZGVmaW5lIEZBTl9BQ0NFU1MJCTB4MDAwMDAwMDEJLyogRmlsZSB3YXMgYWNjZXNzZWQgKi8KKyNkZWZpbmUgRkFOX01PRElGWQkJMHgwMDAwMDAwMgkvKiBGaWxlIHdhcyBtb2RpZmllZCAqLworI2RlZmluZSBGQU5fQ0xPU0VfV1JJVEUJCTB4MDAwMDAwMDgJLyogV3JpdHRhYmxlIGZpbGUgY2xvc2VkICovCisjZGVmaW5lIEZBTl9DTE9TRV9OT1dSSVRFCTB4MDAwMDAwMTAJLyogVW53cml0dGFibGUgZmlsZSBjbG9zZWQgKi8KKyNkZWZpbmUgRkFOX09QRU4JCTB4MDAwMDAwMjAJLyogRmlsZSB3YXMgb3BlbmVkICovCisKKyNkZWZpbmUgRkFOX1FfT1ZFUkZMT1cJCTB4MDAwMDQwMDAJLyogRXZlbnQgcXVldWVkIG92ZXJmbG93ZWQgKi8KKworI2RlZmluZSBGQU5fT1BFTl9QRVJNCQkweDAwMDEwMDAwCS8qIEZpbGUgb3BlbiBpbiBwZXJtIGNoZWNrICovCisjZGVmaW5lIEZBTl9BQ0NFU1NfUEVSTQkJMHgwMDAyMDAwMAkvKiBGaWxlIGFjY2Vzc2VkIGluIHBlcm0gY2hlY2sgKi8KKworI2RlZmluZSBGQU5fT05ESVIJCTB4NDAwMDAwMDAJLyogZXZlbnQgb2NjdXJyZWQgYWdhaW5zdCBkaXIgKi8KKworI2RlZmluZSBGQU5fRVZFTlRfT05fQ0hJTEQJMHgwODAwMDAwMAkvKiBpbnRlcmVzdGVkIGluIGNoaWxkIGV2ZW50cyAqLworCisvKiBoZWxwZXIgZXZlbnRzICovCisjZGVmaW5lIEZBTl9DTE9TRQkJKEZBTl9DTE9TRV9XUklURSB8IEZBTl9DTE9TRV9OT1dSSVRFKSAvKiBjbG9zZSAqLworCisvKiBmbGFncyB1c2VkIGZvciBmYW5vdGlmeV9pbml0KCkgKi8KKyNkZWZpbmUgRkFOX0NMT0VYRUMJCTB4MDAwMDAwMDEKKyNkZWZpbmUgRkFOX05PTkJMT0NLCQkweDAwMDAwMDAyCisKKy8qIFRoZXNlIGFyZSBOT1QgYml0d2lzZSBmbGFncy4gIEJvdGggYml0cyBhcmUgdXNlZCB0b2d0aGVyLiAgKi8KKyNkZWZpbmUgRkFOX0NMQVNTX05PVElGCQkweDAwMDAwMDAwCisjZGVmaW5lIEZBTl9DTEFTU19DT05URU5UCTB4MDAwMDAwMDQKKyNkZWZpbmUgRkFOX0NMQVNTX1BSRV9DT05URU5UCTB4MDAwMDAwMDgKKyNkZWZpbmUgRkFOX0FMTF9DTEFTU19CSVRTCShGQU5fQ0xBU1NfTk9USUYgfCBGQU5fQ0xBU1NfQ09OVEVOVCB8IFwKKwkJCQkgRkFOX0NMQVNTX1BSRV9DT05URU5UKQorCisjZGVmaW5lIEZBTl9VTkxJTUlURURfUVVFVUUJMHgwMDAwMDAxMAorI2RlZmluZSBGQU5fVU5MSU1JVEVEX01BUktTCTB4MDAwMDAwMjAKKworI2RlZmluZSBGQU5fQUxMX0lOSVRfRkxBR1MJKEZBTl9DTE9FWEVDIHwgRkFOX05PTkJMT0NLIHwgXAorCQkJCSBGQU5fQUxMX0NMQVNTX0JJVFMgfCBGQU5fVU5MSU1JVEVEX1FVRVVFIHxcCisJCQkJIEZBTl9VTkxJTUlURURfTUFSS1MpCisKKy8qIGZsYWdzIHVzZWQgZm9yIGZhbm90aWZ5X21vZGlmeV9tYXJrKCkgKi8KKyNkZWZpbmUgRkFOX01BUktfQURECQkweDAwMDAwMDAxCisjZGVmaW5lIEZBTl9NQVJLX1JFTU9WRQkJMHgwMDAwMDAwMgorI2RlZmluZSBGQU5fTUFSS19ET05UX0ZPTExPVwkweDAwMDAwMDA0CisjZGVmaW5lIEZBTl9NQVJLX09OTFlESVIJMHgwMDAwMDAwOAorI2RlZmluZSBGQU5fTUFSS19NT1VOVAkJMHgwMDAwMDAxMAorI2RlZmluZSBGQU5fTUFSS19JR05PUkVEX01BU0sJMHgwMDAwMDAyMAorI2RlZmluZSBGQU5fTUFSS19JR05PUkVEX1NVUlZfTU9ESUZZCTB4MDAwMDAwNDAKKyNkZWZpbmUgRkFOX01BUktfRkxVU0gJCTB4MDAwMDAwODAKKworI2RlZmluZSBGQU5fQUxMX01BUktfRkxBR1MJKEZBTl9NQVJLX0FERCB8XAorCQkJCSBGQU5fTUFSS19SRU1PVkUgfFwKKwkJCQkgRkFOX01BUktfRE9OVF9GT0xMT1cgfFwKKwkJCQkgRkFOX01BUktfT05MWURJUiB8XAorCQkJCSBGQU5fTUFSS19NT1VOVCB8XAorCQkJCSBGQU5fTUFSS19JR05PUkVEX01BU0sgfFwKKwkJCQkgRkFOX01BUktfSUdOT1JFRF9TVVJWX01PRElGWSB8XAorCQkJCSBGQU5fTUFSS19GTFVTSCkKKworLyoKKyAqIEFsbCBvZiB0aGUgZXZlbnRzIC0gd2UgYnVpbGQgdGhlIGxpc3QgYnkgaGFuZCBzbyB0aGF0IHdlIGNhbiBhZGQgZmxhZ3MgaW4KKyAqIHRoZSBmdXR1cmUgYW5kIG5vdCBicmVhayBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgQXBwcyB3aWxsIGdldCBvbmx5IHRoZQorICogZXZlbnRzIHRoYXQgdGhleSBvcmlnaW5hbGx5IHdhbnRlZC4gIEJlIHN1cmUgdG8gYWRkIG5ldyBldmVudHMgaGVyZSEKKyAqLworI2RlZmluZSBGQU5fQUxMX0VWRU5UUyAoRkFOX0FDQ0VTUyB8XAorCQkJRkFOX01PRElGWSB8XAorCQkJRkFOX0NMT1NFIHxcCisJCQlGQU5fT1BFTikKKworLyoKKyAqIEFsbCBldmVudHMgd2hpY2ggcmVxdWlyZSBhIHBlcm1pc3Npb24gcmVzcG9uc2UgZnJvbSB1c2Vyc3BhY2UKKyAqLworI2RlZmluZSBGQU5fQUxMX1BFUk1fRVZFTlRTIChGQU5fT1BFTl9QRVJNIHxcCisJCQkgICAgIEZBTl9BQ0NFU1NfUEVSTSkKKworI2RlZmluZSBGQU5fQUxMX09VVEdPSU5HX0VWRU5UUwkoRkFOX0FMTF9FVkVOVFMgfFwKKwkJCQkgRkFOX0FMTF9QRVJNX0VWRU5UUyB8XAorCQkJCSBGQU5fUV9PVkVSRkxPVykKKworI2RlZmluZSBGQU5PVElGWV9NRVRBREFUQV9WRVJTSU9OCTMKKworc3RydWN0IGZhbm90aWZ5X2V2ZW50X21ldGFkYXRhIHsKKwlfX3UzMiBldmVudF9sZW47CisJX191OCB2ZXJzOworCV9fdTggcmVzZXJ2ZWQ7CisJX191MTYgbWV0YWRhdGFfbGVuOworCV9fYWxpZ25lZF91NjQgbWFzazsKKwlfX3MzMiBmZDsKKwlfX3MzMiBwaWQ7Cit9OworCitzdHJ1Y3QgZmFub3RpZnlfcmVzcG9uc2UgeworCV9fczMyIGZkOworCV9fdTMyIHJlc3BvbnNlOworfTsKKworLyogTGVnaXQgdXNlcnNwYWNlIHJlc3BvbnNlcyB0byBhIF9QRVJNIGV2ZW50ICovCisjZGVmaW5lIEZBTl9BTExPVwkweDAxCisjZGVmaW5lIEZBTl9ERU5ZCTB4MDIKKy8qIE5vIGZkIHNldCBpbiBldmVudCAqLworI2RlZmluZSBGQU5fTk9GRAktMQorCisvKiBIZWxwZXIgZnVuY3Rpb25zIHRvIGRlYWwgd2l0aCBmYW5vdGlmeV9ldmVudF9tZXRhZGF0YSBidWZmZXJzICovCisjZGVmaW5lIEZBTl9FVkVOVF9NRVRBREFUQV9MRU4gKHNpemVvZihzdHJ1Y3QgZmFub3RpZnlfZXZlbnRfbWV0YWRhdGEpKQorCisjZGVmaW5lIEZBTl9FVkVOVF9ORVhUKG1ldGEsIGxlbikgKChsZW4pIC09IChtZXRhKS0+ZXZlbnRfbGVuLCBcCisJCQkJICAgKHN0cnVjdCBmYW5vdGlmeV9ldmVudF9tZXRhZGF0YSopKCgoY2hhciAqKShtZXRhKSkgKyBcCisJCQkJICAgKG1ldGEpLT5ldmVudF9sZW4pKQorCisjZGVmaW5lIEZBTl9FVkVOVF9PSyhtZXRhLCBsZW4pCSgobG9uZykobGVuKSA+PSAobG9uZylGQU5fRVZFTlRfTUVUQURBVEFfTEVOICYmIFwKKwkJCQkobG9uZykobWV0YSktPmV2ZW50X2xlbiA+PSAobG9uZylGQU5fRVZFTlRfTUVUQURBVEFfTEVOICYmIFwKKwkJCQkobG9uZykobWV0YSktPmV2ZW50X2xlbiA8PSAobG9uZykobGVuKSkKKworI2VuZGlmIC8qIF9MSU5VWF9GQU5PVElGWV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZmIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9mYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZTRhMTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZmIuaApAQCAtMCwwICsxLDM5MiBAQAorI2lmbmRlZiBfTElOVVhfRkJfSAorI2RlZmluZSBfTElOVVhfRkJfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKworLyogRGVmaW5pdGlvbnMgb2YgZnJhbWUgYnVmZmVycwkJCQkJCSovCisKKyNkZWZpbmUgRkJfTUFYCQkJMzIJLyogc3VmZmljaWVudCBmb3Igbm93ICovCisKKy8qIGlvY3RscworICAgMHg0NiBpcyAnRicJCQkJCQkJCSovCisjZGVmaW5lIEZCSU9HRVRfVlNDUkVFTklORk8JMHg0NjAwCisjZGVmaW5lIEZCSU9QVVRfVlNDUkVFTklORk8JMHg0NjAxCisjZGVmaW5lIEZCSU9HRVRfRlNDUkVFTklORk8JMHg0NjAyCisjZGVmaW5lIEZCSU9HRVRDTUFQCQkweDQ2MDQKKyNkZWZpbmUgRkJJT1BVVENNQVAJCTB4NDYwNQorI2RlZmluZSBGQklPUEFOX0RJU1BMQVkJCTB4NDYwNgorI2RlZmluZSBGQklPX0NVUlNPUiAgICAgICAgICAgIF9JT1dSKCdGJywgMHgwOCwgc3RydWN0IGZiX2N1cnNvcikKKy8qIDB4NDYwNy0weDQ2MEIgYXJlIGRlZmluZWQgYmVsb3cgKi8KKy8qICNkZWZpbmUgRkJJT0dFVF9NT05JVE9SU1BFQwkweDQ2MEMgKi8KKy8qICNkZWZpbmUgRkJJT1BVVF9NT05JVE9SU1BFQwkweDQ2MEQgKi8KKy8qICNkZWZpbmUgRkJJT1NXSVRDSF9NT05JQklUCTB4NDYwRSAqLworI2RlZmluZSBGQklPR0VUX0NPTjJGQk1BUAkweDQ2MEYKKyNkZWZpbmUgRkJJT1BVVF9DT04yRkJNQVAJMHg0NjEwCisjZGVmaW5lIEZCSU9CTEFOSwkJMHg0NjExCQkvKiBhcmc6IDAgb3IgdmVzYSBsZXZlbCArIDEgKi8KKyNkZWZpbmUgRkJJT0dFVF9WQkxBTksJCV9JT1IoJ0YnLCAweDEyLCBzdHJ1Y3QgZmJfdmJsYW5rKQorI2RlZmluZSBGQklPX0FMTE9DICAgICAgICAgICAgICAweDQ2MTMKKyNkZWZpbmUgRkJJT19GUkVFICAgICAgICAgICAgICAgMHg0NjE0CisjZGVmaW5lIEZCSU9HRVRfR0xZUEggICAgICAgICAgIDB4NDYxNQorI2RlZmluZSBGQklPR0VUX0hXQ0lORk8gICAgICAgICAweDQ2MTYKKyNkZWZpbmUgRkJJT1BVVF9NT0RFSU5GTyAgICAgICAgMHg0NjE3CisjZGVmaW5lIEZCSU9HRVRfRElTUElORk8gICAgICAgIDB4NDYxOAorI2RlZmluZSBGQklPX1dBSVRGT1JWU1lOQwlfSU9XKCdGJywgMHgyMCwgX191MzIpCisKKyNkZWZpbmUgRkJfVFlQRV9QQUNLRURfUElYRUxTCQkwCS8qIFBhY2tlZCBQaXhlbHMJKi8KKyNkZWZpbmUgRkJfVFlQRV9QTEFORVMJCQkxCS8qIE5vbiBpbnRlcmxlYXZlZCBwbGFuZXMgKi8KKyNkZWZpbmUgRkJfVFlQRV9JTlRFUkxFQVZFRF9QTEFORVMJMgkvKiBJbnRlcmxlYXZlZCBwbGFuZXMJKi8KKyNkZWZpbmUgRkJfVFlQRV9URVhUCQkJMwkvKiBUZXh0L2F0dHJpYnV0ZXMJKi8KKyNkZWZpbmUgRkJfVFlQRV9WR0FfUExBTkVTCQk0CS8qIEVHQS9WR0EgcGxhbmVzCSovCisKKyNkZWZpbmUgRkJfQVVYX1RFWFRfTURBCQkwCS8qIE1vbm9jaHJvbWUgdGV4dCAqLworI2RlZmluZSBGQl9BVVhfVEVYVF9DR0EJCTEJLyogQ0dBL0VHQS9WR0EgQ29sb3IgdGV4dCAqLworI2RlZmluZSBGQl9BVVhfVEVYVF9TM19NTUlPCTIJLyogUzMgTU1JTyBmYXN0dGV4dCAqLworI2RlZmluZSBGQl9BVVhfVEVYVF9NR0FfU1RFUDE2CTMJLyogTUdBIE1pbGxlbml1bSBJOiB0ZXh0LCBhdHRyLCAxNCByZXNlcnZlZCBieXRlcyAqLworI2RlZmluZSBGQl9BVVhfVEVYVF9NR0FfU1RFUDgJNAkvKiBvdGhlciBNR0FzOiAgICAgIHRleHQsIGF0dHIsICA2IHJlc2VydmVkIGJ5dGVzICovCisjZGVmaW5lIEZCX0FVWF9URVhUX1NWR0FfR1JPVVAJOAkvKiA4LTE1OiBTVkdBIHRpbGVibGl0IGNvbXBhdGlibGUgbW9kZXMgKi8KKyNkZWZpbmUgRkJfQVVYX1RFWFRfU1ZHQV9NQVNLCTcJLyogbG93ZXIgdGhyZWUgYml0cyBzYXlzIHN0ZXAgKi8KKyNkZWZpbmUgRkJfQVVYX1RFWFRfU1ZHQV9TVEVQMgk4CS8qIFNWR0EgdGV4dCBtb2RlOiAgdGV4dCwgYXR0ciAqLworI2RlZmluZSBGQl9BVVhfVEVYVF9TVkdBX1NURVA0CTkJLyogU1ZHQSB0ZXh0IG1vZGU6ICB0ZXh0LCBhdHRyLCAgMiByZXNlcnZlZCBieXRlcyAqLworI2RlZmluZSBGQl9BVVhfVEVYVF9TVkdBX1NURVA4CTEwCS8qIFNWR0EgdGV4dCBtb2RlOiAgdGV4dCwgYXR0ciwgIDYgcmVzZXJ2ZWQgYnl0ZXMgKi8KKyNkZWZpbmUgRkJfQVVYX1RFWFRfU1ZHQV9TVEVQMTYJMTEJLyogU1ZHQSB0ZXh0IG1vZGU6ICB0ZXh0LCBhdHRyLCAxNCByZXNlcnZlZCBieXRlcyAqLworI2RlZmluZSBGQl9BVVhfVEVYVF9TVkdBX0xBU1QJMTUJLyogcmVzZXJ2ZWQgdXAgdG8gMTUgKi8KKworI2RlZmluZSBGQl9BVVhfVkdBX1BMQU5FU19WR0E0CQkwCS8qIDE2IGNvbG9yIHBsYW5lcyAoRUdBL1ZHQSkgKi8KKyNkZWZpbmUgRkJfQVVYX1ZHQV9QTEFORVNfQ0ZCNAkJMQkvKiBDRkI0IGluIHBsYW5lcyAoVkdBKSAqLworI2RlZmluZSBGQl9BVVhfVkdBX1BMQU5FU19DRkI4CQkyCS8qIENGQjggaW4gcGxhbmVzIChWR0EpICovCisKKyNkZWZpbmUgRkJfVklTVUFMX01PTk8wMQkJMAkvKiBNb25vY2hyLiAxPUJsYWNrIDA9V2hpdGUgKi8KKyNkZWZpbmUgRkJfVklTVUFMX01PTk8xMAkJMQkvKiBNb25vY2hyLiAxPVdoaXRlIDA9QmxhY2sgKi8KKyNkZWZpbmUgRkJfVklTVUFMX1RSVUVDT0xPUgkJMgkvKiBUcnVlIGNvbG9yCSovCisjZGVmaW5lIEZCX1ZJU1VBTF9QU0VVRE9DT0xPUgkJMwkvKiBQc2V1ZG8gY29sb3IgKGxpa2UgYXRhcmkpICovCisjZGVmaW5lIEZCX1ZJU1VBTF9ESVJFQ1RDT0xPUgkJNAkvKiBEaXJlY3QgY29sb3IgKi8KKyNkZWZpbmUgRkJfVklTVUFMX1NUQVRJQ19QU0VVRE9DT0xPUgk1CS8qIFBzZXVkbyBjb2xvciByZWFkb25seSAqLworCisjZGVmaW5lIEZCX0FDQ0VMX05PTkUJCTAJLyogbm8gaGFyZHdhcmUgYWNjZWxlcmF0b3IJKi8KKyNkZWZpbmUgRkJfQUNDRUxfQVRBUklCTElUVAkxCS8qIEF0YXJpIEJsaXR0ZXIJCSovCisjZGVmaW5lIEZCX0FDQ0VMX0FNSUdBQkxJVFQJMgkvKiBBbWlnYSBCbGl0dGVyICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX1MzX1RSSU82NAkzCS8qIEN5YmVydmlzaW9uNjQgKFMzIFRyaW82NCkgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfTkNSXzc3QzMyQkxUCTQJLyogUmV0aW5hWjMgKE5DUiA3N0MzMkJMVCkgICAgICAqLworI2RlZmluZSBGQl9BQ0NFTF9TM19WSVJHRQk1CS8qIEN5YmVydmlzaW9uNjQvM0QgKFMzIFZpUkdFKQkqLworI2RlZmluZSBGQl9BQ0NFTF9BVElfTUFDSDY0R1gJNgkvKiBBVEkgTWFjaCA2NEdYIGZhbWlseQkJKi8KKyNkZWZpbmUgRkJfQUNDRUxfREVDX1RHQQk3CS8qIERFQyAyMTAzMCBUR0EJCSovCisjZGVmaW5lIEZCX0FDQ0VMX0FUSV9NQUNINjRDVAk4CS8qIEFUSSBNYWNoIDY0Q1QgZmFtaWx5CQkqLworI2RlZmluZSBGQl9BQ0NFTF9BVElfTUFDSDY0VlQJOQkvKiBBVEkgTWFjaCA2NENUIGZhbWlseSBWVCBjbGFzcyAqLworI2RlZmluZSBGQl9BQ0NFTF9BVElfTUFDSDY0R1QJMTAJLyogQVRJIE1hY2ggNjRDVCBmYW1pbHkgR1QgY2xhc3MgKi8KKyNkZWZpbmUgRkJfQUNDRUxfU1VOX0NSRUFUT1IJMTEJLyogU3VuIENyZWF0b3IvQ3JlYXRvcjNECSovCisjZGVmaW5lIEZCX0FDQ0VMX1NVTl9DR1NJWAkxMgkvKiBTdW4gY2c2CQkJKi8KKyNkZWZpbmUgRkJfQUNDRUxfU1VOX0xFTwkxMwkvKiBTdW4gbGVvL3p4CQkJKi8KKyNkZWZpbmUgRkJfQUNDRUxfSU1TX1RXSU5UVVJCTwkxNAkvKiBJTVMgVHdpbiBUdXJibwkJKi8KKyNkZWZpbmUgRkJfQUNDRUxfM0RMQUJTX1BFUk1FRElBMiAxNQkvKiAzRGxhYnMgUGVybWVkaWEgMgkJKi8KKyNkZWZpbmUgRkJfQUNDRUxfTUFUUk9YX01HQTIwNjRXIDE2CS8qIE1hdHJveCBNR0EyMDY0VyAoTWlsbGVuaXVtKQkqLworI2RlZmluZSBGQl9BQ0NFTF9NQVRST1hfTUdBMTA2NFNHIDE3CS8qIE1hdHJveCBNR0ExMDY0U0cgKE15c3RpcXVlKQkqLworI2RlZmluZSBGQl9BQ0NFTF9NQVRST1hfTUdBMjE2NFcgMTgJLyogTWF0cm94IE1HQTIxNjRXIChNaWxsZW5pdW0gSUkpICovCisjZGVmaW5lIEZCX0FDQ0VMX01BVFJPWF9NR0EyMTY0V19BR1AgMTkJLyogTWF0cm94IE1HQTIxNjRXIChNaWxsZW5pdW0gSUkpICovCisjZGVmaW5lIEZCX0FDQ0VMX01BVFJPWF9NR0FHMTAwCTIwCS8qIE1hdHJveCBHMTAwIChQcm9kdWN0aXZhIEcxMDApICovCisjZGVmaW5lIEZCX0FDQ0VMX01BVFJPWF9NR0FHMjAwCTIxCS8qIE1hdHJveCBHMjAwIChNeXN0LCBNaWxsLCAuLi4pICovCisjZGVmaW5lIEZCX0FDQ0VMX1NVTl9DRzE0CTIyCS8qIFN1biBjZ2ZvdXJ0ZWVuCQkgKi8KKyNkZWZpbmUgRkJfQUNDRUxfU1VOX0JXVFdPCTIzCS8qIFN1biBid3R3bwkJCSovCisjZGVmaW5lIEZCX0FDQ0VMX1NVTl9DR1RIUkVFCTI0CS8qIFN1biBjZ3RocmVlCQkJKi8KKyNkZWZpbmUgRkJfQUNDRUxfU1VOX1RDWAkyNQkvKiBTdW4gdGN4CQkJKi8KKyNkZWZpbmUgRkJfQUNDRUxfTUFUUk9YX01HQUc0MDAJMjYJLyogTWF0cm94IEc0MDAJCQkqLworI2RlZmluZSBGQl9BQ0NFTF9OVjMJCTI3CS8qIG5WaWRpYSBSSVZBIDEyOCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfTlY0CQkyOAkvKiBuVmlkaWEgUklWQSBUTlQJCSovCisjZGVmaW5lIEZCX0FDQ0VMX05WNQkJMjkJLyogblZpZGlhIFJJVkEgVE5UMgkJKi8KKyNkZWZpbmUgRkJfQUNDRUxfQ1RfNjU1NXgJMzAJLyogQyZUIDY1NTV4CQkJKi8KKyNkZWZpbmUgRkJfQUNDRUxfM0RGWF9CQU5TSEVFCTMxCS8qIDNEZnggQmFuc2hlZQkJCSovCisjZGVmaW5lIEZCX0FDQ0VMX0FUSV9SQUdFMTI4CTMyCS8qIEFUSSBSYWdlMTI4IGZhbWlseQkJKi8KKyNkZWZpbmUgRkJfQUNDRUxfSUdTX0NZQkVSMjAwMAkzMwkvKiBDeWJlclBybyAyMDAwCQkqLworI2RlZmluZSBGQl9BQ0NFTF9JR1NfQ1lCRVIyMDEwCTM0CS8qIEN5YmVyUHJvIDIwMTAJCSovCisjZGVmaW5lIEZCX0FDQ0VMX0lHU19DWUJFUjUwMDAJMzUJLyogQ3liZXJQcm8gNTAwMAkJKi8KKyNkZWZpbmUgRkJfQUNDRUxfU0lTX0dMQU1PVVIgICAgMzYJLyogU2lTIDMwMC82MzAvNTQwICAgICAgICAgICAgICAqLworI2RlZmluZSBGQl9BQ0NFTF8zRExBQlNfUEVSTUVESUEzIDM3CS8qIDNEbGFicyBQZXJtZWRpYSAzCQkqLworI2RlZmluZSBGQl9BQ0NFTF9BVElfUkFERU9OCTM4CS8qIEFUSSBSYWRlb24gZmFtaWx5CQkqLworI2RlZmluZSBGQl9BQ0NFTF9JODEwICAgICAgICAgICAzOSAgICAgIC8qIEludGVsIDgxMC84MTUgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfU0lTX0dMQU1PVVJfMiAgNDAJLyogU2lTIDMxNSwgNjUwLCA3NDAJCSovCisjZGVmaW5lIEZCX0FDQ0VMX1NJU19YQUJSRSAgICAgIDQxCS8qIFNpUyAzMzAgKCJYYWJyZSIpCQkqLworI2RlZmluZSBGQl9BQ0NFTF9JODMwICAgICAgICAgICA0MiAgICAgIC8qIEludGVsIDgzME0vODQ1Ry84NXgvODY1RyAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfTlZfMTAgICAgICAgICAgNDMgICAgICAvKiBuVmlkaWEgQXJjaCAxMCAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX05WXzIwICAgICAgICAgIDQ0ICAgICAgLyogblZpZGlhIEFyY2ggMjAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGQl9BQ0NFTF9OVl8zMCAgICAgICAgICA0NSAgICAgIC8qIG5WaWRpYSBBcmNoIDMwICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfTlZfNDAgICAgICAgICAgNDYgICAgICAvKiBuVmlkaWEgQXJjaCA0MCAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX1hHSV9WT0xBUklfVgk0NwkvKiBYR0kgVm9sYXJpIFYzWFQsIFY1LCBWOCAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX1hHSV9WT0xBUklfWgk0OAkvKiBYR0kgVm9sYXJpIFo3ICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX09NQVAxNjEwCTQ5CS8qIFRJIE9NQVAxNnh4ICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfVFJJREVOVF9UR1VJCTUwCS8qIFRyaWRlbnQgVEdVSQkJCSovCisjZGVmaW5lIEZCX0FDQ0VMX1RSSURFTlRfM0RJTUFHRSA1MQkvKiBUcmlkZW50IDNESW1hZ2UJCSovCisjZGVmaW5lIEZCX0FDQ0VMX1RSSURFTlRfQkxBREUzRCA1MgkvKiBUcmlkZW50IEJsYWRlM0QJCSovCisjZGVmaW5lIEZCX0FDQ0VMX1RSSURFTlRfQkxBREVYUCA1MwkvKiBUcmlkZW50IEJsYWRlWFAJCSovCisjZGVmaW5lIEZCX0FDQ0VMX0NJUlJVU19BTFBJTkUgICA1MwkvKiBDaXJydXMgTG9naWMgNTQzeC81NDR4LzU0ODAJKi8KKyNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMDcwIDkwCS8qIE5lb01hZ2ljIE5NMjA3MCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMDkwIDkxCS8qIE5lb01hZ2ljIE5NMjA5MCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMDkzIDkyCS8qIE5lb01hZ2ljIE5NMjA5MyAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMDk3IDkzCS8qIE5lb01hZ2ljIE5NMjA5NyAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMTYwIDk0CS8qIE5lb01hZ2ljIE5NMjE2MCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMjAwIDk1CS8qIE5lb01hZ2ljIE5NMjIwMCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMjMwIDk2CS8qIE5lb01hZ2ljIE5NMjIzMCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMzYwIDk3CS8qIE5lb01hZ2ljIE5NMjM2MCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMzgwIDk4CS8qIE5lb01hZ2ljIE5NMjM4MCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfUFhBM1hYCQkgOTkJLyogUFhBM3h4CQkJKi8KKworI2RlZmluZSBGQl9BQ0NFTF9TQVZBR0U0ICAgICAgICAweDgwCS8qIFMzIFNhdmFnZTQgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfU0FWQUdFM0QgICAgICAgMHg4MQkvKiBTMyBTYXZhZ2UzRCAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX1NBVkFHRTNEX01WICAgIDB4ODIJLyogUzMgU2F2YWdlM0QtTVYgICAgICAgICAgICAgICAqLworI2RlZmluZSBGQl9BQ0NFTF9TQVZBR0UyMDAwICAgICAweDgzCS8qIFMzIFNhdmFnZTIwMDAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfU0FWQUdFX01YX01WICAgMHg4NAkvKiBTMyBTYXZhZ2UvTVgtTVYgICAgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX1NBVkFHRV9NWCAgICAgIDB4ODUJLyogUzMgU2F2YWdlL01YICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGQl9BQ0NFTF9TQVZBR0VfSVhfTVYgICAweDg2CS8qIFMzIFNhdmFnZS9JWC1NViAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfU0FWQUdFX0lYICAgICAgMHg4NwkvKiBTMyBTYXZhZ2UvSVggICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX1BST1NBVkFHRV9QTSAgIDB4ODgJLyogUzMgUHJvU2F2YWdlIFBNMTMzICAgICAgICAgICAqLworI2RlZmluZSBGQl9BQ0NFTF9QUk9TQVZBR0VfS00gICAweDg5CS8qIFMzIFByb1NhdmFnZSBLTTEzMyAgICAgICAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfUzNUV0lTVEVSX1AgICAgMHg4YQkvKiBTMyBUd2lzdGVyICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX1MzVFdJU1RFUl9LICAgIDB4OGIJLyogUzMgVHdpc3RlcksgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGQl9BQ0NFTF9TVVBFUlNBVkFHRSAgICAweDhjICAgIC8qIFMzIFN1cGVyc2F2YWdlICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkJfQUNDRUxfUFJPU0FWQUdFX0REUiAgMHg4ZAkvKiBTMyBQcm9TYXZhZ2UgRERSICAgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX1BST1NBVkFHRV9ERFJLIDB4OGUJLyogUzMgUHJvU2F2YWdlIEREUi1LICAgICAgICAgICAqLworCitzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8geworCWNoYXIgaWRbMTZdOwkJCS8qIGlkZW50aWZpY2F0aW9uIHN0cmluZyBlZyAiVFQgQnVpbHRpbiIgKi8KKwl1bnNpZ25lZCBsb25nIHNtZW1fc3RhcnQ7CS8qIFN0YXJ0IG9mIGZyYW1lIGJ1ZmZlciBtZW0gKi8KKwkJCQkJLyogKHBoeXNpY2FsIGFkZHJlc3MpICovCisJX191MzIgc21lbV9sZW47CQkJLyogTGVuZ3RoIG9mIGZyYW1lIGJ1ZmZlciBtZW0gKi8KKwlfX3UzMiB0eXBlOwkJCS8qIHNlZSBGQl9UWVBFXyoJCSovCisJX191MzIgdHlwZV9hdXg7CQkJLyogSW50ZXJsZWF2ZSBmb3IgaW50ZXJsZWF2ZWQgUGxhbmVzICovCisJX191MzIgdmlzdWFsOwkJCS8qIHNlZSBGQl9WSVNVQUxfKgkJKi8gCisJX191MTYgeHBhbnN0ZXA7CQkJLyogemVybyBpZiBubyBoYXJkd2FyZSBwYW5uaW5nICAqLworCV9fdTE2IHlwYW5zdGVwOwkJCS8qIHplcm8gaWYgbm8gaGFyZHdhcmUgcGFubmluZyAgKi8KKwlfX3UxNiB5d3JhcHN0ZXA7CQkvKiB6ZXJvIGlmIG5vIGhhcmR3YXJlIHl3cmFwICAgICovCisJX191MzIgbGluZV9sZW5ndGg7CQkvKiBsZW5ndGggb2YgYSBsaW5lIGluIGJ5dGVzICAgICovCisJdW5zaWduZWQgbG9uZyBtbWlvX3N0YXJ0OwkvKiBTdGFydCBvZiBNZW1vcnkgTWFwcGVkIEkvTyAgICovCisJCQkJCS8qIChwaHlzaWNhbCBhZGRyZXNzKSAqLworCV9fdTMyIG1taW9fbGVuOwkJCS8qIExlbmd0aCBvZiBNZW1vcnkgTWFwcGVkIEkvTyAgKi8KKwlfX3UzMiBhY2NlbDsJCQkvKiBJbmRpY2F0ZSB0byBkcml2ZXIgd2hpY2gJKi8KKwkJCQkJLyogIHNwZWNpZmljIGNoaXAvY2FyZCB3ZSBoYXZlCSovCisJX191MTYgcmVzZXJ2ZWRbM107CQkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIGNvbXBhdGliaWxpdHkgKi8KK307CisKKy8qIEludGVycHJldGF0aW9uIG9mIG9mZnNldCBmb3IgY29sb3IgZmllbGRzOiBBbGwgb2Zmc2V0cyBhcmUgZnJvbSB0aGUgcmlnaHQsCisgKiBpbnNpZGUgYSAicGl4ZWwiIHZhbHVlLCB3aGljaCBpcyBleGFjdGx5ICdiaXRzX3Blcl9waXhlbCcgd2lkZSAobWVhbnM6IHlvdQorICogY2FuIHVzZSB0aGUgb2Zmc2V0IGFzIHJpZ2h0IGFyZ3VtZW50IHRvIDw8KS4gQSBwaXhlbCBhZnRlcndhcmRzIGlzIGEgYml0CisgKiBzdHJlYW0gYW5kIGlzIHdyaXR0ZW4gdG8gdmlkZW8gbWVtb3J5IGFzIHRoYXQgdW5tb2RpZmllZC4KKyAqCisgKiBGb3IgcHNldWRvY29sb3I6IG9mZnNldCBhbmQgbGVuZ3RoIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGNvbG9yCisgKiBjb21wb25lbnRzLiBPZmZzZXQgc3BlY2lmaWVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0CisgKiBvZiB0aGUgcGFsbGV0dGUgaW5kZXggaW4gYSBwaXhlbCB2YWx1ZS4gTGVuZ3RoIGluZGljYXRlcyB0aGUgbnVtYmVyCisgKiBvZiBhdmFpbGFibGUgcGFsZXR0ZSBlbnRyaWVzIChpLmUuICMgb2YgZW50cmllcyA9IDEgPDwgbGVuZ3RoKS4KKyAqLworc3RydWN0IGZiX2JpdGZpZWxkIHsKKwlfX3UzMiBvZmZzZXQ7CQkJLyogYmVnaW5uaW5nIG9mIGJpdGZpZWxkCSovCisJX191MzIgbGVuZ3RoOwkJCS8qIGxlbmd0aCBvZiBiaXRmaWVsZAkJKi8KKwlfX3UzMiBtc2JfcmlnaHQ7CQkvKiAhPSAwIDogTW9zdCBzaWduaWZpY2FudCBiaXQgaXMgKi8gCisJCQkJCS8qIHJpZ2h0ICovIAorfTsKKworI2RlZmluZSBGQl9OT05TVERfSEFNCQkxCS8qIEhvbGQtQW5kLU1vZGlmeSAoSEFNKSAgICAgICAgKi8KKyNkZWZpbmUgRkJfTk9OU1REX1JFVl9QSVhfSU5fQgkyCS8qIG9yZGVyIG9mIHBpeGVscyBpbiBlYWNoIGJ5dGUgaXMgcmV2ZXJzZWQgKi8KKworI2RlZmluZSBGQl9BQ1RJVkFURV9OT1cJCTAJLyogc2V0IHZhbHVlcyBpbW1lZGlhdGVseSAob3IgdmJsKSovCisjZGVmaW5lIEZCX0FDVElWQVRFX05YVE9QRU4JMQkvKiBhY3RpdmF0ZSBvbiBuZXh0IG9wZW4JKi8KKyNkZWZpbmUgRkJfQUNUSVZBVEVfVEVTVAkyCS8qIGRvbid0IHNldCwgcm91bmQgdXAgaW1wb3NzaWJsZSAqLworI2RlZmluZSBGQl9BQ1RJVkFURV9NQVNLICAgICAgIDE1CisJCQkJCS8qIHZhbHVlcwkJCSovCisjZGVmaW5lIEZCX0FDVElWQVRFX1ZCTAkgICAgICAgMTYJLyogYWN0aXZhdGUgdmFsdWVzIG9uIG5leHQgdmJsICAqLworI2RlZmluZSBGQl9DSEFOR0VfQ01BUF9WQkwgICAgIDMyCS8qIGNoYW5nZSBjb2xvcm1hcCBvbiB2YmwJKi8KKyNkZWZpbmUgRkJfQUNUSVZBVEVfQUxMCSAgICAgICA2NAkvKiBjaGFuZ2UgYWxsIFZDcyBvbiB0aGlzIGZiCSovCisjZGVmaW5lIEZCX0FDVElWQVRFX0ZPUkNFICAgICAxMjgJLyogZm9yY2UgYXBwbHkgZXZlbiB3aGVuIG5vIGNoYW5nZSovCisjZGVmaW5lIEZCX0FDVElWQVRFX0lOVl9NT0RFICAyNTYgICAgICAgLyogaW52YWxpZGF0ZSB2aWRlb21vZGUgKi8KKworI2RlZmluZSBGQl9BQ0NFTEZfVEVYVAkJMQkvKiAoT0JTT0xFVEUpIHNlZSBmYl9pbmZvLmZsYWdzIGFuZCB2Y19tb2RlICovCisKKyNkZWZpbmUgRkJfU1lOQ19IT1JfSElHSF9BQ1QJMQkvKiBob3Jpem9udGFsIHN5bmMgaGlnaCBhY3RpdmUJKi8KKyNkZWZpbmUgRkJfU1lOQ19WRVJUX0hJR0hfQUNUCTIJLyogdmVydGljYWwgc3luYyBoaWdoIGFjdGl2ZQkqLworI2RlZmluZSBGQl9TWU5DX0VYVAkJNAkvKiBleHRlcm5hbCBzeW5jCQkqLworI2RlZmluZSBGQl9TWU5DX0NPTVBfSElHSF9BQ1QJOAkvKiBjb21wb3NpdGUgc3luYyBoaWdoIGFjdGl2ZSAgICovCisjZGVmaW5lIEZCX1NZTkNfQlJPQURDQVNUCTE2CS8qIGJyb2FkY2FzdCB2aWRlbyB0aW1pbmdzICAgICAgKi8KKwkJCQkJLyogdnRvdGFsID0gMTQ0ZC8yODhuLzU3NmkgPT4gUEFMICAqLworCQkJCQkvKiB2dG90YWwgPSAxMjFkLzI0Mm4vNDg0aSA9PiBOVFNDICovCisjZGVmaW5lIEZCX1NZTkNfT05fR1JFRU4JMzIJLyogc3luYyBvbiBncmVlbiAqLworCisjZGVmaW5lIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQgIDAJLyogbm9uIGludGVybGFjZWQgKi8KKyNkZWZpbmUgRkJfVk1PREVfSU5URVJMQUNFRAkxCS8qIGludGVybGFjZWQJKi8KKyNkZWZpbmUgRkJfVk1PREVfRE9VQkxFCQkyCS8qIGRvdWJsZSBzY2FuICovCisjZGVmaW5lIEZCX1ZNT0RFX09ERF9GTERfRklSU1QJNAkvKiBpbnRlcmxhY2VkOiB0b3AgbGluZSBmaXJzdCAqLworI2RlZmluZSBGQl9WTU9ERV9NQVNLCQkyNTUKKworI2RlZmluZSBGQl9WTU9ERV9ZV1JBUAkJMjU2CS8qIHl3cmFwIGluc3RlYWQgb2YgcGFubmluZyAgICAgKi8KKyNkZWZpbmUgRkJfVk1PREVfU01PT1RIX1hQQU4JNTEyCS8qIHNtb290aCB4cGFuIHBvc3NpYmxlIChpbnRlcm5hbGx5IHVzZWQpICovCisjZGVmaW5lIEZCX1ZNT0RFX0NPTlVQREFURQk1MTIJLyogZG9uJ3QgdXBkYXRlIHgveW9mZnNldAkqLworCisvKgorICogRGlzcGxheSByb3RhdGlvbiBzdXBwb3J0CisgKi8KKyNkZWZpbmUgRkJfUk9UQVRFX1VSICAgICAgMAorI2RlZmluZSBGQl9ST1RBVEVfQ1cgICAgICAxCisjZGVmaW5lIEZCX1JPVEFURV9VRCAgICAgIDIKKyNkZWZpbmUgRkJfUk9UQVRFX0NDVyAgICAgMworCisjZGVmaW5lIFBJQ09TMktIWihhKSAoMTAwMDAwMDAwMFVMLyhhKSkKKyNkZWZpbmUgS0haMlBJQ09TKGEpICgxMDAwMDAwMDAwVUwvKGEpKQorCitzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8geworCV9fdTMyIHhyZXM7CQkJLyogdmlzaWJsZSByZXNvbHV0aW9uCQkqLworCV9fdTMyIHlyZXM7CisJX191MzIgeHJlc192aXJ0dWFsOwkJLyogdmlydHVhbCByZXNvbHV0aW9uCQkqLworCV9fdTMyIHlyZXNfdmlydHVhbDsKKwlfX3UzMiB4b2Zmc2V0OwkJCS8qIG9mZnNldCBmcm9tIHZpcnR1YWwgdG8gdmlzaWJsZSAqLworCV9fdTMyIHlvZmZzZXQ7CQkJLyogcmVzb2x1dGlvbgkJCSovCisKKwlfX3UzMiBiaXRzX3Blcl9waXhlbDsJCS8qIGd1ZXNzIHdoYXQJCQkqLworCV9fdTMyIGdyYXlzY2FsZTsJCS8qICE9IDAgR3JheWxldmVscyBpbnN0ZWFkIG9mIGNvbG9ycyAqLworCisJc3RydWN0IGZiX2JpdGZpZWxkIHJlZDsJCS8qIGJpdGZpZWxkIGluIGZiIG1lbSBpZiB0cnVlIGNvbG9yLCAqLworCXN0cnVjdCBmYl9iaXRmaWVsZCBncmVlbjsJLyogZWxzZSBvbmx5IGxlbmd0aCBpcyBzaWduaWZpY2FudCAqLworCXN0cnVjdCBmYl9iaXRmaWVsZCBibHVlOworCXN0cnVjdCBmYl9iaXRmaWVsZCB0cmFuc3A7CS8qIHRyYW5zcGFyZW5jeQkJCSovCQorCisJX191MzIgbm9uc3RkOwkJCS8qICE9IDAgTm9uIHN0YW5kYXJkIHBpeGVsIGZvcm1hdCAqLworCisJX191MzIgYWN0aXZhdGU7CQkJLyogc2VlIEZCX0FDVElWQVRFXyoJCSovCisKKwlfX3UzMiBoZWlnaHQ7CQkJLyogaGVpZ2h0IG9mIHBpY3R1cmUgaW4gbW0gICAgKi8KKwlfX3UzMiB3aWR0aDsJCQkvKiB3aWR0aCBvZiBwaWN0dXJlIGluIG1tICAgICAqLworCisJX191MzIgYWNjZWxfZmxhZ3M7CQkvKiAoT0JTT0xFVEUpIHNlZSBmYl9pbmZvLmZsYWdzICovCisKKwkvKiBUaW1pbmc6IEFsbCB2YWx1ZXMgaW4gcGl4Y2xvY2tzLCBleGNlcHQgcGl4Y2xvY2sgKG9mIGNvdXJzZSkgKi8KKwlfX3UzMiBwaXhjbG9jazsJCQkvKiBwaXhlbCBjbG9jayBpbiBwcyAocGljbyBzZWNvbmRzKSAqLworCV9fdTMyIGxlZnRfbWFyZ2luOwkJLyogdGltZSBmcm9tIHN5bmMgdG8gcGljdHVyZQkqLworCV9fdTMyIHJpZ2h0X21hcmdpbjsJCS8qIHRpbWUgZnJvbSBwaWN0dXJlIHRvIHN5bmMJKi8KKwlfX3UzMiB1cHBlcl9tYXJnaW47CQkvKiB0aW1lIGZyb20gc3luYyB0byBwaWN0dXJlCSovCisJX191MzIgbG93ZXJfbWFyZ2luOworCV9fdTMyIGhzeW5jX2xlbjsJCS8qIGxlbmd0aCBvZiBob3Jpem9udGFsIHN5bmMJKi8KKwlfX3UzMiB2c3luY19sZW47CQkvKiBsZW5ndGggb2YgdmVydGljYWwgc3luYwkqLworCV9fdTMyIHN5bmM7CQkJLyogc2VlIEZCX1NZTkNfKgkJKi8KKwlfX3UzMiB2bW9kZTsJCQkvKiBzZWUgRkJfVk1PREVfKgkJKi8KKwlfX3UzMiByb3RhdGU7CQkJLyogYW5nbGUgd2Ugcm90YXRlIGNvdW50ZXIgY2xvY2t3aXNlICovCisJX191MzIgcmVzZXJ2ZWRbNV07CQkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIGNvbXBhdGliaWxpdHkgKi8KK307CisKK3N0cnVjdCBmYl9jbWFwIHsKKwlfX3UzMiBzdGFydDsJCQkvKiBGaXJzdCBlbnRyeQkqLworCV9fdTMyIGxlbjsJCQkvKiBOdW1iZXIgb2YgZW50cmllcyAqLworCV9fdTE2ICpyZWQ7CQkJLyogUmVkIHZhbHVlcwkqLworCV9fdTE2ICpncmVlbjsKKwlfX3UxNiAqYmx1ZTsKKwlfX3UxNiAqdHJhbnNwOwkJCS8qIHRyYW5zcGFyZW5jeSwgY2FuIGJlIE5VTEwgKi8KK307CisKK3N0cnVjdCBmYl9jb24yZmJtYXAgeworCV9fdTMyIGNvbnNvbGU7CisJX191MzIgZnJhbWVidWZmZXI7Cit9OworCisvKiBWRVNBIEJsYW5raW5nIExldmVscyAqLworI2RlZmluZSBWRVNBX05PX0JMQU5LSU5HICAgICAgICAwCisjZGVmaW5lIFZFU0FfVlNZTkNfU1VTUEVORCAgICAgIDEKKyNkZWZpbmUgVkVTQV9IU1lOQ19TVVNQRU5EICAgICAgMgorI2RlZmluZSBWRVNBX1BPV0VSRE9XTiAgICAgICAgICAzCisKKworZW51bSB7CisJLyogc2NyZWVuOiB1bmJsYW5rZWQsIGhzeW5jOiBvbiwgIHZzeW5jOiBvbiAqLworCUZCX0JMQU5LX1VOQkxBTksgICAgICAgPSBWRVNBX05PX0JMQU5LSU5HLAorCisJLyogc2NyZWVuOiBibGFua2VkLCAgIGhzeW5jOiBvbiwgIHZzeW5jOiBvbiAqLworCUZCX0JMQU5LX05PUk1BTCAgICAgICAgPSBWRVNBX05PX0JMQU5LSU5HICsgMSwKKworCS8qIHNjcmVlbjogYmxhbmtlZCwgICBoc3luYzogb24sICB2c3luYzogb2ZmICovCisJRkJfQkxBTktfVlNZTkNfU1VTUEVORCA9IFZFU0FfVlNZTkNfU1VTUEVORCArIDEsCisKKwkvKiBzY3JlZW46IGJsYW5rZWQsICAgaHN5bmM6IG9mZiwgdnN5bmM6IG9uICovCisJRkJfQkxBTktfSFNZTkNfU1VTUEVORCA9IFZFU0FfSFNZTkNfU1VTUEVORCArIDEsCisKKwkvKiBzY3JlZW46IGJsYW5rZWQsICAgaHN5bmM6IG9mZiwgdnN5bmM6IG9mZiAqLworCUZCX0JMQU5LX1BPV0VSRE9XTiAgICAgPSBWRVNBX1BPV0VSRE9XTiArIDEKK307CisKKyNkZWZpbmUgRkJfVkJMQU5LX1ZCTEFOS0lORwkweDAwMQkvKiBjdXJyZW50bHkgaW4gYSB2ZXJ0aWNhbCBibGFuayAqLworI2RlZmluZSBGQl9WQkxBTktfSEJMQU5LSU5HCTB4MDAyCS8qIGN1cnJlbnRseSBpbiBhIGhvcml6b250YWwgYmxhbmsgKi8KKyNkZWZpbmUgRkJfVkJMQU5LX0hBVkVfVkJMQU5LCTB4MDA0CS8qIHZlcnRpY2FsIGJsYW5rcyBjYW4gYmUgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgRkJfVkJMQU5LX0hBVkVfSEJMQU5LCTB4MDA4CS8qIGhvcml6b250YWwgYmxhbmtzIGNhbiBiZSBkZXRlY3RlZCAqLworI2RlZmluZSBGQl9WQkxBTktfSEFWRV9DT1VOVAkweDAxMAkvKiBnbG9iYWwgcmV0cmFjZSBjb3VudGVyIGlzIGF2YWlsYWJsZSAqLworI2RlZmluZSBGQl9WQkxBTktfSEFWRV9WQ09VTlQJMHgwMjAJLyogdGhlIHZjb3VudCBmaWVsZCBpcyB2YWxpZCAqLworI2RlZmluZSBGQl9WQkxBTktfSEFWRV9IQ09VTlQJMHgwNDAJLyogdGhlIGhjb3VudCBmaWVsZCBpcyB2YWxpZCAqLworI2RlZmluZSBGQl9WQkxBTktfVlNZTkNJTkcJMHgwODAJLyogY3VycmVudGx5IGluIGEgdnN5bmMgKi8KKyNkZWZpbmUgRkJfVkJMQU5LX0hBVkVfVlNZTkMJMHgxMDAJLyogdmVyaWNhbCBzeW5jcyBjYW4gYmUgZGV0ZWN0ZWQgKi8KKworc3RydWN0IGZiX3ZibGFuayB7CisJX191MzIgZmxhZ3M7CQkJLyogRkJfVkJMQU5LIGZsYWdzICovCisJX191MzIgY291bnQ7CQkJLyogY291bnRlciBvZiByZXRyYWNlcyBzaW5jZSBib290ICovCisJX191MzIgdmNvdW50OwkJCS8qIGN1cnJlbnQgc2NhbmxpbmUgcG9zaXRpb24gKi8KKwlfX3UzMiBoY291bnQ7CQkJLyogY3VycmVudCBzY2FuZG90IHBvc2l0aW9uICovCisJX191MzIgcmVzZXJ2ZWRbNF07CQkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIGNvbXBhdGliaWxpdHkgKi8KK307CisKKy8qIEludGVybmFsIEhXIGFjY2VsICovCisjZGVmaW5lIFJPUF9DT1BZIDAKKyNkZWZpbmUgUk9QX1hPUiAgMQorCitzdHJ1Y3QgZmJfY29weWFyZWEgeworCV9fdTMyIGR4OworCV9fdTMyIGR5OworCV9fdTMyIHdpZHRoOworCV9fdTMyIGhlaWdodDsKKwlfX3UzMiBzeDsKKwlfX3UzMiBzeTsKK307CisKK3N0cnVjdCBmYl9maWxscmVjdCB7CisJX191MzIgZHg7CS8qIHNjcmVlbi1yZWxhdGl2ZSAqLworCV9fdTMyIGR5OworCV9fdTMyIHdpZHRoOworCV9fdTMyIGhlaWdodDsKKwlfX3UzMiBjb2xvcjsKKwlfX3UzMiByb3A7Cit9OworCitzdHJ1Y3QgZmJfaW1hZ2UgeworCV9fdTMyIGR4OwkJLyogV2hlcmUgdG8gcGxhY2UgaW1hZ2UgKi8KKwlfX3UzMiBkeTsKKwlfX3UzMiB3aWR0aDsJCS8qIFNpemUgb2YgaW1hZ2UgKi8KKwlfX3UzMiBoZWlnaHQ7CisJX191MzIgZmdfY29sb3I7CQkvKiBPbmx5IHVzZWQgd2hlbiBhIG1vbm8gYml0bWFwICovCisJX191MzIgYmdfY29sb3I7CisJX191OCAgZGVwdGg7CQkvKiBEZXB0aCBvZiB0aGUgaW1hZ2UgKi8KKwljb25zdCBjaGFyICpkYXRhOwkvKiBQb2ludGVyIHRvIGltYWdlIGRhdGEgKi8KKwlzdHJ1Y3QgZmJfY21hcCBjbWFwOwkvKiBjb2xvciBtYXAgaW5mbyAqLworfTsKKworLyoKKyAqIGhhcmR3YXJlIGN1cnNvciBjb250cm9sCisgKi8KKworI2RlZmluZSBGQl9DVVJfU0VUSU1BR0UgMHgwMQorI2RlZmluZSBGQl9DVVJfU0VUUE9TICAgMHgwMgorI2RlZmluZSBGQl9DVVJfU0VUSE9UICAgMHgwNAorI2RlZmluZSBGQl9DVVJfU0VUQ01BUCAgMHgwOAorI2RlZmluZSBGQl9DVVJfU0VUU0hBUEUgMHgxMAorI2RlZmluZSBGQl9DVVJfU0VUU0laRQkweDIwCisjZGVmaW5lIEZCX0NVUl9TRVRBTEwgICAweEZGCisKK3N0cnVjdCBmYmN1cnBvcyB7CisJX191MTYgeCwgeTsKK307CisKK3N0cnVjdCBmYl9jdXJzb3IgeworCV9fdTE2IHNldDsJCS8qIHdoYXQgdG8gc2V0ICovCisJX191MTYgZW5hYmxlOwkJLyogY3Vyc29yIG9uL29mZiAqLworCV9fdTE2IHJvcDsJCS8qIGJpdG9wIG9wZXJhdGlvbiAqLworCWNvbnN0IGNoYXIgKm1hc2s7CS8qIGN1cnNvciBtYXNrIGJpdHMgKi8KKwlzdHJ1Y3QgZmJjdXJwb3MgaG90OwkvKiBjdXJzb3IgaG90IHNwb3QgKi8KKwlzdHJ1Y3QgZmJfaW1hZ2UJaW1hZ2U7CS8qIEN1cnNvciBpbWFnZSAqLworfTsKKworI2lmZGVmIENPTkZJR19GQl9CQUNLTElHSFQKKy8qIFNldHRpbmdzIGZvciB0aGUgZ2VuZXJpYyBiYWNrbGlnaHQgY29kZSAqLworI2RlZmluZSBGQl9CQUNLTElHSFRfTEVWRUxTCTEyOAorI2RlZmluZSBGQl9CQUNLTElHSFRfTUFYCTB4RkYKKyNlbmRpZgorCisKKyNlbmRpZiAvKiBfTElOVVhfRkJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2ZjbnRsLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZmNudGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDBjZmFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2ZjbnRsLmgKQEAgLTAsMCArMSw1MCBAQAorI2lmbmRlZiBfTElOVVhfRkNOVExfSAorI2RlZmluZSBfTElOVVhfRkNOVExfSAorCisjaW5jbHVkZSA8YXNtL2ZjbnRsLmg+CisKKyNkZWZpbmUgRl9TRVRMRUFTRQkoRl9MSU5VWF9TUEVDSUZJQ19CQVNFICsgMCkKKyNkZWZpbmUgRl9HRVRMRUFTRQkoRl9MSU5VWF9TUEVDSUZJQ19CQVNFICsgMSkKKworLyoKKyAqIENhbmNlbCBhIGJsb2NraW5nIHBvc2l4IGxvY2s7IGludGVybmFsIHVzZSBvbmx5IHVudGlsIHdlIGV4cG9zZSBhbgorICogYXN5bmNocm9ub3VzIGxvY2sgYXBpIHRvIHVzZXJzcGFjZToKKyAqLworI2RlZmluZSBGX0NBTkNFTExLCShGX0xJTlVYX1NQRUNJRklDX0JBU0UgKyA1KQorCisvKiBDcmVhdGUgYSBmaWxlIGRlc2NyaXB0b3Igd2l0aCBGRF9DTE9FWEVDIHNldC4gKi8KKyNkZWZpbmUgRl9EVVBGRF9DTE9FWEVDCShGX0xJTlVYX1NQRUNJRklDX0JBU0UgKyA2KQorCisvKgorICogUmVxdWVzdCBub2ZpY2F0aW9ucyBvbiBhIGRpcmVjdG9yeS4KKyAqIFNlZSBiZWxvdyBmb3IgZXZlbnRzIHRoYXQgbWF5IGJlIG5vdGlmaWVkLgorICovCisjZGVmaW5lIEZfTk9USUZZCShGX0xJTlVYX1NQRUNJRklDX0JBU0UrMikKKworLyoKKyAqIFNldCBhbmQgZ2V0IG9mIHBpcGUgcGFnZSBzaXplIGFycmF5CisgKi8KKyNkZWZpbmUgRl9TRVRQSVBFX1NaCShGX0xJTlVYX1NQRUNJRklDX0JBU0UgKyA3KQorI2RlZmluZSBGX0dFVFBJUEVfU1oJKEZfTElOVVhfU1BFQ0lGSUNfQkFTRSArIDgpCisKKy8qCisgKiBUeXBlcyBvZiBkaXJlY3Rvcnkgbm90aWZpY2F0aW9ucyB0aGF0IG1heSBiZSByZXF1ZXN0ZWQuCisgKi8KKyNkZWZpbmUgRE5fQUNDRVNTCTB4MDAwMDAwMDEJLyogRmlsZSBhY2Nlc3NlZCAqLworI2RlZmluZSBETl9NT0RJRlkJMHgwMDAwMDAwMgkvKiBGaWxlIG1vZGlmaWVkICovCisjZGVmaW5lIEROX0NSRUFURQkweDAwMDAwMDA0CS8qIEZpbGUgY3JlYXRlZCAqLworI2RlZmluZSBETl9ERUxFVEUJMHgwMDAwMDAwOAkvKiBGaWxlIHJlbW92ZWQgKi8KKyNkZWZpbmUgRE5fUkVOQU1FCTB4MDAwMDAwMTAJLyogRmlsZSByZW5hbWVkICovCisjZGVmaW5lIEROX0FUVFJJQgkweDAwMDAwMDIwCS8qIEZpbGUgY2hhbmdlZCBhdHRpYnV0ZXMgKi8KKyNkZWZpbmUgRE5fTVVMVElTSE9UCTB4ODAwMDAwMDAJLyogRG9uJ3QgcmVtb3ZlIG5vdGlmaWVyICovCisKKyNkZWZpbmUgQVRfRkRDV0QJCS0xMDAgICAgLyogU3BlY2lhbCB2YWx1ZSB1c2VkIHRvIGluZGljYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbmF0IHNob3VsZCB1c2UgdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JraW5nIGRpcmVjdG9yeS4gKi8KKyNkZWZpbmUgQVRfU1lNTElOS19OT0ZPTExPVwkweDEwMCAgIC8qIERvIG5vdCBmb2xsb3cgc3ltYm9saWMgbGlua3MuICAqLworI2RlZmluZSBBVF9SRU1PVkVESVIJCTB4MjAwICAgLyogUmVtb3ZlIGRpcmVjdG9yeSBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5raW5nIGZpbGUuICAqLworI2RlZmluZSBBVF9TWU1MSU5LX0ZPTExPVwkweDQwMCAgIC8qIEZvbGxvdyBzeW1ib2xpYyBsaW5rcy4gICovCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZmQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9mZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NDM3NWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZmQuaApAQCAtMCwwICsxLDM4MCBAQAorI2lmbmRlZiBfTElOVVhfRkRfSAorI2RlZmluZSBfTElOVVhfRkRfSAorCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworCisvKiBOZXcgZmlsZSBsYXlvdXQ6IE5vdyB0aGUgaW9jdGwgZGVmaW5pdGlvbnMgaW1tZWRpYXRlbHkgZm9sbG93IHRoZQorICogZGVmaW5pdGlvbnMgb2YgdGhlIHN0cnVjdHVyZXMgdGhhdCB0aGV5IHVzZSAqLworCisvKgorICogR2VvbWV0cnkKKyAqLworc3RydWN0IGZsb3BweV9zdHJ1Y3QgeworCXVuc2lnbmVkIGludAlzaXplLAkJLyogbnIgb2Ygc2VjdG9ycyB0b3RhbCAqLworCQkJc2VjdCwJCS8qIHNlY3RvcnMgcGVyIHRyYWNrICovCisJCQloZWFkLAkJLyogbnIgb2YgaGVhZHMgKi8KKwkJCXRyYWNrLAkJLyogbnIgb2YgdHJhY2tzICovCisJCQlzdHJldGNoOwkvKiBiaXQgMCAhPTAgbWVhbnMgZG91YmxlIHRyYWNrIHN0ZXBzICovCisJCQkJCS8qIGJpdCAxICE9IDAgbWVhbnMgc3dhcCBzaWRlcyAqLworCQkJCQkvKiBiaXRzIDIuLjkgZ2l2ZSB0aGUgZmlyc3Qgc2VjdG9yICovCisJCQkJCS8qICBudW1iZXIgKHRoZSBMU0IgaXMgZmxpcHBlZCkgKi8KKyNkZWZpbmUgRkRfU1RSRVRDSCAxCisjZGVmaW5lIEZEX1NXQVBTSURFUyAyCisjZGVmaW5lIEZEX1pFUk9CQVNFRCA0CisjZGVmaW5lIEZEX1NFQ1RCQVNFTUFTSyAweDNGQworI2RlZmluZSBGRF9NS1NFQ1RCQVNFKHMpICgoKHMpIF4gMSkgPDwgMikKKyNkZWZpbmUgRkRfU0VDVEJBU0UoZmxvcHB5KSAoKCgoZmxvcHB5KS0+c3RyZXRjaCAmIEZEX1NFQ1RCQVNFTUFTSykgPj4gMikgXiAxKQorCisJdW5zaWduZWQgY2hhcglnYXAsCQkvKiBnYXAxIHNpemUgKi8KKworCQkJcmF0ZSwJCS8qIGRhdGEgcmF0ZS4gfD0gMHg0MCBmb3IgcGVycGVuZGljdWxhciAqLworI2RlZmluZSBGRF8yTSAweDQKKyNkZWZpbmUgRkRfU0laRUNPREVNQVNLIDB4MzgKKyNkZWZpbmUgRkRfU0laRUNPREUoZmxvcHB5KSAoKCgoKGZsb3BweSktPnJhdGUmRkRfU0laRUNPREVNQVNLKT4+IDMpKyAyKSAlOCkKKyNkZWZpbmUgRkRfU0VDVFNJWkUoZmxvcHB5KSAoIChmbG9wcHkpLT5yYXRlICYgRkRfMk0gPyBcCisJCQkgICAgIDUxMiA6IDEyOCA8PCBGRF9TSVpFQ09ERShmbG9wcHkpICkKKyNkZWZpbmUgRkRfUEVSUCAweDQwCisKKwkJCXNwZWMxLAkJLyogc3RlcHBpbmcgcmF0ZSwgaGVhZCB1bmxvYWQgdGltZSAqLworCQkJZm10X2dhcDsJLyogZ2FwMiBzaXplICovCisJY29uc3QgY2hhcgkqIG5hbWU7IC8qIHVzZWQgb25seSBmb3IgcHJlZGVmaW5lZCBmb3JtYXRzICovCit9OworCisKKy8qIGNvbW1hbmRzIG5lZWRpbmcgd3JpdGUgYWNjZXNzIGhhdmUgMHg0MCBzZXQgKi8KKy8qIGNvbW1hbmRzIG5lZWRpbmcgc3VwZXIgdXNlciBhY2Nlc3MgaGF2ZSAweDgwIHNldCAqLworCisjZGVmaW5lIEZEQ0xSUFJNIF9JTygyLCAweDQxKQorLyogY2xlYXIgdXNlci1kZWZpbmVkIHBhcmFtZXRlcnMgKi8KKworI2RlZmluZSBGRFNFVFBSTSBfSU9XKDIsIDB4NDIsIHN0cnVjdCBmbG9wcHlfc3RydWN0KSAKKyNkZWZpbmUgRkRTRVRNRURJQVBSTSBGRFNFVFBSTQorLyogc2V0IHVzZXItZGVmaW5lZCBwYXJhbWV0ZXJzIGZvciBjdXJyZW50IG1lZGlhICovCisKKyNkZWZpbmUgRkRERUZQUk0gX0lPVygyLCAweDQzLCBzdHJ1Y3QgZmxvcHB5X3N0cnVjdCkgCisjZGVmaW5lIEZER0VUUFJNIF9JT1IoMiwgMHgwNCwgc3RydWN0IGZsb3BweV9zdHJ1Y3QpCisjZGVmaW5lIEZEREVGTUVESUFQUk0gRkRERUZQUk0KKyNkZWZpbmUgRkRHRVRNRURJQVBSTSBGREdFVFBSTQorLyogc2V0L2dldCBkaXNrIHBhcmFtZXRlcnMgKi8KKworCisjZGVmaW5lCUZETVNHT04gIF9JTygyLDB4NDUpCisjZGVmaW5lCUZETVNHT0ZGIF9JTygyLDB4NDYpCisvKiBpc3N1ZS9kb24ndCBpc3N1ZSBrZXJuZWwgbWVzc2FnZXMgb24gbWVkaWEgdHlwZSBjaGFuZ2UgKi8KKworCisvKiAKKyAqIEZvcm1hdHRpbmcgKG9ic29sZXRlKQorICovCisjZGVmaW5lIEZEX0ZJTExfQllURSAweEY2IC8qIGZvcm1hdCBmaWxsIGJ5dGUuICovCisKK3N0cnVjdCBmb3JtYXRfZGVzY3IgeworCXVuc2lnbmVkIGludCBkZXZpY2UsaGVhZCx0cmFjazsKK307CisKKyNkZWZpbmUgRkRGTVRCRUcgX0lPKDIsMHg0NykKKy8qIGJlZ2luIGZvcm1hdHRpbmcgYSBkaXNrICovCisjZGVmaW5lCUZERk1UVFJLIF9JT1coMiwweDQ4LCBzdHJ1Y3QgZm9ybWF0X2Rlc2NyKQorLyogZm9ybWF0IHRoZSBzcGVjaWZpZWQgdHJhY2sgKi8KKyNkZWZpbmUgRkRGTVRFTkQgX0lPKDIsMHg0OSkKKy8qIGVuZCBmb3JtYXR0aW5nIGEgZGlzayAqLworCisKKy8qCisgKiBFcnJvciB0aHJlc2hvbGRzCisgKi8KK3N0cnVjdCBmbG9wcHlfbWF4X2Vycm9ycyB7CisJdW5zaWduZWQgaW50CisJICBhYm9ydCwgICAgICAvKiBudW1iZXIgb2YgZXJyb3JzIHRvIGJlIHJlYWNoZWQgYmVmb3JlIGFib3J0aW5nICovCisJICByZWFkX3RyYWNrLCAvKiBtYXhpbWFsIG51bWJlciBvZiBlcnJvcnMgcGVybWl0dGVkIHRvIHJlYWQgYW4KKwkJICAgICAgICogZW50aXJlIHRyYWNrIGF0IG9uY2UgKi8KKwkgIHJlc2V0LCAgICAgIC8qIG1heGltYWwgbnVtYmVyIG9mIGVycm9ycyBiZWZvcmUgYSByZXNldCBpcyB0cmllZCAqLworCSAgcmVjYWwsICAgICAgLyogbWF4aW1hbCBudW1iZXIgb2YgZXJyb3JzIGJlZm9yZSBhIHJlY2FsaWJyYXRlIGlzCisJCSAgICAgICAqIHRyaWVkICovCisKKwkgIC8qCisJICAgKiBUaHJlc2hvbGQgZm9yIHJlcG9ydGluZyBGREMgZXJyb3JzIHRvIHRoZSBjb25zb2xlLgorCSAgICogU2V0dGluZyB0aGlzIHRvIHplcm8gbWF5IGZsb29kIHlvdXIgc2NyZWVuIHdoZW4gdXNpbmcKKwkgICAqIHVsdHJhIGNoZWFwIGZsb3BwaWVzIDstKQorCSAgICovCisJICByZXBvcnRpbmc7CisKK307CisKKyNkZWZpbmUgRkRTRVRFTVNHVFJFU0gJX0lPKDIsMHg0YSkKKy8qIHNldCBmZGMgZXJyb3IgcmVwb3J0aW5nIHRocmVzaG9sZCAqLworCisjZGVmaW5lIEZERkxVU0ggIF9JTygyLDB4NGIpCisvKiBmbHVzaCBidWZmZXJzIGZvciBtZWRpYTsgZWl0aGVyIGZvciB2ZXJpZnlpbmcgbWVkaWEsIG9yIGZvcgorICogaGFuZGxpbmcgYSBtZWRpYSBjaGFuZ2Ugd2l0aG91dCBjbG9zaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgKi8KKworI2RlZmluZSBGRFNFVE1BWEVSUlMgX0lPVygyLCAweDRjLCBzdHJ1Y3QgZmxvcHB5X21heF9lcnJvcnMpCisjZGVmaW5lIEZER0VUTUFYRVJSUyBfSU9SKDIsIDB4MGUsIHN0cnVjdCBmbG9wcHlfbWF4X2Vycm9ycykKKy8qIHNldC9nZXQgYWJvcnRpb24gYW5kIHJlYWRfdHJhY2sgdGhyZXNob2xkLiBTZWUgYWxzbyBmbG9wcHlfZHJpdmVfcGFyYW1zCisgKiBzdHJ1Y3R1cmUgKi8KKworCit0eXBlZGVmIGNoYXIgZmxvcHB5X2RyaXZlX25hbWVbMTZdOworI2RlZmluZSBGREdFVERSVlRZUCBfSU9SKDIsIDB4MGYsIGZsb3BweV9kcml2ZV9uYW1lKQorLyogZ2V0IGRyaXZlIHR5cGU6IDUgMS80IG9yIDMgMS8yICovCisKKworLyoKKyAqIERyaXZlIHBhcmFtZXRlcnMgKHVzZXIgbW9kaWZpYWJsZSkKKyAqLworc3RydWN0IGZsb3BweV9kcml2ZV9wYXJhbXMgeworCXNpZ25lZCBjaGFyIGNtb3M7CQkvKiBDTU9TIHR5cGUgKi8KKwkKKwkvKiBTcGVjMiBpcyAoSExEPDwxIHwgTkQpLCB3aGVyZSBITEQgaXMgaGVhZCBsb2FkIHRpbWUgKDE9Mm1zLCAyPTQgbXMgCisJICogZXRjKSBhbmQgTkQgaXMgc2V0IG1lYW5zIG5vIERNQS4gSGFyZGNvZGVkIHRvIDYgKEhMRD02bXMsIHVzZSBETUEpLgorCSAqLworCXVuc2lnbmVkIGxvbmcgbWF4X2R0cjsJCS8qIFN0ZXAgcmF0ZSwgdXNlYyAqLworCXVuc2lnbmVkIGxvbmcgaGx0OyAgICAgCQkvKiBIZWFkIGxvYWQvc2V0dGxlIHRpbWUsIG1zZWMgKi8KKwl1bnNpZ25lZCBsb25nIGh1dDsgICAgIAkJLyogSGVhZCB1bmxvYWQgdGltZSAocmVtbmFudCBvZiAKKwkJCQkJICogOCIgZHJpdmVzKSAqLworCXVuc2lnbmVkIGxvbmcgc3J0OyAgICAgCQkvKiBTdGVwIHJhdGUsIHVzZWMgKi8KKworCXVuc2lnbmVkIGxvbmcgc3BpbnVwOwkJLyogdGltZSBuZWVkZWQgZm9yIHNwaW51cCAoZXhwcmVzc2VkCisJCQkJCSAqIGluIGppZmZpZXMpICovCisJdW5zaWduZWQgbG9uZyBzcGluZG93bjsJCS8qIHRpbWVvdXQgbmVlZGVkIGZvciBzcGluZG93biAqLworCXVuc2lnbmVkIGNoYXIgc3BpbmRvd25fb2Zmc2V0OwkvKiBkZWNpZGVzIGluIHdoaWNoIHBvc2l0aW9uIHRoZSBkaXNrCisJCQkJCSAqIHdpbGwgc3RvcCAqLworCXVuc2lnbmVkIGNoYXIgc2VsZWN0X2RlbGF5OwkvKiBkZWxheSB0byB3YWl0IGFmdGVyIHNlbGVjdCAqLworCXVuc2lnbmVkIGNoYXIgcnBzOwkJLyogcm90YXRpb25zIHBlciBzZWNvbmQgKi8KKwl1bnNpZ25lZCBjaGFyIHRyYWNrczsJCS8qIG1heGltdW0gbnVtYmVyIG9mIHRyYWNrcyAqLworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsJCS8qIHRpbWVvdXQgZm9yIGludGVycnVwdCByZXF1ZXN0cyAqLworCQorCXVuc2lnbmVkIGNoYXIgaW50ZXJsZWF2ZV9zZWN0OwkvKiBpZiB0aGVyZSBhcmUgbW9yZSBzZWN0b3JzLCB1c2UgCisJCQkJCSAqIGludGVybGVhdmUgKi8KKwkKKwlzdHJ1Y3QgZmxvcHB5X21heF9lcnJvcnMgbWF4X2Vycm9yczsKKwkKKwljaGFyIGZsYWdzOwkJCS8qIHZhcmlvdXMgZmxhZ3MsIGluY2x1ZGluZyBmdGRfbXNnICovCisvKgorICogQW5ub3VuY2Ugc3VjY2Vzc2Z1bCBtZWRpYSB0eXBlIGRldGVjdGlvbiBhbmQgbWVkaWEgaW5mb3JtYXRpb24gbG9zcyBhZnRlcgorICogZGlzayBjaGFuZ2VzLgorICogQWxzbyB1c2VkIHRvIGVuYWJsZS9kaXNhYmxlIHByaW50aW5nIG9mIG92ZXJydW4gd2FybmluZ3MuCisgKi8KKworI2RlZmluZSBGVERfTVNHIDB4MTAKKyNkZWZpbmUgRkRfQlJPS0VOX0RDTCAweDIwCisjZGVmaW5lIEZEX0RFQlVHIDB4MDIKKyNkZWZpbmUgRkRfU0lMRU5UX0RDTF9DTEVBUiAweDQKKyNkZWZpbmUgRkRfSU5WRVJURURfRENMIDB4ODAgLyogbXVzdCBiZSAweDgwLCBiZWNhdXNlIG9mIGhhcmR3YXJlIAorCQkJCWNvbnNpZGVyYXRpb25zICovCisKKwljaGFyIHJlYWRfdHJhY2s7CQkvKiB1c2UgcmVhZHRyYWNrIGR1cmluZyBwcm9iaW5nPyAqLworCisvKgorICogQXV0by1kZXRlY3Rpb24uIEVhY2ggZHJpdmUgdHlwZSBoYXMgZWlnaHQgZm9ybWF0cyB3aGljaCBhcmUKKyAqIHVzZWQgaW4gc3VjY2Vzc2lvbiB0byB0cnkgdG8gcmVhZCB0aGUgZGlzay4gSWYgdGhlIEZEQyBjYW5ub3QgbG9jayBvbnRvCisgKiB0aGUgZGlzaywgdGhlIG5leHQgZm9ybWF0IGlzIHRyaWVkLiBUaGlzIHVzZXMgdGhlIHZhcmlhYmxlICdwcm9iaW5nJy4KKyAqLworCXNob3J0IGF1dG9kZXRlY3RbOF07CQkvKiBhdXRvZGV0ZWN0ZWQgZm9ybWF0cyAqLworCQorCWludCBjaGVja2ZyZXE7IC8qIGhvdyBvZnRlbiBzaG91bGQgdGhlIGRyaXZlIGJlIGNoZWNrZWQgZm9yIGRpc2sgCisJCQkqIGNoYW5nZXMgKi8KKwlpbnQgbmF0aXZlX2Zvcm1hdDsgLyogbmF0aXZlIGZvcm1hdCBvZiB0aGlzIGRyaXZlICovCit9OworCitlbnVtIHsKKwlGRF9ORUVEX1RXQURETEVfQklULAkvKiBtb3JlIG1hZ2ljICovCisJRkRfVkVSSUZZX0JJVCwJCS8qIGlucXVpcmUgZm9yIHdyaXRlIHByb3RlY3Rpb24gKi8KKwlGRF9ESVNLX05FV0NIQU5HRV9CSVQsCS8qIGNoYW5nZSBkZXRlY3RlZCwgYW5kIG5vIGFjdGlvbiB1bmRlcnRha2VuIHlldAorCQkJCSAqIHRvIGNsZWFyIG1lZGlhIGNoYW5nZSBzdGF0dXMgKi8KKwlGRF9VTlVTRURfQklULAorCUZEX0RJU0tfQ0hBTkdFRF9CSVQsCS8qIGRpc2sgaGFzIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGkvbyAqLworCUZEX0RJU0tfV1JJVEFCTEVfQklUCS8qIGRpc2sgaXMgd3JpdGFibGUgKi8KK307CisKKyNkZWZpbmUgRkRTRVREUlZQUk0gX0lPVygyLCAweDkwLCBzdHJ1Y3QgZmxvcHB5X2RyaXZlX3BhcmFtcykKKyNkZWZpbmUgRkRHRVREUlZQUk0gX0lPUigyLCAweDExLCBzdHJ1Y3QgZmxvcHB5X2RyaXZlX3BhcmFtcykKKy8qIHNldC9nZXQgZHJpdmUgcGFyYW1ldGVycyAqLworCisKKy8qCisgKiBDdXJyZW50IGRyaXZlIHN0YXRlIChub3QgZGlyZWN0bHkgbW9kaWZpYWJsZSBieSB1c2VyLCByZWFkb25seSkKKyAqLworc3RydWN0IGZsb3BweV9kcml2ZV9zdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisvKiB2YWx1ZXMgZm9yIHRoZXNlIGZsYWdzICovCisjZGVmaW5lIEZEX05FRURfVFdBRERMRSAoMSA8PCBGRF9ORUVEX1RXQURETEVfQklUKQorI2RlZmluZSBGRF9WRVJJRlkgKDEgPDwgRkRfVkVSSUZZX0JJVCkKKyNkZWZpbmUgRkRfRElTS19ORVdDSEFOR0UgKDEgPDwgRkRfRElTS19ORVdDSEFOR0VfQklUKQorI2RlZmluZSBGRF9ESVNLX0NIQU5HRUQgKDEgPDwgRkRfRElTS19DSEFOR0VEX0JJVCkKKyNkZWZpbmUgRkRfRElTS19XUklUQUJMRSAoMSA8PCBGRF9ESVNLX1dSSVRBQkxFX0JJVCkKKworCXVuc2lnbmVkIGxvbmcgc3BpbnVwX2RhdGU7CisJdW5zaWduZWQgbG9uZyBzZWxlY3RfZGF0ZTsKKwl1bnNpZ25lZCBsb25nIGZpcnN0X3JlYWRfZGF0ZTsKKwlzaG9ydCBwcm9iZWRfZm9ybWF0OworCXNob3J0IHRyYWNrOyAvKiBjdXJyZW50IHRyYWNrICovCisJc2hvcnQgbWF4YmxvY2s7IC8qIGlkIG9mIGhpZ2hlc3QgYmxvY2sgcmVhZCAqLworCXNob3J0IG1heHRyYWNrOyAvKiBpZCBvZiBoaWdoZXN0IGhhbGYgdHJhY2sgcmVhZCAqLworCWludCBnZW5lcmF0aW9uOyAvKiBob3cgbWFueSBkaXNrY2hhbmdlcz8gKi8KKworLyoKKyAqIChVc2VyLXByb3ZpZGVkKSBtZWRpYSBpbmZvcm1hdGlvbiBpcyBfbm90XyBkaXNjYXJkZWQgYWZ0ZXIgYSBtZWRpYSBjaGFuZ2UKKyAqIGlmIHRoZSBjb3JyZXNwb25kaW5nIGtlZXBfZGF0YSBmbGFnIGlzIG5vbi16ZXJvLiBQb3NpdGl2ZSB2YWx1ZXMgYXJlCisgKiBkZWNyZW1lbnRlZCBhZnRlciBlYWNoIHByb2JlLgorICovCisJaW50IGtlZXBfZGF0YTsKKwkKKwkvKiBQcmV2ZW50ICJhbGlhc2VkIiBhY2Nlc3Nlcy4gKi8KKwlpbnQgZmRfcmVmOworCWludCBmZF9kZXZpY2U7CisJdW5zaWduZWQgbG9uZyBsYXN0X2NoZWNrZWQ7IC8qIHdoZW4gd2FzIHRoZSBkcml2ZSBsYXN0IGNoZWNrZWQgZm9yIGEgZGlzayAKKwkJCSAgICogY2hhbmdlPyAqLworCQorCWNoYXIgKmRtYWJ1ZjsKKwlpbnQgYnVmYmxvY2tzOworfTsKKworI2RlZmluZSBGREdFVERSVlNUQVQgX0lPUigyLCAweDEyLCBzdHJ1Y3QgZmxvcHB5X2RyaXZlX3N0cnVjdCkKKyNkZWZpbmUgRkRQT0xMRFJWU1RBVCBfSU9SKDIsIDB4MTMsIHN0cnVjdCBmbG9wcHlfZHJpdmVfc3RydWN0KQorLyogZ2V0IGRyaXZlIHN0YXRlOiBHRVQgcmV0dXJucyB0aGUgY2FjaGVkIHN0YXRlLCBQT0xMIHBvbGxzIGZvciBuZXcgc3RhdGUgKi8KKworCisvKgorICogcmVzZXQgRkRDCisgKi8KK2VudW0gcmVzZXRfbW9kZSB7CisJRkRfUkVTRVRfSUZfTkVFREVELAkvKiByZXNldCBvbmx5IGlmIHRoZSByZXNldCBmbGFncyBpcyBzZXQgKi8KKwlGRF9SRVNFVF9JRl9SQVdDTUQsCS8qIG9ic29sZXRlICovCisJRkRfUkVTRVRfQUxXQVlTCQkvKiByZXNldCBhbHdheXMgKi8KK307CisjZGVmaW5lIEZEUkVTRVQgX0lPKDIsIDB4NTQpCisKKworLyoKKyAqIEZEQyBzdGF0ZQorICovCitzdHJ1Y3QgZmxvcHB5X2ZkY19zdGF0ZSB7CQorCWludCBzcGVjMTsJCS8qIHNwZWMxIHZhbHVlIGxhc3QgdXNlZCAqLworCWludCBzcGVjMjsJCS8qIHNwZWMyIHZhbHVlIGxhc3QgdXNlZCAqLworCWludCBkdHI7CisJdW5zaWduZWQgY2hhciB2ZXJzaW9uOwkvKiBGREMgdmVyc2lvbiBjb2RlICovCisJdW5zaWduZWQgY2hhciBkb3I7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwkvKiBpbyBhZGRyZXNzICovCisJdW5zaWduZWQgaW50IHJhd2NtZDoyOworCXVuc2lnbmVkIGludCByZXNldDoxOworCXVuc2lnbmVkIGludCBuZWVkX2NvbmZpZ3VyZToxOworCXVuc2lnbmVkIGludCBwZXJwX21vZGU6MjsKKwl1bnNpZ25lZCBpbnQgaGFzX2ZpZm86MTsKKwl1bnNpZ25lZCBpbnQgZHJpdmVyX3ZlcnNpb247CS8qIHZlcnNpb24gY29kZSBmb3IgZmxvcHB5IGRyaXZlciAqLworI2RlZmluZSBGRF9EUklWRVJfVkVSU0lPTiAweDEwMAorLyogdXNlciBwcm9ncmFtcyB1c2luZyB0aGUgZmxvcHB5IEFQSSBzaG91bGQgdXNlIGZsb3BweV9mZGNfc3RhdGUgdG8KKyAqIGdldCB0aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGZsb3BweSBkcml2ZXIgdGhhdCB0aGV5IGFyZSBydW5uaW5nCisgKiBvbi4gSWYgdGhpcyB2ZXJzaW9uIG51bWJlciBpcyBiaWdnZXIgdGhhbiB0aGUgb25lIGNvbXBpbGVkIGludG8gdGhlCisgKiB1c2VyIHByb2dyYW0gKHRoZSBGRF9EUklWRVJfVkVSU0lPTiBkZWZpbmUpLCBpdCBzaG91bGQgYmUgcHJlcGFyZWQKKyAqIHRvIGJpZ2dlciBzdHJ1Y3R1cmVzCisgKi8KKworCXVuc2lnbmVkIGNoYXIgdHJhY2tbNF07CisJLyogUG9zaXRpb24gb2YgdGhlIGhlYWRzIG9mIHRoZSA0IHVuaXRzIGF0dGFjaGVkIHRvIHRoaXMgRkRDLAorCSAqIGFzIHN0b3JlZCBvbiB0aGUgRkRDLiBJbiB0aGUgZnV0dXJlLCB0aGUgcG9zaXRpb24gYXMgc3RvcmVkCisJICogb24gdGhlIEZEQyBtaWdodCBub3QgYWdyZWUgd2l0aCB0aGUgYWN0dWFsIHBoeXNpY2FsCisJICogcG9zaXRpb24gb2YgdGhlc2UgZHJpdmUgaGVhZHMuIEJ5IGFsbG93aW5nIHN1Y2gKKwkgKiBkaXNhZ3JlZW1lbnQsIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gcmVzZXQgdGhlIEZEQyB3aXRob3V0CisJICogaW5jdXJyaW5nIHRoZSBleHBlbnNpdmUgY29zdCBvZiByZXBvc2l0aW9uaW5nIGFsbCBoZWFkcy4KKwkgKiBSaWdodCBub3csIHRoZXNlIHBvc2l0aW9ucyBhcmUgaGFyZCB3aXJlZCB0byAwLiAqLworCit9OworCisjZGVmaW5lIEZER0VURkRDU1RBVCBfSU9SKDIsIDB4MTUsIHN0cnVjdCBmbG9wcHlfZmRjX3N0YXRlKQorCisKKy8qCisgKiBBc3luY2hyb25vdXMgV3JpdGUgZXJyb3IgdHJhY2tpbmcKKyAqLworc3RydWN0IGZsb3BweV93cml0ZV9lcnJvcnMgeworCS8qIFdyaXRlIGVycm9yIGxvZ2dpbmcuCisJICoKKwkgKiBUaGVzZSBmaWVsZHMgY2FuIGJlIGNsZWFyZWQgd2l0aCB0aGUgRkRXRVJST1JDTFIgaW9jdGwuCisJICogT25seSB3cml0ZXMgdGhhdCB3ZXJlIGF0dGVtcHRlZCBidXQgZmFpbGVkIGR1ZSB0byBhIHBoeXNpY2FsIG1lZGlhCisJICogZXJyb3IgYXJlIGxvZ2dlZC4gIHdyaXRlKDIpIGNhbGxzIHRoYXQgZmFpbCBhbmQgcmV0dXJuIGFuIGVycm9yIGNvZGUKKwkgKiB0byB0aGUgdXNlciBwcm9jZXNzIGFyZSBub3QgY291bnRlZC4KKwkgKi8KKworCXVuc2lnbmVkIGludCB3cml0ZV9lcnJvcnM7ICAvKiBudW1iZXIgb2YgcGh5c2ljYWwgd3JpdGUgZXJyb3JzIAorCQkJCSAgICAgKiBlbmNvdW50ZXJlZCAqLworCQorCS8qIHBvc2l0aW9uIG9mIGZpcnN0IGFuZCBsYXN0IHdyaXRlIGVycm9ycyAqLworCXVuc2lnbmVkIGxvbmcgZmlyc3RfZXJyb3Jfc2VjdG9yOworCWludCAgICAgICAgICAgZmlyc3RfZXJyb3JfZ2VuZXJhdGlvbjsKKwl1bnNpZ25lZCBsb25nIGxhc3RfZXJyb3Jfc2VjdG9yOworCWludCAgICAgICAgICAgbGFzdF9lcnJvcl9nZW5lcmF0aW9uOworCQorCXVuc2lnbmVkIGludCBiYWRuZXNzOyAvKiBoaWdoZXN0IHJldHJ5IGNvdW50IGZvciBhIHJlYWQgb3Igd3JpdGUgCisJCQkgICAgICAgKiBvcGVyYXRpb24gKi8KK307CisKKyNkZWZpbmUgRkRXRVJST1JDTFIgIF9JTygyLCAweDU2KQorLyogY2xlYXIgd3JpdGUgZXJyb3IgYW5kIGJhZG5lc3MgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgRkRXRVJST1JHRVQgIF9JT1IoMiwgMHgxNywgc3RydWN0IGZsb3BweV93cml0ZV9lcnJvcnMpCisvKiBnZXQgd3JpdGUgZXJyb3IgYW5kIGJhZG5lc3MgaW5mb3JtYXRpb24gKi8KKworCisvKgorICogUmF3IGNvbW1hbmRzCisgKi8KKy8qIG5ldyBpbnRlcmZhY2UgZmxhZzogbm93IHdlIGNhbiBkbyB0aGVtIGluIGJhdGNoZXMgKi8KKyNkZWZpbmUgRkRIQVZFQkFUQ0hFRFJBV0NNRAorCitzdHJ1Y3QgZmxvcHB5X3Jhd19jbWQgeworCXVuc2lnbmVkIGludCBmbGFnczsKKyNkZWZpbmUgRkRfUkFXX1JFQUQgMQorI2RlZmluZSBGRF9SQVdfV1JJVEUgMgorI2RlZmluZSBGRF9SQVdfTk9fTU9UT1IgNAorI2RlZmluZSBGRF9SQVdfRElTS19DSEFOR0UgNCAvKiBvdXQ6IGRpc2sgY2hhbmdlIGZsYWcgd2FzIHNldCAqLworI2RlZmluZSBGRF9SQVdfSU5UUiA4ICAgIC8qIHdhaXQgZm9yIGFuIGludGVycnVwdCAqLworI2RlZmluZSBGRF9SQVdfU1BJTiAweDEwIC8qIHNwaW4gdXAgdGhlIGRpc2sgZm9yIHRoaXMgY29tbWFuZCAqLworI2RlZmluZSBGRF9SQVdfTk9fTU9UT1JfQUZURVIgMHgyMCAvKiBzd2l0Y2ggdGhlIG1vdG9yIG9mZiBhZnRlciBjb21tYW5kIAorCQkJCSAgICAqIGNvbXBsZXRpb24gKi8KKyNkZWZpbmUgRkRfUkFXX05FRURfRElTSyAweDQwICAvKiB0aGlzIGNvbW1hbmQgbmVlZHMgYSBkaXNrIHRvIGJlIHByZXNlbnQgKi8KKyNkZWZpbmUgRkRfUkFXX05FRURfU0VFSyAweDgwICAvKiB0aGlzIGNvbW1hbmQgdXNlcyBhbiBpbXBsaWVkIHNlZWsgKHNvZnQpICovCisKKy8qIG1vcmUgImluIiBmbGFncyAqLworI2RlZmluZSBGRF9SQVdfTU9SRSAweDEwMCAgLyogbW9yZSByZWNvcmRzIGZvbGxvdyAqLworI2RlZmluZSBGRF9SQVdfU1RPUF9JRl9GQUlMVVJFIDB4MjAwIC8qIHN0b3AgaWYgd2UgZW5jb3VudGVyIGEgZmFpbHVyZSAqLworI2RlZmluZSBGRF9SQVdfU1RPUF9JRl9TVUNDRVNTIDB4NDAwIC8qIHN0b3AgaWYgY29tbWFuZCBzdWNjZXNzZnVsICovCisjZGVmaW5lIEZEX1JBV19TT0ZURkFJTFVSRSAweDgwMCAvKiBjb25zaWRlciB0aGUgcmV0dXJuIHZhbHVlIGZvciBmYWlsdXJlCisJCQkJICAqIGRldGVjdGlvbiB0b28gKi8KKworLyogbW9yZSAib3V0IiBmbGFncyAqLworI2RlZmluZSBGRF9SQVdfRkFJTFVSRSAweDEwMDAwIC8qIGNvbW1hbmQgc2VudCB0byBmZGMsIGZkYyByZXR1cm5lZCBlcnJvciAqLworI2RlZmluZSBGRF9SQVdfSEFSREZBSUxVUkUgMHgyMDAwMCAvKiBmZGMgaGFkIHRvIGJlIHJlc2V0LCBvciB0aW1lZCBvdXQgKi8KKworCXZvaWQgKmRhdGE7CisJY2hhciAqa2VybmVsX2RhdGE7IC8qIGxvY2F0aW9uIG9mIGRhdGEgYnVmZmVyIGluIHRoZSBrZXJuZWwgKi8KKwlzdHJ1Y3QgZmxvcHB5X3Jhd19jbWQgKm5leHQ7IC8qIHVzZWQgZm9yIGNoYWluaW5nIG9mIHJhdyBjbWQncyAKKwkJCQkgICAgICAqIHdpdGhpbiB0aGUga2VybmVsICovCisJbG9uZyBsZW5ndGg7IC8qIGluOiBsZW5ndGggb2YgZG1hIHRyYW5zZmVyLiBvdXQ6IHJlbWFpbmluZyBieXRlcyAqLworCWxvbmcgcGh5c19sZW5ndGg7IC8qIHBoeXNpY2FsIGxlbmd0aCwgaWYgZGlmZmVyZW50IGZyb20gZG1hIGxlbmd0aCAqLworCWludCBidWZmZXJfbGVuZ3RoOyAvKiBsZW5ndGggb2YgYWxsb2NhdGVkIGJ1ZmZlciAqLworCisJdW5zaWduZWQgY2hhciByYXRlOworCXVuc2lnbmVkIGNoYXIgY21kX2NvdW50OworCXVuc2lnbmVkIGNoYXIgY21kWzE2XTsKKwl1bnNpZ25lZCBjaGFyIHJlcGx5X2NvdW50OworCXVuc2lnbmVkIGNoYXIgcmVwbHlbMTZdOworCWludCB0cmFjazsKKwlpbnQgcmVzdWx0Y29kZTsKKworCWludCByZXNlcnZlZDE7CisJaW50IHJlc2VydmVkMjsKK307CisKKyNkZWZpbmUgRkRSQVdDTUQgX0lPKDIsIDB4NTgpCisvKiBzZW5kIGEgcmF3IGNvbW1hbmQgdG8gdGhlIGZkYy4gU3RydWN0dXJlIHNpemUgbm90IGluY2x1ZGVkLCBiZWNhdXNlIG9mCisgKiBiYXRjaGVzICovCisKKyNkZWZpbmUgRkRUV0FERExFIF9JTygyLCAweDU5KQorLyogZmxpY2tlciBtb3Rvci1vbiBiaXQgYmVmb3JlIHJlYWRpbmcgYSBzZWN0b3IuIEV4cGVyaW1lbnRhbCAqLworCisKKyNkZWZpbmUgRkRFSkVDVCBfSU8oMiwgMHg1YSkKKy8qIGVqZWN0IHRoZSBkaXNrICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2ZkcmVnLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZmRyZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWNlNjQxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2ZkcmVnLmgKQEAgLTAsMCArMSwxMzcgQEAKKyNpZm5kZWYgX0xJTlVYX0ZEUkVHX0gKKyNkZWZpbmUgX0xJTlVYX0ZEUkVHX0gKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgc29tZSBkZWZpbmVzIGZvciB0aGUgZmxvcHB5IGRpc2sgY29udHJvbGxlci4KKyAqIFZhcmlvdXMgc291cmNlcy4gTW9zdGx5ICJJQk0gTWljcm9jb21wdXRlcnM6IEEgUHJvZ3JhbW1lcnMKKyAqIEhhbmRib29rIiwgU2FuY2hlcyBhbmQgQ2FudG9uLgorICovCisKKyNpZmRlZiBGRFBBVENIRVMKKyNkZWZpbmUgRkRfSU9QT1JUIGZkY19zdGF0ZVtmZGNdLmFkZHJlc3MKKyNlbHNlCisvKiBJdCB3b3VsZCBiZSBhIGxvdCBzYW5lciBqdXN0IHRvIGZvcmNlIGZkY19zdGF0ZVtmZGNdLmFkZHJlc3MgdG8gYWx3YXlzCisgICBiZSBzZXQgISBGSVhNRSAqLworI2RlZmluZSBGRF9JT1BPUlQgMHgzZjAKKyNlbmRpZgorCisvKiBGZCBjb250cm9sbGVyIHJlZ3MuIFMmQywgYWJvdXQgcGFnZSAzNDAgKi8KKyNkZWZpbmUgRkRfU1RBVFVTCSg0ICsgRkRfSU9QT1JUICkKKyNkZWZpbmUgRkRfREFUQQkJKDUgKyBGRF9JT1BPUlQgKQorCisvKiBEaWdpdGFsIE91dHB1dCBSZWdpc3RlciAqLworI2RlZmluZSBGRF9ET1IJCSgyICsgRkRfSU9QT1JUICkKKworLyogRGlnaXRhbCBJbnB1dCBSZWdpc3RlciAocmVhZCkgKi8KKyNkZWZpbmUgRkRfRElSCQkoNyArIEZEX0lPUE9SVCApCisKKy8qIERpc2tldHRlIENvbnRyb2wgUmVnaXN0ZXIgKHdyaXRlKSovCisjZGVmaW5lIEZEX0RDUgkJKDcgKyBGRF9JT1BPUlQgKQorCisvKiBCaXRzIG9mIG1haW4gc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFNUQVRVU19CVVNZTUFTSwkweDBGCQkvKiBkcml2ZSBidXN5IG1hc2sgKi8KKyNkZWZpbmUgU1RBVFVTX0JVU1kJMHgxMAkJLyogRkRDIGJ1c3kgKi8KKyNkZWZpbmUgU1RBVFVTX0RNQQkweDIwCQkvKiAwLSBETUEgbW9kZSAqLworI2RlZmluZSBTVEFUVVNfRElSCTB4NDAJCS8qIDAtIGNwdS0+ZmRjICovCisjZGVmaW5lIFNUQVRVU19SRUFEWQkweDgwCQkvKiBEYXRhIHJlZyByZWFkeSAqLworCisvKiBCaXRzIG9mIEZEX1NUMCAqLworI2RlZmluZSBTVDBfRFMJCTB4MDMJCS8qIGRyaXZlIHNlbGVjdCBtYXNrICovCisjZGVmaW5lIFNUMF9IQQkJMHgwNAkJLyogSGVhZCAoQWRkcmVzcykgKi8KKyNkZWZpbmUgU1QwX05SCQkweDA4CQkvKiBOb3QgUmVhZHkgKi8KKyNkZWZpbmUgU1QwX0VDRQkJMHgxMAkJLyogRXF1aXBtZW50IGNoZWNrIGVycm9yICovCisjZGVmaW5lIFNUMF9TRQkJMHgyMAkJLyogU2VlayBlbmQgKi8KKyNkZWZpbmUgU1QwX0lOVFIJMHhDMAkJLyogSW50ZXJydXB0IGNvZGUgbWFzayAqLworCisvKiBCaXRzIG9mIEZEX1NUMSAqLworI2RlZmluZSBTVDFfTUFNCQkweDAxCQkvKiBNaXNzaW5nIEFkZHJlc3MgTWFyayAqLworI2RlZmluZSBTVDFfV1AJCTB4MDIJCS8qIFdyaXRlIFByb3RlY3QgKi8KKyNkZWZpbmUgU1QxX05ECQkweDA0CQkvKiBObyBEYXRhIC0gdW5yZWFkYWJsZSAqLworI2RlZmluZSBTVDFfT1IJCTB4MTAJCS8qIE92ZXJSdW4gKi8KKyNkZWZpbmUgU1QxX0NSQwkJMHgyMAkJLyogQ1JDIGVycm9yIGluIGRhdGEgb3IgYWRkciAqLworI2RlZmluZSBTVDFfRU9DCQkweDgwCQkvKiBFbmQgT2YgQ3lsaW5kZXIgKi8KKworLyogQml0cyBvZiBGRF9TVDIgKi8KKyNkZWZpbmUgU1QyX01BTQkJMHgwMQkJLyogTWlzc2luZyBBZGRyZXNzIE1hcmsgKGFnYWluKSAqLworI2RlZmluZSBTVDJfQkMJCTB4MDIJCS8qIEJhZCBDeWxpbmRlciAqLworI2RlZmluZSBTVDJfU05TCQkweDA0CQkvKiBTY2FuIE5vdCBTYXRpc2ZpZWQgKi8KKyNkZWZpbmUgU1QyX1NFSAkJMHgwOAkJLyogU2NhbiBFcXVhbCBIaXQgKi8KKyNkZWZpbmUgU1QyX1dDCQkweDEwCQkvKiBXcm9uZyBDeWxpbmRlciAqLworI2RlZmluZSBTVDJfQ1JDCQkweDIwCQkvKiBDUkMgZXJyb3IgaW4gZGF0YSBmaWVsZCAqLworI2RlZmluZSBTVDJfQ00JCTB4NDAJCS8qIENvbnRyb2wgTWFyayA9IGRlbGV0ZWQgKi8KKworLyogQml0cyBvZiBGRF9TVDMgKi8KKyNkZWZpbmUgU1QzX0hBCQkweDA0CQkvKiBIZWFkIChBZGRyZXNzKSAqLworI2RlZmluZSBTVDNfRFMJCTB4MDgJCS8qIGRyaXZlIGlzIGRvdWJsZS1zaWRlZCAqLworI2RlZmluZSBTVDNfVFoJCTB4MTAJCS8qIFRyYWNrIFplcm8gc2lnbmFsICgxPXRyYWNrIDApICovCisjZGVmaW5lIFNUM19SWQkJMHgyMAkJLyogZHJpdmUgaXMgcmVhZHkgKi8KKyNkZWZpbmUgU1QzX1dQCQkweDQwCQkvKiBXcml0ZSBQcm90ZWN0ICovCisjZGVmaW5lIFNUM19GVAkJMHg4MAkJLyogRHJpdmUgRmF1bHQgKi8KKworLyogVmFsdWVzIGZvciBGRF9DT01NQU5EICovCisjZGVmaW5lIEZEX1JFQ0FMSUJSQVRFCQkweDA3CS8qIG1vdmUgdG8gdHJhY2sgMCAqLworI2RlZmluZSBGRF9TRUVLCQkJMHgwRgkvKiBzZWVrIHRyYWNrICovCisjZGVmaW5lIEZEX1JFQUQJCQkweEU2CS8qIHJlYWQgd2l0aCBNVCwgTUZNLCBTS2lwIGRlbGV0ZWQgKi8KKyNkZWZpbmUgRkRfV1JJVEUJCTB4QzUJLyogd3JpdGUgd2l0aCBNVCwgTUZNICovCisjZGVmaW5lIEZEX1NFTlNFSQkJMHgwOAkvKiBTZW5zZSBJbnRlcnJ1cHQgU3RhdHVzICovCisjZGVmaW5lIEZEX1NQRUNJRlkJCTB4MDMJLyogc3BlY2lmeSBIVVQgZXRjICovCisjZGVmaW5lIEZEX0ZPUk1BVAkJMHg0RAkvKiBmb3JtYXQgb25lIHRyYWNrICovCisjZGVmaW5lIEZEX1ZFUlNJT04JCTB4MTAJLyogZ2V0IHZlcnNpb24gY29kZSAqLworI2RlZmluZSBGRF9DT05GSUdVUkUJCTB4MTMJLyogY29uZmlndXJlIEZJRk8gb3BlcmF0aW9uICovCisjZGVmaW5lIEZEX1BFUlBFTkRJQ1VMQVIJMHgxMgkvKiBwZXJwZW5kaWN1bGFyIHIvdyBtb2RlICovCisjZGVmaW5lIEZEX0dFVFNUQVRVUwkJMHgwNAkvKiByZWFkIFNUMyAqLworI2RlZmluZSBGRF9EVU1QUkVHUwkJMHgwRQkvKiBkdW1wIHRoZSBjb250ZW50cyBvZiB0aGUgZmRjIHJlZ3MgKi8KKyNkZWZpbmUgRkRfUkVBRElECQkweEVBCS8qIHByaW50cyB0aGUgaGVhZGVyIG9mIGEgc2VjdG9yICovCisjZGVmaW5lIEZEX1VOTE9DSwkJMHgxNAkvKiBGaWZvIGNvbmZpZyB1bmxvY2sgKi8KKyNkZWZpbmUgRkRfTE9DSwkJCTB4OTQJLyogRmlmbyBjb25maWcgbG9jayAqLworI2RlZmluZSBGRF9SU0VFS19PVVQJCTB4OGYJLyogc2VlayBvdXQgKGkuZS4gdG8gbG93ZXIgdHJhY2tzKSAqLworI2RlZmluZSBGRF9SU0VFS19JTgkJMHhjZgkvKiBzZWVrIGluIChpLmUuIHRvIGhpZ2hlciB0cmFja3MpICovCisKKy8qIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgYXJlIG5ldyBpbiB0aGUgODIwNzguIFRoZXkgYXJlIG5vdCB1c2VkIGluIHRoZQorICogZmxvcHB5IGRyaXZlciwgZXhjZXB0IHRoZSBmaXJzdCB0aHJlZS4gVGhlc2UgY29tbWFuZHMgbWF5IGJlIHVzZWZ1bCBmb3IgYXBwcworICogd2hpY2ggdXNlIHRoZSBGRFJBV0NNRCBpbnRlcmZhY2UuIEZvciBkb2MsIGdldCB0aGUgODIwNzggc3BlYyBzaGVldHMgYXQKKyAqIGh0dHA6Ly93d3cuaW50ZWwuY29tL2Rlc2lnbi9hcmNoaXZlcy9wZXJpcGhybC9kb2NzLzI5MDQ2ODAzLmh0bSAqLworCisjZGVmaW5lIEZEX1BBUlRJRAkJMHgxOAkvKiBwYXJ0IGlkICgiZXh0ZW5kZWQiIHZlcnNpb24gY21kKSAqLworI2RlZmluZSBGRF9TQVZFCQkJMHgyZQkvKiBzYXZlIGZkYyByZWdzIGZvciBsYXRlciByZXN0b3JlICovCisjZGVmaW5lIEZEX0RSSVZFU1BFQwkJMHg4ZQkvKiBkcml2ZSBzcGVjaWZpY2F0aW9uOiBBY2Nlc3MgdG8gdGhlCisJCQkJCSAqIDIgTWJwcyBkYXRhIHRyYW5zZmVyIHJhdGUgZm9yIHRhcGUKKwkJCQkJICogZHJpdmVzICovCisKKyNkZWZpbmUgRkRfUkVTVE9SRQkJMHg0ZSAgICAvKiBsYXRlciByZXN0b3JlICovCisjZGVmaW5lIEZEX1BPV0VSRE9XTgkJMHgyNwkvKiBjb25maWd1cmUgRkRDJ3MgcG93ZXJzYXZlIGZlYXR1cmVzICovCisjZGVmaW5lIEZEX0ZPUk1BVF9OX1dSSVRFCTB4ZWYgICAgLyogZm9ybWF0IGFuZCB3cml0ZSBpbiBvbmUgZ28uICovCisjZGVmaW5lIEZEX09QVElPTgkJMHgzMwkvKiBJU08gZm9ybWF0ICh3aGljaCBpcyBhIGNsZWFuIHdheSB0bworCQkJCQkgKiBwYWNrIG1vcmUgc2VjdG9ycyBvbiBhIHRyYWNrKSAqLworCisvKiBETUEgY29tbWFuZHMgKi8KKyNkZWZpbmUgRE1BX1JFQUQJMHg0NgorI2RlZmluZSBETUFfV1JJVEUJMHg0QQorCisvKiBGREMgdmVyc2lvbiByZXR1cm4gdHlwZXMgKi8KKyNkZWZpbmUgRkRDX05PTkUJMHgwMAorI2RlZmluZSBGRENfVU5LTk9XTgkweDEwCS8qIERPIE5PVCBVU0UgVEhJUyBUWVBFIEVYQ0VQVCBJRiBJREVOVElGSUNBVElPTgorCQkJCSAgIEZBSUxTIEVBUkxZICovCisjZGVmaW5lIEZEQ184MjcyQQkweDIwCS8qIEludGVsIDgyNzJhLCBORUMgNzY1ICovCisjZGVmaW5lIEZEQ183NjVFRAkweDMwCS8qIE5vbi1JbnRlbCAxTUItY29tcGF0aWJsZSBGREMsIGNhbid0IGRldGVjdCAqLworI2RlZmluZSBGRENfODIwNzIJMHg0MAkvKiBJbnRlbCA4MjA3MjsgODI3MmEgKyBGSUZPICsgRFVNUFJFR1MgKi8KKyNkZWZpbmUgRkRDXzgyMDcyQQkweDQ1CS8qIDgyMDcyQSAob24gU3BhcmNzKSAqLworI2RlZmluZSBGRENfODIwNzdfT1JJRwkweDUxCS8qIE9yaWdpbmFsIHZlcnNpb24gb2YgODIwNzdBQSwgc2FucyBMT0NLICovCisjZGVmaW5lIEZEQ184MjA3NwkweDUyCS8qIDgyMDc3QUEtMSAqLworI2RlZmluZSBGRENfODIwNzhfVU5LTgkweDVmCS8qIFVua25vd24gODIwNzggdmFyaWFudCAqLworI2RlZmluZSBGRENfODIwNzgJMHg2MAkvKiA0NHBpbiA4MjA3OCBvciA2NHBpbiA4MjA3OFNMICovCisjZGVmaW5lIEZEQ184MjA3OF8xCTB4NjEJLyogODIwNzgtMSAoMk1icHMgZmRjKSAqLworI2RlZmluZSBGRENfUzgyMDc4QgkweDYyCS8qIFM4MjA3OEIgKGZpcnN0IHNlZW4gb24gQWRhcHRlYyBBVkEtMjgyNSBWTEIKKwkJCQkgKiBTQ1NJL0VJREUvRmxvcHB5IGNvbnRyb2xsZXIpICovCisjZGVmaW5lIEZEQ184NzMwNgkweDYzCS8qIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgUEMgODczMDYgKi8KKworLyoKKyAqIEJld2FyZTogdGhlIGZkYyB0eXBlIGxpc3QgaXMgcm91Z2hseSBzb3J0ZWQgYnkgaW5jcmVhc2luZyBmZWF0dXJlcy4KKyAqIFByZXNlbmNlIG9mIGZlYXR1cmVzIGlzIHRlc3RlZCBieSBjb21wYXJpbmcgdGhlIEZEQyB2ZXJzaW9uIGlkIHdpdGggdGhlCisgKiAib2xkZXN0IiB2ZXJzaW9uIHRoYXQgaGFzIHRoZSBuZWVkZWQgZmVhdHVyZS4KKyAqIElmIGR1cmluZyBGREMgZGV0ZWN0aW9uLCBhbiBvYnNjdXJlIHRlc3QgZmFpbHMgbGF0ZSBpbiB0aGUgc2VxdWVuY2UsIGRvbid0CisgKiBhc3NpZ24gRkRDX1VOS05PV04uIEVsc2UgdGhlIEZEQyB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBkdW1iIDgyNzJhLCBvciB3b3JzZS4KKyAqIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIGlmIHRoZSB0ZXN0cyBhcmUgdW5uZWVkZWQuCisgKi8KKworI2RlZmluZSBGRF9SRVNFVF9ERUxBWSAyMAorI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZmliX3J1bGVzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZmliX3J1bGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFkYTY1YgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9maWJfcnVsZXMuaApAQCAtMCwwICsxLDcyIEBACisjaWZuZGVmIF9fTElOVVhfRklCX1JVTEVTX0gKKyNkZWZpbmUgX19MSU5VWF9GSUJfUlVMRVNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKworLyogcnVsZSBpcyBwZXJtYW5lbnQsIGFuZCBjYW5ub3QgYmUgZGVsZXRlZCAqLworI2RlZmluZSBGSUJfUlVMRV9QRVJNQU5FTlQJMHgwMDAwMDAwMQorI2RlZmluZSBGSUJfUlVMRV9JTlZFUlQJCTB4MDAwMDAwMDIKKyNkZWZpbmUgRklCX1JVTEVfVU5SRVNPTFZFRAkweDAwMDAwMDA0CisjZGVmaW5lIEZJQl9SVUxFX0lJRl9ERVRBQ0hFRAkweDAwMDAwMDA4CisjZGVmaW5lIEZJQl9SVUxFX0RFVl9ERVRBQ0hFRAlGSUJfUlVMRV9JSUZfREVUQUNIRUQKKyNkZWZpbmUgRklCX1JVTEVfT0lGX0RFVEFDSEVECTB4MDAwMDAwMTAKKworLyogdHJ5IHRvIGZpbmQgc291cmNlIGFkZHJlc3MgaW4gcm91dGluZyBsb29rdXBzICovCisjZGVmaW5lIEZJQl9SVUxFX0ZJTkRfU0FERFIJMHgwMDAxMDAwMAorCitzdHJ1Y3QgZmliX3J1bGVfaGRyIHsKKwlfX3U4CQlmYW1pbHk7CisJX191OAkJZHN0X2xlbjsKKwlfX3U4CQlzcmNfbGVuOworCV9fdTgJCXRvczsKKworCV9fdTgJCXRhYmxlOworCV9fdTgJCXJlczE7CS8qIHJlc2VydmVkICovCisJX191OAkJcmVzMjsJLyogcmVzZXJ2ZWQgKi8KKwlfX3U4CQlhY3Rpb247CisKKwlfX3UzMgkJZmxhZ3M7Cit9OworCitlbnVtIHsKKwlGUkFfVU5TUEVDLAorCUZSQV9EU1QsCS8qIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KKwlGUkFfU1JDLAkvKiBzb3VyY2UgYWRkcmVzcyAqLworCUZSQV9JSUZOQU1FLAkvKiBpbnRlcmZhY2UgbmFtZSAqLworI2RlZmluZSBGUkFfSUZOQU1FCUZSQV9JSUZOQU1FCisJRlJBX0dPVE8sCS8qIHRhcmdldCB0byBqdW1wIHRvIChGUl9BQ1RfR09UTykgKi8KKwlGUkFfVU5VU0VEMiwKKwlGUkFfUFJJT1JJVFksCS8qIHByaW9yaXR5L3ByZWZlcmVuY2UgKi8KKwlGUkFfVU5VU0VEMywKKwlGUkFfVU5VU0VENCwKKwlGUkFfVU5VU0VENSwKKwlGUkFfRldNQVJLLAkvKiBtYXJrICovCisJRlJBX0ZMT1csCS8qIGZsb3cvY2xhc3MgaWQgKi8KKwlGUkFfVU5VU0VENiwKKwlGUkFfVU5VU0VENywKKwlGUkFfVU5VU0VEOCwKKwlGUkFfVEFCTEUsCS8qIEV4dGVuZGVkIHRhYmxlIGlkICovCisJRlJBX0ZXTUFTSywJLyogbWFzayBmb3IgbmV0ZmlsdGVyIG1hcmsgKi8KKwlGUkFfT0lGTkFNRSwKKwlfX0ZSQV9NQVgKK307CisKKyNkZWZpbmUgRlJBX01BWCAoX19GUkFfTUFYIC0gMSkKKworZW51bSB7CisJRlJfQUNUX1VOU1BFQywKKwlGUl9BQ1RfVE9fVEJMLAkJLyogUGFzcyB0byBmaXhlZCB0YWJsZSAqLworCUZSX0FDVF9HT1RPLAkJLyogSnVtcCB0byBhbm90aGVyIHJ1bGUgKi8KKwlGUl9BQ1RfTk9QLAkJLyogTm8gb3BlcmF0aW9uICovCisJRlJfQUNUX1JFUzMsCisJRlJfQUNUX1JFUzQsCisJRlJfQUNUX0JMQUNLSE9MRSwJLyogRHJvcCB3aXRob3V0IG5vdGlmaWNhdGlvbiAqLworCUZSX0FDVF9VTlJFQUNIQUJMRSwJLyogRHJvcCB3aXRoIEVORVRVTlJFQUNIICovCisJRlJfQUNUX1BST0hJQklULAkvKiBEcm9wIHdpdGggRUFDQ0VTICovCisJX19GUl9BQ1RfTUFYLAorfTsKKworI2RlZmluZSBGUl9BQ1RfTUFYIChfX0ZSX0FDVF9NQVggLSAxKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9maWVtYXAuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9maWVtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODMwNzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2ZpZW1hcC5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBGU19JT0NfRklFTUFQIGlvY3RsIGluZnJhc3RydWN0dXJlLgorICoKKyAqIFNvbWUgcG9ydGlvbnMgY29weXJpZ2h0IChDKSAyMDA3IENsdXN0ZXIgRmlsZSBTeXN0ZW1zLCBJbmMKKyAqCisgKiBBdXRob3JzOiBNYXJrIEZhc2hlaCA8bWZhc2hlaEBzdXNlLmNvbT4KKyAqICAgICAgICAgIEthbHBhayBTaGFoIDxrYWxwYWsuc2hhaEBzdW4uY29tPgorICogICAgICAgICAgQW5kcmVhcyBEaWxnZXIgPGFkaWxnZXJAc3VuLmNvbT4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9GSUVNQVBfSAorI2RlZmluZSBfTElOVVhfRklFTUFQX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBmaWVtYXBfZXh0ZW50IHsKKwlfX3U2NCBmZV9sb2dpY2FsOyAgLyogbG9naWNhbCBvZmZzZXQgaW4gYnl0ZXMgZm9yIHRoZSBzdGFydCBvZgorCQkJICAgICogdGhlIGV4dGVudCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgKi8KKwlfX3U2NCBmZV9waHlzaWNhbDsgLyogcGh5c2ljYWwgb2Zmc2V0IGluIGJ5dGVzIGZvciB0aGUgc3RhcnQKKwkJCSAgICAqIG9mIHRoZSBleHRlbnQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkaXNrICovCisJX191NjQgZmVfbGVuZ3RoOyAgIC8qIGxlbmd0aCBpbiBieXRlcyBmb3IgdGhpcyBleHRlbnQgKi8KKwlfX3U2NCBmZV9yZXNlcnZlZDY0WzJdOworCV9fdTMyIGZlX2ZsYWdzOyAgICAvKiBGSUVNQVBfRVhURU5UXyogZmxhZ3MgZm9yIHRoaXMgZXh0ZW50ICovCisJX191MzIgZmVfcmVzZXJ2ZWRbM107Cit9OworCitzdHJ1Y3QgZmllbWFwIHsKKwlfX3U2NCBmbV9zdGFydDsJCS8qIGxvZ2ljYWwgb2Zmc2V0IChpbmNsdXNpdmUpIGF0CisJCQkJICogd2hpY2ggdG8gc3RhcnQgbWFwcGluZyAoaW4pICovCisJX191NjQgZm1fbGVuZ3RoOwkvKiBsb2dpY2FsIGxlbmd0aCBvZiBtYXBwaW5nIHdoaWNoCisJCQkJICogdXNlcnNwYWNlIHdhbnRzIChpbikgKi8KKwlfX3UzMiBmbV9mbGFnczsJCS8qIEZJRU1BUF9GTEFHXyogZmxhZ3MgZm9yIHJlcXVlc3QgKGluL291dCkgKi8KKwlfX3UzMiBmbV9tYXBwZWRfZXh0ZW50czsvKiBudW1iZXIgb2YgZXh0ZW50cyB0aGF0IHdlcmUgbWFwcGVkIChvdXQpICovCisJX191MzIgZm1fZXh0ZW50X2NvdW50OyAgLyogc2l6ZSBvZiBmbV9leHRlbnRzIGFycmF5IChpbikgKi8KKwlfX3UzMiBmbV9yZXNlcnZlZDsKKwlzdHJ1Y3QgZmllbWFwX2V4dGVudCBmbV9leHRlbnRzWzBdOyAvKiBhcnJheSBvZiBtYXBwZWQgZXh0ZW50cyAob3V0KSAqLworfTsKKworI2RlZmluZSBGSUVNQVBfTUFYX09GRlNFVAkofjBVTEwpCisKKyNkZWZpbmUgRklFTUFQX0ZMQUdfU1lOQwkweDAwMDAwMDAxIC8qIHN5bmMgZmlsZSBkYXRhIGJlZm9yZSBtYXAgKi8KKyNkZWZpbmUgRklFTUFQX0ZMQUdfWEFUVFIJMHgwMDAwMDAwMiAvKiBtYXAgZXh0ZW5kZWQgYXR0cmlidXRlIHRyZWUgKi8KKworI2RlZmluZSBGSUVNQVBfRkxBR1NfQ09NUEFUCShGSUVNQVBfRkxBR19TWU5DIHwgRklFTUFQX0ZMQUdfWEFUVFIpCisKKyNkZWZpbmUgRklFTUFQX0VYVEVOVF9MQVNUCQkweDAwMDAwMDAxIC8qIExhc3QgZXh0ZW50IGluIGZpbGUuICovCisjZGVmaW5lIEZJRU1BUF9FWFRFTlRfVU5LTk9XTgkJMHgwMDAwMDAwMiAvKiBEYXRhIGxvY2F0aW9uIHVua25vd24uICovCisjZGVmaW5lIEZJRU1BUF9FWFRFTlRfREVMQUxMT0MJCTB4MDAwMDAwMDQgLyogTG9jYXRpb24gc3RpbGwgcGVuZGluZy4KKwkJCQkJCSAgICAqIFNldHMgRVhURU5UX1VOS05PV04uICovCisjZGVmaW5lIEZJRU1BUF9FWFRFTlRfRU5DT0RFRAkJMHgwMDAwMDAwOCAvKiBEYXRhIGNhbiBub3QgYmUgcmVhZAorCQkJCQkJICAgICogd2hpbGUgZnMgaXMgdW5tb3VudGVkICovCisjZGVmaW5lIEZJRU1BUF9FWFRFTlRfREFUQV9FTkNSWVBURUQJMHgwMDAwMDA4MCAvKiBEYXRhIGlzIGVuY3J5cHRlZCBieSBmcy4KKwkJCQkJCSAgICAqIFNldHMgRVhURU5UX05PX0JZUEFTUy4gKi8KKyNkZWZpbmUgRklFTUFQX0VYVEVOVF9OT1RfQUxJR05FRAkweDAwMDAwMTAwIC8qIEV4dGVudCBvZmZzZXRzIG1heSBub3QgYmUKKwkJCQkJCSAgICAqIGJsb2NrIGFsaWduZWQuICovCisjZGVmaW5lIEZJRU1BUF9FWFRFTlRfREFUQV9JTkxJTkUJMHgwMDAwMDIwMCAvKiBEYXRhIG1peGVkIHdpdGggbWV0YWRhdGEuCisJCQkJCQkgICAgKiBTZXRzIEVYVEVOVF9OT1RfQUxJR05FRC4qLworI2RlZmluZSBGSUVNQVBfRVhURU5UX0RBVEFfVEFJTAkJMHgwMDAwMDQwMCAvKiBNdWx0aXBsZSBmaWxlcyBpbiBibG9jay4KKwkJCQkJCSAgICAqIFNldHMgRVhURU5UX05PVF9BTElHTkVELiovCisjZGVmaW5lIEZJRU1BUF9FWFRFTlRfVU5XUklUVEVOCQkweDAwMDAwODAwIC8qIFNwYWNlIGFsbG9jYXRlZCwgYnV0CisJCQkJCQkgICAgKiBubyBkYXRhIChpLmUuIHplcm8pLiAqLworI2RlZmluZSBGSUVNQVBfRVhURU5UX01FUkdFRAkJMHgwMDAwMTAwMCAvKiBGaWxlIGRvZXMgbm90IG5hdGl2ZWx5CisJCQkJCQkgICAgKiBzdXBwb3J0IGV4dGVudHMuIFJlc3VsdAorCQkJCQkJICAgICogbWVyZ2VkIGZvciBlZmZpY2llbmN5LiAqLworI2RlZmluZSBGSUVNQVBfRVhURU5UX1NIQVJFRAkJMHgwMDAwMjAwMCAvKiBTcGFjZSBzaGFyZWQgd2l0aCBvdGhlcgorCQkJCQkJICAgICogZmlsZXMuICovCisKKyNlbmRpZiAvKiBfTElOVVhfRklFTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9maWx0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzU0OGE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogTGludXggU29ja2V0IEZpbHRlciBEYXRhIFN0cnVjdHVyZXMKKyAqLworCisjaWZuZGVmIF9fTElOVVhfRklMVEVSX0hfXworI2RlZmluZSBfX0xJTlVYX0ZJTFRFUl9IX18KKworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworCisvKgorICogQ3VycmVudCB2ZXJzaW9uIG9mIHRoZSBmaWx0ZXIgY29kZSBhcmNoaXRlY3R1cmUuCisgKi8KKyNkZWZpbmUgQlBGX01BSk9SX1ZFUlNJT04gMQorI2RlZmluZSBCUEZfTUlOT1JfVkVSU0lPTiAxCisKKy8qCisgKglUcnkgYW5kIGtlZXAgdGhlc2UgdmFsdWVzIGFuZCBzdHJ1Y3R1cmVzIHNpbWlsYXIgdG8gQlNELCBlc3BlY2lhbGx5CisgKgl0aGUgQlBGIGNvZGUgZGVmaW5pdGlvbnMgd2hpY2ggbmVlZCB0byBtYXRjaCBzbyB5b3UgY2FuIHNoYXJlIGZpbHRlcnMKKyAqLworIAorc3RydWN0IHNvY2tfZmlsdGVyIHsJLyogRmlsdGVyIGJsb2NrICovCisJX191MTYJY29kZTsgICAvKiBBY3R1YWwgZmlsdGVyIGNvZGUgKi8KKwlfX3U4CWp0OwkvKiBKdW1wIHRydWUgKi8KKwlfX3U4CWpmOwkvKiBKdW1wIGZhbHNlICovCisJX191MzIJazsgICAgICAvKiBHZW5lcmljIG11bHRpdXNlIGZpZWxkICovCit9OworCitzdHJ1Y3Qgc29ja19mcHJvZyB7CS8qIFJlcXVpcmVkIGZvciBTT19BVFRBQ0hfRklMVEVSLiAqLworCXVuc2lnbmVkIHNob3J0CQlsZW47CS8qIE51bWJlciBvZiBmaWx0ZXIgYmxvY2tzICovCisJc3RydWN0IHNvY2tfZmlsdGVyICpmaWx0ZXI7Cit9OworCisvKgorICogSW5zdHJ1Y3Rpb24gY2xhc3NlcworICovCisKKyNkZWZpbmUgQlBGX0NMQVNTKGNvZGUpICgoY29kZSkgJiAweDA3KQorI2RlZmluZSAgICAgICAgIEJQRl9MRCAgICAgICAgICAweDAwCisjZGVmaW5lICAgICAgICAgQlBGX0xEWCAgICAgICAgIDB4MDEKKyNkZWZpbmUgICAgICAgICBCUEZfU1QgICAgICAgICAgMHgwMgorI2RlZmluZSAgICAgICAgIEJQRl9TVFggICAgICAgICAweDAzCisjZGVmaW5lICAgICAgICAgQlBGX0FMVSAgICAgICAgIDB4MDQKKyNkZWZpbmUgICAgICAgICBCUEZfSk1QICAgICAgICAgMHgwNQorI2RlZmluZSAgICAgICAgIEJQRl9SRVQgICAgICAgICAweDA2CisjZGVmaW5lICAgICAgICAgQlBGX01JU0MgICAgICAgIDB4MDcKKworLyogbGQvbGR4IGZpZWxkcyAqLworI2RlZmluZSBCUEZfU0laRShjb2RlKSAgKChjb2RlKSAmIDB4MTgpCisjZGVmaW5lICAgICAgICAgQlBGX1cgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgICAgICAgICBCUEZfSCAgICAgICAgICAgMHgwOAorI2RlZmluZSAgICAgICAgIEJQRl9CICAgICAgICAgICAweDEwCisjZGVmaW5lIEJQRl9NT0RFKGNvZGUpICAoKGNvZGUpICYgMHhlMCkKKyNkZWZpbmUgICAgICAgICBCUEZfSU1NICAgICAgICAgMHgwMAorI2RlZmluZSAgICAgICAgIEJQRl9BQlMgICAgICAgICAweDIwCisjZGVmaW5lICAgICAgICAgQlBGX0lORCAgICAgICAgIDB4NDAKKyNkZWZpbmUgICAgICAgICBCUEZfTUVNICAgICAgICAgMHg2MAorI2RlZmluZSAgICAgICAgIEJQRl9MRU4gICAgICAgICAweDgwCisjZGVmaW5lICAgICAgICAgQlBGX01TSCAgICAgICAgIDB4YTAKKworLyogYWx1L2ptcCBmaWVsZHMgKi8KKyNkZWZpbmUgQlBGX09QKGNvZGUpICAgICgoY29kZSkgJiAweGYwKQorI2RlZmluZSAgICAgICAgIEJQRl9BREQgICAgICAgICAweDAwCisjZGVmaW5lICAgICAgICAgQlBGX1NVQiAgICAgICAgIDB4MTAKKyNkZWZpbmUgICAgICAgICBCUEZfTVVMICAgICAgICAgMHgyMAorI2RlZmluZSAgICAgICAgIEJQRl9ESVYgICAgICAgICAweDMwCisjZGVmaW5lICAgICAgICAgQlBGX09SICAgICAgICAgIDB4NDAKKyNkZWZpbmUgICAgICAgICBCUEZfQU5EICAgICAgICAgMHg1MAorI2RlZmluZSAgICAgICAgIEJQRl9MU0ggICAgICAgICAweDYwCisjZGVmaW5lICAgICAgICAgQlBGX1JTSCAgICAgICAgIDB4NzAKKyNkZWZpbmUgICAgICAgICBCUEZfTkVHICAgICAgICAgMHg4MAorI2RlZmluZSAgICAgICAgIEJQRl9KQSAgICAgICAgICAweDAwCisjZGVmaW5lICAgICAgICAgQlBGX0pFUSAgICAgICAgIDB4MTAKKyNkZWZpbmUgICAgICAgICBCUEZfSkdUICAgICAgICAgMHgyMAorI2RlZmluZSAgICAgICAgIEJQRl9KR0UgICAgICAgICAweDMwCisjZGVmaW5lICAgICAgICAgQlBGX0pTRVQgICAgICAgIDB4NDAKKyNkZWZpbmUgQlBGX1NSQyhjb2RlKSAgICgoY29kZSkgJiAweDA4KQorI2RlZmluZSAgICAgICAgIEJQRl9LICAgICAgICAgICAweDAwCisjZGVmaW5lICAgICAgICAgQlBGX1ggICAgICAgICAgIDB4MDgKKworLyogcmV0IC0gQlBGX0sgYW5kIEJQRl9YIGFsc28gYXBwbHkgKi8KKyNkZWZpbmUgQlBGX1JWQUwoY29kZSkgICgoY29kZSkgJiAweDE4KQorI2RlZmluZSAgICAgICAgIEJQRl9BICAgICAgICAgICAweDEwCisKKy8qIG1pc2MgKi8KKyNkZWZpbmUgQlBGX01JU0NPUChjb2RlKSAoKGNvZGUpICYgMHhmOCkKKyNkZWZpbmUgICAgICAgICBCUEZfVEFYICAgICAgICAgMHgwMAorI2RlZmluZSAgICAgICAgIEJQRl9UWEEgICAgICAgICAweDgwCisKK2VudW0geworCUJQRl9TX1JFVF9LID0gMCwKKwlCUEZfU19SRVRfQSwKKwlCUEZfU19BTFVfQUREX0ssCisJQlBGX1NfQUxVX0FERF9YLAorCUJQRl9TX0FMVV9TVUJfSywKKwlCUEZfU19BTFVfU1VCX1gsCisJQlBGX1NfQUxVX01VTF9LLAorCUJQRl9TX0FMVV9NVUxfWCwKKwlCUEZfU19BTFVfRElWX1gsCisJQlBGX1NfQUxVX0FORF9LLAorCUJQRl9TX0FMVV9BTkRfWCwKKwlCUEZfU19BTFVfT1JfSywKKwlCUEZfU19BTFVfT1JfWCwKKwlCUEZfU19BTFVfTFNIX0ssCisJQlBGX1NfQUxVX0xTSF9YLAorCUJQRl9TX0FMVV9SU0hfSywKKwlCUEZfU19BTFVfUlNIX1gsCisJQlBGX1NfQUxVX05FRywKKwlCUEZfU19MRF9XX0FCUywKKwlCUEZfU19MRF9IX0FCUywKKwlCUEZfU19MRF9CX0FCUywKKwlCUEZfU19MRF9XX0xFTiwKKwlCUEZfU19MRF9XX0lORCwKKwlCUEZfU19MRF9IX0lORCwKKwlCUEZfU19MRF9CX0lORCwKKwlCUEZfU19MRF9JTU0sCisJQlBGX1NfTERYX1dfTEVOLAorCUJQRl9TX0xEWF9CX01TSCwKKwlCUEZfU19MRFhfSU1NLAorCUJQRl9TX01JU0NfVEFYLAorCUJQRl9TX01JU0NfVFhBLAorCUJQRl9TX0FMVV9ESVZfSywKKwlCUEZfU19MRF9NRU0sCisJQlBGX1NfTERYX01FTSwKKwlCUEZfU19TVCwKKwlCUEZfU19TVFgsCisJQlBGX1NfSk1QX0pBLAorCUJQRl9TX0pNUF9KRVFfSywKKwlCUEZfU19KTVBfSkVRX1gsCisJQlBGX1NfSk1QX0pHRV9LLAorCUJQRl9TX0pNUF9KR0VfWCwKKwlCUEZfU19KTVBfSkdUX0ssCisJQlBGX1NfSk1QX0pHVF9YLAorCUJQRl9TX0pNUF9KU0VUX0ssCisJQlBGX1NfSk1QX0pTRVRfWCwKK307CisKKyNpZm5kZWYgQlBGX01BWElOU05TCisjZGVmaW5lIEJQRl9NQVhJTlNOUyA0MDk2CisjZW5kaWYKKworLyoKKyAqIE1hY3JvcyBmb3IgZmlsdGVyIGJsb2NrIGFycmF5IGluaXRpYWxpemVycy4KKyAqLworI2lmbmRlZiBCUEZfU1RNVAorI2RlZmluZSBCUEZfU1RNVChjb2RlLCBrKSB7ICh1bnNpZ25lZCBzaG9ydCkoY29kZSksIDAsIDAsIGsgfQorI2VuZGlmCisjaWZuZGVmIEJQRl9KVU1QCisjZGVmaW5lIEJQRl9KVU1QKGNvZGUsIGssIGp0LCBqZikgeyAodW5zaWduZWQgc2hvcnQpKGNvZGUpLCBqdCwgamYsIGsgfQorI2VuZGlmCisKKy8qCisgKiBOdW1iZXIgb2Ygc2NyYXRjaCBtZW1vcnkgd29yZHMgZm9yOiBCUEZfU1QgYW5kIEJQRl9TVFgKKyAqLworI2RlZmluZSBCUEZfTUVNV09SRFMgMTYKKworLyogUkFUSU9OQUxFLiBOZWdhdGl2ZSBvZmZzZXRzIGFyZSBpbnZhbGlkIGluIEJQRi4KKyAgIFdlIHVzZSB0aGVtIHRvIHJlZmVyZW5jZSBhbmNpbGxhcnkgZGF0YS4KKyAgIFVubGlrZSBpbnRyb2R1Y3Rpb24gbmV3IGluc3RydWN0aW9ucywgaXQgZG9lcyBub3QgYnJlYWsKKyAgIGV4aXN0aW5nIGNvbXBpbGVycy9vcHRpbWl6ZXJzLgorICovCisjZGVmaW5lIFNLRl9BRF9PRkYgICAgKC0weDEwMDApCisjZGVmaW5lIFNLRl9BRF9QUk9UT0NPTCAwCisjZGVmaW5lIFNLRl9BRF9QS1RUWVBFIAk0CisjZGVmaW5lIFNLRl9BRF9JRklOREVYIAk4CisjZGVmaW5lIFNLRl9BRF9OTEFUVFIJMTIKKyNkZWZpbmUgU0tGX0FEX05MQVRUUl9ORVNUCTE2CisjZGVmaW5lIFNLRl9BRF9NQVJLIAkyMAorI2RlZmluZSBTS0ZfQURfUVVFVUUJMjQKKyNkZWZpbmUgU0tGX0FEX0hBVFlQRQkyOAorI2RlZmluZSBTS0ZfQURfTUFYCTMyCisjZGVmaW5lIFNLRl9ORVRfT0ZGICAgKC0weDEwMDAwMCkKKyNkZWZpbmUgU0tGX0xMX09GRiAgICAoLTB4MjAwMDAwKQorCisKKyNlbmRpZiAvKiBfX0xJTlVYX0ZJTFRFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9maXJld2lyZS1jZGV2LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZmlyZXdpcmUtY2Rldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YzY0MmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZmlyZXdpcmUtY2Rldi5oCkBAIC0wLDAgKzEsMTAxNCBAQAorLyoKKyAqIENoYXIgZGV2aWNlIGludGVyZmFjZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyAgS3Jpc3RpYW4gSG9lZ3NiZXJnIDxrcmhAYml0cGxhbmV0Lm5ldD4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfTElOVVhfRklSRVdJUkVfQ0RFVl9ICisjZGVmaW5lIF9MSU5VWF9GSVJFV0lSRV9DREVWX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJld2lyZS1jb25zdGFudHMuaD4KKworI2RlZmluZSBGV19DREVWX0VWRU5UX0JVU19SRVNFVAkJCQkweDAwCisjZGVmaW5lIEZXX0NERVZfRVZFTlRfUkVTUE9OU0UJCQkJMHgwMQorI2RlZmluZSBGV19DREVWX0VWRU5UX1JFUVVFU1QJCQkJMHgwMgorI2RlZmluZSBGV19DREVWX0VWRU5UX0lTT19JTlRFUlJVUFQJCQkweDAzCisjZGVmaW5lIEZXX0NERVZfRVZFTlRfSVNPX1JFU09VUkNFX0FMTE9DQVRFRAkJMHgwNAorI2RlZmluZSBGV19DREVWX0VWRU5UX0lTT19SRVNPVVJDRV9ERUFMTE9DQVRFRAkJMHgwNQorCisvKiBhdmFpbGFibGUgc2luY2Uga2VybmVsIHZlcnNpb24gMi42LjM2ICovCisjZGVmaW5lIEZXX0NERVZfRVZFTlRfUkVRVUVTVDIJCQkJMHgwNgorI2RlZmluZSBGV19DREVWX0VWRU5UX1BIWV9QQUNLRVRfU0VOVAkJCTB4MDcKKyNkZWZpbmUgRldfQ0RFVl9FVkVOVF9QSFlfUEFDS0VUX1JFQ0VJVkVECQkweDA4CisjZGVmaW5lIEZXX0NERVZfRVZFTlRfSVNPX0lOVEVSUlVQVF9NVUxUSUNIQU5ORUwJMHgwOQorCisvKioKKyAqIHN0cnVjdCBmd19jZGV2X2V2ZW50X2NvbW1vbiAtIENvbW1vbiBwYXJ0IG9mIGFsbCBmd19jZGV2X2V2ZW50XyB0eXBlcworICogQGNsb3N1cmU6CUZvciBhcmJpdHJhcnkgdXNlIGJ5IHVzZXJzcGFjZQorICogQHR5cGU6CURpc2NyaW1pbmF0ZXMgdGhlIGZ3X2NkZXZfZXZlbnRfIHR5cGVzCisgKgorICogVGhpcyBzdHJ1Y3QgbWF5IGJlIHVzZWQgdG8gYWNjZXNzIGdlbmVyaWMgbWVtYmVycyBvZiBhbGwgZndfY2Rldl9ldmVudF8KKyAqIHR5cGVzIHJlZ2FyZGxlc3Mgb2YgdGhlIHNwZWNpZmljIHR5cGUuCisgKgorICogRGF0YSBwYXNzZWQgaW4gdGhlIEBjbG9zdXJlIGZpZWxkIGZvciBhIHJlcXVlc3Qgd2lsbCBiZSByZXR1cm5lZCBpbiB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgZXZlbnQuICBJdCBpcyBiaWcgZW5vdWdoIHRvIGhvbGQgYSBwb2ludGVyIG9uIGFsbCBwbGF0Zm9ybXMuCisgKiBUaGUgaW9jdGwgdXNlZCB0byBzZXQgQGNsb3N1cmUgZGVwZW5kcyBvbiB0aGUgQHR5cGUgb2YgZXZlbnQuCisgKi8KK3N0cnVjdCBmd19jZGV2X2V2ZW50X2NvbW1vbiB7CisJX191NjQgY2xvc3VyZTsKKwlfX3UzMiB0eXBlOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZndfY2Rldl9ldmVudF9idXNfcmVzZXQgLSBTZW50IHdoZW4gYSBidXMgcmVzZXQgb2NjdXJyZWQKKyAqIEBjbG9zdXJlOglTZWUgJmZ3X2NkZXZfZXZlbnRfY29tbW9uOyBzZXQgYnkgJUZXX0NERVZfSU9DX0dFVF9JTkZPIGlvY3RsCisgKiBAdHlwZToJU2VlICZmd19jZGV2X2V2ZW50X2NvbW1vbjsgYWx3YXlzICVGV19DREVWX0VWRU5UX0JVU19SRVNFVAorICogQG5vZGVfaWQ6ICAgICAgIE5ldyBub2RlIElEIG9mIHRoaXMgbm9kZQorICogQGxvY2FsX25vZGVfaWQ6IE5vZGUgSUQgb2YgdGhlIGxvY2FsIG5vZGUsIGkuZS4gb2YgdGhlIGNvbnRyb2xsZXIKKyAqIEBibV9ub2RlX2lkOiAgICBOb2RlIElEIG9mIHRoZSBidXMgbWFuYWdlcgorICogQGlybV9ub2RlX2lkOiAgIE5vZGUgSUQgb2YgdGhlIGlzbyByZXNvdXJjZSBtYW5hZ2VyCisgKiBAcm9vdF9ub2RlX2lkOiAgTm9kZSBJRCBvZiB0aGUgcm9vdCBub2RlCisgKiBAZ2VuZXJhdGlvbjogICAgTmV3IGJ1cyBnZW5lcmF0aW9uCisgKgorICogVGhpcyBldmVudCBpcyBzZW50IHdoZW4gdGhlIGJ1cyB0aGUgZGV2aWNlIGJlbG9uZ3MgdG8gZ29lcyB0aHJvdWdoIGEgYnVzCisgKiByZXNldC4gIEl0IHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBuZXcgYnVzIGNvbmZpZ3VyYXRpb24sIHN1Y2ggYXMKKyAqIG5ldyBub2RlIElEIGZvciB0aGlzIGRldmljZSwgbmV3IHJvb3QgSUQsIGFuZCBvdGhlcnMuCisgKgorICogSWYgQGJtX25vZGVfaWQgaXMgMHhmZmZmIHJpZ2h0IGFmdGVyIGJ1cyByZXNldCBpdCBjYW4gYmUgcmVyZWFkIGJ5IGFuCisgKiAlRldfQ0RFVl9JT0NfR0VUX0lORk8gaW9jdGwgYWZ0ZXIgYnVzIG1hbmFnZXIgc2VsZWN0aW9uIHdhcyBmaW5pc2hlZC4KKyAqIEtlcm5lbHMgd2l0aCBBQkkgdmVyc2lvbiA8IDQgZG8gbm90IHNldCBAYm1fbm9kZV9pZC4KKyAqLworc3RydWN0IGZ3X2NkZXZfZXZlbnRfYnVzX3Jlc2V0IHsKKwlfX3U2NCBjbG9zdXJlOworCV9fdTMyIHR5cGU7CisJX191MzIgbm9kZV9pZDsKKwlfX3UzMiBsb2NhbF9ub2RlX2lkOworCV9fdTMyIGJtX25vZGVfaWQ7CisJX191MzIgaXJtX25vZGVfaWQ7CisJX191MzIgcm9vdF9ub2RlX2lkOworCV9fdTMyIGdlbmVyYXRpb247Cit9OworCisvKioKKyAqIHN0cnVjdCBmd19jZGV2X2V2ZW50X3Jlc3BvbnNlIC0gU2VudCB3aGVuIGEgcmVzcG9uc2UgcGFja2V0IHdhcyByZWNlaXZlZAorICogQGNsb3N1cmU6CVNlZSAmZndfY2Rldl9ldmVudF9jb21tb247IHNldCBieSAlRldfQ0RFVl9JT0NfU0VORF9SRVFVRVNUCisgKgkJb3IgJUZXX0NERVZfSU9DX1NFTkRfQlJPQURDQVNUX1JFUVVFU1QKKyAqCQlvciAlRldfQ0RFVl9JT0NfU0VORF9TVFJFQU1fUEFDS0VUIGlvY3RsCisgKiBAdHlwZToJU2VlICZmd19jZGV2X2V2ZW50X2NvbW1vbjsgYWx3YXlzICVGV19DREVWX0VWRU5UX1JFU1BPTlNFCisgKiBAcmNvZGU6CVJlc3BvbnNlIGNvZGUgcmV0dXJuZWQgYnkgdGhlIHJlbW90ZSBub2RlCisgKiBAbGVuZ3RoOglEYXRhIGxlbmd0aCwgaS5lLiB0aGUgcmVzcG9uc2UncyBwYXlsb2FkIHNpemUgaW4gYnl0ZXMKKyAqIEBkYXRhOglQYXlsb2FkIGRhdGEsIGlmIGFueQorICoKKyAqIFRoaXMgZXZlbnQgaXMgc2VudCB3aGVuIHRoZSBzdGFjayByZWNlaXZlcyBhIHJlc3BvbnNlIHRvIGFuIG91dGdvaW5nIHJlcXVlc3QKKyAqIHNlbnQgYnkgJUZXX0NERVZfSU9DX1NFTkRfUkVRVUVTVCBpb2N0bC4gIFRoZSBwYXlsb2FkIGRhdGEgZm9yIHJlc3BvbnNlcworICogY2FycnlpbmcgZGF0YSAocmVhZCBhbmQgbG9jayByZXNwb25zZXMpIGZvbGxvd3MgaW1tZWRpYXRlbHkgYW5kIGNhbiBiZQorICogYWNjZXNzZWQgdGhyb3VnaCB0aGUgQGRhdGEgZmllbGQuCisgKgorICogVGhlIGV2ZW50IGlzIGFsc28gZ2VuZXJhdGVkIGFmdGVyIGNvbmNsdXNpb25zIG9mIHRyYW5zYWN0aW9ucyB0aGF0IGRvIG5vdAorICogaW52b2x2ZSByZXNwb25zZSBwYWNrZXRzLiAgVGhpcyBpbmNsdWRlcyB1bmlmaWVkIHdyaXRlIHRyYW5zYWN0aW9ucywKKyAqIGJyb2FkY2FzdCB3cml0ZSB0cmFuc2FjdGlvbnMsIGFuZCB0cmFuc21pc3Npb24gb2YgYXN5bmNocm9ub3VzIHN0cmVhbQorICogcGFja2V0cy4gIEByY29kZSBpbmRpY2F0ZXMgc3VjY2VzcyBvciBmYWlsdXJlIG9mIHN1Y2ggdHJhbnNtaXNzaW9ucy4KKyAqLworc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVzcG9uc2UgeworCV9fdTY0IGNsb3N1cmU7CisJX191MzIgdHlwZTsKKwlfX3UzMiByY29kZTsKKwlfX3UzMiBsZW5ndGg7CisJX191MzIgZGF0YVswXTsKK307CisKKy8qKgorICogc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVxdWVzdCAtIE9sZCB2ZXJzaW9uIG9mICZmd19jZGV2X2V2ZW50X3JlcXVlc3QyCisgKiBAY2xvc3VyZToJU2VlICZmd19jZGV2X2V2ZW50X2NvbW1vbjsgc2V0IGJ5ICVGV19DREVWX0lPQ19BTExPQ0FURSBpb2N0bAorICogQHR5cGU6CVNlZSAmZndfY2Rldl9ldmVudF9jb21tb247IGFsd2F5cyAlRldfQ0RFVl9FVkVOVF9SRVFVRVNUCisgKiBAdGNvZGU6CVNlZSAmZndfY2Rldl9ldmVudF9yZXF1ZXN0MgorICogQG9mZnNldDoJU2VlICZmd19jZGV2X2V2ZW50X3JlcXVlc3QyCisgKiBAaGFuZGxlOglTZWUgJmZ3X2NkZXZfZXZlbnRfcmVxdWVzdDIKKyAqIEBsZW5ndGg6CVNlZSAmZndfY2Rldl9ldmVudF9yZXF1ZXN0MgorICogQGRhdGE6CVNlZSAmZndfY2Rldl9ldmVudF9yZXF1ZXN0MgorICoKKyAqIFRoaXMgZXZlbnQgaXMgc2VudCBpbnN0ZWFkIG9mICZmd19jZGV2X2V2ZW50X3JlcXVlc3QyIGlmIHRoZSBrZXJuZWwgb3IKKyAqIHRoZSBjbGllbnQgaW1wbGVtZW50cyBBQkkgdmVyc2lvbiA8PSAzLgorICoKKyAqIFVubGlrZSAmZndfY2Rldl9ldmVudF9yZXF1ZXN0MiwgdGhlIHNlbmRlciBpZGVudGl0eSBjYW5ub3QgYmUgZXN0YWJsaXNoZWQsCisgKiBicm9hZGNhc3Qgd3JpdGUgcmVxdWVzdHMgY2Fubm90IGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSB1bmljYXN0IHdyaXRlcywgYW5kCisgKiBAdGNvZGUgb2YgbG9jayByZXF1ZXN0cyBpcyAlVENPREVfTE9DS19SRVFVRVNULgorICoKKyAqIFJlcXVlc3RzIHRvIHRoZSBGQ1BfUkVRVUVTVCBvciBGQ1BfUkVTUE9OU0UgcmVnaXN0ZXIgYXJlIHJlc3BvbmRlZCB0byBhcworICogd2l0aCAmZndfY2Rldl9ldmVudF9yZXF1ZXN0MiwgZXhjZXB0IGluIGtlcm5lbCAyLjYuMzIgYW5kIG9sZGVyIHdoaWNoIHNlbmQKKyAqIHRoZSByZXNwb25zZSBwYWNrZXQgb2YgdGhlIGNsaWVudCdzICVGV19DREVWX0lPQ19TRU5EX1JFU1BPTlNFIGlvY3RsLgorICovCitzdHJ1Y3QgZndfY2Rldl9ldmVudF9yZXF1ZXN0IHsKKwlfX3U2NCBjbG9zdXJlOworCV9fdTMyIHR5cGU7CisJX191MzIgdGNvZGU7CisJX191NjQgb2Zmc2V0OworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBsZW5ndGg7CisJX191MzIgZGF0YVswXTsKK307CisKKy8qKgorICogc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVxdWVzdDIgLSBTZW50IG9uIGluY29taW5nIHJlcXVlc3QgdG8gYW4gYWRkcmVzcyByZWdpb24KKyAqIEBjbG9zdXJlOglTZWUgJmZ3X2NkZXZfZXZlbnRfY29tbW9uOyBzZXQgYnkgJUZXX0NERVZfSU9DX0FMTE9DQVRFIGlvY3RsCisgKiBAdHlwZToJU2VlICZmd19jZGV2X2V2ZW50X2NvbW1vbjsgYWx3YXlzICVGV19DREVWX0VWRU5UX1JFUVVFU1QyCisgKiBAdGNvZGU6CVRyYW5zYWN0aW9uIGNvZGUgb2YgdGhlIGluY29taW5nIHJlcXVlc3QKKyAqIEBvZmZzZXQ6CVRoZSBvZmZzZXQgaW50byB0aGUgNDgtYml0IHBlci1ub2RlIGFkZHJlc3Mgc3BhY2UKKyAqIEBzb3VyY2Vfbm9kZV9pZDogU2VuZGVyIG5vZGUgSUQKKyAqIEBkZXN0aW5hdGlvbl9ub2RlX2lkOiBEZXN0aW5hdGlvbiBub2RlIElECisgKiBAY2FyZDoJVGhlIGluZGV4IG9mIHRoZSBjYXJkIGZyb20gd2hpY2ggdGhlIHJlcXVlc3QgY2FtZQorICogQGdlbmVyYXRpb246CUJ1cyBnZW5lcmF0aW9uIGluIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHZhbGlkCisgKiBAaGFuZGxlOglSZWZlcmVuY2UgdG8gdGhlIGtlcm5lbC1zaWRlIHBlbmRpbmcgcmVxdWVzdAorICogQGxlbmd0aDoJRGF0YSBsZW5ndGgsIGkuZS4gdGhlIHJlcXVlc3QncyBwYXlsb2FkIHNpemUgaW4gYnl0ZXMKKyAqIEBkYXRhOglJbmNvbWluZyBkYXRhLCBpZiBhbnkKKyAqCisgKiBUaGlzIGV2ZW50IGlzIHNlbnQgd2hlbiB0aGUgc3RhY2sgcmVjZWl2ZXMgYW4gaW5jb21pbmcgcmVxdWVzdCB0byBhbiBhZGRyZXNzCisgKiByZWdpb24gcmVnaXN0ZXJlZCB1c2luZyB0aGUgJUZXX0NERVZfSU9DX0FMTE9DQVRFIGlvY3RsLiAgVGhlIHJlcXVlc3QgaXMKKyAqIGd1YXJhbnRlZWQgdG8gYmUgY29tcGxldGVseSBjb250YWluZWQgaW4gdGhlIHNwZWNpZmllZCByZWdpb24uICBVc2Vyc3BhY2UgaXMKKyAqIHJlc3BvbnNpYmxlIGZvciBzZW5kaW5nIHRoZSByZXNwb25zZSBieSAlRldfQ0RFVl9JT0NfU0VORF9SRVNQT05TRSBpb2N0bCwKKyAqIHVzaW5nIHRoZSBzYW1lIEBoYW5kbGUuCisgKgorICogVGhlIHBheWxvYWQgZGF0YSBmb3IgcmVxdWVzdHMgY2FycnlpbmcgZGF0YSAod3JpdGUgYW5kIGxvY2sgcmVxdWVzdHMpCisgKiBmb2xsb3dzIGltbWVkaWF0ZWx5IGFuZCBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgQGRhdGEgZmllbGQuCisgKgorICogVW5saWtlICZmd19jZGV2X2V2ZW50X3JlcXVlc3QsIEB0Y29kZSBvZiBsb2NrIHJlcXVlc3RzIGlzIG9uZSBvZiB0aGUKKyAqIGZpcmV3aXJlLWNvcmUgc3BlY2lmaWMgJVRDT0RFX0xPQ0tfTUFTS19TV0FQLi4uJVRDT0RFX0xPQ0tfVkVORE9SX0RFUEVOREVOVCwKKyAqIGkuZS4gZW5jb2RlcyB0aGUgZXh0ZW5kZWQgdHJhbnNhY3Rpb24gY29kZS4KKyAqCisgKiBAY2FyZCBtYXkgZGlmZmVyIGZyb20gJmZ3X2NkZXZfZ2V0X2luZm8uY2FyZCBiZWNhdXNlIHJlcXVlc3RzIGFyZSByZWNlaXZlZAorICogZnJvbSBhbGwgY2FyZHMgb2YgdGhlIExpbnV4IGhvc3QuICBAc291cmNlX25vZGVfaWQsIEBkZXN0aW5hdGlvbl9ub2RlX2lkLCBhbmQKKyAqIEBnZW5lcmF0aW9uIHBlcnRhaW4gdG8gdGhhdCBjYXJkLiAgRGVzdGluYXRpb24gbm9kZSBJRCBhbmQgYnVzIGdlbmVyYXRpb24gbWF5CisgKiB0aGVyZWZvcmUgZGlmZmVyIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgZmllbGRzIG9mIHRoZSBsYXN0CisgKiAmZndfY2Rldl9ldmVudF9idXNfcmVzZXQuCisgKgorICogQGRlc3RpbmF0aW9uX25vZGVfaWQgbWF5IGFsc28gZGlmZmVyIGZyb20gdGhlIGN1cnJlbnQgbm9kZSBJRCBiZWNhdXNlIG9mIGEKKyAqIG5vbi1sb2NhbCBidXMgSUQgcGFydCBvciBpbiBjYXNlIG9mIGEgYnJvYWRjYXN0IHdyaXRlIHJlcXVlc3QuICBOb3RlLCBhCisgKiBjbGllbnQgbXVzdCBjYWxsIGFuICVGV19DREVWX0lPQ19TRU5EX1JFU1BPTlNFIGlvY3RsIGV2ZW4gaW4gY2FzZSBvZiBhCisgKiBicm9hZGNhc3Qgd3JpdGUgcmVxdWVzdDsgdGhlIGtlcm5lbCB3aWxsIHRoZW4gcmVsZWFzZSB0aGUga2VybmVsLXNpZGUgcGVuZGluZworICogcmVxdWVzdCBidXQgd2lsbCBub3QgYWN0dWFsbHkgc2VuZCBhIHJlc3BvbnNlIHBhY2tldC4KKyAqCisgKiBJbiBjYXNlIG9mIGEgd3JpdGUgcmVxdWVzdCB0byBGQ1BfUkVRVUVTVCBvciBGQ1BfUkVTUE9OU0UsIHRoZSBrZXJuZWwgYWxyZWFkeQorICogc2VudCBhIHdyaXRlIHJlc3BvbnNlIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSByZXF1ZXN0IHdhcyByZWNlaXZlZDsgaW4gdGhpcworICogY2FzZSB0aGUgY2xpZW50IG11c3Qgc3RpbGwgY2FsbCBhbiAlRldfQ0RFVl9JT0NfU0VORF9SRVNQT05TRSBpb2N0bCB0bworICogcmVsZWFzZSB0aGUga2VybmVsLXNpZGUgcGVuZGluZyByZXF1ZXN0LCB0aG91Z2ggYW5vdGhlciByZXNwb25zZSB3b24ndCBiZQorICogc2VudC4KKyAqCisgKiBJZiB0aGUgY2xpZW50IHN1YnNlcXVlbnRseSBuZWVkcyB0byBpbml0aWF0ZSByZXF1ZXN0cyB0byB0aGUgc2VuZGVyIG5vZGUgb2YKKyAqIGFuICZmd19jZGV2X2V2ZW50X3JlcXVlc3QyLCBpdCBuZWVkcyB0byB1c2UgYSBkZXZpY2UgZmlsZSB3aXRoIG1hdGNoaW5nCisgKiBjYXJkIGluZGV4LCBub2RlIElELCBhbmQgZ2VuZXJhdGlvbiBmb3Igb3V0Ym91bmQgcmVxdWVzdHMuCisgKi8KK3N0cnVjdCBmd19jZGV2X2V2ZW50X3JlcXVlc3QyIHsKKwlfX3U2NCBjbG9zdXJlOworCV9fdTMyIHR5cGU7CisJX191MzIgdGNvZGU7CisJX191NjQgb2Zmc2V0OworCV9fdTMyIHNvdXJjZV9ub2RlX2lkOworCV9fdTMyIGRlc3RpbmF0aW9uX25vZGVfaWQ7CisJX191MzIgY2FyZDsKKwlfX3UzMiBnZW5lcmF0aW9uOworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBsZW5ndGg7CisJX191MzIgZGF0YVswXTsKK307CisKKy8qKgorICogc3RydWN0IGZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdCAtIFNlbnQgd2hlbiBhbiBpc28gcGFja2V0IHdhcyBjb21wbGV0ZWQKKyAqIEBjbG9zdXJlOglTZWUgJmZ3X2NkZXZfZXZlbnRfY29tbW9uOworICoJCXNldCBieSAlRldfQ0RFVl9DUkVBVEVfSVNPX0NPTlRFWFQgaW9jdGwKKyAqIEB0eXBlOglTZWUgJmZ3X2NkZXZfZXZlbnRfY29tbW9uOyBhbHdheXMgJUZXX0NERVZfRVZFTlRfSVNPX0lOVEVSUlVQVAorICogQGN5Y2xlOglDeWNsZSBjb3VudGVyIG9mIHRoZSBpbnRlcnJ1cHQgcGFja2V0CisgKiBAaGVhZGVyX2xlbmd0aDogVG90YWwgbGVuZ3RoIG9mIGZvbGxvd2luZyBoZWFkZXJzLCBpbiBieXRlcworICogQGhlYWRlcjoJU3RyaXBwZWQgaGVhZGVycywgaWYgYW55CisgKgorICogVGhpcyBldmVudCBpcyBzZW50IHdoZW4gdGhlIGNvbnRyb2xsZXIgaGFzIGNvbXBsZXRlZCBhbiAmZndfY2Rldl9pc29fcGFja2V0CisgKiB3aXRoIHRoZSAlRldfQ0RFVl9JU09fSU5URVJSVVBUIGJpdCBzZXQuCisgKgorICogSXNvY2hyb25vdXMgdHJhbnNtaXQgZXZlbnRzIChjb250ZXh0IHR5cGUgJUZXX0NERVZfSVNPX0NPTlRFWFRfVFJBTlNNSVQpOgorICoKKyAqIEluIHZlcnNpb24gMyBhbmQgc29tZSBpbXBsZW1lbnRhdGlvbnMgb2YgdmVyc2lvbiAyIG9mIHRoZSBBQkksICZoZWFkZXJfbGVuZ3RoCisgKiBpcyBhIG11bHRpcGxlIG9mIDQgYW5kICZoZWFkZXIgY29udGFpbnMgdGltZXN0YW1wcyBvZiBhbGwgcGFja2V0cyB1cCB1bnRpbAorICogdGhlIGludGVycnVwdCBwYWNrZXQuICBUaGUgZm9ybWF0IG9mIHRoZSB0aW1lc3RhbXBzIGlzIGFzIGRlc2NyaWJlZCBiZWxvdyBmb3IKKyAqIGlzb2Nocm9ub3VzIHJlY2VwdGlvbi4gIEluIHZlcnNpb24gMSBvZiB0aGUgQUJJLCAmaGVhZGVyX2xlbmd0aCB3YXMgMC4KKyAqCisgKiBJc29jaHJvbm91cyByZWNlaXZlIGV2ZW50cyAoY29udGV4dCB0eXBlICVGV19DREVWX0lTT19DT05URVhUX1JFQ0VJVkUpOgorICoKKyAqIFRoZSBoZWFkZXJzIHN0cmlwcGVkIG9mIGFsbCBwYWNrZXRzIHVwIHVudGlsIGFuZCBpbmNsdWRpbmcgdGhlIGludGVycnVwdAorICogcGFja2V0IGFyZSByZXR1cm5lZCBpbiB0aGUgQGhlYWRlciBmaWVsZC4gIFRoZSBhbW91bnQgb2YgaGVhZGVyIGRhdGEgcGVyCisgKiBwYWNrZXQgaXMgYXMgc3BlY2lmaWVkIGF0IGlzbyBjb250ZXh0IGNyZWF0aW9uIGJ5CisgKiAmZndfY2Rldl9jcmVhdGVfaXNvX2NvbnRleHQuaGVhZGVyX3NpemUuCisgKgorICogSGVuY2UsIF9pbnRlcnJ1cHQuaGVhZGVyX2xlbmd0aCAvIF9jb250ZXh0LmhlYWRlcl9zaXplIGlzIHRoZSBudW1iZXIgb2YKKyAqIHBhY2tldHMgcmVjZWl2ZWQgaW4gdGhpcyBpbnRlcnJ1cHQgZXZlbnQuICBUaGUgY2xpZW50IGNhbiBub3cgaXRlcmF0ZQorICogdGhyb3VnaCB0aGUgbW1hcCgpJ2VkIERNQSBidWZmZXIgYWNjb3JkaW5nIHRvIHRoaXMgbnVtYmVyIG9mIHBhY2tldHMgYW5kCisgKiB0byB0aGUgYnVmZmVyIHNpemVzIGFzIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluICZmd19jZGV2X3F1ZXVlX2lzby4KKyAqCisgKiBTaW5jZSB2ZXJzaW9uIDIgb2YgdGhpcyBBQkksIHRoZSBwb3J0aW9uIGZvciBlYWNoIHBhY2tldCBpbiBfaW50ZXJydXB0LmhlYWRlcgorICogY29uc2lzdHMgb2YgdGhlIDEzOTQgaXNvY2hyb25vdXMgcGFja2V0IGhlYWRlciwgZm9sbG93ZWQgYnkgYSB0aW1lc3RhbXAKKyAqIHF1YWRsZXQgaWYgJmZ3X2NkZXZfY3JlYXRlX2lzb19jb250ZXh0LmhlYWRlcl9zaXplID4gNCwgZm9sbG93ZWQgYnkgcXVhZGxldHMKKyAqIGZyb20gdGhlIHBhY2tldCBwYXlsb2FkIGlmICZmd19jZGV2X2NyZWF0ZV9pc29fY29udGV4dC5oZWFkZXJfc2l6ZSA+IDguCisgKgorICogRm9ybWF0IG9mIDEzOTQgaXNvIHBhY2tldCBoZWFkZXI6ICAxNiBiaXRzIGRhdGFfbGVuZ3RoLCAyIGJpdHMgdGFnLCA2IGJpdHMKKyAqIGNoYW5uZWwsIDQgYml0cyB0Y29kZSwgNCBiaXRzIHN5LCBpbiBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIuCisgKiBkYXRhX2xlbmd0aCBpcyB0aGUgYWN0dWFsIHJlY2VpdmVkIHNpemUgb2YgdGhlIHBhY2tldCB3aXRob3V0IHRoZSBmb3VyCisgKiAxMzk0IGlzbyBwYWNrZXQgaGVhZGVyIGJ5dGVzLgorICoKKyAqIEZvcm1hdCBvZiB0aW1lc3RhbXA6ICAxNiBiaXRzIGludmFsaWQsIDMgYml0cyBjeWNsZVNlY29uZHMsIDEzIGJpdHMKKyAqIGN5Y2xlQ291bnQsIGluIGJpZyBlbmRpYW4gYnl0ZSBvcmRlci4KKyAqCisgKiBJbiB2ZXJzaW9uIDEgb2YgdGhlIEFCSSwgbm8gdGltZXN0YW1wIHF1YWRsZXQgd2FzIGluc2VydGVkOyBpbnN0ZWFkLCBwYXlsb2FkCisgKiBkYXRhIGZvbGxvd2VkIGRpcmVjdGx5IGFmdGVyIHRoZSAxMzk0IGlzIGhlYWRlciBpZiBoZWFkZXJfc2l6ZSA+IDQuCisgKiBCZWhhdmlvdXIgb2YgdmVyLiAxIG9mIHRoaXMgQUJJIGlzIG5vIGxvbmdlciBhdmFpbGFibGUgc2luY2UgQUJJIHZlci4gMi4KKyAqLworc3RydWN0IGZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdCB7CisJX191NjQgY2xvc3VyZTsKKwlfX3UzMiB0eXBlOworCV9fdTMyIGN5Y2xlOworCV9fdTMyIGhlYWRlcl9sZW5ndGg7CisJX191MzIgaGVhZGVyWzBdOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZndfY2Rldl9ldmVudF9pc29faW50ZXJydXB0X21jIC0gQW4gaXNvIGJ1ZmZlciBjaHVuayB3YXMgY29tcGxldGVkCisgKiBAY2xvc3VyZToJU2VlICZmd19jZGV2X2V2ZW50X2NvbW1vbjsKKyAqCQlzZXQgYnkgJUZXX0NERVZfQ1JFQVRFX0lTT19DT05URVhUIGlvY3RsCisgKiBAdHlwZToJJUZXX0NERVZfRVZFTlRfSVNPX0lOVEVSUlVQVF9NVUxUSUNIQU5ORUwKKyAqIEBjb21wbGV0ZWQ6CU9mZnNldCBpbnRvIHRoZSByZWNlaXZlIGJ1ZmZlcjsgZGF0YSBiZWZvcmUgdGhpcyBvZmZlc3QgaXMgdmFsaWQKKyAqCisgKiBUaGlzIGV2ZW50IGlzIHNlbnQgaW4gbXVsdGljaGFubmVsIGNvbnRleHRzIChjb250ZXh0IHR5cGUKKyAqICVGV19DREVWX0lTT19DT05URVhUX1JFQ0VJVkVfTVVMVElDSEFOTkVMKSBmb3IgJmZ3X2NkZXZfaXNvX3BhY2tldCBidWZmZXIKKyAqIGNodW5rcyB0aGF0IGhhdmUgdGhlICVGV19DREVWX0lTT19JTlRFUlJVUFQgYml0IHNldC4gIFdoZXRoZXIgdGhpcyBoYXBwZW5zCisgKiB3aGVuIGEgcGFja2V0IGlzIGNvbXBsZXRlZCBhbmQvb3Igd2hlbiBhIGJ1ZmZlciBjaHVuayBpcyBjb21wbGV0ZWQgZGVwZW5kcworICogb24gdGhlIGhhcmR3YXJlIGltcGxlbWVudGF0aW9uLgorICoKKyAqIFRoZSBidWZmZXIgaXMgY29udGludW91c2x5IGZpbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgZGF0YSwgcGVyIHBhY2tldDoKKyAqICAtIHRoZSAxMzk0IGlzbyBwYWNrZXQgaGVhZGVyIGFzIGRlc2NyaWJlZCBhdCAmZndfY2Rldl9ldmVudF9pc29faW50ZXJydXB0LAorICogICAgYnV0IGluIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlciwKKyAqICAtIHBhY2tldCBwYXlsb2FkIChhcyBtYW55IGJ5dGVzIGFzIHNwZWNpZmllZCBpbiB0aGUgZGF0YV9sZW5ndGggZmllbGQgb2YKKyAqICAgIHRoZSAxMzk0IGlzbyBwYWNrZXQgaGVhZGVyKSBpbiBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIsCisgKiAgLSAwLi4uMyBwYWRkaW5nIGJ5dGVzIGFzIG5lZWRlZCB0byBhbGlnbiB0aGUgZm9sbG93aW5nIHRyYWlsZXIgcXVhZGxldCwKKyAqICAtIHRyYWlsZXIgcXVhZGxldCwgY29udGFpbmluZyB0aGUgcmVjZXB0aW9uIHRpbWVzdGFtcCBhcyBkZXNjcmliZWQgYXQKKyAqICAgICZmd19jZGV2X2V2ZW50X2lzb19pbnRlcnJ1cHQsIGJ1dCBpbiBsaXR0bGUgZW5kaWFuIGJ5dGUgb3JkZXIuCisgKgorICogSGVuY2UgdGhlIHBlci1wYWNrZXQgc2l6ZSBpcyBkYXRhX2xlbmd0aCAocm91bmRlZCB1cCB0byBhIG11bHRpcGxlIG9mIDQpICsgOC4KKyAqIFdoZW4gcHJvY2Vzc2luZyB0aGUgZGF0YSwgc3RvcCBiZWZvcmUgYSBwYWNrZXQgdGhhdCB3b3VsZCBjcm9zcyB0aGUKKyAqIEBjb21wbGV0ZWQgb2Zmc2V0LgorICoKKyAqIEEgcGFja2V0IG5lYXIgdGhlIGVuZCBvZiBhIGJ1ZmZlciBjaHVuayB3aWxsIHR5cGljYWxseSBzcGlsbCBvdmVyIGludG8gdGhlCisgKiBuZXh0IHF1ZXVlZCBidWZmZXIgY2h1bmsuICBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNsaWVudCB0byBjaGVjaworICogZm9yIHRoaXMgY29uZGl0aW9uLCBhc3NlbWJsZSBhIGJyb2tlbi11cCBwYWNrZXQgZnJvbSBpdHMgcGFydHMsIGFuZCBub3QgdG8KKyAqIHJlLXF1ZXVlIGFueSBidWZmZXIgY2h1bmtzIGluIHdoaWNoIGFzIHlldCB1bnJlYWQgcGFja2V0IHBhcnRzIHJlc2lkZS4KKyAqLworc3RydWN0IGZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdF9tYyB7CisJX191NjQgY2xvc3VyZTsKKwlfX3UzMiB0eXBlOworCV9fdTMyIGNvbXBsZXRlZDsKK307CisKKy8qKgorICogc3RydWN0IGZ3X2NkZXZfZXZlbnRfaXNvX3Jlc291cmNlIC0gSXNvIHJlc291cmNlcyB3ZXJlIGFsbG9jYXRlZCBvciBmcmVlZAorICogQGNsb3N1cmU6CVNlZSAmZndfY2Rldl9ldmVudF9jb21tb247CisgKgkJc2V0IGJ5ICVGV19DREVWX0lPQ18oREUpQUxMT0NBVEVfSVNPX1JFU09VUkNFKF9PTkNFKSBpb2N0bAorICogQHR5cGU6CSVGV19DREVWX0VWRU5UX0lTT19SRVNPVVJDRV9BTExPQ0FURUQgb3IKKyAqCQklRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfREVBTExPQ0FURUQKKyAqIEBoYW5kbGU6CVJlZmVyZW5jZSBieSB3aGljaCBhbiBhbGxvY2F0ZWQgcmVzb3VyY2UgY2FuIGJlIGRlYWxsb2NhdGVkCisgKiBAY2hhbm5lbDoJSXNvY2hyb25vdXMgY2hhbm5lbCB3aGljaCB3YXMgKGRlKWFsbG9jYXRlZCwgaWYgYW55CisgKiBAYmFuZHdpZHRoOglCYW5kd2lkdGggYWxsb2NhdGlvbiB1bml0cyB3aGljaCB3ZXJlIChkZSlhbGxvY2F0ZWQsIGlmIGFueQorICoKKyAqIEFuICVGV19DREVWX0VWRU5UX0lTT19SRVNPVVJDRV9BTExPQ0FURUQgZXZlbnQgaXMgc2VudCBhZnRlciBhbiBpc29jaHJvbm91cworICogcmVzb3VyY2Ugd2FzIGFsbG9jYXRlZCBhdCB0aGUgSVJNLiAgVGhlIGNsaWVudCBoYXMgdG8gY2hlY2sgQGNoYW5uZWwgYW5kCisgKiBAYmFuZHdpZHRoIGZvciB3aGV0aGVyIHRoZSBhbGxvY2F0aW9uIGFjdHVhbGx5IHN1Y2NlZWRlZC4KKyAqCisgKiBBbiAlRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfREVBTExPQ0FURUQgZXZlbnQgaXMgc2VudCBhZnRlciBhbiBpc29jaHJvbm91cworICogcmVzb3VyY2Ugd2FzIGRlYWxsb2NhdGVkIGF0IHRoZSBJUk0uICBJdCBpcyBhbHNvIHNlbnQgd2hlbiBhdXRvbWF0aWMKKyAqIHJlYWxsb2NhdGlvbiBhZnRlciBhIGJ1cyByZXNldCBmYWlsZWQuCisgKgorICogQGNoYW5uZWwgaXMgPDAgaWYgbm8gY2hhbm5lbCB3YXMgKGRlKWFsbG9jYXRlZCBvciBpZiByZWFsbG9jYXRpb24gZmFpbGVkLgorICogQGJhbmR3aWR0aCBpcyAwIGlmIG5vIGJhbmR3aWR0aCB3YXMgKGRlKWFsbG9jYXRlZCBvciBpZiByZWFsbG9jYXRpb24gZmFpbGVkLgorICovCitzdHJ1Y3QgZndfY2Rldl9ldmVudF9pc29fcmVzb3VyY2UgeworCV9fdTY0IGNsb3N1cmU7CisJX191MzIgdHlwZTsKKwlfX3UzMiBoYW5kbGU7CisJX19zMzIgY2hhbm5lbDsKKwlfX3MzMiBiYW5kd2lkdGg7Cit9OworCisvKioKKyAqIHN0cnVjdCBmd19jZGV2X2V2ZW50X3BoeV9wYWNrZXQgLSBBIFBIWSBwYWNrZXQgd2FzIHRyYW5zbWl0dGVkIG9yIHJlY2VpdmVkCisgKiBAY2xvc3VyZToJU2VlICZmd19jZGV2X2V2ZW50X2NvbW1vbjsgc2V0IGJ5ICVGV19DREVWX0lPQ19TRU5EX1BIWV9QQUNLRVQKKyAqCQlvciAlRldfQ0RFVl9JT0NfUkVDRUlWRV9QSFlfUEFDS0VUUyBpb2N0bAorICogQHR5cGU6CSVGV19DREVWX0VWRU5UX1BIWV9QQUNLRVRfU0VOVCBvciAlLi4uX1JFQ0VJVkVECisgKiBAcmNvZGU6CSVSQ09ERV8uLi4sIGluZGljYXRlcyBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgdHJhbnNtaXNzaW9uCisgKiBAbGVuZ3RoOglEYXRhIGxlbmd0aCBpbiBieXRlcworICogQGRhdGE6CUluY29taW5nIGRhdGEKKyAqCisgKiBJZiBAdHlwZSBpcyAlRldfQ0RFVl9FVkVOVF9QSFlfUEFDS0VUX1NFTlQsIEBsZW5ndGggaXMgMCBhbmQgQGRhdGEgZW1wdHksCisgKiBleGNlcHQgaW4gY2FzZSBvZiBhIHBpbmcgcGFja2V0OiAgVGhlbiwgQGxlbmd0aCBpcyA0LCBhbmQgQGRhdGFbMF0gaXMgdGhlCisgKiBwaW5nIHRpbWUgaW4gNDkuMTUyTUh6IGNsb2NrcyBpZiBAcmNvZGUgaXMgJVJDT0RFX0NPTVBMRVRFLgorICoKKyAqIElmIEB0eXBlIGlzICVGV19DREVWX0VWRU5UX1BIWV9QQUNLRVRfUkVDRUlWRUQsIEBsZW5ndGggaXMgOCBhbmQgQGRhdGEKKyAqIGNvbnNpc3RzIG9mIHRoZSB0d28gUEhZIHBhY2tldCBxdWFkbGV0cywgaW4gaG9zdCBieXRlIG9yZGVyLgorICovCitzdHJ1Y3QgZndfY2Rldl9ldmVudF9waHlfcGFja2V0IHsKKwlfX3U2NCBjbG9zdXJlOworCV9fdTMyIHR5cGU7CisJX191MzIgcmNvZGU7CisJX191MzIgbGVuZ3RoOworCV9fdTMyIGRhdGFbMF07Cit9OworCisvKioKKyAqIHVuaW9uIGZ3X2NkZXZfZXZlbnQgLSBDb252ZW5pZW5jZSB1bmlvbiBvZiBmd19jZGV2X2V2ZW50XyB0eXBlcworICogQGNvbW1vbjoJCVZhbGlkIGZvciBhbGwgdHlwZXMKKyAqIEBidXNfcmVzZXQ6CQlWYWxpZCBpZiBAY29tbW9uLnR5cGUgPT0gJUZXX0NERVZfRVZFTlRfQlVTX1JFU0VUCisgKiBAcmVzcG9uc2U6CQlWYWxpZCBpZiBAY29tbW9uLnR5cGUgPT0gJUZXX0NERVZfRVZFTlRfUkVTUE9OU0UKKyAqIEByZXF1ZXN0OgkJVmFsaWQgaWYgQGNvbW1vbi50eXBlID09ICVGV19DREVWX0VWRU5UX1JFUVVFU1QKKyAqIEByZXF1ZXN0MjoJCVZhbGlkIGlmIEBjb21tb24udHlwZSA9PSAlRldfQ0RFVl9FVkVOVF9SRVFVRVNUMgorICogQGlzb19pbnRlcnJ1cHQ6CVZhbGlkIGlmIEBjb21tb24udHlwZSA9PSAlRldfQ0RFVl9FVkVOVF9JU09fSU5URVJSVVBUCisgKiBAaXNvX2ludGVycnVwdF9tYzoJVmFsaWQgaWYgQGNvbW1vbi50eXBlID09CisgKgkJCQklRldfQ0RFVl9FVkVOVF9JU09fSU5URVJSVVBUX01VTFRJQ0hBTk5FTAorICogQGlzb19yZXNvdXJjZToJVmFsaWQgaWYgQGNvbW1vbi50eXBlID09CisgKgkJCQklRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfQUxMT0NBVEVEIG9yCisgKgkJCQklRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfREVBTExPQ0FURUQKKyAqIEBwaHlfcGFja2V0OgkJVmFsaWQgaWYgQGNvbW1vbi50eXBlID09CisgKgkJCQklRldfQ0RFVl9FVkVOVF9QSFlfUEFDS0VUX1NFTlQgb3IKKyAqCQkJCSVGV19DREVWX0VWRU5UX1BIWV9QQUNLRVRfUkVDRUlWRUQKKyAqCisgKiBDb252ZW5pZW5jZSB1bmlvbiBmb3IgdXNlcnNwYWNlIHVzZS4gIEV2ZW50cyBjb3VsZCBiZSByZWFkKDIpIGludG8gYW4KKyAqIGFwcHJvcHJpYXRlbHkgYWxpZ25lZCBjaGFyIGJ1ZmZlciBhbmQgdGhlbiBjYXN0IHRvIHRoaXMgdW5pb24gZm9yIGZ1cnRoZXIKKyAqIHByb2Nlc3NpbmcuICBOb3RlIHRoYXQgZm9yIGEgcmVxdWVzdCwgcmVzcG9uc2Ugb3IgaXNvX2ludGVycnVwdCBldmVudCwKKyAqIHRoZSBkYXRhW10gb3IgaGVhZGVyW10gbWF5IG1ha2UgdGhlIHNpemUgb2YgdGhlIGZ1bGwgZXZlbnQgbGFyZ2VyIHRoYW4KKyAqIHNpemVvZih1bmlvbiBmd19jZGV2X2V2ZW50KS4gIEFsc28gbm90ZSB0aGF0IGlmIHlvdSBhdHRlbXB0IHRvIHJlYWQoMikKKyAqIGFuIGV2ZW50IGludG8gYSBidWZmZXIgdGhhdCBpcyBub3QgbGFyZ2UgZW5vdWdoIGZvciBpdCwgdGhlIGRhdGEgdGhhdCBkb2VzCisgKiBub3QgZml0IHdpbGwgYmUgZGlzY2FyZGVkIHNvIHRoYXQgdGhlIG5leHQgcmVhZCgyKSB3aWxsIHJldHVybiBhIG5ldyBldmVudC4KKyAqLwordW5pb24gZndfY2Rldl9ldmVudCB7CisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfY29tbW9uCQljb21tb247CisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfYnVzX3Jlc2V0CQlidXNfcmVzZXQ7CisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVzcG9uc2UJCXJlc3BvbnNlOworCXN0cnVjdCBmd19jZGV2X2V2ZW50X3JlcXVlc3QJCXJlcXVlc3Q7CisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVxdWVzdDIJCXJlcXVlc3QyOwkJLyogYWRkZWQgaW4gMi42LjM2ICovCisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdAlpc29faW50ZXJydXB0OworCXN0cnVjdCBmd19jZGV2X2V2ZW50X2lzb19pbnRlcnJ1cHRfbWMJaXNvX2ludGVycnVwdF9tYzsJLyogYWRkZWQgaW4gMi42LjM2ICovCisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfaXNvX3Jlc291cmNlCWlzb19yZXNvdXJjZTsJCS8qIGFkZGVkIGluIDIuNi4zMCAqLworCXN0cnVjdCBmd19jZGV2X2V2ZW50X3BoeV9wYWNrZXQJCXBoeV9wYWNrZXQ7CQkvKiBhZGRlZCBpbiAyLjYuMzYgKi8KK307CisKKy8qIGF2YWlsYWJsZSBzaW5jZSBrZXJuZWwgdmVyc2lvbiAyLjYuMjIgKi8KKyNkZWZpbmUgRldfQ0RFVl9JT0NfR0VUX0lORk8gICAgICAgICAgIF9JT1dSKCcjJywgMHgwMCwgc3RydWN0IGZ3X2NkZXZfZ2V0X2luZm8pCisjZGVmaW5lIEZXX0NERVZfSU9DX1NFTkRfUkVRVUVTVCAgICAgICAgX0lPVygnIycsIDB4MDEsIHN0cnVjdCBmd19jZGV2X3NlbmRfcmVxdWVzdCkKKyNkZWZpbmUgRldfQ0RFVl9JT0NfQUxMT0NBVEUgICAgICAgICAgIF9JT1dSKCcjJywgMHgwMiwgc3RydWN0IGZ3X2NkZXZfYWxsb2NhdGUpCisjZGVmaW5lIEZXX0NERVZfSU9DX0RFQUxMT0NBVEUgICAgICAgICAgX0lPVygnIycsIDB4MDMsIHN0cnVjdCBmd19jZGV2X2RlYWxsb2NhdGUpCisjZGVmaW5lIEZXX0NERVZfSU9DX1NFTkRfUkVTUE9OU0UgICAgICAgX0lPVygnIycsIDB4MDQsIHN0cnVjdCBmd19jZGV2X3NlbmRfcmVzcG9uc2UpCisjZGVmaW5lIEZXX0NERVZfSU9DX0lOSVRJQVRFX0JVU19SRVNFVCAgX0lPVygnIycsIDB4MDUsIHN0cnVjdCBmd19jZGV2X2luaXRpYXRlX2J1c19yZXNldCkKKyNkZWZpbmUgRldfQ0RFVl9JT0NfQUREX0RFU0NSSVBUT1IgICAgIF9JT1dSKCcjJywgMHgwNiwgc3RydWN0IGZ3X2NkZXZfYWRkX2Rlc2NyaXB0b3IpCisjZGVmaW5lIEZXX0NERVZfSU9DX1JFTU9WRV9ERVNDUklQVE9SICAgX0lPVygnIycsIDB4MDcsIHN0cnVjdCBmd19jZGV2X3JlbW92ZV9kZXNjcmlwdG9yKQorI2RlZmluZSBGV19DREVWX0lPQ19DUkVBVEVfSVNPX0NPTlRFWFQgX0lPV1IoJyMnLCAweDA4LCBzdHJ1Y3QgZndfY2Rldl9jcmVhdGVfaXNvX2NvbnRleHQpCisjZGVmaW5lIEZXX0NERVZfSU9DX1FVRVVFX0lTTyAgICAgICAgICBfSU9XUignIycsIDB4MDksIHN0cnVjdCBmd19jZGV2X3F1ZXVlX2lzbykKKyNkZWZpbmUgRldfQ0RFVl9JT0NfU1RBUlRfSVNPICAgICAgICAgICBfSU9XKCcjJywgMHgwYSwgc3RydWN0IGZ3X2NkZXZfc3RhcnRfaXNvKQorI2RlZmluZSBGV19DREVWX0lPQ19TVE9QX0lTTyAgICAgICAgICAgIF9JT1coJyMnLCAweDBiLCBzdHJ1Y3QgZndfY2Rldl9zdG9wX2lzbykKKworLyogYXZhaWxhYmxlIHNpbmNlIGtlcm5lbCB2ZXJzaW9uIDIuNi4yNCAqLworI2RlZmluZSBGV19DREVWX0lPQ19HRVRfQ1lDTEVfVElNRVIgICAgIF9JT1IoJyMnLCAweDBjLCBzdHJ1Y3QgZndfY2Rldl9nZXRfY3ljbGVfdGltZXIpCisKKy8qIGF2YWlsYWJsZSBzaW5jZSBrZXJuZWwgdmVyc2lvbiAyLjYuMzAgKi8KKyNkZWZpbmUgRldfQ0RFVl9JT0NfQUxMT0NBVEVfSVNPX1JFU09VUkNFICAgICAgIF9JT1dSKCcjJywgMHgwZCwgc3RydWN0IGZ3X2NkZXZfYWxsb2NhdGVfaXNvX3Jlc291cmNlKQorI2RlZmluZSBGV19DREVWX0lPQ19ERUFMTE9DQVRFX0lTT19SRVNPVVJDRSAgICAgIF9JT1coJyMnLCAweDBlLCBzdHJ1Y3QgZndfY2Rldl9kZWFsbG9jYXRlKQorI2RlZmluZSBGV19DREVWX0lPQ19BTExPQ0FURV9JU09fUkVTT1VSQ0VfT05DRSAgIF9JT1coJyMnLCAweDBmLCBzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZV9pc29fcmVzb3VyY2UpCisjZGVmaW5lIEZXX0NERVZfSU9DX0RFQUxMT0NBVEVfSVNPX1JFU09VUkNFX09OQ0UgX0lPVygnIycsIDB4MTAsIHN0cnVjdCBmd19jZGV2X2FsbG9jYXRlX2lzb19yZXNvdXJjZSkKKyNkZWZpbmUgRldfQ0RFVl9JT0NfR0VUX1NQRUVEICAgICAgICAgICAgICAgICAgICAgX0lPKCcjJywgMHgxMSkgLyogcmV0dXJucyBzcGVlZCBjb2RlICovCisjZGVmaW5lIEZXX0NERVZfSU9DX1NFTkRfQlJPQURDQVNUX1JFUVVFU1QgICAgICAgX0lPVygnIycsIDB4MTIsIHN0cnVjdCBmd19jZGV2X3NlbmRfcmVxdWVzdCkKKyNkZWZpbmUgRldfQ0RFVl9JT0NfU0VORF9TVFJFQU1fUEFDS0VUICAgICAgICAgICBfSU9XKCcjJywgMHgxMywgc3RydWN0IGZ3X2NkZXZfc2VuZF9zdHJlYW1fcGFja2V0KQorCisvKiBhdmFpbGFibGUgc2luY2Uga2VybmVsIHZlcnNpb24gMi42LjM0ICovCisjZGVmaW5lIEZXX0NERVZfSU9DX0dFVF9DWUNMRV9USU1FUjIgICBfSU9XUignIycsIDB4MTQsIHN0cnVjdCBmd19jZGV2X2dldF9jeWNsZV90aW1lcjIpCisKKy8qIGF2YWlsYWJsZSBzaW5jZSBrZXJuZWwgdmVyc2lvbiAyLjYuMzYgKi8KKyNkZWZpbmUgRldfQ0RFVl9JT0NfU0VORF9QSFlfUEFDS0VUICAgIF9JT1dSKCcjJywgMHgxNSwgc3RydWN0IGZ3X2NkZXZfc2VuZF9waHlfcGFja2V0KQorI2RlZmluZSBGV19DREVWX0lPQ19SRUNFSVZFX1BIWV9QQUNLRVRTIF9JT1coJyMnLCAweDE2LCBzdHJ1Y3QgZndfY2Rldl9yZWNlaXZlX3BoeV9wYWNrZXRzKQorI2RlZmluZSBGV19DREVWX0lPQ19TRVRfSVNPX0NIQU5ORUxTICAgIF9JT1coJyMnLCAweDE3LCBzdHJ1Y3QgZndfY2Rldl9zZXRfaXNvX2NoYW5uZWxzKQorCisvKgorICogQUJJIHZlcnNpb24gaGlzdG9yeQorICogIDEgICgyLjYuMjIpICAtIGluaXRpYWwgdmVyc2lvbgorICogICAgICgyLjYuMjQpICAtIGFkZGVkICVGV19DREVWX0lPQ19HRVRfQ1lDTEVfVElNRVIKKyAqICAyICAoMi42LjMwKSAgLSBjaGFuZ2VkICZmd19jZGV2X2V2ZW50X2lzb19pbnRlcnJ1cHQuaGVhZGVyIGlmCisgKiAgICAgICAgICAgICAgICAgJmZ3X2NkZXZfY3JlYXRlX2lzb19jb250ZXh0LmhlYWRlcl9zaXplIGlzIDggb3IgbW9yZQorICogICAgICAgICAgICAgICAtIGFkZGVkICVGV19DREVWX0lPQ18qX0lTT19SRVNPVVJDRSosCisgKiAgICAgICAgICAgICAgICAgJUZXX0NERVZfSU9DX0dFVF9TUEVFRCwgJUZXX0NERVZfSU9DX1NFTkRfQlJPQURDQVNUX1JFUVVFU1QsCisgKiAgICAgICAgICAgICAgICAgJUZXX0NERVZfSU9DX1NFTkRfU1RSRUFNX1BBQ0tFVAorICogICAgICgyLjYuMzIpICAtIGFkZGVkIHRpbWUgc3RhbXAgdG8geG1pdCAmZndfY2Rldl9ldmVudF9pc29faW50ZXJydXB0CisgKiAgICAgKDIuNi4zMykgIC0gSVIgaGFzIGFsd2F5cyBwYWNrZXQtcGVyLWJ1ZmZlciBzZW1hbnRpY3Mgbm93LCBub3Qgb25lIG9mCisgKiAgICAgICAgICAgICAgICAgZHVhbC1idWZmZXIgb3IgcGFja2V0LXBlci1idWZmZXIgZGVwZW5kaW5nIG9uIGhhcmR3YXJlCisgKiAgICAgICAgICAgICAgIC0gc2hhcmVkIHVzZSBhbmQgYXV0by1yZXNwb25zZSBmb3IgRkNQIHJlZ2lzdGVycworICogIDMgICgyLjYuMzQpICAtIG1hZGUgJmZ3X2NkZXZfZ2V0X2N5Y2xlX3RpbWVyIHJlbGlhYmxlCisgKiAgICAgICAgICAgICAgIC0gYWRkZWQgJUZXX0NERVZfSU9DX0dFVF9DWUNMRV9USU1FUjIKKyAqICA0ICAoMi42LjM2KSAgLSBhZGRlZCAlRldfQ0RFVl9FVkVOVF9SRVFVRVNUMiwgJUZXX0NERVZfRVZFTlRfUEhZX1BBQ0tFVF8qLAorICogICAgICAgICAgICAgICAgIGFuZCAmZndfY2Rldl9hbGxvY2F0ZS5yZWdpb25fZW5kCisgKiAgICAgICAgICAgICAgIC0gaW1wbGVtZW50ZWQgJmZ3X2NkZXZfZXZlbnRfYnVzX3Jlc2V0LmJtX25vZGVfaWQKKyAqICAgICAgICAgICAgICAgLSBhZGRlZCAlRldfQ0RFVl9JT0NfU0VORF9QSFlfUEFDS0VULCBfUkVDRUlWRV9QSFlfUEFDS0VUUworICogICAgICAgICAgICAgICAtIGFkZGVkICVGV19DREVWX0VWRU5UX0lTT19JTlRFUlJVUFRfTVVMVElDSEFOTkVMLAorICogICAgICAgICAgICAgICAgICVGV19DREVWX0lTT19DT05URVhUX1JFQ0VJVkVfTVVMVElDSEFOTkVMLCBhbmQKKyAqICAgICAgICAgICAgICAgICAlRldfQ0RFVl9JT0NfU0VUX0lTT19DSEFOTkVMUworICovCisjZGVmaW5lIEZXX0NERVZfVkVSU0lPTiAzIC8qIE1lYW5pbmdsZXNzOyBkb24ndCB1c2UgdGhpcyBtYWNyby4gKi8KKworLyoqCisgKiBzdHJ1Y3QgZndfY2Rldl9nZXRfaW5mbyAtIEdlbmVyYWwgcHVycG9zZSBpbmZvcm1hdGlvbiBpb2N0bAorICogQHZlcnNpb246CVRoZSB2ZXJzaW9uIGZpZWxkIGlzIGp1c3QgYSBydW5uaW5nIHNlcmlhbCBudW1iZXIuICBCb3RoIGFuCisgKgkJaW5wdXQgcGFyYW1ldGVyIChBQkkgdmVyc2lvbiBpbXBsZW1lbnRlZCBieSB0aGUgY2xpZW50KSBhbmQKKyAqCQlvdXRwdXQgcGFyYW1ldGVyIChBQkkgdmVyc2lvbiBpbXBsZW1lbnRlZCBieSB0aGUga2VybmVsKS4KKyAqCQlBIGNsaWVudCBtdXN0IG5vdCBmaWxsIGluIGFuICVGV19DREVWX1ZFUlNJT04gZGVmaW5lZCBmcm9tIGFuCisgKgkJaW5jbHVkZWQga2VybmVsIGhlYWRlciBmaWxlIGJ1dCB0aGUgYWN0dWFsIHZlcnNpb24gZm9yIHdoaWNoCisgKgkJdGhlIGNsaWVudCB3YXMgaW1wbGVtZW50ZWQuICBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgZm9yd2FyZAorICoJCWNvbXBhdGliaWxpdHkuICBXZSBuZXZlciBicmVhayBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgYnV0CisgKgkJbWF5IGFkZCBtb3JlIHN0cnVjdHMsIGV2ZW50cywgYW5kIGlvY3RscyBpbiBsYXRlciByZXZpc2lvbnMuCisgKiBAcm9tX2xlbmd0aDoJSWYgQHJvbSBpcyBub24temVybywgYXQgbW9zdCByb21fbGVuZ3RoIGJ5dGVzIG9mIGNvbmZpZ3VyYXRpb24KKyAqCQlST00gd2lsbCBiZSBjb3BpZWQgaW50byB0aGF0IHVzZXIgc3BhY2UgYWRkcmVzcy4gIEluIGVpdGhlcgorICoJCWNhc2UsIEByb21fbGVuZ3RoIGlzIHVwZGF0ZWQgd2l0aCB0aGUgYWN0dWFsIGxlbmd0aCBvZiB0aGUKKyAqCQljb25maWd1cmF0aW9uIFJPTS4KKyAqIEByb206CUlmIG5vbi16ZXJvLCBhZGRyZXNzIG9mIGEgYnVmZmVyIHRvIGJlIGZpbGxlZCBieSBhIGNvcHkgb2YgdGhlCisgKgkJZGV2aWNlJ3MgY29uZmlndXJhdGlvbiBST00KKyAqIEBidXNfcmVzZXQ6CUlmIG5vbi16ZXJvLCBhZGRyZXNzIG9mIGEgYnVmZmVyIHRvIGJlIGZpbGxlZCBieSBhCisgKgkJJnN0cnVjdCBmd19jZGV2X2V2ZW50X2J1c19yZXNldCB3aXRoIHRoZSBjdXJyZW50IHN0YXRlCisgKgkJb2YgdGhlIGJ1cy4gIFRoaXMgZG9lcyBub3QgY2F1c2UgYSBidXMgcmVzZXQgdG8gaGFwcGVuLgorICogQGJ1c19yZXNldF9jbG9zdXJlOiBWYWx1ZSBvZiAmY2xvc3VyZSBpbiB0aGlzIGFuZCBzdWJzZXF1ZW50IGJ1cyByZXNldCBldmVudHMKKyAqIEBjYXJkOglUaGUgaW5kZXggb2YgdGhlIGNhcmQgdGhpcyBkZXZpY2UgYmVsb25ncyB0bworICovCitzdHJ1Y3QgZndfY2Rldl9nZXRfaW5mbyB7CisJX191MzIgdmVyc2lvbjsKKwlfX3UzMiByb21fbGVuZ3RoOworCV9fdTY0IHJvbTsKKwlfX3U2NCBidXNfcmVzZXQ7CisJX191NjQgYnVzX3Jlc2V0X2Nsb3N1cmU7CisJX191MzIgY2FyZDsKK307CisKKy8qKgorICogc3RydWN0IGZ3X2NkZXZfc2VuZF9yZXF1ZXN0IC0gU2VuZCBhbiBhc3luY2hyb25vdXMgcmVxdWVzdCBwYWNrZXQKKyAqIEB0Y29kZToJVHJhbnNhY3Rpb24gY29kZSBvZiB0aGUgcmVxdWVzdAorICogQGxlbmd0aDoJTGVuZ3RoIG9mIG91dGdvaW5nIHBheWxvYWQsIGluIGJ5dGVzCisgKiBAb2Zmc2V0Ogk0OC1iaXQgb2Zmc2V0IGF0IGRlc3RpbmF0aW9uIG5vZGUKKyAqIEBjbG9zdXJlOglQYXNzZWQgYmFjayB0byB1c2Vyc3BhY2UgaW4gdGhlIHJlc3BvbnNlIGV2ZW50CisgKiBAZGF0YToJVXNlcnNwYWNlIHBvaW50ZXIgdG8gcGF5bG9hZAorICogQGdlbmVyYXRpb246CVRoZSBidXMgZ2VuZXJhdGlvbiB3aGVyZSBwYWNrZXQgaXMgdmFsaWQKKyAqCisgKiBTZW5kIGEgcmVxdWVzdCB0byB0aGUgZGV2aWNlLiAgVGhpcyBpb2N0bCBpbXBsZW1lbnRzIGFsbCBvdXRnb2luZyByZXF1ZXN0cy4KKyAqIEJvdGggcXVhZGxldCBhbmQgYmxvY2sgcmVxdWVzdCBzcGVjaWZ5IHRoZSBwYXlsb2FkIGFzIGEgcG9pbnRlciB0byB0aGUgZGF0YQorICogaW4gdGhlIEBkYXRhIGZpZWxkLiAgT25jZSB0aGUgdHJhbnNhY3Rpb24gY29tcGxldGVzLCB0aGUga2VybmVsIHdyaXRlcyBhbgorICogJmZ3X2NkZXZfZXZlbnRfcmVzcG9uc2UgZXZlbnQgYmFjay4gIFRoZSBAY2xvc3VyZSBmaWVsZCBpcyBwYXNzZWQgYmFjayB0bworICogdXNlciBzcGFjZSBpbiB0aGUgcmVzcG9uc2UgZXZlbnQuCisgKi8KK3N0cnVjdCBmd19jZGV2X3NlbmRfcmVxdWVzdCB7CisJX191MzIgdGNvZGU7CisJX191MzIgbGVuZ3RoOworCV9fdTY0IG9mZnNldDsKKwlfX3U2NCBjbG9zdXJlOworCV9fdTY0IGRhdGE7CisJX191MzIgZ2VuZXJhdGlvbjsKK307CisKKy8qKgorICogc3RydWN0IGZ3X2NkZXZfc2VuZF9yZXNwb25zZSAtIFNlbmQgYW4gYXN5bmNocm9ub3VzIHJlc3BvbnNlIHBhY2tldAorICogQHJjb2RlOglSZXNwb25zZSBjb2RlIGFzIGRldGVybWluZWQgYnkgdGhlIHVzZXJzcGFjZSBoYW5kbGVyCisgKiBAbGVuZ3RoOglMZW5ndGggb2Ygb3V0Z29pbmcgcGF5bG9hZCwgaW4gYnl0ZXMKKyAqIEBkYXRhOglVc2Vyc3BhY2UgcG9pbnRlciB0byBwYXlsb2FkCisgKiBAaGFuZGxlOglUaGUgaGFuZGxlIGZyb20gdGhlICZmd19jZGV2X2V2ZW50X3JlcXVlc3QKKyAqCisgKiBTZW5kIGEgcmVzcG9uc2UgdG8gYW4gaW5jb21pbmcgcmVxdWVzdC4gIEJ5IHNldHRpbmcgdXAgYW4gYWRkcmVzcyByYW5nZSB1c2luZworICogdGhlICVGV19DREVWX0lPQ19BTExPQ0FURSBpb2N0bCwgdXNlcnNwYWNlIGNhbiBsaXN0ZW4gZm9yIGluY29taW5nIHJlcXVlc3RzLiAgQW4KKyAqIGluY29taW5nIHJlcXVlc3Qgd2lsbCBnZW5lcmF0ZSBhbiAlRldfQ0RFVl9FVkVOVF9SRVFVRVNULCBhbmQgdXNlcnNwYWNlIG11c3QKKyAqIHNlbmQgYSByZXBseSB1c2luZyB0aGlzIGlvY3RsLiAgVGhlIGV2ZW50IGhhcyBhIGhhbmRsZSB0byB0aGUga2VybmVsLXNpZGUKKyAqIHBlbmRpbmcgdHJhbnNhY3Rpb24sIHdoaWNoIHNob3VsZCBiZSB1c2VkIHdpdGggdGhpcyBpb2N0bC4KKyAqLworc3RydWN0IGZ3X2NkZXZfc2VuZF9yZXNwb25zZSB7CisJX191MzIgcmNvZGU7CisJX191MzIgbGVuZ3RoOworCV9fdTY0IGRhdGE7CisJX191MzIgaGFuZGxlOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZSAtIEFsbG9jYXRlIGEgQ1NSIGluIGFuIGFkZHJlc3MgcmFuZ2UKKyAqIEBvZmZzZXQ6CVN0YXJ0IG9mZnNldCBvZiB0aGUgYWRkcmVzcyByYW5nZQorICogQGNsb3N1cmU6CVRvIGJlIHBhc3NlZCBiYWNrIHRvIHVzZXJzcGFjZSBpbiByZXF1ZXN0IGV2ZW50cworICogQGxlbmd0aDoJTGVuZ3RoIG9mIHRoZSBDU1IsIGluIGJ5dGVzCisgKiBAaGFuZGxlOglIYW5kbGUgdG8gdGhlIGFsbG9jYXRpb24sIHdyaXR0ZW4gYnkgdGhlIGtlcm5lbAorICogQHJlZ2lvbl9lbmQ6CUZpcnN0IGFkZHJlc3MgYWJvdmUgdGhlIGFkZHJlc3MgcmFuZ2UgKGFkZGVkIGluIEFCSSB2NCwgMi42LjM2KQorICoKKyAqIEFsbG9jYXRlIGFuIGFkZHJlc3MgcmFuZ2UgaW4gdGhlIDQ4LWJpdCBhZGRyZXNzIHNwYWNlIG9uIHRoZSBsb2NhbCBub2RlCisgKiAodGhlIGNvbnRyb2xsZXIpLiAgVGhpcyBhbGxvd3MgdXNlcnNwYWNlIHRvIGxpc3RlbiBmb3IgcmVxdWVzdHMgd2l0aCBhbgorICogb2Zmc2V0IHdpdGhpbiB0aGF0IGFkZHJlc3MgcmFuZ2UuICBFdmVyeSB0aW1lIHdoZW4gdGhlIGtlcm5lbCByZWNlaXZlcyBhCisgKiByZXF1ZXN0IHdpdGhpbiB0aGUgcmFuZ2UsIGFuICZmd19jZGV2X2V2ZW50X3JlcXVlc3QyIGV2ZW50IHdpbGwgYmUgZW1pdHRlZC4KKyAqIChJZiB0aGUga2VybmVsIG9yIHRoZSBjbGllbnQgaW1wbGVtZW50cyBBQkkgdmVyc2lvbiA8PSAzLCBhbgorICogJmZ3X2NkZXZfZXZlbnRfcmVxdWVzdCB3aWxsIGJlIGdlbmVyYXRlZCBpbnN0ZWFkLikKKyAqCisgKiBUaGUgQGNsb3N1cmUgZmllbGQgaXMgcGFzc2VkIGJhY2sgdG8gdXNlcnNwYWNlIGluIHRoZXNlIHJlcXVlc3QgZXZlbnRzLgorICogVGhlIEBoYW5kbGUgZmllbGQgaXMgYW4gb3V0IHBhcmFtZXRlciwgcmV0dXJuaW5nIGEgaGFuZGxlIHRvIHRoZSBhbGxvY2F0ZWQKKyAqIHJhbmdlIHRvIGJlIHVzZWQgZm9yIGxhdGVyIGRlYWxsb2NhdGlvbiBvZiB0aGUgcmFuZ2UuCisgKgorICogVGhlIGFkZHJlc3MgcmFuZ2UgaXMgYWxsb2NhdGVkIG9uIGFsbCBsb2NhbCBub2Rlcy4gIFRoZSBhZGRyZXNzIGFsbG9jYXRpb24KKyAqIGlzIGV4Y2x1c2l2ZSBleGNlcHQgZm9yIHRoZSBGQ1AgY29tbWFuZCBhbmQgcmVzcG9uc2UgcmVnaXN0ZXJzLiAgSWYgYW4KKyAqIGV4Y2x1c2l2ZSBhZGRyZXNzIHJlZ2lvbiBpcyBhbHJlYWR5IGluIHVzZSwgdGhlIGlvY3RsIGZhaWxzIHdpdGggZXJybm8gc2V0CisgKiB0byAlRUJVU1kuCisgKgorICogSWYga2VybmVsIGFuZCBjbGllbnQgaW1wbGVtZW50IEFCSSB2ZXJzaW9uID49IDQsIHRoZSBrZXJuZWwgbG9va3MgdXAgYSBmcmVlCisgKiBzcG90IG9mIHNpemUgQGxlbmd0aCBpbnNpZGUgW0BvZmZzZXQuLkByZWdpb25fZW5kKSBhbmQsIGlmIGZvdW5kLCB3cml0ZXMKKyAqIHRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBuZXcgQ1NSIGJhY2sgaW4gQG9mZnNldC4gIEkuZS4gQG9mZnNldCBpcyBhbgorICogaW4gYW5kIG91dCBwYXJhbWV0ZXIuICBJZiB0aGlzIGF1dG9tYXRpYyBwbGFjZW1lbnQgb2YgYSBDU1IgaW4gYSBiaWdnZXIKKyAqIGFkZHJlc3MgcmFuZ2UgaXMgbm90IGRlc2lyZWQsIHRoZSBjbGllbnQgc2ltcGx5IG5lZWRzIHRvIHNldCBAcmVnaW9uX2VuZAorICogPSBAb2Zmc2V0ICsgQGxlbmd0aC4KKyAqCisgKiBJZiB0aGUga2VybmVsIG9yIHRoZSBjbGllbnQgaW1wbGVtZW50cyBBQkkgdmVyc2lvbiA8PSAzLCBAcmVnaW9uX2VuZCBpcworICogaWdub3JlZCBhbmQgZWZmZWN0aXZlbHkgYXNzdW1lZCB0byBiZSBAb2Zmc2V0ICsgQGxlbmd0aC4KKyAqCisgKiBAcmVnaW9uX2VuZCBpcyBvbmx5IHByZXNlbnQgaW4gYSBrZXJuZWwgaGVhZGVyID49IDIuNi4zNi4gIElmIG5lY2Vzc2FyeSwKKyAqIHRoaXMgY2FuIGZvciBleGFtcGxlIGJlIHRlc3RlZCBieSAjaWZkZWYgRldfQ0RFVl9FVkVOVF9SRVFVRVNUMi4KKyAqLworc3RydWN0IGZ3X2NkZXZfYWxsb2NhdGUgeworCV9fdTY0IG9mZnNldDsKKwlfX3U2NCBjbG9zdXJlOworCV9fdTMyIGxlbmd0aDsKKwlfX3UzMiBoYW5kbGU7CisJX191NjQgcmVnaW9uX2VuZDsJLyogYXZhaWxhYmxlIHNpbmNlIGtlcm5lbCB2ZXJzaW9uIDIuNi4zNiAqLworfTsKKworLyoqCisgKiBzdHJ1Y3QgZndfY2Rldl9kZWFsbG9jYXRlIC0gRnJlZSBhIENTUiBhZGRyZXNzIHJhbmdlIG9yIGlzb2Nocm9ub3VzIHJlc291cmNlCisgKiBAaGFuZGxlOglIYW5kbGUgdG8gdGhlIGFkZHJlc3MgcmFuZ2Ugb3IgaXNvIHJlc291cmNlLCBhcyByZXR1cm5lZCBieSB0aGUKKyAqCQlrZXJuZWwgd2hlbiB0aGUgcmFuZ2Ugb3IgcmVzb3VyY2Ugd2FzIGFsbG9jYXRlZAorICovCitzdHJ1Y3QgZndfY2Rldl9kZWFsbG9jYXRlIHsKKwlfX3UzMiBoYW5kbGU7Cit9OworCisjZGVmaW5lIEZXX0NERVZfTE9OR19SRVNFVAkwCisjZGVmaW5lIEZXX0NERVZfU0hPUlRfUkVTRVQJMQorCisvKioKKyAqIHN0cnVjdCBmd19jZGV2X2luaXRpYXRlX2J1c19yZXNldCAtIEluaXRpYXRlIGEgYnVzIHJlc2V0CisgKiBAdHlwZToJJUZXX0NERVZfU0hPUlRfUkVTRVQgb3IgJUZXX0NERVZfTE9OR19SRVNFVAorICoKKyAqIEluaXRpYXRlIGEgYnVzIHJlc2V0IGZvciB0aGUgYnVzIHRoaXMgZGV2aWNlIGlzIG9uLiAgVGhlIGJ1cyByZXNldCBjYW4gYmUKKyAqIGVpdGhlciB0aGUgb3JpZ2luYWwgKGxvbmcpIGJ1cyByZXNldCBvciB0aGUgYXJiaXRyYXRlZCAoc2hvcnQpIGJ1cyByZXNldAorICogaW50cm9kdWNlZCBpbiAxMzk0YS0yMDAwLgorICoKKyAqIFRoZSBpb2N0bCByZXR1cm5zIGltbWVkaWF0ZWx5LiAgQSBzdWJzZXF1ZW50ICZmd19jZGV2X2V2ZW50X2J1c19yZXNldAorICogaW5kaWNhdGVzIHdoZW4gdGhlIHJlc2V0IGFjdHVhbGx5IGhhcHBlbmVkLiAgU2luY2UgQUJJIHY0LCB0aGlzIG1heSBiZQorICogY29uc2lkZXJhYmx5IGxhdGVyIHRoYW4gdGhlIGlvY3RsIGJlY2F1c2UgdGhlIGtlcm5lbCBlbnN1cmVzIGEgZ3JhY2UgcGVyaW9kCisgKiBiZXR3ZWVuIHN1YnNlcXVlbnQgYnVzIHJlc2V0cyBhcyBwZXIgSUVFRSAxMzk0IGJ1cyBtYW5hZ2VtZW50IHNwZWNpZmljYXRpb24uCisgKi8KK3N0cnVjdCBmd19jZGV2X2luaXRpYXRlX2J1c19yZXNldCB7CisJX191MzIgdHlwZTsKK307CisKKy8qKgorICogc3RydWN0IGZ3X2NkZXZfYWRkX2Rlc2NyaXB0b3IgLSBBZGQgY29udGVudHMgdG8gdGhlIGxvY2FsIG5vZGUncyBjb25maWcgUk9NCisgKiBAaW1tZWRpYXRlOglJZiBub24temVybywgaW1tZWRpYXRlIGtleSB0byBpbnNlcnQgYmVmb3JlIHBvaW50ZXIKKyAqIEBrZXk6CVVwcGVyIDggYml0cyBvZiByb290IGRpcmVjdG9yeSBwb2ludGVyCisgKiBAZGF0YToJVXNlcnNwYWNlIHBvaW50ZXIgdG8gY29udGVudHMgb2YgZGVzY3JpcHRvciBibG9jaworICogQGxlbmd0aDoJTGVuZ3RoIG9mIGRlc2NyaXB0b3IgYmxvY2sgZGF0YSwgaW4gcXVhZGxldHMKKyAqIEBoYW5kbGU6CUhhbmRsZSB0byB0aGUgZGVzY3JpcHRvciwgd3JpdHRlbiBieSB0aGUga2VybmVsCisgKgorICogQWRkIGEgZGVzY3JpcHRvciBibG9jayBhbmQgb3B0aW9uYWxseSBhIHByZWNlZGluZyBpbW1lZGlhdGUga2V5IHRvIHRoZSBsb2NhbAorICogbm9kZSdzIGNvbmZpZ3VyYXRpb24gUk9NLgorICoKKyAqIFRoZSBAa2V5IGZpZWxkIHNwZWNpZmllcyB0aGUgdXBwZXIgOCBiaXRzIG9mIHRoZSBkZXNjcmlwdG9yIHJvb3QgZGlyZWN0b3J5CisgKiBwb2ludGVyIGFuZCB0aGUgQGRhdGEgYW5kIEBsZW5ndGggZmllbGRzIHNwZWNpZnkgdGhlIGNvbnRlbnRzLiBUaGUgQGtleQorICogc2hvdWxkIGJlIG9mIHRoZSBmb3JtIDB4WFgwMDAwMDAuIFRoZSBvZmZzZXQgcGFydCBvZiB0aGUgcm9vdCBkaXJlY3RvcnkgZW50cnkKKyAqIHdpbGwgYmUgZmlsbGVkIGluIGJ5IHRoZSBrZXJuZWwuCisgKgorICogSWYgbm90IDAsIHRoZSBAaW1tZWRpYXRlIGZpZWxkIHNwZWNpZmllcyBhbiBpbW1lZGlhdGUga2V5IHdoaWNoIHdpbGwgYmUKKyAqIGluc2VydGVkIGJlZm9yZSB0aGUgcm9vdCBkaXJlY3RvcnkgcG9pbnRlci4KKyAqCisgKiBAaW1tZWRpYXRlLCBAa2V5LCBhbmQgQGRhdGEgYXJyYXkgZWxlbWVudHMgYXJlIENQVS1lbmRpYW4gcXVhZGxldHMuCisgKgorICogSWYgc3VjY2Vzc2Z1bCwgdGhlIGtlcm5lbCBhZGRzIHRoZSBkZXNjcmlwdG9yIGFuZCB3cml0ZXMgYmFjayBhIEBoYW5kbGUgdG8KKyAqIHRoZSBrZXJuZWwtc2lkZSBvYmplY3QgdG8gYmUgdXNlZCBmb3IgbGF0ZXIgcmVtb3ZhbCBvZiB0aGUgZGVzY3JpcHRvciBibG9jaworICogYW5kIGltbWVkaWF0ZSBrZXkuICBUaGUga2VybmVsIHdpbGwgYWxzbyBnZW5lcmF0ZSBhIGJ1cyByZXNldCB0byBzaWduYWwgdGhlCisgKiBjaGFuZ2Ugb2YgdGhlIGNvbmZpZ3VyYXRpb24gUk9NIHRvIG90aGVyIG5vZGVzLgorICoKKyAqIFRoaXMgaW9jdGwgYWZmZWN0cyB0aGUgY29uZmlndXJhdGlvbiBST01zIG9mIGFsbCBsb2NhbCBub2Rlcy4KKyAqIFRoZSBpb2N0bCBvbmx5IHN1Y2NlZWRzIG9uIGRldmljZSBmaWxlcyB3aGljaCByZXByZXNlbnQgYSBsb2NhbCBub2RlLgorICovCitzdHJ1Y3QgZndfY2Rldl9hZGRfZGVzY3JpcHRvciB7CisJX191MzIgaW1tZWRpYXRlOworCV9fdTMyIGtleTsKKwlfX3U2NCBkYXRhOworCV9fdTMyIGxlbmd0aDsKKwlfX3UzMiBoYW5kbGU7Cit9OworCisvKioKKyAqIHN0cnVjdCBmd19jZGV2X3JlbW92ZV9kZXNjcmlwdG9yIC0gUmVtb3ZlIGNvbnRlbnRzIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gUk9NCisgKiBAaGFuZGxlOglIYW5kbGUgdG8gdGhlIGRlc2NyaXB0b3IsIGFzIHJldHVybmVkIGJ5IHRoZSBrZXJuZWwgd2hlbiB0aGUKKyAqCQlkZXNjcmlwdG9yIHdhcyBhZGRlZAorICoKKyAqIFJlbW92ZSBhIGRlc2NyaXB0b3IgYmxvY2sgYW5kIGFjY29tcGFueWluZyBpbW1lZGlhdGUga2V5IGZyb20gdGhlIGxvY2FsCisgKiBub2RlcycgY29uZmlndXJhdGlvbiBST01zLiAgVGhlIGtlcm5lbCB3aWxsIGFsc28gZ2VuZXJhdGUgYSBidXMgcmVzZXQgdG8KKyAqIHNpZ25hbCB0aGUgY2hhbmdlIG9mIHRoZSBjb25maWd1cmF0aW9uIFJPTSB0byBvdGhlciBub2Rlcy4KKyAqLworc3RydWN0IGZ3X2NkZXZfcmVtb3ZlX2Rlc2NyaXB0b3IgeworCV9fdTMyIGhhbmRsZTsKK307CisKKyNkZWZpbmUgRldfQ0RFVl9JU09fQ09OVEVYVF9UUkFOU01JVAkJCTAKKyNkZWZpbmUgRldfQ0RFVl9JU09fQ09OVEVYVF9SRUNFSVZFCQkJMQorI2RlZmluZSBGV19DREVWX0lTT19DT05URVhUX1JFQ0VJVkVfTVVMVElDSEFOTkVMCTIgLyogYWRkZWQgaW4gMi42LjM2ICovCisKKy8qKgorICogc3RydWN0IGZ3X2NkZXZfY3JlYXRlX2lzb19jb250ZXh0IC0gQ3JlYXRlIGEgY29udGV4dCBmb3IgaXNvY2hyb25vdXMgSS9PCisgKiBAdHlwZToJJUZXX0NERVZfSVNPX0NPTlRFWFRfVFJBTlNNSVQgb3IgJUZXX0NERVZfSVNPX0NPTlRFWFRfUkVDRUlWRSBvcgorICoJCSVGV19DREVWX0lTT19DT05URVhUX1JFQ0VJVkVfTVVMVElDSEFOTkVMCisgKiBAaGVhZGVyX3NpemU6IEhlYWRlciBzaXplIHRvIHN0cmlwIGluIHNpbmdsZS1jaGFubmVsIHJlY2VwdGlvbgorICogQGNoYW5uZWw6CUNoYW5uZWwgdG8gYmluZCB0byBpbiBzaW5nbGUtY2hhbm5lbCByZWNlcHRpb24gb3IgdHJhbnNtaXNzaW9uCisgKiBAc3BlZWQ6CVRyYW5zbWlzc2lvbiBzcGVlZAorICogQGNsb3N1cmU6CVRvIGJlIHJldHVybmVkIGluICZmd19jZGV2X2V2ZW50X2lzb19pbnRlcnJ1cHQgb3IKKyAqCQkmZndfY2Rldl9ldmVudF9pc29faW50ZXJydXB0X211bHRpY2hhbm5lbAorICogQGhhbmRsZToJSGFuZGxlIHRvIGNvbnRleHQsIHdyaXR0ZW4gYmFjayBieSBrZXJuZWwKKyAqCisgKiBQcmlvciB0byBzZW5kaW5nIG9yIHJlY2VpdmluZyBpc29jaHJvbm91cyBJL08sIGEgY29udGV4dCBtdXN0IGJlIGNyZWF0ZWQuCisgKiBUaGUgY29udGV4dCByZWNvcmRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0cmFuc21pdCBvciByZWNlaXZlIGNvbmZpZ3VyYXRpb24KKyAqIGFuZCB0eXBpY2FsbHkgbWFwcyB0byBhbiB1bmRlcmx5aW5nIGhhcmR3YXJlIHJlc291cmNlLiAgQSBjb250ZXh0IGlzIHNldCB1cAorICogZm9yIGVpdGhlciBzZW5kaW5nIG9yIHJlY2VpdmluZy4gIEl0IGlzIGJvdW5kIHRvIGEgc3BlY2lmaWMgaXNvY2hyb25vdXMKKyAqIEBjaGFubmVsLgorICoKKyAqIEluIGNhc2Ugb2YgbXVsdGljaGFubmVsIHJlY2VwdGlvbiwgQGhlYWRlcl9zaXplIGFuZCBAY2hhbm5lbCBhcmUgaWdub3JlZAorICogYW5kIHRoZSBjaGFubmVscyBhcmUgc2VsZWN0ZWQgYnkgJUZXX0NERVZfSU9DX1NFVF9JU09fQ0hBTk5FTFMuCisgKgorICogRm9yICVGV19DREVWX0lTT19DT05URVhUX1JFQ0VJVkUgY29udGV4dHMsIEBoZWFkZXJfc2l6ZSBtdXN0IGJlIGF0IGxlYXN0IDQKKyAqIGFuZCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4gIEl0IGlzIGlnbm9yZWQgaW4gb3RoZXIgY29udGV4dCB0eXBlcy4KKyAqCisgKiBAc3BlZWQgaXMgaWdub3JlZCBpbiByZWNlaXZlIGNvbnRleHQgdHlwZXMuCisgKgorICogSWYgYSBjb250ZXh0IHdhcyBzdWNjZXNzZnVsbHkgY3JlYXRlZCwgdGhlIGtlcm5lbCB3cml0ZXMgYmFjayBhIGhhbmRsZSB0byB0aGUKKyAqIGNvbnRleHQsIHdoaWNoIG11c3QgYmUgcGFzc2VkIGluIGZvciBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgb24gdGhhdCBjb250ZXh0LgorICoKKyAqIExpbWl0YXRpb25zOgorICogTm8gbW9yZSB0aGFuIG9uZSBpc28gY29udGV4dCBjYW4gYmUgY3JlYXRlZCBwZXIgZmQuCisgKiBUaGUgdG90YWwgbnVtYmVyIG9mIGNvbnRleHRzIHRoYXQgYWxsIHVzZXJzcGFjZSBhbmQga2VybmVsc3BhY2UgZHJpdmVycyBjYW4KKyAqIGNyZWF0ZSBvbiBhIGNhcmQgYXQgYSB0aW1lIGlzIGEgaGFyZHdhcmUgbGltaXQsIHR5cGljYWxseSA0IG9yIDggY29udGV4dHMgcGVyCisgKiBkaXJlY3Rpb24sIGFuZCBvZiB0aGVtIGF0IG1vc3Qgb25lIG11bHRpY2hhbm5lbCByZWNlaXZlIGNvbnRleHQuCisgKi8KK3N0cnVjdCBmd19jZGV2X2NyZWF0ZV9pc29fY29udGV4dCB7CisJX191MzIgdHlwZTsKKwlfX3UzMiBoZWFkZXJfc2l6ZTsKKwlfX3UzMiBjaGFubmVsOworCV9fdTMyIHNwZWVkOworCV9fdTY0IGNsb3N1cmU7CisJX191MzIgaGFuZGxlOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZndfY2Rldl9zZXRfaXNvX2NoYW5uZWxzIC0gU2VsZWN0IGNoYW5uZWxzIGluIG11bHRpY2hhbm5lbCByZWNlcHRpb24KKyAqIEBjaGFubmVsczoJQml0bWFzayBvZiBjaGFubmVscyB0byBsaXN0ZW4gdG8KKyAqIEBoYW5kbGU6CUhhbmRsZSBvZiB0aGUgbXV0aWNoYW5uZWwgcmVjZWl2ZSBjb250ZXh0CisgKgorICogQGNoYW5uZWxzIGlzIHRoZSBiaXR3aXNlIG9yIG9mIDFVTEwgPDwgbiBmb3IgZWFjaCBjaGFubmVsIG4gdG8gbGlzdGVuIHRvLgorICoKKyAqIFRoZSBpb2N0bCBmYWlscyB3aXRoIGVycm5vICVFQlVTWSBpZiB0aGVyZSBpcyBhbHJlYWR5IGFub3RoZXIgcmVjZWl2ZSBjb250ZXh0CisgKiBvbiBhIGNoYW5uZWwgaW4gQGNoYW5uZWxzLiAgSW4gdGhhdCBjYXNlLCB0aGUgYml0bWFzayBvZiBhbGwgdW5vY2N1cGllZAorICogY2hhbm5lbHMgaXMgcmV0dXJuZWQgaW4gQGNoYW5uZWxzLgorICovCitzdHJ1Y3QgZndfY2Rldl9zZXRfaXNvX2NoYW5uZWxzIHsKKwlfX3U2NCBjaGFubmVsczsKKwlfX3UzMiBoYW5kbGU7Cit9OworCisjZGVmaW5lIEZXX0NERVZfSVNPX1BBWUxPQURfTEVOR1RIKHYpCSh2KQorI2RlZmluZSBGV19DREVWX0lTT19JTlRFUlJVUFQJCSgxIDw8IDE2KQorI2RlZmluZSBGV19DREVWX0lTT19TS0lQCQkoMSA8PCAxNykKKyNkZWZpbmUgRldfQ0RFVl9JU09fU1lOQwkJKDEgPDwgMTcpCisjZGVmaW5lIEZXX0NERVZfSVNPX1RBRyh2KQkJKCh2KSA8PCAxOCkKKyNkZWZpbmUgRldfQ0RFVl9JU09fU1kodikJCSgodikgPDwgMjApCisjZGVmaW5lIEZXX0NERVZfSVNPX0hFQURFUl9MRU5HVEgodikJKCh2KSA8PCAyNCkKKworLyoqCisgKiBzdHJ1Y3QgZndfY2Rldl9pc29fcGFja2V0IC0gSXNvY2hyb25vdXMgcGFja2V0CisgKiBAY29udHJvbDoJQ29udGFpbnMgdGhlIGhlYWRlciBsZW5ndGggKDggdXBwZXJtb3N0IGJpdHMpLAorICoJCXRoZSBzeSBmaWVsZCAoNCBiaXRzKSwgdGhlIHRhZyBmaWVsZCAoMiBiaXRzKSwgYSBzeW5jIGZsYWcKKyAqCQlvciBhIHNraXAgZmxhZyAoMSBiaXQpLCBhbiBpbnRlcnJ1cHQgZmxhZyAoMSBiaXQpLCBhbmQgdGhlCisgKgkJcGF5bG9hZCBsZW5ndGggKDE2IGxvd2VybW9zdCBiaXRzKQorICogQGhlYWRlcjoJSGVhZGVyIGFuZCBwYXlsb2FkIGluIGNhc2Ugb2YgYSB0cmFuc21pdCBjb250ZXh0LgorICoKKyAqICZzdHJ1Y3QgZndfY2Rldl9pc29fcGFja2V0IGlzIHVzZWQgdG8gZGVzY3JpYmUgaXNvY2hyb25vdXMgcGFja2V0IHF1ZXVlcy4KKyAqIFVzZSB0aGUgRldfQ0RFVl9JU09fIG1hY3JvcyB0byBmaWxsIGluIEBjb250cm9sLgorICogVGhlIEBoZWFkZXIgYXJyYXkgaXMgZW1wdHkgaW4gY2FzZSBvZiByZWNlaXZlIGNvbnRleHRzLgorICoKKyAqIENvbnRleHQgdHlwZSAlRldfQ0RFVl9JU09fQ09OVEVYVF9UUkFOU01JVDoKKyAqCisgKiBAY29udHJvbC5IRUFERVJfTEVOR1RIIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0LiAgSXQgc3BlY2lmaWVzIHRoZSBudW1iZXJzIG9mCisgKiBieXRlcyBpbiBAaGVhZGVyIHRoYXQgd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhlIHBhY2tldCdzIHBheWxvYWQuICBUaGVzZSBieXRlcworICogYXJlIGNvcGllZCBpbnRvIHRoZSBrZXJuZWwgYW5kIHdpbGwgbm90IGJlIGFjY2Vzc2VkIGFmdGVyIHRoZSBpb2N0bCBoYXMKKyAqIHJldHVybmVkLgorICoKKyAqIFRoZSBAY29udHJvbC5TWSBhbmQgVEFHIGZpZWxkcyBhcmUgY29waWVkIHRvIHRoZSBpc28gcGFja2V0IGhlYWRlci4gIFRoZXNlCisgKiBmaWVsZHMgYXJlIHNwZWNpZmllZCBieSBJRUVFIDEzOTRhIGFuZCBJRUMgNjE4ODMtMS4KKyAqCisgKiBUaGUgQGNvbnRyb2wuU0tJUCBmbGFnIHNwZWNpZmllcyB0aGF0IG5vIHBhY2tldCBpcyB0byBiZSBzZW50IGluIGEgZnJhbWUuCisgKiBXaGVuIHVzaW5nIHRoaXMsIGFsbCBvdGhlciBmaWVsZHMgZXhjZXB0IEBjb250cm9sLklOVEVSUlVQVCBtdXN0IGJlIHplcm8uCisgKgorICogV2hlbiBhIHBhY2tldCB3aXRoIHRoZSBAY29udHJvbC5JTlRFUlJVUFQgZmxhZyBzZXQgaGFzIGJlZW4gY29tcGxldGVkLCBhbgorICogJmZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdCBldmVudCB3aWxsIGJlIHNlbnQuCisgKgorICogQ29udGV4dCB0eXBlICVGV19DREVWX0lTT19DT05URVhUX1JFQ0VJVkU6CisgKgorICogQGNvbnRyb2wuSEVBREVSX0xFTkdUSCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIGNvbnRleHQncyBoZWFkZXJfc2l6ZS4KKyAqIElmIHRoZSBIRUFERVJfTEVOR1RIIGlzIGxhcmdlciB0aGFuIHRoZSBjb250ZXh0J3MgaGVhZGVyX3NpemUsIG11bHRpcGxlCisgKiBwYWNrZXRzIGFyZSBxdWV1ZWQgZm9yIHRoaXMgZW50cnkuCisgKgorICogVGhlIEBjb250cm9sLlNZIGFuZCBUQUcgZmllbGRzIGFyZSBpZ25vcmVkLgorICoKKyAqIElmIHRoZSBAY29udHJvbC5TWU5DIGZsYWcgaXMgc2V0LCB0aGUgY29udGV4dCBkcm9wcyBhbGwgcGFja2V0cyB1bnRpbCBhCisgKiBwYWNrZXQgd2l0aCBhIHN5IGZpZWxkIGlzIHJlY2VpdmVkIHdoaWNoIG1hdGNoZXMgJmZ3X2NkZXZfc3RhcnRfaXNvLnN5bmMuCisgKgorICogQGNvbnRyb2wuUEFZTE9BRF9MRU5HVEggZGVmaW5lcyBob3cgbWFueSBwYXlsb2FkIGJ5dGVzIGNhbiBiZSByZWNlaXZlZCBmb3IKKyAqIG9uZSBwYWNrZXQgKGluIGFkZGl0aW9uIHRvIHBheWxvYWQgcXVhZGxldHMgdGhhdCBoYXZlIGJlZW4gZGVmaW5lZCBhcyBoZWFkZXJzCisgKiBhbmQgYXJlIHN0cmlwcGVkIGFuZCByZXR1cm5lZCBpbiB0aGUgJmZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdCBzdHJ1Y3R1cmUpLgorICogSWYgbW9yZSBieXRlcyBhcmUgcmVjZWl2ZWQsIHRoZSBhZGRpdGlvbmFsIGJ5dGVzIGFyZSBkcm9wcGVkLiAgSWYgbGVzcyBieXRlcworICogYXJlIHJlY2VpdmVkLCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHRoaXMgcGFydCBvZiB0aGUgcGF5bG9hZCBidWZmZXIgd2lsbCBub3QKKyAqIGJlIHdyaXR0ZW4gdG8sIG5vdCBldmVuIGJ5IHRoZSBuZXh0IHBhY2tldC4gIEkuZS4sIHBhY2tldHMgcmVjZWl2ZWQgaW4KKyAqIGNvbnNlY3V0aXZlIGZyYW1lcyB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBjb25zZWN1dGl2ZSBpbiBtZW1vcnkuICBJZiBhbgorICogZW50cnkgaGFzIHF1ZXVlZCBtdWx0aXBsZSBwYWNrZXRzLCB0aGUgUEFZTE9BRF9MRU5HVEggaXMgZGl2aWRlZCBlcXVhbGx5CisgKiBhbW9uZyB0aGVtLgorICoKKyAqIFdoZW4gYSBwYWNrZXQgd2l0aCB0aGUgQGNvbnRyb2wuSU5URVJSVVBUIGZsYWcgc2V0IGhhcyBiZWVuIGNvbXBsZXRlZCwgYW4KKyAqICZmd19jZGV2X2V2ZW50X2lzb19pbnRlcnJ1cHQgZXZlbnQgd2lsbCBiZSBzZW50LiAgQW4gZW50cnkgdGhhdCBoYXMgcXVldWVkCisgKiBtdWx0aXBsZSByZWNlaXZlIHBhY2tldHMgaXMgY29tcGxldGVkIHdoZW4gaXRzIGxhc3QgcGFja2V0IGlzIGNvbXBsZXRlZC4KKyAqCisgKiBDb250ZXh0IHR5cGUgJUZXX0NERVZfSVNPX0NPTlRFWFRfUkVDRUlWRV9NVUxUSUNIQU5ORUw6CisgKgorICogSGVyZSwgJmZ3X2NkZXZfaXNvX3BhY2tldCB3b3VsZCBiZSBtb3JlIGFwdGx5IG5hbWVkIF9pc29fYnVmZmVyX2NodW5rIHNpbmNlCisgKiBpdCBzcGVjaWZpZXMgYSBjaHVuayBvZiB0aGUgbW1hcCgpJ2VkIGJ1ZmZlciwgd2hpbGUgdGhlIG51bWJlciBhbmQgYWxpZ25tZW50CisgKiBvZiBwYWNrZXRzIHRvIGJlIHBsYWNlZCBpbnRvIHRoZSBidWZmZXIgY2h1bmsgaXMgbm90IGtub3duIGJlZm9yZWhhbmQuCisgKgorICogQGNvbnRyb2wuUEFZTE9BRF9MRU5HVEggaXMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBjaHVuayBhbmQgc3BlY2lmaWVzIHJvb20KKyAqIGZvciBoZWFkZXIsIHBheWxvYWQsIHBhZGRpbmcsIGFuZCB0cmFpbGVyIGJ5dGVzIG9mIG9uZSBvciBtb3JlIHBhY2tldHMuCisgKiBJdCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4KKyAqCisgKiBAY29udHJvbC5IRUFERVJfTEVOR1RILCBUQUcgYW5kIFNZIGFyZSBpZ25vcmVkLiAgU1lOQyBpcyB0cmVhdGVkIGFzIGRlc2NyaWJlZAorICogZm9yIHNpbmdsZS1jaGFubmVsIHJlY2VwdGlvbi4KKyAqCisgKiBXaGVuIGEgYnVmZmVyIGNodW5rIHdpdGggdGhlIEBjb250cm9sLklOVEVSUlVQVCBmbGFnIHNldCBoYXMgYmVlbiBmaWxsZWQKKyAqIGVudGlyZWx5LCBhbiAmZndfY2Rldl9ldmVudF9pc29faW50ZXJydXB0X21jIGV2ZW50IHdpbGwgYmUgc2VudC4KKyAqLworc3RydWN0IGZ3X2NkZXZfaXNvX3BhY2tldCB7CisJX191MzIgY29udHJvbDsKKwlfX3UzMiBoZWFkZXJbMF07Cit9OworCisvKioKKyAqIHN0cnVjdCBmd19jZGV2X3F1ZXVlX2lzbyAtIFF1ZXVlIGlzb2Nocm9ub3VzIHBhY2tldHMgZm9yIEkvTworICogQHBhY2tldHM6CVVzZXJzcGFjZSBwb2ludGVyIHRvIGFuIGFycmF5IG9mICZmd19jZGV2X2lzb19wYWNrZXQKKyAqIEBkYXRhOglQb2ludGVyIGludG8gbW1hcCgpJ2VkIHBheWxvYWQgYnVmZmVyCisgKiBAc2l6ZToJU2l6ZSBvZiB0aGUgQHBhY2tldHMgYXJyYXksIGluIGJ5dGVzCisgKiBAaGFuZGxlOglJc29jaHJvbm91cyBjb250ZXh0IGhhbmRsZQorICoKKyAqIFF1ZXVlIGEgbnVtYmVyIG9mIGlzb2Nocm9ub3VzIHBhY2tldHMgZm9yIHJlY2VwdGlvbiBvciB0cmFuc21pc3Npb24uCisgKiBUaGlzIGlvY3RsIHRha2VzIGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiAmZndfY2Rldl9pc29fcGFja2V0IHN0cnVjdHMsCisgKiB3aGljaCBkZXNjcmliZSBob3cgdG8gdHJhbnNtaXQgZnJvbSBvciByZWNlaXZlIGludG8gYSBjb250aWd1b3VzIHJlZ2lvbgorICogb2YgYSBtbWFwKCknZWQgcGF5bG9hZCBidWZmZXIuICBBcyBwYXJ0IG9mIHRyYW5zbWl0IHBhY2tldCBkZXNjcmlwdG9ycywKKyAqIGEgc2VyaWVzIG9mIGhlYWRlcnMgY2FuIGJlIHN1cHBsaWVkLCB3aGljaCB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGUKKyAqIHBheWxvYWQgZHVyaW5nIERNQS4KKyAqCisgKiBUaGUga2VybmVsIG1heSBvciBtYXkgbm90IHF1ZXVlIGFsbCBwYWNrZXRzLCBidXQgd2lsbCB3cml0ZSBiYWNrIHVwZGF0ZWQKKyAqIHZhbHVlcyBvZiB0aGUgQHBhY2tldHMsIEBkYXRhIGFuZCBAc2l6ZSBmaWVsZHMsIHNvIHRoZSBpb2N0bCBjYW4gYmUKKyAqIHJlc3VibWl0dGVkIGVhc2lseS4KKyAqCisgKiBJbiBjYXNlIG9mIGEgbXVsdGljaGFubmVsIHJlY2VpdmUgY29udGV4dCwgQGRhdGEgbXVzdCBiZSBxdWFkbGV0LWFsaWduZWQKKyAqIHJlbGF0aXZlIHRvIHRoZSBidWZmZXIgc3RhcnQuCisgKi8KK3N0cnVjdCBmd19jZGV2X3F1ZXVlX2lzbyB7CisJX191NjQgcGFja2V0czsKKwlfX3U2NCBkYXRhOworCV9fdTMyIHNpemU7CisJX191MzIgaGFuZGxlOworfTsKKworI2RlZmluZSBGV19DREVWX0lTT19DT05URVhUX01BVENIX1RBRzAJCSAxCisjZGVmaW5lIEZXX0NERVZfSVNPX0NPTlRFWFRfTUFUQ0hfVEFHMQkJIDIKKyNkZWZpbmUgRldfQ0RFVl9JU09fQ09OVEVYVF9NQVRDSF9UQUcyCQkgNAorI2RlZmluZSBGV19DREVWX0lTT19DT05URVhUX01BVENIX1RBRzMJCSA4CisjZGVmaW5lIEZXX0NERVZfSVNPX0NPTlRFWFRfTUFUQ0hfQUxMX1RBR1MJMTUKKworLyoqCisgKiBzdHJ1Y3QgZndfY2Rldl9zdGFydF9pc28gLSBTdGFydCBhbiBpc29jaHJvbm91cyB0cmFuc21pc3Npb24gb3IgcmVjZXB0aW9uCisgKiBAY3ljbGU6CUN5Y2xlIGluIHdoaWNoIHRvIHN0YXJ0IEkvTy4gIElmIEBjeWNsZSBpcyBncmVhdGVyIHRoYW4gb3IKKyAqCQllcXVhbCB0byAwLCB0aGUgSS9PIHdpbGwgc3RhcnQgb24gdGhhdCBjeWNsZS4KKyAqIEBzeW5jOglEZXRlcm1pbmVzIHRoZSB2YWx1ZSB0byB3YWl0IGZvciBmb3IgcmVjZWl2ZSBwYWNrZXRzIHRoYXQgaGF2ZQorICoJCXRoZSAlRldfQ0RFVl9JU09fU1lOQyBiaXQgc2V0CisgKiBAdGFnczoJVGFnIGZpbHRlciBiaXQgbWFzay4gIE9ubHkgdmFsaWQgZm9yIGlzb2Nocm9ub3VzIHJlY2VwdGlvbi4KKyAqCQlEZXRlcm1pbmVzIHRoZSB0YWcgdmFsdWVzIGZvciB3aGljaCBwYWNrZXRzIHdpbGwgYmUgYWNjZXB0ZWQuCisgKgkJVXNlIEZXX0NERVZfSVNPX0NPTlRFWFRfTUFUQ0hfIG1hY3JvcyB0byBzZXQgQHRhZ3MuCisgKiBAaGFuZGxlOglJc29jaHJvbm91cyBjb250ZXh0IGhhbmRsZSB3aXRoaW4gd2hpY2ggdG8gdHJhbnNtaXQgb3IgcmVjZWl2ZQorICovCitzdHJ1Y3QgZndfY2Rldl9zdGFydF9pc28geworCV9fczMyIGN5Y2xlOworCV9fdTMyIHN5bmM7CisJX191MzIgdGFnczsKKwlfX3UzMiBoYW5kbGU7Cit9OworCisvKioKKyAqIHN0cnVjdCBmd19jZGV2X3N0b3BfaXNvIC0gU3RvcCBhbiBpc29jaHJvbm91cyB0cmFuc21pc3Npb24gb3IgcmVjZXB0aW9uCisgKiBAaGFuZGxlOglIYW5kbGUgb2YgaXNvY2hyb25vdXMgY29udGV4dCB0byBzdG9wCisgKi8KK3N0cnVjdCBmd19jZGV2X3N0b3BfaXNvIHsKKwlfX3UzMiBoYW5kbGU7Cit9OworCisvKioKKyAqIHN0cnVjdCBmd19jZGV2X2dldF9jeWNsZV90aW1lciAtIHJlYWQgY3ljbGUgdGltZXIgcmVnaXN0ZXIKKyAqIEBsb2NhbF90aW1lOiAgIHN5c3RlbSB0aW1lLCBpbiBtaWNyb3NlY29uZHMgc2luY2UgdGhlIEVwb2NoCisgKiBAY3ljbGVfdGltZXI6ICBDeWNsZSBUaW1lIHJlZ2lzdGVyIGNvbnRlbnRzCisgKgorICogVGhlICVGV19DREVWX0lPQ19HRVRfQ1lDTEVfVElNRVIgaW9jdGwgcmVhZHMgdGhlIGlzb2Nocm9ub3VzIGN5Y2xlIHRpbWVyCisgKiBhbmQgYWxzbyB0aGUgc3lzdGVtIGNsb2NrICglQ0xPQ0tfUkVBTFRJTUUpLiAgVGhpcyBhbGxvd3MgdG8gZXhwcmVzcyB0aGUKKyAqIHJlY2VpdmUgdGltZSBvZiBhbiBpc29jaHJvbm91cyBwYWNrZXQgYXMgYSBzeXN0ZW0gdGltZS4KKyAqCisgKiBAY3ljbGVfdGltZXIgY29uc2lzdHMgb2YgNyBiaXRzIGN5Y2xlU2Vjb25kcywgMTMgYml0cyBjeWNsZUNvdW50LCBhbmQKKyAqIDEyIGJpdHMgY3ljbGVPZmZzZXQsIGluIGhvc3QgYnl0ZSBvcmRlci4gIENmLiB0aGUgQ3ljbGUgVGltZSByZWdpc3RlcgorICogcGVyIElFRUUgMTM5NCBvciBJc29jaHJvbm91cyBDeWNsZSBUaW1lciByZWdpc3RlciBwZXIgT0hDSS0xMzk0LgorICoKKyAqIEluIHZlcnNpb24gMSBhbmQgMiBvZiB0aGUgQUJJLCB0aGlzIGlvY3RsIHJldHVybmVkIHVucmVsaWFibGUgKG5vbi0KKyAqIG1vbm90b25pYykgQGN5Y2xlX3RpbWVyIHZhbHVlcyBvbiBjZXJ0YWluIGNvbnRyb2xsZXJzLgorICovCitzdHJ1Y3QgZndfY2Rldl9nZXRfY3ljbGVfdGltZXIgeworCV9fdTY0IGxvY2FsX3RpbWU7CisJX191MzIgY3ljbGVfdGltZXI7Cit9OworCisvKioKKyAqIHN0cnVjdCBmd19jZGV2X2dldF9jeWNsZV90aW1lcjIgLSByZWFkIGN5Y2xlIHRpbWVyIHJlZ2lzdGVyCisgKiBAdHZfc2VjOiAgICAgICBzeXN0ZW0gdGltZSwgc2Vjb25kcworICogQHR2X25zZWM6ICAgICAgc3lzdGVtIHRpbWUsIHN1Yi1zZWNvbmRzIHBhcnQgaW4gbmFub3NlY29uZHMKKyAqIEBjbGtfaWQ6ICAgICAgIGlucHV0IHBhcmFtZXRlciwgY2xvY2sgZnJvbSB3aGljaCB0byBnZXQgdGhlIHN5c3RlbSB0aW1lCisgKiBAY3ljbGVfdGltZXI6ICBDeWNsZSBUaW1lIHJlZ2lzdGVyIGNvbnRlbnRzCisgKgorICogVGhlICVGV19DREVWX0lPQ19HRVRfQ1lDTEVfVElNRVIyIHdvcmtzIGxpa2UKKyAqICVGV19DREVWX0lPQ19HRVRfQ1lDTEVfVElNRVIgYnV0IGxldHMgeW91IGNob29zZSBhIGNsb2NrIGxpa2Ugd2l0aCBQT1NJWCcKKyAqIGNsb2NrX2dldHRpbWUgZnVuY3Rpb24uICBTdXBwb3J0ZWQgQGNsa19pZCB2YWx1ZXMgYXJlIFBPU0lYJyAlQ0xPQ0tfUkVBTFRJTUUKKyAqIGFuZCAlQ0xPQ0tfTU9OT1RPTklDIGFuZCBMaW51eCcgJUNMT0NLX01PTk9UT05JQ19SQVcuCisgKi8KK3N0cnVjdCBmd19jZGV2X2dldF9jeWNsZV90aW1lcjIgeworCV9fczY0IHR2X3NlYzsKKwlfX3MzMiB0dl9uc2VjOworCV9fczMyIGNsa19pZDsKKwlfX3UzMiBjeWNsZV90aW1lcjsKK307CisKKy8qKgorICogc3RydWN0IGZ3X2NkZXZfYWxsb2NhdGVfaXNvX3Jlc291cmNlIC0gKERlKWFsbG9jYXRlIGEgY2hhbm5lbCBvciBiYW5kd2lkdGgKKyAqIEBjbG9zdXJlOglQYXNzZWQgYmFjayB0byB1c2Vyc3BhY2UgaW4gY29ycmVwb25kaW5nIGlzbyByZXNvdXJjZSBldmVudHMKKyAqIEBjaGFubmVsczoJSXNvY2hyb25vdXMgY2hhbm5lbHMgb2Ygd2hpY2ggb25lIGlzIHRvIGJlIChkZSlhbGxvY2F0ZWQKKyAqIEBiYW5kd2lkdGg6CUlzb2Nocm9ub3VzIGJhbmR3aWR0aCB1bml0cyB0byBiZSAoZGUpYWxsb2NhdGVkCisgKiBAaGFuZGxlOglIYW5kbGUgdG8gdGhlIGFsbG9jYXRpb24sIHdyaXR0ZW4gYnkgdGhlIGtlcm5lbCAob25seSB2YWxpZCBpbgorICoJCWNhc2Ugb2YgJUZXX0NERVZfSU9DX0FMTE9DQVRFX0lTT19SRVNPVVJDRSBpb2N0bHMpCisgKgorICogVGhlICVGV19DREVWX0lPQ19BTExPQ0FURV9JU09fUkVTT1VSQ0UgaW9jdGwgaW5pdGlhdGVzIGFsbG9jYXRpb24gb2YgYW4KKyAqIGlzb2Nocm9ub3VzIGNoYW5uZWwgYW5kL29yIG9mIGlzb2Nocm9ub3VzIGJhbmR3aWR0aCBhdCB0aGUgaXNvY2hyb25vdXMKKyAqIHJlc291cmNlIG1hbmFnZXIgKElSTSkuICBPbmx5IG9uZSBvZiB0aGUgY2hhbm5lbHMgc3BlY2lmaWVkIGluIEBjaGFubmVscyBpcworICogYWxsb2NhdGVkLiAgQW4gJUZXX0NERVZfRVZFTlRfSVNPX1JFU09VUkNFX0FMTE9DQVRFRCBpcyBzZW50IGFmdGVyCisgKiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIElSTSwgaW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmUgaW4gdGhlIGV2ZW50IGRhdGEuCisgKiBUaGUga2VybmVsIHdpbGwgYXV0b21hdGljYWxseSByZWFsbG9jYXRlIHRoZSByZXNvdXJjZXMgYWZ0ZXIgYnVzIHJlc2V0cy4KKyAqIFNob3VsZCBhIHJlYWxsb2NhdGlvbiBmYWlsLCBhbiAlRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfREVBTExPQ0FURUQgZXZlbnQKKyAqIHdpbGwgYmUgc2VudC4gIFRoZSBrZXJuZWwgd2lsbCBhbHNvIGF1dG9tYXRpY2FsbHkgZGVhbGxvY2F0ZSB0aGUgcmVzb3VyY2VzCisgKiB3aGVuIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgY2xvc2VkLgorICoKKyAqIFRoZSAlRldfQ0RFVl9JT0NfREVBTExPQ0FURV9JU09fUkVTT1VSQ0UgaW9jdGwgY2FuIGJlIHVzZWQgdG8gaW5pdGlhdGUKKyAqIGRlYWxsb2NhdGlvbiBvZiByZXNvdXJjZXMgd2hpY2ggd2VyZSBhbGxvY2F0ZWQgYXMgZGVzY3JpYmVkIGFib3ZlLgorICogQW4gJUZXX0NERVZfRVZFTlRfSVNPX1JFU09VUkNFX0RFQUxMT0NBVEVEIGV2ZW50IGNvbmNsdWRlcyB0aGlzIG9wZXJhdGlvbi4KKyAqCisgKiBUaGUgJUZXX0NERVZfSU9DX0FMTE9DQVRFX0lTT19SRVNPVVJDRV9PTkNFIGlvY3RsIGlzIGEgdmFyaWFudCBvZiBhbGxvY2F0aW9uCisgKiB3aXRob3V0IGF1dG9tYXRpYyByZS0gb3IgZGVhbGxvY2F0aW9uLgorICogQW4gJUZXX0NERVZfRVZFTlRfSVNPX1JFU09VUkNFX0FMTE9DQVRFRCBldmVudCBjb25jbHVkZXMgdGhpcyBvcGVyYXRpb24sCisgKiBpbmRpY2F0aW5nIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBpbiBpdHMgZGF0YS4KKyAqCisgKiBUaGUgJUZXX0NERVZfSU9DX0RFQUxMT0NBVEVfSVNPX1JFU09VUkNFX09OQ0UgaW9jdGwgd29ya3MgbGlrZQorICogJUZXX0NERVZfSU9DX0FMTE9DQVRFX0lTT19SRVNPVVJDRV9PTkNFIGV4Y2VwdCB0aGF0IHJlc291cmNlcyBhcmUgZnJlZWQKKyAqIGluc3RlYWQgb2YgYWxsb2NhdGVkLgorICogQW4gJUZXX0NERVZfRVZFTlRfSVNPX1JFU09VUkNFX0RFQUxMT0NBVEVEIGV2ZW50IGNvbmNsdWRlcyB0aGlzIG9wZXJhdGlvbi4KKyAqCisgKiBUbyBzdW1tYXJpemUsICVGV19DREVWX0lPQ19BTExPQ0FURV9JU09fUkVTT1VSQ0UgYWxsb2NhdGVzIGlzbyByZXNvdXJjZXMKKyAqIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGZkIG9yIEBoYW5kbGUuCisgKiBJbiBjb250cmFzdCwgJUZXX0NERVZfSU9DX0FMTE9DQVRFX0lTT19SRVNPVVJDRV9PTkNFIGFsbG9jYXRlcyBpc28gcmVzb3VyY2VzCisgKiBmb3IgdGhlIGR1cmF0aW9uIG9mIGEgYnVzIGdlbmVyYXRpb24uCisgKgorICogQGNoYW5uZWxzIGlzIGEgaG9zdC1lbmRpYW4gYml0ZmllbGQgd2l0aCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0CisgKiByZXByZXNlbnRpbmcgY2hhbm5lbCAwIGFuZCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgcmVwcmVzZW50aW5nIGNoYW5uZWwgNjM6CisgKiAxVUxMIDw8IGMgZm9yIGVhY2ggY2hhbm5lbCBjIHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIChkZSlhbGxvY2F0aW9uLgorICoKKyAqIEBiYW5kd2lkdGggaXMgZXhwcmVzc2VkIGluIGJhbmR3aWR0aCBhbGxvY2F0aW9uIHVuaXRzLCBpLmUuIHRoZSB0aW1lIHRvIHNlbmQKKyAqIG9uZSBxdWFkbGV0IG9mIGRhdGEgKHBheWxvYWQgb3IgaGVhZGVyIGRhdGEpIGF0IHNwZWVkIFMxNjAwLgorICovCitzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZV9pc29fcmVzb3VyY2UgeworCV9fdTY0IGNsb3N1cmU7CisJX191NjQgY2hhbm5lbHM7CisJX191MzIgYmFuZHdpZHRoOworCV9fdTMyIGhhbmRsZTsKK307CisKKy8qKgorICogc3RydWN0IGZ3X2NkZXZfc2VuZF9zdHJlYW1fcGFja2V0IC0gc2VuZCBhbiBhc3luY2hyb25vdXMgc3RyZWFtIHBhY2tldAorICogQGxlbmd0aDoJTGVuZ3RoIG9mIG91dGdvaW5nIHBheWxvYWQsIGluIGJ5dGVzCisgKiBAdGFnOglEYXRhIGZvcm1hdCB0YWcKKyAqIEBjaGFubmVsOglJc29jaHJvbm91cyBjaGFubmVsIHRvIHRyYW5zbWl0IHRvCisgKiBAc3k6CQlTeW5jaHJvbml6YXRpb24gY29kZQorICogQGNsb3N1cmU6CVBhc3NlZCBiYWNrIHRvIHVzZXJzcGFjZSBpbiB0aGUgcmVzcG9uc2UgZXZlbnQKKyAqIEBkYXRhOglVc2Vyc3BhY2UgcG9pbnRlciB0byBwYXlsb2FkCisgKiBAZ2VuZXJhdGlvbjoJVGhlIGJ1cyBnZW5lcmF0aW9uIHdoZXJlIHBhY2tldCBpcyB2YWxpZAorICogQHNwZWVkOglTcGVlZCB0byB0cmFuc21pdCBhdAorICoKKyAqIFRoZSAlRldfQ0RFVl9JT0NfU0VORF9TVFJFQU1fUEFDS0VUIGlvY3RsIHNlbmRzIGFuIGFzeW5jaHJvbm91cyBzdHJlYW0gcGFja2V0CisgKiB0byBldmVyeSBkZXZpY2Ugd2hpY2ggaXMgbGlzdGVuaW5nIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC4gIFRoZSBrZXJuZWwKKyAqIHdyaXRlcyBhbiAmZndfY2Rldl9ldmVudF9yZXNwb25zZSBldmVudCB3aGljaCBpbmRpY2F0ZXMgc3VjY2VzcyBvciBmYWlsdXJlIG9mCisgKiB0aGUgdHJhbnNtaXNzaW9uLgorICovCitzdHJ1Y3QgZndfY2Rldl9zZW5kX3N0cmVhbV9wYWNrZXQgeworCV9fdTMyIGxlbmd0aDsKKwlfX3UzMiB0YWc7CisJX191MzIgY2hhbm5lbDsKKwlfX3UzMiBzeTsKKwlfX3U2NCBjbG9zdXJlOworCV9fdTY0IGRhdGE7CisJX191MzIgZ2VuZXJhdGlvbjsKKwlfX3UzMiBzcGVlZDsKK307CisKKy8qKgorICogc3RydWN0IGZ3X2NkZXZfc2VuZF9waHlfcGFja2V0IC0gc2VuZCBhIFBIWSBwYWNrZXQKKyAqIEBjbG9zdXJlOglQYXNzZWQgYmFjayB0byB1c2Vyc3BhY2UgaW4gdGhlIFBIWS1wYWNrZXQtc2VudCBldmVudAorICogQGRhdGE6CUZpcnN0IGFuZCBzZWNvbmQgcXVhZGxldCBvZiB0aGUgUEhZIHBhY2tldAorICogQGdlbmVyYXRpb246CVRoZSBidXMgZ2VuZXJhdGlvbiB3aGVyZSBwYWNrZXQgaXMgdmFsaWQKKyAqCisgKiBUaGUgJUZXX0NERVZfSU9DX1NFTkRfUEhZX1BBQ0tFVCBpb2N0bCBzZW5kcyBhIFBIWSBwYWNrZXQgdG8gYWxsIG5vZGVzCisgKiBvbiB0aGUgc2FtZSBjYXJkIGFzIHRoaXMgZGV2aWNlLiAgQWZ0ZXIgdHJhbnNtaXNzaW9uLCBhbgorICogJUZXX0NERVZfRVZFTlRfUEhZX1BBQ0tFVF9TRU5UIGV2ZW50IGlzIGdlbmVyYXRlZC4KKyAqCisgKiBUaGUgcGF5bG9hZCBAZGF0YVtdIHNoYWxsIGJlIHNwZWNpZmllZCBpbiBob3N0IGJ5dGUgb3JkZXIuICBVc3VhbGx5LAorICogQGRhdGFbMV0gbmVlZHMgdG8gYmUgdGhlIGJpdHdpc2UgaW52ZXJzZSBvZiBAZGF0YVswXS4gIFZlcnNhUEhZIHBhY2tldHMKKyAqIGFyZSBhbiBleGNlcHRpb24gdG8gdGhpcyBydWxlLgorICoKKyAqIFRoZSBpb2N0bCBpcyBvbmx5IHBlcm1pdHRlZCBvbiBkZXZpY2UgZmlsZXMgd2hpY2ggcmVwcmVzZW50IGEgbG9jYWwgbm9kZS4KKyAqLworc3RydWN0IGZ3X2NkZXZfc2VuZF9waHlfcGFja2V0IHsKKwlfX3U2NCBjbG9zdXJlOworCV9fdTMyIGRhdGFbMl07CisJX191MzIgZ2VuZXJhdGlvbjsKK307CisKKy8qKgorICogc3RydWN0IGZ3X2NkZXZfcmVjZWl2ZV9waHlfcGFja2V0cyAtIHN0YXJ0IHJlY2VwdGlvbiBvZiBQSFkgcGFja2V0cworICogQGNsb3N1cmU6IFBhc3NlZCBiYWNrIHRvIHVzZXJzcGFjZSBpbiBwaHkgcGFja2V0IGV2ZW50cworICoKKyAqIFRoaXMgaW9jdGwgYWN0aXZhdGVzIGlzc3Vpbmcgb2YgJUZXX0NERVZfRVZFTlRfUEhZX1BBQ0tFVF9SRUNFSVZFRCBkdWUgdG8KKyAqIGluY29taW5nIFBIWSBwYWNrZXRzIGZyb20gYW55IG5vZGUgb24gdGhlIHNhbWUgYnVzIGFzIHRoZSBkZXZpY2UuCisgKgorICogVGhlIGlvY3RsIGlzIG9ubHkgcGVybWl0dGVkIG9uIGRldmljZSBmaWxlcyB3aGljaCByZXByZXNlbnQgYSBsb2NhbCBub2RlLgorICovCitzdHJ1Y3QgZndfY2Rldl9yZWNlaXZlX3BoeV9wYWNrZXRzIHsKKwlfX3U2NCBjbG9zdXJlOworfTsKKworI2VuZGlmIC8qIF9MSU5VWF9GSVJFV0lSRV9DREVWX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9maXJld2lyZS1jb25zdGFudHMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9maXJld2lyZS1jb25zdGFudHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjRiYjVmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNvbnN0YW50cy5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBJRUVFIDEzOTQgY29uc3RhbnRzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA3ICBLcmlzdGlhbiBIb2Vnc2JlcmcgPGtyaEBiaXRwbGFuZXQubmV0PgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9GSVJFV0lSRV9DT05TVEFOVFNfSAorI2RlZmluZSBfTElOVVhfRklSRVdJUkVfQ09OU1RBTlRTX0gKKworI2RlZmluZSBUQ09ERV9XUklURV9RVUFETEVUX1JFUVVFU1QJMHgwCisjZGVmaW5lIFRDT0RFX1dSSVRFX0JMT0NLX1JFUVVFU1QJMHgxCisjZGVmaW5lIFRDT0RFX1dSSVRFX1JFU1BPTlNFCQkweDIKKyNkZWZpbmUgVENPREVfUkVBRF9RVUFETEVUX1JFUVVFU1QJMHg0CisjZGVmaW5lIFRDT0RFX1JFQURfQkxPQ0tfUkVRVUVTVAkweDUKKyNkZWZpbmUgVENPREVfUkVBRF9RVUFETEVUX1JFU1BPTlNFCTB4NgorI2RlZmluZSBUQ09ERV9SRUFEX0JMT0NLX1JFU1BPTlNFCTB4NworI2RlZmluZSBUQ09ERV9DWUNMRV9TVEFSVAkJMHg4CisjZGVmaW5lIFRDT0RFX0xPQ0tfUkVRVUVTVAkJMHg5CisjZGVmaW5lIFRDT0RFX1NUUkVBTV9EQVRBCQkweGEKKyNkZWZpbmUgVENPREVfTE9DS19SRVNQT05TRQkJMHhiCisKKyNkZWZpbmUgRVhUQ09ERV9NQVNLX1NXQVAJCTB4MQorI2RlZmluZSBFWFRDT0RFX0NPTVBBUkVfU1dBUAkJMHgyCisjZGVmaW5lIEVYVENPREVfRkVUQ0hfQURECQkweDMKKyNkZWZpbmUgRVhUQ09ERV9MSVRUTEVfQURECQkweDQKKyNkZWZpbmUgRVhUQ09ERV9CT1VOREVEX0FERAkJMHg1CisjZGVmaW5lIEVYVENPREVfV1JBUF9BREQJCTB4NgorI2RlZmluZSBFWFRDT0RFX1ZFTkRPUl9ERVBFTkRFTlQJMHg3CisKKy8qIExpbnV4IGZpcmV3aXJlLWNvcmUgKEp1anUpIHNwZWNpZmljIHRjb2RlcyAqLworI2RlZmluZSBUQ09ERV9MT0NLX01BU0tfU1dBUAkJKDB4MTAgfCBFWFRDT0RFX01BU0tfU1dBUCkKKyNkZWZpbmUgVENPREVfTE9DS19DT01QQVJFX1NXQVAJCSgweDEwIHwgRVhUQ09ERV9DT01QQVJFX1NXQVApCisjZGVmaW5lIFRDT0RFX0xPQ0tfRkVUQ0hfQURECQkoMHgxMCB8IEVYVENPREVfRkVUQ0hfQUREKQorI2RlZmluZSBUQ09ERV9MT0NLX0xJVFRMRV9BREQJCSgweDEwIHwgRVhUQ09ERV9MSVRUTEVfQUREKQorI2RlZmluZSBUQ09ERV9MT0NLX0JPVU5ERURfQURECQkoMHgxMCB8IEVYVENPREVfQk9VTkRFRF9BREQpCisjZGVmaW5lIFRDT0RFX0xPQ0tfV1JBUF9BREQJCSgweDEwIHwgRVhUQ09ERV9XUkFQX0FERCkKKyNkZWZpbmUgVENPREVfTE9DS19WRU5ET1JfREVQRU5ERU5UCSgweDEwIHwgRVhUQ09ERV9WRU5ET1JfREVQRU5ERU5UKQorCisjZGVmaW5lIFJDT0RFX0NPTVBMRVRFCQkJMHgwCisjZGVmaW5lIFJDT0RFX0NPTkZMSUNUX0VSUk9SCQkweDQKKyNkZWZpbmUgUkNPREVfREFUQV9FUlJPUgkJMHg1CisjZGVmaW5lIFJDT0RFX1RZUEVfRVJST1IJCTB4NgorI2RlZmluZSBSQ09ERV9BRERSRVNTX0VSUk9SCQkweDcKKworLyogTGludXggZmlyZXdpcmUtY29yZSAoSnVqdSkgc3BlY2lmaWMgcmNvZGVzICovCisjZGVmaW5lIFJDT0RFX1NFTkRfRVJST1IJCTB4MTAKKyNkZWZpbmUgUkNPREVfQ0FOQ0VMTEVECQkJMHgxMQorI2RlZmluZSBSQ09ERV9CVVNZCQkJMHgxMgorI2RlZmluZSBSQ09ERV9HRU5FUkFUSU9OCQkweDEzCisjZGVmaW5lIFJDT0RFX05PX0FDSwkJCTB4MTQKKworI2RlZmluZSBTQ09ERV8xMDAJCQkweDAKKyNkZWZpbmUgU0NPREVfMjAwCQkJMHgxCisjZGVmaW5lIFNDT0RFXzQwMAkJCTB4MgorI2RlZmluZSBTQ09ERV84MDAJCQkweDMKKyNkZWZpbmUgU0NPREVfMTYwMAkJCTB4NAorI2RlZmluZSBTQ09ERV8zMjAwCQkJMHg1CisjZGVmaW5lIFNDT0RFX0JFVEEJCQkweDMKKworI2RlZmluZSBBQ0tfQ09NUExFVEUJCQkweDEKKyNkZWZpbmUgQUNLX1BFTkRJTkcJCQkweDIKKyNkZWZpbmUgQUNLX0JVU1lfWAkJCTB4NAorI2RlZmluZSBBQ0tfQlVTWV9BCQkJMHg1CisjZGVmaW5lIEFDS19CVVNZX0IJCQkweDYKKyNkZWZpbmUgQUNLX0RBVEFfRVJST1IJCQkweGQKKyNkZWZpbmUgQUNLX1RZUEVfRVJST1IJCQkweGUKKworI2RlZmluZSBSRVRSWV8xCQkJCTB4MDAKKyNkZWZpbmUgUkVUUllfWAkJCQkweDAxCisjZGVmaW5lIFJFVFJZX0EJCQkJMHgwMgorI2RlZmluZSBSRVRSWV9CCQkJCTB4MDMKKworI2VuZGlmIC8qIF9MSU5VWF9GSVJFV0lSRV9DT05TVEFOVFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2ZsYXQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9mbGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM1MWJjNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9mbGF0LmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDAzICBEYXZpZCBNY0N1bGxvdWdoIDxkYXZpZG1Ac25hcGdlYXIuY29tPgorICogQ29weXJpZ2h0IChDKSAxOTk4ICAgICAgIEtlbm5ldGggQWxiYW5vd3NraSA8a2phaGRzQGtqYWhkcy5jb20+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIFNpbHZlciBIYW1tZXIgR3JvdXAsIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgcHJvdmlkZXMgdGhlIGRlZmluaXRpb25zIGFuZCBzdHJ1Y3R1cmVzIG5lZWRlZCB0bworICogc3VwcG9ydCB1Q2xpbnV4IGZsYXQtZm9ybWF0IGV4ZWN1dGFibGVzLgorICovCisKKyNpZm5kZWYgX0xJTlVYX0ZMQVRfSAorI2RlZmluZSBfTElOVVhfRkxBVF9ICisKKworI2RlZmluZQlGTEFUX1ZFUlNJT04JCQkweDAwMDAwMDA0TAorCisjaWZkZWYgQ09ORklHX0JJTkZNVF9TSEFSRURfRkxBVAorI2RlZmluZQlNQVhfU0hBUkVEX0xJQlMJCQkoNCkKKyNlbHNlCisjZGVmaW5lCU1BWF9TSEFSRURfTElCUwkJCSgxKQorI2VuZGlmCisKKy8qCisgKiBUbyBtYWtlIGV2ZXJ5dGhpbmcgZWFzaWVyIHRvIHBvcnQgYW5kIG1hbmFnZSBjcm9zcyBwbGF0Zm9ybQorICogZGV2ZWxvcG1lbnQsICBhbGwgZmllbGRzIGFyZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCisgKi8KKworc3RydWN0IGZsYXRfaGRyIHsKKwljaGFyIG1hZ2ljWzRdOworCXVuc2lnbmVkIGxvbmcgcmV2OyAgICAgICAgICAvKiB2ZXJzaW9uIChhcyBhYm92ZSkgKi8KKwl1bnNpZ25lZCBsb25nIGVudHJ5OyAgICAgICAgLyogT2Zmc2V0IG9mIGZpcnN0IGV4ZWN1dGFibGUgaW5zdHJ1Y3Rpb24KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0ZXh0IHNlZ21lbnQgZnJvbSBiZWdpbm5pbmcgb2YgZmlsZSAqLworCXVuc2lnbmVkIGxvbmcgZGF0YV9zdGFydDsgICAvKiBPZmZzZXQgb2YgZGF0YSBzZWdtZW50IGZyb20gYmVnaW5uaW5nIG9mCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgKi8KKwl1bnNpZ25lZCBsb25nIGRhdGFfZW5kOyAgICAgLyogT2Zmc2V0IG9mIGVuZCBvZiBkYXRhIHNlZ21lbnQKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBiZWdpbm5pbmcgb2YgZmlsZSAqLworCXVuc2lnbmVkIGxvbmcgYnNzX2VuZDsgICAgICAvKiBPZmZzZXQgb2YgZW5kIG9mIGJzcyBzZWdtZW50IGZyb20gYmVnaW5uaW5nCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGZpbGUgKi8KKworCS8qIChJdCBpcyBhc3N1bWVkIHRoYXQgZGF0YV9lbmQgdGhyb3VnaCBic3NfZW5kIGZvcm1zIHRoZSBic3Mgc2VnbWVudC4pICovCisKKwl1bnNpZ25lZCBsb25nIHN0YWNrX3NpemU7ICAgLyogU2l6ZSBvZiBzdGFjaywgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBsb25nIHJlbG9jX3N0YXJ0OyAgLyogT2Zmc2V0IG9mIHJlbG9jYXRpb24gcmVjb3JkcyBmcm9tCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2lubmluZyBvZiBmaWxlICovCisJdW5zaWduZWQgbG9uZyByZWxvY19jb3VudDsgIC8qIE51bWJlciBvZiByZWxvY2F0aW9uIHJlY29yZHMgKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOyAgICAgICAKKwl1bnNpZ25lZCBsb25nIGJ1aWxkX2RhdGU7ICAgLyogV2hlbiB0aGUgcHJvZ3JhbS9saWJyYXJ5IHdhcyBidWlsdCAqLworCXVuc2lnbmVkIGxvbmcgZmlsbGVyWzVdOyAgICAvKiBSZXNlcnZlcmVkLCBzZXQgdG8gemVybyAqLworfTsKKworI2RlZmluZSBGTEFUX0ZMQUdfUkFNICAgIDB4MDAwMSAvKiBsb2FkIHByb2dyYW0gZW50aXJlbHkgaW50byBSQU0gKi8KKyNkZWZpbmUgRkxBVF9GTEFHX0dPVFBJQyAweDAwMDIgLyogcHJvZ3JhbSBpcyBQSUMgd2l0aCBHT1QgKi8KKyNkZWZpbmUgRkxBVF9GTEFHX0daSVAgICAweDAwMDQgLyogYWxsIGJ1dCB0aGUgaGVhZGVyIGlzIGNvbXByZXNzZWQgKi8KKyNkZWZpbmUgRkxBVF9GTEFHX0daREFUQSAweDAwMDggLyogb25seSBkYXRhL3JlbG9jcyBhcmUgY29tcHJlc3NlZCAoZm9yIFhJUCkgKi8KKyNkZWZpbmUgRkxBVF9GTEFHX0tUUkFDRSAweDAwMTAgLyogb3V0cHV0IHVzZWZ1bCBrZXJuZWwgdHJhY2UgZm9yIGRlYnVnZ2luZyAqLworCisKKworI2VuZGlmIC8qIF9MSU5VWF9GTEFUX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9mcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVlNDkyZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9mcy5oCkBAIC0wLDAgKzEsMzc1IEBACisjaWZuZGVmIF9MSU5VWF9GU19ICisjZGVmaW5lIF9MSU5VWF9GU19ICisKKy8qCisgKiBUaGlzIGZpbGUgaGFzIGRlZmluaXRpb25zIGZvciBzb21lIGltcG9ydGFudCBmaWxlIHRhYmxlCisgKiBzdHJ1Y3R1cmVzIGV0Yy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtfdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICogSXQncyBzaWxseSB0byBoYXZlIE5SX09QRU4gYmlnZ2VyIHRoYW4gTlJfRklMRSwgYnV0IHlvdSBjYW4gY2hhbmdlCisgKiB0aGUgZmlsZSBsaW1pdCBhdCBydW50aW1lIGFuZCBvbmx5IHJvb3QgY2FuIGluY3JlYXNlIHRoZSBwZXItcHJvY2VzcworICogbnJfZmlsZSBybGltaXQsIHNvIGl0J3Mgc2FmZSB0byBzZXQgdXAgYSByaWRpY3Vsb3VzbHkgaGlnaCBhYnNvbHV0ZQorICogdXBwZXIgbGltaXQgb24gZmlsZXMtcGVyLXByb2Nlc3MuCisgKgorICogU29tZSBwcm9ncmFtcyAobm90YWJseSB0aG9zZSB1c2luZyBzZWxlY3QoKSkgbWF5IGhhdmUgdG8gYmUgCisgKiByZWNvbXBpbGVkIHRvIHRha2UgZnVsbCBhZHZhbnRhZ2Ugb2YgdGhlIG5ldyBsaW1pdHMuLiAgCisgKi8KKworLyogRml4ZWQgY29uc3RhbnRzIGZpcnN0OiAqLworI3VuZGVmIE5SX09QRU4KKyNkZWZpbmUgSU5SX09QRU4gMTAyNAkJLyogSW5pdGlhbCBzZXR0aW5nIGZvciBuZmlsZSBybGltaXRzICovCisKKyNkZWZpbmUgQkxPQ0tfU0laRV9CSVRTIDEwCisjZGVmaW5lIEJMT0NLX1NJWkUgKDE8PEJMT0NLX1NJWkVfQklUUykKKworI2RlZmluZSBTRUVLX1NFVAkwCS8qIHNlZWsgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIGZpbGUgKi8KKyNkZWZpbmUgU0VFS19DVVIJMQkvKiBzZWVrIHJlbGF0aXZlIHRvIGN1cnJlbnQgZmlsZSBwb3NpdGlvbiAqLworI2RlZmluZSBTRUVLX0VORAkyCS8qIHNlZWsgcmVsYXRpdmUgdG8gZW5kIG9mIGZpbGUgKi8KKyNkZWZpbmUgU0VFS19NQVgJU0VFS19FTkQKKworc3RydWN0IGZzdHJpbV9yYW5nZSB7CisJX191NjQgc3RhcnQ7CisJX191NjQgbGVuOworCV9fdTY0IG1pbmxlbjsKK307CisKKy8qIEFuZCBkeW5hbWljYWxseS10dW5hYmxlIGxpbWl0cyBhbmQgZGVmYXVsdHM6ICovCitzdHJ1Y3QgZmlsZXNfc3RhdF9zdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgbnJfZmlsZXM7CQkvKiByZWFkIG9ubHkgKi8KKwl1bnNpZ25lZCBsb25nIG5yX2ZyZWVfZmlsZXM7CS8qIHJlYWQgb25seSAqLworCXVuc2lnbmVkIGxvbmcgbWF4X2ZpbGVzOwkJLyogdHVuYWJsZSAqLworfTsKKworc3RydWN0IGlub2Rlc19zdGF0X3QgeworCWludCBucl9pbm9kZXM7CisJaW50IG5yX3VudXNlZDsKKwlpbnQgZHVtbXlbNV07CQkvKiBwYWRkaW5nIGZvciBzeXNjdGwgQUJJIGNvbXBhdGliaWxpdHkgKi8KK307CisKKworI2RlZmluZSBOUl9GSUxFICA4MTkyCS8qIHRoaXMgY2FuIHdlbGwgYmUgbGFyZ2VyIG9uIGEgbGFyZ2VyIHN5c3RlbSAqLworCisjZGVmaW5lIE1BWV9FWEVDIDEKKyNkZWZpbmUgTUFZX1dSSVRFIDIKKyNkZWZpbmUgTUFZX1JFQUQgNAorI2RlZmluZSBNQVlfQVBQRU5EIDgKKyNkZWZpbmUgTUFZX0FDQ0VTUyAxNgorI2RlZmluZSBNQVlfT1BFTiAzMgorI2RlZmluZSBNQVlfQ0hESVIgNjQKKworLyoKKyAqIGZsYWdzIGluIGZpbGUuZl9tb2RlLiAgTm90ZSB0aGF0IEZNT0RFX1JFQUQgYW5kIEZNT0RFX1dSSVRFIG11c3QgY29ycmVzcG9uZAorICogdG8gT19XUk9OTFkgYW5kIE9fUkRXUiB2aWEgdGhlIHN0cmFuZ2UgdHJpY2sgaW4gX19kZW50cnlfb3BlbigpCisgKi8KKworLyogZmlsZSBpcyBvcGVuIGZvciByZWFkaW5nICovCisjZGVmaW5lIEZNT0RFX1JFQUQJCSgoZm1vZGVfdCkweDEpCisvKiBmaWxlIGlzIG9wZW4gZm9yIHdyaXRpbmcgKi8KKyNkZWZpbmUgRk1PREVfV1JJVEUJCSgoZm1vZGVfdCkweDIpCisvKiBmaWxlIGlzIHNlZWthYmxlICovCisjZGVmaW5lIEZNT0RFX0xTRUVLCQkoKGZtb2RlX3QpMHg0KQorLyogZmlsZSBjYW4gYmUgYWNjZXNzZWQgdXNpbmcgcHJlYWQgKi8KKyNkZWZpbmUgRk1PREVfUFJFQUQJCSgoZm1vZGVfdCkweDgpCisvKiBmaWxlIGNhbiBiZSBhY2Nlc3NlZCB1c2luZyBwd3JpdGUgKi8KKyNkZWZpbmUgRk1PREVfUFdSSVRFCQkoKGZtb2RlX3QpMHgxMCkKKy8qIEZpbGUgaXMgb3BlbmVkIGZvciBleGVjdXRpb24gd2l0aCBzeXNfZXhlY3ZlIC8gc3lzX3VzZWxpYiAqLworI2RlZmluZSBGTU9ERV9FWEVDCQkoKGZtb2RlX3QpMHgyMCkKKy8qIEZpbGUgaXMgb3BlbmVkIHdpdGggT19OREVMQVkgKG9ubHkgc2V0IGZvciBibG9jayBkZXZpY2VzKSAqLworI2RlZmluZSBGTU9ERV9OREVMQVkJCSgoZm1vZGVfdCkweDQwKQorLyogRmlsZSBpcyBvcGVuZWQgd2l0aCBPX0VYQ0wgKG9ubHkgc2V0IGZvciBibG9jayBkZXZpY2VzKSAqLworI2RlZmluZSBGTU9ERV9FWENMCQkoKGZtb2RlX3QpMHg4MCkKKy8qIEZpbGUgaXMgb3BlbmVkIHVzaW5nIG9wZW4oLi4sIDMsIC4uKSBhbmQgaXMgd3JpdGVhYmxlIG9ubHkgZm9yIGlvY3RscworICAgKHNwZWNpYWx5IGhhY2sgZm9yIGZsb3BweS5jKSAqLworI2RlZmluZSBGTU9ERV9XUklURV9JT0NUTAkoKGZtb2RlX3QpMHgxMDApCisKKy8qCisgKiBEb24ndCB1cGRhdGUgY3RpbWUgYW5kIG10aW1lLgorICoKKyAqIEN1cnJlbnRseSBhIHNwZWNpYWwgaGFjayBmb3IgdGhlIFhGUyBvcGVuX2J5X2hhbmRsZSBpb2N0bCwgYnV0IHdlJ2xsCisgKiBob3BlZnVsbHkgZ3JhZHVhdGUgaXQgdG8gYSBwcm9wZXIgT19DTVRJTUUgZmxhZyBzdXBwb3J0ZWQgYnkgb3BlbigyKSBzb29uLgorICovCisjZGVmaW5lIEZNT0RFX05PQ01USU1FCQkoKGZtb2RlX3QpMHg4MDApCisKKy8qIEV4cGVjdCByYW5kb20gYWNjZXNzIHBhdHRlcm4gKi8KKyNkZWZpbmUgRk1PREVfUkFORE9NCQkoKGZtb2RlX3QpMHgxMDAwKQorCisvKiBGaWxlIGlzIGh1Z2UgKGVnLiAvZGV2L2ttZW0pOiB0cmVhdCBsb2ZmX3QgYXMgdW5zaWduZWQgKi8KKyNkZWZpbmUgRk1PREVfVU5TSUdORURfT0ZGU0VUCSgoZm1vZGVfdCkweDIwMDApCisKKy8qIEZpbGUgd2FzIG9wZW5lZCBieSBmYW5vdGlmeSBhbmQgc2hvdWxkbid0IGdlbmVyYXRlIGZhbm90aWZ5IGV2ZW50cyAqLworI2RlZmluZSBGTU9ERV9OT05PVElGWQkJKChmbW9kZV90KTB4MTAwMDAwMCkKKworLyoKKyAqIFRoZSBiZWxvdyBhcmUgdGhlIHZhcmlvdXMgcmVhZCBhbmQgd3JpdGUgdHlwZXMgdGhhdCB3ZSBzdXBwb3J0LiBTb21lIG9mCisgKiB0aGVtIGluY2x1ZGUgYmVoYXZpb3JhbCBtb2RpZmllcnMgdGhhdCBzZW5kIGluZm9ybWF0aW9uIGRvd24gdG8gdGhlCisgKiBibG9jayBsYXllciBhbmQgSU8gc2NoZWR1bGVyLiBUZXJtaW5vbG9neToKKyAqCisgKglUaGUgYmxvY2sgbGF5ZXIgdXNlcyBkZXZpY2UgcGx1Z2dpbmcgdG8gZGVmZXIgSU8gYSBsaXR0bGUgYml0LCBpbgorICoJdGhlIGhvcGUgdGhhdCB3ZSB3aWxsIHNlZSBtb3JlIElPIHZlcnkgc2hvcnRseS4gVGhpcyBpbmNyZWFzZXMKKyAqCWNvYWxlc2Npbmcgb2YgYWRqYWNlbnQgSU8gYW5kIHRodXMgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIElPcyB3ZQorICoJaGF2ZSB0byBzZW5kIHRvIHRoZSBkZXZpY2UuIEl0IGFsc28gYWxsb3dzIGZvciBiZXR0ZXIgcXVldWluZywKKyAqCWlmIHRoZSBJTyBpc24ndCBtZXJnZWFibGUuIElmIHRoZSBjYWxsZXIgaXMgZ29pbmcgdG8gYmUgd2FpdGluZworICoJZm9yIHRoZSBJTywgdGhlbiBoZSBtdXN0IGVuc3VyZSB0aGF0IHRoZSBkZXZpY2UgaXMgdW5wbHVnZ2VkIHNvCisgKgl0aGF0IHRoZSBJTyBpcyBkaXNwYXRjaGVkIHRvIHRoZSBkcml2ZXIuCisgKgorICoJQWxsIElPIGlzIGhhbmRsZWQgYXN5bmMgaW4gTGludXguIFRoaXMgaXMgZmluZSBmb3IgYmFja2dyb3VuZAorICoJd3JpdGVzLCBidXQgZm9yIHJlYWRzIG9yIHdyaXRlcyB0aGF0IHNvbWVvbmUgd2FpdHMgZm9yIGNvbXBsZXRpb24KKyAqCW9uLCB3ZSB3YW50IHRvIG5vdGlmeSB0aGUgYmxvY2sgbGF5ZXIgYW5kIElPIHNjaGVkdWxlciBzbyB0aGF0IHRoZXkKKyAqCWtub3cgYWJvdXQgaXQuIFRoYXQgYWxsb3dzIHRoZW0gdG8gbWFrZSBiZXR0ZXIgc2NoZWR1bGluZworICoJZGVjaXNpb25zLiBTbyB3aGVuIHRoZSBiZWxvdyByZWZlcmVuY2VzICdzeW5jJyBhbmQgJ2FzeW5jJywgaXQKKyAqCWlzIHJlZmVyZW5jaW5nIHRoaXMgcHJpb3JpdHkgaGludC4KKyAqCisgKiBXaXRoIHRoYXQgaW4gbWluZCwgdGhlIGF2YWlsYWJsZSB0eXBlcyBhcmU6CisgKgorICogUkVBRAkJCUEgbm9ybWFsIHJlYWQgb3BlcmF0aW9uLiBEZXZpY2Ugd2lsbCBiZSBwbHVnZ2VkLgorICogUkVBRF9TWU5DCQlBIHN5bmNocm9ub3VzIHJlYWQuIERldmljZSBpcyBub3QgcGx1Z2dlZCwgY2FsbGVyIGNhbgorICoJCQlpbW1lZGlhdGVseSB3YWl0IG9uIHRoaXMgcmVhZCB3aXRob3V0IGNhcmluZyBhYm91dAorICoJCQl1bnBsdWdnaW5nLgorICogUkVBREEJCVVzZWQgZm9yIHJlYWQtYWhlYWQgb3BlcmF0aW9ucy4gTG93ZXIgcHJpb3JpdHksIGFuZCB0aGUKKyAqCQkJYmxvY2sgbGF5ZXIgY291bGQgKGluIHRoZW9yeSkgY2hvb3NlIHRvIGlnbm9yZSB0aGlzCisgKgkJCXJlcXVlc3QgaWYgaXQgcnVucyBpbnRvIHJlc291cmNlIHByb2JsZW1zLgorICogV1JJVEUJCUEgbm9ybWFsIGFzeW5jIHdyaXRlLiBEZXZpY2Ugd2lsbCBiZSBwbHVnZ2VkLgorICogV1JJVEVfU1lOQ19QTFVHCVN5bmNocm9ub3VzIHdyaXRlLiBJZGVudGljYWwgdG8gV1JJVEUsIGJ1dCBwYXNzZXMgZG93bgorICoJCQl0aGUgaGludCB0aGF0IHNvbWVvbmUgd2lsbCBiZSB3YWl0aW5nIG9uIHRoaXMgSU8KKyAqCQkJc2hvcnRseS4gVGhlIGRldmljZSBtdXN0IHN0aWxsIGJlIHVucGx1Z2dlZCBleHBsaWNpdGx5LAorICoJCQlXUklURV9TWU5DX1BMVUcgZG9lcyBub3QgZG8gdGhpcyBhcyB3ZSBjb3VsZCBiZQorICoJCQlzdWJtaXR0aW5nIG1vcmUgd3JpdGVzIGJlZm9yZSB3ZSBhY3R1YWxseSB3YWl0IG9uIGFueQorICoJCQlvZiB0aGVtLgorICogV1JJVEVfU1lOQwkJTGlrZSBXUklURV9TWU5DX1BMVUcsIGJ1dCBhbHNvIHVucGx1Z3MgdGhlIGRldmljZQorICoJCQlpbW1lZGlhdGVseSBhZnRlciBzdWJtaXNzaW9uLiBUaGUgd3JpdGUgZXF1aXZhbGVudAorICoJCQlvZiBSRUFEX1NZTkMuCisgKiBXUklURV9PRElSRUNUX1BMVUcJU3BlY2lhbCBjYXNlIHdyaXRlIGZvciBPX0RJUkVDVCBvbmx5LgorICogV1JJVEVfRkxVU0gJCUxpa2UgV1JJVEVfU1lOQyBidXQgd2l0aCBwcmVjZWRpbmcgY2FjaGUgZmx1c2guCisgKiBXUklURV9GVUEJCUxpa2UgV1JJVEVfU1lOQyBidXQgZGF0YSBpcyBndWFyYW50ZWVkIHRvIGJlIG9uCisgKgkJCW5vbi12b2xhdGlsZSBtZWRpYSBvbiBjb21wbGV0aW9uLgorICogV1JJVEVfRkxVU0hfRlVBCUNvbWJpbmF0aW9uIG9mIFdSSVRFX0ZMVVNIIGFuZCBGVUEuIFRoZSBJTyBpcyBwcmVjZWRlZAorICoJCQlieSBhIGNhY2hlIGZsdXNoIGFuZCBkYXRhIGlzIGd1YXJhbnRlZWQgdG8gYmUgb24KKyAqCQkJbm9uLXZvbGF0aWxlIG1lZGlhIG9uIGNvbXBsZXRpb24uCisgKgorICovCisjZGVmaW5lIFJXX01BU0sJCQlSRVFfV1JJVEUKKyNkZWZpbmUgUldBX01BU0sJCVJFUV9SQUhFQUQKKworI2RlZmluZSBSRUFECQkJMAorI2RlZmluZSBXUklURQkJCVJXX01BU0sKKyNkZWZpbmUgUkVBREEJCQlSV0FfTUFTSworCisjZGVmaW5lIFJFQURfU1lOQwkJKFJFQUQgfCBSRVFfU1lOQyB8IFJFUV9VTlBMVUcpCisjZGVmaW5lIFJFQURfTUVUQQkJKFJFQUQgfCBSRVFfTUVUQSkKKyNkZWZpbmUgV1JJVEVfU1lOQ19QTFVHCQkoV1JJVEUgfCBSRVFfU1lOQyB8IFJFUV9OT0lETEUpCisjZGVmaW5lIFdSSVRFX1NZTkMJCShXUklURSB8IFJFUV9TWU5DIHwgUkVRX05PSURMRSB8IFJFUV9VTlBMVUcpCisjZGVmaW5lIFdSSVRFX09ESVJFQ1RfUExVRwkoV1JJVEUgfCBSRVFfU1lOQykKKyNkZWZpbmUgV1JJVEVfTUVUQQkJKFdSSVRFIHwgUkVRX01FVEEpCisjZGVmaW5lIFdSSVRFX0ZMVVNICQkoV1JJVEUgfCBSRVFfU1lOQyB8IFJFUV9OT0lETEUgfCBSRVFfVU5QTFVHIHwgXAorCQkJCSBSRVFfRkxVU0gpCisjZGVmaW5lIFdSSVRFX0ZVQQkJKFdSSVRFIHwgUkVRX1NZTkMgfCBSRVFfTk9JRExFIHwgUkVRX1VOUExVRyB8IFwKKwkJCQkgUkVRX0ZVQSkKKyNkZWZpbmUgV1JJVEVfRkxVU0hfRlVBCQkoV1JJVEUgfCBSRVFfU1lOQyB8IFJFUV9OT0lETEUgfCBSRVFfVU5QTFVHIHwgXAorCQkJCSBSRVFfRkxVU0ggfCBSRVFfRlVBKQorCisjZGVmaW5lIFNFTF9JTgkJMQorI2RlZmluZSBTRUxfT1VUCQkyCisjZGVmaW5lIFNFTF9FWAkJNAorCisvKiBwdWJsaWMgZmxhZ3MgZm9yIGZpbGVfc3lzdGVtX3R5cGUgKi8KKyNkZWZpbmUgRlNfUkVRVUlSRVNfREVWIDEgCisjZGVmaW5lIEZTX0JJTkFSWV9NT1VOVERBVEEgMgorI2RlZmluZSBGU19IQVNfU1VCVFlQRSA0CisjZGVmaW5lIEZTX1JFVkFMX0RPVAkxNjM4NAkvKiBDaGVjayB0aGUgcGF0aHMgIi4iLCAiLi4iIGZvciBzdGFsZW5lc3MgKi8KKyNkZWZpbmUgRlNfUkVOQU1FX0RPRVNfRF9NT1ZFCTMyNzY4CS8qIEZTIHdpbGwgaGFuZGxlIGRfbW92ZSgpCisJCQkJCSAqIGR1cmluZyByZW5hbWUoKSBpbnRlcm5hbGx5LgorCQkJCQkgKi8KKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgZnMtaW5kZXBlbmRlbnQgbW91bnQtZmxhZ3M6IHVwIHRvIDMyIGZsYWdzIGFyZSBzdXBwb3J0ZWQKKyAqLworI2RlZmluZSBNU19SRE9OTFkJIDEJLyogTW91bnQgcmVhZC1vbmx5ICovCisjZGVmaW5lIE1TX05PU1VJRAkgMgkvKiBJZ25vcmUgc3VpZCBhbmQgc2dpZCBiaXRzICovCisjZGVmaW5lIE1TX05PREVWCSA0CS8qIERpc2FsbG93IGFjY2VzcyB0byBkZXZpY2Ugc3BlY2lhbCBmaWxlcyAqLworI2RlZmluZSBNU19OT0VYRUMJIDgJLyogRGlzYWxsb3cgcHJvZ3JhbSBleGVjdXRpb24gKi8KKyNkZWZpbmUgTVNfU1lOQ0hST05PVVMJMTYJLyogV3JpdGVzIGFyZSBzeW5jZWQgYXQgb25jZSAqLworI2RlZmluZSBNU19SRU1PVU5UCTMyCS8qIEFsdGVyIGZsYWdzIG9mIGEgbW91bnRlZCBGUyAqLworI2RlZmluZSBNU19NQU5ETE9DSwk2NAkvKiBBbGxvdyBtYW5kYXRvcnkgbG9ja3Mgb24gYW4gRlMgKi8KKyNkZWZpbmUgTVNfRElSU1lOQwkxMjgJLyogRGlyZWN0b3J5IG1vZGlmaWNhdGlvbnMgYXJlIHN5bmNocm9ub3VzICovCisjZGVmaW5lIE1TX05PQVRJTUUJMTAyNAkvKiBEbyBub3QgdXBkYXRlIGFjY2VzcyB0aW1lcy4gKi8KKyNkZWZpbmUgTVNfTk9ESVJBVElNRQkyMDQ4CS8qIERvIG5vdCB1cGRhdGUgZGlyZWN0b3J5IGFjY2VzcyB0aW1lcyAqLworI2RlZmluZSBNU19CSU5ECQk0MDk2CisjZGVmaW5lIE1TX01PVkUJCTgxOTIKKyNkZWZpbmUgTVNfUkVDCQkxNjM4NAorI2RlZmluZSBNU19WRVJCT1NFCTMyNzY4CS8qIFdhciBpcyBwZWFjZS4gVmVyYm9zaXR5IGlzIHNpbGVuY2UuCisJCQkJICAgTVNfVkVSQk9TRSBpcyBkZXByZWNhdGVkLiAqLworI2RlZmluZSBNU19TSUxFTlQJMzI3NjgKKyNkZWZpbmUgTVNfUE9TSVhBQ0wJKDE8PDE2KQkvKiBWRlMgZG9lcyBub3QgYXBwbHkgdGhlIHVtYXNrICovCisjZGVmaW5lIE1TX1VOQklOREFCTEUJKDE8PDE3KQkvKiBjaGFuZ2UgdG8gdW5iaW5kYWJsZSAqLworI2RlZmluZSBNU19QUklWQVRFCSgxPDwxOCkJLyogY2hhbmdlIHRvIHByaXZhdGUgKi8KKyNkZWZpbmUgTVNfU0xBVkUJKDE8PDE5KQkvKiBjaGFuZ2UgdG8gc2xhdmUgKi8KKyNkZWZpbmUgTVNfU0hBUkVECSgxPDwyMCkJLyogY2hhbmdlIHRvIHNoYXJlZCAqLworI2RlZmluZSBNU19SRUxBVElNRQkoMTw8MjEpCS8qIFVwZGF0ZSBhdGltZSByZWxhdGl2ZSB0byBtdGltZS9jdGltZS4gKi8KKyNkZWZpbmUgTVNfS0VSTk1PVU5UCSgxPDwyMikgLyogdGhpcyBpcyBhIGtlcm5fbW91bnQgY2FsbCAqLworI2RlZmluZSBNU19JX1ZFUlNJT04JKDE8PDIzKSAvKiBVcGRhdGUgaW5vZGUgSV92ZXJzaW9uIGZpZWxkICovCisjZGVmaW5lIE1TX1NUUklDVEFUSU1FCSgxPDwyNCkgLyogQWx3YXlzIHBlcmZvcm0gYXRpbWUgdXBkYXRlcyAqLworI2RlZmluZSBNU19CT1JOCQkoMTw8MjkpCisjZGVmaW5lIE1TX0FDVElWRQkoMTw8MzApCisjZGVmaW5lIE1TX05PVVNFUgkoMTw8MzEpCisKKy8qCisgKiBTdXBlcmJsb2NrIGZsYWdzIHRoYXQgY2FuIGJlIGFsdGVyZWQgYnkgTVNfUkVNT1VOVAorICovCisjZGVmaW5lIE1TX1JNVF9NQVNLCShNU19SRE9OTFl8TVNfU1lOQ0hST05PVVN8TVNfTUFORExPQ0t8TVNfSV9WRVJTSU9OKQorCisvKgorICogT2xkIG1hZ2ljIG1vdW50IGZsYWcgYW5kIG1hc2sKKyAqLworI2RlZmluZSBNU19NR0NfVkFMIDB4QzBFRDAwMDAKKyNkZWZpbmUgTVNfTUdDX01TSyAweGZmZmYwMDAwCisKKy8qIElub2RlIGZsYWdzIC0gdGhleSBoYXZlIG5vdGhpbmcgdG8gc3VwZXJibG9jayBmbGFncyBub3cgKi8KKworI2RlZmluZSBTX1NZTkMJCTEJLyogV3JpdGVzIGFyZSBzeW5jZWQgYXQgb25jZSAqLworI2RlZmluZSBTX05PQVRJTUUJMgkvKiBEbyBub3QgdXBkYXRlIGFjY2VzcyB0aW1lcyAqLworI2RlZmluZSBTX0FQUEVORAk0CS8qIEFwcGVuZC1vbmx5IGZpbGUgKi8KKyNkZWZpbmUgU19JTU1VVEFCTEUJOAkvKiBJbW11dGFibGUgZmlsZSAqLworI2RlZmluZSBTX0RFQUQJCTE2CS8qIHJlbW92ZWQsIGJ1dCBzdGlsbCBvcGVuIGRpcmVjdG9yeSAqLworI2RlZmluZSBTX05PUVVPVEEJMzIJLyogSW5vZGUgaXMgbm90IGNvdW50ZWQgdG8gcXVvdGEgKi8KKyNkZWZpbmUgU19ESVJTWU5DCTY0CS8qIERpcmVjdG9yeSBtb2RpZmljYXRpb25zIGFyZSBzeW5jaHJvbm91cyAqLworI2RlZmluZSBTX05PQ01USU1FCTEyOAkvKiBEbyBub3QgdXBkYXRlIGZpbGUgYy9tdGltZSAqLworI2RlZmluZSBTX1NXQVBGSUxFCTI1NgkvKiBEbyBub3QgdHJ1bmNhdGU6IHN3YXBvbiBnb3QgaXRzIGJtYXBzICovCisjZGVmaW5lIFNfUFJJVkFURQk1MTIJLyogSW5vZGUgaXMgZnMtaW50ZXJuYWwgKi8KKyNkZWZpbmUgU19JTUEJCTEwMjQJLyogSW5vZGUgaGFzIGFuIGFzc29jaWF0ZWQgSU1BIHN0cnVjdCAqLworCisvKgorICogTm90ZSB0aGF0IG5vc3VpZCBldGMgZmxhZ3MgYXJlIGlub2RlLXNwZWNpZmljOiBzZXR0aW5nIHNvbWUgZmlsZS1zeXN0ZW0KKyAqIGZsYWdzIGp1c3QgbWVhbnMgYWxsIHRoZSBpbm9kZXMgaW5oZXJpdCB0aG9zZSBmbGFncyBieSBkZWZhdWx0LiBJdCBtaWdodCBiZQorICogcG9zc2libGUgdG8gb3ZlcnJpZGUgaXQgc2VsZWN0aXZlbHkgaWYgeW91IHJlYWxseSB3YW50ZWQgdG8gd2l0aCBzb21lCisgKiBpb2N0bCgpIHRoYXQgaXMgbm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZC4KKyAqCisgKiBFeGNlcHRpb246IE1TX1JET05MWSBpcyBhbHdheXMgYXBwbGllZCB0byB0aGUgZW50aXJlIGZpbGUgc3lzdGVtLgorICoKKyAqIFVuZm9ydHVuYXRlbHksIGl0IGlzIHBvc3NpYmxlIHRvIGNoYW5nZSBhIGZpbGVzeXN0ZW1zIGZsYWdzIHdpdGggaXQgbW91bnRlZAorICogd2l0aCBmaWxlcyBpbiB1c2UuICBUaGlzIG1lYW5zIHRoYXQgYWxsIG9mIHRoZSBpbm9kZXMgd2lsbCBub3QgaGF2ZSB0aGVpcgorICogaV9mbGFncyB1cGRhdGVkLiAgSGVuY2UsIGlfZmxhZ3Mgbm8gbG9uZ2VyIGluaGVyaXQgdGhlIHN1cGVyYmxvY2sgbW91bnQKKyAqIGZsYWdzLCBzbyB0aGVzZSBoYXZlIHRvIGJlIGNoZWNrZWQgc2VwYXJhdGVseS4gLS0gcm1rQGFybS51ay5saW51eC5vcmcKKyAqLworI2RlZmluZSBfX0lTX0ZMRyhpbm9kZSxmbGcpICgoaW5vZGUpLT5pX3NiLT5zX2ZsYWdzICYgKGZsZykpCisKKyNkZWZpbmUgSVNfUkRPTkxZKGlub2RlKSAoKGlub2RlKS0+aV9zYi0+c19mbGFncyAmIE1TX1JET05MWSkKKyNkZWZpbmUgSVNfU1lOQyhpbm9kZSkJCShfX0lTX0ZMRyhpbm9kZSwgTVNfU1lOQ0hST05PVVMpIHx8IFwKKwkJCQkJKChpbm9kZSktPmlfZmxhZ3MgJiBTX1NZTkMpKQorI2RlZmluZSBJU19ESVJTWU5DKGlub2RlKQkoX19JU19GTEcoaW5vZGUsIE1TX1NZTkNIUk9OT1VTfE1TX0RJUlNZTkMpIHx8IFwKKwkJCQkJKChpbm9kZSktPmlfZmxhZ3MgJiAoU19TWU5DfFNfRElSU1lOQykpKQorI2RlZmluZSBJU19NQU5ETE9DSyhpbm9kZSkJX19JU19GTEcoaW5vZGUsIE1TX01BTkRMT0NLKQorI2RlZmluZSBJU19OT0FUSU1FKGlub2RlKSAgIF9fSVNfRkxHKGlub2RlLCBNU19SRE9OTFl8TVNfTk9BVElNRSkKKyNkZWZpbmUgSVNfSV9WRVJTSU9OKGlub2RlKSAgIF9fSVNfRkxHKGlub2RlLCBNU19JX1ZFUlNJT04pCisKKyNkZWZpbmUgSVNfTk9RVU9UQShpbm9kZSkJKChpbm9kZSktPmlfZmxhZ3MgJiBTX05PUVVPVEEpCisjZGVmaW5lIElTX0FQUEVORChpbm9kZSkJKChpbm9kZSktPmlfZmxhZ3MgJiBTX0FQUEVORCkKKyNkZWZpbmUgSVNfSU1NVVRBQkxFKGlub2RlKQkoKGlub2RlKS0+aV9mbGFncyAmIFNfSU1NVVRBQkxFKQorI2RlZmluZSBJU19QT1NJWEFDTChpbm9kZSkJX19JU19GTEcoaW5vZGUsIE1TX1BPU0lYQUNMKQorCisjZGVmaW5lIElTX0RFQURESVIoaW5vZGUpCSgoaW5vZGUpLT5pX2ZsYWdzICYgU19ERUFEKQorI2RlZmluZSBJU19OT0NNVElNRShpbm9kZSkJKChpbm9kZSktPmlfZmxhZ3MgJiBTX05PQ01USU1FKQorI2RlZmluZSBJU19TV0FQRklMRShpbm9kZSkJKChpbm9kZSktPmlfZmxhZ3MgJiBTX1NXQVBGSUxFKQorI2RlZmluZSBJU19QUklWQVRFKGlub2RlKQkoKGlub2RlKS0+aV9mbGFncyAmIFNfUFJJVkFURSkKKyNkZWZpbmUgSVNfSU1BKGlub2RlKQkJKChpbm9kZSktPmlfZmxhZ3MgJiBTX0lNQSkKKworLyogdGhlIHJlYWQtb25seSBzdHVmZiBkb2Vzbid0IHJlYWxseSBiZWxvbmcgaGVyZSwgYnV0IGFueSBvdGhlciBwbGFjZSBpcworICAgcHJvYmFibHkgYXMgYmFkIGFuZCBJIGRvbid0IHdhbnQgdG8gY3JlYXRlIHlldCBhbm90aGVyIGluY2x1ZGUgZmlsZS4gKi8KKworI2RlZmluZSBCTEtST1NFVCAgIF9JTygweDEyLDkzKQkvKiBzZXQgZGV2aWNlIHJlYWQtb25seSAoMCA9IHJlYWQtd3JpdGUpICovCisjZGVmaW5lIEJMS1JPR0VUICAgX0lPKDB4MTIsOTQpCS8qIGdldCByZWFkLW9ubHkgc3RhdHVzICgwID0gcmVhZF93cml0ZSkgKi8KKyNkZWZpbmUgQkxLUlJQQVJUICBfSU8oMHgxMiw5NSkJLyogcmUtcmVhZCBwYXJ0aXRpb24gdGFibGUgKi8KKyNkZWZpbmUgQkxLR0VUU0laRSBfSU8oMHgxMiw5NikJLyogcmV0dXJuIGRldmljZSBzaXplIC81MTIgKGxvbmcgKmFyZykgKi8KKyNkZWZpbmUgQkxLRkxTQlVGICBfSU8oMHgxMiw5NykJLyogZmx1c2ggYnVmZmVyIGNhY2hlICovCisjZGVmaW5lIEJMS1JBU0VUICAgX0lPKDB4MTIsOTgpCS8qIHNldCByZWFkIGFoZWFkIGZvciBibG9jayBkZXZpY2UgKi8KKyNkZWZpbmUgQkxLUkFHRVQgICBfSU8oMHgxMiw5OSkJLyogZ2V0IGN1cnJlbnQgcmVhZCBhaGVhZCBzZXR0aW5nICovCisjZGVmaW5lIEJMS0ZSQVNFVCAgX0lPKDB4MTIsMTAwKS8qIHNldCBmaWxlc3lzdGVtIChtbS9maWxlbWFwLmMpIHJlYWQtYWhlYWQgKi8KKyNkZWZpbmUgQkxLRlJBR0VUICBfSU8oMHgxMiwxMDEpLyogZ2V0IGZpbGVzeXN0ZW0gKG1tL2ZpbGVtYXAuYykgcmVhZC1haGVhZCAqLworI2RlZmluZSBCTEtTRUNUU0VUIF9JTygweDEyLDEwMikvKiBzZXQgbWF4IHNlY3RvcnMgcGVyIHJlcXVlc3QgKGxsX3J3X2Jsay5jKSAqLworI2RlZmluZSBCTEtTRUNUR0VUIF9JTygweDEyLDEwMykvKiBnZXQgbWF4IHNlY3RvcnMgcGVyIHJlcXVlc3QgKGxsX3J3X2Jsay5jKSAqLworI2RlZmluZSBCTEtTU1pHRVQgIF9JTygweDEyLDEwNCkvKiBnZXQgYmxvY2sgZGV2aWNlIHNlY3RvciBzaXplICovCisjaWYgMAorI2RlZmluZSBCTEtQRyAgICAgIF9JTygweDEyLDEwNSkvKiBTZWUgYmxrcGcuaCAqLworCisvKiBTb21lIHBlb3BsZSBhcmUgbW9yb25zLiAgRG8gbm90IHVzZSBzaXplb2YhICovCisKKyNkZWZpbmUgQkxLRUxWR0VUICBfSU9SKDB4MTIsMTA2LHNpemVfdCkvKiBlbGV2YXRvciBnZXQgKi8KKyNkZWZpbmUgQkxLRUxWU0VUICBfSU9XKDB4MTIsMTA3LHNpemVfdCkvKiBlbGV2YXRvciBzZXQgKi8KKy8qIFRoaXMgd2FzIGhlcmUganVzdCB0byBzaG93IHRoYXQgdGhlIG51bWJlciBpcyB0YWtlbiAtCisgICBwcm9iYWJseSBhbGwgdGhlc2UgX0lPKDB4MTIsKikgaW9jdGxzIHNob3VsZCBiZSBtb3ZlZCB0byBibGtwZy5oLiAqLworI2VuZGlmCisvKiBBIGp1bXAgaGVyZTogMTA4LTExMSBoYXZlIGJlZW4gdXNlZCBmb3IgdmFyaW91cyBwcml2YXRlIHB1cnBvc2VzLiAqLworI2RlZmluZSBCTEtCU1pHRVQgIF9JT1IoMHgxMiwxMTIsc2l6ZV90KQorI2RlZmluZSBCTEtCU1pTRVQgIF9JT1coMHgxMiwxMTMsc2l6ZV90KQorI2RlZmluZSBCTEtHRVRTSVpFNjQgX0lPUigweDEyLDExNCxzaXplX3QpCS8qIHJldHVybiBkZXZpY2Ugc2l6ZSBpbiBieXRlcyAodTY0ICphcmcpICovCisjZGVmaW5lIEJMS1RSQUNFU0VUVVAgX0lPV1IoMHgxMiwxMTUsc3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwKQorI2RlZmluZSBCTEtUUkFDRVNUQVJUIF9JTygweDEyLDExNikKKyNkZWZpbmUgQkxLVFJBQ0VTVE9QIF9JTygweDEyLDExNykKKyNkZWZpbmUgQkxLVFJBQ0VURUFSRE9XTiBfSU8oMHgxMiwxMTgpCisjZGVmaW5lIEJMS0RJU0NBUkQgX0lPKDB4MTIsMTE5KQorI2RlZmluZSBCTEtJT01JTiBfSU8oMHgxMiwxMjApCisjZGVmaW5lIEJMS0lPT1BUIF9JTygweDEyLDEyMSkKKyNkZWZpbmUgQkxLQUxJR05PRkYgX0lPKDB4MTIsMTIyKQorI2RlZmluZSBCTEtQQlNaR0VUIF9JTygweDEyLDEyMykKKyNkZWZpbmUgQkxLRElTQ0FSRFpFUk9FUyBfSU8oMHgxMiwxMjQpCisjZGVmaW5lIEJMS1NFQ0RJU0NBUkQgX0lPKDB4MTIsMTI1KQorCisjZGVmaW5lIEJNQVBfSU9DVEwgMQkJLyogb2Jzb2xldGUgLSBrZXB0IGZvciBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIEZJQk1BUAkgICBfSU8oMHgwMCwxKQkvKiBibWFwIGFjY2VzcyAqLworI2RlZmluZSBGSUdFVEJTWiAgIF9JTygweDAwLDIpCS8qIGdldCB0aGUgYmxvY2sgc2l6ZSB1c2VkIGZvciBibWFwICovCisjZGVmaW5lIEZJRlJFRVpFCV9JT1dSKCdYJywgMTE5LCBpbnQpCS8qIEZyZWV6ZSAqLworI2RlZmluZSBGSVRIQVcJCV9JT1dSKCdYJywgMTIwLCBpbnQpCS8qIFRoYXcgKi8KKyNkZWZpbmUgRklUUklNCQlfSU9XUignWCcsIDEyMSwgc3RydWN0IGZzdHJpbV9yYW5nZSkJLyogVHJpbSAqLworCisjZGVmaW5lCUZTX0lPQ19HRVRGTEFHUwkJCV9JT1IoJ2YnLCAxLCBsb25nKQorI2RlZmluZQlGU19JT0NfU0VURkxBR1MJCQlfSU9XKCdmJywgMiwgbG9uZykKKyNkZWZpbmUJRlNfSU9DX0dFVFZFUlNJT04JCV9JT1IoJ3YnLCAxLCBsb25nKQorI2RlZmluZQlGU19JT0NfU0VUVkVSU0lPTgkJX0lPVygndicsIDIsIGxvbmcpCisjZGVmaW5lIEZTX0lPQ19GSUVNQVAJCQlfSU9XUignZicsIDExLCBzdHJ1Y3QgZmllbWFwKQorI2RlZmluZSBGU19JT0MzMl9HRVRGTEFHUwkJX0lPUignZicsIDEsIGludCkKKyNkZWZpbmUgRlNfSU9DMzJfU0VURkxBR1MJCV9JT1coJ2YnLCAyLCBpbnQpCisjZGVmaW5lIEZTX0lPQzMyX0dFVFZFUlNJT04JCV9JT1IoJ3YnLCAxLCBpbnQpCisjZGVmaW5lIEZTX0lPQzMyX1NFVFZFUlNJT04JCV9JT1coJ3YnLCAyLCBpbnQpCisKKy8qCisgKiBJbm9kZSBmbGFncyAoRlNfSU9DX0dFVEZMQUdTIC8gRlNfSU9DX1NFVEZMQUdTKQorICovCisjZGVmaW5lCUZTX1NFQ1JNX0ZMCQkJMHgwMDAwMDAwMSAvKiBTZWN1cmUgZGVsZXRpb24gKi8KKyNkZWZpbmUJRlNfVU5STV9GTAkJCTB4MDAwMDAwMDIgLyogVW5kZWxldGUgKi8KKyNkZWZpbmUJRlNfQ09NUFJfRkwJCQkweDAwMDAwMDA0IC8qIENvbXByZXNzIGZpbGUgKi8KKyNkZWZpbmUgRlNfU1lOQ19GTAkJCTB4MDAwMDAwMDggLyogU3luY2hyb25vdXMgdXBkYXRlcyAqLworI2RlZmluZSBGU19JTU1VVEFCTEVfRkwJCQkweDAwMDAwMDEwIC8qIEltbXV0YWJsZSBmaWxlICovCisjZGVmaW5lIEZTX0FQUEVORF9GTAkJCTB4MDAwMDAwMjAgLyogd3JpdGVzIHRvIGZpbGUgbWF5IG9ubHkgYXBwZW5kICovCisjZGVmaW5lIEZTX05PRFVNUF9GTAkJCTB4MDAwMDAwNDAgLyogZG8gbm90IGR1bXAgZmlsZSAqLworI2RlZmluZSBGU19OT0FUSU1FX0ZMCQkJMHgwMDAwMDA4MCAvKiBkbyBub3QgdXBkYXRlIGF0aW1lICovCisvKiBSZXNlcnZlZCBmb3IgY29tcHJlc3Npb24gdXNhZ2UuLi4gKi8KKyNkZWZpbmUgRlNfRElSVFlfRkwJCQkweDAwMDAwMTAwCisjZGVmaW5lIEZTX0NPTVBSQkxLX0ZMCQkJMHgwMDAwMDIwMCAvKiBPbmUgb3IgbW9yZSBjb21wcmVzc2VkIGNsdXN0ZXJzICovCisjZGVmaW5lIEZTX05PQ09NUF9GTAkJCTB4MDAwMDA0MDAgLyogRG9uJ3QgY29tcHJlc3MgKi8KKyNkZWZpbmUgRlNfRUNPTVBSX0ZMCQkJMHgwMDAwMDgwMCAvKiBDb21wcmVzc2lvbiBlcnJvciAqLworLyogRW5kIGNvbXByZXNzaW9uIGZsYWdzIC0tLSBtYXliZSBub3QgYWxsIHVzZWQgKi8KKyNkZWZpbmUgRlNfQlRSRUVfRkwJCQkweDAwMDAxMDAwIC8qIGJ0cmVlIGZvcm1hdCBkaXIgKi8KKyNkZWZpbmUgRlNfSU5ERVhfRkwJCQkweDAwMDAxMDAwIC8qIGhhc2gtaW5kZXhlZCBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgRlNfSU1BR0lDX0ZMCQkJMHgwMDAwMjAwMCAvKiBBRlMgZGlyZWN0b3J5ICovCisjZGVmaW5lIEZTX0pPVVJOQUxfREFUQV9GTAkJMHgwMDAwNDAwMCAvKiBSZXNlcnZlZCBmb3IgZXh0MyAqLworI2RlZmluZSBGU19OT1RBSUxfRkwJCQkweDAwMDA4MDAwIC8qIGZpbGUgdGFpbCBzaG91bGQgbm90IGJlIG1lcmdlZCAqLworI2RlZmluZSBGU19ESVJTWU5DX0ZMCQkJMHgwMDAxMDAwMCAvKiBkaXJzeW5jIGJlaGF2aW91ciAoZGlyZWN0b3JpZXMgb25seSkgKi8KKyNkZWZpbmUgRlNfVE9QRElSX0ZMCQkJMHgwMDAyMDAwMCAvKiBUb3Agb2YgZGlyZWN0b3J5IGhpZXJhcmNoaWVzKi8KKyNkZWZpbmUgRlNfRVhURU5UX0ZMCQkJMHgwMDA4MDAwMCAvKiBFeHRlbnRzICovCisjZGVmaW5lIEZTX0RJUkVDVElPX0ZMCQkJMHgwMDEwMDAwMCAvKiBVc2UgZGlyZWN0IGkvbyAqLworI2RlZmluZSBGU19SRVNFUlZFRF9GTAkJCTB4ODAwMDAwMDAgLyogcmVzZXJ2ZWQgZm9yIGV4dDIgbGliICovCisKKyNkZWZpbmUgRlNfRkxfVVNFUl9WSVNJQkxFCQkweDAwMDNERkZGIC8qIFVzZXIgdmlzaWJsZSBmbGFncyAqLworI2RlZmluZSBGU19GTF9VU0VSX01PRElGSUFCTEUJCTB4MDAwMzgwRkYgLyogVXNlciBtb2RpZmlhYmxlIGZsYWdzICovCisKKworI2RlZmluZSBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUJMQorI2RlZmluZSBTWU5DX0ZJTEVfUkFOR0VfV1JJVEUJCTIKKyNkZWZpbmUgU1lOQ19GSUxFX1JBTkdFX1dBSVRfQUZURVIJNAorCisjZW5kaWYgLyogX0xJTlVYX0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9mdXNlLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZnVzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYzU3OGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZnVzZS5oCkBAIC0wLDAgKzEsNjAzIEBACisvKgorICAgIEZVU0U6IEZpbGVzeXN0ZW0gaW4gVXNlcnNwYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDggIE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KKworICAgIFRoaXMgcHJvZ3JhbSBjYW4gYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMLgorICAgIFNlZSB0aGUgZmlsZSBDT1BZSU5HLgorKi8KKworLyoKKyAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBrZXJuZWwgaW50ZXJmYWNlIG9mIEZVU0UKKyAqCisgKiBQcm90b2NvbCBjaGFuZ2Vsb2c6CisgKgorICogNy45OgorICogIC0gbmV3IGZ1c2VfZ2V0YXR0cl9pbiBpbnB1dCBhcmd1bWVudCBvZiBHRVRBVFRSCisgKiAgLSBhZGQgbGtfZmxhZ3MgaW4gZnVzZV9sa19pbgorICogIC0gYWRkIGxvY2tfb3duZXIgZmllbGQgdG8gZnVzZV9zZXRhdHRyX2luLCBmdXNlX3JlYWRfaW4gYW5kIGZ1c2Vfd3JpdGVfaW4KKyAqICAtIGFkZCBibGtzaXplIGZpZWxkIHRvIGZ1c2VfYXR0cgorICogIC0gYWRkIGZpbGUgZmxhZ3MgZmllbGQgdG8gZnVzZV9yZWFkX2luIGFuZCBmdXNlX3dyaXRlX2luCisgKgorICogNy4xMAorICogIC0gYWRkIG5vbnNlZWthYmxlIG9wZW4gZmxhZworICoKKyAqIDcuMTEKKyAqICAtIGFkZCBJT0NUTCBtZXNzYWdlCisgKiAgLSBhZGQgdW5zb2xpY2l0ZWQgbm90aWZpY2F0aW9uIHN1cHBvcnQKKyAqICAtIGFkZCBQT0xMIG1lc3NhZ2UgYW5kIE5PVElGWV9QT0xMIG5vdGlmaWNhdGlvbgorICoKKyAqIDcuMTIKKyAqICAtIGFkZCB1bWFzayBmbGFnIHRvIGlucHV0IGFyZ3VtZW50IG9mIG9wZW4sIG1rbm9kIGFuZCBta2RpcgorICogIC0gYWRkIG5vdGlmaWNhdGlvbiBtZXNzYWdlcyBmb3IgaW52YWxpZGF0aW9uIG9mIGlub2RlcyBhbmQKKyAqICAgIGRpcmVjdG9yeSBlbnRyaWVzCisgKgorICogNy4xMworICogIC0gbWFrZSBtYXggbnVtYmVyIG9mIGJhY2tncm91bmQgcmVxdWVzdHMgYW5kIGNvbmdlc3Rpb24gdGhyZXNob2xkCisgKiAgICB0dW5hYmxlcworICoKKyAqIDcuMTQKKyAqICAtIGFkZCBzcGxpY2Ugc3VwcG9ydCB0byBmdXNlIGRldmljZQorICoKKyAqIDcuMTUKKyAqICAtIGFkZCBzdG9yZSBub3RpZnkKKyAqICAtIGFkZCByZXRyaWV2ZSBub3RpZnkKKyAqLworCisjaWZuZGVmIF9MSU5VWF9GVVNFX0gKKyNkZWZpbmUgX0xJTlVYX0ZVU0VfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIFZlcnNpb24gbmVnb3RpYXRpb246CisgKgorICogQm90aCB0aGUga2VybmVsIGFuZCB1c2Vyc3BhY2Ugc2VuZCB0aGUgdmVyc2lvbiB0aGV5IHN1cHBvcnQgaW4gdGhlCisgKiBJTklUIHJlcXVlc3QgYW5kIHJlcGx5IHJlc3BlY3RpdmVseS4KKyAqCisgKiBJZiB0aGUgbWFqb3IgdmVyc2lvbnMgbWF0Y2ggdGhlbiBib3RoIHNoYWxsIHVzZSB0aGUgc21hbGxlc3QKKyAqIG9mIHRoZSB0d28gbWlub3IgdmVyc2lvbnMgZm9yIGNvbW11bmljYXRpb24uCisgKgorICogSWYgdGhlIGtlcm5lbCBzdXBwb3J0cyBhIGxhcmdlciBtYWpvciB2ZXJzaW9uLCB0aGVuIHVzZXJzcGFjZSBzaGFsbAorICogcmVwbHkgd2l0aCB0aGUgbWFqb3IgdmVyc2lvbiBpdCBzdXBwb3J0cywgaWdub3JlIHRoZSByZXN0IG9mIHRoZQorICogSU5JVCBtZXNzYWdlIGFuZCBleHBlY3QgYSBuZXcgSU5JVCBtZXNzYWdlIGZyb20gdGhlIGtlcm5lbCB3aXRoIGEKKyAqIG1hdGNoaW5nIG1ham9yIHZlcnNpb24uCisgKgorICogSWYgdGhlIGxpYnJhcnkgc3VwcG9ydHMgYSBsYXJnZXIgbWFqb3IgdmVyc2lvbiwgdGhlbiBpdCBzaGFsbCBmYWxsCisgKiBiYWNrIHRvIHRoZSBtYWpvciBwcm90b2NvbCB2ZXJzaW9uIHNlbnQgYnkgdGhlIGtlcm5lbCBmb3IKKyAqIGNvbW11bmljYXRpb24gYW5kIHJlcGx5IHdpdGggdGhhdCBtYWpvciB2ZXJzaW9uIChhbmQgYW4gYXJiaXRyYXJ5CisgKiBzdXBwb3J0ZWQgbWlub3IgdmVyc2lvbikuCisgKi8KKworLyoqIFZlcnNpb24gbnVtYmVyIG9mIHRoaXMgaW50ZXJmYWNlICovCisjZGVmaW5lIEZVU0VfS0VSTkVMX1ZFUlNJT04gNworCisvKiogTWlub3IgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgRlVTRV9LRVJORUxfTUlOT1JfVkVSU0lPTiAxNQorCisvKiogVGhlIG5vZGUgSUQgb2YgdGhlIHJvb3QgaW5vZGUgKi8KKyNkZWZpbmUgRlVTRV9ST09UX0lEIDEKKworLyogTWFrZSBzdXJlIGFsbCBzdHJ1Y3R1cmVzIGFyZSBwYWRkZWQgdG8gNjRiaXQgYm91bmRhcnksIHNvIDMyYml0CisgICB1c2Vyc3BhY2Ugd29ya3MgdW5kZXIgNjRiaXQga2VybmVscyAqLworCitzdHJ1Y3QgZnVzZV9hdHRyIHsKKwlfX3U2NAlpbm87CisJX191NjQJc2l6ZTsKKwlfX3U2NAlibG9ja3M7CisJX191NjQJYXRpbWU7CisJX191NjQJbXRpbWU7CisJX191NjQJY3RpbWU7CisJX191MzIJYXRpbWVuc2VjOworCV9fdTMyCW10aW1lbnNlYzsKKwlfX3UzMgljdGltZW5zZWM7CisJX191MzIJbW9kZTsKKwlfX3UzMglubGluazsKKwlfX3UzMgl1aWQ7CisJX191MzIJZ2lkOworCV9fdTMyCXJkZXY7CisJX191MzIJYmxrc2l6ZTsKKwlfX3UzMglwYWRkaW5nOworfTsKKworc3RydWN0IGZ1c2Vfa3N0YXRmcyB7CisJX191NjQJYmxvY2tzOworCV9fdTY0CWJmcmVlOworCV9fdTY0CWJhdmFpbDsKKwlfX3U2NAlmaWxlczsKKwlfX3U2NAlmZnJlZTsKKwlfX3UzMglic2l6ZTsKKwlfX3UzMgluYW1lbGVuOworCV9fdTMyCWZyc2l6ZTsKKwlfX3UzMglwYWRkaW5nOworCV9fdTMyCXNwYXJlWzZdOworfTsKKworc3RydWN0IGZ1c2VfZmlsZV9sb2NrIHsKKwlfX3U2NAlzdGFydDsKKwlfX3U2NAllbmQ7CisJX191MzIJdHlwZTsKKwlfX3UzMglwaWQ7IC8qIHRnaWQgKi8KK307CisKKy8qKgorICogQml0bWFza3MgZm9yIGZ1c2Vfc2V0YXR0cl9pbi52YWxpZAorICovCisjZGVmaW5lIEZBVFRSX01PREUJKDEgPDwgMCkKKyNkZWZpbmUgRkFUVFJfVUlECSgxIDw8IDEpCisjZGVmaW5lIEZBVFRSX0dJRAkoMSA8PCAyKQorI2RlZmluZSBGQVRUUl9TSVpFCSgxIDw8IDMpCisjZGVmaW5lIEZBVFRSX0FUSU1FCSgxIDw8IDQpCisjZGVmaW5lIEZBVFRSX01USU1FCSgxIDw8IDUpCisjZGVmaW5lIEZBVFRSX0ZICSgxIDw8IDYpCisjZGVmaW5lIEZBVFRSX0FUSU1FX05PVwkoMSA8PCA3KQorI2RlZmluZSBGQVRUUl9NVElNRV9OT1cJKDEgPDwgOCkKKyNkZWZpbmUgRkFUVFJfTE9DS09XTkVSCSgxIDw8IDkpCisKKy8qKgorICogRmxhZ3MgcmV0dXJuZWQgYnkgdGhlIE9QRU4gcmVxdWVzdAorICoKKyAqIEZPUEVOX0RJUkVDVF9JTzogYnlwYXNzIHBhZ2UgY2FjaGUgZm9yIHRoaXMgb3BlbiBmaWxlCisgKiBGT1BFTl9LRUVQX0NBQ0hFOiBkb24ndCBpbnZhbGlkYXRlIHRoZSBkYXRhIGNhY2hlIG9uIG9wZW4KKyAqIEZPUEVOX05PTlNFRUtBQkxFOiB0aGUgZmlsZSBpcyBub3Qgc2Vla2FibGUKKyAqLworI2RlZmluZSBGT1BFTl9ESVJFQ1RfSU8JCSgxIDw8IDApCisjZGVmaW5lIEZPUEVOX0tFRVBfQ0FDSEUJKDEgPDwgMSkKKyNkZWZpbmUgRk9QRU5fTk9OU0VFS0FCTEUJKDEgPDwgMikKKworLyoqCisgKiBJTklUIHJlcXVlc3QvcmVwbHkgZmxhZ3MKKyAqCisgKiBGVVNFX0VYUE9SVF9TVVBQT1JUOiBmaWxlc3lzdGVtIGhhbmRsZXMgbG9va3VwcyBvZiAiLiIgYW5kICIuLiIKKyAqIEZVU0VfRE9OVF9NQVNLOiBkb24ndCBhcHBseSB1bWFzayB0byBmaWxlIG1vZGUgb24gY3JlYXRlIG9wZXJhdGlvbnMKKyAqLworI2RlZmluZSBGVVNFX0FTWU5DX1JFQUQJCSgxIDw8IDApCisjZGVmaW5lIEZVU0VfUE9TSVhfTE9DS1MJKDEgPDwgMSkKKyNkZWZpbmUgRlVTRV9GSUxFX09QUwkJKDEgPDwgMikKKyNkZWZpbmUgRlVTRV9BVE9NSUNfT19UUlVOQwkoMSA8PCAzKQorI2RlZmluZSBGVVNFX0VYUE9SVF9TVVBQT1JUCSgxIDw8IDQpCisjZGVmaW5lIEZVU0VfQklHX1dSSVRFUwkJKDEgPDwgNSkKKyNkZWZpbmUgRlVTRV9ET05UX01BU0sJCSgxIDw8IDYpCisKKy8qKgorICogQ1VTRSBJTklUIHJlcXVlc3QvcmVwbHkgZmxhZ3MKKyAqCisgKiBDVVNFX1VOUkVTVFJJQ1RFRF9JT0NUTDogIHVzZSB1bnJlc3RyaWN0ZWQgaW9jdGwKKyAqLworI2RlZmluZSBDVVNFX1VOUkVTVFJJQ1RFRF9JT0NUTAkoMSA8PCAwKQorCisvKioKKyAqIFJlbGVhc2UgZmxhZ3MKKyAqLworI2RlZmluZSBGVVNFX1JFTEVBU0VfRkxVU0gJKDEgPDwgMCkKKworLyoqCisgKiBHZXRhdHRyIGZsYWdzCisgKi8KKyNkZWZpbmUgRlVTRV9HRVRBVFRSX0ZICQkoMSA8PCAwKQorCisvKioKKyAqIExvY2sgZmxhZ3MKKyAqLworI2RlZmluZSBGVVNFX0xLX0ZMT0NLCQkoMSA8PCAwKQorCisvKioKKyAqIFdSSVRFIGZsYWdzCisgKgorICogRlVTRV9XUklURV9DQUNIRTogZGVsYXllZCB3cml0ZSBmcm9tIHBhZ2UgY2FjaGUsIGZpbGUgaGFuZGxlIGlzIGd1ZXNzZWQKKyAqIEZVU0VfV1JJVEVfTE9DS09XTkVSOiBsb2NrX293bmVyIGZpZWxkIGlzIHZhbGlkCisgKi8KKyNkZWZpbmUgRlVTRV9XUklURV9DQUNIRQkoMSA8PCAwKQorI2RlZmluZSBGVVNFX1dSSVRFX0xPQ0tPV05FUgkoMSA8PCAxKQorCisvKioKKyAqIFJlYWQgZmxhZ3MKKyAqLworI2RlZmluZSBGVVNFX1JFQURfTE9DS09XTkVSCSgxIDw8IDEpCisKKy8qKgorICogSW9jdGwgZmxhZ3MKKyAqCisgKiBGVVNFX0lPQ1RMX0NPTVBBVDogMzJiaXQgY29tcGF0IGlvY3RsIG9uIDY0Yml0IG1hY2hpbmUKKyAqIEZVU0VfSU9DVExfVU5SRVNUUklDVEVEOiBub3QgcmVzdHJpY3RlZCB0byB3ZWxsLWZvcm1lZCBpb2N0bHMsIHJldHJ5IGFsbG93ZWQKKyAqIEZVU0VfSU9DVExfUkVUUlk6IHJldHJ5IHdpdGggbmV3IGlvdmVjcworICoKKyAqIEZVU0VfSU9DVExfTUFYX0lPVjogbWF4aW11bSBvZiBpbl9pb3ZlY3MgKyBvdXRfaW92ZWNzCisgKi8KKyNkZWZpbmUgRlVTRV9JT0NUTF9DT01QQVQJKDEgPDwgMCkKKyNkZWZpbmUgRlVTRV9JT0NUTF9VTlJFU1RSSUNURUQJKDEgPDwgMSkKKyNkZWZpbmUgRlVTRV9JT0NUTF9SRVRSWQkoMSA8PCAyKQorCisjZGVmaW5lIEZVU0VfSU9DVExfTUFYX0lPVgkyNTYKKworLyoqCisgKiBQb2xsIGZsYWdzCisgKgorICogRlVTRV9QT0xMX1NDSEVEVUxFX05PVElGWTogcmVxdWVzdCBwb2xsIG5vdGlmeQorICovCisjZGVmaW5lIEZVU0VfUE9MTF9TQ0hFRFVMRV9OT1RJRlkgKDEgPDwgMCkKKworZW51bSBmdXNlX29wY29kZSB7CisJRlVTRV9MT09LVVAJICAgPSAxLAorCUZVU0VfRk9SR0VUCSAgID0gMiwgIC8qIG5vIHJlcGx5ICovCisJRlVTRV9HRVRBVFRSCSAgID0gMywKKwlGVVNFX1NFVEFUVFIJICAgPSA0LAorCUZVU0VfUkVBRExJTksJICAgPSA1LAorCUZVU0VfU1lNTElOSwkgICA9IDYsCisJRlVTRV9NS05PRAkgICA9IDgsCisJRlVTRV9NS0RJUgkgICA9IDksCisJRlVTRV9VTkxJTksJICAgPSAxMCwKKwlGVVNFX1JNRElSCSAgID0gMTEsCisJRlVTRV9SRU5BTUUJICAgPSAxMiwKKwlGVVNFX0xJTksJICAgPSAxMywKKwlGVVNFX09QRU4JICAgPSAxNCwKKwlGVVNFX1JFQUQJICAgPSAxNSwKKwlGVVNFX1dSSVRFCSAgID0gMTYsCisJRlVTRV9TVEFURlMJICAgPSAxNywKKwlGVVNFX1JFTEVBU0UgICAgICAgPSAxOCwKKwlGVVNFX0ZTWU5DICAgICAgICAgPSAyMCwKKwlGVVNFX1NFVFhBVFRSICAgICAgPSAyMSwKKwlGVVNFX0dFVFhBVFRSICAgICAgPSAyMiwKKwlGVVNFX0xJU1RYQVRUUiAgICAgPSAyMywKKwlGVVNFX1JFTU9WRVhBVFRSICAgPSAyNCwKKwlGVVNFX0ZMVVNIICAgICAgICAgPSAyNSwKKwlGVVNFX0lOSVQgICAgICAgICAgPSAyNiwKKwlGVVNFX09QRU5ESVIgICAgICAgPSAyNywKKwlGVVNFX1JFQURESVIgICAgICAgPSAyOCwKKwlGVVNFX1JFTEVBU0VESVIgICAgPSAyOSwKKwlGVVNFX0ZTWU5DRElSICAgICAgPSAzMCwKKwlGVVNFX0dFVExLICAgICAgICAgPSAzMSwKKwlGVVNFX1NFVExLICAgICAgICAgPSAzMiwKKwlGVVNFX1NFVExLVyAgICAgICAgPSAzMywKKwlGVVNFX0FDQ0VTUyAgICAgICAgPSAzNCwKKwlGVVNFX0NSRUFURSAgICAgICAgPSAzNSwKKwlGVVNFX0lOVEVSUlVQVCAgICAgPSAzNiwKKwlGVVNFX0JNQVAgICAgICAgICAgPSAzNywKKwlGVVNFX0RFU1RST1kgICAgICAgPSAzOCwKKwlGVVNFX0lPQ1RMICAgICAgICAgPSAzOSwKKwlGVVNFX1BPTEwgICAgICAgICAgPSA0MCwKKwlGVVNFX05PVElGWV9SRVBMWSAgPSA0MSwKKworCS8qIENVU0Ugc3BlY2lmaWMgb3BlcmF0aW9ucyAqLworCUNVU0VfSU5JVCAgICAgICAgICA9IDQwOTYsCit9OworCitlbnVtIGZ1c2Vfbm90aWZ5X2NvZGUgeworCUZVU0VfTk9USUZZX1BPTEwgICA9IDEsCisJRlVTRV9OT1RJRllfSU5WQUxfSU5PREUgPSAyLAorCUZVU0VfTk9USUZZX0lOVkFMX0VOVFJZID0gMywKKwlGVVNFX05PVElGWV9TVE9SRSA9IDQsCisJRlVTRV9OT1RJRllfUkVUUklFVkUgPSA1LAorCUZVU0VfTk9USUZZX0NPREVfTUFYLAorfTsKKworLyogVGhlIHJlYWQgYnVmZmVyIGlzIHJlcXVpcmVkIHRvIGJlIGF0IGxlYXN0IDhrLCBidXQgbWF5IGJlIG11Y2ggbGFyZ2VyICovCisjZGVmaW5lIEZVU0VfTUlOX1JFQURfQlVGRkVSIDgxOTIKKworI2RlZmluZSBGVVNFX0NPTVBBVF9FTlRSWV9PVVRfU0laRSAxMjAKKworc3RydWN0IGZ1c2VfZW50cnlfb3V0IHsKKwlfX3U2NAlub2RlaWQ7CQkvKiBJbm9kZSBJRCAqLworCV9fdTY0CWdlbmVyYXRpb247CS8qIElub2RlIGdlbmVyYXRpb246IG5vZGVpZDpnZW4gbXVzdAorCQkJCSAgIGJlIHVuaXF1ZSBmb3IgdGhlIGZzJ3MgbGlmZXRpbWUgKi8KKwlfX3U2NAllbnRyeV92YWxpZDsJLyogQ2FjaGUgdGltZW91dCBmb3IgdGhlIG5hbWUgKi8KKwlfX3U2NAlhdHRyX3ZhbGlkOwkvKiBDYWNoZSB0aW1lb3V0IGZvciB0aGUgYXR0cmlidXRlcyAqLworCV9fdTMyCWVudHJ5X3ZhbGlkX25zZWM7CisJX191MzIJYXR0cl92YWxpZF9uc2VjOworCXN0cnVjdCBmdXNlX2F0dHIgYXR0cjsKK307CisKK3N0cnVjdCBmdXNlX2ZvcmdldF9pbiB7CisJX191NjQJbmxvb2t1cDsKK307CisKK3N0cnVjdCBmdXNlX2dldGF0dHJfaW4geworCV9fdTMyCWdldGF0dHJfZmxhZ3M7CisJX191MzIJZHVtbXk7CisJX191NjQJZmg7Cit9OworCisjZGVmaW5lIEZVU0VfQ09NUEFUX0FUVFJfT1VUX1NJWkUgOTYKKworc3RydWN0IGZ1c2VfYXR0cl9vdXQgeworCV9fdTY0CWF0dHJfdmFsaWQ7CS8qIENhY2hlIHRpbWVvdXQgZm9yIHRoZSBhdHRyaWJ1dGVzICovCisJX191MzIJYXR0cl92YWxpZF9uc2VjOworCV9fdTMyCWR1bW15OworCXN0cnVjdCBmdXNlX2F0dHIgYXR0cjsKK307CisKKyNkZWZpbmUgRlVTRV9DT01QQVRfTUtOT0RfSU5fU0laRSA4CisKK3N0cnVjdCBmdXNlX21rbm9kX2luIHsKKwlfX3UzMgltb2RlOworCV9fdTMyCXJkZXY7CisJX191MzIJdW1hc2s7CisJX191MzIJcGFkZGluZzsKK307CisKK3N0cnVjdCBmdXNlX21rZGlyX2luIHsKKwlfX3UzMgltb2RlOworCV9fdTMyCXVtYXNrOworfTsKKworc3RydWN0IGZ1c2VfcmVuYW1lX2luIHsKKwlfX3U2NAluZXdkaXI7Cit9OworCitzdHJ1Y3QgZnVzZV9saW5rX2luIHsKKwlfX3U2NAlvbGRub2RlaWQ7Cit9OworCitzdHJ1Y3QgZnVzZV9zZXRhdHRyX2luIHsKKwlfX3UzMgl2YWxpZDsKKwlfX3UzMglwYWRkaW5nOworCV9fdTY0CWZoOworCV9fdTY0CXNpemU7CisJX191NjQJbG9ja19vd25lcjsKKwlfX3U2NAlhdGltZTsKKwlfX3U2NAltdGltZTsKKwlfX3U2NAl1bnVzZWQyOworCV9fdTMyCWF0aW1lbnNlYzsKKwlfX3UzMgltdGltZW5zZWM7CisJX191MzIJdW51c2VkMzsKKwlfX3UzMgltb2RlOworCV9fdTMyCXVudXNlZDQ7CisJX191MzIJdWlkOworCV9fdTMyCWdpZDsKKwlfX3UzMgl1bnVzZWQ1OworfTsKKworc3RydWN0IGZ1c2Vfb3Blbl9pbiB7CisJX191MzIJZmxhZ3M7CisJX191MzIJdW51c2VkOworfTsKKworc3RydWN0IGZ1c2VfY3JlYXRlX2luIHsKKwlfX3UzMglmbGFnczsKKwlfX3UzMgltb2RlOworCV9fdTMyCXVtYXNrOworCV9fdTMyCXBhZGRpbmc7Cit9OworCitzdHJ1Y3QgZnVzZV9vcGVuX291dCB7CisJX191NjQJZmg7CisJX191MzIJb3Blbl9mbGFnczsKKwlfX3UzMglwYWRkaW5nOworfTsKKworc3RydWN0IGZ1c2VfcmVsZWFzZV9pbiB7CisJX191NjQJZmg7CisJX191MzIJZmxhZ3M7CisJX191MzIJcmVsZWFzZV9mbGFnczsKKwlfX3U2NAlsb2NrX293bmVyOworfTsKKworc3RydWN0IGZ1c2VfZmx1c2hfaW4geworCV9fdTY0CWZoOworCV9fdTMyCXVudXNlZDsKKwlfX3UzMglwYWRkaW5nOworCV9fdTY0CWxvY2tfb3duZXI7Cit9OworCitzdHJ1Y3QgZnVzZV9yZWFkX2luIHsKKwlfX3U2NAlmaDsKKwlfX3U2NAlvZmZzZXQ7CisJX191MzIJc2l6ZTsKKwlfX3UzMglyZWFkX2ZsYWdzOworCV9fdTY0CWxvY2tfb3duZXI7CisJX191MzIJZmxhZ3M7CisJX191MzIJcGFkZGluZzsKK307CisKKyNkZWZpbmUgRlVTRV9DT01QQVRfV1JJVEVfSU5fU0laRSAyNAorCitzdHJ1Y3QgZnVzZV93cml0ZV9pbiB7CisJX191NjQJZmg7CisJX191NjQJb2Zmc2V0OworCV9fdTMyCXNpemU7CisJX191MzIJd3JpdGVfZmxhZ3M7CisJX191NjQJbG9ja19vd25lcjsKKwlfX3UzMglmbGFnczsKKwlfX3UzMglwYWRkaW5nOworfTsKKworc3RydWN0IGZ1c2Vfd3JpdGVfb3V0IHsKKwlfX3UzMglzaXplOworCV9fdTMyCXBhZGRpbmc7Cit9OworCisjZGVmaW5lIEZVU0VfQ09NUEFUX1NUQVRGU19TSVpFIDQ4CisKK3N0cnVjdCBmdXNlX3N0YXRmc19vdXQgeworCXN0cnVjdCBmdXNlX2tzdGF0ZnMgc3Q7Cit9OworCitzdHJ1Y3QgZnVzZV9mc3luY19pbiB7CisJX191NjQJZmg7CisJX191MzIJZnN5bmNfZmxhZ3M7CisJX191MzIJcGFkZGluZzsKK307CisKK3N0cnVjdCBmdXNlX3NldHhhdHRyX2luIHsKKwlfX3UzMglzaXplOworCV9fdTMyCWZsYWdzOworfTsKKworc3RydWN0IGZ1c2VfZ2V0eGF0dHJfaW4geworCV9fdTMyCXNpemU7CisJX191MzIJcGFkZGluZzsKK307CisKK3N0cnVjdCBmdXNlX2dldHhhdHRyX291dCB7CisJX191MzIJc2l6ZTsKKwlfX3UzMglwYWRkaW5nOworfTsKKworc3RydWN0IGZ1c2VfbGtfaW4geworCV9fdTY0CWZoOworCV9fdTY0CW93bmVyOworCXN0cnVjdCBmdXNlX2ZpbGVfbG9jayBsazsKKwlfX3UzMglsa19mbGFnczsKKwlfX3UzMglwYWRkaW5nOworfTsKKworc3RydWN0IGZ1c2VfbGtfb3V0IHsKKwlzdHJ1Y3QgZnVzZV9maWxlX2xvY2sgbGs7Cit9OworCitzdHJ1Y3QgZnVzZV9hY2Nlc3NfaW4geworCV9fdTMyCW1hc2s7CisJX191MzIJcGFkZGluZzsKK307CisKK3N0cnVjdCBmdXNlX2luaXRfaW4geworCV9fdTMyCW1ham9yOworCV9fdTMyCW1pbm9yOworCV9fdTMyCW1heF9yZWFkYWhlYWQ7CisJX191MzIJZmxhZ3M7Cit9OworCitzdHJ1Y3QgZnVzZV9pbml0X291dCB7CisJX191MzIJbWFqb3I7CisJX191MzIJbWlub3I7CisJX191MzIJbWF4X3JlYWRhaGVhZDsKKwlfX3UzMglmbGFnczsKKwlfX3UxNiAgIG1heF9iYWNrZ3JvdW5kOworCV9fdTE2ICAgY29uZ2VzdGlvbl90aHJlc2hvbGQ7CisJX191MzIJbWF4X3dyaXRlOworfTsKKworI2RlZmluZSBDVVNFX0lOSVRfSU5GT19NQVggNDA5NgorCitzdHJ1Y3QgY3VzZV9pbml0X2luIHsKKwlfX3UzMgltYWpvcjsKKwlfX3UzMgltaW5vcjsKKwlfX3UzMgl1bnVzZWQ7CisJX191MzIJZmxhZ3M7Cit9OworCitzdHJ1Y3QgY3VzZV9pbml0X291dCB7CisJX191MzIJbWFqb3I7CisJX191MzIJbWlub3I7CisJX191MzIJdW51c2VkOworCV9fdTMyCWZsYWdzOworCV9fdTMyCW1heF9yZWFkOworCV9fdTMyCW1heF93cml0ZTsKKwlfX3UzMglkZXZfbWFqb3I7CQkvKiBjaGFyZGV2IG1ham9yICovCisJX191MzIJZGV2X21pbm9yOwkJLyogY2hhcmRldiBtaW5vciAqLworCV9fdTMyCXNwYXJlWzEwXTsKK307CisKK3N0cnVjdCBmdXNlX2ludGVycnVwdF9pbiB7CisJX191NjQJdW5pcXVlOworfTsKKworc3RydWN0IGZ1c2VfYm1hcF9pbiB7CisJX191NjQJYmxvY2s7CisJX191MzIJYmxvY2tzaXplOworCV9fdTMyCXBhZGRpbmc7Cit9OworCitzdHJ1Y3QgZnVzZV9ibWFwX291dCB7CisJX191NjQJYmxvY2s7Cit9OworCitzdHJ1Y3QgZnVzZV9pb2N0bF9pbiB7CisJX191NjQJZmg7CisJX191MzIJZmxhZ3M7CisJX191MzIJY21kOworCV9fdTY0CWFyZzsKKwlfX3UzMglpbl9zaXplOworCV9fdTMyCW91dF9zaXplOworfTsKKworc3RydWN0IGZ1c2VfaW9jdGxfb3V0IHsKKwlfX3MzMglyZXN1bHQ7CisJX191MzIJZmxhZ3M7CisJX191MzIJaW5faW92czsKKwlfX3UzMglvdXRfaW92czsKK307CisKK3N0cnVjdCBmdXNlX3BvbGxfaW4geworCV9fdTY0CWZoOworCV9fdTY0CWtoOworCV9fdTMyCWZsYWdzOworCV9fdTMyICAgcGFkZGluZzsKK307CisKK3N0cnVjdCBmdXNlX3BvbGxfb3V0IHsKKwlfX3UzMglyZXZlbnRzOworCV9fdTMyCXBhZGRpbmc7Cit9OworCitzdHJ1Y3QgZnVzZV9ub3RpZnlfcG9sbF93YWtldXBfb3V0IHsKKwlfX3U2NAlraDsKK307CisKK3N0cnVjdCBmdXNlX2luX2hlYWRlciB7CisJX191MzIJbGVuOworCV9fdTMyCW9wY29kZTsKKwlfX3U2NAl1bmlxdWU7CisJX191NjQJbm9kZWlkOworCV9fdTMyCXVpZDsKKwlfX3UzMglnaWQ7CisJX191MzIJcGlkOworCV9fdTMyCXBhZGRpbmc7Cit9OworCitzdHJ1Y3QgZnVzZV9vdXRfaGVhZGVyIHsKKwlfX3UzMglsZW47CisJX19zMzIJZXJyb3I7CisJX191NjQJdW5pcXVlOworfTsKKworc3RydWN0IGZ1c2VfZGlyZW50IHsKKwlfX3U2NAlpbm87CisJX191NjQJb2ZmOworCV9fdTMyCW5hbWVsZW47CisJX191MzIJdHlwZTsKKwljaGFyIG5hbWVbMF07Cit9OworCisjZGVmaW5lIEZVU0VfTkFNRV9PRkZTRVQgb2Zmc2V0b2Yoc3RydWN0IGZ1c2VfZGlyZW50LCBuYW1lKQorI2RlZmluZSBGVVNFX0RJUkVOVF9BTElHTih4KSAoKCh4KSArIHNpemVvZihfX3U2NCkgLSAxKSAmIH4oc2l6ZW9mKF9fdTY0KSAtIDEpKQorI2RlZmluZSBGVVNFX0RJUkVOVF9TSVpFKGQpIFwKKwlGVVNFX0RJUkVOVF9BTElHTihGVVNFX05BTUVfT0ZGU0VUICsgKGQpLT5uYW1lbGVuKQorCitzdHJ1Y3QgZnVzZV9ub3RpZnlfaW52YWxfaW5vZGVfb3V0IHsKKwlfX3U2NAlpbm87CisJX19zNjQJb2ZmOworCV9fczY0CWxlbjsKK307CisKK3N0cnVjdCBmdXNlX25vdGlmeV9pbnZhbF9lbnRyeV9vdXQgeworCV9fdTY0CXBhcmVudDsKKwlfX3UzMgluYW1lbGVuOworCV9fdTMyCXBhZGRpbmc7Cit9OworCitzdHJ1Y3QgZnVzZV9ub3RpZnlfc3RvcmVfb3V0IHsKKwlfX3U2NAlub2RlaWQ7CisJX191NjQJb2Zmc2V0OworCV9fdTMyCXNpemU7CisJX191MzIJcGFkZGluZzsKK307CisKK3N0cnVjdCBmdXNlX25vdGlmeV9yZXRyaWV2ZV9vdXQgeworCV9fdTY0CW5vdGlmeV91bmlxdWU7CisJX191NjQJbm9kZWlkOworCV9fdTY0CW9mZnNldDsKKwlfX3UzMglzaXplOworCV9fdTMyCXBhZGRpbmc7Cit9OworCisvKiBNYXRjaGVzIHRoZSBzaXplIG9mIGZ1c2Vfd3JpdGVfaW4gKi8KK3N0cnVjdCBmdXNlX25vdGlmeV9yZXRyaWV2ZV9pbiB7CisJX191NjQJZHVtbXkxOworCV9fdTY0CW9mZnNldDsKKwlfX3UzMglzaXplOworCV9fdTMyCWR1bW15MjsKKwlfX3U2NAlkdW1teTM7CisJX191NjQJZHVtbXk0OworfTsKKworI2VuZGlmIC8qIF9MSU5VWF9GVVNFX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9mdXRleC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2Z1dGV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMxMWU5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9mdXRleC5oCkBAIC0wLDAgKzEsMTUyIEBACisjaWZuZGVmIF9MSU5VWF9GVVRFWF9ICisjZGVmaW5lIF9MSU5VWF9GVVRFWF9ICisKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIFNlY29uZCBhcmd1bWVudCB0byBmdXRleCBzeXNjYWxsICovCisKKworI2RlZmluZSBGVVRFWF9XQUlUCQkwCisjZGVmaW5lIEZVVEVYX1dBS0UJCTEKKyNkZWZpbmUgRlVURVhfRkQJCTIKKyNkZWZpbmUgRlVURVhfUkVRVUVVRQkJMworI2RlZmluZSBGVVRFWF9DTVBfUkVRVUVVRQk0CisjZGVmaW5lIEZVVEVYX1dBS0VfT1AJCTUKKyNkZWZpbmUgRlVURVhfTE9DS19QSQkJNgorI2RlZmluZSBGVVRFWF9VTkxPQ0tfUEkJCTcKKyNkZWZpbmUgRlVURVhfVFJZTE9DS19QSQk4CisjZGVmaW5lIEZVVEVYX1dBSVRfQklUU0VUCTkKKyNkZWZpbmUgRlVURVhfV0FLRV9CSVRTRVQJMTAKKyNkZWZpbmUgRlVURVhfV0FJVF9SRVFVRVVFX1BJCTExCisjZGVmaW5lIEZVVEVYX0NNUF9SRVFVRVVFX1BJCTEyCisKKyNkZWZpbmUgRlVURVhfUFJJVkFURV9GTEFHCTEyOAorI2RlZmluZSBGVVRFWF9DTE9DS19SRUFMVElNRQkyNTYKKyNkZWZpbmUgRlVURVhfQ01EX01BU0sJCX4oRlVURVhfUFJJVkFURV9GTEFHIHwgRlVURVhfQ0xPQ0tfUkVBTFRJTUUpCisKKyNkZWZpbmUgRlVURVhfV0FJVF9QUklWQVRFCShGVVRFWF9XQUlUIHwgRlVURVhfUFJJVkFURV9GTEFHKQorI2RlZmluZSBGVVRFWF9XQUtFX1BSSVZBVEUJKEZVVEVYX1dBS0UgfCBGVVRFWF9QUklWQVRFX0ZMQUcpCisjZGVmaW5lIEZVVEVYX1JFUVVFVUVfUFJJVkFURQkoRlVURVhfUkVRVUVVRSB8IEZVVEVYX1BSSVZBVEVfRkxBRykKKyNkZWZpbmUgRlVURVhfQ01QX1JFUVVFVUVfUFJJVkFURSAoRlVURVhfQ01QX1JFUVVFVUUgfCBGVVRFWF9QUklWQVRFX0ZMQUcpCisjZGVmaW5lIEZVVEVYX1dBS0VfT1BfUFJJVkFURQkoRlVURVhfV0FLRV9PUCB8IEZVVEVYX1BSSVZBVEVfRkxBRykKKyNkZWZpbmUgRlVURVhfTE9DS19QSV9QUklWQVRFCShGVVRFWF9MT0NLX1BJIHwgRlVURVhfUFJJVkFURV9GTEFHKQorI2RlZmluZSBGVVRFWF9VTkxPQ0tfUElfUFJJVkFURQkoRlVURVhfVU5MT0NLX1BJIHwgRlVURVhfUFJJVkFURV9GTEFHKQorI2RlZmluZSBGVVRFWF9UUllMT0NLX1BJX1BSSVZBVEUgKEZVVEVYX1RSWUxPQ0tfUEkgfCBGVVRFWF9QUklWQVRFX0ZMQUcpCisjZGVmaW5lIEZVVEVYX1dBSVRfQklUU0VUX1BSSVZBVEUJKEZVVEVYX1dBSVRfQklUU0VUIHwgRlVURVhfUFJJVkFURV9GTEFHKQorI2RlZmluZSBGVVRFWF9XQUtFX0JJVFNFVF9QUklWQVRFCShGVVRFWF9XQUtFX0JJVFNFVCB8IEZVVEVYX1BSSVZBVEVfRkxBRykKKyNkZWZpbmUgRlVURVhfV0FJVF9SRVFVRVVFX1BJX1BSSVZBVEUJKEZVVEVYX1dBSVRfUkVRVUVVRV9QSSB8IFwKKwkJCQkJIEZVVEVYX1BSSVZBVEVfRkxBRykKKyNkZWZpbmUgRlVURVhfQ01QX1JFUVVFVUVfUElfUFJJVkFURQkoRlVURVhfQ01QX1JFUVVFVUVfUEkgfCBcCisJCQkJCSBGVVRFWF9QUklWQVRFX0ZMQUcpCisKKy8qCisgKiBTdXBwb3J0IGZvciByb2J1c3QgZnV0ZXhlczogdGhlIGtlcm5lbCBjbGVhbnMgdXAgaGVsZCBmdXRleGVzIGF0CisgKiB0aHJlYWQgZXhpdCB0aW1lLgorICovCisKKy8qCisgKiBQZXItbG9jayBsaXN0IGVudHJ5IC0gZW1iZWRkZWQgaW4gdXNlci1zcGFjZSBsb2Nrcywgc29tZXdoZXJlIGNsb3NlCisgKiB0byB0aGUgZnV0ZXggZmllbGQuIChOb3RlOiB1c2VyLXNwYWNlIHVzZXMgYSBkb3VibGUtbGlua2VkIGxpc3QgdG8KKyAqIGFjaGlldmUgTygxKSBsaXN0IGFkZCBhbmQgcmVtb3ZlLCBidXQgdGhlIGtlcm5lbCBvbmx5IG5lZWRzIHRvIGtub3cKKyAqIGFib3V0IHRoZSBmb3J3YXJkIGxpbmspCisgKgorICogTk9URTogdGhpcyBzdHJ1Y3R1cmUgaXMgcGFydCBvZiB0aGUgc3lzY2FsbCBBQkksIGFuZCBtdXN0IG5vdCBiZQorICogY2hhbmdlZC4KKyAqLworc3RydWN0IHJvYnVzdF9saXN0IHsKKwlzdHJ1Y3Qgcm9idXN0X2xpc3QgKm5leHQ7Cit9OworCisvKgorICogUGVyLXRocmVhZCBsaXN0IGhlYWQ6CisgKgorICogTk9URTogdGhpcyBzdHJ1Y3R1cmUgaXMgcGFydCBvZiB0aGUgc3lzY2FsbCBBQkksIGFuZCBtdXN0IG9ubHkgYmUKKyAqIGNoYW5nZWQgaWYgdGhlIGNoYW5nZSBpcyBmaXJzdCBjb21tdW5pY2F0ZWQgd2l0aCB0aGUgZ2xpYmMgZm9sa3MuCisgKiAoV2hlbiBhbiBpbmNvbXBhdGlibGUgY2hhbmdlIGlzIGRvbmUsIHdlJ2xsIGluY3JlYXNlIHRoZSBzdHJ1Y3R1cmUKKyAqICBzaXplLCB3aGljaCBnbGliYyB3aWxsIGRldGVjdCkKKyAqLworc3RydWN0IHJvYnVzdF9saXN0X2hlYWQgeworCS8qCisJICogVGhlIGhlYWQgb2YgdGhlIGxpc3QuIFBvaW50cyBiYWNrIHRvIGl0c2VsZiBpZiBlbXB0eToKKwkgKi8KKwlzdHJ1Y3Qgcm9idXN0X2xpc3QgbGlzdDsKKworCS8qCisJICogVGhpcyByZWxhdGl2ZSBvZmZzZXQgaXMgc2V0IGJ5IHVzZXItc3BhY2UsIGl0IGdpdmVzIHRoZSBrZXJuZWwKKwkgKiB0aGUgcmVsYXRpdmUgcG9zaXRpb24gb2YgdGhlIGZ1dGV4IGZpZWxkIHRvIGV4YW1pbmUuIFRoaXMgd2F5CisJICogd2Uga2VlcCB1c2Vyc3BhY2UgZmxleGlibGUsIHRvIGZyZWVseSBzaGFwZSBpdHMgZGF0YS1zdHJ1Y3R1cmUsCisJICogd2l0aG91dCBoYXJkY29kaW5nIGFueSBwYXJ0aWN1bGFyIG9mZnNldCBpbnRvIHRoZSBrZXJuZWw6CisJICovCisJbG9uZyBmdXRleF9vZmZzZXQ7CisKKwkvKgorCSAqIFRoZSBkZWF0aCBvZiB0aGUgdGhyZWFkIG1heSByYWNlIHdpdGggdXNlcnNwYWNlIHNldHRpbmcKKwkgKiB1cCBhIGxvY2sncyBsaW5rcy4gU28gdG8gaGFuZGxlIHRoaXMgcmFjZSwgdXNlcnNwYWNlIGZpcnN0CisJICogc2V0cyB0aGlzIGZpZWxkIHRvIHRoZSBhZGRyZXNzIG9mIHRoZSB0by1iZS10YWtlbiBsb2NrLAorCSAqIHRoZW4gZG9lcyB0aGUgbG9jayBhY3F1aXJlLCBhbmQgdGhlbiBhZGRzIGl0c2VsZiB0byB0aGUKKwkgKiBsaXN0LCBhbmQgdGhlbiBjbGVhcnMgdGhpcyBmaWVsZC4gSGVuY2UgdGhlIGtlcm5lbCB3aWxsCisJICogYWx3YXlzIGhhdmUgZnVsbCBrbm93bGVkZ2Ugb2YgYWxsIGxvY2tzIHRoYXQgdGhlIHRocmVhZAorCSAqIF9taWdodF8gaGF2ZSB0YWtlbi4gV2UgY2hlY2sgdGhlIG93bmVyIFRJRCBpbiBhbnkgY2FzZSwKKwkgKiBzbyBvbmx5IHRydWx5IG93bmVkIGxvY2tzIHdpbGwgYmUgaGFuZGxlZC4KKwkgKi8KKwlzdHJ1Y3Qgcm9idXN0X2xpc3QgKmxpc3Rfb3BfcGVuZGluZzsKK307CisKKy8qCisgKiBBcmUgdGhlcmUgYW55IHdhaXRlcnMgZm9yIHRoaXMgcm9idXN0IGZ1dGV4OgorICovCisjZGVmaW5lIEZVVEVYX1dBSVRFUlMJCTB4ODAwMDAwMDAKKworLyoKKyAqIFRoZSBrZXJuZWwgc2lnbmFscyB2aWEgdGhpcyBiaXQgdGhhdCBhIHRocmVhZCBob2xkaW5nIGEgZnV0ZXgKKyAqIGhhcyBleGl0ZWQgd2l0aG91dCB1bmxvY2tpbmcgdGhlIGZ1dGV4LiBUaGUga2VybmVsIGFsc28gZG9lcworICogYSBGVVRFWF9XQUtFIG9uIHN1Y2ggZnV0ZXhlcywgYWZ0ZXIgc2V0dGluZyB0aGUgYml0LCB0byB3YWtlCisgKiB1cCBhbnkgcG9zc2libGUgd2FpdGVyczoKKyAqLworI2RlZmluZSBGVVRFWF9PV05FUl9ESUVECTB4NDAwMDAwMDAKKworLyoKKyAqIFRoZSByZXN0IG9mIHRoZSByb2J1c3QtZnV0ZXggZmllbGQgaXMgZm9yIHRoZSBUSUQ6CisgKi8KKyNkZWZpbmUgRlVURVhfVElEX01BU0sJCTB4M2ZmZmZmZmYKKworLyoKKyAqIFRoaXMgbGltaXQgcHJvdGVjdHMgYWdhaW5zdCBhIGRlbGliZXJhdGVseSBjaXJjdWxhciBsaXN0LgorICogKE5vdCB3b3J0aCBpbnRyb2R1Y2luZyBhbiBybGltaXQgZm9yIGl0KQorICovCisjZGVmaW5lIFJPQlVTVF9MSVNUX0xJTUlUCTIwNDgKKworLyoKKyAqIGJpdHNldCB3aXRoIGFsbCBiaXRzIHNldCBmb3IgdGhlIEZVVEVYX3h4eF9CSVRTRVQgT1BzIHRvIHJlcXVlc3QgYQorICogbWF0Y2ggb2YgYW55IGJpdC4KKyAqLworI2RlZmluZSBGVVRFWF9CSVRTRVRfTUFUQ0hfQU5ZCTB4ZmZmZmZmZmYKKworCisjZGVmaW5lIEZVVEVYX09QX1NFVAkJMAkvKiAqKGludCAqKVVBRERSMiA9IE9QQVJHOyAqLworI2RlZmluZSBGVVRFWF9PUF9BREQJCTEJLyogKihpbnQgKilVQUREUjIgKz0gT1BBUkc7ICovCisjZGVmaW5lIEZVVEVYX09QX09SCQkyCS8qICooaW50ICopVUFERFIyIHw9IE9QQVJHOyAqLworI2RlZmluZSBGVVRFWF9PUF9BTkROCQkzCS8qICooaW50ICopVUFERFIyICY9IH5PUEFSRzsgKi8KKyNkZWZpbmUgRlVURVhfT1BfWE9SCQk0CS8qICooaW50ICopVUFERFIyIF49IE9QQVJHOyAqLworCisjZGVmaW5lIEZVVEVYX09QX09QQVJHX1NISUZUCTgJLyogVXNlICgxIDw8IE9QQVJHKSBpbnN0ZWFkIG9mIE9QQVJHLiAgKi8KKworI2RlZmluZSBGVVRFWF9PUF9DTVBfRVEJCTAJLyogaWYgKG9sZHZhbCA9PSBDTVBBUkcpIHdha2UgKi8KKyNkZWZpbmUgRlVURVhfT1BfQ01QX05FCQkxCS8qIGlmIChvbGR2YWwgIT0gQ01QQVJHKSB3YWtlICovCisjZGVmaW5lIEZVVEVYX09QX0NNUF9MVAkJMgkvKiBpZiAob2xkdmFsIDwgQ01QQVJHKSB3YWtlICovCisjZGVmaW5lIEZVVEVYX09QX0NNUF9MRQkJMwkvKiBpZiAob2xkdmFsIDw9IENNUEFSRykgd2FrZSAqLworI2RlZmluZSBGVVRFWF9PUF9DTVBfR1QJCTQJLyogaWYgKG9sZHZhbCA+IENNUEFSRykgd2FrZSAqLworI2RlZmluZSBGVVRFWF9PUF9DTVBfR0UJCTUJLyogaWYgKG9sZHZhbCA+PSBDTVBBUkcpIHdha2UgKi8KKworLyogRlVURVhfV0FLRV9PUCB3aWxsIHBlcmZvcm0gYXRvbWljYWxseQorICAgaW50IG9sZHZhbCA9ICooaW50ICopVUFERFIyOworICAgKihpbnQgKilVQUREUjIgPSBvbGR2YWwgT1AgT1BBUkc7CisgICBpZiAob2xkdmFsIENNUCBDTVBBUkcpCisgICAgIHdha2UgVUFERFIyOyAgKi8KKworI2RlZmluZSBGVVRFWF9PUChvcCwgb3BhcmcsIGNtcCwgY21wYXJnKSBcCisgICgoKG9wICYgMHhmKSA8PCAyOCkgfCAoKGNtcCAmIDB4ZikgPDwgMjQpCQlcCisgICB8ICgob3BhcmcgJiAweGZmZikgPDwgMTIpIHwgKGNtcGFyZyAmIDB4ZmZmKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZ2FtZXBvcnQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9nYW1lcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMzNjNGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZ2FtZXBvcnQuaApAQCAtMCwwICsxLDI4IEBACisjaWZuZGVmIF9HQU1FUE9SVF9ICisjZGVmaW5lIF9HQU1FUE9SVF9ICisKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDIgVm9qdGVjaCBQYXZsaWsKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKworI2RlZmluZSBHQU1FUE9SVF9NT0RFX0RJU0FCTEVECQkwCisjZGVmaW5lIEdBTUVQT1JUX01PREVfUkFXCQkxCisjZGVmaW5lIEdBTUVQT1JUX01PREVfQ09PS0VECQkyCisKKyNkZWZpbmUgR0FNRVBPUlRfSURfVkVORE9SX0FOQUxPRwkweDAwMDEKKyNkZWZpbmUgR0FNRVBPUlRfSURfVkVORE9SX01BRENBVFoJMHgwMDAyCisjZGVmaW5lIEdBTUVQT1JUX0lEX1ZFTkRPUl9MT0dJVEVDSAkweDAwMDMKKyNkZWZpbmUgR0FNRVBPUlRfSURfVkVORE9SX0NSRUFUSVZFCTB4MDAwNAorI2RlZmluZSBHQU1FUE9SVF9JRF9WRU5ET1JfR0VOSVVTCTB4MDAwNQorI2RlZmluZSBHQU1FUE9SVF9JRF9WRU5ET1JfSU5URVJBQ1QJMHgwMDA2CisjZGVmaW5lIEdBTUVQT1JUX0lEX1ZFTkRPUl9NSUNST1NPRlQJMHgwMDA3CisjZGVmaW5lIEdBTUVQT1JUX0lEX1ZFTkRPUl9USFJVU1RNQVNURVIJMHgwMDA4CisjZGVmaW5lIEdBTUVQT1JUX0lEX1ZFTkRPUl9HUkFWSVMJMHgwMDA5CisjZGVmaW5lIEdBTUVQT1JUX0lEX1ZFTkRPUl9HVUlMTEVNT1QJMHgwMDBhCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2dlbl9zdGF0cy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2dlbl9zdGF0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MmM4YTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZ2VuX3N0YXRzLmgKQEAgLTAsMCArMSw2NyBAQAorI2lmbmRlZiBfX0xJTlVYX0dFTl9TVEFUU19ICisjZGVmaW5lIF9fTElOVVhfR0VOX1NUQVRTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK2VudW0geworCVRDQV9TVEFUU19VTlNQRUMsCisJVENBX1NUQVRTX0JBU0lDLAorCVRDQV9TVEFUU19SQVRFX0VTVCwKKwlUQ0FfU1RBVFNfUVVFVUUsCisJVENBX1NUQVRTX0FQUCwKKwlfX1RDQV9TVEFUU19NQVgsCit9OworI2RlZmluZSBUQ0FfU1RBVFNfTUFYIChfX1RDQV9TVEFUU19NQVggLSAxKQorCisvKioKKyAqIHN0cnVjdCBnbmV0X3N0YXRzX2Jhc2ljIC0gYnl0ZS9wYWNrZXQgdGhyb3VnaHB1dCBzdGF0aXN0aWNzCisgKiBAYnl0ZXM6IG51bWJlciBvZiBzZWVuIGJ5dGVzCisgKiBAcGFja2V0czogbnVtYmVyIG9mIHNlZW4gcGFja2V0cworICovCitzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpYyB7CisJX191NjQJYnl0ZXM7CisJX191MzIJcGFja2V0czsKK307CitzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpY19wYWNrZWQgeworCV9fdTY0CWJ5dGVzOworCV9fdTMyCXBhY2tldHM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoqCisgKiBzdHJ1Y3QgZ25ldF9zdGF0c19yYXRlX2VzdCAtIHJhdGUgZXN0aW1hdG9yCisgKiBAYnBzOiBjdXJyZW50IGJ5dGUgcmF0ZQorICogQHBwczogY3VycmVudCBwYWNrZXQgcmF0ZQorICovCitzdHJ1Y3QgZ25ldF9zdGF0c19yYXRlX2VzdCB7CisJX191MzIJYnBzOworCV9fdTMyCXBwczsKK307CisKKy8qKgorICogc3RydWN0IGduZXRfc3RhdHNfcXVldWUgLSBxdWV1aW5nIHN0YXRpc3RpY3MKKyAqIEBxbGVuOiBxdWV1ZSBsZW5ndGgKKyAqIEBiYWNrbG9nOiBiYWNrbG9nIHNpemUgb2YgcXVldWUKKyAqIEBkcm9wczogbnVtYmVyIG9mIGRyb3BwZWQgcGFja2V0cworICogQHJlcXVldWVzOiBudW1iZXIgb2YgcmVxdWV1ZXMKKyAqIEBvdmVybGltaXRzOiBudW1iZXIgb2YgZW5xdWV1ZXMgb3ZlciB0aGUgbGltaXQKKyAqLworc3RydWN0IGduZXRfc3RhdHNfcXVldWUgeworCV9fdTMyCXFsZW47CisJX191MzIJYmFja2xvZzsKKwlfX3UzMglkcm9wczsKKwlfX3UzMglyZXF1ZXVlczsKKwlfX3UzMglvdmVybGltaXRzOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZ25ldF9lc3RpbWF0b3IgLSByYXRlIGVzdGltYXRvciBjb25maWd1cmF0aW9uCisgKiBAaW50ZXJ2YWw6IHNhbXBsaW5nIHBlcmlvZAorICogQGV3bWFfbG9nOiB0aGUgbG9nIG9mIG1lYXN1cmVtZW50IHdpbmRvdyB3ZWlnaHQKKyAqLworc3RydWN0IGduZXRfZXN0aW1hdG9yIHsKKwlzaWduZWQgY2hhcglpbnRlcnZhbDsKKwl1bnNpZ25lZCBjaGFyCWV3bWFfbG9nOworfTsKKworCisjZW5kaWYgLyogX19MSU5VWF9HRU5fU1RBVFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2dlbmVyaWNfc2VyaWFsLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvZ2VuZXJpY19zZXJpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjU5NmI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2dlbmVyaWNfc2VyaWFsLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBnZW5lcmljX3NlcmlhbC5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OCBSLkUuV29sZmZAQml0V2l6YXJkLm5sCisgKgorICogIHdyaXR0ZW4gZm9yIHRoZSBTWCBzZXJpYWwgZHJpdmVyLgorICogICAgIENvbnRhaW5zIHRoZSBjb2RlIHRoYXQgc2hvdWxkIGJlIHNoYXJlZCBvdmVyIGFsbCB0aGUgc2VyaWFsIGRyaXZlcnMuCisgKgorICogIFZlcnNpb24gMC4xIC0tIERlY2VtYmVyLCAxOTk4LgorICovCisKKyNpZm5kZWYgR0VORVJJQ19TRVJJQUxfSAorI2RlZmluZSBHRU5FUklDX1NFUklBTF9ICisKKworLyogRmxhZ3MgKi8KKy8qIFdhcm5pbmc6IHNlcmlhbC5oIGRlZmluZXMgc29tZSBBU1lOQ18gZmxhZ3MsIHRoZXkgc2F5IHRoZXkgYXJlICJvbmx5IgorICAgdXNlZCBpbiBzZXJpYWwuYywgYnV0IHRoZXkgYXJlIGFsc28gdXNlZCBpbiBhbGwgb3RoZXIgc2VyaWFsIGRyaXZlcnMuIAorICAgTWFrZSBzdXJlIHRoZXkgZG9uJ3QgY2xhc2ggd2l0aCB0aGVzZSBoZXJlLi4uICovCisjZGVmaW5lIEdTX1RYX0lOVEVOICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBHU19SWF9JTlRFTiAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgR1NfQUNUSVZFICAgICAgICAweDAwMjAwMDAwCisKKworCisjZGVmaW5lIEdTX1RZUEVfTk9STUFMICAgMQorCisjZGVmaW5lIEdTX0RFQlVHX0ZMVVNIICAgMHgwMDAwMDAwMQorI2RlZmluZSBHU19ERUJVR19CVFIgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgR1NfREVCVUdfVEVSTUlPUyAweDAwMDAwMDA0CisjZGVmaW5lIEdTX0RFQlVHX1NUVUZGICAgMHgwMDAwMDAwOAorI2RlZmluZSBHU19ERUJVR19DTE9TRSAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgR1NfREVCVUdfRkxPVyAgICAweDAwMDAwMDIwCisjZGVmaW5lIEdTX0RFQlVHX1dSSVRFICAgMHgwMDAwMDA0MAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9nZW5ldGxpbmsuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9nZW5ldGxpbmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWNlN2JiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2dlbmV0bGluay5oCkBAIC0wLDAgKzEsODQgQEAKKyNpZm5kZWYgX19MSU5VWF9HRU5FUklDX05FVExJTktfSAorI2RlZmluZSBfX0xJTlVYX0dFTkVSSUNfTkVUTElOS19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKworI2RlZmluZSBHRU5MX05BTVNJWgkxNgkvKiBsZW5ndGggb2YgZmFtaWx5IG5hbWUgKi8KKworI2RlZmluZSBHRU5MX01JTl9JRAlOTE1TR19NSU5fVFlQRQorI2RlZmluZSBHRU5MX01BWF9JRAkxMDIzCisKK3N0cnVjdCBnZW5sbXNnaGRyIHsKKwlfX3U4CWNtZDsKKwlfX3U4CXZlcnNpb247CisJX191MTYJcmVzZXJ2ZWQ7Cit9OworCisjZGVmaW5lIEdFTkxfSERSTEVOCU5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgZ2VubG1zZ2hkcikpCisKKyNkZWZpbmUgR0VOTF9BRE1JTl9QRVJNCQkweDAxCisjZGVmaW5lIEdFTkxfQ01EX0NBUF9ETwkJMHgwMgorI2RlZmluZSBHRU5MX0NNRF9DQVBfRFVNUAkweDA0CisjZGVmaW5lIEdFTkxfQ01EX0NBUF9IQVNQT0wJMHgwOAorCisvKgorICogTGlzdCBvZiByZXNlcnZlZCBzdGF0aWMgZ2VuZXJpYyBuZXRsaW5rIGlkZW50aWZpZXJzOgorICovCisjZGVmaW5lIEdFTkxfSURfR0VORVJBVEUJMAorI2RlZmluZSBHRU5MX0lEX0NUUkwJCU5MTVNHX01JTl9UWVBFCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29udHJvbGxlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitlbnVtIHsKKwlDVFJMX0NNRF9VTlNQRUMsCisJQ1RSTF9DTURfTkVXRkFNSUxZLAorCUNUUkxfQ01EX0RFTEZBTUlMWSwKKwlDVFJMX0NNRF9HRVRGQU1JTFksCisJQ1RSTF9DTURfTkVXT1BTLAorCUNUUkxfQ01EX0RFTE9QUywKKwlDVFJMX0NNRF9HRVRPUFMsCisJQ1RSTF9DTURfTkVXTUNBU1RfR1JQLAorCUNUUkxfQ01EX0RFTE1DQVNUX0dSUCwKKwlDVFJMX0NNRF9HRVRNQ0FTVF9HUlAsIC8qIHVudXNlZCAqLworCV9fQ1RSTF9DTURfTUFYLAorfTsKKworI2RlZmluZSBDVFJMX0NNRF9NQVggKF9fQ1RSTF9DTURfTUFYIC0gMSkKKworZW51bSB7CisJQ1RSTF9BVFRSX1VOU1BFQywKKwlDVFJMX0FUVFJfRkFNSUxZX0lELAorCUNUUkxfQVRUUl9GQU1JTFlfTkFNRSwKKwlDVFJMX0FUVFJfVkVSU0lPTiwKKwlDVFJMX0FUVFJfSERSU0laRSwKKwlDVFJMX0FUVFJfTUFYQVRUUiwKKwlDVFJMX0FUVFJfT1BTLAorCUNUUkxfQVRUUl9NQ0FTVF9HUk9VUFMsCisJX19DVFJMX0FUVFJfTUFYLAorfTsKKworI2RlZmluZSBDVFJMX0FUVFJfTUFYIChfX0NUUkxfQVRUUl9NQVggLSAxKQorCitlbnVtIHsKKwlDVFJMX0FUVFJfT1BfVU5TUEVDLAorCUNUUkxfQVRUUl9PUF9JRCwKKwlDVFJMX0FUVFJfT1BfRkxBR1MsCisJX19DVFJMX0FUVFJfT1BfTUFYLAorfTsKKworI2RlZmluZSBDVFJMX0FUVFJfT1BfTUFYIChfX0NUUkxfQVRUUl9PUF9NQVggLSAxKQorCitlbnVtIHsKKwlDVFJMX0FUVFJfTUNBU1RfR1JQX1VOU1BFQywKKwlDVFJMX0FUVFJfTUNBU1RfR1JQX05BTUUsCisJQ1RSTF9BVFRSX01DQVNUX0dSUF9JRCwKKwlfX0NUUkxfQVRUUl9NQ0FTVF9HUlBfTUFYLAorfTsKKworI2RlZmluZSBDVFJMX0FUVFJfTUNBU1RfR1JQX01BWCAoX19DVFJMX0FUVFJfTUNBU1RfR1JQX01BWCAtIDEpCisKKworI2VuZGlmCS8qIF9fTElOVVhfR0VORVJJQ19ORVRMSU5LX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9nZnMyX29uZGlzay5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2dmczJfb25kaXNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgzOTZkOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9nZnMyX29uZGlzay5oCkBAIC0wLDAgKzEsNDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCisgKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYuMi4KKyAqLworCisjaWZuZGVmIF9fR0ZTMl9PTkRJU0tfRE9UX0hfXworI2RlZmluZSBfX0dGUzJfT05ESVNLX0RPVF9IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgR0ZTMl9NQUdJQwkJMHgwMTE2MTk3MAorI2RlZmluZSBHRlMyX0JBU0lDX0JMT0NLCTUxMgorI2RlZmluZSBHRlMyX0JBU0lDX0JMT0NLX1NISUZUCTkKKworLyogTG9jayBudW1iZXJzIG9mIHRoZSBMTV9UWVBFX05PTkRJU0sgdHlwZSAqLworCisjZGVmaW5lIEdGUzJfTU9VTlRfTE9DSwkJMAorI2RlZmluZSBHRlMyX0xJVkVfTE9DSwkJMQorI2RlZmluZSBHRlMyX1RSQU5TX0xPQ0sJCTIKKyNkZWZpbmUgR0ZTMl9SRU5BTUVfTE9DSwkzCisKKy8qIEZvcm1hdCBudW1iZXJzIGZvciB2YXJpb3VzIG1ldGFkYXRhIHR5cGVzICovCisKKyNkZWZpbmUgR0ZTMl9GT1JNQVRfTk9ORQkwCisjZGVmaW5lIEdGUzJfRk9STUFUX1NCCQkxMDAKKyNkZWZpbmUgR0ZTMl9GT1JNQVRfUkcJCTIwMAorI2RlZmluZSBHRlMyX0ZPUk1BVF9SQgkJMzAwCisjZGVmaW5lIEdGUzJfRk9STUFUX0RJCQk0MDAKKyNkZWZpbmUgR0ZTMl9GT1JNQVRfSU4JCTUwMAorI2RlZmluZSBHRlMyX0ZPUk1BVF9MRgkJNjAwCisjZGVmaW5lIEdGUzJfRk9STUFUX0pECQk3MDAKKyNkZWZpbmUgR0ZTMl9GT1JNQVRfTEgJCTgwMAorI2RlZmluZSBHRlMyX0ZPUk1BVF9MRAkJOTAwCisjZGVmaW5lIEdGUzJfRk9STUFUX0xCCQkxMDAwCisjZGVmaW5lIEdGUzJfRk9STUFUX0VBCQkxNjAwCisjZGVmaW5lIEdGUzJfRk9STUFUX0VECQkxNzAwCisjZGVmaW5lIEdGUzJfRk9STUFUX1FDCQkxNDAwCisvKiBUaGVzZSBhcmUgZm9ybWF0IG51bWJlcnMgZm9yIGVudGl0aWVzIGNvbnRhaW5lZCBpbiBmaWxlcyAqLworI2RlZmluZSBHRlMyX0ZPUk1BVF9SSQkJMTEwMAorI2RlZmluZSBHRlMyX0ZPUk1BVF9ERQkJMTIwMAorI2RlZmluZSBHRlMyX0ZPUk1BVF9RVQkJMTUwMAorLyogVGhlc2UgYXJlIHBhcnQgb2YgdGhlIHN1cGVyYmxvY2sgKi8KKyNkZWZpbmUgR0ZTMl9GT1JNQVRfRlMJCTE4MDEKKyNkZWZpbmUgR0ZTMl9GT1JNQVRfTVVMVEkJMTkwMAorCisvKgorICogQW4gb24tZGlzayBpbm9kZSBudW1iZXIKKyAqLworCitzdHJ1Y3QgZ2ZzMl9pbnVtIHsKKwlfX2JlNjQgbm9fZm9ybWFsX2lubzsKKwlfX2JlNjQgbm9fYWRkcjsKK307CisKKy8qCisgKiBHZW5lcmljIG1ldGFkYXRhIGhlYWQgc3RydWN0dXJlCisgKiBFdmVyeSBpbnBsYWNlIGJ1ZmZlciBsb2dnZWQgaW4gdGhlIGpvdXJuYWwgbXVzdCBzdGFydCB3aXRoIHRoaXMuCisgKi8KKworI2RlZmluZSBHRlMyX01FVEFUWVBFX05PTkUJMAorI2RlZmluZSBHRlMyX01FVEFUWVBFX1NCCTEKKyNkZWZpbmUgR0ZTMl9NRVRBVFlQRV9SRwkyCisjZGVmaW5lIEdGUzJfTUVUQVRZUEVfUkIJMworI2RlZmluZSBHRlMyX01FVEFUWVBFX0RJCTQKKyNkZWZpbmUgR0ZTMl9NRVRBVFlQRV9JTgk1CisjZGVmaW5lIEdGUzJfTUVUQVRZUEVfTEYJNgorI2RlZmluZSBHRlMyX01FVEFUWVBFX0pECTcKKyNkZWZpbmUgR0ZTMl9NRVRBVFlQRV9MSAk4CisjZGVmaW5lIEdGUzJfTUVUQVRZUEVfTEQJOQorI2RlZmluZSBHRlMyX01FVEFUWVBFX0xCCTEyCisjZGVmaW5lIEdGUzJfTUVUQVRZUEVfRUEJMTAKKyNkZWZpbmUgR0ZTMl9NRVRBVFlQRV9FRAkxMQorI2RlZmluZSBHRlMyX01FVEFUWVBFX1FDCTE0CisKK3N0cnVjdCBnZnMyX21ldGFfaGVhZGVyIHsKKwlfX2JlMzIgbWhfbWFnaWM7CisJX19iZTMyIG1oX3R5cGU7CisJX19iZTY0IF9fcGFkMDsJCS8qIFdhcyBnZW5lcmF0aW9uIG51bWJlciBpbiBnZnMxICovCisJX19iZTMyIG1oX2Zvcm1hdDsKKwkvKiBUaGlzIHVuaW9uIGlzIHRvIGtlZXAgdXNlcnNwYWNlIGhhcHB5ICovCisJdW5pb24geworCQlfX2JlMzIgbWhfamlkOwkJLyogV2FzIGluY2FybmF0aW9uIG51bWJlciBpbiBnZnMxICovCisJCV9fYmUzMiBfX3BhZDE7CisJfTsKK307CisKKy8qCisgKiBzdXBlci1ibG9jayBzdHJ1Y3R1cmUKKyAqCisgKiBJdCdzIHByb2JhYmx5IGdvb2QgaWYgU0laRU9GX1NCIDw9IEdGUzJfQkFTSUNfQkxPQ0sgKDUxMiBieXRlcykKKyAqCisgKiBPcmRlciBpcyBpbXBvcnRhbnQsIG5lZWQgdG8gYmUgYWJsZSB0byByZWFkIG9sZCBzdXBlcmJsb2NrcyB0byBkbyBvbi1kaXNrCisgKiB2ZXJzaW9uIHVwZ3JhZGVzLgorICovCisKKy8qIEFkZHJlc3Mgb2Ygc3VwZXJibG9jayBpbiBHRlMyIGJhc2ljIGJsb2NrcyAqLworI2RlZmluZSBHRlMyX1NCX0FERFIJCTEyOAorCisvKiBUaGUgbG9jayBudW1iZXIgZm9yIHRoZSBzdXBlcmJsb2NrIChtdXN0IGJlIHplcm8pICovCisjZGVmaW5lIEdGUzJfU0JfTE9DSwkJMAorCisvKiBSZXF1aXJlbWVudDogIEdGUzJfTE9DS05BTUVfTEVOICUgOCA9PSAwCisgICBJbmNsdWRlczogdGhlIGZlbmNpbmcgemVybyBhdCB0aGUgZW5kICovCisjZGVmaW5lIEdGUzJfTE9DS05BTUVfTEVOCTY0CisKK3N0cnVjdCBnZnMyX3NiIHsKKwlzdHJ1Y3QgZ2ZzMl9tZXRhX2hlYWRlciBzYl9oZWFkZXI7CisKKwlfX2JlMzIgc2JfZnNfZm9ybWF0OworCV9fYmUzMiBzYl9tdWx0aWhvc3RfZm9ybWF0OworCV9fdTMyICBfX3BhZDA7CS8qIFdhcyBzdXBlcmJsb2NrIGZsYWdzIGluIGdmczEgKi8KKworCV9fYmUzMiBzYl9ic2l6ZTsKKwlfX2JlMzIgc2JfYnNpemVfc2hpZnQ7CisJX191MzIgX19wYWQxOwkvKiBXYXMgam91cm5hbCBzZWdtZW50IHNpemUgaW4gZ2ZzMSAqLworCisJc3RydWN0IGdmczJfaW51bSBzYl9tYXN0ZXJfZGlyOyAvKiBXYXMgamluZGV4IGRpbm9kZSBpbiBnZnMxICovCisJc3RydWN0IGdmczJfaW51bSBfX3BhZDI7IC8qIFdhcyByaW5kZXggZGlub2RlIGluIGdmczEgKi8KKwlzdHJ1Y3QgZ2ZzMl9pbnVtIHNiX3Jvb3RfZGlyOworCisJY2hhciBzYl9sb2NrcHJvdG9bR0ZTMl9MT0NLTkFNRV9MRU5dOworCWNoYXIgc2JfbG9ja3RhYmxlW0dGUzJfTE9DS05BTUVfTEVOXTsKKworCXN0cnVjdCBnZnMyX2ludW0gX19wYWQzOyAvKiBXYXMgcXVvdGEgaW5vZGUgaW4gZ2ZzMSAqLworCXN0cnVjdCBnZnMyX2ludW0gX19wYWQ0OyAvKiBXYXMgbGljZW5jZSBpbm9kZSBpbiBnZnMxICovCisjZGVmaW5lIEdGUzJfSEFTX1VVSUQgMQorCV9fdTggc2JfdXVpZFsxNl07IC8qIFRoZSBVVUlELCBtYXliZSAwIGZvciBiYWNrd2FyZHMgY29tcGF0ICovCit9OworCisvKgorICogcmVzb3VyY2UgaW5kZXggc3RydWN0dXJlCisgKi8KKworc3RydWN0IGdmczJfcmluZGV4IHsKKwlfX2JlNjQgcmlfYWRkcjsJLyogZ3JwIGJsb2NrIGRpc2sgYWRkcmVzcyAqLworCV9fYmUzMiByaV9sZW5ndGg7CS8qIGxlbmd0aCBvZiByZ3JwIGhlYWRlciBpbiBmcyBibG9ja3MgKi8KKwlfX3UzMiBfX3BhZDsKKworCV9fYmU2NCByaV9kYXRhMDsJLyogZmlyc3QgZGF0YSBsb2NhdGlvbiAqLworCV9fYmUzMiByaV9kYXRhOwkvKiBudW0gb2YgZGF0YSBibG9ja3MgaW4gcmdycCAqLworCisJX19iZTMyIHJpX2JpdGJ5dGVzOwkvKiBudW1iZXIgb2YgYnl0ZXMgaW4gZGF0YSBiaXRtYXBzICovCisKKwlfX3U4IHJpX3Jlc2VydmVkWzY0XTsKK307CisKKy8qCisgKiByZXNvdXJjZSBncm91cCBoZWFkZXIgc3RydWN0dXJlCisgKi8KKworLyogTnVtYmVyIG9mIGJsb2NrcyBwZXIgYnl0ZSBpbiByZ3JwICovCisjZGVmaW5lIEdGUzJfTkJCWQkJNAorI2RlZmluZSBHRlMyX0JJVF9TSVpFCQkyCisjZGVmaW5lIEdGUzJfQklUX01BU0sJCTB4MDAwMDAwMDMKKworI2RlZmluZSBHRlMyX0JMS1NUX0ZSRUUJCTAKKyNkZWZpbmUgR0ZTMl9CTEtTVF9VU0VECQkxCisjZGVmaW5lIEdGUzJfQkxLU1RfVU5MSU5LRUQJMgorI2RlZmluZSBHRlMyX0JMS1NUX0RJTk9ERQkzCisKKyNkZWZpbmUgR0ZTMl9SR0ZfSk9VUk5BTAkweDAwMDAwMDAxCisjZGVmaW5lIEdGUzJfUkdGX01FVEFPTkxZCTB4MDAwMDAwMDIKKyNkZWZpbmUgR0ZTMl9SR0ZfREFUQU9OTFkJMHgwMDAwMDAwNAorI2RlZmluZSBHRlMyX1JHRl9OT0FMTE9DCTB4MDAwMDAwMDgKKworc3RydWN0IGdmczJfcmdycCB7CisJc3RydWN0IGdmczJfbWV0YV9oZWFkZXIgcmdfaGVhZGVyOworCisJX19iZTMyIHJnX2ZsYWdzOworCV9fYmUzMiByZ19mcmVlOworCV9fYmUzMiByZ19kaW5vZGVzOworCV9fYmUzMiBfX3BhZDsKKwlfX2JlNjQgcmdfaWdlbmVyYXRpb247CisKKwlfX3U4IHJnX3Jlc2VydmVkWzgwXTsgLyogU2V2ZXJhbCBmaWVsZHMgZnJvbSBnZnMxIG5vdyByZXNlcnZlZCAqLworfTsKKworLyoKKyAqIHF1b3RhIHN0cnVjdHVyZQorICovCisKK3N0cnVjdCBnZnMyX3F1b3RhIHsKKwlfX2JlNjQgcXVfbGltaXQ7CisJX19iZTY0IHF1X3dhcm47CisJX19iZTY0IHF1X3ZhbHVlOworCV9fdTggcXVfcmVzZXJ2ZWRbNjRdOworfTsKKworLyoKKyAqIGRpbm9kZSBzdHJ1Y3R1cmUKKyAqLworCisjZGVmaW5lIEdGUzJfTUFYX01FVEFfSEVJR0hUCTEwCisjZGVmaW5lIEdGUzJfRElSX01BWF9ERVBUSAkxNworCisjZGVmaW5lIERUMklGKGR0KSAoKChkdCkgPDwgMTIpICYgU19JRk1UKQorI2RlZmluZSBJRjJEVChzaWYpICgoKHNpZikgJiBTX0lGTVQpID4+IDEyKQorCitlbnVtIHsKKwlnZnMyZmxfSmRhdGEJCT0gMCwKKwlnZnMyZmxfRXhIYXNoCQk9IDEsCisJZ2ZzMmZsX1VudXNlZAkJPSAyLAorCWdmczJmbF9FYUluZGlyZWN0CT0gMywKKwlnZnMyZmxfRGlyZWN0aW8JCT0gNCwKKwlnZnMyZmxfSW1tdXRhYmxlCT0gNSwKKwlnZnMyZmxfQXBwZW5kT25seQk9IDYsCisJZ2ZzMmZsX05vQXRpbWUJCT0gNywKKwlnZnMyZmxfU3luYwkJPSA4LAorCWdmczJmbF9TeXN0ZW0JCT0gOSwKKwlnZnMyZmxfVHJ1bmNJblByb2cJPSAyOSwKKwlnZnMyZmxfSW5oZXJpdERpcmVjdGlvCT0gMzAsCisJZ2ZzMmZsX0luaGVyaXRKZGF0YQk9IDMxLAorfTsKKworLyogRGlub2RlIGZsYWdzICovCisjZGVmaW5lIEdGUzJfRElGX0pEQVRBCQkJMHgwMDAwMDAwMQorI2RlZmluZSBHRlMyX0RJRl9FWEhBU0gJCQkweDAwMDAwMDAyCisjZGVmaW5lIEdGUzJfRElGX1VOVVNFRAkJCTB4MDAwMDAwMDQgIC8qIG9ubHkgaW4gZ2ZzMSAqLworI2RlZmluZSBHRlMyX0RJRl9FQV9JTkRJUkVDVAkJMHgwMDAwMDAwOAorI2RlZmluZSBHRlMyX0RJRl9ESVJFQ1RJTwkJMHgwMDAwMDAxMAorI2RlZmluZSBHRlMyX0RJRl9JTU1VVEFCTEUJCTB4MDAwMDAwMjAKKyNkZWZpbmUgR0ZTMl9ESUZfQVBQRU5ET05MWQkJMHgwMDAwMDA0MAorI2RlZmluZSBHRlMyX0RJRl9OT0FUSU1FCQkweDAwMDAwMDgwCisjZGVmaW5lIEdGUzJfRElGX1NZTkMJCQkweDAwMDAwMTAwCisjZGVmaW5lIEdGUzJfRElGX1NZU1RFTQkJCTB4MDAwMDAyMDAgLyogTmV3IGluIGdmczIgKi8KKyNkZWZpbmUgR0ZTMl9ESUZfVFJVTkNfSU5fUFJPRwkJMHgyMDAwMDAwMCAvKiBOZXcgaW4gZ2ZzMiAqLworI2RlZmluZSBHRlMyX0RJRl9JTkhFUklUX0RJUkVDVElPCTB4NDAwMDAwMDAKKyNkZWZpbmUgR0ZTMl9ESUZfSU5IRVJJVF9KREFUQQkJMHg4MDAwMDAwMAorCitzdHJ1Y3QgZ2ZzMl9kaW5vZGUgeworCXN0cnVjdCBnZnMyX21ldGFfaGVhZGVyIGRpX2hlYWRlcjsKKworCXN0cnVjdCBnZnMyX2ludW0gZGlfbnVtOworCisJX19iZTMyIGRpX21vZGU7CS8qIG1vZGUgb2YgZmlsZSAqLworCV9fYmUzMiBkaV91aWQ7CS8qIG93bmVyJ3MgdXNlciBpZCAqLworCV9fYmUzMiBkaV9naWQ7CS8qIG93bmVyJ3MgZ3JvdXAgaWQgKi8KKwlfX2JlMzIgZGlfbmxpbms7CS8qIG51bWJlciBvZiBsaW5rcyB0byB0aGlzIGZpbGUgKi8KKwlfX2JlNjQgZGlfc2l6ZTsJLyogbnVtYmVyIG9mIGJ5dGVzIGluIGZpbGUgKi8KKwlfX2JlNjQgZGlfYmxvY2tzOwkvKiBudW1iZXIgb2YgYmxvY2tzIGluIGZpbGUgKi8KKwlfX2JlNjQgZGlfYXRpbWU7CS8qIHRpbWUgbGFzdCBhY2Nlc3NlZCAqLworCV9fYmU2NCBkaV9tdGltZTsJLyogdGltZSBsYXN0IG1vZGlmaWVkICovCisJX19iZTY0IGRpX2N0aW1lOwkvKiB0aW1lIGxhc3QgY2hhbmdlZCAqLworCV9fYmUzMiBkaV9tYWpvcjsJLyogZGV2aWNlIG1ham9yIG51bWJlciAqLworCV9fYmUzMiBkaV9taW5vcjsJLyogZGV2aWNlIG1pbm9yIG51bWJlciAqLworCisJLyogVGhpcyBzZWN0aW9uIHZhcmllcyBmcm9tIGdmczEuIFBhZGRpbmcgYWRkZWQgdG8gYWxpZ24gd2l0aAorICAgICAgICAgKiByZW1haW5kZXIgb2YgZGlub2RlCisJICovCisJX19iZTY0IGRpX2dvYWxfbWV0YTsJLyogcmdycCB0byBhbGxvYyBmcm9tIG5leHQgKi8KKwlfX2JlNjQgZGlfZ29hbF9kYXRhOwkvKiBkYXRhIGJsb2NrIGdvYWwgKi8KKwlfX2JlNjQgZGlfZ2VuZXJhdGlvbjsJLyogZ2VuZXJhdGlvbiBudW1iZXIgZm9yIE5GUyAqLworCisJX19iZTMyIGRpX2ZsYWdzOwkvKiBHRlMyX0RJRl8uLi4gKi8KKwlfX2JlMzIgZGlfcGF5bG9hZF9mb3JtYXQ7ICAvKiBHRlMyX0ZPUk1BVF8uLi4gKi8KKwlfX3UxNiBfX3BhZDE7CS8qIFdhcyBkaXR5cGUgaW4gZ2ZzMSAqLworCV9fYmUxNiBkaV9oZWlnaHQ7CS8qIGhlaWdodCBvZiBtZXRhZGF0YSAqLworCV9fdTMyIF9fcGFkMjsJLyogVW51c2VkIGluY2FybmF0aW9uIG51bWJlciBmcm9tIGdmczEgKi8KKworCS8qIFRoZXNlIG9ubHkgYXBwbHkgdG8gZGlyZWN0b3JpZXMgICovCisJX191MTYgX19wYWQzOwkvKiBQYWRkaW5nICovCisJX19iZTE2IGRpX2RlcHRoOwkvKiBOdW1iZXIgb2YgYml0cyBpbiB0aGUgdGFibGUgKi8KKwlfX2JlMzIgZGlfZW50cmllczsJLyogVGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBkaXJlY3RvcnkgKi8KKworCXN0cnVjdCBnZnMyX2ludW0gX19wYWQ0OyAvKiBVbnVzZWQgZXZlbiBpbiBjdXJyZW50IGdmczEgKi8KKworCV9fYmU2NCBkaV9lYXR0cjsJLyogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIG51bWJlciAqLworCV9fYmUzMiBkaV9hdGltZV9uc2VjOyAgIC8qIG5zZWMgcG9ydGlvbiBvZiBhdGltZSAqLworCV9fYmUzMiBkaV9tdGltZV9uc2VjOyAgIC8qIG5zZWMgcG9ydGlvbiBvZiBtdGltZSAqLworCV9fYmUzMiBkaV9jdGltZV9uc2VjOyAgIC8qIG5zZWMgcG9ydGlvbiBvZiBjdGltZSAqLworCisJX191OCBkaV9yZXNlcnZlZFs0NF07Cit9OworCisvKgorICogZGlyZWN0b3J5IHN0cnVjdHVyZSAtIG1hbnkgb2YgdGhlc2UgcGVyIGRpcmVjdG9yeSBmaWxlCisgKi8KKworI2RlZmluZSBHRlMyX0ZOQU1FU0laRQkJMjU1CisjZGVmaW5lIEdGUzJfRElSRU5UX1NJWkUobmFtZV9sZW4pICgoc2l6ZW9mKHN0cnVjdCBnZnMyX2RpcmVudCkgKyAobmFtZV9sZW4pICsgNykgJiB+NykKKworc3RydWN0IGdmczJfZGlyZW50IHsKKwlzdHJ1Y3QgZ2ZzMl9pbnVtIGRlX2ludW07CisJX19iZTMyIGRlX2hhc2g7CisJX19iZTE2IGRlX3JlY19sZW47CisJX19iZTE2IGRlX25hbWVfbGVuOworCV9fYmUxNiBkZV90eXBlOworCV9fdTggX19wYWRbMTRdOworfTsKKworLyoKKyAqIEhlYWRlciBvZiBsZWFmIGRpcmVjdG9yeSBub2RlcworICovCisKK3N0cnVjdCBnZnMyX2xlYWYgeworCXN0cnVjdCBnZnMyX21ldGFfaGVhZGVyIGxmX2hlYWRlcjsKKworCV9fYmUxNiBsZl9kZXB0aDsJCS8qIERlcHRoIG9mIGxlYWYgKi8KKwlfX2JlMTYgbGZfZW50cmllczsJCS8qIE51bWJlciBvZiBkaXJlbnRzIGluIGxlYWYgKi8KKwlfX2JlMzIgbGZfZGlyZW50X2Zvcm1hdDsJLyogRm9ybWF0IG9mIHRoZSBkaXJlbnRzICovCisJX19iZTY0IGxmX25leHQ7CQkJLyogTmV4dCBsZWFmLCBpZiBvdmVyZmxvdyAqLworCisJX191OCBsZl9yZXNlcnZlZFs2NF07Cit9OworCisvKgorICogRXh0ZW5kZWQgYXR0cmlidXRlIGhlYWRlciBmb3JtYXQKKyAqCisgKiBUaGlzIHdvcmtzIGluIGEgc2ltaWxhciB3YXkgdG8gZGlyZW50cy4gVGhlcmUgaXMgYSBmaXhlZCBzaXplIGhlYWRlcgorICogZm9sbG93ZWQgYnkgYSB2YXJpYWJsZSBsZW5ndGggc2VjdGlvbiBtYWRlIHVwIG9mIHRoZSBuYW1lIGFuZCB0aGUKKyAqIGFzc29jaWF0ZWQgZGF0YS4gSW4gdGhlIGNhc2Ugb2YgYSAic3R1ZmZlZCIgZW50cnksIHRoZSB2YWx1ZSBpcworICogX19pbmxpbmVfXyBkaXJlY3RseSBhZnRlciB0aGUgbmFtZSwgdGhlIGVhX251bV9wdHJzIGVudHJ5IHdpbGwgYmUKKyAqIHplcm8gaW4gdGhhdCBjYXNlLiBGb3Igbm9uLSJzdHVmZmVkIiBlbnRyaWVzLCB0aGVyZSB3aWxsIGJlCisgKiBhIHNldCBvZiBwb2ludGVycyAoYWxpZ25lZCB0byA4IGJ5dGUgYm91bmRhcnkpIHRvIHRoZSBibG9jayhzKQorICogY29udGFpbmluZyB0aGUgdmFsdWUuCisgKgorICogVGhlIGJsb2NrcyBjb250YWluaW5nIHRoZSB2YWx1ZXMgYW5kIHRoZSBibG9ja3MgY29udGFpbmluZyB0aGUKKyAqIGV4dGVuZGVkIGF0dHJpYnV0ZSBoZWFkZXJzIHRoZW1zZWx2ZXMgYWxsIHN0YXJ0IHdpdGggdGhlIGNvbW1vbgorICogbWV0YWRhdGEgaGVhZGVyLiBFYWNoIGlub2RlLCBpZiBpdCBoYXMgZXh0ZW5kZWQgYXR0cmlidXRlcywgd2lsbAorICogaGF2ZSBlaXRoZXIgYSBzaW5nbGUgYmxvY2sgY29udGFpbmluZyB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlIGhlYWRlcnMKKyAqIG9yIGEgc2luZ2xlIGluZGlyZWN0IGJsb2NrIHBvaW50aW5nIHRvIGJsb2NrcyBjb250YWluaW5nIHRoZQorICogZXh0ZW5kZWQgYXR0cmlidXJlIGhlYWRlcnMuCisgKgorICogVGhlIG1heGltaW0gc2l6ZSBvZiB0aGUgZGF0YSBwYXJ0IG9mIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBpcyA2NGsKKyAqIHNvIHRoZSBudW1iZXIgb2YgYmxvY2tzIHJlcXVpcmVkIGRlcGVuZHMgdXBvbiBibG9jayBzaXplLiBTaW5jZSB0aGUKKyAqIGJsb2NrIHNpemUgYWxzbyBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgcG9pbnRlcnMgaW4gYW4gaW5kaXJlY3QKKyAqIGJsb2NrLCBpdHMgYSBmYWlybHkgY29tcGxpY2F0ZWQgY2FsY3VsYXRpb24gdG8gd29yayBvdXQgdGhlIG1heGltdW0KKyAqIG51bWJlciBvZiBibG9ja3MgdGhhdCBhbiBpbm9kZSBtYXkgaGF2ZSByZWxhdGluZyB0byBleHRlbmRlZCBhdHRyaWJ1dGVzLgorICoKKyAqLworCisjZGVmaW5lIEdGUzJfRUFfTUFYX05BTUVfTEVOCTI1NQorI2RlZmluZSBHRlMyX0VBX01BWF9EQVRBX0xFTgk2NTUzNgorCisjZGVmaW5lIEdGUzJfRUFUWVBFX1VOVVNFRAkwCisjZGVmaW5lIEdGUzJfRUFUWVBFX1VTUgkJMQorI2RlZmluZSBHRlMyX0VBVFlQRV9TWVMJCTIKKyNkZWZpbmUgR0ZTMl9FQVRZUEVfU0VDVVJJVFkJMworCisjZGVmaW5lIEdGUzJfRUFUWVBFX0xBU1QJMworI2RlZmluZSBHRlMyX0VBVFlQRV9WQUxJRCh4KQkoKHgpIDw9IEdGUzJfRUFUWVBFX0xBU1QpCisKKyNkZWZpbmUgR0ZTMl9FQUZMQUdfTEFTVAkweDAxCS8qIGxhc3QgZWEgaW4gYmxvY2sgKi8KKworc3RydWN0IGdmczJfZWFfaGVhZGVyIHsKKwlfX2JlMzIgZWFfcmVjX2xlbjsKKwlfX2JlMzIgZWFfZGF0YV9sZW47CisJX191OCBlYV9uYW1lX2xlbjsJLyogbm8gTlVMTCBwb2ludGVyIGFmdGVyIHRoZSBzdHJpbmcgKi8KKwlfX3U4IGVhX3R5cGU7CQkvKiBHRlMyX0VBVFlQRV8uLi4gKi8KKwlfX3U4IGVhX2ZsYWdzOwkJLyogR0ZTMl9FQUZMQUdfLi4uICovCisJX191OCBlYV9udW1fcHRyczsKKwlfX3UzMiBfX3BhZDsKK307CisKKy8qCisgKiBMb2cgaGVhZGVyIHN0cnVjdHVyZQorICovCisKKyNkZWZpbmUgR0ZTMl9MT0dfSEVBRF9VTk1PVU5UCTB4MDAwMDAwMDEJLyogbG9nIGlzIGNsZWFuICovCisKK3N0cnVjdCBnZnMyX2xvZ19oZWFkZXIgeworCXN0cnVjdCBnZnMyX21ldGFfaGVhZGVyIGxoX2hlYWRlcjsKKworCV9fYmU2NCBsaF9zZXF1ZW5jZTsJLyogU2VxdWVuY2UgbnVtYmVyIG9mIHRoaXMgdHJhbnNhY3Rpb24gKi8KKwlfX2JlMzIgbGhfZmxhZ3M7CS8qIEdGUzJfTE9HX0hFQURfLi4uICovCisJX19iZTMyIGxoX3RhaWw7CQkvKiBCbG9jayBudW1iZXIgb2YgbG9nIHRhaWwgKi8KKwlfX2JlMzIgbGhfYmxrbm87CisJX19iZTMyIGxoX2hhc2g7Cit9OworCisvKgorICogTG9nIHR5cGUgZGVzY3JpcHRvcgorICovCisKKyNkZWZpbmUgR0ZTMl9MT0dfREVTQ19NRVRBREFUQQkzMDAKKy8qIGxkX2RhdGExIGlzIHRoZSBudW1iZXIgb2YgbWV0YWRhdGEgYmxvY2tzIGluIHRoZSBkZXNjcmlwdG9yLgorICAgbGRfZGF0YTIgaXMgdW51c2VkLiAqLworCisjZGVmaW5lIEdGUzJfTE9HX0RFU0NfUkVWT0tFCTMwMQorLyogbGRfZGF0YTEgaXMgdGhlIG51bWJlciBvZiByZXZva2UgYmxvY2tzIGluIHRoZSBkZXNjcmlwdG9yLgorICAgbGRfZGF0YTIgaXMgdW51c2VkLiAqLworCisjZGVmaW5lIEdGUzJfTE9HX0RFU0NfSkRBVEEJMzAyCisvKiBsZF9kYXRhMSBpcyB0aGUgbnVtYmVyIG9mIGRhdGEgYmxvY2tzIGluIHRoZSBkZXNjcmlwdG9yLgorICAgbGRfZGF0YTIgaXMgdW51c2VkLiAqLworCitzdHJ1Y3QgZ2ZzMl9sb2dfZGVzY3JpcHRvciB7CisJc3RydWN0IGdmczJfbWV0YV9oZWFkZXIgbGRfaGVhZGVyOworCisJX19iZTMyIGxkX3R5cGU7CQkvKiBHRlMyX0xPR19ERVNDXy4uLiAqLworCV9fYmUzMiBsZF9sZW5ndGg7CS8qIE51bWJlciBvZiBidWZmZXJzIGluIHRoaXMgY2h1bmsgKi8KKwlfX2JlMzIgbGRfZGF0YTE7CS8qIGRlc2NyaXB0b3Itc3BlY2lmaWMgZmllbGQgKi8KKwlfX2JlMzIgbGRfZGF0YTI7CS8qIGRlc2NyaXB0b3Itc3BlY2lmaWMgZmllbGQgKi8KKworCV9fdTggbGRfcmVzZXJ2ZWRbMzJdOworfTsKKworLyoKKyAqIEludW0gUmFuZ2UKKyAqIERlc2NyaWJlIGEgcmFuZ2Ugb2YgZm9ybWFsIGlub2RlIG51bWJlcnMgYWxsb2NhdGVkIHRvCisgKiBvbmUgbWFjaGluZSB0byBhc3NpZ24gdG8gaW5vZGVzLgorICovCisKKyNkZWZpbmUgR0ZTMl9JTlVNX1FVQU5UVU0JMTA0ODU3NgorCitzdHJ1Y3QgZ2ZzMl9pbnVtX3JhbmdlIHsKKwlfX2JlNjQgaXJfc3RhcnQ7CisJX19iZTY0IGlyX2xlbmd0aDsKK307CisKKy8qCisgKiBTdGF0ZnMgY2hhbmdlCisgKiBEZXNjcmliZXMgYW4gY2hhbmdlIHRvIHRoZSBwb29sIG9mIGZyZWUgYW5kIGFsbG9jYXRlZAorICogYmxvY2tzLgorICovCisKK3N0cnVjdCBnZnMyX3N0YXRmc19jaGFuZ2UgeworCV9fYmU2NCBzY190b3RhbDsKKwlfX2JlNjQgc2NfZnJlZTsKKwlfX2JlNjQgc2NfZGlub2RlczsKK307CisKKy8qCisgKiBRdW90YSBjaGFuZ2UKKyAqIERlc2NyaWJlcyBhbiBhbGxvY2F0aW9uIGNoYW5nZSBmb3IgYSBwYXJ0aWN1bGFyCisgKiB1c2VyIG9yIGdyb3VwLgorICovCisKKyNkZWZpbmUgR0ZTMl9RQ0ZfVVNFUgkJMHgwMDAwMDAwMQorCitzdHJ1Y3QgZ2ZzMl9xdW90YV9jaGFuZ2UgeworCV9fYmU2NCBxY19jaGFuZ2U7CisJX19iZTMyIHFjX2ZsYWdzOwkvKiBHRlMyX1FDRl8uLi4gKi8KKwlfX2JlMzIgcWNfaWQ7Cit9OworCitzdHJ1Y3QgZ2ZzMl9xdW90YV9sdmIgeworICAgICAgICBfX2JlMzIgcWJfbWFnaWM7CisgICAgICAgIF9fdTMyIF9fcGFkOworICAgICAgICBfX2JlNjQgcWJfbGltaXQ7ICAgICAgLyogSGFyZCBsaW1pdCBvZiAjIGJsb2NrcyB0byBhbGxvYyAqLworICAgICAgICBfX2JlNjQgcWJfd2FybjsgICAgICAgLyogV2FybiB1c2VyIHdoZW4gYWxsb2MgaXMgYWJvdmUgdGhpcyAjICovCisgICAgICAgIF9fYmU2NCBxYl92YWx1ZTsgICAgICAgLyogQ3VycmVudCAjIGJsb2NrcyBhbGxvY2F0ZWQgKi8KK307CisKKyNlbmRpZiAvKiBfX0dGUzJfT05ESVNLX0RPVF9IX18gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9naWdhc2V0X2Rldi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2dpZ2FzZXRfZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU4YmE4MgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9naWdhc2V0X2Rldi5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBpbnRlcmZhY2UgdG8gdXNlciBzcGFjZSBmb3IgdGhlIGdpZ2FzZXQgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEhhbnNqb2VyZyBMaXBwIDxoamxpcHBAd2ViLmRlPgorICoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpZm5kZWYgR0lHQVNFVF9JTlRFUkZBQ0VfSAorI2RlZmluZSBHSUdBU0VUX0lOVEVSRkFDRV9ICisKKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisvKiBUaGUgbWFnaWMgSU9DVEwgdmFsdWUgZm9yIHRoaXMgaW50ZXJmYWNlLiAqLworI2RlZmluZSBHSUdBU0VUX0lPQ1RMIDB4NDcKKworLyogZW5hYmxlL2Rpc2FibGUgZGV2aWNlIGNvbnRyb2wgdmlhIGNoYXJhY3RlciBkZXZpY2UgKGxvY2sgb3V0IElTRE4gc3Vic3lzKSAqLworI2RlZmluZSBHSUdBU0VUX1JFRElSICAgIF9JT1dSKEdJR0FTRVRfSU9DVEwsIDAsIGludCkKKworLyogZW5hYmxlIGFkYXB0ZXIgY29uZmlndXJhdGlvbiBtb2RlIChNMTB4IG9ubHkpICovCisjZGVmaW5lIEdJR0FTRVRfQ09ORklHICAgX0lPV1IoR0lHQVNFVF9JT0NUTCwgMSwgaW50KQorCisvKiBzZXQgYnJlYWsgY2hhcmFjdGVycyAoTTEwNSBvbmx5KSAqLworI2RlZmluZSBHSUdBU0VUX0JSS0NIQVJTIF9JT1coR0lHQVNFVF9JT0NUTCwgMiwgdW5zaWduZWQgY2hhcls2XSkKKworLyogZ2V0IHZlcnNpb24gaW5mb3JtYXRpb24gc2VsZWN0ZWQgYnkgYXJnWzBdICovCisjZGVmaW5lIEdJR0FTRVRfVkVSU0lPTiAgX0lPV1IoR0lHQVNFVF9JT0NUTCwgMywgdW5zaWduZWRbNF0pCisvKiB2YWx1ZXMgZm9yIEdJR0FTRVRfVkVSU0lPTiBhcmdbMF0gKi8KKyNkZWZpbmUgR0lHVkVSX0RSSVZFUiAwCQkvKiBnZXQgZHJpdmVyIHZlcnNpb24gKi8KKyNkZWZpbmUgR0lHVkVSX0NPTVBBVCAxCQkvKiBnZXQgaW50ZXJmYWNlIGNvbXBhdGliaWxpdHkgdmVyc2lvbiAqLworI2RlZmluZSBHSUdWRVJfRldCQVNFIDIJCS8qIGdldCBiYXNlIHN0YXRpb24gZmlybXdhcmUgdmVyc2lvbiAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9oZGxjLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaGRsYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZTQ4NGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaGRsYy5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBHZW5lcmljIEhETEMgc3VwcG9ydCByb3V0aW5lcyBmb3IgTGludXgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNSBLcnp5c3p0b2YgSGFsYXNhIDxraGNAcG0ud2F3LnBsPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0hETENfSAorI2RlZmluZSBfX0hETENfSAorCisKKyNkZWZpbmUgSERMQ19NQVhfTVRVIDE1MDAJLyogRXRoZXJuZXQgMTUwMCBieXRlcyAqLworI2lmIDAKKyNkZWZpbmUgSERMQ19NQVhfTVJVIChIRExDX01BWF9NVFUgKyAxMCArIDE0ICsgNCkgLyogZm9yIEVUSCtWTEFOIG92ZXIgRlIgKi8KKyNlbHNlCisjZGVmaW5lIEhETENfTUFYX01SVSAxNjAwIC8qIGFzIHJlcXVpcmVkIGZvciBGUiBuZXR3b3JrICovCisjZW5kaWYKKworCisjZW5kaWYgLyogX19IRExDX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9oZGxjL2lvY3RsLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaGRsYy9pb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4Mzk3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaGRsYy9pb2N0bC5oCkBAIC0wLDAgKzEsODEgQEAKKyNpZm5kZWYgX19IRExDX0lPQ1RMX0hfXworI2RlZmluZSBfX0hETENfSU9DVExfSF9fCisKKworI2RlZmluZSBHRU5FUklDX0hETENfVkVSU0lPTiA0CS8qIEZvciBzeW5jaHJvbml6YXRpb24gd2l0aCBzZXRoZGxjIHV0aWxpdHkgKi8KKworI2RlZmluZSBDTE9DS19ERUZBVUxUICAgMAkvKiBEZWZhdWx0IHNldHRpbmcgKi8KKyNkZWZpbmUgQ0xPQ0tfRVhUCTEJLyogRXh0ZXJuYWwgVFggYW5kIFJYIGNsb2NrIC0gRFRFICovCisjZGVmaW5lIENMT0NLX0lOVAkyCS8qIEludGVybmFsIFRYIGFuZCBSWCBjbG9jayAtIERDRSAqLworI2RlZmluZSBDTE9DS19UWElOVAkzCS8qIEludGVybmFsIFRYIGFuZCBleHRlcm5hbCBSWCBjbG9jayAqLworI2RlZmluZSBDTE9DS19UWEZST01SWAk0CS8qIFRYIGNsb2NrIGRlcml2ZWQgZnJvbSBleHRlcm5hbCBSWCBjbG9jayAqLworCisKKyNkZWZpbmUgRU5DT0RJTkdfREVGQVVMVAkwIC8qIERlZmF1bHQgc2V0dGluZyAqLworI2RlZmluZSBFTkNPRElOR19OUloJCTEKKyNkZWZpbmUgRU5DT0RJTkdfTlJaSQkJMgorI2RlZmluZSBFTkNPRElOR19GTV9NQVJLCTMKKyNkZWZpbmUgRU5DT0RJTkdfRk1fU1BBQ0UJNAorI2RlZmluZSBFTkNPRElOR19NQU5DSEVTVEVSCTUKKworCisjZGVmaW5lIFBBUklUWV9ERUZBVUxUCQkwIC8qIERlZmF1bHQgc2V0dGluZyAqLworI2RlZmluZSBQQVJJVFlfTk9ORQkJMSAvKiBObyBwYXJpdHkgKi8KKyNkZWZpbmUgUEFSSVRZX0NSQzE2X1BSMAkyIC8qIENSQzE2LCBpbml0aWFsIHZhbHVlIDB4MDAwMCAqLworI2RlZmluZSBQQVJJVFlfQ1JDMTZfUFIxCTMgLyogQ1JDMTYsIGluaXRpYWwgdmFsdWUgMHhGRkZGICovCisjZGVmaW5lIFBBUklUWV9DUkMxNl9QUjBfQ0NJVFQJNCAvKiBDUkMxNiwgaW5pdGlhbCAweDAwMDAsIElUVS1UIHZlcnNpb24gKi8KKyNkZWZpbmUgUEFSSVRZX0NSQzE2X1BSMV9DQ0lUVAk1IC8qIENSQzE2LCBpbml0aWFsIDB4RkZGRiwgSVRVLVQgdmVyc2lvbiAqLworI2RlZmluZSBQQVJJVFlfQ1JDMzJfUFIwX0NDSVRUCTYgLyogQ1JDMzIsIGluaXRpYWwgdmFsdWUgMHgwMDAwMDAwMCAqLworI2RlZmluZSBQQVJJVFlfQ1JDMzJfUFIxX0NDSVRUCTcgLyogQ1JDMzIsIGluaXRpYWwgdmFsdWUgMHhGRkZGRkZGRiAqLworCisjZGVmaW5lIExNSV9ERUZBVUxUCQkwIC8qIERlZmF1bHQgc2V0dGluZyAqLworI2RlZmluZSBMTUlfTk9ORQkJMSAvKiBObyBMTUksIGFsbCBQVkNzIGFyZSBzdGF0aWMgKi8KKyNkZWZpbmUgTE1JX0FOU0kJCTIgLyogQU5TSSBBbm5leCBEICovCisjZGVmaW5lIExNSV9DQ0lUVAkJMyAvKiBJVFUtVCBBbm5leCBBICovCisjZGVmaW5lIExNSV9DSVNDTwkJNCAvKiBUaGUgIm9yaWdpbmFsIiBMTUksIGFrYSBHYW5nIG9mIEZvdXIgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAKKwl1bnNpZ25lZCBpbnQgY2xvY2tfcmF0ZTsgLyogYml0cyBwZXIgc2Vjb25kICovCisJdW5zaWduZWQgaW50IGNsb2NrX3R5cGU7IC8qIGludGVybmFsLCBleHRlcm5hbCwgVFgtaW50ZXJuYWwgZXRjLiAqLworCXVuc2lnbmVkIHNob3J0IGxvb3BiYWNrOworfSBzeW5jX3NlcmlhbF9zZXR0aW5nczsgICAgICAgICAgLyogVi4zNSwgVi4yNCwgWC4yMSAqLworCit0eXBlZGVmIHN0cnVjdCB7IAorCXVuc2lnbmVkIGludCBjbG9ja19yYXRlOyAvKiBiaXRzIHBlciBzZWNvbmQgKi8KKwl1bnNpZ25lZCBpbnQgY2xvY2tfdHlwZTsgLyogaW50ZXJuYWwsIGV4dGVybmFsLCBUWC1pbnRlcm5hbCBldGMuICovCisJdW5zaWduZWQgc2hvcnQgbG9vcGJhY2s7CisJdW5zaWduZWQgaW50IHNsb3RfbWFwOworfSB0ZTFfc2V0dGluZ3M7ICAgICAgICAgICAgICAgICAgLyogVDEsIEUxICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCBlbmNvZGluZzsKKwl1bnNpZ25lZCBzaG9ydCBwYXJpdHk7Cit9IHJhd19oZGxjX3Byb3RvOworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IHQzOTE7CisJdW5zaWduZWQgaW50IHQzOTI7CisJdW5zaWduZWQgaW50IG4zOTE7CisJdW5zaWduZWQgaW50IG4zOTI7CisJdW5zaWduZWQgaW50IG4zOTM7CisJdW5zaWduZWQgc2hvcnQgbG1pOworCXVuc2lnbmVkIHNob3J0IGRjZTsgLyogMSBmb3IgRENFIChuZXR3b3JrIHNpZGUpIG9wZXJhdGlvbiAqLworfSBmcl9wcm90bzsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBkbGNpOworfSBmcl9wcm90b19wdmM7ICAgICAgICAgIC8qIGZvciBjcmVhdGluZy9kZWxldGluZyBGUiBQVkNzICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgZGxjaTsKKwljaGFyIG1hc3RlcltJRk5BTVNJWl07CS8qIE5hbWUgb2YgbWFzdGVyIEZSQUQgZGV2aWNlICovCit9ZnJfcHJvdG9fcHZjX2luZm87CQkvKiBmb3IgcmV0dXJuaW5nIFBWQyBpbmZvcm1hdGlvbiBvbmx5ICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBpbnQgaW50ZXJ2YWw7CisgICAgdW5zaWduZWQgaW50IHRpbWVvdXQ7Cit9IGNpc2NvX3Byb3RvOworCisvKiBQUFAgZG9lc24ndCBuZWVkIGFueSBpbmZvIG5vdyAtIHN1cHBseSBsZW5ndGggPSAwIHRvIGlvY3RsICovCisKKyNlbmRpZiAvKiBfX0hETENfSU9DVExfSF9fICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaGRsY2Rydi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2hkbGNkcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjJkOTY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2hkbGNkcnYuaApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIGhkbGNkcnYuaCAgLS0gSERMQyBwYWNrZXQgcmFkaW8gbmV0d29yayBkcml2ZXIuCisgKiBUaGUgTGludXggc291bmRjYXJkIGRyaXZlciBmb3IgMTIwMCBiYXVkIGFuZCA5NjAwIGJhdWQgcGFja2V0IHJhZGlvCisgKiAoQykgMTk5Ni0xOTk4IGJ5IFRob21hcyBTYWlsZXIsIEhCOUpOWC9BRTRXQQorICovCisKKyNpZm5kZWYgX0hETENEUlZfSAorI2RlZmluZSBfSERMQ0RSVl9ICisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogc3RydWN0cyBmb3IgdGhlIElPQ1RMIGNvbW1hbmRzCisgKi8KKworc3RydWN0IGhkbGNkcnZfcGFyYW1zIHsKKwlpbnQgaW9iYXNlOworCWludCBpcnE7CisJaW50IGRtYTsKKwlpbnQgZG1hMjsKKwlpbnQgc2VyaW9iYXNlOworCWludCBwYXJpb2Jhc2U7CisJaW50IG1pZGlpb2Jhc2U7Cit9OwkKKworc3RydWN0IGhkbGNkcnZfY2hhbm5lbF9wYXJhbXMgeworCWludCB0eF9kZWxheTsgIC8qIHRoZSB0cmFuc21pdHRlciBrZXl1cCBkZWxheSBpbiAxMG1zIHVuaXRzICovCisJaW50IHR4X3RhaWw7ICAgLyogdGhlIHRyYW5zbWl0dGVyIGtleW9mZiBkZWxheSBpbiAxMG1zIHVuaXRzICovCisJaW50IHNsb3R0aW1lOyAgLyogdGhlIHNsb3R0aW1lIGluIDEwbXM7IHVzdWFsbHkgMTAgPSAxMDBtcyAqLworCWludCBwcGVyc2lzdDsgIC8qIHRoZSBwLXBlcnNpc3RlbmNlIDAuLjI1NSAqLworCWludCBmdWxsZHVwOyAgIC8qIHNvbWUgZHJpdmVyIGRvIG5vdCBzdXBwb3J0IGZ1bGwgZHVwbGV4LCBzZXR0aW5nICovCisJICAgICAgICAgICAgICAgLyogdGhpcyBqdXN0IG1ha2VzIHRoZW0gc2VuZCBldmVuIGlmIERDRCBpcyBvbiAqLworfTsJCisKK3N0cnVjdCBoZGxjZHJ2X29sZF9jaGFubmVsX3N0YXRlIHsKKyAgCWludCBwdHQ7CisgIAlpbnQgZGNkOworICAJaW50IHB0dF9rZXllZDsKK307CisKK3N0cnVjdCBoZGxjZHJ2X2NoYW5uZWxfc3RhdGUgeworIAlpbnQgcHR0OworIAlpbnQgZGNkOworIAlpbnQgcHR0X2tleWVkOworIAl1bnNpZ25lZCBsb25nIHR4X3BhY2tldHM7CisgCXVuc2lnbmVkIGxvbmcgdHhfZXJyb3JzOworIAl1bnNpZ25lZCBsb25nIHJ4X3BhY2tldHM7CisgCXVuc2lnbmVkIGxvbmcgcnhfZXJyb3JzOworfTsKKworc3RydWN0IGhkbGNkcnZfaW9jdGwgeworCWludCBjbWQ7CisJdW5pb24geworCQlzdHJ1Y3QgaGRsY2Rydl9wYXJhbXMgbXA7CisJCXN0cnVjdCBoZGxjZHJ2X2NoYW5uZWxfcGFyYW1zIGNwOworCQlzdHJ1Y3QgaGRsY2Rydl9jaGFubmVsX3N0YXRlIGNzOworCQlzdHJ1Y3QgaGRsY2Rydl9vbGRfY2hhbm5lbF9zdGF0ZSBvY3M7CisJCXVuc2lnbmVkIGludCBjYWxpYnJhdGU7CisJCXVuc2lnbmVkIGNoYXIgYml0czsKKwkJY2hhciBtb2RlbmFtZVsxMjhdOworCQljaGFyIGRyaXZlcm5hbWVbMzJdOworCX0gZGF0YTsKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBpb2N0bCB2YWx1ZXMKKyAqLworI2RlZmluZSBIRExDRFJWQ1RMX0dFVE1PREVNUEFSICAgICAgIDAKKyNkZWZpbmUgSERMQ0RSVkNUTF9TRVRNT0RFTVBBUiAgICAgICAxCisjZGVmaW5lIEhETENEUlZDVExfTU9ERU1QQVJNQVNLICAgICAgMiAgLyogbm90IGhhbmRsZWQgYnkgaGRsY2RydiAqLworI2RlZmluZSBIRExDRFJWQ1RMX0dFVENIQU5ORUxQQVIgICAgMTAKKyNkZWZpbmUgSERMQ0RSVkNUTF9TRVRDSEFOTkVMUEFSICAgIDExCisjZGVmaW5lIEhETENEUlZDVExfT0xER0VUU1RBVCAgICAgICAyMAorI2RlZmluZSBIRExDRFJWQ1RMX0NBTElCUkFURSAgICAgICAgMjEKKyNkZWZpbmUgSERMQ0RSVkNUTF9HRVRTVEFUICAgICAgICAgIDIyCisKKy8qCisgKiB0aGVzZSBhcmUgbWFpbmx5IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMKKyAqLworI2RlZmluZSBIRExDRFJWQ1RMX0dFVFNBTVBMRVMgICAgICAgMzAKKyNkZWZpbmUgSERMQ0RSVkNUTF9HRVRCSVRTICAgICAgICAgIDMxCisKKy8qCisgKiBub3QgaGFuZGxlZCBieSBoZGxjZHJ2LCBidXQgYnkgaXRzIGRlcGVuZGluZyBkcml2ZXJzCisgKi8KKyNkZWZpbmUgSERMQ0RSVkNUTF9HRVRNT0RFICAgICAgICAgIDQwCisjZGVmaW5lIEhETENEUlZDVExfU0VUTU9ERSAgICAgICAgICA0MQorI2RlZmluZSBIRExDRFJWQ1RMX01PREVMSVNUICAgICAgICAgNDIKKyNkZWZpbmUgSERMQ0RSVkNUTF9EUklWRVJOQU1FICAgICAgIDQzCisKKy8qCisgKiBtYXNrIG9mIG5lZWRlZCBtb2RlbSBwYXJhbWV0ZXJzLCByZXR1cm5lZCBieSBIRExDRFJWQ1RMX01PREVNUEFSTUFTSworICovCisjZGVmaW5lIEhETENEUlZfUEFSTUFTS19JT0JBU0UgICAgICAoMTw8MCkKKyNkZWZpbmUgSERMQ0RSVl9QQVJNQVNLX0lSUSAgICAgICAgICgxPDwxKQorI2RlZmluZSBIRExDRFJWX1BBUk1BU0tfRE1BICAgICAgICAgKDE8PDIpCisjZGVmaW5lIEhETENEUlZfUEFSTUFTS19ETUEyICAgICAgICAoMTw8MykKKyNkZWZpbmUgSERMQ0RSVl9QQVJNQVNLX1NFUklPQkFTRSAgICgxPDw0KQorI2RlZmluZSBIRExDRFJWX1BBUk1BU0tfUEFSSU9CQVNFICAgKDE8PDUpCisjZGVmaW5lIEhETENEUlZfUEFSTUFTS19NSURJSU9CQVNFICAoMTw8NikKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZW5kaWYgLyogX0hETENEUlZfSCAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2hkcmVnLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaGRyZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzQxNzNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2hkcmVnLmgKQEAgLTAsMCArMSw2NDIgQEAKKyNpZm5kZWYgX0xJTlVYX0hEUkVHX0gKKyNkZWZpbmUgX0xJTlVYX0hEUkVHX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBDb21tYW5kIEhlYWRlciBzaXplcyBmb3IgSU9DVEwgY29tbWFuZHMKKyAqLworCisjZGVmaW5lIEhESU9fRFJJVkVfQ01EX0hEUl9TSVpFCQkoNCAqIHNpemVvZihfX3U4KSkKKyNkZWZpbmUgSERJT19EUklWRV9IT0JfSERSX1NJWkUJCSg4ICogc2l6ZW9mKF9fdTgpKQorI2RlZmluZSBIRElPX0RSSVZFX1RBU0tfSERSX1NJWkUJKDggKiBzaXplb2YoX191OCkpCisKKyNkZWZpbmUgSURFX0RSSVZFX1RBU0tfTk9fREFUQQkJMAorI2RlZmluZSBJREVfRFJJVkVfVEFTS19JTlZBTElECQktMQorI2RlZmluZSBJREVfRFJJVkVfVEFTS19TRVRfWEZFUgkJMQorI2RlZmluZSBJREVfRFJJVkVfVEFTS19JTgkJMgorI2RlZmluZSBJREVfRFJJVkVfVEFTS19PVVQJCTMKKyNkZWZpbmUgSURFX0RSSVZFX1RBU0tfUkFXX1dSSVRFCTQKKworLyoKKyAqIERlZmluZSBzdGFuZGFyZCB0YXNrZmlsZSBpbi9vdXQgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBJREVfVEFTS0ZJTEVfU1REX0lOX0ZMQUdTCTB4RkUKKyNkZWZpbmUgSURFX0hPQl9TVERfSU5fRkxBR1MJCTB4M0MKKyNkZWZpbmUgSURFX1RBU0tGSUxFX1NURF9PVVRfRkxBR1MJMHhGRQorI2RlZmluZSBJREVfSE9CX1NURF9PVVRfRkxBR1MJCTB4M0MKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHRhc2tfaW9yZWdfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBzYXRhX2lvcmVnX3Q7CisKK3R5cGVkZWYgdW5pb24gaWRlX3JlZ192YWxpZF9zIHsKKwl1bnNpZ25lZCBhbGwJCQkJOiAxNjsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBkYXRhCQkJOiAxOworCQl1bnNpZ25lZCBlcnJvcl9mZWF0dXJlCQk6IDE7CisJCXVuc2lnbmVkIHNlY3RvcgkJCTogMTsKKwkJdW5zaWduZWQgbnNlY3RvcgkJOiAxOworCQl1bnNpZ25lZCBsY3lsCQkJOiAxOworCQl1bnNpZ25lZCBoY3lsCQkJOiAxOworCQl1bnNpZ25lZCBzZWxlY3QJCQk6IDE7CisJCXVuc2lnbmVkIHN0YXR1c19jb21tYW5kCQk6IDE7CisKKwkJdW5zaWduZWQgZGF0YV9ob2IJCTogMTsKKwkJdW5zaWduZWQgZXJyb3JfZmVhdHVyZV9ob2IJOiAxOworCQl1bnNpZ25lZCBzZWN0b3JfaG9iCQk6IDE7CisJCXVuc2lnbmVkIG5zZWN0b3JfaG9iCQk6IDE7CisJCXVuc2lnbmVkIGxjeWxfaG9iCQk6IDE7CisJCXVuc2lnbmVkIGhjeWxfaG9iCQk6IDE7CisJCXVuc2lnbmVkIHNlbGVjdF9ob2IJCTogMTsKKwkJdW5zaWduZWQgY29udHJvbF9ob2IJCTogMTsKKwl9IGI7Cit9IGlkZV9yZWdfdmFsaWRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaWRlX3Rhc2tfcmVxdWVzdF9zIHsKKwlfX3U4CQlpb19wb3J0c1s4XTsKKwlfX3U4CQlob2JfcG9ydHNbOF07IC8qIGJ5dGVzIDYgYW5kIDcgYXJlIHVudXNlZCAqLworCWlkZV9yZWdfdmFsaWRfdAlvdXRfZmxhZ3M7CisJaWRlX3JlZ192YWxpZF90CWluX2ZsYWdzOworCWludAkJZGF0YV9waGFzZTsKKwlpbnQJCXJlcV9jbWQ7CisJdW5zaWduZWQgbG9uZwlvdXRfc2l6ZTsKKwl1bnNpZ25lZCBsb25nCWluX3NpemU7Cit9IGlkZV90YXNrX3JlcXVlc3RfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaWRlX2lvY3RsX3JlcXVlc3RfcyB7CisJaWRlX3Rhc2tfcmVxdWVzdF90CSp0YXNrX3JlcXVlc3Q7CisJdW5zaWduZWQgY2hhcgkJKm91dF9idWZmZXI7CisJdW5zaWduZWQgY2hhcgkJKmluX2J1ZmZlcjsKK30gaWRlX2lvY3RsX3JlcXVlc3RfdDsKKworc3RydWN0IGhkX2RyaXZlX2NtZF9oZHIgeworCV9fdTggY29tbWFuZDsKKwlfX3U4IHNlY3Rvcl9udW1iZXI7CisJX191OCBmZWF0dXJlOworCV9fdTggc2VjdG9yX2NvdW50OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgaGRfZHJpdmVfdGFza19oZHIgeworCV9fdTggZGF0YTsKKwlfX3U4IGZlYXR1cmU7CisJX191OCBzZWN0b3JfY291bnQ7CisJX191OCBzZWN0b3JfbnVtYmVyOworCV9fdTggbG93X2N5bGluZGVyOworCV9fdTggaGlnaF9jeWxpbmRlcjsKKwlfX3U4IGRldmljZV9oZWFkOworCV9fdTggY29tbWFuZDsKK30gdGFza19zdHJ1Y3RfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGRfZHJpdmVfaG9iX2hkciB7CisJX191OCBkYXRhOworCV9fdTggZmVhdHVyZTsKKwlfX3U4IHNlY3Rvcl9jb3VudDsKKwlfX3U4IHNlY3Rvcl9udW1iZXI7CisJX191OCBsb3dfY3lsaW5kZXI7CisJX191OCBoaWdoX2N5bGluZGVyOworCV9fdTggZGV2aWNlX2hlYWQ7CisJX191OCBjb250cm9sOworfSBob2Jfc3RydWN0X3Q7CisKKyNkZWZpbmUgVEFTS0ZJTEVfTk9fREFUQQkJMHgwMDAwCisKKyNkZWZpbmUgVEFTS0ZJTEVfSU4JCQkweDAwMDEKKyNkZWZpbmUgVEFTS0ZJTEVfTVVMVElfSU4JCTB4MDAwMgorCisjZGVmaW5lIFRBU0tGSUxFX09VVAkJCTB4MDAwNAorI2RlZmluZSBUQVNLRklMRV9NVUxUSV9PVVQJCTB4MDAwOAorI2RlZmluZSBUQVNLRklMRV9JTl9PVVQJCQkweDAwMTAKKworI2RlZmluZSBUQVNLRklMRV9JTl9ETUEJCQkweDAwMjAKKyNkZWZpbmUgVEFTS0ZJTEVfT1VUX0RNQQkJMHgwMDQwCisjZGVmaW5lIFRBU0tGSUxFX0lOX0RNQVEJCTB4MDA4MAorI2RlZmluZSBUQVNLRklMRV9PVVRfRE1BUQkJMHgwMTAwCisKKyNkZWZpbmUgVEFTS0ZJTEVfUF9JTgkJCTB4MDIwMAorI2RlZmluZSBUQVNLRklMRV9QX09VVAkJCTB4MDQwMAorI2RlZmluZSBUQVNLRklMRV9QX0lOX0RNQQkJMHgwODAwCisjZGVmaW5lIFRBU0tGSUxFX1BfT1VUX0RNQQkJMHgxMDAwCisjZGVmaW5lIFRBU0tGSUxFX1BfSU5fRE1BUQkJMHgyMDAwCisjZGVmaW5lIFRBU0tGSUxFX1BfT1VUX0RNQVEJCTB4NDAwMAorI2RlZmluZSBUQVNLRklMRV80OAkJCTB4ODAwMAorI2RlZmluZSBUQVNLRklMRV9JTlZBTElECQkweDdmZmYKKworLyogQVRBL0FUQVBJIENvbW1hbmRzIHByZSBUMTMgU3BlYyAqLworI2RlZmluZSBXSU5fTk9QCQkJCTB4MDAKKy8qCisgKgkweDAxLT4weDAyIFJlc2VydmVkCisgKi8KKyNkZWZpbmUgQ0ZBX1JFUV9FWFRfRVJST1JfQ09ERQkJMHgwMyAvKiBDRkEgUmVxdWVzdCBFeHRlbmRlZCBFcnJvciBDb2RlICovCisvKgorICoJMHgwNC0+MHgwNyBSZXNlcnZlZAorICovCisjZGVmaW5lIFdJTl9TUlNUCQkJMHgwOCAvKiBBVEFQSSBzb2Z0IHJlc2V0IGNvbW1hbmQgKi8KKyNkZWZpbmUgV0lOX0RFVklDRV9SRVNFVAkJMHgwOAorLyoKKyAqCTB4MDktPjB4MEYgUmVzZXJ2ZWQKKyAqLworI2RlZmluZSBXSU5fUkVDQUwJCQkweDEwCisjZGVmaW5lIFdJTl9SRVNUT1JFCQkJV0lOX1JFQ0FMCisvKgorICoJMHgxMC0+MHgxRiBSZXNlcnZlZAorICovCisjZGVmaW5lIFdJTl9SRUFECQkJMHgyMCAvKiAyOC1CaXQgKi8KKyNkZWZpbmUgV0lOX1JFQURfT05DRQkJCTB4MjEgLyogMjgtQml0IHdpdGhvdXQgcmV0cmllcyAqLworI2RlZmluZSBXSU5fUkVBRF9MT05HCQkJMHgyMiAvKiAyOC1CaXQgKi8KKyNkZWZpbmUgV0lOX1JFQURfTE9OR19PTkNFCQkweDIzIC8qIDI4LUJpdCB3aXRob3V0IHJldHJpZXMgKi8KKyNkZWZpbmUgV0lOX1JFQURfRVhUCQkJMHgyNCAvKiA0OC1CaXQgKi8KKyNkZWZpbmUgV0lOX1JFQURETUFfRVhUCQkJMHgyNSAvKiA0OC1CaXQgKi8KKyNkZWZpbmUgV0lOX1JFQURETUFfUVVFVUVEX0VYVAkJMHgyNiAvKiA0OC1CaXQgKi8KKyNkZWZpbmUgV0lOX1JFQURfTkFUSVZFX01BWF9FWFQJCTB4MjcgLyogNDgtQml0ICovCisvKgorICoJMHgyOAorICovCisjZGVmaW5lIFdJTl9NVUxUUkVBRF9FWFQJCTB4MjkgLyogNDgtQml0ICovCisvKgorICoJMHgyQS0+MHgyRiBSZXNlcnZlZAorICovCisjZGVmaW5lIFdJTl9XUklURQkJCTB4MzAgLyogMjgtQml0ICovCisjZGVmaW5lIFdJTl9XUklURV9PTkNFCQkJMHgzMSAvKiAyOC1CaXQgd2l0aG91dCByZXRyaWVzICovCisjZGVmaW5lIFdJTl9XUklURV9MT05HCQkJMHgzMiAvKiAyOC1CaXQgKi8KKyNkZWZpbmUgV0lOX1dSSVRFX0xPTkdfT05DRQkJMHgzMyAvKiAyOC1CaXQgd2l0aG91dCByZXRyaWVzICovCisjZGVmaW5lIFdJTl9XUklURV9FWFQJCQkweDM0IC8qIDQ4LUJpdCAqLworI2RlZmluZSBXSU5fV1JJVEVETUFfRVhUCQkweDM1IC8qIDQ4LUJpdCAqLworI2RlZmluZSBXSU5fV1JJVEVETUFfUVVFVUVEX0VYVAkJMHgzNiAvKiA0OC1CaXQgKi8KKyNkZWZpbmUgV0lOX1NFVF9NQVhfRVhUCQkJMHgzNyAvKiA0OC1CaXQgKi8KKyNkZWZpbmUgQ0ZBX1dSSVRFX1NFQ1RfV09fRVJBU0UJCTB4MzggLyogQ0ZBIFdyaXRlIFNlY3RvcnMgd2l0aG91dCBlcmFzZSAqLworI2RlZmluZSBXSU5fTVVMVFdSSVRFX0VYVAkJMHgzOSAvKiA0OC1CaXQgKi8KKy8qCisgKgkweDNBLT4weDNCIFJlc2VydmVkCisgKi8KKyNkZWZpbmUgV0lOX1dSSVRFX1ZFUklGWQkJMHgzQyAvKiAyOC1CaXQgKi8KKy8qCisgKgkweDNELT4weDNGIFJlc2VydmVkCisgKi8KKyNkZWZpbmUgV0lOX1ZFUklGWQkJCTB4NDAgLyogMjgtQml0IC0gUmVhZCBWZXJpZnkgU2VjdG9ycyAqLworI2RlZmluZSBXSU5fVkVSSUZZX09OQ0UJCQkweDQxIC8qIDI4LUJpdCAtIHdpdGhvdXQgcmV0cmllcyAqLworI2RlZmluZSBXSU5fVkVSSUZZX0VYVAkJCTB4NDIgLyogNDgtQml0ICovCisvKgorICoJMHg0My0+MHg0RiBSZXNlcnZlZAorICovCisjZGVmaW5lIFdJTl9GT1JNQVQJCQkweDUwCisvKgorICoJMHg1MS0+MHg1RiBSZXNlcnZlZAorICovCisjZGVmaW5lIFdJTl9JTklUCQkJMHg2MAorLyoKKyAqCTB4NjEtPjB4NUYgUmVzZXJ2ZWQKKyAqLworI2RlZmluZSBXSU5fU0VFSwkJCTB4NzAgLyogMHg3MC0weDdGIFJlc2VydmVkICovCisKKyNkZWZpbmUgQ0ZBX1RSQU5TTEFURV9TRUNUT1IJCTB4ODcgLyogQ0ZBIFRyYW5zbGF0ZSBTZWN0b3IgKi8KKyNkZWZpbmUgV0lOX0RJQUdOT1NFCQkJMHg5MAorI2RlZmluZSBXSU5fU1BFQ0lGWQkJCTB4OTEgLyogc2V0IGRyaXZlIGdlb21ldHJ5IHRyYW5zbGF0aW9uICovCisjZGVmaW5lIFdJTl9ET1dOTE9BRF9NSUNST0NPREUJCTB4OTIKKyNkZWZpbmUgV0lOX1NUQU5EQllOT1cyCQkJMHg5NAorI2RlZmluZSBXSU5fU1RBTkRCWTIJCQkweDk2CisjZGVmaW5lIFdJTl9TRVRJRExFMgkJCTB4OTcKKyNkZWZpbmUgV0lOX0NIRUNLUE9XRVJNT0RFMgkJMHg5OAorI2RlZmluZSBXSU5fU0xFRVBOT1cyCQkJMHg5OQorLyoKKyAqCTB4OUEgVkVORE9SCisgKi8KKyNkZWZpbmUgV0lOX1BBQ0tFVENNRAkJCTB4QTAgLyogU2VuZCBhIHBhY2tldCBjb21tYW5kLiAqLworI2RlZmluZSBXSU5fUElERU5USUZZCQkJMHhBMSAvKiBpZGVudGlmeSBBVEFQSSBkZXZpY2UJKi8KKyNkZWZpbmUgV0lOX1FVRVVFRF9TRVJWSUNFCQkweEEyCisjZGVmaW5lIFdJTl9TTUFSVAkJCTB4QjAgLyogc2VsZi1tb25pdG9yaW5nIGFuZCByZXBvcnRpbmcgKi8KKyNkZWZpbmUgQ0ZBX0VSQVNFX1NFQ1RPUlMJCTB4QzAKKyNkZWZpbmUgV0lOX01VTFRSRUFECQkJMHhDNCAvKiByZWFkIHNlY3RvcnMgdXNpbmcgbXVsdGlwbGUgbW9kZSovCisjZGVmaW5lIFdJTl9NVUxUV1JJVEUJCQkweEM1IC8qIHdyaXRlIHNlY3RvcnMgdXNpbmcgbXVsdGlwbGUgbW9kZSAqLworI2RlZmluZSBXSU5fU0VUTVVMVAkJCTB4QzYgLyogZW5hYmxlL2Rpc2FibGUgbXVsdGlwbGUgbW9kZSAqLworI2RlZmluZSBXSU5fUkVBRERNQV9RVUVVRUQJCTB4QzcgLyogcmVhZCBzZWN0b3JzIHVzaW5nIFF1ZXVlZCBETUEgdHJhbnNmZXJzICovCisjZGVmaW5lIFdJTl9SRUFERE1BCQkJMHhDOCAvKiByZWFkIHNlY3RvcnMgdXNpbmcgRE1BIHRyYW5zZmVycyAqLworI2RlZmluZSBXSU5fUkVBRERNQV9PTkNFCQkweEM5IC8qIDI4LUJpdCAtIHdpdGhvdXQgcmV0cmllcyAqLworI2RlZmluZSBXSU5fV1JJVEVETUEJCQkweENBIC8qIHdyaXRlIHNlY3RvcnMgdXNpbmcgRE1BIHRyYW5zZmVycyAqLworI2RlZmluZSBXSU5fV1JJVEVETUFfT05DRQkJMHhDQiAvKiAyOC1CaXQgLSB3aXRob3V0IHJldHJpZXMgKi8KKyNkZWZpbmUgV0lOX1dSSVRFRE1BX1FVRVVFRAkJMHhDQyAvKiB3cml0ZSBzZWN0b3JzIHVzaW5nIFF1ZXVlZCBETUEgdHJhbnNmZXJzICovCisjZGVmaW5lIENGQV9XUklURV9NVUxUSV9XT19FUkFTRQkweENEIC8qIENGQSBXcml0ZSBtdWx0aXBsZSB3aXRob3V0IGVyYXNlICovCisjZGVmaW5lIFdJTl9HRVRNRURJQVNUQVRVUwkJMHhEQQorI2RlZmluZSBXSU5fQUNLTUVESUFDSEFOR0UJCTB4REIgLyogQVRBLTEsIEFUQS0yIHZlbmRvciAqLworI2RlZmluZSBXSU5fUE9TVEJPT1QJCQkweERDCisjZGVmaW5lIFdJTl9QUkVCT09UIAkJCTB4REQKKyNkZWZpbmUgV0lOX0RPT1JMT0NLCQkJMHhERSAvKiBsb2NrIGRvb3Igb24gcmVtb3ZhYmxlIGRyaXZlcyAqLworI2RlZmluZSBXSU5fRE9PUlVOTE9DSwkJCTB4REYgLyogdW5sb2NrIGRvb3Igb24gcmVtb3ZhYmxlIGRyaXZlcyAqLworI2RlZmluZSBXSU5fU1RBTkRCWU5PVzEJCQkweEUwCisjZGVmaW5lIFdJTl9JRExFSU1NRURJQVRFCQkweEUxIC8qIGZvcmNlIGRyaXZlIHRvIGJlY29tZSAicmVhZHkiICovCisjZGVmaW5lIFdJTl9TVEFOREJZCQkJMHhFMiAvKiBTZXQgZGV2aWNlIGluIFN0YW5kYnkgTW9kZSAqLworI2RlZmluZSBXSU5fU0VUSURMRTEJCQkweEUzCisjZGVmaW5lIFdJTl9SRUFEX0JVRkZFUgkJCTB4RTQgLyogZm9yY2UgcmVhZCBvbmx5IDEgc2VjdG9yICovCisjZGVmaW5lIFdJTl9DSEVDS1BPV0VSTU9ERTEJCTB4RTUKKyNkZWZpbmUgV0lOX1NMRUVQTk9XMQkJCTB4RTYKKyNkZWZpbmUgV0lOX0ZMVVNIX0NBQ0hFCQkJMHhFNworI2RlZmluZSBXSU5fV1JJVEVfQlVGRkVSCQkweEU4IC8qIGZvcmNlIHdyaXRlIG9ubHkgMSBzZWN0b3IgKi8KKyNkZWZpbmUgV0lOX1dSSVRFX1NBTUUJCQkweEU5IC8qIHJlYWQgYXRhLTIgdG8gdXNlICovCisJLyogU0VUX0ZFQVRVUkVTIDB4MjIgb3IgMHhERCAqLworI2RlZmluZSBXSU5fRkxVU0hfQ0FDSEVfRVhUCQkweEVBIC8qIDQ4LUJpdCAqLworI2RlZmluZSBXSU5fSURFTlRJRlkJCQkweEVDIC8qIGFzayBkcml2ZSB0byBpZGVudGlmeSBpdHNlbGYJKi8KKyNkZWZpbmUgV0lOX01FRElBRUpFQ1QJCQkweEVECisjZGVmaW5lIFdJTl9JREVOVElGWV9ETUEJCTB4RUUgLyogc2FtZSBhcyBXSU5fSURFTlRJRlksIGJ1dCBETUEgKi8KKyNkZWZpbmUgV0lOX1NFVEZFQVRVUkVTCQkJMHhFRiAvKiBzZXQgc3BlY2lhbCBkcml2ZSBmZWF0dXJlcyAqLworI2RlZmluZSBFWEFCWVRFX0VOQUJMRV9ORVNUCQkweEYwCisjZGVmaW5lIFdJTl9TRUNVUklUWV9TRVRfUEFTUwkJMHhGMQorI2RlZmluZSBXSU5fU0VDVVJJVFlfVU5MT0NLCQkweEYyCisjZGVmaW5lIFdJTl9TRUNVUklUWV9FUkFTRV9QUkVQQVJFCTB4RjMKKyNkZWZpbmUgV0lOX1NFQ1VSSVRZX0VSQVNFX1VOSVQJCTB4RjQKKyNkZWZpbmUgV0lOX1NFQ1VSSVRZX0ZSRUVaRV9MT0NLCTB4RjUKKyNkZWZpbmUgV0lOX1NFQ1VSSVRZX0RJU0FCTEUJCTB4RjYKKyNkZWZpbmUgV0lOX1JFQURfTkFUSVZFX01BWAkJMHhGOCAvKiByZXR1cm4gdGhlIG5hdGl2ZSBtYXhpbXVtIGFkZHJlc3MgKi8KKyNkZWZpbmUgV0lOX1NFVF9NQVgJCQkweEY5CisjZGVmaW5lIERJU0FCTEVfU0VBR0FURQkJCTB4RkIKKworLyogV0lOX1NNQVJUIHN1Yi1jb21tYW5kcyAqLworCisjZGVmaW5lIFNNQVJUX1JFQURfVkFMVUVTCQkweEQwCisjZGVmaW5lIFNNQVJUX1JFQURfVEhSRVNIT0xEUwkJMHhEMQorI2RlZmluZSBTTUFSVF9BVVRPU0FWRQkJCTB4RDIKKyNkZWZpbmUgU01BUlRfU0FWRQkJCTB4RDMKKyNkZWZpbmUgU01BUlRfSU1NRURJQVRFX09GRkxJTkUJCTB4RDQKKyNkZWZpbmUgU01BUlRfUkVBRF9MT0dfU0VDVE9SCQkweEQ1CisjZGVmaW5lIFNNQVJUX1dSSVRFX0xPR19TRUNUT1IJCTB4RDYKKyNkZWZpbmUgU01BUlRfV1JJVEVfVEhSRVNIT0xEUwkJMHhENworI2RlZmluZSBTTUFSVF9FTkFCTEUJCQkweEQ4CisjZGVmaW5lIFNNQVJUX0RJU0FCTEUJCQkweEQ5CisjZGVmaW5lIFNNQVJUX1NUQVRVUwkJCTB4REEKKyNkZWZpbmUgU01BUlRfQVVUT19PRkZMSU5FCQkweERCCisKKy8qIFBhc3N3b3JkIHVzZWQgaW4gVEY0ICYgVEY1IGV4ZWN1dGluZyBTTUFSVCBjb21tYW5kcyAqLworCisjZGVmaW5lIFNNQVJUX0xDWUxfUEFTUwkJCTB4NEYKKyNkZWZpbmUgU01BUlRfSENZTF9QQVNTCQkJMHhDMgorCisvKiBXSU5fU0VURkVBVFVSRVMgc3ViLWNvbW1hbmRzICovCisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOXzhCSVQJMHgwMQkvKiBFbmFibGUgOC1CaXQgVHJhbnNmZXJzICovCisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOX1dDQUNIRQkweDAyCS8qIEVuYWJsZSB3cml0ZSBjYWNoZSAqLworI2RlZmluZSBTRVRGRUFUVVJFU19ESVNfREVGRUNUCTB4MDQJLyogRGlzYWJsZSBEZWZlY3QgTWFuYWdlbWVudCAqLworI2RlZmluZSBTRVRGRUFUVVJFU19FTl9BUE0JMHgwNQkvKiBFbmFibGUgYWR2YW5jZWQgcG93ZXIgbWFuYWdlbWVudCAqLworI2RlZmluZSBTRVRGRUFUVVJFU19FTl9TQU1FX1IJMHgyMgkvKiBmb3IgYSByZWdpb24gQVRBLTEgKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfRElTX01TTgkweDMxCS8qIERpc2FibGUgTWVkaWEgU3RhdHVzIE5vdGlmaWNhdGlvbiAqLworI2RlZmluZSBTRVRGRUFUVVJFU19ESVNfUkVUUlkJMHgzMwkvKiBEaXNhYmxlIFJldHJ5ICovCisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOX0FBTQkweDQyCS8qIEVuYWJsZSBBdXRvbWF0aWMgQWNvdXN0aWMgTWFuYWdlbWVudCAqLworI2RlZmluZSBTRVRGRUFUVVJFU19SV19MT05HCTB4NDQJLyogU2V0IExlbmd0aCBvZiBWUyBieXRlcyAqLworI2RlZmluZSBTRVRGRUFUVVJFU19TRVRfQ0FDSEUJMHg1NAkvKiBTZXQgQ2FjaGUgc2VnbWVudHMgdG8gU0MgUmVnLiBWYWwgKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfRElTX1JMQQkweDU1CS8qIERpc2FibGUgcmVhZCBsb29rLWFoZWFkIGZlYXR1cmUgKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfRU5fUkkJMHg1RAkvKiBFbmFibGUgcmVsZWFzZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfRU5fU0kJMHg1RQkvKiBFbmFibGUgU0VSVklDRSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfRElTX1JQT0QJMHg2NgkvKiBEaXNhYmxlIHJldmVydGluZyB0byBwb3dlciBvbiBkZWZhdWx0cyAqLworI2RlZmluZSBTRVRGRUFUVVJFU19ESVNfRUNDCTB4NzcJLyogRGlzYWJsZSBFQ0MgYnl0ZSBjb3VudCAqLworI2RlZmluZSBTRVRGRUFUVVJFU19ESVNfOEJJVAkweDgxCS8qIERpc2FibGUgOC1CaXQgVHJhbnNmZXJzICovCisjZGVmaW5lIFNFVEZFQVRVUkVTX0RJU19XQ0FDSEUJMHg4MgkvKiBEaXNhYmxlIHdyaXRlIGNhY2hlICovCisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOX0RFRkVDVAkweDg0CS8qIEVuYWJsZSBEZWZlY3QgTWFuYWdlbWVudCAqLworI2RlZmluZSBTRVRGRUFUVVJFU19ESVNfQVBNCTB4ODUJLyogRGlzYWJsZSBhZHZhbmNlZCBwb3dlciBtYW5hZ2VtZW50ICovCisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOX0VDQwkweDg4CS8qIEVuYWJsZSBFQ0MgYnl0ZSBjb3VudCAqLworI2RlZmluZSBTRVRGRUFUVVJFU19FTl9NU04JMHg5NQkvKiBFbmFibGUgTWVkaWEgU3RhdHVzIE5vdGlmaWNhdGlvbiAqLworI2RlZmluZSBTRVRGRUFUVVJFU19FTl9SRVRSWQkweDk5CS8qIEVuYWJsZSBSZXRyeSAqLworI2RlZmluZSBTRVRGRUFUVVJFU19FTl9STEEJMHhBQQkvKiBFbmFibGUgcmVhZCBsb29rLWFoZWFkIGZlYXR1cmUgKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfUFJFRkVUQ0gJMHhBQgkvKiBTZXRzIGRyaXZlIHByZWZldGNoIHZhbHVlICovCisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOX1JFU1QJMHhBQwkvKiBBVEEtMSAqLworI2RlZmluZSBTRVRGRUFUVVJFU180Ql9SV19MT05HCTB4QkIJLyogU2V0IExlbmd0aCBvZiA0IGJ5dGVzICovCisjZGVmaW5lIFNFVEZFQVRVUkVTX0RJU19BQU0JMHhDMgkvKiBEaXNhYmxlIEF1dG9tYXRpYyBBY291c3RpYyBNYW5hZ2VtZW50ICovCisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOX1JQT0QJMHhDQwkvKiBFbmFibGUgcmV2ZXJ0aW5nIHRvIHBvd2VyIG9uIGRlZmF1bHRzICovCisjZGVmaW5lIFNFVEZFQVRVUkVTX0RJU19SSQkweERECS8qIERpc2FibGUgcmVsZWFzZSBpbnRlcnJ1cHQgQVRBUEkgKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfRU5fU0FNRV9NCTB4REQJLyogZm9yIGEgZW50aXJlIGRldmljZSBBVEEtMSAqLworI2RlZmluZSBTRVRGRUFUVVJFU19ESVNfU0kJMHhERQkvKiBEaXNhYmxlIFNFUlZJQ0UgaW50ZXJydXB0IEFUQVBJICovCisKKy8qIFdJTl9TRUNVUklUWSBzdWItY29tbWFuZHMgKi8KKworI2RlZmluZSBTRUNVUklUWV9TRVRfUEFTU1dPUkQJCTB4QkEKKyNkZWZpbmUgU0VDVVJJVFlfVU5MT0NLCQkJMHhCQgorI2RlZmluZSBTRUNVUklUWV9FUkFTRV9QUkVQQVJFCQkweEJDCisjZGVmaW5lIFNFQ1VSSVRZX0VSQVNFX1VOSVQJCTB4QkQKKyNkZWZpbmUgU0VDVVJJVFlfRlJFRVpFX0xPQ0sJCTB4QkUKKyNkZWZpbmUgU0VDVVJJVFlfRElTQUJMRV9QQVNTV09SRAkweEJGCisKK3N0cnVjdCBoZF9nZW9tZXRyeSB7CisgICAgICB1bnNpZ25lZCBjaGFyIGhlYWRzOworICAgICAgdW5zaWduZWQgY2hhciBzZWN0b3JzOworICAgICAgdW5zaWduZWQgc2hvcnQgY3lsaW5kZXJzOworICAgICAgdW5zaWduZWQgbG9uZyBzdGFydDsKK307CisKKy8qIGhkL2lkZSBjdGwncyB0aGF0IHBhc3MgKGFyZykgcHRycyB0byB1c2VyIHNwYWNlIGFyZSBudW1iZXJlZCAweDAzMG4vMHgwMzFuICovCisjZGVmaW5lIEhESU9fR0VUR0VPCQkweDAzMDEJLyogZ2V0IGRldmljZSBnZW9tZXRyeSAqLworI2RlZmluZSBIRElPX0dFVF9VTk1BU0tJTlRSCTB4MDMwMgkvKiBnZXQgY3VycmVudCB1bm1hc2sgc2V0dGluZyAqLworI2RlZmluZSBIRElPX0dFVF9NVUxUQ09VTlQJMHgwMzA0CS8qIGdldCBjdXJyZW50IElERSBibG9ja21vZGUgc2V0dGluZyAqLworI2RlZmluZSBIRElPX0dFVF9RRE1BCQkweDAzMDUJLyogZ2V0IHVzZS1xZG1hIGZsYWcgKi8KKworI2RlZmluZSBIRElPX1NFVF9YRkVSCQkweDAzMDYgIC8qIHNldCB0cmFuc2ZlciByYXRlIHZpYSBwcm9jICovCisKKyNkZWZpbmUgSERJT19PQlNPTEVURV9JREVOVElUWQkweDAzMDcJLyogT0JTT0xFVEUsIERPIE5PVCBVU0U6IHJldHVybnMgMTQyIGJ5dGVzICovCisjZGVmaW5lIEhESU9fR0VUX0tFRVBTRVRUSU5HUwkweDAzMDgJLyogZ2V0IGtlZXAtc2V0dGluZ3Mtb24tcmVzZXQgZmxhZyAqLworI2RlZmluZSBIRElPX0dFVF8zMkJJVAkJMHgwMzA5CS8qIGdldCBjdXJyZW50IGlvXzMyYml0IHNldHRpbmcgKi8KKyNkZWZpbmUgSERJT19HRVRfTk9XRVJSCQkweDAzMGEJLyogZ2V0IGlnbm9yZS13cml0ZS1lcnJvciBmbGFnICovCisjZGVmaW5lIEhESU9fR0VUX0RNQQkJMHgwMzBiCS8qIGdldCB1c2UtZG1hIGZsYWcgKi8KKyNkZWZpbmUgSERJT19HRVRfTklDRQkJMHgwMzBjCS8qIGdldCBuaWNlIGZsYWdzICovCisjZGVmaW5lIEhESU9fR0VUX0lERU5USVRZCTB4MDMwZAkvKiBnZXQgSURFIGlkZW50aWZpY2F0aW9uIGluZm8gKi8KKyNkZWZpbmUgSERJT19HRVRfV0NBQ0hFCQkweDAzMGUJLyogZ2V0IHdyaXRlIGNhY2hlIG1vZGUgb258b2ZmICovCisjZGVmaW5lIEhESU9fR0VUX0FDT1VTVElDCTB4MDMwZgkvKiBnZXQgYWNvdXN0aWMgdmFsdWUgKi8KKyNkZWZpbmUJSERJT19HRVRfQUREUkVTUwkweDAzMTAJLyogKi8KKworI2RlZmluZSBIRElPX0dFVF9CVVNTVEFURQkweDAzMWEJLyogZ2V0IHRoZSBidXMgc3RhdGUgb2YgdGhlIGh3aWYgKi8KKyNkZWZpbmUgSERJT19UUklTVEFURV9IV0lGCTB4MDMxYgkvKiBleGVjdXRlIGEgY2hhbm5lbCB0cmlzdGF0ZSAqLworI2RlZmluZSBIRElPX0RSSVZFX1JFU0VUCTB4MDMxYwkvKiBleGVjdXRlIGEgZGV2aWNlIHJlc2V0ICovCisjZGVmaW5lIEhESU9fRFJJVkVfVEFTS0ZJTEUJMHgwMzFkCS8qIGV4ZWN1dGUgcmF3IHRhc2tmaWxlICovCisjZGVmaW5lIEhESU9fRFJJVkVfVEFTSwkJMHgwMzFlCS8qIGV4ZWN1dGUgdGFzayBhbmQgc3BlY2lhbCBkcml2ZSBjb21tYW5kICovCisjZGVmaW5lIEhESU9fRFJJVkVfQ01ECQkweDAzMWYJLyogZXhlY3V0ZSBhIHNwZWNpYWwgZHJpdmUgY29tbWFuZCAqLworI2RlZmluZSBIRElPX0RSSVZFX0NNRF9BRUIJSERJT19EUklWRV9UQVNLCisKKy8qIGhkL2lkZSBjdGwncyB0aGF0IHBhc3MgKGFyZykgbm9uLXB0ciB2YWx1ZXMgYXJlIG51bWJlcmVkIDB4MDMybi8weDAzM24gKi8KKyNkZWZpbmUgSERJT19TRVRfTVVMVENPVU5UCTB4MDMyMQkvKiBjaGFuZ2UgSURFIGJsb2NrbW9kZSAqLworI2RlZmluZSBIRElPX1NFVF9VTk1BU0tJTlRSCTB4MDMyMgkvKiBwZXJtaXQgb3RoZXIgaXJxcyBkdXJpbmcgSS9PICovCisjZGVmaW5lIEhESU9fU0VUX0tFRVBTRVRUSU5HUwkweDAzMjMJLyoga2VlcCBpb2N0bCBzZXR0aW5ncyBvbiByZXNldCAqLworI2RlZmluZSBIRElPX1NFVF8zMkJJVAkJMHgwMzI0CS8qIGNoYW5nZSBpb18zMmJpdCBmbGFncyAqLworI2RlZmluZSBIRElPX1NFVF9OT1dFUlIJCTB4MDMyNQkvKiBjaGFuZ2UgaWdub3JlLXdyaXRlLWVycm9yIGZsYWcgKi8KKyNkZWZpbmUgSERJT19TRVRfRE1BCQkweDAzMjYJLyogY2hhbmdlIHVzZS1kbWEgZmxhZyAqLworI2RlZmluZSBIRElPX1NFVF9QSU9fTU9ERQkweDAzMjcJLyogcmVjb25maWcgaW50ZXJmYWNlIHRvIG5ldyBzcGVlZCAqLworI2RlZmluZSBIRElPX1NDQU5fSFdJRgkJMHgwMzI4CS8qIHJlZ2lzdGVyIGFuZCAocmUpc2NhbiBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgSERJT19VTlJFR0lTVEVSX0hXSUYJMHgwMzJhICAvKiB1bnJlZ2lzdGVyIGludGVyZmFjZSAqLworI2RlZmluZSBIRElPX1NFVF9OSUNFCQkweDAzMjkJLyogc2V0IG5pY2UgZmxhZ3MgKi8KKyNkZWZpbmUgSERJT19TRVRfV0NBQ0hFCQkweDAzMmIJLyogY2hhbmdlIHdyaXRlIGNhY2hlIGVuYWJsZS1kaXNhYmxlICovCisjZGVmaW5lIEhESU9fU0VUX0FDT1VTVElDCTB4MDMyYwkvKiBjaGFuZ2UgYWNvdXN0aWMgYmVoYXZpb3IgKi8KKyNkZWZpbmUgSERJT19TRVRfQlVTU1RBVEUJMHgwMzJkCS8qIHNldCB0aGUgYnVzIHN0YXRlIG9mIHRoZSBod2lmICovCisjZGVmaW5lIEhESU9fU0VUX1FETUEJCTB4MDMyZQkvKiBjaGFuZ2UgdXNlLXFkbWEgZmxhZyAqLworI2RlZmluZSBIRElPX1NFVF9BRERSRVNTCTB4MDMyZgkvKiBjaGFuZ2UgbGJhIGFkZHJlc3NpbmcgbW9kZXMgKi8KKworLyogYnVzIHN0YXRlcyAqLworZW51bSB7CisJQlVTU1RBVEVfT0ZGID0gMCwKKwlCVVNTVEFURV9PTiwKKwlCVVNTVEFURV9UUklTVEFURQorfTsKKworLyogaGQvaWRlIGN0bCdzIHRoYXQgcGFzcyAoYXJnKSBwdHJzIHRvIHVzZXIgc3BhY2UgYXJlIG51bWJlcmVkIDB4MDMzbi8weDAzM24gKi8KKy8qIDB4MzMwIGlzIHJlc2VydmVkIC0gdXNlZCB0byBiZSBIRElPX0dFVEdFT19CSUcgKi8KKy8qIDB4MzMxIGlzIHJlc2VydmVkIC0gdXNlZCB0byBiZSBIRElPX0dFVEdFT19CSUdfUkFXICovCisvKiAweDMzOCBpcyByZXNlcnZlZCAtIHVzZWQgdG8gYmUgSERJT19TRVRfSURFX1NDU0kgKi8KKy8qIDB4MzM5IGlzIHJlc2VydmVkIC0gdXNlZCB0byBiZSBIRElPX1NFVF9TQ1NJX0lERSAqLworCisjZGVmaW5lIF9fTkVXX0hEX0RSSVZFX0lECisKKy8qCisgKiBTdHJ1Y3R1cmUgcmV0dXJuZWQgYnkgSERJT19HRVRfSURFTlRJVFksIGFzIHBlciBBTlNJIE5DSVRTIEFUQTYgcmV2LjFiIHNwZWMuCisgKgorICogSWYgeW91IGNoYW5nZSBzb21ldGhpbmcgaGVyZSwgcGxlYXNlIHJlbWVtYmVyIHRvIHVwZGF0ZSBmaXhfZHJpdmVpZCgpIGluCisgKiBpZGUvcHJvYmUuYy4KKyAqLworc3RydWN0IGhkX2RyaXZlaWQgeworCXVuc2lnbmVkIHNob3J0CWNvbmZpZzsJCS8qIGxvdHMgb2Ygb2Jzb2xldGUgYml0IGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQJY3lsczsJCS8qIE9ic29sZXRlLCAicGh5c2ljYWwiIGN5bHMgKi8KKwl1bnNpZ25lZCBzaG9ydAlyZXNlcnZlZDI7CS8qIHJlc2VydmVkICh3b3JkIDIpICovCisJdW5zaWduZWQgc2hvcnQJaGVhZHM7CQkvKiBPYnNvbGV0ZSwgInBoeXNpY2FsIiBoZWFkcyAqLworCXVuc2lnbmVkIHNob3J0CXRyYWNrX2J5dGVzOwkvKiB1bmZvcm1hdHRlZCBieXRlcyBwZXIgdHJhY2sgKi8KKwl1bnNpZ25lZCBzaG9ydAlzZWN0b3JfYnl0ZXM7CS8qIHVuZm9ybWF0dGVkIGJ5dGVzIHBlciBzZWN0b3IgKi8KKwl1bnNpZ25lZCBzaG9ydAlzZWN0b3JzOwkvKiBPYnNvbGV0ZSwgInBoeXNpY2FsIiBzZWN0b3JzIHBlciB0cmFjayAqLworCXVuc2lnbmVkIHNob3J0CXZlbmRvcjA7CS8qIHZlbmRvciB1bmlxdWUgKi8KKwl1bnNpZ25lZCBzaG9ydAl2ZW5kb3IxOwkvKiB2ZW5kb3IgdW5pcXVlICovCisJdW5zaWduZWQgc2hvcnQJdmVuZG9yMjsJLyogUmV0aXJlZCB2ZW5kb3IgdW5pcXVlICovCisJdW5zaWduZWQgY2hhcglzZXJpYWxfbm9bMjBdOwkvKiAwID0gbm90X3NwZWNpZmllZCAqLworCXVuc2lnbmVkIHNob3J0CWJ1Zl90eXBlOwkvKiBSZXRpcmVkICovCisJdW5zaWduZWQgc2hvcnQJYnVmX3NpemU7CS8qIFJldGlyZWQsIDUxMiBieXRlIGluY3JlbWVudHMKKwkJCQkJICogMCA9IG5vdF9zcGVjaWZpZWQKKwkJCQkJICovCisJdW5zaWduZWQgc2hvcnQJZWNjX2J5dGVzOwkvKiBmb3Igci93IGxvbmcgY21kczsgMCA9IG5vdF9zcGVjaWZpZWQgKi8KKwl1bnNpZ25lZCBjaGFyCWZ3X3Jldls4XTsJLyogMCA9IG5vdF9zcGVjaWZpZWQgKi8KKwl1bnNpZ25lZCBjaGFyCW1vZGVsWzQwXTsJLyogMCA9IG5vdF9zcGVjaWZpZWQgKi8KKwl1bnNpZ25lZCBjaGFyCW1heF9tdWx0c2VjdDsJLyogMD1ub3RfaW1wbGVtZW50ZWQgKi8KKwl1bnNpZ25lZCBjaGFyCXZlbmRvcjM7CS8qIHZlbmRvciB1bmlxdWUgKi8KKwl1bnNpZ25lZCBzaG9ydAlkd29yZF9pbzsJLyogMD1ub3RfaW1wbGVtZW50ZWQ7IDE9aW1wbGVtZW50ZWQgKi8KKwl1bnNpZ25lZCBjaGFyCXZlbmRvcjQ7CS8qIHZlbmRvciB1bmlxdWUgKi8KKwl1bnNpZ25lZCBjaGFyCWNhcGFiaWxpdHk7CS8qICh1cHBlciBieXRlIG9mIHdvcmQgNDkpCisJCQkJCSAqICAzOglJT1JEWXN1cAorCQkJCQkgKiAgMjoJSU9SRFlzdworCQkJCQkgKiAgMToJTEJBCisJCQkJCSAqICAwOglETUEKKwkJCQkJICovCisJdW5zaWduZWQgc2hvcnQJcmVzZXJ2ZWQ1MDsJLyogcmVzZXJ2ZWQgKHdvcmQgNTApICovCisJdW5zaWduZWQgY2hhcgl2ZW5kb3I1OwkvKiBPYnNvbGV0ZSwgdmVuZG9yIHVuaXF1ZSAqLworCXVuc2lnbmVkIGNoYXIJdFBJTzsJCS8qIE9ic29sZXRlLCAwPXNsb3csIDE9bWVkaXVtLCAyPWZhc3QgKi8KKwl1bnNpZ25lZCBjaGFyCXZlbmRvcjY7CS8qIE9ic29sZXRlLCB2ZW5kb3IgdW5pcXVlICovCisJdW5zaWduZWQgY2hhcgl0RE1BOwkJLyogT2Jzb2xldGUsIDA9c2xvdywgMT1tZWRpdW0sIDI9ZmFzdCAqLworCXVuc2lnbmVkIHNob3J0CWZpZWxkX3ZhbGlkOwkvKiAod29yZCA1MykKKwkJCQkJICogIDI6CXVsdHJhX29rCXdvcmQgIDg4CisJCQkJCSAqICAxOgllaWRlX29rCQl3b3JkcyA2NC03MAorCQkJCQkgKiAgMDoJY3VyX29rCQl3b3JkcyA1NC01OAorCQkJCQkgKi8KKwl1bnNpZ25lZCBzaG9ydAljdXJfY3lsczsJLyogT2Jzb2xldGUsIGxvZ2ljYWwgY3lsaW5kZXJzICovCisJdW5zaWduZWQgc2hvcnQJY3VyX2hlYWRzOwkvKiBPYnNvbGV0ZSwgbCBoZWFkcyAqLworCXVuc2lnbmVkIHNob3J0CWN1cl9zZWN0b3JzOwkvKiBPYnNvbGV0ZSwgbCBzZWN0b3JzIHBlciB0cmFjayAqLworCXVuc2lnbmVkIHNob3J0CWN1cl9jYXBhY2l0eTA7CS8qIE9ic29sZXRlLCBsIHRvdGFsIHNlY3RvcnMgb24gZHJpdmUgKi8KKwl1bnNpZ25lZCBzaG9ydAljdXJfY2FwYWNpdHkxOwkvKiBPYnNvbGV0ZSwgKDIgd29yZHMsIG1pc2FsaWduZWQgaW50KSAgICAgKi8KKwl1bnNpZ25lZCBjaGFyCW11bHRzZWN0OwkvKiBjdXJyZW50IG11bHRpcGxlIHNlY3RvciBjb3VudCAqLworCXVuc2lnbmVkIGNoYXIJbXVsdHNlY3RfdmFsaWQ7CS8qIHdoZW4gKGJpdDA9PTEpIG11bHRzZWN0IGlzIG9rICovCisJdW5zaWduZWQgaW50CWxiYV9jYXBhY2l0eTsJLyogT2Jzb2xldGUsIHRvdGFsIG51bWJlciBvZiBzZWN0b3JzICovCisJdW5zaWduZWQgc2hvcnQJZG1hXzF3b3JkOwkvKiBPYnNvbGV0ZSwgc2luZ2xlLXdvcmQgZG1hIGluZm8gKi8KKwl1bnNpZ25lZCBzaG9ydAlkbWFfbXdvcmQ7CS8qIG11bHRpcGxlLXdvcmQgZG1hIGluZm8gKi8KKwl1bnNpZ25lZCBzaG9ydCAgZWlkZV9waW9fbW9kZXM7IC8qIGJpdHMgMDptb2RlMyAxOm1vZGU0ICovCisJdW5zaWduZWQgc2hvcnQgIGVpZGVfZG1hX21pbjsJLyogbWluIG13b3JkIGRtYSBjeWNsZSB0aW1lIChucykgKi8KKwl1bnNpZ25lZCBzaG9ydCAgZWlkZV9kbWFfdGltZTsJLyogcmVjb21tZW5kZWQgbXdvcmQgZG1hIGN5Y2xlIHRpbWUgKG5zKSAqLworCXVuc2lnbmVkIHNob3J0ICBlaWRlX3BpbzsgICAgICAgLyogbWluIGN5Y2xlIHRpbWUgKG5zKSwgbm8gSU9SRFkgICovCisJdW5zaWduZWQgc2hvcnQgIGVpZGVfcGlvX2lvcmR5OyAvKiBtaW4gY3ljbGUgdGltZSAobnMpLCB3aXRoIElPUkRZICovCisJdW5zaWduZWQgc2hvcnQJd29yZHM2OV83MFsyXTsJLyogcmVzZXJ2ZWQgd29yZHMgNjktNzAKKwkJCQkJICogZnV0dXJlIGNvbW1hbmQgb3ZlcmxhcCBhbmQgcXVldWluZworCQkJCQkgKi8KKwl1bnNpZ25lZCBzaG9ydAl3b3JkczcxXzc0WzRdOwkvKiByZXNlcnZlZCB3b3JkcyA3MS03NAorCQkJCQkgKiBmb3IgSURFTlRJRlkgUEFDS0VUIERFVklDRSBjb21tYW5kCisJCQkJCSAqLworCXVuc2lnbmVkIHNob3J0ICBxdWV1ZV9kZXB0aDsJLyogKHdvcmQgNzUpCisJCQkJCSAqIDE1OjUJcmVzZXJ2ZWQKKwkJCQkJICogIDQ6MAlNYXhpbXVtIHF1ZXVlIGRlcHRoIC0xCisJCQkJCSAqLworCXVuc2lnbmVkIHNob3J0ICB3b3Jkczc2Xzc5WzRdOwkvKiByZXNlcnZlZCB3b3JkcyA3Ni03OSAqLworCXVuc2lnbmVkIHNob3J0ICBtYWpvcl9yZXZfbnVtOwkvKiAod29yZCA4MCkgKi8KKwl1bnNpZ25lZCBzaG9ydCAgbWlub3JfcmV2X251bTsJLyogKHdvcmQgODEpICovCisJdW5zaWduZWQgc2hvcnQgIGNvbW1hbmRfc2V0XzE7CS8qICh3b3JkIDgyKSBzdXBwb3J0ZWQKKwkJCQkJICogMTU6CU9ic29sZXRlCisJCQkJCSAqIDE0OglOT1AgY29tbWFuZAorCQkJCQkgKiAxMzoJUkVBRF9CVUZGRVIKKwkJCQkJICogMTI6CVdSSVRFX0JVRkZFUgorCQkJCQkgKiAxMToJT2Jzb2xldGUKKwkJCQkJICogMTA6CUhvc3QgUHJvdGVjdGVkIEFyZWEKKwkJCQkJICogIDk6CURFVklDRSBSZXNldAorCQkJCQkgKiAgODoJU0VSVklDRSBJbnRlcnJ1cHQKKwkJCQkJICogIDc6CVJlbGVhc2UgSW50ZXJydXB0CisJCQkJCSAqICA2Oglsb29rLWFoZWFkCisJCQkJCSAqICA1Ogl3cml0ZSBjYWNoZQorCQkJCQkgKiAgNDoJUEFDS0VUIENvbW1hbmQKKwkJCQkJICogIDM6CVBvd2VyIE1hbmFnZW1lbnQgRmVhdHVyZSBTZXQKKwkJCQkJICogIDI6CVJlbW92YWJsZSBGZWF0dXJlIFNldAorCQkJCQkgKiAgMToJU2VjdXJpdHkgRmVhdHVyZSBTZXQKKwkJCQkJICogIDA6CVNNQVJUIEZlYXR1cmUgU2V0CisJCQkJCSAqLworCXVuc2lnbmVkIHNob3J0ICBjb21tYW5kX3NldF8yOwkvKiAod29yZCA4MykKKwkJCQkJICogMTU6CVNoYWxsIGJlIFpFUk8KKwkJCQkJICogMTQ6CVNoYWxsIGJlIE9ORQorCQkJCQkgKiAxMzoJRkxVU0ggQ0FDSEUgRVhUCisJCQkJCSAqIDEyOglGTFVTSCBDQUNIRQorCQkJCQkgKiAxMToJRGV2aWNlIENvbmZpZ3VyYXRpb24gT3ZlcmxheQorCQkJCQkgKiAxMDoJNDgtYml0IEFkZHJlc3MgRmVhdHVyZSBTZXQKKwkJCQkJICogIDk6CUF1dG9tYXRpYyBBY291c3RpYyBNYW5hZ2VtZW50CisJCQkJCSAqICA4OglTRVQgTUFYIHNlY3VyaXR5CisJCQkJCSAqICA3OglyZXNlcnZlZCAxNDA3RFQgUEFSVElFUworCQkJCQkgKiAgNjoJU2V0RiBzdWItY29tbWFuZCBQb3dlci1VcAorCQkJCQkgKiAgNToJUG93ZXItVXAgaW4gU3RhbmRieSBGZWF0dXJlIFNldAorCQkJCQkgKiAgNDoJUmVtb3ZhYmxlIE1lZGlhIE5vdGlmaWNhdGlvbgorCQkJCQkgKiAgMzoJQVBNIEZlYXR1cmUgU2V0CisJCQkJCSAqICAyOglDRkEgRmVhdHVyZSBTZXQKKwkJCQkJICogIDE6CVJFQUQvV1JJVEUgRE1BIFFVRVVFRAorCQkJCQkgKiAgMDoJRG93bmxvYWQgTWljcm9Db2RlCisJCQkJCSAqLworCXVuc2lnbmVkIHNob3J0ICBjZnNzZTsJCS8qICh3b3JkIDg0KQorCQkJCQkgKiBjbWQgc2V0LWZlYXR1cmUgc3VwcG9ydGVkIGV4dGVuc2lvbnMKKwkJCQkJICogMTU6CVNoYWxsIGJlIFpFUk8KKwkJCQkJICogMTQ6CVNoYWxsIGJlIE9ORQorCQkJCQkgKiAxMzo2CXJlc2VydmVkCisJCQkJCSAqICA1OglHZW5lcmFsIFB1cnBvc2UgTG9nZ2luZworCQkJCQkgKiAgNDoJU3RyZWFtaW5nIEZlYXR1cmUgU2V0CisJCQkJCSAqICAzOglNZWRpYSBDYXJkIFBhc3MgVGhyb3VnaAorCQkJCQkgKiAgMjoJTWVkaWEgU2VyaWFsIE51bWJlciBWYWxpZAorCQkJCQkgKiAgMToJU01BUlQgc2VsdC10ZXN0IHN1cHBvcnRlZAorCQkJCQkgKiAgMDoJU01BUlQgZXJyb3IgbG9nZ2luZworCQkJCQkgKi8KKwl1bnNpZ25lZCBzaG9ydCAgY2ZzX2VuYWJsZV8xOwkvKiAod29yZCA4NSkKKwkJCQkJICogY29tbWFuZCBzZXQtZmVhdHVyZSBlbmFibGVkCisJCQkJCSAqIDE1OglPYnNvbGV0ZQorCQkJCQkgKiAxNDoJTk9QIGNvbW1hbmQKKwkJCQkJICogMTM6CVJFQURfQlVGRkVSCisJCQkJCSAqIDEyOglXUklURV9CVUZGRVIKKwkJCQkJICogMTE6CU9ic29sZXRlCisJCQkJCSAqIDEwOglIb3N0IFByb3RlY3RlZCBBcmVhCisJCQkJCSAqICA5OglERVZJQ0UgUmVzZXQKKwkJCQkJICogIDg6CVNFUlZJQ0UgSW50ZXJydXB0CisJCQkJCSAqICA3OglSZWxlYXNlIEludGVycnVwdAorCQkJCQkgKiAgNjoJbG9vay1haGVhZAorCQkJCQkgKiAgNToJd3JpdGUgY2FjaGUKKwkJCQkJICogIDQ6CVBBQ0tFVCBDb21tYW5kCisJCQkJCSAqICAzOglQb3dlciBNYW5hZ2VtZW50IEZlYXR1cmUgU2V0CisJCQkJCSAqICAyOglSZW1vdmFibGUgRmVhdHVyZSBTZXQKKwkJCQkJICogIDE6CVNlY3VyaXR5IEZlYXR1cmUgU2V0CisJCQkJCSAqICAwOglTTUFSVCBGZWF0dXJlIFNldAorCQkJCQkgKi8KKwl1bnNpZ25lZCBzaG9ydCAgY2ZzX2VuYWJsZV8yOwkvKiAod29yZCA4NikKKwkJCQkJICogY29tbWFuZCBzZXQtZmVhdHVyZSBlbmFibGVkCisJCQkJCSAqIDE1OglTaGFsbCBiZSBaRVJPCisJCQkJCSAqIDE0OglTaGFsbCBiZSBPTkUKKwkJCQkJICogMTM6CUZMVVNIIENBQ0hFIEVYVAorCQkJCQkgKiAxMjoJRkxVU0ggQ0FDSEUKKwkJCQkJICogMTE6CURldmljZSBDb25maWd1cmF0aW9uIE92ZXJsYXkKKwkJCQkJICogMTA6CTQ4LWJpdCBBZGRyZXNzIEZlYXR1cmUgU2V0CisJCQkJCSAqICA5OglBdXRvbWF0aWMgQWNvdXN0aWMgTWFuYWdlbWVudAorCQkJCQkgKiAgODoJU0VUIE1BWCBzZWN1cml0eQorCQkJCQkgKiAgNzoJcmVzZXJ2ZWQgMTQwN0RUIFBBUlRJRVMKKwkJCQkJICogIDY6CVNldEYgc3ViLWNvbW1hbmQgUG93ZXItVXAKKwkJCQkJICogIDU6CVBvd2VyLVVwIGluIFN0YW5kYnkgRmVhdHVyZSBTZXQKKwkJCQkJICogIDQ6CVJlbW92YWJsZSBNZWRpYSBOb3RpZmljYXRpb24KKwkJCQkJICogIDM6CUFQTSBGZWF0dXJlIFNldAorCQkJCQkgKiAgMjoJQ0ZBIEZlYXR1cmUgU2V0CisJCQkJCSAqICAxOglSRUFEL1dSSVRFIERNQSBRVUVVRUQKKwkJCQkJICogIDA6CURvd25sb2FkIE1pY3JvQ29kZQorCQkJCQkgKi8KKwl1bnNpZ25lZCBzaG9ydCAgY3NmX2RlZmF1bHQ7CS8qICh3b3JkIDg3KQorCQkJCQkgKiBjb21tYW5kIHNldC1mZWF0dXJlIGRlZmF1bHQKKwkJCQkJICogMTU6CVNoYWxsIGJlIFpFUk8KKwkJCQkJICogMTQ6CVNoYWxsIGJlIE9ORQorCQkJCQkgKiAxMzo2CXJlc2VydmVkCisJCQkJCSAqICA1OglHZW5lcmFsIFB1cnBvc2UgTG9nZ2luZyBlbmFibGVkCisJCQkJCSAqICA0OglWYWxpZCBDT05GSUdVUkUgU1RSRUFNIGV4ZWN1dGVkCisJCQkJCSAqICAzOglNZWRpYSBDYXJkIFBhc3MgVGhyb3VnaCBlbmFibGVkCisJCQkJCSAqICAyOglNZWRpYSBTZXJpYWwgTnVtYmVyIFZhbGlkCisJCQkJCSAqICAxOglTTUFSVCBzZWx0LXRlc3Qgc3VwcG9ydGVkCisJCQkJCSAqICAwOglTTUFSVCBlcnJvciBsb2dnaW5nCisJCQkJCSAqLworCXVuc2lnbmVkIHNob3J0ICBkbWFfdWx0cmE7CS8qICh3b3JkIDg4KSAqLworCXVuc2lnbmVkIHNob3J0CXRyc2V1YzsJCS8qIHRpbWUgcmVxdWlyZWQgZm9yIHNlY3VyaXR5IGVyYXNlICovCisJdW5zaWduZWQgc2hvcnQJdHJzRXVjOwkJLyogdGltZSByZXF1aXJlZCBmb3IgZW5oYW5jZWQgZXJhc2UgKi8KKwl1bnNpZ25lZCBzaG9ydAlDdXJBUE12YWx1ZXM7CS8qIGN1cnJlbnQgQVBNIHZhbHVlcyAqLworCXVuc2lnbmVkIHNob3J0CW1wcmM7CQkvKiBtYXN0ZXIgcGFzc3dvcmQgcmV2aXNpb24gY29kZSAqLworCXVuc2lnbmVkIHNob3J0CWh3X2NvbmZpZzsJLyogaGFyZHdhcmUgY29uZmlnICh3b3JkIDkzKQorCQkJCQkgKiAxNToJU2hhbGwgYmUgWkVSTworCQkJCQkgKiAxNDoJU2hhbGwgYmUgT05FCisJCQkJCSAqIDEzOgorCQkJCQkgKiAxMjoKKwkJCQkJICogMTE6CisJCQkJCSAqIDEwOgorCQkJCQkgKiAgOToKKwkJCQkJICogIDg6CisJCQkJCSAqICA3OgorCQkJCQkgKiAgNjoKKwkJCQkJICogIDU6CisJCQkJCSAqICA0OgorCQkJCQkgKiAgMzoKKwkJCQkJICogIDI6CisJCQkJCSAqICAxOgorCQkJCQkgKiAgMDoJU2hhbGwgYmUgT05FCisJCQkJCSAqLworCXVuc2lnbmVkIHNob3J0CWFjb3VzdGljOwkvKiAod29yZCA5NCkKKwkJCQkJICogMTU6OAlWZW5kb3IncyByZWNvbW1lbmRlZCB2YWx1ZQorCQkJCQkgKiAgNzowCWN1cnJlbnQgdmFsdWUKKwkJCQkJICovCisJdW5zaWduZWQgc2hvcnQJbXNycXM7CQkvKiBtaW4gc3RyZWFtIHJlcXVlc3Qgc2l6ZSAqLworCXVuc2lnbmVkIHNob3J0CXN4ZmVydDsJCS8qIHN0cmVhbSB0cmFuc2ZlciB0aW1lICovCisJdW5zaWduZWQgc2hvcnQJc2FsOwkJLyogc3RyZWFtIGFjY2VzcyBsYXRlbmN5ICovCisJdW5zaWduZWQgaW50CXNwZzsJCS8qIHN0cmVhbSBwZXJmb3JtYW5jZSBncmFudWxhcml0eSAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBsYmFfY2FwYWNpdHlfMjsvKiA0OC1iaXQgdG90YWwgbnVtYmVyIG9mIHNlY3RvcnMgKi8KKwl1bnNpZ25lZCBzaG9ydAl3b3JkczEwNF8xMjVbMjJdOy8qIHJlc2VydmVkIHdvcmRzIDEwNC0xMjUgKi8KKwl1bnNpZ25lZCBzaG9ydAlsYXN0X2x1bjsJLyogKHdvcmQgMTI2KSAqLworCXVuc2lnbmVkIHNob3J0CXdvcmQxMjc7CS8qICh3b3JkIDEyNykgRmVhdHVyZSBTZXQKKwkJCQkJICogUmVtb3ZhYmxlIE1lZGlhIE5vdGlmaWNhdGlvbgorCQkJCQkgKiAxNToyCXJlc2VydmVkCisJCQkJCSAqICAxOjAJMDAgPSBub3Qgc3VwcG9ydGVkCisJCQkJCSAqCTAxID0gc3VwcG9ydGVkCisJCQkJCSAqCTEwID0gcmVzZXJ2ZWQKKwkJCQkJICoJMTEgPSByZXNlcnZlZAorCQkJCQkgKi8KKwl1bnNpZ25lZCBzaG9ydAlkbGY7CQkvKiAod29yZCAxMjgpCisJCQkJCSAqIGRldmljZSBsb2NrIGZ1bmN0aW9uCisJCQkJCSAqIDE1OjkJcmVzZXJ2ZWQKKwkJCQkJICogIDgJc2VjdXJpdHkgbGV2ZWwgMTptYXggMDpoaWdoCisJCQkJCSAqICA3OjYJcmVzZXJ2ZWQKKwkJCQkJICogIDUJZW5oYW5jZWQgZXJhc2UKKwkJCQkJICogIDQJZXhwaXJlCisJCQkJCSAqICAzCWZyb3plbgorCQkJCQkgKiAgMglsb2NrZWQKKwkJCQkJICogIDEJZW4vZGlzYWJsZWQKKwkJCQkJICogIDAJY2FwYWJpbGl0eQorCQkJCQkgKi8KKwl1bnNpZ25lZCBzaG9ydCAgY3NmbzsJCS8qICAod29yZCAxMjkpCisJCQkJCSAqIGN1cnJlbnQgc2V0IGZlYXR1cmVzIG9wdGlvbnMKKwkJCQkJICogMTU6NAlyZXNlcnZlZAorCQkJCQkgKiAgMzoJYXV0byByZWFzc2lnbgorCQkJCQkgKiAgMjoJcmV2ZXJ0aW5nCisJCQkJCSAqICAxOglyZWFkLWxvb2stYWhlYWQKKwkJCQkJICogIDA6CXdyaXRlIGNhY2hlCisJCQkJCSAqLworCXVuc2lnbmVkIHNob3J0CXdvcmRzMTMwXzE1NVsyNl07LyogcmVzZXJ2ZWQgdmVuZG9yIHdvcmRzIDEzMC0xNTUgKi8KKwl1bnNpZ25lZCBzaG9ydAl3b3JkMTU2OwkvKiByZXNlcnZlZCB2ZW5kb3Igd29yZCAxNTYgKi8KKwl1bnNpZ25lZCBzaG9ydAl3b3JkczE1N18xNTlbM107LyogcmVzZXJ2ZWQgdmVuZG9yIHdvcmRzIDE1Ny0xNTkgKi8KKwl1bnNpZ25lZCBzaG9ydAljZmFfcG93ZXI7CS8qICh3b3JkIDE2MCkgQ0ZBIFBvd2VyIE1vZGUKKwkJCQkJICogMTUgd29yZCAxNjAgc3VwcG9ydGVkCisJCQkJCSAqIDE0IHJlc2VydmVkCisJCQkJCSAqIDEzCisJCQkJCSAqIDEyCisJCQkJCSAqIDExOjAKKwkJCQkJICovCisJdW5zaWduZWQgc2hvcnQJd29yZHMxNjFfMTc1WzE1XTsvKiBSZXNlcnZlZCBmb3IgQ0ZBICovCisJdW5zaWduZWQgc2hvcnQJd29yZHMxNzZfMjA1WzMwXTsvKiBDdXJyZW50IE1lZGlhIFNlcmlhbCBOdW1iZXIgKi8KKwl1bnNpZ25lZCBzaG9ydAl3b3JkczIwNl8yNTRbNDldOy8qIHJlc2VydmVkIHdvcmRzIDIwNi0yNTQgKi8KKwl1bnNpZ25lZCBzaG9ydAlpbnRlZ3JpdHlfd29yZDsJLyogKHdvcmQgMjU1KQorCQkJCQkgKiAxNTo4IENoZWNrc3VtCisJCQkJCSAqICA3OjAgU2lnbmF0dXJlCisJCQkJCSAqLworfTsKKworLyoKKyAqIElERSAibmljZSIgZmxhZ3MuIFRoZXNlIGFyZSB1c2VkIG9uIGEgcGVyIGRyaXZlIGJhc2lzIHRvIGRldGVybWluZQorICogd2hlbiB0byBiZSBuaWNlIGFuZCBnaXZlIG1vcmUgYmFuZHdpZHRoIHRvIHRoZSBvdGhlciBkZXZpY2VzIHdoaWNoCisgKiBzaGFyZSB0aGUgc2FtZSBJREUgYnVzLgorICovCisjZGVmaW5lIElERV9OSUNFX0RTQ19PVkVSTEFQCSgwKQkvKiBwZXIgdGhlIERTQyBvdmVybGFwIHByb3RvY29sICovCisjZGVmaW5lIElERV9OSUNFX0FUQVBJX09WRVJMQVAJKDEpCS8qIG5vdCBzdXBwb3J0ZWQgeWV0ICovCisjZGVmaW5lIElERV9OSUNFXzEJCSgzKQkvKiB3aGVuIHByb2JhYmx5IHdvbid0IGFmZmVjdCB1cyBtdWNoICovCisjZGVmaW5lIElERV9OSUNFXzAJCSgyKQkvKiB3aGVuIHN1cmUgdGhhdCBpdCB3b24ndCBhZmZlY3QgdXMgKi8KKyNkZWZpbmUgSURFX05JQ0VfMgkJKDQpCS8qIHdoZW4gd2Uga25vdyBpdCdzIG9uIG91ciBleHBlbnNlICovCisKKyNlbmRpZgkvKiBfTElOVVhfSERSRUdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2hpZC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2hpZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMmNlZmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaGlkLmgKQEAgLTAsMCArMSw2NyBAQAorI2lmbmRlZiBfX0hJRF9ICisjZGVmaW5lIF9fSElEX0gKKworLyoKKyAqICBDb3B5cmlnaHQgKGMpIDE5OTkgQW5kcmVhcyBHYWwKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMSBWb2p0ZWNoIFBhdmxpaworICogIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IEppcmkgS29zaW5hCisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogU2hvdWxkIHlvdSBuZWVkIHRvIGNvbnRhY3QgbWUsIHRoZSBhdXRob3IsIHlvdSBjYW4gZG8gc28gZWl0aGVyIGJ5CisgKiBlLW1haWwgLSBtYWlsIHlvdXIgbWVzc2FnZSB0byA8dm9qdGVjaEB1Y3cuY3o+LCBvciBieSBwYXBlciBtYWlsOgorICogVm9qdGVjaCBQYXZsaWssIFNpbXVua292YSAxNTk0LCBQcmFndWUgOCwgMTgyIDAwIEN6ZWNoIFJlcHVibGljCisgKi8KKworLyoKKyAqIFVTQiBISUQgKEh1bWFuIEludGVyZmFjZSBEZXZpY2UpIGludGVyZmFjZSBjbGFzcyBjb2RlCisgKi8KKworI2RlZmluZSBVU0JfSU5URVJGQUNFX0NMQVNTX0hJRAkJMworCisvKgorICogVVNCIEhJRCBpbnRlcmZhY2Ugc3ViY2xhc3MgYW5kIHByb3RvY29sIGNvZGVzCisgKi8KKworI2RlZmluZSBVU0JfSU5URVJGQUNFX1NVQkNMQVNTX0JPT1QJMQorI2RlZmluZSBVU0JfSU5URVJGQUNFX1BST1RPQ09MX0tFWUJPQVJECTEKKyNkZWZpbmUgVVNCX0lOVEVSRkFDRV9QUk9UT0NPTF9NT1VTRQkyCisKKy8qCisgKiBISUQgY2xhc3MgcmVxdWVzdHMKKyAqLworCisjZGVmaW5lIEhJRF9SRVFfR0VUX1JFUE9SVAkJMHgwMQorI2RlZmluZSBISURfUkVRX0dFVF9JRExFCQkweDAyCisjZGVmaW5lIEhJRF9SRVFfR0VUX1BST1RPQ09MCQkweDAzCisjZGVmaW5lIEhJRF9SRVFfU0VUX1JFUE9SVAkJMHgwOQorI2RlZmluZSBISURfUkVRX1NFVF9JRExFCQkweDBBCisjZGVmaW5lIEhJRF9SRVFfU0VUX1BST1RPQ09MCQkweDBCCisKKy8qCisgKiBISUQgY2xhc3MgZGVzY3JpcHRvciB0eXBlcworICovCisKKyNkZWZpbmUgSElEX0RUX0hJRAkJCShVU0JfVFlQRV9DTEFTUyB8IDB4MDEpCisjZGVmaW5lIEhJRF9EVF9SRVBPUlQJCQkoVVNCX1RZUEVfQ0xBU1MgfCAweDAyKQorI2RlZmluZSBISURfRFRfUEhZU0lDQUwJCQkoVVNCX1RZUEVfQ0xBU1MgfCAweDAzKQorCisjZGVmaW5lIEhJRF9NQVhfREVTQ1JJUFRPUl9TSVpFCQk0MDk2CisKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9oaWRkZXYuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9oaWRkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGIzNmMzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2hpZGRldi5oCkBAIC0wLDAgKzEsMjEyIEBACisjaWZuZGVmIF9ISURERVZfSAorI2RlZmluZSBfSElEREVWX0gKKworLyoKKyAqICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMCBWb2p0ZWNoIFBhdmxpaworICoKKyAqICBTcG9uc29yZWQgYnkgU3VTRQorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIAorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIAorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICogCisgKiBTaG91bGQgeW91IG5lZWQgdG8gY29udGFjdCBtZSwgdGhlIGF1dGhvciwgeW91IGNhbiBkbyBzbyBlaXRoZXIgYnkKKyAqIGUtbWFpbCAtIG1haWwgeW91ciBtZXNzYWdlIHRvIDx2b2p0ZWNoQHN1c2UuY3o+LCBvciBieSBwYXBlciBtYWlsOgorICogVm9qdGVjaCBQYXZsaWssIFVjaXRlbHNrYSAxNTc2LCBQcmFndWUgOCwgMTgyIDAwIEN6ZWNoIFJlcHVibGljCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBUaGUgZXZlbnQgc3RydWN0dXJlIGl0c2VsZgorICovCisKK3N0cnVjdCBoaWRkZXZfZXZlbnQgeworCXVuc2lnbmVkIGhpZDsKKwlzaWduZWQgaW50IHZhbHVlOworfTsKKworc3RydWN0IGhpZGRldl9kZXZpbmZvIHsKKwlfX3UzMiBidXN0eXBlOworCV9fdTMyIGJ1c251bTsKKwlfX3UzMiBkZXZudW07CisJX191MzIgaWZudW07CisJX19zMTYgdmVuZG9yOworCV9fczE2IHByb2R1Y3Q7CisJX19zMTYgdmVyc2lvbjsKKwlfX3UzMiBudW1fYXBwbGljYXRpb25zOworfTsKKworc3RydWN0IGhpZGRldl9jb2xsZWN0aW9uX2luZm8geworCV9fdTMyIGluZGV4OworCV9fdTMyIHR5cGU7CisJX191MzIgdXNhZ2U7CisJX191MzIgbGV2ZWw7Cit9OworCisjZGVmaW5lIEhJRF9TVFJJTkdfU0laRSAyNTYKK3N0cnVjdCBoaWRkZXZfc3RyaW5nX2Rlc2NyaXB0b3IgeworCV9fczMyIGluZGV4OworCWNoYXIgdmFsdWVbSElEX1NUUklOR19TSVpFXTsKK307CisKK3N0cnVjdCBoaWRkZXZfcmVwb3J0X2luZm8geworCV9fdTMyIHJlcG9ydF90eXBlOworCV9fdTMyIHJlcG9ydF9pZDsKKwlfX3UzMiBudW1fZmllbGRzOworfTsKKworLyogVG8gZG8gYSBHVVNBR0UvU1VTQUdFLCBmaWxsIGluIGF0IGxlYXN0IHVzYWdlX2NvZGUsICByZXBvcnRfdHlwZSBhbmQgCisgKiByZXBvcnRfaWQuICBTZXQgcmVwb3J0X2lkIHRvIFJFUE9SVF9JRF9VTktOT1dOIGlmIHRoZSByZXN0IG9mIHRoZSBmaWVsZHMgCisgKiBhcmUgdW5rbm93bi4gIE90aGVyd2lzZSB1c2UgYSB1c2FnZV9yZWYgc3RydWN0IGZpbGxlZCBpbiBmcm9tIGEgcHJldmlvdXMgCisgKiBzdWNjZXNzZnVsIEdVU0FHRSBjYWxsIHRvIHNhdmUgdGltZS4gIFRvIGFjdHVhbGx5IHNlbmQgYSB2YWx1ZSB0byB0aGUKKyAqIGRldmljZSwgcGVyZm9ybSBhIFNVU0FHRSBmaXJzdCwgZm9sbG93ZWQgYnkgYSBTUkVQT1JULiAgQW4gSU5JVFJFUE9SVCBvciBhCisgKiBHUkVQT1JUIGlzbid0IG5lY2Vzc2FyeSBmb3IgYSBHVVNBR0UgdG8gcmV0dXJuIHZhbGlkIGRhdGEuCisgKi8KKyNkZWZpbmUgSElEX1JFUE9SVF9JRF9VTktOT1dOIDB4ZmZmZmZmZmYKKyNkZWZpbmUgSElEX1JFUE9SVF9JRF9GSVJTVCAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSElEX1JFUE9SVF9JRF9ORVhUICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSElEX1JFUE9SVF9JRF9NQVNLICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgSElEX1JFUE9SVF9JRF9NQVggICAgIDB4MDAwMDAwZmYKKworI2RlZmluZSBISURfUkVQT1JUX1RZUEVfSU5QVVQJMQorI2RlZmluZSBISURfUkVQT1JUX1RZUEVfT1VUUFVUCTIKKyNkZWZpbmUgSElEX1JFUE9SVF9UWVBFX0ZFQVRVUkUJMworI2RlZmluZSBISURfUkVQT1JUX1RZUEVfTUlOICAgICAxCisjZGVmaW5lIEhJRF9SRVBPUlRfVFlQRV9NQVggICAgIDMKKworc3RydWN0IGhpZGRldl9maWVsZF9pbmZvIHsKKwlfX3UzMiByZXBvcnRfdHlwZTsKKwlfX3UzMiByZXBvcnRfaWQ7CisJX191MzIgZmllbGRfaW5kZXg7CisJX191MzIgbWF4dXNhZ2U7CisJX191MzIgZmxhZ3M7CisJX191MzIgcGh5c2ljYWw7CQkvKiBwaHlzaWNhbCB1c2FnZSBmb3IgdGhpcyBmaWVsZCAqLworCV9fdTMyIGxvZ2ljYWw7CQkvKiBsb2dpY2FsIHVzYWdlIGZvciB0aGlzIGZpZWxkICovCisJX191MzIgYXBwbGljYXRpb247CQkvKiBhcHBsaWNhdGlvbiB1c2FnZSBmb3IgdGhpcyBmaWVsZCAqLworCV9fczMyIGxvZ2ljYWxfbWluaW11bTsKKwlfX3MzMiBsb2dpY2FsX21heGltdW07CisJX19zMzIgcGh5c2ljYWxfbWluaW11bTsKKwlfX3MzMiBwaHlzaWNhbF9tYXhpbXVtOworCV9fdTMyIHVuaXRfZXhwb25lbnQ7CisJX191MzIgdW5pdDsKK307CisKKy8qIEZpbGwgaW4gcmVwb3J0X3R5cGUsIHJlcG9ydF9pZCBhbmQgZmllbGRfaW5kZXggdG8gZ2V0IHRoZSBpbmZvcm1hdGlvbiBvbiBhCisgKiBmaWVsZC4KKyAqLworI2RlZmluZSBISURfRklFTERfQ09OU1RBTlQJCTB4MDAxCisjZGVmaW5lIEhJRF9GSUVMRF9WQVJJQUJMRQkJMHgwMDIKKyNkZWZpbmUgSElEX0ZJRUxEX1JFTEFUSVZFCQkweDAwNAorI2RlZmluZSBISURfRklFTERfV1JBUAkJCTB4MDA4CQorI2RlZmluZSBISURfRklFTERfTk9OTElORUFSCQkweDAxMAorI2RlZmluZSBISURfRklFTERfTk9fUFJFRkVSUkVECQkweDAyMAorI2RlZmluZSBISURfRklFTERfTlVMTF9TVEFURQkJMHgwNDAKKyNkZWZpbmUgSElEX0ZJRUxEX1ZPTEFUSUxFCQkweDA4MAorI2RlZmluZSBISURfRklFTERfQlVGRkVSRURfQllURQkJMHgxMDAKKworc3RydWN0IGhpZGRldl91c2FnZV9yZWYgeworCV9fdTMyIHJlcG9ydF90eXBlOworCV9fdTMyIHJlcG9ydF9pZDsKKwlfX3UzMiBmaWVsZF9pbmRleDsKKwlfX3UzMiB1c2FnZV9pbmRleDsKKwlfX3UzMiB1c2FnZV9jb2RlOworCV9fczMyIHZhbHVlOworfTsKKworLyogaGlkZGV2X3VzYWdlX3JlZl9tdWx0aSBpcyB1c2VkIGZvciBzZW5kaW5nIG11bHRpcGxlIGJ5dGVzIHRvIGEgY29udHJvbC4KKyAqIEl0IHJlYWxseSBtYW5pZmVzdHMgaXRzZWxmIGFzIHNldHRpbmcgdGhlIHZhbHVlIG9mIGNvbnNlY3V0aXZlIHVzYWdlcyAqLworI2RlZmluZSBISURfTUFYX01VTFRJX1VTQUdFUyAxMDI0CitzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZl9tdWx0aSB7CisJc3RydWN0IGhpZGRldl91c2FnZV9yZWYgdXJlZjsKKwlfX3UzMiBudW1fdmFsdWVzOworCV9fczMyIHZhbHVlc1tISURfTUFYX01VTFRJX1VTQUdFU107Cit9OworCisvKiBGSUVMRF9JTkRFWF9OT05FIGlzIHJldHVybmVkIGluIHJlYWQoKSBkYXRhIGZyb20gdGhlIGtlcm5lbCB3aGVuIGZsYWdzCisgKiBpcyBzZXQgdG8gKEhJRERFVl9GTEFHX1VSRUYgfCBISURERVZfRkxBR19SRVBPUlQpIGFuZCBhIG5ldyByZXBvcnQgaGFzCisgKiBiZWVuIHNlbnQgYnkgdGhlIGRldmljZSAKKyAqLworI2RlZmluZSBISURfRklFTERfSU5ERVhfTk9ORSAweGZmZmZmZmZmCisKKy8qCisgKiBQcm90b2NvbCB2ZXJzaW9uLgorICovCisKKyNkZWZpbmUgSElEX1ZFUlNJT04JCTB4MDEwMDA0CisKKy8qCisgKiBJT0NUTHMgKDB4MDAgLSAweDdmKQorICovCisKKyNkZWZpbmUgSElESU9DR1ZFUlNJT04JCV9JT1IoJ0gnLCAweDAxLCBpbnQpCisjZGVmaW5lIEhJRElPQ0FQUExJQ0FUSU9OCV9JTygnSCcsIDB4MDIpCisjZGVmaW5lIEhJRElPQ0dERVZJTkZPCQlfSU9SKCdIJywgMHgwMywgc3RydWN0IGhpZGRldl9kZXZpbmZvKQorI2RlZmluZSBISURJT0NHU1RSSU5HCQlfSU9SKCdIJywgMHgwNCwgc3RydWN0IGhpZGRldl9zdHJpbmdfZGVzY3JpcHRvcikKKyNkZWZpbmUgSElESU9DSU5JVFJFUE9SVAlfSU8oJ0gnLCAweDA1KQorI2RlZmluZSBISURJT0NHTkFNRShsZW4pCV9JT0MoX0lPQ19SRUFELCAnSCcsIDB4MDYsIGxlbikKKyNkZWZpbmUgSElESU9DR1JFUE9SVAkJX0lPVygnSCcsIDB4MDcsIHN0cnVjdCBoaWRkZXZfcmVwb3J0X2luZm8pCisjZGVmaW5lIEhJRElPQ1NSRVBPUlQJCV9JT1coJ0gnLCAweDA4LCBzdHJ1Y3QgaGlkZGV2X3JlcG9ydF9pbmZvKQorI2RlZmluZSBISURJT0NHUkVQT1JUSU5GTwlfSU9XUignSCcsIDB4MDksIHN0cnVjdCBoaWRkZXZfcmVwb3J0X2luZm8pCisjZGVmaW5lIEhJRElPQ0dGSUVMRElORk8JX0lPV1IoJ0gnLCAweDBBLCBzdHJ1Y3QgaGlkZGV2X2ZpZWxkX2luZm8pCisjZGVmaW5lIEhJRElPQ0dVU0FHRQkJX0lPV1IoJ0gnLCAweDBCLCBzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZikKKyNkZWZpbmUgSElESU9DU1VTQUdFCQlfSU9XKCdIJywgMHgwQywgc3RydWN0IGhpZGRldl91c2FnZV9yZWYpCisjZGVmaW5lIEhJRElPQ0dVQ09ERQkJX0lPV1IoJ0gnLCAweDBELCBzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZikKKyNkZWZpbmUgSElESU9DR0ZMQUcJCV9JT1IoJ0gnLCAweDBFLCBpbnQpCisjZGVmaW5lIEhJRElPQ1NGTEFHCQlfSU9XKCdIJywgMHgwRiwgaW50KQorI2RlZmluZSBISURJT0NHQ09MTEVDVElPTklOREVYCV9JT1coJ0gnLCAweDEwLCBzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZikKKyNkZWZpbmUgSElESU9DR0NPTExFQ1RJT05JTkZPCV9JT1dSKCdIJywgMHgxMSwgc3RydWN0IGhpZGRldl9jb2xsZWN0aW9uX2luZm8pCisjZGVmaW5lIEhJRElPQ0dQSFlTKGxlbikJX0lPQyhfSU9DX1JFQUQsICdIJywgMHgxMiwgbGVuKQorCisvKiBGb3Igd3JpdGluZy9yZWFkaW5nIHRvIG11bHRpcGxlL2NvbnNlY3V0aXZlIHVzYWdlcyAqLworI2RlZmluZSBISURJT0NHVVNBR0VTCQlfSU9XUignSCcsIDB4MTMsIHN0cnVjdCBoaWRkZXZfdXNhZ2VfcmVmX211bHRpKQorI2RlZmluZSBISURJT0NTVVNBR0VTCQlfSU9XKCdIJywgMHgxNCwgc3RydWN0IGhpZGRldl91c2FnZV9yZWZfbXVsdGkpCisKKy8qIAorICogRmxhZ3MgdG8gYmUgdXNlZCBpbiBISURJT0NTRkxBRworICovCisjZGVmaW5lIEhJRERFVl9GTEFHX1VSRUYJMHgxCisjZGVmaW5lIEhJRERFVl9GTEFHX1JFUE9SVAkweDIKKyNkZWZpbmUgSElEREVWX0ZMQUdTCQkweDMKKworLyogVG8gdHJhdmVyc2UgdGhlIGlucHV0IHJlcG9ydCBkZXNjcmlwdG9yIGluZm8gZm9yIGEgSElEIGRldmljZSwgcGVyZm9ybSB0aGUgCisgKiBmb2xsb3dpbmc6CisgKgorICogcmluZm8ucmVwb3J0X3R5cGUgPSBISURfUkVQT1JUX1RZUEVfSU5QVVQ7CisgKiByaW5mby5yZXBvcnRfaWQgPSBISURfUkVQT1JUX0lEX0ZJUlNUOworICogcmV0ID0gaW9jdGwoZmQsIEhJRElPQ0dSRVBPUlRJTkZPLCAmcmluZm8pOworICoKKyAqIHdoaWxlIChyZXQgPj0gMCkgeworICogCWZvciAoaSA9IDA7IGkgPCByaW5mby5udW1fZmllbGRzOyBpKyspIHsKKyAqIAkJZmluZm8ucmVwb3J0X3R5cGUgPSByaW5mby5yZXBvcnRfdHlwZTsKKyAqIAkJZmluZm8ucmVwb3J0X2lkID0gcmluZm8ucmVwb3J0X2lkOworICogCQlmaW5mby5maWVsZF9pbmRleCA9IGk7CisgKiAJCWlvY3RsKGZkLCBISURJT0NHRklFTERJTkZPLCAmZmluZm8pOworICogCQlmb3IgKGogPSAwOyBqIDwgZmluZm8ubWF4dXNhZ2U7IGorKykgeworICogCQkJdXJlZi5yZXBvcnRfdHlwZSA9IHJpbmZvLnJlcG9ydF90eXBlOworICogCQkJdXJlZi5yZXBvcnRfaWQgPSByaW5mby5yZXBvcnRfaWQ7CisgKiAJCQl1cmVmLmZpZWxkX2luZGV4ID0gaTsKKyAqIAkJCXVyZWYudXNhZ2VfaW5kZXggPSBqOworICogCQkJaW9jdGwoZmQsIEhJRElPQ0dVQ09ERSwgJnVyZWYpOworICogCQkJaW9jdGwoZmQsIEhJRElPQ0dVU0FHRSwgJnVyZWYpOworICogCQl9CisgKiAJfQorICogCXJpbmZvLnJlcG9ydF9pZCB8PSBISURfUkVQT1JUX0lEX05FWFQ7CisgKiAJcmV0ID0gaW9jdGwoZmQsIEhJRElPQ0dSRVBPUlRJTkZPLCAmcmluZm8pOworICogfQorICovCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaGlkcmF3LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaGlkcmF3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUxOTk3OQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9oaWRyYXcuaApAQCAtMCwwICsxLDQ3IEBACisjaWZuZGVmIF9ISURSQVdfSAorI2RlZmluZSBfSElEUkFXX0gKKworLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDcgSmlyaSBLb3NpbmEKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGhpZHJhd19yZXBvcnRfZGVzY3JpcHRvciB7CisJX191MzIgc2l6ZTsKKwlfX3U4IHZhbHVlW0hJRF9NQVhfREVTQ1JJUFRPUl9TSVpFXTsKK307CisKK3N0cnVjdCBoaWRyYXdfZGV2aW5mbyB7CisJX191MzIgYnVzdHlwZTsKKwlfX3MxNiB2ZW5kb3I7CisJX19zMTYgcHJvZHVjdDsKK307CisKKy8qIGlvY3RsIGludGVyZmFjZSAqLworI2RlZmluZSBISURJT0NHUkRFU0NTSVpFCV9JT1IoJ0gnLCAweDAxLCBpbnQpCisjZGVmaW5lIEhJRElPQ0dSREVTQwkJX0lPUignSCcsIDB4MDIsIHN0cnVjdCBoaWRyYXdfcmVwb3J0X2Rlc2NyaXB0b3IpCisjZGVmaW5lIEhJRElPQ0dSQVdJTkZPCQlfSU9SKCdIJywgMHgwMywgc3RydWN0IGhpZHJhd19kZXZpbmZvKQorI2RlZmluZSBISURJT0NHUkFXTkFNRShsZW4pICAgICBfSU9DKF9JT0NfUkVBRCwgJ0gnLCAweDA0LCBsZW4pCisjZGVmaW5lIEhJRElPQ0dSQVdQSFlTKGxlbikgICAgIF9JT0MoX0lPQ19SRUFELCAnSCcsIDB4MDUsIGxlbikKKworI2RlZmluZSBISURSQVdfRklSU1RfTUlOT1IgMAorI2RlZmluZSBISURSQVdfTUFYX0RFVklDRVMgNjQKKy8qIG51bWJlciBvZiByZXBvcnRzIHRvIGJ1ZmZlciAqLworI2RlZmluZSBISURSQVdfQlVGRkVSX1NJWkUgNjQKKworCisvKiBrZXJuZWwtb25seSBBUEkgZGVjbGFyYXRpb25zICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2hwZXQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9ocGV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMyYjhmZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9ocGV0LmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZglfX0hQRVRfXworI2RlZmluZQlfX0hQRVRfXyAxCisKKworCisKK3N0cnVjdCBocGV0X2luZm8geworCXVuc2lnbmVkIGxvbmcgaGlfaXJlcWZyZXE7CS8qIEh6ICovCisJdW5zaWduZWQgbG9uZyBoaV9mbGFnczsJLyogaW5mb3JtYXRpb24gKi8KKwl1bnNpZ25lZCBzaG9ydCBoaV9ocGV0OworCXVuc2lnbmVkIHNob3J0IGhpX3RpbWVyOworfTsKKworI2RlZmluZSBIUEVUX0lORk9fUEVSSU9ESUMJMHgwMDEwCS8qIHBlcmlvZGljLWNhcGFibGUgY29tcGFyYXRvciAqLworCisjZGVmaW5lCUhQRVRfSUVfT04JX0lPKCdoJywgMHgwMSkJLyogaW50ZXJydXB0IG9uICovCisjZGVmaW5lCUhQRVRfSUVfT0ZGCV9JTygnaCcsIDB4MDIpCS8qIGludGVycnVwdCBvZmYgKi8KKyNkZWZpbmUJSFBFVF9JTkZPCV9JT1IoJ2gnLCAweDAzLCBzdHJ1Y3QgaHBldF9pbmZvKQorI2RlZmluZQlIUEVUX0VQSQlfSU8oJ2gnLCAweDA0KQkvKiBlbmFibGUgcGVyaW9kaWMgKi8KKyNkZWZpbmUJSFBFVF9EUEkJX0lPKCdoJywgMHgwNSkJLyogZGlzYWJsZSBwZXJpb2RpYyAqLworI2RlZmluZQlIUEVUX0lSUUZSRVEJX0lPVygnaCcsIDB4NiwgdW5zaWduZWQgbG9uZykJLyogSVJRRlJFUSB1c2VjICovCisKKyNkZWZpbmUgTUFYX0hQRVRfVEJTCTgJCS8qIG1heGltdW0gaHBldCB0aW1lciBibG9ja3MgKi8KKworI2VuZGlmCQkJCS8qICFfX0hQRVRfXyAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2h5c2RuX2lmLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaHlzZG5faWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDIzNmFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2h5c2RuX2lmLmgKQEAgLTAsMCArMSwzMyBAQAorLyogJElkOiBoeXNkbl9pZi5oLHYgMS4xLjguMyAyMDAxLzA5LzIzIDIyOjI1OjA1IGthaSBFeHAgJAorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgSFlTRE4gY2FyZHMKKyAqIGlvY3RsIGRlZmluaXRpb25zIHNoYXJlZCBieSBoeW5ldG1nciBhbmQgZHJpdmVyLgorICoKKyAqIEF1dGhvciAgICBXZXJuZXIgQ29ybmVsaXVzICh3ZXJuZXJAdGl0cm8uZGUpIGZvciBIeXBlcmNvcGUgR21iSAorICogQ29weXJpZ2h0IDE5OTkgYnkgV2VybmVyIENvcm5lbGl1cyAod2VybmVyQHRpdHJvLmRlKQorICoKKyAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMKKyAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisgKgorICovCisKKy8qKioqKioqKioqKioqKioqLworLyogZXJyb3IgdmFsdWVzICovCisvKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgRVJSX05PTkUgICAgICAgICAgICAgMCAvKiBubyBlcnJvciBvY2N1cnJlZCAqLworI2RlZmluZSBFUlJfQUxSRUFEWV9CT09UICAxMDAwIC8qIHdlIGFyZSBhbHJlYWR5IGJvb3RpbmcgKi8KKyNkZWZpbmUgRVBPRl9CQURfTUFHSUMgICAgMTAwMSAvKiBiYWQgbWFnaWMgaW4gUE9GIGhlYWRlciAqLworI2RlZmluZSBFUlJfQk9BUkRfRFBSQU0gICAxMDAyIC8qIGJvYXJkIERQUkFNIGZhaWxlZCAqLworI2RlZmluZSBFUE9GX0lOVEVSTkFMICAgICAxMDAzIC8qIGludGVybmFsIFBPRiBoYW5kbGVyIGVycm9yICovCisjZGVmaW5lIEVQT0ZfQkFEX0lNR19TSVpFIDEwMDQgLyogUE9GIGJvb3QgaW1hZ2Ugc2l6ZSBpbnZhbGlkICovCisjZGVmaW5lIEVSUl9CT09USU1HX0ZBSUwgIDEwMDUgLyogMS4gc3RhZ2UgYm9vdCBpbWFnZSBkaWQgbm90IHN0YXJ0ICovCisjZGVmaW5lIEVSUl9CT09UU0VRX0ZBSUwgIDEwMDYgLyogMi4gc3RhZ2UgYm9vdCBzZXEgaGFuZHNoYWtlIHRpbWVvdXQgKi8KKyNkZWZpbmUgRVJSX1BPRl9USU1FT1VUICAgMTAwNyAvKiB0aW1lb3V0IHdhaXRpbmcgZm9yIGNhcmQgcG9mIHJlYWR5ICovCisjZGVmaW5lIEVSUl9OT1RfQk9PVEVEICAgIDEwMDggLyogb3BlcmF0aW9uIG9ubHkgYWxsb3dlZCB3aGVuIGJvb3RlZCAqLworI2RlZmluZSBFUlJfQ09ORl9MT05HICAgICAxMDA5IC8qIGNvbmYgbGluZSBpcyB0b28gbG9uZyAqLyAKKyNkZWZpbmUgRVJSX0lOVl9DSEFOICAgICAgMTAxMCAvKiBpbnZhbGlkIGNoYW5uZWwgbnVtYmVyICovIAorI2RlZmluZSBFUlJfQVNZTkNfVElNRSAgICAxMDExIC8qIHRpbWVvdXQgc2VuZGluZyBhc3luYyBkYXRhICovIAorCisKKworCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaTJjLWRldi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2kyYy1kZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzFkNDc1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2kyYy1kZXYuaApAQCAtMCwwICsxLDcxIEBACisvKgorICAgIGkyYy1kZXYuaCAtIGkyYy1idXMgZHJpdmVyLCBjaGFyIGRldmljZSBpbnRlcmZhY2UKKworICAgIENvcHlyaWdodCAoQykgMTk5NS05NyBTaW1vbiBHLiBWb2dsCisgICAgQ29weXJpZ2h0IChDKSAxOTk4LTk5IEZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKworI2lmbmRlZiBfTElOVVhfSTJDX0RFVl9ICisjZGVmaW5lIF9MSU5VWF9JMkNfREVWX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKworLyogL2Rldi9pMmMtWCBpb2N0bCBjb21tYW5kcy4gIFRoZSBpb2N0bCdzIHBhcmFtZXRlciBpcyBhbHdheXMgYW4KKyAqIHVuc2lnbmVkIGxvbmcsIGV4Y2VwdCBmb3I6CisgKgktIEkyQ19GVU5DUywgdGFrZXMgcG9pbnRlciB0byBhbiB1bnNpZ25lZCBsb25nCisgKgktIEkyQ19SRFdSLCB0YWtlcyBwb2ludGVyIHRvIHN0cnVjdCBpMmNfcmR3cl9pb2N0bF9kYXRhCisgKgktIEkyQ19TTUJVUywgdGFrZXMgcG9pbnRlciB0byBzdHJ1Y3QgaTJjX3NtYnVzX2lvY3RsX2RhdGEKKyAqLworI2RlZmluZSBJMkNfUkVUUklFUwkweDA3MDEJLyogbnVtYmVyIG9mIHRpbWVzIGEgZGV2aWNlIGFkZHJlc3Mgc2hvdWxkCisJCQkJICAgYmUgcG9sbGVkIHdoZW4gbm90IGFja25vd2xlZGdpbmcgKi8KKyNkZWZpbmUgSTJDX1RJTUVPVVQJMHgwNzAyCS8qIHNldCB0aW1lb3V0IGluIHVuaXRzIG9mIDEwIG1zICovCisKKy8qIE5PVEU6IFNsYXZlIGFkZHJlc3MgaXMgNyBvciAxMCBiaXRzLCBidXQgMTAtYml0IGFkZHJlc3NlcworICogYXJlIE5PVCBzdXBwb3J0ZWQhIChkdWUgdG8gY29kZSBicm9rZW5uZXNzKQorICovCisjZGVmaW5lIEkyQ19TTEFWRQkweDA3MDMJLyogVXNlIHRoaXMgc2xhdmUgYWRkcmVzcyAqLworI2RlZmluZSBJMkNfU0xBVkVfRk9SQ0UJMHgwNzA2CS8qIFVzZSB0aGlzIHNsYXZlIGFkZHJlc3MsIGV2ZW4gaWYgaXQKKwkJCQkgICBpcyBhbHJlYWR5IGluIHVzZSBieSBhIGRyaXZlciEgKi8KKyNkZWZpbmUgSTJDX1RFTkJJVAkweDA3MDQJLyogMCBmb3IgNyBiaXQgYWRkcnMsICE9IDAgZm9yIDEwIGJpdCAqLworCisjZGVmaW5lIEkyQ19GVU5DUwkweDA3MDUJLyogR2V0IHRoZSBhZGFwdGVyIGZ1bmN0aW9uYWxpdHkgbWFzayAqLworCisjZGVmaW5lIEkyQ19SRFdSCTB4MDcwNwkvKiBDb21iaW5lZCBSL1cgdHJhbnNmZXIgKG9uZSBTVE9QIG9ubHkpICovCisKKyNkZWZpbmUgSTJDX1BFQwkJMHgwNzA4CS8qICE9IDAgdG8gdXNlIFBFQyB3aXRoIFNNQnVzICovCisjZGVmaW5lIEkyQ19TTUJVUwkweDA3MjAJLyogU01CdXMgdHJhbnNmZXIgKi8KKworCisvKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgYXMgdXNlZCBpbiB0aGUgSTJDX1NNQlVTIGlvY3RsIGNhbGwgKi8KK3N0cnVjdCBpMmNfc21idXNfaW9jdGxfZGF0YSB7CisJX191OCByZWFkX3dyaXRlOworCV9fdTggY29tbWFuZDsKKwlfX3UzMiBzaXplOworCXVuaW9uIGkyY19zbWJ1c19kYXRhICpkYXRhOworfTsKKworLyogVGhpcyBpcyB0aGUgc3RydWN0dXJlIGFzIHVzZWQgaW4gdGhlIEkyQ19SRFdSIGlvY3RsIGNhbGwgKi8KK3N0cnVjdCBpMmNfcmR3cl9pb2N0bF9kYXRhIHsKKwlzdHJ1Y3QgaTJjX21zZyAqbXNnczsJLyogcG9pbnRlcnMgdG8gaTJjX21zZ3MgKi8KKwlfX3UzMiBubXNnczsJCQkvKiBudW1iZXIgb2YgaTJjX21zZ3MgKi8KK307CisKKyNkZWZpbmUgIEkyQ19SRFJXX0lPQ1RMX01BWF9NU0dTCTQyCisKKworI2VuZGlmIC8qIF9MSU5VWF9JMkNfREVWX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pMmMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pMmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzIwNGUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2kyYy5oCkBAIC0wLDAgKzEsMTQ4IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgkJCQkJCQkJCSAgICAgKi8KKy8qIGkyYy5oIC0gZGVmaW5pdGlvbnMgZm9yIHRoZSBpMmMtYnVzIGludGVyZmFjZQkJCSAgICAgKi8KKy8qCQkJCQkJCQkJICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMCBTaW1vbiBHLiBWb2dsCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4JCSAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogV2l0aCBzb21lIGNoYW5nZXMgZnJvbSBLecO2c3RpIE3DpGxra2kgPGttYWxra2lAY2MuaHV0LmZpPiBhbmQKKyAgIEZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4gKi8KKworI2lmbmRlZiBfTElOVVhfSTJDX0gKKyNkZWZpbmUgX0xJTlVYX0kyQ19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKioKKyAqIHN0cnVjdCBpMmNfbXNnIC0gYW4gSTJDIHRyYW5zYWN0aW9uIHNlZ21lbnQgYmVnaW5uaW5nIHdpdGggU1RBUlQKKyAqIEBhZGRyOiBTbGF2ZSBhZGRyZXNzLCBlaXRoZXIgc2V2ZW4gb3IgdGVuIGJpdHMuICBXaGVuIHRoaXMgaXMgYSB0ZW4KKyAqCWJpdCBhZGRyZXNzLCBJMkNfTV9URU4gbXVzdCBiZSBzZXQgaW4gQGZsYWdzIGFuZCB0aGUgYWRhcHRlcgorICoJbXVzdCBzdXBwb3J0IEkyQ19GVU5DXzEwQklUX0FERFIuCisgKiBAZmxhZ3M6IEkyQ19NX1JEIGlzIGhhbmRsZWQgYnkgYWxsIGFkYXB0ZXJzLiAgTm8gb3RoZXIgZmxhZ3MgbWF5IGJlCisgKglwcm92aWRlZCB1bmxlc3MgdGhlIGFkYXB0ZXIgZXhwb3J0ZWQgdGhlIHJlbGV2YW50IEkyQ19GVU5DXyoKKyAqCWZsYWdzIHRocm91Z2ggaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoKS4KKyAqIEBsZW46IE51bWJlciBvZiBkYXRhIGJ5dGVzIGluIEBidWYgYmVpbmcgcmVhZCBmcm9tIG9yIHdyaXR0ZW4gdG8gdGhlCisgKglJMkMgc2xhdmUgYWRkcmVzcy4gIEZvciByZWFkIHRyYW5zYWN0aW9ucyB3aGVyZSBJMkNfTV9SRUNWX0xFTgorICoJaXMgc2V0LCB0aGUgY2FsbGVyIGd1YXJhbnRlZXMgdGhhdCB0aGlzIGJ1ZmZlciBjYW4gaG9sZCB1cCB0bworICoJMzIgYnl0ZXMgaW4gYWRkaXRpb24gdG8gdGhlIGluaXRpYWwgbGVuZ3RoIGJ5dGUgc2VudCBieSB0aGUKKyAqCXNsYXZlIChwbHVzLCBpZiB1c2VkLCB0aGUgU01CdXMgUEVDKTsgYW5kIHRoaXMgdmFsdWUgd2lsbCBiZQorICoJaW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBibG9jayBkYXRhIGJ5dGVzIHJlY2VpdmVkLgorICogQGJ1ZjogVGhlIGJ1ZmZlciBpbnRvIHdoaWNoIGRhdGEgaXMgcmVhZCwgb3IgZnJvbSB3aGljaCBpdCdzIHdyaXR0ZW4uCisgKgorICogQW4gaTJjX21zZyBpcyB0aGUgbG93IGxldmVsIHJlcHJlc2VudGF0aW9uIG9mIG9uZSBzZWdtZW50IG9mIGFuIEkyQworICogdHJhbnNhY3Rpb24uICBJdCBpcyB2aXNpYmxlIHRvIGRyaXZlcnMgaW4gdGhlIEBpMmNfdHJhbnNmZXIoKSBwcm9jZWR1cmUsCisgKiB0byB1c2Vyc3BhY2UgZnJvbSBpMmMtZGV2LCBhbmQgdG8gSTJDIGFkYXB0ZXIgZHJpdmVycyB0aHJvdWdoIHRoZQorICogQGkyY19hZGFwdGVyLkBtYXN0ZXJfeGZlcigpIG1ldGhvZC4KKyAqCisgKiBFeGNlcHQgd2hlbiBJMkMgInByb3RvY29sIG1hbmdsaW5nIiBpcyB1c2VkLCBhbGwgSTJDIGFkYXB0ZXJzIGltcGxlbWVudAorICogdGhlIHN0YW5kYXJkIHJ1bGVzIGZvciBJMkMgdHJhbnNhY3Rpb25zLiAgRWFjaCB0cmFuc2FjdGlvbiBiZWdpbnMgd2l0aCBhCisgKiBTVEFSVC4gIFRoYXQgaXMgZm9sbG93ZWQgYnkgdGhlIHNsYXZlIGFkZHJlc3MsIGFuZCBhIGJpdCBlbmNvZGluZyByZWFkCisgKiB2ZXJzdXMgd3JpdGUuICBUaGVuIGZvbGxvdyBhbGwgdGhlIGRhdGEgYnl0ZXMsIHBvc3NpYmx5IGluY2x1ZGluZyBhIGJ5dGUKKyAqIHdpdGggU01CdXMgUEVDLiAgVGhlIHRyYW5zZmVyIHRlcm1pbmF0ZXMgd2l0aCBhIE5BSywgb3Igd2hlbiBhbGwgdGhvc2UKKyAqIGJ5dGVzIGhhdmUgYmVlbiB0cmFuc2ZlcnJlZCBhbmQgQUNLZWQuICBJZiB0aGlzIGlzIHRoZSBsYXN0IG1lc3NhZ2UgaW4gYQorICogZ3JvdXAsIGl0IGlzIGZvbGxvd2VkIGJ5IGEgU1RPUC4gIE90aGVyd2lzZSBpdCBpcyBmb2xsb3dlZCBieSB0aGUgbmV4dAorICogQGkyY19tc2cgdHJhbnNhY3Rpb24gc2VnbWVudCwgYmVnaW5uaW5nIHdpdGggYSAocmVwZWF0ZWQpIFNUQVJULgorICoKKyAqIEFsdGVybmF0aXZlbHksIHdoZW4gdGhlIGFkYXB0ZXIgc3VwcG9ydHMgSTJDX0ZVTkNfUFJPVE9DT0xfTUFOR0xJTkcgdGhlbgorICogcGFzc2luZyBjZXJ0YWluIEBmbGFncyBtYXkgaGF2ZSBjaGFuZ2VkIHRob3NlIHN0YW5kYXJkIHByb3RvY29sIGJlaGF2aW9ycy4KKyAqIFRob3NlIGZsYWdzIGFyZSBvbmx5IGZvciB1c2Ugd2l0aCBicm9rZW4vbm9uY29uZm9ybWluZyBzbGF2ZXMsIGFuZCB3aXRoCisgKiBhZGFwdGVycyB3aGljaCBhcmUga25vd24gdG8gc3VwcG9ydCB0aGUgc3BlY2lmaWMgbWFuZ2xpbmcgb3B0aW9ucyB0aGV5CisgKiBuZWVkIChvbmUgb3IgbW9yZSBvZiBJR05PUkVfTkFLLCBOT19SRF9BQ0ssIE5PU1RBUlQsIGFuZCBSRVZfRElSX0FERFIpLgorICovCitzdHJ1Y3QgaTJjX21zZyB7CisJX191MTYgYWRkcjsJLyogc2xhdmUgYWRkcmVzcwkJCSovCisJX191MTYgZmxhZ3M7CisjZGVmaW5lIEkyQ19NX1RFTgkJMHgwMDEwCS8qIHRoaXMgaXMgYSB0ZW4gYml0IGNoaXAgYWRkcmVzcyAqLworI2RlZmluZSBJMkNfTV9SRAkJMHgwMDAxCS8qIHJlYWQgZGF0YSwgZnJvbSBzbGF2ZSB0byBtYXN0ZXIgKi8KKyNkZWZpbmUgSTJDX01fTk9TVEFSVAkJMHg0MDAwCS8qIGlmIEkyQ19GVU5DX1BST1RPQ09MX01BTkdMSU5HICovCisjZGVmaW5lIEkyQ19NX1JFVl9ESVJfQUREUgkweDIwMDAJLyogaWYgSTJDX0ZVTkNfUFJPVE9DT0xfTUFOR0xJTkcgKi8KKyNkZWZpbmUgSTJDX01fSUdOT1JFX05BSwkweDEwMDAJLyogaWYgSTJDX0ZVTkNfUFJPVE9DT0xfTUFOR0xJTkcgKi8KKyNkZWZpbmUgSTJDX01fTk9fUkRfQUNLCQkweDA4MDAJLyogaWYgSTJDX0ZVTkNfUFJPVE9DT0xfTUFOR0xJTkcgKi8KKyNkZWZpbmUgSTJDX01fUkVDVl9MRU4JCTB4MDQwMAkvKiBsZW5ndGggd2lsbCBiZSBmaXJzdCByZWNlaXZlZCBieXRlICovCisJX191MTYgbGVuOwkJLyogbXNnIGxlbmd0aAkJCQkqLworCV9fdTggKmJ1ZjsJCS8qIHBvaW50ZXIgdG8gbXNnIGRhdGEJCQkqLworfTsKKworLyogVG8gZGV0ZXJtaW5lIHdoYXQgZnVuY3Rpb25hbGl0eSBpcyBwcmVzZW50ICovCisKKyNkZWZpbmUgSTJDX0ZVTkNfSTJDCQkJMHgwMDAwMDAwMQorI2RlZmluZSBJMkNfRlVOQ18xMEJJVF9BRERSCQkweDAwMDAwMDAyCisjZGVmaW5lIEkyQ19GVU5DX1BST1RPQ09MX01BTkdMSU5HCTB4MDAwMDAwMDQgLyogSTJDX01fTk9TVEFSVCBldGMuICovCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1BFQwkJMHgwMDAwMDAwOAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19CTE9DS19QUk9DX0NBTEwJMHgwMDAwODAwMCAvKiBTTUJ1cyAyLjAgKi8KKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfUVVJQ0sJCTB4MDAwMTAwMDAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFCTB4MDAwMjAwMDAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURQkweDAwMDQwMDAwCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1JFQURfQllURV9EQVRBCTB4MDAwODAwMDAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBCTB4MDAxMDAwMDAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfUkVBRF9XT1JEX0RBVEEJMHgwMDIwMDAwMAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9XT1JEX0RBVEEJMHgwMDQwMDAwMAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19QUk9DX0NBTEwJMHgwMDgwMDAwMAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19SRUFEX0JMT0NLX0RBVEEJMHgwMTAwMDAwMAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9CTE9DS19EQVRBIDB4MDIwMDAwMDAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfUkVBRF9JMkNfQkxPQ0sJMHgwNDAwMDAwMCAvKiBJMkMtbGlrZSBibG9jayB4ZmVyICAqLworI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9JMkNfQkxPQ0sJMHgwODAwMDAwMCAvKiB3LyAxLWJ5dGUgcmVnLiBhZGRyLiAqLworCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX0JZVEUJCShJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEUgfCBcCisJCQkJCSBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFKQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEJKEkyQ19GVU5DX1NNQlVTX1JFQURfQllURV9EQVRBIHwgXAorCQkJCQkgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBKQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEJKEkyQ19GVU5DX1NNQlVTX1JFQURfV09SRF9EQVRBIHwgXAorCQkJCQkgSTJDX0ZVTkNfU01CVVNfV1JJVEVfV09SRF9EQVRBKQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19CTE9DS19EQVRBCShJMkNfRlVOQ19TTUJVU19SRUFEX0JMT0NLX0RBVEEgfCBcCisJCQkJCSBJMkNfRlVOQ19TTUJVU19XUklURV9CTE9DS19EQVRBKQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19JMkNfQkxPQ0sJKEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JMT0NLIHwgXAorCQkJCQkgSTJDX0ZVTkNfU01CVVNfV1JJVEVfSTJDX0JMT0NLKQorCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX0VNVUwJCShJMkNfRlVOQ19TTUJVU19RVUlDSyB8IFwKKwkJCQkJIEkyQ19GVU5DX1NNQlVTX0JZVEUgfCBcCisJCQkJCSBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEgfCBcCisJCQkJCSBJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEgfCBcCisJCQkJCSBJMkNfRlVOQ19TTUJVU19QUk9DX0NBTEwgfCBcCisJCQkJCSBJMkNfRlVOQ19TTUJVU19XUklURV9CTE9DS19EQVRBIHwgXAorCQkJCQkgSTJDX0ZVTkNfU01CVVNfSTJDX0JMT0NLIHwgXAorCQkJCQkgSTJDX0ZVTkNfU01CVVNfUEVDKQorCisvKgorICogRGF0YSBmb3IgU01CdXMgTWVzc2FnZXMKKyAqLworI2RlZmluZSBJMkNfU01CVVNfQkxPQ0tfTUFYCTMyCS8qIEFzIHNwZWNpZmllZCBpbiBTTUJ1cyBzdGFuZGFyZCAqLwordW5pb24gaTJjX3NtYnVzX2RhdGEgeworCV9fdTggYnl0ZTsKKwlfX3UxNiB3b3JkOworCV9fdTggYmxvY2tbSTJDX1NNQlVTX0JMT0NLX01BWCArIDJdOyAvKiBibG9ja1swXSBpcyB1c2VkIGZvciBsZW5ndGggKi8KKwkJCSAgICAgICAvKiBhbmQgb25lIG1vcmUgZm9yIHVzZXItc3BhY2UgY29tcGF0aWJpbGl0eSAqLworfTsKKworLyogaTJjX3NtYnVzX3hmZXIgcmVhZCBvciB3cml0ZSBtYXJrZXJzICovCisjZGVmaW5lIEkyQ19TTUJVU19SRUFECTEKKyNkZWZpbmUgSTJDX1NNQlVTX1dSSVRFCTAKKworLyogU01CdXMgdHJhbnNhY3Rpb24gdHlwZXMgKHNpemUgcGFyYW1ldGVyIGluIHRoZSBhYm92ZSBmdW5jdGlvbnMpCisgICBOb3RlOiB0aGVzZSBubyBsb25nZXIgY29ycmVzcG9uZCB0byB0aGUgKGFyYml0cmFyeSkgUElJWDQgaW50ZXJuYWwgY29kZXMhICovCisjZGVmaW5lIEkyQ19TTUJVU19RVUlDSwkJICAgIDAKKyNkZWZpbmUgSTJDX1NNQlVTX0JZVEUJCSAgICAxCisjZGVmaW5lIEkyQ19TTUJVU19CWVRFX0RBVEEJICAgIDIKKyNkZWZpbmUgSTJDX1NNQlVTX1dPUkRfREFUQQkgICAgMworI2RlZmluZSBJMkNfU01CVVNfUFJPQ19DQUxMCSAgICA0CisjZGVmaW5lIEkyQ19TTUJVU19CTE9DS19EQVRBCSAgICA1CisjZGVmaW5lIEkyQ19TTUJVU19JMkNfQkxPQ0tfQlJPS0VOICA2CisjZGVmaW5lIEkyQ19TTUJVU19CTE9DS19QUk9DX0NBTEwgICA3CQkvKiBTTUJ1cyAyLjAgKi8KKyNkZWZpbmUgSTJDX1NNQlVTX0kyQ19CTE9DS19EQVRBICAgIDgKKworI2VuZGlmIC8qIF9MSU5VWF9JMkNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2kyby1kZXYuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pMm8tZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM1ODBiNgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pMm8tZGV2LmgKQEAgLTAsMCArMSw0MjEgQEAKKy8qCisgKiBJMk8gdXNlciBzcGFjZSBhY2Nlc3NpYmxlIHN0cnVjdHVyZXMvQVBJcworICoKKyAqIChjKSBDb3B5cmlnaHQgMTk5OSwgMjAwMCBSZWQgSGF0IFNvZnR3YXJlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFRoaXMgaGVhZGVyIGZpbGUgZGVmaW5lcyB0aGUgSTJPIEFQSXMgdGhhdCBhcmUgYXZhaWxhYmxlIHRvIGJvdGgKKyAqIHRoZSBrZXJuZWwgYW5kIHVzZXIgbGV2ZWwgYXBwbGljYXRpb25zLiAgS2VybmVsIHNwZWNpZmljIHN0cnVjdHVyZXMKKyAqIGFyZSBkZWZpbmVkIGluIGkyb19vc20uIE9TTXMgc2hvdWxkIGluY2x1ZGUgX29ubHlfIGkyb19vc20uaCB3aGljaAorICogYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGlzIGZpbGUuCisgKgorICovCisKKyNpZm5kZWYgX0kyT19ERVZfSAorI2RlZmluZSBfSTJPX0RFVl9ICisKKy8qIEhvdyBtYW55IGNvbnRyb2xsZXJzIGFyZSB3ZSBhbGxvd2luZyAqLworI2RlZmluZSBNQVhfSTJPX0NPTlRST0xMRVJTCTMyCisKKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBJMk8gQ29udHJvbCBJT0NUTHMgYW5kIHN0cnVjdHVyZXMKKyAqLworI2RlZmluZSBJMk9fTUFHSUNfTlVNQkVSCSdpJworI2RlZmluZSBJMk9HRVRJT1BTCQlfSU9SKEkyT19NQUdJQ19OVU1CRVIsMCxfX3U4W01BWF9JMk9fQ09OVFJPTExFUlNdKQorI2RlZmluZSBJMk9IUlRHRVQJCV9JT1dSKEkyT19NQUdJQ19OVU1CRVIsMSxzdHJ1Y3QgaTJvX2NtZF9ocnRsY3QpCisjZGVmaW5lIEkyT0xDVEdFVAkJX0lPV1IoSTJPX01BR0lDX05VTUJFUiwyLHN0cnVjdCBpMm9fY21kX2hydGxjdCkKKyNkZWZpbmUgSTJPUEFSTVNFVAkJX0lPV1IoSTJPX01BR0lDX05VTUJFUiwzLHN0cnVjdCBpMm9fY21kX3BzZXRnZXQpCisjZGVmaW5lIEkyT1BBUk1HRVQJCV9JT1dSKEkyT19NQUdJQ19OVU1CRVIsNCxzdHJ1Y3QgaTJvX2NtZF9wc2V0Z2V0KQorI2RlZmluZSBJMk9TV0RMIAkJX0lPV1IoSTJPX01BR0lDX05VTUJFUiw1LHN0cnVjdCBpMm9fc3dfeGZlcikKKyNkZWZpbmUgSTJPU1dVTCAJCV9JT1dSKEkyT19NQUdJQ19OVU1CRVIsNixzdHJ1Y3QgaTJvX3N3X3hmZXIpCisjZGVmaW5lIEkyT1NXREVMCQlfSU9XUihJMk9fTUFHSUNfTlVNQkVSLDcsc3RydWN0IGkyb19zd194ZmVyKQorI2RlZmluZSBJMk9WQUxJREFURQkJX0lPUihJMk9fTUFHSUNfTlVNQkVSLDgsX191MzIpCisjZGVmaW5lIEkyT0hUTUwgCQlfSU9XUihJMk9fTUFHSUNfTlVNQkVSLDksc3RydWN0IGkyb19odG1sKQorI2RlZmluZSBJMk9FVlRSRUcJCV9JT1coSTJPX01BR0lDX05VTUJFUiwxMCxzdHJ1Y3QgaTJvX2V2dF9pZCkKKyNkZWZpbmUgSTJPRVZUR0VUCQlfSU9SKEkyT19NQUdJQ19OVU1CRVIsMTEsc3RydWN0IGkyb19ldnRfaW5mbykKKyNkZWZpbmUgSTJPUEFTU1RIUlUJCV9JT1IoSTJPX01BR0lDX05VTUJFUiwxMixzdHJ1Y3QgaTJvX2NtZF9wYXNzdGhydSkKKyNkZWZpbmUgSTJPUEFTU1RIUlUzMgkJX0lPUihJMk9fTUFHSUNfTlVNQkVSLDEyLHN0cnVjdCBpMm9fY21kX3Bhc3N0aHJ1MzIpCisKK3N0cnVjdCBpMm9fY21kX3Bhc3N0aHJ1MzIgeworCXVuc2lnbmVkIGludCBpb3A7CS8qIElPUCB1bml0IG51bWJlciAqLworCV9fdTMyIG1zZzsJCS8qIG1lc3NhZ2UgKi8KK307CisKK3N0cnVjdCBpMm9fY21kX3Bhc3N0aHJ1IHsKKwl1bnNpZ25lZCBpbnQgaW9wOwkvKiBJT1AgdW5pdCBudW1iZXIgKi8KKwl2b2lkICptc2c7CS8qIG1lc3NhZ2UgKi8KK307CisKK3N0cnVjdCBpMm9fY21kX2hydGxjdCB7CisJdW5zaWduZWQgaW50IGlvcDsJLyogSU9QIHVuaXQgbnVtYmVyICovCisJdm9pZCAqcmVzYnVmOwkvKiBCdWZmZXIgZm9yIHJlc3VsdCAqLworCXVuc2lnbmVkIGludCAqcmVzbGVuOwkvKiBCdWZmZXIgbGVuZ3RoIGluIGJ5dGVzICovCit9OworCitzdHJ1Y3QgaTJvX2NtZF9wc2V0Z2V0IHsKKwl1bnNpZ25lZCBpbnQgaW9wOwkvKiBJT1AgdW5pdCBudW1iZXIgKi8KKwl1bnNpZ25lZCBpbnQgdGlkOwkvKiBUYXJnZXQgZGV2aWNlIFRJRCAqLworCXZvaWQgKm9wYnVmOwkvKiBPcGVyYXRpb24gTGlzdCBidWZmZXIgKi8KKwl1bnNpZ25lZCBpbnQgb3BsZW47CS8qIE9wZXJhdGlvbiBMaXN0IGJ1ZmZlciBsZW5ndGggaW4gYnl0ZXMgKi8KKwl2b2lkICpyZXNidWY7CS8qIFJlc3VsdCBMaXN0IGJ1ZmZlciAqLworCXVuc2lnbmVkIGludCAqcmVzbGVuOwkvKiBSZXN1bHQgTGlzdCBidWZmZXIgbGVuZ3RoIGluIGJ5dGVzICovCit9OworCitzdHJ1Y3QgaTJvX3N3X3hmZXIgeworCXVuc2lnbmVkIGludCBpb3A7CS8qIElPUCB1bml0IG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIgZmxhZ3M7CS8qIEZsYWdzIGZpZWxkICovCisJdW5zaWduZWQgY2hhciBzd190eXBlOwkvKiBTb2Z0d2FyZSB0eXBlICovCisJdW5zaWduZWQgaW50IHN3X2lkOwkvKiBTb2Z0d2FyZSBJRCAqLworCXZvaWQgKmJ1ZjsJLyogUG9pbnRlciB0byBzb2Z0d2FyZSBidWZmZXIgKi8KKwl1bnNpZ25lZCBpbnQgKnN3bGVuOwkvKiBMZW5ndGggb2Ygc29mdHdhcmUgZGF0YSAqLworCXVuc2lnbmVkIGludCAqbWF4ZnJhZzsJLyogTWF4aW11bSBmcmFnbWVudCBjb3VudCAqLworCXVuc2lnbmVkIGludCAqY3VyZnJhZzsJLyogQ3VycmVudCBmcmFnbWVudCBjb3VudCAqLworfTsKKworc3RydWN0IGkyb19odG1sIHsKKwl1bnNpZ25lZCBpbnQgaW9wOwkvKiBJT1AgdW5pdCBudW1iZXIgKi8KKwl1bnNpZ25lZCBpbnQgdGlkOwkvKiBUYXJnZXQgZGV2aWNlIElEICovCisJdW5zaWduZWQgaW50IHBhZ2U7CS8qIEhUTUwgcGFnZSAqLworCXZvaWQgKnJlc2J1ZjsJLyogQnVmZmVyIGZvciByZXBseSBIVE1MIHBhZ2UgKi8KKwl1bnNpZ25lZCBpbnQgKnJlc2xlbjsJLyogTGVuZ3RoIGluIGJ5dGVzIG9mIHJlcGx5IGJ1ZmZlciAqLworCXZvaWQgKnFidWY7CS8qIFBvaW50ZXIgdG8gSFRUUCBxdWVyeSBzdHJpbmcgKi8KKwl1bnNpZ25lZCBpbnQgcWxlbjsJLyogTGVuZ3RoIGluIGJ5dGVzIG9mIHF1ZXJ5IHN0cmluZyBidWZmZXIgKi8KK307CisKKyNkZWZpbmUgSTJPX0VWVF9RX0xFTiAzMgorCitzdHJ1Y3QgaTJvX2V2dF9pZCB7CisJdW5zaWduZWQgaW50IGlvcDsKKwl1bnNpZ25lZCBpbnQgdGlkOworCXVuc2lnbmVkIGludCBldnRfbWFzazsKK307CisKKy8qIEV2ZW50IGRhdGEgc2l6ZSA9IGZyYW1lIHNpemUgLSBtZXNzYWdlIGhlYWRlciArIGV2dCBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgSTJPX0VWVF9EQVRBX1NJWkUgODgKKworc3RydWN0IGkyb19ldnRfaW5mbyB7CisJc3RydWN0IGkyb19ldnRfaWQgaWQ7CisJdW5zaWduZWQgY2hhciBldnRfZGF0YVtJMk9fRVZUX0RBVEFfU0laRV07CisJdW5zaWduZWQgaW50IGRhdGFfc2l6ZTsKK307CisKK3N0cnVjdCBpMm9fZXZ0X2dldCB7CisJc3RydWN0IGkyb19ldnRfaW5mbyBpbmZvOworCWludCBwZW5kaW5nOworCWludCBsb3N0OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgaTJvX3NnX2lvX2hkciB7CisJdW5zaWduZWQgaW50IGZsYWdzOwkvKiBzZWUgSTJPX0RQVF9TR19JT19GTEFHUyAqLworfSBpMm9fc2dfaW9faGRyX3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSFJUIHJlbGF0ZWQgY29uc3RhbnRzIGFuZCBzdHJ1Y3R1cmVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEkyT19CVVNfTE9DQUwJMAorI2RlZmluZSBJMk9fQlVTX0lTQQkxCisjZGVmaW5lIEkyT19CVVNfRUlTQQkyCisjZGVmaW5lIEkyT19CVVNfTUNBCTMKKyNkZWZpbmUgSTJPX0JVU19QQ0kJNAorI2RlZmluZSBJMk9fQlVTX1BDTUNJQQk1CisjZGVmaW5lIEkyT19CVVNfTlVCVVMJNgorI2RlZmluZSBJMk9fQlVTX0NBUkRCVVMgNworI2RlZmluZSBJMk9fQlVTX1VOS05PV04gMHg4MAorCit0eXBlZGVmIHN0cnVjdCBfaTJvX3BjaV9idXMgeworCV9fdTggUGNpRnVuY3Rpb25OdW1iZXI7CisJX191OCBQY2lEZXZpY2VOdW1iZXI7CisJX191OCBQY2lCdXNOdW1iZXI7CisJX191OCByZXNlcnZlZDsKKwlfX3UxNiBQY2lWZW5kb3JJRDsKKwlfX3UxNiBQY2lEZXZpY2VJRDsKK30gaTJvX3BjaV9idXM7CisKK3R5cGVkZWYgc3RydWN0IF9pMm9fbG9jYWxfYnVzIHsKKwlfX3UxNiBMYkJhc2VJT1BvcnQ7CisJX191MTYgcmVzZXJ2ZWQ7CisJX191MzIgTGJCYXNlTWVtb3J5QWRkcmVzczsKK30gaTJvX2xvY2FsX2J1czsKKwordHlwZWRlZiBzdHJ1Y3QgX2kyb19pc2FfYnVzIHsKKwlfX3UxNiBJc2FCYXNlSU9Qb3J0OworCV9fdTggQ1NOOworCV9fdTggcmVzZXJ2ZWQ7CisJX191MzIgSXNhQmFzZU1lbW9yeUFkZHJlc3M7Cit9IGkyb19pc2FfYnVzOworCit0eXBlZGVmIHN0cnVjdCBfaTJvX2Vpc2FfYnVzX2luZm8geworCV9fdTE2IEVpc2FCYXNlSU9Qb3J0OworCV9fdTggcmVzZXJ2ZWQ7CisJX191OCBFaXNhU2xvdE51bWJlcjsKKwlfX3UzMiBFaXNhQmFzZU1lbW9yeUFkZHJlc3M7Cit9IGkyb19laXNhX2J1czsKKwordHlwZWRlZiBzdHJ1Y3QgX2kyb19tY2FfYnVzIHsKKwlfX3UxNiBNY2FCYXNlSU9Qb3J0OworCV9fdTggcmVzZXJ2ZWQ7CisJX191OCBNY2FTbG90TnVtYmVyOworCV9fdTMyIE1jYUJhc2VNZW1vcnlBZGRyZXNzOworfSBpMm9fbWNhX2J1czsKKwordHlwZWRlZiBzdHJ1Y3QgX2kyb19vdGhlcl9idXMgeworCV9fdTE2IEJhc2VJT1BvcnQ7CisJX191MTYgcmVzZXJ2ZWQ7CisJX191MzIgQmFzZU1lbW9yeUFkZHJlc3M7Cit9IGkyb19vdGhlcl9idXM7CisKK3R5cGVkZWYgc3RydWN0IF9pMm9faHJ0X2VudHJ5IHsKKwlfX3UzMiBhZGFwdGVyX2lkOworCV9fdTMyIHBhcmVudF90aWQ6MTI7CisJX191MzIgc3RhdGU6NDsKKwlfX3UzMiBidXNfbnVtOjg7CisJX191MzIgYnVzX3R5cGU6ODsKKwl1bmlvbiB7CisJCWkyb19wY2lfYnVzIHBjaV9idXM7CisJCWkyb19sb2NhbF9idXMgbG9jYWxfYnVzOworCQlpMm9faXNhX2J1cyBpc2FfYnVzOworCQlpMm9fZWlzYV9idXMgZWlzYV9idXM7CisJCWkyb19tY2FfYnVzIG1jYV9idXM7CisJCWkyb19vdGhlcl9idXMgb3RoZXJfYnVzOworCX0gYnVzOworfSBpMm9faHJ0X2VudHJ5OworCit0eXBlZGVmIHN0cnVjdCBfaTJvX2hydCB7CisJX191MTYgbnVtX2VudHJpZXM7CisJX191OCBlbnRyeV9sZW47CisJX191OCBocnRfdmVyc2lvbjsKKwlfX3UzMiBjaGFuZ2VfaW5kOworCWkyb19ocnRfZW50cnkgaHJ0X2VudHJ5WzFdOworfSBpMm9faHJ0OworCit0eXBlZGVmIHN0cnVjdCBfaTJvX2xjdF9lbnRyeSB7CisJX191MzIgZW50cnlfc2l6ZToxNjsKKwlfX3UzMiB0aWQ6MTI7CisJX191MzIgcmVzZXJ2ZWQ6NDsKKwlfX3UzMiBjaGFuZ2VfaW5kOworCV9fdTMyIGRldmljZV9mbGFnczsKKwlfX3UzMiBjbGFzc19pZDoxMjsKKwlfX3UzMiB2ZXJzaW9uOjQ7CisJX191MzIgdmVuZG9yX2lkOjE2OworCV9fdTMyIHN1Yl9jbGFzczsKKwlfX3UzMiB1c2VyX3RpZDoxMjsKKwlfX3UzMiBwYXJlbnRfdGlkOjEyOworCV9fdTMyIGJpb3NfaW5mbzo4OworCV9fdTggaWRlbnRpdHlfdGFnWzhdOworCV9fdTMyIGV2ZW50X2NhcGFiaWxpdGllczsKK30gaTJvX2xjdF9lbnRyeTsKKwordHlwZWRlZiBzdHJ1Y3QgX2kyb19sY3QgeworCV9fdTMyIHRhYmxlX3NpemU6MTY7CisJX191MzIgYm9vdF90aWQ6MTI7CisJX191MzIgbGN0X3Zlcjo0OworCV9fdTMyIGlvcF9mbGFnczsKKwlfX3UzMiBjaGFuZ2VfaW5kOworCWkyb19sY3RfZW50cnkgbGN0X2VudHJ5WzFdOworfSBpMm9fbGN0OworCit0eXBlZGVmIHN0cnVjdCBfaTJvX3N0YXR1c19ibG9jayB7CisJX191MTYgb3JnX2lkOworCV9fdTE2IHJlc2VydmVkOworCV9fdTE2IGlvcF9pZDoxMjsKKwlfX3UxNiByZXNlcnZlZDE6NDsKKwlfX3UxNiBob3N0X3VuaXRfaWQ7CisJX191MTYgc2VnbWVudF9udW1iZXI6MTI7CisJX191MTYgaTJvX3ZlcnNpb246NDsKKwlfX3U4IGlvcF9zdGF0ZTsKKwlfX3U4IG1zZ190eXBlOworCV9fdTE2IGluYm91bmRfZnJhbWVfc2l6ZTsKKwlfX3U4IGluaXRfY29kZTsKKwlfX3U4IHJlc2VydmVkMjsKKwlfX3UzMiBtYXhfaW5ib3VuZF9mcmFtZXM7CisJX191MzIgY3VyX2luYm91bmRfZnJhbWVzOworCV9fdTMyIG1heF9vdXRib3VuZF9mcmFtZXM7CisJY2hhciBwcm9kdWN0X2lkWzI0XTsKKwlfX3UzMiBleHBlY3RlZF9sY3Rfc2l6ZTsKKwlfX3UzMiBpb3BfY2FwYWJpbGl0aWVzOworCV9fdTMyIGRlc2lyZWRfbWVtX3NpemU7CisJX191MzIgY3VycmVudF9tZW1fc2l6ZTsKKwlfX3UzMiBjdXJyZW50X21lbV9iYXNlOworCV9fdTMyIGRlc2lyZWRfaW9fc2l6ZTsKKwlfX3UzMiBjdXJyZW50X2lvX3NpemU7CisJX191MzIgY3VycmVudF9pb19iYXNlOworCV9fdTMyIHJlc2VydmVkMzoyNDsKKwlfX3UzMiBjbWRfc3RhdHVzOjg7Cit9IGkyb19zdGF0dXNfYmxvY2s7CisKKy8qIEV2ZW50IGluZGljYXRvciBtYXNrIGZsYWdzICovCisjZGVmaW5lIEkyT19FVlRfSU5EX1NUQVRFX0NIQU5HRQkJMHg4MDAwMDAwMAorI2RlZmluZSBJMk9fRVZUX0lORF9HRU5FUkFMX1dBUk5JTkcJCTB4NDAwMDAwMDAKKyNkZWZpbmUgSTJPX0VWVF9JTkRfQ09ORklHVVJBVElPTl9GTEFHCQkweDIwMDAwMDAwCisjZGVmaW5lIEkyT19FVlRfSU5EX0xPQ0tfUkVMRUFTRQkJMHgxMDAwMDAwMAorI2RlZmluZSBJMk9fRVZUX0lORF9DQVBBQklMSVRZX0NIQU5HRQkJMHgwODAwMDAwMAorI2RlZmluZSBJMk9fRVZUX0lORF9ERVZJQ0VfUkVTRVQJCTB4MDQwMDAwMDAKKyNkZWZpbmUgSTJPX0VWVF9JTkRfRVZUX01BU0tfTU9ESUZJRUQJCTB4MDIwMDAwMDAKKyNkZWZpbmUgSTJPX0VWVF9JTkRfRklFTERfTU9ESUZJRUQJCTB4MDEwMDAwMDAKKyNkZWZpbmUgSTJPX0VWVF9JTkRfVkVORE9SX0VWVAkJCTB4MDA4MDAwMDAKKyNkZWZpbmUgSTJPX0VWVF9JTkRfREVWSUNFX1NUQVRFCQkweDAwNDAwMDAwCisKKy8qIEV4ZWN1dGl2ZSBldmVudCBpbmRpY2l0b3JzICovCisjZGVmaW5lIEkyT19FVlRfSU5EX0VYRUNfUkVTT1VSQ0VfTElNSVRTCTB4MDAwMDAwMDEKKyNkZWZpbmUgSTJPX0VWVF9JTkRfRVhFQ19DT05ORUNUSU9OX0ZBSUwJMHgwMDAwMDAwMgorI2RlZmluZSBJMk9fRVZUX0lORF9FWEVDX0FEQVBURVJfRkFVTFQJCTB4MDAwMDAwMDQKKyNkZWZpbmUgSTJPX0VWVF9JTkRfRVhFQ19QT1dFUl9GQUlMCQkweDAwMDAwMDA4CisjZGVmaW5lIEkyT19FVlRfSU5EX0VYRUNfUkVTRVRfUEVORElORwkJMHgwMDAwMDAxMAorI2RlZmluZSBJMk9fRVZUX0lORF9FWEVDX1JFU0VUX0lNTUlORU5UIAkweDAwMDAwMDIwCisjZGVmaW5lIEkyT19FVlRfSU5EX0VYRUNfSFdfRkFJTAkJMHgwMDAwMDA0MAorI2RlZmluZSBJMk9fRVZUX0lORF9FWEVDX1hDVF9DSEFOR0UJCTB4MDAwMDAwODAKKyNkZWZpbmUgSTJPX0VWVF9JTkRfRVhFQ19ORVdfTENUX0VOVFJZCQkweDAwMDAwMTAwCisjZGVmaW5lIEkyT19FVlRfSU5EX0VYRUNfTU9ESUZJRURfTENUCQkweDAwMDAwMjAwCisjZGVmaW5lIEkyT19FVlRfSU5EX0VYRUNfRERNX0FWQUlMQUJJTElUWQkweDAwMDAwNDAwCisKKy8qIFJhbmRvbSBCbG9jayBTdG9yYWdlIEV2ZW50IEluZGljYXRvcnMgKi8KKyNkZWZpbmUgSTJPX0VWVF9JTkRfQlNBX1ZPTFVNRV9MT0FECQkweDAwMDAwMDAxCisjZGVmaW5lIEkyT19FVlRfSU5EX0JTQV9WT0xVTUVfVU5MT0FECQkweDAwMDAwMDAyCisjZGVmaW5lIEkyT19FVlRfSU5EX0JTQV9WT0xVTUVfVU5MT0FEX1JFUQkweDAwMDAwMDA0CisjZGVmaW5lIEkyT19FVlRfSU5EX0JTQV9DQVBBQ0lUWV9DSEFOR0UgCTB4MDAwMDAwMDgKKyNkZWZpbmUgSTJPX0VWVF9JTkRfQlNBX1NDU0lfU01BUlQJCTB4MDAwMDAwMTAKKworLyogRXZlbnQgZGF0YSBmb3IgZ2VuZXJpYyBldmVudHMgKi8KKyNkZWZpbmUgSTJPX0VWVF9TVEFURV9DSEFOR0VfTk9STUFMCQkweDAwCisjZGVmaW5lIEkyT19FVlRfU1RBVEVfQ0hBTkdFX1NVU1BFTkRFRAkJMHgwMQorI2RlZmluZSBJMk9fRVZUX1NUQVRFX0NIQU5HRV9SRVNUQVJUCQkweDAyCisjZGVmaW5lIEkyT19FVlRfU1RBVEVfQ0hBTkdFX05BX1JFQ09WRVIgCTB4MDMKKyNkZWZpbmUgSTJPX0VWVF9TVEFURV9DSEFOR0VfTkFfTk9fUkVDT1ZFUgkweDA0CisjZGVmaW5lIEkyT19FVlRfU1RBVEVfQ0hBTkdFX1FVSUVTQ0VfUkVRVUVTVAkweDA1CisjZGVmaW5lIEkyT19FVlRfU1RBVEVfQ0hBTkdFX0ZBSUxFRAkJMHgxMAorI2RlZmluZSBJMk9fRVZUX1NUQVRFX0NIQU5HRV9GQVVMVEVECQkweDExCisKKyNkZWZpbmUgSTJPX0VWVF9HRU5fV0FSTklOR19OT1JNQUwJCTB4MDAKKyNkZWZpbmUgSTJPX0VWVF9HRU5fV0FSTklOR19FUlJPUl9USFJFU0hPTEQJMHgwMQorI2RlZmluZSBJMk9fRVZUX0dFTl9XQVJOSU5HX01FRElBX0ZBVUxUIAkweDAyCisKKyNkZWZpbmUgSTJPX0VWVF9DQVBBQklMSVRZX09USEVSCQkweDAxCisjZGVmaW5lIEkyT19FVlRfQ0FQQUJJTElUWV9DSEFOR0VECQkweDAyCisKKyNkZWZpbmUgSTJPX0VWVF9TRU5TT1JfU1RBVEVfQ0hBTkdFRAkJMHgwMQorCisvKgorICoJSTJPIGNsYXNzZXMgLyBzdWJjbGFzc2VzCisgKi8KKworLyogIENsYXNzIElEIGFuZCBDb2RlIEFzc2lnbm1lbnRzCisgKiAgKExDVC5DbGFzc0lELlZlcnNpb24gZmllbGQpCisgKi8KKyNkZWZpbmUgSTJPX0NMQVNTX1ZFUlNJT05fMTAJCQkweDAwCisjZGVmaW5lIEkyT19DTEFTU19WRVJTSU9OXzExCQkJMHgwMQorCisvKiAgQ2xhc3MgY29kZSBuYW1lcworICogIChmcm9tIHYxLjUgVGFibGUgNi0xIENsYXNzIENvZGUgQXNzaWdubWVudHMuKQorICovCisKKyNkZWZpbmUgSTJPX0NMQVNTX0VYRUNVVElWRQkJCTB4MDAwCisjZGVmaW5lIEkyT19DTEFTU19ERE0JCQkJMHgwMDEKKyNkZWZpbmUgSTJPX0NMQVNTX1JBTkRPTV9CTE9DS19TVE9SQUdFCQkweDAxMAorI2RlZmluZSBJMk9fQ0xBU1NfU0VRVUVOVElBTF9TVE9SQUdFCQkweDAxMQorI2RlZmluZSBJMk9fQ0xBU1NfTEFOCQkJCTB4MDIwCisjZGVmaW5lIEkyT19DTEFTU19XQU4JCQkJMHgwMzAKKyNkZWZpbmUgSTJPX0NMQVNTX0ZJQlJFX0NIQU5ORUxfUE9SVAkJMHgwNDAKKyNkZWZpbmUgSTJPX0NMQVNTX0ZJQlJFX0NIQU5ORUxfUEVSSVBIRVJBTAkweDA0MQorI2RlZmluZSBJMk9fQ0xBU1NfU0NTSV9QRVJJUEhFUkFMCQkweDA1MQorI2RlZmluZSBJMk9fQ0xBU1NfQVRFX1BPUlQJCQkweDA2MAorI2RlZmluZSBJMk9fQ0xBU1NfQVRFX1BFUklQSEVSQUwJCTB4MDYxCisjZGVmaW5lIEkyT19DTEFTU19GTE9QUFlfQ09OVFJPTExFUgkJMHgwNzAKKyNkZWZpbmUgSTJPX0NMQVNTX0ZMT1BQWV9ERVZJQ0UgCQkweDA3MQorI2RlZmluZSBJMk9fQ0xBU1NfQlVTX0FEQVBURVIJCQkweDA4MAorI2RlZmluZSBJMk9fQ0xBU1NfUEVFUl9UUkFOU1BPUlRfQUdFTlQJCTB4MDkwCisjZGVmaW5lIEkyT19DTEFTU19QRUVSX1RSQU5TUE9SVAkJMHgwOTEKKyNkZWZpbmUJSTJPX0NMQVNTX0VORAkJCQkweGZmZgorCisvKgorICogIFJlc3Qgb2YgMHgwOTIgLSAweDA5ZiByZXNlcnZlZCBmb3IgcGVlci10by1wZWVyIGNsYXNzZXMKKyAqLworCisjZGVmaW5lIEkyT19DTEFTU19NQVRDSF9BTllDTEFTUwkJMHhmZmZmZmZmZgorCisvKgorICogIFN1YmNsYXNzZXMKKyAqLworCisjZGVmaW5lIEkyT19TVUJDTEFTU19pOTYwCQkJMHgwMDEKKyNkZWZpbmUgSTJPX1NVQkNMQVNTX0hETQkJCTB4MDIwCisjZGVmaW5lIEkyT19TVUJDTEFTU19JU00JCQkweDAyMQorCisvKiBPcGVyYXRpb24gZnVuY3Rpb25zICovCisKKyNkZWZpbmUgSTJPX1BBUkFNU19GSUVMRF9HRVQJCQkweDAwMDEKKyNkZWZpbmUgSTJPX1BBUkFNU19MSVNUX0dFVAkJCTB4MDAwMgorI2RlZmluZSBJMk9fUEFSQU1TX01PUkVfR0VUCQkJMHgwMDAzCisjZGVmaW5lIEkyT19QQVJBTVNfU0laRV9HRVQJCQkweDAwMDQKKyNkZWZpbmUgSTJPX1BBUkFNU19UQUJMRV9HRVQJCQkweDAwMDUKKyNkZWZpbmUgSTJPX1BBUkFNU19GSUVMRF9TRVQJCQkweDAwMDYKKyNkZWZpbmUgSTJPX1BBUkFNU19MSVNUX1NFVAkJCTB4MDAwNworI2RlZmluZSBJMk9fUEFSQU1TX1JPV19BREQJCQkweDAwMDgKKyNkZWZpbmUgSTJPX1BBUkFNU19ST1dfREVMRVRFCQkJMHgwMDA5CisjZGVmaW5lIEkyT19QQVJBTVNfVEFCTEVfQ0xFQVIJCQkweDAwMEEKKworLyoKKyAqIEkyTyBzZXJpYWwgbnVtYmVyIGNvbnZlbnRpb25zIC8gZm9ybWF0cworICogKGNpcmNhIHYxLjUpCisgKi8KKworI2RlZmluZSBJMk9fU05GT1JNQVRfVU5LTk9XTgkJCTAKKyNkZWZpbmUgSTJPX1NORk9STUFUX0JJTkFSWQkJCTEKKyNkZWZpbmUgSTJPX1NORk9STUFUX0FTQ0lJCQkJMgorI2RlZmluZSBJMk9fU05GT1JNQVRfVU5JQ09ERQkJCTMKKyNkZWZpbmUgSTJPX1NORk9STUFUX0xBTjQ4X01BQwkJCTQKKyNkZWZpbmUgSTJPX1NORk9STUFUX1dBTgkJCTUKKworLyoKKyAqIFBsdXMgbmV3IGluIHYyLjAgKFllbGxvd3N0b25lIHBkZiBkb2MpCisgKi8KKworI2RlZmluZSBJMk9fU05GT1JNQVRfTEFONjRfTUFDCQkJNgorI2RlZmluZSBJMk9fU05GT1JNQVRfRERNCQkJNworI2RlZmluZSBJMk9fU05GT1JNQVRfSUVFRV9SRUc2NCAJCTgKKyNkZWZpbmUgSTJPX1NORk9STUFUX0lFRUVfUkVHMTI4CQk5CisjZGVmaW5lIEkyT19TTkZPUk1BVF9VTktOT1dOMgkJCTB4ZmYKKworLyoKKyAqCUkyTyBHZXQgU3RhdHVzIFN0YXRlIHZhbHVlcworICovCisKKyNkZWZpbmUgQURBUFRFUl9TVEFURV9JTklUSUFMSVpJTkcJCTB4MDEKKyNkZWZpbmUgQURBUFRFUl9TVEFURV9SRVNFVAkJCTB4MDIKKyNkZWZpbmUgQURBUFRFUl9TVEFURV9IT0xECQkJMHgwNAorI2RlZmluZSBBREFQVEVSX1NUQVRFX1JFQURZCQkJMHgwNQorI2RlZmluZSBBREFQVEVSX1NUQVRFX09QRVJBVElPTkFMCQkweDA4CisjZGVmaW5lIEFEQVBURVJfU1RBVEVfRkFJTEVECQkJMHgxMAorI2RlZmluZSBBREFQVEVSX1NUQVRFX0ZBVUxURUQJCQkweDExCisKKy8qCisgKglTb2Z0d2FyZSBtb2R1bGUgdHlwZXMKKyAqLworI2RlZmluZSBJMk9fU09GVFdBUkVfTU9EVUxFX0lSVE9TCQkweDExCisjZGVmaW5lIEkyT19TT0ZUV0FSRV9NT0RVTEVfSU9QX1BSSVZBVEUJCTB4MjIKKyNkZWZpbmUgSTJPX1NPRlRXQVJFX01PRFVMRV9JT1BfQ09ORklHCQkweDIzCisKKy8qCisgKglWZW5kb3JzCisgKi8KKyNkZWZpbmUgSTJPX1ZFTkRPUl9EUFQJCQkJMHgwMDFiCisKKy8qCisgKiBEUFQgLyBBZGFwdGVjIHNwZWNpZmljIHZhbHVlcyBmb3IgaTJvX3NnX2lvX2hkciBmbGFncy4KKyAqLworI2RlZmluZSBJMk9fRFBUX1NHX0ZMQUdfSU5URVJQUkVUCQkweDAwMDEwMDAwCisjZGVmaW5lIEkyT19EUFRfU0dfRkxBR19QSFlTSUNBTAkJMHgwMDAyMDAwMAorCisjZGVmaW5lIEkyT19EUFRfRkxBU0hfRlJBR19TSVpFCQkJMHgxMDAwMAorI2RlZmluZSBJMk9fRFBUX0ZMQVNIX1JFQUQJCQkweDAxMDEKKyNkZWZpbmUgSTJPX0RQVF9GTEFTSF9XUklURQkJCTB4MDEwMgorCisjZW5kaWYJCQkJLyogX0kyT19ERVZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2k4ay5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2k4ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNDViYTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaThrLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIGk4ay5oIC0tIExpbnV4IGRyaXZlciBmb3IgYWNjZXNzaW5nIHRoZSBTTU0gQklPUyBvbiBEZWxsIGxhcHRvcHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIE1hc3NpbW8gRGFsIFpvdHRvIDxkekBkZWJpYW4ub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9JOEtfSAorI2RlZmluZSBfTElOVVhfSThLX0gKKworI2RlZmluZSBJOEtfUFJPQwkJIi9wcm9jL2k4ayIKKyNkZWZpbmUgSThLX1BST0NfRk1UCQkiMS4wIgorCisjZGVmaW5lIEk4S19CSU9TX1ZFUlNJT04JX0lPUiAoJ2knLCAweDgwLCBpbnQpCS8qIGJyb2tlbjogbWVhbnQgNCBieXRlcyAqLworI2RlZmluZSBJOEtfTUFDSElORV9JRAkJX0lPUiAoJ2knLCAweDgxLCBpbnQpCS8qIGJyb2tlbjogbWVhbnQgMTYgYnl0ZXMgKi8KKyNkZWZpbmUgSThLX1BPV0VSX1NUQVRVUwlfSU9SICgnaScsIDB4ODIsIHNpemVfdCkKKyNkZWZpbmUgSThLX0ZOX1NUQVRVUwkJX0lPUiAoJ2knLCAweDgzLCBzaXplX3QpCisjZGVmaW5lIEk4S19HRVRfVEVNUAkJX0lPUiAoJ2knLCAweDg0LCBzaXplX3QpCisjZGVmaW5lIEk4S19HRVRfU1BFRUQJCV9JT1dSKCdpJywgMHg4NSwgc2l6ZV90KQorI2RlZmluZSBJOEtfR0VUX0ZBTgkJX0lPV1IoJ2knLCAweDg2LCBzaXplX3QpCisjZGVmaW5lIEk4S19TRVRfRkFOCQlfSU9XUignaScsIDB4ODcsIHNpemVfdCkKKworI2RlZmluZSBJOEtfRkFOX0xFRlQJCTEKKyNkZWZpbmUgSThLX0ZBTl9SSUdIVAkJMAorI2RlZmluZSBJOEtfRkFOX09GRgkJMAorI2RlZmluZSBJOEtfRkFOX0xPVwkJMQorI2RlZmluZSBJOEtfRkFOX0hJR0gJCTIKKyNkZWZpbmUgSThLX0ZBTl9NQVgJCUk4S19GQU5fSElHSAorCisjZGVmaW5lIEk4S19WT0xfVVAJCTEKKyNkZWZpbmUgSThLX1ZPTF9ET1dOCQkyCisjZGVmaW5lIEk4S19WT0xfTVVURQkJNAorCisjZGVmaW5lIEk4S19BQwkJCTEKKyNkZWZpbmUgSThLX0JBVFRFUlkJCTAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWNtcC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2ljbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWVkYWI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2ljbXAuaApAQCAtMCwwICsxLDk3IEBACisvKgorICogSU5FVAkJQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFRDUC9JUCBwcm90b2NvbCBzdWl0ZSBmb3IgdGhlIExJTlVYCisgKgkJb3BlcmF0aW5nIHN5c3RlbS4gIElORVQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlICBCU0QgU29ja2V0CisgKgkJaW50ZXJmYWNlIGFzIHRoZSBtZWFucyBvZiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHVzZXIgbGV2ZWwuCisgKgorICoJCURlZmluaXRpb25zIGZvciB0aGUgSUNNUCBwcm90b2NvbC4KKyAqCisgKiBWZXJzaW9uOglAKCMpaWNtcC5oCTEuMC4zCTA0LzI4LzkzCisgKgorICogQXV0aG9yOglGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfTElOVVhfSUNNUF9ICisjZGVmaW5lCV9MSU5VWF9JQ01QX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgSUNNUF9FQ0hPUkVQTFkJCTAJLyogRWNobyBSZXBseQkJCSovCisjZGVmaW5lIElDTVBfREVTVF9VTlJFQUNICTMJLyogRGVzdGluYXRpb24gVW5yZWFjaGFibGUJKi8KKyNkZWZpbmUgSUNNUF9TT1VSQ0VfUVVFTkNICTQJLyogU291cmNlIFF1ZW5jaAkJKi8KKyNkZWZpbmUgSUNNUF9SRURJUkVDVAkJNQkvKiBSZWRpcmVjdCAoY2hhbmdlIHJvdXRlKQkqLworI2RlZmluZSBJQ01QX0VDSE8JCTgJLyogRWNobyBSZXF1ZXN0CQkJKi8KKyNkZWZpbmUgSUNNUF9USU1FX0VYQ0VFREVECTExCS8qIFRpbWUgRXhjZWVkZWQJCSovCisjZGVmaW5lIElDTVBfUEFSQU1FVEVSUFJPQgkxMgkvKiBQYXJhbWV0ZXIgUHJvYmxlbQkJKi8KKyNkZWZpbmUgSUNNUF9USU1FU1RBTVAJCTEzCS8qIFRpbWVzdGFtcCBSZXF1ZXN0CQkqLworI2RlZmluZSBJQ01QX1RJTUVTVEFNUFJFUExZCTE0CS8qIFRpbWVzdGFtcCBSZXBseQkJKi8KKyNkZWZpbmUgSUNNUF9JTkZPX1JFUVVFU1QJMTUJLyogSW5mb3JtYXRpb24gUmVxdWVzdAkJKi8KKyNkZWZpbmUgSUNNUF9JTkZPX1JFUExZCQkxNgkvKiBJbmZvcm1hdGlvbiBSZXBseQkJKi8KKyNkZWZpbmUgSUNNUF9BRERSRVNTCQkxNwkvKiBBZGRyZXNzIE1hc2sgUmVxdWVzdAkJKi8KKyNkZWZpbmUgSUNNUF9BRERSRVNTUkVQTFkJMTgJLyogQWRkcmVzcyBNYXNrIFJlcGx5CQkqLworI2RlZmluZSBOUl9JQ01QX1RZUEVTCQkxOAorCisKKy8qIENvZGVzIGZvciBVTlJFQUNILiAqLworI2RlZmluZSBJQ01QX05FVF9VTlJFQUNICTAJLyogTmV0d29yayBVbnJlYWNoYWJsZQkJKi8KKyNkZWZpbmUgSUNNUF9IT1NUX1VOUkVBQ0gJMQkvKiBIb3N0IFVucmVhY2hhYmxlCQkqLworI2RlZmluZSBJQ01QX1BST1RfVU5SRUFDSAkyCS8qIFByb3RvY29sIFVucmVhY2hhYmxlCQkqLworI2RlZmluZSBJQ01QX1BPUlRfVU5SRUFDSAkzCS8qIFBvcnQgVW5yZWFjaGFibGUJCSovCisjZGVmaW5lIElDTVBfRlJBR19ORUVERUQJNAkvKiBGcmFnbWVudGF0aW9uIE5lZWRlZC9ERiBzZXQJKi8KKyNkZWZpbmUgSUNNUF9TUl9GQUlMRUQJCTUJLyogU291cmNlIFJvdXRlIGZhaWxlZAkJKi8KKyNkZWZpbmUgSUNNUF9ORVRfVU5LTk9XTgk2CisjZGVmaW5lIElDTVBfSE9TVF9VTktOT1dOCTcKKyNkZWZpbmUgSUNNUF9IT1NUX0lTT0xBVEVECTgKKyNkZWZpbmUgSUNNUF9ORVRfQU5PCQk5CisjZGVmaW5lIElDTVBfSE9TVF9BTk8JCTEwCisjZGVmaW5lIElDTVBfTkVUX1VOUl9UT1MJMTEKKyNkZWZpbmUgSUNNUF9IT1NUX1VOUl9UT1MJMTIKKyNkZWZpbmUgSUNNUF9QS1RfRklMVEVSRUQJMTMJLyogUGFja2V0IGZpbHRlcmVkICovCisjZGVmaW5lIElDTVBfUFJFQ19WSU9MQVRJT04JMTQJLyogUHJlY2VkZW5jZSB2aW9sYXRpb24gKi8KKyNkZWZpbmUgSUNNUF9QUkVDX0NVVE9GRgkxNQkvKiBQcmVjZWRlbmNlIGN1dCBvZmYgKi8KKyNkZWZpbmUgTlJfSUNNUF9VTlJFQUNICQkxNQkvKiBpbnN0ZWFkIG9mIGhhcmRjb2RpbmcgaW1tZWRpYXRlIHZhbHVlICovCisKKy8qIENvZGVzIGZvciBSRURJUkVDVC4gKi8KKyNkZWZpbmUgSUNNUF9SRURJUl9ORVQJCTAJLyogUmVkaXJlY3QgTmV0CQkJKi8KKyNkZWZpbmUgSUNNUF9SRURJUl9IT1NUCQkxCS8qIFJlZGlyZWN0IEhvc3QJCSovCisjZGVmaW5lIElDTVBfUkVESVJfTkVUVE9TCTIJLyogUmVkaXJlY3QgTmV0IGZvciBUT1MJCSovCisjZGVmaW5lIElDTVBfUkVESVJfSE9TVFRPUwkzCS8qIFJlZGlyZWN0IEhvc3QgZm9yIFRPUwkqLworCisvKiBDb2RlcyBmb3IgVElNRV9FWENFRURFRC4gKi8KKyNkZWZpbmUgSUNNUF9FWENfVFRMCQkwCS8qIFRUTCBjb3VudCBleGNlZWRlZAkJKi8KKyNkZWZpbmUgSUNNUF9FWENfRlJBR1RJTUUJMQkvKiBGcmFnbWVudCBSZWFzcyB0aW1lIGV4Y2VlZGVkCSovCisKKworc3RydWN0IGljbXBoZHIgeworICBfX3U4CQl0eXBlOworICBfX3U4CQljb2RlOworICBfX3N1bTE2CWNoZWNrc3VtOworICB1bmlvbiB7CisJc3RydWN0IHsKKwkJX19iZTE2CWlkOworCQlfX2JlMTYJc2VxdWVuY2U7CisJfSBlY2hvOworCV9fYmUzMglnYXRld2F5OworCXN0cnVjdCB7CisJCV9fYmUxNglfX3VudXNlZDsKKwkJX19iZTE2CW10dTsKKwl9IGZyYWc7CisgIH0gdW47Cit9OworCisKKy8qCisgKgljb25zdGFudHMgZm9yIChzZXR8Z2V0KXNvY2tvcHQKKyAqLworCisjZGVmaW5lIElDTVBfRklMVEVSCQkJMQorCitzdHJ1Y3QgaWNtcF9maWx0ZXIgeworCV9fdTMyCQlkYXRhOworfTsKKworCisjZW5kaWYJLyogX0xJTlVYX0lDTVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOTNkZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWNtcHY2LmgKQEAgLTAsMCArMSwxNjQgQEAKKyNpZm5kZWYgX0xJTlVYX0lDTVBWNl9ICisjZGVmaW5lIF9MSU5VWF9JQ01QVjZfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKK3N0cnVjdCBpY21wNmhkciB7CisKKwlfX3U4CQlpY21wNl90eXBlOworCV9fdTgJCWljbXA2X2NvZGU7CisJX19zdW0xNgkJaWNtcDZfY2tzdW07CisKKworCXVuaW9uIHsKKwkJX19iZTMyCQkJdW5fZGF0YTMyWzFdOworCQlfX2JlMTYJCQl1bl9kYXRhMTZbMl07CisJCV9fdTgJCQl1bl9kYXRhOFs0XTsKKworCQlzdHJ1Y3QgaWNtcHY2X2VjaG8geworCQkJX19iZTE2CQlpZGVudGlmaWVyOworCQkJX19iZTE2CQlzZXF1ZW5jZTsKKwkJfSB1X2VjaG87CisKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgaWNtcHY2X25kX2FkdnQgeworI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorICAgICAgICAgICAgICAgICAgICAgICAgX191MzIJCXJlc2VydmVkOjUsCisgICAgICAgICAgICAgICAgICAgICAgICAJCW92ZXJyaWRlOjEsCisgICAgICAgICAgICAgICAgICAgICAgICAJCXNvbGljaXRlZDoxLAorICAgICAgICAgICAgICAgICAgICAgICAgCQlyb3V0ZXI6MSwKKwkJCQkJcmVzZXJ2ZWQyOjI0OworI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCisgICAgICAgICAgICAgICAgICAgICAgICBfX3UzMgkJcm91dGVyOjEsCisJCQkJCXNvbGljaXRlZDoxLAorICAgICAgICAgICAgICAgICAgICAgICAgCQlvdmVycmlkZToxLAorICAgICAgICAgICAgICAgICAgICAgICAgCQlyZXNlcnZlZDoyOTsKKyNlbHNlCisjZXJyb3IJIlBsZWFzZSBmaXggPGFzbS9ieXRlb3JkZXIuaD4iCisjZW5kaWYJCQkJCQkKKyAgICAgICAgICAgICAgICB9IHVfbmRfYWR2dDsKKworICAgICAgICAgICAgICAgIHN0cnVjdCBpY21wdjZfbmRfcmEgeworCQkJX191OAkJaG9wX2xpbWl0OworI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorCQkJX191OAkJcmVzZXJ2ZWQ6MywKKwkJCQkJcm91dGVyX3ByZWY6MiwKKwkJCQkJaG9tZV9hZ2VudDoxLAorCQkJCQlvdGhlcjoxLAorCQkJCQltYW5hZ2VkOjE7CisKKyNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCQkJX191OAkJbWFuYWdlZDoxLAorCQkJCQlvdGhlcjoxLAorCQkJCQlob21lX2FnZW50OjEsCisJCQkJCXJvdXRlcl9wcmVmOjIsCisJCQkJCXJlc2VydmVkOjM7CisjZWxzZQorI2Vycm9yCSJQbGVhc2UgZml4IDxhc20vYnl0ZW9yZGVyLmg+IgorI2VuZGlmCisJCQlfX2JlMTYJCXJ0X2xpZmV0aW1lOworICAgICAgICAgICAgICAgIH0gdV9uZF9yYTsKKworCX0gaWNtcDZfZGF0YXVuOworCisjZGVmaW5lIGljbXA2X2lkZW50aWZpZXIJaWNtcDZfZGF0YXVuLnVfZWNoby5pZGVudGlmaWVyCisjZGVmaW5lIGljbXA2X3NlcXVlbmNlCQlpY21wNl9kYXRhdW4udV9lY2hvLnNlcXVlbmNlCisjZGVmaW5lIGljbXA2X3BvaW50ZXIJCWljbXA2X2RhdGF1bi51bl9kYXRhMzJbMF0KKyNkZWZpbmUgaWNtcDZfbXR1CQlpY21wNl9kYXRhdW4udW5fZGF0YTMyWzBdCisjZGVmaW5lIGljbXA2X3VudXNlZAkJaWNtcDZfZGF0YXVuLnVuX2RhdGEzMlswXQorI2RlZmluZSBpY21wNl9tYXhkZWxheQkJaWNtcDZfZGF0YXVuLnVuX2RhdGExNlswXQorI2RlZmluZSBpY21wNl9yb3V0ZXIJCWljbXA2X2RhdGF1bi51X25kX2FkdnQucm91dGVyCisjZGVmaW5lIGljbXA2X3NvbGljaXRlZAkJaWNtcDZfZGF0YXVuLnVfbmRfYWR2dC5zb2xpY2l0ZWQKKyNkZWZpbmUgaWNtcDZfb3ZlcnJpZGUJCWljbXA2X2RhdGF1bi51X25kX2FkdnQub3ZlcnJpZGUKKyNkZWZpbmUgaWNtcDZfbmRpc2NyZXNlcnZlZAlpY21wNl9kYXRhdW4udV9uZF9hZHZ0LnJlc2VydmVkCisjZGVmaW5lIGljbXA2X2hvcF9saW1pdAkJaWNtcDZfZGF0YXVuLnVfbmRfcmEuaG9wX2xpbWl0CisjZGVmaW5lIGljbXA2X2FkZHJjb25mX21hbmFnZWQJaWNtcDZfZGF0YXVuLnVfbmRfcmEubWFuYWdlZAorI2RlZmluZSBpY21wNl9hZGRyY29uZl9vdGhlcglpY21wNl9kYXRhdW4udV9uZF9yYS5vdGhlcgorI2RlZmluZSBpY21wNl9ydF9saWZldGltZQlpY21wNl9kYXRhdW4udV9uZF9yYS5ydF9saWZldGltZQorI2RlZmluZSBpY21wNl9yb3V0ZXJfcHJlZglpY21wNl9kYXRhdW4udV9uZF9yYS5yb3V0ZXJfcHJlZgorfTsKKworCisjZGVmaW5lIElDTVBWNl9ST1VURVJfUFJFRl9MT1cJCTB4MworI2RlZmluZSBJQ01QVjZfUk9VVEVSX1BSRUZfTUVESVVNCTB4MAorI2RlZmluZSBJQ01QVjZfUk9VVEVSX1BSRUZfSElHSAkJMHgxCisjZGVmaW5lIElDTVBWNl9ST1VURVJfUFJFRl9JTlZBTElECTB4MgorCisjZGVmaW5lIElDTVBWNl9ERVNUX1VOUkVBQ0gJCTEKKyNkZWZpbmUgSUNNUFY2X1BLVF9UT09CSUcJCTIKKyNkZWZpbmUgSUNNUFY2X1RJTUVfRVhDRUVECQkzCisjZGVmaW5lIElDTVBWNl9QQVJBTVBST0IJCTQKKworI2RlZmluZSBJQ01QVjZfSU5GT01TR19NQVNLCQkweDgwCisKKyNkZWZpbmUgSUNNUFY2X0VDSE9fUkVRVUVTVAkJMTI4CisjZGVmaW5lIElDTVBWNl9FQ0hPX1JFUExZCQkxMjkKKyNkZWZpbmUgSUNNUFY2X01HTV9RVUVSWQkJMTMwCisjZGVmaW5lIElDTVBWNl9NR01fUkVQT1JUICAgICAgIAkxMzEKKyNkZWZpbmUgSUNNUFY2X01HTV9SRURVQ1RJT04gICAgCTEzMgorCisjZGVmaW5lIElDTVBWNl9OSV9RVUVSWQkJCTEzOQorI2RlZmluZSBJQ01QVjZfTklfUkVQTFkJCQkxNDAKKworI2RlZmluZSBJQ01QVjZfTUxEMl9SRVBPUlQJCTE0MworCisjZGVmaW5lIElDTVBWNl9ESEFBRF9SRVFVRVNUCQkxNDQKKyNkZWZpbmUgSUNNUFY2X0RIQUFEX1JFUExZCQkxNDUKKyNkZWZpbmUgSUNNUFY2X01PQklMRV9QUkVGSVhfU09MCTE0NgorI2RlZmluZSBJQ01QVjZfTU9CSUxFX1BSRUZJWF9BRFYJMTQ3CisKKy8qCisgKglDb2RlcyBmb3IgRGVzdGluYXRpb24gVW5yZWFjaGFibGUKKyAqLworI2RlZmluZSBJQ01QVjZfTk9ST1VURQkJCTAKKyNkZWZpbmUgSUNNUFY2X0FETV9QUk9ISUJJVEVECQkxCisjZGVmaW5lIElDTVBWNl9OT1RfTkVJR0hCT1VSCQkyCisjZGVmaW5lIElDTVBWNl9BRERSX1VOUkVBQ0gJCTMKKyNkZWZpbmUgSUNNUFY2X1BPUlRfVU5SRUFDSAkJNAorCisvKgorICoJQ29kZXMgZm9yIFRpbWUgRXhjZWVkZWQKKyAqLworI2RlZmluZSBJQ01QVjZfRVhDX0hPUExJTUlUCQkwCisjZGVmaW5lIElDTVBWNl9FWENfRlJBR1RJTUUJCTEKKworLyoKKyAqCUNvZGVzIGZvciBQYXJhbWV0ZXIgUHJvYmxlbQorICovCisjZGVmaW5lIElDTVBWNl9IRFJfRklFTEQJCTAKKyNkZWZpbmUgSUNNUFY2X1VOS19ORVhUSERSCQkxCisjZGVmaW5lIElDTVBWNl9VTktfT1BUSU9OCQkyCisKKy8qCisgKgljb25zdGFudHMgZm9yIChzZXR8Z2V0KXNvY2tvcHQKKyAqLworCisjZGVmaW5lIElDTVBWNl9GSUxURVIJCQkxCisKKy8qCisgKglJQ01QVjYgZmlsdGVyCisgKi8KKworI2RlZmluZSBJQ01QVjZfRklMVEVSX0JMT0NLCQkxCisjZGVmaW5lIElDTVBWNl9GSUxURVJfUEFTUwkJMgorI2RlZmluZSBJQ01QVjZfRklMVEVSX0JMT0NLT1RIRVJTCTMKKyNkZWZpbmUgSUNNUFY2X0ZJTFRFUl9QQVNTT05MWQkJNAorCitzdHJ1Y3QgaWNtcDZfZmlsdGVyIHsKKwlfX3UzMgkJZGF0YVs4XTsKK307CisKKy8qCisgKglEZWZpbml0aW9ucyBmb3IgTUxEdjIKKyAqLworI2RlZmluZSBNTEQyX01PREVfSVNfSU5DTFVERQkxCisjZGVmaW5lIE1MRDJfTU9ERV9JU19FWENMVURFCTIKKyNkZWZpbmUgTUxEMl9DSEFOR0VfVE9fSU5DTFVERQkzCisjZGVmaW5lIE1MRDJfQ0hBTkdFX1RPX0VYQ0xVREUJNAorI2RlZmluZSBNTEQyX0FMTE9XX05FV19TT1VSQ0VTCTUKKyNkZWZpbmUgTUxEMl9CTE9DS19PTERfU09VUkNFUwk2CisKKyNkZWZpbmUgTUxEMl9BTExfTUNSX0lOSVQgeyB7IHsgMHhmZiwweDAyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMHgxNiB9IH0gfQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDdjNTVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmLmgKQEAgLTAsMCArMSwyMjggQEAKKy8qCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJR2xvYmFsIGRlZmluaXRpb25zIGZvciB0aGUgSU5FVCBpbnRlcmZhY2UgbW9kdWxlLgorICoKKyAqIFZlcnNpb246CUAoIylpZi5oCTEuMC4yCTA0LzE4LzkzCisgKgorICogQXV0aG9yczoJT3JpZ2luYWwgdGFrZW4gZnJvbSBCZXJrZWxleSBVTklYIDQuMywgKGMpIFVDQiAxOTgyLTE5ODgKKyAqCQlSb3NzIEJpcm8KKyAqCQlGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfTElOVVhfSUZfSAorI2RlZmluZSBfTElOVVhfSUZfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4JCS8qIGZvciAiX19rZXJuZWxfY2FkZHJfdCIgZXQgYWwJKi8KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4JCS8qIGZvciAic3RydWN0IHNvY2thZGRyIiBldCBhbAkqLworCQkvKiBmb3IgIl9fdXNlciIgZXQgYWwgICAgICAgICAgICovCisKKyNkZWZpbmUJSUZOQU1TSVoJMTYKKyNkZWZpbmUJSUZBTElBU1oJMjU2CisjaW5jbHVkZSA8bGludXgvaGRsYy9pb2N0bC5oPgorCisvKiBTdGFuZGFyZCBpbnRlcmZhY2UgZmxhZ3MgKG5ldGRldmljZS0+ZmxhZ3MpLiAqLworI2RlZmluZQlJRkZfVVAJCTB4MQkJLyogaW50ZXJmYWNlIGlzIHVwCQkqLworI2RlZmluZQlJRkZfQlJPQURDQVNUCTB4MgkJLyogYnJvYWRjYXN0IGFkZHJlc3MgdmFsaWQJKi8KKyNkZWZpbmUJSUZGX0RFQlVHCTB4NAkJLyogdHVybiBvbiBkZWJ1Z2dpbmcJCSovCisjZGVmaW5lCUlGRl9MT09QQkFDSwkweDgJCS8qIGlzIGEgbG9vcGJhY2sgbmV0CQkqLworI2RlZmluZQlJRkZfUE9JTlRPUE9JTlQJMHgxMAkJLyogaW50ZXJmYWNlIGlzIGhhcyBwLXAgbGluawkqLworI2RlZmluZQlJRkZfTk9UUkFJTEVSUwkweDIwCQkvKiBhdm9pZCB1c2Ugb2YgdHJhaWxlcnMJKi8KKyNkZWZpbmUJSUZGX1JVTk5JTkcJMHg0MAkJLyogaW50ZXJmYWNlIFJGQzI4NjMgT1BFUl9VUAkqLworI2RlZmluZQlJRkZfTk9BUlAJMHg4MAkJLyogbm8gQVJQIHByb3RvY29sCQkqLworI2RlZmluZQlJRkZfUFJPTUlTQwkweDEwMAkJLyogcmVjZWl2ZSBhbGwgcGFja2V0cwkJKi8KKyNkZWZpbmUJSUZGX0FMTE1VTFRJCTB4MjAwCQkvKiByZWNlaXZlIGFsbCBtdWx0aWNhc3QgcGFja2V0cyovCisKKyNkZWZpbmUgSUZGX01BU1RFUgkweDQwMAkJLyogbWFzdGVyIG9mIGEgbG9hZCBiYWxhbmNlciAJKi8KKyNkZWZpbmUgSUZGX1NMQVZFCTB4ODAwCQkvKiBzbGF2ZSBvZiBhIGxvYWQgYmFsYW5jZXIJKi8KKworI2RlZmluZSBJRkZfTVVMVElDQVNUCTB4MTAwMAkJLyogU3VwcG9ydHMgbXVsdGljYXN0CQkqLworCisjZGVmaW5lIElGRl9QT1JUU0VMCTB4MjAwMCAgICAgICAgICAvKiBjYW4gc2V0IG1lZGlhIHR5cGUJCSovCisjZGVmaW5lIElGRl9BVVRPTUVESUEJMHg0MDAwCQkvKiBhdXRvIG1lZGlhIHNlbGVjdCBhY3RpdmUJKi8KKyNkZWZpbmUgSUZGX0RZTkFNSUMJMHg4MDAwCQkvKiBkaWFsdXAgZGV2aWNlIHdpdGggY2hhbmdpbmcgYWRkcmVzc2VzKi8KKworI2RlZmluZSBJRkZfTE9XRVJfVVAJMHgxMDAwMAkJLyogZHJpdmVyIHNpZ25hbHMgTDEgdXAJCSovCisjZGVmaW5lIElGRl9ET1JNQU5UCTB4MjAwMDAJCS8qIGRyaXZlciBzaWduYWxzIGRvcm1hbnQJKi8KKworI2RlZmluZSBJRkZfRUNITwkweDQwMDAwCQkvKiBlY2hvIHNlbnQgcGFja2V0cwkJKi8KKworI2RlZmluZSBJRkZfVk9MQVRJTEUJKElGRl9MT09QQkFDS3xJRkZfUE9JTlRPUE9JTlR8SUZGX0JST0FEQ0FTVHxJRkZfRUNIT3xcCisJCUlGRl9NQVNURVJ8SUZGX1NMQVZFfElGRl9SVU5OSU5HfElGRl9MT1dFUl9VUHxJRkZfRE9STUFOVCkKKworLyogUHJpdmF0ZSAoZnJvbSB1c2VyKSBpbnRlcmZhY2UgZmxhZ3MgKG5ldGRldmljZS0+cHJpdl9mbGFncykuICovCisjZGVmaW5lIElGRl84MDJfMVFfVkxBTiAweDEgICAgICAgICAgICAgLyogODAyLjFRIFZMQU4gZGV2aWNlLiAgICAgICAgICAqLworI2RlZmluZSBJRkZfRUJSSURHRQkweDIJCS8qIEV0aGVybmV0IGJyaWRnaW5nIGRldmljZS4JKi8KKyNkZWZpbmUgSUZGX1NMQVZFX0lOQUNUSVZFCTB4NAkvKiBib25kaW5nIHNsYXZlIG5vdCB0aGUgY3Vyci4gYWN0aXZlICovCisjZGVmaW5lIElGRl9NQVNURVJfODAyM0FECTB4OAkvKiBib25kaW5nIG1hc3RlciwgODAyLjNhZC4gCSovCisjZGVmaW5lIElGRl9NQVNURVJfQUxCCTB4MTAJCS8qIGJvbmRpbmcgbWFzdGVyLCBiYWxhbmNlLWFsYi4JKi8KKyNkZWZpbmUgSUZGX0JPTkRJTkcJMHgyMAkJLyogYm9uZGluZyBtYXN0ZXIgb3Igc2xhdmUJKi8KKyNkZWZpbmUgSUZGX1NMQVZFX05FRURBUlAgMHg0MAkJLyogbmVlZCBBUlBzIGZvciB2YWxpZGF0aW9uCSovCisjZGVmaW5lIElGRl9JU0FUQVAJMHg4MAkJLyogSVNBVEFQIGludGVyZmFjZSAoUkZDNDIxNCkJKi8KKyNkZWZpbmUgSUZGX01BU1RFUl9BUlBNT04gMHgxMDAJCS8qIGJvbmRpbmcgbWFzdGVyLCBBUlAgbW9uIGluIHVzZSAqLworI2RlZmluZSBJRkZfV0FOX0hETEMJMHgyMDAJCS8qIFdBTiBIRExDIGRldmljZQkJKi8KKyNkZWZpbmUgSUZGX1hNSVRfRFNUX1JFTEVBU0UgMHg0MDAJLyogZGV2X2hhcmRfc3RhcnRfeG1pdCgpIGlzIGFsbG93ZWQgdG8KKwkJCQkJICogcmVsZWFzZSBza2ItPmRzdAorCQkJCQkgKi8KKyNkZWZpbmUgSUZGX0RPTlRfQlJJREdFIDB4ODAwCQkvKiBkaXNhbGxvdyBicmlkZ2luZyB0aGlzIGV0aGVyIGRldiAqLworI2RlZmluZSBJRkZfSU5fTkVUUE9MTAkweDEwMDAJCS8qIHdoZXRoZXIgd2UgYXJlIHByb2Nlc3NpbmcgbmV0cG9sbCAqLworI2RlZmluZSBJRkZfRElTQUJMRV9ORVRQT0xMCTB4MjAwMAkvKiBkaXNhYmxlIG5ldHBvbGwgYXQgcnVuLXRpbWUgKi8KKyNkZWZpbmUgSUZGX01BQ1ZMQU5fUE9SVAkweDQwMDAJLyogZGV2aWNlIHVzZWQgYXMgbWFjdmxhbiBwb3J0ICovCisjZGVmaW5lIElGRl9CUklER0VfUE9SVAkweDgwMDAJCS8qIGRldmljZSB1c2VkIGFzIGJyaWRnZSBwb3J0ICovCisjZGVmaW5lIElGRl9PVlNfREFUQVBBVEgJMHgxMDAwMAkvKiBkZXZpY2UgdXNlZCBhcyBPcGVuIHZTd2l0Y2gKKwkJCQkJICogZGF0YXBhdGggcG9ydCAqLworCisjZGVmaW5lIElGX0dFVF9JRkFDRQkweDAwMDEJCS8qIGZvciBxdWVyeWluZyBvbmx5ICovCisjZGVmaW5lIElGX0dFVF9QUk9UTwkweDAwMDIKKworLyogRm9yIGRlZmluaXRpb25zIHNlZSBoZGxjLmggKi8KKyNkZWZpbmUgSUZfSUZBQ0VfVjM1CTB4MTAwMAkJLyogVi4zNSBzZXJpYWwgaW50ZXJmYWNlCSovCisjZGVmaW5lIElGX0lGQUNFX1YyNAkweDEwMDEJCS8qIFYuMjQgc2VyaWFsIGludGVyZmFjZQkqLworI2RlZmluZSBJRl9JRkFDRV9YMjEJMHgxMDAyCQkvKiBYLjIxIHNlcmlhbCBpbnRlcmZhY2UJKi8KKyNkZWZpbmUgSUZfSUZBQ0VfVDEJMHgxMDAzCQkvKiBUMSB0ZWxjbyBzZXJpYWwgaW50ZXJmYWNlCSovCisjZGVmaW5lIElGX0lGQUNFX0UxCTB4MTAwNAkJLyogRTEgdGVsY28gc2VyaWFsIGludGVyZmFjZQkqLworI2RlZmluZSBJRl9JRkFDRV9TWU5DX1NFUklBTCAweDEwMDUJLyogY2FuJ3QgYmUgc2V0IGJ5IHNvZnR3YXJlCSovCisjZGVmaW5lIElGX0lGQUNFX1gyMUQgICAweDEwMDYgICAgICAgICAgLyogWC4yMSBEdWFsIENsb2NraW5nIChGYXJTaXRlKSAqLworCisvKiBGb3IgZGVmaW5pdGlvbnMgc2VlIGhkbGMuaCAqLworI2RlZmluZSBJRl9QUk9UT19IRExDCTB4MjAwMAkJLyogcmF3IEhETEMgcHJvdG9jb2wJCSovCisjZGVmaW5lIElGX1BST1RPX1BQUAkweDIwMDEJCS8qIFBQUCBwcm90b2NvbAkJCSovCisjZGVmaW5lIElGX1BST1RPX0NJU0NPCTB4MjAwMgkJLyogQ2lzY28gSERMQyBwcm90b2NvbAkJKi8KKyNkZWZpbmUgSUZfUFJPVE9fRlIJMHgyMDAzCQkvKiBGcmFtZSBSZWxheSBwcm90b2NvbAkJKi8KKyNkZWZpbmUgSUZfUFJPVE9fRlJfQUREX1BWQyAweDIwMDQJLyogICAgQ3JlYXRlIEZSIFBWQwkJKi8KKyNkZWZpbmUgSUZfUFJPVE9fRlJfREVMX1BWQyAweDIwMDUJLyogICAgRGVsZXRlIEZSIFBWQwkJKi8KKyNkZWZpbmUgSUZfUFJPVE9fWDI1CTB4MjAwNgkJLyogWC4yNQkJCQkqLworI2RlZmluZSBJRl9QUk9UT19IRExDX0VUSCAweDIwMDcJLyogcmF3IEhETEMsIEV0aGVybmV0IGVtdWxhdGlvbgkqLworI2RlZmluZSBJRl9QUk9UT19GUl9BRERfRVRIX1BWQyAweDIwMDgJLyogIENyZWF0ZSBGUiBFdGhlcm5ldC1icmlkZ2VkIFBWQyAqLworI2RlZmluZSBJRl9QUk9UT19GUl9ERUxfRVRIX1BWQyAweDIwMDkJLyogIERlbGV0ZSBGUiBFdGhlcm5ldC1icmlkZ2VkIFBWQyAqLworI2RlZmluZSBJRl9QUk9UT19GUl9QVkMJMHgyMDBBCQkvKiBmb3IgcmVhZGluZyBQVkMgc3RhdHVzCSovCisjZGVmaW5lIElGX1BST1RPX0ZSX0VUSF9QVkMgMHgyMDBCCisjZGVmaW5lIElGX1BST1RPX1JBVyAgICAweDIwMEMgICAgICAgICAgLyogUkFXIFNvY2tldCAgICAgICAgICAgICAgICAgICAqLworCisvKiBSRkMgMjg2MyBvcGVyYXRpb25hbCBzdGF0dXMgKi8KK2VudW0geworCUlGX09QRVJfVU5LTk9XTiwKKwlJRl9PUEVSX05PVFBSRVNFTlQsCisJSUZfT1BFUl9ET1dOLAorCUlGX09QRVJfTE9XRVJMQVlFUkRPV04sCisJSUZfT1BFUl9URVNUSU5HLAorCUlGX09QRVJfRE9STUFOVCwKKwlJRl9PUEVSX1VQLAorfTsKKworLyogbGluayBtb2RlcyAqLworZW51bSB7CisJSUZfTElOS19NT0RFX0RFRkFVTFQsCisJSUZfTElOS19NT0RFX0RPUk1BTlQsCS8qIGxpbWl0IHVwd2FyZCB0cmFuc2l0aW9uIHRvIGRvcm1hbnQgKi8KK307CisKKy8qCisgKglEZXZpY2UgbWFwcGluZyBzdHJ1Y3R1cmUuIEknZCBqdXN0IGdvbmUgb2ZmIGFuZCBkZXNpZ25lZCBhIAorICoJYmVhdXRpZnVsIHNjaGVtZSB1c2luZyBvbmx5IGxvYWRhYmxlIG1vZHVsZXMgd2l0aCBhcmd1bWVudHMKKyAqCWZvciBkcml2ZXIgb3B0aW9ucyBhbmQgYWxvbmcgY29tZSB0aGUgUENNQ0lBIHBlb3BsZSA4KQorICoKKyAqCUFoIHdlbGwuIFRoZSBnZXQoKSBzaWRlIG9mIHRoaXMgaXMgZ29vZCBmb3IgV0RTRVRVUCwgYW5kIGl0J2xsCisgKgliZSBoYW5keSBmb3IgZGVidWdnaW5nIHRoaW5ncy4gVGhlIHNldCBzaWRlIGlzIGZpbmUgZm9yIG5vdyBhbmQKKyAqCWJlaW5nIHZlcnkgc21hbGwgbWlnaHQgYmUgd29ydGgga2VlcGluZyBmb3IgY2xlYW4gY29uZmlndXJhdGlvbi4KKyAqLworCitzdHJ1Y3QgaWZtYXAgeworCXVuc2lnbmVkIGxvbmcgbWVtX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgbWVtX2VuZDsKKwl1bnNpZ25lZCBzaG9ydCBiYXNlX2FkZHI7IAorCXVuc2lnbmVkIGNoYXIgaXJxOworCXVuc2lnbmVkIGNoYXIgZG1hOworCXVuc2lnbmVkIGNoYXIgcG9ydDsKKwkvKiAzIGJ5dGVzIHNwYXJlICovCit9OworCitzdHJ1Y3QgaWZfc2V0dGluZ3MgeworCXVuc2lnbmVkIGludCB0eXBlOwkvKiBUeXBlIG9mIHBoeXNpY2FsIGRldmljZSBvciBwcm90b2NvbCAqLworCXVuc2lnbmVkIGludCBzaXplOwkvKiBTaXplIG9mIHRoZSBkYXRhIGFsbG9jYXRlZCBieSB0aGUgY2FsbGVyICovCisJdW5pb24geworCQkvKiB7YXRtL2V0aC9kc2x9X3NldHRpbmdzIGFueW9uZSA/ICovCisJCXJhd19oZGxjX3Byb3RvCQkqcmF3X2hkbGM7CisJCWNpc2NvX3Byb3RvCQkqY2lzY287CisJCWZyX3Byb3RvCQkqZnI7CisJCWZyX3Byb3RvX3B2YwkJKmZyX3B2YzsKKwkJZnJfcHJvdG9fcHZjX2luZm8JKmZyX3B2Y19pbmZvOworCisJCS8qIGludGVyZmFjZSBzZXR0aW5ncyAqLworCQlzeW5jX3NlcmlhbF9zZXR0aW5ncwkqc3luYzsKKwkJdGUxX3NldHRpbmdzCQkqdGUxOworCX0gaWZzX2lmc3U7Cit9OworCisvKgorICogSW50ZXJmYWNlIHJlcXVlc3Qgc3RydWN0dXJlIHVzZWQgZm9yIHNvY2tldAorICogaW9jdGwncy4gIEFsbCBpbnRlcmZhY2UgaW9jdGwncyBtdXN0IGhhdmUgcGFyYW1ldGVyCisgKiBkZWZpbml0aW9ucyB3aGljaCBiZWdpbiB3aXRoIGlmcl9uYW1lLiAgVGhlCisgKiByZW1haW5kZXIgbWF5IGJlIGludGVyZmFjZSBzcGVjaWZpYy4KKyAqLworCitzdHJ1Y3QgaWZyZXEgeworI2RlZmluZSBJRkhXQUREUkxFTgk2CisJdW5pb24KKwl7CisJCWNoYXIJaWZybl9uYW1lW0lGTkFNU0laXTsJCS8qIGlmIG5hbWUsIGUuZy4gImVuMCIgKi8KKwl9IGlmcl9pZnJuOworCQorCXVuaW9uIHsKKwkJc3RydWN0CXNvY2thZGRyIGlmcnVfYWRkcjsKKwkJc3RydWN0CXNvY2thZGRyIGlmcnVfZHN0YWRkcjsKKwkJc3RydWN0CXNvY2thZGRyIGlmcnVfYnJvYWRhZGRyOworCQlzdHJ1Y3QJc29ja2FkZHIgaWZydV9uZXRtYXNrOworCQlzdHJ1Y3QgIHNvY2thZGRyIGlmcnVfaHdhZGRyOworCQlzaG9ydAlpZnJ1X2ZsYWdzOworCQlpbnQJaWZydV9pdmFsdWU7CisJCWludAlpZnJ1X210dTsKKwkJc3RydWN0ICBpZm1hcCBpZnJ1X21hcDsKKwkJY2hhcglpZnJ1X3NsYXZlW0lGTkFNU0laXTsJLyogSnVzdCBmaXRzIHRoZSBzaXplICovCisJCWNoYXIJaWZydV9uZXduYW1lW0lGTkFNU0laXTsKKwkJdm9pZCAqCWlmcnVfZGF0YTsKKwkJc3RydWN0CWlmX3NldHRpbmdzIGlmcnVfc2V0dGluZ3M7CisJfSBpZnJfaWZydTsKK307CisKKyNkZWZpbmUgaWZyX25hbWUJaWZyX2lmcm4uaWZybl9uYW1lCS8qIGludGVyZmFjZSBuYW1lIAkqLworI2RlZmluZSBpZnJfaHdhZGRyCWlmcl9pZnJ1LmlmcnVfaHdhZGRyCS8qIE1BQyBhZGRyZXNzIAkJKi8KKyNkZWZpbmUJaWZyX2FkZHIJaWZyX2lmcnUuaWZydV9hZGRyCS8qIGFkZHJlc3MJCSovCisjZGVmaW5lCWlmcl9kc3RhZGRyCWlmcl9pZnJ1LmlmcnVfZHN0YWRkcgkvKiBvdGhlciBlbmQgb2YgcC1wIGxuawkqLworI2RlZmluZQlpZnJfYnJvYWRhZGRyCWlmcl9pZnJ1LmlmcnVfYnJvYWRhZGRyCS8qIGJyb2FkY2FzdCBhZGRyZXNzCSovCisjZGVmaW5lCWlmcl9uZXRtYXNrCWlmcl9pZnJ1LmlmcnVfbmV0bWFzawkvKiBpbnRlcmZhY2UgbmV0IG1hc2sJKi8KKyNkZWZpbmUJaWZyX2ZsYWdzCWlmcl9pZnJ1LmlmcnVfZmxhZ3MJLyogZmxhZ3MJCSovCisjZGVmaW5lCWlmcl9tZXRyaWMJaWZyX2lmcnUuaWZydV9pdmFsdWUJLyogbWV0cmljCQkqLworI2RlZmluZQlpZnJfbXR1CQlpZnJfaWZydS5pZnJ1X210dQkvKiBtdHUJCQkqLworI2RlZmluZSBpZnJfbWFwCQlpZnJfaWZydS5pZnJ1X21hcAkvKiBkZXZpY2UgbWFwCQkqLworI2RlZmluZSBpZnJfc2xhdmUJaWZyX2lmcnUuaWZydV9zbGF2ZQkvKiBzbGF2ZSBkZXZpY2UJCSovCisjZGVmaW5lCWlmcl9kYXRhCWlmcl9pZnJ1LmlmcnVfZGF0YQkvKiBmb3IgdXNlIGJ5IGludGVyZmFjZQkqLworI2RlZmluZSBpZnJfaWZpbmRleAlpZnJfaWZydS5pZnJ1X2l2YWx1ZQkvKiBpbnRlcmZhY2UgaW5kZXgJKi8KKyNkZWZpbmUgaWZyX2JhbmR3aWR0aAlpZnJfaWZydS5pZnJ1X2l2YWx1ZSAgICAvKiBsaW5rIGJhbmR3aWR0aAkqLworI2RlZmluZSBpZnJfcWxlbglpZnJfaWZydS5pZnJ1X2l2YWx1ZQkvKiBRdWV1ZSBsZW5ndGggCSovCisjZGVmaW5lIGlmcl9uZXduYW1lCWlmcl9pZnJ1LmlmcnVfbmV3bmFtZQkvKiBOZXcgbmFtZQkJKi8KKyNkZWZpbmUgaWZyX3NldHRpbmdzCWlmcl9pZnJ1LmlmcnVfc2V0dGluZ3MJLyogRGV2aWNlL3Byb3RvIHNldHRpbmdzKi8KKworLyoKKyAqIFN0cnVjdHVyZSB1c2VkIGluIFNJT0NHSUZDT05GIHJlcXVlc3QuCisgKiBVc2VkIHRvIHJldHJpZXZlIGludGVyZmFjZSBjb25maWd1cmF0aW9uCisgKiBmb3IgbWFjaGluZSAodXNlZnVsIGZvciBwcm9ncmFtcyB3aGljaAorICogbXVzdCBrbm93IGFsbCBuZXR3b3JrcyBhY2Nlc3NpYmxlKS4KKyAqLworCitzdHJ1Y3QgaWZjb25mICB7CisJaW50CWlmY19sZW47CQkJLyogc2l6ZSBvZiBidWZmZXIJKi8KKwl1bmlvbiB7CisJCWNoYXIgKmlmY3VfYnVmOworCQlzdHJ1Y3QgaWZyZXEgKmlmY3VfcmVxOworCX0gaWZjX2lmY3U7Cit9OworI2RlZmluZQlpZmNfYnVmCWlmY19pZmN1LmlmY3VfYnVmCQkvKiBidWZmZXIgYWRkcmVzcwkqLworI2RlZmluZQlpZmNfcmVxCWlmY19pZmN1LmlmY3VfcmVxCQkvKiBhcnJheSBvZiBzdHJ1Y3R1cmVzCSovCisKKyNlbmRpZiAvKiBfTElOVVhfSUZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX2FkZHIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl9hZGRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThiMzlmNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl9hZGRyLmgKQEAgLTAsMCArMSw1OSBAQAorI2lmbmRlZiBfX0xJTlVYX0lGX0FERFJfSAorI2RlZmluZSBfX0xJTlVYX0lGX0FERFJfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisKK3N0cnVjdCBpZmFkZHJtc2cgeworCV9fdTgJCWlmYV9mYW1pbHk7CisJX191OAkJaWZhX3ByZWZpeGxlbjsJLyogVGhlIHByZWZpeCBsZW5ndGgJCSovCisJX191OAkJaWZhX2ZsYWdzOwkvKiBGbGFncwkJCSovCisJX191OAkJaWZhX3Njb3BlOwkvKiBBZGRyZXNzIHNjb3BlCQkqLworCV9fdTMyCQlpZmFfaW5kZXg7CS8qIExpbmsgaW5kZXgJCQkqLworfTsKKworLyoKKyAqIEltcG9ydGFudCBjb21tZW50OgorICogSUZBX0FERFJFU1MgaXMgcHJlZml4IGFkZHJlc3MsIHJhdGhlciB0aGFuIGxvY2FsIGludGVyZmFjZSBhZGRyZXNzLgorICogSXQgbWFrZXMgbm8gZGlmZmVyZW5jZSBmb3Igbm9ybWFsbHkgY29uZmlndXJlZCBicm9hZGNhc3QgaW50ZXJmYWNlcywKKyAqIGJ1dCBmb3IgcG9pbnQtdG8tcG9pbnQgSUZBX0FERFJFU1MgaXMgREVTVElOQVRJT04gYWRkcmVzcywKKyAqIGxvY2FsIGFkZHJlc3MgaXMgc3VwcGxpZWQgaW4gSUZBX0xPQ0FMIGF0dHJpYnV0ZS4KKyAqLworZW51bSB7CisJSUZBX1VOU1BFQywKKwlJRkFfQUREUkVTUywKKwlJRkFfTE9DQUwsCisJSUZBX0xBQkVMLAorCUlGQV9CUk9BRENBU1QsCisJSUZBX0FOWUNBU1QsCisJSUZBX0NBQ0hFSU5GTywKKwlJRkFfTVVMVElDQVNULAorCV9fSUZBX01BWCwKK307CisKKyNkZWZpbmUgSUZBX01BWCAoX19JRkFfTUFYIC0gMSkKKworLyogaWZhX2ZsYWdzICovCisjZGVmaW5lIElGQV9GX1NFQ09OREFSWQkJMHgwMQorI2RlZmluZSBJRkFfRl9URU1QT1JBUlkJCUlGQV9GX1NFQ09OREFSWQorCisjZGVmaW5lCUlGQV9GX05PREFECQkweDAyCisjZGVmaW5lIElGQV9GX09QVElNSVNUSUMJMHgwNAorI2RlZmluZSBJRkFfRl9EQURGQUlMRUQJCTB4MDgKKyNkZWZpbmUJSUZBX0ZfSE9NRUFERFJFU1MJMHgxMAorI2RlZmluZSBJRkFfRl9ERVBSRUNBVEVECTB4MjAKKyNkZWZpbmUgSUZBX0ZfVEVOVEFUSVZFCQkweDQwCisjZGVmaW5lIElGQV9GX1BFUk1BTkVOVAkJMHg4MAorCitzdHJ1Y3QgaWZhX2NhY2hlaW5mbyB7CisJX191MzIJaWZhX3ByZWZlcmVkOworCV9fdTMyCWlmYV92YWxpZDsKKwlfX3UzMgljc3RhbXA7IC8qIGNyZWF0ZWQgdGltZXN0YW1wLCBodW5kcmVkdGhzIG9mIHNlY29uZHMgKi8KKwlfX3UzMgl0c3RhbXA7IC8qIHVwZGF0ZWQgdGltZXN0YW1wLCBodW5kcmVkdGhzIG9mIHNlY29uZHMgKi8KK307CisKKy8qIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciB1c2Vyc3BhY2UgKi8KKyNkZWZpbmUgSUZBX1JUQShyKSAgKChzdHJ1Y3QgcnRhdHRyKikoKChjaGFyKikocikpICsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBpZmFkZHJtc2cpKSkpCisjZGVmaW5lIElGQV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IGlmYWRkcm1zZykpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX2FkZHJsYWJlbC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX2FkZHJsYWJlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NTgwYzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfYWRkcmxhYmVsLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIGlmX2FkZHJsYWJlbC5oIC0gbmV0bGluayBpbnRlcmZhY2UgZm9yIGFkZHJlc3MgbGFiZWxzCisgKgorICogQ29weXJpZ2h0IChDKTIwMDcgVVNBR0kvV0lERSBQcm9qZWN0LCAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBBdXRob3JzOgorICoJWU9TSElGVUpJIEhpZGVha2kgQCBVU0FHSS9XSURFIDx5b3NoZnVqaUBsaW51eC1pcHY2Lm9yZz4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfSUZfQUREUkxBQkVMX0gKKyNkZWZpbmUgX19MSU5VWF9JRl9BRERSTEFCRUxfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGlmYWRkcmxibG1zZyB7CisJX191OAkJaWZhbF9mYW1pbHk7CQkvKiBBZGRyZXNzIGZhbWlseSAqLworCV9fdTgJCV9faWZhbF9yZXNlcnZlZDsJLyogUmVzZXJ2ZWQgKi8KKwlfX3U4CQlpZmFsX3ByZWZpeGxlbjsJCS8qIFByZWZpeCBsZW5ndGggKi8KKwlfX3U4CQlpZmFsX2ZsYWdzOwkJLyogRmxhZ3MgKi8KKwlfX3UzMgkJaWZhbF9pbmRleDsJCS8qIExpbmsgaW5kZXggKi8KKwlfX3UzMgkJaWZhbF9zZXE7CQkvKiBzZXF1ZW5jZSBudW1iZXIgKi8KK307CisKK2VudW0geworCUlGQUxfQUREUkVTUyA9IDEsCisJSUZBTF9MQUJFTCA9IDIsCisJX19JRkFMX01BWAorfTsKKworI2RlZmluZSBJRkFMX01BWAkoX19JRkFMX01BWCAtIDEpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX2FyY25ldC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX2FyY25ldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZTM0YmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfYXJjbmV0LmgKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBJTkVUICAgICAgICAgQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFRDUC9JUCBwcm90b2NvbCBzdWl0ZSBmb3IgdGhlIExJTlVYCisgKiAgICAgICAgICAgICAgb3BlcmF0aW5nIHN5c3RlbS4gIElORVQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlICBCU0QgU29ja2V0CisgKiAgICAgICAgICAgICAgaW50ZXJmYWNlIGFzIHRoZSBtZWFucyBvZiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHVzZXIgbGV2ZWwuCisgKgorICogICAgICAgICAgICAgIEdsb2JhbCBkZWZpbml0aW9ucyBmb3IgdGhlIEFSQ25ldCBpbnRlcmZhY2UuCisgKgorICogQXV0aG9yczogICAgIERhdmlkIFdvb2Rob3VzZSBhbmQgQXZlcnkgUGVubmFydW4KKyAqCisgKiAgICAgICAgICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgICAgICAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICAgICAgICAgICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgICAgICAgICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9JRl9BUkNORVRfSAorI2RlZmluZSBfTElOVVhfSUZfQVJDTkVUX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKworCisvKgorICogICAgVGhlc2UgYXJlIHRoZSBkZWZpbmVkIEFSQ25ldCBQcm90b2NvbCBJRCdzLgorICovCisKKy8qIENBUCBtb2RlICovCisvKiBObyBtYWNybyBidXQgdXNlcyAxLTggKi8KKworLyogUkZDMTIwMSBQcm90b2NvbCBJRCdzICovCisjZGVmaW5lIEFSQ19QX0lQCQkyMTIJLyogMHhENCAqLworI2RlZmluZSBBUkNfUF9JUFY2CQkxOTYJLyogMHhDNDogUkZDMjQ5NyAqLworI2RlZmluZSBBUkNfUF9BUlAJCTIxMwkvKiAweEQ1ICovCisjZGVmaW5lIEFSQ19QX1JBUlAJCTIxNAkvKiAweEQ2ICovCisjZGVmaW5lIEFSQ19QX0lQWAkJMjUwCS8qIDB4RkEgKi8KKyNkZWZpbmUgQVJDX1BfTk9WRUxMX0VDCQkyMzYJLyogMHhFQyAqLworCisvKiBPbGQgUkZDMTA1MSBQcm90b2NvbCBJRCdzICovCisjZGVmaW5lIEFSQ19QX0lQX1JGQzEwNTEJMjQwCS8qIDB4RjAgKi8KKyNkZWZpbmUgQVJDX1BfQVJQX1JGQzEwNTEJMjQxCS8qIDB4RjEgKi8KKworLyogTVMgTGFuTWFuL1dmV2cgIk5ESVMiIGVuY2Fwc3VsYXRpb24gKi8KKyNkZWZpbmUgQVJDX1BfRVRIRVIJCTIzMgkvKiAweEU4ICovCisKKy8qIFVuc3VwcG9ydGVkL2luZGlyZWN0bHkgc3VwcG9ydGVkIHByb3RvY29scyAqLworI2RlZmluZSBBUkNfUF9EQVRBUE9JTlRfQk9PVAkwCS8qIHZlcnkgb2xkIERhdGFwb2ludCBlcXVpcG1lbnQgKi8KKyNkZWZpbmUgQVJDX1BfREFUQVBPSU5UX01PVU5UCTEKKyNkZWZpbmUgQVJDX1BfUE9XRVJMQU5fQkVBQ09OCTgJLyogUHJvYmFibHkgQVRBLU5ldGJpb3MgcmVsYXRlZCAqLworI2RlZmluZSBBUkNfUF9QT1dFUkxBTl9CRUFDT04yCTI0MwkvKiAweEYzICovCisjZGVmaW5lIEFSQ19QX0xBTlNPRlQJCTI1MQkvKiAweEZCIC0gd2hhdCBpcyB0aGlzPyAqLworI2RlZmluZSBBUkNfUF9BVEFMSwkJMHhERAorCisvKiBIYXJkd2FyZSBhZGRyZXNzIGxlbmd0aCAqLworI2RlZmluZSBBUkNORVRfQUxFTgkxCisKKy8qCisgKiBUaGUgUkZDMTIwMS1zcGVjaWZpYyBjb21wb25lbnRzIG9mIGFuIGFyY25ldCBwYWNrZXQgaGVhZGVyLgorICovCitzdHJ1Y3QgYXJjX3JmYzEyMDEgeworICAgIF9fdTggIHByb3RvOwkJLyogcHJvdG9jb2wgSUQgZmllbGQgLSB2YXJpZXMJCSovCisgICAgX191OCAgc3BsaXRfZmxhZzsJLyogZm9yIHVzZSB3aXRoIHNwbGl0IHBhY2tldHMJCSovCisgICAgX19iZTE2ICAgc2VxdWVuY2U7CQkvKiBzZXF1ZW5jZSBudW1iZXIJCQkqLworICAgIF9fdTggIHBheWxvYWRbMF07CS8qIHNwYWNlIHJlbWFpbmluZyBpbiBwYWNrZXQgKDUwNCBieXRlcykqLworfTsKKyNkZWZpbmUgUkZDMTIwMV9IRFJfU0laRSA0CisKKworLyoKKyAqIFRoZSBSRkMxMDUxLXNwZWNpZmljIGNvbXBvbmVudHMuCisgKi8KK3N0cnVjdCBhcmNfcmZjMTA1MSB7CisgICAgX191OCBwcm90bzsJCS8qIEFSQ19QX1JGQzEwNTFfQVJQL1JGQzEwNTFfSVAJKi8KKyAgICBfX3U4IHBheWxvYWRbMF07CQkvKiA1MDcgYnl0ZXMJCQkqLworfTsKKyNkZWZpbmUgUkZDMTA1MV9IRFJfU0laRSAxCisKKworLyoKKyAqIFRoZSBldGhlcm5ldC1lbmNhcC1zcGVjaWZpYyBjb21wb25lbnRzLiAgV2UgaGF2ZSBhIHJlYWwgZXRoZXJuZXQgaGVhZGVyCisgKiBhbmQgc29tZSBkYXRhLgorICovCitzdHJ1Y3QgYXJjX2V0aF9lbmNhcCB7CisgICAgX191OCBwcm90bzsJCS8qIEFsd2F5cyBBUkNfUF9FVEhFUgkJCSovCisgICAgc3RydWN0IGV0aGhkciBldGg7CQkvKiBzdGFuZGFyZCBldGhlcm5ldCBoZWFkZXIgKHl1Y2shKQkqLworICAgIF9fdTggcGF5bG9hZFswXTsJCS8qIDQ5MyBieXRlcwkJCQkqLworfTsKKyNkZWZpbmUgRVRIX0VOQ0FQX0hEUl9TSVpFIDE0CisKKworc3RydWN0IGFyY19jYXAgeworCV9fdTggcHJvdG87CisJX191OCBjb29raWVbc2l6ZW9mKGludCldOyAgIC8qIEFjdHVhbGx5IE5PVCBzZW50IG92ZXIgdGhlIG5ldHdvcmsgKi8KKwl1bmlvbiB7CisJCV9fdTggYWNrOworCQlfX3U4IHJhd1swXTsJCS8qIDUwNyBieXRlcyAqLworCX0gbWVzOworfTsKKworLyoKKyAqIFRoZSBkYXRhIG5lZWRlZCBieSB0aGUgYWN0dWFsIGFyY25ldCBoYXJkd2FyZS4KKyAqCisgKiBOb3csIGluIHRoZSByZWFsIGFyY25ldCBoYXJkd2FyZSwgdGhlIHRoaXJkIGFuZCBmb3VydGggYnl0ZXMgYXJlIHRoZQorICogJ29mZnNldCcgc3BlY2lmaWNhdGlvbiBpbnN0ZWFkIG9mIHRoZSBsZW5ndGgsIGFuZCB0aGUgc29mdCBkYXRhIGlzIGF0CisgKiB0aGUgX2VuZF8gb2YgdGhlIDUxMi1ieXRlIGJ1ZmZlci4gIFdlIGhpZGUgdGhpcyBjb21wbGV4aXR5IGluc2lkZSB0aGUKKyAqIGRyaXZlci4KKyAqLworc3RydWN0IGFyY19oYXJkd2FyZSB7CisgICAgX191OCAgc291cmNlLAkJLyogc291cmNlIEFSQ25ldCAtIGZpbGxlZCBpbiBhdXRvbWFnaWNhbGx5ICovCisgICAgICAgICAgICAgZGVzdCwJCS8qIGRlc3RpbmF0aW9uIEFSQ25ldCAtIDAgZm9yIGJyb2FkY2FzdCAgICAqLworICAgIAkgICAgIG9mZnNldFsyXTsJCS8qIG9mZnNldCBieXRlcyAoc29tZSB3ZWlyZCBzZW1hbnRpY3MpICAgICAqLworfTsKKyNkZWZpbmUgQVJDX0hEUl9TSVpFIDQKKworLyoKKyAqIFRoaXMgaXMgYW4gQVJDbmV0IGZyYW1lIGhlYWRlciwgYXMgc2VlbiBieSB0aGUga2VybmVsIChhbmQgdXNlcnNwYWNlLAorICogd2hlbiB5b3UgZG8gYSByYXcgcGFja2V0IGNhcHR1cmUpLgorICovCitzdHJ1Y3QgYXJjaGRyIHsKKyAgICAvKiBoYXJkd2FyZSByZXF1aXJlbWVudHMgKi8KKyAgICBzdHJ1Y3QgYXJjX2hhcmR3YXJlIGhhcmQ7CisgICAgIAorICAgIC8qIGFyY25ldCBlbmNhcHN1bGF0aW9uLXNwZWNpZmljIGJpdHMgKi8KKyAgICB1bmlvbiB7CisJc3RydWN0IGFyY19yZmMxMjAxICAgcmZjMTIwMTsKKwlzdHJ1Y3QgYXJjX3JmYzEwNTEgICByZmMxMDUxOworCXN0cnVjdCBhcmNfZXRoX2VuY2FwIGV0aF9lbmNhcDsKKwlzdHJ1Y3QgYXJjX2NhcCAgICAgICBjYXA7CisJX191OCByYXdbMF07CQkvKiA1MDggYnl0ZXMJCQkJKi8KKyAgICB9IHNvZnQ7Cit9OworCisjZW5kaWYJCQkJLyogX0xJTlVYX0lGX0FSQ05FVF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfYXJwLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfYXJwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY5ZmM1ZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl9hcnAuaApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIElORVQJCUFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUQ1AvSVAgcHJvdG9jb2wgc3VpdGUgZm9yIHRoZSBMSU5VWAorICoJCW9wZXJhdGluZyBzeXN0ZW0uICBJTkVUIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSAgQlNEIFNvY2tldAorICoJCWludGVyZmFjZSBhcyB0aGUgbWVhbnMgb2YgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB1c2VyIGxldmVsLgorICoKKyAqCQlHbG9iYWwgZGVmaW5pdGlvbnMgZm9yIHRoZSBBUlAgKFJGQyA4MjYpIHByb3RvY29sLgorICoKKyAqIFZlcnNpb246CUAoIylpZl9hcnAuaAkxLjAuMQkwNC8xNi85MworICoKKyAqIEF1dGhvcnM6CU9yaWdpbmFsIHRha2VuIGZyb20gQmVya2VsZXkgVU5JWCA0LjMsIChjKSBVQ0IgMTk4Ni0xOTg4CisgKgkJUG9ydGlvbnMgdGFrZW4gZnJvbSB0aGUgS0E5US9OT1MgKHYyLjAwbSBQQTBHUkkpIHNvdXJjZS4KKyAqCQlSb3NzIEJpcm8KKyAqCQlGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KKyAqCQlGbG9yaWFuIExhIFJvY2hlLAorICoJCUpvbmF0aGFuIExheWVzIDxsYXllc0Bsb3Jhbi5jb20+CisgKgkJQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+IEFSUEhSRF9IV1gyNQorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9MSU5VWF9JRl9BUlBfSAorI2RlZmluZSBfTElOVVhfSUZfQVJQX0gKKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorCisvKiBBUlAgcHJvdG9jb2wgSEFSRFdBUkUgaWRlbnRpZmllcnMuICovCisjZGVmaW5lIEFSUEhSRF9ORVRST00JMAkJLyogZnJvbSBLQTlROiBORVQvUk9NIHBzZXVkbwkqLworI2RlZmluZSBBUlBIUkRfRVRIRVIgCTEJCS8qIEV0aGVybmV0IDEwTWJwcwkJKi8KKyNkZWZpbmUJQVJQSFJEX0VFVEhFUgkyCQkvKiBFeHBlcmltZW50YWwgRXRoZXJuZXQJKi8KKyNkZWZpbmUJQVJQSFJEX0FYMjUJMwkJLyogQVguMjUgTGV2ZWwgMgkJKi8KKyNkZWZpbmUJQVJQSFJEX1BST05FVAk0CQkvKiBQUk9uZXQgdG9rZW4gcmluZwkJKi8KKyNkZWZpbmUJQVJQSFJEX0NIQU9TCTUJCS8qIENoYW9zbmV0CQkJKi8KKyNkZWZpbmUJQVJQSFJEX0lFRUU4MDIJNgkJLyogSUVFRSA4MDIuMiBFdGhlcm5ldC9UUi9UQgkqLworI2RlZmluZQlBUlBIUkRfQVJDTkVUCTcJCS8qIEFSQ25ldAkJCSovCisjZGVmaW5lCUFSUEhSRF9BUFBMRVRMSwk4CQkvKiBBUFBMRXRhbGsJCQkqLworI2RlZmluZSBBUlBIUkRfRExDSQkxNQkJLyogRnJhbWUgUmVsYXkgRExDSQkJKi8KKyNkZWZpbmUgQVJQSFJEX0FUTQkxOQkJLyogQVRNIAkJCQkqLworI2RlZmluZSBBUlBIUkRfTUVUUklDT00JMjMJCS8qIE1ldHJpY29tIFNUUklQIChuZXcgSUFOQSBpZCkJKi8KKyNkZWZpbmUJQVJQSFJEX0lFRUUxMzk0CTI0CQkvKiBJRUVFIDEzOTQgSVB2NCAtIFJGQyAyNzM0CSovCisjZGVmaW5lIEFSUEhSRF9FVUk2NAkyNwkJLyogRVVJLTY0ICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUlBIUkRfSU5GSU5JQkFORCAzMgkJLyogSW5maW5pQmFuZAkJCSovCisKKy8qIER1bW15IHR5cGVzIGZvciBub24gQVJQIGhhcmR3YXJlICovCisjZGVmaW5lIEFSUEhSRF9TTElQCTI1NgorI2RlZmluZSBBUlBIUkRfQ1NMSVAJMjU3CisjZGVmaW5lIEFSUEhSRF9TTElQNgkyNTgKKyNkZWZpbmUgQVJQSFJEX0NTTElQNgkyNTkKKyNkZWZpbmUgQVJQSFJEX1JTUlZECTI2MAkJLyogTm90aW9uYWwgS0lTUyB0eXBlIAkJKi8KKyNkZWZpbmUgQVJQSFJEX0FEQVBUCTI2NAorI2RlZmluZSBBUlBIUkRfUk9TRQkyNzAKKyNkZWZpbmUgQVJQSFJEX1gyNQkyNzEJCS8qIENDSVRUIFguMjUJCQkqLworI2RlZmluZSBBUlBIUkRfSFdYMjUJMjcyCQkvKiBCb2FyZHMgd2l0aCBYLjI1IGluIGZpcm13YXJlCSovCisjZGVmaW5lIEFSUEhSRF9DQU4JMjgwCQkvKiBDb250cm9sbGVyIEFyZWEgTmV0d29yayAgICAgICovCisjZGVmaW5lIEFSUEhSRF9QUFAJNTEyCisjZGVmaW5lIEFSUEhSRF9DSVNDTwk1MTMJCS8qIENpc2NvIEhETEMJIAkJKi8KKyNkZWZpbmUgQVJQSFJEX0hETEMJQVJQSFJEX0NJU0NPCisjZGVmaW5lIEFSUEhSRF9MQVBCCTUxNgkJLyogTEFQQgkJCQkqLworI2RlZmluZSBBUlBIUkRfRERDTVAgICAgNTE3CQkvKiBEaWdpdGFsJ3MgRERDTVAgcHJvdG9jb2wgICAgICovCisjZGVmaW5lIEFSUEhSRF9SQVdIRExDCTUxOAkJLyogUmF3IEhETEMJCQkqLworCisjZGVmaW5lIEFSUEhSRF9UVU5ORUwJNzY4CQkvKiBJUElQIHR1bm5lbAkJCSovCisjZGVmaW5lIEFSUEhSRF9UVU5ORUw2CTc2OQkJLyogSVA2SVA2IHR1bm5lbCAgICAgICAJCSovCisjZGVmaW5lIEFSUEhSRF9GUkFECTc3MCAgICAgICAgICAgICAvKiBGcmFtZSBSZWxheSBBY2Nlc3MgRGV2aWNlICAgICovCisjZGVmaW5lIEFSUEhSRF9TS0lQCTc3MQkJLyogU0tJUCB2aWYJCQkqLworI2RlZmluZSBBUlBIUkRfTE9PUEJBQ0sJNzcyCQkvKiBMb29wYmFjayBkZXZpY2UJCSovCisjZGVmaW5lIEFSUEhSRF9MT0NBTFRMSyA3NzMJCS8qIExvY2FsdGFsayBkZXZpY2UJCSovCisjZGVmaW5lIEFSUEhSRF9GRERJCTc3NAkJLyogRmliZXIgRGlzdHJpYnV0ZWQgRGF0YSBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgQVJQSFJEX0JJRiAgICAgIDc3NSAgICAgICAgICAgICAvKiBBUDEwMDAgQklGICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFSUEhSRF9TSVQJNzc2CQkvKiBzaXQwIGRldmljZSAtIElQdjYtaW4tSVB2NAkqLworI2RlZmluZSBBUlBIUkRfSVBERFAJNzc3CQkvKiBJUCBvdmVyIEREUCB0dW5uZWxsZXIJKi8KKyNkZWZpbmUgQVJQSFJEX0lQR1JFCTc3OAkJLyogR1JFIG92ZXIgSVAJCQkqLworI2RlZmluZSBBUlBIUkRfUElNUkVHCTc3OQkJLyogUElNU00gcmVnaXN0ZXIgaW50ZXJmYWNlCSovCisjZGVmaW5lIEFSUEhSRF9ISVBQSQk3ODAJCS8qIEhpZ2ggUGVyZm9ybWFuY2UgUGFyYWxsZWwgSW50ZXJmYWNlICovCisjZGVmaW5lIEFSUEhSRF9BU0gJNzgxCQkvKiBOZXh1cyA2NE1icHMgQXNoCQkqLworI2RlZmluZSBBUlBIUkRfRUNPTkVUCTc4MgkJLyogQWNvcm4gRWNvbmV0CQkJKi8KKyNkZWZpbmUgQVJQSFJEX0lSREEgCTc4MwkJLyogTGludXgtSXJEQQkJCSovCisvKiBBUlAgd29ya3MgZGlmZmVyZW50bHkgb24gZGlmZmVyZW50IEZDIG1lZGlhIC4uIHNvICAqLworI2RlZmluZSBBUlBIUkRfRkNQUAk3ODQJCS8qIFBvaW50IHRvIHBvaW50IGZpYnJlY2hhbm5lbAkqLworI2RlZmluZSBBUlBIUkRfRkNBTAk3ODUJCS8qIEZpYnJlY2hhbm5lbCBhcmJpdHJhdGVkIGxvb3AgKi8KKyNkZWZpbmUgQVJQSFJEX0ZDUEwJNzg2CQkvKiBGaWJyZWNoYW5uZWwgcHVibGljIGxvb3AJKi8KKyNkZWZpbmUgQVJQSFJEX0ZDRkFCUklDCTc4NwkJLyogRmlicmVjaGFubmVsIGZhYnJpYwkJKi8KKwkvKiA3ODctPjc5OSByZXNlcnZlZCBmb3IgZmlicmVjaGFubmVsIG1lZGlhIHR5cGVzICovCisjZGVmaW5lIEFSUEhSRF9JRUVFODAyX1RSIDgwMAkJLyogTWFnaWMgdHlwZSBpZGVudCBmb3IgVFIJKi8KKyNkZWZpbmUgQVJQSFJEX0lFRUU4MDIxMSA4MDEJCS8qIElFRUUgODAyLjExCQkJKi8KKyNkZWZpbmUgQVJQSFJEX0lFRUU4MDIxMV9QUklTTSA4MDIJLyogSUVFRSA4MDIuMTEgKyBQcmlzbTIgaGVhZGVyICAqLworI2RlZmluZSBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQIDgwMwkvKiBJRUVFIDgwMi4xMSArIHJhZGlvdGFwIGhlYWRlciAqLworI2RlZmluZSBBUlBIUkRfSUVFRTgwMjE1NAkgIDgwNAorCisjZGVmaW5lIEFSUEhSRF9QSE9ORVQJODIwCQkvKiBQaG9OZXQgbWVkaWEgdHlwZQkJKi8KKyNkZWZpbmUgQVJQSFJEX1BIT05FVF9QSVBFIDgyMQkJLyogUGhvTmV0IHBpcGUgaGVhZGVyCQkqLworI2RlZmluZSBBUlBIUkRfQ0FJRgk4MjIJCS8qIENBSUYgbWVkaWEgdHlwZQkJKi8KKworI2RlZmluZSBBUlBIUkRfVk9JRAkgIDB4RkZGRgkvKiBWb2lkIHR5cGUsIG5vdGhpbmcgaXMga25vd24gKi8KKyNkZWZpbmUgQVJQSFJEX05PTkUJICAweEZGRkUJLyogemVybyBoZWFkZXIgbGVuZ3RoICovCisKKy8qIEFSUCBwcm90b2NvbCBvcGNvZGVzLiAqLworI2RlZmluZQlBUlBPUF9SRVFVRVNUCTEJCS8qIEFSUCByZXF1ZXN0CQkJKi8KKyNkZWZpbmUJQVJQT1BfUkVQTFkJMgkJLyogQVJQIHJlcGx5CQkJKi8KKyNkZWZpbmUJQVJQT1BfUlJFUVVFU1QJMwkJLyogUkFSUCByZXF1ZXN0CQkJKi8KKyNkZWZpbmUJQVJQT1BfUlJFUExZCTQJCS8qIFJBUlAgcmVwbHkJCQkqLworI2RlZmluZQlBUlBPUF9JblJFUVVFU1QJOAkJLyogSW5BUlAgcmVxdWVzdAkJKi8KKyNkZWZpbmUJQVJQT1BfSW5SRVBMWQk5CQkvKiBJbkFSUCByZXBseQkJCSovCisjZGVmaW5lCUFSUE9QX05BSwkxMAkJLyogKEFUTSlBUlAgTkFLCQkJKi8KKworCisvKiBBUlAgaW9jdGwgcmVxdWVzdC4gKi8KK3N0cnVjdCBhcnByZXEgeworICBzdHJ1Y3Qgc29ja2FkZHIJYXJwX3BhOwkJLyogcHJvdG9jb2wgYWRkcmVzcwkJKi8KKyAgc3RydWN0IHNvY2thZGRyCWFycF9oYTsJCS8qIGhhcmR3YXJlIGFkZHJlc3MJCSovCisgIGludAkJCWFycF9mbGFnczsJLyogZmxhZ3MJCQkqLworICBzdHJ1Y3Qgc29ja2FkZHIgICAgICAgYXJwX25ldG1hc2s7ICAgIC8qIG5ldG1hc2sgKG9ubHkgZm9yIHByb3h5IGFycHMpICovCisgIGNoYXIJCQlhcnBfZGV2WzE2XTsKK307CisKK3N0cnVjdCBhcnByZXFfb2xkIHsKKyAgc3RydWN0IHNvY2thZGRyCWFycF9wYTsJCS8qIHByb3RvY29sIGFkZHJlc3MJCSovCisgIHN0cnVjdCBzb2NrYWRkcglhcnBfaGE7CQkvKiBoYXJkd2FyZSBhZGRyZXNzCQkqLworICBpbnQJCQlhcnBfZmxhZ3M7CS8qIGZsYWdzCQkJKi8KKyAgc3RydWN0IHNvY2thZGRyICAgICAgIGFycF9uZXRtYXNrOyAgICAvKiBuZXRtYXNrIChvbmx5IGZvciBwcm94eSBhcnBzKSAqLworfTsKKworLyogQVJQIEZsYWcgdmFsdWVzLiAqLworI2RlZmluZSBBVEZfQ09NCQkweDAyCQkvKiBjb21wbGV0ZWQgZW50cnkgKGhhIHZhbGlkKQkqLworI2RlZmluZQlBVEZfUEVSTQkweDA0CQkvKiBwZXJtYW5lbnQgZW50cnkJCSovCisjZGVmaW5lCUFURl9QVUJMCTB4MDgJCS8qIHB1Ymxpc2ggZW50cnkJCSovCisjZGVmaW5lCUFURl9VU0VUUkFJTEVSUwkweDEwCQkvKiBoYXMgcmVxdWVzdGVkIHRyYWlsZXJzCSovCisjZGVmaW5lIEFURl9ORVRNQVNLICAgICAweDIwICAgICAgICAgICAgLyogd2FudCB0byB1c2UgYSBuZXRtYXNrIChvbmx5CisJCQkJCSAgIGZvciBwcm94eSBlbnRyaWVzKSAqLworI2RlZmluZSBBVEZfRE9OVFBVQgkweDQwCQkvKiBkb24ndCBhbnN3ZXIgdGhpcyBhZGRyZXNzZXMJKi8KKworLyoKKyAqCVRoaXMgc3RydWN0dXJlIGRlZmluZXMgYW4gZXRoZXJuZXQgYXJwIGhlYWRlci4KKyAqLworCitzdHJ1Y3QgYXJwaGRyIHsKKwlfX2JlMTYJCWFyX2hyZDsJCS8qIGZvcm1hdCBvZiBoYXJkd2FyZSBhZGRyZXNzCSovCisJX19iZTE2CQlhcl9wcm87CQkvKiBmb3JtYXQgb2YgcHJvdG9jb2wgYWRkcmVzcwkqLworCXVuc2lnbmVkIGNoYXIJYXJfaGxuOwkJLyogbGVuZ3RoIG9mIGhhcmR3YXJlIGFkZHJlc3MJKi8KKwl1bnNpZ25lZCBjaGFyCWFyX3BsbjsJCS8qIGxlbmd0aCBvZiBwcm90b2NvbCBhZGRyZXNzCSovCisJX19iZTE2CQlhcl9vcDsJCS8qIEFSUCBvcGNvZGUgKGNvbW1hbmQpCQkqLworCisjaWYgMAorCSAvKgorCSAgKgkgRXRoZXJuZXQgbG9va3MgbGlrZSB0aGlzIDogVGhpcyBiaXQgaXMgdmFyaWFibGUgc2l6ZWQgaG93ZXZlci4uLgorCSAgKi8KKwl1bnNpZ25lZCBjaGFyCQlhcl9zaGFbRVRIX0FMRU5dOwkvKiBzZW5kZXIgaGFyZHdhcmUgYWRkcmVzcwkqLworCXVuc2lnbmVkIGNoYXIJCWFyX3NpcFs0XTsJCS8qIHNlbmRlciBJUCBhZGRyZXNzCQkqLworCXVuc2lnbmVkIGNoYXIJCWFyX3RoYVtFVEhfQUxFTl07CS8qIHRhcmdldCBoYXJkd2FyZSBhZGRyZXNzCSovCisJdW5zaWduZWQgY2hhcgkJYXJfdGlwWzRdOwkJLyogdGFyZ2V0IElQIGFkZHJlc3MJCSovCisjZW5kaWYKKworfTsKKworCisjZW5kaWYJLyogX0xJTlVYX0lGX0FSUF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfYm9uZGluZy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX2JvbmRpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTdlZGRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX2JvbmRpbmcuaApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIEJvbmQgc2V2ZXJhbCBldGhlcm5ldCBpbnRlcmZhY2VzIGludG8gYSBDaXNjbywgcnVubmluZyAnRXRoZXJjaGFubmVsJy4KKyAqCisgKgorICogUG9ydGlvbnMgYXJlIChjKSBDb3B5cmlnaHQgMTk5NSBTaW1vbiAiR3VydSBBbGVwaC1OdWxsIiBKYW5lcworICogTkNNOiBOZXR3b3JrIGFuZCBDb21tdW5pY2F0aW9ucyBNYW5hZ2VtZW50LCBJbmMuCisgKgorICogQlVULCBJJ20gdGhlIG9uZSB3aG8gbW9kaWZpZWQgaXQgZm9yIGV0aGVybmV0LCBzbzoKKyAqIChjKSBDb3B5cmlnaHQgMTk5OSwgVGhvbWFzIERhdmlzLCB0YWRhdmlzQGxibC5nb3YKKyAqCisgKglUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCisgKglvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqCisgKiAyMDAzLzAzLzE4IC0gQW1pciBOb2FtIDxhbWlyLm5vYW0gYXQgaW50ZWwgZG90IGNvbT4KKyAqCS0gQWRkZWQgc3VwcG9ydCBmb3IgZ2V0dGluZyBzbGF2ZSdzIHNwZWVkIGFuZCBkdXBsZXggdmlhIGV0aHRvb2wuCisgKgkgIE5lZWRlZCBmb3IgODAyLjNhZCBhbmQgb3RoZXIgZnV0dXJlIG1vZGVzLgorICoKKyAqIDIwMDMvMDMvMTggLSBUc2lwcHkgTWVuZGVsc29uIDx0c2lwcHkubWVuZGVsc29uIGF0IGludGVsIGRvdCBjb20+IGFuZAorICoJCVNobXVsaWsgSGVuIDxzaG11bGlrLmhlbiBhdCBpbnRlbCBkb3QgY29tPgorICoJLSBFbmFibGUgc3VwcG9ydCBvZiBtb2RlcyB0aGF0IG5lZWQgdG8gdXNlIHRoZSB1bmlxdWUgbWFjIGFkZHJlc3Mgb2YKKyAqCSAgZWFjaCBzbGF2ZS4KKyAqCisgKiAyMDAzLzAzLzE4IC0gVHNpcHB5IE1lbmRlbHNvbiA8dHNpcHB5Lm1lbmRlbHNvbiBhdCBpbnRlbCBkb3QgY29tPiBhbmQKKyAqCQlBbWlyIE5vYW0gPGFtaXIubm9hbSBhdCBpbnRlbCBkb3QgY29tPgorICoJLSBNb3ZlZCBkcml2ZXIncyBwcml2YXRlIGRhdGEgdHlwZXMgdG8gYm9uZGluZy5oCisgKgorICogMjAwMy8wMy8xOCAtIEFtaXIgTm9hbSA8YW1pci5ub2FtIGF0IGludGVsIGRvdCBjb20+LAorICoJCVRzaXBweSBNZW5kZWxzb24gPHRzaXBweS5tZW5kZWxzb24gYXQgaW50ZWwgZG90IGNvbT4gYW5kCisgKgkJU2htdWxpayBIZW4gPHNobXVsaWsuaGVuIGF0IGludGVsIGRvdCBjb20+CisgKgktIEFkZGVkIHN1cHBvcnQgZm9yIElFRUUgODAyLjNhZCBEeW5hbWljIGxpbmsgYWdncmVnYXRpb24gbW9kZS4KKyAqCisgKiAyMDAzLzA1LzAxIC0gQW1pciBOb2FtIDxhbWlyLm5vYW0gYXQgaW50ZWwgZG90IGNvbT4KKyAqCS0gQWRkZWQgQUJJIHZlcnNpb24gY29udHJvbCB0byByZXN0b3JlIGNvbXBhdGliaWxpdHkgYmV0d2VlbgorICoJICBuZXcvb2xkIGlmZW5zbGF2ZSBhbmQgbmV3L29sZCBib25kaW5nLgorICoKKyAqIDIwMDMvMTIvMDEgLSBTaG11bGlrIEhlbiA8c2htdWxpay5oZW4gYXQgaW50ZWwgZG90IGNvbT4KKyAqCS0gQ29kZSBjbGVhbnVwIGFuZCBzdHlsZSBjaGFuZ2VzCisgKgorICogMjAwNS8wNS8wNSAtIEphc29uIEdhYmxlciA8anlnYWJsZXIgYXQgbGJsIGRvdCBnb3Y+CisgKiAgICAgIC0gYWRkZWQgZGVmaW5pdGlvbnMgZm9yIHZhcmlvdXMgWE9SIGhhc2hpbmcgcG9saWNpZXMKKyAqLworCisjaWZuZGVmIF9MSU5VWF9JRl9CT05ESU5HX0gKKyNkZWZpbmUgX0xJTlVYX0lGX0JPTkRJTkdfSAorCisjaW5jbHVkZSA8bGludXgvaWYuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisKKy8qIHVzZXJsYW5kIC0ga2VybmVsIEFCSSB2ZXJzaW9uICgyMDAzLzA1LzA4KSAqLworI2RlZmluZSBCT05EX0FCSV9WRVJTSU9OIDIKKworLyoKKyAqIFdlIGNhbiByZW1vdmUgdGhlc2UgaW9jdGwgZGVmaW5pdGlvbnMgaW4gMi41LiAgUGVvcGxlIHNob3VsZCB1c2UgdGhlCisgKiBTSU9DKioqIHZlcnNpb25zIG9mIHRoZW0gaW5zdGVhZAorICovCisjZGVmaW5lIEJPTkRfRU5TTEFWRV9PTEQJCShTSU9DREVWUFJJVkFURSkKKyNkZWZpbmUgQk9ORF9SRUxFQVNFX09MRAkJKFNJT0NERVZQUklWQVRFICsgMSkKKyNkZWZpbmUgQk9ORF9TRVRIV0FERFJfT0xECQkoU0lPQ0RFVlBSSVZBVEUgKyAyKQorI2RlZmluZSBCT05EX1NMQVZFX0lORk9fUVVFUllfT0xECShTSU9DREVWUFJJVkFURSArIDExKQorI2RlZmluZSBCT05EX0lORk9fUVVFUllfT0xECQkoU0lPQ0RFVlBSSVZBVEUgKyAxMikKKyNkZWZpbmUgQk9ORF9DSEFOR0VfQUNUSVZFX09MRAkJKFNJT0NERVZQUklWQVRFICsgMTMpCisKKyNkZWZpbmUgQk9ORF9DSEVDS19NSUlfU1RBVFVTCShTSU9DR01JSVBIWSkKKworI2RlZmluZSBCT05EX01PREVfUk9VTkRST0JJTgkwCisjZGVmaW5lIEJPTkRfTU9ERV9BQ1RJVkVCQUNLVVAJMQorI2RlZmluZSBCT05EX01PREVfWE9SCQkyCisjZGVmaW5lIEJPTkRfTU9ERV9CUk9BRENBU1QJMworI2RlZmluZSBCT05EX01PREVfODAyM0FEICAgICAgICA0CisjZGVmaW5lIEJPTkRfTU9ERV9UTEIgICAgICAgICAgIDUKKyNkZWZpbmUgQk9ORF9NT0RFX0FMQgkJNiAvKiBUTEIgKyBSTEIgKHJlY2VpdmUgbG9hZCBiYWxhbmNpbmcpICovCisKKy8qIGVhY2ggc2xhdmUncyBsaW5rIGhhcyA0IHN0YXRlcyAqLworI2RlZmluZSBCT05EX0xJTktfVVAgICAgMCAgICAgICAgICAgLyogbGluayBpcyB1cCBhbmQgcnVubmluZyAqLworI2RlZmluZSBCT05EX0xJTktfRkFJTCAgMSAgICAgICAgICAgLyogbGluayBoYXMganVzdCBnb25lIGRvd24gKi8KKyNkZWZpbmUgQk9ORF9MSU5LX0RPV04gIDIgICAgICAgICAgIC8qIGxpbmsgaGFzIGJlZW4gZG93biBmb3IgdG9vIGxvbmcgdGltZSAqLworI2RlZmluZSBCT05EX0xJTktfQkFDSyAgMyAgICAgICAgICAgLyogbGluayBpcyBnb2luZyBiYWNrICovCisKKy8qIGVhY2ggc2xhdmUgaGFzIHNldmVyYWwgc3RhdGVzICovCisjZGVmaW5lIEJPTkRfU1RBVEVfQUNUSVZFICAgICAgIDAgICAvKiBsaW5rIGlzIGFjdGl2ZSAqLworI2RlZmluZSBCT05EX1NUQVRFX0JBQ0tVUCAgICAgICAxICAgLyogbGluayBpcyBiYWNrdXAgKi8KKworI2RlZmluZSBCT05EX0RFRkFVTFRfTUFYX0JPTkRTICAxICAgLyogRGVmYXVsdCBtYXhpbXVtIG51bWJlciBvZiBkZXZpY2VzIHRvIHN1cHBvcnQgKi8KKworI2RlZmluZSBCT05EX0RFRkFVTFRfVFhfUVVFVUVTIDE2ICAgLyogRGVmYXVsdCBudW1iZXIgb2YgdHggcXVldWVzIHBlciBkZXZpY2UgKi8KKworI2RlZmluZSBCT05EX0RFRkFVTFRfUkVTRU5EX0lHTVAJMSAvKiBEZWZhdWx0IG51bWJlciBvZiBJR01QIG1lbWJlcnNoaXAgcmVwb3J0cyAqLworCisvKiBoYXNoaW5nIHR5cGVzICovCisjZGVmaW5lIEJPTkRfWE1JVF9QT0xJQ1lfTEFZRVIyCQkwIC8qIGxheWVyIDIgKE1BQyBvbmx5KSwgZGVmYXVsdCAqLworI2RlZmluZSBCT05EX1hNSVRfUE9MSUNZX0xBWUVSMzQJMSAvKiBsYXllciAzKzQgKElQIF4gKFRDUCB8fCBVRFApKSAqLworI2RlZmluZSBCT05EX1hNSVRfUE9MSUNZX0xBWUVSMjMJMiAvKiBsYXllciAyKzMgKElQIF4gTUFDKSAqLworCit0eXBlZGVmIHN0cnVjdCBpZmJvbmQgeworCV9fczMyIGJvbmRfbW9kZTsKKwlfX3MzMiBudW1fc2xhdmVzOworCV9fczMyIG1paW1vbjsKK30gaWZib25kOworCit0eXBlZGVmIHN0cnVjdCBpZnNsYXZlIHsKKwlfX3MzMiBzbGF2ZV9pZDsgLyogVXNlZCBhcyBhbiBJTiBwYXJhbSB0byB0aGUgQk9ORF9TTEFWRV9JTkZPX1FVRVJZIGlvY3RsICovCisJY2hhciBzbGF2ZV9uYW1lW0lGTkFNU0laXTsKKwlfX3M4IGxpbms7CisJX19zOCBzdGF0ZTsKKwlfX3UzMiAgbGlua19mYWlsdXJlX2NvdW50OworfSBpZnNsYXZlOworCitzdHJ1Y3QgYWRfaW5mbyB7CisJX191MTYgYWdncmVnYXRvcl9pZDsKKwlfX3UxNiBwb3J0czsKKwlfX3UxNiBhY3Rvcl9rZXk7CisJX191MTYgcGFydG5lcl9rZXk7CisJX191OCBwYXJ0bmVyX3N5c3RlbVtFVEhfQUxFTl07Cit9OworCisjZW5kaWYgLyogX0xJTlVYX0lGX0JPTkRJTkdfSCAqLworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogIHZlcnNpb24tY29udHJvbDogdAorICogIGtlcHQtbmV3LXZlcnNpb25zOiA1CisgKiAgYy1pbmRlbnQtbGV2ZWw6IDgKKyAqICBjLWJhc2ljLW9mZnNldDogOAorICogIHRhYi13aWR0aDogOAorICogRW5kOgorICovCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl9icmlkZ2UuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl9icmlkZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTkxMWI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX2JyaWRnZS5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICoJTGludXggZXRoZXJuZXQgYnJpZGdlCisgKgorICoJQXV0aG9yczoKKyAqCUxlbm5lcnQgQnV5dGVuaGVrCQk8YnV5dGVuaEBnbnUub3JnPgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfTElOVVhfSUZfQlJJREdFX0gKKyNkZWZpbmUgX0xJTlVYX0lGX0JSSURHRV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIFNZU0ZTX0JSSURHRV9BVFRSCSJicmlkZ2UiCisjZGVmaW5lIFNZU0ZTX0JSSURHRV9GREIJImJyZm9yd2FyZCIKKyNkZWZpbmUgU1lTRlNfQlJJREdFX1BPUlRfU1VCRElSICJicmlmIgorI2RlZmluZSBTWVNGU19CUklER0VfUE9SVF9BVFRSCSJicnBvcnQiCisjZGVmaW5lIFNZU0ZTX0JSSURHRV9QT1JUX0xJTksJImJyaWRnZSIKKworI2RlZmluZSBCUkNUTF9WRVJTSU9OIDEKKworI2RlZmluZSBCUkNUTF9HRVRfVkVSU0lPTiAwCisjZGVmaW5lIEJSQ1RMX0dFVF9CUklER0VTIDEKKyNkZWZpbmUgQlJDVExfQUREX0JSSURHRSAyCisjZGVmaW5lIEJSQ1RMX0RFTF9CUklER0UgMworI2RlZmluZSBCUkNUTF9BRERfSUYgNAorI2RlZmluZSBCUkNUTF9ERUxfSUYgNQorI2RlZmluZSBCUkNUTF9HRVRfQlJJREdFX0lORk8gNgorI2RlZmluZSBCUkNUTF9HRVRfUE9SVF9MSVNUIDcKKyNkZWZpbmUgQlJDVExfU0VUX0JSSURHRV9GT1JXQVJEX0RFTEFZIDgKKyNkZWZpbmUgQlJDVExfU0VUX0JSSURHRV9IRUxMT19USU1FIDkKKyNkZWZpbmUgQlJDVExfU0VUX0JSSURHRV9NQVhfQUdFIDEwCisjZGVmaW5lIEJSQ1RMX1NFVF9BR0VJTkdfVElNRSAxMQorI2RlZmluZSBCUkNUTF9TRVRfR0NfSU5URVJWQUwgMTIKKyNkZWZpbmUgQlJDVExfR0VUX1BPUlRfSU5GTyAxMworI2RlZmluZSBCUkNUTF9TRVRfQlJJREdFX1NUUF9TVEFURSAxNAorI2RlZmluZSBCUkNUTF9TRVRfQlJJREdFX1BSSU9SSVRZIDE1CisjZGVmaW5lIEJSQ1RMX1NFVF9QT1JUX1BSSU9SSVRZIDE2CisjZGVmaW5lIEJSQ1RMX1NFVF9QQVRIX0NPU1QgMTcKKyNkZWZpbmUgQlJDVExfR0VUX0ZEQl9FTlRSSUVTIDE4CisKKyNkZWZpbmUgQlJfU1RBVEVfRElTQUJMRUQgMAorI2RlZmluZSBCUl9TVEFURV9MSVNURU5JTkcgMQorI2RlZmluZSBCUl9TVEFURV9MRUFSTklORyAyCisjZGVmaW5lIEJSX1NUQVRFX0ZPUldBUkRJTkcgMworI2RlZmluZSBCUl9TVEFURV9CTE9DS0lORyA0CisKK3N0cnVjdCBfX2JyaWRnZV9pbmZvIHsKKwlfX3U2NCBkZXNpZ25hdGVkX3Jvb3Q7CisJX191NjQgYnJpZGdlX2lkOworCV9fdTMyIHJvb3RfcGF0aF9jb3N0OworCV9fdTMyIG1heF9hZ2U7CisJX191MzIgaGVsbG9fdGltZTsKKwlfX3UzMiBmb3J3YXJkX2RlbGF5OworCV9fdTMyIGJyaWRnZV9tYXhfYWdlOworCV9fdTMyIGJyaWRnZV9oZWxsb190aW1lOworCV9fdTMyIGJyaWRnZV9mb3J3YXJkX2RlbGF5OworCV9fdTggdG9wb2xvZ3lfY2hhbmdlOworCV9fdTggdG9wb2xvZ3lfY2hhbmdlX2RldGVjdGVkOworCV9fdTggcm9vdF9wb3J0OworCV9fdTggc3RwX2VuYWJsZWQ7CisJX191MzIgYWdlaW5nX3RpbWU7CisJX191MzIgZ2NfaW50ZXJ2YWw7CisJX191MzIgaGVsbG9fdGltZXJfdmFsdWU7CisJX191MzIgdGNuX3RpbWVyX3ZhbHVlOworCV9fdTMyIHRvcG9sb2d5X2NoYW5nZV90aW1lcl92YWx1ZTsKKwlfX3UzMiBnY190aW1lcl92YWx1ZTsKK307CisKK3N0cnVjdCBfX3BvcnRfaW5mbyB7CisJX191NjQgZGVzaWduYXRlZF9yb290OworCV9fdTY0IGRlc2lnbmF0ZWRfYnJpZGdlOworCV9fdTE2IHBvcnRfaWQ7CisJX191MTYgZGVzaWduYXRlZF9wb3J0OworCV9fdTMyIHBhdGhfY29zdDsKKwlfX3UzMiBkZXNpZ25hdGVkX2Nvc3Q7CisJX191OCBzdGF0ZTsKKwlfX3U4IHRvcF9jaGFuZ2VfYWNrOworCV9fdTggY29uZmlnX3BlbmRpbmc7CisJX191OCB1bnVzZWQwOworCV9fdTMyIG1lc3NhZ2VfYWdlX3RpbWVyX3ZhbHVlOworCV9fdTMyIGZvcndhcmRfZGVsYXlfdGltZXJfdmFsdWU7CisJX191MzIgaG9sZF90aW1lcl92YWx1ZTsKK307CisKK3N0cnVjdCBfX2ZkYl9lbnRyeSB7CisJX191OCBtYWNfYWRkcls2XTsKKwlfX3U4IHBvcnRfbm87CisJX191OCBpc19sb2NhbDsKKwlfX3UzMiBhZ2VpbmdfdGltZXJfdmFsdWU7CisJX191OCBwb3J0X2hpOworCV9fdTggcGFkMDsKKwlfX3UxNiB1bnVzZWQ7Cit9OworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX2NhYmxlbW9kZW0uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl9jYWJsZW1vZGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNhMTAwNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl9jYWJsZW1vZGVtLmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBfTElOVVhfQ0FCTEVNT0RFTV9IXworI2RlZmluZSBfTElOVVhfQ0FCTEVNT0RFTV9IXworLyoKKyAqCQlBdXRob3I6IEZyYW5jbyBWZW50dXJpIDxmdmVudHVyaUBtZWRpYW9uZS5uZXQ+CisgKgkJQ29weXJpZ2h0IDE5OTggRnJhbmNvIFZlbnR1cmkKKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0CisgKgkJYW5kL29yICBtb2RpZnkgaXQgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsCisgKgkJUHVibGljICBMaWNlbnNlIGFzICBwdWJsaXNoZWQgIGJ5ICB0aGUgIEZyZWUgIFNvZnR3YXJlCisgKgkJRm91bmRhdGlvbjsgIGVpdGhlciAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgKGF0CisgKgkJeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qIHNvbWUgdXNlZnVsIGRlZmluZXMgZm9yIHNiMTAwMC5jIGUgY21jb25maWcuYyAtIGZ2ICovCisjZGVmaW5lIFNJT0NHQ01TVEFUUwkJU0lPQ0RFVlBSSVZBVEUrMAkvKiBnZXQgY2FibGUgbW9kZW0gc3RhdHMgKi8KKyNkZWZpbmUgU0lPQ0dDTUZJUk1XQVJFCQlTSU9DREVWUFJJVkFURSsxCS8qIGdldCBjbSBmaXJtd2FyZSB2ZXJzaW9uICovCisjZGVmaW5lIFNJT0NHQ01GUkVRVUVOQ1kJU0lPQ0RFVlBSSVZBVEUrMgkvKiBnZXQgY2FibGUgbW9kZW0gZnJlcXVlbmN5ICovCisjZGVmaW5lIFNJT0NTQ01GUkVRVUVOQ1kJU0lPQ0RFVlBSSVZBVEUrMwkvKiBzZXQgY2FibGUgbW9kZW0gZnJlcXVlbmN5ICovCisjZGVmaW5lIFNJT0NHQ01QSURTCQkJU0lPQ0RFVlBSSVZBVEUrNAkvKiBnZXQgY2FibGUgbW9kZW0gUElEcyAqLworI2RlZmluZSBTSU9DU0NNUElEUwkJCVNJT0NERVZQUklWQVRFKzUJLyogc2V0IGNhYmxlIG1vZGVtIFBJRHMgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfZWMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl9lYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwN2VkZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfZWMuaApAQCAtMCwwICsxLDM0IEBACisvKiBEZWZpbml0aW9ucyBmb3IgRWNvbmV0IHNvY2tldHMuICovCisKKyNpZm5kZWYgX19MSU5VWF9JRl9FQworI2RlZmluZSBfX0xJTlVYX0lGX0VDCisKKy8qIFVzZXIgdmlzaWJsZSBzdHVmZi4gR2xpYmMgcHJvdmlkZXMgaXRzIG93biBidXQgbGliYzUgZm9sayB3aWxsIHVzZSB0aGVzZSAqLworCitzdHJ1Y3QgZWNfYWRkciB7CisgIHVuc2lnbmVkIGNoYXIgc3RhdGlvbjsJCS8qIFN0YXRpb24gbnVtYmVyLiAgKi8KKyAgdW5zaWduZWQgY2hhciBuZXQ7CQkJLyogTmV0d29yayBudW1iZXIuICAqLworfTsKKworc3RydWN0IHNvY2thZGRyX2VjIHsKKyAgdW5zaWduZWQgc2hvcnQgc2VjX2ZhbWlseTsKKyAgdW5zaWduZWQgY2hhciBwb3J0OwkJCS8qIFBvcnQgbnVtYmVyLiAgKi8KKyAgdW5zaWduZWQgY2hhciBjYjsJCQkvKiBDb250cm9sL2ZsYWcgYnl0ZS4gICovCisgIHVuc2lnbmVkIGNoYXIgdHlwZTsJCQkvKiBUeXBlIG9mIG1lc3NhZ2UuICAqLworICBzdHJ1Y3QgZWNfYWRkciBhZGRyOworICB1bnNpZ25lZCBsb25nIGNvb2tpZTsKK307CisKKyNkZWZpbmUgRUNUWVBFX1BBQ0tFVF9SRUNFSVZFRAkJMAkvKiBQYWNrZXQgcmVjZWl2ZWQgKi8KKyNkZWZpbmUgRUNUWVBFX1RSQU5TTUlUX1NUQVRVUwkJMHgxMAkvKiBUcmFuc21pdCBjb21wbGV0ZWQsIAorCQkJCQkJICAgbG93IG5pYmJsZSBob2xkcyBzdGF0dXMgKi8KKworI2RlZmluZSBFQ1RZUEVfVFJBTlNNSVRfT0sJCTEKKyNkZWZpbmUgRUNUWVBFX1RSQU5TTUlUX05PVF9MSVNURU5JTkcJMgorI2RlZmluZSBFQ1RZUEVfVFJBTlNNSVRfTkVUX0VSUk9SCTMKKyNkZWZpbmUgRUNUWVBFX1RSQU5TTUlUX05PX0NMT0NLCTQKKyNkZWZpbmUgRUNUWVBFX1RSQU5TTUlUX0xJTkVfSkFNTUVECTUKKyNkZWZpbmUgRUNUWVBFX1RSQU5TTUlUX05PVF9QUkVTRU5UCTYKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl9lcWwuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl9lcWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGI5NGVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX2VxbC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBFcXVhbGl6ZXIgTG9hZC1iYWxhbmNlciBmb3Igc2VyaWFsIG5ldHdvcmsgaW50ZXJmYWNlcy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDE5OTUgU2ltb24gIkd1cnUgQWxlcGgtTnVsbCIgSmFuZXMKKyAqIE5DTTogTmV0d29yayBhbmQgQ29tbXVuaWNhdGlvbnMgTWFuYWdlbWVudCwgSW5jLgorICoKKyAqCisgKglUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCisgKglvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICogCisgKiBUaGUgYXV0aG9yIG1heSBiZSByZWFjaGVkIGFzIHNpbW9uQG5jbS5jb20sIG9yIEMvTworICogICAgTkNNCisgKiAgICBBdHRuOiBTaW1vbiBKYW5lcworICogICAgNjgwMyBXaGl0dGllciBBdmUKKyAqICAgIE1jTGVhbiBWQSAyMjEwMQorICogICAgUGhvbmU6IDEtNzAzLTg0Ny0wMDQwIGV4dCAxMDMKKyAqLworCisjaWZuZGVmIF9MSU5VWF9JRl9FUUxfSAorI2RlZmluZSBfTElOVVhfSUZfRVFMX0gKKworI2RlZmluZSBFUUxfREVGQVVMVF9TTEFWRV9QUklPUklUWSAyODgwMAorI2RlZmluZSBFUUxfREVGQVVMVF9NQVhfU0xBVkVTICAgICA0CisjZGVmaW5lIEVRTF9ERUZBVUxUX01UVSAgICAgICAgICAgIDU3NgorI2RlZmluZSBFUUxfREVGQVVMVF9SRVNDSEVEX0lWQUwgICAxMDAKKworI2RlZmluZSBFUUxfRU5TTEFWRSAgICAgKFNJT0NERVZQUklWQVRFKQorI2RlZmluZSBFUUxfRU1BTkNJUEFURSAgKFNJT0NERVZQUklWQVRFICsgMSkKKworI2RlZmluZSBFUUxfR0VUU0xBVkVDRkcgKFNJT0NERVZQUklWQVRFICsgMikKKyNkZWZpbmUgRVFMX1NFVFNMQVZFQ0ZHIChTSU9DREVWUFJJVkFURSArIDMpCisKKyNkZWZpbmUgRVFMX0dFVE1BU1RSQ0ZHIChTSU9DREVWUFJJVkFURSArIDQpCisjZGVmaW5lIEVRTF9TRVRNQVNUUkNGRyAoU0lPQ0RFVlBSSVZBVEUgKyA1KQorCisKK3R5cGVkZWYgc3RydWN0IG1hc3Rlcl9jb25maWcgeworCWNoYXIJbWFzdGVyX25hbWVbMTZdOworCWludAltYXhfc2xhdmVzOworCWludAltaW5fc2xhdmVzOworfSBtYXN0ZXJfY29uZmlnX3Q7CisKK3R5cGVkZWYgc3RydWN0IHNsYXZlX2NvbmZpZyB7CisJY2hhcglzbGF2ZV9uYW1lWzE2XTsKKwlsb25nCXByaW9yaXR5OworfSBzbGF2ZV9jb25maWdfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc2xhdmluZ19yZXF1ZXN0IHsKKwljaGFyCXNsYXZlX25hbWVbMTZdOworCWxvbmcJcHJpb3JpdHk7Cit9IHNsYXZpbmdfcmVxdWVzdF90OworCisKKyNlbmRpZiAvKiBfTElOVVhfRVFMX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UyNzVjNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogSU5FVAkJQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFRDUC9JUCBwcm90b2NvbCBzdWl0ZSBmb3IgdGhlIExJTlVYCisgKgkJb3BlcmF0aW5nIHN5c3RlbS4gIElORVQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlICBCU0QgU29ja2V0CisgKgkJaW50ZXJmYWNlIGFzIHRoZSBtZWFucyBvZiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHVzZXIgbGV2ZWwuCisgKgorICoJCUdsb2JhbCBkZWZpbml0aW9ucyBmb3IgdGhlIEV0aGVybmV0IElFRUUgODAyLjMgaW50ZXJmYWNlLgorICoKKyAqIFZlcnNpb246CUAoIylpZl9ldGhlci5oCTEuMC4xYQkwMi8wOC85NAorICoKKyAqIEF1dGhvcjoJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CisgKgkJRG9uYWxkIEJlY2tlciwgPGJlY2tlckBzdXBlci5vcmc+CisgKgkJQWxhbiBDb3gsIDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CisgKgkJU3RldmUgV2hpdGVob3VzZSwgPGd3N3JybUBlZXNoYWNrMy5zd2FuLmFjLnVrPgorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0xJTlVYX0lGX0VUSEVSX0gKKyNkZWZpbmUgX0xJTlVYX0lGX0VUSEVSX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKglJRUVFIDgwMi4zIEV0aGVybmV0IG1hZ2ljIGNvbnN0YW50cy4gIFRoZSBmcmFtZSBzaXplcyBvbWl0IHRoZSBwcmVhbWJsZQorICoJYW5kIEZDUy9DUkMgKGZyYW1lIGNoZWNrIHNlcXVlbmNlKS4KKyAqLworCisjZGVmaW5lIEVUSF9BTEVOCTYJCS8qIE9jdGV0cyBpbiBvbmUgZXRoZXJuZXQgYWRkcgkgKi8KKyNkZWZpbmUgRVRIX0hMRU4JMTQJCS8qIFRvdGFsIG9jdGV0cyBpbiBoZWFkZXIuCSAqLworI2RlZmluZSBFVEhfWkxFTgk2MAkJLyogTWluLiBvY3RldHMgaW4gZnJhbWUgc2FucyBGQ1MgKi8KKyNkZWZpbmUgRVRIX0RBVEFfTEVOCTE1MDAJCS8qIE1heC4gb2N0ZXRzIGluIHBheWxvYWQJICovCisjZGVmaW5lIEVUSF9GUkFNRV9MRU4JMTUxNAkJLyogTWF4LiBvY3RldHMgaW4gZnJhbWUgc2FucyBGQ1MgKi8KKyNkZWZpbmUgRVRIX0ZDU19MRU4JNAkJLyogT2N0ZXRzIGluIHRoZSBGQ1MJCSAqLworCisvKgorICoJVGhlc2UgYXJlIHRoZSBkZWZpbmVkIEV0aGVybmV0IFByb3RvY29sIElEJ3MuCisgKi8KKworI2RlZmluZSBFVEhfUF9MT09QCTB4MDA2MAkJLyogRXRoZXJuZXQgTG9vcGJhY2sgcGFja2V0CSovCisjZGVmaW5lIEVUSF9QX1BVUAkweDAyMDAJCS8qIFhlcm94IFBVUCBwYWNrZXQJCSovCisjZGVmaW5lIEVUSF9QX1BVUEFUCTB4MDIwMQkJLyogWGVyb3ggUFVQIEFkZHIgVHJhbnMgcGFja2V0CSovCisjZGVmaW5lIEVUSF9QX0lQCTB4MDgwMAkJLyogSW50ZXJuZXQgUHJvdG9jb2wgcGFja2V0CSovCisjZGVmaW5lIEVUSF9QX1gyNQkweDA4MDUJCS8qIENDSVRUIFguMjUJCQkqLworI2RlZmluZSBFVEhfUF9BUlAJMHgwODA2CQkvKiBBZGRyZXNzIFJlc29sdXRpb24gcGFja2V0CSovCisjZGVmaW5lCUVUSF9QX0JQUQkweDA4RkYJCS8qIEc4QlBRIEFYLjI1IEV0aGVybmV0IFBhY2tldAlbIE5PVCBBTiBPRkZJQ0lBTExZIFJFR0lTVEVSRUQgSUQgXSAqLworI2RlZmluZSBFVEhfUF9JRUVFUFVQCTB4MGEwMAkJLyogWGVyb3ggSUVFRTgwMi4zIFBVUCBwYWNrZXQgKi8KKyNkZWZpbmUgRVRIX1BfSUVFRVBVUEFUCTB4MGEwMQkJLyogWGVyb3ggSUVFRTgwMi4zIFBVUCBBZGRyIFRyYW5zIHBhY2tldCAqLworI2RlZmluZSBFVEhfUF9ERUMgICAgICAgMHg2MDAwICAgICAgICAgIC8qIERFQyBBc3NpZ25lZCBwcm90byAgICAgICAgICAgKi8KKyNkZWZpbmUgRVRIX1BfRE5BX0RMICAgIDB4NjAwMSAgICAgICAgICAvKiBERUMgRE5BIER1bXAvTG9hZCAgICAgICAgICAgICovCisjZGVmaW5lIEVUSF9QX0ROQV9SQyAgICAweDYwMDIgICAgICAgICAgLyogREVDIEROQSBSZW1vdGUgQ29uc29sZSAgICAgICAqLworI2RlZmluZSBFVEhfUF9ETkFfUlQgICAgMHg2MDAzICAgICAgICAgIC8qIERFQyBETkEgUm91dGluZyAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRVRIX1BfTEFUICAgICAgIDB4NjAwNCAgICAgICAgICAvKiBERUMgTEFUICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVUSF9QX0RJQUcgICAgICAweDYwMDUgICAgICAgICAgLyogREVDIERpYWdub3N0aWNzICAgICAgICAgICAgICAqLworI2RlZmluZSBFVEhfUF9DVVNUICAgICAgMHg2MDA2ICAgICAgICAgIC8qIERFQyBDdXN0b21lciB1c2UgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRVRIX1BfU0NBICAgICAgIDB4NjAwNyAgICAgICAgICAvKiBERUMgU3lzdGVtcyBDb21tcyBBcmNoICAgICAgICovCisjZGVmaW5lIEVUSF9QX1RFQgkweDY1NTgJCS8qIFRyYW5zIEV0aGVyIEJyaWRnaW5nCQkqLworI2RlZmluZSBFVEhfUF9SQVJQICAgICAgMHg4MDM1CQkvKiBSZXZlcnNlIEFkZHIgUmVzIHBhY2tldAkqLworI2RlZmluZSBFVEhfUF9BVEFMSwkweDgwOUIJCS8qIEFwcGxldGFsayBERFAJCSovCisjZGVmaW5lIEVUSF9QX0FBUlAJMHg4MEYzCQkvKiBBcHBsZXRhbGsgQUFSUAkJKi8KKyNkZWZpbmUgRVRIX1BfODAyMVEJMHg4MTAwICAgICAgICAgIC8qIDgwMi4xUSBWTEFOIEV4dGVuZGVkIEhlYWRlciAgKi8KKyNkZWZpbmUgRVRIX1BfSVBYCTB4ODEzNwkJLyogSVBYIG92ZXIgRElYCQkJKi8KKyNkZWZpbmUgRVRIX1BfSVBWNgkweDg2REQJCS8qIElQdjYgb3ZlciBibHVlYm9vawkJKi8KKyNkZWZpbmUgRVRIX1BfUEFVU0UJMHg4ODA4CQkvKiBJRUVFIFBhdXNlIGZyYW1lcy4gU2VlIDgwMi4zIDMxQiAqLworI2RlZmluZSBFVEhfUF9TTE9XCTB4ODgwOQkJLyogU2xvdyBQcm90b2NvbC4gU2VlIDgwMi4zYWQgNDNCICovCisjZGVmaW5lIEVUSF9QX1dDQ1AJMHg4ODNFCQkvKiBXZWItY2FjaGUgY29vcmRpbmF0aW9uIHByb3RvY29sCisJCQkJCSAqIGRlZmluZWQgaW4gZHJhZnQtd2lsc29uLXdyZWMtd2NjcC12Mi0wMC50eHQgKi8KKyNkZWZpbmUgRVRIX1BfUFBQX0RJU0MJMHg4ODYzCQkvKiBQUFBvRSBkaXNjb3ZlcnkgbWVzc2FnZXMgICAgICovCisjZGVmaW5lIEVUSF9QX1BQUF9TRVMJMHg4ODY0CQkvKiBQUFBvRSBzZXNzaW9uIG1lc3NhZ2VzCSovCisjZGVmaW5lIEVUSF9QX01QTFNfVUMJMHg4ODQ3CQkvKiBNUExTIFVuaWNhc3QgdHJhZmZpYwkJKi8KKyNkZWZpbmUgRVRIX1BfTVBMU19NQwkweDg4NDgJCS8qIE1QTFMgTXVsdGljYXN0IHRyYWZmaWMJKi8KKyNkZWZpbmUgRVRIX1BfQVRNTVBPQQkweDg4NGMJCS8qIE11bHRpUHJvdG9jb2wgT3ZlciBBVE0JKi8KKyNkZWZpbmUgRVRIX1BfQVRNRkFURQkweDg4ODQJCS8qIEZyYW1lLWJhc2VkIEFUTSBUcmFuc3BvcnQKKwkJCQkJICogb3ZlciBFdGhlcm5ldAorCQkJCQkgKi8KKyNkZWZpbmUgRVRIX1BfUEFFCTB4ODg4RQkJLyogUG9ydCBBY2Nlc3MgRW50aXR5IChJRUVFIDgwMi4xWCkgKi8KKyNkZWZpbmUgRVRIX1BfQU9FCTB4ODhBMgkJLyogQVRBIG92ZXIgRXRoZXJuZXQJCSovCisjZGVmaW5lIEVUSF9QX1RJUEMJMHg4OENBCQkvKiBUSVBDIAkJCSovCisjZGVmaW5lIEVUSF9QXzE1ODgJMHg4OEY3CQkvKiBJRUVFIDE1ODggVGltZXN5bmMgKi8KKyNkZWZpbmUgRVRIX1BfRkNPRQkweDg5MDYJCS8qIEZpYnJlIENoYW5uZWwgb3ZlciBFdGhlcm5ldCAgKi8KKyNkZWZpbmUgRVRIX1BfRklQCTB4ODkxNAkJLyogRkNvRSBJbml0aWFsaXphdGlvbiBQcm90b2NvbCAqLworI2RlZmluZSBFVEhfUF9FRFNBCTB4REFEQQkJLyogRXRoZXJ0eXBlIERTQSBbIE5PVCBBTiBPRkZJQ0lBTExZIFJFR0lTVEVSRUQgSUQgXSAqLworCisvKgorICoJTm9uIERJWCB0eXBlcy4gV29uJ3QgY2xhc2ggZm9yIDE1MDAgdHlwZXMuCisgKi8KKworI2RlZmluZSBFVEhfUF84MDJfMwkweDAwMDEJCS8qIER1bW15IHR5cGUgZm9yIDgwMi4zIGZyYW1lcyAgKi8KKyNkZWZpbmUgRVRIX1BfQVgyNQkweDAwMDIJCS8qIER1bW15IHByb3RvY29sIGlkIGZvciBBWC4yNSAgKi8KKyNkZWZpbmUgRVRIX1BfQUxMCTB4MDAwMwkJLyogRXZlcnkgcGFja2V0IChiZSBjYXJlZnVsISEhKSAqLworI2RlZmluZSBFVEhfUF84MDJfMgkweDAwMDQJCS8qIDgwMi4yIGZyYW1lcyAJCSovCisjZGVmaW5lIEVUSF9QX1NOQVAJMHgwMDA1CQkvKiBJbnRlcm5hbCBvbmx5CQkqLworI2RlZmluZSBFVEhfUF9ERENNUCAgICAgMHgwMDA2ICAgICAgICAgIC8qIERFQyBERENNUDogSW50ZXJuYWwgb25seSAgICAgKi8KKyNkZWZpbmUgRVRIX1BfV0FOX1BQUCAgIDB4MDAwNyAgICAgICAgICAvKiBEdW1teSB0eXBlIGZvciBXQU4gUFBQIGZyYW1lcyovCisjZGVmaW5lIEVUSF9QX1BQUF9NUCAgICAweDAwMDggICAgICAgICAgLyogRHVtbXkgdHlwZSBmb3IgUFBQIE1QIGZyYW1lcyAqLworI2RlZmluZSBFVEhfUF9MT0NBTFRBTEsgMHgwMDA5CQkvKiBMb2NhbHRhbGsgcHNldWRvIHR5cGUgCSovCisjZGVmaW5lIEVUSF9QX0NBTgkweDAwMEMJCS8qIENvbnRyb2xsZXIgQXJlYSBOZXR3b3JrICAgICAgKi8KKyNkZWZpbmUgRVRIX1BfUFBQVEFMSwkweDAwMTAJCS8qIER1bW15IHR5cGUgZm9yIEF0YWxrIG92ZXIgUFBQKi8KKyNkZWZpbmUgRVRIX1BfVFJfODAyXzIJMHgwMDExCQkvKiA4MDIuMiBmcmFtZXMgCQkqLworI2RlZmluZSBFVEhfUF9NT0JJVEVYCTB4MDAxNQkJLyogTW9iaXRleCAoa2F6QGNhZmUubmV0KQkqLworI2RlZmluZSBFVEhfUF9DT05UUk9MCTB4MDAxNgkJLyogQ2FyZCBzcGVjaWZpYyBjb250cm9sIGZyYW1lcyAqLworI2RlZmluZSBFVEhfUF9JUkRBCTB4MDAxNwkJLyogTGludXgtSXJEQQkJCSovCisjZGVmaW5lIEVUSF9QX0VDT05FVAkweDAwMTgJCS8qIEFjb3JuIEVjb25ldAkJCSovCisjZGVmaW5lIEVUSF9QX0hETEMJMHgwMDE5CQkvKiBIRExDIGZyYW1lcwkJCSovCisjZGVmaW5lIEVUSF9QX0FSQ05FVAkweDAwMUEJCS8qIDFBIGZvciBBcmNOZXQgOi0pICAgICAgICAgICAgKi8KKyNkZWZpbmUgRVRIX1BfRFNBCTB4MDAxQgkJLyogRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2guCSovCisjZGVmaW5lIEVUSF9QX1RSQUlMRVIJMHgwMDFDCQkvKiBUcmFpbGVyIHN3aXRjaCB0YWdnaW5nCSovCisjZGVmaW5lIEVUSF9QX1BIT05FVAkweDAwRjUJCS8qIE5va2lhIFBob25ldCBmcmFtZXMgICAgICAgICAgKi8KKyNkZWZpbmUgRVRIX1BfSUVFRTgwMjE1NCAweDAwRjYJCS8qIElFRUU4MDIuMTUuNCBmcmFtZQkJKi8KKyNkZWZpbmUgRVRIX1BfQ0FJRgkweDAwRjcJCS8qIFNULUVyaWNzc29uIENBSUYgcHJvdG9jb2wJKi8KKworLyoKKyAqCVRoaXMgaXMgYW4gRXRoZXJuZXQgZnJhbWUgaGVhZGVyLgorICovCisKK3N0cnVjdCBldGhoZHIgeworCXVuc2lnbmVkIGNoYXIJaF9kZXN0W0VUSF9BTEVOXTsJLyogZGVzdGluYXRpb24gZXRoIGFkZHIJKi8KKwl1bnNpZ25lZCBjaGFyCWhfc291cmNlW0VUSF9BTEVOXTsJLyogc291cmNlIGV0aGVyIGFkZHIJKi8KKwlfX2JlMTYJCWhfcHJvdG87CQkvKiBwYWNrZXQgdHlwZSBJRCBmaWVsZAkqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisjZW5kaWYJLyogX0xJTlVYX0lGX0VUSEVSX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl9mYy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX2ZjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVkN2YxYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl9mYy5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJR2xvYmFsIGRlZmluaXRpb25zIGZvciBGaWJyZSBDaGFubmVsLgorICoKKyAqIFZlcnNpb246CUAoIylpZl9mYy5oCTAuMAkxMS8yMC85OAorICoKKyAqIEF1dGhvcjoJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CisgKgkJRG9uYWxkIEJlY2tlciwgPGJlY2tlckBzdXBlci5vcmc+CisgKiAgICBQZXRlciBEZSBTY2hyaWp2ZXIsIDxzdHVkMTFAY2M0Lmt1bGV1dmVuLmFjLmJlPgorICoJICBWaW5lZXQgQWJyYWhhbSwgPHZtYUBpb2wudW5oLmVkdT4KKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfTElOVVhfSUZfRkNfSAorI2RlZmluZSBfTElOVVhfSUZfRkNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBGQ19BTEVOCTYJCS8qIE9jdGV0cyBpbiBvbmUgZXRoZXJuZXQgYWRkcgkgKi8KKyNkZWZpbmUgRkNfSExFTiAgIChzaXplb2Yoc3RydWN0IGZjaF9oZHIpK3NpemVvZihzdHJ1Y3QgZmNsbGMpKQorI2RlZmluZSBGQ19JRF9MRU4gMwkJLyogT2N0ZXRzIGluIGEgRmlicmUgQ2hhbm5lbCBBZGRyZXNzICovCisKKy8qIExMQyBhbmQgU05BUCBjb25zdGFudHMgKi8KKyNkZWZpbmUgRVhURU5ERURfU0FQIDB4QUEKKyNkZWZpbmUgVUlfQ01EICAgICAgIDB4MDMKKworLyogVGhpcyBpcyBOT1QgdGhlIEZpYnJlIENoYW5uZWwgZnJhbWUgaGVhZGVyLiBUaGUgRkMgZnJhbWUgaGVhZGVyIGlzCisgKiAgY29uc3RydWN0ZWQgaW4gdGhlIGRyaXZlciBhcyB0aGUgVGFjaHlvbiBuZWVkcyBjZXJ0YWluIGZpZWxkcyBpbgorICogIGNlcnRhaW5zIHBvc2l0aW9ucy4gU28sIGl0IGNhbid0IGJlIGdlbmVyYWxpemVkIGhlcmUuKi8KKworc3RydWN0IGZjaF9oZHIgeworCV9fdTggIGRhZGRyW0ZDX0FMRU5dOwkJLyogZGVzdGluYXRpb24gYWRkcmVzcyAqLworCV9fdTggIHNhZGRyW0ZDX0FMRU5dOwkJLyogc291cmNlIGFkZHJlc3MgKi8KK307CisKKy8qIFRoaXMgaXMgYSBGaWJyZSBDaGFubmVsIExMQyBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBmY2xsYyB7CisJX191OCAgZHNhcDsJCQkvKiBkZXN0aW5hdGlvbiBTQVAgKi8KKwlfX3U4ICBzc2FwOwkJCS8qIHNvdXJjZSBTQVAgKi8KKwlfX3U4ICBsbGM7CQkJLyogTExDIGNvbnRyb2wgZmllbGQgKi8KKwlfX3U4ICBwcm90aWRbM107CQkvKiBwcm90b2NvbCBpZCAqLworCV9fYmUxNiBldGhlcnR5cGU7CQkvKiBldGhlciB0eXBlIGZpZWxkICovCit9OworCisjZW5kaWYJLyogX0xJTlVYX0lGX0ZDX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl9mZGRpLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfZmRkaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMjg0NDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfZmRkaS5oCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogSU5FVAkJQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFRDUC9JUCBwcm90b2NvbCBzdWl0ZSBmb3IgdGhlIExJTlVYCisgKgkJb3BlcmF0aW5nIHN5c3RlbS4gIElORVQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJR2xvYmFsIGRlZmluaXRpb25zIGZvciB0aGUgQU5TSSBGRERJIGludGVyZmFjZS4KKyAqCisgKiBWZXJzaW9uOglAKCMpaWZfZmRkaS5oCTEuMC4yCVNlcCAyOSAyMDA0CisgKgorICogQXV0aG9yOglMYXdyZW5jZSBWLiBTdGVmYW5pLCA8c3RlZmFuaUBsa2cuZGVjLmNvbT4KKyAqCisgKgkJaWZfZmRkaS5oIGlzIGJhc2VkIG9uIHByZXZpb3VzIGlmX2V0aGVyLmggYW5kIGlmX3RyLmggd29yayBieQorICoJCQlGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KKyAqCQkJRG9uYWxkIEJlY2tlciwgPGJlY2tlckBzdXBlci5vcmc+CisgKgkJCUFsYW4gQ294LCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgorICoJCQlTdGV2ZSBXaGl0ZWhvdXNlLCA8Z3c3cnJtQGVlc2hhY2szLnN3YW4uYWMudWs+CisgKgkJCVBldGVyIERlIFNjaHJpanZlciwgPHN0dWQxMUBjYzQua3VsZXV2ZW4uYWMuYmU+CisgKgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX0xJTlVYX0lGX0ZERElfSAorI2RlZmluZSBfTElOVVhfSUZfRkRESV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICogIERlZmluZSBtYXggYW5kIG1pbiBsZWdhbCBzaXplcy4gIFRoZSBmcmFtZSBzaXplcyBkbyBub3QgaW5jbHVkZQorICogIDQgYnl0ZSBGQ1MvQ1JDIChmcmFtZSBjaGVjayBzZXF1ZW5jZSkuCisgKi8KKyNkZWZpbmUgRkRESV9LX0FMRU4JCQk2CQkvKiBPY3RldHMgaW4gb25lIEZEREkgYWRkcmVzcyAqLworI2RlZmluZSBGRERJX0tfODAyMl9ITEVOCTE2CQkvKiBUb3RhbCBvY3RldHMgaW4gODAyLjIgaGVhZGVyICovCisjZGVmaW5lIEZERElfS19TTkFQX0hMRU4JMjEJCS8qIFRvdGFsIG9jdGV0cyBpbiA4MDIuMiBTTkFQIGhlYWRlciAqLworI2RlZmluZSBGRERJX0tfODAyMl9aTEVOCTE2CQkvKiBNaW4gb2N0ZXRzIGluIDgwMi4yIGZyYW1lIHNhbnMgRkNTICovCisjZGVmaW5lIEZERElfS19TTkFQX1pMRU4JMjEJCS8qIE1pbiBvY3RldHMgaW4gODAyLjIgU05BUCBmcmFtZSBzYW5zIEZDUyAqLworI2RlZmluZSBGRERJX0tfODAyMl9ETEVOCTQ0NzUJLyogTWF4IG9jdGV0cyBpbiA4MDIuMiBwYXlsb2FkICovCisjZGVmaW5lIEZERElfS19TTkFQX0RMRU4JNDQ3MAkvKiBNYXggb2N0ZXRzIGluIDgwMi4yIFNOQVAgcGF5bG9hZCAqLworI2RlZmluZSBGRERJX0tfTExDX1pMRU4JCTEzCQkvKiBNaW4gb2N0ZXRzIGluIExMQyBmcmFtZSBzYW5zIEZDUyAqLworI2RlZmluZSBGRERJX0tfTExDX0xFTgkJNDQ5MQkvKiBNYXggb2N0ZXRzIGluIExMQyBmcmFtZSBzYW5zIEZDUyAqLworCisvKiBEZWZpbmUgRkRESSBGcmFtZSBDb250cm9sIChGQykgQnl0ZSB2YWx1ZXMgKi8KKyNkZWZpbmUgRkRESV9GQ19LX1ZPSUQJCQkJCTB4MDAJCisjZGVmaW5lIEZERElfRkNfS19OT05fUkVTVFJJQ1RFRF9UT0tFTgkweDgwCQorI2RlZmluZSBGRERJX0ZDX0tfUkVTVFJJQ1RFRF9UT0tFTgkJMHhDMAkKKyNkZWZpbmUgRkRESV9GQ19LX1NNVF9NSU4JCQkJMHg0MQorI2RlZmluZSBGRERJX0ZDX0tfU01UX01BWAkJICAgCQkweDRGCisjZGVmaW5lIEZERElfRkNfS19NQUNfTUlOCQkJCTB4QzEKKyNkZWZpbmUgRkRESV9GQ19LX01BQ19NQVgJCSAgCQkweENGCQorI2RlZmluZSBGRERJX0ZDX0tfQVNZTkNfTExDX01JTgkJCTB4NTAKKyNkZWZpbmUgRkRESV9GQ19LX0FTWU5DX0xMQ19ERUYJCQkweDU0CisjZGVmaW5lIEZERElfRkNfS19BU1lOQ19MTENfTUFYCQkJMHg1RgorI2RlZmluZSBGRERJX0ZDX0tfU1lOQ19MTENfTUlOCQkJMHhEMAorI2RlZmluZSBGRERJX0ZDX0tfU1lOQ19MTENfTUFYCQkJMHhENworI2RlZmluZSBGRERJX0ZDX0tfSU1QTEVNRU5UT1JfTUlOCQkweDYwCisjZGVmaW5lIEZERElfRkNfS19JTVBMRU1FTlRPUl9NQVggIAkJMHg2RgorI2RlZmluZSBGRERJX0ZDX0tfUkVTRVJWRURfTUlOCQkJMHg3MAorI2RlZmluZSBGRERJX0ZDX0tfUkVTRVJWRURfTUFYCQkJMHg3RgorCisvKiBEZWZpbmUgTExDIGFuZCBTTkFQIGNvbnN0YW50cyAqLworI2RlZmluZSBGRERJX0VYVEVOREVEX1NBUAkweEFBCisjZGVmaW5lIEZERElfVUlfQ01ECQkJMHgwMworCisvKiBEZWZpbmUgODAyLjIgVHlwZSAxIGhlYWRlciAqLworc3RydWN0IGZkZGlfODAyMl8xX2hkciB7CisJX191OAlkc2FwOwkJCQkJLyogZGVzdGluYXRpb24gc2VydmljZSBhY2Nlc3MgcG9pbnQgKi8KKwlfX3U4CXNzYXA7CQkJCQkvKiBzb3VyY2Ugc2VydmljZSBhY2Nlc3MgcG9pbnQgKi8KKwlfX3U4CWN0cmw7CQkJCQkvKiBjb250cm9sIGJ5dGUgIzEgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIERlZmluZSA4MDIuMiBUeXBlIDIgaGVhZGVyICovCitzdHJ1Y3QgZmRkaV84MDIyXzJfaGRyIHsKKwlfX3U4CWRzYXA7CQkJCQkvKiBkZXN0aW5hdGlvbiBzZXJ2aWNlIGFjY2VzcyBwb2ludCAqLworCV9fdTgJc3NhcDsJCQkJCS8qIHNvdXJjZSBzZXJ2aWNlIGFjY2VzcyBwb2ludCAqLworCV9fdTgJY3RybF8xOwkJCQkJLyogY29udHJvbCBieXRlICMxICovCisJX191OAljdHJsXzI7CQkJCQkvKiBjb250cm9sIGJ5dGUgIzIgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIERlZmluZSA4MDIuMiBTTkFQIGhlYWRlciAqLworI2RlZmluZSBGRERJX0tfT1VJX0xFTgkzCitzdHJ1Y3QgZmRkaV9zbmFwX2hkciB7CisJX191OAlkc2FwOwkJCQkJLyogYWx3YXlzIDB4QUEgKi8KKwlfX3U4CXNzYXA7CQkJCQkvKiBhbHdheXMgMHhBQSAqLworCV9fdTgJY3RybDsJCQkJCS8qIGFsd2F5cyAweDAzICovCisJX191OAlvdWlbRkRESV9LX09VSV9MRU5dOwkvKiBvcmdhbml6YXRpb25hbCB1bml2ZXJzYWwgaWQgKi8KKwlfX2JlMTYJZXRoZXJ0eXBlOwkJCQkvKiBwYWNrZXQgdHlwZSBJRCBmaWVsZCAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogRGVmaW5lIEZEREkgTExDIGZyYW1lIGhlYWRlciAqLworc3RydWN0IGZkZGloZHIgeworCV9fdTgJZmM7CQkJCQkJLyogZnJhbWUgY29udHJvbCAqLworCV9fdTgJZGFkZHJbRkRESV9LX0FMRU5dOwkJLyogZGVzdGluYXRpb24gYWRkcmVzcyAqLworCV9fdTgJc2FkZHJbRkRESV9LX0FMRU5dOwkJLyogc291cmNlIGFkZHJlc3MgKi8KKwl1bmlvbgorCQl7CisJCXN0cnVjdCBmZGRpXzgwMjJfMV9oZHIJCWxsY184MDIyXzE7CisJCXN0cnVjdCBmZGRpXzgwMjJfMl9oZHIJCWxsY184MDIyXzI7CisJCXN0cnVjdCBmZGRpX3NuYXBfaGRyCQlsbGNfc25hcDsKKwkJfSBoZHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKKyNlbmRpZgkvKiBfTElOVVhfSUZfRkRESV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfZnJhZC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX2ZyYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzA5OWRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX2ZyYWQuaApAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIERMQ0kvRlJBRAlEZWZpbml0aW9ucyBmb3IgRnJhbWUgUmVsYXkgQWNjZXNzIERldmljZXMuICBETENJIGRldmljZXMgYXJlCisgKgkJY3JlYXRlZCBmb3IgZWFjaCBETENJIGFzc29jaWF0ZWQgd2l0aCBhIEZSQUQuICBUaGUgRlJBRCBkcml2ZXIKKyAqCQlpcyBub3QgdHJ1bHkgYSBuZXR3b3JrIGRldmljZSwgYnV0IHRoZSBsb3dlciBsZXZlbCBkZXZpY2UKKyAqCQloYW5kbGVyLiAgVGhpcyBhbGxvd3Mgb3RoZXIgRlJBRCBtYW51ZmFjdHVyZXJzIHRvIHVzZSB0aGUgRExDSQorICoJCWNvZGUsIGluY2x1ZGluZyBpdHMgUkZDMTQ5MCBlbmNhcHN1bGF0aW9uIGFsb25nc2lkZSB0aGUgY3VycmVudAorICoJCWltcGxlbWVudGF0aW9uIGZvciB0aGUgU2FuZ29tYSBjYXJkcy4KKyAqCisgKiBWZXJzaW9uOglAKCMpaWZfaWZyYWQuaAkwLjE1CTMxIE1hciA5NgorICoKKyAqIEF1dGhvcjoJTWlrZSBNY0xhZ2FuIDxtaWtlLm1jbGFnYW5AbGludXgub3JnPgorICoKKyAqIENoYW5nZXM6CisgKgkJMC4xNQlNaWtlIE1jTGFnYW4JY2hhbmdlZCBzdHJ1Y3R1cmUgZGVmcyAocGFja2VkKQorICoJCQkJCXJlLWFycmFuZ2VkIGZsYWdzCisgKgkJCQkJYWRkZWQgRExDSV9SRVQgdmFycworICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0ZSQURfSF8KKyNkZWZpbmUgX0ZSQURfSF8KKworI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisKKy8qIFN0cnVjdHVyZXMgYW5kIGNvbnN0YW50cyBhc3NvY2lhdGVkIHdpdGggdGhlIERMQ0kgZGV2aWNlIGRyaXZlciAqLworCitzdHJ1Y3QgZGxjaV9hZGQKK3sKKyAgIGNoYXIgIGRldm5hbWVbSUZOQU1TSVpdOworICAgc2hvcnQgZGxjaTsKK307CisKKyNkZWZpbmUgRExDSV9HRVRfQ09ORgkoU0lPQ0RFVlBSSVZBVEUgKyAyKQorI2RlZmluZSBETENJX1NFVF9DT05GCShTSU9DREVWUFJJVkFURSArIDMpCisKKy8qIAorICogVGhlc2UgYXJlIHJlbGF0ZWQgdG8gdGhlIFNhbmdvbWEgU0RMQSBhbmQgc2hvdWxkIHJlbWFpbiBpbiBvcmRlci4gCisgKiBDb2RlIHdpdGhpbiB0aGUgU0RMQSBtb2R1bGUgaXMgYmFzZWQgb24gdGhlIHNwZWNpZmljcyBvZiB0aGlzIAorICogc3RydWN0dXJlLiAgQ2hhbmdlIGF0IHlvdXIgb3duIHBlcmlsLgorICovCitzdHJ1Y3QgZGxjaV9jb25mIHsKKyAgIHNob3J0IGZsYWdzOworICAgc2hvcnQgQ0lSX2Z3ZDsKKyAgIHNob3J0IEJjX2Z3ZDsKKyAgIHNob3J0IEJlX2Z3ZDsKKyAgIHNob3J0IENJUl9id2Q7CisgICBzaG9ydCBCY19id2Q7CisgICBzaG9ydCBCZV9id2Q7IAorCisvKiB0aGVzZSBhcmUgcGFydCBvZiB0aGUgc3RhdHVzIHJlYWQgKi8KKyAgIHNob3J0IFRjX2Z3ZDsKKyAgIHNob3J0IFRjX2J3ZDsKKyAgIHNob3J0IFRmX21heDsKKyAgIHNob3J0IFRiX21heDsKKworLyogYWRkIGFueSBuZXcgZmllbGRzIGhlcmUgYWJvdmUgaXMgYSBtaXJyb3Igb2Ygc2RsYV9kbGNpX2NvbmYgKi8KK307CisKKyNkZWZpbmUgRExDSV9HRVRfU0xBVkUJKFNJT0NERVZQUklWQVRFICsgNCkKKworLyogY29uZmlndXJhdGlvbiBmbGFncyBmb3IgRExDSSAqLworI2RlZmluZSBETENJX0lHTk9SRV9DSVJfT1VUCTB4MDAwMQorI2RlZmluZSBETENJX0FDQ09VTlRfQ0lSX0lOCTB4MDAwMgorI2RlZmluZSBETENJX0JVRkZFUl9JRgkJMHgwMDA4CisKKyNkZWZpbmUgRExDSV9WQUxJRF9GTEFHUwkweDAwMEIKKworLyogZGVmaW5lcyBmb3IgdGhlIGFjdHVhbCBGcmFtZSBSZWxheSBoYXJkd2FyZSAqLworI2RlZmluZSBGUkFEX0dFVF9DT05GCShTSU9DREVWUFJJVkFURSkKKyNkZWZpbmUgRlJBRF9TRVRfQ09ORgkoU0lPQ0RFVlBSSVZBVEUgKyAxKQorCisjZGVmaW5lIEZSQURfTEFTVF9JT0NUTAlGUkFEX1NFVF9DT05GCisKKy8qCisgKiBCYXNlZCBvbiB0aGUgc2V0dXAgZm9yIHRoZSBTYW5nb21hIFNETEEuICBJZiBjaGFuZ2VzIGFyZSAKKyAqIG5lY2Vzc2FyeSB0byB0aGlzIHN0cnVjdHVyZSwgYSByb3V0aW5lIHdpbGwgbmVlZCB0byBiZSAKKyAqIGFkZGVkIHRvIHRoYXQgbW9kdWxlIHRvIGNvcHkgZmllbGRzLgorICovCitzdHJ1Y3QgZnJhZF9jb25mIAoreworICAgc2hvcnQgc3RhdGlvbjsKKyAgIHNob3J0IGZsYWdzOworICAgc2hvcnQga2JhdWQ7CisgICBzaG9ydCBjbG9ja2luZzsKKyAgIHNob3J0IG10dTsKKyAgIHNob3J0IFQzOTE7CisgICBzaG9ydCBUMzkyOworICAgc2hvcnQgTjM5MTsKKyAgIHNob3J0IE4zOTI7CisgICBzaG9ydCBOMzkzOworICAgc2hvcnQgQ0lSX2Z3ZDsKKyAgIHNob3J0IEJjX2Z3ZDsKKyAgIHNob3J0IEJlX2Z3ZDsKKyAgIHNob3J0IENJUl9id2Q7CisgICBzaG9ydCBCY19id2Q7CisgICBzaG9ydCBCZV9id2Q7CisKKy8qIEFkZCBuZXcgZmllbGRzIGhlcmUsIGFib3ZlIGlzIGEgbWlycm9yIG9mIHRoZSBzZGxhX2NvbmYgKi8KKworfTsKKworI2RlZmluZSBGUkFEX1NUQVRJT05fQ1BFCTB4MDAwMAorI2RlZmluZSBGUkFEX1NUQVRJT05fTk9ERQkweDAwMDEKKworI2RlZmluZSBGUkFEX1RYX0lHTk9SRV9DSVIJMHgwMDAxCisjZGVmaW5lIEZSQURfUlhfQUNDT1VOVF9DSVIJMHgwMDAyCisjZGVmaW5lIEZSQURfRFJPUF9BQk9SVEVECTB4MDAwNAorI2RlZmluZSBGUkFEX0JVRkZFUklGCQkweDAwMDgKKyNkZWZpbmUgRlJBRF9TVEFUUwkJMHgwMDEwCisjZGVmaW5lIEZSQURfTUNJCQkweDAxMDAKKyNkZWZpbmUgRlJBRF9BVVRPRExDSQkJMHg4MDAwCisjZGVmaW5lIEZSQURfVkFMSURfRkxBR1MJMHg4MTFGCisKKyNkZWZpbmUgRlJBRF9DTE9DS19JTlQJCTB4MDAwMQorI2RlZmluZSBGUkFEX0NMT0NLX0VYVAkJMHgwMDAwCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfaGlwcGkuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl9oaXBwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYzA0OWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfaGlwcGkuaApAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIElORVQJCUFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUQ1AvSVAgcHJvdG9jb2wgc3VpdGUgZm9yIHRoZSBMSU5VWAorICoJCW9wZXJhdGluZyBzeXN0ZW0uICBJTkVUIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSAgQlNEIFNvY2tldAorICoJCWludGVyZmFjZSBhcyB0aGUgbWVhbnMgb2YgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB1c2VyIGxldmVsLgorICoKKyAqCQlHbG9iYWwgZGVmaW5pdGlvbnMgZm9yIHRoZSBISVBQSSBpbnRlcmZhY2UuCisgKgorICogVmVyc2lvbjoJQCgjKWlmX2hpcHBpLmgJMS4wLjAJMDUvMjYvOTcKKyAqCisgKiBBdXRob3I6CUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgorICoJCURvbmFsZCBCZWNrZXIsIDxiZWNrZXJAc3VwZXIub3JnPgorICoJCUFsYW4gQ294LCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgorICoJCVN0ZXZlIFdoaXRlaG91c2UsIDxndzdycm1AZWVzaGFjazMuc3dhbi5hYy51az4KKyAqCQlKZXMgU29yZW5zZW4sIDxKZXMuU29yZW5zZW5AY2Vybi5jaD4KKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworIAorI2lmbmRlZiBfTElOVVhfSUZfSElQUElfSAorI2RlZmluZSBfTElOVVhfSUZfSElQUElfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKy8qCisgKglISVBQSSBtYWdpYyBjb25zdGFudHMuCisgKi8KKworI2RlZmluZSBISVBQSV9BTEVOCTYJCS8qIEJ5dGVzIGluIG9uZSBISVBQSSBody1hZGRyCSAgICovCisjZGVmaW5lIEhJUFBJX0hMRU4Jc2l6ZW9mKHN0cnVjdCBoaXBwaV9oZHIpCisjZGVmaW5lIEhJUFBJX1pMRU4JMAkJLyogTWluLiBieXRlcyBpbiBmcmFtZSB3aXRob3V0IEZDUyAqLworI2RlZmluZSBISVBQSV9EQVRBX0xFTgk2NTI4MAkJLyogTWF4LiBieXRlcyBpbiBwYXlsb2FkCSAgICovCisjZGVmaW5lIEhJUFBJX0ZSQU1FX0xFTgkoSElQUElfREFUQV9MRU4gKyBISVBQSV9ITEVOKQorCQkJCQkvKiBNYXguIGJ5dGVzIGluIGZyYW1lIHdpdGhvdXQgRkNTICovCisKKy8qCisgKiBEZWZpbmUgTExDIGFuZCBTTkFQIGNvbnN0YW50cy4KKyAqLworI2RlZmluZSBISVBQSV9FWFRFTkRFRF9TQVAJMHhBQQorI2RlZmluZSBISVBQSV9VSV9DTUQJCTB4MDMKKworCisvKgorICoJRG8gd2UgbmVlZCB0byBsaXN0IHNvbWUgc29ydCBvZiBJRCdzIGhlcmU/CisgKi8KKworLyoKKyAqCUhJUFBJIHN0YXRpc3RpY3MgY29sbGVjdGlvbiBkYXRhLiAKKyAqLworIAorc3RydWN0IGhpcG5ldF9zdGF0aXN0aWNzIHsKKwlpbnQJcnhfcGFja2V0czsJCS8qIHRvdGFsIHBhY2tldHMgcmVjZWl2ZWQJKi8KKwlpbnQJdHhfcGFja2V0czsJCS8qIHRvdGFsIHBhY2tldHMgdHJhbnNtaXR0ZWQJKi8KKwlpbnQJcnhfZXJyb3JzOwkJLyogYmFkIHBhY2tldHMgcmVjZWl2ZWQJCSovCisJaW50CXR4X2Vycm9yczsJCS8qIHBhY2tldCB0cmFuc21pdCBwcm9ibGVtcwkqLworCWludAlyeF9kcm9wcGVkOwkJLyogbm8gc3BhY2UgaW4gbGludXggYnVmZmVycwkqLworCWludAl0eF9kcm9wcGVkOwkJLyogbm8gc3BhY2UgYXZhaWxhYmxlIGluIGxpbnV4CSovCisKKwkvKiBkZXRhaWxlZCByeF9lcnJvcnM6ICovCisJaW50CXJ4X2xlbmd0aF9lcnJvcnM7CisJaW50CXJ4X292ZXJfZXJyb3JzOwkJLyogcmVjZWl2ZXIgcmluZyBidWZmIG92ZXJmbG93CSovCisJaW50CXJ4X2NyY19lcnJvcnM7CQkvKiByZWN2ZWQgcGt0IHdpdGggY3JjIGVycm9yCSovCisJaW50CXJ4X2ZyYW1lX2Vycm9yczsJLyogcmVjdidkIGZyYW1lIGFsaWdubWVudCBlcnJvciAqLworCWludAlyeF9maWZvX2Vycm9yczsJCS8qIHJlY3YnciBmaWZvIG92ZXJydW4JCSovCisJaW50CXJ4X21pc3NlZF9lcnJvcnM7CS8qIHJlY2VpdmVyIG1pc3NlZCBwYWNrZXQJKi8KKworCS8qIGRldGFpbGVkIHR4X2Vycm9ycyAqLworCWludAl0eF9hYm9ydGVkX2Vycm9yczsKKwlpbnQJdHhfY2Fycmllcl9lcnJvcnM7CisJaW50CXR4X2ZpZm9fZXJyb3JzOworCWludAl0eF9oZWFydGJlYXRfZXJyb3JzOworCWludAl0eF93aW5kb3dfZXJyb3JzOworfTsKKworCitzdHJ1Y3QgaGlwcGlfZnBfaGRyIHsKKyNpZiAwCisJX191OAkJdWxwOwkJCQkvKiBtdXN0IGNvbnRhaW4gNCAqLworI2lmIGRlZmluZWQgKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4CQlkMV9kYXRhX3ByZXNlbnQ6MTsJCS8qIG11c3QgYmUgMSAqLworCV9fdTgJCXN0YXJ0X2QyX2J1cnN0X2JvdW5kYXJ5OjE7CS8qIG11c3QgYmUgemVybyAqLworCV9fdTgJCXJlc2VydmVkOjY7CQkJLyogbXVzdCBiZSB6ZXJvICovCisjaWYgMAorCV9fdTE2CQlyZXNlcnZlZDE6NTsKKwlfX3UxNgkJZDFfYXJlYV9zaXplOjg7CQkJLyogbXVzdCBiZSAzICovCisJX191MTYJCWQyX29mZnNldDozOwkJCS8qIG11c3QgYmUgemVybyAqLworI2VuZGlmCisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4CQlyZXNlcnZlZDo2OwkJCS8qIG11c3QgYmUgemVybyAqLworCV9fdTgJIAlzdGFydF9kMl9idXJzdF9ib3VuZGFyeToxOwkvKiBtdXN0IGJlIHplcm8gKi8KKwlfX3U4CQlkMV9kYXRhX3ByZXNlbnQ6MTsJCS8qIG11c3QgYmUgMSAqLworI2lmIDAKKwlfX3UxNgkJZDJfb2Zmc2V0OjM7CQkJLyogbXVzdCBiZSB6ZXJvICovCisJX191MTYJCWQxX2FyZWFfc2l6ZTo4OwkJCS8qIG11c3QgYmUgMyAqLworCV9fdTE2CQlyZXNlcnZlZDE6NTsJCQkvKiBtdXN0IGJlIHplcm8gKi8KKyNlbmRpZgorI2Vsc2UKKyNlcnJvcgkiUGxlYXNlIGZpeCA8YXNtL2J5dGVvcmRlci5oPiIKKyNlbmRpZgorI2Vsc2UKKwlfX2JlMzIJCWZpeGVkOworI2VuZGlmCisJX19iZTMyCQlkMl9zaXplOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGhpcHBpX2xlX2hkciB7CisjaWYgZGVmaW5lZCAoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTgJCWZjOjM7CisJX191OAkJZG91YmxlX3dpZGU6MTsKKwlfX3U4CQltZXNzYWdlX3R5cGU6NDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTgJCW1lc3NhZ2VfdHlwZTo0OworCV9fdTgJCWRvdWJsZV93aWRlOjE7CisJX191OAkJZmM6MzsKKyNlbmRpZgorCV9fdTgJCWRlc3Rfc3dpdGNoX2FkZHJbM107CisjaWYgZGVmaW5lZCAoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTgJCWRlc3RfYWRkcl90eXBlOjQsCisJCQlzcmNfYWRkcl90eXBlOjQ7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4CQlzcmNfYWRkcl90eXBlOjQsCisJCQlkZXN0X2FkZHJfdHlwZTo0OworI2VuZGlmCisJX191OAkJc3JjX3N3aXRjaF9hZGRyWzNdOworCV9fdTE2CQlyZXNlcnZlZDsKKwlfX3U4CQlkYWRkcltISVBQSV9BTEVOXTsKKwlfX3UxNgkJbG9jYWxseV9hZG1pbmlzdGVyZWQ7CisJX191OAkJc2FkZHJbSElQUElfQUxFTl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIEhJUFBJX09VSV9MRU4JMworLyoKKyAqIExvb2tzIGxpa2UgdGhlIGRzYXAgYW5kIHNzYXAgZmllbGRzIGhhdmUgYmVlbiBzd2FwcGVkIGJ5IG1pc3Rha2UgaW4KKyAqIFJGQyAyMDY3ICJJUCBvdmVyIEhJUFBJIi4KKyAqLworc3RydWN0IGhpcHBpX3NuYXBfaGRyIHsKKwlfX3U4CWRzYXA7CQkJLyogYWx3YXlzIDB4QUEgKi8KKwlfX3U4CXNzYXA7CQkJLyogYWx3YXlzIDB4QUEgKi8KKwlfX3U4CWN0cmw7CQkJLyogYWx3YXlzIDB4MDMgKi8KKwlfX3U4CW91aVtISVBQSV9PVUlfTEVOXTsJLyogb3JnYW5pemF0aW9uYWwgdW5pdmVyc2FsIGlkICh6ZXJvKSovCisJX19iZTE2CWV0aGVydHlwZTsJCS8qIHBhY2tldCB0eXBlIElEIGZpZWxkICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaGlwcGlfaGRyIHsKKwlzdHJ1Y3QgaGlwcGlfZnBfaGRyCWZwOworCXN0cnVjdCBoaXBwaV9sZV9oZHIJbGU7CisJc3RydWN0IGhpcHBpX3NuYXBfaGRyCXNuYXA7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZW5kaWYJLyogX0xJTlVYX0lGX0hJUFBJX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl9pbmZpbmliYW5kLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfaW5maW5pYmFuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkOTU4NDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfaW5maW5pYmFuZC5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorICogPGh0dHA6Ly93d3cuZnNmLm9yZy9jb3B5bGVmdC9ncGwuaHRtbD4sIG9yIHRoZSBPcGVuSUIub3JnIEJTRAorICogbGljZW5zZSwgYXZhaWxhYmxlIGluIHRoZSBMSUNFTlNFLlRYVCBmaWxlIGFjY29tcGFueWluZyB0aGlzCisgKiBzb2Z0d2FyZS4gIFRoZXNlIGRldGFpbHMgYXJlIGFsc28gYXZhaWxhYmxlIGF0CisgKiA8aHR0cDovL3d3dy5vcGVuZmFicmljcy5vcmcvc29mdHdhcmVfbGljZW5zZS5odG0+LgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0IFRvcHNwaW4gQ29tbXVuaWNhdGlvbnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICRJZCQKKyAqLworCisjaWZuZGVmIF9MSU5VWF9JRl9JTkZJTklCQU5EX0gKKyNkZWZpbmUgX0xJTlVYX0lGX0lORklOSUJBTkRfSAorCisjZGVmaW5lIElORklOSUJBTkRfQUxFTgkJMjAJLyogT2N0ZXRzIGluIElQb0lCIEhXIGFkZHIJKi8KKworI2VuZGlmIC8qIF9MSU5VWF9JRl9JTkZJTklCQU5EX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl9saW5rLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfbGluay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YmIyZGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfbGluay5oCkBAIC0wLDAgKzEsMzUxIEBACisjaWZuZGVmIF9MSU5VWF9JRl9MSU5LX0gKKyNkZWZpbmUgX0xJTlVYX0lGX0xJTktfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisKKy8qIFRoaXMgc3RydWN0IHNob3VsZCBiZSBpbiBzeW5jIHdpdGggc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICovCitzdHJ1Y3QgcnRubF9saW5rX3N0YXRzIHsKKwlfX3UzMglyeF9wYWNrZXRzOwkJLyogdG90YWwgcGFja2V0cyByZWNlaXZlZAkqLworCV9fdTMyCXR4X3BhY2tldHM7CQkvKiB0b3RhbCBwYWNrZXRzIHRyYW5zbWl0dGVkCSovCisJX191MzIJcnhfYnl0ZXM7CQkvKiB0b3RhbCBieXRlcyByZWNlaXZlZCAJKi8KKwlfX3UzMgl0eF9ieXRlczsJCS8qIHRvdGFsIGJ5dGVzIHRyYW5zbWl0dGVkCSovCisJX191MzIJcnhfZXJyb3JzOwkJLyogYmFkIHBhY2tldHMgcmVjZWl2ZWQJCSovCisJX191MzIJdHhfZXJyb3JzOwkJLyogcGFja2V0IHRyYW5zbWl0IHByb2JsZW1zCSovCisJX191MzIJcnhfZHJvcHBlZDsJCS8qIG5vIHNwYWNlIGluIGxpbnV4IGJ1ZmZlcnMJKi8KKwlfX3UzMgl0eF9kcm9wcGVkOwkJLyogbm8gc3BhY2UgYXZhaWxhYmxlIGluIGxpbnV4CSovCisJX191MzIJbXVsdGljYXN0OwkJLyogbXVsdGljYXN0IHBhY2tldHMgcmVjZWl2ZWQJKi8KKwlfX3UzMgljb2xsaXNpb25zOworCisJLyogZGV0YWlsZWQgcnhfZXJyb3JzOiAqLworCV9fdTMyCXJ4X2xlbmd0aF9lcnJvcnM7CisJX191MzIJcnhfb3Zlcl9lcnJvcnM7CQkvKiByZWNlaXZlciByaW5nIGJ1ZmYgb3ZlcmZsb3cJKi8KKwlfX3UzMglyeF9jcmNfZXJyb3JzOwkJLyogcmVjdmVkIHBrdCB3aXRoIGNyYyBlcnJvcgkqLworCV9fdTMyCXJ4X2ZyYW1lX2Vycm9yczsJLyogcmVjdidkIGZyYW1lIGFsaWdubWVudCBlcnJvciAqLworCV9fdTMyCXJ4X2ZpZm9fZXJyb3JzOwkJLyogcmVjdidyIGZpZm8gb3ZlcnJ1bgkJKi8KKwlfX3UzMglyeF9taXNzZWRfZXJyb3JzOwkvKiByZWNlaXZlciBtaXNzZWQgcGFja2V0CSovCisKKwkvKiBkZXRhaWxlZCB0eF9lcnJvcnMgKi8KKwlfX3UzMgl0eF9hYm9ydGVkX2Vycm9yczsKKwlfX3UzMgl0eF9jYXJyaWVyX2Vycm9yczsKKwlfX3UzMgl0eF9maWZvX2Vycm9yczsKKwlfX3UzMgl0eF9oZWFydGJlYXRfZXJyb3JzOworCV9fdTMyCXR4X3dpbmRvd19lcnJvcnM7CisKKwkvKiBmb3IgY3NsaXAgZXRjICovCisJX191MzIJcnhfY29tcHJlc3NlZDsKKwlfX3UzMgl0eF9jb21wcmVzc2VkOworfTsKKworLyogVGhlIG1haW4gZGV2aWNlIHN0YXRpc3RpY3Mgc3RydWN0dXJlICovCitzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgeworCV9fdTY0CXJ4X3BhY2tldHM7CQkvKiB0b3RhbCBwYWNrZXRzIHJlY2VpdmVkCSovCisJX191NjQJdHhfcGFja2V0czsJCS8qIHRvdGFsIHBhY2tldHMgdHJhbnNtaXR0ZWQJKi8KKwlfX3U2NAlyeF9ieXRlczsJCS8qIHRvdGFsIGJ5dGVzIHJlY2VpdmVkIAkqLworCV9fdTY0CXR4X2J5dGVzOwkJLyogdG90YWwgYnl0ZXMgdHJhbnNtaXR0ZWQJKi8KKwlfX3U2NAlyeF9lcnJvcnM7CQkvKiBiYWQgcGFja2V0cyByZWNlaXZlZAkJKi8KKwlfX3U2NAl0eF9lcnJvcnM7CQkvKiBwYWNrZXQgdHJhbnNtaXQgcHJvYmxlbXMJKi8KKwlfX3U2NAlyeF9kcm9wcGVkOwkJLyogbm8gc3BhY2UgaW4gbGludXggYnVmZmVycwkqLworCV9fdTY0CXR4X2Ryb3BwZWQ7CQkvKiBubyBzcGFjZSBhdmFpbGFibGUgaW4gbGludXgJKi8KKwlfX3U2NAltdWx0aWNhc3Q7CQkvKiBtdWx0aWNhc3QgcGFja2V0cyByZWNlaXZlZAkqLworCV9fdTY0CWNvbGxpc2lvbnM7CisKKwkvKiBkZXRhaWxlZCByeF9lcnJvcnM6ICovCisJX191NjQJcnhfbGVuZ3RoX2Vycm9yczsKKwlfX3U2NAlyeF9vdmVyX2Vycm9yczsJCS8qIHJlY2VpdmVyIHJpbmcgYnVmZiBvdmVyZmxvdwkqLworCV9fdTY0CXJ4X2NyY19lcnJvcnM7CQkvKiByZWN2ZWQgcGt0IHdpdGggY3JjIGVycm9yCSovCisJX191NjQJcnhfZnJhbWVfZXJyb3JzOwkvKiByZWN2J2QgZnJhbWUgYWxpZ25tZW50IGVycm9yICovCisJX191NjQJcnhfZmlmb19lcnJvcnM7CQkvKiByZWN2J3IgZmlmbyBvdmVycnVuCQkqLworCV9fdTY0CXJ4X21pc3NlZF9lcnJvcnM7CS8qIHJlY2VpdmVyIG1pc3NlZCBwYWNrZXQJKi8KKworCS8qIGRldGFpbGVkIHR4X2Vycm9ycyAqLworCV9fdTY0CXR4X2Fib3J0ZWRfZXJyb3JzOworCV9fdTY0CXR4X2NhcnJpZXJfZXJyb3JzOworCV9fdTY0CXR4X2ZpZm9fZXJyb3JzOworCV9fdTY0CXR4X2hlYXJ0YmVhdF9lcnJvcnM7CisJX191NjQJdHhfd2luZG93X2Vycm9yczsKKworCS8qIGZvciBjc2xpcCBldGMgKi8KKwlfX3U2NAlyeF9jb21wcmVzc2VkOworCV9fdTY0CXR4X2NvbXByZXNzZWQ7Cit9OworCisvKiBUaGUgc3RydWN0IHNob3VsZCBiZSBpbiBzeW5jIHdpdGggc3RydWN0IGlmbWFwICovCitzdHJ1Y3QgcnRubF9saW5rX2lmbWFwIHsKKwlfX3U2NAltZW1fc3RhcnQ7CisJX191NjQJbWVtX2VuZDsKKwlfX3U2NAliYXNlX2FkZHI7CisJX191MTYJaXJxOworCV9fdTgJZG1hOworCV9fdTgJcG9ydDsKK307CisKK2VudW0geworCUlGTEFfVU5TUEVDLAorCUlGTEFfQUREUkVTUywKKwlJRkxBX0JST0FEQ0FTVCwKKwlJRkxBX0lGTkFNRSwKKwlJRkxBX01UVSwKKwlJRkxBX0xJTkssCisJSUZMQV9RRElTQywKKwlJRkxBX1NUQVRTLAorCUlGTEFfQ09TVCwKKyNkZWZpbmUgSUZMQV9DT1NUIElGTEFfQ09TVAorCUlGTEFfUFJJT1JJVFksCisjZGVmaW5lIElGTEFfUFJJT1JJVFkgSUZMQV9QUklPUklUWQorCUlGTEFfTUFTVEVSLAorI2RlZmluZSBJRkxBX01BU1RFUiBJRkxBX01BU1RFUgorCUlGTEFfV0lSRUxFU1MsCQkvKiBXaXJlbGVzcyBFeHRlbnNpb24gZXZlbnQgLSBzZWUgd2lyZWxlc3MuaCAqLworI2RlZmluZSBJRkxBX1dJUkVMRVNTIElGTEFfV0lSRUxFU1MKKwlJRkxBX1BST1RJTkZPLAkJLyogUHJvdG9jb2wgc3BlY2lmaWMgaW5mb3JtYXRpb24gZm9yIGEgbGluayAqLworI2RlZmluZSBJRkxBX1BST1RJTkZPIElGTEFfUFJPVElORk8KKwlJRkxBX1RYUUxFTiwKKyNkZWZpbmUgSUZMQV9UWFFMRU4gSUZMQV9UWFFMRU4KKwlJRkxBX01BUCwKKyNkZWZpbmUgSUZMQV9NQVAgSUZMQV9NQVAKKwlJRkxBX1dFSUdIVCwKKyNkZWZpbmUgSUZMQV9XRUlHSFQgSUZMQV9XRUlHSFQKKwlJRkxBX09QRVJTVEFURSwKKwlJRkxBX0xJTktNT0RFLAorCUlGTEFfTElOS0lORk8sCisjZGVmaW5lIElGTEFfTElOS0lORk8gSUZMQV9MSU5LSU5GTworCUlGTEFfTkVUX05TX1BJRCwKKwlJRkxBX0lGQUxJQVMsCisJSUZMQV9OVU1fVkYsCQkvKiBOdW1iZXIgb2YgVkZzIGlmIGRldmljZSBpcyBTUi1JT1YgUEYgKi8KKwlJRkxBX1ZGSU5GT19MSVNULAorCUlGTEFfU1RBVFM2NCwKKwlJRkxBX1ZGX1BPUlRTLAorCUlGTEFfUE9SVF9TRUxGLAorCV9fSUZMQV9NQVgKK307CisKKworI2RlZmluZSBJRkxBX01BWCAoX19JRkxBX01BWCAtIDEpCisKKy8qIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciB1c2Vyc3BhY2UgKi8KKyNkZWZpbmUgSUZMQV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgaWZpbmZvbXNnKSkpKQorI2RlZmluZSBJRkxBX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgaWZpbmZvbXNnKSkKKworLyogaWZpX2ZsYWdzLgorCisgICBJRkZfKiBmbGFncy4KKworICAgVGhlIG9ubHkgY2hhbmdlIGlzOgorICAgSUZGX0xPT1BCQUNLLCBJRkZfQlJPQURDQVNUIGFuZCBJRkZfUE9JTlRPUE9JTlQgYXJlCisgICBtb3JlIG5vdCBjaGFuZ2VhYmxlIGJ5IHVzZXIuIFRoZXkgZGVzY3JpYmUgbGluayBtZWRpYQorICAgY2hhcmFjdGVyaXN0aWNzIGFuZCBzZXQgYnkgZGV2aWNlIGRyaXZlci4KKworICAgQ29tbWVudHM6CisgICAtIENvbWJpbmF0aW9uIElGRl9CUk9BRENBU1R8SUZGX1BPSU5UT1BPSU5UIGlzIGludmFsaWQKKyAgIC0gSWYgbmVpdGhlciBvZiB0aGVzZSB0aHJlZSBmbGFncyBhcmUgc2V0OworICAgICB0aGUgaW50ZXJmYWNlIGlzIE5CTUEuCisKKyAgIC0gSUZGX01VTFRJQ0FTVCBkb2VzIG5vdCBtZWFuIGFueXRoaW5nIHNwZWNpYWw6CisgICBtdWx0aWNhc3RzIGNhbiBiZSB1c2VkIG9uIGFsbCBub3QtTkJNQSBsaW5rcy4KKyAgIElGRl9NVUxUSUNBU1QgbWVhbnMgdGhhdCB0aGlzIG1lZGlhIHVzZXMgc3BlY2lhbCBlbmNhcHN1bGF0aW9uCisgICBmb3IgbXVsdGljYXN0IGZyYW1lcy4gQXBwYXJlbnRseSwgYWxsIElGRl9QT0lOVE9QT0lOVCBhbmQKKyAgIElGRl9CUk9BRENBU1QgZGV2aWNlcyBhcmUgYWJsZSB0byB1c2UgbXVsdGljYXN0cyB0b28uCisgKi8KKworLyogSUZMQV9MSU5LLgorICAgRm9yIHVzdWFsIGRldmljZXMgaXQgaXMgZXF1YWwgaWZpX2luZGV4LgorICAgSWYgaXQgaXMgYSAidmlydHVhbCBpbnRlcmZhY2UiIChmLmUuIHR1bm5lbCksIGlmaV9saW5rCisgICBjYW4gcG9pbnQgdG8gcmVhbCBwaHlzaWNhbCBpbnRlcmZhY2UgKGYuZS4gZm9yIGJhbmR3aWR0aCBjYWxjdWxhdGlvbnMpLAorICAgb3IgbWF5YmUgMCwgd2hhdCBtZWFucywgdGhhdCByZWFsIG1lZGlhIGlzIHVua25vd24gKHVzdWFsCisgICBmb3IgSVBJUCB0dW5uZWxzLCB3aGVuIHJvdXRlIHRvIGVuZHBvaW50IGlzIGFsbG93ZWQgdG8gY2hhbmdlKQorICovCisKKy8qIFN1YnR5cGUgYXR0cmlidXRlcyBmb3IgSUZMQV9QUk9USU5GTyAqLworZW51bSB7CisJSUZMQV9JTkVUNl9VTlNQRUMsCisJSUZMQV9JTkVUNl9GTEFHUywJLyogbGluayBmbGFncwkJCSovCisJSUZMQV9JTkVUNl9DT05GLAkvKiBzeXNjdGwgcGFyYW1ldGVycwkJKi8KKwlJRkxBX0lORVQ2X1NUQVRTLAkvKiBzdGF0aXN0aWNzCQkJKi8KKwlJRkxBX0lORVQ2X01DQVNULAkvKiBNQyB0aGluZ3MuIFdoYXQgb2YgdGhlbT8JKi8KKwlJRkxBX0lORVQ2X0NBQ0hFSU5GTywJLyogdGltZSB2YWx1ZXMgYW5kIG1heCByZWFzbSBzaXplICovCisJSUZMQV9JTkVUNl9JQ01QNlNUQVRTLAkvKiBzdGF0aXN0aWNzIChpY21wdjYpCQkqLworCV9fSUZMQV9JTkVUNl9NQVgKK307CisKKyNkZWZpbmUgSUZMQV9JTkVUNl9NQVgJKF9fSUZMQV9JTkVUNl9NQVggLSAxKQorCitzdHJ1Y3QgaWZsYV9jYWNoZWluZm8geworCV9fdTMyCW1heF9yZWFzbV9sZW47CisJX191MzIJdHN0YW1wOwkJLyogaXB2NkludGVyZmFjZVRhYmxlIHVwZGF0ZWQgdGltZXN0YW1wICovCisJX191MzIJcmVhY2hhYmxlX3RpbWU7CisJX191MzIJcmV0cmFuc190aW1lOworfTsKKworZW51bSB7CisJSUZMQV9JTkZPX1VOU1BFQywKKwlJRkxBX0lORk9fS0lORCwKKwlJRkxBX0lORk9fREFUQSwKKwlJRkxBX0lORk9fWFNUQVRTLAorCV9fSUZMQV9JTkZPX01BWCwKK307CisKKyNkZWZpbmUgSUZMQV9JTkZPX01BWAkoX19JRkxBX0lORk9fTUFYIC0gMSkKKworLyogVkxBTiBzZWN0aW9uICovCisKK2VudW0geworCUlGTEFfVkxBTl9VTlNQRUMsCisJSUZMQV9WTEFOX0lELAorCUlGTEFfVkxBTl9GTEFHUywKKwlJRkxBX1ZMQU5fRUdSRVNTX1FPUywKKwlJRkxBX1ZMQU5fSU5HUkVTU19RT1MsCisJX19JRkxBX1ZMQU5fTUFYLAorfTsKKworI2RlZmluZSBJRkxBX1ZMQU5fTUFYCShfX0lGTEFfVkxBTl9NQVggLSAxKQorCitzdHJ1Y3QgaWZsYV92bGFuX2ZsYWdzIHsKKwlfX3UzMglmbGFnczsKKwlfX3UzMgltYXNrOworfTsKKworZW51bSB7CisJSUZMQV9WTEFOX1FPU19VTlNQRUMsCisJSUZMQV9WTEFOX1FPU19NQVBQSU5HLAorCV9fSUZMQV9WTEFOX1FPU19NQVgKK307CisKKyNkZWZpbmUgSUZMQV9WTEFOX1FPU19NQVgJKF9fSUZMQV9WTEFOX1FPU19NQVggLSAxKQorCitzdHJ1Y3QgaWZsYV92bGFuX3Fvc19tYXBwaW5nIHsKKwlfX3UzMiBmcm9tOworCV9fdTMyIHRvOworfTsKKworLyogTUFDVkxBTiBzZWN0aW9uICovCitlbnVtIHsKKwlJRkxBX01BQ1ZMQU5fVU5TUEVDLAorCUlGTEFfTUFDVkxBTl9NT0RFLAorCV9fSUZMQV9NQUNWTEFOX01BWCwKK307CisKKyNkZWZpbmUgSUZMQV9NQUNWTEFOX01BWCAoX19JRkxBX01BQ1ZMQU5fTUFYIC0gMSkKKworZW51bSBtYWN2bGFuX21vZGUgeworCU1BQ1ZMQU5fTU9ERV9QUklWQVRFID0gMSwgLyogZG9uJ3QgdGFsayB0byBvdGhlciBtYWN2bGFucyAqLworCU1BQ1ZMQU5fTU9ERV9WRVBBICAgID0gMiwgLyogdGFsayB0byBvdGhlciBwb3J0cyB0aHJvdWdoIGV4dCBicmlkZ2UgKi8KKwlNQUNWTEFOX01PREVfQlJJREdFICA9IDQsIC8qIHRhbGsgdG8gYnJpZGdlIHBvcnRzIGRpcmVjdGx5ICovCit9OworCisvKiBTUi1JT1YgdmlydHVhbCBmdW5jdGlvbiBtYW5hZ2VtZW50IHNlY3Rpb24gKi8KKworZW51bSB7CisJSUZMQV9WRl9JTkZPX1VOU1BFQywKKwlJRkxBX1ZGX0lORk8sCisJX19JRkxBX1ZGX0lORk9fTUFYLAorfTsKKworI2RlZmluZSBJRkxBX1ZGX0lORk9fTUFYIChfX0lGTEFfVkZfSU5GT19NQVggLSAxKQorCitlbnVtIHsKKwlJRkxBX1ZGX1VOU1BFQywKKwlJRkxBX1ZGX01BQywJCS8qIEhhcmR3YXJlIHF1ZXVlIHNwZWNpZmljIGF0dHJpYnV0ZXMgKi8KKwlJRkxBX1ZGX1ZMQU4sCisJSUZMQV9WRl9UWF9SQVRFLAkvKiBUWCBCYW5kd2lkdGggQWxsb2NhdGlvbiAqLworCV9fSUZMQV9WRl9NQVgsCit9OworCisjZGVmaW5lIElGTEFfVkZfTUFYIChfX0lGTEFfVkZfTUFYIC0gMSkKKworc3RydWN0IGlmbGFfdmZfbWFjIHsKKwlfX3UzMiB2ZjsKKwlfX3U4IG1hY1szMl07IC8qIE1BWF9BRERSX0xFTiAqLworfTsKKworc3RydWN0IGlmbGFfdmZfdmxhbiB7CisJX191MzIgdmY7CisJX191MzIgdmxhbjsgLyogMCAtIDQwOTUsIDAgZGlzYWJsZXMgVkxBTiBmaWx0ZXIgKi8KKwlfX3UzMiBxb3M7Cit9OworCitzdHJ1Y3QgaWZsYV92Zl90eF9yYXRlIHsKKwlfX3UzMiB2ZjsKKwlfX3UzMiByYXRlOyAvKiBNYXggVFggYmFuZHdpZHRoIGluIE1icHMsIDAgZGlzYWJsZXMgdGhyb3R0bGluZyAqLworfTsKKworc3RydWN0IGlmbGFfdmZfaW5mbyB7CisJX191MzIgdmY7CisJX191OCBtYWNbMzJdOworCV9fdTMyIHZsYW47CisJX191MzIgcW9zOworCV9fdTMyIHR4X3JhdGU7Cit9OworCisvKiBWRiBwb3J0cyBtYW5hZ2VtZW50IHNlY3Rpb24KKyAqCisgKglOZXN0ZWQgbGF5b3V0IG9mIHNldC9nZXQgbXNnIGlzOgorICoKKyAqCQlbSUZMQV9OVU1fVkZdCisgKgkJW0lGTEFfVkZfUE9SVFNdCisgKgkJCVtJRkxBX1ZGX1BPUlRdCisgKgkJCQlbSUZMQV9QT1JUXypdLCAuLi4KKyAqCQkJW0lGTEFfVkZfUE9SVF0KKyAqCQkJCVtJRkxBX1BPUlRfKl0sIC4uLgorICoJCQkuLi4KKyAqCQlbSUZMQV9QT1JUX1NFTEZdCisgKgkJCVtJRkxBX1BPUlRfKl0sIC4uLgorICovCisKK2VudW0geworCUlGTEFfVkZfUE9SVF9VTlNQRUMsCisJSUZMQV9WRl9QT1JULAkJCS8qIG5lc3QgKi8KKwlfX0lGTEFfVkZfUE9SVF9NQVgsCit9OworCisjZGVmaW5lIElGTEFfVkZfUE9SVF9NQVggKF9fSUZMQV9WRl9QT1JUX01BWCAtIDEpCisKK2VudW0geworCUlGTEFfUE9SVF9VTlNQRUMsCisJSUZMQV9QT1JUX1ZGLAkJCS8qIF9fdTMyICovCisJSUZMQV9QT1JUX1BST0ZJTEUsCQkvKiBzdHJpbmcgKi8KKwlJRkxBX1BPUlRfVlNJX1RZUEUsCQkvKiA4MDIuMVFiZyAocHJlLSlzdGFuZGFyZCBWRFAgKi8KKwlJRkxBX1BPUlRfSU5TVEFOQ0VfVVVJRCwJLyogYmluYXJ5IFVVSUQgKi8KKwlJRkxBX1BPUlRfSE9TVF9VVUlELAkJLyogYmluYXJ5IFVVSUQgKi8KKwlJRkxBX1BPUlRfUkVRVUVTVCwJCS8qIF9fdTggKi8KKwlJRkxBX1BPUlRfUkVTUE9OU0UsCQkvKiBfX3UxNiwgb3V0cHV0IG9ubHkgKi8KKwlfX0lGTEFfUE9SVF9NQVgsCit9OworCisjZGVmaW5lIElGTEFfUE9SVF9NQVggKF9fSUZMQV9QT1JUX01BWCAtIDEpCisKKyNkZWZpbmUgUE9SVF9QUk9GSUxFX01BWAk0MAorI2RlZmluZSBQT1JUX1VVSURfTUFYCQkxNgorI2RlZmluZSBQT1JUX1NFTEZfVkYJCS0xCisKK2VudW0geworCVBPUlRfUkVRVUVTVF9QUkVBU1NPQ0lBVEUgPSAwLAorCVBPUlRfUkVRVUVTVF9QUkVBU1NPQ0lBVEVfUlIsCisJUE9SVF9SRVFVRVNUX0FTU09DSUFURSwKKwlQT1JUX1JFUVVFU1RfRElTQVNTT0NJQVRFLAorfTsKKworZW51bSB7CisJUE9SVF9WRFBfUkVTUE9OU0VfU1VDQ0VTUyA9IDAsCisJUE9SVF9WRFBfUkVTUE9OU0VfSU5WQUxJRF9GT1JNQVQsCisJUE9SVF9WRFBfUkVTUE9OU0VfSU5TVUZGSUNJRU5UX1JFU09VUkNFUywKKwlQT1JUX1ZEUF9SRVNQT05TRV9VTlVTRURfVlRJRCwKKwlQT1JUX1ZEUF9SRVNQT05TRV9WVElEX1ZJT0xBVElPTiwKKwlQT1JUX1ZEUF9SRVNQT05TRV9WVElEX1ZFUlNJT05fVklPQUxUSU9OLAorCVBPUlRfVkRQX1JFU1BPTlNFX09VVF9PRl9TWU5DLAorCS8qIDB4MDgtMHhGRiByZXNlcnZlZCBmb3IgZnV0dXJlIFZEUCB1c2UgKi8KKwlQT1JUX1BST0ZJTEVfUkVTUE9OU0VfU1VDQ0VTUyA9IDB4MTAwLAorCVBPUlRfUFJPRklMRV9SRVNQT05TRV9JTlBST0dSRVNTLAorCVBPUlRfUFJPRklMRV9SRVNQT05TRV9JTlZBTElELAorCVBPUlRfUFJPRklMRV9SRVNQT05TRV9CQURTVEFURSwKKwlQT1JUX1BST0ZJTEVfUkVTUE9OU0VfSU5TVUZGSUNJRU5UX1JFU09VUkNFUywKKwlQT1JUX1BST0ZJTEVfUkVTUE9OU0VfRVJST1IsCit9OworCitzdHJ1Y3QgaWZsYV9wb3J0X3ZzaSB7CisJX191OCB2c2lfbWdyX2lkOworCV9fdTggdnNpX3R5cGVfaWRbM107CisJX191OCB2c2lfdHlwZV92ZXJzaW9uOworCV9fdTggcGFkWzNdOworfTsKKworI2VuZGlmIC8qIF9MSU5VWF9JRl9MSU5LX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl9sdGFsay5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX2x0YWxrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJjM2UzMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl9sdGFsay5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBfX0xJTlVYX0xUQUxLX0gKKyNkZWZpbmUgX19MSU5VWF9MVEFMS19ICisKKyNkZWZpbmUgTFRBTEtfSExFTgkJMQorI2RlZmluZSBMVEFMS19NVFUJCTYwMAorI2RlZmluZSBMVEFMS19BTEVOCQkxCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfcGFja2V0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfcGFja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJiZmE1YQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaApAQCAtMCwwICsxLDE0NCBAQAorI2lmbmRlZiBfX0xJTlVYX0lGX1BBQ0tFVF9ICisjZGVmaW5lIF9fTElOVVhfSUZfUEFDS0VUX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBzb2NrYWRkcl9wa3QgeworCXVuc2lnbmVkIHNob3J0IHNwa3RfZmFtaWx5OworCXVuc2lnbmVkIGNoYXIgc3BrdF9kZXZpY2VbMTRdOworCV9fYmUxNiBzcGt0X3Byb3RvY29sOworfTsKKworc3RydWN0IHNvY2thZGRyX2xsIHsKKwl1bnNpZ25lZCBzaG9ydAlzbGxfZmFtaWx5OworCV9fYmUxNgkJc2xsX3Byb3RvY29sOworCWludAkJc2xsX2lmaW5kZXg7CisJdW5zaWduZWQgc2hvcnQJc2xsX2hhdHlwZTsKKwl1bnNpZ25lZCBjaGFyCXNsbF9wa3R0eXBlOworCXVuc2lnbmVkIGNoYXIJc2xsX2hhbGVuOworCXVuc2lnbmVkIGNoYXIJc2xsX2FkZHJbOF07Cit9OworCisvKiBQYWNrZXQgdHlwZXMgKi8KKworI2RlZmluZSBQQUNLRVRfSE9TVAkJMAkJLyogVG8gdXMJCSovCisjZGVmaW5lIFBBQ0tFVF9CUk9BRENBU1QJMQkJLyogVG8gYWxsCQkqLworI2RlZmluZSBQQUNLRVRfTVVMVElDQVNUCTIJCS8qIFRvIGdyb3VwCQkqLworI2RlZmluZSBQQUNLRVRfT1RIRVJIT1NUCTMJCS8qIFRvIHNvbWVvbmUgZWxzZSAJKi8KKyNkZWZpbmUgUEFDS0VUX09VVEdPSU5HCQk0CQkvKiBPdXRnb2luZyBvZiBhbnkgdHlwZSAqLworLyogVGhlc2Ugb25lcyBhcmUgaW52aXNpYmxlIGJ5IHVzZXIgbGV2ZWwgKi8KKyNkZWZpbmUgUEFDS0VUX0xPT1BCQUNLCQk1CQkvKiBNQy9CUkQgZnJhbWUgbG9vcGVkIGJhY2sgKi8KKyNkZWZpbmUgUEFDS0VUX0ZBU1RST1VURQk2CQkvKiBGYXN0cm91dGVkIGZyYW1lCSovCisKKy8qIFBhY2tldCBzb2NrZXQgb3B0aW9ucyAqLworCisjZGVmaW5lIFBBQ0tFVF9BRERfTUVNQkVSU0hJUAkJMQorI2RlZmluZSBQQUNLRVRfRFJPUF9NRU1CRVJTSElQCQkyCisjZGVmaW5lIFBBQ0tFVF9SRUNWX09VVFBVVAkJMworLyogVmFsdWUgNCBpcyBzdGlsbCB1c2VkIGJ5IG9ic29sZXRlIHR1cmJvLXBhY2tldC4gKi8KKyNkZWZpbmUgUEFDS0VUX1JYX1JJTkcJCQk1CisjZGVmaW5lIFBBQ0tFVF9TVEFUSVNUSUNTCQk2CisjZGVmaW5lIFBBQ0tFVF9DT1BZX1RIUkVTSAkJNworI2RlZmluZSBQQUNLRVRfQVVYREFUQQkJCTgKKyNkZWZpbmUgUEFDS0VUX09SSUdERVYJCQk5CisjZGVmaW5lIFBBQ0tFVF9WRVJTSU9OCQkJMTAKKyNkZWZpbmUgUEFDS0VUX0hEUkxFTgkJCTExCisjZGVmaW5lIFBBQ0tFVF9SRVNFUlZFCQkJMTIKKyNkZWZpbmUgUEFDS0VUX1RYX1JJTkcJCQkxMworI2RlZmluZSBQQUNLRVRfTE9TUwkJCTE0CisjZGVmaW5lIFBBQ0tFVF9WTkVUX0hEUgkJCTE1CisjZGVmaW5lIFBBQ0tFVF9UWF9USU1FU1RBTVAJCTE2CisjZGVmaW5lIFBBQ0tFVF9USU1FU1RBTVAJCTE3CisKK3N0cnVjdCB0cGFja2V0X3N0YXRzIHsKKwl1bnNpZ25lZCBpbnQJdHBfcGFja2V0czsKKwl1bnNpZ25lZCBpbnQJdHBfZHJvcHM7Cit9OworCitzdHJ1Y3QgdHBhY2tldF9hdXhkYXRhIHsKKwlfX3UzMgkJdHBfc3RhdHVzOworCV9fdTMyCQl0cF9sZW47CisJX191MzIJCXRwX3NuYXBsZW47CisJX191MTYJCXRwX21hYzsKKwlfX3UxNgkJdHBfbmV0OworCV9fdTE2CQl0cF92bGFuX3RjaTsKK307CisKKy8qIFJ4IHJpbmcgLSBoZWFkZXIgc3RhdHVzICovCisjZGVmaW5lIFRQX1NUQVRVU19LRVJORUwJMHgwCisjZGVmaW5lIFRQX1NUQVRVU19VU0VSCQkweDEKKyNkZWZpbmUgVFBfU1RBVFVTX0NPUFkJCTB4MgorI2RlZmluZSBUUF9TVEFUVVNfTE9TSU5HCTB4NAorI2RlZmluZSBUUF9TVEFUVVNfQ1NVTU5PVFJFQURZCTB4OAorCisvKiBUeCByaW5nIC0gaGVhZGVyIHN0YXR1cyAqLworI2RlZmluZSBUUF9TVEFUVVNfQVZBSUxBQkxFCTB4MAorI2RlZmluZSBUUF9TVEFUVVNfU0VORF9SRVFVRVNUCTB4MQorI2RlZmluZSBUUF9TVEFUVVNfU0VORElORwkweDIKKyNkZWZpbmUgVFBfU1RBVFVTX1dST05HX0ZPUk1BVAkweDQKKworc3RydWN0IHRwYWNrZXRfaGRyIHsKKwl1bnNpZ25lZCBsb25nCXRwX3N0YXR1czsKKwl1bnNpZ25lZCBpbnQJdHBfbGVuOworCXVuc2lnbmVkIGludAl0cF9zbmFwbGVuOworCXVuc2lnbmVkIHNob3J0CXRwX21hYzsKKwl1bnNpZ25lZCBzaG9ydAl0cF9uZXQ7CisJdW5zaWduZWQgaW50CXRwX3NlYzsKKwl1bnNpZ25lZCBpbnQJdHBfdXNlYzsKK307CisKKyNkZWZpbmUgVFBBQ0tFVF9BTElHTk1FTlQJMTYKKyNkZWZpbmUgVFBBQ0tFVF9BTElHTih4KQkoKCh4KStUUEFDS0VUX0FMSUdOTUVOVC0xKSZ+KFRQQUNLRVRfQUxJR05NRU5ULTEpKQorI2RlZmluZSBUUEFDS0VUX0hEUkxFTgkJKFRQQUNLRVRfQUxJR04oc2l6ZW9mKHN0cnVjdCB0cGFja2V0X2hkcikpICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sbCkpCisKK3N0cnVjdCB0cGFja2V0Ml9oZHIgeworCV9fdTMyCQl0cF9zdGF0dXM7CisJX191MzIJCXRwX2xlbjsKKwlfX3UzMgkJdHBfc25hcGxlbjsKKwlfX3UxNgkJdHBfbWFjOworCV9fdTE2CQl0cF9uZXQ7CisJX191MzIJCXRwX3NlYzsKKwlfX3UzMgkJdHBfbnNlYzsKKwlfX3UxNgkJdHBfdmxhbl90Y2k7Cit9OworCisjZGVmaW5lIFRQQUNLRVQyX0hEUkxFTgkJKFRQQUNLRVRfQUxJR04oc2l6ZW9mKHN0cnVjdCB0cGFja2V0Ml9oZHIpKSArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpKQorCitlbnVtIHRwYWNrZXRfdmVyc2lvbnMgeworCVRQQUNLRVRfVjEsCisJVFBBQ0tFVF9WMiwKK307CisKKy8qCisgICBGcmFtZSBzdHJ1Y3R1cmU6CisKKyAgIC0gU3RhcnQuIEZyYW1lIG11c3QgYmUgYWxpZ25lZCB0byBUUEFDS0VUX0FMSUdOTUVOVD0xNgorICAgLSBzdHJ1Y3QgdHBhY2tldF9oZHIKKyAgIC0gcGFkIHRvIFRQQUNLRVRfQUxJR05NRU5UPTE2CisgICAtIHN0cnVjdCBzb2NrYWRkcl9sbAorICAgLSBHYXAsIGNob3NlbiBzbyB0aGF0IHBhY2tldCBkYXRhIChTdGFydCt0cF9uZXQpIGFsaWduZXMgdG8gVFBBQ0tFVF9BTElHTk1FTlQ9MTYKKyAgIC0gU3RhcnQrdHBfbWFjOiBbIE9wdGlvbmFsIE1BQyBoZWFkZXIgXQorICAgLSBTdGFydCt0cF9uZXQ6IFBhY2tldCBkYXRhLCBhbGlnbmVkIHRvIFRQQUNLRVRfQUxJR05NRU5UPTE2LgorICAgLSBQYWQgdG8gYWxpZ24gdG8gVFBBQ0tFVF9BTElHTk1FTlQ9MTYKKyAqLworCitzdHJ1Y3QgdHBhY2tldF9yZXEgeworCXVuc2lnbmVkIGludAl0cF9ibG9ja19zaXplOwkvKiBNaW5pbWFsIHNpemUgb2YgY29udGlndW91cyBibG9jayAqLworCXVuc2lnbmVkIGludAl0cF9ibG9ja19ucjsJLyogTnVtYmVyIG9mIGJsb2NrcyAqLworCXVuc2lnbmVkIGludAl0cF9mcmFtZV9zaXplOwkvKiBTaXplIG9mIGZyYW1lICovCisJdW5zaWduZWQgaW50CXRwX2ZyYW1lX25yOwkvKiBUb3RhbCBudW1iZXIgb2YgZnJhbWVzICovCit9OworCitzdHJ1Y3QgcGFja2V0X21yZXEgeworCWludAkJbXJfaWZpbmRleDsKKwl1bnNpZ25lZCBzaG9ydAltcl90eXBlOworCXVuc2lnbmVkIHNob3J0CW1yX2FsZW47CisJdW5zaWduZWQgY2hhcgltcl9hZGRyZXNzWzhdOworfTsKKworI2RlZmluZSBQQUNLRVRfTVJfTVVMVElDQVNUCTAKKyNkZWZpbmUgUEFDS0VUX01SX1BST01JU0MJMQorI2RlZmluZSBQQUNLRVRfTVJfQUxMTVVMVEkJMgorI2RlZmluZSBQQUNLRVRfTVJfVU5JQ0FTVAkzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX3Bob25ldC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX3Bob25ldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYjBkNGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfcGhvbmV0LmgKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqIEZpbGU6IGlmX3Bob25ldC5oCisgKgorICogUGhvbmV0IGludGVyZmFjZSBrZXJuZWwgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKyNpZm5kZWYgTElOVVhfSUZfUEhPTkVUX0gKKyNkZWZpbmUgTElOVVhfSUZfUEhPTkVUX0gKKworI2RlZmluZSBQSE9ORVRfTUlOX01UVQkJNgkvKiBwbl9sZW5ndGggPSAwICovCisjZGVmaW5lIFBIT05FVF9NQVhfTVRVCQk2NTU0MQkvKiBwbl9sZW5ndGggPSAweGZmZmYgKi8KKyNkZWZpbmUgUEhPTkVUX0RFVl9NVFUJCVBIT05FVF9NQVhfTVRVCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfcGxpcC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX3BsaXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mjk4YzdlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX3BsaXAuaApAQCAtMCwwICsxLDI3IEBACisvKgorICoJTkVUMwlQTElQIHR1bmluZyBmYWNpbGl0aWVzIGZvciB0aGUgbmV3IE5paWJlIFBMSVAuCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKyAKKyNpZm5kZWYgX0xJTlVYX0lGX1BMSVBfSAorI2RlZmluZSBfTElOVVhfSUZfUExJUF9ICisKKyNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CisKKyNkZWZpbmUJU0lPQ0RFVlBMSVAJU0lPQ0RFVlBSSVZBVEUKKworc3RydWN0IHBsaXBjb25mIHsKKwl1bnNpZ25lZCBzaG9ydCBwY21kOworCXVuc2lnbmVkIGxvbmcgIG5pYmJsZTsKKwl1bnNpZ25lZCBsb25nICB0cmlnZ2VyOworfTsKKworI2RlZmluZSBQTElQX0dFVF9USU1FT1VUCTB4MQorI2RlZmluZSBQTElQX1NFVF9USU1FT1VUCTB4MgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl9wcHAuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl9wcHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTdiZDcxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX3BwcC5oCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogaWZfcHBwLmggLSBQb2ludC10by1Qb2ludCBQcm90b2NvbCBkZWZpbml0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5ODkgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMgYXJlIHBlcm1pdHRlZAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYXJlCisgKiBkdXBsaWNhdGVkIGluIGFsbCBzdWNoIGZvcm1zIGFuZCB0aGF0IGFueSBkb2N1bWVudGF0aW9uLAorICogYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzLCBhbmQgb3RoZXIgbWF0ZXJpYWxzIHJlbGF0ZWQgdG8gc3VjaAorICogZGlzdHJpYnV0aW9uIGFuZCB1c2UgYWNrbm93bGVkZ2UgdGhhdCB0aGUgc29mdHdhcmUgd2FzIGRldmVsb3BlZAorICogYnkgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkuICBUaGUgbmFtZSBvZiB0aGUKKyAqIFVuaXZlcnNpdHkgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqCisgKi8KKworLyoKKyAqICA9PUZJTEVWRVJTSU9OIDIwMDUwODEyPT0KKyAqCisgKiAgTk9URSBUTyBNQUlOVEFJTkVSUzoKKyAqICAgICBJZiB5b3UgbW9kaWZ5IHRoaXMgZmlsZSBhdCBhbGwsIHBsZWFzZSBzZXQgdGhlIGFib3ZlIGRhdGUuCisgKiAgICAgaWZfcHBwLmggaXMgc2hpcHBlZCB3aXRoIGEgUFBQIGRpc3RyaWJ1dGlvbiBhcyB3ZWxsIGFzIHdpdGggdGhlIGtlcm5lbDsKKyAqICAgICBpZiBldmVyeW9uZSBpbmNyZWFzZXMgdGhlIEZJTEVWRVJTSU9OIG51bWJlciBhYm92ZSwgdGhlbiBzY3JpcHRzCisgKiAgICAgY2FuIGRvIHRoZSByaWdodCB0aGluZyB3aGVuIGRlY2lkaW5nIHdoZXRoZXIgdG8gaW5zdGFsbCBhIG5ldyBpZl9wcHAuaAorICogICAgIGZpbGUuICBEb24ndCBjaGFuZ2UgdGhlIGZvcm1hdCBvZiB0aGF0IGxpbmUgb3RoZXJ3aXNlLCBzbyB0aGUKKyAqICAgICBpbnN0YWxsYXRpb24gc2NyaXB0IGNhbiByZWNvZ25pemUgaXQuCisgKi8KKworI2lmbmRlZiBfSUZfUFBQX0hfCisjZGVmaW5lIF9JRl9QUFBfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKworLyoKKyAqIFBhY2tldCBzaXplcworICovCisKKyNkZWZpbmUJUFBQX01UVQkJMTUwMAkvKiBEZWZhdWx0IE1UVSAoc2l6ZSBvZiBJbmZvIGZpZWxkKSAqLworI2RlZmluZSBQUFBfTUFYTVJVCTY1MDAwCS8qIExhcmdlc3QgTVJVIHdlIGFsbG93ICovCisjZGVmaW5lIFBST1RPX0lQWAkweDAwMmIJLyogcHJvdG9jb2wgbnVtYmVycyAqLworI2RlZmluZSBQUk9UT19ETkFfUlQgICAgMHgwMDI3ICAvKiBETkEgUm91dGluZyAqLworCisKKy8qCisgKiBCaXQgZGVmaW5pdGlvbnMgZm9yIGZsYWdzLgorICovCisKKyNkZWZpbmUgU0NfQ09NUF9QUk9UCTB4MDAwMDAwMDEJLyogcHJvdG9jb2wgY29tcHJlc3Npb24gKG91dHB1dCkgKi8KKyNkZWZpbmUgU0NfQ09NUF9BQwkweDAwMDAwMDAyCS8qIGhlYWRlciBjb21wcmVzc2lvbiAob3V0cHV0KSAqLworI2RlZmluZQlTQ19DT01QX1RDUAkweDAwMDAwMDA0CS8qIFRDUCAoVkopIGNvbXByZXNzaW9uIChvdXRwdXQpICovCisjZGVmaW5lIFNDX05PX1RDUF9DQ0lECTB4MDAwMDAwMDgJLyogZGlzYWJsZSBWSiBjb25uZWN0aW9uLWlkIGNvbXAuICovCisjZGVmaW5lIFNDX1JFSl9DT01QX0FDCTB4MDAwMDAwMTAJLyogcmVqZWN0IGFkcnMvY3RybCBjb21wLiBvbiBpbnB1dCAqLworI2RlZmluZSBTQ19SRUpfQ09NUF9UQ1AJMHgwMDAwMDAyMAkvKiByZWplY3QgVENQIChWSikgY29tcC4gb24gaW5wdXQgKi8KKyNkZWZpbmUgU0NfQ0NQX09QRU4JMHgwMDAwMDA0MAkvKiBMb29rIGF0IENDUCBwYWNrZXRzICovCisjZGVmaW5lIFNDX0NDUF9VUAkweDAwMDAwMDgwCS8qIE1heSBzZW5kL3JlY3YgY29tcHJlc3NlZCBwYWNrZXRzICovCisjZGVmaW5lIFNDX0VOQUJMRV9JUAkweDAwMDAwMTAwCS8qIElQIHBhY2tldHMgbWF5IGJlIGV4Y2hhbmdlZCAqLworI2RlZmluZSBTQ19MT09QX1RSQUZGSUMJMHgwMDAwMDIwMAkvKiBzZW5kIHRyYWZmaWMgdG8gcHBwZCAqLworI2RlZmluZSBTQ19NVUxUSUxJTksJMHgwMDAwMDQwMAkvKiBkbyBtdWx0aWxpbmsgZW5jYXBzdWxhdGlvbiAqLworI2RlZmluZSBTQ19NUF9TSE9SVFNFUQkweDAwMDAwODAwCS8qIHVzZSBzaG9ydCBNUCBzZXF1ZW5jZSBudW1iZXJzICovCisjZGVmaW5lIFNDX0NPTVBfUlVOCTB4MDAwMDEwMDAJLyogY29tcHJlc3NvciBoYXMgYmVlbiBpbml0ZWQgKi8KKyNkZWZpbmUgU0NfREVDT01QX1JVTgkweDAwMDAyMDAwCS8qIGRlY29tcHJlc3NvciBoYXMgYmVlbiBpbml0ZWQgKi8KKyNkZWZpbmUgU0NfTVBfWFNIT1JUU0VRCTB4MDAwMDQwMDAJLyogdHJhbnNtaXQgc2hvcnQgTVAgc2VxIG51bWJlcnMgKi8KKyNkZWZpbmUgU0NfREVCVUcJMHgwMDAxMDAwMAkvKiBlbmFibGUgZGVidWcgbWVzc2FnZXMgKi8KKyNkZWZpbmUgU0NfTE9HX0lOUEtUCTB4MDAwMjAwMDAJLyogbG9nIGNvbnRlbnRzIG9mIGdvb2QgcGt0cyByZWN2ZCAqLworI2RlZmluZSBTQ19MT0dfT1VUUEtUCTB4MDAwNDAwMDAJLyogbG9nIGNvbnRlbnRzIG9mIHBrdHMgc2VudCAqLworI2RlZmluZSBTQ19MT0dfUkFXSU4JMHgwMDA4MDAwMAkvKiBsb2cgYWxsIGNoYXJzIHJlY2VpdmVkICovCisjZGVmaW5lIFNDX0xPR19GTFVTSAkweDAwMTAwMDAwCS8qIGxvZyBhbGwgY2hhcnMgZmx1c2hlZCAqLworI2RlZmluZQlTQ19TWU5DCQkweDAwMjAwMDAwCS8qIHN5bmNocm9ub3VzIHNlcmlhbCBtb2RlICovCisjZGVmaW5lCVNDX01VU1RfQ09NUCAgICAweDAwNDAwMDAwCS8qIG5vIHVuY29tcHJlc3NlZCBwYWNrZXRzIG1heSBiZSBzZW50IG9yIHJlY2VpdmVkICovCisjZGVmaW5lCVNDX01BU0sJCTB4MGY2MDBmZmYJLyogYml0cyB0aGF0IHVzZXIgY2FuIGNoYW5nZSAqLworCisvKiBzdGF0ZSBiaXRzICovCisjZGVmaW5lIFNDX1hNSVRfQlVTWQkweDEwMDAwMDAwCS8qICh1c2VkIGJ5IGlzZG5fcHBwPykgKi8KKyNkZWZpbmUgU0NfUkNWX09ERFAJMHgwODAwMDAwMAkvKiBoYXZlIHJjdmQgY2hhciB3aXRoIG9kZCBwYXJpdHkgKi8KKyNkZWZpbmUgU0NfUkNWX0VWTlAJMHgwNDAwMDAwMAkvKiBoYXZlIHJjdmQgY2hhciB3aXRoIGV2ZW4gcGFyaXR5ICovCisjZGVmaW5lIFNDX1JDVl9CN18xCTB4MDIwMDAwMDAJLyogaGF2ZSByY3ZkIGNoYXIgd2l0aCBiaXQgNyA9IDEgKi8KKyNkZWZpbmUgU0NfUkNWX0I3XzAJMHgwMTAwMDAwMAkvKiBoYXZlIHJjdmQgY2hhciB3aXRoIGJpdCA3ID0gMCAqLworI2RlZmluZSBTQ19EQ19GRVJST1IJMHgwMDgwMDAwMAkvKiBmYXRhbCBkZWNvbXAgZXJyb3IgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgU0NfRENfRVJST1IJMHgwMDQwMDAwMAkvKiBub24tZmF0YWwgZGVjb21wIGVycm9yIGRldGVjdGVkICovCisKKy8qCisgKiBJb2N0bCBkZWZpbml0aW9ucy4KKyAqLworCitzdHJ1Y3QgbnBpb2N0bCB7CisJaW50CQlwcm90b2NvbDsJLyogUFBQIHByb3RvY29sLCBlLmcuIFBQUF9JUCAqLworCWVudW0gTlBtb2RlCW1vZGU7Cit9OworCisvKiBTdHJ1Y3R1cmUgZGVzY3JpYmluZyBhIENDUCBjb25maWd1cmF0aW9uIG9wdGlvbiwgZm9yIFBQUElPQ1NDT01QUkVTUyAqLworc3RydWN0IHBwcF9vcHRpb25fZGF0YSB7CisJX191OAkqcHRyOworCV9fdTMyCWxlbmd0aDsKKwlpbnQJdHJhbnNtaXQ7Cit9OworCitzdHJ1Y3QgaWZwcHBzdGF0c3JlcSB7CisJc3RydWN0IGlmcmVxCSBiOworCXN0cnVjdCBwcHBfc3RhdHMgc3RhdHM7CQkJLyogc3RhdGlzdGljIGluZm9ybWF0aW9uICovCit9OworCitzdHJ1Y3QgaWZwcHBjc3RhdHNyZXEgeworCXN0cnVjdCBpZnJlcQkgICAgICBiOworCXN0cnVjdCBwcHBfY29tcF9zdGF0cyBzdGF0czsKK307CisKKy8qIEZvciBQUFBJT0NHTDJUUFNUQVRTICovCitzdHJ1Y3QgcHBwb2wydHBfaW9jX3N0YXRzIHsKKwlfX3UxNgkJdHVubmVsX2lkOwkvKiByZWR1bmRhbnQgKi8KKwlfX3UxNgkJc2Vzc2lvbl9pZDsJLyogaWYgemVybywgZ2V0IHR1bm5lbCBzdGF0cyAqLworCV9fdTMyCQl1c2luZ19pcHNlYzoxOwkvKiB2YWxpZCBvbmx5IGZvciBzZXNzaW9uX2lkID09IDAgKi8KKwlhbGlnbmVkX3U2NAl0eF9wYWNrZXRzOworCWFsaWduZWRfdTY0CXR4X2J5dGVzOworCWFsaWduZWRfdTY0CXR4X2Vycm9yczsKKwlhbGlnbmVkX3U2NAlyeF9wYWNrZXRzOworCWFsaWduZWRfdTY0CXJ4X2J5dGVzOworCWFsaWduZWRfdTY0CXJ4X3NlcV9kaXNjYXJkczsKKwlhbGlnbmVkX3U2NAlyeF9vb3NfcGFja2V0czsKKwlhbGlnbmVkX3U2NAlyeF9lcnJvcnM7Cit9OworCisjZGVmaW5lIGlmcl9fbmFtZSAgICAgICBiLmlmcl9pZnJuLmlmcm5fbmFtZQorI2RlZmluZSBzdGF0c19wdHIgICAgICAgYi5pZnJfaWZydS5pZnJ1X2RhdGEKKworLyoKKyAqIElvY3RsIGRlZmluaXRpb25zLgorICovCisKKyNkZWZpbmUJUFBQSU9DR0ZMQUdTCV9JT1IoJ3QnLCA5MCwgaW50KQkvKiBnZXQgY29uZmlndXJhdGlvbiBmbGFncyAqLworI2RlZmluZQlQUFBJT0NTRkxBR1MJX0lPVygndCcsIDg5LCBpbnQpCS8qIHNldCBjb25maWd1cmF0aW9uIGZsYWdzICovCisjZGVmaW5lCVBQUElPQ0dBU1lOQ01BUAlfSU9SKCd0JywgODgsIGludCkJLyogZ2V0IGFzeW5jIG1hcCAqLworI2RlZmluZQlQUFBJT0NTQVNZTkNNQVAJX0lPVygndCcsIDg3LCBpbnQpCS8qIHNldCBhc3luYyBtYXAgKi8KKyNkZWZpbmUJUFBQSU9DR1VOSVQJX0lPUigndCcsIDg2LCBpbnQpCS8qIGdldCBwcHAgdW5pdCBudW1iZXIgKi8KKyNkZWZpbmUJUFBQSU9DR1JBU1lOQ01BUCBfSU9SKCd0JywgODUsIGludCkJLyogZ2V0IHJlY2VpdmUgYXN5bmMgbWFwICovCisjZGVmaW5lCVBQUElPQ1NSQVNZTkNNQVAgX0lPVygndCcsIDg0LCBpbnQpCS8qIHNldCByZWNlaXZlIGFzeW5jIG1hcCAqLworI2RlZmluZQlQUFBJT0NHTVJVCV9JT1IoJ3QnLCA4MywgaW50KQkvKiBnZXQgbWF4IHJlY2VpdmUgdW5pdCAqLworI2RlZmluZQlQUFBJT0NTTVJVCV9JT1coJ3QnLCA4MiwgaW50KQkvKiBzZXQgbWF4IHJlY2VpdmUgdW5pdCAqLworI2RlZmluZQlQUFBJT0NTTUFYQ0lECV9JT1coJ3QnLCA4MSwgaW50KQkvKiBzZXQgVkogbWF4IHNsb3QgSUQgKi8KKyNkZWZpbmUgUFBQSU9DR1hBU1lOQ01BUCBfSU9SKCd0JywgODAsIGV4dF9hY2NtKSAvKiBnZXQgZXh0ZW5kZWQgQUNDTSAqLworI2RlZmluZSBQUFBJT0NTWEFTWU5DTUFQIF9JT1coJ3QnLCA3OSwgZXh0X2FjY20pIC8qIHNldCBleHRlbmRlZCBBQ0NNICovCisjZGVmaW5lIFBQUElPQ1hGRVJVTklUCV9JTygndCcsIDc4KQkJLyogdHJhbnNmZXIgUFBQIHVuaXQgKi8KKyNkZWZpbmUgUFBQSU9DU0NPTVBSRVNTCV9JT1coJ3QnLCA3Nywgc3RydWN0IHBwcF9vcHRpb25fZGF0YSkKKyNkZWZpbmUgUFBQSU9DR05QTU9ERQlfSU9XUigndCcsIDc2LCBzdHJ1Y3QgbnBpb2N0bCkgLyogZ2V0IE5QIG1vZGUgKi8KKyNkZWZpbmUgUFBQSU9DU05QTU9ERQlfSU9XKCd0JywgNzUsIHN0cnVjdCBucGlvY3RsKSAgLyogc2V0IE5QIG1vZGUgKi8KKyNkZWZpbmUgUFBQSU9DU1BBU1MJX0lPVygndCcsIDcxLCBzdHJ1Y3Qgc29ja19mcHJvZykgLyogc2V0IHBhc3MgZmlsdGVyICovCisjZGVmaW5lIFBQUElPQ1NBQ1RJVkUJX0lPVygndCcsIDcwLCBzdHJ1Y3Qgc29ja19mcHJvZykgLyogc2V0IGFjdGl2ZSBmaWx0ICovCisjZGVmaW5lIFBQUElPQ0dERUJVRwlfSU9SKCd0JywgNjUsIGludCkJLyogUmVhZCBkZWJ1ZyBsZXZlbCAqLworI2RlZmluZSBQUFBJT0NTREVCVUcJX0lPVygndCcsIDY0LCBpbnQpCS8qIFNldCBkZWJ1ZyBsZXZlbCAqLworI2RlZmluZSBQUFBJT0NHSURMRQlfSU9SKCd0JywgNjMsIHN0cnVjdCBwcHBfaWRsZSkgLyogZ2V0IGlkbGUgdGltZSAqLworI2RlZmluZSBQUFBJT0NORVdVTklUCV9JT1dSKCd0JywgNjIsIGludCkJLyogY3JlYXRlIG5ldyBwcHAgdW5pdCAqLworI2RlZmluZSBQUFBJT0NBVFRBQ0gJX0lPVygndCcsIDYxLCBpbnQpCS8qIGF0dGFjaCB0byBwcHAgdW5pdCAqLworI2RlZmluZSBQUFBJT0NERVRBQ0gJX0lPVygndCcsIDYwLCBpbnQpCS8qIGRldGFjaCBmcm9tIHBwcCB1bml0L2NoYW4gKi8KKyNkZWZpbmUgUFBQSU9DU01SUlUJX0lPVygndCcsIDU5LCBpbnQpCS8qIHNldCBtdWx0aWxpbmsgTVJVICovCisjZGVmaW5lIFBQUElPQ0NPTk5FQ1QJX0lPVygndCcsIDU4LCBpbnQpCS8qIGNvbm5lY3QgY2hhbm5lbCB0byB1bml0ICovCisjZGVmaW5lIFBQUElPQ0RJU0NPTk4JX0lPKCd0JywgNTcpCQkvKiBkaXNjb25uZWN0IGNoYW5uZWwgKi8KKyNkZWZpbmUgUFBQSU9DQVRUQ0hBTglfSU9XKCd0JywgNTYsIGludCkJLyogYXR0YWNoIHRvIHBwcCBjaGFubmVsICovCisjZGVmaW5lIFBQUElPQ0dDSEFOCV9JT1IoJ3QnLCA1NSwgaW50KQkvKiBnZXQgcHBwIGNoYW5uZWwgbnVtYmVyICovCisjZGVmaW5lIFBQUElPQ0dMMlRQU1RBVFMgX0lPUigndCcsIDU0LCBzdHJ1Y3QgcHBwb2wydHBfaW9jX3N0YXRzKQorCisjZGVmaW5lIFNJT0NHUFBQU1RBVFMgICAoU0lPQ0RFVlBSSVZBVEUgKyAwKQorI2RlZmluZSBTSU9DR1BQUFZFUiAgICAgKFNJT0NERVZQUklWQVRFICsgMSkJLyogTkVWRVIgY2hhbmdlIHRoaXMhISAqLworI2RlZmluZSBTSU9DR1BQUENTVEFUUyAgKFNJT0NERVZQUklWQVRFICsgMikKKworI2lmICFkZWZpbmVkKGlmcl9tdHUpCisjZGVmaW5lIGlmcl9tdHUJaWZyX2lmcnUuaWZydV9tZXRyaWMKKyNlbmRpZgorCisjZW5kaWYgLyogX0lGX1BQUF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX3BwcG9sMnRwLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfcHBwb2wydHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWU4NmIyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX3BwcG9sMnRwLmgKQEAgLTAsMCArMSw3OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTGludXggUFBQIG92ZXIgTDJUUCAoUFBQb0wyVFApIFNvY2tldCBJbXBsZW1lbnRhdGlvbiAoUkZDIDI2NjEpCisgKgorICogVGhpcyBmaWxlIHN1cHBsaWVzIGRlZmluaXRpb25zIHJlcXVpcmVkIGJ5IHRoZSBQUFAgb3ZlciBMMlRQIGRyaXZlcgorICogKGwydHBfcHBwLmMpLiAgQWxsIHZlcnNpb24gaW5mb3JtYXRpb24gd3J0IHRoaXMgZmlsZSBpcyBsb2NhdGVkIGluIGwydHBfcHBwLmMKKyAqCisgKiBMaWNlbnNlOgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19MSU5VWF9JRl9QUFBPTDJUUF9ICisjZGVmaW5lIF9fTElOVVhfSUZfUFBQT0wyVFBfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworCisvKiBTdHJ1Y3R1cmUgdXNlZCB0byBjb25uZWN0KCkgdGhlIHNvY2tldCB0byBhIHBhcnRpY3VsYXIgdHVubmVsIFVEUAorICogc29ja2V0LgorICovCitzdHJ1Y3QgcHBwb2wydHBfYWRkciB7CisJX19rZXJuZWxfcGlkX3QJcGlkOwkJLyogcGlkIHRoYXQgb3ducyB0aGUgZmQuCisJCQkJCSAqIDAgPT4gY3VycmVudCAqLworCWludAlmZDsJCQkvKiBGRCBvZiBVRFAgc29ja2V0IHRvIHVzZSAqLworCisJc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CS8qIElQIGFkZHJlc3MgYW5kIHBvcnQgdG8gc2VuZCB0byAqLworCisJX191MTYgc190dW5uZWwsIHNfc2Vzc2lvbjsJLyogRm9yIG1hdGNoaW5nIGluY29taW5nIHBhY2tldHMgKi8KKwlfX3UxNiBkX3R1bm5lbCwgZF9zZXNzaW9uOwkvKiBGb3Igc2VuZGluZyBvdXRnb2luZyBwYWNrZXRzICovCit9OworCisvKiBUaGUgTDJUUHYzIHByb3RvY29sIGNoYW5nZXMgdHVubmVsIGFuZCBzZXNzaW9uIGlkcyBmcm9tIDE2IHRvIDMyCisgKiBiaXRzLiBTbyB3ZSBuZWVkIGEgZGlmZmVyZW50IHNvY2thZGRyIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IHBwcG9sMnRwdjNfYWRkciB7CisJcGlkX3QJcGlkOwkJCS8qIHBpZCB0aGF0IG93bnMgdGhlIGZkLgorCQkJCQkgKiAwID0+IGN1cnJlbnQgKi8KKwlpbnQJZmQ7CQkJLyogRkQgb2YgVURQIG9yIElQIHNvY2tldCB0byB1c2UgKi8KKworCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOwkvKiBJUCBhZGRyZXNzIGFuZCBwb3J0IHRvIHNlbmQgdG8gKi8KKworCV9fdTMyIHNfdHVubmVsLCBzX3Nlc3Npb247CS8qIEZvciBtYXRjaGluZyBpbmNvbWluZyBwYWNrZXRzICovCisJX191MzIgZF90dW5uZWwsIGRfc2Vzc2lvbjsJLyogRm9yIHNlbmRpbmcgb3V0Z29pbmcgcGFja2V0cyAqLworfTsKKworLyogU29ja2V0IG9wdGlvbnM6CisgKiBERUJVRwktIGJpdG1hc2sgb2YgZGVidWcgbWVzc2FnZSBjYXRlZ29yaWVzCisgKiBTRU5EU0VRCS0gMCA9PiBkb24ndCBzZW5kIHBhY2tldHMgd2l0aCBzZXF1ZW5jZSBudW1iZXJzCisgKgkJICAxID0+IHNlbmQgcGFja2V0cyB3aXRoIHNlcXVlbmNlIG51bWJlcnMKKyAqIFJFQ1ZTRVEJLSAwID0+IHJlY2VpdmUgcGFja2V0IHNlcXVlbmNlIG51bWJlcnMgYXJlIG9wdGlvbmFsCisgKgkJICAxID0+IGRyb3AgcmVjZWl2ZSBwYWNrZXRzIHdpdGhvdXQgc2VxdWVuY2UgbnVtYmVycworICogTE5TTU9ERQktIDAgPT4gYWN0IGFzIExBQy4KKyAqCQkgIDEgPT4gYWN0IGFzIExOUy4KKyAqIFJFT1JERVJUTwktIHJlb3JkZXIgdGltZW91dCAoaW4gbWlsbGlzZWNzKS4gSWYgMCwgZG9uJ3QgdHJ5IHRvIHJlb3JkZXIuCisgKi8KK2VudW0geworCVBQUE9MMlRQX1NPX0RFQlVHCT0gMSwKKwlQUFBPTDJUUF9TT19SRUNWU0VRCT0gMiwKKwlQUFBPTDJUUF9TT19TRU5EU0VRCT0gMywKKwlQUFBPTDJUUF9TT19MTlNNT0RFCT0gNCwKKwlQUFBPTDJUUF9TT19SRU9SREVSVE8JPSA1LAorfTsKKworLyogRGVidWcgbWVzc2FnZSBjYXRlZ29yaWVzIGZvciB0aGUgREVCVUcgc29ja2V0IG9wdGlvbiAqLworZW51bSB7CisJUFBQT0wyVFBfTVNHX0RFQlVHCT0gKDEgPDwgMCksCS8qIHZlcmJvc2UgZGVidWcgKGlmCisJCQkJCQkgKiBjb21waWxlZCBpbikgKi8KKwlQUFBPTDJUUF9NU0dfQ09OVFJPTAk9ICgxIDw8IDEpLAkvKiB1c2Vyc3BhY2UgLSBrZXJuZWwKKwkJCQkJCSAqIGludGVyZmFjZSAqLworCVBQUE9MMlRQX01TR19TRVEJPSAoMSA8PCAyKSwJLyogc2VxdWVuY2UgbnVtYmVycyAqLworCVBQUE9MMlRQX01TR19EQVRBCT0gKDEgPDwgMyksCS8qIGRhdGEgcGFja2V0cyAqLworfTsKKworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX3BwcG94LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfcHBwb3guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDI2NmJhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX3BwcG94LmgKQEAgLTAsMCArMSwxNDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIExpbnV4IFBQUCBvdmVyIFggLSBHZW5lcmljIFBQUCB0cmFuc3BvcnQgbGF5ZXIgc29ja2V0cworICogTGludXggUFBQIG92ZXIgRXRoZXJuZXQgKFBQUG9FKSBTb2NrZXQgSW1wbGVtZW50YXRpb24gKFJGQyAyNTE2KSAKKyAqCisgKiBUaGlzIGZpbGUgc3VwcGxpZXMgZGVmaW5pdGlvbnMgcmVxdWlyZWQgYnkgdGhlIFBQUCBvdmVyIEV0aGVybmV0IGRyaXZlcgorICogKHBwcG94LmMpLiAgQWxsIHZlcnNpb24gaW5mb3JtYXRpb24gd3J0IHRoaXMgZmlsZSBpcyBsb2NhdGVkIGluIHBwcG94LmMKKyAqCisgKiBMaWNlbnNlOgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19MSU5VWF9JRl9QUFBPWF9ICisjZGVmaW5lIF9fTElOVVhfSUZfUFBQT1hfSAorCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2luY2x1ZGUgPGxpbnV4L2lmX3BwcG9sMnRwLmg+CisKKy8qIEZvciB1c2VyLXNwYWNlIHByb2dyYW1zIHRvIHBpY2sgdXAgdGhlc2UgZGVmaW5pdGlvbnMKKyAqIHdoaWNoIHRoZXkgd291bGRuJ3QgZ2V0IG90aGVyd2lzZSB3aXRob3V0IGRlZmluaW5nIF9fS0VSTkVMX18KKyAqLworI2lmbmRlZiBBRl9QUFBPWAorI2RlZmluZSBBRl9QUFBPWAkyNAorI2RlZmluZSBQRl9QUFBPWAlBRl9QUFBPWAorI2VuZGlmIC8qICEoQUZfUFBQT1gpICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBQUFBvRSBhZGRyZXNzaW5nIGRlZmluaXRpb24gCisgKi8gCit0eXBlZGVmIF9fYmUxNiBzaWRfdDsKK3N0cnVjdCBwcHBvZV9hZGRyIHsKKwlzaWRfdCAgICAgICAgIHNpZDsgICAgICAgICAgICAgICAgICAgIC8qIFNlc3Npb24gaWRlbnRpZmllciAqLworCXVuc2lnbmVkIGNoYXIgcmVtb3RlW0VUSF9BTEVOXTsgICAgICAgLyogUmVtb3RlIGFkZHJlc3MgKi8KKwljaGFyICAgICAgICAgIGRldltJRk5BTVNJWl07ICAgICAgICAgIC8qIExvY2FsIGRldmljZSB0byB1c2UgKi8KK307IAorIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIFBQVFAgYWRkcmVzc2luZyBkZWZpbml0aW9uCisgKi8KK3N0cnVjdCBwcHRwX2FkZHIgeworCV9fYmUxNgkJY2FsbF9pZDsKKwlzdHJ1Y3QgaW5fYWRkcglzaW5fYWRkcjsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvY29scyBzdXBwb3J0ZWQgYnkgQUZfUFBQT1gKKyAqLworI2RlZmluZSBQWF9QUk9UT19PRSAgICAwIC8qIEN1cnJlbnRseSBqdXN0IFBQUG9FICovCisjZGVmaW5lIFBYX1BST1RPX09MMlRQIDEgLyogTm93IEwyVFAgYWxzbyAqLworI2RlZmluZSBQWF9QUk9UT19QUFRQICAyCisjZGVmaW5lIFBYX01BWF9QUk9UTyAgIDMKKworc3RydWN0IHNvY2thZGRyX3BwcG94IHsKKwlzYV9mYW1pbHlfdCAgICAgc2FfZmFtaWx5OyAgICAgICAgICAgIC8qIGFkZHJlc3MgZmFtaWx5LCBBRl9QUFBPWCAqLworCXVuc2lnbmVkIGludCAgICBzYV9wcm90b2NvbDsgICAgICAgICAgLyogcHJvdG9jb2wgaWRlbnRpZmllciAqLworCXVuaW9uIHsKKwkJc3RydWN0IHBwcG9lX2FkZHIgIHBwcG9lOworCQlzdHJ1Y3QgcHB0cF9hZGRyICAgcHB0cDsKKwl9IHNhX2FkZHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBUaGUgdXNlIG9mIHRoZSBhYm92ZSB1bmlvbiBpc24ndCB2aWFibGUgYmVjYXVzZSB0aGUgc2l6ZSBvZiB0aGlzCisgKiBzdHJ1Y3QgbXVzdCBzdGF5IGZpeGVkIG92ZXIgdGltZSAtLSBhcHBsaWNhdGlvbnMgdXNlIHNpemVvZihzdHJ1Y3QKKyAqIHNvY2thZGRyX3BwcG94KSB0byBmaWxsIGl0LiBXZSB1c2UgYSBwcm90b2NvbCBzcGVjaWZpYyBzb2NrYWRkcgorICogdHlwZSBpbnN0ZWFkLgorICovCitzdHJ1Y3Qgc29ja2FkZHJfcHBwb2wydHAgeworCXNhX2ZhbWlseV90ICAgICBzYV9mYW1pbHk7ICAgICAgLyogYWRkcmVzcyBmYW1pbHksIEFGX1BQUE9YICovCisJdW5zaWduZWQgaW50ICAgIHNhX3Byb3RvY29sOyAgICAvKiBwcm90b2NvbCBpZGVudGlmaWVyICovCisJc3RydWN0IHBwcG9sMnRwX2FkZHIgcHBwb2wydHA7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBUaGUgTDJUUHYzIHByb3RvY29sIGNoYW5nZXMgdHVubmVsIGFuZCBzZXNzaW9uIGlkcyBmcm9tIDE2IHRvIDMyCisgKiBiaXRzLiBTbyB3ZSBuZWVkIGEgZGlmZmVyZW50IHNvY2thZGRyIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IHNvY2thZGRyX3BwcG9sMnRwdjMgeworCXNhX2ZhbWlseV90ICAgICBzYV9mYW1pbHk7ICAgICAgLyogYWRkcmVzcyBmYW1pbHksIEFGX1BQUE9YICovCisJdW5zaWduZWQgaW50ICAgIHNhX3Byb3RvY29sOyAgICAvKiBwcm90b2NvbCBpZGVudGlmaWVyICovCisJc3RydWN0IHBwcG9sMnRwdjNfYWRkciBwcHBvbDJ0cDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBpb2N0bCBpbnRlcmZhY2UgZm9yIGRlZmluaW5nIGZvcndhcmRpbmcgb2YgY29ubmVjdGlvbnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgUFBQT0VJT0NTRldECV9JT1coMHhCMSAsMCwgc2l6ZV90KQorI2RlZmluZSBQUFBPRUlPQ0RGV0QJX0lPKDB4QjEgLDEpCisvKiNkZWZpbmUgUFBQT0VJT0NHRldECV9JT1dSKDB4QjEsMiwgc2l6ZV90KSovCisKKy8qIENvZGVzIHRvIGlkZW50aWZ5IG1lc3NhZ2UgdHlwZXMgKi8KKyNkZWZpbmUgUEFESV9DT0RFCTB4MDkKKyNkZWZpbmUgUEFET19DT0RFCTB4MDcKKyNkZWZpbmUgUEFEUl9DT0RFCTB4MTkKKyNkZWZpbmUgUEFEU19DT0RFCTB4NjUKKyNkZWZpbmUgUEFEVF9DT0RFCTB4YTcKK3N0cnVjdCBwcHBvZV90YWcgeworCV9fYmUxNiB0YWdfdHlwZTsKKwlfX2JlMTYgdGFnX2xlbjsKKwljaGFyIHRhZ19kYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIFRhZyBpZGVudGlmaWVycyAqLworI2RlZmluZSBQVFRfRU9MCQlfX2NwdV90b19iZTE2KDB4MDAwMCkKKyNkZWZpbmUgUFRUX1NSVl9OQU1FCV9fY3B1X3RvX2JlMTYoMHgwMTAxKQorI2RlZmluZSBQVFRfQUNfTkFNRQlfX2NwdV90b19iZTE2KDB4MDEwMikKKyNkZWZpbmUgUFRUX0hPU1RfVU5JUQlfX2NwdV90b19iZTE2KDB4MDEwMykKKyNkZWZpbmUgUFRUX0FDX0NPT0tJRQlfX2NwdV90b19iZTE2KDB4MDEwNCkKKyNkZWZpbmUgUFRUX1ZFTkRPUiAJX19jcHVfdG9fYmUxNigweDAxMDUpCisjZGVmaW5lIFBUVF9SRUxBWV9TSUQJX19jcHVfdG9fYmUxNigweDAxMTApCisjZGVmaW5lIFBUVF9TUlZfRVJSICAgICBfX2NwdV90b19iZTE2KDB4MDIwMSkKKyNkZWZpbmUgUFRUX1NZU19FUlIgIAlfX2NwdV90b19iZTE2KDB4MDIwMikKKyNkZWZpbmUgUFRUX0dFTl9FUlIgIAlfX2NwdV90b19iZTE2KDB4MDIwMykKKworc3RydWN0IHBwcG9lX2hkciB7CisjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisJX191OCB2ZXIgOiA0OworCV9fdTggdHlwZSA6IDQ7CisjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4IHR5cGUgOiA0OworCV9fdTggdmVyIDogNDsKKyNlbHNlCisjZXJyb3IJIlBsZWFzZSBmaXggPGFzbS9ieXRlb3JkZXIuaD4iCisjZW5kaWYKKwlfX3U4IGNvZGU7CisJX19iZTE2IHNpZDsKKwlfX2JlMTYgbGVuZ3RoOworCXN0cnVjdCBwcHBvZV90YWcgdGFnWzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogTGVuZ3RoIG9mIGVudGlyZSBQUFBvRSArIFBQUCBoZWFkZXIgKi8KKyNkZWZpbmUgUFBQT0VfU0VTX0hMRU4JOAorCisKKyNlbmRpZiAvKiAhKF9fTElOVVhfSUZfUFBQT1hfSCkgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl9zbGlwLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfc2xpcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYjRlM2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfc2xpcC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKglTd2Fuc2VhIFVuaXZlcnNpdHkgQ29tcHV0ZXIgU29jaWV0eQlORVQzCisgKgkKKyAqCVRoaXMgZmlsZSBkZWNsYXJlcyB0aGUgY29uc3RhbnRzIG9mIHNwZWNpYWwgdXNlIHdpdGggdGhlIFNMSVAvQ1NMSVAvCisgKglLSVNTIFROQyBkcml2ZXIuCisgKi8KKyAKKyNpZm5kZWYgX19MSU5VWF9TTElQX0gKKyNkZWZpbmUgX19MSU5VWF9TTElQX0gKKworI2RlZmluZQkJU0xfTU9ERV9TTElQCQkwCisjZGVmaW5lCQlTTF9NT0RFX0NTTElQCQkxCisjZGVmaW5lIAlTTF9NT0RFX0tJU1MJCTQKKworI2RlZmluZQkJU0xfT1BUX1NJWEJJVAkJMgorI2RlZmluZQkJU0xfT1BUX0FEQVBUSVZFCQk4CisKKy8qCisgKglWU1YgPSBpb2N0bCBmb3Iga2VlcGFsaXZlICYgb3V0ZmlsbCBpbiBTTElQIGRyaXZlciAKKyAqLworIAorI2RlZmluZSBTSU9DU0tFRVBBTElWRQkoU0lPQ0RFVlBSSVZBVEUpCQkvKiBTZXQga2VlcGFsaXZlIHRpbWVvdXQgaW4gc2VjICovCisjZGVmaW5lIFNJT0NHS0VFUEFMSVZFCShTSU9DREVWUFJJVkFURSsxKQkJLyogR2V0IGtlZXBhbGl2ZSB0aW1lb3V0ICovCisjZGVmaW5lIFNJT0NTT1VURklMTAkoU0lPQ0RFVlBSSVZBVEUrMikJCS8qIFNldCBvdXRmaWxsIHRpbWVvdXQgKi8KKyNkZWZpbmUJU0lPQ0dPVVRGSUxMCShTSU9DREVWUFJJVkFURSszKQkJLyogR2V0IG91dGZpbGwgdGltZW91dCAqLworI2RlZmluZSBTSU9DU0xFQVNFCShTSU9DREVWUFJJVkFURSs0KQkJLyogU2V0ICJsZWFzZWQiIGxpbmUgdHlwZSAqLworI2RlZmluZQlTSU9DR0xFQVNFCShTSU9DREVWUFJJVkFURSs1KQkJLyogR2V0IGxpbmUgdHlwZSAqLworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX3N0cmlwLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfc3RyaXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTI2YTYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX3N0cmlwLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIGlmX3N0cmlwLmggLS0KKyAqCisgKiAgICAgIERlZmluaXRpb25zIGZvciB0aGUgU1RSSVAgaW50ZXJmYWNlCisgKgorICogQ29weXJpZ2h0IDE5OTYgVGhlIEJvYXJkIG9mIFRydXN0ZWVzIG9mIFRoZSBMZWxhbmQgU3RhbmZvcmQKKyAqIEp1bmlvciBVbml2ZXJzaXR5LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKKyAqIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuICBTdGFuZm9yZCBVbml2ZXJzaXR5CisgKiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMKKyAqIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dAorICogZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpZm5kZWYgX19MSU5VWF9TVFJJUF9ICisjZGVmaW5lIF9fTElOVVhfU1RSSVBfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIF9fdTggY1s2XTsKK30gTWV0cmljb21BZGRyZXNzOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl90ci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX3RyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE0YmM5NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl90ci5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJR2xvYmFsIGRlZmluaXRpb25zIGZvciB0aGUgVG9rZW4tUmluZyBJRUVFIDgwMi41IGludGVyZmFjZS4KKyAqCisgKiBWZXJzaW9uOglAKCMpaWZfdHIuaAkwLjAJMDcvMTEvOTQKKyAqCisgKiBBdXRob3I6CUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgorICoJCURvbmFsZCBCZWNrZXIsIDxiZWNrZXJAc3VwZXIub3JnPgorICoJCVBldGVyIERlIFNjaHJpanZlciwgPHN0dWQxMUBjYzQua3VsZXV2ZW4uYWMuYmU+CisgKgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX0xJTlVYX0lGX1RSX0gKKyNkZWZpbmUgX0xJTlVYX0lGX1RSX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgkvKiBGb3IgX19iZTE2ICovCisKKy8qIElFRUUgODAyLjUgVG9rZW4tUmluZyBtYWdpYyBjb25zdGFudHMuICBUaGUgZnJhbWUgc2l6ZXMgb21pdCB0aGUgcHJlYW1ibGUKKyAgIGFuZCBGQ1MvQ1JDIChmcmFtZSBjaGVjayBzZXF1ZW5jZSkuICovCisjZGVmaW5lIFRSX0FMRU4JCTYJCS8qIE9jdGV0cyBpbiBvbmUgdG9rZW4tcmluZyBhZGRyICovCisjZGVmaW5lIFRSX0hMRU4gCShzaXplb2Yoc3RydWN0IHRyaF9oZHIpK3NpemVvZihzdHJ1Y3QgdHJsbGMpKQorI2RlZmluZSBBQwkJMHgxMAorI2RlZmluZSBMTENfRlJBTUUgCTB4NDAKKworLyogTExDIGFuZCBTTkFQIGNvbnN0YW50cyAqLworI2RlZmluZSBFWFRFTkRFRF9TQVAgCTB4QUEKKyNkZWZpbmUgVUlfQ01EICAgICAgIAkweDAzCisKKy8qIFRoaXMgaXMgYW4gVG9rZW4tUmluZyBmcmFtZSBoZWFkZXIuICovCitzdHJ1Y3QgdHJoX2hkciB7CisJX191OCAgYWM7CQkJLyogYWNjZXNzIGNvbnRyb2wgZmllbGQgKi8KKwlfX3U4ICBmYzsJCQkvKiBmcmFtZSBjb250cm9sIGZpZWxkICovCisJX191OCAgZGFkZHJbVFJfQUxFTl07CQkvKiBkZXN0aW5hdGlvbiBhZGRyZXNzICovCisJX191OCAgc2FkZHJbVFJfQUxFTl07CQkvKiBzb3VyY2UgYWRkcmVzcyAqLworCV9fYmUxNiByY2Y7CQkJLyogcm91dGUgY29udHJvbCBmaWVsZCAqLworCV9fYmUxNiByc2VnWzhdOwkJCS8qIHJvdXRpbmcgcmVnaXN0ZXJzICovCit9OworCisKKy8qIFRoaXMgaXMgYW4gVG9rZW4tUmluZyBMTEMgc3RydWN0dXJlICovCitzdHJ1Y3QgdHJsbGMgeworCV9fdTggIGRzYXA7CQkJLyogZGVzdGluYXRpb24gU0FQICovCisJX191OCAgc3NhcDsJCQkvKiBzb3VyY2UgU0FQICovCisJX191OCAgbGxjOwkJCS8qIExMQyBjb250cm9sIGZpZWxkICovCisJX191OCAgcHJvdGlkWzNdOwkJLyogcHJvdG9jb2wgaWQgKi8KKwlfX2JlMTYgZXRoZXJ0eXBlOwkJLyogZXRoZXIgdHlwZSBmaWVsZCAqLworfTsKKworLyogVG9rZW4tUmluZyBzdGF0aXN0aWNzIGNvbGxlY3Rpb24gZGF0YS4gKi8KK3N0cnVjdCB0cl9zdGF0aXN0aWNzIHsKKwl1bnNpZ25lZCBsb25nIHJ4X3BhY2tldHM7ICAgICAgIC8qIHRvdGFsIHBhY2tldHMgcmVjZWl2ZWQJKi8KKwl1bnNpZ25lZCBsb25nIHR4X3BhY2tldHM7CS8qIHRvdGFsIHBhY2tldHMgdHJhbnNtaXR0ZWQJKi8KKwl1bnNpZ25lZCBsb25nIHJ4X2J5dGVzOwkJLyogdG90YWwgYnl0ZXMgcmVjZWl2ZWQgICAJKi8KKwl1bnNpZ25lZCBsb25nIHR4X2J5dGVzOwkJLyogdG90YWwgYnl0ZXMgdHJhbnNtaXR0ZWQJKi8KKwl1bnNpZ25lZCBsb25nIHJ4X2Vycm9yczsJLyogYmFkIHBhY2tldHMgcmVjZWl2ZWQJCSovCisJdW5zaWduZWQgbG9uZyB0eF9lcnJvcnM7CS8qIHBhY2tldCB0cmFuc21pdCBwcm9ibGVtcwkqLworCXVuc2lnbmVkIGxvbmcgcnhfZHJvcHBlZDsJLyogbm8gc3BhY2UgaW4gbGludXggYnVmZmVycwkqLworCXVuc2lnbmVkIGxvbmcgdHhfZHJvcHBlZDsJLyogbm8gc3BhY2UgYXZhaWxhYmxlIGluIGxpbnV4CSovCisJdW5zaWduZWQgbG9uZyBtdWx0aWNhc3Q7CS8qIG11bHRpY2FzdCBwYWNrZXRzIHJlY2VpdmVkCSovCisJdW5zaWduZWQgbG9uZyB0cmFuc21pdF9jb2xsaXNpb247CisKKwkvKiBkZXRhaWxlZCBUb2tlbi1SaW5nIGVycm9ycy4gU2VlIElCTSBUb2tlbi1SaW5nIE5ldHdvcmsKKwkgICBBcmNoaXRlY3R1cmUgZm9yIG1vcmUgaW5mbyAqLworCisJdW5zaWduZWQgbG9uZyBsaW5lX2Vycm9yczsKKwl1bnNpZ25lZCBsb25nIGludGVybmFsX2Vycm9yczsKKwl1bnNpZ25lZCBsb25nIGJ1cnN0X2Vycm9yczsKKwl1bnNpZ25lZCBsb25nIEFfQ19lcnJvcnM7CisJdW5zaWduZWQgbG9uZyBhYm9ydF9kZWxpbWl0ZXJzOworCXVuc2lnbmVkIGxvbmcgbG9zdF9mcmFtZXM7CisJdW5zaWduZWQgbG9uZyByZWN2X2Nvbmdlc3RfY291bnQ7CisJdW5zaWduZWQgbG9uZyBmcmFtZV9jb3BpZWRfZXJyb3JzOworCXVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5X2Vycm9yczsKKwl1bnNpZ25lZCBsb25nIHRva2VuX2Vycm9yczsKKwl1bnNpZ25lZCBsb25nIGR1bW15MTsKK307CisKKy8qIHNvdXJjZSByb3V0aW5nIHN0dWZmICovCisjZGVmaW5lIFRSX1JJSSAJCQkweDgwCisjZGVmaW5lIFRSX1JDRl9ESVJfQklUIAkJMHg4MAorI2RlZmluZSBUUl9SQ0ZfTEVOX01BU0sgCTB4MWYwMAorI2RlZmluZSBUUl9SQ0ZfQlJPQURDQVNUIAkweDgwMDAJLyogYWxsLXJvdXRlcyBicm9hZGNhc3QgKi8KKyNkZWZpbmUgVFJfUkNGX0xJTUlURURfQlJPQURDQVNUIDB4QzAwMAkvKiBzaW5nbGUtcm91dGUgYnJvYWRjYXN0ICovCisjZGVmaW5lIFRSX1JDRl9GUkFNRTJLIAkJMHgyMAorI2RlZmluZSBUUl9SQ0ZfQlJPQURDQVNUX01BU0sgCTB4QzAwMAorI2RlZmluZSBUUl9NQVhSSUZMRU4gCQkxOAorCisjZW5kaWYJLyogX0xJTlVYX0lGX1RSX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl90dW4uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl90dW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDU0YzFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiAgVW5pdmVyc2FsIFRVTi9UQVAgZGV2aWNlIGRyaXZlci4KKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBNYXhpbSBLcmFzbnlhbnNreSA8bWF4X21rQHlhaG9vLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19JRl9UVU5fSAorI2RlZmluZSBfX0lGX1RVTl9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvZmlsdGVyLmg+CisKKy8qIFJlYWQgcXVldWUgc2l6ZSAqLworI2RlZmluZSBUVU5fUkVBRFFfU0laRQk1MDAKKworLyogVFVOIGRldmljZSBmbGFncyAqLworI2RlZmluZSBUVU5fVFVOX0RFViAJMHgwMDAxCQorI2RlZmluZSBUVU5fVEFQX0RFVgkweDAwMDIKKyNkZWZpbmUgVFVOX1RZUEVfTUFTSyAgIDB4MDAwZgorCisjZGVmaW5lIFRVTl9GQVNZTkMJMHgwMDEwCisjZGVmaW5lIFRVTl9OT0NIRUNLU1VNCTB4MDAyMAorI2RlZmluZSBUVU5fTk9fUEkJMHgwMDQwCisjZGVmaW5lIFRVTl9PTkVfUVVFVUUJMHgwMDgwCisjZGVmaW5lIFRVTl9QRVJTSVNUIAkweDAxMDAJCisjZGVmaW5lIFRVTl9WTkVUX0hEUiAJMHgwMjAwCisKKy8qIElvY3RsIGRlZmluZXMgKi8KKyNkZWZpbmUgVFVOU0VUTk9DU1VNICBfSU9XKCdUJywgMjAwLCBpbnQpIAorI2RlZmluZSBUVU5TRVRERUJVRyAgIF9JT1coJ1QnLCAyMDEsIGludCkgCisjZGVmaW5lIFRVTlNFVElGRiAgICAgX0lPVygnVCcsIDIwMiwgaW50KSAKKyNkZWZpbmUgVFVOU0VUUEVSU0lTVCBfSU9XKCdUJywgMjAzLCBpbnQpIAorI2RlZmluZSBUVU5TRVRPV05FUiAgIF9JT1coJ1QnLCAyMDQsIGludCkKKyNkZWZpbmUgVFVOU0VUTElOSyAgICBfSU9XKCdUJywgMjA1LCBpbnQpCisjZGVmaW5lIFRVTlNFVEdST1VQICAgX0lPVygnVCcsIDIwNiwgaW50KQorI2RlZmluZSBUVU5HRVRGRUFUVVJFUyBfSU9SKCdUJywgMjA3LCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIFRVTlNFVE9GRkxPQUQgIF9JT1coJ1QnLCAyMDgsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgVFVOU0VUVFhGSUxURVIgX0lPVygnVCcsIDIwOSwgdW5zaWduZWQgaW50KQorI2RlZmluZSBUVU5HRVRJRkYgICAgICBfSU9SKCdUJywgMjEwLCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIFRVTkdFVFNOREJVRiAgIF9JT1IoJ1QnLCAyMTEsIGludCkKKyNkZWZpbmUgVFVOU0VUU05EQlVGICAgX0lPVygnVCcsIDIxMiwgaW50KQorI2RlZmluZSBUVU5BVFRBQ0hGSUxURVIgX0lPVygnVCcsIDIxMywgc3RydWN0IHNvY2tfZnByb2cpCisjZGVmaW5lIFRVTkRFVEFDSEZJTFRFUiBfSU9XKCdUJywgMjE0LCBzdHJ1Y3Qgc29ja19mcHJvZykKKyNkZWZpbmUgVFVOR0VUVk5FVEhEUlNaIF9JT1IoJ1QnLCAyMTUsIGludCkKKyNkZWZpbmUgVFVOU0VUVk5FVEhEUlNaIF9JT1coJ1QnLCAyMTYsIGludCkKKworLyogVFVOU0VUSUZGIGlmciBmbGFncyAqLworI2RlZmluZSBJRkZfVFVOCQkweDAwMDEKKyNkZWZpbmUgSUZGX1RBUAkJMHgwMDAyCisjZGVmaW5lIElGRl9OT19QSQkweDEwMDAKKyNkZWZpbmUgSUZGX09ORV9RVUVVRQkweDIwMDAKKyNkZWZpbmUgSUZGX1ZORVRfSERSCTB4NDAwMAorI2RlZmluZSBJRkZfVFVOX0VYQ0wJMHg4MDAwCisKKy8qIEZlYXR1cmVzIGZvciBHU08gKFRVTlNFVE9GRkxPQUQpLiAqLworI2RlZmluZSBUVU5fRl9DU1VNCTB4MDEJLyogWW91IGNhbiBoYW5kIG1lIHVuY2hlY2tzdW1tZWQgcGFja2V0cy4gKi8KKyNkZWZpbmUgVFVOX0ZfVFNPNAkweDAyCS8qIEkgY2FuIGhhbmRsZSBUU08gZm9yIElQdjQgcGFja2V0cyAqLworI2RlZmluZSBUVU5fRl9UU082CTB4MDQJLyogSSBjYW4gaGFuZGxlIFRTTyBmb3IgSVB2NiBwYWNrZXRzICovCisjZGVmaW5lIFRVTl9GX1RTT19FQ04JMHgwOAkvKiBJIGNhbiBoYW5kbGUgVFNPIHdpdGggRUNOIGJpdHMuICovCisjZGVmaW5lIFRVTl9GX1VGTwkweDEwCS8qIEkgY2FuIGhhbmRsZSBVRk8gcGFja2V0cyAqLworCisvKiBQcm90b2NvbCBpbmZvIHByZXBlbmRlZCB0byB0aGUgcGFja2V0cyAod2hlbiBJRkZfTk9fUEkgaXMgbm90IHNldCkgKi8KKyNkZWZpbmUgVFVOX1BLVF9TVFJJUAkweDAwMDEKK3N0cnVjdCB0dW5fcGkgeworCV9fdTE2ICBmbGFnczsKKwlfX2JlMTYgcHJvdG87Cit9OworCisvKgorICogRmlsdGVyIHNwZWMgKHVzZWQgZm9yIFNFVFhYRklMVEVSIGlvY3RscykKKyAqIFRoaXMgc3R1ZmYgaXMgYXBwbGljYWJsZSBvbmx5IHRvIHRoZSBUQVAgKEV0aGVybmV0KSBkZXZpY2VzLgorICogSWYgdGhlIGNvdW50IGlzIHplcm8gdGhlIGZpbHRlciBpcyBkaXNhYmxlZCBhbmQgdGhlIGRyaXZlciBhY2NlcHRzCisgKiBhbGwgcGFja2V0cyAocHJvbWlzYyBtb2RlKS4KKyAqIElmIHRoZSBmaWx0ZXIgaXMgZW5hYmxlZCBpbiBvcmRlciB0byBhY2NlcHQgYnJvYWRjYXN0IHBhY2tldHMKKyAqIGJyb2FkY2FzdCBhZGRyIG11c3QgYmUgZXhwbGljaXRseSBpbmNsdWRlZCBpbiB0aGUgYWRkciBsaXN0LgorICovCisjZGVmaW5lIFRVTl9GTFRfQUxMTVVMVEkgMHgwMDAxIC8qIEFjY2VwdCBhbGwgbXVsdGljYXN0IHBhY2tldHMgKi8KK3N0cnVjdCB0dW5fZmlsdGVyIHsKKwlfX3UxNiAgZmxhZ3M7IC8qIFRVTl9GTFRfIGZsYWdzIHNlZSBhYm92ZSAqLworCV9fdTE2ICBjb3VudDsgLyogTnVtYmVyIG9mIGFkZHJlc3NlcyAqLworCV9fdTggICBhZGRyWzBdW0VUSF9BTEVOXTsKK307CisKKyNlbmRpZiAvKiBfX0lGX1RVTl9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfdHVubmVsLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWZfdHVubmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM4MTliOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl90dW5uZWwuaApAQCAtMCwwICsxLDc5IEBACisjaWZuZGVmIF9JRl9UVU5ORUxfSF8KKyNkZWZpbmUgX0lGX1RVTk5FTF9IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKworI2RlZmluZSBTSU9DR0VUVFVOTkVMICAgKFNJT0NERVZQUklWQVRFICsgMCkKKyNkZWZpbmUgU0lPQ0FERFRVTk5FTCAgIChTSU9DREVWUFJJVkFURSArIDEpCisjZGVmaW5lIFNJT0NERUxUVU5ORUwgICAoU0lPQ0RFVlBSSVZBVEUgKyAyKQorI2RlZmluZSBTSU9DQ0hHVFVOTkVMICAgKFNJT0NERVZQUklWQVRFICsgMykKKyNkZWZpbmUgU0lPQ0dFVFBSTCAgICAgIChTSU9DREVWUFJJVkFURSArIDQpCisjZGVmaW5lIFNJT0NBRERQUkwgICAgICAoU0lPQ0RFVlBSSVZBVEUgKyA1KQorI2RlZmluZSBTSU9DREVMUFJMICAgICAgKFNJT0NERVZQUklWQVRFICsgNikKKyNkZWZpbmUgU0lPQ0NIR1BSTCAgICAgIChTSU9DREVWUFJJVkFURSArIDcpCisjZGVmaW5lIFNJT0NHRVQ2UkQgICAgICAoU0lPQ0RFVlBSSVZBVEUgKyA4KQorI2RlZmluZSBTSU9DQURENlJEICAgICAgKFNJT0NERVZQUklWQVRFICsgOSkKKyNkZWZpbmUgU0lPQ0RFTDZSRCAgICAgIChTSU9DREVWUFJJVkFURSArIDEwKQorI2RlZmluZSBTSU9DQ0hHNlJEICAgICAgKFNJT0NERVZQUklWQVRFICsgMTEpCisKKyNkZWZpbmUgR1JFX0NTVU0JX19jcHVfdG9fYmUxNigweDgwMDApCisjZGVmaW5lIEdSRV9ST1VUSU5HCV9fY3B1X3RvX2JlMTYoMHg0MDAwKQorI2RlZmluZSBHUkVfS0VZCQlfX2NwdV90b19iZTE2KDB4MjAwMCkKKyNkZWZpbmUgR1JFX1NFUQkJX19jcHVfdG9fYmUxNigweDEwMDApCisjZGVmaW5lIEdSRV9TVFJJQ1QJX19jcHVfdG9fYmUxNigweDA4MDApCisjZGVmaW5lIEdSRV9SRUMJCV9fY3B1X3RvX2JlMTYoMHgwNzAwKQorI2RlZmluZSBHUkVfRkxBR1MJX19jcHVfdG9fYmUxNigweDAwRjgpCisjZGVmaW5lIEdSRV9WRVJTSU9OCV9fY3B1X3RvX2JlMTYoMHgwMDA3KQorCitzdHJ1Y3QgaXBfdHVubmVsX3Bhcm0geworCWNoYXIJCQluYW1lW0lGTkFNU0laXTsKKwlpbnQJCQlsaW5rOworCV9fYmUxNgkJCWlfZmxhZ3M7CisJX19iZTE2CQkJb19mbGFnczsKKwlfX2JlMzIJCQlpX2tleTsKKwlfX2JlMzIJCQlvX2tleTsKKwlzdHJ1Y3QgaXBoZHIJCWlwaDsKK307CisKKy8qIFNJVC1tb2RlIGlfZmxhZ3MgKi8KKyNkZWZpbmUJU0lUX0lTQVRBUAkweDAwMDEKKworc3RydWN0IGlwX3R1bm5lbF9wcmwgeworCV9fYmUzMgkJCWFkZHI7CisJX191MTYJCQlmbGFnczsKKwlfX3UxNgkJCV9fcmVzZXJ2ZWQ7CisJX191MzIJCQlkYXRhbGVuOworCV9fdTMyCQkJX19yZXNlcnZlZDI7CisJLyogZGF0YSBmb2xsb3dzICovCit9OworCisvKiBQUkwgZmxhZ3MgKi8KKyNkZWZpbmUJUFJMX0RFRkFVTFQJCTB4MDAwMQorCitzdHJ1Y3QgaXBfdHVubmVsXzZyZCB7CisJc3RydWN0IGluNl9hZGRyCQlwcmVmaXg7CisJX19iZTMyCQkJcmVsYXlfcHJlZml4OworCV9fdTE2CQkJcHJlZml4bGVuOworCV9fdTE2CQkJcmVsYXlfcHJlZml4bGVuOworfTsKKworZW51bSB7CisJSUZMQV9HUkVfVU5TUEVDLAorCUlGTEFfR1JFX0xJTkssCisJSUZMQV9HUkVfSUZMQUdTLAorCUlGTEFfR1JFX09GTEFHUywKKwlJRkxBX0dSRV9JS0VZLAorCUlGTEFfR1JFX09LRVksCisJSUZMQV9HUkVfTE9DQUwsCisJSUZMQV9HUkVfUkVNT1RFLAorCUlGTEFfR1JFX1RUTCwKKwlJRkxBX0dSRV9UT1MsCisJSUZMQV9HUkVfUE1UVURJU0MsCisJX19JRkxBX0dSRV9NQVgsCit9OworCisjZGVmaW5lIElGTEFfR1JFX01BWAkoX19JRkxBX0dSRV9NQVggLSAxKQorCisjZW5kaWYgLyogX0lGX1RVTk5FTF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl92bGFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI5YjM1NAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl92bGFuLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIFZMQU4JCUFuIGltcGxlbWVudGF0aW9uIG9mIDgwMi4xUSBWTEFOIHRhZ2dpbmcuCisgKgorICogQXV0aG9yczoJQmVuIEdyZWVhciA8Z3JlZWFyYkBjYW5kZWxhdGVjaC5jb20+CisgKgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX0lGX1ZMQU5fSF8KKyNkZWZpbmUgX0xJTlVYX0lGX1ZMQU5fSF8KKworCisvKiBWTEFOIElPQ1RMcyBhcmUgZm91bmQgaW4gc29ja2lvcy5oICovCisKKy8qIFBhc3NlZCBpbiB2bGFuX2lvY3RsX2FyZ3Mgc3RydWN0dXJlIHRvIGRldGVybWluZSBiZWhhdmlvdXIuICovCitlbnVtIHZsYW5faW9jdGxfY21kcyB7CisJQUREX1ZMQU5fQ01ELAorCURFTF9WTEFOX0NNRCwKKwlTRVRfVkxBTl9JTkdSRVNTX1BSSU9SSVRZX0NNRCwKKwlTRVRfVkxBTl9FR1JFU1NfUFJJT1JJVFlfQ01ELAorCUdFVF9WTEFOX0lOR1JFU1NfUFJJT1JJVFlfQ01ELAorCUdFVF9WTEFOX0VHUkVTU19QUklPUklUWV9DTUQsCisJU0VUX1ZMQU5fTkFNRV9UWVBFX0NNRCwKKwlTRVRfVkxBTl9GTEFHX0NNRCwKKwlHRVRfVkxBTl9SRUFMREVWX05BTUVfQ01ELCAvKiBJZiB0aGlzIHdvcmtzLCB5b3Uga25vdyBpdCdzIGEgVkxBTiBkZXZpY2UsIGJ0dyAqLworCUdFVF9WTEFOX1ZJRF9DTUQgLyogR2V0IHRoZSBWSUQgb2YgdGhpcyBWTEFOIChzcGVjaWZpZWQgYnkgbmFtZSkgKi8KK307CisKK2VudW0gdmxhbl9mbGFncyB7CisJVkxBTl9GTEFHX1JFT1JERVJfSERSCT0gMHgxLAorCVZMQU5fRkxBR19HVlJQCQk9IDB4MiwKKwlWTEFOX0ZMQUdfTE9PU0VfQklORElORwk9IDB4NCwKK307CisKK2VudW0gdmxhbl9uYW1lX3R5cGVzIHsKKwlWTEFOX05BTUVfVFlQRV9QTFVTX1ZJRCwgLyogTmFtZSB3aWxsIGxvb2sgbGlrZTogIHZsYW4wMDA1ICovCisJVkxBTl9OQU1FX1RZUEVfUkFXX1BMVVNfVklELCAvKiBuYW1lIHdpbGwgbG9vayBsaWtlOiAgZXRoMS4wMDA1ICovCisJVkxBTl9OQU1FX1RZUEVfUExVU19WSURfTk9fUEFELCAvKiBOYW1lIHdpbGwgbG9vayBsaWtlOiAgdmxhbjUgKi8KKwlWTEFOX05BTUVfVFlQRV9SQVdfUExVU19WSURfTk9fUEFELCAvKiBOYW1lIHdpbGwgbG9vayBsaWtlOiAgZXRoMC41ICovCisJVkxBTl9OQU1FX1RZUEVfSElHSEVTVAorfTsKKworc3RydWN0IHZsYW5faW9jdGxfYXJncyB7CisJaW50IGNtZDsgLyogU2hvdWxkIGJlIG9uZSBvZiB0aGUgdmxhbl9pb2N0bF9jbWRzIGVudW0gYWJvdmUuICovCisJY2hhciBkZXZpY2UxWzI0XTsKKworICAgICAgICB1bmlvbiB7CisJCWNoYXIgZGV2aWNlMlsyNF07CisJCWludCBWSUQ7CisJCXVuc2lnbmVkIGludCBza2JfcHJpb3JpdHk7CisJCXVuc2lnbmVkIGludCBuYW1lX3R5cGU7CisJCXVuc2lnbmVkIGludCBiaW5kX3R5cGU7CisJCXVuc2lnbmVkIGludCBmbGFnOyAvKiBNYXRjaGVzIHZsYW5fZGV2X2luZm8gZmxhZ3MgKi8KKyAgICAgICAgfSB1OworCisJc2hvcnQgdmxhbl9xb3M7ICAgCit9OworCisjZW5kaWYgLyogIShfTElOVVhfSUZfVkxBTl9IXykgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl94MjUuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZl94MjUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTc3NjVmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lmX3gyNS5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiAgTGludXggWC4yNSBwYWNrZXQgdG8gZGV2aWNlIGludGVyZmFjZQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfSUZfWDI1X0gKKyNkZWZpbmUgX0lGX1gyNV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveDI1LWlmYWNlLnR4dCAqLworI2RlZmluZSBYMjVfSUZBQ0VfREFUQQkJMHgwMAorI2RlZmluZSBYMjVfSUZBQ0VfQ09OTkVDVAkweDAxCisjZGVmaW5lIFgyNV9JRkFDRV9ESVNDT05ORUNUCTB4MDIKKyNkZWZpbmUgWDI1X0lGQUNFX1BBUkFNUwkweDAzCisKKyNlbmRpZiAvKiBfSUZfWDI1X0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pZ21wLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWdtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMmYxMzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaWdtcC5oCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICoJTGludXggTkVUMzoJSW50ZXJuZXQgR3JvdXAgTWFuYWdlbWVudCBQcm90b2NvbCAgW0lHTVBdCisgKgorICoJQXV0aG9yczoKKyAqCQlBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgorICoKKyAqCUV4dGVuZGVkIHRvIHRhbGsgdGhlIEJTRCBleHRlbmRlZCBJR01QIHByb3RvY29sIG9mIG1yb3V0ZWQgMy42CisgKgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfTElOVVhfSUdNUF9ICisjZGVmaW5lIF9MSU5VWF9JR01QX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisvKgorICoJSUdNUCBwcm90b2NvbCBzdHJ1Y3R1cmVzCisgKi8KKworLyoKKyAqCUhlYWRlciBpbiBvbiBjYWJsZSBmb3JtYXQKKyAqLworCitzdHJ1Y3QgaWdtcGhkciB7CisJX191OCB0eXBlOworCV9fdTggY29kZTsJCS8qIEZvciBuZXdlciBJR01QICovCisJX19zdW0xNiBjc3VtOworCV9fYmUzMiBncm91cDsKK307CisKKy8qIFYzIGdyb3VwIHJlY29yZCB0eXBlcyBbZ3JlY190eXBlXSAqLworI2RlZmluZSBJR01QVjNfTU9ERV9JU19JTkNMVURFCQkxCisjZGVmaW5lIElHTVBWM19NT0RFX0lTX0VYQ0xVREUJCTIKKyNkZWZpbmUgSUdNUFYzX0NIQU5HRV9UT19JTkNMVURFCTMKKyNkZWZpbmUgSUdNUFYzX0NIQU5HRV9UT19FWENMVURFCTQKKyNkZWZpbmUgSUdNUFYzX0FMTE9XX05FV19TT1VSQ0VTCTUKKyNkZWZpbmUgSUdNUFYzX0JMT0NLX09MRF9TT1VSQ0VTCTYKKworc3RydWN0IGlnbXB2M19ncmVjIHsKKwlfX3U4CWdyZWNfdHlwZTsKKwlfX3U4CWdyZWNfYXV4d29yZHM7CisJX19iZTE2CWdyZWNfbnNyY3M7CisJX19iZTMyCWdyZWNfbWNhOworCV9fYmUzMglncmVjX3NyY1swXTsKK307CisKK3N0cnVjdCBpZ21wdjNfcmVwb3J0IHsKKwlfX3U4IHR5cGU7CisJX191OCByZXN2MTsKKwlfX2JlMTYgY3N1bTsKKwlfX2JlMTYgcmVzdjI7CisJX19iZTE2IG5ncmVjOworCXN0cnVjdCBpZ21wdjNfZ3JlYyBncmVjWzBdOworfTsKKworc3RydWN0IGlnbXB2M19xdWVyeSB7CisJX191OCB0eXBlOworCV9fdTggY29kZTsKKwlfX2JlMTYgY3N1bTsKKwlfX2JlMzIgZ3JvdXA7CisjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisJX191OCBxcnY6MywKKwkgICAgIHN1cHByZXNzOjEsCisJICAgICByZXN2OjQ7CisjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4IHJlc3Y6NCwKKwkgICAgIHN1cHByZXNzOjEsCisJICAgICBxcnY6MzsKKyNlbHNlCisjZXJyb3IgIlBsZWFzZSBmaXggPGFzbS9ieXRlb3JkZXIuaD4iCisjZW5kaWYKKwlfX3U4IHFxaWM7CisJX19iZTE2IG5zcmNzOworCV9fYmUzMiBzcmNzWzBdOworfTsKKworI2RlZmluZSBJR01QX0hPU1RfTUVNQkVSU0hJUF9RVUVSWQkweDExCS8qIEZyb20gUkZDMTExMiAqLworI2RlZmluZSBJR01QX0hPU1RfTUVNQkVSU0hJUF9SRVBPUlQJMHgxMgkvKiBEaXR0byAqLworI2RlZmluZSBJR01QX0RWTVJQCQkJMHgxMwkvKiBEVk1SUCByb3V0aW5nICovCisjZGVmaW5lIElHTVBfUElNCQkJMHgxNAkvKiBQSU0gcm91dGluZyAqLworI2RlZmluZSBJR01QX1RSQUNFCQkJMHgxNQorI2RlZmluZSBJR01QVjJfSE9TVF9NRU1CRVJTSElQX1JFUE9SVAkweDE2CS8qIFYyIHZlcnNpb24gb2YgMHgxMSAqLworI2RlZmluZSBJR01QX0hPU1RfTEVBVkVfTUVTU0FHRSAJMHgxNworI2RlZmluZSBJR01QVjNfSE9TVF9NRU1CRVJTSElQX1JFUE9SVAkweDIyCS8qIFYzIHZlcnNpb24gb2YgMHgxMSAqLworCisjZGVmaW5lIElHTVBfTVRSQUNFX1JFU1AJCTB4MWUKKyNkZWZpbmUgSUdNUF9NVFJBQ0UJCQkweDFmCisKKworLyoKKyAqCVVzZSB0aGUgQlNEIG5hbWVzIGZvciB0aGVzZSBmb3IgY29tcGF0aWJpbGl0eQorICovCisKKyNkZWZpbmUgSUdNUF9ERUxBWUlOR19NRU1CRVIJCTB4MDEKKyNkZWZpbmUgSUdNUF9JRExFX01FTUJFUgkJMHgwMgorI2RlZmluZSBJR01QX0xBWllfTUVNQkVSCQkweDAzCisjZGVmaW5lIElHTVBfU0xFRVBJTkdfTUVNQkVSCQkweDA0CisjZGVmaW5lIElHTVBfQVdBS0VOSU5HX01FTUJFUgkJMHgwNQorCisjZGVmaW5lIElHTVBfTUlOTEVOCQkJOAorCisjZGVmaW5lIElHTVBfTUFYX0hPU1RfUkVQT1JUX0RFTEFZCTEwCS8qIG1heCBkZWxheSBmb3IgcmVzcG9uc2UgdG8gKi8KKwkJCQkJCS8qIHF1ZXJ5IChpbiBzZWNvbmRzKQkqLworCisjZGVmaW5lIElHTVBfVElNRVJfU0NBTEUJCTEwCS8qIGRlbm90ZXMgdGhhdCB0aGUgaWdtcGhkci0+dGltZXIgZmllbGQgKi8KKwkJCQkJCS8qIHNwZWNpZmllcyB0aW1lIGluIDEwdGggb2Ygc2Vjb25kcwkgKi8KKworI2RlZmluZSBJR01QX0FHRV9USFJFU0hPTEQJCTQwMAkvKiBJZiB0aGlzIGhvc3QgZG9uJ3QgaGVhciBhbnkgSUdNUCBWMQkqLworCQkJCQkJLyogbWVzc2FnZSBpbiB0aGlzIHBlcmlvZCBvZiB0aW1lLAkqLworCQkJCQkJLyogcmV2ZXJ0IHRvIElHTVAgdjIgcm91dGVyLgkJKi8KKworI2RlZmluZSBJR01QX0FMTF9IT1NUUwkJaHRvbmwoMHhFMDAwMDAwMUwpCisjZGVmaW5lIElHTVBfQUxMX1JPVVRFUiAJaHRvbmwoMHhFMDAwMDAwMkwpCisjZGVmaW5lIElHTVBWM19BTExfTUNSCSAJaHRvbmwoMHhFMDAwMDAxNkwpCisjZGVmaW5lIElHTVBfTE9DQUxfR1JPVVAJaHRvbmwoMHhFMDAwMDAwMEwpCisjZGVmaW5lIElHTVBfTE9DQUxfR1JPVVBfTUFTSwlodG9ubCgweEZGRkZGRjAwTCkKKworLyoKKyAqIHN0cnVjdCBmb3Iga2VlcGluZyB0aGUgbXVsdGljYXN0IGxpc3QgaW4KKyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pbi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI2MzE1ZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pbi5oCkBAIC0wLDAgKzEsMjUyIEBACisvKgorICogSU5FVAkJQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFRDUC9JUCBwcm90b2NvbCBzdWl0ZSBmb3IgdGhlIExJTlVYCisgKgkJb3BlcmF0aW5nIHN5c3RlbS4gIElORVQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlICBCU0QgU29ja2V0CisgKgkJaW50ZXJmYWNlIGFzIHRoZSBtZWFucyBvZiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHVzZXIgbGV2ZWwuCisgKgorICoJCURlZmluaXRpb25zIG9mIHRoZSBJbnRlcm5ldCBQcm90b2NvbC4KKyAqCisgKiBWZXJzaW9uOglAKCMpaW4uaAkxLjAuMQkwNC8yMS85MworICoKKyAqIEF1dGhvcnM6CU9yaWdpbmFsIHRha2VuIGZyb20gdGhlIEdOVSBQcm9qZWN0IDxuZXRpbmV0L2luLmg+IGZpbGUuCisgKgkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CisgKgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX0xJTlVYX0lOX0gKKyNkZWZpbmUgX0xJTlVYX0lOX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisKKy8qIFN0YW5kYXJkIHdlbGwtZGVmaW5lZCBJUCBwcm90b2NvbHMuICAqLworZW51bSB7CisgIElQUFJPVE9fSVAgPSAwLAkJLyogRHVtbXkgcHJvdG9jb2wgZm9yIFRDUAkJKi8KKyAgSVBQUk9UT19JQ01QID0gMSwJCS8qIEludGVybmV0IENvbnRyb2wgTWVzc2FnZSBQcm90b2NvbAkqLworICBJUFBST1RPX0lHTVAgPSAyLAkJLyogSW50ZXJuZXQgR3JvdXAgTWFuYWdlbWVudCBQcm90b2NvbAkqLworICBJUFBST1RPX0lQSVAgPSA0LAkJLyogSVBJUCB0dW5uZWxzIChvbGRlciBLQTlRIHR1bm5lbHMgdXNlIDk0KSAqLworICBJUFBST1RPX1RDUCA9IDYsCQkvKiBUcmFuc21pc3Npb24gQ29udHJvbCBQcm90b2NvbAkqLworICBJUFBST1RPX0VHUCA9IDgsCQkvKiBFeHRlcmlvciBHYXRld2F5IFByb3RvY29sCQkqLworICBJUFBST1RPX1BVUCA9IDEyLAkJLyogUFVQIHByb3RvY29sCQkJCSovCisgIElQUFJPVE9fVURQID0gMTcsCQkvKiBVc2VyIERhdGFncmFtIFByb3RvY29sCQkqLworICBJUFBST1RPX0lEUCA9IDIyLAkJLyogWE5TIElEUCBwcm90b2NvbAkJCSovCisgIElQUFJPVE9fRENDUCA9IDMzLAkJLyogRGF0YWdyYW0gQ29uZ2VzdGlvbiBDb250cm9sIFByb3RvY29sICovCisgIElQUFJPVE9fUlNWUCA9IDQ2LAkJLyogUlNWUCBwcm90b2NvbAkJCSovCisgIElQUFJPVE9fR1JFID0gNDcsCQkvKiBDaXNjbyBHUkUgdHVubmVscyAocmZjIDE3MDEsMTcwMikJKi8KKworICBJUFBST1RPX0lQVjYJID0gNDEsCQkvKiBJUHY2LWluLUlQdjQgdHVubmVsbGluZwkJKi8KKworICBJUFBST1RPX0VTUCA9IDUwLCAgICAgICAgICAgIC8qIEVuY2Fwc3VsYXRpb24gU2VjdXJpdHkgUGF5bG9hZCBwcm90b2NvbCAqLworICBJUFBST1RPX0FIID0gNTEsICAgICAgICAgICAgIC8qIEF1dGhlbnRpY2F0aW9uIEhlYWRlciBwcm90b2NvbCAgICAgICAqLworICBJUFBST1RPX0JFRVRQSCA9IDk0LAkgICAgICAgLyogSVAgb3B0aW9uIHBzZXVkbyBoZWFkZXIgZm9yIEJFRVQgKi8KKyAgSVBQUk9UT19QSU0gICAgPSAxMDMsCQkvKiBQcm90b2NvbCBJbmRlcGVuZGVudCBNdWx0aWNhc3QJKi8KKworICBJUFBST1RPX0NPTVAgICA9IDEwOCwgICAgICAgICAgICAgICAgLyogQ29tcHJlc3Npb24gSGVhZGVyIHByb3RvY29sICovCisgIElQUFJPVE9fU0NUUCAgID0gMTMyLAkJLyogU3RyZWFtIENvbnRyb2wgVHJhbnNwb3J0IFByb3RvY29sCSovCisgIElQUFJPVE9fVURQTElURSA9IDEzNiwJLyogVURQLUxpdGUgKFJGQyAzODI4KQkJCSovCisKKyAgSVBQUk9UT19SQVcJID0gMjU1LAkJLyogUmF3IElQIHBhY2tldHMJCQkqLworICBJUFBST1RPX01BWAorfTsKKworCisvKiBJbnRlcm5ldCBhZGRyZXNzLiAqLworc3RydWN0IGluX2FkZHIgeworCV9fYmUzMglzX2FkZHI7Cit9OworCisjZGVmaW5lIElQX1RPUwkJMQorI2RlZmluZSBJUF9UVEwJCTIKKyNkZWZpbmUgSVBfSERSSU5DTAkzCisjZGVmaW5lIElQX09QVElPTlMJNAorI2RlZmluZSBJUF9ST1VURVJfQUxFUlQJNQorI2RlZmluZSBJUF9SRUNWT1BUUwk2CisjZGVmaW5lIElQX1JFVE9QVFMJNworI2RlZmluZSBJUF9QS1RJTkZPCTgKKyNkZWZpbmUgSVBfUEtUT1BUSU9OUwk5CisjZGVmaW5lIElQX01UVV9ESVNDT1ZFUgkxMAorI2RlZmluZSBJUF9SRUNWRVJSCTExCisjZGVmaW5lIElQX1JFQ1ZUVEwJMTIKKyNkZWZpbmUJSVBfUkVDVlRPUwkxMworI2RlZmluZSBJUF9NVFUJCTE0CisjZGVmaW5lIElQX0ZSRUVCSU5ECTE1CisjZGVmaW5lIElQX0lQU0VDX1BPTElDWQkxNgorI2RlZmluZSBJUF9YRlJNX1BPTElDWQkxNworI2RlZmluZSBJUF9QQVNTU0VDCTE4CisjZGVmaW5lIElQX1RSQU5TUEFSRU5UCTE5CisKKy8qIEJTRCBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIElQX1JFQ1ZSRVRPUFRTCUlQX1JFVE9QVFMKKworLyogVFByb3h5IG9yaWdpbmFsIGFkZHJlc3NlcyAqLworI2RlZmluZSBJUF9PUklHRFNUQUREUiAgICAgICAyMAorI2RlZmluZSBJUF9SRUNWT1JJR0RTVEFERFIgICBJUF9PUklHRFNUQUREUgorCisjZGVmaW5lIElQX01JTlRUTCAgICAgICAyMQorI2RlZmluZSBJUF9OT0RFRlJBRyAgICAgMjIKKworLyogSVBfTVRVX0RJU0NPVkVSIHZhbHVlcyAqLworI2RlZmluZSBJUF9QTVRVRElTQ19ET05UCQkwCS8qIE5ldmVyIHNlbmQgREYgZnJhbWVzICovCisjZGVmaW5lIElQX1BNVFVESVNDX1dBTlQJCTEJLyogVXNlIHBlciByb3V0ZSBoaW50cwkqLworI2RlZmluZSBJUF9QTVRVRElTQ19ETwkJCTIJLyogQWx3YXlzIERGCQkqLworI2RlZmluZSBJUF9QTVRVRElTQ19QUk9CRQkJMyAgICAgICAvKiBJZ25vcmUgZHN0IHBtdHUgICAgICAqLworCisjZGVmaW5lIElQX01VTFRJQ0FTVF9JRgkJCTMyCisjZGVmaW5lIElQX01VTFRJQ0FTVF9UVEwgCQkzMworI2RlZmluZSBJUF9NVUxUSUNBU1RfTE9PUCAJCTM0CisjZGVmaW5lIElQX0FERF9NRU1CRVJTSElQCQkzNQorI2RlZmluZSBJUF9EUk9QX01FTUJFUlNISVAJCTM2CisjZGVmaW5lIElQX1VOQkxPQ0tfU09VUkNFCQkzNworI2RlZmluZSBJUF9CTE9DS19TT1VSQ0UJCQkzOAorI2RlZmluZSBJUF9BRERfU09VUkNFX01FTUJFUlNISVAJMzkKKyNkZWZpbmUgSVBfRFJPUF9TT1VSQ0VfTUVNQkVSU0hJUAk0MAorI2RlZmluZSBJUF9NU0ZJTFRFUgkJCTQxCisjZGVmaW5lIE1DQVNUX0pPSU5fR1JPVVAJCTQyCisjZGVmaW5lIE1DQVNUX0JMT0NLX1NPVVJDRQkJNDMKKyNkZWZpbmUgTUNBU1RfVU5CTE9DS19TT1VSQ0UJCTQ0CisjZGVmaW5lIE1DQVNUX0xFQVZFX0dST1VQCQk0NQorI2RlZmluZSBNQ0FTVF9KT0lOX1NPVVJDRV9HUk9VUAkJNDYKKyNkZWZpbmUgTUNBU1RfTEVBVkVfU09VUkNFX0dST1VQCTQ3CisjZGVmaW5lIE1DQVNUX01TRklMVEVSCQkJNDgKKyNkZWZpbmUgSVBfTVVMVElDQVNUX0FMTAkJNDkKKworI2RlZmluZSBNQ0FTVF9FWENMVURFCTAKKyNkZWZpbmUgTUNBU1RfSU5DTFVERQkxCisKKy8qIFRoZXNlIG5lZWQgdG8gYXBwZWFyIHNvbWV3aGVyZSBhcm91bmQgaGVyZSAqLworI2RlZmluZSBJUF9ERUZBVUxUX01VTFRJQ0FTVF9UVEwgICAgICAgIDEKKyNkZWZpbmUgSVBfREVGQVVMVF9NVUxUSUNBU1RfTE9PUCAgICAgICAxCisKKy8qIFJlcXVlc3Qgc3RydWN0IGZvciBtdWx0aWNhc3Qgc29ja2V0IG9wcyAqLworCitzdHJ1Y3QgaXBfbXJlcSAgeworCXN0cnVjdCBpbl9hZGRyIGltcl9tdWx0aWFkZHI7CS8qIElQIG11bHRpY2FzdCBhZGRyZXNzIG9mIGdyb3VwICovCisJc3RydWN0IGluX2FkZHIgaW1yX2ludGVyZmFjZTsJLyogbG9jYWwgSVAgYWRkcmVzcyBvZiBpbnRlcmZhY2UgKi8KK307CisKK3N0cnVjdCBpcF9tcmVxbiB7CisJc3RydWN0IGluX2FkZHIJaW1yX211bHRpYWRkcjsJCS8qIElQIG11bHRpY2FzdCBhZGRyZXNzIG9mIGdyb3VwICovCisJc3RydWN0IGluX2FkZHIJaW1yX2FkZHJlc3M7CQkvKiBsb2NhbCBJUCBhZGRyZXNzIG9mIGludGVyZmFjZSAqLworCWludAkJaW1yX2lmaW5kZXg7CQkvKiBJbnRlcmZhY2UgaW5kZXggKi8KK307CisKK3N0cnVjdCBpcF9tcmVxX3NvdXJjZSB7CisJX19iZTMyCQlpbXJfbXVsdGlhZGRyOworCV9fYmUzMgkJaW1yX2ludGVyZmFjZTsKKwlfX2JlMzIJCWltcl9zb3VyY2VhZGRyOworfTsKKworc3RydWN0IGlwX21zZmlsdGVyIHsKKwlfX2JlMzIJCWltc2ZfbXVsdGlhZGRyOworCV9fYmUzMgkJaW1zZl9pbnRlcmZhY2U7CisJX191MzIJCWltc2ZfZm1vZGU7CisJX191MzIJCWltc2ZfbnVtc3JjOworCV9fYmUzMgkJaW1zZl9zbGlzdFsxXTsKK307CisKKyNkZWZpbmUgSVBfTVNGSUxURVJfU0laRShudW1zcmMpIFwKKwkoc2l6ZW9mKHN0cnVjdCBpcF9tc2ZpbHRlcikgLSBzaXplb2YoX191MzIpIFwKKwkrIChudW1zcmMpICogc2l6ZW9mKF9fdTMyKSkKKworc3RydWN0IGdyb3VwX3JlcSB7CisJX191MzIJCQkJIGdyX2ludGVyZmFjZTsJLyogaW50ZXJmYWNlIGluZGV4ICovCisJc3RydWN0IF9fa2VybmVsX3NvY2thZGRyX3N0b3JhZ2UgZ3JfZ3JvdXA7CS8qIGdyb3VwIGFkZHJlc3MgKi8KK307CisKK3N0cnVjdCBncm91cF9zb3VyY2VfcmVxIHsKKwlfX3UzMgkJCQkgZ3NyX2ludGVyZmFjZTsJLyogaW50ZXJmYWNlIGluZGV4ICovCisJc3RydWN0IF9fa2VybmVsX3NvY2thZGRyX3N0b3JhZ2UgZ3NyX2dyb3VwOwkvKiBncm91cCBhZGRyZXNzICovCisJc3RydWN0IF9fa2VybmVsX3NvY2thZGRyX3N0b3JhZ2UgZ3NyX3NvdXJjZTsJLyogc291cmNlIGFkZHJlc3MgKi8KK307CisKK3N0cnVjdCBncm91cF9maWx0ZXIgeworCV9fdTMyCQkJCSBnZl9pbnRlcmZhY2U7CS8qIGludGVyZmFjZSBpbmRleCAqLworCXN0cnVjdCBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlIGdmX2dyb3VwOwkvKiBtdWx0aWNhc3QgYWRkcmVzcyAqLworCV9fdTMyCQkJCSBnZl9mbW9kZTsJLyogZmlsdGVyIG1vZGUgKi8KKwlfX3UzMgkJCQkgZ2ZfbnVtc3JjOwkvKiBudW1iZXIgb2Ygc291cmNlcyAqLworCXN0cnVjdCBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlIGdmX3NsaXN0WzFdOwkvKiBpbnRlcmZhY2UgaW5kZXggKi8KK307CisKKyNkZWZpbmUgR1JPVVBfRklMVEVSX1NJWkUobnVtc3JjKSBcCisJKHNpemVvZihzdHJ1Y3QgZ3JvdXBfZmlsdGVyKSAtIHNpemVvZihzdHJ1Y3QgX19rZXJuZWxfc29ja2FkZHJfc3RvcmFnZSkgXAorCSsgKG51bXNyYykgKiBzaXplb2Yoc3RydWN0IF9fa2VybmVsX3NvY2thZGRyX3N0b3JhZ2UpKQorCitzdHJ1Y3QgaW5fcGt0aW5mbyB7CisJaW50CQlpcGlfaWZpbmRleDsKKwlzdHJ1Y3QgaW5fYWRkcglpcGlfc3BlY19kc3Q7CisJc3RydWN0IGluX2FkZHIJaXBpX2FkZHI7Cit9OworCisvKiBTdHJ1Y3R1cmUgZGVzY3JpYmluZyBhbiBJbnRlcm5ldCAoSVApIHNvY2tldCBhZGRyZXNzLiAqLworI2RlZmluZSBfX1NPQ0tfU0laRV9fCTE2CQkvKiBzaXplb2Yoc3RydWN0IHNvY2thZGRyKQkqLworc3RydWN0IHNvY2thZGRyX2luIHsKKyAgc2FfZmFtaWx5X3QJCXNpbl9mYW1pbHk7CS8qIEFkZHJlc3MgZmFtaWx5CQkqLworICBfX2JlMTYJCXNpbl9wb3J0OwkvKiBQb3J0IG51bWJlcgkJCSovCisgIHN0cnVjdCBpbl9hZGRyCXNpbl9hZGRyOwkvKiBJbnRlcm5ldCBhZGRyZXNzCQkqLworCisgIC8qIFBhZCB0byBzaXplIG9mIGBzdHJ1Y3Qgc29ja2FkZHInLiAqLworICB1bnNpZ25lZCBjaGFyCQlfX3BhZFtfX1NPQ0tfU0laRV9fIC0gc2l6ZW9mKHNob3J0IGludCkgLQorCQkJc2l6ZW9mKHVuc2lnbmVkIHNob3J0IGludCkgLSBzaXplb2Yoc3RydWN0IGluX2FkZHIpXTsKK307CisjZGVmaW5lIHNpbl96ZXJvCV9fcGFkCQkvKiBmb3IgQlNEIFVOSVggY29tcC4gLUZ2SwkqLworCisKKy8qCisgKiBEZWZpbml0aW9ucyBvZiB0aGUgYml0cyBpbiBhbiBJbnRlcm5ldCBhZGRyZXNzIGludGVnZXIuCisgKiBPbiBzdWJuZXRzLCBob3N0IGFuZCBuZXR3b3JrIHBhcnRzIGFyZSBmb3VuZCBhY2NvcmRpbmcKKyAqIHRvIHRoZSBzdWJuZXQgbWFzaywgbm90IHRoZXNlIG1hc2tzLgorICovCisjZGVmaW5lCUlOX0NMQVNTQShhKQkJKCgoKGxvbmcgaW50KSAoYSkpICYgMHg4MDAwMDAwMCkgPT0gMCkKKyNkZWZpbmUJSU5fQ0xBU1NBX05FVAkJMHhmZjAwMDAwMAorI2RlZmluZQlJTl9DTEFTU0FfTlNISUZUCTI0CisjZGVmaW5lCUlOX0NMQVNTQV9IT1NUCQkoMHhmZmZmZmZmZiAmIH5JTl9DTEFTU0FfTkVUKQorI2RlZmluZQlJTl9DTEFTU0FfTUFYCQkxMjgKKworI2RlZmluZQlJTl9DTEFTU0IoYSkJCSgoKChsb25nIGludCkgKGEpKSAmIDB4YzAwMDAwMDApID09IDB4ODAwMDAwMDApCisjZGVmaW5lCUlOX0NMQVNTQl9ORVQJCTB4ZmZmZjAwMDAKKyNkZWZpbmUJSU5fQ0xBU1NCX05TSElGVAkxNgorI2RlZmluZQlJTl9DTEFTU0JfSE9TVAkJKDB4ZmZmZmZmZmYgJiB+SU5fQ0xBU1NCX05FVCkKKyNkZWZpbmUJSU5fQ0xBU1NCX01BWAkJNjU1MzYKKworI2RlZmluZQlJTl9DTEFTU0MoYSkJCSgoKChsb25nIGludCkgKGEpKSAmIDB4ZTAwMDAwMDApID09IDB4YzAwMDAwMDApCisjZGVmaW5lCUlOX0NMQVNTQ19ORVQJCTB4ZmZmZmZmMDAKKyNkZWZpbmUJSU5fQ0xBU1NDX05TSElGVAk4CisjZGVmaW5lCUlOX0NMQVNTQ19IT1NUCQkoMHhmZmZmZmZmZiAmIH5JTl9DTEFTU0NfTkVUKQorCisjZGVmaW5lCUlOX0NMQVNTRChhKQkJKCgoKGxvbmcgaW50KSAoYSkpICYgMHhmMDAwMDAwMCkgPT0gMHhlMDAwMDAwMCkKKyNkZWZpbmUJSU5fTVVMVElDQVNUKGEpCQlJTl9DTEFTU0QoYSkKKyNkZWZpbmUgSU5fTVVMVElDQVNUX05FVAkweEYwMDAwMDAwCisKKyNkZWZpbmUJSU5fRVhQRVJJTUVOVEFMKGEpCSgoKChsb25nIGludCkgKGEpKSAmIDB4ZjAwMDAwMDApID09IDB4ZjAwMDAwMDApCisjZGVmaW5lCUlOX0JBRENMQVNTKGEpCQlJTl9FWFBFUklNRU5UQUwoKGEpKQorCisvKiBBZGRyZXNzIHRvIGFjY2VwdCBhbnkgaW5jb21pbmcgbWVzc2FnZXMuICovCisjZGVmaW5lCUlOQUREUl9BTlkJCSgodW5zaWduZWQgbG9uZyBpbnQpIDB4MDAwMDAwMDApCisKKy8qIEFkZHJlc3MgdG8gc2VuZCB0byBhbGwgaG9zdHMuICovCisjZGVmaW5lCUlOQUREUl9CUk9BRENBU1QJKCh1bnNpZ25lZCBsb25nIGludCkgMHhmZmZmZmZmZikKKworLyogQWRkcmVzcyBpbmRpY2F0aW5nIGFuIGVycm9yIHJldHVybi4gKi8KKyNkZWZpbmUJSU5BRERSX05PTkUJCSgodW5zaWduZWQgbG9uZyBpbnQpIDB4ZmZmZmZmZmYpCisKKy8qIE5ldHdvcmsgbnVtYmVyIGZvciBsb2NhbCBob3N0IGxvb3BiYWNrLiAqLworI2RlZmluZQlJTl9MT09QQkFDS05FVAkJMTI3CisKKy8qIEFkZHJlc3MgdG8gbG9vcGJhY2sgaW4gc29mdHdhcmUgdG8gbG9jYWwgaG9zdC4gICovCisjZGVmaW5lCUlOQUREUl9MT09QQkFDSwkJMHg3ZjAwMDAwMQkvKiAxMjcuMC4wLjEgICAqLworI2RlZmluZQlJTl9MT09QQkFDSyhhKQkJKCgoKGxvbmcgaW50KSAoYSkpICYgMHhmZjAwMDAwMCkgPT0gMHg3ZjAwMDAwMCkKKworLyogRGVmaW5lcyBmb3IgTXVsdGljYXN0IElOQUREUiAqLworI2RlZmluZSBJTkFERFJfVU5TUEVDX0dST1VQICAgCTB4ZTAwMDAwMDBVCS8qIDIyNC4wLjAuMCAgICovCisjZGVmaW5lIElOQUREUl9BTExIT1NUU19HUk9VUCAJMHhlMDAwMDAwMVUJLyogMjI0LjAuMC4xICAgKi8KKyNkZWZpbmUgSU5BRERSX0FMTFJUUlNfR1JPVVAgICAgMHhlMDAwMDAwMlUJLyogMjI0LjAuMC4yICovCisjZGVmaW5lIElOQUREUl9NQVhfTE9DQUxfR1JPVVAgIDB4ZTAwMDAwZmZVCS8qIDIyNC4wLjAuMjU1ICovCisKKworLyogPGFzbS9ieXRlb3JkZXIuaD4gY29udGFpbnMgdGhlIGh0b25sIHR5cGUgc3R1ZmYuLiAqLworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4gCisKKworI2VuZGlmCS8qIF9MSU5VWF9JTl9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaW42LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaW42LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTliMjIyZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pbjYuaApAQCAtMCwwICsxLDI3OCBAQAorLyoKKyAqCVR5cGVzIGFuZCBkZWZpbml0aW9ucyBmb3IgQUZfSU5FVDYgCisgKglMaW51eCBJTkVUNiBpbXBsZW1lbnRhdGlvbiAKKyAqCisgKglBdXRob3JzOgorICoJUGVkcm8gUm9xdWUJCTxyb3F1ZUBkaS5mYy51bC5wdD4JCisgKgorICoJU291cmNlczoKKyAqCUlQdjYgUHJvZ3JhbSBJbnRlcmZhY2VzIGZvciBCU0QgU3lzdGVtcworICogICAgICA8ZHJhZnQtaWV0Zi1pcG5nd2ctYnNkLWFwaS0wNS50eHQ+CisgKgorICoJQWR2YW5jZWQgU29ja2V0cyBBUEkgZm9yIElQdjYKKyAqCTxkcmFmdC1zdGV2ZW5zLWFkdmFuY2VkLWFwaS0wMC50eHQ+CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9JTjZfSAorI2RlZmluZSBfTElOVVhfSU42X0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKglJUHY2IGFkZHJlc3Mgc3RydWN0dXJlCisgKi8KKworc3RydWN0IGluNl9hZGRyIHsKKwl1bmlvbiB7CisJCV9fdTgJCXU2X2FkZHI4WzE2XTsKKwkJX19iZTE2CQl1Nl9hZGRyMTZbOF07CisJCV9fYmUzMgkJdTZfYWRkcjMyWzRdOworCX0gaW42X3U7CisjZGVmaW5lIHM2X2FkZHIJCQlpbjZfdS51Nl9hZGRyOAorI2RlZmluZSBzNl9hZGRyMTYJCWluNl91LnU2X2FkZHIxNgorI2RlZmluZSBzNl9hZGRyMzIJCWluNl91LnU2X2FkZHIzMgorfTsKKworLyogSVB2NiBXaWxkY2FyZCBBZGRyZXNzICg6OikgYW5kIExvb3BiYWNrIEFkZHJlc3MgKDo6MSkgZGVmaW5lZCBpbiBSRkMyNTUzCisgKiBOT1RFOiBCZSBhd2FyZSB0aGUgSU42QUREUl8qIGNvbnN0YW50cyBhbmQgaW42YWRkcl8qIGV4dGVybmFscyBhcmUgZGVmaW5lZAorICogaW4gbmV0d29yayBieXRlIG9yZGVyLCBub3QgaW4gaG9zdCBieXRlIG9yZGVyIGFzIGFyZSB0aGUgSVB2NCBlcXVpdmFsZW50cworICovCisKK3N0cnVjdCBzb2NrYWRkcl9pbjYgeworCXVuc2lnbmVkIHNob3J0IGludAlzaW42X2ZhbWlseTsgICAgLyogQUZfSU5FVDYgKi8KKwlfX2JlMTYJCQlzaW42X3BvcnQ7ICAgICAgLyogVHJhbnNwb3J0IGxheWVyIHBvcnQgIyAqLworCV9fYmUzMgkJCXNpbjZfZmxvd2luZm87ICAvKiBJUHY2IGZsb3cgaW5mb3JtYXRpb24gKi8KKwlzdHJ1Y3QgaW42X2FkZHIJCXNpbjZfYWRkcjsgICAgICAvKiBJUHY2IGFkZHJlc3MgKi8KKwlfX3UzMgkJCXNpbjZfc2NvcGVfaWQ7ICAvKiBzY29wZSBpZCAobmV3IGluIFJGQzI1NTMpICovCit9OworCitzdHJ1Y3QgaXB2Nl9tcmVxIHsKKwkvKiBJUHY2IG11bHRpY2FzdCBhZGRyZXNzIG9mIGdyb3VwICovCisJc3RydWN0IGluNl9hZGRyIGlwdjZtcl9tdWx0aWFkZHI7CisKKwkvKiBsb2NhbCBJUHY2IGFkZHJlc3Mgb2YgaW50ZXJmYWNlICovCisJaW50CQlpcHY2bXJfaWZpbmRleDsKK307CisKKyNkZWZpbmUgaXB2Nm1yX2FjYWRkcglpcHY2bXJfbXVsdGlhZGRyCisKK3N0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSB7CisJc3RydWN0IGluNl9hZGRyCWZscl9kc3Q7CisJX19iZTMyCWZscl9sYWJlbDsKKwlfX3U4CWZscl9hY3Rpb247CisJX191OAlmbHJfc2hhcmU7CisJX191MTYJZmxyX2ZsYWdzOworCV9fdTE2IAlmbHJfZXhwaXJlczsKKwlfX3UxNglmbHJfbGluZ2VyOworCV9fdTMyCV9fZmxyX3BhZDsKKwkvKiBPcHRpb25zIGluIGZvcm1hdCBvZiBJUFY2X1BLVE9QVElPTlMgKi8KK307CisKKyNkZWZpbmUgSVBWNl9GTF9BX0dFVAkwCisjZGVmaW5lIElQVjZfRkxfQV9QVVQJMQorI2RlZmluZSBJUFY2X0ZMX0FfUkVORVcJMgorCisjZGVmaW5lIElQVjZfRkxfRl9DUkVBVEUJMQorI2RlZmluZSBJUFY2X0ZMX0ZfRVhDTAkJMgorCisjZGVmaW5lIElQVjZfRkxfU19OT05FCQkwCisjZGVmaW5lIElQVjZfRkxfU19FWENMCQkxCisjZGVmaW5lIElQVjZfRkxfU19QUk9DRVNTCTIKKyNkZWZpbmUgSVBWNl9GTF9TX1VTRVIJCTMKKyNkZWZpbmUgSVBWNl9GTF9TX0FOWQkJMjU1CisKKworLyoKKyAqCUJpdG1hc2sgY29uc3RhbnQgZGVjbGFyYXRpb25zIHRvIGhlbHAgYXBwbGljYXRpb25zIHNlbGVjdCBvdXQgdGhlIAorICoJZmxvdyBsYWJlbCBhbmQgcHJpb3JpdHkgZmllbGRzLgorICoKKyAqCU5vdGUgdGhhdCB0aGlzIGFyZSBpbiBob3N0IGJ5dGUgb3JkZXIgd2hpbGUgdGhlIGZsb3dpbmZvIGZpZWxkIG9mCisgKglzb2NrYWRkcl9pbjYgaXMgaW4gbmV0d29yayBieXRlIG9yZGVyLgorICovCisKKyNkZWZpbmUgSVBWNl9GTE9XSU5GT19GTE9XTEFCRUwJCTB4MDAwZmZmZmYKKyNkZWZpbmUgSVBWNl9GTE9XSU5GT19QUklPUklUWQkJMHgwZmYwMDAwMAorCisvKiBUaGVzZSBkZWZpbml0aW9ucyBhcmUgb2Jzb2xldGUgKi8KKyNkZWZpbmUgSVBWNl9QUklPUklUWV9VTkNIQVJBQ1RFUklaRUQJMHgwMDAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfRklMTEVSCQkweDAxMDAKKyNkZWZpbmUgSVBWNl9QUklPUklUWV9VTkFUVEVOREVECTB4MDIwMAorI2RlZmluZSBJUFY2X1BSSU9SSVRZX1JFU0VSVkVEMQkJMHgwMzAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfQlVMSwkJMHgwNDAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfUkVTRVJWRUQyCQkweDA1MDAKKyNkZWZpbmUgSVBWNl9QUklPUklUWV9JTlRFUkFDVElWRQkweDA2MDAKKyNkZWZpbmUgSVBWNl9QUklPUklUWV9DT05UUk9MCQkweDA3MDAKKyNkZWZpbmUgSVBWNl9QUklPUklUWV84CQkJMHgwODAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfOQkJCTB4MDkwMAorI2RlZmluZSBJUFY2X1BSSU9SSVRZXzEwCQkweDBhMDAKKyNkZWZpbmUgSVBWNl9QUklPUklUWV8xMQkJMHgwYjAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfMTIJCTB4MGMwMAorI2RlZmluZSBJUFY2X1BSSU9SSVRZXzEzCQkweDBkMDAKKyNkZWZpbmUgSVBWNl9QUklPUklUWV8xNAkJMHgwZTAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfMTUJCTB4MGYwMAorCisvKgorICoJSVBWNiBleHRlbnNpb24gaGVhZGVycworICovCisjZGVmaW5lIElQUFJPVE9fSE9QT1BUUwkJMAkvKiBJUHY2IGhvcC1ieS1ob3Agb3B0aW9ucwkqLworI2RlZmluZSBJUFBST1RPX1JPVVRJTkcJCTQzCS8qIElQdjYgcm91dGluZyBoZWFkZXIJCSovCisjZGVmaW5lIElQUFJPVE9fRlJBR01FTlQJNDQJLyogSVB2NiBmcmFnbWVudGF0aW9uIGhlYWRlcgkqLworI2RlZmluZSBJUFBST1RPX0lDTVBWNgkJNTgJLyogSUNNUHY2CQkJKi8KKyNkZWZpbmUgSVBQUk9UT19OT05FCQk1OQkvKiBJUHY2IG5vIG5leHQgaGVhZGVyCQkqLworI2RlZmluZSBJUFBST1RPX0RTVE9QVFMJCTYwCS8qIElQdjYgZGVzdGluYXRpb24gb3B0aW9ucwkqLworI2RlZmluZSBJUFBST1RPX01ICQkxMzUJLyogSVB2NiBtb2JpbGl0eSBoZWFkZXIJCSovCisKKy8qCisgKglJUHY2IFRMViBvcHRpb25zLgorICovCisjZGVmaW5lIElQVjZfVExWX1BBRDAJCTAKKyNkZWZpbmUgSVBWNl9UTFZfUEFETgkJMQorI2RlZmluZSBJUFY2X1RMVl9ST1VURVJBTEVSVAk1CisjZGVmaW5lIElQVjZfVExWX0pVTUJPCQkxOTQKKyNkZWZpbmUgSVBWNl9UTFZfSEFPCQkyMDEJLyogaG9tZSBhZGRyZXNzIG9wdGlvbiAqLworCisvKgorICoJSVBWNiBzb2NrZXQgb3B0aW9ucworICovCisKKyNkZWZpbmUgSVBWNl9BRERSRk9STQkJMQorI2RlZmluZSBJUFY2XzIyOTJQS1RJTkZPCTIKKyNkZWZpbmUgSVBWNl8yMjkySE9QT1BUUwkzCisjZGVmaW5lIElQVjZfMjI5MkRTVE9QVFMJNAorI2RlZmluZSBJUFY2XzIyOTJSVEhEUgkJNQorI2RlZmluZSBJUFY2XzIyOTJQS1RPUFRJT05TCTYKKyNkZWZpbmUgSVBWNl9DSEVDS1NVTQkJNworI2RlZmluZSBJUFY2XzIyOTJIT1BMSU1JVAk4CisjZGVmaW5lIElQVjZfTkVYVEhPUAkJOQorI2RlZmluZSBJUFY2X0FVVEhIRFIJCTEwCS8qIG9ic29sZXRlICovCisjZGVmaW5lIElQVjZfRkxPV0lORk8JCTExCisKKyNkZWZpbmUgSVBWNl9VTklDQVNUX0hPUFMJMTYKKyNkZWZpbmUgSVBWNl9NVUxUSUNBU1RfSUYJMTcKKyNkZWZpbmUgSVBWNl9NVUxUSUNBU1RfSE9QUwkxOAorI2RlZmluZSBJUFY2X01VTFRJQ0FTVF9MT09QCTE5CisjZGVmaW5lIElQVjZfQUREX01FTUJFUlNISVAJMjAKKyNkZWZpbmUgSVBWNl9EUk9QX01FTUJFUlNISVAJMjEKKyNkZWZpbmUgSVBWNl9ST1VURVJfQUxFUlQJMjIKKyNkZWZpbmUgSVBWNl9NVFVfRElTQ09WRVIJMjMKKyNkZWZpbmUgSVBWNl9NVFUJCTI0CisjZGVmaW5lIElQVjZfUkVDVkVSUgkJMjUKKyNkZWZpbmUgSVBWNl9WNk9OTFkJCTI2CisjZGVmaW5lIElQVjZfSk9JTl9BTllDQVNUCTI3CisjZGVmaW5lIElQVjZfTEVBVkVfQU5ZQ0FTVAkyOAorCisvKiBJUFY2X01UVV9ESVNDT1ZFUiB2YWx1ZXMgKi8KKyNkZWZpbmUgSVBWNl9QTVRVRElTQ19ET05UCQkwCisjZGVmaW5lIElQVjZfUE1UVURJU0NfV0FOVAkJMQorI2RlZmluZSBJUFY2X1BNVFVESVNDX0RPCQkyCisjZGVmaW5lIElQVjZfUE1UVURJU0NfUFJPQkUJCTMKKworLyogRmxvd2xhYmVsICovCisjZGVmaW5lIElQVjZfRkxPV0xBQkVMX01HUgkzMgorI2RlZmluZSBJUFY2X0ZMT1dJTkZPX1NFTkQJMzMKKworI2RlZmluZSBJUFY2X0lQU0VDX1BPTElDWQkzNAorI2RlZmluZSBJUFY2X1hGUk1fUE9MSUNZCTM1CisKKy8qCisgKiBNdWx0aWNhc3Q6CisgKiBGb2xsb3dpbmcgc29ja2V0IG9wdGlvbnMgYXJlIHNoYXJlZCBiZXR3ZWVuIElQdjQgYW5kIElQdjYuCisgKgorICogTUNBU1RfSk9JTl9HUk9VUAkJNDIKKyAqIE1DQVNUX0JMT0NLX1NPVVJDRQkJNDMKKyAqIE1DQVNUX1VOQkxPQ0tfU09VUkNFCQk0NAorICogTUNBU1RfTEVBVkVfR1JPVVAJCTQ1CisgKiBNQ0FTVF9KT0lOX1NPVVJDRV9HUk9VUAk0NgorICogTUNBU1RfTEVBVkVfU09VUkNFX0dST1VQCTQ3CisgKiBNQ0FTVF9NU0ZJTFRFUgkJNDgKKyAqLworCisvKgorICogQWR2YW5jZWQgQVBJIChSRkMzNTQyKSAoMSkKKyAqCisgKiBOb3RlOiBJUFY2X1JFQ1ZSVEhEUkRTVE9QVFMgZG9lcyBub3QgZXhpc3QuIHNlZSBuZXQvaXB2Ni9kYXRhZ3JhbS5jLgorICovCisKKyNkZWZpbmUgSVBWNl9SRUNWUEtUSU5GTwk0OQorI2RlZmluZSBJUFY2X1BLVElORk8JCTUwCisjZGVmaW5lIElQVjZfUkVDVkhPUExJTUlUCTUxCisjZGVmaW5lIElQVjZfSE9QTElNSVQJCTUyCisjZGVmaW5lIElQVjZfUkVDVkhPUE9QVFMJNTMKKyNkZWZpbmUgSVBWNl9IT1BPUFRTCQk1NAorI2RlZmluZSBJUFY2X1JUSERSRFNUT1BUUwk1NQorI2RlZmluZSBJUFY2X1JFQ1ZSVEhEUgkJNTYKKyNkZWZpbmUgSVBWNl9SVEhEUgkJNTcKKyNkZWZpbmUgSVBWNl9SRUNWRFNUT1BUUwk1OAorI2RlZmluZSBJUFY2X0RTVE9QVFMJCTU5CisjZGVmaW5lIElQVjZfUkVDVlBBVEhNVFUJNjAKKyNkZWZpbmUgSVBWNl9QQVRITVRVCQk2MQorI2RlZmluZSBJUFY2X0RPTlRGUkFHCQk2MgorI2lmIDAJLyogbm90IHlldCAqLworI2RlZmluZSBJUFY2X1VTRV9NSU5fTVRVCTYzCisjZW5kaWYKKworLyoKKyAqIE5ldGZpbHRlciAoMSkKKyAqCisgKiBGb2xsb3dpbmcgc29ja2V0IG9wdGlvbnMgYXJlIHVzZWQgaW4gaXA2X3RhYmxlczsKKyAqIHNlZSBpbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaC4KKyAqCisgKiBJUDZUX1NPX1NFVF9SRVBMQUNFIC8gSVA2VF9TT19HRVRfSU5GTwkJNjQKKyAqIElQNlRfU09fU0VUX0FERF9DT1VOVEVSUyAvIElQNlRfU09fR0VUX0VOVFJJRVMJNjUKKyAqLworCisvKgorICogQWR2YW5jZWQgQVBJIChSRkMzNTQyKSAoMikKKyAqLworI2RlZmluZSBJUFY2X1JFQ1ZUQ0xBU1MJCTY2CisjZGVmaW5lIElQVjZfVENMQVNTCQk2NworCisvKgorICogTmV0ZmlsdGVyICgyKQorICoKKyAqIEZvbGxvd2luZyBzb2NrZXQgb3B0aW9ucyBhcmUgdXNlZCBpbiBpcDZfdGFibGVzOworICogc2VlIGluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oLgorICoKKyAqIElQNlRfU09fR0VUX1JFVklTSU9OX01BVENICTY4CisgKiBJUDZUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQJNjkKKyAqLworCisvKiBSRkM1MDE0OiBTb3VyY2UgYWRkcmVzcyBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgSVBWNl9BRERSX1BSRUZFUkVOQ0VTCTcyCisKKyNkZWZpbmUgSVBWNl9QUkVGRVJfU1JDX1RNUAkJMHgwMDAxCisjZGVmaW5lIElQVjZfUFJFRkVSX1NSQ19QVUJMSUMJCTB4MDAwMgorI2RlZmluZSBJUFY2X1BSRUZFUl9TUkNfUFVCVE1QX0RFRkFVTFQJMHgwMTAwCisjZGVmaW5lIElQVjZfUFJFRkVSX1NSQ19DT0EJCTB4MDAwNAorI2RlZmluZSBJUFY2X1BSRUZFUl9TUkNfSE9NRQkJMHgwNDAwCisjZGVmaW5lIElQVjZfUFJFRkVSX1NSQ19DR0EJCTB4MDAwOAorI2RlZmluZSBJUFY2X1BSRUZFUl9TUkNfTk9OQ0dBCQkweDA4MDAKKworLyogUkZDNTA4MjogR2VuZXJhbGl6ZWQgVHRsIFNlY3VyaXR5IE1lY2hhbmlzbSAqLworI2RlZmluZSBJUFY2X01JTkhPUENPVU5UCQk3MworCisjZGVmaW5lIElQVjZfT1JJR0RTVEFERFIgICAgICAgIDc0CisjZGVmaW5lIElQVjZfUkVDVk9SSUdEU1RBRERSICAgIElQVjZfT1JJR0RTVEFERFIKKyNkZWZpbmUgSVBWNl9UUkFOU1BBUkVOVCAgICAgICAgNzUKKworLyoKKyAqIE11bHRpY2FzdCBSb3V0aW5nOgorICogc2VlIGluY2x1ZGUvbGludXgvbXJvdXRlNi5oLgorICoKKyAqIE1SVDZfSU5JVAkJCTIwMAorICogTVJUNl9ET05FCQkJMjAxCisgKiBNUlQ2X0FERF9NSUYJCQkyMDIKKyAqIE1SVDZfREVMX01JRgkJCTIwMworICogTVJUNl9BRERfTUZDCQkJMjA0CisgKiBNUlQ2X0RFTF9NRkMJCQkyMDUKKyAqIE1SVDZfVkVSU0lPTgkJCTIwNgorICogTVJUNl9BU1NFUlQJCQkyMDcKKyAqIE1SVDZfUElNCQkJMjA4CisgKiAocmVzZXJ2ZWQpCQkJMjA5CisgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2luX3JvdXRlLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaW5fcm91dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjYxYjhjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2luX3JvdXRlLmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBfTElOVVhfSU5fUk9VVEVfSAorI2RlZmluZSBfTElOVVhfSU5fUk9VVEVfSAorCisvKiBJUHY0IHJvdXRpbmcgY2FjaGUgZmxhZ3MgKi8KKworI2RlZmluZSBSVENGX0RFQUQJUlROSF9GX0RFQUQKKyNkZWZpbmUgUlRDRl9PTkxJTksJUlROSF9GX09OTElOSworCisvKiBPYnNvbGV0ZSBmbGFnLiBBYm91dCB0byBiZSBkZWxldGVkICovCisjZGVmaW5lIFJUQ0ZfTk9QTVRVRElTQyBSVE1fRl9OT1BNVFVESVNDCisKKyNkZWZpbmUgUlRDRl9OT1RJRlkJMHgwMDAxMDAwMAorI2RlZmluZSBSVENGX0RJUkVDVERTVAkweDAwMDIwMDAwIC8qIHVudXNlZCAqLworI2RlZmluZSBSVENGX1JFRElSRUNURUQJMHgwMDA0MDAwMAorI2RlZmluZSBSVENGX1RQUk9YWQkweDAwMDgwMDAwIC8qIHVudXNlZCAqLworCisjZGVmaW5lIFJUQ0ZfRkFTVAkweDAwMjAwMDAwIC8qIHVudXNlZCAqLworI2RlZmluZSBSVENGX01BU1EJMHgwMDQwMDAwMCAvKiB1bnVzZWQgKi8KKyNkZWZpbmUgUlRDRl9TTkFUCTB4MDA4MDAwMDAgLyogdW51c2VkICovCisjZGVmaW5lIFJUQ0ZfRE9SRURJUkVDVCAweDAxMDAwMDAwCisjZGVmaW5lIFJUQ0ZfRElSRUNUU1JDCTB4MDQwMDAwMDAKKyNkZWZpbmUgUlRDRl9ETkFUCTB4MDgwMDAwMDAKKyNkZWZpbmUgUlRDRl9CUk9BRENBU1QJMHgxMDAwMDAwMAorI2RlZmluZSBSVENGX01VTFRJQ0FTVAkweDIwMDAwMDAwCisjZGVmaW5lIFJUQ0ZfUkVKRUNUCTB4NDAwMDAwMDAgLyogdW51c2VkICovCisjZGVmaW5lIFJUQ0ZfTE9DQUwJMHg4MDAwMDAwMAorCisjZGVmaW5lIFJUQ0ZfTkFUCShSVENGX0ROQVR8UlRDRl9TTkFUKQorCisjZGVmaW5lIFJUX1RPUyh0b3MpCSgodG9zKSZJUFRPU19UT1NfTUFTSykKKworI2VuZGlmIC8qIF9MSU5VWF9JTl9ST1VURV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaW5ldF9kaWFnLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaW5ldF9kaWFnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEwN2VkMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pbmV0X2RpYWcuaApAQCAtMCwwICsxLDEyNCBAQAorI2lmbmRlZiBfSU5FVF9ESUFHX0hfCisjZGVmaW5lIF9JTkVUX0RJQUdfSF8gMQorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogSnVzdCBzb21lIHJhbmRvbSBudW1iZXIgKi8KKyNkZWZpbmUgVENQRElBR19HRVRTT0NLIDE4CisjZGVmaW5lIERDQ1BESUFHX0dFVFNPQ0sgMTkKKworI2RlZmluZSBJTkVUX0RJQUdfR0VUU09DS19NQVggMjQKKworLyogU29ja2V0IGlkZW50aXR5ICovCitzdHJ1Y3QgaW5ldF9kaWFnX3NvY2tpZCB7CisJX19iZTE2CWlkaWFnX3Nwb3J0OworCV9fYmUxNglpZGlhZ19kcG9ydDsKKwlfX2JlMzIJaWRpYWdfc3JjWzRdOworCV9fYmUzMglpZGlhZ19kc3RbNF07CisJX191MzIJaWRpYWdfaWY7CisJX191MzIJaWRpYWdfY29va2llWzJdOworI2RlZmluZSBJTkVUX0RJQUdfTk9DT09LSUUgKH4wVSkKK307CisKKy8qIFJlcXVlc3Qgc3RydWN0dXJlICovCisKK3N0cnVjdCBpbmV0X2RpYWdfcmVxIHsKKwlfX3U4CWlkaWFnX2ZhbWlseTsJCS8qIEZhbWlseSBvZiBhZGRyZXNzZXMuICovCisJX191OAlpZGlhZ19zcmNfbGVuOworCV9fdTgJaWRpYWdfZHN0X2xlbjsKKwlfX3U4CWlkaWFnX2V4dDsJCS8qIFF1ZXJ5IGV4dGVuZGVkIGluZm9ybWF0aW9uICovCisKKwlzdHJ1Y3QgaW5ldF9kaWFnX3NvY2tpZCBpZDsKKworCV9fdTMyCWlkaWFnX3N0YXRlczsJCS8qIFN0YXRlcyB0byBkdW1wICovCisJX191MzIJaWRpYWdfZGJzOwkJLyogVGFibGVzIHRvIGR1bXAgKE5JKSAqLworfTsKKworZW51bSB7CisJSU5FVF9ESUFHX1JFUV9OT05FLAorCUlORVRfRElBR19SRVFfQllURUNPREUsCit9OworCisjZGVmaW5lIElORVRfRElBR19SRVFfTUFYIElORVRfRElBR19SRVFfQllURUNPREUKKworLyogQnl0ZWNvZGUgaXMgc2VxdWVuY2Ugb2YgNCBieXRlIGNvbW1hbmRzIGZvbGxvd2VkIGJ5IHZhcmlhYmxlIGFyZ3VtZW50cy4KKyAqIEFsbCB0aGUgY29tbWFuZHMgaWRlbnRpZmllZCBieSAiY29kZSIgYXJlIGNvbmRpdGlvbmFsIGp1bXBzIGZvcndhcmQ6CisgKiB0byBvZmZzZXQgY2MrInllcyIgb3IgdG8gb2Zmc2V0IGNjKyJubyIuICJ5ZXMiIGlzIHN1cHBvc2VkIHRvIGJlCisgKiBsZW5ndGggb2YgdGhlIGNvbW1hbmQgYW5kIGl0cyBhcmd1bWVudHMuCisgKi8KKyAKK3N0cnVjdCBpbmV0X2RpYWdfYmNfb3AgeworCXVuc2lnbmVkIGNoYXIJY29kZTsKKwl1bnNpZ25lZCBjaGFyCXllczsKKwl1bnNpZ25lZCBzaG9ydAlubzsKK307CisKK2VudW0geworCUlORVRfRElBR19CQ19OT1AsCisJSU5FVF9ESUFHX0JDX0pNUCwKKwlJTkVUX0RJQUdfQkNfU19HRSwKKwlJTkVUX0RJQUdfQkNfU19MRSwKKwlJTkVUX0RJQUdfQkNfRF9HRSwKKwlJTkVUX0RJQUdfQkNfRF9MRSwKKwlJTkVUX0RJQUdfQkNfQVVUTywKKwlJTkVUX0RJQUdfQkNfU19DT05ELAorCUlORVRfRElBR19CQ19EX0NPTkQsCit9OworCitzdHJ1Y3QgaW5ldF9kaWFnX2hvc3Rjb25kIHsKKwlfX3U4CWZhbWlseTsKKwlfX3U4CXByZWZpeF9sZW47CisJaW50CXBvcnQ7CisJX19iZTMyCWFkZHJbMF07Cit9OworCisvKiBCYXNlIGluZm8gc3RydWN0dXJlLiBJdCBjb250YWlucyBzb2NrZXQgaWRlbnRpdHkgKGFkZHJzL3BvcnRzL2Nvb2tpZSkKKyAqIGFuZCwgYWxhcywgdGhlIGluZm9ybWF0aW9uIHNob3duIGJ5IG5ldHN0YXQuICovCitzdHJ1Y3QgaW5ldF9kaWFnX21zZyB7CisJX191OAlpZGlhZ19mYW1pbHk7CisJX191OAlpZGlhZ19zdGF0ZTsKKwlfX3U4CWlkaWFnX3RpbWVyOworCV9fdTgJaWRpYWdfcmV0cmFuczsKKworCXN0cnVjdCBpbmV0X2RpYWdfc29ja2lkIGlkOworCisJX191MzIJaWRpYWdfZXhwaXJlczsKKwlfX3UzMglpZGlhZ19ycXVldWU7CisJX191MzIJaWRpYWdfd3F1ZXVlOworCV9fdTMyCWlkaWFnX3VpZDsKKwlfX3UzMglpZGlhZ19pbm9kZTsKK307CisKKy8qIEV4dGVuc2lvbnMgKi8KKworZW51bSB7CisJSU5FVF9ESUFHX05PTkUsCisJSU5FVF9ESUFHX01FTUlORk8sCisJSU5FVF9ESUFHX0lORk8sCisJSU5FVF9ESUFHX1ZFR0FTSU5GTywKKwlJTkVUX0RJQUdfQ09ORywKK307CisKKyNkZWZpbmUgSU5FVF9ESUFHX01BWCBJTkVUX0RJQUdfQ09ORworCisKKy8qIElORVRfRElBR19NRU0gKi8KKworc3RydWN0IGluZXRfZGlhZ19tZW1pbmZvIHsKKwlfX3UzMglpZGlhZ19ybWVtOworCV9fdTMyCWlkaWFnX3dtZW07CisJX191MzIJaWRpYWdfZm1lbTsKKwlfX3UzMglpZGlhZ190bWVtOworfTsKKworLyogSU5FVF9ESUFHX1ZFR0FTSU5GTyAqLworCitzdHJ1Y3QgdGNwdmVnYXNfaW5mbyB7CisJX191MzIJdGNwdl9lbmFibGVkOworCV9fdTMyCXRjcHZfcnR0Y250OworCV9fdTMyCXRjcHZfcnR0OworCV9fdTMyCXRjcHZfbWlucnR0OworfTsKKworCisjZW5kaWYgLyogX0lORVRfRElBR19IXyAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lub3RpZnkuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pbm90aWZ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAzYmZhMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pbm90aWZ5LmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIElub2RlIGJhc2VkIGRpcmVjdG9yeSBub3RpZmljYXRpb24gZm9yIExpbnV4CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEpvaG4gTWNDdXRjaGFuCisgKi8KKworI2lmbmRlZiBfTElOVVhfSU5PVElGWV9ICisjZGVmaW5lIF9MSU5VWF9JTk9USUZZX0gKKworLyogRm9yIE9fQ0xPRVhFQyBhbmQgT19OT05CTE9DSyAqLworI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIHN0cnVjdCBpbm90aWZ5X2V2ZW50IC0gc3RydWN0dXJlIHJlYWQgZnJvbSB0aGUgaW5vdGlmeSBkZXZpY2UgZm9yIGVhY2ggZXZlbnQKKyAqCisgKiBXaGVuIHlvdSBhcmUgd2F0Y2hpbmcgYSBkaXJlY3RvcnksIHlvdSB3aWxsIHJlY2VpdmUgdGhlIGZpbGVuYW1lIGZvciBldmVudHMKKyAqIHN1Y2ggYXMgSU5fQ1JFQVRFLCBJTl9ERUxFVEUsIElOX09QRU4sIElOX0NMT1NFLCAuLi4sIHJlbGF0aXZlIHRvIHRoZSB3ZC4KKyAqLworc3RydWN0IGlub3RpZnlfZXZlbnQgeworCV9fczMyCQl3ZDsJCS8qIHdhdGNoIGRlc2NyaXB0b3IgKi8KKwlfX3UzMgkJbWFzazsJCS8qIHdhdGNoIG1hc2sgKi8KKwlfX3UzMgkJY29va2llOwkJLyogY29va2llIHRvIHN5bmNocm9uaXplIHR3byBldmVudHMgKi8KKwlfX3UzMgkJbGVuOwkJLyogbGVuZ3RoIChpbmNsdWRpbmcgbnVsbHMpIG9mIG5hbWUgKi8KKwljaGFyCQluYW1lWzBdOwkvKiBzdHViIGZvciBwb3NzaWJsZSBuYW1lICovCit9OworCisvKiB0aGUgZm9sbG93aW5nIGFyZSBsZWdhbCwgaW1wbGVtZW50ZWQgZXZlbnRzIHRoYXQgdXNlci1zcGFjZSBjYW4gd2F0Y2ggZm9yICovCisjZGVmaW5lIElOX0FDQ0VTUwkJMHgwMDAwMDAwMQkvKiBGaWxlIHdhcyBhY2Nlc3NlZCAqLworI2RlZmluZSBJTl9NT0RJRlkJCTB4MDAwMDAwMDIJLyogRmlsZSB3YXMgbW9kaWZpZWQgKi8KKyNkZWZpbmUgSU5fQVRUUklCCQkweDAwMDAwMDA0CS8qIE1ldGFkYXRhIGNoYW5nZWQgKi8KKyNkZWZpbmUgSU5fQ0xPU0VfV1JJVEUJCTB4MDAwMDAwMDgJLyogV3JpdHRhYmxlIGZpbGUgd2FzIGNsb3NlZCAqLworI2RlZmluZSBJTl9DTE9TRV9OT1dSSVRFCTB4MDAwMDAwMTAJLyogVW53cml0dGFibGUgZmlsZSBjbG9zZWQgKi8KKyNkZWZpbmUgSU5fT1BFTgkJCTB4MDAwMDAwMjAJLyogRmlsZSB3YXMgb3BlbmVkICovCisjZGVmaW5lIElOX01PVkVEX0ZST00JCTB4MDAwMDAwNDAJLyogRmlsZSB3YXMgbW92ZWQgZnJvbSBYICovCisjZGVmaW5lIElOX01PVkVEX1RPCQkweDAwMDAwMDgwCS8qIEZpbGUgd2FzIG1vdmVkIHRvIFkgKi8KKyNkZWZpbmUgSU5fQ1JFQVRFCQkweDAwMDAwMTAwCS8qIFN1YmZpbGUgd2FzIGNyZWF0ZWQgKi8KKyNkZWZpbmUgSU5fREVMRVRFCQkweDAwMDAwMjAwCS8qIFN1YmZpbGUgd2FzIGRlbGV0ZWQgKi8KKyNkZWZpbmUgSU5fREVMRVRFX1NFTEYJCTB4MDAwMDA0MDAJLyogU2VsZiB3YXMgZGVsZXRlZCAqLworI2RlZmluZSBJTl9NT1ZFX1NFTEYJCTB4MDAwMDA4MDAJLyogU2VsZiB3YXMgbW92ZWQgKi8KKworLyogdGhlIGZvbGxvd2luZyBhcmUgbGVnYWwgZXZlbnRzLiAgdGhleSBhcmUgc2VudCBhcyBuZWVkZWQgdG8gYW55IHdhdGNoICovCisjZGVmaW5lIElOX1VOTU9VTlQJCTB4MDAwMDIwMDAJLyogQmFja2luZyBmcyB3YXMgdW5tb3VudGVkICovCisjZGVmaW5lIElOX1FfT1ZFUkZMT1cJCTB4MDAwMDQwMDAJLyogRXZlbnQgcXVldWVkIG92ZXJmbG93ZWQgKi8KKyNkZWZpbmUgSU5fSUdOT1JFRAkJMHgwMDAwODAwMAkvKiBGaWxlIHdhcyBpZ25vcmVkICovCisKKy8qIGhlbHBlciBldmVudHMgKi8KKyNkZWZpbmUgSU5fQ0xPU0UJCShJTl9DTE9TRV9XUklURSB8IElOX0NMT1NFX05PV1JJVEUpIC8qIGNsb3NlICovCisjZGVmaW5lIElOX01PVkUJCQkoSU5fTU9WRURfRlJPTSB8IElOX01PVkVEX1RPKSAvKiBtb3ZlcyAqLworCisvKiBzcGVjaWFsIGZsYWdzICovCisjZGVmaW5lIElOX09OTFlESVIJCTB4MDEwMDAwMDAJLyogb25seSB3YXRjaCB0aGUgcGF0aCBpZiBpdCBpcyBhIGRpcmVjdG9yeSAqLworI2RlZmluZSBJTl9ET05UX0ZPTExPVwkJMHgwMjAwMDAwMAkvKiBkb24ndCBmb2xsb3cgYSBzeW0gbGluayAqLworI2RlZmluZSBJTl9FWENMX1VOTElOSwkJMHgwNDAwMDAwMAkvKiBleGNsdWRlIGV2ZW50cyBvbiB1bmxpbmtlZCBvYmplY3RzICovCisjZGVmaW5lIElOX01BU0tfQURECQkweDIwMDAwMDAwCS8qIGFkZCB0byB0aGUgbWFzayBvZiBhbiBhbHJlYWR5IGV4aXN0aW5nIHdhdGNoICovCisjZGVmaW5lIElOX0lTRElSCQkweDQwMDAwMDAwCS8qIGV2ZW50IG9jY3VycmVkIGFnYWluc3QgZGlyICovCisjZGVmaW5lIElOX09ORVNIT1QJCTB4ODAwMDAwMDAJLyogb25seSBzZW5kIGV2ZW50IG9uY2UgKi8KKworLyoKKyAqIEFsbCBvZiB0aGUgZXZlbnRzIC0gd2UgYnVpbGQgdGhlIGxpc3QgYnkgaGFuZCBzbyB0aGF0IHdlIGNhbiBhZGQgZmxhZ3MgaW4KKyAqIHRoZSBmdXR1cmUgYW5kIG5vdCBicmVhayBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgQXBwcyB3aWxsIGdldCBvbmx5IHRoZQorICogZXZlbnRzIHRoYXQgdGhleSBvcmlnaW5hbGx5IHdhbnRlZC4gIEJlIHN1cmUgdG8gYWRkIG5ldyBldmVudHMgaGVyZSEKKyAqLworI2RlZmluZSBJTl9BTExfRVZFTlRTCShJTl9BQ0NFU1MgfCBJTl9NT0RJRlkgfCBJTl9BVFRSSUIgfCBJTl9DTE9TRV9XUklURSB8IFwKKwkJCSBJTl9DTE9TRV9OT1dSSVRFIHwgSU5fT1BFTiB8IElOX01PVkVEX0ZST00gfCBcCisJCQkgSU5fTU9WRURfVE8gfCBJTl9ERUxFVEUgfCBJTl9DUkVBVEUgfCBJTl9ERUxFVEVfU0VMRiB8IFwKKwkJCSBJTl9NT1ZFX1NFTEYpCisKKy8qIEZsYWdzIGZvciBzeXNfaW5vdGlmeV9pbml0MS4gICovCisjZGVmaW5lIElOX0NMT0VYRUMgT19DTE9FWEVDCisjZGVmaW5lIElOX05PTkJMT0NLIE9fTk9OQkxPQ0sKKworCisjZW5kaWYJLyogX0xJTlVYX0lOT1RJRllfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lucHV0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaW5wdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjcwZTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lucHV0LmgKQEAgLTAsMCArMSwxMDg5IEBACisjaWZuZGVmIF9JTlBVVF9ICisjZGVmaW5lIF9JTlBVVF9ICisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMiBWb2p0ZWNoIFBhdmxpaworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIFRoZSBldmVudCBzdHJ1Y3R1cmUgaXRzZWxmCisgKi8KKworc3RydWN0IGlucHV0X2V2ZW50IHsKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lOworCV9fdTE2IHR5cGU7CisJX191MTYgY29kZTsKKwlfX3MzMiB2YWx1ZTsKK307CisKKy8qCisgKiBQcm90b2NvbCB2ZXJzaW9uLgorICovCisKKyNkZWZpbmUgRVZfVkVSU0lPTgkJMHgwMTAwMDEKKworLyoKKyAqIElPQ1RMcyAoMHgwMCAtIDB4N2YpCisgKi8KKworc3RydWN0IGlucHV0X2lkIHsKKwlfX3UxNiBidXN0eXBlOworCV9fdTE2IHZlbmRvcjsKKwlfX3UxNiBwcm9kdWN0OworCV9fdTE2IHZlcnNpb247Cit9OworCisvKioKKyAqIHN0cnVjdCBpbnB1dF9hYnNpbmZvIC0gdXNlZCBieSBFVklPQ0dBQlMvRVZJT0NTQUJTIGlvY3RscworICogQHZhbHVlOiBsYXRlc3QgcmVwb3J0ZWQgdmFsdWUgZm9yIHRoZSBheGlzLgorICogQG1pbmltdW06IHNwZWNpZmllcyBtaW5pbXVtIHZhbHVlIGZvciB0aGUgYXhpcy4KKyAqIEBtYXhpbXVtOiBzcGVjaWZpZXMgbWF4aW11bSB2YWx1ZSBmb3IgdGhlIGF4aXMuCisgKiBAZnV6ejogc3BlY2lmaWVzIGZ1enogdmFsdWUgdGhhdCBpcyB1c2VkIHRvIGZpbHRlciBub2lzZSBmcm9tCisgKgl0aGUgZXZlbnQgc3RyZWFtLgorICogQGZsYXQ6IHZhbHVlcyB0aGF0IGFyZSB3aXRoaW4gdGhpcyB2YWx1ZSB3aWxsIGJlIGRpc2NhcmRlZCBieQorICoJam95ZGV2IGludGVyZmFjZSBhbmQgcmVwb3J0ZWQgYXMgMCBpbnN0ZWFkLgorICogQHJlc29sdXRpb246IHNwZWNpZmllcyByZXNvbHV0aW9uIGZvciB0aGUgdmFsdWVzIHJlcG9ydGVkIGZvcgorICoJdGhlIGF4aXMuCisgKgorICogTm90ZSB0aGF0IGlucHV0IGNvcmUgZG9lcyBub3QgY2xhbXAgcmVwb3J0ZWQgdmFsdWVzIHRvIHRoZQorICogW21pbmltdW0sIG1heGltdW1dIGxpbWl0cywgc3VjaCB0YXNrIGlzIGxlZnQgdG8gdXNlcnNwYWNlLgorICoKKyAqIFJlc29sdXRpb24gZm9yIG1haW4gYXhlcyAoQUJTX1gsIEFCU19ZLCBBQlNfWikgaXMgcmVwb3J0ZWQgaW4KKyAqIHVuaXRzIHBlciBtaWxsaW1ldGVyICh1bml0cy9tbSksIHJlc29sdXRpb24gZm9yIHJvdGF0aW9uYWwgYXhlcworICogKEFCU19SWCwgQUJTX1JZLCBBQlNfUlopIGlzIHJlcG9ydGVkIGluIHVuaXRzIHBlciByYWRpYW4uCisgKi8KK3N0cnVjdCBpbnB1dF9hYnNpbmZvIHsKKwlfX3MzMiB2YWx1ZTsKKwlfX3MzMiBtaW5pbXVtOworCV9fczMyIG1heGltdW07CisJX19zMzIgZnV6ejsKKwlfX3MzMiBmbGF0OworCV9fczMyIHJlc29sdXRpb247Cit9OworCisvKioKKyAqIHN0cnVjdCBpbnB1dF9rZXltYXBfZW50cnkgLSB1c2VkIGJ5IEVWSU9DR0tFWUNPREUvRVZJT0NTS0VZQ09ERSBpb2N0bHMKKyAqIEBzY2FuY29kZTogc2NhbmNvZGUgcmVwcmVzZW50ZWQgaW4gbWFjaGluZS1lbmRpYW4gZm9ybS4KKyAqIEBsZW46IGxlbmd0aCBvZiB0aGUgc2NhbmNvZGUgdGhhdCByZXNpZGVzIGluIEBzY2FuY29kZSBidWZmZXIuCisgKiBAaW5kZXg6IGluZGV4IGluIHRoZSBrZXltYXAsIG1heSBiZSB1c2VkIGluc3RlYWQgb2Ygc2NhbmNvZGUKKyAqIEBmbGFnczogYWxsb3dzIHRvIHNwZWNpZnkgaG93IGtlcm5lbCBzaG91bGQgaGFuZGxlIHRoZSByZXF1ZXN0LiBGb3IKKyAqCWV4YW1wbGUsIHNldHRpbmcgSU5QVVRfS0VZTUFQX0JZX0lOREVYIGZsYWcgaW5kaWNhdGVzIHRoYXQga2VybmVsCisgKglzaG91bGQgcGVyZm9ybSBsb29rdXAgaW4ga2V5bWFwIGJ5IEBpbmRleCBpbnN0ZWFkIG9mIEBzY2FuY29kZQorICogQGtleWNvZGU6IGtleSBjb2RlIGFzc2lnbmVkIHRvIHRoaXMgc2NhbmNvZGUKKyAqCisgKiBUaGUgc3RydWN0dXJlIGlzIHVzZWQgdG8gcmV0cmlldmUgYW5kIG1vZGlmeSBrZXltYXAgZGF0YS4gVXNlcnMgaGF2ZQorICogb3B0aW9uIG9mIHBlcmZvcm1pbmcgbG9va3VwIGVpdGhlciBieSBAc2NhbmNvZGUgaXRzZWxmIG9yIGJ5IEBpbmRleAorICogaW4ga2V5bWFwIGVudHJ5LiBFVklPQ0dLRVlDT0RFIHdpbGwgYWxzbyByZXR1cm4gc2NhbmNvZGUgb3IgaW5kZXgKKyAqIChkZXBlbmRpbmcgb24gd2hpY2ggZWxlbWVudCB3YXMgdXNlZCB0byBwZXJmb3JtIGxvb2t1cCkuCisgKi8KK3N0cnVjdCBpbnB1dF9rZXltYXBfZW50cnkgeworI2RlZmluZSBJTlBVVF9LRVlNQVBfQllfSU5ERVgJKDEgPDwgMCkKKwlfX3U4ICBmbGFnczsKKwlfX3U4ICBsZW47CisJX191MTYgaW5kZXg7CisJX191MzIga2V5Y29kZTsKKwlfX3U4ICBzY2FuY29kZVszMl07Cit9OworCisjZGVmaW5lIEVWSU9DR1ZFUlNJT04JCV9JT1IoJ0UnLCAweDAxLCBpbnQpCQkJLyogZ2V0IGRyaXZlciB2ZXJzaW9uICovCisjZGVmaW5lIEVWSU9DR0lECQlfSU9SKCdFJywgMHgwMiwgc3RydWN0IGlucHV0X2lkKQkvKiBnZXQgZGV2aWNlIElEICovCisjZGVmaW5lIEVWSU9DR1JFUAkJX0lPUignRScsIDB4MDMsIHVuc2lnbmVkIGludFsyXSkJLyogZ2V0IHJlcGVhdCBzZXR0aW5ncyAqLworI2RlZmluZSBFVklPQ1NSRVAJCV9JT1coJ0UnLCAweDAzLCB1bnNpZ25lZCBpbnRbMl0pCS8qIHNldCByZXBlYXQgc2V0dGluZ3MgKi8KKworI2RlZmluZSBFVklPQ0dLRVlDT0RFCQlfSU9SKCdFJywgMHgwNCwgdW5zaWduZWQgaW50WzJdKSAgICAgICAgLyogZ2V0IGtleWNvZGUgKi8KKyNkZWZpbmUgRVZJT0NHS0VZQ09ERV9WMglfSU9SKCdFJywgMHgwNCwgc3RydWN0IGlucHV0X2tleW1hcF9lbnRyeSkKKyNkZWZpbmUgRVZJT0NTS0VZQ09ERQkJX0lPVygnRScsIDB4MDQsIHVuc2lnbmVkIGludFsyXSkgICAgICAgIC8qIHNldCBrZXljb2RlICovCisjZGVmaW5lIEVWSU9DU0tFWUNPREVfVjIJX0lPVygnRScsIDB4MDQsIHN0cnVjdCBpbnB1dF9rZXltYXBfZW50cnkpCisKKyNkZWZpbmUgRVZJT0NHTkFNRShsZW4pCQlfSU9DKF9JT0NfUkVBRCwgJ0UnLCAweDA2LCBsZW4pCQkvKiBnZXQgZGV2aWNlIG5hbWUgKi8KKyNkZWZpbmUgRVZJT0NHUEhZUyhsZW4pCQlfSU9DKF9JT0NfUkVBRCwgJ0UnLCAweDA3LCBsZW4pCQkvKiBnZXQgcGh5c2ljYWwgbG9jYXRpb24gKi8KKyNkZWZpbmUgRVZJT0NHVU5JUShsZW4pCQlfSU9DKF9JT0NfUkVBRCwgJ0UnLCAweDA4LCBsZW4pCQkvKiBnZXQgdW5pcXVlIGlkZW50aWZpZXIgKi8KKworI2RlZmluZSBFVklPQ0dLRVkobGVuKQkJX0lPQyhfSU9DX1JFQUQsICdFJywgMHgxOCwgbGVuKQkJLyogZ2V0IGdsb2JhbCBrZXkgc3RhdGUgKi8KKyNkZWZpbmUgRVZJT0NHTEVEKGxlbikJCV9JT0MoX0lPQ19SRUFELCAnRScsIDB4MTksIGxlbikJCS8qIGdldCBhbGwgTEVEcyAqLworI2RlZmluZSBFVklPQ0dTTkQobGVuKQkJX0lPQyhfSU9DX1JFQUQsICdFJywgMHgxYSwgbGVuKQkJLyogZ2V0IGFsbCBzb3VuZHMgc3RhdHVzICovCisjZGVmaW5lIEVWSU9DR1NXKGxlbikJCV9JT0MoX0lPQ19SRUFELCAnRScsIDB4MWIsIGxlbikJCS8qIGdldCBhbGwgc3dpdGNoIHN0YXRlcyAqLworCisjZGVmaW5lIEVWSU9DR0JJVChldixsZW4pCV9JT0MoX0lPQ19SRUFELCAnRScsIDB4MjAgKyBldiwgbGVuKQkvKiBnZXQgZXZlbnQgYml0cyAqLworI2RlZmluZSBFVklPQ0dBQlMoYWJzKQkJX0lPUignRScsIDB4NDAgKyBhYnMsIHN0cnVjdCBpbnB1dF9hYnNpbmZvKQkvKiBnZXQgYWJzIHZhbHVlL2xpbWl0cyAqLworI2RlZmluZSBFVklPQ1NBQlMoYWJzKQkJX0lPVygnRScsIDB4YzAgKyBhYnMsIHN0cnVjdCBpbnB1dF9hYnNpbmZvKQkvKiBzZXQgYWJzIHZhbHVlL2xpbWl0cyAqLworCisjZGVmaW5lIEVWSU9DU0ZGCQlfSU9DKF9JT0NfV1JJVEUsICdFJywgMHg4MCwgc2l6ZW9mKHN0cnVjdCBmZl9lZmZlY3QpKQkvKiBzZW5kIGEgZm9yY2UgZWZmZWN0IHRvIGEgZm9yY2UgZmVlZGJhY2sgZGV2aWNlICovCisjZGVmaW5lIEVWSU9DUk1GRgkJX0lPVygnRScsIDB4ODEsIGludCkJCQkvKiBFcmFzZSBhIGZvcmNlIGVmZmVjdCAqLworI2RlZmluZSBFVklPQ0dFRkZFQ1RTCQlfSU9SKCdFJywgMHg4NCwgaW50KQkJCS8qIFJlcG9ydCBudW1iZXIgb2YgZWZmZWN0cyBwbGF5YWJsZSBhdCB0aGUgc2FtZSB0aW1lICovCisKKyNkZWZpbmUgRVZJT0NHUkFCCQlfSU9XKCdFJywgMHg5MCwgaW50KQkJCS8qIEdyYWIvUmVsZWFzZSBkZXZpY2UgKi8KKworLyoKKyAqIEV2ZW50IHR5cGVzCisgKi8KKworI2RlZmluZSBFVl9TWU4JCQkweDAwCisjZGVmaW5lIEVWX0tFWQkJCTB4MDEKKyNkZWZpbmUgRVZfUkVMCQkJMHgwMgorI2RlZmluZSBFVl9BQlMJCQkweDAzCisjZGVmaW5lIEVWX01TQwkJCTB4MDQKKyNkZWZpbmUgRVZfU1cJCQkweDA1CisjZGVmaW5lIEVWX0xFRAkJCTB4MTEKKyNkZWZpbmUgRVZfU05ECQkJMHgxMgorI2RlZmluZSBFVl9SRVAJCQkweDE0CisjZGVmaW5lIEVWX0ZGCQkJMHgxNQorI2RlZmluZSBFVl9QV1IJCQkweDE2CisjZGVmaW5lIEVWX0ZGX1NUQVRVUwkJMHgxNworI2RlZmluZSBFVl9NQVgJCQkweDFmCisjZGVmaW5lIEVWX0NOVAkJCShFVl9NQVgrMSkKKworLyoKKyAqIFN5bmNocm9uaXphdGlvbiBldmVudHMuCisgKi8KKworI2RlZmluZSBTWU5fUkVQT1JUCQkwCisjZGVmaW5lIFNZTl9DT05GSUcJCTEKKyNkZWZpbmUgU1lOX01UX1JFUE9SVAkJMgorCisvKgorICogS2V5cyBhbmQgYnV0dG9ucworICoKKyAqIE1vc3Qgb2YgdGhlIGtleXMvYnV0dG9ucyBhcmUgbW9kZWxlZCBhZnRlciBVU0IgSFVUIDEuMTIKKyAqIChzZWUgaHR0cDovL3d3dy51c2Iub3JnL2RldmVsb3BlcnMvaGlkcGFnZSkuCisgKiBBYmJyZXZpYXRpb25zIGluIHRoZSBjb21tZW50czoKKyAqIEFDIC0gQXBwbGljYXRpb24gQ29udHJvbAorICogQUwgLSBBcHBsaWNhdGlvbiBMYXVuY2ggQnV0dG9uCisgKiBTQyAtIFN5c3RlbSBDb250cm9sCisgKi8KKworI2RlZmluZSBLRVlfUkVTRVJWRUQJCTAKKyNkZWZpbmUgS0VZX0VTQwkJCTEKKyNkZWZpbmUgS0VZXzEJCQkyCisjZGVmaW5lIEtFWV8yCQkJMworI2RlZmluZSBLRVlfMwkJCTQKKyNkZWZpbmUgS0VZXzQJCQk1CisjZGVmaW5lIEtFWV81CQkJNgorI2RlZmluZSBLRVlfNgkJCTcKKyNkZWZpbmUgS0VZXzcJCQk4CisjZGVmaW5lIEtFWV84CQkJOQorI2RlZmluZSBLRVlfOQkJCTEwCisjZGVmaW5lIEtFWV8wCQkJMTEKKyNkZWZpbmUgS0VZX01JTlVTCQkxMgorI2RlZmluZSBLRVlfRVFVQUwJCTEzCisjZGVmaW5lIEtFWV9CQUNLU1BBQ0UJCTE0CisjZGVmaW5lIEtFWV9UQUIJCQkxNQorI2RlZmluZSBLRVlfUQkJCTE2CisjZGVmaW5lIEtFWV9XCQkJMTcKKyNkZWZpbmUgS0VZX0UJCQkxOAorI2RlZmluZSBLRVlfUgkJCTE5CisjZGVmaW5lIEtFWV9UCQkJMjAKKyNkZWZpbmUgS0VZX1kJCQkyMQorI2RlZmluZSBLRVlfVQkJCTIyCisjZGVmaW5lIEtFWV9JCQkJMjMKKyNkZWZpbmUgS0VZX08JCQkyNAorI2RlZmluZSBLRVlfUAkJCTI1CisjZGVmaW5lIEtFWV9MRUZUQlJBQ0UJCTI2CisjZGVmaW5lIEtFWV9SSUdIVEJSQUNFCQkyNworI2RlZmluZSBLRVlfRU5URVIJCTI4CisjZGVmaW5lIEtFWV9MRUZUQ1RSTAkJMjkKKyNkZWZpbmUgS0VZX0EJCQkzMAorI2RlZmluZSBLRVlfUwkJCTMxCisjZGVmaW5lIEtFWV9ECQkJMzIKKyNkZWZpbmUgS0VZX0YJCQkzMworI2RlZmluZSBLRVlfRwkJCTM0CisjZGVmaW5lIEtFWV9ICQkJMzUKKyNkZWZpbmUgS0VZX0oJCQkzNgorI2RlZmluZSBLRVlfSwkJCTM3CisjZGVmaW5lIEtFWV9MCQkJMzgKKyNkZWZpbmUgS0VZX1NFTUlDT0xPTgkJMzkKKyNkZWZpbmUgS0VZX0FQT1NUUk9QSEUJCTQwCisjZGVmaW5lIEtFWV9HUkFWRQkJNDEKKyNkZWZpbmUgS0VZX0xFRlRTSElGVAkJNDIKKyNkZWZpbmUgS0VZX0JBQ0tTTEFTSAkJNDMKKyNkZWZpbmUgS0VZX1oJCQk0NAorI2RlZmluZSBLRVlfWAkJCTQ1CisjZGVmaW5lIEtFWV9DCQkJNDYKKyNkZWZpbmUgS0VZX1YJCQk0NworI2RlZmluZSBLRVlfQgkJCTQ4CisjZGVmaW5lIEtFWV9OCQkJNDkKKyNkZWZpbmUgS0VZX00JCQk1MAorI2RlZmluZSBLRVlfQ09NTUEJCTUxCisjZGVmaW5lIEtFWV9ET1QJCQk1MgorI2RlZmluZSBLRVlfU0xBU0gJCTUzCisjZGVmaW5lIEtFWV9SSUdIVFNISUZUCQk1NAorI2RlZmluZSBLRVlfS1BBU1RFUklTSwkJNTUKKyNkZWZpbmUgS0VZX0xFRlRBTFQJCTU2CisjZGVmaW5lIEtFWV9TUEFDRQkJNTcKKyNkZWZpbmUgS0VZX0NBUFNMT0NLCQk1OAorI2RlZmluZSBLRVlfRjEJCQk1OQorI2RlZmluZSBLRVlfRjIJCQk2MAorI2RlZmluZSBLRVlfRjMJCQk2MQorI2RlZmluZSBLRVlfRjQJCQk2MgorI2RlZmluZSBLRVlfRjUJCQk2MworI2RlZmluZSBLRVlfRjYJCQk2NAorI2RlZmluZSBLRVlfRjcJCQk2NQorI2RlZmluZSBLRVlfRjgJCQk2NgorI2RlZmluZSBLRVlfRjkJCQk2NworI2RlZmluZSBLRVlfRjEwCQkJNjgKKyNkZWZpbmUgS0VZX05VTUxPQ0sJCTY5CisjZGVmaW5lIEtFWV9TQ1JPTExMT0NLCQk3MAorI2RlZmluZSBLRVlfS1A3CQkJNzEKKyNkZWZpbmUgS0VZX0tQOAkJCTcyCisjZGVmaW5lIEtFWV9LUDkJCQk3MworI2RlZmluZSBLRVlfS1BNSU5VUwkJNzQKKyNkZWZpbmUgS0VZX0tQNAkJCTc1CisjZGVmaW5lIEtFWV9LUDUJCQk3NgorI2RlZmluZSBLRVlfS1A2CQkJNzcKKyNkZWZpbmUgS0VZX0tQUExVUwkJNzgKKyNkZWZpbmUgS0VZX0tQMQkJCTc5CisjZGVmaW5lIEtFWV9LUDIJCQk4MAorI2RlZmluZSBLRVlfS1AzCQkJODEKKyNkZWZpbmUgS0VZX0tQMAkJCTgyCisjZGVmaW5lIEtFWV9LUERPVAkJODMKKworI2RlZmluZSBLRVlfWkVOS0FLVUhBTktBS1UJODUKKyNkZWZpbmUgS0VZXzEwMk5ECQk4NgorI2RlZmluZSBLRVlfRjExCQkJODcKKyNkZWZpbmUgS0VZX0YxMgkJCTg4CisjZGVmaW5lIEtFWV9STwkJCTg5CisjZGVmaW5lIEtFWV9LQVRBS0FOQQkJOTAKKyNkZWZpbmUgS0VZX0hJUkFHQU5BCQk5MQorI2RlZmluZSBLRVlfSEVOS0FOCQk5MgorI2RlZmluZSBLRVlfS0FUQUtBTkFISVJBR0FOQQk5MworI2RlZmluZSBLRVlfTVVIRU5LQU4JCTk0CisjZGVmaW5lIEtFWV9LUEpQQ09NTUEJCTk1CisjZGVmaW5lIEtFWV9LUEVOVEVSCQk5NgorI2RlZmluZSBLRVlfUklHSFRDVFJMCQk5NworI2RlZmluZSBLRVlfS1BTTEFTSAkJOTgKKyNkZWZpbmUgS0VZX1NZU1JRCQk5OQorI2RlZmluZSBLRVlfUklHSFRBTFQJCTEwMAorI2RlZmluZSBLRVlfTElORUZFRUQJCTEwMQorI2RlZmluZSBLRVlfSE9NRQkJMTAyCisjZGVmaW5lIEtFWV9VUAkJCTEwMworI2RlZmluZSBLRVlfUEFHRVVQCQkxMDQKKyNkZWZpbmUgS0VZX0xFRlQJCTEwNQorI2RlZmluZSBLRVlfUklHSFQJCTEwNgorI2RlZmluZSBLRVlfRU5ECQkJMTA3CisjZGVmaW5lIEtFWV9ET1dOCQkxMDgKKyNkZWZpbmUgS0VZX1BBR0VET1dOCQkxMDkKKyNkZWZpbmUgS0VZX0lOU0VSVAkJMTEwCisjZGVmaW5lIEtFWV9ERUxFVEUJCTExMQorI2RlZmluZSBLRVlfTUFDUk8JCTExMgorI2RlZmluZSBLRVlfTVVURQkJMTEzCisjZGVmaW5lIEtFWV9WT0xVTUVET1dOCQkxMTQKKyNkZWZpbmUgS0VZX1ZPTFVNRVVQCQkxMTUKKyNkZWZpbmUgS0VZX1BPV0VSCQkxMTYJLyogU0MgU3lzdGVtIFBvd2VyIERvd24gKi8KKyNkZWZpbmUgS0VZX0tQRVFVQUwJCTExNworI2RlZmluZSBLRVlfS1BQTFVTTUlOVVMJCTExOAorI2RlZmluZSBLRVlfUEFVU0UJCTExOQorI2RlZmluZSBLRVlfU0NBTEUJCTEyMAkvKiBBTCBDb21waXogU2NhbGUgKEV4cG9zZSkgKi8KKworI2RlZmluZSBLRVlfS1BDT01NQQkJMTIxCisjZGVmaW5lIEtFWV9IQU5HRVVMCQkxMjIKKyNkZWZpbmUgS0VZX0hBTkdVRUwJCUtFWV9IQU5HRVVMCisjZGVmaW5lIEtFWV9IQU5KQQkJMTIzCisjZGVmaW5lIEtFWV9ZRU4JCQkxMjQKKyNkZWZpbmUgS0VZX0xFRlRNRVRBCQkxMjUKKyNkZWZpbmUgS0VZX1JJR0hUTUVUQQkJMTI2CisjZGVmaW5lIEtFWV9DT01QT1NFCQkxMjcKKworI2RlZmluZSBLRVlfU1RPUAkJMTI4CS8qIEFDIFN0b3AgKi8KKyNkZWZpbmUgS0VZX0FHQUlOCQkxMjkKKyNkZWZpbmUgS0VZX1BST1BTCQkxMzAJLyogQUMgUHJvcGVydGllcyAqLworI2RlZmluZSBLRVlfVU5ETwkJMTMxCS8qIEFDIFVuZG8gKi8KKyNkZWZpbmUgS0VZX0ZST05UCQkxMzIKKyNkZWZpbmUgS0VZX0NPUFkJCTEzMwkvKiBBQyBDb3B5ICovCisjZGVmaW5lIEtFWV9PUEVOCQkxMzQJLyogQUMgT3BlbiAqLworI2RlZmluZSBLRVlfUEFTVEUJCTEzNQkvKiBBQyBQYXN0ZSAqLworI2RlZmluZSBLRVlfRklORAkJMTM2CS8qIEFDIFNlYXJjaCAqLworI2RlZmluZSBLRVlfQ1VUCQkJMTM3CS8qIEFDIEN1dCAqLworI2RlZmluZSBLRVlfSEVMUAkJMTM4CS8qIEFMIEludGVncmF0ZWQgSGVscCBDZW50ZXIgKi8KKyNkZWZpbmUgS0VZX01FTlUJCTEzOQkvKiBNZW51IChzaG93IG1lbnUpICovCisjZGVmaW5lIEtFWV9DQUxDCQkxNDAJLyogQUwgQ2FsY3VsYXRvciAqLworI2RlZmluZSBLRVlfU0VUVVAJCTE0MQorI2RlZmluZSBLRVlfU0xFRVAJCTE0MgkvKiBTQyBTeXN0ZW0gU2xlZXAgKi8KKyNkZWZpbmUgS0VZX1dBS0VVUAkJMTQzCS8qIFN5c3RlbSBXYWtlIFVwICovCisjZGVmaW5lIEtFWV9GSUxFCQkxNDQJLyogQUwgTG9jYWwgTWFjaGluZSBCcm93c2VyICovCisjZGVmaW5lIEtFWV9TRU5ERklMRQkJMTQ1CisjZGVmaW5lIEtFWV9ERUxFVEVGSUxFCQkxNDYKKyNkZWZpbmUgS0VZX1hGRVIJCTE0NworI2RlZmluZSBLRVlfUFJPRzEJCTE0OAorI2RlZmluZSBLRVlfUFJPRzIJCTE0OQorI2RlZmluZSBLRVlfV1dXCQkJMTUwCS8qIEFMIEludGVybmV0IEJyb3dzZXIgKi8KKyNkZWZpbmUgS0VZX01TRE9TCQkxNTEKKyNkZWZpbmUgS0VZX0NPRkZFRQkJMTUyCS8qIEFMIFRlcm1pbmFsIExvY2svU2NyZWVuc2F2ZXIgKi8KKyNkZWZpbmUgS0VZX1NDUkVFTkxPQ0sJCUtFWV9DT0ZGRUUKKyNkZWZpbmUgS0VZX0RJUkVDVElPTgkJMTUzCisjZGVmaW5lIEtFWV9DWUNMRVdJTkRPV1MJMTU0CisjZGVmaW5lIEtFWV9NQUlMCQkxNTUKKyNkZWZpbmUgS0VZX0JPT0tNQVJLUwkJMTU2CS8qIEFDIEJvb2ttYXJrcyAqLworI2RlZmluZSBLRVlfQ09NUFVURVIJCTE1NworI2RlZmluZSBLRVlfQkFDSwkJMTU4CS8qIEFDIEJhY2sgKi8KKyNkZWZpbmUgS0VZX0ZPUldBUkQJCTE1OQkvKiBBQyBGb3J3YXJkICovCisjZGVmaW5lIEtFWV9DTE9TRUNECQkxNjAKKyNkZWZpbmUgS0VZX0VKRUNUQ0QJCTE2MQorI2RlZmluZSBLRVlfRUpFQ1RDTE9TRUNECTE2MgorI2RlZmluZSBLRVlfTkVYVFNPTkcJCTE2MworI2RlZmluZSBLRVlfUExBWVBBVVNFCQkxNjQKKyNkZWZpbmUgS0VZX1BSRVZJT1VTU09ORwkxNjUKKyNkZWZpbmUgS0VZX1NUT1BDRAkJMTY2CisjZGVmaW5lIEtFWV9SRUNPUkQJCTE2NworI2RlZmluZSBLRVlfUkVXSU5ECQkxNjgKKyNkZWZpbmUgS0VZX1BIT05FCQkxNjkJLyogTWVkaWEgU2VsZWN0IFRlbGVwaG9uZSAqLworI2RlZmluZSBLRVlfSVNPCQkJMTcwCisjZGVmaW5lIEtFWV9DT05GSUcJCTE3MQkvKiBBTCBDb25zdW1lciBDb250cm9sIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgS0VZX0hPTUVQQUdFCQkxNzIJLyogQUMgSG9tZSAqLworI2RlZmluZSBLRVlfUkVGUkVTSAkJMTczCS8qIEFDIFJlZnJlc2ggKi8KKyNkZWZpbmUgS0VZX0VYSVQJCTE3NAkvKiBBQyBFeGl0ICovCisjZGVmaW5lIEtFWV9NT1ZFCQkxNzUKKyNkZWZpbmUgS0VZX0VESVQJCTE3NgorI2RlZmluZSBLRVlfU0NST0xMVVAJCTE3NworI2RlZmluZSBLRVlfU0NST0xMRE9XTgkJMTc4CisjZGVmaW5lIEtFWV9LUExFRlRQQVJFTgkJMTc5CisjZGVmaW5lIEtFWV9LUFJJR0hUUEFSRU4JMTgwCisjZGVmaW5lIEtFWV9ORVcJCQkxODEJLyogQUMgTmV3ICovCisjZGVmaW5lIEtFWV9SRURPCQkxODIJLyogQUMgUmVkby9SZXBlYXQgKi8KKworI2RlZmluZSBLRVlfRjEzCQkJMTgzCisjZGVmaW5lIEtFWV9GMTQJCQkxODQKKyNkZWZpbmUgS0VZX0YxNQkJCTE4NQorI2RlZmluZSBLRVlfRjE2CQkJMTg2CisjZGVmaW5lIEtFWV9GMTcJCQkxODcKKyNkZWZpbmUgS0VZX0YxOAkJCTE4OAorI2RlZmluZSBLRVlfRjE5CQkJMTg5CisjZGVmaW5lIEtFWV9GMjAJCQkxOTAKKyNkZWZpbmUgS0VZX0YyMQkJCTE5MQorI2RlZmluZSBLRVlfRjIyCQkJMTkyCisjZGVmaW5lIEtFWV9GMjMJCQkxOTMKKyNkZWZpbmUgS0VZX0YyNAkJCTE5NAorCisjZGVmaW5lIEtFWV9QTEFZQ0QJCTIwMAorI2RlZmluZSBLRVlfUEFVU0VDRAkJMjAxCisjZGVmaW5lIEtFWV9QUk9HMwkJMjAyCisjZGVmaW5lIEtFWV9QUk9HNAkJMjAzCisjZGVmaW5lIEtFWV9EQVNIQk9BUkQJCTIwNAkvKiBBTCBEYXNoYm9hcmQgKi8KKyNkZWZpbmUgS0VZX1NVU1BFTkQJCTIwNQorI2RlZmluZSBLRVlfQ0xPU0UJCTIwNgkvKiBBQyBDbG9zZSAqLworI2RlZmluZSBLRVlfUExBWQkJMjA3CisjZGVmaW5lIEtFWV9GQVNURk9SV0FSRAkJMjA4CisjZGVmaW5lIEtFWV9CQVNTQk9PU1QJCTIwOQorI2RlZmluZSBLRVlfUFJJTlQJCTIxMAkvKiBBQyBQcmludCAqLworI2RlZmluZSBLRVlfSFAJCQkyMTEKKyNkZWZpbmUgS0VZX0NBTUVSQQkJMjEyCisjZGVmaW5lIEtFWV9TT1VORAkJMjEzCisjZGVmaW5lIEtFWV9RVUVTVElPTgkJMjE0CisjZGVmaW5lIEtFWV9FTUFJTAkJMjE1CisjZGVmaW5lIEtFWV9DSEFUCQkyMTYKKyNkZWZpbmUgS0VZX1NFQVJDSAkJMjE3CisjZGVmaW5lIEtFWV9DT05ORUNUCQkyMTgKKyNkZWZpbmUgS0VZX0ZJTkFOQ0UJCTIxOQkvKiBBTCBDaGVja2Jvb2svRmluYW5jZSAqLworI2RlZmluZSBLRVlfU1BPUlQJCTIyMAorI2RlZmluZSBLRVlfU0hPUAkJMjIxCisjZGVmaW5lIEtFWV9BTFRFUkFTRQkJMjIyCisjZGVmaW5lIEtFWV9DQU5DRUwJCTIyMwkvKiBBQyBDYW5jZWwgKi8KKyNkZWZpbmUgS0VZX0JSSUdIVE5FU1NET1dOCTIyNAorI2RlZmluZSBLRVlfQlJJR0hUTkVTU1VQCTIyNQorI2RlZmluZSBLRVlfTUVESUEJCTIyNgorCisjZGVmaW5lIEtFWV9TV0lUQ0hWSURFT01PREUJMjI3CS8qIEN5Y2xlIGJldHdlZW4gYXZhaWxhYmxlIHZpZGVvCisJCQkJCSAgIG91dHB1dHMgKE1vbml0b3IvTENEL1RWLW91dC9ldGMpICovCisjZGVmaW5lIEtFWV9LQkRJTExVTVRPR0dMRQkyMjgKKyNkZWZpbmUgS0VZX0tCRElMTFVNRE9XTgkyMjkKKyNkZWZpbmUgS0VZX0tCRElMTFVNVVAJCTIzMAorCisjZGVmaW5lIEtFWV9TRU5ECQkyMzEJLyogQUMgU2VuZCAqLworI2RlZmluZSBLRVlfUkVQTFkJCTIzMgkvKiBBQyBSZXBseSAqLworI2RlZmluZSBLRVlfRk9SV0FSRE1BSUwJCTIzMwkvKiBBQyBGb3J3YXJkIE1zZyAqLworI2RlZmluZSBLRVlfU0FWRQkJMjM0CS8qIEFDIFNhdmUgKi8KKyNkZWZpbmUgS0VZX0RPQ1VNRU5UUwkJMjM1CisKKyNkZWZpbmUgS0VZX0JBVFRFUlkJCTIzNgorCisjZGVmaW5lIEtFWV9CTFVFVE9PVEgJCTIzNworI2RlZmluZSBLRVlfV0xBTgkJMjM4CisjZGVmaW5lIEtFWV9VV0IJCQkyMzkKKworI2RlZmluZSBLRVlfVU5LTk9XTgkJMjQwCisKKyNkZWZpbmUgS0VZX1ZJREVPX05FWFQJCTI0MQkvKiBkcml2ZSBuZXh0IHZpZGVvIHNvdXJjZSAqLworI2RlZmluZSBLRVlfVklERU9fUFJFVgkJMjQyCS8qIGRyaXZlIHByZXZpb3VzIHZpZGVvIHNvdXJjZSAqLworI2RlZmluZSBLRVlfQlJJR0hUTkVTU19DWUNMRQkyNDMJLyogYnJpZ2h0bmVzcyB1cCwgYWZ0ZXIgbWF4IGlzIG1pbiAqLworI2RlZmluZSBLRVlfQlJJR0hUTkVTU19aRVJPCTI0NAkvKiBicmlnaHRuZXNzIG9mZiwgdXNlIGFtYmllbnQgKi8KKyNkZWZpbmUgS0VZX0RJU1BMQVlfT0ZGCQkyNDUJLyogZGlzcGxheSBkZXZpY2UgdG8gb2ZmIHN0YXRlICovCisKKyNkZWZpbmUgS0VZX1dJTUFYCQkyNDYKKyNkZWZpbmUgS0VZX1JGS0lMTAkJMjQ3CS8qIEtleSB0aGF0IGNvbnRyb2xzIGFsbCByYWRpb3MgKi8KKworLyogQ29kZSAyNTUgaXMgcmVzZXJ2ZWQgZm9yIHNwZWNpYWwgbmVlZHMgb2YgQVQga2V5Ym9hcmQgZHJpdmVyICovCisKKyNkZWZpbmUgQlROX01JU0MJCTB4MTAwCisjZGVmaW5lIEJUTl8wCQkJMHgxMDAKKyNkZWZpbmUgQlROXzEJCQkweDEwMQorI2RlZmluZSBCVE5fMgkJCTB4MTAyCisjZGVmaW5lIEJUTl8zCQkJMHgxMDMKKyNkZWZpbmUgQlROXzQJCQkweDEwNAorI2RlZmluZSBCVE5fNQkJCTB4MTA1CisjZGVmaW5lIEJUTl82CQkJMHgxMDYKKyNkZWZpbmUgQlROXzcJCQkweDEwNworI2RlZmluZSBCVE5fOAkJCTB4MTA4CisjZGVmaW5lIEJUTl85CQkJMHgxMDkKKworI2RlZmluZSBCVE5fTU9VU0UJCTB4MTEwCisjZGVmaW5lIEJUTl9MRUZUCQkweDExMAorI2RlZmluZSBCVE5fUklHSFQJCTB4MTExCisjZGVmaW5lIEJUTl9NSURETEUJCTB4MTEyCisjZGVmaW5lIEJUTl9TSURFCQkweDExMworI2RlZmluZSBCVE5fRVhUUkEJCTB4MTE0CisjZGVmaW5lIEJUTl9GT1JXQVJECQkweDExNQorI2RlZmluZSBCVE5fQkFDSwkJMHgxMTYKKyNkZWZpbmUgQlROX1RBU0sJCTB4MTE3CisKKyNkZWZpbmUgQlROX0pPWVNUSUNLCQkweDEyMAorI2RlZmluZSBCVE5fVFJJR0dFUgkJMHgxMjAKKyNkZWZpbmUgQlROX1RIVU1CCQkweDEyMQorI2RlZmluZSBCVE5fVEhVTUIyCQkweDEyMgorI2RlZmluZSBCVE5fVE9QCQkJMHgxMjMKKyNkZWZpbmUgQlROX1RPUDIJCTB4MTI0CisjZGVmaW5lIEJUTl9QSU5LSUUJCTB4MTI1CisjZGVmaW5lIEJUTl9CQVNFCQkweDEyNgorI2RlZmluZSBCVE5fQkFTRTIJCTB4MTI3CisjZGVmaW5lIEJUTl9CQVNFMwkJMHgxMjgKKyNkZWZpbmUgQlROX0JBU0U0CQkweDEyOQorI2RlZmluZSBCVE5fQkFTRTUJCTB4MTJhCisjZGVmaW5lIEJUTl9CQVNFNgkJMHgxMmIKKyNkZWZpbmUgQlROX0RFQUQJCTB4MTJmCisKKyNkZWZpbmUgQlROX0dBTUVQQUQJCTB4MTMwCisjZGVmaW5lIEJUTl9BCQkJMHgxMzAKKyNkZWZpbmUgQlROX0IJCQkweDEzMQorI2RlZmluZSBCVE5fQwkJCTB4MTMyCisjZGVmaW5lIEJUTl9YCQkJMHgxMzMKKyNkZWZpbmUgQlROX1kJCQkweDEzNAorI2RlZmluZSBCVE5fWgkJCTB4MTM1CisjZGVmaW5lIEJUTl9UTAkJCTB4MTM2CisjZGVmaW5lIEJUTl9UUgkJCTB4MTM3CisjZGVmaW5lIEJUTl9UTDIJCQkweDEzOAorI2RlZmluZSBCVE5fVFIyCQkJMHgxMzkKKyNkZWZpbmUgQlROX1NFTEVDVAkJMHgxM2EKKyNkZWZpbmUgQlROX1NUQVJUCQkweDEzYgorI2RlZmluZSBCVE5fTU9ERQkJMHgxM2MKKyNkZWZpbmUgQlROX1RIVU1CTAkJMHgxM2QKKyNkZWZpbmUgQlROX1RIVU1CUgkJMHgxM2UKKworI2RlZmluZSBCVE5fRElHSQkJMHgxNDAKKyNkZWZpbmUgQlROX1RPT0xfUEVOCQkweDE0MAorI2RlZmluZSBCVE5fVE9PTF9SVUJCRVIJCTB4MTQxCisjZGVmaW5lIEJUTl9UT09MX0JSVVNICQkweDE0MgorI2RlZmluZSBCVE5fVE9PTF9QRU5DSUwJCTB4MTQzCisjZGVmaW5lIEJUTl9UT09MX0FJUkJSVVNICTB4MTQ0CisjZGVmaW5lIEJUTl9UT09MX0ZJTkdFUgkJMHgxNDUKKyNkZWZpbmUgQlROX1RPT0xfTU9VU0UJCTB4MTQ2CisjZGVmaW5lIEJUTl9UT09MX0xFTlMJCTB4MTQ3CisjZGVmaW5lIEJUTl9UT1VDSAkJMHgxNGEKKyNkZWZpbmUgQlROX1NUWUxVUwkJMHgxNGIKKyNkZWZpbmUgQlROX1NUWUxVUzIJCTB4MTRjCisjZGVmaW5lIEJUTl9UT09MX0RPVUJMRVRBUAkweDE0ZAorI2RlZmluZSBCVE5fVE9PTF9UUklQTEVUQVAJMHgxNGUKKyNkZWZpbmUgQlROX1RPT0xfUVVBRFRBUAkweDE0ZgkvKiBGb3VyIGZpbmdlcnMgb24gdHJhY2twYWQgKi8KKworI2RlZmluZSBCVE5fV0hFRUwJCTB4MTUwCisjZGVmaW5lIEJUTl9HRUFSX0RPV04JCTB4MTUwCisjZGVmaW5lIEJUTl9HRUFSX1VQCQkweDE1MQorCisjZGVmaW5lIEtFWV9PSwkJCTB4MTYwCisjZGVmaW5lIEtFWV9TRUxFQ1QJCTB4MTYxCisjZGVmaW5lIEtFWV9HT1RPCQkweDE2MgorI2RlZmluZSBLRVlfQ0xFQVIJCTB4MTYzCisjZGVmaW5lIEtFWV9QT1dFUjIJCTB4MTY0CisjZGVmaW5lIEtFWV9PUFRJT04JCTB4MTY1CisjZGVmaW5lIEtFWV9JTkZPCQkweDE2NgkvKiBBTCBPRU0gRmVhdHVyZXMvVGlwcy9UdXRvcmlhbCAqLworI2RlZmluZSBLRVlfVElNRQkJMHgxNjcKKyNkZWZpbmUgS0VZX1ZFTkRPUgkJMHgxNjgKKyNkZWZpbmUgS0VZX0FSQ0hJVkUJCTB4MTY5CisjZGVmaW5lIEtFWV9QUk9HUkFNCQkweDE2YQkvKiBNZWRpYSBTZWxlY3QgUHJvZ3JhbSBHdWlkZSAqLworI2RlZmluZSBLRVlfQ0hBTk5FTAkJMHgxNmIKKyNkZWZpbmUgS0VZX0ZBVk9SSVRFUwkJMHgxNmMKKyNkZWZpbmUgS0VZX0VQRwkJCTB4MTZkCisjZGVmaW5lIEtFWV9QVlIJCQkweDE2ZQkvKiBNZWRpYSBTZWxlY3QgSG9tZSAqLworI2RlZmluZSBLRVlfTUhQCQkJMHgxNmYKKyNkZWZpbmUgS0VZX0xBTkdVQUdFCQkweDE3MAorI2RlZmluZSBLRVlfVElUTEUJCTB4MTcxCisjZGVmaW5lIEtFWV9TVUJUSVRMRQkJMHgxNzIKKyNkZWZpbmUgS0VZX0FOR0xFCQkweDE3MworI2RlZmluZSBLRVlfWk9PTQkJMHgxNzQKKyNkZWZpbmUgS0VZX01PREUJCTB4MTc1CisjZGVmaW5lIEtFWV9LRVlCT0FSRAkJMHgxNzYKKyNkZWZpbmUgS0VZX1NDUkVFTgkJMHgxNzcKKyNkZWZpbmUgS0VZX1BDCQkJMHgxNzgJLyogTWVkaWEgU2VsZWN0IENvbXB1dGVyICovCisjZGVmaW5lIEtFWV9UVgkJCTB4MTc5CS8qIE1lZGlhIFNlbGVjdCBUViAqLworI2RlZmluZSBLRVlfVFYyCQkJMHgxN2EJLyogTWVkaWEgU2VsZWN0IENhYmxlICovCisjZGVmaW5lIEtFWV9WQ1IJCQkweDE3YgkvKiBNZWRpYSBTZWxlY3QgVkNSICovCisjZGVmaW5lIEtFWV9WQ1IyCQkweDE3YwkvKiBWQ1IgUGx1cyAqLworI2RlZmluZSBLRVlfU0FUCQkJMHgxN2QJLyogTWVkaWEgU2VsZWN0IFNhdGVsbGl0ZSAqLworI2RlZmluZSBLRVlfU0FUMgkJMHgxN2UKKyNkZWZpbmUgS0VZX0NECQkJMHgxN2YJLyogTWVkaWEgU2VsZWN0IENEICovCisjZGVmaW5lIEtFWV9UQVBFCQkweDE4MAkvKiBNZWRpYSBTZWxlY3QgVGFwZSAqLworI2RlZmluZSBLRVlfUkFESU8JCTB4MTgxCisjZGVmaW5lIEtFWV9UVU5FUgkJMHgxODIJLyogTWVkaWEgU2VsZWN0IFR1bmVyICovCisjZGVmaW5lIEtFWV9QTEFZRVIJCTB4MTgzCisjZGVmaW5lIEtFWV9URVhUCQkweDE4NAorI2RlZmluZSBLRVlfRFZECQkJMHgxODUJLyogTWVkaWEgU2VsZWN0IERWRCAqLworI2RlZmluZSBLRVlfQVVYCQkJMHgxODYKKyNkZWZpbmUgS0VZX01QMwkJCTB4MTg3CisjZGVmaW5lIEtFWV9BVURJTwkJMHgxODgKKyNkZWZpbmUgS0VZX1ZJREVPCQkweDE4OQorI2RlZmluZSBLRVlfRElSRUNUT1JZCQkweDE4YQorI2RlZmluZSBLRVlfTElTVAkJMHgxOGIKKyNkZWZpbmUgS0VZX01FTU8JCTB4MThjCS8qIE1lZGlhIFNlbGVjdCBNZXNzYWdlcyAqLworI2RlZmluZSBLRVlfQ0FMRU5EQVIJCTB4MThkCisjZGVmaW5lIEtFWV9SRUQJCQkweDE4ZQorI2RlZmluZSBLRVlfR1JFRU4JCTB4MThmCisjZGVmaW5lIEtFWV9ZRUxMT1cJCTB4MTkwCisjZGVmaW5lIEtFWV9CTFVFCQkweDE5MQorI2RlZmluZSBLRVlfQ0hBTk5FTFVQCQkweDE5MgkvKiBDaGFubmVsIEluY3JlbWVudCAqLworI2RlZmluZSBLRVlfQ0hBTk5FTERPV04JCTB4MTkzCS8qIENoYW5uZWwgRGVjcmVtZW50ICovCisjZGVmaW5lIEtFWV9GSVJTVAkJMHgxOTQKKyNkZWZpbmUgS0VZX0xBU1QJCTB4MTk1CS8qIFJlY2FsbCBMYXN0ICovCisjZGVmaW5lIEtFWV9BQgkJCTB4MTk2CisjZGVmaW5lIEtFWV9ORVhUCQkweDE5NworI2RlZmluZSBLRVlfUkVTVEFSVAkJMHgxOTgKKyNkZWZpbmUgS0VZX1NMT1cJCTB4MTk5CisjZGVmaW5lIEtFWV9TSFVGRkxFCQkweDE5YQorI2RlZmluZSBLRVlfQlJFQUsJCTB4MTliCisjZGVmaW5lIEtFWV9QUkVWSU9VUwkJMHgxOWMKKyNkZWZpbmUgS0VZX0RJR0lUUwkJMHgxOWQKKyNkZWZpbmUgS0VZX1RFRU4JCTB4MTllCisjZGVmaW5lIEtFWV9UV0VOCQkweDE5ZgorI2RlZmluZSBLRVlfVklERU9QSE9ORQkJMHgxYTAJLyogTWVkaWEgU2VsZWN0IFZpZGVvIFBob25lICovCisjZGVmaW5lIEtFWV9HQU1FUwkJMHgxYTEJLyogTWVkaWEgU2VsZWN0IEdhbWVzICovCisjZGVmaW5lIEtFWV9aT09NSU4JCTB4MWEyCS8qIEFDIFpvb20gSW4gKi8KKyNkZWZpbmUgS0VZX1pPT01PVVQJCTB4MWEzCS8qIEFDIFpvb20gT3V0ICovCisjZGVmaW5lIEtFWV9aT09NUkVTRVQJCTB4MWE0CS8qIEFDIFpvb20gKi8KKyNkZWZpbmUgS0VZX1dPUkRQUk9DRVNTT1IJMHgxYTUJLyogQUwgV29yZCBQcm9jZXNzb3IgKi8KKyNkZWZpbmUgS0VZX0VESVRPUgkJMHgxYTYJLyogQUwgVGV4dCBFZGl0b3IgKi8KKyNkZWZpbmUgS0VZX1NQUkVBRFNIRUVUCQkweDFhNwkvKiBBTCBTcHJlYWRzaGVldCAqLworI2RlZmluZSBLRVlfR1JBUEhJQ1NFRElUT1IJMHgxYTgJLyogQUwgR3JhcGhpY3MgRWRpdG9yICovCisjZGVmaW5lIEtFWV9QUkVTRU5UQVRJT04JMHgxYTkJLyogQUwgUHJlc2VudGF0aW9uIEFwcCAqLworI2RlZmluZSBLRVlfREFUQUJBU0UJCTB4MWFhCS8qIEFMIERhdGFiYXNlIEFwcCAqLworI2RlZmluZSBLRVlfTkVXUwkJMHgxYWIJLyogQUwgTmV3c3JlYWRlciAqLworI2RlZmluZSBLRVlfVk9JQ0VNQUlMCQkweDFhYwkvKiBBTCBWb2ljZW1haWwgKi8KKyNkZWZpbmUgS0VZX0FERFJFU1NCT09LCQkweDFhZAkvKiBBTCBDb250YWN0cy9BZGRyZXNzIEJvb2sgKi8KKyNkZWZpbmUgS0VZX01FU1NFTkdFUgkJMHgxYWUJLyogQUwgSW5zdGFudCBNZXNzYWdpbmcgKi8KKyNkZWZpbmUgS0VZX0RJU1BMQVlUT0dHTEUJMHgxYWYJLyogVHVybiBkaXNwbGF5IChMQ0QpIG9uIGFuZCBvZmYgKi8KKyNkZWZpbmUgS0VZX1NQRUxMQ0hFQ0sJCTB4MWIwICAgLyogQUwgU3BlbGwgQ2hlY2sgKi8KKyNkZWZpbmUgS0VZX0xPR09GRgkJMHgxYjEgICAvKiBBTCBMb2dvZmYgKi8KKworI2RlZmluZSBLRVlfRE9MTEFSCQkweDFiMgorI2RlZmluZSBLRVlfRVVSTwkJMHgxYjMKKworI2RlZmluZSBLRVlfRlJBTUVCQUNLCQkweDFiNAkvKiBDb25zdW1lciAtIHRyYW5zcG9ydCBjb250cm9scyAqLworI2RlZmluZSBLRVlfRlJBTUVGT1JXQVJECTB4MWI1CisjZGVmaW5lIEtFWV9DT05URVhUX01FTlUJMHgxYjYJLyogR2VuRGVzYyAtIHN5c3RlbSBjb250ZXh0IG1lbnUgKi8KKyNkZWZpbmUgS0VZX01FRElBX1JFUEVBVAkweDFiNwkvKiBDb25zdW1lciAtIHRyYW5zcG9ydCBjb250cm9sICovCisKKyNkZWZpbmUgS0VZX0RFTF9FT0wJCTB4MWMwCisjZGVmaW5lIEtFWV9ERUxfRU9TCQkweDFjMQorI2RlZmluZSBLRVlfSU5TX0xJTkUJCTB4MWMyCisjZGVmaW5lIEtFWV9ERUxfTElORQkJMHgxYzMKKworI2RlZmluZSBLRVlfRk4JCQkweDFkMAorI2RlZmluZSBLRVlfRk5fRVNDCQkweDFkMQorI2RlZmluZSBLRVlfRk5fRjEJCTB4MWQyCisjZGVmaW5lIEtFWV9GTl9GMgkJMHgxZDMKKyNkZWZpbmUgS0VZX0ZOX0YzCQkweDFkNAorI2RlZmluZSBLRVlfRk5fRjQJCTB4MWQ1CisjZGVmaW5lIEtFWV9GTl9GNQkJMHgxZDYKKyNkZWZpbmUgS0VZX0ZOX0Y2CQkweDFkNworI2RlZmluZSBLRVlfRk5fRjcJCTB4MWQ4CisjZGVmaW5lIEtFWV9GTl9GOAkJMHgxZDkKKyNkZWZpbmUgS0VZX0ZOX0Y5CQkweDFkYQorI2RlZmluZSBLRVlfRk5fRjEwCQkweDFkYgorI2RlZmluZSBLRVlfRk5fRjExCQkweDFkYworI2RlZmluZSBLRVlfRk5fRjEyCQkweDFkZAorI2RlZmluZSBLRVlfRk5fMQkJMHgxZGUKKyNkZWZpbmUgS0VZX0ZOXzIJCTB4MWRmCisjZGVmaW5lIEtFWV9GTl9ECQkweDFlMAorI2RlZmluZSBLRVlfRk5fRQkJMHgxZTEKKyNkZWZpbmUgS0VZX0ZOX0YJCTB4MWUyCisjZGVmaW5lIEtFWV9GTl9TCQkweDFlMworI2RlZmluZSBLRVlfRk5fQgkJMHgxZTQKKworI2RlZmluZSBLRVlfQlJMX0RPVDEJCTB4MWYxCisjZGVmaW5lIEtFWV9CUkxfRE9UMgkJMHgxZjIKKyNkZWZpbmUgS0VZX0JSTF9ET1QzCQkweDFmMworI2RlZmluZSBLRVlfQlJMX0RPVDQJCTB4MWY0CisjZGVmaW5lIEtFWV9CUkxfRE9UNQkJMHgxZjUKKyNkZWZpbmUgS0VZX0JSTF9ET1Q2CQkweDFmNgorI2RlZmluZSBLRVlfQlJMX0RPVDcJCTB4MWY3CisjZGVmaW5lIEtFWV9CUkxfRE9UOAkJMHgxZjgKKyNkZWZpbmUgS0VZX0JSTF9ET1Q5CQkweDFmOQorI2RlZmluZSBLRVlfQlJMX0RPVDEwCQkweDFmYQorCisjZGVmaW5lIEtFWV9OVU1FUklDXzAJCTB4MjAwCS8qIHVzZWQgYnkgcGhvbmVzLCByZW1vdGUgY29udHJvbHMsICovCisjZGVmaW5lIEtFWV9OVU1FUklDXzEJCTB4MjAxCS8qIGFuZCBvdGhlciBrZXlwYWRzICovCisjZGVmaW5lIEtFWV9OVU1FUklDXzIJCTB4MjAyCisjZGVmaW5lIEtFWV9OVU1FUklDXzMJCTB4MjAzCisjZGVmaW5lIEtFWV9OVU1FUklDXzQJCTB4MjA0CisjZGVmaW5lIEtFWV9OVU1FUklDXzUJCTB4MjA1CisjZGVmaW5lIEtFWV9OVU1FUklDXzYJCTB4MjA2CisjZGVmaW5lIEtFWV9OVU1FUklDXzcJCTB4MjA3CisjZGVmaW5lIEtFWV9OVU1FUklDXzgJCTB4MjA4CisjZGVmaW5lIEtFWV9OVU1FUklDXzkJCTB4MjA5CisjZGVmaW5lIEtFWV9OVU1FUklDX1NUQVIJMHgyMGEKKyNkZWZpbmUgS0VZX05VTUVSSUNfUE9VTkQJMHgyMGIKKworI2RlZmluZSBLRVlfQ0FNRVJBX0ZPQ1VTCTB4MjEwCisjZGVmaW5lIEtFWV9XUFNfQlVUVE9OCQkweDIxMQkvKiBXaUZpIFByb3RlY3RlZCBTZXR1cCBrZXkgKi8KKworI2RlZmluZSBLRVlfVE9VQ0hQQURfVE9HR0xFCTB4MjEyCS8qIFJlcXVlc3Qgc3dpdGNoIHRvdWNocGFkIG9uIG9yIG9mZiAqLworI2RlZmluZSBLRVlfVE9VQ0hQQURfT04JCTB4MjEzCisjZGVmaW5lIEtFWV9UT1VDSFBBRF9PRkYJMHgyMTQKKworI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWQkJMHgyYzAKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxCQkweDJjMAorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTIJCTB4MmMxCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMwkJMHgyYzIKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFk0CQkweDJjMworI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTUJCTB4MmM0CisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZNgkJMHgyYzUKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFk3CQkweDJjNgorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTgJCTB4MmM3CisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZOQkJMHgyYzgKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxMAkJMHgyYzkKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxMQkJMHgyY2EKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxMgkJMHgyY2IKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxMwkJMHgyY2MKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxNAkJMHgyY2QKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxNQkJMHgyY2UKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxNgkJMHgyY2YKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxNwkJMHgyZDAKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxOAkJMHgyZDEKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxOQkJMHgyZDIKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyMAkJMHgyZDMKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyMQkJMHgyZDQKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyMgkJMHgyZDUKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyMwkJMHgyZDYKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyNAkJMHgyZDcKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyNQkJMHgyZDgKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyNgkJMHgyZDkKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyNwkJMHgyZGEKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyOAkJMHgyZGIKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyOQkJMHgyZGMKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzMAkJMHgyZGQKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzMQkJMHgyZGUKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzMgkJMHgyZGYKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzMwkJMHgyZTAKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzNAkJMHgyZTEKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzNQkJMHgyZTIKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzNgkJMHgyZTMKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzNwkJMHgyZTQKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzOAkJMHgyZTUKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzOQkJMHgyZTYKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFk0MAkJMHgyZTcKKworLyogV2UgYXZvaWQgbG93IGNvbW1vbiBrZXlzIGluIG1vZHVsZSBhbGlhc2VzIHNvIHRoZXkgZG9uJ3QgZ2V0IGh1Z2UuICovCisjZGVmaW5lIEtFWV9NSU5fSU5URVJFU1RJTkcJS0VZX01VVEUKKyNkZWZpbmUgS0VZX01BWAkJCTB4MmZmCisjZGVmaW5lIEtFWV9DTlQJCQkoS0VZX01BWCsxKQorCisvKgorICogUmVsYXRpdmUgYXhlcworICovCisKKyNkZWZpbmUgUkVMX1gJCQkweDAwCisjZGVmaW5lIFJFTF9ZCQkJMHgwMQorI2RlZmluZSBSRUxfWgkJCTB4MDIKKyNkZWZpbmUgUkVMX1JYCQkJMHgwMworI2RlZmluZSBSRUxfUlkJCQkweDA0CisjZGVmaW5lIFJFTF9SWgkJCTB4MDUKKyNkZWZpbmUgUkVMX0hXSEVFTAkJMHgwNgorI2RlZmluZSBSRUxfRElBTAkJMHgwNworI2RlZmluZSBSRUxfV0hFRUwJCTB4MDgKKyNkZWZpbmUgUkVMX01JU0MJCTB4MDkKKyNkZWZpbmUgUkVMX01BWAkJCTB4MGYKKyNkZWZpbmUgUkVMX0NOVAkJCShSRUxfTUFYKzEpCisKKy8qCisgKiBBYnNvbHV0ZSBheGVzCisgKi8KKworI2RlZmluZSBBQlNfWAkJCTB4MDAKKyNkZWZpbmUgQUJTX1kJCQkweDAxCisjZGVmaW5lIEFCU19aCQkJMHgwMgorI2RlZmluZSBBQlNfUlgJCQkweDAzCisjZGVmaW5lIEFCU19SWQkJCTB4MDQKKyNkZWZpbmUgQUJTX1JaCQkJMHgwNQorI2RlZmluZSBBQlNfVEhST1RUTEUJCTB4MDYKKyNkZWZpbmUgQUJTX1JVRERFUgkJMHgwNworI2RlZmluZSBBQlNfV0hFRUwJCTB4MDgKKyNkZWZpbmUgQUJTX0dBUwkJCTB4MDkKKyNkZWZpbmUgQUJTX0JSQUtFCQkweDBhCisjZGVmaW5lIEFCU19IQVQwWAkJMHgxMAorI2RlZmluZSBBQlNfSEFUMFkJCTB4MTEKKyNkZWZpbmUgQUJTX0hBVDFYCQkweDEyCisjZGVmaW5lIEFCU19IQVQxWQkJMHgxMworI2RlZmluZSBBQlNfSEFUMlgJCTB4MTQKKyNkZWZpbmUgQUJTX0hBVDJZCQkweDE1CisjZGVmaW5lIEFCU19IQVQzWAkJMHgxNgorI2RlZmluZSBBQlNfSEFUM1kJCTB4MTcKKyNkZWZpbmUgQUJTX1BSRVNTVVJFCQkweDE4CisjZGVmaW5lIEFCU19ESVNUQU5DRQkJMHgxOQorI2RlZmluZSBBQlNfVElMVF9YCQkweDFhCisjZGVmaW5lIEFCU19USUxUX1kJCTB4MWIKKyNkZWZpbmUgQUJTX1RPT0xfV0lEVEgJCTB4MWMKKworI2RlZmluZSBBQlNfVk9MVU1FCQkweDIwCisKKyNkZWZpbmUgQUJTX01JU0MJCTB4MjgKKworI2RlZmluZSBBQlNfTVRfU0xPVAkJMHgyZgkvKiBNVCBzbG90IGJlaW5nIG1vZGlmaWVkICovCisjZGVmaW5lIEFCU19NVF9UT1VDSF9NQUpPUgkweDMwCS8qIE1ham9yIGF4aXMgb2YgdG91Y2hpbmcgZWxsaXBzZSAqLworI2RlZmluZSBBQlNfTVRfVE9VQ0hfTUlOT1IJMHgzMQkvKiBNaW5vciBheGlzIChvbWl0IGlmIGNpcmN1bGFyKSAqLworI2RlZmluZSBBQlNfTVRfV0lEVEhfTUFKT1IJMHgzMgkvKiBNYWpvciBheGlzIG9mIGFwcHJvYWNoaW5nIGVsbGlwc2UgKi8KKyNkZWZpbmUgQUJTX01UX1dJRFRIX01JTk9SCTB4MzMJLyogTWlub3IgYXhpcyAob21pdCBpZiBjaXJjdWxhcikgKi8KKyNkZWZpbmUgQUJTX01UX09SSUVOVEFUSU9OCTB4MzQJLyogRWxsaXBzZSBvcmllbnRhdGlvbiAqLworI2RlZmluZSBBQlNfTVRfUE9TSVRJT05fWAkweDM1CS8qIENlbnRlciBYIGVsbGlwc2UgcG9zaXRpb24gKi8KKyNkZWZpbmUgQUJTX01UX1BPU0lUSU9OX1kJMHgzNgkvKiBDZW50ZXIgWSBlbGxpcHNlIHBvc2l0aW9uICovCisjZGVmaW5lIEFCU19NVF9UT09MX1RZUEUJMHgzNwkvKiBUeXBlIG9mIHRvdWNoaW5nIGRldmljZSAqLworI2RlZmluZSBBQlNfTVRfQkxPQl9JRAkJMHgzOAkvKiBHcm91cCBhIHNldCBvZiBwYWNrZXRzIGFzIGEgYmxvYiAqLworI2RlZmluZSBBQlNfTVRfVFJBQ0tJTkdfSUQJMHgzOQkvKiBVbmlxdWUgSUQgb2YgaW5pdGlhdGVkIGNvbnRhY3QgKi8KKyNkZWZpbmUgQUJTX01UX1BSRVNTVVJFCQkweDNhCS8qIFByZXNzdXJlIG9uIGNvbnRhY3QgYXJlYSAqLworCisKKyNkZWZpbmUgQUJTX01BWAkJCTB4M2YKKyNkZWZpbmUgQUJTX0NOVAkJCShBQlNfTUFYKzEpCisKKy8qCisgKiBTd2l0Y2ggZXZlbnRzCisgKi8KKworI2RlZmluZSBTV19MSUQJCQkweDAwICAvKiBzZXQgPSBsaWQgc2h1dCAqLworI2RlZmluZSBTV19UQUJMRVRfTU9ERQkJMHgwMSAgLyogc2V0ID0gdGFibGV0IG1vZGUgKi8KKyNkZWZpbmUgU1dfSEVBRFBIT05FX0lOU0VSVAkweDAyICAvKiBzZXQgPSBpbnNlcnRlZCAqLworI2RlZmluZSBTV19SRktJTExfQUxMCQkweDAzICAvKiByZmtpbGwgbWFzdGVyIHN3aXRjaCwgdHlwZSAiYW55IgorCQkJCQkgc2V0ID0gcmFkaW8gZW5hYmxlZCAqLworI2RlZmluZSBTV19SQURJTwkJU1dfUkZLSUxMX0FMTAkvKiBkZXByZWNhdGVkICovCisjZGVmaW5lIFNXX01JQ1JPUEhPTkVfSU5TRVJUCTB4MDQgIC8qIHNldCA9IGluc2VydGVkICovCisjZGVmaW5lIFNXX0RPQ0sJCQkweDA1ICAvKiBzZXQgPSBwbHVnZ2VkIGludG8gZG9jayAqLworI2RlZmluZSBTV19MSU5FT1VUX0lOU0VSVAkweDA2ICAvKiBzZXQgPSBpbnNlcnRlZCAqLworI2RlZmluZSBTV19KQUNLX1BIWVNJQ0FMX0lOU0VSVCAweDA3ICAvKiBzZXQgPSBtZWNoYW5pY2FsIHN3aXRjaCBzZXQgKi8KKyNkZWZpbmUgU1dfVklERU9PVVRfSU5TRVJUCTB4MDggIC8qIHNldCA9IGluc2VydGVkICovCisjZGVmaW5lIFNXX0NBTUVSQV9MRU5TX0NPVkVSCTB4MDkgIC8qIHNldCA9IGxlbnMgY292ZXJlZCAqLworI2RlZmluZSBTV19LRVlQQURfU0xJREUJCTB4MGEgIC8qIHNldCA9IGtleXBhZCBzbGlkZSBvdXQgKi8KKyNkZWZpbmUgU1dfRlJPTlRfUFJPWElNSVRZCTB4MGIgIC8qIHNldCA9IGZyb250IHByb3hpbWl0eSBzZW5zb3IgYWN0aXZlICovCisjZGVmaW5lIFNXX01BWAkJCTB4MGYKKyNkZWZpbmUgU1dfQ05UCQkJKFNXX01BWCsxKQorCisvKgorICogTWlzYyBldmVudHMKKyAqLworCisjZGVmaW5lIE1TQ19TRVJJQUwJCTB4MDAKKyNkZWZpbmUgTVNDX1BVTFNFTEVECQkweDAxCisjZGVmaW5lIE1TQ19HRVNUVVJFCQkweDAyCisjZGVmaW5lIE1TQ19SQVcJCQkweDAzCisjZGVmaW5lIE1TQ19TQ0FOCQkweDA0CisjZGVmaW5lIE1TQ19NQVgJCQkweDA3CisjZGVmaW5lIE1TQ19DTlQJCQkoTVNDX01BWCsxKQorCisvKgorICogTEVEcworICovCisKKyNkZWZpbmUgTEVEX05VTUwJCTB4MDAKKyNkZWZpbmUgTEVEX0NBUFNMCQkweDAxCisjZGVmaW5lIExFRF9TQ1JPTExMCQkweDAyCisjZGVmaW5lIExFRF9DT01QT1NFCQkweDAzCisjZGVmaW5lIExFRF9LQU5BCQkweDA0CisjZGVmaW5lIExFRF9TTEVFUAkJMHgwNQorI2RlZmluZSBMRURfU1VTUEVORAkJMHgwNgorI2RlZmluZSBMRURfTVVURQkJMHgwNworI2RlZmluZSBMRURfTUlTQwkJMHgwOAorI2RlZmluZSBMRURfTUFJTAkJMHgwOQorI2RlZmluZSBMRURfQ0hBUkdJTkcJCTB4MGEKKyNkZWZpbmUgTEVEX01BWAkJCTB4MGYKKyNkZWZpbmUgTEVEX0NOVAkJCShMRURfTUFYKzEpCisKKy8qCisgKiBBdXRvcmVwZWF0IHZhbHVlcworICovCisKKyNkZWZpbmUgUkVQX0RFTEFZCQkweDAwCisjZGVmaW5lIFJFUF9QRVJJT0QJCTB4MDEKKyNkZWZpbmUgUkVQX01BWAkJCTB4MDEKKyNkZWZpbmUgUkVQX0NOVAkJCShSRVBfTUFYKzEpCisKKy8qCisgKiBTb3VuZHMKKyAqLworCisjZGVmaW5lIFNORF9DTElDSwkJMHgwMAorI2RlZmluZSBTTkRfQkVMTAkJMHgwMQorI2RlZmluZSBTTkRfVE9ORQkJMHgwMgorI2RlZmluZSBTTkRfTUFYCQkJMHgwNworI2RlZmluZSBTTkRfQ05UCQkJKFNORF9NQVgrMSkKKworLyoKKyAqIElEcy4KKyAqLworCisjZGVmaW5lIElEX0JVUwkJCTAKKyNkZWZpbmUgSURfVkVORE9SCQkxCisjZGVmaW5lIElEX1BST0RVQ1QJCTIKKyNkZWZpbmUgSURfVkVSU0lPTgkJMworCisjZGVmaW5lIEJVU19QQ0kJCQkweDAxCisjZGVmaW5lIEJVU19JU0FQTlAJCTB4MDIKKyNkZWZpbmUgQlVTX1VTQgkJCTB4MDMKKyNkZWZpbmUgQlVTX0hJTAkJCTB4MDQKKyNkZWZpbmUgQlVTX0JMVUVUT09USAkJMHgwNQorI2RlZmluZSBCVVNfVklSVFVBTAkJMHgwNgorCisjZGVmaW5lIEJVU19JU0EJCQkweDEwCisjZGVmaW5lIEJVU19JODA0MgkJMHgxMQorI2RlZmluZSBCVVNfWFRLQkQJCTB4MTIKKyNkZWZpbmUgQlVTX1JTMjMyCQkweDEzCisjZGVmaW5lIEJVU19HQU1FUE9SVAkJMHgxNAorI2RlZmluZSBCVVNfUEFSUE9SVAkJMHgxNQorI2RlZmluZSBCVVNfQU1JR0EJCTB4MTYKKyNkZWZpbmUgQlVTX0FEQgkJCTB4MTcKKyNkZWZpbmUgQlVTX0kyQwkJCTB4MTgKKyNkZWZpbmUgQlVTX0hPU1QJCTB4MTkKKyNkZWZpbmUgQlVTX0dTQwkJCTB4MUEKKyNkZWZpbmUgQlVTX0FUQVJJCQkweDFCCisjZGVmaW5lIEJVU19TUEkJCQkweDFDCisKKy8qCisgKiBNVF9UT09MIHR5cGVzCisgKi8KKyNkZWZpbmUgTVRfVE9PTF9GSU5HRVIJCTAKKyNkZWZpbmUgTVRfVE9PTF9QRU4JCTEKKworLyoKKyAqIFZhbHVlcyBkZXNjcmliaW5nIHRoZSBzdGF0dXMgb2YgYSBmb3JjZS1mZWVkYmFjayBlZmZlY3QKKyAqLworI2RlZmluZSBGRl9TVEFUVVNfU1RPUFBFRAkweDAwCisjZGVmaW5lIEZGX1NUQVRVU19QTEFZSU5HCTB4MDEKKyNkZWZpbmUgRkZfU1RBVFVTX01BWAkJMHgwMQorCisvKgorICogU3RydWN0dXJlcyB1c2VkIGluIGlvY3RscyB0byB1cGxvYWQgZWZmZWN0cyB0byBhIGRldmljZQorICogVGhleSBhcmUgcGllY2VzIG9mIGEgYmlnZ2VyIHN0cnVjdHVyZSAoY2FsbGVkIGZmX2VmZmVjdCkKKyAqLworCisvKgorICogQWxsIGR1cmF0aW9uIHZhbHVlcyBhcmUgZXhwcmVzc2VkIGluIG1zLiBWYWx1ZXMgYWJvdmUgMzI3NjcgbXMgKDB4N2ZmZikKKyAqIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgaGF2ZSB1bnNwZWNpZmllZCByZXN1bHRzLgorICovCisKKy8qKgorICogc3RydWN0IGZmX3JlcGxheSAtIGRlZmluZXMgc2NoZWR1bGluZyBvZiB0aGUgZm9yY2UtZmVlZGJhY2sgZWZmZWN0CisgKiBAbGVuZ3RoOiBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0CisgKiBAZGVsYXk6IGRlbGF5IGJlZm9yZSBlZmZlY3Qgc2hvdWxkIHN0YXJ0IHBsYXlpbmcKKyAqLworc3RydWN0IGZmX3JlcGxheSB7CisJX191MTYgbGVuZ3RoOworCV9fdTE2IGRlbGF5OworfTsKKworLyoqCisgKiBzdHJ1Y3QgZmZfdHJpZ2dlciAtIGRlZmluZXMgd2hhdCB0cmlnZ2VycyB0aGUgZm9yY2UtZmVlZGJhY2sgZWZmZWN0CisgKiBAYnV0dG9uOiBudW1iZXIgb2YgdGhlIGJ1dHRvbiB0cmlnZ2VyaW5nIHRoZSBlZmZlY3QKKyAqIEBpbnRlcnZhbDogY29udHJvbHMgaG93IHNvb24gdGhlIGVmZmVjdCBjYW4gYmUgcmUtdHJpZ2dlcmVkCisgKi8KK3N0cnVjdCBmZl90cmlnZ2VyIHsKKwlfX3UxNiBidXR0b247CisJX191MTYgaW50ZXJ2YWw7Cit9OworCisvKioKKyAqIHN0cnVjdCBmZl9lbnZlbG9wZSAtIGdlbmVyaWMgZm9yY2UtZmVlZGJhY2sgZWZmZWN0IGVudmVsb3BlCisgKiBAYXR0YWNrX2xlbmd0aDogZHVyYXRpb24gb2YgdGhlIGF0dGFjayAobXMpCisgKiBAYXR0YWNrX2xldmVsOiBsZXZlbCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhdHRhY2sKKyAqIEBmYWRlX2xlbmd0aDogZHVyYXRpb24gb2YgZmFkZSAobXMpCisgKiBAZmFkZV9sZXZlbDogbGV2ZWwgYXQgdGhlIGVuZCBvZiBmYWRlCisgKgorICogVGhlIEBhdHRhY2tfbGV2ZWwgYW5kIEBmYWRlX2xldmVsIGFyZSBhYnNvbHV0ZSB2YWx1ZXM7IHdoZW4gYXBwbHlpbmcKKyAqIGVudmVsb3BlIGZvcmNlLWZlZWRiYWNrIGNvcmUgd2lsbCBjb252ZXJ0IHRvIHBvc2l0aXZlL25lZ2F0aXZlCisgKiB2YWx1ZSBiYXNlZCBvbiBwb2xhcml0eSBvZiB0aGUgZGVmYXVsdCBsZXZlbCBvZiB0aGUgZWZmZWN0LgorICogVmFsaWQgcmFuZ2UgZm9yIHRoZSBhdHRhY2sgYW5kIGZhZGUgbGV2ZWxzIGlzIDB4MDAwMCAtIDB4N2ZmZgorICovCitzdHJ1Y3QgZmZfZW52ZWxvcGUgeworCV9fdTE2IGF0dGFja19sZW5ndGg7CisJX191MTYgYXR0YWNrX2xldmVsOworCV9fdTE2IGZhZGVfbGVuZ3RoOworCV9fdTE2IGZhZGVfbGV2ZWw7Cit9OworCisvKioKKyAqIHN0cnVjdCBmZl9jb25zdGFudF9lZmZlY3QgLSBkZWZpbmVzIHBhcmFtZXRlcnMgb2YgYSBjb25zdGFudCBmb3JjZS1mZWVkYmFjayBlZmZlY3QKKyAqIEBsZXZlbDogc3RyZW5ndGggb2YgdGhlIGVmZmVjdDsgbWF5IGJlIG5lZ2F0aXZlCisgKiBAZW52ZWxvcGU6IGVudmVsb3BlIGRhdGEKKyAqLworc3RydWN0IGZmX2NvbnN0YW50X2VmZmVjdCB7CisJX19zMTYgbGV2ZWw7CisJc3RydWN0IGZmX2VudmVsb3BlIGVudmVsb3BlOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZmZfcmFtcF9lZmZlY3QgLSBkZWZpbmVzIHBhcmFtZXRlcnMgb2YgYSByYW1wIGZvcmNlLWZlZWRiYWNrIGVmZmVjdAorICogQHN0YXJ0X2xldmVsOiBiZWdpbm5pbmcgc3RyZW5ndGggb2YgdGhlIGVmZmVjdDsgbWF5IGJlIG5lZ2F0aXZlCisgKiBAZW5kX2xldmVsOiBmaW5hbCBzdHJlbmd0aCBvZiB0aGUgZWZmZWN0OyBtYXkgYmUgbmVnYXRpdmUKKyAqIEBlbnZlbG9wZTogZW52ZWxvcGUgZGF0YQorICovCitzdHJ1Y3QgZmZfcmFtcF9lZmZlY3QgeworCV9fczE2IHN0YXJ0X2xldmVsOworCV9fczE2IGVuZF9sZXZlbDsKKwlzdHJ1Y3QgZmZfZW52ZWxvcGUgZW52ZWxvcGU7Cit9OworCisvKioKKyAqIHN0cnVjdCBmZl9jb25kaXRpb25fZWZmZWN0IC0gZGVmaW5lcyBhIHNwcmluZyBvciBmcmljdGlvbiBmb3JjZS1mZWVkYmFjayBlZmZlY3QKKyAqIEByaWdodF9zYXR1cmF0aW9uOiBtYXhpbXVtIGxldmVsIHdoZW4gam95c3RpY2sgbW92ZWQgYWxsIHdheSB0byB0aGUgcmlnaHQKKyAqIEBsZWZ0X3NhdHVyYXRpb246IHNhbWUgZm9yIHRoZSBsZWZ0IHNpZGUKKyAqIEByaWdodF9jb2VmZjogY29udHJvbHMgaG93IGZhc3QgdGhlIGZvcmNlIGdyb3dzIHdoZW4gdGhlIGpveXN0aWNrIG1vdmVzCisgKgl0byB0aGUgcmlnaHQKKyAqIEBsZWZ0X2NvZWZmOiBzYW1lIGZvciB0aGUgbGVmdCBzaWRlCisgKiBAZGVhZGJhbmQ6IHNpemUgb2YgdGhlIGRlYWQgem9uZSwgd2hlcmUgbm8gZm9yY2UgaXMgcHJvZHVjZWQKKyAqIEBjZW50ZXI6IHBvc2l0aW9uIG9mIHRoZSBkZWFkIHpvbmUKKyAqLworc3RydWN0IGZmX2NvbmRpdGlvbl9lZmZlY3QgeworCV9fdTE2IHJpZ2h0X3NhdHVyYXRpb247CisJX191MTYgbGVmdF9zYXR1cmF0aW9uOworCisJX19zMTYgcmlnaHRfY29lZmY7CisJX19zMTYgbGVmdF9jb2VmZjsKKworCV9fdTE2IGRlYWRiYW5kOworCV9fczE2IGNlbnRlcjsKK307CisKKy8qKgorICogc3RydWN0IGZmX3BlcmlvZGljX2VmZmVjdCAtIGRlZmluZXMgcGFyYW1ldGVycyBvZiBhIHBlcmlvZGljIGZvcmNlLWZlZWRiYWNrIGVmZmVjdAorICogQHdhdmVmb3JtOiBraW5kIG9mIHRoZSBlZmZlY3QgKHdhdmUpCisgKiBAcGVyaW9kOiBwZXJpb2Qgb2YgdGhlIHdhdmUgKG1zKQorICogQG1hZ25pdHVkZTogcGVhayB2YWx1ZQorICogQG9mZnNldDogbWVhbiB2YWx1ZSBvZiB0aGUgd2F2ZSAocm91Z2hseSkKKyAqIEBwaGFzZTogJ2hvcml6b250YWwnIHNoaWZ0CisgKiBAZW52ZWxvcGU6IGVudmVsb3BlIGRhdGEKKyAqIEBjdXN0b21fbGVuOiBudW1iZXIgb2Ygc2FtcGxlcyAoRkZfQ1VTVE9NIG9ubHkpCisgKiBAY3VzdG9tX2RhdGE6IGJ1ZmZlciBvZiBzYW1wbGVzIChGRl9DVVNUT00gb25seSkKKyAqCisgKiBLbm93biB3YXZlZm9ybXMgLSBGRl9TUVVBUkUsIEZGX1RSSUFOR0xFLCBGRl9TSU5FLCBGRl9TQVdfVVAsCisgKiBGRl9TQVdfRE9XTiwgRkZfQ1VTVE9NLiBUaGUgZXhhY3Qgc3ludGF4IEZGX0NVU1RPTSBpcyB1bmRlZmluZWQKKyAqIGZvciB0aGUgdGltZSBiZWluZyBhcyBubyBkcml2ZXIgc3VwcG9ydHMgaXQgeWV0LgorICoKKyAqIE5vdGU6IHRoZSBkYXRhIHBvaW50ZWQgYnkgY3VzdG9tX2RhdGEgaXMgY29waWVkIGJ5IHRoZSBkcml2ZXIuCisgKiBZb3UgY2FuIHRoZXJlZm9yZSBkaXNwb3NlIG9mIHRoZSBtZW1vcnkgYWZ0ZXIgdGhlIHVwbG9hZC91cGRhdGUuCisgKi8KK3N0cnVjdCBmZl9wZXJpb2RpY19lZmZlY3QgeworCV9fdTE2IHdhdmVmb3JtOworCV9fdTE2IHBlcmlvZDsKKwlfX3MxNiBtYWduaXR1ZGU7CisJX19zMTYgb2Zmc2V0OworCV9fdTE2IHBoYXNlOworCisJc3RydWN0IGZmX2VudmVsb3BlIGVudmVsb3BlOworCisJX191MzIgY3VzdG9tX2xlbjsKKwlfX3MxNiAqY3VzdG9tX2RhdGE7Cit9OworCisvKioKKyAqIHN0cnVjdCBmZl9ydW1ibGVfZWZmZWN0IC0gZGVmaW5lcyBwYXJhbWV0ZXJzIG9mIGEgcGVyaW9kaWMgZm9yY2UtZmVlZGJhY2sgZWZmZWN0CisgKiBAc3Ryb25nX21hZ25pdHVkZTogbWFnbml0dWRlIG9mIHRoZSBoZWF2eSBtb3RvcgorICogQHdlYWtfbWFnbml0dWRlOiBtYWduaXR1ZGUgb2YgdGhlIGxpZ2h0IG9uZQorICoKKyAqIFNvbWUgcnVtYmxlIHBhZHMgaGF2ZSB0d28gbW90b3JzIG9mIGRpZmZlcmVudCB3ZWlnaHQuIFN0cm9uZ19tYWduaXR1ZGUKKyAqIHJlcHJlc2VudHMgdGhlIG1hZ25pdHVkZSBvZiB0aGUgdmlicmF0aW9uIGdlbmVyYXRlZCBieSB0aGUgaGVhdnkgb25lLgorICovCitzdHJ1Y3QgZmZfcnVtYmxlX2VmZmVjdCB7CisJX191MTYgc3Ryb25nX21hZ25pdHVkZTsKKwlfX3UxNiB3ZWFrX21hZ25pdHVkZTsKK307CisKKy8qKgorICogc3RydWN0IGZmX2VmZmVjdCAtIGRlZmluZXMgZm9yY2UgZmVlZGJhY2sgZWZmZWN0CisgKiBAdHlwZTogdHlwZSBvZiB0aGUgZWZmZWN0IChGRl9DT05TVEFOVCwgRkZfUEVSSU9ESUMsIEZGX1JBTVAsIEZGX1NQUklORywKKyAqCUZGX0ZSSUNUSU9OLCBGRl9EQU1QRVIsIEZGX1JVTUJMRSwgRkZfSU5FUlRJQSwgb3IgRkZfQ1VTVE9NKQorICogQGlkOiBhbiB1bmlxdWUgaWQgYXNzaWduZWQgdG8gYW4gZWZmZWN0CisgKiBAZGlyZWN0aW9uOiBkaXJlY3Rpb24gb2YgdGhlIGVmZmVjdAorICogQHRyaWdnZXI6IHRyaWdnZXIgY29uZGl0aW9ucyAoc3RydWN0IGZmX3RyaWdnZXIpCisgKiBAcmVwbGF5OiBzY2hlZHVsaW5nIG9mIHRoZSBlZmZlY3QgKHN0cnVjdCBmZl9yZXBsYXkpCisgKiBAdTogZWZmZWN0LXNwZWNpZmljIHN0cnVjdHVyZSAob25lIG9mIGZmX2NvbnN0YW50X2VmZmVjdCwgZmZfcmFtcF9lZmZlY3QsCisgKglmZl9wZXJpb2RpY19lZmZlY3QsIGZmX2NvbmRpdGlvbl9lZmZlY3QsIGZmX3J1bWJsZV9lZmZlY3QpIGZ1cnRoZXIKKyAqCWRlZmluaW5nIGVmZmVjdCBwYXJhbWV0ZXJzCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgc2VudCB0aHJvdWdoIGlvY3RsIGZyb20gdGhlIGFwcGxpY2F0aW9uIHRvIHRoZSBkcml2ZXIuCisgKiBUbyBjcmVhdGUgYSBuZXcgZWZmZWN0IGFwcGxpY2F0aW9uIHNob3VsZCBzZXQgaXRzIEBpZCB0byAtMTsgdGhlIGtlcm5lbAorICogd2lsbCByZXR1cm4gYXNzaWduZWQgQGlkIHdoaWNoIGNhbiBsYXRlciBiZSB1c2VkIHRvIHVwZGF0ZSBvciBkZWxldGUKKyAqIHRoaXMgZWZmZWN0LgorICoKKyAqIERpcmVjdGlvbiBvZiB0aGUgZWZmZWN0IGlzIGVuY29kZWQgYXMgZm9sbG93czoKKyAqCTAgZGVnIC0+IDB4MDAwMCAoZG93bikKKyAqCTkwIGRlZyAtPiAweDQwMDAgKGxlZnQpCisgKgkxODAgZGVnIC0+IDB4ODAwMCAodXApCisgKgkyNzAgZGVnIC0+IDB4QzAwMCAocmlnaHQpCisgKi8KK3N0cnVjdCBmZl9lZmZlY3QgeworCV9fdTE2IHR5cGU7CisJX19zMTYgaWQ7CisJX191MTYgZGlyZWN0aW9uOworCXN0cnVjdCBmZl90cmlnZ2VyIHRyaWdnZXI7CisJc3RydWN0IGZmX3JlcGxheSByZXBsYXk7CisKKwl1bmlvbiB7CisJCXN0cnVjdCBmZl9jb25zdGFudF9lZmZlY3QgY29uc3RhbnQ7CisJCXN0cnVjdCBmZl9yYW1wX2VmZmVjdCByYW1wOworCQlzdHJ1Y3QgZmZfcGVyaW9kaWNfZWZmZWN0IHBlcmlvZGljOworCQlzdHJ1Y3QgZmZfY29uZGl0aW9uX2VmZmVjdCBjb25kaXRpb25bMl07IC8qIE9uZSBmb3IgZWFjaCBheGlzICovCisJCXN0cnVjdCBmZl9ydW1ibGVfZWZmZWN0IHJ1bWJsZTsKKwl9IHU7Cit9OworCisvKgorICogRm9yY2UgZmVlZGJhY2sgZWZmZWN0IHR5cGVzCisgKi8KKworI2RlZmluZSBGRl9SVU1CTEUJMHg1MAorI2RlZmluZSBGRl9QRVJJT0RJQwkweDUxCisjZGVmaW5lIEZGX0NPTlNUQU5UCTB4NTIKKyNkZWZpbmUgRkZfU1BSSU5HCTB4NTMKKyNkZWZpbmUgRkZfRlJJQ1RJT04JMHg1NAorI2RlZmluZSBGRl9EQU1QRVIJMHg1NQorI2RlZmluZSBGRl9JTkVSVElBCTB4NTYKKyNkZWZpbmUgRkZfUkFNUAkJMHg1NworCisjZGVmaW5lIEZGX0VGRkVDVF9NSU4JRkZfUlVNQkxFCisjZGVmaW5lIEZGX0VGRkVDVF9NQVgJRkZfUkFNUAorCisvKgorICogRm9yY2UgZmVlZGJhY2sgcGVyaW9kaWMgZWZmZWN0IHR5cGVzCisgKi8KKworI2RlZmluZSBGRl9TUVVBUkUJMHg1OAorI2RlZmluZSBGRl9UUklBTkdMRQkweDU5CisjZGVmaW5lIEZGX1NJTkUJCTB4NWEKKyNkZWZpbmUgRkZfU0FXX1VQCTB4NWIKKyNkZWZpbmUgRkZfU0FXX0RPV04JMHg1YworI2RlZmluZSBGRl9DVVNUT00JMHg1ZAorCisjZGVmaW5lIEZGX1dBVkVGT1JNX01JTglGRl9TUVVBUkUKKyNkZWZpbmUgRkZfV0FWRUZPUk1fTUFYCUZGX0NVU1RPTQorCisvKgorICogU2V0IGZmIGRldmljZSBwcm9wZXJ0aWVzCisgKi8KKworI2RlZmluZSBGRl9HQUlOCQkweDYwCisjZGVmaW5lIEZGX0FVVE9DRU5URVIJMHg2MQorCisjZGVmaW5lIEZGX01BWAkJMHg3ZgorI2RlZmluZSBGRl9DTlQJCShGRl9NQVgrMSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaW9jdGwuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhOTFlYjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaW9jdGwuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX0xJTlVYX0lPQ1RMX0gKKyNkZWZpbmUgX0xJTlVYX0lPQ1RMX0gKKworI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorCisjZW5kaWYgLyogX0xJTlVYX0lPQ1RMX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lwLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmY0NzJhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lwLmgKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJRGVmaW5pdGlvbnMgZm9yIHRoZSBJUCBwcm90b2NvbC4KKyAqCisgKiBWZXJzaW9uOglAKCMpaXAuaAkxLjAuMgkwNC8yOC85MworICoKKyAqIEF1dGhvcnM6CUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9MSU5VWF9JUF9ICisjZGVmaW5lIF9MSU5VWF9JUF9ICisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNkZWZpbmUgSVBUT1NfVE9TX01BU0sJCTB4MUUKKyNkZWZpbmUgSVBUT1NfVE9TKHRvcykJCSgodG9zKSZJUFRPU19UT1NfTUFTSykKKyNkZWZpbmUJSVBUT1NfTE9XREVMQVkJCTB4MTAKKyNkZWZpbmUJSVBUT1NfVEhST1VHSFBVVAkweDA4CisjZGVmaW5lCUlQVE9TX1JFTElBQklMSVRZCTB4MDQKKyNkZWZpbmUJSVBUT1NfTUlOQ09TVAkJMHgwMgorCisjZGVmaW5lIElQVE9TX1BSRUNfTUFTSwkJMHhFMAorI2RlZmluZSBJUFRPU19QUkVDKHRvcykJCSgodG9zKSZJUFRPU19QUkVDX01BU0spCisjZGVmaW5lIElQVE9TX1BSRUNfTkVUQ09OVFJPTCAgICAgICAgICAgMHhlMAorI2RlZmluZSBJUFRPU19QUkVDX0lOVEVSTkVUQ09OVFJPTCAgICAgIDB4YzAKKyNkZWZpbmUgSVBUT1NfUFJFQ19DUklUSUNfRUNQICAgICAgICAgICAweGEwCisjZGVmaW5lIElQVE9TX1BSRUNfRkxBU0hPVkVSUklERSAgICAgICAgMHg4MAorI2RlZmluZSBJUFRPU19QUkVDX0ZMQVNIICAgICAgICAgICAgICAgIDB4NjAKKyNkZWZpbmUgSVBUT1NfUFJFQ19JTU1FRElBVEUgICAgICAgICAgICAweDQwCisjZGVmaW5lIElQVE9TX1BSRUNfUFJJT1JJVFkgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBJUFRPU19QUkVDX1JPVVRJTkUgICAgICAgICAgICAgIDB4MDAKKworCisvKiBJUCBvcHRpb25zICovCisjZGVmaW5lIElQT1BUX0NPUFkJCTB4ODAKKyNkZWZpbmUgSVBPUFRfQ0xBU1NfTUFTSwkweDYwCisjZGVmaW5lIElQT1BUX05VTUJFUl9NQVNLCTB4MWYKKworI2RlZmluZQlJUE9QVF9DT1BJRUQobykJCSgobykmSVBPUFRfQ09QWSkKKyNkZWZpbmUJSVBPUFRfQ0xBU1MobykJCSgobykmSVBPUFRfQ0xBU1NfTUFTSykKKyNkZWZpbmUJSVBPUFRfTlVNQkVSKG8pCQkoKG8pJklQT1BUX05VTUJFUl9NQVNLKQorCisjZGVmaW5lCUlQT1BUX0NPTlRST0wJCTB4MDAKKyNkZWZpbmUJSVBPUFRfUkVTRVJWRUQxCQkweDIwCisjZGVmaW5lCUlQT1BUX01FQVNVUkVNRU5UCTB4NDAKKyNkZWZpbmUJSVBPUFRfUkVTRVJWRUQyCQkweDYwCisKKyNkZWZpbmUgSVBPUFRfRU5ECSgwIHxJUE9QVF9DT05UUk9MKQorI2RlZmluZSBJUE9QVF9OT09QCSgxIHxJUE9QVF9DT05UUk9MKQorI2RlZmluZSBJUE9QVF9TRUMJKDIgfElQT1BUX0NPTlRST0x8SVBPUFRfQ09QWSkKKyNkZWZpbmUgSVBPUFRfTFNSUgkoMyB8SVBPUFRfQ09OVFJPTHxJUE9QVF9DT1BZKQorI2RlZmluZSBJUE9QVF9USU1FU1RBTVAJKDQgfElQT1BUX01FQVNVUkVNRU5UKQorI2RlZmluZSBJUE9QVF9DSVBTTwkoNiB8SVBPUFRfQ09OVFJPTHxJUE9QVF9DT1BZKQorI2RlZmluZSBJUE9QVF9SUgkoNyB8SVBPUFRfQ09OVFJPTCkKKyNkZWZpbmUgSVBPUFRfU0lECSg4IHxJUE9QVF9DT05UUk9MfElQT1BUX0NPUFkpCisjZGVmaW5lIElQT1BUX1NTUlIJKDkgfElQT1BUX0NPTlRST0x8SVBPUFRfQ09QWSkKKyNkZWZpbmUgSVBPUFRfUkEJKDIwfElQT1BUX0NPTlRST0x8SVBPUFRfQ09QWSkKKworI2RlZmluZSBJUFZFUlNJT04JNAorI2RlZmluZSBNQVhUVEwJCTI1NQorI2RlZmluZSBJUERFRlRUTAk2NAorCisjZGVmaW5lIElQT1BUX09QVFZBTCAwCisjZGVmaW5lIElQT1BUX09MRU4gICAxCisjZGVmaW5lIElQT1BUX09GRlNFVCAyCisjZGVmaW5lIElQT1BUX01JTk9GRiA0CisjZGVmaW5lIE1BWF9JUE9QVExFTiA0MAorI2RlZmluZSBJUE9QVF9OT1AgSVBPUFRfTk9PUAorI2RlZmluZSBJUE9QVF9FT0wgSVBPUFRfRU5ECisjZGVmaW5lIElQT1BUX1RTICBJUE9QVF9USU1FU1RBTVAKKworI2RlZmluZQlJUE9QVF9UU19UU09OTFkJCTAJCS8qIHRpbWVzdGFtcHMgb25seSAqLworI2RlZmluZQlJUE9QVF9UU19UU0FOREFERFIJMQkJLyogdGltZXN0YW1wcyBhbmQgYWRkcmVzc2VzICovCisjZGVmaW5lCUlQT1BUX1RTX1BSRVNQRUMJMwkJLyogc3BlY2lmaWVkIG1vZHVsZXMgb25seSAqLworCisjZGVmaW5lIElQVjRfQkVFVF9QSE1BWExFTiA4CisKK3N0cnVjdCBpcGhkciB7CisjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisJX191OAlpaGw6NCwKKwkJdmVyc2lvbjo0OworI2VsaWYgZGVmaW5lZCAoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTgJdmVyc2lvbjo0LAorICAJCWlobDo0OworI2Vsc2UKKyNlcnJvcgkiUGxlYXNlIGZpeCA8YXNtL2J5dGVvcmRlci5oPiIKKyNlbmRpZgorCV9fdTgJdG9zOworCV9fYmUxNgl0b3RfbGVuOworCV9fYmUxNglpZDsKKwlfX2JlMTYJZnJhZ19vZmY7CisJX191OAl0dGw7CisJX191OAlwcm90b2NvbDsKKwlfX3N1bTE2CWNoZWNrOworCV9fYmUzMglzYWRkcjsKKwlfX2JlMzIJZGFkZHI7CisJLypUaGUgb3B0aW9ucyBzdGFydCBoZXJlLiAqLworfTsKKworCitzdHJ1Y3QgaXBfYXV0aF9oZHIgeworCV9fdTggIG5leHRoZHI7CisJX191OCAgaGRybGVuOwkJLyogVGhpcyBvbmUgaXMgbWVhc3VyZWQgaW4gMzIgYml0IHVuaXRzISAqLworCV9fYmUxNiByZXNlcnZlZDsKKwlfX2JlMzIgc3BpOworCV9fYmUzMiBzZXFfbm87CQkvKiBTZXF1ZW5jZSBudW1iZXIgKi8KKwlfX3U4ICBhdXRoX2RhdGFbMF07CS8qIFZhcmlhYmxlIGxlbiBidXQgPj00LiBNaW5kIHRoZSA2NCBiaXQgYWxpZ25tZW50ISAqLworfTsKKworc3RydWN0IGlwX2VzcF9oZHIgeworCV9fYmUzMiBzcGk7CisJX19iZTMyIHNlcV9ubzsJCS8qIFNlcXVlbmNlIG51bWJlciAqLworCV9fdTggIGVuY19kYXRhWzBdOwkvKiBWYXJpYWJsZSBsZW4gYnV0ID49OC4gTWluZCB0aGUgNjQgYml0IGFsaWdubWVudCEgKi8KK307CisKK3N0cnVjdCBpcF9jb21wX2hkciB7CisJX191OCBuZXh0aGRyOworCV9fdTggZmxhZ3M7CisJX19iZTE2IGNwaTsKK307CisKK3N0cnVjdCBpcF9iZWV0X3BoZHIgeworCV9fdTggbmV4dGhkcjsKKwlfX3U4IGhkcmxlbjsKKwlfX3U4IHBhZGxlbjsKKwlfX3U4IHJlc2VydmVkOworfTsKKworI2VuZGlmCS8qIF9MSU5VWF9JUF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXA2X3R1bm5lbC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lwNl90dW5uZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2I5YWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lwNl90dW5uZWwuaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIF9JUDZfVFVOTkVMX0gKKyNkZWZpbmUgX0lQNl9UVU5ORUxfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBJUFY2X1RMVl9UTkxfRU5DQVBfTElNSVQgNAorI2RlZmluZSBJUFY2X0RFRkFVTFRfVE5MX0VOQ0FQX0xJTUlUIDQKKworLyogZG9uJ3QgYWRkIGVuY2Fwc3VsYXRpb24gbGltaXQgaWYgb25lIGlzbid0IHByZXNlbnQgaW4gaW5uZXIgcGFja2V0ICovCisjZGVmaW5lIElQNl9UTkxfRl9JR05fRU5DQVBfTElNSVQgMHgxCisvKiBjb3B5IHRoZSB0cmFmZmljIGNsYXNzIGZpZWxkIGZyb20gdGhlIGlubmVyIHBhY2tldCAqLworI2RlZmluZSBJUDZfVE5MX0ZfVVNFX09SSUdfVENMQVNTIDB4MgorLyogY29weSB0aGUgZmxvd2xhYmVsIGZyb20gdGhlIGlubmVyIHBhY2tldCAqLworI2RlZmluZSBJUDZfVE5MX0ZfVVNFX09SSUdfRkxPV0xBQkVMIDB4NAorLyogYmVpbmcgdXNlZCBmb3IgTW9iaWxlIElQdjYgKi8KKyNkZWZpbmUgSVA2X1ROTF9GX01JUDZfREVWIDB4OAorLyogY29weSBEU0NQIGZyb20gdGhlIG91dGVyIHBhY2tldCAqLworI2RlZmluZSBJUDZfVE5MX0ZfUkNWX0RTQ1BfQ09QWSAweDEwCisKK3N0cnVjdCBpcDZfdG5sX3Bhcm0geworCWNoYXIgbmFtZVtJRk5BTVNJWl07CS8qIG5hbWUgb2YgdHVubmVsIGRldmljZSAqLworCWludCBsaW5rOwkJLyogaWZpbmRleCBvZiB1bmRlcmx5aW5nIEwyIGludGVyZmFjZSAqLworCV9fdTggcHJvdG87CQkvKiB0dW5uZWwgcHJvdG9jb2wgKi8KKwlfX3U4IGVuY2FwX2xpbWl0OwkvKiBlbmNhcHN1bGF0aW9uIGxpbWl0IGZvciB0dW5uZWwgKi8KKwlfX3U4IGhvcF9saW1pdDsJCS8qIGhvcCBsaW1pdCBmb3IgdHVubmVsICovCisJX19iZTMyIGZsb3dpbmZvOwkvKiB0cmFmZmljIGNsYXNzIGFuZCBmbG93bGFiZWwgZm9yIHR1bm5lbCAqLworCV9fdTMyIGZsYWdzOwkJLyogdHVubmVsIGZsYWdzICovCisJc3RydWN0IGluNl9hZGRyIGxhZGRyOwkvKiBsb2NhbCB0dW5uZWwgZW5kLXBvaW50IGFkZHJlc3MgKi8KKwlzdHJ1Y3QgaW42X2FkZHIgcmFkZHI7CS8qIHJlbW90ZSB0dW5uZWwgZW5kLXBvaW50IGFkZHJlc3MgKi8KK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lwX3ZzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXBfdnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjQzYTNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lwX3ZzLmgKQEAgLTAsMCArMSw0MjEgQEAKKy8qCisgKiAgICAgIElQIFZpcnR1YWwgU2VydmVyCisgKiAgICAgIGRhdGEgc3RydWN0dXJlIGFuZCBmdW5jdGlvbmFsaXR5IGRlZmluaXRpb25zCisgKi8KKworI2lmbmRlZiBfSVBfVlNfSAorI2RlZmluZSBfSVBfVlNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4JLyogRm9yIF9fYmVYWCB0eXBlcyBpbiB1c2VybGFuZCAqLworCisjZGVmaW5lIElQX1ZTX1ZFUlNJT05fQ09ERQkweDAxMDIwMQorI2RlZmluZSBOVkVSU0lPTih2ZXJzaW9uKQkJCVwKKwkodmVyc2lvbiA+PiAxNikgJiAweEZGLAkJCVwKKwkodmVyc2lvbiA+PiA4KSAmIDB4RkYsCQkJXAorCXZlcnNpb24gJiAweEZGCisKKy8qCisgKiAgICAgIFZpcnR1YWwgU2VydmljZSBGbGFncworICovCisjZGVmaW5lIElQX1ZTX1NWQ19GX1BFUlNJU1RFTlQJMHgwMDAxCQkvKiBwZXJzaXN0ZW50IHBvcnQgKi8KKyNkZWZpbmUgSVBfVlNfU1ZDX0ZfSEFTSEVECTB4MDAwMgkJLyogaGFzaGVkIGVudHJ5ICovCisjZGVmaW5lIElQX1ZTX1NWQ19GX09ORVBBQ0tFVAkweDAwMDQJCS8qIG9uZS1wYWNrZXQgc2NoZWR1bGluZyAqLworCisvKgorICogICAgICBEZXN0aW5hdGlvbiBTZXJ2ZXIgRmxhZ3MKKyAqLworI2RlZmluZSBJUF9WU19ERVNUX0ZfQVZBSUxBQkxFCTB4MDAwMQkJLyogc2VydmVyIGlzIGF2YWlsYWJsZSAqLworI2RlZmluZSBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQJMHgwMDAyCQkvKiBzZXJ2ZXIgaXMgb3ZlcmxvYWRlZCAqLworCisvKgorICogICAgICBJUFZTIHN5bmMgZGFlbW9uIHN0YXRlcworICovCisjZGVmaW5lIElQX1ZTX1NUQVRFX05PTkUJMHgwMDAwCQkvKiBkYWVtb24gaXMgc3RvcHBlZCAqLworI2RlZmluZSBJUF9WU19TVEFURV9NQVNURVIJMHgwMDAxCQkvKiBzdGFydGVkIGFzIG1hc3RlciAqLworI2RlZmluZSBJUF9WU19TVEFURV9CQUNLVVAJMHgwMDAyCQkvKiBzdGFydGVkIGFzIGJhY2t1cCAqLworCisvKgorICogICAgICBJUFZTIHNvY2tldCBvcHRpb25zCisgKi8KKyNkZWZpbmUgSVBfVlNfQkFTRV9DVEwJCSg2NCsxMDI0KzY0KQkJLyogYmFzZSAqLworCisjZGVmaW5lIElQX1ZTX1NPX1NFVF9OT05FCUlQX1ZTX0JBU0VfQ1RMCQkvKiBqdXN0IHBlZWsgKi8KKyNkZWZpbmUgSVBfVlNfU09fU0VUX0lOU0VSVAkoSVBfVlNfQkFTRV9DVEwrMSkKKyNkZWZpbmUgSVBfVlNfU09fU0VUX0FERAkoSVBfVlNfQkFTRV9DVEwrMikKKyNkZWZpbmUgSVBfVlNfU09fU0VUX0VESVQJKElQX1ZTX0JBU0VfQ1RMKzMpCisjZGVmaW5lIElQX1ZTX1NPX1NFVF9ERUwJKElQX1ZTX0JBU0VfQ1RMKzQpCisjZGVmaW5lIElQX1ZTX1NPX1NFVF9GTFVTSAkoSVBfVlNfQkFTRV9DVEwrNSkKKyNkZWZpbmUgSVBfVlNfU09fU0VUX0xJU1QJKElQX1ZTX0JBU0VfQ1RMKzYpCisjZGVmaW5lIElQX1ZTX1NPX1NFVF9BRERERVNUCShJUF9WU19CQVNFX0NUTCs3KQorI2RlZmluZSBJUF9WU19TT19TRVRfREVMREVTVAkoSVBfVlNfQkFTRV9DVEwrOCkKKyNkZWZpbmUgSVBfVlNfU09fU0VUX0VESVRERVNUCShJUF9WU19CQVNFX0NUTCs5KQorI2RlZmluZSBJUF9WU19TT19TRVRfVElNRU9VVAkoSVBfVlNfQkFTRV9DVEwrMTApCisjZGVmaW5lIElQX1ZTX1NPX1NFVF9TVEFSVERBRU1PTiAoSVBfVlNfQkFTRV9DVEwrMTEpCisjZGVmaW5lIElQX1ZTX1NPX1NFVF9TVE9QREFFTU9OIChJUF9WU19CQVNFX0NUTCsxMikKKyNkZWZpbmUgSVBfVlNfU09fU0VUX1JFU1RPUkUgICAgKElQX1ZTX0JBU0VfQ1RMKzEzKQorI2RlZmluZSBJUF9WU19TT19TRVRfU0FWRSAgICAgICAoSVBfVlNfQkFTRV9DVEwrMTQpCisjZGVmaW5lIElQX1ZTX1NPX1NFVF9aRVJPCShJUF9WU19CQVNFX0NUTCsxNSkKKyNkZWZpbmUgSVBfVlNfU09fU0VUX01BWAlJUF9WU19TT19TRVRfWkVSTworCisjZGVmaW5lIElQX1ZTX1NPX0dFVF9WRVJTSU9OCUlQX1ZTX0JBU0VfQ1RMCisjZGVmaW5lIElQX1ZTX1NPX0dFVF9JTkZPCShJUF9WU19CQVNFX0NUTCsxKQorI2RlZmluZSBJUF9WU19TT19HRVRfU0VSVklDRVMJKElQX1ZTX0JBU0VfQ1RMKzIpCisjZGVmaW5lIElQX1ZTX1NPX0dFVF9TRVJWSUNFCShJUF9WU19CQVNFX0NUTCszKQorI2RlZmluZSBJUF9WU19TT19HRVRfREVTVFMJKElQX1ZTX0JBU0VfQ1RMKzQpCisjZGVmaW5lIElQX1ZTX1NPX0dFVF9ERVNUCShJUF9WU19CQVNFX0NUTCs1KQkvKiBub3QgdXNlZCBub3cgKi8KKyNkZWZpbmUgSVBfVlNfU09fR0VUX1RJTUVPVVQJKElQX1ZTX0JBU0VfQ1RMKzYpCisjZGVmaW5lIElQX1ZTX1NPX0dFVF9EQUVNT04JKElQX1ZTX0JBU0VfQ1RMKzcpCisjZGVmaW5lIElQX1ZTX1NPX0dFVF9NQVgJSVBfVlNfU09fR0VUX0RBRU1PTgorCisKKy8qCisgKiAgICAgIElQVlMgQ29ubmVjdGlvbiBGbGFncworICogICAgICBPbmx5IGZsYWdzIDAuLjE1IGFyZSBzZW50IHRvIGJhY2t1cCBzZXJ2ZXIKKyAqLworI2RlZmluZSBJUF9WU19DT05OX0ZfRldEX01BU0sJMHgwMDA3CQkvKiBtYXNrIGZvciB0aGUgZndkIG1ldGhvZHMgKi8KKyNkZWZpbmUgSVBfVlNfQ09OTl9GX01BU1EJMHgwMDAwCQkvKiBtYXNxdWVyYWRpbmcvTkFUICovCisjZGVmaW5lIElQX1ZTX0NPTk5fRl9MT0NBTE5PREUJMHgwMDAxCQkvKiBsb2NhbCBub2RlICovCisjZGVmaW5lIElQX1ZTX0NPTk5fRl9UVU5ORUwJMHgwMDAyCQkvKiB0dW5uZWxpbmcgKi8KKyNkZWZpbmUgSVBfVlNfQ09OTl9GX0RST1VURQkweDAwMDMJCS8qIGRpcmVjdCByb3V0aW5nICovCisjZGVmaW5lIElQX1ZTX0NPTk5fRl9CWVBBU1MJMHgwMDA0CQkvKiBjYWNoZSBieXBhc3MgKi8KKyNkZWZpbmUgSVBfVlNfQ09OTl9GX1NZTkMJMHgwMDIwCQkvKiBlbnRyeSBjcmVhdGVkIGJ5IHN5bmMgKi8KKyNkZWZpbmUgSVBfVlNfQ09OTl9GX0hBU0hFRAkweDAwNDAJCS8qIGhhc2hlZCBlbnRyeSAqLworI2RlZmluZSBJUF9WU19DT05OX0ZfTk9PVVRQVVQJMHgwMDgwCQkvKiBubyBvdXRwdXQgcGFja2V0cyAqLworI2RlZmluZSBJUF9WU19DT05OX0ZfSU5BQ1RJVkUJMHgwMTAwCQkvKiBub3QgZXN0YWJsaXNoZWQgKi8KKyNkZWZpbmUgSVBfVlNfQ09OTl9GX09VVF9TRVEJMHgwMjAwCQkvKiBtdXN0IGRvIG91dHB1dCBzZXEgYWRqdXN0ICovCisjZGVmaW5lIElQX1ZTX0NPTk5fRl9JTl9TRVEJMHgwNDAwCQkvKiBtdXN0IGRvIGlucHV0IHNlcSBhZGp1c3QgKi8KKyNkZWZpbmUgSVBfVlNfQ09OTl9GX1NFUV9NQVNLCTB4MDYwMAkJLyogaW4vb3V0IHNlcXVlbmNlIG1hc2sgKi8KKyNkZWZpbmUgSVBfVlNfQ09OTl9GX05PX0NQT1JUCTB4MDgwMAkJLyogbm8gY2xpZW50IHBvcnQgc2V0IHlldCAqLworI2RlZmluZSBJUF9WU19DT05OX0ZfVEVNUExBVEUJMHgxMDAwCQkvKiB0ZW1wbGF0ZSwgbm90IGNvbm5lY3Rpb24gKi8KKyNkZWZpbmUgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQJMHgyMDAwCQkvKiBmb3J3YXJkIG9ubHkgb25lIHBhY2tldCAqLworCisvKiBGbGFncyB0aGF0IGFyZSBub3Qgc2VudCB0byBiYWNrdXAgc2VydmVyIHN0YXJ0IGZyb20gYml0IDE2ICovCisjZGVmaW5lIElQX1ZTX0NPTk5fRl9ORkNUCSgxIDw8IDE2KQkvKiB1c2UgbmV0ZmlsdGVyIGNvbm50cmFjayAqLworCisvKiBDb25uZWN0aW9uIGZsYWdzIGZyb20gZGVzdGluYXRpb24gdGhhdCBjYW4gYmUgY2hhbmdlZCBieSB1c2VyIHNwYWNlICovCisjZGVmaW5lIElQX1ZTX0NPTk5fRl9ERVNUX01BU0sgKElQX1ZTX0NPTk5fRl9GV0RfTUFTSyB8IFwKKwkJCQlJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCB8IFwKKwkJCQlJUF9WU19DT05OX0ZfTkZDVCB8IFwKKwkJCQkwKQorCisjZGVmaW5lIElQX1ZTX1NDSEVETkFNRV9NQVhMRU4JMTYKKyNkZWZpbmUgSVBfVlNfUEVOQU1FX01BWExFTgkxNgorI2RlZmluZSBJUF9WU19JRk5BTUVfTUFYTEVOCTE2CisKKyNkZWZpbmUgSVBfVlNfUEVEQVRBX01BWExFTiAgICAgMjU1CisKKy8qCisgKglUaGUgc3RydWN0IGlwX3ZzX3NlcnZpY2VfdXNlciBhbmQgc3RydWN0IGlwX3ZzX2Rlc3RfdXNlciBhcmUKKyAqCXVzZWQgdG8gc2V0IElQVlMgcnVsZXMgdGhyb3VnaCBzZXRzb2Nrb3B0LgorICovCitzdHJ1Y3QgaXBfdnNfc2VydmljZV91c2VyIHsKKwkvKiB2aXJ0dWFsIHNlcnZpY2UgYWRkcmVzc2VzICovCisJX191MTYJCXByb3RvY29sOworCV9fYmUzMgkJCWFkZHI7CQkvKiB2aXJ0dWFsIGlwIGFkZHJlc3MgKi8KKwlfX2JlMTYJCQlwb3J0OworCV9fdTMyCQlmd21hcms7CQkvKiBmaXJ3YWxsIG1hcmsgb2Ygc2VydmljZSAqLworCisJLyogdmlydHVhbCBzZXJ2aWNlIG9wdGlvbnMgKi8KKwljaGFyCQkJc2NoZWRfbmFtZVtJUF9WU19TQ0hFRE5BTUVfTUFYTEVOXTsKKwl1bnNpZ25lZAkJZmxhZ3M7CQkvKiB2aXJ0dWFsIHNlcnZpY2UgZmxhZ3MgKi8KKwl1bnNpZ25lZAkJdGltZW91dDsJLyogcGVyc2lzdGVudCB0aW1lb3V0IGluIHNlYyAqLworCV9fYmUzMgkJCW5ldG1hc2s7CS8qIHBlcnNpc3RlbnQgbmV0bWFzayAqLworfTsKKworCitzdHJ1Y3QgaXBfdnNfZGVzdF91c2VyIHsKKwkvKiBkZXN0aW5hdGlvbiBzZXJ2ZXIgYWRkcmVzcyAqLworCV9fYmUzMgkJCWFkZHI7CisJX19iZTE2CQkJcG9ydDsKKworCS8qIHJlYWwgc2VydmVyIG9wdGlvbnMgKi8KKwl1bnNpZ25lZAkJY29ubl9mbGFnczsJLyogY29ubmVjdGlvbiBmbGFncyAqLworCWludAkJCXdlaWdodDsJCS8qIGRlc3RpbmF0aW9uIHdlaWdodCAqLworCisJLyogdGhyZXNob2xkcyBmb3IgYWN0aXZlIGNvbm5lY3Rpb25zICovCisJX191MzIJCXVfdGhyZXNob2xkOwkvKiB1cHBlciB0aHJlc2hvbGQgKi8KKwlfX3UzMgkJbF90aHJlc2hvbGQ7CS8qIGxvd2VyIHRocmVzaG9sZCAqLworfTsKKworCisvKgorICoJSVBWUyBzdGF0aXN0aWNzIG9iamVjdCAoZm9yIHVzZXIgc3BhY2UpCisgKi8KK3N0cnVjdCBpcF92c19zdGF0c191c2VyIHsKKwlfX3UzMiAgICAgICAgICAgICAgICAgICBjb25uczsgICAgICAgICAgLyogY29ubmVjdGlvbnMgc2NoZWR1bGVkICovCisJX191MzIgICAgICAgICAgICAgICAgICAgaW5wa3RzOyAgICAgICAgIC8qIGluY29taW5nIHBhY2tldHMgKi8KKwlfX3UzMiAgICAgICAgICAgICAgICAgICBvdXRwa3RzOyAgICAgICAgLyogb3V0Z29pbmcgcGFja2V0cyAqLworCV9fdTY0ICAgICAgICAgICAgICAgICAgIGluYnl0ZXM7ICAgICAgICAvKiBpbmNvbWluZyBieXRlcyAqLworCV9fdTY0ICAgICAgICAgICAgICAgICAgIG91dGJ5dGVzOyAgICAgICAvKiBvdXRnb2luZyBieXRlcyAqLworCisJX191MzIJCQljcHM7CQkvKiBjdXJyZW50IGNvbm5lY3Rpb24gcmF0ZSAqLworCV9fdTMyCQkJaW5wcHM7CQkvKiBjdXJyZW50IGluIHBhY2tldCByYXRlICovCisJX191MzIJCQlvdXRwcHM7CQkvKiBjdXJyZW50IG91dCBwYWNrZXQgcmF0ZSAqLworCV9fdTMyCQkJaW5icHM7CQkvKiBjdXJyZW50IGluIGJ5dGUgcmF0ZSAqLworCV9fdTMyCQkJb3V0YnBzOwkJLyogY3VycmVudCBvdXQgYnl0ZSByYXRlICovCit9OworCisKKy8qIFRoZSBhcmd1bWVudCB0byBJUF9WU19TT19HRVRfSU5GTyAqLworc3RydWN0IGlwX3ZzX2dldGluZm8geworCS8qIHZlcnNpb24gbnVtYmVyICovCisJdW5zaWduZWQgaW50CQl2ZXJzaW9uOworCisJLyogc2l6ZSBvZiBjb25uZWN0aW9uIGhhc2ggdGFibGUgKi8KKwl1bnNpZ25lZCBpbnQJCXNpemU7CisKKwkvKiBudW1iZXIgb2YgdmlydHVhbCBzZXJ2aWNlcyAqLworCXVuc2lnbmVkIGludAkJbnVtX3NlcnZpY2VzOworfTsKKworCisvKiBUaGUgYXJndW1lbnQgdG8gSVBfVlNfU09fR0VUX1NFUlZJQ0UgKi8KK3N0cnVjdCBpcF92c19zZXJ2aWNlX2VudHJ5IHsKKwkvKiB3aGljaCBzZXJ2aWNlOiB1c2VyIGZpbGxzIGluIHRoZXNlICovCisJX191MTYJCXByb3RvY29sOworCV9fYmUzMgkJCWFkZHI7CQkvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KKwlfX2JlMTYJCQlwb3J0OworCV9fdTMyCQlmd21hcms7CQkvKiBmaXJ3YWxsIG1hcmsgb2Ygc2VydmljZSAqLworCisJLyogc2VydmljZSBvcHRpb25zICovCisJY2hhcgkJCXNjaGVkX25hbWVbSVBfVlNfU0NIRUROQU1FX01BWExFTl07CisJdW5zaWduZWQJCWZsYWdzOyAgICAgICAgICAvKiB2aXJ0dWFsIHNlcnZpY2UgZmxhZ3MgKi8KKwl1bnNpZ25lZAkJdGltZW91dDsJLyogcGVyc2lzdGVudCB0aW1lb3V0ICovCisJX19iZTMyCQkJbmV0bWFzazsJLyogcGVyc2lzdGVudCBuZXRtYXNrICovCisKKwkvKiBudW1iZXIgb2YgcmVhbCBzZXJ2ZXJzICovCisJdW5zaWduZWQgaW50CQludW1fZGVzdHM7CisKKwkvKiBzdGF0aXN0aWNzICovCisJc3RydWN0IGlwX3ZzX3N0YXRzX3VzZXIgc3RhdHM7Cit9OworCisKK3N0cnVjdCBpcF92c19kZXN0X2VudHJ5IHsKKwlfX2JlMzIJCQlhZGRyOwkJLyogZGVzdGluYXRpb24gYWRkcmVzcyAqLworCV9fYmUxNgkJCXBvcnQ7CisJdW5zaWduZWQJCWNvbm5fZmxhZ3M7CS8qIGNvbm5lY3Rpb24gZmxhZ3MgKi8KKwlpbnQJCQl3ZWlnaHQ7CQkvKiBkZXN0aW5hdGlvbiB3ZWlnaHQgKi8KKworCV9fdTMyCQl1X3RocmVzaG9sZDsJLyogdXBwZXIgdGhyZXNob2xkICovCisJX191MzIJCWxfdGhyZXNob2xkOwkvKiBsb3dlciB0aHJlc2hvbGQgKi8KKworCV9fdTMyCQlhY3RpdmVjb25uczsJLyogYWN0aXZlIGNvbm5lY3Rpb25zICovCisJX191MzIJCWluYWN0Y29ubnM7CS8qIGluYWN0aXZlIGNvbm5lY3Rpb25zICovCisJX191MzIJCXBlcnNpc3Rjb25uczsJLyogcGVyc2lzdGVudCBjb25uZWN0aW9ucyAqLworCisJLyogc3RhdGlzdGljcyAqLworCXN0cnVjdCBpcF92c19zdGF0c191c2VyIHN0YXRzOworfTsKKworCisvKiBUaGUgYXJndW1lbnQgdG8gSVBfVlNfU09fR0VUX0RFU1RTICovCitzdHJ1Y3QgaXBfdnNfZ2V0X2Rlc3RzIHsKKwkvKiB3aGljaCBzZXJ2aWNlOiB1c2VyIGZpbGxzIGluIHRoZXNlICovCisJX191MTYJCXByb3RvY29sOworCV9fYmUzMgkJCWFkZHI7CQkvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KKwlfX2JlMTYJCQlwb3J0OworCV9fdTMyCQlmd21hcms7CQkvKiBmaXJ3YWxsIG1hcmsgb2Ygc2VydmljZSAqLworCisJLyogbnVtYmVyIG9mIHJlYWwgc2VydmVycyAqLworCXVuc2lnbmVkIGludAkJbnVtX2Rlc3RzOworCisJLyogdGhlIHJlYWwgc2VydmVycyAqLworCXN0cnVjdCBpcF92c19kZXN0X2VudHJ5CWVudHJ5dGFibGVbMF07Cit9OworCisKKy8qIFRoZSBhcmd1bWVudCB0byBJUF9WU19TT19HRVRfU0VSVklDRVMgKi8KK3N0cnVjdCBpcF92c19nZXRfc2VydmljZXMgeworCS8qIG51bWJlciBvZiB2aXJ0dWFsIHNlcnZpY2VzICovCisJdW5zaWduZWQgaW50CQludW1fc2VydmljZXM7CisKKwkvKiBzZXJ2aWNlIHRhYmxlICovCisJc3RydWN0IGlwX3ZzX3NlcnZpY2VfZW50cnkgZW50cnl0YWJsZVswXTsKK307CisKKworLyogVGhlIGFyZ3VtZW50IHRvIElQX1ZTX1NPX0dFVF9USU1FT1VUICovCitzdHJ1Y3QgaXBfdnNfdGltZW91dF91c2VyIHsKKwlpbnQJCQl0Y3BfdGltZW91dDsKKwlpbnQJCQl0Y3BfZmluX3RpbWVvdXQ7CisJaW50CQkJdWRwX3RpbWVvdXQ7Cit9OworCisKKy8qIFRoZSBhcmd1bWVudCB0byBJUF9WU19TT19HRVRfREFFTU9OICovCitzdHJ1Y3QgaXBfdnNfZGFlbW9uX3VzZXIgeworCS8qIHN5bmMgZGFlbW9uIHN0YXRlIChtYXN0ZXIvYmFja3VwKSAqLworCWludAkJCXN0YXRlOworCisJLyogbXVsdGljYXN0IGludGVyZmFjZSBuYW1lICovCisJY2hhcgkJCW1jYXN0X2lmbltJUF9WU19JRk5BTUVfTUFYTEVOXTsKKworCS8qIFN5bmNJRCB3ZSBiZWxvbmcgdG8gKi8KKwlpbnQJCQlzeW5jaWQ7Cit9OworCisvKgorICoKKyAqIElQVlMgR2VuZXJpYyBOZXRsaW5rIGludGVyZmFjZSBkZWZpbml0aW9ucworICoKKyAqLworCisvKiBHZW5lcmljIE5ldGxpbmsgZmFtaWx5IGluZm8gKi8KKworI2RlZmluZSBJUFZTX0dFTkxfTkFNRQkJIklQVlMiCisjZGVmaW5lIElQVlNfR0VOTF9WRVJTSU9OCTB4MQorCitzdHJ1Y3QgaXBfdnNfZmxhZ3MgeworCV9fYmUzMiBmbGFnczsKKwlfX2JlMzIgbWFzazsKK307CisKKy8qIEdlbmVyaWMgTmV0bGluayBjb21tYW5kIGF0dHJpYnV0ZXMgKi8KK2VudW0geworCUlQVlNfQ01EX1VOU1BFQyA9IDAsCisKKwlJUFZTX0NNRF9ORVdfU0VSVklDRSwJCS8qIGFkZCBzZXJ2aWNlICovCisJSVBWU19DTURfU0VUX1NFUlZJQ0UsCQkvKiBtb2RpZnkgc2VydmljZSAqLworCUlQVlNfQ01EX0RFTF9TRVJWSUNFLAkJLyogZGVsZXRlIHNlcnZpY2UgKi8KKwlJUFZTX0NNRF9HRVRfU0VSVklDRSwJCS8qIGdldCBzZXJ2aWNlIGluZm8gKi8KKworCUlQVlNfQ01EX05FV19ERVNULAkJLyogYWRkIGRlc3RpbmF0aW9uICovCisJSVBWU19DTURfU0VUX0RFU1QsCQkvKiBtb2RpZnkgZGVzdGluYXRpb24gKi8KKwlJUFZTX0NNRF9ERUxfREVTVCwJCS8qIGRlbGV0ZSBkZXN0aW5hdGlvbiAqLworCUlQVlNfQ01EX0dFVF9ERVNULAkJLyogZ2V0IGRlc3RpbmF0aW9uIGluZm8gKi8KKworCUlQVlNfQ01EX05FV19EQUVNT04sCQkvKiBzdGFydCBzeW5jIGRhZW1vbiAqLworCUlQVlNfQ01EX0RFTF9EQUVNT04sCQkvKiBzdG9wIHN5bmMgZGFlbW9uICovCisJSVBWU19DTURfR0VUX0RBRU1PTiwJCS8qIGdldCBzeW5jIGRhZW1vbiBzdGF0dXMgKi8KKworCUlQVlNfQ01EX1NFVF9DT05GSUcsCQkvKiBzZXQgY29uZmlnIHNldHRpbmdzICovCisJSVBWU19DTURfR0VUX0NPTkZJRywJCS8qIGdldCBjb25maWcgc2V0dGluZ3MgKi8KKworCUlQVlNfQ01EX1NFVF9JTkZPLAkJLyogb25seSB1c2VkIGluIEdFVF9JTkZPIHJlcGx5ICovCisJSVBWU19DTURfR0VUX0lORk8sCQkvKiBnZXQgZ2VuZXJhbCBJUFZTIGluZm8gKi8KKworCUlQVlNfQ01EX1pFUk8sCQkJLyogemVybyBhbGwgY291bnRlcnMgYW5kIHN0YXRzICovCisJSVBWU19DTURfRkxVU0gsCQkJLyogZmx1c2ggc2VydmljZXMgYW5kIGRlc3RzICovCisKKwlfX0lQVlNfQ01EX01BWCwKK307CisKKyNkZWZpbmUgSVBWU19DTURfTUFYIChfX0lQVlNfQ01EX01BWCAtIDEpCisKKy8qIEF0dHJpYnV0ZXMgdXNlZCBpbiB0aGUgZmlyc3QgbGV2ZWwgb2YgY29tbWFuZHMgKi8KK2VudW0geworCUlQVlNfQ01EX0FUVFJfVU5TUEVDID0gMCwKKwlJUFZTX0NNRF9BVFRSX1NFUlZJQ0UsCQkvKiBuZXN0ZWQgc2VydmljZSBhdHRyaWJ1dGUgKi8KKwlJUFZTX0NNRF9BVFRSX0RFU1QsCQkvKiBuZXN0ZWQgZGVzdGluYXRpb24gYXR0cmlidXRlICovCisJSVBWU19DTURfQVRUUl9EQUVNT04sCQkvKiBuZXN0ZWQgc3luYyBkYWVtb24gYXR0cmlidXRlICovCisJSVBWU19DTURfQVRUUl9USU1FT1VUX1RDUCwJLyogVENQIGNvbm5lY3Rpb24gdGltZW91dCAqLworCUlQVlNfQ01EX0FUVFJfVElNRU9VVF9UQ1BfRklOLAkvKiBUQ1AgRklOIHdhaXQgdGltZW91dCAqLworCUlQVlNfQ01EX0FUVFJfVElNRU9VVF9VRFAsCS8qIFVEUCB0aW1lb3V0ICovCisJX19JUFZTX0NNRF9BVFRSX01BWCwKK307CisKKyNkZWZpbmUgSVBWU19DTURfQVRUUl9NQVggKF9fSVBWU19TVkNfQVRUUl9NQVggLSAxKQorCisvKgorICogQXR0cmlidXRlcyB1c2VkIHRvIGRlc2NyaWJlIGEgc2VydmljZQorICoKKyAqIFVzZWQgaW5zaWRlIG5lc3RlZCBhdHRyaWJ1dGUgSVBWU19DTURfQVRUUl9TRVJWSUNFCisgKi8KK2VudW0geworCUlQVlNfU1ZDX0FUVFJfVU5TUEVDID0gMCwKKwlJUFZTX1NWQ19BVFRSX0FGLAkJLyogYWRkcmVzcyBmYW1pbHkgKi8KKwlJUFZTX1NWQ19BVFRSX1BST1RPQ09MLAkJLyogdmlydHVhbCBzZXJ2aWNlIHByb3RvY29sICovCisJSVBWU19TVkNfQVRUUl9BRERSLAkJLyogdmlydHVhbCBzZXJ2aWNlIGFkZHJlc3MgKi8KKwlJUFZTX1NWQ19BVFRSX1BPUlQsCQkvKiB2aXJ0dWFsIHNlcnZpY2UgcG9ydCAqLworCUlQVlNfU1ZDX0FUVFJfRldNQVJLLAkJLyogZmlyZXdhbGwgbWFyayBvZiBzZXJ2aWNlICovCisKKwlJUFZTX1NWQ19BVFRSX1NDSEVEX05BTUUsCS8qIG5hbWUgb2Ygc2NoZWR1bGVyICovCisJSVBWU19TVkNfQVRUUl9GTEFHUywJCS8qIHZpcnR1YWwgc2VydmljZSBmbGFncyAqLworCUlQVlNfU1ZDX0FUVFJfVElNRU9VVCwJCS8qIHBlcnNpc3RlbnQgdGltZW91dCAqLworCUlQVlNfU1ZDX0FUVFJfTkVUTUFTSywJCS8qIHBlcnNpc3RlbnQgbmV0bWFzayAqLworCisJSVBWU19TVkNfQVRUUl9TVEFUUywJCS8qIG5lc3RlZCBhdHRyaWJ1dGUgZm9yIHNlcnZpY2Ugc3RhdHMgKi8KKworCUlQVlNfU1ZDX0FUVFJfUEVfTkFNRSwJCS8qIG5hbWUgb2YgY3QgcmV0cmlldmVyICovCisKKwlfX0lQVlNfU1ZDX0FUVFJfTUFYLAorfTsKKworI2RlZmluZSBJUFZTX1NWQ19BVFRSX01BWCAoX19JUFZTX1NWQ19BVFRSX01BWCAtIDEpCisKKy8qCisgKiBBdHRyaWJ1dGVzIHVzZWQgdG8gZGVzY3JpYmUgYSBkZXN0aW5hdGlvbiAocmVhbCBzZXJ2ZXIpCisgKgorICogVXNlZCBpbnNpZGUgbmVzdGVkIGF0dHJpYnV0ZSBJUFZTX0NNRF9BVFRSX0RFU1QKKyAqLworZW51bSB7CisJSVBWU19ERVNUX0FUVFJfVU5TUEVDID0gMCwKKwlJUFZTX0RFU1RfQVRUUl9BRERSLAkJLyogcmVhbCBzZXJ2ZXIgYWRkcmVzcyAqLworCUlQVlNfREVTVF9BVFRSX1BPUlQsCQkvKiByZWFsIHNlcnZlciBwb3J0ICovCisKKwlJUFZTX0RFU1RfQVRUUl9GV0RfTUVUSE9ELAkvKiBmb3J3YXJkaW5nIG1ldGhvZCAqLworCUlQVlNfREVTVF9BVFRSX1dFSUdIVCwJCS8qIGRlc3RpbmF0aW9uIHdlaWdodCAqLworCisJSVBWU19ERVNUX0FUVFJfVV9USFJFU0gsCS8qIHVwcGVyIHRocmVzaG9sZCAqLworCUlQVlNfREVTVF9BVFRSX0xfVEhSRVNILAkvKiBsb3dlciB0aHJlc2hvbGQgKi8KKworCUlQVlNfREVTVF9BVFRSX0FDVElWRV9DT05OUywJLyogYWN0aXZlIGNvbm5lY3Rpb25zICovCisJSVBWU19ERVNUX0FUVFJfSU5BQ1RfQ09OTlMsCS8qIGluYWN0aXZlIGNvbm5lY3Rpb25zICovCisJSVBWU19ERVNUX0FUVFJfUEVSU0lTVF9DT05OUywJLyogcGVyc2lzdGVudCBjb25uZWN0aW9ucyAqLworCisJSVBWU19ERVNUX0FUVFJfU1RBVFMsCQkvKiBuZXN0ZWQgYXR0cmlidXRlIGZvciBkZXN0IHN0YXRzICovCisJX19JUFZTX0RFU1RfQVRUUl9NQVgsCit9OworCisjZGVmaW5lIElQVlNfREVTVF9BVFRSX01BWCAoX19JUFZTX0RFU1RfQVRUUl9NQVggLSAxKQorCisvKgorICogQXR0cmlidXRlcyBkZXNjcmliaW5nIGEgc3luYyBkYWVtb24KKyAqCisgKiBVc2VkIGluc2lkZSBuZXN0ZWQgYXR0cmlidXRlIElQVlNfQ01EX0FUVFJfREFFTU9OCisgKi8KK2VudW0geworCUlQVlNfREFFTU9OX0FUVFJfVU5TUEVDID0gMCwKKwlJUFZTX0RBRU1PTl9BVFRSX1NUQVRFLAkJLyogc3luYyBkYWVtb24gc3RhdGUgKG1hc3Rlci9iYWNrdXApICovCisJSVBWU19EQUVNT05fQVRUUl9NQ0FTVF9JRk4sCS8qIG11bHRpY2FzdCBpbnRlcmZhY2UgbmFtZSAqLworCUlQVlNfREFFTU9OX0FUVFJfU1lOQ19JRCwJLyogU3luY0lEIHdlIGJlbG9uZyB0byAqLworCV9fSVBWU19EQUVNT05fQVRUUl9NQVgsCit9OworCisjZGVmaW5lIElQVlNfREFFTU9OX0FUVFJfTUFYIChfX0lQVlNfREFFTU9OX0FUVFJfTUFYIC0gMSkKKworLyoKKyAqIEF0dHJpYnV0ZXMgdXNlZCB0byBkZXNjcmliZSBzZXJ2aWNlIG9yIGRlc3RpbmF0aW9uIGVudHJ5IHN0YXRpc3RpY3MKKyAqCisgKiBVc2VkIGluc2lkZSBuZXN0ZWQgYXR0cmlidXRlcyBJUFZTX1NWQ19BVFRSX1NUQVRTIGFuZCBJUFZTX0RFU1RfQVRUUl9TVEFUUworICovCitlbnVtIHsKKwlJUFZTX1NUQVRTX0FUVFJfVU5TUEVDID0gMCwKKwlJUFZTX1NUQVRTX0FUVFJfQ09OTlMsCQkvKiBjb25uZWN0aW9ucyBzY2hlZHVsZWQgKi8KKwlJUFZTX1NUQVRTX0FUVFJfSU5QS1RTLAkJLyogaW5jb21pbmcgcGFja2V0cyAqLworCUlQVlNfU1RBVFNfQVRUUl9PVVRQS1RTLAkvKiBvdXRnb2luZyBwYWNrZXRzICovCisJSVBWU19TVEFUU19BVFRSX0lOQllURVMsCS8qIGluY29taW5nIGJ5dGVzICovCisJSVBWU19TVEFUU19BVFRSX09VVEJZVEVTLAkvKiBvdXRnb2luZyBieXRlcyAqLworCisJSVBWU19TVEFUU19BVFRSX0NQUywJCS8qIGN1cnJlbnQgY29ubmVjdGlvbiByYXRlICovCisJSVBWU19TVEFUU19BVFRSX0lOUFBTLAkJLyogY3VycmVudCBpbiBwYWNrZXQgcmF0ZSAqLworCUlQVlNfU1RBVFNfQVRUUl9PVVRQUFMsCQkvKiBjdXJyZW50IG91dCBwYWNrZXQgcmF0ZSAqLworCUlQVlNfU1RBVFNfQVRUUl9JTkJQUywJCS8qIGN1cnJlbnQgaW4gYnl0ZSByYXRlICovCisJSVBWU19TVEFUU19BVFRSX09VVEJQUywJCS8qIGN1cnJlbnQgb3V0IGJ5dGUgcmF0ZSAqLworCV9fSVBWU19TVEFUU19BVFRSX01BWCwKK307CisKKyNkZWZpbmUgSVBWU19TVEFUU19BVFRSX01BWCAoX19JUFZTX1NUQVRTX0FUVFJfTUFYIC0gMSkKKworLyogQXR0cmlidXRlcyB1c2VkIGluIHJlc3BvbnNlIHRvIElQVlNfQ01EX0dFVF9JTkZPIGNvbW1hbmQgKi8KK2VudW0geworCUlQVlNfSU5GT19BVFRSX1VOU1BFQyA9IDAsCisJSVBWU19JTkZPX0FUVFJfVkVSU0lPTiwJCS8qIElQVlMgdmVyc2lvbiBudW1iZXIgKi8KKwlJUFZTX0lORk9fQVRUUl9DT05OX1RBQl9TSVpFLAkvKiBzaXplIG9mIGNvbm5lY3Rpb24gaGFzaCB0YWJsZSAqLworCV9fSVBWU19JTkZPX0FUVFJfTUFYLAorfTsKKworI2RlZmluZSBJUFZTX0lORk9fQVRUUl9NQVggKF9fSVBWU19JTkZPX0FUVFJfTUFYIC0gMSkKKworI2VuZGlmCS8qIF9JUF9WU19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXBjLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXBjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThhNTNhMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pcGMuaApAQCAtMCwwICsxLDgxIEBACisjaWZuZGVmIF9MSU5VWF9JUENfSAorI2RlZmluZSBfTElOVVhfSVBDX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgSVBDX1BSSVZBVEUgKChfX2tlcm5lbF9rZXlfdCkgMCkgIAorCisvKiBPYnNvbGV0ZSwgdXNlZCBvbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhbmQgbGliYzUgY29tcGlsZXMgKi8KK3N0cnVjdCBpcGNfcGVybQoreworCV9fa2VybmVsX2tleV90CWtleTsKKwlfX2tlcm5lbF91aWRfdAl1aWQ7CisJX19rZXJuZWxfZ2lkX3QJZ2lkOworCV9fa2VybmVsX3VpZF90CWN1aWQ7CisJX19rZXJuZWxfZ2lkX3QJY2dpZDsKKwlfX2tlcm5lbF9tb2RlX3QJbW9kZTsgCisJdW5zaWduZWQgc2hvcnQJc2VxOworfTsKKworLyogSW5jbHVkZSB0aGUgZGVmaW5pdGlvbiBvZiBpcGM2NF9wZXJtICovCisjaW5jbHVkZSA8YXNtL2lwY2J1Zi5oPgorCisvKiByZXNvdXJjZSBnZXQgcmVxdWVzdCBmbGFncyAqLworI2RlZmluZSBJUENfQ1JFQVQgIDAwMDAxMDAwICAgLyogY3JlYXRlIGlmIGtleSBpcyBub25leGlzdGVudCAqLworI2RlZmluZSBJUENfRVhDTCAgIDAwMDAyMDAwICAgLyogZmFpbCBpZiBrZXkgZXhpc3RzICovCisjZGVmaW5lIElQQ19OT1dBSVQgMDAwMDQwMDAgICAvKiByZXR1cm4gZXJyb3Igb24gd2FpdCAqLworCisvKiB0aGVzZSBmaWVsZHMgYXJlIHVzZWQgYnkgdGhlIERJUEMgcGFja2FnZSBzbyB0aGUga2VybmVsIGFzIHN0YW5kYXJkCisgICBzaG91bGQgYXZvaWQgdXNpbmcgdGhlbSBpZiBwb3NzaWJsZSAqLworICAgCisjZGVmaW5lIElQQ19ESVBDIDAwMDEwMDAwICAvKiBtYWtlIGl0IGRpc3RyaWJ1dGVkICovCisjZGVmaW5lIElQQ19PV04gIDAwMDIwMDAwICAvKiB0aGlzIG1hY2hpbmUgaXMgdGhlIERJUEMgb3duZXIgKi8KKworLyogCisgKiBDb250cm9sIGNvbW1hbmRzIHVzZWQgd2l0aCBzZW1jdGwsIG1zZ2N0bCBhbmQgc2htY3RsIAorICogc2VlIGFsc28gc3BlY2lmaWMgY29tbWFuZHMgaW4gc2VtLmgsIG1zZy5oIGFuZCBzaG0uaAorICovCisjZGVmaW5lIElQQ19STUlEIDAgICAgIC8qIHJlbW92ZSByZXNvdXJjZSAqLworI2RlZmluZSBJUENfU0VUICAxICAgICAvKiBzZXQgaXBjX3Blcm0gb3B0aW9ucyAqLworI2RlZmluZSBJUENfU1RBVCAyICAgICAvKiBnZXQgaXBjX3Blcm0gb3B0aW9ucyAqLworI2RlZmluZSBJUENfSU5GTyAzICAgICAvKiBzZWUgaXBjcyAqLworCisvKgorICogVmVyc2lvbiBmbGFncyBmb3Igc2VtY3RsLCBtc2djdGwsIGFuZCBzaG1jdGwgY29tbWFuZHMKKyAqIFRoZXNlIGFyZSBwYXNzZWQgYXMgYml0ZmxhZ3Mgb3ItZWQgd2l0aCB0aGUgYWN0dWFsIGNvbW1hbmQKKyAqLworI2RlZmluZSBJUENfT0xEIDAJLyogT2xkIHZlcnNpb24gKG5vIDMyLWJpdCBVSUQgc3VwcG9ydCBvbiBtYW55CisJCQkgICBhcmNoaXRlY3R1cmVzKSAqLworI2RlZmluZSBJUENfNjQgIDB4MDEwMCAgLyogTmV3IHZlcnNpb24gKHN1cHBvcnQgMzItYml0IFVJRHMsIGJpZ2dlcgorCQkJICAgbWVzc2FnZSBzaXplcywgZXRjLiAqLworCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gd3JhcCBzeXN0ZW0gY2FsbHMuCisgKgorICogU2VlIGFyY2hpdGVjdHVyZSBjb2RlIGZvciB1Z2x5IGRldGFpbHMuLgorICovCitzdHJ1Y3QgaXBjX2tsdWRnZSB7CisJc3RydWN0IG1zZ2J1ZiAqbXNncDsKKwlsb25nIG1zZ3R5cDsKK307CisKKyNkZWZpbmUgU0VNT1AJCSAxCisjZGVmaW5lIFNFTUdFVAkJIDIKKyNkZWZpbmUgU0VNQ1RMCQkgMworI2RlZmluZSBTRU1USU1FRE9QCSA0CisjZGVmaW5lIE1TR1NORAkJMTEKKyNkZWZpbmUgTVNHUkNWCQkxMgorI2RlZmluZSBNU0dHRVQJCTEzCisjZGVmaW5lIE1TR0NUTAkJMTQKKyNkZWZpbmUgU0hNQVQJCTIxCisjZGVmaW5lIFNITURUCQkyMgorI2RlZmluZSBTSE1HRVQJCTIzCisjZGVmaW5lIFNITUNUTAkJMjQKKworLyogVXNlZCBieSB0aGUgRElQQyBwYWNrYWdlLCB0cnkgYW5kIGF2b2lkIHJldXNpbmcgaXQgKi8KKyNkZWZpbmUgRElQQyAgICAgICAgICAgIDI1CisKKyNkZWZpbmUgSVBDQ0FMTCh2ZXJzaW9uLG9wKQkoKHZlcnNpb24pPDwxNiB8IChvcCkpCisKKworI2VuZGlmIC8qIF9MSU5VWF9JUENfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lwbWkuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pcG1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlmZjY3MgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pcG1pLmgKQEAgLTAsMCArMSw0NTYgQEAKKy8qCisgKiBpcG1pLmgKKyAqCisgKiBNb250YVZpc3RhIElQTUkgaW50ZXJmYWNlCisgKgorICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiAgICAgICAgIENvcmV5IE1pbnlhcmQgPG1pbnlhcmRAbXZpc3RhLmNvbT4KKyAqICAgICAgICAgc291cmNlQG12aXN0YS5jb20KKyAqCisgKiBDb3B5cmlnaHQgMjAwMiBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiAgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqICBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgKiAgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfSVBNSV9ICisjZGVmaW5lIF9fTElOVVhfSVBNSV9ICisKKyNpbmNsdWRlIDxsaW51eC9pcG1pX21zZ2RlZnMuaD4KKworCisvKgorICogVGhpcyBmaWxlIGRlc2NyaWJlcyBhbiBpbnRlcmZhY2UgdG8gYW4gSVBNSSBkcml2ZXIuICBZb3UgaGF2ZSB0bworICogaGF2ZSBhIGZhaXJseSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgSVBNSSB0byB1c2UgdGhpcywgc28gZ28gcmVhZAorICogdGhlIHNwZWNzIGZpcnN0IGJlZm9yZSBhY3R1YWxseSB0cnlpbmcgdG8gZG8gYW55dGhpbmcuCisgKgorICogV2l0aCB0aGF0IHNhaWQsIHRoaXMgZHJpdmVyIHByb3ZpZGVzIGEgbXVsdGktdXNlciBpbnRlcmZhY2UgdG8gdGhlCisgKiBJUE1JIGRyaXZlciwgYW5kIGl0IGFsbG93cyBtdWx0aXBsZSBJUE1JIHBoeXNpY2FsIGludGVyZmFjZXMgYmVsb3cKKyAqIHRoZSBkcml2ZXIuICBUaGUgcGh5c2ljYWwgaW50ZXJmYWNlcyBiaW5kIGFzIGEgbG93ZXIgbGF5ZXIgb24gdGhlCisgKiBkcml2ZXIuICBUaGV5IGFwcGVhciBhcyBpbnRlcmZhY2VzIHRvIHRoZSBhcHBsaWNhdGlvbiB1c2luZyB0aGlzCisgKiBpbnRlcmZhY2UuCisgKgorICogTXVsdGktdXNlciBtZWFucyB0aGF0IG11bHRpcGxlIGFwcGxpY2F0aW9ucyBtYXkgdXNlIHRoZSBkcml2ZXIsCisgKiBzZW5kIGNvbW1hbmRzLCByZWNlaXZlIHJlc3BvbnNlcywgZXRjLiAgVGhlIGRyaXZlciBrZWVwcyB0cmFjayBvZgorICogY29tbWFuZHMgdGhlIHVzZXIgc2VuZHMgYW5kIHRyYWNrcyB0aGUgcmVzcG9uc2VzLiAgVGhlIHJlc3BvbnNlcworICogd2lsbCBnbyBiYWNrIHRvIHRoZSBhcHBsaWNhdGlvbiB0aGF0IHNlbmQgdGhlIGNvbW1hbmQuICBJZiB0aGUKKyAqIHJlc3BvbnNlIGRvZXNuJ3QgY29tZSBiYWNrIGluIHRpbWUsIHRoZSBkcml2ZXIgd2lsbCByZXR1cm4gYQorICogdGltZW91dCBlcnJvciByZXNwb25zZSB0byB0aGUgYXBwbGljYXRpb24uICBBc3luY2hyb25vdXMgZXZlbnRzCisgKiBmcm9tIHRoZSBCTUMgZXZlbnQgcXVldWUgd2lsbCBnbyB0byBhbGwgdXNlcnMgYm91bmQgdG8gdGhlIGRyaXZlci4KKyAqIFRoZSBpbmNvbWluZyBldmVudCBxdWV1ZSBpbiB0aGUgQk1DIHdpbGwgYXV0b21hdGljYWxseSBiZSBmbHVzaGVkCisgKiBpZiBpdCBiZWNvbWVzIGZ1bGwgYW5kIGl0IGlzIHF1ZXJpZWQgb25jZSBhIHNlY29uZCB0byBzZWUgaWYKKyAqIGFueXRoaW5nIGlzIGluIGl0LiAgSW5jb21pbmcgY29tbWFuZHMgdG8gdGhlIGRyaXZlciB3aWxsIGdldAorICogZGVsaXZlcmVkIGFzIGNvbW1hbmRzLgorICoKKyAqIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHR3byBtYWluIGludGVyZmFjZXM6IG9uZSBmb3IgaW4ta2VybmVsCisgKiBhcHBsaWNhdGlvbnMgYW5kIGFub3RoZXIgZm9yIHVzZXJsYW5kIGFwcGxpY2F0aW9ucy4gIFRoZQorICogY2FwYWJpbGl0aWVzIGFyZSBiYXNpY2FsbHkgdGhlIHNhbWUgZm9yIGJvdGggaW50ZXJmYWNlLCBhbHRob3VnaAorICogdGhlIGludGVyZmFjZXMgYXJlIHNvbWV3aGF0IGRpZmZlcmVudC4gIFRoZSBzdHVmZiBpbiB0aGUKKyAqICNpZmRlZiBfX0tFUk5FTF9fIGJlbG93IGlzIHRoZSBpbi1rZXJuZWwgaW50ZXJmYWNlLiAgVGhlIHVzZXJsYW5kCisgKiBpbnRlcmZhY2UgaXMgZGVmaW5lZCBsYXRlciBpbiB0aGUgZmlsZS4gICovCisKKworCisvKgorICogVGhpcyBpcyBhbiBvdmVybGF5IGZvciBhbGwgdGhlIGFkZHJlc3MgdHlwZXMsIHNvIGl0J3MgZWFzeSB0bworICogZGV0ZXJtaW5lIHRoZSBhY3R1YWwgYWRkcmVzcyB0eXBlLiAgVGhpcyBpcyBraW5kIG9mIGxpa2UgYWRkcmVzc2VzCisgKiB3b3JrIGZvciBzb2NrZXRzLgorICovCisjZGVmaW5lIElQTUlfTUFYX0FERFJfU0laRSAzMgorc3RydWN0IGlwbWlfYWRkciB7CisJIC8qIFRyeSB0byB0YWtlIHRoZXNlIGZyb20gdGhlICJDaGFubmVsIE1lZGl1bSBUeXBlIiB0YWJsZQorCSAgICBpbiBzZWN0aW9uIDYuNSBvZiB0aGUgSVBNSSAxLjUgbWFudWFsLiAqLworCWludCAgIGFkZHJfdHlwZTsKKwlzaG9ydCBjaGFubmVsOworCWNoYXIgIGRhdGFbSVBNSV9NQVhfQUREUl9TSVpFXTsKK307CisKKy8qCisgKiBXaGVuIHRoZSBhZGRyZXNzIGlzIG5vdCB1c2VkLCB0aGUgdHlwZSB3aWxsIGJlIHNldCB0byB0aGlzIHZhbHVlLgorICogVGhlIGNoYW5uZWwgaXMgdGhlIEJNQydzIGNoYW5uZWwgbnVtYmVyIGZvciB0aGUgY2hhbm5lbCAodXN1YWxseQorICogMCksIG9yIElQTUNfQk1DX0NIQU5ORUwgaWYgY29tbXVuaWNhdGluZyBkaXJlY3RseSB3aXRoIHRoZSBCTUMuCisgKi8KKyNkZWZpbmUgSVBNSV9TWVNURU1fSU5URVJGQUNFX0FERFJfVFlQRQkweDBjCitzdHJ1Y3QgaXBtaV9zeXN0ZW1faW50ZXJmYWNlX2FkZHIgeworCWludCAgICAgICAgICAgYWRkcl90eXBlOworCXNob3J0ICAgICAgICAgY2hhbm5lbDsKKwl1bnNpZ25lZCBjaGFyIGx1bjsKK307CisKKy8qIEFuIElQTUIgQWRkcmVzcy4gKi8KKyNkZWZpbmUgSVBNSV9JUE1CX0FERFJfVFlQRQkJMHgwMQorLyogVXNlZCBmb3IgYnJvYWRjYXN0IGdldCBkZXZpY2UgaWQgYXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gMTcuOSBvZiB0aGUKKyAgIElQTUkgMS41IG1hbnVhbC4gKi8KKyNkZWZpbmUgSVBNSV9JUE1CX0JST0FEQ0FTVF9BRERSX1RZUEUJMHg0MQorc3RydWN0IGlwbWlfaXBtYl9hZGRyIHsKKwlpbnQgICAgICAgICAgIGFkZHJfdHlwZTsKKwlzaG9ydCAgICAgICAgIGNoYW5uZWw7CisJdW5zaWduZWQgY2hhciBzbGF2ZV9hZGRyOworCXVuc2lnbmVkIGNoYXIgbHVuOworfTsKKworLyoKKyAqIEEgTEFOIEFkZHJlc3MuICBUaGlzIGlzIGFuIGFkZHJlc3MgdG8vZnJvbSBhIExBTiBpbnRlcmZhY2UgYnJpZGdlZAorICogYnkgdGhlIEJNQywgbm90IGFuIGFkZHJlc3MgYWN0dWFsbHkgb3V0IG9uIHRoZSBMQU4uCisgKgorICogQSBjb25jaW91cyBkZWNpc2lvbiB3YXMgbWFkZSBoZXJlIHRvIGRldmlhdGUgc2xpZ2h0bHkgZnJvbSB0aGUgSVBNSQorICogc3BlYy4gIFdlIGRvIG5vdCB1c2UgcnFTV0lEIGFuZCByc1NXSUQgbGlrZSBpdCBzaG93cyBpbiB0aGUKKyAqIG1lc3NhZ2UuICBJbnN0ZWFkLCB3ZSB1c2UgcmVtb3RlX1NXSUQgYW5kIGxvY2FsX1NXSUQuICBUaGlzIG1lYW5zCisgKiB0aGF0IGFueSBtZXNzYWdlIChhIHJlcXVlc3Qgb3IgcmVzcG9uc2UpIGZyb20gYW5vdGhlciBkZXZpY2Ugd2lsbAorICogYWx3YXlzIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBhZGRyZXNzLiAgSWYgeW91IGRpZG4ndCBkbyB0aGlzLAorICogcmVxdWVzdHMgYW5kIHJlc3BvbnNlcyBmcm9tIHRoZSBzYW1lIGRldmljZSB3b3VsZCBoYXZlIGRpZmZlcmVudAorICogYWRkcmVzc2VzLCBhbmQgdGhhdCdzIG5vdCB0b28gY29vbC4KKyAqCisgKiBJbiB0aGlzIGFkZHJlc3MsIHRoZSByZW1vdGVfU1dJRCBpcyBhbHdheXMgdGhlIFNXSUQgdGhlIHJlbW90ZQorICogbWVzc2FnZSBjYW1lIGZyb20sIG9yIHRoZSBTV0lEIHdlIGFyZSBzZW5kaW5nIHRoZSBtZXNzYWdlIHRvLgorICogbG9jYWxfU1dJRCBpcyBhbHdheXMgb3VyIFNXSUQuICBOb3RlIHRoYXQgaGF2aW5nIG91ciBTV0lEIGluIHRoZQorICogbWVzc2FnZSBpcyBhIGxpdHRsZSB3ZWlyZCwgYnV0IHRoaXMgaXMgcmVxdWlyZWQuCisgKi8KKyNkZWZpbmUgSVBNSV9MQU5fQUREUl9UWVBFCQkweDA0CitzdHJ1Y3QgaXBtaV9sYW5fYWRkciB7CisJaW50ICAgICAgICAgICBhZGRyX3R5cGU7CisJc2hvcnQgICAgICAgICBjaGFubmVsOworCXVuc2lnbmVkIGNoYXIgcHJpdmlsZWdlOworCXVuc2lnbmVkIGNoYXIgc2Vzc2lvbl9oYW5kbGU7CisJdW5zaWduZWQgY2hhciByZW1vdGVfU1dJRDsKKwl1bnNpZ25lZCBjaGFyIGxvY2FsX1NXSUQ7CisJdW5zaWduZWQgY2hhciBsdW47Cit9OworCisKKy8qCisgKiBDaGFubmVsIGZvciB0YWxraW5nIGRpcmVjdGx5IHdpdGggdGhlIEJNQy4gIFdoZW4gdXNpbmcgdGhpcworICogY2hhbm5lbCwgVGhpcyBpcyBmb3IgdGhlIHN5c3RlbSBpbnRlcmZhY2UgYWRkcmVzcyB0eXBlIG9ubHkuICBGSVhNRQorICogLSBpcyB0aGlzIHJpZ2h0LCBvciBzaG91bGQgd2UgdXNlIC0xPworICovCisjZGVmaW5lIElQTUlfQk1DX0NIQU5ORUwgIDB4ZgorI2RlZmluZSBJUE1JX05VTV9DSEFOTkVMUyAweDEwCisKKy8qCisgKiBVc2VkIHRvIHNpZ25pZnkgYW4gImFsbCBjaGFubmVsIiBiaXRtYXNrLiAgVGhpcyBpcyBtb3JlIHRoYW4gdGhlCisgKiBhY3R1YWwgbnVtYmVyIG9mIGNoYW5uZWxzIGJlY2F1c2UgdGhpcyBpcyB1c2VkIGluIHVzZXJsYW5kIGFuZAorICogd2lsbCBjb3ZlciB1cyBpZiB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIGlzIGV4dGVuZGVkLgorICovCisjZGVmaW5lIElQTUlfQ0hBTl9BTEwgICAgICh+MCkKKworCisvKgorICogQSByYXcgSVBNSSBtZXNzYWdlIHdpdGhvdXQgYW55IGFkZHJlc3NpbmcuICBUaGlzIGNvdmVycyBib3RoCisgKiBjb21tYW5kcyBhbmQgcmVzcG9uc2VzLiAgVGhlIGNvbXBsZXRpb24gY29kZSBpcyBhbHdheXMgdGhlIGZpcnN0CisgKiBieXRlIG9mIGRhdGEgaW4gdGhlIHJlc3BvbnNlIChhcyB0aGUgc3BlYyBzaG93cyB0aGUgbWVzc2FnZXMgbGFpZAorICogb3V0KS4KKyAqLworc3RydWN0IGlwbWlfbXNnIHsKKwl1bnNpZ25lZCBjaGFyICBuZXRmbjsKKwl1bnNpZ25lZCBjaGFyICBjbWQ7CisJdW5zaWduZWQgc2hvcnQgZGF0YV9sZW47CisJdW5zaWduZWQgY2hhciAgKmRhdGE7Cit9OworCitzdHJ1Y3Qga2VybmVsX2lwbWlfbXNnIHsKKwl1bnNpZ25lZCBjaGFyICBuZXRmbjsKKwl1bnNpZ25lZCBjaGFyICBjbWQ7CisJdW5zaWduZWQgc2hvcnQgZGF0YV9sZW47CisJdW5zaWduZWQgY2hhciAgKmRhdGE7Cit9OworCisvKgorICogVmFyaW91cyBkZWZpbmVzIHRoYXQgYXJlIHVzZWZ1bCBmb3IgSVBNSSBhcHBsaWNhdGlvbnMuCisgKi8KKyNkZWZpbmUgSVBNSV9JTlZBTElEX0NNRF9DT01QTEVUSU9OX0NPREUJMHhDMQorI2RlZmluZSBJUE1JX1RJTUVPVVRfQ09NUExFVElPTl9DT0RFCQkweEMzCisjZGVmaW5lIElQTUlfVU5LTk9XTl9FUlJfQ09NUExFVElPTl9DT0RFCTB4ZmYKKworCisvKgorICogUmVjZWl2ZSB0eXBlcyBmb3IgbWVzc2FnZXMgY29taW5nIGZyb20gdGhlIHJlY2VpdmUgaW50ZXJmYWNlLiAgVGhpcworICogaXMgdXNlZCBmb3IgdGhlIHJlY2VpdmUgaW4ta2VybmVsIGludGVyZmFjZSBhbmQgaW4gdGhlIHJlY2VpdmUKKyAqIElPQ1RMLgorICoKKyAqIFRoZSAiSVBNSV9SRVNQT05TRV9SRVNQTk9TRV9UWVBFIiBpcyBhIGxpdHRsZSBzdHJhbmdlIHNvdW5kaW5nLCBidXQKKyAqIGl0IGFsbG93cyB5b3UgdG8gZ2V0IHRoZSBtZXNzYWdlIHJlc3VsdHMgd2hlbiB5b3Ugc2VuZCBhIHJlc3BvbnNlCisgKiBtZXNzYWdlLgorICovCisjZGVmaW5lIElQTUlfUkVTUE9OU0VfUkVDVl9UWVBFCQkxIC8qIEEgcmVzcG9uc2UgdG8gYSBjb21tYW5kICovCisjZGVmaW5lIElQTUlfQVNZTkNfRVZFTlRfUkVDVl9UWVBFCTIgLyogU29tZXRoaW5nIGZyb20gdGhlIGV2ZW50IHF1ZXVlICovCisjZGVmaW5lIElQTUlfQ01EX1JFQ1ZfVFlQRQkJMyAvKiBBIGNvbW1hbmQgZnJvbSBzb21ld2hlcmUgZWxzZSAqLworI2RlZmluZSBJUE1JX1JFU1BPTlNFX1JFU1BPTlNFX1RZUEUJNCAvKiBUaGUgcmVzcG9uc2UgZm9yCisJCQkJCSAgICAgIGEgc2VudCByZXNwb25zZSwgZ2l2aW5nIGFueQorCQkJCQkgICAgICBlcnJvciBzdGF0dXMgZm9yIHNlbmRpbmcgdGhlCisJCQkJCSAgICAgIHJlc3BvbnNlLiAgV2hlbiB5b3Ugc2VuZCBhCisJCQkJCSAgICAgIHJlc3BvbnNlIG1lc3NhZ2UsIHRoaXMgd2lsbAorCQkJCQkgICAgICBiZSByZXR1cm5lZC4gKi8KKyNkZWZpbmUgSVBNSV9PRU1fUkVDVl9UWVBFCQk1IC8qIFRoZSByZXNwb25zZSBmb3IgT0VNIENoYW5uZWxzICovCisKKy8qIE5vdGUgdGhhdCBhc3luYyBldmVudHMgYW5kIHJlY2VpdmVkIGNvbW1hbmRzIGRvIG5vdCBoYXZlIGEgY29tcGxldGlvbgorICAgY29kZSBhcyB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgaW5jb21pbmcgZGF0YSwgdW5saWtlIGEgcmVzcG9uc2UuICovCisKKworLyoKKyAqIE1vZGVzIGZvciBpcG1pX3NldF9tYWludF9tb2RlKCkgYW5kIHRoZSB1c2VybGFuZCBJT0NUTC4gIFRoZSBBVVRPCisgKiBzZXR0aW5nIGlzIHRoZSBkZWZhdWx0IGFuZCBtZWFucyBpdCB3aWxsIGJlIHNldCBvbiBjZXJ0YWluCisgKiBjb21tYW5kcy4gIEhhcmQgc2V0dGluZyBpdCBvbiBhbmQgb2ZmIHdpbGwgb3ZlcnJpZGUgYXV0b21hdGljCisgKiBvcGVyYXRpb24uCisgKi8KKyNkZWZpbmUgSVBNSV9NQUlOVEVOQU5DRV9NT0RFX0FVVE8JMAorI2RlZmluZSBJUE1JX01BSU5URU5BTkNFX01PREVfT0ZGCTEKKyNkZWZpbmUgSVBNSV9NQUlOVEVOQU5DRV9NT0RFX09OCTIKKworCisKKy8qCisgKiBUaGUgdXNlcmxhbmQgaW50ZXJmYWNlCisgKi8KKworLyoKKyAqIFRoZSB1c2VybGFuZCBpbnRlcmZhY2UgZm9yIHRoZSBJUE1JIGRyaXZlciBpcyBhIHN0YW5kYXJkIGNoYXJhY3RlcgorICogZGV2aWNlLCB3aXRoIGVhY2ggaW5zdGFuY2Ugb2YgYW4gaW50ZXJmYWNlIHJlZ2lzdGVyZWQgYXMgYSBtaW5vcgorICogbnVtYmVyIHVuZGVyIHRoZSBtYWpvciBjaGFyYWN0ZXIgZGV2aWNlLgorICoKKyAqIFRoZSByZWFkIGFuZCB3cml0ZSBjYWxscyBkbyBub3Qgd29yaywgdG8gZ2V0IG1lc3NhZ2VzIGluIGFuZCBvdXQKKyAqIHJlcXVpcmVzIGlvY3RsIGNhbGxzIGJlY2F1c2Ugb2YgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIGRhdGEuICBzZWxlY3QKKyAqIGFuZCBwb2xsIGRvIHdvcmssIHNvIHlvdSBjYW4gd2FpdCBmb3IgaW5wdXQgdXNpbmcgdGhlIGZpbGUKKyAqIGRlc2NyaXB0b3IsIHlvdSBqdXN0IGNhbiB1c2UgcmVhZCB0byBnZXQgaXQuCisgKgorICogSW4gZ2VuZXJhbCwgeW91IHNlbmQgYSBjb21tYW5kIGRvd24gdG8gdGhlIGludGVyZmFjZSBhbmQgcmVjZWl2ZQorICogcmVzcG9uc2VzIGJhY2suICBZb3UgY2FuIHVzZSB0aGUgbXNnaWQgdmFsdWUgdG8gY29ycmVsYXRlIGNvbW1hbmRzCisgKiBhbmQgcmVzcG9uc2VzLCB0aGUgZHJpdmVyIHdpbGwgdGFrZSBjYXJlIG9mIGZpZ3VyaW5nIG91dCB3aGljaAorICogaW5jb21pbmcgbWVzc2FnZXMgYXJlIGZvciB3aGljaCBjb21tYW5kIGFuZCBmaW5kIHRoZSBwcm9wZXIgbXNnaWQKKyAqIHZhbHVlIHRvIHJlcG9ydC4gIFlvdSB3aWxsIG9ubHkgcmVjZWl2ZSByZXBvbnNlcyBmb3IgY29tbWFuZHMgeW91CisgKiBzZW5kLiAgQXN5bmNocm9ub3VzIGV2ZW50cywgaG93ZXZlciwgZ28gdG8gYWxsIG9wZW4gdXNlcnMsIHNvIHlvdQorICogbXVzdCBiZSByZWFkeSB0byBoYW5kbGUgdGhlc2UgKG9yIGlnbm9yZSB0aGVtIGlmIHlvdSBkb24ndCBjYXJlKS4KKyAqCisgKiBUaGUgYWRkcmVzcyB0eXBlIGRlcGVuZHMgdXBvbiB0aGUgY2hhbm5lbCB0eXBlLiAgV2hlbiB0YWxraW5nCisgKiBkaXJlY3RseSB0byB0aGUgQk1DIChJUE1DX0JNQ19DSEFOTkVMKSwgdGhlIGFkZHJlc3MgaXMgaWdub3JlZAorICogKElQTUlfVU5VU0VEX0FERFJfVFlQRSkuICBXaGVuIHRhbGtpbmcgdG8gYW4gSVBNQiBjaGFubmVsLCB5b3UgbXVzdAorICogc3VwcGx5IGEgdmFsaWQgSVBNQiBhZGRyZXNzIHdpdGggdGhlIGFkZHJfdHlwZSBzZXQgcHJvcGVybHkuCisgKgorICogV2hlbiB0YWxraW5nIHRvIG5vcm1hbCBjaGFubmVscywgdGhlIGRyaXZlciB0YWtlcyBjYXJlIG9mIHRoZQorICogZGV0YWlscyBvZiBmb3JtYXR0aW5nIGFuZCBzZW5kaW5nIG1lc3NhZ2VzIG9uIHRoYXQgY2hhbm5lbC4gIFlvdSBkbworICogbm90LCBmb3IgaW5zdGFuY2UsIGhhdmUgdG8gZm9ybWF0IGEgc2VuZCBjb21tYW5kLCB5b3UganVzdCBzZW5kCisgKiB3aGF0ZXZlciBjb21tYW5kIHlvdSB3YW50IHRvIHRoZSBjaGFubmVsLCB0aGUgZHJpdmVyIHdpbGwgY3JlYXRlCisgKiB0aGUgc2VuZCBjb21tYW5kLCBhdXRvbWF0aWNhbGx5IGlzc3VlIHJlY2VpdmUgY29tbWFuZCBhbmQgZ2V0IGV2ZW4KKyAqIGNvbW1hbmRzLCBhbmQgcGFzcyB0aG9zZSB1cCB0byB0aGUgcHJvcGVyIHVzZXIuCisgKi8KKworCisvKiBUaGUgbWFnaWMgSU9DVEwgdmFsdWUgZm9yIHRoaXMgaW50ZXJmYWNlLiAqLworI2RlZmluZSBJUE1JX0lPQ19NQUdJQyAnaScKKworCisvKiBNZXNzYWdlcyBzZW50IHRvIHRoZSBpbnRlcmZhY2UgYXJlIHRoaXMgZm9ybWF0LiAqLworc3RydWN0IGlwbWlfcmVxIHsKKwl1bnNpZ25lZCBjaGFyICphZGRyOyAvKiBBZGRyZXNzIHRvIHNlbmQgdGhlIG1lc3NhZ2UgdG8uICovCisJdW5zaWduZWQgaW50ICBhZGRyX2xlbjsKKworCWxvbmcgICAgbXNnaWQ7IC8qIFRoZSBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoZSBtZXNzYWdlLiAgVGhpcworCQkJICBleGFjdCB2YWx1ZSB3aWxsIGJlIHJlcG9ydGVkIGJhY2sgaW4gdGhlCisJCQkgIHJlc3BvbnNlIHRvIHRoaXMgcmVxdWVzdCBpZiBpdCBpcyBhIGNvbW1hbmQuCisJCQkgIElmIGl0IGlzIGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZSB1c2VkIGFzCisJCQkgIHRoZSBzZXF1ZW5jZSB2YWx1ZSBmb3IgdGhlIHJlc3BvbnNlLiAgKi8KKworCXN0cnVjdCBpcG1pX21zZyBtc2c7Cit9OworLyoKKyAqIFNlbmQgYSBtZXNzYWdlIHRvIHRoZSBpbnRlcmZhY2VzLiAgZXJyb3IgdmFsdWVzIGFyZToKKyAqICAgLSBFRkFVTFQgLSBhbiBhZGRyZXNzIHN1cHBsaWVkIHdhcyBpbnZhbGlkLgorICogICAtIEVJTlZBTCAtIFRoZSBhZGRyZXNzIHN1cHBsaWVkIHdhcyBub3QgdmFsaWQsIG9yIHRoZSBjb21tYW5kCisgKiAgICAgICAgICAgICAgd2FzIG5vdCBhbGxvd2VkLgorICogICAtIEVNU0dTSVpFIC0gVGhlIG1lc3NhZ2UgdG8gd2FzIHRvbyBsYXJnZS4KKyAqICAgLSBFTk9NRU0gLSBCdWZmZXJzIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQgZm9yIHRoZSBjb21tYW5kLgorICovCisjZGVmaW5lIElQTUlDVExfU0VORF9DT01NQU5ECQlfSU9SKElQTUlfSU9DX01BR0lDLCAxMywJXAorCQkJCQkgICAgIHN0cnVjdCBpcG1pX3JlcSkKKworLyogTWVzc2FnZXMgc2VudCB0byB0aGUgaW50ZXJmYWNlIHdpdGggdGltaW5nIHBhcmFtZXRlcnMgYXJlIHRoaXMKKyAgIGZvcm1hdC4gKi8KK3N0cnVjdCBpcG1pX3JlcV9zZXR0aW1lIHsKKwlzdHJ1Y3QgaXBtaV9yZXEgcmVxOworCisJLyogU2VlIGlwbWlfcmVxdWVzdF9zZXR0aW1lKCkgYWJvdmUgZm9yIGRldGFpbHMgb24gdGhlc2UKKwkgICB2YWx1ZXMuICovCisJaW50ICAgICAgICAgIHJldHJpZXM7CisJdW5zaWduZWQgaW50IHJldHJ5X3RpbWVfbXM7Cit9OworLyoKKyAqIFNlbmQgYSBtZXNzYWdlIHRvIHRoZSBpbnRlcmZhY2VzIHdpdGggdGltaW5nIHBhcmFtZXRlcnMuICBlcnJvciB2YWx1ZXMKKyAqIGFyZToKKyAqICAgLSBFRkFVTFQgLSBhbiBhZGRyZXNzIHN1cHBsaWVkIHdhcyBpbnZhbGlkLgorICogICAtIEVJTlZBTCAtIFRoZSBhZGRyZXNzIHN1cHBsaWVkIHdhcyBub3QgdmFsaWQsIG9yIHRoZSBjb21tYW5kCisgKiAgICAgICAgICAgICAgd2FzIG5vdCBhbGxvd2VkLgorICogICAtIEVNU0dTSVpFIC0gVGhlIG1lc3NhZ2UgdG8gd2FzIHRvbyBsYXJnZS4KKyAqICAgLSBFTk9NRU0gLSBCdWZmZXJzIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQgZm9yIHRoZSBjb21tYW5kLgorICovCisjZGVmaW5lIElQTUlDVExfU0VORF9DT01NQU5EX1NFVFRJTUUJX0lPUihJUE1JX0lPQ19NQUdJQywgMjEsCVwKKwkJCQkJICAgICBzdHJ1Y3QgaXBtaV9yZXFfc2V0dGltZSkKKworLyogTWVzc2FnZXMgcmVjZWl2ZWQgZnJvbSB0aGUgaW50ZXJmYWNlIGFyZSB0aGlzIGZvcm1hdC4gKi8KK3N0cnVjdCBpcG1pX3JlY3YgeworCWludCAgICAgcmVjdl90eXBlOyAvKiBJcyB0aGlzIGEgY29tbWFuZCwgcmVzcG9uc2Ugb3IgYW4KKwkJCSAgICAgIGFzeW5jcm9ub3VzIGV2ZW50LiAqLworCisJdW5zaWduZWQgY2hhciAqYWRkcjsgICAgLyogQWRkcmVzcyB0aGUgbWVzc2FnZSB3YXMgZnJvbSBpcyBwdXQKKwkJCQkgICBoZXJlLiAgVGhlIGNhbGxlciBtdXN0IHN1cHBseSB0aGUKKwkJCQkgICBtZW1vcnkuICovCisJdW5zaWduZWQgaW50ICBhZGRyX2xlbjsgLyogVGhlIHNpemUgb2YgdGhlIGFkZHJlc3MgYnVmZmVyLgorCQkJCSAgIFRoZSBjYWxsZXIgc3VwcGxpZXMgdGhlIGZ1bGwgYnVmZmVyCisJCQkJICAgbGVuZ3RoLCB0aGlzIHZhbHVlIGlzIHVwZGF0ZWQgdG8KKwkJCQkgICB0aGUgYWN0dWFsIG1lc3NhZ2UgbGVuZ3RoIHdoZW4gdGhlCisJCQkJICAgbWVzc2FnZSBpcyByZWNlaXZlZC4gKi8KKworCWxvbmcgICAgbXNnaWQ7IC8qIFRoZSBzZXF1ZW5jZSBudW1iZXIgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0CisJCQkgIGlmIHRoaXMgaXMgYSByZXNwb25zZS4gIElmIHRoaXMgaXMgYSBjb21tYW5kLAorCQkJICB0aGlzIHdpbGwgYmUgdGhlIHNlcXVlbmNlIG51bWJlciBmcm9tIHRoZQorCQkJICBjb21tYW5kLiAqLworCisJc3RydWN0IGlwbWlfbXNnIG1zZzsgLyogVGhlIGRhdGEgZmllbGQgbXVzdCBwb2ludCB0byBhIGJ1ZmZlci4KKwkJCQlUaGUgZGF0YV9zaXplIGZpZWxkIG11c3QgYmUgc2V0IHRvIHRoZQorCQkJCXNpemUgb2YgdGhlIG1lc3NhZ2UgYnVmZmVyLiAgVGhlCisJCQkJY2FsbGVyIHN1cHBsaWVzIHRoZSBmdWxsIGJ1ZmZlcgorCQkJCWxlbmd0aCwgdGhpcyB2YWx1ZSBpcyB1cGRhdGVkIHRvIHRoZQorCQkJCWFjdHVhbCBtZXNzYWdlIGxlbmd0aCB3aGVuIHRoZSBtZXNzYWdlCisJCQkJaXMgcmVjZWl2ZWQuICovCit9OworCisvKgorICogUmVjZWl2ZSBhIG1lc3NhZ2UuICBlcnJvciB2YWx1ZXM6CisgKiAgLSBFQUdBSU4gLSBubyBtZXNzYWdlcyBpbiB0aGUgcXVldWUuCisgKiAgLSBFRkFVTFQgLSBhbiBhZGRyZXNzIHN1cHBsaWVkIHdhcyBpbnZhbGlkLgorICogIC0gRUlOVkFMIC0gVGhlIGFkZHJlc3Mgc3VwcGxpZWQgd2FzIG5vdCB2YWxpZC4KKyAqICAtIEVNU0dTSVpFIC0gVGhlIG1lc3NhZ2UgdG8gd2FzIHRvbyBsYXJnZSB0byBmaXQgaW50byB0aGUgbWVzc2FnZSBidWZmZXIsCisgKiAgICAgICAgICAgICAgIHRoZSBtZXNzYWdlIHdpbGwgYmUgbGVmdCBpbiB0aGUgYnVmZmVyLiAqLworI2RlZmluZSBJUE1JQ1RMX1JFQ0VJVkVfTVNHCQlfSU9XUihJUE1JX0lPQ19NQUdJQywgMTIsCVwKKwkJCQkJICAgICAgc3RydWN0IGlwbWlfcmVjdikKKworLyoKKyAqIExpa2UgUkVDRUlWRV9NU0csIGJ1dCBpZiB0aGUgbWVzc2FnZSB3b24ndCBmaXQgaW4gdGhlIGJ1ZmZlciwgaXQKKyAqIHdpbGwgdHJ1bmNhdGUgdGhlIGNvbnRlbnRzIGluc3RlYWQgb2YgbGVhdmluZyB0aGUgZGF0YSBpbiB0aGUKKyAqIGJ1ZmZlci4KKyAqLworI2RlZmluZSBJUE1JQ1RMX1JFQ0VJVkVfTVNHX1RSVU5DCV9JT1dSKElQTUlfSU9DX01BR0lDLCAxMSwJXAorCQkJCQkgICAgICBzdHJ1Y3QgaXBtaV9yZWN2KQorCisvKiBSZWdpc3RlciB0byBnZXQgY29tbWFuZHMgZnJvbSBvdGhlciBlbnRpdGllcyBvbiB0aGlzIGludGVyZmFjZS4gKi8KK3N0cnVjdCBpcG1pX2NtZHNwZWMgeworCXVuc2lnbmVkIGNoYXIgbmV0Zm47CisJdW5zaWduZWQgY2hhciBjbWQ7Cit9OworCisvKgorICogUmVnaXN0ZXIgdG8gcmVjZWl2ZSBhIHNwZWNpZmljIGNvbW1hbmQuICBlcnJvciB2YWx1ZXM6CisgKiAgIC0gRUZBVUxUIC0gYW4gYWRkcmVzcyBzdXBwbGllZCB3YXMgaW52YWxpZC4KKyAqICAgLSBFQlVTWSAtIFRoZSBuZXRmbi9jbWQgc3VwcGxpZWQgd2FzIGFscmVhZHkgaW4gdXNlLgorICogICAtIEVOT01FTSAtIGNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBlbnRyeS4KKyAqLworI2RlZmluZSBJUE1JQ1RMX1JFR0lTVEVSX0ZPUl9DTUQJX0lPUihJUE1JX0lPQ19NQUdJQywgMTQsCVwKKwkJCQkJICAgICBzdHJ1Y3QgaXBtaV9jbWRzcGVjKQorLyoKKyAqIFVucmVnaXN0ZXIgYSByZWdzaXRlcmVkIGNvbW1hbmQuICBlcnJvciB2YWx1ZXM6CisgKiAgLSBFRkFVTFQgLSBhbiBhZGRyZXNzIHN1cHBsaWVkIHdhcyBpbnZhbGlkLgorICogIC0gRU5PRU5UIC0gVGhlIG5ldGZuL2NtZCB3YXMgbm90IGZvdW5kIHJlZ2lzdGVyZWQgZm9yIHRoaXMgdXNlci4KKyAqLworI2RlZmluZSBJUE1JQ1RMX1VOUkVHSVNURVJfRk9SX0NNRAlfSU9SKElQTUlfSU9DX01BR0lDLCAxNSwJXAorCQkJCQkgICAgIHN0cnVjdCBpcG1pX2NtZHNwZWMpCisKKy8qCisgKiBSZWdpc3RlciB0byBnZXQgY29tbWFuZHMgZnJvbSBvdGhlciBlbnRpdGllcyBvbiBzcGVjaWZpYyBjaGFubmVscy4KKyAqIFRoaXMgd2F5LCB5b3UgY2FuIG9ubHkgbGlzdGVuIG9uIHNwZWNpZmljIGNoYW5uZWxzLCBvciBoYXZlIG1lc3NhZ2VzCisgKiBmcm9tIHNvbWUgY2hhbm5lbHMgZ28gdG8gb25lIHBsYWNlIGFuZCBvdGhlciBjaGFubmVscyB0byBzb21lcGxhY2UKKyAqIGVsc2UuICBUaGUgY2hhbnMgZmllbGQgaXMgYSBiaXRtYXNrLCAoMSA8PCBjaGFubmVsKSBmb3IgZWFjaCBjaGFubmVsLgorICogSXQgbWF5IGJlIElQTUlfQ0hBTl9BTEwgZm9yIGFsbCBjaGFubmVscy4KKyAqLworc3RydWN0IGlwbWlfY21kc3BlY19jaGFucyB7CisJdW5zaWduZWQgaW50IG5ldGZuOworCXVuc2lnbmVkIGludCBjbWQ7CisJdW5zaWduZWQgaW50IGNoYW5zOworfTsKKworLyoKKyAqIFJlZ2lzdGVyIHRvIHJlY2VpdmUgYSBzcGVjaWZpYyBjb21tYW5kIG9uIHNwZWNpZmljIGNoYW5uZWxzLiAgZXJyb3IgdmFsdWVzOgorICogICAtIEVGQVVMVCAtIGFuIGFkZHJlc3Mgc3VwcGxpZWQgd2FzIGludmFsaWQuCisgKiAgIC0gRUJVU1kgLSBPbmUgb2YgdGhlIG5ldGZuL2NtZC9jaGFucyBzdXBwbGllZCB3YXMgYWxyZWFkeSBpbiB1c2UuCisgKiAgIC0gRU5PTUVNIC0gY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGVudHJ5LgorICovCisjZGVmaW5lIElQTUlDVExfUkVHSVNURVJfRk9SX0NNRF9DSEFOUwlfSU9SKElQTUlfSU9DX01BR0lDLCAyOCwJXAorCQkJCQkgICAgIHN0cnVjdCBpcG1pX2NtZHNwZWNfY2hhbnMpCisvKgorICogVW5yZWdpc3RlciBzb21lIG5ldGZuL2NtZC9jaGFucy4gIGVycm9yIHZhbHVlczoKKyAqICAtIEVGQVVMVCAtIGFuIGFkZHJlc3Mgc3VwcGxpZWQgd2FzIGludmFsaWQuCisgKiAgLSBFTk9FTlQgLSBOb25lIG9mIHRoZSBuZXRmbi9jbWQvY2hhbnMgd2VyZSBmb3VuZCByZWdpc3RlcmVkIGZvciB0aGlzIHVzZXIuCisgKi8KKyNkZWZpbmUgSVBNSUNUTF9VTlJFR0lTVEVSX0ZPUl9DTURfQ0hBTlMgX0lPUihJUE1JX0lPQ19NQUdJQywgMjksCVwKKwkJCQkJICAgICBzdHJ1Y3QgaXBtaV9jbWRzcGVjX2NoYW5zKQorCisvKgorICogU2V0IHdoZXRoZXIgdGhpcyBpbnRlcmZhY2UgcmVjZWl2ZXMgZXZlbnRzLiAgTm90ZSB0aGF0IHRoZSBmaXJzdAorICogdXNlciByZWdpc3RlcmVkIGZvciBldmVudHMgd2lsbCBnZXQgYWxsIHBlbmRpbmcgZXZlbnRzIGZvciB0aGUKKyAqIGludGVyZmFjZS4gIGVycm9yIHZhbHVlczoKKyAqICAtIEVGQVVMVCAtIGFuIGFkZHJlc3Mgc3VwcGxpZWQgd2FzIGludmFsaWQuCisgKi8KKyNkZWZpbmUgSVBNSUNUTF9TRVRfR0VUU19FVkVOVFNfQ01ECV9JT1IoSVBNSV9JT0NfTUFHSUMsIDE2LCBpbnQpCisKKy8qCisgKiBTZXQgYW5kIGdldCB0aGUgc2xhdmUgYWRkcmVzcyBhbmQgTFVOIHRoYXQgd2Ugd2lsbCB1c2UgZm9yIG91cgorICogc291cmNlIG1lc3NhZ2VzLiAgTm90ZSB0aGF0IHRoaXMgYWZmZWN0cyB0aGUgaW50ZXJmYWNlLCBub3QganVzdAorICogdGhpcyB1c2VyLCBzbyBpdCB3aWxsIGFmZmVjdCBhbGwgdXNlcnMgb2YgdGhpcyBpbnRlcmZhY2UuICBUaGlzIGlzCisgKiBzbyBzb21lIGluaXRpYWxpemF0aW9uIGNvZGUgY2FuIGNvbWUgaW4gYW5kIGRvIHRoZSBPRU0tc3BlY2lmaWMKKyAqIHRoaW5ncyBpdCB0YWtlcyB0byBkZXRlcm1pbmUgeW91ciBhZGRyZXNzIChpZiBub3QgdGhlIEJNQykgYW5kIHNldAorICogaXQgZm9yIGV2ZXJ5b25lIGVsc2UuICBZb3Ugc2hvdWxkIHByb2JhYmx5IGxlYXZlIHRoZSBMVU4gYWxvbmUuCisgKi8KK3N0cnVjdCBpcG1pX2NoYW5uZWxfbHVuX2FkZHJlc3Nfc2V0IHsKKwl1bnNpZ25lZCBzaG9ydCBjaGFubmVsOworCXVuc2lnbmVkIGNoYXIgIHZhbHVlOworfTsKKyNkZWZpbmUgSVBNSUNUTF9TRVRfTVlfQ0hBTk5FTF9BRERSRVNTX0NNRCBcCisJX0lPUihJUE1JX0lPQ19NQUdJQywgMjQsIHN0cnVjdCBpcG1pX2NoYW5uZWxfbHVuX2FkZHJlc3Nfc2V0KQorI2RlZmluZSBJUE1JQ1RMX0dFVF9NWV9DSEFOTkVMX0FERFJFU1NfQ01EIFwKKwlfSU9SKElQTUlfSU9DX01BR0lDLCAyNSwgc3RydWN0IGlwbWlfY2hhbm5lbF9sdW5fYWRkcmVzc19zZXQpCisjZGVmaW5lIElQTUlDVExfU0VUX01ZX0NIQU5ORUxfTFVOX0NNRCBcCisJX0lPUihJUE1JX0lPQ19NQUdJQywgMjYsIHN0cnVjdCBpcG1pX2NoYW5uZWxfbHVuX2FkZHJlc3Nfc2V0KQorI2RlZmluZSBJUE1JQ1RMX0dFVF9NWV9DSEFOTkVMX0xVTl9DTUQgXAorCV9JT1IoSVBNSV9JT0NfTUFHSUMsIDI3LCBzdHJ1Y3QgaXBtaV9jaGFubmVsX2x1bl9hZGRyZXNzX3NldCkKKy8qIExlZ2FjeSBpbnRlcmZhY2VzLCB0aGVzZSBvbmx5IHNldCBJUE1CIDAuICovCisjZGVmaW5lIElQTUlDVExfU0VUX01ZX0FERFJFU1NfQ01ECV9JT1IoSVBNSV9JT0NfTUFHSUMsIDE3LCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIElQTUlDVExfR0VUX01ZX0FERFJFU1NfQ01ECV9JT1IoSVBNSV9JT0NfTUFHSUMsIDE4LCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIElQTUlDVExfU0VUX01ZX0xVTl9DTUQJCV9JT1IoSVBNSV9JT0NfTUFHSUMsIDE5LCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIElQTUlDVExfR0VUX01ZX0xVTl9DTUQJCV9JT1IoSVBNSV9JT0NfTUFHSUMsIDIwLCB1bnNpZ25lZCBpbnQpCisKKy8qCisgKiBHZXQvc2V0IHRoZSBkZWZhdWx0IHRpbWluZyB2YWx1ZXMgZm9yIGFuIGludGVyZmFjZS4gIFlvdSBzaG91bGRuJ3QKKyAqIGdlbmVyYWxseSBtZXNzIHdpdGggdGhlc2UuCisgKi8KK3N0cnVjdCBpcG1pX3RpbWluZ19wYXJtcyB7CisJaW50ICAgICAgICAgIHJldHJpZXM7CisJdW5zaWduZWQgaW50IHJldHJ5X3RpbWVfbXM7Cit9OworI2RlZmluZSBJUE1JQ1RMX1NFVF9USU1JTkdfUEFSTVNfQ01ECV9JT1IoSVBNSV9JT0NfTUFHSUMsIDIyLCBcCisJCQkJCSAgICAgc3RydWN0IGlwbWlfdGltaW5nX3Bhcm1zKQorI2RlZmluZSBJUE1JQ1RMX0dFVF9USU1JTkdfUEFSTVNfQ01ECV9JT1IoSVBNSV9JT0NfTUFHSUMsIDIzLCBcCisJCQkJCSAgICAgc3RydWN0IGlwbWlfdGltaW5nX3Bhcm1zKQorCisvKgorICogU2V0IHRoZSBtYWludGVuYW5jZSBtb2RlLiAgU2VlIGlwbWlfc2V0X21haW50ZW5hbmNlX21vZGUoKSBhYm92ZQorICogZm9yIGEgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGlzIGRvZXMuCisgKi8KKyNkZWZpbmUgSVBNSUNUTF9HRVRfTUFJTlRFTkFOQ0VfTU9ERV9DTUQJX0lPUihJUE1JX0lPQ19NQUdJQywgMzAsIGludCkKKyNkZWZpbmUgSVBNSUNUTF9TRVRfTUFJTlRFTkFOQ0VfTU9ERV9DTUQJX0lPVyhJUE1JX0lPQ19NQUdJQywgMzEsIGludCkKKworI2VuZGlmIC8qIF9fTElOVVhfSVBNSV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXBtaV9tc2dkZWZzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXBtaV9tc2dkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY5N2U2ZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pcG1pX21zZ2RlZnMuaApAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIGlwbWlfc21pLmgKKyAqCisgKiBNb250YVZpc3RhIElQTUkgc3lzdGVtIG1hbmFnZW1lbnQgaW50ZXJmYWNlCisgKgorICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiAgICAgICAgIENvcmV5IE1pbnlhcmQgPG1pbnlhcmRAbXZpc3RhLmNvbT4KKyAqICAgICAgICAgc291cmNlQG12aXN0YS5jb20KKyAqCisgKiBDb3B5cmlnaHQgMjAwMiBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiAgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqICBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgKiAgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfSVBNSV9NU0dERUZTX0gKKyNkZWZpbmUgX19MSU5VWF9JUE1JX01TR0RFRlNfSAorCisvKiBWYXJpb3VzIGRlZmluaXRpb25zIGZvciBJUE1JIG1lc3NhZ2VzIHVzZWQgYnkgYWxtb3N0IGV2ZXJ5dGhpbmcgaW4KKyAgIHRoZSBJUE1JIHN0YWNrLiAqLworCisvKiBOZXRGTnMgYW5kIGNvbW1hbmRzIHVzZWQgaW5zaWRlIHRoZSBJUE1JIHN0YWNrLiAqLworCisjZGVmaW5lIElQTUlfTkVURk5fU0VOU09SX0VWRU5UX1JFUVVFU1QJCTB4MDQKKyNkZWZpbmUgSVBNSV9ORVRGTl9TRU5TT1JfRVZFTlRfUkVTUE9OU0UJMHgwNQorI2RlZmluZSBJUE1JX0dFVF9FVkVOVF9SRUNFSVZFUl9DTUQJMHgwMQorCisjZGVmaW5lIElQTUlfTkVURk5fQVBQX1JFUVVFU1QJCQkweDA2CisjZGVmaW5lIElQTUlfTkVURk5fQVBQX1JFU1BPTlNFCQkJMHgwNworI2RlZmluZSBJUE1JX0dFVF9ERVZJQ0VfSURfQ01ECQkweDAxCisjZGVmaW5lIElQTUlfQ09MRF9SRVNFVF9DTUQJCTB4MDIKKyNkZWZpbmUgSVBNSV9XQVJNX1JFU0VUX0NNRAkJMHgwMworI2RlZmluZSBJUE1JX0NMRUFSX01TR19GTEFHU19DTUQJMHgzMAorI2RlZmluZSBJUE1JX0dFVF9ERVZJQ0VfR1VJRF9DTUQJMHgwOAorI2RlZmluZSBJUE1JX0dFVF9NU0dfRkxBR1NfQ01ECQkweDMxCisjZGVmaW5lIElQTUlfU0VORF9NU0dfQ01ECQkweDM0CisjZGVmaW5lIElQTUlfR0VUX01TR19DTUQJCTB4MzMKKyNkZWZpbmUgSVBNSV9TRVRfQk1DX0dMT0JBTF9FTkFCTEVTX0NNRAkweDJlCisjZGVmaW5lIElQTUlfR0VUX0JNQ19HTE9CQUxfRU5BQkxFU19DTUQJMHgyZgorI2RlZmluZSBJUE1JX1JFQURfRVZFTlRfTVNHX0JVRkZFUl9DTUQJMHgzNQorI2RlZmluZSBJUE1JX0dFVF9DSEFOTkVMX0lORk9fQ01ECTB4NDIKKworLyogQml0IGZvciBCTUMgZ2xvYmFsIGVuYWJsZXMuICovCisjZGVmaW5lIElQTUlfQk1DX1JDVl9NU0dfSU5UUiAgICAgMHgwMQorI2RlZmluZSBJUE1JX0JNQ19FVlRfTVNHX0lOVFIgICAgIDB4MDIKKyNkZWZpbmUgSVBNSV9CTUNfRVZUX01TR19CVUZGICAgICAweDA0CisjZGVmaW5lIElQTUlfQk1DX1NZU19MT0cgICAgICAgICAgMHgwOAorCisjZGVmaW5lIElQTUlfTkVURk5fU1RPUkFHRV9SRVFVRVNUCQkweDBhCisjZGVmaW5lIElQTUlfTkVURk5fU1RPUkFHRV9SRVNQT05TRQkJMHgwYgorI2RlZmluZSBJUE1JX0FERF9TRUxfRU5UUllfQ01ECQkweDQ0CisKKyNkZWZpbmUgSVBNSV9ORVRGTl9GSVJNV0FSRV9SRVFVRVNUCQkweDA4CisjZGVmaW5lIElQTUlfTkVURk5fRklSTVdBUkVfUkVTUE9OU0UJCTB4MDkKKworLyogVGhlIGRlZmF1bHQgc2xhdmUgYWRkcmVzcyAqLworI2RlZmluZSBJUE1JX0JNQ19TTEFWRV9BRERSCTB4MjAKKworLyogVGhlIEJUIGludGVyZmFjZSBvbiBoaWdoLWVuZCBIUCBzeXN0ZW1zIHN1cHBvcnRzIHVwIHRvIDI1NSBieXRlcyBpbgorICogb25lIHRyYW5zZmVyLiAgSXRzICJ2aXJ0dWFsIiBCTUMgc3VwcG9ydHMgc29tZSBjb21tYW5kcyB0aGF0IGFyZSBsb25nZXIKKyAqIHRoYW4gMTI4IGJ5dGVzLiAgVXNlIHRoZSBmdWxsIDI1NiwgcGx1cyBOZXRGbi9MVU4sIENtZCwgY0NvZGUsIHBsdXMKKyAqIHNvbWUgb3ZlcmhlYWQ7IGl0J3Mgbm90IHdvcnRoIHRoZSBlZmZvcnQgdG8gZHluYW1pY2FsbHkgc2l6ZSB0aGlzIGJhc2VkCisgKiBvbiB0aGUgcmVzdWx0cyBvZiB0aGUgIkdldCBCVCBDYXBhYmlsaXRpZXMiIGNvbW1hbmQuICovCisjZGVmaW5lIElQTUlfTUFYX01TR19MRU5HVEgJMjcyCS8qIG11bHRpcGxlIG9mIDE2ICovCisKKyNkZWZpbmUgSVBNSV9DQ19OT19FUlJPUgkJMHgwMAorI2RlZmluZSBJUE1JX05PREVfQlVTWV9FUlIJCTB4YzAKKyNkZWZpbmUgSVBNSV9JTlZBTElEX0NPTU1BTkRfRVJSCTB4YzEKKyNkZWZpbmUgSVBNSV9USU1FT1VUX0VSUgkJMHhjMworI2RlZmluZSBJUE1JX0VSUl9NU0dfVFJVTkNBVEVECQkweGM2CisjZGVmaW5lIElQTUlfUkVRX0xFTl9JTlZBTElEX0VSUgkweGM3CisjZGVmaW5lIElQTUlfUkVRX0xFTl9FWENFRURFRF9FUlIJMHhjOAorI2RlZmluZSBJUE1JX05PVF9JTl9NWV9TVEFURV9FUlIJMHhkNQkvKiBJUE1JIDIuMCAqLworI2RlZmluZSBJUE1JX0xPU1RfQVJCSVRSQVRJT05fRVJSCTB4ODEKKyNkZWZpbmUgSVBNSV9CVVNfRVJSCQkJMHg4MgorI2RlZmluZSBJUE1JX05BS19PTl9XUklURV9FUlIJCTB4ODMKKyNkZWZpbmUgSVBNSV9FUlJfVU5TUEVDSUZJRUQJCTB4ZmYKKworI2RlZmluZSBJUE1JX0NIQU5ORUxfUFJPVE9DT0xfSVBNQgkxCisjZGVmaW5lIElQTUlfQ0hBTk5FTF9QUk9UT0NPTF9JQ01CCTIKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX1BST1RPQ09MX1NNQlVTCTQKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX1BST1RPQ09MX0tDUwk1CisjZGVmaW5lIElQTUlfQ0hBTk5FTF9QUk9UT0NPTF9TTUlDCTYKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX1BST1RPQ09MX0JUMTAJNworI2RlZmluZSBJUE1JX0NIQU5ORUxfUFJPVE9DT0xfQlQxNQk4CisjZGVmaW5lIElQTUlfQ0hBTk5FTF9QUk9UT0NPTF9UTU9ERQk5CisKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX01FRElVTV9JUE1CCTEKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX01FRElVTV9JQ01CMTAJMgorI2RlZmluZSBJUE1JX0NIQU5ORUxfTUVESVVNX0lDTUIwOQkzCisjZGVmaW5lIElQTUlfQ0hBTk5FTF9NRURJVU1fODAyM0xBTgk0CisjZGVmaW5lIElQTUlfQ0hBTk5FTF9NRURJVU1fQVNZTkMJNQorI2RlZmluZSBJUE1JX0NIQU5ORUxfTUVESVVNX09USEVSX0xBTgk2CisjZGVmaW5lIElQTUlfQ0hBTk5FTF9NRURJVU1fUENJX1NNQlVTCTcKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX01FRElVTV9TTUJVUzEJOAorI2RlZmluZSBJUE1JX0NIQU5ORUxfTUVESVVNX1NNQlVTMgk5CisjZGVmaW5lIElQTUlfQ0hBTk5FTF9NRURJVU1fVVNCMQkxMAorI2RlZmluZSBJUE1JX0NIQU5ORUxfTUVESVVNX1VTQjIJMTEKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX01FRElVTV9TWVNJTlRGCTEyCisjZGVmaW5lIElQTUlfQ0hBTk5FTF9NRURJVU1fT0VNX01JTgkweDYwCisjZGVmaW5lIElQTUlfQ0hBTk5FTF9NRURJVU1fT0VNX01BWAkweDdmCisKKyNlbmRpZiAvKiBfX0xJTlVYX0lQTUlfTVNHREVGU19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXBzZWMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pcHNlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxN2E2MzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXBzZWMuaApAQCAtMCwwICsxLDQ3IEBACisjaWZuZGVmIF9MSU5VWF9JUFNFQ19ICisjZGVmaW5lIF9MSU5VWF9JUFNFQ19ICisKKy8qIFRoZSBkZWZpbml0aW9ucywgcmVxdWlyZWQgdG8gdGFsayB0byBLQU1FIHJhY29vbiBJS0UuICovCisKKyNpbmNsdWRlIDxsaW51eC9wZmtleXYyLmg+CisKKyNkZWZpbmUgSVBTRUNfUE9SVF9BTlkJCTAKKyNkZWZpbmUgSVBTRUNfVUxQUk9UT19BTlkJMjU1CisjZGVmaW5lIElQU0VDX1BST1RPX0FOWQkJMjU1CisKK2VudW0geworCUlQU0VDX01PREVfQU5ZCQk9IDAsCS8qIFdlIGRvIG5vdCBzdXBwb3J0IHRoaXMgZm9yIFNBICovCisJSVBTRUNfTU9ERV9UUkFOU1BPUlQJPSAxLAorCUlQU0VDX01PREVfVFVOTkVMCT0gMiwKKwlJUFNFQ19NT0RFX0JFRVQgICAgICAgICA9IDMKK307CisKK2VudW0geworCUlQU0VDX0RJUl9BTlkJCT0gMCwKKwlJUFNFQ19ESVJfSU5CT1VORAk9IDEsCisJSVBTRUNfRElSX09VVEJPVU5ECT0gMiwKKwlJUFNFQ19ESVJfRldECQk9IDMsCS8qIEl0IGlzIG91ciBvd24gKi8KKwlJUFNFQ19ESVJfTUFYCQk9IDQsCisJSVBTRUNfRElSX0lOVkFMSUQJPSA1Cit9OworCitlbnVtIHsKKwlJUFNFQ19QT0xJQ1lfRElTQ0FSRAk9IDAsCisJSVBTRUNfUE9MSUNZX05PTkUJPSAxLAorCUlQU0VDX1BPTElDWV9JUFNFQwk9IDIsCisJSVBTRUNfUE9MSUNZX0VOVFJVU1QJPSAzLAorCUlQU0VDX1BPTElDWV9CWVBBU1MJPSA0Cit9OworCitlbnVtIHsKKwlJUFNFQ19MRVZFTF9ERUZBVUxUCT0gMCwKKwlJUFNFQ19MRVZFTF9VU0UJCT0gMSwKKwlJUFNFQ19MRVZFTF9SRVFVSVJFCT0gMiwKKwlJUFNFQ19MRVZFTF9VTklRVUUJPSAzCit9OworCisjZGVmaW5lIElQU0VDX01BTlVBTF9SRVFJRF9NQVgJMHgzZmZmCisKKyNkZWZpbmUgSVBTRUNfUkVQTEFZV1NJWkUgIDMyCisKKyNlbmRpZgkvKiBfTElOVVhfSVBTRUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lwdjYuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pcHY2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ4NDJjZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pcHY2LmgKQEAgLTAsMCArMSwxNjQgQEAKKyNpZm5kZWYgX0lQVjZfSAorI2RlZmluZSBfSVBWNl9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworLyogVGhlIGxhdGVzdCBkcmFmdHMgZGVjbGFyZWQgaW5jcmVhc2UgaW4gbWluaW1hbCBtdHUgdXAgdG8gMTI4MC4gKi8KKworI2RlZmluZSBJUFY2X01JTl9NVFUJMTI4MAorCisvKgorICoJQWR2YW5jZWQgQVBJCisgKglzb3VyY2UgaW50ZXJmYWNlL2FkZHJlc3Mgc2VsZWN0aW9uLCBzb3VyY2Ugcm91dGluZywgZXRjLi4uCisgKgkqdW5kZXIgY29uc3RydWN0aW9uKgorICovCisKKworc3RydWN0IGluNl9wa3RpbmZvIHsKKwlzdHJ1Y3QgaW42X2FkZHIJaXBpNl9hZGRyOworCWludAkJaXBpNl9pZmluZGV4OworfTsKKworc3RydWN0IGlwNl9tdHVpbmZvIHsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42CWlwNm1fYWRkcjsKKwlfX3UzMgkJCWlwNm1fbXR1OworfTsKKworc3RydWN0IGluNl9pZnJlcSB7CisJc3RydWN0IGluNl9hZGRyCWlmcjZfYWRkcjsKKwlfX3UzMgkJaWZyNl9wcmVmaXhsZW47CisJaW50CQlpZnI2X2lmaW5kZXg7IAorfTsKKworI2RlZmluZSBJUFY2X1NSQ1JUX1NUUklDVAkweDAxCS8qIERlcHJlY2F0ZWQ7IHdpbGwgYmUgcmVtb3ZlZCAqLworI2RlZmluZSBJUFY2X1NSQ1JUX1RZUEVfMAkwCS8qIERlcHJlY2F0ZWQ7IHdpbGwgYmUgcmVtb3ZlZCAqLworI2RlZmluZSBJUFY2X1NSQ1JUX1RZUEVfMgkyCS8qIElQdjYgdHlwZSAyIFJvdXRpbmcgSGVhZGVyCSovCisKKy8qCisgKglyb3V0aW5nIGhlYWRlcgorICovCitzdHJ1Y3QgaXB2Nl9ydF9oZHIgeworCV9fdTgJCW5leHRoZHI7CisJX191OAkJaGRybGVuOworCV9fdTgJCXR5cGU7CisJX191OAkJc2VnbWVudHNfbGVmdDsKKworCS8qCisJICoJdHlwZSBzcGVjaWZpYyBkYXRhCisJICoJdmFyaWFibGUgbGVuZ3RoIGZpZWxkCisJICovCit9OworCisKK3N0cnVjdCBpcHY2X29wdF9oZHIgeworCV9fdTggCQluZXh0aGRyOworCV9fdTggCQloZHJsZW47CisJLyogCisJICogVExWIGVuY29kZWQgb3B0aW9uIGRhdGEgZm9sbG93cy4KKwkgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CS8qIHJlcXVpcmVkIGZvciBzb21lIGFyY2hzICovCisKKyNkZWZpbmUgaXB2Nl9kZXN0b3B0X2hkciBpcHY2X29wdF9oZHIKKyNkZWZpbmUgaXB2Nl9ob3BvcHRfaGRyICBpcHY2X29wdF9oZHIKKworCisvKgorICoJcm91dGluZyBoZWFkZXIgdHlwZSAwICh1c2VkIGluIGNtc2doZHIgc3RydWN0KQorICovCisKK3N0cnVjdCBydDBfaGRyIHsKKwlzdHJ1Y3QgaXB2Nl9ydF9oZHIJcnRfaGRyOworCV9fdTMyCQkJcmVzZXJ2ZWQ7CisJc3RydWN0IGluNl9hZGRyCQlhZGRyWzBdOworCisjZGVmaW5lIHJ0MF90eXBlCQlydF9oZHIudHlwZQorfTsKKworLyoKKyAqCXJvdXRpbmcgaGVhZGVyIHR5cGUgMgorICovCisKK3N0cnVjdCBydDJfaGRyIHsKKwlzdHJ1Y3QgaXB2Nl9ydF9oZHIJcnRfaGRyOworCV9fdTMyCQkJcmVzZXJ2ZWQ7CisJc3RydWN0IGluNl9hZGRyCQlhZGRyOworCisjZGVmaW5lIHJ0Ml90eXBlCQlydF9oZHIudHlwZQorfTsKKworLyoKKyAqCWhvbWUgYWRkcmVzcyBvcHRpb24gaW4gZGVzdGluYXRpb24gb3B0aW9ucyBoZWFkZXIKKyAqLworCitzdHJ1Y3QgaXB2Nl9kZXN0b3B0X2hhbyB7CisJX191OAkJCXR5cGU7CisJX191OAkJCWxlbmd0aDsKKwlzdHJ1Y3QgaW42X2FkZHIJCWFkZHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKgorICoJSVB2NiBmaXhlZCBoZWFkZXIKKyAqCisgKglCRVdBUkUsIGl0IGlzIGluY29ycmVjdC4gVGhlIGZpcnN0IDQgYml0cyBvZiBmbG93X2xibAorICoJYXJlIGdsdWVkIHRvIHByaW9yaXR5IG5vdywgZm9ybWluZyAiY2xhc3MiLgorICovCisKK3N0cnVjdCBpcHY2aGRyIHsKKyNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4CQkJcHJpb3JpdHk6NCwKKwkJCQl2ZXJzaW9uOjQ7CisjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4CQkJdmVyc2lvbjo0LAorCQkJCXByaW9yaXR5OjQ7CisjZWxzZQorI2Vycm9yCSJQbGVhc2UgZml4IDxhc20vYnl0ZW9yZGVyLmg+IgorI2VuZGlmCisJX191OAkJCWZsb3dfbGJsWzNdOworCisJX19iZTE2CQkJcGF5bG9hZF9sZW47CisJX191OAkJCW5leHRoZHI7CisJX191OAkJCWhvcF9saW1pdDsKKworCXN0cnVjdAlpbjZfYWRkcglzYWRkcjsKKwlzdHJ1Y3QJaW42X2FkZHIJZGFkZHI7Cit9OworCisKKy8qIGluZGV4IHZhbHVlcyBmb3IgdGhlIHZhcmlhYmxlcyBpbiBpcHY2X2RldmNvbmYgKi8KK2VudW0geworCURFVkNPTkZfRk9SV0FSRElORyA9IDAsCisJREVWQ09ORl9IT1BMSU1JVCwKKwlERVZDT05GX01UVTYsCisJREVWQ09ORl9BQ0NFUFRfUkEsCisJREVWQ09ORl9BQ0NFUFRfUkVESVJFQ1RTLAorCURFVkNPTkZfQVVUT0NPTkYsCisJREVWQ09ORl9EQURfVFJBTlNNSVRTLAorCURFVkNPTkZfUlRSX1NPTElDSVRTLAorCURFVkNPTkZfUlRSX1NPTElDSVRfSU5URVJWQUwsCisJREVWQ09ORl9SVFJfU09MSUNJVF9ERUxBWSwKKwlERVZDT05GX1VTRV9URU1QQUREUiwKKwlERVZDT05GX1RFTVBfVkFMSURfTEZULAorCURFVkNPTkZfVEVNUF9QUkVGRVJFRF9MRlQsCisJREVWQ09ORl9SRUdFTl9NQVhfUkVUUlksCisJREVWQ09ORl9NQVhfREVTWU5DX0ZBQ1RPUiwKKwlERVZDT05GX01BWF9BRERSRVNTRVMsCisJREVWQ09ORl9GT1JDRV9NTERfVkVSU0lPTiwKKwlERVZDT05GX0FDQ0VQVF9SQV9ERUZSVFIsCisJREVWQ09ORl9BQ0NFUFRfUkFfUElORk8sCisJREVWQ09ORl9BQ0NFUFRfUkFfUlRSX1BSRUYsCisJREVWQ09ORl9SVFJfUFJPQkVfSU5URVJWQUwsCisJREVWQ09ORl9BQ0NFUFRfUkFfUlRfSU5GT19NQVhfUExFTiwKKwlERVZDT05GX1BST1hZX05EUCwKKwlERVZDT05GX09QVElNSVNUSUNfREFELAorCURFVkNPTkZfQUNDRVBUX1NPVVJDRV9ST1VURSwKKwlERVZDT05GX01DX0ZPUldBUkRJTkcsCisJREVWQ09ORl9ESVNBQkxFX0lQVjYsCisJREVWQ09ORl9BQ0NFUFRfREFELAorCURFVkNPTkZfRk9SQ0VfVExMQU8sCisJREVWQ09ORl9NQVgKK307CisKKworI2VuZGlmIC8qIF9JUFY2X0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pcHY2X3JvdXRlLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXB2Nl9yb3V0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YTZkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXB2Nl9yb3V0ZS5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKglMaW51eCBJTkVUNiBpbXBsZW1lbnRhdGlvbiAKKyAqCisgKglBdXRob3JzOgorICoJUGVkcm8gUm9xdWUJCTxyb3F1ZUBkaS5mYy51bC5wdD4JCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9JUFY2X1JPVVRFX0gKKyNkZWZpbmUgX0xJTlVYX0lQVjZfUk9VVEVfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBSVEZfREVGQVVMVAkweDAwMDEwMDAwCS8qIGRlZmF1bHQgLSBsZWFybmVkIHZpYSBORAkqLworI2RlZmluZSBSVEZfQUxMT05MSU5LCTB4MDAwMjAwMDAJLyogKGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCkKKwkJCQkJICAgZmFsbGJhY2ssIG5vIHJvdXRlcnMgb24gbGluayAqLworI2RlZmluZSBSVEZfQUREUkNPTkYJMHgwMDA0MDAwMAkvKiBhZGRyY29uZiByb3V0ZSAtIFJBCQkqLworI2RlZmluZSBSVEZfUFJFRklYX1JUCTB4MDAwODAwMDAJLyogQSBwcmVmaXggb25seSByb3V0ZSAtIFJBCSovCisjZGVmaW5lIFJURl9BTllDQVNUCTB4MDAxMDAwMDAJLyogQW55Y2FzdAkJCSovCisKKyNkZWZpbmUgUlRGX05PTkVYVEhPUAkweDAwMjAwMDAwCS8qIHJvdXRlIHdpdGggbm8gbmV4dGhvcAkqLworI2RlZmluZSBSVEZfRVhQSVJFUwkweDAwNDAwMDAwCisKKyNkZWZpbmUgUlRGX1JPVVRFSU5GTwkweDAwODAwMDAwCS8qIHJvdXRlIGluZm9ybWF0aW9uIC0gUkEJKi8KKworI2RlZmluZSBSVEZfQ0FDSEUJMHgwMTAwMDAwMAkvKiBjYWNoZSBlbnRyeQkJCSovCisjZGVmaW5lIFJURl9GTE9XCTB4MDIwMDAwMDAJLyogZmxvdyBzaWduaWZpY2FudCByb3V0ZQkqLworI2RlZmluZSBSVEZfUE9MSUNZCTB4MDQwMDAwMDAJLyogcG9saWN5IHJvdXRlCQkJKi8KKworI2RlZmluZSBSVEZfUFJFRihwcmVmKQkoKHByZWYpIDw8IDI3KQorI2RlZmluZSBSVEZfUFJFRl9NQVNLCTB4MTgwMDAwMDAKKworI2RlZmluZSBSVEZfTE9DQUwJMHg4MDAwMDAwMAorCisKK3N0cnVjdCBpbjZfcnRtc2cgeworCXN0cnVjdCBpbjZfYWRkcgkJcnRtc2dfZHN0OworCXN0cnVjdCBpbjZfYWRkcgkJcnRtc2dfc3JjOworCXN0cnVjdCBpbjZfYWRkcgkJcnRtc2dfZ2F0ZXdheTsKKwlfX3UzMgkJCXJ0bXNnX3R5cGU7CisJX191MTYJCQlydG1zZ19kc3RfbGVuOworCV9fdTE2CQkJcnRtc2dfc3JjX2xlbjsKKwlfX3UzMgkJCXJ0bXNnX21ldHJpYzsKKwl1bnNpZ25lZCBsb25nCQlydG1zZ19pbmZvOworICAgICAgICBfX3UzMgkJCXJ0bXNnX2ZsYWdzOworCWludAkJCXJ0bXNnX2lmaW5kZXg7Cit9OworCisjZGVmaW5lIFJUTVNHX05FV0RFVklDRQkJMHgxMQorI2RlZmluZSBSVE1TR19ERUxERVZJQ0UJCTB4MTIKKyNkZWZpbmUgUlRNU0dfTkVXUk9VVEUJCTB4MjEKKyNkZWZpbmUgUlRNU0dfREVMUk9VVEUJCTB4MjIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXB4LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXB4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFiYjFkMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pcHguaApAQCAtMCwwICsxLDc1IEBACisjaWZuZGVmIF9JUFhfSF8KKyNkZWZpbmUgX0lQWF9IXworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgorI2RlZmluZSBJUFhfTk9ERV9MRU4JNgorI2RlZmluZSBJUFhfTVRVCQk1NzYKKworc3RydWN0IHNvY2thZGRyX2lweCB7CisJc2FfZmFtaWx5X3QJc2lweF9mYW1pbHk7CisJX19iZTE2CQlzaXB4X3BvcnQ7CisJX19iZTMyCQlzaXB4X25ldHdvcms7CisJdW5zaWduZWQgY2hhciAJc2lweF9ub2RlW0lQWF9OT0RFX0xFTl07CisJX191OAkJc2lweF90eXBlOworCXVuc2lnbmVkIGNoYXIJc2lweF96ZXJvOwkvKiAxNiBieXRlIGZpbGwgKi8KK307CisKKy8qCisgKiBTbyB3ZSBjYW4gZml0IHRoZSBleHRyYSBpbmZvIGZvciBTSU9DU0lGQUREUiBpbnRvIHRoZSBhZGRyZXNzIG5pY2VseQorICovCisjZGVmaW5lIHNpcHhfc3BlY2lhbAlzaXB4X3BvcnQKKyNkZWZpbmUgc2lweF9hY3Rpb24Jc2lweF96ZXJvCisjZGVmaW5lIElQWF9ETFRJVEYJMAorI2RlZmluZSBJUFhfQ1JUSVRGCTEKKworc3RydWN0IGlweF9yb3V0ZV9kZWZpbml0aW9uIHsKKwlfX2JlMzIgICAgICAgIGlweF9uZXR3b3JrOworCV9fYmUzMiAgICAgICAgaXB4X3JvdXRlcl9uZXR3b3JrOworCXVuc2lnbmVkIGNoYXIgaXB4X3JvdXRlcl9ub2RlW0lQWF9OT0RFX0xFTl07Cit9OworCitzdHJ1Y3QgaXB4X2ludGVyZmFjZV9kZWZpbml0aW9uIHsKKwlfX2JlMzIgICAgICAgIGlweF9uZXR3b3JrOworCXVuc2lnbmVkIGNoYXIgaXB4X2RldmljZVsxNl07CisJdW5zaWduZWQgY2hhciBpcHhfZGxpbmtfdHlwZTsKKyNkZWZpbmUgSVBYX0ZSQU1FX05PTkUJCTAKKyNkZWZpbmUgSVBYX0ZSQU1FX1NOQVAJCTEKKyNkZWZpbmUgSVBYX0ZSQU1FXzgwMjIJCTIKKyNkZWZpbmUgSVBYX0ZSQU1FX0VUSEVSSUkJMworI2RlZmluZSBJUFhfRlJBTUVfODAyMwkJNAorI2RlZmluZSBJUFhfRlJBTUVfVFJfODAyMiAgICAgICA1IC8qIG9ic29sZXRlICovCisJdW5zaWduZWQgY2hhciBpcHhfc3BlY2lhbDsKKyNkZWZpbmUgSVBYX1NQRUNJQUxfTk9ORQkwCisjZGVmaW5lIElQWF9QUklNQVJZCQkxCisjZGVmaW5lIElQWF9JTlRFUk5BTAkJMgorCXVuc2lnbmVkIGNoYXIgaXB4X25vZGVbSVBYX05PREVfTEVOXTsKK307CisJCitzdHJ1Y3QgaXB4X2NvbmZpZ19kYXRhIHsKKwl1bnNpZ25lZCBjaGFyCWlweGNmZ19hdXRvX3NlbGVjdF9wcmltYXJ5OworCXVuc2lnbmVkIGNoYXIJaXB4Y2ZnX2F1dG9fY3JlYXRlX2ludGVyZmFjZXM7Cit9OworCisvKgorICogT0xEIFJvdXRlIERlZmluaXRpb24gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisgKi8KKworc3RydWN0IGlweF9yb3V0ZV9kZWYgeworCV9fYmUzMgkJaXB4X25ldHdvcms7CisJX19iZTMyCQlpcHhfcm91dGVyX25ldHdvcms7CisjZGVmaW5lIElQWF9ST1VURV9OT19ST1VURVIJMAorCXVuc2lnbmVkIGNoYXIJaXB4X3JvdXRlcl9ub2RlW0lQWF9OT0RFX0xFTl07CisJdW5zaWduZWQgY2hhcglpcHhfZGV2aWNlWzE2XTsKKwl1bnNpZ25lZCBzaG9ydAlpcHhfZmxhZ3M7CisjZGVmaW5lIElQWF9SVF9TTkFQCQk4CisjZGVmaW5lIElQWF9SVF84MDIyCQk0CisjZGVmaW5lIElQWF9SVF9CTFVFQk9PSwkJMgorI2RlZmluZSBJUFhfUlRfUk9VVEVECQkxCit9OworCisjZGVmaW5lIFNJT0NBSVBYSVRGQ1JUCQkoU0lPQ1BST1RPUFJJVkFURSkKKyNkZWZpbmUgU0lPQ0FJUFhQUklTTFQJCShTSU9DUFJPVE9QUklWQVRFICsgMSkKKyNkZWZpbmUgU0lPQ0lQWENGR0RBVEEJCShTSU9DUFJPVE9QUklWQVRFICsgMikKKyNkZWZpbmUgU0lPQ0lQWE5DUENPTk4JCShTSU9DUFJPVE9QUklWQVRFICsgMykKKyNlbmRpZiAvKiBfSVBYX0hfICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXJkYS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lyZGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGJkYWQwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lyZGEuaApAQCAtMCwwICsxLDI1NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgCisgKiBGaWxlbmFtZTogICAgICBpcmRhLmgKKyAqIFZlcnNpb246ICAgICAgIAorICogRGVzY3JpcHRpb246ICAgCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBNb24gTWFyICA4IDE0OjA2OjEyIDE5OTkKKyAqIE1vZGlmaWVkIGF0OiAgIFNhdCBEZWMgMjUgMTY6MDY6NDIgMTk5OQorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk5IERhZyBCcmF0dGxpLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogICAgICAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogIAorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXPDuCBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCisgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBLRVJORUxfSVJEQV9ICisjZGVmaW5lIEtFUk5FTF9JUkRBX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIFBsZWFzZSBkbyAqbm90KiBhZGQgYW55ICNpbmNsdWRlIGluIHRoaXMgZmlsZSwgdGhpcyBmaWxlIGlzCisgKiBpbmNsdWRlZCBhcy1pcyBpbiB1c2VyIHNwYWNlLgorICogUGxlYXNlIGZpeCB0aGUgY2FsbGluZyBmaWxlIHRvIHByb3Blcmx5IGluY2x1ZGVkIG5lZWRlZCBmaWxlcyBiZWZvcmUKKyAqIHRoaXMgb25lLCBvciBwcmVmZXJhYmx5IHRvIGluY2x1ZGUgPG5ldC9pcmRhL2lyZGEuaD4gaW5zdGVhZC4KKyAqIEplYW4gSUkgKi8KKworLyogSGludCBiaXQgcG9zaXRpb25zIGZvciBmaXJzdCBoaW50IGJ5dGUgKi8KKyNkZWZpbmUgSElOVF9QTlAgICAgICAgICAweDAxCisjZGVmaW5lIEhJTlRfUERBICAgICAgICAgMHgwMgorI2RlZmluZSBISU5UX0NPTVBVVEVSICAgIDB4MDQKKyNkZWZpbmUgSElOVF9QUklOVEVSICAgICAweDA4CisjZGVmaW5lIEhJTlRfTU9ERU0gICAgICAgMHgxMAorI2RlZmluZSBISU5UX0ZBWCAgICAgICAgIDB4MjAKKyNkZWZpbmUgSElOVF9MQU4gICAgICAgICAweDQwCisjZGVmaW5lIEhJTlRfRVhURU5TSU9OICAgMHg4MAorCisvKiBIaW50IGJpdCBwb3NpdGlvbnMgZm9yIHNlY29uZCBoaW50IGJ5dGUgKGZpcnN0IGV4dGVuc2lvbiBieXRlKSAqLworI2RlZmluZSBISU5UX1RFTEVQSE9OWSAgIDB4MDEKKyNkZWZpbmUgSElOVF9GSUxFX1NFUlZFUiAweDAyCisjZGVmaW5lIEhJTlRfQ09NTSAgICAgICAgMHgwNAorI2RlZmluZSBISU5UX01FU1NBR0UgICAgIDB4MDgKKyNkZWZpbmUgSElOVF9IVFRQICAgICAgICAweDEwCisjZGVmaW5lIEhJTlRfT0JFWCAgICAgICAgMHgyMAorCisvKiBJckxNUCBjaGFyYWN0ZXIgY29kZSB2YWx1ZXMgKi8KKyNkZWZpbmUgQ1NfQVNDSUkgICAgICAgICAweDAwCisjZGVmaW5lCUNTX0lTT184ODU5XzEgICAgMHgwMQorI2RlZmluZQlDU19JU09fODg1OV8yICAgIDB4MDIKKyNkZWZpbmUJQ1NfSVNPXzg4NTlfMyAgICAweDAzCisjZGVmaW5lCUNTX0lTT184ODU5XzQgICAgMHgwNAorI2RlZmluZQlDU19JU09fODg1OV81ICAgIDB4MDUKKyNkZWZpbmUJQ1NfSVNPXzg4NTlfNiAgICAweDA2CisjZGVmaW5lCUNTX0lTT184ODU5XzcgICAgMHgwNworI2RlZmluZQlDU19JU09fODg1OV84ICAgIDB4MDgKKyNkZWZpbmUJQ1NfSVNPXzg4NTlfOSAgICAweDA5CisjZGVmaW5lIENTX1VOSUNPREUgICAgICAgMHhmZgorCisvKiBUaGVzZSBhcmUgdGhlIGN1cnJlbnRseSBrbm93biBkb25nbGVzICovCit0eXBlZGVmIGVudW0geworCUlSREFfVEVLUkFNX0RPTkdMRSAgICAgICA9IDAsCisJSVJEQV9FU0lfRE9OR0xFICAgICAgICAgID0gMSwKKwlJUkRBX0FDVElTWVNfRE9OR0xFICAgICAgPSAyLAorCUlSREFfQUNUSVNZU19QTFVTX0RPTkdMRSA9IDMsCisJSVJEQV9HSVJCSUxfRE9OR0xFICAgICAgID0gNCwKKwlJUkRBX0xJVEVMSU5LX0RPTkdMRSAgICAgPSA1LAorCUlSREFfQUlSUE9SVF9ET05HTEUgICAgICA9IDYsCisJSVJEQV9PTERfQkVMS0lOX0RPTkdMRSAgID0gNywKKwlJUkRBX0VQNzIxMV9JUiAgICAgICAgICAgPSA4LAorCUlSREFfTUNQMjEyMF9ET05HTEUgICAgICA9IDksCisJSVJEQV9BQ1QyMDBMX0RPTkdMRSAgICAgID0gMTAsCisJSVJEQV9NQTYwMF9ET05HTEUgICAgICAgID0gMTEsCisJSVJEQV9UT0lNMzIzMl9ET05HTEUgICAgID0gMTIsCisJSVJEQV9FUDcyMTFfRE9OR0xFICAgICAgID0gMTMsCit9IElSREFfRE9OR0xFOworCisvKiBQcm90b2NvbCB0eXBlcyB0byBiZSB1c2VkIGZvciBTT0NLX0RHUkFNICovCitlbnVtIHsKKwlJUkRBUFJPVE9fVU5JVERBVEEgPSAwLAorCUlSREFQUk9UT19VTFRSQSAgICA9IDEsCisJSVJEQVBST1RPX01BWAorfTsKKworI2RlZmluZSBTT0xfSVJMTVAgICAgICAyNjYgLyogU2FtZSBhcyBTT0xfSVJEQSBmb3Igbm93ICovCisjZGVmaW5lIFNPTF9JUlRUUCAgICAgIDI2NiAvKiBTYW1lIGFzIFNPTF9JUkRBIGZvciBub3cgKi8KKworI2RlZmluZSBJUkxNUF9FTlVNREVWSUNFUyAgICAgICAgMQkvKiBSZXR1cm4gZGlzY292ZXJ5IGxvZyAqLworI2RlZmluZSBJUkxNUF9JQVNfU0VUICAgICAgICAgICAgMgkvKiBTZXQgYW4gYXR0cmlidXRlIGluIGxvY2FsIElBUyAqLworI2RlZmluZSBJUkxNUF9JQVNfUVVFUlkgICAgICAgICAgMwkvKiBRdWVyeSByZW1vdGUgSUFTIGZvciBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgSVJMTVBfSElOVFNfU0VUICAgICAgICAgIDQJLyogU2V0IGhpbnQgYml0cyBhZHZlcnRpc2VkICovCisjZGVmaW5lIElSTE1QX1FPU19TRVQgICAgICAgICAgICA1CisjZGVmaW5lIElSTE1QX1FPU19HRVQgICAgICAgICAgICA2CisjZGVmaW5lIElSTE1QX01BWF9TRFVfU0laRSAgICAgICA3CisjZGVmaW5lIElSTE1QX0lBU19HRVQgICAgICAgICAgICA4CS8qIEdldCBhbiBhdHRyaWJ1dGUgZnJvbSBsb2NhbCBJQVMgKi8KKyNkZWZpbmUgSVJMTVBfSUFTX0RFTAkJIDkJLyogUmVtb3ZlIGF0dHJpYnV0ZSBmcm9tIGxvY2FsIElBUyAqLworI2RlZmluZSBJUkxNUF9ISU5UX01BU0tfU0VUCTEwCS8qIFNldCBkaXNjb3ZlcnkgZmlsdGVyICovCisjZGVmaW5lIElSTE1QX1dBSVRERVZJQ0UJMTEJLyogV2FpdCBmb3IgYSBuZXcgZGlzY292ZXJ5ICovCisKKyNkZWZpbmUgSVJUVFBfTUFYX1NEVV9TSVpFIElSTE1QX01BWF9TRFVfU0laRSAvKiBDb21wYXRpYmlsaXR5ICovCisKKyNkZWZpbmUgSUFTX01BWF9TVFJJTkcgICAgICAgICAyNTYJLyogU2VlIElyTE1QIDEuMSwgNC4zLjMuMiAqLworI2RlZmluZSBJQVNfTUFYX09DVEVUX1NUUklORyAgMTAyNAkvKiBTZWUgSXJMTVAgMS4xLCA0LjMuMy4yICovCisjZGVmaW5lIElBU19NQVhfQ0xBU1NOQU1FICAgICAgIDYwCS8qIFNlZSBJckxNUCAxLjEsIDQuMy4xICovCisjZGVmaW5lIElBU19NQVhfQVRUUklCTkFNRSAgICAgIDYwCS8qIFNlZSBJckxNUCAxLjEsIDQuMy4zLjEgKi8KKyNkZWZpbmUgSUFTX01BWF9BVFRSSUJOVU1CRVIgICAyNTYJLyogU2VlIElyTE1QIDEuMSwgNC4zLjMuMSAqLworLyogRm9yIHVzZXIgc3BhY2UgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAtIG1heSBiZSBmaXhlZCBpbiBrZXJuZWwgMi41LlgKKyAqIE5vdGUgOiBuZWVkIDYwKzEgKCdcMCcpLCBtYWtlIGl0IDY0IGZvciBhbGlnbmVtZW50IC0gSmVhbiBJSSAqLworI2RlZmluZSBJQVNfRVhQT1JUX0NMQVNTTkFNRSAgICAgICA2NAorI2RlZmluZSBJQVNfRVhQT1JUX0FUVFJJQk5BTUUgICAgIDI1NgorCisvKiBBdHRyaWJ1dGUgdHlwZSBuZWVkZWQgZm9yIHN0cnVjdCBpcmRhX2lhc19zZXQgKi8KKyNkZWZpbmUgSUFTX01JU1NJTkcgMAorI2RlZmluZSBJQVNfSU5URUdFUiAxCisjZGVmaW5lIElBU19PQ1RfU0VRIDIKKyNkZWZpbmUgSUFTX1NUUklORyAgMworCisjZGVmaW5lIExTQVBfQU5ZICAgICAgICAgICAgICAweGZmCisKK3N0cnVjdCBzb2NrYWRkcl9pcmRhIHsKKwlzYV9mYW1pbHlfdCBzaXJfZmFtaWx5OyAgIC8qIEFGX0lSREEgKi8KKwlfX3U4ICAgICAgICBzaXJfbHNhcF9zZWw7IC8qIExTQVAgc2VsZWN0b3IgKi8KKwlfX3UzMiAgICAgICBzaXJfYWRkcjsgICAgIC8qIERldmljZSBhZGRyZXNzICovCisJY2hhciAgICAgICAgc2lyX25hbWVbMjVdOyAvKiBVc3VhbGx5IDxzZXJ2aWNlPjpJckRBOlRpbnlUUCAqLworfTsKKworc3RydWN0IGlyZGFfZGV2aWNlX2luZm8geworCV9fdTMyICAgICAgIHNhZGRyOyAgICAvKiBBZGRyZXNzIG9mIGxvY2FsIGludGVyZmFjZSAqLworCV9fdTMyICAgICAgIGRhZGRyOyAgICAvKiBBZGRyZXNzIG9mIHJlbW90ZSBkZXZpY2UgKi8KKwljaGFyICAgICAgICBpbmZvWzIyXTsgLyogRGVzY3JpcHRpb24gKi8KKwlfX3U4ICAgICAgICBjaGFyc2V0OyAgLyogQ2hhcnNldCB1c2VkIGZvciBkZXNjcmlwdGlvbiAqLworCV9fdTggICAgICAgIGhpbnRzWzJdOyAvKiBIaW50IGJpdHMgKi8KK307CisKK3N0cnVjdCBpcmRhX2RldmljZV9saXN0IHsKKyAgICAgICBfX3UzMiBsZW47CisgICAgICAgc3RydWN0IGlyZGFfZGV2aWNlX2luZm8gZGV2WzFdOworfTsKKworc3RydWN0IGlyZGFfaWFzX3NldCB7CisJY2hhciBpcmRhX2NsYXNzX25hbWVbSUFTX0VYUE9SVF9DTEFTU05BTUVdOworCWNoYXIgaXJkYV9hdHRyaWJfbmFtZVtJQVNfRVhQT1JUX0FUVFJJQk5BTUVdOworCXVuc2lnbmVkIGludCBpcmRhX2F0dHJpYl90eXBlOworCXVuaW9uIHsKKwkJdW5zaWduZWQgaW50IGlyZGFfYXR0cmliX2ludDsKKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIHNob3J0IGxlbjsKKwkJCV9fdTggb2N0ZXRfc2VxW0lBU19NQVhfT0NURVRfU1RSSU5HXTsKKwkJfSBpcmRhX2F0dHJpYl9vY3RldF9zZXE7CisJCXN0cnVjdCB7CisJCQlfX3U4IGxlbjsKKwkJCV9fdTggY2hhcnNldDsKKwkJCV9fdTggc3RyaW5nW0lBU19NQVhfU1RSSU5HXTsKKwkJfSBpcmRhX2F0dHJpYl9zdHJpbmc7CisJfSBhdHRyaWJ1dGU7CisJX191MzIgICAgICAgZGFkZHI7ICAgIC8qIEFkZHJlc3Mgb2YgZGV2aWNlIChmb3Igc29tZSBxdWVyaWVzIG9ubHkpICovCit9OworCisvKiBTb21lIHByaXZhdGUgSU9DVEwncyAobWF4IDE2KSAqLworI2RlZmluZSBTSU9DU0RPTkdMRSAgICAoU0lPQ0RFVlBSSVZBVEUgKyAwKQorI2RlZmluZSBTSU9DR0RPTkdMRSAgICAoU0lPQ0RFVlBSSVZBVEUgKyAxKQorI2RlZmluZSBTSU9DU0JBTkRXSURUSCAoU0lPQ0RFVlBSSVZBVEUgKyAyKQorI2RlZmluZSBTSU9DU01FRElBQlVTWSAoU0lPQ0RFVlBSSVZBVEUgKyAzKQorI2RlZmluZSBTSU9DR01FRElBQlVTWSAoU0lPQ0RFVlBSSVZBVEUgKyA0KQorI2RlZmluZSBTSU9DR1JFQ0VJVklORyAoU0lPQ0RFVlBSSVZBVEUgKyA1KQorI2RlZmluZSBTSU9DU01PREUgICAgICAoU0lPQ0RFVlBSSVZBVEUgKyA2KQorI2RlZmluZSBTSU9DR01PREUgICAgICAoU0lPQ0RFVlBSSVZBVEUgKyA3KQorI2RlZmluZSBTSU9DU0RUUlJUUyAgICAoU0lPQ0RFVlBSSVZBVEUgKyA4KQorI2RlZmluZSBTSU9DR1FPUyAgICAgICAoU0lPQ0RFVlBSSVZBVEUgKyA5KQorCisvKiBObyByZWFzb24gdG8gaW5jbHVkZSA8bGludXgvaWYuaD4ganVzdCBiZWNhdXNlIG9mIHRoaXMgb25lIDstKSAqLworI2RlZmluZSBJUk5BTVNJWiAxNiAKKworLyogSXJEQSBxdWFsaXR5IG9mIHNlcnZpY2UgaW5mb3JtYXRpb24gKG11c3Qgbm90IGV4Y2VlZCAxNiBieXRlcykgKi8KK3N0cnVjdCBpZl9pcmRhX3FvcyB7CisJdW5zaWduZWQgbG9uZyAgYmF1ZHJhdGU7CisJdW5zaWduZWQgc2hvcnQgZGF0YV9zaXplOworCXVuc2lnbmVkIHNob3J0IHdpbmRvd19zaXplOworCXVuc2lnbmVkIHNob3J0IG1pbl90dXJuX3RpbWU7CisJdW5zaWduZWQgc2hvcnQgbWF4X3R1cm5fdGltZTsKKwl1bnNpZ25lZCBjaGFyICBhZGRfYm9mczsKKwl1bnNpZ25lZCBjaGFyICBsaW5rX2Rpc2M7Cit9OworCisvKiBGb3Igc2V0dGluZyBSVFMgYW5kIERUUiBsaW5lcyBvZiBhIGRvbmdsZSAqLworc3RydWN0IGlmX2lyZGFfbGluZSB7CisJX191OCBkdHI7CisJX191OCBydHM7Cit9OworCisvKiBJckRBIGludGVyZmFjZSBjb25maWd1cmF0aW9uIChkYXRhIHBhcnQgbXVzdCBub3QgZXhjZWVkIDE2IGJ5dGVzKSAqLworc3RydWN0IGlmX2lyZGFfcmVxIHsKKwl1bmlvbiB7CisJCWNoYXIgaWZybl9uYW1lW0lSTkFNU0laXTsgIC8qIGlmIG5hbWUsIGUuZy4gImlyZGEwIiAqLworCX0gaWZyX2lmcm47CisJCisJLyogRGF0YSBwYXJ0ICovCisJdW5pb24geworCQlzdHJ1Y3QgaWZfaXJkYV9saW5lIGlmcnVfbGluZTsKKwkJc3RydWN0IGlmX2lyZGFfcW9zICBpZnJ1X3FvczsKKwkJdW5zaWduZWQgc2hvcnQgICAgICBpZnJ1X2ZsYWdzOworCQl1bnNpZ25lZCBpbnQgICAgICAgIGlmcnVfcmVjZWl2aW5nOworCQl1bnNpZ25lZCBpbnQgICAgICAgIGlmcnVfbW9kZTsKKwkJdW5zaWduZWQgaW50ICAgICAgICBpZnJ1X2RvbmdsZTsKKwl9IGlmcl9pZnJ1OworfTsKKworI2RlZmluZSBpZnJfYmF1ZHJhdGUgIGlmcl9pZnJ1LmlmcnVfcW9zLmJhdWRyYXRlCisjZGVmaW5lIGlmcl9yZWNlaXZpbmcgaWZyX2lmcnUuaWZydV9yZWNlaXZpbmcgCisjZGVmaW5lIGlmcl9kb25nbGUgICAgaWZyX2lmcnUuaWZydV9kb25nbGUKKyNkZWZpbmUgaWZyX21vZGUgICAgICBpZnJfaWZydS5pZnJ1X21vZGUKKyNkZWZpbmUgaWZyX2R0ciAgICAgICBpZnJfaWZydS5pZnJ1X2xpbmUuZHRyCisjZGVmaW5lIGlmcl9ydHMgICAgICAgaWZyX2lmcnUuaWZydV9saW5lLnJ0cworCisKKy8qIElyREEgbmV0bGluayBkZWZpbml0aW9ucyAqLworI2RlZmluZSBJUkRBX05MX05BTUUgImlyZGEiCisjZGVmaW5lIElSREFfTkxfVkVSU0lPTiAxCisKK2VudW0gaXJkYV9ubF9jb21tYW5kcyB7CisJSVJEQV9OTF9DTURfVU5TUEVDLAorCUlSREFfTkxfQ01EX1NFVF9NT0RFLAorCUlSREFfTkxfQ01EX0dFVF9NT0RFLAorCisJX19JUkRBX05MX0NNRF9BRlRFUl9MQVNUCit9OworI2RlZmluZSBJUkRBX05MX0NNRF9NQVggKF9fSVJEQV9OTF9DTURfQUZURVJfTEFTVCAtIDEpCisKK2VudW0gbmw4MDIxMV9hdHRycyB7CisJSVJEQV9OTF9BVFRSX1VOU1BFQywKKwlJUkRBX05MX0FUVFJfSUZOQU1FLAorCUlSREFfTkxfQVRUUl9NT0RFLAorCisJX19JUkRBX05MX0FUVFJfQUZURVJfTEFTVAorfTsKKyNkZWZpbmUgSVJEQV9OTF9BVFRSX01BWCAoX19JUkRBX05MX0FUVFJfQUZURVJfTEFTVCAtIDEpCisKKy8qIElyREEgbW9kZXMgKi8KKyNkZWZpbmUgSVJEQV9NT0RFX1BSSU1BUlkgICAweDEKKyNkZWZpbmUgSVJEQV9NT0RFX1NFQ09OREFSWSAweDIKKyNkZWZpbmUgSVJEQV9NT0RFX01PTklUT1IgICAweDQKKworI2VuZGlmIC8qIEtFUk5FTF9JUkRBX0ggKi8KKworCisKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lycW5yLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXJxbnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGZiNjNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lycW5yLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIF9MSU5VWF9JUlFOUl9ICisjZGVmaW5lIF9MSU5VWF9JUlFOUl9ICisKKy8qCisgKiBHZW5lcmljIGlycV9kZXNjIGl0ZXJhdG9yczoKKyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pc2RuLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXNkbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NmJiZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXNkbi5oCkBAIC0wLDAgKzEsMTQyIEBACisvKiAkSWQ6IGlzZG4uaCx2IDEuMTI1LjIuMyAyMDA0LzAyLzEwIDAxOjA3OjE0IGtlaWwgRXhwICQKKyAqCisgKiBNYWluIGhlYWRlciBmb3IgdGhlIExpbnV4IElTRE4gc3Vic3lzdGVtIChsaW5rbGV2ZWwpLgorICoKKyAqIENvcHlyaWdodCAxOTk0LDk1LDk2IGJ5IEZyaXR6IEVsZmVydCAoZnJpdHpAaXNkbjRsaW51eC5kZSkKKyAqIENvcHlyaWdodCAxOTk1LDk2ICAgIGJ5IFRoaW5raW5nIE9iamVjdHMgU29mdHdhcmUgR21iSCBXdWVyemJ1cmcKKyAqIENvcHlyaWdodCAxOTk1LDk2ICAgIGJ5IE1pY2hhZWwgSGlwcCAoTWljaGFlbC5IaXBwQHN0dWRlbnQudW5pLXR1ZWJpbmdlbi5kZSkKKyAqIAorICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcworICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0lTRE5fSF9fCisjZGVmaW5lIF9fSVNETl9IX18KKworI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNkZWZpbmUgSVNETl9NQVhfRFJJVkVSUyAgICAzMgorI2RlZmluZSBJU0ROX01BWF9DSEFOTkVMUyAgIDY0CisKKy8qIE5ldyBpb2N0bC1jb2RlcyAqLworI2RlZmluZSBJSU9DTkVUQUlGICBfSU8oJ0knLDEpCisjZGVmaW5lIElJT0NORVRESUYgIF9JTygnSScsMikKKyNkZWZpbmUgSUlPQ05FVFNDRiAgX0lPKCdJJywzKQorI2RlZmluZSBJSU9DTkVUR0NGICBfSU8oJ0knLDQpCisjZGVmaW5lIElJT0NORVRBTk0gIF9JTygnSScsNSkKKyNkZWZpbmUgSUlPQ05FVEROTSAgX0lPKCdJJyw2KQorI2RlZmluZSBJSU9DTkVUR05NICBfSU8oJ0knLDcpCisjZGVmaW5lIElJT0NHRVRTRVQgIF9JTygnSScsOCkgLyogbm8gbG9uZ2VyIHN1cHBvcnRlZCAqLworI2RlZmluZSBJSU9DU0VUU0VUICBfSU8oJ0knLDkpIC8qIG5vIGxvbmdlciBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgSUlPQ1NFVFZFUiAgX0lPKCdJJywxMCkKKyNkZWZpbmUgSUlPQ05FVEhVUCAgX0lPKCdJJywxMSkKKyNkZWZpbmUgSUlPQ1NFVEdTVCAgX0lPKCdJJywxMikKKyNkZWZpbmUgSUlPQ1NFVEJSSiAgX0lPKCdJJywxMykKKyNkZWZpbmUgSUlPQ1NJR1BSRiAgX0lPKCdJJywxNCkKKyNkZWZpbmUgSUlPQ0dFVFBSRiAgX0lPKCdJJywxNSkKKyNkZWZpbmUgSUlPQ1NFVFBSRiAgX0lPKCdJJywxNikKKyNkZWZpbmUgSUlPQ0dFVE1BUCAgX0lPKCdJJywxNykKKyNkZWZpbmUgSUlPQ1NFVE1BUCAgX0lPKCdJJywxOCkKKyNkZWZpbmUgSUlPQ05FVEFTTCAgX0lPKCdJJywxOSkKKyNkZWZpbmUgSUlPQ05FVERJTCAgX0lPKCdJJywyMCkKKyNkZWZpbmUgSUlPQ0dFVENQUyAgX0lPKCdJJywyMSkKKyNkZWZpbmUgSUlPQ0dFVERWUiAgX0lPKCdJJywyMikKKyNkZWZpbmUgSUlPQ05FVExDUiAgX0lPKCdJJywyMykgLyogZHdhYmMgaW9jdGwgZm9yIExDUiBmcm9tIGlzZG5sb2cgKi8KKyNkZWZpbmUgSUlPQ05FVERXUlNFVCAgX0lPKCdJJywyNCkgLyogZHdhYmMgaW9jdGwgdG8gcmVzZXQgYWJjLXZhbHVlcyB0byBkZWZhdWx0IG9uIGEgbmV0LWludGVyZmFjZSAqLworCisjZGVmaW5lIElJT0NORVRBTE4gIF9JTygnSScsMzIpCisjZGVmaW5lIElJT0NORVRETE4gIF9JTygnSScsMzMpCisKKyNkZWZpbmUgSUlPQ05FVEdQTiAgX0lPKCdJJywzNCkKKworI2RlZmluZSBJSU9DREJHVkFSICBfSU8oJ0knLDEyNykKKworI2RlZmluZSBJSU9DRFJWQ1RMICBfSU8oJ0knLDEyOCkKKworLyogY2lzY28gaGRsY2sgZGV2aWNlIHByaXZhdGUgaW9jdGxzICovCisjZGVmaW5lIFNJT0NHS0VFUFBFUklPRAkoU0lPQ0RFVlBSSVZBVEUgKyAwKQorI2RlZmluZSBTSU9DU0tFRVBQRVJJT0QJKFNJT0NERVZQUklWQVRFICsgMSkKKyNkZWZpbmUgU0lPQ0dERUJTRVJJTlQJKFNJT0NERVZQUklWQVRFICsgMikKKyNkZWZpbmUgU0lPQ1NERUJTRVJJTlQJKFNJT0NERVZQUklWQVRFICsgMykKKworLyogUGFja2V0IGVuY2Fwc3VsYXRpb25zIGZvciBuZXQtaW50ZXJmYWNlcyAqLworI2RlZmluZSBJU0ROX05FVF9FTkNBUF9FVEhFUiAgICAgIDAKKyNkZWZpbmUgSVNETl9ORVRfRU5DQVBfUkFXSVAgICAgICAxCisjZGVmaW5lIElTRE5fTkVUX0VOQ0FQX0lQVFlQICAgICAgMgorI2RlZmluZSBJU0ROX05FVF9FTkNBUF9DSVNDT0hETEMgIDMgLyogV2l0aG91dCBTTEFSUCBhbmQga2VlcGFsaXZlICovCisjZGVmaW5lIElTRE5fTkVUX0VOQ0FQX1NZTkNQUFAgICAgNAorI2RlZmluZSBJU0ROX05FVF9FTkNBUF9VSUhETEMgICAgIDUKKyNkZWZpbmUgSVNETl9ORVRfRU5DQVBfQ0lTQ09IRExDSyA2IC8qIFdpdGggU0xBUlAgYW5kIGtlZXBhbGl2ZSAgICAqLworI2RlZmluZSBJU0ROX05FVF9FTkNBUF9YMjVJRkFDRSAgIDcgLyogRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3gyNS1pZmFjZS50eHQqLworI2RlZmluZSBJU0ROX05FVF9FTkNBUF9NQVhfRU5DQVAgIElTRE5fTkVUX0VOQ0FQX1gyNUlGQUNFCisKKy8qIEZhY2lsaXR5IHdoaWNoIGN1cnJlbnRseSB1c2VzIGFuIElTRE4tY2hhbm5lbCAqLworI2RlZmluZSBJU0ROX1VTQUdFX05PTkUgICAgICAgMAorI2RlZmluZSBJU0ROX1VTQUdFX1JBVyAgICAgICAgMQorI2RlZmluZSBJU0ROX1VTQUdFX01PREVNICAgICAgMgorI2RlZmluZSBJU0ROX1VTQUdFX05FVCAgICAgICAgMworI2RlZmluZSBJU0ROX1VTQUdFX1ZPSUNFICAgICAgNAorI2RlZmluZSBJU0ROX1VTQUdFX0ZBWCAgICAgICAgNQorI2RlZmluZSBJU0ROX1VTQUdFX01BU0sgICAgICAgNyAvKiBNYXNrIHRvIGdldCBwbGFpbiB1c2FnZSAqLworI2RlZmluZSBJU0ROX1VTQUdFX0RJU0FCTEVEICAzMiAvKiBUaGlzIGJpdCBpcyBzZXQsIGlmIGNoYW5uZWwgaXMgZGlzYWJsZWQgKi8KKyNkZWZpbmUgSVNETl9VU0FHRV9FWENMVVNJVkUgNjQgLyogVGhpcyBiaXQgaXMgc2V0LCBpZiBjaGFubmVsIGlzIGV4Y2x1c2l2ZSAqLworI2RlZmluZSBJU0ROX1VTQUdFX09VVEdPSU5HIDEyOCAvKiBUaGlzIGJpdCBpcyBzZXQsIGlmIGNoYW5uZWwgaXMgb3V0Z29pbmcgICovCisKKyNkZWZpbmUgSVNETl9NT0RFTV9OVU1SRUcgICAgMjQgICAgICAgIC8qIE51bWJlciBvZiBNb2RlbS1SZWdpc3RlcnMgICAgICAgICovCisjZGVmaW5lIElTRE5fTE1TTkxFTiAgICAgICAgIDI1NSAvKiBMZW5ndGggb2YgdHR5J3MgTGlzdGVuLU1TTiBzdHJpbmcgKi8KKyNkZWZpbmUgSVNETl9DTVNHTEVOCSAgICAgNTAJIC8qIExlbmd0aCBvZiBDT05ORUNULU1lc3NhZ2UgdG8gYWRkIGZvciBNb2RlbSAqLworCisjZGVmaW5lIElTRE5fTVNOTEVOICAgICAgICAgIDMyCisjZGVmaW5lIE5FVF9EViAweDA2ICAvKiBEYXRhIHZlcnNpb24gZm9yIGlzZG5fbmV0X2lvY3RsX2NmZyAgICovCisjZGVmaW5lIFRUWV9EViAweDA2ICAvKiBEYXRhIHZlcnNpb24gZm9yIGlwcm9mZCBldGMuICAgICAgICAgICovCisKKyNkZWZpbmUgSU5GX0RWIDB4MDEgIC8qIERhdGEgdmVyc2lvbiBmb3IgL2Rldi9pc2RuaW5mbyAgICAgICAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBjaGFyIGRydmlkWzI1XTsKKyAgdW5zaWduZWQgbG9uZyBhcmc7Cit9IGlzZG5faW9jdGxfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNoYXIgbmFtZVsxMF07CisgIGNoYXIgcGhvbmVbSVNETl9NU05MRU5dOworICBpbnQgIG91dGdvaW5nOworfSBpc2RuX25ldF9pb2N0bF9waG9uZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjaGFyIG5hbWVbMTBdOyAgICAgLyogTmFtZSBvZiBpbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAqLworICBjaGFyIG1hc3RlclsxMF07ICAgLyogTmFtZSBvZiBNYXN0ZXIgZm9yIEJ1bmRsaW5nICAgICAgICAgICAqLworICBjaGFyIHNsYXZlWzEwXTsgICAgLyogTmFtZSBvZiBTbGF2ZSBmb3IgQnVuZGxpbmcgICAgICAgICAgICAqLworICBjaGFyIGVhelsyNTZdOyAgICAgLyogRUFaL01TTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBjaGFyIGRydmlkWzI1XTsgICAgLyogRHJpdmVySWQgZm9yIEJpbmRpbmdzICAgICAgICAgICAgICAgICAqLworICBpbnQgIG9uaHRpbWU7ICAgICAgLyogSGFuZ3VwLVRpbWVvdXQgICAgICAgICAgICAgICAgICAgICAgICAqLworICBpbnQgIGNoYXJnZTsgICAgICAgLyogQ2hhcmdlLVVuaXRzICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBpbnQgIGwyX3Byb3RvOyAgICAgLyogTGF5ZXItMiBwcm90b2NvbCAgICAgICAgICAgICAgICAgICAgICAqLworICBpbnQgIGwzX3Byb3RvOyAgICAgLyogTGF5ZXItMyBwcm90b2NvbCAgICAgICAgICAgICAgICAgICAgICAqLworICBpbnQgIHBfZW5jYXA7ICAgICAgLyogRW5jYXBzdWxhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBpbnQgIGV4Y2x1c2l2ZTsgICAgLyogQ2hhbm5lbCwgaWYgYm91bmQgZXhjbHVzaXZlICAgICAgICAgICAqLworICBpbnQgIGRpYWxtYXg7ICAgICAgLyogRGlhbCBSZXRyeS1Db3VudGVyICAgICAgICAgICAgICAgICAgICAqLworICBpbnQgIHNsYXZlZGVsYXk7ICAgLyogRGVsYXkgdW50aWwgc2xhdmUgc3RhcnRzIHVwICAgICAgICAgICAqLworICBpbnQgIGNiZGVsYXk7ICAgICAgLyogRGVsYXkgYmVmb3JlIENhbGxiYWNrICAgICAgICAgICAgICAgICAqLworICBpbnQgIGNoYXJnZWh1cDsgICAgLyogRmxhZzogQ2hhcmdlLUhhbmd1cCAgICAgICAgICAgICAgICAgICAqLworICBpbnQgIGlodXA7ICAgICAgICAgLyogRmxhZzogSGFuZ3VwLVRpbWVvdXQgb24gaW5jb21pbmcgbGluZSAqLworICBpbnQgIHNlY3VyZTsgICAgICAgLyogRmxhZzogU2VjdXJlICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBpbnQgIGNhbGxiYWNrOyAgICAgLyogRmxhZzogQ2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAqLworICBpbnQgIGNiaHVwOyAgICAgICAgLyogRmxhZzogUmVqZWN0IENhbGwgYmVmb3JlIENhbGxiYWNrICAgICAqLworICBpbnQgIHBwcGJpbmQ7ICAgICAgLyogaXBwcCBkZXZpY2UgZm9yIGJpbmRpbmdzICAgICAgICAgICAgICAqLworICBpbnQgIGNoYXJnZWludDsgICAgLyogVXNlIGZpeGVkIGNoYXJnZSBpbnRlcnZhbCBsZW5ndGggICAgICAqLworICBpbnQgIHRyaWdnZXJjcHM7ICAgLyogQm9nb0NQUyBuZWVkZWQgZm9yIHRyaWdnZXJpbmcgc2xhdmUgICAqLworICBpbnQgIGRpYWx0aW1lb3V0OyAgLyogRGlhbC1UaW1lb3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBpbnQgIGRpYWx3YWl0OyAgICAgLyogVGltZSB0byB3YWl0IGFmdGVyIGZhaWxlZCBkaWFsICAgICAgICAqLworICBpbnQgIGRpYWxtb2RlOyAgICAgLyogRmxhZzogb2ZmIC8gb24gLyBhdXRvICAgICAgICAgICAgICAgICAqLworfSBpc2RuX25ldF9pb2N0bF9jZmc7CisKKyNkZWZpbmUgSVNETl9ORVRfRElBTE1PREVfTUFTSyAgMHhDMCAgICAvKiBiaXRzIGZvciBzdGF0dXMgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVNETl9ORVRfRE1fT0ZGCSAgICAgICAgMHgwMCAgICAvKiB0aGlzIGludGVyZmFjZSBpcyBzdG9wcGVkICAgICAgKi8KKyNkZWZpbmUgSVNETl9ORVRfRE1fTUFOVUFMCTB4NDAgICAgLyogdGhpcyBpbnRlcmZhY2UgaXMgb24gKG1hbnVhbCkgICovCisjZGVmaW5lIElTRE5fTkVUX0RNX0FVVE8JMHg4MCAgICAvKiB0aGlzIGludGVyZmFjZSBpcyBhdXRvZGlhbCAgICAgKi8KKyNkZWZpbmUgSVNETl9ORVRfRElBTE1PREUoeCkgKCgmKHgpKS0+ZmxhZ3MgJiBJU0ROX05FVF9ESUFMTU9ERV9NQVNLKQorCisKKyNlbmRpZiAvKiBfX0lTRE5fSF9fICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXNkbi9jYXBpY21kLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXNkbi9jYXBpY21kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU4NjM1ZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pc2RuL2NhcGljbWQuaApAQCAtMCwwICsxLDExNSBAQAorLyogJElkOiBjYXBpY21kLmgsdiAxLjIuNi4yIDIwMDEvMDkvMjMgMjI6MjQ6MzMga2FpIEV4cCAkCisgKiAKKyAqIENBUEkgMi4wIEludGVyZmFjZSBmb3IgTGludXgKKyAqIAorICogQ29weXJpZ2h0IDE5OTcgYnkgQ2Fyc3RlbiBQYWV0aCA8Y2FsbGVAY2FsbGUuZGU+CisgKiAKKyAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMKKyAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisgKgorICovCisKKyNpZm5kZWYgX19DQVBJQ01EX0hfXworI2RlZmluZSBfX0NBUElDTURfSF9fCisKKyNkZWZpbmUgQ0FQSV9NU0dfQkFTRUxFTgkJOAorI2RlZmluZSBDQVBJX0RBVEFfQjNfUkVRX0xFTgkJKENBUElfTVNHX0JBU0VMRU4rNCs0KzIrMisyKQorI2RlZmluZSBDQVBJX0RBVEFfQjNfUkVTUF9MRU4JCShDQVBJX01TR19CQVNFTEVOKzQrMikKKworLyotLS0tLSBDQVBJIGNvbW1hbmRzIC0tLS0tKi8KKyNkZWZpbmUgQ0FQSV9BTEVSVAkJICAgIDB4MDEKKyNkZWZpbmUgQ0FQSV9DT05ORUNUCQkgICAgMHgwMgorI2RlZmluZSBDQVBJX0NPTk5FQ1RfQUNUSVZFCSAgICAweDAzCisjZGVmaW5lIENBUElfQ09OTkVDVF9CM19BQ1RJVkUJICAgIDB4ODMKKyNkZWZpbmUgQ0FQSV9DT05ORUNUX0IzIAkgICAgMHg4MgorI2RlZmluZSBDQVBJX0NPTk5FQ1RfQjNfVDkwX0FDVElWRSAgMHg4OAorI2RlZmluZSBDQVBJX0RBVEFfQjMJCSAgICAweDg2CisjZGVmaW5lIENBUElfRElTQ09OTkVDVF9CMwkgICAgMHg4NAorI2RlZmluZSBDQVBJX0RJU0NPTk5FQ1QgCSAgICAweDA0CisjZGVmaW5lIENBUElfRkFDSUxJVFkJCSAgICAweDgwCisjZGVmaW5lIENBUElfSU5GTwkJICAgIDB4MDgKKyNkZWZpbmUgQ0FQSV9MSVNURU4JCSAgICAweDA1CisjZGVmaW5lIENBUElfTUFOVUZBQ1RVUkVSCSAgICAweGZmCisjZGVmaW5lIENBUElfUkVTRVRfQjMJCSAgICAweDg3CisjZGVmaW5lIENBUElfU0VMRUNUX0JfUFJPVE9DT0wJICAgIDB4NDEKKworLyotLS0tLSBDQVBJIHN1YmNvbW1hbmRzIC0tLS0tKi8KKworI2RlZmluZSBDQVBJX1JFUSAgICAweDgwCisjZGVmaW5lIENBUElfQ09ORiAgIDB4ODEKKyNkZWZpbmUgQ0FQSV9JTkQgICAgMHg4MgorI2RlZmluZSBDQVBJX1JFU1AgICAweDgzCisKKy8qLS0tLS0gQ0FQSSBjb21iaW5lZCBjb21tYW5kcyAtLS0tLSovCisKKyNkZWZpbmUgQ0FQSUNNRChjbWQsc3ViY21kKQkoKChjbWQpPDw4KXwoc3ViY21kKSkKKworI2RlZmluZSBDQVBJX0RJU0NPTk5FQ1RfUkVRCQlDQVBJQ01EKENBUElfRElTQ09OTkVDVCxDQVBJX1JFUSkKKyNkZWZpbmUgQ0FQSV9ESVNDT05ORUNUX0NPTkYJCUNBUElDTUQoQ0FQSV9ESVNDT05ORUNULENBUElfQ09ORikKKyNkZWZpbmUgQ0FQSV9ESVNDT05ORUNUX0lORAkJQ0FQSUNNRChDQVBJX0RJU0NPTk5FQ1QsQ0FQSV9JTkQpCisjZGVmaW5lIENBUElfRElTQ09OTkVDVF9SRVNQCQlDQVBJQ01EKENBUElfRElTQ09OTkVDVCxDQVBJX1JFU1ApCisKKyNkZWZpbmUgQ0FQSV9BTEVSVF9SRVEJCQlDQVBJQ01EKENBUElfQUxFUlQsQ0FQSV9SRVEpCisjZGVmaW5lIENBUElfQUxFUlRfQ09ORgkJCUNBUElDTUQoQ0FQSV9BTEVSVCxDQVBJX0NPTkYpCisKKyNkZWZpbmUgQ0FQSV9DT05ORUNUX1JFUQkJQ0FQSUNNRChDQVBJX0NPTk5FQ1QsQ0FQSV9SRVEpCisjZGVmaW5lIENBUElfQ09OTkVDVF9DT05GCQlDQVBJQ01EKENBUElfQ09OTkVDVCxDQVBJX0NPTkYpCisjZGVmaW5lIENBUElfQ09OTkVDVF9JTkQJCUNBUElDTUQoQ0FQSV9DT05ORUNULENBUElfSU5EKQorI2RlZmluZSBDQVBJX0NPTk5FQ1RfUkVTUAkJQ0FQSUNNRChDQVBJX0NPTk5FQ1QsQ0FQSV9SRVNQKQorCisjZGVmaW5lIENBUElfQ09OTkVDVF9BQ1RJVkVfUkVRCQlDQVBJQ01EKENBUElfQ09OTkVDVF9BQ1RJVkUsQ0FQSV9SRVEpCisjZGVmaW5lIENBUElfQ09OTkVDVF9BQ1RJVkVfQ09ORglDQVBJQ01EKENBUElfQ09OTkVDVF9BQ1RJVkUsQ0FQSV9DT05GKQorI2RlZmluZSBDQVBJX0NPTk5FQ1RfQUNUSVZFX0lORAkJQ0FQSUNNRChDQVBJX0NPTk5FQ1RfQUNUSVZFLENBUElfSU5EKQorI2RlZmluZSBDQVBJX0NPTk5FQ1RfQUNUSVZFX1JFU1AJQ0FQSUNNRChDQVBJX0NPTk5FQ1RfQUNUSVZFLENBUElfUkVTUCkKKworI2RlZmluZSBDQVBJX1NFTEVDVF9CX1BST1RPQ09MX1JFUQlDQVBJQ01EKENBUElfU0VMRUNUX0JfUFJPVE9DT0wsQ0FQSV9SRVEpCisjZGVmaW5lIENBUElfU0VMRUNUX0JfUFJPVE9DT0xfQ09ORglDQVBJQ01EKENBUElfU0VMRUNUX0JfUFJPVE9DT0wsQ0FQSV9DT05GKQorCisjZGVmaW5lIENBUElfQ09OTkVDVF9CM19BQ1RJVkVfUkVRCUNBUElDTUQoQ0FQSV9DT05ORUNUX0IzX0FDVElWRSxDQVBJX1JFUSkKKyNkZWZpbmUgQ0FQSV9DT05ORUNUX0IzX0FDVElWRV9DT05GCUNBUElDTUQoQ0FQSV9DT05ORUNUX0IzX0FDVElWRSxDQVBJX0NPTkYpCisjZGVmaW5lIENBUElfQ09OTkVDVF9CM19BQ1RJVkVfSU5ECUNBUElDTUQoQ0FQSV9DT05ORUNUX0IzX0FDVElWRSxDQVBJX0lORCkKKyNkZWZpbmUgQ0FQSV9DT05ORUNUX0IzX0FDVElWRV9SRVNQCUNBUElDTUQoQ0FQSV9DT05ORUNUX0IzX0FDVElWRSxDQVBJX1JFU1ApCisKKyNkZWZpbmUgQ0FQSV9DT05ORUNUX0IzX1JFUQkJQ0FQSUNNRChDQVBJX0NPTk5FQ1RfQjMsQ0FQSV9SRVEpCisjZGVmaW5lIENBUElfQ09OTkVDVF9CM19DT05GCQlDQVBJQ01EKENBUElfQ09OTkVDVF9CMyxDQVBJX0NPTkYpCisjZGVmaW5lIENBUElfQ09OTkVDVF9CM19JTkQJCUNBUElDTUQoQ0FQSV9DT05ORUNUX0IzLENBUElfSU5EKQorI2RlZmluZSBDQVBJX0NPTk5FQ1RfQjNfUkVTUAkJQ0FQSUNNRChDQVBJX0NPTk5FQ1RfQjMsQ0FQSV9SRVNQKQorCisKKyNkZWZpbmUgQ0FQSV9DT05ORUNUX0IzX1Q5MF9BQ1RJVkVfSU5ECUNBUElDTUQoQ0FQSV9DT05ORUNUX0IzX1Q5MF9BQ1RJVkUsQ0FQSV9JTkQpCisjZGVmaW5lIENBUElfQ09OTkVDVF9CM19UOTBfQUNUSVZFX1JFU1AJQ0FQSUNNRChDQVBJX0NPTk5FQ1RfQjNfVDkwX0FDVElWRSxDQVBJX1JFU1ApCisKKyNkZWZpbmUgQ0FQSV9EQVRBX0IzX1JFUQkJQ0FQSUNNRChDQVBJX0RBVEFfQjMsQ0FQSV9SRVEpCisjZGVmaW5lIENBUElfREFUQV9CM19DT05GCQlDQVBJQ01EKENBUElfREFUQV9CMyxDQVBJX0NPTkYpCisjZGVmaW5lIENBUElfREFUQV9CM19JTkQJCUNBUElDTUQoQ0FQSV9EQVRBX0IzLENBUElfSU5EKQorI2RlZmluZSBDQVBJX0RBVEFfQjNfUkVTUAkJQ0FQSUNNRChDQVBJX0RBVEFfQjMsQ0FQSV9SRVNQKQorCisjZGVmaW5lIENBUElfRElTQ09OTkVDVF9CM19SRVEJCUNBUElDTUQoQ0FQSV9ESVNDT05ORUNUX0IzLENBUElfUkVRKQorI2RlZmluZSBDQVBJX0RJU0NPTk5FQ1RfQjNfQ09ORgkJQ0FQSUNNRChDQVBJX0RJU0NPTk5FQ1RfQjMsQ0FQSV9DT05GKQorI2RlZmluZSBDQVBJX0RJU0NPTk5FQ1RfQjNfSU5ECQlDQVBJQ01EKENBUElfRElTQ09OTkVDVF9CMyxDQVBJX0lORCkKKyNkZWZpbmUgQ0FQSV9ESVNDT05ORUNUX0IzX1JFU1AJCUNBUElDTUQoQ0FQSV9ESVNDT05ORUNUX0IzLENBUElfUkVTUCkKKworI2RlZmluZSBDQVBJX1JFU0VUX0IzX1JFUQkJQ0FQSUNNRChDQVBJX1JFU0VUX0IzLENBUElfUkVRKQorI2RlZmluZSBDQVBJX1JFU0VUX0IzX0NPTkYJCUNBUElDTUQoQ0FQSV9SRVNFVF9CMyxDQVBJX0NPTkYpCisjZGVmaW5lIENBUElfUkVTRVRfQjNfSU5ECQlDQVBJQ01EKENBUElfUkVTRVRfQjMsQ0FQSV9JTkQpCisjZGVmaW5lIENBUElfUkVTRVRfQjNfUkVTUAkJQ0FQSUNNRChDQVBJX1JFU0VUX0IzLENBUElfUkVTUCkKKworI2RlZmluZSBDQVBJX0xJU1RFTl9SRVEJCQlDQVBJQ01EKENBUElfTElTVEVOLENBUElfUkVRKQorI2RlZmluZSBDQVBJX0xJU1RFTl9DT05GCQlDQVBJQ01EKENBUElfTElTVEVOLENBUElfQ09ORikKKworI2RlZmluZSBDQVBJX01BTlVGQUNUVVJFUl9SRVEJCUNBUElDTUQoQ0FQSV9NQU5VRkFDVFVSRVIsQ0FQSV9SRVEpCisjZGVmaW5lIENBUElfTUFOVUZBQ1RVUkVSX0NPTkYJCUNBUElDTUQoQ0FQSV9NQU5VRkFDVFVSRVIsQ0FQSV9DT05GKQorI2RlZmluZSBDQVBJX01BTlVGQUNUVVJFUl9JTkQJCUNBUElDTUQoQ0FQSV9NQU5VRkFDVFVSRVIsQ0FQSV9JTkQpCisjZGVmaW5lIENBUElfTUFOVUZBQ1RVUkVSX1JFU1AJCUNBUElDTUQoQ0FQSV9NQU5VRkFDVFVSRVIsQ0FQSV9SRVNQKQorCisjZGVmaW5lIENBUElfRkFDSUxJVFlfUkVRCQlDQVBJQ01EKENBUElfRkFDSUxJVFksQ0FQSV9SRVEpCisjZGVmaW5lIENBUElfRkFDSUxJVFlfQ09ORgkJQ0FQSUNNRChDQVBJX0ZBQ0lMSVRZLENBUElfQ09ORikKKyNkZWZpbmUgQ0FQSV9GQUNJTElUWV9JTkQJCUNBUElDTUQoQ0FQSV9GQUNJTElUWSxDQVBJX0lORCkKKyNkZWZpbmUgQ0FQSV9GQUNJTElUWV9SRVNQCQlDQVBJQ01EKENBUElfRkFDSUxJVFksQ0FQSV9SRVNQKQorCisjZGVmaW5lIENBUElfSU5GT19SRVEJCQlDQVBJQ01EKENBUElfSU5GTyxDQVBJX1JFUSkKKyNkZWZpbmUgQ0FQSV9JTkZPX0NPTkYJCQlDQVBJQ01EKENBUElfSU5GTyxDQVBJX0NPTkYpCisjZGVmaW5lIENBUElfSU5GT19JTkQJCQlDQVBJQ01EKENBUElfSU5GTyxDQVBJX0lORCkKKyNkZWZpbmUgQ0FQSV9JTkZPX1JFU1AJCQlDQVBJQ01EKENBUElfSU5GTyxDQVBJX1JFU1ApCisKKyNlbmRpZgkJCQkvKiBfX0NBUElDTURfSF9fICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXNkbl9kaXZlcnRpZi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lzZG5fZGl2ZXJ0aWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGZmN2U3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lzZG5fZGl2ZXJ0aWYuaApAQCAtMCwwICsxLDI2IEBACisvKiAkSWQ6IGlzZG5fZGl2ZXJ0aWYuaCx2IDEuNC42LjEgMjAwMS8wOS8yMyAyMjoyNTowNSBrYWkgRXhwICQKKyAqCisgKiBIZWFkZXIgZm9yIHRoZSBkaXZlcnNpb24gc3VwcGxlbWVudGFyeSBpbnRlcmZhY2UgZm9yIGk0bC4KKyAqCisgKiBBdXRob3IgICAgV2VybmVyIENvcm5lbGl1cyAod2VybmVyQHRpdHJvLmRlKQorICogQ29weXJpZ2h0IGJ5IFdlcm5lciBDb3JuZWxpdXMgKHdlcm5lckB0aXRyby5kZSkKKyAqCisgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCisgKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICoKKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIG1hZ2ljIHZhbHVlIGlzIGFsc28gdXNlZCB0byBjb250cm9sIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgRElWRVJUX0lGX01BR0lDIDB4MjU4NzM0MDEKKyNkZWZpbmUgRElWRVJUX0NNRF9SRUcgIDB4MDAgIC8qIHJlZ2lzdGVyIGNvbW1hbmQgKi8KKyNkZWZpbmUgRElWRVJUX0NNRF9SRUwgIDB4MDEgIC8qIHJlbGVhc2UgY29tbWFuZCAqLworI2RlZmluZSBESVZFUlRfTk9fRVJSICAgMHgwMCAgLyogcmV0dXJuIHZhbHVlIG5vIGVycm9yICovCisjZGVmaW5lIERJVkVSVF9DTURfRVJSICAweDAxICAvKiBpbnZhbGlkIGNtZCAqLworI2RlZmluZSBESVZFUlRfVkVSX0VSUiAgMHgwMiAgLyogbWFnaWMvdmVyc2lvbiBpbnZhbGlkICovCisjZGVmaW5lIERJVkVSVF9SRUdfRVJSICAweDAzICAvKiBtb2R1bGUgYWxyZWFkeSByZWdpc3RlcmVkICovCisjZGVmaW5lIERJVkVSVF9SRUxfRVJSICAweDA0ICAvKiBtb2R1bGUgbm90IHJlZ2lzdGVyZWQgKi8KKyNkZWZpbmUgRElWRVJUX1JFR19OQU1FIGlzZG5fcmVnaXN0ZXJfZGl2ZXJ0CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pc2RuX3BwcC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lzZG5fcHBwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFiYjAxNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pc2RuX3BwcC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qIExpbnV4IElTRE4gc3Vic3lzdGVtLCBzeW5jIFBQUCwgaW50ZXJmYWNlIHRvIGlwcHBkCisgKgorICogQ29weXJpZ2h0IDE5OTQtMTk5OSAgYnkgRnJpdHogRWxmZXJ0IChmcml0ekBpc2RuNGxpbnV4LmRlKQorICogQ29weXJpZ2h0IDE5OTUsOTYgICAgVGhpbmtpbmcgT2JqZWN0cyBTb2Z0d2FyZSBHbWJIIFd1ZXJ6YnVyZworICogQ29weXJpZ2h0IDE5OTUsOTYgICAgYnkgTWljaGFlbCBIaXBwIChNaWNoYWVsLkhpcHBAc3R1ZGVudC51bmktdHVlYmluZ2VuLmRlKQorICogQ29weXJpZ2h0IDIwMDAtMjAwMiAgYnkgS2FpIEdlcm1hc2NoZXdza2kgKGthaUBnZXJtYXNjaGV3c2tpLm5hbWUpCisgKgorICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcworICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqCisgKi8KKworI2lmbmRlZiBfTElOVVhfSVNETl9QUFBfSAorI2RlZmluZSBfTElOVVhfSVNETl9QUFBfSAorCisjZGVmaW5lIENBTExUWVBFX0lOQ09NSU5HIDB4MQorI2RlZmluZSBDQUxMVFlQRV9PVVRHT0lORyAweDIKKyNkZWZpbmUgQ0FMTFRZUEVfQ0FMTEJBQ0sgMHg0CisKKyNkZWZpbmUgSVBQUF9WRVJTSU9OICAgICIyLjIuMCIKKworc3RydWN0IHBwcGNhbGxpbmZvCit7CisgIGludCBjYWxsdHlwZTsKKyAgdW5zaWduZWQgY2hhciBsb2NhbF9udW1bNjRdOworICB1bnNpZ25lZCBjaGFyIHJlbW90ZV9udW1bNjRdOworICBpbnQgY2hhcmdlX3VuaXRzOworfTsKKworI2RlZmluZSBQUFBJT0NHQ0FMTElORk8gX0lPV1IoJ3QnLDEyOCxzdHJ1Y3QgcHBwY2FsbGluZm8pCisjZGVmaW5lIFBQUElPQ0JVTkRMRSAgIF9JT1coJ3QnLDEyOSxpbnQpCisjZGVmaW5lIFBQUElPQ0dNUEZMQUdTIF9JT1IoJ3QnLDEzMCxpbnQpCisjZGVmaW5lIFBQUElPQ1NNUEZMQUdTIF9JT1coJ3QnLDEzMSxpbnQpCisjZGVmaW5lIFBQUElPQ1NNUE1UVSAgIF9JT1coJ3QnLDEzMixpbnQpCisjZGVmaW5lIFBQUElPQ1NNUE1SVSAgIF9JT1coJ3QnLDEzMyxpbnQpCisjZGVmaW5lIFBQUElPQ0dDT01QUkVTU09SUyBfSU9SKCd0JywxMzQsdW5zaWduZWQgbG9uZyBbOF0pCisjZGVmaW5lIFBQUElPQ1NDT01QUkVTU09SIF9JT1coJ3QnLDEzNSxpbnQpCisjZGVmaW5lIFBQUElPQ0dJRk5BTUUgICAgICBfSU9SKCd0JywxMzYsIGNoYXIgW0lGTkFNU0laXSApCisKKworI2RlZmluZSBTQ19NUF9QUk9UICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgU0NfUkVKX01QX1BST1QgICAweDAwMDAwNDAwCisjZGVmaW5lIFNDX09VVF9TSE9SVF9TRVEgMHgwMDAwMDgwMAorI2RlZmluZSBTQ19JTl9TSE9SVF9TRVEgIDB4MDAwMDQwMDAKKworI2RlZmluZSBTQ19ERUNPTVBfT04JCTB4MDEKKyNkZWZpbmUgU0NfQ09NUF9PTgkJMHgwMgorI2RlZmluZSBTQ19ERUNPTVBfRElTQ0FSRAkweDA0CisjZGVmaW5lIFNDX0NPTVBfRElTQ0FSRAkJMHgwOAorI2RlZmluZSBTQ19MSU5LX0RFQ09NUF9PTgkweDEwCisjZGVmaW5lIFNDX0xJTktfQ09NUF9PTgkJMHgyMAorI2RlZmluZSBTQ19MSU5LX0RFQ09NUF9ESVNDQVJECTB4NDAKKyNkZWZpbmUgU0NfTElOS19DT01QX0RJU0NBUkQJMHg4MAorCisjZGVmaW5lIElTRE5fUFBQX0NPTVBfTUFYX09QVElPTlMgMTYKKworI2RlZmluZSBJUFBQX0NPTVBfRkxBR19YTUlUIDB4MQorI2RlZmluZSBJUFBQX0NPTVBfRkxBR19MSU5LIDB4MgorCitzdHJ1Y3QgaXNkbl9wcHBfY29tcF9kYXRhIHsKKyAgaW50IG51bTsKKyAgdW5zaWduZWQgY2hhciBvcHRpb25zW0lTRE5fUFBQX0NPTVBfTUFYX09QVElPTlNdOworICBpbnQgb3B0bGVuOworICBpbnQgZmxhZ3M7Cit9OworCisjZW5kaWYgLyogX0xJTlVYX0lTRE5fUFBQX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pc2RuaWYuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pc2RuaWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGIxYjBiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2lzZG5pZi5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qICRJZDogaXNkbmlmLmgsdiAxLjQzLjIuMiAyMDA0LzAxLzEyIDIzOjA4OjM1IGtlaWwgRXhwICQKKyAqCisgKiBMaW51eCBJU0ROIHN1YnN5c3RlbQorICogRGVmaW5pdGlvbiBvZiB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIHN1YnN5c3RlbSBhbmQgaXRzIGxvdy1sZXZlbCBkcml2ZXJzLgorICoKKyAqIENvcHlyaWdodCAxOTk0LDk1LDk2IGJ5IEZyaXR6IEVsZmVydCAoZnJpdHpAaXNkbjRsaW51eC5kZSkKKyAqIENvcHlyaWdodCAxOTk1LDk2ICAgIFRoaW5raW5nIE9iamVjdHMgU29mdHdhcmUgR21iSCBXdWVyemJ1cmcKKyAqIAorICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcworICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0lTRE5JRl9IX18KKyNkZWZpbmUgX19JU0ROSUZfSF9fCisKKworLyoKKyAqIFZhbHVlcyBmb3IgZ2VuZXJhbCBwcm90b2NvbC1zZWxlY3Rpb24KKyAqLworI2RlZmluZSBJU0ROX1BUWVBFX1VOS05PV04gICAwICAgLyogUHJvdG9jb2wgdW5kZWZpbmVkICAgKi8KKyNkZWZpbmUgSVNETl9QVFlQRV8xVFI2ICAgICAgMSAgIC8qIGdlcm1hbiAxVFI2LXByb3RvY29sICovCisjZGVmaW5lIElTRE5fUFRZUEVfRVVSTyAgICAgIDIgICAvKiBFRFNTMS1wcm90b2NvbCAgICAgICAqLworI2RlZmluZSBJU0ROX1BUWVBFX0xFQVNFRCAgICAzICAgLyogZm9yIGxlYXNlZCBsaW5lcyAgICAgKi8KKyNkZWZpbmUgSVNETl9QVFlQRV9OSTEgICAgICAgNCAgIC8qIFVTIE5JLTEgcHJvdG9jb2wgICAgICovCisjZGVmaW5lIElTRE5fUFRZUEVfTUFYICAgICAgIDcgICAvKiBNYXguIDggUHJvdG9jb2xzICAgICAqLworCisvKgorICogVmFsdWVzIGZvciBMYXllci0yLXByb3RvY29sLXNlbGVjdGlvbgorICovCisjZGVmaW5lIElTRE5fUFJPVE9fTDJfWDc1SSAgIDAgICAvKiBYNzUvTEFQQiB3aXRoIEktRnJhbWVzICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVNETl9QUk9UT19MMl9YNzVVSSAgMSAgIC8qIFg3NS9MQVBCIHdpdGggVUktRnJhbWVzICAgICAgICAgICAqLworI2RlZmluZSBJU0ROX1BST1RPX0wyX1g3NUJVSSAyICAgLyogWDc1L0xBUEIgd2l0aCBVSS1GcmFtZXMgICAgICAgICAgICovCisjZGVmaW5lIElTRE5fUFJPVE9fTDJfSERMQyAgIDMgICAvKiBIRExDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVNETl9QUk9UT19MMl9UUkFOUyAgNCAgIC8qIFRyYW5zcGFyZW50IChWb2ljZSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBJU0ROX1BST1RPX0wyX1gyNURURSA1ICAgLyogWDI1L0xBUEIgRFRFIG1vZGUgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIElTRE5fUFJPVE9fTDJfWDI1RENFIDYgICAvKiBYMjUvTEFQQiBEQ0UgbW9kZSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVNETl9QUk9UT19MMl9WMTEwOTYgNyAgIC8qIFYuMTEwIGJpdHJhdGUgYWRhcHRpb24gOTYwMCBCYXVkICAqLworI2RlZmluZSBJU0ROX1BST1RPX0wyX1YxMTAxOSA4ICAgLyogVi4xMTAgYml0cmF0ZSBhZGFwdGlvbiAxOTIwMCBCYXVkICovCisjZGVmaW5lIElTRE5fUFJPVE9fTDJfVjExMDM4IDkgICAvKiBWLjExMCBiaXRyYXRlIGFkYXB0aW9uIDM4NDAwIEJhdWQgKi8KKyNkZWZpbmUgSVNETl9QUk9UT19MMl9NT0RFTSAgMTAgIC8qIEFuYWxvZyBNb2RlbSBvbiBCb2FyZCAqLworI2RlZmluZSBJU0ROX1BST1RPX0wyX0ZBWCAgICAxMSAgLyogRmF4IEdyb3VwIDIvMyAgICAgICAgICovCisjZGVmaW5lIElTRE5fUFJPVE9fTDJfSERMQ181NksgMTIgICAvKiBIRExDIDU2ayAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVNETl9QUk9UT19MMl9NQVggICAgMTUgIC8qIE1heC4gMTYgUHJvdG9jb2xzICAgICAgICAgICAgICAgICAqLworCisvKgorICogVmFsdWVzIGZvciBMYXllci0zLXByb3RvY29sLXNlbGVjdGlvbgorICovCisjZGVmaW5lIElTRE5fUFJPVE9fTDNfVFJBTlMJMAkvKiBUcmFuc3BhcmVudCAqLworI2RlZmluZSBJU0ROX1BST1RPX0wzX1RSQU5TRFNQCTEJLyogVHJhbnNwYXJlbnQgd2l0aCBEU1AgKi8KKyNkZWZpbmUgSVNETl9QUk9UT19MM19GQ0xBU1MyCTIJLyogRmF4IEdyb3VwIDIvMyBDTEFTUyAyICovCisjZGVmaW5lIElTRE5fUFJPVE9fTDNfRkNMQVNTMQkzCS8qIEZheCBHcm91cCAyLzMgQ0xBU1MgMSAqLworI2RlZmluZSBJU0ROX1BST1RPX0wzX01BWAk3CS8qIE1heC4gOCBQcm90b2NvbHMgKi8KKworCisjZW5kaWYgLyogX19JU0ROSUZfSF9fICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXNvX2ZzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXNvX2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY4OGFjNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pc29fZnMuaApAQCAtMCwwICsxLDE2NSBAQAorI2lmbmRlZiBfSVNPRlNfRlNfSAorI2RlZmluZSBfSVNPRlNfRlNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgorCisvKgorICogVGhlIGlzb2ZzIGZpbGVzeXN0ZW0gY29uc3RhbnRzL3N0cnVjdHVyZXMKKyAqLworCisvKiBUaGlzIHBhcnQgYm9ycm93ZWQgZnJvbSB0aGUgYnNkMzg2IGlzb2ZzICovCisjZGVmaW5lIElTT0RDTChmcm9tLCB0bykgKHRvIC0gZnJvbSArIDEpCisKK3N0cnVjdCBpc29fdm9sdW1lX2Rlc2NyaXB0b3IgeworCWNoYXIgdHlwZVtJU09EQ0woMSwxKV07IC8qIDcxMSAqLworCWNoYXIgaWRbSVNPRENMKDIsNildOworCWNoYXIgdmVyc2lvbltJU09EQ0woNyw3KV07CisJY2hhciBkYXRhW0lTT0RDTCg4LDIwNDgpXTsKK307CisKKy8qIHZvbHVtZSBkZXNjcmlwdG9yIHR5cGVzICovCisjZGVmaW5lIElTT19WRF9QUklNQVJZIDEKKyNkZWZpbmUgSVNPX1ZEX1NVUFBMRU1FTlRBUlkgMgorI2RlZmluZSBJU09fVkRfRU5EIDI1NQorCisjZGVmaW5lIElTT19TVEFOREFSRF9JRCAiQ0QwMDEiCisKK3N0cnVjdCBpc29fcHJpbWFyeV9kZXNjcmlwdG9yIHsKKwljaGFyIHR5cGUJCQlbSVNPRENMICggIDEsICAgMSldOyAvKiA3MTEgKi8KKwljaGFyIGlkCQkJCVtJU09EQ0wgKCAgMiwgICA2KV07CisJY2hhciB2ZXJzaW9uCQkJW0lTT0RDTCAoICA3LCAgIDcpXTsgLyogNzExICovCisJY2hhciB1bnVzZWQxCQkJW0lTT0RDTCAoICA4LCAgIDgpXTsKKwljaGFyIHN5c3RlbV9pZAkJCVtJU09EQ0wgKCAgOSwgIDQwKV07IC8qIGFjaGFycyAqLworCWNoYXIgdm9sdW1lX2lkCQkJW0lTT0RDTCAoIDQxLCAgNzIpXTsgLyogZGNoYXJzICovCisJY2hhciB1bnVzZWQyCQkJW0lTT0RDTCAoIDczLCAgODApXTsKKwljaGFyIHZvbHVtZV9zcGFjZV9zaXplCQlbSVNPRENMICggODEsICA4OCldOyAvKiA3MzMgKi8KKwljaGFyIHVudXNlZDMJCQlbSVNPRENMICggODksIDEyMCldOworCWNoYXIgdm9sdW1lX3NldF9zaXplCQlbSVNPRENMICgxMjEsIDEyNCldOyAvKiA3MjMgKi8KKwljaGFyIHZvbHVtZV9zZXF1ZW5jZV9udW1iZXIJW0lTT0RDTCAoMTI1LCAxMjgpXTsgLyogNzIzICovCisJY2hhciBsb2dpY2FsX2Jsb2NrX3NpemUJCVtJU09EQ0wgKDEyOSwgMTMyKV07IC8qIDcyMyAqLworCWNoYXIgcGF0aF90YWJsZV9zaXplCQlbSVNPRENMICgxMzMsIDE0MCldOyAvKiA3MzMgKi8KKwljaGFyIHR5cGVfbF9wYXRoX3RhYmxlCQlbSVNPRENMICgxNDEsIDE0NCldOyAvKiA3MzEgKi8KKwljaGFyIG9wdF90eXBlX2xfcGF0aF90YWJsZQlbSVNPRENMICgxNDUsIDE0OCldOyAvKiA3MzEgKi8KKwljaGFyIHR5cGVfbV9wYXRoX3RhYmxlCQlbSVNPRENMICgxNDksIDE1MildOyAvKiA3MzIgKi8KKwljaGFyIG9wdF90eXBlX21fcGF0aF90YWJsZQlbSVNPRENMICgxNTMsIDE1NildOyAvKiA3MzIgKi8KKwljaGFyIHJvb3RfZGlyZWN0b3J5X3JlY29yZAlbSVNPRENMICgxNTcsIDE5MCldOyAvKiA5LjEgKi8KKwljaGFyIHZvbHVtZV9zZXRfaWQJCVtJU09EQ0wgKDE5MSwgMzE4KV07IC8qIGRjaGFycyAqLworCWNoYXIgcHVibGlzaGVyX2lkCQlbSVNPRENMICgzMTksIDQ0NildOyAvKiBhY2hhcnMgKi8KKwljaGFyIHByZXBhcmVyX2lkCQlbSVNPRENMICg0NDcsIDU3NCldOyAvKiBhY2hhcnMgKi8KKwljaGFyIGFwcGxpY2F0aW9uX2lkCQlbSVNPRENMICg1NzUsIDcwMildOyAvKiBhY2hhcnMgKi8KKwljaGFyIGNvcHlyaWdodF9maWxlX2lkCQlbSVNPRENMICg3MDMsIDczOSldOyAvKiA3LjUgZGNoYXJzICovCisJY2hhciBhYnN0cmFjdF9maWxlX2lkCQlbSVNPRENMICg3NDAsIDc3NildOyAvKiA3LjUgZGNoYXJzICovCisJY2hhciBiaWJsaW9ncmFwaGljX2ZpbGVfaWQJW0lTT0RDTCAoNzc3LCA4MTMpXTsgLyogNy41IGRjaGFycyAqLworCWNoYXIgY3JlYXRpb25fZGF0ZQkJW0lTT0RDTCAoODE0LCA4MzApXTsgLyogOC40LjI2LjEgKi8KKwljaGFyIG1vZGlmaWNhdGlvbl9kYXRlCQlbSVNPRENMICg4MzEsIDg0NyldOyAvKiA4LjQuMjYuMSAqLworCWNoYXIgZXhwaXJhdGlvbl9kYXRlCQlbSVNPRENMICg4NDgsIDg2NCldOyAvKiA4LjQuMjYuMSAqLworCWNoYXIgZWZmZWN0aXZlX2RhdGUJCVtJU09EQ0wgKDg2NSwgODgxKV07IC8qIDguNC4yNi4xICovCisJY2hhciBmaWxlX3N0cnVjdHVyZV92ZXJzaW9uCVtJU09EQ0wgKDg4MiwgODgyKV07IC8qIDcxMSAqLworCWNoYXIgdW51c2VkNAkJCVtJU09EQ0wgKDg4MywgODgzKV07CisJY2hhciBhcHBsaWNhdGlvbl9kYXRhCQlbSVNPRENMICg4ODQsIDEzOTUpXTsKKwljaGFyIHVudXNlZDUJCQlbSVNPRENMICgxMzk2LCAyMDQ4KV07Cit9OworCisvKiBBbG1vc3QgdGhlIHNhbWUgYXMgdGhlIHByaW1hcnkgZGVzY3JpcHRvciBidXQgdHdvIGZpZWxkcyBhcmUgc3BlY2lmaWVkICovCitzdHJ1Y3QgaXNvX3N1cHBsZW1lbnRhcnlfZGVzY3JpcHRvciB7CisJY2hhciB0eXBlCQkJW0lTT0RDTCAoICAxLCAgIDEpXTsgLyogNzExICovCisJY2hhciBpZAkJCQlbSVNPRENMICggIDIsICAgNildOworCWNoYXIgdmVyc2lvbgkJCVtJU09EQ0wgKCAgNywgICA3KV07IC8qIDcxMSAqLworCWNoYXIgZmxhZ3MJCQlbSVNPRENMICggIDgsICAgOCldOyAvKiA4NTMgKi8KKwljaGFyIHN5c3RlbV9pZAkJCVtJU09EQ0wgKCAgOSwgIDQwKV07IC8qIGFjaGFycyAqLworCWNoYXIgdm9sdW1lX2lkCQkJW0lTT0RDTCAoIDQxLCAgNzIpXTsgLyogZGNoYXJzICovCisJY2hhciB1bnVzZWQyCQkJW0lTT0RDTCAoIDczLCAgODApXTsKKwljaGFyIHZvbHVtZV9zcGFjZV9zaXplCQlbSVNPRENMICggODEsICA4OCldOyAvKiA3MzMgKi8KKwljaGFyIGVzY2FwZQkJCVtJU09EQ0wgKCA4OSwgMTIwKV07IC8qIDg1NiAqLworCWNoYXIgdm9sdW1lX3NldF9zaXplCQlbSVNPRENMICgxMjEsIDEyNCldOyAvKiA3MjMgKi8KKwljaGFyIHZvbHVtZV9zZXF1ZW5jZV9udW1iZXIJW0lTT0RDTCAoMTI1LCAxMjgpXTsgLyogNzIzICovCisJY2hhciBsb2dpY2FsX2Jsb2NrX3NpemUJCVtJU09EQ0wgKDEyOSwgMTMyKV07IC8qIDcyMyAqLworCWNoYXIgcGF0aF90YWJsZV9zaXplCQlbSVNPRENMICgxMzMsIDE0MCldOyAvKiA3MzMgKi8KKwljaGFyIHR5cGVfbF9wYXRoX3RhYmxlCQlbSVNPRENMICgxNDEsIDE0NCldOyAvKiA3MzEgKi8KKwljaGFyIG9wdF90eXBlX2xfcGF0aF90YWJsZQlbSVNPRENMICgxNDUsIDE0OCldOyAvKiA3MzEgKi8KKwljaGFyIHR5cGVfbV9wYXRoX3RhYmxlCQlbSVNPRENMICgxNDksIDE1MildOyAvKiA3MzIgKi8KKwljaGFyIG9wdF90eXBlX21fcGF0aF90YWJsZQlbSVNPRENMICgxNTMsIDE1NildOyAvKiA3MzIgKi8KKwljaGFyIHJvb3RfZGlyZWN0b3J5X3JlY29yZAlbSVNPRENMICgxNTcsIDE5MCldOyAvKiA5LjEgKi8KKwljaGFyIHZvbHVtZV9zZXRfaWQJCVtJU09EQ0wgKDE5MSwgMzE4KV07IC8qIGRjaGFycyAqLworCWNoYXIgcHVibGlzaGVyX2lkCQlbSVNPRENMICgzMTksIDQ0NildOyAvKiBhY2hhcnMgKi8KKwljaGFyIHByZXBhcmVyX2lkCQlbSVNPRENMICg0NDcsIDU3NCldOyAvKiBhY2hhcnMgKi8KKwljaGFyIGFwcGxpY2F0aW9uX2lkCQlbSVNPRENMICg1NzUsIDcwMildOyAvKiBhY2hhcnMgKi8KKwljaGFyIGNvcHlyaWdodF9maWxlX2lkCQlbSVNPRENMICg3MDMsIDczOSldOyAvKiA3LjUgZGNoYXJzICovCisJY2hhciBhYnN0cmFjdF9maWxlX2lkCQlbSVNPRENMICg3NDAsIDc3NildOyAvKiA3LjUgZGNoYXJzICovCisJY2hhciBiaWJsaW9ncmFwaGljX2ZpbGVfaWQJW0lTT0RDTCAoNzc3LCA4MTMpXTsgLyogNy41IGRjaGFycyAqLworCWNoYXIgY3JlYXRpb25fZGF0ZQkJW0lTT0RDTCAoODE0LCA4MzApXTsgLyogOC40LjI2LjEgKi8KKwljaGFyIG1vZGlmaWNhdGlvbl9kYXRlCQlbSVNPRENMICg4MzEsIDg0NyldOyAvKiA4LjQuMjYuMSAqLworCWNoYXIgZXhwaXJhdGlvbl9kYXRlCQlbSVNPRENMICg4NDgsIDg2NCldOyAvKiA4LjQuMjYuMSAqLworCWNoYXIgZWZmZWN0aXZlX2RhdGUJCVtJU09EQ0wgKDg2NSwgODgxKV07IC8qIDguNC4yNi4xICovCisJY2hhciBmaWxlX3N0cnVjdHVyZV92ZXJzaW9uCVtJU09EQ0wgKDg4MiwgODgyKV07IC8qIDcxMSAqLworCWNoYXIgdW51c2VkNAkJCVtJU09EQ0wgKDg4MywgODgzKV07CisJY2hhciBhcHBsaWNhdGlvbl9kYXRhCQlbSVNPRENMICg4ODQsIDEzOTUpXTsKKwljaGFyIHVudXNlZDUJCQlbSVNPRENMICgxMzk2LCAyMDQ4KV07Cit9OworCisKKyNkZWZpbmUgSFNfU1RBTkRBUkRfSUQgIkNEUk9NIgorCitzdHJ1Y3QgIGhzX3ZvbHVtZV9kZXNjcmlwdG9yIHsKKwljaGFyIGZvbwkJCVtJU09EQ0wgKCAgMSwgICA4KV07IC8qIDczMyAqLworCWNoYXIgdHlwZQkJCVtJU09EQ0wgKCAgOSwgICA5KV07IC8qIDcxMSAqLworCWNoYXIgaWQJCQkJW0lTT0RDTCAoIDEwLCAgMTQpXTsKKwljaGFyIHZlcnNpb24JCQlbSVNPRENMICggMTUsICAxNSldOyAvKiA3MTEgKi8KKwljaGFyIGRhdGFbSVNPRENMKDE2LDIwNDgpXTsKK307CisKKworc3RydWN0IGhzX3ByaW1hcnlfZGVzY3JpcHRvciB7CisJY2hhciBmb28JCQlbSVNPRENMICggIDEsICAgOCldOyAvKiA3MzMgKi8KKwljaGFyIHR5cGUJCQlbSVNPRENMICggIDksICAgOSldOyAvKiA3MTEgKi8KKwljaGFyIGlkCQkJCVtJU09EQ0wgKCAxMCwgIDE0KV07CisJY2hhciB2ZXJzaW9uCQkJW0lTT0RDTCAoIDE1LCAgMTUpXTsgLyogNzExICovCisJY2hhciB1bnVzZWQxCQkJW0lTT0RDTCAoIDE2LCAgMTYpXTsgLyogNzExICovCisJY2hhciBzeXN0ZW1faWQJCQlbSVNPRENMICggMTcsICA0OCldOyAvKiBhY2hhcnMgKi8KKwljaGFyIHZvbHVtZV9pZAkJCVtJU09EQ0wgKCA0OSwgIDgwKV07IC8qIGRjaGFycyAqLworCWNoYXIgdW51c2VkMgkJCVtJU09EQ0wgKCA4MSwgIDg4KV07IC8qIDczMyAqLworCWNoYXIgdm9sdW1lX3NwYWNlX3NpemUJCVtJU09EQ0wgKCA4OSwgIDk2KV07IC8qIDczMyAqLworCWNoYXIgdW51c2VkMwkJCVtJU09EQ0wgKCA5NywgMTI4KV07IC8qIDczMyAqLworCWNoYXIgdm9sdW1lX3NldF9zaXplCQlbSVNPRENMICgxMjksIDEzMildOyAvKiA3MjMgKi8KKwljaGFyIHZvbHVtZV9zZXF1ZW5jZV9udW1iZXIJW0lTT0RDTCAoMTMzLCAxMzYpXTsgLyogNzIzICovCisJY2hhciBsb2dpY2FsX2Jsb2NrX3NpemUJCVtJU09EQ0wgKDEzNywgMTQwKV07IC8qIDcyMyAqLworCWNoYXIgcGF0aF90YWJsZV9zaXplCQlbSVNPRENMICgxNDEsIDE0OCldOyAvKiA3MzMgKi8KKwljaGFyIHR5cGVfbF9wYXRoX3RhYmxlCQlbSVNPRENMICgxNDksIDE1MildOyAvKiA3MzEgKi8KKwljaGFyIHVudXNlZDQJCQlbSVNPRENMICgxNTMsIDE4MCldOyAvKiA3MzMgKi8KKwljaGFyIHJvb3RfZGlyZWN0b3J5X3JlY29yZAlbSVNPRENMICgxODEsIDIxNCldOyAvKiA5LjEgKi8KK307CisKKy8qIFdlIHVzZSB0aGlzIHRvIGhlbHAgdXMgbG9vayB1cCB0aGUgcGFyZW50IGlub2RlIG51bWJlcnMuICovCisKK3N0cnVjdCBpc29fcGF0aF90YWJsZXsKKwl1bnNpZ25lZCBjaGFyICBuYW1lX2xlblsyXTsJLyogNzIxICovCisJY2hhciBleHRlbnRbNF07CQkvKiA3MzEgKi8KKwljaGFyICBwYXJlbnRbMl07CS8qIDcyMSAqLworCWNoYXIgbmFtZVswXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIGhpZ2ggc2llcnJhIGlzIGlkZW50aWNhbCB0byBpc28sIGV4Y2VwdCB0aGF0IHRoZSBkYXRlIGlzIG9ubHkgNiBieXRlcywgYW5kCisgICB0aGVyZSBpcyBhbiBleHRyYSByZXNlcnZlZCBieXRlIGFmdGVyIHRoZSBmbGFncyAqLworCitzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgeworCWNoYXIgbGVuZ3RoCQkJW0lTT0RDTCAoMSwgMSldOyAvKiA3MTEgKi8KKwljaGFyIGV4dF9hdHRyX2xlbmd0aAkJW0lTT0RDTCAoMiwgMildOyAvKiA3MTEgKi8KKwljaGFyIGV4dGVudAkJCVtJU09EQ0wgKDMsIDEwKV07IC8qIDczMyAqLworCWNoYXIgc2l6ZQkJCVtJU09EQ0wgKDExLCAxOCldOyAvKiA3MzMgKi8KKwljaGFyIGRhdGUJCQlbSVNPRENMICgxOSwgMjUpXTsgLyogNyBieSA3MTEgKi8KKwljaGFyIGZsYWdzCQkJW0lTT0RDTCAoMjYsIDI2KV07CisJY2hhciBmaWxlX3VuaXRfc2l6ZQkJW0lTT0RDTCAoMjcsIDI3KV07IC8qIDcxMSAqLworCWNoYXIgaW50ZXJsZWF2ZQkJCVtJU09EQ0wgKDI4LCAyOCldOyAvKiA3MTEgKi8KKwljaGFyIHZvbHVtZV9zZXF1ZW5jZV9udW1iZXIJW0lTT0RDTCAoMjksIDMyKV07IC8qIDcyMyAqLworCXVuc2lnbmVkIGNoYXIgbmFtZV9sZW4JCVtJU09EQ0wgKDMzLCAzMyldOyAvKiA3MTEgKi8KKwljaGFyIG5hbWUJCQlbMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIElTT0ZTX0JMT0NLX0JJVFMgMTEKKyNkZWZpbmUgSVNPRlNfQkxPQ0tfU0laRSAyMDQ4CisKKyNkZWZpbmUgSVNPRlNfQlVGRkVSX1NJWkUoSU5PREUpICgoSU5PREUpLT5pX3NiLT5zX2Jsb2Nrc2l6ZSkKKyNkZWZpbmUgSVNPRlNfQlVGRkVSX0JJVFMoSU5PREUpICgoSU5PREUpLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKQorCisjZW5kaWYgLyogX0lTT0ZTX0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9pdnR2LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXZ0di5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmM2NlODUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXZ0di5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgICAgUHVibGljIGl2dHYgQVBJIGhlYWRlcgorICAgIENvcHlyaWdodCAoQykgMjAwMy0yMDA0ICBLZXZpbiBUaGF5ZXIgPG51ZmFuX3dmayBhdCB5YWhvby5jb20+CisgICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgIEhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYgX19MSU5VWF9JVlRWX0hfXworI2RlZmluZSBfX0xJTlVYX0lWVFZfSF9fCisKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisKKy8qIGl2dHYga25vd3Mgc2V2ZXJhbCBkaXN0aW5jdCBvdXRwdXQgbW9kZXM6IE1QRUcgc3RyZWFtaW5nLAorICAgWVVWIHN0cmVhbWluZywgWVVWIHVwZGF0ZXMgdGhyb3VnaCB1c2VyIERNQSBhbmQgdGhlIHBhc3N0aHJvdWdoCisgICBtb2RlLgorCisgICBJbiBvcmRlciB0byBjbGVhcmx5IHRlbGwgdGhlIGRyaXZlciB0aGF0IHdlIGFyZSBpbiB1c2VyIERNQQorICAgWVVWIG1vZGUgeW91IG5lZWQgdG8gY2FsbCBJVlRWX0lPQ19ETUFfRlJBTUUgd2l0aCB5X3NvdXJjZSA9PSBOVUxMCisgICBmaXJzdCAoYWx0aHJvdWdoIGlmIHlvdSBkb24ndCB0aGVuIHRoZSBmaXJzdCB0aW1lCisgICBETUFfRlJBTUUgaXMgY2FsbGVkIHRoZSBtb2RlIHN3aXRjaCBpcyBkb25lIGF1dG9tYXRpY2FsbHkpLgorCisgICBXaGVuIHlvdSBjbG9zZSB0aGUgZmlsZSBoYW5kbGUgdGhlIHVzZXIgRE1BIG1vZGUgaXMgZXhpdGVkIGFnYWluLgorCisgICBXaGlsZSBpbiBvbmUgbW9kZSwgeW91IGNhbm5vdCB1c2UgYW5vdGhlciBtb2RlIChFQlVTWSBpcyByZXR1cm5lZCkuCisKKyAgIEFsbCB0aGlzIG1lYW5zIHRoYXQgaWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBZVVYgaW50ZXJsYWNpbmcKKyAgIGZvciB0aGUgdXNlciBETUEgWVVWIG1vZGUgeW91IGZpcnN0IG5lZWQgdG8gZG8gY2FsbCBJVlRWX0lPQ19ETUFfRlJBTUUKKyAgIHdpdGggeV9zb3VyY2UgPT0gTlVMTCBiZWZvcmUgeW91IGNhbiBzZXQgdGhlIGNvcnJlY3QgZm9ybWF0IHVzaW5nCisgICBWSURJT0NfU19GTVQuCisKKyAgIEV2ZW50dWFsbHkgYWxsIHRoaXMgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggYSBwcm9wZXIgVjRMMiBBUEksCisgICBidXQgZm9yIG5vdyB3ZSBoYXZlIHRvIGRvIGl0IHRoaXMgd2F5LiAqLworCitzdHJ1Y3QgaXZ0dl9kbWFfZnJhbWUgeworCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlOyAvKiBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAqLworCV9fdTMyIHBpeGVsZm9ybWF0OwkgLyogMCA9PSBzYW1lIGFzIGRlc3RpbmF0aW9uICovCisJdm9pZCAqeV9zb3VyY2U7ICAgLyogaWYgTlVMTCBhbmQgdHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCwKKwkJCQkgICAgdGhlbiBqdXN0IHN3aXRjaCB0byB1c2VyIERNQSBZVVYgb3V0cHV0IG1vZGUgKi8KKwl2b2lkICp1dl9zb3VyY2U7ICAvKiBVbnVzZWQgZm9yIFJHQiBwaXhlbGZvcm1hdHMgKi8KKwlzdHJ1Y3QgdjRsMl9yZWN0IHNyYzsKKwlzdHJ1Y3QgdjRsMl9yZWN0IGRzdDsKKwlfX3UzMiBzcmNfd2lkdGg7CisJX191MzIgc3JjX2hlaWdodDsKK307CisKKyNkZWZpbmUgSVZUVl9JT0NfRE1BX0ZSQU1FICBfSU9XICgnVicsIEJBU0VfVklESU9DX1BSSVZBVEUrMCwgc3RydWN0IGl2dHZfZG1hX2ZyYW1lKQorCisvKiBEZXByZWNhdGVkIGRlZmluZXM6IGFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHRoZSBkZWZpbmVzIGZyb20gdmlkZW9kZXYyLmggKi8KKyNkZWZpbmUgSVZUVl9TTElDRURfVFlQRV9URUxFVEVYVF9CICAgICBWNEwyX01QRUdfVkJJX0lWVFZfVEVMRVRFWFRfQgorI2RlZmluZSBJVlRWX1NMSUNFRF9UWVBFX0NBUFRJT05fNTI1ICAgIFY0TDJfTVBFR19WQklfSVZUVl9DQVBUSU9OXzUyNQorI2RlZmluZSBJVlRWX1NMSUNFRF9UWVBFX1dTU182MjUgICAgICAgIFY0TDJfTVBFR19WQklfSVZUVl9XU1NfNjI1CisjZGVmaW5lIElWVFZfU0xJQ0VEX1RZUEVfVlBTICAgICAgICAgICAgVjRMMl9NUEVHX1ZCSV9JVlRWX1ZQUworCisjZW5kaWYgLyogX0xJTlVYX0lWVFZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2l2dHZmYi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2l2dHZmYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZWFmNGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXZ0dmZiLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAgICBPbiBTY3JlZW4gRGlzcGxheSBjeDIzNDE1IEZyYW1lYnVmZmVyIGRyaXZlcgorCisgICAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3ICBJYW4gQXJtc3Ryb25nIDxpYW5AaWFybXN0LmRlbW9uLmNvLnVrPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYgX19MSU5VWF9JVlRWRkJfSF9fCisjZGVmaW5lIF9fTElOVVhfSVZUVkZCX0hfXworCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBGcmFtZWJ1ZmZlciBleHRlcm5hbCBBUEkgKi8KKworc3RydWN0IGl2dHZmYl9kbWFfZnJhbWUgeworCXZvaWQgKnNvdXJjZTsKKwl1bnNpZ25lZCBsb25nIGRlc3Rfb2Zmc2V0OworCWludCBjb3VudDsKK307CisKKyNkZWZpbmUgSVZUVkZCX0lPQ19ETUFfRlJBTUUgCV9JT1coJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFKzAsIHN0cnVjdCBpdnR2ZmJfZG1hX2ZyYW1lKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9peGp1c2VyLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXhqdXNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkODUyNWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvaXhqdXNlci5oCkBAIC0wLDAgKzEsNzIwIEBACisjaWZuZGVmIF9fTElOVVhfSVhKVVNFUl9ICisjZGVmaW5lIF9fTElOVVhfSVhKVVNFUl9ICisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgICBpeGp1c2VyLmgKKyAqCisgKiBEZXZpY2UgRHJpdmVyIGZvciBRdWlja25ldCBUZWNobm9sb2dpZXMsIEluYy4ncyBUZWxlcGhvbnkgY2FyZHMKKyAqIGluY2x1ZGluZyB0aGUgSW50ZXJuZXQgUGhvbmVKQUNLLCBJbnRlcm5ldCBQaG9uZUpBQ0sgTGl0ZSwKKyAqIEludGVybmV0IFBob25lSkFDSyBQQ0ksIEludGVybmV0IExpbmVKQUNLLCBJbnRlcm5ldCBQaG9uZUNBUkQgYW5kCisgKiBTbWFydENBQkxFCisgKgorICogICAgKGMpIENvcHlyaWdodCAxOTk5LTIwMDEgIFF1aWNrbmV0IFRlY2hub2xvZ2llcywgSW5jLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogQXV0aG9yOiAgICAgICAgICBFZCBPa2Vyc29uLCA8ZW9rZXJzb25AcXVpY2tuZXQubmV0PgorICogICAgCisgKiBDb250cmlidXRvcnM6ICAgIEdyZWcgSGVybGVpbiwgPGdoZXJsZWluQHF1aWNrbmV0Lm5ldD4KKyAqICAgICAgICAgICAgICAgICAgRGF2aWQgVy4gRXJoYXJ0LCA8ZGVyaGFydEBxdWlja25ldC5uZXQ+CisgKiAgICAgICAgICAgICAgICAgIEpvaG4gU2VsbGVycywgPGpzZWxsZXJzQHF1aWNrbmV0Lm5ldD4KKyAqICAgICAgICAgICAgICAgICAgTWlrZSBQcmVzdG9uLCA8bXByZXN0b25AcXVpY2tuZXQubmV0PgorICoKKyAqIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhhcmR3YXJlIHJlbGF0ZWQgdG8gdGhpcyBkcml2ZXIgY2FuIGJlIGZvdW5kCisgKiBhdCBvdXIgd2Vic2l0ZTogICAgaHR0cDovL3d3dy5xdWlja25ldC5uZXQKKyAqCisgKiBGaXhlczoKKyAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBRVUlDS05FVCBURUNITk9MT0dJRVMsIElOQy4gQkUgTElBQkxFIFRPIEFOWSBQQVJUWSBGT1IKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTiwgRVZFTiBJRiBRVUlDS05FVAorICogVEVDSE5PTE9HSUVTLCBJTkMuSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogUVVJQ0tORVQgVEVDSE5PTE9HSUVTLCBJTkMuIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKKyAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBTT0ZUV0FSRSBQUk9WSURFRCBIRVJFVU5ERVIgSVMKKyAqIE9OIEFOICJBUyBJUyIgQkFTSVMsIEFORCBRVUlDS05FVCBURUNITk9MT0dJRVMsIElOQy4gSEFTIE5PIE9CTElHQVRJT04gCisgKiBUTyBQUk9WSURFIE1BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvdGVsZXBob255Lmg+CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBJT0NUTCdzIHVzZWQgZm9yIHRoZSBRdWlja25ldCBUZWxlcGhvbnkgQ2FyZHMKKyoKKyogSWYgeW91IHVzZSB0aGUgSVhKQ1RMX1RFU1RSQU0gY29tbWFuZCwgdGhlIGNhcmQgbXVzdCBiZSBwb3dlciBjeWNsZWQgdG8KKyogcmVzZXQgdGhlIFNSQU0gdmFsdWVzIGJlZm9yZSBmdXRoZXIgdXNlLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIElYSkNUTF9EU1BfUkVTRVQgCQlfSU8gICgncScsIDB4QzApCisKKyNkZWZpbmUgSVhKQ1RMX1JJTkcgICAgICAgICAgICAgICAgICAgICBQSE9ORV9SSU5HCisjZGVmaW5lIElYSkNUTF9IT09LU1RBVEUgICAgICAgICAgICAgICAgUEhPTkVfSE9PS1NUQVRFCisjZGVmaW5lIElYSkNUTF9NQVhSSU5HUwkJCVBIT05FX01BWFJJTkdTCisjZGVmaW5lIElYSkNUTF9SSU5HX0NBREVOQ0UJCVBIT05FX1JJTkdfQ0FERU5DRQorI2RlZmluZSBJWEpDVExfUklOR19TVEFSVAkJUEhPTkVfUklOR19TVEFSVAorI2RlZmluZSBJWEpDVExfUklOR19TVE9QCQlQSE9ORV9SSU5HX1NUT1AKKworI2RlZmluZSBJWEpDVExfQ0FSRFRZUEUJCQlfSU9SICgncScsIDB4QzEsIGludCkKKyNkZWZpbmUgSVhKQ1RMX1NFUklBTAkJCV9JT1IgKCdxJywgMHhDMiwgaW50KQorI2RlZmluZSBJWEpDVExfRFNQX1RZUEUgICAgICAgICAgICAgICAgIF9JT1IgKCdxJywgMHhDMywgaW50KQorI2RlZmluZSBJWEpDVExfRFNQX1ZFUlNJT04gICAgICAgICAgICAgIF9JT1IgKCdxJywgMHhDNCwgaW50KQorI2RlZmluZSBJWEpDVExfVkVSU0lPTiAgICAgICAgICAgICAgCV9JT1IgKCdxJywgMHhEQSwgY2hhciAqKQorI2RlZmluZSBJWEpDVExfRFNQX0lETEUJCQlfSU8gICgncScsIDB4QzUpCisjZGVmaW5lIElYSkNUTF9URVNUUkFNCQkJX0lPICAoJ3EnLCAweEM2KQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIFRoaXMgZ3JvdXAgb2YgSU9DVExzIGRlYWwgd2l0aCB0aGUgcmVjb3JkIHNldHRpbmdzIG9mIHRoZSBEU1AKKyoKKyogVGhlIElYSkNUTF9SRUNfREVQVEggY29tbWFuZCBzZXRzIHRoZSBpbnRlcm5hbCBidWZmZXIgZGVwdGggb2YgdGhlIERTUC4KKyogU2V0dGluZyBhIGxvd2VyIGRlcHRoIHJlZHVjZXMgbGF0ZW5jeSwgYnV0IGluY3JlYXNlcyB0aGUgZGVtYW5kIG9mIHRoZQorKiBhcHBsaWNhdGlvbiB0byBzZXJ2aWNlIHRoZSBkcml2ZXIgd2l0aG91dCBmcmFtZSBsb3NzLiAgVGhlIERTUCBoYXMgNDgwCisqIGJ5dGVzIG9mIHBoeXNpY2FsIGJ1ZmZlciBtZW1vcnkgZm9yIHRoZSByZWNvcmQgY2hhbm5lbCBzbyB0aGUgdHJ1ZQorKiBtYXhpbXVtIGxpbWl0IGlzIGRldGVybWluZWQgYnkgaG93IG1hbnkgZnJhbWVzIHdpbGwgZml0IGluIHRoZSBidWZmZXIuCisqCisqIDEgdW5jb21wcmVzc2VkICg0ODAgYnl0ZSkgMTYtYml0IGxpbmVhciBmcmFtZS4KKyogMiB1bmNvbXByZXNzZWQgKDI0MCBieXRlKSA4LWJpdCBBLWxhdy9tdS1sYXcgZnJhbWVzLgorKiAxNSBUcnVlU3BlZWNoIDguNSBmcmFtZXMuCisqIDIwIFRydWVTcGVlY2ggNi4zLDUuMyw0Ljggb3IgNC4xIGZyYW1lcy4KKyoKKyogVGhlIGRlZmF1bHQgaW4gdGhlIGRyaXZlciBpcyBjdXJyZW50bHkgc2V0IHRvIDIgZnJhbWVzLgorKgorKiBUaGUgSVhKQ1RMX1JFQ19WT0xVTUUgYW5kIElYSkNUTF9QTEFZX1ZPTFVNRSBjb21tYW5kcyBib3RoIHVzZSBhIFE4CisqIG51bWJlciBhcyBhIHBhcmFtZXRlciwgMHgxMDAgc2NhbGVzIHRoZSBzaWduYWwgYnkgMS4wLCAweDIwMCBzY2FsZXMgdGhlCisqIHNpZ25hbCBieSAyLjAsIDB4ODAgc2NhbGVzIHRoZSBzaWduYWwgYnkgMC41LiAgTm8gcHJvdGVjdGlvbiBpcyBnaXZlbgorKiBhZ2FpbnN0IG92ZXItc2NhbGluZywgaWYgdGhlIG11bHRpcGxpY2F0aW9uIGZhY3RvciB0aW1lcyB0aGUgaW5wdXQKKyogc2lnbmFsIGV4Y2VlZHMgMTYgYml0cywgb3ZlcmZsb3cgZGlzdG9ydGlvbiB3aWxsIG9jY3VyLiAgVGhlIGRlZmF1bHQKKyogc2V0dGluZyBpcyAweDEwMCAoMS4wKS4KKyoKKyogVGhlIElYSkNUTF9SRUNfTEVWRUwgcmV0dXJucyB0aGUgYXZlcmFnZSBzaWduYWwgbGV2ZWwgKG5vdCByLm0ucy4pIG9uCisqIHRoZSBtb3N0IHJlY2VudGx5IHJlY29yZGVkIGZyYW1lIGFzIGEgMTYgYml0IHZhbHVlLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIElYSkNUTF9SRUNfQ09ERUMgICAgICAgICAgICAgICAgUEhPTkVfUkVDX0NPREVDCisjZGVmaW5lIElYSkNUTF9SRUNfU1RBUlQgICAgICAgICAgICAgICAgUEhPTkVfUkVDX1NUQVJUCisjZGVmaW5lIElYSkNUTF9SRUNfU1RPUCAgICAgICAgICAgICAgICAgUEhPTkVfUkVDX1NUT1AKKyNkZWZpbmUgSVhKQ1RMX1JFQ19ERVBUSAkJUEhPTkVfUkVDX0RFUFRICisjZGVmaW5lIElYSkNUTF9GUkFNRQkJCVBIT05FX0ZSQU1FCisjZGVmaW5lIElYSkNUTF9SRUNfVk9MVU1FCQlQSE9ORV9SRUNfVk9MVU1FCisjZGVmaW5lIElYSkNUTF9SRUNfTEVWRUwJCVBIT05FX1JFQ19MRVZFTAorCit0eXBlZGVmIGVudW0geworCWYzMDBfNjQwID0gNCwgZjMwMF81MDAsIGYxMTAwLCBmMzUwLCBmNDAwLCBmNDgwLCBmNDQwLCBmNjIwLCBmMjBfNTAsCisJZjEzM18yMDAsIGYzMDAsIGYzMDBfNDIwLCBmMzMwLCBmMzAwXzQyNSwgZjMzMF80NDAsIGYzNDAsIGYzNTBfNDAwLAorCWYzNTBfNDQwLCBmMzUwXzQ1MCwgZjM2MCwgZjM4MF80MjAsIGYzOTIsIGY0MDBfNDI1LCBmNDAwXzQ0MCwgZjQwMF80NTAsCisJZjQyMCwgZjQyNSwgZjQyNV80NTAsIGY0MjVfNDc1LCBmNDM1LCBmNDQwXzQ1MCwgZjQ0MF80ODAsIGY0NDUsIGY0NTAsCisJZjQ1MiwgZjQ3NSwgZjQ4MF82MjAsIGY0OTQsIGY1MDAsIGY1MjAsIGY1MjMsIGY1MjUsIGY1NDBfNjYwLCBmNTg3LAorCWY1OTAsIGY2MDAsIGY2NjAsIGY3MDAsIGY3NDAsIGY3NTAsIGY3NTBfMTQ1MCwgZjc3MCwgZjgwMCwgZjgxNiwgZjg1MCwKKwlmODU3XzE2NDUsIGY5MDAsIGY5MDBfMTMwMCwgZjkzNV8xMjE1LCBmOTQxXzE0NzcsIGY5NDIsIGY5NTAsIGY5NTBfMTQwMCwKKwlmOTc1LCBmMTAwMCwgZjEwMjAsIGYxMDUwLCBmMTEwMF8xNzUwLCBmMTE0MCwgZjEyMDAsIGYxMjA5LCBmMTMzMCwgZjEzMzYsCisJbGYxMzY2LCBmMTM4MCwgZjE0MDAsIGYxNDc3LCBmMTYwMCwgZjE2MzNfMTYzOCwgZjE4MDAsIGYxODYwCit9IElYSl9GSUxURVJfRlJFUTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBmaWx0ZXI7CisJSVhKX0ZJTFRFUl9GUkVRIGZyZXE7CisJY2hhciBlbmFibGU7Cit9IElYSl9GSUxURVI7CisKK3R5cGVkZWYgc3RydWN0IHsKKwljaGFyIGVuYWJsZTsKKwljaGFyIGVuX2ZpbHRlcjsKKwl1bnNpZ25lZCBpbnQgZmlsdGVyOworCXVuc2lnbmVkIGludCBvbjE7CisJdW5zaWduZWQgaW50IG9mZjE7CisJdW5zaWduZWQgaW50IG9uMjsKKwl1bnNpZ25lZCBpbnQgb2ZmMjsKKwl1bnNpZ25lZCBpbnQgb24zOworCXVuc2lnbmVkIGludCBvZmYzOworfSBJWEpfRklMVEVSX0NBREVOQ0U7CisKKyNkZWZpbmUgSVhKQ1RMX1NFVF9GSUxURVIJCV9JT1cgKCdxJywgMHhDNywgSVhKX0ZJTFRFUiAqKQorI2RlZmluZSBJWEpDVExfU0VUX0ZJTFRFUl9SQVcJCV9JT1cgKCdxJywgMHhERCwgSVhKX0ZJTFRFUl9SQVcgKikKKyNkZWZpbmUgSVhKQ1RMX0dFVF9GSUxURVJfSElTVAkJX0lPVyAoJ3EnLCAweEM4LCBpbnQpCisjZGVmaW5lIElYSkNUTF9GSUxURVJfQ0FERU5DRQkJX0lPVyAoJ3EnLCAweEQ2LCBJWEpfRklMVEVSX0NBREVOQ0UgKikKKyNkZWZpbmUgSVhKQ1RMX1BMQVlfQ0lECQkJX0lPICAoJ3EnLCAweEQ3KQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBUaGlzIElPQ1RMIGFsbG93cyB5b3UgdG8gcmVhc3NpZ24gdmFsdWVzIGluIHRoZSB0b25lIGluZGV4IHRhYmxlLiAgVGhlCisqIHRvbmUgdGFibGUgaGFzIDMyIGVudHJpZXMgKDAgLSAzMSksIGJ1dCB0aGUgZHJpdmVyIG9ubHkgYWxsb3dzIGVudHJpZXMKKyogMTMgLSAyNyB0byBiZSBtb2RpZmllZCwgZW50cnkgMCBpcyByZXNlcnZlZCBmb3Igc2lsZW5jZSBhbmQgMSAtIDEyIGFyZQorKiB0aGUgc3RhbmRhcmQgRFRNRiBkaWdpdHMgYW5kIDI4IC0gMzEgYXJlIHRoZSBEVE1GIHRvbmVzIGZvciBBLCBCLCBDICYgRC4KKyogVGhlIHBvc2l0aW9ucyB1c2VkIGludGVybmFsbHkgZm9yIENhbGwgUHJvZ3Jlc3MgVG9uZXMgYXJlIGFzIGZvbGxvd3M6CisqICAgIERpYWwgVG9uZSAgIC0gMjUKKyogICAgUmluZyBCYWNrICAgLSAyNgorKiAgICBCdXN5IFNpZ25hbCAtIDI3CisqCisqIFRoZSBmcmVxIHZhbHVlcyBhcmUgY2FsY3VsYXRlZCBhczoKKyogZnJlcSA9IGNvcygyICogUEkgKiBmcmVxdWVuY3kgLyA4MDAwKQorKgorKiBUaGUgbW9zdCBjb21tb25seSBuZWVkZWQgdmFsdWVzIGFyZSBhbHJlYWR5IGNhbGN1bGF0ZWQgYW5kIGxpc3RlZCBpbiB0aGUKKyogZW51bSBJWEpfVE9ORV9GUkVRLiAgRWFjaCB0b25lIGluZGV4IGNhbiBoYXZlIHR3byBmcmVxdWVuY2llcyB3aXRoCisqIGRpZmZlcmVudCBnYWlucywgaWYgeW91IGFyZSBvbmx5IHVzaW5nIGEgc2luZ2xlIGZyZXF1ZW5jeSBzZXQgdGhlIHVudXNlZAorKiBvbmUgdG8gMC4KKyoKKyogVGhlIGdhaW4gdmFsdWVzIHJhbmdlIGZyb20gMCB0byAxNSBpbmRpY2F0aW5nICs2ZEIgdG8gLTI0ZEIgaW4gMmRCCisqIGluY3JlbWVudHMuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgZW51bSB7CisJaHoyMCA9IDB4N2ZmYSwKKwloejUwID0gMHg3ZmU1LAorCWh6MTMzID0gMHg3ZjRjLAorCWh6MjAwID0gMHg3ZTZiLAorCWh6MjYxID0gMHg3ZDUwLAkJLyogLjYzIEMxICAqLworCWh6Mjc3ID0gMHg3Y2ZhLAkJLyogLjE4IENTMSAqLworCWh6MjkzID0gMHg3YzlmLAkJLyogLjY2IEQxICAqLworCWh6MzAwID0gMHg3Yzc1LAorCWh6MzExID0gMHg3YzMyLAkJLyogLjEzIERTMSAqLworCWh6MzI5ID0gMHg3YmJmLAkJLyogLjYzIEUxICAqLworCWh6MzMwID0gMHg3YmI4LAorCWh6MzQwID0gMHg3Yjc1LAorCWh6MzQ5ID0gMHg3YjM3LAkJLyogLjIzIEYxICAqLworCWh6MzUwID0gMHg3YjMwLAorCWh6MzYwID0gMHg3YWU5LAorCWh6MzY5ID0gMHg3YWE4LAkJLyogLjk5IEZTMSAqLworCWh6MzgwID0gMHg3YTU2LAorCWh6MzkyID0gMHg3OWZhLAkJLyogLjAwIEcxICAqLworCWh6NDAwID0gMHg3OWJiLAorCWh6NDE1ID0gMHg3OTQxLAkJLyogLjMwIEdTMSAqLworCWh6NDIwID0gMHg3OTE4LAorCWh6NDI1ID0gMHg3OGVlLAorCWh6NDM1ID0gMHg3ODk5LAorCWh6NDQwID0gMHg3ODZkLAkJLyogLjAwIEExICAqLworCWh6NDQ1ID0gMHg3ODQyLAorCWh6NDUwID0gMHg3ODE1LAorCWh6NDUyID0gMHg3ODAzLAorCWh6NDY2ID0gMHg3Nzg0LAkJLyogLjE2IEFTMSAqLworCWh6NDc1ID0gMHg3NzMxLAorCWh6NDgwID0gMHg3NzAxLAorCWh6NDkzID0gMHg3Njg1LAkJLyogLjg4IEIxICAqLworCWh6NDk0ID0gMHg3NjdiLAorCWh6NTAwID0gMHg3NjQwLAorCWh6NTIwID0gMHg3NTc4LAorCWh6NTIzID0gMHg3NTU5LAkJLyogLjI1IEMyICAqLworCWh6NTI1ID0gMHg3NTQ0LAorCWh6NTQwID0gMHg3NGE3LAorCWh6NTU0ID0gMHg3NDExLAkJLyogLjM3IENTMiAqLworCWh6NTg3ID0gMHg3MmExLAkJLyogLjMzIEQyICAqLworCWh6NTkwID0gMHg3MjdmLAorCWh6NjAwID0gMHg3MjBiLAorCWh6NjIwID0gMHg3MTFlLAorCWh6NjIyID0gMHg3MTA2LAkJLyogLjI1IERTMiAqLworCWh6NjU5ID0gMHg2ZjNiLAkJLyogLjI2IEUyICAqLworCWh6NjYwID0gMHg2ZjJlLAorCWh6Njk4ID0gMHg2ZDNkLAkJLyogLjQ2IEYyICAqLworCWh6NzAwID0gMHg2ZDIyLAorCWh6NzM5ID0gMHg2YjA5LAkJLyogLjk5IEZTMiAqLworCWh6NzQwID0gMHg2YWZhLAorCWh6NzUwID0gMHg2YTZjLAorCWh6NzcwID0gMHg2OTRiLAorCWh6NzgzID0gMHg2ODhiLAkJLyogLjk5IEcyICAqLworCWh6ODAwID0gMHg2NzhkLAorCWh6ODE2ID0gMHg2Njk4LAorCWh6ODMwID0gMHg2NWJmLAkJLyogLjYxIEdTMiAqLworCWh6ODUwID0gMHg2NDg0LAorCWh6ODU3ID0gMHg2NDE0LAorCWh6ODgwID0gMHg2MjlmLAkJLyogLjAwIEEyICAqLworCWh6OTAwID0gMHg2MTU0LAorCWh6OTMyID0gMHg1ZjM1LAkJLyogLjMzIEFTMiAqLworCWh6OTM1ID0gMHg1ZjAxLAorCWh6OTQxID0gMHg1ZTlhLAorCWh6OTQyID0gMHg1ZTg4LAorCWh6OTUwID0gMHg1ZGZkLAorCWh6OTc1ID0gMHg1YzQ0LAorCWh6MTAwMCA9IDB4NWE4MSwKKwloejEwMjAgPSAweDU5MTIsCisJaHoxMDUwID0gMHg1NmUyLAorCWh6MTEwMCA9IDB4NTMyMCwKKwloejExNDAgPSAweDUwMDcsCisJaHoxMjAwID0gMHg0YjNiLAorCWh6MTIwOSA9IDB4NGE4MCwKKwloejEyMTUgPSAweDRhMDIsCisJaHoxMjUwID0gMHg0NzFjLAorCWh6MTMwMCA9IDB4NDJlMCwKKwloejEzMzAgPSAweDQwNDksCisJaHoxMzM2ID0gMHgzZmM0LAorCWh6MTM2NiA9IDB4M2QyMiwKKwloejEzODAgPSAweDNiZTQsCisJaHoxNDAwID0gMHgzYTFiLAorCWh6MTQ1MCA9IDB4MzU5NiwKKwloejE0NzcgPSAweDMzMWMsCisJaHoxNTAwID0gMHgzMGZiLAorCWh6MTYwMCA9IDB4Mjc4ZCwKKwloejE2MzMgPSAweDI0NjIsCisJaHoxNjM4ID0gMHgyM2U3LAorCWh6MTY0NSA9IDB4MjMzYSwKKwloejE3NTAgPSAweDE4ZjgsCisJaHoxODAwID0gMHgxNDA1LAorCWh6MTg2MCA9IDB4ZTBiLAorCWh6MjEwMCA9IDB4ZjVmNiwKKwloejIxMzAgPSAweGYyZjUsCisJaHoyNDUwID0gMHhkM2IzLAorCWh6Mjc1MCA9IDB4YjhlNAorfSBJWEpfRlJFUTsKKwordHlwZWRlZiBlbnVtIHsKKwlDMSA9IGh6MjYxLAorCUNTMSA9IGh6Mjc3LAorCUQxID0gaHoyOTMsCisJRFMxID0gaHozMTEsCisJRTEgPSBoejMyOSwKKwlGMSA9IGh6MzQ5LAorCUZTMSA9IGh6MzY5LAorCUcxID0gaHozOTIsCisJR1MxID0gaHo0MTUsCisJQTEgPSBoejQ0MCwKKwlBUzEgPSBoejQ2NiwKKwlCMSA9IGh6NDkzLAorCUMyID0gaHo1MjMsCisJQ1MyID0gaHo1NTQsCisJRDIgPSBoejU4NywKKwlEUzIgPSBoejYyMiwKKwlFMiA9IGh6NjU5LAorCUYyID0gaHo2OTgsCisJRlMyID0gaHo3MzksCisJRzIgPSBoejc4MywKKwlHUzIgPSBoejgzMCwKKwlBMiA9IGh6ODgwLAorCUFTMiA9IGh6OTMyLAorfSBJWEpfTk9URTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWludCB0b25lX2luZGV4OworCWludCBmcmVxMDsKKwlpbnQgZ2FpbjA7CisJaW50IGZyZXExOworCWludCBnYWluMTsKK30gSVhKX1RPTkU7CisKKyNkZWZpbmUgSVhKQ1RMX0lOSVRfVE9ORQkJX0lPVyAoJ3EnLCAweEM5LCBJWEpfVE9ORSAqKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIFRoZSBJWEpDVExfVE9ORV9DQURFTkNFIGlvY3RsIGRlZmluZXMgdG9uZSBzZXF1ZW5jZXMgdXNlZCBmb3IgdmFyaW91cworKiBDYWxsIFByb2dyZXNzIFRvbmVzIChDUFQpLiAgVGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkgc2V0dGluZyB1cCBhbiBhcnJheSBvZgorKiBJWEpfQ0FERU5DRV9FTEVNRU5UIHN0cnVjdHVyZXMgdGhhdCBzZXF1ZW50aWFsbHkgZGVmaW5lIHRoZSBzdGF0ZXMgb2YKKyogdGhlIHRvbmUgc2VxdWVuY2UuICBUaGUgdG9uZV9vbl90aW1lIGFuZCB0b25lX29mZiB0aW1lIGFyZSBpbgorKiAyNTAgbWljcm9zZWNvbmQgaW50ZXJ2YWxzLiAgQSBwb2ludGVyIHRvIHRoaXMgYXJyYXkgaXMgcGFzc2VkIHRvIHRoZQorKiBkcml2ZXIgYXMgdGhlIGNlIGVsZW1lbnQgb2YgYW4gSVhKX0NBREVOQ0Ugc3RydWN0dXJlLiAgVGhlIGVsZW1lbnRzX3VzZWQKKyogbXVzdCBiZSBzZXQgdG8gdGhlIG51bWJlciBvZiBJWEpfQ0FERU5DRV9FTEVNRU5UUyBpbiB0aGUgYXJyYXkuICBUaGUKKyogdGVybWluYXRpb24gdmFyaWFibGUgZGVmaW5lcyB3aGF0IHRvIGRvIGF0IHRoZSBlbmQgb2YgYSBjYWRlbmNlLCB0aGUKKyogb3B0aW9ucyBhcmUgdG8gcGxheSB0aGUgY2FkZW5jZSBvbmNlIGFuZCBzdG9wLCB0byByZXBlYXQgdGhlIGxhc3QKKyogZWxlbWVudCBvZiB0aGUgY2FkZW5jZSBpbmRlZmluaXRlbHksIG9yIHRvIHJlcGVhdCB0aGUgZW50aXJlIGNhZGVuY2UKKyogaW5kZWZpbml0ZWx5LiAgVGhlIGNlIHZhcmlhYmxlIGlzIGEgcG9pbnRlciB0byB0aGUgYXJyYXkgb2YgSVhKX1RPTkUKKyogc3RydWN0dXJlcy4gIElmIHRoZSBmcmVxMCB2YXJpYWJsZSBpcyBub24temVybywgdGhlIHRvbmUgdGFibGUgY29udGVudHMKKyogZm9yIHRoZSB0b25lX2luZGV4IGFyZSB1cGRhdGVkIHRvIHRoZSBmcmVxdWVuY2llcyBhbmQgZ2FpbnMgZGVmaW5lZC4gIEl0CisqIHNob3VsZCBiZSBub3RlZCB0aGF0IERUTUYgdG9uZXMgY2Fubm90IGJlIHJlYXNzaWduZWQsIHNvIGlmIERUTUYgdG9uZQorKiB0YWJsZSBpbmRleGVzIGFyZSB1c2VkIGluIGEgY2FkZW5jZSB0aGUgZnJlcXVlbmN5IGFuZCBnYWluIHZhcmlhYmxlcyB3aWxsCisqIGJlIGlnbm9yZWQuCisqCisqIElmIHRoZSBhcnJheSBlbGVtZW50cyBjb250YWluIGZyZXF1ZW5jeSBwYXJhbWV0ZXJzIHRoZSBkcml2ZXIgd2lsbAorKiBpbml0aWFsaXplIHRoZSBuZWVkZWQgdG9uZSB0YWJsZSBlbGVtZW50cyBhbmQgYmVnaW4gcGxheWluZyB0aGUgdG9uZSwKKyogdGhlcmUgaXMgbm8gcHJlc2V0IGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGNhZGVuY2UuICBJZgorKiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGZyZXF1ZW5jeSB1c2VkIGluIHRoZSBjYWRlbmNlLCBzZXF1ZW50aWFsIGVsZW1lbnRzCisqIG9mIGRpZmZlcmVudCBmcmVxdWVuY2llcyBNVVNUIHVzZSBkaWZmZXJlbnQgdG9uZSB0YWJsZSBpbmRleGVzLiAgT25seSBvbmUKKyogY2FkZW5jZSBjYW4gYmUgcGxheWVkIGF0IGEgdGltZS4gIEl0IGlzIHBvc3NpYmxlIHRvIGJ1aWxkIGNvbXBsZXgKKyogY2FkZW5jZXMgd2l0aCBtdWx0aXBsZSBmcmVxdWVuY2llcyB1c2luZyAyIHRvbmUgdGFibGUgaW5kZXhlcyBieQorKiBhbHRlcm5hdGluZyBiZXR3ZWVuIHRoZW0uCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgaW5kZXg7CisJaW50IHRvbmVfb25fdGltZTsKKwlpbnQgdG9uZV9vZmZfdGltZTsKKwlpbnQgZnJlcTA7CisJaW50IGdhaW4wOworCWludCBmcmVxMTsKKwlpbnQgZ2FpbjE7Cit9IElYSl9DQURFTkNFX0VMRU1FTlQ7CisKK3R5cGVkZWYgZW51bSB7CisJUExBWV9PTkNFLAorCVJFUEVBVF9MQVNUX0VMRU1FTlQsCisJUkVQRUFUX0FMTAorfSBJWEpfQ0FERU5DRV9URVJNOworCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IGVsZW1lbnRzX3VzZWQ7CisJSVhKX0NBREVOQ0VfVEVSTSB0ZXJtaW5hdGlvbjsKKwlJWEpfQ0FERU5DRV9FTEVNRU5UICpjZTsKK30gSVhKX0NBREVOQ0U7CisKKyNkZWZpbmUgSVhKQ1RMX1RPTkVfQ0FERU5DRQkJX0lPVyAoJ3EnLCAweENBLCBJWEpfQ0FERU5DRSAqKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBUaGlzIGdyb3VwIG9mIElPQ1RMcyBkZWFsIHdpdGggdGhlIHBsYXliYWNrIHNldHRpbmdzIG9mIHRoZSBEU1AKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBJWEpDVExfUExBWV9DT0RFQyAgICAgICAgICAgICAgIFBIT05FX1BMQVlfQ09ERUMKKyNkZWZpbmUgSVhKQ1RMX1BMQVlfU1RBUlQgICAgICAgICAgICAgICBQSE9ORV9QTEFZX1NUQVJUCisjZGVmaW5lIElYSkNUTF9QTEFZX1NUT1AgICAgICAgICAgICAgICAgUEhPTkVfUExBWV9TVE9QCisjZGVmaW5lIElYSkNUTF9QTEFZX0RFUFRICQlQSE9ORV9QTEFZX0RFUFRICisjZGVmaW5lIElYSkNUTF9QTEFZX1ZPTFVNRQkJUEhPTkVfUExBWV9WT0xVTUUKKyNkZWZpbmUgSVhKQ1RMX1BMQVlfTEVWRUwJCVBIT05FX1BMQVlfTEVWRUwKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBUaGlzIGdyb3VwIG9mIElPQ1RMcyBkZWFsIHdpdGggdGhlIEFjb3VzdGljIEVjaG8gQ2FuY2VsbGF0aW9uIHNldHRpbmdzCisqIG9mIHRoZSBEU1AKKyoKKyogSXNzdWluZyB0aGUgSVhKQ1RMX0FFQ19TVEFSVCBjb21tYW5kIHdpdGggYSB2YWx1ZSBvZiBBRUNfT0ZGIGhhcyB0aGUKKyogc2FtZSBlZmZlY3QgYXMgSVhKQ1RMX0FFQ19TVE9QLiAgVGhpcyBpcyB0byBzaW1wbGlmeSBzbGlkZXIgYmFyCisqIGNvbnRyb2xzLiAgSVhKQ1RMX0FFQ19HRVRfTEVWRUwgcmV0dXJucyB0aGUgY3VycmVudCBzZXR0aW5nIG9mIHRoZSBBRUMuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIElYSkNUTF9BRUNfU1RBUlQJCV9JT1cgKCdxJywgMHhDQiwgaW50KQorI2RlZmluZSBJWEpDVExfQUVDX1NUT1AJCQlfSU8gICgncScsIDB4Q0MpCisjZGVmaW5lIElYSkNUTF9BRUNfR0VUX0xFVkVMCQlfSU8gICgncScsIDB4Q0QpCisKKyNkZWZpbmUgQUVDX09GRiAgIDAKKyNkZWZpbmUgQUVDX0xPVyAgIDEKKyNkZWZpbmUgQUVDX01FRCAgIDIKKyNkZWZpbmUgQUVDX0hJR0ggIDMKKyNkZWZpbmUgQUVDX0FVVE8gIDQKKyNkZWZpbmUgQUVDX0FHQyAgIDUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogQ2FsbCBQcm9ncmVzcyBUb25lcywgRFRNRiwgZXRjLgorKiBJWEpDVExfRFRNRl9PT0IgZGV0ZXJtaW5lcyBpZiBEVE1GIHNpZ25hbGluZyBpcyBzZW50IGFzIE91dC1PZi1CYW5kCisqIG9ubHkuICBJZiB5b3UgcGFzcyBhIDEsIERUTUYgaXMgc3VwcHJlc3NlZCBmcm9tIHRoZSBhdWRpbyBzdHJlYW0uCisqIFRvbmUgb24gYW5kIG9mZiB0aW1lcyBhcmUgaW4gMjUwIG1pY3Jvc2Vjb25kIGludGVydmFscyBzbworKiBpb2N0bChpeGoxLCBJWEpDVExfU0VUX1RPTkVfT05fVElNRSwgMzYwKTsKKyogd2lsbCBzZXQgdGhlIHRvbmUgb24gdGltZSBvZiBib2FyZCBpeGoxIHRvIDM2MCAqIDI1MHVzID0gOTBtcworKiB0aGUgZGVmYXVsdCB2YWx1ZXMgb2YgdG9uZSBvbiBhbmQgb2ZmIHRpbWVzIGlzIDg0MCBvciAyMTBtcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIElYSkNUTF9EVE1GX1JFQURZCQlQSE9ORV9EVE1GX1JFQURZCisjZGVmaW5lIElYSkNUTF9HRVRfRFRNRiAgICAgICAgICAgICAgICAgUEhPTkVfR0VUX0RUTUYKKyNkZWZpbmUgSVhKQ1RMX0dFVF9EVE1GX0FTQ0lJICAgICAgICAgICBQSE9ORV9HRVRfRFRNRl9BU0NJSQorI2RlZmluZSBJWEpDVExfRFRNRl9PT0IJCQlQSE9ORV9EVE1GX09PQgorI2RlZmluZSBJWEpDVExfRVhDRVBUSU9OCQlQSE9ORV9FWENFUFRJT04KKyNkZWZpbmUgSVhKQ1RMX1BMQVlfVE9ORQkJUEhPTkVfUExBWV9UT05FCisjZGVmaW5lIElYSkNUTF9TRVRfVE9ORV9PTl9USU1FCQlQSE9ORV9TRVRfVE9ORV9PTl9USU1FCisjZGVmaW5lIElYSkNUTF9TRVRfVE9ORV9PRkZfVElNRQlQSE9ORV9TRVRfVE9ORV9PRkZfVElNRQorI2RlZmluZSBJWEpDVExfR0VUX1RPTkVfT05fVElNRQkJUEhPTkVfR0VUX1RPTkVfT05fVElNRQorI2RlZmluZSBJWEpDVExfR0VUX1RPTkVfT0ZGX1RJTUUJUEhPTkVfR0VUX1RPTkVfT0ZGX1RJTUUKKyNkZWZpbmUgSVhKQ1RMX0dFVF9UT05FX1NUQVRFCQlQSE9ORV9HRVRfVE9ORV9TVEFURQorI2RlZmluZSBJWEpDVExfQlVTWQkJCVBIT05FX0JVU1kKKyNkZWZpbmUgSVhKQ1RMX1JJTkdCQUNLCQkJUEhPTkVfUklOR0JBQ0sKKyNkZWZpbmUgSVhKQ1RMX0RJQUxUT05FCQkJUEhPTkVfRElBTFRPTkUKKyNkZWZpbmUgSVhKQ1RMX0NQVF9TVE9QCQkJUEhPTkVfQ1BUX1NUT1AKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBMaW5lSkFDSyBzcGVjaWZpYyBJT0NUTHMKKyoKKyogVGhlIGxzYiA0IGJpdHMgb2YgdGhlIExFRCBhcmd1bWVudCByZXByZXNlbnQgdGhlIHN0YXRlIG9mIGVhY2ggb2YgdGhlIDQKKyogTEVEJ3Mgb24gdGhlIExpbmVKQUNLCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgSVhKQ1RMX1NFVF9MRUQJCQlfSU9XICgncScsIDB4Q0UsIGludCkKKyNkZWZpbmUgSVhKQ1RMX01JWEVSCQkJX0lPVyAoJ3EnLCAweENGLCBpbnQpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogCisqIFRoZSBtYXN0ZXIgdm9sdW1lIGNvbnRyb2xzIHVzZSBhdHRlbnVhdGlvbiB3aXRoIDMyIGxldmVscyBmcm9tIDAgdG8gLTYyZEIKKyogd2l0aCBzdGVwcyBvZiAyZEIgZWFjaCwgdGhlIGRlZmluZXMgc2hvdWxkIGJlIE9SJ2VkIHRvZ2V0aGVyIHRoZW4gc2VudAorKiBhcyB0aGUgcGFyYW1ldGVyIHRvIHRoZSBtaXhlciBjb21tYW5kIHRvIGNoYW5nZSB0aGUgbWl4ZXIgc2V0dGluZ3MuCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBNSVhFUl9NQVNURVJfTAkJMHgwMDAwCisjZGVmaW5lIE1JWEVSX01BU1RFUl9SCQkweDAxMDAKKyNkZWZpbmUgQVRUMDBEQgkJCTB4MDAKKyNkZWZpbmUgQVRUMDJEQgkJCTB4MDEKKyNkZWZpbmUgQVRUMDREQgkJCTB4MDIKKyNkZWZpbmUgQVRUMDZEQgkJCTB4MDMKKyNkZWZpbmUgQVRUMDhEQgkJCTB4MDQKKyNkZWZpbmUgQVRUMTBEQgkJCTB4MDUKKyNkZWZpbmUgQVRUMTJEQgkJCTB4MDYKKyNkZWZpbmUgQVRUMTREQgkJCTB4MDcKKyNkZWZpbmUgQVRUMTZEQgkJCTB4MDgKKyNkZWZpbmUgQVRUMThEQgkJCTB4MDkKKyNkZWZpbmUgQVRUMjBEQgkJCTB4MEEKKyNkZWZpbmUgQVRUMjJEQgkJCTB4MEIKKyNkZWZpbmUgQVRUMjREQgkJCTB4MEMKKyNkZWZpbmUgQVRUMjZEQgkJCTB4MEQKKyNkZWZpbmUgQVRUMjhEQgkJCTB4MEUKKyNkZWZpbmUgQVRUMzBEQgkJCTB4MEYKKyNkZWZpbmUgQVRUMzJEQgkJCTB4MTAKKyNkZWZpbmUgQVRUMzREQgkJCTB4MTEKKyNkZWZpbmUgQVRUMzZEQgkJCTB4MTIKKyNkZWZpbmUgQVRUMzhEQgkJCTB4MTMKKyNkZWZpbmUgQVRUNDBEQgkJCTB4MTQKKyNkZWZpbmUgQVRUNDJEQgkJCTB4MTUKKyNkZWZpbmUgQVRUNDREQgkJCTB4MTYKKyNkZWZpbmUgQVRUNDZEQgkJCTB4MTcKKyNkZWZpbmUgQVRUNDhEQgkJCTB4MTgKKyNkZWZpbmUgQVRUNTBEQgkJCTB4MTkKKyNkZWZpbmUgQVRUNTJEQgkJCTB4MUEKKyNkZWZpbmUgQVRUNTREQgkJCTB4MUIKKyNkZWZpbmUgQVRUNTZEQgkJCTB4MUMKKyNkZWZpbmUgQVRUNThEQgkJCTB4MUQKKyNkZWZpbmUgQVRUNjBEQgkJCTB4MUUKKyNkZWZpbmUgQVRUNjJEQgkJCTB4MUYKKyNkZWZpbmUgTUFTVEVSX01VVEUJCTB4ODAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAKKyogVGhlIGlucHV0IHZvbHVtZSBjb250cm9scyB1c2UgZ2FpbiB3aXRoIDMyIGxldmVscyBmcm9tICsxMmRCIHRvIC01MGRCCisqIHdpdGggc3RlcHMgb2YgMmRCIGVhY2gsIHRoZSBkZWZpbmVzIHNob3VsZCBiZSBPUidlZCB0b2dldGhlciB0aGVuIHNlbnQKKyogYXMgdGhlIHBhcmFtZXRlciB0byB0aGUgbWl4ZXIgY29tbWFuZCB0byBjaGFuZ2UgdGhlIG1peGVyIHNldHRpbmdzLgorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTUlYRVJfUE9SVF9DRF9MCQkweDA2MDAKKyNkZWZpbmUgTUlYRVJfUE9SVF9DRF9SCQkweDA3MDAKKyNkZWZpbmUgTUlYRVJfUE9SVF9MSU5FX0lOX0wJMHgwODAwCisjZGVmaW5lIE1JWEVSX1BPUlRfTElORV9JTl9SCTB4MDkwMAorI2RlZmluZSBNSVhFUl9QT1JUX1BPVFNfUkVDCTB4MEMwMAorI2RlZmluZSBNSVhFUl9QT1JUX01JQwkJMHgwRTAwCisKKyNkZWZpbmUgR0FJTjEyREIJCTB4MDAKKyNkZWZpbmUgR0FJTjEwREIJCTB4MDEKKyNkZWZpbmUgR0FJTjA4REIJCTB4MDIKKyNkZWZpbmUgR0FJTjA2REIJCTB4MDMKKyNkZWZpbmUgR0FJTjA0REIJCTB4MDQKKyNkZWZpbmUgR0FJTjAyREIJCTB4MDUKKyNkZWZpbmUgR0FJTjAwREIJCTB4MDYKKyNkZWZpbmUgR0FJTl8wMkRCCQkweDA3CisjZGVmaW5lIEdBSU5fMDREQgkJMHgwOAorI2RlZmluZSBHQUlOXzA2REIJCTB4MDkKKyNkZWZpbmUgR0FJTl8wOERCCQkweDBBCisjZGVmaW5lIEdBSU5fMTBEQgkJMHgwQgorI2RlZmluZSBHQUlOXzEyREIJCTB4MEMKKyNkZWZpbmUgR0FJTl8xNERCCQkweDBECisjZGVmaW5lIEdBSU5fMTZEQgkJMHgwRQorI2RlZmluZSBHQUlOXzE4REIJCTB4MEYKKyNkZWZpbmUgR0FJTl8yMERCCQkweDEwCisjZGVmaW5lIEdBSU5fMjJEQgkJMHgxMQorI2RlZmluZSBHQUlOXzI0REIJCTB4MTIKKyNkZWZpbmUgR0FJTl8yNkRCCQkweDEzCisjZGVmaW5lIEdBSU5fMjhEQgkJMHgxNAorI2RlZmluZSBHQUlOXzMwREIJCTB4MTUKKyNkZWZpbmUgR0FJTl8zMkRCCQkweDE2CisjZGVmaW5lIEdBSU5fMzREQgkJMHgxNworI2RlZmluZSBHQUlOXzM2REIJCTB4MTgKKyNkZWZpbmUgR0FJTl8zOERCCQkweDE5CisjZGVmaW5lIEdBSU5fNDBEQgkJMHgxQQorI2RlZmluZSBHQUlOXzQyREIJCTB4MUIKKyNkZWZpbmUgR0FJTl80NERCCQkweDFDCisjZGVmaW5lIEdBSU5fNDZEQgkJMHgxRAorI2RlZmluZSBHQUlOXzQ4REIJCTB4MUUKKyNkZWZpbmUgR0FJTl81MERCCQkweDFGCisjZGVmaW5lIElOUFVUX01VVEUJCTB4ODAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAKKyogVGhlIFBPVFMgdm9sdW1lIGNvbnRyb2wgdXNlIGF0dGVudWF0aW9uIHdpdGggOCBsZXZlbHMgZnJvbSAwZEIgdG8gLTI4ZEIKKyogd2l0aCBzdGVwcyBvZiA0ZEIgZWFjaCwgdGhlIGRlZmluZXMgc2hvdWxkIGJlIE9SJ2VkIHRvZ2V0aGVyIHRoZW4gc2VudAorKiBhcyB0aGUgcGFyYW1ldGVyIHRvIHRoZSBtaXhlciBjb21tYW5kIHRvIGNoYW5nZSB0aGUgbWl4ZXIgc2V0dGluZ3MuCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBNSVhFUl9QT1JUX1BPVFNfUExBWQkweDBGMDAKKworI2RlZmluZSBQT1RTX0FUVF8wMERCCQkweDAwCisjZGVmaW5lIFBPVFNfQVRUXzA0REIJCTB4MDEKKyNkZWZpbmUgUE9UU19BVFRfMDhEQgkJMHgwMgorI2RlZmluZSBQT1RTX0FUVF8xMkRCCQkweDAzCisjZGVmaW5lIFBPVFNfQVRUXzE2REIJCTB4MDQKKyNkZWZpbmUgUE9UU19BVFRfMjBEQgkJMHgwNQorI2RlZmluZSBQT1RTX0FUVF8yNERCCQkweDA2CisjZGVmaW5lIFBPVFNfQVRUXzI4REIJCTB4MDcKKyNkZWZpbmUgUE9UU19NVVRFCQkweDgwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogCisqIFRoZSBEQUEgY29udHJvbHMgdGhlIGludGVyZmFjZSB0byB0aGUgUFNUTiBwb3J0LiAgVGhlIGRyaXZlciBsb2FkcyB0aGUKKyogVVMgY29lZmZpY2llbnRzIGJ5IGRlZmF1bHQsIHNvIGlmIHlvdSBsaXZlIGluIGEgZGlmZmVyZW50IGNvdW50cnkgeW91CisqIG5lZWQgdG8gbG9hZCB0aGUgc2V0IGZvciB5b3VyIGNvdW50cmllcyBwaG9uZSBzeXN0ZW0uCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBJWEpDVExfREFBX0NPRUZGX1NFVAkJX0lPVyAoJ3EnLCAweEQwLCBpbnQpCisKKyNkZWZpbmUgREFBX1VTIAkJMQkvKlBJVEEgOGtIeiAqLworI2RlZmluZSBEQUFfVUsgCQkyCS8qSVNBUjM0IDhrSHogKi8KKyNkZWZpbmUgREFBX0ZSQU5DRSAJMwkvKiAqLworI2RlZmluZSBEQUFfR0VSTUFOWQk0CisjZGVmaW5lIERBQV9BVVNUUkFMSUEJNQorI2RlZmluZSBEQUFfSkFQQU4JNgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIAorKiBVc2UgSVhKQ1RMX1BPUlQgdG8gc2V0IG9yIHF1ZXJ5IHRoZSBwb3J0IHRoZSBjYXJkIGlzIHNldCB0by4gIElmIHRoZQorKiBhcmd1bWVudCBpcyBzZXQgdG8gUE9SVF9RVUVSWSwgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgaW9jdGwgd2lsbAorKiBpbmRpY2F0ZSB3aGljaCBwb3J0IGlzIGN1cnJlbnRseSBpbiB1c2UsIG90aGVyd2lzZSBpdCB3aWxsIGNoYW5nZSB0aGUKKyogcG9ydC4KKyogCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIElYSkNUTF9QT1JUCQkJX0lPVyAoJ3EnLCAweEQxLCBpbnQpCisKKyNkZWZpbmUgUE9SVF9RVUVSWQkwCisjZGVmaW5lIFBPUlRfUE9UUwkxCisjZGVmaW5lIFBPUlRfUFNUTgkyCisjZGVmaW5lIFBPUlRfU1BFQUtFUgkzCisjZGVmaW5lIFBPUlRfSEFORFNFVAk0CisKKyNkZWZpbmUgSVhKQ1RMX1BTVE5fU0VUX1NUQVRFCQlQSE9ORV9QU1ROX1NFVF9TVEFURQorI2RlZmluZSBJWEpDVExfUFNUTl9HRVRfU1RBVEUJCVBIT05FX1BTVE5fR0VUX1NUQVRFCisKKyNkZWZpbmUgUFNUTl9PTl9IT09LCTAKKyNkZWZpbmUgUFNUTl9SSU5HSU5HCTEKKyNkZWZpbmUgUFNUTl9PRkZfSE9PSwkyCisjZGVmaW5lIFBTVE5fUFVMU0VfRElBTAkzCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogCisqIFRoZSBEQUEgQW5hbG9nIEdBSU4gc2V0cyAyIHBhcmFtZXRlcnMgYXQgb25lIHRpbWUsIHRoZSByZWNlaXZlIGdhaW4gKEFHUlIpLCAKKyogYW5kIHRoZSB0cmFuc21pdCBnYWluIChBR1gpLiAgT1IgdG9nZXRoZXIgdGhlIGNvbXBvbmVudHMgYW5kIHBhc3MgdGhlbQorKiBhcyB0aGUgcGFyYW1ldGVyIHRvIElYSkNUTF9EQUFfQUdBSU4uICBUaGUgZGVmYXVsdCBzZXR0aW5nIGlzIGJvdGggYXQgMGRCLgorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSVhKQ1RMX0RBQV9BR0FJTgkJX0lPVyAoJ3EnLCAweEQyLCBpbnQpCisKKyNkZWZpbmUgQUdSUjAwREIJMHgwMAkvKiBBbmFsb2cgZ2FpbiBpbiByZWNlaXZlIGRpcmVjdGlvbiAwZEIgKi8KKyNkZWZpbmUgQUdSUjNfNURCCTB4MTAJLyogQW5hbG9nIGdhaW4gaW4gcmVjZWl2ZSBkaXJlY3Rpb24gMy41ZEIgKi8KKyNkZWZpbmUgQUdSUjA2REIJMHgzMAkvKiBBbmFsb2cgZ2FpbiBpbiByZWNlaXZlIGRpcmVjdGlvbiA2ZEIgKi8KKworI2RlZmluZSBBR1gwMERCCQkweDAwCS8qIEFuYWxvZyBnYWluIGluIHRyYW5zbWl0IGRpcmVjdGlvbiAwZEIgKi8KKyNkZWZpbmUgQUdYXzZEQgkJMHgwNAkvKiBBbmFsb2cgZ2FpbiBpbiB0cmFuc21pdCBkaXJlY3Rpb24gLTZkQiAqLworI2RlZmluZSBBR1gzXzVEQgkweDA4CS8qIEFuYWxvZyBnYWluIGluIHRyYW5zbWl0IGRpcmVjdGlvbiAzLjVkQiAqLworI2RlZmluZSBBR1hfMl81QgkweDBDCS8qIEFuYWxvZyBnYWluIGluIHRyYW5zbWl0IGRpcmVjdGlvbiAtMi41ZEIgKi8KKworI2RlZmluZSBJWEpDVExfUFNUTl9MSU5FVEVTVAkJX0lPICAoJ3EnLCAweEQzKQorCisjZGVmaW5lIElYSkNUTF9DSUQJCQlfSU9SICgncScsIDB4RDQsIFBIT05FX0NJRCAqKQorI2RlZmluZSBJWEpDVExfVk1XSQkJCV9JT1IgKCdxJywgMHhEOCwgaW50KQorI2RlZmluZSBJWEpDVExfQ0lEQ1cJCQlfSU9XICgncScsIDB4RDksIFBIT05FX0NJRCAqKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAKKyogVGhlIHdpbmsgZHVyYXRpb24gaXMgdHVuYWJsZSB3aXRoIHRoaXMgaW9jdGwuICBUaGUgZGVmYXVsdCB3aW5rIGR1cmF0aW9uICAKKyogaXMgMzIwbXMuICBZb3UgZG8gbm90IG5lZWQgdG8gdXNlIHRoaXMgaW9jdGwgaWYgeW91IGRvIG5vdCByZXF1aXJlIGEKKyogZGlmZmVyZW50IHdpbmsgZHVyYXRpb24uCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBJWEpDVExfV0lOS19EVVJBVElPTgkJUEhPTkVfV0lOS19EVVJBVElPTgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIAorKiBUaGlzIGlvY3RsIHdpbGwgY29ubmVjdCB0aGUgUE9UUyBwb3J0IHRvIHRoZSBQU1ROIHBvcnQgb24gdGhlIExpbmVKQUNLCisqIEluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmsgcHJvcGVybHkgdGhlIHBvcnQgc2VsZWN0aW9uIHNob3VsZCBiZSBzZXQgdG8KKyogdGhlIFBTVE4gcG9ydCB3aXRoIElYSkNUTF9QT1JUIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBpb2N0bC4gIFRoaXMgd2lsbAorKiBlbmFibGUgY29uZmVyZW5jZSBjYWxscyBiZXR3ZWVuIFBTVE4gY2FsbGVycyBhbmQgbmV0d29yayBjYWxsZXJzLgorKiBQYXNzaW5nIGEgMSB0byB0aGlzIGlvY3RsIGVuYWJsZXMgdGhlIFBPVFM8LT5QU1ROIGNvbm5lY3Rpb24gd2hpbGUKKyogcGFzc2luZyBhIDAgdHVybnMgaXQgYmFjayBvZmYuCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBJWEpDVExfUE9UU19QU1ROCQlfSU9XICgncScsIDB4RDUsIGludCkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBJT0NUTHMgYWRkZWQgYnkgcmVxdWVzdC4KKyoKKyogSVhKQ1RMX0haIHNldHMgdGhlIHZhbHVlIHlvdXIgTGludXgga2VybmVsIHVzZXMgZm9yIEhaIGFzIGRlZmluZWQgaW4KKyogICAgICAgICAgIC91c3IvaW5jbHVkZS9hc20vcGFyYW0uaCwgdGhpcyBkZXRlcm1pbmVzIHRoZSBmdW5kYW1lbnRhbAorKiAgICAgICAgICAgZnJlcXVlbmN5IG9mIHRoZSBjbG9jayB0aWNrcyBvbiB5b3VyIExpbnV4IHN5c3RlbS4gIFRoZSBrZXJuZWwKKyogICAgICAgICAgIG11c3QgYmUgcmVidWlsdCBpZiB5b3UgY2hhbmdlIHRoaXMgdmFsdWUsIGFsc28gYWxsIG1vZHVsZXMgeW91CisqICAgICAgICAgICB1c2UgKGV4Y2VwdCB0aGlzIG9uZSkgbXVzdCBiZSByZWNvbXBpbGVkLiAgVGhlIGRlZmF1bHQgdmFsdWUKKyogICAgICAgICAgIGlzIDEwMCwgYW5kIHlvdSBvbmx5IG5lZWQgdG8gdXNlIHRoaXMgSU9DVEwgaWYgeW91IHVzZSBzb21lCisqICAgICAgICAgICBvdGhlciB2YWx1ZS4KKyoKKyoKKyogSVhKQ1RMX1JBVEUgc2V0cyB0aGUgbnVtYmVyIG9mIHRpbWVzIHBlciBzZWNvbmQgdGhhdCB0aGUgZHJpdmVyIHBvbGxzCisqICAgICAgICAgICAgIHRoZSBEU1AuICBUaGlzIHZhbHVlIGNhbm5vdCBiZSBsYXJnZXIgdGhhbiBIWi4gIEJ5CisqICAgICAgICAgICAgIGluY3JlYXNpbmcgYm90aCBvZiB0aGVzZSB2YWx1ZXMsIHlvdSBtYXkgYmUgYWJsZSB0byByZWR1Y2UKKyogICAgICAgICAgICAgbGF0ZW5jeSBiZWNhdXNlIHRoZSBtYXggaGFuZyB0aW1lIHRoYXQgY2FuIGV4aXN0IGJldHdlZW4gdGhlCisqICAgICAgICAgICAgIGRyaXZlciBhbmQgdGhlIERTUCB3aWxsIGJlIHJlZHVjZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgSVhKQ1RMX0haICAgICAgICAgICAgICAgICAgICAgICBfSU9XICgncScsIDB4RTAsIGludCkKKyNkZWZpbmUgSVhKQ1RMX1JBVEUgICAgICAgICAgICAgICAgICAgICBfSU9XICgncScsIDB4RTEsIGludCkKKyNkZWZpbmUgSVhKQ1RMX0ZSQU1FU19SRUFECQlfSU9SICgncScsIDB4RTIsIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIElYSkNUTF9GUkFNRVNfV1JJVFRFTgkJX0lPUiAoJ3EnLCAweEUzLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBJWEpDVExfUkVBRF9XQUlUCQlfSU9SICgncScsIDB4RTQsIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIElYSkNUTF9XUklURV9XQUlUCQlfSU9SICgncScsIDB4RTUsIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIElYSkNUTF9EUllCVUZGRVJfUkVBRAkJX0lPUiAoJ3EnLCAweEU2LCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBJWEpDVExfRFJZQlVGRkVSX0NMRUFSCQlfSU8gICgncScsIDB4RTcpCisjZGVmaW5lIElYSkNUTF9EVE1GX1BSRVNDQUxFCQlfSU9XICgncScsIDB4RTgsIGludCkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBUaGlzIGlvY3RsIGFsbG93cyB0aGUgdXNlciBhcHBsaWNhdGlvbiB0byBjb250cm9sIHdoYXQgZXZlbnRzIHRoZSBkcml2ZXIKKyogd2lsbCBzZW5kIHNpZ25hbHMgZm9yLCBhbmQgd2hhdCBzaWduYWxzIGl0IHdpbGwgc2VuZCBmb3Igd2hpY2ggZXZlbnQuCisqIEJ5IGRlZmF1bHQsIGlmIHNpZ25hbGluZyBpcyBlbmFibGVkLCBhbGwgZXZlbnRzIHdpbGwgc2VuZCBTSUdJTyB3aGVuCisqIHRoZXkgb2NjdXIuICBUbyBkaXNhYmxlIHNpZ25hbHMgZm9yIGFuIGV2ZW50IHNldCB0aGUgc2lnbmFsIHRvIDAuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIGVudW0geworCVNJR19EVE1GX1JFQURZLAorCVNJR19IT09LU1RBVEUsCisJU0lHX0ZMQVNILAorCVNJR19QU1ROX1JJTkcsCisJU0lHX0NBTExFUl9JRCwKKwlTSUdfUFNUTl9XSU5LLAorCVNJR19GMCwgU0lHX0YxLCBTSUdfRjIsIFNJR19GMywKKwlTSUdfRkMwLCBTSUdfRkMxLCBTSUdfRkMyLCBTSUdfRkMzLAorCVNJR19SRUFEX1JFQURZID0gMzMsCisJU0lHX1dSSVRFX1JFQURZID0gMzQKK30gSVhKX1NJR0VWRU5UOworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IGV2ZW50OworCWludCBzaWduYWw7Cit9IElYSl9TSUdERUY7CisKKyNkZWZpbmUgSVhKQ1RMX1NJR0NUTAkJCV9JT1cgKCdxJywgMHhFOSwgSVhKX1NJR0RFRiAqKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIFRoZXNlIGlvY3RscyBhbGxvdyB0aGUgdXNlciBhcHBsaWNhdGlvbiB0byBjaGFuZ2UgdGhlIGdhaW4gaW4gdGhlIAorKiBTbWFydCBDYWJsZSBvZiB0aGUgSW50ZXJuZXQgUGhvbmUgQ2FyZC4gIFNlbmRpbmcgLTEgYXMgYSB2YWx1ZSB3aWxsIGNhdXNlCisqIHJldHVybiB2YWx1ZSB0byBiZSB0aGUgY3VycmVudCBzZXR0aW5nLiAgVmFsaWQgdmFsdWVzIHRvIHNldCBhcmUgMHgwMCAtIDB4MUYKKyoKKyogMTExMTEgPSArMTIgZEIKKyogMTAxMTEgPSAgIDAgZEIKKyogMDAwMDAgPSAtMzQuNSBkQgorKgorKiBJWEpDVExfU0NfUlhHIHNldHMgdGhlIFJlY2VpdmUgZ2FpbgorKiBJWEpDVExfU0NfVFhHIHNldHMgdGhlIFRyYW5zbWl0IGdhaW4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSVhKQ1RMX1NDX1JYRwkJCV9JT1cgKCdxJywgMHhFQSwgaW50KQorI2RlZmluZSBJWEpDVExfU0NfVFhHCQkJX0lPVyAoJ3EnLCAweEVCLCBpbnQpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogVGhlIGludGVyY29tIElPQ1RMJ3Mgc2hvcnQgdGhlIG91dHB1dCBmcm9tIG9uZSBjYXJkIHRvIHRoZSBpbnB1dCBvZiB0aGUKKyogb3RoZXIgYW5kIHZpY2UgdmVyc2EgKGFjdHVhbGx5IGRvbmUgaW4gdGhlIERTUCByZWFkIGZ1bmN0aW9uKS4gIEl0IGlzIG9ubHkKKyogbmVjZXNzYXJ5IHRvIGV4ZWN1dGUgdGhlIElPQ1RMIG9uIG9uZSBjYXJkLCBidXQgaXQgaXMgbmVjZXNzYXJ5IHRvIGhhdmUKKyogYm90aCBkZXZpY2VzIG9wZW4gdG8gYmUgYWJsZSB0byBkZXRlY3QgaG9vayBzd2l0Y2ggY2hhbmdlcy4gIFRoZSByZWNvcmQKKyogY29kZWMgYW5kIHJhdGUgb2YgZWFjaCBjYXJkIG11c3QgbWF0Y2ggdGhlIHBsYXliYWNrIGNvZGVjIGFuZCByYXRlIG9mCisqIHRoZSBvdGhlciBjYXJkIGZvciB0aGlzIHRvIHdvcmsgcHJvcGVybHkuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgSVhKQ1RMX0lOVEVSQ09NX1NUQVJUIAkJX0lPVyAoJ3EnLCAweEZELCBpbnQpCisjZGVmaW5lIElYSkNUTF9JTlRFUkNPTV9TVE9QICAJCV9JT1cgKCdxJywgMHhGRSwgaW50KQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogbmV3IHN0cnVjdHVyZSBmb3IgYWNjZXNzaW5nIHJhdyBmaWx0ZXIgaW5mb3JtYXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IGZpbHRlcjsKKwljaGFyIGVuYWJsZTsKKwl1bnNpZ25lZCBpbnQgY29lZmZbMTldOworfSBJWEpfRklMVEVSX1JBVzsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvamZmczIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9qZmZzMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOGI3MTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvamZmczIuaApAQCAtMCwwICsxLDIyMyBAQAorLyoKKyAqIEpGRlMyIC0tIEpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtLCBWZXJzaW9uIDIuCisgKgorICogQ29weXJpZ2h0IMKpIDIwMDEtMjAwNyBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgwqkgMjAwNC0yMDEwIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KKyAqCisgKiBDcmVhdGVkIGJ5IERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KKyAqCisgKiBGb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uLCBzZWUgdGhlIGZpbGUgJ0xJQ0VOQ0UnIGluIHRoZQorICogamZmczIgZGlyZWN0b3J5LgorICovCisKKyNpZm5kZWYgX19MSU5VWF9KRkZTMl9IX18KKyNkZWZpbmUgX19MSU5VWF9KRkZTMl9IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KKworLyogWW91IG11c3QgaW5jbHVkZSBzb21ldGhpbmcgd2hpY2ggZGVmaW5lcyB0aGUgQzk5IHVpbnRYWF90IHR5cGVzLiAKKyAgIFdlIGRvbid0IGRvIGl0IGZyb20gaGVyZSBiZWNhdXNlIHRoaXMgZmlsZSBpcyB1c2VkIGluIHRvbyBtYW55CisgICBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLiAqLworCisvKiBWYWx1ZXMgd2UgbWF5IGV4cGVjdCB0byBmaW5kIGluIHRoZSAnbWFnaWMnIGZpZWxkICovCisjZGVmaW5lIEpGRlMyX09MRF9NQUdJQ19CSVRNQVNLIDB4MTk4NAorI2RlZmluZSBKRkZTMl9NQUdJQ19CSVRNQVNLIDB4MTk4NQorI2RlZmluZSBLU0FNVElCX0NJR0FNXzJTRkZKIDB4ODUxOSAvKiBGb3IgZGV0ZWN0aW5nIHdyb25nLWVuZGlhbiBmcyAqLworI2RlZmluZSBKRkZTMl9FTVBUWV9CSVRNQVNLIDB4ZmZmZgorI2RlZmluZSBKRkZTMl9ESVJUWV9CSVRNQVNLIDB4MDAwMAorCisvKiBTdW1tYXJ5IG5vZGUgTUFHSUMgbWFya2VyICovCisjZGVmaW5lIEpGRlMyX1NVTV9NQUdJQwkweDAyODUxODg1CisKKy8qIFdlIG9ubHkgYWxsb3cgYSBzaW5nbGUgY2hhciBmb3IgbGVuZ3RoLCBhbmQgMHhGRiBpcyBlbXB0eSBmbGFzaCBzbworICAgd2UgZG9uJ3Qgd2FudCBpdCBjb25mdXNlZCB3aXRoIGEgcmVhbCBsZW5ndGguIEhlbmNlIG1heCAyNTQuCisqLworI2RlZmluZSBKRkZTMl9NQVhfTkFNRV9MRU4gMjU0CisKKy8qIEhvdyBzbWFsbCBjYW4gd2Ugc2Vuc2libHkgd3JpdGUgbm9kZXM/ICovCisjZGVmaW5lIEpGRlMyX01JTl9EQVRBX0xFTiAxMjgKKworI2RlZmluZSBKRkZTMl9DT01QUl9OT05FCTB4MDAKKyNkZWZpbmUgSkZGUzJfQ09NUFJfWkVSTwkweDAxCisjZGVmaW5lIEpGRlMyX0NPTVBSX1JUSU1FCTB4MDIKKyNkZWZpbmUgSkZGUzJfQ09NUFJfUlVCSU5NSVBTCTB4MDMKKyNkZWZpbmUgSkZGUzJfQ09NUFJfQ09QWQkweDA0CisjZGVmaW5lIEpGRlMyX0NPTVBSX0RZTlJVQklOCTB4MDUKKyNkZWZpbmUgSkZGUzJfQ09NUFJfWkxJQgkweDA2CisjZGVmaW5lIEpGRlMyX0NPTVBSX0xaTwkJMHgwNworLyogQ29tcGF0aWJpbGl0eSBmbGFncy4gKi8KKyNkZWZpbmUgSkZGUzJfQ09NUEFUX01BU0sgMHhjMDAwICAgICAgLyogV2hhdCBkbyB0byBpZiBhbiB1bmtub3duIG5vZGV0eXBlIGlzIGZvdW5kICovCisjZGVmaW5lIEpGRlMyX05PREVfQUNDVVJBVEUgMHgyMDAwCisvKiBJTkNPTVBBVDogRmFpbCB0byBtb3VudCB0aGUgZmlsZXN5c3RlbSAqLworI2RlZmluZSBKRkZTMl9GRUFUVVJFX0lOQ09NUEFUIDB4YzAwMAorLyogUk9DT01QQVQ6IE1vdW50IHJlYWQtb25seSAqLworI2RlZmluZSBKRkZTMl9GRUFUVVJFX1JPQ09NUEFUIDB4ODAwMAorLyogUldDT01QQVRfQ09QWTogTW91bnQgcmVhZC93cml0ZSwgYW5kIGNvcHkgdGhlIG5vZGUgd2hlbiBpdCdzIEdDJ2QgKi8KKyNkZWZpbmUgSkZGUzJfRkVBVFVSRV9SV0NPTVBBVF9DT1BZIDB4NDAwMAorLyogUldDT01QQVRfREVMRVRFOiBNb3VudCByZWFkL3dyaXRlLCBhbmQgZGVsZXRlIHRoZSBub2RlIHdoZW4gaXQncyBHQydkICovCisjZGVmaW5lIEpGRlMyX0ZFQVRVUkVfUldDT01QQVRfREVMRVRFIDB4MDAwMAorCisjZGVmaW5lIEpGRlMyX05PREVUWVBFX0RJUkVOVCAoSkZGUzJfRkVBVFVSRV9JTkNPTVBBVCB8IEpGRlMyX05PREVfQUNDVVJBVEUgfCAxKQorI2RlZmluZSBKRkZTMl9OT0RFVFlQRV9JTk9ERSAoSkZGUzJfRkVBVFVSRV9JTkNPTVBBVCB8IEpGRlMyX05PREVfQUNDVVJBVEUgfCAyKQorI2RlZmluZSBKRkZTMl9OT0RFVFlQRV9DTEVBTk1BUktFUiAoSkZGUzJfRkVBVFVSRV9SV0NPTVBBVF9ERUxFVEUgfCBKRkZTMl9OT0RFX0FDQ1VSQVRFIHwgMykKKyNkZWZpbmUgSkZGUzJfTk9ERVRZUEVfUEFERElORyAoSkZGUzJfRkVBVFVSRV9SV0NPTVBBVF9ERUxFVEUgfCBKRkZTMl9OT0RFX0FDQ1VSQVRFIHwgNCkKKworI2RlZmluZSBKRkZTMl9OT0RFVFlQRV9TVU1NQVJZIChKRkZTMl9GRUFUVVJFX1JXQ09NUEFUX0RFTEVURSB8IEpGRlMyX05PREVfQUNDVVJBVEUgfCA2KQorCisjZGVmaW5lIEpGRlMyX05PREVUWVBFX1hBVFRSIChKRkZTMl9GRUFUVVJFX0lOQ09NUEFUIHwgSkZGUzJfTk9ERV9BQ0NVUkFURSB8IDgpCisjZGVmaW5lIEpGRlMyX05PREVUWVBFX1hSRUYgKEpGRlMyX0ZFQVRVUkVfSU5DT01QQVQgfCBKRkZTMl9OT0RFX0FDQ1VSQVRFIHwgOSkKKworLyogWEFUVFIgUmVsYXRlZCAqLworI2RlZmluZSBKRkZTMl9YUFJFRklYX1VTRVIJCTEJLyogZm9yICJ1c2VyLiIgKi8KKyNkZWZpbmUgSkZGUzJfWFBSRUZJWF9TRUNVUklUWQkJMgkvKiBmb3IgInNlY3VyaXR5LiIgKi8KKyNkZWZpbmUgSkZGUzJfWFBSRUZJWF9BQ0xfQUNDRVNTCTMJLyogZm9yICJzeXN0ZW0ucG9zaXhfYWNsX2FjY2VzcyIgKi8KKyNkZWZpbmUgSkZGUzJfWFBSRUZJWF9BQ0xfREVGQVVMVAk0CS8qIGZvciAic3lzdGVtLnBvc2l4X2FjbF9kZWZhdWx0IiAqLworI2RlZmluZSBKRkZTMl9YUFJFRklYX1RSVVNURUQJCTUJLyogZm9yICJ0cnVzdGVkLioiICovCisKKyNkZWZpbmUgSkZGUzJfQUNMX1ZFUlNJT04JCTB4MDAwMQorCisvLyBNYXliZSBsYXRlci4uLgorLy8jZGVmaW5lIEpGRlMyX05PREVUWVBFX0NIRUNLUE9JTlQgKEpGRlMyX0ZFQVRVUkVfUldDT01QQVRfREVMRVRFIHwgSkZGUzJfTk9ERV9BQ0NVUkFURSB8IDMpCisvLyNkZWZpbmUgSkZGUzJfTk9ERVRZUEVfT1BUSU9OUyAoSkZGUzJfRkVBVFVSRV9SV0NPTVBBVF9DT1BZIHwgSkZGUzJfTk9ERV9BQ0NVUkFURSB8IDQpCisKKworI2RlZmluZSBKRkZTMl9JTk9fRkxBR19QUkVSRUFECSAgMQkvKiBEbyByZWFkX2lub2RlKCkgZm9yIHRoaXMgb25lIGF0CisJCQkJCSAgIG1vdW50IHRpbWUsIGRvbid0IHdhaXQgZm9yIGl0IHRvCisJCQkJCSAgIGhhcHBlbiBsYXRlciAqLworI2RlZmluZSBKRkZTMl9JTk9fRkxBR19VU0VSQ09NUFIgIDIJLyogVXNlciBoYXMgcmVxdWVzdGVkIGEgc3BlY2lmaWMKKwkJCQkJICAgY29tcHJlc3Npb24gdHlwZSAqLworCisKKy8qIFRoZXNlIGNhbiBnbyBvbmNlIHdlJ3ZlIG1hZGUgc3VyZSB3ZSd2ZSBjYXVnaHQgYWxsIHVzZXMgd2l0aG91dAorICAgYnl0ZXN3YXBwaW5nICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwlfX3UzMiB2MzI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGppbnQzMl90OworCit0eXBlZGVmIHN0cnVjdCB7CisJX191MzIgbTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgam1vZGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCV9fdTE2IHYxNjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgamludDE2X3Q7CisKK3N0cnVjdCBqZmZzMl91bmtub3duX25vZGUKK3sKKwkvKiBBbGwgc3RhcnQgbGlrZSB0aGlzICovCisJamludDE2X3QgbWFnaWM7CisJamludDE2X3Qgbm9kZXR5cGU7CisJamludDMyX3QgdG90bGVuOyAvKiBTbyB3ZSBjYW4gc2tpcCBvdmVyIG5vZGVzIHdlIGRvbid0IGdyb2sgKi8KKwlqaW50MzJfdCBoZHJfY3JjOworfTsKKworc3RydWN0IGpmZnMyX3Jhd19kaXJlbnQKK3sKKwlqaW50MTZfdCBtYWdpYzsKKwlqaW50MTZfdCBub2RldHlwZTsJLyogPT0gSkZGUzJfTk9ERVRZUEVfRElSRU5UICovCisJamludDMyX3QgdG90bGVuOworCWppbnQzMl90IGhkcl9jcmM7CisJamludDMyX3QgcGlubzsKKwlqaW50MzJfdCB2ZXJzaW9uOworCWppbnQzMl90IGlubzsgLyogPT0gemVybyBmb3IgdW5saW5rICovCisJamludDMyX3QgbWN0aW1lOworCV9fdTggbnNpemU7CisJX191OCB0eXBlOworCV9fdTggdW51c2VkWzJdOworCWppbnQzMl90IG5vZGVfY3JjOworCWppbnQzMl90IG5hbWVfY3JjOworCV9fdTggbmFtZVswXTsKK307CisKKy8qIFRoZSBKRkZTMiByYXcgaW5vZGUgc3RydWN0dXJlOiBVc2VkIGZvciBzdG9yYWdlIG9uIHBoeXNpY2FsIG1lZGlhLiAgKi8KKy8qIFRoZSB1aWQsIGdpZCwgYXRpbWUsIG10aW1lIGFuZCBjdGltZSBtZW1iZXJzIGNvdWxkIGJlIGxvbmdlciwgYnV0CisgICBhcmUgbGVmdCBsaWtlIHRoaXMgZm9yIHNwYWNlIGVmZmljaWVuY3kuIElmIGFuZCB3aGVuIHBlb3BsZSBkZWNpZGUKKyAgIHRoZXkgcmVhbGx5IG5lZWQgdGhlbSBleHRlbmRlZCwgaXQncyBzaW1wbGUgZW5vdWdoIHRvIGFkZCBzdXBwb3J0IGZvcgorICAgYSBuZXcgdHlwZSBvZiByYXcgbm9kZS4KKyovCitzdHJ1Y3QgamZmczJfcmF3X2lub2RlCit7CisJamludDE2X3QgbWFnaWM7ICAgICAgLyogQSBjb25zdGFudCBtYWdpYyBudW1iZXIuICAqLworCWppbnQxNl90IG5vZGV0eXBlOyAgIC8qID09IEpGRlMyX05PREVUWVBFX0lOT0RFICovCisJamludDMyX3QgdG90bGVuOyAgICAgLyogVG90YWwgbGVuZ3RoIG9mIHRoaXMgbm9kZSAoaW5jIGRhdGEsIGV0Yy4pICovCisJamludDMyX3QgaGRyX2NyYzsKKwlqaW50MzJfdCBpbm87ICAgICAgICAvKiBJbm9kZSBudW1iZXIuICAqLworCWppbnQzMl90IHZlcnNpb247ICAgIC8qIFZlcnNpb24gbnVtYmVyLiAgKi8KKwlqbW9kZV90IG1vZGU7ICAgICAgIC8qIFRoZSBmaWxlJ3MgdHlwZSBvciBtb2RlLiAgKi8KKwlqaW50MTZfdCB1aWQ7ICAgICAgICAvKiBUaGUgZmlsZSdzIG93bmVyLiAgKi8KKwlqaW50MTZfdCBnaWQ7ICAgICAgICAvKiBUaGUgZmlsZSdzIGdyb3VwLiAgKi8KKwlqaW50MzJfdCBpc2l6ZTsgICAgICAvKiBUb3RhbCByZXN1bHRhbnQgc2l6ZSBvZiB0aGlzIGlub2RlICh1c2VkIGZvciB0cnVuY2F0aW9ucykgICovCisJamludDMyX3QgYXRpbWU7ICAgICAgLyogTGFzdCBhY2Nlc3MgdGltZS4gICovCisJamludDMyX3QgbXRpbWU7ICAgICAgLyogTGFzdCBtb2RpZmljYXRpb24gdGltZS4gICovCisJamludDMyX3QgY3RpbWU7ICAgICAgLyogQ2hhbmdlIHRpbWUuICAqLworCWppbnQzMl90IG9mZnNldDsgICAgIC8qIFdoZXJlIHRvIGJlZ2luIHRvIHdyaXRlLiAgKi8KKwlqaW50MzJfdCBjc2l6ZTsgICAgICAvKiAoQ29tcHJlc3NlZCkgZGF0YSBzaXplICovCisJamludDMyX3QgZHNpemU7CSAgICAgLyogU2l6ZSBvZiB0aGUgbm9kZSdzIGRhdGEuIChhZnRlciBkZWNvbXByZXNzaW9uKSAqLworCV9fdTggY29tcHI7ICAgICAgIC8qIENvbXByZXNzaW9uIGFsZ29yaXRobSB1c2VkICovCisJX191OCB1c2VyY29tcHI7ICAgLyogQ29tcHJlc3Npb24gYWxnb3JpdGhtIHJlcXVlc3RlZCBieSB0aGUgdXNlciAqLworCWppbnQxNl90IGZsYWdzOwkgICAgIC8qIFNlZSBKRkZTMl9JTk9fRkxBR18qICovCisJamludDMyX3QgZGF0YV9jcmM7ICAgLyogQ1JDIGZvciB0aGUgKGNvbXByZXNzZWQpIGRhdGEuICAqLworCWppbnQzMl90IG5vZGVfY3JjOyAgIC8qIENSQyBmb3IgdGhlIHJhdyBpbm9kZSAoZXhjbHVkaW5nIGRhdGEpICAqLworCV9fdTggZGF0YVswXTsKK307CisKK3N0cnVjdCBqZmZzMl9yYXdfeGF0dHIgeworCWppbnQxNl90IG1hZ2ljOworCWppbnQxNl90IG5vZGV0eXBlOwkvKiA9IEpGRlMyX05PREVUWVBFX1hBVFRSICovCisJamludDMyX3QgdG90bGVuOworCWppbnQzMl90IGhkcl9jcmM7CisJamludDMyX3QgeGlkOwkJLyogWEFUVFIgaWRlbnRpZmllciBudW1iZXIgKi8KKwlqaW50MzJfdCB2ZXJzaW9uOworCV9fdTggeHByZWZpeDsKKwlfX3U4IG5hbWVfbGVuOworCWppbnQxNl90IHZhbHVlX2xlbjsKKwlqaW50MzJfdCBkYXRhX2NyYzsKKwlqaW50MzJfdCBub2RlX2NyYzsKKwlfX3U4IGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgamZmczJfcmF3X3hyZWYKK3sKKwlqaW50MTZfdCBtYWdpYzsKKwlqaW50MTZfdCBub2RldHlwZTsJLyogPSBKRkZTMl9OT0RFVFlQRV9YUkVGICovCisJamludDMyX3QgdG90bGVuOworCWppbnQzMl90IGhkcl9jcmM7CisJamludDMyX3QgaW5vOwkJLyogaW5vZGUgbnVtYmVyICovCisJamludDMyX3QgeGlkOwkJLyogWEFUVFIgaWRlbnRpZmllciBudW1iZXIgKi8KKwlqaW50MzJfdCB4c2Vxbm87CS8qIHhyZWYgc2VxdWVudGlhbCBudW1iZXIgKi8KKwlqaW50MzJfdCBub2RlX2NyYzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBqZmZzMl9yYXdfc3VtbWFyeQoreworCWppbnQxNl90IG1hZ2ljOworCWppbnQxNl90IG5vZGV0eXBlOyAJLyogPSBKRkZTMl9OT0RFVFlQRV9TVU1NQVJZICovCisJamludDMyX3QgdG90bGVuOworCWppbnQzMl90IGhkcl9jcmM7CisJamludDMyX3Qgc3VtX251bTsJLyogbnVtYmVyIG9mIHN1bSBlbnRyaWVzKi8KKwlqaW50MzJfdCBjbG5fbWtyOwkvKiBjbGVhbiBtYXJrZXIgc2l6ZSwgMCA9IG5vIGNsZWFubWFya2VyICovCisJamludDMyX3QgcGFkZGVkOwkvKiBzdW0gb2YgdGhlIHNpemUgb2YgcGFkZGluZyBub2RlcyAqLworCWppbnQzMl90IHN1bV9jcmM7CS8qIHN1bW1hcnkgaW5mb3JtYXRpb24gY3JjICovCisJamludDMyX3Qgbm9kZV9jcmM7IAkvKiBub2RlIGNyYyAqLworCWppbnQzMl90IHN1bVswXTsgCS8qIGlub2RlIHN1bW1hcnkgaW5mbyAqLworfTsKKwordW5pb24gamZmczJfbm9kZV91bmlvbgoreworCXN0cnVjdCBqZmZzMl9yYXdfaW5vZGUgaTsKKwlzdHJ1Y3QgamZmczJfcmF3X2RpcmVudCBkOworCXN0cnVjdCBqZmZzMl9yYXdfeGF0dHIgeDsKKwlzdHJ1Y3QgamZmczJfcmF3X3hyZWYgcjsKKwlzdHJ1Y3QgamZmczJfcmF3X3N1bW1hcnkgczsKKwlzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlIHU7Cit9OworCisvKiBEYXRhIHBheWxvYWQgZm9yIGRldmljZSBub2Rlcy4gKi8KK3VuaW9uIGpmZnMyX2RldmljZV9ub2RlIHsKKwlqaW50MTZfdCBvbGRfaWQ7CisJamludDMyX3QgbmV3X2lkOworfTsKKworI2VuZGlmIC8qIF9fTElOVVhfSkZGUzJfSF9fICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvam95c3RpY2suaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9qb3lzdGljay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MzY2MWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvam95c3RpY2suaApAQCAtMCwwICsxLDEzNiBAQAorI2lmbmRlZiBfTElOVVhfSk9ZU1RJQ0tfSAorI2RlZmluZSBfTElOVVhfSk9ZU1RJQ0tfSAorCisvKgorICogIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwIFZvanRlY2ggUGF2bGlrCisgKgorICogIFNwb25zb3JlZCBieSBTdVNFCisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKiAKKyAqIFNob3VsZCB5b3UgbmVlZCB0byBjb250YWN0IG1lLCB0aGUgYXV0aG9yLCB5b3UgY2FuIGRvIHNvIGVpdGhlciBieQorICogZS1tYWlsIC0gbWFpbCB5b3VyIG1lc3NhZ2UgdG8gPHZvanRlY2hAc3VzZS5jej4sIG9yIGJ5IHBhcGVyIG1haWw6CisgKiBWb2p0ZWNoIFBhdmxpaywgVWNpdGVsc2thIDE1NzYsIFByYWd1ZSA4LCAxODIgMDAgQ3plY2ggUmVwdWJsaWMKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorCisvKgorICogVmVyc2lvbgorICovCisKKyNkZWZpbmUgSlNfVkVSU0lPTgkJMHgwMjAxMDAKKworLyoKKyAqIFR5cGVzIGFuZCBjb25zdGFudHMgZm9yIHJlYWRpbmcgZnJvbSAvZGV2L2pzCisgKi8KKworI2RlZmluZSBKU19FVkVOVF9CVVRUT04JCTB4MDEJLyogYnV0dG9uIHByZXNzZWQvcmVsZWFzZWQgKi8KKyNkZWZpbmUgSlNfRVZFTlRfQVhJUwkJMHgwMgkvKiBqb3lzdGljayBtb3ZlZCAqLworI2RlZmluZSBKU19FVkVOVF9JTklUCQkweDgwCS8qIGluaXRpYWwgc3RhdGUgb2YgZGV2aWNlICovCisKK3N0cnVjdCBqc19ldmVudCB7CisJX191MzIgdGltZTsJLyogZXZlbnQgdGltZXN0YW1wIGluIG1pbGxpc2Vjb25kcyAqLworCV9fczE2IHZhbHVlOwkvKiB2YWx1ZSAqLworCV9fdTggdHlwZTsJLyogZXZlbnQgdHlwZSAqLworCV9fdTggbnVtYmVyOwkvKiBheGlzL2J1dHRvbiBudW1iZXIgKi8KK307CisKKy8qCisgKiBJT0NUTCBjb21tYW5kcyBmb3Igam95c3RpY2sgZHJpdmVyCisgKi8KKworI2RlZmluZSBKU0lPQ0dWRVJTSU9OCQlfSU9SKCdqJywgMHgwMSwgX191MzIpCQkJCS8qIGdldCBkcml2ZXIgdmVyc2lvbiAqLworCisjZGVmaW5lIEpTSU9DR0FYRVMJCV9JT1IoJ2onLCAweDExLCBfX3U4KQkJCQkvKiBnZXQgbnVtYmVyIG9mIGF4ZXMgKi8KKyNkZWZpbmUgSlNJT0NHQlVUVE9OUwkJX0lPUignaicsIDB4MTIsIF9fdTgpCQkJCS8qIGdldCBudW1iZXIgb2YgYnV0dG9ucyAqLworI2RlZmluZSBKU0lPQ0dOQU1FKGxlbikJCV9JT0MoX0lPQ19SRUFELCAnaicsIDB4MTMsIGxlbikJCQkvKiBnZXQgaWRlbnRpZmllciBzdHJpbmcgKi8KKworI2RlZmluZSBKU0lPQ1NDT1JSCQlfSU9XKCdqJywgMHgyMSwgc3RydWN0IGpzX2NvcnIpCQkJLyogc2V0IGNvcnJlY3Rpb24gdmFsdWVzICovCisjZGVmaW5lIEpTSU9DR0NPUlIJCV9JT1IoJ2onLCAweDIyLCBzdHJ1Y3QganNfY29ycikJCQkvKiBnZXQgY29ycmVjdGlvbiB2YWx1ZXMgKi8KKworI2RlZmluZSBKU0lPQ1NBWE1BUAkJX0lPVygnaicsIDB4MzEsIF9fdThbQUJTX0NOVF0pCQkJLyogc2V0IGF4aXMgbWFwcGluZyAqLworI2RlZmluZSBKU0lPQ0dBWE1BUAkJX0lPUignaicsIDB4MzIsIF9fdThbQUJTX0NOVF0pCQkJLyogZ2V0IGF4aXMgbWFwcGluZyAqLworI2RlZmluZSBKU0lPQ1NCVE5NQVAJCV9JT1coJ2onLCAweDMzLCBfX3UxNltLRVlfTUFYIC0gQlROX01JU0MgKyAxXSkJLyogc2V0IGJ1dHRvbiBtYXBwaW5nICovCisjZGVmaW5lIEpTSU9DR0JUTk1BUAkJX0lPUignaicsIDB4MzQsIF9fdTE2W0tFWV9NQVggLSBCVE5fTUlTQyArIDFdKQkvKiBnZXQgYnV0dG9uIG1hcHBpbmcgKi8KKworLyoKKyAqIFR5cGVzIGFuZCBjb25zdGFudHMgZm9yIGdldC9zZXQgY29ycmVjdGlvbgorICovCisKKyNkZWZpbmUgSlNfQ09SUl9OT05FCQkweDAwCS8qIHJldHVybnMgcmF3IHZhbHVlcyAqLworI2RlZmluZSBKU19DT1JSX0JST0tFTgkJMHgwMQkvKiBicm9rZW4gbGluZSAqLworCitzdHJ1Y3QganNfY29yciB7CisJX19zMzIgY29lZls4XTsKKwlfX3MxNiBwcmVjOworCV9fdTE2IHR5cGU7Cit9OworCisvKgorICogdjAueCBjb21wYXRpYmlsaXR5IGRlZmluaXRpb25zCisgKi8KKworI2RlZmluZSBKU19SRVRVUk4JCXNpemVvZihzdHJ1Y3QgSlNfREFUQV9UWVBFKQorI2RlZmluZSBKU19UUlVFCQkJMQorI2RlZmluZSBKU19GQUxTRQkJMAorI2RlZmluZSBKU19YXzAJCQkweDAxCisjZGVmaW5lIEpTX1lfMAkJCTB4MDIKKyNkZWZpbmUgSlNfWF8xCQkJMHgwNAorI2RlZmluZSBKU19ZXzEJCQkweDA4CisjZGVmaW5lIEpTX01BWAkJCTIKKworI2RlZmluZSBKU19ERUZfVElNRU9VVAkJMHgxMzAwCisjZGVmaW5lIEpTX0RFRl9DT1JSCQkwCisjZGVmaW5lIEpTX0RFRl9USU1FTElNSVQJMTBMCisKKyNkZWZpbmUgSlNfU0VUX0NBTAkJMQorI2RlZmluZSBKU19HRVRfQ0FMCQkyCisjZGVmaW5lIEpTX1NFVF9USU1FT1VUCQkzCisjZGVmaW5lIEpTX0dFVF9USU1FT1VUCQk0CisjZGVmaW5lIEpTX1NFVF9USU1FTElNSVQJNQorI2RlZmluZSBKU19HRVRfVElNRUxJTUlUCTYKKyNkZWZpbmUgSlNfR0VUX0FMTAkJNworI2RlZmluZSBKU19TRVRfQUxMCQk4CisKK3N0cnVjdCBKU19EQVRBX1RZUEUgeworCV9fczMyIGJ1dHRvbnM7CisJX19zMzIgeDsKKwlfX3MzMiB5OworfTsKKworc3RydWN0IEpTX0RBVEFfU0FWRV9UWVBFXzMyIHsKKwlfX3MzMiBKU19USU1FT1VUOworCV9fczMyIEJVU1k7CisJX19zMzIgSlNfRVhQSVJFVElNRTsKKwlfX3MzMiBKU19USU1FTElNSVQ7CisJc3RydWN0IEpTX0RBVEFfVFlQRSBKU19TQVZFOworCXN0cnVjdCBKU19EQVRBX1RZUEUgSlNfQ09SUjsKK307CisKK3N0cnVjdCBKU19EQVRBX1NBVkVfVFlQRV82NCB7CisJX19zMzIgSlNfVElNRU9VVDsKKwlfX3MzMiBCVVNZOworCV9fczY0IEpTX0VYUElSRVRJTUU7CisJX19zNjQgSlNfVElNRUxJTUlUOworCXN0cnVjdCBKU19EQVRBX1RZUEUgSlNfU0FWRTsKKwlzdHJ1Y3QgSlNfREFUQV9UWVBFIEpTX0NPUlI7Cit9OworCisKKyNlbmRpZiAvKiBfTElOVVhfSk9ZU1RJQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2tkLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgva2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWM4MTIyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2tkLmgKQEAgLTAsMCArMSwxODIgQEAKKyNpZm5kZWYgX0xJTlVYX0tEX0gKKyNkZWZpbmUgX0xJTlVYX0tEX0gKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisKKy8qIDB4NEIgaXMgJ0snLCB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCB0ZXJtaW9zIGFuZCB2dCAqLworCisjZGVmaW5lIEdJT19GT05UCTB4NEI2MAkvKiBnZXRzIGZvbnQgaW4gZXhwYW5kZWQgZm9ybSAqLworI2RlZmluZSBQSU9fRk9OVAkweDRCNjEJLyogdXNlIGZvbnQgaW4gZXhwYW5kZWQgZm9ybSAqLworCisjZGVmaW5lIEdJT19GT05UWAkweDRCNkIJLyogZ2V0IGZvbnQgdXNpbmcgc3RydWN0IGNvbnNvbGVmb250ZGVzYyAqLworI2RlZmluZSBQSU9fRk9OVFgJMHg0QjZDCS8qIHNldCBmb250IHVzaW5nIHN0cnVjdCBjb25zb2xlZm9udGRlc2MgKi8KK3N0cnVjdCBjb25zb2xlZm9udGRlc2MgeworCXVuc2lnbmVkIHNob3J0IGNoYXJjb3VudDsJLyogY2hhcmFjdGVycyBpbiBmb250ICgyNTYgb3IgNTEyKSAqLworCXVuc2lnbmVkIHNob3J0IGNoYXJoZWlnaHQ7CS8qIHNjYW4gbGluZXMgcGVyIGNoYXJhY3RlciAoMS0zMikgKi8KKwljaGFyICpjaGFyZGF0YTsJCS8qIGZvbnQgZGF0YSBpbiBleHBhbmRlZCBmb3JtICovCit9OworCisjZGVmaW5lIFBJT19GT05UUkVTRVQgICAweDRCNkQJLyogcmVzZXQgdG8gZGVmYXVsdCBmb250ICovCisKKyNkZWZpbmUgR0lPX0NNQVAJMHg0QjcwCS8qIGdldHMgY29sb3VyIHBhbGV0dGUgb24gVkdBKyAqLworI2RlZmluZSBQSU9fQ01BUAkweDRCNzEJLyogc2V0cyBjb2xvdXIgcGFsZXR0ZSBvbiBWR0ErICovCisKKyNkZWZpbmUgS0lPQ1NPVU5ECTB4NEIyRgkvKiBzdGFydCBzb3VuZCBnZW5lcmF0aW9uICgwIGZvciBvZmYpICovCisjZGVmaW5lIEtETUtUT05FCTB4NEIzMAkvKiBnZW5lcmF0ZSB0b25lICovCisKKyNkZWZpbmUgS0RHRVRMRUQJMHg0QjMxCS8qIHJldHVybiBjdXJyZW50IGxlZCBzdGF0ZSAqLworI2RlZmluZSBLRFNFVExFRAkweDRCMzIJLyogc2V0IGxlZCBzdGF0ZSBbbGlnaHRzLCBub3QgZmxhZ3NdICovCisjZGVmaW5lIAlMRURfU0NSCQkweDAxCS8qIHNjcm9sbCBsb2NrIGxlZCAqLworI2RlZmluZSAJTEVEX05VTQkJMHgwMgkvKiBudW0gbG9jayBsZWQgKi8KKyNkZWZpbmUgCUxFRF9DQVAJCTB4MDQJLyogY2FwcyBsb2NrIGxlZCAqLworCisjZGVmaW5lIEtER0tCVFlQRQkweDRCMzMJLyogZ2V0IGtleWJvYXJkIHR5cGUgKi8KKyNkZWZpbmUgCUtCXzg0CQkweDAxCisjZGVmaW5lIAlLQl8xMDEJCTB4MDIgCS8qIHRoaXMgaXMgd2hhdCB3ZSBhbHdheXMgYW5zd2VyICovCisjZGVmaW5lIAlLQl9PVEhFUgkweDAzCisKKyNkZWZpbmUgS0RBRERJTwkJMHg0QjM0CS8qIGFkZCBpL28gcG9ydCBhcyB2YWxpZCAqLworI2RlZmluZSBLRERFTElPCQkweDRCMzUJLyogZGVsIGkvbyBwb3J0IGFzIHZhbGlkICovCisjZGVmaW5lIEtERU5BQklPCTB4NEIzNgkvKiBlbmFibGUgaS9vIHRvIHZpZGVvIGJvYXJkICovCisjZGVmaW5lIEtERElTQUJJTwkweDRCMzcJLyogZGlzYWJsZSBpL28gdG8gdmlkZW8gYm9hcmQgKi8KKworI2RlZmluZSBLRFNFVE1PREUJMHg0QjNBCS8qIHNldCB0ZXh0L2dyYXBoaWNzIG1vZGUgKi8KKyNkZWZpbmUJCUtEX1RFWFQJCTB4MDAKKyNkZWZpbmUJCUtEX0dSQVBISUNTCTB4MDEKKyNkZWZpbmUJCUtEX1RFWFQwCTB4MDIJLyogb2Jzb2xldGUgKi8KKyNkZWZpbmUJCUtEX1RFWFQxCTB4MDMJLyogb2Jzb2xldGUgKi8KKyNkZWZpbmUgS0RHRVRNT0RFCTB4NEIzQgkvKiBnZXQgY3VycmVudCBtb2RlICovCisKKyNkZWZpbmUgS0RNQVBESVNQCTB4NEIzQwkvKiBtYXAgZGlzcGxheSBpbnRvIGFkZHJlc3Mgc3BhY2UgKi8KKyNkZWZpbmUgS0RVTk1BUERJU1AJMHg0QjNECS8qIHVubWFwIGRpc3BsYXkgZnJvbSBhZGRyZXNzIHNwYWNlICovCisKK3R5cGVkZWYgY2hhciBzY3JubWFwX3Q7CisjZGVmaW5lCQlFX1RBQlNaCQkyNTYKKyNkZWZpbmUgR0lPX1NDUk5NQVAJMHg0QjQwCS8qIGdldCBzY3JlZW4gbWFwcGluZyBmcm9tIGtlcm5lbCAqLworI2RlZmluZSBQSU9fU0NSTk1BUAkweDRCNDEJLyogcHV0IHNjcmVlbiBtYXBwaW5nIHRhYmxlIGluIGtlcm5lbCAqLworI2RlZmluZSBHSU9fVU5JU0NSTk1BUCAgMHg0QjY5CS8qIGdldCBmdWxsIFVuaWNvZGUgc2NyZWVuIG1hcHBpbmcgKi8KKyNkZWZpbmUgUElPX1VOSVNDUk5NQVAgIDB4NEI2QSAgLyogc2V0IGZ1bGwgVW5pY29kZSBzY3JlZW4gbWFwcGluZyAqLworCisjZGVmaW5lIEdJT19VTklNQVAJMHg0QjY2CS8qIGdldCB1bmljb2RlLXRvLWZvbnQgbWFwcGluZyBmcm9tIGtlcm5lbCAqLworc3RydWN0IHVuaXBhaXIgeworCXVuc2lnbmVkIHNob3J0IHVuaWNvZGU7CisJdW5zaWduZWQgc2hvcnQgZm9udHBvczsKK307CitzdHJ1Y3QgdW5pbWFwZGVzYyB7CisJdW5zaWduZWQgc2hvcnQgZW50cnlfY3Q7CisJc3RydWN0IHVuaXBhaXIgKmVudHJpZXM7Cit9OworI2RlZmluZSBQSU9fVU5JTUFQCTB4NEI2NwkvKiBwdXQgdW5pY29kZS10by1mb250IG1hcHBpbmcgaW4ga2VybmVsICovCisjZGVmaW5lIFBJT19VTklNQVBDTFIJMHg0QjY4CS8qIGNsZWFyIHRhYmxlLCBwb3NzaWJseSBhZHZpc2UgaGFzaCBhbGdvcml0aG0gKi8KK3N0cnVjdCB1bmltYXBpbml0IHsKKwl1bnNpZ25lZCBzaG9ydCBhZHZpc2VkX2hhc2hzaXplOyAgLyogMCBpZiBubyBvcGluaW9uICovCisJdW5zaWduZWQgc2hvcnQgYWR2aXNlZF9oYXNoc3RlcDsgIC8qIDAgaWYgbm8gb3BpbmlvbiAqLworCXVuc2lnbmVkIHNob3J0IGFkdmlzZWRfaGFzaGxldmVsOyAvKiAwIGlmIG5vIG9waW5pb24gKi8KK307CisKKyNkZWZpbmUgVU5JX0RJUkVDVF9CQVNFIDB4RjAwMAkvKiBzdGFydCBvZiBEaXJlY3QgRm9udCBSZWdpb24gKi8KKyNkZWZpbmUgVU5JX0RJUkVDVF9NQVNLIDB4MDFGRgkvKiBEaXJlY3QgRm9udCBSZWdpb24gYml0bWFzayAqLworCisjZGVmaW5lCQlLX1JBVwkJMHgwMAorI2RlZmluZQkJS19YTEFURQkJMHgwMQorI2RlZmluZQkJS19NRURJVU1SQVcJMHgwMgorI2RlZmluZQkJS19VTklDT0RFCTB4MDMKKyNkZWZpbmUgS0RHS0JNT0RFCTB4NEI0NAkvKiBnZXRzIGN1cnJlbnQga2V5Ym9hcmQgbW9kZSAqLworI2RlZmluZSBLRFNLQk1PREUJMHg0QjQ1CS8qIHNldHMgY3VycmVudCBrZXlib2FyZCBtb2RlICovCisKKyNkZWZpbmUJCUtfTUVUQUJJVAkweDAzCisjZGVmaW5lCQlLX0VTQ1BSRUZJWAkweDA0CisjZGVmaW5lIEtER0tCTUVUQQkweDRCNjIJLyogZ2V0cyBtZXRhIGtleSBoYW5kbGluZyBtb2RlICovCisjZGVmaW5lIEtEU0tCTUVUQQkweDRCNjMJLyogc2V0cyBtZXRhIGtleSBoYW5kbGluZyBtb2RlICovCisKKyNkZWZpbmUJCUtfU0NST0xMTE9DSwkweDAxCisjZGVmaW5lCQlLX05VTUxPQ0sJMHgwMgorI2RlZmluZQkJS19DQVBTTE9DSwkweDA0CisjZGVmaW5lCUtER0tCTEVECTB4NEI2NAkvKiBnZXQgbGVkIGZsYWdzIChub3QgbGlnaHRzKSAqLworI2RlZmluZQlLRFNLQkxFRAkweDRCNjUJLyogc2V0IGxlZCBmbGFncyAobm90IGxpZ2h0cykgKi8KKworc3RydWN0IGtiZW50cnkgeworCXVuc2lnbmVkIGNoYXIga2JfdGFibGU7CisJdW5zaWduZWQgY2hhciBrYl9pbmRleDsKKwl1bnNpZ25lZCBzaG9ydCBrYl92YWx1ZTsKK307CisjZGVmaW5lCQlLX05PUk1UQUIJMHgwMAorI2RlZmluZQkJS19TSElGVFRBQgkweDAxCisjZGVmaW5lCQlLX0FMVFRBQgkweDAyCisjZGVmaW5lCQlLX0FMVFNISUZUVEFCCTB4MDMKKworI2RlZmluZSBLREdLQkVOVAkweDRCNDYJLyogZ2V0cyBvbmUgZW50cnkgaW4gdHJhbnNsYXRpb24gdGFibGUgKi8KKyNkZWZpbmUgS0RTS0JFTlQJMHg0QjQ3CS8qIHNldHMgb25lIGVudHJ5IGluIHRyYW5zbGF0aW9uIHRhYmxlICovCisKK3N0cnVjdCBrYnNlbnRyeSB7CisJdW5zaWduZWQgY2hhciBrYl9mdW5jOworCXVuc2lnbmVkIGNoYXIga2Jfc3RyaW5nWzUxMl07Cit9OworI2RlZmluZSBLREdLQlNFTlQJMHg0QjQ4CS8qIGdldHMgb25lIGZ1bmN0aW9uIGtleSBzdHJpbmcgZW50cnkgKi8KKyNkZWZpbmUgS0RTS0JTRU5UCTB4NEI0OQkvKiBzZXRzIG9uZSBmdW5jdGlvbiBrZXkgc3RyaW5nIGVudHJ5ICovCisKK3N0cnVjdCBrYmRpYWNyIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBkaWFjciwgYmFzZSwgcmVzdWx0OworfTsKK3N0cnVjdCBrYmRpYWNycyB7CisgICAgICAgIHVuc2lnbmVkIGludCBrYl9jbnQ7ICAgIC8qIG51bWJlciBvZiBlbnRyaWVzIGluIGZvbGxvd2luZyBhcnJheSAqLworCXN0cnVjdCBrYmRpYWNyIGtiZGlhY3JbMjU2XTsgICAgLyogTUFYX0RJQUNSIGZyb20ga2V5Ym9hcmQuaCAqLworfTsKKyNkZWZpbmUgS0RHS0JESUFDUiAgICAgIDB4NEI0QSAgLyogcmVhZCBrZXJuZWwgYWNjZW50IHRhYmxlICovCisjZGVmaW5lIEtEU0tCRElBQ1IgICAgICAweDRCNEIgIC8qIHdyaXRlIGtlcm5lbCBhY2NlbnQgdGFibGUgKi8KKworc3RydWN0IGtiZGlhY3J1YyB7CisJdW5zaWduZWQgaW50IGRpYWNyLCBiYXNlLCByZXN1bHQ7Cit9Oworc3RydWN0IGtiZGlhY3JzdWMgeworICAgICAgICB1bnNpZ25lZCBpbnQga2JfY250OyAgICAvKiBudW1iZXIgb2YgZW50cmllcyBpbiBmb2xsb3dpbmcgYXJyYXkgKi8KKwlzdHJ1Y3Qga2JkaWFjcnVjIGtiZGlhY3J1Y1syNTZdOyAgICAvKiBNQVhfRElBQ1IgZnJvbSBrZXlib2FyZC5oICovCit9OworI2RlZmluZSBLREdLQkRJQUNSVUMgICAgMHg0QkZBICAvKiByZWFkIGtlcm5lbCBhY2NlbnQgdGFibGUgLSBVQ1MgKi8KKyNkZWZpbmUgS0RTS0JESUFDUlVDICAgIDB4NEJGQiAgLyogd3JpdGUga2VybmVsIGFjY2VudCB0YWJsZSAtIFVDUyAqLworCitzdHJ1Y3Qga2JrZXljb2RlIHsKKwl1bnNpZ25lZCBpbnQgc2NhbmNvZGUsIGtleWNvZGU7Cit9OworI2RlZmluZSBLREdFVEtFWUNPREUJMHg0QjRDCS8qIHJlYWQga2VybmVsIGtleWNvZGUgdGFibGUgZW50cnkgKi8KKyNkZWZpbmUgS0RTRVRLRVlDT0RFCTB4NEI0RAkvKiB3cml0ZSBrZXJuZWwga2V5Y29kZSB0YWJsZSBlbnRyeSAqLworCisjZGVmaW5lIEtEU0lHQUNDRVBUCTB4NEI0RQkvKiBhY2NlcHQga2JkIGdlbmVyYXRlZCBzaWduYWxzICovCisKK3N0cnVjdCBrYmRfcmVwZWF0IHsKKwlpbnQgZGVsYXk7CS8qIGluIG1zZWM7IDw9IDA6IGRvbid0IGNoYW5nZSAqLworCWludCBwZXJpb2Q7CS8qIGluIG1zZWM7IDw9IDA6IGRvbid0IGNoYW5nZSAqLworCQkJLyogZWFybGllciB0aGlzIGZpZWxkIHdhcyBtaXNuYW1lZCAicmF0ZSIgKi8KK307CisKKyNkZWZpbmUgS0RLQkRSRVAgICAgICAgIDB4NEI1MiAgLyogc2V0IGtleWJvYXJkIGRlbGF5L3JlcGVhdCByYXRlOworCQkJCSAqIGFjdHVhbGx5IHVzZWQgdmFsdWVzIGFyZSByZXR1cm5lZCAqLworCisjZGVmaW5lIEtERk9OVE9QCTB4NEI3MgkvKiBmb250IG9wZXJhdGlvbnMgKi8KKworc3RydWN0IGNvbnNvbGVfZm9udF9vcCB7CisJdW5zaWduZWQgaW50IG9wOwkvKiBvcGVyYXRpb24gY29kZSBLRF9GT05UX09QXyogKi8KKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CS8qIEtEX0ZPTlRfRkxBR18qICovCisJdW5zaWduZWQgaW50IHdpZHRoLCBoZWlnaHQ7CS8qIGZvbnQgc2l6ZSAqLworCXVuc2lnbmVkIGludCBjaGFyY291bnQ7CisJdW5zaWduZWQgY2hhciAqZGF0YTsJLyogZm9udCBkYXRhIHdpdGggaGVpZ2h0IGZpeGVkIHRvIDMyICovCit9OworCitzdHJ1Y3QgY29uc29sZV9mb250IHsKKwl1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodDsJLyogZm9udCBzaXplICovCisJdW5zaWduZWQgaW50IGNoYXJjb3VudDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOwkvKiBmb250IGRhdGEgd2l0aCBoZWlnaHQgZml4ZWQgdG8gMzIgKi8KK307CisKKyNkZWZpbmUgS0RfRk9OVF9PUF9TRVQJCTAJLyogU2V0IGZvbnQgKi8KKyNkZWZpbmUgS0RfRk9OVF9PUF9HRVQJCTEJLyogR2V0IGZvbnQgKi8KKyNkZWZpbmUgS0RfRk9OVF9PUF9TRVRfREVGQVVMVAkyCS8qIFNldCBmb250IHRvIGRlZmF1bHQsIGRhdGEgcG9pbnRzIHRvIG5hbWUgLyBOVUxMICovCisjZGVmaW5lIEtEX0ZPTlRfT1BfQ09QWQkJMwkvKiBDb3B5IGZyb20gYW5vdGhlciBjb25zb2xlICovCisKKyNkZWZpbmUgS0RfRk9OVF9GTEFHX0RPTlRfUkVDQUxDIAkxCS8qIERvbid0IHJlY2FsY3VsYXRlIGh3IGNoYXJjZWxsIHNpemUgW2NvbXBhdF0gKi8KKworLyogbm90ZTogMHg0QjAwLTB4NEI0RSBhbGwgaGF2ZSBoYWQgYSB2YWx1ZSBhdCBzb21lIHRpbWU7CisgICBkb24ndCByZXVzZSBmb3IgdGhlIHRpbWUgYmVpbmcgKi8KKy8qIG5vdGU6IDB4NEI2MC0weDRCNkQsIDB4NEI3MC0weDRCNzIgdXNlZCBhYm92ZSAqLworCisjZW5kaWYgLyogX0xJTlVYX0tEX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9rZGV2X3QuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9rZGV2X3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjU1NTFkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2tkZXZfdC5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgX0xJTlVYX0tERVZfVF9ICisjZGVmaW5lIF9MSU5VWF9LREVWX1RfSAorCisvKgorU29tZSBwcm9ncmFtcyB3YW50IHRoZWlyIGRlZmluaXRpb25zIG9mIE1BSk9SIGFuZCBNSU5PUiBhbmQgTUtERVYKK2Zyb20gdGhlIGtlcm5lbCBzb3VyY2VzLiBUaGVzZSBtdXN0IGJlIHRoZSBleHRlcm5hbGx5IHZpc2libGUgb25lcy4KKyovCisjZGVmaW5lIE1BSk9SKGRldikJKChkZXYpPj44KQorI2RlZmluZSBNSU5PUihkZXYpCSgoZGV2KSAmIDB4ZmYpCisjZGVmaW5lIE1LREVWKG1hLG1pKQkoKG1hKTw8OCB8IChtaSkpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9rZXJuZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGRlZWM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC0wLDAgKzEsNjEgQEAKKyNpZm5kZWYgX0xJTlVYX0tFUk5FTF9ICisjZGVmaW5lIF9MSU5VWF9LRVJORUxfSAorCisvKgorICogJ2tlcm5lbC5oJyBjb250YWlucyBzb21lIG9mdGVuLXVzZWQgZnVuY3Rpb24gcHJvdG90eXBlcyBldGMKKyAqLworI2RlZmluZSBfX0FMSUdOX0tFUk5FTCh4LCBhKQkJX19BTElHTl9LRVJORUxfTUFTSyh4LCAodHlwZW9mKHgpKShhKSAtIDEpCisjZGVmaW5lIF9fQUxJR05fS0VSTkVMX01BU0soeCwgbWFzaykJKCgoeCkgKyAobWFzaykpICYgfihtYXNrKSkKKworCisjZGVmaW5lIFNJX0xPQURfU0hJRlQJMTYKK3N0cnVjdCBzeXNpbmZvIHsKKwlsb25nIHVwdGltZTsJCQkvKiBTZWNvbmRzIHNpbmNlIGJvb3QgKi8KKwl1bnNpZ25lZCBsb25nIGxvYWRzWzNdOwkJLyogMSwgNSwgYW5kIDE1IG1pbnV0ZSBsb2FkIGF2ZXJhZ2VzICovCisJdW5zaWduZWQgbG9uZyB0b3RhbHJhbTsJCS8qIFRvdGFsIHVzYWJsZSBtYWluIG1lbW9yeSBzaXplICovCisJdW5zaWduZWQgbG9uZyBmcmVlcmFtOwkJLyogQXZhaWxhYmxlIG1lbW9yeSBzaXplICovCisJdW5zaWduZWQgbG9uZyBzaGFyZWRyYW07CS8qIEFtb3VudCBvZiBzaGFyZWQgbWVtb3J5ICovCisJdW5zaWduZWQgbG9uZyBidWZmZXJyYW07CS8qIE1lbW9yeSB1c2VkIGJ5IGJ1ZmZlcnMgKi8KKwl1bnNpZ25lZCBsb25nIHRvdGFsc3dhcDsJLyogVG90YWwgc3dhcCBzcGFjZSBzaXplICovCisJdW5zaWduZWQgbG9uZyBmcmVlc3dhcDsJCS8qIHN3YXAgc3BhY2Ugc3RpbGwgYXZhaWxhYmxlICovCisJdW5zaWduZWQgc2hvcnQgcHJvY3M7CQkvKiBOdW1iZXIgb2YgY3VycmVudCBwcm9jZXNzZXMgKi8KKwl1bnNpZ25lZCBzaG9ydCBwYWQ7CQkvKiBleHBsaWNpdCBwYWRkaW5nIGZvciBtNjhrICovCisJdW5zaWduZWQgbG9uZyB0b3RhbGhpZ2g7CS8qIFRvdGFsIGhpZ2ggbWVtb3J5IHNpemUgKi8KKwl1bnNpZ25lZCBsb25nIGZyZWVoaWdoOwkJLyogQXZhaWxhYmxlIGhpZ2ggbWVtb3J5IHNpemUgKi8KKwl1bnNpZ25lZCBpbnQgbWVtX3VuaXQ7CQkvKiBNZW1vcnkgdW5pdCBzaXplIGluIGJ5dGVzICovCisJY2hhciBfZlsyMC0yKnNpemVvZihsb25nKS1zaXplb2YoaW50KV07CS8qIFBhZGRpbmc6IGxpYmM1IHVzZXMgdGhpcy4uICovCit9OworCisvKiBGb3JjZSBhIGNvbXBpbGF0aW9uIGVycm9yIGlmIGNvbmRpdGlvbiBpcyB0cnVlICovCisjZGVmaW5lIEJVSUxEX0JVR19PTihjb25kaXRpb24pICgodm9pZClCVUlMRF9CVUdfT05fWkVSTyhjb25kaXRpb24pKQorCisvKiBGb3JjZSBhIGNvbXBpbGF0aW9uIGVycm9yIGlmIGNvbmRpdGlvbiBpcyBjb25zdGFudCBhbmQgdHJ1ZSAqLworI2RlZmluZSBNQVlCRV9CVUlMRF9CVUdfT04oY29uZCkgKCh2b2lkKXNpemVvZihjaGFyWzEgLSAyICogISEoY29uZCldKSkKKworLyogRm9yY2UgYSBjb21waWxhdGlvbiBlcnJvciBpZiBhIGNvbnN0YW50IGV4cHJlc3Npb24gaXMgbm90IGEgcG93ZXIgb2YgMiAqLworI2RlZmluZSBCVUlMRF9CVUdfT05fTk9UX1BPV0VSX09GXzIobikJCQlcCisJQlVJTERfQlVHX09OKChuKSA9PSAwIHx8ICgoKG4pICYgKChuKSAtIDEpKSAhPSAwKSkKKworLyogRm9yY2UgYSBjb21waWxhdGlvbiBlcnJvciBpZiBjb25kaXRpb24gaXMgdHJ1ZSwgYnV0IGFsc28gcHJvZHVjZSBhCisgICByZXN1bHQgKG9mIHZhbHVlIDAgYW5kIHR5cGUgc2l6ZV90KSwgc28gdGhlIGV4cHJlc3Npb24gY2FuIGJlIHVzZWQKKyAgIGUuZy4gaW4gYSBzdHJ1Y3R1cmUgaW5pdGlhbGl6ZXIgKG9yIHdoZXJlLWV2ZXIgZWxzZSBjb21tYSBleHByZXNzaW9ucworICAgYXJlbid0IHBlcm1pdHRlZCkuICovCisjZGVmaW5lIEJVSUxEX0JVR19PTl9aRVJPKGUpIChzaXplb2Yoc3RydWN0IHsgaW50Oi0hIShlKTsgfSkpCisjZGVmaW5lIEJVSUxEX0JVR19PTl9OVUxMKGUpICgodm9pZCAqKXNpemVvZihzdHJ1Y3QgeyBpbnQ6LSEhKGUpOyB9KSkKKworLyogVHJhcCBwYXN0ZXJzIG9mIF9fRlVOQ1RJT05fXyBhdCBjb21waWxlLXRpbWUgKi8KKyNkZWZpbmUgX19GVU5DVElPTl9fIChfX2Z1bmNfXykKKworLyogVGhpcyBoZWxwcyB1cyB0byBhdm9pZCAjaWZkZWYgQ09ORklHX05VTUEgKi8KKyNpZmRlZiBDT05GSUdfTlVNQQorI2RlZmluZSBOVU1BX0JVSUxEIDEKKyNlbHNlCisjZGVmaW5lIE5VTUFfQlVJTEQgMAorI2VuZGlmCisKKy8qIFJlYnVpbGQgZXZlcnl0aGluZyBvbiBDT05GSUdfRlRSQUNFX01DT1VOVF9SRUNPUkQgKi8KKyNpZmRlZiBDT05GSUdfRlRSQUNFX01DT1VOVF9SRUNPUkQKKyMgZGVmaW5lIFJFQlVJTERfRFVFX1RPX0ZUUkFDRV9NQ09VTlRfUkVDT1JECisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgva2VybmVsY2FwaS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2tlcm5lbGNhcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmY2YjQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2tlcm5lbGNhcGkuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogJElkOiBrZXJuZWxjYXBpLmgsdiAxLjguNi4yIDIwMDEvMDIvMDcgMTE6MzE6MzEga2FpIEV4cCAkCisgKiAKKyAqIEtlcm5lbCBDQVBJIDIuMCBJbnRlcmZhY2UgZm9yIExpbnV4CisgKiAKKyAqIChjKSBDb3B5cmlnaHQgMTk5NyBieSBDYXJzdGVuIFBhZXRoIChjYWxsZUBjYWxsZS5pbi1iZXJsaW4uZGUpCisgKiAKKyAqLworCisjaWZuZGVmIF9fS0VSTkVMQ0FQSV9IX18KKyNkZWZpbmUgX19LRVJORUxDQVBJX0hfXworCisjZGVmaW5lIENBUElfTUFYQVBQTAkyNDAJLyogbWF4aW11bSBudW1iZXIgb2YgYXBwbGljYXRpb25zICAqLworI2RlZmluZSBDQVBJX01BWENPTlRSCTMyCS8qIG1heGltdW0gbnVtYmVyIG9mIGNvbnRyb2xsZXIgICAgKi8KKyNkZWZpbmUgQ0FQSV9NQVhEQVRBV0lORE9XCTgKKworCit0eXBlZGVmIHN0cnVjdCBrY2FwaV9mbGFnZGVmIHsKKwlpbnQgY29udHI7CisJaW50IGZsYWc7Cit9IGtjYXBpX2ZsYWdkZWY7CisKK3R5cGVkZWYgc3RydWN0IGtjYXBpX2NhcmRkZWYgeworCWNoYXIJCWRyaXZlclszMl07CisJdW5zaWduZWQgaW50CXBvcnQ7CisJdW5zaWduZWQJaXJxOworCXVuc2lnbmVkIGludAltZW1iYXNlOworCWludAkJY2FyZG5yOworfSBrY2FwaV9jYXJkZGVmOworCisvKiBuZXcgaW9jdGxzID49IDEwICovCisjZGVmaW5lIEtDQVBJX0NNRF9UUkFDRQkJMTAKKyNkZWZpbmUgS0NBUElfQ01EX0FERENBUkQJMTEJLyogT0JTT0xFVEUgKi8KKworLyogCisgKiBmbGFnID4gMiA9PiB0cmFjZSBhbHNvIGRhdGEKKyAqIGZsYWcgJiAxID0+IHNob3cgdHJhY2UKKyAqLworI2RlZmluZSBLQ0FQSV9UUkFDRV9PRkYJCQkwCisjZGVmaW5lIEtDQVBJX1RSQUNFX1NIT1JUX05PX0RBVEEJMQorI2RlZmluZSBLQ0FQSV9UUkFDRV9GVUxMX05PX0RBVEEJMgorI2RlZmluZSBLQ0FQSV9UUkFDRV9TSE9SVAkJMworI2RlZmluZSBLQ0FQSV9UUkFDRV9GVUxMCQk0CisKKworCisjZW5kaWYJCQkJLyogX19LRVJORUxDQVBJX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2tleWJvYXJkLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgva2V5Ym9hcmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2YzMTZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2tleWJvYXJkLmgKQEAgLTAsMCArMSw0NDMgQEAKKyNpZm5kZWYgX19MSU5VWF9LRVlCT0FSRF9ICisjZGVmaW5lIF9fTElOVVhfS0VZQk9BUkRfSAorCisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCisjZGVmaW5lIEtHX1NISUZUCTAKKyNkZWZpbmUgS0dfQ1RSTAkJMgorI2RlZmluZSBLR19BTFQJCTMKKyNkZWZpbmUgS0dfQUxUR1IJMQorI2RlZmluZSBLR19TSElGVEwJNAorI2RlZmluZSBLR19LQU5BU0hJRlQJNAorI2RlZmluZSBLR19TSElGVFIJNQorI2RlZmluZSBLR19DVFJMTAk2CisjZGVmaW5lIEtHX0NUUkxSCTcKKyNkZWZpbmUgS0dfQ0FQU1NISUZUCTgKKworI2RlZmluZSBOUl9TSElGVAk5CisKKyNkZWZpbmUgTlJfS0VZUwkJMjU2CisjZGVmaW5lIE1BWF9OUl9LRVlNQVBTCTI1NgorLyogVGhpcyBtZWFucyAxMjhLYiBpZiBhbGwga2V5bWFwcyBhcmUgYWxsb2NhdGVkLiBPbmx5IHRoZSBzdXBlcnVzZXIKKwltYXkgaW5jcmVhc2UgdGhlIG51bWJlciBvZiBrZXltYXBzIGJleW9uZCBNQVhfTlJfT0ZfVVNFUl9LRVlNQVBTLiAqLworI2RlZmluZSBNQVhfTlJfT0ZfVVNFUl9LRVlNQVBTIDI1NiAJLyogc2hvdWxkIGJlIGF0IGxlYXN0IDcgKi8KKworCisjZGVmaW5lIE1BWF9OUl9GVU5DCTI1NgkvKiBtYXggbnIgb2Ygc3RyaW5ncyBhc3NpZ25lZCB0byBrZXlzICovCisKKyNkZWZpbmUgS1RfTEFUSU4JMAkvKiB3ZSBkZXBlbmQgb24gdGhpcyBiZWluZyB6ZXJvICovCisjZGVmaW5lIEtUX0xFVFRFUgkxMQkvKiBzeW1ib2wgdGhhdCBjYW4gYmUgYWN0ZWQgdXBvbiBieSBDYXBzTG9jayAqLworI2RlZmluZSBLVF9GTgkJMQorI2RlZmluZSBLVF9TUEVDCQkyCisjZGVmaW5lIEtUX1BBRAkJMworI2RlZmluZSBLVF9ERUFECQk0CisjZGVmaW5lIEtUX0NPTlMJCTUKKyNkZWZpbmUgS1RfQ1VSCQk2CisjZGVmaW5lIEtUX1NISUZUCTcKKyNkZWZpbmUgS1RfTUVUQQkJOAorI2RlZmluZSBLVF9BU0NJSQk5CisjZGVmaW5lIEtUX0xPQ0sJCTEwCisjZGVmaW5lIEtUX1NMT0NLCTEyCisjZGVmaW5lIEtUX0RFQUQyCTEzCisjZGVmaW5lIEtUX0JSTAkJMTQKKworI2RlZmluZSBLKHQsdikJCSgoKHQpPDw4KXwodikpCisjZGVmaW5lIEtUWVAoeCkJCSgoeCkgPj4gOCkKKyNkZWZpbmUgS1ZBTCh4KQkJKCh4KSAmIDB4ZmYpCisKKyNkZWZpbmUgS19GMQkJSyhLVF9GTiwwKQorI2RlZmluZSBLX0YyCQlLKEtUX0ZOLDEpCisjZGVmaW5lIEtfRjMJCUsoS1RfRk4sMikKKyNkZWZpbmUgS19GNAkJSyhLVF9GTiwzKQorI2RlZmluZSBLX0Y1CQlLKEtUX0ZOLDQpCisjZGVmaW5lIEtfRjYJCUsoS1RfRk4sNSkKKyNkZWZpbmUgS19GNwkJSyhLVF9GTiw2KQorI2RlZmluZSBLX0Y4CQlLKEtUX0ZOLDcpCisjZGVmaW5lIEtfRjkJCUsoS1RfRk4sOCkKKyNkZWZpbmUgS19GMTAJCUsoS1RfRk4sOSkKKyNkZWZpbmUgS19GMTEJCUsoS1RfRk4sMTApCisjZGVmaW5lIEtfRjEyCQlLKEtUX0ZOLDExKQorI2RlZmluZSBLX0YxMwkJSyhLVF9GTiwxMikKKyNkZWZpbmUgS19GMTQJCUsoS1RfRk4sMTMpCisjZGVmaW5lIEtfRjE1CQlLKEtUX0ZOLDE0KQorI2RlZmluZSBLX0YxNgkJSyhLVF9GTiwxNSkKKyNkZWZpbmUgS19GMTcJCUsoS1RfRk4sMTYpCisjZGVmaW5lIEtfRjE4CQlLKEtUX0ZOLDE3KQorI2RlZmluZSBLX0YxOQkJSyhLVF9GTiwxOCkKKyNkZWZpbmUgS19GMjAJCUsoS1RfRk4sMTkpCisjZGVmaW5lIEtfRklORAkJSyhLVF9GTiwyMCkKKyNkZWZpbmUgS19JTlNFUlQJSyhLVF9GTiwyMSkKKyNkZWZpbmUgS19SRU1PVkUJSyhLVF9GTiwyMikKKyNkZWZpbmUgS19TRUxFQ1QJSyhLVF9GTiwyMykKKyNkZWZpbmUgS19QR1VQCQlLKEtUX0ZOLDI0KSAvKiBQR1VQIGlzIGEgc3lub255bSBmb3IgUFJJT1IgKi8KKyNkZWZpbmUgS19QR0ROCQlLKEtUX0ZOLDI1KSAvKiBQR0ROIGlzIGEgc3lub255bSBmb3IgTkVYVCAqLworI2RlZmluZSBLX01BQ1JPCSAJSyhLVF9GTiwyNikKKyNkZWZpbmUgS19IRUxQCQlLKEtUX0ZOLDI3KQorI2RlZmluZSBLX0RPCQlLKEtUX0ZOLDI4KQorI2RlZmluZSBLX1BBVVNFCSAJSyhLVF9GTiwyOSkKKyNkZWZpbmUgS19GMjEJCUsoS1RfRk4sMzApCisjZGVmaW5lIEtfRjIyCQlLKEtUX0ZOLDMxKQorI2RlZmluZSBLX0YyMwkJSyhLVF9GTiwzMikKKyNkZWZpbmUgS19GMjQJCUsoS1RfRk4sMzMpCisjZGVmaW5lIEtfRjI1CQlLKEtUX0ZOLDM0KQorI2RlZmluZSBLX0YyNgkJSyhLVF9GTiwzNSkKKyNkZWZpbmUgS19GMjcJCUsoS1RfRk4sMzYpCisjZGVmaW5lIEtfRjI4CQlLKEtUX0ZOLDM3KQorI2RlZmluZSBLX0YyOQkJSyhLVF9GTiwzOCkKKyNkZWZpbmUgS19GMzAJCUsoS1RfRk4sMzkpCisjZGVmaW5lIEtfRjMxCQlLKEtUX0ZOLDQwKQorI2RlZmluZSBLX0YzMgkJSyhLVF9GTiw0MSkKKyNkZWZpbmUgS19GMzMJCUsoS1RfRk4sNDIpCisjZGVmaW5lIEtfRjM0CQlLKEtUX0ZOLDQzKQorI2RlZmluZSBLX0YzNQkJSyhLVF9GTiw0NCkKKyNkZWZpbmUgS19GMzYJCUsoS1RfRk4sNDUpCisjZGVmaW5lIEtfRjM3CQlLKEtUX0ZOLDQ2KQorI2RlZmluZSBLX0YzOAkJSyhLVF9GTiw0NykKKyNkZWZpbmUgS19GMzkJCUsoS1RfRk4sNDgpCisjZGVmaW5lIEtfRjQwCQlLKEtUX0ZOLDQ5KQorI2RlZmluZSBLX0Y0MQkJSyhLVF9GTiw1MCkKKyNkZWZpbmUgS19GNDIJCUsoS1RfRk4sNTEpCisjZGVmaW5lIEtfRjQzCQlLKEtUX0ZOLDUyKQorI2RlZmluZSBLX0Y0NAkJSyhLVF9GTiw1MykKKyNkZWZpbmUgS19GNDUJCUsoS1RfRk4sNTQpCisjZGVmaW5lIEtfRjQ2CQlLKEtUX0ZOLDU1KQorI2RlZmluZSBLX0Y0NwkJSyhLVF9GTiw1NikKKyNkZWZpbmUgS19GNDgJCUsoS1RfRk4sNTcpCisjZGVmaW5lIEtfRjQ5CQlLKEtUX0ZOLDU4KQorI2RlZmluZSBLX0Y1MAkJSyhLVF9GTiw1OSkKKyNkZWZpbmUgS19GNTEJCUsoS1RfRk4sNjApCisjZGVmaW5lIEtfRjUyCQlLKEtUX0ZOLDYxKQorI2RlZmluZSBLX0Y1MwkJSyhLVF9GTiw2MikKKyNkZWZpbmUgS19GNTQJCUsoS1RfRk4sNjMpCisjZGVmaW5lIEtfRjU1CQlLKEtUX0ZOLDY0KQorI2RlZmluZSBLX0Y1NgkJSyhLVF9GTiw2NSkKKyNkZWZpbmUgS19GNTcJCUsoS1RfRk4sNjYpCisjZGVmaW5lIEtfRjU4CQlLKEtUX0ZOLDY3KQorI2RlZmluZSBLX0Y1OQkJSyhLVF9GTiw2OCkKKyNkZWZpbmUgS19GNjAJCUsoS1RfRk4sNjkpCisjZGVmaW5lIEtfRjYxCQlLKEtUX0ZOLDcwKQorI2RlZmluZSBLX0Y2MgkJSyhLVF9GTiw3MSkKKyNkZWZpbmUgS19GNjMJCUsoS1RfRk4sNzIpCisjZGVmaW5lIEtfRjY0CQlLKEtUX0ZOLDczKQorI2RlZmluZSBLX0Y2NQkJSyhLVF9GTiw3NCkKKyNkZWZpbmUgS19GNjYJCUsoS1RfRk4sNzUpCisjZGVmaW5lIEtfRjY3CQlLKEtUX0ZOLDc2KQorI2RlZmluZSBLX0Y2OAkJSyhLVF9GTiw3NykKKyNkZWZpbmUgS19GNjkJCUsoS1RfRk4sNzgpCisjZGVmaW5lIEtfRjcwCQlLKEtUX0ZOLDc5KQorI2RlZmluZSBLX0Y3MQkJSyhLVF9GTiw4MCkKKyNkZWZpbmUgS19GNzIJCUsoS1RfRk4sODEpCisjZGVmaW5lIEtfRjczCQlLKEtUX0ZOLDgyKQorI2RlZmluZSBLX0Y3NAkJSyhLVF9GTiw4MykKKyNkZWZpbmUgS19GNzUJCUsoS1RfRk4sODQpCisjZGVmaW5lIEtfRjc2CQlLKEtUX0ZOLDg1KQorI2RlZmluZSBLX0Y3NwkJSyhLVF9GTiw4NikKKyNkZWZpbmUgS19GNzgJCUsoS1RfRk4sODcpCisjZGVmaW5lIEtfRjc5CQlLKEtUX0ZOLDg4KQorI2RlZmluZSBLX0Y4MAkJSyhLVF9GTiw4OSkKKyNkZWZpbmUgS19GODEJCUsoS1RfRk4sOTApCisjZGVmaW5lIEtfRjgyCQlLKEtUX0ZOLDkxKQorI2RlZmluZSBLX0Y4MwkJSyhLVF9GTiw5MikKKyNkZWZpbmUgS19GODQJCUsoS1RfRk4sOTMpCisjZGVmaW5lIEtfRjg1CQlLKEtUX0ZOLDk0KQorI2RlZmluZSBLX0Y4NgkJSyhLVF9GTiw5NSkKKyNkZWZpbmUgS19GODcJCUsoS1RfRk4sOTYpCisjZGVmaW5lIEtfRjg4CQlLKEtUX0ZOLDk3KQorI2RlZmluZSBLX0Y4OQkJSyhLVF9GTiw5OCkKKyNkZWZpbmUgS19GOTAJCUsoS1RfRk4sOTkpCisjZGVmaW5lIEtfRjkxCQlLKEtUX0ZOLDEwMCkKKyNkZWZpbmUgS19GOTIJCUsoS1RfRk4sMTAxKQorI2RlZmluZSBLX0Y5MwkJSyhLVF9GTiwxMDIpCisjZGVmaW5lIEtfRjk0CQlLKEtUX0ZOLDEwMykKKyNkZWZpbmUgS19GOTUJCUsoS1RfRk4sMTA0KQorI2RlZmluZSBLX0Y5NgkJSyhLVF9GTiwxMDUpCisjZGVmaW5lIEtfRjk3CQlLKEtUX0ZOLDEwNikKKyNkZWZpbmUgS19GOTgJCUsoS1RfRk4sMTA3KQorI2RlZmluZSBLX0Y5OQkJSyhLVF9GTiwxMDgpCisjZGVmaW5lIEtfRjEwMAkJSyhLVF9GTiwxMDkpCisjZGVmaW5lIEtfRjEwMQkJSyhLVF9GTiwxMTApCisjZGVmaW5lIEtfRjEwMgkJSyhLVF9GTiwxMTEpCisjZGVmaW5lIEtfRjEwMwkJSyhLVF9GTiwxMTIpCisjZGVmaW5lIEtfRjEwNAkJSyhLVF9GTiwxMTMpCisjZGVmaW5lIEtfRjEwNQkJSyhLVF9GTiwxMTQpCisjZGVmaW5lIEtfRjEwNgkJSyhLVF9GTiwxMTUpCisjZGVmaW5lIEtfRjEwNwkJSyhLVF9GTiwxMTYpCisjZGVmaW5lIEtfRjEwOAkJSyhLVF9GTiwxMTcpCisjZGVmaW5lIEtfRjEwOQkJSyhLVF9GTiwxMTgpCisjZGVmaW5lIEtfRjExMAkJSyhLVF9GTiwxMTkpCisjZGVmaW5lIEtfRjExMQkJSyhLVF9GTiwxMjApCisjZGVmaW5lIEtfRjExMgkJSyhLVF9GTiwxMjEpCisjZGVmaW5lIEtfRjExMwkJSyhLVF9GTiwxMjIpCisjZGVmaW5lIEtfRjExNAkJSyhLVF9GTiwxMjMpCisjZGVmaW5lIEtfRjExNQkJSyhLVF9GTiwxMjQpCisjZGVmaW5lIEtfRjExNgkJSyhLVF9GTiwxMjUpCisjZGVmaW5lIEtfRjExNwkJSyhLVF9GTiwxMjYpCisjZGVmaW5lIEtfRjExOAkJSyhLVF9GTiwxMjcpCisjZGVmaW5lIEtfRjExOQkJSyhLVF9GTiwxMjgpCisjZGVmaW5lIEtfRjEyMAkJSyhLVF9GTiwxMjkpCisjZGVmaW5lIEtfRjEyMQkJSyhLVF9GTiwxMzApCisjZGVmaW5lIEtfRjEyMgkJSyhLVF9GTiwxMzEpCisjZGVmaW5lIEtfRjEyMwkJSyhLVF9GTiwxMzIpCisjZGVmaW5lIEtfRjEyNAkJSyhLVF9GTiwxMzMpCisjZGVmaW5lIEtfRjEyNQkJSyhLVF9GTiwxMzQpCisjZGVmaW5lIEtfRjEyNgkJSyhLVF9GTiwxMzUpCisjZGVmaW5lIEtfRjEyNwkJSyhLVF9GTiwxMzYpCisjZGVmaW5lIEtfRjEyOAkJSyhLVF9GTiwxMzcpCisjZGVmaW5lIEtfRjEyOQkJSyhLVF9GTiwxMzgpCisjZGVmaW5lIEtfRjEzMAkJSyhLVF9GTiwxMzkpCisjZGVmaW5lIEtfRjEzMQkJSyhLVF9GTiwxNDApCisjZGVmaW5lIEtfRjEzMgkJSyhLVF9GTiwxNDEpCisjZGVmaW5lIEtfRjEzMwkJSyhLVF9GTiwxNDIpCisjZGVmaW5lIEtfRjEzNAkJSyhLVF9GTiwxNDMpCisjZGVmaW5lIEtfRjEzNQkJSyhLVF9GTiwxNDQpCisjZGVmaW5lIEtfRjEzNgkJSyhLVF9GTiwxNDUpCisjZGVmaW5lIEtfRjEzNwkJSyhLVF9GTiwxNDYpCisjZGVmaW5lIEtfRjEzOAkJSyhLVF9GTiwxNDcpCisjZGVmaW5lIEtfRjEzOQkJSyhLVF9GTiwxNDgpCisjZGVmaW5lIEtfRjE0MAkJSyhLVF9GTiwxNDkpCisjZGVmaW5lIEtfRjE0MQkJSyhLVF9GTiwxNTApCisjZGVmaW5lIEtfRjE0MgkJSyhLVF9GTiwxNTEpCisjZGVmaW5lIEtfRjE0MwkJSyhLVF9GTiwxNTIpCisjZGVmaW5lIEtfRjE0NAkJSyhLVF9GTiwxNTMpCisjZGVmaW5lIEtfRjE0NQkJSyhLVF9GTiwxNTQpCisjZGVmaW5lIEtfRjE0NgkJSyhLVF9GTiwxNTUpCisjZGVmaW5lIEtfRjE0NwkJSyhLVF9GTiwxNTYpCisjZGVmaW5lIEtfRjE0OAkJSyhLVF9GTiwxNTcpCisjZGVmaW5lIEtfRjE0OQkJSyhLVF9GTiwxNTgpCisjZGVmaW5lIEtfRjE1MAkJSyhLVF9GTiwxNTkpCisjZGVmaW5lIEtfRjE1MQkJSyhLVF9GTiwxNjApCisjZGVmaW5lIEtfRjE1MgkJSyhLVF9GTiwxNjEpCisjZGVmaW5lIEtfRjE1MwkJSyhLVF9GTiwxNjIpCisjZGVmaW5lIEtfRjE1NAkJSyhLVF9GTiwxNjMpCisjZGVmaW5lIEtfRjE1NQkJSyhLVF9GTiwxNjQpCisjZGVmaW5lIEtfRjE1NgkJSyhLVF9GTiwxNjUpCisjZGVmaW5lIEtfRjE1NwkJSyhLVF9GTiwxNjYpCisjZGVmaW5lIEtfRjE1OAkJSyhLVF9GTiwxNjcpCisjZGVmaW5lIEtfRjE1OQkJSyhLVF9GTiwxNjgpCisjZGVmaW5lIEtfRjE2MAkJSyhLVF9GTiwxNjkpCisjZGVmaW5lIEtfRjE2MQkJSyhLVF9GTiwxNzApCisjZGVmaW5lIEtfRjE2MgkJSyhLVF9GTiwxNzEpCisjZGVmaW5lIEtfRjE2MwkJSyhLVF9GTiwxNzIpCisjZGVmaW5lIEtfRjE2NAkJSyhLVF9GTiwxNzMpCisjZGVmaW5lIEtfRjE2NQkJSyhLVF9GTiwxNzQpCisjZGVmaW5lIEtfRjE2NgkJSyhLVF9GTiwxNzUpCisjZGVmaW5lIEtfRjE2NwkJSyhLVF9GTiwxNzYpCisjZGVmaW5lIEtfRjE2OAkJSyhLVF9GTiwxNzcpCisjZGVmaW5lIEtfRjE2OQkJSyhLVF9GTiwxNzgpCisjZGVmaW5lIEtfRjE3MAkJSyhLVF9GTiwxNzkpCisjZGVmaW5lIEtfRjE3MQkJSyhLVF9GTiwxODApCisjZGVmaW5lIEtfRjE3MgkJSyhLVF9GTiwxODEpCisjZGVmaW5lIEtfRjE3MwkJSyhLVF9GTiwxODIpCisjZGVmaW5lIEtfRjE3NAkJSyhLVF9GTiwxODMpCisjZGVmaW5lIEtfRjE3NQkJSyhLVF9GTiwxODQpCisjZGVmaW5lIEtfRjE3NgkJSyhLVF9GTiwxODUpCisjZGVmaW5lIEtfRjE3NwkJSyhLVF9GTiwxODYpCisjZGVmaW5lIEtfRjE3OAkJSyhLVF9GTiwxODcpCisjZGVmaW5lIEtfRjE3OQkJSyhLVF9GTiwxODgpCisjZGVmaW5lIEtfRjE4MAkJSyhLVF9GTiwxODkpCisjZGVmaW5lIEtfRjE4MQkJSyhLVF9GTiwxOTApCisjZGVmaW5lIEtfRjE4MgkJSyhLVF9GTiwxOTEpCisjZGVmaW5lIEtfRjE4MwkJSyhLVF9GTiwxOTIpCisjZGVmaW5lIEtfRjE4NAkJSyhLVF9GTiwxOTMpCisjZGVmaW5lIEtfRjE4NQkJSyhLVF9GTiwxOTQpCisjZGVmaW5lIEtfRjE4NgkJSyhLVF9GTiwxOTUpCisjZGVmaW5lIEtfRjE4NwkJSyhLVF9GTiwxOTYpCisjZGVmaW5lIEtfRjE4OAkJSyhLVF9GTiwxOTcpCisjZGVmaW5lIEtfRjE4OQkJSyhLVF9GTiwxOTgpCisjZGVmaW5lIEtfRjE5MAkJSyhLVF9GTiwxOTkpCisjZGVmaW5lIEtfRjE5MQkJSyhLVF9GTiwyMDApCisjZGVmaW5lIEtfRjE5MgkJSyhLVF9GTiwyMDEpCisjZGVmaW5lIEtfRjE5MwkJSyhLVF9GTiwyMDIpCisjZGVmaW5lIEtfRjE5NAkJSyhLVF9GTiwyMDMpCisjZGVmaW5lIEtfRjE5NQkJSyhLVF9GTiwyMDQpCisjZGVmaW5lIEtfRjE5NgkJSyhLVF9GTiwyMDUpCisjZGVmaW5lIEtfRjE5NwkJSyhLVF9GTiwyMDYpCisjZGVmaW5lIEtfRjE5OAkJSyhLVF9GTiwyMDcpCisjZGVmaW5lIEtfRjE5OQkJSyhLVF9GTiwyMDgpCisjZGVmaW5lIEtfRjIwMAkJSyhLVF9GTiwyMDkpCisjZGVmaW5lIEtfRjIwMQkJSyhLVF9GTiwyMTApCisjZGVmaW5lIEtfRjIwMgkJSyhLVF9GTiwyMTEpCisjZGVmaW5lIEtfRjIwMwkJSyhLVF9GTiwyMTIpCisjZGVmaW5lIEtfRjIwNAkJSyhLVF9GTiwyMTMpCisjZGVmaW5lIEtfRjIwNQkJSyhLVF9GTiwyMTQpCisjZGVmaW5lIEtfRjIwNgkJSyhLVF9GTiwyMTUpCisjZGVmaW5lIEtfRjIwNwkJSyhLVF9GTiwyMTYpCisjZGVmaW5lIEtfRjIwOAkJSyhLVF9GTiwyMTcpCisjZGVmaW5lIEtfRjIwOQkJSyhLVF9GTiwyMTgpCisjZGVmaW5lIEtfRjIxMAkJSyhLVF9GTiwyMTkpCisjZGVmaW5lIEtfRjIxMQkJSyhLVF9GTiwyMjApCisjZGVmaW5lIEtfRjIxMgkJSyhLVF9GTiwyMjEpCisjZGVmaW5lIEtfRjIxMwkJSyhLVF9GTiwyMjIpCisjZGVmaW5lIEtfRjIxNAkJSyhLVF9GTiwyMjMpCisjZGVmaW5lIEtfRjIxNQkJSyhLVF9GTiwyMjQpCisjZGVmaW5lIEtfRjIxNgkJSyhLVF9GTiwyMjUpCisjZGVmaW5lIEtfRjIxNwkJSyhLVF9GTiwyMjYpCisjZGVmaW5lIEtfRjIxOAkJSyhLVF9GTiwyMjcpCisjZGVmaW5lIEtfRjIxOQkJSyhLVF9GTiwyMjgpCisjZGVmaW5lIEtfRjIyMAkJSyhLVF9GTiwyMjkpCisjZGVmaW5lIEtfRjIyMQkJSyhLVF9GTiwyMzApCisjZGVmaW5lIEtfRjIyMgkJSyhLVF9GTiwyMzEpCisjZGVmaW5lIEtfRjIyMwkJSyhLVF9GTiwyMzIpCisjZGVmaW5lIEtfRjIyNAkJSyhLVF9GTiwyMzMpCisjZGVmaW5lIEtfRjIyNQkJSyhLVF9GTiwyMzQpCisjZGVmaW5lIEtfRjIyNgkJSyhLVF9GTiwyMzUpCisjZGVmaW5lIEtfRjIyNwkJSyhLVF9GTiwyMzYpCisjZGVmaW5lIEtfRjIyOAkJSyhLVF9GTiwyMzcpCisjZGVmaW5lIEtfRjIyOQkJSyhLVF9GTiwyMzgpCisjZGVmaW5lIEtfRjIzMAkJSyhLVF9GTiwyMzkpCisjZGVmaW5lIEtfRjIzMQkJSyhLVF9GTiwyNDApCisjZGVmaW5lIEtfRjIzMgkJSyhLVF9GTiwyNDEpCisjZGVmaW5lIEtfRjIzMwkJSyhLVF9GTiwyNDIpCisjZGVmaW5lIEtfRjIzNAkJSyhLVF9GTiwyNDMpCisjZGVmaW5lIEtfRjIzNQkJSyhLVF9GTiwyNDQpCisjZGVmaW5lIEtfRjIzNgkJSyhLVF9GTiwyNDUpCisjZGVmaW5lIEtfRjIzNwkJSyhLVF9GTiwyNDYpCisjZGVmaW5lIEtfRjIzOAkJSyhLVF9GTiwyNDcpCisjZGVmaW5lIEtfRjIzOQkJSyhLVF9GTiwyNDgpCisjZGVmaW5lIEtfRjI0MAkJSyhLVF9GTiwyNDkpCisjZGVmaW5lIEtfRjI0MQkJSyhLVF9GTiwyNTApCisjZGVmaW5lIEtfRjI0MgkJSyhLVF9GTiwyNTEpCisjZGVmaW5lIEtfRjI0MwkJSyhLVF9GTiwyNTIpCisjZGVmaW5lIEtfRjI0NAkJSyhLVF9GTiwyNTMpCisjZGVmaW5lIEtfRjI0NQkJSyhLVF9GTiwyNTQpCisjZGVmaW5lIEtfVU5ETwkJSyhLVF9GTiwyNTUpCisKKworI2RlZmluZSBLX0hPTEUJCUsoS1RfU1BFQywwKQorI2RlZmluZSBLX0VOVEVSCQlLKEtUX1NQRUMsMSkKKyNkZWZpbmUgS19TSF9SRUdTCUsoS1RfU1BFQywyKQorI2RlZmluZSBLX1NIX01FTQlLKEtUX1NQRUMsMykKKyNkZWZpbmUgS19TSF9TVEFUCUsoS1RfU1BFQyw0KQorI2RlZmluZSBLX0JSRUFLCQlLKEtUX1NQRUMsNSkKKyNkZWZpbmUgS19DT05TCQlLKEtUX1NQRUMsNikKKyNkZWZpbmUgS19DQVBTCQlLKEtUX1NQRUMsNykKKyNkZWZpbmUgS19OVU0JCUsoS1RfU1BFQyw4KQorI2RlZmluZSBLX0hPTEQJCUsoS1RfU1BFQyw5KQorI2RlZmluZSBLX1NDUk9MTEZPUlcJSyhLVF9TUEVDLDEwKQorI2RlZmluZSBLX1NDUk9MTEJBQ0sJSyhLVF9TUEVDLDExKQorI2RlZmluZSBLX0JPT1QJCUsoS1RfU1BFQywxMikKKyNkZWZpbmUgS19DQVBTT04JSyhLVF9TUEVDLDEzKQorI2RlZmluZSBLX0NPTVBPU0UJSyhLVF9TUEVDLDE0KQorI2RlZmluZSBLX1NBSwkJSyhLVF9TUEVDLDE1KQorI2RlZmluZSBLX0RFQ1JDT05TT0xFCUsoS1RfU1BFQywxNikKKyNkZWZpbmUgS19JTkNSQ09OU09MRQlLKEtUX1NQRUMsMTcpCisjZGVmaW5lIEtfU1BBV05DT05TT0xFCUsoS1RfU1BFQywxOCkKKyNkZWZpbmUgS19CQVJFTlVNTE9DSwlLKEtUX1NQRUMsMTkpCisKKyNkZWZpbmUgS19BTExPQ0FURUQJSyhLVF9TUEVDLDEyNikgLyogZHluYW1pY2FsbHkgYWxsb2NhdGVkIGtleW1hcCAqLworI2RlZmluZSBLX05PU1VDSE1BUAlLKEtUX1NQRUMsMTI3KSAvKiByZXR1cm5lZCBieSBLREdLQkVOVCAqLworCisjZGVmaW5lIEtfUDAJCUsoS1RfUEFELDApCisjZGVmaW5lIEtfUDEJCUsoS1RfUEFELDEpCisjZGVmaW5lIEtfUDIJCUsoS1RfUEFELDIpCisjZGVmaW5lIEtfUDMJCUsoS1RfUEFELDMpCisjZGVmaW5lIEtfUDQJCUsoS1RfUEFELDQpCisjZGVmaW5lIEtfUDUJCUsoS1RfUEFELDUpCisjZGVmaW5lIEtfUDYJCUsoS1RfUEFELDYpCisjZGVmaW5lIEtfUDcJCUsoS1RfUEFELDcpCisjZGVmaW5lIEtfUDgJCUsoS1RfUEFELDgpCisjZGVmaW5lIEtfUDkJCUsoS1RfUEFELDkpCisjZGVmaW5lIEtfUFBMVVMJCUsoS1RfUEFELDEwKQkvKiBrZXktcGFkIHBsdXMgKi8KKyNkZWZpbmUgS19QTUlOVVMJSyhLVF9QQUQsMTEpCS8qIGtleS1wYWQgbWludXMgKi8KKyNkZWZpbmUgS19QU1RBUgkJSyhLVF9QQUQsMTIpCS8qIGtleS1wYWQgYXN0ZXJpc2sgKHN0YXIpICovCisjZGVmaW5lIEtfUFNMQVNICUsoS1RfUEFELDEzKQkvKiBrZXktcGFkIHNsYXNoICovCisjZGVmaW5lIEtfUEVOVEVSCUsoS1RfUEFELDE0KQkvKiBrZXktcGFkIGVudGVyICovCisjZGVmaW5lIEtfUENPTU1BCUsoS1RfUEFELDE1KQkvKiBrZXktcGFkIGNvbW1hOiBrbHVkZ2UuLi4gKi8KKyNkZWZpbmUgS19QRE9UCQlLKEtUX1BBRCwxNikJLyoga2V5LXBhZCBkb3QgKHBlcmlvZCk6IGtsdWRnZS4uLiAqLworI2RlZmluZSBLX1BQTFVTTUlOVVMJSyhLVF9QQUQsMTcpCS8qIGtleS1wYWQgcGx1cy9taW51cyAqLworI2RlZmluZSBLX1BQQVJFTkwJSyhLVF9QQUQsMTgpCS8qIGtleS1wYWQgbGVmdCBwYXJlbnRoZXNpcyAqLworI2RlZmluZSBLX1BQQVJFTlIJSyhLVF9QQUQsMTkpCS8qIGtleS1wYWQgcmlnaHQgcGFyZW50aGVzaXMgKi8KKworI2RlZmluZSBOUl9QQUQJCTIwCisKKyNkZWZpbmUgS19ER1JBVkUJSyhLVF9ERUFELDApCisjZGVmaW5lIEtfREFDVVRFCUsoS1RfREVBRCwxKQorI2RlZmluZSBLX0RDSVJDTQlLKEtUX0RFQUQsMikKKyNkZWZpbmUgS19EVElMREUJSyhLVF9ERUFELDMpCisjZGVmaW5lIEtfRERJRVJFCUsoS1RfREVBRCw0KQorI2RlZmluZSBLX0RDRURJTAlLKEtUX0RFQUQsNSkKKworI2RlZmluZSBOUl9ERUFECQk2CisKKyNkZWZpbmUgS19ET1dOCQlLKEtUX0NVUiwwKQorI2RlZmluZSBLX0xFRlQJCUsoS1RfQ1VSLDEpCisjZGVmaW5lIEtfUklHSFQJCUsoS1RfQ1VSLDIpCisjZGVmaW5lIEtfVVAJCUsoS1RfQ1VSLDMpCisKKyNkZWZpbmUgS19TSElGVAkJSyhLVF9TSElGVCxLR19TSElGVCkKKyNkZWZpbmUgS19DVFJMCQlLKEtUX1NISUZULEtHX0NUUkwpCisjZGVmaW5lIEtfQUxUCQlLKEtUX1NISUZULEtHX0FMVCkKKyNkZWZpbmUgS19BTFRHUgkJSyhLVF9TSElGVCxLR19BTFRHUikKKyNkZWZpbmUgS19TSElGVEwJSyhLVF9TSElGVCxLR19TSElGVEwpCisjZGVmaW5lIEtfU0hJRlRSCUsoS1RfU0hJRlQsS0dfU0hJRlRSKQorI2RlZmluZSBLX0NUUkxMCSAJSyhLVF9TSElGVCxLR19DVFJMTCkKKyNkZWZpbmUgS19DVFJMUgkgCUsoS1RfU0hJRlQsS0dfQ1RSTFIpCisjZGVmaW5lIEtfQ0FQU1NISUZUCUsoS1RfU0hJRlQsS0dfQ0FQU1NISUZUKQorCisjZGVmaW5lIEtfQVNDMAkJSyhLVF9BU0NJSSwwKQorI2RlZmluZSBLX0FTQzEJCUsoS1RfQVNDSUksMSkKKyNkZWZpbmUgS19BU0MyCQlLKEtUX0FTQ0lJLDIpCisjZGVmaW5lIEtfQVNDMwkJSyhLVF9BU0NJSSwzKQorI2RlZmluZSBLX0FTQzQJCUsoS1RfQVNDSUksNCkKKyNkZWZpbmUgS19BU0M1CQlLKEtUX0FTQ0lJLDUpCisjZGVmaW5lIEtfQVNDNgkJSyhLVF9BU0NJSSw2KQorI2RlZmluZSBLX0FTQzcJCUsoS1RfQVNDSUksNykKKyNkZWZpbmUgS19BU0M4CQlLKEtUX0FTQ0lJLDgpCisjZGVmaW5lIEtfQVNDOQkJSyhLVF9BU0NJSSw5KQorI2RlZmluZSBLX0hFWDAJCUsoS1RfQVNDSUksMTApCisjZGVmaW5lIEtfSEVYMQkJSyhLVF9BU0NJSSwxMSkKKyNkZWZpbmUgS19IRVgyCQlLKEtUX0FTQ0lJLDEyKQorI2RlZmluZSBLX0hFWDMJCUsoS1RfQVNDSUksMTMpCisjZGVmaW5lIEtfSEVYNAkJSyhLVF9BU0NJSSwxNCkKKyNkZWZpbmUgS19IRVg1CQlLKEtUX0FTQ0lJLDE1KQorI2RlZmluZSBLX0hFWDYJCUsoS1RfQVNDSUksMTYpCisjZGVmaW5lIEtfSEVYNwkJSyhLVF9BU0NJSSwxNykKKyNkZWZpbmUgS19IRVg4CQlLKEtUX0FTQ0lJLDE4KQorI2RlZmluZSBLX0hFWDkJCUsoS1RfQVNDSUksMTkpCisjZGVmaW5lIEtfSEVYYQkJSyhLVF9BU0NJSSwyMCkKKyNkZWZpbmUgS19IRVhiCQlLKEtUX0FTQ0lJLDIxKQorI2RlZmluZSBLX0hFWGMJCUsoS1RfQVNDSUksMjIpCisjZGVmaW5lIEtfSEVYZAkJSyhLVF9BU0NJSSwyMykKKyNkZWZpbmUgS19IRVhlCQlLKEtUX0FTQ0lJLDI0KQorI2RlZmluZSBLX0hFWGYJCUsoS1RfQVNDSUksMjUpCisKKyNkZWZpbmUgTlJfQVNDSUkJMjYKKworI2RlZmluZSBLX1NISUZUTE9DSwlLKEtUX0xPQ0ssS0dfU0hJRlQpCisjZGVmaW5lIEtfQ1RSTExPQ0sJSyhLVF9MT0NLLEtHX0NUUkwpCisjZGVmaW5lIEtfQUxUTE9DSwlLKEtUX0xPQ0ssS0dfQUxUKQorI2RlZmluZSBLX0FMVEdSTE9DSwlLKEtUX0xPQ0ssS0dfQUxUR1IpCisjZGVmaW5lIEtfU0hJRlRMTE9DSwlLKEtUX0xPQ0ssS0dfU0hJRlRMKQorI2RlZmluZSBLX1NISUZUUkxPQ0sJSyhLVF9MT0NLLEtHX1NISUZUUikKKyNkZWZpbmUgS19DVFJMTExPQ0sJSyhLVF9MT0NLLEtHX0NUUkxMKQorI2RlZmluZSBLX0NUUkxSTE9DSwlLKEtUX0xPQ0ssS0dfQ1RSTFIpCisjZGVmaW5lIEtfQ0FQU1NISUZUTE9DSwlLKEtUX0xPQ0ssS0dfQ0FQU1NISUZUKQorCisjZGVmaW5lIEtfU0hJRlRfU0xPQ0sJSyhLVF9TTE9DSyxLR19TSElGVCkKKyNkZWZpbmUgS19DVFJMX1NMT0NLCUsoS1RfU0xPQ0ssS0dfQ1RSTCkKKyNkZWZpbmUgS19BTFRfU0xPQ0sJSyhLVF9TTE9DSyxLR19BTFQpCisjZGVmaW5lIEtfQUxUR1JfU0xPQ0sJSyhLVF9TTE9DSyxLR19BTFRHUikKKyNkZWZpbmUgS19TSElGVExfU0xPQ0sJSyhLVF9TTE9DSyxLR19TSElGVEwpCisjZGVmaW5lIEtfU0hJRlRSX1NMT0NLCUsoS1RfU0xPQ0ssS0dfU0hJRlRSKQorI2RlZmluZSBLX0NUUkxMX1NMT0NLCUsoS1RfU0xPQ0ssS0dfQ1RSTEwpCisjZGVmaW5lIEtfQ1RSTFJfU0xPQ0sJSyhLVF9TTE9DSyxLR19DVFJMUikKKyNkZWZpbmUgS19DQVBTU0hJRlRfU0xPQ0sJSyhLVF9TTE9DSyxLR19DQVBTU0hJRlQpCisKKyNkZWZpbmUgTlJfTE9DSwkJOQorCisjZGVmaW5lIEtfQlJMX0JMQU5LICAgICBLKEtUX0JSTCwgMCkKKyNkZWZpbmUgS19CUkxfRE9UMSAgICAgIEsoS1RfQlJMLCAxKQorI2RlZmluZSBLX0JSTF9ET1QyICAgICAgSyhLVF9CUkwsIDIpCisjZGVmaW5lIEtfQlJMX0RPVDMgICAgICBLKEtUX0JSTCwgMykKKyNkZWZpbmUgS19CUkxfRE9UNCAgICAgIEsoS1RfQlJMLCA0KQorI2RlZmluZSBLX0JSTF9ET1Q1ICAgICAgSyhLVF9CUkwsIDUpCisjZGVmaW5lIEtfQlJMX0RPVDYgICAgICBLKEtUX0JSTCwgNikKKyNkZWZpbmUgS19CUkxfRE9UNyAgICAgIEsoS1RfQlJMLCA3KQorI2RlZmluZSBLX0JSTF9ET1Q4ICAgICAgSyhLVF9CUkwsIDgpCisjZGVmaW5lIEtfQlJMX0RPVDkgICAgICBLKEtUX0JSTCwgOSkKKyNkZWZpbmUgS19CUkxfRE9UMTAgICAgIEsoS1RfQlJMLCAxMCkKKworI2RlZmluZSBOUl9CUkwJCTExCisKKyNkZWZpbmUgTUFYX0RJQUNSCTI1NgorI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgva2V5Y3RsLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgva2V5Y3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQzODNmMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9rZXljdGwuaApAQCAtMCwwICsxLDU3IEBACisvKiBrZXljdGwuaDoga2V5Y3RsIGNvbW1hbmQgSURzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0xJTlVYX0tFWUNUTF9ICisjZGVmaW5lIF9MSU5VWF9LRVlDVExfSAorCisvKiBzcGVjaWFsIHByb2Nlc3Mga2V5cmluZyBzaG9ydGN1dCBJRHMgKi8KKyNkZWZpbmUgS0VZX1NQRUNfVEhSRUFEX0tFWVJJTkcJCS0xCS8qIC0ga2V5IElEIGZvciB0aHJlYWQtc3BlY2lmaWMga2V5cmluZyAqLworI2RlZmluZSBLRVlfU1BFQ19QUk9DRVNTX0tFWVJJTkcJLTIJLyogLSBrZXkgSUQgZm9yIHByb2Nlc3Mtc3BlY2lmaWMga2V5cmluZyAqLworI2RlZmluZSBLRVlfU1BFQ19TRVNTSU9OX0tFWVJJTkcJLTMJLyogLSBrZXkgSUQgZm9yIHNlc3Npb24tc3BlY2lmaWMga2V5cmluZyAqLworI2RlZmluZSBLRVlfU1BFQ19VU0VSX0tFWVJJTkcJCS00CS8qIC0ga2V5IElEIGZvciBVSUQtc3BlY2lmaWMga2V5cmluZyAqLworI2RlZmluZSBLRVlfU1BFQ19VU0VSX1NFU1NJT05fS0VZUklORwktNQkvKiAtIGtleSBJRCBmb3IgVUlELXNlc3Npb24ga2V5cmluZyAqLworI2RlZmluZSBLRVlfU1BFQ19HUk9VUF9LRVlSSU5HCQktNgkvKiAtIGtleSBJRCBmb3IgR0lELXNwZWNpZmljIGtleXJpbmcgKi8KKyNkZWZpbmUgS0VZX1NQRUNfUkVRS0VZX0FVVEhfS0VZCS03CS8qIC0ga2V5IElEIGZvciBhc3N1bWVkIHJlcXVlc3Rfa2V5IGF1dGgga2V5ICovCisjZGVmaW5lIEtFWV9TUEVDX1JFUVVFU1RPUl9LRVlSSU5HCS04CS8qIC0ga2V5IElEIGZvciByZXF1ZXN0X2tleSgpIGRlc3Qga2V5cmluZyAqLworCisvKiByZXF1ZXN0LWtleSBkZWZhdWx0IGtleXJpbmdzICovCisjZGVmaW5lIEtFWV9SRVFLRVlfREVGTF9OT19DSEFOR0UJCS0xCisjZGVmaW5lIEtFWV9SRVFLRVlfREVGTF9ERUZBVUxUCQkJMAorI2RlZmluZSBLRVlfUkVRS0VZX0RFRkxfVEhSRUFEX0tFWVJJTkcJCTEKKyNkZWZpbmUgS0VZX1JFUUtFWV9ERUZMX1BST0NFU1NfS0VZUklORwkJMgorI2RlZmluZSBLRVlfUkVRS0VZX0RFRkxfU0VTU0lPTl9LRVlSSU5HCQkzCisjZGVmaW5lIEtFWV9SRVFLRVlfREVGTF9VU0VSX0tFWVJJTkcJCTQKKyNkZWZpbmUgS0VZX1JFUUtFWV9ERUZMX1VTRVJfU0VTU0lPTl9LRVlSSU5HCTUKKyNkZWZpbmUgS0VZX1JFUUtFWV9ERUZMX0dST1VQX0tFWVJJTkcJCTYKKyNkZWZpbmUgS0VZX1JFUUtFWV9ERUZMX1JFUVVFU1RPUl9LRVlSSU5HCTcKKworLyoga2V5Y3RsIGNvbW1hbmRzICovCisjZGVmaW5lIEtFWUNUTF9HRVRfS0VZUklOR19JRAkJMAkvKiBhc2sgZm9yIGEga2V5cmluZydzIElEICovCisjZGVmaW5lIEtFWUNUTF9KT0lOX1NFU1NJT05fS0VZUklORwkxCS8qIGpvaW4gb3Igc3RhcnQgbmFtZWQgc2Vzc2lvbiBrZXlyaW5nICovCisjZGVmaW5lIEtFWUNUTF9VUERBVEUJCQkyCS8qIHVwZGF0ZSBhIGtleSAqLworI2RlZmluZSBLRVlDVExfUkVWT0tFCQkJMwkvKiByZXZva2UgYSBrZXkgKi8KKyNkZWZpbmUgS0VZQ1RMX0NIT1dOCQkJNAkvKiBzZXQgb3duZXJzaGlwIG9mIGEga2V5ICovCisjZGVmaW5lIEtFWUNUTF9TRVRQRVJNCQkJNQkvKiBzZXQgcGVybXMgb24gYSBrZXkgKi8KKyNkZWZpbmUgS0VZQ1RMX0RFU0NSSUJFCQkJNgkvKiBkZXNjcmliZSBhIGtleSAqLworI2RlZmluZSBLRVlDVExfQ0xFQVIJCQk3CS8qIGNsZWFyIGNvbnRlbnRzIG9mIGEga2V5cmluZyAqLworI2RlZmluZSBLRVlDVExfTElOSwkJCTgJLyogbGluayBhIGtleSBpbnRvIGEga2V5cmluZyAqLworI2RlZmluZSBLRVlDVExfVU5MSU5LCQkJOQkvKiB1bmxpbmsgYSBrZXkgZnJvbSBhIGtleXJpbmcgKi8KKyNkZWZpbmUgS0VZQ1RMX1NFQVJDSAkJCTEwCS8qIHNlYXJjaCBmb3IgYSBrZXkgaW4gYSBrZXlyaW5nICovCisjZGVmaW5lIEtFWUNUTF9SRUFECQkJMTEJLyogcmVhZCBhIGtleSBvciBrZXlyaW5nJ3MgY29udGVudHMgKi8KKyNkZWZpbmUgS0VZQ1RMX0lOU1RBTlRJQVRFCQkxMgkvKiBpbnN0YW50aWF0ZSBhIHBhcnRpYWxseSBjb25zdHJ1Y3RlZCBrZXkgKi8KKyNkZWZpbmUgS0VZQ1RMX05FR0FURQkJCTEzCS8qIG5lZ2F0ZSBhIHBhcnRpYWxseSBjb25zdHJ1Y3RlZCBrZXkgKi8KKyNkZWZpbmUgS0VZQ1RMX1NFVF9SRVFLRVlfS0VZUklORwkxNAkvKiBzZXQgZGVmYXVsdCByZXF1ZXN0LWtleSBrZXlyaW5nICovCisjZGVmaW5lIEtFWUNUTF9TRVRfVElNRU9VVAkJMTUJLyogc2V0IGtleSB0aW1lb3V0ICovCisjZGVmaW5lIEtFWUNUTF9BU1NVTUVfQVVUSE9SSVRZCQkxNgkvKiBhc3N1bWUgcmVxdWVzdF9rZXkoKSBhdXRob3Jpc2F0aW9uICovCisjZGVmaW5lIEtFWUNUTF9HRVRfU0VDVVJJVFkJCTE3CS8qIGdldCBrZXkgc2VjdXJpdHkgbGFiZWwgKi8KKyNkZWZpbmUgS0VZQ1RMX1NFU1NJT05fVE9fUEFSRU5UCTE4CS8qIGFwcGx5IHNlc3Npb24ga2V5cmluZyB0byBwYXJlbnQgcHJvY2VzcyAqLworCisjZW5kaWYgLyogIF9MSU5VWF9LRVlDVExfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2wydHAuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9sMnRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU0MjUyZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9sMnRwLmgKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBMMlRQLW92ZXItSVAgc29ja2V0IGZvciBMMlRQdjMuCisgKgorICogQXV0aG9yOiBKYW1lcyBDaGFwbWFuIDxqY2hhcG1hbkBrYXRhbGl4LmNvbT4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9MMlRQX0hfCisjZGVmaW5lIF9MSU5VWF9MMlRQX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKworI2RlZmluZSBJUFBST1RPX0wyVFAJCTExNQorCisvKioKKyAqIHN0cnVjdCBzb2NrYWRkcl9sMnRwaXAgLSB0aGUgc29ja2FkZHIgc3RydWN0dXJlIGZvciBMMlRQLW92ZXItSVAgc29ja2V0cworICogQGwydHBfZmFtaWx5OiAgYWRkcmVzcyBmYW1pbHkgbnVtYmVyIEFGX0wyVFBJUC4KKyAqIEBsMnRwX2FkZHI6ICAgIHByb3RvY29sIHNwZWNpZmljIGFkZHJlc3MgaW5mb3JtYXRpb24KKyAqIEBsMnRwX2Nvbm5faWQ6IGNvbm5lY3Rpb24gaWQgb2YgdHVubmVsCisgKi8KKyNkZWZpbmUgX19TT0NLX1NJWkVfXwkxNgkJLyogc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikJKi8KK3N0cnVjdCBzb2NrYWRkcl9sMnRwaXAgeworCS8qIFRoZSBmaXJzdCBmaWVsZHMgbXVzdCBtYXRjaCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKi8KKwlzYV9mYW1pbHlfdAlsMnRwX2ZhbWlseTsJLyogQUZfSU5FVCAqLworCV9fYmUxNgkJbDJ0cF91bnVzZWQ7CS8qIElORVQgcG9ydCBudW1iZXIgKHVudXNlZCkgKi8KKwlzdHJ1Y3QgaW5fYWRkcglsMnRwX2FkZHI7CS8qIEludGVybmV0IGFkZHJlc3MgKi8KKworCV9fdTMyCQlsMnRwX2Nvbm5faWQ7CS8qIENvbm5lY3Rpb24gSUQgb2YgdHVubmVsICovCisKKwkvKiBQYWQgdG8gc2l6ZSBvZiBgc3RydWN0IHNvY2thZGRyJy4gKi8KKwl1bnNpZ25lZCBjaGFyCV9fcGFkW3NpemVvZihzdHJ1Y3Qgc29ja2FkZHIpIC0gc2l6ZW9mKHNhX2ZhbWlseV90KSAtCisJCQkgICAgICBzaXplb2YoX19iZTE2KSAtIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikgLQorCQkJICAgICAgc2l6ZW9mKF9fdTMyKV07Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBORVRMSU5LX0dFTkVSSUMgbmV0bGluayBmYW1pbHkuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb21tYW5kcy4KKyAqIFZhbGlkIFRMVnMgb2YgZWFjaCBjb21tYW5kIGFyZTotCisgKiBUVU5ORUxfQ1JFQVRFCS0gQ09OTl9JRCwgcHdfdHlwZSwgbmV0bnMsIGlmbmFtZSwgaXBpbmZvLCB1ZHBpbmZvLCB1ZHBjc3VtLCB2bGFuaWQKKyAqIFRVTk5FTF9ERUxFVEUJLSBDT05OX0lECisgKiBUVU5ORUxfTU9ESUZZCS0gQ09OTl9JRCwgdWRwY3N1bQorICogVFVOTkVMX0dFVFNUQVRTCS0gQ09OTl9JRCwgKHN0YXRzKQorICogVFVOTkVMX0dFVAkJLSBDT05OX0lELCAoLi4uKQorICogU0VTU0lPTl9DUkVBVEUJLSBTRVNTSU9OX0lELCBQV19UWVBFLCBvZmZzZXQsIGRhdGFfc2VxLCBjb29raWUsIHBlZXJfY29va2llLCBvZmZzZXQsIGwyc3BlYworICogU0VTU0lPTl9ERUxFVEUJLSBTRVNTSU9OX0lECisgKiBTRVNTSU9OX01PRElGWQktIFNFU1NJT05fSUQsIGRhdGFfc2VxCisgKiBTRVNTSU9OX0dFVAkJLSBTRVNTSU9OX0lELCAoLi4uKQorICogU0VTU0lPTl9HRVRTVEFUUwktIFNFU1NJT05fSUQsIChzdGF0cykKKyAqCisgKi8KK2VudW0geworCUwyVFBfQ01EX05PT1AsCisJTDJUUF9DTURfVFVOTkVMX0NSRUFURSwKKwlMMlRQX0NNRF9UVU5ORUxfREVMRVRFLAorCUwyVFBfQ01EX1RVTk5FTF9NT0RJRlksCisJTDJUUF9DTURfVFVOTkVMX0dFVCwKKwlMMlRQX0NNRF9TRVNTSU9OX0NSRUFURSwKKwlMMlRQX0NNRF9TRVNTSU9OX0RFTEVURSwKKwlMMlRQX0NNRF9TRVNTSU9OX01PRElGWSwKKwlMMlRQX0NNRF9TRVNTSU9OX0dFVCwKKwlfX0wyVFBfQ01EX01BWCwKK307CisKKyNkZWZpbmUgTDJUUF9DTURfTUFYCQkJKF9fTDJUUF9DTURfTUFYIC0gMSkKKworLyoKKyAqIEFUVFIgdHlwZXMgZGVmaW5lZCBmb3IgTDJUUAorICovCitlbnVtIHsKKwlMMlRQX0FUVFJfTk9ORSwJCQkvKiBubyBkYXRhICovCisJTDJUUF9BVFRSX1BXX1RZUEUsCQkvKiB1MTYsIGVudW0gbDJ0cF9wd3R5cGUgKi8KKwlMMlRQX0FUVFJfRU5DQVBfVFlQRSwJCS8qIHUxNiwgZW51bSBsMnRwX2VuY2FwX3R5cGUgKi8KKwlMMlRQX0FUVFJfT0ZGU0VULAkJLyogdTE2ICovCisJTDJUUF9BVFRSX0RBVEFfU0VRLAkJLyogdTE2ICovCisJTDJUUF9BVFRSX0wyU1BFQ19UWVBFLAkJLyogdTgsIGVudW0gbDJ0cF9sMnNwZWNfdHlwZSAqLworCUwyVFBfQVRUUl9MMlNQRUNfTEVOLAkJLyogdTgsIGVudW0gbDJ0cF9sMnNwZWNfdHlwZSAqLworCUwyVFBfQVRUUl9QUk9UT19WRVJTSU9OLAkvKiB1OCAqLworCUwyVFBfQVRUUl9JRk5BTUUsCQkvKiBzdHJpbmcgKi8KKwlMMlRQX0FUVFJfQ09OTl9JRCwJCS8qIHUzMiAqLworCUwyVFBfQVRUUl9QRUVSX0NPTk5fSUQsCQkvKiB1MzIgKi8KKwlMMlRQX0FUVFJfU0VTU0lPTl9JRCwJCS8qIHUzMiAqLworCUwyVFBfQVRUUl9QRUVSX1NFU1NJT05fSUQsCS8qIHUzMiAqLworCUwyVFBfQVRUUl9VRFBfQ1NVTSwJCS8qIHU4ICovCisJTDJUUF9BVFRSX1ZMQU5fSUQsCQkvKiB1MTYgKi8KKwlMMlRQX0FUVFJfQ09PS0lFLAkJLyogMCwgNCBvciA4IGJ5dGVzICovCisJTDJUUF9BVFRSX1BFRVJfQ09PS0lFLAkJLyogMCwgNCBvciA4IGJ5dGVzICovCisJTDJUUF9BVFRSX0RFQlVHLAkJLyogdTMyICovCisJTDJUUF9BVFRSX1JFQ1ZfU0VRLAkJLyogdTggKi8KKwlMMlRQX0FUVFJfU0VORF9TRVEsCQkvKiB1OCAqLworCUwyVFBfQVRUUl9MTlNfTU9ERSwJCS8qIHU4ICovCisJTDJUUF9BVFRSX1VTSU5HX0lQU0VDLAkJLyogdTggKi8KKwlMMlRQX0FUVFJfUkVDVl9USU1FT1VULAkJLyogbXNlYyAqLworCUwyVFBfQVRUUl9GRCwJCQkvKiBpbnQgKi8KKwlMMlRQX0FUVFJfSVBfU0FERFIsCQkvKiB1MzIgKi8KKwlMMlRQX0FUVFJfSVBfREFERFIsCQkvKiB1MzIgKi8KKwlMMlRQX0FUVFJfVURQX1NQT1JULAkJLyogdTE2ICovCisJTDJUUF9BVFRSX1VEUF9EUE9SVCwJCS8qIHUxNiAqLworCUwyVFBfQVRUUl9NVFUsCQkJLyogdTE2ICovCisJTDJUUF9BVFRSX01SVSwJCQkvKiB1MTYgKi8KKwlMMlRQX0FUVFJfU1RBVFMsCQkvKiBuZXN0ZWQgKi8KKwlfX0wyVFBfQVRUUl9NQVgsCit9OworCisjZGVmaW5lIEwyVFBfQVRUUl9NQVgJCQkoX19MMlRQX0FUVFJfTUFYIC0gMSkKKworLyogTmVzdGVkIGluIEwyVFBfQVRUUl9TVEFUUyAqLworZW51bSB7CisJTDJUUF9BVFRSX1NUQVRTX05PTkUsCQkvKiBubyBkYXRhICovCisJTDJUUF9BVFRSX1RYX1BBQ0tFVFMsCQkvKiB1NjQgKi8KKwlMMlRQX0FUVFJfVFhfQllURVMsCQkvKiB1NjQgKi8KKwlMMlRQX0FUVFJfVFhfRVJST1JTLAkJLyogdTY0ICovCisJTDJUUF9BVFRSX1JYX1BBQ0tFVFMsCQkvKiB1NjQgKi8KKwlMMlRQX0FUVFJfUlhfQllURVMsCQkvKiB1NjQgKi8KKwlMMlRQX0FUVFJfUlhfU0VRX0RJU0NBUkRTLAkvKiB1NjQgKi8KKwlMMlRQX0FUVFJfUlhfT09TX1BBQ0tFVFMsCS8qIHU2NCAqLworCUwyVFBfQVRUUl9SWF9FUlJPUlMsCQkvKiB1NjQgKi8KKwlfX0wyVFBfQVRUUl9TVEFUU19NQVgsCit9OworCisjZGVmaW5lIEwyVFBfQVRUUl9TVEFUU19NQVgJCShfX0wyVFBfQVRUUl9TVEFUU19NQVggLSAxKQorCitlbnVtIGwydHBfcHd0eXBlIHsKKwlMMlRQX1BXVFlQRV9OT05FID0gMHgwMDAwLAorCUwyVFBfUFdUWVBFX0VUSF9WTEFOID0gMHgwMDA0LAorCUwyVFBfUFdUWVBFX0VUSCA9IDB4MDAwNSwKKwlMMlRQX1BXVFlQRV9QUFAgPSAweDAwMDcsCisJTDJUUF9QV1RZUEVfUFBQX0FDID0gMHgwMDA4LAorCUwyVFBfUFdUWVBFX0lQID0gMHgwMDBiLAorCV9fTDJUUF9QV1RZUEVfTUFYCit9OworCitlbnVtIGwydHBfbDJzcGVjX3R5cGUgeworCUwyVFBfTDJTUEVDVFlQRV9OT05FLAorCUwyVFBfTDJTUEVDVFlQRV9ERUZBVUxULAorfTsKKworZW51bSBsMnRwX2VuY2FwX3R5cGUgeworCUwyVFBfRU5DQVBUWVBFX1VEUCwKKwlMMlRQX0VOQ0FQVFlQRV9JUCwKK307CisKK2VudW0gbDJ0cF9zZXFtb2RlIHsKKwlMMlRQX1NFUV9OT05FID0gMCwKKwlMMlRQX1NFUV9JUCA9IDEsCisJTDJUUF9TRVFfQUxMID0gMiwKK307CisKKy8qCisgKiBORVRMSU5LX0dFTkVSSUMgcmVsYXRlZCBpbmZvCisgKi8KKyNkZWZpbmUgTDJUUF9HRU5MX05BTUUJCSJsMnRwIgorI2RlZmluZSBMMlRQX0dFTkxfVkVSU0lPTgkweDEKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbGltaXRzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbGltaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQwZjk0MQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9saW1pdHMuaApAQCAtMCwwICsxLDIwIEBACisjaWZuZGVmIF9MSU5VWF9MSU1JVFNfSAorI2RlZmluZSBfTElOVVhfTElNSVRTX0gKKworI2RlZmluZSBOUl9PUEVOCSAgICAgICAgMTAyNAorCisjZGVmaW5lIE5HUk9VUFNfTUFYICAgIDY1NTM2CS8qIHN1cHBsZW1lbnRhbCBncm91cCBJRHMgYXJlIGF2YWlsYWJsZSAqLworI2RlZmluZSBBUkdfTUFYICAgICAgIDEzMTA3MgkvKiAjIGJ5dGVzIG9mIGFyZ3MgKyBlbnZpcm9uIGZvciBleGVjKCkgKi8KKyNkZWZpbmUgTElOS19NQVggICAgICAgICAxMjcJLyogIyBsaW5rcyBhIGZpbGUgbWF5IGhhdmUgKi8KKyNkZWZpbmUgTUFYX0NBTk9OICAgICAgICAyNTUJLyogc2l6ZSBvZiB0aGUgY2Fub25pY2FsIGlucHV0IHF1ZXVlICovCisjZGVmaW5lIE1BWF9JTlBVVCAgICAgICAgMjU1CS8qIHNpemUgb2YgdGhlIHR5cGUtYWhlYWQgYnVmZmVyICovCisjZGVmaW5lIE5BTUVfTUFYICAgICAgICAgMjU1CS8qICMgY2hhcnMgaW4gYSBmaWxlIG5hbWUgKi8KKyNkZWZpbmUgUEFUSF9NQVggICAgICAgIDQwOTYJLyogIyBjaGFycyBpbiBhIHBhdGggbmFtZSBpbmNsdWRpbmcgbnVsICovCisjZGVmaW5lIFBJUEVfQlVGICAgICAgICA0MDk2CS8qICMgYnl0ZXMgaW4gYXRvbWljIHdyaXRlIHRvIGEgcGlwZSAqLworI2RlZmluZSBYQVRUUl9OQU1FX01BWCAgIDI1NQkvKiAjIGNoYXJzIGluIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lICovCisjZGVmaW5lIFhBVFRSX1NJWkVfTUFYIDY1NTM2CS8qIHNpemUgb2YgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIHZhbHVlICg2NGspICovCisjZGVmaW5lIFhBVFRSX0xJU1RfTUFYIDY1NTM2CS8qIHNpemUgb2YgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVsaXN0ICg2NGspICovCisKKyNkZWZpbmUgUlRTSUdfTUFYCSAgMzIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbGxjLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbGxjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhhNzEzYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9sbGMuaApAQCAtMCwwICsxLDgwIEBACisjaWZuZGVmIF9fTElOVVhfTExDX0gKKyNkZWZpbmUgX19MSU5VWF9MTENfSAorLyoKKyAqIElFRUUgODAyLjIgVXNlciBJbnRlcmZhY2UgU0FQcyBmb3IgTGludXgsIGRhdGEgc3RydWN0dXJlcyBhbmQgaW5kaWNhdG9ycy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgYnkgSmF5IFNjaHVsaXN0IDxqc2NobHN0QHNhbWJhLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gY2FuIGJlIHJlZGlzdHJpYnV0ZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgd2l0aG91dCBhbnkgd2FycmFudHkgb3IgaW1wbGllZCB3YXJyYW50eQorICogb2YgbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICoKKyAqIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2RlZmluZSBfX0xMQ19TT0NLX1NJWkVfXyAxNgkvKiBzaXplb2Yoc29ja2FkZHJfbGxjKSwgd29yZCBhbGlnbi4gKi8KK3N0cnVjdCBzb2NrYWRkcl9sbGMgeworCXNhX2ZhbWlseV90ICAgICBzbGxjX2ZhbWlseTsJLyogQUZfTExDICovCisJc2FfZmFtaWx5X3QJc2xsY19hcnBocmQ7CS8qIEFSUEhSRF9FVEhFUiAqLworCXVuc2lnbmVkIGNoYXIgICBzbGxjX3Rlc3Q7CisJdW5zaWduZWQgY2hhciAgIHNsbGNfeGlkOworCXVuc2lnbmVkIGNoYXIJc2xsY191YTsJLyogVUEgZGF0YSwgb25seSBmb3IgU09DS19TVFJFQU0uICovCisJdW5zaWduZWQgY2hhciAgIHNsbGNfc2FwOworCXVuc2lnbmVkIGNoYXIgICBzbGxjX21hY1tJRkhXQUREUkxFTl07CisJdW5zaWduZWQgY2hhciAgIF9fcGFkW19fTExDX1NPQ0tfU0laRV9fIC0gc2l6ZW9mKHNhX2ZhbWlseV90KSAqIDIgLQorCQkJICAgICAgc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICogNCAtIElGSFdBRERSTEVOXTsKK307CisKKy8qIHNvY2tvcHQgZGVmaW5pdGlvbnMuICovCitlbnVtIGxsY19zb2Nrb3B0cyB7CisJTExDX09QVF9VTktOT1dOID0gMCwKKwlMTENfT1BUX1JFVFJZLAkJLyogbWF4IHJldHJhbnMgYXR0ZW1wdHMuICovCisJTExDX09QVF9TSVpFLAkJLyogbWF4IFBEVSBzaXplIChvY3RldHMpLiAqLworCUxMQ19PUFRfQUNLX1RNUl9FWFAsCS8qIGFjayBleHBpcmUgdGltZSAoc2VjcykuICovCisJTExDX09QVF9QX1RNUl9FWFAsCS8qIHBmIGN5Y2xlIGV4cGlyZSB0aW1lIChzZWNzKS4gKi8KKwlMTENfT1BUX1JFSl9UTVJfRVhQLAkvKiByZWogc2VudCBleHBpcmUgdGltZSAoc2VjcykuICovCisJTExDX09QVF9CVVNZX1RNUl9FWFAsCS8qIGJ1c3kgc3RhdGUgZXhwaXJlIHRpbWUgKHNlY3MpLiAqLworCUxMQ19PUFRfVFhfV0lOLAkJLyogdHggd2luZG93IHNpemUuICovCisJTExDX09QVF9SWF9XSU4sCQkvKiByeCB3aW5kb3cgc2l6ZS4gKi8KKwlMTENfT1BUX1BLVElORk8sCS8qIGFuY2lsbGFyeSBwYWNrZXQgaW5mb3JtYXRpb24uICovCisJTExDX09QVF9NQVgKK307CisKKyNkZWZpbmUgTExDX09QVF9NQVhfUkVUUlkJIDEwMAorI2RlZmluZSBMTENfT1BUX01BWF9TSVpFCTQxOTYKKyNkZWZpbmUgTExDX09QVF9NQVhfV0lOCQkgMTI3CisjZGVmaW5lIExMQ19PUFRfTUFYX0FDS19UTVJfRVhQCSAgNjAKKyNkZWZpbmUgTExDX09QVF9NQVhfUF9UTVJfRVhQCSAgNjAKKyNkZWZpbmUgTExDX09QVF9NQVhfUkVKX1RNUl9FWFAJICA2MAorI2RlZmluZSBMTENfT1BUX01BWF9CVVNZX1RNUl9FWFAgIDYwCisKKy8qIExMQyBTQVAgdHlwZXMuICovCisjZGVmaW5lIExMQ19TQVBfTlVMTAkweDAwCQkvKiBOVUxMIFNBUC4gCQkJKi8KKyNkZWZpbmUgTExDX1NBUF9MTEMJMHgwMgkJLyogTExDIFN1YmxheWVyIE1hbmFnZW1lbnQuIAkqLworI2RlZmluZSBMTENfU0FQX1NOQQkweDA0CQkvKiBTTkEgUGF0aCBDb250cm9sLiAJCSovCisjZGVmaW5lIExMQ19TQVBfUE5NCTB4MEUJCS8qIFByb3dheSBOZXR3b3JrIE1hbmFnZW1lbnQuCSovCQorI2RlZmluZSBMTENfU0FQX0lQCTB4MDYJCS8qIFRDUC9JUC4gCQkJKi8KKyNkZWZpbmUgTExDX1NBUF9CU1BBTgkweDQyCQkvKiBCcmlkZ2UgU3Bhbm5pbmcgVHJlZSBQcm90bwkqLworI2RlZmluZSBMTENfU0FQX01NUwkweDRFCQkvKiBNYW51ZmFjdHVyaW5nIE1lc3NhZ2UgU3J2LgkqLworI2RlZmluZSBMTENfU0FQXzgyMDgJMHg3RQkJLyogSVNPIDgyMDgJCQkqLworI2RlZmluZSBMTENfU0FQXzNDT00JMHg4MAkJLyogM0NPTS4gCQkJKi8KKyNkZWZpbmUgTExDX1NBUF9QUk8JMHg4RQkJLyogUHJvd2F5IEFjdGl2ZSBTdGF0aW9uIExpc3QJKi8KKyNkZWZpbmUgTExDX1NBUF9TTkFQCTB4QUEJCS8qIFNOQVAuIAkJCSovCisjZGVmaW5lIExMQ19TQVBfQkFOWUFOCTB4QkMJCS8qIEJhbnlhbi4gCQkJKi8KKyNkZWZpbmUgTExDX1NBUF9JUFgJMHhFMAkJLyogSVBYL1NQWC4gCQkJKi8KKyNkZWZpbmUgTExDX1NBUF9ORVRCRVVJCTB4RjAJCS8qIE5ldEJFVUkuIAkJCSovCisjZGVmaW5lIExMQ19TQVBfTEFOTUdSCTB4RjQJCS8qIExhbk1hbmFnZXIuIAkJCSovCisjZGVmaW5lIExMQ19TQVBfSU1QTAkweEY4CQkvKiBJTVBMCQkJCSovCisjZGVmaW5lIExMQ19TQVBfRElTQwkweEZDCQkvKiBEaXNjb3ZlcnkJCQkqLworI2RlZmluZSBMTENfU0FQX09TSQkweEZFCQkvKiBPU0kgTmV0d29yayBMYXllcnMuIAkJKi8KKyNkZWZpbmUgTExDX1NBUF9MQVIJMHhEQwkJLyogTEFOIEFkZHJlc3MgUmVzb2x1dGlvbiAJKi8KKyNkZWZpbmUgTExDX1NBUF9STQkweEQ0CQkvKiBSZXNvdXJjZSBNYW5hZ2VtZW50IAkJKi8KKyNkZWZpbmUgTExDX1NBUF9HTE9CQUwJMHhGRgkJLyogR2xvYmFsIFNBUC4gCQkJKi8KKworc3RydWN0IGxsY19wa3RpbmZvIHsKKwlpbnQgbHBpX2lmaW5kZXg7CisJdW5zaWduZWQgY2hhciBscGlfc2FwOworCXVuc2lnbmVkIGNoYXIgbHBpX21hY1tJRkhXQUREUkxFTl07Cit9OworCisjZW5kaWYgLyogX19MSU5VWF9MTENfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2xvb3AuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9sb29wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg4Y2ZlZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9sb29wLmgKQEAgLTAsMCArMSw5MCBAQAorI2lmbmRlZiBfTElOVVhfTE9PUF9ICisjZGVmaW5lIF9MSU5VWF9MT09QX0gKKworLyoKKyAqIGluY2x1ZGUvbGludXgvbG9vcC5oCisgKgorICogV3JpdHRlbiBieSBUaGVvZG9yZSBUcydvLCAzLzI5LzkzLgorICoKKyAqIENvcHlyaWdodCAxOTkzIGJ5IFRoZW9kb3JlIFRzJ28uICBSZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUgaXMKKyAqIHBlcm1pdHRlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBMT19OQU1FX1NJWkUJNjQKKyNkZWZpbmUgTE9fS0VZX1NJWkUJMzIKKworCisvKgorICogTG9vcCBmbGFncworICovCitlbnVtIHsKKwlMT19GTEFHU19SRUFEX09OTFkJPSAxLAorCUxPX0ZMQUdTX1VTRV9BT1BTCT0gMiwKKwlMT19GTEFHU19BVVRPQ0xFQVIJPSA0LAorfTsKKworI2luY2x1ZGUgPGFzbS9wb3NpeF90eXBlcy5oPgkvKiBmb3IgX19rZXJuZWxfb2xkX2Rldl90ICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4JLyogZm9yIF9fdTY0ICovCisKKy8qIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHZlcnNpb24gKi8KK3N0cnVjdCBsb29wX2luZm8geworCWludAkJICAgbG9fbnVtYmVyOwkJLyogaW9jdGwgci9vICovCisJX19rZXJuZWxfb2xkX2Rldl90IGxvX2RldmljZTsgCQkvKiBpb2N0bCByL28gKi8KKwl1bnNpZ25lZCBsb25nCSAgIGxvX2lub2RlOyAJCS8qIGlvY3RsIHIvbyAqLworCV9fa2VybmVsX29sZF9kZXZfdCBsb19yZGV2aWNlOyAJCS8qIGlvY3RsIHIvbyAqLworCWludAkJICAgbG9fb2Zmc2V0OworCWludAkJICAgbG9fZW5jcnlwdF90eXBlOworCWludAkJICAgbG9fZW5jcnlwdF9rZXlfc2l6ZTsgCS8qIGlvY3RsIHcvbyAqLworCWludAkJICAgbG9fZmxhZ3M7CQkJLyogaW9jdGwgci9vICovCisJY2hhcgkJICAgbG9fbmFtZVtMT19OQU1FX1NJWkVdOworCXVuc2lnbmVkIGNoYXIJICAgbG9fZW5jcnlwdF9rZXlbTE9fS0VZX1NJWkVdOyAvKiBpb2N0bCB3L28gKi8KKwl1bnNpZ25lZCBsb25nCSAgIGxvX2luaXRbMl07CisJY2hhcgkJICAgcmVzZXJ2ZWRbNF07Cit9OworCitzdHJ1Y3QgbG9vcF9pbmZvNjQgeworCV9fdTY0CQkgICBsb19kZXZpY2U7CQkJLyogaW9jdGwgci9vICovCisJX191NjQJCSAgIGxvX2lub2RlOwkJCS8qIGlvY3RsIHIvbyAqLworCV9fdTY0CQkgICBsb19yZGV2aWNlOwkJCS8qIGlvY3RsIHIvbyAqLworCV9fdTY0CQkgICBsb19vZmZzZXQ7CisJX191NjQJCSAgIGxvX3NpemVsaW1pdDsvKiBieXRlcywgMCA9PSBtYXggYXZhaWxhYmxlICovCisJX191MzIJCSAgIGxvX251bWJlcjsJCQkvKiBpb2N0bCByL28gKi8KKwlfX3UzMgkJICAgbG9fZW5jcnlwdF90eXBlOworCV9fdTMyCQkgICBsb19lbmNyeXB0X2tleV9zaXplOwkJLyogaW9jdGwgdy9vICovCisJX191MzIJCSAgIGxvX2ZsYWdzOwkJCS8qIGlvY3RsIHIvbyAqLworCV9fdTgJCSAgIGxvX2ZpbGVfbmFtZVtMT19OQU1FX1NJWkVdOworCV9fdTgJCSAgIGxvX2NyeXB0X25hbWVbTE9fTkFNRV9TSVpFXTsKKwlfX3U4CQkgICBsb19lbmNyeXB0X2tleVtMT19LRVlfU0laRV07IC8qIGlvY3RsIHcvbyAqLworCV9fdTY0CQkgICBsb19pbml0WzJdOworfTsKKworLyoKKyAqIExvb3AgZmlsdGVyIHR5cGVzCisgKi8KKworI2RlZmluZSBMT19DUllQVF9OT05FCQkwCisjZGVmaW5lIExPX0NSWVBUX1hPUgkJMQorI2RlZmluZSBMT19DUllQVF9ERVMJCTIKKyNkZWZpbmUgTE9fQ1JZUFRfRklTSDIJCTMgICAgLyogVHdvZmlzaCBlbmNyeXB0aW9uICovCisjZGVmaW5lIExPX0NSWVBUX0JMT1cJCTQKKyNkZWZpbmUgTE9fQ1JZUFRfQ0FTVDEyOAk1CisjZGVmaW5lIExPX0NSWVBUX0lERUEJCTYKKyNkZWZpbmUgTE9fQ1JZUFRfRFVNTVkJCTkKKyNkZWZpbmUgTE9fQ1JZUFRfU0tJUEpBQ0sJMTAKKyNkZWZpbmUgTE9fQ1JZUFRfQ1JZUFRPQVBJCTE4CisjZGVmaW5lIE1BWF9MT19DUllQVAkJMjAKKworLyoKKyAqIElPQ1RMIGNvbW1hbmRzIC0tLSB3ZSB3aWxsIGNvbW1hbmRlZXIgMHg0QyAoJ0wnKQorICovCisKKyNkZWZpbmUgTE9PUF9TRVRfRkQJCTB4NEMwMAorI2RlZmluZSBMT09QX0NMUl9GRAkJMHg0QzAxCisjZGVmaW5lIExPT1BfU0VUX1NUQVRVUwkJMHg0QzAyCisjZGVmaW5lIExPT1BfR0VUX1NUQVRVUwkJMHg0QzAzCisjZGVmaW5lIExPT1BfU0VUX1NUQVRVUzY0CTB4NEMwNAorI2RlZmluZSBMT09QX0dFVF9TVEFUVVM2NAkweDRDMDUKKyNkZWZpbmUgTE9PUF9DSEFOR0VfRkQJCTB4NEMwNgorI2RlZmluZSBMT09QX1NFVF9DQVBBQ0lUWQkweDRDMDcKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbHAuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9scC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YjFhNmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbHAuaApAQCAtMCwwICsxLDEwMCBAQAorI2lmbmRlZiBfTElOVVhfTFBfSAorI2RlZmluZSBfTElOVVhfTFBfSAorCisvKgorICogdXNyL2luY2x1ZGUvbGludXgvbHAuaCBjLjE5OTEtMTk5MiBKYW1lcyBXaWVnYW5kCisgKiBtYW55IG1vZGlmaWNhdGlvbnMgY29weXJpZ2h0IChDKSAxOTkyIE1pY2hhZWwgSy4gSm9obnNvbgorICogSW50ZXJydXB0IHN1cHBvcnQgYWRkZWQgMTk5MyBOaWdlbCBHYW1ibGUKKyAqIFJlbW92ZWQgODI1NSBzdGF0dXMgZGVmaW5lcyBmcm9tIGluc2lkZSBfX0tFUk5FTF9fIE1hcmNlbG8gVG9zYXR0aSAKKyAqLworCisvKgorICogUGVyIFBPU0lYIGd1aWRlbGluZXMsIHRoaXMgbW9kdWxlIHJlc2VydmVzIHRoZSBMUCBhbmQgbHAgcHJlZml4ZXMKKyAqIFRoZXNlIGFyZSB0aGUgbHBfdGFibGVbbWlub3JdLmZsYWdzIGZsYWdzLi4uCisgKi8KKyNkZWZpbmUgTFBfRVhJU1QgMHgwMDAxCisjZGVmaW5lIExQX1NFTEVDIDB4MDAwMgorI2RlZmluZSBMUF9CVVNZCSAweDAwMDQKKyNkZWZpbmUgTFBfQlVTWV9CSVRfUE9TIDIKKyNkZWZpbmUgTFBfT0ZGTAkgMHgwMDA4CisjZGVmaW5lIExQX05PUEEgIDB4MDAxMAorI2RlZmluZSBMUF9FUlIgICAweDAwMjAKKyNkZWZpbmUgTFBfQUJPUlQgMHgwMDQwCisjZGVmaW5lIExQX0NBUkVGVUwgMHgwMDgwIC8qIG9ic29sZXRlZCAtYXJjYSAqLworI2RlZmluZSBMUF9BQk9SVE9QRU4gMHgwMTAwCisKKyNkZWZpbmUgTFBfVFJVU1RfSVJRXyAgMHgwMjAwIC8qIG9ic29sZXRlICovCisjZGVmaW5lIExQX05PX1JFVkVSU0UgIDB4MDQwMCAvKiBObyByZXZlcnNlIG1vZGUgYXZhaWxhYmxlLiAqLworI2RlZmluZSBMUF9EQVRBX0FWQUlMICAweDA4MDAgLyogRGF0YSBpcyBhdmFpbGFibGUuICovCisKKy8qIAorICogYml0IGRlZmluZXMgZm9yIDgyNTUgc3RhdHVzIHBvcnQKKyAqIGJhc2UgKyAxCisgKiBhY2Nlc3NlZCB3aXRoIExQX1MobWlub3IpLCB3aGljaCBnZXRzIHRoZSBieXRlLi4uCisgKi8KKyNkZWZpbmUgTFBfUEJVU1kJMHg4MCAgLyogaW52ZXJ0ZWQgaW5wdXQsIGFjdGl2ZSBoaWdoICovCisjZGVmaW5lIExQX1BBQ0sJCTB4NDAgIC8qIHVuY2hhbmdlZCBpbnB1dCwgYWN0aXZlIGxvdyAqLworI2RlZmluZSBMUF9QT1VUUEEJMHgyMCAgLyogdW5jaGFuZ2VkIGlucHV0LCBhY3RpdmUgaGlnaCAqLworI2RlZmluZSBMUF9QU0VMRUNECTB4MTAgIC8qIHVuY2hhbmdlZCBpbnB1dCwgYWN0aXZlIGhpZ2ggKi8KKyNkZWZpbmUgTFBfUEVSUk9SUAkweDA4ICAvKiB1bmNoYW5nZWQgaW5wdXQsIGFjdGl2ZSBsb3cgKi8KKworLyogdGltZW91dCBmb3IgZWFjaCBjaGFyYWN0ZXIuICBUaGlzIGlzIHJlbGF0aXZlIHRvIGJ1cyBjeWNsZXMgLS0gaXQKKyAqIGlzIHRoZSBjb3VudCBpbiBhIGJ1c3kgbG9vcC4gIFRISVMgSVMgVEhFIFZBTFVFIFRPIENIQU5HRSBpZiB5b3UKKyAqIGhhdmUgZXh0cmVtZWx5IHNsb3cgcHJpbnRpbmcsIG9yIGlmIHRoZSBtYWNoaW5lIHNlZW1zIHRvIHNsb3cgZG93bgorICogYSBsb3Qgd2hlbiB5b3UgcHJpbnQuICBJZiB5b3UgaGF2ZSBzbG93IHByaW50aW5nLCBpbmNyZWFzZSB0aGlzCisgKiBudW1iZXIgYW5kIHJlY29tcGlsZSwgYW5kIGlmIHlvdXIgc3lzdGVtIGdldHMgYm9nZ2VkIGRvd24sIGRlY3JlYXNlCisgKiB0aGlzIG51bWJlci4gIFRoaXMgY2FuIGJlIGNoYW5nZWQgd2l0aCB0aGUgdHVuZWxwKDgpIGNvbW1hbmQgYXMgd2VsbC4KKyAqLworCisjZGVmaW5lIExQX0lOSVRfQ0hBUiAxMDAwCisKKy8qIFRoZSBwYXJhbGxlbCBwb3J0IHNwZWNzIGFwcGFyZW50bHkgc2F5IHRoYXQgdGhlcmUgbmVlZHMgdG8gYmUKKyAqIGEgLjV1c2VjIHdhaXQgYmVmb3JlIGFuZCBhZnRlciB0aGUgc3Ryb2JlLgorICovCisKKyNkZWZpbmUgTFBfSU5JVF9XQUlUIDEKKworLyogVGhpcyBpcyB0aGUgYW1vdW50IG9mIHRpbWUgdGhhdCB0aGUgZHJpdmVyIHdhaXRzIGZvciB0aGUgcHJpbnRlciB0bworICogY2F0Y2ggdXAgd2hlbiB0aGUgcHJpbnRlcidzIGJ1ZmZlciBhcHBlYXJzIHRvIGJlIGZpbGxlZC4gIElmIHlvdQorICogd2FudCB0byB0dW5lIHRoaXMgYW5kIGhhdmUgYSBmYXN0IHByaW50ZXIgKGkuZS4gSFBJSUlQKSwgZGVjcmVhc2UKKyAqIHRoaXMgbnVtYmVyLCBhbmQgaWYgeW91IGhhdmUgYSBzbG93IHByaW50ZXIsIGluY3JlYXNlIHRoaXMgbnVtYmVyLgorICogVGhpcyBpcyBpbiBodW5kcmVkdGhzIG9mIGEgc2Vjb25kLCB0aGUgZGVmYXVsdCAyIGJlaW5nIC4wNSBzZWNvbmQuCisgKiBPciB1c2UgdGhlIHR1bmVscCg4KSBjb21tYW5kLCB3aGljaCBpcyBlc3BlY2lhbGx5IG5pY2UgaWYgeW91IHdhbnQKKyAqIGNoYW5nZSBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIGNoYXJhY3RlciBhbmQgZ3JhcGhpY3MgcHJpbnRpbmcsIHdoaWNoCisgKiBhcmUgd2lsZGx5IGRpZmZlcmVudC4uLgorICovCisKKyNkZWZpbmUgTFBfSU5JVF9USU1FIDIKKworLyogSU9DVEwgbnVtYmVycyAqLworI2RlZmluZSBMUENIQVIgICAweDA2MDEgIC8qIGNvcnJlc3BvbmRzIHRvIExQX0lOSVRfQ0hBUiAqLworI2RlZmluZSBMUFRJTUUgICAweDA2MDIgIC8qIGNvcnJlc3BvbmRzIHRvIExQX0lOSVRfVElNRSAqLworI2RlZmluZSBMUEFCT1JUICAweDA2MDQgIC8qIGNhbGwgd2l0aCBUUlVFIGFyZyB0byBhYm9ydCBvbiBlcnJvciwKKwkJCSAgICBGQUxTRSB0byByZXRyeS4gIERlZmF1bHQgaXMgcmV0cnkuICAqLworI2RlZmluZSBMUFNFVElSUSAweDA2MDUgIC8qIGNhbGwgd2l0aCBuZXcgSVJRIG51bWJlciwKKwkJCSAgICBvciAwIGZvciBwb2xsaW5nIChubyBJUlEpICovCisjZGVmaW5lIExQR0VUSVJRIDB4MDYwNiAgLyogZ2V0IHRoZSBjdXJyZW50IElSUSBudW1iZXIgKi8KKyNkZWZpbmUgTFBXQUlUICAgMHgwNjA4ICAvKiBjb3JyZXNwb25kcyB0byBMUF9JTklUX1dBSVQgKi8KKy8qIE5PVEU6IExQQ0FSRUZVTCBpcyBvYnNvbGV0ZWQgYW5kIGl0JyBzIGFsd2F5cyB0aGUgZGVmYXVsdCByaWdodCBub3cgLWFyY2EgKi8KKyNkZWZpbmUgTFBDQVJFRlVMICAgMHgwNjA5ICAvKiBjYWxsIHdpdGggVFJVRSBhcmcgdG8gcmVxdWlyZSBvdXQtb2YtcGFwZXIsIG9mZi0KKwkJCSAgICBsaW5lLCBhbmQgZXJyb3IgaW5kaWNhdG9ycyBnb29kIG9uIGFsbCB3cml0ZXMsCisJCQkgICAgRkFMU0UgdG8gaWdub3JlIHRoZW0uICBEZWZhdWx0IGlzIGlnbm9yZS4gKi8KKyNkZWZpbmUgTFBBQk9SVE9QRU4gMHgwNjBhICAvKiBjYWxsIHdpdGggVFJVRSBhcmcgdG8gYWJvcnQgb3BlbigpIG9uIGVycm9yLAorCQkJICAgIEZBTFNFIHRvIGlnbm9yZSBlcnJvci4gIERlZmF1bHQgaXMgaWdub3JlLiAgKi8KKyNkZWZpbmUgTFBHRVRTVEFUVVMgMHgwNjBiICAvKiByZXR1cm4gTFBfUyhtaW5vcikgKi8KKyNkZWZpbmUgTFBSRVNFVCAgICAgMHgwNjBjICAvKiByZXNldCBwcmludGVyICovCisjaWZkZWYgTFBfU1RBVFMKKyNkZWZpbmUgTFBHRVRTVEFUUyAgMHgwNjBkICAvKiBnZXQgc3RhdGlzdGljcyAoc3RydWN0IGxwX3N0YXRzKSAqLworI2VuZGlmCisjZGVmaW5lIExQR0VURkxBR1MgIDB4MDYwZSAgLyogZ2V0IHN0YXR1cyBmbGFncyAqLworI2RlZmluZSBMUFNFVFRJTUVPVVQgMHgwNjBmIC8qIHNldCBwYXJwb3J0IHRpbWVvdXQgKi8KKworLyogdGltZW91dCBmb3IgcHJpbnRrJ2luZyBhIHRpbWVvdXQsIGluIGppZmZpZXMgKDEwMHRocyBvZiBhIHNlY29uZCkuCisgICBUaGlzIGlzIGFsc28gdXNlZCBmb3IgcmUtY2hlY2tpbmcgZXJyb3IgY29uZGl0aW9ucyBpZiBMUF9BQk9SVCBpcworICAgbm90IHNldC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IuICovCisKKyNkZWZpbmUgTFBfVElNRU9VVF9JTlRFUlJVUFQJKDYwICogSFopCisjZGVmaW5lIExQX1RJTUVPVVRfUE9MTEVECSgxMCAqIEhaKQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L21hZ2ljLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbWFnaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjY5MGQwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L21hZ2ljLmgKQEAgLTAsMCArMSw2MiBAQAorI2lmbmRlZiBfX0xJTlVYX01BR0lDX0hfXworI2RlZmluZSBfX0xJTlVYX01BR0lDX0hfXworCisjZGVmaW5lIEFERlNfU1VQRVJfTUFHSUMJMHhhZGY1CisjZGVmaW5lIEFGRlNfU1VQRVJfTUFHSUMJMHhhZGZmCisjZGVmaW5lIEFGU19TVVBFUl9NQUdJQyAgICAgICAgICAgICAgICAweDUzNDY0MTRGCisjZGVmaW5lIEFVVE9GU19TVVBFUl9NQUdJQwkweDAxODcKKyNkZWZpbmUgQ09EQV9TVVBFUl9NQUdJQwkweDczNzU3MjQ1CisjZGVmaW5lIENSQU1GU19NQUdJQwkJMHgyOGNkM2Q0NQkvKiBzb21lIHJhbmRvbSBudW1iZXIgKi8KKyNkZWZpbmUgQ1JBTUZTX01BR0lDX1dFTkQJMHg0NTNkY2QyOAkvKiBtYWdpYyBudW1iZXIgd2l0aCB0aGUgd3JvbmcgZW5kaWFuZXNzICovCisjZGVmaW5lIERFQlVHRlNfTUFHSUMgICAgICAgICAgMHg2NDYyNjcyMAorI2RlZmluZSBTWVNGU19NQUdJQwkJMHg2MjY1NjU3MgorI2RlZmluZSBTRUNVUklUWUZTX01BR0lDCTB4NzM2MzY2NzMKKyNkZWZpbmUgU0VMSU5VWF9NQUdJQwkJMHhmOTdjZmY4YworI2RlZmluZSBSQU1GU19NQUdJQwkJMHg4NTg0NThmNgkvKiBzb21lIHJhbmRvbSBudW1iZXIgKi8KKyNkZWZpbmUgVE1QRlNfTUFHSUMJCTB4MDEwMjE5OTQKKyNkZWZpbmUgSFVHRVRMQkZTX01BR0lDIAkweDk1ODQ1OGY2CS8qIHNvbWUgcmFuZG9tIG51bWJlciAqLworI2RlZmluZSBTUVVBU0hGU19NQUdJQwkJMHg3MzcxNzM2OAorI2RlZmluZSBFRlNfU1VQRVJfTUFHSUMJCTB4NDE0QTUzCisjZGVmaW5lIEVYVDJfU1VQRVJfTUFHSUMJMHhFRjUzCisjZGVmaW5lIEVYVDNfU1VQRVJfTUFHSUMJMHhFRjUzCisjZGVmaW5lIFhFTkZTX1NVUEVSX01BR0lDCTB4YWJiYTE5NzQKKyNkZWZpbmUgRVhUNF9TVVBFUl9NQUdJQwkweEVGNTMKKyNkZWZpbmUgQlRSRlNfU1VQRVJfTUFHSUMJMHg5MTIzNjgzRQorI2RlZmluZSBIUEZTX1NVUEVSX01BR0lDCTB4Zjk5NWU4NDkKKyNkZWZpbmUgSVNPRlNfU1VQRVJfTUFHSUMJMHg5NjYwCisjZGVmaW5lIEpGRlMyX1NVUEVSX01BR0lDCTB4NzJiNgorI2RlZmluZSBBTk9OX0lOT0RFX0ZTX01BR0lDCTB4MDkwNDE5MzQKKworI2RlZmluZSBNSU5JWF9TVVBFUl9NQUdJQwkweDEzN0YJCS8qIG9yaWdpbmFsIG1pbml4IGZzICovCisjZGVmaW5lIE1JTklYX1NVUEVSX01BR0lDMgkweDEzOEYJCS8qIG1pbml4IGZzLCAzMCBjaGFyIG5hbWVzICovCisjZGVmaW5lIE1JTklYMl9TVVBFUl9NQUdJQwkweDI0NjgJCS8qIG1pbml4IFYyIGZzICovCisjZGVmaW5lIE1JTklYMl9TVVBFUl9NQUdJQzIJMHgyNDc4CQkvKiBtaW5peCBWMiBmcywgMzAgY2hhciBuYW1lcyAqLworI2RlZmluZSBNSU5JWDNfU1VQRVJfTUFHSUMJMHg0ZDVhCQkvKiBtaW5peCBWMyBmcyAqLworCisjZGVmaW5lIE1TRE9TX1NVUEVSX01BR0lDCTB4NGQ0NAkJLyogTUQgKi8KKyNkZWZpbmUgTkNQX1NVUEVSX01BR0lDCQkweDU2NGMJCS8qIEd1ZXNzLCB3aGF0IDB4NTY0YyBpcyA6LSkgKi8KKyNkZWZpbmUgTkZTX1NVUEVSX01BR0lDCQkweDY5NjkKKyNkZWZpbmUgT1BFTlBST01fU1VQRVJfTUFHSUMJMHg5ZmExCisjZGVmaW5lIFBST0NfU1VQRVJfTUFHSUMJMHg5ZmEwCisjZGVmaW5lIFFOWDRfU1VQRVJfTUFHSUMJMHgwMDJmCQkvKiBxbng0IGZzIGRldGVjdGlvbiAqLworCisjZGVmaW5lIFJFSVNFUkZTX1NVUEVSX01BR0lDCTB4NTI2NTQ5NzMJLyogdXNlZCBieSBnY2MgKi8KKwkJCQkJLyogdXNlZCBieSBmaWxlIHN5c3RlbSB1dGlsaXRpZXMgdGhhdAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vayBhdCB0aGUgc3VwZXJibG9jaywgZXRjLiAgKi8KKyNkZWZpbmUgUkVJU0VSRlNfU1VQRVJfTUFHSUNfU1RSSU5HCSJSZUlzRXJGcyIKKyNkZWZpbmUgUkVJU0VSMkZTX1NVUEVSX01BR0lDX1NUUklORwkiUmVJc0VyMkZzIgorI2RlZmluZSBSRUlTRVIyRlNfSlJfU1VQRVJfTUFHSUNfU1RSSU5HCSJSZUlzRXIzRnMiCisKKyNkZWZpbmUgU01CX1NVUEVSX01BR0lDCQkweDUxN0IKKyNkZWZpbmUgVVNCREVWSUNFX1NVUEVSX01BR0lDCTB4OWZhMgorI2RlZmluZSBDR1JPVVBfU1VQRVJfTUFHSUMJMHgyN2UwZWIKKworI2RlZmluZSBGVVRFWEZTX1NVUEVSX01BR0lDCTB4QkFEMURFQQorCisjZGVmaW5lIFNUQUNLX0VORF9NQUdJQwkJMHg1N0FDNkU5RAorCisjZGVmaW5lIERFVlBUU19TVVBFUl9NQUdJQwkweDFjZDEKKyNkZWZpbmUgU09DS0ZTX01BR0lDCQkweDUzNEY0MzRCCisjZGVmaW5lIFY5RlNfTUFHSUMJCTB4MDEwMjE5OTcKKworI2VuZGlmIC8qIF9fTElOVVhfTUFHSUNfSF9fICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbWFqb3IuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9tYWpvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhOGNhOTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbWFqb3IuaApAQCAtMCwwICsxLDE3NyBAQAorI2lmbmRlZiBfTElOVVhfTUFKT1JfSAorI2RlZmluZSBfTElOVVhfTUFKT1JfSAorCisvKgorICogVGhpcyBmaWxlIGhhcyBkZWZpbml0aW9ucyBmb3IgbWFqb3IgZGV2aWNlIG51bWJlcnMuCisgKiBGb3IgdGhlIGRldmljZSBudW1iZXIgYXNzaWdubWVudHMsIHNlZSBEb2N1bWVudGF0aW9uL2RldmljZXMudHh0LgorICovCisKKyNkZWZpbmUgVU5OQU1FRF9NQUpPUgkJMAorI2RlZmluZSBNRU1fTUFKT1IJCTEKKyNkZWZpbmUgUkFNRElTS19NQUpPUgkJMQorI2RlZmluZSBGTE9QUFlfTUFKT1IJCTIKKyNkZWZpbmUgUFRZX01BU1RFUl9NQUpPUgkyCisjZGVmaW5lIElERTBfTUFKT1IJCTMKKyNkZWZpbmUgSERfTUFKT1IJCUlERTBfTUFKT1IKKyNkZWZpbmUgUFRZX1NMQVZFX01BSk9SCQkzCisjZGVmaW5lIFRUWV9NQUpPUgkJNAorI2RlZmluZSBUVFlBVVhfTUFKT1IJCTUKKyNkZWZpbmUgTFBfTUFKT1IJCTYKKyNkZWZpbmUgVkNTX01BSk9SCQk3CisjZGVmaW5lIExPT1BfTUFKT1IJCTcKKyNkZWZpbmUgU0NTSV9ESVNLMF9NQUpPUgk4CisjZGVmaW5lIFNDU0lfVEFQRV9NQUpPUgkJOQorI2RlZmluZSBNRF9NQUpPUgkJOQorI2RlZmluZSBNSVNDX01BSk9SCQkxMAorI2RlZmluZSBTQ1NJX0NEUk9NX01BSk9SCTExCisjZGVmaW5lIE1VWF9NQUpPUgkJMTEJLyogUEEtUklTQyBvbmx5ICovCisjZGVmaW5lIFhUX0RJU0tfTUFKT1IJCTEzCisjZGVmaW5lIElOUFVUX01BSk9SCQkxMworI2RlZmluZSBTT1VORF9NQUpPUgkJMTQKKyNkZWZpbmUgQ0RVMzFBX0NEUk9NX01BSk9SCTE1CisjZGVmaW5lIEpPWVNUSUNLX01BSk9SCQkxNQorI2RlZmluZSBHT0xEU1RBUl9DRFJPTV9NQUpPUgkxNgorI2RlZmluZSBPUFRJQ1NfQ0RST01fTUFKT1IJMTcKKyNkZWZpbmUgU0FOWU9fQ0RST01fTUFKT1IJMTgKKyNkZWZpbmUgQ1lDTEFERVNfTUFKT1IJCTE5CisjZGVmaW5lIENZQ0xBREVTQVVYX01BSk9SCTIwCisjZGVmaW5lIE1JVFNVTUlfWF9DRFJPTV9NQUpPUgkyMAorI2RlZmluZSBNRk1fQUNPUk5fTUFKT1IJCTIxCS8qIEFSTSBMaW51eCAvZGV2L21mbSAqLworI2RlZmluZSBTQ1NJX0dFTkVSSUNfTUFKT1IJMjEKKyNkZWZpbmUgSURFMV9NQUpPUgkJMjIKKyNkZWZpbmUgRElHSUNVX01BSk9SCQkyMgorI2RlZmluZSBESUdJX01BSk9SCQkyMworI2RlZmluZSBNSVRTVU1JX0NEUk9NX01BSk9SCTIzCisjZGVmaW5lIENEVTUzNV9DRFJPTV9NQUpPUgkyNAorI2RlZmluZSBTVExfU0VSSUFMTUFKT1IJCTI0CisjZGVmaW5lIE1BVFNVU0hJVEFfQ0RST01fTUFKT1IJMjUKKyNkZWZpbmUgU1RMX0NBTExPVVRNQUpPUgkyNQorI2RlZmluZSBNQVRTVVNISVRBX0NEUk9NMl9NQUpPUgkyNgorI2RlZmluZSBRSUMxMTdfVEFQRV9NQUpPUgkyNworI2RlZmluZSBNQVRTVVNISVRBX0NEUk9NM19NQUpPUgkyNworI2RlZmluZSBNQVRTVVNISVRBX0NEUk9NNF9NQUpPUgkyOAorI2RlZmluZSBTVExfU0lPTUVNTUFKT1IJCTI4CisjZGVmaW5lIEFDU0lfTUFKT1IJCTI4CisjZGVmaW5lIEFaVEVDSF9DRFJPTV9NQUpPUgkyOQorI2RlZmluZSBGQl9NQUpPUgkJMjkgICAvKiAvZGV2L2ZiKiBmcmFtZWJ1ZmZlcnMgKi8KKyNkZWZpbmUgQ00yMDZfQ0RST01fTUFKT1IJMzIKKyNkZWZpbmUgSURFMl9NQUpPUgkJMzMKKyNkZWZpbmUgSURFM19NQUpPUgkJMzQKKyNkZWZpbmUgWjg1MzBfTUFKT1IJCTM0CisjZGVmaW5lIFhQUkFNX01BSk9SCQkzNSAgIC8qIEV4cGFuZGVkIHN0b3JhZ2Ugb24gUy8zOTA6ICJzbG93IHJhbSIqLworI2RlZmluZSBORVRMSU5LX01BSk9SCQkzNgorI2RlZmluZSBQUzJFU0RJX01BSk9SCQkzNgorI2RlZmluZSBJREVUQVBFX01BSk9SCQkzNworI2RlZmluZSBaMlJBTV9NQUpPUgkJMzcKKyNkZWZpbmUgQVBCTE9DS19NQUpPUgkJMzggICAvKiBBUDEwMDAgQmxvY2sgZGV2aWNlICovCisjZGVmaW5lIEREVl9NQUpPUgkJMzkgICAvKiBBUDEwMDAgRERWIGJsb2NrIGRldmljZSAqLworI2RlZmluZSBOQkRfTUFKT1IJCTQzICAgLyogTmV0d29yayBibG9jayBkZXZpY2UJKi8KKyNkZWZpbmUgUklTQ09NOF9OT1JNQUxfTUFKT1IJNDgKKyNkZWZpbmUgREFDOTYwX01BSk9SCQk0OCAgIC8qIDQ4Li41NSAqLworI2RlZmluZSBSSVNDT004X0NBTExPVVRfTUFKT1IJNDkKKyNkZWZpbmUgTUtJU1NfTUFKT1IJCTU1CisjZGVmaW5lIERTUDU2S19NQUpPUgkJNTUgICAvKiBEU1A1NjAwMSBwcm9jZXNzb3IgZGV2aWNlICovCisKKyNkZWZpbmUgSURFNF9NQUpPUgkJNTYKKyNkZWZpbmUgSURFNV9NQUpPUgkJNTcKKworI2RlZmluZSBTQ1NJX0RJU0sxX01BSk9SCTY1CisjZGVmaW5lIFNDU0lfRElTSzJfTUFKT1IJNjYKKyNkZWZpbmUgU0NTSV9ESVNLM19NQUpPUgk2NworI2RlZmluZSBTQ1NJX0RJU0s0X01BSk9SCTY4CisjZGVmaW5lIFNDU0lfRElTSzVfTUFKT1IJNjkKKyNkZWZpbmUgU0NTSV9ESVNLNl9NQUpPUgk3MAorI2RlZmluZSBTQ1NJX0RJU0s3X01BSk9SCTcxCisKKyNkZWZpbmUgQ09NUEFRX1NNQVJUMl9NQUpPUgk3MgorI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SMQk3MworI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SMgk3NAorI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SMwk3NQorI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SNAk3NgorI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SNQk3NworI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SNgk3OAorI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SNwk3OQorCisjZGVmaW5lIFNQRUNJQUxJWF9OT1JNQUxfTUFKT1IJNzUKKyNkZWZpbmUgU1BFQ0lBTElYX0NBTExPVVRfTUFKT1IJNzYKKworI2RlZmluZSBBVVJPUkFfTUFKT1IJCTc5CisKKyNkZWZpbmUgSTJPX01BSk9SCQk4MAkvKiA4MC0+ODcgKi8KKworI2RlZmluZSBTSE1JUV9NQUpPUgkJODUgICAvKiBMaW51eC9taXBzLCBTR0kgL2Rldi9zaG1pcSAqLworI2RlZmluZSBTQ1NJX0NIQU5HRVJfTUFKT1IgICAgICA4NgorCisjZGVmaW5lIElERTZfTUFKT1IJCTg4CisjZGVmaW5lIElERTdfTUFKT1IJCTg5CisjZGVmaW5lIElERThfTUFKT1IJCTkwCisjZGVmaW5lIElERTlfTUFKT1IJCTkxCisKKyNkZWZpbmUgREFTRF9NQUpPUgkJOTQKKworI2RlZmluZSBNRElTS19NQUpPUgkJOTUKKworI2RlZmluZSBVQkRfTUFKT1IJCTk4CisKKyNkZWZpbmUgUFBfTUFKT1IJCTk5CisjZGVmaW5lIEpTRkRfTUFKT1IJCTk5CisKKyNkZWZpbmUgUEhPTkVfTUFKT1IJCTEwMAorCisjZGVmaW5lIENPTVBBUV9DSVNTX01BSk9SCTEwNAorI2RlZmluZSBDT01QQVFfQ0lTU19NQUpPUjEJMTA1CisjZGVmaW5lIENPTVBBUV9DSVNTX01BSk9SMiAgICAgIDEwNgorI2RlZmluZSBDT01QQVFfQ0lTU19NQUpPUjMgICAgICAxMDcKKyNkZWZpbmUgQ09NUEFRX0NJU1NfTUFKT1I0ICAgICAgMTA4CisjZGVmaW5lIENPTVBBUV9DSVNTX01BSk9SNSAgICAgIDEwOQorI2RlZmluZSBDT01QQVFfQ0lTU19NQUpPUjYgICAgICAxMTAKKyNkZWZpbmUgQ09NUEFRX0NJU1NfTUFKT1I3ICAgICAgMTExCisKKyNkZWZpbmUgVklPREFTRF9NQUpPUgkJMTEyCisjZGVmaW5lIFZJT0NEX01BSk9SCQkxMTMKKworI2RlZmluZSBBVEFSQUlEX01BSk9SCQkxMTQKKworI2RlZmluZSBTQ1NJX0RJU0s4X01BSk9SCTEyOAorI2RlZmluZSBTQ1NJX0RJU0s5X01BSk9SCTEyOQorI2RlZmluZSBTQ1NJX0RJU0sxMF9NQUpPUgkxMzAKKyNkZWZpbmUgU0NTSV9ESVNLMTFfTUFKT1IJMTMxCisjZGVmaW5lIFNDU0lfRElTSzEyX01BSk9SCTEzMgorI2RlZmluZSBTQ1NJX0RJU0sxM19NQUpPUgkxMzMKKyNkZWZpbmUgU0NTSV9ESVNLMTRfTUFKT1IJMTM0CisjZGVmaW5lIFNDU0lfRElTSzE1X01BSk9SCTEzNQorCisjZGVmaW5lIFVOSVg5OF9QVFlfTUFTVEVSX01BSk9SCTEyOAorI2RlZmluZSBVTklYOThfUFRZX01BSk9SX0NPVU5UCTgKKyNkZWZpbmUgVU5JWDk4X1BUWV9TTEFWRV9NQUpPUgkoVU5JWDk4X1BUWV9NQVNURVJfTUFKT1IrVU5JWDk4X1BUWV9NQUpPUl9DT1VOVCkKKworI2RlZmluZSBEUkJEX01BSk9SCQkxNDcKKyNkZWZpbmUgUlRGX01BSk9SCQkxNTAKKyNkZWZpbmUgUkFXX01BSk9SCQkxNjIKKworI2RlZmluZSBVU0JfQUNNX01BSk9SCQkxNjYKKyNkZWZpbmUgVVNCX0FDTV9BVVhfTUFKT1IJMTY3CisjZGVmaW5lIFVTQl9DSEFSX01BSk9SCQkxODAKKworI2RlZmluZSBNTUNfQkxPQ0tfTUFKT1IJCTE3OQorCisjZGVmaW5lIFZYVk1fTUFKT1IJCTE5OQkvKiBWRVJJVEFTIHZvbHVtZSBpL28gZHJpdmVyICAgICovCisjZGVmaW5lIFZYU1BFQ19NQUpPUgkJMjAwCS8qIFZFUklUQVMgdm9sdW1lIGNvbmZpZyBkcml2ZXIgKi8KKyNkZWZpbmUgVlhETVBfTUFKT1IJCTIwMQkvKiBWRVJJVEFTIHZvbHVtZSBtdWx0aXBhdGggZHJpdmVyICovCisKKyNkZWZpbmUgWEVOVkJEX01BSk9SCQkyMDIJLyogWGVuIHZpcnR1YWwgYmxvY2sgZGV2aWNlICovCisKKyNkZWZpbmUgTVNSX01BSk9SCQkyMDIKKyNkZWZpbmUgQ1BVSURfTUFKT1IJCTIwMworCisjZGVmaW5lIE9TU1RfTUFKT1IJCTIwNgkvKiBPblN0cmVhbS1TQ3gwIFNDU0kgdGFwZSAqLworCisjZGVmaW5lIElCTV9UVFkzMjcwX01BSk9SCTIyNworI2RlZmluZSBJQk1fRlMzMjcwX01BSk9SCTIyOAorCisjZGVmaW5lIFZJT1RBUEVfTUFKT1IJCTIzMAorCisjZGVmaW5lIEJMT0NLX0VYVF9NQUpPUgkJMjU5CisjZGVmaW5lIFNDU0lfT1NEX01BSk9SCQkyNjAJLyogb3Blbi1vc2QncyBPU0Qgc2NzaSBkZXZpY2UgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbWFwX3RvXzdzZWdtZW50LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbWFwX3RvXzdzZWdtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJkNjJhNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9tYXBfdG9fN3NlZ21lbnQuaApAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBIZW5rIFZlcmdvbmV0IDxIZW5rLlZlcmdvbmV0QGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgTUFQX1RPXzdTRUdNRU5UX0gKKyNkZWZpbmUgTUFQX1RPXzdTRUdNRU5UX0gKKworLyogVGhpcyBmaWxlIHByb3ZpZGVzIHRyYW5zbGF0aW9uIHByaW1pdGl2ZXMgYW5kIHRhYmxlcyBmb3IgdGhlIGNvbnZlcnNpb24KKyAqIG9mIChBU0NJSSkgY2hhcmFjdGVycyB0byBhIDctc2VnbWVudHMgbm90YXRpb24uCisgKgorICogVGhlIDcgc2VnbWVudCdzIHdpa2lwZWRpYSBub3RhdGlvbiBiZWxvdyBpcyB1c2VkIGFzIHN0YW5kYXJkLgorICogU2VlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NldmVuX3NlZ21lbnRfZGlzcGxheQorICoKKyAqIE5vdGF0aW9uOgkrLWEtKworICoJCWYgICBiCisgKgkJKy1nLSsKKyAqCQllICAgYworICoJCSstZC0rCisgKgorICogVXNhZ2U6CisgKgorICogICBSZWdpc3RlciBhIG1hcCB2YXJpYWJsZSwgYW5kIGZpbGwgaXQgd2l0aCBhIGNoYXJhY3RlciBzZXQ6CisgKglzdGF0aWMgU0VHN19ERUZBVUxUX01BUChtYXBfc2VnNyk7CisgKgorICoKKyAqICAgVGhlbiB1c2UgZm9yIGNvbnZlcnNpb246CisgKglzZWc3ID0gbWFwX3RvX3NlZzcoJm1hcF9zZWc3LCBzb21lX2NoYXIpOworICoJLi4uCisgKgorICogSW4gZGV2aWNlIGRyaXZlcnMgaXQgaXMgcmVjb21tZW5kZWQsIGlmIHJlcXVpcmVkLCB0byBtYWtlIHRoZSBjaGFyIG1hcAorICogYWNjZXNzaWJsZSB2aWEgdGhlIHN5c2ZzIGludGVyZmFjZSB1c2luZyB0aGUgZm9sbG93aW5nIHNjaGVtZToKKyAqCisgKiBzdGF0aWMgc3NpemVfdCBzaG93X21hcChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikgeworICoJbWVtY3B5KGJ1ZiwgJm1hcF9zZWc3LCBzaXplb2YobWFwX3NlZzcpKTsKKyAqCXJldHVybiBzaXplb2YobWFwX3NlZzcpOworICogfQorICogc3RhdGljIHNzaXplX3Qgc3RvcmVfbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY250KSB7CisgKglpZihjbnQgIT0gc2l6ZW9mKG1hcF9zZWc3KSkKKyAqCQlyZXR1cm4gLUVJTlZBTDsKKyAqCW1lbWNweSgmbWFwX3NlZzcsIGJ1ZiwgY250KTsKKyAqCXJldHVybiBjbnQ7CisgKiB9CisgKiBzdGF0aWMgREVWSUNFX0FUVFIobWFwX3NlZzcsIFBFUk1TX1JXLCBzaG93X21hcCwgc3RvcmVfbWFwKTsKKyAqCisgKiBIaXN0b3J5OgorICogMjAwNS0wNS0zMQlSRkMgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZworICovCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKworCisjZGVmaW5lIEJJVF9TRUc3X0EJCTAKKyNkZWZpbmUgQklUX1NFRzdfQgkJMQorI2RlZmluZSBCSVRfU0VHN19DCQkyCisjZGVmaW5lIEJJVF9TRUc3X0QJCTMKKyNkZWZpbmUgQklUX1NFRzdfRQkJNAorI2RlZmluZSBCSVRfU0VHN19GCQk1CisjZGVmaW5lIEJJVF9TRUc3X0cJCTYKKyNkZWZpbmUgQklUX1NFRzdfUkVTRVJWRUQJNworCitzdHJ1Y3Qgc2VnN19jb252ZXJzaW9uX21hcCB7CisJdW5zaWduZWQgY2hhcgl0YWJsZVsxMjhdOworfTsKKworc3RhdGljIF9faW5saW5lX18gaW50IG1hcF90b19zZWc3KHN0cnVjdCBzZWc3X2NvbnZlcnNpb25fbWFwICptYXAsIGludCBjKQoreworCXJldHVybiBjID49IDAgJiYgYyA8IHNpemVvZihtYXAtPnRhYmxlKSA/IG1hcC0+dGFibGVbY10gOiAtRUlOVkFMOworfQorCisjZGVmaW5lIFNFRzdfQ09OVkVSU0lPTl9NQVAoX25hbWUsIF9tYXApCVwKKwlzdHJ1Y3Qgc2VnN19jb252ZXJzaW9uX21hcCBfbmFtZSA9IHsgLnRhYmxlID0geyBfbWFwIH0gfQorCisvKgorICogSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIGEgZmFjaWxpdHkgdGhhdCBhbGxvd3MgdXNlciBzcGFjZSB0byByZWRlZmluZQorICogY3VzdG9tIGNoYXJhY3RlciBzZXRzIGZvciBMQ0QgZGV2aWNlcy4gUGxlYXNlIHVzZSBhIHN5c2ZzIGludGVyZmFjZQorICogYXMgZGVzY3JpYmVkIGFib3ZlLgorICovCisjZGVmaW5lIE1BUF9UT19TRUc3X1NZU0ZTX0ZJTEUJIm1hcF9zZWc3IgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVNDSUkgY29udmVyc2lvbiB0YWJsZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBfU0VHNyhsLGEsYixjLGQsZSxmLGcpCVwKKyAgICAgICgJYTw8QklUX1NFRzdfQSB8CWI8PEJJVF9TRUc3X0IgfAljPDxCSVRfU0VHN19DIHwJZDw8QklUX1NFRzdfRCB8CVwKKwllPDxCSVRfU0VHN19FIHwJZjw8QklUX1NFRzdfRiB8CWc8PEJJVF9TRUc3X0cgKQorCisjZGVmaW5lIF9NQVBfMF8zMl9BU0NJSV9TRUc3X05PTl9QUklOVEFCTEUJXAorCTAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorCisjZGVmaW5lIF9NQVBfMzNfNDdfQVNDSUlfU0VHN19TWU1CT0wJCVwKKyBfU0VHNygnIScsMCwwLDAsMCwxLDEsMCksIF9TRUc3KCciJywwLDEsMCwwLDAsMSwwKSwgX1NFRzcoJyMnLDAsMSwxLDAsMSwxLDApLFwKKyBfU0VHNygnJCcsMSwwLDEsMSwwLDEsMSksIF9TRUc3KCclJywwLDAsMSwwLDAsMSwwKSwgX1NFRzcoJyYnLDEsMCwxLDEsMSwxLDEpLFwKKyBfU0VHNygnXCcnLDAsMCwwLDAsMCwxLDApLF9TRUc3KCcoJywxLDAsMCwxLDEsMSwwKSwgX1NFRzcoJyknLDEsMSwxLDEsMCwwLDApLFwKKyBfU0VHNygnKicsMCwxLDEsMCwxLDEsMSksIF9TRUc3KCcrJywwLDEsMSwwLDAsMCwxKSwgX1NFRzcoJywnLDAsMCwwLDAsMSwwLDApLFwKKyBfU0VHNygnLScsMCwwLDAsMCwwLDAsMSksIF9TRUc3KCcuJywwLDAsMCwwLDEsMCwwKSwgX1NFRzcoJy8nLDAsMSwwLDAsMSwwLDEpLAorCisjZGVmaW5lIF9NQVBfNDhfNTdfQVNDSUlfU0VHN19OVU1FUklDCQlcCisgX1NFRzcoJzAnLDEsMSwxLDEsMSwxLDApLCBfU0VHNygnMScsMCwxLDEsMCwwLDAsMCksIF9TRUc3KCcyJywxLDEsMCwxLDEsMCwxKSxcCisgX1NFRzcoJzMnLDEsMSwxLDEsMCwwLDEpLCBfU0VHNygnNCcsMCwxLDEsMCwwLDEsMSksIF9TRUc3KCc1JywxLDAsMSwxLDAsMSwxKSxcCisgX1NFRzcoJzYnLDEsMCwxLDEsMSwxLDEpLCBfU0VHNygnNycsMSwxLDEsMCwwLDAsMCksIF9TRUc3KCc4JywxLDEsMSwxLDEsMSwxKSxcCisgX1NFRzcoJzknLDEsMSwxLDEsMCwxLDEpLAorCisjZGVmaW5lIF9NQVBfNThfNjRfQVNDSUlfU0VHN19TWU1CT0wJCVwKKyBfU0VHNygnOicsMCwwLDAsMSwwLDAsMSksIF9TRUc3KCc7JywwLDAsMCwxLDAsMCwxKSwgX1NFRzcoJzwnLDEsMCwwLDAsMCwxLDEpLFwKKyBfU0VHNygnPScsMCwwLDAsMSwwLDAsMSksIF9TRUc3KCc+JywxLDEsMCwwLDAsMCwxKSwgX1NFRzcoJz8nLDEsMSwxLDAsMCwxLDApLFwKKyBfU0VHNygnQCcsMSwxLDAsMSwxLDEsMSksCisKKyNkZWZpbmUgX01BUF82NV85MF9BU0NJSV9TRUc3X0FMUEhBX1VQUFIJXAorIF9TRUc3KCdBJywxLDEsMSwwLDEsMSwxKSwgX1NFRzcoJ0InLDEsMSwxLDEsMSwxLDEpLCBfU0VHNygnQycsMSwwLDAsMSwxLDEsMCksXAorIF9TRUc3KCdEJywxLDEsMSwxLDEsMSwwKSwgX1NFRzcoJ0UnLDEsMCwwLDEsMSwxLDEpLCBfU0VHNygnRicsMSwwLDAsMCwxLDEsMSksXAorIF9TRUc3KCdHJywxLDEsMSwxLDAsMSwxKSwgX1NFRzcoJ0gnLDAsMSwxLDAsMSwxLDEpLCBfU0VHNygnSScsMCwxLDEsMCwwLDAsMCksXAorIF9TRUc3KCdKJywwLDEsMSwxLDAsMCwwKSwgX1NFRzcoJ0snLDAsMSwxLDAsMSwxLDEpLCBfU0VHNygnTCcsMCwwLDAsMSwxLDEsMCksXAorIF9TRUc3KCdNJywxLDEsMSwwLDEsMSwwKSwgX1NFRzcoJ04nLDEsMSwxLDAsMSwxLDApLCBfU0VHNygnTycsMSwxLDEsMSwxLDEsMCksXAorIF9TRUc3KCdQJywxLDEsMCwwLDEsMSwxKSwgX1NFRzcoJ1EnLDEsMSwxLDEsMSwxLDApLCBfU0VHNygnUicsMSwxLDEsMCwxLDEsMSksXAorIF9TRUc3KCdTJywxLDAsMSwxLDAsMSwxKSwgX1NFRzcoJ1QnLDAsMCwwLDEsMSwxLDEpLCBfU0VHNygnVScsMCwxLDEsMSwxLDEsMCksXAorIF9TRUc3KCdWJywwLDEsMSwxLDEsMSwwKSwgX1NFRzcoJ1cnLDAsMSwxLDEsMSwxLDEpLCBfU0VHNygnWCcsMCwxLDEsMCwxLDEsMSksXAorIF9TRUc3KCdZJywwLDEsMSwwLDAsMSwxKSwgX1NFRzcoJ1onLDEsMSwwLDEsMSwwLDEpLAorCisjZGVmaW5lIF9NQVBfOTFfOTZfQVNDSUlfU0VHN19TWU1CT0wJCVwKKyBfU0VHNygnWycsMSwwLDAsMSwxLDEsMCksIF9TRUc3KCdcXCcsMCwwLDEsMCwwLDEsMSksX1NFRzcoJ10nLDEsMSwxLDEsMCwwLDApLFwKKyBfU0VHNygnXicsMSwxLDAsMCwwLDEsMCksIF9TRUc3KCdfJywwLDAsMCwxLDAsMCwwKSwgX1NFRzcoJ2AnLDAsMSwwLDAsMCwwLDApLAorCisjZGVmaW5lIF9NQVBfOTdfMTIyX0FTQ0lJX1NFRzdfQUxQSEFfTE9XRVIJXAorIF9TRUc3KCdBJywxLDEsMSwwLDEsMSwxKSwgX1NFRzcoJ2InLDAsMCwxLDEsMSwxLDEpLCBfU0VHNygnYycsMCwwLDAsMSwxLDAsMSksXAorIF9TRUc3KCdkJywwLDEsMSwxLDEsMCwxKSwgX1NFRzcoJ0UnLDEsMCwwLDEsMSwxLDEpLCBfU0VHNygnRicsMSwwLDAsMCwxLDEsMSksXAorIF9TRUc3KCdHJywxLDEsMSwxLDAsMSwxKSwgX1NFRzcoJ2gnLDAsMCwxLDAsMSwxLDEpLCBfU0VHNygnaScsMCwwLDEsMCwwLDAsMCksXAorIF9TRUc3KCdqJywwLDAsMSwxLDAsMCwwKSwgX1NFRzcoJ2snLDAsMCwxLDAsMSwxLDEpLCBfU0VHNygnTCcsMCwwLDAsMSwxLDEsMCksXAorIF9TRUc3KCdNJywxLDEsMSwwLDEsMSwwKSwgX1NFRzcoJ24nLDAsMCwxLDAsMSwwLDEpLCBfU0VHNygnbycsMCwwLDEsMSwxLDAsMSksXAorIF9TRUc3KCdQJywxLDEsMCwwLDEsMSwxKSwgX1NFRzcoJ3EnLDEsMSwxLDAsMCwxLDEpLCBfU0VHNygncicsMCwwLDAsMCwxLDAsMSksXAorIF9TRUc3KCdTJywxLDAsMSwxLDAsMSwxKSwgX1NFRzcoJ1QnLDAsMCwwLDEsMSwxLDEpLCBfU0VHNygndScsMCwwLDEsMSwxLDAsMCksXAorIF9TRUc3KCd2JywwLDAsMSwxLDEsMCwwKSwgX1NFRzcoJ1cnLDAsMSwxLDEsMSwxLDEpLCBfU0VHNygnWCcsMCwxLDEsMCwxLDEsMSksXAorIF9TRUc3KCd5JywwLDEsMSwxLDAsMSwxKSwgX1NFRzcoJ1onLDEsMSwwLDEsMSwwLDEpLAorCisjZGVmaW5lIF9NQVBfMTIzXzEyNl9BU0NJSV9TRUc3X1NZTUJPTAkJXAorIF9TRUc3KCd7JywxLDAsMCwxLDEsMSwwKSwgX1NFRzcoJ3wnLDAsMCwwLDAsMSwxLDApLCBfU0VHNygnfScsMSwxLDEsMSwwLDAsMCksXAorIF9TRUc3KCd+JywxLDAsMCwwLDAsMCwwKSwKKworLyogTWFwcyAqLworCisvKiBUaGlzIHNldCB0cmllcyB0byBtYXAgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhlIHZpc2libGUgY2hhcmFjdGVyaXN0aWNzCisgKiBvZiB0aGUgQVNDSUkgc3ltYm9sLCBsb3dlcmNhc2UgYW5kIHVwcGVyY2FzZSBsZXR0ZXJzIG1heSBkaWZmZXIgaW4KKyAqIHByZXNlbnRhdGlvbiBvbiB0aGUgZGlzcGxheS4KKyAqLworI2RlZmluZSBNQVBfQVNDSUk3U0VHX0FMUEhBTlVNCQkJXAorCV9NQVBfMF8zMl9BU0NJSV9TRUc3X05PTl9QUklOVEFCTEUJXAorCV9NQVBfMzNfNDdfQVNDSUlfU0VHN19TWU1CT0wJCVwKKwlfTUFQXzQ4XzU3X0FTQ0lJX1NFRzdfTlVNRVJJQwkJXAorCV9NQVBfNThfNjRfQVNDSUlfU0VHN19TWU1CT0wJCVwKKwlfTUFQXzY1XzkwX0FTQ0lJX1NFRzdfQUxQSEFfVVBQUglcCisJX01BUF85MV85Nl9BU0NJSV9TRUc3X1NZTUJPTAkJXAorCV9NQVBfOTdfMTIyX0FTQ0lJX1NFRzdfQUxQSEFfTE9XRVIJXAorCV9NQVBfMTIzXzEyNl9BU0NJSV9TRUc3X1NZTUJPTAorCisvKiBUaGlzIHNldCB0cmllcyB0byBtYXAgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhlIHN5bWJvbGljIGNoYXJhY3RlcmlzdGljcworICogb2YgdGhlIEFTQ0lJIGNoYXJhY3RlciBmb3IgbWF4aW11bSBkaXNjcmltaW5hdGlvbi4KKyAqIEZvciBub3cgdGhpcyBtZWFucyBhbGwgYWxwaGEgY2hhcnMgYXJlIGluIGxvd2VyIGNhc2UgcmVwcmVzZW50YXRpb25zLgorICogKFRoaXMgZm9yIGV4YW1wbGUgZmFjaWxpdGF0ZXMgdGhlIHVzZSBvZiBoZXggbnVtYmVycyB3aXRoIHVwcGVyY2FzZSBpbnB1dC4pCisgKi8KKyNkZWZpbmUgTUFQX0FTQ0lJN1NFR19BTFBIQU5VTV9MQwkJCVwKKwlfTUFQXzBfMzJfQVNDSUlfU0VHN19OT05fUFJJTlRBQkxFCVwKKwlfTUFQXzMzXzQ3X0FTQ0lJX1NFRzdfU1lNQk9MCQlcCisJX01BUF80OF81N19BU0NJSV9TRUc3X05VTUVSSUMJCVwKKwlfTUFQXzU4XzY0X0FTQ0lJX1NFRzdfU1lNQk9MCQlcCisJX01BUF85N18xMjJfQVNDSUlfU0VHN19BTFBIQV9MT1dFUglcCisJX01BUF85MV85Nl9BU0NJSV9TRUc3X1NZTUJPTAkJXAorCV9NQVBfOTdfMTIyX0FTQ0lJX1NFRzdfQUxQSEFfTE9XRVIJXAorCV9NQVBfMTIzXzEyNl9BU0NJSV9TRUc3X1NZTUJPTAorCisjZGVmaW5lIFNFRzdfREVGQVVMVF9NQVAoX25hbWUpCQlcCisJU0VHN19DT05WRVJTSU9OX01BUChfbmFtZSxNQVBfQVNDSUk3U0VHX0FMUEhBTlVNKQorCisjZW5kaWYJLyogTUFQX1RPXzdTRUdNRU5UX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L21hdHJveGZiLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbWF0cm94ZmIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzIyYTg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L21hdHJveGZiLmgKQEAgLTAsMCArMSw0MiBAQAorI2lmbmRlZiBfX0xJTlVYX01BVFJPWEZCX0hfXworI2RlZmluZSBfX0xJTlVYX01BVFJPWEZCX0hfXworCisjaW5jbHVkZSA8YXNtL2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorCitzdHJ1Y3QgbWF0cm94aW9jX291dHB1dF9tb2RlIHsKKwlfX3UzMglvdXRwdXQ7CQkvKiB3aGljaCBvdXRwdXQgKi8KKyNkZWZpbmUgTUFUUk9YRkJfT1VUUFVUX1BSSU1BUlkJCTB4MDAwMAorI2RlZmluZSBNQVRST1hGQl9PVVRQVVRfU0VDT05EQVJZCTB4MDAwMQorI2RlZmluZSBNQVRST1hGQl9PVVRQVVRfREZQCQkweDAwMDIKKwlfX3UzMgltb2RlOwkJLyogd2hpY2ggbW9kZSAqLworI2RlZmluZSBNQVRST1hGQl9PVVRQVVRfTU9ERV9QQUwJMHgwMDAxCisjZGVmaW5lIE1BVFJPWEZCX09VVFBVVF9NT0RFX05UU0MJMHgwMDAyCisjZGVmaW5lIE1BVFJPWEZCX09VVFBVVF9NT0RFX01PTklUT1IJMHgwMDgwCit9OworI2RlZmluZSBNQVRST1hGQl9TRVRfT1VUUFVUX01PREUJX0lPVygnbicsMHhGQSxzaXplX3QpCisjZGVmaW5lIE1BVFJPWEZCX0dFVF9PVVRQVVRfTU9ERQlfSU9XUignbicsMHhGQSxzaXplX3QpCisKKy8qIGJpdGZpZWxkICovCisjZGVmaW5lIE1BVFJPWEZCX09VVFBVVF9DT05OX1BSSU1BUlkJKDEgPDwgTUFUUk9YRkJfT1VUUFVUX1BSSU1BUlkpCisjZGVmaW5lIE1BVFJPWEZCX09VVFBVVF9DT05OX1NFQ09OREFSWQkoMSA8PCBNQVRST1hGQl9PVVRQVVRfU0VDT05EQVJZKQorI2RlZmluZSBNQVRST1hGQl9PVVRQVVRfQ09OTl9ERlAJKDEgPDwgTUFUUk9YRkJfT1VUUFVUX0RGUCkKKy8qIGNvbm5lY3QgdGhlc2Ugb3V0cHV0cyB0byB0aGlzIGZyYW1lYnVmZmVyICovCisjZGVmaW5lIE1BVFJPWEZCX1NFVF9PVVRQVVRfQ09OTkVDVElPTglfSU9XKCduJywweEY4LHNpemVfdCkKKy8qIHdoaWNoIG91dHB1dHMgYXJlIGNvbm5lY3RlZCB0byB0aGlzIGZyYW1lYnVmZmVyICovCisjZGVmaW5lIE1BVFJPWEZCX0dFVF9PVVRQVVRfQ09OTkVDVElPTglfSU9SKCduJywweEY4LHNpemVfdCkKKy8qIHdoaWNoIG91dHB1dHMgYXJlIGF2YWlsYWJsZSBmb3IgdGhpcyBmcmFtZWJ1ZmZlciAqLworI2RlZmluZSBNQVRST1hGQl9HRVRfQVZBSUxBQkxFX09VVFBVVFMJX0lPUignbicsMHhGOSxzaXplX3QpCisvKiB3aGljaCBvdXRwdXRzIGV4aXN0IG9uIHRoaXMgZnJhbWVidWZmZXIgKi8KKyNkZWZpbmUgTUFUUk9YRkJfR0VUX0FMTF9PVVRQVVRTCV9JT1IoJ24nLDB4RkIsc2l6ZV90KQorCitlbnVtIG1hdHJveGZiX2N0cmxfaWQgeworICBNQVRST1hGQl9DSURfVEVTVE9VVAkgPSBWNEwyX0NJRF9QUklWQVRFX0JBU0UsCisgIE1BVFJPWEZCX0NJRF9ERUZMSUNLRVIsCisgIE1BVFJPWEZCX0NJRF9MQVNUCit9OworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMzc1N2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbWVtcG9saWN5LmgKQEAgLTAsMCArMSw2NCBAQAorI2lmbmRlZiBfTElOVVhfTUVNUE9MSUNZX0gKKyNkZWZpbmUgX0xJTlVYX01FTVBPTElDWV9IIDEKKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKKy8qCisgKiBOVU1BIG1lbW9yeSBwb2xpY2llcyBmb3IgTGludXguCisgKiBDb3B5cmlnaHQgMjAwMywyMDA0IEFuZGkgS2xlZW4gU3VTRSBMYWJzCisgKi8KKworLyoKKyAqIEJvdGggdGhlIE1QT0xfKiBtZW1wb2xpY3kgbW9kZSBhbmQgdGhlIE1QT0xfRl8qIG9wdGlvbmFsIG1vZGUgZmxhZ3MgYXJlCisgKiBwYXNzZWQgYnkgdGhlIHVzZXIgdG8gZWl0aGVyIHNldF9tZW1wb2xpY3koKSBvciBtYmluZCgpIGluIGFuICdpbnQnIGFjdHVhbC4KKyAqIFRoZSBNUE9MX01PREVfRkxBR1MgbWFjcm8gZGV0ZXJtaW5lcyB0aGUgbGVnYWwgc2V0IG9mIG9wdGlvbmFsIG1vZGUgZmxhZ3MuCisgKi8KKworLyogUG9saWNpZXMgKi8KK2VudW0geworCU1QT0xfREVGQVVMVCwKKwlNUE9MX1BSRUZFUlJFRCwKKwlNUE9MX0JJTkQsCisJTVBPTF9JTlRFUkxFQVZFLAorCU1QT0xfTUFYLAkvKiBhbHdheXMgbGFzdCBtZW1iZXIgb2YgZW51bSAqLworfTsKKworZW51bSBtcG9sX3JlYmluZF9zdGVwIHsKKwlNUE9MX1JFQklORF9PTkNFLAkvKiBkbyByZWJpbmQgd29yayBhdCBvbmNlKG5vdCBieSB0d28gc3RlcCkgKi8KKwlNUE9MX1JFQklORF9TVEVQMSwJLyogZmlyc3Qgc3RlcChzZXQgYWxsIHRoZSBuZXdseSBub2RlcykgKi8KKwlNUE9MX1JFQklORF9TVEVQMiwJLyogc2Vjb25kIHN0ZXAoY2xlYW4gYWxsIHRoZSBkaXNhbGxvd2VkIG5vZGVzKSovCisJTVBPTF9SRUJJTkRfTlNURVAsCit9OworCisvKiBGbGFncyBmb3Igc2V0X21lbXBvbGljeSAqLworI2RlZmluZSBNUE9MX0ZfU1RBVElDX05PREVTCSgxIDw8IDE1KQorI2RlZmluZSBNUE9MX0ZfUkVMQVRJVkVfTk9ERVMJKDEgPDwgMTQpCisKKy8qCisgKiBNUE9MX01PREVfRkxBR1MgaXMgdGhlIHVuaW9uIG9mIGFsbCBwb3NzaWJsZSBvcHRpb25hbCBtb2RlIGZsYWdzIHBhc3NlZCB0bworICogZWl0aGVyIHNldF9tZW1wb2xpY3koKSBvciBtYmluZCgpLgorICovCisjZGVmaW5lIE1QT0xfTU9ERV9GTEFHUwkoTVBPTF9GX1NUQVRJQ19OT0RFUyB8IE1QT0xfRl9SRUxBVElWRV9OT0RFUykKKworLyogRmxhZ3MgZm9yIGdldF9tZW1wb2xpY3kgKi8KKyNkZWZpbmUgTVBPTF9GX05PREUJKDE8PDApCS8qIHJldHVybiBuZXh0IElMIG1vZGUgaW5zdGVhZCBvZiBub2RlIG1hc2sgKi8KKyNkZWZpbmUgTVBPTF9GX0FERFIJKDE8PDEpCS8qIGxvb2sgdXAgdm1hIHVzaW5nIGFkZHJlc3MgKi8KKyNkZWZpbmUgTVBPTF9GX01FTVNfQUxMT1dFRCAoMTw8MikgLyogcmV0dXJuIGFsbG93ZWQgbWVtb3JpZXMgKi8KKworLyogRmxhZ3MgZm9yIG1iaW5kICovCisjZGVmaW5lIE1QT0xfTUZfU1RSSUNUCSgxPDwwKQkvKiBWZXJpZnkgZXhpc3RpbmcgcGFnZXMgaW4gdGhlIG1hcHBpbmcgKi8KKyNkZWZpbmUgTVBPTF9NRl9NT1ZFCSgxPDwxKQkvKiBNb3ZlIHBhZ2VzIG93bmVkIGJ5IHRoaXMgcHJvY2VzcyB0byBjb25mb3JtIHRvIG1hcHBpbmcgKi8KKyNkZWZpbmUgTVBPTF9NRl9NT1ZFX0FMTCAoMTw8MikJLyogTW92ZSBldmVyeSBwYWdlIHRvIGNvbmZvcm0gdG8gbWFwcGluZyAqLworI2RlZmluZSBNUE9MX01GX0lOVEVSTkFMICgxPDwzKQkvKiBJbnRlcm5hbCBmbGFncyBzdGFydCBoZXJlICovCisKKy8qCisgKiBJbnRlcm5hbCBmbGFncyB0aGF0IHNoYXJlIHRoZSBzdHJ1Y3QgbWVtcG9saWN5IGZsYWdzIHdvcmQgd2l0aAorICogIm1vZGUgZmxhZ3MiLiAgVGhlc2UgZmxhZ3MgYXJlIGFsbG9jYXRlZCBmcm9tIGJpdCAwIHVwLCBhcyB0aGV5CisgKiBhcmUgbmV2ZXIgT1InZWQgaW50byB0aGUgbW9kZSBpbiBtZW1wb2xpY3kgQVBJIGFyZ3VtZW50cy4KKyAqLworI2RlZmluZSBNUE9MX0ZfU0hBUkVEICAoMSA8PCAwKQkvKiBpZGVudGlmeSBzaGFyZWQgcG9saWNpZXMgKi8KKyNkZWZpbmUgTVBPTF9GX0xPQ0FMICAgKDEgPDwgMSkJLyogcHJlZmVycmVkIGxvY2FsIGFsbG9jYXRpb24gKi8KKyNkZWZpbmUgTVBPTF9GX1JFQklORElORyAoMSA8PCAyKQkvKiBpZGVudGlmeSBwb2xpY2llcyBpbiByZWJpbmRpbmcgKi8KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9tZXllLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbWV5ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZDQ5OTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbWV5ZS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBNb3Rpb24gRXllIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgU29ueSBWYWlvIFBpY3R1cmVCb29rCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgU3RlbGlhbiBQb3AgPHN0ZWxpYW5AcG9waWVzLm5ldD4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBBbGPDtHZlIDx3d3cuYWxjb3ZlLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgQW5kcmV3IFRyaWRnZWxsIDx0cmlkZ2VAdmFsaW51eC5jb20+CisgKgorICogRWFybGllciB3b3JrIGJ5IFdlcm5lciBBbG1lc2JlcmdlciwgUGF1bCBgUnVzdHknIFJ1c3NlbGwgYW5kIFBhdWwgTWFja2VycmFzLgorICoKKyAqIFNvbWUgcGFydHMgYm9ycm93ZWQgZnJvbSB2YXJpb3VzIHZpZGVvNGxpbnV4IGRyaXZlcnMsIGVzcGVjaWFsbHkKKyAqIGJ0dHYtZHJpdmVyLmMgYW5kIHpvcmFuLmMsIHNlZSBvcmlnaW5hbCBmaWxlcyBmb3IgY3JlZGl0cy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9NRVlFX0hfCisjZGVmaW5lIF9NRVlFX0hfCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUHJpdmF0ZSBBUEkgZm9yIGhhbmRsaW5nIG1qcGVnIGNhcHR1cmUgLyBwbGF5YmFjay4gICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IG1leWVfcGFyYW1zIHsKKwl1bnNpZ25lZCBjaGFyIHN1YnNhbXBsZTsKKwl1bnNpZ25lZCBjaGFyIHF1YWxpdHk7CisJdW5zaWduZWQgY2hhciBzaGFycG5lc3M7CisJdW5zaWduZWQgY2hhciBhZ2M7CisJdW5zaWduZWQgY2hhciBwaWN0dXJlOworCXVuc2lnbmVkIGNoYXIgZnJhbWVyYXRlOworfTsKKworLyogcXVlcnkgdGhlIGV4dGVuZGVkIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgTUVZRUlPQ19HX1BBUkFNUwlfSU9SICgndicsIEJBU0VfVklESU9DX1BSSVZBVEUrMCwgc3RydWN0IG1leWVfcGFyYW1zKQorLyogc2V0IHRoZSBleHRlbmRlZCBwYXJhbWV0ZXJzICovCisjZGVmaW5lIE1FWUVJT0NfU19QQVJBTVMJX0lPVyAoJ3YnLCBCQVNFX1ZJRElPQ19QUklWQVRFKzEsIHN0cnVjdCBtZXllX3BhcmFtcykKKy8qIHF1ZXVlIGEgYnVmZmVyIGZvciBtanBlZyBjYXB0dXJlICovCisjZGVmaW5lIE1FWUVJT0NfUUJVRl9DQVBUCV9JT1cgKCd2JywgQkFTRV9WSURJT0NfUFJJVkFURSsyLCBpbnQpCisvKiBzeW5jIGEgcHJldmlvdXNseSBxdWV1ZWQgbWpwZWcgYnVmZmVyICovCisjZGVmaW5lIE1FWUVJT0NfU1lOQwkJX0lPV1IoJ3YnLCBCQVNFX1ZJRElPQ19QUklWQVRFKzMsIGludCkKKy8qIGdldCBhIHN0aWxsIHVuY29tcHJlc3NlZCBzbmFwc2hvdCAqLworI2RlZmluZSBNRVlFSU9DX1NUSUxMQ0FQVAlfSU8gICgndicsIEJBU0VfVklESU9DX1BSSVZBVEUrNCkKKy8qIGdldCBhIGpwZWcgY29tcHJlc3NlZCBzbmFwc2hvdCAqLworI2RlZmluZSBNRVlFSU9DX1NUSUxMSkNBUFQJX0lPUiAoJ3YnLCBCQVNFX1ZJRElPQ19QUklWQVRFKzUsIGludCkKKworLyogVjRMMiBwcml2YXRlIGNvbnRyb2xzICovCisjZGVmaW5lIFY0TDJfQ0lEX0FHQwkJVjRMMl9DSURfUFJJVkFURV9CQVNFCisjZGVmaW5lIFY0TDJfQ0lEX01FWUVfU0hBUlBORVNTCShWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAxKQorI2RlZmluZSBWNEwyX0NJRF9QSUNUVVJFCShWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAyKQorI2RlZmluZSBWNEwyX0NJRF9KUEVHUVVBTAkoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgMykKKyNkZWZpbmUgVjRMMl9DSURfRlJBTUVSQVRFCShWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyA0KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9taWkuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9taWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTFkNzRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L21paS5oCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogbGludXgvbWlpLmg6IGRlZmluaXRpb25zIGZvciBNSUktY29tcGF0aWJsZSB0cmFuc2NlaXZlcnMKKyAqIE9yaWdpbmFsbHkgZHJpdmVycy9uZXQvc3VuaG1lLmguCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk5LCAyMDAxIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKKyAqLworCisjaWZuZGVmIF9fTElOVVhfTUlJX0hfXworI2RlZmluZSBfX0xJTlVYX01JSV9IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIEdlbmVyaWMgTUlJIHJlZ2lzdGVycy4gKi8KKworI2RlZmluZSBNSUlfQk1DUiAgICAgICAgICAgIDB4MDAgICAgICAgIC8qIEJhc2ljIG1vZGUgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBNSUlfQk1TUiAgICAgICAgICAgIDB4MDEgICAgICAgIC8qIEJhc2ljIG1vZGUgc3RhdHVzIHJlZ2lzdGVyICAqLworI2RlZmluZSBNSUlfUEhZU0lEMSAgICAgICAgIDB4MDIgICAgICAgIC8qIFBIWVMgSUQgMSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBNSUlfUEhZU0lEMiAgICAgICAgIDB4MDMgICAgICAgIC8qIFBIWVMgSUQgMiAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBNSUlfQURWRVJUSVNFICAgICAgIDB4MDQgICAgICAgIC8qIEFkdmVydGlzZW1lbnQgY29udHJvbCByZWcgICAqLworI2RlZmluZSBNSUlfTFBBICAgICAgICAgICAgIDB4MDUgICAgICAgIC8qIExpbmsgcGFydG5lciBhYmlsaXR5IHJlZyAgICAqLworI2RlZmluZSBNSUlfRVhQQU5TSU9OICAgICAgIDB4MDYgICAgICAgIC8qIEV4cGFuc2lvbiByZWdpc3RlciAgICAgICAgICAqLworI2RlZmluZSBNSUlfQ1RSTDEwMDAgICAgICAgIDB4MDkgICAgICAgIC8qIDEwMDBCQVNFLVQgY29udHJvbCAgICAgICAgICAqLworI2RlZmluZSBNSUlfU1RBVDEwMDAgICAgICAgIDB4MGEgICAgICAgIC8qIDEwMDBCQVNFLVQgc3RhdHVzICAgICAgICAgICAqLworI2RlZmluZSBNSUlfRVNUQVRVUwkgICAgMHgwZgkvKiBFeHRlbmRlZCBTdGF0dXMgKi8KKyNkZWZpbmUgTUlJX0RDT1VOVEVSICAgICAgICAweDEyICAgICAgICAvKiBEaXNjb25uZWN0IGNvdW50ZXIgICAgICAgICAgKi8KKyNkZWZpbmUgTUlJX0ZDU0NPVU5URVIgICAgICAweDEzICAgICAgICAvKiBGYWxzZSBjYXJyaWVyIGNvdW50ZXIgICAgICAgKi8KKyNkZWZpbmUgTUlJX05XQVlURVNUICAgICAgICAweDE0ICAgICAgICAvKiBOLXdheSBhdXRvLW5lZyB0ZXN0IHJlZyAgICAgKi8KKyNkZWZpbmUgTUlJX1JFUlJDT1VOVEVSICAgICAweDE1ICAgICAgICAvKiBSZWNlaXZlIGVycm9yIGNvdW50ZXIgICAgICAgKi8KKyNkZWZpbmUgTUlJX1NSRVZJU0lPTiAgICAgICAweDE2ICAgICAgICAvKiBTaWxpY29uIHJldmlzaW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgTUlJX1JFU1YxICAgICAgICAgICAweDE3ICAgICAgICAvKiBSZXNlcnZlZC4uLiAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTUlJX0xCUkVSUk9SICAgICAgICAweDE4ICAgICAgICAvKiBMcGJhY2ssIHJ4LCBieXBhc3MgZXJyb3IgICAgKi8KKyNkZWZpbmUgTUlJX1BIWUFERFIgICAgICAgICAweDE5ICAgICAgICAvKiBQSFkgYWRkcmVzcyAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTUlJX1JFU1YyICAgICAgICAgICAweDFhICAgICAgICAvKiBSZXNlcnZlZC4uLiAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTUlJX1RQSVNUQVRVUyAgICAgICAweDFiICAgICAgICAvKiBUUEkgc3RhdHVzIGZvciAxMG1icHMgICAgICAgKi8KKyNkZWZpbmUgTUlJX05DT05GSUcgICAgICAgICAweDFjICAgICAgICAvKiBOZXR3b3JrIGludGVyZmFjZSBjb25maWcgICAgKi8KKworLyogQmFzaWMgbW9kZSBjb250cm9sIHJlZ2lzdGVyLiAqLworI2RlZmluZSBCTUNSX1JFU1YgICAgICAgICAgICAgICAweDAwM2YgIC8qIFVudXNlZC4uLiAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTUNSX1NQRUVEMTAwMAkJMHgwMDQwICAvKiBNU0Igb2YgU3BlZWQgKDEwMDApICAgICAgICAgKi8KKyNkZWZpbmUgQk1DUl9DVFNUICAgICAgICAgICAgICAgMHgwMDgwICAvKiBDb2xsaXNpb24gdGVzdCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQk1DUl9GVUxMRFBMWCAgICAgICAgICAgMHgwMTAwICAvKiBGdWxsIGR1cGxleCAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQk1DUl9BTlJFU1RBUlQgICAgICAgICAgMHgwMjAwICAvKiBBdXRvIG5lZ290aWF0aW9uIHJlc3RhcnQgICAgKi8KKyNkZWZpbmUgQk1DUl9JU09MQVRFICAgICAgICAgICAgMHgwNDAwICAvKiBEaXNjb25uZWN0IERQODM4NDAgZnJvbSBNSUkgKi8KKyNkZWZpbmUgQk1DUl9QRE9XTiAgICAgICAgICAgICAgMHgwODAwICAvKiBQb3dlcmRvd24gdGhlIERQODM4NDAgICAgICAgKi8KKyNkZWZpbmUgQk1DUl9BTkVOQUJMRSAgICAgICAgICAgMHgxMDAwICAvKiBFbmFibGUgYXV0byBuZWdvdGlhdGlvbiAgICAgKi8KKyNkZWZpbmUgQk1DUl9TUEVFRDEwMCAgICAgICAgICAgMHgyMDAwICAvKiBTZWxlY3QgMTAwTWJwcyAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQk1DUl9MT09QQkFDSyAgICAgICAgICAgMHg0MDAwICAvKiBUWEQgbG9vcGJhY2sgYml0cyAgICAgICAgICAgKi8KKyNkZWZpbmUgQk1DUl9SRVNFVCAgICAgICAgICAgICAgMHg4MDAwICAvKiBSZXNldCB0aGUgRFA4Mzg0MCAgICAgICAgICAgKi8KKworLyogQmFzaWMgbW9kZSBzdGF0dXMgcmVnaXN0ZXIuICovCisjZGVmaW5lIEJNU1JfRVJDQVAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRXh0LXJlZyBjYXBhYmlsaXR5ICAgICAgICAgICovCisjZGVmaW5lIEJNU1JfSkNEICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSmFiYmVyIGRldGVjdGVkICAgICAgICAgICAgICovCisjZGVmaW5lIEJNU1JfTFNUQVRVUyAgICAgICAgICAgIDB4MDAwNCAgLyogTGluayBzdGF0dXMgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJNU1JfQU5FR0NBUEFCTEUgICAgICAgIDB4MDAwOCAgLyogQWJsZSB0byBkbyBhdXRvLW5lZ290aWF0aW9uICovCisjZGVmaW5lIEJNU1JfUkZBVUxUICAgICAgICAgICAgIDB4MDAxMCAgLyogUmVtb3RlIGZhdWx0IGRldGVjdGVkICAgICAgICovCisjZGVmaW5lIEJNU1JfQU5FR0NPTVBMRVRFICAgICAgIDB4MDAyMCAgLyogQXV0by1uZWdvdGlhdGlvbiBjb21wbGV0ZSAgICovCisjZGVmaW5lIEJNU1JfUkVTViAgICAgICAgICAgICAgIDB4MDBjMCAgLyogVW51c2VkLi4uICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJNU1JfRVNUQVRFTgkJMHgwMTAwCS8qIEV4dGVuZGVkIFN0YXR1cyBpbiBSMTUgKi8KKyNkZWZpbmUgQk1TUl8xMDBIQUxGMiAgICAgICAgICAgMHgwMjAwICAvKiBDYW4gZG8gMTAwQkFTRS1UMiBIRFggKi8KKyNkZWZpbmUgQk1TUl8xMDBGVUxMMiAgICAgICAgICAgMHgwNDAwICAvKiBDYW4gZG8gMTAwQkFTRS1UMiBGRFggKi8KKyNkZWZpbmUgQk1TUl8xMEhBTEYgICAgICAgICAgICAgMHgwODAwICAvKiBDYW4gZG8gMTBtYnBzLCBoYWxmLWR1cGxleCAgKi8KKyNkZWZpbmUgQk1TUl8xMEZVTEwgICAgICAgICAgICAgMHgxMDAwICAvKiBDYW4gZG8gMTBtYnBzLCBmdWxsLWR1cGxleCAgKi8KKyNkZWZpbmUgQk1TUl8xMDBIQUxGICAgICAgICAgICAgMHgyMDAwICAvKiBDYW4gZG8gMTAwbWJwcywgaGFsZi1kdXBsZXggKi8KKyNkZWZpbmUgQk1TUl8xMDBGVUxMICAgICAgICAgICAgMHg0MDAwICAvKiBDYW4gZG8gMTAwbWJwcywgZnVsbC1kdXBsZXggKi8KKyNkZWZpbmUgQk1TUl8xMDBCQVNFNCAgICAgICAgICAgMHg4MDAwICAvKiBDYW4gZG8gMTAwbWJwcywgNGsgcGFja2V0cyAgKi8KKworLyogQWR2ZXJ0aXNlbWVudCBjb250cm9sIHJlZ2lzdGVyLiAqLworI2RlZmluZSBBRFZFUlRJU0VfU0xDVCAgICAgICAgICAweDAwMWYgIC8qIFNlbGVjdG9yIGJpdHMgICAgICAgICAgICAgICAqLworI2RlZmluZSBBRFZFUlRJU0VfQ1NNQSAgICAgICAgICAweDAwMDEgIC8qIE9ubHkgc2VsZWN0b3Igc3VwcG9ydGVkICAgICAqLworI2RlZmluZSBBRFZFUlRJU0VfMTBIQUxGICAgICAgICAweDAwMjAgIC8qIFRyeSBmb3IgMTBtYnBzIGhhbGYtZHVwbGV4ICAqLworI2RlZmluZSBBRFZFUlRJU0VfMTAwMFhGVUxMICAgICAweDAwMjAgIC8qIFRyeSBmb3IgMTAwMEJBU0UtWCBmdWxsLWR1cGxleCAqLworI2RlZmluZSBBRFZFUlRJU0VfMTBGVUxMICAgICAgICAweDAwNDAgIC8qIFRyeSBmb3IgMTBtYnBzIGZ1bGwtZHVwbGV4ICAqLworI2RlZmluZSBBRFZFUlRJU0VfMTAwMFhIQUxGICAgICAweDAwNDAgIC8qIFRyeSBmb3IgMTAwMEJBU0UtWCBoYWxmLWR1cGxleCAqLworI2RlZmluZSBBRFZFUlRJU0VfMTAwSEFMRiAgICAgICAweDAwODAgIC8qIFRyeSBmb3IgMTAwbWJwcyBoYWxmLWR1cGxleCAqLworI2RlZmluZSBBRFZFUlRJU0VfMTAwMFhQQVVTRSAgICAweDAwODAgIC8qIFRyeSBmb3IgMTAwMEJBU0UtWCBwYXVzZSAgICAqLworI2RlZmluZSBBRFZFUlRJU0VfMTAwRlVMTCAgICAgICAweDAxMDAgIC8qIFRyeSBmb3IgMTAwbWJwcyBmdWxsLWR1cGxleCAqLworI2RlZmluZSBBRFZFUlRJU0VfMTAwMFhQU0VfQVNZTSAweDAxMDAgIC8qIFRyeSBmb3IgMTAwMEJBU0UtWCBhc3ltIHBhdXNlICovCisjZGVmaW5lIEFEVkVSVElTRV8xMDBCQVNFNCAgICAgIDB4MDIwMCAgLyogVHJ5IGZvciAxMDBtYnBzIDRrIHBhY2tldHMgICovCisjZGVmaW5lIEFEVkVSVElTRV9QQVVTRV9DQVAgICAgIDB4MDQwMCAgLyogVHJ5IGZvciBwYXVzZSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFEVkVSVElTRV9QQVVTRV9BU1lNICAgIDB4MDgwMCAgLyogVHJ5IGZvciBhc3ltZXRyaWMgcGF1c2UgICAgICovCisjZGVmaW5lIEFEVkVSVElTRV9SRVNWICAgICAgICAgIDB4MTAwMCAgLyogVW51c2VkLi4uICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFEVkVSVElTRV9SRkFVTFQgICAgICAgIDB4MjAwMCAgLyogU2F5IHdlIGNhbiBkZXRlY3QgZmF1bHRzICAgICovCisjZGVmaW5lIEFEVkVSVElTRV9MUEFDSyAgICAgICAgIDB4NDAwMCAgLyogQWNrIGxpbmsgcGFydG5lcnMgcmVzcG9uc2UgICovCisjZGVmaW5lIEFEVkVSVElTRV9OUEFHRSAgICAgICAgIDB4ODAwMCAgLyogTmV4dCBwYWdlIGJpdCAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQURWRVJUSVNFX0ZVTEwgKEFEVkVSVElTRV8xMDBGVUxMIHwgQURWRVJUSVNFXzEwRlVMTCB8IFwKKwkJCUFEVkVSVElTRV9DU01BKQorI2RlZmluZSBBRFZFUlRJU0VfQUxMIChBRFZFUlRJU0VfMTBIQUxGIHwgQURWRVJUSVNFXzEwRlVMTCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgQURWRVJUSVNFXzEwMEhBTEYgfCBBRFZFUlRJU0VfMTAwRlVMTCkKKworLyogTGluayBwYXJ0bmVyIGFiaWxpdHkgcmVnaXN0ZXIuICovCisjZGVmaW5lIExQQV9TTENUICAgICAgICAgICAgICAgIDB4MDAxZiAgLyogU2FtZSBhcyBhZHZlcnRpc2Ugc2VsZWN0b3IgICovCisjZGVmaW5lIExQQV8xMEhBTEYgICAgICAgICAgICAgIDB4MDAyMCAgLyogQ2FuIGRvIDEwbWJwcyBoYWxmLWR1cGxleCAgICovCisjZGVmaW5lIExQQV8xMDAwWEZVTEwgICAgICAgICAgIDB4MDAyMCAgLyogQ2FuIGRvIDEwMDBCQVNFLVggZnVsbC1kdXBsZXggKi8KKyNkZWZpbmUgTFBBXzEwRlVMTCAgICAgICAgICAgICAgMHgwMDQwICAvKiBDYW4gZG8gMTBtYnBzIGZ1bGwtZHVwbGV4ICAgKi8KKyNkZWZpbmUgTFBBXzEwMDBYSEFMRiAgICAgICAgICAgMHgwMDQwICAvKiBDYW4gZG8gMTAwMEJBU0UtWCBoYWxmLWR1cGxleCAqLworI2RlZmluZSBMUEFfMTAwSEFMRiAgICAgICAgICAgICAweDAwODAgIC8qIENhbiBkbyAxMDBtYnBzIGhhbGYtZHVwbGV4ICAqLworI2RlZmluZSBMUEFfMTAwMFhQQVVTRSAgICAgICAgICAweDAwODAgIC8qIENhbiBkbyAxMDAwQkFTRS1YIHBhdXNlICAgICAqLworI2RlZmluZSBMUEFfMTAwRlVMTCAgICAgICAgICAgICAweDAxMDAgIC8qIENhbiBkbyAxMDBtYnBzIGZ1bGwtZHVwbGV4ICAqLworI2RlZmluZSBMUEFfMTAwMFhQQVVTRV9BU1lNICAgICAweDAxMDAgIC8qIENhbiBkbyAxMDAwQkFTRS1YIHBhdXNlIGFzeW0qLworI2RlZmluZSBMUEFfMTAwQkFTRTQgICAgICAgICAgICAweDAyMDAgIC8qIENhbiBkbyAxMDBtYnBzIDRrIHBhY2tldHMgICAqLworI2RlZmluZSBMUEFfUEFVU0VfQ0FQICAgICAgICAgICAweDA0MDAgIC8qIENhbiBwYXVzZSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMUEFfUEFVU0VfQVNZTSAgICAgICAgICAweDA4MDAgIC8qIENhbiBwYXVzZSBhc3ltZXRyaWNhbGx5ICAgICAqLworI2RlZmluZSBMUEFfUkVTViAgICAgICAgICAgICAgICAweDEwMDAgIC8qIFVudXNlZC4uLiAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMUEFfUkZBVUxUICAgICAgICAgICAgICAweDIwMDAgIC8qIExpbmsgcGFydG5lciBmYXVsdGVkICAgICAgICAqLworI2RlZmluZSBMUEFfTFBBQ0sgICAgICAgICAgICAgICAweDQwMDAgIC8qIExpbmsgcGFydG5lciBhY2tlZCB1cyAgICAgICAqLworI2RlZmluZSBMUEFfTlBBR0UgICAgICAgICAgICAgICAweDgwMDAgIC8qIE5leHQgcGFnZSBiaXQgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIExQQV9EVVBMRVgJCShMUEFfMTBGVUxMIHwgTFBBXzEwMEZVTEwpCisjZGVmaW5lIExQQV8xMDAJCQkoTFBBXzEwMEZVTEwgfCBMUEFfMTAwSEFMRiB8IExQQV8xMDBCQVNFNCkKKworLyogRXhwYW5zaW9uIHJlZ2lzdGVyIGZvciBhdXRvLW5lZ290aWF0aW9uLiAqLworI2RlZmluZSBFWFBBTlNJT05fTldBWSAgICAgICAgICAweDAwMDEgIC8qIENhbiBkbyBOLXdheSBhdXRvLW5lZ28gICAgICAqLworI2RlZmluZSBFWFBBTlNJT05fTENXUCAgICAgICAgICAweDAwMDIgIC8qIEdvdCBuZXcgUlggcGFnZSBjb2RlIHdvcmQgICAqLworI2RlZmluZSBFWFBBTlNJT05fRU5BQkxFTlBBR0UgICAweDAwMDQgIC8qIFRoaXMgZW5hYmxlcyBucGFnZSB3b3JkcyAgICAqLworI2RlZmluZSBFWFBBTlNJT05fTlBDQVBBQkxFICAgICAweDAwMDggIC8qIExpbmsgcGFydG5lciBzdXBwb3J0cyBucGFnZSAqLworI2RlZmluZSBFWFBBTlNJT05fTUZBVUxUUyAgICAgICAweDAwMTAgIC8qIE11bHRpcGxlIGZhdWx0cyBkZXRlY3RlZCAgICAqLworI2RlZmluZSBFWFBBTlNJT05fUkVTViAgICAgICAgICAweGZmZTAgIC8qIFVudXNlZC4uLiAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVTVEFUVVNfMTAwMF9URlVMTAkweDIwMDAJLyogQ2FuIGRvIDEwMDBCVCBGdWxsICovCisjZGVmaW5lIEVTVEFUVVNfMTAwMF9USEFMRgkweDEwMDAJLyogQ2FuIGRvIDEwMDBCVCBIYWxmICovCisKKy8qIE4td2F5IHRlc3QgcmVnaXN0ZXIuICovCisjZGVmaW5lIE5XQVlURVNUX1JFU1YxICAgICAgICAgIDB4MDBmZiAgLyogVW51c2VkLi4uICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE5XQVlURVNUX0xPT1BCQUNLICAgICAgIDB4MDEwMCAgLyogRW5hYmxlIGxvb3BiYWNrIGZvciBOLXdheSAgICovCisjZGVmaW5lIE5XQVlURVNUX1JFU1YyICAgICAgICAgIDB4ZmUwMCAgLyogVW51c2VkLi4uICAgICAgICAgICAgICAgICAgICovCisKKy8qIDEwMDBCQVNFLVQgQ29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBBRFZFUlRJU0VfMTAwMEZVTEwgICAgICAweDAyMDAgIC8qIEFkdmVydGlzZSAxMDAwQkFTRS1UIGZ1bGwgZHVwbGV4ICovCisjZGVmaW5lIEFEVkVSVElTRV8xMDAwSEFMRiAgICAgIDB4MDEwMCAgLyogQWR2ZXJ0aXNlIDEwMDBCQVNFLVQgaGFsZiBkdXBsZXggKi8KKworLyogMTAwMEJBU0UtVCBTdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTFBBXzEwMDBMT0NBTFJYT0sgICAgICAgMHgyMDAwICAvKiBMaW5rIHBhcnRuZXIgbG9jYWwgcmVjZWl2ZXIgc3RhdHVzICovCisjZGVmaW5lIExQQV8xMDAwUkVNUlhPSyAgICAgICAgIDB4MTAwMCAgLyogTGluayBwYXJ0bmVyIHJlbW90ZSByZWNlaXZlciBzdGF0dXMgKi8KKyNkZWZpbmUgTFBBXzEwMDBGVUxMICAgICAgICAgICAgMHgwODAwICAvKiBMaW5rIHBhcnRuZXIgMTAwMEJBU0UtVCBmdWxsIGR1cGxleCAqLworI2RlZmluZSBMUEFfMTAwMEhBTEYgICAgICAgICAgICAweDA0MDAgIC8qIExpbmsgcGFydG5lciAxMDAwQkFTRS1UIGhhbGYgZHVwbGV4ICovCisKKy8qIEZsb3cgY29udHJvbCBmbGFncyAqLworI2RlZmluZSBGTE9XX0NUUkxfVFgJCTB4MDEKKyNkZWZpbmUgRkxPV19DVFJMX1JYCQkweDAyCisKKy8qIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgaW4gYWxsIFNJT0N4TUlJeHh4IGlvY3RsIGNhbGxzICovCitzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgeworCV9fdTE2CQlwaHlfaWQ7CisJX191MTYJCXJlZ19udW07CisJX191MTYJCXZhbF9pbjsKKwlfX3UxNgkJdmFsX291dDsKK307CisKKyNlbmRpZiAvKiBfX0xJTlVYX01JSV9IX18gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9taW5peF9mcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L21pbml4X2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNmZTA5ZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9taW5peF9mcy5oCkBAIC0wLDAgKzEsMTA2IEBACisjaWZuZGVmIF9MSU5VWF9NSU5JWF9GU19ICisjZGVmaW5lIF9MSU5VWF9NSU5JWF9GU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CisKKy8qCisgKiBUaGUgbWluaXggZmlsZXN5c3RlbSBjb25zdGFudHMvc3RydWN0dXJlcworICovCisKKy8qCisgKiBUaGFua3MgdG8gS2VlcyBKIEJvdCBmb3Igc2VuZGluZyBtZSB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIG5ldworICogbWluaXggZmlsZXN5c3RlbSAoYWthIFYyKSB3aXRoIGJpZ2dlciBpbm9kZXMgYW5kIDMyLWJpdCBibG9jaworICogcG9pbnRlcnMuCisgKi8KKworI2RlZmluZSBNSU5JWF9ST09UX0lOTyAxCisKKy8qIE5vdCB0aGUgc2FtZSBhcyB0aGUgYm9ndXMgTElOS19NQVggaW4gPGxpbnV4L2xpbWl0cy5oPi4gT2ggd2VsbC4gKi8KKyNkZWZpbmUgTUlOSVhfTElOS19NQVgJMjUwCisjZGVmaW5lIE1JTklYMl9MSU5LX01BWAk2NTUzMAorCisjZGVmaW5lIE1JTklYX0lfTUFQX1NMT1RTCTgKKyNkZWZpbmUgTUlOSVhfWl9NQVBfU0xPVFMJNjQKKyNkZWZpbmUgTUlOSVhfVkFMSURfRlMJCTB4MDAwMQkJLyogQ2xlYW4gZnMuICovCisjZGVmaW5lIE1JTklYX0VSUk9SX0ZTCQkweDAwMDIJCS8qIGZzIGhhcyBlcnJvcnMuICovCisKKyNkZWZpbmUgTUlOSVhfSU5PREVTX1BFUl9CTE9DSyAoKEJMT0NLX1NJWkUpLyhzaXplb2YgKHN0cnVjdCBtaW5peF9pbm9kZSkpKQorCisvKgorICogVGhpcyBpcyB0aGUgb3JpZ2luYWwgbWluaXggaW5vZGUgbGF5b3V0IG9uIGRpc2suCisgKiBOb3RlIHRoZSA4LWJpdCBnaWQgYW5kIGF0aW1lIGFuZCBjdGltZS4KKyAqLworc3RydWN0IG1pbml4X2lub2RlIHsKKwlfX3UxNiBpX21vZGU7CisJX191MTYgaV91aWQ7CisJX191MzIgaV9zaXplOworCV9fdTMyIGlfdGltZTsKKwlfX3U4ICBpX2dpZDsKKwlfX3U4ICBpX25saW5rczsKKwlfX3UxNiBpX3pvbmVbOV07Cit9OworCisvKgorICogVGhlIG5ldyBtaW5peCBpbm9kZSBoYXMgYWxsIHRoZSB0aW1lIGVudHJpZXMsIGFzIHdlbGwgYXMKKyAqIGxvbmcgYmxvY2sgbnVtYmVycyBhbmQgYSB0aGlyZCBpbmRpcmVjdCBibG9jayAoNysxKzErMQorICogaW5zdGVhZCBvZiA3KzErMSkuIEFsc28sIHNvbWUgcHJldmlvdXNseSA4LWJpdCB2YWx1ZXMgYXJlCisgKiBub3cgMTYtYml0LiBUaGUgaW5vZGUgaXMgbm93IDY0IGJ5dGVzIGluc3RlYWQgb2YgMzIuCisgKi8KK3N0cnVjdCBtaW5peDJfaW5vZGUgeworCV9fdTE2IGlfbW9kZTsKKwlfX3UxNiBpX25saW5rczsKKwlfX3UxNiBpX3VpZDsKKwlfX3UxNiBpX2dpZDsKKwlfX3UzMiBpX3NpemU7CisJX191MzIgaV9hdGltZTsKKwlfX3UzMiBpX210aW1lOworCV9fdTMyIGlfY3RpbWU7CisJX191MzIgaV96b25lWzEwXTsKK307CisKKy8qCisgKiBtaW5peCBzdXBlci1ibG9jayBkYXRhIG9uIGRpc2sKKyAqLworc3RydWN0IG1pbml4X3N1cGVyX2Jsb2NrIHsKKwlfX3UxNiBzX25pbm9kZXM7CisJX191MTYgc19uem9uZXM7CisJX191MTYgc19pbWFwX2Jsb2NrczsKKwlfX3UxNiBzX3ptYXBfYmxvY2tzOworCV9fdTE2IHNfZmlyc3RkYXRhem9uZTsKKwlfX3UxNiBzX2xvZ196b25lX3NpemU7CisJX191MzIgc19tYXhfc2l6ZTsKKwlfX3UxNiBzX21hZ2ljOworCV9fdTE2IHNfc3RhdGU7CisJX191MzIgc196b25lczsKK307CisKKy8qCisgKiBWMyBtaW5peCBzdXBlci1ibG9jayBkYXRhIG9uIGRpc2sKKyAqLworc3RydWN0IG1pbml4M19zdXBlcl9ibG9jayB7CisJX191MzIgc19uaW5vZGVzOworCV9fdTE2IHNfcGFkMDsKKwlfX3UxNiBzX2ltYXBfYmxvY2tzOworCV9fdTE2IHNfem1hcF9ibG9ja3M7CisJX191MTYgc19maXJzdGRhdGF6b25lOworCV9fdTE2IHNfbG9nX3pvbmVfc2l6ZTsKKwlfX3UxNiBzX3BhZDE7CisJX191MzIgc19tYXhfc2l6ZTsKKwlfX3UzMiBzX3pvbmVzOworCV9fdTE2IHNfbWFnaWM7CisJX191MTYgc19wYWQyOworCV9fdTE2IHNfYmxvY2tzaXplOworCV9fdTggIHNfZGlza192ZXJzaW9uOworfTsKKworc3RydWN0IG1pbml4X2Rpcl9lbnRyeSB7CisJX191MTYgaW5vZGU7CisJY2hhciBuYW1lWzBdOworfTsKKworc3RydWN0IG1pbml4M19kaXJfZW50cnkgeworCV9fdTMyIGlub2RlOworCWNoYXIgbmFtZVswXTsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9tbWFuLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbW1hbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YjMwMDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbW1hbi5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgX0xJTlVYX01NQU5fSAorI2RlZmluZSBfTElOVVhfTU1BTl9ICisKKyNpbmNsdWRlIDxhc20vbW1hbi5oPgorCisjZGVmaW5lIE1SRU1BUF9NQVlNT1ZFCTEKKyNkZWZpbmUgTVJFTUFQX0ZJWEVECTIKKworI2RlZmluZSBPVkVSQ09NTUlUX0dVRVNTCQkwCisjZGVmaW5lIE9WRVJDT01NSVRfQUxXQVlTCQkxCisjZGVmaW5lIE9WRVJDT01NSVRfTkVWRVIJCTIKKworI2VuZGlmIC8qIF9MSU5VWF9NTUFOX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9tbXRpbWVyLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbW10aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NGNhYmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbW10aW1lci5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBJbnRlbCBNdWx0aW1lZGlhIFRpbWVyIGRldmljZSBpbnRlcmZhY2UKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgZmlsZSBzaG91bGQgZGVmaW5lIGFuIGludGVyZmFjZSBjb21wYXRpYmxlIHdpdGggdGhlIElBLVBDIE11bHRpbWVkaWEKKyAqIFRpbWVycyBEcmFmdCBTcGVjaWZpY2F0aW9uIChyZXYuIDAuOTcpIGZyb20gSW50ZWwuICBOb3RlIHRoYXQgc29tZQorICogaGFyZHdhcmUgbWF5IG5vdCBiZSBhYmxlIHRvIHNhZmVseSBleHBvcnQgaXRzIHJlZ2lzdGVycyB0byB1c2Vyc3BhY2UsCisgKiBzbyB0aGUgaW9jdGwgaW50ZXJmYWNlIHNob3VsZCBzdXBwb3J0IGFsbCBuZWNlc3NhcnkgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiAxMS8wMS8wMSAtIGpiYXJuZXMgLSBpbml0aWFsIHJldmlzaW9uCisgKiA5LzEwLzA0IC0gQ2hyaXN0b3BoIExhbWV0ZXIgLSByZW1vdmUgaW50ZXJydXB0IHN1cHBvcnQKKyAqIDkvMTcvMDQgLSBqYmFybmVzIC0gcmVtb3ZlIHRlc3QgcHJvZ3JhbSwgbW92ZSBzb21lICNkZWZpbmVzIHRvIHRoZSBkcml2ZXIKKyAqLworCisjaWZuZGVmIF9MSU5VWF9NTVRJTUVSX0gKKyNkZWZpbmUgX0xJTlVYX01NVElNRVJfSAorCisvKgorICogQnJlYWtkb3duIG9mIHRoZSBpb2N0bCdzIGF2YWlsYWJsZS4gIEFuICdvcHRpb25hbCcgbmV4dCB0byB0aGUgY29tbWFuZAorICogaW5kaWNhdGVzIHRoYXQgc3VwcG9ydGluZyB0aGlzIGNvbW1hbmQgaXMgb3B0aW9uYWwsIHdoaWxlICdyZXF1aXJlZCcKKyAqIGNvbW1hbmRzIG11c3QgYmUgaW1wbGVtZW50ZWQgaWYgY29uZm9ybWFuY2UgaXMgZGVzaXJlZC4KKyAqCisgKiBNTVRJTUVSX0dFVE9GRlNFVCAtIG9wdGlvbmFsCisgKiAgIFNob3VsZCByZXR1cm4gdGhlIG9mZnNldCAocmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBwYWdlIHdoZXJlIHRoZQorICogICByZWdpc3RlcnMgYXJlIG1hcHBlZCkgZm9yIHRoZSBjb3VudGVyIGluIHF1ZXN0aW9uLgorICoKKyAqIE1NVElNRVJfR0VUUkVTIC0gcmVxdWlyZWQKKyAqICAgVGhlIHJlc29sdXRpb24gb2YgdGhlIGNsb2NrIGluIGZlbXRvICgxMF4tMTUpIHNlY29uZHMKKyAqCisgKiBNTVRJTUVSX0dFVEZSRVEgLSByZXF1aXJlZAorICogICBGcmVxdWVuY3kgb2YgdGhlIGNsb2NrIGluIEh6CisgKgorICogTU1USU1FUl9HRVRCSVRTIC0gcmVxdWlyZWQKKyAqICAgTnVtYmVyIG9mIGJpdHMgaW4gdGhlIGNsb2NrJ3MgY291bnRlcgorICoKKyAqIE1NVElNRVJfTU1BUEFWQUlMIC0gcmVxdWlyZWQKKyAqICAgUmV0dXJucyBub256ZXJvIGlmIHRoZSByZWdpc3RlcnMgY2FuIGJlIG1tYXAnZCBpbnRvIHVzZXJzcGFjZSwgMCBvdGhlcndpc2UKKyAqCisgKiBNTVRJTUVSX0dFVENPVU5URVIgLSByZXF1aXJlZAorICogICBHZXRzIHRoZSBjdXJyZW50IHZhbHVlIGluIHRoZSBjb3VudGVyCisgKi8KKyNkZWZpbmUgTU1USU1FUl9JT0NUTF9CQVNFICdtJworCisjZGVmaW5lIE1NVElNRVJfR0VUT0ZGU0VUIF9JTyhNTVRJTUVSX0lPQ1RMX0JBU0UsIDApCisjZGVmaW5lIE1NVElNRVJfR0VUUkVTIF9JT1IoTU1USU1FUl9JT0NUTF9CQVNFLCAxLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBNTVRJTUVSX0dFVEZSRVEgX0lPUihNTVRJTUVSX0lPQ1RMX0JBU0UsIDIsIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIE1NVElNRVJfR0VUQklUUyBfSU8oTU1USU1FUl9JT0NUTF9CQVNFLCA0KQorI2RlZmluZSBNTVRJTUVSX01NQVBBVkFJTCBfSU8oTU1USU1FUl9JT0NUTF9CQVNFLCA2KQorI2RlZmluZSBNTVRJTUVSX0dFVENPVU5URVIgX0lPUihNTVRJTUVSX0lPQ1RMX0JBU0UsIDksIHVuc2lnbmVkIGxvbmcpCisKKyNlbmRpZiAvKiBfTElOVVhfTU1USU1FUl9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbXF1ZXVlLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbXF1ZXVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1YTc5NgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9tcXVldWUuaApAQCAtMCwwICsxLDUzIEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDMgS3J6eXN6dG9mIEJlbmVkeWN6YWsgJiBNaWNoYWwgV3JvbnNraQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBJdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfTElOVVhfTVFVRVVFX0gKKyNkZWZpbmUgX0xJTlVYX01RVUVVRV9ICisKKyNkZWZpbmUgTVFfUFJJT19NQVggCTMyNzY4CisvKiBwZXItdWlkIGxpbWl0IG9mIGtlcm5lbCBtZW1vcnkgdXNlZCBieSBtcXVldWUsIGluIGJ5dGVzICovCisjZGVmaW5lIE1RX0JZVEVTX01BWAk4MTkyMDAKKworc3RydWN0IG1xX2F0dHIgeworCWxvbmcJbXFfZmxhZ3M7CS8qIG1lc3NhZ2UgcXVldWUgZmxhZ3MJCQkqLworCWxvbmcJbXFfbWF4bXNnOwkvKiBtYXhpbXVtIG51bWJlciBvZiBtZXNzYWdlcwkJKi8KKwlsb25nCW1xX21zZ3NpemU7CS8qIG1heGltdW0gbWVzc2FnZSBzaXplCQkJKi8KKwlsb25nCW1xX2N1cm1zZ3M7CS8qIG51bWJlciBvZiBtZXNzYWdlcyBjdXJyZW50bHkgcXVldWVkCSovCisJbG9uZwlfX3Jlc2VydmVkWzRdOwkvKiBpZ25vcmVkIGZvciBpbnB1dCwgemVyb2VkIGZvciBvdXRwdXQgKi8KK307CisKKy8qCisgKiBTSUdFVl9USFJFQUQgaW1wbGVtZW50YXRpb246CisgKiBTSUdFVl9USFJFQUQgbXVzdCBiZSBpbXBsZW1lbnRlZCBpbiB1c2VyIHNwYWNlLiBJZiBTSUdFVl9USFJFQUQgaXMgcGFzc2VkCisgKiB0byBtcV9ub3RpZnksIHRoZW4KKyAqIC0gc2lnZXZfc2lnbm8gbXVzdCBiZSB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIGFuIEFGX05FVExJTksgc29ja2V0LiBJdCdzIG5vdAorICogICBuZWNlc3NhcnkgdGhhdCB0aGUgc29ja2V0IGlzIGJvdW5kLgorICogLSBzaWdldl92YWx1ZS5zaXZhbF9wdHIgbXVzdCBwb2ludCB0byBhIGNvb2tpZSB0aGF0IGlzIE5PVElGWV9DT09LSUVfTEVOCisgKiAgIGJ5dGVzIGxvbmcuCisgKiBJZiB0aGUgbm90aWZpY2F0aW9uIGlzIHRyaWdnZXJlZCwgdGhlbiB0aGUgY29va2llIGlzIHNlbnQgdG8gdGhlIG5ldGxpbmsKKyAqIHNvY2tldC4gVGhlIGxhc3QgYnl0ZSBvZiB0aGUgY29va2llIGlzIHJlcGxhY2VkIHdpdGggdGhlIE5PVElGWV8/PyBjb2RlczoKKyAqIE5PVElGWV9XT0tFTlVQIGlmIHRoZSBub3RpZmljYXRpb24gZ290IHRyaWdnZXJlZCwgTk9USUZZX1JFTU9WRUQgaWYgaXQgd2FzCisgKiByZW1vdmVkLCBlaXRoZXIgZHVlIHRvIGEgY2xvc2UoKSBvbiB0aGUgbWVzc2FnZSBxdWV1ZSBmZCBvciBkdWUgdG8gYQorICogbXFfbm90aWZ5KCkgdGhhdCByZW1vdmVkIHRoZSBub3RpZmljYXRpb24uCisgKi8KKyNkZWZpbmUgTk9USUZZX05PTkUJMAorI2RlZmluZSBOT1RJRllfV09LRU5VUAkxCisjZGVmaW5lIE5PVElGWV9SRU1PVkVECTIKKworI2RlZmluZSBOT1RJRllfQ09PS0lFX0xFTgkzMgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9tcm91dGUuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9tcm91dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmI0MTI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L21yb3V0ZS5oCkBAIC0wLDAgKzEsMTQzIEBACisjaWZuZGVmIF9fTElOVVhfTVJPVVRFX0gKKyNkZWZpbmUgX19MSU5VWF9NUk9VVEVfSAorCisjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKglCYXNlZCBvbiB0aGUgTVJPVVRJTkcgMy41IGRlZmluZXMgcHJpbWFyaWx5IHRvIGtlZXAKKyAqCXNvdXJjZSBjb21wYXRpYmlsaXR5IHdpdGggQlNELgorICoKKyAqCVNlZSB0aGUgbXJvdXRlZCBjb2RlIGZvciB0aGUgb3JpZ2luYWwgaGlzdG9yeS4KKyAqCisgKiAgICAgIFByb3RvY29sIEluZGVwZW5kZW50IE11bHRpY2FzdCAoUElNKSBkYXRhIHN0cnVjdHVyZXMgaW5jbHVkZWQKKyAqICAgICAgQ2FybG9zIFBpY290byAoY2FwQGRpLmZjLnVsLnB0KQorICoKKyAqLworCisjZGVmaW5lIE1SVF9CQVNFCTIwMAorI2RlZmluZSBNUlRfSU5JVAkoTVJUX0JBU0UpCS8qIEFjdGl2YXRlIHRoZSBrZXJuZWwgbXJvdXRlIGNvZGUgCSovCisjZGVmaW5lIE1SVF9ET05FCShNUlRfQkFTRSsxKQkvKiBTaHV0ZG93biB0aGUga2VybmVsIG1yb3V0ZQkJKi8KKyNkZWZpbmUgTVJUX0FERF9WSUYJKE1SVF9CQVNFKzIpCS8qIEFkZCBhIHZpcnR1YWwgaW50ZXJmYWNlCQkqLworI2RlZmluZSBNUlRfREVMX1ZJRgkoTVJUX0JBU0UrMykJLyogRGVsZXRlIGEgdmlydHVhbCBpbnRlcmZhY2UJCSovCisjZGVmaW5lIE1SVF9BRERfTUZDCShNUlRfQkFTRSs0KQkvKiBBZGQgYSBtdWx0aWNhc3QgZm9yd2FyZGluZyBlbnRyeQkqLworI2RlZmluZSBNUlRfREVMX01GQwkoTVJUX0JBU0UrNSkJLyogRGVsZXRlIGEgbXVsdGljYXN0IGZvcndhcmRpbmcgZW50cnkJKi8KKyNkZWZpbmUgTVJUX1ZFUlNJT04JKE1SVF9CQVNFKzYpCS8qIEdldCB0aGUga2VybmVsIG11bHRpY2FzdCB2ZXJzaW9uCSovCisjZGVmaW5lIE1SVF9BU1NFUlQJKE1SVF9CQVNFKzcpCS8qIEFjdGl2YXRlIFBJTSBhc3NlcnQgbW9kZQkJKi8KKyNkZWZpbmUgTVJUX1BJTQkJKE1SVF9CQVNFKzgpCS8qIGVuYWJsZSBQSU0gY29kZQkJCSovCisjZGVmaW5lIE1SVF9UQUJMRQkoTVJUX0JBU0UrOSkJLyogU3BlY2lmeSBtcm91dGUgdGFibGUgSUQJCSovCisKKyNkZWZpbmUgU0lPQ0dFVFZJRkNOVAlTSU9DUFJPVE9QUklWQVRFCS8qIElQIHByb3RvY29sIHByaXZhdGVzICovCisjZGVmaW5lIFNJT0NHRVRTR0NOVAkoU0lPQ1BST1RPUFJJVkFURSsxKQorI2RlZmluZSBTSU9DR0VUUlBGCShTSU9DUFJPVE9QUklWQVRFKzIpCisKKyNkZWZpbmUgTUFYVklGUwkJMzIJCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdmlmYml0bWFwX3Q7CS8qIFVzZXIgbW9kZSBjb2RlIGRlcGVuZHMgb24gdGhpcyBsb3QgKi8KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdmlmaV90OworI2RlZmluZSBBTExfVklGUwkoKHZpZmlfdCkoLTEpKQorCisvKgorICoJU2FtZSBpZGVhIGFzIHNlbGVjdAorICovCisgCisjZGVmaW5lIFZJRk1fU0VUKG4sbSkJKChtKXw9KDE8PChuKSkpCisjZGVmaW5lIFZJRk1fQ0xSKG4sbSkJKChtKSY9figxPDwobikpKQorI2RlZmluZSBWSUZNX0lTU0VUKG4sbSkJKChtKSYoMTw8KG4pKSkKKyNkZWZpbmUgVklGTV9DTFJBTEwobSkJKChtKT0wKQorI2RlZmluZSBWSUZNX0NPUFkobWZyb20sbXRvKQkoKG10byk9KG1mcm9tKSkKKyNkZWZpbmUgVklGTV9TQU1FKG0xLG0yKQkoKG0xKT09KG0yKSkKKworLyoKKyAqCVBhc3NlZCBieSBtcm91dGVkIGZvciBhbiBNUlRfQUREX1ZJRiAtIGFnYWluIHdlIHVzZSB0aGUKKyAqCW1yb3V0ZWQgMy42IHN0cnVjdHVyZXMgZm9yIGNvbXBhdGliaWxpdHkKKyAqLworIAorc3RydWN0IHZpZmN0bCB7CisJdmlmaV90CXZpZmNfdmlmaTsJCS8qIEluZGV4IG9mIFZJRiAqLworCXVuc2lnbmVkIGNoYXIgdmlmY19mbGFnczsJLyogVklGRl8gZmxhZ3MgKi8KKwl1bnNpZ25lZCBjaGFyIHZpZmNfdGhyZXNob2xkOwkvKiB0dGwgbGltaXQgKi8KKwl1bnNpZ25lZCBpbnQgdmlmY19yYXRlX2xpbWl0OwkvKiBSYXRlIGxpbWl0ZXIgdmFsdWVzIChOSSkgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCBpbl9hZGRyIHZpZmNfbGNsX2FkZHI7ICAgICAvKiBMb2NhbCBpbnRlcmZhY2UgYWRkcmVzcyAqLworCQlpbnQgICAgICAgICAgICB2aWZjX2xjbF9pZmluZGV4OyAgLyogTG9jYWwgaW50ZXJmYWNlIGluZGV4ICAgKi8KKwl9OworCXN0cnVjdCBpbl9hZGRyIHZpZmNfcm10X2FkZHI7CS8qIElQSVAgdHVubmVsIGFkZHIgKi8KK307CisKKyNkZWZpbmUgVklGRl9UVU5ORUwJCTB4MQkvKiBJUElQIHR1bm5lbCAqLworI2RlZmluZSBWSUZGX1NSQ1JUCQkweDIJLyogTkkgKi8KKyNkZWZpbmUgVklGRl9SRUdJU1RFUgkJMHg0CS8qIHJlZ2lzdGVyIHZpZgkqLworI2RlZmluZSBWSUZGX1VTRV9JRklOREVYCTB4OAkvKiB1c2UgdmlmY19sY2xfaWZpbmRleCBpbnN0ZWFkIG9mCisJCQkJCSAgIHZpZmNfbGNsX2FkZHIgdG8gZmluZCBhbiBpbnRlcmZhY2UgKi8KKworLyoKKyAqCUNhY2hlIG1hbmlwdWxhdGlvbiBzdHJ1Y3R1cmVzIGZvciBtcm91dGVkIGFuZCBQSU1kCisgKi8KKyAKK3N0cnVjdCBtZmNjdGwgeworCXN0cnVjdCBpbl9hZGRyIG1mY2Nfb3JpZ2luOwkJLyogT3JpZ2luIG9mIG1jYXN0CSovCisJc3RydWN0IGluX2FkZHIgbWZjY19tY2FzdGdycDsJCS8qIEdyb3VwIGluIHF1ZXN0aW9uCSovCisJdmlmaV90CW1mY2NfcGFyZW50OwkJCS8qIFdoZXJlIGl0IGFycml2ZWQJKi8KKwl1bnNpZ25lZCBjaGFyIG1mY2NfdHRsc1tNQVhWSUZTXTsJLyogV2hlcmUgaXQgaXMgZ29pbmcJKi8KKwl1bnNpZ25lZCBpbnQgbWZjY19wa3RfY250OwkJLyogcGt0IGNvdW50IGZvciBzcmMtZ3JwICovCisJdW5zaWduZWQgaW50IG1mY2NfYnl0ZV9jbnQ7CisJdW5zaWduZWQgaW50IG1mY2Nfd3JvbmdfaWY7CisJaW50CSAgICAgbWZjY19leHBpcmU7Cit9OworCisvKiAKKyAqCUdyb3VwIGNvdW50IHJldHJpZXZhbCBmb3IgbXJvdXRlZAorICovCisgCitzdHJ1Y3Qgc2lvY19zZ19yZXEgeworCXN0cnVjdCBpbl9hZGRyIHNyYzsKKwlzdHJ1Y3QgaW5fYWRkciBncnA7CisJdW5zaWduZWQgbG9uZyBwa3RjbnQ7CisJdW5zaWduZWQgbG9uZyBieXRlY250OworCXVuc2lnbmVkIGxvbmcgd3JvbmdfaWY7Cit9OworCisvKgorICoJVG8gZ2V0IHZpZiBwYWNrZXQgY291bnRzCisgKi8KKworc3RydWN0IHNpb2NfdmlmX3JlcSB7CisJdmlmaV90CXZpZmk7CQkvKiBXaGljaCBpZmFjZSAqLworCXVuc2lnbmVkIGxvbmcgaWNvdW50OwkvKiBJbiBwYWNrZXRzICovCisJdW5zaWduZWQgbG9uZyBvY291bnQ7CS8qIE91dCBwYWNrZXRzICovCisJdW5zaWduZWQgbG9uZyBpYnl0ZXM7CS8qIEluIGJ5dGVzICovCisJdW5zaWduZWQgbG9uZyBvYnl0ZXM7CS8qIE91dCBieXRlcyAqLworfTsKKworLyoKKyAqCVRoaXMgaXMgdGhlIGZvcm1hdCB0aGUgbXJvdXRlIGRhZW1vbiBleHBlY3RzIHRvIHNlZSBJR01QIGNvbnRyb2wKKyAqCWRhdGEuIE1hZ2ljYWxseSBoYXBwZW5zIHRvIGJlIGxpa2UgYW4gSVAgcGFja2V0IGFzIHBlciB0aGUgb3JpZ2luYWwKKyAqLworIAorc3RydWN0IGlnbXBtc2cgeworCV9fdTMyIHVudXNlZDEsdW51c2VkMjsKKwl1bnNpZ25lZCBjaGFyIGltX21zZ3R5cGU7CQkvKiBXaGF0IGlzIHRoaXMgKi8KKwl1bnNpZ25lZCBjaGFyIGltX21iejsJCQkvKiBNdXN0IGJlIHplcm8gKi8KKwl1bnNpZ25lZCBjaGFyIGltX3ZpZjsJCQkvKiBJbnRlcmZhY2UgKHRoaXMgb3VnaHQgdG8gYmUgYSB2aWZpX3QhKSAqLworCXVuc2lnbmVkIGNoYXIgdW51c2VkMzsKKwlzdHJ1Y3QgaW5fYWRkciBpbV9zcmMsaW1fZHN0OworfTsKKworLyoKKyAqCVRoYXQncyBhbGwgdXNlcm1vZGUgZm9sa3MKKyAqLworCisKKworI2RlZmluZSBNRkNfQVNTRVJUX1RIUkVTSCAoMypIWikJCS8qIE1heGltYWwgZnJlcS4gb2YgYXNzZXJ0cyAqLworCisvKgorICoJUHNldWRvIG1lc3NhZ2VzIHVzZWQgYnkgbXJvdXRlZAorICovCisKKyNkZWZpbmUgSUdNUE1TR19OT0NBQ0hFCQkxCQkvKiBLZXJuIGNhY2hlIGZpbGwgcmVxdWVzdCB0byBtcm91dGVkICovCisjZGVmaW5lIElHTVBNU0dfV1JPTkdWSUYJMgkJLyogRm9yIFBJTSBhc3NlcnQgcHJvY2Vzc2luZyAodW51c2VkKSAqLworI2RlZmluZSBJR01QTVNHX1dIT0xFUEtUCTMJCS8qIEZvciBQSU0gUmVnaXN0ZXIgcHJvY2Vzc2luZyAqLworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE3NDY5NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKQEAgLTAsMCArMSwxMzUgQEAKKyNpZm5kZWYgX19MSU5VWF9NUk9VVEU2X0gKKyNkZWZpbmUgX19MSU5VWF9NUk9VVEU2X0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgorCisvKgorICoJQmFzZWQgb24gdGhlIE1ST1VUSU5HIDMuNSBkZWZpbmVzIHByaW1hcmlseSB0byBrZWVwCisgKglzb3VyY2UgY29tcGF0aWJpbGl0eSB3aXRoIEJTRC4KKyAqCisgKglTZWUgdGhlIHBpbTZzZCBjb2RlIGZvciB0aGUgb3JpZ2luYWwgaGlzdG9yeS4KKyAqCisgKiAgICAgIFByb3RvY29sIEluZGVwZW5kZW50IE11bHRpY2FzdCAoUElNKSBkYXRhIHN0cnVjdHVyZXMgaW5jbHVkZWQKKyAqICAgICAgQ2FybG9zIFBpY290byAoY2FwQGRpLmZjLnVsLnB0KQorICoKKyAqLworCisjZGVmaW5lIE1SVDZfQkFTRQkyMDAKKyNkZWZpbmUgTVJUNl9JTklUCShNUlQ2X0JBU0UpCS8qIEFjdGl2YXRlIHRoZSBrZXJuZWwgbXJvdXRlIGNvZGUgCSovCisjZGVmaW5lIE1SVDZfRE9ORQkoTVJUNl9CQVNFKzEpCS8qIFNodXRkb3duIHRoZSBrZXJuZWwgbXJvdXRlCQkqLworI2RlZmluZSBNUlQ2X0FERF9NSUYJKE1SVDZfQkFTRSsyKQkvKiBBZGQgYSB2aXJ0dWFsIGludGVyZmFjZQkJKi8KKyNkZWZpbmUgTVJUNl9ERUxfTUlGCShNUlQ2X0JBU0UrMykJLyogRGVsZXRlIGEgdmlydHVhbCBpbnRlcmZhY2UJCSovCisjZGVmaW5lIE1SVDZfQUREX01GQwkoTVJUNl9CQVNFKzQpCS8qIEFkZCBhIG11bHRpY2FzdCBmb3J3YXJkaW5nIGVudHJ5CSovCisjZGVmaW5lIE1SVDZfREVMX01GQwkoTVJUNl9CQVNFKzUpCS8qIERlbGV0ZSBhIG11bHRpY2FzdCBmb3J3YXJkaW5nIGVudHJ5CSovCisjZGVmaW5lIE1SVDZfVkVSU0lPTgkoTVJUNl9CQVNFKzYpCS8qIEdldCB0aGUga2VybmVsIG11bHRpY2FzdCB2ZXJzaW9uCSovCisjZGVmaW5lIE1SVDZfQVNTRVJUCShNUlQ2X0JBU0UrNykJLyogQWN0aXZhdGUgUElNIGFzc2VydCBtb2RlCQkqLworI2RlZmluZSBNUlQ2X1BJTQkoTVJUNl9CQVNFKzgpCS8qIGVuYWJsZSBQSU0gY29kZQkJCSovCisjZGVmaW5lIE1SVDZfVEFCTEUJKE1SVDZfQkFTRSs5KQkvKiBTcGVjaWZ5IG1yb3V0ZSB0YWJsZSBJRAkJKi8KKworI2RlZmluZSBTSU9DR0VUTUlGQ05UX0lONglTSU9DUFJPVE9QUklWQVRFCS8qIElQIHByb3RvY29sIHByaXZhdGVzICovCisjZGVmaW5lIFNJT0NHRVRTR0NOVF9JTjYJKFNJT0NQUk9UT1BSSVZBVEUrMSkKKyNkZWZpbmUgU0lPQ0dFVFJQRgkoU0lPQ1BST1RPUFJJVkFURSsyKQorCisjZGVmaW5lIE1BWE1JRlMJCTMyCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbWlmYml0bWFwX3Q7CS8qIFVzZXIgbW9kZSBjb2RlIGRlcGVuZHMgb24gdGhpcyBsb3QgKi8KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgbWlmaV90OworI2RlZmluZSBBTExfTUlGUwkoKG1pZmlfdCkoLTEpKQorCisjaWZuZGVmIElGX1NFVFNJWkUKKyNkZWZpbmUgSUZfU0VUU0laRQkyNTYKKyNlbmRpZgorCit0eXBlZGVmCV9fdTMyCQlpZl9tYXNrOworI2RlZmluZSBOSUZCSVRTIChzaXplb2YoaWZfbWFzaykgKiA4KSAgICAgICAgLyogYml0cyBwZXIgbWFzayAqLworCisjaWYgIWRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoRElWX1JPVU5EX1VQKQorI2RlZmluZQlESVZfUk9VTkRfVVAoeCx5KQkoKCh4KSArICgoeSkgLSAxKSkgLyAoeSkpCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgaWZfc2V0IHsKKwlpZl9tYXNrIGlmc19iaXRzW0RJVl9ST1VORF9VUChJRl9TRVRTSVpFLCBOSUZCSVRTKV07Cit9IGlmX3NldDsKKworI2RlZmluZSBJRl9TRVQobiwgcCkgICAgKChwKS0+aWZzX2JpdHNbKG4pL05JRkJJVFNdIHw9ICgxIDw8ICgobikgJSBOSUZCSVRTKSkpCisjZGVmaW5lIElGX0NMUihuLCBwKSAgICAoKHApLT5pZnNfYml0c1sobikvTklGQklUU10gJj0gfigxIDw8ICgobikgJSBOSUZCSVRTKSkpCisjZGVmaW5lIElGX0lTU0VUKG4sIHApICAoKHApLT5pZnNfYml0c1sobikvTklGQklUU10gJiAoMSA8PCAoKG4pICUgTklGQklUUykpKQorI2RlZmluZSBJRl9DT1BZKGYsIHQpICAgYmNvcHkoZiwgdCwgc2l6ZW9mKCooZikpKQorI2RlZmluZSBJRl9aRVJPKHApICAgICAgYnplcm8ocCwgc2l6ZW9mKCoocCkpKQorCisvKgorICoJUGFzc2VkIGJ5IG1yb3V0ZWQgZm9yIGFuIE1SVF9BRERfTUlGIC0gYWdhaW4gd2UgdXNlIHRoZQorICoJbXJvdXRlZCAzLjYgc3RydWN0dXJlcyBmb3IgY29tcGF0aWJpbGl0eQorICovCisKK3N0cnVjdCBtaWY2Y3RsIHsKKwltaWZpX3QJbWlmNmNfbWlmaTsJCS8qIEluZGV4IG9mIE1JRiAqLworCXVuc2lnbmVkIGNoYXIgbWlmNmNfZmxhZ3M7CS8qIE1JRkZfIGZsYWdzICovCisJdW5zaWduZWQgY2hhciB2aWZjX3RocmVzaG9sZDsJLyogdHRsIGxpbWl0ICovCisJX191MTYJIG1pZjZjX3BpZmk7CQkvKiB0aGUgaW5kZXggb2YgdGhlIHBoeXNpY2FsIElGICovCisJdW5zaWduZWQgaW50IHZpZmNfcmF0ZV9saW1pdDsJLyogUmF0ZSBsaW1pdGVyIHZhbHVlcyAoTkkpICovCit9OworCisjZGVmaW5lIE1JRkZfUkVHSVNURVIJMHgxCS8qIHJlZ2lzdGVyIHZpZgkqLworCisvKgorICoJQ2FjaGUgbWFuaXB1bGF0aW9uIHN0cnVjdHVyZXMgZm9yIG1yb3V0ZWQgYW5kIFBJTWQKKyAqLworCitzdHJ1Y3QgbWY2Y2N0bCB7CisJc3RydWN0IHNvY2thZGRyX2luNiBtZjZjY19vcmlnaW47CQkvKiBPcmlnaW4gb2YgbWNhc3QJKi8KKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IG1mNmNjX21jYXN0Z3JwOwkJLyogR3JvdXAgaW4gcXVlc3Rpb24JKi8KKwltaWZpX3QJbWY2Y2NfcGFyZW50OwkJCS8qIFdoZXJlIGl0IGFycml2ZWQJKi8KKwlzdHJ1Y3QgaWZfc2V0IG1mNmNjX2lmc2V0OwkJLyogV2hlcmUgaXQgaXMgZ29pbmcgKi8KK307CisKKy8qCisgKglHcm91cCBjb3VudCByZXRyaWV2YWwgZm9yIHBpbTZzZAorICovCisKK3N0cnVjdCBzaW9jX3NnX3JlcTYgeworCXN0cnVjdCBzb2NrYWRkcl9pbjYgc3JjOworCXN0cnVjdCBzb2NrYWRkcl9pbjYgZ3JwOworCXVuc2lnbmVkIGxvbmcgcGt0Y250OworCXVuc2lnbmVkIGxvbmcgYnl0ZWNudDsKKwl1bnNpZ25lZCBsb25nIHdyb25nX2lmOworfTsKKworLyoKKyAqCVRvIGdldCB2aWYgcGFja2V0IGNvdW50cworICovCisKK3N0cnVjdCBzaW9jX21pZl9yZXE2IHsKKwltaWZpX3QJbWlmaTsJCS8qIFdoaWNoIGlmYWNlICovCisJdW5zaWduZWQgbG9uZyBpY291bnQ7CS8qIEluIHBhY2tldHMgKi8KKwl1bnNpZ25lZCBsb25nIG9jb3VudDsJLyogT3V0IHBhY2tldHMgKi8KKwl1bnNpZ25lZCBsb25nIGlieXRlczsJLyogSW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBsb25nIG9ieXRlczsJLyogT3V0IGJ5dGVzICovCit9OworCisvKgorICoJVGhhdCdzIGFsbCB1c2VybW9kZSBmb2xrcworICovCisKKworCisvKgorICogU3RydWN0dXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgZnJvbSBrZXJuZWwgdG8gbXVsdGljYXN0IHJvdXRlci4KKyAqIFdlJ2xsIG92ZXJsYXkgdGhlIHN0cnVjdHVyZSBvbnRvIGFuIE1MRCBoZWFkZXIgKG5vdCBhbiBJUHY2IGhlZGVyIGxpa2UgaWdtcG1zZ3t9CisgKiB1c2VkIGZvciBJUHY0IGltcGxlbWVudGF0aW9uKS4gVGhpcyBpcyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIHdpbGwgYmUgcGFzc2VkIHZpYSBhbgorICogSVB2NiByYXcgc29ja2V0LCBvbiB3aWNoIGFuIGFwcGxpY2F0aW9uIHdpbGwgb25seSByZWNlaXZlciB0aGUgcGF5bG9hZCBpLmUgdGhlIGRhdGEgYWZ0ZXIKKyAqIHRoZSBJUHY2IGhlYWRlciBhbmQgYWxsIHRoZSBleHRlbnNpb24gaGVhZGVycy4gKFNlZSBzZWN0aW9uIDMgb2YgUkZDIDM1NDIpCisgKi8KKworc3RydWN0IG1ydDZtc2cgeworI2RlZmluZSBNUlQ2TVNHX05PQ0FDSEUJCTEKKyNkZWZpbmUgTVJUNk1TR19XUk9OR01JRgkyCisjZGVmaW5lIE1SVDZNU0dfV0hPTEVQS1QJMwkJLyogdXNlZCBmb3IgdXNlIGxldmVsIGVuY2FwICovCisJX191OAkJaW02X21iejsJCS8qIG11c3QgYmUgemVybwkJICAgKi8KKwlfX3U4CQlpbTZfbXNndHlwZTsJCS8qIHdoYXQgdHlwZSBvZiBtZXNzYWdlICAgICovCisJX191MTYJCWltNl9taWY7CQkvKiBtaWYgcmVjJ2Qgb24JCSAgICovCisJX191MzIJCWltNl9wYWQ7CQkvKiBwYWRkaW5nIGZvciA2NCBiaXQgYXJjaCAqLworCXN0cnVjdCBpbjZfYWRkcglpbTZfc3JjLCBpbTZfZHN0OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbXNkb3NfZnMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9tc2Rvc19mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NjU4NDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbXNkb3NfZnMuaApAQCAtMCwwICsxLDE2NiBAQAorI2lmbmRlZiBfTElOVVhfTVNET1NfRlNfSAorI2RlZmluZSBfTElOVVhfTVNET1NfRlNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworLyoKKyAqIFRoZSBNUy1ET1MgZmlsZXN5c3RlbSBjb25zdGFudHMvc3RydWN0dXJlcworICovCisKKyNkZWZpbmUgU0VDVE9SX1NJWkUJNTEyCQkvKiBzZWN0b3Igc2l6ZSAoYnl0ZXMpICovCisjZGVmaW5lIFNFQ1RPUl9CSVRTCTkJCS8qIGxvZzIoU0VDVE9SX1NJWkUpICovCisjZGVmaW5lIE1TRE9TX0RQQgkoTVNET1NfRFBTKQkvKiBkaXIgZW50cmllcyBwZXIgYmxvY2sgKi8KKyNkZWZpbmUgTVNET1NfRFBCX0JJVFMJNAkJLyogbG9nMihNU0RPU19EUEIpICovCisjZGVmaW5lIE1TRE9TX0RQUwkoU0VDVE9SX1NJWkUgLyBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpCisjZGVmaW5lIE1TRE9TX0RQU19CSVRTCTQJCS8qIGxvZzIoTVNET1NfRFBTKSAqLworI2RlZmluZSBNU0RPU19MT05HTkFNRQkyNTYJCS8qIG1heGltdW0gbmFtZSBsZW5ndGggKi8KKyNkZWZpbmUgQ0ZfTEVfVyh2KQlsZTE2X3RvX2NwdSh2KQorI2RlZmluZSBDRl9MRV9MKHYpCWxlMzJfdG9fY3B1KHYpCisjZGVmaW5lIENUX0xFX1codikJY3B1X3RvX2xlMTYodikKKyNkZWZpbmUgQ1RfTEVfTCh2KQljcHVfdG9fbGUzMih2KQorCisKKyNkZWZpbmUgTVNET1NfUk9PVF9JTk8JMQkvKiA9PSBNSU5JWF9ST09UX0lOTyAqLworI2RlZmluZSBNU0RPU19ESVJfQklUUwk1CS8qIGxvZzIoc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKSAqLworCisvKiBkaXJlY3RvcnkgbGltaXQgKi8KKyNkZWZpbmUgRkFUX01BWF9ESVJfRU5UUklFUwkoNjU1MzYpCisjZGVmaW5lIEZBVF9NQVhfRElSX1NJWkUJKEZBVF9NQVhfRElSX0VOVFJJRVMgPDwgTVNET1NfRElSX0JJVFMpCisKKyNkZWZpbmUgQVRUUl9OT05FCTAJLyogbm8gYXR0cmlidXRlIGJpdHMgKi8KKyNkZWZpbmUgQVRUUl9STwkJMQkvKiByZWFkLW9ubHkgKi8KKyNkZWZpbmUgQVRUUl9ISURERU4JMgkvKiBoaWRkZW4gKi8KKyNkZWZpbmUgQVRUUl9TWVMJNAkvKiBzeXN0ZW0gKi8KKyNkZWZpbmUgQVRUUl9WT0xVTUUJOAkvKiB2b2x1bWUgbGFiZWwgKi8KKyNkZWZpbmUgQVRUUl9ESVIJMTYJLyogZGlyZWN0b3J5ICovCisjZGVmaW5lIEFUVFJfQVJDSAkzMgkvKiBhcmNoaXZlZCAqLworCisvKiBhdHRyaWJ1dGUgYml0cyB0aGF0IGFyZSBjb3BpZWQgImFzIGlzIiAqLworI2RlZmluZSBBVFRSX1VOVVNFRAkoQVRUUl9WT0xVTUUgfCBBVFRSX0FSQ0ggfCBBVFRSX1NZUyB8IEFUVFJfSElEREVOKQorLyogYml0cyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBXaW5kb3dzIDk1L1dpbmRvd3MgTlQgZXh0ZW5kZWQgRkFUICovCisjZGVmaW5lIEFUVFJfRVhUCShBVFRSX1JPIHwgQVRUUl9ISURERU4gfCBBVFRSX1NZUyB8IEFUVFJfVk9MVU1FKQorCisjZGVmaW5lIENBU0VfTE9XRVJfQkFTRQk4CS8qIGJhc2UgaXMgbG93ZXIgY2FzZSAqLworI2RlZmluZSBDQVNFX0xPV0VSX0VYVAkxNgkvKiBleHRlbnNpb24gaXMgbG93ZXIgY2FzZSAqLworCisjZGVmaW5lIERFTEVURURfRkxBRwkweGU1CS8qIG1hcmtzIGZpbGUgYXMgZGVsZXRlZCB3aGVuIGluIG5hbWVbMF0gKi8KKyNkZWZpbmUgSVNfRlJFRShuKQkoISoobikgfHwgKihuKSA9PSBERUxFVEVEX0ZMQUcpCisKKyNkZWZpbmUgRkFUX0xGTl9MRU4JMjU1CS8qIG1heGltdW0gbG9uZyBuYW1lIGxlbmd0aCAqLworI2RlZmluZSBNU0RPU19OQU1FCTExCS8qIG1heGltdW0gbmFtZSBsZW5ndGggKi8KKyNkZWZpbmUgTVNET1NfU0xPVFMJMjEJLyogbWF4ICMgb2Ygc2xvdHMgZm9yIHNob3J0IGFuZCBsb25nIG5hbWVzICovCisjZGVmaW5lIE1TRE9TX0RPVAkiLiAgICAgICAgICAiCS8qICIuIiwgcGFkZGVkIHRvIE1TRE9TX05BTUUgY2hhcnMgKi8KKyNkZWZpbmUgTVNET1NfRE9URE9UCSIuLiAgICAgICAgICIJLyogIi4uIiwgcGFkZGVkIHRvIE1TRE9TX05BTUUgY2hhcnMgKi8KKworI2RlZmluZSBGQVRfRklSU1RfRU5UKHMsIHgpCSgoTVNET1NfU0IocyktPmZhdF9iaXRzID09IDMyID8gMHgwRkZGRkYwMCA6IFwKKwlNU0RPU19TQihzKS0+ZmF0X2JpdHMgPT0gMTYgPyAweEZGMDAgOiAweEYwMCkgfCAoeCkpCisKKy8qIHN0YXJ0IG9mIGRhdGEgY2x1c3RlcidzIGVudHJ5IChudW1iZXIgb2YgcmVzZXJ2ZWQgY2x1c3RlcnMpICovCisjZGVmaW5lIEZBVF9TVEFSVF9FTlQJMgorCisvKiBtYXhpbXVtIG51bWJlciBvZiBjbHVzdGVycyAqLworI2RlZmluZSBNQVhfRkFUMTIJMHhGRjQKKyNkZWZpbmUgTUFYX0ZBVDE2CTB4RkZGNAorI2RlZmluZSBNQVhfRkFUMzIJMHgwRkZGRkZGNgorI2RlZmluZSBNQVhfRkFUKHMpCShNU0RPU19TQihzKS0+ZmF0X2JpdHMgPT0gMzIgPyBNQVhfRkFUMzIgOiBcCisJTVNET1NfU0IocyktPmZhdF9iaXRzID09IDE2ID8gTUFYX0ZBVDE2IDogTUFYX0ZBVDEyKQorCisvKiBiYWQgY2x1c3RlciBtYXJrICovCisjZGVmaW5lIEJBRF9GQVQxMgkweEZGNworI2RlZmluZSBCQURfRkFUMTYJMHhGRkY3CisjZGVmaW5lIEJBRF9GQVQzMgkweDBGRkZGRkY3CisKKy8qIHN0YW5kYXJkIEVPRiAqLworI2RlZmluZSBFT0ZfRkFUMTIJMHhGRkYKKyNkZWZpbmUgRU9GX0ZBVDE2CTB4RkZGRgorI2RlZmluZSBFT0ZfRkFUMzIJMHgwRkZGRkZGRgorCisjZGVmaW5lIEZBVF9FTlRfRlJFRQkoMCkKKyNkZWZpbmUgRkFUX0VOVF9CQUQJKEJBRF9GQVQzMikKKyNkZWZpbmUgRkFUX0VOVF9FT0YJKEVPRl9GQVQzMikKKworI2RlZmluZSBGQVRfRlNJTkZPX1NJRzEJMHg0MTYxNTI1MgorI2RlZmluZSBGQVRfRlNJTkZPX1NJRzIJMHg2MTQxNzI3MgorI2RlZmluZSBJU19GU0lORk8oeCkJKGxlMzJfdG9fY3B1KCh4KS0+c2lnbmF0dXJlMSkgPT0gRkFUX0ZTSU5GT19TSUcxIFwKKwkJCSAmJiBsZTMyX3RvX2NwdSgoeCktPnNpZ25hdHVyZTIpID09IEZBVF9GU0lORk9fU0lHMikKKworc3RydWN0IF9fZmF0X2RpcmVudCB7CisJbG9uZwkJZF9pbm87CisJX19rZXJuZWxfb2ZmX3QJZF9vZmY7CisJdW5zaWduZWQgc2hvcnQJZF9yZWNsZW47CisJY2hhcgkJZF9uYW1lWzI1Nl07IC8qIFdlIG11c3Qgbm90IGluY2x1ZGUgbGltaXRzLmghICovCit9OworCisvKgorICogaW9jdGwgY29tbWFuZHMKKyAqLworI2RlZmluZSBWRkFUX0lPQ1RMX1JFQURESVJfQk9USAkJX0lPUigncicsIDEsIHN0cnVjdCBfX2ZhdF9kaXJlbnRbMl0pCisjZGVmaW5lIFZGQVRfSU9DVExfUkVBRERJUl9TSE9SVAlfSU9SKCdyJywgMiwgc3RydWN0IF9fZmF0X2RpcmVudFsyXSkKKy8qIDxsaW51eC92aWRlb3RleHQuaD4gaGFzIHVzZWQgMHg3MiAoJ3InKSBpbiBjb2xsaXNpb24sIHNvIHNraXAgYSBmZXcgKi8KKyNkZWZpbmUgRkFUX0lPQ1RMX0dFVF9BVFRSSUJVVEVTCV9JT1IoJ3InLCAweDEwLCBfX3UzMikKKyNkZWZpbmUgRkFUX0lPQ1RMX1NFVF9BVFRSSUJVVEVTCV9JT1coJ3InLCAweDExLCBfX3UzMikKKworc3RydWN0IGZhdF9ib290X3NlY3RvciB7CisJX191OAlpZ25vcmVkWzNdOwkvKiBCb290IHN0cmFwIHNob3J0IG9yIG5lYXIganVtcCAqLworCV9fdTgJc3lzdGVtX2lkWzhdOwkvKiBOYW1lIC0gY2FuIGJlIHVzZWQgdG8gc3BlY2lhbCBjYXNlCisJCQkJICAgcGFydGl0aW9uIG1hbmFnZXIgdm9sdW1lcyAqLworCV9fdTgJc2VjdG9yX3NpemVbMl07CS8qIGJ5dGVzIHBlciBsb2dpY2FsIHNlY3RvciAqLworCV9fdTgJc2VjX3Blcl9jbHVzOwkvKiBzZWN0b3JzL2NsdXN0ZXIgKi8KKwlfX2xlMTYJcmVzZXJ2ZWQ7CS8qIHJlc2VydmVkIHNlY3RvcnMgKi8KKwlfX3U4CWZhdHM7CQkvKiBudW1iZXIgb2YgRkFUcyAqLworCV9fdTgJZGlyX2VudHJpZXNbMl07CS8qIHJvb3QgZGlyZWN0b3J5IGVudHJpZXMgKi8KKwlfX3U4CXNlY3RvcnNbMl07CS8qIG51bWJlciBvZiBzZWN0b3JzICovCisJX191OAltZWRpYTsJCS8qIG1lZGlhIGNvZGUgKi8KKwlfX2xlMTYJZmF0X2xlbmd0aDsJLyogc2VjdG9ycy9GQVQgKi8KKwlfX2xlMTYJc2Vjc190cmFjazsJLyogc2VjdG9ycyBwZXIgdHJhY2sgKi8KKwlfX2xlMTYJaGVhZHM7CQkvKiBudW1iZXIgb2YgaGVhZHMgKi8KKwlfX2xlMzIJaGlkZGVuOwkJLyogaGlkZGVuIHNlY3RvcnMgKHVudXNlZCkgKi8KKwlfX2xlMzIJdG90YWxfc2VjdDsJLyogbnVtYmVyIG9mIHNlY3RvcnMgKGlmIHNlY3RvcnMgPT0gMCkgKi8KKworCS8qIFRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBvbmx5IHVzZWQgYnkgRkFUMzIgKi8KKwlfX2xlMzIJZmF0MzJfbGVuZ3RoOwkvKiBzZWN0b3JzL0ZBVCAqLworCV9fbGUxNglmbGFnczsJCS8qIGJpdCA4OiBmYXQgbWlycm9yaW5nLCBsb3cgNDogYWN0aXZlIGZhdCAqLworCV9fdTgJdmVyc2lvblsyXTsJLyogbWFqb3IsIG1pbm9yIGZpbGVzeXN0ZW0gdmVyc2lvbiAqLworCV9fbGUzMglyb290X2NsdXN0ZXI7CS8qIGZpcnN0IGNsdXN0ZXIgaW4gcm9vdCBkaXJlY3RvcnkgKi8KKwlfX2xlMTYJaW5mb19zZWN0b3I7CS8qIGZpbGVzeXN0ZW0gaW5mbyBzZWN0b3IgKi8KKwlfX2xlMTYJYmFja3VwX2Jvb3Q7CS8qIGJhY2t1cCBib290IHNlY3RvciAqLworCV9fbGUxNglyZXNlcnZlZDJbNl07CS8qIFVudXNlZCAqLworfTsKKworc3RydWN0IGZhdF9ib290X2ZzaW5mbyB7CisJX19sZTMyICAgc2lnbmF0dXJlMTsJLyogMHg0MTYxNTI1MkwgKi8KKwlfX2xlMzIgICByZXNlcnZlZDFbMTIwXTsJLyogTm90aGluZyBhcyBmYXIgYXMgSSBjYW4gdGVsbCAqLworCV9fbGUzMiAgIHNpZ25hdHVyZTI7CS8qIDB4NjE0MTcyNzJMICovCisJX19sZTMyICAgZnJlZV9jbHVzdGVyczsJLyogRnJlZSBjbHVzdGVyIGNvdW50LiAgLTEgaWYgdW5rbm93biAqLworCV9fbGUzMiAgIG5leHRfY2x1c3RlcjsJLyogTW9zdCByZWNlbnRseSBhbGxvY2F0ZWQgY2x1c3RlciAqLworCV9fbGUzMiAgIHJlc2VydmVkMls0XTsKK307CisKK3N0cnVjdCBtc2Rvc19kaXJfZW50cnkgeworCV9fdTgJbmFtZVtNU0RPU19OQU1FXTsvKiBuYW1lIGFuZCBleHRlbnNpb24gKi8KKwlfX3U4CWF0dHI7CQkvKiBhdHRyaWJ1dGUgYml0cyAqLworCV9fdTggICAgbGNhc2U7CQkvKiBDYXNlIGZvciBiYXNlIGFuZCBleHRlbnNpb24gKi8KKwlfX3U4CWN0aW1lX2NzOwkvKiBDcmVhdGlvbiB0aW1lLCBjZW50aXNlY29uZHMgKDAtMTk5KSAqLworCV9fbGUxNgljdGltZTsJCS8qIENyZWF0aW9uIHRpbWUgKi8KKwlfX2xlMTYJY2RhdGU7CQkvKiBDcmVhdGlvbiBkYXRlICovCisJX19sZTE2CWFkYXRlOwkJLyogTGFzdCBhY2Nlc3MgZGF0ZSAqLworCV9fbGUxNglzdGFydGhpOwkvKiBIaWdoIDE2IGJpdHMgb2YgY2x1c3RlciBpbiBGQVQzMiAqLworCV9fbGUxNgl0aW1lLGRhdGUsc3RhcnQ7LyogdGltZSwgZGF0ZSBhbmQgZmlyc3QgY2x1c3RlciAqLworCV9fbGUzMglzaXplOwkJLyogZmlsZSBzaXplIChpbiBieXRlcykgKi8KK307CisKKy8qIFVwIHRvIDEzIGNoYXJhY3RlcnMgb2YgdGhlIG5hbWUgKi8KK3N0cnVjdCBtc2Rvc19kaXJfc2xvdCB7CisJX191OCAgICBpZDsJCS8qIHNlcXVlbmNlIG51bWJlciBmb3Igc2xvdCAqLworCV9fdTggICAgbmFtZTBfNFsxMF07CS8qIGZpcnN0IDUgY2hhcmFjdGVycyBpbiBuYW1lICovCisJX191OCAgICBhdHRyOwkJLyogYXR0cmlidXRlIGJ5dGUgKi8KKwlfX3U4ICAgIHJlc2VydmVkOwkvKiBhbHdheXMgMCAqLworCV9fdTggICAgYWxpYXNfY2hlY2tzdW07CS8qIGNoZWNrc3VtIGZvciA4LjMgYWxpYXMgKi8KKwlfX3U4ICAgIG5hbWU1XzEwWzEyXTsJLyogNiBtb3JlIGNoYXJhY3RlcnMgaW4gbmFtZSAqLworCV9fbGUxNiAgIHN0YXJ0OwkJLyogc3RhcnRpbmcgY2x1c3RlciBudW1iZXIsIDAgaW4gbG9uZyBzbG90cyAqLworCV9fdTggICAgbmFtZTExXzEyWzRdOwkvKiBsYXN0IDIgY2hhcmFjdGVycyBpbiBuYW1lICovCit9OworCisjZW5kaWYgLyogIV9MSU5VWF9NU0RPU19GU19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbXNnLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VmOGUzMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9tc2cuaApAQCAtMCwwICsxLDc1IEBACisjaWZuZGVmIF9MSU5VWF9NU0dfSAorI2RlZmluZSBfTElOVVhfTVNHX0gKKworI2luY2x1ZGUgPGxpbnV4L2lwYy5oPgorCisvKiBpcGNzIGN0bCBjb21tYW5kcyAqLworI2RlZmluZSBNU0dfU1RBVCAxMQorI2RlZmluZSBNU0dfSU5GTyAxMgorCisvKiBtc2dyY3Ygb3B0aW9ucyAqLworI2RlZmluZSBNU0dfTk9FUlJPUiAgICAgMDEwMDAwICAvKiBubyBlcnJvciBpZiBtZXNzYWdlIGlzIHRvbyBiaWcgKi8KKyNkZWZpbmUgTVNHX0VYQ0VQVCAgICAgIDAyMDAwMCAgLyogcmVjdiBhbnkgbXNnIGV4Y2VwdCBvZiBzcGVjaWZpZWQgdHlwZS4qLworCisvKiBPYnNvbGV0ZSwgdXNlZCBvbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhbmQgbGliYzUgY29tcGlsZXMgKi8KK3N0cnVjdCBtc3FpZF9kcyB7CisJc3RydWN0IGlwY19wZXJtIG1zZ19wZXJtOworCXN0cnVjdCBtc2cgKm1zZ19maXJzdDsJCS8qIGZpcnN0IG1lc3NhZ2Ugb24gcXVldWUsdW51c2VkICAqLworCXN0cnVjdCBtc2cgKm1zZ19sYXN0OwkJLyogbGFzdCBtZXNzYWdlIGluIHF1ZXVlLHVudXNlZCAqLworCV9fa2VybmVsX3RpbWVfdCBtc2dfc3RpbWU7CS8qIGxhc3QgbXNnc25kIHRpbWUgKi8KKwlfX2tlcm5lbF90aW1lX3QgbXNnX3J0aW1lOwkvKiBsYXN0IG1zZ3JjdiB0aW1lICovCisJX19rZXJuZWxfdGltZV90IG1zZ19jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCXVuc2lnbmVkIGxvbmcgIG1zZ19sY2J5dGVzOwkvKiBSZXVzZSBqdW5rIGZpZWxkcyBmb3IgMzIgYml0ICovCisJdW5zaWduZWQgbG9uZyAgbXNnX2xxYnl0ZXM7CS8qIGRpdHRvICovCisJdW5zaWduZWQgc2hvcnQgbXNnX2NieXRlczsJLyogY3VycmVudCBudW1iZXIgb2YgYnl0ZXMgb24gcXVldWUgKi8KKwl1bnNpZ25lZCBzaG9ydCBtc2dfcW51bTsJLyogbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHF1ZXVlICovCisJdW5zaWduZWQgc2hvcnQgbXNnX3FieXRlczsJLyogbWF4IG51bWJlciBvZiBieXRlcyBvbiBxdWV1ZSAqLworCV9fa2VybmVsX2lwY19waWRfdCBtc2dfbHNwaWQ7CS8qIHBpZCBvZiBsYXN0IG1zZ3NuZCAqLworCV9fa2VybmVsX2lwY19waWRfdCBtc2dfbHJwaWQ7CS8qIGxhc3QgcmVjZWl2ZSBwaWQgKi8KK307CisKKy8qIEluY2x1ZGUgdGhlIGRlZmluaXRpb24gb2YgbXNxaWQ2NF9kcyAqLworI2luY2x1ZGUgPGFzbS9tc2didWYuaD4KKworLyogbWVzc2FnZSBidWZmZXIgZm9yIG1zZ3NuZCBhbmQgbXNncmN2IGNhbGxzICovCitzdHJ1Y3QgbXNnYnVmIHsKKwlsb25nIG10eXBlOyAgICAgICAgIC8qIHR5cGUgb2YgbWVzc2FnZSAqLworCWNoYXIgbXRleHRbMV07ICAgICAgLyogbWVzc2FnZSB0ZXh0ICovCit9OworCisvKiBidWZmZXIgZm9yIG1zZ2N0bCBjYWxscyBJUENfSU5GTywgTVNHX0lORk8gKi8KK3N0cnVjdCBtc2dpbmZvIHsKKwlpbnQgbXNncG9vbDsKKwlpbnQgbXNnbWFwOyAKKwlpbnQgbXNnbWF4OyAKKwlpbnQgbXNnbW5iOyAKKwlpbnQgbXNnbW5pOyAKKwlpbnQgbXNnc3N6OyAKKwlpbnQgbXNndHFsOyAKKwl1bnNpZ25lZCBzaG9ydCAgbXNnc2VnOyAKK307CisKKy8qCisgKiBTY2FsaW5nIGZhY3RvciB0byBjb21wdXRlIG1zZ21uaToKKyAqIHRoZSBtZW1vcnkgZGVkaWNhdGVkIHRvIG1zZyBxdWV1ZXMgKG1zZ21uaSAqIG1zZ21uYikgc2hvdWxkIG9jY3VweQorICogYXQgbW9zdCAxL01TR19NRU1fU0NBTEUgb2YgdGhlIGxvd21lbSAoc2VlIHRoZSBmb3JtdWxhIGluIGlwYy9tc2cuYyk6CisgKiB1cCB0byA4TUIgICAgICAgOiBtc2dtbmkgPSAxNiAoTVNHTU5JKQorICogNCBHQiAgICAgICAgICAgIDogbXNnbW5pID0gOEsKKyAqIG1vcmUgdGhhbiAxNiBHQiA6IG1zZ21uaSA9IDMySyAoSVBDTU5JKQorICovCisjZGVmaW5lIE1TR19NRU1fU0NBTEUgMzIKKworI2RlZmluZSBNU0dNTkkgICAgMTYgICAvKiA8PSBJUENNTkkgKi8gICAgIC8qIG1heCAjIG9mIG1zZyBxdWV1ZSBpZGVudGlmaWVycyAqLworI2RlZmluZSBNU0dNQVggIDgxOTIgICAvKiA8PSBJTlRfTUFYICovICAgLyogbWF4IHNpemUgb2YgbWVzc2FnZSAoYnl0ZXMpICovCisjZGVmaW5lIE1TR01OQiAxNjM4NCAgIC8qIDw9IElOVF9NQVggKi8gICAvKiBkZWZhdWx0IG1heCBzaXplIG9mIGEgbWVzc2FnZSBxdWV1ZSAqLworCisvKiB1bnVzZWQgKi8KKyNkZWZpbmUgTVNHUE9PTCAoTVNHTU5JICogTVNHTU5CIC8gMTAyNCkgLyogc2l6ZSBpbiBrYnl0ZXMgb2YgbWVzc2FnZSBwb29sICovCisjZGVmaW5lIE1TR1RRTCAgTVNHTU5CICAgICAgICAgICAgLyogbnVtYmVyIG9mIHN5c3RlbSBtZXNzYWdlIGhlYWRlcnMgKi8KKyNkZWZpbmUgTVNHTUFQICBNU0dNTkIgICAgICAgICAgICAvKiBudW1iZXIgb2YgZW50cmllcyBpbiBtZXNzYWdlIG1hcCAqLworI2RlZmluZSBNU0dTU1ogIDE2ICAgICAgICAgICAgICAgIC8qIG1lc3NhZ2Ugc2VnbWVudCBzaXplICovCisjZGVmaW5lIF9fTVNHU0VHICgoTVNHUE9PTCAqIDEwMjQpIC8gTVNHU1NaKSAvKiBtYXggbm8uIG9mIHNlZ21lbnRzICovCisjZGVmaW5lIE1TR1NFRyAoX19NU0dTRUcgPD0gMHhmZmZmID8gX19NU0dTRUcgOiAweGZmZmYpCisKKworI2VuZGlmIC8qIF9MSU5VWF9NU0dfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L210aW8uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9tdGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY4MjU3NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9tdGlvLmgKQEAgLTAsMCArMSwyMDcgQEAKKy8qIAorICogbGludXgvbXRpby5oIGhlYWRlciBmaWxlIGZvciBMaW51eC4gV3JpdHRlbiBieSBILiBCZXJnbWFuCisgKgorICogTW9kaWZpZWQgZm9yIHNwZWNpYWwgaW9jdGxzIHByb3ZpZGVkIGJ5IHpmdGFwZSBpbiBTZXB0ZW1iZXIgMTk5NworICogYnkgQy4tSi4gSGVpbmUuCisgKi8KKworI2lmbmRlZiBfTElOVVhfTVRJT19ICisjZGVmaW5lIF9MSU5VWF9NVElPX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworLyoKKyAqIFN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIGZvciBtYWcgdGFwZSBpbyBjb250cm9sIGNvbW1hbmRzCisgKi8KKworLyogc3RydWN0dXJlIGZvciBNVElPQ1RPUCAtIG1hZyB0YXBlIG9wIGNvbW1hbmQgKi8KK3N0cnVjdAltdG9wIHsKKwlzaG9ydAltdF9vcDsJCS8qIG9wZXJhdGlvbnMgZGVmaW5lZCBiZWxvdyAqLworCWludAltdF9jb3VudDsJLyogaG93IG1hbnkgb2YgdGhlbSAqLworfTsKKworLyogTWFnbmV0aWMgVGFwZSBvcGVyYXRpb25zIFtOb3QgYWxsIG9wZXJhdGlvbnMgc3VwcG9ydGVkIGJ5IGFsbCBkcml2ZXJzXTogKi8KKyNkZWZpbmUgTVRSRVNFVCAwCS8qICtyZXNldCBkcml2ZSBpbiBjYXNlIG9mIHByb2JsZW1zICovCisjZGVmaW5lIE1URlNGCTEJLyogZm9yd2FyZCBzcGFjZSBvdmVyIEZpbGVNYXJrLAorCQkJICogcG9zaXRpb24gYXQgZmlyc3QgcmVjb3JkIG9mIG5leHQgZmlsZSAKKwkJCSAqLworI2RlZmluZSBNVEJTRgkyCS8qIGJhY2t3YXJkIHNwYWNlIEZpbGVNYXJrIChwb3NpdGlvbiBiZWZvcmUgRk0pICovCisjZGVmaW5lIE1URlNSCTMJLyogZm9yd2FyZCBzcGFjZSByZWNvcmQgKi8KKyNkZWZpbmUgTVRCU1IJNAkvKiBiYWNrd2FyZCBzcGFjZSByZWNvcmQgKi8KKyNkZWZpbmUgTVRXRU9GCTUJLyogd3JpdGUgYW4gZW5kLW9mLWZpbGUgcmVjb3JkIChtYXJrKSAqLworI2RlZmluZSBNVFJFVwk2CS8qIHJld2luZCAqLworI2RlZmluZSBNVE9GRkwJNwkvKiByZXdpbmQgYW5kIHB1dCB0aGUgZHJpdmUgb2ZmbGluZSAoZWplY3Q/KSAqLworI2RlZmluZSBNVE5PUAk4CS8qIG5vIG9wLCBzZXQgc3RhdHVzIG9ubHkgKHJlYWQgd2l0aCBNVElPQ0dFVCkgKi8KKyNkZWZpbmUgTVRSRVRFTiA5CS8qIHJldGVuc2lvbiB0YXBlICovCisjZGVmaW5lIE1UQlNGTQkxMAkvKiArYmFja3dhcmQgc3BhY2UgRmlsZU1hcmssIHBvc2l0aW9uIGF0IEZNICovCisjZGVmaW5lIE1URlNGTSAgMTEJLyogK2ZvcndhcmQgc3BhY2UgRmlsZU1hcmssIHBvc2l0aW9uIGF0IEZNICovCisjZGVmaW5lIE1URU9NCTEyCS8qIGdvdG8gZW5kIG9mIHJlY29yZGVkIG1lZGlhIChmb3IgYXBwZW5kaW5nIGZpbGVzKS4KKwkJCSAqIE1URU9NIHBvc2l0aW9ucyBhZnRlciB0aGUgbGFzdCBGTSwgcmVhZHkgZm9yCisJCQkgKiBhcHBlbmRpbmcgYW5vdGhlciBmaWxlLgorCQkJICovCisjZGVmaW5lIE1URVJBU0UgMTMJLyogZXJhc2UgdGFwZSAtLSBiZSBjYXJlZnVsISAqLworCisjZGVmaW5lIE1UUkFTMSAgMTQJLyogcnVuIHNlbGYgdGVzdCAxIChub25kZXN0cnVjdGl2ZSkgKi8KKyNkZWZpbmUgTVRSQVMyCTE1CS8qIHJ1biBzZWxmIHRlc3QgMiAoZGVzdHJ1Y3RpdmUpICovCisjZGVmaW5lIE1UUkFTMyAgMTYJLyogcmVzZXJ2ZWQgZm9yIHNlbGYgdGVzdCAzICovCisKKyNkZWZpbmUgTVRTRVRCTEsgMjAJLyogc2V0IGJsb2NrIGxlbmd0aCAoU0NTSSkgKi8KKyNkZWZpbmUgTVRTRVRERU5TSVRZIDIxCS8qIHNldCB0YXBlIGRlbnNpdHkgKFNDU0kpICovCisjZGVmaW5lIE1UU0VFSwkyMgkvKiBzZWVrIHRvIGJsb2NrIChUYW5kYmVyZywgZXRjLikgKi8KKyNkZWZpbmUgTVRURUxMCTIzCS8qIHRlbGwgYmxvY2sgKFRhbmRiZXJnLCBldGMuKSAqLworI2RlZmluZSBNVFNFVERSVkJVRkZFUiAyNCAvKiBzZXQgdGhlIGRyaXZlIGJ1ZmZlcmluZyBhY2NvcmRpbmcgdG8gU0NTSS0yICovCisJCQkvKiBvcmRpbmFyeSBidWZmZXJlZCBvcGVyYXRpb24gd2l0aCBjb2RlIDEgKi8KKyNkZWZpbmUgTVRGU1MJMjUJLyogc3BhY2UgZm9yd2FyZCBvdmVyIHNldG1hcmtzICovCisjZGVmaW5lIE1UQlNTCTI2CS8qIHNwYWNlIGJhY2t3YXJkIG92ZXIgc2V0bWFya3MgKi8KKyNkZWZpbmUgTVRXU00JMjcJLyogd3JpdGUgc2V0bWFya3MgKi8KKworI2RlZmluZSBNVExPQ0sgIDI4CS8qIGxvY2sgdGhlIGRyaXZlIGRvb3IgKi8KKyNkZWZpbmUgTVRVTkxPQ0sgMjkJLyogdW5sb2NrIHRoZSBkcml2ZSBkb29yICovCisjZGVmaW5lIE1UTE9BRCAgMzAJLyogZXhlY3V0ZSB0aGUgU0NTSSBsb2FkIGNvbW1hbmQgKi8KKyNkZWZpbmUgTVRVTkxPQUQgMzEJLyogZXhlY3V0ZSB0aGUgU0NTSSB1bmxvYWQgY29tbWFuZCAqLworI2RlZmluZSBNVENPTVBSRVNTSU9OIDMyLyogY29udHJvbCBjb21wcmVzc2lvbiB3aXRoIFNDU0kgbW9kZSBwYWdlIDE1ICovCisjZGVmaW5lIE1UU0VUUEFSVCAzMwkvKiBDaGFuZ2UgdGhlIGFjdGl2ZSB0YXBlIHBhcnRpdGlvbiAqLworI2RlZmluZSBNVE1LUEFSVCAgMzQJLyogRm9ybWF0IHRoZSB0YXBlIHdpdGggb25lIG9yIHR3byBwYXJ0aXRpb25zICovCisjZGVmaW5lIE1UV0VPRkkJMzUJLyogd3JpdGUgYW4gZW5kLW9mLWZpbGUgcmVjb3JkIChtYXJrKSBpbiBpbW1lZGlhdGUgbW9kZSAqLworCisvKiBzdHJ1Y3R1cmUgZm9yIE1USU9DR0VUIC0gbWFnIHRhcGUgZ2V0IHN0YXR1cyBjb21tYW5kICovCisKK3N0cnVjdAltdGdldCB7CisJbG9uZwltdF90eXBlOwkvKiB0eXBlIG9mIG1hZ3RhcGUgZGV2aWNlICovCisJbG9uZwltdF9yZXNpZDsJLyogcmVzaWR1YWwgY291bnQ6IChub3Qgc3VyZSkKKwkJCQkgKgludW1iZXIgb2YgYnl0ZXMgaWdub3JlZCwgb3IKKwkJCQkgKgludW1iZXIgb2YgZmlsZXMgbm90IHNraXBwZWQsIG9yCisJCQkJICoJbnVtYmVyIG9mIHJlY29yZHMgbm90IHNraXBwZWQuCisJCQkJICovCisJLyogdGhlIGZvbGxvd2luZyByZWdpc3RlcnMgYXJlIGRldmljZSBkZXBlbmRlbnQgKi8KKwlsb25nCW10X2RzcmVnOwkvKiBzdGF0dXMgcmVnaXN0ZXIgKi8KKwlsb25nCW10X2dzdGF0OwkvKiBnZW5lcmljIChkZXZpY2UgaW5kZXBlbmRlbnQpIHN0YXR1cyAqLworCWxvbmcJbXRfZXJyZWc7CS8qIGVycm9yIHJlZ2lzdGVyICovCisJLyogVGhlIG5leHQgdHdvIGZpZWxkcyBhcmUgbm90IGFsd2F5cyB1c2VkICovCisJX19rZXJuZWxfZGFkZHJfdCBtdF9maWxlbm87CS8qIG51bWJlciBvZiBjdXJyZW50IGZpbGUgb24gdGFwZSAqLworCV9fa2VybmVsX2RhZGRyX3QgbXRfYmxrbm87CS8qIGN1cnJlbnQgYmxvY2sgbnVtYmVyICovCit9OworCisKKworLyoKKyAqIENvbnN0YW50cyBmb3IgbXRfdHlwZS4gTm90IGFsbCBvZiB0aGVzZSBhcmUgc3VwcG9ydGVkLAorICogYW5kIHRoZXNlIGFyZSBub3QgYWxsIG9mIHRoZSBvbmVzIHRoYXQgYXJlIHN1cHBvcnRlZC4KKyAqLworI2RlZmluZSBNVF9JU1VOS05PV04JCTB4MDEKKyNkZWZpbmUgTVRfSVNRSUMwMgkJMHgwMgkvKiBHZW5lcmljIFFJQy0wMiB0YXBlIHN0cmVhbWVyICovCisjZGVmaW5lIE1UX0lTV1Q1MTUwCQkweDAzCS8qIFdhbmd0ZWsgNTE1MEVRLCBRSUMtMTUwLCBRSUMtMDIgKi8KKyNkZWZpbmUgTVRfSVNBUkNISVZFXzU5NDVMMgkweDA0CS8qIEFyY2hpdmUgNTk0NUwtMiwgUUlDLTI0LCBRSUMtMDI/ICovCisjZGVmaW5lIE1UX0lTQ01TSjUwMAkJMHgwNQkvKiBDTVMgSnVtYm8gNTAwIChRSUMtMDI/KSAqLworI2RlZmluZSBNVF9JU1REQzM2MTAJCTB4MDYJLyogVGFuZGJlcmcgNjMxMCwgUUlDLTI0ICovCisjZGVmaW5lIE1UX0lTQVJDSElWRV9WUDYwSQkweDA3CS8qIEFyY2hpdmUgVlA2MGksIFFJQy0wMiAqLworI2RlZmluZSBNVF9JU0FSQ0hJVkVfMjE1MEwJMHgwOAkvKiBBcmNoaXZlIFZpcGVyIDIxNTBMICovCisjZGVmaW5lIE1UX0lTQVJDSElWRV8yMDYwTAkweDA5CS8qIEFyY2hpdmUgVmlwZXIgMjA2MEwgKi8KKyNkZWZpbmUgTVRfSVNBUkNISVZFU0M0OTkJMHgwQQkvKiBBcmNoaXZlIFNDLTQ5OSBRSUMtMzYgY29udHJvbGxlciAqLworI2RlZmluZSBNVF9JU1FJQzAyX0FMTF9GRUFUVVJFUwkweDBGCS8qIEdlbmVyaWMgUUlDLTAyIHdpdGggYWxsIGZlYXR1cmVzICovCisjZGVmaW5lIE1UX0lTV1Q1MDk5RUVOMjQJMHgxMQkvKiBXYW5ndGVrIDUwOTktZWVuMjQsIDYwTUIsIFFJQy0yNCAqLworI2RlZmluZSBNVF9JU1RFQUNfTVQyU1QJCTB4MTIJLyogVGVhYyBNVC0yU1QgMTU1bWIgZHJpdmUsIFRlYWMgREMtMSBjYXJkIChXYW5ndGVrIHR5cGUpICovCisjZGVmaW5lIE1UX0lTRVZFUkVYX0ZUNDBBCTB4MzIJLyogRXZlcmV4IEZUNDBBIChRSUMtNDApICovCisjZGVmaW5lIE1UX0lTRERTMQkJMHg1MQkvKiBERFMgZGV2aWNlIHdpdGhvdXQgcGFydGl0aW9ucyAqLworI2RlZmluZSBNVF9JU0REUzIJCTB4NTIJLyogRERTIGRldmljZSB3aXRoIHBhcnRpdGlvbnMgKi8KKyNkZWZpbmUgTVRfSVNPTlNUUkVBTV9TQyAgICAgICAgMHg2MSAgIC8qIE9uU3RyZWFtIFNDU0kgdGFwZSBkcml2ZXMgKFNDLXgwKQorCQkJCQkgIGFuZCBTQ1NJIGVtdWxhdGVkIChESSwgRFAsIFVTQikgKi8KKyNkZWZpbmUgTVRfSVNTQ1NJMQkJMHg3MQkvKiBHZW5lcmljIEFOU0kgU0NTSS0xIHRhcGUgdW5pdCAqLworI2RlZmluZSBNVF9JU1NDU0kyCQkweDcyCS8qIEdlbmVyaWMgQU5TSSBTQ1NJLTIgdGFwZSB1bml0ICovCisKKy8qIFFJQy00MC84MC8zMDEwLzMwMjAgZnRhcGUgc3VwcG9ydGVkIGRyaXZlcy4KKyAqIDIwYml0IHZlbmRvciBJRCArIDB4ODAwMDAwIChzZWUgZnRhcGUtdmVuZG9ycy5oKQorICovCisjZGVmaW5lIE1UX0lTRlRBUEVfVU5LTk9XTgkweDgwMDAwMCAvKiBvYnNvbGV0ZSAqLworI2RlZmluZSBNVF9JU0ZUQVBFX0ZMQUcJMHg4MDAwMDAKKworCisvKiBzdHJ1Y3R1cmUgZm9yIE1USU9DUE9TIC0gbWFnIHRhcGUgZ2V0IHBvc2l0aW9uIGNvbW1hbmQgKi8KKworc3RydWN0CW10cG9zIHsKKwlsb25nIAltdF9ibGtubzsJLyogY3VycmVudCBibG9jayBudW1iZXIgKi8KK307CisKKworLyogbWFnIHRhcGUgaW8gY29udHJvbCBjb21tYW5kcyAqLworI2RlZmluZQlNVElPQ1RPUAlfSU9XKCdtJywgMSwgc3RydWN0IG10b3ApCS8qIGRvIGEgbWFnIHRhcGUgb3AgKi8KKyNkZWZpbmUJTVRJT0NHRVQJX0lPUignbScsIDIsIHN0cnVjdCBtdGdldCkJLyogZ2V0IHRhcGUgc3RhdHVzICovCisjZGVmaW5lCU1USU9DUE9TCV9JT1IoJ20nLCAzLCBzdHJ1Y3QgbXRwb3MpCS8qIGdldCB0YXBlIHBvc2l0aW9uICovCisKKworLyogR2VuZXJpYyBNYWcgVGFwZSAoZGV2aWNlIGluZGVwZW5kZW50KSBzdGF0dXMgbWFjcm9zIGZvciBleGFtaW5pbmcKKyAqIG10X2dzdGF0IC0tIEhQLVVYIGNvbXBhdGlibGUuCisgKiBUaGVyZSBpcyByb29tIGZvciBtb3JlIGdlbmVyaWMgc3RhdHVzIGJpdHMgaGVyZSwgYnV0IEkgZG9uJ3QKKyAqIGtub3cgd2hpY2ggb2YgdGhlbSBhcmUgcmVzZXJ2ZWQuIEF0IGxlYXN0IHRocmVlIG9yIHNvIHNob3VsZAorICogYmUgYWRkZWQgdG8gbWFrZSB0aGlzIHJlYWxseSB1c2VmdWwuCisgKi8KKyNkZWZpbmUgR01UX0VPRih4KSAgICAgICAgICAgICAgKCh4KSAmIDB4ODAwMDAwMDApCisjZGVmaW5lIEdNVF9CT1QoeCkgICAgICAgICAgICAgICgoeCkgJiAweDQwMDAwMDAwKQorI2RlZmluZSBHTVRfRU9UKHgpICAgICAgICAgICAgICAoKHgpICYgMHgyMDAwMDAwMCkKKyNkZWZpbmUgR01UX1NNKHgpICAgICAgICAgICAgICAgKCh4KSAmIDB4MTAwMDAwMDApICAvKiBERFMgc2V0bWFyayAqLworI2RlZmluZSBHTVRfRU9EKHgpICAgICAgICAgICAgICAoKHgpICYgMHgwODAwMDAwMCkgIC8qIEREUyBFT0QgKi8KKyNkZWZpbmUgR01UX1dSX1BST1QoeCkgICAgICAgICAgKCh4KSAmIDB4MDQwMDAwMDApCisvKiAjZGVmaW5lIEdNVF8gPyAJCSgoeCkgJiAweDAyMDAwMDAwKSAqLworI2RlZmluZSBHTVRfT05MSU5FKHgpICAgICAgICAgICAoKHgpICYgMHgwMTAwMDAwMCkKKyNkZWZpbmUgR01UX0RfNjI1MCh4KSAgICAgICAgICAgKCh4KSAmIDB4MDA4MDAwMDApCisjZGVmaW5lIEdNVF9EXzE2MDAoeCkgICAgICAgICAgICgoeCkgJiAweDAwNDAwMDAwKQorI2RlZmluZSBHTVRfRF84MDAoeCkgICAgICAgICAgICAoKHgpICYgMHgwMDIwMDAwMCkKKy8qICNkZWZpbmUgR01UXyA/IAkJKCh4KSAmIDB4MDAxMDAwMDApICovCisvKiAjZGVmaW5lIEdNVF8gPyAJCSgoeCkgJiAweDAwMDgwMDAwKSAqLworI2RlZmluZSBHTVRfRFJfT1BFTih4KSAgICAgICAgICAoKHgpICYgMHgwMDA0MDAwMCkgIC8qIGRvb3Igb3BlbiAobm8gdGFwZSkgKi8KKy8qICNkZWZpbmUgR01UXyA/IAkJKCh4KSAmIDB4MDAwMjAwMDApICovCisjZGVmaW5lIEdNVF9JTV9SRVBfRU4oeCkgICAgICAgICgoeCkgJiAweDAwMDEwMDAwKSAgLyogaW1tZWRpYXRlIHJlcG9ydCBtb2RlICovCisjZGVmaW5lIEdNVF9DTE4oeCkgICAgICAgICAgICAgICgoeCkgJiAweDAwMDA4MDAwKSAgLyogY2xlYW5pbmcgcmVxdWVzdGVkICovCisvKiAxNSBnZW5lcmljIHN0YXR1cyBiaXRzIHVudXNlZCAqLworCisKKy8qIFNDU0ktdGFwZSBzcGVjaWZpYyBkZWZpbml0aW9ucyAqLworLyogQml0ZmllbGQgc2hpZnRzIGluIHRoZSBzdGF0dXMgICovCisjZGVmaW5lIE1UX1NUX0JMS1NJWkVfU0hJRlQJMAorI2RlZmluZSBNVF9TVF9CTEtTSVpFX01BU0sJMHhmZmZmZmYKKyNkZWZpbmUgTVRfU1RfREVOU0lUWV9TSElGVAkyNAorI2RlZmluZSBNVF9TVF9ERU5TSVRZX01BU0sJMHhmZjAwMDAwMAorCisjZGVmaW5lIE1UX1NUX1NPRlRFUlJfU0hJRlQJMAorI2RlZmluZSBNVF9TVF9TT0ZURVJSX01BU0sJMHhmZmZmCisKKy8qIEJpdGZpZWxkcyBmb3IgdGhlIE1UU0VURFJWQlVGRkVSIGlvY3RsICovCisjZGVmaW5lIE1UX1NUX09QVElPTlMJCTB4ZjAwMDAwMDAKKyNkZWZpbmUgTVRfU1RfQk9PTEVBTlMJCTB4MTAwMDAwMDAKKyNkZWZpbmUgTVRfU1RfU0VUQk9PTEVBTlMJMHgzMDAwMDAwMAorI2RlZmluZSBNVF9TVF9DTEVBUkJPT0xFQU5TCTB4NDAwMDAwMDAKKyNkZWZpbmUgTVRfU1RfV1JJVEVfVEhSRVNIT0xECTB4MjAwMDAwMDAKKyNkZWZpbmUgTVRfU1RfREVGX0JMS1NJWkUJMHg1MDAwMDAwMAorI2RlZmluZSBNVF9TVF9ERUZfT1BUSU9OUwkweDYwMDAwMDAwCisjZGVmaW5lIE1UX1NUX1RJTUVPVVRTCQkweDcwMDAwMDAwCisjZGVmaW5lIE1UX1NUX1NFVF9USU1FT1VUCShNVF9TVF9USU1FT1VUUyB8IDB4MDAwMDAwKQorI2RlZmluZSBNVF9TVF9TRVRfTE9OR19USU1FT1VUCShNVF9TVF9USU1FT1VUUyB8IDB4MTAwMDAwKQorI2RlZmluZSBNVF9TVF9TRVRfQ0xOCQkweDgwMDAwMDAwCisKKyNkZWZpbmUgTVRfU1RfQlVGRkVSX1dSSVRFUwkweDEKKyNkZWZpbmUgTVRfU1RfQVNZTkNfV1JJVEVTCTB4MgorI2RlZmluZSBNVF9TVF9SRUFEX0FIRUFECTB4NAorI2RlZmluZSBNVF9TVF9ERUJVR0dJTkcJCTB4OAorI2RlZmluZSBNVF9TVF9UV09fRk0JCTB4MTAKKyNkZWZpbmUgTVRfU1RfRkFTVF9NVEVPTQkweDIwCisjZGVmaW5lIE1UX1NUX0FVVE9fTE9DSwkJMHg0MAorI2RlZmluZSBNVF9TVF9ERUZfV1JJVEVTCTB4ODAKKyNkZWZpbmUgTVRfU1RfQ0FOX0JTUgkJMHgxMDAKKyNkZWZpbmUgTVRfU1RfTk9fQkxLTElNUwkweDIwMAorI2RlZmluZSBNVF9TVF9DQU5fUEFSVElUSU9OUyAgICAweDQwMAorI2RlZmluZSBNVF9TVF9TQ1NJMkxPR0lDQUwgICAgICAweDgwMAorI2RlZmluZSBNVF9TVF9TWVNWICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgTVRfU1RfTk9XQUlUICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIE1UX1NUX1NJTEkJCTB4NDAwMAorCisvKiBUaGUgbW9kZSBwYXJhbWV0ZXJzIHRvIGJlIGNvbnRyb2xsZWQuIFBhcmFtZXRlciBjaG9zZW4gd2l0aCBiaXRzIDIwLTI4ICovCisjZGVmaW5lIE1UX1NUX0NMRUFSX0RFRkFVTFQJMHhmZmZmZgorI2RlZmluZSBNVF9TVF9ERUZfREVOU0lUWQkoTVRfU1RfREVGX09QVElPTlMgfCAweDEwMDAwMCkKKyNkZWZpbmUgTVRfU1RfREVGX0NPTVBSRVNTSU9OCShNVF9TVF9ERUZfT1BUSU9OUyB8IDB4MjAwMDAwKQorI2RlZmluZSBNVF9TVF9ERUZfRFJWQlVGRkVSCShNVF9TVF9ERUZfT1BUSU9OUyB8IDB4MzAwMDAwKQorCisvKiBUaGUgb2Zmc2V0IGZvciB0aGUgYXJndW1lbnRzIGZvciB0aGUgc3BlY2lhbCBIUCBjaGFuZ2VyIGxvYWQgY29tbWFuZC4gKi8KKyNkZWZpbmUgTVRfU1RfSFBMT0FERVJfT0ZGU0VUIDEwMDAwCisKKyNlbmRpZiAvKiBfTElOVVhfTVRJT19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbl9yMzk2NC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25fcjM5NjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWI1NDUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25fcjM5NjQuaApAQCAtMCwwICsxLDk4IEBACisvKiByMzk2NCBsaW5lZGlzY2lwbGluZSBmb3IgbGludXgKKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29weXJpZ2h0IGJ5CisgKiBQaGlsaXBzIEF1dG9tYXRpb24gUHJvamVjdHMKKyAqIEthc3NlbCAoR2VybWFueSkKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICoKKyAqIEF1dGhvcjoKKyAqIEwuIEhhYWcKKyAqCisgKiAkTG9nOiByMzk2NC5oLHYgJAorICogUmV2aXNpb24gMS40ICAyMDA1LzEyLzIxIDE5OjU0OjI0ICBLdXJ0IEh1d2lnIDxrdXJ0IGh1d2lnIGRlPgorICogRml4ZWQgSFogdXNhZ2Ugb24gMi42IGtlcm5lbHMKKyAqIFJlbW92ZWQgdW5uZWNlc3NhcnkgaW5jbHVkZQorICoKKyAqIFJldmlzaW9uIDEuMyAgMjAwMS8wMy8xOCAxMzowMjoyNCAgZHdtdzIKKyAqIEZpeCB0aW1lciB1c2FnZSwgdXNlIHNwaW5sb2NrcyBwcm9wZXJseS4KKyAqCisgKiBSZXZpc2lvbiAxLjIgIDIwMDEvMDMvMTggMTI6NTM6MTUgIGR3bXcyCisgKiBNZXJnZSBjaGFuZ2VzIGluIDIuNC4yCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OC8xMC8xMyAxNjo0MzoxNCAgZHdtdzIKKyAqIFRoaXMnbGwgc2NyZXcgdGhlIHZlcnNpb24gY29udHJvbAorICoKKyAqIFJldmlzaW9uIDEuNiAgMTk5OC8wOS8zMCAwMDo0MDozOCAgZHdtdzIKKyAqIFVwZGF0ZWQgdG8gdXNlIGtlcm5lbCdzIE5fUjM5NjQgaWYgYXZhaWxhYmxlCisgKgorICogUmV2aXNpb24gMS40ICAxOTk4LzA0LzAyIDIwOjI5OjQ0ICBsaGFhZworICogc2VsZWN0LCBibG9ja2luZywgLi4uCisgKgorICogUmV2aXNpb24gMS4zICAxOTk4LzAyLzEyIDE4OjU4OjQzICByb290CisgKiBmaXhlZCBzb21lIG1lbW9yeSBsZWFrcworICogY2FsY3VsYXRpb24gb2YgY2hlY2tzdW0gY2hhcmFjdGVycworICoKKyAqIFJldmlzaW9uIDEuMiAgMTk5OC8wMi8wNyAxMzowMzoxNyAgcm9vdAorICogaW9jdGwgcmVhZF90ZWxlZ3JhbQorICoKKyAqIFJldmlzaW9uIDEuMSAgMTk5OC8wMi8wNiAxOToxOTo0MyAgcm9vdAorICogSW5pdGlhbCByZXZpc2lvbgorICoKKyAqCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX05fUjM5NjRfSF9fCisjZGVmaW5lIF9fTElOVVhfTl9SMzk2NF9IX18KKworLyogbGluZSBkaXNjaXBsaW5lcyBmb3IgcjM5NjQgcHJvdG9jb2wgKi8KKworCisvKgorICogSW9jdGwtY29tbWFuZHMKKyAqLworCisjZGVmaW5lIFIzOTY0X0VOQUJMRV9TSUdOQUxTICAgICAgMHg1MzAxCisjZGVmaW5lIFIzOTY0X1NFVFBSSU9SSVRZICAgICAgICAgMHg1MzAyCisjZGVmaW5lIFIzOTY0X1VTRV9CQ0MgICAgICAgICAgICAgMHg1MzAzCisjZGVmaW5lIFIzOTY0X1JFQURfVEVMRUdSQU0gICAgICAgMHg1MzA0CisKKy8qIE9wdGlvbnMgZm9yIFIzOTY0X1NFVFBSSU9SSVRZICovCisjZGVmaW5lIFIzOTY0X01BU1RFUiAgIDAKKyNkZWZpbmUgUjM5NjRfU0xBVkUgICAgMQorCisvKiBPcHRpb25zIGZvciBSMzk2NF9FTkFCTEVfU0lHTkFMUyAqLworI2RlZmluZSBSMzk2NF9TSUdfQUNLICAgMHgwMDAxCisjZGVmaW5lIFIzOTY0X1NJR19EQVRBICAweDAwMDIKKyNkZWZpbmUgUjM5NjRfU0lHX0FMTCAgIDB4MDAwZgorI2RlZmluZSBSMzk2NF9TSUdfTk9ORSAgMHgwMDAwCisjZGVmaW5lIFIzOTY0X1VTRV9TSUdJTyAweDEwMDAKKworLyoKKyAqIHIzOTY0IG9wZXJhdGlvbiBzdGF0ZXM6CisgKi8KKworLyogdHlwZXMgZm9yIG1zZ19pZDogKi8KK2VudW0ge1IzOTY0X01TR19BQ0s9MSwgUjM5NjRfTVNHX0RBVEEgfTsKKworI2RlZmluZSBSMzk2NF9NQVhfTVNHX0NPVU5UIDMyCisKKy8qIGVycm9yIGNvZGVzIGZvciBjbGllbnQgbWVzc2FnZXMgKi8KKyNkZWZpbmUgUjM5NjRfT0sgMCAgICAgICAgLyogbm8gZXJyb3IuICovCisjZGVmaW5lIFIzOTY0X1RYX0ZBSUwgLTEgIC8qIHRyYW5zbWlzc2lvbiBlcnJvciwgYmxvY2sgTk9UIHNlbnQgKi8KKyNkZWZpbmUgUjM5NjRfT1ZFUkZMT1cgLTIgLyogbXNnIHF1ZXVlIG92ZXJmbG93ICovCisKKy8qIHRoZSBjbGllbnQgZ2V0cyB0aGlzIHN0cnVjdCB3aGVuIGNhbGxpbmcgcmVhZChmZCwuLi4pOiAqLworc3RydWN0IHIzOTY0X2NsaWVudF9tZXNzYWdlIHsKKwkgIGludCAgICAgbXNnX2lkOworCSAgaW50ICAgICBhcmc7CisJICBpbnQgICAgIGVycm9yX2NvZGU7Cit9OworCisjZGVmaW5lIFIzOTY0X01UVSAgICAgIDI1NgorCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmJkLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmJkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRkMjk4OQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uYmQuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogMTk5OSBDb3B5cmlnaHQgKEMpIFBhdmVsIE1hY2hlaywgcGF2ZWxAdWN3LmN6LiBUaGlzIGNvZGUgaXMgR1BMLgorICogMTk5OS8xMS8wNCBDb3B5cmlnaHQgKEMpIDE5OTkgVk13YXJlLCBJbmMuIChSZWdpcyAiSFBSZWciIER1Y2hlc25lKQorICogICAgICAgICAgICBNYWRlIG5iZF9lbmRfcmVxdWVzdCgpIHVzZSB0aGUgaW9fcmVxdWVzdF9sb2NrCisgKiAyMDAxIENvcHlyaWdodCAoQykgU3RldmVuIFdoaXRlaG91c2UKKyAqICAgICAgICAgICAgTmV3IG5iZF9lbmRfcmVxdWVzdCgpIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbmV3IGxpbnV4IGJsb2NrCisgKiAgICAgICAgICAgIGxheWVyIGNvZGUuCisgKiAyMDAzLzA2LzI0IExvdWlzIEQuIExhbmdob2x0eiA8bGRsQGFyb3MubmV0PgorICogICAgICAgICAgICBSZW1vdmVkIHVubmVlZGVkIGJsa3NpemVfYml0cyBmaWVsZCBmcm9tIG5iZF9kZXZpY2Ugc3RydWN0LgorICogICAgICAgICAgICBDbGVhbnVwIFBBUkFOT0lBIHVzYWdlICYgY29kZS4KKyAqIDIwMDQvMDIvMTkgUGF1bCBDbGVtZW50cworICogICAgICAgICAgICBSZW1vdmVkIFBBUkFOT0lBLCBwbHVzIHZhcmlvdXMgY2xlYW51cCBhbmQgY29tbWVudHMKKyAqLworCisjaWZuZGVmIExJTlVYX05CRF9ICisjZGVmaW5lIExJTlVYX05CRF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIE5CRF9TRVRfU09DSwlfSU8oIDB4YWIsIDAgKQorI2RlZmluZSBOQkRfU0VUX0JMS1NJWkUJX0lPKCAweGFiLCAxICkKKyNkZWZpbmUgTkJEX1NFVF9TSVpFCV9JTyggMHhhYiwgMiApCisjZGVmaW5lIE5CRF9ET19JVAlfSU8oIDB4YWIsIDMgKQorI2RlZmluZSBOQkRfQ0xFQVJfU09DSwlfSU8oIDB4YWIsIDQgKQorI2RlZmluZSBOQkRfQ0xFQVJfUVVFCV9JTyggMHhhYiwgNSApCisjZGVmaW5lIE5CRF9QUklOVF9ERUJVRwlfSU8oIDB4YWIsIDYgKQorI2RlZmluZSBOQkRfU0VUX1NJWkVfQkxPQ0tTCV9JTyggMHhhYiwgNyApCisjZGVmaW5lIE5CRF9ESVNDT05ORUNUICBfSU8oIDB4YWIsIDggKQorI2RlZmluZSBOQkRfU0VUX1RJTUVPVVQgX0lPKCAweGFiLCA5ICkKKworZW51bSB7CisJTkJEX0NNRF9SRUFEID0gMCwKKwlOQkRfQ01EX1dSSVRFID0gMSwKKwlOQkRfQ01EX0RJU0MgPSAyCit9OworCisjZGVmaW5lIG5iZF9jbWQocmVxKSAoKHJlcSktPmNtZFswXSkKKworLyogdXNlcnNwYWNlIGRvZXNuJ3QgbmVlZCB0aGUgbmJkX2RldmljZSBzdHJ1Y3R1cmUgKi8KKworLyogVGhlc2UgYXJlIHNlbnQgb3ZlciB0aGUgbmV0d29yayBpbiB0aGUgcmVxdWVzdC9yZXBseSBtYWdpYyBmaWVsZHMgKi8KKworI2RlZmluZSBOQkRfUkVRVUVTVF9NQUdJQyAweDI1NjA5NTEzCisjZGVmaW5lIE5CRF9SRVBMWV9NQUdJQyAweDY3NDQ2Njk4CisvKiBEbyAqbm90KiB1c2UgbWFnaWNzOiAweDEyNTYwOTUzIDB4OTY3NDQ2NjguICovCisKKy8qCisgKiBUaGlzIGlzIHRoZSBwYWNrZXQgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIGNsaWVudCBhbmQKKyAqIHNlcnZlci4gQWxsIGRhdGEgYXJlIGluIG5ldHdvcmsgYnl0ZSBvcmRlci4KKyAqLworc3RydWN0IG5iZF9yZXF1ZXN0IHsKKwlfX2JlMzIgbWFnaWM7CisJX19iZTMyIHR5cGU7CS8qID09IFJFQUQgfHwgPT0gV1JJVEUgCSovCisJY2hhciBoYW5kbGVbOF07CisJX19iZTY0IGZyb207CisJX19iZTMyIGxlbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qCisgKiBUaGlzIGlzIHRoZSByZXBseSBwYWNrZXQgdGhhdCBuYmQtc2VydmVyIHNlbmRzIGJhY2sgdG8gdGhlIGNsaWVudCBhZnRlcgorICogaXQgaGFzIGNvbXBsZXRlZCBhbiBJL08gcmVxdWVzdCAob3IgYW4gZXJyb3Igb2NjdXJzKS4KKyAqLworc3RydWN0IG5iZF9yZXBseSB7CisJX19iZTMyIG1hZ2ljOworCV9fYmUzMiBlcnJvcjsJCS8qIDAgPSBvaywgZWxzZSBlcnJvcgkqLworCWNoYXIgaGFuZGxlWzhdOwkJLyogaGFuZGxlIHlvdSBnb3QgZnJvbSByZXF1ZXN0CSovCit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmNwLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ4MmFkNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uY3AuaApAQCAtMCwwICsxLDE5OCBAQAorLyoKKyAqICBuY3AuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUgYnkgVm9sa2VyIExlbmRlY2tlCisgKiAgTW9kaWZpZWQgZm9yIHNwYXJjIGJ5IEouRi4gQ2hhZGltYQorICogIE1vZGlmaWVkIGZvciBfX2NvbnN0YW50X250b2ggYnkgRnJhbmsgQS4gVm9yc3RlbmJvc2NoCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX05DUF9ICisjZGVmaW5lIF9MSU5VWF9OQ1BfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBOQ1BfUFRZUEUgICAgICAgICAgICAgICAgKDB4MTEpCisjZGVmaW5lIE5DUF9QT1JUICAgICAgICAgICAgICAgICAoMHgwNDUxKQorCisjZGVmaW5lIE5DUF9BTExPQ19TTE9UX1JFUVVFU1QgICAoMHgxMTExKQorI2RlZmluZSBOQ1BfUkVRVUVTVCAgICAgICAgICAgICAgKDB4MjIyMikKKyNkZWZpbmUgTkNQX0RFQUxMT0NfU0xPVF9SRVFVRVNUICgweDU1NTUpCisKK3N0cnVjdCBuY3BfcmVxdWVzdF9oZWFkZXIgeworCV9fdTE2IHR5cGU7CisJX191OCBzZXF1ZW5jZTsKKwlfX3U4IGNvbm5fbG93OworCV9fdTggdGFzazsKKwlfX3U4IGNvbm5faGlnaDsKKwlfX3U4IGZ1bmN0aW9uOworCV9fdTggZGF0YVswXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgTkNQX1JFUExZICAgICAgICAgICAgICAgICgweDMzMzMpCisjZGVmaW5lIE5DUF9XQVRDSERPRwkJICgweDNFM0UpCisjZGVmaW5lIE5DUF9QT1NJVElWRV9BQ0sgICAgICAgICAoMHg5OTk5KQorCitzdHJ1Y3QgbmNwX3JlcGx5X2hlYWRlciB7CisJX191MTYgdHlwZTsKKwlfX3U4IHNlcXVlbmNlOworCV9fdTggY29ubl9sb3c7CisJX191OCB0YXNrOworCV9fdTggY29ubl9oaWdoOworCV9fdTggY29tcGxldGlvbl9jb2RlOworCV9fdTggY29ubmVjdGlvbl9zdGF0ZTsKKwlfX3U4IGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIE5DUF9WT0xOQU1FX0xFTiAoMTYpCisjZGVmaW5lIE5DUF9OVU1CRVJfT0ZfVk9MVU1FUyAoMjU2KQorc3RydWN0IG5jcF92b2x1bWVfaW5mbyB7CisJX191MzIgdG90YWxfYmxvY2tzOworCV9fdTMyIGZyZWVfYmxvY2tzOworCV9fdTMyIHB1cmdlYWJsZV9ibG9ja3M7CisJX191MzIgbm90X3lldF9wdXJnZWFibGVfYmxvY2tzOworCV9fdTMyIHRvdGFsX2Rpcl9lbnRyaWVzOworCV9fdTMyIGF2YWlsYWJsZV9kaXJfZW50cmllczsKKwlfX3U4IHNlY3RvcnNfcGVyX2Jsb2NrOworCWNoYXIgdm9sdW1lX25hbWVbTkNQX1ZPTE5BTUVfTEVOICsgMV07Cit9OworCisjZGVmaW5lIEFSX1JFQUQgICAgICAoY3B1X3RvX2xlMTYoMSkpCisjZGVmaW5lIEFSX1dSSVRFICAgICAoY3B1X3RvX2xlMTYoMikpCisjZGVmaW5lIEFSX0VYQ0xVU0lWRSAoY3B1X3RvX2xlMTYoMHgyMCkpCisKKyNkZWZpbmUgTkNQX0ZJTEVfSURfTEVOIDYKKworLyogRGVmaW5lcyBmb3IgTmFtZSBTcGFjZXMgKi8KKyNkZWZpbmUgTldfTlNfRE9TICAgICAwCisjZGVmaW5lIE5XX05TX01BQyAgICAgMQorI2RlZmluZSBOV19OU19ORlMgICAgIDIKKyNkZWZpbmUgTldfTlNfRlRBTSAgICAzCisjZGVmaW5lIE5XX05TX09TMiAgICAgNAorCisvKiAgRGVmaW5lcyBmb3IgUmV0dXJuSW5mb3JtYXRpb25NYXNrICovCisjZGVmaW5lIFJJTV9OQU1FCSAgICAgIChjcHVfdG9fbGUzMigxKSkKKyNkZWZpbmUgUklNX1NQQUNFX0FMTE9DQVRFRCAgIChjcHVfdG9fbGUzMigyKSkKKyNkZWZpbmUgUklNX0FUVFJJQlVURVMJICAgICAgKGNwdV90b19sZTMyKDQpKQorI2RlZmluZSBSSU1fREFUQV9TSVpFCSAgICAgIChjcHVfdG9fbGUzMig4KSkKKyNkZWZpbmUgUklNX1RPVEFMX1NJWkUJICAgICAgKGNwdV90b19sZTMyKDB4MTApKQorI2RlZmluZSBSSU1fRVhUX0FUVFJfSU5GTyAgICAgKGNwdV90b19sZTMyKDB4MjApKQorI2RlZmluZSBSSU1fQVJDSElWRQkgICAgICAoY3B1X3RvX2xlMzIoMHg0MCkpCisjZGVmaW5lIFJJTV9NT0RJRlkJICAgICAgKGNwdV90b19sZTMyKDB4ODApKQorI2RlZmluZSBSSU1fQ1JFQVRJT04JICAgICAgKGNwdV90b19sZTMyKDB4MTAwKSkKKyNkZWZpbmUgUklNX09XTklOR19OQU1FU1BBQ0UgIChjcHVfdG9fbGUzMigweDIwMCkpCisjZGVmaW5lIFJJTV9ESVJFQ1RPUlkJICAgICAgKGNwdV90b19sZTMyKDB4NDAwKSkKKyNkZWZpbmUgUklNX1JJR0hUUwkgICAgICAoY3B1X3RvX2xlMzIoMHg4MDApKQorI2RlZmluZSBSSU1fQUxMIAkgICAgICAoY3B1X3RvX2xlMzIoMHhGRkYpKQorI2RlZmluZSBSSU1fQ09NUFJFU1NFRF9JTkZPICAgKGNwdV90b19sZTMyKDB4ODAwMDAwMDApKQorCisvKiBEZWZpbmVzIGZvciBOU0luZm9CaXRNYXNrICovCisjZGVmaW5lIE5TSUJNX05GU19OQU1FCQkweDAwMDEKKyNkZWZpbmUgTlNJQk1fTkZTX01PREUJCTB4MDAwMgorI2RlZmluZSBOU0lCTV9ORlNfR0lECQkweDAwMDQKKyNkZWZpbmUgTlNJQk1fTkZTX05MSU5LUwkweDAwMDgKKyNkZWZpbmUgTlNJQk1fTkZTX1JERVYJCTB4MDAxMAorI2RlZmluZSBOU0lCTV9ORlNfTElOSwkJMHgwMDIwCisjZGVmaW5lIE5TSUJNX05GU19DUkVBVEVECTB4MDA0MAorI2RlZmluZSBOU0lCTV9ORlNfVUlECQkweDAwODAKKyNkZWZpbmUgTlNJQk1fTkZTX0FDU0ZMQUcJMHgwMTAwCisjZGVmaW5lIE5TSUJNX05GU19NWUZMQUcJMHgwMjAwCisKKy8qIG9wZW4vY3JlYXRlIG1vZGVzICovCisjZGVmaW5lIE9DX01PREVfT1BFTgkgIDB4MDEKKyNkZWZpbmUgT0NfTU9ERV9UUlVOQ0FURSAgMHgwMgorI2RlZmluZSBPQ19NT0RFX1JFUExBQ0UgICAweDAyCisjZGVmaW5lIE9DX01PREVfQ1JFQVRFCSAgMHgwOAorCisvKiBvcGVuL2NyZWF0ZSByZXN1bHRzICovCisjZGVmaW5lIE9DX0FDVElPTl9OT05FCSAgIDB4MDAKKyNkZWZpbmUgT0NfQUNUSU9OX09QRU4JICAgMHgwMQorI2RlZmluZSBPQ19BQ1RJT05fQ1JFQVRFICAgMHgwMgorI2RlZmluZSBPQ19BQ1RJT05fVFJVTkNBVEUgMHgwNAorI2RlZmluZSBPQ19BQ1RJT05fUkVQTEFDRSAgMHgwNAorCisvKiBhY2Nlc3MgcmlnaHRzIGF0dHJpYnV0ZXMgKi8KKyNpZm5kZWYgQVJfUkVBRF9PTkxZCisjZGVmaW5lIEFSX1JFQURfT05MWQkgICAweDAwMDEKKyNkZWZpbmUgQVJfV1JJVEVfT05MWQkgICAweDAwMDIKKyNkZWZpbmUgQVJfREVOWV9SRUFECSAgIDB4MDAwNAorI2RlZmluZSBBUl9ERU5ZX1dSSVRFCSAgIDB4MDAwOAorI2RlZmluZSBBUl9DT01QQVRJQklMSVRZICAgMHgwMDEwCisjZGVmaW5lIEFSX1dSSVRFX1RIUk9VR0ggICAweDAwNDAKKyNkZWZpbmUgQVJfT1BFTl9DT01QUkVTU0VEIDB4MDEwMAorI2VuZGlmCisKK3N0cnVjdCBud19uZnNfaW5mbyB7CisJX191MzIgbW9kZTsKKwlfX3UzMiByZGV2OworfTsKKworc3RydWN0IG53X2luZm9fc3RydWN0IHsKKwlfX3UzMiBzcGFjZUFsbG9jOworCV9fbGUzMiBhdHRyaWJ1dGVzOworCV9fdTE2IGZsYWdzOworCV9fbGUzMiBkYXRhU3RyZWFtU2l6ZTsKKwlfX2xlMzIgdG90YWxTdHJlYW1TaXplOworCV9fdTE2IG51bWJlck9mU3RyZWFtczsKKwlfX2xlMTYgY3JlYXRpb25UaW1lOworCV9fbGUxNiBjcmVhdGlvbkRhdGU7CisJX191MzIgY3JlYXRvcklEOworCV9fbGUxNiBtb2RpZnlUaW1lOworCV9fbGUxNiBtb2RpZnlEYXRlOworCV9fdTMyIG1vZGlmaWVySUQ7CisJX19sZTE2IGxhc3RBY2Nlc3NEYXRlOworCV9fdTE2IGFyY2hpdmVUaW1lOworCV9fdTE2IGFyY2hpdmVEYXRlOworCV9fdTMyIGFyY2hpdmVySUQ7CisJX191MTYgaW5oZXJpdGVkUmlnaHRzTWFzazsKKwlfX2xlMzIgZGlyRW50TnVtOworCV9fbGUzMiBEb3NEaXJOdW07CisJX191MzIgdm9sTnVtYmVyOworCV9fdTMyIEVBRGF0YVNpemU7CisJX191MzIgRUFLZXlDb3VudDsKKwlfX3UzMiBFQUtleVNpemU7CisJX191MzIgTlNDcmVhdG9yOworCV9fdTggbmFtZUxlbjsKKwlfX3U4IGVudHJ5TmFtZVsyNTZdOworCS8qIGxpYm5jcCBtYXkgZGVwZW5kIG9uIHRoZXJlIGJlaW5nIG5vdGhpbmcgYWZ0ZXIgZW50cnlOYW1lICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBtb2RpZnkgbWFzayAtIHVzZSB3aXRoIE1PRElGWV9ET1NfSU5GTyBzdHJ1Y3R1cmUgKi8KKyNkZWZpbmUgRE1fQVRUUklCVVRFUwkJICAoY3B1X3RvX2xlMzIoMHgwMikpCisjZGVmaW5lIERNX0NSRUFURV9EQVRFCQkgIChjcHVfdG9fbGUzMigweDA0KSkKKyNkZWZpbmUgRE1fQ1JFQVRFX1RJTUUJCSAgKGNwdV90b19sZTMyKDB4MDgpKQorI2RlZmluZSBETV9DUkVBVE9SX0lECQkgIChjcHVfdG9fbGUzMigweDEwKSkKKyNkZWZpbmUgRE1fQVJDSElWRV9EQVRFIAkgIChjcHVfdG9fbGUzMigweDIwKSkKKyNkZWZpbmUgRE1fQVJDSElWRV9USU1FIAkgIChjcHVfdG9fbGUzMigweDQwKSkKKyNkZWZpbmUgRE1fQVJDSElWRVJfSUQJCSAgKGNwdV90b19sZTMyKDB4ODApKQorI2RlZmluZSBETV9NT0RJRllfREFURQkJICAoY3B1X3RvX2xlMzIoMHgwMTAwKSkKKyNkZWZpbmUgRE1fTU9ESUZZX1RJTUUJCSAgKGNwdV90b19sZTMyKDB4MDIwMCkpCisjZGVmaW5lIERNX01PRElGSUVSX0lECQkgIChjcHVfdG9fbGUzMigweDA0MDApKQorI2RlZmluZSBETV9MQVNUX0FDQ0VTU19EQVRFCSAgKGNwdV90b19sZTMyKDB4MDgwMCkpCisjZGVmaW5lIERNX0lOSEVSSVRFRF9SSUdIVFNfTUFTSyAgKGNwdV90b19sZTMyKDB4MTAwMCkpCisjZGVmaW5lIERNX01BWElNVU1fU1BBQ0UJICAoY3B1X3RvX2xlMzIoMHgyMDAwKSkKKworc3RydWN0IG53X21vZGlmeV9kb3NfaW5mbyB7CisJX19sZTMyIGF0dHJpYnV0ZXM7CisJX19sZTE2IGNyZWF0aW9uRGF0ZTsKKwlfX2xlMTYgY3JlYXRpb25UaW1lOworCV9fdTMyIGNyZWF0b3JJRDsKKwlfX2xlMTYgbW9kaWZ5RGF0ZTsKKwlfX2xlMTYgbW9kaWZ5VGltZTsKKwlfX3UzMiBtb2RpZmllcklEOworCV9fdTE2IGFyY2hpdmVEYXRlOworCV9fdTE2IGFyY2hpdmVUaW1lOworCV9fdTMyIGFyY2hpdmVySUQ7CisJX19sZTE2IGxhc3RBY2Nlc3NEYXRlOworCV9fdTE2IGluaGVyaXRhbmNlR3JhbnRNYXNrOworCV9fdTE2IGluaGVyaXRhbmNlUmV2b2tlTWFzazsKKwlfX3UzMiBtYXhpbXVtU3BhY2U7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgbndfc2VhcmNoX3NlcXVlbmNlIHsKKwlfX3U4IHZvbE51bWJlcjsKKwlfX3UzMiBkaXJCYXNlOworCV9fdTMyIHNlcXVlbmNlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2VuZGlmCQkJCS8qIF9MSU5VWF9OQ1BfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25jcF9mcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25jcF9mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NDIwNDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmNwX2ZzLmgKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiAgbmNwX2ZzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2IGJ5IFZvbGtlciBMZW5kZWNrZQorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9OQ1BfRlNfSAorI2RlZmluZSBfTElOVVhfTkNQX0ZTX0gKKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pcHguaD4KKyNpbmNsdWRlIDxsaW51eC9uY3Bfbm8uaD4KKworLyoKKyAqIGlvY3RsIGNvbW1hbmRzCisgKi8KKworc3RydWN0IG5jcF9pb2N0bF9yZXF1ZXN0IHsKKwl1bnNpZ25lZCBpbnQgZnVuY3Rpb247CisJdW5zaWduZWQgaW50IHNpemU7CisJY2hhciAqZGF0YTsKK307CisKK3N0cnVjdCBuY3BfZnNfaW5mbyB7CisJaW50IHZlcnNpb247CisJc3RydWN0IHNvY2thZGRyX2lweCBhZGRyOworCV9fa2VybmVsX3VpZF90IG1vdW50ZWRfdWlkOworCWludCBjb25uZWN0aW9uOwkJLyogQ29ubmVjdGlvbiBudW1iZXIgdGhlIHNlcnZlciBhc3NpZ25lZCB1cyAqLworCWludCBidWZmZXJfc2l6ZTsJLyogVGhlIG5lZ290aWF0ZWQgYnVmZmVyIHNpemUsIHRvIGJlCisJCQkJICAgdXNlZCBmb3IgcmVhZC93cml0ZSByZXF1ZXN0cyEgKi8KKworCWludCB2b2x1bWVfbnVtYmVyOworCV9fbGUzMiBkaXJlY3RvcnlfaWQ7Cit9OworCitzdHJ1Y3QgbmNwX2ZzX2luZm9fdjIgeworCWludCB2ZXJzaW9uOworCXVuc2lnbmVkIGxvbmcgbW91bnRlZF91aWQ7CisJdW5zaWduZWQgaW50IGNvbm5lY3Rpb247CisJdW5zaWduZWQgaW50IGJ1ZmZlcl9zaXplOworCisJdW5zaWduZWQgaW50IHZvbHVtZV9udW1iZXI7CisJX19sZTMyIGRpcmVjdG9yeV9pZDsKKworCV9fdTMyIGR1bW15MTsKKwlfX3UzMiBkdW1teTI7CisJX191MzIgZHVtbXkzOworfTsKKworc3RydWN0IG5jcF9zaWduX2luaXQKK3sKKwljaGFyIHNpZ25fcm9vdFs4XTsKKwljaGFyIHNpZ25fbGFzdFsxNl07Cit9OworCitzdHJ1Y3QgbmNwX2xvY2tfaW9jdGwKK3sKKyNkZWZpbmUgTkNQX0xPQ0tfTE9HCTAKKyNkZWZpbmUgTkNQX0xPQ0tfU0gJMQorI2RlZmluZSBOQ1BfTE9DS19FWAkyCisjZGVmaW5lIE5DUF9MT0NLX0NMRUFSCTI1NgorCWludAkJY21kOworCWludAkJb3JpZ2luOworCXVuc2lnbmVkIGludAlvZmZzZXQ7CisJdW5zaWduZWQgaW50CWxlbmd0aDsKKyNkZWZpbmUgTkNQX0xPQ0tfREVGQVVMVF9USU1FT1VUCTE4CisjZGVmaW5lIE5DUF9MT0NLX01BWF9USU1FT1VUCQkxODAKKwlpbnQJCXRpbWVvdXQ7Cit9OworCitzdHJ1Y3QgbmNwX3NldHJvb3RfaW9jdGwKK3sKKwlpbnQJCXZvbE51bWJlcjsKKwlpbnQJCW5hbWVzcGFjZTsKKwlfX2xlMzIJCWRpckVudE51bTsKK307CisKK3N0cnVjdCBuY3Bfb2JqZWN0bmFtZV9pb2N0bAoreworI2RlZmluZSBOQ1BfQVVUSF9OT05FCTB4MDAKKyNkZWZpbmUgTkNQX0FVVEhfQklORAkweDMxCisjZGVmaW5lIE5DUF9BVVRIX05EUwkweDMyCisJaW50CQlhdXRoX3R5cGU7CisJc2l6ZV90CQlvYmplY3RfbmFtZV9sZW47CisJdm9pZCAqCW9iamVjdF9uYW1lOwkvKiBhIHVzZXJzcGFjZSBkYXRhLCBpbiBtb3N0IGNhc2VzIHVzZXIgbmFtZSAqLworfTsKKworc3RydWN0IG5jcF9wcml2YXRlZGF0YV9pb2N0bAoreworCXNpemVfdAkJbGVuOworCXZvaWQgKglkYXRhOwkJLyogfjEwMDAgZm9yIE5EUyAqLworfTsKKworLyogTkxTIGNoYXJzZXRzIGJ5IGlvY3RsICovCisjZGVmaW5lIE5DUF9JT0NTTkFNRV9MRU4gMjAKK3N0cnVjdCBuY3BfbmxzX2lvY3RsCit7CisJdW5zaWduZWQgY2hhciBjb2RlcGFnZVtOQ1BfSU9DU05BTUVfTEVOKzFdOworCXVuc2lnbmVkIGNoYXIgaW9jaGFyc2V0W05DUF9JT0NTTkFNRV9MRU4rMV07Cit9OworCisjZGVmaW5lCU5DUF9JT0NfTkNQUkVRVUVTVAkJX0lPUignbicsIDEsIHN0cnVjdCBuY3BfaW9jdGxfcmVxdWVzdCkKKyNkZWZpbmUJTkNQX0lPQ19HRVRNT1VOVFVJRAkJX0lPVygnbicsIDIsIF9fa2VybmVsX29sZF91aWRfdCkKKyNkZWZpbmUgTkNQX0lPQ19HRVRNT1VOVFVJRDIJCV9JT1coJ24nLCAyLCB1bnNpZ25lZCBsb25nKQorCisjZGVmaW5lIE5DUF9JT0NfQ09OTl9MT0dHRURfSU4gICAgICAgICAgX0lPKCduJywgMykKKworI2RlZmluZSBOQ1BfR0VUX0ZTX0lORk9fVkVSU0lPTiAgICAoMSkKKyNkZWZpbmUgTkNQX0lPQ19HRVRfRlNfSU5GTyAgICAgICAgICAgICBfSU9XUignbicsIDQsIHN0cnVjdCBuY3BfZnNfaW5mbykKKyNkZWZpbmUgTkNQX0dFVF9GU19JTkZPX1ZFUlNJT05fVjIgKDIpCisjZGVmaW5lIE5DUF9JT0NfR0VUX0ZTX0lORk9fVjIJCV9JT1dSKCduJywgNCwgc3RydWN0IG5jcF9mc19pbmZvX3YyKQorCisjZGVmaW5lIE5DUF9JT0NfU0lHTl9JTklUCQlfSU9SKCduJywgNSwgc3RydWN0IG5jcF9zaWduX2luaXQpCisjZGVmaW5lIE5DUF9JT0NfU0lHTl9XQU5URUQJCV9JT1IoJ24nLCA2LCBpbnQpCisjZGVmaW5lIE5DUF9JT0NfU0VUX1NJR05fV0FOVEVECQlfSU9XKCduJywgNiwgaW50KQorCisjZGVmaW5lIE5DUF9JT0NfTE9DS1VOTE9DSwkJX0lPUignbicsIDcsIHN0cnVjdCBuY3BfbG9ja19pb2N0bCkKKworI2RlZmluZSBOQ1BfSU9DX0dFVFJPT1QJCQlfSU9XKCduJywgOCwgc3RydWN0IG5jcF9zZXRyb290X2lvY3RsKQorI2RlZmluZSBOQ1BfSU9DX1NFVFJPT1QJCQlfSU9SKCduJywgOCwgc3RydWN0IG5jcF9zZXRyb290X2lvY3RsKQorCisjZGVmaW5lIE5DUF9JT0NfR0VUT0JKRUNUTkFNRQkJX0lPV1IoJ24nLCA5LCBzdHJ1Y3QgbmNwX29iamVjdG5hbWVfaW9jdGwpCisjZGVmaW5lIE5DUF9JT0NfU0VUT0JKRUNUTkFNRQkJX0lPUignbicsIDksIHN0cnVjdCBuY3Bfb2JqZWN0bmFtZV9pb2N0bCkKKyNkZWZpbmUgTkNQX0lPQ19HRVRQUklWQVRFREFUQQkJX0lPV1IoJ24nLCAxMCwgc3RydWN0IG5jcF9wcml2YXRlZGF0YV9pb2N0bCkKKyNkZWZpbmUgTkNQX0lPQ19TRVRQUklWQVRFREFUQQkJX0lPUignbicsIDEwLCBzdHJ1Y3QgbmNwX3ByaXZhdGVkYXRhX2lvY3RsKQorCisjZGVmaW5lIE5DUF9JT0NfR0VUQ0hBUlNFVFMJCV9JT1dSKCduJywgMTEsIHN0cnVjdCBuY3BfbmxzX2lvY3RsKQorI2RlZmluZSBOQ1BfSU9DX1NFVENIQVJTRVRTCQlfSU9SKCduJywgMTEsIHN0cnVjdCBuY3BfbmxzX2lvY3RsKQorCisjZGVmaW5lIE5DUF9JT0NfR0VUREVOVFJZVFRMCQlfSU9XKCduJywgMTIsIF9fdTMyKQorI2RlZmluZSBOQ1BfSU9DX1NFVERFTlRSWVRUTAkJX0lPUignbicsIDEyLCBfX3UzMikKKworLyoKKyAqIFRoZSBwYWNrZXQgc2l6ZSB0byBhbGxvY2F0ZS4gT25lIHBhZ2Ugc2hvdWxkIGJlIGVub3VnaC4KKyAqLworI2RlZmluZSBOQ1BfUEFDS0VUX1NJWkUgNDA3MAorCisjZGVmaW5lIE5DUF9NQVhQQVRITEVOIDI1NQorI2RlZmluZSBOQ1BfTUFYTkFNRUxFTiAxNAorCisKKyNlbmRpZgkJCQkvKiBfTElOVVhfTkNQX0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uY3BfbW91bnQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uY3BfbW91bnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmU0YTJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25jcF9tb3VudC5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiAgbmNwX21vdW50LmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2IGJ5IFZvbGtlciBMZW5kZWNrZQorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9OQ1BfTU9VTlRfSAorI2RlZmluZSBfTElOVVhfTkNQX01PVU5UX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmNwLmg+CisKKyNkZWZpbmUgTkNQX01PVU5UX1ZFUlNJT04gMwkvKiBCaW5hcnkgKi8KKworLyogVmFsdWVzIGZvciBmbGFncyAqLworI2RlZmluZSBOQ1BfTU9VTlRfU09GVAkJMHgwMDAxCisjZGVmaW5lIE5DUF9NT1VOVF9JTlRSCQkweDAwMDIKKyNkZWZpbmUgTkNQX01PVU5UX1NUUk9ORwkweDAwMDQJLyogZW5hYmxlIGRlbGV0ZS9yZW5hbWUgb2Ygci9vIGZpbGVzICovCisjZGVmaW5lIE5DUF9NT1VOVF9OT19PUzIJMHgwMDA4CS8qIGRvIG5vdCB1c2UgT1MvMiAoTE9ORykgbmFtZXNwYWNlICovCisjZGVmaW5lIE5DUF9NT1VOVF9OT19ORlMJMHgwMDEwCS8qIGRvIG5vdCB1c2UgTkZTIG5hbWVzcGFjZSAqLworI2RlZmluZSBOQ1BfTU9VTlRfRVhUUkFTCTB4MDAyMAorI2RlZmluZSBOQ1BfTU9VTlRfU1lNTElOS1MJMHgwMDQwCS8qIGVuYWJsZSBzeW1saW5rcyAqLworI2RlZmluZSBOQ1BfTU9VTlRfTkZTX0VYVFJBUwkweDAwODAJLyogRW5hYmxlIHVzZSBvZiBORlMgTlMgbWV0YS1pbmZvICovCisKK3N0cnVjdCBuY3BfbW91bnRfZGF0YSB7CisJaW50IHZlcnNpb247CisJdW5zaWduZWQgaW50IG5jcF9mZDsJLyogVGhlIHNvY2tldCB0byB0aGUgbmNwIHBvcnQgKi8KKwlfX2tlcm5lbF91aWRfdCBtb3VudGVkX3VpZDsJLyogV2hvIG1heSB1bW91bnQoKSB0aGlzIGZpbGVzeXN0ZW0/ICovCisJX19rZXJuZWxfcGlkX3Qgd2RvZ19waWQ7CQkvKiBXaG8gY2FyZXMgZm9yIG91ciB3YXRjaGRvZyBwYWNrZXRzPyAqLworCisJdW5zaWduZWQgY2hhciBtb3VudGVkX3ZvbFtOQ1BfVk9MTkFNRV9MRU4gKyAxXTsKKwl1bnNpZ25lZCBpbnQgdGltZV9vdXQ7CS8qIEhvdyBsb25nIHNob3VsZCBJIHdhaXQgYWZ0ZXIKKwkJCQkgICBzZW5kaW5nIGEgTkNQIHJlcXVlc3Q/ICovCisJdW5zaWduZWQgaW50IHJldHJ5X2NvdW50OwkvKiBBbmQgaG93IG9mdGVuIHNob3VsZCBJIHJldHJ5PyAqLworCXVuc2lnbmVkIGludCBmbGFnczsKKworCV9fa2VybmVsX3VpZF90IHVpZDsKKwlfX2tlcm5lbF9naWRfdCBnaWQ7CisJX19rZXJuZWxfbW9kZV90IGZpbGVfbW9kZTsKKwlfX2tlcm5lbF9tb2RlX3QgZGlyX21vZGU7Cit9OworCisjZGVmaW5lIE5DUF9NT1VOVF9WRVJTSU9OX1Y0CSg0KQkvKiBCaW5hcnkgb3IgdGV4dCAqLworCitzdHJ1Y3QgbmNwX21vdW50X2RhdGFfdjQgeworCWludCB2ZXJzaW9uOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CS8qIE5DUF9NT1VOVF8qIGZsYWdzICovCisJLyogTUlQUyB1c2VzIGxvbmcgX19rZXJuZWxfdWlkX3QsIGJ1dC4uLiAqLworCS8qIHdlIG5lZXZlciBwYXNzIC0xLCBzbyBpdCBpcyBzYWZlICovCisJdW5zaWduZWQgbG9uZyBtb3VudGVkX3VpZDsJLyogV2hvIG1heSB1bW91bnQoKSB0aGlzIGZpbGVzeXN0ZW0/ICovCisJLyogTUlQUyB1c2VzIGxvbmcgX19rZXJuZWxfcGlkX3QgKi8KKwlsb25nIHdkb2dfcGlkOwkJLyogV2hvIGNhcmVzIGZvciBvdXIgd2F0Y2hkb2cgcGFja2V0cz8gKi8KKworCXVuc2lnbmVkIGludCBuY3BfZmQ7CS8qIFRoZSBzb2NrZXQgdG8gdGhlIG5jcCBwb3J0ICovCisJdW5zaWduZWQgaW50IHRpbWVfb3V0OwkvKiBIb3cgbG9uZyBzaG91bGQgSSB3YWl0IGFmdGVyCisJCQkJICAgc2VuZGluZyBhIE5DUCByZXF1ZXN0PyAqLworCXVuc2lnbmVkIGludCByZXRyeV9jb3VudDsJLyogQW5kIGhvdyBvZnRlbiBzaG91bGQgSSByZXRyeT8gKi8KKworCS8qIE1JUFMgdXNlcyBsb25nIF9fa2VybmVsX3VpZF90Li4uICovCisJLyogd2UgbmV2ZXIgcGFzcyAtMSwgc28gaXQgaXMgc2FmZSAqLworCXVuc2lnbmVkIGxvbmcgdWlkOworCXVuc2lnbmVkIGxvbmcgZ2lkOworCS8qIE1JUFMgdXNlcyB1bnNpZ25lZCBsb25nIF9fa2VybmVsX21vZGVfdCAqLworCXVuc2lnbmVkIGxvbmcgZmlsZV9tb2RlOworCXVuc2lnbmVkIGxvbmcgZGlyX21vZGU7Cit9OworCisjZGVmaW5lIE5DUF9NT1VOVF9WRVJTSU9OX1Y1CSg1KQkvKiBUZXh0IG9ubHkgKi8KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uY3Bfbm8uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uY3Bfbm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGRhYTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25jcF9uby5oCkBAIC0wLDAgKzEsMTkgQEAKKyNpZm5kZWYgX05DUF9OTworI2RlZmluZSBfTkNQX05PCisKKy8qIHRoZXNlIGRlZmluZSB0aGUgYXR0cmlidXRlIGJ5dGUgYXMgc2VlbiBieSBOQ1AgKi8KKyNkZWZpbmUgYVJPTkxZCQkJKF9fY3B1X3RvX2xlMzIoMSkpCisjZGVmaW5lIGFISURERU4JCQkoX19jcHVfdG9fbGUzMigyKSkKKyNkZWZpbmUgYVNZU1RFTQkJCShfX2NwdV90b19sZTMyKDQpKQorI2RlZmluZSBhRVhFQ1VURQkJKF9fY3B1X3RvX2xlMzIoOCkpCisjZGVmaW5lIGFESVIJCQkoX19jcHVfdG9fbGUzMigweDEwKSkKKyNkZWZpbmUgYUFSQ0gJCQkoX19jcHVfdG9fbGUzMigweDIwKSkKKyNkZWZpbmUgYVNIQVJFRAkJCShfX2NwdV90b19sZTMyKDB4ODApKQorI2RlZmluZSBhRE9OVFNVQkFMTE9DQVRFCShfX2NwdV90b19sZTMyKDFMPDwxMSkpCisjZGVmaW5lIGFUUkFOU0FDVElPTkFMCQkoX19jcHVfdG9fbGUzMigxTDw8MTIpKQorI2RlZmluZSBhUFVSR0UJCQkoX19jcHVfdG9fbGUzMigxTDw8MTYpKQorI2RlZmluZSBhUkVOQU1FSU5ISUJJVAkJKF9fY3B1X3RvX2xlMzIoMUw8PDE3KSkKKyNkZWZpbmUgYURFTEVURUlOSElCSVQJCShfX2NwdV90b19sZTMyKDFMPDwxOCkpCisjZGVmaW5lIGFET05UQ09NUFJFU1MJCShfX2NwdV90b19sZTMyKDFMPDwyNykpCisKKyNlbmRpZiAvKiBfTkNQX05PICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmVpZ2hib3VyLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmVpZ2hib3VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcwMDNiNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZWlnaGJvdXIuaApAQCAtMCwwICsxLDE1NSBAQAorI2lmbmRlZiBfX0xJTlVYX05FSUdIQk9VUl9ICisjZGVmaW5lIF9fTElOVVhfTkVJR0hCT1VSX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorCitzdHJ1Y3QgbmRtc2cgeworCV9fdTgJCW5kbV9mYW1pbHk7CisJX191OAkJbmRtX3BhZDE7CisJX191MTYJCW5kbV9wYWQyOworCV9fczMyCQluZG1faWZpbmRleDsKKwlfX3UxNgkJbmRtX3N0YXRlOworCV9fdTgJCW5kbV9mbGFnczsKKwlfX3U4CQluZG1fdHlwZTsKK307CisKK2VudW0geworCU5EQV9VTlNQRUMsCisJTkRBX0RTVCwKKwlOREFfTExBRERSLAorCU5EQV9DQUNIRUlORk8sCisJTkRBX1BST0JFUywKKwlfX05EQV9NQVgKK307CisKKyNkZWZpbmUgTkRBX01BWCAoX19OREFfTUFYIC0gMSkKKworLyoKKyAqCU5laWdoYm9yIENhY2hlIEVudHJ5IEZsYWdzCisgKi8KKworI2RlZmluZSBOVEZfVVNFCQkweDAxCisjZGVmaW5lIE5URl9QUk9YWQkweDA4CS8qID09IEFURl9QVUJMICovCisjZGVmaW5lIE5URl9ST1VURVIJMHg4MAorCisvKgorICoJTmVpZ2hib3IgQ2FjaGUgRW50cnkgU3RhdGVzLgorICovCisKKyNkZWZpbmUgTlVEX0lOQ09NUExFVEUJMHgwMQorI2RlZmluZSBOVURfUkVBQ0hBQkxFCTB4MDIKKyNkZWZpbmUgTlVEX1NUQUxFCTB4MDQKKyNkZWZpbmUgTlVEX0RFTEFZCTB4MDgKKyNkZWZpbmUgTlVEX1BST0JFCTB4MTAKKyNkZWZpbmUgTlVEX0ZBSUxFRAkweDIwCisKKy8qIER1bW15IHN0YXRlcyAqLworI2RlZmluZSBOVURfTk9BUlAJMHg0MAorI2RlZmluZSBOVURfUEVSTUFORU5UCTB4ODAKKyNkZWZpbmUgTlVEX05PTkUJMHgwMAorCisvKiBOVURfTk9BUlAgJiBOVURfUEVSTUFORU5UIGFyZSBwc2V1ZG9zdGF0ZXMsIHRoZXkgbmV2ZXIgY2hhbmdlCisgICBhbmQgbWFrZSBubyBhZGRyZXNzIHJlc29sdXRpb24gb3IgTlVELgorICAgTlVEX1BFUk1BTkVOVCBpcyBhbHNvIGNhbm5vdCBiZSBkZWxldGVkIGJ5IGdhcmJhZ2UgY29sbGVjdG9ycy4KKyAqLworCitzdHJ1Y3QgbmRhX2NhY2hlaW5mbyB7CisJX191MzIJCW5kbV9jb25maXJtZWQ7CisJX191MzIJCW5kbV91c2VkOworCV9fdTMyCQluZG1fdXBkYXRlZDsKKwlfX3UzMgkJbmRtX3JlZmNudDsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJCU5laWdoYm91ciB0YWJsZXMgc3BlY2lmaWMgbWVzc2FnZXMuCisgKgorICogVG8gcmV0cmlldmUgdGhlIG5laWdoYm91ciB0YWJsZXMgc2VuZCBSVE1fR0VUTkVJR0hUQkwgd2l0aCB0aGUKKyAqIE5MTV9GX0RVTVAgZmxhZyBzZXQuIEV2ZXJ5IG5laWdoYm91ciB0YWJsZSBjb25maWd1cmF0aW9uIGlzCisgKiBzcHJlYWQgb3ZlciBtdWx0aXBsZSBtZXNzYWdlcyB0byBhdm9pZCBydW5uaW5nIGludG8gbWVzc2FnZQorICogc2l6ZSBsaW1pdHMgb24gc3lzdGVtcyB3aXRoIG1hbnkgaW50ZXJmYWNlcy4gVGhlIGZpcnN0IG1lc3NhZ2UKKyAqIGluIHRoZSBzZXF1ZW5jZSB0cmFuc3BvcnRzIGFsbCBub3QgZGV2aWNlIHNwZWNpZmljIGRhdGEgc3VjaCBhcworICogc3RhdGlzdGljcywgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBkZWZhdWx0IHBhcmFtZXRlciBzZXQuCisgKiBUaGlzIG1lc3NhZ2UgaXMgZm9sbG93ZWQgYnkgMC4ubiBtZXNzYWdlcyBjYXJyeWluZyBkZXZpY2UKKyAqIHNwZWNpZmljIHBhcmFtZXRlciBzZXRzLgorICogQWx0aG91Z2ggdGhlIG9yZGVyaW5nIHNob3VsZCBiZSBzdWZmaWNpZW50LCBORFRBX05BTUUgY2FuIGJlCisgKiB1c2VkIHRvIGlkZW50aWZ5IHNlcXVlbmNlcy4gVGhlIGluaXRpYWwgbWVzc2FnZSBjYW4gYmUgaWRlbnRpZmllZAorICogYnkgY2hlY2tpbmcgZm9yIE5EVEFfQ09ORklHLiBUaGUgZGV2aWNlIHNwZWNpZmljIG1lc3NhZ2VzIGRvCisgKiBub3QgY29udGFpbiB0aGlzIFRMViBidXQgaGF2ZSBORFRQQV9JRklOREVYIHNldCB0byB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgaW50ZXJmYWNlIGluZGV4LgorICoKKyAqIFRvIGNoYW5nZSBuZWlnaGJvdXIgdGFibGUgYXR0cmlidXRlcywgc2VuZCBSVE1fU0VUTkVJR0hUQkwKKyAqIHdpdGggTkRUQV9OQU1FIHNldC4gQ2hhbmdlYWJsZSBhdHRyaWJ1dGUgaW5jbHVkZSBORFRBX1RIUkVTSFsxLTNdLAorICogTkRUQV9HQ19JTlRFUlZBTCwgYW5kIGFsbCBUTFZzIGluIE5EVEFfUEFSTVMgdW5sZXNzIG1hcmtlZAorICogb3RoZXJ3aXNlLiBEZXZpY2Ugc3BlY2lmaWMgcGFyYW1ldGVyIHNldHMgY2FuIGJlIGNoYW5nZWQgYnkKKyAqIHNldHRpbmcgTkRUUEFfSUZJTkRFWCB0byB0aGUgaW50ZXJmYWNlIGluZGV4IG9mIHRoZSBjb3JyZXNwb25kaW5nCisgKiBkZXZpY2UuCisgKioqKi8KKworc3RydWN0IG5kdF9zdGF0cyB7CisJX191NjQJCW5kdHNfYWxsb2NzOworCV9fdTY0CQluZHRzX2Rlc3Ryb3lzOworCV9fdTY0CQluZHRzX2hhc2hfZ3Jvd3M7CisJX191NjQJCW5kdHNfcmVzX2ZhaWxlZDsKKwlfX3U2NAkJbmR0c19sb29rdXBzOworCV9fdTY0CQluZHRzX2hpdHM7CisJX191NjQJCW5kdHNfcmN2X3Byb2Jlc19tY2FzdDsKKwlfX3U2NAkJbmR0c19yY3ZfcHJvYmVzX3VjYXN0OworCV9fdTY0CQluZHRzX3BlcmlvZGljX2djX3J1bnM7CisJX191NjQJCW5kdHNfZm9yY2VkX2djX3J1bnM7Cit9OworCitlbnVtIHsKKwlORFRQQV9VTlNQRUMsCisJTkRUUEFfSUZJTkRFWCwJCQkvKiB1MzIsIHVuY2hhbmdlYWJsZSAqLworCU5EVFBBX1JFRkNOVCwJCQkvKiB1MzIsIHJlYWQtb25seSAqLworCU5EVFBBX1JFQUNIQUJMRV9USU1FLAkJLyogdTY0LCByZWFkLW9ubHksIG1zZWNzICovCisJTkRUUEFfQkFTRV9SRUFDSEFCTEVfVElNRSwJLyogdTY0LCBtc2VjcyAqLworCU5EVFBBX1JFVFJBTlNfVElNRSwJCS8qIHU2NCwgbXNlY3MgKi8KKwlORFRQQV9HQ19TVEFMRVRJTUUsCQkvKiB1NjQsIG1zZWNzICovCisJTkRUUEFfREVMQVlfUFJPQkVfVElNRSwJCS8qIHU2NCwgbXNlY3MgKi8KKwlORFRQQV9RVUVVRV9MRU4sCQkvKiB1MzIgKi8KKwlORFRQQV9BUFBfUFJPQkVTLAkJLyogdTMyICovCisJTkRUUEFfVUNBU1RfUFJPQkVTLAkJLyogdTMyICovCisJTkRUUEFfTUNBU1RfUFJPQkVTLAkJLyogdTMyICovCisJTkRUUEFfQU5ZQ0FTVF9ERUxBWSwJCS8qIHU2NCwgbXNlY3MgKi8KKwlORFRQQV9QUk9YWV9ERUxBWSwJCS8qIHU2NCwgbXNlY3MgKi8KKwlORFRQQV9QUk9YWV9RTEVOLAkJLyogdTMyICovCisJTkRUUEFfTE9DS1RJTUUsCQkJLyogdTY0LCBtc2VjcyAqLworCV9fTkRUUEFfTUFYCit9OworI2RlZmluZSBORFRQQV9NQVggKF9fTkRUUEFfTUFYIC0gMSkKKworc3RydWN0IG5kdG1zZyB7CisJX191OAkJbmR0bV9mYW1pbHk7CisJX191OAkJbmR0bV9wYWQxOworCV9fdTE2CQluZHRtX3BhZDI7Cit9OworCitzdHJ1Y3QgbmR0X2NvbmZpZyB7CisJX191MTYJCW5kdGNfa2V5X2xlbjsKKwlfX3UxNgkJbmR0Y19lbnRyeV9zaXplOworCV9fdTMyCQluZHRjX2VudHJpZXM7CisJX191MzIJCW5kdGNfbGFzdF9mbHVzaDsJLyogZGVsdGEgdG8gbm93IGluIG1zZWNzICovCisJX191MzIJCW5kdGNfbGFzdF9yYW5kOwkJLyogZGVsdGEgdG8gbm93IGluIG1zZWNzICovCisJX191MzIJCW5kdGNfaGFzaF9ybmQ7CisJX191MzIJCW5kdGNfaGFzaF9tYXNrOworCV9fdTMyCQluZHRjX2hhc2hfY2hhaW5fZ2M7CisJX191MzIJCW5kdGNfcHJveHlfcWxlbjsKK307CisKK2VudW0geworCU5EVEFfVU5TUEVDLAorCU5EVEFfTkFNRSwJCQkvKiBjaGFyICosIHVuY2hhbmdlYWJsZSAqLworCU5EVEFfVEhSRVNIMSwJCQkvKiB1MzIgKi8KKwlORFRBX1RIUkVTSDIsCQkJLyogdTMyICovCisJTkRUQV9USFJFU0gzLAkJCS8qIHUzMiAqLworCU5EVEFfQ09ORklHLAkJCS8qIHN0cnVjdCBuZHRfY29uZmlnLCByZWFkLW9ubHkgKi8KKwlORFRBX1BBUk1TLAkJCS8qIG5lc3RlZCBUTFYgTkRUUEFfKiAqLworCU5EVEFfU1RBVFMsCQkJLyogc3RydWN0IG5kdF9zdGF0cywgcmVhZC1vbmx5ICovCisJTkRUQV9HQ19JTlRFUlZBTCwJCS8qIHU2NCwgbXNlY3MgKi8KKwlfX05EVEFfTUFYCit9OworI2RlZmluZSBORFRBX01BWCAoX19ORFRBX01BWCAtIDEpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNWNmMjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0LmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIE5FVAkJQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFNPQ0tFVCBuZXR3b3JrIGFjY2VzcyBwcm90b2NvbC4KKyAqCQlUaGlzIGlzIHRoZSBtYXN0ZXIgaGVhZGVyIGZpbGUgZm9yIHRoZSBMaW51eCBORVQgbGF5ZXIsCisgKgkJb3IsIGluIHBsYWluIEVuZ2xpc2g6IHRoZSBuZXR3b3JraW5nIGhhbmRsaW5nIHBhcnQgb2YgdGhlCisgKgkJa2VybmVsLgorICoKKyAqIFZlcnNpb246CUAoIyluZXQuaAkxLjAuMwkwNS8yNS85MworICoKKyAqIEF1dGhvcnM6CU9yZXN0IFpib3Jvd3NraSwgPG9iekBLb2Rhay5DT00+CisgKgkJUm9zcyBCaXJvCisgKgkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CisgKgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX0xJTlVYX05FVF9ICisjZGVmaW5lIF9MSU5VWF9ORVRfSAorCisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisjaW5jbHVkZSA8YXNtL3NvY2tldC5oPgorCisjZGVmaW5lIE5QUk9UTwkJQUZfTUFYCisKKyNkZWZpbmUgU1lTX1NPQ0tFVAkxCQkvKiBzeXNfc29ja2V0KDIpCQkqLworI2RlZmluZSBTWVNfQklORAkyCQkvKiBzeXNfYmluZCgyKQkJCSovCisjZGVmaW5lIFNZU19DT05ORUNUCTMJCS8qIHN5c19jb25uZWN0KDIpCQkqLworI2RlZmluZSBTWVNfTElTVEVOCTQJCS8qIHN5c19saXN0ZW4oMikJCSovCisjZGVmaW5lIFNZU19BQ0NFUFQJNQkJLyogc3lzX2FjY2VwdCgyKQkJKi8KKyNkZWZpbmUgU1lTX0dFVFNPQ0tOQU1FCTYJCS8qIHN5c19nZXRzb2NrbmFtZSgyKQkJKi8KKyNkZWZpbmUgU1lTX0dFVFBFRVJOQU1FCTcJCS8qIHN5c19nZXRwZWVybmFtZSgyKQkJKi8KKyNkZWZpbmUgU1lTX1NPQ0tFVFBBSVIJOAkJLyogc3lzX3NvY2tldHBhaXIoMikJCSovCisjZGVmaW5lIFNZU19TRU5ECTkJCS8qIHN5c19zZW5kKDIpCQkJKi8KKyNkZWZpbmUgU1lTX1JFQ1YJMTAJCS8qIHN5c19yZWN2KDIpCQkJKi8KKyNkZWZpbmUgU1lTX1NFTkRUTwkxMQkJLyogc3lzX3NlbmR0bygyKQkJKi8KKyNkZWZpbmUgU1lTX1JFQ1ZGUk9NCTEyCQkvKiBzeXNfcmVjdmZyb20oMikJCSovCisjZGVmaW5lIFNZU19TSFVURE9XTgkxMwkJLyogc3lzX3NodXRkb3duKDIpCQkqLworI2RlZmluZSBTWVNfU0VUU09DS09QVAkxNAkJLyogc3lzX3NldHNvY2tvcHQoMikJCSovCisjZGVmaW5lIFNZU19HRVRTT0NLT1BUCTE1CQkvKiBzeXNfZ2V0c29ja29wdCgyKQkJKi8KKyNkZWZpbmUgU1lTX1NFTkRNU0cJMTYJCS8qIHN5c19zZW5kbXNnKDIpCQkqLworI2RlZmluZSBTWVNfUkVDVk1TRwkxNwkJLyogc3lzX3JlY3Ztc2coMikJCSovCisjZGVmaW5lIFNZU19BQ0NFUFQ0CTE4CQkvKiBzeXNfYWNjZXB0NCgyKQkJKi8KKyNkZWZpbmUgU1lTX1JFQ1ZNTVNHCTE5CQkvKiBzeXNfcmVjdm1tc2coMikJCSovCisKK3R5cGVkZWYgZW51bSB7CisJU1NfRlJFRSA9IDAsCQkJLyogbm90IGFsbG9jYXRlZAkJKi8KKwlTU19VTkNPTk5FQ1RFRCwJCQkvKiB1bmNvbm5lY3RlZCB0byBhbnkgc29ja2V0CSovCisJU1NfQ09OTkVDVElORywJCQkvKiBpbiBwcm9jZXNzIG9mIGNvbm5lY3RpbmcJKi8KKwlTU19DT05ORUNURUQsCQkJLyogY29ubmVjdGVkIHRvIHNvY2tldAkJKi8KKwlTU19ESVNDT05ORUNUSU5HCQkvKiBpbiBwcm9jZXNzIG9mIGRpc2Nvbm5lY3RpbmcJKi8KK30gc29ja2V0X3N0YXRlOworCisjZGVmaW5lIF9fU09fQUNDRVBUQ09OCSgxIDw8IDE2KQkvKiBwZXJmb3JtZWQgYSBsaXN0ZW4JCSovCisKKyNlbmRpZgkvKiBfTElOVVhfTkVUX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRfZHJvcG1vbi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldF9kcm9wbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE3Mzk0NgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRfZHJvcG1vbi5oCkBAIC0wLDAgKzEsNjQgQEAKKyNpZm5kZWYgX19ORVRfRFJPUE1PTl9ICisjZGVmaW5lIF9fTkVUX0RST1BNT05fSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisKK3N0cnVjdCBuZXRfZG1fZHJvcF9wb2ludCB7CisJX191OCBwY1s4XTsKKwlfX3UzMiBjb3VudDsKK307CisKKyNkZWZpbmUgaXNfZHJvcF9wb2ludF9odyh4KSBkbyB7XAorCWludCBfX19faSwgX19fX2o7XAorCWZvciAoX19fX2kgPSAwOyBfX19faSA8IDg7IGkgX19fX2krKylcCisJCV9fX19qIHw9IHhbX19fX2ldO1wKKwlfX19fajtcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIE5FVF9ETV9DRkdfVkVSU0lPTiAgMAorI2RlZmluZSBORVRfRE1fQ0ZHX0FMRVJUX0NPVU5UICAxCisjZGVmaW5lIE5FVF9ETV9DRkdfQUxFUlRfREVMQVkgMgorI2RlZmluZSBORVRfRE1fQ0ZHX01BWCAzCisKK3N0cnVjdCBuZXRfZG1fY29uZmlnX2VudHJ5IHsKKwlfX3UzMiB0eXBlOworCV9fdTY0IGRhdGEgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOworfTsKKworc3RydWN0IG5ldF9kbV9jb25maWdfbXNnIHsKKwlfX3UzMiBlbnRyaWVzOworCXN0cnVjdCBuZXRfZG1fY29uZmlnX2VudHJ5IG9wdGlvbnNbMF07Cit9OworCitzdHJ1Y3QgbmV0X2RtX2FsZXJ0X21zZyB7CisJX191MzIgZW50cmllczsKKwlzdHJ1Y3QgbmV0X2RtX2Ryb3BfcG9pbnQgcG9pbnRzWzBdOworfTsKKworc3RydWN0IG5ldF9kbV91c2VyX21zZyB7CisJdW5pb24geworCQlzdHJ1Y3QgbmV0X2RtX2NvbmZpZ19tc2cgdXNlcjsKKwkJc3RydWN0IG5ldF9kbV9hbGVydF9tc2cgYWxlcnQ7CisJfSB1OworfTsKKworCisvKiBUaGVzZSBhcmUgdGhlIG5ldGxpbmsgbWVzc2FnZSB0eXBlcyBmb3IgdGhpcyBwcm90b2NvbCAqLworCitlbnVtIHsKKwlORVRfRE1fQ01EX1VOU1BFQyA9IDAsCisJTkVUX0RNX0NNRF9BTEVSVCwKKwlORVRfRE1fQ01EX0NPTkZJRywKKwlORVRfRE1fQ01EX1NUQVJULAorCU5FVF9ETV9DTURfU1RPUCwKKwlfTkVUX0RNX0NNRF9NQVgsCit9OworCisjZGVmaW5lIE5FVF9ETV9DTURfTUFYIChfTkVUX0RNX0NNRF9NQVggLSAxKQorCisvKgorICogT3VyIGdyb3VwIGlkZW50aWZpZXJzCisgKi8KKyNkZWZpbmUgTkVUX0RNX0dSUF9BTEVSVCAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0X3RzdGFtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYjg1NDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0X3RzdGFtcC5oCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogVXNlcnNwYWNlIEFQSSBmb3IgaGFyZHdhcmUgdGltZSBzdGFtcGluZyBvZiBuZXR3b3JrIHBhY2tldHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBQYXRyaWNrIE9obHkgPHBhdHJpY2sub2hseUBpbnRlbC5jb20+CisgKgorICovCisKKyNpZm5kZWYgX05FVF9USU1FU1RBTVBJTkdfSAorI2RlZmluZSBfTkVUX1RJTUVTVEFNUElOR19ICisKKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4gICAvKiBmb3IgU09fVElNRVNUQU1QSU5HICovCisKKy8qIFNPX1RJTUVTVEFNUElORyBnZXRzIGFuIGludGVnZXIgYml0IGZpZWxkIGNvbXByaXNlZCBvZiB0aGVzZSB2YWx1ZXMgKi8KK2VudW0geworCVNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgPSAoMTw8MCksCisJU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSA9ICgxPDwxKSwKKwlTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFID0gKDE8PDIpLAorCVNPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUgPSAoMTw8MyksCisJU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRSA9ICgxPDw0KSwKKwlTT0ZfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRSA9ICgxPDw1KSwKKwlTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSA9ICgxPDw2KSwKKwlTT0ZfVElNRVNUQU1QSU5HX01BU0sgPQorCShTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSAtIDEpIHwKKwlTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRQorfTsKKworLyoqCisgKiBzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnIC0gJVNJT0NTSFdUU1RBTVAgcGFyYW1ldGVyCisgKgorICogQGZsYWdzOglubyBmbGFncyBkZWZpbmVkIHJpZ2h0IG5vdywgbXVzdCBiZSB6ZXJvCisgKiBAdHhfdHlwZToJb25lIG9mIEhXVFNUQU1QX1RYXyoKKyAqIEByeF90eXBlOglvbmUgb2Ygb25lIG9mIEhXVFNUQU1QX0ZJTFRFUl8qCisgKgorICogJVNJT0NTSFdUU1RBTVAgZXhwZWN0cyBhICZzdHJ1Y3QgaWZyZXEgd2l0aCBhIGlmcl9kYXRhIHBvaW50ZXIgdG8KKyAqIHRoaXMgc3RydWN0dXJlLiBkZXZfaWZzaW9jKCkgaW4gdGhlIGtlcm5lbCB0YWtlcyBjYXJlIG9mIHRoZQorICogdHJhbnNsYXRpb24gYmV0d2VlbiAzMiBiaXQgdXNlcnNwYWNlIGFuZCA2NCBiaXQga2VybmVsLiBUaGUKKyAqIHN0cnVjdHVyZSBpcyBpbnRlbnRpb25hbGx5IGNob3NlbiBzbyB0aGF0IGl0IGhhcyB0aGUgc2FtZSBsYXlvdXQgb24KKyAqIDMyIGFuZCA2NCBiaXQgc3lzdGVtcywgZG9uJ3QgYnJlYWsgdGhpcyEKKyAqLworc3RydWN0IGh3dHN0YW1wX2NvbmZpZyB7CisJaW50IGZsYWdzOworCWludCB0eF90eXBlOworCWludCByeF9maWx0ZXI7Cit9OworCisvKiBwb3NzaWJsZSB2YWx1ZXMgZm9yIGh3dHN0YW1wX2NvbmZpZy0+dHhfdHlwZSAqLworZW51bSB7CisJLyoKKwkgKiBObyBvdXRnb2luZyBwYWNrZXQgd2lsbCBuZWVkIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmc7CisJICogc2hvdWxkIGEgcGFja2V0IGFycml2ZSB3aGljaCBhc2tzIGZvciBpdCwgbm8gaGFyZHdhcmUKKwkgKiB0aW1lIHN0YW1waW5nIHdpbGwgYmUgZG9uZS4KKwkgKi8KKwlIV1RTVEFNUF9UWF9PRkYsCisKKwkvKgorCSAqIEVuYWJsZXMgaGFyZHdhcmUgdGltZSBzdGFtcGluZyBmb3Igb3V0Z29pbmcgcGFja2V0czsKKwkgKiB0aGUgc2VuZGVyIG9mIHRoZSBwYWNrZXQgZGVjaWRlcyB3aGljaCBhcmUgdG8gYmUKKwkgKiB0aW1lIHN0YW1wZWQgYnkgc2V0dGluZyAlU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRQorCSAqIGJlZm9yZSBzZW5kaW5nIHRoZSBwYWNrZXQuCisJICovCisJSFdUU1RBTVBfVFhfT04sCit9OworCisvKiBwb3NzaWJsZSB2YWx1ZXMgZm9yIGh3dHN0YW1wX2NvbmZpZy0+cnhfZmlsdGVyICovCitlbnVtIHsKKwkvKiB0aW1lIHN0YW1wIG5vIGluY29taW5nIHBhY2tldCBhdCBhbGwgKi8KKwlIV1RTVEFNUF9GSUxURVJfTk9ORSwKKworCS8qIHRpbWUgc3RhbXAgYW55IGluY29taW5nIHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9BTEwsCisKKwkvKiByZXR1cm4gdmFsdWU6IHRpbWUgc3RhbXAgYWxsIHBhY2tldHMgcmVxdWVzdGVkIHBsdXMgc29tZSBvdGhlcnMgKi8KKwlIV1RTVEFNUF9GSUxURVJfU09NRSwKKworCS8qIFBUUCB2MSwgVURQLCBhbnkga2luZCBvZiBldmVudCBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X0VWRU5ULAorCS8qIFBUUCB2MSwgVURQLCBTeW5jIHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfU1lOQywKKwkvKiBQVFAgdjEsIFVEUCwgRGVsYXlfcmVxIHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfREVMQVlfUkVRLAorCS8qIFBUUCB2MiwgVURQLCBhbnkga2luZCBvZiBldmVudCBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5ULAorCS8qIFBUUCB2MiwgVURQLCBTeW5jIHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfU1lOQywKKwkvKiBQVFAgdjIsIFVEUCwgRGVsYXlfcmVxIHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfREVMQVlfUkVRLAorCisJLyogODAyLkFTMSwgRXRoZXJuZXQsIGFueSBraW5kIG9mIGV2ZW50IHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQsCisJLyogODAyLkFTMSwgRXRoZXJuZXQsIFN5bmMgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9TWU5DLAorCS8qIDgwMi5BUzEsIEV0aGVybmV0LCBEZWxheV9yZXEgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9ERUxBWV9SRVEsCisKKwkvKiBQVFAgdjIvODAyLkFTMSwgYW55IGxheWVyLCBhbnkga2luZCBvZiBldmVudCBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0VWRU5ULAorCS8qIFBUUCB2Mi84MDIuQVMxLCBhbnkgbGF5ZXIsIFN5bmMgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9TWU5DLAorCS8qIFBUUCB2Mi84MDIuQVMxLCBhbnkgbGF5ZXIsIERlbGF5X3JlcSBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0RFTEFZX1JFUSwKK307CisKKyNlbmRpZiAvKiBfTkVUX1RJTUVTVEFNUElOR19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVjNGUyMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogSU5FVAkJQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFRDUC9JUCBwcm90b2NvbCBzdWl0ZSBmb3IgdGhlIExJTlVYCisgKgkJb3BlcmF0aW5nIHN5c3RlbS4gIElORVQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlICBCU0QgU29ja2V0CisgKgkJaW50ZXJmYWNlIGFzIHRoZSBtZWFucyBvZiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHVzZXIgbGV2ZWwuCisgKgorICoJCURlZmluaXRpb25zIGZvciB0aGUgSW50ZXJmYWNlcyBoYW5kbGVyLgorICoKKyAqIFZlcnNpb246CUAoIylkZXYuaAkxLjAuMTAJMDgvMTIvOTMKKyAqCisgKiBBdXRob3JzOglSb3NzIEJpcm8KKyAqCQlGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KKyAqCQlDb3JleSBNaW55YXJkIDx3Zi1yY2ghbWlueWFyZEByZWxheS5FVS5uZXQ+CisgKgkJRG9uYWxkIEouIEJlY2tlciwgPGJlY2tlckBjZXNkaXMuZ3NmYy5uYXNhLmdvdj4KKyAqCQlBbGFuIENveCwgPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KKyAqCQlCam9ybiBFa3dhbGwuIDxiajBybkBibG94LnNlPgorICogICAgICAgICAgICAgIFBla2thIFJpaWtvbmVuIDxwcmlpa29uZUBwb3NlaWRvbi5wc3B0LmZpPgorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqCQlNb3ZlZCB0byAvdXNyL2luY2x1ZGUvbGludXggZm9yIE5FVDMKKyAqLworI2lmbmRlZiBfTElOVVhfTkVUREVWSUNFX0gKKyNkZWZpbmUgX0xJTlVYX05FVERFVklDRV9ICisKKyNpbmNsdWRlIDxsaW51eC9pZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvaWZfcGFja2V0Lmg+CisjaW5jbHVkZSA8bGludXgvaWZfbGluay5oPgorCisKKyNkZWZpbmUgTUFYX0FERFJfTEVOCTMyCQkvKiBMYXJnZXN0IGhhcmR3YXJlIGFkZHJlc3MgbGVuZ3RoICovCisKKworCisvKiBNZWRpYSBzZWxlY3Rpb24gb3B0aW9ucy4gKi8KK2VudW0geworICAgICAgICBJRl9QT1JUX1VOS05PV04gPSAwLAorICAgICAgICBJRl9QT1JUXzEwQkFTRTIsCisgICAgICAgIElGX1BPUlRfMTBCQVNFVCwKKyAgICAgICAgSUZfUE9SVF9BVUksCisgICAgICAgIElGX1BPUlRfMTAwQkFTRVQsCisgICAgICAgIElGX1BPUlRfMTAwQkFTRVRYLAorICAgICAgICBJRl9QT1JUXzEwMEJBU0VGWAorfTsKKworCisjZW5kaWYJLyogX0xJTlVYX05FVERFVklDRV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmViMDBiNgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaApAQCAtMCwwICsxLDU5IEBACisjaWZuZGVmIF9fTElOVVhfTkVURklMVEVSX0gKKyNkZWZpbmUgX19MSU5VWF9ORVRGSUxURVJfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworCisvKiBSZXNwb25zZXMgZnJvbSBob29rIGZ1bmN0aW9ucy4gKi8KKyNkZWZpbmUgTkZfRFJPUCAwCisjZGVmaW5lIE5GX0FDQ0VQVCAxCisjZGVmaW5lIE5GX1NUT0xFTiAyCisjZGVmaW5lIE5GX1FVRVVFIDMKKyNkZWZpbmUgTkZfUkVQRUFUIDQKKyNkZWZpbmUgTkZfU1RPUCA1CisjZGVmaW5lIE5GX01BWF9WRVJESUNUIE5GX1NUT1AKKworLyogd2Ugb3ZlcmxvYWQgdGhlIGhpZ2hlciBiaXRzIGZvciBlbmNvZGluZyBhdXhpbGlhcnkgZGF0YSBzdWNoIGFzIHRoZSBxdWV1ZQorICogbnVtYmVyLiBOb3QgbmljZSwgYnV0IGJldHRlciB0aGFuIGFkZGl0aW9uYWwgZnVuY3Rpb24gYXJndW1lbnRzLiAqLworI2RlZmluZSBORl9WRVJESUNUX01BU0sgMHgwMDAwZmZmZgorI2RlZmluZSBORl9WRVJESUNUX0JJVFMgMTYKKworI2RlZmluZSBORl9WRVJESUNUX1FNQVNLIDB4ZmZmZjAwMDAKKyNkZWZpbmUgTkZfVkVSRElDVF9RQklUUyAxNgorCisjZGVmaW5lIE5GX1FVRVVFX05SKHgpICgoKCh4KSA8PCBORl9WRVJESUNUX0JJVFMpICYgTkZfVkVSRElDVF9RTUFTSykgfCBORl9RVUVVRSkKKworLyogb25seSBmb3IgdXNlcnNwYWNlIGNvbXBhdGliaWxpdHkgKi8KKy8qIEdlbmVyaWMgY2FjaGUgcmVzcG9uc2VzIGZyb20gaG9vayBmdW5jdGlvbnMuCisgICA8PSAweDIwMDAgaXMgdXNlZCBmb3IgcHJvdG9jb2wtZmxhZ3MuICovCisjZGVmaW5lIE5GQ19VTktOT1dOIDB4NDAwMAorI2RlZmluZSBORkNfQUxURVJFRCAweDgwMDAKKworZW51bSBuZl9pbmV0X2hvb2tzIHsKKwlORl9JTkVUX1BSRV9ST1VUSU5HLAorCU5GX0lORVRfTE9DQUxfSU4sCisJTkZfSU5FVF9GT1JXQVJELAorCU5GX0lORVRfTE9DQUxfT1VULAorCU5GX0lORVRfUE9TVF9ST1VUSU5HLAorCU5GX0lORVRfTlVNSE9PS1MKK307CisKK2VudW0geworCU5GUFJPVE9fVU5TUEVDID0gIDAsCisJTkZQUk9UT19JUFY0ICAgPSAgMiwKKwlORlBST1RPX0FSUCAgICA9ICAzLAorCU5GUFJPVE9fQlJJREdFID0gIDcsCisJTkZQUk9UT19JUFY2ICAgPSAxMCwKKwlORlBST1RPX0RFQ05FVCA9IDEyLAorCU5GUFJPVE9fTlVNUFJPVE8sCit9OworCit1bmlvbiBuZl9pbmV0X2FkZHIgeworCV9fdTMyCQlhbGxbNF07CisJX19iZTMyCQlpcDsKKwlfX2JlMzIJCWlwNls0XTsKKwlzdHJ1Y3QgaW5fYWRkcglpbjsKKwlzdHJ1Y3QgaW42X2FkZHIJaW42OworfTsKKworI2VuZGlmIC8qX19MSU5VWF9ORVRGSUxURVJfSCovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZTQzM2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaApAQCAtMCwwICsxLDExMCBAQAorI2lmbmRlZiBfTkZfQ09OTlRSQUNLX0NPTU1PTl9ICisjZGVmaW5lIF9ORl9DT05OVFJBQ0tfQ09NTU9OX0gKKy8qIENvbm5lY3Rpb24gc3RhdGUgdHJhY2tpbmcgZm9yIG5ldGZpbHRlci4gIFRoaXMgaXMgc2VwYXJhdGVkIGZyb20sCisgICBidXQgcmVxdWlyZWQgYnksIHRoZSBOQVQgbGF5ZXI7IGl0IGNhbiBhbHNvIGJlIHVzZWQgYnkgYW4gaXB0YWJsZXMKKyAgIGV4dGVuc2lvbi4gKi8KK2VudW0gaXBfY29ubnRyYWNrX2luZm8geworCS8qIFBhcnQgb2YgYW4gZXN0YWJsaXNoZWQgY29ubmVjdGlvbiAoZWl0aGVyIGRpcmVjdGlvbikuICovCisJSVBfQ1RfRVNUQUJMSVNIRUQsCisKKwkvKiBMaWtlIE5FVywgYnV0IHJlbGF0ZWQgdG8gYW4gZXhpc3RpbmcgY29ubmVjdGlvbiwgb3IgSUNNUCBlcnJvcgorCSAgIChpbiBlaXRoZXIgZGlyZWN0aW9uKS4gKi8KKwlJUF9DVF9SRUxBVEVELAorCisJLyogU3RhcnRlZCBhIG5ldyBjb25uZWN0aW9uIHRvIHRyYWNrIChvbmx5CisgICAgICAgICAgIElQX0NUX0RJUl9PUklHSU5BTCk7IG1heSBiZSBhIHJldHJhbnNtaXNzaW9uLiAqLworCUlQX0NUX05FVywKKworCS8qID49IHRoaXMgaW5kaWNhdGVzIHJlcGx5IGRpcmVjdGlvbiAqLworCUlQX0NUX0lTX1JFUExZLAorCisJLyogTnVtYmVyIG9mIGRpc3RpbmN0IElQX0NUIHR5cGVzIChubyBORVcgaW4gcmVwbHkgZGlybikuICovCisJSVBfQ1RfTlVNQkVSID0gSVBfQ1RfSVNfUkVQTFkgKiAyIC0gMQorfTsKKworLyogQml0c2V0IHJlcHJlc2VudGluZyBzdGF0dXMgb2YgY29ubmVjdGlvbi4gKi8KK2VudW0gaXBfY29ubnRyYWNrX3N0YXR1cyB7CisJLyogSXQncyBhbiBleHBlY3RlZCBjb25uZWN0aW9uOiBiaXQgMCBzZXQuICBUaGlzIGJpdCBuZXZlciBjaGFuZ2VkICovCisJSVBTX0VYUEVDVEVEX0JJVCA9IDAsCisJSVBTX0VYUEVDVEVEID0gKDEgPDwgSVBTX0VYUEVDVEVEX0JJVCksCisKKwkvKiBXZSd2ZSBzZWVuIHBhY2tldHMgYm90aCB3YXlzOiBiaXQgMSBzZXQuICBDYW4gYmUgc2V0LCBub3QgdW5zZXQuICovCisJSVBTX1NFRU5fUkVQTFlfQklUID0gMSwKKwlJUFNfU0VFTl9SRVBMWSA9ICgxIDw8IElQU19TRUVOX1JFUExZX0JJVCksCisKKwkvKiBDb25udHJhY2sgc2hvdWxkIG5ldmVyIGJlIGVhcmx5LWV4cGlyZWQuICovCisJSVBTX0FTU1VSRURfQklUID0gMiwKKwlJUFNfQVNTVVJFRCA9ICgxIDw8IElQU19BU1NVUkVEX0JJVCksCisKKwkvKiBDb25uZWN0aW9uIGlzIGNvbmZpcm1lZDogb3JpZ2luYXRpbmcgcGFja2V0IGhhcyBsZWZ0IGJveCAqLworCUlQU19DT05GSVJNRURfQklUID0gMywKKwlJUFNfQ09ORklSTUVEID0gKDEgPDwgSVBTX0NPTkZJUk1FRF9CSVQpLAorCisJLyogQ29ubmVjdGlvbiBuZWVkcyBzcmMgbmF0IGluIG9yaWcgZGlyLiAgVGhpcyBiaXQgbmV2ZXIgY2hhbmdlZC4gKi8KKwlJUFNfU1JDX05BVF9CSVQgPSA0LAorCUlQU19TUkNfTkFUID0gKDEgPDwgSVBTX1NSQ19OQVRfQklUKSwKKworCS8qIENvbm5lY3Rpb24gbmVlZHMgZHN0IG5hdCBpbiBvcmlnIGRpci4gIFRoaXMgYml0IG5ldmVyIGNoYW5nZWQuICovCisJSVBTX0RTVF9OQVRfQklUID0gNSwKKwlJUFNfRFNUX05BVCA9ICgxIDw8IElQU19EU1RfTkFUX0JJVCksCisKKwkvKiBCb3RoIHRvZ2V0aGVyLiAqLworCUlQU19OQVRfTUFTSyA9IChJUFNfRFNUX05BVCB8IElQU19TUkNfTkFUKSwKKworCS8qIENvbm5lY3Rpb24gbmVlZHMgVENQIHNlcXVlbmNlIGFkanVzdGVkLiAqLworCUlQU19TRVFfQURKVVNUX0JJVCA9IDYsCisJSVBTX1NFUV9BREpVU1QgPSAoMSA8PCBJUFNfU0VRX0FESlVTVF9CSVQpLAorCisJLyogTkFUIGluaXRpYWxpemF0aW9uIGJpdHMuICovCisJSVBTX1NSQ19OQVRfRE9ORV9CSVQgPSA3LAorCUlQU19TUkNfTkFUX0RPTkUgPSAoMSA8PCBJUFNfU1JDX05BVF9ET05FX0JJVCksCisKKwlJUFNfRFNUX05BVF9ET05FX0JJVCA9IDgsCisJSVBTX0RTVF9OQVRfRE9ORSA9ICgxIDw8IElQU19EU1RfTkFUX0RPTkVfQklUKSwKKworCS8qIEJvdGggdG9nZXRoZXIgKi8KKwlJUFNfTkFUX0RPTkVfTUFTSyA9IChJUFNfRFNUX05BVF9ET05FIHwgSVBTX1NSQ19OQVRfRE9ORSksCisKKwkvKiBDb25uZWN0aW9uIGlzIGR5aW5nIChyZW1vdmVkIGZyb20gbGlzdHMpLCBjYW4gbm90IGJlIHVuc2V0LiAqLworCUlQU19EWUlOR19CSVQgPSA5LAorCUlQU19EWUlORyA9ICgxIDw8IElQU19EWUlOR19CSVQpLAorCisJLyogQ29ubmVjdGlvbiBoYXMgZml4ZWQgdGltZW91dC4gKi8KKwlJUFNfRklYRURfVElNRU9VVF9CSVQgPSAxMCwKKwlJUFNfRklYRURfVElNRU9VVCA9ICgxIDw8IElQU19GSVhFRF9USU1FT1VUX0JJVCksCisKKwkvKiBDb25udHJhY2sgaXMgYSB0ZW1wbGF0ZSAqLworCUlQU19URU1QTEFURV9CSVQgPSAxMSwKKwlJUFNfVEVNUExBVEUgPSAoMSA8PCBJUFNfVEVNUExBVEVfQklUKSwKKworCS8qIENvbm50cmFjayBpcyBhIGZha2UgdW50cmFja2VkIGVudHJ5ICovCisJSVBTX1VOVFJBQ0tFRF9CSVQgPSAxMiwKKwlJUFNfVU5UUkFDS0VEID0gKDEgPDwgSVBTX1VOVFJBQ0tFRF9CSVQpLAorfTsKKworLyogQ29ubmVjdGlvbiB0cmFja2luZyBldmVudCB0eXBlcyAqLworZW51bSBpcF9jb25udHJhY2tfZXZlbnRzIHsKKwlJUENUX05FVywJCS8qIG5ldyBjb25udHJhY2sgKi8KKwlJUENUX1JFTEFURUQsCQkvKiByZWxhdGVkIGNvbm50cmFjayAqLworCUlQQ1RfREVTVFJPWSwJCS8qIGRlc3Ryb3llZCBjb25udHJhY2sgKi8KKwlJUENUX1JFUExZLAkJLyogY29ubmVjdGlvbiBoYXMgc2VlbiB0d28td2F5IHRyYWZmaWMgKi8KKwlJUENUX0FTU1VSRUQsCQkvKiBjb25uZWN0aW9uIHN0YXR1cyBoYXMgY2hhbmdlZCB0byBhc3N1cmVkICovCisJSVBDVF9QUk9UT0lORk8sCQkvKiBwcm90b2NvbCBpbmZvcm1hdGlvbiBoYXMgY2hhbmdlZCAqLworCUlQQ1RfSEVMUEVSLAkJLyogbmV3IGhlbHBlciBoYXMgYmVlbiBzZXQgKi8KKwlJUENUX01BUkssCQkvKiBuZXcgbWFyayBoYXMgYmVlbiBzZXQgKi8KKwlJUENUX05BVFNFUUFESiwJCS8qIE5BVCBpcyBkb2luZyBzZXF1ZW5jZSBhZGp1c3RtZW50ICovCisJSVBDVF9TRUNNQVJLLAkJLyogbmV3IHNlY3VyaXR5IG1hcmsgaGFzIGJlZW4gc2V0ICovCit9OworCitlbnVtIGlwX2Nvbm50cmFja19leHBlY3RfZXZlbnRzIHsKKwlJUEVYUF9ORVcsCQkvKiBuZXcgZXhwZWN0YXRpb24gKi8KKwlJUEVYUF9ERVNUUk9ZLAkJLyogZGVzdHJveWVkIGV4cGVjdGF0aW9uICovCit9OworCisvKiBleHBlY3RhdGlvbiBmbGFncyAqLworI2RlZmluZSBORl9DVF9FWFBFQ1RfUEVSTUFORU5UCQkweDEKKyNkZWZpbmUgTkZfQ1RfRVhQRUNUX0lOQUNUSVZFCQkweDIKKyNkZWZpbmUgTkZfQ1RfRVhQRUNUX1VTRVJTUEFDRQkJMHg0CisKKworI2VuZGlmIC8qIF9ORl9DT05OVFJBQ0tfQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIyMmZhYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5oCkBAIC0wLDAgKzEsMTggQEAKKyNpZm5kZWYgX05GX0NPTk5UUkFDS19GVFBfSAorI2RlZmluZSBfTkZfQ09OTlRSQUNLX0ZUUF9ICisvKiBGVFAgdHJhY2tpbmcuICovCisKKy8qIFRoaXMgZW51bSBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSAqLworZW51bSBuZl9jdF9mdHBfdHlwZSB7CisJLyogUE9SVCBjb21tYW5kIGZyb20gY2xpZW50ICovCisJTkZfQ1RfRlRQX1BPUlQsCisJLyogUEFTViByZXNwb25zZSBmcm9tIHNlcnZlciAqLworCU5GX0NUX0ZUUF9QQVNWLAorCS8qIEVQUlQgY29tbWFuZCBmcm9tIGNsaWVudCAqLworCU5GX0NUX0ZUUF9FUFJULAorCS8qIEVQU1YgcmVzcG9uc2UgZnJvbSBzZXJ2ZXIgKi8KKwlORl9DVF9GVFBfRVBTViwKK307CisKKworI2VuZGlmIC8qIF9ORl9DT05OVFJBQ0tfRlRQX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NjdHAuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NjdHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWVlZmU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2N0cC5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX05GX0NPTk5UUkFDS19TQ1RQX0gKKyNkZWZpbmUgX05GX0NPTk5UUkFDS19TQ1RQX0gKKy8qIFNDVFAgdHJhY2tpbmcuICovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlX2NvbW1vbi5oPgorCitlbnVtIHNjdHBfY29ubnRyYWNrIHsKKwlTQ1RQX0NPTk5UUkFDS19OT05FLAorCVNDVFBfQ09OTlRSQUNLX0NMT1NFRCwKKwlTQ1RQX0NPTk5UUkFDS19DT09LSUVfV0FJVCwKKwlTQ1RQX0NPTk5UUkFDS19DT09LSUVfRUNIT0VELAorCVNDVFBfQ09OTlRSQUNLX0VTVEFCTElTSEVELAorCVNDVFBfQ09OTlRSQUNLX1NIVVRET1dOX1NFTlQsCisJU0NUUF9DT05OVFJBQ0tfU0hVVERPV05fUkVDRCwKKwlTQ1RQX0NPTk5UUkFDS19TSFVURE9XTl9BQ0tfU0VOVCwKKwlTQ1RQX0NPTk5UUkFDS19NQVgKK307CisKK3N0cnVjdCBpcF9jdF9zY3RwIHsKKwllbnVtIHNjdHBfY29ubnRyYWNrIHN0YXRlOworCisJX19iZTMyIHZ0YWdbSVBfQ1RfRElSX01BWF07Cit9OworCisjZW5kaWYgLyogX05GX0NPTk5UUkFDS19TQ1RQX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RjcC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY5MWFiOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RjcC5oCkBAIC0wLDAgKzEsNDggQEAKKyNpZm5kZWYgX05GX0NPTk5UUkFDS19UQ1BfSAorI2RlZmluZSBfTkZfQ09OTlRSQUNLX1RDUF9ICisvKiBUQ1AgdHJhY2tpbmcuICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBUaGlzIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIChjdG5ldGxpbmspICovCitlbnVtIHRjcF9jb25udHJhY2sgeworCVRDUF9DT05OVFJBQ0tfTk9ORSwKKwlUQ1BfQ09OTlRSQUNLX1NZTl9TRU5ULAorCVRDUF9DT05OVFJBQ0tfU1lOX1JFQ1YsCisJVENQX0NPTk5UUkFDS19FU1RBQkxJU0hFRCwKKwlUQ1BfQ09OTlRSQUNLX0ZJTl9XQUlULAorCVRDUF9DT05OVFJBQ0tfQ0xPU0VfV0FJVCwKKwlUQ1BfQ09OTlRSQUNLX0xBU1RfQUNLLAorCVRDUF9DT05OVFJBQ0tfVElNRV9XQUlULAorCVRDUF9DT05OVFJBQ0tfQ0xPU0UsCisJVENQX0NPTk5UUkFDS19MSVNURU4sCS8qIG9ic29sZXRlICovCisjZGVmaW5lIFRDUF9DT05OVFJBQ0tfU1lOX1NFTlQyCVRDUF9DT05OVFJBQ0tfTElTVEVOCisJVENQX0NPTk5UUkFDS19NQVgsCisJVENQX0NPTk5UUkFDS19JR05PUkUKK307CisKKy8qIFdpbmRvdyBzY2FsaW5nIGlzIGFkdmVydGlzZWQgYnkgdGhlIHNlbmRlciAqLworI2RlZmluZSBJUF9DVF9UQ1BfRkxBR19XSU5ET1dfU0NBTEUJCTB4MDEKKworLyogU0FDSyBpcyBwZXJtaXR0ZWQgYnkgdGhlIHNlbmRlciAqLworI2RlZmluZSBJUF9DVF9UQ1BfRkxBR19TQUNLX1BFUk0JCTB4MDIKKworLyogVGhpcyBzZW5kZXIgc2VudCBGSU4gZmlyc3QgKi8KKyNkZWZpbmUgSVBfQ1RfVENQX0ZMQUdfQ0xPU0VfSU5JVAkJMHgwNAorCisvKiBCZSBsaWJlcmFsIGluIHdpbmRvdyBjaGVja2luZyAqLworI2RlZmluZSBJUF9DVF9UQ1BfRkxBR19CRV9MSUJFUkFMCQkweDA4CisKKy8qIEhhcyB1bmFja25vd2xlZGdlZCBkYXRhICovCisjZGVmaW5lIElQX0NUX1RDUF9GTEFHX0RBVEFfVU5BQ0tOT1dMRURHRUQJMHgxMAorCisvKiBUaGUgZmllbGQgdGRfbWF4YWNrIGhhcyBiZWVuIHNldCAqLworI2RlZmluZSBJUF9DVF9UQ1BfRkxBR19NQVhBQ0tfU0VUCQkweDIwCisKK3N0cnVjdCBuZl9jdF90Y3BfZmxhZ3MgeworCV9fdTggZmxhZ3M7CisJX191OCBtYXNrOworfTsKKworCisjZW5kaWYgLyogX05GX0NPTk5UUkFDS19UQ1BfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGVfY29tbW9uLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZV9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWEyMmIwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGVfY29tbW9uLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfTkZfQ09OTlRSQUNLX1RVUExFX0NPTU1PTl9ICisjZGVmaW5lIF9ORl9DT05OVFJBQ0tfVFVQTEVfQ09NTU9OX0gKKworZW51bSBpcF9jb25udHJhY2tfZGlyIHsKKwlJUF9DVF9ESVJfT1JJR0lOQUwsCisJSVBfQ1RfRElSX1JFUExZLAorCUlQX0NUX0RJUl9NQVgKK307CisKKyNkZWZpbmUgQ1RJTkZPMkRJUihjdGluZm8pICgoY3RpbmZvKSA+PSBJUF9DVF9JU19SRVBMWSA/IElQX0NUX0RJUl9SRVBMWSA6IElQX0NUX0RJUl9PUklHSU5BTCkKKworI2VuZGlmIC8qIF9ORl9DT05OVFJBQ0tfVFVQTEVfQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMGYxYzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oCkBAIC0wLDAgKzEsNTIgQEAKKyNpZm5kZWYgX05GTkVUTElOS19ICisjZGVmaW5lIF9ORk5FVExJTktfSAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb21wYXQuaD4KKworZW51bSBuZm5ldGxpbmtfZ3JvdXBzIHsKKwlORk5MR1JQX05PTkUsCisjZGVmaW5lIE5GTkxHUlBfTk9ORQkJCU5GTkxHUlBfTk9ORQorCU5GTkxHUlBfQ09OTlRSQUNLX05FVywKKyNkZWZpbmUgTkZOTEdSUF9DT05OVFJBQ0tfTkVXCQlORk5MR1JQX0NPTk5UUkFDS19ORVcKKwlORk5MR1JQX0NPTk5UUkFDS19VUERBVEUsCisjZGVmaW5lIE5GTkxHUlBfQ09OTlRSQUNLX1VQREFURQlORk5MR1JQX0NPTk5UUkFDS19VUERBVEUKKwlORk5MR1JQX0NPTk5UUkFDS19ERVNUUk9ZLAorI2RlZmluZSBORk5MR1JQX0NPTk5UUkFDS19ERVNUUk9ZCU5GTkxHUlBfQ09OTlRSQUNLX0RFU1RST1kKKwlORk5MR1JQX0NPTk5UUkFDS19FWFBfTkVXLAorI2RlZmluZQlORk5MR1JQX0NPTk5UUkFDS19FWFBfTkVXCU5GTkxHUlBfQ09OTlRSQUNLX0VYUF9ORVcKKwlORk5MR1JQX0NPTk5UUkFDS19FWFBfVVBEQVRFLAorI2RlZmluZSBORk5MR1JQX0NPTk5UUkFDS19FWFBfVVBEQVRFCU5GTkxHUlBfQ09OTlRSQUNLX0VYUF9VUERBVEUKKwlORk5MR1JQX0NPTk5UUkFDS19FWFBfREVTVFJPWSwKKyNkZWZpbmUgTkZOTEdSUF9DT05OVFJBQ0tfRVhQX0RFU1RST1kJTkZOTEdSUF9DT05OVFJBQ0tfRVhQX0RFU1RST1kKKwlfX05GTkxHUlBfTUFYLAorfTsKKyNkZWZpbmUgTkZOTEdSUF9NQVgJKF9fTkZOTEdSUF9NQVggLSAxKQorCisvKiBHZW5lcmFsIGZvcm0gb2YgYWRkcmVzcyBmYW1pbHkgZGVwZW5kZW50IG1lc3NhZ2UuCisgKi8KK3N0cnVjdCBuZmdlbm1zZyB7CisJX191OCAgbmZnZW5fZmFtaWx5OwkJLyogQUZfeHh4ICovCisJX191OCAgdmVyc2lvbjsJCS8qIG5mbmV0bGluayB2ZXJzaW9uICovCisJX19iZTE2ICAgIHJlc19pZDsJCS8qIHJlc291cmNlIGlkICovCit9OworCisjZGVmaW5lIE5GTkVUTElOS19WMAkwCisKKy8qIG5ldGZpbHRlciBuZXRsaW5rIG1lc3NhZ2UgdHlwZXMgYXJlIHNwbGl0IGluIHR3byBwaWVjZXM6CisgKiA4IGJpdCBzdWJzeXN0ZW0sIDhiaXQgb3BlcmF0aW9uLgorICovCisKKyNkZWZpbmUgTkZOTF9TVUJTWVNfSUQoeCkJKCh4ICYgMHhmZjAwKSA+PiA4KQorI2RlZmluZSBORk5MX01TR19UWVBFKHgpCSh4ICYgMHgwMGZmKQorCisvKiBObyBlbnVtIGhlcmUsIG90aGVyd2lzZSBfX3N0cmluZ2lmeSgpIHRyaWNrIG9mIE1PRFVMRV9BTElBU19ORk5MX1NVQlNZUygpCisgKiB3b24ndCB3b3JrIGFueW1vcmUgKi8KKyNkZWZpbmUgTkZOTF9TVUJTWVNfTk9ORSAJCTAKKyNkZWZpbmUgTkZOTF9TVUJTWVNfQ1RORVRMSU5LCQkxCisjZGVmaW5lIE5GTkxfU1VCU1lTX0NUTkVUTElOS19FWFAJMgorI2RlZmluZSBORk5MX1NVQlNZU19RVUVVRQkJMworI2RlZmluZSBORk5MX1NVQlNZU19VTE9HCQk0CisjZGVmaW5lIE5GTkxfU1VCU1lTX09TRgkJCTUKKyNkZWZpbmUgTkZOTF9TVUJTWVNfQ09VTlQJCTYKKworI2VuZGlmCS8qIF9ORk5FVExJTktfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29tcGF0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb21wYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGI5ZTU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29tcGF0LmgKQEAgLTAsMCArMSw2MSBAQAorI2lmbmRlZiBfTkZORVRMSU5LX0NPTVBBVF9ICisjZGVmaW5lIF9ORk5FVExJTktfQ09NUEFUX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIE9sZCBuZm5ldGxpbmsgbWFjcm9zIGZvciB1c2Vyc3BhY2UgKi8KKworLyogbmZuZXRsaW5rIGdyb3VwczogVXAgdG8gMzIgbWF4aW11bSAqLworI2RlZmluZSBORl9ORVRMSU5LX0NPTk5UUkFDS19ORVcgCQkweDAwMDAwMDAxCisjZGVmaW5lIE5GX05FVExJTktfQ09OTlRSQUNLX1VQREFURQkJMHgwMDAwMDAwMgorI2RlZmluZSBORl9ORVRMSU5LX0NPTk5UUkFDS19ERVNUUk9ZCQkweDAwMDAwMDA0CisjZGVmaW5lIE5GX05FVExJTktfQ09OTlRSQUNLX0VYUF9ORVcJCTB4MDAwMDAwMDgKKyNkZWZpbmUgTkZfTkVUTElOS19DT05OVFJBQ0tfRVhQX1VQREFURQkJMHgwMDAwMDAxMAorI2RlZmluZSBORl9ORVRMSU5LX0NPTk5UUkFDS19FWFBfREVTVFJPWQkweDAwMDAwMDIwCisKKy8qIEdlbmVyaWMgc3RydWN0dXJlIGZvciBlbmNhcHN1bGF0aW9uIG9wdGlvbmFsIG5ldGZpbHRlciBpbmZvcm1hdGlvbi4KKyAqIEl0IGlzIHJlbWluaXNjZW50IG9mIHNvY2thZGRyLCBidXQgd2l0aCBzYV9mYW1pbHkgcmVwbGFjZWQKKyAqIHdpdGggYXR0cmlidXRlIHR5cGUuCisgKiAhIFRoaXMgc2hvdWxkIHNvbWVkYXkgYmUgcHV0IHNvbWV3aGVyZSBnZW5lcmljIGFzIG5vdyBydG5ldGxpbmsgYW5kCisgKiAhIG5mbmV0bGluayB1c2UgdGhlIHNhbWUgYXR0cmlidXRlcyBtZXRob2RzLiAtIEouIFNjaHVsaXN0LgorICovCisKK3N0cnVjdCBuZmF0dHIgeworCV9fdTE2IG5mYV9sZW47CisJX191MTYgbmZhX3R5cGU7CS8qIHdlIHVzZSAxNSBiaXRzIGZvciB0aGUgdHlwZSwgYW5kIHRoZSBoaWdoZXN0CisJCQkJICogYml0IHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgbmVzdGVkICovCit9OworCisvKiBGSVhNRTogQXBhcnQgZnJvbSBORk5MX05GQV9ORVNURUQgc2hhbWVsZXNzbHkgY29weSBhbmQgcGFzdGVkIGZyb20KKyAqIHJ0bmV0bGluay5oLCBpdCdzIHRpbWUgdG8gcHV0IHRoaXMgaW4gYSBnZW5lcmljIGZpbGUgKi8KKworI2RlZmluZSBORk5MX05GQV9ORVNUCTB4ODAwMAorI2RlZmluZSBORkFfVFlQRShhdHRyKSAJKChhdHRyKS0+bmZhX3R5cGUgJiAweDdmZmYpCisKKyNkZWZpbmUgTkZBX0FMSUdOVE8gICAgIDQKKyNkZWZpbmUgTkZBX0FMSUdOKGxlbikJKCgobGVuKSArIE5GQV9BTElHTlRPIC0gMSkgJiB+KE5GQV9BTElHTlRPIC0gMSkpCisjZGVmaW5lIE5GQV9PSyhuZmEsbGVuKQkoKGxlbikgPiAwICYmIChuZmEpLT5uZmFfbGVuID49IHNpemVvZihzdHJ1Y3QgbmZhdHRyKSBcCisJJiYgKG5mYSktPm5mYV9sZW4gPD0gKGxlbikpCisjZGVmaW5lIE5GQV9ORVhUKG5mYSxhdHRybGVuKQkoKGF0dHJsZW4pIC09IE5GQV9BTElHTigobmZhKS0+bmZhX2xlbiksIFwKKwkoc3RydWN0IG5mYXR0ciAqKSgoKGNoYXIgKikobmZhKSkgKyBORkFfQUxJR04oKG5mYSktPm5mYV9sZW4pKSkKKyNkZWZpbmUgTkZBX0xFTkdUSChsZW4pCShORkFfQUxJR04oc2l6ZW9mKHN0cnVjdCBuZmF0dHIpKSArIChsZW4pKQorI2RlZmluZSBORkFfU1BBQ0UobGVuKQlORkFfQUxJR04oTkZBX0xFTkdUSChsZW4pKQorI2RlZmluZSBORkFfREFUQShuZmEpICAgKCh2b2lkICopKCgoY2hhciAqKShuZmEpKSArIE5GQV9MRU5HVEgoMCkpKQorI2RlZmluZSBORkFfUEFZTE9BRChuZmEpICgoaW50KSgobmZhKS0+bmZhX2xlbikgLSBORkFfTEVOR1RIKDApKQorI2RlZmluZSBORkFfTkVTVChza2IsIHR5cGUpIFwKKyh7CXN0cnVjdCBuZmF0dHIgKl9fc3RhcnQgPSAoc3RydWN0IG5mYXR0ciAqKXNrYl90YWlsX3BvaW50ZXIoc2tiKTsgXAorCU5GQV9QVVQoc2tiLCAoTkZOTF9ORkFfTkVTVCB8IHR5cGUpLCAwLCBOVUxMKTsgXAorCV9fc3RhcnQ7ICB9KQorI2RlZmluZSBORkFfTkVTVF9FTkQoc2tiLCBzdGFydCkgXAorKHsgICAgICAoc3RhcnQpLT5uZmFfbGVuID0gc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gKHVuc2lnbmVkIGNoYXIgKikoc3RhcnQpOyBcCisgICAgICAgIChza2IpLT5sZW47IH0pCisjZGVmaW5lIE5GQV9ORVNUX0NBTkNFTChza2IsIHN0YXJ0KSBcCisoeyAgICAgIGlmIChzdGFydCkgXAorICAgICAgICAgICAgICAgIHNrYl90cmltKHNrYiwgKHVuc2lnbmVkIGNoYXIgKikgKHN0YXJ0KSAtIChza2IpLT5kYXRhKTsgXAorICAgICAgICAtMTsgfSkKKworI2RlZmluZSBORk1fTkZBKG4pICAgICAgKChzdHJ1Y3QgbmZhdHRyICopKCgoY2hhciAqKShuKSkgXAorICAgICAgICArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgbmZnZW5tc2cpKSkpCisjZGVmaW5lIE5GTV9QQVlMT0FEKG4pICBOTE1TR19QQVlMT0FEKG4sIHNpemVvZihzdHJ1Y3QgbmZnZW5tc2cpKQorCisjZW5kaWYgLyogX05GTkVUTElOS19DT01QQVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTcxMWUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmgKQEAgLTAsMCArMSwxODQgQEAKKyNpZm5kZWYgX0lQQ09OTlRSQUNLX05FVExJTktfSAorI2RlZmluZSBfSVBDT05OVFJBQ0tfTkVUTElOS19ICisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oPgorCitlbnVtIGNudGxfbXNnX3R5cGVzIHsKKwlJUENUTkxfTVNHX0NUX05FVywKKwlJUENUTkxfTVNHX0NUX0dFVCwKKwlJUENUTkxfTVNHX0NUX0RFTEVURSwKKwlJUENUTkxfTVNHX0NUX0dFVF9DVFJaRVJPLAorCisJSVBDVE5MX01TR19NQVgKK307CisKK2VudW0gY3RubF9leHBfbXNnX3R5cGVzIHsKKwlJUENUTkxfTVNHX0VYUF9ORVcsCisJSVBDVE5MX01TR19FWFBfR0VULAorCUlQQ1ROTF9NU0dfRVhQX0RFTEVURSwKKworCUlQQ1ROTF9NU0dfRVhQX01BWAorfTsKKworCitlbnVtIGN0YXR0cl90eXBlIHsKKwlDVEFfVU5TUEVDLAorCUNUQV9UVVBMRV9PUklHLAorCUNUQV9UVVBMRV9SRVBMWSwKKwlDVEFfU1RBVFVTLAorCUNUQV9QUk9UT0lORk8sCisJQ1RBX0hFTFAsCisJQ1RBX05BVF9TUkMsCisjZGVmaW5lIENUQV9OQVQJQ1RBX05BVF9TUkMJLyogYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KKwlDVEFfVElNRU9VVCwKKwlDVEFfTUFSSywKKwlDVEFfQ09VTlRFUlNfT1JJRywKKwlDVEFfQ09VTlRFUlNfUkVQTFksCisJQ1RBX1VTRSwKKwlDVEFfSUQsCisJQ1RBX05BVF9EU1QsCisJQ1RBX1RVUExFX01BU1RFUiwKKwlDVEFfTkFUX1NFUV9BREpfT1JJRywKKwlDVEFfTkFUX1NFUV9BREpfUkVQTFksCisJQ1RBX1NFQ01BUkssCQkvKiBvYnNvbGV0ZSAqLworCUNUQV9aT05FLAorCUNUQV9TRUNDVFgsCisJX19DVEFfTUFYCit9OworI2RlZmluZSBDVEFfTUFYIChfX0NUQV9NQVggLSAxKQorCitlbnVtIGN0YXR0cl90dXBsZSB7CisJQ1RBX1RVUExFX1VOU1BFQywKKwlDVEFfVFVQTEVfSVAsCisJQ1RBX1RVUExFX1BST1RPLAorCV9fQ1RBX1RVUExFX01BWAorfTsKKyNkZWZpbmUgQ1RBX1RVUExFX01BWCAoX19DVEFfVFVQTEVfTUFYIC0gMSkKKworZW51bSBjdGF0dHJfaXAgeworCUNUQV9JUF9VTlNQRUMsCisJQ1RBX0lQX1Y0X1NSQywKKwlDVEFfSVBfVjRfRFNULAorCUNUQV9JUF9WNl9TUkMsCisJQ1RBX0lQX1Y2X0RTVCwKKwlfX0NUQV9JUF9NQVgKK307CisjZGVmaW5lIENUQV9JUF9NQVggKF9fQ1RBX0lQX01BWCAtIDEpCisKK2VudW0gY3RhdHRyX2w0cHJvdG8geworCUNUQV9QUk9UT19VTlNQRUMsCisJQ1RBX1BST1RPX05VTSwKKwlDVEFfUFJPVE9fU1JDX1BPUlQsCisJQ1RBX1BST1RPX0RTVF9QT1JULAorCUNUQV9QUk9UT19JQ01QX0lELAorCUNUQV9QUk9UT19JQ01QX1RZUEUsCisJQ1RBX1BST1RPX0lDTVBfQ09ERSwKKwlDVEFfUFJPVE9fSUNNUFY2X0lELAorCUNUQV9QUk9UT19JQ01QVjZfVFlQRSwKKwlDVEFfUFJPVE9fSUNNUFY2X0NPREUsCisJX19DVEFfUFJPVE9fTUFYCit9OworI2RlZmluZSBDVEFfUFJPVE9fTUFYIChfX0NUQV9QUk9UT19NQVggLSAxKQorCitlbnVtIGN0YXR0cl9wcm90b2luZm8geworCUNUQV9QUk9UT0lORk9fVU5TUEVDLAorCUNUQV9QUk9UT0lORk9fVENQLAorCUNUQV9QUk9UT0lORk9fRENDUCwKKwlDVEFfUFJPVE9JTkZPX1NDVFAsCisJX19DVEFfUFJPVE9JTkZPX01BWAorfTsKKyNkZWZpbmUgQ1RBX1BST1RPSU5GT19NQVggKF9fQ1RBX1BST1RPSU5GT19NQVggLSAxKQorCitlbnVtIGN0YXR0cl9wcm90b2luZm9fdGNwIHsKKwlDVEFfUFJPVE9JTkZPX1RDUF9VTlNQRUMsCisJQ1RBX1BST1RPSU5GT19UQ1BfU1RBVEUsCisJQ1RBX1BST1RPSU5GT19UQ1BfV1NDQUxFX09SSUdJTkFMLAorCUNUQV9QUk9UT0lORk9fVENQX1dTQ0FMRV9SRVBMWSwKKwlDVEFfUFJPVE9JTkZPX1RDUF9GTEFHU19PUklHSU5BTCwKKwlDVEFfUFJPVE9JTkZPX1RDUF9GTEFHU19SRVBMWSwKKwlfX0NUQV9QUk9UT0lORk9fVENQX01BWAorfTsKKyNkZWZpbmUgQ1RBX1BST1RPSU5GT19UQ1BfTUFYIChfX0NUQV9QUk9UT0lORk9fVENQX01BWCAtIDEpCisKK2VudW0gY3RhdHRyX3Byb3RvaW5mb19kY2NwIHsKKwlDVEFfUFJPVE9JTkZPX0RDQ1BfVU5TUEVDLAorCUNUQV9QUk9UT0lORk9fRENDUF9TVEFURSwKKwlDVEFfUFJPVE9JTkZPX0RDQ1BfUk9MRSwKKwlDVEFfUFJPVE9JTkZPX0RDQ1BfSEFORFNIQUtFX1NFUSwKKwlfX0NUQV9QUk9UT0lORk9fRENDUF9NQVgsCit9OworI2RlZmluZSBDVEFfUFJPVE9JTkZPX0RDQ1BfTUFYIChfX0NUQV9QUk9UT0lORk9fRENDUF9NQVggLSAxKQorCitlbnVtIGN0YXR0cl9wcm90b2luZm9fc2N0cCB7CisJQ1RBX1BST1RPSU5GT19TQ1RQX1VOU1BFQywKKwlDVEFfUFJPVE9JTkZPX1NDVFBfU1RBVEUsCisJQ1RBX1BST1RPSU5GT19TQ1RQX1ZUQUdfT1JJR0lOQUwsCisJQ1RBX1BST1RPSU5GT19TQ1RQX1ZUQUdfUkVQTFksCisJX19DVEFfUFJPVE9JTkZPX1NDVFBfTUFYCit9OworI2RlZmluZSBDVEFfUFJPVE9JTkZPX1NDVFBfTUFYIChfX0NUQV9QUk9UT0lORk9fU0NUUF9NQVggLSAxKQorCitlbnVtIGN0YXR0cl9jb3VudGVycyB7CisJQ1RBX0NPVU5URVJTX1VOU1BFQywKKwlDVEFfQ09VTlRFUlNfUEFDS0VUUywJCS8qIDY0Yml0IGNvdW50ZXJzICovCisJQ1RBX0NPVU5URVJTX0JZVEVTLAkJLyogNjRiaXQgY291bnRlcnMgKi8KKwlDVEFfQ09VTlRFUlMzMl9QQUNLRVRTLAkJLyogb2xkIDMyYml0IGNvdW50ZXJzLCB1bnVzZWQgKi8KKwlDVEFfQ09VTlRFUlMzMl9CWVRFUywJCS8qIG9sZCAzMmJpdCBjb3VudGVycywgdW51c2VkICovCisJX19DVEFfQ09VTlRFUlNfTUFYCit9OworI2RlZmluZSBDVEFfQ09VTlRFUlNfTUFYIChfX0NUQV9DT1VOVEVSU19NQVggLSAxKQorCitlbnVtIGN0YXR0cl9uYXQgeworCUNUQV9OQVRfVU5TUEVDLAorCUNUQV9OQVRfTUlOSVAsCisJQ1RBX05BVF9NQVhJUCwKKwlDVEFfTkFUX1BST1RPLAorCV9fQ1RBX05BVF9NQVgKK307CisjZGVmaW5lIENUQV9OQVRfTUFYIChfX0NUQV9OQVRfTUFYIC0gMSkKKworZW51bSBjdGF0dHJfcHJvdG9uYXQgeworCUNUQV9QUk9UT05BVF9VTlNQRUMsCisJQ1RBX1BST1RPTkFUX1BPUlRfTUlOLAorCUNUQV9QUk9UT05BVF9QT1JUX01BWCwKKwlfX0NUQV9QUk9UT05BVF9NQVgKK307CisjZGVmaW5lIENUQV9QUk9UT05BVF9NQVggKF9fQ1RBX1BST1RPTkFUX01BWCAtIDEpCisKK2VudW0gY3RhdHRyX25hdHNlcSB7CisJQ1RBX05BVF9TRVFfVU5TUEVDLAorCUNUQV9OQVRfU0VRX0NPUlJFQ1RJT05fUE9TLAorCUNUQV9OQVRfU0VRX09GRlNFVF9CRUZPUkUsCisJQ1RBX05BVF9TRVFfT0ZGU0VUX0FGVEVSLAorCV9fQ1RBX05BVF9TRVFfTUFYCit9OworI2RlZmluZSBDVEFfTkFUX1NFUV9NQVggKF9fQ1RBX05BVF9TRVFfTUFYIC0gMSkKKworZW51bSBjdGF0dHJfZXhwZWN0IHsKKwlDVEFfRVhQRUNUX1VOU1BFQywKKwlDVEFfRVhQRUNUX01BU1RFUiwKKwlDVEFfRVhQRUNUX1RVUExFLAorCUNUQV9FWFBFQ1RfTUFTSywKKwlDVEFfRVhQRUNUX1RJTUVPVVQsCisJQ1RBX0VYUEVDVF9JRCwKKwlDVEFfRVhQRUNUX0hFTFBfTkFNRSwKKwlDVEFfRVhQRUNUX1pPTkUsCisJQ1RBX0VYUEVDVF9GTEFHUywKKwlfX0NUQV9FWFBFQ1RfTUFYCit9OworI2RlZmluZSBDVEFfRVhQRUNUX01BWCAoX19DVEFfRVhQRUNUX01BWCAtIDEpCisKK2VudW0gY3RhdHRyX2hlbHAgeworCUNUQV9IRUxQX1VOU1BFQywKKwlDVEFfSEVMUF9OQU1FLAorCV9fQ1RBX0hFTFBfTUFYCit9OworI2RlZmluZSBDVEFfSEVMUF9NQVggKF9fQ1RBX0hFTFBfTUFYIC0gMSkKKworZW51bSBjdGF0dHJfc2VjY3R4IHsKKwlDVEFfU0VDQ1RYX1VOU1BFQywKKwlDVEFfU0VDQ1RYX05BTUUsCisJX19DVEFfU0VDQ1RYX01BWAorfTsKKyNkZWZpbmUgQ1RBX1NFQ0NUWF9NQVggKF9fQ1RBX1NFQ0NUWF9NQVggLSAxKQorCisjZW5kaWYgLyogX0lQQ09OTlRSQUNLX05FVExJTktfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTliOGQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmgKQEAgLTAsMCArMSw5NyBAQAorI2lmbmRlZiBfTkZORVRMSU5LX0xPR19ICisjZGVmaW5lIF9ORk5FVExJTktfTE9HX0gKKworLyogVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgbmV0bGluayBtZXNzYWdlcyAoaS5lLiAncHJvdG9jb2wgcGFja2V0cycpLAorICogYW5kIG5vdCBhbnkga2luZCBvZiBmdW5jdGlvbiBkZWZpbml0aW9ucy4gIEl0IGlzIHNoYXJlZCBiZXR3ZWVuIGtlcm5lbCBhbmQKKyAqIHVzZXJzcGFjZS4gIERvbid0IHB1dCBrZXJuZWwgc3BlY2lmaWMgc3R1ZmYgaW4gaGVyZSAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmg+CisKK2VudW0gbmZ1bG5sX21zZ190eXBlcyB7CisJTkZVTE5MX01TR19QQUNLRVQsCQkvKiBwYWNrZXQgZnJvbSBrZXJuZWwgdG8gdXNlcnNwYWNlICovCisJTkZVTE5MX01TR19DT05GSUcsCQkvKiBjb25uZWN0IHRvIGEgcGFydGljdWxhciBxdWV1ZSAqLworCisJTkZVTE5MX01TR19NQVgKK307CisKK3N0cnVjdCBuZnVsbmxfbXNnX3BhY2tldF9oZHIgeworCV9fYmUxNgkJaHdfcHJvdG9jb2w7CS8qIGh3IHByb3RvY29sIChuZXR3b3JrIG9yZGVyKSAqLworCV9fdTgJaG9vazsJCS8qIG5ldGZpbHRlciBob29rICovCisJX191OAlfcGFkOworfTsKKworc3RydWN0IG5mdWxubF9tc2dfcGFja2V0X2h3IHsKKwlfX2JlMTYJCWh3X2FkZHJsZW47CisJX191MTYJX3BhZDsKKwlfX3U4CWh3X2FkZHJbOF07Cit9OworCitzdHJ1Y3QgbmZ1bG5sX21zZ19wYWNrZXRfdGltZXN0YW1wIHsKKwlhbGlnbmVkX2JlNjQJc2VjOworCWFsaWduZWRfYmU2NAl1c2VjOworfTsKKworZW51bSBuZnVsbmxfYXR0cl90eXBlIHsKKwlORlVMQV9VTlNQRUMsCisJTkZVTEFfUEFDS0VUX0hEUiwKKwlORlVMQV9NQVJLLAkJCS8qIF9fdTMyIG5mbWFyayAqLworCU5GVUxBX1RJTUVTVEFNUCwJCS8qIG5mdWxubF9tc2dfcGFja2V0X3RpbWVzdGFtcCAqLworCU5GVUxBX0lGSU5ERVhfSU5ERVYsCQkvKiBfX3UzMiBpZmluZGV4ICovCisJTkZVTEFfSUZJTkRFWF9PVVRERVYsCQkvKiBfX3UzMiBpZmluZGV4ICovCisJTkZVTEFfSUZJTkRFWF9QSFlTSU5ERVYsCS8qIF9fdTMyIGlmaW5kZXggKi8KKwlORlVMQV9JRklOREVYX1BIWVNPVVRERVYsCS8qIF9fdTMyIGlmaW5kZXggKi8KKwlORlVMQV9IV0FERFIsCQkJLyogbmZ1bG5sX21zZ19wYWNrZXRfaHcgKi8KKwlORlVMQV9QQVlMT0FELAkJCS8qIG9wYXF1ZSBkYXRhIHBheWxvYWQgKi8KKwlORlVMQV9QUkVGSVgsCQkJLyogc3RyaW5nIHByZWZpeCAqLworCU5GVUxBX1VJRCwJCQkvKiB1c2VyIGlkIG9mIHNvY2tldCAqLworCU5GVUxBX1NFUSwJCQkvKiBpbnN0YW5jZS1sb2NhbCBzZXF1ZW5jZSBudW1iZXIgKi8KKwlORlVMQV9TRVFfR0xPQkFMLAkJLyogZ2xvYmFsIHNlcXVlbmNlIG51bWJlciAqLworCU5GVUxBX0dJRCwJCQkvKiBncm91cCBpZCBvZiBzb2NrZXQgKi8KKwlORlVMQV9IV1RZUEUsCQkJLyogaGFyZHdhcmUgdHlwZSAqLworCU5GVUxBX0hXSEVBREVSLAkJCS8qIGhhcmR3YXJlIGhlYWRlciAqLworCU5GVUxBX0hXTEVOLAkJCS8qIGhhcmR3YXJlIGhlYWRlciBsZW5ndGggKi8KKworCV9fTkZVTEFfTUFYCit9OworI2RlZmluZSBORlVMQV9NQVggKF9fTkZVTEFfTUFYIC0gMSkKKworZW51bSBuZnVsbmxfbXNnX2NvbmZpZ19jbWRzIHsKKwlORlVMTkxfQ0ZHX0NNRF9OT05FLAorCU5GVUxOTF9DRkdfQ01EX0JJTkQsCisJTkZVTE5MX0NGR19DTURfVU5CSU5ELAorCU5GVUxOTF9DRkdfQ01EX1BGX0JJTkQsCisJTkZVTE5MX0NGR19DTURfUEZfVU5CSU5ELAorfTsKKworc3RydWN0IG5mdWxubF9tc2dfY29uZmlnX2NtZCB7CisJX191OAljb21tYW5kOwkvKiBuZnVsbmxfbXNnX2NvbmZpZ19jbWRzICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IG5mdWxubF9tc2dfY29uZmlnX21vZGUgeworCV9fYmUzMgkJY29weV9yYW5nZTsKKwlfX3U4CWNvcHlfbW9kZTsKKwlfX3U4CV9wYWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworZW51bSBuZnVsbmxfYXR0cl9jb25maWcgeworCU5GVUxBX0NGR19VTlNQRUMsCisJTkZVTEFfQ0ZHX0NNRCwJCQkvKiBuZnVsbmxfbXNnX2NvbmZpZ19jbWQgKi8KKwlORlVMQV9DRkdfTU9ERSwJCQkvKiBuZnVsbmxfbXNnX2NvbmZpZ19tb2RlICovCisJTkZVTEFfQ0ZHX05MQlVGU0laLAkJLyogX191MzIgYnVmZmVyIHNpemUgKi8KKwlORlVMQV9DRkdfVElNRU9VVCwJCS8qIF9fdTMyIGluIDEvMTAwIHMgKi8KKwlORlVMQV9DRkdfUVRIUkVTSCwJCS8qIF9fdTMyICovCisJTkZVTEFfQ0ZHX0ZMQUdTLAkJLyogX191MTYgKi8KKwlfX05GVUxBX0NGR19NQVgKK307CisjZGVmaW5lIE5GVUxBX0NGR19NQVggKF9fTkZVTEFfQ0ZHX01BWCAtMSkKKworI2RlZmluZSBORlVMTkxfQ09QWV9OT05FCTB4MDAKKyNkZWZpbmUgTkZVTE5MX0NPUFlfTUVUQQkweDAxCisjZGVmaW5lIE5GVUxOTF9DT1BZX1BBQ0tFVAkweDAyCisvKiAweGZmIGlzIHJlc2VydmVkLCBkb24ndCB1c2UgaXQgZm9yIG5ldyBjb3B5IG1vZGVzLiAqLworCisjZGVmaW5lIE5GVUxOTF9DRkdfRl9TRVEJMHgwMDAxCisjZGVmaW5lIE5GVUxOTF9DRkdfRl9TRVFfR0xPQkFMCTB4MDAwMgorCisjZW5kaWYgLyogX05GTkVUTElOS19MT0dfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ1NWZlNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmgKQEAgLTAsMCArMSw5MCBAQAorI2lmbmRlZiBfTkZORVRMSU5LX1FVRVVFX0gKKyNkZWZpbmUgX05GTkVUTElOS19RVUVVRV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaD4KKworZW51bSBuZnFubF9tc2dfdHlwZXMgeworCU5GUU5MX01TR19QQUNLRVQsCQkvKiBwYWNrZXQgZnJvbSBrZXJuZWwgdG8gdXNlcnNwYWNlICovCisJTkZRTkxfTVNHX1ZFUkRJQ1QsCQkvKiB2ZXJkaWN0IGZyb20gdXNlcnNwYWNlIHRvIGtlcm5lbCAqLworCU5GUU5MX01TR19DT05GSUcsCQkvKiBjb25uZWN0IHRvIGEgcGFydGljdWxhciBxdWV1ZSAqLworCisJTkZRTkxfTVNHX01BWAorfTsKKworc3RydWN0IG5mcW5sX21zZ19wYWNrZXRfaGRyIHsKKwlfX2JlMzIJCXBhY2tldF9pZDsJLyogdW5pcXVlIElEIG9mIHBhY2tldCBpbiBxdWV1ZSAqLworCV9fYmUxNgkJaHdfcHJvdG9jb2w7CS8qIGh3IHByb3RvY29sIChuZXR3b3JrIG9yZGVyKSAqLworCV9fdTgJaG9vazsJCS8qIG5ldGZpbHRlciBob29rICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IG5mcW5sX21zZ19wYWNrZXRfaHcgeworCV9fYmUxNgkJaHdfYWRkcmxlbjsKKwlfX3UxNglfcGFkOworCV9fdTgJaHdfYWRkcls4XTsKK307CisKK3N0cnVjdCBuZnFubF9tc2dfcGFja2V0X3RpbWVzdGFtcCB7CisJYWxpZ25lZF9iZTY0CXNlYzsKKwlhbGlnbmVkX2JlNjQJdXNlYzsKK307CisKK2VudW0gbmZxbmxfYXR0cl90eXBlIHsKKwlORlFBX1VOU1BFQywKKwlORlFBX1BBQ0tFVF9IRFIsCisJTkZRQV9WRVJESUNUX0hEUiwJCS8qIG5mcW5sX21zZ192ZXJkaWN0X2hyZCAqLworCU5GUUFfTUFSSywJCQkvKiBfX3UzMiBuZm1hcmsgKi8KKwlORlFBX1RJTUVTVEFNUCwJCQkvKiBuZnFubF9tc2dfcGFja2V0X3RpbWVzdGFtcCAqLworCU5GUUFfSUZJTkRFWF9JTkRFViwJCS8qIF9fdTMyIGlmaW5kZXggKi8KKwlORlFBX0lGSU5ERVhfT1VUREVWLAkJLyogX191MzIgaWZpbmRleCAqLworCU5GUUFfSUZJTkRFWF9QSFlTSU5ERVYsCQkvKiBfX3UzMiBpZmluZGV4ICovCisJTkZRQV9JRklOREVYX1BIWVNPVVRERVYsCS8qIF9fdTMyIGlmaW5kZXggKi8KKwlORlFBX0hXQUREUiwJCQkvKiBuZnFubF9tc2dfcGFja2V0X2h3ICovCisJTkZRQV9QQVlMT0FELAkJCS8qIG9wYXF1ZSBkYXRhIHBheWxvYWQgKi8KKworCV9fTkZRQV9NQVgKK307CisjZGVmaW5lIE5GUUFfTUFYIChfX05GUUFfTUFYIC0gMSkKKworc3RydWN0IG5mcW5sX21zZ192ZXJkaWN0X2hkciB7CisJX19iZTMyIHZlcmRpY3Q7CisJX19iZTMyIGlkOworfTsKKworCitlbnVtIG5mcW5sX21zZ19jb25maWdfY21kcyB7CisJTkZRTkxfQ0ZHX0NNRF9OT05FLAorCU5GUU5MX0NGR19DTURfQklORCwKKwlORlFOTF9DRkdfQ01EX1VOQklORCwKKwlORlFOTF9DRkdfQ01EX1BGX0JJTkQsCisJTkZRTkxfQ0ZHX0NNRF9QRl9VTkJJTkQsCit9OworCitzdHJ1Y3QgbmZxbmxfbXNnX2NvbmZpZ19jbWQgeworCV9fdTgJY29tbWFuZDsJLyogbmZxbmxfbXNnX2NvbmZpZ19jbWRzICovCisJX191OAlfcGFkOworCV9fYmUxNgkJcGY7CQkvKiBBRl94eHggZm9yIFBGX1tVTl1CSU5EICovCit9OworCitlbnVtIG5mcW5sX2NvbmZpZ19tb2RlIHsKKwlORlFOTF9DT1BZX05PTkUsCisJTkZRTkxfQ09QWV9NRVRBLAorCU5GUU5MX0NPUFlfUEFDS0VULAorfTsKKworc3RydWN0IG5mcW5sX21zZ19jb25maWdfcGFyYW1zIHsKKwlfX2JlMzIJCWNvcHlfcmFuZ2U7CisJX191OAljb3B5X21vZGU7CS8qIGVudW0gbmZxbmxfY29uZmlnX21vZGUgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKK2VudW0gbmZxbmxfYXR0cl9jb25maWcgeworCU5GUUFfQ0ZHX1VOU1BFQywKKwlORlFBX0NGR19DTUQsCQkJLyogbmZxbmxfbXNnX2NvbmZpZ19jbWQgKi8KKwlORlFBX0NGR19QQVJBTVMsCQkvKiBuZnFubF9tc2dfY29uZmlnX3BhcmFtcyAqLworCU5GUUFfQ0ZHX1FVRVVFX01BWExFTiwJCS8qIF9fdTMyICovCisJX19ORlFBX0NGR19NQVgKK307CisjZGVmaW5lIE5GUUFfQ0ZHX01BWCAoX19ORlFBX0NGR19NQVgtMSkKKworI2VuZGlmIC8qIF9ORk5FVExJTktfUVVFVUVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMjA5NzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgKQEAgLTAsMCArMSwxODUgQEAKKyNpZm5kZWYgX1hfVEFCTEVTX0gKKyNkZWZpbmUgX1hfVEFCTEVTX0gKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIFhUX0ZVTkNUSU9OX01BWE5BTUVMRU4gMzAKKyNkZWZpbmUgWFRfRVhURU5TSU9OX01BWE5BTUVMRU4gMjkKKyNkZWZpbmUgWFRfVEFCTEVfTUFYTkFNRUxFTiAzMgorCitzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggeworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCV9fdTE2IG1hdGNoX3NpemU7CisKKwkJCS8qIFVzZWQgYnkgdXNlcnNwYWNlICovCisJCQljaGFyIG5hbWVbWFRfRVhURU5TSU9OX01BWE5BTUVMRU5dOworCQkJX191OCByZXZpc2lvbjsKKwkJfSB1c2VyOworCQlzdHJ1Y3QgeworCQkJX191MTYgbWF0Y2hfc2l6ZTsKKworCQkJLyogVXNlZCBpbnNpZGUgdGhlIGtlcm5lbCAqLworCQkJc3RydWN0IHh0X21hdGNoICptYXRjaDsKKwkJfSBrZXJuZWw7CisKKwkJLyogVG90YWwgbGVuZ3RoICovCisJCV9fdTE2IG1hdGNoX3NpemU7CisJfSB1OworCisJdW5zaWduZWQgY2hhciBkYXRhWzBdOworfTsKKworc3RydWN0IHh0X2VudHJ5X3RhcmdldCB7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX191MTYgdGFyZ2V0X3NpemU7CisKKwkJCS8qIFVzZWQgYnkgdXNlcnNwYWNlICovCisJCQljaGFyIG5hbWVbWFRfRVhURU5TSU9OX01BWE5BTUVMRU5dOworCQkJX191OCByZXZpc2lvbjsKKwkJfSB1c2VyOworCQlzdHJ1Y3QgeworCQkJX191MTYgdGFyZ2V0X3NpemU7CisKKwkJCS8qIFVzZWQgaW5zaWRlIHRoZSBrZXJuZWwgKi8KKwkJCXN0cnVjdCB4dF90YXJnZXQgKnRhcmdldDsKKwkJfSBrZXJuZWw7CisKKwkJLyogVG90YWwgbGVuZ3RoICovCisJCV9fdTE2IHRhcmdldF9zaXplOworCX0gdTsKKworCXVuc2lnbmVkIGNoYXIgZGF0YVswXTsKK307CisKKyNkZWZpbmUgWFRfVEFSR0VUX0lOSVQoX19uYW1lLCBfX3NpemUpCQkJCQkgICAgICAgXAorewkJCQkJCQkJCSAgICAgICBcCisJLnRhcmdldC51LnVzZXIgPSB7CQkJCQkJICAgICAgIFwKKwkJLnRhcmdldF9zaXplCT0gWFRfQUxJR04oX19zaXplKSwJCQkgICAgICAgXAorCQkubmFtZQkJPSBfX25hbWUsCQkJCSAgICAgICBcCisJfSwJCQkJCQkJCSAgICAgICBcCit9CisKK3N0cnVjdCB4dF9zdGFuZGFyZF90YXJnZXQgeworCXN0cnVjdCB4dF9lbnRyeV90YXJnZXQgdGFyZ2V0OworCWludCB2ZXJkaWN0OworfTsKKworc3RydWN0IHh0X2Vycm9yX3RhcmdldCB7CisJc3RydWN0IHh0X2VudHJ5X3RhcmdldCB0YXJnZXQ7CisJY2hhciBlcnJvcm5hbWVbWFRfRlVOQ1RJT05fTUFYTkFNRUxFTl07Cit9OworCisvKiBUaGUgYXJndW1lbnQgdG8gSVBUX1NPX0dFVF9SRVZJU0lPTl8qLiAgUmV0dXJucyBoaWdoZXN0IHJldmlzaW9uCisgKiBrZXJuZWwgc3VwcG9ydHMsIGlmID49IHJldmlzaW9uLiAqLworc3RydWN0IHh0X2dldF9yZXZpc2lvbiB7CisJY2hhciBuYW1lW1hUX0VYVEVOU0lPTl9NQVhOQU1FTEVOXTsKKwlfX3U4IHJldmlzaW9uOworfTsKKworLyogQ09OVElOVUUgdmVyZGljdCBmb3IgdGFyZ2V0cyAqLworI2RlZmluZSBYVF9DT05USU5VRSAweEZGRkZGRkZGCisKKy8qIEZvciBzdGFuZGFyZCB0YXJnZXQgKi8KKyNkZWZpbmUgWFRfUkVUVVJOICgtTkZfUkVQRUFUIC0gMSkKKworLyogdGhpcyBpcyBhIGR1bW15IHN0cnVjdHVyZSB0byBmaW5kIG91dCB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50IGZvciBhIHN0cnVjdAorICogY29udGFpbmluZyBhbGwgdGhlIGZ1bmRhbWVudGFsIGRhdGEgdHlwZXMgdGhhdCBhcmUgdXNlZCBpbiBpcHRfZW50cnksCisgKiBpcDZ0X2VudHJ5IGFuZCBhcnB0X2VudHJ5LiAgVGhpcyBzdWNrcywgYW5kIGl0IGlzIGEgaGFjay4gIEl0IHdpbGwgYmUgbXkKKyAqIHBlcnNvbmFsIHBsZWFzdXJlIHRvIHJlbW92ZSBpdCAtSFcKKyAqLworc3RydWN0IF94dF9hbGlnbiB7CisJX191OCB1ODsKKwlfX3UxNiB1MTY7CisJX191MzIgdTMyOworCV9fdTY0IHU2NDsKK307CisKKyNkZWZpbmUgWFRfQUxJR04ocykgX19BTElHTl9LRVJORUwoKHMpLCBfX2FsaWdub2ZfXyhzdHJ1Y3QgX3h0X2FsaWduKSkKKworLyogU3RhbmRhcmQgcmV0dXJuIHZlcmRpY3QsIG9yIGRvIGp1bXAuICovCisjZGVmaW5lIFhUX1NUQU5EQVJEX1RBUkdFVCAiIgorLyogRXJyb3IgdmVyZGljdC4gKi8KKyNkZWZpbmUgWFRfRVJST1JfVEFSR0VUICJFUlJPUiIKKworI2RlZmluZSBTRVRfQ09VTlRFUihjLGIscCkgZG8geyAoYykuYmNudCA9IChiKTsgKGMpLnBjbnQgPSAocCk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgQUREX0NPVU5URVIoYyxiLHApIGRvIHsgKGMpLmJjbnQgKz0gKGIpOyAoYykucGNudCArPSAocCk7IH0gd2hpbGUoMCkKKworc3RydWN0IHh0X2NvdW50ZXJzIHsKKwlfX3U2NCBwY250LCBiY250OwkJCS8qIFBhY2tldCBhbmQgYnl0ZSBjb3VudGVycyAqLworfTsKKworLyogVGhlIGFyZ3VtZW50IHRvIElQVF9TT19BRERfQ09VTlRFUlMuICovCitzdHJ1Y3QgeHRfY291bnRlcnNfaW5mbyB7CisJLyogV2hpY2ggdGFibGUuICovCisJY2hhciBuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU5dOworCisJdW5zaWduZWQgaW50IG51bV9jb3VudGVyczsKKworCS8qIFRoZSBjb3VudGVycyAoYWN0dWFsbHkgYG51bWJlcicgb2YgdGhlc2UpLiAqLworCXN0cnVjdCB4dF9jb3VudGVycyBjb3VudGVyc1swXTsKK307CisKKyNkZWZpbmUgWFRfSU5WX1BST1RPCQkweDQwCS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgUFJPVE8uICovCisKKy8qIGZuIHJldHVybnMgMCB0byBjb250aW51ZSBpdGVyYXRpb24gKi8KKyNkZWZpbmUgWFRfTUFUQ0hfSVRFUkFURSh0eXBlLCBlLCBmbiwgYXJncy4uLikJCQlcCisoewkJCQkJCQkJXAorCXVuc2lnbmVkIGludCBfX2k7CQkJCQlcCisJaW50IF9fcmV0ID0gMDsJCQkJCQlcCisJc3RydWN0IHh0X2VudHJ5X21hdGNoICpfX207CQkJCVwKKwkJCQkJCQkJXAorCWZvciAoX19pID0gc2l6ZW9mKHR5cGUpOwkJCQlcCisJICAgICBfX2kgPCAoZSktPnRhcmdldF9vZmZzZXQ7CQkJCVwKKwkgICAgIF9faSArPSBfX20tPnUubWF0Y2hfc2l6ZSkgewkJCVwKKwkJX19tID0gKHZvaWQgKillICsgX19pOwkJCQlcCisJCQkJCQkJCVwKKwkJX19yZXQgPSBmbihfX20gLCAjIyBhcmdzKTsJCQlcCisJCWlmIChfX3JldCAhPSAwKQkJCQkJXAorCQkJYnJlYWs7CQkJCQlcCisJfQkJCQkJCQlcCisJX19yZXQ7CQkJCQkJCVwKK30pCisKKy8qIGZuIHJldHVybnMgMCB0byBjb250aW51ZSBpdGVyYXRpb24gKi8KKyNkZWZpbmUgWFRfRU5UUllfSVRFUkFURV9DT05USU5VRSh0eXBlLCBlbnRyaWVzLCBzaXplLCBuLCBmbiwgYXJncy4uLikgXAorKHsJCQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgX19pLCBfX247CQkJCQlcCisJaW50IF9fcmV0ID0gMDsJCQkJCQlcCisJdHlwZSAqX19lbnRyeTsJCQkJCQlcCisJCQkJCQkJCVwKKwlmb3IgKF9faSA9IDAsIF9fbiA9IDA7IF9faSA8IChzaXplKTsJCQlcCisJICAgICBfX2kgKz0gX19lbnRyeS0+bmV4dF9vZmZzZXQsIF9fbisrKSB7IAkJXAorCQlfX2VudHJ5ID0gKHZvaWQgKikoZW50cmllcykgKyBfX2k7CQlcCisJCWlmIChfX24gPCBuKQkJCQkJXAorCQkJY29udGludWU7CQkJCVwKKwkJCQkJCQkJXAorCQlfX3JldCA9IGZuKF9fZW50cnkgLCAjIyBhcmdzKTsJCQlcCisJCWlmIChfX3JldCAhPSAwKQkJCQkJXAorCQkJYnJlYWs7CQkJCQlcCisJfQkJCQkJCQlcCisJX19yZXQ7CQkJCQkJCVwKK30pCisKKy8qIGZuIHJldHVybnMgMCB0byBjb250aW51ZSBpdGVyYXRpb24gKi8KKyNkZWZpbmUgWFRfRU5UUllfSVRFUkFURSh0eXBlLCBlbnRyaWVzLCBzaXplLCBmbiwgYXJncy4uLikgXAorCVhUX0VOVFJZX0lURVJBVEVfQ09OVElOVUUodHlwZSwgZW50cmllcywgc2l6ZSwgMCwgZm4sIGFyZ3MpCisKKworLyogcG9zIGlzIG5vcm1hbGx5IGEgc3RydWN0IGlwdF9lbnRyeS9pcDZ0X2VudHJ5L2V0Yy4gKi8KKyNkZWZpbmUgeHRfZW50cnlfZm9yZWFjaChwb3MsIGVoZWFkLCBlc2l6ZSkgXAorCWZvciAoKHBvcykgPSAodHlwZW9mKHBvcykpKGVoZWFkKTsgXAorCSAgICAgKHBvcykgPCAodHlwZW9mKHBvcykpKChjaGFyICopKGVoZWFkKSArIChlc2l6ZSkpOyBcCisJICAgICAocG9zKSA9ICh0eXBlb2YocG9zKSkoKGNoYXIgKikocG9zKSArIChwb3MpLT5uZXh0X29mZnNldCkpCisKKy8qIGNhbiBvbmx5IGJlIHh0X2VudHJ5X21hdGNoLCBzbyBubyB1c2Ugb2YgdHlwZW9mIGhlcmUgKi8KKyNkZWZpbmUgeHRfZW1hdGNoX2ZvcmVhY2gocG9zLCBlbnRyeSkgXAorCWZvciAoKHBvcykgPSAoc3RydWN0IHh0X2VudHJ5X21hdGNoICopZW50cnktPmVsZW1zOyBcCisJICAgICAocG9zKSA8IChzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKikoKGNoYXIgKikoZW50cnkpICsgXAorCSAgICAgICAgICAgICAoZW50cnkpLT50YXJnZXRfb2Zmc2V0KTsgXAorCSAgICAgKHBvcykgPSAoc3RydWN0IHh0X2VudHJ5X21hdGNoICopKChjaGFyICopKHBvcykgKyBcCisJICAgICAgICAgICAgIChwb3MpLT51Lm1hdGNoX3NpemUpKQorCisKKyNlbmRpZiAvKiBfWF9UQUJMRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DSEVDS1NVTS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DSEVDS1NVTS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMmU0NjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NIRUNLU1VNLmgKQEAgLTAsMCArMSwyMCBAQAorLyogSGVhZGVyIGZpbGUgZm9yIGlwdGFibGVzIGlwdF9DSEVDS1NVTSB0YXJnZXQKKyAqCisgKiAoQykgMjAwMiBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPgorICogKEMpIDIwMTAgUmVkIEhhdCBJbmMKKyAqIEF1dGhvcjogTWljaGFlbCBTLiBUc2lya2luIDxtc3RAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIEdOVSBHUEwgdjIsIDE5OTEKKyovCisjaWZuZGVmIF9YVF9DSEVDS1NVTV9UQVJHRVRfSAorI2RlZmluZSBfWFRfQ0hFQ0tTVU1fVEFSR0VUX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgWFRfQ0hFQ0tTVU1fT1BfRklMTAkweDAxCS8qIGZpbGwgaW4gY2hlY2tzdW0gaW4gSVAgaGVhZGVyICovCisKK3N0cnVjdCB4dF9DSEVDS1NVTV9pbmZvIHsKKwlfX3U4IG9wZXJhdGlvbjsJLyogYml0c2V0IG9mIG9wZXJhdGlvbnMgKi8KK307CisKKyNlbmRpZiAvKiBfWFRfQ0hFQ0tTVU1fVEFSR0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ0xBU1NJRlkuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ0xBU1NJRlkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODEzYmYxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DTEFTU0lGWS5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX1hUX0NMQVNTSUZZX0gKKyNkZWZpbmUgX1hUX0NMQVNTSUZZX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCB4dF9jbGFzc2lmeV90YXJnZXRfaW5mbyB7CisJX191MzIgcHJpb3JpdHk7Cit9OworCisjZW5kaWYgLypfWFRfQ0xBU1NJRllfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OTUFSSy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OTUFSSy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMmU0OGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5NQVJLLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9YVF9DT05OTUFSS19IX3RhcmdldAorI2RlZmluZSBfWFRfQ09OTk1BUktfSF90YXJnZXQKKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9jb25ubWFyay5oPgorCisjZW5kaWYgLypfWFRfQ09OTk1BUktfSF90YXJnZXQqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NzNmZjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBfWFRfQ09OTlNFQ01BUktfSF90YXJnZXQKKyNkZWZpbmUgX1hUX0NPTk5TRUNNQVJLX0hfdGFyZ2V0CisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitlbnVtIHsKKwlDT05OU0VDTUFSS19TQVZFID0gMSwKKwlDT05OU0VDTUFSS19SRVNUT1JFLAorfTsKKworc3RydWN0IHh0X2Nvbm5zZWNtYXJrX3RhcmdldF9pbmZvIHsKKwlfX3U4IG1vZGU7Cit9OworCisjZW5kaWYgLypfWFRfQ09OTlNFQ01BUktfSF90YXJnZXQgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ1QuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ1QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjU2NDEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DVC5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgX1hUX0NUX0gKKyNkZWZpbmUgX1hUX0NUX0gKKworI2RlZmluZSBYVF9DVF9OT1RSQUNLCTB4MQorCitzdHJ1Y3QgeHRfY3RfdGFyZ2V0X2luZm8geworCXVfaW50MTZfdAlmbGFnczsKKwl1X2ludDE2X3QJem9uZTsKKwl1X2ludDMyX3QJY3RfZXZlbnRzOworCXVfaW50MzJfdAlleHBfZXZlbnRzOworCWNoYXIJCWhlbHBlclsxNl07CisKKwkvKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCAqLworCXN0cnVjdCBuZl9jb25uCSpjdCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7Cit9OworCisjZW5kaWYgLyogX1hUX0NUX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfRFNDUC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9EU0NQLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ4ZTBiMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfRFNDUC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qIHhfdGFibGVzIG1vZHVsZSBmb3Igc2V0dGluZyB0aGUgSVB2NC9JUHY2IERTQ1AgZmllbGQKKyAqCisgKiAoQykgMjAwMiBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPgorICogYmFzZWQgb24gaXB0X0ZUT1MuYyAoQykgMjAwMCBieSBNYXR0aGV3IEcuIE1hcnNoIDxtZ21AcGFrdHJvbml4LmNvbT4KKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgR05VIEdQTCB2MiwgMTk5MQorICoKKyAqIFNlZSBSRkMyNDc0IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBEU0NQIGZpZWxkIHdpdGhpbiB0aGUgSVAgSGVhZGVyLgorICoKKyAqIHh0X0RTQ1AuaCx2IDEuNyAyMDAyLzAzLzE0IDEyOjAzOjEzIGxhZm9yZ2UgRXhwCisqLworI2lmbmRlZiBfWFRfRFNDUF9UQVJHRVRfSAorI2RlZmluZSBfWFRfRFNDUF9UQVJHRVRfSAorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9kc2NwLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogdGFyZ2V0IGluZm8gKi8KK3N0cnVjdCB4dF9EU0NQX2luZm8geworCV9fdTggZHNjcDsKK307CisKK3N0cnVjdCB4dF90b3NfdGFyZ2V0X2luZm8geworCV9fdTggdG9zX3ZhbHVlOworCV9fdTggdG9zX21hc2s7Cit9OworCisjZW5kaWYgLyogX1hUX0RTQ1BfVEFSR0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOGFlOTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9JRExFVElNRVIuaAorICoKKyAqIEhlYWRlciBmaWxlIGZvciBYdGFibGVzIHRpbWVyIHRhcmdldCBtb2R1bGUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKiBXcml0dGVuIGJ5IFRpbW8gVGVyYXMgPGV4dC10aW1vLnRlcmFzQG5va2lhLmNvbT4KKyAqCisgKiBDb252ZXJ0ZWQgdG8geF90YWJsZXMgYW5kIGZvcndhcmQtcG9ydGVkIHRvIDIuNi4zNAorICogYnkgTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaWZuZGVmIF9YVF9JRExFVElNRVJfSAorI2RlZmluZSBfWFRfSURMRVRJTUVSX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgTUFYX0lETEVUSU1FUl9MQUJFTF9TSVpFIDI4CisKK3N0cnVjdCBpZGxldGltZXJfdGdfaW5mbyB7CisJX191MzIgdGltZW91dDsKKworCWNoYXIgbGFiZWxbTUFYX0lETEVUSU1FUl9MQUJFTF9TSVpFXTsKKworCS8qIGZvciBrZXJuZWwgbW9kdWxlIGludGVybmFsIHVzZSBvbmx5ICovCisJc3RydWN0IGlkbGV0aW1lcl90ZyAqdGltZXIgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0xFRC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9MRUQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTUwOWU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9MRUQuaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIF9YVF9MRURfSAorI2RlZmluZSBfWFRfTEVEX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCB4dF9sZWRfaW5mbyB7CisJY2hhciBpZFsyN107ICAgICAgICAvKiBVbmlxdWUgSUQgZm9yIHRoaXMgdHJpZ2dlciBpbiB0aGUgTEVEIGNsYXNzICovCisJX191OCBhbHdheXNfYmxpbms7ICAvKiBCbGluayBldmVuIGlmIHRoZSBMRUQgaXMgYWxyZWFkeSBvbiAqLworCV9fdTMyIGRlbGF5OyAgICAgICAgLyogRGVsYXkgdW50aWwgTEVEIGlzIHN3aXRjaGVkIG9mZiBhZnRlciB0cmlnZ2VyICovCisKKwkvKiBLZXJuZWwgZGF0YSB1c2VkIGluIHRoZSBtb2R1bGUgKi8KKwl2b2lkICppbnRlcm5hbF9kYXRhIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKK307CisKKyNlbmRpZiAvKiBfWFRfTEVEX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTUFSSy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9NQVJLLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFjNDU2ZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTUFSSy5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfWFRfTUFSS19IX3RhcmdldAorI2RlZmluZSBfWFRfTUFSS19IX3RhcmdldAorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X21hcmsuaD4KKworI2VuZGlmIC8qX1hUX01BUktfSF90YXJnZXQgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTkZMT0cuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTkZMT0cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2I1ODMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORkxPRy5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgX1hUX05GTE9HX1RBUkdFVAorI2RlZmluZSBfWFRfTkZMT0dfVEFSR0VUCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIFhUX05GTE9HX0RFRkFVTFRfR1JPVVAJCTB4MQorI2RlZmluZSBYVF9ORkxPR19ERUZBVUxUX1RIUkVTSE9MRAkwCisKKyNkZWZpbmUgWFRfTkZMT0dfTUFTSwkJCTB4MAorCitzdHJ1Y3QgeHRfbmZsb2dfaW5mbyB7CisJX191MzIJbGVuOworCV9fdTE2CWdyb3VwOworCV9fdTE2CXRocmVzaG9sZDsKKwlfX3UxNglmbGFnczsKKwlfX3UxNglwYWQ7CisJY2hhcgkJcHJlZml4WzY0XTsKK307CisKKyNlbmRpZiAvKiBfWFRfTkZMT0dfVEFSR0VUICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X05GUVVFVUUuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTkZRVUVVRS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ODRmNGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X05GUVVFVUUuaApAQCAtMCwwICsxLDIzIEBACisvKiBpcHRhYmxlcyBtb2R1bGUgZm9yIHVzaW5nIE5GUVVFVUUgbWVjaGFuaXNtCisgKgorICogKEMpIDIwMDUgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB1bmRlciBHTlUgR1BMIHYyLCAxOTkxCisgKiAKKyovCisjaWZuZGVmIF9YVF9ORlFfVEFSR0VUX0gKKyNkZWZpbmUgX1hUX05GUV9UQVJHRVRfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogdGFyZ2V0IGluZm8gKi8KK3N0cnVjdCB4dF9ORlFfaW5mbyB7CisJX191MTYgcXVldWVudW07Cit9OworCitzdHJ1Y3QgeHRfTkZRX2luZm9fdjEgeworCV9fdTE2IHF1ZXVlbnVtOworCV9fdTE2IHF1ZXVlc190b3RhbDsKK307CisKKyNlbmRpZiAvKiBfWFRfTkZRX1RBUkdFVF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfUkFURUVTVC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MDVlMjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIF9YVF9SQVRFRVNUX1RBUkdFVF9ICisjZGVmaW5lIF9YVF9SQVRFRVNUX1RBUkdFVF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgeHRfcmF0ZWVzdF90YXJnZXRfaW5mbyB7CisJY2hhcgkJCW5hbWVbSUZOQU1TSVpdOworCV9fczgJCQlpbnRlcnZhbDsKKwlfX3U4CQlld21hX2xvZzsKKworCS8qIFVzZWQgaW50ZXJuYWxseSBieSB0aGUga2VybmVsICovCisJc3RydWN0IHh0X3JhdGVlc3QJKmVzdCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7Cit9OworCisjZW5kaWYgLyogX1hUX1JBVEVFU1RfVEFSR0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9TRUNNQVJLLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg5MDkyYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgX1hUX1NFQ01BUktfSF90YXJnZXQKKyNkZWZpbmUgX1hUX1NFQ01BUktfSF90YXJnZXQKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBUaGlzIGlzIGludGVuZGVkIGZvciB1c2UgYnkgdmFyaW91cyBzZWN1cml0eSBzdWJzeXN0ZW1zIChidXQgbm90CisgKiBhdCB0aGUgc2FtZSB0aW1lKS4KKyAqCisgKiAnbW9kZScgcmVmZXJzIHRvIHRoZSBzcGVjaWZpYyBzZWN1cml0eSBzdWJzeXN0ZW0gd2hpY2ggdGhlCisgKiBwYWNrZXRzIGFyZSBiZWluZyBtYXJrZWQgZm9yLgorICovCisjZGVmaW5lIFNFQ01BUktfTU9ERV9TRUwJMHgwMQkJLyogU0VMaW51eCAqLworI2RlZmluZSBTRUNNQVJLX1NFQ0NUWF9NQVgJMjU2CisKK3N0cnVjdCB4dF9zZWNtYXJrX3RhcmdldF9pbmZvIHsKKwlfX3U4IG1vZGU7CisJX191MzIgc2VjaWQ7CisJY2hhciBzZWNjdHhbU0VDTUFSS19TRUNDVFhfTUFYXTsKK307CisKKyNlbmRpZiAvKl9YVF9TRUNNQVJLX0hfdGFyZ2V0ICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1RDUE1TUy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9UQ1BNU1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTY5NjBhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9UQ1BNU1MuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9YVF9UQ1BNU1NfSAorI2RlZmluZSBfWFRfVENQTVNTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCB4dF90Y3Btc3NfaW5mbyB7CisJX191MTYgbXNzOworfTsKKworI2RlZmluZSBYVF9UQ1BNU1NfQ0xBTVBfUE1UVSAweGZmZmYKKworI2VuZGlmIC8qIF9YVF9UQ1BNU1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9UQ1BPUFRTVFJJUC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9UQ1BPUFRTVFJJUC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkYjU0MzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1RDUE9QVFNUUklQLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfWFRfVENQT1BUU1RSSVBfSAorI2RlZmluZSBfWFRfVENQT1BUU1RSSVBfSAorCisjZGVmaW5lIHRjcG9wdHN0cmlwX3NldF9iaXQoYm1hcCwgaWR4KSBcCisJKGJtYXBbKGlkeCkgPj4gNV0gfD0gMVUgPDwgKGlkeCAmIDMxKSkKKyNkZWZpbmUgdGNwb3B0c3RyaXBfdGVzdF9iaXQoYm1hcCwgaWR4KSBcCisJKCgoMVUgPDwgKGlkeCAmIDMxKSkgJiBibWFwWyhpZHgpID4+IDVdKSAhPSAwKQorCitzdHJ1Y3QgeHRfdGNwb3B0c3RyaXBfdGFyZ2V0X2luZm8geworCXVfaW50MzJfdCBzdHJpcF9ibWFwWzhdOworfTsKKworI2VuZGlmIC8qIF9YVF9UQ1BPUFRTVFJJUF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1RFRS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9URUUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzIxZDVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9URUUuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9YVF9URUVfVEFSR0VUX0gKKyNkZWZpbmUgX1hUX1RFRV9UQVJHRVRfSAorCitzdHJ1Y3QgeHRfdGVlX3RnaW5mbyB7CisJdW5pb24gbmZfaW5ldF9hZGRyIGd3OworCWNoYXIgb2lmWzE2XTsKKworCS8qIHVzZWQgaW50ZXJuYWxseSBieSB0aGUga2VybmVsICovCisJc3RydWN0IHh0X3RlZV9wcml2ICpwcml2IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKK307CisKKyNlbmRpZiAvKiBfWFRfVEVFX1RBUkdFVF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1RQUk9YWS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9UUFJPWFkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjNkNjkzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9UUFJPWFkuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIF9YVF9UUFJPWFlfSAorI2RlZmluZSBfWFRfVFBST1hZX0gKKworLyogVFBST1hZIHRhcmdldCBpcyBjYXBhYmxlIG9mIG1hcmtpbmcgdGhlIHBhY2tldCB0byBwZXJmb3JtCisgKiByZWRpcmVjdGlvbi4gV2UgY2FuIGdldCByaWQgb2YgdGhhdCB3aGVuZXZlciB3ZSBnZXQgc3VwcG9ydCBmb3IKKyAqIG11dGxpcGxlIHRhcmdldHMgaW4gdGhlIHNhbWUgcnVsZS4gKi8KK3N0cnVjdCB4dF90cHJveHlfdGFyZ2V0X2luZm8geworCXVfaW50MzJfdCBtYXJrX21hc2s7CisJdV9pbnQzMl90IG1hcmtfdmFsdWU7CisJX19iZTMyIGxhZGRyOworCV9fYmUxNiBscG9ydDsKK307CisKK3N0cnVjdCB4dF90cHJveHlfdGFyZ2V0X2luZm9fdjEgeworCXVfaW50MzJfdCBtYXJrX21hc2s7CisJdV9pbnQzMl90IG1hcmtfdmFsdWU7CisJdW5pb24gbmZfaW5ldF9hZGRyIGxhZGRyOworCV9fYmUxNiBscG9ydDsKK307CisKKyNlbmRpZiAvKiBfWFRfVFBST1hZX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY2x1c3Rlci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jbHVzdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg2NjgyNgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY2x1c3Rlci5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgX1hUX0NMVVNURVJfTUFUQ0hfSAorI2RlZmluZSBfWFRfQ0xVU1RFUl9NQVRDSF9ICisKK2VudW0geHRfY2x1c3Rlcl9mbGFncyB7CisJWFRfQ0xVU1RFUl9GX0lOVgk9ICgxIDw8IDApCit9OworCitzdHJ1Y3QgeHRfY2x1c3Rlcl9tYXRjaF9pbmZvIHsKKwl1X2ludDMyX3QJCXRvdGFsX25vZGVzOworCXVfaW50MzJfdAkJbm9kZV9tYXNrOworCXVfaW50MzJfdAkJaGFzaF9zZWVkOworCXVfaW50MzJfdAkJZmxhZ3M7Cit9OworCisjZGVmaW5lIFhUX0NMVVNURVJfTk9ERVNfTUFYCTMyCisKKyNlbmRpZiAvKiBfWFRfQ0xVU1RFUl9NQVRDSF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2NvbW1lbnQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29tbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhY2ZlZGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2NvbW1lbnQuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9YVF9DT01NRU5UX0gKKyNkZWZpbmUgX1hUX0NPTU1FTlRfSAorCisjZGVmaW5lIFhUX01BWF9DT01NRU5UX0xFTiAyNTYKKworc3RydWN0IHh0X2NvbW1lbnRfaW5mbyB7CisJdW5zaWduZWQgY2hhciBjb21tZW50W1hUX01BWF9DT01NRU5UX0xFTl07Cit9OworCisjZW5kaWYgLyogWFRfQ09NTUVOVF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5ieXRlcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25uYnl0ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmZjYmIwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25uYnl0ZXMuaApAQCAtMCwwICsxLDI2IEBACisjaWZuZGVmIF9YVF9DT05OQllURVNfSAorI2RlZmluZSBfWFRfQ09OTkJZVEVTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK2VudW0geHRfY29ubmJ5dGVzX3doYXQgeworCVhUX0NPTk5CWVRFU19QS1RTLAorCVhUX0NPTk5CWVRFU19CWVRFUywKKwlYVF9DT05OQllURVNfQVZHUEtULAorfTsKKworZW51bSB4dF9jb25uYnl0ZXNfZGlyZWN0aW9uIHsKKwlYVF9DT05OQllURVNfRElSX09SSUdJTkFMLAorCVhUX0NPTk5CWVRFU19ESVJfUkVQTFksCisJWFRfQ09OTkJZVEVTX0RJUl9CT1RILAorfTsKKworc3RydWN0IHh0X2Nvbm5ieXRlc19pbmZvIHsKKwlzdHJ1Y3QgeworCQlhbGlnbmVkX3U2NCBmcm9tOwkvKiBjb3VudCB0byBiZSBtYXRjaGVkICovCisJCWFsaWduZWRfdTY0IHRvOwkJLyogY291bnQgdG8gYmUgbWF0Y2hlZCAqLworCX0gY291bnQ7CisJX191OCB3aGF0OwkJLyogaXB0X2Nvbm5ieXRlc193aGF0ICovCisJX191OCBkaXJlY3Rpb247CS8qIGlwdF9jb25uYnl0ZXNfZGlyZWN0aW9uICovCit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5saW1pdC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25ubGltaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmE1NGU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25ubGltaXQuaApAQCAtMCwwICsxLDIwIEBACisjaWZuZGVmIF9YVF9DT05OTElNSVRfSAorI2RlZmluZSBfWFRfQ09OTkxJTUlUX0gKKworc3RydWN0IHh0X2Nvbm5saW1pdF9kYXRhOworCitzdHJ1Y3QgeHRfY29ubmxpbWl0X2luZm8geworCXVuaW9uIHsKKwkJdW5pb24gbmZfaW5ldF9hZGRyIG1hc2s7CisJCXVuaW9uIHsKKwkJCV9fYmUzMiB2NF9tYXNrOworCQkJX19iZTMyIHY2X21hc2tbNF07CisJCX07CisJfTsKKwl1bnNpZ25lZCBpbnQgbGltaXQsIGludmVyc2U7CisKKwkvKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCAqLworCXN0cnVjdCB4dF9jb25ubGltaXRfZGF0YSAqZGF0YSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7Cit9OworCisjZW5kaWYgLyogX1hUX0NPTk5MSU1JVF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZjMTdhOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubm1hcmsuaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIF9YVF9DT05OTUFSS19ICisjZGVmaW5lIF9YVF9DT05OTUFSS19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBDb3B5cmlnaHQgKEMpIDIwMDIsMjAwNCBNQVJBIFN5c3RlbXMgQUIgPGh0dHA6Ly93d3cubWFyYXN5c3RlbXMuY29tPgorICogYnkgSGVucmlrIE5vcmRzdHJvbSA8aG5vQG1hcmFzeXN0ZW1zLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKK2VudW0geworCVhUX0NPTk5NQVJLX1NFVCA9IDAsCisJWFRfQ09OTk1BUktfU0FWRSwKKwlYVF9DT05OTUFSS19SRVNUT1JFCit9OworCitzdHJ1Y3QgeHRfY29ubm1hcmtfdGdpbmZvMSB7CisJX191MzIgY3RtYXJrLCBjdG1hc2ssIG5mbWFzazsKKwlfX3U4IG1vZGU7Cit9OworCitzdHJ1Y3QgeHRfY29ubm1hcmtfbXRpbmZvMSB7CisJX191MzIgbWFyaywgbWFzazsKKwlfX3U4IGludmVydDsKK307CisKKyNlbmRpZiAvKl9YVF9DT05OTUFSS19IKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZjQ3YTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qIEhlYWRlciBmaWxlIGZvciBrZXJuZWwgbW9kdWxlIHRvIG1hdGNoIGNvbm5lY3Rpb24gdHJhY2tpbmcgaW5mb3JtYXRpb24uCisgKiBHUEwgKEMpIDIwMDEgIE1hcmMgQm91Y2hlciAobWFyY0BtYnNpLmNhKS4KKyAqLworCisjaWZuZGVmIF9YVF9DT05OVFJBQ0tfSAorI2RlZmluZSBfWFRfQ09OTlRSQUNLX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZV9jb21tb24uaD4KKworI2RlZmluZSBYVF9DT05OVFJBQ0tfU1RBVEVfQklUKGN0aW5mbykgKDEgPDwgKChjdGluZm8pJUlQX0NUX0lTX1JFUExZKzEpKQorI2RlZmluZSBYVF9DT05OVFJBQ0tfU1RBVEVfSU5WQUxJRCAoMSA8PCAwKQorCisjZGVmaW5lIFhUX0NPTk5UUkFDS19TVEFURV9TTkFUICgxIDw8IChJUF9DVF9OVU1CRVIgKyAxKSkKKyNkZWZpbmUgWFRfQ09OTlRSQUNLX1NUQVRFX0ROQVQgKDEgPDwgKElQX0NUX05VTUJFUiArIDIpKQorI2RlZmluZSBYVF9DT05OVFJBQ0tfU1RBVEVfVU5UUkFDS0VEICgxIDw8IChJUF9DVF9OVU1CRVIgKyAzKSkKKworLyogZmxhZ3MsIGludmZsYWdzOiAqLworZW51bSB7CisJWFRfQ09OTlRSQUNLX1NUQVRFICAgICAgICA9IDEgPDwgMCwKKwlYVF9DT05OVFJBQ0tfUFJPVE8gICAgICAgID0gMSA8PCAxLAorCVhUX0NPTk5UUkFDS19PUklHU1JDICAgICAgPSAxIDw8IDIsCisJWFRfQ09OTlRSQUNLX09SSUdEU1QgICAgICA9IDEgPDwgMywKKwlYVF9DT05OVFJBQ0tfUkVQTFNSQyAgICAgID0gMSA8PCA0LAorCVhUX0NPTk5UUkFDS19SRVBMRFNUICAgICAgPSAxIDw8IDUsCisJWFRfQ09OTlRSQUNLX1NUQVRVUyAgICAgICA9IDEgPDwgNiwKKwlYVF9DT05OVFJBQ0tfRVhQSVJFUyAgICAgID0gMSA8PCA3LAorCVhUX0NPTk5UUkFDS19PUklHU1JDX1BPUlQgPSAxIDw8IDgsCisJWFRfQ09OTlRSQUNLX09SSUdEU1RfUE9SVCA9IDEgPDwgOSwKKwlYVF9DT05OVFJBQ0tfUkVQTFNSQ19QT1JUID0gMSA8PCAxMCwKKwlYVF9DT05OVFJBQ0tfUkVQTERTVF9QT1JUID0gMSA8PCAxMSwKKwlYVF9DT05OVFJBQ0tfRElSRUNUSU9OICAgID0gMSA8PCAxMiwKK307CisKK3N0cnVjdCB4dF9jb25udHJhY2tfbXRpbmZvMSB7CisJdW5pb24gbmZfaW5ldF9hZGRyIG9yaWdzcmNfYWRkciwgb3JpZ3NyY19tYXNrOworCXVuaW9uIG5mX2luZXRfYWRkciBvcmlnZHN0X2FkZHIsIG9yaWdkc3RfbWFzazsKKwl1bmlvbiBuZl9pbmV0X2FkZHIgcmVwbHNyY19hZGRyLCByZXBsc3JjX21hc2s7CisJdW5pb24gbmZfaW5ldF9hZGRyIHJlcGxkc3RfYWRkciwgcmVwbGRzdF9tYXNrOworCV9fdTMyIGV4cGlyZXNfbWluLCBleHBpcmVzX21heDsKKwlfX3UxNiBsNHByb3RvOworCV9fYmUxNiBvcmlnc3JjX3BvcnQsIG9yaWdkc3RfcG9ydDsKKwlfX2JlMTYgcmVwbHNyY19wb3J0LCByZXBsZHN0X3BvcnQ7CisJX191MTYgbWF0Y2hfZmxhZ3MsIGludmVydF9mbGFnczsKKwlfX3U4IHN0YXRlX21hc2ssIHN0YXR1c19tYXNrOworfTsKKworc3RydWN0IHh0X2Nvbm50cmFja19tdGluZm8yIHsKKwl1bmlvbiBuZl9pbmV0X2FkZHIgb3JpZ3NyY19hZGRyLCBvcmlnc3JjX21hc2s7CisJdW5pb24gbmZfaW5ldF9hZGRyIG9yaWdkc3RfYWRkciwgb3JpZ2RzdF9tYXNrOworCXVuaW9uIG5mX2luZXRfYWRkciByZXBsc3JjX2FkZHIsIHJlcGxzcmNfbWFzazsKKwl1bmlvbiBuZl9pbmV0X2FkZHIgcmVwbGRzdF9hZGRyLCByZXBsZHN0X21hc2s7CisJX191MzIgZXhwaXJlc19taW4sIGV4cGlyZXNfbWF4OworCV9fdTE2IGw0cHJvdG87CisJX19iZTE2IG9yaWdzcmNfcG9ydCwgb3JpZ2RzdF9wb3J0OworCV9fYmUxNiByZXBsc3JjX3BvcnQsIHJlcGxkc3RfcG9ydDsKKwlfX3UxNiBtYXRjaF9mbGFncywgaW52ZXJ0X2ZsYWdzOworCV9fdTE2IHN0YXRlX21hc2ssIHN0YXR1c19tYXNrOworfTsKKworI2VuZGlmIC8qX1hUX0NPTk5UUkFDS19IKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY3B1LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2NwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYzdmMTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2NwdS5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgX1hUX0NQVV9ICisjZGVmaW5lIF9YVF9DUFVfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHh0X2NwdV9pbmZvIHsKKwlfX3UzMgljcHU7CisJX191MzIJaW52ZXJ0OworfTsKKworI2VuZGlmIC8qX1hUX0NQVV9IKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZGNjcC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9kY2NwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU3OWUxYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZGNjcC5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX1hUX0RDQ1BfSF8KKyNkZWZpbmUgX1hUX0RDQ1BfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgWFRfRENDUF9TUkNfUE9SVFMJICAgICAgICAweDAxCisjZGVmaW5lIFhUX0RDQ1BfREVTVF9QT1JUUwkgICAgICAgIDB4MDIKKyNkZWZpbmUgWFRfRENDUF9UWVBFCQkJMHgwNAorI2RlZmluZSBYVF9EQ0NQX09QVElPTgkJCTB4MDgKKworI2RlZmluZSBYVF9EQ0NQX1ZBTElEX0ZMQUdTCQkweDBmCisKK3N0cnVjdCB4dF9kY2NwX2luZm8geworCV9fdTE2IGRwdHNbMl07ICAvKiBNaW4sIE1heCAqLworCV9fdTE2IHNwdHNbMl07ICAvKiBNaW4sIE1heCAqLworCisJX191MTYgZmxhZ3M7CisJX191MTYgaW52ZmxhZ3M7CisKKwlfX3UxNiB0eXBlbWFzazsKKwlfX3U4IG9wdGlvbjsKK307CisKKyNlbmRpZiAvKiBfWFRfRENDUF9IXyAqLworCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2RzY3AuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZHNjcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1Zjg5MzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2RzY3AuaApAQCAtMCwwICsxLDMxIEBACisvKiB4X3RhYmxlcyBtb2R1bGUgZm9yIG1hdGNoaW5nIHRoZSBJUHY0L0lQdjYgRFNDUCBmaWVsZAorICoKKyAqIChDKSAyMDAyIEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBnbnVtb25rcy5vcmc+CisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIEdOVSBHUEwgdjIsIDE5OTEKKyAqCisgKiBTZWUgUkZDMjQ3NCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgRFNDUCBmaWVsZCB3aXRoaW4gdGhlIElQIEhlYWRlci4KKyAqCisgKiB4dF9kc2NwLmgsdiAxLjMgMjAwMi8wOC8wNSAxOTowMDoyMSBsYWZvcmdlIEV4cAorKi8KKyNpZm5kZWYgX1hUX0RTQ1BfSAorI2RlZmluZSBfWFRfRFNDUF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIFhUX0RTQ1BfTUFTSwkweGZjCS8qIDExMTExMTAwICovCisjZGVmaW5lIFhUX0RTQ1BfU0hJRlQJMgorI2RlZmluZSBYVF9EU0NQX01BWAkweDNmCS8qIDAwMTExMTExICovCisKKy8qIG1hdGNoIGluZm8gKi8KK3N0cnVjdCB4dF9kc2NwX2luZm8geworCV9fdTggZHNjcDsKKwlfX3U4IGludmVydDsKK307CisKK3N0cnVjdCB4dF90b3NfbWF0Y2hfaW5mbyB7CisJX191OCB0b3NfbWFzazsKKwlfX3U4IHRvc192YWx1ZTsKKwlfX3U4IGludmVydDsKK307CisKKyNlbmRpZiAvKiBfWFRfRFNDUF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2VzcC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9lc3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTY4ODI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9lc3AuaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIF9YVF9FU1BfSAorI2RlZmluZSBfWFRfRVNQX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCB4dF9lc3AgeworCV9fdTMyIHNwaXNbMl07CS8qIFNlY3VyaXR5IFBhcmFtZXRlciBJbmRleCAqLworCV9fdTggIGludmZsYWdzOwkvKiBJbnZlcnNlIGZsYWdzICovCit9OworCisvKiBWYWx1ZXMgZm9yICJpbnZmbGFncyIgZmllbGQgaW4gc3RydWN0IHh0X2VzcC4gKi8KKyNkZWZpbmUgWFRfRVNQX0lOVl9TUEkJMHgwMQkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIHNwaS4gKi8KKyNkZWZpbmUgWFRfRVNQX0lOVl9NQVNLCTB4MDEJLyogQWxsIHBvc3NpYmxlIGZsYWdzLiAqLworCisjZW5kaWYgLypfWFRfRVNQX0gqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9oYXNobGltaXQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE5MjViNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmgKQEAgLTAsMCArMSw2OCBAQAorI2lmbmRlZiBfWFRfSEFTSExJTUlUX0gKKyNkZWZpbmUgX1hUX0hBU0hMSU1JVF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiB0aW1pbmdzIGFyZSBpbiBtaWxsaXNlY29uZHMuICovCisjZGVmaW5lIFhUX0hBU0hMSU1JVF9TQ0FMRSAxMDAwMAorLyogMS8xMCwwMDAgc2VjIHBlcmlvZCA9PiBtYXggb2YgMTAsMDAwL3NlYy4gIE1pbiByYXRlIGlzIHRoZW4gNDI5NDkwCisgICBzZWNvbmRzLCBvciBvbmUgZXZlcnkgNTkgaG91cnMuICovCisKKy8qIGRldGFpbHMgb2YgdGhpcyBzdHJ1Y3R1cmUgaGlkZGVuIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiAqLworc3RydWN0IHh0X2hhc2hsaW1pdF9odGFibGU7CisKK2VudW0geworCVhUX0hBU0hMSU1JVF9IQVNIX0RJUCA9IDEgPDwgMCwKKwlYVF9IQVNITElNSVRfSEFTSF9EUFQgPSAxIDw8IDEsCisJWFRfSEFTSExJTUlUX0hBU0hfU0lQID0gMSA8PCAyLAorCVhUX0hBU0hMSU1JVF9IQVNIX1NQVCA9IDEgPDwgMywKKwlYVF9IQVNITElNSVRfSU5WRVJUICAgPSAxIDw8IDQsCit9OworCitzdHJ1Y3QgaGFzaGxpbWl0X2NmZyB7CisJX191MzIgbW9kZTsJICAvKiBiaXRtYXNrIG9mIFhUX0hBU0hMSU1JVF9IQVNIXyogKi8KKwlfX3UzMiBhdmc7ICAgIC8qIEF2ZXJhZ2Ugc2VjcyBiZXR3ZWVuIHBhY2tldHMgKiBzY2FsZSAqLworCV9fdTMyIGJ1cnN0OyAgLyogUGVyaW9kIG11bHRpcGxpZXIgZm9yIHVwcGVyIGxpbWl0LiAqLworCisJLyogdXNlciBzcGVjaWZpZWQgKi8KKwlfX3UzMiBzaXplOwkJLyogaG93IG1hbnkgYnVja2V0cyAqLworCV9fdTMyIG1heDsJCS8qIG1heCBudW1iZXIgb2YgZW50cmllcyAqLworCV9fdTMyIGdjX2ludGVydmFsOwkvKiBnYyBpbnRlcnZhbCAqLworCV9fdTMyIGV4cGlyZTsJLyogd2hlbiBkbyBlbnRyaWVzIGV4cGlyZT8gKi8KK307CisKK3N0cnVjdCB4dF9oYXNobGltaXRfaW5mbyB7CisJY2hhciBuYW1lIFtJRk5BTVNJWl07CQkvKiBuYW1lICovCisJc3RydWN0IGhhc2hsaW1pdF9jZmcgY2ZnOworCisJLyogVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBrZXJuZWwgKi8KKwlzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSAqaGluZm87CisJdW5pb24geworCQl2b2lkICpwdHI7CisJCXN0cnVjdCB4dF9oYXNobGltaXRfaW5mbyAqbWFzdGVyOworCX0gdTsKK307CisKK3N0cnVjdCBoYXNobGltaXRfY2ZnMSB7CisJX191MzIgbW9kZTsJICAvKiBiaXRtYXNrIG9mIFhUX0hBU0hMSU1JVF9IQVNIXyogKi8KKwlfX3UzMiBhdmc7ICAgIC8qIEF2ZXJhZ2Ugc2VjcyBiZXR3ZWVuIHBhY2tldHMgKiBzY2FsZSAqLworCV9fdTMyIGJ1cnN0OyAgLyogUGVyaW9kIG11bHRpcGxpZXIgZm9yIHVwcGVyIGxpbWl0LiAqLworCisJLyogdXNlciBzcGVjaWZpZWQgKi8KKwlfX3UzMiBzaXplOwkJLyogaG93IG1hbnkgYnVja2V0cyAqLworCV9fdTMyIG1heDsJCS8qIG1heCBudW1iZXIgb2YgZW50cmllcyAqLworCV9fdTMyIGdjX2ludGVydmFsOwkvKiBnYyBpbnRlcnZhbCAqLworCV9fdTMyIGV4cGlyZTsJLyogd2hlbiBkbyBlbnRyaWVzIGV4cGlyZT8gKi8KKworCV9fdTggc3JjbWFzaywgZHN0bWFzazsKK307CisKK3N0cnVjdCB4dF9oYXNobGltaXRfbXRpbmZvMSB7CisJY2hhciBuYW1lW0lGTkFNU0laXTsKKwlzdHJ1Y3QgaGFzaGxpbWl0X2NmZzEgY2ZnOworCisJLyogVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBrZXJuZWwgKi8KKwlzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSAqaGluZm8gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOworfTsKKworI2VuZGlmIC8qX1hUX0hBU0hMSU1JVF9IKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaGVscGVyLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2hlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNDI3NjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2hlbHBlci5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfWFRfSEVMUEVSX0gKKyNkZWZpbmUgX1hUX0hFTFBFUl9ICisKK3N0cnVjdCB4dF9oZWxwZXJfaW5mbyB7CisJaW50IGludmVydDsKKwljaGFyIG5hbWVbMzBdOworfTsKKyNlbmRpZiAvKiBfWFRfSEVMUEVSX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaXByYW5nZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9pcHJhbmdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFmMjFhNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaXByYW5nZS5oCkBAIC0wLDAgKzEsMTkgQEAKKyNpZm5kZWYgX0xJTlVYX05FVEZJTFRFUl9YVF9JUFJBTkdFX0gKKyNkZWZpbmUgX0xJTlVYX05FVEZJTFRFUl9YVF9JUFJBTkdFX0ggMQorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworZW51bSB7CisJSVBSQU5HRV9TUkMgICAgID0gMSA8PCAwLAkvKiBtYXRjaCBzb3VyY2UgSVAgYWRkcmVzcyAqLworCUlQUkFOR0VfRFNUICAgICA9IDEgPDwgMSwJLyogbWF0Y2ggZGVzdGluYXRpb24gSVAgYWRkcmVzcyAqLworCUlQUkFOR0VfU1JDX0lOViA9IDEgPDwgNCwJLyogbmVnYXRlIHRoZSBjb25kaXRpb24gKi8KKwlJUFJBTkdFX0RTVF9JTlYgPSAxIDw8IDUsCS8qIC0iLSAqLworfTsKKworc3RydWN0IHh0X2lwcmFuZ2VfbXRpbmZvIHsKKwl1bmlvbiBuZl9pbmV0X2FkZHIgc3JjX21pbiwgc3JjX21heDsKKwl1bmlvbiBuZl9pbmV0X2FkZHIgZHN0X21pbiwgZHN0X21heDsKKwlfX3U4IGZsYWdzOworfTsKKworI2VuZGlmIC8qIF9MSU5VWF9ORVRGSUxURVJfWFRfSVBSQU5HRV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2lwdnMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaXB2cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZjM0YWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2lwdnMuaApAQCAtMCwwICsxLDI5IEBACisjaWZuZGVmIF9YVF9JUFZTX0gKKyNkZWZpbmUgX1hUX0lQVlNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworZW51bSB7CisJWFRfSVBWU19JUFZTX1BST1BFUlRZID0JMSA8PCAwLCAvKiBhbGwgb3RoZXIgb3B0aW9ucyBpbXBseSB0aGlzIG9uZSAqLworCVhUX0lQVlNfUFJPVE8gPQkJMSA8PCAxLAorCVhUX0lQVlNfVkFERFIgPQkJMSA8PCAyLAorCVhUX0lQVlNfVlBPUlQgPQkJMSA8PCAzLAorCVhUX0lQVlNfRElSID0JCTEgPDwgNCwKKwlYVF9JUFZTX01FVEhPRCA9CTEgPDwgNSwKKwlYVF9JUFZTX1ZQT1JUQ1RMID0JMSA8PCA2LAorCVhUX0lQVlNfTUFTSyA9CQkoMSA8PCA3KSAtIDEsCisJWFRfSVBWU19PTkNFX01BU0sgPQlYVF9JUFZTX01BU0sgJiB+WFRfSVBWU19JUFZTX1BST1BFUlRZCit9OworCitzdHJ1Y3QgeHRfaXB2c19tdGluZm8geworCXVuaW9uIG5mX2luZXRfYWRkcgl2YWRkciwgdm1hc2s7CisJX19iZTE2CQkJdnBvcnQ7CisJX191OAkJCWw0cHJvdG87CisJX191OAkJCWZ3ZF9tZXRob2Q7CisJX19iZTE2CQkJdnBvcnRjdGw7CisKKwlfX3U4CQkJaW52ZXJ0OworCV9fdTgJCQliaXRtYXNrOworfTsKKworI2VuZGlmIC8qIF9YVF9JUFZTX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbGVuZ3RoLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2xlbmd0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MmVkN2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2xlbmd0aC5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgX1hUX0xFTkdUSF9ICisjZGVmaW5lIF9YVF9MRU5HVEhfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHh0X2xlbmd0aF9pbmZvIHsKKyAgICBfX3UxNgltaW4sIG1heDsKKyAgICBfX3U4CWludmVydDsKK307CisKKyNlbmRpZiAvKl9YVF9MRU5HVEhfSCovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2xpbWl0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2xpbWl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI0N2ZjNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbGltaXQuaApAQCAtMCwwICsxLDI0IEBACisjaWZuZGVmIF9YVF9SQVRFX0gKKyNkZWZpbmUgX1hUX1JBVEVfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogdGltaW5ncyBhcmUgaW4gbWlsbGlzZWNvbmRzLiAqLworI2RlZmluZSBYVF9MSU1JVF9TQ0FMRSAxMDAwMAorCitzdHJ1Y3QgeHRfbGltaXRfcHJpdjsKKworLyogMS8xMCwwMDAgc2VjIHBlcmlvZCA9PiBtYXggb2YgMTAsMDAwL3NlYy4gIE1pbiByYXRlIGlzIHRoZW4gNDI5NDkwCisgICBzZWNvbmRzLCBvciBvbmUgZXZlcnkgNTkgaG91cnMuICovCitzdHJ1Y3QgeHRfcmF0ZWluZm8geworCV9fdTMyIGF2ZzsgICAgLyogQXZlcmFnZSBzZWNzIGJldHdlZW4gcGFja2V0cyAqIHNjYWxlICovCisJX191MzIgYnVyc3Q7ICAvKiBQZXJpb2QgbXVsdGlwbGllciBmb3IgdXBwZXIgbGltaXQuICovCisKKwkvKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCAqLworCXVuc2lnbmVkIGxvbmcgcHJldjsgLyogbW92ZWQgdG8geHRfbGltaXRfcHJpdiAqLworCV9fdTMyIGNyZWRpdDsgLyogbW92ZWQgdG8geHRfbGltaXRfcHJpdiAqLworCV9fdTMyIGNyZWRpdF9jYXAsIGNvc3Q7CisKKwlzdHJ1Y3QgeHRfbGltaXRfcHJpdiAqbWFzdGVyOworfTsKKyNlbmRpZiAvKl9YVF9SQVRFX0gqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9tYWMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg5MmNkYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbWFjLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIF9YVF9NQUNfSAorI2RlZmluZSBfWFRfTUFDX0gKKworc3RydWN0IHh0X21hY19pbmZvIHsKKyAgICB1bnNpZ25lZCBjaGFyIHNyY2FkZHJbRVRIX0FMRU5dOworICAgIGludCBpbnZlcnQ7Cit9OworI2VuZGlmIC8qX1hUX01BQ19IKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbWFyay5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9tYXJrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNhZGM0MAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbWFyay5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgX1hUX01BUktfSAorI2RlZmluZSBfWFRfTUFSS19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgeHRfbWFya190Z2luZm8yIHsKKwlfX3UzMiBtYXJrLCBtYXNrOworfTsKKworc3RydWN0IHh0X21hcmtfbXRpbmZvMSB7CisJX191MzIgbWFyaywgbWFzazsKKwlfX3U4IGludmVydDsKK307CisKKyNlbmRpZiAvKl9YVF9NQVJLX0gqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9tdWx0aXBvcnQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI3ZTcyZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmgKQEAgLTAsMCArMSwyOSBAQAorI2lmbmRlZiBfWFRfTVVMVElQT1JUX0gKKyNkZWZpbmUgX1hUX01VTFRJUE9SVF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitlbnVtIHh0X211bHRpcG9ydF9mbGFncyB7CisJWFRfTVVMVElQT1JUX1NPVVJDRSwKKwlYVF9NVUxUSVBPUlRfREVTVElOQVRJT04sCisJWFRfTVVMVElQT1JUX0VJVEhFUgorfTsKKworI2RlZmluZSBYVF9NVUxUSV9QT1JUUwkxNQorCisvKiBNdXN0IGZpdCBpbnNpZGUgdW5pb24geHRfbWF0Y2hpbmZvOiAxNiBieXRlcyAqLworc3RydWN0IHh0X211bHRpcG9ydCB7CisJX191OCBmbGFnczsJCQkJLyogVHlwZSBvZiBjb21wYXJpc29uICovCisJX191OCBjb3VudDsJCQkJLyogTnVtYmVyIG9mIHBvcnRzICovCisJX191MTYgcG9ydHNbWFRfTVVMVElfUE9SVFNdOwkvKiBQb3J0cyAqLworfTsKKworc3RydWN0IHh0X211bHRpcG9ydF92MSB7CisJX191OCBmbGFnczsJCQkJLyogVHlwZSBvZiBjb21wYXJpc29uICovCisJX191OCBjb3VudDsJCQkJLyogTnVtYmVyIG9mIHBvcnRzICovCisJX191MTYgcG9ydHNbWFRfTVVMVElfUE9SVFNdOwkvKiBQb3J0cyAqLworCV9fdTggcGZsYWdzW1hUX01VTFRJX1BPUlRTXTsJLyogUG9ydCBmbGFncyAqLworCV9fdTggaW52ZXJ0OwkJCS8qIEludmVydCBmbGFnICovCit9OworCisjZW5kaWYgLypfWFRfTVVMVElQT1JUX0gqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9vc2YuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfb3NmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThhZmE0OQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfb3NmLmgKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMrIEV2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm14dC5ydT4KKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9YVF9PU0ZfSAorI2RlZmluZSBfWFRfT1NGX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgTUFYR0VOUkVMRU4JCTMyCisKKyNkZWZpbmUgWFRfT1NGX0dFTlJFCQkoMTw8MCkKKyNkZWZpbmUJWFRfT1NGX1RUTAkJKDE8PDEpCisjZGVmaW5lIFhUX09TRl9MT0cJCSgxPDwyKQorI2RlZmluZSBYVF9PU0ZfSU5WRVJUCQkoMTw8MykKKworI2RlZmluZSBYVF9PU0ZfTE9HTEVWRUxfQUxMCTAJLyogbG9nIGFsbCBtYXRjaGVkIGZpbmdlcnByaW50cyAqLworI2RlZmluZSBYVF9PU0ZfTE9HTEVWRUxfRklSU1QJMQkvKiBsb2cgb25seSB0aGUgZmlyc3QgbWF0Y2VkIGZpbmdlcnByaW50ICovCisjZGVmaW5lIFhUX09TRl9MT0dMRVZFTF9BTExfS05PV04JMiAvKiBkbyBub3QgbG9nIHVua25vd24gcGFja2V0cyAqLworCisjZGVmaW5lIFhUX09TRl9UVExfVFJVRQkJMAkvKiBUcnVlIGlwIGFuZCBmaW5nZXJwcmludCBUVEwgY29tcGFyaXNvbiAqLworI2RlZmluZSBYVF9PU0ZfVFRMX0xFU1MJCTEJLyogQ2hlY2sgaWYgaXAgVFRMIGlzIGxlc3MgdGhhbiBmaW5nZXJwcmludCBvbmUgKi8KKyNkZWZpbmUgWFRfT1NGX1RUTF9OT0NIRUNLCTIJLyogRG8gbm90IGNvbXBhcmUgaXAgYW5kIGZpbmdlcnByaW50IFRUTCBhdCBhbGwgKi8KKworc3RydWN0IHh0X29zZl9pbmZvIHsKKwljaGFyCQkJZ2VucmVbTUFYR0VOUkVMRU5dOworCV9fdTMyCQkJbGVuOworCV9fdTMyCQkJZmxhZ3M7CisJX191MzIJCQlsb2dsZXZlbDsKKwlfX3UzMgkJCXR0bDsKK307CisKKy8qCisgKiBXaWxkY2FyZCBNU1MgKGtpbmQgb2YpLgorICogSXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgYSBzdGF0ZSBtYWNoaW5lIGZvciB0aGUgZGlmZmVyZW50IHdpbGRjYXJkIHZhbHVlcworICogb2YgdGhlIE1TUyBhbmQgd2luZG93IHNpemVzLgorICovCitzdHJ1Y3QgeHRfb3NmX3djIHsKKwlfX3UzMgkJCXdjOworCV9fdTMyCQkJdmFsOworfTsKKworLyoKKyAqIFRoaXMgc3RydWN0IHJlcHJlc2VudHMgSUFOQSBvcHRpb25zCisgKiBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL3RjcC1wYXJhbWV0ZXJzCisgKi8KK3N0cnVjdCB4dF9vc2Zfb3B0IHsKKwlfX3UxNgkJCWtpbmQsIGxlbmd0aDsKKwlzdHJ1Y3QgeHRfb3NmX3djCXdjOworfTsKKworc3RydWN0IHh0X29zZl91c2VyX2ZpbmdlciB7CisJc3RydWN0IHh0X29zZl93Ywl3c3M7CisKKwlfX3U4CQkJdHRsLCBkZjsKKwlfX3UxNgkJCXNzLCBtc3M7CisJX191MTYJCQlvcHRfbnVtOworCisJY2hhcgkJCWdlbnJlW01BWEdFTlJFTEVOXTsKKwljaGFyCQkJdmVyc2lvbltNQVhHRU5SRUxFTl07CisJY2hhcgkJCXN1YnR5cGVbTUFYR0VOUkVMRU5dOworCisJLyogTUFYX0lQT1BUTEVOIGlzIG1heGltdW0gaWYgYWxsIG9wdGlvbnMgYXJlIE5PUHMgb3IgRU9McyAqLworCXN0cnVjdCB4dF9vc2Zfb3B0CW9wdFtNQVhfSVBPUFRMRU5dOworfTsKKworc3RydWN0IHh0X29zZl9ubG1zZyB7CisJc3RydWN0IHh0X29zZl91c2VyX2ZpbmdlcglmOworCXN0cnVjdCBpcGhkcgkJaXA7CisJc3RydWN0IHRjcGhkcgkJdGNwOworfTsKKworLyogRGVmaW5lcyBmb3IgSUFOQSBvcHRpb24ga2luZHMgKi8KKworZW51bSBpYW5hX29wdGlvbnMgeworCU9TRk9QVF9FT0wgPSAwLAkJLyogRW5kIG9mIG9wdGlvbnMgKi8KKwlPU0ZPUFRfTk9QLCAJCS8qIE5PUCAqLworCU9TRk9QVF9NU1MsIAkJLyogTWF4aW11bSBzZWdtZW50IHNpemUgKi8KKwlPU0ZPUFRfV1NPLCAJCS8qIFdpbmRvdyBzY2FsZSBvcHRpb24gKi8KKwlPU0ZPUFRfU0FDS1AsCQkvKiBTQUNLIHBlcm1pdHRlZCAqLworCU9TRk9QVF9TQUNLLAkJLyogU0FDSyAqLworCU9TRk9QVF9FQ0hPLAorCU9TRk9QVF9FQ0hPUkVQTFksCisJT1NGT1BUX1RTLAkJLyogVGltZXN0YW1wIG9wdGlvbiAqLworCU9TRk9QVF9QT0NQLAkJLyogUGFydGlhbCBPcmRlciBDb25uZWN0aW9uIFBlcm1pdHRlZCAqLworCU9TRk9QVF9QT1NQLAkJLyogUGFydGlhbCBPcmRlciBTZXJ2aWNlIFByb2ZpbGUgKi8KKworCS8qIE90aGVycyBhcmUgbm90IHVzZWQgaW4gdGhlIGN1cnJlbnQgT1NGICovCisJT1NGT1BUX0VNUFRZID0gMjU1LAorfTsKKworLyoKKyAqIEluaXRpYWwgd2luZG93IHNpemUgb3B0aW9uIHN0YXRlIG1hY2hpbmU6IG11bHRpcGxlIG9mIG1zcywgbXR1IG9yCisgKiBwbGFpbiBudW1lcmljIHZhbHVlLiBDYW4gYWxzbyBiZSBtYWRlIGFzIHBsYWluIG51bWVyaWMgdmFsdWUgd2hpY2gKKyAqIGlzIG5vdCBhIG11bHRpcGxlIG9mIHNwZWNpZmllZCB2YWx1ZS4KKyAqLworZW51bSB4dF9vc2Zfd2luZG93X3NpemVfb3B0aW9ucyB7CisJT1NGX1dTU19QTEFJTgk9IDAsCisJT1NGX1dTU19NU1MsCisJT1NGX1dTU19NVFUsCisJT1NGX1dTU19NT0RVTE8sCisJT1NGX1dTU19NQVgsCit9OworCisvKgorICogQWRkL3JlbW92ZSBmaW5nZXJwcmludCBmcm9tIHRoZSBrZXJuZWwuCisgKi8KK2VudW0geHRfb3NmX21zZ190eXBlcyB7CisJT1NGX01TR19BREQsCisJT1NGX01TR19SRU1PVkUsCisJT1NGX01TR19NQVgsCit9OworCitlbnVtIHh0X29zZl9hdHRyX3R5cGUgeworCU9TRl9BVFRSX1VOU1BFQywKKwlPU0ZfQVRUUl9GSU5HRVIsCisJT1NGX0FUVFJfTUFYLAorfTsKKworI2VuZGlmCQkJCS8qIF9YVF9PU0ZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9vd25lci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9vd25lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwODE3NjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X293bmVyLmgKQEAgLTAsMCArMSwxOCBAQAorI2lmbmRlZiBfWFRfT1dORVJfTUFUQ0hfSAorI2RlZmluZSBfWFRfT1dORVJfTUFUQ0hfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworZW51bSB7CisJWFRfT1dORVJfVUlEICAgID0gMSA8PCAwLAorCVhUX09XTkVSX0dJRCAgICA9IDEgPDwgMSwKKwlYVF9PV05FUl9TT0NLRVQgPSAxIDw8IDIsCit9OworCitzdHJ1Y3QgeHRfb3duZXJfbWF0Y2hfaW5mbyB7CisJX191MzIgdWlkX21pbiwgdWlkX21heDsKKwlfX3UzMiBnaWRfbWluLCBnaWRfbWF4OworCV9fdTggbWF0Y2gsIGludmVydDsKK307CisKKyNlbmRpZiAvKiBfWFRfT1dORVJfTUFUQ0hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9waHlzZGV2LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDUzNjYwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9waHlzZGV2LmgKQEAgLTAsMCArMSwyMyBAQAorI2lmbmRlZiBfWFRfUEhZU0RFVl9ICisjZGVmaW5lIF9YVF9QSFlTREVWX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKworI2RlZmluZSBYVF9QSFlTREVWX09QX0lOCQkweDAxCisjZGVmaW5lIFhUX1BIWVNERVZfT1BfT1VUCQkweDAyCisjZGVmaW5lIFhUX1BIWVNERVZfT1BfQlJJREdFRAkJMHgwNAorI2RlZmluZSBYVF9QSFlTREVWX09QX0lTSU4JCTB4MDgKKyNkZWZpbmUgWFRfUEhZU0RFVl9PUF9JU09VVAkJMHgxMAorI2RlZmluZSBYVF9QSFlTREVWX09QX01BU0sJCSgweDIwIC0gMSkKKworc3RydWN0IHh0X3BoeXNkZXZfaW5mbyB7CisJY2hhciBwaHlzaW5kZXZbSUZOQU1TSVpdOworCWNoYXIgaW5fbWFza1tJRk5BTVNJWl07CisJY2hhciBwaHlzb3V0ZGV2W0lGTkFNU0laXTsKKwljaGFyIG91dF9tYXNrW0lGTkFNU0laXTsKKwlfX3U4IGludmVydDsKKwlfX3U4IGJpdG1hc2s7Cit9OworCisjZW5kaWYgLypfWFRfUEhZU0RFVl9IKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcGt0dHlwZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9wa3R0eXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI2NWNmNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcGt0dHlwZS5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfWFRfUEtUVFlQRV9ICisjZGVmaW5lIF9YVF9QS1RUWVBFX0gKKworc3RydWN0IHh0X3BrdHR5cGVfaW5mbyB7CisJaW50CXBrdHR5cGU7CisJaW50CWludmVydDsKK307CisjZW5kaWYgLypfWFRfUEtUVFlQRV9IKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcG9saWN5LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3BvbGljeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNDZlYWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3BvbGljeS5oCkBAIC0wLDAgKzEsNTggQEAKKyNpZm5kZWYgX1hUX1BPTElDWV9ICisjZGVmaW5lIF9YVF9QT0xJQ1lfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBYVF9QT0xJQ1lfTUFYX0VMRU0JNAorCitlbnVtIHh0X3BvbGljeV9mbGFncyB7CisJWFRfUE9MSUNZX01BVENIX0lOCT0gMHgxLAorCVhUX1BPTElDWV9NQVRDSF9PVVQJPSAweDIsCisJWFRfUE9MSUNZX01BVENIX05PTkUJPSAweDQsCisJWFRfUE9MSUNZX01BVENIX1NUUklDVAk9IDB4OCwKK307CisKK2VudW0geHRfcG9saWN5X21vZGVzIHsKKwlYVF9QT0xJQ1lfTU9ERV9UUkFOU1BPUlQsCisJWFRfUE9MSUNZX01PREVfVFVOTkVMCit9OworCitzdHJ1Y3QgeHRfcG9saWN5X3NwZWMgeworCV9fdTgJc2FkZHI6MSwKKwkJCWRhZGRyOjEsCisJCQlwcm90bzoxLAorCQkJbW9kZToxLAorCQkJc3BpOjEsCisJCQlyZXFpZDoxOworfTsKKwordW5pb24geHRfcG9saWN5X2FkZHIgeworCXN0cnVjdCBpbl9hZGRyCWE0OworCXN0cnVjdCBpbjZfYWRkcglhNjsKK307CisKK3N0cnVjdCB4dF9wb2xpY3lfZWxlbSB7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdW5pb24geHRfcG9saWN5X2FkZHIgc2FkZHI7CisJCQl1bmlvbiB4dF9wb2xpY3lfYWRkciBzbWFzazsKKwkJCXVuaW9uIHh0X3BvbGljeV9hZGRyIGRhZGRyOworCQkJdW5pb24geHRfcG9saWN5X2FkZHIgZG1hc2s7CisJCX07CisJfTsKKwlfX2JlMzIJCQlzcGk7CisJX191MzIJCXJlcWlkOworCV9fdTgJCXByb3RvOworCV9fdTgJCW1vZGU7CisKKwlzdHJ1Y3QgeHRfcG9saWN5X3NwZWMJbWF0Y2g7CisJc3RydWN0IHh0X3BvbGljeV9zcGVjCWludmVydDsKK307CisKK3N0cnVjdCB4dF9wb2xpY3lfaW5mbyB7CisJc3RydWN0IHh0X3BvbGljeV9lbGVtIHBvbFtYVF9QT0xJQ1lfTUFYX0VMRU1dOworCV9fdTE2IGZsYWdzOworCV9fdTE2IGxlbjsKK307CisKKyNlbmRpZiAvKiBfWFRfUE9MSUNZX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcXVvdGEuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcXVvdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGQyOGM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9xdW90YS5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgX1hUX1FVT1RBX0gKKyNkZWZpbmUgX1hUX1FVT1RBX0gKKworZW51bSB4dF9xdW90YV9mbGFncyB7CisJWFRfUVVPVEFfSU5WRVJUCQk9IDB4MSwKK307CisjZGVmaW5lIFhUX1FVT1RBX01BU0sJCTB4MQorCitzdHJ1Y3QgeHRfcXVvdGFfcHJpdjsKKworc3RydWN0IHh0X3F1b3RhX2luZm8geworCXVfaW50MzJfdAkJZmxhZ3M7CisJdV9pbnQzMl90CQlwYWQ7CisJYWxpZ25lZF91NjQJCXF1b3RhOworCisJLyogVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBrZXJuZWwgKi8KKwlzdHJ1Y3QgeHRfcXVvdGFfcHJpdgkqbWFzdGVyOworfTsKKworI2VuZGlmIC8qIF9YVF9RVU9UQV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JhdGVlc3QuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcmF0ZWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MGE2MTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JhdGVlc3QuaApAQCAtMCwwICsxLDM3IEBACisjaWZuZGVmIF9YVF9SQVRFRVNUX01BVENIX0gKKyNkZWZpbmUgX1hUX1JBVEVFU1RfTUFUQ0hfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworZW51bSB4dF9yYXRlZXN0X21hdGNoX2ZsYWdzIHsKKwlYVF9SQVRFRVNUX01BVENIX0lOVkVSVAk9IDE8PDAsCisJWFRfUkFURUVTVF9NQVRDSF9BQlMJPSAxPDwxLAorCVhUX1JBVEVFU1RfTUFUQ0hfUkVMCT0gMTw8MiwKKwlYVF9SQVRFRVNUX01BVENIX0RFTFRBCT0gMTw8MywKKwlYVF9SQVRFRVNUX01BVENIX0JQUwk9IDE8PDQsCisJWFRfUkFURUVTVF9NQVRDSF9QUFMJPSAxPDw1LAorfTsKKworZW51bSB4dF9yYXRlZXN0X21hdGNoX21vZGUgeworCVhUX1JBVEVFU1RfTUFUQ0hfTk9ORSwKKwlYVF9SQVRFRVNUX01BVENIX0VRLAorCVhUX1JBVEVFU1RfTUFUQ0hfTFQsCisJWFRfUkFURUVTVF9NQVRDSF9HVCwKK307CisKK3N0cnVjdCB4dF9yYXRlZXN0X21hdGNoX2luZm8geworCWNoYXIJCQluYW1lMVtJRk5BTVNJWl07CisJY2hhcgkJCW5hbWUyW0lGTkFNU0laXTsKKwlfX3UxNgkJZmxhZ3M7CisJX191MTYJCW1vZGU7CisJX191MzIJCWJwczE7CisJX191MzIJCXBwczE7CisJX191MzIJCWJwczI7CisJX191MzIJCXBwczI7CisKKwkvKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCAqLworCXN0cnVjdCB4dF9yYXRlZXN0CSplc3QxIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKKwlzdHJ1Y3QgeHRfcmF0ZWVzdAkqZXN0MiBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7Cit9OworCisjZW5kaWYgLyogX1hUX1JBVEVFU1RfTUFUQ0hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yZWFsbS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yZWFsbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YTgyZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JlYWxtLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfWFRfUkVBTE1fSAorI2RlZmluZSBfWFRfUkVBTE1fSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHh0X3JlYWxtX2luZm8geworCV9fdTMyIGlkOworCV9fdTMyIG1hc2s7CisJX191OCBpbnZlcnQ7Cit9OworCisjZW5kaWYgLyogX1hUX1JFQUxNX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcmVjZW50LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JlY2VudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMzE4ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JlY2VudC5oCkBAIC0wLDAgKzEsMzUgQEAKKyNpZm5kZWYgX0xJTlVYX05FVEZJTFRFUl9YVF9SRUNFTlRfSAorI2RlZmluZSBfTElOVVhfTkVURklMVEVSX1hUX1JFQ0VOVF9IIDEKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK2VudW0geworCVhUX1JFQ0VOVF9DSEVDSyAgICA9IDEgPDwgMCwKKwlYVF9SRUNFTlRfU0VUICAgICAgPSAxIDw8IDEsCisJWFRfUkVDRU5UX1VQREFURSAgID0gMSA8PCAyLAorCVhUX1JFQ0VOVF9SRU1PVkUgICA9IDEgPDwgMywKKwlYVF9SRUNFTlRfVFRMICAgICAgPSAxIDw8IDQsCisJWFRfUkVDRU5UX1JFQVAgICAgID0gMSA8PCA1LAorCisJWFRfUkVDRU5UX1NPVVJDRSAgID0gMCwKKwlYVF9SRUNFTlRfREVTVCAgICAgPSAxLAorCisJWFRfUkVDRU5UX05BTUVfTEVOID0gMjAwLAorfTsKKworLyogT25seSBhbGxvd2VkIHdpdGggLS1yY2hlY2sgYW5kIC0tdXBkYXRlICovCisjZGVmaW5lIFhUX1JFQ0VOVF9NT0RJRklFUlMgKFhUX1JFQ0VOVF9UVEx8WFRfUkVDRU5UX1JFQVApCisKKyNkZWZpbmUgWFRfUkVDRU5UX1ZBTElEX0ZMQUdTIChYVF9SRUNFTlRfQ0hFQ0t8WFRfUkVDRU5UX1NFVHxYVF9SRUNFTlRfVVBEQVRFfFwKKwkJCSAgICAgICBYVF9SRUNFTlRfUkVNT1ZFfFhUX1JFQ0VOVF9UVEx8WFRfUkVDRU5UX1JFQVApCisKK3N0cnVjdCB4dF9yZWNlbnRfbXRpbmZvIHsKKwlfX3UzMiBzZWNvbmRzOworCV9fdTMyIGhpdF9jb3VudDsKKwlfX3U4IGNoZWNrX3NldDsKKwlfX3U4IGludmVydDsKKwljaGFyIG5hbWVbWFRfUkVDRU5UX05BTUVfTEVOXTsKKwlfX3U4IHNpZGU7Cit9OworCisjZW5kaWYgLyogX0xJTlVYX05FVEZJTFRFUl9YVF9SRUNFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zY3RwLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3NjdHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTAxZTYxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zY3RwLmgKQEAgLTAsMCArMSw5MiBAQAorI2lmbmRlZiBfWFRfU0NUUF9IXworI2RlZmluZSBfWFRfU0NUUF9IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBYVF9TQ1RQX1NSQ19QT1JUUwkgICAgICAgIDB4MDEKKyNkZWZpbmUgWFRfU0NUUF9ERVNUX1BPUlRTCSAgICAgICAgMHgwMgorI2RlZmluZSBYVF9TQ1RQX0NIVU5LX1RZUEVTCQkweDA0CisKKyNkZWZpbmUgWFRfU0NUUF9WQUxJRF9GTEFHUwkJMHgwNworCitzdHJ1Y3QgeHRfc2N0cF9mbGFnX2luZm8geworCV9fdTggY2h1bmt0eXBlOworCV9fdTggZmxhZzsKKwlfX3U4IGZsYWdfbWFzazsKK307CisKKyNkZWZpbmUgWFRfTlVNX1NDVFBfRkxBR1MJNAorCitzdHJ1Y3QgeHRfc2N0cF9pbmZvIHsKKwlfX3UxNiBkcHRzWzJdOyAgLyogTWluLCBNYXggKi8KKwlfX3UxNiBzcHRzWzJdOyAgLyogTWluLCBNYXggKi8KKworCV9fdTMyIGNodW5rbWFwWzI1NiAvIHNpemVvZiAoX191MzIpXTsgIC8qIEJpdCBtYXNrIG9mIGNodW5rcyB0byBiZSBtYXRjaGVkIGFjY29yZGluZyB0byBSRkMgMjk2MCAqLworCisjZGVmaW5lIFNDVFBfQ0hVTktfTUFUQ0hfQU5ZICAgMHgwMSAgLyogTWF0Y2ggaWYgYW55IG9mIHRoZSBjaHVuayB0eXBlcyBhcmUgcHJlc2VudCAqLworI2RlZmluZSBTQ1RQX0NIVU5LX01BVENIX0FMTCAgIDB4MDIgIC8qIE1hdGNoIGlmIGFsbCBvZiB0aGUgY2h1bmsgdHlwZXMgYXJlIHByZXNlbnQgKi8KKyNkZWZpbmUgU0NUUF9DSFVOS19NQVRDSF9PTkxZICAweDA0ICAvKiBNYXRjaCBpZiB0aGVzZSBhcmUgdGhlIG9ubHkgY2h1bmsgdHlwZXMgcHJlc2VudCAqLworCisJX191MzIgY2h1bmtfbWF0Y2hfdHlwZTsKKwlzdHJ1Y3QgeHRfc2N0cF9mbGFnX2luZm8gZmxhZ19pbmZvW1hUX05VTV9TQ1RQX0ZMQUdTXTsKKwlpbnQgZmxhZ19jb3VudDsKKworCV9fdTMyIGZsYWdzOworCV9fdTMyIGludmZsYWdzOworfTsKKworI2RlZmluZSBieXRlcyh0eXBlKSAoc2l6ZW9mKHR5cGUpICogOCkKKworI2RlZmluZSBTQ1RQX0NIVU5LTUFQX1NFVChjaHVua21hcCwgdHlwZSkgCQlcCisJZG8geyAJCQkJCQlcCisJCShjaHVua21hcClbdHlwZSAvIGJ5dGVzKF9fdTMyKV0gfD0gCVwKKwkJCTEgPDwgKHR5cGUgJSBieXRlcyhfX3UzMikpOwlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0NMRUFSKGNodW5rbWFwLCB0eXBlKQkJIAlcCisJZG8gewkJCQkJCQlcCisJCShjaHVua21hcClbdHlwZSAvIGJ5dGVzKF9fdTMyKV0gJj0gCQlcCisJCQl+KDEgPDwgKHR5cGUgJSBieXRlcyhfX3UzMikpKTsJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0NUUF9DSFVOS01BUF9JU19TRVQoY2h1bmttYXAsIHR5cGUpIAkJCVwKKyh7CQkJCQkJCQlcCisJKChjaHVua21hcClbdHlwZSAvIGJ5dGVzIChfX3UzMildICYgCQlcCisJCSgxIDw8ICh0eXBlICUgYnl0ZXMgKF9fdTMyKSkpKSA/IDE6IDA7CVwKK30pCisKKyNkZWZpbmUgU0NUUF9DSFVOS01BUF9SRVNFVChjaHVua21hcCkgXAorCW1lbXNldCgoY2h1bmttYXApLCAwLCBzaXplb2YoY2h1bmttYXApKQorCisjZGVmaW5lIFNDVFBfQ0hVTktNQVBfU0VUX0FMTChjaHVua21hcCkgXAorCW1lbXNldCgoY2h1bmttYXApLCB+MFUsIHNpemVvZihjaHVua21hcCkpCisKKyNkZWZpbmUgU0NUUF9DSFVOS01BUF9DT1BZKGRlc3RtYXAsIHNyY21hcCkgXAorCW1lbWNweSgoZGVzdG1hcCksIChzcmNtYXApLCBzaXplb2Yoc3JjbWFwKSkKKworI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0lTX0NMRUFSKGNodW5rbWFwKSBcCisJX19zY3RwX2NodW5rbWFwX2lzX2NsZWFyKChjaHVua21hcCksIEFSUkFZX1NJWkUoY2h1bmttYXApKQorc3RhdGljIF9faW5saW5lX18gYm9vbAorX19zY3RwX2NodW5rbWFwX2lzX2NsZWFyKGNvbnN0IF9fdTMyICpjaHVua21hcCwgdW5zaWduZWQgaW50IG4pCit7CisJdW5zaWduZWQgaW50IGk7CisJZm9yIChpID0gMDsgaSA8IG47ICsraSkKKwkJaWYgKGNodW5rbWFwW2ldKQorCQkJcmV0dXJuIGZhbHNlOworCXJldHVybiB0cnVlOworfQorCisjZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfQUxMX1NFVChjaHVua21hcCkgXAorCV9fc2N0cF9jaHVua21hcF9pc19hbGxfc2V0KChjaHVua21hcCksIEFSUkFZX1NJWkUoY2h1bmttYXApKQorc3RhdGljIF9faW5saW5lX18gYm9vbAorX19zY3RwX2NodW5rbWFwX2lzX2FsbF9zZXQoY29uc3QgX191MzIgKmNodW5rbWFwLCB1bnNpZ25lZCBpbnQgbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQorCQlpZiAoY2h1bmttYXBbaV0gIT0gfjBVKQorCQkJcmV0dXJuIGZhbHNlOworCXJldHVybiB0cnVlOworfQorCisjZW5kaWYgLyogX1hUX1NDVFBfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zdGF0ZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMzJkZTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0YXRlLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfWFRfU1RBVEVfSAorI2RlZmluZSBfWFRfU1RBVEVfSAorCisjZGVmaW5lIFhUX1NUQVRFX0JJVChjdGluZm8pICgxIDw8ICgoY3RpbmZvKSVJUF9DVF9JU19SRVBMWSsxKSkKKyNkZWZpbmUgWFRfU1RBVEVfSU5WQUxJRCAoMSA8PCAwKQorCisjZGVmaW5lIFhUX1NUQVRFX1VOVFJBQ0tFRCAoMSA8PCAoSVBfQ1RfTlVNQkVSICsgMSkpCisKK3N0cnVjdCB4dF9zdGF0ZV9pbmZvIHsKKwl1bnNpZ25lZCBpbnQgc3RhdGVtYXNrOworfTsKKyNlbmRpZiAvKl9YVF9TVEFURV9IKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlOTgzZWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5oCkBAIC0wLDAgKzEsMzYgQEAKKyNpZm5kZWYgX1hUX1NUQVRJU1RJQ19ICisjZGVmaW5lIF9YVF9TVEFUSVNUSUNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworZW51bSB4dF9zdGF0aXN0aWNfbW9kZSB7CisJWFRfU1RBVElTVElDX01PREVfUkFORE9NLAorCVhUX1NUQVRJU1RJQ19NT0RFX05USCwKKwlfX1hUX1NUQVRJU1RJQ19NT0RFX01BWAorfTsKKyNkZWZpbmUgWFRfU1RBVElTVElDX01PREVfTUFYIChfX1hUX1NUQVRJU1RJQ19NT0RFX01BWCAtIDEpCisKK2VudW0geHRfc3RhdGlzdGljX2ZsYWdzIHsKKwlYVF9TVEFUSVNUSUNfSU5WRVJUCQk9IDB4MSwKK307CisjZGVmaW5lIFhUX1NUQVRJU1RJQ19NQVNLCQkweDEKKworc3RydWN0IHh0X3N0YXRpc3RpY19wcml2OworCitzdHJ1Y3QgeHRfc3RhdGlzdGljX2luZm8geworCV9fdTE2CQkJbW9kZTsKKwlfX3UxNgkJCWZsYWdzOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCV9fdTMyCXByb2JhYmlsaXR5OworCQl9IHJhbmRvbTsKKwkJc3RydWN0IHsKKwkJCV9fdTMyCWV2ZXJ5OworCQkJX191MzIJcGFja2V0OworCQkJX191MzIJY291bnQ7IC8qIHVudXNlZCAqLworCQl9IG50aDsKKwl9IHU7CisJc3RydWN0IHh0X3N0YXRpc3RpY19wcml2ICptYXN0ZXIgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOworfTsKKworI2VuZGlmIC8qIF9YVF9TVEFUSVNUSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zdHJpbmcuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM1MzQ3YwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc3RyaW5nLmgKQEAgLTAsMCArMSwzNCBAQAorI2lmbmRlZiBfWFRfU1RSSU5HX0gKKyNkZWZpbmUgX1hUX1NUUklOR19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIFhUX1NUUklOR19NQVhfUEFUVEVSTl9TSVpFIDEyOAorI2RlZmluZSBYVF9TVFJJTkdfTUFYX0FMR09fTkFNRV9TSVpFIDE2CisKK2VudW0geworCVhUX1NUUklOR19GTEFHX0lOVkVSVAkJPSAweDAxLAorCVhUX1NUUklOR19GTEFHX0lHTk9SRUNBU0UJPSAweDAyCit9OworCitzdHJ1Y3QgeHRfc3RyaW5nX2luZm8geworCV9fdTE2IGZyb21fb2Zmc2V0OworCV9fdTE2IHRvX29mZnNldDsKKwljaGFyCSAgYWxnb1tYVF9TVFJJTkdfTUFYX0FMR09fTkFNRV9TSVpFXTsKKwljaGFyIAkgIHBhdHRlcm5bWFRfU1RSSU5HX01BWF9QQVRURVJOX1NJWkVdOworCV9fdTggIHBhdGxlbjsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlfX3U4ICBpbnZlcnQ7CisJCX0gdjA7CisKKwkJc3RydWN0IHsKKwkJCV9fdTggIGZsYWdzOworCQl9IHYxOworCX0gdTsKKworCS8qIFVzZWQgaW50ZXJuYWxseSBieSB0aGUga2VybmVsICovCisJc3RydWN0IHRzX2NvbmZpZyBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkgKmNvbmZpZzsKK307CisKKyNlbmRpZiAvKl9YVF9TVFJJTkdfSCovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3RjcG1zcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF90Y3Btc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmFjNTZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF90Y3Btc3MuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9YVF9UQ1BNU1NfTUFUQ0hfSAorI2RlZmluZSBfWFRfVENQTVNTX01BVENIX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCB4dF90Y3Btc3NfbWF0Y2hfaW5mbyB7CisgICAgX191MTYgbXNzX21pbiwgbXNzX21heDsKKyAgICBfX3U4IGludmVydDsKK307CisKKyNlbmRpZiAvKl9YVF9UQ1BNU1NfTUFUQ0hfSCovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3RjcHVkcC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF90Y3B1ZHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGFhN2IzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF90Y3B1ZHAuaApAQCAtMCwwICsxLDM2IEBACisjaWZuZGVmIF9YVF9UQ1BVRFBfSAorI2RlZmluZSBfWFRfVENQVURQX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIFRDUCBtYXRjaGluZyBzdHVmZiAqLworc3RydWN0IHh0X3RjcCB7CisJX191MTYgc3B0c1syXTsJCQkvKiBTb3VyY2UgcG9ydCByYW5nZS4gKi8KKwlfX3UxNiBkcHRzWzJdOwkJCS8qIERlc3RpbmF0aW9uIHBvcnQgcmFuZ2UuICovCisJX191OCBvcHRpb247CQkJLyogVENQIE9wdGlvbiBpZmYgbm9uLXplcm8qLworCV9fdTggZmxnX21hc2s7CQkJLyogVENQIGZsYWdzIG1hc2sgYnl0ZSAqLworCV9fdTggZmxnX2NtcDsJCQkvKiBUQ1AgZmxhZ3MgY29tcGFyZSBieXRlICovCisJX191OCBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCit9OworCisvKiBWYWx1ZXMgZm9yICJpbnYiIGZpZWxkIGluIHN0cnVjdCBpcHRfdGNwLiAqLworI2RlZmluZSBYVF9UQ1BfSU5WX1NSQ1BUCTB4MDEJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiBzb3VyY2UgcG9ydHMuICovCisjZGVmaW5lIFhUX1RDUF9JTlZfRFNUUFQJMHgwMgkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIGRlc3QgcG9ydHMuICovCisjZGVmaW5lIFhUX1RDUF9JTlZfRkxBR1MJMHgwNAkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIFRDUCBmbGFncy4gKi8KKyNkZWZpbmUgWFRfVENQX0lOVl9PUFRJT04JMHgwOAkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIG9wdGlvbiB0ZXN0LiAqLworI2RlZmluZSBYVF9UQ1BfSU5WX01BU0sJCTB4MEYJLyogQWxsIHBvc3NpYmxlIGZsYWdzLiAqLworCisvKiBVRFAgbWF0Y2hpbmcgc3R1ZmYgKi8KK3N0cnVjdCB4dF91ZHAgeworCV9fdTE2IHNwdHNbMl07CQkJLyogU291cmNlIHBvcnQgcmFuZ2UuICovCisJX191MTYgZHB0c1syXTsJCQkvKiBEZXN0aW5hdGlvbiBwb3J0IHJhbmdlLiAqLworCV9fdTggaW52ZmxhZ3M7CQkJLyogSW52ZXJzZSBmbGFncyAqLworfTsKKworLyogVmFsdWVzIGZvciAiaW52ZmxhZ3MiIGZpZWxkIGluIHN0cnVjdCBpcHRfdWRwLiAqLworI2RlZmluZSBYVF9VRFBfSU5WX1NSQ1BUCTB4MDEJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiBzb3VyY2UgcG9ydHMuICovCisjZGVmaW5lIFhUX1VEUF9JTlZfRFNUUFQJMHgwMgkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIGRlc3QgcG9ydHMuICovCisjZGVmaW5lIFhUX1VEUF9JTlZfTUFTSwkweDAzCS8qIEFsbCBwb3NzaWJsZSBmbGFncy4gKi8KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGltZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF90aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRiNmRmNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGltZS5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX1hUX1RJTUVfSAorI2RlZmluZSBfWFRfVElNRV9IIDEKKworc3RydWN0IHh0X3RpbWVfaW5mbyB7CisJdV9pbnQzMl90IGRhdGVfc3RhcnQ7CisJdV9pbnQzMl90IGRhdGVfc3RvcDsKKwl1X2ludDMyX3QgZGF5dGltZV9zdGFydDsKKwl1X2ludDMyX3QgZGF5dGltZV9zdG9wOworCXVfaW50MzJfdCBtb250aGRheXNfbWF0Y2g7CisJdV9pbnQ4X3Qgd2Vla2RheXNfbWF0Y2g7CisJdV9pbnQ4X3QgZmxhZ3M7Cit9OworCitlbnVtIHsKKwkvKiBNYXRjaCBhZ2FpbnN0IGxvY2FsIHRpbWUgKGluc3RlYWQgb2YgVVRDKSAqLworCVhUX1RJTUVfTE9DQUxfVFogPSAxIDw8IDAsCisKKwkvKiBTaG9ydGN1dHMgKi8KKwlYVF9USU1FX0FMTF9NT05USERBWVMgPSAweEZGRkZGRkZFLAorCVhUX1RJTUVfQUxMX1dFRUtEQVlTICA9IDB4RkUsCisJWFRfVElNRV9NSU5fREFZVElNRSAgID0gMCwKKwlYVF9USU1FX01BWF9EQVlUSU1FICAgPSAyNCAqIDYwICogNjAgLSAxLAorfTsKKworI2VuZGlmIC8qIF9YVF9USU1FX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdTMyLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3UzMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NDdmNTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3UzMi5oCkBAIC0wLDAgKzEsNDAgQEAKKyNpZm5kZWYgX1hUX1UzMl9ICisjZGVmaW5lIF9YVF9VMzJfSCAxCisKK2VudW0geHRfdTMyX29wcyB7CisJWFRfVTMyX0FORCwKKwlYVF9VMzJfTEVGVFNILAorCVhUX1UzMl9SSUdIVFNILAorCVhUX1UzMl9BVCwKK307CisKK3N0cnVjdCB4dF91MzJfbG9jYXRpb25fZWxlbWVudCB7CisJdV9pbnQzMl90IG51bWJlcjsKKwl1X2ludDhfdCBuZXh0b3A7Cit9OworCitzdHJ1Y3QgeHRfdTMyX3ZhbHVlX2VsZW1lbnQgeworCXVfaW50MzJfdCBtaW47CisJdV9pbnQzMl90IG1heDsKK307CisKKy8qCisgKiBBbnkgd2F5IHRvIGFsbG93IGZvciBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIGVsZW1lbnRzPworICogRm9yIG5vdywgSSBzZXR0bGUgd2l0aCBhIGxpbWl0IG9mIDEwIGVhY2guCisgKi8KKyNkZWZpbmUgWFRfVTMyX01BWFNJWkUgMTAKKworc3RydWN0IHh0X3UzMl90ZXN0IHsKKwlzdHJ1Y3QgeHRfdTMyX2xvY2F0aW9uX2VsZW1lbnQgbG9jYXRpb25bWFRfVTMyX01BWFNJWkUrMV07CisJc3RydWN0IHh0X3UzMl92YWx1ZV9lbGVtZW50IHZhbHVlW1hUX1UzMl9NQVhTSVpFKzFdOworCXVfaW50OF90IG5udW1zOworCXVfaW50OF90IG52YWx1ZXM7Cit9OworCitzdHJ1Y3QgeHRfdTMyIHsKKwlzdHJ1Y3QgeHRfdTMyX3Rlc3QgdGVzdHNbWFRfVTMyX01BWFNJWkUrMV07CisJdV9pbnQ4X3QgbnRlc3RzOworCXVfaW50OF90IGludmVydDsKK307CisKKyNlbmRpZiAvKiBfWFRfVTMyX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYXJwLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2FycC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYmM2ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2FycC5oCkBAIC0wLDAgKzEsMTkgQEAKKyNpZm5kZWYgX19MSU5VWF9BUlBfTkVURklMVEVSX0gKKyNkZWZpbmUgX19MSU5VWF9BUlBfTkVURklMVEVSX0gKKworLyogQVJQLXNwZWNpZmljIGRlZmluZXMgZm9yIG5ldGZpbHRlci4KKyAqIChDKTIwMDIgUnVzdHkgUnVzc2VsbCBJQk0gLS0gVGhpcyBjb2RlIGlzIEdQTC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisKKy8qIFRoZXJlIGlzIG5vIFBGX0FSUC4gKi8KKyNkZWZpbmUgTkZfQVJQCQkwCisKKy8qIEFSUCBIb29rcyAqLworI2RlZmluZSBORl9BUlBfSU4JMAorI2RlZmluZSBORl9BUlBfT1VUCTEKKyNkZWZpbmUgTkZfQVJQX0ZPUldBUkQJMgorI2RlZmluZSBORl9BUlBfTlVNSE9PS1MJMworCisjZW5kaWYgLyogX19MSU5VWF9BUlBfTkVURklMVEVSX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYXJwL2FycF90YWJsZXMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYXJwL2FycF90YWJsZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTZkYWFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9hcnAvYXJwX3RhYmxlcy5oCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogCUZvcm1hdCBvZiBhbiBBUlAgZmlyZXdhbGwgZGVzY3JpcHRvcgorICoKKyAqIAlzcmMsIHRndCwgc3JjX21hc2ssIHRndF9tYXNrLCBhcnBvcCwgYXJwb3BfbWFzayBhcmUgYWx3YXlzIHN0b3JlZCBpbgorICoJbmV0d29yayBieXRlIG9yZGVyLgorICogCWZsYWdzIGFyZSBzdG9yZWQgaW4gaG9zdCBieXRlIG9yZGVyIChvZiBjb3Vyc2UpLgorICovCisKKyNpZm5kZWYgX0FSUFRBQkxFU19ICisjZGVmaW5lIF9BUlBUQUJMRVNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9hcnAuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgorCisjZGVmaW5lIEFSUFRfRlVOQ1RJT05fTUFYTkFNRUxFTiBYVF9GVU5DVElPTl9NQVhOQU1FTEVOCisjZGVmaW5lIEFSUFRfVEFCTEVfTUFYTkFNRUxFTiBYVF9UQUJMRV9NQVhOQU1FTEVOCisjZGVmaW5lIGFycHRfZW50cnlfdGFyZ2V0IHh0X2VudHJ5X3RhcmdldAorI2RlZmluZSBhcnB0X3N0YW5kYXJkX3RhcmdldCB4dF9zdGFuZGFyZF90YXJnZXQKKyNkZWZpbmUgYXJwdF9lcnJvcl90YXJnZXQgeHRfZXJyb3JfdGFyZ2V0CisjZGVmaW5lIEFSUFRfQ09OVElOVUUgWFRfQ09OVElOVUUKKyNkZWZpbmUgQVJQVF9SRVRVUk4gWFRfUkVUVVJOCisjZGVmaW5lIGFycHRfY291bnRlcnNfaW5mbyB4dF9jb3VudGVyc19pbmZvCisjZGVmaW5lIGFycHRfY291bnRlcnMgeHRfY291bnRlcnMKKyNkZWZpbmUgQVJQVF9TVEFOREFSRF9UQVJHRVQgWFRfU1RBTkRBUkRfVEFSR0VUCisjZGVmaW5lIEFSUFRfRVJST1JfVEFSR0VUIFhUX0VSUk9SX1RBUkdFVAorI2RlZmluZSBBUlBUX0VOVFJZX0lURVJBVEUoZW50cmllcywgc2l6ZSwgZm4sIGFyZ3MuLi4pIFwKKwlYVF9FTlRSWV9JVEVSQVRFKHN0cnVjdCBhcnB0X2VudHJ5LCBlbnRyaWVzLCBzaXplLCBmbiwgIyMgYXJncykKKworI2RlZmluZSBBUlBUX0RFVl9BRERSX0xFTl9NQVggMTYKKworc3RydWN0IGFycHRfZGV2YWRkcl9pbmZvIHsKKwljaGFyIGFkZHJbQVJQVF9ERVZfQUREUl9MRU5fTUFYXTsKKwljaGFyIG1hc2tbQVJQVF9ERVZfQUREUl9MRU5fTUFYXTsKK307CisKKy8qIFllcywgVmlyZ2luaWEsIHlvdSBoYXZlIHRvIHplcm8gdGhlIHBhZGRpbmcuICovCitzdHJ1Y3QgYXJwdF9hcnAgeworCS8qIFNvdXJjZSBhbmQgdGFyZ2V0IElQIGFkZHIgKi8KKwlzdHJ1Y3QgaW5fYWRkciBzcmMsIHRndDsKKwkvKiBNYXNrIGZvciBzcmMgYW5kIHRhcmdldCBJUCBhZGRyICovCisJc3RydWN0IGluX2FkZHIgc21zaywgdG1zazsKKworCS8qIERldmljZSBodyBhZGRyZXNzIGxlbmd0aCwgc3JjK3RhcmdldCBkZXZpY2UgYWRkcmVzc2VzICovCisJdV9pbnQ4X3QgYXJobG4sIGFyaGxuX21hc2s7CisJc3RydWN0IGFycHRfZGV2YWRkcl9pbmZvIHNyY19kZXZhZGRyOworCXN0cnVjdCBhcnB0X2RldmFkZHJfaW5mbyB0Z3RfZGV2YWRkcjsKKworCS8qIEFSUCBvcGVyYXRpb24gY29kZS4gKi8KKwlfX2JlMTYgYXJwb3AsIGFycG9wX21hc2s7CisKKwkvKiBBUlAgaGFyZHdhcmUgYWRkcmVzcyBhbmQgcHJvdG9jb2wgYWRkcmVzcyBmb3JtYXQuICovCisJX19iZTE2IGFyaHJkLCBhcmhyZF9tYXNrOworCV9fYmUxNiBhcnBybywgYXJwcm9fbWFzazsKKworCS8qIFRoZSBwcm90b2NvbCBhZGRyZXNzIGxlbmd0aCBpcyBvbmx5IGFjY2VwdGVkIGlmIGl0IGlzIDQKKwkgKiBzbyB0aGVyZSBpcyBubyB1c2UgaW4gb2ZmZXJpbmcgYSB3YXkgdG8gZG8gZmlsdGVyaW5nIG9uIGl0LgorCSAqLworCisJY2hhciBpbmlmYWNlW0lGTkFNU0laXSwgb3V0aWZhY2VbSUZOQU1TSVpdOworCXVuc2lnbmVkIGNoYXIgaW5pZmFjZV9tYXNrW0lGTkFNU0laXSwgb3V0aWZhY2VfbWFza1tJRk5BTVNJWl07CisKKwkvKiBGbGFncyB3b3JkICovCisJdV9pbnQ4X3QgZmxhZ3M7CisJLyogSW52ZXJzZSBmbGFncyAqLworCXVfaW50MTZfdCBpbnZmbGFnczsKK307CisKKy8qIFZhbHVlcyBmb3IgImZsYWciIGZpZWxkIGluIHN0cnVjdCBhcnB0X2lwIChnZW5lcmFsIGFycCBzdHJ1Y3R1cmUpLgorICogTm8gZmxhZ3MgZGVmaW5lZCB5ZXQuCisgKi8KKyNkZWZpbmUgQVJQVF9GX01BU0sJCTB4MDAJLyogQWxsIHBvc3NpYmxlIGZsYWcgYml0cyBtYXNrLiAqLworCisvKiBWYWx1ZXMgZm9yICJpbnYiIGZpZWxkIGluIHN0cnVjdCBhcnB0X2FycC4gKi8KKyNkZWZpbmUgQVJQVF9JTlZfVklBX0lOCQkweDAwMDEJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiBJTiBJRkFDRS4gKi8KKyNkZWZpbmUgQVJQVF9JTlZfVklBX09VVAkweDAwMDIJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiBPVVQgSUZBQ0UgKi8KKyNkZWZpbmUgQVJQVF9JTlZfU1JDSVAJCTB4MDAwNAkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIFNSQyBJUC4gKi8KKyNkZWZpbmUgQVJQVF9JTlZfVEdUSVAJCTB4MDAwOAkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIFRHVCBJUC4gKi8KKyNkZWZpbmUgQVJQVF9JTlZfU1JDREVWQUREUgkweDAwMTAJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiBTUkMgREVWIEFERFIuICovCisjZGVmaW5lIEFSUFRfSU5WX1RHVERFVkFERFIJMHgwMDIwCS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgVEdUIERFViBBRERSLiAqLworI2RlZmluZSBBUlBUX0lOVl9BUlBPUAkJMHgwMDQwCS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgQVJQIE9QLiAqLworI2RlZmluZSBBUlBUX0lOVl9BUlBIUkQJCTB4MDA4MAkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIEFSUCBIUkQuICovCisjZGVmaW5lIEFSUFRfSU5WX0FSUFBSTwkJMHgwMTAwCS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgQVJQIFBSTy4gKi8KKyNkZWZpbmUgQVJQVF9JTlZfQVJQSExOCQkweDAyMDAJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiBBUlAgSExOLiAqLworI2RlZmluZSBBUlBUX0lOVl9NQVNLCQkweDAzRkYJLyogQWxsIHBvc3NpYmxlIGZsYWcgYml0cyBtYXNrLiAqLworCisvKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIGVhY2ggb2YgdGhlIGZpcmV3YWxsIHJ1bGVzLiAgQ29uc2lzdHMgb2YgMworICAgcGFydHMgd2hpY2ggYXJlIDEpIGdlbmVyYWwgQVJQIGhlYWRlciBzdHVmZiAyKSBtYXRjaCBzcGVjaWZpYworICAgc3R1ZmYgMykgdGhlIHRhcmdldCB0byBwZXJmb3JtIGlmIHRoZSBydWxlIG1hdGNoZXMgKi8KK3N0cnVjdCBhcnB0X2VudHJ5Cit7CisJc3RydWN0IGFycHRfYXJwIGFycDsKKworCS8qIFNpemUgb2YgYXJwdF9lbnRyeSArIG1hdGNoZXMgKi8KKwl1X2ludDE2X3QgdGFyZ2V0X29mZnNldDsKKwkvKiBTaXplIG9mIGFycHRfZW50cnkgKyBtYXRjaGVzICsgdGFyZ2V0ICovCisJdV9pbnQxNl90IG5leHRfb2Zmc2V0OworCisJLyogQmFjayBwb2ludGVyICovCisJdW5zaWduZWQgaW50IGNvbWVmcm9tOworCisJLyogUGFja2V0IGFuZCBieXRlIGNvdW50ZXJzLiAqLworCXN0cnVjdCB4dF9jb3VudGVycyBjb3VudGVyczsKKworCS8qIFRoZSBtYXRjaGVzIChpZiBhbnkpLCB0aGVuIHRoZSB0YXJnZXQuICovCisJdW5zaWduZWQgY2hhciBlbGVtc1swXTsKK307CisKKy8qCisgKiBOZXcgSVAgZmlyZXdhbGwgb3B0aW9ucyBmb3IgW2dzXWV0c29ja29wdCBhdCB0aGUgUkFXIElQIGxldmVsLgorICogVW5saWtlIEJTRCBMaW51eCBpbmhlcml0cyBJUCBvcHRpb25zIHNvIHlvdSBkb24ndCBoYXZlIHRvIHVzZSBhIHJhdworICogc29ja2V0IGZvciB0aGlzLiBJbnN0ZWFkIHdlIGNoZWNrIHJpZ2h0cyBpbiB0aGUgY2FsbHMuCisgKgorICogQVRURU5USU9OOiBjaGVjayBsaW51eC9pbi5oIGJlZm9yZSBhZGRpbmcgbmV3IG51bWJlciBoZXJlLgorICovCisjZGVmaW5lIEFSUFRfQkFTRV9DVEwJCTk2CisKKyNkZWZpbmUgQVJQVF9TT19TRVRfUkVQTEFDRQkJKEFSUFRfQkFTRV9DVEwpCisjZGVmaW5lIEFSUFRfU09fU0VUX0FERF9DT1VOVEVSUwkoQVJQVF9CQVNFX0NUTCArIDEpCisjZGVmaW5lIEFSUFRfU09fU0VUX01BWAkJCUFSUFRfU09fU0VUX0FERF9DT1VOVEVSUworCisjZGVmaW5lIEFSUFRfU09fR0VUX0lORk8JCShBUlBUX0JBU0VfQ1RMKQorI2RlZmluZSBBUlBUX1NPX0dFVF9FTlRSSUVTCQkoQVJQVF9CQVNFX0NUTCArIDEpCisvKiAjZGVmaW5lIEFSUFRfU09fR0VUX1JFVklTSU9OX01BVENICShBUFJUX0JBU0VfQ1RMICsgMikgKi8KKyNkZWZpbmUgQVJQVF9TT19HRVRfUkVWSVNJT05fVEFSR0VUCShBUlBUX0JBU0VfQ1RMICsgMykKKyNkZWZpbmUgQVJQVF9TT19HRVRfTUFYCQkJKEFSUFRfU09fR0VUX1JFVklTSU9OX1RBUkdFVCkKKworLyogVGhlIGFyZ3VtZW50IHRvIEFSUFRfU09fR0VUX0lORk8gKi8KK3N0cnVjdCBhcnB0X2dldGluZm8geworCS8qIFdoaWNoIHRhYmxlOiBjYWxsZXIgZmlsbHMgdGhpcyBpbi4gKi8KKwljaGFyIG5hbWVbWFRfVEFCTEVfTUFYTkFNRUxFTl07CisKKwkvKiBLZXJuZWwgZmlsbHMgdGhlc2UgaW4uICovCisJLyogV2hpY2ggaG9vayBlbnRyeSBwb2ludHMgYXJlIHZhbGlkOiBiaXRtYXNrICovCisJdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzOworCisJLyogSG9vayBlbnRyeSBwb2ludHM6IG9uZSBwZXIgbmV0ZmlsdGVyIGhvb2suICovCisJdW5zaWduZWQgaW50IGhvb2tfZW50cnlbTkZfQVJQX05VTUhPT0tTXTsKKworCS8qIFVuZGVyZmxvdyBwb2ludHMuICovCisJdW5zaWduZWQgaW50IHVuZGVyZmxvd1tORl9BUlBfTlVNSE9PS1NdOworCisJLyogTnVtYmVyIG9mIGVudHJpZXMgKi8KKwl1bnNpZ25lZCBpbnQgbnVtX2VudHJpZXM7CisKKwkvKiBTaXplIG9mIGVudHJpZXMuICovCisJdW5zaWduZWQgaW50IHNpemU7Cit9OworCisvKiBUaGUgYXJndW1lbnQgdG8gQVJQVF9TT19TRVRfUkVQTEFDRS4gKi8KK3N0cnVjdCBhcnB0X3JlcGxhY2UgeworCS8qIFdoaWNoIHRhYmxlLiAqLworCWNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKKworCS8qIFdoaWNoIGhvb2sgZW50cnkgcG9pbnRzIGFyZSB2YWxpZDogYml0bWFzay4gIFlvdSBjYW4ndAorICAgICAgICAgICBjaGFuZ2UgdGhpcy4gKi8KKwl1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3M7CisKKwkvKiBOdW1iZXIgb2YgZW50cmllcyAqLworCXVuc2lnbmVkIGludCBudW1fZW50cmllczsKKworCS8qIFRvdGFsIHNpemUgb2YgbmV3IGVudHJpZXMgKi8KKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKworCS8qIEhvb2sgZW50cnkgcG9pbnRzLiAqLworCXVuc2lnbmVkIGludCBob29rX2VudHJ5W05GX0FSUF9OVU1IT09LU107CisKKwkvKiBVbmRlcmZsb3cgcG9pbnRzLiAqLworCXVuc2lnbmVkIGludCB1bmRlcmZsb3dbTkZfQVJQX05VTUhPT0tTXTsKKworCS8qIEluZm9ybWF0aW9uIGFib3V0IG9sZCBlbnRyaWVzOiAqLworCS8qIE51bWJlciBvZiBjb3VudGVycyAobXVzdCBiZSBlcXVhbCB0byBjdXJyZW50IG51bWJlciBvZiBlbnRyaWVzKS4gKi8KKwl1bnNpZ25lZCBpbnQgbnVtX2NvdW50ZXJzOworCS8qIFRoZSBvbGQgZW50cmllcycgY291bnRlcnMuICovCisJc3RydWN0IHh0X2NvdW50ZXJzICpjb3VudGVyczsKKworCS8qIFRoZSBlbnRyaWVzIChoYW5nIG9mZiBlbmQ6IG5vdCByZWFsbHkgYW4gYXJyYXkpLiAqLworCXN0cnVjdCBhcnB0X2VudHJ5IGVudHJpZXNbMF07Cit9OworCisvKiBUaGUgYXJndW1lbnQgdG8gQVJQVF9TT19HRVRfRU5UUklFUy4gKi8KK3N0cnVjdCBhcnB0X2dldF9lbnRyaWVzIHsKKwkvKiBXaGljaCB0YWJsZTogdXNlciBmaWxscyB0aGlzIGluLiAqLworCWNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKKworCS8qIFVzZXIgZmlsbHMgdGhpcyBpbjogdG90YWwgZW50cnkgc2l6ZS4gKi8KKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKworCS8qIFRoZSBlbnRyaWVzLiAqLworCXN0cnVjdCBhcnB0X2VudHJ5IGVudHJ5dGFibGVbMF07Cit9OworCisvKiBIZWxwZXIgZnVuY3Rpb25zICovCitzdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgeHRfZW50cnlfdGFyZ2V0ICphcnB0X2dldF90YXJnZXQoc3RydWN0IGFycHRfZW50cnkgKmUpCit7CisJcmV0dXJuICh2b2lkICopZSArIGUtPnRhcmdldF9vZmZzZXQ7Cit9CisKKy8qCisgKglNYWluIGZpcmV3YWxsIGNoYWlucyBkZWZpbml0aW9ucyBhbmQgZ2xvYmFsIHZhcidzIGRlZmluaXRpb25zLgorICovCisjZW5kaWYgLyogX0FSUFRBQkxFU19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2FycC9hcnB0X21hbmdsZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9hcnAvYXJwdF9tYW5nbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTBmNTAyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9hcnAvYXJwdF9tYW5nbGUuaApAQCAtMCwwICsxLDI2IEBACisjaWZuZGVmIF9BUlBUX01BTkdMRV9ICisjZGVmaW5lIF9BUlBUX01BTkdMRV9ICisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2FycC9hcnBfdGFibGVzLmg+CisKKyNkZWZpbmUgQVJQVF9NQU5HTEVfQUREUl9MRU5fTUFYIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikKK3N0cnVjdCBhcnB0X21hbmdsZQoreworCWNoYXIgc3JjX2RldmFkZHJbQVJQVF9ERVZfQUREUl9MRU5fTUFYXTsKKwljaGFyIHRndF9kZXZhZGRyW0FSUFRfREVWX0FERFJfTEVOX01BWF07CisJdW5pb24geworCQlzdHJ1Y3QgaW5fYWRkciBzcmNfaXA7CisJfSB1X3M7CisJdW5pb24geworCQlzdHJ1Y3QgaW5fYWRkciB0Z3RfaXA7CisJfSB1X3Q7CisJdV9pbnQ4X3QgZmxhZ3M7CisJaW50IHRhcmdldDsKK307CisKKyNkZWZpbmUgQVJQVF9NQU5HTEVfU0RFViAweDAxCisjZGVmaW5lIEFSUFRfTUFOR0xFX1RERVYgMHgwMgorI2RlZmluZSBBUlBUX01BTkdMRV9TSVAgMHgwNAorI2RlZmluZSBBUlBUX01BTkdMRV9USVAgMHgwOAorI2RlZmluZSBBUlBUX01BTkdMRV9NQVNLIDB4MGYKKworI2VuZGlmIC8qIF9BUlBUX01BTkdMRV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDk0ZWNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIF9fTElOVVhfQlJJREdFX05FVEZJTFRFUl9ICisjZGVmaW5lIF9fTElOVVhfQlJJREdFX05FVEZJTFRFUl9ICisKKy8qIGJyaWRnZS1zcGVjaWZpYyBkZWZpbmVzIGZvciBuZXRmaWx0ZXIuIAorICovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9wcHBveC5oPgorCisvKiBCcmlkZ2UgSG9va3MgKi8KKy8qIEFmdGVyIHByb21pc2MgZHJvcHMsIGNoZWNrc3VtIGNoZWNrcy4gKi8KKyNkZWZpbmUgTkZfQlJfUFJFX1JPVVRJTkcJMAorLyogSWYgdGhlIHBhY2tldCBpcyBkZXN0aW5lZCBmb3IgdGhpcyBib3guICovCisjZGVmaW5lIE5GX0JSX0xPQ0FMX0lOCQkxCisvKiBJZiB0aGUgcGFja2V0IGlzIGRlc3RpbmVkIGZvciBhbm90aGVyIGludGVyZmFjZS4gKi8KKyNkZWZpbmUgTkZfQlJfRk9SV0FSRAkJMgorLyogUGFja2V0cyBjb21pbmcgZnJvbSBhIGxvY2FsIHByb2Nlc3MuICovCisjZGVmaW5lIE5GX0JSX0xPQ0FMX09VVAkJMworLyogUGFja2V0cyBhYm91dCB0byBoaXQgdGhlIHdpcmUuICovCisjZGVmaW5lIE5GX0JSX1BPU1RfUk9VVElORwk0CisvKiBOb3QgcmVhbGx5IGEgaG9vaywgYnV0IHVzZWQgZm9yIHRoZSBlYnRhYmxlcyBicm91dGUgdGFibGUgKi8KKyNkZWZpbmUgTkZfQlJfQlJPVVRJTkcJCTUKKyNkZWZpbmUgTkZfQlJfTlVNSE9PS1MJCTYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfODAyXzMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF84MDJfMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjN2YyNGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfODAyXzMuaApAQCAtMCwwICsxLDYwIEBACisjaWZuZGVmIF9fTElOVVhfQlJJREdFX0VCVF84MDJfM19ICisjZGVmaW5lIF9fTElOVVhfQlJJREdFX0VCVF84MDJfM19ICisKKyNkZWZpbmUgRUJUXzgwMl8zX1NBUCAweDAxCisjZGVmaW5lIEVCVF84MDJfM19UWVBFIDB4MDIKKworI2RlZmluZSBFQlRfODAyXzNfTUFUQ0ggIjgwMl8zIgorCisvKgorICogSWYgZnJhbWUgaGFzIERTQVAvU1NBUCB2YWx1ZSAweGFhIHlvdSBtdXN0IGNoZWNrIHRoZSBTTkFQIHR5cGUKKyAqIHRvIGRpc2NvdmVyIHdoYXQga2luZCBvZiBwYWNrZXQgd2UncmUgY2FycnlpbmcuIAorICovCisjZGVmaW5lIENIRUNLX1RZUEUgMHhhYQorCisvKgorICogQ29udHJvbCBmaWVsZCBtYXkgYmUgb25lIG9yIHR3byBieXRlcy4gIElmIHRoZSBmaXJzdCBieXRlIGhhcworICogdGhlIHZhbHVlIDB4MDMgdGhlbiB0aGUgZW50aXJlIGxlbmd0aCBpcyBvbmUgYnl0ZSwgb3RoZXJ3aXNlIGl0IGlzIHR3by4KKyAqIE9uZSBieXRlIGNvbnRyb2xzIGFyZSB1c2VkIGluIFVubnVtYmVyZWQgSW5mb3JtYXRpb24gZnJhbWVzLgorICogVHdvIGJ5dGUgY29udHJvbHMgYXJlIHVzZWQgaW4gTnVtYmVyZWQgSW5mb3JtYXRpb24gZnJhbWVzLgorICovCisjZGVmaW5lIElTX1VJIDB4MDMKKworI2RlZmluZSBFQlRfODAyXzNfTUFTSyAoRUJUXzgwMl8zX1NBUCB8IEVCVF84MDJfM19UWVBFIHwgRUJUXzgwMl8zKQorCisvKiB1aSBoYXMgb25lIGJ5dGUgY3RybCwgbmkgaGFzIHR3byAqLworc3RydWN0IGhkcl91aSB7CisJdWludDhfdCBkc2FwOworCXVpbnQ4X3Qgc3NhcDsKKwl1aW50OF90IGN0cmw7CisJdWludDhfdCBvcmlnWzNdOworCV9fYmUxNiB0eXBlOworfTsKKworc3RydWN0IGhkcl9uaSB7CisJdWludDhfdCBkc2FwOworCXVpbnQ4X3Qgc3NhcDsKKwlfX2JlMTYgY3RybDsKKwl1aW50OF90ICBvcmlnWzNdOworCV9fYmUxNiB0eXBlOworfTsKKworc3RydWN0IGVidF84MDJfM19oZHIgeworCXVpbnQ4X3QgIGRhZGRyWzZdOworCXVpbnQ4X3QgIHNhZGRyWzZdOworCV9fYmUxNiBsZW47CisJdW5pb24geworCQlzdHJ1Y3QgaGRyX3VpIHVpOworCQlzdHJ1Y3QgaGRyX25pIG5pOworCX0gbGxjOworfTsKKworCitzdHJ1Y3QgZWJ0XzgwMl8zX2luZm8geworCXVpbnQ4X3QgIHNhcDsKKwlfX2JlMTYgdHlwZTsKKwl1aW50OF90ICBiaXRtYXNrOworCXVpbnQ4X3QgIGludmZsYWdzOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfYW1vbmcuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9hbW9uZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMDk1NTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfYW1vbmcuaApAQCAtMCwwICsxLDYyIEBACisjaWZuZGVmIF9fTElOVVhfQlJJREdFX0VCVF9BTU9OR19ICisjZGVmaW5lIF9fTElOVVhfQlJJREdFX0VCVF9BTU9OR19ICisKKyNkZWZpbmUgRUJUX0FNT05HX0RTVCAweDAxCisjZGVmaW5lIEVCVF9BTU9OR19TUkMgMHgwMgorCisvKiBHcnplZ29yeiBCb3Jvd2lhayA8Z3J6ZXNAZ251LnVuaXYuZ2RhLnBsPiAyMDAzCisgKiAKKyAqIFdyaXRlLW9uY2UtcmVhZC1tYW55IGhhc2ggdGFibGUsIHVzZWQgZm9yIGNoZWNraW5nIGlmIGEgZ2l2ZW4KKyAqIE1BQyBhZGRyZXNzIGJlbG9uZ3MgdG8gYSBzZXQgb3Igbm90IGFuZCBwb3NzaWJseSBmb3IgY2hlY2tpbmcKKyAqIGlmIGl0IGlzIHJlbGF0ZWQgd2l0aCBhIGdpdmVuIElQdjQgYWRkcmVzcy4KKyAqCisgKiBUaGUgaGFzaCB2YWx1ZSBvZiBhbiBhZGRyZXNzIGlzIGl0cyBsYXN0IGJ5dGUuCisgKiAKKyAqIEluIHJlYWwtd29ybGQgZXRoZXJuZXQgYWRkcmVzc2VzLCB2YWx1ZXMgb2YgdGhlIGxhc3QgYnl0ZSBhcmUKKyAqIGV2ZW5seSBkaXN0cmlidXRlZCBhbmQgdGhlcmUgaXMgbm8gbmVlZCB0byBjb25zaWRlciBvdGhlciBieXRlcy4KKyAqIEl0IHdvdWxkIG9ubHkgc2xvdyB0aGUgcm91dGluZXMgZG93bi4KKyAqCisgKiBGb3IgTUFDIGFkZHJlc3MgY29tcGFyaXNvbiBzcGVlZHVwIHJlYXNvbnMsIHdlIGludHJvZHVjZSBhIHRyaWNrLgorICogTUFDIGFkZHJlc3MgaXMgbWFwcGVkIG9udG8gYW4gYXJyYXkgb2YgdHdvIDMyLWJpdCBpbnRlZ2Vycy4KKyAqIFRoaXMgcGFpciBvZiBpbnRlZ2VycyBpcyBjb21wYXJlZCB3aXRoIE1BQyBhZGRyZXNzZXMgaW4gdGhlCisgKiBoYXNoIHRhYmxlLCB3aGljaCBhcmUgc3RvcmVkIGFsc28gaW4gZm9ybSBvZiBwYWlycyBvZiBpbnRlZ2VycworICogKGluIGBjbXAnIGFycmF5KS4gVGhpcyBpcyBxdWljayBhcyBpdCByZXF1aXJlcyBvbmx5IHR3byBlbGVtZW50YXJ5CisgKiBudW1iZXIgY29tcGFyaXNvbnMgaW4gd29yc3QgY2FzZS4gRnVydGhlciwgd2UgdGFrZSBhZHZhbnRhZ2Ugb2YKKyAqIGZhY3QgdGhhdCBlbnRyb3B5IG9mIDMgbGFzdCBieXRlcyBvZiBhZGRyZXNzIGlzIGxhcmdlciB0aGFuIGVudHJvcHkKKyAqIG9mIDMgZmlyc3QgYnl0ZXMuIFNvIGZpcnN0IHdlIGNvbXBhcmUgNCBsYXN0IGJ5dGVzIG9mIGFkZHJlc3NlcyBhbmQKKyAqIGlmIHRoZXkgYXJlIHRoZSBzYW1lIHdlIGNvbXBhcmUgMiBmaXJzdC4KKyAqCisgKiBZZXMsIGl0IGlzIGEgbWVtb3J5IG92ZXJoZWFkLCBidXQgaW4gMjAwMyBBRCwgd2hvIGNhcmVzPworICovCisKK3N0cnVjdCBlYnRfbWFjX3dvcm1oYXNoX3R1cGxlIHsKKwl1aW50MzJfdCBjbXBbMl07CisJX19iZTMyIGlwOworfTsKKworc3RydWN0IGVidF9tYWNfd29ybWhhc2ggeworCWludCB0YWJsZVsyNTddOworCWludCBwb29sc2l6ZTsKKwlzdHJ1Y3QgZWJ0X21hY193b3JtaGFzaF90dXBsZSBwb29sWzBdOworfTsKKworI2RlZmluZSBlYnRfbWFjX3dvcm1oYXNoX3NpemUoeCkgKCh4KSA/IHNpemVvZihzdHJ1Y3QgZWJ0X21hY193b3JtaGFzaCkgXAorCQkrICh4KS0+cG9vbHNpemUgKiBzaXplb2Yoc3RydWN0IGVidF9tYWNfd29ybWhhc2hfdHVwbGUpIDogMCkKKworc3RydWN0IGVidF9hbW9uZ19pbmZvIHsKKwlpbnQgd2hfZHN0X29mczsKKwlpbnQgd2hfc3JjX29mczsKKwlpbnQgYml0bWFzazsKK307CisKKyNkZWZpbmUgRUJUX0FNT05HX0RTVF9ORUcgMHgxCisjZGVmaW5lIEVCVF9BTU9OR19TUkNfTkVHIDB4MgorCisjZGVmaW5lIGVidF9hbW9uZ193aF9kc3QoeCkgKCh4KS0+d2hfZHN0X29mcyA/IFwKKwkoc3RydWN0IGVidF9tYWNfd29ybWhhc2gqKSgoY2hhciopKHgpICsgKHgpLT53aF9kc3Rfb2ZzKSA6IE5VTEwpCisjZGVmaW5lIGVidF9hbW9uZ193aF9zcmMoeCkgKCh4KS0+d2hfc3JjX29mcyA/IFwKKwkoc3RydWN0IGVidF9tYWNfd29ybWhhc2gqKSgoY2hhciopKHgpICsgKHgpLT53aF9zcmNfb2ZzKSA6IE5VTEwpCisKKyNkZWZpbmUgRUJUX0FNT05HX01BVENIICJhbW9uZyIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfYXJwLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfYXJwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JmNDg0MwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9hcnAuaApAQCAtMCwwICsxLDM0IEBACisjaWZuZGVmIF9fTElOVVhfQlJJREdFX0VCVF9BUlBfSAorI2RlZmluZSBfX0xJTlVYX0JSSURHRV9FQlRfQVJQX0gKKworI2RlZmluZSBFQlRfQVJQX09QQ09ERSAweDAxCisjZGVmaW5lIEVCVF9BUlBfSFRZUEUgMHgwMgorI2RlZmluZSBFQlRfQVJQX1BUWVBFIDB4MDQKKyNkZWZpbmUgRUJUX0FSUF9TUkNfSVAgMHgwOAorI2RlZmluZSBFQlRfQVJQX0RTVF9JUCAweDEwCisjZGVmaW5lIEVCVF9BUlBfU1JDX01BQyAweDIwCisjZGVmaW5lIEVCVF9BUlBfRFNUX01BQyAweDQwCisjZGVmaW5lIEVCVF9BUlBfR1JBVCAweDgwCisjZGVmaW5lIEVCVF9BUlBfTUFTSyAoRUJUX0FSUF9PUENPREUgfCBFQlRfQVJQX0hUWVBFIHwgRUJUX0FSUF9QVFlQRSB8IFwKKyAgIEVCVF9BUlBfU1JDX0lQIHwgRUJUX0FSUF9EU1RfSVAgfCBFQlRfQVJQX1NSQ19NQUMgfCBFQlRfQVJQX0RTVF9NQUMgfCBcCisgICBFQlRfQVJQX0dSQVQpCisjZGVmaW5lIEVCVF9BUlBfTUFUQ0ggImFycCIKKworc3RydWN0IGVidF9hcnBfaW5mbworeworCV9fYmUxNiBodHlwZTsKKwlfX2JlMTYgcHR5cGU7CisJX19iZTE2IG9wY29kZTsKKwlfX2JlMzIgc2FkZHI7CisJX19iZTMyIHNtc2s7CisJX19iZTMyIGRhZGRyOworCV9fYmUzMiBkbXNrOworCXVuc2lnbmVkIGNoYXIgc21hZGRyW0VUSF9BTEVOXTsKKwl1bnNpZ25lZCBjaGFyIHNtbXNrW0VUSF9BTEVOXTsKKwl1bnNpZ25lZCBjaGFyIGRtYWRkcltFVEhfQUxFTl07CisJdW5zaWduZWQgY2hhciBkbW1za1tFVEhfQUxFTl07CisJdWludDhfdCAgYml0bWFzazsKKwl1aW50OF90ICBpbnZmbGFnczsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X2FycHJlcGx5LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfYXJwcmVwbHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTc3ODk2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X2FycHJlcGx5LmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfX0xJTlVYX0JSSURHRV9FQlRfQVJQUkVQTFlfSAorI2RlZmluZSBfX0xJTlVYX0JSSURHRV9FQlRfQVJQUkVQTFlfSAorCitzdHJ1Y3QgZWJ0X2FycHJlcGx5X2luZm8geworCXVuc2lnbmVkIGNoYXIgbWFjW0VUSF9BTEVOXTsKKwlpbnQgdGFyZ2V0OworfTsKKyNkZWZpbmUgRUJUX0FSUFJFUExZX1RBUkdFVCAiYXJwcmVwbHkiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X2lwLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfaXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTcwOGZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X2lwLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqICBlYnRfaXAKKyAqCisgKglBdXRob3JzOgorICoJQmFydCBEZSBTY2h1eW1lciA8YmFydC5kZS5zY2h1eW1lckBwYW5kb3JhLmJlPgorICoKKyAqICBBcHJpbCwgMjAwMgorICoKKyAqICBDaGFuZ2VzOgorICogICAgYWRkZWQgaXAtc3BvcnQgYW5kIGlwLWRwb3J0CisgKiAgICBJbm5vbWluYXRlIFNlY3VyaXR5IFRlY2hub2xvZ2llcyBBRyA8bWhvcGZAaW5ub21pbmF0ZS5jb20+CisgKiAgICBTZXB0ZW1iZXIsIDIwMDIKKyAqLworCisjaWZuZGVmIF9fTElOVVhfQlJJREdFX0VCVF9JUF9ICisjZGVmaW5lIF9fTElOVVhfQlJJREdFX0VCVF9JUF9ICisKKyNkZWZpbmUgRUJUX0lQX1NPVVJDRSAweDAxCisjZGVmaW5lIEVCVF9JUF9ERVNUIDB4MDIKKyNkZWZpbmUgRUJUX0lQX1RPUyAweDA0CisjZGVmaW5lIEVCVF9JUF9QUk9UTyAweDA4CisjZGVmaW5lIEVCVF9JUF9TUE9SVCAweDEwCisjZGVmaW5lIEVCVF9JUF9EUE9SVCAweDIwCisjZGVmaW5lIEVCVF9JUF9NQVNLIChFQlRfSVBfU09VUkNFIHwgRUJUX0lQX0RFU1QgfCBFQlRfSVBfVE9TIHwgRUJUX0lQX1BST1RPIHxcCisgRUJUX0lQX1NQT1JUIHwgRUJUX0lQX0RQT1JUICkKKyNkZWZpbmUgRUJUX0lQX01BVENIICJpcCIKKworLyogdGhlIHNhbWUgdmFsdWVzIGFyZSB1c2VkIGZvciB0aGUgaW52ZmxhZ3MgKi8KK3N0cnVjdCBlYnRfaXBfaW5mbyB7CisJX19iZTMyIHNhZGRyOworCV9fYmUzMiBkYWRkcjsKKwlfX2JlMzIgc21zazsKKwlfX2JlMzIgZG1zazsKKwl1aW50OF90ICB0b3M7CisJdWludDhfdCAgcHJvdG9jb2w7CisJdWludDhfdCAgYml0bWFzazsKKwl1aW50OF90ICBpbnZmbGFnczsKKwl1aW50MTZfdCBzcG9ydFsyXTsKKwl1aW50MTZfdCBkcG9ydFsyXTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X2lwNi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X2lwNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZGU5ODcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfaXA2LmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqICBlYnRfaXA2CisgKgorICoJQXV0aG9yczoKKyAqIEt1by1MYW5nIFRzZW5nIDxrdW8tbGFuZy50c2VuZ0BpbnRlbC5jb20+CisgKiBNYW5vaGFyIENhc3RlbGlubyA8bWFub2hhci5yLmNhc3RlbGlub0BpbnRlbC5jb20+CisgKgorICogIEphbiAxMSwgMjAwOAorICoKKyAqLworCisjaWZuZGVmIF9fTElOVVhfQlJJREdFX0VCVF9JUDZfSAorI2RlZmluZSBfX0xJTlVYX0JSSURHRV9FQlRfSVA2X0gKKworI2RlZmluZSBFQlRfSVA2X1NPVVJDRSAweDAxCisjZGVmaW5lIEVCVF9JUDZfREVTVCAweDAyCisjZGVmaW5lIEVCVF9JUDZfVENMQVNTIDB4MDQKKyNkZWZpbmUgRUJUX0lQNl9QUk9UTyAweDA4CisjZGVmaW5lIEVCVF9JUDZfU1BPUlQgMHgxMAorI2RlZmluZSBFQlRfSVA2X0RQT1JUIDB4MjAKKyNkZWZpbmUgRUJUX0lQNl9NQVNLIChFQlRfSVA2X1NPVVJDRSB8IEVCVF9JUDZfREVTVCB8IEVCVF9JUDZfVENMQVNTIHxcCisJCSAgICAgIEVCVF9JUDZfUFJPVE8gfCBFQlRfSVA2X1NQT1JUIHwgRUJUX0lQNl9EUE9SVCkKKyNkZWZpbmUgRUJUX0lQNl9NQVRDSCAiaXA2IgorCisvKiB0aGUgc2FtZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIHRoZSBpbnZmbGFncyAqLworc3RydWN0IGVidF9pcDZfaW5mbyB7CisJc3RydWN0IGluNl9hZGRyIHNhZGRyOworCXN0cnVjdCBpbjZfYWRkciBkYWRkcjsKKwlzdHJ1Y3QgaW42X2FkZHIgc21zazsKKwlzdHJ1Y3QgaW42X2FkZHIgZG1zazsKKwl1aW50OF90ICB0Y2xhc3M7CisJdWludDhfdCAgcHJvdG9jb2w7CisJdWludDhfdCAgYml0bWFzazsKKwl1aW50OF90ICBpbnZmbGFnczsKKwl1aW50MTZfdCBzcG9ydFsyXTsKKwl1aW50MTZfdCBkcG9ydFsyXTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X2xpbWl0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfbGltaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmY3NmI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X2xpbWl0LmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBfX0xJTlVYX0JSSURHRV9FQlRfTElNSVRfSAorI2RlZmluZSBfX0xJTlVYX0JSSURHRV9FQlRfTElNSVRfSAorCisjZGVmaW5lIEVCVF9MSU1JVF9NQVRDSCAibGltaXQiCisKKy8qIHRpbWluZ3MgYXJlIGluIG1pbGxpc2Vjb25kcy4gKi8KKyNkZWZpbmUgRUJUX0xJTUlUX1NDQUxFIDEwMDAwCisKKy8qIDEvMTAsMDAwIHNlYyBwZXJpb2QgPT4gbWF4IG9mIDEwLDAwMC9zZWMuICBNaW4gcmF0ZSBpcyB0aGVuIDQyOTQ5MAorICAgc2Vjb25kcywgb3Igb25lIGV2ZXJ5IDU5IGhvdXJzLiAqLworCitzdHJ1Y3QgZWJ0X2xpbWl0X2luZm8geworCXVfaW50MzJfdCBhdmc7ICAgIC8qIEF2ZXJhZ2Ugc2VjcyBiZXR3ZWVuIHBhY2tldHMgKiBzY2FsZSAqLworCXVfaW50MzJfdCBidXJzdDsgIC8qIFBlcmlvZCBtdWx0aXBsaWVyIGZvciB1cHBlciBsaW1pdC4gKi8KKworCS8qIFVzZWQgaW50ZXJuYWxseSBieSB0aGUga2VybmVsICovCisJdW5zaWduZWQgbG9uZyBwcmV2OworCXVfaW50MzJfdCBjcmVkaXQ7CisJdV9pbnQzMl90IGNyZWRpdF9jYXAsIGNvc3Q7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9sb2cuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9sb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzJjZGZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X2xvZy5oCkBAIC0wLDAgKzEsMTggQEAKKyNpZm5kZWYgX19MSU5VWF9CUklER0VfRUJUX0xPR19ICisjZGVmaW5lIF9fTElOVVhfQlJJREdFX0VCVF9MT0dfSAorCisjZGVmaW5lIEVCVF9MT0dfSVAgMHgwMSAvKiBpZiB0aGUgZnJhbWUgaXMgbWFkZSBieSBpcCwgbG9nIHRoZSBpcCBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBFQlRfTE9HX0FSUCAweDAyCisjZGVmaW5lIEVCVF9MT0dfTkZMT0cgMHgwNAorI2RlZmluZSBFQlRfTE9HX0lQNiAweDA4CisjZGVmaW5lIEVCVF9MT0dfTUFTSyAoRUJUX0xPR19JUCB8IEVCVF9MT0dfQVJQIHwgRUJUX0xPR19JUDYpCisjZGVmaW5lIEVCVF9MT0dfUFJFRklYX1NJWkUgMzAKKyNkZWZpbmUgRUJUX0xPR19XQVRDSEVSICJsb2ciCisKK3N0cnVjdCBlYnRfbG9nX2luZm8geworCXVpbnQ4X3QgbG9nbGV2ZWw7CisJdWludDhfdCBwcmVmaXhbRUJUX0xPR19QUkVGSVhfU0laRV07CisJdWludDMyX3QgYml0bWFzazsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X21hcmtfbS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X21hcmtfbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZWIxMGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfbWFya19tLmgKQEAgLTAsMCArMSwxNCBAQAorI2lmbmRlZiBfX0xJTlVYX0JSSURHRV9FQlRfTUFSS19NX0gKKyNkZWZpbmUgX19MSU5VWF9CUklER0VfRUJUX01BUktfTV9ICisKKyNkZWZpbmUgRUJUX01BUktfQU5EIDB4MDEKKyNkZWZpbmUgRUJUX01BUktfT1IgMHgwMgorI2RlZmluZSBFQlRfTUFSS19NQVNLIChFQlRfTUFSS19BTkQgfCBFQlRfTUFSS19PUikKK3N0cnVjdCBlYnRfbWFya19tX2luZm8geworCXVuc2lnbmVkIGxvbmcgbWFyaywgbWFzazsKKwl1aW50OF90IGludmVydDsKKwl1aW50OF90IGJpdG1hc2s7Cit9OworI2RlZmluZSBFQlRfTUFSS19NQVRDSCAibWFya19tIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9tYXJrX3QuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9tYXJrX3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDVhMjY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X21hcmtfdC5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgX19MSU5VWF9CUklER0VfRUJUX01BUktfVF9ICisjZGVmaW5lIF9fTElOVVhfQlJJREdFX0VCVF9NQVJLX1RfSAorCisvKiBUaGUgdGFyZ2V0IG1lbWJlciBpcyByZXVzZWQgZm9yIGFkZGluZyBuZXcgYWN0aW9ucywgdGhlCisgKiB2YWx1ZSBvZiB0aGUgcmVhbCB0YXJnZXQgaXMgLTEgdG8gLU5VTV9TVEFOREFSRF9UQVJHRVRTLgorICogRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSA0IGxzYiAoMiB3b3VsZCBiZSBlbm91Z2gsCisgKiBidXQgbGV0J3MgcGxheSBpdCBzYWZlKSBhcmUga2VwdCB0byBkZXNpZ25hdGUgdGhpcyB0YXJnZXQuCisgKiBUaGUgcmVtYWluaW5nIGJpdHMgZGVzaWduYXRlIHRoZSBhY3Rpb24uIEJ5IG1ha2luZyB0aGUgc2V0CisgKiBhY3Rpb24gMHhmZmZmZmZmMCwgdGhlIHJlc3VsdCB3aWxsIGxvb2sgb2sgZm9yIG9sZGVyCisgKiB2ZXJzaW9ucy4gW1NlcHRlbWJlciAyMDA2XSAqLworI2RlZmluZSBNQVJLX1NFVF9WQUxVRSAoMHhmZmZmZmZmMCkKKyNkZWZpbmUgTUFSS19PUl9WQUxVRSAgKDB4ZmZmZmZmZTApCisjZGVmaW5lIE1BUktfQU5EX1ZBTFVFICgweGZmZmZmZmQwKQorI2RlZmluZSBNQVJLX1hPUl9WQUxVRSAoMHhmZmZmZmZjMCkKKworc3RydWN0IGVidF9tYXJrX3RfaW5mbyB7CisJdW5zaWduZWQgbG9uZyBtYXJrOworCS8qIEVCVF9BQ0NFUFQsIEVCVF9EUk9QLCBFQlRfQ09OVElOVUUgb3IgRUJUX1JFVFVSTiAqLworCWludCB0YXJnZXQ7Cit9OworI2RlZmluZSBFQlRfTUFSS19UQVJHRVQgIm1hcmsiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X25hdC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X25hdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNzRlM2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfbmF0LmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfX0xJTlVYX0JSSURHRV9FQlRfTkFUX0gKKyNkZWZpbmUgX19MSU5VWF9CUklER0VfRUJUX05BVF9ICisKKyNkZWZpbmUgTkFUX0FSUF9CSVQgICgweDAwMDAwMDEwKQorc3RydWN0IGVidF9uYXRfaW5mbyB7CisJdW5zaWduZWQgY2hhciBtYWNbRVRIX0FMRU5dOworCS8qIEVCVF9BQ0NFUFQsIEVCVF9EUk9QLCBFQlRfQ09OVElOVUUgb3IgRUJUX1JFVFVSTiAqLworCWludCB0YXJnZXQ7Cit9OworI2RlZmluZSBFQlRfU05BVF9UQVJHRVQgInNuYXQiCisjZGVmaW5lIEVCVF9ETkFUX1RBUkdFVCAiZG5hdCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfbmZsb2cuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9uZmxvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MjgxNzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfbmZsb2cuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIF9fTElOVVhfQlJJREdFX0VCVF9ORkxPR19ICisjZGVmaW5lIF9fTElOVVhfQlJJREdFX0VCVF9ORkxPR19ICisKKyNkZWZpbmUgRUJUX05GTE9HX01BU0sgMHgwCisKKyNkZWZpbmUgRUJUX05GTE9HX1BSRUZJWF9TSVpFIDY0CisjZGVmaW5lIEVCVF9ORkxPR19XQVRDSEVSICJuZmxvZyIKKworI2RlZmluZSBFQlRfTkZMT0dfREVGQVVMVF9HUk9VUAkJMHgxCisjZGVmaW5lIEVCVF9ORkxPR19ERUZBVUxUX1RIUkVTSE9MRAkxCisKK3N0cnVjdCBlYnRfbmZsb2dfaW5mbyB7CisJdV9pbnQzMl90IGxlbjsKKwl1X2ludDE2X3QgZ3JvdXA7CisJdV9pbnQxNl90IHRocmVzaG9sZDsKKwl1X2ludDE2X3QgZmxhZ3M7CisJdV9pbnQxNl90IHBhZDsKKwljaGFyIHByZWZpeFtFQlRfTkZMT0dfUFJFRklYX1NJWkVdOworfTsKKworI2VuZGlmCQkJCS8qIF9fTElOVVhfQlJJREdFX0VCVF9ORkxPR19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfcGt0dHlwZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X3BrdHR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWE3OTk4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X3BrdHR5cGUuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9fTElOVVhfQlJJREdFX0VCVF9QS1RUWVBFX0gKKyNkZWZpbmUgX19MSU5VWF9CUklER0VfRUJUX1BLVFRZUEVfSAorCitzdHJ1Y3QgZWJ0X3BrdHR5cGVfaW5mbyB7CisJdWludDhfdCBwa3RfdHlwZTsKKwl1aW50OF90IGludmVydDsKK307CisjZGVmaW5lIEVCVF9QS1RUWVBFX01BVENIICJwa3R0eXBlIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9yZWRpcmVjdC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X3JlZGlyZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ5NjIyYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9yZWRpcmVjdC5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX19MSU5VWF9CUklER0VfRUJUX1JFRElSRUNUX0gKKyNkZWZpbmUgX19MSU5VWF9CUklER0VfRUJUX1JFRElSRUNUX0gKKworc3RydWN0IGVidF9yZWRpcmVjdF9pbmZvIHsKKwkvKiBFQlRfQUNDRVBULCBFQlRfRFJPUCwgRUJUX0NPTlRJTlVFIG9yIEVCVF9SRVRVUk4gKi8KKwlpbnQgdGFyZ2V0OworfTsKKyNkZWZpbmUgRUJUX1JFRElSRUNUX1RBUkdFVCAicmVkaXJlY3QiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X3N0cC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X3N0cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MDNhMGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfc3RwLmgKQEAgLTAsMCArMSw0NCBAQAorI2lmbmRlZiBfX0xJTlVYX0JSSURHRV9FQlRfU1RQX0gKKyNkZWZpbmUgX19MSU5VWF9CUklER0VfRUJUX1NUUF9ICisKKyNkZWZpbmUgRUJUX1NUUF9UWVBFCQkweDAwMDEKKworI2RlZmluZSBFQlRfU1RQX0ZMQUdTCQkweDAwMDIKKyNkZWZpbmUgRUJUX1NUUF9ST09UUFJJTwkweDAwMDQKKyNkZWZpbmUgRUJUX1NUUF9ST09UQUREUgkweDAwMDgKKyNkZWZpbmUgRUJUX1NUUF9ST09UQ09TVAkweDAwMTAKKyNkZWZpbmUgRUJUX1NUUF9TRU5ERVJQUklPCTB4MDAyMAorI2RlZmluZSBFQlRfU1RQX1NFTkRFUkFERFIJMHgwMDQwCisjZGVmaW5lIEVCVF9TVFBfUE9SVAkJMHgwMDgwCisjZGVmaW5lIEVCVF9TVFBfTVNHQUdFCQkweDAxMDAKKyNkZWZpbmUgRUJUX1NUUF9NQVhBR0UJCTB4MDIwMAorI2RlZmluZSBFQlRfU1RQX0hFTExPVElNRQkweDA0MDAKKyNkZWZpbmUgRUJUX1NUUF9GV0RECQkweDA4MDAKKworI2RlZmluZSBFQlRfU1RQX01BU0sJCTB4MGZmZgorI2RlZmluZSBFQlRfU1RQX0NPTkZJR19NQVNLCTB4MGZmZQorCisjZGVmaW5lIEVCVF9TVFBfTUFUQ0ggInN0cCIKKworc3RydWN0IGVidF9zdHBfY29uZmlnX2luZm8geworCXVpbnQ4X3QgZmxhZ3M7CisJdWludDE2X3Qgcm9vdF9wcmlvbCwgcm9vdF9wcmlvdTsKKwljaGFyIHJvb3RfYWRkcls2XSwgcm9vdF9hZGRybXNrWzZdOworCXVpbnQzMl90IHJvb3RfY29zdGwsIHJvb3RfY29zdHU7CisJdWludDE2X3Qgc2VuZGVyX3ByaW9sLCBzZW5kZXJfcHJpb3U7CisJY2hhciBzZW5kZXJfYWRkcls2XSwgc2VuZGVyX2FkZHJtc2tbNl07CisJdWludDE2X3QgcG9ydGwsIHBvcnR1OworCXVpbnQxNl90IG1zZ19hZ2VsLCBtc2dfYWdldTsKKwl1aW50MTZfdCBtYXhfYWdlbCwgbWF4X2FnZXU7CisJdWludDE2X3QgaGVsbG9fdGltZWwsIGhlbGxvX3RpbWV1OworCXVpbnQxNl90IGZvcndhcmRfZGVsYXlsLCBmb3J3YXJkX2RlbGF5dTsKK307CisKK3N0cnVjdCBlYnRfc3RwX2luZm8geworCXVpbnQ4X3QgdHlwZTsKKwlzdHJ1Y3QgZWJ0X3N0cF9jb25maWdfaW5mbyBjb25maWc7CisJdWludDE2X3QgYml0bWFzazsKKwl1aW50MTZfdCBpbnZmbGFnczsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X3Vsb2cuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF91bG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY3N2UyNgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF91bG9nLmgKQEAgLTAsMCArMSwzNiBAQAorI2lmbmRlZiBfRUJUX1VMT0dfSAorI2RlZmluZSBfRUJUX1VMT0dfSAorCisjZGVmaW5lIEVCVF9VTE9HX0RFRkFVTFRfTkxHUk9VUCAwCisjZGVmaW5lIEVCVF9VTE9HX0RFRkFVTFRfUVRIUkVTSE9MRCAxCisjZGVmaW5lIEVCVF9VTE9HX01BWE5MR1JPVVBTIDMyIC8qIGhhcmRjb2RlZCBuZXRsaW5rIG1heCAqLworI2RlZmluZSBFQlRfVUxPR19QUkVGSVhfTEVOIDMyCisjZGVmaW5lIEVCVF9VTE9HX01BWF9RTEVOIDUwCisjZGVmaW5lIEVCVF9VTE9HX1dBVENIRVIgInVsb2ciCisjZGVmaW5lIEVCVF9VTE9HX1ZFUlNJT04gMQorCitzdHJ1Y3QgZWJ0X3Vsb2dfaW5mbyB7CisJdWludDMyX3Qgbmxncm91cDsKKwl1bnNpZ25lZCBpbnQgY3ByYW5nZTsKKwl1bnNpZ25lZCBpbnQgcXRocmVzaG9sZDsKKwljaGFyIHByZWZpeFtFQlRfVUxPR19QUkVGSVhfTEVOXTsKK307CisKK3R5cGVkZWYgc3RydWN0IGVidF91bG9nX3BhY2tldF9tc2cgeworCWludCB2ZXJzaW9uOworCWNoYXIgaW5kZXZbSUZOQU1TSVpdOworCWNoYXIgb3V0ZGV2W0lGTkFNU0laXTsKKwljaGFyIHBoeXNpbmRldltJRk5BTVNJWl07CisJY2hhciBwaHlzb3V0ZGV2W0lGTkFNU0laXTsKKwljaGFyIHByZWZpeFtFQlRfVUxPR19QUkVGSVhfTEVOXTsKKwlzdHJ1Y3QgdGltZXZhbCBzdGFtcDsKKwl1bnNpZ25lZCBsb25nIG1hcms7CisJdW5zaWduZWQgaW50IGhvb2s7CisJc2l6ZV90IGRhdGFfbGVuOworCS8qIFRoZSBjb21wbGV0ZSBwYWNrZXQsIGluY2x1ZGluZyBFdGhlcm5ldCBoZWFkZXIgYW5kIHBlcmhhcHMKKwkgKiB0aGUgVkxBTiBoZWFkZXIgaXMgYXBwZW5kZWQgKi8KKwl1bnNpZ25lZCBjaGFyIGRhdGFbMF0gX19hdHRyaWJ1dGVfXworCSAgICAgICAgICAgICAgICAgICAgICAoKGFsaWduZWQgKF9fYWxpZ25vZl9fKHN0cnVjdCBlYnRfdWxvZ19pbmZvKSkpKTsKK30gZWJ0X3Vsb2dfcGFja2V0X21zZ190OworCisjZW5kaWYgLyogX0VCVF9VTE9HX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF92bGFuLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfdmxhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkOThiZTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfdmxhbi5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgX19MSU5VWF9CUklER0VfRUJUX1ZMQU5fSAorI2RlZmluZSBfX0xJTlVYX0JSSURHRV9FQlRfVkxBTl9ICisKKyNkZWZpbmUgRUJUX1ZMQU5fSUQJMHgwMQorI2RlZmluZSBFQlRfVkxBTl9QUklPCTB4MDIKKyNkZWZpbmUgRUJUX1ZMQU5fRU5DQVAJMHgwNAorI2RlZmluZSBFQlRfVkxBTl9NQVNLIChFQlRfVkxBTl9JRCB8IEVCVF9WTEFOX1BSSU8gfCBFQlRfVkxBTl9FTkNBUCkKKyNkZWZpbmUgRUJUX1ZMQU5fTUFUQ0ggInZsYW4iCisKK3N0cnVjdCBlYnRfdmxhbl9pbmZvIHsKKwl1aW50MTZfdCBpZDsJCS8qIFZMQU4gSUQgezEtNDA5NX0gKi8KKwl1aW50OF90IHByaW87CQkvKiBWTEFOIFVzZXIgUHJpb3JpdHkgezAtN30gKi8KKwlfX2JlMTYgZW5jYXA7CQkvKiBWTEFOIEVuY2Fwc3VsYXRlZCBmcmFtZSBjb2RlIHswLTY1NTM1fSAqLworCXVpbnQ4X3QgYml0bWFzazsJCS8qIEFyZ3MgYml0bWFzayBiaXQgMT0xIC0gSUQgYXJnLAorCQkJCSAgIGJpdCAyPTEgVXNlci1Qcmlvcml0eSBhcmcsIGJpdCAzPTEgZW5jYXAqLworCXVpbnQ4X3QgaW52ZmxhZ3M7CQkvKiBJbnZlcnNlIGJpdG1hc2sgIGJpdCAxPTEgLSBpbnZlcnNlZCBJRCBhcmcsIAorCQkJCSAgIGJpdCAyPTEgLSBpbnZlcnNlZCBQaXJvcml0eSBhcmcgKi8KK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0YWJsZXMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidGFibGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk4ODQ5OQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidGFibGVzLmgKQEAgLTAsMCArMSwyNjggQEAKKy8qCisgKiAgZWJ0YWJsZXMKKyAqCisgKglBdXRob3JzOgorICoJQmFydCBEZSBTY2h1eW1lcgkJPGJkc2NodXltQHBhbmRvcmEuYmU+CisgKgorICogIGVidGFibGVzLmMsdiAyLjAsIEFwcmlsLCAyMDAyCisgKgorICogIFRoaXMgY29kZSBpcyBzdG9uZ2x5IGluc3BpcmVkIG9uIHRoZSBpcHRhYmxlcyBjb2RlIHdoaWNoIGlzCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5IFBhdWwgYFJ1c3R5JyBSdXNzZWxsICYgTWljaGFlbCBKLiBOZXVsaW5nCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX0JSSURHRV9FRkZfSAorI2RlZmluZSBfX0xJTlVYX0JSSURHRV9FRkZfSAorI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisKKyNkZWZpbmUgRUJUX1RBQkxFX01BWE5BTUVMRU4gMzIKKyNkZWZpbmUgRUJUX0NIQUlOX01BWE5BTUVMRU4gRUJUX1RBQkxFX01BWE5BTUVMRU4KKyNkZWZpbmUgRUJUX0ZVTkNUSU9OX01BWE5BTUVMRU4gRUJUX1RBQkxFX01BWE5BTUVMRU4KKworLyogdmVyZGljdHMgPjAgYXJlICJicmFuY2hlcyIgKi8KKyNkZWZpbmUgRUJUX0FDQ0VQVCAgIC0xCisjZGVmaW5lIEVCVF9EUk9QICAgICAtMgorI2RlZmluZSBFQlRfQ09OVElOVUUgLTMKKyNkZWZpbmUgRUJUX1JFVFVSTiAgIC00CisjZGVmaW5lIE5VTV9TVEFOREFSRF9UQVJHRVRTICAgNAorLyogZWJ0YWJsZXMgdGFyZ2V0IG1vZHVsZXMgc3RvcmUgdGhlIHZlcmRpY3QgaW5zaWRlIGFuIGludC4gV2UgY2FuCisgKiByZWNsYWltIGEgcGFydCBvZiB0aGlzIGludCBmb3IgYmFja3dhcmRzIGNvbXBhdGlibGUgZXh0ZW5zaW9ucy4KKyAqIFRoZSA0IGxzYiBhcmUgbW9yZSB0aGFuIGVub3VnaCB0byBzdG9yZSB0aGUgdmVyZGljdC4gKi8KKyNkZWZpbmUgRUJUX1ZFUkRJQ1RfQklUUyAweDAwMDAwMDBGCisKK3N0cnVjdCB4dF9tYXRjaDsKK3N0cnVjdCB4dF90YXJnZXQ7CisKK3N0cnVjdCBlYnRfY291bnRlciB7CisJdWludDY0X3QgcGNudDsKKwl1aW50NjRfdCBiY250OworfTsKKworc3RydWN0IGVidF9yZXBsYWNlIHsKKwljaGFyIG5hbWVbRUJUX1RBQkxFX01BWE5BTUVMRU5dOworCXVuc2lnbmVkIGludCB2YWxpZF9ob29rczsKKwkvKiBuciBvZiBydWxlcyBpbiB0aGUgdGFibGUgKi8KKwl1bnNpZ25lZCBpbnQgbmVudHJpZXM7CisJLyogdG90YWwgc2l6ZSBvZiB0aGUgZW50cmllcyAqLworCXVuc2lnbmVkIGludCBlbnRyaWVzX3NpemU7CisJLyogc3RhcnQgb2YgdGhlIGNoYWlucyAqLworCXN0cnVjdCBlYnRfZW50cmllcyAqaG9va19lbnRyeVtORl9CUl9OVU1IT09LU107CisJLyogbnIgb2YgY291bnRlcnMgdXNlcnNwYWNlIGV4cGVjdHMgYmFjayAqLworCXVuc2lnbmVkIGludCBudW1fY291bnRlcnM7CisJLyogd2hlcmUgdGhlIGtlcm5lbCB3aWxsIHB1dCB0aGUgb2xkIGNvdW50ZXJzICovCisJc3RydWN0IGVidF9jb3VudGVyICpjb3VudGVyczsKKwljaGFyICplbnRyaWVzOworfTsKKworc3RydWN0IGVidF9yZXBsYWNlX2tlcm5lbCB7CisJY2hhciBuYW1lW0VCVF9UQUJMRV9NQVhOQU1FTEVOXTsKKwl1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3M7CisJLyogbnIgb2YgcnVsZXMgaW4gdGhlIHRhYmxlICovCisJdW5zaWduZWQgaW50IG5lbnRyaWVzOworCS8qIHRvdGFsIHNpemUgb2YgdGhlIGVudHJpZXMgKi8KKwl1bnNpZ25lZCBpbnQgZW50cmllc19zaXplOworCS8qIHN0YXJ0IG9mIHRoZSBjaGFpbnMgKi8KKwlzdHJ1Y3QgZWJ0X2VudHJpZXMgKmhvb2tfZW50cnlbTkZfQlJfTlVNSE9PS1NdOworCS8qIG5yIG9mIGNvdW50ZXJzIHVzZXJzcGFjZSBleHBlY3RzIGJhY2sgKi8KKwl1bnNpZ25lZCBpbnQgbnVtX2NvdW50ZXJzOworCS8qIHdoZXJlIHRoZSBrZXJuZWwgd2lsbCBwdXQgdGhlIG9sZCBjb3VudGVycyAqLworCXN0cnVjdCBlYnRfY291bnRlciAqY291bnRlcnM7CisJY2hhciAqZW50cmllczsKK307CisKK3N0cnVjdCBlYnRfZW50cmllcyB7CisJLyogdGhpcyBmaWVsZCBpcyBhbHdheXMgc2V0IHRvIHplcm8KKwkgKiBTZWUgRUJUX0VOVFJZX09SX0VOVFJJRVMuCisJICogTXVzdCBiZSBzYW1lIHNpemUgYXMgZWJ0X2VudHJ5LmJpdG1hc2sgKi8KKwl1bnNpZ25lZCBpbnQgZGlzdGluZ3Vpc2hlcjsKKwkvKiB0aGUgY2hhaW4gbmFtZSAqLworCWNoYXIgbmFtZVtFQlRfQ0hBSU5fTUFYTkFNRUxFTl07CisJLyogY291bnRlciBvZmZzZXQgZm9yIHRoaXMgY2hhaW4gKi8KKwl1bnNpZ25lZCBpbnQgY291bnRlcl9vZmZzZXQ7CisJLyogb25lIHN0YW5kYXJkIChhY2NlcHQsIGRyb3AsIHJldHVybikgcGVyIGhvb2sgKi8KKwlpbnQgcG9saWN5OworCS8qIG5yLiBvZiBlbnRyaWVzICovCisJdW5zaWduZWQgaW50IG5lbnRyaWVzOworCS8qIGVudHJ5IGxpc3QgKi8KKwljaGFyIGRhdGFbMF0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKF9fYWxpZ25vZl9fKHN0cnVjdCBlYnRfcmVwbGFjZSkpKSk7Cit9OworCisvKiB1c2VkIGZvciB0aGUgYml0bWFzayBvZiBzdHJ1Y3QgZWJ0X2VudHJ5ICovCisKKy8qIFRoaXMgaXMgYSBoYWNrIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGJldHdlZW4gYW4gZWJ0X2VudHJ5IHN0cnVjdCBhbmQgYW4KKyAqIGVidF9lbnRyaWVzIHN0cnVjdCB3aGVuIHRyYXZlcnNpbmcgdGhlIGVudHJpZXMgZnJvbSBzdGFydCB0byBlbmQuCisgKiBVc2luZyB0aGlzIHNpbXBsaWZpZXMgdGhlIGNvZGUgYWxvdCwgd2hpbGUgc3RpbGwgYmVpbmcgYWJsZSB0byB1c2UKKyAqIGVidF9lbnRyaWVzLgorICogQ29udHJhcnksIGlwdGFibGVzIGRvZXNuJ3QgdXNlIHNvbWV0aGluZyBsaWtlIGVidF9lbnRyaWVzIGFuZCB0aGVyZWZvcmUgdXNlcworICogZGlmZmVyZW50IHRlY2huaXF1ZXMgZm9yIG5hbWluZyB0aGUgcG9saWN5IGFuZCBzdWNoLiBTbywgaXB0YWJsZXMgZG9lc24ndAorICogbmVlZCBhIGhhY2sgbGlrZSB0aGlzLgorICovCisjZGVmaW5lIEVCVF9FTlRSWV9PUl9FTlRSSUVTIDB4MDEKKy8qIHRoZXNlIGFyZSB0aGUgbm9ybWFsIG1hc2tzICovCisjZGVmaW5lIEVCVF9OT1BST1RPIDB4MDIKKyNkZWZpbmUgRUJUXzgwMl8zIDB4MDQKKyNkZWZpbmUgRUJUX1NPVVJDRU1BQyAweDA4CisjZGVmaW5lIEVCVF9ERVNUTUFDIDB4MTAKKyNkZWZpbmUgRUJUX0ZfTUFTSyAoRUJUX05PUFJPVE8gfCBFQlRfODAyXzMgfCBFQlRfU09VUkNFTUFDIHwgRUJUX0RFU1RNQUMgXAorICAgfCBFQlRfRU5UUllfT1JfRU5UUklFUykKKworI2RlZmluZSBFQlRfSVBST1RPIDB4MDEKKyNkZWZpbmUgRUJUX0lJTiAweDAyCisjZGVmaW5lIEVCVF9JT1VUIDB4MDQKKyNkZWZpbmUgRUJUX0lTT1VSQ0UgMHg4CisjZGVmaW5lIEVCVF9JREVTVCAweDEwCisjZGVmaW5lIEVCVF9JTE9HSUNBTElOIDB4MjAKKyNkZWZpbmUgRUJUX0lMT0dJQ0FMT1VUIDB4NDAKKyNkZWZpbmUgRUJUX0lOVl9NQVNLIChFQlRfSVBST1RPIHwgRUJUX0lJTiB8IEVCVF9JT1VUIHwgRUJUX0lMT0dJQ0FMSU4gXAorICAgfCBFQlRfSUxPR0lDQUxPVVQgfCBFQlRfSVNPVVJDRSB8IEVCVF9JREVTVCkKKworc3RydWN0IGVidF9lbnRyeV9tYXRjaCB7CisJdW5pb24geworCQljaGFyIG5hbWVbRUJUX0ZVTkNUSU9OX01BWE5BTUVMRU5dOworCQlzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoOworCX0gdTsKKwkvKiBzaXplIG9mIGRhdGEgKi8KKwl1bnNpZ25lZCBpbnQgbWF0Y2hfc2l6ZTsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbMF0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKF9fYWxpZ25vZl9fKHN0cnVjdCBlYnRfcmVwbGFjZSkpKSk7Cit9OworCitzdHJ1Y3QgZWJ0X2VudHJ5X3dhdGNoZXIgeworCXVuaW9uIHsKKwkJY2hhciBuYW1lW0VCVF9GVU5DVElPTl9NQVhOQU1FTEVOXTsKKwkJc3RydWN0IHh0X3RhcmdldCAqd2F0Y2hlcjsKKwl9IHU7CisJLyogc2l6ZSBvZiBkYXRhICovCisJdW5zaWduZWQgaW50IHdhdGNoZXJfc2l6ZTsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbMF0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKF9fYWxpZ25vZl9fKHN0cnVjdCBlYnRfcmVwbGFjZSkpKSk7Cit9OworCitzdHJ1Y3QgZWJ0X2VudHJ5X3RhcmdldCB7CisJdW5pb24geworCQljaGFyIG5hbWVbRUJUX0ZVTkNUSU9OX01BWE5BTUVMRU5dOworCQlzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQ7CisJfSB1OworCS8qIHNpemUgb2YgZGF0YSAqLworCXVuc2lnbmVkIGludCB0YXJnZXRfc2l6ZTsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbMF0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKF9fYWxpZ25vZl9fKHN0cnVjdCBlYnRfcmVwbGFjZSkpKSk7Cit9OworCisjZGVmaW5lIEVCVF9TVEFOREFSRF9UQVJHRVQgInN0YW5kYXJkIgorc3RydWN0IGVidF9zdGFuZGFyZF90YXJnZXQgeworCXN0cnVjdCBlYnRfZW50cnlfdGFyZ2V0IHRhcmdldDsKKwlpbnQgdmVyZGljdDsKK307CisKKy8qIG9uZSBlbnRyeSAqLworc3RydWN0IGVidF9lbnRyeSB7CisJLyogdGhpcyBuZWVkcyB0byBiZSB0aGUgZmlyc3QgZmllbGQgKi8KKwl1bnNpZ25lZCBpbnQgYml0bWFzazsKKwl1bnNpZ25lZCBpbnQgaW52ZmxhZ3M7CisJX19iZTE2IGV0aHByb3RvOworCS8qIHRoZSBwaHlzaWNhbCBpbi1kZXYgKi8KKwljaGFyIGluW0lGTkFNU0laXTsKKwkvKiB0aGUgbG9naWNhbCBpbi1kZXYgKi8KKwljaGFyIGxvZ2ljYWxfaW5bSUZOQU1TSVpdOworCS8qIHRoZSBwaHlzaWNhbCBvdXQtZGV2ICovCisJY2hhciBvdXRbSUZOQU1TSVpdOworCS8qIHRoZSBsb2dpY2FsIG91dC1kZXYgKi8KKwljaGFyIGxvZ2ljYWxfb3V0W0lGTkFNU0laXTsKKwl1bnNpZ25lZCBjaGFyIHNvdXJjZW1hY1tFVEhfQUxFTl07CisJdW5zaWduZWQgY2hhciBzb3VyY2Vtc2tbRVRIX0FMRU5dOworCXVuc2lnbmVkIGNoYXIgZGVzdG1hY1tFVEhfQUxFTl07CisJdW5zaWduZWQgY2hhciBkZXN0bXNrW0VUSF9BTEVOXTsKKwkvKiBzaXplb2YgZWJ0X2VudHJ5ICsgbWF0Y2hlcyAqLworCXVuc2lnbmVkIGludCB3YXRjaGVyc19vZmZzZXQ7CisJLyogc2l6ZW9mIGVidF9lbnRyeSArIG1hdGNoZXMgKyB3YXRjaGVycyAqLworCXVuc2lnbmVkIGludCB0YXJnZXRfb2Zmc2V0OworCS8qIHNpemVvZiBlYnRfZW50cnkgKyBtYXRjaGVzICsgd2F0Y2hlcnMgKyB0YXJnZXQgKi8KKwl1bnNpZ25lZCBpbnQgbmV4dF9vZmZzZXQ7CisJdW5zaWduZWQgY2hhciBlbGVtc1swXSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoX19hbGlnbm9mX18oc3RydWN0IGVidF9yZXBsYWNlKSkpKTsKK307CisKKy8qIHtnLHN9ZXRzb2Nrb3B0IG51bWJlcnMgKi8KKyNkZWZpbmUgRUJUX0JBU0VfQ1RMICAgICAgICAgICAgMTI4CisKKyNkZWZpbmUgRUJUX1NPX1NFVF9FTlRSSUVTICAgICAgKEVCVF9CQVNFX0NUTCkKKyNkZWZpbmUgRUJUX1NPX1NFVF9DT1VOVEVSUyAgICAgKEVCVF9TT19TRVRfRU5UUklFUysxKQorI2RlZmluZSBFQlRfU09fU0VUX01BWCAgICAgICAgICAoRUJUX1NPX1NFVF9DT1VOVEVSUysxKQorCisjZGVmaW5lIEVCVF9TT19HRVRfSU5GTyAgICAgICAgIChFQlRfQkFTRV9DVEwpCisjZGVmaW5lIEVCVF9TT19HRVRfRU5UUklFUyAgICAgIChFQlRfU09fR0VUX0lORk8rMSkKKyNkZWZpbmUgRUJUX1NPX0dFVF9JTklUX0lORk8gICAgKEVCVF9TT19HRVRfRU5UUklFUysxKQorI2RlZmluZSBFQlRfU09fR0VUX0lOSVRfRU5UUklFUyAoRUJUX1NPX0dFVF9JTklUX0lORk8rMSkKKyNkZWZpbmUgRUJUX1NPX0dFVF9NQVggICAgICAgICAgKEVCVF9TT19HRVRfSU5JVF9FTlRSSUVTKzEpCisKKworLyogYmxhdGVudGx5IHN0b2xlbiBmcm9tIGlwX3RhYmxlcy5oCisgKiBmbiByZXR1cm5zIDAgdG8gY29udGludWUgaXRlcmF0aW9uICovCisjZGVmaW5lIEVCVF9NQVRDSF9JVEVSQVRFKGUsIGZuLCBhcmdzLi4uKSAgICAgICAgICAgICAgICAgICBcCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJdW5zaWduZWQgaW50IF9faTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpbnQgX19yZXQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXN0cnVjdCBlYnRfZW50cnlfbWF0Y2ggKl9fbWF0Y2g7ICAgICAgICAgICAgICAgICAgICBcCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlmb3IgKF9faSA9IHNpemVvZihzdHJ1Y3QgZWJ0X2VudHJ5KTsgICAgICAgICAgICAgICAgXAorCSAgICAgX19pIDwgKGUpLT53YXRjaGVyc19vZmZzZXQ7ICAgICAgICAgICAgICAgICAgICBcCisJICAgICBfX2kgKz0gX19tYXRjaC0+bWF0Y2hfc2l6ZSArICAgICAgICAgICAgICAgICAgIFwKKwkgICAgIHNpemVvZihzdHJ1Y3QgZWJ0X2VudHJ5X21hdGNoKSkgeyAgICAgICAgICAgICAgXAorCQlfX21hdGNoID0gKHZvaWQgKikoZSkgKyBfX2k7ICAgICAgICAgICAgICAgIFwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCV9fcmV0ID0gZm4oX19tYXRjaCAsICMjIGFyZ3MpOyAgICAgICAgICAgICAgXAorCQlpZiAoX19yZXQgIT0gMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCWJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIChfX3JldCA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChfX2kgIT0gKGUpLT53YXRjaGVyc19vZmZzZXQpICAgICAgICAgICAgXAorCQkJX19yZXQgPSAtRUlOVkFMOyAgICAgICAgICAgICAgICAgICAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJX19yZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30pCisKKyNkZWZpbmUgRUJUX1dBVENIRVJfSVRFUkFURShlLCBmbiwgYXJncy4uLikgICAgICAgICAgICAgICAgIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl1bnNpZ25lZCBpbnQgX19pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWludCBfX3JldCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJc3RydWN0IGVidF9lbnRyeV93YXRjaGVyICpfX3dhdGNoZXI7ICAgICAgICAgICAgICAgIFwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWZvciAoX19pID0gZS0+d2F0Y2hlcnNfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICBfX2kgPCAoZSktPnRhcmdldF9vZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgIF9faSArPSBfX3dhdGNoZXItPndhdGNoZXJfc2l6ZSArICAgICAgICAgICAgICAgXAorCSAgICAgc2l6ZW9mKHN0cnVjdCBlYnRfZW50cnlfd2F0Y2hlcikpIHsgICAgICAgICAgICBcCisJCV9fd2F0Y2hlciA9ICh2b2lkICopKGUpICsgX19pOyAgICAgICAgICAgICAgXAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJX19yZXQgPSBmbihfX3dhdGNoZXIgLCAjIyBhcmdzKTsgICAgICAgICAgICBcCisJCWlmIChfX3JldCAhPSAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKF9fcmV0ID09IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYgKF9faSAhPSAoZSktPnRhcmdldF9vZmZzZXQpICAgICAgICAgICAgICBcCisJCQlfX3JldCA9IC1FSU5WQUw7ICAgICAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfX3JldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSkKKworI2RlZmluZSBFQlRfRU5UUllfSVRFUkFURShlbnRyaWVzLCBzaXplLCBmbiwgYXJncy4uLikgICAgICAgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXVuc2lnbmVkIGludCBfX2k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaW50IF9fcmV0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlzdHJ1Y3QgZWJ0X2VudHJ5ICpfX2VudHJ5OyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZm9yIChfX2kgPSAwOyBfX2kgPCAoc2l6ZSk7KSB7ICAgICAgICAgICAgICAgICAgICAgIFwKKwkJX19lbnRyeSA9ICh2b2lkICopKGVudHJpZXMpICsgX19pOyAgICAgICAgICBcCisJCV9fcmV0ID0gZm4oX19lbnRyeSAsICMjIGFyZ3MpOyAgICAgICAgICAgICAgXAorCQlpZiAoX19yZXQgIT0gMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCWJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYgKF9fZW50cnktPmJpdG1hc2sgIT0gMCkgICAgICAgICAgICAgICAgICBcCisJCQlfX2kgKz0gX19lbnRyeS0+bmV4dF9vZmZzZXQ7ICAgICAgICBcCisJCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJX19pICs9IHNpemVvZihzdHJ1Y3QgZWJ0X2VudHJpZXMpOyAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKF9fcmV0ID09IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYgKF9faSAhPSAoc2l6ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlfX3JldCA9IC1FSU5WQUw7ICAgICAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfX3JldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2RlY25ldC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9kZWNuZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTcwYzZjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9kZWNuZXQuaApAQCAtMCwwICsxLDcyIEBACisjaWZuZGVmIF9fTElOVVhfREVDTkVUX05FVEZJTFRFUl9ICisjZGVmaW5lIF9fTElOVVhfREVDTkVUX05FVEZJTFRFUl9ICisKKy8qIERFQ25ldC1zcGVjaWZpYyBkZWZpbmVzIGZvciBuZXRmaWx0ZXIuIAorICogVGhpcyBmaWxlIChDKSBTdGV2ZSBXaGl0ZWhvdXNlIDE5OTkgZGVyaXZlZCBmcm9tIHRoZQorICogaXB2NCBuZXRmaWx0ZXIgaGVhZGVyIGZpbGUgd2hpY2ggaXMKKyAqIChDKTE5OTggUnVzdHkgUnVzc2VsbCAtLSBUaGlzIGNvZGUgaXMgR1BMLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKworLyogb25seSBmb3IgdXNlcnNwYWNlIGNvbXBhdGliaWxpdHkgKi8KKy8qIElQIENhY2hlIGJpdHMuICovCisvKiBTcmMgSVAgYWRkcmVzcy4gKi8KKyNkZWZpbmUgTkZDX0ROX1NSQwkJMHgwMDAxCisvKiBEZXN0IElQIGFkZHJlc3MuICovCisjZGVmaW5lIE5GQ19ETl9EU1QJCTB4MDAwMgorLyogSW5wdXQgZGV2aWNlLiAqLworI2RlZmluZSBORkNfRE5fSUZfSU4JCTB4MDAwNAorLyogT3V0cHV0IGRldmljZS4gKi8KKyNkZWZpbmUgTkZDX0ROX0lGX09VVAkJMHgwMDA4CisKKy8qIERFQ25ldCBIb29rcyAqLworLyogQWZ0ZXIgcHJvbWlzYyBkcm9wcywgY2hlY2tzdW0gY2hlY2tzLiAqLworI2RlZmluZSBORl9ETl9QUkVfUk9VVElORwkwCisvKiBJZiB0aGUgcGFja2V0IGlzIGRlc3RpbmVkIGZvciB0aGlzIGJveC4gKi8KKyNkZWZpbmUgTkZfRE5fTE9DQUxfSU4JCTEKKy8qIElmIHRoZSBwYWNrZXQgaXMgZGVzdGluZWQgZm9yIGFub3RoZXIgaW50ZXJmYWNlLiAqLworI2RlZmluZSBORl9ETl9GT1JXQVJECQkyCisvKiBQYWNrZXRzIGNvbWluZyBmcm9tIGEgbG9jYWwgcHJvY2Vzcy4gKi8KKyNkZWZpbmUgTkZfRE5fTE9DQUxfT1VUCQkzCisvKiBQYWNrZXRzIGFib3V0IHRvIGhpdCB0aGUgd2lyZS4gKi8KKyNkZWZpbmUgTkZfRE5fUE9TVF9ST1VUSU5HCTQKKy8qIElucHV0IEhlbGxvIFBhY2tldHMgKi8KKyNkZWZpbmUgTkZfRE5fSEVMTE8JCTUKKy8qIElucHV0IFJvdXRpbmcgUGFja2V0cyAqLworI2RlZmluZSBORl9ETl9ST1VURQkJNgorI2RlZmluZSBORl9ETl9OVU1IT09LUwkJNworCitlbnVtIG5mX2RuX2hvb2tfcHJpb3JpdGllcyB7CisJTkZfRE5fUFJJX0ZJUlNUID0gSU5UX01JTiwKKwlORl9ETl9QUklfQ09OTlRSQUNLID0gLTIwMCwKKwlORl9ETl9QUklfTUFOR0xFID0gLTE1MCwKKwlORl9ETl9QUklfTkFUX0RTVCA9IC0xMDAsCisJTkZfRE5fUFJJX0ZJTFRFUiA9IDAsCisJTkZfRE5fUFJJX05BVF9TUkMgPSAxMDAsCisJTkZfRE5fUFJJX0ROUlRNU0cgPSAyMDAsCisJTkZfRE5fUFJJX0xBU1QgPSBJTlRfTUFYLAorfTsKKworc3RydWN0IG5mX2RuX3J0bXNnIHsKKwlpbnQgbmZkbl9pZmluZGV4OworfTsKKworI2RlZmluZSBORkROX1JUTVNHKHIpICgodW5zaWduZWQgY2hhciAqKShyKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgbmZfZG5fcnRtc2cpKSkKKworLyogYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIHVzZXJzcGFjZSAqLworI2RlZmluZSBETlJNR19MMV9HUk9VUCAweDAxCisjZGVmaW5lIEROUk1HX0wyX0dST1VQIDB4MDIKKworZW51bSB7CisJRE5STkdfTkxHUlBfTk9ORSwKKyNkZWZpbmUgRE5STkdfTkxHUlBfTk9ORQlETlJOR19OTEdSUF9OT05FCisJRE5STkdfTkxHUlBfTDEsCisjZGVmaW5lIEROUk5HX05MR1JQX0wxCQlETlJOR19OTEdSUF9MMQorCUROUk5HX05MR1JQX0wyLAorI2RlZmluZSBETlJOR19OTEdSUF9MMgkJRE5STkdfTkxHUlBfTDIKKwlfX0ROUk5HX05MR1JQX01BWAorfTsKKyNkZWZpbmUgRE5STkdfTkxHUlBfTUFYCShfX0ROUk5HX05MR1JQX01BWCAtIDEpCisKKyNlbmRpZiAvKl9fTElOVVhfREVDTkVUX05FVEZJTFRFUl9IKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ3YmEzZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oCkBAIC0wLDAgKzEsNzUgQEAKKyNpZm5kZWYgX19MSU5VWF9JUF9ORVRGSUxURVJfSAorI2RlZmluZSBfX0xJTlVYX0lQX05FVEZJTFRFUl9ICisKKy8qIElQdjQtc3BlY2lmaWMgZGVmaW5lcyBmb3IgbmV0ZmlsdGVyLiAKKyAqIChDKTE5OTggUnVzdHkgUnVzc2VsbCAtLSBUaGlzIGNvZGUgaXMgR1BMLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKworLyogb25seSBmb3IgdXNlcnNwYWNlIGNvbXBhdGliaWxpdHkgKi8KKy8qIElQIENhY2hlIGJpdHMuICovCisvKiBTcmMgSVAgYWRkcmVzcy4gKi8KKyNkZWZpbmUgTkZDX0lQX1NSQwkJMHgwMDAxCisvKiBEZXN0IElQIGFkZHJlc3MuICovCisjZGVmaW5lIE5GQ19JUF9EU1QJCTB4MDAwMgorLyogSW5wdXQgZGV2aWNlLiAqLworI2RlZmluZSBORkNfSVBfSUZfSU4JCTB4MDAwNAorLyogT3V0cHV0IGRldmljZS4gKi8KKyNkZWZpbmUgTkZDX0lQX0lGX09VVAkJMHgwMDA4CisvKiBUT1MuICovCisjZGVmaW5lIE5GQ19JUF9UT1MJCTB4MDAxMAorLyogUHJvdG9jb2wuICovCisjZGVmaW5lIE5GQ19JUF9QUk9UTwkJMHgwMDIwCisvKiBJUCBvcHRpb25zLiAqLworI2RlZmluZSBORkNfSVBfT1BUSU9OUwkJMHgwMDQwCisvKiBGcmFnICYgZmxhZ3MuICovCisjZGVmaW5lIE5GQ19JUF9GUkFHCQkweDAwODAKKworLyogUGVyLXByb3RvY29sIGluZm9ybWF0aW9uOiBvbmx5IG1hdHRlcnMgaWYgcHJvdG8gbWF0Y2guICovCisvKiBUQ1AgZmxhZ3MuICovCisjZGVmaW5lIE5GQ19JUF9UQ1BGTEFHUwkJMHgwMTAwCisvKiBTb3VyY2UgcG9ydC4gKi8KKyNkZWZpbmUgTkZDX0lQX1NSQ19QVAkJMHgwMjAwCisvKiBEZXN0IHBvcnQuICovCisjZGVmaW5lIE5GQ19JUF9EU1RfUFQJCTB4MDQwMAorLyogU29tZXRoaW5nIGVsc2UgYWJvdXQgdGhlIHByb3RvICovCisjZGVmaW5lIE5GQ19JUF9QUk9UT19VTktOT1dOCTB4MjAwMAorCisvKiBJUCBIb29rcyAqLworLyogQWZ0ZXIgcHJvbWlzYyBkcm9wcywgY2hlY2tzdW0gY2hlY2tzLiAqLworI2RlZmluZSBORl9JUF9QUkVfUk9VVElORwkwCisvKiBJZiB0aGUgcGFja2V0IGlzIGRlc3RpbmVkIGZvciB0aGlzIGJveC4gKi8KKyNkZWZpbmUgTkZfSVBfTE9DQUxfSU4JCTEKKy8qIElmIHRoZSBwYWNrZXQgaXMgZGVzdGluZWQgZm9yIGFub3RoZXIgaW50ZXJmYWNlLiAqLworI2RlZmluZSBORl9JUF9GT1JXQVJECQkyCisvKiBQYWNrZXRzIGNvbWluZyBmcm9tIGEgbG9jYWwgcHJvY2Vzcy4gKi8KKyNkZWZpbmUgTkZfSVBfTE9DQUxfT1VUCQkzCisvKiBQYWNrZXRzIGFib3V0IHRvIGhpdCB0aGUgd2lyZS4gKi8KKyNkZWZpbmUgTkZfSVBfUE9TVF9ST1VUSU5HCTQKKyNkZWZpbmUgTkZfSVBfTlVNSE9PS1MJCTUKKworZW51bSBuZl9pcF9ob29rX3ByaW9yaXRpZXMgeworCU5GX0lQX1BSSV9GSVJTVCA9IElOVF9NSU4sCisJTkZfSVBfUFJJX0NPTk5UUkFDS19ERUZSQUcgPSAtNDAwLAorCU5GX0lQX1BSSV9SQVcgPSAtMzAwLAorCU5GX0lQX1BSSV9TRUxJTlVYX0ZJUlNUID0gLTIyNSwKKwlORl9JUF9QUklfQ09OTlRSQUNLID0gLTIwMCwKKwlORl9JUF9QUklfTUFOR0xFID0gLTE1MCwKKwlORl9JUF9QUklfTkFUX0RTVCA9IC0xMDAsCisJTkZfSVBfUFJJX0ZJTFRFUiA9IDAsCisJTkZfSVBfUFJJX1NFQ1VSSVRZID0gNTAsCisJTkZfSVBfUFJJX05BVF9TUkMgPSAxMDAsCisJTkZfSVBfUFJJX1NFTElOVVhfTEFTVCA9IDIyNSwKKwlORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0gPSBJTlRfTUFYLAorCU5GX0lQX1BSSV9MQVNUID0gSU5UX01BWCwKK307CisKKy8qIEFyZ3VtZW50cyBmb3Igc2V0c29ja29wdCBTT0xfSVA6ICovCisvKiAyLjAgZmlyZXdhbGxpbmcgd2VudCBmcm9tIDY0IHRocm91Z2ggNzEgKGFuZCArMjU2LCArNTEyLCBldGMpLiAqLworLyogMi4yIGZpcmV3YWxsaW5nICgrIG1hc3EpIHdlbnQgZnJvbSA2NCB0aHJvdWdoIDc2ICovCisvKiAyLjQgZmlyZXdhbGxpbmcgd2VudCA2NCB0aHJvdWdoIDY3LiAqLworI2RlZmluZSBTT19PUklHSU5BTF9EU1QgODAKKworCisjZW5kaWYgLypfX0xJTlVYX0lQX05FVEZJTFRFUl9IKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9xdWV1ZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3F1ZXVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUyMjliMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9xdWV1ZS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBUaGlzIGlzIGEgbW9kdWxlIHdoaWNoIGlzIHVzZWQgZm9yIHF1ZXVlaW5nIElQdjQgcGFja2V0cyBhbmQKKyAqIGNvbW11bmljYXRpbmcgd2l0aCB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsuCisgKgorICogKEMpIDIwMDAgSmFtZXMgTW9ycmlzLCB0aGlzIGNvZGUgaXMgR1BMLgorICovCisjaWZuZGVmIF9JUF9RVUVVRV9ICisjZGVmaW5lIF9JUF9RVUVVRV9ICisKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKworLyogTWVzc2FnZXMgc2VudCBmcm9tIGtlcm5lbCAqLwordHlwZWRlZiBzdHJ1Y3QgaXBxX3BhY2tldF9tc2cgeworCXVuc2lnbmVkIGxvbmcgcGFja2V0X2lkOwkvKiBJRCBvZiBxdWV1ZWQgcGFja2V0ICovCisJdW5zaWduZWQgbG9uZyBtYXJrOwkJLyogTmV0ZmlsdGVyIG1hcmsgdmFsdWUgKi8KKwlsb25nIHRpbWVzdGFtcF9zZWM7CQkvKiBQYWNrZXQgYXJyaXZhbCB0aW1lIChzZWNvbmRzKSAqLworCWxvbmcgdGltZXN0YW1wX3VzZWM7CQkvKiBQYWNrZXQgYXJydmlhbCB0aW1lICgrdXNlY29uZHMpICovCisJdW5zaWduZWQgaW50IGhvb2s7CQkvKiBOZXRmaWx0ZXIgaG9vayB3ZSByb2RlIGluIG9uICovCisJY2hhciBpbmRldl9uYW1lW0lGTkFNU0laXTsJLyogTmFtZSBvZiBpbmNvbWluZyBpbnRlcmZhY2UgKi8KKwljaGFyIG91dGRldl9uYW1lW0lGTkFNU0laXTsJLyogTmFtZSBvZiBvdXRnb2luZyBpbnRlcmZhY2UgKi8KKwlfX2JlMTYgaHdfcHJvdG9jb2w7CQkvKiBIYXJkd2FyZSBwcm90b2NvbCAobmV0d29yayBvcmRlcikgKi8KKwl1bnNpZ25lZCBzaG9ydCBod190eXBlOwkJLyogSGFyZHdhcmUgdHlwZSAqLworCXVuc2lnbmVkIGNoYXIgaHdfYWRkcmxlbjsJLyogSGFyZHdhcmUgYWRkcmVzcyBsZW5ndGggKi8KKwl1bnNpZ25lZCBjaGFyIGh3X2FkZHJbOF07CS8qIEhhcmR3YXJlIGFkZHJlc3MgKi8KKwlzaXplX3QgZGF0YV9sZW47CQkvKiBMZW5ndGggb2YgcGFja2V0IGRhdGEgKi8KKwl1bnNpZ25lZCBjaGFyIHBheWxvYWRbMF07CS8qIE9wdGlvbmFsIHBhY2tldCBkYXRhICovCit9IGlwcV9wYWNrZXRfbXNnX3Q7CisKKy8qIE1lc3NhZ2VzIHNlbnQgZnJvbSB1c2Vyc3BhY2UgKi8KK3R5cGVkZWYgc3RydWN0IGlwcV9tb2RlX21zZyB7CisJdW5zaWduZWQgY2hhciB2YWx1ZTsJCS8qIFJlcXVlc3RlZCBtb2RlICovCisJc2l6ZV90IHJhbmdlOwkJCS8qIE9wdGlvbmFsIHJhbmdlIG9mIHBhY2tldCByZXF1ZXN0ZWQgKi8KK30gaXBxX21vZGVfbXNnX3Q7CisKK3R5cGVkZWYgc3RydWN0IGlwcV92ZXJkaWN0X21zZyB7CisJdW5zaWduZWQgaW50IHZhbHVlOwkJLyogVmVyZGljdCB0byBoYW5kIHRvIG5ldGZpbHRlciAqLworCXVuc2lnbmVkIGxvbmcgaWQ7CQkvKiBQYWNrZXQgSUQgZm9yIHRoaXMgdmVyZGljdCAqLworCXNpemVfdCBkYXRhX2xlbjsJCS8qIExlbmd0aCBvZiByZXBsYWNlbWVudCBkYXRhICovCisJdW5zaWduZWQgY2hhciBwYXlsb2FkWzBdOwkvKiBPcHRpb25hbCByZXBsYWNlbWVudCBwYWNrZXQgKi8KK30gaXBxX3ZlcmRpY3RfbXNnX3Q7CisKK3R5cGVkZWYgc3RydWN0IGlwcV9wZWVyX21zZyB7CisJdW5pb24geworCQlpcHFfdmVyZGljdF9tc2dfdCB2ZXJkaWN0OworCQlpcHFfbW9kZV9tc2dfdCBtb2RlOworCX0gbXNnOworfSBpcHFfcGVlcl9tc2dfdDsKKworLyogUGFja2V0IGRlbGl2ZXJ5IG1vZGVzICovCitlbnVtIHsKKwlJUFFfQ09QWV9OT05FLAkJLyogSW5pdGlhbCBtb2RlLCBwYWNrZXRzIGFyZSBkcm9wcGVkICovCisJSVBRX0NPUFlfTUVUQSwJCS8qIENvcHkgbWV0YWRhdGEgKi8KKwlJUFFfQ09QWV9QQUNLRVQJCS8qIENvcHkgbWV0YWRhdGEgKyBwYWNrZXQgKHJhbmdlKSAqLworfTsKKyNkZWZpbmUgSVBRX0NPUFlfTUFYIElQUV9DT1BZX1BBQ0tFVAorCisvKiBUeXBlcyBvZiBtZXNzYWdlcyAqLworI2RlZmluZSBJUFFNX0JBU0UJMHgxMAkvKiBzdGFuZGFyZCBuZXRsaW5rIG1lc3NhZ2VzIGJlbG93IHRoaXMgKi8KKyNkZWZpbmUgSVBRTV9NT0RFCShJUFFNX0JBU0UgKyAxKQkJLyogTW9kZSByZXF1ZXN0IGZyb20gcGVlciAqLworI2RlZmluZSBJUFFNX1ZFUkRJQ1QJKElQUU1fQkFTRSArIDIpCQkvKiBWZXJkaWN0IGZyb20gcGVlciAqLyAKKyNkZWZpbmUgSVBRTV9QQUNLRVQJKElQUU1fQkFTRSArIDMpCQkvKiBQYWNrZXQgZnJvbSBrZXJuZWwgKi8KKyNkZWZpbmUgSVBRTV9NQVgJKElQUU1fQkFTRSArIDQpCisKKyNlbmRpZiAvKl9JUF9RVUVVRV9IKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2ZkODJhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCkBAIC0wLDAgKzEsMjI3IEBACisvKgorICogMjUtSnVsLTE5OTggTWFqb3IgY2hhbmdlcyB0byBhbGxvdyBmb3IgaXAgY2hhaW4gdGFibGUKKyAqCisgKiAzLUphbi0yMDAwIE5hbWVkIHRhYmxlcyB0byBhbGxvdyBwYWNrZXQgc2VsZWN0aW9uIGZvciBkaWZmZXJlbnQgdXNlcy4KKyAqLworCisvKgorICogCUZvcm1hdCBvZiBhbiBJUCBmaXJld2FsbCBkZXNjcmlwdG9yCisgKgorICogCXNyYywgZHN0LCBzcmNfbWFzaywgZHN0X21hc2sgYXJlIGFsd2F5cyBzdG9yZWQgaW4gbmV0d29yayBieXRlIG9yZGVyLgorICogCWZsYWdzIGFyZSBzdG9yZWQgaW4gaG9zdCBieXRlIG9yZGVyIChvZiBjb3Vyc2UpLgorICogCVBvcnQgbnVtYmVycyBhcmUgc3RvcmVkIGluIEhPU1QgYnl0ZSBvcmRlci4KKyAqLworCisjaWZuZGVmIF9JUFRBQkxFU19ICisjZGVmaW5lIF9JUFRBQkxFU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgorCisjZGVmaW5lIElQVF9GVU5DVElPTl9NQVhOQU1FTEVOIFhUX0ZVTkNUSU9OX01BWE5BTUVMRU4KKyNkZWZpbmUgSVBUX1RBQkxFX01BWE5BTUVMRU4gWFRfVEFCTEVfTUFYTkFNRUxFTgorI2RlZmluZSBpcHRfbWF0Y2ggeHRfbWF0Y2gKKyNkZWZpbmUgaXB0X3RhcmdldCB4dF90YXJnZXQKKyNkZWZpbmUgaXB0X3RhYmxlIHh0X3RhYmxlCisjZGVmaW5lIGlwdF9nZXRfcmV2aXNpb24geHRfZ2V0X3JldmlzaW9uCisjZGVmaW5lIGlwdF9lbnRyeV9tYXRjaCB4dF9lbnRyeV9tYXRjaAorI2RlZmluZSBpcHRfZW50cnlfdGFyZ2V0IHh0X2VudHJ5X3RhcmdldAorI2RlZmluZSBpcHRfc3RhbmRhcmRfdGFyZ2V0IHh0X3N0YW5kYXJkX3RhcmdldAorI2RlZmluZSBpcHRfZXJyb3JfdGFyZ2V0IHh0X2Vycm9yX3RhcmdldAorI2RlZmluZSBpcHRfY291bnRlcnMgeHRfY291bnRlcnMKKyNkZWZpbmUgSVBUX0NPTlRJTlVFIFhUX0NPTlRJTlVFCisjZGVmaW5lIElQVF9SRVRVUk4gWFRfUkVUVVJOCisKKy8qIFRoaXMgZ3JvdXAgaXMgb2xkZXIgdGhhbiBvbGQgKGlwdGFibGVzIDwgdjEuNC4wLXJjMX44OSkgKi8KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfdGNwdWRwLmg+CisjZGVmaW5lIGlwdF91ZHAgeHRfdWRwCisjZGVmaW5lIGlwdF90Y3AgeHRfdGNwCisjZGVmaW5lIElQVF9UQ1BfSU5WX1NSQ1BUCVhUX1RDUF9JTlZfU1JDUFQKKyNkZWZpbmUgSVBUX1RDUF9JTlZfRFNUUFQJWFRfVENQX0lOVl9EU1RQVAorI2RlZmluZSBJUFRfVENQX0lOVl9GTEFHUwlYVF9UQ1BfSU5WX0ZMQUdTCisjZGVmaW5lIElQVF9UQ1BfSU5WX09QVElPTglYVF9UQ1BfSU5WX09QVElPTgorI2RlZmluZSBJUFRfVENQX0lOVl9NQVNLCVhUX1RDUF9JTlZfTUFTSworI2RlZmluZSBJUFRfVURQX0lOVl9TUkNQVAlYVF9VRFBfSU5WX1NSQ1BUCisjZGVmaW5lIElQVF9VRFBfSU5WX0RTVFBUCVhUX1VEUF9JTlZfRFNUUFQKKyNkZWZpbmUgSVBUX1VEUF9JTlZfTUFTSwlYVF9VRFBfSU5WX01BU0sKKworLyogVGhlIGFyZ3VtZW50IHRvIElQVF9TT19BRERfQ09VTlRFUlMuICovCisjZGVmaW5lIGlwdF9jb3VudGVyc19pbmZvIHh0X2NvdW50ZXJzX2luZm8KKy8qIFN0YW5kYXJkIHJldHVybiB2ZXJkaWN0LCBvciBkbyBqdW1wLiAqLworI2RlZmluZSBJUFRfU1RBTkRBUkRfVEFSR0VUIFhUX1NUQU5EQVJEX1RBUkdFVAorLyogRXJyb3IgdmVyZGljdC4gKi8KKyNkZWZpbmUgSVBUX0VSUk9SX1RBUkdFVCBYVF9FUlJPUl9UQVJHRVQKKworLyogZm4gcmV0dXJucyAwIHRvIGNvbnRpbnVlIGl0ZXJhdGlvbiAqLworI2RlZmluZSBJUFRfTUFUQ0hfSVRFUkFURShlLCBmbiwgYXJncy4uLikgXAorCVhUX01BVENIX0lURVJBVEUoc3RydWN0IGlwdF9lbnRyeSwgZSwgZm4sICMjIGFyZ3MpCisKKy8qIGZuIHJldHVybnMgMCB0byBjb250aW51ZSBpdGVyYXRpb24gKi8KKyNkZWZpbmUgSVBUX0VOVFJZX0lURVJBVEUoZW50cmllcywgc2l6ZSwgZm4sIGFyZ3MuLi4pIFwKKwlYVF9FTlRSWV9JVEVSQVRFKHN0cnVjdCBpcHRfZW50cnksIGVudHJpZXMsIHNpemUsIGZuLCAjIyBhcmdzKQorCisvKiBZZXMsIFZpcmdpbmlhLCB5b3UgaGF2ZSB0byB6ZXJvIHRoZSBwYWRkaW5nLiAqLworc3RydWN0IGlwdF9pcCB7CisJLyogU291cmNlIGFuZCBkZXN0aW5hdGlvbiBJUCBhZGRyICovCisJc3RydWN0IGluX2FkZHIgc3JjLCBkc3Q7CisJLyogTWFzayBmb3Igc3JjIGFuZCBkZXN0IElQIGFkZHIgKi8KKwlzdHJ1Y3QgaW5fYWRkciBzbXNrLCBkbXNrOworCWNoYXIgaW5pZmFjZVtJRk5BTVNJWl0sIG91dGlmYWNlW0lGTkFNU0laXTsKKwl1bnNpZ25lZCBjaGFyIGluaWZhY2VfbWFza1tJRk5BTVNJWl0sIG91dGlmYWNlX21hc2tbSUZOQU1TSVpdOworCisJLyogUHJvdG9jb2wsIDAgPSBBTlkgKi8KKwl1X2ludDE2X3QgcHJvdG87CisKKwkvKiBGbGFncyB3b3JkICovCisJdV9pbnQ4X3QgZmxhZ3M7CisJLyogSW52ZXJzZSBmbGFncyAqLworCXVfaW50OF90IGludmZsYWdzOworfTsKKworLyogVmFsdWVzIGZvciAiZmxhZyIgZmllbGQgaW4gc3RydWN0IGlwdF9pcCAoZ2VuZXJhbCBpcCBzdHJ1Y3R1cmUpLiAqLworI2RlZmluZSBJUFRfRl9GUkFHCQkweDAxCS8qIFNldCBpZiBydWxlIGlzIGEgZnJhZ21lbnQgcnVsZSAqLworI2RlZmluZSBJUFRfRl9HT1RPCQkweDAyCS8qIFNldCBpZiBqdW1wIGlzIGEgZ290byAqLworI2RlZmluZSBJUFRfRl9NQVNLCQkweDAzCS8qIEFsbCBwb3NzaWJsZSBmbGFnIGJpdHMgbWFzay4gKi8KKworLyogVmFsdWVzIGZvciAiaW52IiBmaWVsZCBpbiBzdHJ1Y3QgaXB0X2lwLiAqLworI2RlZmluZSBJUFRfSU5WX1ZJQV9JTgkJMHgwMQkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIElOIElGQUNFLiAqLworI2RlZmluZSBJUFRfSU5WX1ZJQV9PVVQJCTB4MDIJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiBPVVQgSUZBQ0UgKi8KKyNkZWZpbmUgSVBUX0lOVl9UT1MJCTB4MDQJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiBUT1MuICovCisjZGVmaW5lIElQVF9JTlZfU1JDSVAJCTB4MDgJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiBTUkMgSVAuICovCisjZGVmaW5lIElQVF9JTlZfRFNUSVAJCTB4MTAJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiBEU1QgT1AuICovCisjZGVmaW5lIElQVF9JTlZfRlJBRwkJMHgyMAkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIEZSQUcuICovCisjZGVmaW5lIElQVF9JTlZfUFJPVE8JCVhUX0lOVl9QUk9UTworI2RlZmluZSBJUFRfSU5WX01BU0sJCTB4N0YJLyogQWxsIHBvc3NpYmxlIGZsYWcgYml0cyBtYXNrLiAqLworCisvKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIGVhY2ggb2YgdGhlIGZpcmV3YWxsIHJ1bGVzLiAgQ29uc2lzdHMgb2YgMworICAgcGFydHMgd2hpY2ggYXJlIDEpIGdlbmVyYWwgSVAgaGVhZGVyIHN0dWZmIDIpIG1hdGNoIHNwZWNpZmljCisgICBzdHVmZiAzKSB0aGUgdGFyZ2V0IHRvIHBlcmZvcm0gaWYgdGhlIHJ1bGUgbWF0Y2hlcyAqLworc3RydWN0IGlwdF9lbnRyeSB7CisJc3RydWN0IGlwdF9pcCBpcDsKKworCS8qIE1hcmsgd2l0aCBmaWVsZHMgdGhhdCB3ZSBjYXJlIGFib3V0LiAqLworCXVuc2lnbmVkIGludCBuZmNhY2hlOworCisJLyogU2l6ZSBvZiBpcHRfZW50cnkgKyBtYXRjaGVzICovCisJdV9pbnQxNl90IHRhcmdldF9vZmZzZXQ7CisJLyogU2l6ZSBvZiBpcHRfZW50cnkgKyBtYXRjaGVzICsgdGFyZ2V0ICovCisJdV9pbnQxNl90IG5leHRfb2Zmc2V0OworCisJLyogQmFjayBwb2ludGVyICovCisJdW5zaWduZWQgaW50IGNvbWVmcm9tOworCisJLyogUGFja2V0IGFuZCBieXRlIGNvdW50ZXJzLiAqLworCXN0cnVjdCB4dF9jb3VudGVycyBjb3VudGVyczsKKworCS8qIFRoZSBtYXRjaGVzIChpZiBhbnkpLCB0aGVuIHRoZSB0YXJnZXQuICovCisJdW5zaWduZWQgY2hhciBlbGVtc1swXTsKK307CisKKy8qCisgKiBOZXcgSVAgZmlyZXdhbGwgb3B0aW9ucyBmb3IgW2dzXWV0c29ja29wdCBhdCB0aGUgUkFXIElQIGxldmVsLgorICogVW5saWtlIEJTRCBMaW51eCBpbmhlcml0cyBJUCBvcHRpb25zIHNvIHlvdSBkb24ndCBoYXZlIHRvIHVzZSBhIHJhdworICogc29ja2V0IGZvciB0aGlzLiBJbnN0ZWFkIHdlIGNoZWNrIHJpZ2h0cyBpbiB0aGUgY2FsbHMuCisgKgorICogQVRURU5USU9OOiBjaGVjayBsaW51eC9pbi5oIGJlZm9yZSBhZGRpbmcgbmV3IG51bWJlciBoZXJlLgorICovCisjZGVmaW5lIElQVF9CQVNFX0NUTAkJNjQKKworI2RlZmluZSBJUFRfU09fU0VUX1JFUExBQ0UJKElQVF9CQVNFX0NUTCkKKyNkZWZpbmUgSVBUX1NPX1NFVF9BRERfQ09VTlRFUlMJKElQVF9CQVNFX0NUTCArIDEpCisjZGVmaW5lIElQVF9TT19TRVRfTUFYCQlJUFRfU09fU0VUX0FERF9DT1VOVEVSUworCisjZGVmaW5lIElQVF9TT19HRVRfSU5GTwkJCShJUFRfQkFTRV9DVEwpCisjZGVmaW5lIElQVF9TT19HRVRfRU5UUklFUwkJKElQVF9CQVNFX0NUTCArIDEpCisjZGVmaW5lIElQVF9TT19HRVRfUkVWSVNJT05fTUFUQ0gJKElQVF9CQVNFX0NUTCArIDIpCisjZGVmaW5lIElQVF9TT19HRVRfUkVWSVNJT05fVEFSR0VUCShJUFRfQkFTRV9DVEwgKyAzKQorI2RlZmluZSBJUFRfU09fR0VUX01BWAkJCUlQVF9TT19HRVRfUkVWSVNJT05fVEFSR0VUCisKKy8qIElDTVAgbWF0Y2hpbmcgc3R1ZmYgKi8KK3N0cnVjdCBpcHRfaWNtcCB7CisJdV9pbnQ4X3QgdHlwZTsJCQkJLyogdHlwZSB0byBtYXRjaCAqLworCXVfaW50OF90IGNvZGVbMl07CQkJLyogcmFuZ2Ugb2YgY29kZSAqLworCXVfaW50OF90IGludmZsYWdzOwkJCS8qIEludmVyc2UgZmxhZ3MgKi8KK307CisKKy8qIFZhbHVlcyBmb3IgImludiIgZmllbGQgZm9yIHN0cnVjdCBpcHRfaWNtcC4gKi8KKyNkZWZpbmUgSVBUX0lDTVBfSU5WCTB4MDEJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiB0eXBlL2NvZGUgdGVzdCAqLworCisvKiBUaGUgYXJndW1lbnQgdG8gSVBUX1NPX0dFVF9JTkZPICovCitzdHJ1Y3QgaXB0X2dldGluZm8geworCS8qIFdoaWNoIHRhYmxlOiBjYWxsZXIgZmlsbHMgdGhpcyBpbi4gKi8KKwljaGFyIG5hbWVbWFRfVEFCTEVfTUFYTkFNRUxFTl07CisKKwkvKiBLZXJuZWwgZmlsbHMgdGhlc2UgaW4uICovCisJLyogV2hpY2ggaG9vayBlbnRyeSBwb2ludHMgYXJlIHZhbGlkOiBiaXRtYXNrICovCisJdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzOworCisJLyogSG9vayBlbnRyeSBwb2ludHM6IG9uZSBwZXIgbmV0ZmlsdGVyIGhvb2suICovCisJdW5zaWduZWQgaW50IGhvb2tfZW50cnlbTkZfSU5FVF9OVU1IT09LU107CisKKwkvKiBVbmRlcmZsb3cgcG9pbnRzLiAqLworCXVuc2lnbmVkIGludCB1bmRlcmZsb3dbTkZfSU5FVF9OVU1IT09LU107CisKKwkvKiBOdW1iZXIgb2YgZW50cmllcyAqLworCXVuc2lnbmVkIGludCBudW1fZW50cmllczsKKworCS8qIFNpemUgb2YgZW50cmllcy4gKi8KKwl1bnNpZ25lZCBpbnQgc2l6ZTsKK307CisKKy8qIFRoZSBhcmd1bWVudCB0byBJUFRfU09fU0VUX1JFUExBQ0UuICovCitzdHJ1Y3QgaXB0X3JlcGxhY2UgeworCS8qIFdoaWNoIHRhYmxlLiAqLworCWNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKKworCS8qIFdoaWNoIGhvb2sgZW50cnkgcG9pbnRzIGFyZSB2YWxpZDogYml0bWFzay4gIFlvdSBjYW4ndAorICAgICAgICAgICBjaGFuZ2UgdGhpcy4gKi8KKwl1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3M7CisKKwkvKiBOdW1iZXIgb2YgZW50cmllcyAqLworCXVuc2lnbmVkIGludCBudW1fZW50cmllczsKKworCS8qIFRvdGFsIHNpemUgb2YgbmV3IGVudHJpZXMgKi8KKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKworCS8qIEhvb2sgZW50cnkgcG9pbnRzLiAqLworCXVuc2lnbmVkIGludCBob29rX2VudHJ5W05GX0lORVRfTlVNSE9PS1NdOworCisJLyogVW5kZXJmbG93IHBvaW50cy4gKi8KKwl1bnNpZ25lZCBpbnQgdW5kZXJmbG93W05GX0lORVRfTlVNSE9PS1NdOworCisJLyogSW5mb3JtYXRpb24gYWJvdXQgb2xkIGVudHJpZXM6ICovCisJLyogTnVtYmVyIG9mIGNvdW50ZXJzIChtdXN0IGJlIGVxdWFsIHRvIGN1cnJlbnQgbnVtYmVyIG9mIGVudHJpZXMpLiAqLworCXVuc2lnbmVkIGludCBudW1fY291bnRlcnM7CisJLyogVGhlIG9sZCBlbnRyaWVzJyBjb3VudGVycy4gKi8KKwlzdHJ1Y3QgeHRfY291bnRlcnMgKmNvdW50ZXJzOworCisJLyogVGhlIGVudHJpZXMgKGhhbmcgb2ZmIGVuZDogbm90IHJlYWxseSBhbiBhcnJheSkuICovCisJc3RydWN0IGlwdF9lbnRyeSBlbnRyaWVzWzBdOworfTsKKworLyogVGhlIGFyZ3VtZW50IHRvIElQVF9TT19HRVRfRU5UUklFUy4gKi8KK3N0cnVjdCBpcHRfZ2V0X2VudHJpZXMgeworCS8qIFdoaWNoIHRhYmxlOiB1c2VyIGZpbGxzIHRoaXMgaW4uICovCisJY2hhciBuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU5dOworCisJLyogVXNlciBmaWxscyB0aGlzIGluOiB0b3RhbCBlbnRyeSBzaXplLiAqLworCXVuc2lnbmVkIGludCBzaXplOworCisJLyogVGhlIGVudHJpZXMuICovCisJc3RydWN0IGlwdF9lbnRyeSBlbnRyeXRhYmxlWzBdOworfTsKKworLyogSGVscGVyIGZ1bmN0aW9ucyAqLworc3RhdGljIF9faW5saW5lX18gc3RydWN0IHh0X2VudHJ5X3RhcmdldCAqCitpcHRfZ2V0X3RhcmdldChzdHJ1Y3QgaXB0X2VudHJ5ICplKQoreworCXJldHVybiAodm9pZCAqKWUgKyBlLT50YXJnZXRfb2Zmc2V0OworfQorCisvKgorICoJTWFpbiBmaXJld2FsbCBjaGFpbnMgZGVmaW5pdGlvbnMgYW5kIGdsb2JhbCB2YXIncyBkZWZpbml0aW9ucy4KKyAqLworI2VuZGlmIC8qIF9JUFRBQkxFU19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0NMVVNURVJJUC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9DTFVTVEVSSVAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWEzNjg3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9DTFVTVEVSSVAuaApAQCAtMCwwICsxLDM0IEBACisjaWZuZGVmIF9JUFRfQ0xVU1RFUklQX0hfdGFyZ2V0CisjZGVmaW5lIF9JUFRfQ0xVU1RFUklQX0hfdGFyZ2V0CisKK2VudW0gY2x1c3RlcmlwX2hhc2htb2RlIHsKKyAgICBDTFVTVEVSSVBfSEFTSE1PREVfU0lQID0gMCwKKyAgICBDTFVTVEVSSVBfSEFTSE1PREVfU0lQX1NQVCwKKyAgICBDTFVTVEVSSVBfSEFTSE1PREVfU0lQX1NQVF9EUFQsCit9OworCisjZGVmaW5lIENMVVNURVJJUF9IQVNITU9ERV9NQVggQ0xVU1RFUklQX0hBU0hNT0RFX1NJUF9TUFRfRFBUCisKKyNkZWZpbmUgQ0xVU1RFUklQX01BWF9OT0RFUyAxNgorCisjZGVmaW5lIENMVVNURVJJUF9GTEFHX05FVyAweDAwMDAwMDAxCisKK3N0cnVjdCBjbHVzdGVyaXBfY29uZmlnOworCitzdHJ1Y3QgaXB0X2NsdXN0ZXJpcF90Z3RfaW5mbyB7CisKKwl1X2ludDMyX3QgZmxhZ3M7CisKKwkvKiBvbmx5IHJlbGV2YW50IGZvciBuZXcgb25lcyAqLworCXVfaW50OF90IGNsdXN0ZXJtYWNbNl07CisJdV9pbnQxNl90IG51bV90b3RhbF9ub2RlczsKKwl1X2ludDE2X3QgbnVtX2xvY2FsX25vZGVzOworCXVfaW50MTZfdCBsb2NhbF9ub2Rlc1tDTFVTVEVSSVBfTUFYX05PREVTXTsKKwl1X2ludDMyX3QgaGFzaF9tb2RlOworCXVfaW50MzJfdCBoYXNoX2luaXR2YWw7CisKKwkvKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCAqLworCXN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjb25maWc7Cit9OworCisjZW5kaWYgLypfSVBUX0NMVVNURVJJUF9IX3RhcmdldCovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0VDTi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9FQ04uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2E0NTkxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9FQ04uaApAQCAtMCwwICsxLDMxIEBACisvKiBIZWFkZXIgZmlsZSBmb3IgaXB0YWJsZXMgaXB0X0VDTiB0YXJnZXQKKyAqCisgKiAoQykgMjAwMiBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgR05VIEdQTCB2MiwgMTk5MQorICogCisgKiBpcHRfRUNOLmgsdiAxLjMgMjAwMi8wNS8yOSAxMjoxNzo0MCBsYWZvcmdlIEV4cAorKi8KKyNpZm5kZWYgX0lQVF9FQ05fVEFSR0VUX0gKKyNkZWZpbmUgX0lQVF9FQ05fVEFSR0VUX0gKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfRFNDUC5oPgorCisjZGVmaW5lIElQVF9FQ05fSVBfTUFTSwkoflhUX0RTQ1BfTUFTSykKKworI2RlZmluZSBJUFRfRUNOX09QX1NFVF9JUAkweDAxCS8qIHNldCBFQ04gYml0cyBvZiBJUHY0IGhlYWRlciAqLworI2RlZmluZSBJUFRfRUNOX09QX1NFVF9FQ0UJMHgxMAkvKiBzZXQgRUNFIGJpdCBvZiBUQ1AgaGVhZGVyICovCisjZGVmaW5lIElQVF9FQ05fT1BfU0VUX0NXUgkweDIwCS8qIHNldCBDV1IgYml0IG9mIFRDUCBoZWFkZXIgKi8KKworI2RlZmluZSBJUFRfRUNOX09QX01BU0sJCTB4Y2UKKworc3RydWN0IGlwdF9FQ05faW5mbyB7CisJdV9pbnQ4X3Qgb3BlcmF0aW9uOwkvKiBiaXRzZXQgb2Ygb3BlcmF0aW9ucyAqLworCXVfaW50OF90IGlwX2VjdDsJLyogRUNUIGNvZGVwb2ludCBvZiBJUHY0IGhlYWRlciwgcHJlLXNoaWZ0ZWQgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1X2ludDhfdCBlY2U6MSwgY3dyOjE7IC8qIFRDUCBFQ1QgYml0cyAqLworCQl9IHRjcDsKKwl9IHByb3RvOworfTsKKworI2VuZGlmIC8qIF9JUFRfRUNOX1RBUkdFVF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0xPRy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9MT0cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2RiYWRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9MT0cuaApAQCAtMCwwICsxLDE5IEBACisjaWZuZGVmIF9JUFRfTE9HX0gKKyNkZWZpbmUgX0lQVF9MT0dfSAorCisvKiBtYWtlIHN1cmUgbm90IHRvIGNoYW5nZSB0aGlzIHdpdGhvdXQgY2hhbmdpbmcgbmV0ZmlsdGVyLmg6TkZfTE9HXyogKCEpICovCisjZGVmaW5lIElQVF9MT0dfVENQU0VRCQkweDAxCS8qIExvZyBUQ1Agc2VxdWVuY2UgbnVtYmVycyAqLworI2RlZmluZSBJUFRfTE9HX1RDUE9QVAkJMHgwMgkvKiBMb2cgVENQIG9wdGlvbnMgKi8KKyNkZWZpbmUgSVBUX0xPR19JUE9QVAkJMHgwNAkvKiBMb2cgSVAgb3B0aW9ucyAqLworI2RlZmluZSBJUFRfTE9HX1VJRAkJMHgwOAkvKiBMb2cgVUlEIG93bmluZyBsb2NhbCBzb2NrZXQgKi8KKyNkZWZpbmUgSVBUX0xPR19ORkxPRwkJMHgxMAkvKiBVbnN1cHBvcnRlZCwgZG9uJ3QgcmV1c2UgKi8KKyNkZWZpbmUgSVBUX0xPR19NQUNERUNPREUJMHgyMAkvKiBEZWNvZGUgTUFDIGhlYWRlciAqLworI2RlZmluZSBJUFRfTE9HX01BU0sJCTB4MmYKKworc3RydWN0IGlwdF9sb2dfaW5mbyB7CisJdW5zaWduZWQgY2hhciBsZXZlbDsKKwl1bnNpZ25lZCBjaGFyIGxvZ2ZsYWdzOworCWNoYXIgcHJlZml4WzMwXTsKK307CisKKyNlbmRpZiAvKl9JUFRfTE9HX0gqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9SRUpFQ1QuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfUkVKRUNULmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI5M2ExYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfUkVKRUNULmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBfSVBUX1JFSkVDVF9ICisjZGVmaW5lIF9JUFRfUkVKRUNUX0gKKworZW51bSBpcHRfcmVqZWN0X3dpdGggeworCUlQVF9JQ01QX05FVF9VTlJFQUNIQUJMRSwKKwlJUFRfSUNNUF9IT1NUX1VOUkVBQ0hBQkxFLAorCUlQVF9JQ01QX1BST1RfVU5SRUFDSEFCTEUsCisJSVBUX0lDTVBfUE9SVF9VTlJFQUNIQUJMRSwKKwlJUFRfSUNNUF9FQ0hPUkVQTFksCisJSVBUX0lDTVBfTkVUX1BST0hJQklURUQsCisJSVBUX0lDTVBfSE9TVF9QUk9ISUJJVEVELAorCUlQVF9UQ1BfUkVTRVQsCisJSVBUX0lDTVBfQURNSU5fUFJPSElCSVRFRAorfTsKKworc3RydWN0IGlwdF9yZWplY3RfaW5mbyB7CisJZW51bSBpcHRfcmVqZWN0X3dpdGggd2l0aDsgICAgICAvKiByZWplY3QgdHlwZSAqLworfTsKKworI2VuZGlmIC8qX0lQVF9SRUpFQ1RfSCovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1NBTUUuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfU0FNRS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1Mjk2NjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1NBTUUuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIF9JUFRfU0FNRV9ICisjZGVmaW5lIF9JUFRfU0FNRV9ICisKKyNkZWZpbmUgSVBUX1NBTUVfTUFYX1JBTkdFCTEwCisKKyNkZWZpbmUgSVBUX1NBTUVfTk9EU1QJCTB4MDEKKworc3RydWN0IGlwdF9zYW1lX2luZm8geworCXVuc2lnbmVkIGNoYXIgaW5mbzsKKwl1X2ludDMyX3QgcmFuZ2VzaXplOworCXVfaW50MzJfdCBpcG51bTsKKwl1X2ludDMyX3QgKmlwYXJyYXk7CisKKwkvKiBoYW5ncyBvZmYgZW5kLiAqLworCXN0cnVjdCBuZl9uYXRfcmFuZ2UgcmFuZ2VbSVBUX1NBTUVfTUFYX1JBTkdFXTsKK307CisKKyNlbmRpZiAvKl9JUFRfU0FNRV9IKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVFRMLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1RUTC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNjYxMWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1RUTC5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qIFRUTCBtb2RpZmljYXRpb24gbW9kdWxlIGZvciBJUCB0YWJsZXMKKyAqIChDKSAyMDAwIGJ5IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBuZXRmaWx0ZXIub3JnPiAqLworCisjaWZuZGVmIF9JUFRfVFRMX0gKKyNkZWZpbmUgX0lQVF9UVExfSAorCitlbnVtIHsKKwlJUFRfVFRMX1NFVCA9IDAsCisJSVBUX1RUTF9JTkMsCisJSVBUX1RUTF9ERUMKK307CisKKyNkZWZpbmUgSVBUX1RUTF9NQVhNT0RFCUlQVF9UVExfREVDCisKK3N0cnVjdCBpcHRfVFRMX2luZm8geworCXVfaW50OF90CW1vZGU7CisJdV9pbnQ4X3QJdHRsOworfTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVUxPRy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9VTE9HLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE3YWFkMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVUxPRy5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qIEhlYWRlciBmaWxlIGZvciBJUCB0YWJsZXMgdXNlcnNwYWNlIGxvZ2dpbmcsIFZlcnNpb24gMS44CisgKgorICogKEMpIDIwMDAtMjAwMiBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPgorICogCisgKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgR05VIEdQTCAqLworCisjaWZuZGVmIF9JUFRfVUxPR19ICisjZGVmaW5lIF9JUFRfVUxPR19ICisKKyNpZm5kZWYgTkVUTElOS19ORkxPRworI2RlZmluZSBORVRMSU5LX05GTE9HIAk1CisjZW5kaWYKKworI2RlZmluZSBVTE9HX0RFRkFVTFRfTkxHUk9VUAkxCisjZGVmaW5lIFVMT0dfREVGQVVMVF9RVEhSRVNIT0xECTEKKworI2RlZmluZSBVTE9HX01BQ19MRU4JODAKKyNkZWZpbmUgVUxPR19QUkVGSVhfTEVOCTMyCisKKyNkZWZpbmUgVUxPR19NQVhfUUxFTgk1MAorLyogV2h5IDUwPyBXZWxsLi4uIHRoZXJlIGlzIGEgbGltaXQgaW1wb3NlZCBieSB0aGUgc2xhYiBjYWNoZSAxMzEwMDAKKyAqIGJ5dGVzLiBTbyB0aGUgbXVsdGlwYXJ0IG5ldGxpbmstbWVzc2FnZSBoYXMgdG8gYmUgPCAxMzEwMDAgYnl0ZXMuCisgKiBBc3N1bWluZyBhIHN0YW5kYXJkIGV0aGVybmV0LW10dSBvZiAxNTAwLCB3ZSBjb3VsZCBkZWZpbmUgdGhpcyB1cAorICogdG8gODAuLi4gYnV0IGV2ZW4gNTAgc2VlbXMgdG8gYmUgYmlnIGVub3VnaC4gKi8KKworLyogcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSBmb3IgZWFjaCBydWxlIHdpdGggYSBVTE9HIHRhcmdldCAqLworc3RydWN0IGlwdF91bG9nX2luZm8geworCXVuc2lnbmVkIGludCBubF9ncm91cDsKKwlzaXplX3QgY29weV9yYW5nZTsKKwlzaXplX3QgcXRocmVzaG9sZDsKKwljaGFyIHByZWZpeFtVTE9HX1BSRUZJWF9MRU5dOworfTsKKworLyogRm9ybWF0IG9mIHRoZSBVTE9HIHBhY2tldHMgcGFzc2VkIHRocm91Z2ggbmV0bGluayAqLwordHlwZWRlZiBzdHJ1Y3QgdWxvZ19wYWNrZXRfbXNnIHsKKwl1bnNpZ25lZCBsb25nIG1hcms7CisJbG9uZyB0aW1lc3RhbXBfc2VjOworCWxvbmcgdGltZXN0YW1wX3VzZWM7CisJdW5zaWduZWQgaW50IGhvb2s7CisJY2hhciBpbmRldl9uYW1lW0lGTkFNU0laXTsKKwljaGFyIG91dGRldl9uYW1lW0lGTkFNU0laXTsKKwlzaXplX3QgZGF0YV9sZW47CisJY2hhciBwcmVmaXhbVUxPR19QUkVGSVhfTEVOXTsKKwl1bnNpZ25lZCBjaGFyIG1hY19sZW47CisJdW5zaWduZWQgY2hhciBtYWNbVUxPR19NQUNfTEVOXTsKKwl1bnNpZ25lZCBjaGFyIHBheWxvYWRbMF07Cit9IHVsb2dfcGFja2V0X21zZ190OworCisjZW5kaWYgLypfSVBUX1VMT0dfSCovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2FkZHJ0eXBlLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2FkZHJ0eXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ2ZGU2YQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfYWRkcnR5cGUuaApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIF9JUFRfQUREUlRZUEVfSAorI2RlZmluZSBfSVBUX0FERFJUWVBFX0gKKworZW51bSB7CisJSVBUX0FERFJUWVBFX0lOVkVSVF9TT1VSQ0UJPSAweDAwMDEsCisJSVBUX0FERFJUWVBFX0lOVkVSVF9ERVNUCT0gMHgwMDAyLAorCUlQVF9BRERSVFlQRV9MSU1JVF9JRkFDRV9JTgk9IDB4MDAwNCwKKwlJUFRfQUREUlRZUEVfTElNSVRfSUZBQ0VfT1VUCT0gMHgwMDA4LAorfTsKKworc3RydWN0IGlwdF9hZGRydHlwZV9pbmZvX3YxIHsKKwl1X2ludDE2X3QJc291cmNlOwkJLyogc291cmNlLXR5cGUgbWFzayAqLworCXVfaW50MTZfdAlkZXN0OwkJLyogZGVzdC10eXBlIG1hc2sgKi8KKwl1X2ludDMyX3QJZmxhZ3M7Cit9OworCisvKiByZXZpc2lvbiAwICovCitzdHJ1Y3QgaXB0X2FkZHJ0eXBlX2luZm8geworCXVfaW50MTZfdAlzb3VyY2U7CQkvKiBzb3VyY2UtdHlwZSBtYXNrICovCisJdV9pbnQxNl90CWRlc3Q7CQkvKiBkZXN0LXR5cGUgbWFzayAqLworCXVfaW50MzJfdAlpbnZlcnRfc291cmNlOworCXVfaW50MzJfdAlpbnZlcnRfZGVzdDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9haC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9haC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNTU1YjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2FoLmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBfSVBUX0FIX0gKKyNkZWZpbmUgX0lQVF9BSF9ICisKK3N0cnVjdCBpcHRfYWggeworCXVfaW50MzJfdCBzcGlzWzJdOwkJCS8qIFNlY3VyaXR5IFBhcmFtZXRlciBJbmRleCAqLworCXVfaW50OF90ICBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCit9OworCisKKworLyogVmFsdWVzIGZvciAiaW52ZmxhZ3MiIGZpZWxkIGluIHN0cnVjdCBpcHRfYWguICovCisjZGVmaW5lIElQVF9BSF9JTlZfU1BJCQkweDAxCS8qIEludmVydCB0aGUgc2Vuc2Ugb2Ygc3BpLiAqLworI2RlZmluZSBJUFRfQUhfSU5WX01BU0sJMHgwMQkvKiBBbGwgcG9zc2libGUgZmxhZ3MuICovCisKKyNlbmRpZiAvKl9JUFRfQUhfSCovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2Vjbi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9lY24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTQ1YmFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9lY24uaApAQCAtMCwwICsxLDMzIEBACisvKiBpcHRhYmxlcyBtb2R1bGUgZm9yIG1hdGNoaW5nIHRoZSBFQ04gaGVhZGVyIGluIElQdjQgYW5kIFRDUCBoZWFkZXIKKyAqCisgKiAoQykgMjAwMiBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgR05VIEdQTCB2MiwgMTk5MQorICogCisgKiBpcHRfZWNuLmgsdiAxLjQgMjAwMi8wOC8wNSAxOTozOTowMCBsYWZvcmdlIEV4cAorKi8KKyNpZm5kZWYgX0lQVF9FQ05fSAorI2RlZmluZSBfSVBUX0VDTl9ICisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2RzY3AuaD4KKworI2RlZmluZSBJUFRfRUNOX0lQX01BU0sJKH5YVF9EU0NQX01BU0spCisKKyNkZWZpbmUgSVBUX0VDTl9PUF9NQVRDSF9JUAkweDAxCisjZGVmaW5lIElQVF9FQ05fT1BfTUFUQ0hfRUNFCTB4MTAKKyNkZWZpbmUgSVBUX0VDTl9PUF9NQVRDSF9DV1IJMHgyMAorCisjZGVmaW5lIElQVF9FQ05fT1BfTUFUQ0hfTUFTSwkweGNlCisKKy8qIG1hdGNoIGluZm8gKi8KK3N0cnVjdCBpcHRfZWNuX2luZm8geworCXVfaW50OF90IG9wZXJhdGlvbjsKKwl1X2ludDhfdCBpbnZlcnQ7CisJdV9pbnQ4X3QgaXBfZWN0OworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVfaW50OF90IGVjdDsKKwkJfSB0Y3A7CisJfSBwcm90bzsKK307CisKKyNlbmRpZiAvKiBfSVBUX0VDTl9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3JlYWxtLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3JlYWxtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM5OTZlYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcmVhbG0uaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX0lQVF9SRUFMTV9ICisjZGVmaW5lIF9JUFRfUkVBTE1fSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X3JlYWxtLmg+CisjZGVmaW5lIGlwdF9yZWFsbV9pbmZvIHh0X3JlYWxtX2luZm8KKworI2VuZGlmIC8qIF9JUFRfUkVBTE1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF90dGwuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfdHRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUyNGZkOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfdHRsLmgKQEAgLTAsMCArMSwyMSBAQAorLyogSVAgdGFibGVzIG1vZHVsZSBmb3IgbWF0Y2hpbmcgdGhlIHZhbHVlIG9mIHRoZSBUVEwKKyAqIChDKSAyMDAwIGJ5IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBnbnVtb25rcy5vcmc+ICovCisKKyNpZm5kZWYgX0lQVF9UVExfSAorI2RlZmluZSBfSVBUX1RUTF9ICisKK2VudW0geworCUlQVF9UVExfRVEgPSAwLAkJLyogZXF1YWxzICovCisJSVBUX1RUTF9ORSwJCS8qIG5vdCBlcXVhbHMgKi8KKwlJUFRfVFRMX0xULAkJLyogbGVzcyB0aGFuICovCisJSVBUX1RUTF9HVCwJCS8qIGdyZWF0ZXIgdGhhbiAqLworfTsKKworCitzdHJ1Y3QgaXB0X3R0bF9pbmZvIHsKKwl1X2ludDhfdAltb2RlOworCXVfaW50OF90CXR0bDsKK307CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNTViOWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYuaApAQCAtMCwwICsxLDczIEBACisjaWZuZGVmIF9fTElOVVhfSVA2X05FVEZJTFRFUl9ICisjZGVmaW5lIF9fTElOVVhfSVA2X05FVEZJTFRFUl9ICisKKy8qIElQdjYtc3BlY2lmaWMgZGVmaW5lcyBmb3IgbmV0ZmlsdGVyLiAKKyAqIChDKTE5OTggUnVzdHkgUnVzc2VsbCAtLSBUaGlzIGNvZGUgaXMgR1BMLgorICogKEMpMTk5OSBEYXZpZCBKZWZmZXJ5CisgKiAgIHRoaXMgaGVhZGVyIHdhcyBibGF0YW50bHkgcmlwcGVkIGZyb20gbmV0ZmlsdGVyX2lwdjQuaCAKKyAqICAgaXQncyBhbWF6aW5nIHdoYXQgYWRkaW5nIGEgYnVuY2ggb2YgNnMgY2FuIGRvID04XikKKyAqLworCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisKKy8qIG9ubHkgZm9yIHVzZXJzcGFjZSBjb21wYXRpYmlsaXR5ICovCisvKiBJUCBDYWNoZSBiaXRzLiAqLworLyogU3JjIElQIGFkZHJlc3MuICovCisjZGVmaW5lIE5GQ19JUDZfU1JDICAgICAgICAgICAgICAweDAwMDEKKy8qIERlc3QgSVAgYWRkcmVzcy4gKi8KKyNkZWZpbmUgTkZDX0lQNl9EU1QgICAgICAgICAgICAgIDB4MDAwMgorLyogSW5wdXQgZGV2aWNlLiAqLworI2RlZmluZSBORkNfSVA2X0lGX0lOICAgICAgICAgICAgMHgwMDA0CisvKiBPdXRwdXQgZGV2aWNlLiAqLworI2RlZmluZSBORkNfSVA2X0lGX09VVCAgICAgICAgICAgMHgwMDA4CisvKiBUT1MuICovCisjZGVmaW5lIE5GQ19JUDZfVE9TICAgICAgICAgICAgICAweDAwMTAKKy8qIFByb3RvY29sLiAqLworI2RlZmluZSBORkNfSVA2X1BST1RPICAgICAgICAgICAgMHgwMDIwCisvKiBJUCBvcHRpb25zLiAqLworI2RlZmluZSBORkNfSVA2X09QVElPTlMgICAgICAgICAgMHgwMDQwCisvKiBGcmFnICYgZmxhZ3MuICovCisjZGVmaW5lIE5GQ19JUDZfRlJBRyAgICAgICAgICAgICAweDAwODAKKworCisvKiBQZXItcHJvdG9jb2wgaW5mb3JtYXRpb246IG9ubHkgbWF0dGVycyBpZiBwcm90byBtYXRjaC4gKi8KKy8qIFRDUCBmbGFncy4gKi8KKyNkZWZpbmUgTkZDX0lQNl9UQ1BGTEFHUyAgICAgICAgIDB4MDEwMAorLyogU291cmNlIHBvcnQuICovCisjZGVmaW5lIE5GQ19JUDZfU1JDX1BUICAgICAgICAgICAweDAyMDAKKy8qIERlc3QgcG9ydC4gKi8KKyNkZWZpbmUgTkZDX0lQNl9EU1RfUFQgICAgICAgICAgIDB4MDQwMAorLyogU29tZXRoaW5nIGVsc2UgYWJvdXQgdGhlIHByb3RvICovCisjZGVmaW5lIE5GQ19JUDZfUFJPVE9fVU5LTk9XTiAgICAweDIwMDAKKworLyogSVA2IEhvb2tzICovCisvKiBBZnRlciBwcm9taXNjIGRyb3BzLCBjaGVja3N1bSBjaGVja3MuICovCisjZGVmaW5lIE5GX0lQNl9QUkVfUk9VVElORwkwCisvKiBJZiB0aGUgcGFja2V0IGlzIGRlc3RpbmVkIGZvciB0aGlzIGJveC4gKi8KKyNkZWZpbmUgTkZfSVA2X0xPQ0FMX0lOCQkxCisvKiBJZiB0aGUgcGFja2V0IGlzIGRlc3RpbmVkIGZvciBhbm90aGVyIGludGVyZmFjZS4gKi8KKyNkZWZpbmUgTkZfSVA2X0ZPUldBUkQJCTIKKy8qIFBhY2tldHMgY29taW5nIGZyb20gYSBsb2NhbCBwcm9jZXNzLiAqLworI2RlZmluZSBORl9JUDZfTE9DQUxfT1VUCQkzCisvKiBQYWNrZXRzIGFib3V0IHRvIGhpdCB0aGUgd2lyZS4gKi8KKyNkZWZpbmUgTkZfSVA2X1BPU1RfUk9VVElORwk0CisjZGVmaW5lIE5GX0lQNl9OVU1IT09LUwkJNQorCisKK2VudW0gbmZfaXA2X2hvb2tfcHJpb3JpdGllcyB7CisJTkZfSVA2X1BSSV9GSVJTVCA9IElOVF9NSU4sCisJTkZfSVA2X1BSSV9DT05OVFJBQ0tfREVGUkFHID0gLTQwMCwKKwlORl9JUDZfUFJJX1JBVyA9IC0zMDAsCisJTkZfSVA2X1BSSV9TRUxJTlVYX0ZJUlNUID0gLTIyNSwKKwlORl9JUDZfUFJJX0NPTk5UUkFDSyA9IC0yMDAsCisJTkZfSVA2X1BSSV9NQU5HTEUgPSAtMTUwLAorCU5GX0lQNl9QUklfTkFUX0RTVCA9IC0xMDAsCisJTkZfSVA2X1BSSV9GSUxURVIgPSAwLAorCU5GX0lQNl9QUklfU0VDVVJJVFkgPSA1MCwKKwlORl9JUDZfUFJJX05BVF9TUkMgPSAxMDAsCisJTkZfSVA2X1BSSV9TRUxJTlVYX0xBU1QgPSAyMjUsCisJTkZfSVA2X1BSSV9MQVNUID0gSU5UX01BWCwKK307CisKKworI2VuZGlmIC8qX19MSU5VWF9JUDZfTkVURklMVEVSX0gqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YxOWE5NwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmgKQEAgLTAsMCArMSwyNjUgQEAKKy8qCisgKiAyNS1KdWwtMTk5OCBNYWpvciBjaGFuZ2VzIHRvIGFsbG93IGZvciBpcCBjaGFpbiB0YWJsZQorICoKKyAqIDMtSmFuLTIwMDAgTmFtZWQgdGFibGVzIHRvIGFsbG93IHBhY2tldCBzZWxlY3Rpb24gZm9yIGRpZmZlcmVudCB1c2VzLgorICovCisKKy8qCisgKiAJRm9ybWF0IG9mIGFuIElQNiBmaXJld2FsbCBkZXNjcmlwdG9yCisgKgorICogCXNyYywgZHN0LCBzcmNfbWFzaywgZHN0X21hc2sgYXJlIGFsd2F5cyBzdG9yZWQgaW4gbmV0d29yayBieXRlIG9yZGVyLgorICogCWZsYWdzIGFyZSBzdG9yZWQgaW4gaG9zdCBieXRlIG9yZGVyIChvZiBjb3Vyc2UpLgorICogCVBvcnQgbnVtYmVycyBhcmUgc3RvcmVkIGluIEhPU1QgYnl0ZSBvcmRlci4KKyAqLworCisjaWZuZGVmIF9JUDZfVEFCTEVTX0gKKyNkZWZpbmUgX0lQNl9UQUJMRVNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KKworI2RlZmluZSBJUDZUX0ZVTkNUSU9OX01BWE5BTUVMRU4gWFRfRlVOQ1RJT05fTUFYTkFNRUxFTgorI2RlZmluZSBJUDZUX1RBQkxFX01BWE5BTUVMRU4gWFRfVEFCTEVfTUFYTkFNRUxFTgorI2RlZmluZSBpcDZ0X21hdGNoIHh0X21hdGNoCisjZGVmaW5lIGlwNnRfdGFyZ2V0IHh0X3RhcmdldAorI2RlZmluZSBpcDZ0X3RhYmxlIHh0X3RhYmxlCisjZGVmaW5lIGlwNnRfZ2V0X3JldmlzaW9uIHh0X2dldF9yZXZpc2lvbgorI2RlZmluZSBpcDZ0X2VudHJ5X21hdGNoIHh0X2VudHJ5X21hdGNoCisjZGVmaW5lIGlwNnRfZW50cnlfdGFyZ2V0IHh0X2VudHJ5X3RhcmdldAorI2RlZmluZSBpcDZ0X3N0YW5kYXJkX3RhcmdldCB4dF9zdGFuZGFyZF90YXJnZXQKKyNkZWZpbmUgaXA2dF9lcnJvcl90YXJnZXQgeHRfZXJyb3JfdGFyZ2V0CisjZGVmaW5lIGlwNnRfY291bnRlcnMgeHRfY291bnRlcnMKKyNkZWZpbmUgSVA2VF9DT05USU5VRSBYVF9DT05USU5VRQorI2RlZmluZSBJUDZUX1JFVFVSTiBYVF9SRVRVUk4KKworLyogUHJlLWlwdGFibGVzLTEuNC4wICovCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X3RjcHVkcC5oPgorI2RlZmluZSBpcDZ0X3RjcCB4dF90Y3AKKyNkZWZpbmUgaXA2dF91ZHAgeHRfdWRwCisjZGVmaW5lIElQNlRfVENQX0lOVl9TUkNQVAlYVF9UQ1BfSU5WX1NSQ1BUCisjZGVmaW5lIElQNlRfVENQX0lOVl9EU1RQVAlYVF9UQ1BfSU5WX0RTVFBUCisjZGVmaW5lIElQNlRfVENQX0lOVl9GTEFHUwlYVF9UQ1BfSU5WX0ZMQUdTCisjZGVmaW5lIElQNlRfVENQX0lOVl9PUFRJT04JWFRfVENQX0lOVl9PUFRJT04KKyNkZWZpbmUgSVA2VF9UQ1BfSU5WX01BU0sJWFRfVENQX0lOVl9NQVNLCisjZGVmaW5lIElQNlRfVURQX0lOVl9TUkNQVAlYVF9VRFBfSU5WX1NSQ1BUCisjZGVmaW5lIElQNlRfVURQX0lOVl9EU1RQVAlYVF9VRFBfSU5WX0RTVFBUCisjZGVmaW5lIElQNlRfVURQX0lOVl9NQVNLCVhUX1VEUF9JTlZfTUFTSworCisjZGVmaW5lIGlwNnRfY291bnRlcnNfaW5mbyB4dF9jb3VudGVyc19pbmZvCisjZGVmaW5lIElQNlRfU1RBTkRBUkRfVEFSR0VUIFhUX1NUQU5EQVJEX1RBUkdFVAorI2RlZmluZSBJUDZUX0VSUk9SX1RBUkdFVCBYVF9FUlJPUl9UQVJHRVQKKyNkZWZpbmUgSVA2VF9NQVRDSF9JVEVSQVRFKGUsIGZuLCBhcmdzLi4uKSBcCisJWFRfTUFUQ0hfSVRFUkFURShzdHJ1Y3QgaXA2dF9lbnRyeSwgZSwgZm4sICMjIGFyZ3MpCisjZGVmaW5lIElQNlRfRU5UUllfSVRFUkFURShlbnRyaWVzLCBzaXplLCBmbiwgYXJncy4uLikgXAorCVhUX0VOVFJZX0lURVJBVEUoc3RydWN0IGlwNnRfZW50cnksIGVudHJpZXMsIHNpemUsIGZuLCAjIyBhcmdzKQorCisvKiBZZXMsIFZpcmdpbmlhLCB5b3UgaGF2ZSB0byB6ZXJvIHRoZSBwYWRkaW5nLiAqLworc3RydWN0IGlwNnRfaXA2IHsKKwkvKiBTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIElQNiBhZGRyICovCisJc3RydWN0IGluNl9hZGRyIHNyYywgZHN0OwkJCisJLyogTWFzayBmb3Igc3JjIGFuZCBkZXN0IElQNiBhZGRyICovCisJc3RydWN0IGluNl9hZGRyIHNtc2ssIGRtc2s7CisJY2hhciBpbmlmYWNlW0lGTkFNU0laXSwgb3V0aWZhY2VbSUZOQU1TSVpdOworCXVuc2lnbmVkIGNoYXIgaW5pZmFjZV9tYXNrW0lGTkFNU0laXSwgb3V0aWZhY2VfbWFza1tJRk5BTVNJWl07CisKKwkvKiBVcHBlciBwcm90b2NvbCBudW1iZXIKKwkgKiAtIFRoZSBhbGxvd2VkIHZhbHVlIGlzIDAgKGFueSkgb3IgcHJvdG9jb2wgbnVtYmVyIG9mIGxhc3QgcGFyc2FibGUKKwkgKiAgIGhlYWRlciwgd2hpY2ggaXMgNTAgKEVTUCksIDU5IChObyBOZXh0IEhlYWRlciksIDEzNSAoTUgpLCBvcgorCSAqICAgdGhlIG5vbiBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzLgorCSAqIC0gVGhlIHByb3RvY29sIG51bWJlcnMgb2YgSVB2NiBleHRlbnNpb24gaGVhZGVycyBleGNlcHQgb2YgRVNQIGFuZAorCSAqICAgTUggZG8gbm90IG1hdGNoIGFueSBwYWNrZXRzLgorCSAqIC0gWW91IGFsc28gbmVlZCB0byBzZXQgSVA2VF9GTEFHU19QUk9UTyB0byAiZmxhZ3MiIHRvIGNoZWNrIHByb3RvY29sLgorCSAqLworCXVfaW50MTZfdCBwcm90bzsKKwkvKiBUT1MgdG8gbWF0Y2ggaWZmIGZsYWdzICYgSVA2VF9GX1RPUyAqLworCXVfaW50OF90IHRvczsKKworCS8qIEZsYWdzIHdvcmQgKi8KKwl1X2ludDhfdCBmbGFnczsKKwkvKiBJbnZlcnNlIGZsYWdzICovCisJdV9pbnQ4X3QgaW52ZmxhZ3M7Cit9OworCisvKiBWYWx1ZXMgZm9yICJmbGFnIiBmaWVsZCBpbiBzdHJ1Y3QgaXA2dF9pcDYgKGdlbmVyYWwgaXA2IHN0cnVjdHVyZSkuICovCisjZGVmaW5lIElQNlRfRl9QUk9UTwkJMHgwMQkvKiBTZXQgaWYgcnVsZSBjYXJlcyBhYm91dCB1cHBlciAKKwkJCQkJICAgcHJvdG9jb2xzICovCisjZGVmaW5lIElQNlRfRl9UT1MJCTB4MDIJLyogTWF0Y2ggdGhlIFRPUy4gKi8KKyNkZWZpbmUgSVA2VF9GX0dPVE8JCTB4MDQJLyogU2V0IGlmIGp1bXAgaXMgYSBnb3RvICovCisjZGVmaW5lIElQNlRfRl9NQVNLCQkweDA3CS8qIEFsbCBwb3NzaWJsZSBmbGFnIGJpdHMgbWFzay4gKi8KKworLyogVmFsdWVzIGZvciAiaW52IiBmaWVsZCBpbiBzdHJ1Y3QgaXA2dF9pcDYuICovCisjZGVmaW5lIElQNlRfSU5WX1ZJQV9JTgkJMHgwMQkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIElOIElGQUNFLiAqLworI2RlZmluZSBJUDZUX0lOVl9WSUFfT1VUCQkweDAyCS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgT1VUIElGQUNFICovCisjZGVmaW5lIElQNlRfSU5WX1RPUwkJMHgwNAkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIFRPUy4gKi8KKyNkZWZpbmUgSVA2VF9JTlZfU1JDSVAJCTB4MDgJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiBTUkMgSVAuICovCisjZGVmaW5lIElQNlRfSU5WX0RTVElQCQkweDEwCS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgRFNUIE9QLiAqLworI2RlZmluZSBJUDZUX0lOVl9GUkFHCQkweDIwCS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgRlJBRy4gKi8KKyNkZWZpbmUgSVA2VF9JTlZfUFJPVE8JCVhUX0lOVl9QUk9UTworI2RlZmluZSBJUDZUX0lOVl9NQVNLCQkweDdGCS8qIEFsbCBwb3NzaWJsZSBmbGFnIGJpdHMgbWFzay4gKi8KKworLyogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyBlYWNoIG9mIHRoZSBmaXJld2FsbCBydWxlcy4gIENvbnNpc3RzIG9mIDMKKyAgIHBhcnRzIHdoaWNoIGFyZSAxKSBnZW5lcmFsIElQIGhlYWRlciBzdHVmZiAyKSBtYXRjaCBzcGVjaWZpYworICAgc3R1ZmYgMykgdGhlIHRhcmdldCB0byBwZXJmb3JtIGlmIHRoZSBydWxlIG1hdGNoZXMgKi8KK3N0cnVjdCBpcDZ0X2VudHJ5IHsKKwlzdHJ1Y3QgaXA2dF9pcDYgaXB2NjsKKworCS8qIE1hcmsgd2l0aCBmaWVsZHMgdGhhdCB3ZSBjYXJlIGFib3V0LiAqLworCXVuc2lnbmVkIGludCBuZmNhY2hlOworCisJLyogU2l6ZSBvZiBpcHRfZW50cnkgKyBtYXRjaGVzICovCisJdV9pbnQxNl90IHRhcmdldF9vZmZzZXQ7CisJLyogU2l6ZSBvZiBpcHRfZW50cnkgKyBtYXRjaGVzICsgdGFyZ2V0ICovCisJdV9pbnQxNl90IG5leHRfb2Zmc2V0OworCisJLyogQmFjayBwb2ludGVyICovCisJdW5zaWduZWQgaW50IGNvbWVmcm9tOworCisJLyogUGFja2V0IGFuZCBieXRlIGNvdW50ZXJzLiAqLworCXN0cnVjdCB4dF9jb3VudGVycyBjb3VudGVyczsKKworCS8qIFRoZSBtYXRjaGVzIChpZiBhbnkpLCB0aGVuIHRoZSB0YXJnZXQuICovCisJdW5zaWduZWQgY2hhciBlbGVtc1swXTsKK307CisKKy8qIFN0YW5kYXJkIGVudHJ5ICovCitzdHJ1Y3QgaXA2dF9zdGFuZGFyZCB7CisJc3RydWN0IGlwNnRfZW50cnkgZW50cnk7CisJc3RydWN0IHh0X3N0YW5kYXJkX3RhcmdldCB0YXJnZXQ7Cit9OworCitzdHJ1Y3QgaXA2dF9lcnJvciB7CisJc3RydWN0IGlwNnRfZW50cnkgZW50cnk7CisJc3RydWN0IHh0X2Vycm9yX3RhcmdldCB0YXJnZXQ7Cit9OworCisjZGVmaW5lIElQNlRfRU5UUllfSU5JVChfX3NpemUpCQkJCQkJICAgICAgIFwKK3sJCQkJCQkJCQkgICAgICAgXAorCS50YXJnZXRfb2Zmc2V0CT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X2VudHJ5KSwJCQkgICAgICAgXAorCS5uZXh0X29mZnNldAk9IChfX3NpemUpLAkJCQkJICAgICAgIFwKK30KKworI2RlZmluZSBJUDZUX1NUQU5EQVJEX0lOSVQoX192ZXJkaWN0KQkJCQkJICAgICAgIFwKK3sJCQkJCQkJCQkgICAgICAgXAorCS5lbnRyeQkJPSBJUDZUX0VOVFJZX0lOSVQoc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSksICAgICAgIFwKKwkudGFyZ2V0CQk9IFhUX1RBUkdFVF9JTklUKFhUX1NUQU5EQVJEX1RBUkdFVCwJCSAgICAgICBcCisJCQkJCSBzaXplb2Yoc3RydWN0IHh0X3N0YW5kYXJkX3RhcmdldCkpLCAgIFwKKwkudGFyZ2V0LnZlcmRpY3QJPSAtKF9fdmVyZGljdCkgLSAxLAkJCQkgICAgICAgXAorfQorCisjZGVmaW5lIElQNlRfRVJST1JfSU5JVAkJCQkJCQkgICAgICAgXAorewkJCQkJCQkJCSAgICAgICBcCisJLmVudHJ5CQk9IElQNlRfRU5UUllfSU5JVChzaXplb2Yoc3RydWN0IGlwNnRfZXJyb3IpKSwJICAgICAgIFwKKwkudGFyZ2V0CQk9IFhUX1RBUkdFVF9JTklUKFhUX0VSUk9SX1RBUkdFVCwJCSAgICAgICBcCisJCQkJCSBzaXplb2Yoc3RydWN0IHh0X2Vycm9yX3RhcmdldCkpLCAgICAgIFwKKwkudGFyZ2V0LmVycm9ybmFtZSA9ICJFUlJPUiIsCQkJCQkgICAgICAgXAorfQorCisvKgorICogTmV3IElQIGZpcmV3YWxsIG9wdGlvbnMgZm9yIFtnc11ldHNvY2tvcHQgYXQgdGhlIFJBVyBJUCBsZXZlbC4KKyAqIFVubGlrZSBCU0QgTGludXggaW5oZXJpdHMgSVAgb3B0aW9ucyBzbyB5b3UgZG9uJ3QgaGF2ZSB0byB1c2UKKyAqIGEgcmF3IHNvY2tldCBmb3IgdGhpcy4gSW5zdGVhZCB3ZSBjaGVjayByaWdodHMgaW4gdGhlIGNhbGxzLgorICoKKyAqIEFUVEVOVElPTjogY2hlY2sgbGludXgvaW42LmggYmVmb3JlIGFkZGluZyBuZXcgbnVtYmVyIGhlcmUuCisgKi8KKyNkZWZpbmUgSVA2VF9CQVNFX0NUTAkJCTY0CisKKyNkZWZpbmUgSVA2VF9TT19TRVRfUkVQTEFDRQkJKElQNlRfQkFTRV9DVEwpCisjZGVmaW5lIElQNlRfU09fU0VUX0FERF9DT1VOVEVSUwkoSVA2VF9CQVNFX0NUTCArIDEpCisjZGVmaW5lIElQNlRfU09fU0VUX01BWAkJCUlQNlRfU09fU0VUX0FERF9DT1VOVEVSUworCisjZGVmaW5lIElQNlRfU09fR0VUX0lORk8JCShJUDZUX0JBU0VfQ1RMKQorI2RlZmluZSBJUDZUX1NPX0dFVF9FTlRSSUVTCQkoSVA2VF9CQVNFX0NUTCArIDEpCisjZGVmaW5lIElQNlRfU09fR0VUX1JFVklTSU9OX01BVENICShJUDZUX0JBU0VfQ1RMICsgNCkKKyNkZWZpbmUgSVA2VF9TT19HRVRfUkVWSVNJT05fVEFSR0VUCShJUDZUX0JBU0VfQ1RMICsgNSkKKyNkZWZpbmUgSVA2VF9TT19HRVRfTUFYCQkJSVA2VF9TT19HRVRfUkVWSVNJT05fVEFSR0VUCisKKy8qIElDTVAgbWF0Y2hpbmcgc3R1ZmYgKi8KK3N0cnVjdCBpcDZ0X2ljbXAgeworCXVfaW50OF90IHR5cGU7CQkJCS8qIHR5cGUgdG8gbWF0Y2ggKi8KKwl1X2ludDhfdCBjb2RlWzJdOwkJCS8qIHJhbmdlIG9mIGNvZGUgKi8KKwl1X2ludDhfdCBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCit9OworCisvKiBWYWx1ZXMgZm9yICJpbnYiIGZpZWxkIGZvciBzdHJ1Y3QgaXB0X2ljbXAuICovCisjZGVmaW5lIElQNlRfSUNNUF9JTlYJMHgwMQkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIHR5cGUvY29kZSB0ZXN0ICovCisKKy8qIFRoZSBhcmd1bWVudCB0byBJUDZUX1NPX0dFVF9JTkZPICovCitzdHJ1Y3QgaXA2dF9nZXRpbmZvIHsKKwkvKiBXaGljaCB0YWJsZTogY2FsbGVyIGZpbGxzIHRoaXMgaW4uICovCisJY2hhciBuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU5dOworCisJLyogS2VybmVsIGZpbGxzIHRoZXNlIGluLiAqLworCS8qIFdoaWNoIGhvb2sgZW50cnkgcG9pbnRzIGFyZSB2YWxpZDogYml0bWFzayAqLworCXVuc2lnbmVkIGludCB2YWxpZF9ob29rczsKKworCS8qIEhvb2sgZW50cnkgcG9pbnRzOiBvbmUgcGVyIG5ldGZpbHRlciBob29rLiAqLworCXVuc2lnbmVkIGludCBob29rX2VudHJ5W05GX0lORVRfTlVNSE9PS1NdOworCisJLyogVW5kZXJmbG93IHBvaW50cy4gKi8KKwl1bnNpZ25lZCBpbnQgdW5kZXJmbG93W05GX0lORVRfTlVNSE9PS1NdOworCisJLyogTnVtYmVyIG9mIGVudHJpZXMgKi8KKwl1bnNpZ25lZCBpbnQgbnVtX2VudHJpZXM7CisKKwkvKiBTaXplIG9mIGVudHJpZXMuICovCisJdW5zaWduZWQgaW50IHNpemU7Cit9OworCisvKiBUaGUgYXJndW1lbnQgdG8gSVA2VF9TT19TRVRfUkVQTEFDRS4gKi8KK3N0cnVjdCBpcDZ0X3JlcGxhY2UgeworCS8qIFdoaWNoIHRhYmxlLiAqLworCWNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKKworCS8qIFdoaWNoIGhvb2sgZW50cnkgcG9pbnRzIGFyZSB2YWxpZDogYml0bWFzay4gIFlvdSBjYW4ndAorICAgICAgICAgICBjaGFuZ2UgdGhpcy4gKi8KKwl1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3M7CisKKwkvKiBOdW1iZXIgb2YgZW50cmllcyAqLworCXVuc2lnbmVkIGludCBudW1fZW50cmllczsKKworCS8qIFRvdGFsIHNpemUgb2YgbmV3IGVudHJpZXMgKi8KKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKworCS8qIEhvb2sgZW50cnkgcG9pbnRzLiAqLworCXVuc2lnbmVkIGludCBob29rX2VudHJ5W05GX0lORVRfTlVNSE9PS1NdOworCisJLyogVW5kZXJmbG93IHBvaW50cy4gKi8KKwl1bnNpZ25lZCBpbnQgdW5kZXJmbG93W05GX0lORVRfTlVNSE9PS1NdOworCisJLyogSW5mb3JtYXRpb24gYWJvdXQgb2xkIGVudHJpZXM6ICovCisJLyogTnVtYmVyIG9mIGNvdW50ZXJzIChtdXN0IGJlIGVxdWFsIHRvIGN1cnJlbnQgbnVtYmVyIG9mIGVudHJpZXMpLiAqLworCXVuc2lnbmVkIGludCBudW1fY291bnRlcnM7CisJLyogVGhlIG9sZCBlbnRyaWVzJyBjb3VudGVycy4gKi8KKwlzdHJ1Y3QgeHRfY291bnRlcnMgKmNvdW50ZXJzOworCisJLyogVGhlIGVudHJpZXMgKGhhbmcgb2ZmIGVuZDogbm90IHJlYWxseSBhbiBhcnJheSkuICovCisJc3RydWN0IGlwNnRfZW50cnkgZW50cmllc1swXTsKK307CisKKy8qIFRoZSBhcmd1bWVudCB0byBJUDZUX1NPX0dFVF9FTlRSSUVTLiAqLworc3RydWN0IGlwNnRfZ2V0X2VudHJpZXMgeworCS8qIFdoaWNoIHRhYmxlOiB1c2VyIGZpbGxzIHRoaXMgaW4uICovCisJY2hhciBuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU5dOworCisJLyogVXNlciBmaWxscyB0aGlzIGluOiB0b3RhbCBlbnRyeSBzaXplLiAqLworCXVuc2lnbmVkIGludCBzaXplOworCisJLyogVGhlIGVudHJpZXMuICovCisJc3RydWN0IGlwNnRfZW50cnkgZW50cnl0YWJsZVswXTsKK307CisKKy8qIEhlbHBlciBmdW5jdGlvbnMgKi8KK3N0YXRpYyBfX2lubGluZV9fIHN0cnVjdCB4dF9lbnRyeV90YXJnZXQgKgoraXA2dF9nZXRfdGFyZ2V0KHN0cnVjdCBpcDZ0X2VudHJ5ICplKQoreworCXJldHVybiAodm9pZCAqKWUgKyBlLT50YXJnZXRfb2Zmc2V0OworfQorCisvKgorICoJTWFpbiBmaXJld2FsbCBjaGFpbnMgZGVmaW5pdGlvbnMgYW5kIGdsb2JhbCB2YXIncyBkZWZpbml0aW9ucy4KKyAqLworCisjZW5kaWYgLyogX0lQNl9UQUJMRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfSEwuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X0hMLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZiNzgxMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X0hMLmgKQEAgLTAsMCArMSwyMiBAQAorLyogSG9wIExpbWl0IG1vZGlmaWNhdGlvbiBtb2R1bGUgZm9yIGlwNnRhYmxlcworICogTWFjaWVqIFNvbHR5c2lhayA8c29sdEBkbnMudG94aWNmaWxtcy50dj4KKyAqIEJhc2VkIG9uIEhXJ3MgVFRMIG1vZHVsZSAqLworCisjaWZuZGVmIF9JUDZUX0hMX0gKKyNkZWZpbmUgX0lQNlRfSExfSAorCitlbnVtIHsKKwlJUDZUX0hMX1NFVCA9IDAsCisJSVA2VF9ITF9JTkMsCisJSVA2VF9ITF9ERUMKK307CisKKyNkZWZpbmUgSVA2VF9ITF9NQVhNT0RFCUlQNlRfSExfREVDCisKK3N0cnVjdCBpcDZ0X0hMX2luZm8geworCXVfaW50OF90CW1vZGU7CisJdV9pbnQ4X3QJaG9wX2xpbWl0OworfTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X0xPRy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfTE9HLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRkNTU3OQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X0xPRy5oCkBAIC0wLDAgKzEsMTkgQEAKKyNpZm5kZWYgX0lQNlRfTE9HX0gKKyNkZWZpbmUgX0lQNlRfTE9HX0gKKworLyogbWFrZSBzdXJlIG5vdCB0byBjaGFuZ2UgdGhpcyB3aXRob3V0IGNoYW5naW5nIG5ldGZpbHRlci5oOk5GX0xPR18qICghKSAqLworI2RlZmluZSBJUDZUX0xPR19UQ1BTRVEJCTB4MDEJLyogTG9nIFRDUCBzZXF1ZW5jZSBudW1iZXJzICovCisjZGVmaW5lIElQNlRfTE9HX1RDUE9QVAkJMHgwMgkvKiBMb2cgVENQIG9wdGlvbnMgKi8KKyNkZWZpbmUgSVA2VF9MT0dfSVBPUFQJCTB4MDQJLyogTG9nIElQIG9wdGlvbnMgKi8KKyNkZWZpbmUgSVA2VF9MT0dfVUlECQkweDA4CS8qIExvZyBVSUQgb3duaW5nIGxvY2FsIHNvY2tldCAqLworI2RlZmluZSBJUDZUX0xPR19ORkxPRwkJMHgxMAkvKiBVbnN1cHBvcnRlZCwgZG9uJ3QgdXNlICovCisjZGVmaW5lIElQNlRfTE9HX01BQ0RFQ09ERQkweDIwCS8qIERlY29kZSBNQUMgaGVhZGVyICovCisjZGVmaW5lIElQNlRfTE9HX01BU0sJCTB4MmYKKworc3RydWN0IGlwNnRfbG9nX2luZm8geworCXVuc2lnbmVkIGNoYXIgbGV2ZWw7CisJdW5zaWduZWQgY2hhciBsb2dmbGFnczsKKwljaGFyIHByZWZpeFszMF07Cit9OworCisjZW5kaWYgLypfSVBUX0xPR19IKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X1JFSkVDVC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfUkVKRUNULmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJlNjUwNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X1JFSkVDVC5oCkBAIC0wLDAgKzEsMTggQEAKKyNpZm5kZWYgX0lQNlRfUkVKRUNUX0gKKyNkZWZpbmUgX0lQNlRfUkVKRUNUX0gKKworZW51bSBpcDZ0X3JlamVjdF93aXRoIHsKKwlJUDZUX0lDTVA2X05PX1JPVVRFLAorCUlQNlRfSUNNUDZfQURNX1BST0hJQklURUQsCisJSVA2VF9JQ01QNl9OT1RfTkVJR0hCT1VSLAorCUlQNlRfSUNNUDZfQUREUl9VTlJFQUNILAorCUlQNlRfSUNNUDZfUE9SVF9VTlJFQUNILAorCUlQNlRfSUNNUDZfRUNIT1JFUExZLAorCUlQNlRfVENQX1JFU0VUCit9OworCitzdHJ1Y3QgaXA2dF9yZWplY3RfaW5mbyB7CisJdV9pbnQzMl90CXdpdGg7CS8qIHJlamVjdCB0eXBlICovCit9OworCisjZW5kaWYgLypfSVA2VF9SRUpFQ1RfSCovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9haC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfYWguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2E3NDVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfYWguaApAQCAtMCwwICsxLDIwIEBACisjaWZuZGVmIF9JUDZUX0FIX0gKKyNkZWZpbmUgX0lQNlRfQUhfSAorCitzdHJ1Y3QgaXA2dF9haCB7CisJdV9pbnQzMl90IHNwaXNbMl07CQkJLyogU2VjdXJpdHkgUGFyYW1ldGVyIEluZGV4ICovCisJdV9pbnQzMl90IGhkcmxlbjsJCQkvKiBIZWFkZXIgTGVuZ3RoICovCisJdV9pbnQ4X3QgIGhkcnJlczsJCQkvKiBUZXN0IG9mIHRoZSBSZXNlcnZlZCBGaWxlZCAqLworCXVfaW50OF90ICBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCit9OworCisjZGVmaW5lIElQNlRfQUhfU1BJIDB4MDEKKyNkZWZpbmUgSVA2VF9BSF9MRU4gMHgwMgorI2RlZmluZSBJUDZUX0FIX1JFUyAweDA0CisKKy8qIFZhbHVlcyBmb3IgImludmZsYWdzIiBmaWVsZCBpbiBzdHJ1Y3QgaXA2dF9haC4gKi8KKyNkZWZpbmUgSVA2VF9BSF9JTlZfU1BJCQkweDAxCS8qIEludmVydCB0aGUgc2Vuc2Ugb2Ygc3BpLiAqLworI2RlZmluZSBJUDZUX0FIX0lOVl9MRU4JCTB4MDIJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiBsZW5ndGguICovCisjZGVmaW5lIElQNlRfQUhfSU5WX01BU0sJMHgwMwkvKiBBbGwgcG9zc2libGUgZmxhZ3MuICovCisKKyNlbmRpZiAvKl9JUDZUX0FIX0gqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfZnJhZy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfZnJhZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MjRkMDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9mcmFnLmgKQEAgLTAsMCArMSwyMyBAQAorI2lmbmRlZiBfSVA2VF9GUkFHX0gKKyNkZWZpbmUgX0lQNlRfRlJBR19ICisKK3N0cnVjdCBpcDZ0X2ZyYWcgeworCXVfaW50MzJfdCBpZHNbMl07CQkJLyogU2VjdXJpdHkgUGFyYW1ldGVyIEluZGV4ICovCisJdV9pbnQzMl90IGhkcmxlbjsJCQkvKiBIZWFkZXIgTGVuZ3RoICovCisJdV9pbnQ4X3QgIGZsYWdzOwkJCS8qICAqLworCXVfaW50OF90ICBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCit9OworCisjZGVmaW5lIElQNlRfRlJBR19JRFMgCQkweDAxCisjZGVmaW5lIElQNlRfRlJBR19MRU4gCQkweDAyCisjZGVmaW5lIElQNlRfRlJBR19SRVMgCQkweDA0CisjZGVmaW5lIElQNlRfRlJBR19GU1QgCQkweDA4CisjZGVmaW5lIElQNlRfRlJBR19NRiAgCQkweDEwCisjZGVmaW5lIElQNlRfRlJBR19OTUYgIAkJMHgyMAorCisvKiBWYWx1ZXMgZm9yICJpbnZmbGFncyIgZmllbGQgaW4gc3RydWN0IGlwNnRfZnJhZy4gKi8KKyNkZWZpbmUgSVA2VF9GUkFHX0lOVl9JRFMJMHgwMQkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIGlkcy4gKi8KKyNkZWZpbmUgSVA2VF9GUkFHX0lOVl9MRU4JMHgwMgkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIGxlbmd0aC4gKi8KKyNkZWZpbmUgSVA2VF9GUkFHX0lOVl9NQVNLCTB4MDMJLyogQWxsIHBvc3NpYmxlIGZsYWdzLiAqLworCisjZW5kaWYgLypfSVA2VF9GUkFHX0gqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfaGwuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2hsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVmOTFiOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2hsLmgKQEAgLTAsMCArMSwyMiBAQAorLyogaXA2dGFibGVzIG1vZHVsZSBmb3IgbWF0Y2hpbmcgdGhlIEhvcCBMaW1pdCB2YWx1ZQorICogTWFjaWVqIFNvbHR5c2lhayA8c29sdEBkbnMudG94aWNmaWxtcy50dj4KKyAqIEJhc2VkIG9uIEhXJ3MgdHRsIG1vZHVsZSAqLworCisjaWZuZGVmIF9JUDZUX0hMX0gKKyNkZWZpbmUgX0lQNlRfSExfSAorCitlbnVtIHsKKwlJUDZUX0hMX0VRID0gMCwJCS8qIGVxdWFscyAqLworCUlQNlRfSExfTkUsCQkvKiBub3QgZXF1YWxzICovCisJSVA2VF9ITF9MVCwJCS8qIGxlc3MgdGhhbiAqLworCUlQNlRfSExfR1QsCQkvKiBncmVhdGVyIHRoYW4gKi8KK307CisKKworc3RydWN0IGlwNnRfaGxfaW5mbyB7CisJdV9pbnQ4X3QJbW9kZTsKKwl1X2ludDhfdAlob3BfbGltaXQ7Cit9OworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfaXB2NmhlYWRlci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfaXB2NmhlYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZGZkNDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9pcHY2aGVhZGVyLmgKQEAgLTAsMCArMSwyNiBAQAorLyogaXB2NmhlYWRlciBtYXRjaCAtIG1hdGNoZXMgSVB2NiBwYWNrZXRzIGJhc2VkCitvbiB3aGV0aGVyIHRoZXkgY29udGFpbiBjZXJ0YWluIGhlYWRlcnMgKi8KKworLyogT3JpZ2luYWwgaWRlYTogQnJhZCBDaGFwbWFuIAorICogUmV3cml0dGVuIGJ5OiBBbmRyYXMgS2lzLVN6YWJvIDxraXN6YUBzY2guYm1lLmh1PiAqLworCisKKyNpZm5kZWYgX19JUFY2SEVBREVSX0gKKyNkZWZpbmUgX19JUFY2SEVBREVSX0gKKworc3RydWN0IGlwNnRfaXB2NmhlYWRlcl9pbmZvIHsKKwl1X2ludDhfdCBtYXRjaGZsYWdzOworCXVfaW50OF90IGludmZsYWdzOworCXVfaW50OF90IG1vZGVmbGFnOworfTsKKworI2RlZmluZSBNQVNLX0hPUE9QVFMgICAgMTI4CisjZGVmaW5lIE1BU0tfRFNUT1BUUyAgICA2NAorI2RlZmluZSBNQVNLX1JPVVRJTkcgICAgMzIKKyNkZWZpbmUgTUFTS19GUkFHTUVOVCAgIDE2CisjZGVmaW5lIE1BU0tfQUggICAgICAgICA4CisjZGVmaW5lIE1BU0tfRVNQICAgICAgICA0CisjZGVmaW5lIE1BU0tfTk9ORSAgICAgICAyCisjZGVmaW5lIE1BU0tfUFJPVE8gICAgICAxCisKKyNlbmRpZiAvKiBfX0lQVjZIRUFERVJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbWguaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X21oLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg1NDliYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X21oLmgKQEAgLTAsMCArMSwxNCBAQAorI2lmbmRlZiBfSVA2VF9NSF9ICisjZGVmaW5lIF9JUDZUX01IX0gKKworLyogTUggbWF0Y2hpbmcgc3R1ZmYgKi8KK3N0cnVjdCBpcDZ0X21oIHsKKwl1X2ludDhfdCB0eXBlc1syXTsJLyogTUggdHlwZSByYW5nZSAqLworCXVfaW50OF90IGludmZsYWdzOwkvKiBJbnZlcnNlIGZsYWdzICovCit9OworCisvKiBWYWx1ZXMgZm9yICJpbnZmbGFncyIgZmllbGQgaW4gc3RydWN0IGlwNnRfbWguICovCisjZGVmaW5lIElQNlRfTUhfSU5WX1RZUEUJMHgwMQkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIHR5cGUuICovCisjZGVmaW5lIElQNlRfTUhfSU5WX01BU0sJMHgwMQkvKiBBbGwgcG9zc2libGUgZmxhZ3MuICovCisKKyNlbmRpZiAvKl9JUDZUX01IX0gqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfb3B0cy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfb3B0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZDg5YmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vcHRzLmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBfSVA2VF9PUFRTX0gKKyNkZWZpbmUgX0lQNlRfT1BUU19ICisKKyNkZWZpbmUgSVA2VF9PUFRTX09QVFNOUiAxNgorCitzdHJ1Y3QgaXA2dF9vcHRzIHsKKwl1X2ludDMyX3QgaGRybGVuOwkJCS8qIEhlYWRlciBMZW5ndGggKi8KKwl1X2ludDhfdCBmbGFnczsJCQkJLyogICovCisJdV9pbnQ4X3QgaW52ZmxhZ3M7CQkJLyogSW52ZXJzZSBmbGFncyAqLworCXVfaW50MTZfdCBvcHRzW0lQNlRfT1BUU19PUFRTTlJdOwkvKiBvcHRzICovCisJdV9pbnQ4X3Qgb3B0c25yOwkJCS8qIE5yIG9mIE9QdHMgKi8KK307CisKKyNkZWZpbmUgSVA2VF9PUFRTX0xFTiAJCTB4MDEKKyNkZWZpbmUgSVA2VF9PUFRTX09QVFMgCQkweDAyCisjZGVmaW5lIElQNlRfT1BUU19OU1RSSUNUCTB4MDQKKworLyogVmFsdWVzIGZvciAiaW52ZmxhZ3MiIGZpZWxkIGluIHN0cnVjdCBpcDZ0X3J0LiAqLworI2RlZmluZSBJUDZUX09QVFNfSU5WX0xFTgkweDAxCS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgbGVuZ3RoLiAqLworI2RlZmluZSBJUDZUX09QVFNfSU5WX01BU0sJMHgwMQkvKiBBbGwgcG9zc2libGUgZmxhZ3MuICovCisKKyNlbmRpZiAvKl9JUDZUX09QVFNfSCovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9ydC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjkxYmZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfcnQuaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIF9JUDZUX1JUX0gKKyNkZWZpbmUgX0lQNlRfUlRfSAorCisvKiNpbmNsdWRlIDxsaW51eC9pbjYuaD4qLworCisjZGVmaW5lIElQNlRfUlRfSE9QUyAxNgorCitzdHJ1Y3QgaXA2dF9ydCB7CisJdV9pbnQzMl90IHJ0X3R5cGU7CQkJLyogUm91dGluZyBUeXBlICovCisJdV9pbnQzMl90IHNlZ3NsZWZ0WzJdOwkJCS8qIFNlZ21lbnRzIExlZnQgKi8KKwl1X2ludDMyX3QgaGRybGVuOwkJCS8qIEhlYWRlciBMZW5ndGggKi8KKwl1X2ludDhfdCAgZmxhZ3M7CQkJLyogICovCisJdV9pbnQ4X3QgIGludmZsYWdzOwkJCS8qIEludmVyc2UgZmxhZ3MgKi8KKwlzdHJ1Y3QgaW42X2FkZHIgYWRkcnNbSVA2VF9SVF9IT1BTXTsJLyogSG9wcyAqLworCXVfaW50OF90IGFkZHJucjsJCQkvKiBOciBvZiBBZGRyZXNzZXMgKi8KK307CisKKyNkZWZpbmUgSVA2VF9SVF9UWVAgCQkweDAxCisjZGVmaW5lIElQNlRfUlRfU0dTIAkJMHgwMgorI2RlZmluZSBJUDZUX1JUX0xFTiAJCTB4MDQKKyNkZWZpbmUgSVA2VF9SVF9SRVMgCQkweDA4CisjZGVmaW5lIElQNlRfUlRfRlNUX01BU0sJMHgzMAorI2RlZmluZSBJUDZUX1JUX0ZTVCAJCTB4MTAKKyNkZWZpbmUgSVA2VF9SVF9GU1RfTlNUUklDVAkweDIwCisKKy8qIFZhbHVlcyBmb3IgImludmZsYWdzIiBmaWVsZCBpbiBzdHJ1Y3QgaXA2dF9ydC4gKi8KKyNkZWZpbmUgSVA2VF9SVF9JTlZfVFlQCQkweDAxCS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgdHlwZS4gKi8KKyNkZWZpbmUgSVA2VF9SVF9JTlZfU0dTCQkweDAyCS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgU2VnbWVudHMuICovCisjZGVmaW5lIElQNlRfUlRfSU5WX0xFTgkJMHgwNAkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIGxlbmd0aC4gKi8KKyNkZWZpbmUgSVA2VF9SVF9JTlZfTUFTSwkweDA3CS8qIEFsbCBwb3NzaWJsZSBmbGFncy4gKi8KKworI2VuZGlmIC8qX0lQNlRfUlRfSCovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0bGluay5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTVlZDhjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaApAQCAtMCwwICsxLDE0OCBAQAorI2lmbmRlZiBfX0xJTlVYX05FVExJTktfSAorI2RlZmluZSBfX0xJTlVYX05FVExJTktfSAorCisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+IC8qIGZvciBzYV9mYW1pbHlfdCAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgTkVUTElOS19ST1VURQkJMAkvKiBSb3V0aW5nL2RldmljZSBob29rCQkJCSovCisjZGVmaW5lIE5FVExJTktfVU5VU0VECQkxCS8qIFVudXNlZCBudW1iZXIJCQkJKi8KKyNkZWZpbmUgTkVUTElOS19VU0VSU09DSwkyCS8qIFJlc2VydmVkIGZvciB1c2VyIG1vZGUgc29ja2V0IHByb3RvY29scyAJKi8KKyNkZWZpbmUgTkVUTElOS19GSVJFV0FMTAkzCS8qIEZpcmV3YWxsaW5nIGhvb2sJCQkJKi8KKyNkZWZpbmUgTkVUTElOS19JTkVUX0RJQUcJNAkvKiBJTkVUIHNvY2tldCBtb25pdG9yaW5nCQkJKi8KKyNkZWZpbmUgTkVUTElOS19ORkxPRwkJNQkvKiBuZXRmaWx0ZXIvaXB0YWJsZXMgVUxPRyAqLworI2RlZmluZSBORVRMSU5LX1hGUk0JCTYJLyogaXBzZWMgKi8KKyNkZWZpbmUgTkVUTElOS19TRUxJTlVYCQk3CS8qIFNFTGludXggZXZlbnQgbm90aWZpY2F0aW9ucyAqLworI2RlZmluZSBORVRMSU5LX0lTQ1NJCQk4CS8qIE9wZW4taVNDU0kgKi8KKyNkZWZpbmUgTkVUTElOS19BVURJVAkJOQkvKiBhdWRpdGluZyAqLworI2RlZmluZSBORVRMSU5LX0ZJQl9MT09LVVAJMTAJCisjZGVmaW5lIE5FVExJTktfQ09OTkVDVE9SCTExCisjZGVmaW5lIE5FVExJTktfTkVURklMVEVSCTEyCS8qIG5ldGZpbHRlciBzdWJzeXN0ZW0gKi8KKyNkZWZpbmUgTkVUTElOS19JUDZfRlcJCTEzCisjZGVmaW5lIE5FVExJTktfRE5SVE1TRwkJMTQJLyogREVDbmV0IHJvdXRpbmcgbWVzc2FnZXMgKi8KKyNkZWZpbmUgTkVUTElOS19LT0JKRUNUX1VFVkVOVAkxNQkvKiBLZXJuZWwgbWVzc2FnZXMgdG8gdXNlcnNwYWNlICovCisjZGVmaW5lIE5FVExJTktfR0VORVJJQwkJMTYKKy8qIGxlYXZlIHJvb20gZm9yIE5FVExJTktfRE0gKERNIEV2ZW50cykgKi8KKyNkZWZpbmUgTkVUTElOS19TQ1NJVFJBTlNQT1JUCTE4CS8qIFNDU0kgVHJhbnNwb3J0cyAqLworI2RlZmluZSBORVRMSU5LX0VDUllQVEZTCTE5CisKKyNkZWZpbmUgTUFYX0xJTktTIDMyCQkKKworc3RydWN0IHNvY2thZGRyX25sIHsKKwlzYV9mYW1pbHlfdAlubF9mYW1pbHk7CS8qIEFGX05FVExJTksJKi8KKwl1bnNpZ25lZCBzaG9ydAlubF9wYWQ7CQkvKiB6ZXJvCQkqLworCV9fdTMyCQlubF9waWQ7CQkvKiBwb3J0IElECSovCisgICAgICAgCV9fdTMyCQlubF9ncm91cHM7CS8qIG11bHRpY2FzdCBncm91cHMgbWFzayAqLworfTsKKworc3RydWN0IG5sbXNnaGRyIHsKKwlfX3UzMgkJbmxtc2dfbGVuOwkvKiBMZW5ndGggb2YgbWVzc2FnZSBpbmNsdWRpbmcgaGVhZGVyICovCisJX191MTYJCW5sbXNnX3R5cGU7CS8qIE1lc3NhZ2UgY29udGVudCAqLworCV9fdTE2CQlubG1zZ19mbGFnczsJLyogQWRkaXRpb25hbCBmbGFncyAqLworCV9fdTMyCQlubG1zZ19zZXE7CS8qIFNlcXVlbmNlIG51bWJlciAqLworCV9fdTMyCQlubG1zZ19waWQ7CS8qIFNlbmRpbmcgcHJvY2VzcyBwb3J0IElEICovCit9OworCisvKiBGbGFncyB2YWx1ZXMgKi8KKworI2RlZmluZSBOTE1fRl9SRVFVRVNUCQkxCS8qIEl0IGlzIHJlcXVlc3QgbWVzc2FnZS4gCSovCisjZGVmaW5lIE5MTV9GX01VTFRJCQkyCS8qIE11bHRpcGFydCBtZXNzYWdlLCB0ZXJtaW5hdGVkIGJ5IE5MTVNHX0RPTkUgKi8KKyNkZWZpbmUgTkxNX0ZfQUNLCQk0CS8qIFJlcGx5IHdpdGggYWNrLCB3aXRoIHplcm8gb3IgZXJyb3IgY29kZSAqLworI2RlZmluZSBOTE1fRl9FQ0hPCQk4CS8qIEVjaG8gdGhpcyByZXF1ZXN0IAkJKi8KKworLyogTW9kaWZpZXJzIHRvIEdFVCByZXF1ZXN0ICovCisjZGVmaW5lIE5MTV9GX1JPT1QJMHgxMDAJLyogc3BlY2lmeSB0cmVlCXJvb3QJKi8KKyNkZWZpbmUgTkxNX0ZfTUFUQ0gJMHgyMDAJLyogcmV0dXJuIGFsbCBtYXRjaGluZwkqLworI2RlZmluZSBOTE1fRl9BVE9NSUMJMHg0MDAJLyogYXRvbWljIEdFVAkJKi8KKyNkZWZpbmUgTkxNX0ZfRFVNUAkoTkxNX0ZfUk9PVHxOTE1fRl9NQVRDSCkKKworLyogTW9kaWZpZXJzIHRvIE5FVyByZXF1ZXN0ICovCisjZGVmaW5lIE5MTV9GX1JFUExBQ0UJMHgxMDAJLyogT3ZlcnJpZGUgZXhpc3RpbmcJCSovCisjZGVmaW5lIE5MTV9GX0VYQ0wJMHgyMDAJLyogRG8gbm90IHRvdWNoLCBpZiBpdCBleGlzdHMJKi8KKyNkZWZpbmUgTkxNX0ZfQ1JFQVRFCTB4NDAwCS8qIENyZWF0ZSwgaWYgaXQgZG9lcyBub3QgZXhpc3QJKi8KKyNkZWZpbmUgTkxNX0ZfQVBQRU5ECTB4ODAwCS8qIEFkZCB0byBlbmQgb2YgbGlzdAkJKi8KKworLyoKKyAgIDQuNEJTRCBBREQJCU5MTV9GX0NSRUFURXxOTE1fRl9FWENMCisgICA0LjRCU0QgQ0hBTkdFCU5MTV9GX1JFUExBQ0UKKworICAgVHJ1ZSBDSEFOR0UJCU5MTV9GX0NSRUFURXxOTE1fRl9SRVBMQUNFCisgICBBcHBlbmQJCU5MTV9GX0NSRUFURQorICAgQ2hlY2sJCU5MTV9GX0VYQ0wKKyAqLworCisjZGVmaW5lIE5MTVNHX0FMSUdOVE8JNFUKKyNkZWZpbmUgTkxNU0dfQUxJR04obGVuKSAoICgobGVuKStOTE1TR19BTElHTlRPLTEpICYgfihOTE1TR19BTElHTlRPLTEpICkKKyNkZWZpbmUgTkxNU0dfSERSTEVOCSAoKGludCkgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBubG1zZ2hkcikpKQorI2RlZmluZSBOTE1TR19MRU5HVEgobGVuKSAoKGxlbikrTkxNU0dfQUxJR04oTkxNU0dfSERSTEVOKSkKKyNkZWZpbmUgTkxNU0dfU1BBQ0UobGVuKSBOTE1TR19BTElHTihOTE1TR19MRU5HVEgobGVuKSkKKyNkZWZpbmUgTkxNU0dfREFUQShubGgpICAoKHZvaWQqKSgoKGNoYXIqKW5saCkgKyBOTE1TR19MRU5HVEgoMCkpKQorI2RlZmluZSBOTE1TR19ORVhUKG5saCxsZW4pCSAoKGxlbikgLT0gTkxNU0dfQUxJR04oKG5saCktPm5sbXNnX2xlbiksIFwKKwkJCQkgIChzdHJ1Y3Qgbmxtc2doZHIqKSgoKGNoYXIqKShubGgpKSArIE5MTVNHX0FMSUdOKChubGgpLT5ubG1zZ19sZW4pKSkKKyNkZWZpbmUgTkxNU0dfT0sobmxoLGxlbikgKChsZW4pID49IChpbnQpc2l6ZW9mKHN0cnVjdCBubG1zZ2hkcikgJiYgXAorCQkJICAgKG5saCktPm5sbXNnX2xlbiA+PSBzaXplb2Yoc3RydWN0IG5sbXNnaGRyKSAmJiBcCisJCQkgICAobmxoKS0+bmxtc2dfbGVuIDw9IChsZW4pKQorI2RlZmluZSBOTE1TR19QQVlMT0FEKG5saCxsZW4pICgobmxoKS0+bmxtc2dfbGVuIC0gTkxNU0dfU1BBQ0UoKGxlbikpKQorCisjZGVmaW5lIE5MTVNHX05PT1AJCTB4MQkvKiBOb3RoaW5nLgkJKi8KKyNkZWZpbmUgTkxNU0dfRVJST1IJCTB4MgkvKiBFcnJvcgkJKi8KKyNkZWZpbmUgTkxNU0dfRE9ORQkJMHgzCS8qIEVuZCBvZiBhIGR1bXAJKi8KKyNkZWZpbmUgTkxNU0dfT1ZFUlJVTgkJMHg0CS8qIERhdGEgbG9zdAkJKi8KKworI2RlZmluZSBOTE1TR19NSU5fVFlQRQkJMHgxMAkvKiA8IDB4MTA6IHJlc2VydmVkIGNvbnRyb2wgbWVzc2FnZXMgKi8KKworc3RydWN0IG5sbXNnZXJyIHsKKwlpbnQJCWVycm9yOworCXN0cnVjdCBubG1zZ2hkciBtc2c7Cit9OworCisjZGVmaW5lIE5FVExJTktfQUREX01FTUJFUlNISVAJMQorI2RlZmluZSBORVRMSU5LX0RST1BfTUVNQkVSU0hJUAkyCisjZGVmaW5lIE5FVExJTktfUEtUSU5GTwkJMworI2RlZmluZSBORVRMSU5LX0JST0FEQ0FTVF9FUlJPUgk0CisjZGVmaW5lIE5FVExJTktfTk9fRU5PQlVGUwk1CisKK3N0cnVjdCBubF9wa3RpbmZvIHsKKwlfX3UzMglncm91cDsKK307CisKKyNkZWZpbmUgTkVUX01BSk9SIDM2CQkvKiBNYWpvciAzNiBpcyByZXNlcnZlZCBmb3IgbmV0d29ya2luZyAJCQkJCQkqLworCitlbnVtIHsKKwlORVRMSU5LX1VOQ09OTkVDVEVEID0gMCwKKwlORVRMSU5LX0NPTk5FQ1RFRCwKK307CisKKy8qCisgKiAgPC0tLS0tLS0gTkxBX0hEUkxFTiAtLS0tLS0+IDwtLSBOTEFfQUxJR04ocGF5bG9hZCktLT4KKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLSAtIC0rLSAtIC0gLSAtIC0gLSAtIC0gLSstIC0gLSsKKyAqIHwgICAgICAgIEhlYWRlciAgICAgICB8IFBhZCB8ICAgICBQYXlsb2FkICAgICAgIHwgUGFkIHwKKyAqIHwgICAoc3RydWN0IG5sYXR0cikgICB8IGluZyB8ICAgICAgICAgICAgICAgICAgIHwgaW5nIHwKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLSAtIC0rLSAtIC0gLSAtIC0gLSAtIC0gLSstIC0gLSsKKyAqICA8LS0tLS0tLS0tLS0tLS0gbmxhdHRyLT5ubGFfbGVuIC0tLS0tLS0tLS0tLS0tPgorICovCisKK3N0cnVjdCBubGF0dHIgeworCV9fdTE2ICAgICAgICAgICBubGFfbGVuOworCV9fdTE2ICAgICAgICAgICBubGFfdHlwZTsKK307CisKKy8qCisgKiBubGFfdHlwZSAoMTYgYml0cykKKyAqICstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiB8IE4gfCBPIHwgQXR0cmlidXRlIFR5cGUgICAgICAgICAgICAgICAgfAorICogKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqIE4gOj0gQ2FycmllcyBuZXN0ZWQgYXR0cmlidXRlcworICogTyA6PSBQYXlsb2FkIHN0b3JlZCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIKKyAqCisgKiBOb3RlOiBUaGUgTiBhbmQgTyBmbGFnIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCisgKi8KKyNkZWZpbmUgTkxBX0ZfTkVTVEVECQkoMSA8PCAxNSkKKyNkZWZpbmUgTkxBX0ZfTkVUX0JZVEVPUkRFUgkoMSA8PCAxNCkKKyNkZWZpbmUgTkxBX1RZUEVfTUFTSwkJfihOTEFfRl9ORVNURUQgfCBOTEFfRl9ORVRfQllURU9SREVSKQorCisjZGVmaW5lIE5MQV9BTElHTlRPCQk0CisjZGVmaW5lIE5MQV9BTElHTihsZW4pCQkoKChsZW4pICsgTkxBX0FMSUdOVE8gLSAxKSAmIH4oTkxBX0FMSUdOVE8gLSAxKSkKKyNkZWZpbmUgTkxBX0hEUkxFTgkJKChpbnQpIE5MQV9BTElHTihzaXplb2Yoc3RydWN0IG5sYXR0cikpKQorCisKKyNlbmRpZgkvKiBfX0xJTlVYX05FVExJTktfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldHJvbS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25ldHJvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MzliMzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmV0cm9tLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIFRoZXNlIGFyZSB0aGUgcHVibGljIGVsZW1lbnRzIG9mIHRoZSBMaW51eCBrZXJuZWwgTkVUL1JPTSBpbXBsZW1lbnRhdGlvbi4KKyAqIEZvciBrZXJuZWwgQVguMjUgc2VlIHRoZSBmaWxlIGF4MjUuaC4gVGhpcyBmaWxlIHJlcXVpcmVzIGF4MjUuaCBmb3IgdGhlCisgKiBkZWZpbml0aW9uIG9mIHRoZSBheDI1X2FkZHJlc3Mgc3RydWN0dXJlLgorICovCisKKyNpZm5kZWYJTkVUUk9NX0tFUk5FTF9ICisjZGVmaW5lCU5FVFJPTV9LRVJORUxfSAorCisjZGVmaW5lIE5FVFJPTV9NVFUJMjM2CisKKyNkZWZpbmUgTkVUUk9NX1QxCTEKKyNkZWZpbmUgTkVUUk9NX1QyCTIKKyNkZWZpbmUgTkVUUk9NX04yCTMKKyNkZWZpbmUJTkVUUk9NX1Q0CTYKKyNkZWZpbmUJTkVUUk9NX0lETEUJNworCisjZGVmaW5lCVNJT0NOUkRFQ09CUwkJKFNJT0NQUk9UT1BSSVZBVEUrMikKKworc3RydWN0IG5yX3JvdXRlX3N0cnVjdCB7CisjZGVmaW5lCU5FVFJPTV9ORUlHSAkwCisjZGVmaW5lCU5FVFJPTV9OT0RFCTEKKwlpbnQJCXR5cGU7CisJYXgyNV9hZGRyZXNzCWNhbGxzaWduOworCWNoYXIJCWRldmljZVsxNl07CisJdW5zaWduZWQgaW50CXF1YWxpdHk7CisJY2hhcgkJbW5lbW9uaWNbN107CisJYXgyNV9hZGRyZXNzCW5laWdoYm91cjsKKwl1bnNpZ25lZCBpbnQJb2JzX2NvdW50OworCXVuc2lnbmVkIGludAluZGlnaXM7CisJYXgyNV9hZGRyZXNzCWRpZ2lwZWF0ZXJzW0FYMjVfTUFYX0RJR0lTXTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25mcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZWFlODcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmZzLmgKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBORlMgcHJvdG9jb2wgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgY29uc3RhbnRzIG1vc3RseSBmb3IgVmVyc2lvbiAyIG9mIHRoZSBwcm90b2NvbCwKKyAqIGJ1dCBhbHNvIGhhcyBhIGNvdXBsZSBvZiBORlN2MyBiaXRzIGluIChub3RhYmx5IHRoZSBlcnJvciBjb2RlcykuCisgKi8KKyNpZm5kZWYgX0xJTlVYX05GU19ICisjZGVmaW5lIF9MSU5VWF9ORlNfSAorCisjZGVmaW5lIE5GU19QUk9HUkFNCTEwMDAwMworI2RlZmluZSBORlNfUE9SVAkyMDQ5CisjZGVmaW5lIE5GU19NQVhEQVRBCTgxOTIKKyNkZWZpbmUgTkZTX01BWFBBVEhMRU4JMTAyNAorI2RlZmluZSBORlNfTUFYTkFNTEVOCTI1NQorI2RlZmluZSBORlNfTUFYR1JPVVBTCTE2CisjZGVmaW5lIE5GU19GSFNJWkUJMzIKKyNkZWZpbmUgTkZTX0NPT0tJRVNJWkUJNAorI2RlZmluZSBORlNfRklGT19ERVYJKC0xKQorI2RlZmluZSBORlNNT0RFX0ZNVAkwMTcwMDAwCisjZGVmaW5lIE5GU01PREVfRElSCTAwNDAwMDAKKyNkZWZpbmUgTkZTTU9ERV9DSFIJMDAyMDAwMAorI2RlZmluZSBORlNNT0RFX0JMSwkwMDYwMDAwCisjZGVmaW5lIE5GU01PREVfUkVHCTAxMDAwMDAKKyNkZWZpbmUgTkZTTU9ERV9MTksJMDEyMDAwMAorI2RlZmluZSBORlNNT0RFX1NPQ0sJMDE0MDAwMAorI2RlZmluZSBORlNNT0RFX0ZJRk8JMDAxMDAwMAorCisjZGVmaW5lIE5GU19NTlRfUFJPR1JBTQkJMTAwMDA1CisjZGVmaW5lIE5GU19NTlRfVkVSU0lPTgkJMQorI2RlZmluZSBORlNfTU5UM19WRVJTSU9OCTMKKworLyoKKyAqIE5GUyBzdGF0cy4gVGhlIGdvb2QgdGhpbmcgd2l0aCB0aGVzZSB2YWx1ZXMgaXMgdGhhdCBORlN2MyBlcnJvcnMgYXJlCisgKiBhIHN1cGVyc2V0IG9mIE5GU3YyIGVycm9ycyAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIE5GU0VSUl9XRkxVU0ggd2hpY2gKKyAqIG5vLW9uZSB1c2VzIGFueXdheSksIHNvIHdlIGNhbiBoYXBwaWx5IG1peCBjb2RlIGFzIGxvbmcgYXMgd2UgbWFrZSBzdXJlCisgKiBubyBORlN2MyBlcnJvcnMgYXJlIHJldHVybmVkIHRvIE5GU3YyIGNsaWVudHMuCisgKiBFcnJvciBjb2RlcyB0aGF0IGhhdmUgYSBgLS0nIGluIHRoZSB2MiBjb2x1bW4gYXJlIG5vdCBwYXJ0IG9mIHRoZQorICogc3RhbmRhcmQsIGJ1dCBzZWVtIHRvIGJlIHdpZGVseSB1c2VkIG5ldmVydGhlbGVzcy4KKyAqLworIGVudW0gbmZzX3N0YXQgeworCU5GU19PSyA9IDAsCQkJLyogdjIgdjMgdjQgKi8KKwlORlNFUlJfUEVSTSA9IDEsCQkvKiB2MiB2MyB2NCAqLworCU5GU0VSUl9OT0VOVCA9IDIsCQkvKiB2MiB2MyB2NCAqLworCU5GU0VSUl9JTyA9IDUsCQkJLyogdjIgdjMgdjQgKi8KKwlORlNFUlJfTlhJTyA9IDYsCQkvKiB2MiB2MyB2NCAqLworCU5GU0VSUl9FQUdBSU4gPSAxMSwJCS8qIHYyIHYzICovCisJTkZTRVJSX0FDQ0VTID0gMTMsCQkvKiB2MiB2MyB2NCAqLworCU5GU0VSUl9FWElTVCA9IDE3LAkJLyogdjIgdjMgdjQgKi8KKwlORlNFUlJfWERFViA9IDE4LAkJLyogICAgdjMgdjQgKi8KKwlORlNFUlJfTk9ERVYgPSAxOSwJCS8qIHYyIHYzIHY0ICovCisJTkZTRVJSX05PVERJUiA9IDIwLAkJLyogdjIgdjMgdjQgKi8KKwlORlNFUlJfSVNESVIgPSAyMSwJCS8qIHYyIHYzIHY0ICovCisJTkZTRVJSX0lOVkFMID0gMjIsCQkvKiB2MiB2MyB2NCAqLworCU5GU0VSUl9GQklHID0gMjcsCQkvKiB2MiB2MyB2NCAqLworCU5GU0VSUl9OT1NQQyA9IDI4LAkJLyogdjIgdjMgdjQgKi8KKwlORlNFUlJfUk9GUyA9IDMwLAkJLyogdjIgdjMgdjQgKi8KKwlORlNFUlJfTUxJTksgPSAzMSwJCS8qICAgIHYzIHY0ICovCisJTkZTRVJSX09QTk9UU1VQUCA9IDQ1LAkJLyogdjIgdjMgKi8KKwlORlNFUlJfTkFNRVRPT0xPTkcgPSA2MywJLyogdjIgdjMgdjQgKi8KKwlORlNFUlJfTk9URU1QVFkgPSA2NiwJCS8qIHYyIHYzIHY0ICovCisJTkZTRVJSX0RRVU9UID0gNjksCQkvKiB2MiB2MyB2NCAqLworCU5GU0VSUl9TVEFMRSA9IDcwLAkJLyogdjIgdjMgdjQgKi8KKwlORlNFUlJfUkVNT1RFID0gNzEsCQkvKiB2MiB2MyAqLworCU5GU0VSUl9XRkxVU0ggPSA5OSwJCS8qIHYyICAgICovCisJTkZTRVJSX0JBREhBTkRMRSA9IDEwMDAxLAkvKiAgICB2MyB2NCAqLworCU5GU0VSUl9OT1RfU1lOQyA9IDEwMDAyLAkvKiAgICB2MyAqLworCU5GU0VSUl9CQURfQ09PS0lFID0gMTAwMDMsCS8qICAgIHYzIHY0ICovCisJTkZTRVJSX05PVFNVUFAgPSAxMDAwNCwJCS8qICAgIHYzIHY0ICovCisJTkZTRVJSX1RPT1NNQUxMID0gMTAwMDUsCS8qICAgIHYzIHY0ICovCisJTkZTRVJSX1NFUlZFUkZBVUxUID0gMTAwMDYsCS8qICAgIHYzIHY0ICovCisJTkZTRVJSX0JBRFRZUEUgPSAxMDAwNywJCS8qICAgIHYzIHY0ICovCisJTkZTRVJSX0pVS0VCT1ggPSAxMDAwOCwJCS8qICAgIHYzIHY0ICovCisJTkZTRVJSX1NBTUUgPSAxMDAwOSwJCS8qICAgICAgIHY0ICovCisJTkZTRVJSX0RFTklFRCA9IDEwMDEwLAkJLyogICAgICAgdjQgKi8KKwlORlNFUlJfRVhQSVJFRCA9IDEwMDExLAkJLyogICAgICAgdjQgKi8KKwlORlNFUlJfTE9DS0VEID0gMTAwMTIsCQkvKiAgICAgICB2NCAqLworCU5GU0VSUl9HUkFDRSA9IDEwMDEzLAkJLyogICAgICAgdjQgKi8KKwlORlNFUlJfRkhFWFBJUkVEID0gMTAwMTQsCS8qICAgICAgIHY0ICovCisJTkZTRVJSX1NIQVJFX0RFTklFRCA9IDEwMDE1LAkvKiAgICAgICB2NCAqLworCU5GU0VSUl9XUk9OR1NFQyA9IDEwMDE2LAkvKiAgICAgICB2NCAqLworCU5GU0VSUl9DTElEX0lOVVNFID0gMTAwMTcsCS8qICAgICAgIHY0ICovCisJTkZTRVJSX1JFU09VUkNFID0gMTAwMTgsCS8qICAgICAgIHY0ICovCisJTkZTRVJSX01PVkVEID0gMTAwMTksCQkvKiAgICAgICB2NCAqLworCU5GU0VSUl9OT0ZJTEVIQU5ETEUgPSAxMDAyMCwJLyogICAgICAgdjQgKi8KKwlORlNFUlJfTUlOT1JfVkVSU19NSVNNQVRDSCA9IDEwMDIxLCAgIC8qIHY0ICovCisJTkZTRVJSX1NUQUxFX0NMSUVOVElEID0gMTAwMjIsCS8qICAgICAgIHY0ICovCisJTkZTRVJSX1NUQUxFX1NUQVRFSUQgPSAxMDAyMywgICAvKiAgICAgICB2NCAqLworCU5GU0VSUl9PTERfU1RBVEVJRCA9IDEwMDI0LCAgICAgLyogICAgICAgdjQgKi8KKwlORlNFUlJfQkFEX1NUQVRFSUQgPSAxMDAyNSwgICAgIC8qICAgICAgIHY0ICovICAKKwlORlNFUlJfQkFEX1NFUUlEID0gMTAwMjYsCS8qICAgICAgIHY0ICovCisJTkZTRVJSX05PVF9TQU1FID0gMTAwMjcsCS8qICAgICAgIHY0ICovCisJTkZTRVJSX0xPQ0tfUkFOR0UgPSAxMDAyOCwJLyogICAgICAgdjQgKi8KKwlORlNFUlJfU1lNTElOSyA9IDEwMDI5LAkJLyogICAgICAgdjQgKi8KKwlORlNFUlJfUkVTVE9SRUZIID0gMTAwMzAsCS8qICAgICAgIHY0ICovCisJTkZTRVJSX0xFQVNFX01PVkVEID0gMTAwMzEsCS8qICAgICAgIHY0ICovCisJTkZTRVJSX0FUVFJOT1RTVVBQID0gMTAwMzIsCS8qICAgICAgIHY0ICovCisJTkZTRVJSX05PX0dSQUNFID0gMTAwMzMsCS8qICAgICAgIHY0ICovCisJTkZTRVJSX1JFQ0xBSU1fQkFEID0gMTAwMzQsCS8qICAgICAgIHY0ICovCisJTkZTRVJSX1JFQ0xBSU1fQ09ORkxJQ1QgPSAxMDAzNSwvKiAgICAgICB2NCAqLworCU5GU0VSUl9CQURfWERSID0gMTAwMzYsCQkvKiAgICAgICB2NCAqLworCU5GU0VSUl9MT0NLU19IRUxEID0gMTAwMzcsCS8qICAgICAgIHY0ICovCisJTkZTRVJSX09QRU5NT0RFID0gMTAwMzgsICAgICAgIC8qICAgICAgIHY0ICovCisJTkZTRVJSX0JBRE9XTkVSID0gMTAwMzksICAgICAgIC8qICAgICAgIHY0ICovCisJTkZTRVJSX0JBRENIQVIgPSAxMDA0MCwgICAgICAgIC8qICAgICAgIHY0ICovCisJTkZTRVJSX0JBRE5BTUUgPSAxMDA0MSwgICAgICAgIC8qICAgICAgIHY0ICovCisJTkZTRVJSX0JBRF9SQU5HRSA9IDEwMDQyLCAgICAgIC8qICAgICAgIHY0ICovCisJTkZTRVJSX0xPQ0tfTk9UU1VQUCA9IDEwMDQzLCAgIC8qICAgICAgIHY0ICovCisJTkZTRVJSX09QX0lMTEVHQUwgPSAxMDA0NCwgICAgIC8qICAgICAgIHY0ICovCisJTkZTRVJSX0RFQURMT0NLID0gMTAwNDUsICAgICAgIC8qICAgICAgIHY0ICovCisJTkZTRVJSX0ZJTEVfT1BFTiA9IDEwMDQ2LCAgICAgIC8qICAgICAgIHY0ICovCisJTkZTRVJSX0FETUlOX1JFVk9LRUQgPSAxMDA0NywgIC8qICAgICAgIHY0ICovCisJTkZTRVJSX0NCX1BBVEhfRE9XTiA9IDEwMDQ4LCAgIC8qICAgICAgIHY0ICovCit9OworCisvKiBORlN2MiBmaWxlIHR5cGVzIC0gYmV3YXJlLCB0aGVzZSBhcmUgbm90IHRoZSBzYW1lIGluIE5GU3YzICovCisKK2VudW0gbmZzX2Z0eXBlIHsKKwlORk5PTiA9IDAsCisJTkZSRUcgPSAxLAorCU5GRElSID0gMiwKKwlORkJMSyA9IDMsCisJTkZDSFIgPSA0LAorCU5GTE5LID0gNSwKKwlORlNPQ0sgPSA2LAorCU5GQkFEID0gNywKKwlORkZJRk8gPSA4Cit9OworCisjZW5kaWYgLyogX0xJTlVYX05GU19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmZzMi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25mczIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGUyNGIzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25mczIuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogTkZTIHByb3RvY29sIGRlZmluaXRpb25zCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGNvbnN0YW50cyBmb3IgVmVyc2lvbiAyIG9mIHRoZSBwcm90b2NvbC4KKyAqLworI2lmbmRlZiBfTElOVVhfTkZTMl9ICisjZGVmaW5lIF9MSU5VWF9ORlMyX0gKKworI2RlZmluZSBORlMyX1BPUlQJMjA0OQorI2RlZmluZSBORlMyX01BWERBVEEJODE5MgorI2RlZmluZSBORlMyX01BWFBBVEhMRU4JMTAyNAorI2RlZmluZSBORlMyX01BWE5BTUxFTgkyNTUKKyNkZWZpbmUgTkZTMl9NQVhHUk9VUFMJMTYKKyNkZWZpbmUgTkZTMl9GSFNJWkUJMzIKKyNkZWZpbmUgTkZTMl9DT09LSUVTSVpFCTQKKyNkZWZpbmUgTkZTMl9GSUZPX0RFVgkoLTEpCisjZGVmaW5lIE5GUzJNT0RFX0ZNVAkwMTcwMDAwCisjZGVmaW5lIE5GUzJNT0RFX0RJUgkwMDQwMDAwCisjZGVmaW5lIE5GUzJNT0RFX0NIUgkwMDIwMDAwCisjZGVmaW5lIE5GUzJNT0RFX0JMSwkwMDYwMDAwCisjZGVmaW5lIE5GUzJNT0RFX1JFRwkwMTAwMDAwCisjZGVmaW5lIE5GUzJNT0RFX0xOSwkwMTIwMDAwCisjZGVmaW5lIE5GUzJNT0RFX1NPQ0sJMDE0MDAwMAorI2RlZmluZSBORlMyTU9ERV9GSUZPCTAwMTAwMDAKKworCisvKiBORlN2MiBmaWxlIHR5cGVzIC0gYmV3YXJlLCB0aGVzZSBhcmUgbm90IHRoZSBzYW1lIGluIE5GU3YzICovCitlbnVtIG5mczJfZnR5cGUgeworCU5GMk5PTiA9IDAsCisJTkYyUkVHID0gMSwKKwlORjJESVIgPSAyLAorCU5GMkJMSyA9IDMsCisJTkYyQ0hSID0gNCwKKwlORjJMTksgPSA1LAorCU5GMlNPQ0sgPSA2LAorCU5GMkJBRCA9IDcsCisJTkYyRklGTyA9IDgKK307CisKK3N0cnVjdCBuZnMyX2ZoIHsKKwljaGFyCQkJZGF0YVtORlMyX0ZIU0laRV07Cit9OworCisvKgorICogUHJvY2VkdXJlIG51bWJlcnMgZm9yIE5GU3YyCisgKi8KKyNkZWZpbmUgTkZTMl9WRVJTSU9OCQkyCisjZGVmaW5lIE5GU1BST0NfTlVMTAkJMAorI2RlZmluZSBORlNQUk9DX0dFVEFUVFIJCTEKKyNkZWZpbmUgTkZTUFJPQ19TRVRBVFRSCQkyCisjZGVmaW5lIE5GU1BST0NfUk9PVAkJMworI2RlZmluZSBORlNQUk9DX0xPT0tVUAkJNAorI2RlZmluZSBORlNQUk9DX1JFQURMSU5LCTUKKyNkZWZpbmUgTkZTUFJPQ19SRUFECQk2CisjZGVmaW5lIE5GU1BST0NfV1JJVEVDQUNIRQk3CisjZGVmaW5lIE5GU1BST0NfV1JJVEUJCTgKKyNkZWZpbmUgTkZTUFJPQ19DUkVBVEUJCTkKKyNkZWZpbmUgTkZTUFJPQ19SRU1PVkUJCTEwCisjZGVmaW5lIE5GU1BST0NfUkVOQU1FCQkxMQorI2RlZmluZSBORlNQUk9DX0xJTksJCTEyCisjZGVmaW5lIE5GU1BST0NfU1lNTElOSwkJMTMKKyNkZWZpbmUgTkZTUFJPQ19NS0RJUgkJMTQKKyNkZWZpbmUgTkZTUFJPQ19STURJUgkJMTUKKyNkZWZpbmUgTkZTUFJPQ19SRUFERElSCQkxNgorI2RlZmluZSBORlNQUk9DX1NUQVRGUwkJMTcKKworI2VuZGlmIC8qIF9MSU5VWF9ORlMyX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZnMzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmZzMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZmE2MmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmZzMy5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBORlN2MyBwcm90b2NvbCBkZWZpbml0aW9ucworICovCisjaWZuZGVmIF9MSU5VWF9ORlMzX0gKKyNkZWZpbmUgX0xJTlVYX05GUzNfSAorCisjZGVmaW5lIE5GUzNfUE9SVAkJMjA0OQorI2RlZmluZSBORlMzX01BWERBVEEJCTMyNzY4CisjZGVmaW5lIE5GUzNfTUFYUEFUSExFTgkJUEFUSF9NQVgKKyNkZWZpbmUgTkZTM19NQVhOQU1MRU4JCU5BTUVfTUFYCisjZGVmaW5lIE5GUzNfTUFYR1JPVVBTCQkxNgorI2RlZmluZSBORlMzX0ZIU0laRQkJNjQKKyNkZWZpbmUgTkZTM19DT09LSUVTSVpFCQk0CisjZGVmaW5lIE5GUzNfRklGT19ERVYJCSgtMSkKKyNkZWZpbmUgTkZTM01PREVfRk1UCQkwMTcwMDAwCisjZGVmaW5lIE5GUzNNT0RFX0RJUgkJMDA0MDAwMAorI2RlZmluZSBORlMzTU9ERV9DSFIJCTAwMjAwMDAKKyNkZWZpbmUgTkZTM01PREVfQkxLCQkwMDYwMDAwCisjZGVmaW5lIE5GUzNNT0RFX1JFRwkJMDEwMDAwMAorI2RlZmluZSBORlMzTU9ERV9MTksJCTAxMjAwMDAKKyNkZWZpbmUgTkZTM01PREVfU09DSwkJMDE0MDAwMAorI2RlZmluZSBORlMzTU9ERV9GSUZPCQkwMDEwMDAwCisKKy8qIEZsYWdzIGZvciBhY2Nlc3MoKSBjYWxsICovCisjZGVmaW5lIE5GUzNfQUNDRVNTX1JFQUQJMHgwMDAxCisjZGVmaW5lIE5GUzNfQUNDRVNTX0xPT0tVUAkweDAwMDIKKyNkZWZpbmUgTkZTM19BQ0NFU1NfTU9ESUZZCTB4MDAwNAorI2RlZmluZSBORlMzX0FDQ0VTU19FWFRFTkQJMHgwMDA4CisjZGVmaW5lIE5GUzNfQUNDRVNTX0RFTEVURQkweDAwMTAKKyNkZWZpbmUgTkZTM19BQ0NFU1NfRVhFQ1VURQkweDAwMjAKKyNkZWZpbmUgTkZTM19BQ0NFU1NfRlVMTAkweDAwM2YKKworLyogRmxhZ3MgZm9yIGNyZWF0ZSBtb2RlICovCitlbnVtIG5mczNfY3JlYXRlbW9kZSB7CisJTkZTM19DUkVBVEVfVU5DSEVDS0VEID0gMCwKKwlORlMzX0NSRUFURV9HVUFSREVEID0gMSwKKwlORlMzX0NSRUFURV9FWENMVVNJVkUgPSAyCit9OworCisvKiBORlN2MyBmaWxlIHN5c3RlbSBwcm9wZXJ0aWVzICovCisjZGVmaW5lIE5GUzNfRlNGX0xJTksJCTB4MDAwMQorI2RlZmluZSBORlMzX0ZTRl9TWU1MSU5LCTB4MDAwMgorI2RlZmluZSBORlMzX0ZTRl9IT01PR0VORU9VUwkweDAwMDgKKyNkZWZpbmUgTkZTM19GU0ZfQ0FOU0VUVElNRQkweDAwMTAKKy8qIFNvbWUgc2hvcnRoYW5kcy4gU2VlIGZzL25mc2QvbmZzM3Byb2MuYyAqLworI2RlZmluZSBORlMzX0ZTRl9ERUZBVUxUCTB4MDAxQgorI2RlZmluZSBORlMzX0ZTRl9CSUxMWUJPWQkweDAwMTgKKyNkZWZpbmUgTkZTM19GU0ZfUkVBRE9OTFkJMHgwMDA4CisKK2VudW0gbmZzM19mdHlwZSB7CisJTkYzTk9OICA9IDAsCisJTkYzUkVHICA9IDEsCisJTkYzRElSICA9IDIsCisJTkYzQkxLICA9IDMsCisJTkYzQ0hSICA9IDQsCisJTkYzTE5LICA9IDUsCisJTkYzU09DSyA9IDYsCisJTkYzRklGTyA9IDcsCS8qIGNoYW5nZWQgZnJvbSBORlN2MiAod2FzIDgpICovCisJTkYzQkFEICA9IDgKK307CisKK3N0cnVjdCBuZnMzX2ZoIHsKKwl1bnNpZ25lZCBzaG9ydCBzaXplOworCXVuc2lnbmVkIGNoYXIgIGRhdGFbTkZTM19GSFNJWkVdOworfTsKKworI2RlZmluZSBORlMzX1ZFUlNJT04JCTMKKyNkZWZpbmUgTkZTM1BST0NfTlVMTAkJMAorI2RlZmluZSBORlMzUFJPQ19HRVRBVFRSCTEKKyNkZWZpbmUgTkZTM1BST0NfU0VUQVRUUgkyCisjZGVmaW5lIE5GUzNQUk9DX0xPT0tVUAkJMworI2RlZmluZSBORlMzUFJPQ19BQ0NFU1MJCTQKKyNkZWZpbmUgTkZTM1BST0NfUkVBRExJTksJNQorI2RlZmluZSBORlMzUFJPQ19SRUFECQk2CisjZGVmaW5lIE5GUzNQUk9DX1dSSVRFCQk3CisjZGVmaW5lIE5GUzNQUk9DX0NSRUFURQkJOAorI2RlZmluZSBORlMzUFJPQ19NS0RJUgkJOQorI2RlZmluZSBORlMzUFJPQ19TWU1MSU5LCTEwCisjZGVmaW5lIE5GUzNQUk9DX01LTk9ECQkxMQorI2RlZmluZSBORlMzUFJPQ19SRU1PVkUJCTEyCisjZGVmaW5lIE5GUzNQUk9DX1JNRElSCQkxMworI2RlZmluZSBORlMzUFJPQ19SRU5BTUUJCTE0CisjZGVmaW5lIE5GUzNQUk9DX0xJTksJCTE1CisjZGVmaW5lIE5GUzNQUk9DX1JFQURESVIJMTYKKyNkZWZpbmUgTkZTM1BST0NfUkVBRERJUlBMVVMJMTcKKyNkZWZpbmUgTkZTM1BST0NfRlNTVEFUCQkxOAorI2RlZmluZSBORlMzUFJPQ19GU0lORk8JCTE5CisjZGVmaW5lIE5GUzNQUk9DX1BBVEhDT05GCTIwCisjZGVmaW5lIE5GUzNQUk9DX0NPTU1JVAkJMjEKKworI2RlZmluZSBORlNfTU5UM19WRVJTSU9OCTMKKyAKKworI2VuZGlmIC8qIF9MSU5VWF9ORlMzX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZnM0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmZzNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYmU4ODUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmZzNC5oCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogIGluY2x1ZGUvbGludXgvbmZzNC5oCisgKgorICogIE5GU3Y0IHByb3RvY29sIGRlZmluaXRpb25zLgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDIgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgTWljaGlnYW4uCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgS2VuZHJpY2sgU21pdGggPGttc21pdGhAdW1pY2guZWR1PgorICogIEFuZHkgQWRhbXNvbiAgIDxhbmRyb3NAdW1pY2guZWR1PgorICovCisKKyNpZm5kZWYgX0xJTlVYX05GUzRfSAorI2RlZmluZSBfTElOVVhfTkZTNF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIE5GUzRfQklUTUFQX1NJWkUJMgorI2RlZmluZSBORlM0X1ZFUklGSUVSX1NJWkUJOAorI2RlZmluZSBORlM0X1NUQVRFSURfU0VRSURfU0laRSA0CisjZGVmaW5lIE5GUzRfU1RBVEVJRF9PVEhFUl9TSVpFIDEyCisjZGVmaW5lIE5GUzRfU1RBVEVJRF9TSVpFCShORlM0X1NUQVRFSURfU0VRSURfU0laRSArIE5GUzRfU1RBVEVJRF9PVEhFUl9TSVpFKQorI2RlZmluZSBORlM0X0ZIU0laRQkJMTI4CisjZGVmaW5lIE5GUzRfTUFYUEFUSExFTgkJUEFUSF9NQVgKKyNkZWZpbmUgTkZTNF9NQVhOQU1MRU4JCU5BTUVfTUFYCisjZGVmaW5lIE5GUzRfT1BBUVVFX0xJTUlUCTEwMjQKKyNkZWZpbmUgTkZTNF9NQVhfU0VTU0lPTklEX0xFTgkxNgorCisjZGVmaW5lIE5GUzRfQUNDRVNTX1JFQUQgICAgICAgIDB4MDAwMQorI2RlZmluZSBORlM0X0FDQ0VTU19MT09LVVAgICAgICAweDAwMDIKKyNkZWZpbmUgTkZTNF9BQ0NFU1NfTU9ESUZZICAgICAgMHgwMDA0CisjZGVmaW5lIE5GUzRfQUNDRVNTX0VYVEVORCAgICAgIDB4MDAwOAorI2RlZmluZSBORlM0X0FDQ0VTU19ERUxFVEUgICAgICAweDAwMTAKKyNkZWZpbmUgTkZTNF9BQ0NFU1NfRVhFQ1VURSAgICAgMHgwMDIwCisKKyNkZWZpbmUgTkZTNF9GSF9QRVJTSVNURU5UCQkweDAwMDAKKyNkZWZpbmUgTkZTNF9GSF9OT0VYUElSRV9XSVRIX09QRU4JMHgwMDAxCisjZGVmaW5lIE5GUzRfRkhfVk9MQVRJTEVfQU5ZCQkweDAwMDIKKyNkZWZpbmUgTkZTNF9GSF9WT0xfTUlHUkFUSU9OCQkweDAwMDQKKyNkZWZpbmUgTkZTNF9GSF9WT0xfUkVOQU1FCQkweDAwMDgKKworI2RlZmluZSBORlM0X09QRU5fUkVTVUxUX0NPTkZJUk0gMHgwMDAyCisjZGVmaW5lIE5GUzRfT1BFTl9SRVNVTFRfTE9DS1RZUEVfUE9TSVggMHgwMDA0CisKKyNkZWZpbmUgTkZTNF9TSEFSRV9BQ0NFU1NfTUFTSwkweDAwMEYKKyNkZWZpbmUgTkZTNF9TSEFSRV9BQ0NFU1NfUkVBRAkweDAwMDEKKyNkZWZpbmUgTkZTNF9TSEFSRV9BQ0NFU1NfV1JJVEUJMHgwMDAyCisjZGVmaW5lIE5GUzRfU0hBUkVfQUNDRVNTX0JPVEgJMHgwMDAzCisjZGVmaW5lIE5GUzRfU0hBUkVfREVOWV9SRUFECTB4MDAwMQorI2RlZmluZSBORlM0X1NIQVJFX0RFTllfV1JJVEUJMHgwMDAyCisjZGVmaW5lIE5GUzRfU0hBUkVfREVOWV9CT1RICTB4MDAwMworCisvKiBuZnM0MSAqLworI2RlZmluZSBORlM0X1NIQVJFX1dBTlRfTUFTSwkJMHhGRjAwCisjZGVmaW5lIE5GUzRfU0hBUkVfV0FOVF9OT19QUkVGRVJFTkNFCTB4MDAwMAorI2RlZmluZSBORlM0X1NIQVJFX1dBTlRfUkVBRF9ERUxFRwkweDAxMDAKKyNkZWZpbmUgTkZTNF9TSEFSRV9XQU5UX1dSSVRFX0RFTEVHCTB4MDIwMAorI2RlZmluZSBORlM0X1NIQVJFX1dBTlRfQU5ZX0RFTEVHCTB4MDMwMAorI2RlZmluZSBORlM0X1NIQVJFX1dBTlRfTk9fREVMRUcJMHgwNDAwCisjZGVmaW5lIE5GUzRfU0hBUkVfV0FOVF9DQU5DRUwJCTB4MDUwMAorCisjZGVmaW5lIE5GUzRfU0hBUkVfV0hFTl9NQVNLCQkweEYwMDAwCisjZGVmaW5lIE5GUzRfU0hBUkVfU0lHTkFMX0RFTEVHX1dIRU5fUkVTUkNfQVZBSUwJMHgxMDAwMAorI2RlZmluZSBORlM0X1NIQVJFX1BVU0hfREVMRUdfV0hFTl9VTkNPTlRFTkRFRAkJMHgyMDAwMAorCisjZGVmaW5lIE5GUzRfQ0RGQzRfRk9SRQkweDEKKyNkZWZpbmUgTkZTNF9DREZDNF9CQUNLIDB4MgorCisjZGVmaW5lIE5GUzRfU0VUX1RPX1NFUlZFUl9USU1FCTAKKyNkZWZpbmUgTkZTNF9TRVRfVE9fQ0xJRU5UX1RJTUUJMQorCisjZGVmaW5lIE5GUzRfQUNFX0FDQ0VTU19BTExPV0VEX0FDRV9UWVBFIDAKKyNkZWZpbmUgTkZTNF9BQ0VfQUNDRVNTX0RFTklFRF9BQ0VfVFlQRSAgMQorI2RlZmluZSBORlM0X0FDRV9TWVNURU1fQVVESVRfQUNFX1RZUEUgICAyCisjZGVmaW5lIE5GUzRfQUNFX1NZU1RFTV9BTEFSTV9BQ0VfVFlQRSAgIDMKKworI2RlZmluZSBBQ0w0X1NVUFBPUlRfQUxMT1dfQUNMIDB4MDEKKyNkZWZpbmUgQUNMNF9TVVBQT1JUX0RFTllfQUNMICAweDAyCisjZGVmaW5lIEFDTDRfU1VQUE9SVF9BVURJVF9BQ0wgMHgwNAorI2RlZmluZSBBQ0w0X1NVUFBPUlRfQUxBUk1fQUNMIDB4MDgKKworI2RlZmluZSBORlM0X0FDRV9GSUxFX0lOSEVSSVRfQUNFICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTkZTNF9BQ0VfRElSRUNUT1JZX0lOSEVSSVRfQUNFICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIE5GUzRfQUNFX05PX1BST1BBR0FURV9JTkhFUklUX0FDRSAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBORlM0X0FDRV9JTkhFUklUX09OTFlfQUNFICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgTkZTNF9BQ0VfU1VDQ0VTU0ZVTF9BQ0NFU1NfQUNFX0ZMQUcgICAweDAwMDAwMDEwCisjZGVmaW5lIE5GUzRfQUNFX0ZBSUxFRF9BQ0NFU1NfQUNFX0ZMQUcgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBORlM0X0FDRV9JREVOVElGSUVSX0dST1VQICAgICAgICAgICAgIDB4MDAwMDAwNDAKKworI2RlZmluZSBORlM0X0FDRV9SRUFEX0RBVEEgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTkZTNF9BQ0VfTElTVF9ESVJFQ1RPUlkgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE5GUzRfQUNFX1dSSVRFX0RBVEEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBORlM0X0FDRV9BRERfRklMRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTkZTNF9BQ0VfQVBQRU5EX0RBVEEgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIE5GUzRfQUNFX0FERF9TVUJESVJFQ1RPUlkgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBORlM0X0FDRV9SRUFEX05BTUVEX0FUVFJTICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgTkZTNF9BQ0VfV1JJVEVfTkFNRURfQVRUUlMgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIE5GUzRfQUNFX0VYRUNVVEUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBORlM0X0FDRV9ERUxFVEVfQ0hJTEQgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgTkZTNF9BQ0VfUkVBRF9BVFRSSUJVVEVTICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIE5GUzRfQUNFX1dSSVRFX0FUVFJJQlVURVMgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBORlM0X0FDRV9ERUxFVEUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgTkZTNF9BQ0VfUkVBRF9BQ0wgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIE5GUzRfQUNFX1dSSVRFX0FDTCAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBORlM0X0FDRV9XUklURV9PV05FUiAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgTkZTNF9BQ0VfU1lOQ0hST05JWkUgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIE5GUzRfQUNFX0dFTkVSSUNfUkVBRCAgICAgICAgICAgICAgICAgMHgwMDEyMDA4MQorI2RlZmluZSBORlM0X0FDRV9HRU5FUklDX1dSSVRFICAgICAgICAgICAgICAgIDB4MDAxNjAxMDYKKyNkZWZpbmUgTkZTNF9BQ0VfR0VORVJJQ19FWEVDVVRFICAgICAgICAgICAgICAweDAwMTIwMEEwCisjZGVmaW5lIE5GUzRfQUNFX01BU0tfQUxMICAgICAgICAgICAgICAgICAgICAgMHgwMDFGMDFGRgorCisjZGVmaW5lIEVYQ0hHSUQ0X0ZMQUdfU1VQUF9NT1ZFRF9SRUZFUgkJMHgwMDAwMDAwMQorI2RlZmluZSBFWENIR0lENF9GTEFHX1NVUFBfTU9WRURfTUlHUgkJMHgwMDAwMDAwMgorI2RlZmluZSBFWENIR0lENF9GTEFHX1VTRV9OT05fUE5GUwkJMHgwMDAxMDAwMAorI2RlZmluZSBFWENIR0lENF9GTEFHX1VTRV9QTkZTX01EUwkJMHgwMDAyMDAwMAorI2RlZmluZSBFWENIR0lENF9GTEFHX1VTRV9QTkZTX0RTCQkweDAwMDQwMDAwCisjZGVmaW5lIEVYQ0hHSUQ0X0ZMQUdfVVBEX0NPTkZJUk1FRF9SRUNfQQkweDQwMDAwMDAwCisjZGVmaW5lIEVYQ0hHSUQ0X0ZMQUdfQ09ORklSTUVEX1IJCTB4ODAwMDAwMDAKKy8qCisgKiBTaW5jZSB0aGUgdmFsaWRpdHkgb2YgdGhlc2UgYml0cyBkZXBlbmRzIG9uIHdoZXRoZXIKKyAqIHRoZXkncmUgc2V0IGluIHRoZSBhcmd1bWVudCBvciByZXNwb25zZSwgaGF2ZSBzZXBhcmF0ZQorICogaW52YWxpZCBmbGFnIG1hc2tzIGZvciBhcmcgKF9BKSBhbmQgcmVzcCAoX1IpLgorICovCisjZGVmaW5lIEVYQ0hHSUQ0X0ZMQUdfTUFTS19BCQkJMHg0MDA3MDAwMworI2RlZmluZSBFWENIR0lENF9GTEFHX01BU0tfUgkJCTB4ODAwNzAwMDMKKworI2RlZmluZSBTRVE0X1NUQVRVU19DQl9QQVRIX0RPV04JCTB4MDAwMDAwMDEKKyNkZWZpbmUgU0VRNF9TVEFUVVNfQ0JfR1NTX0NPTlRFWFRTX0VYUElSSU5HCTB4MDAwMDAwMDIKKyNkZWZpbmUgU0VRNF9TVEFUVVNfQ0JfR1NTX0NPTlRFWFRTX0VYUElSRUQJMHgwMDAwMDAwNAorI2RlZmluZSBTRVE0X1NUQVRVU19FWFBJUkVEX0FMTF9TVEFURV9SRVZPS0VECTB4MDAwMDAwMDgKKyNkZWZpbmUgU0VRNF9TVEFUVVNfRVhQSVJFRF9TT01FX1NUQVRFX1JFVk9LRUQJMHgwMDAwMDAxMAorI2RlZmluZSBTRVE0X1NUQVRVU19BRE1JTl9TVEFURV9SRVZPS0VECQkweDAwMDAwMDIwCisjZGVmaW5lIFNFUTRfU1RBVFVTX1JFQ0FMTEFCTEVfU1RBVEVfUkVWT0tFRAkweDAwMDAwMDQwCisjZGVmaW5lIFNFUTRfU1RBVFVTX0xFQVNFX01PVkVECQkJMHgwMDAwMDA4MAorI2RlZmluZSBTRVE0X1NUQVRVU19SRVNUQVJUX1JFQ0xBSU1fTkVFREVECTB4MDAwMDAxMDAKKyNkZWZpbmUgU0VRNF9TVEFUVVNfQ0JfUEFUSF9ET1dOX1NFU1NJT04JMHgwMDAwMDIwMAorI2RlZmluZSBTRVE0X1NUQVRVU19CQUNLQ0hBTk5FTF9GQVVMVAkJMHgwMDAwMDQwMAorCisjZGVmaW5lIE5GUzRfTUFYX1VJTlQ2NAkofih1NjQpMCkKKworLyogQW4gTkZTNCBzZXNzaW9ucyBzZXJ2ZXIgbXVzdCBzdXBwb3J0IGF0IGxlYXN0IE5GUzRfTUFYX09QUyBvcGVyYXRpb25zLgorICogSWYgYSBjb21wb3VuZCByZXF1aXJlcyBtb3JlIG9wZXJhdGlvbnMsIGFkanVzdCBORlM0X01BWF9PUFMgYWNjb3JkaW5nbHkuCisgKi8KKyNkZWZpbmUgTkZTNF9NQVhfT1BTICAgOAorCisvKiBPdXIgTkZTNCBjbGllbnQgYmFjayBjaGFubmVsIHNlcnZlciBvbmx5IHdhbnRzIHRoZSBjYl9zZXF1ZW5lIGFuZCB0aGUKKyAqIGFjdHVhbCBvcGVyYXRpb24gcGVyIGNvbXBvdW5kCisgKi8KKyNkZWZpbmUgTkZTNF9NQVhfQkFDS19DSEFOTkVMX09QUyAyCisKK2VudW0gbmZzNF9hY2xfd2hvdHlwZSB7CisJTkZTNF9BQ0xfV0hPX05BTUVEID0gMCwKKwlORlM0X0FDTF9XSE9fT1dORVIsCisJTkZTNF9BQ0xfV0hPX0dST1VQLAorCU5GUzRfQUNMX1dIT19FVkVSWU9ORSwKK307CisKKyNlbmRpZgorCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogIGMtYmFzaWMtb2Zmc2V0OiA4CisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZnM0X21vdW50LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmZzNF9tb3VudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZmYzMmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmZzNF9tb3VudC5oCkBAIC0wLDAgKzEsNzEgQEAKKyNpZm5kZWYgX0xJTlVYX05GUzRfTU9VTlRfSAorI2RlZmluZSBfTElOVVhfTkZTNF9NT1VOVF9ICisKKy8qCisgKiAgbGludXgvaW5jbHVkZS9saW51eC9uZnM0X21vdW50LmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyICBUcm9uZCBNeWtsZWJ1c3QKKyAqCisgKiAgc3RydWN0dXJlIHBhc3NlZCBmcm9tIHVzZXItc3BhY2UgdG8ga2VybmVsLXNwYWNlIGR1cmluZyBhbiBuZnN2NCBtb3VudAorICovCisKKy8qCisgKiBXQVJOSU5HISAgRG8gbm90IGRlbGV0ZSBvciBjaGFuZ2UgdGhlIG9yZGVyIG9mIHRoZXNlIGZpZWxkcy4gIElmCisgKiBhIG5ldyBmaWVsZCBpcyByZXF1aXJlZCB0aGVuIGFkZCBpdCB0byB0aGUgZW5kLiAgVGhlIHZlcnNpb24gZmllbGQKKyAqIHRyYWNrcyB3aGljaCBmaWVsZHMgYXJlIHByZXNlbnQuICBUaGlzIHdpbGwgZW5zdXJlIHNvbWUgbWVhc3VyZSBvZgorICogbW91bnQtdG8ta2VybmVsIHZlcnNpb24gY29tcGF0aWJpbGl0eS4gIFNvbWUgb2YgdGhlc2UgYXJlbid0IHVzZWQgeWV0CisgKiBidXQgaGVyZSB0aGV5IGFyZSBhbnl3YXkuCisgKi8KKyNkZWZpbmUgTkZTNF9NT1VOVF9WRVJTSU9OCTEKKworc3RydWN0IG5mc19zdHJpbmcgeworCXVuc2lnbmVkIGludCBsZW47CisJY29uc3QgY2hhciAqIGRhdGE7Cit9OworCitzdHJ1Y3QgbmZzNF9tb3VudF9kYXRhIHsKKwlpbnQgdmVyc2lvbjsJCQkJLyogMSAqLworCWludCBmbGFnczsJCQkJLyogMSAqLworCWludCByc2l6ZTsJCQkJLyogMSAqLworCWludCB3c2l6ZTsJCQkJLyogMSAqLworCWludCB0aW1lbzsJCQkJLyogMSAqLworCWludCByZXRyYW5zOwkJCQkvKiAxICovCisJaW50IGFjcmVnbWluOwkJCQkvKiAxICovCisJaW50IGFjcmVnbWF4OwkJCQkvKiAxICovCisJaW50IGFjZGlybWluOwkJCQkvKiAxICovCisJaW50IGFjZGlybWF4OwkJCQkvKiAxICovCisKKwkvKiBzZWUgdGhlIGRlZmluaXRpb24gb2YgJ3N0cnVjdCBjbGllbnRhZGRyNCcgaW4gUkZDMzAxMCAqLworCXN0cnVjdCBuZnNfc3RyaW5nIGNsaWVudF9hZGRyOwkJLyogMSAqLworCisJLyogTW91bnQgcGF0aCAqLworCXN0cnVjdCBuZnNfc3RyaW5nIG1udF9wYXRoOwkJLyogMSAqLworCisJLyogU2VydmVyIGRldGFpbHMgKi8KKwlzdHJ1Y3QgbmZzX3N0cmluZyBob3N0bmFtZTsJCS8qIDEgKi8KKwkvKiBTZXJ2ZXIgSVAgYWRkcmVzcyAqLworCXVuc2lnbmVkIGludCBob3N0X2FkZHJsZW47CQkvKiAxICovCisJc3RydWN0IHNvY2thZGRyICogaG9zdF9hZGRyOwkvKiAxICovCisKKwkvKiBUcmFuc3BvcnQgcHJvdG9jb2wgdG8gdXNlICovCisJaW50IHByb3RvOwkJCQkvKiAxICovCisKKwkvKiBQc2V1ZG8tZmxhdm91cnMgdG8gdXNlIGZvciBhdXRoZW50aWNhdGlvbi4gU2VlIFJGQzI2MjMgKi8KKwlpbnQgYXV0aF9mbGF2b3VybGVuOwkJCS8qIDEgKi8KKwlpbnQgKmF1dGhfZmxhdm91cnM7CQkvKiAxICovCit9OworCisvKiBiaXRzIGluIHRoZSBmbGFncyBmaWVsZCAqLworLyogTm90ZTogdGhlIGZpZWxkcyB0aGF0IGNvcnJlc3BvbmQgdG8gZXhpc3RpbmcgTkZTdjIvdjMgbW91bnQgb3B0aW9ucworICogCSBzaG91bGQgbWlycm9yIHRoZSB2YWx1ZXMgZnJvbSBpbmNsdWRlL2xpbnV4L25mc19tb3VudC5oCisgKi8KKworI2RlZmluZSBORlM0X01PVU5UX1NPRlQJCTB4MDAwMQkvKiAxICovCisjZGVmaW5lIE5GUzRfTU9VTlRfSU5UUgkJMHgwMDAyCS8qIDEgKi8KKyNkZWZpbmUgTkZTNF9NT1VOVF9OT0NUTwkweDAwMTAJLyogMSAqLworI2RlZmluZSBORlM0X01PVU5UX05PQUMJCTB4MDAyMAkvKiAxICovCisjZGVmaW5lIE5GUzRfTU9VTlRfU1RSSUNUTE9DSwkweDEwMDAJLyogMSAqLworI2RlZmluZSBORlM0X01PVU5UX1VOU0hBUkVECTB4ODAwMAkvKiAxICovCisjZGVmaW5lIE5GUzRfTU9VTlRfRkxBR01BU0sJMHg5MDMzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25mc19mcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25mc19mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MjA2NzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2xpbnV4L25mc19mcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5MiAgUmljayBTbGFka2V5CisgKgorICogIE9TLXNwZWNpZmljIG5mcyBmaWxlc3lzdGVtIGRlZmluaXRpb25zIGFuZCBkZWNsYXJhdGlvbnMKKyAqLworCisjaWZuZGVmIF9MSU5VWF9ORlNfRlNfSAorI2RlZmluZSBfTElOVVhfTkZTX0ZTX0gKKworI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CisKKy8qIERlZmF1bHQgdGltZW91dCB2YWx1ZXMgKi8KKyNkZWZpbmUgTkZTX0RFRl9VRFBfVElNRU8JKDExKQorI2RlZmluZSBORlNfREVGX1VEUF9SRVRSQU5TCSgzKQorI2RlZmluZSBORlNfREVGX1RDUF9USU1FTwkoNjAwKQorI2RlZmluZSBORlNfREVGX1RDUF9SRVRSQU5TCSgyKQorCisjZGVmaW5lIE5GU19NQVhfVURQX1RJTUVPVVQJKDYwKkhaKQorI2RlZmluZSBORlNfTUFYX1RDUF9USU1FT1VUCSg2MDAqSFopCisKKyNkZWZpbmUgTkZTX0RFRl9BQ1JFR01JTgkoMykKKyNkZWZpbmUgTkZTX0RFRl9BQ1JFR01BWAkoNjApCisjZGVmaW5lIE5GU19ERUZfQUNESVJNSU4JKDMwKQorI2RlZmluZSBORlNfREVGX0FDRElSTUFYCSg2MCkKKworLyoKKyAqIFdoZW4gZmx1c2hpbmcgYSBjbHVzdGVyIG9mIGRpcnR5IHBhZ2VzLCB0aGVyZSBjYW4gYmUgZGlmZmVyZW50CisgKiBzdHJhdGVnaWVzOgorICovCisjZGVmaW5lIEZMVVNIX1NZTkMJCTEJLyogZmlsZSBiZWluZyBzeW5jZWQsIG9yIGNvbnRlbnRpb24gKi8KKyNkZWZpbmUgRkxVU0hfU1RBQkxFCQk0CS8qIGNvbW1pdCB0byBzdGFibGUgc3RvcmFnZSAqLworI2RlZmluZSBGTFVTSF9MT1dQUkkJCTgJLyogbG93IHByaW9yaXR5IGJhY2tncm91bmQgZmx1c2ggKi8KKyNkZWZpbmUgRkxVU0hfSElHSFBSSQkJMTYJLyogaGlnaCBwcmlvcml0eSBtZW1vcnkgcmVjbGFpbSBmbHVzaCAqLworCisKKy8qCisgKiBORlMgZGVidWcgZmxhZ3MKKyAqLworI2RlZmluZSBORlNEQkdfVkZTCQkweDAwMDEKKyNkZWZpbmUgTkZTREJHX0RJUkNBQ0hFCQkweDAwMDIKKyNkZWZpbmUgTkZTREJHX0xPT0tVUENBQ0hFCTB4MDAwNAorI2RlZmluZSBORlNEQkdfUEFHRUNBQ0hFCTB4MDAwOAorI2RlZmluZSBORlNEQkdfUFJPQwkJMHgwMDEwCisjZGVmaW5lIE5GU0RCR19YRFIJCTB4MDAyMAorI2RlZmluZSBORlNEQkdfRklMRQkJMHgwMDQwCisjZGVmaW5lIE5GU0RCR19ST09UCQkweDAwODAKKyNkZWZpbmUgTkZTREJHX0NBTExCQUNLCQkweDAxMDAKKyNkZWZpbmUgTkZTREJHX0NMSUVOVAkJMHgwMjAwCisjZGVmaW5lIE5GU0RCR19NT1VOVAkJMHgwNDAwCisjZGVmaW5lIE5GU0RCR19GU0NBQ0hFCQkweDA4MDAKKyNkZWZpbmUgTkZTREJHX1BORlMJCTB4MTAwMAorI2RlZmluZSBORlNEQkdfUE5GU19MRAkJMHgyMDAwCisjZGVmaW5lIE5GU0RCR19BTEwJCTB4RkZGRgorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25mc19pZG1hcC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25mc19pZG1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1Zjg0M2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmZzX2lkbWFwLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIGluY2x1ZGUvbGludXgvbmZzX2lkbWFwLmgKKyAqCisgKiAgVUlEIGFuZCBHSUQgdG8gbmFtZSBtYXBwaW5nIGZvciBjbGllbnRzLgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDIgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgTWljaGlnYW4uCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgTWFyaXVzIEFhbW9kdCBFcmlrc2VuIDxtYXJpdXNAdW1pY2guZWR1PgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqICBhcmUgbWV0OgorICoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiAgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqICBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTkZTX0lETUFQX0gKKyNkZWZpbmUgTkZTX0lETUFQX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIFhYWCBmcm9tIGJpdHMvdXRtcC5oICAqLworI2RlZmluZSBJRE1BUF9OQU1FU1ogIDEyOAorCisjZGVmaW5lIElETUFQX1RZUEVfVVNFUiAgMAorI2RlZmluZSBJRE1BUF9UWVBFX0dST1VQIDEKKworI2RlZmluZSBJRE1BUF9DT05WX0lEVE9OQU1FIDAKKyNkZWZpbmUgSURNQVBfQ09OVl9OQU1FVE9JRCAxCisKKyNkZWZpbmUgSURNQVBfU1RBVFVTX0lOVkFMSURNU0cgMHgwMQorI2RlZmluZSBJRE1BUF9TVEFUVVNfQUdBSU4gICAgICAweDAyCisjZGVmaW5lIElETUFQX1NUQVRVU19MT09LVVBGQUlMIDB4MDQKKyNkZWZpbmUgSURNQVBfU1RBVFVTX1NVQ0NFU1MgICAgMHgwOAorCitzdHJ1Y3QgaWRtYXBfbXNnIHsKKwlfX3U4ICBpbV90eXBlOworCV9fdTggIGltX2NvbnY7CisJY2hhciAgaW1fbmFtZVtJRE1BUF9OQU1FU1pdOworCV9fdTMyIGltX2lkOworCV9fdTggIGltX3N0YXR1czsKK307CisKKworI2VuZGlmIC8qIE5GU19JRE1BUF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmZzX21vdW50LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmZzX21vdW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc2YmRkZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZnNfbW91bnQuaApAQCAtMCwwICsxLDc3IEBACisjaWZuZGVmIF9MSU5VWF9ORlNfTU9VTlRfSAorI2RlZmluZSBfTElOVVhfTkZTX01PVU5UX0gKKworLyoKKyAqICBsaW51eC9pbmNsdWRlL2xpbnV4L25mc19tb3VudC5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5MiAgUmljayBTbGFka2V5CisgKgorICogIHN0cnVjdHVyZSBwYXNzZWQgZnJvbSB1c2VyLXNwYWNlIHRvIGtlcm5lbC1zcGFjZSBkdXJpbmcgYW4gbmZzIG1vdW50CisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L25mcy5oPgorI2luY2x1ZGUgPGxpbnV4L25mczIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZnMzLmg+CisKKy8qCisgKiBXQVJOSU5HISAgRG8gbm90IGRlbGV0ZSBvciBjaGFuZ2UgdGhlIG9yZGVyIG9mIHRoZXNlIGZpZWxkcy4gIElmCisgKiBhIG5ldyBmaWVsZCBpcyByZXF1aXJlZCB0aGVuIGFkZCBpdCB0byB0aGUgZW5kLiAgVGhlIHZlcnNpb24gZmllbGQKKyAqIHRyYWNrcyB3aGljaCBmaWVsZHMgYXJlIHByZXNlbnQuICBUaGlzIHdpbGwgZW5zdXJlIHNvbWUgbWVhc3VyZSBvZgorICogbW91bnQtdG8ta2VybmVsIHZlcnNpb24gY29tcGF0aWJpbGl0eS4gIFNvbWUgb2YgdGhlc2UgYXJlbid0IHVzZWQgeWV0CisgKiBidXQgaGVyZSB0aGV5IGFyZSBhbnl3YXkuCisgKi8KKyNkZWZpbmUgTkZTX01PVU5UX1ZFUlNJT04JNgorI2RlZmluZSBORlNfTUFYX0NPTlRFWFRfTEVOCTI1NgorCitzdHJ1Y3QgbmZzX21vdW50X2RhdGEgeworCWludAkJdmVyc2lvbjsJCS8qIDEgKi8KKwlpbnQJCWZkOwkJCS8qIDEgKi8KKwlzdHJ1Y3QgbmZzMl9maAlvbGRfcm9vdDsJCS8qIDEgKi8KKwlpbnQJCWZsYWdzOwkJCS8qIDEgKi8KKwlpbnQJCXJzaXplOwkJCS8qIDEgKi8KKwlpbnQJCXdzaXplOwkJCS8qIDEgKi8KKwlpbnQJCXRpbWVvOwkJCS8qIDEgKi8KKwlpbnQJCXJldHJhbnM7CQkvKiAxICovCisJaW50CQlhY3JlZ21pbjsJCS8qIDEgKi8KKwlpbnQJCWFjcmVnbWF4OwkJLyogMSAqLworCWludAkJYWNkaXJtaW47CQkvKiAxICovCisJaW50CQlhY2Rpcm1heDsJCS8qIDEgKi8KKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsJCS8qIDEgKi8KKwljaGFyCQlob3N0bmFtZVtORlNfTUFYTkFNTEVOICsgMV07CQkvKiAxICovCisJaW50CQluYW1sZW47CQkJLyogMiAqLworCXVuc2lnbmVkIGludAlic2l6ZTsJCQkvKiAzICovCisJc3RydWN0IG5mczNfZmgJcm9vdDsJCQkvKiA0ICovCisJaW50CQlwc2V1ZG9mbGF2b3I7CQkvKiA1ICovCisJY2hhcgkJY29udGV4dFtORlNfTUFYX0NPTlRFWFRfTEVOICsgMV07CS8qIDYgKi8KK307CisKKy8qIGJpdHMgaW4gdGhlIGZsYWdzIGZpZWxkIHZpc2libGUgdG8gdXNlciBzcGFjZSAqLworCisjZGVmaW5lIE5GU19NT1VOVF9TT0ZUCQkweDAwMDEJLyogMSAqLworI2RlZmluZSBORlNfTU9VTlRfSU5UUgkJMHgwMDAyCS8qIDEgKi8gLyogbm93IHVudXNlZCwgYnV0IEFCSSAqLworI2RlZmluZSBORlNfTU9VTlRfU0VDVVJFCTB4MDAwNAkvKiAxICovCisjZGVmaW5lIE5GU19NT1VOVF9QT1NJWAkJMHgwMDA4CS8qIDEgKi8KKyNkZWZpbmUgTkZTX01PVU5UX05PQ1RPCQkweDAwMTAJLyogMSAqLworI2RlZmluZSBORlNfTU9VTlRfTk9BQwkJMHgwMDIwCS8qIDEgKi8KKyNkZWZpbmUgTkZTX01PVU5UX1RDUAkJMHgwMDQwCS8qIDIgKi8KKyNkZWZpbmUgTkZTX01PVU5UX1ZFUjMJCTB4MDA4MAkvKiAzICovCisjZGVmaW5lIE5GU19NT1VOVF9LRVJCRVJPUwkweDAxMDAJLyogMyAqLworI2RlZmluZSBORlNfTU9VTlRfTk9OTE0JCTB4MDIwMAkvKiAzICovCisjZGVmaW5lIE5GU19NT1VOVF9CUk9LRU5fU1VJRAkweDA0MDAJLyogNCAqLworI2RlZmluZSBORlNfTU9VTlRfTk9BQ0wJCTB4MDgwMAkvKiA0ICovCisjZGVmaW5lIE5GU19NT1VOVF9TVFJJQ1RMT0NLCTB4MTAwMAkvKiByZXNlcnZlZCBmb3IgTkZTdjQgKi8KKyNkZWZpbmUgTkZTX01PVU5UX1NFQ0ZMQVZPVVIJMHgyMDAwCS8qIDUgKi8KKyNkZWZpbmUgTkZTX01PVU5UX05PUkRJUlBMVVMJMHg0MDAwCS8qIDUgKi8KKyNkZWZpbmUgTkZTX01PVU5UX1VOU0hBUkVECTB4ODAwMAkvKiA1ICovCisjZGVmaW5lIE5GU19NT1VOVF9GTEFHTUFTSwkweEZGRkYKKworLyogVGhlIGZvbGxvd2luZyBhcmUgZm9yIGludGVybmFsIHVzZSBvbmx5ICovCisjZGVmaW5lIE5GU19NT1VOVF9MT09LVVBfQ0FDSEVfTk9ORUcJMHgxMDAwMAorI2RlZmluZSBORlNfTU9VTlRfTE9PS1VQX0NBQ0hFX05PTkUJMHgyMDAwMAorI2RlZmluZSBORlNfTU9VTlRfTk9SRVNWUE9SVAkJMHg0MDAwMAorI2RlZmluZSBORlNfTU9VTlRfTEVHQUNZX0lOVEVSRkFDRQkweDgwMDAwCisKKyNkZWZpbmUgTkZTX01PVU5UX0xPQ0FMX0ZMT0NLCTB4MTAwMDAwCisjZGVmaW5lIE5GU19NT1VOVF9MT0NBTF9GQ05UTAkweDIwMDAwMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZnNhY2wuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZnNhY2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjVlMTlmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25mc2FjbC5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBGaWxlOiBsaW51eC9uZnNhY2wuaAorICoKKyAqIChDKSAyMDAzIEFuZHJlYXMgR3J1ZW5iYWNoZXIgPGFncnVlbkBzdXNlLmRlPgorICovCisjaWZuZGVmIF9fTElOVVhfTkZTQUNMX0gKKyNkZWZpbmUgX19MSU5VWF9ORlNBQ0xfSAorCisjZGVmaW5lIE5GU19BQ0xfUFJPR1JBTQkxMDAyMjcKKworI2RlZmluZSBBQ0xQUk9DMl9HRVRBQ0wJCTEKKyNkZWZpbmUgQUNMUFJPQzJfU0VUQUNMCQkyCisjZGVmaW5lIEFDTFBST0MyX0dFVEFUVFIJMworI2RlZmluZSBBQ0xQUk9DMl9BQ0NFU1MJCTQKKworI2RlZmluZSBBQ0xQUk9DM19HRVRBQ0wJCTEKKyNkZWZpbmUgQUNMUFJPQzNfU0VUQUNMCQkyCisKKworLyogRmxhZ3MgZm9yIHRoZSBnZXRhY2wvc2V0YWNsIG1vZGUgKi8KKyNkZWZpbmUgTkZTX0FDTAkJCTB4MDAwMQorI2RlZmluZSBORlNfQUNMQ05UCQkweDAwMDIKKyNkZWZpbmUgTkZTX0RGQUNMCQkweDAwMDQKKyNkZWZpbmUgTkZTX0RGQUNMQ05UCQkweDAwMDgKKworLyogRmxhZyBmb3IgRGVmYXVsdCBBQ0wgZW50cmllcyAqLworI2RlZmluZSBORlNfQUNMX0RFRkFVTFQJCTB4MTAwMAorCisjZW5kaWYgIC8qIF9fTElOVVhfTkZTQUNMX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZnNkL2NvbnN0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmZzZC9jb25zdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZmZiOWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmZzZC9jb25zdC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBpbmNsdWRlL2xpbnV4L25mc2QvY29uc3QuaAorICoKKyAqIFZhcmlvdXMgY29uc3RhbnRzIHJlbGF0ZWQgdG8gTkZTLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk3IE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgorICovCisKKyNpZm5kZWYgX0xJTlVYX05GU0RfQ09OU1RfSAorI2RlZmluZSBfTElOVVhfTkZTRF9DT05TVF9ICisKKyNpbmNsdWRlIDxsaW51eC9uZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZnMyLmg+CisjaW5jbHVkZSA8bGludXgvbmZzMy5oPgorI2luY2x1ZGUgPGxpbnV4L25mczQuaD4KKworLyoKKyAqIE1heGltdW0gcHJvdG9jb2wgdmVyc2lvbiBzdXBwb3J0ZWQgYnkga25mc2QKKyAqLworI2RlZmluZSBORlNTVkNfTUFYVkVSUwkJMworCisvKgorICogTWF4aW11bSBibG9ja3NpemVzIHN1cHBvcnRlZCBieSBkYWVtb24gdW5kZXIgdmFyaW91cyBjaXJjdW1zdGFuY2VzLgorICovCisjZGVmaW5lIE5GU1NWQ19NQVhCTEtTSVpFCVJQQ1NWQ19NQVhQQVlMT0FECisvKiBORlN2MiBpcyBsaW1pdGVkIGJ5IHRoZSBwcm90b2NvbCBzcGVjaWZpY2F0aW9uLCBzZWUgUkZDIDEwOTQgKi8KKyNkZWZpbmUgTkZTU1ZDX01BWEJMS1NJWkVfVjIJKDgqMTAyNCkKKworCisjZW5kaWYgLyogX0xJTlVYX05GU0RfQ09OU1RfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25mc2QvZGVidWcuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZnNkL2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q1OGMxMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZnNkL2RlYnVnLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvbGludXgvbmZzZC9kZWJ1Zy5oCisgKgorICogRGVidWdnaW5nLXJlbGF0ZWQgc3R1ZmYgZm9yIG5mc2QKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgT2xhZiBLaXJjaCA8b2tpckBtb25hZC5zd2IuZGU+CisgKi8KKworI2lmbmRlZiBMSU5VWF9ORlNEX0RFQlVHX0gKKyNkZWZpbmUgTElOVVhfTkZTRF9ERUJVR19ICisKKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvZGVidWcuaD4KKworLyoKKyAqIEVuYWJsZSBkZWJ1Z2dpbmcgZm9yIG5mc2QuCisgKiBSZXF1aXJlcyBSUENfREVCVUcuCisgKi8KKyNpZmRlZiBSUENfREVCVUcKKyMgZGVmaW5lIE5GU0RfREVCVUcJCTEKKyNlbmRpZgorCisvKgorICoga25mc2QgZGVidWcgZmxhZ3MKKyAqLworI2RlZmluZSBORlNEREJHX1NPQ0sJCTB4MDAwMQorI2RlZmluZSBORlNEREJHX0ZICQkweDAwMDIKKyNkZWZpbmUgTkZTRERCR19FWFBPUlQJCTB4MDAwNAorI2RlZmluZSBORlNEREJHX1NWQwkJMHgwMDA4CisjZGVmaW5lIE5GU0REQkdfUFJPQwkJMHgwMDEwCisjZGVmaW5lIE5GU0REQkdfRklMRU9QCQkweDAwMjAKKyNkZWZpbmUgTkZTRERCR19BVVRICQkweDAwNDAKKyNkZWZpbmUgTkZTRERCR19SRVBDQUNIRQkweDAwODAKKyNkZWZpbmUgTkZTRERCR19YRFIJCTB4MDEwMAorI2RlZmluZSBORlNEREJHX0xPQ0tECQkweDAyMDAKKyNkZWZpbmUgTkZTRERCR19BTEwJCTB4N0ZGRgorI2RlZmluZSBORlNEREJHX05PQ0hBTkdFCTB4RkZGRgorCisKKworI2VuZGlmIC8qIExJTlVYX05GU0RfREVCVUdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25mc2QvZXhwb3J0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmZzZC9leHBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjM5ZjFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25mc2QvZXhwb3J0LmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIGluY2x1ZGUvbGludXgvbmZzZC9leHBvcnQuaAorICogCisgKiBQdWJsaWMgZGVjbGFyYXRpb25zIGZvciBORlMgZXhwb3J0cy4gVGhlIGRlZmluaXRpb25zIGZvciB0aGUKKyAqIHN5c2NhbGwgaW50ZXJmYWNlIGFyZSBpbiBuZnNjdGwuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk3IE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgorICovCisKKyNpZm5kZWYgTkZTRF9FWFBPUlRfSAorI2RlZmluZSBORlNEX0VYUE9SVF9ICisKKyMgaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIEltcG9ydGFudCBsaW1pdHMgZm9yIHRoZSBleHBvcnRzIHN0dWZmLgorICovCisjZGVmaW5lIE5GU0NMTlRfSURNQVgJCTEwMjQKKyNkZWZpbmUgTkZTQ0xOVF9BRERSTUFYCQkxNgorI2RlZmluZSBORlNDTE5UX0tFWU1BWAkJMzIKKworLyoKKyAqIEV4cG9ydCBmbGFncy4KKyAqLworI2RlZmluZSBORlNFWFBfUkVBRE9OTFkJCTB4MDAwMQorI2RlZmluZSBORlNFWFBfSU5TRUNVUkVfUE9SVAkweDAwMDIKKyNkZWZpbmUgTkZTRVhQX1JPT1RTUVVBU0gJMHgwMDA0CisjZGVmaW5lIE5GU0VYUF9BTExTUVVBU0gJMHgwMDA4CisjZGVmaW5lIE5GU0VYUF9BU1lOQwkJMHgwMDEwCisjZGVmaW5lIE5GU0VYUF9HQVRIRVJFRF9XUklURVMJMHgwMDIwCisvKiA0MCA4MCAxMDAgY3VycmVudGx5IHVudXNlZCAqLworI2RlZmluZSBORlNFWFBfTk9ISURFCQkweDAyMDAKKyNkZWZpbmUgTkZTRVhQX05PU1VCVFJFRUNIRUNLCTB4MDQwMAorI2RlZmluZQlORlNFWFBfTk9BVVRITkxNCTB4MDgwMAkJLyogRG9uJ3QgYXV0aGVudGljYXRlIE5MTSByZXF1ZXN0cyAtIGp1c3QgdHJ1c3QgKi8KKyNkZWZpbmUgTkZTRVhQX01TTkZTCQkweDEwMDAJLyogZG8gc2lsbHkgdGhpbmdzIHRoYXQgTVMgY2xpZW50cyBleHBlY3QgKi8KKyNkZWZpbmUgTkZTRVhQX0ZTSUQJCTB4MjAwMAorI2RlZmluZQlORlNFWFBfQ1JPU1NNT1VOVAkweDQwMDAKKyNkZWZpbmUJTkZTRVhQX05PQUNMCQkweDgwMDAJLyogcmVzZXJ2ZWQgZm9yIHBvc3NpYmxlIEFDTCByZWxhdGVkIHVzZSAqLworLyoKKyAqIFRoZSBORlNFWFBfVjRST09UIGZsYWcgY2F1c2VzIHRoZSBrZXJuZWwgdG8gZ2l2ZSBhY2Nlc3Mgb25seSB0byBORlN2NAorICogY2xpZW50cywgYW5kIG9ubHkgdG8gdGhlIHNpbmdsZSBkaXJlY3RvcnkgdGhhdCBpcyB0aGUgcm9vdCBvZiB0aGUKKyAqIGV4cG9ydDsgZnVydGhlciBsb29rdXAgYW5kIHJlYWRkaXIgb3BlcmF0aW9ucyBhcmUgdHJlYXRlZCBhcyBpZiBldmVyeQorICogc3ViZGlyZWN0b3J5IHdhcyBhIG1vdW50cG9pbnQsIGFuZCBpZ25vcmVkIGlmIHRoZXkgYXJlIG5vdCB0aGVtc2VsdmVzCisgKiBleHBvcnRlZC4gIFRoaXMgaXMgdXNlZCBieSBuZnNkIGFuZCBtb3VudGQgdG8gY29uc3RydWN0IHRoZSBORlN2NAorICogcHNldWRvZmlsZXN5c3RlbSwgd2hpY2ggcHJvdmlkZXMgYWNjZXNzIG9ubHkgdG8gcGF0aHMgbGVhZGluZyB0byBlYWNoCisgKiBleHBvcnRlZCBmaWxlc3lzdGVtLgorICovCisjZGVmaW5lCU5GU0VYUF9WNFJPT1QJCTB4MTAwMDAKKy8qIEFsbCBmbGFncyB0aGF0IHdlIGNsYWltIHRvIHN1cHBvcnQuICAoTm90ZSB3ZSBkb24ndCBzdXBwb3J0IE5PQUNMLikgKi8KKyNkZWZpbmUgTkZTRVhQX0FMTEZMQUdTCQkweDE3RTNGCisKKy8qIFRoZSBmbGFncyB0aGF0IG1heSB2YXJ5IGRlcGVuZGluZyBvbiBzZWN1cml0eSBmbGF2b3I6ICovCisjZGVmaW5lIE5GU0VYUF9TRUNJTkZPX0ZMQUdTCShORlNFWFBfUkVBRE9OTFkgfCBORlNFWFBfUk9PVFNRVUFTSCBcCisJCQkJCXwgTkZTRVhQX0FMTFNRVUFTSCBcCisJCQkJCXwgTkZTRVhQX0lOU0VDVVJFX1BPUlQpCisKKworI2VuZGlmIC8qIE5GU0RfRVhQT1JUX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZmguaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZnNkL25mc2ZoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU1ZDU4NgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZnNkL25mc2ZoLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBpbmNsdWRlL2xpbnV4L25mc2QvbmZzZmguaAorICoKKyAqIFRoaXMgZmlsZSBkZXNjcmliZXMgdGhlIGxheW91dCBvZiB0aGUgZmlsZSBoYW5kbGVzIGFzIHBhc3NlZAorICogb3ZlciB0aGUgd2lyZS4KKyAqCisgKiBFYXJsaWVyIHZlcnNpb25zIG9mIGtuZnNkIHVzZWQgdG8gc2lnbiBmaWxlIGhhbmRsZXMgdXNpbmcga2V5ZWQgTUQ1CisgKiBvciBTSEEuIEkndmUgcmVtb3ZlZCB0aGlzIGNvZGUsIGJlY2F1c2UgaXQgZG9lc24ndCBnaXZlIHlvdSBtb3JlCisgKiBzZWN1cml0eSB0aGFuIGJsb2NraW5nIGV4dGVybmFsIGFjY2VzcyB0byBwb3J0IDIwNDkgb24geW91ciBmaXJld2FsbC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgT2xhZiBLaXJjaCA8b2tpckBtb25hZC5zd2IuZGU+CisgKi8KKworI2lmbmRlZiBfTElOVVhfTkZTRF9GSF9ICisjZGVmaW5lIF9MSU5VWF9ORlNEX0ZIX0gKKworIyBpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25mc2QvY29uc3QuaD4KKworLyoKKyAqIFRoaXMgaXMgdGhlIG9sZCAiZGVudHJ5IHN0eWxlIiBMaW51eCBORlN2MiBmaWxlIGhhbmRsZS4KKyAqCisgKiBUaGUgeGlubyBhbmQgeGRldiBmaWVsZHMgYXJlIGN1cnJlbnRseSB1c2VkIHRvIHRyYW5zcG9ydCB0aGUKKyAqIGluby9kZXYgb2YgdGhlIGV4cG9ydGVkIGlub2RlLgorICovCitzdHJ1Y3QgbmZzX2ZoYmFzZV9vbGQgeworCV9fdTMyCQlmYl9kY29va2llOwkvKiBkZW50cnkgY29va2llIC0gYWx3YXlzIDB4ZmVlYmJhY2EgKi8KKwlfX3UzMgkJZmJfaW5vOwkJLyogb3VyIGlub2RlIG51bWJlciAqLworCV9fdTMyCQlmYl9kaXJpbm87CS8qIGRpciBpbm9kZSBudW1iZXIsIDAgZm9yIGRpcmVjdG9yaWVzICovCisJX191MzIJCWZiX2RldjsJCS8qIG91ciBkZXZpY2UgKi8KKwlfX3UzMgkJZmJfeGRldjsKKwlfX3UzMgkJZmJfeGlubzsKKwlfX3UzMgkJZmJfZ2VuZXJhdGlvbjsKK307CisKKy8qCisgKiBUaGlzIGlzIHRoZSBuZXcgZmxleGlibGUsIGV4dGVuc2libGUgc3R5bGUgTkZTdjIvdjMgZmlsZSBoYW5kbGUuCisgKiBieSBOZWlsIEJyb3duIDxuZWlsYkBjc2UudW5zdy5lZHUuYXU+IC0gTWFyY2ggMjAwMAorICoKKyAqIFRoZSBmaWxlIGhhbmRsZSBzdGFydHMgd2l0aCBhIHNlcXVlbmNlIG9mIGZvdXItYnl0ZSB3b3Jkcy4KKyAqIFRoZSBmaXJzdCB3b3JkIGNvbnRhaW5zIGEgdmVyc2lvbiBudW1iZXIgKDEpIGFuZCB0aHJlZSBkZXNjcmlwdG9yIGJ5dGVzCisgKiB0aGF0IHRlbGwgaG93IHRoZSByZW1haW5pbmcgMyB2YXJpYWJsZSBsZW5ndGggZmllbGRzIHNob3VsZCBiZSBoYW5kbGVkLgorICogVGhlc2UgdGhyZWUgYnl0ZXMgYXJlIGF1dGhfdHlwZSwgZnNpZF90eXBlIGFuZCBmaWxlaWRfdHlwZS4KKyAqCisgKiBBbGwgZm91ci1ieXRlIHZhbHVlcyBhcmUgaW4gaG9zdC1ieXRlLW9yZGVyLgorICoKKyAqIFRoZSBhdXRoX3R5cGUgZmllbGQgc3BlY2lmaWVzIGhvdyB0aGUgZmlsZWhhbmRsZSBjYW4gYmUgYXV0aGVudGljYXRlZAorICogVGhpcyBtaWdodCBhbGxvdyBhIGZpbGUgdG8gYmUgY29uZmlybWVkIHRvIGJlIGluIGEgd3JpdGFibGUgcGFydCBvZiBhCisgKiBmaWxldHJlZSB3aXRob3V0IGNoZWNraW5nIHRoZSBwYXRoIGZyb20gaXQgdXB0byB0aGUgcm9vdC4KKyAqIEN1cnJlbnQgdmFsdWVzOgorICogICAgIDAgIC0gTm8gYXV0aGVudGljYXRpb24uICBmYl9hdXRoIGlzIDAgYnl0ZXMgbG9uZworICogUG9zc2libGUgZnV0dXJlIHZhbHVlczoKKyAqICAgICAxICAtIDQgYnl0ZXMgdGFrZW4gZnJvbSBNRDUgaGFzaCBvZiB0aGUgcmVtYWluZXIgb2YgdGhlIGZpbGUgaGFuZGxlCisgKiAgICAgICAgICBwcmVmaXhlZCBieSBhIHNlY3JldCBhbmQgd2l0aCB0aGUgaW1wb3J0YW50IGV4cG9ydCBmbGFncy4KKyAqCisgKiBUaGUgZnNpZF90eXBlIGlkZW50aWZpZXMgaG93IHRoZSBmaWxlc3lzdGVtIChvciBleHBvcnQgcG9pbnQpIGlzCisgKiAgICBlbmNvZGVkLgorICogIEN1cnJlbnQgdmFsdWVzOgorICogICAgIDAgIC0gNCBieXRlIGRldmljZSBpZCAobXMtMi1ieXRlcyBtYWpvciwgbHMtMi1ieXRlcyBtaW5vciksIDRieXRlIGlub2RlIG51bWJlcgorICogICAgICAgIE5PVEU6IHdlIGNhbm5vdCB1c2UgdGhlIGtkZXZfdCBkZXZpY2UgaWQgdmFsdWUsIGJlY2F1c2Uga2Rldl90LmgKKyAqICAgICAgICAgICAgICBzYXlzIHdlIG11c3RuJ3QuICBXZSBtdXN0IGJyZWFrIGl0IHVwIGFuZCByZWFzc2VtYmxlLgorICogICAgIDEgIC0gNCBieXRlIHVzZXIgc3BlY2lmaWVkIGlkZW50aWZpZXIKKyAqICAgICAyICAtIDQgYnl0ZSBtYWpvciwgNCBieXRlIG1pbm9yLCA0IGJ5dGUgaW5vZGUgbnVtYmVyIC0gREVQUkVDQVRFRAorICogICAgIDMgIC0gNCBieXRlIGRldmljZSBpZCwgZW5jb2RlZCBmb3IgdXNlci1zcGFjZSwgNCBieXRlIGlub2RlIG51bWJlcgorICogICAgIDQgIC0gNCBieXRlIGlub2RlIG51bWJlciBhbmQgNCBieXRlIHV1aWQKKyAqICAgICA1ICAtIDggYnl0ZSB1dWlkCisgKiAgICAgNiAgLSAxNiBieXRlIHV1aWQKKyAqICAgICA3ICAtIDggYnl0ZSBpbm9kZSBudW1iZXIgYW5kIDE2IGJ5dGUgdXVpZAorICoKKyAqIFRoZSBmaWxlaWRfdHlwZSBpZGVudGlmaWVkIGhvdyB0aGUgZmlsZSB3aXRoaW4gdGhlIGZpbGVzeXN0ZW0gaXMgZW5jb2RlZC4KKyAqIFRoaXMgaXMgKHdpbGwgYmUpIHBhc3NlZCB0bywgYW5kIHNldCBieSwgdGhlIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBpZiBpdCBzdXBwb3J0cworICogZmlsZWhhbmRsZSBvcGVyYXRpb25zLiAgVGhlIGZpbGVzeXN0ZW0gbXVzdCBub3QgdXNlIHRoZSB2YWx1ZSAnMCcgb3IgJzB4ZmYnIGFuZCBtYXkKKyAqIG9ubHkgdXNlIHRoZSB2YWx1ZXMgMSBhbmQgMiBhcyBkZWZpbmVkIGJlbG93OgorICogIEN1cnJlbnQgdmFsdWVzOgorICogICAgMCAgIC0gVGhlIHJvb3QsIG9yIGV4cG9ydCBwb2ludCwgb2YgdGhlIGZpbGVzeXN0ZW0uICBmYl9maWxlaWQgaXMgMCBieXRlcy4KKyAqICAgIDEgICAtIDMyYml0IGlub2RlIG51bWJlciwgMzIgYml0IGdlbmVyYXRpb24gbnVtYmVyLgorICogICAgMiAgIC0gMzJiaXQgaW5vZGUgbnVtYmVyLCAzMiBiaXQgZ2VuZXJhdGlvbiBudW1iZXIsIDMyIGJpdCBwYXJlbnQgZGlyZWN0b3J5IGlub2RlIG51bWJlci4KKyAqCisgKi8KK3N0cnVjdCBuZnNfZmhiYXNlX25ldyB7CisJX191OAkJZmJfdmVyc2lvbjsJLyogPT0gMSwgZXZlbiA9PiBuZnNfZmhiYXNlX29sZCAqLworCV9fdTgJCWZiX2F1dGhfdHlwZTsKKwlfX3U4CQlmYl9mc2lkX3R5cGU7CisJX191OAkJZmJfZmlsZWlkX3R5cGU7CisJX191MzIJCWZiX2F1dGhbMV07CisvKglfX3UzMgkJZmJfZnNpZFswXTsgZmxvYXRpbmcgKi8KKy8qCV9fdTMyCQlmYl9maWxlaWRbMF07IGZsb2F0aW5nICovCit9OworCitzdHJ1Y3Qga25mc2RfZmggeworCXVuc2lnbmVkIGludAlmaF9zaXplOwkvKiBzaWduaWZpY2FudCBmb3IgTkZTdjMuCisJCQkJCSAqIFBvaW50cyB0byB0aGUgY3VycmVudCBzaXplIHdoaWxlIGJ1aWxkaW5nCisJCQkJCSAqIGEgbmV3IGZpbGUgaGFuZGxlCisJCQkJCSAqLworCXVuaW9uIHsKKwkJc3RydWN0IG5mc19maGJhc2Vfb2xkCWZoX29sZDsKKwkJX191MzIJCQlmaF9wYWRbTkZTNF9GSFNJWkUvNF07CisJCXN0cnVjdCBuZnNfZmhiYXNlX25ldwlmaF9uZXc7CisJfSBmaF9iYXNlOworfTsKKworI2RlZmluZSBvZmhfZGNvb2tpZQkJZmhfYmFzZS5maF9vbGQuZmJfZGNvb2tpZQorI2RlZmluZSBvZmhfaW5vCQkJZmhfYmFzZS5maF9vbGQuZmJfaW5vCisjZGVmaW5lIG9maF9kaXJpbm8JCWZoX2Jhc2UuZmhfb2xkLmZiX2RpcmlubworI2RlZmluZSBvZmhfZGV2CQkJZmhfYmFzZS5maF9vbGQuZmJfZGV2CisjZGVmaW5lIG9maF94ZGV2CQlmaF9iYXNlLmZoX29sZC5mYl94ZGV2CisjZGVmaW5lIG9maF94aW5vCQlmaF9iYXNlLmZoX29sZC5mYl94aW5vCisjZGVmaW5lIG9maF9nZW5lcmF0aW9uCQlmaF9iYXNlLmZoX29sZC5mYl9nZW5lcmF0aW9uCisKKyNkZWZpbmUJZmhfdmVyc2lvbgkJZmhfYmFzZS5maF9uZXcuZmJfdmVyc2lvbgorI2RlZmluZQlmaF9mc2lkX3R5cGUJCWZoX2Jhc2UuZmhfbmV3LmZiX2ZzaWRfdHlwZQorI2RlZmluZQlmaF9hdXRoX3R5cGUJCWZoX2Jhc2UuZmhfbmV3LmZiX2F1dGhfdHlwZQorI2RlZmluZQlmaF9maWxlaWRfdHlwZQkJZmhfYmFzZS5maF9uZXcuZmJfZmlsZWlkX3R5cGUKKyNkZWZpbmUJZmhfYXV0aAkJCWZoX2Jhc2UuZmhfbmV3LmZiX2F1dGgKKyNkZWZpbmUJZmhfZnNpZAkJCWZoX2Jhc2UuZmhfbmV3LmZiX2F1dGgKKworCisKKyNlbmRpZiAvKiBfTElOVVhfTkZTRF9GSF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmZzZC9zdGF0cy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25mc2Qvc3RhdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzAyNGU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L25mc2Qvc3RhdHMuaApAQCAtMCwwICsxLDE3IEBACisvKgorICogbGludXgvaW5jbHVkZS9saW51eC9uZnNkL3N0YXRzLmgKKyAqCisgKiBTdGF0aXN0aWNzIGZvciBORlMgc2VydmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KKyAqLworCisjaWZuZGVmIExJTlVYX05GU0RfU1RBVFNfSAorI2RlZmluZSBMSU5VWF9ORlNEX1NUQVRTX0gKKworI2luY2x1ZGUgPGxpbnV4L25mczQuaD4KKworLyogdGhyZWFkIHVzYWdlIHdyYXBzIHZlcnkgbWlsbGlvbiBzZWNvbmRzIChhcHByb3ggb25lIGZvcnRuaWdodCkgKi8KKyNkZWZpbmUJTkZTRF9VU0FHRV9XUkFQCShIWioxMDAwMDAwKQorCisjZW5kaWYgLyogTElOVVhfTkZTRF9TVEFUU19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmZzZC9zeXNjYWxsLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmZzZC9zeXNjYWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE4YzFkNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9uZnNkL3N5c2NhbGwuaApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIGluY2x1ZGUvbGludXgvbmZzZC9zeXNjYWxsLmgKKyAqCisgKiBUaGlzIGZpbGUgaG9sZHMgYWxsIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGtuZnNkIHN5c2NhbGwgaW50ZXJmYWNlLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk3IE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgorICovCisKKyNpZm5kZWYgTkZTRF9TWVNDQUxMX0gKKyNkZWZpbmUgTkZTRF9TWVNDQUxMX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmZzZC9leHBvcnQuaD4KKworLyoKKyAqIFZlcnNpb24gb2YgdGhlIHN5c2NhbGwgaW50ZXJmYWNlCisgKi8KKyNkZWZpbmUgTkZTQ1RMX1ZFUlNJT04JCTB4MDIwMQorCisvKgorICogVGhlc2UgYXJlIHRoZSBjb21tYW5kcyB1bmRlcnN0b29kIGJ5IG5mc2N0bCgpLgorICovCisjZGVmaW5lIE5GU0NUTF9TVkMJCTAJLyogVGhpcyBpcyBhIHNlcnZlciBwcm9jZXNzLiAqLworI2RlZmluZSBORlNDVExfQUREQ0xJRU5UCTEJLyogQWRkIGFuIE5GUyBjbGllbnQuICovCisjZGVmaW5lIE5GU0NUTF9ERUxDTElFTlQJMgkvKiBSZW1vdmUgYW4gTkZTIGNsaWVudC4gKi8KKyNkZWZpbmUgTkZTQ1RMX0VYUE9SVAkJMwkvKiBleHBvcnQgYSBmaWxlIHN5c3RlbS4gKi8KKyNkZWZpbmUgTkZTQ1RMX1VORVhQT1JUCQk0CS8qIHVuZXhwb3J0IGEgZmlsZSBzeXN0ZW0uICovCisvKiNkZWZpbmUgTkZTQ1RMX1VHSURVUERBVEUJNQkvICogdXBkYXRlIGEgY2xpZW50J3MgdWlkL2dpZCBtYXAuIERJU0NBUkRFRCAqLworLyojZGVmaW5lIE5GU0NUTF9HRVRGSAkJNgkvICogZ2V0IGFuIGZoIGJ5IGlubyBESVNDQVJERUQgKi8KKyNkZWZpbmUgTkZTQ1RMX0dFVEZECQk3CS8qIGdldCBhbiBmaCBieSBwYXRoICh1c2VkIGJ5IG1vdW50ZCkgKi8KKyNkZWZpbmUJTkZTQ1RMX0dFVEZTCQk4CS8qIGdldCBhbiBmaCBieSBwYXRoIHdpdGggbWF4IEZIIGxlbiAqLworCisvKiBTVkMgKi8KK3N0cnVjdCBuZnNjdGxfc3ZjIHsKKwl1bnNpZ25lZCBzaG9ydAkJc3ZjX3BvcnQ7CisJaW50CQkJc3ZjX250aHJlYWRzOworfTsKKworLyogQUREQ0xJRU5UL0RFTENMSUVOVCAqLworc3RydWN0IG5mc2N0bF9jbGllbnQgeworCWNoYXIJCQljbF9pZGVudFtORlNDTE5UX0lETUFYKzFdOworCWludAkJCWNsX25hZGRyOworCXN0cnVjdCBpbl9hZGRyCQljbF9hZGRybGlzdFtORlNDTE5UX0FERFJNQVhdOworCWludAkJCWNsX2Zoa2V5dHlwZTsKKwlpbnQJCQljbF9maGtleWxlbjsKKwl1bnNpZ25lZCBjaGFyCQljbF9maGtleVtORlNDTE5UX0tFWU1BWF07Cit9OworCisvKiBFWFBPUlQvVU5FWFBPUlQgKi8KK3N0cnVjdCBuZnNjdGxfZXhwb3J0IHsKKwljaGFyCQkJZXhfY2xpZW50W05GU0NMTlRfSURNQVgrMV07CisJY2hhcgkJCWV4X3BhdGhbTkZTX01BWFBBVEhMRU4rMV07CisJX19rZXJuZWxfb2xkX2Rldl90CWV4X2RldjsKKwlfX2tlcm5lbF9pbm9fdAkJZXhfaW5vOworCWludAkJCWV4X2ZsYWdzOworCV9fa2VybmVsX3VpZF90CQlleF9hbm9uX3VpZDsKKwlfX2tlcm5lbF9naWRfdAkJZXhfYW5vbl9naWQ7Cit9OworCisvKiBHRVRGRCAqLworc3RydWN0IG5mc2N0bF9mZHBhcm0geworCXN0cnVjdCBzb2NrYWRkcgkJZ2RfYWRkcjsKKwljaGFyCQkJZ2RfcGF0aFtORlNfTUFYUEFUSExFTisxXTsKKwlpbnQJCQlnZF92ZXJzaW9uOworfTsKKworLyogR0VURlMgLSBHRVQgRmlsZWhhbmRsZSB3aXRoIFNpemUgKi8KK3N0cnVjdCBuZnNjdGxfZnNwYXJtIHsKKwlzdHJ1Y3Qgc29ja2FkZHIJCWdkX2FkZHI7CisJY2hhcgkJCWdkX3BhdGhbTkZTX01BWFBBVEhMRU4rMV07CisJaW50CQkJZ2RfbWF4bGVuOworfTsKKworLyoKKyAqIFRoaXMgaXMgdGhlIGFyZ3VtZW50IHVuaW9uLgorICovCitzdHJ1Y3QgbmZzY3RsX2FyZyB7CisJaW50CQkJY2FfdmVyc2lvbjsJLyogc2FmZWd1YXJkICovCisJdW5pb24geworCQlzdHJ1Y3QgbmZzY3RsX3N2Ywl1X3N2YzsKKwkJc3RydWN0IG5mc2N0bF9jbGllbnQJdV9jbGllbnQ7CisJCXN0cnVjdCBuZnNjdGxfZXhwb3J0CXVfZXhwb3J0OworCQlzdHJ1Y3QgbmZzY3RsX2ZkcGFybQl1X2dldGZkOworCQlzdHJ1Y3QgbmZzY3RsX2ZzcGFybQl1X2dldGZzOworCQkvKgorCQkgKiBUaGUgZm9sbG93aW5nIGR1bW15IG1lbWJlciBpcyBuZWVkZWQgdG8gcHJlc2VydmUgYmluYXJ5IGNvbXBhdGliaWxpdHkKKwkJICogb24gcGxhdGZvcm1zIHdoZXJlIGFsaWdub2Yodm9pZCopPmFsaWdub2YoaW50KS4gIEl0J3MgbmVlZGVkIGJlY2F1c2UKKwkJICogdGhpcyB1bmlvbiB1c2VkIHRvIGNvbnRhaW4gYSBtZW1iZXIgKHVfdW1hcCkgd2hpY2ggY29udGFpbmVkIGEKKwkJICogcG9pbnRlci4KKwkJICovCisJCXZvaWQgKnVfcHRyOworCX0gdTsKKyNkZWZpbmUgY2Ffc3ZjCQl1LnVfc3ZjCisjZGVmaW5lIGNhX2NsaWVudAl1LnVfY2xpZW50CisjZGVmaW5lIGNhX2V4cG9ydAl1LnVfZXhwb3J0CisjZGVmaW5lIGNhX2dldGZkCXUudV9nZXRmZAorI2RlZmluZQljYV9nZXRmcwl1LnVfZ2V0ZnMKK307CisKK3VuaW9uIG5mc2N0bF9yZXMgeworCV9fdTgJCQljcl9nZXRmaFtORlNfRkhTSVpFXTsKKwlzdHJ1Y3Qga25mc2RfZmgJCWNyX2dldGZzOworfTsKKworCisjZW5kaWYgLyogTkZTRF9TWVNDQUxMX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9ubDgwMjExLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiODc3YjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oCkBAIC0wLDAgKzEsMTgzMiBAQAorI2lmbmRlZiBfX0xJTlVYX05MODAyMTFfSAorI2RlZmluZSBfX0xJTlVYX05MODAyMTFfSAorLyoKKyAqIDgwMi4xMSBuZXRsaW5rIGludGVyZmFjZSBwdWJsaWMgaGVhZGVyCisgKgorICogQ29weXJpZ2h0IDIwMDYtMjAxMCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDggTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwOCBMdWlzIENhcmxvcyBDb2JvIDxsdWlzY2FAY296eWJpdC5jb20+CisgKiBDb3B5cmlnaHQgMjAwOCBNaWNoYWVsIEJ1ZXNjaCA8bWJAYnUzc2NoLmRlPgorICogQ29weXJpZ2h0IDIwMDgsIDIwMDkgTHVpcyBSLiBSb2RyaWd1ZXogPGxyb2RyaWd1ZXpAYXRoZXJvcy5jb20+CisgKiBDb3B5cmlnaHQgMjAwOCBKb3VuaSBNYWxpbmVuIDxqb3VuaS5tYWxpbmVuQGF0aGVyb3MuY29tPgorICogQ29weXJpZ2h0IDIwMDggQ29saW4gTWNDYWJlIDxjb2xpbkBjb3p5Yml0LmNvbT4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qKgorICogRE9DOiBTdGF0aW9uIGhhbmRsaW5nCisgKgorICogU3RhdGlvbnMgYXJlIGFkZGVkIHBlciBpbnRlcmZhY2UsIGJ1dCBhIHNwZWNpYWwgY2FzZSBleGlzdHMgd2l0aCBWTEFOCisgKiBpbnRlcmZhY2VzLiBXaGVuIGEgc3RhdGlvbiBpcyBib3VuZCB0byBhbiBBUCBpbnRlcmZhY2UsIGl0IG1heSBiZSBtb3ZlZAorICogaW50byBhIFZMQU4gaWRlbnRpZmllZCBieSBhIFZMQU4gaW50ZXJmYWNlIGluZGV4ICglTkw4MDIxMV9BVFRSX1NUQV9WTEFOKS4KKyAqIFRoZSBzdGF0aW9uIGlzIHN0aWxsIGFzc3VtZWQgdG8gYmVsb25nIHRvIHRoZSBBUCBpbnRlcmZhY2UgaXQgd2FzIGFkZGVkCisgKiB0by4KKyAqCisgKiBUT0RPOiBuZWVkIG1vcmUgaW5mbz8KKyAqLworCisvKioKKyAqIERPQzogRnJhbWUgdHJhbnNtaXNzaW9uL3JlZ2lzdHJhdGlvbiBzdXBwb3J0CisgKgorICogRnJhbWUgdHJhbnNtaXNzaW9uIGFuZCByZWdpc3RyYXRpb24gc3VwcG9ydCBleGlzdHMgdG8gYWxsb3cgdXNlcnNwYWNlCisgKiBtYW5hZ2VtZW50IGVudGl0aWVzIHN1Y2ggYXMgd3BhX3N1cHBsaWNhbnQgcmVhY3QgdG8gbWFuYWdlbWVudCBmcmFtZXMKKyAqIHRoYXQgYXJlIG5vdCBiZWluZyBoYW5kbGVkIGJ5IHRoZSBrZXJuZWwuIFRoaXMgaW5jbHVkZXMsIGZvciBleGFtcGxlLAorICogY2VydGFpbiBjbGFzc2VzIG9mIGFjdGlvbiBmcmFtZXMgdGhhdCBjYW5ub3QgYmUgaGFuZGxlZCBpbiB0aGUga2VybmVsCisgKiBmb3IgdmFyaW91cyByZWFzb25zLgorICoKKyAqIEZyYW1lIHJlZ2lzdHJhdGlvbiBpcyBkb25lIG9uIGEgcGVyLWludGVyZmFjZSBiYXNpcyBhbmQgcmVnaXN0cmF0aW9ucworICogY2Fubm90IGJlIHJlbW92ZWQgb3RoZXIgdGhhbiBieSBjbG9zaW5nIHRoZSBzb2NrZXQuIEl0IGlzIHBvc3NpYmxlIHRvCisgKiBzcGVjaWZ5IGEgcmVnaXN0cmF0aW9uIGZpbHRlciB0byByZWdpc3RlciwgZm9yIGV4YW1wbGUsIG9ubHkgZm9yIGEKKyAqIGNlcnRhaW4gdHlwZSBvZiBhY3Rpb24gZnJhbWUuIEluIHBhcnRpY3VsYXIgd2l0aCBhY3Rpb24gZnJhbWVzLCB0aG9zZQorICogdGhhdCB1c2Vyc3BhY2UgcmVnaXN0ZXJzIGZvciB3aWxsIG5vdCBiZSByZXR1cm5lZCBhcyB1bmhhbmRsZWQgYnkgdGhlCisgKiBkcml2ZXIsIHNvIHRoYXQgdGhlIHJlZ2lzdGVyZWQgYXBwbGljYXRpb24gaGFzIHRvIHRha2UgcmVzcG9uc2liaWxpdHkKKyAqIGZvciBkb2luZyB0aGF0LgorICoKKyAqIFRoZSB0eXBlIG9mIGZyYW1lIHRoYXQgY2FuIGJlIHJlZ2lzdGVyZWQgZm9yIGlzIGFsc28gZGVwZW5kZW50IG9uIHRoZQorICogZHJpdmVyIGFuZCBpbnRlcmZhY2UgdHlwZS4gVGhlIGZyYW1lIHR5cGVzIGFyZSBhZHZlcnRpc2VkIGluIHdpcGh5CisgKiBhdHRyaWJ1dGVzIHNvIGFwcGxpY2F0aW9ucyBrbm93IHdoYXQgdG8gZXhwZWN0LgorICoKKyAqIE5PVEU6IFdoZW4gYW4gaW50ZXJmYWNlIGNoYW5nZXMgdHlwZSB3aGlsZSByZWdpc3RyYXRpb25zIGFyZSBhY3RpdmUsCisgKiAgICAgICB0aGVzZSByZWdpc3RyYXRpb25zIGFyZSBpZ25vcmVkIHVudGlsIHRoZSBpbnRlcmZhY2UgdHlwZSBpcworICogICAgICAgY2hhbmdlZCBhZ2Fpbi4gVGhpcyBtZWFucyB0aGF0IGNoYW5naW5nIHRoZSBpbnRlcmZhY2UgdHlwZSBjYW4KKyAqICAgICAgIGxlYWQgdG8gYSBzaXR1YXRpb24gdGhhdCBjb3VsZG4ndCBvdGhlcndpc2UgYmUgcHJvZHVjZWQsIGJ1dAorICogICAgICAgYW55IHN1Y2ggcmVnaXN0cmF0aW9ucyB3aWxsIGJlIGRvcm1hbnQgaW4gdGhlIHNlbnNlIHRoYXQgdGhleQorICogICAgICAgd2lsbCBub3QgYmUgc2VydmljZWQsIGkuZS4gdGhleSB3aWxsIG5vdCByZWNlaXZlIGFueSBmcmFtZXMuCisgKgorICogRnJhbWUgdHJhbnNtaXNzaW9uIGFsbG93cyB1c2Vyc3BhY2UgdG8gc2VuZCBmb3IgZXhhbXBsZSB0aGUgcmVxdWlyZWQKKyAqIHJlc3BvbnNlcyB0byBhY3Rpb24gZnJhbWVzLiBJdCBpcyBzdWJqZWN0IHRvIHNvbWUgc2FuaXR5IGNoZWNraW5nLAorICogYnV0IG1hbnkgZnJhbWVzIGNhbiBiZSB0cmFuc21pdHRlZC4gV2hlbiBhIGZyYW1lIHdhcyB0cmFuc21pdHRlZCwgaXRzCisgKiBzdGF0dXMgaXMgaW5kaWNhdGVkIHRvIHRoZSBzZW5kaW5nIHNvY2tldC4KKyAqCisgKiBGb3IgbW9yZSB0ZWNobmljYWwgZGV0YWlscywgc2VlIHRoZSBjb3JyZXNwb25kaW5nIGNvbW1hbmQgZGVzY3JpcHRpb25zCisgKiBiZWxvdy4KKyAqLworCisvKioKKyAqIGVudW0gbmw4MDIxMV9jb21tYW5kcyAtIHN1cHBvcnRlZCBubDgwMjExIGNvbW1hbmRzCisgKgorICogQE5MODAyMTFfQ01EX1VOU1BFQzogdW5zcGVjaWZpZWQgY29tbWFuZCB0byBjYXRjaCBlcnJvcnMKKyAqCisgKiBATkw4MDIxMV9DTURfR0VUX1dJUEhZOiByZXF1ZXN0IGluZm9ybWF0aW9uIGFib3V0IGEgd2lwaHkgb3IgZHVtcCByZXF1ZXN0CisgKgl0byBnZXQgYSBsaXN0IG9mIGFsbCBwcmVzZW50IHdpcGh5cy4KKyAqIEBOTDgwMjExX0NNRF9TRVRfV0lQSFk6IHNldCB3aXBoeSBwYXJhbWV0ZXJzLCBuZWVkcyAlTkw4MDIxMV9BVFRSX1dJUEhZIG9yCisgKgklTkw4MDIxMV9BVFRSX0lGSU5ERVg7IGNhbiBiZSB1c2VkIHRvIHNldCAlTkw4MDIxMV9BVFRSX1dJUEhZX05BTUUsCisgKgklTkw4MDIxMV9BVFRSX1dJUEhZX1RYUV9QQVJBTVMsICVOTDgwMjExX0FUVFJfV0lQSFlfRlJFUSwKKyAqCSVOTDgwMjExX0FUVFJfV0lQSFlfQ0hBTk5FTF9UWVBFLCAlTkw4MDIxMV9BVFRSX1dJUEhZX1JFVFJZX1NIT1JULAorICoJJU5MODAyMTFfQVRUUl9XSVBIWV9SRVRSWV9MT05HLCAlTkw4MDIxMV9BVFRSX1dJUEhZX0ZSQUdfVEhSRVNIT0xELAorICoJYW5kL29yICVOTDgwMjExX0FUVFJfV0lQSFlfUlRTX1RIUkVTSE9MRC4KKyAqCUhvd2V2ZXIsIGZvciBzZXR0aW5nIHRoZSBjaGFubmVsLCBzZWUgJU5MODAyMTFfQ01EX1NFVF9DSEFOTkVMCisgKglpbnN0ZWFkLCB0aGUgc3VwcG9ydCBoZXJlIGlzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG9ubHkuCisgKiBATkw4MDIxMV9DTURfTkVXX1dJUEhZOiBOZXdseSBjcmVhdGVkIHdpcGh5LCByZXNwb25zZSB0byBnZXQgcmVxdWVzdAorICoJb3IgcmVuYW1lIG5vdGlmaWNhdGlvbi4gSGFzIGF0dHJpYnV0ZXMgJU5MODAyMTFfQVRUUl9XSVBIWSBhbmQKKyAqCSVOTDgwMjExX0FUVFJfV0lQSFlfTkFNRS4KKyAqIEBOTDgwMjExX0NNRF9ERUxfV0lQSFk6IFdpcGh5IGRlbGV0ZWQuIEhhcyBhdHRyaWJ1dGVzCisgKgklTkw4MDIxMV9BVFRSX1dJUEhZIGFuZCAlTkw4MDIxMV9BVFRSX1dJUEhZX05BTUUuCisgKgorICogQE5MODAyMTFfQ01EX0dFVF9JTlRFUkZBQ0U6IFJlcXVlc3QgYW4gaW50ZXJmYWNlJ3MgY29uZmlndXJhdGlvbjsKKyAqCWVpdGhlciBhIGR1bXAgcmVxdWVzdCBvbiBhICVOTDgwMjExX0FUVFJfV0lQSFkgb3IgYSBzcGVjaWZpYyBnZXQKKyAqCW9uIGFuICVOTDgwMjExX0FUVFJfSUZJTkRFWCBpcyBzdXBwb3J0ZWQuCisgKiBATkw4MDIxMV9DTURfU0VUX0lOVEVSRkFDRTogU2V0IHR5cGUgb2YgYSB2aXJ0dWFsIGludGVyZmFjZSwgcmVxdWlyZXMKKyAqCSVOTDgwMjExX0FUVFJfSUZJTkRFWCBhbmQgJU5MODAyMTFfQVRUUl9JRlRZUEUuCisgKiBATkw4MDIxMV9DTURfTkVXX0lOVEVSRkFDRTogTmV3bHkgY3JlYXRlZCB2aXJ0dWFsIGludGVyZmFjZSBvciByZXNwb25zZQorICoJdG8gJU5MODAyMTFfQ01EX0dFVF9JTlRFUkZBQ0UuIEhhcyAlTkw4MDIxMV9BVFRSX0lGSU5ERVgsCisgKgklTkw4MDIxMV9BVFRSX1dJUEhZIGFuZCAlTkw4MDIxMV9BVFRSX0lGVFlQRSBhdHRyaWJ1dGVzLiBDYW4gYWxzbworICoJYmUgc2VudCBmcm9tIHVzZXJzcGFjZSB0byByZXF1ZXN0IGNyZWF0aW9uIG9mIGEgbmV3IHZpcnR1YWwgaW50ZXJmYWNlLAorICoJdGhlbiByZXF1aXJlcyBhdHRyaWJ1dGVzICVOTDgwMjExX0FUVFJfV0lQSFksICVOTDgwMjExX0FUVFJfSUZUWVBFIGFuZAorICoJJU5MODAyMTFfQVRUUl9JRk5BTUUuCisgKiBATkw4MDIxMV9DTURfREVMX0lOVEVSRkFDRTogVmlydHVhbCBpbnRlcmZhY2Ugd2FzIGRlbGV0ZWQsIGhhcyBhdHRyaWJ1dGVzCisgKgklTkw4MDIxMV9BVFRSX0lGSU5ERVggYW5kICVOTDgwMjExX0FUVFJfV0lQSFkuIENhbiBhbHNvIGJlIHNlbnQgZnJvbQorICoJdXNlcnNwYWNlIHRvIHJlcXVlc3QgZGVsZXRpb24gb2YgYSB2aXJ0dWFsIGludGVyZmFjZSwgdGhlbiByZXF1aXJlcworICoJYXR0cmlidXRlICVOTDgwMjExX0FUVFJfSUZJTkRFWC4KKyAqCisgKiBATkw4MDIxMV9DTURfR0VUX0tFWTogR2V0IHNlcXVlbmNlIGNvdW50ZXIgaW5mb3JtYXRpb24gZm9yIGEga2V5IHNwZWNpZmllZAorICoJYnkgJU5MODAyMTFfQVRUUl9LRVlfSURYIGFuZC9vciAlTkw4MDIxMV9BVFRSX01BQy4KKyAqIEBOTDgwMjExX0NNRF9TRVRfS0VZOiBTZXQga2V5IGF0dHJpYnV0ZXMgJU5MODAyMTFfQVRUUl9LRVlfREVGQVVMVCwKKyAqCSVOTDgwMjExX0FUVFJfS0VZX0RFRkFVTFRfTUdNVCwgb3IgJU5MODAyMTFfQVRUUl9LRVlfVEhSRVNIT0xELgorICogQE5MODAyMTFfQ01EX05FV19LRVk6IGFkZCBhIGtleSB3aXRoIGdpdmVuICVOTDgwMjExX0FUVFJfS0VZX0RBVEEsCisgKgklTkw4MDIxMV9BVFRSX0tFWV9JRFgsICVOTDgwMjExX0FUVFJfTUFDLCAlTkw4MDIxMV9BVFRSX0tFWV9DSVBIRVIsCisgKglhbmQgJU5MODAyMTFfQVRUUl9LRVlfU0VRIGF0dHJpYnV0ZXMuCisgKiBATkw4MDIxMV9DTURfREVMX0tFWTogZGVsZXRlIGEga2V5IGlkZW50aWZpZWQgYnkgJU5MODAyMTFfQVRUUl9LRVlfSURYCisgKglvciAlTkw4MDIxMV9BVFRSX01BQy4KKyAqCisgKiBATkw4MDIxMV9DTURfR0VUX0JFQUNPTjogcmV0cmlldmUgYmVhY29uIGluZm9ybWF0aW9uIChyZXR1cm5lZCBpbiBhCisgKgklTkw4MDIyMl9DTURfTkVXX0JFQUNPTiBtZXNzYWdlKQorICogQE5MODAyMTFfQ01EX1NFVF9CRUFDT046IHNldCB0aGUgYmVhY29uIG9uIGFuIGFjY2VzcyBwb2ludCBpbnRlcmZhY2UKKyAqCXVzaW5nIHRoZSAlTkw4MDIxMV9BVFRSX0JFQUNPTl9JTlRFUlZBTCwgJU5MODAyMTFfQVRUUl9EVElNX1BFUklPRCwKKyAqCSVOTDgwMjExX0FUVFJfQkVBQ09OX0hFQUQgYW5kICVOTDgwMjExX0FUVFJfQkVBQ09OX1RBSUwgYXR0cmlidXRlcy4KKyAqIEBOTDgwMjExX0NNRF9ORVdfQkVBQ09OOiBhZGQgYSBuZXcgYmVhY29uIHRvIGFuIGFjY2VzcyBwb2ludCBpbnRlcmZhY2UsCisgKglwYXJhbWV0ZXJzIGFyZSBsaWtlIGZvciAlTkw4MDIxMV9DTURfU0VUX0JFQUNPTi4KKyAqIEBOTDgwMjExX0NNRF9ERUxfQkVBQ09OOiByZW1vdmUgdGhlIGJlYWNvbiwgc3RvcCBzZW5kaW5nIGl0CisgKgorICogQE5MODAyMTFfQ01EX0dFVF9TVEFUSU9OOiBHZXQgc3RhdGlvbiBhdHRyaWJ1dGVzIGZvciBzdGF0aW9uIGlkZW50aWZpZWQgYnkKKyAqCSVOTDgwMjExX0FUVFJfTUFDIG9uIHRoZSBpbnRlcmZhY2UgaWRlbnRpZmllZCBieSAlTkw4MDIxMV9BVFRSX0lGSU5ERVguCisgKiBATkw4MDIxMV9DTURfU0VUX1NUQVRJT046IFNldCBzdGF0aW9uIGF0dHJpYnV0ZXMgZm9yIHN0YXRpb24gaWRlbnRpZmllZCBieQorICoJJU5MODAyMTFfQVRUUl9NQUMgb24gdGhlIGludGVyZmFjZSBpZGVudGlmaWVkIGJ5ICVOTDgwMjExX0FUVFJfSUZJTkRFWC4KKyAqIEBOTDgwMjExX0NNRF9ORVdfU1RBVElPTjogQWRkIGEgc3RhdGlvbiB3aXRoIGdpdmVuIGF0dHJpYnV0ZXMgdG8gdGhlCisgKgl0aGUgaW50ZXJmYWNlIGlkZW50aWZpZWQgYnkgJU5MODAyMTFfQVRUUl9JRklOREVYLgorICogQE5MODAyMTFfQ01EX0RFTF9TVEFUSU9OOiBSZW1vdmUgYSBzdGF0aW9uIGlkZW50aWZpZWQgYnkgJU5MODAyMTFfQVRUUl9NQUMKKyAqCW9yLCBpZiBubyBNQUMgYWRkcmVzcyBnaXZlbiwgYWxsIHN0YXRpb25zLCBvbiB0aGUgaW50ZXJmYWNlIGlkZW50aWZpZWQKKyAqCWJ5ICVOTDgwMjExX0FUVFJfSUZJTkRFWC4KKyAqCisgKiBATkw4MDIxMV9DTURfR0VUX01QQVRIOiBHZXQgbWVzaCBwYXRoIGF0dHJpYnV0ZXMgZm9yIG1lc2ggcGF0aCB0bworICogCWRlc3RpbmF0aW9uICVOTDgwMjExX0FUVFJfTUFDIG9uIHRoZSBpbnRlcmZhY2UgaWRlbnRpZmllZCBieQorICogCSVOTDgwMjExX0FUVFJfSUZJTkRFWC4KKyAqIEBOTDgwMjExX0NNRF9TRVRfTVBBVEg6ICBTZXQgbWVzaCBwYXRoIGF0dHJpYnV0ZXMgZm9yIG1lc2ggcGF0aCB0bworICogCWRlc3RpbmF0aW9uICVOTDgwMjExX0FUVFJfTUFDIG9uIHRoZSBpbnRlcmZhY2UgaWRlbnRpZmllZCBieQorICogCSVOTDgwMjExX0FUVFJfSUZJTkRFWC4KKyAqIEBOTDgwMjExX0NNRF9ORVdfUEFUSDogQWRkIGEgbWVzaCBwYXRoIHdpdGggZ2l2ZW4gYXR0cmlidXRlcyB0byB0aGUKKyAqCXRoZSBpbnRlcmZhY2UgaWRlbnRpZmllZCBieSAlTkw4MDIxMV9BVFRSX0lGSU5ERVguCisgKiBATkw4MDIxMV9DTURfREVMX1BBVEg6IFJlbW92ZSBhIG1lc2ggcGF0aCBpZGVudGlmaWVkIGJ5ICVOTDgwMjExX0FUVFJfTUFDCisgKglvciwgaWYgbm8gTUFDIGFkZHJlc3MgZ2l2ZW4sIGFsbCBtZXNoIHBhdGhzLCBvbiB0aGUgaW50ZXJmYWNlIGlkZW50aWZpZWQKKyAqCWJ5ICVOTDgwMjExX0FUVFJfSUZJTkRFWC4KKyAqIEBOTDgwMjExX0NNRF9TRVRfQlNTOiBTZXQgQlNTIGF0dHJpYnV0ZXMgZm9yIEJTUyBpZGVudGlmaWVkIGJ5CisgKgklTkw4MDIxMV9BVFRSX0lGSU5ERVguCisgKgorICogQE5MODAyMTFfQ01EX0dFVF9SRUc6IGFzayB0aGUgd2lyZWxlc3MgY29yZSB0byBzZW5kIHVzIGl0cyBjdXJyZW50bHkgc2V0CisgKiAJcmVndWxhdG9yeSBkb21haW4uCisgKiBATkw4MDIxMV9DTURfU0VUX1JFRzogU2V0IGN1cnJlbnQgcmVndWxhdG9yeSBkb21haW4uIENSREEgc2VuZHMgdGhpcyBjb21tYW5kCisgKglhZnRlciBiZWluZyBxdWVyaWVkIGJ5IHRoZSBrZXJuZWwuIENSREEgcmVwbGllcyBieSBzZW5kaW5nIGEgcmVndWxhdG9yeQorICoJZG9tYWluIHN0cnVjdHVyZSB3aGljaCBjb25zaXN0cyBvZiAlTkw4MDIxMV9BVFRSX1JFR19BTFBIQSBzZXQgdG8gb3VyCisgKgljdXJyZW50IGFscGhhMiBpZiBpdCBmb3VuZCBhIG1hdGNoLiBJdCBhbHNvIHByb3ZpZGVzCisgKiAJTkw4MDIxMV9BVFRSX1JFR19SVUxFX0ZMQUdTLCBhbmQgYSBzZXQgb2YgcmVndWxhdG9yeSBydWxlcy4gRWFjaAorICogCXJlZ3VsYXRvcnkgcnVsZSBpcyBhIG5lc3RlZCBzZXQgb2YgYXR0cmlidXRlcyAgZ2l2ZW4gYnkKKyAqIAklTkw4MDIxMV9BVFRSX1JFR19SVUxFX0ZSRVFfW1NUQVJUfEVORF0gYW5kCisgKiAJJU5MODAyMTFfQVRUUl9GUkVRX1JBTkdFX01BWF9CVyB3aXRoIGFuIGF0dGFjaGVkIHBvd2VyIHJ1bGUgZ2l2ZW4gYnkKKyAqIAklTkw4MDIxMV9BVFRSX1JFR19SVUxFX1BPV0VSX01BWF9BTlRfR0FJTiBhbmQKKyAqIAklTkw4MDIxMV9BVFRSX1JFR19SVUxFX1BPV0VSX01BWF9FSVJQLgorICogQE5MODAyMTFfQ01EX1JFUV9TRVRfUkVHOiBhc2sgdGhlIHdpcmVsZXNzIGNvcmUgdG8gc2V0IHRoZSByZWd1bGF0b3J5IGRvbWFpbgorICogCXRvIHRoZSBzcGVjaWZpZWQgSVNPL0lFQyAzMTY2LTEgYWxwaGEyIGNvdW50cnkgY29kZS4gVGhlIGNvcmUgd2lsbAorICogCXN0b3JlIHRoaXMgYXMgYSB2YWxpZCByZXF1ZXN0IGFuZCB0aGVuIHF1ZXJ5IHVzZXJzcGFjZSBmb3IgaXQuCisgKgorICogQE5MODAyMTFfQ01EX0dFVF9NRVNIX1BBUkFNUzogR2V0IG1lc2ggbmV0d29ya2luZyBwcm9wZXJ0aWVzIGZvciB0aGUKKyAqCWludGVyZmFjZSBpZGVudGlmaWVkIGJ5ICVOTDgwMjExX0FUVFJfSUZJTkRFWAorICoKKyAqIEBOTDgwMjExX0NNRF9TRVRfTUVTSF9QQVJBTVM6IFNldCBtZXNoIG5ldHdvcmtpbmcgcHJvcGVydGllcyBmb3IgdGhlCisgKiAgICAgIGludGVyZmFjZSBpZGVudGlmaWVkIGJ5ICVOTDgwMjExX0FUVFJfSUZJTkRFWAorICoKKyAqIEBOTDgwMjExX0NNRF9TRVRfTUdNVF9FWFRSQV9JRTogU2V0IGV4dHJhIElFcyBmb3IgbWFuYWdlbWVudCBmcmFtZXMuIFRoZQorICoJaW50ZXJmYWNlIGlzIGlkZW50aWZpZWQgd2l0aCAlTkw4MDIxMV9BVFRSX0lGSU5ERVggYW5kIHRoZSBtYW5hZ2VtZW50CisgKglmcmFtZSBzdWJ0eXBlIHdpdGggJU5MODAyMTFfQVRUUl9NR01UX1NVQlRZUEUuIFRoZSBleHRyYSBJRSBkYXRhIHRvIGJlCisgKglhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBzcGVjaWZpZWQgbWFuYWdlbWVudCBmcmFtZSBpcyBzcGVjaWZpZWQgd2l0aAorICoJJU5MODAyMTFfQVRUUl9JRS4gSWYgdGhlIGNvbW1hbmQgc3VjY2VlZHMsIHRoZSByZXF1ZXN0ZWQgZGF0YSB3aWxsIGJlCisgKglhZGRlZCB0byBhbGwgc3BlY2lmaWVkIG1hbmFnZW1lbnQgZnJhbWVzIGdlbmVyYXRlZCBieQorICoJa2VybmVsL2Zpcm13YXJlL2RyaXZlci4KKyAqCU5vdGU6IFRoaXMgY29tbWFuZCBoYXMgYmVlbiByZW1vdmVkIGFuZCBpdCBpcyBvbmx5IHJlc2VydmVkIGF0IHRoaXMKKyAqCXBvaW50IHRvIGF2b2lkIHJlLXVzaW5nIGV4aXN0aW5nIGNvbW1hbmQgbnVtYmVyLiBUaGUgZnVuY3Rpb25hbGl0eSB0aGlzCisgKgljb21tYW5kIHdhcyBwbGFubmVkIGZvciBoYXMgYmVlbiBwcm92aWRlZCB3aXRoIGNsZWFuZXIgZGVzaWduIHdpdGggdGhlCisgKglvcHRpb24gdG8gc3BlY2lmeSBhZGRpdGlvbmFsIElFcyBpbiBOTDgwMjExX0NNRF9UUklHR0VSX1NDQU4sCisgKglOTDgwMjExX0NNRF9BVVRIRU5USUNBVEUsIE5MODAyMTFfQ01EX0FTU09DSUFURSwKKyAqCU5MODAyMTFfQ01EX0RFQVVUSEVOVElDQVRFLCBhbmQgTkw4MDIxMV9DTURfRElTQVNTT0NJQVRFLgorICoKKyAqIEBOTDgwMjExX0NNRF9HRVRfU0NBTjogZ2V0IHNjYW4gcmVzdWx0cworICogQE5MODAyMTFfQ01EX1RSSUdHRVJfU0NBTjogdHJpZ2dlciBhIG5ldyBzY2FuIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMKKyAqIEBOTDgwMjExX0NNRF9ORVdfU0NBTl9SRVNVTFRTOiBzY2FuIG5vdGlmaWNhdGlvbiAoYXMgYSByZXBseSB0bworICoJTkw4MDIxMV9DTURfR0VUX1NDQU4gYW5kIG9uIHRoZSAic2NhbiIgbXVsdGljYXN0IGdyb3VwKQorICogQE5MODAyMTFfQ01EX1NDQU5fQUJPUlRFRDogc2NhbiB3YXMgYWJvcnRlZCwgZm9yIHVuc3BlY2lmaWVkIHJlYXNvbnMsCisgKglwYXJ0aWFsIHNjYW4gcmVzdWx0cyBtYXkgYmUgYXZhaWxhYmxlCisgKgorICogQE5MODAyMTFfQ01EX0dFVF9TVVJWRVk6IGdldCBzdXJ2ZXkgcmVzdWxzLCBlLmcuIGNoYW5uZWwgb2NjdXBhdGlvbgorICogICAgICBvciBub2lzZSBsZXZlbAorICogQE5MODAyMTFfQ01EX05FV19TVVJWRVlfUkVTVUxUUzogc3VydmV5IGRhdGEgbm90aWZpY2F0aW9uIChhcyBhIHJlcGx5IHRvCisgKglOTDgwMjExX0NNRF9HRVRfU1VSVkVZIGFuZCBvbiB0aGUgInNjYW4iIG11bHRpY2FzdCBncm91cCkKKyAqCisgKiBATkw4MDIxMV9DTURfUkVHX0NIQU5HRTogaW5kaWNhdGVzIHRvIHVzZXJzcGFjZSB0aGUgcmVndWxhdG9yeSBkb21haW4KKyAqIAloYXMgYmVlbiBjaGFuZ2VkIGFuZCBwcm92aWRlcyBkZXRhaWxzIG9mIHRoZSByZXF1ZXN0IGluZm9ybWF0aW9uCisgKiAJdGhhdCBjYXVzZWQgdGhlIGNoYW5nZSBzdWNoIGFzIHdobyBpbml0aWF0ZWQgdGhlIHJlZ3VsYXRvcnkgcmVxdWVzdAorICogCSglTkw4MDIxMV9BVFRSX1JFR19JTklUSUFUT1IpLCB0aGUgd2lwaHlfaWR4CisgKiAJKCVOTDgwMjExX0FUVFJfUkVHX0FMUEhBMikgb24gd2hpY2ggdGhlIHJlcXVlc3Qgd2FzIG1hZGUgZnJvbSBpZgorICogCXRoZSBpbml0aWF0b3Igd2FzICVOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSBvcgorICogCSVOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSLCB0aGUgdHlwZSBvZiByZWd1bGF0b3J5IGRvbWFpbgorICogCXNldCAoJU5MODAyMTFfQVRUUl9SRUdfVFlQRSksIGlmIHRoZSB0eXBlIG9mIHJlZ3VsYXRvcnkgZG9tYWluIGlzCisgKiAJJU5MODAyMTFfUkVHX1RZUEVfQ09VTlRSWSB0aGUgYWxwaGEyIHRvIHdoaWNoIHdlIGhhdmUgbW92ZWQgb24KKyAqIAl0byAoJU5MODAyMTFfQVRUUl9SRUdfQUxQSEEyKS4KKyAqIEBOTDgwMjExX0NNRF9SRUdfQkVBQ09OX0hJTlQ6IGluZGljYXRlcyB0byB1c2Vyc3BhY2UgdGhhdCBhbiBBUCBiZWFjb24KKyAqIAloYXMgYmVlbiBmb3VuZCB3aGlsZSB3b3JsZCByb2FtaW5nIHRodXMgZW5hYmxpbmcgYWN0aXZlIHNjYW4gb3IKKyAqIAlhbnkgbW9kZSBvZiBvcGVyYXRpb24gdGhhdCBpbml0aWF0ZXMgVFggKGJlYWNvbnMpIG9uIGEgY2hhbm5lbAorICogCXdoZXJlIHdlIHdvdWxkIG5vdCBoYXZlIGJlZW4gYWJsZSB0byBkbyBlaXRoZXIgYmVmb3JlLiBBcyBhbiBleGFtcGxlCisgKiAJaWYgeW91IGFyZSB3b3JsZCByb2FtaW5nIChyZWd1bGF0b3J5IGRvbWFpbiBzZXQgdG8gd29ybGQgb3IgaWYgeW91cgorICogCWRyaXZlciBpcyB1c2luZyBhIGN1c3RvbSB3b3JsZCByb2FtaW5nIHJlZ3VsYXRvcnkgZG9tYWluKSBhbmQgd2hpbGUKKyAqIAlkb2luZyBhIHBhc3NpdmUgc2NhbiBvbiB0aGUgNSBHSHogYmFuZCB5b3UgZmluZCBhbiBBUCB0aGVyZSAoaWYgbm90CisgKiAJb24gYSBERlMgY2hhbm5lbCkgeW91IHdpbGwgbm93IGJlIGFibGUgdG8gYWN0aXZlbHkgc2NhbiBmb3IgdGhhdCBBUAorICogCW9yIHVzZSBBUCBtb2RlIG9uIHlvdXIgY2FyZCBvbiB0aGF0IHNhbWUgY2hhbm5lbC4gTm90ZSB0aGF0IHRoaXMgd2lsbAorICogCW5ldmVyIGJlIHVzZWQgZm9yIGNoYW5uZWxzIDEtMTEgb24gdGhlIDIgR0h6IGJhbmQgYXMgdGhleSBhcmUgYWx3YXlzCisgKiAJZW5hYmxlZCB3b3JsZCB3aWRlLiBUaGlzIGJlYWNvbiBoaW50IGlzIG9ubHkgc2VudCBpZiB5b3VyIGRldmljZSBoYWQKKyAqIAllaXRoZXIgZGlzYWJsZWQgYWN0aXZlIHNjYW5uaW5nIG9yIGJlYWNvbmluZyBvbiBhIGNoYW5uZWwuIFdlIHNlbmQgdG8KKyAqIAl1c2Vyc3BhY2UgdGhlIHdpcGh5IG9uIHdoaWNoIHdlIHJlbW92ZWQgYSByZXN0cmljdGlvbiBmcm9tCisgKiAJKCVOTDgwMjExX0FUVFJfV0lQSFkpIGFuZCB0aGUgY2hhbm5lbCBvbiB3aGljaCB0aGlzIG9jY3VycmVkCisgKiAJYmVmb3JlICglTkw4MDIxMV9BVFRSX0ZSRVFfQkVGT1JFKSBhbmQgYWZ0ZXIgKCVOTDgwMjExX0FUVFJfRlJFUV9BRlRFUikKKyAqIAl0aGUgYmVhY29uIGhpbnQgd2FzIHByb2Nlc3NlZC4KKyAqCisgKiBATkw4MDIxMV9DTURfQVVUSEVOVElDQVRFOiBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGFuZCBub3RpZmljYXRpb24uCisgKglUaGlzIGNvbW1hbmQgaXMgdXNlZCBib3RoIGFzIGEgY29tbWFuZCAocmVxdWVzdCB0byBhdXRoZW50aWNhdGUpIGFuZAorICoJYXMgYW4gZXZlbnQgb24gdGhlICJtbG1lIiBtdWx0aWNhc3QgZ3JvdXAgaW5kaWNhdGluZyBjb21wbGV0aW9uIG9mIHRoZQorICoJYXV0aGVudGljYXRpb24gcHJvY2Vzcy4KKyAqCVdoZW4gdXNlZCBhcyBhIGNvbW1hbmQsICVOTDgwMjExX0FUVFJfSUZJTkRFWCBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZQorICoJaW50ZXJmYWNlLiAlTkw4MDIxMV9BVFRSX01BQyBpcyB1c2VkIHRvIHNwZWNpZnkgUGVlclNUQUFkZHJlc3MgKGFuZAorICoJQlNTSUQgaW4gY2FzZSBvZiBzdGF0aW9uIG1vZGUpLiAlTkw4MDIxMV9BVFRSX1NTSUQgaXMgdXNlZCB0byBzcGVjaWZ5CisgKgl0aGUgU1NJRCAobWFpbmx5IGZvciBhc3NvY2lhdGlvbiwgYnV0IGlzIGluY2x1ZGVkIGluIGF1dGhlbnRpY2F0aW9uCisgKglyZXF1ZXN0LCB0b28sIHRvIGhlbHAgQlNTIHNlbGVjdGlvbi4gJU5MODAyMTFfQVRUUl9XSVBIWV9GUkVRIGlzIHVzZWQKKyAqCXRvIHNwZWNpZnkgdGhlIGZyZXF1ZW5jZSBvZiB0aGUgY2hhbm5lbCBpbiBNSHouICVOTDgwMjExX0FUVFJfQVVUSF9UWVBFCisgKglpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGF1dGhlbnRpY2F0aW9uIHR5cGUuICVOTDgwMjExX0FUVFJfSUUgaXMgdXNlZCB0bworICoJZGVmaW5lIElFcyAoVmVuZG9yU3BlY2lmaWNJbmZvLCBidXQgYWxzbyBpbmNsdWRpbmcgUlNOIElFIGFuZCBGVCBJRXMpCisgKgl0byBiZSBhZGRlZCB0byB0aGUgZnJhbWUuCisgKglXaGVuIHVzZWQgYXMgYW4gZXZlbnQsIHRoaXMgcmVwb3J0cyByZWNlcHRpb24gb2YgYW4gQXV0aGVudGljYXRpb24KKyAqCWZyYW1lIGluIHN0YXRpb24gYW5kIElCU1MgbW9kZXMgd2hlbiB0aGUgbG9jYWwgTUxNRSBwcm9jZXNzZWQgdGhlCisgKglmcmFtZSwgaS5lLiwgaXQgd2FzIGZvciB0aGUgbG9jYWwgU1RBIGFuZCB3YXMgcmVjZWl2ZWQgaW4gY29ycmVjdAorICoJc3RhdGUuIFRoaXMgaXMgc2ltaWxhciB0byBNTE1FLUFVVEhFTlRJQ0FURS5jb25maXJtIHByaW1pdGl2ZSBpbiB0aGUKKyAqCU1MTUUgU0FQIGludGVyZmFjZSAoa2VybmVsIHByb3ZpZGluZyBNTE1FLCB1c2Vyc3BhY2UgU01FKS4gVGhlCisgKglpbmNsdWRlZCAlTkw4MDIxMV9BVFRSX0ZSQU1FIGF0dHJpYnV0ZSBjb250YWlucyB0aGUgbWFuYWdlbWVudCBmcmFtZQorICoJKGluY2x1ZGluZyBib3RoIHRoZSBoZWFkZXIgYW5kIGZyYW1lIGJvZHksIGJ1dCBub3QgRkNTKS4gVGhpcyBldmVudCBpcworICoJYWxzbyB1c2VkIHRvIGluZGljYXRlIGlmIHRoZSBhdXRoZW50aWNhdGlvbiBhdHRlbXB0IHRpbWVkIG91dC4gSW4gdGhhdAorICoJY2FzZSB0aGUgJU5MODAyMTFfQVRUUl9GUkFNRSBhdHRyaWJ1dGUgaXMgcmVwbGFjZWQgd2l0aCBhCisgKgklTkw4MDIxMV9BVFRSX1RJTUVEX09VVCBmbGFnIChhbmQgJU5MODAyMTFfQVRUUl9NQUMgdG8gaW5kaWNhdGUgd2hpY2gKKyAqCXBlbmRpbmcgYXV0aGVudGljYXRpb24gdGltZWQgb3V0KS4KKyAqIEBOTDgwMjExX0NNRF9BU1NPQ0lBVEU6IGFzc29jaWF0aW9uIHJlcXVlc3QgYW5kIG5vdGlmaWNhdGlvbjsgbGlrZQorICoJTkw4MDIxMV9DTURfQVVUSEVOVElDQVRFIGJ1dCBmb3IgQXNzb2NpYXRpb24gYW5kIFJlYXNzb2NpYXRpb24KKyAqCShzaW1pbGFyIHRvIE1MTUUtQVNTT0NJQVRFLnJlcXVlc3QsIE1MTUUtUkVBU1NPQ0lBVEUucmVxdWVzdCwKKyAqCU1MTUUtQVNTT0NJQVRFLmNvbmZpcm0gb3IgTUxNRS1SRUFTU09DSUFURS5jb25maXJtIHByaW1pdGl2ZXMpLgorICogQE5MODAyMTFfQ01EX0RFQVVUSEVOVElDQVRFOiBkZWF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgYW5kIG5vdGlmaWNhdGlvbjsgbGlrZQorICoJTkw4MDIxMV9DTURfQVVUSEVOVElDQVRFIGJ1dCBmb3IgRGVhdXRoZW50aWNhdGlvbiBmcmFtZXMgKHNpbWlsYXIgdG8KKyAqCU1MTUUtREVBVVRIRU5USUNBVElPTi5yZXF1ZXN0IGFuZCBNTE1FLURFQVVUSEVOVElDQVRFLmluZGljYXRpb24KKyAqCXByaW1pdGl2ZXMpLgorICogQE5MODAyMTFfQ01EX0RJU0FTU09DSUFURTogZGlzYXNzb2NpYXRpb24gcmVxdWVzdCBhbmQgbm90aWZpY2F0aW9uOyBsaWtlCisgKglOTDgwMjExX0NNRF9BVVRIRU5USUNBVEUgYnV0IGZvciBEaXNhc3NvY2lhdGlvbiBmcmFtZXMgKHNpbWlsYXIgdG8KKyAqCU1MTUUtRElTQVNTT0NJQVRFLnJlcXVlc3QgYW5kIE1MTUUtRElTQVNTT0NJQVRFLmluZGljYXRpb24gcHJpbWl0aXZlcykuCisgKgorICogQE5MODAyMTFfQ01EX01JQ0hBRUxfTUlDX0ZBSUxVUkU6IG5vdGlmaWNhdGlvbiBvZiBhIGxvY2FsbHkgZGV0ZWN0ZWQgTWljaGFlbAorICoJTUlDIChwYXJ0IG9mIFRLSVApIGZhaWx1cmU7IHNlbnQgb24gdGhlICJtbG1lIiBtdWx0aWNhc3QgZ3JvdXA7IHRoZQorICoJZXZlbnQgaW5jbHVkZXMgJU5MODAyMTFfQVRUUl9NQUMgdG8gZGVzY3JpYmUgdGhlIHNvdXJjZSBNQUMgYWRkcmVzcyBvZgorICoJdGhlIGZyYW1lIHdpdGggaW52YWxpZCBNSUMsICVOTDgwMjExX0FUVFJfS0VZX1RZUEUgdG8gc2hvdyB0aGUga2V5CisgKgl0eXBlLCAlTkw4MDIxMV9BVFRSX0tFWV9JRFggdG8gaW5kaWNhdGUgdGhlIGtleSBpZGVudGlmaWVyLCBhbmQKKyAqCSVOTDgwMjExX0FUVFJfS0VZX1NFUSB0byBpbmRpY2F0ZSB0aGUgVFNDIHZhbHVlIG9mIHRoZSBmcmFtZTsgdGhpcworICoJZXZlbnQgbWF0Y2hlcyB3aXRoIE1MTUUtTUlDSEFFTE1JQ0ZBSUxVUkUuaW5kaWNhdGlvbigpIHByaW1pdGl2ZQorICoKKyAqIEBOTDgwMjExX0NNRF9KT0lOX0lCU1M6IEpvaW4gYSBuZXcgSUJTUyAtLSBnaXZlbiBhdCBsZWFzdCBhbiBTU0lEIGFuZCBhCisgKglGUkVRIGF0dHJpYnV0ZSAoZm9yIHRoZSBpbml0aWFsIGZyZXF1ZW5jeSBpZiBubyBwZWVyIGNhbiBiZSBmb3VuZCkKKyAqCWFuZCBvcHRpb25hbGx5IGEgTUFDIChhcyBCU1NJRCkgYW5kIEZSRVFfRklYRUQgYXR0cmlidXRlIGlmIHRob3NlCisgKglzaG91bGQgYmUgZml4ZWQgcmF0aGVyIHRoYW4gYXV0b21hdGljYWxseSBkZXRlcm1pbmVkLiBDYW4gb25seSBiZQorICoJZXhlY3V0ZWQgb24gYSBuZXR3b3JrIGludGVyZmFjZSB0aGF0IGlzIFVQLCBhbmQgZml4ZWQgQlNTSUQvRlJFUQorICoJbWF5IGJlIHJlamVjdGVkLiBBbm90aGVyIG9wdGlvbmFsIHBhcmFtZXRlciBpcyB0aGUgYmVhY29uIGludGVydmFsLAorICoJZ2l2ZW4gaW4gdGhlICVOTDgwMjExX0FUVFJfQkVBQ09OX0lOVEVSVkFMIGF0dHJpYnV0ZSwgd2hpY2ggaWYgbm90CisgKglnaXZlbiBkZWZhdWx0cyB0byAxMDAgVFUgKDEwMi40bXMpLgorICogQE5MODAyMTFfQ01EX0xFQVZFX0lCU1M6IExlYXZlIHRoZSBJQlNTIC0tIG5vIHNwZWNpYWwgYXJndW1lbnRzLCB0aGUgSUJTUyBpcworICoJZGV0ZXJtaW5lZCBieSB0aGUgbmV0d29yayBpbnRlcmZhY2UuCisgKgorICogQE5MODAyMTFfQ01EX1RFU1RNT0RFOiB0ZXN0bW9kZSBjb21tYW5kLCB0YWtlcyBhIHdpcGh5IChvciBpZmluZGV4KSBhdHRyaWJ1dGUKKyAqCXRvIGlkZW50aWZ5IHRoZSBkZXZpY2UsIGFuZCB0aGUgVEVTVERBVEEgYmxvYiBhdHRyaWJ1dGUgdG8gcGFzcyB0aHJvdWdoCisgKgl0byB0aGUgZHJpdmVyLgorICoKKyAqIEBOTDgwMjExX0NNRF9DT05ORUNUOiBjb25uZWN0aW9uIHJlcXVlc3QgYW5kIG5vdGlmaWNhdGlvbjsgdGhpcyBjb21tYW5kCisgKglyZXF1ZXN0cyB0byBjb25uZWN0IHRvIGEgc3BlY2lmaWVkIG5ldHdvcmsgYnV0IHdpdGhvdXQgc2VwYXJhdGluZworICoJYXV0aCBhbmQgYXNzb2Mgc3RlcHMuIEZvciB0aGlzLCB5b3UgbmVlZCB0byBzcGVjaWZ5IHRoZSBTU0lEIGluIGEKKyAqCSVOTDgwMjExX0FUVFJfU1NJRCBhdHRyaWJ1dGUsIGFuZCBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IHRoZSBhc3NvY2lhdGlvbgorICoJSUVzIGluICVOTDgwMjExX0FUVFJfSUUsICVOTDgwMjExX0FUVFJfQVVUSF9UWVBFLCAlTkw4MDIxMV9BVFRSX01BQywKKyAqCSVOTDgwMjExX0FUVFJfV0lQSFlfRlJFUSwgJU5MODAyMTFfQVRUUl9DT05UUk9MX1BPUlQsCisgKgklTkw4MDIxMV9BVFRSX0NPTlRST0xfUE9SVF9FVEhFUlRZUEUgYW5kCisgKgklTkw4MDIxMV9BVFRSX0NPTlRST0xfUE9SVF9OT19FTkNSWVBULgorICoJSXQgaXMgYWxzbyBzZW50IGFzIGFuIGV2ZW50LCB3aXRoIHRoZSBCU1NJRCBhbmQgcmVzcG9uc2UgSUVzIHdoZW4gdGhlCisgKgljb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIG9yIGZhaWxlZCB0byBiZSBlc3RhYmxpc2hlZC4gVGhpcyBjYW4gYmUKKyAqCWRldGVybWluZWQgYnkgdGhlIFNUQVRVU19DT0RFIGF0dHJpYnV0ZS4KKyAqIEBOTDgwMjExX0NNRF9ST0FNOiByZXF1ZXN0IHRoYXQgdGhlIGNhcmQgcm9hbSAoY3VycmVudGx5IG5vdCBpbXBsZW1lbnRlZCksCisgKglzZW50IGFzIGFuIGV2ZW50IHdoZW4gdGhlIGNhcmQvZHJpdmVyIHJvYW1lZCBieSBpdHNlbGYuCisgKiBATkw4MDIxMV9DTURfRElTQ09OTkVDVDogZHJvcCBhIGdpdmVuIGNvbm5lY3Rpb247IGFsc28gdXNlZCB0byBub3RpZnkKKyAqCXVzZXJzcGFjZSB0aGF0IGEgY29ubmVjdGlvbiB3YXMgZHJvcHBlZCBieSB0aGUgQVAgb3IgZHVlIHRvIG90aGVyCisgKglyZWFzb25zLCBmb3IgdGhpcyB0aGUgJU5MODAyMTFfQVRUUl9ESVNDT05ORUNURURfQllfQVAgYW5kCisgKgklTkw4MDIxMV9BVFRSX1JFQVNPTl9DT0RFIGF0dHJpYnV0ZXMgYXJlIHVzZWQuCisgKgorICogQE5MODAyMTFfQ01EX1NFVF9XSVBIWV9ORVROUzogU2V0IGEgd2lwaHkncyBuZXRucy4gTm90ZSB0aGF0IGFsbCBkZXZpY2VzCisgKglhc3NvY2lhdGVkIHdpdGggdGhpcyB3aXBoeSBtdXN0IGJlIGRvd24gYW5kIHdpbGwgZm9sbG93LgorICoKKyAqIEBOTDgwMjExX0NNRF9SRU1BSU5fT05fQ0hBTk5FTDogUmVxdWVzdCB0byByZW1haW4gYXdha2Ugb24gdGhlIHNwZWNpZmllZAorICoJY2hhbm5lbCBmb3IgdGhlIHNwZWNpZmllZCBhbW91bnQgb2YgdGltZS4gVGhpcyBjYW4gYmUgdXNlZCB0byBkbworICoJb2ZmLWNoYW5uZWwgb3BlcmF0aW9ucyBsaWtlIHRyYW5zbWl0IGEgUHVibGljIEFjdGlvbiBmcmFtZSBhbmQgd2FpdCBmb3IKKyAqCWEgcmVzcG9uc2Ugd2hpbGUgYmVpbmcgYXNzb2NpYXRlZCB0byBhbiBBUCBvbiBhbm90aGVyIGNoYW5uZWwuCisgKgklTkw4MDIxMV9BVFRSX0lGSU5ERVggaXMgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIGludGVyZmFjZSAoYW5kIHRodXMKKyAqCXJhZGlvKSBpcyB1c2VkLiAlTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVEgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZQorICoJZnJlcXVlbmN5IGZvciB0aGUgb3BlcmF0aW9uIGFuZCAlTkw4MDIxMV9BVFRSX1dJUEhZX0NIQU5ORUxfVFlQRSBtYXkgYmUKKyAqCW9wdGlvbmFsbHkgdXNlZCB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgY2hhbm5lbCBwYXJhbWV0ZXJzLgorICoJJU5MODAyMTFfQVRUUl9EVVJBVElPTiBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcworICoJdG8gcmVtYWluIG9uIHRoZSBjaGFubmVsLiBUaGlzIGNvbW1hbmQgaXMgYWxzbyB1c2VkIGFzIGFuIGV2ZW50IHRvCisgKglub3RpZnkgd2hlbiB0aGUgcmVxdWVzdGVkIGR1cmF0aW9uIHN0YXJ0cyAoaXQgbWF5IHRha2UgYSB3aGlsZSBmb3IgdGhlCisgKglkcml2ZXIgdG8gc2NoZWR1bGUgdGhpcyB0aW1lIGR1ZSB0byBvdGhlciBjb25jdXJyZW50IG5lZWRzIGZvciB0aGUKKyAqCXJhZGlvKS4KKyAqCVdoZW4gY2FsbGVkLCB0aGlzIG9wZXJhdGlvbiByZXR1cm5zIGEgY29va2llICglTkw4MDIxMV9BVFRSX0NPT0tJRSkKKyAqCXRoYXQgd2lsbCBiZSBpbmNsdWRlZCB3aXRoIGFueSBldmVudHMgcGVydGFpbmluZyB0byB0aGlzIHJlcXVlc3Q7CisgKgl0aGUgY29va2llIGlzIGFsc28gdXNlZCB0byBjYW5jZWwgdGhlIHJlcXVlc3QuCisgKiBATkw4MDIxMV9DTURfQ0FOQ0VMX1JFTUFJTl9PTl9DSEFOTkVMOiBUaGlzIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gY2FuY2VsIGEKKyAqCXBlbmRpbmcgcmVtYWluLW9uLWNoYW5uZWwgZHVyYXRpb24gaWYgdGhlIGRlc2lyZWQgb3BlcmF0aW9uIGhhcyBiZWVuCisgKgljb21wbGV0ZWQgcHJpb3IgdG8gZXhwaXJhdGlvbiBvZiB0aGUgb3JpZ2luYWxseSByZXF1ZXN0ZWQgZHVyYXRpb24uCisgKgklTkw4MDIxMV9BVFRSX1dJUEhZIG9yICVOTDgwMjExX0FUVFJfSUZJTkRFWCBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlCisgKglyYWRpby4gVGhlICVOTDgwMjExX0FUVFJfQ09PS0lFIGF0dHJpYnV0ZSBtdXN0IGJlIGdpdmVuIGFzIHdlbGwgdG8KKyAqCXVuaXF1ZWx5IGlkZW50aWZ5IHRoZSByZXF1ZXN0LgorICoJVGhpcyBjb21tYW5kIGlzIGFsc28gdXNlZCBhcyBhbiBldmVudCB0byBub3RpZnkgd2hlbiBhIHJlcXVlc3RlZAorICoJcmVtYWluLW9uLWNoYW5uZWwgZHVyYXRpb24gaGFzIGV4cGlyZWQuCisgKgorICogQE5MODAyMTFfQ01EX1NFVF9UWF9CSVRSQVRFX01BU0s6IFNldCB0aGUgbWFzayBvZiByYXRlcyB0byBiZSB1c2VkIGluIFRYCisgKglyYXRlIHNlbGVjdGlvbi4gJU5MODAyMTFfQVRUUl9JRklOREVYIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgaW50ZXJmYWNlCisgKglhbmQgQE5MODAyMTFfQVRUUl9UWF9SQVRFUyB0aGUgc2V0IG9mIGFsbG93ZWQgcmF0ZXMuCisgKgorICogQE5MODAyMTFfQ01EX1JFR0lTVEVSX0ZSQU1FOiBSZWdpc3RlciBmb3IgcmVjZWl2aW5nIGNlcnRhaW4gbWdtdCBmcmFtZXMKKyAqCSh2aWEgQE5MODAyMTFfQ01EX0ZSQU1FKSBmb3IgcHJvY2Vzc2luZyBpbiB1c2Vyc3BhY2UuIFRoaXMgY29tbWFuZAorICoJcmVxdWlyZXMgYW4gaW50ZXJmYWNlIGluZGV4LCBhIGZyYW1lIHR5cGUgYXR0cmlidXRlIChvcHRpb25hbCBmb3IKKyAqCWJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVhc29ucywgaWYgbm90IGdpdmVuIGFzc3VtZXMgYWN0aW9uIGZyYW1lcykKKyAqCWFuZCBhIG1hdGNoIGF0dHJpYnV0ZSBjb250YWluaW5nIHRoZSBmaXJzdCBmZXcgYnl0ZXMgb2YgdGhlIGZyYW1lCisgKgl0aGF0IHNob3VsZCBtYXRjaCwgZS5nLiBhIHNpbmdsZSBieXRlIGZvciBvbmx5IGEgY2F0ZWdvcnkgbWF0Y2ggb3IKKyAqCWZvdXIgYnl0ZXMgZm9yIHZlbmRvciBmcmFtZXMgaW5jbHVkaW5nIHRoZSBPVUkuIFRoZSByZWdpc3RyYXRpb24KKyAqCWNhbm5vdCBiZSBkcm9wcGVkLCBidXQgaXMgcmVtb3ZlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIG5ldGxpbmsKKyAqCXNvY2tldCBpcyBjbG9zZWQuIE11bHRpcGxlIHJlZ2lzdHJhdGlvbnMgY2FuIGJlIG1hZGUuCisgKiBATkw4MDIxMV9DTURfUkVHSVNURVJfQUNUSU9OOiBBbGlhcyBmb3IgQE5MODAyMTFfQ01EX1JFR0lTVEVSX0ZSQU1FIGZvcgorICoJYmFja3dhcmQgY29tcGF0aWJpbGl0eQorICogQE5MODAyMTFfQ01EX0ZSQU1FOiBNYW5hZ2VtZW50IGZyYW1lIFRYIHJlcXVlc3QgYW5kIFJYIG5vdGlmaWNhdGlvbi4gVGhpcworICoJY29tbWFuZCBpcyB1c2VkIGJvdGggYXMgYSByZXF1ZXN0IHRvIHRyYW5zbWl0IGEgbWFuYWdlbWVudCBmcmFtZSBhbmQKKyAqCWFzIGFuIGV2ZW50IGluZGljYXRpbmcgcmVjZXB0aW9uIG9mIGEgZnJhbWUgdGhhdCB3YXMgbm90IHByb2Nlc3NlZCBpbgorICoJa2VybmVsIGNvZGUsIGJ1dCBpcyBmb3IgdXMgKGkuZS4sIHdoaWNoIG1heSBuZWVkIHRvIGJlIHByb2Nlc3NlZCBpbiBhCisgKgl1c2VyIHNwYWNlIGFwcGxpY2F0aW9uKS4gJU5MODAyMTFfQVRUUl9GUkFNRSBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlCisgKglmcmFtZSBjb250ZW50cyAoaW5jbHVkaW5nIGhlYWRlcikuICVOTDgwMjExX0FUVFJfV0lQSFlfRlJFUSAoYW5kCisgKglvcHRpb25hbGx5ICVOTDgwMjExX0FUVFJfV0lQSFlfQ0hBTk5FTF9UWVBFKSBpcyB1c2VkIHRvIGluZGljYXRlIG9uCisgKgl3aGljaCBjaGFubmVsIHRoZSBmcmFtZSBpcyB0byBiZSB0cmFuc21pdHRlZCBvciB3YXMgcmVjZWl2ZWQuIFRoaXMKKyAqCWNoYW5uZWwgaGFzIHRvIGJlIHRoZSBjdXJyZW50IGNoYW5uZWwgKHJlbWFpbi1vbi1jaGFubmVsIG9yIHRoZQorICoJb3BlcmF0aW9uYWwgY2hhbm5lbCkuIFdoZW4gY2FsbGVkLCB0aGlzIG9wZXJhdGlvbiByZXR1cm5zIGEgY29va2llCisgKgkoJU5MODAyMTFfQVRUUl9DT09LSUUpIHRoYXQgd2lsbCBiZSBpbmNsdWRlZCB3aXRoIHRoZSBUWCBzdGF0dXMgZXZlbnQKKyAqCXBlcnRhaW5pbmcgdG8gdGhlIFRYIHJlcXVlc3QuCisgKiBATkw4MDIxMV9DTURfQUNUSU9OOiBBbGlhcyBmb3IgQE5MODAyMTFfQ01EX0ZSQU1FIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorICogQE5MODAyMTFfQ01EX0ZSQU1FX1RYX1NUQVRVUzogUmVwb3J0IFRYIHN0YXR1cyBvZiBhIG1hbmFnZW1lbnQgZnJhbWUKKyAqCXRyYW5zbWl0dGVkIHdpdGggJU5MODAyMTFfQ01EX0ZSQU1FLiAlTkw4MDIxMV9BVFRSX0NPT0tJRSBpZGVudGlmaWVzCisgKgl0aGUgVFggY29tbWFuZCBhbmQgJU5MODAyMTFfQVRUUl9GUkFNRSBpbmNsdWRlcyB0aGUgY29udGVudHMgb2YgdGhlCisgKglmcmFtZS4gJU5MODAyMTFfQVRUUl9BQ0sgZmxhZyBpcyBpbmNsdWRlZCBpZiB0aGUgcmVjaXBpZW50IGFja25vd2xlZGdlZAorICoJdGhlIGZyYW1lLgorICogQE5MODAyMTFfQ01EX0FDVElPTl9UWF9TVEFUVVM6IEFsaWFzIGZvciBATkw4MDIxMV9DTURfRlJBTUVfVFhfU1RBVFVTIGZvcgorICoJYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKyAqIEBOTDgwMjExX0NNRF9TRVRfQ1FNOiBDb25uZWN0aW9uIHF1YWxpdHkgbW9uaXRvciBjb25maWd1cmF0aW9uLiBUaGlzIGNvbW1hbmQKKyAqCWlzIHVzZWQgdG8gY29uZmlndXJlIGNvbm5lY3Rpb24gcXVhbGl0eSBtb25pdG9yaW5nIG5vdGlmaWNhdGlvbiB0cmlnZ2VyCisgKglsZXZlbHMuCisgKiBATkw4MDIxMV9DTURfTk9USUZZX0NRTTogQ29ubmVjdGlvbiBxdWFsaXR5IG1vbml0b3Igbm90aWZpY2F0aW9uLiBUaGlzCisgKgljb21tYW5kIGlzIHVzZWQgYXMgYW4gZXZlbnQgdG8gaW5kaWNhdGUgdGhlIHRoYXQgYSB0cmlnZ2VyIGxldmVsIHdhcworICoJcmVhY2hlZC4KKyAqIEBOTDgwMjExX0NNRF9TRVRfQ0hBTk5FTDogU2V0IHRoZSBjaGFubmVsICh1c2luZyAlTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVEKKyAqCWFuZCAlTkw4MDIxMV9BVFRSX1dJUEhZX0NIQU5ORUxfVFlQRSkgdGhlIGdpdmVuIGludGVyZmFjZSAoaWRlbnRpZmVkCisgKglieSAlTkw4MDIxMV9BVFRSX0lGSU5ERVgpIHNoYWxsIG9wZXJhdGUgb24uCisgKglJbiBjYXNlIG11bHRpcGxlIGNoYW5uZWxzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSwgdGhlIG1lY2hhbmlzbQorICoJd2l0aCB3aGljaCBpdCBzd2l0Y2hlcyBjaGFubmVscyBpcyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkLgorICoJV2hlbiBhIG1vbml0b3IgaW50ZXJmYWNlIGlzIGdpdmVuLCBpdCBjYW4gb25seSBzd2l0Y2ggY2hhbm5lbCB3aGlsZQorICoJbm8gb3RoZXIgaW50ZXJmYWNlcyBhcmUgb3BlcmF0aW5nIHRvIGF2b2lkIGRpc3R1cmJpbmcgdGhlIG9wZXJhdGlvbgorICoJb2YgYW55IG90aGVyIGludGVyZmFjZXMsIGFuZCBvdGhlciBpbnRlcmZhY2VzIHdpbGwgYWdhaW4gdGFrZQorICoJcHJlY2VkZW5jZSB3aGVuIHRoZXkgYXJlIHVzZWQuCisgKgorICogQE5MODAyMTFfQ01EX1NFVF9XRFNfUEVFUjogU2V0IHRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgcGVlciBvbiBhIFdEUyBpbnRlcmZhY2UuCisgKgorICogQE5MODAyMTFfQ01EX01BWDogaGlnaGVzdCB1c2VkIGNvbW1hbmQgbnVtYmVyCisgKiBAX19OTDgwMjExX0NNRF9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKKyAqLworZW51bSBubDgwMjExX2NvbW1hbmRzIHsKKy8qIGRvbid0IGNoYW5nZSB0aGUgb3JkZXIgb3IgYWRkIGFueXRoaW5nIGluYmV0d2VlbiwgdGhpcyBpcyBBQkkhICovCisJTkw4MDIxMV9DTURfVU5TUEVDLAorCisJTkw4MDIxMV9DTURfR0VUX1dJUEhZLAkJLyogY2FuIGR1bXAgKi8KKwlOTDgwMjExX0NNRF9TRVRfV0lQSFksCisJTkw4MDIxMV9DTURfTkVXX1dJUEhZLAorCU5MODAyMTFfQ01EX0RFTF9XSVBIWSwKKworCU5MODAyMTFfQ01EX0dFVF9JTlRFUkZBQ0UsCS8qIGNhbiBkdW1wICovCisJTkw4MDIxMV9DTURfU0VUX0lOVEVSRkFDRSwKKwlOTDgwMjExX0NNRF9ORVdfSU5URVJGQUNFLAorCU5MODAyMTFfQ01EX0RFTF9JTlRFUkZBQ0UsCisKKwlOTDgwMjExX0NNRF9HRVRfS0VZLAorCU5MODAyMTFfQ01EX1NFVF9LRVksCisJTkw4MDIxMV9DTURfTkVXX0tFWSwKKwlOTDgwMjExX0NNRF9ERUxfS0VZLAorCisJTkw4MDIxMV9DTURfR0VUX0JFQUNPTiwKKwlOTDgwMjExX0NNRF9TRVRfQkVBQ09OLAorCU5MODAyMTFfQ01EX05FV19CRUFDT04sCisJTkw4MDIxMV9DTURfREVMX0JFQUNPTiwKKworCU5MODAyMTFfQ01EX0dFVF9TVEFUSU9OLAorCU5MODAyMTFfQ01EX1NFVF9TVEFUSU9OLAorCU5MODAyMTFfQ01EX05FV19TVEFUSU9OLAorCU5MODAyMTFfQ01EX0RFTF9TVEFUSU9OLAorCisJTkw4MDIxMV9DTURfR0VUX01QQVRILAorCU5MODAyMTFfQ01EX1NFVF9NUEFUSCwKKwlOTDgwMjExX0NNRF9ORVdfTVBBVEgsCisJTkw4MDIxMV9DTURfREVMX01QQVRILAorCisJTkw4MDIxMV9DTURfU0VUX0JTUywKKworCU5MODAyMTFfQ01EX1NFVF9SRUcsCisJTkw4MDIxMV9DTURfUkVRX1NFVF9SRUcsCisKKwlOTDgwMjExX0NNRF9HRVRfTUVTSF9QQVJBTVMsCisJTkw4MDIxMV9DTURfU0VUX01FU0hfUEFSQU1TLAorCisJTkw4MDIxMV9DTURfU0VUX01HTVRfRVhUUkFfSUUgLyogcmVzZXJ2ZWQ7IG5vdCB1c2VkICovLAorCisJTkw4MDIxMV9DTURfR0VUX1JFRywKKworCU5MODAyMTFfQ01EX0dFVF9TQ0FOLAorCU5MODAyMTFfQ01EX1RSSUdHRVJfU0NBTiwKKwlOTDgwMjExX0NNRF9ORVdfU0NBTl9SRVNVTFRTLAorCU5MODAyMTFfQ01EX1NDQU5fQUJPUlRFRCwKKworCU5MODAyMTFfQ01EX1JFR19DSEFOR0UsCisKKwlOTDgwMjExX0NNRF9BVVRIRU5USUNBVEUsCisJTkw4MDIxMV9DTURfQVNTT0NJQVRFLAorCU5MODAyMTFfQ01EX0RFQVVUSEVOVElDQVRFLAorCU5MODAyMTFfQ01EX0RJU0FTU09DSUFURSwKKworCU5MODAyMTFfQ01EX01JQ0hBRUxfTUlDX0ZBSUxVUkUsCisKKwlOTDgwMjExX0NNRF9SRUdfQkVBQ09OX0hJTlQsCisKKwlOTDgwMjExX0NNRF9KT0lOX0lCU1MsCisJTkw4MDIxMV9DTURfTEVBVkVfSUJTUywKKworCU5MODAyMTFfQ01EX1RFU1RNT0RFLAorCisJTkw4MDIxMV9DTURfQ09OTkVDVCwKKwlOTDgwMjExX0NNRF9ST0FNLAorCU5MODAyMTFfQ01EX0RJU0NPTk5FQ1QsCisKKwlOTDgwMjExX0NNRF9TRVRfV0lQSFlfTkVUTlMsCisKKwlOTDgwMjExX0NNRF9HRVRfU1VSVkVZLAorCU5MODAyMTFfQ01EX05FV19TVVJWRVlfUkVTVUxUUywKKworCU5MODAyMTFfQ01EX1NFVF9QTUtTQSwKKwlOTDgwMjExX0NNRF9ERUxfUE1LU0EsCisJTkw4MDIxMV9DTURfRkxVU0hfUE1LU0EsCisKKwlOTDgwMjExX0NNRF9SRU1BSU5fT05fQ0hBTk5FTCwKKwlOTDgwMjExX0NNRF9DQU5DRUxfUkVNQUlOX09OX0NIQU5ORUwsCisKKwlOTDgwMjExX0NNRF9TRVRfVFhfQklUUkFURV9NQVNLLAorCisJTkw4MDIxMV9DTURfUkVHSVNURVJfRlJBTUUsCisJTkw4MDIxMV9DTURfUkVHSVNURVJfQUNUSU9OID0gTkw4MDIxMV9DTURfUkVHSVNURVJfRlJBTUUsCisJTkw4MDIxMV9DTURfRlJBTUUsCisJTkw4MDIxMV9DTURfQUNUSU9OID0gTkw4MDIxMV9DTURfRlJBTUUsCisJTkw4MDIxMV9DTURfRlJBTUVfVFhfU1RBVFVTLAorCU5MODAyMTFfQ01EX0FDVElPTl9UWF9TVEFUVVMgPSBOTDgwMjExX0NNRF9GUkFNRV9UWF9TVEFUVVMsCisKKwlOTDgwMjExX0NNRF9TRVRfUE9XRVJfU0FWRSwKKwlOTDgwMjExX0NNRF9HRVRfUE9XRVJfU0FWRSwKKworCU5MODAyMTFfQ01EX1NFVF9DUU0sCisJTkw4MDIxMV9DTURfTk9USUZZX0NRTSwKKworCU5MODAyMTFfQ01EX1NFVF9DSEFOTkVMLAorCU5MODAyMTFfQ01EX1NFVF9XRFNfUEVFUiwKKworCS8qIGFkZCBuZXcgY29tbWFuZHMgYWJvdmUgaGVyZSAqLworCisJLyogdXNlZCB0byBkZWZpbmUgTkw4MDIxMV9DTURfTUFYIGJlbG93ICovCisJX19OTDgwMjExX0NNRF9BRlRFUl9MQVNULAorCU5MODAyMTFfQ01EX01BWCA9IF9fTkw4MDIxMV9DTURfQUZURVJfTEFTVCAtIDEKK307CisKKy8qCisgKiBBbGxvdyB1c2VyIHNwYWNlIHByb2dyYW1zIHRvIHVzZSAjaWZkZWYgb24gbmV3IGNvbW1hbmRzIGJ5IGRlZmluaW5nIHRoZW0KKyAqIGhlcmUKKyAqLworI2RlZmluZSBOTDgwMjExX0NNRF9TRVRfQlNTIE5MODAyMTFfQ01EX1NFVF9CU1MKKyNkZWZpbmUgTkw4MDIxMV9DTURfU0VUX01HTVRfRVhUUkFfSUUgTkw4MDIxMV9DTURfU0VUX01HTVRfRVhUUkFfSUUKKyNkZWZpbmUgTkw4MDIxMV9DTURfUkVHX0NIQU5HRSBOTDgwMjExX0NNRF9SRUdfQ0hBTkdFCisjZGVmaW5lIE5MODAyMTFfQ01EX0FVVEhFTlRJQ0FURSBOTDgwMjExX0NNRF9BVVRIRU5USUNBVEUKKyNkZWZpbmUgTkw4MDIxMV9DTURfQVNTT0NJQVRFIE5MODAyMTFfQ01EX0FTU09DSUFURQorI2RlZmluZSBOTDgwMjExX0NNRF9ERUFVVEhFTlRJQ0FURSBOTDgwMjExX0NNRF9ERUFVVEhFTlRJQ0FURQorI2RlZmluZSBOTDgwMjExX0NNRF9ESVNBU1NPQ0lBVEUgTkw4MDIxMV9DTURfRElTQVNTT0NJQVRFCisjZGVmaW5lIE5MODAyMTFfQ01EX1JFR19CRUFDT05fSElOVCBOTDgwMjExX0NNRF9SRUdfQkVBQ09OX0hJTlQKKworLyoqCisgKiBlbnVtIG5sODAyMTFfYXR0cnMgLSBubDgwMjExIG5ldGxpbmsgYXR0cmlidXRlcworICoKKyAqIEBOTDgwMjExX0FUVFJfVU5TUEVDOiB1bnNwZWNpZmllZCBhdHRyaWJ1dGUgdG8gY2F0Y2ggZXJyb3JzCisgKgorICogQE5MODAyMTFfQVRUUl9XSVBIWTogaW5kZXggb2Ygd2lwaHkgdG8gb3BlcmF0ZSBvbiwgY2YuCisgKgkvc3lzL2NsYXNzL2llZWU4MDIxMS88cGh5bmFtZT4vaW5kZXgKKyAqIEBOTDgwMjExX0FUVFJfV0lQSFlfTkFNRTogd2lwaHkgbmFtZSAodXNlZCBmb3IgcmVuYW1pbmcpCisgKiBATkw4MDIxMV9BVFRSX1dJUEhZX1RYUV9QQVJBTVM6IGEgbmVzdGVkIGFycmF5IG9mIFRYIHF1ZXVlIHBhcmFtZXRlcnMKKyAqIEBOTDgwMjExX0FUVFJfV0lQSFlfRlJFUTogZnJlcXVlbmN5IG9mIHRoZSBzZWxlY3RlZCBjaGFubmVsIGluIE1IegorICogQE5MODAyMTFfQVRUUl9XSVBIWV9DSEFOTkVMX1RZUEU6IGluY2x1ZGVkIHdpdGggTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVEKKyAqCWlmIEhUMjAgb3IgSFQ0MCBhcmUgYWxsb3dlZCAoaS5lLiwgODAyLjExbiBkaXNhYmxlZCBpZiBub3QgaW5jbHVkZWQpOgorICoJTkw4MDIxMV9DSEFOX05PX0hUID0gSFQgbm90IGFsbG93ZWQgKGkuZS4sIHNhbWUgYXMgbm90IGluY2x1ZGluZworICoJCXRoaXMgYXR0cmlidXRlKQorICoJTkw4MDIxMV9DSEFOX0hUMjAgPSBIVDIwIG9ubHkKKyAqCU5MODAyMTFfQ0hBTl9IVDQwTUlOVVMgPSBzZWNvbmRhcnkgY2hhbm5lbCBpcyBiZWxvdyB0aGUgcHJpbWFyeSBjaGFubmVsCisgKglOTDgwMjExX0NIQU5fSFQ0MFBMVVMgPSBzZWNvbmRhcnkgY2hhbm5lbCBpcyBhYm92ZSB0aGUgcHJpbWFyeSBjaGFubmVsCisgKiBATkw4MDIxMV9BVFRSX1dJUEhZX1JFVFJZX1NIT1JUOiBUWCByZXRyeSBsaW1pdCBmb3IgZnJhbWVzIHdob3NlIGxlbmd0aCBpcworICoJbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBSVFMgdGhyZXNob2xkOyBhbGxvd2VkIHJhbmdlOiAxLi4yNTU7CisgKglkb3QxMVNob3J0UmV0cnlMaW1pdDsgdTgKKyAqIEBOTDgwMjExX0FUVFJfV0lQSFlfUkVUUllfTE9ORzogVFggcmV0cnkgbGltaXQgZm9yIGZyYW1lcyB3aG9zZSBsZW5ndGggaXMKKyAqCWdyZWF0ZXIgdGhhbiB0aGUgUlRTIHRocmVzaG9sZDsgYWxsb3dlZCByYW5nZTogMS4uMjU1OworICoJZG90MTFTaG9ydExvbmdMaW1pdDsgdTgKKyAqIEBOTDgwMjExX0FUVFJfV0lQSFlfRlJBR19USFJFU0hPTEQ6IGZyYWdtZW50YXRpb24gdGhyZXNob2xkLCBpLmUuLCBtYXhpbXVtCisgKglsZW5ndGggaW4gb2N0ZXRzIGZvciBmcmFtZXM7IGFsbG93ZWQgcmFuZ2U6IDI1Ni4uODAwMCwgZGlzYWJsZQorICoJZnJhZ21lbnRhdGlvbiB3aXRoICh1MzIpLTE7IGRvdDExRnJhZ21lbnRhdGlvblRocmVzaG9sZDsgdTMyCisgKiBATkw4MDIxMV9BVFRSX1dJUEhZX1JUU19USFJFU0hPTEQ6IFJUUyB0aHJlc2hvbGQgKFRYIGZyYW1lcyB3aXRoIGxlbmd0aAorICoJbGFyZ2VyIHRoYW4gb3IgZXF1YWwgdG8gdGhpcyB1c2UgUlRTL0NUUyBoYW5kc2hha2UpOyBhbGxvd2VkIHJhbmdlOgorICoJMC4uNjU1MzYsIGRpc2FibGUgd2l0aCAodTMyKS0xOyBkb3QxMVJUU1RocmVzaG9sZDsgdTMyCisgKiBATkw4MDIxMV9BVFRSX1dJUEhZX0NPVkVSQUdFX0NMQVNTOiBDb3ZlcmFnZSBDbGFzcyBhcyBkZWZpbmVkIGJ5IElFRUUgODAyLjExCisgKglzZWN0aW9uIDcuMy4yLjk7IGRvdDExQ292ZXJhZ2VDbGFzczsgdTgKKyAqCisgKiBATkw4MDIxMV9BVFRSX0lGSU5ERVg6IG5ldHdvcmsgaW50ZXJmYWNlIGluZGV4IG9mIHRoZSBkZXZpY2UgdG8gb3BlcmF0ZSBvbgorICogQE5MODAyMTFfQVRUUl9JRk5BTUU6IG5ldHdvcmsgaW50ZXJmYWNlIG5hbWUKKyAqIEBOTDgwMjExX0FUVFJfSUZUWVBFOiB0eXBlIG9mIHZpcnR1YWwgaW50ZXJmYWNlLCBzZWUgJmVudW0gbmw4MDIxMV9pZnR5cGUKKyAqCisgKiBATkw4MDIxMV9BVFRSX01BQzogTUFDIGFkZHJlc3MgKHZhcmlvdXMgdXNlcykKKyAqCisgKiBATkw4MDIxMV9BVFRSX0tFWV9EQVRBOiAodGVtcG9yYWwpIGtleSBkYXRhOyBmb3IgVEtJUCB0aGlzIGNvbnNpc3RzIG9mCisgKgkxNiBieXRlcyBlbmNyeXB0aW9uIGtleSBmb2xsb3dlZCBieSA4IGJ5dGVzIGVhY2ggZm9yIFRYIGFuZCBSWCBNSUMKKyAqCWtleXMKKyAqIEBOTDgwMjExX0FUVFJfS0VZX0lEWDoga2V5IElEICh1OCwgMC0zKQorICogQE5MODAyMTFfQVRUUl9LRVlfQ0lQSEVSOiBrZXkgY2lwaGVyIHN1aXRlICh1MzIsIGFzIGRlZmluZWQgYnkgSUVFRSA4MDIuMTEKKyAqCXNlY3Rpb24gNy4zLjIuMjUuMSwgZS5nLiAweDAwMEZBQzA0KQorICogQE5MODAyMTFfQVRUUl9LRVlfU0VROiB0cmFuc21pdCBrZXkgc2VxdWVuY2UgbnVtYmVyIChJVi9QTikgZm9yIFRLSVAgYW5kCisgKglDQ01QIGtleXMsIGVhY2ggc2l4IGJ5dGVzIGluIGxpdHRsZSBlbmRpYW4KKyAqCisgKiBATkw4MDIxMV9BVFRSX0JFQUNPTl9JTlRFUlZBTDogYmVhY29uIGludGVydmFsIGluIFRVCisgKiBATkw4MDIxMV9BVFRSX0RUSU1fUEVSSU9EOiBEVElNIHBlcmlvZCBmb3IgYmVhY29uaW5nCisgKiBATkw4MDIxMV9BVFRSX0JFQUNPTl9IRUFEOiBwb3J0aW9uIG9mIHRoZSBiZWFjb24gYmVmb3JlIHRoZSBUSU0gSUUKKyAqIEBOTDgwMjExX0FUVFJfQkVBQ09OX1RBSUw6IHBvcnRpb24gb2YgdGhlIGJlYWNvbiBhZnRlciB0aGUgVElNIElFCisgKgorICogQE5MODAyMTFfQVRUUl9TVEFfQUlEOiBBc3NvY2lhdGlvbiBJRCBmb3IgdGhlIHN0YXRpb24gKHUxNikKKyAqIEBOTDgwMjExX0FUVFJfU1RBX0ZMQUdTOiBmbGFncywgbmVzdGVkIGVsZW1lbnQgd2l0aCBOTEFfRkxBRyBhdHRyaWJ1dGVzIG9mCisgKgkmZW51bSBubDgwMjExX3N0YV9mbGFncyAoZGVwcmVjYXRlZCwgdXNlICVOTDgwMjExX0FUVFJfU1RBX0ZMQUdTMikKKyAqIEBOTDgwMjExX0FUVFJfU1RBX0xJU1RFTl9JTlRFUlZBTDogbGlzdGVuIGludGVydmFsIGFzIGRlZmluZWQgYnkKKyAqCUlFRUUgODAyLjExIDcuMy4xLjYgKHUxNikuCisgKiBATkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JURURfUkFURVM6IHN1cHBvcnRlZCByYXRlcywgYXJyYXkgb2Ygc3VwcG9ydGVkCisgKglyYXRlcyBhcyBkZWZpbmVkIGJ5IElFRUUgODAyLjExIDcuMy4yLjIgYnV0IHdpdGhvdXQgdGhlIGxlbmd0aAorICoJcmVzdHJpY3Rpb24gKGF0IG1vc3QgJU5MODAyMTFfTUFYX1NVUFBfUkFURVMpLgorICogQE5MODAyMTFfQVRUUl9TVEFfVkxBTjogaW50ZXJmYWNlIGluZGV4IG9mIFZMQU4gaW50ZXJmYWNlIHRvIG1vdmUgc3RhdGlvbgorICoJdG8sIG9yIHRoZSBBUCBpbnRlcmZhY2UgdGhlIHN0YXRpb24gd2FzIG9yaWdpbmFsbHkgYWRkZWQgdG8gdG8uCisgKiBATkw4MDIxMV9BVFRSX1NUQV9JTkZPOiBpbmZvcm1hdGlvbiBhYm91dCBhIHN0YXRpb24sIHBhcnQgb2Ygc3RhdGlvbiBpbmZvCisgKglnaXZlbiBmb3IgJU5MODAyMTFfQ01EX0dFVF9TVEFUSU9OLCBuZXN0ZWQgYXR0cmlidXRlIGNvbnRhaW5pbmcKKyAqCWluZm8gYXMgcG9zc2libGUsIHNlZSAmZW51bSBubDgwMjExX3N0YV9pbmZvLgorICoKKyAqIEBOTDgwMjExX0FUVFJfV0lQSFlfQkFORFM6IEluZm9ybWF0aW9uIGFib3V0IGFuIG9wZXJhdGluZyBiYW5kcywKKyAqCWNvbnNpc3Rpbmcgb2YgYSBuZXN0ZWQgYXJyYXkuCisgKgorICogQE5MODAyMTFfQVRUUl9NRVNIX0lEOiBtZXNoIGlkICgxLTMyIGJ5dGVzKS4KKyAqIEBOTDgwMjExX0FUVFJfUExJTktfQUNUSU9OOiBhY3Rpb24gdG8gcGVyZm9ybSBvbiB0aGUgbWVzaCBwZWVyIGxpbmsuCisgKiBATkw4MDIxMV9BVFRSX01QQVRIX05FWFRfSE9QOiBNQUMgYWRkcmVzcyBvZiB0aGUgbmV4dCBob3AgZm9yIGEgbWVzaCBwYXRoLgorICogQE5MODAyMTFfQVRUUl9NUEFUSF9JTkZPOiBpbmZvcm1hdGlvbiBhYm91dCBhIG1lc2hfcGF0aCwgcGFydCBvZiBtZXNoIHBhdGgKKyAqIAlpbmZvIGdpdmVuIGZvciAlTkw4MDIxMV9DTURfR0VUX01QQVRILCBuZXN0ZWQgYXR0cmlidXRlIGRlc2NyaWJlZCBhdAorICoJJmVudW0gbmw4MDIxMV9tcGF0aF9pbmZvLgorICoKKyAqIEBOTDgwMjExX0FUVFJfTU5UUl9GTEFHUzogZmxhZ3MsIG5lc3RlZCBlbGVtZW50IHdpdGggTkxBX0ZMQUcgYXR0cmlidXRlcyBvZgorICogICAgICAmZW51bSBubDgwMjExX21udHJfZmxhZ3MuCisgKgorICogQE5MODAyMTFfQVRUUl9SRUdfQUxQSEEyOiBhbiBJU08tMzE2Ni1hbHBoYTIgY291bnRyeSBjb2RlIGZvciB3aGljaCB0aGUKKyAqIAljdXJyZW50IHJlZ3VsYXRvcnkgZG9tYWluIHNob3VsZCBiZSBzZXQgdG8gb3IgaXMgYWxyZWFkeSBzZXQgdG8uCisgKiAJRm9yIGV4YW1wbGUsICdDUicsIGZvciBDb3N0YSBSaWNhLiBUaGlzIGF0dHJpYnV0ZSBpcyB1c2VkIGJ5IHRoZSBrZXJuZWwKKyAqIAl0byBxdWVyeSB0aGUgQ1JEQSB0byByZXRyaWV2ZSBvbmUgcmVndWxhdG9yeSBkb21haW4uIFRoaXMgYXR0cmlidXRlIGNhbgorICogCWFsc28gYmUgdXNlZCBieSB1c2Vyc3BhY2UgdG8gcXVlcnkgdGhlIGtlcm5lbCBmb3IgdGhlIGN1cnJlbnRseSBzZXQKKyAqIAlyZWd1bGF0b3J5IGRvbWFpbi4gV2UgY2hvc2UgYW4gYWxwaGEyIGFzIHRoYXQgaXMgYWxzbyB1c2VkIGJ5IHRoZQorICogCUlFRUUtODAyLjExZCBjb3VudHJ5IGluZm9ybWF0aW9uIGVsZW1lbnQgdG8gaWRlbnRpZnkgYSBjb3VudHJ5LgorICogCVVzZXJzIGNhbiBhbHNvIHNpbXBseSBhc2sgdGhlIHdpcmVsZXNzIGNvcmUgdG8gc2V0IHJlZ3VsYXRvcnkgZG9tYWluCisgKiAJdG8gYSBzcGVjaWZpYyBhbHBoYTIuCisgKiBATkw4MDIxMV9BVFRSX1JFR19SVUxFUzogYSBuZXN0ZWQgYXJyYXkgb2YgcmVndWxhdG9yeSBkb21haW4gcmVndWxhdG9yeQorICoJcnVsZXMuCisgKgorICogQE5MODAyMTFfQVRUUl9CU1NfQ1RTX1BST1Q6IHdoZXRoZXIgQ1RTIHByb3RlY3Rpb24gaXMgZW5hYmxlZCAodTgsIDAgb3IgMSkKKyAqIEBOTDgwMjExX0FUVFJfQlNTX1NIT1JUX1BSRUFNQkxFOiB3aGV0aGVyIHNob3J0IHByZWFtYmxlIGlzIGVuYWJsZWQKKyAqCSh1OCwgMCBvciAxKQorICogQE5MODAyMTFfQVRUUl9CU1NfU0hPUlRfU0xPVF9USU1FOiB3aGV0aGVyIHNob3J0IHNsb3QgdGltZSBlbmFibGVkCisgKgkodTgsIDAgb3IgMSkKKyAqIEBOTDgwMjExX0FUVFJfQlNTX0JBU0lDX1JBVEVTOiBiYXNpYyByYXRlcywgYXJyYXkgb2YgYmFzaWMKKyAqCXJhdGVzIGluIGZvcm1hdCBkZWZpbmVkIGJ5IElFRUUgODAyLjExIDcuMy4yLjIgYnV0IHdpdGhvdXQgdGhlIGxlbmd0aAorICoJcmVzdHJpY3Rpb24gKGF0IG1vc3QgJU5MODAyMTFfTUFYX1NVUFBfUkFURVMpLgorICoKKyAqIEBOTDgwMjExX0FUVFJfSFRfQ0FQQUJJTElUWTogSFQgQ2FwYWJpbGl0eSBpbmZvcm1hdGlvbiBlbGVtZW50IChmcm9tCisgKglhc3NvY2lhdGlvbiByZXF1ZXN0IHdoZW4gdXNlZCB3aXRoIE5MODAyMTFfQ01EX05FV19TVEFUSU9OKQorICoKKyAqIEBOTDgwMjExX0FUVFJfU1VQUE9SVEVEX0lGVFlQRVM6IG5lc3RlZCBhdHRyaWJ1dGUgY29udGFpbmluZyBhbGwKKyAqCXN1cHBvcnRlZCBpbnRlcmZhY2UgdHlwZXMsIGVhY2ggYSBmbGFnIGF0dHJpYnV0ZSB3aXRoIHRoZSBudW1iZXIKKyAqCW9mIHRoZSBpbnRlcmZhY2UgbW9kZS4KKyAqCisgKiBATkw4MDIxMV9BVFRSX01HTVRfU1VCVFlQRTogTWFuYWdlbWVudCBmcmFtZSBzdWJ0eXBlIGZvcgorICoJJU5MODAyMTFfQ01EX1NFVF9NR01UX0VYVFJBX0lFLgorICoKKyAqIEBOTDgwMjExX0FUVFJfSUU6IEluZm9ybWF0aW9uIGVsZW1lbnQocykgZGF0YSAodXNlZCwgZS5nLiwgd2l0aAorICoJJU5MODAyMTFfQ01EX1NFVF9NR01UX0VYVFJBX0lFKS4KKyAqCisgKiBATkw4MDIxMV9BVFRSX01BWF9OVU1fU0NBTl9TU0lEUzogbnVtYmVyIG9mIFNTSURzIHlvdSBjYW4gc2NhbiB3aXRoCisgKglhIHNpbmdsZSBzY2FuIHJlcXVlc3QsIGEgd2lwaHkgYXR0cmlidXRlLgorICogQE5MODAyMTFfQVRUUl9NQVhfU0NBTl9JRV9MRU46IG1heGltdW0gbGVuZ3RoIG9mIGluZm9ybWF0aW9uIGVsZW1lbnRzCisgKgl0aGF0IGNhbiBiZSBhZGRlZCB0byBhIHNjYW4gcmVxdWVzdAorICoKKyAqIEBOTDgwMjExX0FUVFJfU0NBTl9GUkVRVUVOQ0lFUzogbmVzdGVkIGF0dHJpYnV0ZSB3aXRoIGZyZXF1ZW5jaWVzIChpbiBNSHopCisgKiBATkw4MDIxMV9BVFRSX1NDQU5fU1NJRFM6IG5lc3RlZCBhdHRyaWJ1dGUgd2l0aCBTU0lEcywgbGVhdmUgb3V0IGZvciBwYXNzaXZlCisgKglzY2FubmluZyBhbmQgaW5jbHVkZSBhIHplcm8tbGVuZ3RoIFNTSUQgKHdpbGRjYXJkKSBmb3Igd2lsZGNhcmQgc2NhbgorICogQE5MODAyMTFfQVRUUl9CU1M6IHNjYW4gcmVzdWx0IEJTUworICoKKyAqIEBOTDgwMjExX0FUVFJfUkVHX0lOSVRJQVRPUjogaW5kaWNhdGVzIHdobyByZXF1ZXN0ZWQgdGhlIHJlZ3VsYXRvcnkgZG9tYWluCisgKiAJY3VycmVudGx5IGluIGVmZmVjdC4gVGhpcyBjb3VsZCBiZSBhbnkgb2YgdGhlICVOTDgwMjExX1JFR0RPTV9TRVRfQllfKgorICogQE5MODAyMTFfQVRUUl9SRUdfVFlQRTogaW5kaWNhdGVzIHRoZSB0eXBlIG9mIHRoZSByZWd1bGF0b3J5IGRvbWFpbiBjdXJyZW50bHkKKyAqIAlzZXQuIFRoaXMgY2FuIGJlIG9uZSBvZiB0aGUgbmw4MDIxMV9yZWdfdHlwZSAoJU5MODAyMTFfUkVHRE9NX1RZUEVfKikKKyAqCisgKiBATkw4MDIxMV9BVFRSX1NVUFBPUlRFRF9DT01NQU5EUzogd2lwaHkgYXR0cmlidXRlIHRoYXQgc3BlY2lmaWVzCisgKglhbiBhcnJheSBvZiBjb21tYW5kIG51bWJlcnMgKGkuZS4gYSBtYXBwaW5nIGluZGV4IHRvIGNvbW1hbmQgbnVtYmVyKQorICoJdGhhdCB0aGUgZHJpdmVyIGZvciB0aGUgZ2l2ZW4gd2lwaHkgc3VwcG9ydHMuCisgKgorICogQE5MODAyMTFfQVRUUl9GUkFNRTogZnJhbWUgZGF0YSAoYmluYXJ5IGF0dHJpYnV0ZSksIGluY2x1ZGluZyBmcmFtZSBoZWFkZXIKKyAqCWFuZCBib2R5LCBidXQgbm90IEZDUzsgdXNlZCwgZS5nLiwgd2l0aCBOTDgwMjExX0NNRF9BVVRIRU5USUNBVEUgYW5kCisgKglOTDgwMjExX0NNRF9BU1NPQ0lBVEUgZXZlbnRzCisgKiBATkw4MDIxMV9BVFRSX1NTSUQ6IFNTSUQgKGJpbmFyeSBhdHRyaWJ1dGUsIDAuLjMyIG9jdGV0cykKKyAqIEBOTDgwMjExX0FUVFJfQVVUSF9UWVBFOiBBdXRoZW50aWNhdGlvblR5cGUsIHNlZSAmZW51bSBubDgwMjExX2F1dGhfdHlwZSwKKyAqCXJlcHJlc2VudGVkIGFzIGEgdTMyCisgKiBATkw4MDIxMV9BVFRSX1JFQVNPTl9DT0RFOiBSZWFzb25Db2RlIGZvciAlTkw4MDIxMV9DTURfREVBVVRIRU5USUNBVEUgYW5kCisgKgklTkw4MDIxMV9DTURfRElTQVNTT0NJQVRFLCB1MTYKKyAqCisgKiBATkw4MDIxMV9BVFRSX0tFWV9UWVBFOiBLZXkgVHlwZSwgc2VlICZlbnVtIG5sODAyMTFfa2V5X3R5cGUsIHJlcHJlc2VudGVkIGFzCisgKglhIHUzMgorICoKKyAqIEBOTDgwMjExX0FUVFJfRlJFUV9CRUZPUkU6IEEgY2hhbm5lbCB3aGljaCBoYXMgc3VmZmVyZWQgYSByZWd1bGF0b3J5IGNoYW5nZQorICogCWR1ZSB0byBjb25zaWRlcmF0aW9ucyBmcm9tIGEgYmVhY29uIGhpbnQuIFRoaXMgYXR0cmlidXRlIHJlZmxlY3RzCisgKiAJdGhlIHN0YXRlIG9mIHRoZSBjaGFubmVsIF9iZWZvcmVfIHRoZSBiZWFjb24gaGludCBwcm9jZXNzaW5nLiBUaGlzCisgKiAJYXR0cmlidXRlcyBjb25zaXN0cyBvZiBhIG5lc3RlZCBhdHRyaWJ1dGUgY29udGFpbmluZworICogCU5MODAyMTFfRlJFUVVFTkNZX0FUVFJfKgorICogQE5MODAyMTFfQVRUUl9GUkVRX0FGVEVSOiBBIGNoYW5uZWwgd2hpY2ggaGFzIHN1ZmZlcmVkIGEgcmVndWxhdG9yeSBjaGFuZ2UKKyAqIAlkdWUgdG8gY29uc2lkZXJhdGlvbnMgZnJvbSBhIGJlYWNvbiBoaW50LiBUaGlzIGF0dHJpYnV0ZSByZWZsZWN0cworICogCXRoZSBzdGF0ZSBvZiB0aGUgY2hhbm5lbCBfYWZ0ZXJfIHRoZSBiZWFjb24gaGludCBwcm9jZXNzaW5nLiBUaGlzCisgKiAJYXR0cmlidXRlcyBjb25zaXN0cyBvZiBhIG5lc3RlZCBhdHRyaWJ1dGUgY29udGFpbmluZworICogCU5MODAyMTFfRlJFUVVFTkNZX0FUVFJfKgorICoKKyAqIEBOTDgwMjExX0FUVFJfQ0lQSEVSX1NVSVRFUzogYSBzZXQgb2YgdTMyIHZhbHVlcyBpbmRpY2F0aW5nIHRoZSBzdXBwb3J0ZWQKKyAqCWNpcGhlciBzdWl0ZXMKKyAqCisgKiBATkw4MDIxMV9BVFRSX0ZSRVFfRklYRUQ6IGEgZmxhZyBpbmRpY2F0aW5nIHRoZSBJQlNTIHNob3VsZCBub3QgdHJ5IHRvIGxvb2sKKyAqCWZvciBvdGhlciBuZXR3b3JrcyBvbiBkaWZmZXJlbnQgY2hhbm5lbHMKKyAqCisgKiBATkw4MDIxMV9BVFRSX1RJTUVEX09VVDogYSBmbGFnIGluZGljYXRpbmcgdGhhbiBhbiBvcGVyYXRpb24gdGltZWQgb3V0OyB0aGlzCisgKglpcyB1c2VkLCBlLmcuLCB3aXRoICVOTDgwMjExX0NNRF9BVVRIRU5USUNBVEUgZXZlbnQKKyAqCisgKiBATkw4MDIxMV9BVFRSX1VTRV9NRlA6IFdoZXRoZXIgbWFuYWdlbWVudCBmcmFtZSBwcm90ZWN0aW9uIChJRUVFIDgwMi4xMXcpIGlzCisgKgl1c2VkIGZvciB0aGUgYXNzb2NpYXRpb24gKCZlbnVtIG5sODAyMTFfbWZwLCByZXByZXNlbnRlZCBhcyBhIHUzMik7CisgKgl0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZAorICoJd2l0aCAlTkw4MDIxMV9DTURfQVNTT0NJQVRFIHJlcXVlc3QKKyAqCisgKiBATkw4MDIxMV9BVFRSX1NUQV9GTEFHUzI6IEF0dHJpYnV0ZSBjb250YWluaW5nIGEKKyAqCSZzdHJ1Y3Qgbmw4MDIxMV9zdGFfZmxhZ191cGRhdGUuCisgKgorICogQE5MODAyMTFfQVRUUl9DT05UUk9MX1BPUlQ6IEEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdXNlciBzcGFjZSBjb250cm9scworICoJSUVFRSA4MDIuMVggcG9ydCwgaS5lLiwgc2V0cy9jbGVhcnMgJU5MODAyMTFfU1RBX0ZMQUdfQVVUSE9SSVpFRCwgaW4KKyAqCXN0YXRpb24gbW9kZS4gSWYgdGhlIGZsYWcgaXMgaW5jbHVkZWQgaW4gJU5MODAyMTFfQ01EX0FTU09DSUFURQorICoJcmVxdWVzdCwgdGhlIGRyaXZlciB3aWxsIGFzc3VtZSB0aGF0IHRoZSBwb3J0IGlzIHVuYXV0aG9yaXplZCB1bnRpbAorICoJYXV0aG9yaXplZCBieSB1c2VyIHNwYWNlLiBPdGhlcndpc2UsIHBvcnQgaXMgbWFya2VkIGF1dGhvcml6ZWQgYnkKKyAqCWRlZmF1bHQgaW4gc3RhdGlvbiBtb2RlLgorICogQE5MODAyMTFfQVRUUl9DT05UUk9MX1BPUlRfRVRIRVJUWVBFOiBBIDE2LWJpdCB2YWx1ZSBpbmRpY2F0aW5nIHRoZQorICoJZXRoZXJ0eXBlIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBrZXkgbmVnb3RpYXRpb24uIEl0IGNhbiBiZQorICoJc3BlY2lmaWVkIHdpdGggdGhlIGFzc29jaWF0ZSBhbmQgY29ubmVjdCBjb21tYW5kcy4gSWYgaXQgaXMgbm90CisgKglzcGVjaWZpZWQsIHRoZSB2YWx1ZSBkZWZhdWx0cyB0byAweDg4OEUgKFBBRSwgODAyLjFYKS4gVGhpcworICoJYXR0cmlidXRlIGlzIGFsc28gdXNlZCBhcyBhIGZsYWcgaW4gdGhlIHdpcGh5IGluZm9ybWF0aW9uIHRvCisgKglpbmRpY2F0ZSB0aGF0IHByb3RvY29scyBvdGhlciB0aGFuIFBBRSBhcmUgc3VwcG9ydGVkLgorICogQE5MODAyMTFfQVRUUl9DT05UUk9MX1BPUlRfTk9fRU5DUllQVDogV2hlbiBpbmNsdWRlZCBhbG9uZyB3aXRoCisgKgklTkw4MDIxMV9BVFRSX0NPTlRST0xfUE9SVF9FVEhFUlRZUEUsIGluZGljYXRlcyB0aGF0IHRoZSBjdXN0b20KKyAqCWV0aGVydHlwZSBmcmFtZXMgdXNlZCBmb3Iga2V5IG5lZ290aWF0aW9uIG11c3Qgbm90IGJlIGVuY3J5cHRlZC4KKyAqCisgKiBATkw4MDIxMV9BVFRSX1RFU1REQVRBOiBUZXN0bW9kZSBkYXRhIGJsb2IsIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBkcml2ZXIuCisgKglXZSByZWNvbW1lbmQgdXNpbmcgbmVzdGVkLCBkcml2ZXItc3BlY2lmaWMgYXR0cmlidXRlcyB3aXRoaW4gdGhpcy4KKyAqCisgKiBATkw4MDIxMV9BVFRSX0RJU0NPTk5FQ1RFRF9CWV9BUDogQSBmbGFnIGluZGljYXRpbmcgdGhhdCB0aGUgRElTQ09OTkVDVAorICoJZXZlbnQgd2FzIGR1ZSB0byB0aGUgQVAgZGlzY29ubmVjdGluZyB0aGUgc3RhdGlvbiwgYW5kIG5vdCBkdWUgdG8KKyAqCWEgbG9jYWwgZGlzY29ubmVjdCByZXF1ZXN0LgorICogQE5MODAyMTFfQVRUUl9TVEFUVVNfQ09ERTogU3RhdHVzQ29kZSBmb3IgdGhlICVOTDgwMjExX0NNRF9DT05ORUNUCisgKglldmVudCAodTE2KQorICogQE5MODAyMTFfQVRUUl9QUklWQUNZOiBGbGFnIGF0dHJpYnV0ZSwgdXNlZCB3aXRoIGNvbm5lY3QoKSwgaW5kaWNhdGluZworICoJdGhhdCBwcm90ZWN0ZWQgQVBzIHNob3VsZCBiZSB1c2VkLgorICoKKyAqIEBOTDgwMjExX0FUVFJfQ0lQSEVSU19QQUlSV0lTRTogVXNlZCB3aXRoIENPTk5FQ1QgYW5kIEFTU09DSUFURSB0bworICoJaW5kaWNhdGUgd2hpY2ggdW5pY2FzdCBrZXkgY2lwaGVycyB3aWxsIGJlIHVzZWQgd2l0aCB0aGUgY29ubmVjdGlvbgorICoJKGFuIGFycmF5IG9mIHUzMikuCisgKiBATkw4MDIxMV9BVFRSX0NJUEhFUl9HUk9VUDogVXNlZCB3aXRoIENPTk5FQ1QgYW5kIEFTU09DSUFURSB0byBpbmRpY2F0ZQorICoJd2hpY2ggZ3JvdXAga2V5IGNpcGhlciB3aWxsIGJlIHVzZWQgd2l0aCB0aGUgY29ubmVjdGlvbiAoYSB1MzIpLgorICogQE5MODAyMTFfQVRUUl9XUEFfVkVSU0lPTlM6IFVzZWQgd2l0aCBDT05ORUNUIGFuZCBBU1NPQ0lBVEUgdG8gaW5kaWNhdGUKKyAqCXdoaWNoIFdQQSB2ZXJzaW9uKHMpIHRoZSBBUCB3ZSB3YW50IHRvIGFzc29jaWF0ZSB3aXRoIGlzIHVzaW5nCisgKgkoYSB1MzIgd2l0aCBmbGFncyBmcm9tICZlbnVtIG5sODAyMTFfd3BhX3ZlcnNpb25zKS4KKyAqIEBOTDgwMjExX0FUVFJfQUtNX1NVSVRFUzogVXNlZCB3aXRoIENPTk5FQ1QgYW5kIEFTU09DSUFURSB0byBpbmRpY2F0ZQorICoJd2hpY2gga2V5IG1hbmFnZW1lbnQgYWxnb3JpdGhtKHMpIHRvIHVzZSAoYW4gYXJyYXkgb2YgdTMyKS4KKyAqCisgKiBATkw4MDIxMV9BVFRSX1JFUV9JRTogKFJlKWFzc29jaWF0aW9uIHJlcXVlc3QgaW5mb3JtYXRpb24gZWxlbWVudHMgYXMKKyAqCXNlbnQgb3V0IGJ5IHRoZSBjYXJkLCBmb3IgUk9BTSBhbmQgc3VjY2Vzc2Z1bCBDT05ORUNUIGV2ZW50cy4KKyAqIEBOTDgwMjExX0FUVFJfUkVTUF9JRTogKFJlKWFzc29jaWF0aW9uIHJlc3BvbnNlIGluZm9ybWF0aW9uIGVsZW1lbnRzIGFzCisgKglzZW50IGJ5IHBlZXIsIGZvciBST0FNIGFuZCBzdWNjZXNzZnVsIENPTk5FQ1QgZXZlbnRzLgorICoKKyAqIEBOTDgwMjExX0FUVFJfUFJFVl9CU1NJRDogcHJldmlvdXMgQlNTSUQsIHRvIGJlIHVzZWQgYnkgaW4gQVNTT0NJQVRFCisgKgljb21tYW5kcyB0byBzcGVjaWZ5IHVzaW5nIGEgcmVhc3NvY2lhdGUgZnJhbWUKKyAqCisgKiBATkw4MDIxMV9BVFRSX0tFWToga2V5IGluZm9ybWF0aW9uIGluIGEgbmVzdGVkIGF0dHJpYnV0ZSB3aXRoCisgKgklTkw4MDIxMV9LRVlfKiBzdWItYXR0cmlidXRlcworICogQE5MODAyMTFfQVRUUl9LRVlTOiBhcnJheSBvZiBrZXlzIGZvciBzdGF0aWMgV0VQIGtleXMgZm9yIGNvbm5lY3QoKQorICoJYW5kIGpvaW5faWJzcygpLCBrZXkgaW5mb3JtYXRpb24gaXMgaW4gYSBuZXN0ZWQgYXR0cmlidXRlIGVhY2gKKyAqCXdpdGggJU5MODAyMTFfS0VZXyogc3ViLWF0dHJpYnV0ZXMKKyAqCisgKiBATkw4MDIxMV9BVFRSX1BJRDogUHJvY2VzcyBJRCBvZiBhIG5ldHdvcmsgbmFtZXNwYWNlLgorICoKKyAqIEBOTDgwMjExX0FUVFJfR0VORVJBVElPTjogVXNlZCB0byBpbmRpY2F0ZSBjb25zaXN0ZW50IHNuYXBzaG90cyBmb3IKKyAqCWR1bXBzLiBUaGlzIG51bWJlciBpbmNyZWFzZXMgd2hlbmV2ZXIgdGhlIG9iamVjdCBsaXN0IGJlaW5nCisgKglkdW1wZWQgY2hhbmdlcywgYW5kIGFzIHN1Y2ggdXNlcnNwYWNlIGNhbiB2ZXJpZnkgdGhhdCBpdCBoYXMKKyAqCW9idGFpbmVkIGEgY29tcGxldGUgYW5kIGNvbnNpc3RlbnQgc25hcHNob3QgYnkgdmVyaWZ5aW5nIHRoYXQKKyAqCWFsbCBkdW1wIG1lc3NhZ2VzIGNvbnRhaW4gdGhlIHNhbWUgZ2VuZXJhdGlvbiBudW1iZXIuIElmIGl0CisgKgljaGFuZ2VkIHRoZW4gdGhlIGxpc3QgY2hhbmdlZCBhbmQgdGhlIGR1bXAgc2hvdWxkIGJlIHJlcGVhdGVkCisgKgljb21wbGV0ZWx5IGZyb20gc2NyYXRjaC4KKyAqCisgKiBATkw4MDIxMV9BVFRSXzRBRERSOiBVc2UgNC1hZGRyZXNzIGZyYW1lcyBvbiBhIHZpcnR1YWwgaW50ZXJmYWNlCisgKgorICogQE5MODAyMTFfQVRUUl9TVVJWRVlfSU5GTzogc3VydmV5IGluZm9ybWF0aW9uIGFib3V0IGEgY2hhbm5lbCwgcGFydCBvZgorICogICAgICB0aGUgc3VydmV5IHJlc3BvbnNlIGZvciAlTkw4MDIxMV9DTURfR0VUX1NVUlZFWSwgbmVzdGVkIGF0dHJpYnV0ZQorICogICAgICBjb250YWluaW5nIGluZm8gYXMgcG9zc2libGUsIHNlZSAmZW51bSBzdXJ2ZXlfaW5mby4KKyAqCisgKiBATkw4MDIxMV9BVFRSX1BNS0lEOiBQTUsgbWF0ZXJpYWwgZm9yIFBNS1NBIGNhY2hpbmcuCisgKiBATkw4MDIxMV9BVFRSX01BWF9OVU1fUE1LSURTOiBtYXhpbXVtIG51bWJlciBvZiBQTUtJRHMgYSBmaXJtd2FyZSBjYW4KKyAqCWNhY2hlLCBhIHdpcGh5IGF0dHJpYnV0ZS4KKyAqCisgKiBATkw4MDIxMV9BVFRSX0RVUkFUSU9OOiBEdXJhdGlvbiBvZiBhbiBvcGVyYXRpb24gaW4gbWlsbGlzZWNvbmRzLCB1MzIuCisgKgorICogQE5MODAyMTFfQVRUUl9DT09LSUU6IEdlbmVyaWMgNjQtYml0IGNvb2tpZSB0byBpZGVudGlmeSBvYmplY3RzLgorICoKKyAqIEBOTDgwMjExX0FUVFJfVFhfUkFURVM6IE5lc3RlZCBzZXQgb2YgYXR0cmlidXRlcworICoJKGVudW0gbmw4MDIxMV90eF9yYXRlX2F0dHJpYnV0ZXMpIGRlc2NyaWJpbmcgVFggcmF0ZXMgcGVyIGJhbmQuIFRoZQorICoJZW51bSBubDgwMjExX2JhbmQgdmFsdWUgaXMgdXNlZCBhcyB0aGUgaW5kZXggKG5sYV90eXBlKCkgb2YgdGhlIG5lc3RlZAorICoJZGF0YS4gSWYgYSBiYW5kIGlzIG5vdCBpbmNsdWRlZCwgaXQgd2lsbCBiZSBjb25maWd1cmVkIHRvIGFsbG93IGFsbAorICoJcmF0ZXMgYmFzZWQgb24gbmVnb3RpYXRlZCBzdXBwb3J0ZWQgcmF0ZXMgaW5mb3JtYXRpb24uIFRoaXMgYXR0cmlidXRlCisgKglpcyB1c2VkIHdpdGggJU5MODAyMTFfQ01EX1NFVF9UWF9CSVRSQVRFX01BU0suCisgKgorICogQE5MODAyMTFfQVRUUl9GUkFNRV9NQVRDSDogQSBiaW5hcnkgYXR0cmlidXRlIHdoaWNoIHR5cGljYWxseSBtdXN0IGNvbnRhaW4KKyAqCWF0IGxlYXN0IG9uZSBieXRlLCBjdXJyZW50bHkgdXNlZCB3aXRoIEBOTDgwMjExX0NNRF9SRUdJU1RFUl9GUkFNRS4KKyAqIEBOTDgwMjExX0FUVFJfRlJBTUVfVFlQRTogQSB1MTYgaW5kaWNhdGluZyB0aGUgZnJhbWUgdHlwZS9zdWJ0eXBlIGZvciB0aGUKKyAqCUBOTDgwMjExX0NNRF9SRUdJU1RFUl9GUkFNRSBjb21tYW5kLgorICogQE5MODAyMTFfQVRUUl9UWF9GUkFNRV9UWVBFUzogd2lwaHkgY2FwYWJpbGl0eSBhdHRyaWJ1dGUsIHdoaWNoIGlzIGEKKyAqCW5lc3RlZCBhdHRyaWJ1dGUgb2YgJU5MODAyMTFfQVRUUl9GUkFNRV9UWVBFIGF0dHJpYnV0ZXMsIGNvbnRhaW5pbmcKKyAqCWluZm9ybWF0aW9uIGFib3V0IHdoaWNoIGZyYW1lIHR5cGVzIGNhbiBiZSB0cmFuc21pdHRlZCB3aXRoCisgKgklTkw4MDIxMV9DTURfRlJBTUUuCisgKiBATkw4MDIxMV9BVFRSX1JYX0ZSQU1FX1RZUEVTOiB3aXBoeSBjYXBhYmlsaXR5IGF0dHJpYnV0ZSwgd2hpY2ggaXMgYQorICoJbmVzdGVkIGF0dHJpYnV0ZSBvZiAlTkw4MDIxMV9BVFRSX0ZSQU1FX1RZUEUgYXR0cmlidXRlcywgY29udGFpbmluZworICoJaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggZnJhbWUgdHlwZXMgY2FuIGJlIHJlZ2lzdGVyZWQgZm9yIFJYLgorICoKKyAqIEBOTDgwMjExX0FUVFJfQUNLOiBGbGFnIGF0dHJpYnV0ZSBpbmRpY2F0aW5nIHRoYXQgdGhlIGZyYW1lIHdhcworICoJYWNrbm93bGVkZ2VkIGJ5IHRoZSByZWNpcGllbnQuCisgKgorICogQE5MODAyMTFfQVRUUl9DUU06IGNvbm5lY3Rpb24gcXVhbGl0eSBtb25pdG9yIGNvbmZpZ3VyYXRpb24gaW4gYQorICoJbmVzdGVkIGF0dHJpYnV0ZSB3aXRoICVOTDgwMjExX0FUVFJfQ1FNXyogc3ViLWF0dHJpYnV0ZXMuCisgKgorICogQE5MODAyMTFfQVRUUl9MT0NBTF9TVEFURV9DSEFOR0U6IEZsYWcgYXR0cmlidXRlIHRvIGluZGljYXRlIHRoYXQgYSBjb21tYW5kCisgKglpcyByZXF1ZXN0aW5nIGEgbG9jYWwgYXV0aGVudGljYXRpb24vYXNzb2NpYXRpb24gc3RhdGUgY2hhbmdlIHdpdGhvdXQKKyAqCWludm9raW5nIGFjdHVhbCBtYW5hZ2VtZW50IGZyYW1lIGV4Y2hhbmdlLiBUaGlzIGNhbiBiZSB1c2VkIHdpdGgKKyAqCU5MODAyMTFfQ01EX0FVVEhFTlRJQ0FURSwgTkw4MDIxMV9DTURfREVBVVRIRU5USUNBVEUsCisgKglOTDgwMjExX0NNRF9ESVNBU1NPQ0lBVEUuCisgKgorICogQE5MODAyMTFfQVRUUl9BUF9JU09MQVRFOiAoQVAgbW9kZSkgRG8gbm90IGZvcndhcmQgdHJhZmZpYyBiZXR3ZWVuIHN0YXRpb25zCisgKgljb25uZWN0ZWQgdG8gdGhpcyBCU1MuCisgKgorICogQE5MODAyMTFfQVRUUl9XSVBIWV9UWF9QT1dFUl9TRVRUSU5HOiBUcmFuc21pdCBwb3dlciBzZXR0aW5nIHR5cGUuIFNlZQorICogICAgICAmZW51bSBubDgwMjExX3R4X3Bvd2VyX3NldHRpbmcgZm9yIHBvc3NpYmxlIHZhbHVlcy4KKyAqIEBOTDgwMjExX0FUVFJfV0lQSFlfVFhfUE9XRVJfTEVWRUw6IFRyYW5zbWl0IHBvd2VyIGxldmVsIGluIHNpZ25lZCBtQm0gdW5pdHMuCisgKiAgICAgIFRoaXMgaXMgdXNlZCBpbiBhc3NvY2lhdGlvbiB3aXRoIEBOTDgwMjExX0FUVFJfV0lQSFlfVFhfUE9XRVJfU0VUVElORworICogICAgICBmb3Igbm9uLWF1dG9tYXRpYyBzZXR0aW5ncy4KKyAqCisgKiBATkw4MDIxMV9BVFRSX1NVUFBPUlRfSUJTU19SU046IFRoZSBkZXZpY2Ugc3VwcG9ydHMgSUJTUyBSU04sIHdoaWNoIG1vc3RseQorICoJbWVhbnMgc3VwcG9ydCBmb3IgcGVyLXN0YXRpb24gR1RLcy4KKyAqCisgKiBATkw4MDIxMV9BVFRSX01BWDogaGlnaGVzdCBhdHRyaWJ1dGUgbnVtYmVyIGN1cnJlbnRseSBkZWZpbmVkCisgKiBAX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlCisgKi8KK2VudW0gbmw4MDIxMV9hdHRycyB7CisvKiBkb24ndCBjaGFuZ2UgdGhlIG9yZGVyIG9yIGFkZCBhbnl0aGluZyBpbmJldHdlZW4sIHRoaXMgaXMgQUJJISAqLworCU5MODAyMTFfQVRUUl9VTlNQRUMsCisKKwlOTDgwMjExX0FUVFJfV0lQSFksCisJTkw4MDIxMV9BVFRSX1dJUEhZX05BTUUsCisKKwlOTDgwMjExX0FUVFJfSUZJTkRFWCwKKwlOTDgwMjExX0FUVFJfSUZOQU1FLAorCU5MODAyMTFfQVRUUl9JRlRZUEUsCisKKwlOTDgwMjExX0FUVFJfTUFDLAorCisJTkw4MDIxMV9BVFRSX0tFWV9EQVRBLAorCU5MODAyMTFfQVRUUl9LRVlfSURYLAorCU5MODAyMTFfQVRUUl9LRVlfQ0lQSEVSLAorCU5MODAyMTFfQVRUUl9LRVlfU0VRLAorCU5MODAyMTFfQVRUUl9LRVlfREVGQVVMVCwKKworCU5MODAyMTFfQVRUUl9CRUFDT05fSU5URVJWQUwsCisJTkw4MDIxMV9BVFRSX0RUSU1fUEVSSU9ELAorCU5MODAyMTFfQVRUUl9CRUFDT05fSEVBRCwKKwlOTDgwMjExX0FUVFJfQkVBQ09OX1RBSUwsCisKKwlOTDgwMjExX0FUVFJfU1RBX0FJRCwKKwlOTDgwMjExX0FUVFJfU1RBX0ZMQUdTLAorCU5MODAyMTFfQVRUUl9TVEFfTElTVEVOX0lOVEVSVkFMLAorCU5MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTLAorCU5MODAyMTFfQVRUUl9TVEFfVkxBTiwKKwlOTDgwMjExX0FUVFJfU1RBX0lORk8sCisKKwlOTDgwMjExX0FUVFJfV0lQSFlfQkFORFMsCisKKwlOTDgwMjExX0FUVFJfTU5UUl9GTEFHUywKKworCU5MODAyMTFfQVRUUl9NRVNIX0lELAorCU5MODAyMTFfQVRUUl9TVEFfUExJTktfQUNUSU9OLAorCU5MODAyMTFfQVRUUl9NUEFUSF9ORVhUX0hPUCwKKwlOTDgwMjExX0FUVFJfTVBBVEhfSU5GTywKKworCU5MODAyMTFfQVRUUl9CU1NfQ1RTX1BST1QsCisJTkw4MDIxMV9BVFRSX0JTU19TSE9SVF9QUkVBTUJMRSwKKwlOTDgwMjExX0FUVFJfQlNTX1NIT1JUX1NMT1RfVElNRSwKKworCU5MODAyMTFfQVRUUl9IVF9DQVBBQklMSVRZLAorCisJTkw4MDIxMV9BVFRSX1NVUFBPUlRFRF9JRlRZUEVTLAorCisJTkw4MDIxMV9BVFRSX1JFR19BTFBIQTIsCisJTkw4MDIxMV9BVFRSX1JFR19SVUxFUywKKworCU5MODAyMTFfQVRUUl9NRVNIX1BBUkFNUywKKworCU5MODAyMTFfQVRUUl9CU1NfQkFTSUNfUkFURVMsCisKKwlOTDgwMjExX0FUVFJfV0lQSFlfVFhRX1BBUkFNUywKKwlOTDgwMjExX0FUVFJfV0lQSFlfRlJFUSwKKwlOTDgwMjExX0FUVFJfV0lQSFlfQ0hBTk5FTF9UWVBFLAorCisJTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxUX01HTVQsCisKKwlOTDgwMjExX0FUVFJfTUdNVF9TVUJUWVBFLAorCU5MODAyMTFfQVRUUl9JRSwKKworCU5MODAyMTFfQVRUUl9NQVhfTlVNX1NDQU5fU1NJRFMsCisKKwlOTDgwMjExX0FUVFJfU0NBTl9GUkVRVUVOQ0lFUywKKwlOTDgwMjExX0FUVFJfU0NBTl9TU0lEUywKKwlOTDgwMjExX0FUVFJfR0VORVJBVElPTiwgLyogcmVwbGFjZXMgb2xkIFNDQU5fR0VORVJBVElPTiAqLworCU5MODAyMTFfQVRUUl9CU1MsCisKKwlOTDgwMjExX0FUVFJfUkVHX0lOSVRJQVRPUiwKKwlOTDgwMjExX0FUVFJfUkVHX1RZUEUsCisKKwlOTDgwMjExX0FUVFJfU1VQUE9SVEVEX0NPTU1BTkRTLAorCisJTkw4MDIxMV9BVFRSX0ZSQU1FLAorCU5MODAyMTFfQVRUUl9TU0lELAorCU5MODAyMTFfQVRUUl9BVVRIX1RZUEUsCisJTkw4MDIxMV9BVFRSX1JFQVNPTl9DT0RFLAorCisJTkw4MDIxMV9BVFRSX0tFWV9UWVBFLAorCisJTkw4MDIxMV9BVFRSX01BWF9TQ0FOX0lFX0xFTiwKKwlOTDgwMjExX0FUVFJfQ0lQSEVSX1NVSVRFUywKKworCU5MODAyMTFfQVRUUl9GUkVRX0JFRk9SRSwKKwlOTDgwMjExX0FUVFJfRlJFUV9BRlRFUiwKKworCU5MODAyMTFfQVRUUl9GUkVRX0ZJWEVELAorCisKKwlOTDgwMjExX0FUVFJfV0lQSFlfUkVUUllfU0hPUlQsCisJTkw4MDIxMV9BVFRSX1dJUEhZX1JFVFJZX0xPTkcsCisJTkw4MDIxMV9BVFRSX1dJUEhZX0ZSQUdfVEhSRVNIT0xELAorCU5MODAyMTFfQVRUUl9XSVBIWV9SVFNfVEhSRVNIT0xELAorCisJTkw4MDIxMV9BVFRSX1RJTUVEX09VVCwKKworCU5MODAyMTFfQVRUUl9VU0VfTUZQLAorCisJTkw4MDIxMV9BVFRSX1NUQV9GTEFHUzIsCisKKwlOTDgwMjExX0FUVFJfQ09OVFJPTF9QT1JULAorCisJTkw4MDIxMV9BVFRSX1RFU1REQVRBLAorCisJTkw4MDIxMV9BVFRSX1BSSVZBQ1ksCisKKwlOTDgwMjExX0FUVFJfRElTQ09OTkVDVEVEX0JZX0FQLAorCU5MODAyMTFfQVRUUl9TVEFUVVNfQ09ERSwKKworCU5MODAyMTFfQVRUUl9DSVBIRVJfU1VJVEVTX1BBSVJXSVNFLAorCU5MODAyMTFfQVRUUl9DSVBIRVJfU1VJVEVfR1JPVVAsCisJTkw4MDIxMV9BVFRSX1dQQV9WRVJTSU9OUywKKwlOTDgwMjExX0FUVFJfQUtNX1NVSVRFUywKKworCU5MODAyMTFfQVRUUl9SRVFfSUUsCisJTkw4MDIxMV9BVFRSX1JFU1BfSUUsCisKKwlOTDgwMjExX0FUVFJfUFJFVl9CU1NJRCwKKworCU5MODAyMTFfQVRUUl9LRVksCisJTkw4MDIxMV9BVFRSX0tFWVMsCisKKwlOTDgwMjExX0FUVFJfUElELAorCisJTkw4MDIxMV9BVFRSXzRBRERSLAorCisJTkw4MDIxMV9BVFRSX1NVUlZFWV9JTkZPLAorCisJTkw4MDIxMV9BVFRSX1BNS0lELAorCU5MODAyMTFfQVRUUl9NQVhfTlVNX1BNS0lEUywKKworCU5MODAyMTFfQVRUUl9EVVJBVElPTiwKKworCU5MODAyMTFfQVRUUl9DT09LSUUsCisKKwlOTDgwMjExX0FUVFJfV0lQSFlfQ09WRVJBR0VfQ0xBU1MsCisKKwlOTDgwMjExX0FUVFJfVFhfUkFURVMsCisKKwlOTDgwMjExX0FUVFJfRlJBTUVfTUFUQ0gsCisKKwlOTDgwMjExX0FUVFJfQUNLLAorCisJTkw4MDIxMV9BVFRSX1BTX1NUQVRFLAorCisJTkw4MDIxMV9BVFRSX0NRTSwKKworCU5MODAyMTFfQVRUUl9MT0NBTF9TVEFURV9DSEFOR0UsCisKKwlOTDgwMjExX0FUVFJfQVBfSVNPTEFURSwKKworCU5MODAyMTFfQVRUUl9XSVBIWV9UWF9QT1dFUl9TRVRUSU5HLAorCU5MODAyMTFfQVRUUl9XSVBIWV9UWF9QT1dFUl9MRVZFTCwKKworCU5MODAyMTFfQVRUUl9UWF9GUkFNRV9UWVBFUywKKwlOTDgwMjExX0FUVFJfUlhfRlJBTUVfVFlQRVMsCisJTkw4MDIxMV9BVFRSX0ZSQU1FX1RZUEUsCisKKwlOTDgwMjExX0FUVFJfQ09OVFJPTF9QT1JUX0VUSEVSVFlQRSwKKwlOTDgwMjExX0FUVFJfQ09OVFJPTF9QT1JUX05PX0VOQ1JZUFQsCisKKwlOTDgwMjExX0FUVFJfU1VQUE9SVF9JQlNTX1JTTiwKKworCS8qIGFkZCBhdHRyaWJ1dGVzIGhlcmUsIHVwZGF0ZSB0aGUgcG9saWN5IGluIG5sODAyMTEuYyAqLworCisJX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVCwKKwlOTDgwMjExX0FUVFJfTUFYID0gX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVCAtIDEKK307CisKKy8qIHNvdXJjZS1sZXZlbCBBUEkgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBOTDgwMjExX0FUVFJfU0NBTl9HRU5FUkFUSU9OIE5MODAyMTFfQVRUUl9HRU5FUkFUSU9OCisKKy8qCisgKiBBbGxvdyB1c2VyIHNwYWNlIHByb2dyYW1zIHRvIHVzZSAjaWZkZWYgb24gbmV3IGF0dHJpYnV0ZXMgYnkgZGVmaW5pbmcgdGhlbQorICogaGVyZQorICovCisjZGVmaW5lIE5MODAyMTFfQ01EX0NPTk5FQ1QgTkw4MDIxMV9DTURfQ09OTkVDVAorI2RlZmluZSBOTDgwMjExX0FUVFJfSFRfQ0FQQUJJTElUWSBOTDgwMjExX0FUVFJfSFRfQ0FQQUJJTElUWQorI2RlZmluZSBOTDgwMjExX0FUVFJfQlNTX0JBU0lDX1JBVEVTIE5MODAyMTFfQVRUUl9CU1NfQkFTSUNfUkFURVMKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX1dJUEhZX1RYUV9QQVJBTVMgTkw4MDIxMV9BVFRSX1dJUEhZX1RYUV9QQVJBTVMKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVEgTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVEKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX1dJUEhZX0NIQU5ORUxfVFlQRSBOTDgwMjExX0FUVFJfV0lQSFlfQ0hBTk5FTF9UWVBFCisjZGVmaW5lIE5MODAyMTFfQVRUUl9NR01UX1NVQlRZUEUgTkw4MDIxMV9BVFRSX01HTVRfU1VCVFlQRQorI2RlZmluZSBOTDgwMjExX0FUVFJfSUUgTkw4MDIxMV9BVFRSX0lFCisjZGVmaW5lIE5MODAyMTFfQVRUUl9SRUdfSU5JVElBVE9SIE5MODAyMTFfQVRUUl9SRUdfSU5JVElBVE9SCisjZGVmaW5lIE5MODAyMTFfQVRUUl9SRUdfVFlQRSBOTDgwMjExX0FUVFJfUkVHX1RZUEUKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX0ZSQU1FIE5MODAyMTFfQVRUUl9GUkFNRQorI2RlZmluZSBOTDgwMjExX0FUVFJfU1NJRCBOTDgwMjExX0FUVFJfU1NJRAorI2RlZmluZSBOTDgwMjExX0FUVFJfQVVUSF9UWVBFIE5MODAyMTFfQVRUUl9BVVRIX1RZUEUKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX1JFQVNPTl9DT0RFIE5MODAyMTFfQVRUUl9SRUFTT05fQ09ERQorI2RlZmluZSBOTDgwMjExX0FUVFJfQ0lQSEVSX1NVSVRFU19QQUlSV0lTRSBOTDgwMjExX0FUVFJfQ0lQSEVSX1NVSVRFU19QQUlSV0lTRQorI2RlZmluZSBOTDgwMjExX0FUVFJfQ0lQSEVSX1NVSVRFX0dST1VQIE5MODAyMTFfQVRUUl9DSVBIRVJfU1VJVEVfR1JPVVAKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX1dQQV9WRVJTSU9OUyBOTDgwMjExX0FUVFJfV1BBX1ZFUlNJT05TCisjZGVmaW5lIE5MODAyMTFfQVRUUl9BS01fU1VJVEVTIE5MODAyMTFfQVRUUl9BS01fU1VJVEVTCisjZGVmaW5lIE5MODAyMTFfQVRUUl9LRVkgTkw4MDIxMV9BVFRSX0tFWQorI2RlZmluZSBOTDgwMjExX0FUVFJfS0VZUyBOTDgwMjExX0FUVFJfS0VZUworCisjZGVmaW5lIE5MODAyMTFfTUFYX1NVUFBfUkFURVMJCQkzMgorI2RlZmluZSBOTDgwMjExX01BWF9TVVBQX1JFR19SVUxFUwkJMzIKKyNkZWZpbmUgTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX0VOQ1JfS0VZCTAKKyNkZWZpbmUgTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1RYX01JQ19LRVkJMTYKKyNkZWZpbmUgTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1JYX01JQ19LRVkJMjQKKyNkZWZpbmUgTkw4MDIxMV9IVF9DQVBBQklMSVRZX0xFTgkJMjYKKworI2RlZmluZSBOTDgwMjExX01BWF9OUl9DSVBIRVJfU1VJVEVTCQk1CisjZGVmaW5lIE5MODAyMTFfTUFYX05SX0FLTV9TVUlURVMJCTIKKworLyoqCisgKiBlbnVtIG5sODAyMTFfaWZ0eXBlIC0gKHZpcnR1YWwpIGludGVyZmFjZSB0eXBlcworICoKKyAqIEBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDogdW5zcGVjaWZpZWQgdHlwZSwgZHJpdmVyIGRlY2lkZXMKKyAqIEBOTDgwMjExX0lGVFlQRV9BREhPQzogaW5kZXBlbmRlbnQgQlNTIG1lbWJlcgorICogQE5MODAyMTFfSUZUWVBFX1NUQVRJT046IG1hbmFnZWQgQlNTIG1lbWJlcgorICogQE5MODAyMTFfSUZUWVBFX0FQOiBhY2Nlc3MgcG9pbnQKKyAqIEBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOiBWTEFOIGludGVyZmFjZSBmb3IgYWNjZXNzIHBvaW50cworICogQE5MODAyMTFfSUZUWVBFX1dEUzogd2lyZWxlc3MgZGlzdHJpYnV0aW9uIGludGVyZmFjZQorICogQE5MODAyMTFfSUZUWVBFX01PTklUT1I6IG1vbml0b3IgaW50ZXJmYWNlIHJlY2VpdmluZyBhbGwgZnJhbWVzCisgKiBATkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDogbWVzaCBwb2ludAorICogQE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQ6IFAyUCBjbGllbnQKKyAqIEBOTDgwMjExX0lGVFlQRV9QMlBfR086IFAyUCBncm91cCBvd25lcgorICogQE5MODAyMTFfSUZUWVBFX01BWDogaGlnaGVzdCBpbnRlcmZhY2UgdHlwZSBudW1iZXIgY3VycmVudGx5IGRlZmluZWQKKyAqIEBOVU1fTkw4MDIxMV9JRlRZUEVTOiBudW1iZXIgb2YgZGVmaW5lZCBpbnRlcmZhY2UgdHlwZXMKKyAqCisgKiBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgd2l0aCB0aGUgJU5MODAyMTFfQVRUUl9JRlRZUEUKKyAqIHRvIHNldCB0aGUgdHlwZSBvZiBhbiBpbnRlcmZhY2UuCisgKgorICovCitlbnVtIG5sODAyMTFfaWZ0eXBlIHsKKwlOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCwKKwlOTDgwMjExX0lGVFlQRV9BREhPQywKKwlOTDgwMjExX0lGVFlQRV9TVEFUSU9OLAorCU5MODAyMTFfSUZUWVBFX0FQLAorCU5MODAyMTFfSUZUWVBFX0FQX1ZMQU4sCisJTkw4MDIxMV9JRlRZUEVfV0RTLAorCU5MODAyMTFfSUZUWVBFX01PTklUT1IsCisJTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCwKKwlOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5ULAorCU5MODAyMTFfSUZUWVBFX1AyUF9HTywKKworCS8qIGtlZXAgbGFzdCAqLworCU5VTV9OTDgwMjExX0lGVFlQRVMsCisJTkw4MDIxMV9JRlRZUEVfTUFYID0gTlVNX05MODAyMTFfSUZUWVBFUyAtIDEKK307CisKKy8qKgorICogZW51bSBubDgwMjExX3N0YV9mbGFncyAtIHN0YXRpb24gZmxhZ3MKKyAqCisgKiBTdGF0aW9uIGZsYWdzLiBXaGVuIGEgc3RhdGlvbiBpcyBhZGRlZCB0byBhbiBBUCBpbnRlcmZhY2UsIGl0IGlzCisgKiBhc3N1bWVkIHRvIGJlIGFscmVhZHkgYXNzb2NpYXRlZCAoYW5kIGhlbmNlIGF1dGhlbnRpY2F0ZWQuKQorICoKKyAqIEBfX05MODAyMTFfU1RBX0ZMQUdfSU5WQUxJRDogYXR0cmlidXRlIG51bWJlciAwIGlzIHJlc2VydmVkCisgKiBATkw4MDIxMV9TVEFfRkxBR19BVVRIT1JJWkVEOiBzdGF0aW9uIGlzIGF1dGhvcml6ZWQgKDgwMi4xWCkKKyAqIEBOTDgwMjExX1NUQV9GTEFHX1NIT1JUX1BSRUFNQkxFOiBzdGF0aW9uIGlzIGNhcGFibGUgb2YgcmVjZWl2aW5nIGZyYW1lcworICoJd2l0aCBzaG9ydCBiYXJrZXIgcHJlYW1ibGUKKyAqIEBOTDgwMjExX1NUQV9GTEFHX1dNRTogc3RhdGlvbiBpcyBXTUUvUW9TIGNhcGFibGUKKyAqIEBOTDgwMjExX1NUQV9GTEFHX01GUDogc3RhdGlvbiB1c2VzIG1hbmFnZW1lbnQgZnJhbWUgcHJvdGVjdGlvbgorICogQE5MODAyMTFfU1RBX0ZMQUdfTUFYOiBoaWdoZXN0IHN0YXRpb24gZmxhZyBudW1iZXIgY3VycmVudGx5IGRlZmluZWQKKyAqIEBfX05MODAyMTFfU1RBX0ZMQUdfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlCisgKi8KK2VudW0gbmw4MDIxMV9zdGFfZmxhZ3MgeworCV9fTkw4MDIxMV9TVEFfRkxBR19JTlZBTElELAorCU5MODAyMTFfU1RBX0ZMQUdfQVVUSE9SSVpFRCwKKwlOTDgwMjExX1NUQV9GTEFHX1NIT1JUX1BSRUFNQkxFLAorCU5MODAyMTFfU1RBX0ZMQUdfV01FLAorCU5MODAyMTFfU1RBX0ZMQUdfTUZQLAorCisJLyoga2VlcCBsYXN0ICovCisJX19OTDgwMjExX1NUQV9GTEFHX0FGVEVSX0xBU1QsCisJTkw4MDIxMV9TVEFfRkxBR19NQVggPSBfX05MODAyMTFfU1RBX0ZMQUdfQUZURVJfTEFTVCAtIDEKK307CisKKy8qKgorICogc3RydWN0IG5sODAyMTFfc3RhX2ZsYWdfdXBkYXRlIC0gc3RhdGlvbiBmbGFncyBtYXNrL3NldAorICogQG1hc2s6IG1hc2sgb2Ygc3RhdGlvbiBmbGFncyB0byBzZXQKKyAqIEBzZXQ6IHdoaWNoIHZhbHVlcyB0byBzZXQgdGhlbSB0bworICoKKyAqIEJvdGggbWFzayBhbmQgc2V0IGNvbnRhaW4gYml0cyBhcyBwZXIgJmVudW0gbmw4MDIxMV9zdGFfZmxhZ3MuCisgKi8KK3N0cnVjdCBubDgwMjExX3N0YV9mbGFnX3VwZGF0ZSB7CisJX191MzIgbWFzazsKKwlfX3UzMiBzZXQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKioKKyAqIGVudW0gbmw4MDIxMV9yYXRlX2luZm8gLSBiaXRyYXRlIGluZm9ybWF0aW9uCisgKgorICogVGhlc2UgYXR0cmlidXRlIHR5cGVzIGFyZSB1c2VkIHdpdGggJU5MODAyMTFfU1RBX0lORk9fVFhSQVRFCisgKiB3aGVuIGdldHRpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJpdHJhdGUgb2YgYSBzdGF0aW9uLgorICoKKyAqIEBfX05MODAyMTFfUkFURV9JTkZPX0lOVkFMSUQ6IGF0dHJpYnV0ZSBudW1iZXIgMCBpcyByZXNlcnZlZAorICogQE5MODAyMTFfUkFURV9JTkZPX0JJVFJBVEU6IHRvdGFsIGJpdHJhdGUgKHUxNiwgMTAwa2JpdC9zKQorICogQE5MODAyMTFfUkFURV9JTkZPX01DUzogbWNzIGluZGV4IGZvciA4MDIuMTFuICh1OCkKKyAqIEBOTDgwMjExX1JBVEVfSU5GT180MF9NSFpfV0lEVEg6IDQwIE1oeiBkdWFsY2hhbm5lbCBiaXRyYXRlCisgKiBATkw4MDIxMV9SQVRFX0lORk9fU0hPUlRfR0k6IDQwMG5zIGd1YXJkIGludGVydmFsCisgKiBATkw4MDIxMV9SQVRFX0lORk9fTUFYOiBoaWdoZXN0IHJhdGVfaW5mbyBudW1iZXIgY3VycmVudGx5IGRlZmluZWQKKyAqIEBfX05MODAyMTFfUkFURV9JTkZPX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZQorICovCitlbnVtIG5sODAyMTFfcmF0ZV9pbmZvIHsKKwlfX05MODAyMTFfUkFURV9JTkZPX0lOVkFMSUQsCisJTkw4MDIxMV9SQVRFX0lORk9fQklUUkFURSwKKwlOTDgwMjExX1JBVEVfSU5GT19NQ1MsCisJTkw4MDIxMV9SQVRFX0lORk9fNDBfTUhaX1dJRFRILAorCU5MODAyMTFfUkFURV9JTkZPX1NIT1JUX0dJLAorCisJLyoga2VlcCBsYXN0ICovCisJX19OTDgwMjExX1JBVEVfSU5GT19BRlRFUl9MQVNULAorCU5MODAyMTFfUkFURV9JTkZPX01BWCA9IF9fTkw4MDIxMV9SQVRFX0lORk9fQUZURVJfTEFTVCAtIDEKK307CisKKy8qKgorICogZW51bSBubDgwMjExX3N0YV9pbmZvIC0gc3RhdGlvbiBpbmZvcm1hdGlvbgorICoKKyAqIFRoZXNlIGF0dHJpYnV0ZSB0eXBlcyBhcmUgdXNlZCB3aXRoICVOTDgwMjExX0FUVFJfU1RBX0lORk8KKyAqIHdoZW4gZ2V0dGluZyBpbmZvcm1hdGlvbiBhYm91dCBhIHN0YXRpb24uCisgKgorICogQF9fTkw4MDIxMV9TVEFfSU5GT19JTlZBTElEOiBhdHRyaWJ1dGUgbnVtYmVyIDAgaXMgcmVzZXJ2ZWQKKyAqIEBOTDgwMjExX1NUQV9JTkZPX0lOQUNUSVZFX1RJTUU6IHRpbWUgc2luY2UgbGFzdCBhY3Rpdml0eSAodTMyLCBtc2VjcykKKyAqIEBOTDgwMjExX1NUQV9JTkZPX1JYX0JZVEVTOiB0b3RhbCByZWNlaXZlZCBieXRlcyAodTMyLCBmcm9tIHRoaXMgc3RhdGlvbikKKyAqIEBOTDgwMjExX1NUQV9JTkZPX1RYX0JZVEVTOiB0b3RhbCB0cmFuc21pdHRlZCBieXRlcyAodTMyLCB0byB0aGlzIHN0YXRpb24pCisgKiBAX19OTDgwMjExX1NUQV9JTkZPX0FGVEVSX0xBU1Q6IGludGVybmFsCisgKiBATkw4MDIxMV9TVEFfSU5GT19NQVg6IGhpZ2hlc3QgcG9zc2libGUgc3RhdGlvbiBpbmZvIGF0dHJpYnV0ZQorICogQE5MODAyMTFfU1RBX0lORk9fU0lHTkFMOiBzaWduYWwgc3RyZW5ndGggb2YgbGFzdCByZWNlaXZlZCBQUERVICh1OCwgZEJtKQorICogQE5MODAyMTFfU1RBX0lORk9fVFhfQklUUkFURTogY3VycmVudCB1bmljYXN0IHR4IHJhdGUsIG5lc3RlZCBhdHRyaWJ1dGUKKyAqIAljb250YWluaW5nIGluZm8gYXMgcG9zc2libGUsIHNlZSAmZW51bSBubDgwMjExX3N0YV9pbmZvX3R4cmF0ZS4KKyAqIEBOTDgwMjExX1NUQV9JTkZPX1JYX1BBQ0tFVFM6IHRvdGFsIHJlY2VpdmVkIHBhY2tldCAodTMyLCBmcm9tIHRoaXMgc3RhdGlvbikKKyAqIEBOTDgwMjExX1NUQV9JTkZPX1RYX1BBQ0tFVFM6IHRvdGFsIHRyYW5zbWl0dGVkIHBhY2tldHMgKHUzMiwgdG8gdGhpcworICoJc3RhdGlvbikKKyAqIEBOTDgwMjExX1NUQV9JTkZPX1RYX1JFVFJJRVM6IHRvdGFsIHJldHJpZXMgKHUzMiwgdG8gdGhpcyBzdGF0aW9uKQorICogQE5MODAyMTFfU1RBX0lORk9fVFhfRkFJTEVEOiB0b3RhbCBmYWlsZWQgcGFja2V0cyAodTMyLCB0byB0aGlzIHN0YXRpb24pCisgKi8KK2VudW0gbmw4MDIxMV9zdGFfaW5mbyB7CisJX19OTDgwMjExX1NUQV9JTkZPX0lOVkFMSUQsCisJTkw4MDIxMV9TVEFfSU5GT19JTkFDVElWRV9USU1FLAorCU5MODAyMTFfU1RBX0lORk9fUlhfQllURVMsCisJTkw4MDIxMV9TVEFfSU5GT19UWF9CWVRFUywKKwlOTDgwMjExX1NUQV9JTkZPX0xMSUQsCisJTkw4MDIxMV9TVEFfSU5GT19QTElELAorCU5MODAyMTFfU1RBX0lORk9fUExJTktfU1RBVEUsCisJTkw4MDIxMV9TVEFfSU5GT19TSUdOQUwsCisJTkw4MDIxMV9TVEFfSU5GT19UWF9CSVRSQVRFLAorCU5MODAyMTFfU1RBX0lORk9fUlhfUEFDS0VUUywKKwlOTDgwMjExX1NUQV9JTkZPX1RYX1BBQ0tFVFMsCisJTkw4MDIxMV9TVEFfSU5GT19UWF9SRVRSSUVTLAorCU5MODAyMTFfU1RBX0lORk9fVFhfRkFJTEVELAorCisJLyoga2VlcCBsYXN0ICovCisJX19OTDgwMjExX1NUQV9JTkZPX0FGVEVSX0xBU1QsCisJTkw4MDIxMV9TVEFfSU5GT19NQVggPSBfX05MODAyMTFfU1RBX0lORk9fQUZURVJfTEFTVCAtIDEKK307CisKKy8qKgorICogZW51bSBubDgwMjExX21wYXRoX2ZsYWdzIC0gbmw4MDIxMSBtZXNoIHBhdGggZmxhZ3MKKyAqCisgKiBATkw4MDIxMV9NUEFUSF9GTEFHX0FDVElWRTogdGhlIG1lc2ggcGF0aCBpcyBhY3RpdmUKKyAqIEBOTDgwMjExX01QQVRIX0ZMQUdfUkVTT0xWSU5HOiB0aGUgbWVzaCBwYXRoIGRpc2NvdmVyeSBwcm9jZXNzIGlzIHJ1bm5pbmcKKyAqIEBOTDgwMjExX01QQVRIX0ZMQUdfU05fVkFMSUQ6IHRoZSBtZXNoIHBhdGggY29udGFpbnMgYSB2YWxpZCBTTgorICogQE5MODAyMTFfTVBBVEhfRkxBR19GSVhFRDogdGhlIG1lc2ggcGF0aCBoYXMgYmVlbiBtYW51YWxseSBzZXQKKyAqIEBOTDgwMjExX01QQVRIX0ZMQUdfUkVTT0xWRUQ6IHRoZSBtZXNoIHBhdGggZGlzY292ZXJ5IHByb2Nlc3Mgc3VjY2VlZGVkCisgKi8KK2VudW0gbmw4MDIxMV9tcGF0aF9mbGFncyB7CisJTkw4MDIxMV9NUEFUSF9GTEFHX0FDVElWRSA9CTE8PDAsCisJTkw4MDIxMV9NUEFUSF9GTEFHX1JFU09MVklORyA9CTE8PDEsCisJTkw4MDIxMV9NUEFUSF9GTEFHX1NOX1ZBTElEID0JMTw8MiwKKwlOTDgwMjExX01QQVRIX0ZMQUdfRklYRUQgPQkxPDwzLAorCU5MODAyMTFfTVBBVEhfRkxBR19SRVNPTFZFRCA9CTE8PDQsCit9OworCisvKioKKyAqIGVudW0gbmw4MDIxMV9tcGF0aF9pbmZvIC0gbWVzaCBwYXRoIGluZm9ybWF0aW9uCisgKgorICogVGhlc2UgYXR0cmlidXRlIHR5cGVzIGFyZSB1c2VkIHdpdGggJU5MODAyMTFfQVRUUl9NUEFUSF9JTkZPIHdoZW4gZ2V0dGluZworICogaW5mb3JtYXRpb24gYWJvdXQgYSBtZXNoIHBhdGguCisgKgorICogQF9fTkw4MDIxMV9NUEFUSF9JTkZPX0lOVkFMSUQ6IGF0dHJpYnV0ZSBudW1iZXIgMCBpcyByZXNlcnZlZAorICogQE5MODAyMTFfTVBBVEhfSU5GT19GUkFNRV9RTEVOOiBudW1iZXIgb2YgcXVldWVkIGZyYW1lcyBmb3IgdGhpcyBkZXN0aW5hdGlvbgorICogQE5MODAyMTFfTVBBVEhfSU5GT19TTjogZGVzdGluYXRpb24gc2VxdWVuY2UgbnVtYmVyCisgKiBATkw4MDIxMV9NUEFUSF9JTkZPX01FVFJJQzogbWV0cmljIChjb3N0KSBvZiB0aGlzIG1lc2ggcGF0aAorICogQE5MODAyMTFfTVBBVEhfSU5GT19FWFBUSU1FOiBleHBpcmF0aW9uIHRpbWUgZm9yIHRoZSBwYXRoLCBpbiBtc2VjIGZyb20gbm93CisgKiBATkw4MDIxMV9NUEFUSF9JTkZPX0ZMQUdTOiBtZXNoIHBhdGggZmxhZ3MsIGVudW1lcmF0ZWQgaW4KKyAqIAkmZW51bSBubDgwMjExX21wYXRoX2ZsYWdzOworICogQE5MODAyMTFfTVBBVEhfSU5GT19ESVNDT1ZFUllfVElNRU9VVDogdG90YWwgcGF0aCBkaXNjb3ZlcnkgdGltZW91dCwgaW4gbXNlYworICogQE5MODAyMTFfTVBBVEhfSU5GT19ESVNDT1ZFUllfUkVUUklFUzogbWVzaCBwYXRoIGRpc2NvdmVyeSByZXRyaWVzCisgKiBATkw4MDIxMV9NUEFUSF9JTkZPX01BWDogaGlnaGVzdCBtZXNoIHBhdGggaW5mb3JtYXRpb24gYXR0cmlidXRlIG51bWJlcgorICoJY3VycmVudGx5IGRlZmluZAorICogQF9fTkw4MDIxMV9NUEFUSF9JTkZPX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZQorICovCitlbnVtIG5sODAyMTFfbXBhdGhfaW5mbyB7CisJX19OTDgwMjExX01QQVRIX0lORk9fSU5WQUxJRCwKKwlOTDgwMjExX01QQVRIX0lORk9fRlJBTUVfUUxFTiwKKwlOTDgwMjExX01QQVRIX0lORk9fU04sCisJTkw4MDIxMV9NUEFUSF9JTkZPX01FVFJJQywKKwlOTDgwMjExX01QQVRIX0lORk9fRVhQVElNRSwKKwlOTDgwMjExX01QQVRIX0lORk9fRkxBR1MsCisJTkw4MDIxMV9NUEFUSF9JTkZPX0RJU0NPVkVSWV9USU1FT1VULAorCU5MODAyMTFfTVBBVEhfSU5GT19ESVNDT1ZFUllfUkVUUklFUywKKworCS8qIGtlZXAgbGFzdCAqLworCV9fTkw4MDIxMV9NUEFUSF9JTkZPX0FGVEVSX0xBU1QsCisJTkw4MDIxMV9NUEFUSF9JTkZPX01BWCA9IF9fTkw4MDIxMV9NUEFUSF9JTkZPX0FGVEVSX0xBU1QgLSAxCit9OworCisvKioKKyAqIGVudW0gbmw4MDIxMV9iYW5kX2F0dHIgLSBiYW5kIGF0dHJpYnV0ZXMKKyAqIEBfX05MODAyMTFfQkFORF9BVFRSX0lOVkFMSUQ6IGF0dHJpYnV0ZSBudW1iZXIgMCBpcyByZXNlcnZlZAorICogQE5MODAyMTFfQkFORF9BVFRSX0ZSRVFTOiBzdXBwb3J0ZWQgZnJlcXVlbmNpZXMgaW4gdGhpcyBiYW5kLAorICoJYW4gYXJyYXkgb2YgbmVzdGVkIGZyZXF1ZW5jeSBhdHRyaWJ1dGVzCisgKiBATkw4MDIxMV9CQU5EX0FUVFJfUkFURVM6IHN1cHBvcnRlZCBiaXRyYXRlcyBpbiB0aGlzIGJhbmQsCisgKglhbiBhcnJheSBvZiBuZXN0ZWQgYml0cmF0ZSBhdHRyaWJ1dGVzCisgKiBATkw4MDIxMV9CQU5EX0FUVFJfSFRfTUNTX1NFVDogMTYtYnl0ZSBhdHRyaWJ1dGUgY29udGFpbmluZyB0aGUgTUNTIHNldCBhcworICoJZGVmaW5lZCBpbiA4MDIuMTFuCisgKiBATkw4MDIxMV9CQU5EX0FUVFJfSFRfQ0FQQTogSFQgY2FwYWJpbGl0aWVzLCBhcyBpbiB0aGUgSFQgaW5mb3JtYXRpb24gSUUKKyAqIEBOTDgwMjExX0JBTkRfQVRUUl9IVF9BTVBEVV9GQUNUT1I6IEEtTVBEVSBmYWN0b3IsIGFzIGluIDExbgorICogQE5MODAyMTFfQkFORF9BVFRSX0hUX0FNUERVX0RFTlNJVFk6IEEtTVBEVSBkZW5zaXR5LCBhcyBpbiAxMW4KKyAqIEBOTDgwMjExX0JBTkRfQVRUUl9NQVg6IGhpZ2hlc3QgYmFuZCBhdHRyaWJ1dGUgY3VycmVudGx5IGRlZmluZWQKKyAqIEBfX05MODAyMTFfQkFORF9BVFRSX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZQorICovCitlbnVtIG5sODAyMTFfYmFuZF9hdHRyIHsKKwlfX05MODAyMTFfQkFORF9BVFRSX0lOVkFMSUQsCisJTkw4MDIxMV9CQU5EX0FUVFJfRlJFUVMsCisJTkw4MDIxMV9CQU5EX0FUVFJfUkFURVMsCisKKwlOTDgwMjExX0JBTkRfQVRUUl9IVF9NQ1NfU0VULAorCU5MODAyMTFfQkFORF9BVFRSX0hUX0NBUEEsCisJTkw4MDIxMV9CQU5EX0FUVFJfSFRfQU1QRFVfRkFDVE9SLAorCU5MODAyMTFfQkFORF9BVFRSX0hUX0FNUERVX0RFTlNJVFksCisKKwkvKiBrZWVwIGxhc3QgKi8KKwlfX05MODAyMTFfQkFORF9BVFRSX0FGVEVSX0xBU1QsCisJTkw4MDIxMV9CQU5EX0FUVFJfTUFYID0gX19OTDgwMjExX0JBTkRfQVRUUl9BRlRFUl9MQVNUIC0gMQorfTsKKworI2RlZmluZSBOTDgwMjExX0JBTkRfQVRUUl9IVF9DQVBBIE5MODAyMTFfQkFORF9BVFRSX0hUX0NBUEEKKworLyoqCisgKiBlbnVtIG5sODAyMTFfZnJlcXVlbmN5X2F0dHIgLSBmcmVxdWVuY3kgYXR0cmlidXRlcworICogQF9fTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9JTlZBTElEOiBhdHRyaWJ1dGUgbnVtYmVyIDAgaXMgcmVzZXJ2ZWQKKyAqIEBOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX0ZSRVE6IEZyZXF1ZW5jeSBpbiBNSHoKKyAqIEBOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX0RJU0FCTEVEOiBDaGFubmVsIGlzIGRpc2FibGVkIGluIGN1cnJlbnQKKyAqCXJlZ3VsYXRvcnkgZG9tYWluLgorICogQE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfUEFTU0lWRV9TQ0FOOiBPbmx5IHBhc3NpdmUgc2Nhbm5pbmcgaXMKKyAqCXBlcm1pdHRlZCBvbiB0aGlzIGNoYW5uZWwgaW4gY3VycmVudCByZWd1bGF0b3J5IGRvbWFpbi4KKyAqIEBOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX05PX0lCU1M6IElCU1MgbmV0d29ya3MgYXJlIG5vdCBwZXJtaXR0ZWQKKyAqCW9uIHRoaXMgY2hhbm5lbCBpbiBjdXJyZW50IHJlZ3VsYXRvcnkgZG9tYWluLgorICogQE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfUkFEQVI6IFJhZGFyIGRldGVjdGlvbiBpcyBtYW5kYXRvcnkKKyAqCW9uIHRoaXMgY2hhbm5lbCBpbiBjdXJyZW50IHJlZ3VsYXRvcnkgZG9tYWluLgorICogQE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfTUFYX1RYX1BPV0VSOiBNYXhpbXVtIHRyYW5zbWlzc2lvbiBwb3dlciBpbiBtQm0KKyAqCSgxMDAgKiBkQm0pLgorICogQE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfTUFYOiBoaWdoZXN0IGZyZXF1ZW5jeSBhdHRyaWJ1dGUgbnVtYmVyCisgKgljdXJyZW50bHkgZGVmaW5lZAorICogQF9fTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKKyAqLworZW51bSBubDgwMjExX2ZyZXF1ZW5jeV9hdHRyIHsKKwlfX05MODAyMTFfRlJFUVVFTkNZX0FUVFJfSU5WQUxJRCwKKwlOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX0ZSRVEsCisJTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9ESVNBQkxFRCwKKwlOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX1BBU1NJVkVfU0NBTiwKKwlOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX05PX0lCU1MsCisJTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9SQURBUiwKKwlOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX01BWF9UWF9QT1dFUiwKKworCS8qIGtlZXAgbGFzdCAqLworCV9fTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9BRlRFUl9MQVNULAorCU5MODAyMTFfRlJFUVVFTkNZX0FUVFJfTUFYID0gX19OTDgwMjExX0ZSRVFVRU5DWV9BVFRSX0FGVEVSX0xBU1QgLSAxCit9OworCisjZGVmaW5lIE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfTUFYX1RYX1BPV0VSIE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfTUFYX1RYX1BPV0VSCisKKy8qKgorICogZW51bSBubDgwMjExX2JpdHJhdGVfYXR0ciAtIGJpdHJhdGUgYXR0cmlidXRlcworICogQF9fTkw4MDIxMV9CSVRSQVRFX0FUVFJfSU5WQUxJRDogYXR0cmlidXRlIG51bWJlciAwIGlzIHJlc2VydmVkCisgKiBATkw4MDIxMV9CSVRSQVRFX0FUVFJfUkFURTogQml0cmF0ZSBpbiB1bml0cyBvZiAxMDAga2JwcworICogQE5MODAyMTFfQklUUkFURV9BVFRSXzJHSFpfU0hPUlRQUkVBTUJMRTogU2hvcnQgcHJlYW1ibGUgc3VwcG9ydGVkCisgKglpbiAyLjQgR0h6IGJhbmQuCisgKiBATkw4MDIxMV9CSVRSQVRFX0FUVFJfTUFYOiBoaWdoZXN0IGJpdHJhdGUgYXR0cmlidXRlIG51bWJlcgorICoJY3VycmVudGx5IGRlZmluZWQKKyAqIEBfX05MODAyMTFfQklUUkFURV9BVFRSX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZQorICovCitlbnVtIG5sODAyMTFfYml0cmF0ZV9hdHRyIHsKKwlfX05MODAyMTFfQklUUkFURV9BVFRSX0lOVkFMSUQsCisJTkw4MDIxMV9CSVRSQVRFX0FUVFJfUkFURSwKKwlOTDgwMjExX0JJVFJBVEVfQVRUUl8yR0haX1NIT1JUUFJFQU1CTEUsCisKKwkvKiBrZWVwIGxhc3QgKi8KKwlfX05MODAyMTFfQklUUkFURV9BVFRSX0FGVEVSX0xBU1QsCisJTkw4MDIxMV9CSVRSQVRFX0FUVFJfTUFYID0gX19OTDgwMjExX0JJVFJBVEVfQVRUUl9BRlRFUl9MQVNUIC0gMQorfTsKKworLyoqCisgKiBlbnVtIG5sODAyMTFfaW5pdGlhdG9yIC0gSW5kaWNhdGVzIHRoZSBpbml0aWF0b3Igb2YgYSByZWcgZG9tYWluIHJlcXVlc3QKKyAqIEBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09SRTogQ29yZSBxdWVyaWVkIENSREEgZm9yIGEgZHluYW1pYyB3b3JsZAorICogCXJlZ3VsYXRvcnkgZG9tYWluLgorICogQE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSOiBVc2VyIGFza2VkIHRoZSB3aXJlbGVzcyBjb3JlIHRvIHNldCB0aGUKKyAqIAlyZWd1bGF0b3J5IGRvbWFpbi4KKyAqIEBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSOiBhIHdpcmVsZXNzIGRyaXZlcnMgaGFzIGhpbnRlZCB0byB0aGUKKyAqIAl3aXJlbGVzcyBjb3JlIGl0IHRoaW5rcyBpdHMga25vd3MgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIHdlIHNob3VsZCBiZSBpbi4KKyAqIEBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRTogdGhlIHdpcmVsZXNzIGNvcmUgaGFzIHJlY2VpdmVkIGFuCisgKiAJODAyLjExIGNvdW50cnkgaW5mb3JtYXRpb24gZWxlbWVudCB3aXRoIHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24gaXQKKyAqIAl0aGlua3Mgd2Ugc2hvdWxkIGNvbnNpZGVyLiBjZmc4MDIxMSBvbmx5IHByb2Nlc3NlcyB0aGUgY291bnRyeQorICoJY29kZSBmcm9tIHRoZSBJRSwgYW5kIHJlbGllcyBvbiB0aGUgcmVndWxhdG9yeSBkb21haW4gaW5mb3JtYXRpb24KKyAqCXN0cnVjdHVyZSBwYXNlZCBieSB1c2Vyc3BhY2UgKENSREEpIGZyb20gb3VyIHdpcmVsZXNzLXJlZ2RiLgorICoJSWYgYSBjaGFubmVsIGlzIGVuYWJsZWQgYnV0IHRoZSBjb3VudHJ5IGNvZGUgaW5kaWNhdGVzIGl0IHNob3VsZAorICoJYmUgZGlzYWJsZWQgd2UgZGlzYWJsZSB0aGUgY2hhbm5lbCBhbmQgcmUtZW5hYmxlIGl0IHVwb24gZGlzYXNzb2NpYXRpb24uCisgKi8KK2VudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIHsKKwlOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09SRSwKKwlOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUiwKKwlOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSLAorCU5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFLAorfTsKKworLyoqCisgKiBlbnVtIG5sODAyMTFfcmVnX3R5cGUgLSBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgcmVndWxhdG9yeSBkb21haW4KKyAqIEBOTDgwMjExX1JFR0RPTV9UWVBFX0NPVU5UUlk6IHRoZSByZWd1bGF0b3J5IGRvbWFpbiBzZXQgaXMgb25lIHRoYXQgcGVydGFpbnMKKyAqCXRvIGEgc3BlY2lmaWMgY291bnRyeS4gV2hlbiB0aGlzIGlzIHNldCB5b3UgY2FuIGNvdW50IG9uIHRoZQorICoJSVNPIC8gSUVDIDMxNjYgYWxwaGEyIGNvdW50cnkgY29kZSBiZWluZyB2YWxpZC4KKyAqIEBOTDgwMjExX1JFR0RPTV9UWVBFX1dPUkxEOiB0aGUgcmVndWxhdG9yeSBzZXQgZG9tYWluIGlzIHRoZSB3b3JsZCByZWd1bGF0b3J5CisgKiAJZG9tYWluLgorICogQE5MODAyMTFfUkVHRE9NX1RZUEVfQ1VTVE9NX1dPUkxEOiB0aGUgcmVndWxhdG9yeSBkb21haW4gc2V0IGlzIGEgY3VzdG9tCisgKiAJZHJpdmVyIHNwZWNpZmljIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluLiBUaGVzZSBkbyBub3QgYXBwbHkgc3lzdGVtLXdpZGUKKyAqIAlhbmQgYXJlIG9ubHkgYXBwbGljYWJsZSB0byB0aGUgaW5kaXZpZHVhbCBkZXZpY2VzIHdoaWNoIGhhdmUgcmVxdWVzdGVkCisgKiAJdGhlbSB0byBiZSBhcHBsaWVkLgorICogQE5MODAyMTFfUkVHRE9NX1RZUEVfSU5URVJTRUNUSU9OOiB0aGUgcmVndWxhdG9yeSBkb21haW4gc2V0IGlzIHRoZSBwcm9kdWN0CisgKglvZiBhbiBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0d28gcmVndWxhdG9yeSBkb21haW5zIC0tIHRoZSBwcmV2aW91c2x5CisgKglzZXQgcmVndWxhdG9yeSBkb21haW4gb24gdGhlIHN5c3RlbSBhbmQgdGhlIGxhc3QgYWNjZXB0ZWQgcmVndWxhdG9yeQorICoJZG9tYWluIHJlcXVlc3QgdG8gYmUgcHJvY2Vzc2VkLgorICovCitlbnVtIG5sODAyMTFfcmVnX3R5cGUgeworCU5MODAyMTFfUkVHRE9NX1RZUEVfQ09VTlRSWSwKKwlOTDgwMjExX1JFR0RPTV9UWVBFX1dPUkxELAorCU5MODAyMTFfUkVHRE9NX1RZUEVfQ1VTVE9NX1dPUkxELAorCU5MODAyMTFfUkVHRE9NX1RZUEVfSU5URVJTRUNUSU9OLAorfTsKKworLyoqCisgKiBlbnVtIG5sODAyMTFfcmVnX3J1bGVfYXR0ciAtIHJlZ3VsYXRvcnkgcnVsZSBhdHRyaWJ1dGVzCisgKiBAX19OTDgwMjExX1JFR19SVUxFX0FUVFJfSU5WQUxJRDogYXR0cmlidXRlIG51bWJlciAwIGlzIHJlc2VydmVkCisgKiBATkw4MDIxMV9BVFRSX1JFR19SVUxFX0ZMQUdTOiBhIHNldCBvZiBmbGFncyB3aGljaCBzcGVjaWZ5IGFkZGl0aW9uYWwKKyAqIAljb25zaWRlcmF0aW9ucyBmb3IgYSBnaXZlbiBmcmVxdWVuY3kgcmFuZ2UuIFRoZXNlIGFyZSB0aGUKKyAqIAkmZW51bSBubDgwMjExX3JlZ19ydWxlX2ZsYWdzLgorICogQE5MODAyMTFfQVRUUl9GUkVRX1JBTkdFX1NUQVJUOiBzdGFydGluZyBmcmVxdWVuY3J5IGZvciB0aGUgcmVndWxhdG9yeQorICogCXJ1bGUgaW4gS0h6LiBUaGlzIGlzIG5vdCBhIGNlbnRlciBvZiBmcmVxdWVuY3kgYnV0IGFuIGFjdHVhbCByZWd1bGF0b3J5CisgKiAJYmFuZCBlZGdlLgorICogQE5MODAyMTFfQVRUUl9GUkVRX1JBTkdFX0VORDogZW5kaW5nIGZyZXF1ZW5jeSBmb3IgdGhlIHJlZ3VsYXRvcnkgcnVsZQorICogCWluIEtIei4gVGhpcyBpcyBub3QgYSBjZW50ZXIgYSBmcmVxdWVuY3kgYnV0IGFuIGFjdHVhbCByZWd1bGF0b3J5CisgKiAJYmFuZCBlZGdlLgorICogQE5MODAyMTFfQVRUUl9GUkVRX1JBTkdFX01BWF9CVzogbWF4aW11bSBhbGxvd2VkIGJhbmR3aWR0aCBmb3IgdGhpcworICogCWZyZXF1ZW5jeSByYW5nZSwgaW4gS0h6LgorICogQE5MODAyMTFfQVRUUl9QT1dFUl9SVUxFX01BWF9BTlRfR0FJTjogdGhlIG1heGltdW0gYWxsb3dlZCBhbnRlbm5hIGdhaW4KKyAqIAlmb3IgYSBnaXZlbiBmcmVxdWVuY3kgcmFuZ2UuIFRoZSB2YWx1ZSBpcyBpbiBtQmkgKDEwMCAqIGRCaSkuCisgKiAJSWYgeW91IGRvbid0IGhhdmUgb25lIHRoZW4gZG9uJ3Qgc2VuZCB0aGlzLgorICogQE5MODAyMTFfQVRUUl9QT1dFUl9SVUxFX01BWF9FSVJQOiB0aGUgbWF4aW11bSBhbGxvd2VkIEVJUlAgZm9yCisgKiAJYSBnaXZlbiBmcmVxdWVuY3kgcmFuZ2UuIFRoZSB2YWx1ZSBpcyBpbiBtQm0gKDEwMCAqIGRCbSkuCisgKiBATkw4MDIxMV9SRUdfUlVMRV9BVFRSX01BWDogaGlnaGVzdCByZWd1bGF0b3J5IHJ1bGUgYXR0cmlidXRlIG51bWJlcgorICoJY3VycmVudGx5IGRlZmluZWQKKyAqIEBfX05MODAyMTFfUkVHX1JVTEVfQVRUUl9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKKyAqLworZW51bSBubDgwMjExX3JlZ19ydWxlX2F0dHIgeworCV9fTkw4MDIxMV9SRUdfUlVMRV9BVFRSX0lOVkFMSUQsCisJTkw4MDIxMV9BVFRSX1JFR19SVUxFX0ZMQUdTLAorCisJTkw4MDIxMV9BVFRSX0ZSRVFfUkFOR0VfU1RBUlQsCisJTkw4MDIxMV9BVFRSX0ZSRVFfUkFOR0VfRU5ELAorCU5MODAyMTFfQVRUUl9GUkVRX1JBTkdFX01BWF9CVywKKworCU5MODAyMTFfQVRUUl9QT1dFUl9SVUxFX01BWF9BTlRfR0FJTiwKKwlOTDgwMjExX0FUVFJfUE9XRVJfUlVMRV9NQVhfRUlSUCwKKworCS8qIGtlZXAgbGFzdCAqLworCV9fTkw4MDIxMV9SRUdfUlVMRV9BVFRSX0FGVEVSX0xBU1QsCisJTkw4MDIxMV9SRUdfUlVMRV9BVFRSX01BWCA9IF9fTkw4MDIxMV9SRUdfUlVMRV9BVFRSX0FGVEVSX0xBU1QgLSAxCit9OworCisvKioKKyAqIGVudW0gbmw4MDIxMV9yZWdfcnVsZV9mbGFncyAtIHJlZ3VsYXRvcnkgcnVsZSBmbGFncworICoKKyAqIEBOTDgwMjExX1JSRl9OT19PRkRNOiBPRkRNIG1vZHVsYXRpb24gbm90IGFsbG93ZWQKKyAqIEBOTDgwMjExX1JSRl9OT19DQ0s6IENDSyBtb2R1bGF0aW9uIG5vdCBhbGxvd2VkCisgKiBATkw4MDIxMV9SUkZfTk9fSU5ET09SOiBpbmRvb3Igb3BlcmF0aW9uIG5vdCBhbGxvd2VkCisgKiBATkw4MDIxMV9SUkZfTk9fT1VURE9PUjogb3V0ZG9vciBvcGVyYXRpb24gbm90IGFsbG93ZWQKKyAqIEBOTDgwMjExX1JSRl9ERlM6IERGUyBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGJlIHVzZWQKKyAqIEBOTDgwMjExX1JSRl9QVFBfT05MWTogdGhpcyBpcyBvbmx5IGZvciBQb2ludCBUbyBQb2ludCBsaW5rcworICogQE5MODAyMTFfUlJGX1BUTVBfT05MWTogdGhpcyBpcyBvbmx5IGZvciBQb2ludCBUbyBNdWx0aSBQb2ludCBsaW5rcworICogQE5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTjogcGFzc2l2ZSBzY2FuIGlzIHJlcXVpcmVkCisgKiBATkw4MDIxMV9SUkZfTk9fSUJTUzogbm8gSUJTUyBpcyBhbGxvd2VkCisgKi8KK2VudW0gbmw4MDIxMV9yZWdfcnVsZV9mbGFncyB7CisJTkw4MDIxMV9SUkZfTk9fT0ZETQkJPSAxPDwwLAorCU5MODAyMTFfUlJGX05PX0NDSwkJPSAxPDwxLAorCU5MODAyMTFfUlJGX05PX0lORE9PUgkJPSAxPDwyLAorCU5MODAyMTFfUlJGX05PX09VVERPT1IJCT0gMTw8MywKKwlOTDgwMjExX1JSRl9ERlMJCQk9IDE8PDQsCisJTkw4MDIxMV9SUkZfUFRQX09OTFkJCT0gMTw8NSwKKwlOTDgwMjExX1JSRl9QVE1QX09OTFkJCT0gMTw8NiwKKwlOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4JPSAxPDw3LAorCU5MODAyMTFfUlJGX05PX0lCU1MJCT0gMTw8OCwKK307CisKKy8qKgorICogZW51bSBubDgwMjExX3N1cnZleV9pbmZvIC0gc3VydmV5IGluZm9ybWF0aW9uCisgKgorICogVGhlc2UgYXR0cmlidXRlIHR5cGVzIGFyZSB1c2VkIHdpdGggJU5MODAyMTFfQVRUUl9TVVJWRVlfSU5GTworICogd2hlbiBnZXR0aW5nIGluZm9ybWF0aW9uIGFib3V0IGEgc3VydmV5LgorICoKKyAqIEBfX05MODAyMTFfU1VSVkVZX0lORk9fSU5WQUxJRDogYXR0cmlidXRlIG51bWJlciAwIGlzIHJlc2VydmVkCisgKiBATkw4MDIxMV9TVVJWRVlfSU5GT19GUkVRVUVOQ1k6IGNlbnRlciBmcmVxdWVuY3kgb2YgY2hhbm5lbAorICogQE5MODAyMTFfU1VSVkVZX0lORk9fTk9JU0U6IG5vaXNlIGxldmVsIG9mIGNoYW5uZWwgKHU4LCBkQm0pCisgKiBATkw4MDIxMV9TVVJWRVlfSU5GT19JTl9VU0U6IGNoYW5uZWwgaXMgY3VycmVudGx5IGJlaW5nIHVzZWQKKyAqIEBOTDgwMjExX1NVUlZFWV9JTkZPX0NIQU5ORUxfVElNRTogYW1vdW50IG9mIHRpbWUgKGluIG1zKSB0aGF0IHRoZSByYWRpbworICoJc3BlbnQgb24gdGhpcyBjaGFubmVsCisgKiBATkw4MDIxMV9TVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfQlVTWTogYW1vdW50IG9mIHRoZSB0aW1lIHRoZSBwcmltYXJ5CisgKgljaGFubmVsIHdhcyBzZW5zZWQgYnVzeSAoZWl0aGVyIGR1ZSB0byBhY3Rpdml0eSBvciBlbmVyZ3kgZGV0ZWN0KQorICogQE5MODAyMTFfU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX0VYVF9CVVNZOiBhbW91bnQgb2YgdGltZSB0aGUgZXh0ZW5zaW9uCisgKgljaGFubmVsIHdhcyBzZW5zZWQgYnVzeQorICogQE5MODAyMTFfU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX1JYOiBhbW91bnQgb2YgdGltZSB0aGUgcmFkaW8gc3BlbnQKKyAqCXJlY2VpdmluZyBkYXRhCisgKiBATkw4MDIxMV9TVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfVFg6IGFtb3VudCBvZiB0aW1lIHRoZSByYWRpbyBzcGVudAorICoJdHJhbnNtaXR0aW5nIGRhdGEKKyAqIEBOTDgwMjExX1NVUlZFWV9JTkZPX01BWDogaGlnaGVzdCBzdXJ2ZXkgaW5mbyBhdHRyaWJ1dGUgbnVtYmVyCisgKgljdXJyZW50bHkgZGVmaW5lZAorICogQF9fTkw4MDIxMV9TVVJWRVlfSU5GT19BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKKyAqLworZW51bSBubDgwMjExX3N1cnZleV9pbmZvIHsKKwlfX05MODAyMTFfU1VSVkVZX0lORk9fSU5WQUxJRCwKKwlOTDgwMjExX1NVUlZFWV9JTkZPX0ZSRVFVRU5DWSwKKwlOTDgwMjExX1NVUlZFWV9JTkZPX05PSVNFLAorCU5MODAyMTFfU1VSVkVZX0lORk9fSU5fVVNFLAorCU5MODAyMTFfU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FLAorCU5MODAyMTFfU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX0JVU1ksCisJTkw4MDIxMV9TVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfRVhUX0JVU1ksCisJTkw4MDIxMV9TVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfUlgsCisJTkw4MDIxMV9TVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfVFgsCisKKwkvKiBrZWVwIGxhc3QgKi8KKwlfX05MODAyMTFfU1VSVkVZX0lORk9fQUZURVJfTEFTVCwKKwlOTDgwMjExX1NVUlZFWV9JTkZPX01BWCA9IF9fTkw4MDIxMV9TVVJWRVlfSU5GT19BRlRFUl9MQVNUIC0gMQorfTsKKworLyoqCisgKiBlbnVtIG5sODAyMTFfbW50cl9mbGFncyAtIG1vbml0b3IgY29uZmlndXJhdGlvbiBmbGFncworICoKKyAqIE1vbml0b3IgY29uZmlndXJhdGlvbiBmbGFncy4KKyAqCisgKiBAX19OTDgwMjExX01OVFJfRkxBR19JTlZBTElEOiByZXNlcnZlZAorICoKKyAqIEBOTDgwMjExX01OVFJfRkxBR19GQ1NGQUlMOiBwYXNzIGZyYW1lcyB3aXRoIGJhZCBGQ1MKKyAqIEBOTDgwMjExX01OVFJfRkxBR19QTENQRkFJTDogcGFzcyBmcmFtZXMgd2l0aCBiYWQgUExDUAorICogQE5MODAyMTFfTU5UUl9GTEFHX0NPTlRST0w6IHBhc3MgY29udHJvbCBmcmFtZXMKKyAqIEBOTDgwMjExX01OVFJfRkxBR19PVEhFUl9CU1M6IGRpc2FibGUgQlNTSUQgZmlsdGVyaW5nCisgKiBATkw4MDIxMV9NTlRSX0ZMQUdfQ09PS19GUkFNRVM6IHJlcG9ydCBmcmFtZXMgYWZ0ZXIgcHJvY2Vzc2luZy4KKyAqCW92ZXJyaWRlcyBhbGwgb3RoZXIgZmxhZ3MuCisgKgorICogQF9fTkw4MDIxMV9NTlRSX0ZMQUdfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlCisgKiBATkw4MDIxMV9NTlRSX0ZMQUdfTUFYOiBoaWdoZXN0IHBvc3NpYmxlIG1vbml0b3IgZmxhZworICovCitlbnVtIG5sODAyMTFfbW50cl9mbGFncyB7CisJX19OTDgwMjExX01OVFJfRkxBR19JTlZBTElELAorCU5MODAyMTFfTU5UUl9GTEFHX0ZDU0ZBSUwsCisJTkw4MDIxMV9NTlRSX0ZMQUdfUExDUEZBSUwsCisJTkw4MDIxMV9NTlRSX0ZMQUdfQ09OVFJPTCwKKwlOTDgwMjExX01OVFJfRkxBR19PVEhFUl9CU1MsCisJTkw4MDIxMV9NTlRSX0ZMQUdfQ09PS19GUkFNRVMsCisKKwkvKiBrZWVwIGxhc3QgKi8KKwlfX05MODAyMTFfTU5UUl9GTEFHX0FGVEVSX0xBU1QsCisJTkw4MDIxMV9NTlRSX0ZMQUdfTUFYID0gX19OTDgwMjExX01OVFJfRkxBR19BRlRFUl9MQVNUIC0gMQorfTsKKworLyoqCisgKiBlbnVtIG5sODAyMTFfbWVzaGNvbmZfcGFyYW1zIC0gbWVzaCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKKyAqCisgKiBNZXNoIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycworICoKKyAqIEBfX05MODAyMTFfTUVTSENPTkZfSU5WQUxJRDogaW50ZXJuYWwgdXNlCisgKgorICogQE5MODAyMTFfTUVTSENPTkZfUkVUUllfVElNRU9VVDogc3BlY2lmaWVzIHRoZSBpbml0aWFsIHJldHJ5IHRpbWVvdXQgaW4KKyAqIG1pbGxpc2Vjb25kIHVuaXRzLCB1c2VkIGJ5IHRoZSBQZWVyIExpbmsgT3BlbiBtZXNzYWdlCisgKgorICogQE5MODAyMTFfTUVTSENPTkZfQ09ORklSTV9USU1FT1VUOiBzcGVjaWZpZXMgdGhlIGluaXRhbCBjb25maXJtIHRpbWVvdXQsIGluCisgKiBtaWxsaXNlY29uZCB1bml0cywgdXNlZCBieSB0aGUgcGVlciBsaW5rIG1hbmFnZW1lbnQgdG8gY2xvc2UgYSBwZWVyIGxpbmsKKyAqCisgKiBATkw4MDIxMV9NRVNIQ09ORl9IT0xESU5HX1RJTUVPVVQ6IHNwZWNpZmllcyB0aGUgaG9sZGluZyB0aW1lb3V0LCBpbgorICogbWlsbGlzZWNvbmQgdW5pdHMKKyAqCisgKiBATkw4MDIxMV9NRVNIQ09ORl9NQVhfUEVFUl9MSU5LUzogbWF4aW11bSBudW1iZXIgb2YgcGVlciBsaW5rcyBhbGxvd2VkCisgKiBvbiB0aGlzIG1lc2ggaW50ZXJmYWNlCisgKgorICogQE5MODAyMTFfTUVTSENPTkZfTUFYX1JFVFJJRVM6IHNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGVlciBsaW5rCisgKiBvcGVuIHJldHJpZXMgdGhhdCBjYW4gYmUgc2VudCB0byBlc3RhYmxpc2ggYSBuZXcgcGVlciBsaW5rIGluc3RhbmNlIGluIGEKKyAqIG1lc2gKKyAqCisgKiBATkw4MDIxMV9NRVNIQ09ORl9UVEw6IHNwZWNpZmllcyB0aGUgdmFsdWUgb2YgVFRMIGZpZWxkIHNldCBhdCBhIHNvdXJjZSBtZXNoCisgKiBwb2ludC4KKyAqCisgKiBATkw4MDIxMV9NRVNIQ09ORl9BVVRPX09QRU5fUExJTktTOiB3aGV0aGVyIHdlIHNob3VsZCBhdXRvbWF0aWNhbGx5CisgKiBvcGVuIHBlZXIgbGlua3Mgd2hlbiB3ZSBkZXRlY3QgY29tcGF0aWJsZSBtZXNoIHBlZXJzLgorICoKKyAqIEBOTDgwMjExX01FU0hDT05GX0hXTVBfTUFYX1BSRVFfUkVUUklFUzogdGhlIG51bWJlciBvZiBhY3Rpb24gZnJhbWVzCisgKiBjb250YWluaW5nIGEgUFJFUSB0aGF0IGFuIE1QIGNhbiBzZW5kIHRvIGEgcGFydGljdWxhciBkZXN0aW5hdGlvbiAocGF0aAorICogdGFyZ2V0KQorICoKKyAqIEBOTDgwMjExX01FU0hDT05GX1BBVEhfUkVGUkVTSF9USU1FOiBob3cgZnJlcXVlbnRseSB0byByZWZyZXNoIG1lc2ggcGF0aHMKKyAqIChpbiBtaWxsaXNlY29uZHMpCisgKgorICogQE5MODAyMTFfTUVTSENPTkZfTUlOX0RJU0NPVkVSWV9USU1FT1VUOiBtaW5pbXVtIGxlbmd0aCBvZiB0aW1lIHRvIHdhaXQKKyAqIHVudGlsIGdpdmluZyB1cCBvbiBhIHBhdGggZGlzY292ZXJ5IChpbiBtaWxsaXNlY29uZHMpCisgKgorICogQE5MODAyMTFfTUVTSENPTkZfSFdNUF9BQ1RJVkVfUEFUSF9USU1FT1VUOiBUaGUgdGltZSAoaW4gVFVzKSBmb3Igd2hpY2ggbWVzaAorICogcG9pbnRzIHJlY2VpdmluZyBhIFBSRVEgc2hhbGwgY29uc2lkZXIgdGhlIGZvcndhcmRpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUKKyAqIHJvb3QgdG8gYmUgdmFsaWQuIChUVSA9IHRpbWUgdW5pdCkKKyAqCisgKiBATkw4MDIxMV9NRVNIQ09ORl9IV01QX1BSRVFfTUlOX0lOVEVSVkFMOiBUaGUgbWluaW11bSBpbnRlcnZhbCBvZiB0aW1lIChpbgorICogVFVzKSBkdXJpbmcgd2hpY2ggYW4gTVAgY2FuIHNlbmQgb25seSBvbmUgYWN0aW9uIGZyYW1lIGNvbnRhaW5pbmcgYSBQUkVRCisgKiByZWZlcmVuY2UgZWxlbWVudAorICoKKyAqIEBOTDgwMjExX01FU0hDT05GX0hXTVBfTkVUX0RJQU1fVFJWU19USU1FOiBUaGUgaW50ZXJ2YWwgb2YgdGltZSAoaW4gVFVzKQorICogdGhhdCBpdCB0YWtlcyBmb3IgYW4gSFdNUCBpbmZvcm1hdGlvbiBlbGVtZW50IHRvIHByb3BhZ2F0ZSBhY3Jvc3MgdGhlIG1lc2gKKyAqCisgKiBATkw4MDIxMV9NRVNIQ09ORl9ST09UTU9ERTogd2hldGhlciByb290IG1vZGUgaXMgZW5hYmxlZCBvciBub3QKKyAqCisgKiBATkw4MDIxMV9NRVNIQ09ORl9BVFRSX01BWDogaGlnaGVzdCBwb3NzaWJsZSBtZXNoIGNvbmZpZ3VyYXRpb24gYXR0cmlidXRlCisgKgorICogQF9fTkw4MDIxMV9NRVNIQ09ORl9BVFRSX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZQorICovCitlbnVtIG5sODAyMTFfbWVzaGNvbmZfcGFyYW1zIHsKKwlfX05MODAyMTFfTUVTSENPTkZfSU5WQUxJRCwKKwlOTDgwMjExX01FU0hDT05GX1JFVFJZX1RJTUVPVVQsCisJTkw4MDIxMV9NRVNIQ09ORl9DT05GSVJNX1RJTUVPVVQsCisJTkw4MDIxMV9NRVNIQ09ORl9IT0xESU5HX1RJTUVPVVQsCisJTkw4MDIxMV9NRVNIQ09ORl9NQVhfUEVFUl9MSU5LUywKKwlOTDgwMjExX01FU0hDT05GX01BWF9SRVRSSUVTLAorCU5MODAyMTFfTUVTSENPTkZfVFRMLAorCU5MODAyMTFfTUVTSENPTkZfQVVUT19PUEVOX1BMSU5LUywKKwlOTDgwMjExX01FU0hDT05GX0hXTVBfTUFYX1BSRVFfUkVUUklFUywKKwlOTDgwMjExX01FU0hDT05GX1BBVEhfUkVGUkVTSF9USU1FLAorCU5MODAyMTFfTUVTSENPTkZfTUlOX0RJU0NPVkVSWV9USU1FT1VULAorCU5MODAyMTFfTUVTSENPTkZfSFdNUF9BQ1RJVkVfUEFUSF9USU1FT1VULAorCU5MODAyMTFfTUVTSENPTkZfSFdNUF9QUkVRX01JTl9JTlRFUlZBTCwKKwlOTDgwMjExX01FU0hDT05GX0hXTVBfTkVUX0RJQU1fVFJWU19USU1FLAorCU5MODAyMTFfTUVTSENPTkZfSFdNUF9ST09UTU9ERSwKKworCS8qIGtlZXAgbGFzdCAqLworCV9fTkw4MDIxMV9NRVNIQ09ORl9BVFRSX0FGVEVSX0xBU1QsCisJTkw4MDIxMV9NRVNIQ09ORl9BVFRSX01BWCA9IF9fTkw4MDIxMV9NRVNIQ09ORl9BVFRSX0FGVEVSX0xBU1QgLSAxCit9OworCisvKioKKyAqIGVudW0gbmw4MDIxMV90eHFfYXR0ciAtIFRYIHF1ZXVlIHBhcmFtZXRlciBhdHRyaWJ1dGVzCisgKiBAX19OTDgwMjExX1RYUV9BVFRSX0lOVkFMSUQ6IEF0dHJpYnV0ZSBudW1iZXIgMCBpcyByZXNlcnZlZAorICogQE5MODAyMTFfVFhRX0FUVFJfUVVFVUU6IFRYIHF1ZXVlIGlkZW50aWZpZXIgKE5MODAyMTFfVFhRX1FfKikKKyAqIEBOTDgwMjExX1RYUV9BVFRSX1RYT1A6IE1heGltdW0gYnVyc3QgdGltZSBpbiB1bml0cyBvZiAzMiB1c2VjcywgMCBtZWFuaW5nCisgKglkaXNhYmxlZAorICogQE5MODAyMTFfVFhRX0FUVFJfQ1dNSU46IE1pbmltdW0gY29udGVudGlvbiB3aW5kb3cgW2EgdmFsdWUgb2YgdGhlIGZvcm0KKyAqCTJebi0xIGluIHRoZSByYW5nZSAxLi4zMjc2N10KKyAqIEBOTDgwMjExX1RYUV9BVFRSX0NXTUFYOiBNYXhpbXVtIGNvbnRlbnRpb24gd2luZG93IFthIHZhbHVlIG9mIHRoZSBmb3JtCisgKgkyXm4tMSBpbiB0aGUgcmFuZ2UgMS4uMzI3NjddCisgKiBATkw4MDIxMV9UWFFfQVRUUl9BSUZTOiBBcmJpdHJhdGlvbiBpbnRlcmZyYW1lIHNwYWNlIFswLi4yNTVdCisgKiBAX19OTDgwMjExX1RYUV9BVFRSX0FGVEVSX0xBU1Q6IEludGVybmFsCisgKiBATkw4MDIxMV9UWFFfQVRUUl9NQVg6IE1heGltdW0gVFhRIGF0dHJpYnV0ZSBudW1iZXIKKyAqLworZW51bSBubDgwMjExX3R4cV9hdHRyIHsKKwlfX05MODAyMTFfVFhRX0FUVFJfSU5WQUxJRCwKKwlOTDgwMjExX1RYUV9BVFRSX1FVRVVFLAorCU5MODAyMTFfVFhRX0FUVFJfVFhPUCwKKwlOTDgwMjExX1RYUV9BVFRSX0NXTUlOLAorCU5MODAyMTFfVFhRX0FUVFJfQ1dNQVgsCisJTkw4MDIxMV9UWFFfQVRUUl9BSUZTLAorCisJLyoga2VlcCBsYXN0ICovCisJX19OTDgwMjExX1RYUV9BVFRSX0FGVEVSX0xBU1QsCisJTkw4MDIxMV9UWFFfQVRUUl9NQVggPSBfX05MODAyMTFfVFhRX0FUVFJfQUZURVJfTEFTVCAtIDEKK307CisKK2VudW0gbmw4MDIxMV90eHFfcSB7CisJTkw4MDIxMV9UWFFfUV9WTywKKwlOTDgwMjExX1RYUV9RX1ZJLAorCU5MODAyMTFfVFhRX1FfQkUsCisJTkw4MDIxMV9UWFFfUV9CSworfTsKKworZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSB7CisJTkw4MDIxMV9DSEFOX05PX0hULAorCU5MODAyMTFfQ0hBTl9IVDIwLAorCU5MODAyMTFfQ0hBTl9IVDQwTUlOVVMsCisJTkw4MDIxMV9DSEFOX0hUNDBQTFVTCit9OworCisvKioKKyAqIGVudW0gbmw4MDIxMV9ic3MgLSBuZXRsaW5rIGF0dHJpYnV0ZXMgZm9yIGEgQlNTCisgKgorICogQF9fTkw4MDIxMV9CU1NfSU5WQUxJRDogaW52YWxpZAorICogQE5MODAyMTFfQlNTX0JTU0lEOiBCU1NJRCBvZiB0aGUgQlNTICg2IG9jdGV0cykKKyAqIEBOTDgwMjExX0JTU19GUkVRVUVOQ1k6IGZyZXF1ZW5jeSBpbiBNSHogKHUzMikKKyAqIEBOTDgwMjExX0JTU19UU0Y6IFRTRiBvZiB0aGUgcmVjZWl2ZWQgcHJvYmUgcmVzcG9uc2UvYmVhY29uICh1NjQpCisgKiBATkw4MDIxMV9CU1NfQkVBQ09OX0lOVEVSVkFMOiBiZWFjb24gaW50ZXJ2YWwgb2YgdGhlIChJKUJTUyAodTE2KQorICogQE5MODAyMTFfQlNTX0NBUEFCSUxJVFk6IGNhcGFiaWxpdHkgZmllbGQgKENQVSBvcmRlciwgdTE2KQorICogQE5MODAyMTFfQlNTX0lORk9STUFUSU9OX0VMRU1FTlRTOiBiaW5hcnkgYXR0cmlidXRlIGNvbnRhaW5pbmcgdGhlCisgKglyYXcgaW5mb3JtYXRpb24gZWxlbWVudHMgZnJvbSB0aGUgcHJvYmUgcmVzcG9uc2UvYmVhY29uIChiaW4pOworICoJaWYgdGhlICVOTDgwMjExX0JTU19CRUFDT05fSUVTIGF0dHJpYnV0ZSBpcyBwcmVzZW50LCB0aGUgSUVzIGhlcmUgYXJlCisgKglmcm9tIGEgUHJvYmUgUmVzcG9uc2UgZnJhbWU7IG90aGVyd2lzZSB0aGV5IGFyZSBmcm9tIGEgQmVhY29uIGZyYW1lLgorICoJSG93ZXZlciwgaWYgdGhlIGRyaXZlciBkb2VzIG5vdCBpbmRpY2F0ZSB0aGUgc291cmNlIG9mIHRoZSBJRXMsIHRoZXNlCisgKglJRXMgbWF5IGJlIGZyb20gZWl0aGVyIGZyYW1lIHN1YnR5cGUuCisgKiBATkw4MDIxMV9CU1NfU0lHTkFMX01CTTogc2lnbmFsIHN0cmVuZ3RoIG9mIHByb2JlIHJlc3BvbnNlL2JlYWNvbgorICoJaW4gbUJtICgxMDAgKiBkQm0pIChzMzIpCisgKiBATkw4MDIxMV9CU1NfU0lHTkFMX1VOU1BFQzogc2lnbmFsIHN0cmVuZ3RoIG9mIHRoZSBwcm9iZSByZXNwb25zZS9iZWFjb24KKyAqCWluIHVuc3BlY2lmaWVkIHVuaXRzLCBzY2FsZWQgdG8gMC4uMTAwICh1OCkKKyAqIEBOTDgwMjExX0JTU19TVEFUVVM6IHN0YXR1cywgaWYgdGhpcyBCU1MgaXMgInVzZWQiCisgKiBATkw4MDIxMV9CU1NfU0VFTl9NU19BR086IGFnZSBvZiB0aGlzIEJTUyBlbnRyeSBpbiBtcworICogQE5MODAyMTFfQlNTX0JFQUNPTl9JRVM6IGJpbmFyeSBhdHRyaWJ1dGUgY29udGFpbmluZyB0aGUgcmF3IGluZm9ybWF0aW9uCisgKgllbGVtZW50cyBmcm9tIGEgQmVhY29uIGZyYW1lIChiaW4pOyBub3QgcHJlc2VudCBpZiBubyBCZWFjb24gZnJhbWUgaGFzCisgKgl5ZXQgYmVlbiByZWNlaXZlZAorICogQF9fTkw4MDIxMV9CU1NfQUZURVJfTEFTVDogaW50ZXJuYWwKKyAqIEBOTDgwMjExX0JTU19NQVg6IGhpZ2hlc3QgQlNTIGF0dHJpYnV0ZQorICovCitlbnVtIG5sODAyMTFfYnNzIHsKKwlfX05MODAyMTFfQlNTX0lOVkFMSUQsCisJTkw4MDIxMV9CU1NfQlNTSUQsCisJTkw4MDIxMV9CU1NfRlJFUVVFTkNZLAorCU5MODAyMTFfQlNTX1RTRiwKKwlOTDgwMjExX0JTU19CRUFDT05fSU5URVJWQUwsCisJTkw4MDIxMV9CU1NfQ0FQQUJJTElUWSwKKwlOTDgwMjExX0JTU19JTkZPUk1BVElPTl9FTEVNRU5UUywKKwlOTDgwMjExX0JTU19TSUdOQUxfTUJNLAorCU5MODAyMTFfQlNTX1NJR05BTF9VTlNQRUMsCisJTkw4MDIxMV9CU1NfU1RBVFVTLAorCU5MODAyMTFfQlNTX1NFRU5fTVNfQUdPLAorCU5MODAyMTFfQlNTX0JFQUNPTl9JRVMsCisKKwkvKiBrZWVwIGxhc3QgKi8KKwlfX05MODAyMTFfQlNTX0FGVEVSX0xBU1QsCisJTkw4MDIxMV9CU1NfTUFYID0gX19OTDgwMjExX0JTU19BRlRFUl9MQVNUIC0gMQorfTsKKworLyoqCisgKiBlbnVtIG5sODAyMTFfYnNzX3N0YXR1cyAtIEJTUyAic3RhdHVzIgorICogQE5MODAyMTFfQlNTX1NUQVRVU19BVVRIRU5USUNBVEVEOiBBdXRoZW50aWNhdGVkIHdpdGggdGhpcyBCU1MuCisgKiBATkw4MDIxMV9CU1NfU1RBVFVTX0FTU09DSUFURUQ6IEFzc29jaWF0ZWQgd2l0aCB0aGlzIEJTUy4KKyAqIEBOTDgwMjExX0JTU19TVEFUVVNfSUJTU19KT0lORUQ6IEpvaW5lZCB0byB0aGlzIElCU1MuCisgKgorICogVGhlIEJTUyBzdGF0dXMgaXMgYSBCU1MgYXR0cmlidXRlIGluIHNjYW4gZHVtcHMsIHdoaWNoCisgKiBpbmRpY2F0ZXMgdGhlIHN0YXR1cyB0aGUgaW50ZXJmYWNlIGhhcyB3cnQuIHRoaXMgQlNTLgorICovCitlbnVtIG5sODAyMTFfYnNzX3N0YXR1cyB7CisJTkw4MDIxMV9CU1NfU1RBVFVTX0FVVEhFTlRJQ0FURUQsCisJTkw4MDIxMV9CU1NfU1RBVFVTX0FTU09DSUFURUQsCisJTkw4MDIxMV9CU1NfU1RBVFVTX0lCU1NfSk9JTkVELAorfTsKKworLyoqCisgKiBlbnVtIG5sODAyMTFfYXV0aF90eXBlIC0gQXV0aGVudGljYXRpb25UeXBlCisgKgorICogQE5MODAyMTFfQVVUSFRZUEVfT1BFTl9TWVNURU06IE9wZW4gU3lzdGVtIGF1dGhlbnRpY2F0aW9uCisgKiBATkw4MDIxMV9BVVRIVFlQRV9TSEFSRURfS0VZOiBTaGFyZWQgS2V5IGF1dGhlbnRpY2F0aW9uIChXRVAgb25seSkKKyAqIEBOTDgwMjExX0FVVEhUWVBFX0ZUOiBGYXN0IEJTUyBUcmFuc2l0aW9uIChJRUVFIDgwMi4xMXIpCisgKiBATkw4MDIxMV9BVVRIVFlQRV9ORVRXT1JLX0VBUDogTmV0d29yayBFQVAgKHNvbWUgQ2lzY28gQVBzIGFuZCBtYWlubHkgTEVBUCkKKyAqIEBfX05MODAyMTFfQVVUSFRZUEVfTlVNOiBpbnRlcm5hbAorICogQE5MODAyMTFfQVVUSFRZUEVfTUFYOiBtYXhpbXVtIHZhbGlkIGF1dGggYWxnb3JpdGhtCisgKiBATkw4MDIxMV9BVVRIVFlQRV9BVVRPTUFUSUM6IGRldGVybWluZSBhdXRvbWF0aWNhbGx5IChpZiBuZWNlc3NhcnkgYnkKKyAqCXRyeWluZyBtdWx0aXBsZSB0aW1lcyk7IHRoaXMgaXMgaW52YWxpZCBpbiBuZXRsaW5rIC0tIGxlYXZlIG91dAorICoJdGhlIGF0dHJpYnV0ZSBmb3IgdGhpcyBvbiBDT05ORUNUIGNvbW1hbmRzLgorICovCitlbnVtIG5sODAyMTFfYXV0aF90eXBlIHsKKwlOTDgwMjExX0FVVEhUWVBFX09QRU5fU1lTVEVNLAorCU5MODAyMTFfQVVUSFRZUEVfU0hBUkVEX0tFWSwKKwlOTDgwMjExX0FVVEhUWVBFX0ZULAorCU5MODAyMTFfQVVUSFRZUEVfTkVUV09SS19FQVAsCisKKwkvKiBrZWVwIGxhc3QgKi8KKwlfX05MODAyMTFfQVVUSFRZUEVfTlVNLAorCU5MODAyMTFfQVVUSFRZUEVfTUFYID0gX19OTDgwMjExX0FVVEhUWVBFX05VTSAtIDEsCisJTkw4MDIxMV9BVVRIVFlQRV9BVVRPTUFUSUMKK307CisKKy8qKgorICogZW51bSBubDgwMjExX2tleV90eXBlIC0gS2V5IFR5cGUKKyAqIEBOTDgwMjExX0tFWVRZUEVfR1JPVVA6IEdyb3VwIChicm9hZGNhc3QvbXVsdGljYXN0KSBrZXkKKyAqIEBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U6IFBhaXJ3aXNlICh1bmljYXN0L2luZGl2aWR1YWwpIGtleQorICogQE5MODAyMTFfS0VZVFlQRV9QRUVSS0VZOiBQZWVyS2V5IChETFMpCisgKiBATlVNX05MODAyMTFfS0VZVFlQRVM6IG51bWJlciBvZiBkZWZpbmVkIGtleSB0eXBlcworICovCitlbnVtIG5sODAyMTFfa2V5X3R5cGUgeworCU5MODAyMTFfS0VZVFlQRV9HUk9VUCwKKwlOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UsCisJTkw4MDIxMV9LRVlUWVBFX1BFRVJLRVksCisKKwlOVU1fTkw4MDIxMV9LRVlUWVBFUworfTsKKworLyoqCisgKiBlbnVtIG5sODAyMTFfbWZwIC0gTWFuYWdlbWVudCBmcmFtZSBwcm90ZWN0aW9uIHN0YXRlCisgKiBATkw4MDIxMV9NRlBfTk86IE1hbmFnZW1lbnQgZnJhbWUgcHJvdGVjdGlvbiBub3QgdXNlZAorICogQE5MODAyMTFfTUZQX1JFUVVJUkVEOiBNYW5hZ2VtZW50IGZyYW1lIHByb3RlY3Rpb24gcmVxdWlyZWQKKyAqLworZW51bSBubDgwMjExX21mcCB7CisJTkw4MDIxMV9NRlBfTk8sCisJTkw4MDIxMV9NRlBfUkVRVUlSRUQsCit9OworCitlbnVtIG5sODAyMTFfd3BhX3ZlcnNpb25zIHsKKwlOTDgwMjExX1dQQV9WRVJTSU9OXzEgPSAxIDw8IDAsCisJTkw4MDIxMV9XUEFfVkVSU0lPTl8yID0gMSA8PCAxLAorfTsKKworLyoqCisgKiBlbnVtIG5sODAyMTFfa2V5X2F0dHJpYnV0ZXMgLSBrZXkgYXR0cmlidXRlcworICogQF9fTkw4MDIxMV9LRVlfSU5WQUxJRDogaW52YWxpZAorICogQE5MODAyMTFfS0VZX0RBVEE6ICh0ZW1wb3JhbCkga2V5IGRhdGE7IGZvciBUS0lQIHRoaXMgY29uc2lzdHMgb2YKKyAqCTE2IGJ5dGVzIGVuY3J5cHRpb24ga2V5IGZvbGxvd2VkIGJ5IDggYnl0ZXMgZWFjaCBmb3IgVFggYW5kIFJYIE1JQworICoJa2V5cworICogQE5MODAyMTFfS0VZX0lEWDoga2V5IElEICh1OCwgMC0zKQorICogQE5MODAyMTFfS0VZX0NJUEhFUjoga2V5IGNpcGhlciBzdWl0ZSAodTMyLCBhcyBkZWZpbmVkIGJ5IElFRUUgODAyLjExCisgKglzZWN0aW9uIDcuMy4yLjI1LjEsIGUuZy4gMHgwMDBGQUMwNCkKKyAqIEBOTDgwMjExX0tFWV9TRVE6IHRyYW5zbWl0IGtleSBzZXF1ZW5jZSBudW1iZXIgKElWL1BOKSBmb3IgVEtJUCBhbmQKKyAqCUNDTVAga2V5cywgZWFjaCBzaXggYnl0ZXMgaW4gbGl0dGxlIGVuZGlhbgorICogQE5MODAyMTFfS0VZX0RFRkFVTFQ6IGZsYWcgaW5kaWNhdGluZyBkZWZhdWx0IGtleQorICogQE5MODAyMTFfS0VZX0RFRkFVTFRfTUdNVDogZmxhZyBpbmRpY2F0aW5nIGRlZmF1bHQgbWFuYWdlbWVudCBrZXkKKyAqIEBOTDgwMjExX0tFWV9UWVBFOiB0aGUga2V5IHR5cGUgZnJvbSBlbnVtIG5sODAyMTFfa2V5X3R5cGUsIGlmIG5vdAorICoJc3BlY2lmaWVkIHRoZSBkZWZhdWx0IGRlcGVuZHMgb24gd2hldGhlciBhIE1BQyBhZGRyZXNzIHdhcworICoJZ2l2ZW4gd2l0aCB0aGUgY29tbWFuZCB1c2luZyB0aGUga2V5IG9yIG5vdCAodTMyKQorICogQF9fTkw4MDIxMV9LRVlfQUZURVJfTEFTVDogaW50ZXJuYWwKKyAqIEBOTDgwMjExX0tFWV9NQVg6IGhpZ2hlc3Qga2V5IGF0dHJpYnV0ZQorICovCitlbnVtIG5sODAyMTFfa2V5X2F0dHJpYnV0ZXMgeworCV9fTkw4MDIxMV9LRVlfSU5WQUxJRCwKKwlOTDgwMjExX0tFWV9EQVRBLAorCU5MODAyMTFfS0VZX0lEWCwKKwlOTDgwMjExX0tFWV9DSVBIRVIsCisJTkw4MDIxMV9LRVlfU0VRLAorCU5MODAyMTFfS0VZX0RFRkFVTFQsCisJTkw4MDIxMV9LRVlfREVGQVVMVF9NR01ULAorCU5MODAyMTFfS0VZX1RZUEUsCisKKwkvKiBrZWVwIGxhc3QgKi8KKwlfX05MODAyMTFfS0VZX0FGVEVSX0xBU1QsCisJTkw4MDIxMV9LRVlfTUFYID0gX19OTDgwMjExX0tFWV9BRlRFUl9MQVNUIC0gMQorfTsKKworLyoqCisgKiBlbnVtIG5sODAyMTFfdHhfcmF0ZV9hdHRyaWJ1dGVzIC0gVFggcmF0ZSBzZXQgYXR0cmlidXRlcworICogQF9fTkw4MDIxMV9UWFJBVEVfSU5WQUxJRDogaW52YWxpZAorICogQE5MODAyMTFfVFhSQVRFX0xFR0FDWTogTGVnYWN5IChub24tTUNTKSByYXRlcyBhbGxvd2VkIGZvciBUWCByYXRlIHNlbGVjdGlvbgorICoJaW4gYW4gYXJyYXkgb2YgcmF0ZXMgYXMgZGVmaW5lZCBpbiBJRUVFIDgwMi4xMSA3LjMuMi4yICh1OCB2YWx1ZXMgd2l0aAorICoJMSA9IDUwMCBrYnBzKSBidXQgd2l0aG91dCB0aGUgSUUgbGVuZ3RoIHJlc3RyaWN0aW9uIChhdCBtb3N0CisgKgklTkw4MDIxMV9NQVhfU1VQUF9SQVRFUyBpbiBhIHNpbmdsZSBhcnJheSkuCisgKiBAX19OTDgwMjExX1RYUkFURV9BRlRFUl9MQVNUOiBpbnRlcm5hbAorICogQE5MODAyMTFfVFhSQVRFX01BWDogaGlnaGVzdCBUWCByYXRlIGF0dHJpYnV0ZQorICovCitlbnVtIG5sODAyMTFfdHhfcmF0ZV9hdHRyaWJ1dGVzIHsKKwlfX05MODAyMTFfVFhSQVRFX0lOVkFMSUQsCisJTkw4MDIxMV9UWFJBVEVfTEVHQUNZLAorCisJLyoga2VlcCBsYXN0ICovCisJX19OTDgwMjExX1RYUkFURV9BRlRFUl9MQVNULAorCU5MODAyMTFfVFhSQVRFX01BWCA9IF9fTkw4MDIxMV9UWFJBVEVfQUZURVJfTEFTVCAtIDEKK307CisKKy8qKgorICogZW51bSBubDgwMjExX2JhbmQgLSBGcmVxdWVuY3kgYmFuZAorICogQE5MODAyMTFfQkFORF8yR0haOiAyLjQgR0h6IElTTSBiYW5kCisgKiBATkw4MDIxMV9CQU5EXzVHSFo6IGFyb3VuZCA1IEdIeiBiYW5kICg0LjkgLSA1LjcgR0h6KQorICovCitlbnVtIG5sODAyMTFfYmFuZCB7CisJTkw4MDIxMV9CQU5EXzJHSFosCisJTkw4MDIxMV9CQU5EXzVHSFosCit9OworCitlbnVtIG5sODAyMTFfcHNfc3RhdGUgeworCU5MODAyMTFfUFNfRElTQUJMRUQsCisJTkw4MDIxMV9QU19FTkFCTEVELAorfTsKKworLyoqCisgKiBlbnVtIG5sODAyMTFfYXR0cl9jcW0gLSBjb25uZWN0aW9uIHF1YWxpdHkgbW9uaXRvciBhdHRyaWJ1dGVzCisgKiBAX19OTDgwMjExX0FUVFJfQ1FNX0lOVkFMSUQ6IGludmFsaWQKKyAqIEBOTDgwMjExX0FUVFJfQ1FNX1JTU0lfVEhPTEQ6IFJTU0kgdGhyZXNob2xkIGluIGRCbS4gVGhpcyB2YWx1ZSBzcGVjaWZpZXMKKyAqCXRoZSB0aHJlc2hvbGQgZm9yIHRoZSBSU1NJIGxldmVsIGF0IHdoaWNoIGFuIGV2ZW50IHdpbGwgYmUgc2VudC4gWmVybworICoJdG8gZGlzYWJsZS4KKyAqIEBOTDgwMjExX0FUVFJfQ1FNX1JTU0lfSFlTVDogUlNTSSBoeXN0ZXJlc2lzIGluIGRCbS4gVGhpcyB2YWx1ZSBzcGVjaWZpZXMKKyAqCXRoZSBtaW5pbXVtIGFtb3VudCB0aGUgUlNTSSBsZXZlbCBtdXN0IGNoYW5nZSBhZnRlciBhbiBldmVudCBiZWZvcmUgYQorICoJbmV3IGV2ZW50IG1heSBiZSBpc3N1ZWQgKHRvIHJlZHVjZSBlZmZlY3RzIG9mIFJTU0kgb3NjaWxsYXRpb24pLgorICogQE5MODAyMTFfQVRUUl9DUU1fUlNTSV9USFJFU0hPTERfRVZFTlQ6IFJTU0kgdGhyZXNob2xkIGV2ZW50CisgKiBAX19OTDgwMjExX0FUVFJfQ1FNX0FGVEVSX0xBU1Q6IGludGVybmFsCisgKiBATkw4MDIxMV9BVFRSX0NRTV9NQVg6IGhpZ2hlc3Qga2V5IGF0dHJpYnV0ZQorICovCitlbnVtIG5sODAyMTFfYXR0cl9jcW0geworCV9fTkw4MDIxMV9BVFRSX0NRTV9JTlZBTElELAorCU5MODAyMTFfQVRUUl9DUU1fUlNTSV9USE9MRCwKKwlOTDgwMjExX0FUVFJfQ1FNX1JTU0lfSFlTVCwKKwlOTDgwMjExX0FUVFJfQ1FNX1JTU0lfVEhSRVNIT0xEX0VWRU5ULAorCisJLyoga2VlcCBsYXN0ICovCisJX19OTDgwMjExX0FUVFJfQ1FNX0FGVEVSX0xBU1QsCisJTkw4MDIxMV9BVFRSX0NRTV9NQVggPSBfX05MODAyMTFfQVRUUl9DUU1fQUZURVJfTEFTVCAtIDEKK307CisKKy8qKgorICogZW51bSBubDgwMjExX2NxbV9yc3NpX3RocmVzaG9sZF9ldmVudCAtIFJTU0kgdGhyZXNob2xkIGV2ZW50CisgKiBATkw4MDIxMV9DUU1fUlNTSV9USFJFU0hPTERfRVZFTlRfTE9XOiBUaGUgUlNTSSBsZXZlbCBpcyBsb3dlciB0aGFuIHRoZQorICogICAgICBjb25maWd1cmVkIHRocmVzaG9sZAorICogQE5MODAyMTFfQ1FNX1JTU0lfVEhSRVNIT0xEX0VWRU5UX0hJR0g6IFRoZSBSU1NJIGlzIGhpZ2hlciB0aGFuIHRoZQorICogICAgICBjb25maWd1cmVkIHRocmVzaG9sZAorICovCitlbnVtIG5sODAyMTFfY3FtX3Jzc2lfdGhyZXNob2xkX2V2ZW50IHsKKwlOTDgwMjExX0NRTV9SU1NJX1RIUkVTSE9MRF9FVkVOVF9MT1csCisJTkw4MDIxMV9DUU1fUlNTSV9USFJFU0hPTERfRVZFTlRfSElHSCwKK307CisKKworLyoqCisgKiBlbnVtIG5sODAyMTFfdHhfcG93ZXJfc2V0dGluZyAtIFRYIHBvd2VyIGFkanVzdG1lbnQKKyAqIEBOTDgwMjExX1RYX1BPV0VSX0FVVE9NQVRJQzogYXV0b21hdGljYWxseSBkZXRlcm1pbmUgdHJhbnNtaXQgcG93ZXIKKyAqIEBOTDgwMjExX1RYX1BPV0VSX0xJTUlURUQ6IGxpbWl0IFRYIHBvd2VyIGJ5IHRoZSBtQm0gcGFyYW1ldGVyCisgKiBATkw4MDIxMV9UWF9QT1dFUl9GSVhFRDogZml4IFRYIHBvd2VyIHRvIHRoZSBtQm0gcGFyYW1ldGVyCisgKi8KK2VudW0gbmw4MDIxMV90eF9wb3dlcl9zZXR0aW5nIHsKKwlOTDgwMjExX1RYX1BPV0VSX0FVVE9NQVRJQywKKwlOTDgwMjExX1RYX1BPV0VSX0xJTUlURUQsCisJTkw4MDIxMV9UWF9QT1dFUl9GSVhFRCwKK307CisKKyNlbmRpZiAvKiBfX0xJTlVYX05MODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L251YnVzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvbnVidXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGIwM2U0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L251YnVzLmgKQEAgLTAsMCArMSwyNDQgQEAKKy8qCisgIG51YnVzLmg6IHZhcmlvdXMgZGVmaW5pdGlvbnMgYW5kIHByb3RvdHlwZXMgZm9yIE51QnVzIGRyaXZlcnMgdG8gdXNlLgorCisgIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBBbGFuIENveC4KKworICBIYWNrZWQgdG8gZGVhdGggYnkgQy4gU2NvdHQgQW5hbmlhbiBhbmQgRGF2aWQgSHVnZ2lucy1EYWluZXMuCisgIAorICBTb21lIG9mIHRoZSBjb25zdGFudHMgaW4gaGVyZSBhcmUgZnJvbSB0aGUgY29ycmVzcG9uZGluZworICBOZXRCU0QvT3BlbkJTRCBoZWFkZXIgZmlsZSwgYnkgQWxsZW4gQnJpZ2dzLiAgV2UgZmlndXJlZCBvdXQgdGhlCisgIHJlc3Qgb2YgdGhlbSBvbiBvdXIgb3duLiAqLworCisjaWZuZGVmIExJTlVYX05VQlVTX0gKKyNkZWZpbmUgTElOVVhfTlVCVVNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworZW51bSBudWJ1c19jYXRlZ29yeSB7CisJTlVCVVNfQ0FUX0JPQVJEICAgICAgICAgID0gMHgwMDAxLAorCU5VQlVTX0NBVF9ESVNQTEFZICAgICAgICA9IDB4MDAwMywKKwlOVUJVU19DQVRfTkVUV09SSyAgICAgICAgPSAweDAwMDQsCisJTlVCVVNfQ0FUX0NPTU1VTklDQVRJT05TID0gMHgwMDA2LAorCU5VQlVTX0NBVF9GT05UICAgICAgICAgICA9IDB4MDAwOSwKKwlOVUJVU19DQVRfQ1BVICAgICAgICAgICAgPSAweDAwMEEsCisJLyogRm9yIGxhY2sgb2YgYSBiZXR0ZXIgbmFtZSAqLworCU5VQlVTX0NBVF9EVU9ET0NLICAgICAgICA9IDB4MDAyMAorfTsKKworZW51bSBudWJ1c190eXBlX25ldHdvcmsgeworCU5VQlVTX1RZUEVfRVRIRVJORVQgICAgICA9IDB4MDAwMSwKKwlOVUJVU19UWVBFX1JTMjMyICAgICAgICAgPSAweDAwMDIKK307CisKK2VudW0gbnVidXNfdHlwZV9kaXNwbGF5IHsKKwlOVUJVU19UWVBFX1ZJREVPICAgICAgICAgPSAweDAwMDEKK307CisKK2VudW0gbnVidXNfdHlwZV9jcHUgeworCU5VQlVTX1RZUEVfNjgwMjAgICAgICAgICA9IDB4MDAwMywKKwlOVUJVU19UWVBFXzY4MDMwICAgICAgICAgPSAweDAwMDQsCisJTlVCVVNfVFlQRV82ODA0MCAgICAgICAgID0gMHgwMDA1Cit9OworCisvKiBLbm93biA8Q2F0LFR5cGUsU1csSFc+IHR1cGxlczogKGFjY29yZGluZyB0byBUYXR0bGVUZWNoIGFuZCBTbG90cykKKyAqICA2ODAzMCBtb3RoZXJib2FyZHM6IDwxMCw0LDAsMjQ+CisgKiAgNjgwNDAgbW90aGVyYm9hcmRzOiA8MTAsNSwwLDI0PgorICogIER1b0RvY2sgUGx1czogPDMyLDEsMSwyPgorICoKKyAqICBUb2J5IEZyYW1lIEJ1ZmZlciBjYXJkOiA8MywxLDEsMT4KKyAqICBSQlYgYnVpbHQtaW4gdmlkZW8gKElJY2kpOiA8MywxLDEsMjQ+CisgKiAgVmFsa3lyaWUgYnVpbHQtaW4gdmlkZW8gKFE2MzApOiA8MywxLDEsNDY+CisgKiAgTWFjaW50b3NoIERpc3BsYXkgQ2FyZDogPDMsMSwxLDI1PgorICogIFNvbm9yYSBidWlsdC1pbiB2aWRlbyAoUDQ2MCk6IDwzLDEsMSwzND4KKyAqICBKZXQgZnJhbWVidWZmZXIgKER1b0RvY2sgUGx1cyk6IDwzLDEsMSw0MT4KKyAqCisgKiAgU09OSUMgY29tbS1zbG90L29uLWJvYXJkIGFuZCBEdW9Eb2NrIEV0aGVybmV0OiA8NCwxLDEsMjcyPgorICogIFNPTklDIExDLVBEUyBFdGhlcm5ldCAoRGF5bmEsIGJ1dCBsaWtlIEFwcGxlIDE2LWJpdCwgc29ydCBvZik6IDw0LDEsMSwyNzE+CisgKiAgQXBwbGUgU09OSUMgTEMtUERTIEV0aGVybmV0ICgiQXBwbGUgRXRoZXJuZXQgTEMgVHdpc3RlZC1QYWlyIENhcmQiKTogPDQsMSwwLDI4MT4KKyAqICBTb25pYyBTeXN0ZW1zIEV0aGVybmV0IEEtU2VyaWVzIENhcmQ6IDw0LDEsMjY4LDI1Nj4KKyAqICBBc2FudGUgTWFjQ29uIE51QnVzLUE6IDw0LDEsMjYwLDI1Nj4gKGFscGhhLTEuMCwxLjEgcmV2aXNpb24pCisgKiAgIFJPTSBvbiB0aGUgYWJvdmUgY2FyZDogPDIsMSwwLDA+CisgKiAgQ2FibGV0cm9uIGV0aGVybmV0IGNhcmQ6IDw0LDEsMSwyNjU+CisgKiAgRmFyYWxsb24gZXRoZXJuZXQgY2FyZDogPDQsMSwyNjgsMjU2PiAoaWRlbnRpY2FsIHRvIFNvbmljIFN5c3RlbXMgY2FyZCkKKyAqICBLaW5ldGljcyBFdGhlclBvcnQgSUlOOiA8NCwxLDI1OSwyNjI+CisgKiAgQVBJIEVuZ2luZWVyaW5nIEV0aGVyUnVuX0xDYSBQRFMgZW5ldCBjYXJkOiA8NCwxLDI4MiwyNTY+CisgKgorICogIEFkZCB5b3VyIGRldmljZXMgdG8gdGhlIGxpc3QhICBZb3UgY2FuIG9idGFpbiB0aGUgIlNsb3RzIiB1dGlsaXR5CisgKiAgZnJvbSBBcHBsZSdzIEZUUCBzaXRlIGF0OgorICogIGZ0cDovL2Rldi5hcHBsZS5jb20vZGV2d29ybGQvVG9vbF9DaGVzdC9EZXZpY2VzXy1fSGFyZHdhcmUvTnVCdXNfU2xvdF9NYW5hZ2VyLworICoKKyAqICBBbHRlcm5hdGVseSwgVGF0dGxlVGVjaCBjYW4gYmUgZm91bmQgYXQgYW55IEluZm8tTWFjIG1pcnJvciBzaXRlLiAgCisgKiAgb3IgZnJvbSBpdHMgZGlzdHJpYnV0aW9uIHNpdGU6IGZ0cDovL2Z0cC5kZWNpc21rci5jb20vZG1zCisgKi8KKworLyogRHJTVzogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgc29mdHdhcmUgaW50ZXJmYWNlIHRvIGEgYm9hcmQuICBUaGlzCisgICBpcyB1c3VhbGx5IHRoZSBvbmUgeW91IHdhbnQgdG8gbG9vayBhdCB3aGVuIHdyaXRpbmcgYSBkcml2ZXIuICBJdCdzCisgICBub3QgYXMgdXNlZnVsIGFzIHlvdSB0aGluaywgdGhvdWdoLCBiZWNhdXNlIGFzIHdlIHNob3VsZCBrbm93IGJ5CisgICBub3cgKGR1aCksICJBcHBsZSBDb21wYXRpYmxlIiBjYW4gbWVhbiBhIGxvdCBvZiB0aGluZ3MuLi4gKi8KKworLyogQWRkIGtub3duIERyU1cgdmFsdWVzIGhlcmUgKi8KK2VudW0gbnVidXNfZHJzdyB7CisJLyogTlVCVVNfQ0FUX0RJU1BMQVkgKi8KKwlOVUJVU19EUlNXX0FQUExFICAgICAgICA9IDB4MDAwMSwKKwlOVUJVU19EUlNXX0FQUExFX0hJUkVTICA9IDB4MDAxMywgLyogTWFjSUkgSGlSZXMgY2FyZCBkcml2ZXIgKi8KKwkKKwkvKiBOVUJVU19DQVRfTkVUV09SSyAqLworCU5VQlVTX0RSU1dfM0NPTSAgICAgICAgID0gMHgwMDAwLAorCU5VQlVTX0RSU1dfQ0FCTEVUUk9OICAgID0gMHgwMDAxLAorCU5VQlVTX0RSU1dfU09OSUNfTEMgICAgID0gMHgwMDAxLAorCU5VQlVTX0RSU1dfS0lORVRJQ1MgICAgID0gMHgwMTAzLAorCU5VQlVTX0RSU1dfQVNBTlRFICAgICAgID0gMHgwMTA0LAorCU5VQlVTX0RSU1dfVEVDSFdPUktTICAgID0gMHgwMTA5LAorCU5VQlVTX0RSU1dfREFZTkEgICAgICAgID0gMHgwMTBiLAorCU5VQlVTX0RSU1dfRkFSQUxMT04gICAgID0gMHgwMTBjLAorCU5VQlVTX0RSU1dfQVBQTEVfU04gICAgID0gMHgwMTBmLAorCU5VQlVTX0RSU1dfREFZTkEyICAgICAgID0gMHgwMTE1LAorCU5VQlVTX0RSU1dfRk9DVVMgICAgICAgID0gMHgwMTFhLAorCU5VQlVTX0RSU1dfQVNBTlRFX0NTICAgID0gMHgwMTFkLCAvKiB1c2UgYXNhbnRlIFNNQzkxOTQgZHJpdmVyICovCisJTlVCVVNfRFJTV19EQVlOQV9MQyAgICAgPSAweDAxMWUsCisKKwkvKiBOVUJVU19DQVRfQ1BVICovCisJTlVCVVNfRFJTV19OT05FICAgICAgICAgPSAweDAwMDAsCit9OworCisvKiBEckhXOiBVbmlxdWVseSBpZGVudGlmaWVzIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UgdG8gYSBib2FyZCAob3IgYXQKKyAgIGxlYXN0LCBpdCBzaG91bGQuLi4gIHNvbWUgdmlkZW8gY2FyZHMgYXJlIGtub3duIHRvIGluY29ycmVjdGx5CisgICBpZGVudGlmeSB0aGVtc2VsdmVzIGFzIFRvYnkgY2FyZHMpICovCisKKy8qIEFkZCBrbm93biBEckhXIHZhbHVlcyBoZXJlICovCitlbnVtIG51YnVzX2RyaHcgeworCS8qIE5VQlVTX0NBVF9ESVNQTEFZICovCisJTlVCVVNfRFJIV19BUFBMRV9URkIgICAgICA9IDB4MDAwMSwgLyogVG9ieSBmcmFtZSBidWZmZXIgY2FyZCAqLworCU5VQlVTX0RSSFdfQVBQTEVfV1ZDICAgICAgPSAweDAwMDYsIC8qIEFwcGxlIFdvcmtzdGF0aW9uIFZpZGVvIENhcmQgKi8KKwlOVUJVU19EUkhXX1NJR01BX0NMUk1BWCAgID0gMHgwMDA3LCAvKiBTaWdtYSBEZXNpZ24gQ29sb3JNYXggKi8KKwlOVUJVU19EUkhXX0FQUExFX1NFMzAgICAgID0gMHgwMDA5LCAvKiBBcHBsZSBTRS8zMCB2aWRlbyAqLworCU5VQlVTX0RSSFdfQVBQTEVfSFJWQyAgICAgPSAweDAwMTMsIC8qIE1hYyBJSSBIaWdoLVJlcyBWaWRlbyBDYXJkICovCisJTlVCVVNfRFJIV19BUFBMRV9QVkMgICAgICA9IDB4MDAxNywgLyogTWFjIElJIFBvcnRyYWl0IFZpZGVvIENhcmQgKi8KKwlOVUJVU19EUkhXX0FQUExFX1JCVjEgICAgID0gMHgwMDE4LCAvKiBJSWNpIFJCViB2aWRlbyAqLworCU5VQlVTX0RSSFdfQVBQTEVfTURDICAgICAgPSAweDAwMTksIC8qIE1hY2ludG9zaCBEaXNwbGF5IENhcmQgKi8KKwlOVUJVU19EUkhXX0FQUExFX1NPTk9SQSAgID0gMHgwMDIyLCAvKiBTb25vcmEgYnVpbHQtaW4gdmlkZW8gKi8KKwlOVUJVU19EUkhXX0FQUExFXzI0QUMgICAgID0gMHgwMDJiLCAvKiBNYWMgMjRBQyBWaWRlbyBDYXJkICovCisJTlVCVVNfRFJIV19BUFBMRV9WQUxLWVJJRSA9IDB4MDAyZSwKKwlOVUJVU19EUkhXX0FQUExFX0pFVCAgICAgID0gMHgwMDI5LCAvKiBKZXQgZnJhbWVidWZmZXIgKER1b0RvY2spICovCisJTlVCVVNfRFJIV19TTUFDX0dGWCAgICAgICA9IDB4MDEwNSwgLyogU3VwZXJNYWMgR0ZYICovCisJTlVCVVNfRFJIV19SQVNURVJfQ0IyNjQgICA9IDB4MDEzQiwgLyogUmFzdGVyT3BzIENvbG9yQm9hcmQgMjY0ICovCisJTlVCVVNfRFJIV19NSUNST05fWENFRUQgICA9IDB4MDE0NiwgLyogTWljcm9uIEV4Y2VlZCBjb2xvciAqLworCU5VQlVTX0RSSFdfUkRJVVNfR1NDICAgICAgPSAweDAxNTMsIC8qIFJhZGl1cyBHUy9DICovCisJTlVCVVNfRFJIV19TTUFDX1NQRUM4ICAgICA9IDB4MDE3QiwgLyogU3VwZXJNYWMgU3BlY3RydW0vOCAqLworCU5VQlVTX0RSSFdfU01BQ19TUEVDMjQgICAgPSAweDAxN0MsIC8qIFN1cGVyTWFjIFNwZWN0cnVtLzI0ICovCisJTlVCVVNfRFJIV19SQVNURVJfQ0IzNjQgICA9IDB4MDI2RiwgLyogUmFzdGVyT3BzIENvbG9yQm9hcmQgMzY0ICovCisJTlVCVVNfRFJIV19SRElVU19EQ0dYICAgICA9IDB4MDI3QywgLyogUmFkaXVzIERpcmVjdENvbG9yL0dYICovCisJTlVCVVNfRFJIV19SRElVU19QQzggICAgICA9IDB4MDI5MSwgLyogUmFkaXVzIFByZWNpc2lvbkNvbG9yIDggKi8KKwlOVUJVU19EUkhXX0xBUElTX1BDUzggICAgID0gMHgwMjkyLCAvKiBMYXBpcyBQcm9Db2xvclNlcnZlciA4ICovCisJTlVCVVNfRFJIV19SQVNURVJfMjRYTEkgICA9IDB4MDJBMCwgLyogUmFzdGVyT3BzIDgvMjQgWExpICovCisJTlVCVVNfRFJIV19SQVNURVJfUEJQR1QgICA9IDB4MDJBNSwgLyogUmFzdGVyT3BzIFBhaW50Qm9hcmQgUHJpc20gR1QgKi8KKwlOVUJVU19EUkhXX0VNQUNIX0ZTWCAgICAgID0gMHgwMkFFLCAvKiBFLU1hY2hpbmVzIEZ1dHVyYSBTWCAqLworCU5VQlVTX0RSSFdfUkFTVEVSXzI0WExUViAgPSAweDAyQjcsIC8qIFJhc3Rlck9wcyAyNFhMVFYgKi8KKwlOVUJVU19EUkhXX1NNQUNfVEhVTkQyNCAgID0gMHgwMkNCLCAvKiBTdXBlck1hYyBUaHVuZGVyLzI0ICovCisJTlVCVVNfRFJIV19TTUFDX1RIVU5ETEdIVCA9IDB4MDNEOSwgLyogU3VwZXJNYWMgVGh1bmRlckxpZ2h0ICovCisJTlVCVVNfRFJIV19SRElVU19QQzI0WFAgICA9IDB4MDQwNiwgLyogUmFkaXVzIFByZWNpc2lvbkNvbG9yIDI0WHAgKi8KKwlOVUJVU19EUkhXX1JESVVTX1BDMjRYICAgID0gMHgwNDBBLCAvKiBSYWRpdXMgUHJlY2lzaW9uQ29sb3IgMjRYICovCisJTlVCVVNfRFJIV19SRElVU19QQzhYSiAgICA9IDB4MDQwQiwgLyogUmFkaXVzIFByZWNpc2lvbkNvbG9yIDhYSiAqLworCQorCS8qIE5VQlVTX0NBVF9ORVRXT1JLICovCisJTlVCVVNfRFJIV19JTlRFUkxBTiAgICAgICA9IDB4MDEwMCwKKwlOVUJVU19EUkhXX1NNQzkxOTQgICAgICAgID0gMHgwMTAxLAorCU5VQlVTX0RSSFdfS0lORVRJQ1MgICAgICAgPSAweDAxMDYsCisJTlVCVVNfRFJIV19DQUJMRVRST04gICAgICA9IDB4MDEwOSwKKwlOVUJVU19EUkhXX0FTQU5URV9MQyAgICAgID0gMHgwMTBmLAorCU5VQlVTX0RSSFdfU09OSUMgICAgICAgICAgPSAweDAxMTAsCisJTlVCVVNfRFJIV19URUNIV09SS1MgICAgICA9IDB4MDExMiwKKwlOVUJVU19EUkhXX0FQUExFX1NPTklDX05CID0gMHgwMTE4LAorCU5VQlVTX0RSSFdfQVBQTEVfU09OSUNfTEMgPSAweDAxMTksCisJTlVCVVNfRFJIV19GT0NVUyAgICAgICAgICA9IDB4MDExYywKKwlOVUJVU19EUkhXX1NPTk5FVCAgICAgICAgID0gMHgwMTFkLAorfTsKKworLyogUmVzb3VyY2UgSURzOiBUaGVzZSBhcmUgdGhlIGlkZW50aWZpZXJzIGZvciB0aGUgdmFyaW91cyB3ZWlyZCBhbmQKKyAgIHdvbmRlcmZ1bCB0aWRiaXRzIG9mIGluZm9ybWF0aW9uIHRoYXQgbWF5IG9yIG1heSBub3QgcmVzaWRlIGluIHRoZQorICAgTnVCdXMgUk9NIGRpcmVjdG9yeS4gKi8KK2VudW0gbnVidXNfcmVzX2lkIHsKKwlOVUJVU19SRVNJRF9UWVBFICAgICAgICAgPSAweDAwMDEsCisJTlVCVVNfUkVTSURfTkFNRSAgICAgICAgID0gMHgwMDAyLAorCU5VQlVTX1JFU0lEX0lDT04gICAgICAgICA9IDB4MDAwMywKKwlOVUJVU19SRVNJRF9EUlZSRElSICAgICAgPSAweDAwMDQsCisJTlVCVVNfUkVTSURfTE9BRFJFQyAgICAgID0gMHgwMDA1LAorCU5VQlVTX1JFU0lEX0JPT1RSRUMgICAgICA9IDB4MDAwNiwKKwlOVUJVU19SRVNJRF9GTEFHUyAgICAgICAgPSAweDAwMDcsCisJTlVCVVNfUkVTSURfSFdERVZJRCAgICAgID0gMHgwMDA4LAorCU5VQlVTX1JFU0lEX01JTk9SX0JBU0VPUyA9IDB4MDAwYSwKKwlOVUJVU19SRVNJRF9NSU5PUl9MRU5HVEggPSAweDAwMGIsCisJTlVCVVNfUkVTSURfTUFKT1JfQkFTRU9TID0gMHgwMDBjLAorCU5VQlVTX1JFU0lEX01BSk9SX0xFTkdUSCA9IDB4MDAwZCwKKwlOVUJVU19SRVNJRF9DSUNOICAgICAgICAgPSAweDAwMGYsCisJTlVCVVNfUkVTSURfSUNMOCAgICAgICAgID0gMHgwMDEwLAorCU5VQlVTX1JFU0lEX0lDTDQgICAgICAgICA9IDB4MDAxMSwKK307CisKKy8qIENhdGVnb3J5LXNwZWNpZmljIHJlc291cmNlcy4gKi8KK2VudW0gbnVidXNfYm9hcmRfcmVzX2lkIHsKKwlOVUJVU19SRVNJRF9CT0FSRElEICAgICAgPSAweDAwMjAsCisJTlVCVVNfUkVTSURfUFJBTUlOSVREQVRBID0gMHgwMDIxLAorCU5VQlVTX1JFU0lEX1BSSU1BUllJTklUICA9IDB4MDAyMiwKKwlOVUJVU19SRVNJRF9USU1FT1VUQ09OU1QgPSAweDAwMjMsCisJTlVCVVNfUkVTSURfVkVORE9SSU5GTyAgID0gMHgwMDI0LAorCU5VQlVTX1JFU0lEX0JPQVJERkxBR1MgICA9IDB4MDAyNSwKKwlOVUJVU19SRVNJRF9TRUNPTkRJTklUICAgPSAweDAwMjYsCisKKwkvKiBOb3Qgc3VyZSB3aHkgQXBwbGUgcHV0IHRoZXNlIG5leHQgdHdvIGluIGhlcmUgKi8KKwlOVUJVU19SRVNJRF9WSUROQU1FUyAgICAgPSAweDAwNDEsCisJTlVCVVNfUkVTSURfVklETU9ERVMgICAgID0gMHgwMDdlCit9OworCisvKiBGaWVsZHMgd2l0aGluIHRoZSB2ZW5kb3IgaW5mbyBkaXJlY3RvcnkgKi8KK2VudW0gbnVidXNfdmVuZG9yX3Jlc19pZCB7CisJTlVCVVNfUkVTSURfVkVORF9JRCAgICAgPSAweDAwMDEsCisJTlVCVVNfUkVTSURfVkVORF9TRVJJQUwgPSAweDAwMDIsCisJTlVCVVNfUkVTSURfVkVORF9SRVYgICAgPSAweDAwMDMsCisJTlVCVVNfUkVTSURfVkVORF9QQVJUICAgPSAweDAwMDQsCisJTlVCVVNfUkVTSURfVkVORF9EQVRFICAgPSAweDAwMDUKK307CisKK2VudW0gbnVidXNfbmV0X3Jlc19pZCB7CisJTlVCVVNfUkVTSURfTUFDX0FERFJFU1MgID0gMHgwMDgwCit9OworCitlbnVtIG51YnVzX2NwdV9yZXNfaWQgeworCU5VQlVTX1JFU0lEX01FTUlORk8gICAgICA9IDB4MDA4MSwKKwlOVUJVU19SRVNJRF9ST01JTkZPICAgICAgPSAweDAwODIKK307CisKK2VudW0gbnVidXNfZGlzcGxheV9yZXNfaWQgeworCU5VQlVTX1JFU0lEX0dBTU1BRElSICAgID0gMHgwMDQwLAorCU5VQlVTX1JFU0lEX0ZJUlNUTU9ERSAgID0gMHgwMDgwLAorCU5VQlVTX1JFU0lEX1NFQ09ORE1PREUgID0gMHgwMDgxLAorCU5VQlVTX1JFU0lEX1RISVJETU9ERSAgID0gMHgwMDgyLAorCU5VQlVTX1JFU0lEX0ZPVVJUSE1PREUgID0gMHgwMDgzLAorCU5VQlVTX1JFU0lEX0ZJRlRITU9ERSAgID0gMHgwMDg0LAorCU5VQlVTX1JFU0lEX1NJWFRITU9ERSAgID0gMHgwMDg1Cit9OworCitzdHJ1Y3QgbnVidXNfZGlyCit7CisJdW5zaWduZWQgY2hhciAqYmFzZTsKKwl1bnNpZ25lZCBjaGFyICpwdHI7CisJaW50IGRvbmU7CisJaW50IG1hc2s7Cit9OworCitzdHJ1Y3QgbnVidXNfZGlyZW50Cit7CisJdW5zaWduZWQgY2hhciAqYmFzZTsKKwl1bnNpZ25lZCBjaGFyIHR5cGU7CisJX191MzIgZGF0YTsJLyogQWN0dWFsbHkgMjRiaXRzIHVzZWQgKi8KKwlpbnQgbWFzazsKK307CisKKworLyogV2UnZCBsaWtlIHRvIGdldCByaWQgb2YgdGhpcyBldmVudHVhbGx5LiAgT25seSBkYXluYXBvcnQuYyB1c2VzIGl0IG5vdy4gKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgKm51YnVzX3Nsb3RfYWRkcihpbnQgc2xvdCkKK3sKKwlyZXR1cm4gKHZvaWQgKikoMHhGMDAwMDAwMHwoc2xvdDw8MjQpKTsKK30KKworI2VuZGlmIC8qIExJTlVYX05VQlVTX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9udnJhbS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L252cmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJhYTEwZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9udnJhbS5oCkBAIC0wLDAgKzEsMTYgQEAKKyNpZm5kZWYgX0xJTlVYX05WUkFNX0gKKyNkZWZpbmUgX0xJTlVYX05WUkFNX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKy8qIC9kZXYvbnZyYW0gaW9jdGxzICovCisjZGVmaW5lIE5WUkFNX0lOSVQJX0lPKCdwJywgMHg0MCkgLyogaW5pdGlhbGl6ZSBOVlJBTSBhbmQgc2V0IGNoZWNrc3VtICovCisjZGVmaW5lIE5WUkFNX1NFVENLUwlfSU8oJ3AnLCAweDQxKSAvKiByZWNhbGN1bGF0ZSBjaGVja3N1bSAqLworCisvKiBmb3IgYWxsIGN1cnJlbnQgc3lzdGVtcywgdGhpcyBpcyB3aGVyZSBOVlJBTSBzdGFydHMgKi8KKyNkZWZpbmUgTlZSQU1fRklSU1RfQllURSAgICAxNAorLyogYWxsIHRoZXNlIGZ1bmN0aW9ucyBleHBlY3QgYW4gTlZSQU0gb2Zmc2V0LCBub3QgYW4gYWJzb2x1dGUgKi8KKyNkZWZpbmUgTlZSQU1fT0ZGU0VUKHgpICAgKCh4KS1OVlJBTV9GSVJTVF9CWVRFKQorCisKKyNlbmRpZiAgLyogX0xJTlVYX05WUkFNX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9vbWFwZmIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9vbWFwZmIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzNkNTg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L29tYXBmYi5oCkBAIC0wLDAgKzEsMjIyIEBACisvKgorICogRmlsZTogaW5jbHVkZS9saW51eC9vbWFwZmIuaAorICoKKyAqIEZyYW1lYnVmZmVyIGRyaXZlciBmb3IgVEkgT01BUCBib2FyZHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTm9raWEgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogSW1yZSBEZWFrIDxpbXJlLmRlYWtAbm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19MSU5VWF9PTUFQRkJfSF9fCisjZGVmaW5lIF9fTElOVVhfT01BUEZCX0hfXworCisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIElPQ1RMIGNvbW1hbmRzLiAqLworCisjZGVmaW5lIE9NQVBfSU9XKG51bSwgZHR5cGUpCV9JT1coJ08nLCBudW0sIGR0eXBlKQorI2RlZmluZSBPTUFQX0lPUihudW0sIGR0eXBlKQlfSU9SKCdPJywgbnVtLCBkdHlwZSkKKyNkZWZpbmUgT01BUF9JT1dSKG51bSwgZHR5cGUpCV9JT1dSKCdPJywgbnVtLCBkdHlwZSkKKyNkZWZpbmUgT01BUF9JTyhudW0pCQlfSU8oJ08nLCBudW0pCisKKyNkZWZpbmUgT01BUEZCX01JUlJPUgkJT01BUF9JT1coMzEsIGludCkKKyNkZWZpbmUgT01BUEZCX1NZTkNfR0ZYCQlPTUFQX0lPKDM3KQorI2RlZmluZSBPTUFQRkJfVlNZTkMJCU9NQVBfSU8oMzgpCisjZGVmaW5lIE9NQVBGQl9TRVRfVVBEQVRFX01PREUJT01BUF9JT1coNDAsIGludCkKKyNkZWZpbmUgT01BUEZCX0dFVF9DQVBTCQlPTUFQX0lPUig0Miwgc3RydWN0IG9tYXBmYl9jYXBzKQorI2RlZmluZSBPTUFQRkJfR0VUX1VQREFURV9NT0RFCU9NQVBfSU9XKDQzLCBpbnQpCisjZGVmaW5lIE9NQVBGQl9MQ0RfVEVTVAkJT01BUF9JT1coNDUsIGludCkKKyNkZWZpbmUgT01BUEZCX0NUUkxfVEVTVAlPTUFQX0lPVyg0NiwgaW50KQorI2RlZmluZSBPTUFQRkJfVVBEQVRFX1dJTkRPV19PTEQgT01BUF9JT1coNDcsIHN0cnVjdCBvbWFwZmJfdXBkYXRlX3dpbmRvd19vbGQpCisjZGVmaW5lIE9NQVBGQl9TRVRfQ09MT1JfS0VZCU9NQVBfSU9XKDUwLCBzdHJ1Y3Qgb21hcGZiX2NvbG9yX2tleSkKKyNkZWZpbmUgT01BUEZCX0dFVF9DT0xPUl9LRVkJT01BUF9JT1coNTEsIHN0cnVjdCBvbWFwZmJfY29sb3Jfa2V5KQorI2RlZmluZSBPTUFQRkJfU0VUVVBfUExBTkUJT01BUF9JT1coNTIsIHN0cnVjdCBvbWFwZmJfcGxhbmVfaW5mbykKKyNkZWZpbmUgT01BUEZCX1FVRVJZX1BMQU5FCU9NQVBfSU9XKDUzLCBzdHJ1Y3Qgb21hcGZiX3BsYW5lX2luZm8pCisjZGVmaW5lIE9NQVBGQl9VUERBVEVfV0lORE9XCU9NQVBfSU9XKDU0LCBzdHJ1Y3Qgb21hcGZiX3VwZGF0ZV93aW5kb3cpCisjZGVmaW5lIE9NQVBGQl9TRVRVUF9NRU0JT01BUF9JT1coNTUsIHN0cnVjdCBvbWFwZmJfbWVtX2luZm8pCisjZGVmaW5lIE9NQVBGQl9RVUVSWV9NRU0JT01BUF9JT1coNTYsIHN0cnVjdCBvbWFwZmJfbWVtX2luZm8pCisjZGVmaW5lIE9NQVBGQl9XQUlURk9SVlNZTkMJT01BUF9JTyg1NykKKyNkZWZpbmUgT01BUEZCX01FTU9SWV9SRUFECU9NQVBfSU9SKDU4LCBzdHJ1Y3Qgb21hcGZiX21lbW9yeV9yZWFkKQorI2RlZmluZSBPTUFQRkJfR0VUX09WRVJMQVlfQ09MT1JNT0RFIE9NQVBfSU9SKDU5LCBzdHJ1Y3Qgb21hcGZiX292bF9jb2xvcm1vZGUpCisjZGVmaW5lIE9NQVBGQl9XQUlURk9SR08JT01BUF9JTyg2MCkKKyNkZWZpbmUgT01BUEZCX0dFVF9WUkFNX0lORk8JT01BUF9JT1IoNjEsIHN0cnVjdCBvbWFwZmJfdnJhbV9pbmZvKQorI2RlZmluZSBPTUFQRkJfU0VUX1RFQVJTWU5DCU9NQVBfSU9XKDYyLCBzdHJ1Y3Qgb21hcGZiX3RlYXJzeW5jX2luZm8pCisjZGVmaW5lIE9NQVBGQl9HRVRfRElTUExBWV9JTkZPCU9NQVBfSU9SKDYzLCBzdHJ1Y3Qgb21hcGZiX2Rpc3BsYXlfaW5mbykKKworI2RlZmluZSBPTUFQRkJfQ0FQU19HRU5FUklDX01BU0sJMHgwMDAwMGZmZgorI2RlZmluZSBPTUFQRkJfQ0FQU19MQ0RDX01BU0sJCTB4MDBmZmYwMDAKKyNkZWZpbmUgT01BUEZCX0NBUFNfUEFORUxfTUFTSwkJMHhmZjAwMDAwMAorCisjZGVmaW5lIE9NQVBGQl9DQVBTX01BTlVBTF9VUERBVEUJMHgwMDAwMTAwMAorI2RlZmluZSBPTUFQRkJfQ0FQU19URUFSU1lOQwkJMHgwMDAwMjAwMAorI2RlZmluZSBPTUFQRkJfQ0FQU19QTEFORV9SRUxPQ0FURV9NRU0JMHgwMDAwNDAwMAorI2RlZmluZSBPTUFQRkJfQ0FQU19QTEFORV9TQ0FMRQkJMHgwMDAwODAwMAorI2RlZmluZSBPTUFQRkJfQ0FQU19XSU5ET1dfUElYRUxfRE9VQkxFCTB4MDAwMTAwMDAKKyNkZWZpbmUgT01BUEZCX0NBUFNfV0lORE9XX1NDQUxFCTB4MDAwMjAwMDAKKyNkZWZpbmUgT01BUEZCX0NBUFNfV0lORE9XX09WRVJMQVkJMHgwMDA0MDAwMAorI2RlZmluZSBPTUFQRkJfQ0FQU19XSU5ET1dfUk9UQVRFCTB4MDAwODAwMDAKKyNkZWZpbmUgT01BUEZCX0NBUFNfU0VUX0JBQ0tMSUdIVAkweDAxMDAwMDAwCisKKy8qIFZhbHVlcyBmcm9tIERTUCBtdXN0IG1hcCB0byBsb3dlciAxNi1iaXRzICovCisjZGVmaW5lIE9NQVBGQl9GT1JNQVRfTUFTSwkJMHgwMGZmCisjZGVmaW5lIE9NQVBGQl9GT1JNQVRfRkxBR19ET1VCTEUJMHgwMTAwCisjZGVmaW5lIE9NQVBGQl9GT1JNQVRfRkxBR19URUFSU1lOQwkweDAyMDAKKyNkZWZpbmUgT01BUEZCX0ZPUk1BVF9GTEFHX0ZPUkNFX1ZTWU5DCTB4MDQwMAorI2RlZmluZSBPTUFQRkJfRk9STUFUX0ZMQUdfRU5BQkxFX09WRVJMQVkJMHgwODAwCisjZGVmaW5lIE9NQVBGQl9GT1JNQVRfRkxBR19ESVNBQkxFX09WRVJMQVkJMHgxMDAwCisKKyNkZWZpbmUgT01BUEZCX01FTVRZUEVfU0RSQU0JCTAKKyNkZWZpbmUgT01BUEZCX01FTVRZUEVfU1JBTQkJMQorI2RlZmluZSBPTUFQRkJfTUVNVFlQRV9NQVgJCTEKKworI2RlZmluZSBPTUFQRkJfTUVNX0lEWF9FTkFCTEVECTB4ODAKKyNkZWZpbmUgT01BUEZCX01FTV9JRFhfTUFTSwkweDdmCisKK2VudW0gb21hcGZiX2NvbG9yX2Zvcm1hdCB7CisJT01BUEZCX0NPTE9SX1JHQjU2NSA9IDAsCisJT01BUEZCX0NPTE9SX1lVVjQyMiwKKwlPTUFQRkJfQ09MT1JfWVVWNDIwLAorCU9NQVBGQl9DT0xPUl9DTFVUXzhCUFAsCisJT01BUEZCX0NPTE9SX0NMVVRfNEJQUCwKKwlPTUFQRkJfQ09MT1JfQ0xVVF8yQlBQLAorCU9NQVBGQl9DT0xPUl9DTFVUXzFCUFAsCisJT01BUEZCX0NPTE9SX1JHQjQ0NCwKKwlPTUFQRkJfQ09MT1JfWVVZNDIyLAorCisJT01BUEZCX0NPTE9SX0FSR0IxNiwKKwlPTUFQRkJfQ09MT1JfUkdCMjRVLAkvKiBSR0IyNCwgMzItYml0IGNvbnRhaW5lciAqLworCU9NQVBGQl9DT0xPUl9SR0IyNFAsCS8qIFJHQjI0LCAyNC1iaXQgY29udGFpbmVyICovCisJT01BUEZCX0NPTE9SX0FSR0IzMiwKKwlPTUFQRkJfQ09MT1JfUkdCQTMyLAorCU9NQVBGQl9DT0xPUl9SR0JYMzIsCit9OworCitzdHJ1Y3Qgb21hcGZiX3VwZGF0ZV93aW5kb3cgeworCV9fdTMyIHgsIHk7CisJX191MzIgd2lkdGgsIGhlaWdodDsKKwlfX3UzMiBmb3JtYXQ7CisJX191MzIgb3V0X3gsIG91dF95OworCV9fdTMyIG91dF93aWR0aCwgb3V0X2hlaWdodDsKKwlfX3UzMiByZXNlcnZlZFs4XTsKK307CisKK3N0cnVjdCBvbWFwZmJfdXBkYXRlX3dpbmRvd19vbGQgeworCV9fdTMyIHgsIHk7CisJX191MzIgd2lkdGgsIGhlaWdodDsKKwlfX3UzMiBmb3JtYXQ7Cit9OworCitlbnVtIG9tYXBmYl9wbGFuZSB7CisJT01BUEZCX1BMQU5FX0dGWCA9IDAsCisJT01BUEZCX1BMQU5FX1ZJRDEsCisJT01BUEZCX1BMQU5FX1ZJRDIsCit9OworCitlbnVtIG9tYXBmYl9jaGFubmVsX291dCB7CisJT01BUEZCX0NIQU5ORUxfT1VUX0xDRCA9IDAsCisJT01BUEZCX0NIQU5ORUxfT1VUX0RJR0lULAorfTsKKworc3RydWN0IG9tYXBmYl9wbGFuZV9pbmZvIHsKKwlfX3UzMiBwb3NfeDsKKwlfX3UzMiBwb3NfeTsKKwlfX3U4ICBlbmFibGVkOworCV9fdTggIGNoYW5uZWxfb3V0OworCV9fdTggIG1pcnJvcjsKKwlfX3U4ICBtZW1faWR4OworCV9fdTMyIG91dF93aWR0aDsKKwlfX3UzMiBvdXRfaGVpZ2h0OworCV9fdTMyIHJlc2VydmVkMlsxMl07Cit9OworCitzdHJ1Y3Qgb21hcGZiX21lbV9pbmZvIHsKKwlfX3UzMiBzaXplOworCV9fdTggIHR5cGU7CisJX191OCAgcmVzZXJ2ZWRbM107Cit9OworCitzdHJ1Y3Qgb21hcGZiX2NhcHMgeworCV9fdTMyIGN0cmw7CisJX191MzIgcGxhbmVfY29sb3I7CisJX191MzIgd25kX2NvbG9yOworfTsKKworZW51bSBvbWFwZmJfY29sb3Jfa2V5X3R5cGUgeworCU9NQVBGQl9DT0xPUl9LRVlfRElTQUJMRUQgPSAwLAorCU9NQVBGQl9DT0xPUl9LRVlfR0ZYX0RTVCwKKwlPTUFQRkJfQ09MT1JfS0VZX1ZJRF9TUkMsCit9OworCitzdHJ1Y3Qgb21hcGZiX2NvbG9yX2tleSB7CisJX191OCAgY2hhbm5lbF9vdXQ7CisJX191MzIgYmFja2dyb3VuZDsKKwlfX3UzMiB0cmFuc19rZXk7CisJX191OCAga2V5X3R5cGU7Cit9OworCitlbnVtIG9tYXBmYl91cGRhdGVfbW9kZSB7CisJT01BUEZCX1VQREFURV9ESVNBQkxFRCA9IDAsCisJT01BUEZCX0FVVE9fVVBEQVRFLAorCU9NQVBGQl9NQU5VQUxfVVBEQVRFCit9OworCitzdHJ1Y3Qgb21hcGZiX21lbW9yeV9yZWFkIHsKKwlfX3UxNiB4OworCV9fdTE2IHk7CisJX191MTYgdzsKKwlfX3UxNiBoOworCXNpemVfdCBidWZmZXJfc2l6ZTsKKwl2b2lkICpidWZmZXI7Cit9OworCitzdHJ1Y3Qgb21hcGZiX292bF9jb2xvcm1vZGUgeworCV9fdTggb3ZlcmxheV9pZHg7CisJX191OCBtb2RlX2lkeDsKKwlfX3UzMiBiaXRzX3Blcl9waXhlbDsKKwlfX3UzMiBub25zdGQ7CisJc3RydWN0IGZiX2JpdGZpZWxkIHJlZDsKKwlzdHJ1Y3QgZmJfYml0ZmllbGQgZ3JlZW47CisJc3RydWN0IGZiX2JpdGZpZWxkIGJsdWU7CisJc3RydWN0IGZiX2JpdGZpZWxkIHRyYW5zcDsKK307CisKK3N0cnVjdCBvbWFwZmJfdnJhbV9pbmZvIHsKKwlfX3UzMiB0b3RhbDsKKwlfX3UzMiBmcmVlOworCV9fdTMyIGxhcmdlc3RfZnJlZV9ibG9jazsKKwlfX3UzMiByZXNlcnZlZFs1XTsKK307CisKK3N0cnVjdCBvbWFwZmJfdGVhcnN5bmNfaW5mbyB7CisJX191OCBlbmFibGVkOworCV9fdTggcmVzZXJ2ZWQxWzNdOworCV9fdTE2IGxpbmU7CisJX191MTYgcmVzZXJ2ZWQyOworfTsKKworc3RydWN0IG9tYXBmYl9kaXNwbGF5X2luZm8geworCV9fdTE2IHhyZXM7CisJX191MTYgeXJlczsKKwlfX3UzMiB3aWR0aDsJLyogcGh5cyB3aWR0aCBvZiB0aGUgZGlzcGxheSBpbiBtaWNyb21ldGVycyAqLworCV9fdTMyIGhlaWdodDsJLyogcGh5cyBoZWlnaHQgb2YgdGhlIGRpc3BsYXkgaW4gbWljcm9tZXRlcnMgKi8KKwlfX3UzMiByZXNlcnZlZFs1XTsKK307CisKKworI2VuZGlmIC8qIF9fT01BUEZCX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9vb20uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9vb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTZkZGQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L29vbS5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgX19JTkNMVURFX0xJTlVYX09PTV9ICisjZGVmaW5lIF9fSU5DTFVERV9MSU5VWF9PT01fSAorCisvKgorICogL3Byb2MvPHBpZD4vb29tX2FkaiBpcyBkZXByZWNhdGVkLCBzZWUKKyAqIERvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dC4KKyAqCisgKiAvcHJvYy88cGlkPi9vb21fYWRqIHNldCB0byAtMTcgcHJvdGVjdHMgZnJvbSB0aGUgb29tLWtpbGxlcgorICovCisjZGVmaW5lIE9PTV9ESVNBQkxFICgtMTcpCisvKiBpbmNsdXNpdmUgKi8KKyNkZWZpbmUgT09NX0FESlVTVF9NSU4gKC0xNikKKyNkZWZpbmUgT09NX0FESlVTVF9NQVggMTUKKworLyoKKyAqIC9wcm9jLzxwaWQ+L29vbV9zY29yZV9hZGogc2V0IHRvIE9PTV9TQ09SRV9BREpfTUlOIGRpc2FibGVzIG9vbSBraWxsaW5nIGZvcgorICogcGlkLgorICovCisjZGVmaW5lIE9PTV9TQ09SRV9BREpfTUlOCSgtMTAwMCkKKyNkZWZpbmUgT09NX1NDT1JFX0FESl9NQVgJMTAwMAorCisjZW5kaWYgLyogX0lOQ0xVREVfTElOVVhfT09NX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wYXJhbS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3BhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkyZTkyZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wYXJhbS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfTElOVVhfUEFSQU1fSAorI2RlZmluZSBfTElOVVhfUEFSQU1fSAorCisjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3BhcnBvcnQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wYXJwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNkNDQ0MgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wYXJwb3J0LmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIEFueSBwYXJ0IG9mIHRoaXMgcHJvZ3JhbSBtYXkgYmUgdXNlZCBpbiBkb2N1bWVudHMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4xIG9yIGFueSBsYXRlciB2ZXJzaW9uCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9QQVJQT1JUX0hfCisjZGVmaW5lIF9QQVJQT1JUX0hfCisKKy8qIFN0YXJ0IG9mZiB3aXRoIHVzZXItdmlzaWJsZSBjb25zdGFudHMgKi8KKworLyogTWF4aW11bSBvZiAxNiBwb3J0cyBwZXIgbWFjaGluZSAqLworI2RlZmluZSBQQVJQT1JUX01BWCAgMTYKKworLyogTWFnaWMgbnVtYmVycyAqLworI2RlZmluZSBQQVJQT1JUX0lSUV9OT05FICAtMQorI2RlZmluZSBQQVJQT1JUX0RNQV9OT05FICAtMQorI2RlZmluZSBQQVJQT1JUX0lSUV9BVVRPICAtMgorI2RlZmluZSBQQVJQT1JUX0RNQV9BVVRPICAtMgorI2RlZmluZSBQQVJQT1JUX0RNQV9OT0ZJRk8gLTMKKyNkZWZpbmUgUEFSUE9SVF9ESVNBQkxFICAgLTIKKyNkZWZpbmUgUEFSUE9SVF9JUlFfUFJPQkVPTkxZIC0zCisjZGVmaW5lIFBBUlBPUlRfSU9ISV9BVVRPIC0xCisKKyNkZWZpbmUgUEFSUE9SVF9DT05UUk9MX1NUUk9CRSAgICAweDEKKyNkZWZpbmUgUEFSUE9SVF9DT05UUk9MX0FVVE9GRCAgICAweDIKKyNkZWZpbmUgUEFSUE9SVF9DT05UUk9MX0lOSVQgICAgICAweDQKKyNkZWZpbmUgUEFSUE9SVF9DT05UUk9MX1NFTEVDVCAgICAweDgKKworI2RlZmluZSBQQVJQT1JUX1NUQVRVU19FUlJPUiAgICAgIDB4OAorI2RlZmluZSBQQVJQT1JUX1NUQVRVU19TRUxFQ1QgICAgIDB4MTAKKyNkZWZpbmUgUEFSUE9SVF9TVEFUVVNfUEFQRVJPVVQgICAweDIwCisjZGVmaW5lIFBBUlBPUlRfU1RBVFVTX0FDSyAgICAgICAgMHg0MAorI2RlZmluZSBQQVJQT1JUX1NUQVRVU19CVVNZICAgICAgIDB4ODAKKworLyogVHlwZSBjbGFzc2VzIGZvciBQbHVnLWFuZC1QbGF5IHByb2JlLiAgKi8KK3R5cGVkZWYgZW51bSB7CisJUEFSUE9SVF9DTEFTU19MRUdBQ1kgPSAwLCAgICAgICAvKiBOb24tSUVFRTEyODQgZGV2aWNlICovCisJUEFSUE9SVF9DTEFTU19QUklOVEVSLAorCVBBUlBPUlRfQ0xBU1NfTU9ERU0sCisJUEFSUE9SVF9DTEFTU19ORVQsCisJUEFSUE9SVF9DTEFTU19IREMsICAgICAgICAgICAgICAvKiBIYXJkIGRpc2sgY29udHJvbGxlciAqLworCVBBUlBPUlRfQ0xBU1NfUENNQ0lBLAorCVBBUlBPUlRfQ0xBU1NfTUVESUEsICAgICAgICAgICAgLyogTXVsdGltZWRpYSBkZXZpY2UgKi8KKwlQQVJQT1JUX0NMQVNTX0ZEQywgICAgICAgICAgICAgIC8qIEZsb3BweSBkaXNrIGNvbnRyb2xsZXIgKi8KKwlQQVJQT1JUX0NMQVNTX1BPUlRTLAorCVBBUlBPUlRfQ0xBU1NfU0NBTk5FUiwKKwlQQVJQT1JUX0NMQVNTX0RJR0NBTSwKKwlQQVJQT1JUX0NMQVNTX09USEVSLCAgICAgICAgICAgIC8qIEFueXRoaW5nIGVsc2UgKi8KKwlQQVJQT1JUX0NMQVNTX1VOU1BFQywgICAgICAgICAgIC8qIE5vIENMUyBmaWVsZCBpbiBJRCAqLworCVBBUlBPUlRfQ0xBU1NfU0NTSUFEQVBURVIKK30gcGFycG9ydF9kZXZpY2VfY2xhc3M7CisKKy8qIFRoZSAibW9kZXMiIGVudHJ5IGluIHBhcnBvcnQgaXMgYSBiaXQgZmllbGQgcmVwcmVzZW50aW5nIHRoZQorICAgY2FwYWJpbGl0aWVzIG9mIHRoZSBoYXJkd2FyZS4gKi8KKyNkZWZpbmUgUEFSUE9SVF9NT0RFX1BDU1BQCSgxPDwwKSAvKiBJQk0gUEMgcmVnaXN0ZXJzIGF2YWlsYWJsZS4gKi8KKyNkZWZpbmUgUEFSUE9SVF9NT0RFX1RSSVNUQVRFCSgxPDwxKSAvKiBDYW4gdHJpc3RhdGUuICovCisjZGVmaW5lIFBBUlBPUlRfTU9ERV9FUFAJKDE8PDIpIC8qIEhhcmR3YXJlIEVQUC4gKi8KKyNkZWZpbmUgUEFSUE9SVF9NT0RFX0VDUAkoMTw8MykgLyogSGFyZHdhcmUgRUNQLiAqLworI2RlZmluZSBQQVJQT1JUX01PREVfQ09NUEFUCSgxPDw0KSAvKiBIYXJkd2FyZSAncHJpbnRlciBwcm90b2NvbCcuICovCisjZGVmaW5lIFBBUlBPUlRfTU9ERV9ETUEJKDE8PDUpIC8qIEhhcmR3YXJlIGNhbiBETUEuICovCisjZGVmaW5lIFBBUlBPUlRfTU9ERV9TQUZFSU5JTlQJKDE8PDYpIC8qIFNQUCByZWdpc3RlcnMgYWNjZXNzaWJsZSBpbiBJUlEuICovCisKKy8qIElFRUUxMjg0IG1vZGVzOiAKKyAgIE5pYmJsZSBtb2RlLCBieXRlIG1vZGUsIEVDUCwgRUNQUkxFIGFuZCBFUFAgYXJlIHRoZWlyIG93bgorICAgJ2V4dGVuc2liaWxpdHkgcmVxdWVzdCcgdmFsdWVzLiAgT3RoZXJzIGFyZSBzcGVjaWFsLgorICAgJ1JlYWwnIEVDUCBtb2RlcyBtdXN0IGhhdmUgdGhlIElFRUUxMjg0X01PREVfRUNQIGJpdCBzZXQuICAqLworI2RlZmluZSBJRUVFMTI4NF9NT0RFX05JQkJMRSAgICAgICAgICAgICAwCisjZGVmaW5lIElFRUUxMjg0X01PREVfQllURSAgICAgICAgICAgICAgKDE8PDApCisjZGVmaW5lIElFRUUxMjg0X01PREVfQ09NUEFUICAgICAgICAgICAgKDE8PDgpCisjZGVmaW5lIElFRUUxMjg0X01PREVfQkVDUCAgICAgICAgICAgICAgKDE8PDkpIC8qIEJvdW5kZWQgRUNQIG1vZGUgKi8KKyNkZWZpbmUgSUVFRTEyODRfTU9ERV9FQ1AgICAgICAgICAgICAgICAoMTw8NCkKKyNkZWZpbmUgSUVFRTEyODRfTU9ERV9FQ1BSTEUgICAgICAgICAgICAoSUVFRTEyODRfTU9ERV9FQ1AgfCAoMTw8NSkpCisjZGVmaW5lIElFRUUxMjg0X01PREVfRUNQU1dFICAgICAgICAgICAgKDE8PDEwKSAvKiBTb2Z0d2FyZS1lbXVsYXRlZCAqLworI2RlZmluZSBJRUVFMTI4NF9NT0RFX0VQUCAgICAgICAgICAgICAgICgxPDw2KQorI2RlZmluZSBJRUVFMTI4NF9NT0RFX0VQUFNMICAgICAgICAgICAgICgxPDwxMSkgLyogRVBQIDEuNyAqLworI2RlZmluZSBJRUVFMTI4NF9NT0RFX0VQUFNXRSAgICAgICAgICAgICgxPDwxMikgLyogU29mdHdhcmUtZW11bGF0ZWQgKi8KKyNkZWZpbmUgSUVFRTEyODRfREVWSUNFSUQgICAgICAgICAgICAgICAoMTw8MikgIC8qIFRoaXMgaXMgYSBmbGFnICovCisjZGVmaW5lIElFRUUxMjg0X0VYVF9MSU5LICAgICAgICAgICAgICAgKDE8PDE0KSAvKiBUaGlzIGZsYWcgY2F1c2VzIHRoZQorCQkJCQkJICogZXh0ZW5zaWJpbGl0eSBsaW5rIHRvCisJCQkJCQkgKiBiZSByZXF1ZXN0ZWQsIHVzaW5nCisJCQkJCQkgKiBiaXRzIDAtNi4gKi8KKworLyogRm9yIHRoZSBiZW5lZml0IG9mIHBhcnBvcnRfcmVhZC93cml0ZSwgeW91IGNhbiB1c2UgdGhlc2Ugd2l0aAorICogcGFycG9ydF9uZWdvdGlhdGUgdG8gdXNlIGFkZHJlc3Mgb3BlcmF0aW9ucy4gIFRoZXkgaGF2ZSBubyBlZmZlY3QKKyAqIG90aGVyIHRoYW4gdG8gbWFrZSBwYXJwb3J0X3JlYWQvd3JpdGUgdXNlIGFkZHJlc3MgdHJhbnNmZXJzLiAqLworI2RlZmluZSBJRUVFMTI4NF9BRERSCQkJKDE8PDEzKQkvKiBUaGlzIGlzIGEgZmxhZyAqLworI2RlZmluZSBJRUVFMTI4NF9EQVRBCQkJIDAJLyogU28gaXMgdGhpcyAqLworCisvKiBGbGFncyBmb3IgYmxvY2sgdHJhbnNmZXIgb3BlcmF0aW9ucy4gKi8KKyNkZWZpbmUgUEFSUE9SVF9FUFBfRkFTVAkJKDE8PDApIC8qIFVucmVsaWFibGUgY291bnRzLiAqLworI2RlZmluZSBQQVJQT1JUX1c5MTI4NFBJQwkJKDE8PDEpIC8qIGhhdmUgYSBXYXJwOSB3OTEyODRwaWMgaW4gdGhlIGRldmljZSAqLworCisvKiBUaGUgcmVzdCBpcyBmb3IgdGhlIGtlcm5lbCBvbmx5ICovCisjZW5kaWYgLyogX1BBUlBPUlRfSF8gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wYXRjaGtleS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3BhdGNoa2V5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM4MTBkZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wYXRjaGtleS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiA8bGludXgvcGF0Y2hrZXkuaD4gLS0gZGVmaW5pdGlvbiBvZiBfUEFUQ0hLRVkgbWFjcm8KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgU3R1YXJ0IEJyYWR5CisgKgorICogVGhpcyBleGlzdHMgYmVjYXVzZSBhd2Vfdm9pY2UuaCBkZWZpbmVkIGl0cyBvd24gX1BBVENIS0VZIGFuZCBpdCB3YXNuJ3QKKyAqIGNsZWFyIHdoZXRoZXIgcmVtb3ZpbmcgdGhpcyB3b3VsZCBicmVhayBhbnl0aGluZyBpbiB1c2Vyc3BhY2UuCisgKgorICogRG8gbm90IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5LiAgUGxlYXNlIHVzZSA8c3lzL3NvdW5kY2FyZC5oPiBpbnN0ZWFkLgorICogRm9yIGtlcm5lbCBjb2RlLCB1c2UgPGxpbnV4L3NvdW5kY2FyZC5oPgorICovCisKKyNpZm5kZWYgX0xJTlVYX1BBVENIS0VZX0hfSU5ESVJFQ1QKKyNlcnJvciAicGF0Y2hrZXkuaCBpbmNsdWRlZCBkaXJlY3RseSIKKyNlbmRpZgorCisjaWZuZGVmIF9MSU5VWF9QQVRDSEtFWV9ICisjZGVmaW5lIF9MSU5VWF9QQVRDSEtFWV9ICisKKy8qIEVuZGlhbiBtYWNyb3MuICovCisjICBpbmNsdWRlIDxlbmRpYW4uaD4KKworI2lmICAgZGVmaW5lZChfX0JZVEVfT1JERVIpCisjICBpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCisjICAgIGRlZmluZSBfUEFUQ0hLRVkoaWQpICgweGZkMDB8aWQpCisjICBlbGlmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKyMgICAgZGVmaW5lIF9QQVRDSEtFWShpZCkgKChpZDw8OCl8MHgwMGZkKQorIyAgZWxzZQorIyAgICBlcnJvciAiY291bGQgbm90IGRldGVybWluZSBieXRlIG9yZGVyIgorIyAgZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogX0xJTlVYX1BBVENIS0VZX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wY2kuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWJiNWM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKglwY2kuaAorICoKKyAqCVBDSSBkZWZpbmVzIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzCisgKglDb3B5cmlnaHQgMTk5NCwgRHJldyBFY2toYXJkdAorICoJQ29weXJpZ2h0IDE5OTctLTE5OTkgTWFydGluIE1hcmVzIDxtakB1Y3cuY3o+CisgKgorICoJRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBjb25zdWx0IHRoZSBmb2xsb3dpbmcgbWFudWFscyAobG9vayBhdAorICoJaHR0cDovL3d3dy5wY2lzaWcuY29tLyBmb3IgaG93IHRvIGdldCB0aGVtKToKKyAqCisgKglQQ0kgQklPUyBTcGVjaWZpY2F0aW9uCisgKglQQ0kgTG9jYWwgQnVzIFNwZWNpZmljYXRpb24KKyAqCVBDSSB0byBQQ0kgQnJpZGdlIFNwZWNpZmljYXRpb24KKyAqCVBDSSBTeXN0ZW0gRGVzaWduIEd1aWRlCisgKi8KKworI2lmbmRlZiBMSU5VWF9QQ0lfSAorI2RlZmluZSBMSU5VWF9QQ0lfSAorCisjaW5jbHVkZSA8bGludXgvcGNpX3JlZ3MuaD4JLyogVGhlIHBjaSByZWdpc3RlciBkZWZpbmVzICovCisKKy8qCisgKiBUaGUgUENJIGludGVyZmFjZSB0cmVhdHMgbXVsdGktZnVuY3Rpb24gZGV2aWNlcyBhcyBpbmRlcGVuZGVudAorICogZGV2aWNlcy4gIFRoZSBzbG90L2Z1bmN0aW9uIGFkZHJlc3Mgb2YgZWFjaCBkZXZpY2UgaXMgZW5jb2RlZAorICogaW4gYSBzaW5nbGUgYnl0ZSBhcyBmb2xsb3dzOgorICoKKyAqCTc6MyA9IHNsb3QKKyAqCTI6MCA9IGZ1bmN0aW9uCisgKi8KKyNkZWZpbmUgUENJX0RFVkZOKHNsb3QsIGZ1bmMpCSgoKChzbG90KSAmIDB4MWYpIDw8IDMpIHwgKChmdW5jKSAmIDB4MDcpKQorI2RlZmluZSBQQ0lfU0xPVChkZXZmbikJCSgoKGRldmZuKSA+PiAzKSAmIDB4MWYpCisjZGVmaW5lIFBDSV9GVU5DKGRldmZuKQkJKChkZXZmbikgJiAweDA3KQorCisvKiBJb2N0bHMgZm9yIC9wcm9jL2J1cy9wY2kvWC9ZIG5vZGVzLiAqLworI2RlZmluZSBQQ0lJT0NfQkFTRQkJKCdQJyA8PCAyNCB8ICdDJyA8PCAxNiB8ICdJJyA8PCA4KQorI2RlZmluZSBQQ0lJT0NfQ09OVFJPTExFUgkoUENJSU9DX0JBU0UgfCAweDAwKQkvKiBHZXQgY29udHJvbGxlciBmb3IgUENJIGRldmljZS4gKi8KKyNkZWZpbmUgUENJSU9DX01NQVBfSVNfSU8JKFBDSUlPQ19CQVNFIHwgMHgwMSkJLyogU2V0IG1tYXAgc3RhdGUgdG8gSS9PIHNwYWNlLiAqLworI2RlZmluZSBQQ0lJT0NfTU1BUF9JU19NRU0JKFBDSUlPQ19CQVNFIHwgMHgwMikJLyogU2V0IG1tYXAgc3RhdGUgdG8gTUVNIHNwYWNlLiAqLworI2RlZmluZSBQQ0lJT0NfV1JJVEVfQ09NQklORQkoUENJSU9DX0JBU0UgfCAweDAzKQkvKiBFbmFibGUvZGlzYWJsZSB3cml0ZS1jb21iaW5pbmcuICovCisKKyNlbmRpZiAvKiBMSU5VWF9QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3BjaV9yZWdzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcGNpX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjgzMDc2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3BjaV9yZWdzLmgKQEAgLTAsMCArMSw2ODggQEAKKy8qCisgKglwY2lfcmVncy5oCisgKgorICoJUENJIHN0YW5kYXJkIGRlZmluZXMKKyAqCUNvcHlyaWdodCAxOTk0LCBEcmV3IEVja2hhcmR0CisgKglDb3B5cmlnaHQgMTk5Ny0tMTk5OSBNYXJ0aW4gTWFyZXMgPG1qQHVjdy5jej4KKyAqCisgKglGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnN1bHQgdGhlIGZvbGxvd2luZyBtYW51YWxzIChsb29rIGF0CisgKglodHRwOi8vd3d3LnBjaXNpZy5jb20vIGZvciBob3cgdG8gZ2V0IHRoZW0pOgorICoKKyAqCVBDSSBCSU9TIFNwZWNpZmljYXRpb24KKyAqCVBDSSBMb2NhbCBCdXMgU3BlY2lmaWNhdGlvbgorICoJUENJIHRvIFBDSSBCcmlkZ2UgU3BlY2lmaWNhdGlvbgorICoJUENJIFN5c3RlbSBEZXNpZ24gR3VpZGUKKyAqCisgKiAJRm9yIGh5cGVydHJhbnNwb3J0IGluZm9ybWF0aW9uLCBwbGVhc2UgY29uc3VsdCB0aGUgZm9sbG93aW5nIG1hbnVhbHMKKyAqIAlmcm9tIGh0dHA6Ly93d3cuaHlwZXJ0cmFuc3BvcnQub3JnCisgKgorICoJVGhlIEh5cGVydHJhbnNwb3J0IEkvTyBMaW5rIFNwZWNpZmljYXRpb24KKyAqLworCisjaWZuZGVmIExJTlVYX1BDSV9SRUdTX0gKKyNkZWZpbmUgTElOVVhfUENJX1JFR1NfSAorCisvKgorICogVW5kZXIgUENJLCBlYWNoIGRldmljZSBoYXMgMjU2IGJ5dGVzIG9mIGNvbmZpZ3VyYXRpb24gYWRkcmVzcyBzcGFjZSwKKyAqIG9mIHdoaWNoIHRoZSBmaXJzdCA2NCBieXRlcyBhcmUgc3RhbmRhcmRpemVkIGFzIGZvbGxvd3M6CisgKi8KKyNkZWZpbmUgUENJX1ZFTkRPUl9JRAkJMHgwMAkvKiAxNiBiaXRzICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSUQJCTB4MDIJLyogMTYgYml0cyAqLworI2RlZmluZSBQQ0lfQ09NTUFORAkJMHgwNAkvKiAxNiBiaXRzICovCisjZGVmaW5lICBQQ0lfQ09NTUFORF9JTwkJMHgxCS8qIEVuYWJsZSByZXNwb25zZSBpbiBJL08gc3BhY2UgKi8KKyNkZWZpbmUgIFBDSV9DT01NQU5EX01FTU9SWQkweDIJLyogRW5hYmxlIHJlc3BvbnNlIGluIE1lbW9yeSBzcGFjZSAqLworI2RlZmluZSAgUENJX0NPTU1BTkRfTUFTVEVSCTB4NAkvKiBFbmFibGUgYnVzIG1hc3RlcmluZyAqLworI2RlZmluZSAgUENJX0NPTU1BTkRfU1BFQ0lBTAkweDgJLyogRW5hYmxlIHJlc3BvbnNlIHRvIHNwZWNpYWwgY3ljbGVzICovCisjZGVmaW5lICBQQ0lfQ09NTUFORF9JTlZBTElEQVRFCTB4MTAJLyogVXNlIG1lbW9yeSB3cml0ZSBhbmQgaW52YWxpZGF0ZSAqLworI2RlZmluZSAgUENJX0NPTU1BTkRfVkdBX1BBTEVUVEUgMHgyMAkvKiBFbmFibGUgcGFsZXR0ZSBzbm9vcGluZyAqLworI2RlZmluZSAgUENJX0NPTU1BTkRfUEFSSVRZCTB4NDAJLyogRW5hYmxlIHBhcml0eSBjaGVja2luZyAqLworI2RlZmluZSAgUENJX0NPTU1BTkRfV0FJVCAJMHg4MAkvKiBFbmFibGUgYWRkcmVzcy9kYXRhIHN0ZXBwaW5nICovCisjZGVmaW5lICBQQ0lfQ09NTUFORF9TRVJSCTB4MTAwCS8qIEVuYWJsZSBTRVJSICovCisjZGVmaW5lICBQQ0lfQ09NTUFORF9GQVNUX0JBQ0sJMHgyMDAJLyogRW5hYmxlIGJhY2stdG8tYmFjayB3cml0ZXMgKi8KKyNkZWZpbmUgIFBDSV9DT01NQU5EX0lOVFhfRElTQUJMRSAweDQwMCAvKiBJTlR4IEVtdWxhdGlvbiBEaXNhYmxlICovCisKKyNkZWZpbmUgUENJX1NUQVRVUwkJMHgwNgkvKiAxNiBiaXRzICovCisjZGVmaW5lICBQQ0lfU1RBVFVTX0lOVEVSUlVQVAkweDA4CS8qIEludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgIFBDSV9TVEFUVVNfQ0FQX0xJU1QJMHgxMAkvKiBTdXBwb3J0IENhcGFiaWxpdHkgTGlzdCAqLworI2RlZmluZSAgUENJX1NUQVRVU182Nk1IWgkweDIwCS8qIFN1cHBvcnQgNjYgTWh6IFBDSSAyLjEgYnVzICovCisjZGVmaW5lICBQQ0lfU1RBVFVTX1VERgkJMHg0MAkvKiBTdXBwb3J0IFVzZXIgRGVmaW5hYmxlIEZlYXR1cmVzIFtvYnNvbGV0ZV0gKi8KKyNkZWZpbmUgIFBDSV9TVEFUVVNfRkFTVF9CQUNLCTB4ODAJLyogQWNjZXB0IGZhc3QtYmFjayB0byBiYWNrICovCisjZGVmaW5lICBQQ0lfU1RBVFVTX1BBUklUWQkweDEwMAkvKiBEZXRlY3RlZCBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgIFBDSV9TVEFUVVNfREVWU0VMX01BU0sJMHg2MDAJLyogREVWU0VMIHRpbWluZyAqLworI2RlZmluZSAgUENJX1NUQVRVU19ERVZTRUxfRkFTVAkJMHgwMDAKKyNkZWZpbmUgIFBDSV9TVEFUVVNfREVWU0VMX01FRElVTQkweDIwMAorI2RlZmluZSAgUENJX1NUQVRVU19ERVZTRUxfU0xPVwkJMHg0MDAKKyNkZWZpbmUgIFBDSV9TVEFUVVNfU0lHX1RBUkdFVF9BQk9SVAkweDgwMCAvKiBTZXQgb24gdGFyZ2V0IGFib3J0ICovCisjZGVmaW5lICBQQ0lfU1RBVFVTX1JFQ19UQVJHRVRfQUJPUlQJMHgxMDAwIC8qIE1hc3RlciBhY2sgb2YgIiAqLworI2RlZmluZSAgUENJX1NUQVRVU19SRUNfTUFTVEVSX0FCT1JUCTB4MjAwMCAvKiBTZXQgb24gbWFzdGVyIGFib3J0ICovCisjZGVmaW5lICBQQ0lfU1RBVFVTX1NJR19TWVNURU1fRVJST1IJMHg0MDAwIC8qIFNldCB3aGVuIHdlIGRyaXZlIFNFUlIgKi8KKyNkZWZpbmUgIFBDSV9TVEFUVVNfREVURUNURURfUEFSSVRZCTB4ODAwMCAvKiBTZXQgb24gcGFyaXR5IGVycm9yICovCisKKyNkZWZpbmUgUENJX0NMQVNTX1JFVklTSU9OCTB4MDgJLyogSGlnaCAyNCBiaXRzIGFyZSBjbGFzcywgbG93IDggcmV2aXNpb24gKi8KKyNkZWZpbmUgUENJX1JFVklTSU9OX0lECQkweDA4CS8qIFJldmlzaW9uIElEICovCisjZGVmaW5lIFBDSV9DTEFTU19QUk9HCQkweDA5CS8qIFJlZy4gTGV2ZWwgUHJvZ3JhbW1pbmcgSW50ZXJmYWNlICovCisjZGVmaW5lIFBDSV9DTEFTU19ERVZJQ0UJMHgwYQkvKiBEZXZpY2UgY2xhc3MgKi8KKworI2RlZmluZSBQQ0lfQ0FDSEVfTElORV9TSVpFCTB4MGMJLyogOCBiaXRzICovCisjZGVmaW5lIFBDSV9MQVRFTkNZX1RJTUVSCTB4MGQJLyogOCBiaXRzICovCisjZGVmaW5lIFBDSV9IRUFERVJfVFlQRQkJMHgwZQkvKiA4IGJpdHMgKi8KKyNkZWZpbmUgIFBDSV9IRUFERVJfVFlQRV9OT1JNQUwJCTAKKyNkZWZpbmUgIFBDSV9IRUFERVJfVFlQRV9CUklER0UJCTEKKyNkZWZpbmUgIFBDSV9IRUFERVJfVFlQRV9DQVJEQlVTCTIKKworI2RlZmluZSBQQ0lfQklTVAkJMHgwZgkvKiA4IGJpdHMgKi8KKyNkZWZpbmUgIFBDSV9CSVNUX0NPREVfTUFTSwkweDBmCS8qIFJldHVybiByZXN1bHQgKi8KKyNkZWZpbmUgIFBDSV9CSVNUX1NUQVJUCQkweDQwCS8qIDEgdG8gc3RhcnQgQklTVCwgMiBzZWNzIG9yIGxlc3MgKi8KKyNkZWZpbmUgIFBDSV9CSVNUX0NBUEFCTEUJMHg4MAkvKiAxIGlmIEJJU1QgY2FwYWJsZSAqLworCisvKgorICogQmFzZSBhZGRyZXNzZXMgc3BlY2lmeSBsb2NhdGlvbnMgaW4gbWVtb3J5IG9yIEkvTyBzcGFjZS4KKyAqIERlY29kZWQgc2l6ZSBjYW4gYmUgZGV0ZXJtaW5lZCBieSB3cml0aW5nIGEgdmFsdWUgb2YKKyAqIDB4ZmZmZmZmZmYgdG8gdGhlIHJlZ2lzdGVyLCBhbmQgcmVhZGluZyBpdCBiYWNrLiAgT25seQorICogMSBiaXRzIGFyZSBkZWNvZGVkLgorICovCisjZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfMAkweDEwCS8qIDMyIGJpdHMgKi8KKyNkZWZpbmUgUENJX0JBU0VfQUREUkVTU18xCTB4MTQJLyogMzIgYml0cyBbaHR5cGUgMCwxIG9ubHldICovCisjZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfMgkweDE4CS8qIDMyIGJpdHMgW2h0eXBlIDAgb25seV0gKi8KKyNkZWZpbmUgUENJX0JBU0VfQUREUkVTU18zCTB4MWMJLyogMzIgYml0cyAqLworI2RlZmluZSBQQ0lfQkFTRV9BRERSRVNTXzQJMHgyMAkvKiAzMiBiaXRzICovCisjZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfNQkweDI0CS8qIDMyIGJpdHMgKi8KKyNkZWZpbmUgIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0UJCTB4MDEJLyogMCA9IG1lbW9yeSwgMSA9IEkvTyAqLworI2RlZmluZSAgUENJX0JBU0VfQUREUkVTU19TUEFDRV9JTwkweDAxCisjZGVmaW5lICBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX01FTU9SWQkweDAwCisjZGVmaW5lICBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFX01BU0sJMHgwNgorI2RlZmluZSAgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV8zMgkweDAwCS8qIDMyIGJpdCBhZGRyZXNzICovCisjZGVmaW5lICBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzFNCTB4MDIJLyogQmVsb3cgMU0gW29ic29sZXRlXSAqLworI2RlZmluZSAgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV82NAkweDA0CS8qIDY0IGJpdCBhZGRyZXNzICovCisjZGVmaW5lICBQQ0lfQkFTRV9BRERSRVNTX01FTV9QUkVGRVRDSAkweDA4CS8qIHByZWZldGNoYWJsZT8gKi8KKyNkZWZpbmUgIFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0sJKH4weDBmVUwpCisjZGVmaW5lICBQQ0lfQkFTRV9BRERSRVNTX0lPX01BU0sJKH4weDAzVUwpCisvKiBiaXQgMSBpcyByZXNlcnZlZCBpZiBhZGRyZXNzX3NwYWNlID0gMSAqLworCisvKiBIZWFkZXIgdHlwZSAwIChub3JtYWwgZGV2aWNlcykgKi8KKyNkZWZpbmUgUENJX0NBUkRCVVNfQ0lTCQkweDI4CisjZGVmaW5lIFBDSV9TVUJTWVNURU1fVkVORE9SX0lECTB4MmMKKyNkZWZpbmUgUENJX1NVQlNZU1RFTV9JRAkweDJlCisjZGVmaW5lIFBDSV9ST01fQUREUkVTUwkJMHgzMAkvKiBCaXRzIDMxLi4xMSBhcmUgYWRkcmVzcywgMTAuLjEgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgIFBDSV9ST01fQUREUkVTU19FTkFCTEUJMHgwMQorI2RlZmluZSBQQ0lfUk9NX0FERFJFU1NfTUFTSwkofjB4N2ZmVUwpCisKKyNkZWZpbmUgUENJX0NBUEFCSUxJVFlfTElTVAkweDM0CS8qIE9mZnNldCBvZiBmaXJzdCBjYXBhYmlsaXR5IGxpc3QgZW50cnkgKi8KKworLyogMHgzNS0weDNiIGFyZSByZXNlcnZlZCAqLworI2RlZmluZSBQQ0lfSU5URVJSVVBUX0xJTkUJMHgzYwkvKiA4IGJpdHMgKi8KKyNkZWZpbmUgUENJX0lOVEVSUlVQVF9QSU4JMHgzZAkvKiA4IGJpdHMgKi8KKyNkZWZpbmUgUENJX01JTl9HTlQJCTB4M2UJLyogOCBiaXRzICovCisjZGVmaW5lIFBDSV9NQVhfTEFUCQkweDNmCS8qIDggYml0cyAqLworCisvKiBIZWFkZXIgdHlwZSAxIChQQ0ktdG8tUENJIGJyaWRnZXMpICovCisjZGVmaW5lIFBDSV9QUklNQVJZX0JVUwkJMHgxOAkvKiBQcmltYXJ5IGJ1cyBudW1iZXIgKi8KKyNkZWZpbmUgUENJX1NFQ09OREFSWV9CVVMJMHgxOQkvKiBTZWNvbmRhcnkgYnVzIG51bWJlciAqLworI2RlZmluZSBQQ0lfU1VCT1JESU5BVEVfQlVTCTB4MWEJLyogSGlnaGVzdCBidXMgbnVtYmVyIGJlaGluZCB0aGUgYnJpZGdlICovCisjZGVmaW5lIFBDSV9TRUNfTEFURU5DWV9USU1FUgkweDFiCS8qIExhdGVuY3kgdGltZXIgZm9yIHNlY29uZGFyeSBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgUENJX0lPX0JBU0UJCTB4MWMJLyogSS9PIHJhbmdlIGJlaGluZCB0aGUgYnJpZGdlICovCisjZGVmaW5lIFBDSV9JT19MSU1JVAkJMHgxZAorI2RlZmluZSAgUENJX0lPX1JBTkdFX1RZUEVfTUFTSwkweDBmVUwJLyogSS9PIGJyaWRnaW5nIHR5cGUgKi8KKyNkZWZpbmUgIFBDSV9JT19SQU5HRV9UWVBFXzE2CTB4MDAKKyNkZWZpbmUgIFBDSV9JT19SQU5HRV9UWVBFXzMyCTB4MDEKKyNkZWZpbmUgIFBDSV9JT19SQU5HRV9NQVNLCSh+MHgwZlVMKQorI2RlZmluZSBQQ0lfU0VDX1NUQVRVUwkJMHgxZQkvKiBTZWNvbmRhcnkgc3RhdHVzIHJlZ2lzdGVyLCBvbmx5IGJpdCAxNCB1c2VkICovCisjZGVmaW5lIFBDSV9NRU1PUllfQkFTRQkJMHgyMAkvKiBNZW1vcnkgcmFuZ2UgYmVoaW5kICovCisjZGVmaW5lIFBDSV9NRU1PUllfTElNSVQJMHgyMgorI2RlZmluZSAgUENJX01FTU9SWV9SQU5HRV9UWVBFX01BU0sgMHgwZlVMCisjZGVmaW5lICBQQ0lfTUVNT1JZX1JBTkdFX01BU0sJKH4weDBmVUwpCisjZGVmaW5lIFBDSV9QUkVGX01FTU9SWV9CQVNFCTB4MjQJLyogUHJlZmV0Y2hhYmxlIG1lbW9yeSByYW5nZSBiZWhpbmQgKi8KKyNkZWZpbmUgUENJX1BSRUZfTUVNT1JZX0xJTUlUCTB4MjYKKyNkZWZpbmUgIFBDSV9QUkVGX1JBTkdFX1RZUEVfTUFTSyAweDBmVUwKKyNkZWZpbmUgIFBDSV9QUkVGX1JBTkdFX1RZUEVfMzIJMHgwMAorI2RlZmluZSAgUENJX1BSRUZfUkFOR0VfVFlQRV82NAkweDAxCisjZGVmaW5lICBQQ0lfUFJFRl9SQU5HRV9NQVNLCSh+MHgwZlVMKQorI2RlZmluZSBQQ0lfUFJFRl9CQVNFX1VQUEVSMzIJMHgyOAkvKiBVcHBlciBoYWxmIG9mIHByZWZldGNoYWJsZSBtZW1vcnkgcmFuZ2UgKi8KKyNkZWZpbmUgUENJX1BSRUZfTElNSVRfVVBQRVIzMgkweDJjCisjZGVmaW5lIFBDSV9JT19CQVNFX1VQUEVSMTYJMHgzMAkvKiBVcHBlciBoYWxmIG9mIEkvTyBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgUENJX0lPX0xJTUlUX1VQUEVSMTYJMHgzMgorLyogMHgzNCBzYW1lIGFzIGZvciBodHlwZSAwICovCisvKiAweDM1LTB4M2IgaXMgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUENJX1JPTV9BRERSRVNTMQkweDM4CS8qIFNhbWUgYXMgUENJX1JPTV9BRERSRVNTLCBidXQgZm9yIGh0eXBlIDEgKi8KKy8qIDB4M2MtMHgzZCBhcmUgc2FtZSBhcyBmb3IgaHR5cGUgMCAqLworI2RlZmluZSBQQ0lfQlJJREdFX0NPTlRST0wJMHgzZQorI2RlZmluZSAgUENJX0JSSURHRV9DVExfUEFSSVRZCTB4MDEJLyogRW5hYmxlIHBhcml0eSBkZXRlY3Rpb24gb24gc2Vjb25kYXJ5IGludGVyZmFjZSAqLworI2RlZmluZSAgUENJX0JSSURHRV9DVExfU0VSUgkweDAyCS8qIFRoZSBzYW1lIGZvciBTRVJSIGZvcndhcmRpbmcgKi8KKyNkZWZpbmUgIFBDSV9CUklER0VfQ1RMX0lTQQkweDA0CS8qIEVuYWJsZSBJU0EgbW9kZSAqLworI2RlZmluZSAgUENJX0JSSURHRV9DVExfVkdBCTB4MDgJLyogRm9yd2FyZCBWR0EgYWRkcmVzc2VzICovCisjZGVmaW5lICBQQ0lfQlJJREdFX0NUTF9NQVNURVJfQUJPUlQJMHgyMCAgLyogUmVwb3J0IG1hc3RlciBhYm9ydHMgKi8KKyNkZWZpbmUgIFBDSV9CUklER0VfQ1RMX0JVU19SRVNFVAkweDQwCS8qIFNlY29uZGFyeSBidXMgcmVzZXQgKi8KKyNkZWZpbmUgIFBDSV9CUklER0VfQ1RMX0ZBU1RfQkFDSwkweDgwCS8qIEZhc3QgQmFjazJCYWNrIGVuYWJsZWQgb24gc2Vjb25kYXJ5IGludGVyZmFjZSAqLworCisvKiBIZWFkZXIgdHlwZSAyIChDYXJkQnVzIGJyaWRnZXMpICovCisjZGVmaW5lIFBDSV9DQl9DQVBBQklMSVRZX0xJU1QJMHgxNAorLyogMHgxNSByZXNlcnZlZCAqLworI2RlZmluZSBQQ0lfQ0JfU0VDX1NUQVRVUwkweDE2CS8qIFNlY29uZGFyeSBzdGF0dXMgKi8KKyNkZWZpbmUgUENJX0NCX1BSSU1BUllfQlVTCTB4MTgJLyogUENJIGJ1cyBudW1iZXIgKi8KKyNkZWZpbmUgUENJX0NCX0NBUkRfQlVTCQkweDE5CS8qIENhcmRCdXMgYnVzIG51bWJlciAqLworI2RlZmluZSBQQ0lfQ0JfU1VCT1JESU5BVEVfQlVTCTB4MWEJLyogU3Vib3JkaW5hdGUgYnVzIG51bWJlciAqLworI2RlZmluZSBQQ0lfQ0JfTEFURU5DWV9USU1FUgkweDFiCS8qIENhcmRCdXMgbGF0ZW5jeSB0aW1lciAqLworI2RlZmluZSBQQ0lfQ0JfTUVNT1JZX0JBU0VfMAkweDFjCisjZGVmaW5lIFBDSV9DQl9NRU1PUllfTElNSVRfMAkweDIwCisjZGVmaW5lIFBDSV9DQl9NRU1PUllfQkFTRV8xCTB4MjQKKyNkZWZpbmUgUENJX0NCX01FTU9SWV9MSU1JVF8xCTB4MjgKKyNkZWZpbmUgUENJX0NCX0lPX0JBU0VfMAkweDJjCisjZGVmaW5lIFBDSV9DQl9JT19CQVNFXzBfSEkJMHgyZQorI2RlZmluZSBQQ0lfQ0JfSU9fTElNSVRfMAkweDMwCisjZGVmaW5lIFBDSV9DQl9JT19MSU1JVF8wX0hJCTB4MzIKKyNkZWZpbmUgUENJX0NCX0lPX0JBU0VfMQkweDM0CisjZGVmaW5lIFBDSV9DQl9JT19CQVNFXzFfSEkJMHgzNgorI2RlZmluZSBQQ0lfQ0JfSU9fTElNSVRfMQkweDM4CisjZGVmaW5lIFBDSV9DQl9JT19MSU1JVF8xX0hJCTB4M2EKKyNkZWZpbmUgIFBDSV9DQl9JT19SQU5HRV9NQVNLCSh+MHgwM1VMKQorLyogMHgzYy0weDNkIGFyZSBzYW1lIGFzIGZvciBodHlwZSAwICovCisjZGVmaW5lIFBDSV9DQl9CUklER0VfQ09OVFJPTAkweDNlCisjZGVmaW5lICBQQ0lfQ0JfQlJJREdFX0NUTF9QQVJJVFkJMHgwMQkvKiBTaW1pbGFyIHRvIHN0YW5kYXJkIGJyaWRnZSBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lICBQQ0lfQ0JfQlJJREdFX0NUTF9TRVJSCQkweDAyCisjZGVmaW5lICBQQ0lfQ0JfQlJJREdFX0NUTF9JU0EJCTB4MDQKKyNkZWZpbmUgIFBDSV9DQl9CUklER0VfQ1RMX1ZHQQkJMHgwOAorI2RlZmluZSAgUENJX0NCX0JSSURHRV9DVExfTUFTVEVSX0FCT1JUCTB4MjAKKyNkZWZpbmUgIFBDSV9DQl9CUklER0VfQ1RMX0NCX1JFU0VUCTB4NDAJLyogQ2FyZEJ1cyByZXNldCAqLworI2RlZmluZSAgUENJX0NCX0JSSURHRV9DVExfMTZCSVRfSU5UCTB4ODAJLyogRW5hYmxlIGludGVycnVwdCBmb3IgMTYtYml0IGNhcmRzICovCisjZGVmaW5lICBQQ0lfQ0JfQlJJREdFX0NUTF9QUkVGRVRDSF9NRU0wIDB4MTAwCS8qIFByZWZldGNoIGVuYWJsZSBmb3IgYm90aCBtZW1vcnkgcmVnaW9ucyAqLworI2RlZmluZSAgUENJX0NCX0JSSURHRV9DVExfUFJFRkVUQ0hfTUVNMSAweDIwMAorI2RlZmluZSAgUENJX0NCX0JSSURHRV9DVExfUE9TVF9XUklURVMJMHg0MDAKKyNkZWZpbmUgUENJX0NCX1NVQlNZU1RFTV9WRU5ET1JfSUQJMHg0MAorI2RlZmluZSBQQ0lfQ0JfU1VCU1lTVEVNX0lECQkweDQyCisjZGVmaW5lIFBDSV9DQl9MRUdBQ1lfTU9ERV9CQVNFCQkweDQ0CS8qIDE2LWJpdCBQQyBDYXJkIGxlZ2FjeSBtb2RlIGJhc2UgYWRkcmVzcyAoRXhDYSkgKi8KKy8qIDB4NDgtMHg3ZiByZXNlcnZlZCAqLworCisvKiBDYXBhYmlsaXR5IGxpc3RzICovCisKKyNkZWZpbmUgUENJX0NBUF9MSVNUX0lECQkwCS8qIENhcGFiaWxpdHkgSUQgKi8KKyNkZWZpbmUgIFBDSV9DQVBfSURfUE0JCTB4MDEJLyogUG93ZXIgTWFuYWdlbWVudCAqLworI2RlZmluZSAgUENJX0NBUF9JRF9BR1AJCTB4MDIJLyogQWNjZWxlcmF0ZWQgR3JhcGhpY3MgUG9ydCAqLworI2RlZmluZSAgUENJX0NBUF9JRF9WUEQJCTB4MDMJLyogVml0YWwgUHJvZHVjdCBEYXRhICovCisjZGVmaW5lICBQQ0lfQ0FQX0lEX1NMT1RJRAkweDA0CS8qIFNsb3QgSWRlbnRpZmljYXRpb24gKi8KKyNkZWZpbmUgIFBDSV9DQVBfSURfTVNJCQkweDA1CS8qIE1lc3NhZ2UgU2lnbmFsbGVkIEludGVycnVwdHMgKi8KKyNkZWZpbmUgIFBDSV9DQVBfSURfQ0hTV1AJMHgwNgkvKiBDb21wYWN0UENJIEhvdFN3YXAgKi8KKyNkZWZpbmUgIFBDSV9DQVBfSURfUENJWAkweDA3CS8qIFBDSS1YICovCisjZGVmaW5lICBQQ0lfQ0FQX0lEX0hUCQkweDA4CS8qIEh5cGVyVHJhbnNwb3J0ICovCisjZGVmaW5lICBQQ0lfQ0FQX0lEX1ZORFIJMHgwOQkvKiBWZW5kb3Igc3BlY2lmaWMgKi8KKyNkZWZpbmUgIFBDSV9DQVBfSURfREJHCQkweDBBCS8qIERlYnVnIHBvcnQgKi8KKyNkZWZpbmUgIFBDSV9DQVBfSURfQ0NSQwkweDBCCS8qIENvbXBhY3RQQ0kgQ2VudHJhbCBSZXNvdXJjZSBDb250cm9sICovCisjZGVmaW5lICBQQ0lfQ0FQX0lEX1NIUEMgCTB4MEMJLyogUENJIFN0YW5kYXJkIEhvdC1QbHVnIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgIFBDSV9DQVBfSURfU1NWSUQJMHgwRAkvKiBCcmlkZ2Ugc3Vic3lzdGVtIHZlbmRvci9kZXZpY2UgSUQgKi8KKyNkZWZpbmUgIFBDSV9DQVBfSURfQUdQMwkweDBFCS8qIEFHUCBUYXJnZXQgUENJLVBDSSBicmlkZ2UgKi8KKyNkZWZpbmUgIFBDSV9DQVBfSURfRVhQIAkweDEwCS8qIFBDSSBFeHByZXNzICovCisjZGVmaW5lICBQQ0lfQ0FQX0lEX01TSVgJMHgxMQkvKiBNU0ktWCAqLworI2RlZmluZSAgUENJX0NBUF9JRF9BRgkJMHgxMwkvKiBQQ0kgQWR2YW5jZWQgRmVhdHVyZXMgKi8KKyNkZWZpbmUgUENJX0NBUF9MSVNUX05FWFQJMQkvKiBOZXh0IGNhcGFiaWxpdHkgaW4gdGhlIGxpc3QgKi8KKyNkZWZpbmUgUENJX0NBUF9GTEFHUwkJMgkvKiBDYXBhYmlsaXR5IGRlZmluZWQgZmxhZ3MgKDE2IGJpdHMpICovCisjZGVmaW5lIFBDSV9DQVBfU0laRU9GCQk0CisKKy8qIFBvd2VyIE1hbmFnZW1lbnQgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgUENJX1BNX1BNQwkJMgkvKiBQTSBDYXBhYmlsaXRpZXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgIFBDSV9QTV9DQVBfVkVSX01BU0sJMHgwMDA3CS8qIFZlcnNpb24gKi8KKyNkZWZpbmUgIFBDSV9QTV9DQVBfUE1FX0NMT0NLCTB4MDAwOAkvKiBQTUUgY2xvY2sgcmVxdWlyZWQgKi8KKyNkZWZpbmUgIFBDSV9QTV9DQVBfUkVTRVJWRUQgICAgMHgwMDEwICAvKiBSZXNlcnZlZCBmaWVsZCAqLworI2RlZmluZSAgUENJX1BNX0NBUF9EU0kJCTB4MDAyMAkvKiBEZXZpY2Ugc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gKi8KKyNkZWZpbmUgIFBDSV9QTV9DQVBfQVVYX1BPV0VSCTB4MDFDMAkvKiBBdXhpbGxpYXJ5IHBvd2VyIHN1cHBvcnQgbWFzayAqLworI2RlZmluZSAgUENJX1BNX0NBUF9EMQkJMHgwMjAwCS8qIEQxIHBvd2VyIHN0YXRlIHN1cHBvcnQgKi8KKyNkZWZpbmUgIFBDSV9QTV9DQVBfRDIJCTB4MDQwMAkvKiBEMiBwb3dlciBzdGF0ZSBzdXBwb3J0ICovCisjZGVmaW5lICBQQ0lfUE1fQ0FQX1BNRQkJMHgwODAwCS8qIFBNRSBwaW4gc3VwcG9ydGVkICovCisjZGVmaW5lICBQQ0lfUE1fQ0FQX1BNRV9NQVNLCTB4RjgwMAkvKiBQTUUgTWFzayBvZiBhbGwgc3VwcG9ydGVkIHN0YXRlcyAqLworI2RlZmluZSAgUENJX1BNX0NBUF9QTUVfRDAJMHgwODAwCS8qIFBNRSMgZnJvbSBEMCAqLworI2RlZmluZSAgUENJX1BNX0NBUF9QTUVfRDEJMHgxMDAwCS8qIFBNRSMgZnJvbSBEMSAqLworI2RlZmluZSAgUENJX1BNX0NBUF9QTUVfRDIJMHgyMDAwCS8qIFBNRSMgZnJvbSBEMiAqLworI2RlZmluZSAgUENJX1BNX0NBUF9QTUVfRDMJMHg0MDAwCS8qIFBNRSMgZnJvbSBEMyAoaG90KSAqLworI2RlZmluZSAgUENJX1BNX0NBUF9QTUVfRDNjb2xkCTB4ODAwMAkvKiBQTUUjIGZyb20gRDMgKGNvbGQpICovCisjZGVmaW5lICBQQ0lfUE1fQ0FQX1BNRV9TSElGVAkxMQkvKiBTdGFydCBvZiB0aGUgUE1FIE1hc2sgaW4gUE1DICovCisjZGVmaW5lIFBDSV9QTV9DVFJMCQk0CS8qIFBNIGNvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSAgUENJX1BNX0NUUkxfU1RBVEVfTUFTSwkweDAwMDMJLyogQ3VycmVudCBwb3dlciBzdGF0ZSAoRDAgdG8gRDMpICovCisjZGVmaW5lICBQQ0lfUE1fQ1RSTF9OT19TT0ZUX1JFU0VUCTB4MDAwOAkvKiBObyByZXNldCBmb3IgRDNob3QtPkQwICovCisjZGVmaW5lICBQQ0lfUE1fQ1RSTF9QTUVfRU5BQkxFCTB4MDEwMAkvKiBQTUUgcGluIGVuYWJsZSAqLworI2RlZmluZSAgUENJX1BNX0NUUkxfREFUQV9TRUxfTUFTSwkweDFlMDAJLyogRGF0YSBzZWxlY3QgKD8/KSAqLworI2RlZmluZSAgUENJX1BNX0NUUkxfREFUQV9TQ0FMRV9NQVNLCTB4NjAwMAkvKiBEYXRhIHNjYWxlICg/PykgKi8KKyNkZWZpbmUgIFBDSV9QTV9DVFJMX1BNRV9TVEFUVVMJMHg4MDAwCS8qIFBNRSBwaW4gc3RhdHVzICovCisjZGVmaW5lIFBDSV9QTV9QUEJfRVhURU5TSU9OUwk2CS8qIFBQQiBzdXBwb3J0IGV4dGVuc2lvbnMgKD8/KSAqLworI2RlZmluZSAgUENJX1BNX1BQQl9CMl9CMwkweDQwCS8qIFN0b3AgY2xvY2sgd2hlbiBpbiBEM2hvdCAoPz8pICovCisjZGVmaW5lICBQQ0lfUE1fQlBDQ19FTkFCTEUJMHg4MAkvKiBCdXMgcG93ZXIvY2xvY2sgY29udHJvbCBlbmFibGUgKD8/KSAqLworI2RlZmluZSBQQ0lfUE1fREFUQV9SRUdJU1RFUgk3CS8qICg/PykgKi8KKyNkZWZpbmUgUENJX1BNX1NJWkVPRgkJOAorCisvKiBBR1AgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgUENJX0FHUF9WRVJTSU9OCQkyCS8qIEJDRCB2ZXJzaW9uIG51bWJlciAqLworI2RlZmluZSBQQ0lfQUdQX1JGVQkJMwkvKiBSZXN0IG9mIGNhcGFiaWxpdHkgZmxhZ3MgKi8KKyNkZWZpbmUgUENJX0FHUF9TVEFUVVMJCTQJLyogU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lICBQQ0lfQUdQX1NUQVRVU19SUV9NQVNLCTB4ZmYwMDAwMDAJLyogTWF4aW11bSBudW1iZXIgb2YgcmVxdWVzdHMgLSAxICovCisjZGVmaW5lICBQQ0lfQUdQX1NUQVRVU19TQkEJMHgwMjAwCS8qIFNpZGViYW5kIGFkZHJlc3Npbmcgc3VwcG9ydGVkICovCisjZGVmaW5lICBQQ0lfQUdQX1NUQVRVU182NEJJVAkweDAwMjAJLyogNjQtYml0IGFkZHJlc3Npbmcgc3VwcG9ydGVkICovCisjZGVmaW5lICBQQ0lfQUdQX1NUQVRVU19GVwkweDAwMTAJLyogRlcgdHJhbnNmZXJzIHN1cHBvcnRlZCAqLworI2RlZmluZSAgUENJX0FHUF9TVEFUVVNfUkFURTQJMHgwMDA0CS8qIDR4IHRyYW5zZmVyIHJhdGUgc3VwcG9ydGVkICovCisjZGVmaW5lICBQQ0lfQUdQX1NUQVRVU19SQVRFMgkweDAwMDIJLyogMnggdHJhbnNmZXIgcmF0ZSBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgIFBDSV9BR1BfU1RBVFVTX1JBVEUxCTB4MDAwMQkvKiAxeCB0cmFuc2ZlciByYXRlIHN1cHBvcnRlZCAqLworI2RlZmluZSBQQ0lfQUdQX0NPTU1BTkQJCTgJLyogQ29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSAgUENJX0FHUF9DT01NQU5EX1JRX01BU0sgMHhmZjAwMDAwMCAgLyogTWFzdGVyOiBNYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cyAqLworI2RlZmluZSAgUENJX0FHUF9DT01NQU5EX1NCQQkweDAyMDAJLyogU2lkZWJhbmQgYWRkcmVzc2luZyBlbmFibGVkICovCisjZGVmaW5lICBQQ0lfQUdQX0NPTU1BTkRfQUdQCTB4MDEwMAkvKiBBbGxvdyBwcm9jZXNzaW5nIG9mIEFHUCB0cmFuc2FjdGlvbnMgKi8KKyNkZWZpbmUgIFBDSV9BR1BfQ09NTUFORF82NEJJVAkweDAwMjAgCS8qIEFsbG93IHByb2Nlc3Npbmcgb2YgNjQtYml0IGFkZHJlc3NlcyAqLworI2RlZmluZSAgUENJX0FHUF9DT01NQU5EX0ZXCTB4MDAxMCAJLyogRm9yY2UgRlcgdHJhbnNmZXJzICovCisjZGVmaW5lICBQQ0lfQUdQX0NPTU1BTkRfUkFURTQJMHgwMDA0CS8qIFVzZSA0eCByYXRlICovCisjZGVmaW5lICBQQ0lfQUdQX0NPTU1BTkRfUkFURTIJMHgwMDAyCS8qIFVzZSAyeCByYXRlICovCisjZGVmaW5lICBQQ0lfQUdQX0NPTU1BTkRfUkFURTEJMHgwMDAxCS8qIFVzZSAxeCByYXRlICovCisjZGVmaW5lIFBDSV9BR1BfU0laRU9GCQkxMgorCisvKiBWaXRhbCBQcm9kdWN0IERhdGEgKi8KKworI2RlZmluZSBQQ0lfVlBEX0FERFIJCTIJLyogQWRkcmVzcyB0byBhY2Nlc3MgKDE1IGJpdHMhKSAqLworI2RlZmluZSAgUENJX1ZQRF9BRERSX01BU0sJMHg3ZmZmCS8qIEFkZHJlc3MgbWFzayAqLworI2RlZmluZSAgUENJX1ZQRF9BRERSX0YJCTB4ODAwMAkvKiBXcml0ZSAwLCAxIGluZGljYXRlcyBjb21wbGV0aW9uICovCisjZGVmaW5lIFBDSV9WUERfREFUQQkJNAkvKiAzMi1iaXRzIG9mIGRhdGEgcmV0dXJuZWQgaGVyZSAqLworCisvKiBTbG90IElkZW50aWZpY2F0aW9uICovCisKKyNkZWZpbmUgUENJX1NJRF9FU1IJCTIJLyogRXhwYW5zaW9uIFNsb3QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgIFBDSV9TSURfRVNSX05TTE9UUwkweDFmCS8qIE51bWJlciBvZiBleHBhbnNpb24gc2xvdHMgYXZhaWxhYmxlICovCisjZGVmaW5lICBQQ0lfU0lEX0VTUl9GSUMJMHgyMAkvKiBGaXJzdCBJbiBDaGFzc2lzIEZsYWcgKi8KKyNkZWZpbmUgUENJX1NJRF9DSEFTU0lTX05SCTMJLyogQ2hhc3NpcyBOdW1iZXIgKi8KKworLyogTWVzc2FnZSBTaWduYWxsZWQgSW50ZXJydXB0cyByZWdpc3RlcnMgKi8KKworI2RlZmluZSBQQ0lfTVNJX0ZMQUdTCQkyCS8qIFZhcmlvdXMgZmxhZ3MgKi8KKyNkZWZpbmUgIFBDSV9NU0lfRkxBR1NfNjRCSVQJMHg4MAkvKiA2NC1iaXQgYWRkcmVzc2VzIGFsbG93ZWQgKi8KKyNkZWZpbmUgIFBDSV9NU0lfRkxBR1NfUVNJWkUJMHg3MAkvKiBNZXNzYWdlIHF1ZXVlIHNpemUgY29uZmlndXJlZCAqLworI2RlZmluZSAgUENJX01TSV9GTEFHU19RTUFTSwkweDBlCS8qIE1heGltdW0gcXVldWUgc2l6ZSBhdmFpbGFibGUgKi8KKyNkZWZpbmUgIFBDSV9NU0lfRkxBR1NfRU5BQkxFCTB4MDEJLyogTVNJIGZlYXR1cmUgZW5hYmxlZCAqLworI2RlZmluZSAgUENJX01TSV9GTEFHU19NQVNLQklUCTB4MTAwCS8qIDY0LWJpdCBtYXNrIGJpdHMgYWxsb3dlZCAqLworI2RlZmluZSBQQ0lfTVNJX1JGVQkJMwkvKiBSZXN0IG9mIGNhcGFiaWxpdHkgZmxhZ3MgKi8KKyNkZWZpbmUgUENJX01TSV9BRERSRVNTX0xPCTQJLyogTG93ZXIgMzIgYml0cyAqLworI2RlZmluZSBQQ0lfTVNJX0FERFJFU1NfSEkJOAkvKiBVcHBlciAzMiBiaXRzIChpZiBQQ0lfTVNJX0ZMQUdTXzY0QklUIHNldCkgKi8KKyNkZWZpbmUgUENJX01TSV9EQVRBXzMyCQk4CS8qIDE2IGJpdHMgb2YgZGF0YSBmb3IgMzItYml0IGRldmljZXMgKi8KKyNkZWZpbmUgUENJX01TSV9NQVNLXzMyCQkxMgkvKiBNYXNrIGJpdHMgcmVnaXN0ZXIgZm9yIDMyLWJpdCBkZXZpY2VzICovCisjZGVmaW5lIFBDSV9NU0lfREFUQV82NAkJMTIJLyogMTYgYml0cyBvZiBkYXRhIGZvciA2NC1iaXQgZGV2aWNlcyAqLworI2RlZmluZSBQQ0lfTVNJX01BU0tfNjQJCTE2CS8qIE1hc2sgYml0cyByZWdpc3RlciBmb3IgNjQtYml0IGRldmljZXMgKi8KKworLyogTVNJLVggcmVnaXN0ZXJzICovCisjZGVmaW5lIFBDSV9NU0lYX0ZMQUdTCQkyCisjZGVmaW5lICBQQ0lfTVNJWF9GTEFHU19RU0laRQkweDdGRgorI2RlZmluZSAgUENJX01TSVhfRkxBR1NfRU5BQkxFCSgxIDw8IDE1KQorI2RlZmluZSAgUENJX01TSVhfRkxBR1NfTUFTS0FMTAkoMSA8PCAxNCkKKyNkZWZpbmUgUENJX01TSVhfVEFCTEUJCTQKKyNkZWZpbmUgUENJX01TSVhfUEJBCQk4CisjZGVmaW5lICBQQ0lfTVNJWF9GTEFHU19CSVJNQVNLCSg3IDw8IDApCisKKy8qIENvbXBhY3RQQ0kgSG90c3dhcCBSZWdpc3RlciAqLworCisjZGVmaW5lIFBDSV9DSFNXUF9DU1IJCTIJLyogQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICBQQ0lfQ0hTV1BfREhBCQkweDAxCS8qIERldmljZSBIaWRpbmcgQXJtICovCisjZGVmaW5lICBQQ0lfQ0hTV1BfRUlNCQkweDAyCS8qIEVOVU0jIFNpZ25hbCBNYXNrICovCisjZGVmaW5lICBQQ0lfQ0hTV1BfUElFCQkweDA0CS8qIFBlbmRpbmcgSW5zZXJ0IG9yIEV4dHJhY3QgKi8KKyNkZWZpbmUgIFBDSV9DSFNXUF9MT08JCTB4MDgJLyogTEVEIE9uIC8gT2ZmICovCisjZGVmaW5lICBQQ0lfQ0hTV1BfUEkJCTB4MzAJLyogUHJvZ3JhbW1pbmcgSW50ZXJmYWNlICovCisjZGVmaW5lICBQQ0lfQ0hTV1BfRVhUCQkweDQwCS8qIEVOVU0jIHN0YXR1cyAtIGV4dHJhY3Rpb24gKi8KKyNkZWZpbmUgIFBDSV9DSFNXUF9JTlMJCTB4ODAJLyogRU5VTSMgc3RhdHVzIC0gaW5zZXJ0aW9uICovCisKKy8qIFBDSSBBZHZhbmNlZCBGZWF0dXJlIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIFBDSV9BRl9MRU5HVEgJCTIKKyNkZWZpbmUgUENJX0FGX0NBUAkJMworI2RlZmluZSAgUENJX0FGX0NBUF9UUAkJMHgwMQorI2RlZmluZSAgUENJX0FGX0NBUF9GTFIJCTB4MDIKKyNkZWZpbmUgUENJX0FGX0NUUkwJCTQKKyNkZWZpbmUgIFBDSV9BRl9DVFJMX0ZMUgkweDAxCisjZGVmaW5lIFBDSV9BRl9TVEFUVVMJCTUKKyNkZWZpbmUgIFBDSV9BRl9TVEFUVVNfVFAJMHgwMQorCisvKiBQQ0ktWCByZWdpc3RlcnMgKi8KKworI2RlZmluZSBQQ0lfWF9DTUQJCTIJLyogTW9kZXMgJiBGZWF0dXJlcyAqLworI2RlZmluZSAgUENJX1hfQ01EX0RQRVJSX0UJMHgwMDAxCS8qIERhdGEgUGFyaXR5IEVycm9yIFJlY292ZXJ5IEVuYWJsZSAqLworI2RlZmluZSAgUENJX1hfQ01EX0VSTwkJMHgwMDAyCS8qIEVuYWJsZSBSZWxheGVkIE9yZGVyaW5nICovCisjZGVmaW5lICBQQ0lfWF9DTURfUkVBRF81MTIJMHgwMDAwCS8qIDUxMiBieXRlIG1heGltdW0gcmVhZCBieXRlIGNvdW50ICovCisjZGVmaW5lICBQQ0lfWF9DTURfUkVBRF8xSwkweDAwMDQJLyogMUtieXRlIG1heGltdW0gcmVhZCBieXRlIGNvdW50ICovCisjZGVmaW5lICBQQ0lfWF9DTURfUkVBRF8ySwkweDAwMDgJLyogMktieXRlIG1heGltdW0gcmVhZCBieXRlIGNvdW50ICovCisjZGVmaW5lICBQQ0lfWF9DTURfUkVBRF80SwkweDAwMGMJLyogNEtieXRlIG1heGltdW0gcmVhZCBieXRlIGNvdW50ICovCisjZGVmaW5lICBQQ0lfWF9DTURfTUFYX1JFQUQJMHgwMDBjCS8qIE1heCBNZW1vcnkgUmVhZCBCeXRlIENvdW50ICovCisJCQkJLyogTWF4ICMgb2Ygb3V0c3RhbmRpbmcgc3BsaXQgdHJhbnNhY3Rpb25zICovCisjZGVmaW5lICBQQ0lfWF9DTURfU1BMSVRfMQkweDAwMDAJLyogTWF4IDEgKi8KKyNkZWZpbmUgIFBDSV9YX0NNRF9TUExJVF8yCTB4MDAxMAkvKiBNYXggMiAqLworI2RlZmluZSAgUENJX1hfQ01EX1NQTElUXzMJMHgwMDIwCS8qIE1heCAzICovCisjZGVmaW5lICBQQ0lfWF9DTURfU1BMSVRfNAkweDAwMzAJLyogTWF4IDQgKi8KKyNkZWZpbmUgIFBDSV9YX0NNRF9TUExJVF84CTB4MDA0MAkvKiBNYXggOCAqLworI2RlZmluZSAgUENJX1hfQ01EX1NQTElUXzEyCTB4MDA1MAkvKiBNYXggMTIgKi8KKyNkZWZpbmUgIFBDSV9YX0NNRF9TUExJVF8xNgkweDAwNjAJLyogTWF4IDE2ICovCisjZGVmaW5lICBQQ0lfWF9DTURfU1BMSVRfMzIJMHgwMDcwCS8qIE1heCAzMiAqLworI2RlZmluZSAgUENJX1hfQ01EX01BWF9TUExJVAkweDAwNzAJLyogTWF4IE91dHN0YW5kaW5nIFNwbGl0IFRyYW5zYWN0aW9ucyAqLworI2RlZmluZSAgUENJX1hfQ01EX1ZFUlNJT04oeCkgCSgoKHgpID4+IDEyKSAmIDMpIC8qIFZlcnNpb24gKi8KKyNkZWZpbmUgUENJX1hfU1RBVFVTCQk0CS8qIFBDSS1YIGNhcGFiaWxpdGllcyAqLworI2RlZmluZSAgUENJX1hfU1RBVFVTX0RFVkZOCTB4MDAwMDAwZmYJLyogQSBjb3B5IG9mIGRldmZuICovCisjZGVmaW5lICBQQ0lfWF9TVEFUVVNfQlVTCTB4MDAwMGZmMDAJLyogQSBjb3B5IG9mIGJ1cyBuciAqLworI2RlZmluZSAgUENJX1hfU1RBVFVTXzY0QklUCTB4MDAwMTAwMDAJLyogNjQtYml0IGRldmljZSAqLworI2RlZmluZSAgUENJX1hfU1RBVFVTXzEzM01IWgkweDAwMDIwMDAwCS8qIDEzMyBNSHogY2FwYWJsZSAqLworI2RlZmluZSAgUENJX1hfU1RBVFVTX1NQTF9ESVNDCTB4MDAwNDAwMDAJLyogU3BsaXQgQ29tcGxldGlvbiBEaXNjYXJkZWQgKi8KKyNkZWZpbmUgIFBDSV9YX1NUQVRVU19VTlhfU1BMCTB4MDAwODAwMDAJLyogVW5leHBlY3RlZCBTcGxpdCBDb21wbGV0aW9uICovCisjZGVmaW5lICBQQ0lfWF9TVEFUVVNfQ09NUExFWAkweDAwMTAwMDAwCS8qIERldmljZSBDb21wbGV4aXR5ICovCisjZGVmaW5lICBQQ0lfWF9TVEFUVVNfTUFYX1JFQUQJMHgwMDYwMDAwMAkvKiBEZXNpZ25lZCBNYXggTWVtb3J5IFJlYWQgQ291bnQgKi8KKyNkZWZpbmUgIFBDSV9YX1NUQVRVU19NQVhfU1BMSVQJMHgwMzgwMDAwMAkvKiBEZXNpZ25lZCBNYXggT3V0c3RhbmRpbmcgU3BsaXQgVHJhbnNhY3Rpb25zICovCisjZGVmaW5lICBQQ0lfWF9TVEFUVVNfTUFYX0NVTQkweDFjMDAwMDAwCS8qIERlc2lnbmVkIE1heCBDdW11bGF0aXZlIFJlYWQgU2l6ZSAqLworI2RlZmluZSAgUENJX1hfU1RBVFVTX1NQTF9FUlIJMHgyMDAwMDAwMAkvKiBSY3ZkIFNwbGl0IENvbXBsZXRpb24gRXJyb3IgTXNnICovCisjZGVmaW5lICBQQ0lfWF9TVEFUVVNfMjY2TUhaCTB4NDAwMDAwMDAJLyogMjY2IE1IeiBjYXBhYmxlICovCisjZGVmaW5lICBQQ0lfWF9TVEFUVVNfNTMzTUhaCTB4ODAwMDAwMDAJLyogNTMzIE1IeiBjYXBhYmxlICovCisKKy8qIFBDSSBCcmlkZ2UgU3Vic3lzdGVtIElEIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIFBDSV9TU1ZJRF9WRU5ET1JfSUQgICAgIDQJLyogUENJLUJyaWRnZSBzdWJzeXN0ZW0gdmVuZG9yIGlkIHJlZ2lzdGVyICovCisjZGVmaW5lIFBDSV9TU1ZJRF9ERVZJQ0VfSUQgICAgIDYJLyogUENJLUJyaWRnZSBzdWJzeXN0ZW0gZGV2aWNlIGlkIHJlZ2lzdGVyICovCisKKy8qIFBDSSBFeHByZXNzIGNhcGFiaWxpdHkgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgUENJX0VYUF9GTEFHUwkJMgkvKiBDYXBhYmlsaXRpZXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJX0VYUF9GTEFHU19WRVJTCTB4MDAwZgkvKiBDYXBhYmlsaXR5IHZlcnNpb24gKi8KKyNkZWZpbmUgUENJX0VYUF9GTEFHU19UWVBFCTB4MDBmMAkvKiBEZXZpY2UvUG9ydCB0eXBlICovCisjZGVmaW5lICBQQ0lfRVhQX1RZUEVfRU5EUE9JTlQJMHgwCS8qIEV4cHJlc3MgRW5kcG9pbnQgKi8KKyNkZWZpbmUgIFBDSV9FWFBfVFlQRV9MRUdfRU5ECTB4MQkvKiBMZWdhY3kgRW5kcG9pbnQgKi8KKyNkZWZpbmUgIFBDSV9FWFBfVFlQRV9ST09UX1BPUlQgMHg0CS8qIFJvb3QgUG9ydCAqLworI2RlZmluZSAgUENJX0VYUF9UWVBFX1VQU1RSRUFNCTB4NQkvKiBVcHN0cmVhbSBQb3J0ICovCisjZGVmaW5lICBQQ0lfRVhQX1RZUEVfRE9XTlNUUkVBTSAweDYJLyogRG93bnN0cmVhbSBQb3J0ICovCisjZGVmaW5lICBQQ0lfRVhQX1RZUEVfUENJX0JSSURHRSAweDcJLyogUENJL1BDSS1YIEJyaWRnZSAqLworI2RlZmluZSAgUENJX0VYUF9UWVBFX1JDX0VORAkweDkJLyogUm9vdCBDb21wbGV4IEludGVncmF0ZWQgRW5kcG9pbnQgKi8KKyNkZWZpbmUgIFBDSV9FWFBfVFlQRV9SQ19FQwkweDEwCS8qIFJvb3QgQ29tcGxleCBFdmVudCBDb2xsZWN0b3IgKi8KKyNkZWZpbmUgUENJX0VYUF9GTEFHU19TTE9UCTB4MDEwMAkvKiBTbG90IGltcGxlbWVudGVkICovCisjZGVmaW5lIFBDSV9FWFBfRkxBR1NfSVJRCTB4M2UwMAkvKiBJbnRlcnJ1cHQgbWVzc2FnZSBudW1iZXIgKi8KKyNkZWZpbmUgUENJX0VYUF9ERVZDQVAJCTQJLyogRGV2aWNlIGNhcGFiaWxpdGllcyAqLworI2RlZmluZSAgUENJX0VYUF9ERVZDQVBfUEFZTE9BRAkweDA3CS8qIE1heF9QYXlsb2FkX1NpemUgKi8KKyNkZWZpbmUgIFBDSV9FWFBfREVWQ0FQX1BIQU5UT00JMHgxOAkvKiBQaGFudG9tIGZ1bmN0aW9ucyAqLworI2RlZmluZSAgUENJX0VYUF9ERVZDQVBfRVhUX1RBRwkweDIwCS8qIEV4dGVuZGVkIHRhZ3MgKi8KKyNkZWZpbmUgIFBDSV9FWFBfREVWQ0FQX0wwUwkweDFjMAkvKiBMMHMgQWNjZXB0YWJsZSBMYXRlbmN5ICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVkNBUF9MMQkweGUwMAkvKiBMMSBBY2NlcHRhYmxlIExhdGVuY3kgKi8KKyNkZWZpbmUgIFBDSV9FWFBfREVWQ0FQX0FUTl9CVVQJMHgxMDAwCS8qIEF0dGVudGlvbiBCdXR0b24gUHJlc2VudCAqLworI2RlZmluZSAgUENJX0VYUF9ERVZDQVBfQVROX0lORAkweDIwMDAJLyogQXR0ZW50aW9uIEluZGljYXRvciBQcmVzZW50ICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVkNBUF9QV1JfSU5ECTB4NDAwMAkvKiBQb3dlciBJbmRpY2F0b3IgUHJlc2VudCAqLworI2RlZmluZSAgUENJX0VYUF9ERVZDQVBfUkJFUgkweDgwMDAJLyogUm9sZS1CYXNlZCBFcnJvciBSZXBvcnRpbmcgKi8KKyNkZWZpbmUgIFBDSV9FWFBfREVWQ0FQX1BXUl9WQUwJMHgzZmMwMDAwIC8qIFNsb3QgUG93ZXIgTGltaXQgVmFsdWUgKi8KKyNkZWZpbmUgIFBDSV9FWFBfREVWQ0FQX1BXUl9TQ0wJMHhjMDAwMDAwIC8qIFNsb3QgUG93ZXIgTGltaXQgU2NhbGUgKi8KKyNkZWZpbmUgIFBDSV9FWFBfREVWQ0FQX0ZMUiAgICAgMHgxMDAwMDAwMCAvKiBGdW5jdGlvbiBMZXZlbCBSZXNldCAqLworI2RlZmluZSBQQ0lfRVhQX0RFVkNUTAkJOAkvKiBEZXZpY2UgQ29udHJvbCAqLworI2RlZmluZSAgUENJX0VYUF9ERVZDVExfQ0VSRQkweDAwMDEJLyogQ29ycmVjdGFibGUgRXJyb3IgUmVwb3J0aW5nIEVuLiAqLworI2RlZmluZSAgUENJX0VYUF9ERVZDVExfTkZFUkUJMHgwMDAyCS8qIE5vbi1GYXRhbCBFcnJvciBSZXBvcnRpbmcgRW5hYmxlICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVkNUTF9GRVJFCTB4MDAwNAkvKiBGYXRhbCBFcnJvciBSZXBvcnRpbmcgRW5hYmxlICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVkNUTF9VUlJFCTB4MDAwOAkvKiBVbnN1cHBvcnRlZCBSZXF1ZXN0IFJlcG9ydGluZyBFbi4gKi8KKyNkZWZpbmUgIFBDSV9FWFBfREVWQ1RMX1JFTEFYX0VOIDB4MDAxMCAvKiBFbmFibGUgcmVsYXhlZCBvcmRlcmluZyAqLworI2RlZmluZSAgUENJX0VYUF9ERVZDVExfUEFZTE9BRAkweDAwZTAJLyogTWF4X1BheWxvYWRfU2l6ZSAqLworI2RlZmluZSAgUENJX0VYUF9ERVZDVExfRVhUX1RBRwkweDAxMDAJLyogRXh0ZW5kZWQgVGFnIEZpZWxkIEVuYWJsZSAqLworI2RlZmluZSAgUENJX0VYUF9ERVZDVExfUEhBTlRPTQkweDAyMDAJLyogUGhhbnRvbSBGdW5jdGlvbnMgRW5hYmxlICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVkNUTF9BVVhfUE1FCTB4MDQwMAkvKiBBdXhpbGlhcnkgUG93ZXIgUE0gRW5hYmxlICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVkNUTF9OT1NOT09QX0VOIDB4MDgwMCAgLyogRW5hYmxlIE5vIFNub29wICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVkNUTF9SRUFEUlEJMHg3MDAwCS8qIE1heF9SZWFkX1JlcXVlc3RfU2l6ZSAqLworI2RlZmluZSAgUENJX0VYUF9ERVZDVExfQkNSX0ZMUiAweDgwMDAgIC8qIEJyaWRnZSBDb25maWd1cmF0aW9uIFJldHJ5IC8gRkxSICovCisjZGVmaW5lIFBDSV9FWFBfREVWU1RBCQkxMAkvKiBEZXZpY2UgU3RhdHVzICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVlNUQV9DRUQJMHgwMQkvKiBDb3JyZWN0YWJsZSBFcnJvciBEZXRlY3RlZCAqLworI2RlZmluZSAgUENJX0VYUF9ERVZTVEFfTkZFRAkweDAyCS8qIE5vbi1GYXRhbCBFcnJvciBEZXRlY3RlZCAqLworI2RlZmluZSAgUENJX0VYUF9ERVZTVEFfRkVECTB4MDQJLyogRmF0YWwgRXJyb3IgRGV0ZWN0ZWQgKi8KKyNkZWZpbmUgIFBDSV9FWFBfREVWU1RBX1VSRAkweDA4CS8qIFVuc3VwcG9ydGVkIFJlcXVlc3QgRGV0ZWN0ZWQgKi8KKyNkZWZpbmUgIFBDSV9FWFBfREVWU1RBX0FVWFBECTB4MTAJLyogQVVYIFBvd2VyIERldGVjdGVkICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVlNUQV9UUlBORAkweDIwCS8qIFRyYW5zYWN0aW9ucyBQZW5kaW5nICovCisjZGVmaW5lIFBDSV9FWFBfTE5LQ0FQCQkxMgkvKiBMaW5rIENhcGFiaWxpdGllcyAqLworI2RlZmluZSAgUENJX0VYUF9MTktDQVBfU0xTCTB4MDAwMDAwMGYgLyogU3VwcG9ydGVkIExpbmsgU3BlZWRzICovCisjZGVmaW5lICBQQ0lfRVhQX0xOS0NBUF9NTFcJMHgwMDAwMDNmMCAvKiBNYXhpbXVtIExpbmsgV2lkdGggKi8KKyNkZWZpbmUgIFBDSV9FWFBfTE5LQ0FQX0FTUE1TCTB4MDAwMDBjMDAgLyogQVNQTSBTdXBwb3J0ICovCisjZGVmaW5lICBQQ0lfRVhQX0xOS0NBUF9MMFNFTAkweDAwMDA3MDAwIC8qIEwwcyBFeGl0IExhdGVuY3kgKi8KKyNkZWZpbmUgIFBDSV9FWFBfTE5LQ0FQX0wxRUwJMHgwMDAzODAwMCAvKiBMMSBFeGl0IExhdGVuY3kgKi8KKyNkZWZpbmUgIFBDSV9FWFBfTE5LQ0FQX0NMS1BNCTB4MDAwNDAwMDAgLyogTDEgQ2xvY2sgUG93ZXIgTWFuYWdlbWVudCAqLworI2RlZmluZSAgUENJX0VYUF9MTktDQVBfU0RFUkMJMHgwMDA4MDAwMCAvKiBTdXByaXNlIERvd24gRXJyb3IgUmVwb3J0aW5nIENhcGFibGUgKi8KKyNkZWZpbmUgIFBDSV9FWFBfTE5LQ0FQX0RMTExBUkMJMHgwMDEwMDAwMCAvKiBEYXRhIExpbmsgTGF5ZXIgTGluayBBY3RpdmUgUmVwb3J0aW5nIENhcGFibGUgKi8KKyNkZWZpbmUgIFBDSV9FWFBfTE5LQ0FQX0xCTkMJMHgwMDIwMDAwMCAvKiBMaW5rIEJhbmR3aWR0aCBOb3RpZmljYXRpb24gQ2FwYWJpbGl0eSAqLworI2RlZmluZSAgUENJX0VYUF9MTktDQVBfUE4JMHhmZjAwMDAwMCAvKiBQb3J0IE51bWJlciAqLworI2RlZmluZSBQQ0lfRVhQX0xOS0NUTAkJMTYJLyogTGluayBDb250cm9sICovCisjZGVmaW5lICBQQ0lfRVhQX0xOS0NUTF9BU1BNQwkweDAwMDMJLyogQVNQTSBDb250cm9sICovCisjZGVmaW5lICBQQ0lfRVhQX0xOS0NUTF9SQ0IJMHgwMDA4CS8qIFJlYWQgQ29tcGxldGlvbiBCb3VuZGFyeSAqLworI2RlZmluZSAgUENJX0VYUF9MTktDVExfTEQJMHgwMDEwCS8qIExpbmsgRGlzYWJsZSAqLworI2RlZmluZSAgUENJX0VYUF9MTktDVExfUkwJMHgwMDIwCS8qIFJldHJhaW4gTGluayAqLworI2RlZmluZSAgUENJX0VYUF9MTktDVExfQ0NDCTB4MDA0MAkvKiBDb21tb24gQ2xvY2sgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSAgUENJX0VYUF9MTktDVExfRVMJMHgwMDgwCS8qIEV4dGVuZGVkIFN5bmNoICovCisjZGVmaW5lICBQQ0lfRVhQX0xOS0NUTF9DTEtSRVFfRU4gMHgxMDAJLyogRW5hYmxlIGNsa3JlcSAqLworI2RlZmluZSAgUENJX0VYUF9MTktDVExfSEFXRAkweDAyMDAJLyogSGFyZHdhcmUgQXV0b25vbW91cyBXaWR0aCBEaXNhYmxlICovCisjZGVmaW5lICBQQ0lfRVhQX0xOS0NUTF9MQk1JRQkweDA0MDAJLyogTGluayBCYW5kd2lkdGggTWFuYWdlbWVudCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICBQQ0lfRVhQX0xOS0NUTF9MQUJJRQkweDA4MDAJLyogTG5rIEF1dG9ub21vdXMgQmFuZHdpZHRoIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgUENJX0VYUF9MTktTVEEJCTE4CS8qIExpbmsgU3RhdHVzICovCisjZGVmaW5lICBQQ0lfRVhQX0xOS1NUQV9DTFMJMHgwMDBmCS8qIEN1cnJlbnQgTGluayBTcGVlZCAqLworI2RlZmluZSAgUENJX0VYUF9MTktTVEFfQ0xTXzJfNUdCIDB4MDEJLyogQ3VycmVudCBMaW5rIFNwZWVkIDIuNUdUL3MgKi8KKyNkZWZpbmUgIFBDSV9FWFBfTE5LU1RBX0NMU181XzBHQiAweDAyCS8qIEN1cnJlbnQgTGluayBTcGVlZCA1LjBHVC9zICovCisjZGVmaW5lICBQQ0lfRVhQX0xOS1NUQV9OTFcJMHgwM2YwCS8qIE5vZ290aWF0ZWQgTGluayBXaWR0aCAqLworI2RlZmluZSAgUENJX0VYUF9MTktTVEFfTkxXX1NISUZUIDQJLyogc3RhcnQgb2YgTkxXIG1hc2sgaW4gbGluayBzdGF0dXMgKi8KKyNkZWZpbmUgIFBDSV9FWFBfTE5LU1RBX0xUCTB4MDgwMAkvKiBMaW5rIFRyYWluaW5nICovCisjZGVmaW5lICBQQ0lfRVhQX0xOS1NUQV9TTEMJMHgxMDAwCS8qIFNsb3QgQ2xvY2sgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSAgUENJX0VYUF9MTktTVEFfRExMTEEJMHgyMDAwCS8qIERhdGEgTGluayBMYXllciBMaW5rIEFjdGl2ZSAqLworI2RlZmluZSAgUENJX0VYUF9MTktTVEFfTEJNUwkweDQwMDAJLyogTGluayBCYW5kd2lkdGggTWFuYWdlbWVudCBTdGF0dXMgKi8KKyNkZWZpbmUgIFBDSV9FWFBfTE5LU1RBX0xBQlMJMHg4MDAwCS8qIExpbmsgQXV0b25vbW91cyBCYW5kd2lkdGggU3RhdHVzICovCisjZGVmaW5lIFBDSV9FWFBfU0xUQ0FQCQkyMAkvKiBTbG90IENhcGFiaWxpdGllcyAqLworI2RlZmluZSAgUENJX0VYUF9TTFRDQVBfQUJQCTB4MDAwMDAwMDEgLyogQXR0ZW50aW9uIEJ1dHRvbiBQcmVzZW50ICovCisjZGVmaW5lICBQQ0lfRVhQX1NMVENBUF9QQ1AJMHgwMDAwMDAwMiAvKiBQb3dlciBDb250cm9sbGVyIFByZXNlbnQgKi8KKyNkZWZpbmUgIFBDSV9FWFBfU0xUQ0FQX01STFNQCTB4MDAwMDAwMDQgLyogTVJMIFNlbnNvciBQcmVzZW50ICovCisjZGVmaW5lICBQQ0lfRVhQX1NMVENBUF9BSVAJMHgwMDAwMDAwOCAvKiBBdHRlbnRpb24gSW5kaWNhdG9yIFByZXNlbnQgKi8KKyNkZWZpbmUgIFBDSV9FWFBfU0xUQ0FQX1BJUAkweDAwMDAwMDEwIC8qIFBvd2VyIEluZGljYXRvciBQcmVzZW50ICovCisjZGVmaW5lICBQQ0lfRVhQX1NMVENBUF9IUFMJMHgwMDAwMDAyMCAvKiBIb3QtUGx1ZyBTdXJwcmlzZSAqLworI2RlZmluZSAgUENJX0VYUF9TTFRDQVBfSFBDCTB4MDAwMDAwNDAgLyogSG90LVBsdWcgQ2FwYWJsZSAqLworI2RlZmluZSAgUENJX0VYUF9TTFRDQVBfU1BMVgkweDAwMDA3ZjgwIC8qIFNsb3QgUG93ZXIgTGltaXQgVmFsdWUgKi8KKyNkZWZpbmUgIFBDSV9FWFBfU0xUQ0FQX1NQTFMJMHgwMDAxODAwMCAvKiBTbG90IFBvd2VyIExpbWl0IFNjYWxlICovCisjZGVmaW5lICBQQ0lfRVhQX1NMVENBUF9FSVAJMHgwMDAyMDAwMCAvKiBFbGVjdHJvbWVjaGFuaWNhbCBJbnRlcmxvY2sgUHJlc2VudCAqLworI2RlZmluZSAgUENJX0VYUF9TTFRDQVBfTkNDUwkweDAwMDQwMDAwIC8qIE5vIENvbW1hbmQgQ29tcGxldGVkIFN1cHBvcnQgKi8KKyNkZWZpbmUgIFBDSV9FWFBfU0xUQ0FQX1BTTgkweGZmZjgwMDAwIC8qIFBoeXNpY2FsIFNsb3QgTnVtYmVyICovCisjZGVmaW5lIFBDSV9FWFBfU0xUQ1RMCQkyNAkvKiBTbG90IENvbnRyb2wgKi8KKyNkZWZpbmUgIFBDSV9FWFBfU0xUQ1RMX0FCUEUJMHgwMDAxCS8qIEF0dGVudGlvbiBCdXR0b24gUHJlc3NlZCBFbmFibGUgKi8KKyNkZWZpbmUgIFBDSV9FWFBfU0xUQ1RMX1BGREUJMHgwMDAyCS8qIFBvd2VyIEZhdWx0IERldGVjdGVkIEVuYWJsZSAqLworI2RlZmluZSAgUENJX0VYUF9TTFRDVExfTVJMU0NFCTB4MDAwNAkvKiBNUkwgU2Vuc29yIENoYW5nZWQgRW5hYmxlICovCisjZGVmaW5lICBQQ0lfRVhQX1NMVENUTF9QRENFCTB4MDAwOAkvKiBQcmVzZW5jZSBEZXRlY3QgQ2hhbmdlZCBFbmFibGUgKi8KKyNkZWZpbmUgIFBDSV9FWFBfU0xUQ1RMX0NDSUUJMHgwMDEwCS8qIENvbW1hbmQgQ29tcGxldGVkIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgIFBDSV9FWFBfU0xUQ1RMX0hQSUUJMHgwMDIwCS8qIEhvdC1QbHVnIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgIFBDSV9FWFBfU0xUQ1RMX0FJQwkweDAwYzAJLyogQXR0ZW50aW9uIEluZGljYXRvciBDb250cm9sICovCisjZGVmaW5lICBQQ0lfRVhQX1NMVENUTF9QSUMJMHgwMzAwCS8qIFBvd2VyIEluZGljYXRvciBDb250cm9sICovCisjZGVmaW5lICBQQ0lfRVhQX1NMVENUTF9QQ0MJMHgwNDAwCS8qIFBvd2VyIENvbnRyb2xsZXIgQ29udHJvbCAqLworI2RlZmluZSAgUENJX0VYUF9TTFRDVExfRUlDCTB4MDgwMAkvKiBFbGVjdHJvbWVjaGFuaWNhbCBJbnRlcmxvY2sgQ29udHJvbCAqLworI2RlZmluZSAgUENJX0VYUF9TTFRDVExfRExMU0NFCTB4MTAwMAkvKiBEYXRhIExpbmsgTGF5ZXIgU3RhdGUgQ2hhbmdlZCBFbmFibGUgKi8KKyNkZWZpbmUgUENJX0VYUF9TTFRTVEEJCTI2CS8qIFNsb3QgU3RhdHVzICovCisjZGVmaW5lICBQQ0lfRVhQX1NMVFNUQV9BQlAJMHgwMDAxCS8qIEF0dGVudGlvbiBCdXR0b24gUHJlc3NlZCAqLworI2RlZmluZSAgUENJX0VYUF9TTFRTVEFfUEZECTB4MDAwMgkvKiBQb3dlciBGYXVsdCBEZXRlY3RlZCAqLworI2RlZmluZSAgUENJX0VYUF9TTFRTVEFfTVJMU0MJMHgwMDA0CS8qIE1STCBTZW5zb3IgQ2hhbmdlZCAqLworI2RlZmluZSAgUENJX0VYUF9TTFRTVEFfUERDCTB4MDAwOAkvKiBQcmVzZW5jZSBEZXRlY3QgQ2hhbmdlZCAqLworI2RlZmluZSAgUENJX0VYUF9TTFRTVEFfQ0MJMHgwMDEwCS8qIENvbW1hbmQgQ29tcGxldGVkICovCisjZGVmaW5lICBQQ0lfRVhQX1NMVFNUQV9NUkxTUwkweDAwMjAJLyogTVJMIFNlbnNvciBTdGF0ZSAqLworI2RlZmluZSAgUENJX0VYUF9TTFRTVEFfUERTCTB4MDA0MAkvKiBQcmVzZW5jZSBEZXRlY3QgU3RhdGUgKi8KKyNkZWZpbmUgIFBDSV9FWFBfU0xUU1RBX0VJUwkweDAwODAJLyogRWxlY3Ryb21lY2hhbmljYWwgSW50ZXJsb2NrIFN0YXR1cyAqLworI2RlZmluZSAgUENJX0VYUF9TTFRTVEFfRExMU0MJMHgwMTAwCS8qIERhdGEgTGluayBMYXllciBTdGF0ZSBDaGFuZ2VkICovCisjZGVmaW5lIFBDSV9FWFBfUlRDVEwJCTI4CS8qIFJvb3QgQ29udHJvbCAqLworI2RlZmluZSAgUENJX0VYUF9SVENUTF9TRUNFRQkweDAxCS8qIFN5c3RlbSBFcnJvciBvbiBDb3JyZWN0YWJsZSBFcnJvciAqLworI2RlZmluZSAgUENJX0VYUF9SVENUTF9TRU5GRUUJMHgwMgkvKiBTeXN0ZW0gRXJyb3Igb24gTm9uLUZhdGFsIEVycm9yICovCisjZGVmaW5lICBQQ0lfRVhQX1JUQ1RMX1NFRkVFCTB4MDQJLyogU3lzdGVtIEVycm9yIG9uIEZhdGFsIEVycm9yICovCisjZGVmaW5lICBQQ0lfRVhQX1JUQ1RMX1BNRUlFCTB4MDgJLyogUE1FIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgIFBDSV9FWFBfUlRDVExfQ1JTU1ZFCTB4MTAJLyogQ1JTIFNvZnR3YXJlIFZpc2liaWxpdHkgRW5hYmxlICovCisjZGVmaW5lIFBDSV9FWFBfUlRDQVAJCTMwCS8qIFJvb3QgQ2FwYWJpbGl0aWVzICovCisjZGVmaW5lIFBDSV9FWFBfUlRTVEEJCTMyCS8qIFJvb3QgU3RhdHVzICovCisjZGVmaW5lIFBDSV9FWFBfREVWQ0FQMgkJMzYJLyogRGV2aWNlIENhcGFiaWxpdGllcyAyICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVkNBUDJfQVJJCTB4MjAJLyogQWx0ZXJuYXRpdmUgUm91dGluZy1JRCAqLworI2RlZmluZSBQQ0lfRVhQX0RFVkNUTDIJCTQwCS8qIERldmljZSBDb250cm9sIDIgKi8KKyNkZWZpbmUgIFBDSV9FWFBfREVWQ1RMMl9BUkkJMHgyMAkvKiBBbHRlcm5hdGl2ZSBSb3V0aW5nLUlEICovCisjZGVmaW5lIFBDSV9FWFBfTE5LQ1RMMgkJNDgJLyogTGluayBDb250cm9sIDIgKi8KKyNkZWZpbmUgUENJX0VYUF9TTFRDVEwyCQk1NgkvKiBTbG90IENvbnRyb2wgMiAqLworCisvKiBFeHRlbmRlZCBDYXBhYmlsaXRpZXMgKFBDSS1YIDIuMCBhbmQgRXhwcmVzcykgKi8KKyNkZWZpbmUgUENJX0VYVF9DQVBfSUQoaGVhZGVyKQkJKGhlYWRlciAmIDB4MDAwMGZmZmYpCisjZGVmaW5lIFBDSV9FWFRfQ0FQX1ZFUihoZWFkZXIpCQkoKGhlYWRlciA+PiAxNikgJiAweGYpCisjZGVmaW5lIFBDSV9FWFRfQ0FQX05FWFQoaGVhZGVyKQkoKGhlYWRlciA+PiAyMCkgJiAweGZmYykKKworI2RlZmluZSBQQ0lfRVhUX0NBUF9JRF9FUlIJMQorI2RlZmluZSBQQ0lfRVhUX0NBUF9JRF9WQwkyCisjZGVmaW5lIFBDSV9FWFRfQ0FQX0lEX0RTTgkzCisjZGVmaW5lIFBDSV9FWFRfQ0FQX0lEX1BXUgk0CisjZGVmaW5lIFBDSV9FWFRfQ0FQX0lEX1ZORFIJMTEKKyNkZWZpbmUgUENJX0VYVF9DQVBfSURfQUNTCTEzCisjZGVmaW5lIFBDSV9FWFRfQ0FQX0lEX0FSSQkxNAorI2RlZmluZSBQQ0lfRVhUX0NBUF9JRF9BVFMJMTUKKyNkZWZpbmUgUENJX0VYVF9DQVBfSURfU1JJT1YJMTYKKworLyogQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nICovCisjZGVmaW5lIFBDSV9FUlJfVU5DT1JfU1RBVFVTCTQJLyogVW5jb3JyZWN0YWJsZSBFcnJvciBTdGF0dXMgKi8KKyNkZWZpbmUgIFBDSV9FUlJfVU5DX1RSQUlOCTB4MDAwMDAwMDEJLyogVHJhaW5pbmcgKi8KKyNkZWZpbmUgIFBDSV9FUlJfVU5DX0RMUAkweDAwMDAwMDEwCS8qIERhdGEgTGluayBQcm90b2NvbCAqLworI2RlZmluZSAgUENJX0VSUl9VTkNfUE9JU09OX1RMUAkweDAwMDAxMDAwCS8qIFBvaXNvbmVkIFRMUCAqLworI2RlZmluZSAgUENJX0VSUl9VTkNfRkNQCTB4MDAwMDIwMDAJLyogRmxvdyBDb250cm9sIFByb3RvY29sICovCisjZGVmaW5lICBQQ0lfRVJSX1VOQ19DT01QX1RJTUUJMHgwMDAwNDAwMAkvKiBDb21wbGV0aW9uIFRpbWVvdXQgKi8KKyNkZWZpbmUgIFBDSV9FUlJfVU5DX0NPTVBfQUJPUlQJMHgwMDAwODAwMAkvKiBDb21wbGV0ZXIgQWJvcnQgKi8KKyNkZWZpbmUgIFBDSV9FUlJfVU5DX1VOWF9DT01QCTB4MDAwMTAwMDAJLyogVW5leHBlY3RlZCBDb21wbGV0aW9uICovCisjZGVmaW5lICBQQ0lfRVJSX1VOQ19SWF9PVkVSCTB4MDAwMjAwMDAJLyogUmVjZWl2ZXIgT3ZlcmZsb3cgKi8KKyNkZWZpbmUgIFBDSV9FUlJfVU5DX01BTEZfVExQCTB4MDAwNDAwMDAJLyogTWFsZm9ybWVkIFRMUCAqLworI2RlZmluZSAgUENJX0VSUl9VTkNfRUNSQwkweDAwMDgwMDAwCS8qIEVDUkMgRXJyb3IgU3RhdHVzICovCisjZGVmaW5lICBQQ0lfRVJSX1VOQ19VTlNVUAkweDAwMTAwMDAwCS8qIFVuc3VwcG9ydGVkIFJlcXVlc3QgKi8KKyNkZWZpbmUgUENJX0VSUl9VTkNPUl9NQVNLCTgJLyogVW5jb3JyZWN0YWJsZSBFcnJvciBNYXNrICovCisJLyogU2FtZSBiaXRzIGFzIGFib3ZlICovCisjZGVmaW5lIFBDSV9FUlJfVU5DT1JfU0VWRVIJMTIJLyogVW5jb3JyZWN0YWJsZSBFcnJvciBTZXZlcml0eSAqLworCS8qIFNhbWUgYml0cyBhcyBhYm92ZSAqLworI2RlZmluZSBQQ0lfRVJSX0NPUl9TVEFUVVMJMTYJLyogQ29ycmVjdGFibGUgRXJyb3IgU3RhdHVzICovCisjZGVmaW5lICBQQ0lfRVJSX0NPUl9SQ1ZSCTB4MDAwMDAwMDEJLyogUmVjZWl2ZXIgRXJyb3IgU3RhdHVzICovCisjZGVmaW5lICBQQ0lfRVJSX0NPUl9CQURfVExQCTB4MDAwMDAwNDAJLyogQmFkIFRMUCBTdGF0dXMgKi8KKyNkZWZpbmUgIFBDSV9FUlJfQ09SX0JBRF9ETExQCTB4MDAwMDAwODAJLyogQmFkIERMTFAgU3RhdHVzICovCisjZGVmaW5lICBQQ0lfRVJSX0NPUl9SRVBfUk9MTAkweDAwMDAwMTAwCS8qIFJFUExBWV9OVU0gUm9sbG92ZXIgKi8KKyNkZWZpbmUgIFBDSV9FUlJfQ09SX1JFUF9USU1FUgkweDAwMDAxMDAwCS8qIFJlcGxheSBUaW1lciBUaW1lb3V0ICovCisjZGVmaW5lIFBDSV9FUlJfQ09SX01BU0sJMjAJLyogQ29ycmVjdGFibGUgRXJyb3IgTWFzayAqLworCS8qIFNhbWUgYml0cyBhcyBhYm92ZSAqLworI2RlZmluZSBQQ0lfRVJSX0NBUAkJMjQJLyogQWR2YW5jZWQgRXJyb3IgQ2FwYWJpbGl0aWVzICovCisjZGVmaW5lICBQQ0lfRVJSX0NBUF9GRVAoeCkJKCh4KSAmIDMxKQkvKiBGaXJzdCBFcnJvciBQb2ludGVyICovCisjZGVmaW5lICBQQ0lfRVJSX0NBUF9FQ1JDX0dFTkMJMHgwMDAwMDAyMAkvKiBFQ1JDIEdlbmVyYXRpb24gQ2FwYWJsZSAqLworI2RlZmluZSAgUENJX0VSUl9DQVBfRUNSQ19HRU5FCTB4MDAwMDAwNDAJLyogRUNSQyBHZW5lcmF0aW9uIEVuYWJsZSAqLworI2RlZmluZSAgUENJX0VSUl9DQVBfRUNSQ19DSEtDCTB4MDAwMDAwODAJLyogRUNSQyBDaGVjayBDYXBhYmxlICovCisjZGVmaW5lICBQQ0lfRVJSX0NBUF9FQ1JDX0NIS0UJMHgwMDAwMDEwMAkvKiBFQ1JDIENoZWNrIEVuYWJsZSAqLworI2RlZmluZSBQQ0lfRVJSX0hFQURFUl9MT0cJMjgJLyogSGVhZGVyIExvZyBSZWdpc3RlciAoMTYgYnl0ZXMpICovCisjZGVmaW5lIFBDSV9FUlJfUk9PVF9DT01NQU5ECTQ0CS8qIFJvb3QgRXJyb3IgQ29tbWFuZCAqLworLyogQ29ycmVjdGFibGUgRXJyIFJlcG9ydGluZyBFbmFibGUgKi8KKyNkZWZpbmUgUENJX0VSUl9ST09UX0NNRF9DT1JfRU4JCTB4MDAwMDAwMDEKKy8qIE5vbi1mYXRhbCBFcnIgUmVwb3J0aW5nIEVuYWJsZSAqLworI2RlZmluZSBQQ0lfRVJSX1JPT1RfQ01EX05PTkZBVEFMX0VOCTB4MDAwMDAwMDIKKy8qIEZhdGFsIEVyciBSZXBvcnRpbmcgRW5hYmxlICovCisjZGVmaW5lIFBDSV9FUlJfUk9PVF9DTURfRkFUQUxfRU4JMHgwMDAwMDAwNAorI2RlZmluZSBQQ0lfRVJSX1JPT1RfU1RBVFVTCTQ4CisjZGVmaW5lIFBDSV9FUlJfUk9PVF9DT1JfUkNWCQkweDAwMDAwMDAxCS8qIEVSUl9DT1IgUmVjZWl2ZWQgKi8KKy8qIE11bHRpIEVSUl9DT1IgUmVjZWl2ZWQgKi8KKyNkZWZpbmUgUENJX0VSUl9ST09UX01VTFRJX0NPUl9SQ1YJMHgwMDAwMDAwMgorLyogRVJSX0ZBVEFML05PTkZBVEFMIFJlY2V2aWVkICovCisjZGVmaW5lIFBDSV9FUlJfUk9PVF9VTkNPUl9SQ1YJCTB4MDAwMDAwMDQKKy8qIE11bHRpIEVSUl9GQVRBTC9OT05GQVRBTCBSZWNldmllZCAqLworI2RlZmluZSBQQ0lfRVJSX1JPT1RfTVVMVElfVU5DT1JfUkNWCTB4MDAwMDAwMDgKKyNkZWZpbmUgUENJX0VSUl9ST09UX0ZJUlNUX0ZBVEFMCTB4MDAwMDAwMTAJLyogRmlyc3QgRmF0YWwgKi8KKyNkZWZpbmUgUENJX0VSUl9ST09UX05PTkZBVEFMX1JDVgkweDAwMDAwMDIwCS8qIE5vbi1GYXRhbCBSZWNlaXZlZCAqLworI2RlZmluZSBQQ0lfRVJSX1JPT1RfRkFUQUxfUkNWCQkweDAwMDAwMDQwCS8qIEZhdGFsIFJlY2VpdmVkICovCisjZGVmaW5lIFBDSV9FUlJfUk9PVF9FUlJfU1JDCTUyCS8qIEVycm9yIFNvdXJjZSBJZGVudGlmaWNhdGlvbiAqLworCisvKiBWaXJ0dWFsIENoYW5uZWwgKi8KKyNkZWZpbmUgUENJX1ZDX1BPUlRfUkVHMQk0CisjZGVmaW5lIFBDSV9WQ19QT1JUX1JFRzIJOAorI2RlZmluZSBQQ0lfVkNfUE9SVF9DVFJMCTEyCisjZGVmaW5lIFBDSV9WQ19QT1JUX1NUQVRVUwkxNAorI2RlZmluZSBQQ0lfVkNfUkVTX0NBUAkJMTYKKyNkZWZpbmUgUENJX1ZDX1JFU19DVFJMCQkyMAorI2RlZmluZSBQQ0lfVkNfUkVTX1NUQVRVUwkyNgorCisvKiBQb3dlciBCdWRnZXRpbmcgKi8KKyNkZWZpbmUgUENJX1BXUl9EU1IJCTQJLyogRGF0YSBTZWxlY3QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJX1BXUl9EQVRBCQk4CS8qIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgIFBDSV9QV1JfREFUQV9CQVNFKHgpCSgoeCkgJiAweGZmKQkgICAgLyogQmFzZSBQb3dlciAqLworI2RlZmluZSAgUENJX1BXUl9EQVRBX1NDQUxFKHgpCSgoKHgpID4+IDgpICYgMykgICAgLyogRGF0YSBTY2FsZSAqLworI2RlZmluZSAgUENJX1BXUl9EQVRBX1BNX1NVQih4KQkoKCh4KSA+PiAxMCkgJiA3KSAgIC8qIFBNIFN1YiBTdGF0ZSAqLworI2RlZmluZSAgUENJX1BXUl9EQVRBX1BNX1NUQVRFKHgpICgoKHgpID4+IDEzKSAmIDMpIC8qIFBNIFN0YXRlICovCisjZGVmaW5lICBQQ0lfUFdSX0RBVEFfVFlQRSh4KQkoKCh4KSA+PiAxNSkgJiA3KSAgIC8qIFR5cGUgKi8KKyNkZWZpbmUgIFBDSV9QV1JfREFUQV9SQUlMKHgpCSgoKHgpID4+IDE4KSAmIDcpICAgLyogUG93ZXIgUmFpbCAqLworI2RlZmluZSBQQ0lfUFdSX0NBUAkJMTIJLyogQ2FwYWJpbGl0eSAqLworI2RlZmluZSAgUENJX1BXUl9DQVBfQlVER0VUKHgpCSgoeCkgJiAxKQkvKiBJbmNsdWRlZCBpbiBzeXN0ZW0gYnVkZ2V0ICovCisKKy8qCisgKiBIeXBlcnRyYW5zcG9ydCBzdWIgY2FwYWJpbGl0eSB0eXBlcworICoKKyAqIFVuZm9ydHVuYXRlbHkgdGhlcmUgYXJlIGJvdGggMyBiaXQgYW5kIDUgYml0IGNhcGFiaWxpdHkgdHlwZXMgZGVmaW5lZAorICogaW4gdGhlIEhUIHNwZWMsIGNhdGVyaW5nIGZvciB0aGF0IGlzIGEgbGl0dGxlIG1lc3N5LiBZb3UgcHJvYmFibHkgZG9uJ3QKKyAqIHdhbnQgdG8gdXNlIHRoZXNlIGRpcmVjdGx5LCBqdXN0IHVzZSBwY2lfZmluZF9odF9jYXBhYmlsaXR5KCkgYW5kIGl0CisgKiB3aWxsIGRvIHRoZSByaWdodCB0aGluZyBmb3IgeW91LgorICovCisjZGVmaW5lIEhUXzNCSVRfQ0FQX01BU0sJMHhFMAorI2RlZmluZSBIVF9DQVBUWVBFX1NMQVZFCTB4MDAJLyogU2xhdmUvUHJpbWFyeSBsaW5rIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgSFRfQ0FQVFlQRV9IT1NUCQkweDIwCS8qIEhvc3QvU2Vjb25kYXJ5IGxpbmsgY29uZmlndXJhdGlvbiAqLworCisjZGVmaW5lIEhUXzVCSVRfQ0FQX01BU0sJMHhGOAorI2RlZmluZSBIVF9DQVBUWVBFX0lSUQkJMHg4MAkvKiBJUlEgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBIVF9DQVBUWVBFX1JFTUFQUElOR180MAkweEEwCS8qIDQwIGJpdCBhZGRyZXNzIHJlbWFwcGluZyAqLworI2RlZmluZSBIVF9DQVBUWVBFX1JFTUFQUElOR182NCAweEEyCS8qIDY0IGJpdCBhZGRyZXNzIHJlbWFwcGluZyAqLworI2RlZmluZSBIVF9DQVBUWVBFX1VOSVRJRF9DTFVNUAkweDkwCS8qIFVuaXQgSUQgY2x1bXBpbmcgKi8KKyNkZWZpbmUgSFRfQ0FQVFlQRV9FWFRDT05GCTB4OTgJLyogRXh0ZW5kZWQgQ29uZmlndXJhdGlvbiBTcGFjZSBBY2Nlc3MgKi8KKyNkZWZpbmUgSFRfQ0FQVFlQRV9NU0lfTUFQUElORwkweEE4CS8qIE1TSSBNYXBwaW5nIENhcGFiaWxpdHkgKi8KKyNkZWZpbmUgIEhUX01TSV9GTEFHUwkJMHgwMgkJLyogT2Zmc2V0IHRvIGZsYWdzICovCisjZGVmaW5lICBIVF9NU0lfRkxBR1NfRU5BQkxFCTB4MQkJLyogTWFwcGluZyBlbmFibGUgKi8KKyNkZWZpbmUgIEhUX01TSV9GTEFHU19GSVhFRAkweDIJCS8qIEZpeGVkIG1hcHBpbmcgb25seSAqLworI2RlZmluZSAgSFRfTVNJX0ZJWEVEX0FERFIJMHgwMDAwMDAwMEZFRTAwMDAwVUxMCS8qIEZpeGVkIGFkZHIgKi8KKyNkZWZpbmUgIEhUX01TSV9BRERSX0xPCQkweDA0CQkvKiBPZmZzZXQgdG8gbG93IGFkZHIgYml0cyAqLworI2RlZmluZSAgSFRfTVNJX0FERFJfTE9fTUFTSwkweEZGRjAwMDAwCS8qIExvdyBhZGRyZXNzIGJpdCBtYXNrICovCisjZGVmaW5lICBIVF9NU0lfQUREUl9ISQkJMHgwOAkJLyogT2Zmc2V0IHRvIGhpZ2ggYWRkciBiaXRzICovCisjZGVmaW5lIEhUX0NBUFRZUEVfRElSRUNUX1JPVVRFCTB4QjAJLyogRGlyZWN0IHJvdXRpbmcgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSBIVF9DQVBUWVBFX1ZDU0VUCTB4QjgJLyogVmlydHVhbCBDaGFubmVsIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgSFRfQ0FQVFlQRV9FUlJPUl9SRVRSWQkweEMwCS8qIFJldHJ5IG9uIGVycm9yIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgSFRfQ0FQVFlQRV9HRU4zCQkweEQwCS8qIEdlbmVyYXRpb24gMyBoeXBlcnRyYW5zcG9ydCBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIEhUX0NBUFRZUEVfUE0JCTB4RTAJLyogSHlwZXJ0cmFuc3BvcnQgcG93ZXJtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gKi8KKworLyogQWx0ZXJuYXRpdmUgUm91dGluZy1JRCBJbnRlcnByZXRhdGlvbiAqLworI2RlZmluZSBQQ0lfQVJJX0NBUAkJMHgwNAkvKiBBUkkgQ2FwYWJpbGl0eSBSZWdpc3RlciAqLworI2RlZmluZSAgUENJX0FSSV9DQVBfTUZWQwkweDAwMDEJLyogTUZWQyBGdW5jdGlvbiBHcm91cHMgQ2FwYWJpbGl0eSAqLworI2RlZmluZSAgUENJX0FSSV9DQVBfQUNTCTB4MDAwMgkvKiBBQ1MgRnVuY3Rpb24gR3JvdXBzIENhcGFiaWxpdHkgKi8KKyNkZWZpbmUgIFBDSV9BUklfQ0FQX05GTih4KQkoKCh4KSA+PiA4KSAmIDB4ZmYpIC8qIE5leHQgRnVuY3Rpb24gTnVtYmVyICovCisjZGVmaW5lIFBDSV9BUklfQ1RSTAkJMHgwNgkvKiBBUkkgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgUENJX0FSSV9DVFJMX01GVkMJMHgwMDAxCS8qIE1GVkMgRnVuY3Rpb24gR3JvdXBzIEVuYWJsZSAqLworI2RlZmluZSAgUENJX0FSSV9DVFJMX0FDUwkweDAwMDIJLyogQUNTIEZ1bmN0aW9uIEdyb3VwcyBFbmFibGUgKi8KKyNkZWZpbmUgIFBDSV9BUklfQ1RSTF9GRyh4KQkoKCh4KSA+PiA0KSAmIDcpIC8qIEZ1bmN0aW9uIEdyb3VwICovCisKKy8qIEFkZHJlc3MgVHJhbnNsYXRpb24gU2VydmljZSAqLworI2RlZmluZSBQQ0lfQVRTX0NBUAkJMHgwNAkvKiBBVFMgQ2FwYWJpbGl0eSBSZWdpc3RlciAqLworI2RlZmluZSAgUENJX0FUU19DQVBfUURFUCh4KQkoKHgpICYgMHgxZikJLyogSW52YWxpZGF0ZSBRdWV1ZSBEZXB0aCAqLworI2RlZmluZSAgUENJX0FUU19NQVhfUURFUAkzMgkvKiBNYXggSW52YWxpZGF0ZSBRdWV1ZSBEZXB0aCAqLworI2RlZmluZSBQQ0lfQVRTX0NUUkwJCTB4MDYJLyogQVRTIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgIFBDSV9BVFNfQ1RSTF9FTkFCTEUJMHg4MDAwCS8qIEFUUyBFbmFibGUgKi8KKyNkZWZpbmUgIFBDSV9BVFNfQ1RSTF9TVFUoeCkJKCh4KSAmIDB4MWYpCS8qIFNtYWxsZXN0IFRyYW5zbGF0aW9uIFVuaXQgKi8KKyNkZWZpbmUgIFBDSV9BVFNfTUlOX1NUVQkxMgkvKiBzaGlmdCBvZiBtaW5pbXVtIFNUVSBibG9jayAqLworCisvKiBTaW5nbGUgUm9vdCBJL08gVmlydHVhbGl6YXRpb24gKi8KKyNkZWZpbmUgUENJX1NSSU9WX0NBUAkJMHgwNAkvKiBTUi1JT1YgQ2FwYWJpbGl0aWVzICovCisjZGVmaW5lICBQQ0lfU1JJT1ZfQ0FQX1ZGTQkweDAxCS8qIFZGIE1pZ3JhdGlvbiBDYXBhYmxlICovCisjZGVmaW5lICBQQ0lfU1JJT1ZfQ0FQX0lOVFIoeCkJKCh4KSA+PiAyMSkgLyogSW50ZXJydXB0IE1lc3NhZ2UgTnVtYmVyICovCisjZGVmaW5lIFBDSV9TUklPVl9DVFJMCQkweDA4CS8qIFNSLUlPViBDb250cm9sICovCisjZGVmaW5lICBQQ0lfU1JJT1ZfQ1RSTF9WRkUJMHgwMQkvKiBWRiBFbmFibGUgKi8KKyNkZWZpbmUgIFBDSV9TUklPVl9DVFJMX1ZGTQkweDAyCS8qIFZGIE1pZ3JhdGlvbiBFbmFibGUgKi8KKyNkZWZpbmUgIFBDSV9TUklPVl9DVFJMX0lOVFIJMHgwNAkvKiBWRiBNaWdyYXRpb24gSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgUENJX1NSSU9WX0NUUkxfTVNFCTB4MDgJLyogVkYgTWVtb3J5IFNwYWNlIEVuYWJsZSAqLworI2RlZmluZSAgUENJX1NSSU9WX0NUUkxfQVJJCTB4MTAJLyogQVJJIENhcGFibGUgSGllcmFyY2h5ICovCisjZGVmaW5lIFBDSV9TUklPVl9TVEFUVVMJMHgwYQkvKiBTUi1JT1YgU3RhdHVzICovCisjZGVmaW5lICBQQ0lfU1JJT1ZfU1RBVFVTX1ZGTQkweDAxCS8qIFZGIE1pZ3JhdGlvbiBTdGF0dXMgKi8KKyNkZWZpbmUgUENJX1NSSU9WX0lOSVRJQUxfVkYJMHgwYwkvKiBJbml0aWFsIFZGcyAqLworI2RlZmluZSBQQ0lfU1JJT1ZfVE9UQUxfVkYJMHgwZQkvKiBUb3RhbCBWRnMgKi8KKyNkZWZpbmUgUENJX1NSSU9WX05VTV9WRgkweDEwCS8qIE51bWJlciBvZiBWRnMgKi8KKyNkZWZpbmUgUENJX1NSSU9WX0ZVTkNfTElOSwkweDEyCS8qIEZ1bmN0aW9uIERlcGVuZGVuY3kgTGluayAqLworI2RlZmluZSBQQ0lfU1JJT1ZfVkZfT0ZGU0VUCTB4MTQJLyogRmlyc3QgVkYgT2Zmc2V0ICovCisjZGVmaW5lIFBDSV9TUklPVl9WRl9TVFJJREUJMHgxNgkvKiBGb2xsb3dpbmcgVkYgU3RyaWRlICovCisjZGVmaW5lIFBDSV9TUklPVl9WRl9ESUQJMHgxYQkvKiBWRiBEZXZpY2UgSUQgKi8KKyNkZWZpbmUgUENJX1NSSU9WX1NVUF9QR1NJWkUJMHgxYwkvKiBTdXBwb3J0ZWQgUGFnZSBTaXplcyAqLworI2RlZmluZSBQQ0lfU1JJT1ZfU1lTX1BHU0laRQkweDIwCS8qIFN5c3RlbSBQYWdlIFNpemUgKi8KKyNkZWZpbmUgUENJX1NSSU9WX0JBUgkJMHgyNAkvKiBWRiBCQVIwICovCisjZGVmaW5lICBQQ0lfU1JJT1ZfTlVNX0JBUlMJNgkvKiBOdW1iZXIgb2YgVkYgQkFScyAqLworI2RlZmluZSBQQ0lfU1JJT1ZfVkZNCQkweDNjCS8qIFZGIE1pZ3JhdGlvbiBTdGF0ZSBBcnJheSBPZmZzZXQqLworI2RlZmluZSAgUENJX1NSSU9WX1ZGTV9CSVIoeCkJKCh4KSAmIDcpCS8qIFN0YXRlIEJJUiAqLworI2RlZmluZSAgUENJX1NSSU9WX1ZGTV9PRkZTRVQoeCkgKCh4KSAmIH43KQkvKiBTdGF0ZSBPZmZzZXQgKi8KKyNkZWZpbmUgIFBDSV9TUklPVl9WRk1fVUEJMHgwCS8qIEluYWN0aXZlLlVuYXZhaWxhYmxlICovCisjZGVmaW5lICBQQ0lfU1JJT1ZfVkZNX01JCTB4MQkvKiBEb3JtYW50Lk1pZ3JhdGVJbiAqLworI2RlZmluZSAgUENJX1NSSU9WX1ZGTV9NTwkweDIJLyogQWN0aXZlLk1pZ3JhdGVPdXQgKi8KKyNkZWZpbmUgIFBDSV9TUklPVl9WRk1fQVYJMHgzCS8qIEFjdGl2ZS5BdmFpbGFibGUgKi8KKworLyogQWNjZXNzIENvbnRyb2wgU2VydmljZSAqLworI2RlZmluZSBQQ0lfQUNTX0NBUAkJMHgwNAkvKiBBQ1MgQ2FwYWJpbGl0eSBSZWdpc3RlciAqLworI2RlZmluZSAgUENJX0FDU19TVgkJMHgwMQkvKiBTb3VyY2UgVmFsaWRhdGlvbiAqLworI2RlZmluZSAgUENJX0FDU19UQgkJMHgwMgkvKiBUcmFuc2xhdGlvbiBCbG9ja2luZyAqLworI2RlZmluZSAgUENJX0FDU19SUgkJMHgwNAkvKiBQMlAgUmVxdWVzdCBSZWRpcmVjdCAqLworI2RlZmluZSAgUENJX0FDU19DUgkJMHgwOAkvKiBQMlAgQ29tcGxldGlvbiBSZWRpcmVjdCAqLworI2RlZmluZSAgUENJX0FDU19VRgkJMHgxMAkvKiBVcHN0cmVhbSBGb3J3YXJkaW5nICovCisjZGVmaW5lICBQQ0lfQUNTX0VDCQkweDIwCS8qIFAyUCBFZ3Jlc3MgQ29udHJvbCAqLworI2RlZmluZSAgUENJX0FDU19EVAkJMHg0MAkvKiBEaXJlY3QgVHJhbnNsYXRlZCBQMlAgKi8KKyNkZWZpbmUgUENJX0FDU19DVFJMCQkweDA2CS8qIEFDUyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSV9BQ1NfRUdSRVNTX0NUTF9WCTB4MDgJLyogQUNTIEVncmVzcyBDb250cm9sIFZlY3RvciAqLworCisjZW5kaWYgLyogTElOVVhfUENJX1JFR1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTljNjU0MAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKQEAgLTAsMCArMSw0NTggQEAKKy8qCisgKiBQZXJmb3JtYW5jZSBldmVudHM6CisgKgorICogICAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgorICogICAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyCisgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSwgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEKKyAqCisgKiBEYXRhIHR5cGUgZGVmaW5pdGlvbnMsIGRlY2xhcmF0aW9ucywgcHJvdG90eXBlcy4KKyAqCisgKiAgICBTdGFydGVkIGJ5OiBUaG9tYXMgR2xlaXhuZXIgYW5kIEluZ28gTW9sbmFyCisgKgorICogRm9yIGxpY2VuY2luZyBkZXRhaWxzIHNlZSBrZXJuZWwtYmFzZS9DT1BZSU5HCisgKi8KKyNpZm5kZWYgX0xJTlVYX1BFUkZfRVZFTlRfSAorI2RlZmluZSBfTElOVVhfUEVSRl9FVkVOVF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisvKgorICogVXNlci1zcGFjZSBBQkkgYml0czoKKyAqLworCisvKgorICogYXR0ci50eXBlCisgKi8KK2VudW0gcGVyZl90eXBlX2lkIHsKKwlQRVJGX1RZUEVfSEFSRFdBUkUJCQk9IDAsCisJUEVSRl9UWVBFX1NPRlRXQVJFCQkJPSAxLAorCVBFUkZfVFlQRV9UUkFDRVBPSU5UCQkJPSAyLAorCVBFUkZfVFlQRV9IV19DQUNIRQkJCT0gMywKKwlQRVJGX1RZUEVfUkFXCQkJCT0gNCwKKwlQRVJGX1RZUEVfQlJFQUtQT0lOVAkJCT0gNSwKKworCVBFUkZfVFlQRV9NQVgsCQkJCS8qIG5vbi1BQkkgKi8KK307CisKKy8qCisgKiBHZW5lcmFsaXplZCBwZXJmb3JtYW5jZSBldmVudCBldmVudF9pZCB0eXBlcywgdXNlZCBieSB0aGUKKyAqIGF0dHIuZXZlbnRfaWQgcGFyYW1ldGVyIG9mIHRoZSBzeXNfcGVyZl9ldmVudF9vcGVuKCkKKyAqIHN5c2NhbGw6CisgKi8KK2VudW0gcGVyZl9od19pZCB7CisJLyoKKwkgKiBDb21tb24gaGFyZHdhcmUgZXZlbnRzLCBnZW5lcmFsaXplZCBieSB0aGUga2VybmVsOgorCSAqLworCVBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUwkJPSAwLAorCVBFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TCQk9IDEsCisJUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTCQk9IDIsCisJUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVMJCT0gMywKKwlQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlMJPSA0LAorCVBFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFUwkJPSA1LAorCVBFUkZfQ09VTlRfSFdfQlVTX0NZQ0xFUwkJPSA2LAorCisJUEVSRl9DT1VOVF9IV19NQVgsCQkJLyogbm9uLUFCSSAqLworfTsKKworLyoKKyAqIEdlbmVyYWxpemVkIGhhcmR3YXJlIGNhY2hlIGV2ZW50czoKKyAqCisgKiAgICAgICB7IEwxLUQsIEwxLUksIExMQywgSVRMQiwgRFRMQiwgQlBVIH0geAorICogICAgICAgeyByZWFkLCB3cml0ZSwgcHJlZmV0Y2ggfSB4CisgKiAgICAgICB7IGFjY2Vzc2VzLCBtaXNzZXMgfQorICovCitlbnVtIHBlcmZfaHdfY2FjaGVfaWQgeworCVBFUkZfQ09VTlRfSFdfQ0FDSEVfTDFECQkJPSAwLAorCVBFUkZfQ09VTlRfSFdfQ0FDSEVfTDFJCQkJPSAxLAorCVBFUkZfQ09VTlRfSFdfQ0FDSEVfTEwJCQk9IDIsCisJUEVSRl9DT1VOVF9IV19DQUNIRV9EVExCCQk9IDMsCisJUEVSRl9DT1VOVF9IV19DQUNIRV9JVExCCQk9IDQsCisJUEVSRl9DT1VOVF9IV19DQUNIRV9CUFUJCQk9IDUsCisKKwlQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWCwJCS8qIG5vbi1BQkkgKi8KK307CisKK2VudW0gcGVyZl9od19jYWNoZV9vcF9pZCB7CisJUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9SRUFECQk9IDAsCisJUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9XUklURQkJPSAxLAorCVBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfUFJFRkVUQ0gJCT0gMiwKKworCVBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYLAkJLyogbm9uLUFCSSAqLworfTsKKworZW51bSBwZXJmX2h3X2NhY2hlX29wX3Jlc3VsdF9pZCB7CisJUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfQUNDRVNTCT0gMCwKKwlQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NSVNTCQk9IDEsCisKKwlQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVgsCQkvKiBub24tQUJJICovCit9OworCisvKgorICogU3BlY2lhbCAic29mdHdhcmUiIGV2ZW50cyBwcm92aWRlZCBieSB0aGUga2VybmVsLCBldmVuIGlmIHRoZSBoYXJkd2FyZQorICogZG9lcyBub3Qgc3VwcG9ydCBwZXJmb3JtYW5jZSBldmVudHMuIFRoZXNlIGV2ZW50cyBtZWFzdXJlIHZhcmlvdXMKKyAqIHBoeXNpY2FsIGFuZCBzdyBldmVudHMgb2YgdGhlIGtlcm5lbCAoYW5kIGFsbG93IHRoZSBwcm9maWxpbmcgb2YgdGhlbSBhcworICogd2VsbCk6CisgKi8KK2VudW0gcGVyZl9zd19pZHMgeworCVBFUkZfQ09VTlRfU1dfQ1BVX0NMT0NLCQkJPSAwLAorCVBFUkZfQ09VTlRfU1dfVEFTS19DTE9DSwkJPSAxLAorCVBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFMJCT0gMiwKKwlQRVJGX0NPVU5UX1NXX0NPTlRFWFRfU1dJVENIRVMJCT0gMywKKwlQRVJGX0NPVU5UX1NXX0NQVV9NSUdSQVRJT05TCQk9IDQsCisJUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NSU4JCT0gNSwKKwlQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSgkJPSA2LAorCVBFUkZfQ09VTlRfU1dfQUxJR05NRU5UX0ZBVUxUUwkJPSA3LAorCVBFUkZfQ09VTlRfU1dfRU1VTEFUSU9OX0ZBVUxUUwkJPSA4LAorCisJUEVSRl9DT1VOVF9TV19NQVgsCQkJLyogbm9uLUFCSSAqLworfTsKKworLyoKKyAqIEJpdHMgdGhhdCBjYW4gYmUgc2V0IGluIGF0dHIuc2FtcGxlX3R5cGUgdG8gcmVxdWVzdCBpbmZvcm1hdGlvbgorICogaW4gdGhlIG92ZXJmbG93IHBhY2tldHMuCisgKi8KK2VudW0gcGVyZl9ldmVudF9zYW1wbGVfZm9ybWF0IHsKKwlQRVJGX1NBTVBMRV9JUAkJCQk9IDFVIDw8IDAsCisJUEVSRl9TQU1QTEVfVElECQkJCT0gMVUgPDwgMSwKKwlQRVJGX1NBTVBMRV9USU1FCQkJPSAxVSA8PCAyLAorCVBFUkZfU0FNUExFX0FERFIJCQk9IDFVIDw8IDMsCisJUEVSRl9TQU1QTEVfUkVBRAkJCT0gMVUgPDwgNCwKKwlQRVJGX1NBTVBMRV9DQUxMQ0hBSU4JCQk9IDFVIDw8IDUsCisJUEVSRl9TQU1QTEVfSUQJCQkJPSAxVSA8PCA2LAorCVBFUkZfU0FNUExFX0NQVQkJCQk9IDFVIDw8IDcsCisJUEVSRl9TQU1QTEVfUEVSSU9ECQkJPSAxVSA8PCA4LAorCVBFUkZfU0FNUExFX1NUUkVBTV9JRAkJCT0gMVUgPDwgOSwKKwlQRVJGX1NBTVBMRV9SQVcJCQkJPSAxVSA8PCAxMCwKKworCVBFUkZfU0FNUExFX01BWCA9IDFVIDw8IDExLAkJLyogbm9uLUFCSSAqLworfTsKKworLyoKKyAqIFRoZSBmb3JtYXQgb2YgdGhlIGRhdGEgcmV0dXJuZWQgYnkgcmVhZCgpIG9uIGEgcGVyZiBldmVudCBmZCwKKyAqIGFzIHNwZWNpZmllZCBieSBhdHRyLnJlYWRfZm9ybWF0OgorICoKKyAqIHN0cnVjdCByZWFkX2Zvcm1hdCB7CisgKgl7IHU2NAkJdmFsdWU7CisgKgkgIHsgdTY0CQl0aW1lX2VuYWJsZWQ7IH0gJiYgUEVSRl9GT1JNQVRfRU5BQkxFRAorICoJICB7IHU2NAkJdGltZV9ydW5uaW5nOyB9ICYmIFBFUkZfRk9STUFUX1JVTk5JTkcKKyAqCSAgeyB1NjQJCWlkOyAgICAgICAgICAgfSAmJiBQRVJGX0ZPUk1BVF9JRAorICoJfSAmJiAhUEVSRl9GT1JNQVRfR1JPVVAKKyAqCisgKgl7IHU2NAkJbnI7CisgKgkgIHsgdTY0CQl0aW1lX2VuYWJsZWQ7IH0gJiYgUEVSRl9GT1JNQVRfRU5BQkxFRAorICoJICB7IHU2NAkJdGltZV9ydW5uaW5nOyB9ICYmIFBFUkZfRk9STUFUX1JVTk5JTkcKKyAqCSAgeyB1NjQJCXZhbHVlOworICoJICAgIHsgdTY0CWlkOyAgICAgICAgICAgfSAmJiBQRVJGX0ZPUk1BVF9JRAorICoJICB9CQljbnRyW25yXTsKKyAqCX0gJiYgUEVSRl9GT1JNQVRfR1JPVVAKKyAqIH07CisgKi8KK2VudW0gcGVyZl9ldmVudF9yZWFkX2Zvcm1hdCB7CisJUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9FTkFCTEVECQk9IDFVIDw8IDAsCisJUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9SVU5OSU5HCQk9IDFVIDw8IDEsCisJUEVSRl9GT1JNQVRfSUQJCQkJPSAxVSA8PCAyLAorCVBFUkZfRk9STUFUX0dST1VQCQkJPSAxVSA8PCAzLAorCisJUEVSRl9GT1JNQVRfTUFYID0gMVUgPDwgNCwJCS8qIG5vbi1BQkkgKi8KK307CisKKyNkZWZpbmUgUEVSRl9BVFRSX1NJWkVfVkVSMAk2NAkvKiBzaXplb2YgZmlyc3QgcHVibGlzaGVkIHN0cnVjdCAqLworCisvKgorICogSGFyZHdhcmUgZXZlbnRfaWQgdG8gbW9uaXRvciB2aWEgYSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIGV2ZW50OgorICovCitzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIHsKKworCS8qCisJICogTWFqb3IgdHlwZTogaGFyZHdhcmUvc29mdHdhcmUvdHJhY2Vwb2ludC9ldGMuCisJICovCisJX191MzIJCQl0eXBlOworCisJLyoKKwkgKiBTaXplIG9mIHRoZSBhdHRyIHN0cnVjdHVyZSwgZm9yIGZ3ZC9id2QgY29tcGF0LgorCSAqLworCV9fdTMyCQkJc2l6ZTsKKworCS8qCisJICogVHlwZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgorCSAqLworCV9fdTY0CQkJY29uZmlnOworCisJdW5pb24geworCQlfX3U2NAkJc2FtcGxlX3BlcmlvZDsKKwkJX191NjQJCXNhbXBsZV9mcmVxOworCX07CisKKwlfX3U2NAkJCXNhbXBsZV90eXBlOworCV9fdTY0CQkJcmVhZF9mb3JtYXQ7CisKKwlfX3U2NAkJCWRpc2FibGVkICAgICAgIDogIDEsIC8qIG9mZiBieSBkZWZhdWx0ICAgICAgICAqLworCQkJCWluaGVyaXQJICAgICAgIDogIDEsIC8qIGNoaWxkcmVuIGluaGVyaXQgaXQgICAqLworCQkJCXBpbm5lZAkgICAgICAgOiAgMSwgLyogbXVzdCBhbHdheXMgYmUgb24gUE1VICovCisJCQkJZXhjbHVzaXZlICAgICAgOiAgMSwgLyogb25seSBncm91cCBvbiBQTVUgICAgICovCisJCQkJZXhjbHVkZV91c2VyICAgOiAgMSwgLyogZG9uJ3QgY291bnQgdXNlciAgICAgICovCisJCQkJZXhjbHVkZV9rZXJuZWwgOiAgMSwgLyogZGl0dG8ga2VybmVsICAgICAgICAgICovCisJCQkJZXhjbHVkZV9odiAgICAgOiAgMSwgLyogZGl0dG8gaHlwZXJ2aXNvciAgICAgICovCisJCQkJZXhjbHVkZV9pZGxlICAgOiAgMSwgLyogZG9uJ3QgY291bnQgd2hlbiBpZGxlICovCisJCQkJbW1hcCAgICAgICAgICAgOiAgMSwgLyogaW5jbHVkZSBtbWFwIGRhdGEgICAgICovCisJCQkJY29tbQkgICAgICAgOiAgMSwgLyogaW5jbHVkZSBjb21tIGRhdGEgICAgICovCisJCQkJZnJlcSAgICAgICAgICAgOiAgMSwgLyogdXNlIGZyZXEsIG5vdCBwZXJpb2QgICovCisJCQkJaW5oZXJpdF9zdGF0ICAgOiAgMSwgLyogcGVyIHRhc2sgY291bnRzICAgICAgICovCisJCQkJZW5hYmxlX29uX2V4ZWMgOiAgMSwgLyogbmV4dCBleGVjIGVuYWJsZXMgICAgICovCisJCQkJdGFzayAgICAgICAgICAgOiAgMSwgLyogdHJhY2UgZm9yay9leGl0ICAgICAgICovCisJCQkJd2F0ZXJtYXJrICAgICAgOiAgMSwgLyogd2FrZXVwX3dhdGVybWFyayAgICAgICovCisJCQkJLyoKKwkJCQkgKiBwcmVjaXNlX2lwOgorCQkJCSAqCisJCQkJICogIDAgLSBTQU1QTEVfSVAgY2FuIGhhdmUgYXJiaXRyYXJ5IHNraWQKKwkJCQkgKiAgMSAtIFNBTVBMRV9JUCBtdXN0IGhhdmUgY29uc3RhbnQgc2tpZAorCQkJCSAqICAyIC0gU0FNUExFX0lQIHJlcXVlc3RlZCB0byBoYXZlIDAgc2tpZAorCQkJCSAqICAzIC0gU0FNUExFX0lQIG11c3QgaGF2ZSAwIHNraWQKKwkJCQkgKgorCQkJCSAqICBTZWUgYWxzbyBQRVJGX1JFQ09SRF9NSVNDX0VYQUNUX0lQCisJCQkJICovCisJCQkJcHJlY2lzZV9pcCAgICAgOiAgMiwgLyogc2tpZCBjb25zdHJhaW50ICAgICAgICovCisJCQkJbW1hcF9kYXRhICAgICAgOiAgMSwgLyogbm9uLWV4ZWMgbW1hcCBkYXRhICAgICovCisKKwkJCQlfX3Jlc2VydmVkXzEgICA6IDQ2OworCisJdW5pb24geworCQlfX3UzMgkJd2FrZXVwX2V2ZW50czsJICAvKiB3YWtldXAgZXZlcnkgbiBldmVudHMgKi8KKwkJX191MzIJCXdha2V1cF93YXRlcm1hcms7IC8qIGJ5dGVzIGJlZm9yZSB3YWtldXAgICAqLworCX07CisKKwlfX3UzMgkJCWJwX3R5cGU7CisJX191NjQJCQlicF9hZGRyOworCV9fdTY0CQkJYnBfbGVuOworfTsKKworLyoKKyAqIElvY3RscyB0aGF0IGNhbiBiZSBkb25lIG9uIGEgcGVyZiBldmVudCBmZDoKKyAqLworI2RlZmluZSBQRVJGX0VWRU5UX0lPQ19FTkFCTEUJCV9JTyAoJyQnLCAwKQorI2RlZmluZSBQRVJGX0VWRU5UX0lPQ19ESVNBQkxFCQlfSU8gKCckJywgMSkKKyNkZWZpbmUgUEVSRl9FVkVOVF9JT0NfUkVGUkVTSAkJX0lPICgnJCcsIDIpCisjZGVmaW5lIFBFUkZfRVZFTlRfSU9DX1JFU0VUCQlfSU8gKCckJywgMykKKyNkZWZpbmUgUEVSRl9FVkVOVF9JT0NfUEVSSU9ECQlfSU9XKCckJywgNCwgX191NjQpCisjZGVmaW5lIFBFUkZfRVZFTlRfSU9DX1NFVF9PVVRQVVQJX0lPICgnJCcsIDUpCisjZGVmaW5lIFBFUkZfRVZFTlRfSU9DX1NFVF9GSUxURVIJX0lPVygnJCcsIDYsIGNoYXIgKikKKworZW51bSBwZXJmX2V2ZW50X2lvY19mbGFncyB7CisJUEVSRl9JT0NfRkxBR19HUk9VUAkJPSAxVSA8PCAwLAorfTsKKworLyoKKyAqIFN0cnVjdHVyZSBvZiB0aGUgcGFnZSB0aGF0IGNhbiBiZSBtYXBwZWQgdmlhIG1tYXAKKyAqLworc3RydWN0IHBlcmZfZXZlbnRfbW1hcF9wYWdlIHsKKwlfX3UzMgl2ZXJzaW9uOwkJLyogdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBzdHJ1Y3R1cmUgKi8KKwlfX3UzMgljb21wYXRfdmVyc2lvbjsJCS8qIGxvd2VzdCB2ZXJzaW9uIHRoaXMgaXMgY29tcGF0IHdpdGggKi8KKworCS8qCisJICogQml0cyBuZWVkZWQgdG8gcmVhZCB0aGUgaHcgZXZlbnRzIGluIHVzZXItc3BhY2UuCisJICoKKwkgKiAgIHUzMiBzZXE7CisJICogICBzNjQgY291bnQ7CisJICoKKwkgKiAgIGRvIHsKKwkgKiAgICAgc2VxID0gcGMtPmxvY2s7CisJICoKKwkgKiAgICAgYmFycmllcigpCisJICogICAgIGlmIChwYy0+aW5kZXgpIHsKKwkgKiAgICAgICBjb3VudCA9IHBtY19yZWFkKHBjLT5pbmRleCAtIDEpOworCSAqICAgICAgIGNvdW50ICs9IHBjLT5vZmZzZXQ7CisJICogICAgIH0gZWxzZQorCSAqICAgICAgIGdvdG8gcmVndWxhcl9yZWFkOworCSAqCisJICogICAgIGJhcnJpZXIoKTsKKwkgKiAgIH0gd2hpbGUgKHBjLT5sb2NrICE9IHNlcSk7CisJICoKKwkgKiBOT1RFOiBmb3Igb2J2aW91cyByZWFzb24gdGhpcyBvbmx5IHdvcmtzIG9uIHNlbGYtbW9uaXRvcmluZworCSAqICAgICAgIHByb2Nlc3Nlcy4KKwkgKi8KKwlfX3UzMglsb2NrOwkJCS8qIHNlcWxvY2sgZm9yIHN5bmNocm9uaXphdGlvbiAqLworCV9fdTMyCWluZGV4OwkJCS8qIGhhcmR3YXJlIGV2ZW50IGlkZW50aWZpZXIgKi8KKwlfX3M2NAlvZmZzZXQ7CQkJLyogYWRkIHRvIGhhcmR3YXJlIGV2ZW50IHZhbHVlICovCisJX191NjQJdGltZV9lbmFibGVkOwkJLyogdGltZSBldmVudCBhY3RpdmUgKi8KKwlfX3U2NAl0aW1lX3J1bm5pbmc7CQkvKiB0aW1lIGV2ZW50IG9uIGNwdSAqLworCisJCS8qCisJCSAqIEhvbGUgZm9yIGV4dGVuc2lvbiBvZiB0aGUgc2VsZiBtb25pdG9yIGNhcGFiaWxpdGllcworCQkgKi8KKworCV9fdTY0CV9fcmVzZXJ2ZWRbMTIzXTsJLyogYWxpZ24gdG8gMWsgKi8KKworCS8qCisJICogQ29udHJvbCBkYXRhIGZvciB0aGUgbW1hcCgpIGRhdGEgYnVmZmVyLgorCSAqCisJICogVXNlci1zcGFjZSByZWFkaW5nIHRoZSBAZGF0YV9oZWFkIHZhbHVlIHNob3VsZCBpc3N1ZSBhbiBybWIoKSwgb24KKwkgKiBTTVAgY2FwYWJsZSBwbGF0Zm9ybXMsIGFmdGVyIHJlYWRpbmcgdGhpcyB2YWx1ZSAtLSBzZWUKKwkgKiBwZXJmX2V2ZW50X3dha2V1cCgpLgorCSAqCisJICogV2hlbiB0aGUgbWFwcGluZyBpcyBQUk9UX1dSSVRFIHRoZSBAZGF0YV90YWlsIHZhbHVlIHNob3VsZCBiZQorCSAqIHdyaXR0ZW4gYnkgdXNlcnNwYWNlIHRvIHJlZmxlY3QgdGhlIGxhc3QgcmVhZCBkYXRhLiBJbiB0aGlzIGNhc2UKKwkgKiB0aGUga2VybmVsIHdpbGwgbm90IG92ZXItd3JpdGUgdW5yZWFkIGRhdGEuCisJICovCisJX191NjQgICBkYXRhX2hlYWQ7CQkvKiBoZWFkIGluIHRoZSBkYXRhIHNlY3Rpb24gKi8KKwlfX3U2NAlkYXRhX3RhaWw7CQkvKiB1c2VyLXNwYWNlIHdyaXR0ZW4gdGFpbCAqLworfTsKKworI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfTUFTSwkJKDcgPDwgMCkKKyNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX1VOS05PV04JKDAgPDwgMCkKKyNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19LRVJORUwJCQkoMSA8PCAwKQorI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX1VTRVIJCQkoMiA8PCAwKQorI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX0hZUEVSVklTT1IJCSgzIDw8IDApCisjZGVmaW5lIFBFUkZfUkVDT1JEX01JU0NfR1VFU1RfS0VSTkVMCQkoNCA8PCAwKQorI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX0dVRVNUX1VTRVIJCSg1IDw8IDApCisKKy8qCisgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgY29udGVudCBvZiBQRVJGX1NBTVBMRV9JUCBwb2ludHMgdG8KKyAqIHRoZSBhY3R1YWwgaW5zdHJ1Y3Rpb24gdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50LiBTZWUgYWxzbworICogcGVyZl9ldmVudF9hdHRyOjpwcmVjaXNlX2lwLgorICovCisjZGVmaW5lIFBFUkZfUkVDT1JEX01JU0NfRVhBQ1RfSVAJCSgxIDw8IDE0KQorLyoKKyAqIFJlc2VydmUgdGhlIGxhc3QgYml0IHRvIGluZGljYXRlIHNvbWUgZXh0ZW5kZWQgbWlzYyBmaWVsZAorICovCisjZGVmaW5lIFBFUkZfUkVDT1JEX01JU0NfRVhUX1JFU0VSVkVECQkoMSA8PCAxNSkKKworc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyIHsKKwlfX3UzMgl0eXBlOworCV9fdTE2CW1pc2M7CisJX191MTYJc2l6ZTsKK307CisKK2VudW0gcGVyZl9ldmVudF90eXBlIHsKKworCS8qCisJICogVGhlIE1NQVAgZXZlbnRzIHJlY29yZCB0aGUgUFJPVF9FWEVDIG1hcHBpbmdzIHNvIHRoYXQgd2UgY2FuCisJICogY29ycmVsYXRlIHVzZXJzcGFjZSBJUHMgdG8gY29kZS4gVGhleSBoYXZlIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOgorCSAqCisJICogc3RydWN0IHsKKwkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOworCSAqCisJICoJdTMyCQkJCXBpZCwgdGlkOworCSAqCXU2NAkJCQlhZGRyOworCSAqCXU2NAkJCQlsZW47CisJICoJdTY0CQkJCXBnb2ZmOworCSAqCWNoYXIJCQkJZmlsZW5hbWVbXTsKKwkgKiB9OworCSAqLworCVBFUkZfUkVDT1JEX01NQVAJCQk9IDEsCisKKwkvKgorCSAqIHN0cnVjdCB7CisJICoJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKKwkgKgl1NjQJCQkJaWQ7CisJICoJdTY0CQkJCWxvc3Q7CisJICogfTsKKwkgKi8KKwlQRVJGX1JFQ09SRF9MT1NUCQkJPSAyLAorCisJLyoKKwkgKiBzdHJ1Y3QgeworCSAqCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7CisJICoKKwkgKgl1MzIJCQkJcGlkLCB0aWQ7CisJICoJY2hhcgkJCQljb21tW107CisJICogfTsKKwkgKi8KKwlQRVJGX1JFQ09SRF9DT01NCQkJPSAzLAorCisJLyoKKwkgKiBzdHJ1Y3QgeworCSAqCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7CisJICoJdTMyCQkJCXBpZCwgcHBpZDsKKwkgKgl1MzIJCQkJdGlkLCBwdGlkOworCSAqCXU2NAkJCQl0aW1lOworCSAqIH07CisJICovCisJUEVSRl9SRUNPUkRfRVhJVAkJCT0gNCwKKworCS8qCisJICogc3RydWN0IHsKKwkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOworCSAqCXU2NAkJCQl0aW1lOworCSAqCXU2NAkJCQlpZDsKKwkgKgl1NjQJCQkJc3RyZWFtX2lkOworCSAqIH07CisJICovCisJUEVSRl9SRUNPUkRfVEhST1RUTEUJCQk9IDUsCisJUEVSRl9SRUNPUkRfVU5USFJPVFRMRQkJCT0gNiwKKworCS8qCisJICogc3RydWN0IHsKKwkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOworCSAqCXUzMgkJCQlwaWQsIHBwaWQ7CisJICoJdTMyCQkJCXRpZCwgcHRpZDsKKwkgKgl1NjQJCQkJdGltZTsKKwkgKiB9OworCSAqLworCVBFUkZfUkVDT1JEX0ZPUksJCQk9IDcsCisKKwkvKgorCSAqIHN0cnVjdCB7CisJICoJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKKwkgKgl1MzIJCQkJcGlkLCB0aWQ7CisJICoKKwkgKglzdHJ1Y3QgcmVhZF9mb3JtYXQJCXZhbHVlczsKKwkgKiB9OworCSAqLworCVBFUkZfUkVDT1JEX1JFQUQJCQk9IDgsCisKKwkvKgorCSAqIHN0cnVjdCB7CisJICoJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKKwkgKgorCSAqCXsgdTY0CQkJaXA7CSAgfSAmJiBQRVJGX1NBTVBMRV9JUAorCSAqCXsgdTMyCQkJcGlkLCB0aWQ7IH0gJiYgUEVSRl9TQU1QTEVfVElECisJICoJeyB1NjQJCQl0aW1lOyAgICAgfSAmJiBQRVJGX1NBTVBMRV9USU1FCisJICoJeyB1NjQJCQlhZGRyOyAgICAgfSAmJiBQRVJGX1NBTVBMRV9BRERSCisJICoJeyB1NjQJCQlpZDsJICB9ICYmIFBFUkZfU0FNUExFX0lECisJICoJeyB1NjQJCQlzdHJlYW1faWQ7fSAmJiBQRVJGX1NBTVBMRV9TVFJFQU1fSUQKKwkgKgl7IHUzMgkJCWNwdSwgcmVzOyB9ICYmIFBFUkZfU0FNUExFX0NQVQorCSAqCXsgdTY0CQkJcGVyaW9kOyAgIH0gJiYgUEVSRl9TQU1QTEVfUEVSSU9ECisJICoKKwkgKgl7IHN0cnVjdCByZWFkX2Zvcm1hdAl2YWx1ZXM7CSAgfSAmJiBQRVJGX1NBTVBMRV9SRUFECisJICoKKwkgKgl7IHU2NAkJCW5yLAorCSAqCSAgdTY0CQkJaXBzW25yXTsgIH0gJiYgUEVSRl9TQU1QTEVfQ0FMTENIQUlOCisJICoKKwkgKgkjCisJICoJIyBUaGUgUkFXIHJlY29yZCBiZWxvdyBpcyBvcGFxdWUgZGF0YSB3cnQgdGhlIEFCSQorCSAqCSMKKwkgKgkjIFRoYXQgaXMsIHRoZSBBQkkgZG9lc24ndCBtYWtlIGFueSBwcm9taXNlcyB3cnQgdG8KKwkgKgkjIHRoZSBzdGFiaWxpdHkgb2YgaXRzIGNvbnRlbnQsIGl0IG1heSB2YXJ5IGRlcGVuZGluZworCSAqCSMgb24gZXZlbnQsIGhhcmR3YXJlLCBrZXJuZWwgdmVyc2lvbiBhbmQgcGhhc2Ugb2YKKwkgKgkjIHRoZSBtb29uLgorCSAqCSMKKwkgKgkjIEluIG90aGVyIHdvcmRzLCBQRVJGX1NBTVBMRV9SQVcgY29udGVudHMgYXJlIG5vdCBhbiBBQkkuCisJICoJIworCSAqCisJICoJeyB1MzIJCQlzaXplOworCSAqCSAgY2hhciAgICAgICAgICAgICAgICAgIGRhdGFbc2l6ZV07fSYmIFBFUkZfU0FNUExFX1JBVworCSAqIH07CisJICovCisJUEVSRl9SRUNPUkRfU0FNUExFCQkJPSA5LAorCisJUEVSRl9SRUNPUkRfTUFYLAkJCS8qIG5vbi1BQkkgKi8KK307CisKK2VudW0gcGVyZl9jYWxsY2hhaW5fY29udGV4dCB7CisJUEVSRl9DT05URVhUX0hWCQkJPSAoX191NjQpLTMyLAorCVBFUkZfQ09OVEVYVF9LRVJORUwJCT0gKF9fdTY0KS0xMjgsCisJUEVSRl9DT05URVhUX1VTRVIJCT0gKF9fdTY0KS01MTIsCisKKwlQRVJGX0NPTlRFWFRfR1VFU1QJCT0gKF9fdTY0KS0yMDQ4LAorCVBFUkZfQ09OVEVYVF9HVUVTVF9LRVJORUwJPSAoX191NjQpLTIxNzYsCisJUEVSRl9DT05URVhUX0dVRVNUX1VTRVIJCT0gKF9fdTY0KS0yNTYwLAorCisJUEVSRl9DT05URVhUX01BWAkJPSAoX191NjQpLTQwOTUsCit9OworCisjZGVmaW5lIFBFUkZfRkxBR19GRF9OT19HUk9VUAkoMVUgPDwgMCkKKyNkZWZpbmUgUEVSRl9GTEFHX0ZEX09VVFBVVAkoMVUgPDwgMSkKKworI2VuZGlmIC8qIF9MSU5VWF9QRVJGX0VWRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wZXJzb25hbGl0eS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3BlcnNvbmFsaXR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc0NzhlZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wZXJzb25hbGl0eS5oCkBAIC0wLDAgKzEsNjggQEAKKyNpZm5kZWYgX0xJTlVYX1BFUlNPTkFMSVRZX0gKKyNkZWZpbmUgX0xJTlVYX1BFUlNPTkFMSVRZX0gKKworCisvKgorICogRmxhZ3MgZm9yIGJ1ZyBlbXVsYXRpb24uCisgKgorICogVGhlc2Ugb2NjdXB5IHRoZSB0b3AgdGhyZWUgYnl0ZXMuCisgKi8KK2VudW0geworCUFERFJfTk9fUkFORE9NSVpFID0gCTB4MDA0MDAwMCwJLyogZGlzYWJsZSByYW5kb21pemF0aW9uIG9mIFZBIHNwYWNlICovCisJRkRQSUNfRlVOQ1BUUlMgPQkweDAwODAwMDAsCS8qIHVzZXJzcGFjZSBmdW5jdGlvbiBwdHJzIHBvaW50IHRvIGRlc2NyaXB0b3JzCisJCQkJCQkgKiAoc2lnbmFsIGhhbmRsaW5nKQorCQkJCQkJICovCisJTU1BUF9QQUdFX1pFUk8gPQkweDAxMDAwMDAsCisJQUREUl9DT01QQVRfTEFZT1VUID0JMHgwMjAwMDAwLAorCVJFQURfSU1QTElFU19FWEVDID0JMHgwNDAwMDAwLAorCUFERFJfTElNSVRfMzJCSVQgPQkweDA4MDAwMDAsCisJU0hPUlRfSU5PREUgPQkJMHgxMDAwMDAwLAorCVdIT0xFX1NFQ09ORFMgPQkJMHgyMDAwMDAwLAorCVNUSUNLWV9USU1FT1VUUwk9CTB4NDAwMDAwMCwKKwlBRERSX0xJTUlUXzNHQiA9IAkweDgwMDAwMDAsCit9OworCisvKgorICogU2VjdXJpdHktcmVsZXZhbnQgY29tcGF0aWJpbGl0eSBmbGFncyB0aGF0IG11c3QgYmUKKyAqIGNsZWFyZWQgdXBvbiBzZXR1aWQgb3Igc2V0Z2lkIGV4ZWM6CisgKi8KKyNkZWZpbmUgUEVSX0NMRUFSX09OX1NFVElEIChSRUFEX0lNUExJRVNfRVhFQyAgfCBcCisJCQkgICAgQUREUl9OT19SQU5ET01JWkUgIHwgXAorCQkJICAgIEFERFJfQ09NUEFUX0xBWU9VVCB8IFwKKwkJCSAgICBNTUFQX1BBR0VfWkVSTykKKworLyoKKyAqIFBlcnNvbmFsaXR5IHR5cGVzLgorICoKKyAqIFRoZXNlIGdvIGluIHRoZSBsb3cgYnl0ZS4gIEF2b2lkIHVzaW5nIHRoZSB0b3AgYml0LCBpdCB3aWxsCisgKiBjb25mbGljdCB3aXRoIGVycm9yIHJldHVybnMuCisgKi8KK2VudW0geworCVBFUl9MSU5VWCA9CQkweDAwMDAsCisJUEVSX0xJTlVYXzMyQklUID0JMHgwMDAwIHwgQUREUl9MSU1JVF8zMkJJVCwKKwlQRVJfTElOVVhfRkRQSUMgPQkweDAwMDAgfCBGRFBJQ19GVU5DUFRSUywKKwlQRVJfU1ZSNCA9CQkweDAwMDEgfCBTVElDS1lfVElNRU9VVFMgfCBNTUFQX1BBR0VfWkVSTywKKwlQRVJfU1ZSMyA9CQkweDAwMDIgfCBTVElDS1lfVElNRU9VVFMgfCBTSE9SVF9JTk9ERSwKKwlQRVJfU0NPU1ZSMyA9CQkweDAwMDMgfCBTVElDS1lfVElNRU9VVFMgfAorCQkJCQkgV0hPTEVfU0VDT05EUyB8IFNIT1JUX0lOT0RFLAorCVBFUl9PU1I1ID0JCTB4MDAwMyB8IFNUSUNLWV9USU1FT1VUUyB8IFdIT0xFX1NFQ09ORFMsCisJUEVSX1dZU0VWMzg2ID0JCTB4MDAwNCB8IFNUSUNLWV9USU1FT1VUUyB8IFNIT1JUX0lOT0RFLAorCVBFUl9JU0NSNCA9CQkweDAwMDUgfCBTVElDS1lfVElNRU9VVFMsCisJUEVSX0JTRCA9CQkweDAwMDYsCisJUEVSX1NVTk9TID0JCTB4MDAwNiB8IFNUSUNLWV9USU1FT1VUUywKKwlQRVJfWEVOSVggPQkJMHgwMDA3IHwgU1RJQ0tZX1RJTUVPVVRTIHwgU0hPUlRfSU5PREUsCisJUEVSX0xJTlVYMzIgPQkJMHgwMDA4LAorCVBFUl9MSU5VWDMyXzNHQiA9CTB4MDAwOCB8IEFERFJfTElNSVRfM0dCLAorCVBFUl9JUklYMzIgPQkJMHgwMDA5IHwgU1RJQ0tZX1RJTUVPVVRTLC8qIElSSVg1IDMyLWJpdCAqLworCVBFUl9JUklYTjMyID0JCTB4MDAwYSB8IFNUSUNLWV9USU1FT1VUUywvKiBJUklYNiBuZXcgMzItYml0ICovCisJUEVSX0lSSVg2NCA9CQkweDAwMGIgfCBTVElDS1lfVElNRU9VVFMsLyogSVJJWDYgNjQtYml0ICovCisJUEVSX1JJU0NPUyA9CQkweDAwMGMsCisJUEVSX1NPTEFSSVMgPQkJMHgwMDBkIHwgU1RJQ0tZX1RJTUVPVVRTLAorCVBFUl9VVzcgPQkJMHgwMDBlIHwgU1RJQ0tZX1RJTUVPVVRTIHwgTU1BUF9QQUdFX1pFUk8sCisJUEVSX09TRjQgPQkJMHgwMDBmLAkJCSAvKiBPU0YvMSB2NCAqLworCVBFUl9IUFVYID0JCTB4MDAxMCwKKwlQRVJfTUFTSyA9CQkweDAwZmYsCit9OworCisKKyNlbmRpZiAvKiBfTElOVVhfUEVSU09OQUxJVFlfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3Bma2V5djIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wZmtleXYyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI4MGM4MAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wZmtleXYyLmgKQEAgLTAsMCArMSwzNzAgQEAKKy8qIFBGX0tFWSB1c2VyIGludGVyZmFjZSwgdGhpcyBpcyBkZWZpbmVkIGJ5IHJmYzIzNjcgc28KKyAqIGRvIG5vdCBtYWtlIGFyYml0cmFyeSBtb2RpZmljYXRpb25zIG9yIGVsc2UgdGhpcyBoZWFkZXIKKyAqIGZpbGUgd2lsbCBub3QgYmUgY29tcGxpYW50LgorICovCisKKyNpZm5kZWYgX0xJTlVYX1BGS0VZMl9ICisjZGVmaW5lIF9MSU5VWF9QRktFWTJfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBQRl9LRVlfVjIJCTIKKyNkZWZpbmUgUEZLRVlWMl9SRVZJU0lPTgkxOTk4MDZMCisKK3N0cnVjdCBzYWRiX21zZyB7CisJX191OAkJc2FkYl9tc2dfdmVyc2lvbjsKKwlfX3U4CQlzYWRiX21zZ190eXBlOworCV9fdTgJCXNhZGJfbXNnX2Vycm5vOworCV9fdTgJCXNhZGJfbXNnX3NhdHlwZTsKKwlfX3UxNglzYWRiX21zZ19sZW47CisJX191MTYJc2FkYl9tc2dfcmVzZXJ2ZWQ7CisJX191MzIJc2FkYl9tc2dfc2VxOworCV9fdTMyCXNhZGJfbXNnX3BpZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisvKiBzaXplb2Yoc3RydWN0IHNhZGJfbXNnKSA9PSAxNiAqLworCitzdHJ1Y3Qgc2FkYl9leHQgeworCV9fdTE2CXNhZGJfZXh0X2xlbjsKKwlfX3UxNglzYWRiX2V4dF90eXBlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKy8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9leHQpID09IDQgKi8KKworc3RydWN0IHNhZGJfc2EgeworCV9fdTE2CXNhZGJfc2FfbGVuOworCV9fdTE2CXNhZGJfc2FfZXh0dHlwZTsKKwlfX2JlMzIJCXNhZGJfc2Ffc3BpOworCV9fdTgJCXNhZGJfc2FfcmVwbGF5OworCV9fdTgJCXNhZGJfc2Ffc3RhdGU7CisJX191OAkJc2FkYl9zYV9hdXRoOworCV9fdTgJCXNhZGJfc2FfZW5jcnlwdDsKKwlfX3UzMglzYWRiX3NhX2ZsYWdzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKy8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9zYSkgPT0gMTYgKi8KKworc3RydWN0IHNhZGJfbGlmZXRpbWUgeworCV9fdTE2CXNhZGJfbGlmZXRpbWVfbGVuOworCV9fdTE2CXNhZGJfbGlmZXRpbWVfZXh0dHlwZTsKKwlfX3UzMglzYWRiX2xpZmV0aW1lX2FsbG9jYXRpb25zOworCV9fdTY0CXNhZGJfbGlmZXRpbWVfYnl0ZXM7CisJX191NjQJc2FkYl9saWZldGltZV9hZGR0aW1lOworCV9fdTY0CXNhZGJfbGlmZXRpbWVfdXNldGltZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisvKiBzaXplb2Yoc3RydWN0IHNhZGJfbGlmZXRpbWUpID09IDMyICovCisKK3N0cnVjdCBzYWRiX2FkZHJlc3MgeworCV9fdTE2CXNhZGJfYWRkcmVzc19sZW47CisJX191MTYJc2FkYl9hZGRyZXNzX2V4dHR5cGU7CisJX191OAkJc2FkYl9hZGRyZXNzX3Byb3RvOworCV9fdTgJCXNhZGJfYWRkcmVzc19wcmVmaXhsZW47CisJX191MTYJc2FkYl9hZGRyZXNzX3Jlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKy8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9hZGRyZXNzKSA9PSA4ICovCisKK3N0cnVjdCBzYWRiX2tleSB7CisJX191MTYJc2FkYl9rZXlfbGVuOworCV9fdTE2CXNhZGJfa2V5X2V4dHR5cGU7CisJX191MTYJc2FkYl9rZXlfYml0czsKKwlfX3UxNglzYWRiX2tleV9yZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisvKiBzaXplb2Yoc3RydWN0IHNhZGJfa2V5KSA9PSA4ICovCisKK3N0cnVjdCBzYWRiX2lkZW50IHsKKwlfX3UxNglzYWRiX2lkZW50X2xlbjsKKwlfX3UxNglzYWRiX2lkZW50X2V4dHR5cGU7CisJX191MTYJc2FkYl9pZGVudF90eXBlOworCV9fdTE2CXNhZGJfaWRlbnRfcmVzZXJ2ZWQ7CisJX191NjQJc2FkYl9pZGVudF9pZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisvKiBzaXplb2Yoc3RydWN0IHNhZGJfaWRlbnQpID09IDE2ICovCisKK3N0cnVjdCBzYWRiX3NlbnMgeworCV9fdTE2CXNhZGJfc2Vuc19sZW47CisJX191MTYJc2FkYl9zZW5zX2V4dHR5cGU7CisJX191MzIJc2FkYl9zZW5zX2RwZDsKKwlfX3U4CQlzYWRiX3NlbnNfc2Vuc19sZXZlbDsKKwlfX3U4CQlzYWRiX3NlbnNfc2Vuc19sZW47CisJX191OAkJc2FkYl9zZW5zX2ludGVnX2xldmVsOworCV9fdTgJCXNhZGJfc2Vuc19pbnRlZ19sZW47CisJX191MzIJc2FkYl9zZW5zX3Jlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKy8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9zZW5zKSA9PSAxNiAqLworCisvKiBmb2xsb3dlZCBieToKKwlfX3U2NAlzYWRiX3NlbnNfYml0bWFwW3NlbnNfbGVuXTsKKwlfX3U2NAlzYWRiX2ludGVnX2JpdG1hcFtpbnRlZ19sZW5dOyAgKi8KKworc3RydWN0IHNhZGJfcHJvcCB7CisJX191MTYJc2FkYl9wcm9wX2xlbjsKKwlfX3UxNglzYWRiX3Byb3BfZXh0dHlwZTsKKwlfX3U4CQlzYWRiX3Byb3BfcmVwbGF5OworCV9fdTgJCXNhZGJfcHJvcF9yZXNlcnZlZFszXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisvKiBzaXplb2Yoc3RydWN0IHNhZGJfcHJvcCkgPT0gOCAqLworCisvKiBmb2xsb3dlZCBieToKKwlzdHJ1Y3Qgc2FkYl9jb21iIHNhZGJfY29tYnNbKHNhZGJfcHJvcF9sZW4gKworCQlzaXplb2YoX191NjQpIC0gc2l6ZW9mKHN0cnVjdCBzYWRiX3Byb3ApKSAvCisJCXNpemVvZihzdHJ1Y3Qgc2FkYl9jb21iKV07ICovCisKK3N0cnVjdCBzYWRiX2NvbWIgeworCV9fdTgJCXNhZGJfY29tYl9hdXRoOworCV9fdTgJCXNhZGJfY29tYl9lbmNyeXB0OworCV9fdTE2CXNhZGJfY29tYl9mbGFnczsKKwlfX3UxNglzYWRiX2NvbWJfYXV0aF9taW5iaXRzOworCV9fdTE2CXNhZGJfY29tYl9hdXRoX21heGJpdHM7CisJX191MTYJc2FkYl9jb21iX2VuY3J5cHRfbWluYml0czsKKwlfX3UxNglzYWRiX2NvbWJfZW5jcnlwdF9tYXhiaXRzOworCV9fdTMyCXNhZGJfY29tYl9yZXNlcnZlZDsKKwlfX3UzMglzYWRiX2NvbWJfc29mdF9hbGxvY2F0aW9uczsKKwlfX3UzMglzYWRiX2NvbWJfaGFyZF9hbGxvY2F0aW9uczsKKwlfX3U2NAlzYWRiX2NvbWJfc29mdF9ieXRlczsKKwlfX3U2NAlzYWRiX2NvbWJfaGFyZF9ieXRlczsKKwlfX3U2NAlzYWRiX2NvbWJfc29mdF9hZGR0aW1lOworCV9fdTY0CXNhZGJfY29tYl9oYXJkX2FkZHRpbWU7CisJX191NjQJc2FkYl9jb21iX3NvZnRfdXNldGltZTsKKwlfX3U2NAlzYWRiX2NvbWJfaGFyZF91c2V0aW1lOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKy8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9jb21iKSA9PSA3MiAqLworCitzdHJ1Y3Qgc2FkYl9zdXBwb3J0ZWQgeworCV9fdTE2CXNhZGJfc3VwcG9ydGVkX2xlbjsKKwlfX3UxNglzYWRiX3N1cHBvcnRlZF9leHR0eXBlOworCV9fdTMyCXNhZGJfc3VwcG9ydGVkX3Jlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKy8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9zdXBwb3J0ZWQpID09IDggKi8KKworLyogZm9sbG93ZWQgYnk6CisJc3RydWN0IHNhZGJfYWxnIHNhZGJfYWxnc1soc2FkYl9zdXBwb3J0ZWRfbGVuICsKKwkJc2l6ZW9mKF9fdTY0KSAtIHNpemVvZihzdHJ1Y3Qgc2FkYl9zdXBwb3J0ZWQpKSAvCisJCXNpemVvZihzdHJ1Y3Qgc2FkYl9hbGcpXTsgKi8KKworc3RydWN0IHNhZGJfYWxnIHsKKwlfX3U4CQlzYWRiX2FsZ19pZDsKKwlfX3U4CQlzYWRiX2FsZ19pdmxlbjsKKwlfX3UxNglzYWRiX2FsZ19taW5iaXRzOworCV9fdTE2CXNhZGJfYWxnX21heGJpdHM7CisJX191MTYJc2FkYl9hbGdfcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworLyogc2l6ZW9mKHN0cnVjdCBzYWRiX2FsZykgPT0gOCAqLworCitzdHJ1Y3Qgc2FkYl9zcGlyYW5nZSB7CisJX191MTYJc2FkYl9zcGlyYW5nZV9sZW47CisJX191MTYJc2FkYl9zcGlyYW5nZV9leHR0eXBlOworCV9fdTMyCXNhZGJfc3BpcmFuZ2VfbWluOworCV9fdTMyCXNhZGJfc3BpcmFuZ2VfbWF4OworCV9fdTMyCXNhZGJfc3BpcmFuZ2VfcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3NwaXJhbmdlKSA9PSAxNiAqLworCitzdHJ1Y3Qgc2FkYl94X2ttcHJpdmF0ZSB7CisJX191MTYJc2FkYl94X2ttcHJpdmF0ZV9sZW47CisJX191MTYJc2FkYl94X2ttcHJpdmF0ZV9leHR0eXBlOworCV9fdTMyCXNhZGJfeF9rbXByaXZhdGVfcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3hfa21wcml2YXRlKSA9PSA4ICovCisKK3N0cnVjdCBzYWRiX3hfc2EyIHsKKwlfX3UxNglzYWRiX3hfc2EyX2xlbjsKKwlfX3UxNglzYWRiX3hfc2EyX2V4dHR5cGU7CisJX191OAkJc2FkYl94X3NhMl9tb2RlOworCV9fdTgJCXNhZGJfeF9zYTJfcmVzZXJ2ZWQxOworCV9fdTE2CXNhZGJfeF9zYTJfcmVzZXJ2ZWQyOworCV9fdTMyCXNhZGJfeF9zYTJfc2VxdWVuY2U7CisJX191MzIJc2FkYl94X3NhMl9yZXFpZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisvKiBzaXplb2Yoc3RydWN0IHNhZGJfeF9zYTIpID09IDE2ICovCisKK3N0cnVjdCBzYWRiX3hfcG9saWN5IHsKKwlfX3UxNglzYWRiX3hfcG9saWN5X2xlbjsKKwlfX3UxNglzYWRiX3hfcG9saWN5X2V4dHR5cGU7CisJX191MTYJc2FkYl94X3BvbGljeV90eXBlOworCV9fdTgJCXNhZGJfeF9wb2xpY3lfZGlyOworCV9fdTgJCXNhZGJfeF9wb2xpY3lfcmVzZXJ2ZWQ7CisJX191MzIJc2FkYl94X3BvbGljeV9pZDsKKwlfX3UzMglzYWRiX3hfcG9saWN5X3ByaW9yaXR5OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKy8qIHNpemVvZihzdHJ1Y3Qgc2FkYl94X3BvbGljeSkgPT0gMTYgKi8KKworc3RydWN0IHNhZGJfeF9pcHNlY3JlcXVlc3QgeworCV9fdTE2CXNhZGJfeF9pcHNlY3JlcXVlc3RfbGVuOworCV9fdTE2CXNhZGJfeF9pcHNlY3JlcXVlc3RfcHJvdG87CisJX191OAkJc2FkYl94X2lwc2VjcmVxdWVzdF9tb2RlOworCV9fdTgJCXNhZGJfeF9pcHNlY3JlcXVlc3RfbGV2ZWw7CisJX191MTYJc2FkYl94X2lwc2VjcmVxdWVzdF9yZXNlcnZlZDE7CisJX191MzIJc2FkYl94X2lwc2VjcmVxdWVzdF9yZXFpZDsKKwlfX3UzMglzYWRiX3hfaXBzZWNyZXF1ZXN0X3Jlc2VydmVkMjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisvKiBzaXplb2Yoc3RydWN0IHNhZGJfeF9pcHNlY3JlcXVlc3QpID09IDE2ICovCisKKy8qIFRoaXMgZGVmaW5lcyB0aGUgVFlQRSBvZiBOYXQgVHJhdmVyc2FsIGluIHVzZS4gIEN1cnJlbnRseSBvbmx5IG9uZQorICogdHlwZSBvZiBOQVQtVCBpcyBzdXBwb3J0ZWQsIGRyYWZ0LWlldGYtaXBzZWMtdWRwLWVuY2Fwcy0wNgorICovCitzdHJ1Y3Qgc2FkYl94X25hdF90X3R5cGUgeworCV9fdTE2CXNhZGJfeF9uYXRfdF90eXBlX2xlbjsKKwlfX3UxNglzYWRiX3hfbmF0X3RfdHlwZV9leHR0eXBlOworCV9fdTgJCXNhZGJfeF9uYXRfdF90eXBlX3R5cGU7CisJX191OAkJc2FkYl94X25hdF90X3R5cGVfcmVzZXJ2ZWRbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3hfbmF0X3RfdHlwZSkgPT0gOCAqLworCisvKiBQYXNzIGEgTkFUIFRyYXZlcnNhbCBwb3J0IChTb3VyY2Ugb3IgRGVzdCBwb3J0KSAqLworc3RydWN0IHNhZGJfeF9uYXRfdF9wb3J0IHsKKwlfX3UxNglzYWRiX3hfbmF0X3RfcG9ydF9sZW47CisJX191MTYJc2FkYl94X25hdF90X3BvcnRfZXh0dHlwZTsKKwlfX2JlMTYJCXNhZGJfeF9uYXRfdF9wb3J0X3BvcnQ7CisJX191MTYJc2FkYl94X25hdF90X3BvcnRfcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3hfbmF0X3RfcG9ydCkgPT0gOCAqLworCisvKiBHZW5lcmljIExTTSBzZWN1cml0eSBjb250ZXh0ICovCitzdHJ1Y3Qgc2FkYl94X3NlY19jdHggeworCV9fdTE2CXNhZGJfeF9zZWNfbGVuOworCV9fdTE2CXNhZGJfeF9zZWNfZXh0dHlwZTsKKwlfX3U4CQlzYWRiX3hfY3R4X2FsZzsgIC8qIExTTXM6IGUuZy4sIHNlbGludXggPT0gMSAqLworCV9fdTgJCXNhZGJfeF9jdHhfZG9pOworCV9fdTE2CXNhZGJfeF9jdHhfbGVuOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKy8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9zZWNfY3R4KSA9IDggKi8KKworLyogVXNlZCBieSBNSUdSQVRFIHRvIHBhc3MgYWRkcmVzc2VzIElLRSB3aWxsIHVzZSB0byBwZXJmb3JtCisgKiBuZWdvdGlhdGlvbiB3aXRoIHRoZSBwZWVyICovCitzdHJ1Y3Qgc2FkYl94X2ttYWRkcmVzcyB7CisJX191MTYJc2FkYl94X2ttYWRkcmVzc19sZW47CisJX191MTYJc2FkYl94X2ttYWRkcmVzc19leHR0eXBlOworCV9fdTMyCXNhZGJfeF9rbWFkZHJlc3NfcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3hfa21hZGRyZXNzKSA9PSA4ICovCisKKy8qIE1lc3NhZ2UgdHlwZXMgKi8KKyNkZWZpbmUgU0FEQl9SRVNFUlZFRAkJMAorI2RlZmluZSBTQURCX0dFVFNQSQkJMQorI2RlZmluZSBTQURCX1VQREFURQkJMgorI2RlZmluZSBTQURCX0FERAkJMworI2RlZmluZSBTQURCX0RFTEVURQkJNAorI2RlZmluZSBTQURCX0dFVAkJNQorI2RlZmluZSBTQURCX0FDUVVJUkUJCTYKKyNkZWZpbmUgU0FEQl9SRUdJU1RFUgkJNworI2RlZmluZSBTQURCX0VYUElSRQkJOAorI2RlZmluZSBTQURCX0ZMVVNICQk5CisjZGVmaW5lIFNBREJfRFVNUAkJMTAKKyNkZWZpbmUgU0FEQl9YX1BST01JU0MJCTExCisjZGVmaW5lIFNBREJfWF9QQ0hBTkdFCQkxMgorI2RlZmluZSBTQURCX1hfU1BEVVBEQVRFCTEzCisjZGVmaW5lIFNBREJfWF9TUERBREQJCTE0CisjZGVmaW5lIFNBREJfWF9TUERERUxFVEUJMTUKKyNkZWZpbmUgU0FEQl9YX1NQREdFVAkJMTYKKyNkZWZpbmUgU0FEQl9YX1NQREFDUVVJUkUJMTcKKyNkZWZpbmUgU0FEQl9YX1NQRERVTVAJCTE4CisjZGVmaW5lIFNBREJfWF9TUERGTFVTSAkJMTkKKyNkZWZpbmUgU0FEQl9YX1NQRFNFVElEWAkyMAorI2RlZmluZSBTQURCX1hfU1BERVhQSVJFCTIxCisjZGVmaW5lIFNBREJfWF9TUERERUxFVEUyCTIyCisjZGVmaW5lIFNBREJfWF9OQVRfVF9ORVdfTUFQUElORwkyMworI2RlZmluZSBTQURCX1hfTUlHUkFURQkJMjQKKyNkZWZpbmUgU0FEQl9NQVgJCTI0CisKKy8qIFNlY3VyaXR5IEFzc29jaWF0aW9uIGZsYWdzICovCisjZGVmaW5lIFNBREJfU0FGTEFHU19QRlMJMQorI2RlZmluZSBTQURCX1NBRkxBR1NfTk9QTVRVRElTQwkweDIwMDAwMDAwCisjZGVmaW5lIFNBREJfU0FGTEFHU19ERUNBUF9EU0NQCTB4NDAwMDAwMDAKKyNkZWZpbmUgU0FEQl9TQUZMQUdTX05PRUNOCTB4ODAwMDAwMDAKKworLyogU2VjdXJpdHkgQXNzb2NpYXRpb24gc3RhdGVzICovCisjZGVmaW5lIFNBREJfU0FTVEFURV9MQVJWQUwJMAorI2RlZmluZSBTQURCX1NBU1RBVEVfTUFUVVJFCTEKKyNkZWZpbmUgU0FEQl9TQVNUQVRFX0RZSU5HCTIKKyNkZWZpbmUgU0FEQl9TQVNUQVRFX0RFQUQJMworI2RlZmluZSBTQURCX1NBU1RBVEVfTUFYCTMKKworLyogU2VjdXJpdHkgQXNzb2NpYXRpb24gdHlwZXMgKi8KKyNkZWZpbmUgU0FEQl9TQVRZUEVfVU5TUEVDCTAKKyNkZWZpbmUgU0FEQl9TQVRZUEVfQUgJCTIKKyNkZWZpbmUgU0FEQl9TQVRZUEVfRVNQCQkzCisjZGVmaW5lIFNBREJfU0FUWVBFX1JTVlAJNQorI2RlZmluZSBTQURCX1NBVFlQRV9PU1BGVjIJNgorI2RlZmluZSBTQURCX1NBVFlQRV9SSVBWMgk3CisjZGVmaW5lIFNBREJfU0FUWVBFX01JUAkJOAorI2RlZmluZSBTQURCX1hfU0FUWVBFX0lQQ09NUAk5CisjZGVmaW5lIFNBREJfU0FUWVBFX01BWAkJOQorCisvKiBBdXRoZW50aWNhdGlvbiBhbGdvcml0aG1zICovCisjZGVmaW5lIFNBREJfQUFMR19OT05FCQkJMAorI2RlZmluZSBTQURCX0FBTEdfTUQ1SE1BQwkJMgorI2RlZmluZSBTQURCX0FBTEdfU0hBMUhNQUMJCTMKKyNkZWZpbmUgU0FEQl9YX0FBTEdfU0hBMl8yNTZITUFDCTUKKyNkZWZpbmUgU0FEQl9YX0FBTEdfU0hBMl8zODRITUFDCTYKKyNkZWZpbmUgU0FEQl9YX0FBTEdfU0hBMl81MTJITUFDCTcKKyNkZWZpbmUgU0FEQl9YX0FBTEdfUklQRU1EMTYwSE1BQwk4CisjZGVmaW5lIFNBREJfWF9BQUxHX0FFU19YQ0JDX01BQwk5CisjZGVmaW5lIFNBREJfWF9BQUxHX05VTEwJCTI1MQkvKiBrYW1lICovCisjZGVmaW5lIFNBREJfQUFMR19NQVgJCQkyNTEKKworLyogRW5jcnlwdGlvbiBhbGdvcml0aG1zICovCisjZGVmaW5lIFNBREJfRUFMR19OT05FCQkJMAorI2RlZmluZSBTQURCX0VBTEdfREVTQ0JDCQkyCisjZGVmaW5lIFNBREJfRUFMR18zREVTQ0JDCQkzCisjZGVmaW5lIFNBREJfWF9FQUxHX0NBU1RDQkMJCTYKKyNkZWZpbmUgU0FEQl9YX0VBTEdfQkxPV0ZJU0hDQkMJCTcKKyNkZWZpbmUgU0FEQl9FQUxHX05VTEwJCQkxMQorI2RlZmluZSBTQURCX1hfRUFMR19BRVNDQkMJCTEyCisjZGVmaW5lIFNBREJfWF9FQUxHX0FFU0NUUgkJMTMKKyNkZWZpbmUgU0FEQl9YX0VBTEdfQUVTX0NDTV9JQ1Y4CTE0CisjZGVmaW5lIFNBREJfWF9FQUxHX0FFU19DQ01fSUNWMTIJMTUKKyNkZWZpbmUgU0FEQl9YX0VBTEdfQUVTX0NDTV9JQ1YxNgkxNgorI2RlZmluZSBTQURCX1hfRUFMR19BRVNfR0NNX0lDVjgJMTgKKyNkZWZpbmUgU0FEQl9YX0VBTEdfQUVTX0dDTV9JQ1YxMgkxOQorI2RlZmluZSBTQURCX1hfRUFMR19BRVNfR0NNX0lDVjE2CTIwCisjZGVmaW5lIFNBREJfWF9FQUxHX0NBTUVMTElBQ0JDCQkyMgorI2RlZmluZSBTQURCX1hfRUFMR19OVUxMX0FFU19HTUFDCTIzCisjZGVmaW5lIFNBREJfRUFMR19NQVggICAgICAgICAgICAgICAgICAgMjUzIC8qIGxhc3QgRUFMRyAqLworLyogcHJpdmF0ZSBhbGxvY2F0aW9ucyBzaG91bGQgdXNlIDI0OS0yNTUgKFJGQzI0MDcpICovCisjZGVmaW5lIFNBREJfWF9FQUxHX1NFUlBFTlRDQkMgIDI1MiAgICAgLyogZHJhZnQtaWV0Zi1pcHNlYy1jaXBoLWFlcy1jYmMtMDAgKi8KKyNkZWZpbmUgU0FEQl9YX0VBTEdfVFdPRklTSENCQyAgMjUzICAgICAvKiBkcmFmdC1pZXRmLWlwc2VjLWNpcGgtYWVzLWNiYy0wMCAqLworCisvKiBDb21wcmVzc2lvbiBhbGdvcml0aG1zICovCisjZGVmaW5lIFNBREJfWF9DQUxHX05PTkUJCTAKKyNkZWZpbmUgU0FEQl9YX0NBTEdfT1VJCQkJMQorI2RlZmluZSBTQURCX1hfQ0FMR19ERUZMQVRFCQkyCisjZGVmaW5lIFNBREJfWF9DQUxHX0xaUwkJCTMKKyNkZWZpbmUgU0FEQl9YX0NBTEdfTFpKSAkJNAorI2RlZmluZSBTQURCX1hfQ0FMR19NQVgJCQk0CisKKy8qIEV4dGVuc2lvbiBIZWFkZXIgdmFsdWVzICovCisjZGVmaW5lIFNBREJfRVhUX1JFU0VSVkVECQkwCisjZGVmaW5lIFNBREJfRVhUX1NBCQkJMQorI2RlZmluZSBTQURCX0VYVF9MSUZFVElNRV9DVVJSRU5UCTIKKyNkZWZpbmUgU0FEQl9FWFRfTElGRVRJTUVfSEFSRAkJMworI2RlZmluZSBTQURCX0VYVF9MSUZFVElNRV9TT0ZUCQk0CisjZGVmaW5lIFNBREJfRVhUX0FERFJFU1NfU1JDCQk1CisjZGVmaW5lIFNBREJfRVhUX0FERFJFU1NfRFNUCQk2CisjZGVmaW5lIFNBREJfRVhUX0FERFJFU1NfUFJPWFkJCTcKKyNkZWZpbmUgU0FEQl9FWFRfS0VZX0FVVEgJCTgKKyNkZWZpbmUgU0FEQl9FWFRfS0VZX0VOQ1JZUFQJCTkKKyNkZWZpbmUgU0FEQl9FWFRfSURFTlRJVFlfU1JDCQkxMAorI2RlZmluZSBTQURCX0VYVF9JREVOVElUWV9EU1QJCTExCisjZGVmaW5lIFNBREJfRVhUX1NFTlNJVElWSVRZCQkxMgorI2RlZmluZSBTQURCX0VYVF9QUk9QT1NBTAkJMTMKKyNkZWZpbmUgU0FEQl9FWFRfU1VQUE9SVEVEX0FVVEgJCTE0CisjZGVmaW5lIFNBREJfRVhUX1NVUFBPUlRFRF9FTkNSWVBUCTE1CisjZGVmaW5lIFNBREJfRVhUX1NQSVJBTkdFCQkxNgorI2RlZmluZSBTQURCX1hfRVhUX0tNUFJJVkFURQkJMTcKKyNkZWZpbmUgU0FEQl9YX0VYVF9QT0xJQ1kJCTE4CisjZGVmaW5lIFNBREJfWF9FWFRfU0EyCQkJMTkKKy8qIFRoZSBuZXh0IGZvdXIgZW50cmllcyBhcmUgZm9yIHNldHRpbmcgdXAgTkFUIFRyYXZlcnNhbCAqLworI2RlZmluZSBTQURCX1hfRVhUX05BVF9UX1RZUEUJCTIwCisjZGVmaW5lIFNBREJfWF9FWFRfTkFUX1RfU1BPUlQJCTIxCisjZGVmaW5lIFNBREJfWF9FWFRfTkFUX1RfRFBPUlQJCTIyCisjZGVmaW5lIFNBREJfWF9FWFRfTkFUX1RfT0EJCTIzCisjZGVmaW5lIFNBREJfWF9FWFRfU0VDX0NUWAkJMjQKKy8qIFVzZWQgd2l0aCBNSUdSQVRFIHRvIHBhc3MgQCB0byBJS0UgZm9yIG5lZ290aWF0aW9uICovCisjZGVmaW5lIFNBREJfWF9FWFRfS01BRERSRVNTCQkyNQorI2RlZmluZSBTQURCX0VYVF9NQVgJCQkyNQorCisvKiBJZGVudGl0eSBFeHRlbnNpb24gdmFsdWVzICovCisjZGVmaW5lIFNBREJfSURFTlRUWVBFX1JFU0VSVkVECTAKKyNkZWZpbmUgU0FEQl9JREVOVFRZUEVfUFJFRklYCTEKKyNkZWZpbmUgU0FEQl9JREVOVFRZUEVfRlFETgkyCisjZGVmaW5lIFNBREJfSURFTlRUWVBFX1VTRVJGUUROCTMKKyNkZWZpbmUgU0FEQl9JREVOVFRZUEVfTUFYCTMKKworI2VuZGlmIC8qICEoX0xJTlVYX1BGS0VZMl9IKSAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3BnLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcGcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjk5NGJiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3BnLmgKQEAgLTAsMCArMSw2MyBAQAorLyogCXBnLmggKGMpIDE5OTggIEdyYW50IFIuIEd1ZW50aGVyIDxncmFudEB0b3JxdWUubmV0PgorIAkJICAgICAgIFVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKworCisJcGcuaCBkZWZpbmVzIHRoZSB1c2VyIGludGVyZmFjZSB0byB0aGUgZ2VuZXJpYyBBVEFQSSBwYWNrZXQKKyAgICAgICAgY29tbWFuZCBkcml2ZXIgZm9yIHBhcmFsbGVsIHBvcnQgQVRBUEkgZGV2aWNlcyAocGcpLiBUaGUKKwlkcml2ZXIgaXMgbG9vc2VseSBtb2RlbGxlZCBhZnRlciB0aGUgZ2VuZXJpYyBTQ1NJIGRyaXZlciwgc2csCisJYWx0aG91Z2ggdGhlIGFjdHVhbCBpbnRlcmZhY2UgaXMgZGlmZmVyZW50LgorCisJVGhlIHBnIGRyaXZlciBwcm92aWRlcyBhIHNpbXBsZSBjaGFyYWN0ZXIgZGV2aWNlIGludGVyZmFjZSBmb3IKKyAgICAgICAgc2VuZGluZyBBVEFQSSBjb21tYW5kcyB0byBhIGRldmljZS4gIFdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUKKwlBVEFQSSByZXNldCBvcGVyYXRpb24sIGFsbCBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQgYnkgYSBwYWlyCisgICAgICAgIG9mIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgdG8gdGhlIGFwcHJvcHJpYXRlIC9kZXYvcGdOIGRldmljZS4KKwlBIHdyaXRlIG9wZXJhdGlvbiBkZWxpdmVycyBhIGNvbW1hbmQgYW5kIGFueSBvdXRib3VuZCBkYXRhIGluCisgICAgICAgIGEgc2luZ2xlIGJ1ZmZlci4gIE5vcm1hbGx5LCB0aGUgd3JpdGUgd2lsbCBzdWNjZWVkIHVubGVzcyB0aGUKKyAgICAgICAgZGV2aWNlIGlzIG9mZmxpbmUgb3IgbWFsZnVuY3Rpb25pbmcsIG9yIHRoZXJlIGlzIGFscmVhZHkgYW5vdGhlcgorCWNvbW1hbmQgcGVuZGluZy4gIElmIHRoZSB3cml0ZSBzdWNjZWVkcywgaXQgc2hvdWxkIGJlIGZvbGxvd2VkCisgICAgICAgIGltbWVkaWF0ZWx5IGJ5IGEgcmVhZCBvcGVyYXRpb24sIHRvIG9idGFpbiBhbnkgcmV0dXJuZWQgZGF0YSBhbmQKKyAgICAgICAgc3RhdHVzIGluZm9ybWF0aW9uLiAgQSByZWFkIHdpbGwgZmFpbCBpZiB0aGVyZSBpcyBubyBvcGVyYXRpb24KKyAgICAgICAgaW4gcHJvZ3Jlc3MuCisKKwlBcyBhIHNwZWNpYWwgY2FzZSwgdGhlIGRldmljZSBjYW4gYmUgcmVzZXQgd2l0aCBhIHdyaXRlIG9wZXJhdGlvbiwKKyAgICAgICAgYW5kIGluIHRoaXMgY2FzZSwgbm8gZm9sbG93aW5nIHJlYWQgaXMgZXhwZWN0ZWQsIG9yIHBlcm1pdHRlZC4KKworCVRoZXJlIGFyZSBubyBpb2N0bCgpIG9wZXJhdGlvbnMuICBBbnkgc2luZ2xlIG9wZXJhdGlvbgorCW1heSB0cmFuc2ZlciBhdCBtb3N0IFBHX01BWF9EQVRBIGJ5dGVzLiAgTm90ZSB0aGF0IHRoZSBkcml2ZXIgbXVzdAorICAgICAgICBjb3B5IHRoZSBkYXRhIHRocm91Z2ggYW4gaW50ZXJuYWwgYnVmZmVyLiAgSW4ga2VlcGluZyB3aXRoIGFsbAorCWN1cnJlbnQgQVRBUEkgZGV2aWNlcywgY29tbWFuZCBwYWNrZXRzIGFyZSBhc3N1bWVkIHRvIGJlIGV4YWN0bHkKKwkxMiBieXRlcyBpbiBsZW5ndGguCisKKwlUbyBwZXJtaXQgZnV0dXJlIGNoYW5nZXMgdG8gdGhpcyBpbnRlcmZhY2UsIHRoZSBoZWFkZXJzIGluIHRoZQorCXJlYWQgYW5kIHdyaXRlIGJ1ZmZlcnMgY29udGFpbiBhIHNpbmdsZSBjaGFyYWN0ZXIgIm1hZ2ljIiBmbGFnLgorICAgICAgICBDdXJyZW50bHkgdGhpcyBmbGFnIG11c3QgYmUgdGhlIGNoYXJhY3RlciAiUCIuCisKKyovCisKKyNkZWZpbmUgUEdfTUFHSUMJJ1AnCisjZGVmaW5lIFBHX1JFU0VUCSdaJworI2RlZmluZSBQR19DT01NQU5ECSdDJworCisjZGVmaW5lIFBHX01BWF9EQVRBCTMyNzY4CisKK3N0cnVjdCBwZ193cml0ZV9oZHIgeworCisJY2hhcgltYWdpYzsJCS8qID09IFBHX01BR0lDICovCisJY2hhcglmdW5jOwkJLyogUEdfUkVTRVQgb3IgUEdfQ09NTUFORCAqLworCWludCAgICAgZGxlbjsJCS8qIG51bWJlciBvZiBieXRlcyBleHBlY3RlZCB0byB0cmFuc2ZlciAqLworCWludCAgICAgdGltZW91dDsJLyogbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIHRpbWVvdXQgKi8KKwljaGFyCXBhY2tldFsxMl07CS8qIHBhY2tldCBjb21tYW5kICovCisKK307CisKK3N0cnVjdCBwZ19yZWFkX2hkciB7CisKKwljaGFyCW1hZ2ljOwkJLyogPT0gUEdfTUFHSUMgKi8KKwljaGFyCXNjc2k7CQkvKiAic2NzaSIgc3RhdHVzID09IHNlbnNlIGtleSAqLworCWludAlkbGVuOwkJLyogc2l6ZSBvZiBkZXZpY2UgdHJhbnNmZXIgcmVxdWVzdCAqLworCWludCAgICAgZHVyYXRpb247CS8qIHRpbWUgaW4gc2Vjb25kcyBjb21tYW5kIHRvb2sgKi8KKwljaGFyICAgIHBhZFsxMl07CS8qIG5vdCB1c2VkICovCisKK307CisKKy8qIGVuZCBvZiBwZy5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcGhhbnRvbS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3BoYW50b20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGRkNjY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3BoYW50b20uaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IEppcmkgU2xhYnkgPGppcmlzbGFieUBnbWFpbC5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX1BIQU5UT01fSAorI2RlZmluZSBfX1BIQU5UT01fSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogUEhOXyhHL1MpRVRfUkVHIHBhcmFtICovCitzdHJ1Y3QgcGhtX3JlZyB7CisJX191MzIgcmVnOworCV9fdTMyIHZhbHVlOworfTsKKworLyogUEhOXyhHL1MpRVRfUkVHUyBwYXJhbSAqLworc3RydWN0IHBobV9yZWdzIHsKKwlfX3UzMiBjb3VudDsKKwlfX3UzMiBtYXNrOworCV9fdTMyIHZhbHVlc1s4XTsKK307CisKKyNkZWZpbmUgUEhfSU9DX01BR0lDCQkncCcKKyNkZWZpbmUgUEhOX0dFVF9SRUcJCV9JT1dSKFBIX0lPQ19NQUdJQywgMCwgc3RydWN0IHBobV9yZWcgKikKKyNkZWZpbmUgUEhOX1NFVF9SRUcJCV9JT1coUEhfSU9DX01BR0lDLCAxLCBzdHJ1Y3QgcGhtX3JlZyAqKQorI2RlZmluZSBQSE5fR0VUX1JFR1MJCV9JT1dSKFBIX0lPQ19NQUdJQywgMiwgc3RydWN0IHBobV9yZWdzICopCisjZGVmaW5lIFBITl9TRVRfUkVHUwkJX0lPVyhQSF9JT0NfTUFHSUMsIDMsIHN0cnVjdCBwaG1fcmVncyAqKQorLyogdGhpcyBpb2N0bCB0ZWxscyB0aGUgZHJpdmVyLCB0aGF0IHRoZSBjYWxsZXIgaXMgbm90IE9wZW5IYXB0aWNzIGFuZCBtaWdodAorICogdXNlIGltcHJvdmVkIHJlZ2lzdGVycyB1cGRhdGUgKG5vIG1vcmUgcGhhbnRvbSBzd2l0Y2hvZmZzIHdoZW4gdXNpbmcKKyAqIGxpYnBoYW50b20pICovCisjZGVmaW5lIFBITl9OT1RfT0gJCV9JTyhQSF9JT0NfTUFHSUMsIDQpCisjZGVmaW5lIFBITl9HRVRSRUcJCV9JT1dSKFBIX0lPQ19NQUdJQywgNSwgc3RydWN0IHBobV9yZWcpCisjZGVmaW5lIFBITl9TRVRSRUcJCV9JT1coUEhfSU9DX01BR0lDLCA2LCBzdHJ1Y3QgcGhtX3JlZykKKyNkZWZpbmUgUEhOX0dFVFJFR1MJCV9JT1dSKFBIX0lPQ19NQUdJQywgNywgc3RydWN0IHBobV9yZWdzKQorI2RlZmluZSBQSE5fU0VUUkVHUwkJX0lPVyhQSF9JT0NfTUFHSUMsIDgsIHN0cnVjdCBwaG1fcmVncykKKworI2RlZmluZSBQSE5fQ09OVFJPTAkJMHg2ICAgICAvKiBjb250cm9sIGJ5dGUgaW4gaWFkZHIgc3BhY2UgKi8KKyNkZWZpbmUgUEhOX0NUTF9BTVAJCTB4MSAgICAgLyogICBzd2l0Y2ggYWZ0ZXIgdG9ycXVlcyBjaGFuZ2UgKi8KKyNkZWZpbmUgUEhOX0NUTF9CVVQJCTB4MiAgICAgLyogICBpcyBidXR0b24gc3dpdGNoZWQgKi8KKyNkZWZpbmUgUEhOX0NUTF9JUlEJCTB4MTAgICAgLyogICBpcyBpcnEgZW5hYmxlZCAqLworCisjZGVmaW5lIFBITl9aRVJPX0ZPUkNFCQkyMDQ4CS8qIHplcm8gdG9ycXVlIG9uIG1vdG9yICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3Bob25ldC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3Bob25ldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNTFjZTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcGhvbmV0LmgKQEAgLTAsMCArMSwxODQgQEAKKy8qKgorICogZmlsZSBwaG9uZXQuaAorICoKKyAqIFBob25ldCBzb2NrZXRzIGtlcm5lbCBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICovCisKKyNpZm5kZWYgTElOVVhfUEhPTkVUX0gKKyNkZWZpbmUgTElOVVhfUEhPTkVUX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIEF1dG9tYXRpYyBwcm90b2NvbCBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgUE5fUFJPVE9fVFJBTlNQT1JUCTAKKy8qIFBob25ldCBkYXRhZ3JhbSBzb2NrZXQgKi8KKyNkZWZpbmUgUE5fUFJPVE9fUEhPTkVUCQkxCisvKiBQaG9uZXQgcGlwZSAqLworI2RlZmluZSBQTl9QUk9UT19QSVBFCQkyCisjZGVmaW5lIFBIT05FVF9OUFJPVE8JCTMKKworLyogU29ja2V0IG9wdGlvbnMgZm9yIFNPTF9QTlBJUEUgbGV2ZWwgKi8KKyNkZWZpbmUgUE5QSVBFX0VOQ0FQCQkxCisjZGVmaW5lIFBOUElQRV9JRklOREVYCQkyCisjZGVmaW5lIFBOUElQRV9QSVBFX0hBTkRMRQkzCisjZGVmaW5lIFBOUElQRV9FTkFCTEUgICAgICAgICAgIDQKKy8qIHVudXNlZCBzbG90ICovCisKKyNkZWZpbmUgUE5BRERSX0FOWQkJMAorI2RlZmluZSBQTkFERFJfQlJPQURDQVNUCTB4RkMKKyNkZWZpbmUgUE5QT1JUX1JFU09VUkNFX1JPVVRJTkcJMAorCisvKiBWYWx1ZXMgZm9yIFBOUElQRV9FTkNBUCBvcHRpb24gKi8KKyNkZWZpbmUgUE5QSVBFX0VOQ0FQX05PTkUJMAorI2RlZmluZSBQTlBJUEVfRU5DQVBfSVAJCTEKKworLyogaW9jdGxzICovCisjZGVmaW5lIFNJT0NQTkdFVE9CSkVDVAkJKFNJT0NQUk9UT1BSSVZBVEUgKyAwKQorI2RlZmluZSBTSU9DUE5BRERSRVNPVVJDRQkoU0lPQ1BST1RPUFJJVkFURSArIDE0KQorI2RlZmluZSBTSU9DUE5ERUxSRVNPVVJDRQkoU0lPQ1BST1RPUFJJVkFURSArIDE1KQorCisvKiBQaG9uZXQgcHJvdG9jb2wgaGVhZGVyICovCitzdHJ1Y3QgcGhvbmV0aGRyIHsKKwlfX3U4CXBuX3JkZXY7CisJX191OAlwbl9zZGV2OworCV9fdTgJcG5fcmVzOworCV9fYmUxNglwbl9sZW5ndGg7CisJX191OAlwbl9yb2JqOworCV9fdTgJcG5fc29iajsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIENvbW1vbiBQaG9uZXQgcGF5bG9hZCBoZWFkZXIgKi8KK3N0cnVjdCBwaG9uZXRtc2cgeworCV9fdTgJcG5fdHJhbnNfaWQ7CS8qIHRyYW5zYWN0aW9uIElEICovCisJX191OAlwbl9tc2dfaWQ7CS8qIG1lc3NhZ2UgdHlwZSAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCV9fdTgJcG5fc3VibXNnX2lkOwkvKiBtZXNzYWdlIHN1YnR5cGUgKi8KKwkJCV9fdTgJcG5fZGF0YVs1XTsKKwkJfSBiYXNlOworCQlzdHJ1Y3QgeworCQkJX191MTYJcG5fZV9yZXNfaWQ7CS8qIGV4dGVuZGVkIHJlc291cmNlIElEICovCisJCQlfX3U4CXBuX2Vfc3VibXNnX2lkOwkvKiBtZXNzYWdlIHN1YnR5cGUgKi8KKwkJCV9fdTgJcG5fZV9kYXRhWzNdOworCQl9IGV4dDsKKwl9IHBuX21zZ191OworfTsKKyNkZWZpbmUgUE5fQ09NTU9OX01FU1NBR0UJMHhGMAorI2RlZmluZSBQTl9DT01NR1IJCTB4MTAKKyNkZWZpbmUgUE5fUFJFRklYCQkweEUwIC8qIHJlc291cmNlIGZvciBleHRlbmRlZCBtZXNzYWdlcyAqLworI2RlZmluZSBwbl9zdWJtc2dfaWQJCXBuX21zZ191LmJhc2UucG5fc3VibXNnX2lkCisjZGVmaW5lIHBuX2Vfc3VibXNnX2lkCQlwbl9tc2dfdS5leHQucG5fZV9zdWJtc2dfaWQKKyNkZWZpbmUgcG5fZV9yZXNfaWQJCXBuX21zZ191LmV4dC5wbl9lX3Jlc19pZAorI2RlZmluZSBwbl9kYXRhCQkJcG5fbXNnX3UuYmFzZS5wbl9kYXRhCisjZGVmaW5lIHBuX2VfZGF0YQkJcG5fbXNnX3UuZXh0LnBuX2VfZGF0YQorCisvKiBkYXRhIGZvciB1bnJlYWNoYWJsZSBlcnJvcnMgKi8KKyNkZWZpbmUgUE5fQ09NTV9TRVJWSUNFX05PVF9JREVOVElGSUVEX1JFU1AJMHgwMQorI2RlZmluZSBQTl9DT01NX0lTQV9FTlRJVFlfTk9UX1JFQUNIQUJMRV9SRVNQCTB4MTQKKyNkZWZpbmUgcG5fb3JpZ19tc2dfaWQJCXBuX2RhdGFbMF0KKyNkZWZpbmUgcG5fc3RhdHVzCQlwbl9kYXRhWzFdCisjZGVmaW5lIHBuX2Vfb3JpZ19tc2dfaWQJcG5fZV9kYXRhWzBdCisjZGVmaW5lIHBuX2Vfc3RhdHVzCQlwbl9lX2RhdGFbMV0KKworLyogUGhvbmV0IHNvY2tldCBhZGRyZXNzIHN0cnVjdHVyZSAqLworc3RydWN0IHNvY2thZGRyX3BuIHsKKwlzYV9mYW1pbHlfdCBzcG5fZmFtaWx5OworCV9fdTggc3BuX29iajsKKwlfX3U4IHNwbl9kZXY7CisJX191OCBzcG5fcmVzb3VyY2U7CisJX191OCBzcG5femVyb1tzaXplb2Yoc3RydWN0IHNvY2thZGRyKSAtIHNpemVvZihzYV9mYW1pbHlfdCkgLSAzXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIFdlbGwga25vd24gYWRkcmVzcyAqLworI2RlZmluZSBQTl9ERVZfUEMJMHgxMAorCitzdGF0aWMgX19pbmxpbmVfXyBfX3UxNiBwbl9vYmplY3QoX191OCBhZGRyLCBfX3UxNiBwb3J0KQoreworCXJldHVybiAoYWRkciA8PCA4KSB8IChwb3J0ICYgMHgzZmYpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX3U4IHBuX29iaihfX3UxNiBoYW5kbGUpCit7CisJcmV0dXJuIGhhbmRsZSAmIDB4ZmY7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fdTggcG5fZGV2KF9fdTE2IGhhbmRsZSkKK3sKKwlyZXR1cm4gaGFuZGxlID4+IDg7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fdTE2IHBuX3BvcnQoX191MTYgaGFuZGxlKQoreworCXJldHVybiBoYW5kbGUgJiAweDNmZjsKK30KKworc3RhdGljIF9faW5saW5lX18gX191OCBwbl9hZGRyKF9fdTE2IGhhbmRsZSkKK3sKKwlyZXR1cm4gKGhhbmRsZSA+PiA4KSAmIDB4ZmM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcG5fc29ja2FkZHJfc2V0X2FkZHIoc3RydWN0IHNvY2thZGRyX3BuICpzcG4sIF9fdTggYWRkcikKK3sKKwlzcG4tPnNwbl9kZXYgJj0gMHgwMzsKKwlzcG4tPnNwbl9kZXYgfD0gYWRkciAmIDB4ZmM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcG5fc29ja2FkZHJfc2V0X3BvcnQoc3RydWN0IHNvY2thZGRyX3BuICpzcG4sIF9fdTE2IHBvcnQpCit7CisJc3BuLT5zcG5fZGV2ICY9IDB4ZmM7CisJc3BuLT5zcG5fZGV2IHw9IChwb3J0ID4+IDgpICYgMHgwMzsKKwlzcG4tPnNwbl9vYmogPSBwb3J0ICYgMHhmZjsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBwbl9zb2NrYWRkcl9zZXRfb2JqZWN0KHN0cnVjdCBzb2NrYWRkcl9wbiAqc3BuLAorCQkJCQkJX191MTYgaGFuZGxlKQoreworCXNwbi0+c3BuX2RldiA9IHBuX2RldihoYW5kbGUpOworCXNwbi0+c3BuX29iaiA9IHBuX29iaihoYW5kbGUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHBuX3NvY2thZGRyX3NldF9yZXNvdXJjZShzdHJ1Y3Qgc29ja2FkZHJfcG4gKnNwbiwKKwkJCQkJCV9fdTggcmVzb3VyY2UpCit7CisJc3BuLT5zcG5fcmVzb3VyY2UgPSByZXNvdXJjZTsKK30KKworc3RhdGljIF9faW5saW5lX18gX191OCBwbl9zb2NrYWRkcl9nZXRfYWRkcihjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfcG4gKnNwbikKK3sKKwlyZXR1cm4gc3BuLT5zcG5fZGV2ICYgMHhmYzsKK30KKworc3RhdGljIF9faW5saW5lX18gX191MTYgcG5fc29ja2FkZHJfZ2V0X3BvcnQoY29uc3Qgc3RydWN0IHNvY2thZGRyX3BuICpzcG4pCit7CisJcmV0dXJuICgoc3BuLT5zcG5fZGV2ICYgMHgwMykgPDwgOCkgfCBzcG4tPnNwbl9vYmo7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fdTE2IHBuX3NvY2thZGRyX2dldF9vYmplY3QoY29uc3Qgc3RydWN0IHNvY2thZGRyX3BuICpzcG4pCit7CisJcmV0dXJuIHBuX29iamVjdChzcG4tPnNwbl9kZXYsIHNwbi0+c3BuX29iaik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fdTggcG5fc29ja2FkZHJfZ2V0X3Jlc291cmNlKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9wbiAqc3BuKQoreworCXJldHVybiBzcG4tPnNwbl9yZXNvdXJjZTsKK30KKworLyogUGhvbmV0IGRldmljZSBpb2N0bCByZXF1ZXN0cyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wa3RfY2xzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcGt0X2Nscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZmJkZTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcGt0X2Nscy5oCkBAIC0wLDAgKzEsNDY3IEBACisjaWZuZGVmIF9fTElOVVhfUEtUX0NMU19ICisjZGVmaW5lIF9fTElOVVhfUEtUX0NMU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BrdF9zY2hlZC5oPgorCisvKiBJIHRoaW5rIGkgY291bGQgaGF2ZSBkb25lIGJldHRlciBtYWNyb3MgOyBmb3Igbm93IHRoaXMgaXMgc3RvbGVuIGZyb20KKyAqIHNvbWUgYXJjaC9taXBzIGNvZGUgLSBqaHMKKyovCisjZGVmaW5lIF9UQ19NQUtFMzIoeCkgKCh4KSkKKworI2RlZmluZSBfVENfTUFLRU1BU0sxKG4pIChfVENfTUFLRTMyKDEpIDw8IF9UQ19NQUtFMzIobikpCisjZGVmaW5lIF9UQ19NQUtFTUFTSyh2LG4pIChfVENfTUFLRTMyKChfVENfTUFLRTMyKDEpPDwodikpLTEpIDw8IF9UQ19NQUtFMzIobikpCisjZGVmaW5lIF9UQ19NQUtFVkFMVUUodixuKSAoX1RDX01BS0UzMih2KSA8PCBfVENfTUFLRTMyKG4pKQorI2RlZmluZSBfVENfR0VUVkFMVUUodixuLG0pICgoX1RDX01BS0UzMih2KSAmIF9UQ19NQUtFMzIobSkpID4+IF9UQ19NQUtFMzIobikpCisKKy8qIHZlcmRpY3QgYml0IGJyZWFrZG93biAKKyAqCitiaXQgMDogd2hlbiBzZXQgLT4gdGhpcyBwYWNrZXQgaGFzIGJlZW4gbXVuZ2VkIGFscmVhZHkKKworYml0IDE6IHdoZW4gc2V0IC0+IEl0IGlzIG9rIHRvIG11bmdlIHRoaXMgcGFja2V0CisKK2JpdCAyLDMsNCw1OiBSZWNsYXNzaWZ5IGNvdW50ZXIgLSBzb3J0IG9mIHJldmVyc2UgVFRMIC0gaWYgZXhjZWVkZWQKK2Fzc3VtZSBsb29wCisKK2JpdCA2LDc6IFdoZXJlIHRoaXMgcGFja2V0IHdhcyBsYXN0IHNlZW4gCiswOiBBYm92ZSB0aGUgdHJhbnNtaXQgZXhhbXBsZSBhdCB0aGUgc29ja2V0IGxldmVsCisxOiBvbiB0aGUgSW5ncmVzcworMjogb24gdGhlIEVncmVzcworCitiaXQgODogd2hlbiBzZXQgLS0+IFJlcXVlc3Qgbm90IHRvIGNsYXNzaWZ5IG9uIGluZ3Jlc3MuIAorCitiaXRzIDksMTAsMTE6IHJlZGlyZWN0IGNvdW50ZXIgLSAgcmVkaXJlY3QgVFRMLiBMb29wIGF2b2lkYW5jZQorCisgKgorICogKi8KKworI2RlZmluZSBUQ19NVU5HRUQgICAgICAgICAgX1RDX01BS0VNQVNLMSgwKQorI2RlZmluZSBTRVRfVENfTVVOR0VEKHYpICAgKCBUQ19NVU5HRUQgfCAodiAmIH5UQ19NVU5HRUQpKQorI2RlZmluZSBDTFJfVENfTVVOR0VEKHYpICAgKCB2ICYgflRDX01VTkdFRCkKKworI2RlZmluZSBUQ19PSzJNVU5HRSAgICAgICAgX1RDX01BS0VNQVNLMSgxKQorI2RlZmluZSBTRVRfVENfT0syTVVOR0UodikgICAoIFRDX09LMk1VTkdFIHwgKHYgJiB+VENfT0syTVVOR0UpKQorI2RlZmluZSBDTFJfVENfT0syTVVOR0UodikgICAoIHYgJiB+VENfT0syTVVOR0UpCisKKyNkZWZpbmUgU19UQ19WRVJEICAgICAgICAgIF9UQ19NQUtFMzIoMikKKyNkZWZpbmUgTV9UQ19WRVJEICAgICAgICAgIF9UQ19NQUtFTUFTSyg0LFNfVENfVkVSRCkKKyNkZWZpbmUgR19UQ19WRVJEKHgpICAgICAgIF9UQ19HRVRWQUxVRSh4LFNfVENfVkVSRCxNX1RDX1ZFUkQpCisjZGVmaW5lIFZfVENfVkVSRCh4KSAgICAgICBfVENfTUFLRVZBTFVFKHgsU19UQ19WRVJEKQorI2RlZmluZSBTRVRfVENfVkVSRCh2LG4pICAgKChWX1RDX1ZFUkQobikpIHwgKHYgJiB+TV9UQ19WRVJEKSkKKworI2RlZmluZSBTX1RDX0ZST00gICAgICAgICAgX1RDX01BS0UzMig2KQorI2RlZmluZSBNX1RDX0ZST00gICAgICAgICAgX1RDX01BS0VNQVNLKDIsU19UQ19GUk9NKQorI2RlZmluZSBHX1RDX0ZST00oeCkgICAgICAgX1RDX0dFVFZBTFVFKHgsU19UQ19GUk9NLE1fVENfRlJPTSkKKyNkZWZpbmUgVl9UQ19GUk9NKHgpICAgICAgIF9UQ19NQUtFVkFMVUUoeCxTX1RDX0ZST00pCisjZGVmaW5lIFNFVF9UQ19GUk9NKHYsbikgICAoKFZfVENfRlJPTShuKSkgfCAodiAmIH5NX1RDX0ZST00pKQorI2RlZmluZSBBVF9TVEFDSwkweDAKKyNkZWZpbmUgQVRfSU5HUkVTUwkweDEKKyNkZWZpbmUgQVRfRUdSRVNTCTB4MgorCisjZGVmaW5lIFRDX05DTFMgICAgICAgICAgX1RDX01BS0VNQVNLMSg4KQorI2RlZmluZSBTRVRfVENfTkNMUyh2KSAgICggVENfTkNMUyB8ICh2ICYgflRDX05DTFMpKQorI2RlZmluZSBDTFJfVENfTkNMUyh2KSAgICggdiAmIH5UQ19OQ0xTKQorCisjZGVmaW5lIFNfVENfUlRUTCAgICAgICAgICBfVENfTUFLRTMyKDkpCisjZGVmaW5lIE1fVENfUlRUTCAgICAgICAgICBfVENfTUFLRU1BU0soMyxTX1RDX1JUVEwpCisjZGVmaW5lIEdfVENfUlRUTCh4KSAgICAgICBfVENfR0VUVkFMVUUoeCxTX1RDX1JUVEwsTV9UQ19SVFRMKQorI2RlZmluZSBWX1RDX1JUVEwoeCkgICAgICAgX1RDX01BS0VWQUxVRSh4LFNfVENfUlRUTCkKKyNkZWZpbmUgU0VUX1RDX1JUVEwodixuKSAgICgoVl9UQ19SVFRMKG4pKSB8ICh2ICYgfk1fVENfUlRUTCkpCisKKyNkZWZpbmUgU19UQ19BVCAgICAgICAgICBfVENfTUFLRTMyKDEyKQorI2RlZmluZSBNX1RDX0FUICAgICAgICAgIF9UQ19NQUtFTUFTSygyLFNfVENfQVQpCisjZGVmaW5lIEdfVENfQVQoeCkgICAgICAgX1RDX0dFVFZBTFVFKHgsU19UQ19BVCxNX1RDX0FUKQorI2RlZmluZSBWX1RDX0FUKHgpICAgICAgIF9UQ19NQUtFVkFMVUUoeCxTX1RDX0FUKQorI2RlZmluZSBTRVRfVENfQVQodixuKSAgICgoVl9UQ19BVChuKSkgfCAodiAmIH5NX1RDX0FUKSkKKworLyogQWN0aW9uIGF0dHJpYnV0ZXMgKi8KK2VudW0geworCVRDQV9BQ1RfVU5TUEVDLAorCVRDQV9BQ1RfS0lORCwKKwlUQ0FfQUNUX09QVElPTlMsCisJVENBX0FDVF9JTkRFWCwKKwlUQ0FfQUNUX1NUQVRTLAorCV9fVENBX0FDVF9NQVgKK307CisKKyNkZWZpbmUgVENBX0FDVF9NQVggX19UQ0FfQUNUX01BWAorI2RlZmluZSBUQ0FfT0xEX0NPTVBBVCAoVENBX0FDVF9NQVgrMSkKKyNkZWZpbmUgVENBX0FDVF9NQVhfUFJJTyAzMgorI2RlZmluZSBUQ0FfQUNUX0JJTkQJMQorI2RlZmluZSBUQ0FfQUNUX05PQklORAkwCisjZGVmaW5lIFRDQV9BQ1RfVU5CSU5ECTEKKyNkZWZpbmUgVENBX0FDVF9OT1VOQklORAkwCisjZGVmaW5lIFRDQV9BQ1RfUkVQTEFDRQkJMQorI2RlZmluZSBUQ0FfQUNUX05PUkVQTEFDRQkwCisjZGVmaW5lIE1BWF9SRUNfTE9PUCA0CisjZGVmaW5lIE1BWF9SRURfTE9PUCA0CisKKyNkZWZpbmUgVENfQUNUX1VOU1BFQwkoLTEpCisjZGVmaW5lIFRDX0FDVF9PSwkJMAorI2RlZmluZSBUQ19BQ1RfUkVDTEFTU0lGWQkxCisjZGVmaW5lIFRDX0FDVF9TSE9UCQkyCisjZGVmaW5lIFRDX0FDVF9QSVBFCQkzCisjZGVmaW5lIFRDX0FDVF9TVE9MRU4JCTQKKyNkZWZpbmUgVENfQUNUX1FVRVVFRAkJNQorI2RlZmluZSBUQ19BQ1RfUkVQRUFUCQk2CisjZGVmaW5lIFRDX0FDVF9KVU1QCQkweDEwMDAwMDAwCisKKy8qIEFjdGlvbiB0eXBlIGlkZW50aWZpZXJzKi8KK2VudW0geworCVRDQV9JRF9VTlNQRUM9MCwKKwlUQ0FfSURfUE9MSUNFPTEsCisJLyogb3RoZXIgYWN0aW9ucyBnbyBoZXJlICovCisJX19UQ0FfSURfTUFYPTI1NQorfTsKKworI2RlZmluZSBUQ0FfSURfTUFYIF9fVENBX0lEX01BWAorCitzdHJ1Y3QgdGNfcG9saWNlIHsKKwlfX3UzMgkJCWluZGV4OworCWludAkJCWFjdGlvbjsKKyNkZWZpbmUgVENfUE9MSUNFX1VOU1BFQwlUQ19BQ1RfVU5TUEVDCisjZGVmaW5lIFRDX1BPTElDRV9PSwkJVENfQUNUX09LCisjZGVmaW5lIFRDX1BPTElDRV9SRUNMQVNTSUZZCVRDX0FDVF9SRUNMQVNTSUZZCisjZGVmaW5lIFRDX1BPTElDRV9TSE9UCQlUQ19BQ1RfU0hPVAorI2RlZmluZSBUQ19QT0xJQ0VfUElQRQkJVENfQUNUX1BJUEUKKworCV9fdTMyCQkJbGltaXQ7CisJX191MzIJCQlidXJzdDsKKwlfX3UzMgkJCW10dTsKKwlzdHJ1Y3QgdGNfcmF0ZXNwZWMJcmF0ZTsKKwlzdHJ1Y3QgdGNfcmF0ZXNwZWMJcGVha3JhdGU7CisJaW50IAkJCXJlZmNudDsKKwlpbnQgCQkJYmluZGNudDsKKwlfX3UzMgkJCWNhcGFiOworfTsKKworc3RydWN0IHRjZl90IHsKKwlfX3U2NCAgIGluc3RhbGw7CisJX191NjQgICBsYXN0dXNlOworCV9fdTY0ICAgZXhwaXJlczsKK307CisKK3N0cnVjdCB0Y19jbnQgeworCWludCAgICAgICAgICAgICAgICAgICByZWZjbnQ7IAorCWludCAgICAgICAgICAgICAgICAgICBiaW5kY250OworfTsKKworI2RlZmluZSB0Y19nZW4gXAorCV9fdTMyICAgICAgICAgICAgICAgICBpbmRleDsgXAorCV9fdTMyICAgICAgICAgICAgICAgICBjYXBhYjsgXAorCWludCAgICAgICAgICAgICAgICAgICBhY3Rpb247IFwKKwlpbnQgICAgICAgICAgICAgICAgICAgcmVmY250OyBcCisJaW50ICAgICAgICAgICAgICAgICAgIGJpbmRjbnQKKworZW51bSB7CisJVENBX1BPTElDRV9VTlNQRUMsCisJVENBX1BPTElDRV9UQkYsCisJVENBX1BPTElDRV9SQVRFLAorCVRDQV9QT0xJQ0VfUEVBS1JBVEUsCisJVENBX1BPTElDRV9BVlJBVEUsCisJVENBX1BPTElDRV9SRVNVTFQsCisJX19UQ0FfUE9MSUNFX01BWAorI2RlZmluZSBUQ0FfUE9MSUNFX1JFU1VMVCBUQ0FfUE9MSUNFX1JFU1VMVAorfTsKKworI2RlZmluZSBUQ0FfUE9MSUNFX01BWCAoX19UQ0FfUE9MSUNFX01BWCAtIDEpCisKKy8qIFUzMiBmaWx0ZXJzICovCisKKyNkZWZpbmUgVENfVTMyX0hUSUQoaCkgKChoKSYweEZGRjAwMDAwKQorI2RlZmluZSBUQ19VMzJfVVNFUkhUSUQoaCkgKFRDX1UzMl9IVElEKGgpPj4yMCkKKyNkZWZpbmUgVENfVTMyX0hBU0goaCkgKCgoaCk+PjEyKSYweEZGKQorI2RlZmluZSBUQ19VMzJfTk9ERShoKSAoKGgpJjB4RkZGKQorI2RlZmluZSBUQ19VMzJfS0VZKGgpICgoaCkmMHhGRkZGRikKKyNkZWZpbmUgVENfVTMyX1VOU1BFQwkwCisjZGVmaW5lIFRDX1UzMl9ST09UCSgweEZGRjAwMDAwKQorCitlbnVtIHsKKwlUQ0FfVTMyX1VOU1BFQywKKwlUQ0FfVTMyX0NMQVNTSUQsCisJVENBX1UzMl9IQVNILAorCVRDQV9VMzJfTElOSywKKwlUQ0FfVTMyX0RJVklTT1IsCisJVENBX1UzMl9TRUwsCisJVENBX1UzMl9QT0xJQ0UsCisJVENBX1UzMl9BQ1QsICAgCisJVENBX1UzMl9JTkRFViwKKwlUQ0FfVTMyX1BDTlQsCisJVENBX1UzMl9NQVJLLAorCV9fVENBX1UzMl9NQVgKK307CisKKyNkZWZpbmUgVENBX1UzMl9NQVggKF9fVENBX1UzMl9NQVggLSAxKQorCitzdHJ1Y3QgdGNfdTMyX2tleSB7CisJX19iZTMyCQltYXNrOworCV9fYmUzMgkJdmFsOworCWludAkJb2ZmOworCWludAkJb2ZmbWFzazsKK307CisKK3N0cnVjdCB0Y191MzJfc2VsIHsKKwl1bnNpZ25lZCBjaGFyCQlmbGFnczsKKwl1bnNpZ25lZCBjaGFyCQlvZmZzaGlmdDsKKwl1bnNpZ25lZCBjaGFyCQlua2V5czsKKworCV9fYmUxNgkJCW9mZm1hc2s7CisJX191MTYJCQlvZmY7CisJc2hvcnQJCQlvZmZvZmY7CisKKwlzaG9ydAkJCWhvZmY7CisJX19iZTMyCQkJaG1hc2s7CisJc3RydWN0IHRjX3UzMl9rZXkJa2V5c1swXTsKK307CisKK3N0cnVjdCB0Y191MzJfbWFyayB7CisJX191MzIJCXZhbDsKKwlfX3UzMgkJbWFzazsKKwlfX3UzMgkJc3VjY2VzczsKK307CisKK3N0cnVjdCB0Y191MzJfcGNudCB7CisJX191NjQgcmNudDsKKwlfX3U2NCByaGl0OworCV9fdTY0IGtjbnRzWzBdOworfTsKKworLyogRmxhZ3MgKi8KKworI2RlZmluZSBUQ19VMzJfVEVSTUlOQUwJCTEKKyNkZWZpbmUgVENfVTMyX09GRlNFVAkJMgorI2RlZmluZSBUQ19VMzJfVkFST0ZGU0VUCTQKKyNkZWZpbmUgVENfVTMyX0VBVAkJOAorCisjZGVmaW5lIFRDX1UzMl9NQVhERVBUSCA4CisKKworLyogUlNWUCBmaWx0ZXIgKi8KKworZW51bSB7CisJVENBX1JTVlBfVU5TUEVDLAorCVRDQV9SU1ZQX0NMQVNTSUQsCisJVENBX1JTVlBfRFNULAorCVRDQV9SU1ZQX1NSQywKKwlUQ0FfUlNWUF9QSU5GTywKKwlUQ0FfUlNWUF9QT0xJQ0UsCisJVENBX1JTVlBfQUNULAorCV9fVENBX1JTVlBfTUFYCit9OworCisjZGVmaW5lIFRDQV9SU1ZQX01BWCAoX19UQ0FfUlNWUF9NQVggLSAxICkKKworc3RydWN0IHRjX3JzdnBfZ3BpIHsKKwlfX3UzMglrZXk7CisJX191MzIJbWFzazsKKwlpbnQJb2Zmc2V0OworfTsKKworc3RydWN0IHRjX3JzdnBfcGluZm8geworCXN0cnVjdCB0Y19yc3ZwX2dwaSBkcGk7CisJc3RydWN0IHRjX3JzdnBfZ3BpIHNwaTsKKwlfX3U4CXByb3RvY29sOworCV9fdTgJdHVubmVsaWQ7CisJX191OAl0dW5uZWxoZHI7CisJX191OAlwYWQ7Cit9OworCisvKiBST1VURSBmaWx0ZXIgKi8KKworZW51bSB7CisJVENBX1JPVVRFNF9VTlNQRUMsCisJVENBX1JPVVRFNF9DTEFTU0lELAorCVRDQV9ST1VURTRfVE8sCisJVENBX1JPVVRFNF9GUk9NLAorCVRDQV9ST1VURTRfSUlGLAorCVRDQV9ST1VURTRfUE9MSUNFLAorCVRDQV9ST1VURTRfQUNULAorCV9fVENBX1JPVVRFNF9NQVgKK307CisKKyNkZWZpbmUgVENBX1JPVVRFNF9NQVggKF9fVENBX1JPVVRFNF9NQVggLSAxKQorCisKKy8qIEZXIGZpbHRlciAqLworCitlbnVtIHsKKwlUQ0FfRldfVU5TUEVDLAorCVRDQV9GV19DTEFTU0lELAorCVRDQV9GV19QT0xJQ0UsCisJVENBX0ZXX0lOREVWLCAvKiAgdXNlZCBieSBDT05GSUdfTkVUX0NMU19JTkQgKi8KKwlUQ0FfRldfQUNULCAvKiB1c2VkIGJ5IENPTkZJR19ORVRfQ0xTX0FDVCAqLworCVRDQV9GV19NQVNLLAorCV9fVENBX0ZXX01BWAorfTsKKworI2RlZmluZSBUQ0FfRldfTUFYIChfX1RDQV9GV19NQVggLSAxKQorCisvKiBUQyBpbmRleCBmaWx0ZXIgKi8KKworZW51bSB7CisJVENBX1RDSU5ERVhfVU5TUEVDLAorCVRDQV9UQ0lOREVYX0hBU0gsCisJVENBX1RDSU5ERVhfTUFTSywKKwlUQ0FfVENJTkRFWF9TSElGVCwKKwlUQ0FfVENJTkRFWF9GQUxMX1RIUk9VR0gsCisJVENBX1RDSU5ERVhfQ0xBU1NJRCwKKwlUQ0FfVENJTkRFWF9QT0xJQ0UsCisJVENBX1RDSU5ERVhfQUNULAorCV9fVENBX1RDSU5ERVhfTUFYCit9OworCisjZGVmaW5lIFRDQV9UQ0lOREVYX01BWCAgICAgKF9fVENBX1RDSU5ERVhfTUFYIC0gMSkKKworLyogRmxvdyBmaWx0ZXIgKi8KKworZW51bSB7CisJRkxPV19LRVlfU1JDLAorCUZMT1dfS0VZX0RTVCwKKwlGTE9XX0tFWV9QUk9UTywKKwlGTE9XX0tFWV9QUk9UT19TUkMsCisJRkxPV19LRVlfUFJPVE9fRFNULAorCUZMT1dfS0VZX0lJRiwKKwlGTE9XX0tFWV9QUklPUklUWSwKKwlGTE9XX0tFWV9NQVJLLAorCUZMT1dfS0VZX05GQ1QsCisJRkxPV19LRVlfTkZDVF9TUkMsCisJRkxPV19LRVlfTkZDVF9EU1QsCisJRkxPV19LRVlfTkZDVF9QUk9UT19TUkMsCisJRkxPV19LRVlfTkZDVF9QUk9UT19EU1QsCisJRkxPV19LRVlfUlRDTEFTU0lELAorCUZMT1dfS0VZX1NLVUlELAorCUZMT1dfS0VZX1NLR0lELAorCUZMT1dfS0VZX1ZMQU5fVEFHLAorCUZMT1dfS0VZX1JYSEFTSCwKKwlfX0ZMT1dfS0VZX01BWCwKK307CisKKyNkZWZpbmUgRkxPV19LRVlfTUFYCShfX0ZMT1dfS0VZX01BWCAtIDEpCisKK2VudW0geworCUZMT1dfTU9ERV9NQVAsCisJRkxPV19NT0RFX0hBU0gsCit9OworCitlbnVtIHsKKwlUQ0FfRkxPV19VTlNQRUMsCisJVENBX0ZMT1dfS0VZUywKKwlUQ0FfRkxPV19NT0RFLAorCVRDQV9GTE9XX0JBU0VDTEFTUywKKwlUQ0FfRkxPV19SU0hJRlQsCisJVENBX0ZMT1dfQURERU5ELAorCVRDQV9GTE9XX01BU0ssCisJVENBX0ZMT1dfWE9SLAorCVRDQV9GTE9XX0RJVklTT1IsCisJVENBX0ZMT1dfQUNULAorCVRDQV9GTE9XX1BPTElDRSwKKwlUQ0FfRkxPV19FTUFUQ0hFUywKKwlUQ0FfRkxPV19QRVJUVVJCLAorCV9fVENBX0ZMT1dfTUFYCit9OworCisjZGVmaW5lIFRDQV9GTE9XX01BWAkoX19UQ0FfRkxPV19NQVggLSAxKQorCisvKiBCYXNpYyBmaWx0ZXIgKi8KKworZW51bSB7CisJVENBX0JBU0lDX1VOU1BFQywKKwlUQ0FfQkFTSUNfQ0xBU1NJRCwKKwlUQ0FfQkFTSUNfRU1BVENIRVMsCisJVENBX0JBU0lDX0FDVCwKKwlUQ0FfQkFTSUNfUE9MSUNFLAorCV9fVENBX0JBU0lDX01BWAorfTsKKworI2RlZmluZSBUQ0FfQkFTSUNfTUFYIChfX1RDQV9CQVNJQ19NQVggLSAxKQorCisKKy8qIENncm91cCBjbGFzc2lmaWVyICovCisKK2VudW0geworCVRDQV9DR1JPVVBfVU5TUEVDLAorCVRDQV9DR1JPVVBfQUNULAorCVRDQV9DR1JPVVBfUE9MSUNFLAorCVRDQV9DR1JPVVBfRU1BVENIRVMsCisJX19UQ0FfQ0dST1VQX01BWCwKK307CisKKyNkZWZpbmUgVENBX0NHUk9VUF9NQVggKF9fVENBX0NHUk9VUF9NQVggLSAxKQorCisvKiBFeHRlbmRlZCBNYXRjaGVzICovCisKK3N0cnVjdCB0Y2ZfZW1hdGNoX3RyZWVfaGRyIHsKKwlfX3UxNgkJbm1hdGNoZXM7CisJX191MTYJCXByb2dpZDsKK307CisKK2VudW0geworCVRDQV9FTUFUQ0hfVFJFRV9VTlNQRUMsCisJVENBX0VNQVRDSF9UUkVFX0hEUiwKKwlUQ0FfRU1BVENIX1RSRUVfTElTVCwKKwlfX1RDQV9FTUFUQ0hfVFJFRV9NQVgKK307CisjZGVmaW5lIFRDQV9FTUFUQ0hfVFJFRV9NQVggKF9fVENBX0VNQVRDSF9UUkVFX01BWCAtIDEpCisKK3N0cnVjdCB0Y2ZfZW1hdGNoX2hkciB7CisJX191MTYJCW1hdGNoaWQ7CisJX191MTYJCWtpbmQ7CisJX191MTYJCWZsYWdzOworCV9fdTE2CQlwYWQ7IC8qIGN1cnJlbnRseSB1bnVzZWQgKi8KK307CisKKy8qICAwICAgICAgICAgICAgICAgICAgIDEKKyAqICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IAorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0rLSstLS0rCisgKiB8ICAgICAgICAgVW51c2VkICAgICAgICB8U3xJfCBSIHwKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstKy0rLS0tKworICoKKyAqIFIoMikgOjo9IHJlbGF0aW9uIHRvIG5leHQgZW1hdGNoCisgKiAgICAgICAgICB3aGVyZTogMCAwIEVORCAobGFzdCBlbWF0Y2gpCisgKiAgICAgICAgICAgICAgICAgMCAxIEFORAorICogICAgICAgICAgICAgICAgIDEgMCBPUgorICogICAgICAgICAgICAgICAgIDEgMSBVbnVzZWQgKGludmFsaWQpCisgKiBJKDEpIDo6PSBpbnZlcnQgcmVzdWx0CisgKiBTKDEpIDo6PSBzaW1wbGUgcGF5bG9hZAorICovCisjZGVmaW5lIFRDRl9FTV9SRUxfRU5ECTAKKyNkZWZpbmUgVENGX0VNX1JFTF9BTkQJKDE8PDApCisjZGVmaW5lIFRDRl9FTV9SRUxfT1IJKDE8PDEpCisjZGVmaW5lIFRDRl9FTV9JTlZFUlQJKDE8PDIpCisjZGVmaW5lIFRDRl9FTV9TSU1QTEUJKDE8PDMpCisKKyNkZWZpbmUgVENGX0VNX1JFTF9NQVNLCTMKKyNkZWZpbmUgVENGX0VNX1JFTF9WQUxJRCh2KSAoKCh2KSAmIFRDRl9FTV9SRUxfTUFTSykgIT0gVENGX0VNX1JFTF9NQVNLKQorCitlbnVtIHsKKwlUQ0ZfTEFZRVJfTElOSywKKwlUQ0ZfTEFZRVJfTkVUV09SSywKKwlUQ0ZfTEFZRVJfVFJBTlNQT1JULAorCV9fVENGX0xBWUVSX01BWAorfTsKKyNkZWZpbmUgVENGX0xBWUVSX01BWCAoX19UQ0ZfTEFZRVJfTUFYIC0gMSkKKworLyogRW1hdGNoIHR5cGUgYXNzaWdubWVudHMKKyAqICAgMS4uMzI3NjcJCVJlc2VydmVkIGZvciBlbWF0Y2hlcyBpbnNpZGUga2VybmVsIHRyZWUKKyAqICAgMzI3NjguLjY1NTM1CUZyZWUgdG8gdXNlLCBub3QgcmVsaWFibGUKKyAqLworI2RlZmluZQlUQ0ZfRU1fQ09OVEFJTkVSCTAKKyNkZWZpbmUJVENGX0VNX0NNUAkJMQorI2RlZmluZQlUQ0ZfRU1fTkJZVEUJCTIKKyNkZWZpbmUJVENGX0VNX1UzMgkJMworI2RlZmluZQlUQ0ZfRU1fTUVUQQkJNAorI2RlZmluZQlUQ0ZfRU1fVEVYVAkJNQorI2RlZmluZSAgICAgICAgVENGX0VNX1ZMQU4JCTYKKyNkZWZpbmUJVENGX0VNX01BWAkJNgorCitlbnVtIHsKKwlUQ0ZfRU1fUFJPR19UQworfTsKKworZW51bSB7CisJVENGX0VNX09QTkRfRVEsCisJVENGX0VNX09QTkRfR1QsCisJVENGX0VNX09QTkRfTFQKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3BrdF9zY2hlZC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3BrdF9zY2hlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZmE0YmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcGt0X3NjaGVkLmgKQEAgLTAsMCArMSw0ODQgQEAKKyNpZm5kZWYgX19MSU5VWF9QS1RfU0NIRURfSAorI2RlZmluZSBfX0xJTlVYX1BLVF9TQ0hFRF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBMb2dpY2FsIHByaW9yaXR5IGJhbmRzIG5vdCBkZXBlbmRpbmcgb24gc3BlY2lmaWMgcGFja2V0IHNjaGVkdWxlci4KKyAgIEV2ZXJ5IHNjaGVkdWxlciB3aWxsIG1hcCB0aGVtIHRvIHJlYWwgdHJhZmZpYyBjbGFzc2VzLCBpZiBpdCBoYXMKKyAgIG5vIG1vcmUgcHJlY2lzZSBtZWNoYW5pc20gdG8gY2xhc3NpZnkgcGFja2V0cy4KKworICAgVGhlc2UgbnVtYmVycyBoYXZlIG5vIHNwZWNpYWwgbWVhbmluZywgdGhvdWdoIHRoZWlyIGNvaW5jaWRlbmNlCisgICB3aXRoIG9ic29sZXRlIElQdjYgdmFsdWVzIGlzIG5vdCBvY2Nhc2lvbmFsIDotKS4gTmV3IElQdjYgZHJhZnRzCisgICBwcmVmZXJyZWQgZnVsbCBhbmFyY2h5IGluc3BpcmVkIGJ5IGRpZmZzZXJ2IGdyb3VwLgorCisgICBOb3RlOiBUQ19QUklPX0JFU1RFRkZPUlQgZG9lcyBub3QgbWVhbiB0aGF0IGl0IGlzIHRoZSBtb3N0IHVuaGFwcHkKKyAgIGNsYXNzLCBhY3R1YWxseSwgYXMgcnVsZSBpdCB3aWxsIGJlIGhhbmRsZWQgd2l0aCBtb3JlIGNhcmUgdGhhbgorICAgZmlsbGVyIG9yIGV2ZW4gYnVsay4KKyAqLworCisjZGVmaW5lIFRDX1BSSU9fQkVTVEVGRk9SVAkJMAorI2RlZmluZSBUQ19QUklPX0ZJTExFUgkJCTEKKyNkZWZpbmUgVENfUFJJT19CVUxLCQkJMgorI2RlZmluZSBUQ19QUklPX0lOVEVSQUNUSVZFX0JVTEsJNAorI2RlZmluZSBUQ19QUklPX0lOVEVSQUNUSVZFCQk2CisjZGVmaW5lIFRDX1BSSU9fQ09OVFJPTAkJCTcKKworI2RlZmluZSBUQ19QUklPX01BWAkJCTE1CisKKy8qIEdlbmVyaWMgcXVldWUgc3RhdGlzdGljcywgYXZhaWxhYmxlIGZvciBhbGwgdGhlIGVsZW1lbnRzLgorICAgUGFydGljdWxhciBzY2hlZHVsZXJzIG1heSBoYXZlIGFsc28gdGhlaXIgcHJpdmF0ZSByZWNvcmRzLgorICovCisKK3N0cnVjdCB0Y19zdGF0cyB7CisJX191NjQJYnl0ZXM7CQkJLyogTlVtYmVyIG9mIGVucXVldWVzIGJ5dGVzICovCisJX191MzIJcGFja2V0czsJCS8qIE51bWJlciBvZiBlbnF1ZXVlZCBwYWNrZXRzCSovCisJX191MzIJZHJvcHM7CQkJLyogUGFja2V0cyBkcm9wcGVkIGJlY2F1c2Ugb2YgbGFjayBvZiByZXNvdXJjZXMgKi8KKwlfX3UzMglvdmVybGltaXRzOwkJLyogTnVtYmVyIG9mIHRocm90dGxlIGV2ZW50cyB3aGVuIHRoaXMKKwkJCQkJICogZmxvdyBnb2VzIG91dCBvZiBhbGxvY2F0ZWQgYmFuZHdpZHRoICovCisJX191MzIJYnBzOwkJCS8qIEN1cnJlbnQgZmxvdyBieXRlIHJhdGUgKi8KKwlfX3UzMglwcHM7CQkJLyogQ3VycmVudCBmbG93IHBhY2tldCByYXRlICovCisJX191MzIJcWxlbjsKKwlfX3UzMgliYWNrbG9nOworfTsKKworc3RydWN0IHRjX2VzdGltYXRvciB7CisJc2lnbmVkIGNoYXIJaW50ZXJ2YWw7CisJdW5zaWduZWQgY2hhcglld21hX2xvZzsKK307CisKKy8qICJIYW5kbGVzIgorICAgLS0tLS0tLS0tCisKKyAgICBBbGwgdGhlIHRyYWZmaWMgY29udHJvbCBvYmplY3RzIGhhdmUgMzJiaXQgaWRlbnRpZmllcnMsIG9yICJoYW5kbGVzIi4KKworICAgIFRoZXkgY2FuIGJlIGNvbnNpZGVyZWQgYXMgb3BhcXVlIG51bWJlcnMgZnJvbSB1c2VyIEFQSSB2aWV3cG9pbnQsCisgICAgYnV0IGFjdHVhbGx5IHRoZXkgYWx3YXlzIGNvbnNpc3Qgb2YgdHdvIGZpZWxkczogbWFqb3IgYW5kCisgICAgbWlub3IgbnVtYmVycywgd2hpY2ggYXJlIGludGVycHJldGVkIGJ5IGtlcm5lbCBzcGVjaWFsbHksCisgICAgdGhhdCBtYXkgYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMsIHRob3VnaCBub3QgcmVjb21tZW5kZWQuCisKKyAgICBGLmUuIHFkaXNjIGhhbmRsZXMgYWx3YXlzIGhhdmUgbWlub3IgbnVtYmVyIGVxdWFsIHRvIHplcm8sCisgICAgY2xhc3NlcyAob3IgZmxvd3MpIGhhdmUgbWFqb3IgZXF1YWwgdG8gcGFyZW50IHFkaXNjIG1ham9yLCBhbmQKKyAgICBtaW5vciB1bmlxdWVseSBpZGVudGlmeWluZyBjbGFzcyBpbnNpZGUgcWRpc2MuCisKKyAgICBNYWNyb3MgdG8gbWFuaXB1bGF0ZSBoYW5kbGVzOgorICovCisKKyNkZWZpbmUgVENfSF9NQUpfTUFTSyAoMHhGRkZGMDAwMFUpCisjZGVmaW5lIFRDX0hfTUlOX01BU0sgKDB4MDAwMEZGRkZVKQorI2RlZmluZSBUQ19IX01BSihoKSAoKGgpJlRDX0hfTUFKX01BU0spCisjZGVmaW5lIFRDX0hfTUlOKGgpICgoaCkmVENfSF9NSU5fTUFTSykKKyNkZWZpbmUgVENfSF9NQUtFKG1haixtaW4pICgoKG1haikmVENfSF9NQUpfTUFTSyl8KChtaW4pJlRDX0hfTUlOX01BU0spKQorCisjZGVmaW5lIFRDX0hfVU5TUEVDCSgwVSkKKyNkZWZpbmUgVENfSF9ST09UCSgweEZGRkZGRkZGVSkKKyNkZWZpbmUgVENfSF9JTkdSRVNTICAgICgweEZGRkZGRkYxVSkKKworc3RydWN0IHRjX3JhdGVzcGVjIHsKKwl1bnNpZ25lZCBjaGFyCWNlbGxfbG9nOworCXVuc2lnbmVkIGNoYXIJX19yZXNlcnZlZDsKKwl1bnNpZ25lZCBzaG9ydAlvdmVyaGVhZDsKKwlzaG9ydAkJY2VsbF9hbGlnbjsKKwl1bnNpZ25lZCBzaG9ydAltcHU7CisJX191MzIJCXJhdGU7Cit9OworCisjZGVmaW5lIFRDX1JUQUJfU0laRQkxMDI0CisKK3N0cnVjdCB0Y19zaXplc3BlYyB7CisJdW5zaWduZWQgY2hhcgljZWxsX2xvZzsKKwl1bnNpZ25lZCBjaGFyCXNpemVfbG9nOworCXNob3J0CQljZWxsX2FsaWduOworCWludAkJb3ZlcmhlYWQ7CisJdW5zaWduZWQgaW50CWxpbmtsYXllcjsKKwl1bnNpZ25lZCBpbnQJbXB1OworCXVuc2lnbmVkIGludAltdHU7CisJdW5zaWduZWQgaW50CXRzaXplOworfTsKKworZW51bSB7CisJVENBX1NUQUJfVU5TUEVDLAorCVRDQV9TVEFCX0JBU0UsCisJVENBX1NUQUJfREFUQSwKKwlfX1RDQV9TVEFCX01BWAorfTsKKworI2RlZmluZSBUQ0FfU1RBQl9NQVggKF9fVENBX1NUQUJfTUFYIC0gMSkKKworLyogRklGTyBzZWN0aW9uICovCisKK3N0cnVjdCB0Y19maWZvX3FvcHQgeworCV9fdTMyCWxpbWl0OwkvKiBRdWV1ZSBsZW5ndGg6IGJ5dGVzIGZvciBiZmlmbywgcGFja2V0cyBmb3IgcGZpZm8gKi8KK307CisKKy8qIFBSSU8gc2VjdGlvbiAqLworCisjZGVmaW5lIFRDUV9QUklPX0JBTkRTCTE2CisjZGVmaW5lIFRDUV9NSU5fUFJJT19CQU5EUyAyCisKK3N0cnVjdCB0Y19wcmlvX3FvcHQgeworCWludAliYW5kczsJCQkvKiBOdW1iZXIgb2YgYmFuZHMgKi8KKwlfX3U4CXByaW9tYXBbVENfUFJJT19NQVgrMV07CS8qIE1hcDogbG9naWNhbCBwcmlvcml0eSAtPiBQUklPIGJhbmQgKi8KK307CisKKy8qIE1VTFRJUSBzZWN0aW9uICovCisKK3N0cnVjdCB0Y19tdWx0aXFfcW9wdCB7CisJX191MTYJYmFuZHM7CQkJLyogTnVtYmVyIG9mIGJhbmRzICovCisJX191MTYJbWF4X2JhbmRzOwkJLyogTWF4aW11bSBudW1iZXIgb2YgcXVldWVzICovCit9OworCisvKiBUQkYgc2VjdGlvbiAqLworCitzdHJ1Y3QgdGNfdGJmX3FvcHQgeworCXN0cnVjdCB0Y19yYXRlc3BlYyByYXRlOworCXN0cnVjdCB0Y19yYXRlc3BlYyBwZWFrcmF0ZTsKKwlfX3UzMgkJbGltaXQ7CisJX191MzIJCWJ1ZmZlcjsKKwlfX3UzMgkJbXR1OworfTsKKworZW51bSB7CisJVENBX1RCRl9VTlNQRUMsCisJVENBX1RCRl9QQVJNUywKKwlUQ0FfVEJGX1JUQUIsCisJVENBX1RCRl9QVEFCLAorCV9fVENBX1RCRl9NQVgsCit9OworCisjZGVmaW5lIFRDQV9UQkZfTUFYIChfX1RDQV9UQkZfTUFYIC0gMSkKKworCisvKiBURVFMIHNlY3Rpb24gKi8KKworLyogVEVRTCBkb2VzIG5vdCByZXF1aXJlIGFueSBwYXJhbWV0ZXJzICovCisKKy8qIFNGUSBzZWN0aW9uICovCisKK3N0cnVjdCB0Y19zZnFfcW9wdCB7CisJdW5zaWduZWQJcXVhbnR1bTsJLyogQnl0ZXMgcGVyIHJvdW5kIGFsbG9jYXRlZCB0byBmbG93ICovCisJaW50CQlwZXJ0dXJiX3BlcmlvZDsJLyogUGVyaW9kIG9mIGhhc2ggcGVydHVyYmF0aW9uICovCisJX191MzIJCWxpbWl0OwkJLyogTWF4aW1hbCBwYWNrZXRzIGluIHF1ZXVlICovCisJdW5zaWduZWQJZGl2aXNvcjsJLyogSGFzaCBkaXZpc29yICAqLworCXVuc2lnbmVkCWZsb3dzOwkJLyogTWF4aW1hbCBudW1iZXIgb2YgZmxvd3MgICovCit9OworCitzdHJ1Y3QgdGNfc2ZxX3hzdGF0cyB7CisJX19zMzIJCWFsbG90OworfTsKKworLyoKKyAqICBOT1RFOiBsaW1pdCwgZGl2aXNvciBhbmQgZmxvd3MgYXJlIGhhcmR3aXJlZCB0byBjb2RlIGF0IHRoZSBtb21lbnQuCisgKgorICoJbGltaXQ9Zmxvd3M9MTI4LCBkaXZpc29yPTEwMjQ7CisgKgorICoJVGhlIG9ubHkgcmVhc29uIGZvciB0aGlzIGlzIGVmZmljaWVuY3ksIGl0IGlzIHBvc3NpYmxlCisgKgl0byBjaGFuZ2UgdGhlc2UgcGFyYW1ldGVycyBpbiBjb21waWxlIHRpbWUuCisgKi8KKworLyogUkVEIHNlY3Rpb24gKi8KKworZW51bSB7CisJVENBX1JFRF9VTlNQRUMsCisJVENBX1JFRF9QQVJNUywKKwlUQ0FfUkVEX1NUQUIsCisJX19UQ0FfUkVEX01BWCwKK307CisKKyNkZWZpbmUgVENBX1JFRF9NQVggKF9fVENBX1JFRF9NQVggLSAxKQorCitzdHJ1Y3QgdGNfcmVkX3FvcHQgeworCV9fdTMyCQlsaW1pdDsJCS8qIEhBUkQgbWF4aW1hbCBxdWV1ZSBsZW5ndGggKGJ5dGVzKQkqLworCV9fdTMyCQlxdGhfbWluOwkvKiBNaW4gYXZlcmFnZSBsZW5ndGggdGhyZXNob2xkIChieXRlcykgKi8KKwlfX3UzMgkJcXRoX21heDsJLyogTWF4IGF2ZXJhZ2UgbGVuZ3RoIHRocmVzaG9sZCAoYnl0ZXMpICovCisJdW5zaWduZWQgY2hhciAgIFdsb2c7CQkvKiBsb2coVykJCSovCisJdW5zaWduZWQgY2hhciAgIFBsb2c7CQkvKiBsb2coUF9tYXgvKHF0aF9tYXgtcXRoX21pbikpCSovCisJdW5zaWduZWQgY2hhciAgIFNjZWxsX2xvZzsJLyogY2VsbCBzaXplIGZvciBpZGxlIGRhbXBpbmcgKi8KKwl1bnNpZ25lZCBjaGFyCWZsYWdzOworI2RlZmluZSBUQ19SRURfRUNOCTEKKyNkZWZpbmUgVENfUkVEX0hBUkREUk9QCTIKK307CisKK3N0cnVjdCB0Y19yZWRfeHN0YXRzIHsKKwlfX3UzMiAgICAgICAgICAgZWFybHk7ICAgICAgICAgIC8qIEVhcmx5IGRyb3BzICovCisJX191MzIgICAgICAgICAgIHBkcm9wOyAgICAgICAgICAvKiBEcm9wcyBkdWUgdG8gcXVldWUgbGltaXRzICovCisJX191MzIgICAgICAgICAgIG90aGVyOyAgICAgICAgICAvKiBEcm9wcyBkdWUgdG8gZHJvcCgpIGNhbGxzICovCisJX191MzIgICAgICAgICAgIG1hcmtlZDsgICAgICAgICAvKiBNYXJrZWQgcGFja2V0cyAqLworfTsKKworLyogR1JFRCBzZWN0aW9uICovCisKKyNkZWZpbmUgTUFYX0RQcyAxNgorCitlbnVtIHsKKyAgICAgICBUQ0FfR1JFRF9VTlNQRUMsCisgICAgICAgVENBX0dSRURfUEFSTVMsCisgICAgICAgVENBX0dSRURfU1RBQiwKKyAgICAgICBUQ0FfR1JFRF9EUFMsCisJICAgX19UQ0FfR1JFRF9NQVgsCit9OworCisjZGVmaW5lIFRDQV9HUkVEX01BWCAoX19UQ0FfR1JFRF9NQVggLSAxKQorCitzdHJ1Y3QgdGNfZ3JlZF9xb3B0IHsKKwlfX3UzMgkJbGltaXQ7ICAgICAgICAvKiBIQVJEIG1heGltYWwgcXVldWUgbGVuZ3RoIChieXRlcykgICAgKi8KKwlfX3UzMgkJcXRoX21pbjsgICAgICAvKiBNaW4gYXZlcmFnZSBsZW5ndGggdGhyZXNob2xkIChieXRlcykgKi8KKwlfX3UzMgkJcXRoX21heDsgICAgICAvKiBNYXggYXZlcmFnZSBsZW5ndGggdGhyZXNob2xkIChieXRlcykgKi8KKwlfX3UzMgkJRFA7ICAgICAgICAgICAvKiB1cHRvIDJeMzIgRFBzICovCisJX191MzIJCWJhY2tsb2c7CisJX191MzIJCXFhdmU7CisJX191MzIJCWZvcmNlZDsKKwlfX3UzMgkJZWFybHk7CisJX191MzIJCW90aGVyOworCV9fdTMyCQlwZHJvcDsKKwlfX3U4CQlXbG9nOyAgICAgICAgIC8qIGxvZyhXKSAgICAgICAgICAgICAgICovCisJX191OAkJUGxvZzsgICAgICAgICAvKiBsb2coUF9tYXgvKHF0aF9tYXgtcXRoX21pbikpICovCisJX191OAkJU2NlbGxfbG9nOyAgICAvKiBjZWxsIHNpemUgZm9yIGlkbGUgZGFtcGluZyAqLworCV9fdTgJCXByaW87ICAgICAgICAgLyogcHJpbyBvZiB0aGlzIFZRICovCisJX191MzIJCXBhY2tldHM7CisJX191MzIJCWJ5dGVzaW47Cit9OworCisvKiBncmVkIHNldHVwICovCitzdHJ1Y3QgdGNfZ3JlZF9zb3B0IHsKKwlfX3UzMgkJRFBzOworCV9fdTMyCQlkZWZfRFA7CisJX191OAkJZ3JpbzsKKwlfX3U4CQlmbGFnczsKKwlfX3UxNgkJcGFkMTsKK307CisKKy8qIEhUQiBzZWN0aW9uICovCisjZGVmaW5lIFRDX0hUQl9OVU1QUklPCQk4CisjZGVmaW5lIFRDX0hUQl9NQVhERVBUSAkJOAorI2RlZmluZSBUQ19IVEJfUFJPVE9WRVIJCTMgLyogdGhlIHNhbWUgYXMgSFRCIGFuZCBUQydzIG1ham9yICovCisKK3N0cnVjdCB0Y19odGJfb3B0IHsKKwlzdHJ1Y3QgdGNfcmF0ZXNwZWMgCXJhdGU7CisJc3RydWN0IHRjX3JhdGVzcGVjIAljZWlsOworCV9fdTMyCWJ1ZmZlcjsKKwlfX3UzMgljYnVmZmVyOworCV9fdTMyCXF1YW50dW07CisJX191MzIJbGV2ZWw7CQkvKiBvdXQgb25seSAqLworCV9fdTMyCXByaW87Cit9Oworc3RydWN0IHRjX2h0Yl9nbG9iIHsKKwlfX3UzMiB2ZXJzaW9uOwkJLyogdG8gbWF0Y2ggSFRCL1RDICovCisgICAgCV9fdTMyIHJhdGUycXVhbnR1bTsJLyogYnBzLT5xdWFudHVtIGRpdmlzb3IgKi8KKyAgICAJX191MzIgZGVmY2xzOwkJLyogZGVmYXVsdCBjbGFzcyBudW1iZXIgKi8KKwlfX3UzMiBkZWJ1ZzsJCS8qIGRlYnVnIGZsYWdzICovCisKKwkvKiBzdGF0cyAqLworCV9fdTMyIGRpcmVjdF9wa3RzOyAvKiBjb3VudCBvZiBub24gc2hhcHBlZCBwYWNrZXRzICovCit9OworZW51bSB7CisJVENBX0hUQl9VTlNQRUMsCisJVENBX0hUQl9QQVJNUywKKwlUQ0FfSFRCX0lOSVQsCisJVENBX0hUQl9DVEFCLAorCVRDQV9IVEJfUlRBQiwKKwlfX1RDQV9IVEJfTUFYLAorfTsKKworI2RlZmluZSBUQ0FfSFRCX01BWCAoX19UQ0FfSFRCX01BWCAtIDEpCisKK3N0cnVjdCB0Y19odGJfeHN0YXRzIHsKKwlfX3UzMiBsZW5kczsKKwlfX3UzMiBib3Jyb3dzOworCV9fdTMyIGdpYW50czsJLyogdG9vIGJpZyBwYWNrZXRzIChyYXRlIHdpbGwgbm90IGJlIGFjY3VyYXRlKSAqLworCV9fdTMyIHRva2VuczsKKwlfX3UzMiBjdG9rZW5zOworfTsKKworLyogSEZTQyBzZWN0aW9uICovCisKK3N0cnVjdCB0Y19oZnNjX3FvcHQgeworCV9fdTE2CWRlZmNsczsJCS8qIGRlZmF1bHQgY2xhc3MgKi8KK307CisKK3N0cnVjdCB0Y19zZXJ2aWNlX2N1cnZlIHsKKwlfX3UzMgltMTsJCS8qIHNsb3BlIG9mIHRoZSBmaXJzdCBzZWdtZW50IGluIGJwcyAqLworCV9fdTMyCWQ7CQkvKiB4LXByb2plY3Rpb24gb2YgdGhlIGZpcnN0IHNlZ21lbnQgaW4gdXMgKi8KKwlfX3UzMgltMjsJCS8qIHNsb3BlIG9mIHRoZSBzZWNvbmQgc2VnbWVudCBpbiBicHMgKi8KK307CisKK3N0cnVjdCB0Y19oZnNjX3N0YXRzIHsKKwlfX3U2NAl3b3JrOwkJLyogdG90YWwgd29yayBkb25lICovCisJX191NjQJcnR3b3JrOwkJLyogd29yayBkb25lIGJ5IHJlYWwtdGltZSBjcml0ZXJpYSAqLworCV9fdTMyCXBlcmlvZDsJCS8qIGN1cnJlbnQgcGVyaW9kICovCisJX191MzIJbGV2ZWw7CQkvKiBjbGFzcyBsZXZlbCBpbiBoaWVyYXJjaHkgKi8KK307CisKK2VudW0geworCVRDQV9IRlNDX1VOU1BFQywKKwlUQ0FfSEZTQ19SU0MsCisJVENBX0hGU0NfRlNDLAorCVRDQV9IRlNDX1VTQywKKwlfX1RDQV9IRlNDX01BWCwKK307CisKKyNkZWZpbmUgVENBX0hGU0NfTUFYIChfX1RDQV9IRlNDX01BWCAtIDEpCisKKworLyogQ0JRIHNlY3Rpb24gKi8KKworI2RlZmluZSBUQ19DQlFfTUFYUFJJTwkJOAorI2RlZmluZSBUQ19DQlFfTUFYTEVWRUwJCTgKKyNkZWZpbmUgVENfQ0JRX0RFRl9FV01BCQk1CisKK3N0cnVjdCB0Y19jYnFfbHNzb3B0IHsKKwl1bnNpZ25lZCBjaGFyCWNoYW5nZTsKKwl1bnNpZ25lZCBjaGFyCWZsYWdzOworI2RlZmluZSBUQ0ZfQ0JRX0xTU19CT1VOREVECTEKKyNkZWZpbmUgVENGX0NCUV9MU1NfSVNPTEFURUQJMgorCXVuc2lnbmVkIGNoYXIgIAlld21hX2xvZzsKKwl1bnNpZ25lZCBjaGFyICAJbGV2ZWw7CisjZGVmaW5lIFRDRl9DQlFfTFNTX0ZMQUdTCTEKKyNkZWZpbmUgVENGX0NCUV9MU1NfRVdNQQkyCisjZGVmaW5lIFRDRl9DQlFfTFNTX01BWElETEUJNAorI2RlZmluZSBUQ0ZfQ0JRX0xTU19NSU5JRExFCTgKKyNkZWZpbmUgVENGX0NCUV9MU1NfT0ZGVElNRQkweDEwCisjZGVmaW5lIFRDRl9DQlFfTFNTX0FWUEtUCTB4MjAKKwlfX3UzMgkJbWF4aWRsZTsKKwlfX3UzMgkJbWluaWRsZTsKKwlfX3UzMgkJb2ZmdGltZTsKKwlfX3UzMgkJYXZwa3Q7Cit9OworCitzdHJ1Y3QgdGNfY2JxX3dycm9wdCB7CisJdW5zaWduZWQgY2hhcglmbGFnczsKKwl1bnNpZ25lZCBjaGFyCXByaW9yaXR5OworCXVuc2lnbmVkIGNoYXIJY3ByaW9yaXR5OworCXVuc2lnbmVkIGNoYXIJX19yZXNlcnZlZDsKKwlfX3UzMgkJYWxsb3Q7CisJX191MzIJCXdlaWdodDsKK307CisKK3N0cnVjdCB0Y19jYnFfb3ZsIHsKKwl1bnNpZ25lZCBjaGFyCXN0cmF0ZWd5OworI2RlZmluZQlUQ19DQlFfT1ZMX0NMQVNTSUMJMAorI2RlZmluZQlUQ19DQlFfT1ZMX0RFTEFZCTEKKyNkZWZpbmUJVENfQ0JRX09WTF9MT1dQUklPCTIKKyNkZWZpbmUJVENfQ0JRX09WTF9EUk9QCQkzCisjZGVmaW5lCVRDX0NCUV9PVkxfUkNMQVNTSUMJNAorCXVuc2lnbmVkIGNoYXIJcHJpb3JpdHkyOworCV9fdTE2CQlwYWQ7CisJX191MzIJCXBlbmFsdHk7Cit9OworCitzdHJ1Y3QgdGNfY2JxX3BvbGljZSB7CisJdW5zaWduZWQgY2hhcglwb2xpY2U7CisJdW5zaWduZWQgY2hhcglfX3JlczE7CisJdW5zaWduZWQgc2hvcnQJX19yZXMyOworfTsKKworc3RydWN0IHRjX2NicV9mb3B0IHsKKwlfX3UzMgkJc3BsaXQ7CisJX191MzIJCWRlZm1hcDsKKwlfX3UzMgkJZGVmY2hhbmdlOworfTsKKworc3RydWN0IHRjX2NicV94c3RhdHMgeworCV9fdTMyCQlib3Jyb3dzOworCV9fdTMyCQlvdmVyYWN0aW9uczsKKwlfX3MzMgkJYXZnaWRsZTsKKwlfX3MzMgkJdW5kZXJ0aW1lOworfTsKKworZW51bSB7CisJVENBX0NCUV9VTlNQRUMsCisJVENBX0NCUV9MU1NPUFQsCisJVENBX0NCUV9XUlJPUFQsCisJVENBX0NCUV9GT1BULAorCVRDQV9DQlFfT1ZMX1NUUkFURUdZLAorCVRDQV9DQlFfUkFURSwKKwlUQ0FfQ0JRX1JUQUIsCisJVENBX0NCUV9QT0xJQ0UsCisJX19UQ0FfQ0JRX01BWCwKK307CisKKyNkZWZpbmUgVENBX0NCUV9NQVgJKF9fVENBX0NCUV9NQVggLSAxKQorCisvKiBkc21hcmsgc2VjdGlvbiAqLworCitlbnVtIHsKKwlUQ0FfRFNNQVJLX1VOU1BFQywKKwlUQ0FfRFNNQVJLX0lORElDRVMsCisJVENBX0RTTUFSS19ERUZBVUxUX0lOREVYLAorCVRDQV9EU01BUktfU0VUX1RDX0lOREVYLAorCVRDQV9EU01BUktfTUFTSywKKwlUQ0FfRFNNQVJLX1ZBTFVFLAorCV9fVENBX0RTTUFSS19NQVgsCit9OworCisjZGVmaW5lIFRDQV9EU01BUktfTUFYIChfX1RDQV9EU01BUktfTUFYIC0gMSkKKworLyogQVRNICBzZWN0aW9uICovCisKK2VudW0geworCVRDQV9BVE1fVU5TUEVDLAorCVRDQV9BVE1fRkQsCQkvKiBmaWxlL3NvY2tldCBkZXNjcmlwdG9yICovCisJVENBX0FUTV9QVFIsCQkvKiBwb2ludGVyIHRvIGRlc2NyaXB0b3IgLSBsYXRlciAqLworCVRDQV9BVE1fSERSLAkJLyogTEwgaGVhZGVyICovCisJVENBX0FUTV9FWENFU1MsCQkvKiBleGNlc3MgdHJhZmZpYyBjbGFzcyAoMCBmb3IgQ0xQKSAgKi8KKwlUQ0FfQVRNX0FERFIsCQkvKiBQVkMgYWRkcmVzcyAoZm9yIG91dHB1dCBvbmx5KSAqLworCVRDQV9BVE1fU1RBVEUsCQkvKiBWQyBzdGF0ZSAoQVRNX1ZTXyo7IGZvciBvdXRwdXQgb25seSkgKi8KKwlfX1RDQV9BVE1fTUFYLAorfTsKKworI2RlZmluZSBUQ0FfQVRNX01BWAkoX19UQ0FfQVRNX01BWCAtIDEpCisKKy8qIE5ldHdvcmsgZW11bGF0b3IgKi8KKworZW51bSB7CisJVENBX05FVEVNX1VOU1BFQywKKwlUQ0FfTkVURU1fQ09SUiwKKwlUQ0FfTkVURU1fREVMQVlfRElTVCwKKwlUQ0FfTkVURU1fUkVPUkRFUiwKKwlUQ0FfTkVURU1fQ09SUlVQVCwKKwlfX1RDQV9ORVRFTV9NQVgsCit9OworCisjZGVmaW5lIFRDQV9ORVRFTV9NQVggKF9fVENBX05FVEVNX01BWCAtIDEpCisKK3N0cnVjdCB0Y19uZXRlbV9xb3B0IHsKKwlfX3UzMglsYXRlbmN5OwkvKiBhZGRlZCBkZWxheSAodXMpICovCisJX191MzIgICBsaW1pdDsJCS8qIGZpZm8gbGltaXQgKHBhY2tldHMpICovCisJX191MzIJbG9zczsJCS8qIHJhbmRvbSBwYWNrZXQgbG9zcyAoMD1ub25lIH4wPTEwMCUpICovCisJX191MzIJZ2FwOwkJLyogcmUtb3JkZXJpbmcgZ2FwICgwIGZvciBub25lKSAqLworCV9fdTMyICAgZHVwbGljYXRlOwkvKiByYW5kb20gcGFja2V0IGR1cCAgKDA9bm9uZSB+MD0xMDAlKSAqLworCV9fdTMyCWppdHRlcjsJCS8qIHJhbmRvbSBqaXR0ZXIgaW4gbGF0ZW5jeSAodXMpICovCit9OworCitzdHJ1Y3QgdGNfbmV0ZW1fY29yciB7CisJX191MzIJZGVsYXlfY29ycjsJLyogZGVsYXkgY29ycmVsYXRpb24gKi8KKwlfX3UzMglsb3NzX2NvcnI7CS8qIHBhY2tldCBsb3NzIGNvcnJlbGF0aW9uICovCisJX191MzIJZHVwX2NvcnI7CS8qIGR1cGxpY2F0ZSBjb3JyZWxhdGlvbiAgKi8KK307CisKK3N0cnVjdCB0Y19uZXRlbV9yZW9yZGVyIHsKKwlfX3UzMglwcm9iYWJpbGl0eTsKKwlfX3UzMgljb3JyZWxhdGlvbjsKK307CisKK3N0cnVjdCB0Y19uZXRlbV9jb3JydXB0IHsKKwlfX3UzMglwcm9iYWJpbGl0eTsKKwlfX3UzMgljb3JyZWxhdGlvbjsKK307CisKKyNkZWZpbmUgTkVURU1fRElTVF9TQ0FMRQk4MTkyCisKKy8qIERSUiAqLworCitlbnVtIHsKKwlUQ0FfRFJSX1VOU1BFQywKKwlUQ0FfRFJSX1FVQU5UVU0sCisJX19UQ0FfRFJSX01BWAorfTsKKworI2RlZmluZSBUQ0FfRFJSX01BWAkoX19UQ0FfRFJSX01BWCAtIDEpCisKK3N0cnVjdCB0Y19kcnJfc3RhdHMgeworCV9fdTMyCWRlZmljaXQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wa3RjZHZkLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcGt0Y2R2ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMzFlYjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcGt0Y2R2ZC5oCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIEplbnMgQXhib2UgPGF4Ym9lQHN1c2UuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCBQZXRlciBPc3Rlcmx1bmQgPHBldGVybzJAdGVsaWEuY29tPgorICoKKyAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiBQYWNrZXQgd3JpdGluZyBsYXllciBmb3IgQVRBUEkgYW5kIFNDU0kgQ0QtUiwgQ0QtUlcsIERWRC1SLCBhbmQKKyAqIERWRC1SVyBkZXZpY2VzLgorICoKKyAqLworI2lmbmRlZiBfX1BLVENEVkRfSAorI2RlZmluZSBfX1BLVENEVkRfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIDEgZm9yIG5vcm1hbCBkZWJ1ZyBtZXNzYWdlcywgMiBpcyB2ZXJ5IHZlcmJvc2UuIDAgdG8gdHVybiBpdCBvZmYuCisgKi8KKyNkZWZpbmUgUEFDS0VUX0RFQlVHCQkxCisKKyNkZWZpbmUJTUFYX1dSSVRFUlMJCTgKKworI2RlZmluZSBQS1RfUkJfUE9PTF9TSVpFCTUxMgorCisvKgorICogSG93IGxvbmcgd2Ugc2hvdWxkIGhvbGQgYSBub24tZnVsbCBwYWNrZXQgYmVmb3JlIHN0YXJ0aW5nIGRhdGEgZ2F0aGVyaW5nLgorICovCisjZGVmaW5lIFBBQ0tFVF9XQUlUX1RJTUUJKEhaICogNSAvIDEwMDApCisKKy8qCisgKiB1c2UgZHJpdmUgd3JpdGUgY2FjaGluZyAtLSB3ZSBuZWVkIGRlZmVycmVkIGVycm9yIGhhbmRsaW5nIHRvIGJlCisgKiBhYmxlIHRvIHN1Y2Nlc3NmdWxseSByZWNvdmVyIHdpdGggdGhpcyBvcHRpb24gKGRyaXZlIHdpbGwgcmV0dXJuIGdvb2QKKyAqIHN0YXR1cyBhcyBzb29uIGFzIHRoZSBjZGIgaXMgdmFsaWRhdGVkKS4KKyAqLworI2lmIGRlZmluZWQoQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFKQorI2RlZmluZSBVU0VfV0NBQ0hJTkcJCTEKKyNlbHNlCisjZGVmaW5lIFVTRV9XQ0FDSElORwkJMAorI2VuZGlmCisKKy8qCisgKiBObyB1c2VyLXNlcnZpY2FibGUgcGFydHMgYmV5b25kIHRoaXMgcG9pbnQgLT4KKyAqLworCisvKgorICogZGV2aWNlIHR5cGVzCisgKi8KKyNkZWZpbmUgUEFDS0VUX0NEUgkJMQorI2RlZmluZQlQQUNLRVRfQ0RSVwkJMgorI2RlZmluZSBQQUNLRVRfRFZEUgkJMworI2RlZmluZSBQQUNLRVRfRFZEUlcJCTQKKworLyoKKyAqIGZsYWdzCisgKi8KKyNkZWZpbmUgUEFDS0VUX1dSSVRBQkxFCQkxCS8qIHBkIGlzIHdyaXRhYmxlICovCisjZGVmaW5lIFBBQ0tFVF9OV0FfVkFMSUQJMgkvKiBuZXh0IHdyaXRhYmxlIGFkZHJlc3MgdmFsaWQgKi8KKyNkZWZpbmUgUEFDS0VUX0xSQV9WQUxJRAkzCS8qIGxhc3QgcmVjb3JkZWQgYWRkcmVzcyB2YWxpZCAqLworI2RlZmluZSBQQUNLRVRfTUVSR0VfU0VHUwk0CS8qIHBlcmZvcm0gc2VnbWVudCBtZXJnaW5nIHRvIGtlZXAgKi8KKwkJCQkJLyogdW5kZXJseWluZyBjZHJvbSBkZXZpY2UgaGFwcHkgKi8KKworLyoKKyAqIERpc2Mgc3RhdHVzIC0tIGZyb20gUkVBRF9ESVNDX0lORk8KKyAqLworI2RlZmluZSBQQUNLRVRfRElTQ19FTVBUWQkwCisjZGVmaW5lIFBBQ0tFVF9ESVNDX0lOQ09NUExFVEUJMQorI2RlZmluZSBQQUNLRVRfRElTQ19DT01QTEVURQkyCisjZGVmaW5lIFBBQ0tFVF9ESVNDX09USEVSCTMKKworLyoKKyAqIHdyaXRlIHR5cGUsIGFuZCBjb3JyZXNwb25kaW5nIGRhdGEgYmxvY2sgdHlwZQorICovCisjZGVmaW5lIFBBQ0tFVF9NT0RFMQkJMQorI2RlZmluZSBQQUNLRVRfTU9ERTIJCTIKKyNkZWZpbmUgUEFDS0VUX0JMT0NLX01PREUxCTgKKyNkZWZpbmUgUEFDS0VUX0JMT0NLX01PREUyCTEwCisKKy8qCisgKiBMYXN0IHNlc3Npb24vYm9yZGVyIHN0YXR1cworICovCisjZGVmaW5lIFBBQ0tFVF9TRVNTSU9OX0VNUFRZCQkwCisjZGVmaW5lIFBBQ0tFVF9TRVNTSU9OX0lOQ09NUExFVEUJMQorI2RlZmluZSBQQUNLRVRfU0VTU0lPTl9SRVNFUlZFRAkJMgorI2RlZmluZSBQQUNLRVRfU0VTU0lPTl9DT01QTEVURQkJMworCisjZGVmaW5lIFBBQ0tFVF9NQ04JCQkiNGE2NTZlNzM0MTc4NjI2ZjY1MzIzMDMwMzAwMDAwIgorCisjdW5kZWYgUEFDS0VUX1VTRV9MUworCisjZGVmaW5lIFBLVF9DVFJMX0NNRF9TRVRVUAkwCisjZGVmaW5lIFBLVF9DVFJMX0NNRF9URUFSRE9XTgkxCisjZGVmaW5lIFBLVF9DVFJMX0NNRF9TVEFUVVMJMgorCitzdHJ1Y3QgcGt0X2N0cmxfY29tbWFuZCB7CisJX191MzIgY29tbWFuZDsJCQkJLyogaW46IFNldHVwLCB0ZWFyZG93biwgc3RhdHVzICovCisJX191MzIgZGV2X2luZGV4OwkJCS8qIGluL291dDogRGV2aWNlIGluZGV4ICovCisJX191MzIgZGV2OwkJCQkvKiBpbi9vdXQ6IERldmljZSBuciBmb3IgY2RydyBkZXZpY2UgKi8KKwlfX3UzMiBwa3RfZGV2OwkJCQkvKiBpbi9vdXQ6IERldmljZSBuciBmb3IgcGFja2V0IGRldmljZSAqLworCV9fdTMyIG51bV9kZXZpY2VzOwkJCS8qIG91dDogTGFyZ2VzdCBkZXZpY2UgaW5kZXggKyAxICovCisJX191MzIgcGFkZGluZzsJCQkJLyogTm90IHVzZWQgKi8KK307CisKKy8qCisgKiBwYWNrZXQgaW9jdGxzCisgKi8KKyNkZWZpbmUgUEFDS0VUX0lPQ1RMX01BR0lDCSgnWCcpCisjZGVmaW5lIFBBQ0tFVF9DVFJMX0NNRAkJX0lPV1IoUEFDS0VUX0lPQ1RMX01BR0lDLCAxLCBzdHJ1Y3QgcGt0X2N0cmxfY29tbWFuZCkKKworCisjZW5kaWYgLyogX19QS1RDRFZEX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wbXUuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTc3Mzk5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3BtdS5oCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogRGVmaW5pdGlvbnMgZm9yIHRhbGtpbmcgdG8gdGhlIFBNVS4gIFRoZSBQTVUgaXMgYSBtaWNyb2NvbnRyb2xsZXIKKyAqIHdoaWNoIGNvbnRyb2xzIGJhdHRlcnkgY2hhcmdpbmcgYW5kIHN5c3RlbSBwb3dlciBvbiBQb3dlckJvb2sgMzQwMAorICogYW5kIDI0MDAgbW9kZWxzIGFzIHdlbGwgYXMgdGhlIFJUQyBhbmQgdmFyaW91cyBvdGhlciB0aGluZ3MuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IFBhdWwgTWFja2VycmFzLgorICovCisKKworI2RlZmluZSBQTVVfRFJJVkVSX1ZFUlNJT04JMgorCisvKgorICogUE1VIGNvbW1hbmRzCisgKi8KKyNkZWZpbmUgUE1VX1BPV0VSX0NUUkwwCQkweDEwCS8qIGNvbnRyb2wgcG93ZXIgb2Ygc29tZSBkZXZpY2VzICovCisjZGVmaW5lIFBNVV9QT1dFUl9DVFJMCQkweDExCS8qIGNvbnRyb2wgcG93ZXIgb2Ygc29tZSBkZXZpY2VzICovCisjZGVmaW5lIFBNVV9BREJfQ01ECQkweDIwCS8qIHNlbmQgQURCIHBhY2tldCAqLworI2RlZmluZSBQTVVfQURCX1BPTExfT0ZGCTB4MjEJLyogZGlzYWJsZSBBREIgYXV0by1wb2xsICovCisjZGVmaW5lIFBNVV9XUklURV9OVlJBTQkJMHgzMwkvKiB3cml0ZSBub24tdm9sYXRpbGUgUkFNICovCisjZGVmaW5lIFBNVV9SRUFEX05WUkFNCQkweDNiCS8qIHJlYWQgbm9uLXZvbGF0aWxlIFJBTSAqLworI2RlZmluZSBQTVVfU0VUX1JUQwkJMHgzMAkvKiBzZXQgcmVhbC10aW1lIGNsb2NrICovCisjZGVmaW5lIFBNVV9SRUFEX1JUQwkJMHgzOAkvKiByZWFkIHJlYWwtdGltZSBjbG9jayAqLworI2RlZmluZSBQTVVfU0VUX1ZPTEJVVFRPTgkweDQwCS8qIHNldCB2b2x1bWUgdXAvZG93biBwb3NpdGlvbiAqLworI2RlZmluZSBQTVVfQkFDS0xJR0hUX0JSSUdIVAkweDQxCS8qIHNldCBiYWNrbGlnaHQgYnJpZ2h0bmVzcyAqLworI2RlZmluZSBQTVVfR0VUX1ZPTEJVVFRPTgkweDQ4CS8qIGdldCB2b2x1bWUgdXAvZG93biBwb3NpdGlvbiAqLworI2RlZmluZSBQTVVfUENFSkVDVAkJMHg0YwkvKiBlamVjdCBQQy1jYXJkIGZyb20gc2xvdCAqLworI2RlZmluZSBQTVVfQkFUVEVSWV9TVEFURQkweDZiCS8qIHJlcG9ydCBiYXR0ZXJ5IHN0YXRlIGV0Yy4gKi8KKyNkZWZpbmUgUE1VX1NNQVJUX0JBVFRFUllfU1RBVEUJMHg2ZgkvKiByZXBvcnQgYmF0dGVyeSBzdGF0ZSAobmV3IHdheSkgKi8KKyNkZWZpbmUgUE1VX1NFVF9JTlRSX01BU0sJMHg3MAkvKiBzZXQgUE1VIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFBNVV9JTlRfQUNLCQkweDc4CS8qIHJlYWQgaW50ZXJydXB0IGJpdHMgKi8KKyNkZWZpbmUgUE1VX1NIVVRET1dOCQkweDdlCS8qIHR1cm4gcG93ZXIgb2ZmICovCisjZGVmaW5lIFBNVV9DUFVfU1BFRUQJCTB4N2QJLyogY29udHJvbCBDUFUgc3BlZWQgb24gc29tZSBtb2RlbHMgKi8KKyNkZWZpbmUgUE1VX1NMRUVQCQkweDdmCS8qIHB1dCBDUFUgdG8gc2xlZXAgKi8KKyNkZWZpbmUgUE1VX1BPV0VSX0VWRU5UUwkweDhmCS8qIFNlbmQgcG93ZXItZXZlbnQgY29tbWFuZHMgdG8gUE1VICovCisjZGVmaW5lIFBNVV9JMkNfQ01ECQkweDlhCS8qIEkyQyBvcGVyYXRpb25zICovCisjZGVmaW5lIFBNVV9SRVNFVAkJMHhkMAkvKiByZXNldCBDUFUgKi8KKyNkZWZpbmUgUE1VX0dFVF9CUklHSFRCVVRUT04JMHhkOQkvKiByZXBvcnQgYnJpZ2h0bmVzcyB1cC9kb3duIHBvcyAqLworI2RlZmluZSBQTVVfR0VUX0NPVkVSCQkweGRjCS8qIHJlcG9ydCBjb3ZlciBvcGVuL2Nsb3NlZCAqLworI2RlZmluZSBQTVVfU1lTVEVNX1JFQURZCTB4ZGYJLyogdGVsbCBQTVUgd2UgYXJlIGF3YWtlICovCisjZGVmaW5lIFBNVV9HRVRfVkVSU0lPTgkJMHhlYQkvKiByZWFkIHRoZSBQTVUgdmVyc2lvbiAqLworCisvKiBCaXRzIHRvIHVzZSB3aXRoIHRoZSBQTVVfUE9XRVJfQ1RSTDAgY29tbWFuZCAqLworI2RlZmluZSBQTVVfUE9XMF9PTgkJMHg4MAkvKiBPUiB0aGlzIHRvIHBvd2VyIE9OIHRoZSBkZXZpY2UgKi8KKyNkZWZpbmUgUE1VX1BPVzBfT0ZGCQkweDAwCS8qIGxlYXZlIGJpdCA3IHRvIDAgdG8gcG93ZXIgaXQgT0ZGICovCisjZGVmaW5lIFBNVV9QT1cwX0hBUkRfRFJJVkUJMHgwNAkvKiBIYXJkIGRyaXZlIHBvd2VyIChvbiB3YWxsc3RyZWV0L2xvbWJhcmQgPykgKi8KKworLyogQml0cyB0byB1c2Ugd2l0aCB0aGUgUE1VX1BPV0VSX0NUUkwgY29tbWFuZCAqLworI2RlZmluZSBQTVVfUE9XX09OCQkweDgwCS8qIE9SIHRoaXMgdG8gcG93ZXIgT04gdGhlIGRldmljZSAqLworI2RlZmluZSBQTVVfUE9XX09GRgkJMHgwMAkvKiBsZWF2ZSBiaXQgNyB0byAwIHRvIHBvd2VyIGl0IE9GRiAqLworI2RlZmluZSBQTVVfUE9XX0JBQ0tMSUdIVAkweDAxCS8qIGJhY2tsaWdodCBwb3dlciAqLworI2RlZmluZSBQTVVfUE9XX0NIQVJHRVIJCTB4MDIJLyogYmF0dGVyeSBjaGFyZ2VyIHBvd2VyICovCisjZGVmaW5lIFBNVV9QT1dfSVJMRUQJCTB4MDQJLyogSVIgbGVkIHBvd2VyIChvbiB3YWxsc3RyZWV0KSAqLworI2RlZmluZSBQTVVfUE9XX01FRElBQkFZCTB4MDgJLyogbWVkaWEgYmF5IHBvd2VyICh3YWxsc3RyZWV0L2xvbWJhcmQgPykgKi8KKworLyogQml0cyBpbiBQTVUgaW50ZXJydXB0IGFuZCBpbnRlcnJ1cHQgbWFzayBieXRlcyAqLworI2RlZmluZSBQTVVfSU5UX1BDRUpFQ1QJCTB4MDQJLyogUEMtY2FyZCBlamVjdCBidXR0b25zICovCisjZGVmaW5lIFBNVV9JTlRfU05EQlJUCQkweDA4CS8qIHNvdW5kL2JyaWdodG5lc3MgdXAvZG93biBidXR0b25zICovCisjZGVmaW5lIFBNVV9JTlRfQURCCQkweDEwCS8qIEFEQiBhdXRvcG9sbCBvciByZXBseSBkYXRhICovCisjZGVmaW5lIFBNVV9JTlRfQkFUVEVSWQkJMHgyMAkvKiBCYXR0ZXJ5IHN0YXRlIGNoYW5nZSAqLworI2RlZmluZSBQTVVfSU5UX0VOVklST05NRU5UCTB4NDAJLyogRW52aXJvbm1lbnQgaW50ZXJydXB0cyAqLworI2RlZmluZSBQTVVfSU5UX1RJQ0sJCTB4ODAJLyogMS1zZWNvbmQgdGljayBpbnRlcnJ1cHQgKi8KKworLyogT3RoZXIgYml0cyBpbiBQTVUgaW50ZXJydXB0IHZhbGlkIHdoZW4gUE1VX0lOVF9BREIgaXMgc2V0ICovCisjZGVmaW5lIFBNVV9JTlRfQURCX0FVVE8JMHgwNAkvKiBBREIgYXV0b3BvbGwsIHdoZW4gUE1VX0lOVF9BREIgKi8KKyNkZWZpbmUgUE1VX0lOVF9XQUlUSU5HX0NIQVJHRVIJMHgwMQkvKiA/Pz8gKi8KKyNkZWZpbmUgUE1VX0lOVF9BVVRPX1NSUV9QT0xMCTB4MDIJLyogPz8/ICovCisKKy8qIEJpdHMgaW4gdGhlIGVudmlyb25lbWVudCBtZXNzYWdlIChlaXRoZXIgb2J0YWluZWQgdmlhIFBNVV9HRVRfQ09WRVIsCisgKiBvciB2aWEgUE1VX0lOVF9FTlZJUk9OTUVOVCBvbiBjb3JlOTkgKi8KKyNkZWZpbmUgUE1VX0VOVl9MSURfQ0xPU0VECTB4MDEJLyogVGhlIGxpZCBpcyBjbG9zZWQgKi8KKworLyogSTJDIHJlbGF0ZWQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgUE1VX0kyQ19NT0RFX1NJTVBMRQkwCisjZGVmaW5lIFBNVV9JMkNfTU9ERV9TVERTVUIJMQorI2RlZmluZSBQTVVfSTJDX01PREVfQ09NQklORUQJMgorCisjZGVmaW5lIFBNVV9JMkNfQlVTX1NUQVRVUwkwCisjZGVmaW5lIFBNVV9JMkNfQlVTX1NZU0NMSwkxCisjZGVmaW5lIFBNVV9JMkNfQlVTX1BPV0VSCTIKKworI2RlZmluZSBQTVVfSTJDX1NUQVRVU19PSwkwCisjZGVmaW5lIFBNVV9JMkNfU1RBVFVTX0RBVEFSRUFECTEKKyNkZWZpbmUgUE1VX0kyQ19TVEFUVVNfQlVTWQkweGZlCisKKworLyogS2luZCBvZiBQTVUgKG1vZGVsKSAqLworZW51bSB7CisJUE1VX1VOS05PV04sCisJUE1VX09IQVJFX0JBU0VELAkvKiAyNDAwLCAzNDAwLCAzNTAwIChvbGQgRzMgcG93ZXJib29rKSAqLworCVBNVV9IRUFUSFJPV19CQVNFRCwJLyogUG93ZXJCb29rIEczIHNlcmllcyAqLworCVBNVV9QQURESU5HVE9OX0JBU0VELAkvKiAxOTk5IFBvd2VyQm9vayBHMyAqLworCVBNVV9LRVlMQVJHT19CQVNFRCwJLyogQ29yZTk5IG1vdGhlcmJvYXJkIChQTVU5OSkgKi8KKwlQTVVfNjhLX1YxLAkJLyogNjhLIFBNVSwgdmVyc2lvbiAxICovCisJUE1VXzY4S19WMiwgCQkvKiA2OEsgUE1VLCB2ZXJzaW9uIDIgKi8KK307CisKKy8qIFBNVSBQTVVfUE9XRVJfRVZFTlRTIGNvbW1hbmRzICovCitlbnVtIHsKKwlQTVVfUFdSX0dFVF9QT1dFUlVQX0VWRU5UUwk9IDB4MDAsCisJUE1VX1BXUl9TRVRfUE9XRVJVUF9FVkVOVFMJPSAweDAxLAorCVBNVV9QV1JfQ0xSX1BPV0VSVVBfRVZFTlRTCT0gMHgwMiwKKwlQTVVfUFdSX0dFVF9XQUtFVVBfRVZFTlRTCT0gMHgwMywKKwlQTVVfUFdSX1NFVF9XQUtFVVBfRVZFTlRTCT0gMHgwNCwKKwlQTVVfUFdSX0NMUl9XQUtFVVBfRVZFTlRTCT0gMHgwNSwKK307CisKKy8qIFBvd2VyIGV2ZW50cyB3YWtldXAgYml0cyAqLworZW51bSB7CisJUE1VX1BXUl9XQUtFVVBfS0VZCQk9IDB4MDEsCS8qIFdha2Ugb24ga2V5IHByZXNzICovCisJUE1VX1BXUl9XQUtFVVBfQUNfSU5TRVJUCT0gMHgwMiwgLyogV2FrZSBvbiBBQyBhZGFwdGVyIHBsdWcgKi8KKwlQTVVfUFdSX1dBS0VVUF9BQ19DSEFOR0UJPSAweDA0LAorCVBNVV9QV1JfV0FLRVVQX0xJRF9PUEVOCQk9IDB4MDgsCisJUE1VX1BXUl9XQUtFVVBfUklORwkJPSAweDEwLAorfTsKKwkKKy8qCisgKiBJb2N0bCBjb21tYW5kcyBmb3IgdGhlIC9kZXYvcG11IGRldmljZQorICovCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworLyogbm8gcGFyYW0gKi8KKyNkZWZpbmUgUE1VX0lPQ19TTEVFUAkJX0lPKCdCJywgMCkKKy8qIG91dCBwYXJhbTogdTMyKgliYWNrbGlnaHQgdmFsdWU6IDAgdG8gMTUgKi8KKyNkZWZpbmUgUE1VX0lPQ19HRVRfQkFDS0xJR0hUCV9JT1IoJ0InLCAxLCBzaXplX3QpCisvKiBpbiBwYXJhbTogdTMyCWJhY2tsaWdodCB2YWx1ZTogMCB0byAxNSAqLworI2RlZmluZSBQTVVfSU9DX1NFVF9CQUNLTElHSFQJX0lPVygnQicsIDIsIHNpemVfdCkKKy8qIG91dCBwYXJhbTogdTMyKglQTVUgbW9kZWwgKi8KKyNkZWZpbmUgUE1VX0lPQ19HRVRfTU9ERUwJX0lPUignQicsIDMsIHNpemVfdCkKKy8qIG91dCBwYXJhbTogdTMyKgloYXNfYWRiOiAwIG9yIDEgKi8KKyNkZWZpbmUgUE1VX0lPQ19IQVNfQURCCQlfSU9SKCdCJywgNCwgc2l6ZV90KSAKKy8qIG91dCBwYXJhbTogdTMyKgljYW5fc2xlZXA6IDAgb3IgMSAqLworI2RlZmluZSBQTVVfSU9DX0NBTl9TTEVFUAlfSU9SKCdCJywgNSwgc2l6ZV90KSAKKy8qIG5vIHBhcmFtLCBidXQgaGlzdG9yaWNhbGx5IHdhcyBfSU9SKCdCJywgNiwgMCksIG1lYW5pbmcgNCBieXRlcyAqLworI2RlZmluZSBQTVVfSU9DX0dSQUJfQkFDS0xJR0hUCV9JT1IoJ0InLCA2LCBzaXplX3QpIAorCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcG9sbC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3BvbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjFiMzA1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3BvbGwuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX0xJTlVYX1BPTExfSAorI2RlZmluZSBfTElOVVhfUE9MTF9ICisKKyNpbmNsdWRlIDxhc20vcG9sbC5oPgorCisKKyNlbmRpZiAvKiBfTElOVVhfUE9MTF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcG9zaXhfdHlwZXMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wb3NpeF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNGM5OGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcG9zaXhfdHlwZXMuaApAQCAtMCwwICsxLDQ5IEBACisjaWZuZGVmIF9MSU5VWF9QT1NJWF9UWVBFU19ICisjZGVmaW5lIF9MSU5VWF9QT1NJWF9UWVBFU19ICisKKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKworLyoKKyAqIFRoaXMgYWxsb3dzIGZvciAxMDI0IGZpbGUgZGVzY3JpcHRvcnM6IGlmIE5SX09QRU4gaXMgZXZlciBncm93bgorICogYmV5b25kIHRoYXQgeW91J2xsIGhhdmUgdG8gY2hhbmdlIHRoaXMgdG9vLiBCdXQgMTAyNCBmZCdzIHNlZW0gdG8gYmUKKyAqIGVub3VnaCBldmVuIGZvciBzdWNoICJyZWFsIiB1bmljZXMgbGlrZSBPU0YvMSwgc28gaG9wZWZ1bGx5IHRoaXMgaXMKKyAqIG9uZSBsaW1pdCB0aGF0IGRvZXNuJ3QgaGF2ZSB0byBiZSBjaGFuZ2VkIFthZ2Fpbl0uCisgKgorICogTm90ZSB0aGF0IFBPU0lYIHdhbnRzIHRoZSBGRF9DTEVBUihmZCxmZHNldHApIGRlZmluZXMgdG8gYmUgaW4KKyAqIDxzeXMvdGltZS5oPiAoYW5kIHRodXMgPGxpbnV4L3RpbWUuaD4pIC0gYnV0IHRoaXMgaXMgYSBtb3JlIGxvZ2ljYWwKKyAqIHBsYWNlIGZvciB0aGVtLiBTb2x2ZWQgYnkgaGF2aW5nIGR1bW15IGRlZmluZXMgaW4gPHN5cy90aW1lLmg+LgorICovCisKKy8qCisgKiBUaG9zZSBtYWNyb3MgbWF5IGhhdmUgYmVlbiBkZWZpbmVkIGluIDxnbnUvdHlwZXMuaD4uIEJ1dCB3ZSBhbHdheXMKKyAqIHVzZSB0aGUgb25lcyBoZXJlLiAKKyAqLworI3VuZGVmIF9fTkZEQklUUworI2RlZmluZSBfX05GREJJVFMJKDggKiBzaXplb2YodW5zaWduZWQgbG9uZykpCisKKyN1bmRlZiBfX0ZEX1NFVFNJWkUKKyNkZWZpbmUgX19GRF9TRVRTSVpFCTEwMjQKKworI3VuZGVmIF9fRkRTRVRfTE9OR1MKKyNkZWZpbmUgX19GRFNFVF9MT05HUwkoX19GRF9TRVRTSVpFL19fTkZEQklUUykKKworI3VuZGVmIF9fRkRFTFQKKyNkZWZpbmUJX19GREVMVChkKQkoKGQpIC8gX19ORkRCSVRTKQorCisjdW5kZWYgX19GRE1BU0sKKyNkZWZpbmUJX19GRE1BU0soZCkJKDFVTCA8PCAoKGQpICUgX19ORkRCSVRTKSkKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgZmRzX2JpdHMgW19fRkRTRVRfTE9OR1NdOworfSBfX2tlcm5lbF9mZF9zZXQ7CisKKy8qIFR5cGUgb2YgYSBzaWduYWwgaGFuZGxlci4gICovCit0eXBlZGVmIHZvaWQgKCpfX2tlcm5lbF9zaWdoYW5kbGVyX3QpKGludCk7CisKKy8qIFR5cGUgb2YgYSBTWVNWIElQQyBrZXkuICAqLwordHlwZWRlZiBpbnQgX19rZXJuZWxfa2V5X3Q7Cit0eXBlZGVmIGludCBfX2tlcm5lbF9tcWRfdDsKKworI2luY2x1ZGUgPGFzbS9wb3NpeF90eXBlcy5oPgorCisjZW5kaWYgLyogX0xJTlVYX1BPU0lYX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wcGRldi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3BwZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMxOGM1ZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wcGRldi5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L3BwZGV2LmgKKyAqCisgKiBVc2VyLXNwYWNlIHBhcmFsbGVsIHBvcnQgZGV2aWNlIGRyaXZlciAoaGVhZGVyIGZpbGUpLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OC05IFRpbSBXYXVnaCA8dGltQGN5YmVyZWxrLmRlbW9uLmNvLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogQWRkZWQgUFBHRVRUSU1FL1BQU0VUVElNRSwgRnJlZCBCYXJuZXMsIDE5OTkKKyAqIEFkZGVkIFBQR0VUTU9ERVMvUFBHRVRNT0RFL1BQR0VUUEhBU0UsIEZyZWQgQmFybmVzIDxmcm1iMkB1a2MuYWMudWs+LCAwMy8wMS8yMDAxCisgKi8KKworI2RlZmluZSBQUF9JT0NUTAkncCcKKworLyogU2V0IG1vZGUgZm9yIHJlYWQvd3JpdGUgKGUuZy4gSUVFRTEyODRfTU9ERV9FUFApICovCisjZGVmaW5lIFBQU0VUTU9ERQlfSU9XKFBQX0lPQ1RMLCAweDgwLCBpbnQpCisKKy8qIFJlYWQgc3RhdHVzICovCisjZGVmaW5lIFBQUlNUQVRVUwlfSU9SKFBQX0lPQ1RMLCAweDgxLCB1bnNpZ25lZCBjaGFyKQorI2RlZmluZSBQUFdTVEFUVVMJT0JTT0xFVEVfX0lPVyhQUF9JT0NUTCwgMHg4MiwgdW5zaWduZWQgY2hhcikKKworLyogUmVhZC93cml0ZSBjb250cm9sICovCisjZGVmaW5lIFBQUkNPTlRST0wJX0lPUihQUF9JT0NUTCwgMHg4MywgdW5zaWduZWQgY2hhcikKKyNkZWZpbmUgUFBXQ09OVFJPTAlfSU9XKFBQX0lPQ1RMLCAweDg0LCB1bnNpZ25lZCBjaGFyKQorCitzdHJ1Y3QgcHBkZXZfZnJvYl9zdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIgbWFzazsKKwl1bnNpZ25lZCBjaGFyIHZhbDsKK307CisjZGVmaW5lIFBQRkNPTlRST0wgICAgICBfSU9XKFBQX0lPQ1RMLCAweDhlLCBzdHJ1Y3QgcHBkZXZfZnJvYl9zdHJ1Y3QpCisKKy8qIFJlYWQvd3JpdGUgZGF0YSAqLworI2RlZmluZSBQUFJEQVRBCQlfSU9SKFBQX0lPQ1RMLCAweDg1LCB1bnNpZ25lZCBjaGFyKQorI2RlZmluZSBQUFdEQVRBCQlfSU9XKFBQX0lPQ1RMLCAweDg2LCB1bnNpZ25lZCBjaGFyKQorCisvKiBSZWFkL3dyaXRlIGVjb250cm9sIChub3QgdXNlZCkgKi8KKyNkZWZpbmUgUFBSRUNPTlRST0wJT0JTT0xFVEVfX0lPUihQUF9JT0NUTCwgMHg4NywgdW5zaWduZWQgY2hhcikKKyNkZWZpbmUgUFBXRUNPTlRST0wJT0JTT0xFVEVfX0lPVyhQUF9JT0NUTCwgMHg4OCwgdW5zaWduZWQgY2hhcikKKworLyogUmVhZC93cml0ZSBGSUZPIChub3QgdXNlZCkgKi8KKyNkZWZpbmUgUFBSRklGTwkJT0JTT0xFVEVfX0lPUihQUF9JT0NUTCwgMHg4OSwgdW5zaWduZWQgY2hhcikKKyNkZWZpbmUgUFBXRklGTwkJT0JTT0xFVEVfX0lPVyhQUF9JT0NUTCwgMHg4YSwgdW5zaWduZWQgY2hhcikKKworLyogQ2xhaW0gdGhlIHBvcnQgdG8gc3RhcnQgdXNpbmcgaXQgKi8KKyNkZWZpbmUgUFBDTEFJTQkJX0lPKFBQX0lPQ1RMLCAweDhiKQorCisvKiBSZWxlYXNlIHRoZSBwb3J0IHdoZW4geW91IGFyZW4ndCB1c2luZyBpdCAqLworI2RlZmluZSBQUFJFTEVBU0UJX0lPKFBQX0lPQ1RMLCAweDhjKQorCisvKiBZaWVsZCB0aGUgcG9ydCAocmVsZWFzZSBpdCBpZiBhbm90aGVyIGRyaXZlciBpcyB3YWl0aW5nLAorICogdGhlbiByZWNsYWltKSAqLworI2RlZmluZSBQUFlJRUxECQlfSU8oUFBfSU9DVEwsIDB4OGQpCisKKy8qIFJlZ2lzdGVyIGRldmljZSBleGNsdXNpdmVseSAobXVzdCBiZSBiZWZvcmUgUFBDTEFJTSkuICovCisjZGVmaW5lIFBQRVhDTAkJX0lPKFBQX0lPQ1RMLCAweDhmKQorCisvKiBEYXRhIGxpbmUgZGlyZWN0aW9uOiBub24temVybyBmb3IgaW5wdXQgbW9kZS4gKi8KKyNkZWZpbmUgUFBEQVRBRElSCV9JT1coUFBfSU9DVEwsIDB4OTAsIGludCkKKworLyogTmVnb3RpYXRlIGEgcGFydGljdWxhciBJRUVFIDEyODQgbW9kZS4gKi8KKyNkZWZpbmUgUFBORUdPVAkJX0lPVyhQUF9JT0NUTCwgMHg5MSwgaW50KQorCisvKiBTZXQgY29udHJvbCBsaW5lcyB3aGVuIGFuIGludGVycnVwdCBvY2N1cnMuICovCisjZGVmaW5lIFBQV0NUTE9OSVJRCV9JT1coUFBfSU9DVEwsIDB4OTIsIHVuc2lnbmVkIGNoYXIpCisKKy8qIENsZWFyIChhbmQgcmV0dXJuKSBpbnRlcnJ1cHQgY291bnQuICovCisjZGVmaW5lIFBQQ0xSSVJRCV9JT1IoUFBfSU9DVEwsIDB4OTMsIGludCkKKworLyogU2V0IHRoZSBJRUVFIDEyODQgcGhhc2UgdGhhdCB3ZSdyZSBpbiAoZS5nLiBJRUVFMTI4NF9QSF9GV0RfSURMRSkgKi8KKyNkZWZpbmUgUFBTRVRQSEFTRQlfSU9XKFBQX0lPQ1RMLCAweDk0LCBpbnQpCisKKy8qIFNldCBhbmQgZ2V0IHBvcnQgdGltZW91dCAoc3RydWN0IHRpbWV2YWwncykgKi8KKyNkZWZpbmUgUFBHRVRUSU1FCV9JT1IoUFBfSU9DVEwsIDB4OTUsIHN0cnVjdCB0aW1ldmFsKQorI2RlZmluZSBQUFNFVFRJTUUJX0lPVyhQUF9JT0NUTCwgMHg5Niwgc3RydWN0IHRpbWV2YWwpCisKKy8qIEdldCBhdmFpbGFibGUgbW9kZXMgKHdoYXQgdGhlIGhhcmR3YXJlIGNhbiBkbykgKi8KKyNkZWZpbmUgUFBHRVRNT0RFUwlfSU9SKFBQX0lPQ1RMLCAweDk3LCB1bnNpZ25lZCBpbnQpCisKKy8qIEdldCB0aGUgY3VycmVudCBtb2RlIGFuZCBwaGF6ZSAqLworI2RlZmluZSBQUEdFVE1PREUJX0lPUihQUF9JT0NUTCwgMHg5OCwgaW50KQorI2RlZmluZSBQUEdFVFBIQVNFCV9JT1IoUFBfSU9DVEwsIDB4OTksIGludCkKKworLyogZ2V0L3NldCBmbGFncyAqLworI2RlZmluZSBQUEdFVEZMQUdTCV9JT1IoUFBfSU9DVEwsIDB4OWEsIGludCkKKyNkZWZpbmUgUFBTRVRGTEFHUwlfSU9XKFBQX0lPQ1RMLCAweDliLCBpbnQpCisKKy8qIGZsYWdzIHZpc2libGUgdG8gdGhlIHdvcmxkICovCisjZGVmaW5lIFBQX0ZBU1RXUklURQkoMTw8MikKKyNkZWZpbmUgUFBfRkFTVFJFQUQJKDE8PDMpCisjZGVmaW5lIFBQX1c5MTI4NFBJQwkoMTw8NCkKKworLyogb25seSBtYXNrcyB1c2VyLXZpc2libGUgZmxhZ3MgKi8KKyNkZWZpbmUgUFBfRkxBR01BU0sJKFBQX0ZBU1RXUklURSB8IFBQX0ZBU1RSRUFEIHwgUFBfVzkxMjg0UElDKQorCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wcHAtY29tcC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3BwcC1jb21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc0OGQzOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wcHAtY29tcC5oCkBAIC0wLDAgKzEsMjEwIEBACisvKgorICogcHBwLWNvbXAuaCAtIERlZmluaXRpb25zIGZvciBkb2luZyBQUFAgcGFja2V0IGNvbXByZXNzaW9uLgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NCBUaGUgQXVzdHJhbGlhbiBOYXRpb25hbCBVbml2ZXJzaXR5LgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyAqIGRvY3VtZW50YXRpb24gaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcy4gIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5LCBleHByZXNzIG9yIGltcGxpZWQuIFRoZSBBdXN0cmFsaWFuIE5hdGlvbmFsIFVuaXZlcnNpdHkKKyAqIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IKKyAqIGFueSBwdXJwb3NlLgorICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVNUUkFMSUFOIE5BVElPTkFMIFVOSVZFUlNJVFkgQkUgTElBQkxFIFRPIEFOWQorICogUEFSVFkgRk9SIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTiwgRVZFTiBJRgorICogVEhFIEFVU1RSQUxJQU4gTkFUSU9OQUwgVU5JVkVSU0lUWSBIQVZFIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkKKyAqIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFRIRSBBVVNUUkFMSUFOIE5BVElPTkFMIFVOSVZFUlNJVFkgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQorICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIFNPRlRXQVJFIFBST1ZJREVEIEhFUkVVTkRFUiBJUworICogT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFRIRSBBVVNUUkFMSUFOIE5BVElPTkFMIFVOSVZFUlNJVFkgSEFTIE5PCisgKiBPQkxJR0FUSU9OIFRPIFBST1ZJREUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywKKyAqIE9SIE1PRElGSUNBVElPTlMuCisgKi8KKworLyoKKyAqICA9PUZJTEVWRVJTSU9OIDk4MDMxOT09CisgKgorICogIE5PVEUgVE8gTUFJTlRBSU5FUlM6CisgKiAgICAgSWYgeW91IG1vZGlmeSB0aGlzIGZpbGUgYXQgYWxsLCBwbGVhc2Ugc2V0IHRoZSBhYm92ZSBkYXRlLgorICogICAgIHBwcC1jb21wLmggaXMgc2hpcHBlZCB3aXRoIGEgUFBQIGRpc3RyaWJ1dGlvbiBhcyB3ZWxsIGFzIHdpdGggdGhlIGtlcm5lbDsKKyAqICAgICBpZiBldmVyeW9uZSBpbmNyZWFzZXMgdGhlIEZJTEVWRVJTSU9OIG51bWJlciBhYm92ZSwgdGhlbiBzY3JpcHRzCisgKiAgICAgY2FuIGRvIHRoZSByaWdodCB0aGluZyB3aGVuIGRlY2lkaW5nIHdoZXRoZXIgdG8gaW5zdGFsbCBhIG5ldyBwcHAtY29tcC5oCisgKiAgICAgZmlsZS4gIERvbid0IGNoYW5nZSB0aGUgZm9ybWF0IG9mIHRoYXQgbGluZSBvdGhlcndpc2UsIHNvIHRoZQorICogICAgIGluc3RhbGxhdGlvbiBzY3JpcHQgY2FuIHJlY29nbml6ZSBpdC4KKyAqLworCisjaWZuZGVmIF9ORVRfUFBQX0NPTVBfSAorI2RlZmluZSBfTkVUX1BQUF9DT01QX0gKKworc3RydWN0IG1vZHVsZTsKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgc3ltYm9scyBjb250cm9sIHdoZXRoZXIgd2UgaW5jbHVkZSBjb2RlIGZvcgorICogdmFyaW91cyBjb21wcmVzc2lvbiBtZXRob2RzLgorICovCisKKyNpZm5kZWYgRE9fQlNEX0NPTVBSRVNTCisjZGVmaW5lIERPX0JTRF9DT01QUkVTUwkxCS8qIGJ5IGRlZmF1bHQsIGluY2x1ZGUgQlNELUNvbXByZXNzICovCisjZW5kaWYKKyNpZm5kZWYgRE9fREVGTEFURQorI2RlZmluZSBET19ERUZMQVRFCTEJLyogYnkgZGVmYXVsdCwgaW5jbHVkZSBEZWZsYXRlICovCisjZW5kaWYKKyNkZWZpbmUgRE9fUFJFRElDVE9SXzEJMAorI2RlZmluZSBET19QUkVESUNUT1JfMgkwCisKKy8qCisgKiBTdHJ1Y3R1cmUgZ2l2aW5nIG1ldGhvZHMgZm9yIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24uCisgKi8KKworc3RydWN0IGNvbXByZXNzb3IgeworCWludAljb21wcmVzc19wcm90bzsJLyogQ0NQIGNvbXByZXNzaW9uIHByb3RvY29sIG51bWJlciAqLworCisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIGEgY29tcHJlc3NvciAodHJhbnNtaXQgc2lkZSkgKi8KKwl2b2lkCSooKmNvbXBfYWxsb2MpICh1bnNpZ25lZCBjaGFyICpvcHRpb25zLCBpbnQgb3B0X2xlbik7CisKKwkvKiBGcmVlIHNwYWNlIHVzZWQgYnkgYSBjb21wcmVzc29yICovCisJdm9pZAkoKmNvbXBfZnJlZSkgKHZvaWQgKnN0YXRlKTsKKworCS8qIEluaXRpYWxpemUgYSBjb21wcmVzc29yICovCisJaW50CSgqY29tcF9pbml0KSAodm9pZCAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKm9wdGlvbnMsCisJCQkgICAgICBpbnQgb3B0X2xlbiwgaW50IHVuaXQsIGludCBvcHRoZHIsIGludCBkZWJ1Zyk7CisKKwkvKiBSZXNldCBhIGNvbXByZXNzb3IgKi8KKwl2b2lkCSgqY29tcF9yZXNldCkgKHZvaWQgKnN0YXRlKTsKKworCS8qIENvbXByZXNzIGEgcGFja2V0ICovCisJaW50ICAgICAoKmNvbXByZXNzKSAodm9pZCAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKnJwdHIsCisJCQkgICAgICB1bnNpZ25lZCBjaGFyICpvYnVmLCBpbnQgaXNpemUsIGludCBvc2l6ZSk7CisKKwkvKiBSZXR1cm4gY29tcHJlc3Npb24gc3RhdGlzdGljcyAqLworCXZvaWQJKCpjb21wX3N0YXQpICh2b2lkICpzdGF0ZSwgc3RydWN0IGNvbXBzdGF0ICpzdGF0cyk7CisKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgYSBkZWNvbXByZXNzb3IgKHJlY2VpdmUgc2lkZSkgKi8KKwl2b2lkCSooKmRlY29tcF9hbGxvYykgKHVuc2lnbmVkIGNoYXIgKm9wdGlvbnMsIGludCBvcHRfbGVuKTsKKworCS8qIEZyZWUgc3BhY2UgdXNlZCBieSBhIGRlY29tcHJlc3NvciAqLworCXZvaWQJKCpkZWNvbXBfZnJlZSkgKHZvaWQgKnN0YXRlKTsKKworCS8qIEluaXRpYWxpemUgYSBkZWNvbXByZXNzb3IgKi8KKwlpbnQJKCpkZWNvbXBfaW5pdCkgKHZvaWQgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICpvcHRpb25zLAorCQkJCWludCBvcHRfbGVuLCBpbnQgdW5pdCwgaW50IG9wdGhkciwgaW50IG1ydSwKKwkJCQlpbnQgZGVidWcpOworCisJLyogUmVzZXQgYSBkZWNvbXByZXNzb3IgKi8KKwl2b2lkCSgqZGVjb21wX3Jlc2V0KSAodm9pZCAqc3RhdGUpOworCisJLyogRGVjb21wcmVzcyBhIHBhY2tldC4gKi8KKwlpbnQJKCpkZWNvbXByZXNzKSAodm9pZCAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKmlidWYsIGludCBpc2l6ZSwKKwkJCQl1bnNpZ25lZCBjaGFyICpvYnVmLCBpbnQgb3NpemUpOworCisJLyogVXBkYXRlIHN0YXRlIGZvciBhbiBpbmNvbXByZXNzaWJsZSBwYWNrZXQgcmVjZWl2ZWQgKi8KKwl2b2lkCSgqaW5jb21wKSAodm9pZCAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKmlidWYsIGludCBpY250KTsKKworCS8qIFJldHVybiBkZWNvbXByZXNzaW9uIHN0YXRpc3RpY3MgKi8KKwl2b2lkCSgqZGVjb21wX3N0YXQpICh2b2lkICpzdGF0ZSwgc3RydWN0IGNvbXBzdGF0ICpzdGF0cyk7CisKKwkvKiBVc2VkIGluIGxvY2tpbmcgY29tcHJlc3NvciBtb2R1bGVzICovCisJc3RydWN0IG1vZHVsZSAqb3duZXI7CisJLyogRXh0cmEgc2tiIHNwYWNlIG5lZWRlZCBieSB0aGUgY29tcHJlc3NvciBhbGdvcml0aG0gKi8KKwl1bnNpZ25lZCBpbnQgY29tcF9leHRyYTsKK307CisKKy8qCisgKiBUaGUgcmV0dXJuIHZhbHVlIGZyb20gZGVjb21wcmVzcyByb3V0aW5lIGlzIHRoZSBsZW5ndGggb2YgdGhlCisgKiBkZWNvbXByZXNzZWQgcGFja2V0IGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSBERUNPTVBfRVJST1IKKyAqIG9yIERFQ09NUF9GQVRBTEVSUk9SIGlmIGFuIGVycm9yIG9jY3VycmVkLgorICogCisgKiBXZSBuZWVkIHRvIG1ha2UgdGhpcyBkaXN0aW5jdGlvbiBzbyB0aGF0IHdlIGNhbiBkaXNhYmxlIGNlcnRhaW4KKyAqIHVzZWZ1bCBmdW5jdGlvbmFsaXR5LCBuYW1lbHkgc2VuZGluZyBhIENDUCByZXNldC1yZXF1ZXN0IGFzIGEgcmVzdWx0CisgKiBvZiBhbiBlcnJvciBkZXRlY3RlZCBhZnRlciBkZWNvbXByZXNzaW9uLiAgVGhpcyBpcyB0byBhdm9pZCBpbmZyaW5naW5nCisgKiBhIHBhdGVudCBoZWxkIGJ5IE1vdG9yb2xhLgorICogRG9uJ3QgeW91IGp1c3QgbHVydmUgc29mdHdhcmUgcGF0ZW50cy4KKyAqLworCisjZGVmaW5lIERFQ09NUF9FUlJPUgkJLTEJLyogZXJyb3IgZGV0ZWN0ZWQgYmVmb3JlIGRlY29tcC4gKi8KKyNkZWZpbmUgREVDT01QX0ZBVEFMRVJST1IJLTIJLyogZXJyb3IgZGV0ZWN0ZWQgYWZ0ZXIgZGVjb21wLiAqLworCisvKgorICogQ0NQIGNvZGVzLgorICovCisKKyNkZWZpbmUgQ0NQX0NPTkZSRVEJMQorI2RlZmluZSBDQ1BfQ09ORkFDSwkyCisjZGVmaW5lIENDUF9URVJNUkVRCTUKKyNkZWZpbmUgQ0NQX1RFUk1BQ0sJNgorI2RlZmluZSBDQ1BfUkVTRVRSRVEJMTQKKyNkZWZpbmUgQ0NQX1JFU0VUQUNLCTE1CisKKy8qCisgKiBNYXggIyBieXRlcyBmb3IgYSBDQ1Agb3B0aW9uCisgKi8KKworI2RlZmluZSBDQ1BfTUFYX09QVElPTl9MRU5HVEgJMzIKKworLyoKKyAqIFBhcnRzIG9mIGEgQ0NQIHBhY2tldC4KKyAqLworCisjZGVmaW5lIENDUF9DT0RFKGRwKQkJKChkcClbMF0pCisjZGVmaW5lIENDUF9JRChkcCkJCSgoZHApWzFdKQorI2RlZmluZSBDQ1BfTEVOR1RIKGRwKQkJKCgoZHApWzJdIDw8IDgpICsgKGRwKVszXSkKKyNkZWZpbmUgQ0NQX0hEUkxFTgkJNAorCisjZGVmaW5lIENDUF9PUFRfQ09ERShkcCkJKChkcClbMF0pCisjZGVmaW5lIENDUF9PUFRfTEVOR1RIKGRwKQkoKGRwKVsxXSkKKyNkZWZpbmUgQ0NQX09QVF9NSU5MRU4JCTIKKworLyoKKyAqIERlZmluaXRpb25zIGZvciBCU0QtQ29tcHJlc3MuCisgKi8KKworI2RlZmluZSBDSV9CU0RfQ09NUFJFU1MJCTIxCS8qIGNvbmZpZy4gb3B0aW9uIGZvciBCU0QtQ29tcHJlc3MgKi8KKyNkZWZpbmUgQ0lMRU5fQlNEX0NPTVBSRVNTCTMJLyogbGVuZ3RoIG9mIGNvbmZpZy4gb3B0aW9uICovCisKKy8qIE1hY3JvcyBmb3IgaGFuZGxpbmcgdGhlIDNyZCBieXRlIG9mIHRoZSBCU0QtQ29tcHJlc3MgY29uZmlnIG9wdGlvbi4gKi8KKyNkZWZpbmUgQlNEX05CSVRTKHgpCQkoKHgpICYgMHgxRikJLyogbnVtYmVyIG9mIGJpdHMgcmVxdWVzdGVkICovCisjZGVmaW5lIEJTRF9WRVJTSU9OKHgpCQkoKHgpID4+IDUpCS8qIHZlcnNpb24gb2Ygb3B0aW9uIGZvcm1hdCAqLworI2RlZmluZSBCU0RfQ1VSUkVOVF9WRVJTSU9OCTEJCS8qIGN1cnJlbnQgdmVyc2lvbiBudW1iZXIgKi8KKyNkZWZpbmUgQlNEX01BS0VfT1BUKHYsIG4pCSgoKHYpIDw8IDUpIHwgKG4pKQorCisjZGVmaW5lIEJTRF9NSU5fQklUUwkJOQkvKiBzbWFsbGVzdCBjb2RlIHNpemUgc3VwcG9ydGVkICovCisjZGVmaW5lIEJTRF9NQVhfQklUUwkJMTUJLyogbGFyZ2VzdCBjb2RlIHNpemUgc3VwcG9ydGVkICovCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgRGVmbGF0ZS4KKyAqLworCisjZGVmaW5lIENJX0RFRkxBVEUJCTI2CS8qIGNvbmZpZyBvcHRpb24gZm9yIERlZmxhdGUgKi8KKyNkZWZpbmUgQ0lfREVGTEFURV9EUkFGVAkyNAkvKiB2YWx1ZSB1c2VkIGluIG9yaWdpbmFsIGRyYWZ0IFJGQyAqLworI2RlZmluZSBDSUxFTl9ERUZMQVRFCQk0CS8qIGxlbmd0aCBvZiBpdHMgY29uZmlnIG9wdGlvbiAqLworCisjZGVmaW5lIERFRkxBVEVfTUlOX1NJWkUJOQorI2RlZmluZSBERUZMQVRFX01BWF9TSVpFCTE1CisjZGVmaW5lIERFRkxBVEVfTUVUSE9EX1ZBTAk4CisjZGVmaW5lIERFRkxBVEVfU0laRSh4KQkJKCgoeCkgPj4gNCkgKyA4KQorI2RlZmluZSBERUZMQVRFX01FVEhPRCh4KQkoKHgpICYgMHgwRikKKyNkZWZpbmUgREVGTEFURV9NQUtFX09QVCh3KQkoKCgodykgLSA4KSA8PCA0KSArIERFRkxBVEVfTUVUSE9EX1ZBTCkKKyNkZWZpbmUgREVGTEFURV9DSEtfU0VRVUVOQ0UJMAorCisvKgorICogRGVmaW5pdGlvbnMgZm9yIE1QUEUuCisgKi8KKworI2RlZmluZSBDSV9NUFBFICAgICAgICAgICAgICAgIDE4ICAgICAgLyogY29uZmlnIG9wdGlvbiBmb3IgTVBQRSAqLworI2RlZmluZSBDSUxFTl9NUFBFICAgICAgICAgICAgICA2ICAgICAgLyogbGVuZ3RoIG9mIGNvbmZpZyBvcHRpb24gKi8KKworLyoKKyAqIERlZmluaXRpb25zIGZvciBvdGhlciwgYXMgeWV0IHVuc3VwcG9ydGVkLCBjb21wcmVzc2lvbiBtZXRob2RzLgorICovCisKKyNkZWZpbmUgQ0lfUFJFRElDVE9SXzEJCTEJLyogY29uZmlnIG9wdGlvbiBmb3IgUHJlZGljdG9yLTEgKi8KKyNkZWZpbmUgQ0lMRU5fUFJFRElDVE9SXzEJMgkvKiBsZW5ndGggb2YgaXRzIGNvbmZpZyBvcHRpb24gKi8KKyNkZWZpbmUgQ0lfUFJFRElDVE9SXzIJCTIJLyogY29uZmlnIG9wdGlvbiBmb3IgUHJlZGljdG9yLTIgKi8KKyNkZWZpbmUgQ0lMRU5fUFJFRElDVE9SXzIJMgkvKiBsZW5ndGggb2YgaXRzIGNvbmZpZyBvcHRpb24gKi8KKworCisjZW5kaWYgLyogX05FVF9QUFBfQ09NUF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcHBwX2RlZnMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wcHBfZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMTRlNWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcHBwX2RlZnMuaApAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIHBwcF9kZWZzLmggLSBQUFAgZGVmaW5pdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0IFRoZSBBdXN0cmFsaWFuIE5hdGlvbmFsIFVuaXZlcnNpdHkuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworICogZG9jdW1lbnRhdGlvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCB3aXRob3V0IGFueQorICogd2FycmFudHksIGV4cHJlc3Mgb3IgaW1wbGllZC4gVGhlIEF1c3RyYWxpYW4gTmF0aW9uYWwgVW5pdmVyc2l0eQorICogbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvcgorICogYW55IHB1cnBvc2UuCisgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVU1RSQUxJQU4gTkFUSU9OQUwgVU5JVkVSU0lUWSBCRSBMSUFCTEUgVE8gQU5ZCisgKiBQQVJUWSBGT1IgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OLCBFVkVOIElGCisgKiBUSEUgQVVTVFJBTElBTiBOQVRJT05BTCBVTklWRVJTSVRZIEhBVkUgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWQorICogT0YgU1VDSCBEQU1BR0UuCisgKgorICogVEhFIEFVU1RSQUxJQU4gTkFUSU9OQUwgVU5JVkVSU0lUWSBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCisgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgU09GVFdBUkUgUFJPVklERUQgSEVSRVVOREVSIElTCisgKiBPTiBBTiAiQVMgSVMiIEJBU0lTLCBBTkQgVEhFIEFVU1RSQUxJQU4gTkFUSU9OQUwgVU5JVkVSU0lUWSBIQVMgTk8KKyAqIE9CTElHQVRJT04gVE8gUFJPVklERSBNQUlOVEVOQU5DRSwgU1VQUE9SVCwgVVBEQVRFUywgRU5IQU5DRU1FTlRTLAorICogT1IgTU9ESUZJQ0FUSU9OUy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqICA9PUZJTEVWRVJTSU9OIDIwMDAwMTE0PT0KKyAqCisgKiAgTk9URSBUTyBNQUlOVEFJTkVSUzoKKyAqICAgICBJZiB5b3UgbW9kaWZ5IHRoaXMgZmlsZSBhdCBhbGwsIHBsZWFzZSBzZXQgdGhlIGFib3ZlIGRhdGUuCisgKiAgICAgcHBwX2RlZnMuaCBpcyBzaGlwcGVkIHdpdGggYSBQUFAgZGlzdHJpYnV0aW9uIGFzIHdlbGwgYXMgd2l0aCB0aGUga2VybmVsOworICogICAgIGlmIGV2ZXJ5b25lIGluY3JlYXNlcyB0aGUgRklMRVZFUlNJT04gbnVtYmVyIGFib3ZlLCB0aGVuIHNjcmlwdHMKKyAqICAgICBjYW4gZG8gdGhlIHJpZ2h0IHRoaW5nIHdoZW4gZGVjaWRpbmcgd2hldGhlciB0byBpbnN0YWxsIGEgbmV3IHBwcF9kZWZzLmgKKyAqICAgICBmaWxlLiAgRG9uJ3QgY2hhbmdlIHRoZSBmb3JtYXQgb2YgdGhhdCBsaW5lIG90aGVyd2lzZSwgc28gdGhlCisgKiAgICAgaW5zdGFsbGF0aW9uIHNjcmlwdCBjYW4gcmVjb2duaXplIGl0LgorICovCisKKyNpZm5kZWYgX1BQUF9ERUZTX0hfCisjZGVmaW5lIF9QUFBfREVGU19IXworCisvKgorICogVGhlIGJhc2ljIFBQUCBmcmFtZS4KKyAqLworI2RlZmluZSBQUFBfSERSTEVOCTQJLyogb2N0ZXRzIGZvciBzdGFuZGFyZCBwcHAgaGVhZGVyICovCisjZGVmaW5lIFBQUF9GQ1NMRU4JMgkvKiBvY3RldHMgZm9yIEZDUyAqLworI2RlZmluZSBQUFBfTVJVCQkxNTAwCS8qIGRlZmF1bHQgTVJVID0gbWF4IGxlbmd0aCBvZiBpbmZvIGZpZWxkICovCisKKyNkZWZpbmUgUFBQX0FERFJFU1MocCkJKCgoX191OCAqKShwKSlbMF0pCisjZGVmaW5lIFBQUF9DT05UUk9MKHApCSgoKF9fdTggKikocCkpWzFdKQorI2RlZmluZSBQUFBfUFJPVE9DT0wocCkJKCgoKF9fdTggKikocCkpWzJdIDw8IDgpICsgKChfX3U4ICopKHApKVszXSkKKworLyoKKyAqIFNpZ25pZmljYW50IG9jdGV0IHZhbHVlcy4KKyAqLworI2RlZmluZQlQUFBfQUxMU1RBVElPTlMJMHhmZgkvKiBBbGwtU3RhdGlvbnMgYnJvYWRjYXN0IGFkZHJlc3MgKi8KKyNkZWZpbmUJUFBQX1VJCQkweDAzCS8qIFVubnVtYmVyZWQgSW5mb3JtYXRpb24gKi8KKyNkZWZpbmUJUFBQX0ZMQUcJMHg3ZQkvKiBGbGFnIFNlcXVlbmNlICovCisjZGVmaW5lCVBQUF9FU0NBUEUJMHg3ZAkvKiBBc3luY2hyb25vdXMgQ29udHJvbCBFc2NhcGUgKi8KKyNkZWZpbmUJUFBQX1RSQU5TCTB4MjAJLyogQXN5bmNocm9ub3VzIHRyYW5zcGFyZW5jeSBtb2RpZmllciAqLworCisvKgorICogUHJvdG9jb2wgZmllbGQgdmFsdWVzLgorICovCisjZGVmaW5lIFBQUF9JUAkJMHgyMQkvKiBJbnRlcm5ldCBQcm90b2NvbCAqLworI2RlZmluZSBQUFBfQVQJCTB4MjkJLyogQXBwbGVUYWxrIFByb3RvY29sICovCisjZGVmaW5lIFBQUF9JUFgJCTB4MmIJLyogSVBYIHByb3RvY29sICovCisjZGVmaW5lCVBQUF9WSkNfQ09NUAkweDJkCS8qIFZKIGNvbXByZXNzZWQgVENQICovCisjZGVmaW5lCVBQUF9WSkNfVU5DT01QCTB4MmYJLyogVkogdW5jb21wcmVzc2VkIFRDUCAqLworI2RlZmluZSBQUFBfTVAJCTB4M2QJLyogTXVsdGlsaW5rIHByb3RvY29sICovCisjZGVmaW5lIFBQUF9JUFY2CTB4NTcJLyogSW50ZXJuZXQgUHJvdG9jb2wgVmVyc2lvbiA2ICovCisjZGVmaW5lIFBQUF9DT01QRlJBRwkweGZiCS8qIGZyYWdtZW50IGNvbXByZXNzZWQgYmVsb3cgYnVuZGxlICovCisjZGVmaW5lIFBQUF9DT01QCTB4ZmQJLyogY29tcHJlc3NlZCBwYWNrZXQgKi8KKyNkZWZpbmUgUFBQX01QTFNfVUMJMHgwMjgxCS8qIE11bHRpIFByb3RvY29sIExhYmVsIFN3aXRjaGluZyAtIFVuaWNhc3QgKi8KKyNkZWZpbmUgUFBQX01QTFNfTUMJMHgwMjgzCS8qIE11bHRpIFByb3RvY29sIExhYmVsIFN3aXRjaGluZyAtIE11bHRpY2FzdCAqLworI2RlZmluZSBQUFBfSVBDUAkweDgwMjEJLyogSVAgQ29udHJvbCBQcm90b2NvbCAqLworI2RlZmluZSBQUFBfQVRDUAkweDgwMjkJLyogQXBwbGVUYWxrIENvbnRyb2wgUHJvdG9jb2wgKi8KKyNkZWZpbmUgUFBQX0lQWENQCTB4ODAyYgkvKiBJUFggQ29udHJvbCBQcm90b2NvbCAqLworI2RlZmluZSBQUFBfSVBWNkNQCTB4ODA1NwkvKiBJUHY2IENvbnRyb2wgUHJvdG9jb2wgKi8KKyNkZWZpbmUgUFBQX0NDUEZSQUcJMHg4MGZiCS8qIENDUCBhdCBsaW5rIGxldmVsIChiZWxvdyBNUCBidW5kbGUpICovCisjZGVmaW5lIFBQUF9DQ1AJCTB4ODBmZAkvKiBDb21wcmVzc2lvbiBDb250cm9sIFByb3RvY29sICovCisjZGVmaW5lIFBQUF9NUExTQ1AJMHg4MGZkCS8qIE1QTFMgQ29udHJvbCBQcm90b2NvbCAqLworI2RlZmluZSBQUFBfTENQCQkweGMwMjEJLyogTGluayBDb250cm9sIFByb3RvY29sICovCisjZGVmaW5lIFBQUF9QQVAJCTB4YzAyMwkvKiBQYXNzd29yZCBBdXRoZW50aWNhdGlvbiBQcm90b2NvbCAqLworI2RlZmluZSBQUFBfTFFSCQkweGMwMjUJLyogTGluayBRdWFsaXR5IFJlcG9ydCBwcm90b2NvbCAqLworI2RlZmluZSBQUFBfQ0hBUAkweGMyMjMJLyogQ3J5cHRvZ3JhcGhpYyBIYW5kc2hha2UgQXV0aC4gUHJvdG9jb2wgKi8KKyNkZWZpbmUgUFBQX0NCQ1AJMHhjMDI5CS8qIENhbGxiYWNrIENvbnRyb2wgUHJvdG9jb2wgKi8KKworLyoKKyAqIFZhbHVlcyBmb3IgRkNTIGNhbGN1bGF0aW9ucy4KKyAqLworCisjZGVmaW5lIFBQUF9JTklURkNTCTB4ZmZmZgkvKiBJbml0aWFsIEZDUyB2YWx1ZSAqLworI2RlZmluZSBQUFBfR09PREZDUwkweGYwYjgJLyogR29vZCBmaW5hbCBGQ1MgdmFsdWUgKi8KKworCisvKgorICogRXh0ZW5kZWQgYXN5bmNtYXAgLSBhbGxvd3MgYW55IGNoYXJhY3RlciB0byBiZSBlc2NhcGVkLgorICovCisKK3R5cGVkZWYgX191MzIJCWV4dF9hY2NtWzhdOworCisvKgorICogV2hhdCB0byBkbyB3aXRoIG5ldHdvcmsgcHJvdG9jb2wgKE5QKSBwYWNrZXRzLgorICovCitlbnVtIE5QbW9kZSB7CisgICAgTlBNT0RFX1BBU1MsCQkvKiBwYXNzIHRoZSBwYWNrZXQgdGhyb3VnaCAqLworICAgIE5QTU9ERV9EUk9QLAkJLyogc2lsZW50bHkgZHJvcCB0aGUgcGFja2V0ICovCisgICAgTlBNT0RFX0VSUk9SLAkJLyogcmV0dXJuIGFuIGVycm9yICovCisgICAgTlBNT0RFX1FVRVVFCQkvKiBzYXZlIGl0IHVwIGZvciBsYXRlci4gKi8KK307CisKKy8qCisgKiBTdGF0aXN0aWNzIGZvciBMUVJQIGFuZCBwcHBzdGF0cworICovCitzdHJ1Y3QgcHBwc3RhdAl7CisgICAgX191MzIJcHBwX2Rpc2NhcmRzOwkvKiAjIGZyYW1lcyBkaXNjYXJkZWQgKi8KKworICAgIF9fdTMyCXBwcF9pYnl0ZXM7CS8qIGJ5dGVzIHJlY2VpdmVkICovCisgICAgX191MzIJcHBwX2lvY3RlY3RzOwkvKiBieXRlcyByZWNlaXZlZCBub3QgaW4gZXJyb3IgKi8KKyAgICBfX3UzMglwcHBfaXBhY2tldHM7CS8qIHBhY2tldHMgcmVjZWl2ZWQgKi8KKyAgICBfX3UzMglwcHBfaWVycm9yczsJLyogcmVjZWl2ZSBlcnJvcnMgKi8KKyAgICBfX3UzMglwcHBfaWxxcnM7CS8qICMgTFFSIGZyYW1lcyByZWNlaXZlZCAqLworCisgICAgX191MzIJcHBwX29ieXRlczsJLyogcmF3IGJ5dGVzIHNlbnQgKi8KKyAgICBfX3UzMglwcHBfb29jdGVjdHM7CS8qIGZyYW1lIGJ5dGVzIHNlbnQgKi8KKyAgICBfX3UzMglwcHBfb3BhY2tldHM7CS8qIHBhY2tldHMgc2VudCAqLworICAgIF9fdTMyCXBwcF9vZXJyb3JzOwkvKiB0cmFuc21pdCBlcnJvcnMgKi8gCisgICAgX191MzIJcHBwX29scXJzOwkvKiAjIExRUiBmcmFtZXMgc2VudCAqLworfTsKKworc3RydWN0IHZqc3RhdCB7CisgICAgX191MzIJdmpzX3BhY2tldHM7CS8qIG91dGJvdW5kIHBhY2tldHMgKi8KKyAgICBfX3UzMgl2anNfY29tcHJlc3NlZDsJLyogb3V0Ym91bmQgY29tcHJlc3NlZCBwYWNrZXRzICovCisgICAgX191MzIJdmpzX3NlYXJjaGVzOwkvKiBzZWFyY2hlcyBmb3IgY29ubmVjdGlvbiBzdGF0ZSAqLworICAgIF9fdTMyCXZqc19taXNzZXM7CS8qIHRpbWVzIGNvdWxkbid0IGZpbmQgY29ubi4gc3RhdGUgKi8KKyAgICBfX3UzMgl2anNfdW5jb21wcmVzc2VkaW47IC8qIGluYm91bmQgdW5jb21wcmVzc2VkIHBhY2tldHMgKi8KKyAgICBfX3UzMgl2anNfY29tcHJlc3NlZGluOyAgIC8qIGluYm91bmQgY29tcHJlc3NlZCBwYWNrZXRzICovCisgICAgX191MzIJdmpzX2Vycm9yaW47CS8qIGluYm91bmQgdW5rbm93biB0eXBlIHBhY2tldHMgKi8KKyAgICBfX3UzMgl2anNfdG9zc2VkOwkvKiBpbmJvdW5kIHBhY2tldHMgdG9zc2VkIGJlY2F1c2Ugb2YgZXJyb3IgKi8KK307CisKK3N0cnVjdCBjb21wc3RhdCB7CisgICAgX191MzIJdW5jX2J5dGVzOwkvKiB0b3RhbCB1bmNvbXByZXNzZWQgYnl0ZXMgKi8KKyAgICBfX3UzMgl1bmNfcGFja2V0czsJLyogdG90YWwgdW5jb21wcmVzc2VkIHBhY2tldHMgKi8KKyAgICBfX3UzMgljb21wX2J5dGVzOwkvKiBjb21wcmVzc2VkIGJ5dGVzICovCisgICAgX191MzIJY29tcF9wYWNrZXRzOwkvKiBjb21wcmVzc2VkIHBhY2tldHMgKi8KKyAgICBfX3UzMglpbmNfYnl0ZXM7CS8qIGluY29tcHJlc3NpYmxlIGJ5dGVzICovCisgICAgX191MzIJaW5jX3BhY2tldHM7CS8qIGluY29tcHJlc3NpYmxlIHBhY2tldHMgKi8KKworICAgIC8qIHRoZSBjb21wcmVzc2lvbiByYXRpbyBpcyBkZWZpbmVkIGFzIGluX2NvdW50IC8gYnl0ZXNfb3V0ICovCisgICAgX191MzIgICAgICAgaW5fY291bnQ7CS8qIEJ5dGVzIHJlY2VpdmVkICovCisgICAgX191MzIgICAgICAgYnl0ZXNfb3V0OwkvKiBCeXRlcyB0cmFuc21pdHRlZCAqLworCisgICAgZG91YmxlCXJhdGlvOwkJLyogbm90IGNvbXB1dGVkIGluIGtlcm5lbC4gKi8KK307CisKK3N0cnVjdCBwcHBfc3RhdHMgeworICAgIHN0cnVjdCBwcHBzdGF0CXA7CS8qIGJhc2ljIFBQUCBzdGF0aXN0aWNzICovCisgICAgc3RydWN0IHZqc3RhdAl2ajsJLyogVkogaGVhZGVyIGNvbXByZXNzaW9uIHN0YXRpc3RpY3MgKi8KK307CisKK3N0cnVjdCBwcHBfY29tcF9zdGF0cyB7CisgICAgc3RydWN0IGNvbXBzdGF0CWM7CS8qIHBhY2tldCBjb21wcmVzc2lvbiBzdGF0aXN0aWNzICovCisgICAgc3RydWN0IGNvbXBzdGF0CWQ7CS8qIHBhY2tldCBkZWNvbXByZXNzaW9uIHN0YXRpc3RpY3MgKi8KK307CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSByZWNvcmRzIHRoZSB0aW1lIGluIHNlY29uZHMgc2luY2UKKyAqIHRoZSBsYXN0IE5QIHBhY2tldCB3YXMgc2VudCBvciByZWNlaXZlZC4KKyAqLworc3RydWN0IHBwcF9pZGxlIHsKKyAgICBfX2tlcm5lbF90aW1lX3QgeG1pdF9pZGxlOwkvKiB0aW1lIHNpbmNlIGxhc3QgTlAgcGFja2V0IHNlbnQgKi8KKyAgICBfX2tlcm5lbF90aW1lX3QgcmVjdl9pZGxlOwkvKiB0aW1lIHNpbmNlIGxhc3QgTlAgcGFja2V0IHJlY2VpdmVkICovCit9OworCisjZW5kaWYgLyogX1BQUF9ERUZTX0hfICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcHBzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcHBzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE5NGFiMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wcHMuaApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIFBQUyBBUEkgaGVhZGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgICBSb2RvbGZvIEdpb21ldHRpIDxnaW9tZXR0aUBsaW51eC5pdD4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworCisjaWZuZGVmIF9QUFNfSF8KKyNkZWZpbmUgX1BQU19IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBQUFNfVkVSU0lPTgkJIjUuMy42IgorI2RlZmluZSBQUFNfTUFYX1NPVVJDRVMJCTE2CQkvKiBzaG91bGQgYmUgZW5vdWdoLi4uICovCisKKy8qIEltcGxlbWVudGF0aW9uIG5vdGU6IHRoZSBsb2dpY2FsIHN0YXRlcyBgYGFzc2VydCcnIGFuZCBgYGNsZWFyJycKKyAqIGFyZSBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiB0aGUgY2hpcCByZWdpc3RlciwgaS5lLiBgYGFzc2VydCcnCisgKiBtZWFucyB0aGUgYml0IGlzIHNldC4gICovCisKKy8qCisgKiAzLjIgTmV3IGRhdGEgc3RydWN0dXJlcworICovCisKKyNkZWZpbmUgUFBTX0FQSV9WRVJTXzEJCTEKKyNkZWZpbmUgUFBTX0FQSV9WRVJTCQlQUFNfQVBJX1ZFUlNfMQkvKiB3ZSB1c2UgQVBJIHZlcnNpb24gMSAqLworI2RlZmluZSBQUFNfTUFYX05BTUVfTEVOCTMyCisKKy8qIDMyLWJpdCB2cy4gNjQtYml0IGNvbXBhdGliaWxpdHkuCisgKgorICogMG4gaTM4NiwgdGhlIGFsaWdubWVudCBvZiBhIHVpbnQ2NF90IGlzIG9ubHkgNCBieXRlcywgd2hpbGUgb24gbW9zdCBvdGhlcgorICogYXJjaGl0ZWN0dXJlcyBpdCdzIDggYnl0ZXMuIE9uIGkzODYsIHRoZXJlIHdpbGwgYmUgbm8gcGFkZGluZyBiZXR3ZWVuIHRoZQorICogdHdvIGNvbnNlY3V0aXZlICdzdHJ1Y3QgcHBzX2t0aW1lJyBtZW1iZXJzIG9mIHN0cnVjdCBwcHNfa2luZm8gYW5kIHN0cnVjdAorICogcHBzX2twYXJhbXMuIEJ1dCBvbiBtb3N0IHBsYXRmb3JtcyB0aGVyZSB3aWxsIGJlIHBhZGRpbmcgdG8gZW5zdXJlIGNvcnJlY3QKKyAqIGFsaWdubWVudC4KKyAqCisgKiBUaGUgc2ltcGxlIGZpeCBpcyBwcm9iYWJseSB0byBhZGQgYW4gZXhwbGljaXQgcGFkZGluZy4KKyAqCQkJCQkgCQlbRGF2aWQgV29vZGhvdXNlXQorICovCitzdHJ1Y3QgcHBzX2t0aW1lIHsKKwlfX3M2NCBzZWM7CisJX19zMzIgbnNlYzsKKwlfX3UzMiBmbGFnczsKK307CisjZGVmaW5lIFBQU19USU1FX0lOVkFMSUQJKDE8PDApCS8qIHVzZWQgdG8gc3BlY2lmeSB0aW1lb3V0PT1OVUxMICovCisKK3N0cnVjdCBwcHNfa2luZm8geworCV9fdTMyIGFzc2VydF9zZXF1ZW5jZTsJCS8qIHNlcS4gbnVtLiBvZiBhc3NlcnQgZXZlbnQgKi8KKwlfX3UzMiBjbGVhcl9zZXF1ZW5jZTsgCQkvKiBzZXEuIG51bS4gb2YgY2xlYXIgZXZlbnQgKi8KKwlzdHJ1Y3QgcHBzX2t0aW1lIGFzc2VydF90dTsJLyogdGltZSBvZiBhc3NlcnQgZXZlbnQgKi8KKwlzdHJ1Y3QgcHBzX2t0aW1lIGNsZWFyX3R1OwkvKiB0aW1lIG9mIGNsZWFyIGV2ZW50ICovCisJaW50IGN1cnJlbnRfbW9kZTsJCS8qIGN1cnJlbnQgbW9kZSBiaXRzICovCit9OworCitzdHJ1Y3QgcHBzX2twYXJhbXMgeworCWludCBhcGlfdmVyc2lvbjsJCS8qIEFQSSB2ZXJzaW9uICMgKi8KKwlpbnQgbW9kZTsJCQkvKiBtb2RlIGJpdHMgKi8KKwlzdHJ1Y3QgcHBzX2t0aW1lIGFzc2VydF9vZmZfdHU7CS8qIG9mZnNldCBjb21wZW5zYXRpb24gZm9yIGFzc2VydCAqLworCXN0cnVjdCBwcHNfa3RpbWUgY2xlYXJfb2ZmX3R1OwkvKiBvZmZzZXQgY29tcGVuc2F0aW9uIGZvciBjbGVhciAqLworfTsKKworLyoKKyAqIDMuMyBNb2RlIGJpdCBkZWZpbml0aW9ucworICovCisKKy8qIERldmljZS9pbXBsZW1lbnRhdGlvbiBwYXJhbWV0ZXJzICovCisjZGVmaW5lIFBQU19DQVBUVVJFQVNTRVJUCTB4MDEJLyogY2FwdHVyZSBhc3NlcnQgZXZlbnRzICovCisjZGVmaW5lIFBQU19DQVBUVVJFQ0xFQVIJMHgwMgkvKiBjYXB0dXJlIGNsZWFyIGV2ZW50cyAqLworI2RlZmluZSBQUFNfQ0FQVFVSRUJPVEgJCTB4MDMJLyogY2FwdHVyZSBhc3NlcnQgYW5kIGNsZWFyIGV2ZW50cyAqLworCisjZGVmaW5lIFBQU19PRkZTRVRBU1NFUlQJMHgxMAkvKiBhcHBseSBjb21wZW5zYXRpb24gZm9yIGFzc2VydCBldi4gKi8KKyNkZWZpbmUgUFBTX09GRlNFVENMRUFSCQkweDIwCS8qIGFwcGx5IGNvbXBlbnNhdGlvbiBmb3IgY2xlYXIgZXYuICovCisKKyNkZWZpbmUgUFBTX0NBTldBSVQJCTB4MTAwCS8qIGNhbiB3ZSB3YWl0IGZvciBhbiBldmVudD8gKi8KKyNkZWZpbmUgUFBTX0NBTlBPTEwJCTB4MjAwCS8qIGJpdCByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworCisvKiBLZXJuZWwgYWN0aW9ucyAqLworI2RlZmluZSBQUFNfRUNIT0FTU0VSVAkJMHg0MAkvKiBmZWVkIGJhY2sgYXNzZXJ0IGV2ZW50IHRvIG91dHB1dCAqLworI2RlZmluZSBQUFNfRUNIT0NMRUFSCQkweDgwCS8qIGZlZWQgYmFjayBjbGVhciBldmVudCB0byBvdXRwdXQgKi8KKworLyogVGltZXN0YW1wIGZvcm1hdHMgKi8KKyNkZWZpbmUgUFBTX1RTRk1UX1RTUEVDCQkweDEwMDAJLyogc2VsZWN0IHRpbWVzcGVjIGZvcm1hdCAqLworI2RlZmluZSBQUFNfVFNGTVRfTlRQRlAJCTB4MjAwMAkvKiBzZWxlY3QgTlRQIGZvcm1hdCAqLworCisvKgorICogMy40LjQgTmV3IGZ1bmN0aW9uczogZGlzY2lwbGluaW5nIHRoZSBrZXJuZWwgdGltZWJhc2UKKyAqLworCisvKiBLZXJuZWwgY29uc3VtZXJzICovCisjZGVmaW5lIFBQU19LQ19IQVJEUFBTCQkwCS8qIGhhcmRwcHMoKSAob3IgZXF1aXZhbGVudCkgKi8KKyNkZWZpbmUgUFBTX0tDX0hBUkRQUFNfUExMCTEJLyogaGFyZHBwcygpIGNvbnN0cmFpbmVkIHRvCisJCQkJCSAgIHVzZSBhIHBoYXNlLWxvY2tlZCBsb29wICovCisjZGVmaW5lIFBQU19LQ19IQVJEUFBTX0ZMTAkyCS8qIGhhcmRwcHMoKSBjb25zdHJhaW5lZCB0bworCQkJCQkgICB1c2UgYSBmcmVxdWVuY3ktbG9ja2VkIGxvb3AgKi8KKy8qCisgKiBIZXJlIGJlZ2lucyB0aGUgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgcGFydCEKKyAqLworCitzdHJ1Y3QgcHBzX2ZkYXRhIHsKKwlzdHJ1Y3QgcHBzX2tpbmZvIGluZm87CisJc3RydWN0IHBwc19rdGltZSB0aW1lb3V0OworfTsKKworI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNkZWZpbmUgUFBTX0dFVFBBUkFNUwkJX0lPUigncCcsIDB4YTEsIHN0cnVjdCBwcHNfa3BhcmFtcyAqKQorI2RlZmluZSBQUFNfU0VUUEFSQU1TCQlfSU9XKCdwJywgMHhhMiwgc3RydWN0IHBwc19rcGFyYW1zICopCisjZGVmaW5lIFBQU19HRVRDQVAJCV9JT1IoJ3AnLCAweGEzLCBpbnQgKikKKyNkZWZpbmUgUFBTX0ZFVENICQlfSU9XUigncCcsIDB4YTQsIHN0cnVjdCBwcHNfZmRhdGEgKikKKworI2VuZGlmIC8qIF9QUFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wcmN0bC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3ByY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNiYWViMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wcmN0bC5oCkBAIC0wLDAgKzEsMTA1IEBACisjaWZuZGVmIF9MSU5VWF9QUkNUTF9ICisjZGVmaW5lIF9MSU5VWF9QUkNUTF9ICisKKy8qIFZhbHVlcyB0byBwYXNzIGFzIGZpcnN0IGFyZ3VtZW50IHRvIHByY3RsKCkgKi8KKworI2RlZmluZSBQUl9TRVRfUERFQVRIU0lHICAxICAvKiBTZWNvbmQgYXJnIGlzIGEgc2lnbmFsICovCisjZGVmaW5lIFBSX0dFVF9QREVBVEhTSUcgIDIgIC8qIFNlY29uZCBhcmcgaXMgYSBwdHIgdG8gcmV0dXJuIHRoZSBzaWduYWwgKi8KKworLyogR2V0L3NldCBjdXJyZW50LT5tbS0+ZHVtcGFibGUgKi8KKyNkZWZpbmUgUFJfR0VUX0RVTVBBQkxFICAgMworI2RlZmluZSBQUl9TRVRfRFVNUEFCTEUgICA0CisKKy8qIEdldC9zZXQgdW5hbGlnbmVkIGFjY2VzcyBjb250cm9sIGJpdHMgKGlmIG1lYW5pbmdmdWwpICovCisjZGVmaW5lIFBSX0dFVF9VTkFMSUdOCSAgNQorI2RlZmluZSBQUl9TRVRfVU5BTElHTgkgIDYKKyMgZGVmaW5lIFBSX1VOQUxJR05fTk9QUklOVAkxCS8qIHNpbGVudGx5IGZpeCB1cCB1bmFsaWduZWQgdXNlciBhY2Nlc3NlcyAqLworIyBkZWZpbmUgUFJfVU5BTElHTl9TSUdCVVMJMgkvKiBnZW5lcmF0ZSBTSUdCVVMgb24gdW5hbGlnbmVkIHVzZXIgYWNjZXNzICovCisKKy8qIEdldC9zZXQgd2hldGhlciBvciBub3QgdG8gZHJvcCBjYXBhYmlsaXRpZXMgb24gc2V0dWlkKCkgYXdheSBmcm9tCisgKiB1aWQgMCAoYXMgcGVyIHNlY3VyaXR5L2NvbW1vbmNhcC5jKSAqLworI2RlZmluZSBQUl9HRVRfS0VFUENBUFMgICA3CisjZGVmaW5lIFBSX1NFVF9LRUVQQ0FQUyAgIDgKKworLyogR2V0L3NldCBmbG9hdGluZy1wb2ludCBlbXVsYXRpb24gY29udHJvbCBiaXRzIChpZiBtZWFuaW5nZnVsKSAqLworI2RlZmluZSBQUl9HRVRfRlBFTVUgIDkKKyNkZWZpbmUgUFJfU0VUX0ZQRU1VIDEwCisjIGRlZmluZSBQUl9GUEVNVV9OT1BSSU5UCTEJLyogc2lsZW50bHkgZW11bGF0ZSBmcCBvcGVyYXRpb25zIGFjY2Vzc2VzICovCisjIGRlZmluZSBQUl9GUEVNVV9TSUdGUEUJMgkvKiBkb24ndCBlbXVsYXRlIGZwIG9wZXJhdGlvbnMsIHNlbmQgU0lHRlBFIGluc3RlYWQgKi8KKworLyogR2V0L3NldCBmbG9hdGluZy1wb2ludCBleGNlcHRpb24gbW9kZSAoaWYgbWVhbmluZ2Z1bCkgKi8KKyNkZWZpbmUgUFJfR0VUX0ZQRVhDCTExCisjZGVmaW5lIFBSX1NFVF9GUEVYQwkxMgorIyBkZWZpbmUgUFJfRlBfRVhDX1NXX0VOQUJMRQkweDgwCS8qIFVzZSBGUEVYQyBmb3IgRlAgZXhjZXB0aW9uIGVuYWJsZXMgKi8KKyMgZGVmaW5lIFBSX0ZQX0VYQ19ESVYJCTB4MDEwMDAwCS8qIGZsb2F0aW5nIHBvaW50IGRpdmlkZSBieSB6ZXJvICovCisjIGRlZmluZSBQUl9GUF9FWENfT1ZGCQkweDAyMDAwMAkvKiBmbG9hdGluZyBwb2ludCBvdmVyZmxvdyAqLworIyBkZWZpbmUgUFJfRlBfRVhDX1VORAkJMHgwNDAwMDAJLyogZmxvYXRpbmcgcG9pbnQgdW5kZXJmbG93ICovCisjIGRlZmluZSBQUl9GUF9FWENfUkVTCQkweDA4MDAwMAkvKiBmbG9hdGluZyBwb2ludCBpbmV4YWN0IHJlc3VsdCAqLworIyBkZWZpbmUgUFJfRlBfRVhDX0lOVgkJMHgxMDAwMDAJLyogZmxvYXRpbmcgcG9pbnQgaW52YWxpZCBvcGVyYXRpb24gKi8KKyMgZGVmaW5lIFBSX0ZQX0VYQ19ESVNBQkxFRAkwCS8qIEZQIGV4Y2VwdGlvbnMgZGlzYWJsZWQgKi8KKyMgZGVmaW5lIFBSX0ZQX0VYQ19OT05SRUNPVgkxCS8qIGFzeW5jIG5vbi1yZWNvdmVyYWJsZSBleGMuIG1vZGUgKi8KKyMgZGVmaW5lIFBSX0ZQX0VYQ19BU1lOQwkyCS8qIGFzeW5jIHJlY292ZXJhYmxlIGV4Y2VwdGlvbiBtb2RlICovCisjIGRlZmluZSBQUl9GUF9FWENfUFJFQ0lTRQkzCS8qIHByZWNpc2UgZXhjZXB0aW9uIG1vZGUgKi8KKworLyogR2V0L3NldCB3aGV0aGVyIHdlIHVzZSBzdGF0aXN0aWNhbCBwcm9jZXNzIHRpbWluZyBvciBhY2N1cmF0ZSB0aW1lc3RhbXAKKyAqIGJhc2VkIHByb2Nlc3MgdGltaW5nICovCisjZGVmaW5lIFBSX0dFVF9USU1JTkcgICAxMworI2RlZmluZSBQUl9TRVRfVElNSU5HICAgMTQKKyMgZGVmaW5lIFBSX1RJTUlOR19TVEFUSVNUSUNBTCAgMCAgICAgICAvKiBOb3JtYWwsIHRyYWRpdGlvbmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljYWwgcHJvY2VzcyB0aW1pbmcgKi8KKyMgZGVmaW5lIFBSX1RJTUlOR19USU1FU1RBTVAgICAgMSAgICAgICAvKiBBY2N1cmF0ZSB0aW1lc3RhbXAgYmFzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MgdGltaW5nICovCisKKyNkZWZpbmUgUFJfU0VUX05BTUUgICAgMTUJCS8qIFNldCBwcm9jZXNzIG5hbWUgKi8KKyNkZWZpbmUgUFJfR0VUX05BTUUgICAgMTYJCS8qIEdldCBwcm9jZXNzIG5hbWUgKi8KKworLyogR2V0L3NldCBwcm9jZXNzIGVuZGlhbiAqLworI2RlZmluZSBQUl9HRVRfRU5ESUFOCTE5CisjZGVmaW5lIFBSX1NFVF9FTkRJQU4JMjAKKyMgZGVmaW5lIFBSX0VORElBTl9CSUcJCTAKKyMgZGVmaW5lIFBSX0VORElBTl9MSVRUTEUJMQkvKiBUcnVlIGxpdHRsZSBlbmRpYW4gbW9kZSAqLworIyBkZWZpbmUgUFJfRU5ESUFOX1BQQ19MSVRUTEUJMgkvKiAiUG93ZXJQQyIgcHNldWRvIGxpdHRsZSBlbmRpYW4gKi8KKworLyogR2V0L3NldCBwcm9jZXNzIHNlY2NvbXAgbW9kZSAqLworI2RlZmluZSBQUl9HRVRfU0VDQ09NUAkyMQorI2RlZmluZSBQUl9TRVRfU0VDQ09NUAkyMgorCisvKiBHZXQvc2V0IHRoZSBjYXBhYmlsaXR5IGJvdW5kaW5nIHNldCAoYXMgcGVyIHNlY3VyaXR5L2NvbW1vbmNhcC5jKSAqLworI2RlZmluZSBQUl9DQVBCU0VUX1JFQUQgMjMKKyNkZWZpbmUgUFJfQ0FQQlNFVF9EUk9QIDI0CisKKy8qIEdldC9zZXQgdGhlIHByb2Nlc3MnIGFiaWxpdHkgdG8gdXNlIHRoZSB0aW1lc3RhbXAgY291bnRlciBpbnN0cnVjdGlvbiAqLworI2RlZmluZSBQUl9HRVRfVFNDIDI1CisjZGVmaW5lIFBSX1NFVF9UU0MgMjYKKyMgZGVmaW5lIFBSX1RTQ19FTkFCTEUJCTEJLyogYWxsb3cgdGhlIHVzZSBvZiB0aGUgdGltZXN0YW1wIGNvdW50ZXIgKi8KKyMgZGVmaW5lIFBSX1RTQ19TSUdTRUdWCQkyCS8qIHRocm93IGEgU0lHU0VHViBpbnN0ZWFkIG9mIHJlYWRpbmcgdGhlIFRTQyAqLworCisvKiBHZXQvc2V0IHNlY3VyZWJpdHMgKGFzIHBlciBzZWN1cml0eS9jb21tb25jYXAuYykgKi8KKyNkZWZpbmUgUFJfR0VUX1NFQ1VSRUJJVFMgMjcKKyNkZWZpbmUgUFJfU0VUX1NFQ1VSRUJJVFMgMjgKKworLyoKKyAqIEdldC9zZXQgdGhlIHRpbWVyc2xhY2sgYXMgdXNlZCBieSBwb2xsL3NlbGVjdC9uYW5vc2xlZXAKKyAqIEEgdmFsdWUgb2YgMCBtZWFucyAidXNlIGRlZmF1bHQiCisgKi8KKyNkZWZpbmUgUFJfU0VUX1RJTUVSU0xBQ0sgMjkKKyNkZWZpbmUgUFJfR0VUX1RJTUVSU0xBQ0sgMzAKKworI2RlZmluZSBQUl9UQVNLX1BFUkZfRVZFTlRTX0RJU0FCTEUJCTMxCisjZGVmaW5lIFBSX1RBU0tfUEVSRl9FVkVOVFNfRU5BQkxFCQkzMgorCisvKgorICogU2V0IGVhcmx5L2xhdGUga2lsbCBtb2RlIGZvciBod3BvaXNvbiBtZW1vcnkgY29ycnVwdGlvbi4KKyAqIFRoaXMgaW5mbHVlbmNlcyB3aGVuIHRoZSBwcm9jZXNzIGdldHMga2lsbGVkIG9uIGEgbWVtb3J5IGNvcnJ1cHRpb24uCisgKi8KKyNkZWZpbmUgUFJfTUNFX0tJTEwJMzMKKyMgZGVmaW5lIFBSX01DRV9LSUxMX0NMRUFSICAgMAorIyBkZWZpbmUgUFJfTUNFX0tJTExfU0VUICAgICAxCisKKyMgZGVmaW5lIFBSX01DRV9LSUxMX0xBVEUgICAgMAorIyBkZWZpbmUgUFJfTUNFX0tJTExfRUFSTFkgICAxCisjIGRlZmluZSBQUl9NQ0VfS0lMTF9ERUZBVUxUIDIKKworI2RlZmluZSBQUl9NQ0VfS0lMTF9HRVQgMzQKKworI2VuZGlmIC8qIF9MSU5VWF9QUkNUTF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcHRyYWNlLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcHRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZiYTMyZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9wdHJhY2UuaApAQCAtMCwwICsxLDcyIEBACisjaWZuZGVmIF9MSU5VWF9QVFJBQ0VfSAorI2RlZmluZSBfTElOVVhfUFRSQUNFX0gKKy8qIHB0cmFjZS5oICovCisvKiBzdHJ1Y3RzIGFuZCBkZWZpbmVzIHRvIGhlbHAgdGhlIHVzZXIgdXNlIHRoZSBwdHJhY2Ugc3lzdGVtIGNhbGwuICovCisKKy8qIGhhcyB0aGUgZGVmaW5lcyB0byBnZXQgYXQgdGhlIHJlZ2lzdGVycy4gKi8KKworI2RlZmluZSBQVFJBQ0VfVFJBQ0VNRQkJICAgMAorI2RlZmluZSBQVFJBQ0VfUEVFS1RFWFQJCSAgIDEKKyNkZWZpbmUgUFRSQUNFX1BFRUtEQVRBCQkgICAyCisjZGVmaW5lIFBUUkFDRV9QRUVLVVNSCQkgICAzCisjZGVmaW5lIFBUUkFDRV9QT0tFVEVYVAkJICAgNAorI2RlZmluZSBQVFJBQ0VfUE9LRURBVEEJCSAgIDUKKyNkZWZpbmUgUFRSQUNFX1BPS0VVU1IJCSAgIDYKKyNkZWZpbmUgUFRSQUNFX0NPTlQJCSAgIDcKKyNkZWZpbmUgUFRSQUNFX0tJTEwJCSAgIDgKKyNkZWZpbmUgUFRSQUNFX1NJTkdMRVNURVAJICAgOQorCisjZGVmaW5lIFBUUkFDRV9BVFRBQ0gJCSAgMTYKKyNkZWZpbmUgUFRSQUNFX0RFVEFDSAkJICAxNworCisjZGVmaW5lIFBUUkFDRV9TWVNDQUxMCQkgIDI0CisKKy8qIDB4NDIwMC0weDQzMDAgYXJlIHJlc2VydmVkIGZvciBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgYWRkaXRpb25zLiAgKi8KKyNkZWZpbmUgUFRSQUNFX1NFVE9QVElPTlMJMHg0MjAwCisjZGVmaW5lIFBUUkFDRV9HRVRFVkVOVE1TRwkweDQyMDEKKyNkZWZpbmUgUFRSQUNFX0dFVFNJR0lORk8JMHg0MjAyCisjZGVmaW5lIFBUUkFDRV9TRVRTSUdJTkZPCTB4NDIwMworCisvKgorICogR2VuZXJpYyBwdHJhY2UgaW50ZXJmYWNlIHRoYXQgZXhwb3J0cyB0aGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHJlZ3NldHMKKyAqIHVzaW5nIHRoZSBjb3JyZXNwb25kaW5nIE5UXyogdHlwZXMgKHdoaWNoIGFyZSBhbHNvIHVzZWQgaW4gdGhlIGNvcmUgZHVtcCkuCisgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBOVF9QUlNUQVRVUyBub3RlIHR5cGUgaW4gYSBjb3JlIGR1bXAgY29udGFpbnMgYSBmdWxsCisgKiAnc3RydWN0IGVsZl9wcnN0YXR1cycuIEJ1dCB0aGUgdXNlcl9yZWdzZXQgZm9yIE5UX1BSU1RBVFVTIGNvbnRhaW5zIGp1c3QgdGhlCisgKiBlbGZfZ3JlZ3NldF90IHRoYXQgaXMgdGhlIHByX3JlZyBmaWVsZCBvZiAnc3RydWN0IGVsZl9wcnN0YXR1cycuIEZvciBhbGwgdGhlCisgKiBvdGhlciB1c2VyX3JlZ3NldCBmbGF2b3JzLCB0aGUgdXNlcl9yZWdzZXQgbGF5b3V0IGFuZCB0aGUgRUxGIGNvcmUgZHVtcCBub3RlCisgKiBwYXlsb2FkIGFyZSBleGFjdGx5IHRoZSBzYW1lIGxheW91dC4KKyAqCisgKiBUaGlzIGludGVyZmFjZSB1c2FnZSBpcyBhcyBmb2xsb3dzOgorICoJc3RydWN0IGlvdmVjIGlvdiA9IHsgYnVmLCBsZW59OworICoKKyAqCXJldCA9IHB0cmFjZShQVFJBQ0VfR0VUUkVHU0VUL1BUUkFDRV9TRVRSRUdTRVQsIHBpZCwgTlRfWFhYX1RZUEUsICZpb3YpOworICoKKyAqIE9uIHRoZSBzdWNjZXNzZnVsIGNvbXBsZXRpb24sIGlvdi5sZW4gd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZSBrZXJuZWwsCisgKiBzcGVjaWZ5aW5nIGhvdyBtdWNoIHRoZSBrZXJuZWwgaGFzIHdyaXR0ZW4vcmVhZCB0by9mcm9tIHRoZSB1c2VyJ3MgaW92LmJ1Zi4KKyAqLworI2RlZmluZSBQVFJBQ0VfR0VUUkVHU0VUCTB4NDIwNAorI2RlZmluZSBQVFJBQ0VfU0VUUkVHU0VUCTB4NDIwNQorCisvKiBvcHRpb25zIHNldCB1c2luZyBQVFJBQ0VfU0VUT1BUSU9OUyAqLworI2RlZmluZSBQVFJBQ0VfT19UUkFDRVNZU0dPT0QJMHgwMDAwMDAwMQorI2RlZmluZSBQVFJBQ0VfT19UUkFDRUZPUksJMHgwMDAwMDAwMgorI2RlZmluZSBQVFJBQ0VfT19UUkFDRVZGT1JLCTB4MDAwMDAwMDQKKyNkZWZpbmUgUFRSQUNFX09fVFJBQ0VDTE9ORQkweDAwMDAwMDA4CisjZGVmaW5lIFBUUkFDRV9PX1RSQUNFRVhFQwkweDAwMDAwMDEwCisjZGVmaW5lIFBUUkFDRV9PX1RSQUNFVkZPUktET05FCTB4MDAwMDAwMjAKKyNkZWZpbmUgUFRSQUNFX09fVFJBQ0VFWElUCTB4MDAwMDAwNDAKKworI2RlZmluZSBQVFJBQ0VfT19NQVNLCQkweDAwMDAwMDdmCisKKy8qIFdhaXQgZXh0ZW5kZWQgcmVzdWx0IGNvZGVzIGZvciB0aGUgYWJvdmUgdHJhY2Ugb3B0aW9ucy4gICovCisjZGVmaW5lIFBUUkFDRV9FVkVOVF9GT1JLCTEKKyNkZWZpbmUgUFRSQUNFX0VWRU5UX1ZGT1JLCTIKKyNkZWZpbmUgUFRSQUNFX0VWRU5UX0NMT05FCTMKKyNkZWZpbmUgUFRSQUNFX0VWRU5UX0VYRUMJNAorI2RlZmluZSBQVFJBQ0VfRVZFTlRfVkZPUktfRE9ORQk1CisjZGVmaW5lIFBUUkFDRV9FVkVOVF9FWElUCTYKKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9xbng0X2ZzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcW54NF9mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOWFlZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcW54NF9mcy5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiAgTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICA6IHFueDRfZnMuaAorICogIEF1dGhvciAgICAgICAgICAgICAgICAgICAgICAgOiBSaWNoYXJkIEZyb3dpam4KKyAqICBGdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgIDogcW54NCBnbG9iYWwgZmlsZXN5c3RlbSBkZWZpbml0aW9ucworICogIEhpc3RvcnkgICAgICAgICAgICAgICAgICAgICAgOiAyMy0wMy0xOTk4IGNyZWF0ZWQKKyAqLworI2lmbmRlZiBfTElOVVhfUU5YNF9GU19ICisjZGVmaW5lIF9MSU5VWF9RTlg0X0ZTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcW54dHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgorCisjZGVmaW5lIFFOWDRfUk9PVF9JTk8gMQorCisjZGVmaW5lIFFOWDRfTUFYX1hUTlRTX1BFUl9YQkxLCTYwCisvKiBmb3IgZGlfc3RhdHVzICovCisjZGVmaW5lIFFOWDRfRklMRV9VU0VEICAgICAgICAgIDB4MDEKKyNkZWZpbmUgUU5YNF9GSUxFX01PRElGSUVEICAgICAgMHgwMgorI2RlZmluZSBRTlg0X0ZJTEVfQlVTWSAgICAgICAgICAweDA0CisjZGVmaW5lIFFOWDRfRklMRV9MSU5LICAgICAgICAgIDB4MDgKKyNkZWZpbmUgUU5YNF9GSUxFX0lOT0RFICAgICAgICAgMHgxMAorI2RlZmluZSBRTlg0X0ZJTEVfRlNZU0NMRUFOICAgICAweDIwCisKKyNkZWZpbmUgUU5YNF9JX01BUF9TTE9UUwk4CisjZGVmaW5lIFFOWDRfWl9NQVBfU0xPVFMJNjQKKyNkZWZpbmUgUU5YNF9WQUxJRF9GUwkJMHgwMDAxCS8qIENsZWFuIGZzLiAqLworI2RlZmluZSBRTlg0X0VSUk9SX0ZTCQkweDAwMDIJLyogZnMgaGFzIGVycm9ycy4gKi8KKyNkZWZpbmUgUU5YNF9CTE9DS19TSVpFICAgICAgICAgMHgyMDAJLyogYmxvY2tzaXplIG9mIDUxMiBieXRlcyAqLworI2RlZmluZSBRTlg0X0JMT0NLX1NJWkVfQklUUyAgICA5CS8qIGJsb2Nrc2l6ZSBzaGlmdCAqLworI2RlZmluZSBRTlg0X0RJUl9FTlRSWV9TSVpFICAgICAweDA0MAkvKiBkaXIgZW50cnkgc2l6ZSBvZiA2NCBieXRlcyAqLworI2RlZmluZSBRTlg0X0RJUl9FTlRSWV9TSVpFX0JJVFMgNgkvKiBkaXIgZW50cnkgc2l6ZSBzaGlmdCAqLworI2RlZmluZSBRTlg0X1hCTEtfRU5UUllfU0laRSAgICAweDIwMAkvKiB4YmxrIGVudHJ5IHNpemUgKi8KKyNkZWZpbmUgUU5YNF9JTk9ERVNfUEVSX0JMT0NLICAgMHgwOAkvKiA1MTIgLyA2NCAqLworCisvKiBmb3IgZmlsZW5hbWVzICovCisjZGVmaW5lIFFOWDRfU0hPUlRfTkFNRV9NQVgJMTYKKyNkZWZpbmUgUU5YNF9OQU1FX01BWAkJNDgKKworLyoKKyAqIFRoaXMgaXMgdGhlIG9yaWdpbmFsIHFueDQgaW5vZGUgbGF5b3V0IG9uIGRpc2suCisgKi8KK3N0cnVjdCBxbng0X2lub2RlX2VudHJ5IHsKKwljaGFyCQlkaV9mbmFtZVtRTlg0X1NIT1JUX05BTUVfTUFYXTsKKwlxbng0X29mZl90CWRpX3NpemU7CisJcW54NF94dG50X3QJZGlfZmlyc3RfeHRudDsKKwlfX2xlMzIJCWRpX3hibGs7CisJX19sZTMyCQlkaV9mdGltZTsKKwlfX2xlMzIJCWRpX210aW1lOworCV9fbGUzMgkJZGlfYXRpbWU7CisJX19sZTMyCQlkaV9jdGltZTsKKwlxbng0X254dG50X3QJZGlfbnVtX3h0bnRzOworCXFueDRfbW9kZV90CWRpX21vZGU7CisJcW54NF9tdWlkX3QJZGlfdWlkOworCXFueDRfbWdpZF90CWRpX2dpZDsKKwlxbng0X25saW5rX3QJZGlfbmxpbms7CisJX191OAkJZGlfemVyb1s0XTsKKwlxbng0X2Z0eXBlX3QJZGlfdHlwZTsKKwlfX3U4CQlkaV9zdGF0dXM7Cit9OworCitzdHJ1Y3QgcW54NF9saW5rX2luZm8geworCWNoYXIJCWRsX2ZuYW1lW1FOWDRfTkFNRV9NQVhdOworCV9fbGUzMgkJZGxfaW5vZGVfYmxrOworCV9fdTgJCWRsX2lub2RlX25keDsKKwlfX3U4CQlkbF9zcGFyZVsxMF07CisJX191OAkJZGxfc3RhdHVzOworfTsKKworc3RydWN0IHFueDRfeGJsayB7CisJX19sZTMyCQl4YmxrX25leHRfeGJsazsKKwlfX2xlMzIJCXhibGtfcHJldl94YmxrOworCV9fdTgJCXhibGtfbnVtX3h0bnRzOworCV9fdTgJCXhibGtfc3BhcmVbM107CisJX19sZTMyCQl4YmxrX251bV9ibG9ja3M7CisJcW54NF94dG50X3QJeGJsa194dG50c1tRTlg0X01BWF9YVE5UU19QRVJfWEJMS107CisJY2hhcgkJeGJsa19zaWduYXR1cmVbOF07CisJcW54NF94dG50X3QJeGJsa19maXJzdF94dG50OworfTsKKworc3RydWN0IHFueDRfc3VwZXJfYmxvY2sgeworCXN0cnVjdCBxbng0X2lub2RlX2VudHJ5IFJvb3REaXI7CisJc3RydWN0IHFueDRfaW5vZGVfZW50cnkgSW5vZGU7CisJc3RydWN0IHFueDRfaW5vZGVfZW50cnkgQm9vdDsKKwlzdHJ1Y3QgcW54NF9pbm9kZV9lbnRyeSBBbHRCb290OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcW54dHlwZXMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9xbnh0eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYmJlNWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcW54dHlwZXMuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgOiBxbnh0eXBlcy5oCisgKiAgQXV0aG9yICAgICAgICAgICAgICAgICAgICAgICA6IFJpY2hhcmQgRnJvd2lqbgorICogIEZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgOiBzdGFuZGFyZCBxbnggdHlwZXMKKyAqICBIaXN0b3J5ICAgICAgICAgICAgICAgICAgICAgIDogMjItMDMtMTk5OCBjcmVhdGVkCisgKgorICovCisKKyNpZm5kZWYgX1FOWDRUWVBFU19ICisjZGVmaW5lIF9RTlg0VFlQRVNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwordHlwZWRlZiBfX2xlMTYgcW54NF9ueHRudF90OwordHlwZWRlZiBfX3U4ICBxbng0X2Z0eXBlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlfX2xlMzIgeHRudF9ibGs7CisJX19sZTMyIHh0bnRfc2l6ZTsKK30gcW54NF94dG50X3Q7CisKK3R5cGVkZWYgX19sZTE2IHFueDRfbW9kZV90OwordHlwZWRlZiBfX2xlMTYgcW54NF9tdWlkX3Q7Cit0eXBlZGVmIF9fbGUxNiBxbng0X21naWRfdDsKK3R5cGVkZWYgX19sZTMyIHFueDRfb2ZmX3Q7Cit0eXBlZGVmIF9fbGUxNiBxbng0X25saW5rX3Q7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3F1b3RhLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcXVvdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmRkMzcwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3F1b3RhLmgKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODIsIDE5ODYgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBSb2JlcnQgRWx6IGF0IFRoZSBVbml2ZXJzaXR5IG9mIE1lbGJvdXJuZS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfTElOVVhfUVVPVEFfCisjZGVmaW5lIF9MSU5VWF9RVU9UQV8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBfX0RRVU9UX1ZFUlNJT05fXwkiZHF1b3RfNi41LjIiCisKKyNkZWZpbmUgTUFYUVVPVEFTIDIKKyNkZWZpbmUgVVNSUVVPVEEgIDAJCS8qIGVsZW1lbnQgdXNlZCBmb3IgdXNlciBxdW90YXMgKi8KKyNkZWZpbmUgR1JQUVVPVEEgIDEJCS8qIGVsZW1lbnQgdXNlZCBmb3IgZ3JvdXAgcXVvdGFzICovCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgdGhlIGRlZmF1bHQgbmFtZXMgb2YgdGhlIHF1b3RhcyBmaWxlcy4KKyAqLworI2RlZmluZSBJTklUUUZOQU1FUyB7IFwKKwkidXNlciIsICAgIC8qIFVTUlFVT1RBICovIFwKKwkiZ3JvdXAiLCAgIC8qIEdSUFFVT1RBICovIFwKKwkidW5kZWZpbmVkIiwgXAorfTsKKworLyoKKyAqIENvbW1hbmQgZGVmaW5pdGlvbnMgZm9yIHRoZSAncXVvdGFjdGwnIHN5c3RlbSBjYWxsLgorICogVGhlIGNvbW1hbmRzIGFyZSBicm9rZW4gaW50byBhIG1haW4gY29tbWFuZCBkZWZpbmVkIGJlbG93CisgKiBhbmQgYSBzdWJjb21tYW5kIHRoYXQgaXMgdXNlZCB0byBjb252ZXkgdGhlIHR5cGUgb2YKKyAqIHF1b3RhIHRoYXQgaXMgYmVpbmcgbWFuaXB1bGF0ZWQgKHNlZSBhYm92ZSkuCisgKi8KKyNkZWZpbmUgU1VCQ01ETUFTSyAgMHgwMGZmCisjZGVmaW5lIFNVQkNNRFNISUZUIDgKKyNkZWZpbmUgUUNNRChjbWQsIHR5cGUpICAoKChjbWQpIDw8IFNVQkNNRFNISUZUKSB8ICgodHlwZSkgJiBTVUJDTURNQVNLKSkKKworI2RlZmluZSBRX1NZTkMgICAgIDB4ODAwMDAxCS8qIHN5bmMgZGlzayBjb3B5IG9mIGEgZmlsZXN5c3RlbXMgcXVvdGFzICovCisjZGVmaW5lIFFfUVVPVEFPTiAgMHg4MDAwMDIJLyogdHVybiBxdW90YXMgb24gKi8KKyNkZWZpbmUgUV9RVU9UQU9GRiAweDgwMDAwMwkvKiB0dXJuIHF1b3RhcyBvZmYgKi8KKyNkZWZpbmUgUV9HRVRGTVQgICAweDgwMDAwNAkvKiBnZXQgcXVvdGEgZm9ybWF0IHVzZWQgb24gZ2l2ZW4gZmlsZXN5c3RlbSAqLworI2RlZmluZSBRX0dFVElORk8gIDB4ODAwMDA1CS8qIGdldCBpbmZvcm1hdGlvbiBhYm91dCBxdW90YSBmaWxlcyAqLworI2RlZmluZSBRX1NFVElORk8gIDB4ODAwMDA2CS8qIHNldCBpbmZvcm1hdGlvbiBhYm91dCBxdW90YSBmaWxlcyAqLworI2RlZmluZSBRX0dFVFFVT1RBIDB4ODAwMDA3CS8qIGdldCB1c2VyIHF1b3RhIHN0cnVjdHVyZSAqLworI2RlZmluZSBRX1NFVFFVT1RBIDB4ODAwMDA4CS8qIHNldCB1c2VyIHF1b3RhIHN0cnVjdHVyZSAqLworCisvKiBRdW90YSBmb3JtYXQgdHlwZSBJRHMgKi8KKyNkZWZpbmUJUUZNVF9WRlNfT0xEIDEKKyNkZWZpbmUJUUZNVF9WRlNfVjAgMgorI2RlZmluZSBRRk1UX09DRlMyIDMKKyNkZWZpbmUJUUZNVF9WRlNfVjEgNAorCisvKiBTaXplIG9mIGJsb2NrIGluIHdoaWNoIHNwYWNlIGxpbWl0cyBhcmUgcGFzc2VkIHRocm91Z2ggdGhlIHF1b3RhCisgKiBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgUUlGX0RRQkxLU0laRV9CSVRTIDEwCisjZGVmaW5lIFFJRl9EUUJMS1NJWkUgKDEgPDwgUUlGX0RRQkxLU0laRV9CSVRTKQorCisvKgorICogUXVvdGEgc3RydWN0dXJlIHVzZWQgZm9yIGNvbW11bmljYXRpb24gd2l0aCB1c2Vyc3BhY2UgdmlhIHF1b3RhY3RsCisgKiBGb2xsb3dpbmcgZmxhZ3MgYXJlIHVzZWQgdG8gc3BlY2lmeSB3aGljaCBmaWVsZHMgYXJlIHZhbGlkCisgKi8KK2VudW0geworCVFJRl9CTElNSVRTX0IgPSAwLAorCVFJRl9TUEFDRV9CLAorCVFJRl9JTElNSVRTX0IsCisJUUlGX0lOT0RFU19CLAorCVFJRl9CVElNRV9CLAorCVFJRl9JVElNRV9CLAorfTsKKworI2RlZmluZSBRSUZfQkxJTUlUUwkoMSA8PCBRSUZfQkxJTUlUU19CKQorI2RlZmluZSBRSUZfU1BBQ0UJKDEgPDwgUUlGX1NQQUNFX0IpCisjZGVmaW5lIFFJRl9JTElNSVRTCSgxIDw8IFFJRl9JTElNSVRTX0IpCisjZGVmaW5lIFFJRl9JTk9ERVMJKDEgPDwgUUlGX0lOT0RFU19CKQorI2RlZmluZSBRSUZfQlRJTUUJKDEgPDwgUUlGX0JUSU1FX0IpCisjZGVmaW5lIFFJRl9JVElNRQkoMSA8PCBRSUZfSVRJTUVfQikKKyNkZWZpbmUgUUlGX0xJTUlUUwkoUUlGX0JMSU1JVFMgfCBRSUZfSUxJTUlUUykKKyNkZWZpbmUgUUlGX1VTQUdFCShRSUZfU1BBQ0UgfCBRSUZfSU5PREVTKQorI2RlZmluZSBRSUZfVElNRVMJKFFJRl9CVElNRSB8IFFJRl9JVElNRSkKKyNkZWZpbmUgUUlGX0FMTAkJKFFJRl9MSU1JVFMgfCBRSUZfVVNBR0UgfCBRSUZfVElNRVMpCisKK3N0cnVjdCBpZl9kcWJsayB7CisJX191NjQgZHFiX2JoYXJkbGltaXQ7CisJX191NjQgZHFiX2Jzb2Z0bGltaXQ7CisJX191NjQgZHFiX2N1cnNwYWNlOworCV9fdTY0IGRxYl9paGFyZGxpbWl0OworCV9fdTY0IGRxYl9pc29mdGxpbWl0OworCV9fdTY0IGRxYl9jdXJpbm9kZXM7CisJX191NjQgZHFiX2J0aW1lOworCV9fdTY0IGRxYl9pdGltZTsKKwlfX3UzMiBkcWJfdmFsaWQ7Cit9OworCisvKgorICogU3RydWN0dXJlIHVzZWQgZm9yIHNldHRpbmcgcXVvdGEgaW5mb3JtYXRpb24gYWJvdXQgZmlsZSB2aWEgcXVvdGFjdGwKKyAqIEZvbGxvd2luZyBmbGFncyBhcmUgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIGZpZWxkcyBhcmUgdmFsaWQKKyAqLworI2RlZmluZSBJSUZfQkdSQUNFCTEKKyNkZWZpbmUgSUlGX0lHUkFDRQkyCisjZGVmaW5lIElJRl9GTEFHUwk0CisjZGVmaW5lIElJRl9BTEwJCShJSUZfQkdSQUNFIHwgSUlGX0lHUkFDRSB8IElJRl9GTEFHUykKKworc3RydWN0IGlmX2RxaW5mbyB7CisJX191NjQgZHFpX2JncmFjZTsKKwlfX3U2NCBkcWlfaWdyYWNlOworCV9fdTMyIGRxaV9mbGFnczsKKwlfX3UzMiBkcWlfdmFsaWQ7Cit9OworCisvKgorICogRGVmaW5pdGlvbnMgZm9yIHF1b3RhIG5ldGxpbmsgaW50ZXJmYWNlCisgKi8KKyNkZWZpbmUgUVVPVEFfTkxfTk9XQVJOIDAKKyNkZWZpbmUgUVVPVEFfTkxfSUhBUkRXQVJOIDEJCS8qIElub2RlIGhhcmRsaW1pdCByZWFjaGVkICovCisjZGVmaW5lIFFVT1RBX05MX0lTT0ZUTE9OR1dBUk4gMiAJLyogSW5vZGUgZ3JhY2UgdGltZSBleHBpcmVkICovCisjZGVmaW5lIFFVT1RBX05MX0lTT0ZUV0FSTiAzCQkvKiBJbm9kZSBzb2Z0bGltaXQgcmVhY2hlZCAqLworI2RlZmluZSBRVU9UQV9OTF9CSEFSRFdBUk4gNAkJLyogQmxvY2sgaGFyZGxpbWl0IHJlYWNoZWQgKi8KKyNkZWZpbmUgUVVPVEFfTkxfQlNPRlRMT05HV0FSTiA1CS8qIEJsb2NrIGdyYWNlIHRpbWUgZXhwaXJlZCAqLworI2RlZmluZSBRVU9UQV9OTF9CU09GVFdBUk4gNgkJLyogQmxvY2sgc29mdGxpbWl0IHJlYWNoZWQgKi8KKyNkZWZpbmUgUVVPVEFfTkxfSUhBUkRCRUxPVyA3CQkvKiBVc2FnZSBnb3QgYmVsb3cgaW5vZGUgaGFyZGxpbWl0ICovCisjZGVmaW5lIFFVT1RBX05MX0lTT0ZUQkVMT1cgOAkJLyogVXNhZ2UgZ290IGJlbG93IGlub2RlIHNvZnRsaW1pdCAqLworI2RlZmluZSBRVU9UQV9OTF9CSEFSREJFTE9XIDkJCS8qIFVzYWdlIGdvdCBiZWxvdyBibG9jayBoYXJkbGltaXQgKi8KKyNkZWZpbmUgUVVPVEFfTkxfQlNPRlRCRUxPVyAxMAkJLyogVXNhZ2UgZ290IGJlbG93IGJsb2NrIHNvZnRsaW1pdCAqLworCitlbnVtIHsKKwlRVU9UQV9OTF9DX1VOU1BFQywKKwlRVU9UQV9OTF9DX1dBUk5JTkcsCisJX19RVU9UQV9OTF9DX01BWCwKK307CisjZGVmaW5lIFFVT1RBX05MX0NfTUFYIChfX1FVT1RBX05MX0NfTUFYIC0gMSkKKworZW51bSB7CisJUVVPVEFfTkxfQV9VTlNQRUMsCisJUVVPVEFfTkxfQV9RVFlQRSwKKwlRVU9UQV9OTF9BX0VYQ0VTU19JRCwKKwlRVU9UQV9OTF9BX1dBUk5JTkcsCisJUVVPVEFfTkxfQV9ERVZfTUFKT1IsCisJUVVPVEFfTkxfQV9ERVZfTUlOT1IsCisJUVVPVEFfTkxfQV9DQVVTRURfSUQsCisJX19RVU9UQV9OTF9BX01BWCwKK307CisjZGVmaW5lIFFVT1RBX05MX0FfTUFYIChfX1FVT1RBX05MX0FfTUFYIC0gMSkKKworCisKKyMgLyogbm9kZXAgKi8gaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKK19fQkVHSU5fREVDTFMKK2xvbmcgcXVvdGFjdGwgX19QICgodW5zaWduZWQgaW50LCBjb25zdCBjaGFyICosIGludCwgY2FkZHJfdCkpOworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9RVU9UQV8gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9yYWRlb25mYi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3JhZGVvbmZiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM0YmJkZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9yYWRlb25mYi5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgX19MSU5VWF9SQURFT05GQl9IX18KKyNkZWZpbmUgX19MSU5VWF9SQURFT05GQl9IX18KKworI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgQVRZX1JBREVPTl9MQ0RfT04JMHgwMDAwMDAwMQorI2RlZmluZSBBVFlfUkFERU9OX0NSVF9PTgkweDAwMDAwMDAyCisKKworI2RlZmluZSBGQklPX1JBREVPTl9HRVRfTUlSUk9SCV9JT1IoJ0AnLCAzLCBzaXplX3QpCisjZGVmaW5lIEZCSU9fUkFERU9OX1NFVF9NSVJST1IJX0lPVygnQCcsIDQsIHNpemVfdCkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9yYWlkL21kX3AuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9yYWlkL21kX3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmNmZDlhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfcC5oCkBAIC0wLDAgKzEsMjc3IEBACisvKgorICAgbWRfcC5oIDogcGh5c2ljYWwgbGF5b3V0IG9mIExpbnV4IFJBSUQgZGV2aWNlcworICAgICAgICAgIENvcHlyaWdodCAoQykgMTk5Ni05OCBJbmdvIE1vbG5hciwgR2FkaSBPeG1hbgorCSAgCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgKGZvciBleGFtcGxlIC91c3Ivc3JjL2xpbnV4L0NPUFlJTkcpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gIAorKi8KKworI2lmbmRlZiBfTURfUF9ICisjZGVmaW5lIF9NRF9QX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBSQUlEIHN1cGVyYmxvY2suCisgKgorICogVGhlIFJBSUQgc3VwZXJibG9jayBtYWludGFpbnMgc29tZSBzdGF0aXN0aWNzIG9uIGVhY2ggUkFJRCBjb25maWd1cmF0aW9uLgorICogRWFjaCByZWFsIGRldmljZSBpbiB0aGUgUkFJRCBzZXQgY29udGFpbnMgaXQgbmVhciB0aGUgZW5kIG9mIHRoZSBkZXZpY2UuCisgKiBTb21lIG9mIHRoZSBpZGVhcyBhcmUgY29waWVkIGZyb20gdGhlIGV4dDJmcyBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBXZSBjdXJyZW50bHkgdXNlIDQwOTYgYnl0ZXMgYXMgZm9sbG93czoKKyAqCisgKgl3b3JkIG9mZnNldAlmdW5jdGlvbgorICoKKyAqCSAgIDAgIC0gICAgMzEJQ29uc3RhbnQgZ2VuZXJpYyBSQUlEIGRldmljZSBpbmZvcm1hdGlvbi4KKyAqICAgICAgICAzMiAgLSAgICA2MyAgIEdlbmVyaWMgc3RhdGUgaW5mb3JtYXRpb24uCisgKgkgIDY0ICAtICAgMTI3CVBlcnNvbmFsaXR5IHNwZWNpZmljIGluZm9ybWF0aW9uLgorICoJIDEyOCAgLSAgIDUxMQkxMiAzMi13b3JkcyBkZXNjcmlwdG9ycyBvZiB0aGUgZGlza3MgaW4gdGhlIHJhaWQgc2V0LgorICoJIDUxMiAgLSAgIDkxMQlSZXNlcnZlZC4KKyAqCSA5MTIgIC0gIDEwMjMJRGlzayBzcGVjaWZpYyBkZXNjcmlwdG9yLgorICovCisKKy8qCisgKiBJZiB4IGlzIHRoZSByZWFsIGRldmljZSBzaXplIGluIGJ5dGVzLCB3ZSByZXR1cm4gYW4gYXBwYXJlbnQgc2l6ZSBvZjoKKyAqCisgKgl5ID0gKHggJiB+KE1EX1JFU0VSVkVEX0JZVEVTIC0gMSkpIC0gTURfUkVTRVJWRURfQllURVMKKyAqCisgKiBhbmQgcGxhY2UgdGhlIDRrQiBzdXBlcmJsb2NrIGF0IG9mZnNldCB5LgorICovCisjZGVmaW5lIE1EX1JFU0VSVkVEX0JZVEVTCQkoNjQgKiAxMDI0KQorI2RlZmluZSBNRF9SRVNFUlZFRF9TRUNUT1JTCQkoTURfUkVTRVJWRURfQllURVMgLyA1MTIpCisKKyNkZWZpbmUgTURfTkVXX1NJWkVfU0VDVE9SUyh4KQkJKCh4ICYgfihNRF9SRVNFUlZFRF9TRUNUT1JTIC0gMSkpIC0gTURfUkVTRVJWRURfU0VDVE9SUykKKworI2RlZmluZSBNRF9TQl9CWVRFUwkJCTQwOTYKKyNkZWZpbmUgTURfU0JfV09SRFMJCQkoTURfU0JfQllURVMgLyA0KQorI2RlZmluZSBNRF9TQl9TRUNUT1JTCQkJKE1EX1NCX0JZVEVTIC8gNTEyKQorCisvKgorICogVGhlIGZvbGxvd2luZyBhcmUgY291bnRlZCBpbiAzMi1iaXQgd29yZHMKKyAqLworI2RlZmluZQlNRF9TQl9HRU5FUklDX09GRlNFVAkJMAorI2RlZmluZSBNRF9TQl9QRVJTT05BTElUWV9PRkZTRVQJNjQKKyNkZWZpbmUgTURfU0JfRElTS1NfT0ZGU0VUCQkxMjgKKyNkZWZpbmUgTURfU0JfREVTQ1JJUFRPUl9PRkZTRVQJCTk5MgorCisjZGVmaW5lIE1EX1NCX0dFTkVSSUNfQ09OU1RBTlRfV09SRFMJMzIKKyNkZWZpbmUgTURfU0JfR0VORVJJQ19TVEFURV9XT1JEUwkzMgorI2RlZmluZSBNRF9TQl9HRU5FUklDX1dPUkRTCQkoTURfU0JfR0VORVJJQ19DT05TVEFOVF9XT1JEUyArIE1EX1NCX0dFTkVSSUNfU1RBVEVfV09SRFMpCisjZGVmaW5lIE1EX1NCX1BFUlNPTkFMSVRZX1dPUkRTCQk2NAorI2RlZmluZSBNRF9TQl9ERVNDUklQVE9SX1dPUkRTCQkzMgorI2RlZmluZSBNRF9TQl9ESVNLUwkJCTI3CisjZGVmaW5lIE1EX1NCX0RJU0tTX1dPUkRTCQkoTURfU0JfRElTS1MqTURfU0JfREVTQ1JJUFRPUl9XT1JEUykKKyNkZWZpbmUgTURfU0JfUkVTRVJWRURfV09SRFMJCSgxMDI0IC0gTURfU0JfR0VORVJJQ19XT1JEUyAtIE1EX1NCX1BFUlNPTkFMSVRZX1dPUkRTIC0gTURfU0JfRElTS1NfV09SRFMgLSBNRF9TQl9ERVNDUklQVE9SX1dPUkRTKQorI2RlZmluZSBNRF9TQl9FUVVBTF9XT1JEUwkJKE1EX1NCX0dFTkVSSUNfV09SRFMgKyBNRF9TQl9QRVJTT05BTElUWV9XT1JEUyArIE1EX1NCX0RJU0tTX1dPUkRTKQorCisvKgorICogRGV2aWNlICJvcGVyYXRpb25hbCIgc3RhdGUgYml0cworICovCisjZGVmaW5lIE1EX0RJU0tfRkFVTFRZCQkwIC8qIGRpc2sgaXMgZmF1bHR5IC8gb3BlcmF0aW9uYWwgKi8KKyNkZWZpbmUgTURfRElTS19BQ1RJVkUJCTEgLyogZGlzayBpcyBydW5uaW5nIG9yIHNwYXJlIGRpc2sgKi8KKyNkZWZpbmUgTURfRElTS19TWU5DCQkyIC8qIGRpc2sgaXMgaW4gc3luYyB3aXRoIHRoZSByYWlkIHNldCAqLworI2RlZmluZSBNRF9ESVNLX1JFTU9WRUQJCTMgLyogZGlzayBpcyBpbiBzeW5jIHdpdGggdGhlIHJhaWQgc2V0ICovCisKKyNkZWZpbmUJTURfRElTS19XUklURU1PU1RMWQk5IC8qIGRpc2sgaXMgIndyaXRlLW1vc3RseSIgaXMgUkFJRDEgY29uZmlnLgorCQkJCSAgICogcmVhZCByZXF1ZXN0cyB3aWxsIG9ubHkgYmUgc2VudCBoZXJlIGluCisJCQkJICAgKiBkaXJlIG5lZWQKKwkJCQkgICAqLworCit0eXBlZGVmIHN0cnVjdCBtZHBfZGV2aWNlX2Rlc2NyaXB0b3JfcyB7CisJX191MzIgbnVtYmVyOwkJLyogMCBEZXZpY2UgbnVtYmVyIGluIHRoZSBlbnRpcmUgc2V0CSAgICAgICovCisJX191MzIgbWFqb3I7CQkvKiAxIERldmljZSBtYWpvciBudW1iZXIJCSAgICAgICovCisJX191MzIgbWlub3I7CQkvKiAyIERldmljZSBtaW5vciBudW1iZXIJCSAgICAgICovCisJX191MzIgcmFpZF9kaXNrOwkvKiAzIFRoZSByb2xlIG9mIHRoZSBkZXZpY2UgaW4gdGhlIHJhaWQgc2V0ICAgKi8KKwlfX3UzMiBzdGF0ZTsJCS8qIDQgT3BlcmF0aW9uYWwgc3RhdGUJCQkgICAgICAqLworCV9fdTMyIHJlc2VydmVkW01EX1NCX0RFU0NSSVBUT1JfV09SRFMgLSA1XTsKK30gbWRwX2Rpc2tfdDsKKworI2RlZmluZSBNRF9TQl9NQUdJQwkJMHhhOTJiNGVmYworCisvKgorICogU3VwZXJibG9jayBzdGF0ZSBiaXRzCisgKi8KKyNkZWZpbmUgTURfU0JfQ0xFQU4JCTAKKyNkZWZpbmUgTURfU0JfRVJST1JTCQkxCisKKyNkZWZpbmUJTURfU0JfQklUTUFQX1BSRVNFTlQJOCAvKiBiaXRtYXAgbWF5IGJlIHByZXNlbnQgbmVhcmJ5ICovCisKKy8qCisgKiBOb3RlczoKKyAqIC0gaWYgYW4gYXJyYXkgaXMgYmVpbmcgcmVzaGFwZWQgKHJlc3RyaXBlZCkgaW4gb3JkZXIgdG8gY2hhbmdlIHRoZQorICogICB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBkZXZpY2VzIGluIHRoZSBhcnJheSwgJ3JhaWRfZGlza3MnIHdpbGwgYmUKKyAqICAgdGhlIGxhcmdlciBvZiB0aGUgb2xkIGFuZCBuZXcgbnVtYmVycy4gICdkZWx0YV9kaXNrcycgd2lsbAorICogICBiZSB0aGUgIm5ldyAtIG9sZCIuICBTbyBpZiArdmUsIHJhaWRfZGlza3MgaXMgdGhlIG5ldyB2YWx1ZSwgYW5kCisgKiAgICJyYWlkX2Rpc2tzLWRlbHRhX2Rpc2tzIiBpcyB0aGUgb2xkLiAgSWYgLXZlLCByYWlkX2Rpc2tzIGlzIHRoZQorICogICBvbGQgdmFsdWUgYW5kICJyYWlkX2Rpc2tzK2RlbHRhX2Rpc2tzIiBpcyB0aGUgbmV3IChzbWFsbGVyKSB2YWx1ZS4KKyAqLworCisKK3R5cGVkZWYgc3RydWN0IG1kcF9zdXBlcmJsb2NrX3MgeworCS8qCisJICogQ29uc3RhbnQgZ2VuZXJpYyBpbmZvcm1hdGlvbgorCSAqLworCV9fdTMyIG1kX21hZ2ljOwkJLyogIDAgTUQgaWRlbnRpZmllciAJCQkgICAgICAqLworCV9fdTMyIG1ham9yX3ZlcnNpb247CS8qICAxIG1ham9yIHZlcnNpb24gdG8gd2hpY2ggdGhlIHNldCBjb25mb3JtcyAqLworCV9fdTMyIG1pbm9yX3ZlcnNpb247CS8qICAyIG1pbm9yIHZlcnNpb24gLi4uCQkJICAgICAgKi8KKwlfX3UzMiBwYXRjaF92ZXJzaW9uOwkvKiAgMyBwYXRjaGxldmVsIHZlcnNpb24gLi4uCQkgICAgICAqLworCV9fdTMyIGd2YWxpZF93b3JkczsJLyogIDQgTnVtYmVyIG9mIHVzZWQgd29yZHMgaW4gdGhpcyBzZWN0aW9uICAgICovCisJX191MzIgc2V0X3V1aWQwOwkvKiAgNSBSYWlkIHNldCBpZGVudGlmaWVyCQkgICAgICAqLworCV9fdTMyIGN0aW1lOwkJLyogIDYgQ3JlYXRpb24gdGltZQkJCSAgICAgICovCisJX191MzIgbGV2ZWw7CQkvKiAgNyBSYWlkIHBlcnNvbmFsaXR5CQkJICAgICAgKi8KKwlfX3UzMiBzaXplOwkJLyogIDggQXBwYXJlbnQgc2l6ZSBvZiBlYWNoIGluZGl2aWR1YWwgZGlzayAgICovCisJX191MzIgbnJfZGlza3M7CQkvKiAgOSB0b3RhbCBkaXNrcyBpbiB0aGUgcmFpZCBzZXQJICAgICAgKi8KKwlfX3UzMiByYWlkX2Rpc2tzOwkvKiAxMCBkaXNrcyBpbiBhIGZ1bGx5IGZ1bmN0aW9uYWwgcmFpZCBzZXQgICAgKi8KKwlfX3UzMiBtZF9taW5vcjsJCS8qIDExIHByZWZlcnJlZCBNRCBtaW5vciBkZXZpY2UgbnVtYmVyCSAgICAgICovCisJX191MzIgbm90X3BlcnNpc3RlbnQ7CS8qIDEyIGRvZXMgaXQgaGF2ZSBhIHBlcnNpc3RlbnQgc3VwZXJibG9jayAgICAqLworCV9fdTMyIHNldF91dWlkMTsJLyogMTMgUmFpZCBzZXQgaWRlbnRpZmllciAjMgkJICAgICAgKi8KKwlfX3UzMiBzZXRfdXVpZDI7CS8qIDE0IFJhaWQgc2V0IGlkZW50aWZpZXIgIzMJCSAgICAgICovCisJX191MzIgc2V0X3V1aWQzOwkvKiAxNSBSYWlkIHNldCBpZGVudGlmaWVyICM0CQkgICAgICAqLworCV9fdTMyIGdzdGF0ZV9jcmVzZXJ2ZWRbTURfU0JfR0VORVJJQ19DT05TVEFOVF9XT1JEUyAtIDE2XTsKKworCS8qCisJICogR2VuZXJpYyBzdGF0ZSBpbmZvcm1hdGlvbgorCSAqLworCV9fdTMyIHV0aW1lOwkJLyogIDAgU3VwZXJibG9jayB1cGRhdGUgdGltZQkJICAgICAgKi8KKwlfX3UzMiBzdGF0ZTsJCS8qICAxIFN0YXRlIGJpdHMgKGNsZWFuLCAuLi4pCQkgICAgICAqLworCV9fdTMyIGFjdGl2ZV9kaXNrczsJLyogIDIgTnVtYmVyIG9mIGN1cnJlbnRseSBhY3RpdmUgZGlza3MJICAgICAgKi8KKwlfX3UzMiB3b3JraW5nX2Rpc2tzOwkvKiAgMyBOdW1iZXIgb2Ygd29ya2luZyBkaXNrcwkJICAgICAgKi8KKwlfX3UzMiBmYWlsZWRfZGlza3M7CS8qICA0IE51bWJlciBvZiBmYWlsZWQgZGlza3MJCSAgICAgICovCisJX191MzIgc3BhcmVfZGlza3M7CS8qICA1IE51bWJlciBvZiBzcGFyZSBkaXNrcwkJICAgICAgKi8KKwlfX3UzMiBzYl9jc3VtOwkJLyogIDYgY2hlY2tzdW0gb2YgdGhlIHdob2xlIHN1cGVyYmxvY2sgICAgICAgICovCisjaWZkZWYgX19CSUdfRU5ESUFOCisJX191MzIgZXZlbnRzX2hpOwkvKiAgNyBoaWdoLW9yZGVyIG9mIHN1cGVyYmxvY2sgdXBkYXRlIGNvdW50ICAgKi8KKwlfX3UzMiBldmVudHNfbG87CS8qICA4IGxvdy1vcmRlciBvZiBzdXBlcmJsb2NrIHVwZGF0ZSBjb3VudCAgICAqLworCV9fdTMyIGNwX2V2ZW50c19oaTsJLyogIDkgaGlnaC1vcmRlciBvZiBjaGVja3BvaW50IHVwZGF0ZSBjb3VudCAgICovCisJX191MzIgY3BfZXZlbnRzX2xvOwkvKiAxMCBsb3ctb3JkZXIgb2YgY2hlY2twb2ludCB1cGRhdGUgY291bnQgICAgKi8KKyNlbHNlCisJX191MzIgZXZlbnRzX2xvOwkvKiAgNyBsb3ctb3JkZXIgb2Ygc3VwZXJibG9jayB1cGRhdGUgY291bnQgICAgKi8KKwlfX3UzMiBldmVudHNfaGk7CS8qICA4IGhpZ2gtb3JkZXIgb2Ygc3VwZXJibG9jayB1cGRhdGUgY291bnQgICAqLworCV9fdTMyIGNwX2V2ZW50c19sbzsJLyogIDkgbG93LW9yZGVyIG9mIGNoZWNrcG9pbnQgdXBkYXRlIGNvdW50ICAgICovCisJX191MzIgY3BfZXZlbnRzX2hpOwkvKiAxMCBoaWdoLW9yZGVyIG9mIGNoZWNrcG9pbnQgdXBkYXRlIGNvdW50ICAgKi8KKyNlbmRpZgorCV9fdTMyIHJlY292ZXJ5X2NwOwkvKiAxMSByZWNvdmVyeSBjaGVja3BvaW50IHNlY3RvciBjb3VudAkgICAgICAqLworCS8qIFRoZXJlIGFyZSBvbmx5IHZhbGlkIGZvciBtaW5vcl92ZXJzaW9uID4gOTAgKi8KKwlfX3U2NCByZXNoYXBlX3Bvc2l0aW9uOwkvKiAxMiwxMyBuZXh0IGFkZHJlc3MgaW4gYXJyYXktc3BhY2UgZm9yIHJlc2hhcGUgKi8KKwlfX3UzMiBuZXdfbGV2ZWw7CS8qIDE0IG5ldyBsZXZlbCB3ZSBhcmUgcmVzaGFwaW5nIHRvCSAgICAgICovCisJX191MzIgZGVsdGFfZGlza3M7CS8qIDE1IGNoYW5nZSBpbiBudW1iZXIgb2YgcmFpZF9kaXNrcwkgICAgICAqLworCV9fdTMyIG5ld19sYXlvdXQ7CS8qIDE2IG5ldyBsYXlvdXQJCQkgICAgICAqLworCV9fdTMyIG5ld19jaHVuazsJLyogMTcgbmV3IGNodW5rIHNpemUgKGJ5dGVzKQkJICAgICAgKi8KKwlfX3UzMiBnc3RhdGVfc3Jlc2VydmVkW01EX1NCX0dFTkVSSUNfU1RBVEVfV09SRFMgLSAxOF07CisKKwkvKgorCSAqIFBlcnNvbmFsaXR5IGluZm9ybWF0aW9uCisJICovCisJX191MzIgbGF5b3V0OwkJLyogIDAgdGhlIGFycmF5J3MgcGh5c2ljYWwgbGF5b3V0CSAgICAgICovCisJX191MzIgY2h1bmtfc2l6ZTsJLyogIDEgY2h1bmsgc2l6ZSBpbiBieXRlcwkJICAgICAgKi8KKwlfX3UzMiByb290X3B2OwkJLyogIDIgTFYgcm9vdCBQViAqLworCV9fdTMyIHJvb3RfYmxvY2s7CS8qICAzIExWIHJvb3QgYmxvY2sgKi8KKwlfX3UzMiBwc3RhdGVfcmVzZXJ2ZWRbTURfU0JfUEVSU09OQUxJVFlfV09SRFMgLSA0XTsKKworCS8qCisJICogRGlza3MgaW5mb3JtYXRpb24KKwkgKi8KKwltZHBfZGlza190IGRpc2tzW01EX1NCX0RJU0tTXTsKKworCS8qCisJICogUmVzZXJ2ZWQKKwkgKi8KKwlfX3UzMiByZXNlcnZlZFtNRF9TQl9SRVNFUlZFRF9XT1JEU107CisKKwkvKgorCSAqIEFjdGl2ZSBkZXNjcmlwdG9yCisJICovCisJbWRwX2Rpc2tfdCB0aGlzX2Rpc2s7CisKK30gbWRwX3N1cGVyX3Q7CisKK3N0YXRpYyBfX2lubGluZV9fIF9fdTY0IG1kX2V2ZW50KG1kcF9zdXBlcl90ICpzYikgeworCV9fdTY0IGV2ID0gc2ItPmV2ZW50c19oaTsKKwlyZXR1cm4gKGV2PDwzMil8IHNiLT5ldmVudHNfbG87Cit9CisKKyNkZWZpbmUgTURfU1VQRVJCTE9DS18xX1RJTUVfU0VDX01BU0sgKCgxVUxMPDw0MCkgLSAxKQorCisvKgorICogVGhlIHZlcnNpb24tMSBzdXBlcmJsb2NrIDoKKyAqIEFsbCBudW1lcmljIGZpZWxkcyBhcmUgbGl0dGxlLWVuZGlhbi4KKyAqCisgKiB0b3RhbCBzaXplOiAyNTYgYnl0ZXMgcGx1cyAyIHBlciBkZXZpY2UuCisgKiAgMUsgYWxsb3dzIDM4NCBkZXZpY2VzLgorICovCitzdHJ1Y3QgbWRwX3N1cGVyYmxvY2tfMSB7CisJLyogY29uc3RhbnQgYXJyYXkgaW5mb3JtYXRpb24gLSAxMjggYnl0ZXMgKi8KKwlfX2xlMzIJbWFnaWM7CQkvKiBNRF9TQl9NQUdJQzogMHhhOTJiNGVmYyAtIGxpdHRsZSBlbmRpYW4gKi8KKwlfX2xlMzIJbWFqb3JfdmVyc2lvbjsJLyogMSAqLworCV9fbGUzMglmZWF0dXJlX21hcDsJLyogYml0IDAgc2V0IGlmICdiaXRtYXBfb2Zmc2V0JyBpcyBtZWFuaW5nZnVsICovCisJX19sZTMyCXBhZDA7CQkvKiBhbHdheXMgc2V0IHRvIDAgd2hlbiB3cml0aW5nICovCisKKwlfX3U4CXNldF91dWlkWzE2XTsJLyogdXNlci1zcGFjZSBnZW5lcmF0ZWQuICovCisJY2hhcglzZXRfbmFtZVszMl07CS8qIHNldCBhbmQgaW50ZXJwcmV0ZWQgYnkgdXNlci1zcGFjZSAqLworCisJX19sZTY0CWN0aW1lOwkJLyogbG8gNDAgYml0cyBhcmUgc2Vjb25kcywgdG9wIDI0IGFyZSBtaWNyb3NlY29uZHMgb3IgMCovCisJX19sZTMyCWxldmVsOwkJLyogLTQgKG11bHRpcGF0aCksIC0xIChsaW5lYXIpLCAwLDEsNCw1ICovCisJX19sZTMyCWxheW91dDsJCS8qIG9ubHkgZm9yIHJhaWQ1IGFuZCByYWlkMTAgY3VycmVudGx5ICovCisJX19sZTY0CXNpemU7CQkvKiB1c2VkIHNpemUgb2YgY29tcG9uZW50IGRldmljZXMsIGluIDUxMmJ5dGUgc2VjdG9ycyAqLworCisJX19sZTMyCWNodW5rc2l6ZTsJLyogaW4gNTEyYnl0ZSBzZWN0b3JzICovCisJX19sZTMyCXJhaWRfZGlza3M7CisJX19sZTMyCWJpdG1hcF9vZmZzZXQ7CS8qIHNlY3RvcnMgYWZ0ZXIgc3RhcnQgb2Ygc3VwZXJibG9jayB0aGF0IGJpdG1hcCBzdGFydHMKKwkJCQkgKiBOT1RFOiBzaWduZWQsIHNvIGJpdG1hcCBjYW4gYmUgYmVmb3JlIHN1cGVyYmxvY2sKKwkJCQkgKiBvbmx5IG1lYW5pbmdmdWwgb2YgZmVhdHVyZV9tYXBbMF0gaXMgc2V0LgorCQkJCSAqLworCisJLyogVGhlc2UgYXJlIG9ubHkgdmFsaWQgd2l0aCBmZWF0dXJlIGJpdCAnNCcgKi8KKwlfX2xlMzIJbmV3X2xldmVsOwkvKiBuZXcgbGV2ZWwgd2UgYXJlIHJlc2hhcGluZyB0bwkJKi8KKwlfX2xlNjQJcmVzaGFwZV9wb3NpdGlvbjsJLyogbmV4dCBhZGRyZXNzIGluIGFycmF5LXNwYWNlIGZvciByZXNoYXBlICovCisJX19sZTMyCWRlbHRhX2Rpc2tzOwkvKiBjaGFuZ2UgaW4gbnVtYmVyIG9mIHJhaWRfZGlza3MJCSovCisJX19sZTMyCW5ld19sYXlvdXQ7CS8qIG5ldyBsYXlvdXQJCQkJCSovCisJX19sZTMyCW5ld19jaHVuazsJLyogbmV3IGNodW5rIHNpemUgKDUxMmJ5dGUgc2VjdG9ycykJCSovCisJX191OAlwYWQxWzEyOC0xMjRdOwkvKiBzZXQgdG8gMCB3aGVuIHdyaXR0ZW4gKi8KKworCS8qIGNvbnN0YW50IHRoaXMtZGV2aWNlIGluZm9ybWF0aW9uIC0gNjQgYnl0ZXMgKi8KKwlfX2xlNjQJZGF0YV9vZmZzZXQ7CS8qIHNlY3RvciBzdGFydCBvZiBkYXRhLCBvZnRlbiAwICovCisJX19sZTY0CWRhdGFfc2l6ZTsJLyogc2VjdG9ycyBpbiB0aGlzIGRldmljZSB0aGF0IGNhbiBiZSB1c2VkIGZvciBkYXRhICovCisJX19sZTY0CXN1cGVyX29mZnNldDsJLyogc2VjdG9yIHN0YXJ0IG9mIHRoaXMgc3VwZXJibG9jayAqLworCV9fbGU2NAlyZWNvdmVyeV9vZmZzZXQ7Lyogc2VjdG9ycyBiZWZvcmUgdGhpcyBvZmZzZXQgKGZyb20gZGF0YV9vZmZzZXQpIGhhdmUgYmVlbiByZWNvdmVyZWQgKi8KKwlfX2xlMzIJZGV2X251bWJlcjsJLyogcGVybWFuZW50IGlkZW50aWZpZXIgb2YgdGhpcyAgZGV2aWNlIC0gbm90IHJvbGUgaW4gcmFpZCAqLworCV9fbGUzMgljbnRfY29ycmVjdGVkX3JlYWQ7IC8qIG51bWJlciBvZiByZWFkIGVycm9ycyB0aGF0IHdlcmUgY29ycmVjdGVkIGJ5IHJlLXdyaXRpbmcgKi8KKwlfX3U4CWRldmljZV91dWlkWzE2XTsgLyogdXNlci1zcGFjZSBzZXRhYmxlLCBpZ25vcmVkIGJ5IGtlcm5lbCAqLworCV9fdTgJZGV2ZmxhZ3M7CS8qIHBlci1kZXZpY2UgZmxhZ3MuICBPbmx5IG9uZSBkZWZpbmVkLi4uKi8KKyNkZWZpbmUJV3JpdGVNb3N0bHkxCTEJLyogbWFzayBmb3Igd3JpdGVtb3N0bHkgZmxhZyBpbiBhYm92ZSAqLworCV9fdTgJcGFkMls2NC01N107CS8qIHNldCB0byAwIHdoZW4gd3JpdGluZyAqLworCisJLyogYXJyYXkgc3RhdGUgaW5mb3JtYXRpb24gLSA2NCBieXRlcyAqLworCV9fbGU2NAl1dGltZTsJCS8qIDQwIGJpdHMgc2Vjb25kLCAyNCBidGVzIG1pY3Jvc2Vjb25kcyAqLworCV9fbGU2NAlldmVudHM7CQkvKiBpbmNyZW1lbnRlZCB3aGVuIHN1cGVyYmxvY2sgdXBkYXRlZCAqLworCV9fbGU2NAlyZXN5bmNfb2Zmc2V0OwkvKiBkYXRhIGJlZm9yZSB0aGlzIG9mZnNldCAoZnJvbSBkYXRhX29mZnNldCkga25vd24gdG8gYmUgaW4gc3luYyAqLworCV9fbGUzMglzYl9jc3VtOwkvKiBjaGVja3N1bSB1cHRvIGRldnNbbWF4X2Rldl0gKi8KKwlfX2xlMzIJbWF4X2RldjsJLyogc2l6ZSBvZiBkZXZzW10gYXJyYXkgdG8gY29uc2lkZXIgKi8KKwlfX3U4CXBhZDNbNjQtMzJdOwkvKiBzZXQgdG8gMCB3aGVuIHdyaXRpbmcgKi8KKworCS8qIGRldmljZSBzdGF0ZSBpbmZvcm1hdGlvbi4gSW5kZXhlZCBieSBkZXZfbnVtYmVyLgorCSAqIDIgYnl0ZXMgcGVyIGRldmljZQorCSAqIE5vdGUgdGhlcmUgYXJlIG5vIHBlci1kZXZpY2Ugc3RhdGUgZmxhZ3MuIFN0YXRlIGluZm9ybWF0aW9uIGlzIHJvbGxlZAorCSAqIGludG8gdGhlICdyb2xlcycgdmFsdWUuICBJZiBhIGRldmljZSBpcyBzcGFyZSBvciBmYXVsdHksIHRoZW4gaXQgZG9lc24ndAorCSAqIGhhdmUgYSBtZWFuaW5nZnVsIHJvbGUuCisJICovCisJX19sZTE2CWRldl9yb2xlc1swXTsJLyogcm9sZSBpbiBhcnJheSwgb3IgMHhmZmZmIGZvciBhIHNwYXJlLCBvciAweGZmZmUgZm9yIGZhdWx0eSAqLworfTsKKworLyogZmVhdHVyZV9tYXAgYml0cyAqLworI2RlZmluZSBNRF9GRUFUVVJFX0JJVE1BUF9PRkZTRVQJMQorI2RlZmluZQlNRF9GRUFUVVJFX1JFQ09WRVJZX09GRlNFVAkyIC8qIHJlY292ZXJ5X29mZnNldCBpcyBwcmVzZW50IGFuZAorCQkJCQkgICAqIG11c3QgYmUgaG9ub3VyZWQKKwkJCQkJICAgKi8KKyNkZWZpbmUJTURfRkVBVFVSRV9SRVNIQVBFX0FDVElWRQk0CisKKyNkZWZpbmUJTURfRkVBVFVSRV9BTEwJCQkoMXwyfDQpCisKKyNlbmRpZiAKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfdS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExODVhN2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcmFpZC9tZF91LmgKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgICBtZF91LmggOiB1c2VyIDw9PiBrZXJuZWwgQVBJIGJldHdlZW4gTGludXggcmFpZHRvb2xzIGFuZCBSQUlEIGRyaXZlcnMKKyAgICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTggSW5nbyBNb2xuYXIKKwkgIAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIChmb3IgZXhhbXBsZSAvdXNyL3NyYy9saW51eC9DT1BZSU5HKTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAKKyovCisKKyNpZm5kZWYgX01EX1VfSAorI2RlZmluZSBfTURfVV9ICisKKy8qCisgKiBEaWZmZXJlbnQgbWFqb3IgdmVyc2lvbnMgYXJlIG5vdCBjb21wYXRpYmxlLgorICogRGlmZmVyZW50IG1pbm9yIHZlcnNpb25zIGFyZSBvbmx5IGRvd253YXJkIGNvbXBhdGlibGUuCisgKiBEaWZmZXJlbnQgcGF0Y2hsZXZlbCB2ZXJzaW9ucyBhcmUgZG93bndhcmQgYW5kIHVwd2FyZCBjb21wYXRpYmxlLgorICovCisjZGVmaW5lIE1EX01BSk9SX1ZFUlNJT04gICAgICAgICAgICAgICAgMAorI2RlZmluZSBNRF9NSU5PUl9WRVJTSU9OICAgICAgICAgICAgICAgIDkwCisvKgorICogTURfUEFUQ0hMRVZFTF9WRVJTSU9OIGluZGljYXRlcyBrZXJuZWwgZnVuY3Rpb25hbGl0eS4KKyAqID49MSBtZWFucyBkaWZmZXJlbnQgc3VwZXJibG9jayBmb3JtYXRzIGFyZSBzZWxlY3RhYmxlIHVzaW5nIFNFVF9BUlJBWV9JTkZPCisgKiAgICAgYW5kIG1ham9yX3ZlcnNpb24vbWlub3JfdmVyc2lvbiBhY2NvcmRpbmdseQorICogPj0yIG1lYW5zIHRoYXQgSW50ZXJuYWwgYml0bWFwcyBhcmUgc3VwcG9ydGVkIGJ5IHNldHRpbmcgTURfU0JfQklUTUFQX1BSRVNFTlQKKyAqICAgICBpbiB0aGUgc3VwZXIgc3RhdHVzIGJ5dGUKKyAqID49MyBtZWFucyB0aGF0IGJpdG1hcCBzdXBlcmJsb2NrIHZlcnNpb24gNCBpcyBzdXBwb3J0ZWQsIHdoaWNoIHVzZXMKKyAqICAgICBsaXR0bGUtZW5kaW5nIHJlcHJlc2VudGF0aW9uIHJhdGhlciB0aGFuIGhvc3QtZW5kaWFuCisgKi8KKyNkZWZpbmUgTURfUEFUQ0hMRVZFTF9WRVJTSU9OICAgICAgICAgICAzCisKKy8qIGlvY3RscyAqLworCisvKiBzdGF0dXMgKi8KKyNkZWZpbmUgUkFJRF9WRVJTSU9OCQlfSU9SIChNRF9NQUpPUiwgMHgxMCwgbWR1X3ZlcnNpb25fdCkKKyNkZWZpbmUgR0VUX0FSUkFZX0lORk8JCV9JT1IgKE1EX01BSk9SLCAweDExLCBtZHVfYXJyYXlfaW5mb190KQorI2RlZmluZSBHRVRfRElTS19JTkZPCQlfSU9SIChNRF9NQUpPUiwgMHgxMiwgbWR1X2Rpc2tfaW5mb190KQorI2RlZmluZSBQUklOVF9SQUlEX0RFQlVHCV9JTyAoTURfTUFKT1IsIDB4MTMpCisjZGVmaW5lIFJBSURfQVVUT1JVTgkJX0lPIChNRF9NQUpPUiwgMHgxNCkKKyNkZWZpbmUgR0VUX0JJVE1BUF9GSUxFCQlfSU9SIChNRF9NQUpPUiwgMHgxNSwgbWR1X2JpdG1hcF9maWxlX3QpCisKKy8qIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgQ0xFQVJfQVJSQVkJCV9JTyAoTURfTUFKT1IsIDB4MjApCisjZGVmaW5lIEFERF9ORVdfRElTSwkJX0lPVyAoTURfTUFKT1IsIDB4MjEsIG1kdV9kaXNrX2luZm9fdCkKKyNkZWZpbmUgSE9UX1JFTU9WRV9ESVNLCQlfSU8gKE1EX01BSk9SLCAweDIyKQorI2RlZmluZSBTRVRfQVJSQVlfSU5GTwkJX0lPVyAoTURfTUFKT1IsIDB4MjMsIG1kdV9hcnJheV9pbmZvX3QpCisjZGVmaW5lIFNFVF9ESVNLX0lORk8JCV9JTyAoTURfTUFKT1IsIDB4MjQpCisjZGVmaW5lIFdSSVRFX1JBSURfSU5GTwkJX0lPIChNRF9NQUpPUiwgMHgyNSkKKyNkZWZpbmUgVU5QUk9URUNUX0FSUkFZCQlfSU8gKE1EX01BSk9SLCAweDI2KQorI2RlZmluZSBQUk9URUNUX0FSUkFZCQlfSU8gKE1EX01BSk9SLCAweDI3KQorI2RlZmluZSBIT1RfQUREX0RJU0sJCV9JTyAoTURfTUFKT1IsIDB4MjgpCisjZGVmaW5lIFNFVF9ESVNLX0ZBVUxUWQkJX0lPIChNRF9NQUpPUiwgMHgyOSkKKyNkZWZpbmUgSE9UX0dFTkVSQVRFX0VSUk9SCV9JTyAoTURfTUFKT1IsIDB4MmEpCisjZGVmaW5lIFNFVF9CSVRNQVBfRklMRQkJX0lPVyAoTURfTUFKT1IsIDB4MmIsIGludCkKKworLyogdXNhZ2UgKi8KKyNkZWZpbmUgUlVOX0FSUkFZCQlfSU9XIChNRF9NQUpPUiwgMHgzMCwgbWR1X3BhcmFtX3QpCisvKiAgMHgzMSB3YXMgU1RBUlRfQVJSQVkgICovCisjZGVmaW5lIFNUT1BfQVJSQVkJCV9JTyAoTURfTUFKT1IsIDB4MzIpCisjZGVmaW5lIFNUT1BfQVJSQVlfUk8JCV9JTyAoTURfTUFKT1IsIDB4MzMpCisjZGVmaW5lIFJFU1RBUlRfQVJSQVlfUlcJX0lPIChNRF9NQUpPUiwgMHgzNCkKKworLyogNjMgcGFydGl0aW9ucyB3aXRoIHRoZSBhbHRlcm5hdGUgbWFqb3IgbnVtYmVyIChtZHApICovCisjZGVmaW5lIE1kcE1pbm9yU2hpZnQgNgorCit0eXBlZGVmIHN0cnVjdCBtZHVfdmVyc2lvbl9zIHsKKwlpbnQgbWFqb3I7CisJaW50IG1pbm9yOworCWludCBwYXRjaGxldmVsOworfSBtZHVfdmVyc2lvbl90OworCit0eXBlZGVmIHN0cnVjdCBtZHVfYXJyYXlfaW5mb19zIHsKKwkvKgorCSAqIEdlbmVyaWMgY29uc3RhbnQgaW5mb3JtYXRpb24KKwkgKi8KKwlpbnQgbWFqb3JfdmVyc2lvbjsKKwlpbnQgbWlub3JfdmVyc2lvbjsKKwlpbnQgcGF0Y2hfdmVyc2lvbjsKKwlpbnQgY3RpbWU7CisJaW50IGxldmVsOworCWludCBzaXplOworCWludCBucl9kaXNrczsKKwlpbnQgcmFpZF9kaXNrczsKKwlpbnQgbWRfbWlub3I7CisJaW50IG5vdF9wZXJzaXN0ZW50OworCisJLyoKKwkgKiBHZW5lcmljIHN0YXRlIGluZm9ybWF0aW9uCisJICovCisJaW50IHV0aW1lOwkJLyogIDAgU3VwZXJibG9jayB1cGRhdGUgdGltZQkJICAgICAgKi8KKwlpbnQgc3RhdGU7CQkvKiAgMSBTdGF0ZSBiaXRzIChjbGVhbiwgLi4uKQkJICAgICAgKi8KKwlpbnQgYWN0aXZlX2Rpc2tzOwkvKiAgMiBOdW1iZXIgb2YgY3VycmVudGx5IGFjdGl2ZSBkaXNrcwkgICAgICAqLworCWludCB3b3JraW5nX2Rpc2tzOwkvKiAgMyBOdW1iZXIgb2Ygd29ya2luZyBkaXNrcwkJICAgICAgKi8KKwlpbnQgZmFpbGVkX2Rpc2tzOwkvKiAgNCBOdW1iZXIgb2YgZmFpbGVkIGRpc2tzCQkgICAgICAqLworCWludCBzcGFyZV9kaXNrczsJLyogIDUgTnVtYmVyIG9mIHNwYXJlIGRpc2tzCQkgICAgICAqLworCisJLyoKKwkgKiBQZXJzb25hbGl0eSBpbmZvcm1hdGlvbgorCSAqLworCWludCBsYXlvdXQ7CQkvKiAgMCB0aGUgYXJyYXkncyBwaHlzaWNhbCBsYXlvdXQJICAgICAgKi8KKwlpbnQgY2h1bmtfc2l6ZTsJLyogIDEgY2h1bmsgc2l6ZSBpbiBieXRlcwkJICAgICAgKi8KKworfSBtZHVfYXJyYXlfaW5mb190OworCisvKiBub24tb2J2aW91cyB2YWx1ZXMgZm9yICdsZXZlbCcgKi8KKyNkZWZpbmUJTEVWRUxfTVVMVElQQVRICQkoLTQpCisjZGVmaW5lCUxFVkVMX0xJTkVBUgkJKC0xKQorI2RlZmluZQlMRVZFTF9GQVVMVFkJCSgtNSkKKworLyogd2UgbmVlZCBhIHZhbHVlIGZvciAnbm8gbGV2ZWwgc3BlY2lmaWVkJyBhbmQgMAorICogbWVhbnMgJ3JhaWQwJywgc28gd2UgbmVlZCBzb21ldGhpbmcgZWxzZS4gIFRoaXMgaXMKKyAqIGZvciBpbnRlcm5hbCB1c2Ugb25seQorICovCisjZGVmaW5lCUxFVkVMX05PTkUJCSgtMTAwMDAwMCkKKwordHlwZWRlZiBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zIHsKKwkvKgorCSAqIGNvbmZpZ3VyYXRpb24vc3RhdHVzIG9mIG9uZSBwYXJ0aWN1bGFyIGRpc2sKKwkgKi8KKwlpbnQgbnVtYmVyOworCWludCBtYWpvcjsKKwlpbnQgbWlub3I7CisJaW50IHJhaWRfZGlzazsKKwlpbnQgc3RhdGU7CisKK30gbWR1X2Rpc2tfaW5mb190OworCit0eXBlZGVmIHN0cnVjdCBtZHVfc3RhcnRfaW5mb19zIHsKKwkvKgorCSAqIGNvbmZpZ3VyYXRpb24vc3RhdHVzIG9mIG9uZSBwYXJ0aWN1bGFyIGRpc2sKKwkgKi8KKwlpbnQgbWFqb3I7CisJaW50IG1pbm9yOworCWludCByYWlkX2Rpc2s7CisJaW50IHN0YXRlOworCit9IG1kdV9zdGFydF9pbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IG1kdV9iaXRtYXBfZmlsZV9zCit7CisJY2hhciBwYXRobmFtZVs0MDk2XTsKK30gbWR1X2JpdG1hcF9maWxlX3Q7CisKK3R5cGVkZWYgc3RydWN0IG1kdV9wYXJhbV9zCit7CisJaW50CQkJcGVyc29uYWxpdHk7CS8qIDEsMiwzLDQgKi8KKwlpbnQJCQljaHVua19zaXplOwkvKiBpbiBieXRlcyAqLworCWludAkJCW1heF9mYXVsdDsJLyogdW51c2VkIGZvciBub3cgKi8KK30gbWR1X3BhcmFtX3Q7CisKKyNlbmRpZiAKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3JhbmRvbS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3JhbmRvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZTY0NDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcmFuZG9tLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIGluY2x1ZGUvbGludXgvcmFuZG9tLmgKKyAqCisgKiBJbmNsdWRlIGZpbGUgZm9yIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9SQU5ET01fSAorI2RlZmluZSBfTElOVVhfUkFORE9NX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFuci5oPgorCisvKiBpb2N0bCgpJ3MgZm9yIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAqLworCisvKiBHZXQgdGhlIGVudHJvcHkgY291bnQuICovCisjZGVmaW5lIFJOREdFVEVOVENOVAlfSU9SKCAnUicsIDB4MDAsIGludCApCisKKy8qIEFkZCB0byAob3Igc3VidHJhY3QgZnJvbSkgdGhlIGVudHJvcHkgY291bnQuICAoU3VwZXJ1c2VyIG9ubHkuKSAqLworI2RlZmluZSBSTkRBRERUT0VOVENOVAlfSU9XKCAnUicsIDB4MDEsIGludCApCisKKy8qIEdldCB0aGUgY29udGVudHMgb2YgdGhlIGVudHJvcHkgcG9vbC4gIChTdXBlcnVzZXIgb25seS4pICovCisjZGVmaW5lIFJOREdFVFBPT0wJX0lPUiggJ1InLCAweDAyLCBpbnQgWzJdICkKKworLyogCisgKiBXcml0ZSBieXRlcyBpbnRvIHRoZSBlbnRyb3B5IHBvb2wgYW5kIGFkZCB0byB0aGUgZW50cm9weSBjb3VudC4KKyAqIChTdXBlcnVzZXIgb25seS4pCisgKi8KKyNkZWZpbmUgUk5EQURERU5UUk9QWQlfSU9XKCAnUicsIDB4MDMsIGludCBbMl0gKQorCisvKiBDbGVhciBlbnRyb3B5IGNvdW50IHRvIDAuICAoU3VwZXJ1c2VyIG9ubHkuKSAqLworI2RlZmluZSBSTkRaQVBFTlRDTlQJX0lPKCAnUicsIDB4MDQgKQorCisvKiBDbGVhciB0aGUgZW50cm9weSBwb29sIGFuZCBhc3NvY2lhdGVkIGNvdW50ZXJzLiAgKFN1cGVydXNlciBvbmx5LikgKi8KKyNkZWZpbmUgUk5EQ0xFQVJQT09MCV9JTyggJ1InLCAweDA2ICkKKworc3RydWN0IHJhbmRfcG9vbF9pbmZvIHsKKwlpbnQJZW50cm9weV9jb3VudDsKKwlpbnQJYnVmX3NpemU7CisJX191MzIJYnVmWzBdOworfTsKKworc3RydWN0IHJuZF9zdGF0ZSB7CisJX191MzIgczEsIHMyLCBzMzsKK307CisKKy8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAqLworCisKKyNlbmRpZiAvKiBfTElOVVhfUkFORE9NX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9yYXcuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9yYXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmQ1NDNlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3Jhdy5oCkBAIC0wLDAgKzEsMTggQEAKKyNpZm5kZWYgX19MSU5VWF9SQVdfSAorI2RlZmluZSBfX0xJTlVYX1JBV19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIFJBV19TRVRCSU5ECV9JTyggMHhhYywgMCApCisjZGVmaW5lIFJBV19HRVRCSU5ECV9JTyggMHhhYywgMSApCisKK3N0cnVjdCByYXdfY29uZmlnX3JlcXVlc3QgCit7CisJaW50CXJhd19taW5vcjsKKwlfX3U2NAlibG9ja19tYWpvcjsKKwlfX3U2NAlibG9ja19taW5vcjsKK307CisKKyNkZWZpbmUgTUFYX1JBV19NSU5PUlMgQ09ORklHX01BWF9SQVdfREVWUworCisjZW5kaWYgLyogX19MSU5VWF9SQVdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3Jkcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3Jkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxOTUwOTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcmRzLmgKQEAgLTAsMCArMSwyODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9SRFNfSAorI2RlZmluZSBfTElOVVhfUkRTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgUkRTX0lCX0FCSV9WRVJTSU9OCQkweDMwMQorCisvKgorICogc2V0c29ja29wdC9nZXRzb2Nrb3B0IGZvciBTT0xfUkRTCisgKi8KKyNkZWZpbmUgUkRTX0NBTkNFTF9TRU5UX1RPICAgICAgCTEKKyNkZWZpbmUgUkRTX0dFVF9NUgkJCTIKKyNkZWZpbmUgUkRTX0ZSRUVfTVIJCQkzCisvKiBkZXByZWNhdGVkOiBSRFNfQkFSUklFUiA0ICovCisjZGVmaW5lIFJEU19SRUNWRVJSCQkJNQorI2RlZmluZSBSRFNfQ09OR19NT05JVE9SCQk2CisjZGVmaW5lIFJEU19HRVRfTVJfRk9SX0RFU1QJCTcKKworLyoKKyAqIENvbnRyb2wgbWVzc2FnZSB0eXBlcyBmb3IgU09MX1JEUy4KKyAqCisgKiBDTVNHX1JETUFfQVJHUyAoc2VuZG1zZykKKyAqCVJlcXVlc3QgYSBSRE1BIHRyYW5zZmVyIHRvL2Zyb20gdGhlIHNwZWNpZmllZAorICoJbWVtb3J5IHJhbmdlcy4KKyAqCVRoZSBjbXNnX2RhdGEgaXMgYSBzdHJ1Y3QgcmRzX3JkbWFfYXJncy4KKyAqIFJEU19DTVNHX1JETUFfREVTVCAocmVjdm1zZywgc2VuZG1zZykKKyAqCUtlcm5lbCBpbmZvcm1zIGFwcGxpY2F0aW9uIGFib3V0IGludGVuZGVkCisgKglzb3VyY2UvZGVzdGluYXRpb24gb2YgYSBSRE1BIHRyYW5zZmVyCisgKiBSRFNfQ01TR19SRE1BX01BUCAoc2VuZG1zZykKKyAqCUFwcGxpY2F0aW9uIGFza3Mga2VybmVsIHRvIG1hcCB0aGUgZ2l2ZW4KKyAqCW1lbW9yeSByYW5nZSBpbnRvIGEgSUIgTVIsIGFuZCBzZW5kIHRoZQorICoJUl9LZXkgYWxvbmcgaW4gYW4gUkRTIGV4dGVuc2lvbiBoZWFkZXIuCisgKglUaGUgY21zZ19kYXRhIGlzIGEgc3RydWN0IHJkc19nZXRfbXJfYXJncywKKyAqCXRoZSBzYW1lIGFzIGZvciB0aGUgR0VUX01SIHNldHNvY2tvcHQuCisgKiBSRFNfQ01TR19SRE1BX1NUQVRVUyAocmVjdm1zZykKKyAqCVJldHVybnMgdGhlIHN0YXR1cyBvZiBhIGNvbXBsZXRlZCBSRE1BIG9wZXJhdGlvbi4KKyAqLworI2RlZmluZSBSRFNfQ01TR19SRE1BX0FSR1MJCTEKKyNkZWZpbmUgUkRTX0NNU0dfUkRNQV9ERVNUCQkyCisjZGVmaW5lIFJEU19DTVNHX1JETUFfTUFQCQkzCisjZGVmaW5lIFJEU19DTVNHX1JETUFfU1RBVFVTCQk0CisjZGVmaW5lIFJEU19DTVNHX0NPTkdfVVBEQVRFCQk1CisjZGVmaW5lIFJEU19DTVNHX0FUT01JQ19GQURECQk2CisjZGVmaW5lIFJEU19DTVNHX0FUT01JQ19DU1dQCQk3CisjZGVmaW5lIFJEU19DTVNHX01BU0tFRF9BVE9NSUNfRkFERAk4CisjZGVmaW5lIFJEU19DTVNHX01BU0tFRF9BVE9NSUNfQ1NXUAk5CisKKyNkZWZpbmUgUkRTX0lORk9fRklSU1QJCQkxMDAwMAorI2RlZmluZSBSRFNfSU5GT19DT1VOVEVSUwkJMTAwMDAKKyNkZWZpbmUgUkRTX0lORk9fQ09OTkVDVElPTlMJCTEwMDAxCisvKiAxMDAwMiBha2EgUkRTX0lORk9fRkxPV1MgaXMgZGVwcmVjYXRlZCAqLworI2RlZmluZSBSRFNfSU5GT19TRU5EX01FU1NBR0VTCQkxMDAwMworI2RlZmluZSBSRFNfSU5GT19SRVRSQU5TX01FU1NBR0VTICAgICAgIDEwMDA0CisjZGVmaW5lIFJEU19JTkZPX1JFQ1ZfTUVTU0FHRVMgICAgICAgICAgMTAwMDUKKyNkZWZpbmUgUkRTX0lORk9fU09DS0VUUyAgICAgICAgICAgICAgICAxMDAwNgorI2RlZmluZSBSRFNfSU5GT19UQ1BfU09DS0VUUyAgICAgICAgICAgIDEwMDA3CisjZGVmaW5lIFJEU19JTkZPX0lCX0NPTk5FQ1RJT05TCQkxMDAwOAorI2RlZmluZSBSRFNfSU5GT19DT05ORUNUSU9OX1NUQVRTCTEwMDA5CisjZGVmaW5lIFJEU19JTkZPX0lXQVJQX0NPTk5FQ1RJT05TCTEwMDEwCisjZGVmaW5lIFJEU19JTkZPX0xBU1QJCQkxMDAxMAorCitzdHJ1Y3QgcmRzX2luZm9fY291bnRlciB7CisJdWludDhfdAluYW1lWzMyXTsKKwl1aW50NjRfdAl2YWx1ZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgUkRTX0lORk9fQ09OTkVDVElPTl9GTEFHX1NFTkRJTkcJMHgwMQorI2RlZmluZSBSRFNfSU5GT19DT05ORUNUSU9OX0ZMQUdfQ09OTkVDVElORwkweDAyCisjZGVmaW5lIFJEU19JTkZPX0NPTk5FQ1RJT05fRkxBR19DT05ORUNURUQJMHgwNAorCisjZGVmaW5lIFRSQU5TTkFNU0laCTE2CisKK3N0cnVjdCByZHNfaW5mb19jb25uZWN0aW9uIHsKKwl1aW50NjRfdAluZXh0X3R4X3NlcTsKKwl1aW50NjRfdAluZXh0X3J4X3NlcTsKKwlfX2JlMzIJCWxhZGRyOworCV9fYmUzMgkJZmFkZHI7CisJdWludDhfdAl0cmFuc3BvcnRbVFJBTlNOQU1TSVpdOwkJLyogbnVsbCB0ZXJtIGFzY2lpICovCisJdWludDhfdAlmbGFnczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgUkRTX0lORk9fTUVTU0FHRV9GTEFHX0FDSyAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgUkRTX0lORk9fTUVTU0FHRV9GTEFHX0ZBU1RfQUNLICAgICAgICAgIDB4MDIKKworc3RydWN0IHJkc19pbmZvX21lc3NhZ2UgeworCXVpbnQ2NF90CXNlcTsKKwl1aW50MzJfdAlsZW47CisJX19iZTMyCQlsYWRkcjsKKwlfX2JlMzIJCWZhZGRyOworCV9fYmUxNgkJbHBvcnQ7CisJX19iZTE2CQlmcG9ydDsKKwl1aW50OF90CWZsYWdzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHJkc19pbmZvX3NvY2tldCB7CisJdWludDMyX3QJc25kYnVmOworCV9fYmUzMgkJYm91bmRfYWRkcjsKKwlfX2JlMzIJCWNvbm5lY3RlZF9hZGRyOworCV9fYmUxNgkJYm91bmRfcG9ydDsKKwlfX2JlMTYJCWNvbm5lY3RlZF9wb3J0OworCXVpbnQzMl90CXJjdmJ1ZjsKKwl1aW50NjRfdAlpbnVtOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHJkc19pbmZvX3RjcF9zb2NrZXQgeworCV9fYmUzMiAgICAgICAgICBsb2NhbF9hZGRyOworCV9fYmUxNiAgICAgICAgICBsb2NhbF9wb3J0OworCV9fYmUzMiAgICAgICAgICBwZWVyX2FkZHI7CisJX19iZTE2ICAgICAgICAgIHBlZXJfcG9ydDsKKwl1aW50NjRfdCAgICAgICBoZHJfcmVtOworCXVpbnQ2NF90ICAgICAgIGRhdGFfcmVtOworCXVpbnQzMl90ICAgICAgIGxhc3Rfc2VudF9ueHQ7CisJdWludDMyX3QgICAgICAgbGFzdF9leHBlY3RlZF91bmE7CisJdWludDMyX3QgICAgICAgbGFzdF9zZWVuX3VuYTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgUkRTX0lCX0dJRF9MRU4JMTYKK3N0cnVjdCByZHNfaW5mb19yZG1hX2Nvbm5lY3Rpb24geworCV9fYmUzMgkJc3JjX2FkZHI7CisJX19iZTMyCQlkc3RfYWRkcjsKKwl1aW50OF90CQlzcmNfZ2lkW1JEU19JQl9HSURfTEVOXTsKKwl1aW50OF90CQlkc3RfZ2lkW1JEU19JQl9HSURfTEVOXTsKKworCXVpbnQzMl90CW1heF9zZW5kX3dyOworCXVpbnQzMl90CW1heF9yZWN2X3dyOworCXVpbnQzMl90CW1heF9zZW5kX3NnZTsKKwl1aW50MzJfdAlyZG1hX21yX21heDsKKwl1aW50MzJfdAlyZG1hX21yX3NpemU7Cit9OworCisvKgorICogQ29uZ2VzdGlvbiBtb25pdG9yaW5nLgorICogQ29uZ2VzdGlvbiBjb250cm9sIGluIFJEUyBoYXBwZW5zIGF0IHRoZSBob3N0IGNvbm5lY3Rpb24KKyAqIGxldmVsIGJ5IGV4Y2hhbmdpbmcgYSBiaXRtYXAgbWFya2luZyBjb25nZXN0ZWQgcG9ydHMuCisgKiBCeSBkZWZhdWx0LCBhIHByb2Nlc3Mgc2xlZXBpbmcgaW4gcG9sbCgpIGlzIGFsd2F5cyB3b2tlbgorICogdXAgd2hlbiB0aGUgY29uZ2VzdGlvbiBtYXAgaXMgdXBkYXRlZC4KKyAqIFdpdGggZXhwbGljaXQgbW9uaXRvcmluZywgYW4gYXBwbGljYXRpb24gY2FuIGhhdmUgbW9yZQorICogZmluZS1ncmFpbmVkIGNvbnRyb2wuCisgKiBUaGUgYXBwbGljYXRpb24gaW5zdGFsbHMgYSA2NGJpdCBtYXNrIHZhbHVlIGluIHRoZSBzb2NrZXQsCisgKiB3aGVyZSBlYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGdyb3VwIG9mIHBvcnRzLgorICogV2hlbiBhIGNvbmdlc3Rpb24gdXBkYXRlIGFycml2ZXMsIFJEUyBjaGVja3MgdGhlIHNldCBvZgorICogcG9ydHMgdGhhdCBhcmUgbm93IHVuY29uZ2VzdGVkIGFnYWluc3QgdGhlIGxpc3QgYml0IG1hc2sKKyAqIGluc3RhbGxlZCBpbiB0aGUgc29ja2V0LCBhbmQgaWYgdGhleSBvdmVybGFwLCB3ZSBxdWV1ZSBhCisgKiBjb25nX25vdGlmaWNhdGlvbiBvbiB0aGUgc29ja2V0LgorICoKKyAqIFRvIGluc3RhbGwgdGhlIGNvbmdlc3Rpb24gbW9uaXRvciBiaXRtYXNrLCB1c2UgUkRTX0NPTkdfTU9OSVRPUgorICogd2l0aCB0aGUgNjRiaXQgbWFzay4KKyAqIENvbmdlc3Rpb24gdXBkYXRlcyBhcmUgcmVjZWl2ZWQgdmlhIFJEU19DTVNHX0NPTkdfVVBEQVRFCisgKiBjb250cm9sIG1lc3NhZ2VzLgorICoKKyAqIFRoZSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIGJpdHMgYW5kIHBvcnRzIGlzCisgKgkxIDw8IChwb3J0bnVtICUgNjQpCisgKi8KKyNkZWZpbmUgUkRTX0NPTkdfTU9OSVRPUl9TSVpFCTY0CisjZGVmaW5lIFJEU19DT05HX01PTklUT1JfQklUKHBvcnQpICAoKCh1bnNpZ25lZCBpbnQpIHBvcnQpICUgUkRTX0NPTkdfTU9OSVRPUl9TSVpFKQorI2RlZmluZSBSRFNfQ09OR19NT05JVE9SX01BU0socG9ydCkgKDFVTEwgPDwgUkRTX0NPTkdfTU9OSVRPUl9CSVQocG9ydCkpCisKKy8qCisgKiBSRE1BIHJlbGF0ZWQgdHlwZXMKKyAqLworCisvKgorICogVGhpcyBlbmNhcHN1bGF0ZXMgYSByZW1vdGUgbWVtb3J5IGxvY2F0aW9uLgorICogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIGl0IGNvbnRhaW5zIHRoZSBSX0tleQorICogb2YgdGhlIHJlbW90ZSBtZW1vcnkgcmVnaW9uLCBhbmQgdGhlIG9mZnNldCBpbnRvIGl0CisgKiAoc28gdGhhdCB0aGUgYXBwbGljYXRpb24gZG9lcyBub3QgaGF2ZSB0byB3b3JyeSBhYm91dAorICogYWxpZ25tZW50KS4KKyAqLwordHlwZWRlZiB1aW50NjRfdAlyZHNfcmRtYV9jb29raWVfdDsKKworc3RydWN0IHJkc19pb3ZlYyB7CisJdWludDY0X3QJYWRkcjsKKwl1aW50NjRfdAlieXRlczsKK307CisKK3N0cnVjdCByZHNfZ2V0X21yX2FyZ3MgeworCXN0cnVjdCByZHNfaW92ZWMgdmVjOworCXVpbnQ2NF90CWNvb2tpZV9hZGRyOworCXVpbnQ2NF90CWZsYWdzOworfTsKKworc3RydWN0IHJkc19nZXRfbXJfZm9yX2Rlc3RfYXJncyB7CisJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UJZGVzdF9hZGRyOworCXN0cnVjdCByZHNfaW92ZWMgCXZlYzsKKwl1aW50NjRfdAkJY29va2llX2FkZHI7CisJdWludDY0X3QJCWZsYWdzOworfTsKKworc3RydWN0IHJkc19mcmVlX21yX2FyZ3MgeworCXJkc19yZG1hX2Nvb2tpZV90IGNvb2tpZTsKKwl1aW50NjRfdAlmbGFnczsKK307CisKK3N0cnVjdCByZHNfcmRtYV9hcmdzIHsKKwlyZHNfcmRtYV9jb29raWVfdCBjb29raWU7CisJc3RydWN0IHJkc19pb3ZlYyByZW1vdGVfdmVjOworCXVpbnQ2NF90CWxvY2FsX3ZlY19hZGRyOworCXVpbnQ2NF90CW5yX2xvY2FsOworCXVpbnQ2NF90CWZsYWdzOworCXVpbnQ2NF90CXVzZXJfdG9rZW47Cit9OworCitzdHJ1Y3QgcmRzX2F0b21pY19hcmdzIHsKKwlyZHNfcmRtYV9jb29raWVfdCBjb29raWU7CisJdWludDY0X3QgCWxvY2FsX2FkZHI7CisJdWludDY0X3QgCXJlbW90ZV9hZGRyOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVpbnQ2NF90CWNvbXBhcmU7CisJCQl1aW50NjRfdAlzd2FwOworCQl9IGNzd3A7CisJCXN0cnVjdCB7CisJCQl1aW50NjRfdAlhZGQ7CisJCX0gZmFkZDsKKwkJc3RydWN0IHsKKwkJCXVpbnQ2NF90CWNvbXBhcmU7CisJCQl1aW50NjRfdAlzd2FwOworCQkJdWludDY0X3QJY29tcGFyZV9tYXNrOworCQkJdWludDY0X3QJc3dhcF9tYXNrOworCQl9IG1fY3N3cDsKKwkJc3RydWN0IHsKKwkJCXVpbnQ2NF90CWFkZDsKKwkJCXVpbnQ2NF90CW5vY2FycnlfbWFzazsKKwkJfSBtX2ZhZGQ7CisJfTsKKwl1aW50NjRfdAlmbGFnczsKKwl1aW50NjRfdAl1c2VyX3Rva2VuOworfTsKKworc3RydWN0IHJkc19yZG1hX25vdGlmeSB7CisJdWludDY0X3QJdXNlcl90b2tlbjsKKwlpbnQzMl90CQlzdGF0dXM7Cit9OworCisjZGVmaW5lIFJEU19SRE1BX1NVQ0NFU1MJMAorI2RlZmluZSBSRFNfUkRNQV9SRU1PVEVfRVJST1IJMQorI2RlZmluZSBSRFNfUkRNQV9DQU5DRUxFRAkyCisjZGVmaW5lIFJEU19SRE1BX0RST1BQRUQJMworI2RlZmluZSBSRFNfUkRNQV9PVEhFUl9FUlJPUgk0CisKKy8qCisgKiBDb21tb24gc2V0IG9mIGZsYWdzIGZvciBhbGwgUkRNQSByZWxhdGVkIHN0cnVjdHMKKyAqLworI2RlZmluZSBSRFNfUkRNQV9SRUFEV1JJVEUJMHgwMDAxCisjZGVmaW5lIFJEU19SRE1BX0ZFTkNFCQkweDAwMDIJLyogdXNlIEZFTkNFIGZvciBpbW1lZGlhdGUgc2VuZCAqLworI2RlZmluZSBSRFNfUkRNQV9JTlZBTElEQVRFCTB4MDAwNAkvKiBpbnZhbGlkYXRlIFJfS2V5IGFmdGVyIGZyZWVpbmcgTVIgKi8KKyNkZWZpbmUgUkRTX1JETUFfVVNFX09OQ0UJMHgwMDA4CS8qIGZyZWUgTVIgYWZ0ZXIgdXNlICovCisjZGVmaW5lIFJEU19SRE1BX0RPTlRXQUlUCTB4MDAxMAkvKiBEb24ndCB3YWl0IGluIFNFVF9CQVJSSUVSICovCisjZGVmaW5lIFJEU19SRE1BX05PVElGWV9NRQkweDAwMjAJLyogTm90aWZ5IHdoZW4gb3BlcmF0aW9uIGNvbXBsZXRlcyAqLworI2RlZmluZSBSRFNfUkRNQV9TSUxFTlQJCTB4MDA0MAkvKiBEbyBub3QgaW50ZXJydXB0IHJlbW90ZSAqLworCisjZW5kaWYgLyogSUJfUkRTX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9yZWJvb3QuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9yZWJvb3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTMzNjc0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3JlYm9vdC5oCkBAIC0wLDAgKzEsMzkgQEAKKyNpZm5kZWYgX0xJTlVYX1JFQk9PVF9ICisjZGVmaW5lIF9MSU5VWF9SRUJPT1RfSAorCisvKgorICogTWFnaWMgdmFsdWVzIHJlcXVpcmVkIHRvIHVzZSBfcmVib290KCkgc3lzdGVtIGNhbGwuCisgKi8KKworI2RlZmluZQlMSU5VWF9SRUJPT1RfTUFHSUMxCTB4ZmVlMWRlYWQKKyNkZWZpbmUJTElOVVhfUkVCT09UX01BR0lDMgk2NzIyNzQ3OTMKKyNkZWZpbmUJTElOVVhfUkVCT09UX01BR0lDMkEJODUwNzIyNzgKKyNkZWZpbmUJTElOVVhfUkVCT09UX01BR0lDMkIJMzY5MzY3NDQ4CisjZGVmaW5lCUxJTlVYX1JFQk9PVF9NQUdJQzJDCTUzNzk5MzIxNgorCisKKy8qCisgKiBDb21tYW5kcyBhY2NlcHRlZCBieSB0aGUgX3JlYm9vdCgpIHN5c3RlbSBjYWxsLgorICoKKyAqIFJFU1RBUlQgICAgIFJlc3RhcnQgc3lzdGVtIHVzaW5nIGRlZmF1bHQgY29tbWFuZCBhbmQgbW9kZS4KKyAqIEhBTFQgICAgICAgIFN0b3AgT1MgYW5kIGdpdmUgc3lzdGVtIGNvbnRyb2wgdG8gUk9NIG1vbml0b3IsIGlmIGFueS4KKyAqIENBRF9PTiAgICAgIEN0cmwtQWx0LURlbCBzZXF1ZW5jZSBjYXVzZXMgUkVTVEFSVCBjb21tYW5kLgorICogQ0FEX09GRiAgICAgQ3RybC1BbHQtRGVsIHNlcXVlbmNlIHNlbmRzIFNJR0lOVCB0byBpbml0IHRhc2suCisgKiBQT1dFUl9PRkYgICBTdG9wIE9TIGFuZCByZW1vdmUgYWxsIHBvd2VyIGZyb20gc3lzdGVtLCBpZiBwb3NzaWJsZS4KKyAqIFJFU1RBUlQyICAgIFJlc3RhcnQgc3lzdGVtIHVzaW5nIGdpdmVuIGNvbW1hbmQgc3RyaW5nLgorICogU1dfU1VTUEVORCAgU3VzcGVuZCBzeXN0ZW0gdXNpbmcgc29mdHdhcmUgc3VzcGVuZCBpZiBjb21waWxlZCBpbi4KKyAqIEtFWEVDICAgICAgIFJlc3RhcnQgc3lzdGVtIHVzaW5nIGEgcHJldmlvdXNseSBsb2FkZWQgTGludXgga2VybmVsCisgKi8KKworI2RlZmluZQlMSU5VWF9SRUJPT1RfQ01EX1JFU1RBUlQJMHgwMTIzNDU2NworI2RlZmluZQlMSU5VWF9SRUJPT1RfQ01EX0hBTFQJCTB4Q0RFRjAxMjMKKyNkZWZpbmUJTElOVVhfUkVCT09UX0NNRF9DQURfT04JCTB4ODlBQkNERUYKKyNkZWZpbmUJTElOVVhfUkVCT09UX0NNRF9DQURfT0ZGCTB4MDAwMDAwMDAKKyNkZWZpbmUJTElOVVhfUkVCT09UX0NNRF9QT1dFUl9PRkYJMHg0MzIxRkVEQworI2RlZmluZQlMSU5VWF9SRUJPT1RfQ01EX1JFU1RBUlQyCTB4QTFCMkMzRDQKKyNkZWZpbmUJTElOVVhfUkVCT09UX0NNRF9TV19TVVNQRU5ECTB4RDAwMEZDRTIKKyNkZWZpbmUJTElOVVhfUkVCT09UX0NNRF9LRVhFQwkJMHg0NTU4NDU0MworCisKKworI2VuZGlmIC8qIF9MSU5VWF9SRUJPT1RfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2EyMjUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk2LCAxOTk3LCAxOTk4IEhhbnMgUmVpc2VyLCBzZWUgcmVpc2VyZnMvUkVBRE1FIGZvciBsaWNlbnNpbmcgYW5kIGNvcHlyaWdodCBkZXRhaWxzCisgKi8KKworCQkJCS8qIHRoaXMgZmlsZSBoYXMgYW4gYW1hemluZ2x5IHN0dXBpZAorCQkJCSAgIG5hbWUsIHl1cmEgcGxlYXNlIGZpeCBpdCB0byBiZQorCQkJCSAgIHJlaXNlcmZzLmgsIGFuZCBtZXJnZSBhbGwgdGhlIHJlc3QKKwkJCQkgICBvZiBvdXIgLmggZmlsZXMgdGhhdCBhcmUgaW4gdGhpcworCQkJCSAgIGRpcmVjdG9yeSBpbnRvIGl0LiAgKi8KKworI2lmbmRlZiBfTElOVVhfUkVJU0VSX0ZTX0gKKyNkZWZpbmUgX0xJTlVYX1JFSVNFUl9GU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CisKKworLyoKKyAqICBpbmNsdWRlL2xpbnV4L3JlaXNlcl9mcy5oCisgKgorICogIFJlaXNlciBGaWxlIFN5c3RlbSBjb25zdGFudHMgYW5kIHN0cnVjdHVyZXMKKyAqCisgKi8KKworLyogaW9jdGwncyBjb21tYW5kICovCisjZGVmaW5lIFJFSVNFUkZTX0lPQ19VTlBBQ0sJCV9JT1coMHhDRCwxLGxvbmcpCisvKiBkZWZpbmUgZm9sbG93aW5nIGZsYWdzIHRvIGJlIHRoZSBzYW1lIGFzIGluIGV4dDIsIHNvIHRoYXQgY2hhdHRyKDEpLAorICAgbHNhdHRyKDEpIHdpbGwgd29yayB3aXRoIHVzLiAqLworI2RlZmluZSBSRUlTRVJGU19JT0NfR0VURkxBR1MJCUZTX0lPQ19HRVRGTEFHUworI2RlZmluZSBSRUlTRVJGU19JT0NfU0VURkxBR1MJCUZTX0lPQ19TRVRGTEFHUworI2RlZmluZSBSRUlTRVJGU19JT0NfR0VUVkVSU0lPTgkJRlNfSU9DX0dFVFZFUlNJT04KKyNkZWZpbmUgUkVJU0VSRlNfSU9DX1NFVFZFUlNJT04JCUZTX0lPQ19TRVRWRVJTSU9OCisKKworI2VuZGlmCQkJCS8qIF9MSU5VWF9SRUlTRVJfRlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX3hhdHRyLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfeGF0dHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGZmZjJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX3hhdHRyLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAgRmlsZTogbGludXgvcmVpc2VyZnNfeGF0dHIuaAorKi8KKworI2lmbmRlZiBfTElOVVhfUkVJU0VSRlNfWEFUVFJfSAorI2RlZmluZSBfTElOVVhfUkVJU0VSRlNfWEFUVFJfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogTWFnaWMgdmFsdWUgaW4gaGVhZGVyICovCisjZGVmaW5lIFJFSVNFUkZTX1hBVFRSX01BR0lDIDB4NTI0NjU4NDEJLyogIlJGWEEiICovCisKK3N0cnVjdCByZWlzZXJmc194YXR0cl9oZWFkZXIgeworCV9fbGUzMiBoX21hZ2ljOwkJLyogbWFnaWMgbnVtYmVyIGZvciBpZGVudGlmaWNhdGlvbiAqLworCV9fbGUzMiBoX2hhc2g7CQkvKiBoYXNoIG9mIHRoZSB2YWx1ZSAqLworfTsKKworc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZSB7CisJY2hhciAqbmFtZTsKKwl2b2lkICp2YWx1ZTsKKwlzaXplX3QgbGVuZ3RoOworfTsKKworCisjZW5kaWYgIC8qICBfTElOVVhfUkVJU0VSRlNfWEFUVFJfSCAgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9yZXNvdXJjZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3Jlc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2ZWYyMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9yZXNvdXJjZS5oCkBAIC0wLDAgKzEsODAgQEAKKyNpZm5kZWYgX0xJTlVYX1JFU09VUkNFX0gKKyNkZWZpbmUgX0xJTlVYX1JFU09VUkNFX0gKKworI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICogUmVzb3VyY2UgY29udHJvbC9hY2NvdW50aW5nIGhlYWRlciBmaWxlIGZvciBsaW51eAorICovCisKKy8qCisgKiBEZWZpbml0aW9uIG9mIHN0cnVjdCBydXNhZ2UgdGFrZW4gZnJvbSBCU0QgNC4zIFJlbm8KKyAqIAorICogV2UgZG9uJ3Qgc3VwcG9ydCBhbGwgb2YgdGhlc2UgeWV0LCBidXQgd2UgbWlnaHQgYXMgd2VsbCBoYXZlIHRoZW0uLi4uCisgKiBPdGhlcndpc2UsIGVhY2ggdGltZSB3ZSBhZGQgbmV3IGl0ZW1zLCBwcm9ncmFtcyB3aGljaCBkZXBlbmQgb24gdGhpcworICogc3RydWN0dXJlIHdpbGwgbG9zZS4gIFRoaXMgcmVkdWNlcyB0aGUgY2hhbmNlcyBvZiB0aGF0IGhhcHBlbmluZy4KKyAqLworI2RlZmluZQlSVVNBR0VfU0VMRgkwCisjZGVmaW5lCVJVU0FHRV9DSElMRFJFTgkoLTEpCisjZGVmaW5lIFJVU0FHRV9CT1RICSgtMikJCS8qIHN5c193YWl0NCgpIHVzZXMgdGhpcyAqLworI2RlZmluZQlSVVNBR0VfVEhSRUFECTEJCS8qIG9ubHkgdGhlIGNhbGxpbmcgdGhyZWFkICovCisKK3N0cnVjdAlydXNhZ2UgeworCXN0cnVjdCB0aW1ldmFsIHJ1X3V0aW1lOwkvKiB1c2VyIHRpbWUgdXNlZCAqLworCXN0cnVjdCB0aW1ldmFsIHJ1X3N0aW1lOwkvKiBzeXN0ZW0gdGltZSB1c2VkICovCisJbG9uZwlydV9tYXhyc3M7CQkvKiBtYXhpbXVtIHJlc2lkZW50IHNldCBzaXplICovCisJbG9uZwlydV9peHJzczsJCS8qIGludGVncmFsIHNoYXJlZCBtZW1vcnkgc2l6ZSAqLworCWxvbmcJcnVfaWRyc3M7CQkvKiBpbnRlZ3JhbCB1bnNoYXJlZCBkYXRhIHNpemUgKi8KKwlsb25nCXJ1X2lzcnNzOwkJLyogaW50ZWdyYWwgdW5zaGFyZWQgc3RhY2sgc2l6ZSAqLworCWxvbmcJcnVfbWluZmx0OwkJLyogcGFnZSByZWNsYWltcyAqLworCWxvbmcJcnVfbWFqZmx0OwkJLyogcGFnZSBmYXVsdHMgKi8KKwlsb25nCXJ1X25zd2FwOwkJLyogc3dhcHMgKi8KKwlsb25nCXJ1X2luYmxvY2s7CQkvKiBibG9jayBpbnB1dCBvcGVyYXRpb25zICovCisJbG9uZwlydV9vdWJsb2NrOwkJLyogYmxvY2sgb3V0cHV0IG9wZXJhdGlvbnMgKi8KKwlsb25nCXJ1X21zZ3NuZDsJCS8qIG1lc3NhZ2VzIHNlbnQgKi8KKwlsb25nCXJ1X21zZ3JjdjsJCS8qIG1lc3NhZ2VzIHJlY2VpdmVkICovCisJbG9uZwlydV9uc2lnbmFsczsJCS8qIHNpZ25hbHMgcmVjZWl2ZWQgKi8KKwlsb25nCXJ1X252Y3N3OwkJLyogdm9sdW50YXJ5IGNvbnRleHQgc3dpdGNoZXMgKi8KKwlsb25nCXJ1X25pdmNzdzsJCS8qIGludm9sdW50YXJ5ICIgKi8KK307CisKK3N0cnVjdCBybGltaXQgeworCXVuc2lnbmVkIGxvbmcJcmxpbV9jdXI7CisJdW5zaWduZWQgbG9uZwlybGltX21heDsKK307CisKKyNkZWZpbmUgUkxJTTY0X0lORklOSVRZCQkofjBVTEwpCisKK3N0cnVjdCBybGltaXQ2NCB7CisJX191NjQgcmxpbV9jdXI7CisJX191NjQgcmxpbV9tYXg7Cit9OworCisjZGVmaW5lCVBSSU9fTUlOCSgtMjApCisjZGVmaW5lCVBSSU9fTUFYCTIwCisKKyNkZWZpbmUJUFJJT19QUk9DRVNTCTAKKyNkZWZpbmUJUFJJT19QR1JQCTEKKyNkZWZpbmUJUFJJT19VU0VSCTIKKworLyoKKyAqIExpbWl0IHRoZSBzdGFjayBieSB0byBzb21lIHNhbmUgZGVmYXVsdDogcm9vdCBjYW4gYWx3YXlzCisgKiBpbmNyZWFzZSB0aGlzIGxpbWl0IGlmIG5lZWRlZC4uICA4TUIgc2VlbXMgcmVhc29uYWJsZS4KKyAqLworI2RlZmluZSBfU1RLX0xJTQkoOCoxMDI0KjEwMjQpCisKKy8qCisgKiBHUEcyIHdhbnRzIDY0a0Igb2YgbWxvY2tlZCBtZW1vcnksIHRvIG1ha2Ugc3VyZSBwYXNzIHBocmFzZXMKKyAqIGFuZCBvdGhlciBzZW5zaXRpdmUgaW5mb3JtYXRpb24gYXJlIG5ldmVyIHdyaXR0ZW4gdG8gZGlzay4KKyAqLworI2RlZmluZSBNTE9DS19MSU1JVAkoKFBBR0VfU0laRSA+IDY0KjEwMjQpID8gUEFHRV9TSVpFIDogNjQqMTAyNCkKKworLyoKKyAqIER1ZSB0byBiaW5hcnkgY29tcGF0aWJpbGl0eSwgdGhlIGFjdHVhbCByZXNvdXJjZSBudW1iZXJzCisgKiBtYXkgYmUgZGlmZmVyZW50IGZvciBkaWZmZXJlbnQgbGludXggdmVyc2lvbnMuLgorICovCisjaW5jbHVkZSA8YXNtL3Jlc291cmNlLmg+CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcmZraWxsLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcmZraWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJiMmM2NgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9yZmtpbGwuaApAQCAtMCwwICsxLDEwNyBAQAorI2lmbmRlZiBfX1JGS0lMTF9ICisjZGVmaW5lIF9fUkZLSUxMX0gKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiAtIDIwMDcgSXZvIHZhbiBEb29ybgorICogQ29weXJpZ2h0IChDKSAyMDA3IERtaXRyeSBUb3Jva2hvdgorICogQ29weXJpZ2h0IDIwMDkgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogZGVmaW5lIHVzZXJzcGFjZSB2aXNpYmxlIHN0YXRlcyAqLworI2RlZmluZSBSRktJTExfU1RBVEVfU09GVF9CTE9DS0VECTAKKyNkZWZpbmUgUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRAkJMQorI2RlZmluZSBSRktJTExfU1RBVEVfSEFSRF9CTE9DS0VECTIKKworLyoqCisgKiBlbnVtIHJma2lsbF90eXBlIC0gdHlwZSBvZiByZmtpbGwgc3dpdGNoLgorICoKKyAqIEBSRktJTExfVFlQRV9BTEw6IHRvZ2dsZXMgYWxsIHN3aXRjaGVzIChyZXF1ZXN0cyBvbmx5IC0gbm90IGEgc3dpdGNoIHR5cGUpCisgKiBAUkZLSUxMX1RZUEVfV0xBTjogc3dpdGNoIGlzIG9uIGEgODAyLjExIHdpcmVsZXNzIG5ldHdvcmsgZGV2aWNlLgorICogQFJGS0lMTF9UWVBFX0JMVUVUT09USDogc3dpdGNoIGlzIG9uIGEgYmx1ZXRvb3RoIGRldmljZS4KKyAqIEBSRktJTExfVFlQRV9VV0I6IHN3aXRjaCBpcyBvbiBhIHVsdHJhIHdpZGViYW5kIGRldmljZS4KKyAqIEBSRktJTExfVFlQRV9XSU1BWDogc3dpdGNoIGlzIG9uIGEgV2lNQVggZGV2aWNlLgorICogQFJGS0lMTF9UWVBFX1dXQU46IHN3aXRjaCBpcyBvbiBhIHdpcmVsZXNzIFdBTiBkZXZpY2UuCisgKiBAUkZLSUxMX1RZUEVfR1BTOiBzd2l0Y2ggaXMgb24gYSBHUFMgZGV2aWNlLgorICogQFJGS0lMTF9UWVBFX0ZNOiBzd2l0Y2ggaXMgb24gYSBGTSByYWRpbyBkZXZpY2UuCisgKiBATlVNX1JGS0lMTF9UWVBFUzogbnVtYmVyIG9mIGRlZmluZWQgcmZraWxsIHR5cGVzCisgKi8KK2VudW0gcmZraWxsX3R5cGUgeworCVJGS0lMTF9UWVBFX0FMTCA9IDAsCisJUkZLSUxMX1RZUEVfV0xBTiwKKwlSRktJTExfVFlQRV9CTFVFVE9PVEgsCisJUkZLSUxMX1RZUEVfVVdCLAorCVJGS0lMTF9UWVBFX1dJTUFYLAorCVJGS0lMTF9UWVBFX1dXQU4sCisJUkZLSUxMX1RZUEVfR1BTLAorCVJGS0lMTF9UWVBFX0ZNLAorCU5VTV9SRktJTExfVFlQRVMsCit9OworCisvKioKKyAqIGVudW0gcmZraWxsX29wZXJhdGlvbiAtIG9wZXJhdGlvbiB0eXBlcworICogQFJGS0lMTF9PUF9BREQ6IGEgZGV2aWNlIHdhcyBhZGRlZAorICogQFJGS0lMTF9PUF9ERUw6IGEgZGV2aWNlIHdhcyByZW1vdmVkCisgKiBAUkZLSUxMX09QX0NIQU5HRTogYSBkZXZpY2UncyBzdGF0ZSBjaGFuZ2VkIC0tIHVzZXJzcGFjZSBjaGFuZ2VzIG9uZSBkZXZpY2UKKyAqIEBSRktJTExfT1BfQ0hBTkdFX0FMTDogdXNlcnNwYWNlIGNoYW5nZXMgYWxsIGRldmljZXMgKG9mIGEgdHlwZSwgb3IgYWxsKQorICovCitlbnVtIHJma2lsbF9vcGVyYXRpb24geworCVJGS0lMTF9PUF9BREQgPSAwLAorCVJGS0lMTF9PUF9ERUwsCisJUkZLSUxMX09QX0NIQU5HRSwKKwlSRktJTExfT1BfQ0hBTkdFX0FMTCwKK307CisKKy8qKgorICogc3RydWN0IHJma2lsbF9ldmVudCAtIGV2ZW50cyBmb3IgdXNlcnNwYWNlIG9uIC9kZXYvcmZraWxsCisgKiBAaWR4OiBpbmRleCBvZiBkZXYgcmZraWxsCisgKiBAdHlwZTogdHlwZSBvZiB0aGUgcmZraWxsIHN0cnVjdAorICogQG9wOiBvcGVyYXRpb24gY29kZQorICogQGhhcmQ6IGhhcmQgc3RhdGUgKDAvMSkKKyAqIEBzb2Z0OiBzb2Z0IHN0YXRlICgwLzEpCisgKgorICogU3RydWN0dXJlIHVzZWQgZm9yIHVzZXJzcGFjZSBjb21tdW5pY2F0aW9uIG9uIC9kZXYvcmZraWxsLAorICogdXNlZCBmb3IgZXZlbnRzIGZyb20gdGhlIGtlcm5lbCBhbmQgY29udHJvbCB0byB0aGUga2VybmVsLgorICovCitzdHJ1Y3QgcmZraWxsX2V2ZW50IHsKKwlfX3UzMiBpZHg7CisJX191OCAgdHlwZTsKKwlfX3U4ICBvcDsKKwlfX3U4ICBzb2Z0LCBoYXJkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoKKyAqIFdlIGFyZSBwbGFubmluZyB0byBiZSBiYWNrd2FyZCBhbmQgZm9yd2FyZCBjb21wYXRpYmxlIHdpdGggY2hhbmdlcworICogdG8gdGhlIGV2ZW50IHN0cnVjdCwgYnkgYWRkaW5nIG5ldywgb3B0aW9uYWwsIG1lbWJlcnMgYXQgdGhlIGVuZC4KKyAqIFdoZW4gcmVhZGluZyBhbiBldmVudCAod2hldGhlciB0aGUga2VybmVsIGZyb20gdXNlcnNwYWNlIG9yIHZpY2UKKyAqIHZlcnNhKSB3ZSBuZWVkIHRvIGFjY2VwdCBhbnl0aGluZyB0aGF0J3MgYXQgbGVhc3QgYXMgbGFyZ2UgYXMgdGhlCisgKiB2ZXJzaW9uIDEgZXZlbnQgc2l6ZSwgYnV0IG1pZ2h0IGJlIGFibGUgdG8gYWNjZXB0IG90aGVyIHNpemVzIGluCisgKiB0aGUgZnV0dXJlLgorICoKKyAqIE9uZSBleGNlcHRpb24gaXMgdGhlIGtlcm5lbCAtLSB3ZSBhbHJlYWR5IGhhdmUgdHdvIGV2ZW50IHNpemVzIGluCisgKiB0aGF0IHdlJ3ZlIG1hZGUgdGhlICdoYXJkJyBtZW1iZXIgb3B0aW9uYWwgc2luY2Ugb3VyIG9ubHkgb3B0aW9uCisgKiBpcyB0byBpZ25vcmUgaXQgYW55d2F5LgorICovCisjZGVmaW5lIFJGS0lMTF9FVkVOVF9TSVpFX1YxCTgKKworLyogaW9jdGwgZm9yIHR1cm5pbmcgb2ZmIHJma2lsbC1pbnB1dCAoaWYgcHJlc2VudCkgKi8KKyNkZWZpbmUgUkZLSUxMX0lPQ19NQUdJQwknUicKKyNkZWZpbmUgUkZLSUxMX0lPQ19OT0lOUFVUCTEKKyNkZWZpbmUgUkZLSUxMX0lPQ1RMX05PSU5QVVQJX0lPKFJGS0lMTF9JT0NfTUFHSUMsIFJGS0lMTF9JT0NfTk9JTlBVVCkKKworLyogYW5kIHRoYXQncyBhbGwgdXNlcnNwYWNlIGdldHMgKi8KKworI2VuZGlmIC8qIFJGS0lMTF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcm9tZnNfZnMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9yb21mc19mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OTBmYmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcm9tZnNfZnMuaApAQCAtMCwwICsxLDU2IEBACisjaWZuZGVmIF9fTElOVVhfUk9NRlNfRlNfSAorI2RlZmluZSBfX0xJTlVYX1JPTUZTX0ZTX0gKKworLyogVGhlIGJhc2ljIHN0cnVjdHVyZXMgb2YgdGhlIHJvbWZzIGZpbGVzeXN0ZW0gKi8KKworI2RlZmluZSBST01CU0laRSBCTE9DS19TSVpFCisjZGVmaW5lIFJPTUJTQklUUyBCTE9DS19TSVpFX0JJVFMKKyNkZWZpbmUgUk9NQk1BU0sgKFJPTUJTSVpFLTEpCisjZGVmaW5lIFJPTUZTX01BR0lDIDB4NzI3NQorCisjZGVmaW5lIFJPTUZTX01BWEZOIDEyOAorCisjZGVmaW5lIF9fbWt3KGgsbCkgKCgoaCkmMHgwMGZmKTw8IDh8KChsKSYweDAwZmYpKQorI2RlZmluZSBfX21rbChoLGwpICgoKGgpJjB4ZmZmZik8PDE2fCgobCkmMHhmZmZmKSkKKyNkZWZpbmUgX19tazQoYSxiLGMsZCkgY3B1X3RvX2JlMzIoX19ta2woX19ta3coYSxiKSxfX21rdyhjLGQpKSkKKyNkZWZpbmUgUk9NU0JfV09SRDAgX19tazQoJy0nLCdyJywnbycsJ20nKQorI2RlZmluZSBST01TQl9XT1JEMSBfX21rNCgnMScsJ2YnLCdzJywnLScpCisKKy8qIE9uLWRpc2sgInN1cGVyIGJsb2NrIiAqLworCitzdHJ1Y3Qgcm9tZnNfc3VwZXJfYmxvY2sgeworCV9fYmUzMiB3b3JkMDsKKwlfX2JlMzIgd29yZDE7CisJX19iZTMyIHNpemU7CisJX19iZTMyIGNoZWNrc3VtOworCWNoYXIgbmFtZVswXTsJCS8qIHZvbHVtZSBuYW1lICovCit9OworCisvKiBPbiBkaXNrIGlub2RlICovCisKK3N0cnVjdCByb21mc19pbm9kZSB7CisJX19iZTMyIG5leHQ7CQkvKiBsb3cgNCBiaXRzIHNlZSBST01GSF8gKi8KKwlfX2JlMzIgc3BlYzsKKwlfX2JlMzIgc2l6ZTsKKwlfX2JlMzIgY2hlY2tzdW07CisJY2hhciBuYW1lWzBdOworfTsKKworI2RlZmluZSBST01GSF9UWVBFIDcKKyNkZWZpbmUgUk9NRkhfSFJEIDAKKyNkZWZpbmUgUk9NRkhfRElSIDEKKyNkZWZpbmUgUk9NRkhfUkVHIDIKKyNkZWZpbmUgUk9NRkhfU1lNIDMKKyNkZWZpbmUgUk9NRkhfQkxLIDQKKyNkZWZpbmUgUk9NRkhfQ0hSIDUKKyNkZWZpbmUgUk9NRkhfU0NLIDYKKyNkZWZpbmUgUk9NRkhfRklGIDcKKyNkZWZpbmUgUk9NRkhfRVhFQyA4CisKKy8qIEFsaWdubWVudCAqLworCisjZGVmaW5lIFJPTUZIX1NJWkUgMTYKKyNkZWZpbmUgUk9NRkhfUEFEIChST01GSF9TSVpFLTEpCisjZGVmaW5lIFJPTUZIX01BU0sgKH5ST01GSF9QQUQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3Jvc2UuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9yb3NlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdiNGIxOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9yb3NlLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIFRoZXNlIGFyZSB0aGUgcHVibGljIGVsZW1lbnRzIG9mIHRoZSBMaW51eCBrZXJuZWwgUm9zZSBpbXBsZW1lbnRhdGlvbi4KKyAqIEZvciBrZXJuZWwgQVguMjUgc2VlIHRoZSBmaWxlIGF4MjUuaC4gVGhpcyBmaWxlIHJlcXVpcmVzIGF4MjUuaCBmb3IgdGhlCisgKiBkZWZpbml0aW9uIG9mIHRoZSBheDI1X2FkZHJlc3Mgc3RydWN0dXJlLgorICovCisKKyNpZm5kZWYJUk9TRV9LRVJORUxfSAorI2RlZmluZQlST1NFX0tFUk5FTF9ICisKKyNkZWZpbmUgUk9TRV9NVFUJMjUxCisKKyNkZWZpbmUgUk9TRV9NQVhfRElHSVMgNgorCisjZGVmaW5lCVJPU0VfREVGRVIJMQorI2RlZmluZSBST1NFX1QxCQkyCisjZGVmaW5lCVJPU0VfVDIJCTMKKyNkZWZpbmUJUk9TRV9UMwkJNAorI2RlZmluZQlST1NFX0lETEUJNQorI2RlZmluZQlST1NFX1FCSVRJTkNMCTYKKyNkZWZpbmUJUk9TRV9IT0xEQkFDSwk3CisKKyNkZWZpbmUJU0lPQ1JTR0NBVVNFCQkoU0lPQ1BST1RPUFJJVkFURSswKQorI2RlZmluZQlTSU9DUlNTQ0FVU0UJCShTSU9DUFJPVE9QUklWQVRFKzEpCisjZGVmaW5lCVNJT0NSU0wyQ0FMTAkJKFNJT0NQUk9UT1BSSVZBVEUrMikKKyNkZWZpbmUJU0lPQ1JTU0wyQ0FMTAkJKFNJT0NQUk9UT1BSSVZBVEUrMikKKyNkZWZpbmUJU0lPQ1JTQUNDRVBUCQkoU0lPQ1BST1RPUFJJVkFURSszKQorI2RlZmluZQlTSU9DUlNDTFJSVAkJKFNJT0NQUk9UT1BSSVZBVEUrNCkKKyNkZWZpbmUJU0lPQ1JTR0wyQ0FMTAkJKFNJT0NQUk9UT1BSSVZBVEUrNSkKKyNkZWZpbmUJU0lPQ1JTR0ZBQ0lMSVRJRVMJKFNJT0NQUk9UT1BSSVZBVEUrNikKKworI2RlZmluZQlST1NFX0RURV9PUklHSU5BVEVECTB4MDAKKyNkZWZpbmUJUk9TRV9OVU1CRVJfQlVTWQkweDAxCisjZGVmaW5lCVJPU0VfSU5WQUxJRF9GQUNJTElUWQkweDAzCisjZGVmaW5lCVJPU0VfTkVUV09SS19DT05HRVNUSU9OCTB4MDUKKyNkZWZpbmUJUk9TRV9PVVRfT0ZfT1JERVIJMHgwOQorI2RlZmluZQlST1NFX0FDQ0VTU19CQVJSRUQJMHgwQgorI2RlZmluZQlST1NFX05PVF9PQlRBSU5BQkxFCTB4MEQKKyNkZWZpbmUJUk9TRV9SRU1PVEVfUFJPQ0VEVVJFCTB4MTEKKyNkZWZpbmUJUk9TRV9MT0NBTF9QUk9DRURVUkUJMHgxMworI2RlZmluZQlST1NFX1NISVBfQUJTRU5UCTB4MzkKKwordHlwZWRlZiBzdHJ1Y3QgeworCWNoYXIJCXJvc2VfYWRkcls1XTsKK30gcm9zZV9hZGRyZXNzOworCitzdHJ1Y3Qgc29ja2FkZHJfcm9zZSB7CisJc2FfZmFtaWx5X3QJc3Jvc2VfZmFtaWx5OworCXJvc2VfYWRkcmVzcwlzcm9zZV9hZGRyOworCWF4MjVfYWRkcmVzcwlzcm9zZV9jYWxsOworCWludAkJc3Jvc2VfbmRpZ2lzOworCWF4MjVfYWRkcmVzcwlzcm9zZV9kaWdpOworfTsKKworc3RydWN0IGZ1bGxfc29ja2FkZHJfcm9zZSB7CisJc2FfZmFtaWx5X3QJc3Jvc2VfZmFtaWx5OworCXJvc2VfYWRkcmVzcwlzcm9zZV9hZGRyOworCWF4MjVfYWRkcmVzcwlzcm9zZV9jYWxsOworCXVuc2lnbmVkIGludAlzcm9zZV9uZGlnaXM7CisJYXgyNV9hZGRyZXNzCXNyb3NlX2RpZ2lzW1JPU0VfTUFYX0RJR0lTXTsKK307CisKK3N0cnVjdCByb3NlX3JvdXRlX3N0cnVjdCB7CisJcm9zZV9hZGRyZXNzCWFkZHJlc3M7CisJdW5zaWduZWQgc2hvcnQJbWFzazsKKwlheDI1X2FkZHJlc3MJbmVpZ2hib3VyOworCWNoYXIJCWRldmljZVsxNl07CisJdW5zaWduZWQgY2hhcgluZGlnaXM7CisJYXgyNV9hZGRyZXNzCWRpZ2lwZWF0ZXJzW0FYMjVfTUFYX0RJR0lTXTsKK307CisKK3N0cnVjdCByb3NlX2NhdXNlX3N0cnVjdCB7CisJdW5zaWduZWQgY2hhcgljYXVzZTsKKwl1bnNpZ25lZCBjaGFyCWRpYWdub3N0aWM7Cit9OworCitzdHJ1Y3Qgcm9zZV9mYWNpbGl0aWVzX3N0cnVjdCB7CisJcm9zZV9hZGRyZXNzCXNvdXJjZV9hZGRyLCAgIGRlc3RfYWRkcjsKKwlheDI1X2FkZHJlc3MJc291cmNlX2NhbGwsICAgZGVzdF9jYWxsOworCXVuc2lnbmVkIGNoYXIJc291cmNlX25kaWdpcywgZGVzdF9uZGlnaXM7CisJYXgyNV9hZGRyZXNzCXNvdXJjZV9kaWdpc1tST1NFX01BWF9ESUdJU107CisJYXgyNV9hZGRyZXNzCWRlc3RfZGlnaXNbUk9TRV9NQVhfRElHSVNdOworCXVuc2lnbmVkIGludAlyYW5kOworCXJvc2VfYWRkcmVzcwlmYWlsX2FkZHI7CisJYXgyNV9hZGRyZXNzCWZhaWxfY2FsbDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3JvdXRlLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvcm91dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWFiZjU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3JvdXRlLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIElORVQJCUFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUQ1AvSVAgcHJvdG9jb2wgc3VpdGUgZm9yIHRoZSBMSU5VWAorICoJCW9wZXJhdGluZyBzeXN0ZW0uICBJTkVUIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSAgQlNEIFNvY2tldAorICoJCWludGVyZmFjZSBhcyB0aGUgbWVhbnMgb2YgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB1c2VyIGxldmVsLgorICoKKyAqCQlHbG9iYWwgZGVmaW5pdGlvbnMgZm9yIHRoZSBJUCByb3V0ZXIgaW50ZXJmYWNlLgorICoKKyAqIFZlcnNpb246CUAoIylyb3V0ZS5oCTEuMC4zCTA1LzI3LzkzCisgKgorICogQXV0aG9yczoJT3JpZ2luYWwgdGFrZW4gZnJvbSBCZXJrZWxleSBVTklYIDQuMywgKGMpIFVDQiAxOTg2LTE5ODgKKyAqCQlmb3IgdGhlIHB1cnBvc2VzIG9mIGNvbXBhdGliaWxpdHkgb25seS4KKyAqCisgKgkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CisgKgorICogQ2hhbmdlczoKKyAqICAgICAgICAgICAgICBNaWtlIE1jTGFnYW4gICAgOiAgICAgICBSb3V0aW5nIGJ5IHNvdXJjZQorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9MSU5VWF9ST1VURV9ICisjZGVmaW5lIF9MSU5VWF9ST1VURV9ICisKKyNpbmNsdWRlIDxsaW51eC9pZi5oPgorCisKKy8qIFRoaXMgc3RydWN0dXJlIGdldHMgcGFzc2VkIGJ5IHRoZSBTSU9DQUREUlQgYW5kIFNJT0NERUxSVCBjYWxscy4gKi8KK3N0cnVjdCBydGVudHJ5IHsKKwl1bnNpZ25lZCBsb25nCXJ0X3BhZDE7CisJc3RydWN0IHNvY2thZGRyCXJ0X2RzdDsJCS8qIHRhcmdldCBhZGRyZXNzCQkqLworCXN0cnVjdCBzb2NrYWRkcglydF9nYXRld2F5OwkvKiBnYXRld2F5IGFkZHIgKFJURl9HQVRFV0FZKQkqLworCXN0cnVjdCBzb2NrYWRkcglydF9nZW5tYXNrOwkvKiB0YXJnZXQgbmV0d29yayBtYXNrIChJUCkJKi8KKwl1bnNpZ25lZCBzaG9ydAlydF9mbGFnczsKKwlzaG9ydAkJcnRfcGFkMjsKKwl1bnNpZ25lZCBsb25nCXJ0X3BhZDM7CisJdm9pZAkJKnJ0X3BhZDQ7CisJc2hvcnQJCXJ0X21ldHJpYzsJLyogKzEgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5IQkqLworCWNoYXIgKnJ0X2RldjsJLyogZm9yY2luZyB0aGUgZGV2aWNlIGF0IGFkZAkqLworCXVuc2lnbmVkIGxvbmcJcnRfbXR1OwkJLyogcGVyIHJvdXRlIE1UVS9XaW5kb3cgCSovCisjZGVmaW5lIHJ0X21zcwlydF9tdHUJCQkvKiBDb21wYXRpYmlsaXR5IDotKCAgICAgICAgICAgICovCisJdW5zaWduZWQgbG9uZwlydF93aW5kb3c7CS8qIFdpbmRvdyBjbGFtcGluZyAJCSovCisJdW5zaWduZWQgc2hvcnQJcnRfaXJ0dDsJLyogSW5pdGlhbCBSVFQJCQkqLworfTsKKworCisjZGVmaW5lCVJURl9VUAkJMHgwMDAxCQkvKiByb3V0ZSB1c2FibGUJCSAgCSovCisjZGVmaW5lCVJURl9HQVRFV0FZCTB4MDAwMgkJLyogZGVzdGluYXRpb24gaXMgYSBnYXRld2F5CSovCisjZGVmaW5lCVJURl9IT1NUCTB4MDAwNAkJLyogaG9zdCBlbnRyeSAobmV0IG90aGVyd2lzZSkJKi8KKyNkZWZpbmUgUlRGX1JFSU5TVEFURQkweDAwMDgJCS8qIHJlaW5zdGF0ZSByb3V0ZSBhZnRlciB0bW91dAkqLworI2RlZmluZQlSVEZfRFlOQU1JQwkweDAwMTAJCS8qIGNyZWF0ZWQgZHluLiAoYnkgcmVkaXJlY3QpCSovCisjZGVmaW5lCVJURl9NT0RJRklFRAkweDAwMjAJCS8qIG1vZGlmaWVkIGR5bi4gKGJ5IHJlZGlyZWN0KQkqLworI2RlZmluZSBSVEZfTVRVCQkweDAwNDAJCS8qIHNwZWNpZmljIE1UVSBmb3IgdGhpcyByb3V0ZQkqLworI2RlZmluZSBSVEZfTVNTCQlSVEZfTVRVCQkvKiBDb21wYXRpYmlsaXR5IDotKAkJKi8KKyNkZWZpbmUgUlRGX1dJTkRPVwkweDAwODAJCS8qIHBlciByb3V0ZSB3aW5kb3cgY2xhbXBpbmcJKi8KKyNkZWZpbmUgUlRGX0lSVFQJMHgwMTAwCQkvKiBJbml0aWFsIHJvdW5kIHRyaXAgdGltZQkqLworI2RlZmluZSBSVEZfUkVKRUNUCTB4MDIwMAkJLyogUmVqZWN0IHJvdXRlCQkJKi8KKworLyoKKyAqCTxsaW51eC9pcHY2X3JvdXRlLmg+IHVzZXMgUlRGIHZhbHVlcyA+PSA2NGsKKyAqLworCisKKworI2VuZGlmCS8qIF9MSU5VWF9ST1VURV9IICovCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9ydGMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9ydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWFlODk0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3J0Yy5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogR2VuZXJpYyBSVEMgaW50ZXJmYWNlLgorICogVGhpcyB2ZXJzaW9uIGNvbnRhaW5zIHRoZSBwYXJ0IG9mIHRoZSB1c2VyIGludGVyZmFjZSB0byB0aGUgUmVhbCBUaW1lIENsb2NrCisgKiBzZXJ2aWNlLiBJdCBpcyB1c2VkIHdpdGggYm90aCB0aGUgbGVnYWN5IG1jMTQ2ODE4IGFuZCBhbHNvICBFRkkKKyAqIFN0cnVjdCBydGNfdGltZSBhbmQgZmlyc3QgMTIgaW9jdGwgYnkgUGF1bCBHb3J0bWFrZXIsIDE5OTYgLSBzZXBhcmF0ZWQgb3V0CisgKiBmcm9tIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPiB0byB0aGlzIGZpbGUgZm9yIDIuNCBrZXJuZWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBIZXdsZXR0LVBhY2thcmQgQ28uCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgU3RlcGhhbmUgRXJhbmlhbiA8ZXJhbmlhbkBocGwuaHAuY29tPgorICovCisjaWZuZGVmIF9MSU5VWF9SVENfSF8KKyNkZWZpbmUgX0xJTlVYX1JUQ19IXworCisvKgorICogVGhlIHN0cnVjdCB1c2VkIHRvIHBhc3MgZGF0YSB2aWEgdGhlIGZvbGxvd2luZyBpb2N0bC4gU2ltaWxhciB0byB0aGUKKyAqIHN0cnVjdCB0bSBpbiA8dGltZS5oPiwgYnV0IGl0IG5lZWRzIHRvIGJlIGhlcmUgc28gdGhhdCB0aGUga2VybmVsCisgKiBzb3VyY2UgaXMgc2VsZiBjb250YWluZWQsIGFsbG93aW5nIGNyb3NzLWNvbXBpbGVzLCBldGMuIGV0Yy4KKyAqLworCitzdHJ1Y3QgcnRjX3RpbWUgeworCWludCB0bV9zZWM7CisJaW50IHRtX21pbjsKKwlpbnQgdG1faG91cjsKKwlpbnQgdG1fbWRheTsKKwlpbnQgdG1fbW9uOworCWludCB0bV95ZWFyOworCWludCB0bV93ZGF5OworCWludCB0bV95ZGF5OworCWludCB0bV9pc2RzdDsKK307CisKKy8qCisgKiBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIGluc3BpcmVkIGJ5IHRoZSBFRkkgKHYwLjkyKSB3YWtldXAKKyAqIGFsYXJtIEFQSS4KKyAqLworc3RydWN0IHJ0Y193a2Fscm0geworCXVuc2lnbmVkIGNoYXIgZW5hYmxlZDsJLyogMCA9IGFsYXJtIGRpc2FibGVkLCAxID0gYWxhcm0gZW5hYmxlZCAqLworCXVuc2lnbmVkIGNoYXIgcGVuZGluZzsgIC8qIDAgPSBhbGFybSBub3QgcGVuZGluZywgMSA9IGFsYXJtIHBlbmRpbmcgKi8KKwlzdHJ1Y3QgcnRjX3RpbWUgdGltZTsJLyogdGltZSB0aGUgYWxhcm0gaXMgc2V0IHRvICovCit9OworCisvKgorICogRGF0YSBzdHJ1Y3R1cmUgdG8gY29udHJvbCBQTEwgY29ycmVjdGlvbiBzb21lIGJldHRlciBSVEMgZmVhdHVyZQorICogcGxsX3ZhbHVlIGlzIHVzZWQgdG8gZ2V0IG9yIHNldCBjdXJyZW50IHZhbHVlIG9mIGNvcnJlY3Rpb24sCisgKiB0aGUgcmVzdCBvZiB0aGUgc3RydWN0IGlzIHVzZWQgdG8gcXVlcnkgSFcgY2FwYWJpbGl0aWVzLgorICogVGhpcyBpcyBtb2RlbGVkIGFmdGVyIHRoZSBSVEMgdXNlZCBpbiBRNDAvUTYwIGNvbXB1dGVycyBidXQKKyAqIHNob3VsZCBiZSBzdWZmaWNpZW50bHkgZmxleGlibGUgZm9yIG90aGVyIGRldmljZXMKKyAqCisgKiArdmUgcGxsX3ZhbHVlIG1lYW5zIGNsb2NrIHdpbGwgcnVuIGZhc3RlciBieQorICogICBwbGxfdmFsdWUqcGxsX3Bvc211bHQvcGxsX2Nsb2NrCisgKiAtdmUgcGxsX3ZhbHVlIG1lYW5zIGNsb2NrIHdpbGwgcnVuIHNsb3dlciBieQorICogICBwbGxfdmFsdWUqcGxsX25lZ211bHQvcGxsX2Nsb2NrCisgKi8KKworc3RydWN0IHJ0Y19wbGxfaW5mbyB7CisJaW50IHBsbF9jdHJsOyAgICAgICAvKiBwbGFjZWhvbGRlciBmb3IgZmFuY2llciBjb250cm9sICovCisJaW50IHBsbF92YWx1ZTsgICAgICAvKiBnZXQvc2V0IGNvcnJlY3Rpb24gdmFsdWUgKi8KKwlpbnQgcGxsX21heDsgICAgICAgIC8qIG1heCArdmUgKGZhc3RlcikgYWRqdXN0bWVudCB2YWx1ZSAqLworCWludCBwbGxfbWluOyAgICAgICAgLyogbWF4IC12ZSAoc2xvd2VyKSBhZGp1c3RtZW50IHZhbHVlICovCisJaW50IHBsbF9wb3NtdWx0OyAgICAvKiBmYWN0b3IgZm9yICt2ZSBjb3JyZWN0aW9uICovCisJaW50IHBsbF9uZWdtdWx0OyAgICAvKiBmYWN0b3IgZm9yIC12ZSBjb3JyZWN0aW9uICovCisJbG9uZyBwbGxfY2xvY2s7ICAgICAvKiBiYXNlIFBMTCBmcmVxdWVuY3kgKi8KK307CisKKy8qCisgKiBpb2N0bCBjYWxscyB0aGF0IGFyZSBwZXJtaXR0ZWQgdG8gdGhlIC9kZXYvcnRjIGludGVyZmFjZSwgaWYKKyAqIGFueSBvZiB0aGUgUlRDIGRyaXZlcnMgYXJlIGVuYWJsZWQuCisgKi8KKworI2RlZmluZSBSVENfQUlFX09OCV9JTygncCcsIDB4MDEpCS8qIEFsYXJtIGludC4gZW5hYmxlIG9uCQkqLworI2RlZmluZSBSVENfQUlFX09GRglfSU8oJ3AnLCAweDAyKQkvKiAuLi4gb2ZmCQkJKi8KKyNkZWZpbmUgUlRDX1VJRV9PTglfSU8oJ3AnLCAweDAzKQkvKiBVcGRhdGUgaW50LiBlbmFibGUgb24JKi8KKyNkZWZpbmUgUlRDX1VJRV9PRkYJX0lPKCdwJywgMHgwNCkJLyogLi4uIG9mZgkJCSovCisjZGVmaW5lIFJUQ19QSUVfT04JX0lPKCdwJywgMHgwNSkJLyogUGVyaW9kaWMgaW50LiBlbmFibGUgb24JKi8KKyNkZWZpbmUgUlRDX1BJRV9PRkYJX0lPKCdwJywgMHgwNikJLyogLi4uIG9mZgkJCSovCisjZGVmaW5lIFJUQ19XSUVfT04JX0lPKCdwJywgMHgwZikgIC8qIFdhdGNoZG9nIGludC4gZW5hYmxlIG9uCSovCisjZGVmaW5lIFJUQ19XSUVfT0ZGCV9JTygncCcsIDB4MTApICAvKiAuLi4gb2ZmCQkJKi8KKworI2RlZmluZSBSVENfQUxNX1NFVAlfSU9XKCdwJywgMHgwNywgc3RydWN0IHJ0Y190aW1lKSAvKiBTZXQgYWxhcm0gdGltZSAgKi8KKyNkZWZpbmUgUlRDX0FMTV9SRUFECV9JT1IoJ3AnLCAweDA4LCBzdHJ1Y3QgcnRjX3RpbWUpIC8qIFJlYWQgYWxhcm0gdGltZSAqLworI2RlZmluZSBSVENfUkRfVElNRQlfSU9SKCdwJywgMHgwOSwgc3RydWN0IHJ0Y190aW1lKSAvKiBSZWFkIFJUQyB0aW1lICAgKi8KKyNkZWZpbmUgUlRDX1NFVF9USU1FCV9JT1coJ3AnLCAweDBhLCBzdHJ1Y3QgcnRjX3RpbWUpIC8qIFNldCBSVEMgdGltZSAgICAqLworI2RlZmluZSBSVENfSVJRUF9SRUFECV9JT1IoJ3AnLCAweDBiLCB1bnNpZ25lZCBsb25nKQkgLyogUmVhZCBJUlEgcmF0ZSAgICovCisjZGVmaW5lIFJUQ19JUlFQX1NFVAlfSU9XKCdwJywgMHgwYywgdW5zaWduZWQgbG9uZykJIC8qIFNldCBJUlEgcmF0ZSAgICAqLworI2RlZmluZSBSVENfRVBPQ0hfUkVBRAlfSU9SKCdwJywgMHgwZCwgdW5zaWduZWQgbG9uZykJIC8qIFJlYWQgZXBvY2ggICAgICAqLworI2RlZmluZSBSVENfRVBPQ0hfU0VUCV9JT1coJ3AnLCAweDBlLCB1bnNpZ25lZCBsb25nKQkgLyogU2V0IGVwb2NoICAgICAgICovCisKKyNkZWZpbmUgUlRDX1dLQUxNX1NFVAlfSU9XKCdwJywgMHgwZiwgc3RydWN0IHJ0Y193a2Fscm0pLyogU2V0IHdha2V1cCBhbGFybSovCisjZGVmaW5lIFJUQ19XS0FMTV9SRAlfSU9SKCdwJywgMHgxMCwgc3RydWN0IHJ0Y193a2Fscm0pLyogR2V0IHdha2V1cCBhbGFybSovCisKKyNkZWZpbmUgUlRDX1BMTF9HRVQJX0lPUigncCcsIDB4MTEsIHN0cnVjdCBydGNfcGxsX2luZm8pICAvKiBHZXQgUExMIGNvcnJlY3Rpb24gKi8KKyNkZWZpbmUgUlRDX1BMTF9TRVQJX0lPVygncCcsIDB4MTIsIHN0cnVjdCBydGNfcGxsX2luZm8pICAvKiBTZXQgUExMIGNvcnJlY3Rpb24gKi8KKworLyogaW50ZXJydXB0IGZsYWdzICovCisjZGVmaW5lIFJUQ19JUlFGIDB4ODAgLyogYW55IG9mIHRoZSBmb2xsb3dpbmcgaXMgYWN0aXZlICovCisjZGVmaW5lIFJUQ19QRiAweDQwCisjZGVmaW5lIFJUQ19BRiAweDIwCisjZGVmaW5lIFJUQ19VRiAweDEwCisKKworI2VuZGlmIC8qIF9MSU5VWF9SVENfSF8gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2NjYmU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCkBAIC0wLDAgKzEsNjA1IEBACisjaWZuZGVmIF9fTElOVVhfUlRORVRMSU5LX0gKKyNkZWZpbmUgX19MSU5VWF9SVE5FVExJTktfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvaWZfbGluay5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FkZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZWlnaGJvdXIuaD4KKworLyogcnRuZXRsaW5rIGZhbWlsaWVzLiBWYWx1ZXMgdXAgdG8gMTI3IGFyZSByZXNlcnZlZCBmb3IgcmVhbCBhZGRyZXNzCisgKiBmYW1pbGllcywgdmFsdWVzIGFib3ZlIDEyOCBtYXkgYmUgdXNlZCBhcmJpdHJhcmlseS4KKyAqLworI2RlZmluZSBSVE5MX0ZBTUlMWV9JUE1SCQkxMjgKKyNkZWZpbmUgUlROTF9GQU1JTFlfSVA2TVIJCTEyOQorI2RlZmluZSBSVE5MX0ZBTUlMWV9NQVgJCQkxMjkKKworLyoqKioKKyAqCQlSb3V0aW5nL25laWdoYm91ciBkaXNjb3ZlcnkgbWVzc2FnZXMuCisgKioqKi8KKworLyogVHlwZXMgb2YgbWVzc2FnZXMgKi8KKworZW51bSB7CisJUlRNX0JBU0UJPSAxNiwKKyNkZWZpbmUgUlRNX0JBU0UJUlRNX0JBU0UKKworCVJUTV9ORVdMSU5LCT0gMTYsCisjZGVmaW5lIFJUTV9ORVdMSU5LCVJUTV9ORVdMSU5LCisJUlRNX0RFTExJTkssCisjZGVmaW5lIFJUTV9ERUxMSU5LCVJUTV9ERUxMSU5LCisJUlRNX0dFVExJTkssCisjZGVmaW5lIFJUTV9HRVRMSU5LCVJUTV9HRVRMSU5LCisJUlRNX1NFVExJTkssCisjZGVmaW5lIFJUTV9TRVRMSU5LCVJUTV9TRVRMSU5LCisKKwlSVE1fTkVXQUREUgk9IDIwLAorI2RlZmluZSBSVE1fTkVXQUREUglSVE1fTkVXQUREUgorCVJUTV9ERUxBRERSLAorI2RlZmluZSBSVE1fREVMQUREUglSVE1fREVMQUREUgorCVJUTV9HRVRBRERSLAorI2RlZmluZSBSVE1fR0VUQUREUglSVE1fR0VUQUREUgorCisJUlRNX05FV1JPVVRFCT0gMjQsCisjZGVmaW5lIFJUTV9ORVdST1VURQlSVE1fTkVXUk9VVEUKKwlSVE1fREVMUk9VVEUsCisjZGVmaW5lIFJUTV9ERUxST1VURQlSVE1fREVMUk9VVEUKKwlSVE1fR0VUUk9VVEUsCisjZGVmaW5lIFJUTV9HRVRST1VURQlSVE1fR0VUUk9VVEUKKworCVJUTV9ORVdORUlHSAk9IDI4LAorI2RlZmluZSBSVE1fTkVXTkVJR0gJUlRNX05FV05FSUdICisJUlRNX0RFTE5FSUdILAorI2RlZmluZSBSVE1fREVMTkVJR0gJUlRNX0RFTE5FSUdICisJUlRNX0dFVE5FSUdILAorI2RlZmluZSBSVE1fR0VUTkVJR0gJUlRNX0dFVE5FSUdICisKKwlSVE1fTkVXUlVMRQk9IDMyLAorI2RlZmluZSBSVE1fTkVXUlVMRQlSVE1fTkVXUlVMRQorCVJUTV9ERUxSVUxFLAorI2RlZmluZSBSVE1fREVMUlVMRQlSVE1fREVMUlVMRQorCVJUTV9HRVRSVUxFLAorI2RlZmluZSBSVE1fR0VUUlVMRQlSVE1fR0VUUlVMRQorCisJUlRNX05FV1FESVNDCT0gMzYsCisjZGVmaW5lIFJUTV9ORVdRRElTQwlSVE1fTkVXUURJU0MKKwlSVE1fREVMUURJU0MsCisjZGVmaW5lIFJUTV9ERUxRRElTQwlSVE1fREVMUURJU0MKKwlSVE1fR0VUUURJU0MsCisjZGVmaW5lIFJUTV9HRVRRRElTQwlSVE1fR0VUUURJU0MKKworCVJUTV9ORVdUQ0xBU1MJPSA0MCwKKyNkZWZpbmUgUlRNX05FV1RDTEFTUwlSVE1fTkVXVENMQVNTCisJUlRNX0RFTFRDTEFTUywKKyNkZWZpbmUgUlRNX0RFTFRDTEFTUwlSVE1fREVMVENMQVNTCisJUlRNX0dFVFRDTEFTUywKKyNkZWZpbmUgUlRNX0dFVFRDTEFTUwlSVE1fR0VUVENMQVNTCisKKwlSVE1fTkVXVEZJTFRFUgk9IDQ0LAorI2RlZmluZSBSVE1fTkVXVEZJTFRFUglSVE1fTkVXVEZJTFRFUgorCVJUTV9ERUxURklMVEVSLAorI2RlZmluZSBSVE1fREVMVEZJTFRFUglSVE1fREVMVEZJTFRFUgorCVJUTV9HRVRURklMVEVSLAorI2RlZmluZSBSVE1fR0VUVEZJTFRFUglSVE1fR0VUVEZJTFRFUgorCisJUlRNX05FV0FDVElPTgk9IDQ4LAorI2RlZmluZSBSVE1fTkVXQUNUSU9OICAgUlRNX05FV0FDVElPTgorCVJUTV9ERUxBQ1RJT04sCisjZGVmaW5lIFJUTV9ERUxBQ1RJT04gICBSVE1fREVMQUNUSU9OCisJUlRNX0dFVEFDVElPTiwKKyNkZWZpbmUgUlRNX0dFVEFDVElPTiAgIFJUTV9HRVRBQ1RJT04KKworCVJUTV9ORVdQUkVGSVgJPSA1MiwKKyNkZWZpbmUgUlRNX05FV1BSRUZJWAlSVE1fTkVXUFJFRklYCisKKwlSVE1fR0VUTVVMVElDQVNUID0gNTgsCisjZGVmaW5lIFJUTV9HRVRNVUxUSUNBU1QgUlRNX0dFVE1VTFRJQ0FTVAorCisJUlRNX0dFVEFOWUNBU1QJPSA2MiwKKyNkZWZpbmUgUlRNX0dFVEFOWUNBU1QJUlRNX0dFVEFOWUNBU1QKKworCVJUTV9ORVdORUlHSFRCTAk9IDY0LAorI2RlZmluZSBSVE1fTkVXTkVJR0hUQkwJUlRNX05FV05FSUdIVEJMCisJUlRNX0dFVE5FSUdIVEJMCT0gNjYsCisjZGVmaW5lIFJUTV9HRVRORUlHSFRCTAlSVE1fR0VUTkVJR0hUQkwKKwlSVE1fU0VUTkVJR0hUQkwsCisjZGVmaW5lIFJUTV9TRVRORUlHSFRCTAlSVE1fU0VUTkVJR0hUQkwKKworCVJUTV9ORVdORFVTRVJPUFQgPSA2OCwKKyNkZWZpbmUgUlRNX05FV05EVVNFUk9QVCBSVE1fTkVXTkRVU0VST1BUCisKKwlSVE1fTkVXQUREUkxBQkVMID0gNzIsCisjZGVmaW5lIFJUTV9ORVdBRERSTEFCRUwgUlRNX05FV0FERFJMQUJFTAorCVJUTV9ERUxBRERSTEFCRUwsCisjZGVmaW5lIFJUTV9ERUxBRERSTEFCRUwgUlRNX0RFTEFERFJMQUJFTAorCVJUTV9HRVRBRERSTEFCRUwsCisjZGVmaW5lIFJUTV9HRVRBRERSTEFCRUwgUlRNX0dFVEFERFJMQUJFTAorCisJUlRNX0dFVERDQiA9IDc4LAorI2RlZmluZSBSVE1fR0VURENCIFJUTV9HRVREQ0IKKwlSVE1fU0VURENCLAorI2RlZmluZSBSVE1fU0VURENCIFJUTV9TRVREQ0IKKworCV9fUlRNX01BWCwKKyNkZWZpbmUgUlRNX01BWAkJKCgoX19SVE1fTUFYICsgMykgJiB+MykgLSAxKQorfTsKKworI2RlZmluZSBSVE1fTlJfTVNHVFlQRVMJKFJUTV9NQVggKyAxIC0gUlRNX0JBU0UpCisjZGVmaW5lIFJUTV9OUl9GQU1JTElFUwkoUlRNX05SX01TR1RZUEVTID4+IDIpCisjZGVmaW5lIFJUTV9GQU0oY21kKQkoKChjbWQpIC0gUlRNX0JBU0UpID4+IDIpCisKKy8qIAorICAgR2VuZXJpYyBzdHJ1Y3R1cmUgZm9yIGVuY2Fwc3VsYXRpb24gb2Ygb3B0aW9uYWwgcm91dGUgaW5mb3JtYXRpb24uCisgICBJdCBpcyByZW1pbmlzY2VudCBvZiBzb2NrYWRkciwgYnV0IHdpdGggc2FfZmFtaWx5IHJlcGxhY2VkCisgICB3aXRoIGF0dHJpYnV0ZSB0eXBlLgorICovCisKK3N0cnVjdCBydGF0dHIgeworCXVuc2lnbmVkIHNob3J0CXJ0YV9sZW47CisJdW5zaWduZWQgc2hvcnQJcnRhX3R5cGU7Cit9OworCisvKiBNYWNyb3MgdG8gaGFuZGxlIHJ0YXR0cmlidXRlcyAqLworCisjZGVmaW5lIFJUQV9BTElHTlRPCTQKKyNkZWZpbmUgUlRBX0FMSUdOKGxlbikgKCAoKGxlbikrUlRBX0FMSUdOVE8tMSkgJiB+KFJUQV9BTElHTlRPLTEpICkKKyNkZWZpbmUgUlRBX09LKHJ0YSxsZW4pICgobGVuKSA+PSAoaW50KXNpemVvZihzdHJ1Y3QgcnRhdHRyKSAmJiBcCisJCQkgKHJ0YSktPnJ0YV9sZW4gPj0gc2l6ZW9mKHN0cnVjdCBydGF0dHIpICYmIFwKKwkJCSAocnRhKS0+cnRhX2xlbiA8PSAobGVuKSkKKyNkZWZpbmUgUlRBX05FWFQocnRhLGF0dHJsZW4pCSgoYXR0cmxlbikgLT0gUlRBX0FMSUdOKChydGEpLT5ydGFfbGVuKSwgXAorCQkJCSAoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHJ0YSkpICsgUlRBX0FMSUdOKChydGEpLT5ydGFfbGVuKSkpCisjZGVmaW5lIFJUQV9MRU5HVEgobGVuKQkoUlRBX0FMSUdOKHNpemVvZihzdHJ1Y3QgcnRhdHRyKSkgKyAobGVuKSkKKyNkZWZpbmUgUlRBX1NQQUNFKGxlbikJUlRBX0FMSUdOKFJUQV9MRU5HVEgobGVuKSkKKyNkZWZpbmUgUlRBX0RBVEEocnRhKSAgICgodm9pZCopKCgoY2hhciopKHJ0YSkpICsgUlRBX0xFTkdUSCgwKSkpCisjZGVmaW5lIFJUQV9QQVlMT0FEKHJ0YSkgKChpbnQpKChydGEpLT5ydGFfbGVuKSAtIFJUQV9MRU5HVEgoMCkpCisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCQlEZWZpbml0aW9ucyB1c2VkIGluIHJvdXRpbmcgdGFibGUgYWRtaW5pc3RyYXRpb24uCisgKioqKi8KKworc3RydWN0IHJ0bXNnIHsKKwl1bnNpZ25lZCBjaGFyCQlydG1fZmFtaWx5OworCXVuc2lnbmVkIGNoYXIJCXJ0bV9kc3RfbGVuOworCXVuc2lnbmVkIGNoYXIJCXJ0bV9zcmNfbGVuOworCXVuc2lnbmVkIGNoYXIJCXJ0bV90b3M7CisKKwl1bnNpZ25lZCBjaGFyCQlydG1fdGFibGU7CS8qIFJvdXRpbmcgdGFibGUgaWQgKi8KKwl1bnNpZ25lZCBjaGFyCQlydG1fcHJvdG9jb2w7CS8qIFJvdXRpbmcgcHJvdG9jb2w7IHNlZSBiZWxvdwkqLworCXVuc2lnbmVkIGNoYXIJCXJ0bV9zY29wZTsJLyogU2VlIGJlbG93ICovCQorCXVuc2lnbmVkIGNoYXIJCXJ0bV90eXBlOwkvKiBTZWUgYmVsb3cJKi8KKworCXVuc2lnbmVkCQlydG1fZmxhZ3M7Cit9OworCisvKiBydG1fdHlwZSAqLworCitlbnVtIHsKKwlSVE5fVU5TUEVDLAorCVJUTl9VTklDQVNULAkJLyogR2F0ZXdheSBvciBkaXJlY3Qgcm91dGUJKi8KKwlSVE5fTE9DQUwsCQkvKiBBY2NlcHQgbG9jYWxseQkJKi8KKwlSVE5fQlJPQURDQVNULAkJLyogQWNjZXB0IGxvY2FsbHkgYXMgYnJvYWRjYXN0LAorCQkJCSAgIHNlbmQgYXMgYnJvYWRjYXN0ICovCisJUlROX0FOWUNBU1QsCQkvKiBBY2NlcHQgbG9jYWxseSBhcyBicm9hZGNhc3QsCisJCQkJICAgYnV0IHNlbmQgYXMgdW5pY2FzdCAqLworCVJUTl9NVUxUSUNBU1QsCQkvKiBNdWx0aWNhc3Qgcm91dGUJCSovCisJUlROX0JMQUNLSE9MRSwJCS8qIERyb3AJCQkJKi8KKwlSVE5fVU5SRUFDSEFCTEUsCS8qIERlc3RpbmF0aW9uIGlzIHVucmVhY2hhYmxlICAgKi8KKwlSVE5fUFJPSElCSVQsCQkvKiBBZG1pbmlzdHJhdGl2ZWx5IHByb2hpYml0ZWQJKi8KKwlSVE5fVEhST1csCQkvKiBOb3QgaW4gdGhpcyB0YWJsZQkJKi8KKwlSVE5fTkFULAkJLyogVHJhbnNsYXRlIHRoaXMgYWRkcmVzcwkqLworCVJUTl9YUkVTT0xWRSwJCS8qIFVzZSBleHRlcm5hbCByZXNvbHZlcgkqLworCV9fUlROX01BWAorfTsKKworI2RlZmluZSBSVE5fTUFYIChfX1JUTl9NQVggLSAxKQorCisKKy8qIHJ0bV9wcm90b2NvbCAqLworCisjZGVmaW5lIFJUUFJPVF9VTlNQRUMJMAorI2RlZmluZSBSVFBST1RfUkVESVJFQ1QJMQkvKiBSb3V0ZSBpbnN0YWxsZWQgYnkgSUNNUCByZWRpcmVjdHM7CisJCQkJICAgbm90IHVzZWQgYnkgY3VycmVudCBJUHY0ICovCisjZGVmaW5lIFJUUFJPVF9LRVJORUwJMgkvKiBSb3V0ZSBpbnN0YWxsZWQgYnkga2VybmVsCQkqLworI2RlZmluZSBSVFBST1RfQk9PVAkzCS8qIFJvdXRlIGluc3RhbGxlZCBkdXJpbmcgYm9vdAkJKi8KKyNkZWZpbmUgUlRQUk9UX1NUQVRJQwk0CS8qIFJvdXRlIGluc3RhbGxlZCBieSBhZG1pbmlzdHJhdG9yCSovCisKKy8qIFZhbHVlcyBvZiBwcm90b2NvbCA+PSBSVFBST1RfU1RBVElDIGFyZSBub3QgaW50ZXJwcmV0ZWQgYnkga2VybmVsOworICAgdGhleSBhcmUganVzdCBwYXNzZWQgZnJvbSB1c2VyIGFuZCBiYWNrIGFzIGlzLgorICAgSXQgd2lsbCBiZSB1c2VkIGJ5IGh5cG90aGV0aWNhbCBtdWx0aXBsZSByb3V0aW5nIGRhZW1vbnMuCisgICBOb3RlIHRoYXQgcHJvdG9jb2wgdmFsdWVzIHNob3VsZCBiZSBzdGFuZGFyZGl6ZWQgaW4gb3JkZXIgdG8KKyAgIGF2b2lkIGNvbmZsaWN0cy4KKyAqLworCisjZGVmaW5lIFJUUFJPVF9HQVRFRAk4CS8qIEFwcGFyZW50bHksIEdhdGVEICovCisjZGVmaW5lIFJUUFJPVF9SQQk5CS8qIFJESVNDL05EIHJvdXRlciBhZHZlcnRpc2VtZW50cyAqLworI2RlZmluZSBSVFBST1RfTVJUCTEwCS8qIE1lcml0IE1SVCAqLworI2RlZmluZSBSVFBST1RfWkVCUkEJMTEJLyogWmVicmEgKi8KKyNkZWZpbmUgUlRQUk9UX0JJUkQJMTIJLyogQklSRCAqLworI2RlZmluZSBSVFBST1RfRE5ST1VURUQJMTMJLyogREVDbmV0IHJvdXRpbmcgZGFlbW9uICovCisjZGVmaW5lIFJUUFJPVF9YT1JQCTE0CS8qIFhPUlAgKi8KKyNkZWZpbmUgUlRQUk9UX05USwkxNQkvKiBOZXRzdWt1a3UgKi8KKyNkZWZpbmUgUlRQUk9UX0RIQ1AJMTYgICAgICAvKiBESENQIGNsaWVudCAqLworCisvKiBydG1fc2NvcGUKKworICAgUmVhbGx5IGl0IGlzIG5vdCBzY29wZSwgYnV0IHNvcnQgb2YgZGlzdGFuY2UgdG8gdGhlIGRlc3RpbmF0aW9uLgorICAgTk9XSEVSRSBhcmUgcmVzZXJ2ZWQgZm9yIG5vdCBleGlzdGluZyBkZXN0aW5hdGlvbnMsIEhPU1QgaXMgb3VyCisgICBsb2NhbCBhZGRyZXNzZXMsIExJTksgYXJlIGRlc3RpbmF0aW9ucywgbG9jYXRlZCBvbiBkaXJlY3RseSBhdHRhY2hlZAorICAgbGluayBhbmQgVU5JVkVSU0UgaXMgZXZlcnl3aGVyZSBpbiB0aGUgVW5pdmVyc2UuCisKKyAgIEludGVybWVkaWF0ZSB2YWx1ZXMgYXJlIGFsc28gcG9zc2libGUgZi5lLiBpbnRlcmlvciByb3V0ZXMKKyAgIGNvdWxkIGJlIGFzc2lnbmVkIGEgdmFsdWUgYmV0d2VlbiBVTklWRVJTRSBhbmQgTElOSy4KKyovCisKK2VudW0gcnRfc2NvcGVfdCB7CisJUlRfU0NPUEVfVU5JVkVSU0U9MCwKKy8qIFVzZXIgZGVmaW5lZCB2YWx1ZXMgICovCisJUlRfU0NPUEVfU0lURT0yMDAsCisJUlRfU0NPUEVfTElOSz0yNTMsCisJUlRfU0NPUEVfSE9TVD0yNTQsCisJUlRfU0NPUEVfTk9XSEVSRT0yNTUKK307CisKKy8qIHJ0bV9mbGFncyAqLworCisjZGVmaW5lIFJUTV9GX05PVElGWQkJMHgxMDAJLyogTm90aWZ5IHVzZXIgb2Ygcm91dGUgY2hhbmdlCSovCisjZGVmaW5lIFJUTV9GX0NMT05FRAkJMHgyMDAJLyogVGhpcyByb3V0ZSBpcyBjbG9uZWQJCSovCisjZGVmaW5lIFJUTV9GX0VRVUFMSVpFCQkweDQwMAkvKiBNdWx0aXBhdGggZXF1YWxpemVyOiBOSQkqLworI2RlZmluZSBSVE1fRl9QUkVGSVgJCTB4ODAwCS8qIFByZWZpeCBhZGRyZXNzZXMJCSovCisKKy8qIFJlc2VydmVkIHRhYmxlIGlkZW50aWZpZXJzICovCisKK2VudW0gcnRfY2xhc3NfdCB7CisJUlRfVEFCTEVfVU5TUEVDPTAsCisvKiBVc2VyIGRlZmluZWQgdmFsdWVzICovCisJUlRfVEFCTEVfQ09NUEFUPTI1MiwKKwlSVF9UQUJMRV9ERUZBVUxUPTI1MywKKwlSVF9UQUJMRV9NQUlOPTI1NCwKKwlSVF9UQUJMRV9MT0NBTD0yNTUsCisJUlRfVEFCTEVfTUFYPTB4RkZGRkZGRkYKK307CisKKworLyogUm91dGluZyBtZXNzYWdlIGF0dHJpYnV0ZXMgKi8KKworZW51bSBydGF0dHJfdHlwZV90IHsKKwlSVEFfVU5TUEVDLAorCVJUQV9EU1QsCisJUlRBX1NSQywKKwlSVEFfSUlGLAorCVJUQV9PSUYsCisJUlRBX0dBVEVXQVksCisJUlRBX1BSSU9SSVRZLAorCVJUQV9QUkVGU1JDLAorCVJUQV9NRVRSSUNTLAorCVJUQV9NVUxUSVBBVEgsCisJUlRBX1BST1RPSU5GTywgLyogbm8gbG9uZ2VyIHVzZWQgKi8KKwlSVEFfRkxPVywKKwlSVEFfQ0FDSEVJTkZPLAorCVJUQV9TRVNTSU9OLCAvKiBubyBsb25nZXIgdXNlZCAqLworCVJUQV9NUF9BTEdPLCAvKiBubyBsb25nZXIgdXNlZCAqLworCVJUQV9UQUJMRSwKKwlSVEFfTUFSSywKKwlfX1JUQV9NQVgKK307CisKKyNkZWZpbmUgUlRBX01BWCAoX19SVEFfTUFYIC0gMSkKKworI2RlZmluZSBSVE1fUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHJ0bXNnKSkpKQorI2RlZmluZSBSVE1fUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCBydG1zZykpCisKKy8qIFJUTV9NVUxUSVBBVEggLS0tIGFycmF5IG9mIHN0cnVjdCBydG5leHRob3AuCisgKgorICogInN0cnVjdCBydG5leHRob3AiIGRlc2NyaWJlcyBhbGwgbmVjZXNzYXJ5IG5leHRob3AgaW5mb3JtYXRpb24sCisgKiBpLmUuIHBhcmFtZXRlcnMgb2YgcGF0aCB0byBhIGRlc3RpbmF0aW9uIHZpYSB0aGlzIG5leHRob3AuCisgKgorICogQXQgdGhlIG1vbWVudCBpdCBpcyBpbXBvc3NpYmxlIHRvIHNldCBkaWZmZXJlbnQgcHJlZnNyYywgbXR1LCB3aW5kb3cKKyAqIGFuZCBydHQgZm9yIGRpZmZlcmVudCBwYXRocyBmcm9tIG11bHRpcGF0aC4KKyAqLworCitzdHJ1Y3QgcnRuZXh0aG9wIHsKKwl1bnNpZ25lZCBzaG9ydAkJcnRuaF9sZW47CisJdW5zaWduZWQgY2hhcgkJcnRuaF9mbGFnczsKKwl1bnNpZ25lZCBjaGFyCQlydG5oX2hvcHM7CisJaW50CQkJcnRuaF9pZmluZGV4OworfTsKKworLyogcnRuaF9mbGFncyAqLworCisjZGVmaW5lIFJUTkhfRl9ERUFECQkxCS8qIE5leHRob3AgaXMgZGVhZCAodXNlZCBieSBtdWx0aXBhdGgpCSovCisjZGVmaW5lIFJUTkhfRl9QRVJWQVNJVkUJMgkvKiBEbyByZWN1cnNpdmUgZ2F0ZXdheSBsb29rdXAJKi8KKyNkZWZpbmUgUlROSF9GX09OTElOSwkJNAkvKiBHYXRld2F5IGlzIGZvcmNlZCBvbiBsaW5rCSovCisKKy8qIE1hY3JvcyB0byBoYW5kbGUgaGV4dGhvcHMgKi8KKworI2RlZmluZSBSVE5IX0FMSUdOVE8JNAorI2RlZmluZSBSVE5IX0FMSUdOKGxlbikgKCAoKGxlbikrUlROSF9BTElHTlRPLTEpICYgfihSVE5IX0FMSUdOVE8tMSkgKQorI2RlZmluZSBSVE5IX09LKHJ0bmgsbGVuKSAoKHJ0bmgpLT5ydG5oX2xlbiA+PSBzaXplb2Yoc3RydWN0IHJ0bmV4dGhvcCkgJiYgXAorCQkJICAgKChpbnQpKHJ0bmgpLT5ydG5oX2xlbikgPD0gKGxlbikpCisjZGVmaW5lIFJUTkhfTkVYVChydG5oKQkoKHN0cnVjdCBydG5leHRob3AqKSgoKGNoYXIqKShydG5oKSkgKyBSVE5IX0FMSUdOKChydG5oKS0+cnRuaF9sZW4pKSkKKyNkZWZpbmUgUlROSF9MRU5HVEgobGVuKSAoUlROSF9BTElHTihzaXplb2Yoc3RydWN0IHJ0bmV4dGhvcCkpICsgKGxlbikpCisjZGVmaW5lIFJUTkhfU1BBQ0UobGVuKQlSVE5IX0FMSUdOKFJUTkhfTEVOR1RIKGxlbikpCisjZGVmaW5lIFJUTkhfREFUQShydG5oKSAgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHJ0bmgpKSArIFJUTkhfTEVOR1RIKDApKSkKKworLyogUlRNX0NBQ0hFSU5GTyAqLworCitzdHJ1Y3QgcnRhX2NhY2hlaW5mbyB7CisJX191MzIJcnRhX2NsbnRyZWY7CisJX191MzIJcnRhX2xhc3R1c2U7CisJX19zMzIJcnRhX2V4cGlyZXM7CisJX191MzIJcnRhX2Vycm9yOworCV9fdTMyCXJ0YV91c2VkOworCisjZGVmaW5lIFJUTkVUTElOS19IQVZFX1BFRVJJTkZPIDEKKwlfX3UzMglydGFfaWQ7CisJX191MzIJcnRhX3RzOworCV9fdTMyCXJ0YV90c2FnZTsKK307CisKKy8qIFJUTV9NRVRSSUNTIC0tLSBhcnJheSBvZiBzdHJ1Y3QgcnRhdHRyIHdpdGggdHlwZXMgb2YgUlRBWF8qICovCisKK2VudW0geworCVJUQVhfVU5TUEVDLAorI2RlZmluZSBSVEFYX1VOU1BFQyBSVEFYX1VOU1BFQworCVJUQVhfTE9DSywKKyNkZWZpbmUgUlRBWF9MT0NLIFJUQVhfTE9DSworCVJUQVhfTVRVLAorI2RlZmluZSBSVEFYX01UVSBSVEFYX01UVQorCVJUQVhfV0lORE9XLAorI2RlZmluZSBSVEFYX1dJTkRPVyBSVEFYX1dJTkRPVworCVJUQVhfUlRULAorI2RlZmluZSBSVEFYX1JUVCBSVEFYX1JUVAorCVJUQVhfUlRUVkFSLAorI2RlZmluZSBSVEFYX1JUVFZBUiBSVEFYX1JUVFZBUgorCVJUQVhfU1NUSFJFU0gsCisjZGVmaW5lIFJUQVhfU1NUSFJFU0ggUlRBWF9TU1RIUkVTSAorCVJUQVhfQ1dORCwKKyNkZWZpbmUgUlRBWF9DV05EIFJUQVhfQ1dORAorCVJUQVhfQURWTVNTLAorI2RlZmluZSBSVEFYX0FEVk1TUyBSVEFYX0FEVk1TUworCVJUQVhfUkVPUkRFUklORywKKyNkZWZpbmUgUlRBWF9SRU9SREVSSU5HIFJUQVhfUkVPUkRFUklORworCVJUQVhfSE9QTElNSVQsCisjZGVmaW5lIFJUQVhfSE9QTElNSVQgUlRBWF9IT1BMSU1JVAorCVJUQVhfSU5JVENXTkQsCisjZGVmaW5lIFJUQVhfSU5JVENXTkQgUlRBWF9JTklUQ1dORAorCVJUQVhfRkVBVFVSRVMsCisjZGVmaW5lIFJUQVhfRkVBVFVSRVMgUlRBWF9GRUFUVVJFUworCVJUQVhfUlRPX01JTiwKKyNkZWZpbmUgUlRBWF9SVE9fTUlOIFJUQVhfUlRPX01JTgorCVJUQVhfSU5JVFJXTkQsCisjZGVmaW5lIFJUQVhfSU5JVFJXTkQgUlRBWF9JTklUUldORAorCV9fUlRBWF9NQVgKK307CisKKyNkZWZpbmUgUlRBWF9NQVggKF9fUlRBWF9NQVggLSAxKQorCisjZGVmaW5lIFJUQVhfRkVBVFVSRV9FQ04JMHgwMDAwMDAwMQorI2RlZmluZSBSVEFYX0ZFQVRVUkVfU0FDSwkweDAwMDAwMDAyCisjZGVmaW5lIFJUQVhfRkVBVFVSRV9USU1FU1RBTVAJMHgwMDAwMDAwNAorI2RlZmluZSBSVEFYX0ZFQVRVUkVfQUxMRlJBRwkweDAwMDAwMDA4CisKK3N0cnVjdCBydGFfc2Vzc2lvbiB7CisJX191OAlwcm90bzsKKwlfX3U4CXBhZDE7CisJX191MTYJcGFkMjsKKworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCV9fdTE2CXNwb3J0OworCQkJX191MTYJZHBvcnQ7CisJCX0gcG9ydHM7CisKKwkJc3RydWN0IHsKKwkJCV9fdTgJdHlwZTsKKwkJCV9fdTgJY29kZTsKKwkJCV9fdTE2CWlkZW50OworCQl9IGljbXB0OworCisJCV9fdTMyCQlzcGk7CisJfSB1OworfTsKKworLyoqKioKKyAqCQlHZW5lcmFsIGZvcm0gb2YgYWRkcmVzcyBmYW1pbHkgZGVwZW5kZW50IG1lc3NhZ2UuCisgKioqKi8KKworc3RydWN0IHJ0Z2VubXNnIHsKKwl1bnNpZ25lZCBjaGFyCQlydGdlbl9mYW1pbHk7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCQlMaW5rIGxheWVyIHNwZWNpZmljIG1lc3NhZ2VzLgorICoqKiovCisKKy8qIHN0cnVjdCBpZmluZm9tc2cKKyAqIHBhc3NlcyBsaW5rIGxldmVsIHNwZWNpZmljIGluZm9ybWF0aW9uLCBub3QgZGVwZW5kZW50CisgKiBvbiBuZXR3b3JrIHByb3RvY29sLgorICovCisKK3N0cnVjdCBpZmluZm9tc2cgeworCXVuc2lnbmVkIGNoYXIJaWZpX2ZhbWlseTsKKwl1bnNpZ25lZCBjaGFyCV9faWZpX3BhZDsKKwl1bnNpZ25lZCBzaG9ydAlpZmlfdHlwZTsJCS8qIEFSUEhSRF8qICovCisJaW50CQlpZmlfaW5kZXg7CQkvKiBMaW5rIGluZGV4CSovCisJdW5zaWduZWQJaWZpX2ZsYWdzOwkJLyogSUZGXyogZmxhZ3MJKi8KKwl1bnNpZ25lZAlpZmlfY2hhbmdlOwkJLyogSUZGXyogY2hhbmdlIG1hc2sgKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJCXByZWZpeCBpbmZvcm1hdGlvbiAKKyAqKioqLworCitzdHJ1Y3QgcHJlZml4bXNnIHsKKwl1bnNpZ25lZCBjaGFyCXByZWZpeF9mYW1pbHk7CisJdW5zaWduZWQgY2hhcglwcmVmaXhfcGFkMTsKKwl1bnNpZ25lZCBzaG9ydAlwcmVmaXhfcGFkMjsKKwlpbnQJCXByZWZpeF9pZmluZGV4OworCXVuc2lnbmVkIGNoYXIJcHJlZml4X3R5cGU7CisJdW5zaWduZWQgY2hhcglwcmVmaXhfbGVuOworCXVuc2lnbmVkIGNoYXIJcHJlZml4X2ZsYWdzOworCXVuc2lnbmVkIGNoYXIJcHJlZml4X3BhZDM7Cit9OworCitlbnVtIAoreworCVBSRUZJWF9VTlNQRUMsCisJUFJFRklYX0FERFJFU1MsCisJUFJFRklYX0NBQ0hFSU5GTywKKwlfX1BSRUZJWF9NQVgKK307CisKKyNkZWZpbmUgUFJFRklYX01BWAkoX19QUkVGSVhfTUFYIC0gMSkKKworc3RydWN0IHByZWZpeF9jYWNoZWluZm8geworCV9fdTMyCXByZWZlcnJlZF90aW1lOworCV9fdTMyCXZhbGlkX3RpbWU7Cit9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJCVRyYWZmaWMgY29udHJvbCBtZXNzYWdlcy4KKyAqKioqLworCitzdHJ1Y3QgdGNtc2cgeworCXVuc2lnbmVkIGNoYXIJdGNtX2ZhbWlseTsKKwl1bnNpZ25lZCBjaGFyCXRjbV9fcGFkMTsKKwl1bnNpZ25lZCBzaG9ydAl0Y21fX3BhZDI7CisJaW50CQl0Y21faWZpbmRleDsKKwlfX3UzMgkJdGNtX2hhbmRsZTsKKwlfX3UzMgkJdGNtX3BhcmVudDsKKwlfX3UzMgkJdGNtX2luZm87Cit9OworCitlbnVtIHsKKwlUQ0FfVU5TUEVDLAorCVRDQV9LSU5ELAorCVRDQV9PUFRJT05TLAorCVRDQV9TVEFUUywKKwlUQ0FfWFNUQVRTLAorCVRDQV9SQVRFLAorCVRDQV9GQ05ULAorCVRDQV9TVEFUUzIsCisJVENBX1NUQUIsCisJX19UQ0FfTUFYCit9OworCisjZGVmaW5lIFRDQV9NQVggKF9fVENBX01BWCAtIDEpCisKKyNkZWZpbmUgVENBX1JUQShyKSAgKChzdHJ1Y3QgcnRhdHRyKikoKChjaGFyKikocikpICsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCB0Y21zZykpKSkKKyNkZWZpbmUgVENBX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgdGNtc2cpKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCQlOZWlnaGJvciBEaXNjb3ZlcnkgdXNlcmxhbmQgb3B0aW9ucworICoqKiovCisKK3N0cnVjdCBuZHVzZXJvcHRtc2cgeworCXVuc2lnbmVkIGNoYXIJbmR1c2Vyb3B0X2ZhbWlseTsKKwl1bnNpZ25lZCBjaGFyCW5kdXNlcm9wdF9wYWQxOworCXVuc2lnbmVkIHNob3J0CW5kdXNlcm9wdF9vcHRzX2xlbjsJLyogVG90YWwgbGVuZ3RoIG9mIG9wdGlvbnMgKi8KKwlpbnQJCW5kdXNlcm9wdF9pZmluZGV4OworCV9fdTgJCW5kdXNlcm9wdF9pY21wX3R5cGU7CisJX191OAkJbmR1c2Vyb3B0X2ljbXBfY29kZTsKKwl1bnNpZ25lZCBzaG9ydAluZHVzZXJvcHRfcGFkMjsKKwl1bnNpZ25lZCBpbnQJbmR1c2Vyb3B0X3BhZDM7CisJLyogRm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgTkQgb3B0aW9ucyAqLworfTsKKworZW51bSB7CisJTkRVU0VST1BUX1VOU1BFQywKKwlORFVTRVJPUFRfU1JDQUREUiwKKwlfX05EVVNFUk9QVF9NQVgKK307CisKKyNkZWZpbmUgTkRVU0VST1BUX01BWAkoX19ORFVTRVJPUFRfTUFYIC0gMSkKKworLyogUlRuZXRsaW5rIG11bHRpY2FzdCBncm91cHMgLSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3IgdXNlcnNwYWNlICovCisjZGVmaW5lIFJUTUdSUF9MSU5LCQkxCisjZGVmaW5lIFJUTUdSUF9OT1RJRlkJCTIKKyNkZWZpbmUgUlRNR1JQX05FSUdICQk0CisjZGVmaW5lIFJUTUdSUF9UQwkJOAorCisjZGVmaW5lIFJUTUdSUF9JUFY0X0lGQUREUgkweDEwCisjZGVmaW5lIFJUTUdSUF9JUFY0X01ST1VURQkweDIwCisjZGVmaW5lIFJUTUdSUF9JUFY0X1JPVVRFCTB4NDAKKyNkZWZpbmUgUlRNR1JQX0lQVjRfUlVMRQkweDgwCisKKyNkZWZpbmUgUlRNR1JQX0lQVjZfSUZBRERSCTB4MTAwCisjZGVmaW5lIFJUTUdSUF9JUFY2X01ST1VURQkweDIwMAorI2RlZmluZSBSVE1HUlBfSVBWNl9ST1VURQkweDQwMAorI2RlZmluZSBSVE1HUlBfSVBWNl9JRklORk8JMHg4MDAKKworI2RlZmluZSBSVE1HUlBfREVDbmV0X0lGQUREUiAgICAweDEwMDAKKyNkZWZpbmUgUlRNR1JQX0RFQ25ldF9ST1VURSAgICAgMHg0MDAwCisKKyNkZWZpbmUgUlRNR1JQX0lQVjZfUFJFRklYCTB4MjAwMDAKKworLyogUlRuZXRsaW5rIG11bHRpY2FzdCBncm91cHMgKi8KK2VudW0gcnRuZXRsaW5rX2dyb3VwcyB7CisJUlROTEdSUF9OT05FLAorI2RlZmluZSBSVE5MR1JQX05PTkUJCVJUTkxHUlBfTk9ORQorCVJUTkxHUlBfTElOSywKKyNkZWZpbmUgUlROTEdSUF9MSU5LCQlSVE5MR1JQX0xJTksKKwlSVE5MR1JQX05PVElGWSwKKyNkZWZpbmUgUlROTEdSUF9OT1RJRlkJCVJUTkxHUlBfTk9USUZZCisJUlROTEdSUF9ORUlHSCwKKyNkZWZpbmUgUlROTEdSUF9ORUlHSAkJUlROTEdSUF9ORUlHSAorCVJUTkxHUlBfVEMsCisjZGVmaW5lIFJUTkxHUlBfVEMJCVJUTkxHUlBfVEMKKwlSVE5MR1JQX0lQVjRfSUZBRERSLAorI2RlZmluZSBSVE5MR1JQX0lQVjRfSUZBRERSCVJUTkxHUlBfSVBWNF9JRkFERFIKKwlSVE5MR1JQX0lQVjRfTVJPVVRFLAorI2RlZmluZQlSVE5MR1JQX0lQVjRfTVJPVVRFCVJUTkxHUlBfSVBWNF9NUk9VVEUKKwlSVE5MR1JQX0lQVjRfUk9VVEUsCisjZGVmaW5lIFJUTkxHUlBfSVBWNF9ST1VURQlSVE5MR1JQX0lQVjRfUk9VVEUKKwlSVE5MR1JQX0lQVjRfUlVMRSwKKyNkZWZpbmUgUlROTEdSUF9JUFY0X1JVTEUJUlROTEdSUF9JUFY0X1JVTEUKKwlSVE5MR1JQX0lQVjZfSUZBRERSLAorI2RlZmluZSBSVE5MR1JQX0lQVjZfSUZBRERSCVJUTkxHUlBfSVBWNl9JRkFERFIKKwlSVE5MR1JQX0lQVjZfTVJPVVRFLAorI2RlZmluZSBSVE5MR1JQX0lQVjZfTVJPVVRFCVJUTkxHUlBfSVBWNl9NUk9VVEUKKwlSVE5MR1JQX0lQVjZfUk9VVEUsCisjZGVmaW5lIFJUTkxHUlBfSVBWNl9ST1VURQlSVE5MR1JQX0lQVjZfUk9VVEUKKwlSVE5MR1JQX0lQVjZfSUZJTkZPLAorI2RlZmluZSBSVE5MR1JQX0lQVjZfSUZJTkZPCVJUTkxHUlBfSVBWNl9JRklORk8KKwlSVE5MR1JQX0RFQ25ldF9JRkFERFIsCisjZGVmaW5lIFJUTkxHUlBfREVDbmV0X0lGQUREUglSVE5MR1JQX0RFQ25ldF9JRkFERFIKKwlSVE5MR1JQX05PUDIsCisJUlROTEdSUF9ERUNuZXRfUk9VVEUsCisjZGVmaW5lIFJUTkxHUlBfREVDbmV0X1JPVVRFCVJUTkxHUlBfREVDbmV0X1JPVVRFCisJUlROTEdSUF9ERUNuZXRfUlVMRSwKKyNkZWZpbmUgUlROTEdSUF9ERUNuZXRfUlVMRQlSVE5MR1JQX0RFQ25ldF9SVUxFCisJUlROTEdSUF9OT1A0LAorCVJUTkxHUlBfSVBWNl9QUkVGSVgsCisjZGVmaW5lIFJUTkxHUlBfSVBWNl9QUkVGSVgJUlROTEdSUF9JUFY2X1BSRUZJWAorCVJUTkxHUlBfSVBWNl9SVUxFLAorI2RlZmluZSBSVE5MR1JQX0lQVjZfUlVMRQlSVE5MR1JQX0lQVjZfUlVMRQorCVJUTkxHUlBfTkRfVVNFUk9QVCwKKyNkZWZpbmUgUlROTEdSUF9ORF9VU0VST1BUCVJUTkxHUlBfTkRfVVNFUk9QVAorCVJUTkxHUlBfUEhPTkVUX0lGQUREUiwKKyNkZWZpbmUgUlROTEdSUF9QSE9ORVRfSUZBRERSCVJUTkxHUlBfUEhPTkVUX0lGQUREUgorCVJUTkxHUlBfUEhPTkVUX1JPVVRFLAorI2RlZmluZSBSVE5MR1JQX1BIT05FVF9ST1VURQlSVE5MR1JQX1BIT05FVF9ST1VURQorCV9fUlROTEdSUF9NQVgKK307CisjZGVmaW5lIFJUTkxHUlBfTUFYCShfX1JUTkxHUlBfTUFYIC0gMSkKKworLyogVEMgYWN0aW9uIHBpZWNlICovCitzdHJ1Y3QgdGNhbXNnIHsKKwl1bnNpZ25lZCBjaGFyCXRjYV9mYW1pbHk7CisJdW5zaWduZWQgY2hhcgl0Y2FfX3BhZDE7CisJdW5zaWduZWQgc2hvcnQJdGNhX19wYWQyOworfTsKKyNkZWZpbmUgVEFfUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHRjYW1zZykpKSkKKyNkZWZpbmUgVEFfUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCB0Y2Ftc2cpKQorI2RlZmluZSBUQ0FfQUNUX1RBQiAxIC8qIGF0dHIgdHlwZSBtdXN0IGJlID49MSAqLwkKKyNkZWZpbmUgVENBQV9NQVggMQorCisvKiBFbmQgb2YgaW5mb3JtYXRpb24gZXhwb3J0ZWQgdG8gdXNlciBsZXZlbCAqLworCisKKworI2VuZGlmCS8qIF9fTElOVVhfUlRORVRMSU5LX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zY2MuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zY2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjdjYzAzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NjYy5oCkBAIC0wLDAgKzEsMTcyIEBACisvKiAkSWQ6IHNjYy5oLHYgMS4yOSAxOTk3LzA0LzAyIDE0OjU2OjQ1IGpyZXV0ZXIgRXhwIGpyZXV0ZXIgJCAqLworCisjaWZuZGVmCV9TQ0NfSAorI2RlZmluZQlfU0NDX0gKKworCisvKiBzZWxlY3Rpb24gb2YgaGFyZHdhcmUgdHlwZXMgKi8KKworI2RlZmluZSBQQTBIWlAJCTB4MDAJLyogaGFyZHdhcmUgdHlwZSBmb3IgUEEwSFpQIFNDQyBjYXJkIGFuZCBjb21wYXRpYmxlICovCisjZGVmaW5lIEVBR0xFCQkweDAxICAgIC8qIGhhcmR3YXJlIHR5cGUgZm9yIEVBR0xFIGNhcmQgKi8KKyNkZWZpbmUgUEMxMDAJCTB4MDIJLyogaGFyZHdhcmUgdHlwZSBmb3IgUEMxMDAgY2FyZCAqLworI2RlZmluZSBQUklNVVMJCTB4MDQJLyogaGFyZHdhcmUgdHlwZSBmb3IgUFJJTVVTLVBDIChERzlCTCkgY2FyZCAqLworI2RlZmluZSBEUlNJCQkweDA4CS8qIGhhcmR3YXJlIHR5cGUgZm9yIERSU0kgUEMqUGFja2V0IGNhcmQgKi8KKyNkZWZpbmUgQkFZQ09NCQkweDEwCS8qIGhhcmR3YXJlIHR5cGUgZm9yIEJheUNvbSAoVSlTQ0MgKi8KKworLyogREVWIGlvY3RsKCkgY29tbWFuZHMgKi8KKworZW51bSBTQ0NfaW9jdGxfY21kcyB7CisJU0lPQ1NDQ1JFU0VSVkVEID0gU0lPQ0RFVlBSSVZBVEUsCisJU0lPQ1NDQ0NGRywKKwlTSU9DU0NDSU5JLAorCVNJT0NTQ0NDSEFOSU5JLAorCVNJT0NTQ0NTTUVNLAorCVNJT0NTQ0NHS0lTUywKKwlTSU9DU0NDU0tJU1MsCisJU0lPQ1NDQ0dTVEFULAorCVNJT0NTQ0NDQUwKK307CisKKy8qIERldmljZSBwYXJhbWV0ZXIgY29udHJvbCAoZnJvbSBXQU1QRVMpICovCisKK2VudW0gTDFfcGFyYW1zIHsKKwlQQVJBTV9EQVRBLAorCVBBUkFNX1RYREVMQVksCisJUEFSQU1fUEVSU0lTVCwKKwlQQVJBTV9TTE9UVElNRSwKKwlQQVJBTV9UWFRBSUwsCisJUEFSQU1fRlVMTERVUCwKKwlQQVJBTV9TT0ZURENELAkJLyogd2FzOiBQQVJBTV9IVyAqLworCVBBUkFNX01VVEUsCQkvKiA/Pz8gKi8KKwlQQVJBTV9EVFIsCisJUEFSQU1fUlRTLAorCVBBUkFNX1NQRUVELAorCVBBUkFNX0VORERFTEFZLAkJLyogPz8/ICovCisJUEFSQU1fR1JPVVAsCisJUEFSQU1fSURMRSwKKwlQQVJBTV9NSU4sCisJUEFSQU1fTUFYS0VZLAorCVBBUkFNX1dBSVQsCisJUEFSQU1fTUFYREVGRVIsCisJUEFSQU1fVFgsCisJUEFSQU1fSFdFVkVOVCA9IDMxLAorCVBBUkFNX1JFVFVSTiA9IDI1NQkvKiByZXNldCBraXNzIG1vZGUgKi8KK307CisKKy8qIGZ1bGxkdXAgcGFyYW1ldGVyICovCisKK2VudW0gRlVMTERVUF9tb2RlcyB7CisJS0lTU19EVVBMRVhfSEFMRiwJLyogbm9ybWFsIENTTUEgb3BlcmF0aW9uICovCisJS0lTU19EVVBMRVhfRlVMTCwJLyogZnVsbGR1cGxleCwga2V5IGRvd24gdHJ4IGFmdGVyIHRyYW5zbWlzc2lvbiAqLworCUtJU1NfRFVQTEVYX0xJTkssCS8qIGZ1bGxkdXBsZXgsIGtleSBkb3duIHRyeCBhZnRlciAnaWRsZXRpbWUnIHNlYyAqLworCUtJU1NfRFVQTEVYX09QVElNQQkvKiBmdWxsZHVwbGV4LCBsZXQgdGhlIHByb3RvY29sIGxheWVyIGNvbnRyb2wgdGhlIGh3ICovCit9OworCisvKiBtaXNjLiBwYXJhbWV0ZXJzICovCisKKyNkZWZpbmUgVElNRVJfT0ZGCTY1NTM1VQkvKiB0byBzd2l0Y2ggb2ZmIHRpbWVycyAqLworI2RlZmluZSBOT19TVUNIX1BBUkFNCTY1NTM0VQkvKiBwYXJhbSBub3QgaW1wbGVtZW50ZWQgKi8KKworLyogSFdFVkVOVCBwYXJhbWV0ZXIgKi8KKworZW51bSBIV0VWRU5UX29wdHMgeworCUhXRVZfRENEX09OLAorCUhXRVZfRENEX09GRiwKKwlIV0VWX0FMTF9TRU5UCit9OworCisvKiBjaGFubmVsIGdyb3VwaW5nICovCisKKyNkZWZpbmUgUlhHUk9VUAkJMDEwMAkvKiBpZiBzZXQsIG9ubHkgdHggd2hlbiBhbGwgY2hhbm5lbHMgY2xlYXIgKi8KKyNkZWZpbmUgVFhHUk9VUAkJMDIwMAkvKiBpZiBzZXQsIGRvbid0IHRyYW5zbWl0IHNpbXVsdGFuZW91c2x5ICovCisKKy8qIFR4L1J4IGNsb2NrIHNvdXJjZXMgKi8KKworZW51bSBDTE9DS19zb3VyY2VzIHsKKwlDTEtfRFBMTCwJLyogbm9ybWFsIGhhbGZkdXBsZXggb3BlcmF0aW9uICovCisJQ0xLX0VYVEVSTkFMLAkvKiBleHRlcm5hbCBjbG9ja2luZyAoRzNSVUgvREY5SUMgbW9kZW1zKSAqLworCUNMS19ESVZJREVSLAkvKiBSeCA9IERQTEwsIFR4ID0gZGl2aWRlciAoZnVsbGR1cGxleCB3aXRoICovCisJCQkvKiBtb2RlbXMgd2l0aG91dCBjbG9jayByZWdlbmVyYXRpb24gKi8KKwlDTEtfQlJHCQkvKiBleHBlcmltZW50YWwgZnVsbGR1cGxleCBtb2RlIHdpdGggRFBMTC9CUkcgZm9yICovCisJCQkvKiBNT0RFTXMgd2l0aG91dCBjbG9jayByZWNvdmVyeSAqLworfTsKKworLyogVHggc3RhdGUgKi8KKworZW51bSBUWF9zdGF0ZSB7CisJVFhTX0lETEUsCS8qIFRyYW5zbWl0dGVyIG9mZiwgbm8gZGF0YSBwZW5kaW5nICovCisJVFhTX0JVU1ksCS8qIHdhaXRpbmcgZm9yIHBlcm1pc3Npb24gdG8gc2VuZCAvIHRhaWx0aW1lICovCisJVFhTX0FDVElWRSwJLyogVHJhbnNtaXR0ZXIgb24sIHNlbmRpbmcgZGF0YSAqLworCVRYU19ORVdGUkFNRSwJLyogcmVzZXQgQ1JDIGFuZCBzZW5kIChuZXh0KSBmcmFtZSAqLworCVRYU19JRExFMiwJLyogVHJhbnNtaXR0ZXIgb24sIG5vIGRhdGEgcGVuZGluZyAqLworCVRYU19XQUlULAkvKiBXYWl0aW5nIGZvciBNaW50aW1lIHRvIGV4cGlyZSAqLworCVRYU19USU1FT1VUCS8qIFdlIGhhZCBhIHRyYW5zbWlzc2lvbiB0aW1lb3V0ICovCit9OworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW9fcG9ydDsJLyogdHlwZSBkZWZpbml0aW9uIGZvciBhbiAnaW8gcG9ydCBhZGRyZXNzJyAqLworCisvKiBTQ0Mgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24gKi8KKworc3RydWN0IHNjY19zdGF0IHsKKyAgICAgICAgbG9uZyByeGludHM7ICAgICAgICAgICAgLyogUmVjZWl2ZXIgaW50ZXJydXB0cyAqLworICAgICAgICBsb25nIHR4aW50czsgICAgICAgICAgICAvKiBUcmFuc21pdHRlciBpbnRlcnJ1cHRzICovCisgICAgICAgIGxvbmcgZXhpbnRzOyAgICAgICAgICAgIC8qIEV4dGVybmFsL3N0YXR1cyBpbnRlcnJ1cHRzICovCisgICAgICAgIGxvbmcgc3BpbnRzOyAgICAgICAgICAgIC8qIFNwZWNpYWwgcmVjZWl2ZXIgaW50ZXJydXB0cyAqLworCisgICAgICAgIGxvbmcgdHhmcmFtZXM7ICAgICAgICAgIC8qIFBhY2tldHMgc2VudCAqLworICAgICAgICBsb25nIHJ4ZnJhbWVzOyAgICAgICAgICAvKiBOdW1iZXIgb2YgRnJhbWVzIEFjdHVhbGx5IFJlY2VpdmVkICovCisgICAgICAgIGxvbmcgcnhlcnJzOyAgICAgICAgICAgIC8qIENSQyBFcnJvcnMgKi8KKyAgICAgICAgbG9uZyB0eGVycnM7CQkvKiBLSVNTIGVycm9ycyAqLworICAgICAgICAKKwl1bnNpZ25lZCBpbnQgbm9zcGFjZTsJLyogIk91dCBvZiBidWZmZXJzIiAqLworCXVuc2lnbmVkIGludCByeF9vdmVyOwkvKiBSZWNlaXZlciBPdmVycnVucyAqLworCXVuc2lnbmVkIGludCB0eF91bmRlcjsJLyogVHJhbnNtaXR0ZXIgVW5kZXJydW5zICovCisKKwl1bnNpZ25lZCBpbnQgdHhfc3RhdGU7CS8qIFRyYW5zbWl0dGVyIHN0YXRlICovCisJaW50IHR4X3F1ZXVlZDsJCS8qIHR4IGZyYW1lcyBlbnF1ZXVlZCAqLworCisJdW5zaWduZWQgaW50IG1heHF1ZXVlOwkvKiBhbGxvY2F0ZWQgdHhfYnVmZmVycyAqLworCXVuc2lnbmVkIGludCBidWZzaXplOwkvKiB1c2VkIGJ1ZmZlcnNpemUgKi8KK307CisKK3N0cnVjdCBzY2NfbW9kZW0geworCWxvbmcgc3BlZWQ7CQkvKiBMaW5lIHNwZWVkLCBicHMgKi8KKwljaGFyIGNsb2Nrc3JjOwkJLyogMCA9IERQTEwsIDEgPSBleHRlcm5hbCwgMiA9IGRpdmlkZXIgKi8KKwljaGFyIG5yejsJCS8qIE5SWiBpbnN0ZWFkIG9mIE5SWkkgKi8JCit9OworCitzdHJ1Y3Qgc2NjX2tpc3NfY21kIHsKKwlpbnQgIAkgY29tbWFuZDsJLyogb25lIG9mIHRoZSBLSVNTLUNvbW1hbmRzIGRlZmluZWQgYWJvdmUgKi8KKwl1bnNpZ25lZCBwYXJhbTsJCS8qIEtJU1MtUGFyYW0gKi8KK307CisKK3N0cnVjdCBzY2NfaHdfY29uZmlnIHsKKwlpb19wb3J0IGRhdGFfYTsJCS8qIGRhdGEgcG9ydCBjaGFubmVsIEEgKi8KKwlpb19wb3J0IGN0cmxfYTsJCS8qIGNvbnRyb2wgcG9ydCBjaGFubmVsIEEgKi8KKwlpb19wb3J0IGRhdGFfYjsJCS8qIGRhdGEgcG9ydCBjaGFubmVsIEIgKi8KKwlpb19wb3J0IGN0cmxfYjsJCS8qIGNvbnRyb2wgcG9ydCBjaGFubmVsIEIgKi8KKwlpb19wb3J0IHZlY3Rvcl9sYXRjaDsJLyogSU5UQUNLLUxhdGNoICgjKSAqLworCWlvX3BvcnQJc3BlY2lhbDsJLyogc3BlY2lhbCBmdW5jdGlvbiBwb3J0ICovCisKKwlpbnQJaXJxOwkJLyogaXJxICovCisJbG9uZwljbG9jazsJCS8qIGNsb2NrICovCisJY2hhcglvcHRpb247CQkvKiBjb21tYW5kIGZvciBmdW5jdGlvbiBwb3J0ICovCisKKwljaGFyIGJyYW5kOwkJLyogaGFyZHdhcmUgdHlwZSAqLworCWNoYXIgZXNjYzsJCS8qIHVzZSBleHQuIGZlYXR1cmVzIG9mIGEgODU4MC84NTE4MC84NTI4MCAqLworfTsKKworLyogKCMpIG9ubHkgb25lIElOVEFDSyBsYXRjaCBhbGxvd2VkLiAqLworCisKK3N0cnVjdCBzY2NfbWVtX2NvbmZpZyB7CisJdW5zaWduZWQgaW50IGR1bW15OworCXVuc2lnbmVkIGludCBidWZzaXplOworfTsKKworc3RydWN0IHNjY19jYWxpYnJhdGUgeworCXVuc2lnbmVkIGludCB0aW1lOworCXVuc2lnbmVkIGNoYXIgcGF0dGVybjsKK307CisKKyNlbmRpZiAvKiBkZWZpbmVkKF9TQ0NfSCkgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgxMzdhZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC0wLDAgKzEsNDUgQEAKKyNpZm5kZWYgX0xJTlVYX1NDSEVEX0gKKyNkZWZpbmUgX0xJTlVYX1NDSEVEX0gKKworLyoKKyAqIGNsb25pbmcgZmxhZ3M6CisgKi8KKyNkZWZpbmUgQ1NJR05BTAkJMHgwMDAwMDBmZgkvKiBzaWduYWwgbWFzayB0byBiZSBzZW50IGF0IGV4aXQgKi8KKyNkZWZpbmUgQ0xPTkVfVk0JMHgwMDAwMDEwMAkvKiBzZXQgaWYgVk0gc2hhcmVkIGJldHdlZW4gcHJvY2Vzc2VzICovCisjZGVmaW5lIENMT05FX0ZTCTB4MDAwMDAyMDAJLyogc2V0IGlmIGZzIGluZm8gc2hhcmVkIGJldHdlZW4gcHJvY2Vzc2VzICovCisjZGVmaW5lIENMT05FX0ZJTEVTCTB4MDAwMDA0MDAJLyogc2V0IGlmIG9wZW4gZmlsZXMgc2hhcmVkIGJldHdlZW4gcHJvY2Vzc2VzICovCisjZGVmaW5lIENMT05FX1NJR0hBTkQJMHgwMDAwMDgwMAkvKiBzZXQgaWYgc2lnbmFsIGhhbmRsZXJzIGFuZCBibG9ja2VkIHNpZ25hbHMgc2hhcmVkICovCisjZGVmaW5lIENMT05FX1BUUkFDRQkweDAwMDAyMDAwCS8qIHNldCBpZiB3ZSB3YW50IHRvIGxldCB0cmFjaW5nIGNvbnRpbnVlIG9uIHRoZSBjaGlsZCB0b28gKi8KKyNkZWZpbmUgQ0xPTkVfVkZPUksJMHgwMDAwNDAwMAkvKiBzZXQgaWYgdGhlIHBhcmVudCB3YW50cyB0aGUgY2hpbGQgdG8gd2FrZSBpdCB1cCBvbiBtbV9yZWxlYXNlICovCisjZGVmaW5lIENMT05FX1BBUkVOVAkweDAwMDA4MDAwCS8qIHNldCBpZiB3ZSB3YW50IHRvIGhhdmUgdGhlIHNhbWUgcGFyZW50IGFzIHRoZSBjbG9uZXIgKi8KKyNkZWZpbmUgQ0xPTkVfVEhSRUFECTB4MDAwMTAwMDAJLyogU2FtZSB0aHJlYWQgZ3JvdXA/ICovCisjZGVmaW5lIENMT05FX05FV05TCTB4MDAwMjAwMDAJLyogTmV3IG5hbWVzcGFjZSBncm91cD8gKi8KKyNkZWZpbmUgQ0xPTkVfU1lTVlNFTQkweDAwMDQwMDAwCS8qIHNoYXJlIHN5c3RlbSBWIFNFTV9VTkRPIHNlbWFudGljcyAqLworI2RlZmluZSBDTE9ORV9TRVRUTFMJMHgwMDA4MDAwMAkvKiBjcmVhdGUgYSBuZXcgVExTIGZvciB0aGUgY2hpbGQgKi8KKyNkZWZpbmUgQ0xPTkVfUEFSRU5UX1NFVFRJRAkweDAwMTAwMDAwCS8qIHNldCB0aGUgVElEIGluIHRoZSBwYXJlbnQgKi8KKyNkZWZpbmUgQ0xPTkVfQ0hJTERfQ0xFQVJUSUQJMHgwMDIwMDAwMAkvKiBjbGVhciB0aGUgVElEIGluIHRoZSBjaGlsZCAqLworI2RlZmluZSBDTE9ORV9ERVRBQ0hFRAkJMHgwMDQwMDAwMAkvKiBVbnVzZWQsIGlnbm9yZWQgKi8KKyNkZWZpbmUgQ0xPTkVfVU5UUkFDRUQJCTB4MDA4MDAwMDAJLyogc2V0IGlmIHRoZSB0cmFjaW5nIHByb2Nlc3MgY2FuJ3QgZm9yY2UgQ0xPTkVfUFRSQUNFIG9uIHRoaXMgY2xvbmUgKi8KKyNkZWZpbmUgQ0xPTkVfQ0hJTERfU0VUVElECTB4MDEwMDAwMDAJLyogc2V0IHRoZSBUSUQgaW4gdGhlIGNoaWxkICovCisjZGVmaW5lIENMT05FX1NUT1BQRUQJCTB4MDIwMDAwMDAJLyogU3RhcnQgaW4gc3RvcHBlZCBzdGF0ZSAqLworI2RlZmluZSBDTE9ORV9ORVdVVFMJCTB4MDQwMDAwMDAJLyogTmV3IHV0c25hbWUgZ3JvdXA/ICovCisjZGVmaW5lIENMT05FX05FV0lQQwkJMHgwODAwMDAwMAkvKiBOZXcgaXBjcyAqLworI2RlZmluZSBDTE9ORV9ORVdVU0VSCQkweDEwMDAwMDAwCS8qIE5ldyB1c2VyIG5hbWVzcGFjZSAqLworI2RlZmluZSBDTE9ORV9ORVdQSUQJCTB4MjAwMDAwMDAJLyogTmV3IHBpZCBuYW1lc3BhY2UgKi8KKyNkZWZpbmUgQ0xPTkVfTkVXTkVUCQkweDQwMDAwMDAwCS8qIE5ldyBuZXR3b3JrIG5hbWVzcGFjZSAqLworI2RlZmluZSBDTE9ORV9JTwkJMHg4MDAwMDAwMAkvKiBDbG9uZSBpbyBjb250ZXh0ICovCisKKy8qCisgKiBTY2hlZHVsaW5nIHBvbGljaWVzCisgKi8KKyNkZWZpbmUgU0NIRURfTk9STUFMCQkwCisjZGVmaW5lIFNDSEVEX0ZJRk8JCTEKKyNkZWZpbmUgU0NIRURfUlIJCTIKKyNkZWZpbmUgU0NIRURfQkFUQ0gJCTMKKy8qIFNDSEVEX0lTTzogcmVzZXJ2ZWQgYnV0IG5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KKyNkZWZpbmUgU0NIRURfSURMRQkJNQorLyogQ2FuIGJlIE9SZWQgaW4gdG8gbWFrZSBzdXJlIHRoZSBwcm9jZXNzIGlzIHJldmVydGVkIGJhY2sgdG8gU0NIRURfTk9STUFMIG9uIGZvcmsgKi8KKyNkZWZpbmUgU0NIRURfUkVTRVRfT05fRk9SSyAgICAgMHg0MDAwMDAwMAorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NjcmVlbl9pbmZvLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvc2NyZWVuX2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTZiNGY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NjcmVlbl9pbmZvLmgKQEAgLTAsMCArMSw3MiBAQAorI2lmbmRlZiBfU0NSRUVOX0lORk9fSAorI2RlZmluZSBfU0NSRUVOX0lORk9fSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIFRoZXNlIGFyZSBzZXQgdXAgYnkgdGhlIHNldHVwLXJvdXRpbmUgYXQgYm9vdC10aW1lOgorICovCisKK3N0cnVjdCBzY3JlZW5faW5mbyB7CisJX191OCAgb3JpZ194OwkJLyogMHgwMCAqLworCV9fdTggIG9yaWdfeTsJCS8qIDB4MDEgKi8KKwlfX3UxNiBleHRfbWVtX2s7CS8qIDB4MDIgKi8KKwlfX3UxNiBvcmlnX3ZpZGVvX3BhZ2U7CS8qIDB4MDQgKi8KKwlfX3U4ICBvcmlnX3ZpZGVvX21vZGU7CS8qIDB4MDYgKi8KKwlfX3U4ICBvcmlnX3ZpZGVvX2NvbHM7CS8qIDB4MDcgKi8KKwlfX3U4ICBmbGFnczsJCS8qIDB4MDggKi8KKwlfX3U4ICB1bnVzZWQyOwkJLyogMHgwOSAqLworCV9fdTE2IG9yaWdfdmlkZW9fZWdhX2J4Oy8qIDB4MGEgKi8KKwlfX3UxNiB1bnVzZWQzOwkJLyogMHgwYyAqLworCV9fdTggIG9yaWdfdmlkZW9fbGluZXM7CS8qIDB4MGUgKi8KKwlfX3U4ICBvcmlnX3ZpZGVvX2lzVkdBOwkvKiAweDBmICovCisJX191MTYgb3JpZ192aWRlb19wb2ludHM7LyogMHgxMCAqLworCisJLyogVkVTQSBncmFwaGljIG1vZGUgLS0gbGluZWFyIGZyYW1lIGJ1ZmZlciAqLworCV9fdTE2IGxmYl93aWR0aDsJLyogMHgxMiAqLworCV9fdTE2IGxmYl9oZWlnaHQ7CS8qIDB4MTQgKi8KKwlfX3UxNiBsZmJfZGVwdGg7CS8qIDB4MTYgKi8KKwlfX3UzMiBsZmJfYmFzZTsJCS8qIDB4MTggKi8KKwlfX3UzMiBsZmJfc2l6ZTsJCS8qIDB4MWMgKi8KKwlfX3UxNiBjbF9tYWdpYywgY2xfb2Zmc2V0OyAvKiAweDIwICovCisJX191MTYgbGZiX2xpbmVsZW5ndGg7CS8qIDB4MjQgKi8KKwlfX3U4ICByZWRfc2l6ZTsJCS8qIDB4MjYgKi8KKwlfX3U4ICByZWRfcG9zOwkJLyogMHgyNyAqLworCV9fdTggIGdyZWVuX3NpemU7CS8qIDB4MjggKi8KKwlfX3U4ICBncmVlbl9wb3M7CS8qIDB4MjkgKi8KKwlfX3U4ICBibHVlX3NpemU7CS8qIDB4MmEgKi8KKwlfX3U4ICBibHVlX3BvczsJCS8qIDB4MmIgKi8KKwlfX3U4ICByc3ZkX3NpemU7CS8qIDB4MmMgKi8KKwlfX3U4ICByc3ZkX3BvczsJCS8qIDB4MmQgKi8KKwlfX3UxNiB2ZXNhcG1fc2VnOwkvKiAweDJlICovCisJX191MTYgdmVzYXBtX29mZjsJLyogMHgzMCAqLworCV9fdTE2IHBhZ2VzOwkJLyogMHgzMiAqLworCV9fdTE2IHZlc2FfYXR0cmlidXRlczsJLyogMHgzNCAqLworCV9fdTMyIGNhcGFiaWxpdGllczsgICAgIC8qIDB4MzYgKi8KKwlfX3U4ICBfcmVzZXJ2ZWRbNl07CS8qIDB4M2EgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgVklERU9fVFlQRV9NREEJCTB4MTAJLyogTW9ub2Nocm9tZSBUZXh0IERpc3BsYXkJKi8KKyNkZWZpbmUgVklERU9fVFlQRV9DR0EJCTB4MTEJLyogQ0dBIERpc3BsYXkgCQkJKi8KKyNkZWZpbmUgVklERU9fVFlQRV9FR0FNCQkweDIwCS8qIEVHQS9WR0EgaW4gTW9ub2Nocm9tZSBNb2RlCSovCisjZGVmaW5lIFZJREVPX1RZUEVfRUdBQwkJMHgyMQkvKiBFR0EgaW4gQ29sb3IgTW9kZQkJKi8KKyNkZWZpbmUgVklERU9fVFlQRV9WR0FDCQkweDIyCS8qIFZHQSsgaW4gQ29sb3IgTW9kZQkJKi8KKyNkZWZpbmUgVklERU9fVFlQRV9WTEZCCQkweDIzCS8qIFZFU0EgVkdBIGluIGdyYXBoaWMgbW9kZQkqLworCisjZGVmaW5lIFZJREVPX1RZUEVfUElDQV9TMwkweDMwCS8qIEFDRVIgUElDQS02MSBsb2NhbCBTMyB2aWRlbwkqLworI2RlZmluZSBWSURFT19UWVBFX01JUFNfRzM2NAkweDMxICAgIC8qIE1JUFMgTWFnbnVtIDQwMDAgRzM2NCB2aWRlbyAgKi8KKyNkZWZpbmUgVklERU9fVFlQRV9TR0kgICAgICAgICAgMHgzMyAgICAvKiBWYXJpb3VzIFNHSSBncmFwaGljcyBoYXJkd2FyZSAqLworCisjZGVmaW5lIFZJREVPX1RZUEVfVEdBQwkJMHg0MAkvKiBERUMgVEdBICovCisKKyNkZWZpbmUgVklERU9fVFlQRV9TVU4gICAgICAgICAgMHg1MCAgICAvKiBTdW4gZnJhbWUgYnVmZmVyLiAqLworI2RlZmluZSBWSURFT19UWVBFX1NVTlBDSSAgICAgICAweDUxICAgIC8qIFN1biBQQ0kgYmFzZWQgZnJhbWUgYnVmZmVyLiAqLworCisjZGVmaW5lIFZJREVPX1RZUEVfUE1BQwkJMHg2MAkvKiBQb3dlck1hY2ludG9zaCBmcmFtZSBidWZmZXIuICovCisKKyNkZWZpbmUgVklERU9fVFlQRV9FRkkJCTB4NzAJLyogRUZJIGdyYXBoaWMgbW9kZQkJKi8KKworI2RlZmluZSBWSURFT19GTEFHU19OT0NVUlNPUgkoMSA8PCAwKSAvKiBUaGUgdmlkZW8gbW9kZSBoYXMgbm8gY3Vyc29yIHNldCAqLworCisKKyNlbmRpZiAvKiBfU0NSRUVOX0lORk9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NkbGEuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zZGxhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAzYjRmYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zZGxhLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJR2xvYmFsIGRlZmluaXRpb25zIGZvciB0aGUgRnJhbWUgcmVsYXkgaW50ZXJmYWNlLgorICoKKyAqIFZlcnNpb246CUAoIylpZl9pZnJhZC5oCTAuMjAJMTMgQXByIDk2CisgKgorICogQXV0aG9yOglNaWtlIE1jTGFnYW4gPG1pa2UubWNsYWdhbkBsaW51eC5vcmc+CisgKgorICogQ2hhbmdlczoKKyAqCQkwLjE1CU1pa2UgTWNMYWdhbglTdHJ1Y3R1cmUgcGFja2luZworICoKKyAqCQkwLjIwCU1pa2UgTWNMYWdhbglOZXcgZmxhZ3MgZm9yIFM1MDggYnVmZmVyIGhhbmRsaW5nCisgKgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBTRExBX0gKKyNkZWZpbmUgU0RMQV9ICisKKy8qIGFkYXB0ZXIgdHlwZSAqLworI2RlZmluZSBTRExBX1RZUEVTCisjZGVmaW5lIFNETEFfUzUwMkEJCQk1MDIwCisjZGVmaW5lIFNETEFfUzUwMkUJCQk1MDIxCisjZGVmaW5lIFNETEFfUzUwMwkJCTUwMzAKKyNkZWZpbmUgU0RMQV9TNTA3CQkJNTA3MAorI2RlZmluZSBTRExBX1M1MDgJCQk1MDgwCisjZGVmaW5lIFNETEFfUzUwOQkJCTUwOTAKKyNkZWZpbmUgU0RMQV9VTktOT1dOCQkJLTEKKworLyogcG9ydCBzZWxlY3Rpb24gZmxhZ3MgZm9yIHRoZSBTNTA4ICovCisjZGVmaW5lIFNETEFfUzUwOF9QT1JUX1YzNQkJMHgwMAorI2RlZmluZSBTRExBX1M1MDhfUE9SVF9SUzIzMgkJMHgwMgorCisvKiBaODAgQ1BVIHNwZWVkcyAqLworI2RlZmluZSBTRExBX0NQVV8zTQkJCTB4MDAKKyNkZWZpbmUgU0RMQV9DUFVfNU0JCQkweDAxCisjZGVmaW5lIFNETEFfQ1BVXzdNCQkJMHgwMgorI2RlZmluZSBTRExBX0NQVV84TQkJCTB4MDMKKyNkZWZpbmUgU0RMQV9DUFVfMTBNCQkJMHgwNAorI2RlZmluZSBTRExBX0NQVV8xNk0JCQkweDA1CisjZGVmaW5lIFNETEFfQ1BVXzEyTQkJCTB4MDYKKworLyogc29tZSBwcml2YXRlIElPQ1RMcyAqLworI2RlZmluZSBTRExBX0lERU5USUZZCQkJKEZSQURfTEFTVF9JT0NUTCArIDEpCisjZGVmaW5lIFNETEFfQ1BVU1BFRUQJCQkoRlJBRF9MQVNUX0lPQ1RMICsgMikKKyNkZWZpbmUgU0RMQV9QUk9UT0NPTAkJCShGUkFEX0xBU1RfSU9DVEwgKyAzKQorCisjZGVmaW5lIFNETEFfQ0xFQVJNRU0JCQkoRlJBRF9MQVNUX0lPQ1RMICsgNCkKKyNkZWZpbmUgU0RMQV9XUklURU1FTQkJCShGUkFEX0xBU1RfSU9DVEwgKyA1KQorI2RlZmluZSBTRExBX1JFQURNRU0JCQkoRlJBRF9MQVNUX0lPQ1RMICsgNikKKworc3RydWN0IHNkbGFfbWVtIHsKKyAgIGludCAgYWRkcjsKKyAgIGludCAgbGVuOworICAgdm9pZCAqZGF0YTsKK307CisKKyNkZWZpbmUgU0RMQV9TVEFSVAkJCShGUkFEX0xBU1RfSU9DVEwgKyA3KQorI2RlZmluZSBTRExBX1NUT1AJCQkoRlJBRF9MQVNUX0lPQ1RMICsgOCkKKworLyogc29tZSBvZmZzZXRzIGluIHRoZSBaODAncyBtZW1vcnkgc3BhY2UgKi8KKyNkZWZpbmUgU0RMQV9OTUlBRERSCQkJMHgwMDAwCisjZGVmaW5lIFNETEFfQ09ORl9BRERSCQkJMHgwMDEwCisjZGVmaW5lIFNETEFfUzUwMkFfTk1JQUREUgkJMHgwMDY2CisjZGVmaW5lIFNETEFfQ09ERV9CQVNFQUREUgkJMHgwMTAwCisjZGVmaW5lIFNETEFfV0lORE9XX1NJWkUJCTB4MjAwMAorI2RlZmluZSBTRExBX0FERFJfTUFTSwkJCTB4MUZGRgorCisvKiBsYXJnZXN0IGhhbmRsZWFibGUgYmxvY2sgb2YgZGF0YSAqLworI2RlZmluZSBTRExBX01BWF9EQVRBCQkJNDA4MAorI2RlZmluZSBTRExBX01BWF9NVFUJCQk0MDcyCS8qIE1BWF9EQVRBIC0gc2l6ZW9mKGZyYWRoZHIpICovCisjZGVmaW5lIFNETEFfTUFYX0RMQ0kJCQkyNAorCisvKiB0aGlzIHNob3VsZCBiZSB0aGUgc2FtZSBhcyBmcmFkX2NvbmYgKi8KK3N0cnVjdCBzZGxhX2NvbmYgeworICAgc2hvcnQgc3RhdGlvbjsKKyAgIHNob3J0IGNvbmZpZzsKKyAgIHNob3J0IGtiYXVkOworICAgc2hvcnQgY2xvY2tpbmc7CisgICBzaG9ydCBtYXhfZnJtOworICAgc2hvcnQgVDM5MTsKKyAgIHNob3J0IFQzOTI7CisgICBzaG9ydCBOMzkxOworICAgc2hvcnQgTjM5MjsKKyAgIHNob3J0IE4zOTM7CisgICBzaG9ydCBDSVJfZndkOworICAgc2hvcnQgQmNfZndkOworICAgc2hvcnQgQmVfZndkOworICAgc2hvcnQgQ0lSX2J3ZDsKKyAgIHNob3J0IEJjX2J3ZDsKKyAgIHNob3J0IEJlX2J3ZDsKK307CisKKy8qIHRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIGRsY2lfY29uZiAqLworc3RydWN0IHNkbGFfZGxjaV9jb25mIHsKKyAgIHNob3J0IGNvbmZpZzsKKyAgIHNob3J0IENJUl9md2Q7CisgICBzaG9ydCBCY19md2Q7CisgICBzaG9ydCBCZV9md2Q7CisgICBzaG9ydCBDSVJfYndkOworICAgc2hvcnQgQmNfYndkOworICAgc2hvcnQgQmVfYndkOyAKKyAgIHNob3J0IFRjX2Z3ZDsKKyAgIHNob3J0IFRjX2J3ZDsKKyAgIHNob3J0IFRmX21heDsKKyAgIHNob3J0IFRiX21heDsKK307CisKKwordm9pZCBzZGxhKHZvaWQgKmNmZ19pbmZvLCBjaGFyICpkZXYsIHN0cnVjdCBmcmFkX2NvbmYgKmNvbmYsIGludCBxdWlldCk7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvc2VjdXJlYml0cy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NlY3VyZWJpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDM1YzYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NlY3VyZWJpdHMuaApAQCAtMCwwICsxLDUxIEBACisjaWZuZGVmIF9MSU5VWF9TRUNVUkVCSVRTX0gKKyNkZWZpbmUgX0xJTlVYX1NFQ1VSRUJJVFNfSCAxCisKKy8qIEVhY2ggc2VjdXJlc2V0dGluZyBpcyBpbXBsZW1lbnRlZCB1c2luZyB0d28gYml0cy4gT25lIGJpdCBzcGVjaWZpZXMKKyAgIHdoZXRoZXIgdGhlIHNldHRpbmcgaXMgb24gb3Igb2ZmLiBUaGUgb3RoZXIgYml0IHNwZWNpZnkgd2hldGhlciB0aGUKKyAgIHNldHRpbmcgaXMgbG9ja2VkIG9yIG5vdC4gQSBzZXR0aW5nIHdoaWNoIGlzIGxvY2tlZCBjYW5ub3QgYmUKKyAgIGNoYW5nZWQgZnJvbSB1c2VyLWxldmVsLiAqLworI2RlZmluZSBpc3NlY3VyZV9tYXNrKFgpCSgxIDw8IChYKSkKKworI2RlZmluZSBTRUNVUkVCSVRTX0RFRkFVTFQgMHgwMDAwMDAwMAorCisvKiBXaGVuIHNldCBVSUQgMCBoYXMgbm8gc3BlY2lhbCBwcml2aWxlZ2VzLiBXaGVuIHVuc2V0LCB3ZSBzdXBwb3J0CisgICBpbmhlcml0YW5jZSBvZiByb290LXBlcm1pc3Npb25zIGFuZCBzdWlkLXJvb3QgZXhlY3V0YWJsZSB1bmRlcgorICAgY29tcGF0aWJpbGl0eSBtb2RlLiBXZSByYWlzZSB0aGUgZWZmZWN0aXZlIGFuZCBpbmhlcml0YWJsZSBiaXRtYXNrcworICAgKm9mIHRoZSBleGVjdXRhYmxlIGZpbGUqIGlmIHRoZSBlZmZlY3RpdmUgdWlkIG9mIHRoZSBuZXcgcHJvY2VzcyBpcworICAgMC4gSWYgdGhlIHJlYWwgdWlkIGlzIDAsIHdlIHJhaXNlIHRoZSBlZmZlY3RpdmUgKGxlZ2FjeSkgYml0IG9mIHRoZQorICAgZXhlY3V0YWJsZSBmaWxlLiAqLworI2RlZmluZSBTRUNVUkVfTk9ST09UCQkJMAorI2RlZmluZSBTRUNVUkVfTk9ST09UX0xPQ0tFRAkJMSAgLyogbWFrZSBiaXQtMCBpbW11dGFibGUgKi8KKworI2RlZmluZSBTRUNCSVRfTk9ST09UCQkoaXNzZWN1cmVfbWFzayhTRUNVUkVfTk9ST09UKSkKKyNkZWZpbmUgU0VDQklUX05PUk9PVF9MT0NLRUQJKGlzc2VjdXJlX21hc2soU0VDVVJFX05PUk9PVF9MT0NLRUQpKQorCisvKiBXaGVuIHNldCwgc2V0dWlkIHRvL2Zyb20gdWlkIDAgZG9lcyBub3QgdHJpZ2dlciBjYXBhYmlsaXR5LSJmaXh1cCIuCisgICBXaGVuIHVuc2V0LCB0byBwcm92aWRlIGNvbXBhdGlibGlsaXR5IHdpdGggb2xkIHByb2dyYW1zIHJlbHlpbmcgb24KKyAgIHNldCp1aWQgdG8gZ2Fpbi9sb3NlIHByaXZpbGVnZSwgdHJhbnNpdGlvbnMgdG8vZnJvbSB1aWQgMCBjYXVzZQorICAgY2FwYWJpbGl0aWVzIHRvIGJlIGdhaW5lZC9sb3N0LiAqLworI2RlZmluZSBTRUNVUkVfTk9fU0VUVUlEX0ZJWFVQCQkyCisjZGVmaW5lIFNFQ1VSRV9OT19TRVRVSURfRklYVVBfTE9DS0VECTMgIC8qIG1ha2UgYml0LTIgaW1tdXRhYmxlICovCisKKyNkZWZpbmUgU0VDQklUX05PX1NFVFVJRF9GSVhVUAkoaXNzZWN1cmVfbWFzayhTRUNVUkVfTk9fU0VUVUlEX0ZJWFVQKSkKKyNkZWZpbmUgU0VDQklUX05PX1NFVFVJRF9GSVhVUF9MT0NLRUQgXAorCQkJKGlzc2VjdXJlX21hc2soU0VDVVJFX05PX1NFVFVJRF9GSVhVUF9MT0NLRUQpKQorCisvKiBXaGVuIHNldCwgYSBwcm9jZXNzIGNhbiByZXRhaW4gaXRzIGNhcGFiaWxpdGllcyBldmVuIGFmdGVyCisgICB0cmFuc2l0aW9uaW5nIHRvIGEgbm9uLXJvb3QgdXNlciAodGhlIHNldC11aWQgZml4dXAgc3VwcHJlc3NlZCBieQorICAgYml0IDIpLiBCaXQtNCBpcyBjbGVhcmVkIHdoZW4gYSBwcm9jZXNzIGNhbGxzIGV4ZWMoKTsgc2V0dGluZyBib3RoCisgICBiaXQgNCBhbmQgNSB3aWxsIGNyZWF0ZSBhIGJhcnJpZXIgdGhyb3VnaCBleGVjIHRoYXQgbm8gZXhlYygpJ2QKKyAgIGNoaWxkIGNhbiB1c2UgdGhpcyBmZWF0dXJlIGFnYWluLiAqLworI2RlZmluZSBTRUNVUkVfS0VFUF9DQVBTCQk0CisjZGVmaW5lIFNFQ1VSRV9LRUVQX0NBUFNfTE9DS0VECQk1ICAvKiBtYWtlIGJpdC00IGltbXV0YWJsZSAqLworCisjZGVmaW5lIFNFQ0JJVF9LRUVQX0NBUFMJKGlzc2VjdXJlX21hc2soU0VDVVJFX0tFRVBfQ0FQUykpCisjZGVmaW5lIFNFQ0JJVF9LRUVQX0NBUFNfTE9DS0VEIChpc3NlY3VyZV9tYXNrKFNFQ1VSRV9LRUVQX0NBUFNfTE9DS0VEKSkKKworI2RlZmluZSBTRUNVUkVfQUxMX0JJVFMJCShpc3NlY3VyZV9tYXNrKFNFQ1VSRV9OT1JPT1QpIHwgXAorCQkJCSBpc3NlY3VyZV9tYXNrKFNFQ1VSRV9OT19TRVRVSURfRklYVVApIHwgXAorCQkJCSBpc3NlY3VyZV9tYXNrKFNFQ1VSRV9LRUVQX0NBUFMpKQorI2RlZmluZSBTRUNVUkVfQUxMX0xPQ0tTCShTRUNVUkVfQUxMX0JJVFMgPDwgMSkKKworI2VuZGlmIC8qICFfTElOVVhfU0VDVVJFQklUU19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvc2VsaW51eF9uZXRsaW5rLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvc2VsaW51eF9uZXRsaW5rLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E5YmY2YQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zZWxpbnV4X25ldGxpbmsuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogTmV0bGluayBldmVudCBub3RpZmljYXRpb25zIGZvciBTRUxpbnV4LgorICoKKyAqIEF1dGhvcjogSmFtZXMgTW9ycmlzIDxqbW9ycmlzQHJlZGhhdC5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFJlZCBIYXQsIEluYy4sIEphbWVzIE1vcnJpcyA8am1vcnJpc0ByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9MSU5VWF9TRUxJTlVYX05FVExJTktfSAorI2RlZmluZSBfTElOVVhfU0VMSU5VWF9ORVRMSU5LX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIE1lc3NhZ2UgdHlwZXMuICovCisjZGVmaW5lIFNFTE5MX01TR19CQVNFIDB4MTAKK2VudW0geworCVNFTE5MX01TR19TRVRFTkZPUkNFID0gU0VMTkxfTVNHX0JBU0UsCisJU0VMTkxfTVNHX1BPTElDWUxPQUQsCisJU0VMTkxfTVNHX01BWAorfTsKKworLyogTXVsdGljYXN0IGdyb3VwcyAtIGJhY2t3YXJkcyBjb21wYXRpYmxpbGl0eSBmb3IgdXNlcnNwYWNlICovCisjZGVmaW5lIFNFTE5MX0dSUF9OT05FCQkweDAwMDAwMDAwCisjZGVmaW5lIFNFTE5MX0dSUF9BVkMJCTB4MDAwMDAwMDEJLyogQVZDIG5vdGlmaWNhdGlvbnMgKi8KKyNkZWZpbmUgU0VMTkxfR1JQX0FMTAkJMHhmZmZmZmZmZgorCitlbnVtIHNlbGludXhfbmxncm91cHMgeworCVNFTE5MR1JQX05PTkUsCisjZGVmaW5lIFNFTE5MR1JQX05PTkUJU0VMTkxHUlBfTk9ORQorCVNFTE5MR1JQX0FWQywKKyNkZWZpbmUgU0VMTkxHUlBfQVZDCVNFTE5MR1JQX0FWQworCV9fU0VMTkxHUlBfTUFYCit9OworI2RlZmluZSBTRUxOTEdSUF9NQVgJKF9fU0VMTkxHUlBfTUFYIC0gMSkKKworLyogTWVzc2FnZSBzdHJ1Y3R1cmVzICovCitzdHJ1Y3Qgc2VsbmxfbXNnX3NldGVuZm9yY2UgeworCV9fczMyCQl2YWw7Cit9OworCitzdHJ1Y3Qgc2VsbmxfbXNnX3BvbGljeWxvYWQgeworCV9fdTMyCXNlcW5vOworfTsKKworI2VuZGlmIC8qIF9MSU5VWF9TRUxJTlVYX05FVExJTktfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NlbS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMTk3NGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvc2VtLmgKQEAgLTAsMCArMSw4MCBAQAorI2lmbmRlZiBfTElOVVhfU0VNX0gKKyNkZWZpbmUgX0xJTlVYX1NFTV9ICisKKyNpbmNsdWRlIDxsaW51eC9pcGMuaD4KKworLyogc2Vtb3AgZmxhZ3MgKi8KKyNkZWZpbmUgU0VNX1VORE8gICAgICAgIDB4MTAwMCAgLyogdW5kbyB0aGUgb3BlcmF0aW9uIG9uIGV4aXQgKi8KKworLyogc2VtY3RsIENvbW1hbmQgRGVmaW5pdGlvbnMuICovCisjZGVmaW5lIEdFVFBJRCAgMTEgICAgICAgLyogZ2V0IHNlbXBpZCAqLworI2RlZmluZSBHRVRWQUwgIDEyICAgICAgIC8qIGdldCBzZW12YWwgKi8KKyNkZWZpbmUgR0VUQUxMICAxMyAgICAgICAvKiBnZXQgYWxsIHNlbXZhbCdzICovCisjZGVmaW5lIEdFVE5DTlQgMTQgICAgICAgLyogZ2V0IHNlbW5jbnQgKi8KKyNkZWZpbmUgR0VUWkNOVCAxNSAgICAgICAvKiBnZXQgc2VtemNudCAqLworI2RlZmluZSBTRVRWQUwgIDE2ICAgICAgIC8qIHNldCBzZW12YWwgKi8KKyNkZWZpbmUgU0VUQUxMICAxNyAgICAgICAvKiBzZXQgYWxsIHNlbXZhbCdzICovCisKKy8qIGlwY3MgY3RsIGNtZHMgKi8KKyNkZWZpbmUgU0VNX1NUQVQgMTgKKyNkZWZpbmUgU0VNX0lORk8gMTkKKworLyogT2Jzb2xldGUsIHVzZWQgb25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYW5kIGxpYmM1IGNvbXBpbGVzICovCitzdHJ1Y3Qgc2VtaWRfZHMgeworCXN0cnVjdCBpcGNfcGVybQlzZW1fcGVybTsJCS8qIHBlcm1pc3Npb25zIC4uIHNlZSBpcGMuaCAqLworCV9fa2VybmVsX3RpbWVfdAlzZW1fb3RpbWU7CQkvKiBsYXN0IHNlbW9wIHRpbWUgKi8KKwlfX2tlcm5lbF90aW1lX3QJc2VtX2N0aW1lOwkJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCXN0cnVjdCBzZW0JKnNlbV9iYXNlOwkJLyogcHRyIHRvIGZpcnN0IHNlbWFwaG9yZSBpbiBhcnJheSAqLworCXN0cnVjdCBzZW1fcXVldWUgKnNlbV9wZW5kaW5nOwkJLyogcGVuZGluZyBvcGVyYXRpb25zIHRvIGJlIHByb2Nlc3NlZCAqLworCXN0cnVjdCBzZW1fcXVldWUgKipzZW1fcGVuZGluZ19sYXN0OwkvKiBsYXN0IHBlbmRpbmcgb3BlcmF0aW9uICovCisJc3RydWN0IHNlbV91bmRvCSp1bmRvOwkJCS8qIHVuZG8gcmVxdWVzdHMgb24gdGhpcyBhcnJheSAqLworCXVuc2lnbmVkIHNob3J0CXNlbV9uc2VtczsJCS8qIG5vLiBvZiBzZW1hcGhvcmVzIGluIGFycmF5ICovCit9OworCisvKiBJbmNsdWRlIHRoZSBkZWZpbml0aW9uIG9mIHNlbWlkNjRfZHMgKi8KKyNpbmNsdWRlIDxhc20vc2VtYnVmLmg+CisKKy8qIHNlbW9wIHN5c3RlbSBjYWxscyB0YWtlcyBhbiBhcnJheSBvZiB0aGVzZS4gKi8KK3N0cnVjdCBzZW1idWYgeworCXVuc2lnbmVkIHNob3J0ICBzZW1fbnVtOwkvKiBzZW1hcGhvcmUgaW5kZXggaW4gYXJyYXkgKi8KKwlzaG9ydAkJc2VtX29wOwkJLyogc2VtYXBob3JlIG9wZXJhdGlvbiAqLworCXNob3J0CQlzZW1fZmxnOwkvKiBvcGVyYXRpb24gZmxhZ3MgKi8KK307CisKKy8qIGFyZyBmb3Igc2VtY3RsIHN5c3RlbSBjYWxscy4gKi8KK3VuaW9uIHNlbXVuIHsKKwlpbnQgdmFsOwkJCS8qIHZhbHVlIGZvciBTRVRWQUwgKi8KKwlzdHJ1Y3Qgc2VtaWRfZHMgKmJ1ZjsJLyogYnVmZmVyIGZvciBJUENfU1RBVCAmIElQQ19TRVQgKi8KKwl1bnNpZ25lZCBzaG9ydCAqYXJyYXk7CS8qIGFycmF5IGZvciBHRVRBTEwgJiBTRVRBTEwgKi8KKwlzdHJ1Y3Qgc2VtaW5mbyAqX19idWY7CS8qIGJ1ZmZlciBmb3IgSVBDX0lORk8gKi8KKwl2b2lkICpfX3BhZDsKK307CisKK3N0cnVjdCAgc2VtaW5mbyB7CisJaW50IHNlbW1hcDsKKwlpbnQgc2VtbW5pOworCWludCBzZW1tbnM7CisJaW50IHNlbW1udTsKKwlpbnQgc2VtbXNsOworCWludCBzZW1vcG07CisJaW50IHNlbXVtZTsKKwlpbnQgc2VtdXN6OworCWludCBzZW12bXg7CisJaW50IHNlbWFlbTsKK307CisKKyNkZWZpbmUgU0VNTU5JICAxMjggICAgICAgICAgICAgLyogPD0gSVBDTU5JICBtYXggIyBvZiBzZW1hcGhvcmUgaWRlbnRpZmllcnMgKi8KKyNkZWZpbmUgU0VNTVNMICAyNTAgICAgICAgICAgICAgLyogPD0gOCAwMDAgbWF4IG51bSBvZiBzZW1hcGhvcmVzIHBlciBpZCAqLworI2RlZmluZSBTRU1NTlMgIChTRU1NTkkqU0VNTVNMKSAvKiA8PSBJTlRfTUFYIG1heCAjIG9mIHNlbWFwaG9yZXMgaW4gc3lzdGVtICovCisjZGVmaW5lIFNFTU9QTSAgMzIJICAgICAgICAvKiA8PSAxIDAwMCBtYXggbnVtIG9mIG9wcyBwZXIgc2Vtb3AgY2FsbCAqLworI2RlZmluZSBTRU1WTVggIDMyNzY3ICAgICAgICAgICAvKiA8PSAzMjc2NyBzZW1hcGhvcmUgbWF4aW11bSB2YWx1ZSAqLworI2RlZmluZSBTRU1BRU0gIFNFTVZNWCAgICAgICAgICAvKiBhZGp1c3Qgb24gZXhpdCBtYXggdmFsdWUgKi8KKworLyogdW51c2VkICovCisjZGVmaW5lIFNFTVVNRSAgU0VNT1BNICAgICAgICAgIC8qIG1heCBudW0gb2YgdW5kbyBlbnRyaWVzIHBlciBwcm9jZXNzICovCisjZGVmaW5lIFNFTU1OVSAgU0VNTU5TICAgICAgICAgIC8qIG51bSBvZiB1bmRvIHN0cnVjdHVyZXMgc3lzdGVtIHdpZGUgKi8KKyNkZWZpbmUgU0VNTUFQICBTRU1NTlMgICAgICAgICAgLyogIyBvZiBlbnRyaWVzIGluIHNlbWFwaG9yZSBtYXAgKi8KKyNkZWZpbmUgU0VNVVNaICAyMAkJLyogc2l6ZW9mIHN0cnVjdCBzZW1fdW5kbyAqLworCisKKyNlbmRpZiAvKiBfTElOVVhfU0VNX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zZXJpYWwuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zZXJpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmYwYTlhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NlcmlhbC5oCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogaW5jbHVkZS9saW51eC9zZXJpYWwuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MiBieSBUaGVvZG9yZSBUcydvLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIAorICogUHVibGljIExpY2Vuc2UgKEdQTCkKKyAqLworCisjaWZuZGVmIF9MSU5VWF9TRVJJQUxfSAorI2RlZmluZSBfTElOVVhfU0VSSUFMX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKworc3RydWN0IHNlcmlhbF9zdHJ1Y3QgeworCWludAl0eXBlOworCWludAlsaW5lOworCXVuc2lnbmVkIGludAlwb3J0OworCWludAlpcnE7CisJaW50CWZsYWdzOworCWludAl4bWl0X2ZpZm9fc2l6ZTsKKwlpbnQJY3VzdG9tX2Rpdmlzb3I7CisJaW50CWJhdWRfYmFzZTsKKwl1bnNpZ25lZCBzaG9ydAljbG9zZV9kZWxheTsKKwljaGFyCWlvX3R5cGU7CisJY2hhcglyZXNlcnZlZF9jaGFyWzFdOworCWludAlodWI2OworCXVuc2lnbmVkIHNob3J0CWNsb3Npbmdfd2FpdDsgLyogdGltZSB0byB3YWl0IGJlZm9yZSBjbG9zaW5nICovCisJdW5zaWduZWQgc2hvcnQJY2xvc2luZ193YWl0MjsgLyogbm8gbG9uZ2VyIHVzZWQuLi4gKi8KKwl1bnNpZ25lZCBjaGFyCSppb21lbV9iYXNlOworCXVuc2lnbmVkIHNob3J0CWlvbWVtX3JlZ19zaGlmdDsKKwl1bnNpZ25lZCBpbnQJcG9ydF9oaWdoOworCXVuc2lnbmVkIGxvbmcJaW9tYXBfYmFzZTsJLyogY29va2llIHBhc3NlZCBpbnRvIGlvcmVtYXAgKi8KK307CisKKy8qCisgKiBGb3IgdGhlIGNsb3NlIHdhaXQgdGltZXMsIDAgbWVhbnMgd2FpdCBmb3JldmVyIGZvciBzZXJpYWwgcG9ydCB0bworICogZmx1c2ggaXRzIG91dHB1dC4gIDY1NTM1IG1lYW5zIGRvbid0IHdhaXQgYXQgYWxsLgorICovCisjZGVmaW5lIEFTWU5DX0NMT1NJTkdfV0FJVF9JTkYJMAorI2RlZmluZSBBU1lOQ19DTE9TSU5HX1dBSVRfTk9ORQk2NTUzNQorCisvKgorICogVGhlc2UgYXJlIHRoZSBzdXBwb3J0ZWQgc2VyaWFsIHR5cGVzLgorICovCisjZGVmaW5lIFBPUlRfVU5LTk9XTgkwCisjZGVmaW5lIFBPUlRfODI1MAkxCisjZGVmaW5lIFBPUlRfMTY0NTAJMgorI2RlZmluZSBQT1JUXzE2NTUwCTMKKyNkZWZpbmUgUE9SVF8xNjU1MEEJNAorI2RlZmluZSBQT1JUX0NJUlJVUyAgICAgNQkvKiB1c3VycGVkIGJ5IGN5Y2xhZGVzLmMgKi8KKyNkZWZpbmUgUE9SVF8xNjY1MAk2CisjZGVmaW5lIFBPUlRfMTY2NTBWMgk3CisjZGVmaW5lIFBPUlRfMTY3NTAJOAorI2RlZmluZSBQT1JUX1NUQVJURUNICTkJLyogdXN1cnBlZCBieSBjeWNsYWRlcy5jICovCisjZGVmaW5lIFBPUlRfMTZDOTUwCTEwCS8qIE94Zm9yZCBTZW1pY29uZHVjdG9yICovCisjZGVmaW5lIFBPUlRfMTY2NTQJMTEKKyNkZWZpbmUgUE9SVF8xNjg1MAkxMgorI2RlZmluZSBQT1JUX1JTQQkxMwkvKiBSU0EtRFYgSUkvUyBjYXJkICovCisjZGVmaW5lIFBPUlRfTUFYCTEzCisKKyNkZWZpbmUgU0VSSUFMX0lPX1BPUlQJMAorI2RlZmluZSBTRVJJQUxfSU9fSFVCNgkxCisjZGVmaW5lIFNFUklBTF9JT19NRU0JMgorCitzdHJ1Y3Qgc2VyaWFsX3VhcnRfY29uZmlnIHsKKwljaGFyCSpuYW1lOworCWludAlkZmxfeG1pdF9maWZvX3NpemU7CisJaW50CWZsYWdzOworfTsKKworI2RlZmluZSBVQVJUX0NMRUFSX0ZJRk8JCTB4MDEKKyNkZWZpbmUgVUFSVF9VU0VfRklGTwkJMHgwMgorI2RlZmluZSBVQVJUX1NUQVJURUNICQkweDA0CisjZGVmaW5lIFVBUlRfTkFUU0VNSQkJMHgwOAorCisvKgorICogRGVmaW5pdGlvbnMgZm9yIGFzeW5jX3N0cnVjdCAoYW5kIHNlcmlhbF9zdHJ1Y3QpIGZsYWdzIGZpZWxkCisgKgorICogRGVmaW5lIEFTWU5DQl8qIGZvciBjb252ZW5pZW50IHVzZSB3aXRoIHt0ZXN0LHNldCxjbGVhcn1fYml0LgorICovCisjZGVmaW5lIEFTWU5DQl9IVVBfTk9USUZZCSAwIC8qIE5vdGlmeSBnZXR0eSBvbiBoYW5ndXBzIGFuZCBjbG9zZXMKKwkJCQkgICAgKiBvbiB0aGUgY2FsbG91dCBwb3J0ICovCisjZGVmaW5lIEFTWU5DQl9GT1VSUE9SVAkJIDEgLyogU2V0IE9VMSwgT1VUMiBwZXIgQVNUIEZvdXJwb3J0IHNldHRpbmdzICovCisjZGVmaW5lIEFTWU5DQl9TQUsJCSAyIC8qIFNlY3VyZSBBdHRlbnRpb24gS2V5IChPcmFuZ2UgYm9vaykgKi8KKyNkZWZpbmUgQVNZTkNCX1NQTElUX1RFUk1JT1MJIDMgLyogU2VwYXJhdGUgdGVybWlvcyBmb3IgZGlhbGluL2NhbGxvdXQgKi8KKyNkZWZpbmUgQVNZTkNCX1NQRF9ISQkJIDQgLyogVXNlIDU2MDAwIGluc3RlYWQgb2YgMzg0MDAgYnBzICovCisjZGVmaW5lIEFTWU5DQl9TUERfVkhJCQkgNSAvKiBVc2UgMTE1MjAwIGluc3RlYWQgb2YgMzg0MDAgYnBzICovCisjZGVmaW5lIEFTWU5DQl9TS0lQX1RFU1QJIDYgLyogU2tpcCBVQVJUIHRlc3QgZHVyaW5nIGF1dG9jb25maWd1cmF0aW9uICovCisjZGVmaW5lIEFTWU5DQl9BVVRPX0lSUQkJIDcgLyogRG8gYXV0b21hdGljIElSUSBkdXJpbmcKKwkJCQkgICAgKiBhdXRvY29uZmlndXJhdGlvbiAqLworI2RlZmluZSBBU1lOQ0JfU0VTU0lPTl9MT0NLT1VUCSA4IC8qIExvY2sgb3V0IGN1YSBvcGVucyBiYXNlZCBvbiBzZXNzaW9uICovCisjZGVmaW5lIEFTWU5DQl9QR1JQX0xPQ0tPVVQJIDkgLyogTG9jayBvdXQgY3VhIG9wZW5zIGJhc2VkIG9uIHBncnAgKi8KKyNkZWZpbmUgQVNZTkNCX0NBTExPVVRfTk9IVVAJMTAgLyogRG9uJ3QgZG8gaGFuZ3VwcyBmb3IgY3VhIGRldmljZSAqLworI2RlZmluZSBBU1lOQ0JfSEFSRFBQU19DRAkxMSAvKiBDYWxsIGhhcmRwcHMgd2hlbiBDRCBnb2VzIGhpZ2ggICovCisjZGVmaW5lIEFTWU5DQl9TUERfU0hJCQkxMiAvKiBVc2UgMjMwNDAwIGluc3RlYWQgb2YgMzg0MDAgYnBzICovCisjZGVmaW5lIEFTWU5DQl9MT1dfTEFURU5DWQkxMyAvKiBSZXF1ZXN0IGxvdyBsYXRlbmN5IGJlaGF2aW91ciAqLworI2RlZmluZSBBU1lOQ0JfQlVHR1lfVUFSVAkxNCAvKiBUaGlzIGlzIGEgYnVnZ3kgVUFSVCwgc2tpcCBzb21lIHNhZmV0eQorCQkJCSAgICAqIGNoZWNrcy4gIE5vdGU6IGNhbiBiZSBkYW5nZXJvdXMhICovCisjZGVmaW5lIEFTWU5DQl9BVVRPUFJPQkUJMTUgLyogUG9ydCB3YXMgYXV0b3Byb2JlZCBieSBQQ0kgb3IgUE5QIGNvZGUgKi8KKyNkZWZpbmUgQVNZTkNCX0xBU1RfVVNFUgkxNQorCisvKiBJbnRlcm5hbCBmbGFncyB1c2VkIG9ubHkgYnkga2VybmVsICovCisjZGVmaW5lIEFTWU5DQl9JTklUSUFMSVpFRAkzMSAvKiBTZXJpYWwgcG9ydCB3YXMgaW5pdGlhbGl6ZWQgKi8KKyNkZWZpbmUgQVNZTkNCX1NVU1BFTkRFRAkzMCAvKiBTZXJpYWwgcG9ydCBpcyBzdXNwZW5kZWQgKi8KKyNkZWZpbmUgQVNZTkNCX05PUk1BTF9BQ1RJVkUJMjkgLyogTm9ybWFsIGRldmljZSBpcyBhY3RpdmUgKi8KKyNkZWZpbmUgQVNZTkNCX0JPT1RfQVVUT0NPTkYJMjggLyogQXV0b2NvbmZpZ3VyZSBwb3J0IG9uIGJvb3R1cCAqLworI2RlZmluZSBBU1lOQ0JfQ0xPU0lORwkJMjcgLyogU2VyaWFsIHBvcnQgaXMgY2xvc2luZyAqLworI2RlZmluZSBBU1lOQ0JfQ1RTX0ZMT1cJCTI2IC8qIERvIENUUyBmbG93IGNvbnRyb2wgKi8KKyNkZWZpbmUgQVNZTkNCX0NIRUNLX0NECQkyNSAvKiBpLmUuLCBDTE9DQUwgKi8KKyNkZWZpbmUgQVNZTkNCX1NIQVJFX0lSUQkyNCAvKiBmb3IgbXVsdGlmdW5jdGlvbiBjYXJkcywgbm8gbG9uZ2VyIHVzZWQgKi8KKyNkZWZpbmUgQVNZTkNCX0NPTlNfRkxPVwkyMyAvKiBmbG93IGNvbnRyb2wgZm9yIGNvbnNvbGUgICovCisjZGVmaW5lIEFTWU5DQl9CT09UX09OTFlNQ0EJMjIgLyogUHJvYmUgb25seSBpZiBNQ0EgYnVzICovCisjZGVmaW5lIEFTWU5DQl9GSVJTVF9LRVJORUwJMjIKKworI2RlZmluZSBBU1lOQ19IVVBfTk9USUZZCSgxVSA8PCBBU1lOQ0JfSFVQX05PVElGWSkKKyNkZWZpbmUgQVNZTkNfU1VTUEVOREVECQkoMVUgPDwgQVNZTkNCX1NVU1BFTkRFRCkKKyNkZWZpbmUgQVNZTkNfRk9VUlBPUlQJCSgxVSA8PCBBU1lOQ0JfRk9VUlBPUlQpCisjZGVmaW5lIEFTWU5DX1NBSwkJKDFVIDw8IEFTWU5DQl9TQUspCisjZGVmaW5lIEFTWU5DX1NQTElUX1RFUk1JT1MJKDFVIDw8IEFTWU5DQl9TUExJVF9URVJNSU9TKQorI2RlZmluZSBBU1lOQ19TUERfSEkJCSgxVSA8PCBBU1lOQ0JfU1BEX0hJKQorI2RlZmluZSBBU1lOQ19TUERfVkhJCQkoMVUgPDwgQVNZTkNCX1NQRF9WSEkpCisjZGVmaW5lIEFTWU5DX1NLSVBfVEVTVAkJKDFVIDw8IEFTWU5DQl9TS0lQX1RFU1QpCisjZGVmaW5lIEFTWU5DX0FVVE9fSVJRCQkoMVUgPDwgQVNZTkNCX0FVVE9fSVJRKQorI2RlZmluZSBBU1lOQ19TRVNTSU9OX0xPQ0tPVVQJKDFVIDw8IEFTWU5DQl9TRVNTSU9OX0xPQ0tPVVQpCisjZGVmaW5lIEFTWU5DX1BHUlBfTE9DS09VVAkoMVUgPDwgQVNZTkNCX1BHUlBfTE9DS09VVCkKKyNkZWZpbmUgQVNZTkNfQ0FMTE9VVF9OT0hVUAkoMVUgPDwgQVNZTkNCX0NBTExPVVRfTk9IVVApCisjZGVmaW5lIEFTWU5DX0hBUkRQUFNfQ0QJKDFVIDw8IEFTWU5DQl9IQVJEUFBTX0NEKQorI2RlZmluZSBBU1lOQ19TUERfU0hJCQkoMVUgPDwgQVNZTkNCX1NQRF9TSEkpCisjZGVmaW5lIEFTWU5DX0xPV19MQVRFTkNZCSgxVSA8PCBBU1lOQ0JfTE9XX0xBVEVOQ1kpCisjZGVmaW5lIEFTWU5DX0JVR0dZX1VBUlQJKDFVIDw8IEFTWU5DQl9CVUdHWV9VQVJUKQorI2RlZmluZSBBU1lOQ19BVVRPUFJPQkUJCSgxVSA8PCBBU1lOQ0JfQVVUT1BST0JFKQorCisjZGVmaW5lIEFTWU5DX0ZMQUdTCQkoKDFVIDw8IChBU1lOQ0JfTEFTVF9VU0VSICsgMSkpIC0gMSkKKyNkZWZpbmUgQVNZTkNfVVNSX01BU0sJCShBU1lOQ19TUERfSEl8QVNZTkNfU1BEX1ZISXwgXAorCQlBU1lOQ19DQUxMT1VUX05PSFVQfEFTWU5DX1NQRF9TSEl8QVNZTkNfTE9XX0xBVEVOQ1kpCisjZGVmaW5lIEFTWU5DX1NQRF9DVVNUCQkoQVNZTkNfU1BEX0hJfEFTWU5DX1NQRF9WSEkpCisjZGVmaW5lIEFTWU5DX1NQRF9XQVJQCQkoQVNZTkNfU1BEX0hJfEFTWU5DX1NQRF9TSEkpCisjZGVmaW5lIEFTWU5DX1NQRF9NQVNLCQkoQVNZTkNfU1BEX0hJfEFTWU5DX1NQRF9WSEl8QVNZTkNfU1BEX1NISSkKKworI2RlZmluZSBBU1lOQ19JTklUSUFMSVpFRAkoMVUgPDwgQVNZTkNCX0lOSVRJQUxJWkVEKQorI2RlZmluZSBBU1lOQ19OT1JNQUxfQUNUSVZFCSgxVSA8PCBBU1lOQ0JfTk9STUFMX0FDVElWRSkKKyNkZWZpbmUgQVNZTkNfQk9PVF9BVVRPQ09ORgkoMVUgPDwgQVNZTkNCX0JPT1RfQVVUT0NPTkYpCisjZGVmaW5lIEFTWU5DX0NMT1NJTkcJCSgxVSA8PCBBU1lOQ0JfQ0xPU0lORykKKyNkZWZpbmUgQVNZTkNfQ1RTX0ZMT1cJCSgxVSA8PCBBU1lOQ0JfQ1RTX0ZMT1cpCisjZGVmaW5lIEFTWU5DX0NIRUNLX0NECQkoMVUgPDwgQVNZTkNCX0NIRUNLX0NEKQorI2RlZmluZSBBU1lOQ19TSEFSRV9JUlEJCSgxVSA8PCBBU1lOQ0JfU0hBUkVfSVJRKQorI2RlZmluZSBBU1lOQ19DT05TX0ZMT1cJCSgxVSA8PCBBU1lOQ0JfQ09OU19GTE9XKQorI2RlZmluZSBBU1lOQ19CT09UX09OTFlNQ0EJKDFVIDw8IEFTWU5DQl9CT09UX09OTFlNQ0EpCisjZGVmaW5lIEFTWU5DX0lOVEVSTkFMX0ZMQUdTCSh+KCgxVSA8PCBBU1lOQ0JfRklSU1RfS0VSTkVMKSAtIDEpKQorCisvKgorICogTXVsdGlwb3J0IHNlcmlhbCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAtLS0gZXh0ZXJuYWwgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBzZXJpYWxfbXVsdGlwb3J0X3N0cnVjdCB7CisJaW50CQlpcnE7CisJaW50CQlwb3J0MTsKKwl1bnNpZ25lZCBjaGFyCW1hc2sxLCBtYXRjaDE7CisJaW50CQlwb3J0MjsKKwl1bnNpZ25lZCBjaGFyCW1hc2syLCBtYXRjaDI7CisJaW50CQlwb3J0MzsKKwl1bnNpZ25lZCBjaGFyCW1hc2szLCBtYXRjaDM7CisJaW50CQlwb3J0NDsKKwl1bnNpZ25lZCBjaGFyCW1hc2s0LCBtYXRjaDQ7CisJaW50CQlwb3J0X21vbml0b3I7CisJaW50CXJlc2VydmVkWzMyXTsKK307CisKKy8qCisgKiBTZXJpYWwgaW5wdXQgaW50ZXJydXB0IGxpbmUgY291bnRlcnMgLS0gZXh0ZXJuYWwgc3RydWN0dXJlCisgKiBGb3VyIGxpbmVzIGNhbiBpbnRlcnJ1cHQ6IENUUywgRFNSLCBSSSwgRENECisgKi8KK3N0cnVjdCBzZXJpYWxfaWNvdW50ZXJfc3RydWN0IHsKKwlpbnQgY3RzLCBkc3IsIHJuZywgZGNkOworCWludCByeCwgdHg7CisJaW50IGZyYW1lLCBvdmVycnVuLCBwYXJpdHksIGJyazsKKwlpbnQgYnVmX292ZXJydW47CisJaW50IHJlc2VydmVkWzldOworfTsKKworLyoKKyAqIFNlcmlhbCBpbnRlcmZhY2UgZm9yIGNvbnRyb2xsaW5nIFJTNDg1IHNldHRpbmdzIG9uIGNoaXBzIHdpdGggc3VpdGFibGUKKyAqIHN1cHBvcnQuIFNldCB3aXRoIFRJT0NTUlM0ODUgYW5kIGdldCB3aXRoIFRJT0NHUlM0ODUgaWYgc3VwcG9ydGVkIGJ5IHlvdXIKKyAqIHBsYXRmb3JtLiBUaGUgc2V0IGZ1bmN0aW9uIHJldHVybnMgdGhlIG5ldyBzdGF0ZSwgd2l0aCBhbnkgdW5zdXBwb3J0ZWQgYml0cworICogcmV2ZXJ0ZWQgYXBwcm9wcmlhdGVseS4KKyAqLworCitzdHJ1Y3Qgc2VyaWFsX3JzNDg1IHsKKwlfX3UzMglmbGFnczsJCQkvKiBSUzQ4NSBmZWF0dXJlIGZsYWdzICovCisjZGVmaW5lIFNFUl9SUzQ4NV9FTkFCTEVECQkoMSA8PCAwKQorI2RlZmluZSBTRVJfUlM0ODVfUlRTX09OX1NFTkQJCSgxIDw8IDEpCisjZGVmaW5lIFNFUl9SUzQ4NV9SVFNfQUZURVJfU0VORAkoMSA8PCAyKQorI2RlZmluZSBTRVJfUlM0ODVfUlRTX0JFRk9SRV9TRU5ECSgxIDw8IDMpCisJX191MzIJZGVsYXlfcnRzX2JlZm9yZV9zZW5kOwkvKiBNaWxsaXNlY29uZHMgKi8KKwlfX3UzMglkZWxheV9ydHNfYWZ0ZXJfc2VuZDsJLyogTWlsbGlzZWNvbmRzICovCisJX191MzIJcGFkZGluZ1s1XTsJCS8qIE1lbW9yeSBpcyBjaGVhcCwgbmV3IHN0cnVjdHMKKwkJCQkJICAgYXJlIGEgcm95YWwgUElUQSAuLiAqLworfTsKKworI2VuZGlmIC8qIF9MSU5VWF9TRVJJQUxfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjBkN2IzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKQEAgLTAsMCArMSwyMDMgQEAKKy8qCisgKiAgbGludXgvZHJpdmVycy9jaGFyL3NlcmlhbF9jb3JlLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBMSU5VWF9TRVJJQUxfQ09SRV9ICisjZGVmaW5lIExJTlVYX1NFUklBTF9DT1JFX0gKKworI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorCisvKgorICogVGhlIHR5cGUgZGVmaW5pdGlvbnMuICBUaGVzZSBhcmUgZnJvbSBUZWQgVHMnbydzIHNlcmlhbC5oCisgKi8KKyNkZWZpbmUgUE9SVF9VTktOT1dOCTAKKyNkZWZpbmUgUE9SVF84MjUwCTEKKyNkZWZpbmUgUE9SVF8xNjQ1MAkyCisjZGVmaW5lIFBPUlRfMTY1NTAJMworI2RlZmluZSBQT1JUXzE2NTUwQQk0CisjZGVmaW5lIFBPUlRfQ0lSUlVTCTUKKyNkZWZpbmUgUE9SVF8xNjY1MAk2CisjZGVmaW5lIFBPUlRfMTY2NTBWMgk3CisjZGVmaW5lIFBPUlRfMTY3NTAJOAorI2RlZmluZSBQT1JUX1NUQVJURUNICTkKKyNkZWZpbmUgUE9SVF8xNkM5NTAJMTAKKyNkZWZpbmUgUE9SVF8xNjY1NAkxMQorI2RlZmluZSBQT1JUXzE2ODUwCTEyCisjZGVmaW5lIFBPUlRfUlNBCTEzCisjZGVmaW5lIFBPUlRfTlMxNjU1MEEJMTQKKyNkZWZpbmUgUE9SVF9YU0NBTEUJMTUKKyNkZWZpbmUgUE9SVF9STTkwMDAJMTYJLyogUE1DLVNpZXJyYSBSTTl4eHggaW50ZXJuYWwgVUFSVCAqLworI2RlZmluZSBQT1JUX09DVEVPTgkxNwkvKiBDYXZpdW0gT0NURU9OIGludGVybmFsIFVBUlQgKi8KKyNkZWZpbmUgUE9SVF9BUjcJMTgJLyogVGV4YXMgSW5zdHJ1bWVudHMgQVI3IGludGVybmFsIFVBUlQgKi8KKyNkZWZpbmUgUE9SVF9VNl8xNjU1MEEJMTkJLyogU1QtRXJpY3Nzb24gVTZ4eHggaW50ZXJuYWwgVUFSVCAqLworI2RlZmluZSBQT1JUX01BWF84MjUwCTE5CS8qIG1heCBwb3J0IElEICovCisKKy8qCisgKiBBUk0gc3BlY2lmaWMgdHlwZSBudW1iZXJzLiAgVGhlc2UgYXJlIG5vdCBjdXJyZW50bHkgZ3VhcmFudGVlZAorICogdG8gYmUgaW1wbGVtZW50ZWQsIGFuZCB3aWxsIGNoYW5nZSBpbiB0aGUgZnV0dXJlLiAgVGhlc2UgYXJlCisgKiBzZXBhcmF0ZSBzbyBhbnkgYWRkaXRpb25zIHRvIHRoZSBvbGQgc2VyaWFsLmMgdGhhdCBvY2N1ciBiZWZvcmUKKyAqIHdlIGFyZSBtZXJnZWQgY2FuIGJlIGVhc2lseSBtZXJnZWQgaGVyZS4KKyAqLworI2RlZmluZSBQT1JUX1BYQQkzMQorI2RlZmluZSBQT1JUX0FNQkEJMzIKKyNkZWZpbmUgUE9SVF9DTFBTNzExWAkzMworI2RlZmluZSBQT1JUX1NBMTEwMAkzNAorI2RlZmluZSBQT1JUX1VBUlQwMAkzNQorI2RlZmluZSBQT1JUXzIxMjg1CTM3CisKKy8qIFNwYXJjIHR5cGUgbnVtYmVycy4gICovCisjZGVmaW5lIFBPUlRfU1VOWklMT0cJMzgKKyNkZWZpbmUgUE9SVF9TVU5TQUIJMzkKKworLyogREVDICovCisjZGVmaW5lIFBPUlRfRFoJCTQ2CisjZGVmaW5lIFBPUlRfWlMJCTQ3CisKKy8qIFBhcmlzYyB0eXBlIG51bWJlcnMuICovCisjZGVmaW5lIFBPUlRfTVVYCTQ4CisKKy8qIEF0bWVsIEFUOTEgLyBBVDMyIFNvQyAqLworI2RlZmluZSBQT1JUX0FUTUVMCTQ5CisKKy8qIE1hY2ludG9zaCBaaWxvZyB0eXBlIG51bWJlcnMgKi8KKyNkZWZpbmUgUE9SVF9NQUNfWklMT0cJNTAJLyogbTY4ayA6IG5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgUE9SVF9QTUFDX1pJTE9HCTUxCisKKy8qIFNILVNDSSAqLworI2RlZmluZSBQT1JUX1NDSQk1MgorI2RlZmluZSBQT1JUX1NDSUYJNTMKKyNkZWZpbmUgUE9SVF9JUkRBCTU0CisKKy8qIFNhbXN1bmcgUzNDMjQxMCBTb0MgYW5kIGRlcml2YXRpdmVzIHRoZXJlb2YgKi8KKyNkZWZpbmUgUE9SVF9TM0MyNDEwICAgIDU1CisKKy8qIFNHSSBJUDIyIGFrYSBJbmR5IC8gQ2hhbGxlbmdlIFMgLyBJbmRpZ28gMiAqLworI2RlZmluZSBQT1JUX0lQMjJaSUxPRwk1NgorCisvKiBTaGFycCBMSDdhNDB4IC0tIGFuIEFSTTkgU29DIHNlcmllcyAqLworI2RlZmluZSBQT1JUX0xIN0E0MFgJNTcKKworLyogUFBDIENQTSB0eXBlIG51bWJlciAqLworI2RlZmluZSBQT1JUX0NQTSAgICAgICAgNTgKKworLyogTVBDNTJ4eCB0eXBlIG51bWJlcnMgKi8KKyNkZWZpbmUgUE9SVF9NUEM1Mnh4CTU5CisKKy8qIElCTSBpY29tICovCisjZGVmaW5lIFBPUlRfSUNPTQk2MAorCisvKiBTYW1zdW5nIFMzQzI0NDAgU29DICovCisjZGVmaW5lIFBPUlRfUzNDMjQ0MAk2MQorCisvKiBNb3Rvcm9sYSBpLk1YIFNvQyAqLworI2RlZmluZSBQT1JUX0lNWAk2MgorCisvKiBNYXJ2ZWxsIE1QU0MgKi8KKyNkZWZpbmUgUE9SVF9NUFNDCTYzCisKKy8qIFRYWDkgdHlwZSBudW1iZXIgKi8KKyNkZWZpbmUgUE9SVF9UWFg5CTY0CisKKy8qIE5FQyBWUjQxMDAgc2VyaWVzIFNJVS9EU0lVICovCisjZGVmaW5lIFBPUlRfVlI0MVhYX1NJVQkJNjUKKyNkZWZpbmUgUE9SVF9WUjQxWFhfRFNJVQk2NgorCisvKiBTYW1zdW5nIFMzQzI0MDAgU29DICovCisjZGVmaW5lIFBPUlRfUzNDMjQwMAk2NworCisvKiBNMzJSIFNJTyAqLworI2RlZmluZSBQT1JUX00zMlJfU0lPCTY4CisKKy8qRGlnaSBqc20gKi8KKyNkZWZpbmUgUE9SVF9KU00gICAgICAgIDY5CisKKyNkZWZpbmUgUE9SVF9QTlg4WFhYCTcwCisKKy8qIEhpbHNjaGVyIG5ldHggKi8KKyNkZWZpbmUgUE9SVF9ORVRYCTcxCisKKy8qIFNVTjRWIEh5cGVydmlzb3IgQ29uc29sZSAqLworI2RlZmluZSBQT1JUX1NVTkhWCTcyCisKKyNkZWZpbmUgUE9SVF9TM0MyNDEyCTczCisKKy8qIFhpbGlueCB1YXJ0bGl0ZSAqLworI2RlZmluZSBQT1JUX1VBUlRMSVRFCTc0CisKKy8qIEJsYWNrZmluIGJmNXh4ICovCisjZGVmaW5lIFBPUlRfQkZJTgk3NQorCisvKiBNaWNyZWwgS1M4Njk1ICovCisjZGVmaW5lIFBPUlRfS1M4Njk1CTc2CisKKy8qIEJyb2FkY29tIFNCMTI1MCwgZXRjLiBTT0MgKi8KKyNkZWZpbmUgUE9SVF9TQjEyNTBfRFVBUlQJNzcKKworLyogRnJlZXNjYWxlIENvbGRGaXJlICovCisjZGVmaW5lIFBPUlRfTUNGCTc4CisKKy8qIEJsYWNrZmluIFNQT1JUICovCisjZGVmaW5lIFBPUlRfQkZJTl9TUE9SVAkJNzkKKworLyogTU4xMDMwMCBvbi1jaGlwIFVBUlQgbnVtYmVycyAqLworI2RlZmluZSBQT1JUX01OMTAzMDAJCTgwCisjZGVmaW5lIFBPUlRfTU4xMDMwMF9DVFMJODEKKworI2RlZmluZSBQT1JUX1NDMjZYWAk4MgorCisvKiBTSC1TQ0kgKi8KKyNkZWZpbmUgUE9SVF9TQ0lGQQk4MworCisjZGVmaW5lIFBPUlRfUzNDNjQwMAk4NAorCisvKiBOV1BTRVJJQUwgKi8KKyNkZWZpbmUgUE9SVF9OV1BTRVJJQUwJODUKKworLyogTUFYMzEwMCAqLworI2RlZmluZSBQT1JUX01BWDMxMDAgICAgODYKKworLyogVGltYmVyZGFsZSBVQVJUICovCisjZGVmaW5lIFBPUlRfVElNQlVBUlQJODcKKworLyogUXVhbGNvbW0gTVNNIFNvQ3MgKi8KKyNkZWZpbmUgUE9SVF9NU00JODgKKworLyogQkNNNjN4eCBmYW1pbHkgU29DcyAqLworI2RlZmluZSBQT1JUX0JDTTYzWFgJODkKKworLyogQWVyb2ZsZXggR2Fpc2xlciBHUkxJQiBBUEJVQVJUICovCisjZGVmaW5lIFBPUlRfQVBCVUFSVCAgICA5MAorCisvKiBBbHRlcmEgVUFSVHMgKi8KKyNkZWZpbmUgUE9SVF9BTFRFUkFfSlRBR1VBUlQJOTEKKyNkZWZpbmUgUE9SVF9BTFRFUkFfVUFSVAk5MgorCisvKiBTSC1TQ0kgKi8KKyNkZWZpbmUgUE9SVF9TQ0lGQgk5MworCisvKiBNQVgzMTA3ICovCisjZGVmaW5lIFBPUlRfTUFYMzEwNwk5NAorCisvKiBIaWdoIFNwZWVkIFVBUlQgZm9yIE1lZGZpZWxkICovCisjZGVmaW5lIFBPUlRfTUZECTk1CisKKy8qIFRJIE9NQVAtVUFSVCAqLworI2RlZmluZSBQT1JUX09NQVAJOTYKKworCisjZW5kaWYgLyogTElOVVhfU0VSSUFMX0NPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NlcmlhbF9yZWcuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zZXJpYWxfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdhMGNlMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zZXJpYWxfcmVnLmgKQEAgLTAsMCArMSwzNDUgQEAKKy8qCisgKiBpbmNsdWRlL2xpbnV4L3NlcmlhbF9yZWcuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MiwgMTk5NCBieSBUaGVvZG9yZSBUcydvLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIAorICogUHVibGljIExpY2Vuc2UgKEdQTCkKKyAqIAorICogVGhlc2UgYXJlIHRoZSBVQVJUIHBvcnQgYXNzaWdubWVudHMsIGV4cHJlc3NlZCBhcyBvZmZzZXRzIGZyb20gdGhlIGJhc2UKKyAqIHJlZ2lzdGVyLiAgVGhlc2UgYXNzaWdubWVudHMgc2hvdWxkIGhvbGQgZm9yIGFueSBzZXJpYWwgcG9ydCBiYXNlZCBvbgorICogYSA4MjUwLCAxNjQ1MCwgb3IgMTY1NTAoQSkuCisgKi8KKworI2lmbmRlZiBfTElOVVhfU0VSSUFMX1JFR19ICisjZGVmaW5lIF9MSU5VWF9TRVJJQUxfUkVHX0gKKworLyoKKyAqIERMQUI9MAorICovCisjZGVmaW5lIFVBUlRfUlgJCTAJLyogSW46ICBSZWNlaXZlIGJ1ZmZlciAqLworI2RlZmluZSBVQVJUX1RYCQkwCS8qIE91dDogVHJhbnNtaXQgYnVmZmVyICovCisKKyNkZWZpbmUgVUFSVF9JRVIJMQkvKiBPdXQ6IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9JRVJfTVNJCQkweDA4IC8qIEVuYWJsZSBNb2RlbSBzdGF0dXMgaW50ZXJydXB0ICovCisjZGVmaW5lIFVBUlRfSUVSX1JMU0kJCTB4MDQgLyogRW5hYmxlIHJlY2VpdmVyIGxpbmUgc3RhdHVzIGludGVycnVwdCAqLworI2RlZmluZSBVQVJUX0lFUl9USFJJCQkweDAyIC8qIEVuYWJsZSBUcmFuc21pdHRlciBob2xkaW5nIHJlZ2lzdGVyIGludC4gKi8KKyNkZWZpbmUgVUFSVF9JRVJfUkRJCQkweDAxIC8qIEVuYWJsZSByZWNlaXZlciBkYXRhIGludGVycnVwdCAqLworLyoKKyAqIFNsZWVwIG1vZGUgZm9yIFNUMTY2NTAgYW5kIFRJMTY3NTAuICBGb3IgdGhlIFNUMTY2NTAsIEVGUls0XT0xCisgKi8KKyNkZWZpbmUgVUFSVF9JRVJYX1NMRUVQCQkweDEwIC8qIEVuYWJsZSBzbGVlcCBtb2RlICovCisKKyNkZWZpbmUgVUFSVF9JSVIJMgkvKiBJbjogIEludGVycnVwdCBJRCBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX0lJUl9OT19JTlQJCTB4MDEgLyogTm8gaW50ZXJydXB0cyBwZW5kaW5nICovCisjZGVmaW5lIFVBUlRfSUlSX0lECQkweDA2IC8qIE1hc2sgZm9yIHRoZSBpbnRlcnJ1cHQgSUQgKi8KKyNkZWZpbmUgVUFSVF9JSVJfTVNJCQkweDAwIC8qIE1vZGVtIHN0YXR1cyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgVUFSVF9JSVJfVEhSSQkJMHgwMiAvKiBUcmFuc21pdHRlciBob2xkaW5nIHJlZ2lzdGVyIGVtcHR5ICovCisjZGVmaW5lIFVBUlRfSUlSX1JESQkJMHgwNCAvKiBSZWNlaXZlciBkYXRhIGludGVycnVwdCAqLworI2RlZmluZSBVQVJUX0lJUl9STFNJCQkweDA2IC8qIFJlY2VpdmVyIGxpbmUgc3RhdHVzIGludGVycnVwdCAqLworCisjZGVmaW5lIFVBUlRfSUlSX0JVU1kJCTB4MDcgLyogRGVzaWduV2FyZSBBUEIgQnVzeSBEZXRlY3QgKi8KKworI2RlZmluZSBVQVJUX0ZDUgkyCS8qIE91dDogRklGTyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfRkNSX0VOQUJMRV9GSUZPCTB4MDEgLyogRW5hYmxlIHRoZSBGSUZPICovCisjZGVmaW5lIFVBUlRfRkNSX0NMRUFSX1JDVlIJMHgwMiAvKiBDbGVhciB0aGUgUkNWUiBGSUZPICovCisjZGVmaW5lIFVBUlRfRkNSX0NMRUFSX1hNSVQJMHgwNCAvKiBDbGVhciB0aGUgWE1JVCBGSUZPICovCisjZGVmaW5lIFVBUlRfRkNSX0RNQV9TRUxFQ1QJMHgwOCAvKiBGb3IgRE1BIGFwcGxpY2F0aW9ucyAqLworLyoKKyAqIE5vdGU6IFRoZSBGSUZPIHRyaWdnZXIgbGV2ZWxzIGFyZSBjaGlwIHNwZWNpZmljOgorICoJUlg6NzYgPSAwMCAgMDEgIDEwICAxMQlUWDo1NCA9IDAwICAwMSAgMTAgIDExCisgKiBQQzE2NTUwRDoJIDEgICA0ICAgOCAgMTQJCXh4ICB4eCAgeHggIHh4CisgKiBUSTE2QzU1MEE6CSAxICAgNCAgIDggIDE0ICAgICAgICAgIHh4ICB4eCAgeHggIHh4CisgKiBUSTE2QzU1MEM6CSAxICAgNCAgIDggIDE0ICAgICAgICAgIHh4ICB4eCAgeHggIHh4CisgKiBTVDE2QzU1MDoJIDEgICA0ICAgOCAgMTQJCXh4ICB4eCAgeHggIHh4CisgKiBTVDE2QzY1MDoJIDggIDE2ICAyNCAgMjgJCTE2ICAgOCAgMjQgIDMwCVBPUlRfMTY2NTBWMgorICogTlMxNkM1NTI6CSAxICAgNCAgIDggIDE0CQl4eCAgeHggIHh4ICB4eAorICogU1QxNkM2NTQ6CSA4ICAxNiAgNTYgIDYwCQkgOCAgMTYgIDMyICA1NglQT1JUXzE2NjU0CisgKiBUSTE2Qzc1MDoJIDEgIDE2ICAzMiAgNTYJCXh4ICB4eCAgeHggIHh4CVBPUlRfMTY3NTAKKyAqIFRJMTZDNzUyOgkgOCAgMTYgIDU2ICA2MAkJIDggIDE2ICAzMiAgNTYKKyAqLworI2RlZmluZSBVQVJUX0ZDUl9SX1RSSUdfMDAJMHgwMAorI2RlZmluZSBVQVJUX0ZDUl9SX1RSSUdfMDEJMHg0MAorI2RlZmluZSBVQVJUX0ZDUl9SX1RSSUdfMTAJMHg4MAorI2RlZmluZSBVQVJUX0ZDUl9SX1RSSUdfMTEJMHhjMAorI2RlZmluZSBVQVJUX0ZDUl9UX1RSSUdfMDAJMHgwMAorI2RlZmluZSBVQVJUX0ZDUl9UX1RSSUdfMDEJMHgxMAorI2RlZmluZSBVQVJUX0ZDUl9UX1RSSUdfMTAJMHgyMAorI2RlZmluZSBVQVJUX0ZDUl9UX1RSSUdfMTEJMHgzMAorCisjZGVmaW5lIFVBUlRfRkNSX1RSSUdHRVJfTUFTSwkweEMwIC8qIE1hc2sgZm9yIHRoZSBGSUZPIHRyaWdnZXIgcmFuZ2UgKi8KKyNkZWZpbmUgVUFSVF9GQ1JfVFJJR0dFUl8xCTB4MDAgLyogTWFzayBmb3IgdHJpZ2dlciBzZXQgYXQgMSAqLworI2RlZmluZSBVQVJUX0ZDUl9UUklHR0VSXzQJMHg0MCAvKiBNYXNrIGZvciB0cmlnZ2VyIHNldCBhdCA0ICovCisjZGVmaW5lIFVBUlRfRkNSX1RSSUdHRVJfOAkweDgwIC8qIE1hc2sgZm9yIHRyaWdnZXIgc2V0IGF0IDggKi8KKyNkZWZpbmUgVUFSVF9GQ1JfVFJJR0dFUl8xNAkweEMwIC8qIE1hc2sgZm9yIHRyaWdnZXIgc2V0IGF0IDE0ICovCisvKiAxNjY1MCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBVQVJUX0ZDUjZfUl9UUklHR0VSXzgJMHgwMCAvKiBNYXNrIGZvciByZWNlaXZlIHRyaWdnZXIgc2V0IGF0IDEgKi8KKyNkZWZpbmUgVUFSVF9GQ1I2X1JfVFJJR0dFUl8xNgkweDQwIC8qIE1hc2sgZm9yIHJlY2VpdmUgdHJpZ2dlciBzZXQgYXQgNCAqLworI2RlZmluZSBVQVJUX0ZDUjZfUl9UUklHR0VSXzI0ICAweDgwIC8qIE1hc2sgZm9yIHJlY2VpdmUgdHJpZ2dlciBzZXQgYXQgOCAqLworI2RlZmluZSBVQVJUX0ZDUjZfUl9UUklHR0VSXzI4CTB4QzAgLyogTWFzayBmb3IgcmVjZWl2ZSB0cmlnZ2VyIHNldCBhdCAxNCAqLworI2RlZmluZSBVQVJUX0ZDUjZfVF9UUklHR0VSXzE2CTB4MDAgLyogTWFzayBmb3IgdHJhbnNtaXQgdHJpZ2dlciBzZXQgYXQgMTYgKi8KKyNkZWZpbmUgVUFSVF9GQ1I2X1RfVFJJR0dFUl84CTB4MTAgLyogTWFzayBmb3IgdHJhbnNtaXQgdHJpZ2dlciBzZXQgYXQgOCAqLworI2RlZmluZSBVQVJUX0ZDUjZfVF9UUklHR0VSXzI0ICAweDIwIC8qIE1hc2sgZm9yIHRyYW5zbWl0IHRyaWdnZXIgc2V0IGF0IDI0ICovCisjZGVmaW5lIFVBUlRfRkNSNl9UX1RSSUdHRVJfMzAJMHgzMCAvKiBNYXNrIGZvciB0cmFuc21pdCB0cmlnZ2VyIHNldCBhdCAzMCAqLworI2RlZmluZSBVQVJUX0ZDUjdfNjRCWVRFCTB4MjAgLyogR28gaW50byA2NCBieXRlIG1vZGUgKFRJMTZDNzUwKSAqLworCisjZGVmaW5lIFVBUlRfTENSCTMJLyogT3V0OiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKi8KKy8qCisgKiBOb3RlOiBpZiB0aGUgd29yZCBsZW5ndGggaXMgNSBiaXRzIChVQVJUX0xDUl9XTEVONSksIHRoZW4gc2V0dGluZyAKKyAqIFVBUlRfTENSX1NUT1Agd2lsbCBzZWxlY3QgMS41IHN0b3AgYml0cywgbm90IDIgc3RvcCBiaXRzLgorICovCisjZGVmaW5lIFVBUlRfTENSX0RMQUIJCTB4ODAgLyogRGl2aXNvciBsYXRjaCBhY2Nlc3MgYml0ICovCisjZGVmaW5lIFVBUlRfTENSX1NCQwkJMHg0MCAvKiBTZXQgYnJlYWsgY29udHJvbCAqLworI2RlZmluZSBVQVJUX0xDUl9TUEFSCQkweDIwIC8qIFN0aWNrIHBhcml0eSAoPykgKi8KKyNkZWZpbmUgVUFSVF9MQ1JfRVBBUgkJMHgxMCAvKiBFdmVuIHBhcml0eSBzZWxlY3QgKi8KKyNkZWZpbmUgVUFSVF9MQ1JfUEFSSVRZCQkweDA4IC8qIFBhcml0eSBFbmFibGUgKi8KKyNkZWZpbmUgVUFSVF9MQ1JfU1RPUAkJMHgwNCAvKiBTdG9wIGJpdHM6IDA9MSBiaXQsIDE9MiBiaXRzICovCisjZGVmaW5lIFVBUlRfTENSX1dMRU41CQkweDAwIC8qIFdvcmRsZW5ndGg6IDUgYml0cyAqLworI2RlZmluZSBVQVJUX0xDUl9XTEVONgkJMHgwMSAvKiBXb3JkbGVuZ3RoOiA2IGJpdHMgKi8KKyNkZWZpbmUgVUFSVF9MQ1JfV0xFTjcJCTB4MDIgLyogV29yZGxlbmd0aDogNyBiaXRzICovCisjZGVmaW5lIFVBUlRfTENSX1dMRU44CQkweDAzIC8qIFdvcmRsZW5ndGg6IDggYml0cyAqLworCisjZGVmaW5lIFVBUlRfTUNSCTQJLyogT3V0OiBNb2RlbSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfTUNSX0NMS1NFTAkJMHg4MCAvKiBEaXZpZGUgY2xvY2sgYnkgNCAoVEkxNkM3NTIsIEVGUls0XT0xKSAqLworI2RlZmluZSBVQVJUX01DUl9UQ1JUTFIJCTB4NDAgLyogQWNjZXNzIFRDUi9UTFIgKFRJMTZDNzUyLCBFRlJbNF09MSkgKi8KKyNkZWZpbmUgVUFSVF9NQ1JfWE9OQU5ZCQkweDIwIC8qIEVuYWJsZSBYb24gQW55IChUSTE2Qzc1MiwgRUZSWzRdPTEpICovCisjZGVmaW5lIFVBUlRfTUNSX0FGRQkJMHgyMCAvKiBFbmFibGUgYXV0by1SVFMvQ1RTIChUSTE2QzU1MEMvVEkxNkM3NTApICovCisjZGVmaW5lIFVBUlRfTUNSX0xPT1AJCTB4MTAgLyogRW5hYmxlIGxvb3BiYWNrIHRlc3QgbW9kZSAqLworI2RlZmluZSBVQVJUX01DUl9PVVQyCQkweDA4IC8qIE91dDIgY29tcGxlbWVudCAqLworI2RlZmluZSBVQVJUX01DUl9PVVQxCQkweDA0IC8qIE91dDEgY29tcGxlbWVudCAqLworI2RlZmluZSBVQVJUX01DUl9SVFMJCTB4MDIgLyogUlRTIGNvbXBsZW1lbnQgKi8KKyNkZWZpbmUgVUFSVF9NQ1JfRFRSCQkweDAxIC8qIERUUiBjb21wbGVtZW50ICovCisKKyNkZWZpbmUgVUFSVF9MU1IJNQkvKiBJbjogIExpbmUgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfTFNSX1RFTVQJCTB4NDAgLyogVHJhbnNtaXR0ZXIgZW1wdHkgKi8KKyNkZWZpbmUgVUFSVF9MU1JfVEhSRQkJMHgyMCAvKiBUcmFuc21pdC1ob2xkLXJlZ2lzdGVyIGVtcHR5ICovCisjZGVmaW5lIFVBUlRfTFNSX0JJCQkweDEwIC8qIEJyZWFrIGludGVycnVwdCBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgVUFSVF9MU1JfRkUJCTB4MDggLyogRnJhbWUgZXJyb3IgaW5kaWNhdG9yICovCisjZGVmaW5lIFVBUlRfTFNSX1BFCQkweDA0IC8qIFBhcml0eSBlcnJvciBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgVUFSVF9MU1JfT0UJCTB4MDIgLyogT3ZlcnJ1biBlcnJvciBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgVUFSVF9MU1JfRFIJCTB4MDEgLyogUmVjZWl2ZXIgZGF0YSByZWFkeSAqLworI2RlZmluZSBVQVJUX0xTUl9CUktfRVJST1JfQklUUwkweDFFIC8qIEJJLCBGRSwgUEUsIE9FIGJpdHMgKi8KKworI2RlZmluZSBVQVJUX01TUgk2CS8qIEluOiAgTW9kZW0gU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfTVNSX0RDRAkJMHg4MCAvKiBEYXRhIENhcnJpZXIgRGV0ZWN0ICovCisjZGVmaW5lIFVBUlRfTVNSX1JJCQkweDQwIC8qIFJpbmcgSW5kaWNhdG9yICovCisjZGVmaW5lIFVBUlRfTVNSX0RTUgkJMHgyMCAvKiBEYXRhIFNldCBSZWFkeSAqLworI2RlZmluZSBVQVJUX01TUl9DVFMJCTB4MTAgLyogQ2xlYXIgdG8gU2VuZCAqLworI2RlZmluZSBVQVJUX01TUl9ERENECQkweDA4IC8qIERlbHRhIERDRCAqLworI2RlZmluZSBVQVJUX01TUl9URVJJCQkweDA0IC8qIFRyYWlsaW5nIGVkZ2UgcmluZyBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgVUFSVF9NU1JfRERTUgkJMHgwMiAvKiBEZWx0YSBEU1IgKi8KKyNkZWZpbmUgVUFSVF9NU1JfRENUUwkJMHgwMSAvKiBEZWx0YSBDVFMgKi8KKyNkZWZpbmUgVUFSVF9NU1JfQU5ZX0RFTFRBCTB4MEYgLyogQW55IG9mIHRoZSBkZWx0YSBiaXRzISAqLworCisjZGVmaW5lIFVBUlRfU0NSCTcJLyogSS9POiBTY3JhdGNoIFJlZ2lzdGVyICovCisKKy8qCisgKiBETEFCPTEKKyAqLworI2RlZmluZSBVQVJUX0RMTAkwCS8qIE91dDogRGl2aXNvciBMYXRjaCBMb3cgKi8KKyNkZWZpbmUgVUFSVF9ETE0JMQkvKiBPdXQ6IERpdmlzb3IgTGF0Y2ggSGlnaCAqLworCisvKgorICogTENSPTB4QkYgKG9yIERMQUI9MSBmb3IgMTZDNjYwKQorICovCisjZGVmaW5lIFVBUlRfRUZSCTIJLyogSS9POiBFeHRlbmRlZCBGZWF0dXJlcyBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX0VGUl9DVFMJCTB4ODAgLyogQ1RTIGZsb3cgY29udHJvbCAqLworI2RlZmluZSBVQVJUX0VGUl9SVFMJCTB4NDAgLyogUlRTIGZsb3cgY29udHJvbCAqLworI2RlZmluZSBVQVJUX0VGUl9TQ0QJCTB4MjAgLyogU3BlY2lhbCBjaGFyYWN0ZXIgZGV0ZWN0ICovCisjZGVmaW5lIFVBUlRfRUZSX0VDQgkJMHgxMCAvKiBFbmhhbmNlZCBjb250cm9sIGJpdCAqLworLyoKKyAqIHRoZSBsb3cgZm91ciBiaXRzIGNvbnRyb2wgc29mdHdhcmUgZmxvdyBjb250cm9sCisgKi8KKworLyoKKyAqIExDUj0weEJGLCBUSTE2Qzc1MiwgU1QxNjY1MCwgU1QxNjY1MEEsIFNUMTY2NTQKKyAqLworI2RlZmluZSBVQVJUX1hPTjEJNAkvKiBJL086IFhvbiBjaGFyYWN0ZXIgMSAqLworI2RlZmluZSBVQVJUX1hPTjIJNQkvKiBJL086IFhvbiBjaGFyYWN0ZXIgMiAqLworI2RlZmluZSBVQVJUX1hPRkYxCTYJLyogSS9POiBYb2ZmIGNoYXJhY3RlciAxICovCisjZGVmaW5lIFVBUlRfWE9GRjIJNwkvKiBJL086IFhvZmYgY2hhcmFjdGVyIDIgKi8KKworLyoKKyAqIEVGUls0XT0xIE1DUls2XT0xLCBUSTE2Qzc1MgorICovCisjZGVmaW5lIFVBUlRfVEk3NTJfVENSCTYJLyogSS9POiB0cmFuc21pc3Npb24gY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBVQVJUX1RJNzUyX1RMUgk3CS8qIEkvTzogdHJpZ2dlciBsZXZlbCByZWdpc3RlciAqLworCisvKgorICogTENSPTB4QkYsIFhSMTZDODV4CisgKi8KKyNkZWZpbmUgVUFSVF9UUkcJMAkvKiBGQ1RSIGJpdCA3IHNlbGVjdHMgUnggb3IgVHgKKwkJCQkgKiBJbjogRmlmbyBjb3VudAorCQkJCSAqIE91dDogRmlmbyBjdXN0b20gdHJpZ2dlciBsZXZlbHMgKi8KKy8qCisgKiBUaGVzZSBhcmUgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgUHJvZ3JhbW1hYmxlIFRyaWdnZXIgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBVQVJUX1RSR18xCQkweDAxCisjZGVmaW5lIFVBUlRfVFJHXzQJCTB4MDQKKyNkZWZpbmUgVUFSVF9UUkdfOAkJMHgwOAorI2RlZmluZSBVQVJUX1RSR18xNgkJMHgxMAorI2RlZmluZSBVQVJUX1RSR18zMgkJMHgyMAorI2RlZmluZSBVQVJUX1RSR182NAkJMHg0MAorI2RlZmluZSBVQVJUX1RSR185NgkJMHg2MAorI2RlZmluZSBVQVJUX1RSR18xMjAJCTB4NzgKKyNkZWZpbmUgVUFSVF9UUkdfMTI4CQkweDgwCisKKyNkZWZpbmUgVUFSVF9GQ1RSCTEJLyogRmVhdHVyZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfRkNUUl9SVFNfTk9ERUxBWQkweDAwICAvKiBSVFMgZmxvdyBjb250cm9sIGRlbGF5ICovCisjZGVmaW5lIFVBUlRfRkNUUl9SVFNfNERFTEFZCTB4MDEKKyNkZWZpbmUgVUFSVF9GQ1RSX1JUU182REVMQVkJMHgwMgorI2RlZmluZSBVQVJUX0ZDVFJfUlRTXzhERUxBWQkweDAzCisjZGVmaW5lIFVBUlRfRkNUUl9JUkRBCQkweDA0ICAvKiBJckRhIGRhdGEgZW5jb2RlIHNlbGVjdCAqLworI2RlZmluZSBVQVJUX0ZDVFJfVFhfSU5UCTB4MDggIC8qIFR4IGludGVycnVwdCB0eXBlIHNlbGVjdCAqLworI2RlZmluZSBVQVJUX0ZDVFJfVFJHQQkJMHgwMCAgLyogVHgvUnggNTUwIHRyaWdnZXIgdGFibGUgc2VsZWN0ICovCisjZGVmaW5lIFVBUlRfRkNUUl9UUkdCCQkweDEwICAvKiBUeC9SeCA2NTAgdHJpZ2dlciB0YWJsZSBzZWxlY3QgKi8KKyNkZWZpbmUgVUFSVF9GQ1RSX1RSR0MJCTB4MjAgIC8qIFR4L1J4IDY1NCB0cmlnZ2VyIHRhYmxlIHNlbGVjdCAqLworI2RlZmluZSBVQVJUX0ZDVFJfVFJHRAkJMHgzMCAgLyogVHgvUnggODUwIHByb2dyYW1tYWJsZSB0cmlnZ2VyIHNlbGVjdCAqLworI2RlZmluZSBVQVJUX0ZDVFJfU0NSX1NXQVAJMHg0MCAgLyogU2NyYXRjaCBwYWQgcmVnaXN0ZXIgc3dhcCAqLworI2RlZmluZSBVQVJUX0ZDVFJfUlgJCTB4MDAgIC8qIFByb2dyYW1tYWJsZSB0cmlnZ2VyIG1vZGUgc2VsZWN0ICovCisjZGVmaW5lIFVBUlRfRkNUUl9UWAkJMHg4MCAgLyogUHJvZ3JhbW1hYmxlIHRyaWdnZXIgbW9kZSBzZWxlY3QgKi8KKworLyoKKyAqIExDUj0weEJGLCBGQ1RSWzZdPTEKKyAqLworI2RlZmluZSBVQVJUX0VNU1IJNwkvKiBFeHRlbmRlZCBNb2RlIFNlbGVjdCBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX0VNU1JfRklGT19DT1VOVAkweDAxICAvKiBSeC9UeCBzZWxlY3QgKi8KKyNkZWZpbmUgVUFSVF9FTVNSX0FMVF9DT1VOVAkweDAyICAvKiBBbHRlcm5hdGluZyBjb3VudCBzZWxlY3QgKi8KKworLyoKKyAqIFRoZSBJbnRlbCBYU2NhbGUgb24tY2hpcCBVQVJUcyBkZWZpbmUgdGhlc2UgYml0cworICovCisjZGVmaW5lIFVBUlRfSUVSX0RNQUUJMHg4MAkvKiBETUEgUmVxdWVzdHMgRW5hYmxlICovCisjZGVmaW5lIFVBUlRfSUVSX1VVRQkweDQwCS8qIFVBUlQgVW5pdCBFbmFibGUgKi8KKyNkZWZpbmUgVUFSVF9JRVJfTlJaRQkweDIwCS8qIE5SWiBjb2RpbmcgRW5hYmxlICovCisjZGVmaW5lIFVBUlRfSUVSX1JUT0lFCTB4MTAJLyogUmVjZWl2ZXIgVGltZSBPdXQgSW50ZXJydXB0IEVuYWJsZSAqLworCisjZGVmaW5lIFVBUlRfSUlSX1RPRAkweDA4CS8qIENoYXJhY3RlciBUaW1lb3V0IEluZGljYXRpb24gRGV0ZWN0ZWQgKi8KKworI2RlZmluZSBVQVJUX0ZDUl9QWEFSMQkweDAwCS8qIHJlY2VpdmUgRklGTyB0aHJlc2hvbGQgPSAxICovCisjZGVmaW5lIFVBUlRfRkNSX1BYQVI4CTB4NDAJLyogcmVjZWl2ZSBGSUZPIHRocmVzaG9sZCA9IDggKi8KKyNkZWZpbmUgVUFSVF9GQ1JfUFhBUjE2CTB4ODAJLyogcmVjZWl2ZSBGSUZPIHRocmVzaG9sZCA9IDE2ICovCisjZGVmaW5lIFVBUlRfRkNSX1BYQVIzMgkweGMwCS8qIHJlY2VpdmUgRklGTyB0aHJlc2hvbGQgPSAzMiAqLworCisvKgorICogSW50ZWwgTUlEIG9uLWNoaXAgSFNVIChIaWdoIFNwZWVkIFVBUlQpIGRlZmluZWQgYml0cworICovCisjZGVmaW5lIFVBUlRfRkNSX0hTVV82NF8xQgkweDAwCS8qIHJlY2VpdmUgRklGTyB0cmVzaG9sZCA9IDEgKi8KKyNkZWZpbmUgVUFSVF9GQ1JfSFNVXzY0XzE2QgkweDQwCS8qIHJlY2VpdmUgRklGTyB0cmVzaG9sZCA9IDE2ICovCisjZGVmaW5lIFVBUlRfRkNSX0hTVV82NF8zMkIJMHg4MAkvKiByZWNlaXZlIEZJRk8gdHJlc2hvbGQgPSAzMiAqLworI2RlZmluZSBVQVJUX0ZDUl9IU1VfNjRfNTZCCTB4YzAJLyogcmVjZWl2ZSBGSUZPIHRyZXNob2xkID0gNTYgKi8KKworI2RlZmluZSBVQVJUX0ZDUl9IU1VfMTZfMUIJMHgwMAkvKiByZWNlaXZlIEZJRk8gdHJlc2hvbGQgPSAxICovCisjZGVmaW5lIFVBUlRfRkNSX0hTVV8xNl80QgkweDQwCS8qIHJlY2VpdmUgRklGTyB0cmVzaG9sZCA9IDQgKi8KKyNkZWZpbmUgVUFSVF9GQ1JfSFNVXzE2XzhCCTB4ODAJLyogcmVjZWl2ZSBGSUZPIHRyZXNob2xkID0gOCAqLworI2RlZmluZSBVQVJUX0ZDUl9IU1VfMTZfMTRCCTB4YzAJLyogcmVjZWl2ZSBGSUZPIHRyZXNob2xkID0gMTQgKi8KKworI2RlZmluZSBVQVJUX0ZDUl9IU1VfNjRCX0ZJRk8JMHgyMAkvKiBjaG9zZSA2NCBieXRlcyBGSUZPICovCisjZGVmaW5lIFVBUlRfRkNSX0hTVV8xNkJfRklGTwkweDAwCS8qIGNob3NlIDE2IGJ5dGVzIEZJRk8gKi8KKworI2RlZmluZSBVQVJUX0ZDUl9IQUxGX0VNUFRfVFhJCTB4MDAJLyogdHJpZ2dlciBUWF9FTVBUIElSUSBmb3IgaGFsZiBlbXB0eSAqLworI2RlZmluZSBVQVJUX0ZDUl9GVUxMX0VNUFRfVFhJCTB4MDgJLyogdHJpZ2dlciBUWF9FTVBUIElSUSBmb3IgZnVsbCBlbXB0eSAqLworCisvKgorICogVGhlc2UgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgYXJlIGZvciB0aGUgMTZDOTUwCisgKi8KKyNkZWZpbmUgVUFSVF9BU1IJMHgwMQkvKiBBZGRpdGlvbmFsIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX1JGTAkweDAzCS8qIFJlY2VpdmVyIEZJRk8gbGV2ZWwgKi8KKyNkZWZpbmUgVUFSVF9URkwgCTB4MDQJLyogVHJhbnNtaXR0ZXIgRklGTyBsZXZlbCAqLworI2RlZmluZSBVQVJUX0lDUgkweDA1CS8qIEluZGV4IENvbnRyb2wgUmVnaXN0ZXIgKi8KKworLyogVGhlIDE2OTUwIElDUiByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVUFSVF9BQ1IJMHgwMAkvKiBBZGRpdGlvbmFsIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9DUFIJMHgwMQkvKiBDbG9jayBQcmVzY2FsYXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9UQ1IJMHgwMgkvKiBUaW1lcyBDbG9jayBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX0NLUwkweDAzCS8qIENsb2NrIFNlbGVjdCBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX1RUTAkweDA0CS8qIFRyYW5zbWl0dGVyIEludGVycnVwdCBUcmlnZ2VyIExldmVsICovCisjZGVmaW5lIFVBUlRfUlRMCTB4MDUJLyogUmVjZWl2ZXIgSW50ZXJydXB0IFRyaWdnZXIgTGV2ZWwgKi8KKyNkZWZpbmUgVUFSVF9GQ0wJMHgwNgkvKiBGbG93IENvbnRyb2wgTGV2ZWwgTG93ZXIgKi8KKyNkZWZpbmUgVUFSVF9GQ0gJMHgwNwkvKiBGbG93IENvbnRyb2wgTGV2ZWwgSGlnaGVyICovCisjZGVmaW5lIFVBUlRfSUQxCTB4MDgJLyogSUQgIzEgKi8KKyNkZWZpbmUgVUFSVF9JRDIJMHgwOQkvKiBJRCAjMiAqLworI2RlZmluZSBVQVJUX0lEMwkweDBBCS8qIElEICMzICovCisjZGVmaW5lIFVBUlRfUkVWCTB4MEIJLyogUmV2aXNpb24gKi8KKyNkZWZpbmUgVUFSVF9DU1IJMHgwQwkvKiBDaGFubmVsIFNvZnR3YXJlIFJlc2V0ICovCisjZGVmaW5lIFVBUlRfTk1SCTB4MEQJLyogTmluZS1iaXQgTW9kZSBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX0NUUgkweEZGCisKKy8qCisgKiBUaGUgMTZDOTUwIEFkZGl0aW9uYWwgQ29udHJvbCBSZWdpc3RlcgorICovCisjZGVmaW5lIFVBUlRfQUNSX1JYRElTCTB4MDEJLyogUmVjZWl2ZXIgZGlzYWJsZSAqLworI2RlZmluZSBVQVJUX0FDUl9UWERJUwkweDAyCS8qIFRyYW5zbWl0dGVyIGRpc2FibGUgKi8KKyNkZWZpbmUgVUFSVF9BQ1JfRFNSRkMJMHgwNAkvKiBEU1IgRmxvdyBDb250cm9sICovCisjZGVmaW5lIFVBUlRfQUNSX1RMRU5CCTB4MjAJLyogOTUwIHRyaWdnZXIgbGV2ZWxzIGVuYWJsZSAqLworI2RlZmluZSBVQVJUX0FDUl9JQ1JSRAkweDQwCS8qIElDUiBSZWFkIGVuYWJsZSAqLworI2RlZmluZSBVQVJUX0FDUl9BU1JFTgkweDgwCS8qIEFkZGl0aW9uYWwgc3RhdHVzIGVuYWJsZSAqLworCisKKworLyoKKyAqIFRoZXNlIGRlZmluaXRpb25zIGFyZSBmb3IgdGhlIFJTQS1EViBJSS9TIGNhcmQsIGZyb20KKyAqCisgKiBLaXlva2F6dSBTVVRPIDxzdXRvQGtzLWFuZC1rcy5uZS5qcD4KKyAqLworCisjZGVmaW5lIFVBUlRfUlNBX0JBU0UgKC04KQorCisjZGVmaW5lIFVBUlRfUlNBX01TUiAoKFVBUlRfUlNBX0JBU0UpICsgMCkgLyogSS9POiBNb2RlIFNlbGVjdCBSZWdpc3RlciAqLworCisjZGVmaW5lIFVBUlRfUlNBX01TUl9TV0FQICgxIDw8IDApIC8qIFN3YXAgbG93L2hpZ2ggOCBieXRlcyBpbiBJL08gcG9ydCBhZGRyICovCisjZGVmaW5lIFVBUlRfUlNBX01TUl9GSUZPICgxIDw8IDIpIC8qIEVuYWJsZSB0aGUgZXh0ZXJuYWwgRklGTyAqLworI2RlZmluZSBVQVJUX1JTQV9NU1JfRkxPVyAoMSA8PCAzKSAvKiBFbmFibGUgdGhlIGF1dG8gUlRTL0NUUyBmbG93IGNvbnRyb2wgKi8KKyNkZWZpbmUgVUFSVF9SU0FfTVNSX0lUWVAgKDEgPDwgNCkgLyogTGV2ZWwgKDEpIC8gRWRnZSB0cmlnZXIgKDApICovCisKKyNkZWZpbmUgVUFSVF9SU0FfSUVSICgoVUFSVF9SU0FfQkFTRSkgKyAxKSAvKiBJL086IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBVQVJUX1JTQV9JRVJfUnhfRklGT19IICgxIDw8IDApIC8qIEVuYWJsZSBSeCBGSUZPIGhhbGYgZnVsbCBpbnQuICovCisjZGVmaW5lIFVBUlRfUlNBX0lFUl9UeF9GSUZPX0ggKDEgPDwgMSkgLyogRW5hYmxlIFR4IEZJRk8gaGFsZiBmdWxsIGludC4gKi8KKyNkZWZpbmUgVUFSVF9SU0FfSUVSX1R4X0ZJRk9fRSAoMSA8PCAyKSAvKiBFbmFibGUgVHggRklGTyBlbXB0eSBpbnQuICovCisjZGVmaW5lIFVBUlRfUlNBX0lFUl9SeF9UT1VUICgxIDw8IDMpIC8qIEVuYWJsZSBjaGFyIHJlY2VpdmUgdGltZW91dCBpbnQgKi8KKyNkZWZpbmUgVUFSVF9SU0FfSUVSX1RJTUVSICgxIDw8IDQpIC8qIEVuYWJsZSB0aW1lciBpbnRlcnJ1cHQgKi8KKworI2RlZmluZSBVQVJUX1JTQV9TUlIgKChVQVJUX1JTQV9CQVNFKSArIDIpIC8qIElOOiBTdGF0dXMgUmVhZCBSZWdpc3RlciAqLworCisjZGVmaW5lIFVBUlRfUlNBX1NSUl9UeF9GSUZPX05FTVAgKDEgPDwgMCkgLyogVHggRklGTyBpcyBub3QgZW1wdHkgKDEpICovCisjZGVmaW5lIFVBUlRfUlNBX1NSUl9UeF9GSUZPX05IRkwgKDEgPDwgMSkgLyogVHggRklGTyBpcyBub3QgaGFsZiBmdWxsICgxKSAqLworI2RlZmluZSBVQVJUX1JTQV9TUlJfVHhfRklGT19ORlVMICgxIDw8IDIpIC8qIFR4IEZJRk8gaXMgbm90IGZ1bGwgKDEpICovCisjZGVmaW5lIFVBUlRfUlNBX1NSUl9SeF9GSUZPX05FTVAgKDEgPDwgMykgLyogUnggRklGTyBpcyBub3QgZW1wdHkgKDEpICovCisjZGVmaW5lIFVBUlRfUlNBX1NSUl9SeF9GSUZPX05IRkwgKDEgPDwgNCkgLyogUnggRklGTyBpcyBub3QgaGFsZiBmdWxsICgxKSAqLworI2RlZmluZSBVQVJUX1JTQV9TUlJfUnhfRklGT19ORlVMICgxIDw8IDUpIC8qIFJ4IEZJRk8gaXMgbm90IGZ1bGwgKDEpICovCisjZGVmaW5lIFVBUlRfUlNBX1NSUl9SeF9UT1VUICgxIDw8IDYpIC8qIENoYXJhY3RlciByZWNlcHRpb24gdGltZW91dCBvY2N1cnJlZCAoMSkgKi8KKyNkZWZpbmUgVUFSVF9SU0FfU1JSX1RJTUVSICgxIDw8IDcpIC8qIFRpbWVyIGludGVycnVwdCBvY2N1cnJlZCAqLworCisjZGVmaW5lIFVBUlRfUlNBX0ZSUiAoKFVBUlRfUlNBX0JBU0UpICsgMikgLyogT1VUOiBGSUZPIFJlc2V0IFJlZ2lzdGVyICovCisKKyNkZWZpbmUgVUFSVF9SU0FfVElWU1IgKChVQVJUX1JTQV9CQVNFKSArIDMpIC8qIEkvTzogVGltZXIgSW50ZXJ2YWwgVmFsdWUgU2V0IFJlZ2lzdGVyICovCisKKyNkZWZpbmUgVUFSVF9SU0FfVENSICgoVUFSVF9SU0FfQkFTRSkgKyA0KSAvKiBPVVQ6IFRpbWVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBVQVJUX1JTQV9UQ1JfU1dJVENIICgxIDw8IDApIC8qIFRpbWVyIG9uICovCisKKy8qCisgKiBUaGUgUlNBIERTVi9JSSBib2FyZCBoYXMgdHdvIGZpeGVkIGNsb2NrIGZyZXF1ZW5jaWVzLiAgT25lIGlzIHRoZQorICogc3RhbmRhcmQgcmF0ZSwgYW5kIHRoZSBvdGhlciBpcyA4IHRpbWVzIGZhc3Rlci4KKyAqLworI2RlZmluZSBTRVJJQUxfUlNBX0JBVURfQkFTRSAoOTIxNjAwKQorI2RlZmluZSBTRVJJQUxfUlNBX0JBVURfQkFTRV9MTyAoU0VSSUFMX1JTQV9CQVVEX0JBU0UgLyA4KQorCisvKgorICogRXh0cmEgc2VyaWFsIHJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciB0aGUgaW50ZXJuYWwgVUFSVHMKKyAqIGluIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqLworI2RlZmluZSBVQVJUX09NQVBfTURSMQkJMHgwOAkvKiBNb2RlIGRlZmluaXRpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9PTUFQX01EUjIJCTB4MDkJLyogTW9kZSBkZWZpbml0aW9uIHJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgVUFSVF9PTUFQX1NDUgkJMHgxMAkvKiBTdXBwbGVtZW50YXJ5IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9PTUFQX1NTUgkJMHgxMQkvKiBTdXBwbGVtZW50YXJ5IHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBVQVJUX09NQVBfRUJMUgkJMHgxMgkvKiBCT0YgbGVuZ3RoIHJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfT01BUF9PU0NfMTJNX1NFTAkweDEzCS8qIE9NQVAxNTEwIDEyTUh6IG9zYyBzZWxlY3QgKi8KKyNkZWZpbmUgVUFSVF9PTUFQX01WRVIJCTB4MTQJLyogTW9kdWxlIHZlcnNpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9PTUFQX1NZU0MJCTB4MTUJLyogU3lzdGVtIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9PTUFQX1NZU1MJCTB4MTYJLyogU3lzdGVtIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBVQVJUX09NQVBfV0VSCQkweDE3CS8qIFdha2UtdXAgZW5hYmxlIHJlZ2lzdGVyICovCisKKyNlbmRpZiAvKiBfTElOVVhfU0VSSUFMX1JFR19IICovCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zZXJpby5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NlcmlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYxNTliNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zZXJpby5oCkBAIC0wLDAgKzEsNzkgQEAKKyNpZm5kZWYgX1NFUklPX0gKKyNkZWZpbmUgX1NFUklPX0gKKworLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIFZvanRlY2ggUGF2bGlrCisqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisjZGVmaW5lIFNQSU9DU1RZUEUJX0lPVygncScsIDB4MDEsIHVuc2lnbmVkIGxvbmcpCisKKworLyoKKyAqIGJpdCBtYXNrcyBmb3IgdXNlIGluICJpbnRlcnJ1cHQiIGZsYWdzICgzcmQgYXJndW1lbnQpCisgKi8KKyNkZWZpbmUgU0VSSU9fVElNRU9VVAkxCisjZGVmaW5lIFNFUklPX1BBUklUWQkyCisjZGVmaW5lIFNFUklPX0ZSQU1FCTQKKworLyoKKyAqIFNlcmlvIHR5cGVzCisgKi8KKyNkZWZpbmUgU0VSSU9fWFQJMHgwMAorI2RlZmluZSBTRVJJT184MDQyCTB4MDEKKyNkZWZpbmUgU0VSSU9fUlMyMzIJMHgwMgorI2RlZmluZSBTRVJJT19ISUxfTUxDCTB4MDMKKyNkZWZpbmUgU0VSSU9fUFNfUFNUSFJVCTB4MDUKKyNkZWZpbmUgU0VSSU9fODA0Ml9YTAkweDA2CisKKy8qCisgKiBTZXJpbyBwcm90b2NvbHMKKyAqLworI2RlZmluZSBTRVJJT19VTktOT1dOCTB4MDAKKyNkZWZpbmUgU0VSSU9fTVNDCTB4MDEKKyNkZWZpbmUgU0VSSU9fU1VOCTB4MDIKKyNkZWZpbmUgU0VSSU9fTVMJMHgwMworI2RlZmluZSBTRVJJT19NUAkweDA0CisjZGVmaW5lIFNFUklPX01aCTB4MDUKKyNkZWZpbmUgU0VSSU9fTVpQCTB4MDYKKyNkZWZpbmUgU0VSSU9fTVpQUAkweDA3CisjZGVmaW5lIFNFUklPX1ZTWFhYQUEJMHgwOAorI2RlZmluZSBTRVJJT19TVU5LQkQJMHgxMAorI2RlZmluZSBTRVJJT19XQVJSSU9SCTB4MTgKKyNkZWZpbmUgU0VSSU9fU1BBQ0VPUkIJMHgxOQorI2RlZmluZSBTRVJJT19NQUdFTExBTgkweDFhCisjZGVmaW5lIFNFUklPX1NQQUNFQkFMTAkweDFiCisjZGVmaW5lIFNFUklPX0dVTlpFCTB4MWMKKyNkZWZpbmUgU0VSSU9fSUZPUkNFCTB4MWQKKyNkZWZpbmUgU0VSSU9fU1RJTkdFUgkweDFlCisjZGVmaW5lIFNFUklPX05FV1RPTgkweDFmCisjZGVmaW5lIFNFUklPX1NUT1dBV0FZCTB4MjAKKyNkZWZpbmUgU0VSSU9fSDM2MDAJMHgyMQorI2RlZmluZSBTRVJJT19QUzJTRVIJMHgyMgorI2RlZmluZSBTRVJJT19UV0lES0JECTB4MjMKKyNkZWZpbmUgU0VSSU9fVFdJREpPWQkweDI0CisjZGVmaW5lIFNFUklPX0hJTAkweDI1CisjZGVmaW5lIFNFUklPX1NORVMyMzIJMHgyNgorI2RlZmluZSBTRVJJT19TRU1URUNICTB4MjcKKyNkZWZpbmUgU0VSSU9fTEtLQkQJMHgyOAorI2RlZmluZSBTRVJJT19FTE8JMHgyOQorI2RlZmluZSBTRVJJT19NSUNST1RPVUNICTB4MzAKKyNkZWZpbmUgU0VSSU9fUEVOTU9VTlQJMHgzMQorI2RlZmluZSBTRVJJT19UT1VDSFJJR0hUCTB4MzIKKyNkZWZpbmUgU0VSSU9fVE9VQ0hXSU4JMHgzMworI2RlZmluZSBTRVJJT19UQU9TRVZNCTB4MzQKKyNkZWZpbmUgU0VSSU9fRlVKSVRTVQkweDM1CisjZGVmaW5lIFNFUklPX1pIRU5IVUEJMHgzNgorI2RlZmluZSBTRVJJT19JTkVYSU8JMHgzNworI2RlZmluZSBTRVJJT19UT1VDSElUMjEzCTB4MzgKKyNkZWZpbmUgU0VSSU9fVzgwMDEJMHgzOQorI2RlZmluZSBTRVJJT19EWU5BUFJPCTB4M2EKKyNkZWZpbmUgU0VSSU9fSEFNUFNISVJFCTB4M2IKKyNkZWZpbmUgU0VSSU9fUFMyTVVMVAkweDNjCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NobS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NobS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5OWNlZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvc2htLmgKQEAgLTAsMCArMSw3NSBAQAorI2lmbmRlZiBfTElOVVhfU0hNX0hfCisjZGVmaW5lIF9MSU5VWF9TSE1fSF8KKworI2luY2x1ZGUgPGxpbnV4L2lwYy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKy8qCisgKiBTSE1NQVgsIFNITU1OSSBhbmQgU0hNQUxMIGFyZSB1cHBlciBsaW1pdHMgYXJlIGRlZmF1bHRzIHdoaWNoIGNhbgorICogYmUgaW5jcmVhc2VkIGJ5IHN5c2N0bAorICovCisKKyNkZWZpbmUgU0hNTUFYIDB4MjAwMDAwMAkJIC8qIG1heCBzaGFyZWQgc2VnIHNpemUgKGJ5dGVzKSAqLworI2RlZmluZSBTSE1NSU4gMQkJCSAvKiBtaW4gc2hhcmVkIHNlZyBzaXplIChieXRlcykgKi8KKyNkZWZpbmUgU0hNTU5JIDQwOTYJCQkgLyogbWF4IG51bSBvZiBzZWdzIHN5c3RlbSB3aWRlICovCisjZGVmaW5lIFNITUFMTCAoU0hNTUFYL2dldHBhZ2VzaXplKCkqKFNITU1OSS8xNikpCisjZGVmaW5lIFNITVNFRyBTSE1NTkkJCQkgLyogbWF4IHNoYXJlZCBzZWdzIHBlciBwcm9jZXNzICovCisKKworLyogT2Jzb2xldGUsIHVzZWQgb25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYW5kIGxpYmM1IGNvbXBpbGVzICovCitzdHJ1Y3Qgc2htaWRfZHMgeworCXN0cnVjdCBpcGNfcGVybQkJc2htX3Blcm07CS8qIG9wZXJhdGlvbiBwZXJtcyAqLworCWludAkJCXNobV9zZWdzejsJLyogc2l6ZSBvZiBzZWdtZW50IChieXRlcykgKi8KKwlfX2tlcm5lbF90aW1lX3QJCXNobV9hdGltZTsJLyogbGFzdCBhdHRhY2ggdGltZSAqLworCV9fa2VybmVsX3RpbWVfdAkJc2htX2R0aW1lOwkvKiBsYXN0IGRldGFjaCB0aW1lICovCisJX19rZXJuZWxfdGltZV90CQlzaG1fY3RpbWU7CS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KKwlfX2tlcm5lbF9pcGNfcGlkX3QJc2htX2NwaWQ7CS8qIHBpZCBvZiBjcmVhdG9yICovCisJX19rZXJuZWxfaXBjX3BpZF90CXNobV9scGlkOwkvKiBwaWQgb2YgbGFzdCBvcGVyYXRvciAqLworCXVuc2lnbmVkIHNob3J0CQlzaG1fbmF0dGNoOwkvKiBuby4gb2YgY3VycmVudCBhdHRhY2hlcyAqLworCXVuc2lnbmVkIHNob3J0IAkJc2htX3VudXNlZDsJLyogY29tcGF0aWJpbGl0eSAqLworCXZvaWQgCQkJKnNobV91bnVzZWQyOwkvKiBkaXR0byAtIHVzZWQgYnkgRElQQyAqLworCXZvaWQJCQkqc2htX3VudXNlZDM7CS8qIHVudXNlZCAqLworfTsKKworLyogSW5jbHVkZSB0aGUgZGVmaW5pdGlvbiBvZiBzaG1pZDY0X2RzIGFuZCBzaG1pbmZvNjQgKi8KKyNpbmNsdWRlIDxhc20vc2htYnVmLmg+CisKKy8qIHBlcm1pc3Npb24gZmxhZyBmb3Igc2htZ2V0ICovCisjZGVmaW5lIFNITV9SCQkwNDAwCS8qIG9yIFNfSVJVR08gZnJvbSA8bGludXgvc3RhdC5oPiAqLworI2RlZmluZSBTSE1fVwkJMDIwMAkvKiBvciBTX0lXVUdPIGZyb20gPGxpbnV4L3N0YXQuaD4gKi8KKworLyogbW9kZSBmb3IgYXR0YWNoICovCisjZGVmaW5lCVNITV9SRE9OTFkJMDEwMDAwCS8qIHJlYWQtb25seSBhY2Nlc3MgKi8KKyNkZWZpbmUJU0hNX1JORAkJMDIwMDAwCS8qIHJvdW5kIGF0dGFjaCBhZGRyZXNzIHRvIFNITUxCQSBib3VuZGFyeSAqLworI2RlZmluZQlTSE1fUkVNQVAJMDQwMDAwCS8qIHRha2Utb3ZlciByZWdpb24gb24gYXR0YWNoICovCisjZGVmaW5lCVNITV9FWEVDCTAxMDAwMDAJLyogZXhlY3V0aW9uIGFjY2VzcyAqLworCisvKiBzdXBlciB1c2VyIHNobWN0bCBjb21tYW5kcyAqLworI2RlZmluZSBTSE1fTE9DSyAJMTEKKyNkZWZpbmUgU0hNX1VOTE9DSyAJMTIKKworLyogaXBjcyBjdGwgY29tbWFuZHMgKi8KKyNkZWZpbmUgU0hNX1NUQVQgCTEzCisjZGVmaW5lIFNITV9JTkZPIAkxNAorCisvKiBPYnNvbGV0ZSwgdXNlZCBvbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLworc3RydWN0CXNobWluZm8geworCWludCBzaG1tYXg7CisJaW50IHNobW1pbjsKKwlpbnQgc2htbW5pOworCWludCBzaG1zZWc7CisJaW50IHNobWFsbDsKK307CisKK3N0cnVjdCBzaG1faW5mbyB7CisJaW50IHVzZWRfaWRzOworCXVuc2lnbmVkIGxvbmcgc2htX3RvdDsJLyogdG90YWwgYWxsb2NhdGVkIHNobSAqLworCXVuc2lnbmVkIGxvbmcgc2htX3JzczsJLyogdG90YWwgcmVzaWRlbnQgc2htICovCisJdW5zaWduZWQgbG9uZyBzaG1fc3dwOwkvKiB0b3RhbCBzd2FwcGVkIHNobSAqLworCXVuc2lnbmVkIGxvbmcgc3dhcF9hdHRlbXB0czsKKwl1bnNpZ25lZCBsb25nIHN3YXBfc3VjY2Vzc2VzOworfTsKKworCisjZW5kaWYgLyogX0xJTlVYX1NITV9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYjY5ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvc2lnbmFsLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIF9MSU5VWF9TSUdOQUxfSAorI2RlZmluZSBfTElOVVhfU0lHTkFMX0gKKworI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KKyNpbmNsdWRlIDxhc20vc2lnaW5mby5oPgorCisKKyNlbmRpZiAvKiBfTElOVVhfU0lHTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zaWduYWxmZC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NpZ25hbGZkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVjMTQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zaWduYWxmZC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAgaW5jbHVkZS9saW51eC9zaWduYWxmZC5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNyAgRGF2aWRlIExpYmVuemkgPGRhdmlkZWxAeG1haWxzZXJ2ZXIub3JnPgorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9TSUdOQUxGRF9ICisjZGVmaW5lIF9MSU5VWF9TSUdOQUxGRF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorLyogRm9yIE9fQ0xPRVhFQyBhbmQgT19OT05CTE9DSyAqLworI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CisKKy8qIEZsYWdzIGZvciBzaWduYWxmZDQuICAqLworI2RlZmluZSBTRkRfQ0xPRVhFQyBPX0NMT0VYRUMKKyNkZWZpbmUgU0ZEX05PTkJMT0NLIE9fTk9OQkxPQ0sKKworc3RydWN0IHNpZ25hbGZkX3NpZ2luZm8geworCV9fdTMyIHNzaV9zaWdubzsKKwlfX3MzMiBzc2lfZXJybm87CisJX19zMzIgc3NpX2NvZGU7CisJX191MzIgc3NpX3BpZDsKKwlfX3UzMiBzc2lfdWlkOworCV9fczMyIHNzaV9mZDsKKwlfX3UzMiBzc2lfdGlkOworCV9fdTMyIHNzaV9iYW5kOworCV9fdTMyIHNzaV9vdmVycnVuOworCV9fdTMyIHNzaV90cmFwbm87CisJX19zMzIgc3NpX3N0YXR1czsKKwlfX3MzMiBzc2lfaW50OworCV9fdTY0IHNzaV9wdHI7CisJX191NjQgc3NpX3V0aW1lOworCV9fdTY0IHNzaV9zdGltZTsKKwlfX3U2NCBzc2lfYWRkcjsKKwlfX3UxNiBzc2lfYWRkcl9sc2I7CisKKwkvKgorCSAqIFBhZCBzdHJjdHVyZSB0byAxMjggYnl0ZXMuIFJlbWVtYmVyIHRvIHVwZGF0ZSB0aGUKKwkgKiBwYWQgc2l6ZSB3aGVuIHlvdSBhZGQgbmV3IG1lbWJlcnMuIFdlIHVzZSBhIGZpeGVkCisJICogc2l6ZSBzdHJ1Y3R1cmUgdG8gYXZvaWQgY29tcGF0aWJpbGl0eSBwcm9ibGVtcyB3aXRoCisJICogZnV0dXJlIHZlcnNpb25zLCBhbmQgd2UgbGVhdmUgZXh0cmEgc3BhY2UgZm9yIGFkZGl0aW9uYWwKKwkgKiBtZW1iZXJzLiBXZSB1c2UgZml4ZWQgc2l6ZSBtZW1iZXJzIGJlY2F1c2UgdGhpcyBzdHJjdHVyZQorCSAqIGNvbWVzIG91dCBvZiBhIHJlYWQoMikgYW5kIHdlIHJlYWxseSBkb24ndCB3YW50IHRvIGhhdmUKKwkgKiBhIGNvbXBhdCBvbiByZWFkKDIpLgorCSAqLworCV9fdTggX19wYWRbNDZdOworfTsKKworCisKKyNlbmRpZiAvKiBfTElOVVhfU0lHTkFMRkRfSCAqLworCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvc25tcC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NubXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmIyYjE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NubXAuaApAQCAtMCwwICsxLDI3MCBAQAorLyoKKyAqIERlZmluaXRpb25zIGZvciBNSUJzCisgKgorICogQXV0aG9yOiBIaWRlYWtpIFlPU0hJRlVKSSA8eW9zaGZ1amlAbGludXgtaXB2Ni5vcmc+CisgKi8KKworI2lmbmRlZiBfTElOVVhfU05NUF9ICisjZGVmaW5lIF9MSU5VWF9TTk1QX0gKKworLyogaXBzdGF0cyBtaWIgZGVmaW5pdGlvbnMgKi8KKy8qCisgKiBSRkMgMTIxMzogIE1JQi1JSQorICogUkZDIDIwMTEgKHVwZGF0ZXMgMTIxMyk6ICBTTk1QdjItTUlCLUlQCisgKiBSRkMgMjg2MzogIEludGVyZmFjZXMgR3JvdXAgTUlCCisgKiBSRkMgMjQ2NTogIElQdjYgTUlCOiBHZW5lcmFsIEdyb3VwCisgKiBkcmFmdC1pZXRmLWlwdjYtcmZjMjAxMS11cGRhdGUtMTAudHh0OiBNSUIgZm9yIElQOiBJUCBTdGF0aXN0aWNzIFRhYmxlcworICovCitlbnVtCit7CisJSVBTVEFUU19NSUJfTlVNID0gMCwKKwlJUFNUQVRTX01JQl9JTlBLVFMsCQkJLyogSW5SZWNlaXZlcyAqLworCUlQU1RBVFNfTUlCX0lOSERSRVJST1JTLAkJLyogSW5IZHJFcnJvcnMgKi8KKwlJUFNUQVRTX01JQl9JTlRPT0JJR0VSUk9SUywJCS8qIEluVG9vQmlnRXJyb3JzICovCisJSVBTVEFUU19NSUJfSU5OT1JPVVRFUywJCQkvKiBJbk5vUm91dGVzICovCisJSVBTVEFUU19NSUJfSU5BRERSRVJST1JTLAkJLyogSW5BZGRyRXJyb3JzICovCisJSVBTVEFUU19NSUJfSU5VTktOT1dOUFJPVE9TLAkJLyogSW5Vbmtub3duUHJvdG9zICovCisJSVBTVEFUU19NSUJfSU5UUlVOQ0FURURQS1RTLAkJLyogSW5UcnVuY2F0ZWRQa3RzICovCisJSVBTVEFUU19NSUJfSU5ESVNDQVJEUywJCQkvKiBJbkRpc2NhcmRzICovCisJSVBTVEFUU19NSUJfSU5ERUxJVkVSUywJCQkvKiBJbkRlbGl2ZXJzICovCisJSVBTVEFUU19NSUJfT1VURk9SV0RBVEFHUkFNUywJCS8qIE91dEZvcndEYXRhZ3JhbXMgKi8KKwlJUFNUQVRTX01JQl9PVVRQS1RTLAkJCS8qIE91dFJlcXVlc3RzICovCisJSVBTVEFUU19NSUJfT1VURElTQ0FSRFMsCQkvKiBPdXREaXNjYXJkcyAqLworCUlQU1RBVFNfTUlCX09VVE5PUk9VVEVTLAkJLyogT3V0Tm9Sb3V0ZXMgKi8KKwlJUFNUQVRTX01JQl9SRUFTTVRJTUVPVVQsCQkvKiBSZWFzbVRpbWVvdXQgKi8KKwlJUFNUQVRTX01JQl9SRUFTTVJFUURTLAkJCS8qIFJlYXNtUmVxZHMgKi8KKwlJUFNUQVRTX01JQl9SRUFTTU9LUywJCQkvKiBSZWFzbU9LcyAqLworCUlQU1RBVFNfTUlCX1JFQVNNRkFJTFMsCQkJLyogUmVhc21GYWlscyAqLworCUlQU1RBVFNfTUlCX0ZSQUdPS1MsCQkJLyogRnJhZ09LcyAqLworCUlQU1RBVFNfTUlCX0ZSQUdGQUlMUywJCQkvKiBGcmFnRmFpbHMgKi8KKwlJUFNUQVRTX01JQl9GUkFHQ1JFQVRFUywJCS8qIEZyYWdDcmVhdGVzICovCisJSVBTVEFUU19NSUJfSU5NQ0FTVFBLVFMsCQkvKiBJbk1jYXN0UGt0cyAqLworCUlQU1RBVFNfTUlCX09VVE1DQVNUUEtUUywJCS8qIE91dE1jYXN0UGt0cyAqLworCUlQU1RBVFNfTUlCX0lOQkNBU1RQS1RTLAkJLyogSW5CY2FzdFBrdHMgKi8KKwlJUFNUQVRTX01JQl9PVVRCQ0FTVFBLVFMsCQkvKiBPdXRCY2FzdFBrdHMgKi8KKwlJUFNUQVRTX01JQl9JTk9DVEVUUywJCQkvKiBJbk9jdGV0cyAqLworCUlQU1RBVFNfTUlCX09VVE9DVEVUUywJCQkvKiBPdXRPY3RldHMgKi8KKwlJUFNUQVRTX01JQl9JTk1DQVNUT0NURVRTLAkJLyogSW5NY2FzdE9jdGV0cyAqLworCUlQU1RBVFNfTUlCX09VVE1DQVNUT0NURVRTLAkJLyogT3V0TWNhc3RPY3RldHMgKi8KKwlJUFNUQVRTX01JQl9JTkJDQVNUT0NURVRTLAkJLyogSW5CY2FzdE9jdGV0cyAqLworCUlQU1RBVFNfTUlCX09VVEJDQVNUT0NURVRTLAkJLyogT3V0QmNhc3RPY3RldHMgKi8KKwlfX0lQU1RBVFNfTUlCX01BWAorfTsKKworLyogaWNtcCBtaWIgZGVmaW5pdGlvbnMgKi8KKy8qCisgKiBSRkMgMTIxMzogIE1JQi1JSSBJQ01QIEdyb3VwCisgKiBSRkMgMjAxMSAodXBkYXRlcyAxMjEzKTogIFNOTVB2MiBNSUIgZm9yIElQOiBJQ01QIGdyb3VwCisgKi8KK2VudW0KK3sKKwlJQ01QX01JQl9OVU0gPSAwLAorCUlDTVBfTUlCX0lOTVNHUywJCQkvKiBJbk1zZ3MgKi8KKwlJQ01QX01JQl9JTkVSUk9SUywJCQkvKiBJbkVycm9ycyAqLworCUlDTVBfTUlCX0lOREVTVFVOUkVBQ0hTLAkJLyogSW5EZXN0VW5yZWFjaHMgKi8KKwlJQ01QX01JQl9JTlRJTUVFWENEUywJCQkvKiBJblRpbWVFeGNkcyAqLworCUlDTVBfTUlCX0lOUEFSTVBST0JTLAkJCS8qIEluUGFybVByb2JzICovCisJSUNNUF9NSUJfSU5TUkNRVUVOQ0hTLAkJCS8qIEluU3JjUXVlbmNocyAqLworCUlDTVBfTUlCX0lOUkVESVJFQ1RTLAkJCS8qIEluUmVkaXJlY3RzICovCisJSUNNUF9NSUJfSU5FQ0hPUywJCQkvKiBJbkVjaG9zICovCisJSUNNUF9NSUJfSU5FQ0hPUkVQUywJCQkvKiBJbkVjaG9SZXBzICovCisJSUNNUF9NSUJfSU5USU1FU1RBTVBTLAkJCS8qIEluVGltZXN0YW1wcyAqLworCUlDTVBfTUlCX0lOVElNRVNUQU1QUkVQUywJCS8qIEluVGltZXN0YW1wUmVwcyAqLworCUlDTVBfTUlCX0lOQUREUk1BU0tTLAkJCS8qIEluQWRkck1hc2tzICovCisJSUNNUF9NSUJfSU5BRERSTUFTS1JFUFMsCQkvKiBJbkFkZHJNYXNrUmVwcyAqLworCUlDTVBfTUlCX09VVE1TR1MsCQkJLyogT3V0TXNncyAqLworCUlDTVBfTUlCX09VVEVSUk9SUywJCQkvKiBPdXRFcnJvcnMgKi8KKwlJQ01QX01JQl9PVVRERVNUVU5SRUFDSFMsCQkvKiBPdXREZXN0VW5yZWFjaHMgKi8KKwlJQ01QX01JQl9PVVRUSU1FRVhDRFMsCQkJLyogT3V0VGltZUV4Y2RzICovCisJSUNNUF9NSUJfT1VUUEFSTVBST0JTLAkJCS8qIE91dFBhcm1Qcm9icyAqLworCUlDTVBfTUlCX09VVFNSQ1FVRU5DSFMsCQkJLyogT3V0U3JjUXVlbmNocyAqLworCUlDTVBfTUlCX09VVFJFRElSRUNUUywJCQkvKiBPdXRSZWRpcmVjdHMgKi8KKwlJQ01QX01JQl9PVVRFQ0hPUywJCQkvKiBPdXRFY2hvcyAqLworCUlDTVBfTUlCX09VVEVDSE9SRVBTLAkJCS8qIE91dEVjaG9SZXBzICovCisJSUNNUF9NSUJfT1VUVElNRVNUQU1QUywJCQkvKiBPdXRUaW1lc3RhbXBzICovCisJSUNNUF9NSUJfT1VUVElNRVNUQU1QUkVQUywJCS8qIE91dFRpbWVzdGFtcFJlcHMgKi8KKwlJQ01QX01JQl9PVVRBRERSTUFTS1MsCQkJLyogT3V0QWRkck1hc2tzICovCisJSUNNUF9NSUJfT1VUQUREUk1BU0tSRVBTLAkJLyogT3V0QWRkck1hc2tSZXBzICovCisJX19JQ01QX01JQl9NQVgKK307CisKKyNkZWZpbmUgX19JQ01QTVNHX01JQl9NQVggNTEyCS8qIE91dCtJbiBmb3IgYWxsIDgtYml0IElDTVAgdHlwZXMgKi8KKworLyogaWNtcDYgbWliIGRlZmluaXRpb25zICovCisvKgorICogUkZDIDI0NjY6ICBJQ01QdjYtTUlCCisgKi8KK2VudW0KK3sKKwlJQ01QNl9NSUJfTlVNID0gMCwKKwlJQ01QNl9NSUJfSU5NU0dTLAkJCS8qIEluTXNncyAqLworCUlDTVA2X01JQl9JTkVSUk9SUywJCQkvKiBJbkVycm9ycyAqLworCUlDTVA2X01JQl9PVVRNU0dTLAkJCS8qIE91dE1zZ3MgKi8KKwlJQ01QNl9NSUJfT1VURVJST1JTLAkJCS8qIE91dEVycm9ycyAqLworCV9fSUNNUDZfTUlCX01BWAorfTsKKworI2RlZmluZSBfX0lDTVA2TVNHX01JQl9NQVggNTEyIC8qIE91dCtJbiBmb3IgYWxsIDgtYml0IElDTVB2NiB0eXBlcyAqLworCisvKiB0Y3AgbWliIGRlZmluaXRpb25zICovCisvKgorICogUkZDIDEyMTM6ICBNSUItSUkgVENQIGdyb3VwCisgKiBSRkMgMjAxMiAodXBkYXRlcyAxMjEzKTogIFNOTVB2Mi1NSUItVENQCisgKi8KK2VudW0KK3sKKwlUQ1BfTUlCX05VTSA9IDAsCisJVENQX01JQl9SVE9BTEdPUklUSE0sCQkJLyogUnRvQWxnb3JpdGhtICovCisJVENQX01JQl9SVE9NSU4sCQkJCS8qIFJ0b01pbiAqLworCVRDUF9NSUJfUlRPTUFYLAkJCQkvKiBSdG9NYXggKi8KKwlUQ1BfTUlCX01BWENPTk4sCQkJLyogTWF4Q29ubiAqLworCVRDUF9NSUJfQUNUSVZFT1BFTlMsCQkJLyogQWN0aXZlT3BlbnMgKi8KKwlUQ1BfTUlCX1BBU1NJVkVPUEVOUywJCQkvKiBQYXNzaXZlT3BlbnMgKi8KKwlUQ1BfTUlCX0FUVEVNUFRGQUlMUywJCQkvKiBBdHRlbXB0RmFpbHMgKi8KKwlUQ1BfTUlCX0VTVEFCUkVTRVRTLAkJCS8qIEVzdGFiUmVzZXRzICovCisJVENQX01JQl9DVVJSRVNUQUIsCQkJLyogQ3VyckVzdGFiICovCisJVENQX01JQl9JTlNFR1MsCQkJCS8qIEluU2VncyAqLworCVRDUF9NSUJfT1VUU0VHUywJCQkvKiBPdXRTZWdzICovCisJVENQX01JQl9SRVRSQU5TU0VHUywJCQkvKiBSZXRyYW5zU2VncyAqLworCVRDUF9NSUJfSU5FUlJTLAkJCQkvKiBJbkVycnMgKi8KKwlUQ1BfTUlCX09VVFJTVFMsCQkJLyogT3V0UnN0cyAqLworCV9fVENQX01JQl9NQVgKK307CisKKy8qIHVkcCBtaWIgZGVmaW5pdGlvbnMgKi8KKy8qCisgKiBSRkMgMTIxMzogIE1JQi1JSSBVRFAgZ3JvdXAKKyAqIFJGQyAyMDEzICh1cGRhdGVzIDEyMTMpOiAgU05NUHYyLU1JQi1VRFAKKyAqLworZW51bQoreworCVVEUF9NSUJfTlVNID0gMCwKKwlVRFBfTUlCX0lOREFUQUdSQU1TLAkJCS8qIEluRGF0YWdyYW1zICovCisJVURQX01JQl9OT1BPUlRTLAkJCS8qIE5vUG9ydHMgKi8KKwlVRFBfTUlCX0lORVJST1JTLAkJCS8qIEluRXJyb3JzICovCisJVURQX01JQl9PVVREQVRBR1JBTVMsCQkJLyogT3V0RGF0YWdyYW1zICovCisJVURQX01JQl9SQ1ZCVUZFUlJPUlMsCQkJLyogUmN2YnVmRXJyb3JzICovCisJVURQX01JQl9TTkRCVUZFUlJPUlMsCQkJLyogU25kYnVmRXJyb3JzICovCisJX19VRFBfTUlCX01BWAorfTsKKworLyogbGludXggbWliIGRlZmluaXRpb25zICovCitlbnVtCit7CisJTElOVVhfTUlCX05VTSA9IDAsCisJTElOVVhfTUlCX1NZTkNPT0tJRVNTRU5ULAkJLyogU3luY29va2llc1NlbnQgKi8KKwlMSU5VWF9NSUJfU1lOQ09PS0lFU1JFQ1YsCQkvKiBTeW5jb29raWVzUmVjdiAqLworCUxJTlVYX01JQl9TWU5DT09LSUVTRkFJTEVELAkJLyogU3luY29va2llc0ZhaWxlZCAqLworCUxJTlVYX01JQl9FTUJSWU9OSUNSU1RTLAkJLyogRW1icnlvbmljUnN0cyAqLworCUxJTlVYX01JQl9QUlVORUNBTExFRCwJCQkvKiBQcnVuZUNhbGxlZCAqLworCUxJTlVYX01JQl9SQ1ZQUlVORUQsCQkJLyogUmN2UHJ1bmVkICovCisJTElOVVhfTUlCX09GT1BSVU5FRCwJCQkvKiBPZm9QcnVuZWQgKi8KKwlMSU5VWF9NSUJfT1VUT0ZXSU5ET1dJQ01QUywJCS8qIE91dE9mV2luZG93SWNtcHMgKi8KKwlMSU5VWF9NSUJfTE9DS0RST1BQRURJQ01QUywJCS8qIExvY2tEcm9wcGVkSWNtcHMgKi8KKwlMSU5VWF9NSUJfQVJQRklMVEVSLAkJCS8qIEFycEZpbHRlciAqLworCUxJTlVYX01JQl9USU1FV0FJVEVELAkJCS8qIFRpbWVXYWl0ZWQgKi8KKwlMSU5VWF9NSUJfVElNRVdBSVRSRUNZQ0xFRCwJCS8qIFRpbWVXYWl0UmVjeWNsZWQgKi8KKwlMSU5VWF9NSUJfVElNRVdBSVRLSUxMRUQsCQkvKiBUaW1lV2FpdEtpbGxlZCAqLworCUxJTlVYX01JQl9QQVdTUEFTU0lWRVJFSkVDVEVELAkJLyogUEFXU1Bhc3NpdmVSZWplY3RlZCAqLworCUxJTlVYX01JQl9QQVdTQUNUSVZFUkVKRUNURUQsCQkvKiBQQVdTQWN0aXZlUmVqZWN0ZWQgKi8KKwlMSU5VWF9NSUJfUEFXU0VTVEFCUkVKRUNURUQsCQkvKiBQQVdTRXN0YWJSZWplY3RlZCAqLworCUxJTlVYX01JQl9ERUxBWUVEQUNLUywJCQkvKiBEZWxheWVkQUNLcyAqLworCUxJTlVYX01JQl9ERUxBWUVEQUNLTE9DS0VELAkJLyogRGVsYXllZEFDS0xvY2tlZCAqLworCUxJTlVYX01JQl9ERUxBWUVEQUNLTE9TVCwJCS8qIERlbGF5ZWRBQ0tMb3N0ICovCisJTElOVVhfTUlCX0xJU1RFTk9WRVJGTE9XUywJCS8qIExpc3Rlbk92ZXJmbG93cyAqLworCUxJTlVYX01JQl9MSVNURU5EUk9QUywJCQkvKiBMaXN0ZW5Ecm9wcyAqLworCUxJTlVYX01JQl9UQ1BQUkVRVUVVRUQsCQkJLyogVENQUHJlcXVldWVkICovCisJTElOVVhfTUlCX1RDUERJUkVDVENPUFlGUk9NQkFDS0xPRywJLyogVENQRGlyZWN0Q29weUZyb21CYWNrbG9nICovCisJTElOVVhfTUlCX1RDUERJUkVDVENPUFlGUk9NUFJFUVVFVUUsCS8qIFRDUERpcmVjdENvcHlGcm9tUHJlcXVldWUgKi8KKwlMSU5VWF9NSUJfVENQUFJFUVVFVUVEUk9QUEVELAkJLyogVENQUHJlcXVldWVEcm9wcGVkICovCisJTElOVVhfTUlCX1RDUEhQSElUUywJCQkvKiBUQ1BIUEhpdHMgKi8KKwlMSU5VWF9NSUJfVENQSFBISVRTVE9VU0VSLAkJLyogVENQSFBIaXRzVG9Vc2VyICovCisJTElOVVhfTUlCX1RDUFBVUkVBQ0tTLAkJCS8qIFRDUFB1cmVBY2tzICovCisJTElOVVhfTUlCX1RDUEhQQUNLUywJCQkvKiBUQ1BIUEFja3MgKi8KKwlMSU5VWF9NSUJfVENQUkVOT1JFQ09WRVJZLAkJLyogVENQUmVub1JlY292ZXJ5ICovCisJTElOVVhfTUlCX1RDUFNBQ0tSRUNPVkVSWSwJCS8qIFRDUFNhY2tSZWNvdmVyeSAqLworCUxJTlVYX01JQl9UQ1BTQUNLUkVORUdJTkcsCQkvKiBUQ1BTQUNLUmVuZWdpbmcgKi8KKwlMSU5VWF9NSUJfVENQRkFDS1JFT1JERVIsCQkvKiBUQ1BGQUNLUmVvcmRlciAqLworCUxJTlVYX01JQl9UQ1BTQUNLUkVPUkRFUiwJCS8qIFRDUFNBQ0tSZW9yZGVyICovCisJTElOVVhfTUlCX1RDUFJFTk9SRU9SREVSLAkJLyogVENQUmVub1Jlb3JkZXIgKi8KKwlMSU5VWF9NSUJfVENQVFNSRU9SREVSLAkJCS8qIFRDUFRTUmVvcmRlciAqLworCUxJTlVYX01JQl9UQ1BGVUxMVU5ETywJCQkvKiBUQ1BGdWxsVW5kbyAqLworCUxJTlVYX01JQl9UQ1BQQVJUSUFMVU5ETywJCS8qIFRDUFBhcnRpYWxVbmRvICovCisJTElOVVhfTUlCX1RDUERTQUNLVU5ETywJCQkvKiBUQ1BEU0FDS1VuZG8gKi8KKwlMSU5VWF9NSUJfVENQTE9TU1VORE8sCQkJLyogVENQTG9zc1VuZG8gKi8KKwlMSU5VWF9NSUJfVENQTE9TUywJCQkvKiBUQ1BMb3NzICovCisJTElOVVhfTUlCX1RDUExPU1RSRVRSQU5TTUlULAkJLyogVENQTG9zdFJldHJhbnNtaXQgKi8KKwlMSU5VWF9NSUJfVENQUkVOT0ZBSUxVUkVTLAkJLyogVENQUmVub0ZhaWx1cmVzICovCisJTElOVVhfTUlCX1RDUFNBQ0tGQUlMVVJFUywJCS8qIFRDUFNhY2tGYWlsdXJlcyAqLworCUxJTlVYX01JQl9UQ1BMT1NTRkFJTFVSRVMsCQkvKiBUQ1BMb3NzRmFpbHVyZXMgKi8KKwlMSU5VWF9NSUJfVENQRkFTVFJFVFJBTlMsCQkvKiBUQ1BGYXN0UmV0cmFucyAqLworCUxJTlVYX01JQl9UQ1BGT1JXQVJEUkVUUkFOUywJCS8qIFRDUEZvcndhcmRSZXRyYW5zICovCisJTElOVVhfTUlCX1RDUFNMT1dTVEFSVFJFVFJBTlMsCQkvKiBUQ1BTbG93U3RhcnRSZXRyYW5zICovCisJTElOVVhfTUlCX1RDUFRJTUVPVVRTLAkJCS8qIFRDUFRpbWVvdXRzICovCisJTElOVVhfTUlCX1RDUFJFTk9SRUNPVkVSWUZBSUwsCQkvKiBUQ1BSZW5vUmVjb3ZlcnlGYWlsICovCisJTElOVVhfTUlCX1RDUFNBQ0tSRUNPVkVSWUZBSUwsCQkvKiBUQ1BTYWNrUmVjb3ZlcnlGYWlsICovCisJTElOVVhfTUlCX1RDUFNDSEVEVUxFUkZBSUxFRCwJCS8qIFRDUFNjaGVkdWxlckZhaWxlZCAqLworCUxJTlVYX01JQl9UQ1BSQ1ZDT0xMQVBTRUQsCQkvKiBUQ1BSY3ZDb2xsYXBzZWQgKi8KKwlMSU5VWF9NSUJfVENQRFNBQ0tPTERTRU5ULAkJLyogVENQRFNBQ0tPbGRTZW50ICovCisJTElOVVhfTUlCX1RDUERTQUNLT0ZPU0VOVCwJCS8qIFRDUERTQUNLT2ZvU2VudCAqLworCUxJTlVYX01JQl9UQ1BEU0FDS1JFQ1YsCQkJLyogVENQRFNBQ0tSZWN2ICovCisJTElOVVhfTUlCX1RDUERTQUNLT0ZPUkVDViwJCS8qIFRDUERTQUNLT2ZvUmVjdiAqLworCUxJTlVYX01JQl9UQ1BBQk9SVE9OU1lOLAkJLyogVENQQWJvcnRPblN5biAqLworCUxJTlVYX01JQl9UQ1BBQk9SVE9OREFUQSwJCS8qIFRDUEFib3J0T25EYXRhICovCisJTElOVVhfTUlCX1RDUEFCT1JUT05DTE9TRSwJCS8qIFRDUEFib3J0T25DbG9zZSAqLworCUxJTlVYX01JQl9UQ1BBQk9SVE9OTUVNT1JZLAkJLyogVENQQWJvcnRPbk1lbW9yeSAqLworCUxJTlVYX01JQl9UQ1BBQk9SVE9OVElNRU9VVCwJCS8qIFRDUEFib3J0T25UaW1lb3V0ICovCisJTElOVVhfTUlCX1RDUEFCT1JUT05MSU5HRVIsCQkvKiBUQ1BBYm9ydE9uTGluZ2VyICovCisJTElOVVhfTUlCX1RDUEFCT1JURkFJTEVELAkJLyogVENQQWJvcnRGYWlsZWQgKi8KKwlMSU5VWF9NSUJfVENQTUVNT1JZUFJFU1NVUkVTLAkJLyogVENQTWVtb3J5UHJlc3N1cmVzICovCisJTElOVVhfTUlCX1RDUFNBQ0tESVNDQVJELAkJLyogVENQU0FDS0Rpc2NhcmQgKi8KKwlMSU5VWF9NSUJfVENQRFNBQ0tJR05PUkVET0xELAkJLyogVENQU0FDS0lnbm9yZWRPbGQgKi8KKwlMSU5VWF9NSUJfVENQRFNBQ0tJR05PUkVETk9VTkRPLAkvKiBUQ1BTQUNLSWdub3JlZE5vVW5kbyAqLworCUxJTlVYX01JQl9UQ1BTUFVSSU9VU1JUT1MsCQkvKiBUQ1BTcHVyaW91c1JUT3MgKi8KKwlMSU5VWF9NSUJfVENQTUQ1Tk9URk9VTkQsCQkvKiBUQ1BNRDVOb3RGb3VuZCAqLworCUxJTlVYX01JQl9UQ1BNRDVVTkVYUEVDVEVELAkJLyogVENQTUQ1VW5leHBlY3RlZCAqLworCUxJTlVYX01JQl9TQUNLU0hJRlRFRCwKKwlMSU5VWF9NSUJfU0FDS01FUkdFRCwKKwlMSU5VWF9NSUJfU0FDS1NISUZURkFMTEJBQ0ssCisJTElOVVhfTUlCX1RDUEJBQ0tMT0dEUk9QLAorCUxJTlVYX01JQl9UQ1BNSU5UVExEUk9QLCAvKiBSRkMgNTA4MiAqLworCUxJTlVYX01JQl9UQ1BERUZFUkFDQ0VQVERST1AsCisJTElOVVhfTUlCX0lQUlBGSUxURVIsIC8qIElQIFJldmVyc2UgUGF0aCBGaWx0ZXIgKHJwX2ZpbHRlcikgKi8KKwlMSU5VWF9NSUJfVENQVElNRVdBSVRPVkVSRkxPVywJCS8qIFRDUFRpbWVXYWl0T3ZlcmZsb3cgKi8KKwlfX0xJTlVYX01JQl9NQVgKK307CisKKy8qIGxpbnV4IFhmcm0gbWliIGRlZmluaXRpb25zICovCitlbnVtCit7CisJTElOVVhfTUlCX1hGUk1OVU0gPSAwLAorCUxJTlVYX01JQl9YRlJNSU5FUlJPUiwJCQkvKiBYZnJtSW5FcnJvciAqLworCUxJTlVYX01JQl9YRlJNSU5CVUZGRVJFUlJPUiwJCS8qIFhmcm1JbkJ1ZmZlckVycm9yICovCisJTElOVVhfTUlCX1hGUk1JTkhEUkVSUk9SLAkJLyogWGZybUluSGRyRXJyb3IgKi8KKwlMSU5VWF9NSUJfWEZSTUlOTk9TVEFURVMsCQkvKiBYZnJtSW5Ob1N0YXRlcyAqLworCUxJTlVYX01JQl9YRlJNSU5TVEFURVBST1RPRVJST1IsCS8qIFhmcm1JblN0YXRlUHJvdG9FcnJvciAqLworCUxJTlVYX01JQl9YRlJNSU5TVEFURU1PREVFUlJPUiwJCS8qIFhmcm1JblN0YXRlTW9kZUVycm9yICovCisJTElOVVhfTUlCX1hGUk1JTlNUQVRFU0VRRVJST1IsCQkvKiBYZnJtSW5TdGF0ZVNlcUVycm9yICovCisJTElOVVhfTUlCX1hGUk1JTlNUQVRFRVhQSVJFRCwJCS8qIFhmcm1JblN0YXRlRXhwaXJlZCAqLworCUxJTlVYX01JQl9YRlJNSU5TVEFURU1JU01BVENILAkJLyogWGZybUluU3RhdGVNaXNtYXRjaCAqLworCUxJTlVYX01JQl9YRlJNSU5TVEFURUlOVkFMSUQsCQkvKiBYZnJtSW5TdGF0ZUludmFsaWQgKi8KKwlMSU5VWF9NSUJfWEZSTUlOVE1QTE1JU01BVENILAkJLyogWGZybUluVG1wbE1pc21hdGNoICovCisJTElOVVhfTUlCX1hGUk1JTk5PUE9MUywJCQkvKiBYZnJtSW5Ob1BvbHMgKi8KKwlMSU5VWF9NSUJfWEZSTUlOUE9MQkxPQ0ssCQkvKiBYZnJtSW5Qb2xCbG9jayAqLworCUxJTlVYX01JQl9YRlJNSU5QT0xFUlJPUiwJCS8qIFhmcm1JblBvbEVycm9yICovCisJTElOVVhfTUlCX1hGUk1PVVRFUlJPUiwJCQkvKiBYZnJtT3V0RXJyb3IgKi8KKwlMSU5VWF9NSUJfWEZSTU9VVEJVTkRMRUdFTkVSUk9SLAkvKiBYZnJtT3V0QnVuZGxlR2VuRXJyb3IgKi8KKwlMSU5VWF9NSUJfWEZSTU9VVEJVTkRMRUNIRUNLRVJST1IsCS8qIFhmcm1PdXRCdW5kbGVDaGVja0Vycm9yICovCisJTElOVVhfTUlCX1hGUk1PVVROT1NUQVRFUywJCS8qIFhmcm1PdXROb1N0YXRlcyAqLworCUxJTlVYX01JQl9YRlJNT1VUU1RBVEVQUk9UT0VSUk9SLAkvKiBYZnJtT3V0U3RhdGVQcm90b0Vycm9yICovCisJTElOVVhfTUlCX1hGUk1PVVRTVEFURU1PREVFUlJPUiwJLyogWGZybU91dFN0YXRlTW9kZUVycm9yICovCisJTElOVVhfTUlCX1hGUk1PVVRTVEFURVNFUUVSUk9SLAkJLyogWGZybU91dFN0YXRlU2VxRXJyb3IgKi8KKwlMSU5VWF9NSUJfWEZSTU9VVFNUQVRFRVhQSVJFRCwJCS8qIFhmcm1PdXRTdGF0ZUV4cGlyZWQgKi8KKwlMSU5VWF9NSUJfWEZSTU9VVFBPTEJMT0NLLAkJLyogWGZybU91dFBvbEJsb2NrICovCisJTElOVVhfTUlCX1hGUk1PVVRQT0xERUFELAkJLyogWGZybU91dFBvbERlYWQgKi8KKwlMSU5VWF9NSUJfWEZSTU9VVFBPTEVSUk9SLAkJLyogWGZybU91dFBvbEVycm9yICovCisJTElOVVhfTUlCX1hGUk1GV0RIRFJFUlJPUiwJCS8qIFhmcm1Gd2RIZHJFcnJvciovCisJX19MSU5VWF9NSUJfWEZSTU1BWAorfTsKKworI2VuZGlmCS8qIF9MSU5VWF9TTk1QX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zb2NrZXQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zb2NrZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDU3ODY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCkBAIC0wLDAgKzEsMTkgQEAKKyNpZm5kZWYgX0xJTlVYX1NPQ0tFVF9ICisjZGVmaW5lIF9MSU5VWF9TT0NLRVRfSAorCisvKgorICogRGVzaXJlZCBkZXNpZ24gb2YgbWF4aW11bSBzaXplIGFuZCBhbGlnbm1lbnQgKHNlZSBSRkMyNTUzKQorICovCisjZGVmaW5lIF9LX1NTX01BWFNJWkUJMTI4CS8qIEltcGxlbWVudGF0aW9uIHNwZWNpZmljIG1heCBzaXplICovCisjZGVmaW5lIF9LX1NTX0FMSUdOU0laRQkoX19hbGlnbm9mX18gKHN0cnVjdCBzb2NrYWRkciAqKSkKKwkJCQkvKiBJbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBkZXNpcmVkIGFsaWdubWVudCAqLworCitzdHJ1Y3QgX19rZXJuZWxfc29ja2FkZHJfc3RvcmFnZSB7CisJdW5zaWduZWQgc2hvcnQJc3NfZmFtaWx5OwkJLyogYWRkcmVzcyBmYW1pbHkgKi8KKwkvKiBGb2xsb3dpbmcgZmllbGQocykgYXJlIGltcGxlbWVudGF0aW9uIHNwZWNpZmljICovCisJY2hhcgkJX19kYXRhW19LX1NTX01BWFNJWkUgLSBzaXplb2YodW5zaWduZWQgc2hvcnQpXTsKKwkJCQkvKiBzcGFjZSB0byBhY2hpZXZlIGRlc2lyZWQgc2l6ZSwgKi8KKwkJCQkvKiBfU1NfTUFYU0laRSB2YWx1ZSBtaW51cyBzaXplIG9mIHNzX2ZhbWlseSAqLworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZChfS19TU19BTElHTlNJWkUpKSk7CS8qIGZvcmNlIGRlc2lyZWQgYWxpZ25tZW50ICovCisKKyNlbmRpZiAvKiBfTElOVVhfU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zb2NraW9zLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvc29ja2lvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MWYxNzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvc29ja2lvcy5oCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogSU5FVAkJQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFRDUC9JUCBwcm90b2NvbCBzdWl0ZSBmb3IgdGhlIExJTlVYCisgKgkJb3BlcmF0aW5nIHN5c3RlbS4gIElORVQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlICBCU0QgU29ja2V0CisgKgkJaW50ZXJmYWNlIGFzIHRoZSBtZWFucyBvZiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHVzZXIgbGV2ZWwuCisgKgorICoJCURlZmluaXRpb25zIG9mIHRoZSBzb2NrZXQtbGV2ZWwgSS9PIGNvbnRyb2wgY2FsbHMuCisgKgorICogVmVyc2lvbjoJQCgjKXNvY2tpb3MuaAkxLjAuMgkwMy8wOS85MworICoKKyAqIEF1dGhvcnM6CVJvc3MgQmlybworICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9MSU5VWF9TT0NLSU9TX0gKKyNkZWZpbmUgX0xJTlVYX1NPQ0tJT1NfSAorCisjaW5jbHVkZSA8YXNtL3NvY2tpb3MuaD4KKworLyogTGludXgtc3BlY2lmaWMgc29ja2V0IGlvY3RscyAqLworI2RlZmluZSBTSU9DSU5RCQlGSU9OUkVBRAorI2RlZmluZSBTSU9DT1VUUQlUSU9DT1VUUQorCisvKiBSb3V0aW5nIHRhYmxlIGNhbGxzLiAqLworI2RlZmluZSBTSU9DQUREUlQJMHg4OTBCCQkvKiBhZGQgcm91dGluZyB0YWJsZSBlbnRyeQkqLworI2RlZmluZSBTSU9DREVMUlQJMHg4OTBDCQkvKiBkZWxldGUgcm91dGluZyB0YWJsZSBlbnRyeQkqLworI2RlZmluZSBTSU9DUlRNU0cJMHg4OTBECQkvKiBjYWxsIHRvIHJvdXRpbmcgc3lzdGVtCSovCisKKy8qIFNvY2tldCBjb25maWd1cmF0aW9uIGNvbnRyb2xzLiAqLworI2RlZmluZSBTSU9DR0lGTkFNRQkweDg5MTAJCS8qIGdldCBpZmFjZSBuYW1lCQkqLworI2RlZmluZSBTSU9DU0lGTElOSwkweDg5MTEJCS8qIHNldCBpZmFjZSBjaGFubmVsCQkqLworI2RlZmluZSBTSU9DR0lGQ09ORgkweDg5MTIJCS8qIGdldCBpZmFjZSBsaXN0CQkqLworI2RlZmluZSBTSU9DR0lGRkxBR1MJMHg4OTEzCQkvKiBnZXQgZmxhZ3MJCQkqLworI2RlZmluZSBTSU9DU0lGRkxBR1MJMHg4OTE0CQkvKiBzZXQgZmxhZ3MJCQkqLworI2RlZmluZSBTSU9DR0lGQUREUgkweDg5MTUJCS8qIGdldCBQQSBhZGRyZXNzCQkqLworI2RlZmluZSBTSU9DU0lGQUREUgkweDg5MTYJCS8qIHNldCBQQSBhZGRyZXNzCQkqLworI2RlZmluZSBTSU9DR0lGRFNUQUREUgkweDg5MTcJCS8qIGdldCByZW1vdGUgUEEgYWRkcmVzcwkqLworI2RlZmluZSBTSU9DU0lGRFNUQUREUgkweDg5MTgJCS8qIHNldCByZW1vdGUgUEEgYWRkcmVzcwkqLworI2RlZmluZSBTSU9DR0lGQlJEQUREUgkweDg5MTkJCS8qIGdldCBicm9hZGNhc3QgUEEgYWRkcmVzcwkqLworI2RlZmluZSBTSU9DU0lGQlJEQUREUgkweDg5MWEJCS8qIHNldCBicm9hZGNhc3QgUEEgYWRkcmVzcwkqLworI2RlZmluZSBTSU9DR0lGTkVUTUFTSwkweDg5MWIJCS8qIGdldCBuZXR3b3JrIFBBIG1hc2sJCSovCisjZGVmaW5lIFNJT0NTSUZORVRNQVNLCTB4ODkxYwkJLyogc2V0IG5ldHdvcmsgUEEgbWFzawkJKi8KKyNkZWZpbmUgU0lPQ0dJRk1FVFJJQwkweDg5MWQJCS8qIGdldCBtZXRyaWMJCQkqLworI2RlZmluZSBTSU9DU0lGTUVUUklDCTB4ODkxZQkJLyogc2V0IG1ldHJpYwkJCSovCisjZGVmaW5lIFNJT0NHSUZNRU0JMHg4OTFmCQkvKiBnZXQgbWVtb3J5IGFkZHJlc3MgKEJTRCkJKi8KKyNkZWZpbmUgU0lPQ1NJRk1FTQkweDg5MjAJCS8qIHNldCBtZW1vcnkgYWRkcmVzcyAoQlNEKQkqLworI2RlZmluZSBTSU9DR0lGTVRVCTB4ODkyMQkJLyogZ2V0IE1UVSBzaXplCQkJKi8KKyNkZWZpbmUgU0lPQ1NJRk1UVQkweDg5MjIJCS8qIHNldCBNVFUgc2l6ZQkJCSovCisjZGVmaW5lIFNJT0NTSUZOQU1FCTB4ODkyMwkJLyogc2V0IGludGVyZmFjZSBuYW1lICovCisjZGVmaW5lCVNJT0NTSUZIV0FERFIJMHg4OTI0CQkvKiBzZXQgaGFyZHdhcmUgYWRkcmVzcyAJKi8KKyNkZWZpbmUgU0lPQ0dJRkVOQ0FQCTB4ODkyNQkJLyogZ2V0L3NldCBlbmNhcHN1bGF0aW9ucyAgICAgICAqLworI2RlZmluZSBTSU9DU0lGRU5DQVAJMHg4OTI2CQkKKyNkZWZpbmUgU0lPQ0dJRkhXQUREUgkweDg5MjcJCS8qIEdldCBoYXJkd2FyZSBhZGRyZXNzCQkqLworI2RlZmluZSBTSU9DR0lGU0xBVkUJMHg4OTI5CQkvKiBEcml2ZXIgc2xhdmluZyBzdXBwb3J0CSovCisjZGVmaW5lIFNJT0NTSUZTTEFWRQkweDg5MzAKKyNkZWZpbmUgU0lPQ0FERE1VTFRJCTB4ODkzMQkJLyogTXVsdGljYXN0IGFkZHJlc3MgbGlzdHMJKi8KKyNkZWZpbmUgU0lPQ0RFTE1VTFRJCTB4ODkzMgorI2RlZmluZSBTSU9DR0lGSU5ERVgJMHg4OTMzCQkvKiBuYW1lIC0+IGlmX2luZGV4IG1hcHBpbmcJKi8KKyNkZWZpbmUgU0lPR0lGSU5ERVgJU0lPQ0dJRklOREVYCS8qIG1pc3ByaW50IGNvbXBhdGliaWxpdHkgOi0pCSovCisjZGVmaW5lIFNJT0NTSUZQRkxBR1MJMHg4OTM0CQkvKiBzZXQvZ2V0IGV4dGVuZGVkIGZsYWdzIHNldAkqLworI2RlZmluZSBTSU9DR0lGUEZMQUdTCTB4ODkzNQorI2RlZmluZSBTSU9DRElGQUREUgkweDg5MzYJCS8qIGRlbGV0ZSBQQSBhZGRyZXNzCQkqLworI2RlZmluZQlTSU9DU0lGSFdCUk9BRENBU1QJMHg4OTM3CS8qIHNldCBoYXJkd2FyZSBicm9hZGNhc3QgYWRkcgkqLworI2RlZmluZSBTSU9DR0lGQ09VTlQJMHg4OTM4CQkvKiBnZXQgbnVtYmVyIG9mIGRldmljZXMgKi8KKworI2RlZmluZSBTSU9DR0lGQlIJMHg4OTQwCQkvKiBCcmlkZ2luZyBzdXBwb3J0CQkqLworI2RlZmluZSBTSU9DU0lGQlIJMHg4OTQxCQkvKiBTZXQgYnJpZGdpbmcgb3B0aW9ucyAJKi8KKworI2RlZmluZSBTSU9DR0lGVFhRTEVOCTB4ODk0MgkJLyogR2V0IHRoZSB0eCBxdWV1ZSBsZW5ndGgJKi8KKyNkZWZpbmUgU0lPQ1NJRlRYUUxFTgkweDg5NDMJCS8qIFNldCB0aGUgdHggcXVldWUgbGVuZ3RoIAkqLworCisvKiBTSU9DR0lGRElWRVJUIHdhczoJMHg4OTQ0CQlGcmFtZSBkaXZlcnNpb24gc3VwcG9ydCAqLworLyogU0lPQ1NJRkRJVkVSVCB3YXM6CTB4ODk0NQkJU2V0IGZyYW1lIGRpdmVyc2lvbiBvcHRpb25zICovCisKKyNkZWZpbmUgU0lPQ0VUSFRPT0wJMHg4OTQ2CQkvKiBFdGh0b29sIGludGVyZmFjZQkJKi8KKworI2RlZmluZSBTSU9DR01JSVBIWQkweDg5NDcJCS8qIEdldCBhZGRyZXNzIG9mIE1JSSBQSFkgaW4gdXNlLiAqLworI2RlZmluZSBTSU9DR01JSVJFRwkweDg5NDgJCS8qIFJlYWQgTUlJIFBIWSByZWdpc3Rlci4JKi8KKyNkZWZpbmUgU0lPQ1NNSUlSRUcJMHg4OTQ5CQkvKiBXcml0ZSBNSUkgUEhZIHJlZ2lzdGVyLgkqLworCisjZGVmaW5lIFNJT0NXQU5ERVYJMHg4OTRBCQkvKiBnZXQvc2V0IG5ldGRldiBwYXJhbWV0ZXJzCSovCisKKy8qIEFSUCBjYWNoZSBjb250cm9sIGNhbGxzLiAqLworCQkgICAgLyogIDB4ODk1MCAtIDB4ODk1MiAgKiBvYnNvbGV0ZSBjYWxscywgZG9uJ3QgcmUtdXNlICovCisjZGVmaW5lIFNJT0NEQVJQCTB4ODk1MwkJLyogZGVsZXRlIEFSUCB0YWJsZSBlbnRyeQkqLworI2RlZmluZSBTSU9DR0FSUAkweDg5NTQJCS8qIGdldCBBUlAgdGFibGUgZW50cnkJCSovCisjZGVmaW5lIFNJT0NTQVJQCTB4ODk1NQkJLyogc2V0IEFSUCB0YWJsZSBlbnRyeQkJKi8KKworLyogUkFSUCBjYWNoZSBjb250cm9sIGNhbGxzLiAqLworI2RlZmluZSBTSU9DRFJBUlAJMHg4OTYwCQkvKiBkZWxldGUgUkFSUCB0YWJsZSBlbnRyeQkqLworI2RlZmluZSBTSU9DR1JBUlAJMHg4OTYxCQkvKiBnZXQgUkFSUCB0YWJsZSBlbnRyeQkJKi8KKyNkZWZpbmUgU0lPQ1NSQVJQCTB4ODk2MgkJLyogc2V0IFJBUlAgdGFibGUgZW50cnkJCSovCisKKy8qIERyaXZlciBjb25maWd1cmF0aW9uIGNhbGxzICovCisKKyNkZWZpbmUgU0lPQ0dJRk1BUAkweDg5NzAJCS8qIEdldCBkZXZpY2UgcGFyYW1ldGVycwkqLworI2RlZmluZSBTSU9DU0lGTUFQCTB4ODk3MQkJLyogU2V0IGRldmljZSBwYXJhbWV0ZXJzCSovCisKKy8qIERMQ0kgY29uZmlndXJhdGlvbiBjYWxscyAqLworCisjZGVmaW5lIFNJT0NBRERETENJCTB4ODk4MAkJLyogQ3JlYXRlIG5ldyBETENJIGRldmljZQkqLworI2RlZmluZSBTSU9DREVMRExDSQkweDg5ODEJCS8qIERlbGV0ZSBETENJIGRldmljZQkJKi8KKworI2RlZmluZSBTSU9DR0lGVkxBTgkweDg5ODIJCS8qIDgwMi4xUSBWTEFOIHN1cHBvcnQJCSovCisjZGVmaW5lIFNJT0NTSUZWTEFOCTB4ODk4MwkJLyogU2V0IDgwMi4xUSBWTEFOIG9wdGlvbnMgCSovCisKKy8qIGJvbmRpbmcgY2FsbHMgKi8KKworI2RlZmluZSBTSU9DQk9OREVOU0xBVkUJMHg4OTkwCQkvKiBlbnNsYXZlIGEgZGV2aWNlIHRvIHRoZSBib25kICovCisjZGVmaW5lIFNJT0NCT05EUkVMRUFTRSAweDg5OTEJCS8qIHJlbGVhc2UgYSBzbGF2ZSBmcm9tIHRoZSBib25kKi8KKyNkZWZpbmUgU0lPQ0JPTkRTRVRIV0FERFIgICAgICAweDg5OTIJLyogc2V0IHRoZSBodyBhZGRyIG9mIHRoZSBib25kICAqLworI2RlZmluZSBTSU9DQk9ORFNMQVZFSU5GT1FVRVJZIDB4ODk5MyAgIC8qIHJ0biBpbmZvIGFib3V0IHNsYXZlIHN0YXRlICAgKi8KKyNkZWZpbmUgU0lPQ0JPTkRJTkZPUVVFUlkgICAgICAweDg5OTQJLyogcnRuIGluZm8gYWJvdXQgYm9uZCBzdGF0ZSAgICAqLworI2RlZmluZSBTSU9DQk9ORENIQU5HRUFDVElWRSAgIDB4ODk5NSAgIC8qIHVwZGF0ZSB0byBhIG5ldyBhY3RpdmUgc2xhdmUgKi8KKwkJCQorLyogYnJpZGdlIGNhbGxzICovCisjZGVmaW5lIFNJT0NCUkFEREJSICAgICAweDg5YTAJCS8qIGNyZWF0ZSBuZXcgYnJpZGdlIGRldmljZSAgICAgKi8KKyNkZWZpbmUgU0lPQ0JSREVMQlIgICAgIDB4ODlhMQkJLyogcmVtb3ZlIGJyaWRnZSBkZXZpY2UgICAgICAgICAqLworI2RlZmluZSBTSU9DQlJBRERJRgkweDg5YTIJCS8qIGFkZCBpbnRlcmZhY2UgdG8gYnJpZGdlICAgICAgKi8KKyNkZWZpbmUgU0lPQ0JSREVMSUYJMHg4OWEzCQkvKiByZW1vdmUgaW50ZXJmYWNlIGZyb20gYnJpZGdlICovCisKKy8qIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmc6IHBhcmFtZXRlcnMgaW4gbGludXgvbmV0X3RzdGFtcC5oICovCisjZGVmaW5lIFNJT0NTSFdUU1RBTVAgICAweDg5YjAKKworLyogRGV2aWNlIHByaXZhdGUgaW9jdGwgY2FsbHMgKi8KKworLyoKKyAqCVRoZXNlIDE2IGlvY3RscyBhcmUgYXZhaWxhYmxlIHRvIGRldmljZXMgdmlhIHRoZSBkb19pb2N0bCgpIGRldmljZQorICoJdmVjdG9yLiBFYWNoIGRldmljZSBzaG91bGQgaW5jbHVkZSB0aGlzIGZpbGUgYW5kIHJlZGVmaW5lIHRoZXNlIG5hbWVzCisgKglhcyB0aGVpciBvd24uIEJlY2F1c2UgdGhlc2UgYXJlIGRldmljZSBkZXBlbmRlbnQgaXQgaXMgYSBnb29kIGlkZWEKKyAqCV9OT1RfIHRvIGlzc3VlIHRoZW0gdG8gcmFuZG9tIG9iamVjdHMgYW5kIGhvcGUuCisgKgorICoJVEhFU0UgSU9DVExTIEFSRSBfREVQUkVDQVRFRF8gQU5EIFdJTEwgRElTQVBQRUFSIElOIDIuNS5YIC1EYXZlTQorICovCisgCisjZGVmaW5lIFNJT0NERVZQUklWQVRFCTB4ODlGMAkvKiB0byA4OUZGICovCisKKy8qCisgKglUaGVzZSAxNiBpb2N0bCBjYWxscyBhcmUgcHJvdG9jb2wgcHJpdmF0ZQorICovCisgCisjZGVmaW5lIFNJT0NQUk9UT1BSSVZBVEUgMHg4OUUwIC8qIHRvIDg5RUYgKi8KKyNlbmRpZgkvKiBfTElOVVhfU09DS0lPU19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvc29tLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvc29tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY2NTk0ZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zb20uaApAQCAtMCwwICsxLDE1NCBAQAorI2lmbmRlZiBfTElOVVhfU09NX0gKKyNkZWZpbmUgX0xJTlVYX1NPTV9ICisKKy8qIEZpbGUgZm9ybWF0IGRlZmluaXRpb24gZm9yIFNPTSBleGVjdXRhYmxlcyAvIHNoYXJlZCBsaWJyYXJpZXMgKi8KKworLyogd2UgbmVlZCBzdHJ1Y3QgdGltZXNwZWMgKi8KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisKKyNkZWZpbmUgU09NX1BBR0VTSVpFIDQwOTYKKworLyogdGhpcyBpcyB0aGUgU09NIGhlYWRlciAqLworc3RydWN0IHNvbV9oZHIgeworCXNob3J0CQlzeXN0ZW1faWQ7CQkvKiBtYWdpYyBudW1iZXIgLSBzeXN0ZW0gKi8KKwlzaG9ydAkJYV9tYWdpYzsJCS8qIG1hZ2ljIG51bWJlciAtIGZpbGUgdHlwZSAqLworCXVuc2lnbmVkIGludAl2ZXJzaW9uX2lkOwkJLyogdmVyc2lvZCBJRDogWVlNTURESEggKi8KKwlzdHJ1Y3QgdGltZXNwZWMJZmlsZV90aW1lOwkJLyogc3lzdGVtIGNsb2NrICovCisJdW5zaWduZWQgaW50CWVudHJ5X3NwYWNlOwkJLyogc3BhY2UgZm9yIGVudHJ5IHBvaW50ICovCisJdW5zaWduZWQgaW50CWVudHJ5X3N1YnNwYWNlOwkJLyogc3Vic3BhY2UgZm9yIGVudHJ5IHBvaW50ICovCisJdW5zaWduZWQgaW50CWVudHJ5X29mZnNldDsJCS8qIG9mZnNldCBvZiBlbnRyeSBwb2ludCAqLworCXVuc2lnbmVkIGludAlhdXhfaGVhZGVyX2xvY2F0aW9uOwkvKiBhdXhpbGlhcnkgaGVhZGVyIGxvY2F0aW9uICovCisJdW5zaWduZWQgaW50CWF1eF9oZWFkZXJfc2l6ZTsJLyogYXV4aWxpYXJ5IGhlYWRlciBzaXplICovCisJdW5zaWduZWQgaW50CXNvbV9sZW5ndGg7CQkvKiBsZW5ndGggb2YgZW50aXJlIFNPTSAqLworCXVuc2lnbmVkIGludAlwcmVzdW1lZF9kcDsJCS8qIGNvbXBpbGVyJ3MgRFAgdmFsdWUgKi8KKwl1bnNpZ25lZCBpbnQJc3BhY2VfbG9jYXRpb247CQkvKiBzcGFjZSBkaWN0aW9uYXJ5IGxvY2F0aW9uICovCisJdW5zaWduZWQgaW50CXNwYWNlX3RvdGFsOwkJLyogbnVtYmVyIG9mIHNwYWNlIGVudHJpZXMgKi8KKwl1bnNpZ25lZCBpbnQJc3Vic3BhY2VfbG9jYXRpb247CS8qIHN1YnNwYWNlIGVudHJpZXMgbG9jYXRpb24gKi8KKwl1bnNpZ25lZCBpbnQJc3Vic3BhY2VfdG90YWw7CQkvKiBudW1iZXIgb2Ygc3Vic3BhY2UgZW50cmllcyAqLworCXVuc2lnbmVkIGludAlsb2FkZXJfZml4dXBfbG9jYXRpb247CS8qIE1QRS9pWCBsb2FkZXIgZml4dXAgKi8KKwl1bnNpZ25lZCBpbnQJbG9hZGVyX2ZpeHVwX3RvdGFsOwkvKiBudW1iZXIgb2YgZml4dXAgcmVjb3JkcyAqLworCXVuc2lnbmVkIGludAlzcGFjZV9zdHJpbmdzX2xvY2F0aW9uOwkvKiAoc3ViKXNwYWNlIG5hbWVzICovCisJdW5zaWduZWQgaW50CXNwYWNlX3N0cmluZ3Nfc2l6ZTsJLyogc2l6ZSBvZiBzdHJpbmdzIGFyZWEgKi8KKwl1bnNpZ25lZCBpbnQJaW5pdF9hcnJheV9sb2NhdGlvbjsJLyogcmVzZXJ2ZWQgKi8KKwl1bnNpZ25lZCBpbnQJaW5pdF9hcnJheV90b3RhbDsJLyogcmVzZXJ2ZWQgKi8KKwl1bnNpZ25lZCBpbnQJY29tcGlsZXJfbG9jYXRpb247CS8qIG1vZHVsZSBkaWN0aW9uYXJ5ICovCisJdW5zaWduZWQgaW50CWNvbXBpbGVyX3RvdGFsOwkJLyogbnVtYmVyIG9mIG1vZHVsZXMgKi8KKwl1bnNpZ25lZCBpbnQJc3ltYm9sX2xvY2F0aW9uOwkvKiBzeW1ib2wgZGljdGlvbmFyeSAqLworCXVuc2lnbmVkIGludAlzeW1ib2xfdG90YWw7CQkvKiBudW1iZXIgb2Ygc3ltYm9scyAqLworCXVuc2lnbmVkIGludAlmaXh1cF9yZXF1ZXN0X2xvY2F0aW9uOwkvKiBmaXh1cCByZXF1ZXN0cyAqLworCXVuc2lnbmVkIGludAlmaXh1cF9yZXF1ZXN0X3RvdGFsOwkvKiBudW1iZXIgb2YgZml4dXAgcmVxdWVzdHMgKi8KKwl1bnNpZ25lZCBpbnQJc3ltYm9sX3N0cmluZ3NfbG9jYXRpb247LyogbW9kdWxlICYgc3ltYm9sIG5hbWVzIGFyZWEgKi8KKwl1bnNpZ25lZCBpbnQJc3ltYm9sX3N0cmluZ3Nfc2l6ZTsJLyogc2l6ZSBvZiBzdHJpbmdzIGFyZWEgKi8KKwl1bnNpZ25lZCBpbnQJdW5sb2FkYWJsZV9zcF9sb2NhdGlvbjsJLyogdW5sb2FkYWJsZSBzcGFjZXMgbG9jYXRpb24gKi8KKwl1bnNpZ25lZCBpbnQJdW5sb2FkYWJsZV9zcF9zaXplOwkvKiBzaXplIG9mIGRhdGEgKi8KKwl1bnNpZ25lZCBpbnQJY2hlY2tzdW07Cit9OworCisvKiB2YWx1ZXMgZm9yIHN5c3RlbV9pZCAqLworCisjZGVmaW5lIFNPTV9TSURfUEFSSVNDXzFfMAkweDAyMGIKKyNkZWZpbmUgU09NX1NJRF9QQVJJU0NfMV8xCTB4MDIxMAorI2RlZmluZSBTT01fU0lEX1BBUklTQ18yXzAJMHgwMjE0CisKKy8qIHZhbHVlcyBmb3IgYV9tYWdpYyAqLworCisjZGVmaW5lIFNPTV9MSUJfRVhFQwkJMHgwMTA0CisjZGVmaW5lIFNPTV9SRUxPQ0FUQUJMRQkJMHgwMTA2CisjZGVmaW5lIFNPTV9FWEVDX05PTlNIQVJFCTB4MDEwNworI2RlZmluZSBTT01fRVhFQ19TSEFSRQkJMHgwMTA4CisjZGVmaW5lIFNPTV9FWEVDX0RFTUFORAkJMHgwMTBCCisjZGVmaW5lIFNPTV9MSUJfRFlOCQkweDAxMEQKKyNkZWZpbmUgU09NX0xJQl9TSEFSRQkJMHgwMTBFCisjZGVmaW5lIFNPTV9MSUJfUkVMT0MJCTB4MDYxOQorCisvKiB2YWx1ZXMgZm9yIHZlcnNpb25faWQuICBEZWNpbWFsIG5vdCBoZXgsIHllcy4gIEdyci4gKi8KKworI2RlZmluZSBTT01fSURfT0xECQk4NTA4MjExMgorI2RlZmluZSBTT01fSURfTkVXCQk4NzEwMjQxMgorCitzdHJ1Y3QgYXV4X2lkIHsKKwl1bnNpZ25lZCBpbnQJbWFuZGF0b3J5IDoxOwkvKiB0aGUgbGlua2VyIG11c3QgdW5kZXJzdGFuZCB0aGlzICovCisJdW5zaWduZWQgaW50CWNvcHkJICA6MTsJLyogTXVzdCBiZSBjb3BpZWQgYnkgdGhlIGxpbmtlciAqLworCXVuc2lnbmVkIGludAlhcHBlbmQJICA6MTsJLyogTXVzdCBiZSBtZXJnZWQgYnkgdGhlIGxpbmtlciAqLworCXVuc2lnbmVkIGludAlpZ25vcmUJICA6MTsJLyogRGlzY2FyZCBzZWN0aW9uIGlmIHVua25vd24gKi8KKwl1bnNpZ25lZCBpbnQJcmVzZXJ2ZWQgIDoxMjsKKwl1bnNpZ25lZCBpbnQJdHlwZQkgIDoxNjsJLyogSGVhZGVyIHR5cGUgKi8KKwl1bnNpZ25lZCBpbnQJbGVuZ3RoOwkJLyogbGVuZ3RoIG9mIF9mb2xsb3dpbmdfIGRhdGEgKi8KK307CisKKy8qIFRoZSBFeGVjIEF1eGlsaWFyeSBIZWFkZXIuICBDYWxsZWQgVGhlIEhQLVVYIEhlYWRlciB3aXRoaW4gSFAgYXBwYXJlbnRseS4gKi8KK3N0cnVjdCBzb21fZXhlY19hdXhoZHIgeworCXN0cnVjdCBhdXhfaWQJc29tX2F1eGhkcjsKKwlpbnQJCWV4ZWNfdHNpemU7CS8qIFRleHQgc2l6ZSBpbiBieXRlcyAqLworCWludAkJZXhlY190bWVtOwkvKiBBZGRyZXNzIHRvIGxvYWQgdGV4dCBhdCAqLworCWludAkJZXhlY190ZmlsZTsJLyogTG9jYXRpb24gb2YgdGV4dCBpbiBmaWxlICovCisJaW50CQlleGVjX2RzaXplOwkvKiBEYXRhIHNpemUgaW4gYnl0ZXMgKi8KKwlpbnQJCWV4ZWNfZG1lbTsJLyogQWRkcmVzcyB0byBsb2FkIGRhdGEgYXQgKi8KKwlpbnQJCWV4ZWNfZGZpbGU7CS8qIExvY2F0aW9uIG9mIGRhdGEgaW4gZmlsZSAqLworCWludAkJZXhlY19ic2l6ZTsJLyogVW5pbml0aWFsaXNlZCBkYXRhIChic3MpICovCisJaW50CQlleGVjX2VudHJ5OwkvKiBBZGRyZXNzIHRvIHN0YXJ0IGV4ZWN1dGluZyAqLworCWludAkJZXhlY19mbGFnczsJLyogbG9hZGVyIGZsYWdzICovCisJaW50CQlleGVjX2JmaWxsOwkvKiBpbml0aWFsaXNhdGlvbiB2YWx1ZSBmb3IgYnNzICovCit9OworCisvKiBPaCwgdGhlIHRoaW5ncyBwZW9wbGUgZG8gdG8gYXZvaWQgY2FzdHMuICBTaGFtZSBpdCdsbCBicmVhayB3aXRoIGdjYydzCisgKiBuZXcgYWxpYXNpbmcgcnVsZXMgcmVhbGx5LgorICovCit1bmlvbiBuYW1lX3B0IHsKKwljaGFyICoJCW5fbmFtZTsKKwl1bnNpZ25lZCBpbnQJbl9zdHJ4OworfTsKKworLyogVGhlIFNwYWNlIERpY3Rpb25hcnkgKi8KK3N0cnVjdCBzcGFjZV9kaWN0aW9uYXJ5X3JlY29yZCB7CisJdW5pb24gbmFtZV9wdAluYW1lOwkJCS8qIGluZGV4IHRvIHN1YnNwYWNlIG5hbWUgKi8KKwl1bnNpZ25lZCBpbnQJaXNfbG9hZGFibGUJOjE7CS8qIGxvYWRhYmxlICovCisJdW5zaWduZWQgaW50CWlzX2RlZmluZWQJOjE7CS8qIGRlZmluZWQgd2l0aGluIGZpbGUgKi8KKwl1bnNpZ25lZCBpbnQJaXNfcHJpdmF0ZQk6MTsJLyogbm90IHNoYXJhYmxlICovCisJdW5zaWduZWQgaW50CWhhc19pbnRlcm1lZGlhdGVfY29kZSA6MTsgLyogY29udGFpbnMgaW50ZXJtZWRpYXRlIGNvZGUgKi8KKwl1bnNpZ25lZCBpbnQJaXNfdHNwZWNpZmljCToxOwkvKiB0aHJlYWQgc3BlY2lmaWMgKi8KKwl1bnNpZ25lZCBpbnQJcmVzZXJ2ZWQJOjExOwkvKiBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLworCXVuc2lnbmVkIGludAlzb3J0X2tleQk6ODsJLyogZm9yIGxpbmtlciAqLworCXVuc2lnbmVkIGludAlyZXNlcnZlZDIJOjg7CS8qIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisKKwlpbnQJCXNwYWNlX251bWJlcjsJCS8qIGluZGV4ICovCisJaW50CQlzdWJzcGFjZV9pbmRleDsJCS8qIGluZGV4IGludG8gc3Vic3BhY2UgZGljdCAqLworCXVuc2lnbmVkIGludAlzdWJzcGFjZV9xdWFudGl0eTsJLyogbnVtYmVyIG9mIHN1YnNwYWNlcyAqLworCWludAkJbG9hZGVyX2ZpeF9pbmRleDsJLyogZm9yIGxvYWRlciAqLworCXVuc2lnbmVkIGludAlsb2FkZXJfZml4X3F1YW50aXR5OwkvKiBmb3IgbG9hZGVyICovCisJaW50CQlpbml0X3BvaW50ZXJfaW5kZXg7CS8qIGRhdGEgcG9pbnRlciBhcnJheSBpbmRleCAqLworCXVuc2lnbmVkIGludAlpbml0X3BvaW50ZXJfcXVhbnRpdHk7CS8qIG51bWJlciBvZiBkYXRhIHBvaW50ZXJzICovCit9OworCisvKiBUaGUgU3Vic3BhY2UgRGljdGlvbmFyeSAqLworc3RydWN0IHN1YnNwYWNlX2RpY3Rpb25hcnlfcmVjb3JkIHsKKwlpbnQJCXNwYWNlX2luZGV4OworCXVuc2lnbmVkIGludAlhY2Nlc3NfY29udHJvbF9iaXRzIDo3OworCXVuc2lnbmVkIGludAltZW1vcnlfcmVzaWRlbnQJOjE7CisJdW5zaWduZWQgaW50CWR1cF9jb21tb24JOjE7CisJdW5zaWduZWQgaW50CWlzX2NvbW1vbgk6MTsKKwl1bnNpZ25lZCBpbnQJcXVhZHJhbnQJOjI7CisJdW5zaWduZWQgaW50CWluaXRpYWxseV9mcm96ZW4gOjE7CisJdW5zaWduZWQgaW50CWlzX2ZpcnN0CToxOworCXVuc2lnbmVkIGludAljb2RlX29ubHkJOjE7CisJdW5zaWduZWQgaW50CXNvcnRfa2V5CTo4OworCXVuc2lnbmVkIGludAlyZXBsaWNhdGVfaW5pdAk6MTsKKwl1bnNpZ25lZCBpbnQJY29udGludWF0aW9uCToxOworCXVuc2lnbmVkIGludAlpc190c3BlY2lmaWMJOjE7CisJdW5zaWduZWQgaW50CWlzX2NvbWRhdAk6MTsKKwl1bnNpZ25lZCBpbnQJcmVzZXJ2ZWQJOjQ7CisKKwlpbnQJCWZpbGVfbG9jX2luaXRfdmFsdWU7CisJdW5zaWduZWQgaW50CWluaXRpYWxpemF0aW9uX2xlbmd0aDsKKwl1bnNpZ25lZCBpbnQJc3Vic3BhY2Vfc3RhcnQ7CisJdW5zaWduZWQgaW50CXN1YnNwYWNlX2xlbmd0aDsKKworCXVuc2lnbmVkIGludAlyZXNlcnZlZDIJOjU7CisJdW5zaWduZWQgaW50CWFsaWdubWVudAk6Mjc7CisKKwl1bmlvbiBuYW1lX3B0CW5hbWU7CisJaW50CQlmaXh1cF9yZXF1ZXN0X2luZGV4OworCXVuc2lnbmVkIGludAlmaXh1cF9yZXF1ZXN0X3F1YW50aXR5OworfTsKKworI2VuZGlmIC8qIF9MSU5VWF9TT01fSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NvbmV0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvc29uZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDY4MjkzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NvbmV0LmgKQEAgLTAsMCArMSw2MCBAQAorLyogc29uZXQuaCAtIFNPTkVUL1NIRCBwaHlzaWNhbCBsYXllciBjb250cm9sICovCisgCisvKiBXcml0dGVuIDE5OTUtMjAwMCBieSBXZXJuZXIgQWxtZXNiZXJnZXIsIEVQRkwgTFJDL0lDQSAqLworIAorCisjaWZuZGVmIExJTlVYX1NPTkVUX0gKKyNkZWZpbmUgTElOVVhfU09ORVRfSAorCisjZGVmaW5lIF9fU09ORVRfSVRFTVMgXAorICAgIF9fSEFORExFX0lURU0oc2VjdGlvbl9iaXApOyAJLyogc2VjdGlvbiBwYXJpdHkgZXJyb3JzIChCMSkgKi8gXAorICAgIF9fSEFORExFX0lURU0obGluZV9iaXApOwkJLyogbGluZSBwYXJpdHkgZXJyb3JzIChCMikgKi8gXAorICAgIF9fSEFORExFX0lURU0ocGF0aF9iaXApOwkJLyogcGF0aCBwYXJpdHkgZXJyb3JzIChCMykgKi8gXAorICAgIF9fSEFORExFX0lURU0obGluZV9mZWJlKTsJCS8qIGxpbmUgcGFyaXR5IGVycm9ycyBhdCByZW1vdGUgKi8gXAorICAgIF9fSEFORExFX0lURU0ocGF0aF9mZWJlKTsJCS8qIHBhdGggcGFyaXR5IGVycm9ycyBhdCByZW1vdGUgKi8gXAorICAgIF9fSEFORExFX0lURU0oY29ycl9oY3MpOwkJLyogY29ycmVjdGFibGUgaGVhZGVyIGVycm9ycyAqLyBcCisgICAgX19IQU5ETEVfSVRFTSh1bmNvcnJfaGNzKTsJCS8qIHVuY29ycmVjdGFibGUgaGVhZGVyIGVycm9ycyAqLyBcCisgICAgX19IQU5ETEVfSVRFTSh0eF9jZWxscyk7CQkvKiBjZWxscyBzZW50ICovIFwKKyAgICBfX0hBTkRMRV9JVEVNKHJ4X2NlbGxzKTsJCS8qIGNlbGxzIHJlY2VpdmVkICovCisKK3N0cnVjdCBzb25ldF9zdGF0cyB7CisjZGVmaW5lIF9fSEFORExFX0lURU0oaSkgaW50IGkKKwlfX1NPTkVUX0lURU1TCisjdW5kZWYgX19IQU5ETEVfSVRFTQorfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworI2RlZmluZSBTT05FVF9HRVRTVEFUCV9JT1IoJ2EnLEFUTUlPQ19QSFlUWVAsc3RydWN0IHNvbmV0X3N0YXRzKQorCQkJCQkvKiBnZXQgc3RhdGlzdGljcyAqLworI2RlZmluZSBTT05FVF9HRVRTVEFUWglfSU9SKCdhJyxBVE1JT0NfUEhZVFlQKzEsc3RydWN0IHNvbmV0X3N0YXRzKQorCQkJCQkvKiAuLi4gYW5kIHplcm8gY291bnRlcnMgKi8KKyNkZWZpbmUgU09ORVRfU0VURElBRwlfSU9XUignYScsQVRNSU9DX1BIWVRZUCsyLGludCkKKwkJCQkJLyogc2V0IGVycm9yIGluc2VydGlvbiAqLworI2RlZmluZSBTT05FVF9DTFJESUFHCV9JT1dSKCdhJyxBVE1JT0NfUEhZVFlQKzMsaW50KQorCQkJCQkvKiBjbGVhciBlcnJvciBpbnNlcnRpb24gKi8KKyNkZWZpbmUgU09ORVRfR0VURElBRwlfSU9SKCdhJyxBVE1JT0NfUEhZVFlQKzQsaW50KQorCQkJCQkvKiBxdWVyeSBlcnJvciBpbnNlcnRpb24gKi8KKyNkZWZpbmUgU09ORVRfU0VURlJBTUlORyBfSU9XKCdhJyxBVE1JT0NfUEhZVFlQKzUsaW50KQorCQkJCQkvKiBzZXQgZnJhbWluZyBtb2RlIChTT05FVC9TREgpICovCisjZGVmaW5lIFNPTkVUX0dFVEZSQU1JTkcgX0lPUignYScsQVRNSU9DX1BIWVRZUCs2LGludCkKKwkJCQkJLyogZ2V0IGZyYW1pbmcgbW9kZSAqLworI2RlZmluZSBTT05FVF9HRVRGUlNFTlNFIF9JT1IoJ2EnLEFUTUlPQ19QSFlUWVArNywgXAorICB1bnNpZ25lZCBjaGFyW1NPTkVUX0ZSU0VOU0VfU0laRV0pCS8qIGdldCBmcmFtaW5nIHNlbnNlIGluZm9ybWF0aW9uICovCisKKyNkZWZpbmUgU09ORVRfSU5TX1NCSVAJICAxCQkvKiBzZWN0aW9uIEJJUCAqLworI2RlZmluZSBTT05FVF9JTlNfTEJJUAkgIDIJCS8qIGxpbmUgQklQICovCisjZGVmaW5lIFNPTkVUX0lOU19QQklQCSAgNAkJLyogcGF0aCBCSVAgKi8KKyNkZWZpbmUgU09ORVRfSU5TX0ZSQU1FCSAgOAkJLyogb3V0IG9mIGZyYW1lICovCisjZGVmaW5lIFNPTkVUX0lOU19MT1MJIDE2CQkvKiBzZXQgbGluZSB0byB6ZXJvICovCisjZGVmaW5lIFNPTkVUX0lOU19MQUlTCSAzMgkJLyogbGluZSBhbGFybSBpbmRpY2F0aW9uIHNpZ25hbCAqLworI2RlZmluZSBTT05FVF9JTlNfUEFJUwkgNjQJCS8qIHBhdGggYWxhcm0gaW5kaWNhdGlvbiBzaWduYWwgKi8KKyNkZWZpbmUgU09ORVRfSU5TX0hDUwkxMjgJCS8qIGluc2VydCBIQ1MgZXJyb3IgKi8KKworI2RlZmluZSBTT05FVF9GUkFNRV9TT05FVCAwCQkvKiBTT05FVCBTVFMtMyBmcmFtaW5nICovCisjZGVmaW5lIFNPTkVUX0ZSQU1FX1NESCAgIDEJCS8qIFNESCBTVE0tMSBmcmFtaW5nICovCisKKyNkZWZpbmUgU09ORVRfRlJTRU5TRV9TSVpFIDYJCS8qIEMxWzNdLEgxWzNdICgweGZmIGZvciB1bmtub3duKSAqLworCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvc29ueXBpLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvc29ueXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZmZTJjMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zb255cGkuaApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIFNvbnkgUHJvZ3JhbW1hYmxlIEkvTyBDb250cm9sIERldmljZSBkcml2ZXIgZm9yIFZBSU8KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNSBTdGVsaWFuIFBvcCA8c3RlbGlhbkBwb3BpZXMubmV0PgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBOYXJheWFuYW4gUiBTIDxuYXJzQGthZGFtYmEub3JnPgorCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBBbGPDtHZlIDx3d3cuYWxjb3ZlLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgTWljaGFlbCBBc2hsZXkgPG0uYXNobGV5QHVuc3cuZWR1LmF1PgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBKdW5pY2hpIE1vcml0YSA8anVuMW1AbWFycy5kdGkubmUuanA+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIFRha2F5YSBLaW5qbyA8dC1raW5qb0B0YzQuc28tbmV0Lm5lLmpwPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBBbmRyZXcgVHJpZGdlbGwgPHRyaWRnZUB2YWxpbnV4LmNvbT4KKyAqCisgKiBFYXJsaWVyIHdvcmsgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBQYXVsIGBSdXN0eScgUnVzc2VsbCBhbmQgUGF1bCBNYWNrZXJyYXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX1NPTllQSV9IXworI2RlZmluZSBfU09OWVBJX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBldmVudHMgdGhlIHVzZXIgYXBwbGljYXRpb24gcmVhZGluZyAvZGV2L3NvbnlwaSBjYW4gdXNlICovCisKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0pPR0RJQUxfRE9XTgkJIDEKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0pPR0RJQUxfVVAJCQkgMgorI2RlZmluZSBTT05ZUElfRVZFTlRfSk9HRElBTF9ET1dOX1BSRVNTRUQJIDMKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0pPR0RJQUxfVVBfUFJFU1NFRAkJIDQKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0pPR0RJQUxfUFJFU1NFRAkJIDUKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0pPR0RJQUxfUkVMRUFTRUQJCSA2CS8qIG9ic29sZXRlICovCisjZGVmaW5lIFNPTllQSV9FVkVOVF9DQVBUVVJFX1BSRVNTRUQJCSA3CisjZGVmaW5lIFNPTllQSV9FVkVOVF9DQVBUVVJFX1JFTEVBU0VECQkgOAkvKiBvYnNvbGV0ZSAqLworI2RlZmluZSBTT05ZUElfRVZFTlRfQ0FQVFVSRV9QQVJUSUFMUFJFU1NFRAkgOQorI2RlZmluZSBTT05ZUElfRVZFTlRfQ0FQVFVSRV9QQVJUSUFMUkVMRUFTRUQJMTAKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0ZOS0VZX0VTQwkJCTExCisjZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9GMQkJCTEyCisjZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9GMgkJCTEzCisjZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9GMwkJCTE0CisjZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9GNAkJCTE1CisjZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9GNQkJCTE2CisjZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9GNgkJCTE3CisjZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9GNwkJCTE4CisjZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9GOAkJCTE5CisjZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9GOQkJCTIwCisjZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9GMTAJCQkyMQorI2RlZmluZSBTT05ZUElfRVZFTlRfRk5LRVlfRjExCQkJMjIKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0ZOS0VZX0YxMgkJCTIzCisjZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV8xCQkJMjQKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0ZOS0VZXzIJCQkyNQorI2RlZmluZSBTT05ZUElfRVZFTlRfRk5LRVlfRAkJCTI2CisjZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9FCQkJMjcKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0ZOS0VZX0YJCQkyOAorI2RlZmluZSBTT05ZUElfRVZFTlRfRk5LRVlfUwkJCTI5CisjZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9CCQkJMzAKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0JMVUVUT09USF9QUkVTU0VECQkzMQorI2RlZmluZSBTT05ZUElfRVZFTlRfUEtFWV9QMQkJCTMyCisjZGVmaW5lIFNPTllQSV9FVkVOVF9QS0VZX1AyCQkJMzMKKyNkZWZpbmUgU09OWVBJX0VWRU5UX1BLRVlfUDMJCQkzNAorI2RlZmluZSBTT05ZUElfRVZFTlRfQkFDS19QUkVTU0VECQkzNQorI2RlZmluZSBTT05ZUElfRVZFTlRfTElEX0NMT1NFRAkJCTM2CisjZGVmaW5lIFNPTllQSV9FVkVOVF9MSURfT1BFTkVECQkJMzcKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0JMVUVUT09USF9PTgkJMzgKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0JMVUVUT09USF9PRkYJCTM5CisjZGVmaW5lIFNPTllQSV9FVkVOVF9IRUxQX1BSRVNTRUQJCTQwCisjZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9PTkxZCQkJNDEKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0pPR0RJQUxfRkFTVF9ET1dOCQk0MgorI2RlZmluZSBTT05ZUElfRVZFTlRfSk9HRElBTF9GQVNUX1VQCQk0MworI2RlZmluZSBTT05ZUElfRVZFTlRfSk9HRElBTF9GQVNUX0RPV05fUFJFU1NFRAk0NAorI2RlZmluZSBTT05ZUElfRVZFTlRfSk9HRElBTF9GQVNUX1VQX1BSRVNTRUQJNDUKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0pPR0RJQUxfVkZBU1RfRE9XTgkJNDYKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0pPR0RJQUxfVkZBU1RfVVAJCTQ3CisjZGVmaW5lIFNPTllQSV9FVkVOVF9KT0dESUFMX1ZGQVNUX0RPV05fUFJFU1NFRAk0OAorI2RlZmluZSBTT05ZUElfRVZFTlRfSk9HRElBTF9WRkFTVF9VUF9QUkVTU0VECTQ5CisjZGVmaW5lIFNPTllQSV9FVkVOVF9aT09NX1BSRVNTRUQJCTUwCisjZGVmaW5lIFNPTllQSV9FVkVOVF9USFVNQlBIUkFTRV9QUkVTU0VECTUxCisjZGVmaW5lIFNPTllQSV9FVkVOVF9NRVlFX0ZBQ0UJCQk1MgorI2RlZmluZSBTT05ZUElfRVZFTlRfTUVZRV9PUFBPU0lURQkJNTMKKyNkZWZpbmUgU09OWVBJX0VWRU5UX01FTU9SWVNUSUNLX0lOU0VSVAkJNTQKKyNkZWZpbmUgU09OWVBJX0VWRU5UX01FTU9SWVNUSUNLX0VKRUNUCQk1NQorI2RlZmluZSBTT05ZUElfRVZFTlRfQU5ZQlVUVE9OX1JFTEVBU0VECQk1NgorI2RlZmluZSBTT05ZUElfRVZFTlRfQkFUVEVSWV9JTlNFUlQJCTU3CisjZGVmaW5lIFNPTllQSV9FVkVOVF9CQVRURVJZX1JFTU9WRQkJNTgKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0ZOS0VZX1JFTEVBU0VECQk1OQorI2RlZmluZSBTT05ZUElfRVZFTlRfV0lSRUxFU1NfT04JCTYwCisjZGVmaW5lIFNPTllQSV9FVkVOVF9XSVJFTEVTU19PRkYJCTYxCisjZGVmaW5lIFNPTllQSV9FVkVOVF9aT09NX0lOX1BSRVNTRUQJCTYyCisjZGVmaW5lIFNPTllQSV9FVkVOVF9aT09NX09VVF9QUkVTU0VECQk2MworI2RlZmluZSBTT05ZUElfRVZFTlRfQ0RfRUpFQ1RfUFJFU1NFRAkJNjQKKyNkZWZpbmUgU09OWVBJX0VWRU5UX01PREVLRVlfUFJFU1NFRAkJNjUKKyNkZWZpbmUgU09OWVBJX0VWRU5UX1BLRVlfUDQJCQk2NgorI2RlZmluZSBTT05ZUElfRVZFTlRfUEtFWV9QNQkJCTY3CisjZGVmaW5lIFNPTllQSV9FVkVOVF9TRVRUSU5HS0VZX1BSRVNTRUQJCTY4CisjZGVmaW5lIFNPTllQSV9FVkVOVF9WT0xVTUVfSU5DX1BSRVNTRUQJCTY5CisjZGVmaW5lIFNPTllQSV9FVkVOVF9WT0xVTUVfREVDX1BSRVNTRUQJCTcwCisjZGVmaW5lIFNPTllQSV9FVkVOVF9CUklHSFRORVNTX1BSRVNTRUQJCTcxCisjZGVmaW5lIFNPTllQSV9FVkVOVF9NRURJQV9QUkVTU0VECQk3MgorCisvKiBnZXQvc2V0IGJyaWdodG5lc3MgKi8KKyNkZWZpbmUgU09OWVBJX0lPQ0dCUlQJCV9JT1IoJ3YnLCAwLCBfX3U4KQorI2RlZmluZSBTT05ZUElfSU9DU0JSVAkJX0lPVygndicsIDAsIF9fdTgpCisKKy8qIGdldCBiYXR0ZXJ5IGZ1bGwgY2FwYWNpdHkvcmVtYWluaW5nIGNhcGFjaXR5ICovCisjZGVmaW5lIFNPTllQSV9JT0NHQkFUMUNBUAlfSU9SKCd2JywgMiwgX191MTYpCisjZGVmaW5lIFNPTllQSV9JT0NHQkFUMVJFTQlfSU9SKCd2JywgMywgX191MTYpCisjZGVmaW5lIFNPTllQSV9JT0NHQkFUMkNBUAlfSU9SKCd2JywgNCwgX191MTYpCisjZGVmaW5lIFNPTllQSV9JT0NHQkFUMlJFTQlfSU9SKCd2JywgNSwgX191MTYpCisKKy8qIGdldCBiYXR0ZXJ5IGZsYWdzOiBiYXR0ZXJ5MS9iYXR0ZXJ5Mi9hYyBhZGFwdGVyIHByZXNlbnQgKi8KKyNkZWZpbmUgU09OWVBJX0JGTEFHU19CMQkweDAxCisjZGVmaW5lIFNPTllQSV9CRkxBR1NfQjIJMHgwMgorI2RlZmluZSBTT05ZUElfQkZMQUdTX0FDCTB4MDQKKyNkZWZpbmUgU09OWVBJX0lPQ0dCQVRGTEFHUwlfSU9SKCd2JywgNywgX191OCkKKworLyogZ2V0L3NldCBibHVldG9vdGggc3Vic3lzdGVtIHN0YXRlIG9uL29mZiAqLworI2RlZmluZSBTT05ZUElfSU9DR0JMVUUJCV9JT1IoJ3YnLCA4LCBfX3U4KQorI2RlZmluZSBTT05ZUElfSU9DU0JMVUUJCV9JT1coJ3YnLCA5LCBfX3U4KQorCisvKiBnZXQvc2V0IGZhbiBzdGF0ZSBvbi9vZmYgKi8KKyNkZWZpbmUgU09OWVBJX0lPQ0dGQU4JCV9JT1IoJ3YnLCAxMCwgX191OCkKKyNkZWZpbmUgU09OWVBJX0lPQ1NGQU4JCV9JT1coJ3YnLCAxMSwgX191OCkKKworLyogZ2V0IHRlbXBlcmF0dXJlIChDKSAqLworI2RlZmluZSBTT05ZUElfSU9DR1RFTVAJCV9JT1IoJ3YnLCAxMiwgX191OCkKKworCisjZW5kaWYJCQkJLyogX1NPTllQSV9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NvdW5kLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvc291bmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGQ4NDJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NvdW5kLmgKQEAgLTAsMCArMSwyNyBAQAorCisvKgorICogTWlub3IgbnVtYmVycyBmb3IgdGhlIHNvdW5kIGRyaXZlci4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKworI2RlZmluZSBTTkRfREVWX0NUTAkJMAkvKiBDb250cm9sIHBvcnQgL2Rldi9taXhlciAqLworI2RlZmluZSBTTkRfREVWX1NFUQkJMQkvKiBTZXF1ZW5jZXIgb3V0cHV0IC9kZXYvc2VxdWVuY2VyIChGTQorCQkJCQkJc3ludGhlc2l6ZXIgYW5kIE1JREkgb3V0cHV0KSAqLworI2RlZmluZSBTTkRfREVWX01JRElOCQkyCS8qIFJhdyBtaWRpIGFjY2VzcyAqLworI2RlZmluZSBTTkRfREVWX0RTUAkJMwkvKiBEaWdpdGl6ZWQgdm9pY2UgL2Rldi9kc3AgKi8KKyNkZWZpbmUgU05EX0RFVl9BVURJTwkJNAkvKiBTcGFyYyBjb21wYXRpYmxlIC9kZXYvYXVkaW8gKi8KKyNkZWZpbmUgU05EX0RFVl9EU1AxNgkJNQkvKiBMaWtlIC9kZXYvZHNwIGJ1dCAxNiBiaXRzL3NhbXBsZSAqLworLyogI2RlZmluZSBTTkRfREVWX1NUQVRVUwk2ICovCS8qIC9kZXYvc25kc3RhdCAob2Jzb2xldGUpICovCisjZGVmaW5lIFNORF9ERVZfVU5VU0VECQk2CisjZGVmaW5lIFNORF9ERVZfQVdGTQkJNwkvKiBSZXNlcnZlZCAqLworI2RlZmluZSBTTkRfREVWX1NFUTIJCTgJLyogL2Rldi9zZXF1ZW5jZXIsIGxldmVsIDIgaW50ZXJmYWNlICovCisvKiAjZGVmaW5lIFNORF9ERVZfU05EUFJPQwk5ICovCS8qIC9kZXYvc25kcHJvYyBmb3IgcHJvZ3JhbW1hYmxlIGRldmljZXMgKG5vdCB1c2VkKSAqLworLyogI2RlZmluZSBTTkRfREVWX0RNTUlESQk5ICovCisjZGVmaW5lIFNORF9ERVZfU1lOVEgJCTkJLyogUmF3IHN5bnRoIGFjY2VzcyAvZGV2L3N5bnRoIChzYW1lIGFzIC9kZXYvZG1mbSkgKi8KKyNkZWZpbmUgU05EX0RFVl9ETUZNCQkxMAkvKiBSYXcgc3ludGggYWNjZXNzIC9kZXYvZG1mbSAqLworI2RlZmluZSBTTkRfREVWX1VOS05PV04xMQkxMQorI2RlZmluZSBTTkRfREVWX0FEU1AJCTEyCS8qIExpa2UgL2Rldi9kc3AgKG9ic29sZXRlKSAqLworI2RlZmluZSBTTkRfREVWX0FNSURJCQkxMwkvKiBMaWtlIC9kZXYvbWlkaSAob2Jzb2xldGUpICovCisjZGVmaW5lIFNORF9ERVZfQURNTUlESQkJMTQJLyogTGlrZSAvZGV2L2RtbWlkaSAob25zb2xldGUpICovCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zb3VuZGNhcmQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zb3VuZGNhcmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTNmOWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NvdW5kY2FyZC5oCkBAIC0wLDAgKzEsMTI3NiBAQAorI2lmbmRlZiBTT1VORENBUkRfSAorI2RlZmluZSBTT1VORENBUkRfSAorLyoKKyAqIENvcHlyaWdodCBieSBIYW5udSBTYXZvbGFpbmVuIDE5OTMtMTk5NworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAyLgorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworCisvKgorICogT1NTIGludGVyZmFjZSB2ZXJzaW9uLiBXaXRoIHZlcnNpb25zIGVhcmxpZXIgdGhhbiAzLjYgdGhpcyB2YWx1ZSBpcworICogYW4gaW50ZWdlciB3aXRoIHZhbHVlIGxlc3MgdGhhbiAzNjEuIEluIHZlcnNpb25zIDMuNiBhbmQgbGF0ZXIKKyAqIGl0J3MgYSBzaXggZGlnaXQgaGV4YWRlY2ltYWwgdmFsdWUuIEZvciBleGFtcGxlIHZhbHVlCisgKiBvZiAweDAzMDYwMCByZXByZXNlbnRzIE9TUyB2ZXJzaW9uIDMuNi4wLgorICogVXNlIGlvY3RsKGZkLCBPU1NfR0VUVkVSU0lPTiwgJmludCkgdG8gZ2V0IHRoZSB2ZXJzaW9uIG51bWJlciBvZgorICogdGhlIGN1cnJlbnRseSBhY3RpdmUgZHJpdmVyLgorICovCisjZGVmaW5lIFNPVU5EX1ZFUlNJT04JMHgwMzA4MDIKKyNkZWZpbmUgT1BFTl9TT1VORF9TWVNURU0KKworLyogSW4gTGludXggd2UgbmVlZCB0byBiZSBwcmVwYXJlZCBmb3IgY3Jvc3MgY29tcGlsaW5nICovCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworLyogRW5kaWFuIG1hY3Jvcy4gKi8KKyMgIGluY2x1ZGUgPGVuZGlhbi5oPgorCisvKgorICoJU3VwcG9ydGVkIGNhcmQgSUQgbnVtYmVycyAoU2hvdWxkIGJlIHNvbWV3aGVyZSBlbHNlPykKKyAqLworCisjZGVmaW5lIFNORENBUkRfQURMSUIJCTEKKyNkZWZpbmUgU05EQ0FSRF9TQgkJMgorI2RlZmluZSBTTkRDQVJEX1BBUwkJMworI2RlZmluZSBTTkRDQVJEX0dVUwkJNAorI2RlZmluZSBTTkRDQVJEX01QVTQwMQkJNQorI2RlZmluZSBTTkRDQVJEX1NCMTYJCTYKKyNkZWZpbmUgU05EQ0FSRF9TQjE2TUlESQk3CisjZGVmaW5lIFNORENBUkRfVUFSVDY4NTAJOAorI2RlZmluZSBTTkRDQVJEX0dVUzE2CQk5CisjZGVmaW5lIFNORENBUkRfTVNTCQkxMAorI2RlZmluZSBTTkRDQVJEX1BTUyAgICAgCTExCisjZGVmaW5lIFNORENBUkRfU1NDQVBFCQkxMgorI2RlZmluZSBTTkRDQVJEX1BTU19NUFUgICAgIAkxMworI2RlZmluZSBTTkRDQVJEX1BTU19NU1MgICAgIAkxNAorI2RlZmluZSBTTkRDQVJEX1NTQ0FQRV9NU1MJMTUKKyNkZWZpbmUgU05EQ0FSRF9UUlhQUk8JCTE2CisjZGVmaW5lIFNORENBUkRfVFJYUFJPX1NCCTE3CisjZGVmaW5lIFNORENBUkRfVFJYUFJPX01QVQkxOAorI2RlZmluZSBTTkRDQVJEX01BRDE2CQkxOQorI2RlZmluZSBTTkRDQVJEX01BRDE2X01QVQkyMAorI2RlZmluZSBTTkRDQVJEX0NTNDIzMgkJMjEKKyNkZWZpbmUgU05EQ0FSRF9DUzQyMzJfTVBVCTIyCisjZGVmaW5lIFNORENBUkRfTUFVSQkJMjMKKyNkZWZpbmUgU05EQ0FSRF9QU0VVRE9fTVNTCTI0CisjZGVmaW5lIFNORENBUkRfR1VTUE5QCQkyNQorI2RlZmluZSBTTkRDQVJEX1VBUlQ0MDEJCTI2CisvKiBTb3VuZCBjYXJkIG51bWJlcnMgMjcgdG8gTiBhcmUgcmVzZXJ2ZWQuIERvbid0IGFkZCBtb3JlIG51bWJlcnMgaGVyZS4gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJT0NUTCBDb21tYW5kcyBmb3IgL2Rldi9zZXF1ZW5jZXIKKyAqLworCisjaWZuZGVmIF9TSU9XUgorI2lmIGRlZmluZWQoX0lPV1IpICYmIChkZWZpbmVkKF9BSVgpIHx8ICghZGVmaW5lZChzdW4pICYmICFkZWZpbmVkKHNwYXJjKSAmJiAhZGVmaW5lZChfX3NwYXJjX18pICYmICFkZWZpbmVkKF9fSU5DaW9jdGxoKSAmJiAhZGVmaW5lZChfX0x5bnhfXykpKQorLyogVXNlIGFscmVhZHkgZGVmaW5lZCBpb2N0bCBkZWZpbmVzIGlmIHRoZXkgZXhpc3QgKGV4Y2VwdCB3aXRoIFN1biBvciBTcGFyYykgKi8KKyNkZWZpbmUJU0lPQ1BBUk1fTUFTSwlJT0NQQVJNX01BU0sKKyNkZWZpbmUJU0lPQ19WT0lECUlPQ19WT0lECisjZGVmaW5lCVNJT0NfT1VUCUlPQ19PVVQKKyNkZWZpbmUJU0lPQ19JTgkJSU9DX0lOCisjZGVmaW5lCVNJT0NfSU5PVVQJSU9DX0lOT1VUCisjZGVmaW5lIF9TSU9DX1NJWkUJX0lPQ19TSVpFCisjZGVmaW5lIF9TSU9DX0RJUglfSU9DX0RJUgorI2RlZmluZSBfU0lPQ19OT05FCV9JT0NfTk9ORQorI2RlZmluZSBfU0lPQ19SRUFECV9JT0NfUkVBRAorI2RlZmluZSBfU0lPQ19XUklURQlfSU9DX1dSSVRFCisjZGVmaW5lCV9TSU8JCV9JTworI2RlZmluZQlfU0lPUgkJX0lPUgorI2RlZmluZQlfU0lPVwkJX0lPVworI2RlZmluZQlfU0lPV1IJCV9JT1dSCisjZWxzZQorCisvKiBJb2N0bCdzIGhhdmUgdGhlIGNvbW1hbmQgZW5jb2RlZCBpbiB0aGUgbG93ZXIgd29yZCwKKyAqIGFuZCB0aGUgc2l6ZSBvZiBhbnkgaW4gb3Igb3V0IHBhcmFtZXRlcnMgaW4gdGhlIHVwcGVyCisgKiB3b3JkLiAgVGhlIGhpZ2ggMiBiaXRzIG9mIHRoZSB1cHBlciB3b3JkIGFyZSB1c2VkCisgKiB0byBlbmNvZGUgdGhlIGluL291dCBzdGF0dXMgb2YgdGhlIHBhcmFtZXRlcjsgZm9yIG5vdworICogd2UgcmVzdHJpY3QgcGFyYW1ldGVycyB0byBhdCBtb3N0IDgxOTEgYnl0ZXMuCisgKi8KKy8qICNkZWZpbmUJU0lPQ1RZUEUJCSgweGZmPDw4KSAqLworI2RlZmluZQlTSU9DUEFSTV9NQVNLCTB4MWZmZgkJLyogcGFyYW1ldGVycyBtdXN0IGJlIDwgODE5MiBieXRlcyAqLworI2RlZmluZQlTSU9DX1ZPSUQJMHgwMDAwMDAwMAkvKiBubyBwYXJhbWV0ZXJzICovCisjZGVmaW5lCVNJT0NfT1VUCTB4MjAwMDAwMDAJLyogY29weSBvdXQgcGFyYW1ldGVycyAqLworI2RlZmluZQlTSU9DX0lOCQkweDQwMDAwMDAwCS8qIGNvcHkgaW4gcGFyYW1ldGVycyAqLworI2RlZmluZQlTSU9DX0lOT1VUCShTSU9DX0lOfFNJT0NfT1VUKQorLyogdGhlIDB4MjAwMDAwMDAgaXMgc28gd2UgY2FuIGRpc3Rpbmd1aXNoIG5ldyBpb2N0bCdzIGZyb20gb2xkICovCisjZGVmaW5lCV9TSU8oeCx5KQkoKGludCkoU0lPQ19WT0lEfCh4PDw4KXx5KSkKKyNkZWZpbmUJX1NJT1IoeCx5LHQpCSgoaW50KShTSU9DX09VVHwoKHNpemVvZih0KSZTSU9DUEFSTV9NQVNLKTw8MTYpfCh4PDw4KXx5KSkKKyNkZWZpbmUJX1NJT1coeCx5LHQpCSgoaW50KShTSU9DX0lOfCgoc2l6ZW9mKHQpJlNJT0NQQVJNX01BU0spPDwxNil8KHg8PDgpfHkpKQorLyogdGhpcyBzaG91bGQgYmUgX1NJT1JXLCBidXQgc3RkaW8gZ290IHRoZXJlIGZpcnN0ICovCisjZGVmaW5lCV9TSU9XUih4LHksdCkJKChpbnQpKFNJT0NfSU5PVVR8KChzaXplb2YodCkmU0lPQ1BBUk1fTUFTSyk8PDE2KXwoeDw8OCl8eSkpCisjZGVmaW5lIF9TSU9DX1NJWkUoeCkJKCh4Pj4xNikmU0lPQ1BBUk1fTUFTSykJCisjZGVmaW5lIF9TSU9DX0RJUih4KQkoeCAmIDB4ZjAwMDAwMDApCisjZGVmaW5lIF9TSU9DX05PTkUJU0lPQ19WT0lECisjZGVmaW5lIF9TSU9DX1JFQUQJU0lPQ19PVVQKKyNkZWZpbmUgX1NJT0NfV1JJVEUJU0lPQ19JTgorIyAgZW5kaWYgLyogX0lPV1IgKi8KKyNlbmRpZiAgLyogIV9TSU9XUiAqLworCisjZGVmaW5lIFNORENUTF9TRVFfUkVTRVQJCV9TSU8gICgnUScsIDApCisjZGVmaW5lIFNORENUTF9TRVFfU1lOQwkJCV9TSU8gICgnUScsIDEpCisjZGVmaW5lIFNORENUTF9TWU5USF9JTkZPCQlfU0lPV1IoJ1EnLCAyLCBzdHJ1Y3Qgc3ludGhfaW5mbykKKyNkZWZpbmUgU05EQ1RMX1NFUV9DVFJMUkFURQkJX1NJT1dSKCdRJywgMywgaW50KQkvKiBTZXQvZ2V0IHRpbWVyIHJlc29sdXRpb24gKEhaKSAqLworI2RlZmluZSBTTkRDVExfU0VRX0dFVE9VVENPVU5UCQlfU0lPUiAoJ1EnLCA0LCBpbnQpCisjZGVmaW5lIFNORENUTF9TRVFfR0VUSU5DT1VOVAkJX1NJT1IgKCdRJywgNSwgaW50KQorI2RlZmluZSBTTkRDVExfU0VRX1BFUkNNT0RFCQlfU0lPVyAoJ1EnLCA2LCBpbnQpCisjZGVmaW5lIFNORENUTF9GTV9MT0FEX0lOU1RSCQlfU0lPVyAoJ1EnLCA3LCBzdHJ1Y3Qgc2JpX2luc3RydW1lbnQpCS8qIE9ic29sZXRlLiBEb24ndCB1c2UhISEhISEgKi8KKyNkZWZpbmUgU05EQ1RMX1NFUV9URVNUTUlESQkJX1NJT1cgKCdRJywgOCwgaW50KQorI2RlZmluZSBTTkRDVExfU0VRX1JFU0VUU0FNUExFUwkJX1NJT1cgKCdRJywgOSwgaW50KQorI2RlZmluZSBTTkRDVExfU0VRX05SU1lOVEhTCQlfU0lPUiAoJ1EnLDEwLCBpbnQpCisjZGVmaW5lIFNORENUTF9TRVFfTlJNSURJUwkJX1NJT1IgKCdRJywxMSwgaW50KQorI2RlZmluZSBTTkRDVExfTUlESV9JTkZPCQlfU0lPV1IoJ1EnLDEyLCBzdHJ1Y3QgbWlkaV9pbmZvKQorI2RlZmluZSBTTkRDVExfU0VRX1RIUkVTSE9MRAkJX1NJT1cgKCdRJywxMywgaW50KQorI2RlZmluZSBTTkRDVExfU1lOVEhfTUVNQVZMCQlfU0lPV1IoJ1EnLDE0LCBpbnQpCS8qIGluPWRldiMsIG91dD1tZW1zaXplICovCisjZGVmaW5lIFNORENUTF9GTV80T1BfRU5BQkxFCQlfU0lPVyAoJ1EnLDE1LCBpbnQpCS8qIGluPWRldiMgKi8KKyNkZWZpbmUgU05EQ1RMX1NFUV9QQU5JQwkJX1NJTyAgKCdRJywxNykKKyNkZWZpbmUgU05EQ1RMX1NFUV9PVVRPRkJBTkQJCV9TSU9XICgnUScsMTgsIHN0cnVjdCBzZXFfZXZlbnRfcmVjKQorI2RlZmluZSBTTkRDVExfU0VRX0dFVFRJTUUJCV9TSU9SICgnUScsMTksIGludCkKKyNkZWZpbmUgU05EQ1RMX1NZTlRIX0lECQkJX1NJT1dSKCdRJywyMCwgc3RydWN0IHN5bnRoX2luZm8pCisjZGVmaW5lIFNORENUTF9TWU5USF9DT05UUk9MCQlfU0lPV1IoJ1EnLDIxLCBzdHJ1Y3Qgc3ludGhfY29udHJvbCkKKyNkZWZpbmUgU05EQ1RMX1NZTlRIX1JFTU9WRVNBTVBMRQlfU0lPV1IoJ1EnLDIyLCBzdHJ1Y3QgcmVtb3ZlX3NhbXBsZSkKKwordHlwZWRlZiBzdHJ1Y3Qgc3ludGhfY29udHJvbAoreworCWludCBkZXZubzsJLyogU3ludGhlc2l6ZXIgIyAqLworCWNoYXIgZGF0YVs0MDAwXTsgLyogRGV2aWNlIHNwZXNpZmljIGNvbW1hbmQvZGF0YSByZWNvcmQgKi8KK31zeW50aF9jb250cm9sOworCit0eXBlZGVmIHN0cnVjdCByZW1vdmVfc2FtcGxlCit7CisJaW50IGRldm5vOwkvKiBTeW50aGVzaXplciAjICovCisJaW50IGJhbmtubzsJLyogTUlESSBiYW5rICMgKDA9R2VuZXJhbCBNSURJKSAqLworCWludCBpbnN0cm5vOwkvKiBNSURJIGluc3RydW1lbnQgbnVtYmVyICovCit9IHJlbW92ZV9zYW1wbGU7CisKK3R5cGVkZWYgc3RydWN0IHNlcV9ldmVudF9yZWMgeworCQl1bnNpZ25lZCBjaGFyIGFycls4XTsKK30gc2VxX2V2ZW50X3JlYzsKKworI2RlZmluZSBTTkRDVExfVE1SX1RJTUVCQVNFCQlfU0lPV1IoJ1QnLCAxLCBpbnQpCisjZGVmaW5lIFNORENUTF9UTVJfU1RBUlQJCV9TSU8gICgnVCcsIDIpCisjZGVmaW5lIFNORENUTF9UTVJfU1RPUAkJCV9TSU8gICgnVCcsIDMpCisjZGVmaW5lIFNORENUTF9UTVJfQ09OVElOVUUJCV9TSU8gICgnVCcsIDQpCisjZGVmaW5lIFNORENUTF9UTVJfVEVNUE8JCV9TSU9XUignVCcsIDUsIGludCkKKyNkZWZpbmUgU05EQ1RMX1RNUl9TT1VSQ0UJCV9TSU9XUignVCcsIDYsIGludCkKKyMJZGVmaW5lIFRNUl9JTlRFUk5BTAkJMHgwMDAwMDAwMQorIwlkZWZpbmUgVE1SX0VYVEVSTkFMCQkweDAwMDAwMDAyCisjCQlkZWZpbmUgVE1SX01PREVfTUlESQkweDAwMDAwMDEwCisjCQlkZWZpbmUgVE1SX01PREVfRlNLCTB4MDAwMDAwMjAKKyMJCWRlZmluZSBUTVJfTU9ERV9DTFMJMHgwMDAwMDA0MAorIwkJZGVmaW5lIFRNUl9NT0RFX1NNUFRFCTB4MDAwMDAwODAKKyNkZWZpbmUgU05EQ1RMX1RNUl9NRVRST05PTUUJCV9TSU9XICgnVCcsIDcsIGludCkKKyNkZWZpbmUgU05EQ1RMX1RNUl9TRUxFQ1QJCV9TSU9XICgnVCcsIDgsIGludCkKKworLyoKKyAqIFNvbWUgYmlnIGVuZGlhbi9saXR0bGUgZW5kaWFuIGhhbmRsaW5nIG1hY3JvcworICovCisKKyNkZWZpbmUgX0xJTlVYX1BBVENIS0VZX0hfSU5ESVJFQ1QKKyNpbmNsdWRlIDxsaW51eC9wYXRjaGtleS5oPgorI3VuZGVmIF9MSU5VWF9QQVRDSEtFWV9IX0lORElSRUNUCisKKyNpZiAgIGRlZmluZWQoX19CWVRFX09SREVSKQorIyAgaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorIyAgICBkZWZpbmUgQUZNVF9TMTZfTkUgQUZNVF9TMTZfQkUKKyMgIGVsaWYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTgorIyAgICBkZWZpbmUgQUZNVF9TMTZfTkUgQUZNVF9TMTZfTEUKKyMgIGVsc2UKKyMgICAgZXJyb3IgImNvdWxkIG5vdCBkZXRlcm1pbmUgYnl0ZSBvcmRlciIKKyMgIGVuZGlmCisjZW5kaWYKKworLyoKKyAqCVNhbXBsZSBsb2FkaW5nIG1lY2hhbmlzbSBmb3IgaW50ZXJuYWwgc3ludGhlc2l6ZXJzICgvZGV2L3NlcXVlbmNlcikKKyAqCVRoZSBmb2xsb3dpbmcgcGF0Y2hfaW5mbyBzdHJ1Y3R1cmUgaGFzIGJlZW4gZGVzaWduZWQgdG8gc3VwcG9ydAorICoJR3JhdmlzIFVsdHJhU291bmQuIEl0IHRyaWVzIHRvIGJlIHVuaXZlcnNhbCBmb3JtYXQgZm9yIHVwbG9hZGluZworICoJc2FtcGxlIGJhc2VkIHBhdGNoZXMgYnV0IGlzIHByb2JhYmx5IHRvbyBsaW1pdGVkLgorICoKKyAqICAgICAgKFBCRCkgQXMgSGFubnUgZ3Vlc3NlZCwgdGhlIEdVUyBzdHJ1Y3R1cmUgaXMgdG9vIGxpbWl0ZWQgZm9yIAorICogICAgICB0aGUgV2F2ZUZyb250LCBidXQgdGhpcyBpcyB0aGUgcmlnaHQgcGxhY2UgZm9yIGEgY29uc3RhbnQgZGVmaW5pdGlvbi4KKyAqLworCitzdHJ1Y3QgcGF0Y2hfaW5mbyB7CisJCXVuc2lnbmVkIHNob3J0IGtleTsJCS8qIFVzZSBXQVZFX1BBVENIIGhlcmUgKi8KKyNkZWZpbmUgV0FWRV9QQVRDSAkgICBfUEFUQ0hLRVkoMHgwNCkKKyNkZWZpbmUgR1VTX1BBVENICSAgIFdBVkVfUEFUQ0gKKyNkZWZpbmUgV0FWRUZST05UX1BBVENIICAgIF9QQVRDSEtFWSgweDA2KQorCisJCXNob3J0IGRldmljZV9ubzsJLyogU3ludGhlc2l6ZXIgbnVtYmVyICovCisJCXNob3J0IGluc3RyX25vOwkJLyogTWlkaSBwZ20jICovCisKKwkJdW5zaWduZWQgaW50IG1vZGU7CisvKgorICogVGhlIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgaGFzIHRoZSBzYW1lIGZvcm1hdCB0aGFuIHRoZSBHVVMgLlBBVAorICogZmlsZXMKKyAqLworI2RlZmluZSBXQVZFXzE2X0JJVFMJMHgwMQkvKiBiaXQgMCA9IDggb3IgMTYgYml0IHdhdmUgZGF0YS4gKi8KKyNkZWZpbmUgV0FWRV9VTlNJR05FRAkweDAyCS8qIGJpdCAxID0gU2lnbmVkIC0gVW5zaWduZWQgZGF0YS4gKi8KKyNkZWZpbmUgV0FWRV9MT09QSU5HCTB4MDQJLyogYml0IDIgPSBsb29waW5nIGVuYWJsZWQtMS4gKi8KKyNkZWZpbmUgV0FWRV9CSURJUl9MT09QCTB4MDgJLyogYml0IDMgPSBTZXQgaXMgYmlkaXJlY3Rpb25hbCBsb29waW5nLiAqLworI2RlZmluZSBXQVZFX0xPT1BfQkFDSwkweDEwCS8qIGJpdCA0ID0gU2V0IGlzIGxvb3BpbmcgYmFja3dhcmQuICovCisjZGVmaW5lIFdBVkVfU1VTVEFJTl9PTgkweDIwCS8qIGJpdCA1ID0gVHVybiBzdXN0YWluaW5nIG9uLiAoRW52LiBwdHMuIDMpKi8KKyNkZWZpbmUgV0FWRV9FTlZFTE9QRVMJMHg0MAkvKiBiaXQgNiA9IEVuYWJsZSBlbnZlbG9wZXMgLSAxICovCisjZGVmaW5lIFdBVkVfRkFTVF9SRUxFQVNFIDB4ODAJLyogYml0IDcgPSBTaHV0IG9mZiBpbW1lZGlhdGVseSBhZnRlciBub3RlIG9mZiAqLworCQkJCS8qIAkodXNlIHRoZSBlbnZfcmF0ZS9lbnZfb2ZmcyBmaWVsZHMpLiAqLworLyogTGludXggc3BlY2lmaWMgYml0cyAqLworI2RlZmluZSBXQVZFX1ZJQlJBVE8JMHgwMDAxMDAwMAkvKiBUaGUgdmlicmF0byBpbmZvIGlzIHZhbGlkICovCisjZGVmaW5lIFdBVkVfVFJFTU9MTwkweDAwMDIwMDAwCS8qIFRoZSB0cmVtb2xvIGluZm8gaXMgdmFsaWQgKi8KKyNkZWZpbmUgV0FWRV9TQ0FMRQkweDAwMDQwMDAwCS8qIFRoZSBzY2FsaW5nIGluZm8gaXMgdmFsaWQgKi8KKyNkZWZpbmUgV0FWRV9GUkFDVElPTlMJMHgwMDA4MDAwMAkvKiBGcmFjdGlvbiBpbmZvcm1hdGlvbiBpcyB2YWxpZCAqLworLyogUmVzZXJ2ZWQgYml0cyAqLworI2RlZmluZSBXQVZFX1JPTQkweDQwMDAwMDAwCS8qIEZvciBmdXR1cmUgdXNlICovCisjZGVmaW5lIFdBVkVfTVVMQVcJMHgyMDAwMDAwMAkvKiBGb3IgZnV0dXJlIHVzZSAqLworLyogT3RoZXIgYml0cyBtdXN0IGJlIHplcm9lZCAqLworCisJCWludCBsZW47CS8qIFNpemUgb2YgdGhlIHdhdmUgZGF0YSBpbiBieXRlcyAqLworCQlpbnQgbG9vcF9zdGFydCwgbG9vcF9lbmQ7IC8qIEJ5dGUgb2Zmc2V0cyBmcm9tIHRoZSBiZWdpbm5pbmcgKi8KKworLyogCisgKiBUaGUgYmFzZV9mcmVxIGFuZCBiYXNlX25vdGUgZmllbGRzIGFyZSB1c2VkIHdoZW4gY29tcHV0aW5nIHRoZQorICogcGxheWJhY2sgc3BlZWQgZm9yIGEgbm90ZS4gVGhlIGJhc2Vfbm90ZSBkZWZpbmVzIHRoZSB0b25lIGZyZXF1ZW5jeQorICogd2hpY2ggaXMgaGVhcmQgaWYgdGhlIHNhbXBsZSBpcyBwbGF5ZWQgdXNpbmcgdGhlIGJhc2VfZnJlcSBhcyB0aGUKKyAqIHBsYXliYWNrIHNwZWVkLgorICoKKyAqIFRoZSBsb3dfbm90ZSBhbmQgaGlnaF9ub3RlIGZpZWxkcyBkZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gbm90ZQorICogZnJlcXVlbmNpZXMgZm9yIHdoaWNoIHRoaXMgc2FtcGxlIGlzIHZhbGlkLiBJdCBpcyBwb3NzaWJsZSB0byBkZWZpbmUKKyAqIG1vcmUgdGhhbiBvbmUgc2FtcGxlcyBmb3IgYW4gaW5zdHJ1bWVudCBudW1iZXIgYXQgdGhlIHNhbWUgdGltZS4gVGhlCisgKiBsb3dfbm90ZSBhbmQgaGlnaF9ub3RlIGZpZWxkcyBhcmUgdXNlZCB0byBzZWxlY3QgdGhlIG1vc3Qgc3VpdGFibGUgb25lLgorICoKKyAqIFRoZSBmaWVsZHMgYmFzZV9ub3RlLCBoaWdoX25vdGUgYW5kIGxvd19ub3RlIHNob3VsZCBjb250YWluCisgKiB0aGUgbm90ZSBmcmVxdWVuY3kgbXVsdGlwbGllZCBieSAxMDAwLiBGb3IgZXhhbXBsZSB2YWx1ZSBmb3IgdGhlCisgKiBtaWRkbGUgQSBpcyA0NDAqMTAwMC4KKyAqLworCisJCXVuc2lnbmVkIGludCBiYXNlX2ZyZXE7CisJCXVuc2lnbmVkIGludCBiYXNlX25vdGU7CisJCXVuc2lnbmVkIGludCBoaWdoX25vdGU7CisJCXVuc2lnbmVkIGludCBsb3dfbm90ZTsKKwkJaW50IHBhbm5pbmc7CS8qIC0xMjg9bGVmdCwgMTI3PXJpZ2h0ICovCisJCWludCBkZXR1bmluZzsKKworLyoJTmV3IGZpZWxkcyBpbnRyb2R1Y2VkIGluIHZlcnNpb24gMS45OS41CSovCisKKyAgICAgICAvKiBFbnZlbG9wZS4gRW5hYmxlZCBieSBtb2RlIGJpdCBXQVZFX0VOVkVMT1BFUwkqLworCQl1bnNpZ25lZCBjaGFyCWVudl9yYXRlWyA2IF07CSAvKiBHVVMgSFcgcmFtcGluZyByYXRlICovCisJCXVuc2lnbmVkIGNoYXIJZW52X29mZnNldFsgNiBdOyAvKiAyNTUgPT0gMTAwJSAqLworCisJLyogCisJICogVGhlIHRyZW1vbG8sIHZpYnJhdG8gYW5kIHNjYWxlIGluZm8gYXJlIG5vdCBzdXBwb3J0ZWQgeWV0LgorCSAqIEVuYWJsZSBieSBzZXR0aW5nIHRoZSBtb2RlIGJpdHMgV0FWRV9UUkVNT0xPLCBXQVZFX1ZJQlJBVE8gb3IKKwkgKiBXQVZFX1NDQUxFCisJICovCisKKwkJdW5zaWduZWQgY2hhcgl0cmVtb2xvX3N3ZWVwOworCQl1bnNpZ25lZCBjaGFyCXRyZW1vbG9fcmF0ZTsKKwkJdW5zaWduZWQgY2hhcgl0cmVtb2xvX2RlcHRoOworCQorCQl1bnNpZ25lZCBjaGFyCXZpYnJhdG9fc3dlZXA7CisJCXVuc2lnbmVkIGNoYXIJdmlicmF0b19yYXRlOworCQl1bnNpZ25lZCBjaGFyCXZpYnJhdG9fZGVwdGg7CisKKwkJaW50CQlzY2FsZV9mcmVxdWVuY3k7CisJCXVuc2lnbmVkIGludAlzY2FsZV9mYWN0b3I7CQkvKiBmcm9tIDAgdG8gMjA0OCBvciAwIHRvIDIgKi8KKwkKKwkgICAgICAgIGludAkJdm9sdW1lOworCQlpbnQJCWZyYWN0aW9uczsKKwkJaW50CQlyZXNlcnZlZDE7CisJICAgICAgICBpbnQJCXNwYXJlWzJdOworCQljaGFyIGRhdGFbMV07CS8qIFRoZSB3YXZlZm9ybSBkYXRhIHN0YXJ0cyBoZXJlICovCisJfTsKKworc3RydWN0IHN5c2V4X2luZm8geworCQlzaG9ydCBrZXk7CQkvKiBVc2UgU1lTRVhfUEFUQ0ggb3IgTUFVSV9QQVRDSCBoZXJlICovCisjZGVmaW5lIFNZU0VYX1BBVENICV9QQVRDSEtFWSgweDA1KQorI2RlZmluZSBNQVVJX1BBVENICV9QQVRDSEtFWSgweDA2KQorCQlzaG9ydCBkZXZpY2Vfbm87CS8qIFN5bnRoZXNpemVyIG51bWJlciAqLworCQlpbnQgbGVuOwkvKiBTaXplIG9mIHRoZSBzeXNleCBkYXRhIGluIGJ5dGVzICovCisJCXVuc2lnbmVkIGNoYXIgZGF0YVsxXTsJLyogU3lzZXggZGF0YSBzdGFydHMgaGVyZSAqLworCX07CisKKy8qCisgKiAvZGV2L3NlcXVlbmNlciBpbnB1dCBldmVudHMuCisgKgorICogVGhlIGRhdGEgd3JpdHRlbiB0byB0aGUgL2Rldi9zZXF1ZW5jZXIgaXMgYSBzdHJlYW0gb2YgZXZlbnRzLiBFdmVudHMKKyAqIGFyZSByZWNvcmRzIG9mIDQgb3IgOCBieXRlcy4gVGhlIGZpcnN0IGJ5dGUgZGVmaW5lcyB0aGUgc2l6ZS4gCisgKiBBbnkgbnVtYmVyIG9mIGV2ZW50cyBjYW4gYmUgd3JpdHRlbiB3aXRoIGEgd3JpdGUgY2FsbC4gVGhlcmUKKyAqIGlzIGEgc2V0IG9mIG1hY3JvcyBmb3Igc2VuZGluZyB0aGVzZSBldmVudHMuIFVzZSB0aGVzZSBtYWNyb3MgaWYgeW91CisgKiB3YW50IHRvIG1heGltaXplIHBvcnRhYmlsaXR5IG9mIHlvdXIgcHJvZ3JhbS4KKyAqCisgKiBFdmVudHMgU0VRX1dBSVQsIFNFUV9NSURJUFVUQyBhbmQgU0VRX0VDSE8uIEFyZSBhbHNvIGlucHV0IGV2ZW50cy4KKyAqIChBbGwgaW5wdXQgZXZlbnRzIGFyZSBjdXJyZW50bHkgNCBieXRlcyBsb25nLiBCZSBwcmVwYXJlZCB0byBzdXBwb3J0CisgKiA4IGJ5dGUgZXZlbnRzIGFsc28uIElmIHlvdSByZWNlaXZlIGFueSBldmVudCBoYXZpbmcgZmlyc3QgYnl0ZSA+PSAxMjgsCisgKiBpdCdzIGEgOCBieXRlIGV2ZW50LgorICoKKyAqIFRoZSBldmVudHMgYXJlIGRvY3VtZW50ZWQgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCisgKgorICogTm9ybWFsIGV2ZW50cyAoNCBieXRlcykKKyAqIFRoZXJlIGlzIGFsc28gYSA4IGJ5dGUgdmVyc2lvbiBvZiBtb3N0IG9mIHRoZSA0IGJ5dGUgZXZlbnRzLiBUaGUKKyAqIDggYnl0ZSBvbmUgaXMgcmVjb21tZW5kZWQuCisgKi8KKyNkZWZpbmUgU0VRX05PVEVPRkYJCTAKKyNkZWZpbmUgU0VRX0ZNTk9URU9GRgkJU0VRX05PVEVPRkYJLyogSnVzdCBvbGQgbmFtZSAqLworI2RlZmluZSBTRVFfTk9URU9OCQkxCisjZGVmaW5lCVNFUV9GTU5PVEVPTgkJU0VRX05PVEVPTgorI2RlZmluZSBTRVFfV0FJVAkJVE1SX1dBSVRfQUJTCisjZGVmaW5lIFNFUV9QR01DSEFOR0UJCTMKKyNkZWZpbmUgU0VRX0ZNUEdNQ0hBTkdFCQlTRVFfUEdNQ0hBTkdFCisjZGVmaW5lIFNFUV9TWU5DVElNRVIJCVRNUl9TVEFSVAorI2RlZmluZSBTRVFfTUlESVBVVEMJCTUKKyNkZWZpbmUgU0VRX0RSVU1PTgkJNgkvKioqIE9CU09MRVRFICoqKi8KKyNkZWZpbmUgU0VRX0RSVU1PRkYJCTcJLyoqKiBPQlNPTEVURSAqKiovCisjZGVmaW5lIFNFUV9FQ0hPCQlUTVJfRUNITwkvKiBGb3Igc3luY2hpbmcgcHJvZ3JhbXMgd2l0aCBvdXRwdXQgKi8KKyNkZWZpbmUgU0VRX0FGVEVSVE9VQ0gJCTkKKyNkZWZpbmUgU0VRX0NPTlRST0xMRVIJCTEwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKglNaWRpIGNvbnRyb2xsZXIgbnVtYmVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvbnRyb2xsZXJzIDAgdG8gMzEgKDB4MDAgdG8gMHgxZikgYW5kCisgKiAzMiB0byA2MyAoMHgyMCB0byAweDNmKSBhcmUgY29udGludW91cworICogY29udHJvbGxlcnMuCisgKiBJbiB0aGUgTUlESSAxLjAgdGhlc2UgY29udHJvbGxlcnMgYXJlIHNlbnQgdXNpbmcKKyAqIHR3byBtZXNzYWdlcy4gQ29udHJvbGxlciBudW1iZXJzIDAgdG8gMzEgYXJlIHVzZWQKKyAqIHRvIHNlbmQgdGhlIE1TQiBhbmQgdGhlIGNvbnRyb2xsZXIgbnVtYmVycyAzMiB0byA2MworICogYXJlIGZvciB0aGUgTFNCLiBOb3RlIHRoYXQganVzdCA3IGJpdHMgYXJlIHVzZWQgaW4gTUlESSBieXRlcy4KKyAqLworCisjZGVmaW5lCSAgIENUTF9CQU5LX1NFTEVDVAkJMHgwMAorI2RlZmluZQkgICBDVExfTU9EV0hFRUwJCQkweDAxCisjZGVmaW5lICAgIENUTF9CUkVBVEgJCQkweDAyCisvKgkJdW5kZWZpbmVkCQkweDAzICovCisjZGVmaW5lICAgIENUTF9GT09UCQkJMHgwNAorI2RlZmluZSAgICBDVExfUE9SVEFNRU5UT19USU1FCQkweDA1CisjZGVmaW5lICAgIENUTF9EQVRBX0VOVFJZCQkweDA2CisjZGVmaW5lICAgIENUTF9NQUlOX1ZPTFVNRQkJMHgwNworI2RlZmluZSAgICBDVExfQkFMQU5DRQkJCTB4MDgKKy8qCQl1bmRlZmluZWQJCTB4MDkgKi8KKyNkZWZpbmUgICAgQ1RMX1BBTgkJCTB4MGEKKyNkZWZpbmUgICAgQ1RMX0VYUFJFU1NJT04JCTB4MGIKKy8qCQl1bmRlZmluZWQJCTB4MGMgKi8KKy8qCQl1bmRlZmluZWQJCTB4MGQgKi8KKy8qCQl1bmRlZmluZWQJCTB4MGUgKi8KKy8qCQl1bmRlZmluZWQJCTB4MGYgKi8KKyNkZWZpbmUgICAgQ1RMX0dFTkVSQUxfUFVSUE9TRTEJMHgxMAorI2RlZmluZSAgICBDVExfR0VORVJBTF9QVVJQT1NFMgkweDExCisjZGVmaW5lICAgIENUTF9HRU5FUkFMX1BVUlBPU0UzCTB4MTIKKyNkZWZpbmUgICAgQ1RMX0dFTkVSQUxfUFVSUE9TRTQJMHgxMworLyoJCXVuZGVmaW5lZAkJMHgxNCAtIDB4MWYgKi8KKworLyoJCXVuZGVmaW5lZAkJMHgyMCAqLworLyogVGhlIGNvbnRyb2xsZXIgbnVtYmVycyAweDIxIHRvIDB4M2YgYXJlIHJlc2VydmVkIGZvciB0aGUgKi8KKy8qIGxlYXN0IHNpZ25pZmljYW50IGJ5dGVzIG9mIHRoZSBjb250cm9sbGVycyAweDAwIHRvIDB4MWYuICovCisvKiBUaGVzZSBjb250cm9sbGVycyBhcmUgbm90IHJlY29nbmlzZWQgYnkgdGhlIGRyaXZlci4gKi8KKworLyogQ29udHJvbGxlcnMgNjQgdG8gNjkgKDB4NDAgdG8gMHg0NSkgYXJlIG9uL29mZiBzd2l0Y2hlcy4gKi8KKy8qIDA9T0ZGIGFuZCAxMjc9T04gKGludGVybWVkaWF0ZSB2YWx1ZXMgYXJlIHBvc3NpYmxlKSAqLworI2RlZmluZSAgICBDVExfREFNUEVSX1BFREFMCQkweDQwCisjZGVmaW5lICAgIENUTF9TVVNUQUlOCQkJMHg0MAkvKiBBbGlhcyAqLworI2RlZmluZSAgICBDVExfSE9MRAkJCTB4NDAJLyogQWxpYXMgKi8KKyNkZWZpbmUgICAgQ1RMX1BPUlRBTUVOVE8JCTB4NDEKKyNkZWZpbmUgICAgQ1RMX1NPU1RFTlVUTwkJMHg0MgorI2RlZmluZSAgICBDVExfU09GVF9QRURBTAkJMHg0MworLyoJCXVuZGVmaW5lZAkJMHg0NCAqLworI2RlZmluZSAgICBDVExfSE9MRDIJCQkweDQ1CisvKgkJdW5kZWZpbmVkCQkweDQ2IC0gMHg0ZiAqLworCisjZGVmaW5lICAgIENUTF9HRU5FUkFMX1BVUlBPU0U1CTB4NTAKKyNkZWZpbmUgICAgQ1RMX0dFTkVSQUxfUFVSUE9TRTYJMHg1MQorI2RlZmluZSAgICBDVExfR0VORVJBTF9QVVJQT1NFNwkweDUyCisjZGVmaW5lICAgIENUTF9HRU5FUkFMX1BVUlBPU0U4CTB4NTMKKy8qCQl1bmRlZmluZWQJCTB4NTQgLSAweDVhICovCisjZGVmaW5lICAgIENUTF9FWFRfRUZGX0RFUFRICQkweDViCisjZGVmaW5lICAgIENUTF9UUkVNT0xPX0RFUFRICQkweDVjCisjZGVmaW5lICAgIENUTF9DSE9SVVNfREVQVEgJCTB4NWQKKyNkZWZpbmUgICAgQ1RMX0RFVFVORV9ERVBUSAkJMHg1ZQorI2RlZmluZSAgICBDVExfQ0VMRVNURV9ERVBUSAkJMHg1ZQkvKiBBbGlhcyBmb3IgdGhlIGFib3ZlIG9uZSAqLworI2RlZmluZSAgICBDVExfUEhBU0VSX0RFUFRICQkweDVmCisjZGVmaW5lICAgIENUTF9EQVRBX0lOQ1JFTUVOVAkJMHg2MAorI2RlZmluZSAgICBDVExfREFUQV9ERUNSRU1FTlQJCTB4NjEKKyNkZWZpbmUgICAgQ1RMX05PTlJFR19QQVJNX05VTV9MU0IJMHg2MgorI2RlZmluZSAgICBDVExfTk9OUkVHX1BBUk1fTlVNX01TQgkweDYzCisjZGVmaW5lICAgIENUTF9SRUdJU1RfUEFSTV9OVU1fTFNCCTB4NjQKKyNkZWZpbmUgICAgQ1RMX1JFR0lTVF9QQVJNX05VTV9NU0IJMHg2NQorLyoJCXVuZGVmaW5lZAkJMHg2NiAtIDB4NzggKi8KKy8qCQlyZXNlcnZlZAkJMHg3OSAtIDB4N2YgKi8KKworLyogUHNldWRvIGNvbnRyb2xsZXJzIChub3QgbWlkaSBjb21wYXRpYmxlKSAqLworI2RlZmluZSAgICBDVFJMX1BJVENIX0JFTkRFUgkJMjU1CisjZGVmaW5lICAgIENUUkxfUElUQ0hfQkVOREVSX1JBTkdFCTI1NAorI2RlZmluZSAgICBDVFJMX0VYUFJFU1NJT04JCTI1MwkvKiBPYnNvbGV0ZSAqLworI2RlZmluZSAgICBDVFJMX01BSU5fVk9MVU1FCQkyNTIJLyogT2Jzb2xldGUgKi8KKyNkZWZpbmUgU0VRX0JBTEFOQ0UJCTExCisjZGVmaW5lIFNFUV9WT0xNT0RFICAgICAgICAgICAgIDEyCisKKy8qCisgKiBWb2x1bWUgbW9kZSBkZWNpZGVzIGhvdyB2b2x1bWVzIGFyZSB1c2VkCisgKi8KKworI2RlZmluZSBWT0xfTUVUSE9EX0FEQUdJTwkxCisjZGVmaW5lIFZPTF9NRVRIT0RfTElORUFSCTIKKworLyoKKyAqIE5vdGUhIFNFUV9XQUlULCBTRVFfTUlESVBVVEMgYW5kIFNFUV9FQ0hPIGFyZSB1c2VkIGFsc28gYXMKKyAqCSBpbnB1dCBldmVudHMuCisgKi8KKworLyoKKyAqIEV2ZW50IGNvZGVzIDB4ZjAgdG8gMHhmYyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHRlbnNpb25zLgorICovCisKKyNkZWZpbmUgU0VRX0ZVTExTSVpFCQkweGZkCS8qIExvbmcgZXZlbnRzICovCisvKgorICoJU0VRX0ZVTExTSVpFIGV2ZW50cyBhcmUgdXNlZCBmb3IgbG9hZGluZyBwYXRjaGVzL3NhbXBsZXMgdG8gdGhlCisgKglzeW50aGVzaXplciBkZXZpY2VzLiBUaGVzZSBldmVudHMgYXJlIHBhc3NlZCBkaXJlY3RseSB0byB0aGUgZHJpdmVyCisgKglvZiB0aGUgYXNzb2NpYXRlZCBzeW50aGVzaXplciBkZXZpY2UuIFRoZXJlIGlzIG5vIGxpbWl0IHRvIHRoZSBzaXplCisgKglvZiB0aGUgZXh0ZW5kZWQgZXZlbnRzLiBUaGVzZSBldmVudHMgYXJlIG5vdCBxdWV1ZWQgYnV0IGV4ZWN1dGVkCisgKglpbW1lZGlhdGVseSB3aGVuIHRoZSB3cml0ZSgpIGlzIGNhbGxlZCAoZXhlY3V0aW9uIGNhbiB0YWtlIHNldmVyYWwKKyAqCXNlY29uZHMgb2YgdGltZSkuIAorICoKKyAqCVdoZW4gYSBTRVFfRlVMTFNJWkUgbWVzc2FnZSBpcyB3cml0dGVuIHRvIHRoZSBkZXZpY2UsIGl0IG11c3QKKyAqCWJlIHdyaXR0ZW4gdXNpbmcgZXhhY3RseSBvbmUgd3JpdGUoKSBjYWxsLiBPdGhlciBldmVudHMgY2Fubm90CisgKgliZSBtaXhlZCB0byB0aGUgc2FtZSB3cml0ZS4KKyAqCQorICoJRm9yIEZNIHN5bnRocyAoWU0zODEyL09QTDMpIHVzZSBzdHJ1Y3Qgc2JpX2luc3RydW1lbnQgYW5kIHdyaXRlIGl0IHRvIHRoZSAKKyAqCS9kZXYvc2VxdWVuY2VyLiBEb24ndCB3cml0ZSBvdGhlciBkYXRhIHRvZ2V0aGVyIHdpdGggdGhlIGluc3RydW1lbnQgc3RydWN0dXJlCisgKglTZXQgdGhlIGtleSBmaWVsZCBvZiB0aGUgc3RydWN0dXJlIHRvIEZNX1BBVENILiBUaGUgZGV2aWNlIGZpZWxkIGlzIHVzZWQgdG8KKyAqCXJvdXRlIHRoZSBwYXRjaCB0byB0aGUgY29ycmVzcG9uZGluZyBkZXZpY2UuCisgKgorICoJRm9yIHdhdmUgdGFibGUgdXNlIHN0cnVjdCBwYXRjaF9pbmZvLiBJbml0aWFsaXplIHRoZSBrZXkgZmllbGQKKyAqICAgICAgdG8gV0FWRV9QQVRDSC4KKyAqLworI2RlZmluZSBTRVFfUFJJVkFURQkJMHhmZQkvKiBMb3cgbGV2ZWwgSFcgZGVwZW5kZW50IGV2ZW50cyAoOCBieXRlcykgKi8KKyNkZWZpbmUgU0VRX0VYVEVOREVECQkweGZmCS8qIEV4dGVuZGVkIGV2ZW50cyAoOCBieXRlcykgT0JTT0xFVEUgKi8KKworLyoKKyAqIFJlY29yZCBmb3IgRk0gcGF0Y2hlcworICovCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBzYmlfaW5zdHJfZGF0YVszMl07CisKK3N0cnVjdCBzYmlfaW5zdHJ1bWVudCB7CisJCXVuc2lnbmVkIHNob3J0CWtleTsJLyogRk1fUEFUQ0ggb3IgT1BMM19QQVRDSCAqLworI2RlZmluZSBGTV9QQVRDSAlfUEFUQ0hLRVkoMHgwMSkKKyNkZWZpbmUgT1BMM19QQVRDSAlfUEFUQ0hLRVkoMHgwMykKKwkJc2hvcnQJCWRldmljZTsJCS8qCVN5bnRoIyAoMC00KQkqLworCQlpbnQgCQljaGFubmVsOwkvKglQcm9ncmFtIyB0byBiZSBpbml0aWFsaXplZCAJKi8KKwkJc2JpX2luc3RyX2RhdGEJb3BlcmF0b3JzOwkvKglSZWdpc3RlciBzZXR0aW5ncyBmb3Igb3BlcmF0b3IgY2VsbHMgKC5TQkkgZm9ybWF0KQkqLworCX07CisKK3N0cnVjdCBzeW50aF9pbmZvIHsJLyogUmVhZCBvbmx5ICovCisJCWNoYXIJbmFtZVszMF07CisJCWludAlkZXZpY2U7CQkvKiAwLU4uIElOSVRJQUxJWkUgQkVGT1JFIENBTExJTkcgKi8KKwkJaW50CXN5bnRoX3R5cGU7CisjZGVmaW5lIFNZTlRIX1RZUEVfRk0JCQkwCisjZGVmaW5lIFNZTlRIX1RZUEVfU0FNUExFCQkxCisjZGVmaW5lIFNZTlRIX1RZUEVfTUlESQkJCTIJLyogTWlkaSBpbnRlcmZhY2UgKi8KKworCQlpbnQJc3ludGhfc3VidHlwZTsKKyNkZWZpbmUgRk1fVFlQRV9BRExJQgkJCTB4MDAKKyNkZWZpbmUgRk1fVFlQRV9PUEwzCQkJMHgwMQorI2RlZmluZSBNSURJX1RZUEVfTVBVNDAxCQkweDQwMQorCisjZGVmaW5lIFNBTVBMRV9UWVBFX0JBU0lDCQkweDEwCisjZGVmaW5lIFNBTVBMRV9UWVBFX0dVUwkJCVNBTVBMRV9UWVBFX0JBU0lDCisjZGVmaW5lIFNBTVBMRV9UWVBFX1dBVkVGUk9OVCAgICAgICAgICAgMHgxMQorCisJCWludAlwZXJjX21vZGU7CS8qIE5vIGxvbmdlciBzdXBwb3J0ZWQgKi8KKwkJaW50CW5yX3ZvaWNlczsKKwkJaW50CW5yX2RydW1zOwkvKiBPYnNvbGV0ZSBmaWVsZCAqLworCQlpbnQJaW5zdHJfYmFua19zaXplOworCQl1bnNpZ25lZCBpbnQJY2FwYWJpbGl0aWVzOwkKKyNkZWZpbmUgU1lOVEhfQ0FQX1BFUkNNT0RFCQkweDAwMDAwMDAxIC8qIE5vIGxvbmdlciB1c2VkICovCisjZGVmaW5lIFNZTlRIX0NBUF9PUEwzCQkJMHgwMDAwMDAwMiAvKiBTZXQgaWYgT1BMMyBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgU1lOVEhfQ0FQX0lOUFVUCQkJMHgwMDAwMDAwNCAvKiBJbnB1dCAoTUlESSkgZGV2aWNlICovCisJCWludAlkdW1taWVzWzE5XTsJLyogUmVzZXJ2ZSBzcGFjZSAqLworCX07CisKK3N0cnVjdCBzb3VuZF90aW1lcl9pbmZvIHsKKwkJY2hhciBuYW1lWzMyXTsKKwkJaW50IGNhcHM7CisJfTsKKworI2RlZmluZSBNSURJX0NBUF9NUFU0MDEJCTEJCS8qIE1QVS00MDEgaW50ZWxsaWdlbnQgbW9kZSAqLworCitzdHJ1Y3QgbWlkaV9pbmZvIHsKKwkJY2hhcgkJbmFtZVszMF07CisJCWludAkJZGV2aWNlOwkJLyogMC1OLiBJTklUSUFMSVpFIEJFRk9SRSBDQUxMSU5HICovCisJCXVuc2lnbmVkIGludAljYXBhYmlsaXRpZXM7CS8qIFRvIGJlIGRlZmluZWQgbGF0ZXIgKi8KKwkJaW50CQlkZXZfdHlwZTsKKwkJaW50CQlkdW1taWVzWzE4XTsJLyogUmVzZXJ2ZSBzcGFjZSAqLworCX07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaW9jdGwgY29tbWFuZHMgZm9yIHRoZSAvZGV2L21pZGkjIworICovCit0eXBlZGVmIHN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgY21kOworCQljaGFyIG5yX2FyZ3MsIG5yX3JldHVybnM7CisJCXVuc2lnbmVkIGNoYXIgZGF0YVszMF07CisJfSBtcHVfY29tbWFuZF9yZWM7CisKKyNkZWZpbmUgU05EQ1RMX01JRElfUFJFVElNRQkJX1NJT1dSKCdtJywgMCwgaW50KQorI2RlZmluZSBTTkRDVExfTUlESV9NUFVNT0RFCQlfU0lPV1IoJ20nLCAxLCBpbnQpCisjZGVmaW5lIFNORENUTF9NSURJX01QVUNNRAkJX1NJT1dSKCdtJywgMiwgbXB1X2NvbW1hbmRfcmVjKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElPQ1RMIGNvbW1hbmRzIGZvciAvZGV2L2RzcCBhbmQgL2Rldi9hdWRpbworICovCisKKyNkZWZpbmUgU05EQ1RMX0RTUF9SRVNFVAkJX1NJTyAgKCdQJywgMCkKKyNkZWZpbmUgU05EQ1RMX0RTUF9TWU5DCQkJX1NJTyAgKCdQJywgMSkKKyNkZWZpbmUgU05EQ1RMX0RTUF9TUEVFRAkJX1NJT1dSKCdQJywgMiwgaW50KQorI2RlZmluZSBTTkRDVExfRFNQX1NURVJFTwkJX1NJT1dSKCdQJywgMywgaW50KQorI2RlZmluZSBTTkRDVExfRFNQX0dFVEJMS1NJWkUJCV9TSU9XUignUCcsIDQsIGludCkKKyNkZWZpbmUgU05EQ1RMX0RTUF9TQU1QTEVTSVpFCQlTTkRDVExfRFNQX1NFVEZNVAorI2RlZmluZSBTTkRDVExfRFNQX0NIQU5ORUxTCQlfU0lPV1IoJ1AnLCA2LCBpbnQpCisjZGVmaW5lIFNPVU5EX1BDTV9XUklURV9DSEFOTkVMUwlTTkRDVExfRFNQX0NIQU5ORUxTCisjZGVmaW5lIFNPVU5EX1BDTV9XUklURV9GSUxURVIJCV9TSU9XUignUCcsIDcsIGludCkKKyNkZWZpbmUgU05EQ1RMX0RTUF9QT1NUCQkJX1NJTyAgKCdQJywgOCkKKyNkZWZpbmUgU05EQ1RMX0RTUF9TVUJESVZJREUJCV9TSU9XUignUCcsIDksIGludCkKKyNkZWZpbmUgU05EQ1RMX0RTUF9TRVRGUkFHTUVOVAkJX1NJT1dSKCdQJywxMCwgaW50KQorCisvKglBdWRpbyBkYXRhIGZvcm1hdHMgKE5vdGUhIFU4PTggYW5kIFMxNl9MRT0xNiBmb3IgY29tcGF0aWJpbGl0eSkgKi8KKyNkZWZpbmUgU05EQ1RMX0RTUF9HRVRGTVRTCQlfU0lPUiAoJ1AnLDExLCBpbnQpIC8qIFJldHVybnMgYSBtYXNrICovCisjZGVmaW5lIFNORENUTF9EU1BfU0VURk1UCQlfU0lPV1IoJ1AnLDUsIGludCkgLyogU2VsZWN0cyBPTkUgZm10Ki8KKyMJZGVmaW5lIEFGTVRfUVVFUlkJCTB4MDAwMDAwMDAJLyogUmV0dXJuIGN1cnJlbnQgZm10ICovCisjCWRlZmluZSBBRk1UX01VX0xBVwkJMHgwMDAwMDAwMQorIwlkZWZpbmUgQUZNVF9BX0xBVwkJMHgwMDAwMDAwMgorIwlkZWZpbmUgQUZNVF9JTUFfQURQQ00JCTB4MDAwMDAwMDQKKyMJZGVmaW5lIEFGTVRfVTgJCQkweDAwMDAwMDA4CisjCWRlZmluZSBBRk1UX1MxNl9MRQkJMHgwMDAwMDAxMAkvKiBMaXR0bGUgZW5kaWFuIHNpZ25lZCAxNiovCisjCWRlZmluZSBBRk1UX1MxNl9CRQkJMHgwMDAwMDAyMAkvKiBCaWcgZW5kaWFuIHNpZ25lZCAxNiAqLworIwlkZWZpbmUgQUZNVF9TOAkJCTB4MDAwMDAwNDAKKyMJZGVmaW5lIEFGTVRfVTE2X0xFCQkweDAwMDAwMDgwCS8qIExpdHRsZSBlbmRpYW4gVTE2ICovCisjCWRlZmluZSBBRk1UX1UxNl9CRQkJMHgwMDAwMDEwMAkvKiBCaWcgZW5kaWFuIFUxNiAqLworIwlkZWZpbmUgQUZNVF9NUEVHCQkweDAwMDAwMjAwCS8qIE1QRUcgKDIpIGF1ZGlvICovCisjCWRlZmluZSBBRk1UX0FDMwkJMHgwMDAwMDQwMAkvKiBEb2xieSBEaWdpdGFsIEFDMyAqLworCisvKgorICogQnVmZmVyIHN0YXR1cyBxdWVyaWVzLgorICovCit0eXBlZGVmIHN0cnVjdCBhdWRpb19idWZfaW5mbyB7CisJCQlpbnQgZnJhZ21lbnRzOwkvKiAjIG9mIGF2YWlsYWJsZSBmcmFnbWVudHMgKHBhcnRpYWxseSB1c2VuZCBvbmVzIG5vdCBjb3VudGVkKSAqLworCQkJaW50IGZyYWdzdG90YWw7CS8qIFRvdGFsICMgb2YgZnJhZ21lbnRzIGFsbG9jYXRlZCAqLworCQkJaW50IGZyYWdzaXplOwkvKiBTaXplIG9mIGEgZnJhZ21lbnQgaW4gYnl0ZXMgKi8KKworCQkJaW50IGJ5dGVzOwkvKiBBdmFpbGFibGUgc3BhY2UgaW4gYnl0ZXMgKGluY2x1ZGVzIHBhcnRpYWxseSB1c2VkIGZyYWdtZW50cykgKi8KKwkJCS8qIE5vdGUhICdieXRlcycgY291bGQgYmUgbW9yZSB0aGFuIGZyYWdtZW50cypmcmFnc2l6ZSAqLworCQl9IGF1ZGlvX2J1Zl9pbmZvOworCisjZGVmaW5lIFNORENUTF9EU1BfR0VUT1NQQUNFCQlfU0lPUiAoJ1AnLDEyLCBhdWRpb19idWZfaW5mbykKKyNkZWZpbmUgU05EQ1RMX0RTUF9HRVRJU1BBQ0UJCV9TSU9SICgnUCcsMTMsIGF1ZGlvX2J1Zl9pbmZvKQorI2RlZmluZSBTTkRDVExfRFNQX05PTkJMT0NLCQlfU0lPICAoJ1AnLDE0KQorI2RlZmluZSBTTkRDVExfRFNQX0dFVENBUFMJCV9TSU9SICgnUCcsMTUsIGludCkKKyMJZGVmaW5lIERTUF9DQVBfUkVWSVNJT04JCTB4MDAwMDAwZmYJLyogQml0cyBmb3IgcmV2aXNpb24gbGV2ZWwgKDAgdG8gMjU1KSAqLworIwlkZWZpbmUgRFNQX0NBUF9EVVBMRVgJCTB4MDAwMDAxMDAJLyogRnVsbCBkdXBsZXggcmVjb3JkL3BsYXliYWNrICovCisjCWRlZmluZSBEU1BfQ0FQX1JFQUxUSU1FCQkweDAwMDAwMjAwCS8qIFJlYWwgdGltZSBjYXBhYmlsaXR5ICovCisjCWRlZmluZSBEU1BfQ0FQX0JBVENICQkweDAwMDAwNDAwCS8qIERldmljZSBoYXMgc29tZSBraW5kIG9mICovCisJCQkJCQkJLyogaW50ZXJuYWwgYnVmZmVycyB3aGljaCBtYXkgKi8KKwkJCQkJCQkvKiBjYXVzZSBzb21lIGRlbGF5cyBhbmQgKi8KKwkJCQkJCQkvKiBkZWNyZWFzZSBwcmVjaXNpb24gb2YgdGltaW5nICovCisjCWRlZmluZSBEU1BfQ0FQX0NPUFJPQwkJMHgwMDAwMDgwMAkvKiBIYXMgYSBjb3Byb2Nlc3NvciAqLworCQkJCQkJCS8qIFNvbWV0aW1lcyBpdCdzIGEgRFNQICovCisJCQkJCQkJLyogYnV0IHVzdWFsbHkgbm90ICovCisjCWRlZmluZSBEU1BfQ0FQX1RSSUdHRVIJCTB4MDAwMDEwMDAJLyogU3VwcG9ydHMgU0VUVFJJR0dFUiAqLworIwlkZWZpbmUgRFNQX0NBUF9NTUFQCQkweDAwMDAyMDAwCS8qIFN1cHBvcnRzIG1tYXAoKSAqLworIwlkZWZpbmUgRFNQX0NBUF9NVUxUSQkJMHgwMDAwNDAwMAkvKiBzdXBwb3J0IG11bHRpcGxlIG9wZW4gKi8KKyMJZGVmaW5lIERTUF9DQVBfQklORAkJMHgwMDAwODAwMAkvKiBjaGFubmVsIGJpbmRpbmcgdG8gZnJvbnQvcmVhci9jbmV0ZXIvbGZlICovCisKKworI2RlZmluZSBTTkRDVExfRFNQX0dFVFRSSUdHRVIJCV9TSU9SICgnUCcsMTYsIGludCkKKyNkZWZpbmUgU05EQ1RMX0RTUF9TRVRUUklHR0VSCQlfU0lPVyAoJ1AnLDE2LCBpbnQpCisjCWRlZmluZSBQQ01fRU5BQkxFX0lOUFVUCQkweDAwMDAwMDAxCisjCWRlZmluZSBQQ01fRU5BQkxFX09VVFBVVAkJMHgwMDAwMDAwMgorCit0eXBlZGVmIHN0cnVjdCBjb3VudF9pbmZvIHsKKwkJaW50IGJ5dGVzOwkvKiBUb3RhbCAjIG9mIGJ5dGVzIHByb2Nlc3NlZCAqLworCQlpbnQgYmxvY2tzOwkvKiAjIG9mIGZyYWdtZW50IHRyYW5zaXRpb25zIHNpbmNlIGxhc3QgdGltZSAqLworCQlpbnQgcHRyOwkvKiBDdXJyZW50IERNQSBwb2ludGVyIHZhbHVlICovCisJfSBjb3VudF9pbmZvOworCisjZGVmaW5lIFNORENUTF9EU1BfR0VUSVBUUgkJX1NJT1IgKCdQJywxNywgY291bnRfaW5mbykKKyNkZWZpbmUgU05EQ1RMX0RTUF9HRVRPUFRSCQlfU0lPUiAoJ1AnLDE4LCBjb3VudF9pbmZvKQorCit0eXBlZGVmIHN0cnVjdCBidWZmbWVtX2Rlc2MgeworCQl1bnNpZ25lZCAqYnVmZmVyOworCQlpbnQgc2l6ZTsKKwl9IGJ1ZmZtZW1fZGVzYzsKKyNkZWZpbmUgU05EQ1RMX0RTUF9NQVBJTkJVRgkJX1NJT1IgKCdQJywgMTksIGJ1ZmZtZW1fZGVzYykKKyNkZWZpbmUgU05EQ1RMX0RTUF9NQVBPVVRCVUYJCV9TSU9SICgnUCcsIDIwLCBidWZmbWVtX2Rlc2MpCisjZGVmaW5lIFNORENUTF9EU1BfU0VUU1lOQ1JPCQlfU0lPICAoJ1AnLCAyMSkKKyNkZWZpbmUgU05EQ1RMX0RTUF9TRVREVVBMRVgJCV9TSU8gICgnUCcsIDIyKQorI2RlZmluZSBTTkRDVExfRFNQX0dFVE9ERUxBWQkJX1NJT1IgKCdQJywgMjMsIGludCkKKworI2RlZmluZSBTTkRDVExfRFNQX0dFVENIQU5ORUxNQVNLCQlfU0lPV1IoJ1AnLCA2NCwgaW50KQorI2RlZmluZSBTTkRDVExfRFNQX0JJTkRfQ0hBTk5FTAkJX1NJT1dSKCdQJywgNjUsIGludCkKKyMJZGVmaW5lIERTUF9CSU5EX1FVRVJZCQkweDAwMDAwMDAwCisjCWRlZmluZSBEU1BfQklORF9GUk9OVAkJMHgwMDAwMDAwMQorIwlkZWZpbmUgRFNQX0JJTkRfU1VSUgkJMHgwMDAwMDAwMgorIwlkZWZpbmUgRFNQX0JJTkRfQ0VOVEVSX0xGRQkweDAwMDAwMDA0CisjCWRlZmluZSBEU1BfQklORF9IQU5EU0VUCQkweDAwMDAwMDA4CisjCWRlZmluZSBEU1BfQklORF9NSUMJCTB4MDAwMDAwMTAKKyMJZGVmaW5lIERTUF9CSU5EX01PREVNMQkJMHgwMDAwMDAyMAorIwlkZWZpbmUgRFNQX0JJTkRfTU9ERU0yCQkweDAwMDAwMDQwCisjCWRlZmluZSBEU1BfQklORF9JMlMJCTB4MDAwMDAwODAKKyMJZGVmaW5lIERTUF9CSU5EX1NQRElGCQkweDAwMDAwMTAwCisKKyNkZWZpbmUgU05EQ1RMX0RTUF9TRVRTUERJRgkJX1NJT1cgKCdQJywgNjYsIGludCkKKyNkZWZpbmUgU05EQ1RMX0RTUF9HRVRTUERJRgkJX1NJT1IgKCdQJywgNjcsIGludCkKKyMJZGVmaW5lIFNQRElGX1BSTwkweDAwMDEKKyMJZGVmaW5lIFNQRElGX05fQVVECTB4MDAwMgorIwlkZWZpbmUgU1BESUZfQ09QWQkweDAwMDQKKyMJZGVmaW5lIFNQRElGX1BSRQkweDAwMDgKKyMJZGVmaW5lIFNQRElGX0NDCQkweDA3ZjAKKyMJZGVmaW5lIFNQRElGX0wJCTB4MDgwMAorIwlkZWZpbmUgU1BESUZfRFJTCTB4NDAwMAorIwlkZWZpbmUgU1BESUZfVgkJMHg4MDAwCisKKy8qCisgKiBBcHBsaWNhdGlvbidzIHByb2ZpbGUgZGVmaW5lcyB0aGUgd2F5IGhvdyBwbGF5YmFjayB1bmRlcnJ1biBzaXR1YXRpb25zIHNob3VsZCBiZSBoYW5kbGVkLgorICogCisgKglBUEZfTk9STUFMICh0aGUgZGVmYXVsdCkgYW5kIEFQRl9ORVRXT1JLIG1ha2UgdGhlIGRyaXZlciB0byBjbGVhbnVwIHRoZQorICoJcGxheWJhY2sgYnVmZmVyIHdoZW5ldmVyIGFuIHVuZGVycnVuIG9jY3Vycy4gVGhpcyBjb25zdW1lcyBzb21lIHRpbWUKKyAqCXByZXZlbnRzIGxvb3BpbmcgdGhlIGV4aXN0aW5nIGJ1ZmZlci4KKyAqCUFQRl9DUFVJTlRFTlMgaXMgaW50ZW5kZWQgdG8gYmUgc2V0IGJ5IENQVSBpbnRlbnNpdmUgYXBwbGljYXRpb25zIHdoaWNoCisgKglhcmUgbGlrZWx5IHRvIHJ1biBvdXQgb2YgdGltZSBvY2Nhc2lvbmFsbHkuIEluIHRoaXMgbW9kZSB0aGUgYnVmZmVyIGNsZWFudXAgaXMKKyAqCWRpc2FibGVkIHdoaWNoIHNhdmVzIENQVSB0aW1lIGJ1dCBhbHNvIGxldCdzIHRoZSBwcmV2aW91cyBidWZmZXIgY29udGVudCB0bworICoJYmUgcGxheWVkIGR1cmluZyB0aGUgInBhdXNlIiBhZnRlciB0aGUgdW5kZXJydW4uCisgKi8KKyNkZWZpbmUgU05EQ1RMX0RTUF9QUk9GSUxFCQlfU0lPVyAoJ1AnLCAyMywgaW50KQorI2RlZmluZQkgIEFQRl9OT1JNQUwJMAkvKiBOb3JtYWwgYXBwbGljYXRpb25zICovCisjZGVmaW5lCSAgQVBGX05FVFdPUksJMQkvKiBVbmRlcnJ1bnMgcHJvYmFibHkgY2F1c2VkIGJ5IGFuICJleHRlcm5hbCIgZGVsYXkgKi8KKyNkZWZpbmUgICBBUEZfQ1BVSU5URU5TIDIJLyogVW5kZXJydW5zIHByb2JhYmx5IGNhdXNlZCBieSAib3ZlcmhlYXRpbmciIHRoZSBDUFUgKi8KKworI2RlZmluZSBTT1VORF9QQ01fUkVBRF9SQVRFCQlfU0lPUiAoJ1AnLCAyLCBpbnQpCisjZGVmaW5lIFNPVU5EX1BDTV9SRUFEX0NIQU5ORUxTCQlfU0lPUiAoJ1AnLCA2LCBpbnQpCisjZGVmaW5lIFNPVU5EX1BDTV9SRUFEX0JJVFMJCV9TSU9SICgnUCcsIDUsIGludCkKKyNkZWZpbmUgU09VTkRfUENNX1JFQURfRklMVEVSCQlfU0lPUiAoJ1AnLCA3LCBpbnQpCisKKy8qIFNvbWUgYWxpYXMgbmFtZXMgKi8KKyNkZWZpbmUgU09VTkRfUENNX1dSSVRFX0JJVFMJCVNORENUTF9EU1BfU0VURk1UCisjZGVmaW5lIFNPVU5EX1BDTV9XUklURV9SQVRFCQlTTkRDVExfRFNQX1NQRUVECisjZGVmaW5lIFNPVU5EX1BDTV9QT1NUCQkJU05EQ1RMX0RTUF9QT1NUCisjZGVmaW5lIFNPVU5EX1BDTV9SRVNFVAkJCVNORENUTF9EU1BfUkVTRVQKKyNkZWZpbmUgU09VTkRfUENNX1NZTkMJCQlTTkRDVExfRFNQX1NZTkMKKyNkZWZpbmUgU09VTkRfUENNX1NVQkRJVklERQkJU05EQ1RMX0RTUF9TVUJESVZJREUKKyNkZWZpbmUgU09VTkRfUENNX1NFVEZSQUdNRU5UCQlTTkRDVExfRFNQX1NFVEZSQUdNRU5UCisjZGVmaW5lIFNPVU5EX1BDTV9HRVRGTVRTCQlTTkRDVExfRFNQX0dFVEZNVFMKKyNkZWZpbmUgU09VTkRfUENNX1NFVEZNVAkJU05EQ1RMX0RTUF9TRVRGTVQKKyNkZWZpbmUgU09VTkRfUENNX0dFVE9TUEFDRQkJU05EQ1RMX0RTUF9HRVRPU1BBQ0UKKyNkZWZpbmUgU09VTkRfUENNX0dFVElTUEFDRQkJU05EQ1RMX0RTUF9HRVRJU1BBQ0UKKyNkZWZpbmUgU09VTkRfUENNX05PTkJMT0NLCQlTTkRDVExfRFNQX05PTkJMT0NLCisjZGVmaW5lIFNPVU5EX1BDTV9HRVRDQVBTCQlTTkRDVExfRFNQX0dFVENBUFMKKyNkZWZpbmUgU09VTkRfUENNX0dFVFRSSUdHRVIJCVNORENUTF9EU1BfR0VUVFJJR0dFUgorI2RlZmluZSBTT1VORF9QQ01fU0VUVFJJR0dFUgkJU05EQ1RMX0RTUF9TRVRUUklHR0VSCisjZGVmaW5lIFNPVU5EX1BDTV9TRVRTWU5DUk8JCVNORENUTF9EU1BfU0VUU1lOQ1JPCisjZGVmaW5lIFNPVU5EX1BDTV9HRVRJUFRSCQlTTkRDVExfRFNQX0dFVElQVFIKKyNkZWZpbmUgU09VTkRfUENNX0dFVE9QVFIJCVNORENUTF9EU1BfR0VUT1BUUgorI2RlZmluZSBTT1VORF9QQ01fTUFQSU5CVUYJCVNORENUTF9EU1BfTUFQSU5CVUYKKyNkZWZpbmUgU09VTkRfUENNX01BUE9VVEJVRgkJU05EQ1RMX0RTUF9NQVBPVVRCVUYKKworLyoKKyAqIGlvY3RsIGNhbGxzIHRvIGJlIHVzZWQgaW4gY29tbXVuaWNhdGlvbiB3aXRoIGNvcHJvY2Vzc29ycyBhbmQKKyAqIERTUCBjaGlwcy4KKyAqLworCit0eXBlZGVmIHN0cnVjdCBjb3ByX2J1ZmZlciB7CisJCWludCBjb21tYW5kOwkvKiBTZXQgdG8gMCBpZiBub3QgdXNlZCAqLworCQlpbnQgZmxhZ3M7CisjZGVmaW5lIENQRl9OT05FCQkweDAwMDAKKyNkZWZpbmUgQ1BGX0ZJUlNUCQkweDAwMDEJLyogRmlyc3QgYmxvY2sgKi8KKyNkZWZpbmUgQ1BGX0xBU1QJCTB4MDAwMgkvKiBMYXN0IGJsb2NrICovCisJCWludCBsZW47CisJCWludCBvZmZzOwkvKiBJZiByZXF1aXJlZCBieSB0aGUgZGV2aWNlICgwIGlmIG5vdCB1c2VkKSAqLworCisJCXVuc2lnbmVkIGNoYXIgZGF0YVs0MDAwXTsgLyogTk9URSEgNDAwMCBpcyBub3QgNGsgKi8KKwl9IGNvcHJfYnVmZmVyOworCit0eXBlZGVmIHN0cnVjdCBjb3ByX2RlYnVnX2J1ZiB7CisJCWludCBjb21tYW5kOwkvKiBVc2VkIGludGVybmFsbHkuIFNldCB0byAwICovCisJCWludCBwYXJtMTsKKwkJaW50IHBhcm0yOworCQlpbnQgZmxhZ3M7CQorCQlpbnQgbGVuOwkvKiBMZW5ndGggb2YgZGF0YSBpbiBieXRlcyAqLworCX0gY29wcl9kZWJ1Z19idWY7CisKK3R5cGVkZWYgc3RydWN0IGNvcHJfbXNnIHsKKwkJaW50IGxlbjsKKwkJdW5zaWduZWQgY2hhciBkYXRhWzQwMDBdOworCX0gY29wcl9tc2c7CisKKyNkZWZpbmUgU05EQ1RMX0NPUFJfUkVTRVQgICAgICAgICAgICAgX1NJTyAgKCdDJywgIDApCisjZGVmaW5lIFNORENUTF9DT1BSX0xPQUQJICAgICAgX1NJT1dSKCdDJywgIDEsIGNvcHJfYnVmZmVyKQorI2RlZmluZSBTTkRDVExfQ09QUl9SREFUQQkgICAgICBfU0lPV1IoJ0MnLCAgMiwgY29wcl9kZWJ1Z19idWYpCisjZGVmaW5lIFNORENUTF9DT1BSX1JDT0RFCSAgICAgIF9TSU9XUignQycsICAzLCBjb3ByX2RlYnVnX2J1ZikKKyNkZWZpbmUgU05EQ1RMX0NPUFJfV0RBVEEJICAgICAgX1NJT1cgKCdDJywgIDQsIGNvcHJfZGVidWdfYnVmKQorI2RlZmluZSBTTkRDVExfQ09QUl9XQ09ERQkgICAgICBfU0lPVyAoJ0MnLCAgNSwgY29wcl9kZWJ1Z19idWYpCisjZGVmaW5lIFNORENUTF9DT1BSX1JVTgkJICAgICAgX1NJT1dSKCdDJywgIDYsIGNvcHJfZGVidWdfYnVmKQorI2RlZmluZSBTTkRDVExfQ09QUl9IQUxUCSAgICAgIF9TSU9XUignQycsICA3LCBjb3ByX2RlYnVnX2J1ZikKKyNkZWZpbmUgU05EQ1RMX0NPUFJfU0VORE1TRwkgICAgICBfU0lPV1IoJ0MnLCAgOCwgY29wcl9tc2cpCisjZGVmaW5lIFNORENUTF9DT1BSX1JDVk1TRwkgICAgICBfU0lPUiAoJ0MnLCAgOSwgY29wcl9tc2cpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElPQ1RMIGNvbW1hbmRzIGZvciAvZGV2L21peGVyCisgKi8KKwkKKy8qIAorICogTWl4ZXIgZGV2aWNlcworICoKKyAqIFRoZXJlIGNhbiBiZSB1cCB0byAyMCBkaWZmZXJlbnQgYW5hbG9nIG1peGVyIGNoYW5uZWxzLiBUaGUKKyAqIFNPVU5EX01JWEVSX05SREVWSUNFUyBnaXZlcyB0aGUgY3VycmVudGx5IHN1cHBvcnRlZCBtYXhpbXVtLiAKKyAqIFRoZSBTT1VORF9NSVhFUl9SRUFEX0RFVk1BU0sgcmV0dXJucyBhIGJpdG1hc2sgd2hpY2ggdGVsbHMKKyAqIHRoZSBkZXZpY2VzIHN1cHBvcnRlZCBieSB0aGUgcGFydGljdWxhciBtaXhlci4KKyAqLworCisjZGVmaW5lIFNPVU5EX01JWEVSX05SREVWSUNFUwkyNQorI2RlZmluZSBTT1VORF9NSVhFUl9WT0xVTUUJMAorI2RlZmluZSBTT1VORF9NSVhFUl9CQVNTCTEKKyNkZWZpbmUgU09VTkRfTUlYRVJfVFJFQkxFCTIKKyNkZWZpbmUgU09VTkRfTUlYRVJfU1lOVEgJMworI2RlZmluZSBTT1VORF9NSVhFUl9QQ00JCTQKKyNkZWZpbmUgU09VTkRfTUlYRVJfU1BFQUtFUgk1CisjZGVmaW5lIFNPVU5EX01JWEVSX0xJTkUJNgorI2RlZmluZSBTT1VORF9NSVhFUl9NSUMJCTcKKyNkZWZpbmUgU09VTkRfTUlYRVJfQ0QJCTgKKyNkZWZpbmUgU09VTkRfTUlYRVJfSU1JWAk5CS8qICBSZWNvcmRpbmcgbW9uaXRvciAgKi8KKyNkZWZpbmUgU09VTkRfTUlYRVJfQUxUUENNCTEwCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQ0xFVgkxMQkvKiBSZWNvcmRpbmcgbGV2ZWwgKi8KKyNkZWZpbmUgU09VTkRfTUlYRVJfSUdBSU4JMTIJLyogSW5wdXQgZ2FpbiAqLworI2RlZmluZSBTT1VORF9NSVhFUl9PR0FJTgkxMwkvKiBPdXRwdXQgZ2FpbiAqLworLyogCisgKiBUaGUgQUQxODQ4IGNvZGVjIGFuZCBjb21wYXRpYmxlcyBoYXZlIHRocmVlIGxpbmUgbGV2ZWwgaW5wdXRzCisgKiAobGluZSwgYXV4MSBhbmQgYXV4MikuIFNpbmNlIGVhY2ggY2FyZCBtYW51ZmFjdHVyZXIgaGF2ZSBhc3NpZ25lZAorICogZGlmZmVyZW50IG1lYW5pbmdzIHRvIHRoZXNlIGlucHV0cywgaXQncyBpbnByYWN0aWNhbCB0byBhc3NpZ24KKyAqIHNwZWNpZmljIG1lYW5pbmdzIChsaW5lLCBjZCwgc3ludGggZXRjLikgdG8gdGhlbS4KKyAqLworI2RlZmluZSBTT1VORF9NSVhFUl9MSU5FMQkxNAkvKiBJbnB1dCBzb3VyY2UgMSAgKGF1eDEpICovCisjZGVmaW5lIFNPVU5EX01JWEVSX0xJTkUyCTE1CS8qIElucHV0IHNvdXJjZSAyICAoYXV4MikgKi8KKyNkZWZpbmUgU09VTkRfTUlYRVJfTElORTMJMTYJLyogSW5wdXQgc291cmNlIDMgIChsaW5lKSAqLworI2RlZmluZSBTT1VORF9NSVhFUl9ESUdJVEFMMQkxNwkvKiBEaWdpdGFsIChpbnB1dCkgMSAqLworI2RlZmluZSBTT1VORF9NSVhFUl9ESUdJVEFMMgkxOAkvKiBEaWdpdGFsIChpbnB1dCkgMiAqLworI2RlZmluZSBTT1VORF9NSVhFUl9ESUdJVEFMMwkxOQkvKiBEaWdpdGFsIChpbnB1dCkgMyAqLworI2RlZmluZSBTT1VORF9NSVhFUl9QSE9ORUlOCTIwCS8qIFBob25lIGlucHV0ICovCisjZGVmaW5lIFNPVU5EX01JWEVSX1BIT05FT1VUCTIxCS8qIFBob25lIG91dHB1dCAqLworI2RlZmluZSBTT1VORF9NSVhFUl9WSURFTwkyMgkvKiBWaWRlby9UViAoYXVkaW8pIGluICovCisjZGVmaW5lIFNPVU5EX01JWEVSX1JBRElPCTIzCS8qIFJhZGlvIGluICovCisjZGVmaW5lIFNPVU5EX01JWEVSX01PTklUT1IJMjQJLyogTW9uaXRvciAodXN1YWxseSBtaWMpIHZvbHVtZSAqLworCisvKiBTb21lIG9uL29mZiBzZXR0aW5ncyAoU09VTkRfU1BFQ0lBTF9NSU4gLSBTT1VORF9TUEVDSUFMX01BWCkgKi8KKy8qIE5vdCBjb3VudGVkIHRvIFNPVU5EX01JWEVSX05SREVWSUNFUywgYnV0IHVzZSB0aGUgc2FtZSBudW1iZXIgc3BhY2UgKi8KKyNkZWZpbmUgU09VTkRfT05PRkZfTUlOCQkyOAorI2RlZmluZSBTT1VORF9PTk9GRl9NQVgJCTMwCisKKy8qIE5vdGUhCU51bWJlciAzMSBjYW5ub3QgYmUgdXNlZCBzaW5jZSB0aGUgc2lnbiBiaXQgaXMgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgU09VTkRfTUlYRVJfTk9ORQkzMQorCisvKgorICogVGhlIGZvbGxvd2luZyB1bnN1cHBvcnRlZCBtYWNyb3MgYXJlIG5vIGxvbmdlciBmdW5jdGlvbmFsLgorICogVXNlIFNPVU5EX01JWEVSX1BSSVZBVEUjIG1hY3JvcyBpbiBmdXR1cmUuCisgKi8KKyNkZWZpbmUgU09VTkRfTUlYRVJfRU5IQU5DRQlTT1VORF9NSVhFUl9OT05FCisjZGVmaW5lIFNPVU5EX01JWEVSX01VVEUJU09VTkRfTUlYRVJfTk9ORQorI2RlZmluZSBTT1VORF9NSVhFUl9MT1VECVNPVU5EX01JWEVSX05PTkUKKworCisjZGVmaW5lIFNPVU5EX0RFVklDRV9MQUJFTFMJeyJWb2wgICIsICJCYXNzICIsICJUcmVibCIsICJTeW50aCIsICJQY20gICIsICJTcGtyICIsICJMaW5lICIsIFwKKwkJCQkgIk1pYyAgIiwgIkNEICAgIiwgIk1peCAgIiwgIlBjbTIgIiwgIlJlYyAgIiwgIklHYWluIiwgIk9HYWluIiwgXAorCQkJCSAiTGluZTEiLCAiTGluZTIiLCAiTGluZTMiLCAiRGlnaXRhbDEiLCAiRGlnaXRhbDIiLCAiRGlnaXRhbDMiLCBcCisJCQkJICJQaG9uZUluIiwgIlBob25lT3V0IiwgIlZpZGVvIiwgIlJhZGlvIiwgIk1vbml0b3IifQorCisjZGVmaW5lIFNPVU5EX0RFVklDRV9OQU1FUwl7InZvbCIsICJiYXNzIiwgInRyZWJsZSIsICJzeW50aCIsICJwY20iLCAic3BlYWtlciIsICJsaW5lIiwgXAorCQkJCSAibWljIiwgImNkIiwgIm1peCIsICJwY20yIiwgInJlYyIsICJpZ2FpbiIsICJvZ2FpbiIsIFwKKwkJCQkgImxpbmUxIiwgImxpbmUyIiwgImxpbmUzIiwgImRpZzEiLCAiZGlnMiIsICJkaWczIiwgXAorCQkJCSAicGhpbiIsICJwaG91dCIsICJ2aWRlbyIsICJyYWRpbyIsICJtb25pdG9yIn0KKworLyoJRGV2aWNlIGJpdG1hc2sgaWRlbnRpZmllcnMJKi8KKworI2RlZmluZSBTT1VORF9NSVhFUl9SRUNTUkMJMHhmZgkvKiBBcmcgY29udGFpbnMgYSBiaXQgZm9yIGVhY2ggcmVjb3JkaW5nIHNvdXJjZSAqLworI2RlZmluZSBTT1VORF9NSVhFUl9ERVZNQVNLCTB4ZmUJLyogQXJnIGNvbnRhaW5zIGEgYml0IGZvciBlYWNoIHN1cHBvcnRlZCBkZXZpY2UgKi8KKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVDTUFTSwkweGZkCS8qIEFyZyBjb250YWlucyBhIGJpdCBmb3IgZWFjaCBzdXBwb3J0ZWQgcmVjb3JkaW5nIHNvdXJjZSAqLworI2RlZmluZSBTT1VORF9NSVhFUl9DQVBTCTB4ZmMKKyMJZGVmaW5lIFNPVU5EX0NBUF9FWENMX0lOUFVUCTB4MDAwMDAwMDEJLyogT25seSBvbmUgcmVjb3JkaW5nIHNvdXJjZSBhdCBhIHRpbWUgKi8KKyNkZWZpbmUgU09VTkRfTUlYRVJfU1RFUkVPREVWUwkweGZiCS8qIE1peGVyIGNoYW5uZWxzIHN1cHBvcnRpbmcgc3RlcmVvICovCisjZGVmaW5lIFNPVU5EX01JWEVSX09VVFNSQwkweGZhCS8qIEFyZyBjb250YWlucyBhIGJpdCBmb3IgZWFjaCBpbnB1dCBzb3VyY2UgdG8gb3V0cHV0ICovCisjZGVmaW5lIFNPVU5EX01JWEVSX09VVE1BU0sJMHhmOQkvKiBBcmcgY29udGFpbnMgYSBiaXQgZm9yIGVhY2ggc3VwcG9ydGVkIGlucHV0IHNvdXJjZSB0byBvdXRwdXQgKi8KKworLyoJRGV2aWNlIG1hc2sgYml0cwkqLworCisjZGVmaW5lIFNPVU5EX01BU0tfVk9MVU1FCSgxIDw8IFNPVU5EX01JWEVSX1ZPTFVNRSkKKyNkZWZpbmUgU09VTkRfTUFTS19CQVNTCQkoMSA8PCBTT1VORF9NSVhFUl9CQVNTKQorI2RlZmluZSBTT1VORF9NQVNLX1RSRUJMRQkoMSA8PCBTT1VORF9NSVhFUl9UUkVCTEUpCisjZGVmaW5lIFNPVU5EX01BU0tfU1lOVEgJKDEgPDwgU09VTkRfTUlYRVJfU1lOVEgpCisjZGVmaW5lIFNPVU5EX01BU0tfUENNCQkoMSA8PCBTT1VORF9NSVhFUl9QQ00pCisjZGVmaW5lIFNPVU5EX01BU0tfU1BFQUtFUgkoMSA8PCBTT1VORF9NSVhFUl9TUEVBS0VSKQorI2RlZmluZSBTT1VORF9NQVNLX0xJTkUJCSgxIDw8IFNPVU5EX01JWEVSX0xJTkUpCisjZGVmaW5lIFNPVU5EX01BU0tfTUlDCQkoMSA8PCBTT1VORF9NSVhFUl9NSUMpCisjZGVmaW5lIFNPVU5EX01BU0tfQ0QJCSgxIDw8IFNPVU5EX01JWEVSX0NEKQorI2RlZmluZSBTT1VORF9NQVNLX0lNSVgJCSgxIDw8IFNPVU5EX01JWEVSX0lNSVgpCisjZGVmaW5lIFNPVU5EX01BU0tfQUxUUENNCSgxIDw8IFNPVU5EX01JWEVSX0FMVFBDTSkKKyNkZWZpbmUgU09VTkRfTUFTS19SRUNMRVYJKDEgPDwgU09VTkRfTUlYRVJfUkVDTEVWKQorI2RlZmluZSBTT1VORF9NQVNLX0lHQUlOCSgxIDw8IFNPVU5EX01JWEVSX0lHQUlOKQorI2RlZmluZSBTT1VORF9NQVNLX09HQUlOCSgxIDw8IFNPVU5EX01JWEVSX09HQUlOKQorI2RlZmluZSBTT1VORF9NQVNLX0xJTkUxCSgxIDw8IFNPVU5EX01JWEVSX0xJTkUxKQorI2RlZmluZSBTT1VORF9NQVNLX0xJTkUyCSgxIDw8IFNPVU5EX01JWEVSX0xJTkUyKQorI2RlZmluZSBTT1VORF9NQVNLX0xJTkUzCSgxIDw8IFNPVU5EX01JWEVSX0xJTkUzKQorI2RlZmluZSBTT1VORF9NQVNLX0RJR0lUQUwxCSgxIDw8IFNPVU5EX01JWEVSX0RJR0lUQUwxKQorI2RlZmluZSBTT1VORF9NQVNLX0RJR0lUQUwyCSgxIDw8IFNPVU5EX01JWEVSX0RJR0lUQUwyKQorI2RlZmluZSBTT1VORF9NQVNLX0RJR0lUQUwzCSgxIDw8IFNPVU5EX01JWEVSX0RJR0lUQUwzKQorI2RlZmluZSBTT1VORF9NQVNLX1BIT05FSU4JKDEgPDwgU09VTkRfTUlYRVJfUEhPTkVJTikKKyNkZWZpbmUgU09VTkRfTUFTS19QSE9ORU9VVAkoMSA8PCBTT1VORF9NSVhFUl9QSE9ORU9VVCkKKyNkZWZpbmUgU09VTkRfTUFTS19SQURJTwkoMSA8PCBTT1VORF9NSVhFUl9SQURJTykKKyNkZWZpbmUgU09VTkRfTUFTS19WSURFTwkoMSA8PCBTT1VORF9NSVhFUl9WSURFTykKKyNkZWZpbmUgU09VTkRfTUFTS19NT05JVE9SCSgxIDw8IFNPVU5EX01JWEVSX01PTklUT1IpCisKKy8qIE9ic29sZXRlIG1hY3JvcyAqLworI2RlZmluZSBTT1VORF9NQVNLX01VVEUJCSgxIDw8IFNPVU5EX01JWEVSX01VVEUpCisjZGVmaW5lIFNPVU5EX01BU0tfRU5IQU5DRQkoMSA8PCBTT1VORF9NSVhFUl9FTkhBTkNFKQorI2RlZmluZSBTT1VORF9NQVNLX0xPVUQJCSgxIDw8IFNPVU5EX01JWEVSX0xPVUQpCisKKyNkZWZpbmUgTUlYRVJfUkVBRChkZXYpCQlfU0lPUignTScsIGRldiwgaW50KQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX1ZPTFVNRQkJTUlYRVJfUkVBRChTT1VORF9NSVhFUl9WT0xVTUUpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfQkFTUwkJTUlYRVJfUkVBRChTT1VORF9NSVhFUl9CQVNTKQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX1RSRUJMRQkJTUlYRVJfUkVBRChTT1VORF9NSVhFUl9UUkVCTEUpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfU1lOVEgJCU1JWEVSX1JFQUQoU09VTkRfTUlYRVJfU1lOVEgpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfUENNCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX1BDTSkKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9TUEVBS0VSCU1JWEVSX1JFQUQoU09VTkRfTUlYRVJfU1BFQUtFUikKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9MSU5FCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0xJTkUpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfTUlDCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX01JQykKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9DRAkJTUlYRVJfUkVBRChTT1VORF9NSVhFUl9DRCkKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9JTUlYCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0lNSVgpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfQUxUUENNCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0FMVFBDTSkKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9SRUNMRVYJCU1JWEVSX1JFQUQoU09VTkRfTUlYRVJfUkVDTEVWKQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX0lHQUlOCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0lHQUlOKQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX09HQUlOCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX09HQUlOKQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX0xJTkUxCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0xJTkUxKQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX0xJTkUyCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0xJTkUyKQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX0xJTkUzCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0xJTkUzKQorCisvKiBPYnNvbGV0ZSBtYWNyb3MgKi8KKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9NVVRFCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX01VVEUpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfRU5IQU5DRQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0VOSEFOQ0UpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfTE9VRAkJTUlYRVJfUkVBRChTT1VORF9NSVhFUl9MT1VEKQorCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfUkVDU1JDCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX1JFQ1NSQykKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9ERVZNQVNLCU1JWEVSX1JFQUQoU09VTkRfTUlYRVJfREVWTUFTSykKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9SRUNNQVNLCU1JWEVSX1JFQUQoU09VTkRfTUlYRVJfUkVDTUFTSykKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9TVEVSRU9ERVZTCU1JWEVSX1JFQUQoU09VTkRfTUlYRVJfU1RFUkVPREVWUykKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9DQVBTCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0NBUFMpCisKKyNkZWZpbmUgTUlYRVJfV1JJVEUoZGV2KQkJX1NJT1dSKCdNJywgZGV2LCBpbnQpCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX1ZPTFVNRQlNSVhFUl9XUklURShTT1VORF9NSVhFUl9WT0xVTUUpCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0JBU1MJCU1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0JBU1MpCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX1RSRUJMRQlNSVhFUl9XUklURShTT1VORF9NSVhFUl9UUkVCTEUpCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX1NZTlRICQlNSVhFUl9XUklURShTT1VORF9NSVhFUl9TWU5USCkKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfUENNCQlNSVhFUl9XUklURShTT1VORF9NSVhFUl9QQ00pCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX1NQRUFLRVIJTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfU1BFQUtFUikKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfTElORQkJTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfTElORSkKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfTUlDCQlNSVhFUl9XUklURShTT1VORF9NSVhFUl9NSUMpCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0NECQlNSVhFUl9XUklURShTT1VORF9NSVhFUl9DRCkKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfSU1JWAkJTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfSU1JWCkKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfQUxUUENNCU1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0FMVFBDTSkKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfUkVDTEVWCU1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX1JFQ0xFVikKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfSUdBSU4JCU1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0lHQUlOKQorI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9PR0FJTgkJTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfT0dBSU4pCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0xJTkUxCQlNSVhFUl9XUklURShTT1VORF9NSVhFUl9MSU5FMSkKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfTElORTIJCU1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0xJTkUyKQorI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9MSU5FMwkJTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfTElORTMpCisKKy8qIE9ic29sZXRlIG1hY3JvcyAqLworI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9NVVRFCQlNSVhFUl9XUklURShTT1VORF9NSVhFUl9NVVRFKQorI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9FTkhBTkNFCU1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0VOSEFOQ0UpCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0xPVUQJCU1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0xPVUQpCisKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfUkVDU1JDCU1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX1JFQ1NSQykKKwordHlwZWRlZiBzdHJ1Y3QgbWl4ZXJfaW5mbworeworICBjaGFyIGlkWzE2XTsKKyAgY2hhciBuYW1lWzMyXTsKKyAgaW50ICBtb2RpZnlfY291bnRlcjsKKyAgaW50IGZpbGxlcnNbMTBdOworfSBtaXhlcl9pbmZvOworCit0eXBlZGVmIHN0cnVjdCBfb2xkX21peGVyX2luZm8gLyogT2Jzb2xldGUgKi8KK3sKKyAgY2hhciBpZFsxNl07CisgIGNoYXIgbmFtZVszMl07Cit9IF9vbGRfbWl4ZXJfaW5mbzsKKworI2RlZmluZSBTT1VORF9NSVhFUl9JTkZPCQlfU0lPUiAoJ00nLCAxMDEsIG1peGVyX2luZm8pCisjZGVmaW5lIFNPVU5EX09MRF9NSVhFUl9JTkZPCQlfU0lPUiAoJ00nLCAxMDEsIF9vbGRfbWl4ZXJfaW5mbykKKworLyoKKyAqIEEgbWVjaGFuaXNtIGZvciBhY2Nlc3NpbmcgInByb3ByaWV0YXJ5IiBtaXhlciBmZWF0dXJlcy4gVGhpcyBtZXRob2QKKyAqIHBlcm1pdHMgcGFzc2luZyAxMjggYnl0ZXMgb2YgYXJiaXRyYXJ5IGRhdGEgYmV0d2VlbiBhIG1peGVyIGFwcGxpY2F0aW9uCisgKiBhbmQgdGhlIG1peGVyIGRyaXZlci4gSW50ZXJwcmV0YXRpb24gb2YgdGhlIHJlY29yZCBpcyBkZWZpbmVkIGJ5CisgKiB0aGUgcGFydGljdWxhciBtaXhlciBkcml2ZXIuCisgKi8KK3R5cGVkZWYgdW5zaWduZWQgY2hhciBtaXhlcl9yZWNvcmRbMTI4XTsKKworI2RlZmluZSBTT1VORF9NSVhFUl9BQ0NFU1MJCV9TSU9XUignTScsIDEwMiwgbWl4ZXJfcmVjb3JkKQorCisvKgorICogVHdvIGlvY3RscyBmb3Igc3BlY2lhbCBzb3VuY2FyZCBmdW5jdGlvbgorICovCisjZGVmaW5lIFNPVU5EX01JWEVSX0FHQyAgX1NJT1dSKCdNJywgMTAzLCBpbnQpCisjZGVmaW5lIFNPVU5EX01JWEVSXzNEU0UgIF9TSU9XUignTScsIDEwNCwgaW50KQorCisvKgorICogVGhlIFNPVU5EX01JWEVSX1BSSVZBVEUjIGNvbW1hbmRzIGNhbiBiZSByZWRlZmluZWQgYnkgbG93IGxldmVsIGRyaXZlcnMuCisgKiBUaGVzZSBmZWF0dXJlcyBjYW4gYmUgdXNlZCB3aGVuIGFjY2Vzc2luZyBkZXZpY2Ugc3BlY2lmaWMgZmVhdHVyZXMuCisgKi8KKyNkZWZpbmUgU09VTkRfTUlYRVJfUFJJVkFURTEJCV9TSU9XUignTScsIDExMSwgaW50KQorI2RlZmluZSBTT1VORF9NSVhFUl9QUklWQVRFMgkJX1NJT1dSKCdNJywgMTEyLCBpbnQpCisjZGVmaW5lIFNPVU5EX01JWEVSX1BSSVZBVEUzCQlfU0lPV1IoJ00nLCAxMTMsIGludCkKKyNkZWZpbmUgU09VTkRfTUlYRVJfUFJJVkFURTQJCV9TSU9XUignTScsIDExNCwgaW50KQorI2RlZmluZSBTT1VORF9NSVhFUl9QUklWQVRFNQkJX1NJT1dSKCdNJywgMTE1LCBpbnQpCisKKy8qCisgKiBTT1VORF9NSVhFUl9HRVRMRVZFTFMgYW5kIFNPVU5EX01JWEVSX1NFVExFVkVMUyBjYWxscyBjYW4gYmUgdXNlZAorICogZm9yIHF1ZXJ5aW5nIGN1cnJlbnQgbWl4ZXIgc2V0dGluZ3MgZnJvbSB0aGUgZHJpdmVyIGFuZCBmb3IgbG9hZGluZworICogZGVmYXVsdCB2b2x1bWUgc2V0dGluZ3MgX3ByaW9yXyBhY3RpdmF0aW5nIHRoZSBtaXhlciAobG9hZGluZworICogZG9lc24ndCBhZmZlY3QgY3VycmVudCBzdGF0ZSBvZiB0aGUgbWl4ZXIgaGFyZHdhcmUpLiBUaGVzZSBjYWxscworICogYXJlIGZvciBpbnRlcm5hbCB1c2Ugb25seS4KKyAqLworCit0eXBlZGVmIHN0cnVjdCBtaXhlcl92b2xfdGFibGUgeworICBpbnQgbnVtOwkvKiBJbmRleCB0byB2b2x1bWUgdGFibGUgKi8KKyAgY2hhciBuYW1lWzMyXTsKKyAgaW50IGxldmVsc1szMl07Cit9IG1peGVyX3ZvbF90YWJsZTsKKworI2RlZmluZSBTT1VORF9NSVhFUl9HRVRMRVZFTFMJCV9TSU9XUignTScsIDExNiwgbWl4ZXJfdm9sX3RhYmxlKQorI2RlZmluZSBTT1VORF9NSVhFUl9TRVRMRVZFTFMJCV9TSU9XUignTScsIDExNywgbWl4ZXJfdm9sX3RhYmxlKQorCisvKiAKKyAqIEFuIGlvY3RsIGZvciBpZGVudGlmeWluZyB0aGUgZHJpdmVyIHZlcnNpb24uIEl0IHdpbGwgcmV0dXJuIHZhbHVlCisgKiBvZiB0aGUgU09VTkRfVkVSU0lPTiBtYWNybyB1c2VkIHdoZW4gY29tcGlsaW5nIHRoZSBkcml2ZXIuCisgKiBUaGlzIGNhbGwgd2FzIGludHJvZHVjZWQgaW4gT1NTIHZlcnNpb24gMy42IGFuZCBpdCB3aWxsIG5vdCB3b3JrCisgKiB3aXRoIGVhcmxpZXIgdmVyc2lvbnMgKHJldHVybnMgRUlOVkFMKS4KKyAqLworI2RlZmluZSBPU1NfR0VUVkVSU0lPTgkJCV9TSU9SICgnTScsIDExOCwgaW50KQorCisvKgorICogTGV2ZWwgMiBldmVudCB0eXBlcyBmb3IgL2Rldi9zZXF1ZW5jZXIKKyAqLworCisvKgorICogVGhlIDQgbW9zdCBzaWduaWZpY2FudCBiaXRzIG9mIGJ5dGUgMCBzcGVjaWZ5IHRoZSBjbGFzcyBvZgorICogdGhlIGV2ZW50OiAKKyAqCisgKgkweDhYID0gc3lzdGVtIGxldmVsIGV2ZW50cywKKyAqCTB4OVggPSBkZXZpY2UvcG9ydCBzcGVjaWZpYyBldmVudHMsIGV2ZW50WzFdID0gZGV2aWNlL3BvcnQsCisgKgkJVGhlIGxhc3QgNCBiaXRzIGdpdmUgdGhlIHN1YnR5cGU6CisgKgkJCTB4MDIJPSBDaGFubmVsIGV2ZW50IChldmVudFszXSA9IGNobikuCisgKgkJCTB4MDEJPSBub3RlIGV2ZW50IChldmVudFs0XSA9IG5vdGUpLgorICoJCQkoMHgwMSBpcyBub3QgdXNlZCBhbG9uZSBidXQgYWx3YXlzIHdpdGggYml0IDB4MDIpLgorICoJICAgICAgIGV2ZW50WzJdID0gTUlESSBtZXNzYWdlIGNvZGUgKDB4ODA9bm90ZSBvZmYgZXRjLikKKyAqCisgKi8KKworI2RlZmluZSBFVl9TRVFfTE9DQUwJCTB4ODAKKyNkZWZpbmUgRVZfVElNSU5HCQkweDgxCisjZGVmaW5lIEVWX0NITl9DT01NT04JCTB4OTIKKyNkZWZpbmUgRVZfQ0hOX1ZPSUNFCQkweDkzCisjZGVmaW5lIEVWX1NZU0VYCQkweDk0CisvKgorICogRXZlbnQgdHlwZXMgMjAwIHRvIDIyMCBhcmUgcmVzZXJ2ZWQgZm9yIGFwcGxpY2F0aW9uIHVzZS4KKyAqIFRoZXNlIG51bWJlcnMgd2lsbCBub3QgYmUgdXNlZCBieSB0aGUgZHJpdmVyLgorICovCisKKy8qCisgKiBFdmVudHMgZm9yIGV2ZW50IHR5cGUgRVZfQ0hOX1ZPSUNFCisgKi8KKworI2RlZmluZSBNSURJX05PVEVPRkYJCTB4ODAKKyNkZWZpbmUgTUlESV9OT1RFT04JCTB4OTAKKyNkZWZpbmUgTUlESV9LRVlfUFJFU1NVUkUJMHhBMAorCisvKgorICogRXZlbnRzIGZvciBldmVudCB0eXBlIEVWX0NITl9DT01NT04KKyAqLworCisjZGVmaW5lIE1JRElfQ1RMX0NIQU5HRQkJMHhCMAorI2RlZmluZSBNSURJX1BHTV9DSEFOR0UJCTB4QzAKKyNkZWZpbmUgTUlESV9DSE5fUFJFU1NVUkUJMHhEMAorI2RlZmluZSBNSURJX1BJVENIX0JFTkQJCTB4RTAKKworI2RlZmluZSBNSURJX1NZU1RFTV9QUkVGSVgJMHhGMAorCisvKgorICogVGltZXIgZXZlbnQgdHlwZXMKKyAqLworI2RlZmluZSBUTVJfV0FJVF9SRUwJCTEJLyogVGltZSByZWxhdGl2ZSB0byB0aGUgcHJldiB0aW1lICovCisjZGVmaW5lIFRNUl9XQUlUX0FCUwkJMgkvKiBBYnNvbHV0ZSB0aW1lIHNpbmNlIFRNUl9TVEFSVCAqLworI2RlZmluZSBUTVJfU1RPUAkJMworI2RlZmluZSBUTVJfU1RBUlQJCTQKKyNkZWZpbmUgVE1SX0NPTlRJTlVFCQk1CisjZGVmaW5lIFRNUl9URU1QTwkJNgorI2RlZmluZSBUTVJfRUNITwkJOAorI2RlZmluZSBUTVJfQ0xPQ0sJCTkJLyogTUlESSBjbG9jayAqLworI2RlZmluZSBUTVJfU1BQCQkJMTAJLyogU29uZyBwb3NpdGlvbiBwb2ludGVyICovCisjZGVmaW5lIFRNUl9USU1FU0lHCQkxMQkvKiBUaW1lIHNpZ25hdHVyZSAqLworCisvKgorICoJTG9jYWwgZXZlbnQgdHlwZXMKKyAqLworI2RlZmluZSBMT0NMX1NUQVJUQVVESU8JCTEKKworLyoKKyAqCVNvbWUgY29udmVuaWVuY2UgbWFjcm9zIHRvIHNpbXBsaWZ5IHByb2dyYW1taW5nIG9mIHRoZQorICoJL2Rldi9zZXF1ZW5jZXIgaW50ZXJmYWNlCisgKgorICoJVGhpcyBpcyBhIGxlZ2FjeSBpbnRlcmZhY2UgZm9yIGFwcGxpY2F0aW9ucyB3cml0dGVuIGFnYWluc3QKKyAqCXRoZSBPU1NsaWItMy44IHN0eWxlIGludGVyZmFjZS4gSXQgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlCisgKgl0byBhY3R1YWxseSBsaW5rIGFnYWluc3QgT1NTbGliIHdpdGggdGhpcyBoZWFkZXIsIGJ1dCB3ZQorICoJc3RpbGwgcHJvdmlkZSB0aGVzZSBtYWNyb3MgZm9yIHByb2dyYW1zIHVzaW5nIHRoZW0uCisgKgorICoJSWYgeW91IHdhbnQgdG8gdXNlIE9TU2xpYiwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgZ2V0CisgKgl0aGUgR1BMIHZlcnNpb24gb2YgT1NTLTQueCBhbmQgYnVpbGQgYWdhaW5zdCB0aGF0IHZlcnNpb24KKyAqCW9mIHRoZSBoZWFkZXIuCisgKgorICoJV2UgcmVkZWZpbmUgdGhlIGV4dGVybiBrZXl3b3JkIHNvIHRoYXQgbWFrZSBoZWFkZXJzX2NoZWNrCisgKglkb2VzIG5vdCBjb21wbGFpbiBhYm91dCBTRVFfVVNFX0VYVEJVRi4KKyAqLworI2RlZmluZSBTRVFfREVDTEFSRUJVRigpCQlTRVFfVVNFX0VYVEJVRigpCisKK3ZvaWQgc2VxYnVmX2R1bXAodm9pZCk7CS8qIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBwcm92aWRlZCBieSBwcm9ncmFtcyAqLworCisjZGVmaW5lIFNFUV9QTV9ERUZJTkVTIGludCBfX2Zvb19iYXJfX18KKworI2RlZmluZSBTRVFfTE9BRF9HTUlOU1RSKGRldiwgaW5zdHIpCisjZGVmaW5lIFNFUV9MT0FEX0dNRFJVTShkZXYsIGRydW0pCisKKyNkZWZpbmUgX1NFUV9FWFRFUk4gZXh0ZXJuCisjZGVmaW5lIFNFUV9VU0VfRVhUQlVGKCkgXAorCQlfU0VRX0VYVEVSTiB1bnNpZ25lZCBjaGFyIF9zZXFidWZbXTsgXAorCQlfU0VRX0VYVEVSTiBpbnQgX3NlcWJ1ZmxlbjsgX1NFUV9FWFRFUk4gaW50IF9zZXFidWZwdHIKKworI2lmbmRlZiBVU0VfU0lNUExFX01BQ1JPUworLyogU2FtcGxlIHNlcWJ1Zl9kdW1wKCkgaW1wbGVtZW50YXRpb246CisgKgorICoJU0VRX0RFRklORUJVRiAoMjA0OCk7CS0tIERlZmluZXMgYSBidWZmZXIgZm9yIDIwNDggYnl0ZXMKKyAqCisgKglpbnQgc2VxZmQ7CQktLSBUaGUgZmlsZSBkZXNjcmlwdG9yIGZvciAvZGV2L3NlcXVlbmNlci4KKyAqCisgKgl2b2lkCisgKglzZXFidWZfZHVtcCAoKQorICoJeworICoJICBpZiAoX3NlcWJ1ZnB0cikKKyAqCSAgICBpZiAod3JpdGUgKHNlcWZkLCBfc2VxYnVmLCBfc2VxYnVmcHRyKSA9PSAtMSkKKyAqCSAgICAgIHsKKyAqCQlwZXJyb3IgKCJ3cml0ZSAvZGV2L3NlcXVlbmNlciIpOworICoJCWV4aXQgKC0xKTsKKyAqCSAgICAgIH0KKyAqCSAgX3NlcWJ1ZnB0ciA9IDA7CisgKgl9CisgKi8KKworI2RlZmluZSBTRVFfREVGSU5FQlVGKGxlbikJCXVuc2lnbmVkIGNoYXIgX3NlcWJ1ZltsZW5dOyBpbnQgX3NlcWJ1ZmxlbiA9IGxlbjtpbnQgX3NlcWJ1ZnB0ciA9IDAKKyNkZWZpbmUgX1NFUV9ORUVEQlVGKGxlbikJCWlmICgoX3NlcWJ1ZnB0cisobGVuKSkgPiBfc2VxYnVmbGVuKSBzZXFidWZfZHVtcCgpCisjZGVmaW5lIF9TRVFfQURWQlVGKGxlbikJCV9zZXFidWZwdHIgKz0gbGVuCisjZGVmaW5lIFNFUV9EVU1QQlVGCQkJc2VxYnVmX2R1bXAKKyNlbHNlCisvKgorICogVGhpcyB2YXJpYXRpb24gb2YgdGhlIHNlcXVlbmNlciBtYWNyb3MgaXMgdXNlZCBqdXN0IHRvIGZvcm1hdCBvbmUgZXZlbnQKKyAqIHVzaW5nIGZpeGVkIGJ1ZmZlci4KKyAqIAorICogVGhlIHByb2dyYW0gdXNpbmcgdGhlIG1hY3JvIGxpYnJhcnkgbXVzdCBkZWZpbmUgdGhlIGZvbGxvd2luZyBtYWNyb3MgYmVmb3JlCisgKiB1c2luZyB0aGlzIGxpYnJhcnkuCisgKgorICogI2RlZmluZSBfc2VxYnVmIAkJIG5hbWUgb2YgdGhlIGJ1ZmZlciAodW5zaWduZWQgY2hhcltdKSAKKyAqICNkZWZpbmUgX1NFUV9BRFZCVUYobGVuKQkgSWYgdGhlIGFwcGxpYyBuZWVkcyB0byBrbm93IHRoZSBleGFjdAorICoJCQkJIHNpemUgb2YgdGhlIGV2ZW50LCB0aGlzIG1hY3JvIGNhbiBiZSB1c2VkLgorICoJCQkJIE90aGVyd2lzZSB0aGlzIG11c3QgYmUgZGVmaW5lZCBhcyBlbXB0eS4KKyAqICNkZWZpbmUgX3NlcWJ1ZnB0cgkJIERlZmluZSB0aGUgbmFtZSBvZiBpbmRleCB2YXJpYWJsZSBvciAwIGlmCisgKgkJCQkgbm90IHJlcXVpcmVkLiAKKyAqLworI2RlZmluZSBfU0VRX05FRURCVUYobGVuKQkvKiBlbXB0eSAqLworI2VuZGlmCisKKyNkZWZpbmUgU0VRX1ZPTFVNRV9NT0RFKGRldiwgbW9kZSkJe19TRVFfTkVFREJVRig4KTtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cl0gPSBTRVFfRVhURU5ERUQ7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrMV0gPSBTRVFfVk9MTU9ERTtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cisyXSA9IChkZXYpO1wKKwkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzNdID0gKG1vZGUpO1wKKwkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzRdID0gMDtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cis1XSA9IDA7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrNl0gPSAwO1wKKwkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzddID0gMDtcCisJCQkJCV9TRVFfQURWQlVGKDgpO30KKworLyoKKyAqIE1pZGkgdm9pY2UgbWVzc2FnZXMKKyAqLworCisjZGVmaW5lIF9DSE5fVk9JQ0UoZGV2LCBldmVudCwgY2huLCBub3RlLCBwYXJtKSBcCisJCQkJCXtfU0VRX05FRURCVUYoOCk7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHJdID0gRVZfQ0hOX1ZPSUNFO1wKKwkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzFdID0gKGRldik7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrMl0gPSAoZXZlbnQpO1wKKwkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzNdID0gKGNobik7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrNF0gPSAobm90ZSk7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrNV0gPSAocGFybSk7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrNl0gPSAoMCk7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrN10gPSAwO1wKKwkJCQkJX1NFUV9BRFZCVUYoOCk7fQorCisjZGVmaW5lIFNFUV9TVEFSVF9OT1RFKGRldiwgY2huLCBub3RlLCB2b2wpIFwKKwkJX0NITl9WT0lDRShkZXYsIE1JRElfTk9URU9OLCBjaG4sIG5vdGUsIHZvbCkKKworI2RlZmluZSBTRVFfU1RPUF9OT1RFKGRldiwgY2huLCBub3RlLCB2b2wpIFwKKwkJX0NITl9WT0lDRShkZXYsIE1JRElfTk9URU9GRiwgY2huLCBub3RlLCB2b2wpCisKKyNkZWZpbmUgU0VRX0tFWV9QUkVTU1VSRShkZXYsIGNobiwgbm90ZSwgcHJlc3N1cmUpIFwKKwkJX0NITl9WT0lDRShkZXYsIE1JRElfS0VZX1BSRVNTVVJFLCBjaG4sIG5vdGUsIHByZXNzdXJlKQorCisvKgorICogTWlkaSBjaGFubmVsIG1lc3NhZ2VzCisgKi8KKworI2RlZmluZSBfQ0hOX0NPTU1PTihkZXYsIGV2ZW50LCBjaG4sIHAxLCBwMiwgdzE0KSBcCisJCQkJCXtfU0VRX05FRURCVUYoOCk7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHJdID0gRVZfQ0hOX0NPTU1PTjtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cisxXSA9IChkZXYpO1wKKwkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzJdID0gKGV2ZW50KTtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0ciszXSA9IChjaG4pO1wKKwkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzRdID0gKHAxKTtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cis1XSA9IChwMik7XAorCQkJCQkqKHNob3J0ICopJl9zZXFidWZbX3NlcWJ1ZnB0cis2XSA9ICh3MTQpO1wKKwkJCQkJX1NFUV9BRFZCVUYoOCk7fQorLyoKKyAqIFNFUV9TWVNFWCBwZXJtaXRzIHNlbmRpbmcgb2Ygc3lzZXggbWVzc2FnZXMuIChJdCBtYXkgbG9vayB0aGF0IGl0IHBlcm1pdHMKKyAqIHNlbmRpbmcgYW55IE1JREkgYnl0ZXMgYnV0IGl0J3MgYWJzb2x1dGVseSBub3QgcG9zc2libGUuIFRyeWluZyB0byBkbworICogc28gX3dpbGxfIGNhdXNlIHByb2JsZW1zIHdpdGggTVBVNDAxIGludGVsbGlnZW50IG1vZGUpLgorICoKKyAqIFN5c2V4IG1lc3NhZ2VzIGFyZSBzZW50IGluIGJsb2NrcyBvZiAxIHRvIDYgYnl0ZXMuIExvbmdlciBtZXNzYWdlcyBtdXN0IGJlIAorICogc2VudCBieSBjYWxsaW5nIFNFUV9TWVNFWCgpIHNldmVyYWwgdGltZXMgKHRoZXJlIG11c3QgYmUgbm8gb3RoZXIgZXZlbnRzCisgKiBiZXR3ZWVuIHRoZW0pLiBGaXJzdCBzeXNleCBmcmFnbWVudCBtdXN0IGhhdmUgMHhmMCBpbiB0aGUgZmlyc3QgYnl0ZQorICogYW5kIHRoZSBsYXN0IGJ5dGUgKGJ1ZltsZW4tMV0gb2YgdGhlIGxhc3QgZnJhZ21lbnQgbXVzdCBiZSAweGY3LiBObyBieXRlCisgKiBiZXR3ZWVuIHRoZXNlIHN5c2V4IHN0YXJ0IGFuZCBlbmQgbWFya2VycyBjYW5ub3QgYmUgbGFyZ2VyIHRoYW4gMHg3Zi4gQWxzbworICogbGVuZ3RocyBvZiBlYWNoIGZyYWdtZW50cyAoZXhjZXB0IHRoZSBsYXN0IG9uZSkgbXVzdCBiZSA2LgorICoKKyAqIEJyZWFraW5nIHRoZSBhYm92ZSBydWxlcyBtYXkgd29yayB3aXRoIHNvbWUgTUlESSBwb3J0cyBidXQgaXMgbGlrZWx5IHRvCisgKiBjYXVzZSBmYXRhbCBwcm9ibGVtcyB3aXRoIHNvbWUgb3RoZXIgZGV2aWNlcyAoc3VjaCBhcyBNUFU0MDEpLgorICovCisjZGVmaW5lIFNFUV9TWVNFWChkZXYsIGJ1ZiwgbGVuKSBcCisJCQkJCXtpbnQgaWksIGxsPShsZW4pOyBcCisJCQkJCSB1bnNpZ25lZCBjaGFyICpidWZwPWJ1ZjtcCisJCQkJCSBpZiAobGw+NilsbD02O1wKKwkJCQkJX1NFUV9ORUVEQlVGKDgpO1wKKwkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyXSA9IEVWX1NZU0VYO1wKKwkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzFdID0gKGRldik7XAorCQkJCQlmb3IoaWk9MDtpaTxsbDtpaSsrKVwKKwkJCQkJICAgX3NlcWJ1Zltfc2VxYnVmcHRyK2lpKzJdID0gYnVmcFtpaV07XAorCQkJCQlmb3IoaWk9bGw7aWk8NjtpaSsrKVwKKwkJCQkJICAgX3NlcWJ1Zltfc2VxYnVmcHRyK2lpKzJdID0gMHhmZjtcCisJCQkJCV9TRVFfQURWQlVGKDgpO30KKworI2RlZmluZSBTRVFfQ0hOX1BSRVNTVVJFKGRldiwgY2huLCBwcmVzc3VyZSkgXAorCQlfQ0hOX0NPTU1PTihkZXYsIE1JRElfQ0hOX1BSRVNTVVJFLCBjaG4sIHByZXNzdXJlLCAwLCAwKQorCisjZGVmaW5lIFNFUV9TRVRfUEFUQ0ggU0VRX1BHTV9DSEFOR0UKKyNkZWZpbmUgU0VRX1BHTV9DSEFOR0UoZGV2LCBjaG4sIHBhdGNoKSBcCisJCV9DSE5fQ09NTU9OKGRldiwgTUlESV9QR01fQ0hBTkdFLCBjaG4sIHBhdGNoLCAwLCAwKQorCisjZGVmaW5lIFNFUV9DT05UUk9MKGRldiwgY2huLCBjb250cm9sbGVyLCB2YWx1ZSkgXAorCQlfQ0hOX0NPTU1PTihkZXYsIE1JRElfQ1RMX0NIQU5HRSwgY2huLCBjb250cm9sbGVyLCAwLCB2YWx1ZSkKKworI2RlZmluZSBTRVFfQkVOREVSKGRldiwgY2huLCB2YWx1ZSkgXAorCQlfQ0hOX0NPTU1PTihkZXYsIE1JRElfUElUQ0hfQkVORCwgY2huLCAwLCAwLCB2YWx1ZSkKKworCisjZGVmaW5lIFNFUV9WMl9YX0NPTlRST0woZGV2LCB2b2ljZSwgY29udHJvbGxlciwgdmFsdWUpCXtfU0VRX05FRURCVUYoOCk7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHJdID0gU0VRX0VYVEVOREVEO1wKKwkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzFdID0gU0VRX0NPTlRST0xMRVI7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrMl0gPSAoZGV2KTtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0ciszXSA9ICh2b2ljZSk7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrNF0gPSAoY29udHJvbGxlcik7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrNV0gPSAoKHZhbHVlKSYweGZmKTtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cis2XSA9ICgodmFsdWU+PjgpJjB4ZmYpO1wKKwkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzddID0gMDtcCisJCQkJCV9TRVFfQURWQlVGKDgpO30KKy8qCisgKiBUaGUgZm9sbG93aW5nIDUgbWFjcm9zIGFyZSBpbmNvcnJlY3RseSBpbXBsZW1lbnRlZCBhbmQgb2Jzb2xldGUuCisgKiBVc2UgU0VRX0JFTkRFUiBhbmQgU0VRX0NPTlRST0wgKHdpdGggcHJvcGVyIGNvbnRyb2xsZXIpIGluc3RlYWQuCisgKi8KKyNkZWZpbmUgU0VRX1BJVENIQkVORChkZXYsIHZvaWNlLCB2YWx1ZSkgU0VRX1YyX1hfQ09OVFJPTChkZXYsIHZvaWNlLCBDVFJMX1BJVENIX0JFTkRFUiwgdmFsdWUpCisjZGVmaW5lIFNFUV9CRU5ERVJfUkFOR0UoZGV2LCB2b2ljZSwgdmFsdWUpIFNFUV9WMl9YX0NPTlRST0woZGV2LCB2b2ljZSwgQ1RSTF9QSVRDSF9CRU5ERVJfUkFOR0UsIHZhbHVlKQorI2RlZmluZSBTRVFfRVhQUkVTU0lPTihkZXYsIHZvaWNlLCB2YWx1ZSkgU0VRX0NPTlRST0woZGV2LCB2b2ljZSwgQ1RMX0VYUFJFU1NJT04sIHZhbHVlKjEyOCkKKyNkZWZpbmUgU0VRX01BSU5fVk9MVU1FKGRldiwgdm9pY2UsIHZhbHVlKSBTRVFfQ09OVFJPTChkZXYsIHZvaWNlLCBDVExfTUFJTl9WT0xVTUUsICh2YWx1ZSoxNjM4MykvMTAwKQorI2RlZmluZSBTRVFfUEFOTklORyhkZXYsIHZvaWNlLCBwb3MpIFNFUV9DT05UUk9MKGRldiwgdm9pY2UsIENUTF9QQU4sIChwb3MrMTI4KSAvIDIpCisKKy8qCisgKiBUaW1pbmcgYW5kIHN5bmNyb25pemF0aW9uIG1hY3JvcworICovCisKKyNkZWZpbmUgX1RJTUVSX0VWRU5UKGV2LCBwYXJtKQkJe19TRVFfTkVFREJVRig4KTtcCisJCQkJIAlfc2VxYnVmW19zZXFidWZwdHIrMF0gPSBFVl9USU1JTkc7IFwKKwkJCQkgCV9zZXFidWZbX3NlcWJ1ZnB0cisxXSA9IChldik7IFwKKwkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzJdID0gMDtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0ciszXSA9IDA7XAorCQkJCSAJKih1bnNpZ25lZCBpbnQgKikmX3NlcWJ1Zltfc2VxYnVmcHRyKzRdID0gKHBhcm0pOyBcCisJCQkJCV9TRVFfQURWQlVGKDgpO30KKworI2RlZmluZSBTRVFfU1RBUlRfVElNRVIoKQkJX1RJTUVSX0VWRU5UKFRNUl9TVEFSVCwgMCkKKyNkZWZpbmUgU0VRX1NUT1BfVElNRVIoKQkJX1RJTUVSX0VWRU5UKFRNUl9TVE9QLCAwKQorI2RlZmluZSBTRVFfQ09OVElOVUVfVElNRVIoKQkJX1RJTUVSX0VWRU5UKFRNUl9DT05USU5VRSwgMCkKKyNkZWZpbmUgU0VRX1dBSVRfVElNRSh0aWNrcykJCV9USU1FUl9FVkVOVChUTVJfV0FJVF9BQlMsIHRpY2tzKQorI2RlZmluZSBTRVFfREVMVEFfVElNRSh0aWNrcykJCV9USU1FUl9FVkVOVChUTVJfV0FJVF9SRUwsIHRpY2tzKQorI2RlZmluZSBTRVFfRUNIT19CQUNLKGtleSkJCV9USU1FUl9FVkVOVChUTVJfRUNITywga2V5KQorI2RlZmluZSBTRVFfU0VUX1RFTVBPKHZhbHVlKQkJX1RJTUVSX0VWRU5UKFRNUl9URU1QTywgdmFsdWUpCisjZGVmaW5lIFNFUV9TT05HUE9TKHBvcykJCV9USU1FUl9FVkVOVChUTVJfU1BQLCBwb3MpCisjZGVmaW5lIFNFUV9USU1FX1NJR05BVFVSRShzaWcpCQlfVElNRVJfRVZFTlQoVE1SX1RJTUVTSUcsIHNpZykKKworLyoKKyAqIExvY2FsIGNvbnRyb2wgZXZlbnRzCisgKi8KKworI2RlZmluZSBfTE9DQUxfRVZFTlQoZXYsIHBhcm0pCQl7X1NFUV9ORUVEQlVGKDgpO1wKKwkJCQkgCV9zZXFidWZbX3NlcWJ1ZnB0ciswXSA9IEVWX1NFUV9MT0NBTDsgXAorCQkJCSAJX3NlcWJ1Zltfc2VxYnVmcHRyKzFdID0gKGV2KTsgXAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrMl0gPSAwO1wKKwkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzNdID0gMDtcCisJCQkJIAkqKHVuc2lnbmVkIGludCAqKSZfc2VxYnVmW19zZXFidWZwdHIrNF0gPSAocGFybSk7IFwKKwkJCQkJX1NFUV9BRFZCVUYoOCk7fQorCisjZGVmaW5lIFNFUV9QTEFZQVVESU8oZGV2bWFzaykJCV9MT0NBTF9FVkVOVChMT0NMX1NUQVJUQVVESU8sIGRldm1hc2spCisvKgorICogRXZlbnRzIGZvciB0aGUgbGV2ZWwgMSBpbnRlcmZhY2Ugb25seSAKKyAqLworCisjZGVmaW5lIFNFUV9NSURJT1VUKGRldmljZSwgYnl0ZSkJe19TRVFfTkVFREJVRig0KTtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cl0gPSBTRVFfTUlESVBVVEM7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrMV0gPSAoYnl0ZSk7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrMl0gPSAoZGV2aWNlKTtcCisJCQkJCV9zZXFidWZbX3NlcWJ1ZnB0ciszXSA9IDA7XAorCQkJCQlfU0VRX0FEVkJVRig0KTt9CisKKy8qCisgKiBQYXRjaCBsb2FkaW5nLgorICovCisjZGVmaW5lIFNFUV9XUlBBVENIKHBhdGNoeCwgbGVuKSBcCisJCXtpZiAoX3NlcWJ1ZnB0cikgU0VRX0RVTVBCVUYoKTtcCisJCSBpZiAod3JpdGUoc2VxZmQsIChjaGFyKikocGF0Y2h4KSwgbGVuKT09LTEpIFwKKwkJICAgIHBlcnJvcigiV3JpdGUgcGF0Y2g6IC9kZXYvc2VxdWVuY2VyIik7fQorI2RlZmluZSBTRVFfV1JQQVRDSDIocGF0Y2h4LCBsZW4pIFwKKwkJKFNFUV9EVU1QQlVGKCksIHdyaXRlKHNlcWZkLCAoY2hhciopKHBhdGNoeCksIGxlbikpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3NwaS9zcGlkZXYuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zcGkvc3BpZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYwNTcwYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zcGkvc3BpZGV2LmgKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBpbmNsdWRlL2xpbnV4L3NwaS9zcGlkZXYuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBTV0FQUAorICoJQW5kcmVhIFBhdGVybmlhbmkgPGEucGF0ZXJuaWFuaUBzd2FwcC1lbmcuaXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgICovCisKKyNpZm5kZWYgU1BJREVWX0gKKyNkZWZpbmUgU1BJREVWX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIFVzZXIgc3BhY2UgdmVyc2lvbnMgb2Yga2VybmVsIHN5bWJvbHMgZm9yIFNQSSBjbG9ja2luZyBtb2RlcywKKyAqIG1hdGNoaW5nIDxsaW51eC9zcGkvc3BpLmg+CisgKi8KKworI2RlZmluZSBTUElfQ1BIQQkJMHgwMQorI2RlZmluZSBTUElfQ1BPTAkJMHgwMgorCisjZGVmaW5lIFNQSV9NT0RFXzAJCSgwfDApCisjZGVmaW5lIFNQSV9NT0RFXzEJCSgwfFNQSV9DUEhBKQorI2RlZmluZSBTUElfTU9ERV8yCQkoU1BJX0NQT0x8MCkKKyNkZWZpbmUgU1BJX01PREVfMwkJKFNQSV9DUE9MfFNQSV9DUEhBKQorCisjZGVmaW5lIFNQSV9DU19ISUdICQkweDA0CisjZGVmaW5lIFNQSV9MU0JfRklSU1QJCTB4MDgKKyNkZWZpbmUgU1BJXzNXSVJFCQkweDEwCisjZGVmaW5lIFNQSV9MT09QCQkweDIwCisjZGVmaW5lIFNQSV9OT19DUwkJMHg0MAorI2RlZmluZSBTUElfUkVBRFkJCTB4ODAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBJT0NUTCBjb21tYW5kcyAqLworCisjZGVmaW5lIFNQSV9JT0NfTUFHSUMJCQknaycKKworLyoqCisgKiBzdHJ1Y3Qgc3BpX2lvY190cmFuc2ZlciAtIGRlc2NyaWJlcyBhIHNpbmdsZSBTUEkgdHJhbnNmZXIKKyAqIEB0eF9idWY6IEhvbGRzIHBvaW50ZXIgdG8gdXNlcnNwYWNlIGJ1ZmZlciB3aXRoIHRyYW5zbWl0IGRhdGEsIG9yIG51bGwuCisgKglJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB6ZXJvZXMgYXJlIHNoaWZ0ZWQgb3V0LgorICogQHJ4X2J1ZjogSG9sZHMgcG9pbnRlciB0byB1c2Vyc3BhY2UgYnVmZmVyIGZvciByZWNlaXZlIGRhdGEsIG9yIG51bGwuCisgKiBAbGVuOiBMZW5ndGggb2YgdHggYW5kIHJ4IGJ1ZmZlcnMsIGluIGJ5dGVzLgorICogQHNwZWVkX2h6OiBUZW1wb3Jhcnkgb3ZlcnJpZGUgb2YgdGhlIGRldmljZSdzIGJpdHJhdGUuCisgKiBAYml0c19wZXJfd29yZDogVGVtcG9yYXJ5IG92ZXJyaWRlIG9mIHRoZSBkZXZpY2UncyB3b3Jkc2l6ZS4KKyAqIEBkZWxheV91c2VjczogSWYgbm9uemVybywgaG93IGxvbmcgdG8gZGVsYXkgYWZ0ZXIgdGhlIGxhc3QgYml0IHRyYW5zZmVyCisgKgliZWZvcmUgb3B0aW9uYWxseSBkZXNlbGVjdGluZyB0aGUgZGV2aWNlIGJlZm9yZSB0aGUgbmV4dCB0cmFuc2Zlci4KKyAqIEBjc19jaGFuZ2U6IFRydWUgdG8gZGVzZWxlY3QgZGV2aWNlIGJlZm9yZSBzdGFydGluZyB0aGUgbmV4dCB0cmFuc2Zlci4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBpcyBtYXBwZWQgZGlyZWN0bHkgdG8gdGhlIGtlcm5lbCBzcGlfdHJhbnNmZXIgc3RydWN0dXJlOworICogdGhlIGZpZWxkcyBoYXZlIHRoZSBzYW1lIG1lYW5pbmdzLCBleGNlcHQgb2YgY291cnNlIHRoYXQgdGhlIHBvaW50ZXJzCisgKiBhcmUgaW4gYSBkaWZmZXJlbnQgYWRkcmVzcyBzcGFjZSAoYW5kIG1heSBiZSBvZiBkaWZmZXJlbnQgc2l6ZXMgaW4gc29tZQorICogY2FzZXMsIHN1Y2ggYXMgMzItYml0IGkzODYgdXNlcnNwYWNlIG92ZXIgYSA2NC1iaXQgeDg2XzY0IGtlcm5lbCkuCisgKiBaZXJvLWluaXRpYWxpemUgdGhlIHN0cnVjdHVyZSwgaW5jbHVkaW5nIGN1cnJlbnRseSB1bnVzZWQgZmllbGRzLCB0bworICogYWNjb21vZGF0ZSBwb3RlbnRpYWwgZnV0dXJlIHVwZGF0ZXMuCisgKgorICogU1BJX0lPQ19NRVNTQUdFIGdpdmVzIHVzZXJzcGFjZSB0aGUgZXF1aXZhbGVudCBvZiBrZXJuZWwgc3BpX3N5bmMoKS4KKyAqIFBhc3MgaXQgYW4gYXJyYXkgb2YgcmVsYXRlZCB0cmFuc2ZlcnMsIHRoZXknbGwgZXhlY3V0ZSB0b2dldGhlci4KKyAqIEVhY2ggdHJhbnNmZXIgbWF5IGJlIGhhbGYgZHVwbGV4IChlaXRoZXIgZGlyZWN0aW9uKSBvciBmdWxsIGR1cGxleC4KKyAqCisgKglzdHJ1Y3Qgc3BpX2lvY190cmFuc2ZlciBtZXNnWzRdOworICoJLi4uCisgKglzdGF0dXMgPSBpb2N0bChmZCwgU1BJX0lPQ19NRVNTQUdFKDQpLCBtZXNnKTsKKyAqCisgKiBTbyBmb3IgZXhhbXBsZSBvbmUgdHJhbnNmZXIgbWlnaHQgc2VuZCBhIG5pbmUgYml0IGNvbW1hbmQgKHJpZ2h0IGFsaWduZWQKKyAqIGluIGEgMTYtYml0IHdvcmQpLCB0aGUgbmV4dCBjb3VsZCByZWFkIGEgYmxvY2sgb2YgOC1iaXQgZGF0YSBiZWZvcmUKKyAqIHRlcm1pbmF0aW5nIHRoYXQgY29tbWFuZCBieSB0ZW1wb3JhcmlseSBkZXNlbGVjdGluZyB0aGUgY2hpcDsgdGhlIG5leHQKKyAqIGNvdWxkIHNlbmQgYSBkaWZmZXJlbnQgbmluZSBiaXQgY29tbWFuZCAocmUtc2VsZWN0aW5nIHRoZSBjaGlwKSwgYW5kIHRoZQorICogbGFzdCB0cmFuc2ZlciBtaWdodCB3cml0ZSBzb21lIHJlZ2lzdGVyIHZhbHVlcy4KKyAqLworc3RydWN0IHNwaV9pb2NfdHJhbnNmZXIgeworCV9fdTY0CQl0eF9idWY7CisJX191NjQJCXJ4X2J1ZjsKKworCV9fdTMyCQlsZW47CisJX191MzIJCXNwZWVkX2h6OworCisJX191MTYJCWRlbGF5X3VzZWNzOworCV9fdTgJCWJpdHNfcGVyX3dvcmQ7CisJX191OAkJY3NfY2hhbmdlOworCV9fdTMyCQlwYWQ7CisKKwkvKiBJZiB0aGUgY29udGVudHMgb2YgJ3N0cnVjdCBzcGlfaW9jX3RyYW5zZmVyJyBldmVyIGNoYW5nZQorCSAqIGluY29tcGF0aWJseSwgdGhlbiB0aGUgaW9jdGwgbnVtYmVyIChjdXJyZW50bHkgMCkgbXVzdCBjaGFuZ2U7CisJICogaW9jdGxzIHdpdGggY29uc3RhbnQgc2l6ZSBmaWVsZHMgZ2V0IGEgYml0IG1vcmUgaW4gdGhlIHdheSBvZgorCSAqIGVycm9yIGNoZWNraW5nIHRoYW4gb25lcyAobGlrZSB0aGlzKSB3aGVyZSB0aGF0IGZpZWxkIHZhcmllcy4KKwkgKgorCSAqIE5PVEU6IHN0cnVjdCBsYXlvdXQgaXMgdGhlIHNhbWUgaW4gNjRiaXQgYW5kIDMyYml0IHVzZXJzcGFjZS4KKwkgKi8KK307CisKKy8qIG5vdCBhbGwgcGxhdGZvcm1zIHVzZSA8YXNtLWdlbmVyaWMvaW9jdGwuaD4gb3IgX0lPQ19UWVBFQ0hFQ0soKSAuLi4gKi8KKyNkZWZpbmUgU1BJX01TR1NJWkUoTikgXAorCSgoKChOKSooc2l6ZW9mIChzdHJ1Y3Qgc3BpX2lvY190cmFuc2ZlcikpKSA8ICgxIDw8IF9JT0NfU0laRUJJVFMpKSBcCisJCT8gKChOKSooc2l6ZW9mIChzdHJ1Y3Qgc3BpX2lvY190cmFuc2ZlcikpKSA6IDApCisjZGVmaW5lIFNQSV9JT0NfTUVTU0FHRShOKSBfSU9XKFNQSV9JT0NfTUFHSUMsIDAsIGNoYXJbU1BJX01TR1NJWkUoTildKQorCisKKy8qIFJlYWQgLyBXcml0ZSBvZiBTUEkgbW9kZSAoU1BJX01PREVfMC4uU1BJX01PREVfMykgKi8KKyNkZWZpbmUgU1BJX0lPQ19SRF9NT0RFCQkJX0lPUihTUElfSU9DX01BR0lDLCAxLCBfX3U4KQorI2RlZmluZSBTUElfSU9DX1dSX01PREUJCQlfSU9XKFNQSV9JT0NfTUFHSUMsIDEsIF9fdTgpCisKKy8qIFJlYWQgLyBXcml0ZSBTUEkgYml0IGp1c3RpZmljYXRpb24gKi8KKyNkZWZpbmUgU1BJX0lPQ19SRF9MU0JfRklSU1QJCV9JT1IoU1BJX0lPQ19NQUdJQywgMiwgX191OCkKKyNkZWZpbmUgU1BJX0lPQ19XUl9MU0JfRklSU1QJCV9JT1coU1BJX0lPQ19NQUdJQywgMiwgX191OCkKKworLyogUmVhZCAvIFdyaXRlIFNQSSBkZXZpY2Ugd29yZCBsZW5ndGggKDEuLk4pICovCisjZGVmaW5lIFNQSV9JT0NfUkRfQklUU19QRVJfV09SRAlfSU9SKFNQSV9JT0NfTUFHSUMsIDMsIF9fdTgpCisjZGVmaW5lIFNQSV9JT0NfV1JfQklUU19QRVJfV09SRAlfSU9XKFNQSV9JT0NfTUFHSUMsIDMsIF9fdTgpCisKKy8qIFJlYWQgLyBXcml0ZSBTUEkgZGV2aWNlIGRlZmF1bHQgbWF4IHNwZWVkIGh6ICovCisjZGVmaW5lIFNQSV9JT0NfUkRfTUFYX1NQRUVEX0haCQlfSU9SKFNQSV9JT0NfTUFHSUMsIDQsIF9fdTMyKQorI2RlZmluZSBTUElfSU9DX1dSX01BWF9TUEVFRF9IWgkJX0lPVyhTUElfSU9DX01BR0lDLCA0LCBfX3UzMikKKworCisKKyNlbmRpZiAvKiBTUElERVZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3N0YXQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zdGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE5ZjAzNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zdGF0LmgKQEAgLTAsMCArMSw0NSBAQAorI2lmbmRlZiBfTElOVVhfU1RBVF9ICisjZGVmaW5lIF9MSU5VWF9TVEFUX0gKKworCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCAhZGVmaW5lZChfX0dMSUJDX18pIHx8IChfX0dMSUJDX18gPCAyKQorCisjZGVmaW5lIFNfSUZNVCAgMDAxNzAwMDAKKyNkZWZpbmUgU19JRlNPQ0sgMDE0MDAwMAorI2RlZmluZSBTX0lGTE5LCSAwMTIwMDAwCisjZGVmaW5lIFNfSUZSRUcgIDAxMDAwMDAKKyNkZWZpbmUgU19JRkJMSyAgMDA2MDAwMAorI2RlZmluZSBTX0lGRElSICAwMDQwMDAwCisjZGVmaW5lIFNfSUZDSFIgIDAwMjAwMDAKKyNkZWZpbmUgU19JRklGTyAgMDAxMDAwMAorI2RlZmluZSBTX0lTVUlEICAwMDA0MDAwCisjZGVmaW5lIFNfSVNHSUQgIDAwMDIwMDAKKyNkZWZpbmUgU19JU1ZUWCAgMDAwMTAwMAorCisjZGVmaW5lIFNfSVNMTksobSkJKCgobSkgJiBTX0lGTVQpID09IFNfSUZMTkspCisjZGVmaW5lIFNfSVNSRUcobSkJKCgobSkgJiBTX0lGTVQpID09IFNfSUZSRUcpCisjZGVmaW5lIFNfSVNESVIobSkJKCgobSkgJiBTX0lGTVQpID09IFNfSUZESVIpCisjZGVmaW5lIFNfSVNDSFIobSkJKCgobSkgJiBTX0lGTVQpID09IFNfSUZDSFIpCisjZGVmaW5lIFNfSVNCTEsobSkJKCgobSkgJiBTX0lGTVQpID09IFNfSUZCTEspCisjZGVmaW5lIFNfSVNGSUZPKG0pCSgoKG0pICYgU19JRk1UKSA9PSBTX0lGSUZPKQorI2RlZmluZSBTX0lTU09DSyhtKQkoKChtKSAmIFNfSUZNVCkgPT0gU19JRlNPQ0spCisKKyNkZWZpbmUgU19JUldYVSAwMDcwMAorI2RlZmluZSBTX0lSVVNSIDAwNDAwCisjZGVmaW5lIFNfSVdVU1IgMDAyMDAKKyNkZWZpbmUgU19JWFVTUiAwMDEwMAorCisjZGVmaW5lIFNfSVJXWEcgMDAwNzAKKyNkZWZpbmUgU19JUkdSUCAwMDA0MAorI2RlZmluZSBTX0lXR1JQIDAwMDIwCisjZGVmaW5lIFNfSVhHUlAgMDAwMTAKKworI2RlZmluZSBTX0lSV1hPIDAwMDA3CisjZGVmaW5lIFNfSVJPVEggMDAwMDQKKyNkZWZpbmUgU19JV09USCAwMDAwMgorI2RlZmluZSBTX0lYT1RIIDAwMDAxCisKKyNlbmRpZgorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3N0ZGRlZi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3N0ZGRlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMmNlMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvc3RkZGVmLmgKQEAgLTAsMCArMSwxNCBAQAorI2lmbmRlZiBfTElOVVhfU1REREVGX0gKKyNkZWZpbmUgX0xJTlVYX1NURERFRl9ICisKKworCisjdW5kZWYgTlVMTAorI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjZGVmaW5lIE5VTEwgMAorI2Vsc2UKKyNkZWZpbmUgTlVMTCAoKHZvaWQgKikwKQorI2VuZGlmCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdlZDg0NAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zdHJpbmcuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX0xJTlVYX1NUUklOR19IXworI2RlZmluZSBfTElOVVhfU1RSSU5HX0hfCisKKy8qIFdlIGRvbid0IHdhbnQgc3RyaW5ncy5oIHN0dWZmIGJlaW5nIHVzZWQgYnkgdXNlciBzdHVmZiBieSBhY2NpZGVudCAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYgLyogX0xJTlVYX1NUUklOR19IXyAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3N1bnJwYy9kZWJ1Zy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3N1bnJwYy9kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYWQzMTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvc3VucnBjL2RlYnVnLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvbGludXgvc3VucnBjL2RlYnVnLmgKKyAqCisgKiBEZWJ1Z2dpbmcgc3VwcG9ydCBmb3Igc3VucnBjIG1vZHVsZQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiwgT2xhZiBLaXJjaCA8b2tpckBtb25hZC5zd2IuZGU+CisgKi8KKworI2lmbmRlZiBfTElOVVhfU1VOUlBDX0RFQlVHX0hfCisjZGVmaW5lIF9MSU5VWF9TVU5SUENfREVCVUdfSF8KKworLyoKKyAqIFJQQyBkZWJ1ZyBmYWNpbGl0aWVzCisgKi8KKyNkZWZpbmUgUlBDREJHX1hQUlQJCTB4MDAwMQorI2RlZmluZSBSUENEQkdfQ0FMTAkJMHgwMDAyCisjZGVmaW5lIFJQQ0RCR19ERUJVRwkJMHgwMDA0CisjZGVmaW5lIFJQQ0RCR19ORlMJCTB4MDAwOAorI2RlZmluZSBSUENEQkdfQVVUSAkJMHgwMDEwCisjZGVmaW5lIFJQQ0RCR19CSU5ECQkweDAwMjAKKyNkZWZpbmUgUlBDREJHX1NDSEVECQkweDAwNDAKKyNkZWZpbmUgUlBDREJHX1RSQU5TCQkweDAwODAKKyNkZWZpbmUgUlBDREJHX1NWQ1hQUlQJCTB4MDEwMAorI2RlZmluZSBSUENEQkdfU1ZDRFNQCQkweDAyMDAKKyNkZWZpbmUgUlBDREJHX01JU0MJCTB4MDQwMAorI2RlZmluZSBSUENEQkdfQ0FDSEUJCTB4MDgwMAorI2RlZmluZSBSUENEQkdfQUxMCQkweDdmZmYKKworCisvKgorICogRGVjbGFyYXRpb25zIGZvciB0aGUgc3lzY3RsIGRlYnVnIGludGVyZmFjZSwgd2hpY2ggYWxsb3dzIHRvIHJlYWQgb3IKKyAqIGNoYW5nZSB0aGUgZGVidWcgZmxhZ3MgZm9yIHJwYywgbmZzLCBuZnNkLCBhbmQgbG9ja2QuIFNpbmNlIHRoZSBzdW5ycGMKKyAqIG1vZHVsZSBjdXJyZW50bHkgcmVnaXN0ZXJzIGl0cyBzeXNjdGwgdGFibGUgZHluYW1pY2FsbHksIHRoZSBzeXNjdGwgcGF0aAorICogZm9yIG1vZHVsZSBGT08gaXMgPENUTF9TVU5SUEMsIENUTF9GT09ERUJVRz4uCisgKi8KKworZW51bSB7CisJQ1RMX1JQQ0RFQlVHID0gMSwKKwlDVExfTkZTREVCVUcsCisJQ1RMX05GU0RERUJVRywKKwlDVExfTkxNREVCVUcsCisJQ1RMX1NMT1RUQUJMRV9VRFAsCisJQ1RMX1NMT1RUQUJMRV9UQ1AsCisJQ1RMX01JTl9SRVNWUE9SVCwKKwlDVExfTUFYX1JFU1ZQT1JULAorfTsKKworI2VuZGlmIC8qIF9MSU5VWF9TVU5SUENfREVCVUdfSF8gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zdXNwZW5kX2lvY3Rscy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3N1c3BlbmRfaW9jdGxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIzMDM4MgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zdXNwZW5kX2lvY3Rscy5oCkBAIC0wLDAgKzEsMzMgQEAKKyNpZm5kZWYgX0xJTlVYX1NVU1BFTkRfSU9DVExTX0gKKyNkZWZpbmUgX0xJTlVYX1NVU1BFTkRfSU9DVExTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisvKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBwYXNzIHRoZSB2YWx1ZXMgbmVlZGVkIGZvciB0aGUgaWRlbnRpZmljYXRpb24KKyAqIG9mIHRoZSByZXN1bWUgc3dhcCBhcmVhIGZyb20gYSB1c2VyIHNwYWNlIHRvIHRoZSBrZXJuZWwgdmlhIHRoZQorICogU05BUFNIT1RfU0VUX1NXQVBfQVJFQSBpb2N0bAorICovCitzdHJ1Y3QgcmVzdW1lX3N3YXBfYXJlYSB7CisJX19rZXJuZWxfbG9mZl90IG9mZnNldDsKKwlfX3UzMiBkZXY7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFNOQVBTSE9UX0lPQ19NQUdJQwknMycKKyNkZWZpbmUgU05BUFNIT1RfRlJFRVpFCQkJX0lPKFNOQVBTSE9UX0lPQ19NQUdJQywgMSkKKyNkZWZpbmUgU05BUFNIT1RfVU5GUkVFWkUJCV9JTyhTTkFQU0hPVF9JT0NfTUFHSUMsIDIpCisjZGVmaW5lIFNOQVBTSE9UX0FUT01JQ19SRVNUT1JFCQlfSU8oU05BUFNIT1RfSU9DX01BR0lDLCA0KQorI2RlZmluZSBTTkFQU0hPVF9GUkVFCQkJX0lPKFNOQVBTSE9UX0lPQ19NQUdJQywgNSkKKyNkZWZpbmUgU05BUFNIT1RfRlJFRV9TV0FQX1BBR0VTCV9JTyhTTkFQU0hPVF9JT0NfTUFHSUMsIDkpCisjZGVmaW5lIFNOQVBTSE9UX1MyUkFNCQkJX0lPKFNOQVBTSE9UX0lPQ19NQUdJQywgMTEpCisjZGVmaW5lIFNOQVBTSE9UX1NFVF9TV0FQX0FSRUEJCV9JT1coU05BUFNIT1RfSU9DX01BR0lDLCAxMywgXAorCQkJCQkJCXN0cnVjdCByZXN1bWVfc3dhcF9hcmVhKQorI2RlZmluZSBTTkFQU0hPVF9HRVRfSU1BR0VfU0laRQkJX0lPUihTTkFQU0hPVF9JT0NfTUFHSUMsIDE0LCBfX2tlcm5lbF9sb2ZmX3QpCisjZGVmaW5lIFNOQVBTSE9UX1BMQVRGT1JNX1NVUFBPUlQJX0lPKFNOQVBTSE9UX0lPQ19NQUdJQywgMTUpCisjZGVmaW5lIFNOQVBTSE9UX1BPV0VSX09GRgkJX0lPKFNOQVBTSE9UX0lPQ19NQUdJQywgMTYpCisjZGVmaW5lIFNOQVBTSE9UX0NSRUFURV9JTUFHRQkJX0lPVyhTTkFQU0hPVF9JT0NfTUFHSUMsIDE3LCBpbnQpCisjZGVmaW5lIFNOQVBTSE9UX1BSRUZfSU1BR0VfU0laRQlfSU8oU05BUFNIT1RfSU9DX01BR0lDLCAxOCkKKyNkZWZpbmUgU05BUFNIT1RfQVZBSUxfU1dBUF9TSVpFCV9JT1IoU05BUFNIT1RfSU9DX01BR0lDLCAxOSwgX19rZXJuZWxfbG9mZl90KQorI2RlZmluZSBTTkFQU0hPVF9BTExPQ19TV0FQX1BBR0UJX0lPUihTTkFQU0hPVF9JT0NfTUFHSUMsIDIwLCBfX2tlcm5lbF9sb2ZmX3QpCisjZGVmaW5lIFNOQVBTSE9UX0lPQ19NQVhOUgkyMAorCisjZW5kaWYgLyogX0xJTlVYX1NVU1BFTkRfSU9DVExTX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC9zd2FiLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvc3dhYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNGFmZGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvc3dhYi5oCkBAIC0wLDAgKzEsMjgyIEBACisjaWZuZGVmIF9MSU5VWF9TV0FCX0gKKyNkZWZpbmUgX0xJTlVYX1NXQUJfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9zd2FiLmg+CisKKy8qCisgKiBjYXN0cyBhcmUgbmVjZXNzYXJ5IGZvciBjb25zdGFudHMsIGJlY2F1c2Ugd2UgbmV2ZXIga25vdyBob3cgZm9yIHN1cmUKKyAqIGhvdyBVL1VML1VMTCBtYXAgdG8gX191MTYsIF9fdTMyLCBfX3U2NC4gQXQgbGVhc3Qgbm90IGluIGEgcG9ydGFibGUgd2F5LgorICovCisjZGVmaW5lIF9fX2NvbnN0YW50X3N3YWIxNih4KSAoKF9fdTE2KSgJCQkJXAorCSgoKF9fdTE2KSh4KSAmIChfX3UxNikweDAwZmZVKSA8PCA4KSB8CQkJXAorCSgoKF9fdTE2KSh4KSAmIChfX3UxNikweGZmMDBVKSA+PiA4KSkpCisKKyNkZWZpbmUgX19fY29uc3RhbnRfc3dhYjMyKHgpICgoX191MzIpKAkJCQlcCisJKCgoX191MzIpKHgpICYgKF9fdTMyKTB4MDAwMDAwZmZVTCkgPDwgMjQpIHwJCVwKKwkoKChfX3UzMikoeCkgJiAoX191MzIpMHgwMDAwZmYwMFVMKSA8PCAgOCkgfAkJXAorCSgoKF9fdTMyKSh4KSAmIChfX3UzMikweDAwZmYwMDAwVUwpID4+ICA4KSB8CQlcCisJKCgoX191MzIpKHgpICYgKF9fdTMyKTB4ZmYwMDAwMDBVTCkgPj4gMjQpKSkKKworI2RlZmluZSBfX19jb25zdGFudF9zd2FiNjQoeCkgKChfX3U2NCkoCQkJCVwKKwkoKChfX3U2NCkoeCkgJiAoX191NjQpMHgwMDAwMDAwMDAwMDAwMGZmVUxMKSA8PCA1NikgfAlcCisJKCgoX191NjQpKHgpICYgKF9fdTY0KTB4MDAwMDAwMDAwMDAwZmYwMFVMTCkgPDwgNDApIHwJXAorCSgoKF9fdTY0KSh4KSAmIChfX3U2NCkweDAwMDAwMDAwMDBmZjAwMDBVTEwpIDw8IDI0KSB8CVwKKwkoKChfX3U2NCkoeCkgJiAoX191NjQpMHgwMDAwMDAwMGZmMDAwMDAwVUxMKSA8PCAgOCkgfAlcCisJKCgoX191NjQpKHgpICYgKF9fdTY0KTB4MDAwMDAwZmYwMDAwMDAwMFVMTCkgPj4gIDgpIHwJXAorCSgoKF9fdTY0KSh4KSAmIChfX3U2NCkweDAwMDBmZjAwMDAwMDAwMDBVTEwpID4+IDI0KSB8CVwKKwkoKChfX3U2NCkoeCkgJiAoX191NjQpMHgwMGZmMDAwMDAwMDAwMDAwVUxMKSA+PiA0MCkgfAlcCisJKCgoX191NjQpKHgpICYgKF9fdTY0KTB4ZmYwMDAwMDAwMDAwMDAwMFVMTCkgPj4gNTYpKSkKKworI2RlZmluZSBfX19jb25zdGFudF9zd2FodzMyKHgpICgoX191MzIpKAkJCVwKKwkoKChfX3UzMikoeCkgJiAoX191MzIpMHgwMDAwZmZmZlVMKSA8PCAxNikgfAkJXAorCSgoKF9fdTMyKSh4KSAmIChfX3UzMikweGZmZmYwMDAwVUwpID4+IDE2KSkpCisKKyNkZWZpbmUgX19fY29uc3RhbnRfc3dhaGIzMih4KSAoKF9fdTMyKSgJCQlcCisJKCgoX191MzIpKHgpICYgKF9fdTMyKTB4MDBmZjAwZmZVTCkgPDwgOCkgfAkJXAorCSgoKF9fdTMyKSh4KSAmIChfX3UzMikweGZmMDBmZjAwVUwpID4+IDgpKSkKKworLyoKKyAqIEltcGxlbWVudCB0aGUgZm9sbG93aW5nIGFzIGlubGluZXMsIGJ1dCBkZWZpbmUgdGhlIGludGVyZmFjZSB1c2luZworICogbWFjcm9zIHRvIGFsbG93IGNvbnN0YW50IGZvbGRpbmcgd2hlbiBwb3NzaWJsZToKKyAqIF9fX3N3YWIxNiwgX19fc3dhYjMyLCBfX19zd2FiNjQsIF9fX3N3YWh3MzIsIF9fX3N3YWhiMzIKKyAqLworCitzdGF0aWMgX19pbmxpbmVfXyBfX3UxNiBfX2Zzd2FiMTYoX191MTYgdmFsKQoreworI2lmZGVmIF9fYXJjaF9zd2FiMTYKKwlyZXR1cm4gX19hcmNoX3N3YWIxNih2YWwpOworI2Vsc2UKKwlyZXR1cm4gX19fY29uc3RhbnRfc3dhYjE2KHZhbCk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gX191MzIgX19mc3dhYjMyKF9fdTMyIHZhbCkKK3sKKyNpZmRlZiBfX2FyY2hfc3dhYjMyCisJcmV0dXJuIF9fYXJjaF9zd2FiMzIodmFsKTsKKyNlbHNlCisJcmV0dXJuIF9fX2NvbnN0YW50X3N3YWIzMih2YWwpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fdTY0IF9fZnN3YWI2NChfX3U2NCB2YWwpCit7CisjaWZkZWYgX19hcmNoX3N3YWI2NAorCXJldHVybiBfX2FyY2hfc3dhYjY0KHZhbCk7CisjZWxpZiBkZWZpbmVkKF9fU1dBQl82NF9USFJVXzMyX18pCisJX191MzIgaCA9IHZhbCA+PiAzMjsKKwlfX3UzMiBsID0gdmFsICYgKCgxVUxMIDw8IDMyKSAtIDEpOworCXJldHVybiAoKChfX3U2NClfX2Zzd2FiMzIobCkpIDw8IDMyKSB8ICgoX191NjQpKF9fZnN3YWIzMihoKSkpOworI2Vsc2UKKwlyZXR1cm4gX19fY29uc3RhbnRfc3dhYjY0KHZhbCk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gX191MzIgX19mc3dhaHczMihfX3UzMiB2YWwpCit7CisjaWZkZWYgX19hcmNoX3N3YWh3MzIKKwlyZXR1cm4gX19hcmNoX3N3YWh3MzIodmFsKTsKKyNlbHNlCisJcmV0dXJuIF9fX2NvbnN0YW50X3N3YWh3MzIodmFsKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX3UzMiBfX2Zzd2FoYjMyKF9fdTMyIHZhbCkKK3sKKyNpZmRlZiBfX2FyY2hfc3dhaGIzMgorCXJldHVybiBfX2FyY2hfc3dhaGIzMih2YWwpOworI2Vsc2UKKwlyZXR1cm4gX19fY29uc3RhbnRfc3dhaGIzMih2YWwpOworI2VuZGlmCit9CisKKy8qKgorICogX19zd2FiMTYgLSByZXR1cm4gYSBieXRlc3dhcHBlZCAxNi1iaXQgdmFsdWUKKyAqIEB4OiB2YWx1ZSB0byBieXRlc3dhcAorICovCisjZGVmaW5lIF9fc3dhYjE2KHgpCQkJCVwKKwkoX19idWlsdGluX2NvbnN0YW50X3AoKF9fdTE2KSh4KSkgPwlcCisJX19fY29uc3RhbnRfc3dhYjE2KHgpIDoJCQlcCisJX19mc3dhYjE2KHgpKQorCisvKioKKyAqIF9fc3dhYjMyIC0gcmV0dXJuIGEgYnl0ZXN3YXBwZWQgMzItYml0IHZhbHVlCisgKiBAeDogdmFsdWUgdG8gYnl0ZXN3YXAKKyAqLworI2RlZmluZSBfX3N3YWIzMih4KQkJCQlcCisJKF9fYnVpbHRpbl9jb25zdGFudF9wKChfX3UzMikoeCkpID8JXAorCV9fX2NvbnN0YW50X3N3YWIzMih4KSA6CQkJXAorCV9fZnN3YWIzMih4KSkKKworLyoqCisgKiBfX3N3YWI2NCAtIHJldHVybiBhIGJ5dGVzd2FwcGVkIDY0LWJpdCB2YWx1ZQorICogQHg6IHZhbHVlIHRvIGJ5dGVzd2FwCisgKi8KKyNkZWZpbmUgX19zd2FiNjQoeCkJCQkJXAorCShfX2J1aWx0aW5fY29uc3RhbnRfcCgoX191NjQpKHgpKSA/CVwKKwlfX19jb25zdGFudF9zd2FiNjQoeCkgOgkJCVwKKwlfX2Zzd2FiNjQoeCkpCisKKy8qKgorICogX19zd2FodzMyIC0gcmV0dXJuIGEgd29yZC1zd2FwcGVkIDMyLWJpdCB2YWx1ZQorICogQHg6IHZhbHVlIHRvIHdvcmRzd2FwCisgKgorICogX19zd2FodzMyKDB4MTIzNDAwMDApIGlzIDB4MDAwMDEyMzQKKyAqLworI2RlZmluZSBfX3N3YWh3MzIoeCkJCQkJXAorCShfX2J1aWx0aW5fY29uc3RhbnRfcCgoX191MzIpKHgpKSA/CVwKKwlfX19jb25zdGFudF9zd2FodzMyKHgpIDoJCVwKKwlfX2Zzd2FodzMyKHgpKQorCisvKioKKyAqIF9fc3dhaGIzMiAtIHJldHVybiBhIGhpZ2ggYW5kIGxvdyBieXRlLXN3YXBwZWQgMzItYml0IHZhbHVlCisgKiBAeDogdmFsdWUgdG8gYnl0ZXN3YXAKKyAqCisgKiBfX3N3YWhiMzIoMHgxMjM0NTY3OCkgaXMgMHgzNDEyNzg1NgorICovCisjZGVmaW5lIF9fc3dhaGIzMih4KQkJCQlcCisJKF9fYnVpbHRpbl9jb25zdGFudF9wKChfX3UzMikoeCkpID8JXAorCV9fX2NvbnN0YW50X3N3YWhiMzIoeCkgOgkJXAorCV9fZnN3YWhiMzIoeCkpCisKKy8qKgorICogX19zd2FiMTZwIC0gcmV0dXJuIGEgYnl0ZXN3YXBwZWQgMTYtYml0IHZhbHVlIGZyb20gYSBwb2ludGVyCisgKiBAcDogcG9pbnRlciB0byBhIG5hdHVyYWxseS1hbGlnbmVkIDE2LWJpdCB2YWx1ZQorICovCitzdGF0aWMgX19pbmxpbmVfXyBfX3UxNiBfX3N3YWIxNnAoY29uc3QgX191MTYgKnApCit7CisjaWZkZWYgX19hcmNoX3N3YWIxNnAKKwlyZXR1cm4gX19hcmNoX3N3YWIxNnAocCk7CisjZWxzZQorCXJldHVybiBfX3N3YWIxNigqcCk7CisjZW5kaWYKK30KKworLyoqCisgKiBfX3N3YWIzMnAgLSByZXR1cm4gYSBieXRlc3dhcHBlZCAzMi1iaXQgdmFsdWUgZnJvbSBhIHBvaW50ZXIKKyAqIEBwOiBwb2ludGVyIHRvIGEgbmF0dXJhbGx5LWFsaWduZWQgMzItYml0IHZhbHVlCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIF9fdTMyIF9fc3dhYjMycChjb25zdCBfX3UzMiAqcCkKK3sKKyNpZmRlZiBfX2FyY2hfc3dhYjMycAorCXJldHVybiBfX2FyY2hfc3dhYjMycChwKTsKKyNlbHNlCisJcmV0dXJuIF9fc3dhYjMyKCpwKTsKKyNlbmRpZgorfQorCisvKioKKyAqIF9fc3dhYjY0cCAtIHJldHVybiBhIGJ5dGVzd2FwcGVkIDY0LWJpdCB2YWx1ZSBmcm9tIGEgcG9pbnRlcgorICogQHA6IHBvaW50ZXIgdG8gYSBuYXR1cmFsbHktYWxpZ25lZCA2NC1iaXQgdmFsdWUKKyAqLworc3RhdGljIF9faW5saW5lX18gX191NjQgX19zd2FiNjRwKGNvbnN0IF9fdTY0ICpwKQoreworI2lmZGVmIF9fYXJjaF9zd2FiNjRwCisJcmV0dXJuIF9fYXJjaF9zd2FiNjRwKHApOworI2Vsc2UKKwlyZXR1cm4gX19zd2FiNjQoKnApOworI2VuZGlmCit9CisKKy8qKgorICogX19zd2FodzMycCAtIHJldHVybiBhIHdvcmRzd2FwcGVkIDMyLWJpdCB2YWx1ZSBmcm9tIGEgcG9pbnRlcgorICogQHA6IHBvaW50ZXIgdG8gYSBuYXR1cmFsbHktYWxpZ25lZCAzMi1iaXQgdmFsdWUKKyAqCisgKiBTZWUgX19zd2FodzMyKCkgZm9yIGRldGFpbHMgb2Ygd29yZHN3YXBwaW5nLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBfX3UzMiBfX3N3YWh3MzJwKGNvbnN0IF9fdTMyICpwKQoreworI2lmZGVmIF9fYXJjaF9zd2FodzMycAorCXJldHVybiBfX2FyY2hfc3dhaHczMnAocCk7CisjZWxzZQorCXJldHVybiBfX3N3YWh3MzIoKnApOworI2VuZGlmCit9CisKKy8qKgorICogX19zd2FoYjMycCAtIHJldHVybiBhIGhpZ2ggYW5kIGxvdyBieXRlc3dhcHBlZCAzMi1iaXQgdmFsdWUgZnJvbSBhIHBvaW50ZXIKKyAqIEBwOiBwb2ludGVyIHRvIGEgbmF0dXJhbGx5LWFsaWduZWQgMzItYml0IHZhbHVlCisgKgorICogU2VlIF9fc3dhaGIzMigpIGZvciBkZXRhaWxzIG9mIGhpZ2gvbG93IGJ5dGVzd2FwcGluZy4KKyAqLworc3RhdGljIF9faW5saW5lX18gX191MzIgX19zd2FoYjMycChjb25zdCBfX3UzMiAqcCkKK3sKKyNpZmRlZiBfX2FyY2hfc3dhaGIzMnAKKwlyZXR1cm4gX19hcmNoX3N3YWhiMzJwKHApOworI2Vsc2UKKwlyZXR1cm4gX19zd2FoYjMyKCpwKTsKKyNlbmRpZgorfQorCisvKioKKyAqIF9fc3dhYjE2cyAtIGJ5dGVzd2FwIGEgMTYtYml0IHZhbHVlIGluLXBsYWNlCisgKiBAcDogcG9pbnRlciB0byBhIG5hdHVyYWxseS1hbGlnbmVkIDE2LWJpdCB2YWx1ZQorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fc3dhYjE2cyhfX3UxNiAqcCkKK3sKKyNpZmRlZiBfX2FyY2hfc3dhYjE2cworCV9fYXJjaF9zd2FiMTZzKHApOworI2Vsc2UKKwkqcCA9IF9fc3dhYjE2cChwKTsKKyNlbmRpZgorfQorLyoqCisgKiBfX3N3YWIzMnMgLSBieXRlc3dhcCBhIDMyLWJpdCB2YWx1ZSBpbi1wbGFjZQorICogQHA6IHBvaW50ZXIgdG8gYSBuYXR1cmFsbHktYWxpZ25lZCAzMi1iaXQgdmFsdWUKKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX3N3YWIzMnMoX191MzIgKnApCit7CisjaWZkZWYgX19hcmNoX3N3YWIzMnMKKwlfX2FyY2hfc3dhYjMycyhwKTsKKyNlbHNlCisJKnAgPSBfX3N3YWIzMnAocCk7CisjZW5kaWYKK30KKworLyoqCisgKiBfX3N3YWI2NHMgLSBieXRlc3dhcCBhIDY0LWJpdCB2YWx1ZSBpbi1wbGFjZQorICogQHA6IHBvaW50ZXIgdG8gYSBuYXR1cmFsbHktYWxpZ25lZCA2NC1iaXQgdmFsdWUKKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX3N3YWI2NHMoX191NjQgKnApCit7CisjaWZkZWYgX19hcmNoX3N3YWI2NHMKKwlfX2FyY2hfc3dhYjY0cyhwKTsKKyNlbHNlCisJKnAgPSBfX3N3YWI2NHAocCk7CisjZW5kaWYKK30KKworLyoqCisgKiBfX3N3YWh3MzJzIC0gd29yZHN3YXAgYSAzMi1iaXQgdmFsdWUgaW4tcGxhY2UKKyAqIEBwOiBwb2ludGVyIHRvIGEgbmF0dXJhbGx5LWFsaWduZWQgMzItYml0IHZhbHVlCisgKgorICogU2VlIF9fc3dhaHczMigpIGZvciBkZXRhaWxzIG9mIHdvcmRzd2FwcGluZworICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fc3dhaHczMnMoX191MzIgKnApCit7CisjaWZkZWYgX19hcmNoX3N3YWh3MzJzCisJX19hcmNoX3N3YWh3MzJzKHApOworI2Vsc2UKKwkqcCA9IF9fc3dhaHczMnAocCk7CisjZW5kaWYKK30KKworLyoqCisgKiBfX3N3YWhiMzJzIC0gaGlnaCBhbmQgbG93IGJ5dGVzd2FwIGEgMzItYml0IHZhbHVlIGluLXBsYWNlCisgKiBAcDogcG9pbnRlciB0byBhIG5hdHVyYWxseS1hbGlnbmVkIDMyLWJpdCB2YWx1ZQorICoKKyAqIFNlZSBfX3N3YWhiMzIoKSBmb3IgZGV0YWlscyBvZiBoaWdoIGFuZCBsb3cgYnl0ZSBzd2FwcGluZworICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fc3dhaGIzMnMoX191MzIgKnApCit7CisjaWZkZWYgX19hcmNoX3N3YWhiMzJzCisJX19hcmNoX3N3YWhiMzJzKHApOworI2Vsc2UKKwkqcCA9IF9fc3dhaGIzMnAocCk7CisjZW5kaWYKK30KKworCisjZW5kaWYgLyogX0xJTlVYX1NXQUJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3N5bmNsaW5rLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvc3luY2xpbmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODE4NDM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3N5bmNsaW5rLmgKQEAgLTAsMCArMSwzMDAgQEAKKy8qCisgKiBTeW5jTGluayBNdWx0aXByb3RvY29sIFNlcmlhbCBBZGFwdGVyIERyaXZlcgorICoKKyAqICRJZDogc3luY2xpbmsuaCx2IDMuMTQgMjAwNi8wNy8xNyAyMDoxNTo0MyBwYXVsa2YgRXhwICQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBieSBNaWNyb2dhdGUgQ29ycG9yYXRpb24KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUgaXMgcGVybWl0dGVkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSAoR1BMKQorICovCisKKyNpZm5kZWYgX1NZTkNMSU5LX0hfCisjZGVmaW5lIF9TWU5DTElOS19IXworI2RlZmluZSBTWU5DTElOS19IX1ZFUlNJT04gMy42CisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIEJJVDAJMHgwMDAxCisjZGVmaW5lIEJJVDEJMHgwMDAyCisjZGVmaW5lIEJJVDIJMHgwMDA0CisjZGVmaW5lIEJJVDMJMHgwMDA4CisjZGVmaW5lIEJJVDQJMHgwMDEwCisjZGVmaW5lIEJJVDUJMHgwMDIwCisjZGVmaW5lIEJJVDYJMHgwMDQwCisjZGVmaW5lIEJJVDcJMHgwMDgwCisjZGVmaW5lIEJJVDgJMHgwMTAwCisjZGVmaW5lIEJJVDkJMHgwMjAwCisjZGVmaW5lIEJJVDEwCTB4MDQwMAorI2RlZmluZSBCSVQxMQkweDA4MDAKKyNkZWZpbmUgQklUMTIJMHgxMDAwCisjZGVmaW5lIEJJVDEzCTB4MjAwMAorI2RlZmluZSBCSVQxNAkweDQwMDAKKyNkZWZpbmUgQklUMTUJMHg4MDAwCisjZGVmaW5lIEJJVDE2CTB4MDAwMTAwMDAKKyNkZWZpbmUgQklUMTcJMHgwMDAyMDAwMAorI2RlZmluZSBCSVQxOAkweDAwMDQwMDAwCisjZGVmaW5lIEJJVDE5CTB4MDAwODAwMDAKKyNkZWZpbmUgQklUMjAJMHgwMDEwMDAwMAorI2RlZmluZSBCSVQyMQkweDAwMjAwMDAwCisjZGVmaW5lIEJJVDIyCTB4MDA0MDAwMDAKKyNkZWZpbmUgQklUMjMJMHgwMDgwMDAwMAorI2RlZmluZSBCSVQyNAkweDAxMDAwMDAwCisjZGVmaW5lIEJJVDI1CTB4MDIwMDAwMDAKKyNkZWZpbmUgQklUMjYJMHgwNDAwMDAwMAorI2RlZmluZSBCSVQyNwkweDA4MDAwMDAwCisjZGVmaW5lIEJJVDI4CTB4MTAwMDAwMDAKKyNkZWZpbmUgQklUMjkJMHgyMDAwMDAwMAorI2RlZmluZSBCSVQzMAkweDQwMDAwMDAwCisjZGVmaW5lIEJJVDMxCTB4ODAwMDAwMDAKKworCisjZGVmaW5lIEhETENfTUFYX0ZSQU1FX1NJWkUJNjU1MzUKKyNkZWZpbmUgTUFYX0FTWU5DX1RSQU5TTUlUCTQwOTYKKyNkZWZpbmUgTUFYX0FTWU5DX0JVRkZFUl9TSVpFCTQwOTYKKworI2RlZmluZSBBU1lOQ19QQVJJVFlfTk9ORQkJMAorI2RlZmluZSBBU1lOQ19QQVJJVFlfRVZFTgkJMQorI2RlZmluZSBBU1lOQ19QQVJJVFlfT0RECQkyCisjZGVmaW5lIEFTWU5DX1BBUklUWV9TUEFDRQkJMworCisjZGVmaW5lIEhETENfRkxBR19VTkRFUlJVTl9BQk9SVDcJMHgwMDAwCisjZGVmaW5lIEhETENfRkxBR19VTkRFUlJVTl9BQk9SVDE1CTB4MDAwMQorI2RlZmluZSBIRExDX0ZMQUdfVU5ERVJSVU5fRkxBRwkJMHgwMDAyCisjZGVmaW5lIEhETENfRkxBR19VTkRFUlJVTl9DUkMJCTB4MDAwNAorI2RlZmluZSBIRExDX0ZMQUdfU0hBUkVfWkVSTwkJMHgwMDEwCisjZGVmaW5lIEhETENfRkxBR19BVVRPX0NUUwkJMHgwMDIwCisjZGVmaW5lIEhETENfRkxBR19BVVRPX0RDRAkJMHgwMDQwCisjZGVmaW5lIEhETENfRkxBR19BVVRPX1JUUwkJMHgwMDgwCisjZGVmaW5lIEhETENfRkxBR19SWENfRFBMTAkJMHgwMTAwCisjZGVmaW5lIEhETENfRkxBR19SWENfQlJHCQkweDAyMDAKKyNkZWZpbmUgSERMQ19GTEFHX1JYQ19UWENQSU4JCTB4ODAwMAorI2RlZmluZSBIRExDX0ZMQUdfUlhDX1JYQ1BJTgkJMHgwMDAwCisjZGVmaW5lIEhETENfRkxBR19UWENfRFBMTAkJMHgwNDAwCisjZGVmaW5lIEhETENfRkxBR19UWENfQlJHCQkweDA4MDAKKyNkZWZpbmUgSERMQ19GTEFHX1RYQ19UWENQSU4JCTB4MDAwMAorI2RlZmluZSBIRExDX0ZMQUdfVFhDX1JYQ1BJTgkJMHgwMDA4CisjZGVmaW5lIEhETENfRkxBR19EUExMX0RJVjgJCTB4MTAwMAorI2RlZmluZSBIRExDX0ZMQUdfRFBMTF9ESVYxNgkJMHgyMDAwCisjZGVmaW5lIEhETENfRkxBR19EUExMX0RJVjMyCQkweDAwMDAKKyNkZWZpbmUgSERMQ19GTEFHX0hETENfTE9PUE1PREUJCTB4NDAwMAorCisjZGVmaW5lIEhETENfQ1JDX05PTkUJCQkwCisjZGVmaW5lIEhETENfQ1JDXzE2X0NDSVRUCQkxCisjZGVmaW5lIEhETENfQ1JDXzMyX0NDSVRUCQkyCisjZGVmaW5lIEhETENfQ1JDX01BU0sJCQkweDAwZmYKKyNkZWZpbmUgSERMQ19DUkNfUkVUVVJOX0VYCQkweDgwMDAKKworI2RlZmluZSBSWF9PSwkJCQkwCisjZGVmaW5lIFJYX0NSQ19FUlJPUgkJCTEKKworI2RlZmluZSBIRExDX1RYSURMRV9GTEFHUwkJMAorI2RlZmluZSBIRExDX1RYSURMRV9BTFRfWkVST1NfT05FUwkxCisjZGVmaW5lIEhETENfVFhJRExFX1pFUk9TCQkyCisjZGVmaW5lIEhETENfVFhJRExFX09ORVMJCTMKKyNkZWZpbmUgSERMQ19UWElETEVfQUxUX01BUktfU1BBQ0UJNAorI2RlZmluZSBIRExDX1RYSURMRV9TUEFDRQkJNQorI2RlZmluZSBIRExDX1RYSURMRV9NQVJLCQk2CisjZGVmaW5lIEhETENfVFhJRExFX0NVU1RPTV84ICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBIRExDX1RYSURMRV9DVVNUT01fMTYgICAgICAgICAgIDB4MjAwMDAwMDAKKworI2RlZmluZSBIRExDX0VOQ09ESU5HX05SWgkJCTAKKyNkZWZpbmUgSERMQ19FTkNPRElOR19OUlpCCQkJMQorI2RlZmluZSBIRExDX0VOQ09ESU5HX05SWklfTUFSSwkJCTIKKyNkZWZpbmUgSERMQ19FTkNPRElOR19OUlpJX1NQQUNFCQkzCisjZGVmaW5lIEhETENfRU5DT0RJTkdfTlJaSQkJCUhETENfRU5DT0RJTkdfTlJaSV9TUEFDRQorI2RlZmluZSBIRExDX0VOQ09ESU5HX0JJUEhBU0VfTUFSSwkJNAorI2RlZmluZSBIRExDX0VOQ09ESU5HX0JJUEhBU0VfU1BBQ0UJCTUKKyNkZWZpbmUgSERMQ19FTkNPRElOR19CSVBIQVNFX0xFVkVMCQk2CisjZGVmaW5lIEhETENfRU5DT0RJTkdfRElGRl9CSVBIQVNFX0xFVkVMCTcKKworI2RlZmluZSBIRExDX1BSRUFNQkxFX0xFTkdUSF84QklUUwkwCisjZGVmaW5lIEhETENfUFJFQU1CTEVfTEVOR1RIXzE2QklUUwkxCisjZGVmaW5lIEhETENfUFJFQU1CTEVfTEVOR1RIXzMyQklUUwkyCisjZGVmaW5lIEhETENfUFJFQU1CTEVfTEVOR1RIXzY0QklUUwkzCisKKyNkZWZpbmUgSERMQ19QUkVBTUJMRV9QQVRURVJOX05PTkUJMAorI2RlZmluZSBIRExDX1BSRUFNQkxFX1BBVFRFUk5fWkVST1MJMQorI2RlZmluZSBIRExDX1BSRUFNQkxFX1BBVFRFUk5fRkxBR1MJMgorI2RlZmluZSBIRExDX1BSRUFNQkxFX1BBVFRFUk5fMTAJMworI2RlZmluZSBIRExDX1BSRUFNQkxFX1BBVFRFUk5fMDEJNAorI2RlZmluZSBIRExDX1BSRUFNQkxFX1BBVFRFUk5fT05FUwk1CisKKyNkZWZpbmUgTUdTTF9NT0RFX0FTWU5DCQkxCisjZGVmaW5lIE1HU0xfTU9ERV9IRExDCQkyCisjZGVmaW5lIE1HU0xfTU9ERV9NT05PU1lOQwkzCisjZGVmaW5lIE1HU0xfTU9ERV9CSVNZTkMJNAorI2RlZmluZSBNR1NMX01PREVfUkFXCQk2CisjZGVmaW5lIE1HU0xfTU9ERV9CQVNFX0NMT0NLICAgIDcKKyNkZWZpbmUgTUdTTF9NT0RFX1hTWU5DICAgICAgICAgOAorCisjZGVmaW5lIE1HU0xfQlVTX1RZUEVfSVNBCTEKKyNkZWZpbmUgTUdTTF9CVVNfVFlQRV9FSVNBCTIKKyNkZWZpbmUgTUdTTF9CVVNfVFlQRV9QQ0kJNQorCisjZGVmaW5lIE1HU0xfSU5URVJGQUNFX01BU0sgICAgIDB4ZgorI2RlZmluZSBNR1NMX0lOVEVSRkFDRV9ESVNBQkxFICAwCisjZGVmaW5lIE1HU0xfSU5URVJGQUNFX1JTMjMyICAgIDEKKyNkZWZpbmUgTUdTTF9JTlRFUkZBQ0VfVjM1ICAgICAgMgorI2RlZmluZSBNR1NMX0lOVEVSRkFDRV9SUzQyMiAgICAzCisjZGVmaW5lIE1HU0xfSU5URVJGQUNFX1JUU19FTiAgIDB4MTAKKyNkZWZpbmUgTUdTTF9JTlRFUkZBQ0VfTEwgICAgICAgMHgyMAorI2RlZmluZSBNR1NMX0lOVEVSRkFDRV9STCAgICAgICAweDQwCisjZGVmaW5lIE1HU0xfSU5URVJGQUNFX01TQl9GSVJTVCAweDgwCisKK3R5cGVkZWYgc3RydWN0IF9NR1NMX1BBUkFNUworeworCS8qIENvbW1vbiAqLworCisJdW5zaWduZWQgbG9uZwltb2RlOwkJLyogQXN5bmNocm9ub3VzIG9yIEhETEMgKi8KKwl1bnNpZ25lZCBjaGFyCWxvb3BiYWNrOwkvKiBpbnRlcm5hbCBsb29wYmFjayBtb2RlICovCisKKwkvKiBIRExDIE9ubHkgKi8KKworCXVuc2lnbmVkIHNob3J0CWZsYWdzOworCXVuc2lnbmVkIGNoYXIJZW5jb2Rpbmc7CS8qIE5SWiwgTlJaSSwgZXRjLiAqLworCXVuc2lnbmVkIGxvbmcJY2xvY2tfc3BlZWQ7CS8qIGV4dGVybmFsIGNsb2NrIHNwZWVkIGluIGJpdHMgcGVyIHNlY29uZCAqLworCXVuc2lnbmVkIGNoYXIJYWRkcl9maWx0ZXI7CS8qIHJlY2VpdmUgSERMQyBhZGRyZXNzIGZpbHRlciwgMHhGRiA9IGRpc2FibGUgKi8KKwl1bnNpZ25lZCBzaG9ydAljcmNfdHlwZTsJLyogTm9uZSwgQ1JDMTYtQ0NJVFQsIG9yIENSQzMyLUNDSVRUICovCisJdW5zaWduZWQgY2hhcglwcmVhbWJsZV9sZW5ndGg7CisJdW5zaWduZWQgY2hhcglwcmVhbWJsZTsKKworCS8qIEFzeW5jIE9ubHkgKi8KKworCXVuc2lnbmVkIGxvbmcJZGF0YV9yYXRlOwkvKiBiaXRzIHBlciBzZWNvbmQgKi8KKwl1bnNpZ25lZCBjaGFyCWRhdGFfYml0czsJLyogNyBvciA4IGRhdGEgYml0cyAqLworCXVuc2lnbmVkIGNoYXIJc3RvcF9iaXRzOwkvKiAxIG9yIDIgc3RvcCBiaXRzICovCisJdW5zaWduZWQgY2hhcglwYXJpdHk7CQkvKiBub25lLCBldmVuLCBvciBvZGQgKi8KKworfSBNR1NMX1BBUkFNUywgKlBNR1NMX1BBUkFNUzsKKworI2RlZmluZSBNSUNST0dBVEVfVkVORE9SX0lEIDB4MTNjMAorI2RlZmluZSBTWU5DTElOS19ERVZJQ0VfSUQgMHgwMDEwCisjZGVmaW5lIE1HU0NDX0RFVklDRV9JRCAweDAwMjAKKyNkZWZpbmUgU1lOQ0xJTktfU0NBX0RFVklDRV9JRCAweDAwMzAKKyNkZWZpbmUgU1lOQ0xJTktfR1RfREVWSUNFX0lEIDB4MDA3MAorI2RlZmluZSBTWU5DTElOS19HVDRfREVWSUNFX0lEIDB4MDA4MAorI2RlZmluZSBTWU5DTElOS19BQ19ERVZJQ0VfSUQgIDB4MDA5MAorI2RlZmluZSBTWU5DTElOS19HVDJfREVWSUNFX0lEIDB4MDBBMAorI2RlZmluZSBNR1NMX01BWF9TRVJJQUxfTlVNQkVSIDMwCisKKy8qCisqKiBkZXZpY2UgZGlhZ25vc3RpY3Mgc3RhdHVzCisqLworCisjZGVmaW5lIERpYWdTdGF0dXNfT0sJCQkJMAorI2RlZmluZSBEaWFnU3RhdHVzX0FkZHJlc3NGYWlsdXJlCQkxCisjZGVmaW5lIERpYWdTdGF0dXNfQWRkcmVzc0NvbmZsaWN0CQkyCisjZGVmaW5lIERpYWdTdGF0dXNfSXJxRmFpbHVyZQkJCTMKKyNkZWZpbmUgRGlhZ1N0YXR1c19JcnFDb25mbGljdAkJCTQKKyNkZWZpbmUgRGlhZ1N0YXR1c19EbWFGYWlsdXJlCQkJNQorI2RlZmluZSBEaWFnU3RhdHVzX0RtYUNvbmZsaWN0CQkJNgorI2RlZmluZSBEaWFnU3RhdHVzX1BjaUFkYXB0ZXJOb3RGb3VuZAkJNworI2RlZmluZSBEaWFnU3RhdHVzX0NhbnRBc3NpZ25QY2lSZXNvdXJjZXMJOAorI2RlZmluZSBEaWFnU3RhdHVzX0NhbnRBc3NpZ25QY2lNZW1BZGRyCQk5CisjZGVmaW5lIERpYWdTdGF0dXNfQ2FudEFzc2lnblBjaUlvQWRkcgkJMTAKKyNkZWZpbmUgRGlhZ1N0YXR1c19DYW50QXNzaWduUGNpSXJxCQkxMQorI2RlZmluZSBEaWFnU3RhdHVzX01lbW9yeUVycm9yCQkJMTIKKworI2RlZmluZSBTZXJpYWxTaWduYWxfRENEICAgICAgICAgICAgMHgwMSAgICAgLyogRGF0YSBDYXJyaWVyIERldGVjdCAqLworI2RlZmluZSBTZXJpYWxTaWduYWxfVFhEICAgICAgICAgICAgMHgwMiAgICAgLyogVHJhbnNtaXQgRGF0YSAqLworI2RlZmluZSBTZXJpYWxTaWduYWxfUkkgICAgICAgICAgICAgMHgwNCAgICAgLyogUmluZyBJbmRpY2F0b3IgKi8KKyNkZWZpbmUgU2VyaWFsU2lnbmFsX1JYRCAgICAgICAgICAgIDB4MDggICAgIC8qIFJlY2VpdmUgRGF0YSAqLworI2RlZmluZSBTZXJpYWxTaWduYWxfQ1RTICAgICAgICAgICAgMHgxMCAgICAgLyogQ2xlYXIgdG8gU2VuZCAqLworI2RlZmluZSBTZXJpYWxTaWduYWxfUlRTICAgICAgICAgICAgMHgyMCAgICAgLyogUmVxdWVzdCB0byBTZW5kICovCisjZGVmaW5lIFNlcmlhbFNpZ25hbF9EU1IgICAgICAgICAgICAweDQwICAgICAvKiBEYXRhIFNldCBSZWFkeSAqLworI2RlZmluZSBTZXJpYWxTaWduYWxfRFRSICAgICAgICAgICAgMHg4MCAgICAgLyogRGF0YSBUZXJtaW5hbCBSZWFkeSAqLworCisKKy8qCisgKiBDb3VudGVycyBvZiB0aGUgaW5wdXQgbGluZXMgKENUUywgRFNSLCBSSSwgQ0QpIGludGVycnVwdHMKKyAqLworc3RydWN0IG1nc2xfaWNvdW50IHsKKwlfX3UzMgljdHMsIGRzciwgcm5nLCBkY2QsIHR4LCByeDsKKwlfX3UzMglmcmFtZSwgcGFyaXR5LCBvdmVycnVuLCBicms7CisJX191MzIJYnVmX292ZXJydW47CisJX191MzIJdHhvazsKKwlfX3UzMgl0eHVuZGVyOworCV9fdTMyCXR4YWJvcnQ7CisJX191MzIJdHh0aW1lb3V0OworCV9fdTMyCXJ4c2hvcnQ7CisJX191MzIJcnhsb25nOworCV9fdTMyCXJ4YWJvcnQ7CisJX191MzIJcnhvdmVyOworCV9fdTMyCXJ4Y3JjOworCV9fdTMyCXJ4b2s7CisJX191MzIJZXhpdGh1bnQ7CisJX191MzIJcnhpZGxlOworfTsKKworc3RydWN0IGdwaW9fZGVzYyB7CisJX191MzIgc3RhdGU7CisJX191MzIgc21hc2s7CisJX191MzIgZGlyOworCV9fdTMyIGRtYXNrOworfTsKKworI2RlZmluZSBERUJVR19MRVZFTF9EQVRBCTEKKyNkZWZpbmUgREVCVUdfTEVWRUxfRVJST1IgCTIKKyNkZWZpbmUgREVCVUdfTEVWRUxfSU5GTyAgCTMKKyNkZWZpbmUgREVCVUdfTEVWRUxfQkggICAgCTQKKyNkZWZpbmUgREVCVUdfTEVWRUxfSVNSCQk1CisKKy8qCisqKiBFdmVudCBiaXQgZmxhZ3MgZm9yIHVzZSB3aXRoIE1nc2xXYWl0RXZlbnQKKyovCisKKyNkZWZpbmUgTWdzbEV2ZW50X0RzckFjdGl2ZQkweDAwMDEKKyNkZWZpbmUgTWdzbEV2ZW50X0RzckluYWN0aXZlCTB4MDAwMgorI2RlZmluZSBNZ3NsRXZlbnRfRHNyCQkweDAwMDMKKyNkZWZpbmUgTWdzbEV2ZW50X0N0c0FjdGl2ZQkweDAwMDQKKyNkZWZpbmUgTWdzbEV2ZW50X0N0c0luYWN0aXZlCTB4MDAwOAorI2RlZmluZSBNZ3NsRXZlbnRfQ3RzCQkweDAwMGMKKyNkZWZpbmUgTWdzbEV2ZW50X0RjZEFjdGl2ZQkweDAwMTAKKyNkZWZpbmUgTWdzbEV2ZW50X0RjZEluYWN0aXZlCTB4MDAyMAorI2RlZmluZSBNZ3NsRXZlbnRfRGNkCQkweDAwMzAKKyNkZWZpbmUgTWdzbEV2ZW50X1JpQWN0aXZlCTB4MDA0MAorI2RlZmluZSBNZ3NsRXZlbnRfUmlJbmFjdGl2ZQkweDAwODAKKyNkZWZpbmUgTWdzbEV2ZW50X1JpCQkweDAwYzAKKyNkZWZpbmUgTWdzbEV2ZW50X0V4aXRIdW50TW9kZQkweDAxMDAKKyNkZWZpbmUgTWdzbEV2ZW50X0lkbGVSZWNlaXZlZAkweDAyMDAKKworLyogUHJpdmF0ZSBJT0NUTCBjb2RlczoKKyAqCisgKiBNR1NMX0lPQ1NQQVJBTVMJc2V0IE1HU0xfUEFSQU1TIHN0cnVjdHVyZSB2YWx1ZXMKKyAqIE1HU0xfSU9DR1BBUkFNUwlnZXQgY3VycmVudCBNR1NMX1BBUkFNUyBzdHJ1Y3R1cmUgdmFsdWVzCisgKiBNR1NMX0lPQ1NUWElETEUJc2V0IGN1cnJlbnQgdHJhbnNtaXQgaWRsZSBtb2RlCisgKiBNR1NMX0lPQ0dUWElETEUJZ2V0IGN1cnJlbnQgdHJhbnNtaXQgaWRsZSBtb2RlCisgKiBNR1NMX0lPQ1RYRU5BQkxFCWVuYWJsZSBvciBkaXNhYmxlIHRyYW5zbWl0dGVyCisgKiBNR1NMX0lPQ1JYRU5BQkxFCWVuYWJsZSBvciBkaXNhYmxlIHJlY2VpdmVyCisgKiBNR1NMX0lPQ1RYQUJPUlQJYWJvcnQgdHJhbnNtaXR0aW5nIGZyYW1lIChIRExDKQorICogTUdTTF9JT0NHU1RBVFMJcmV0dXJuIGN1cnJlbnQgc3RhdGlzdGljcworICogTUdTTF9JT0NXQUlURVZFTlQJd2FpdCBmb3Igc3BlY2lmaWVkIGV2ZW50IHRvIG9jY3VyCisgKiBNR1NMX0xPT1BUWERPTkUJdHJhbnNtaXQgaW4gSERMQyBMb29wTW9kZSBkb25lCisgKiBNR1NMX0lPQ1NJRiAgICAgICAgICBzZXQgdGhlIHNlcmlhbCBpbnRlcmZhY2UgdHlwZQorICogTUdTTF9JT0NHSUYgICAgICAgICAgZ2V0IHRoZSBzZXJpYWwgaW50ZXJmYWNlIHR5cGUKKyAqLworI2RlZmluZSBNR1NMX01BR0lDX0lPQwknbScKKyNkZWZpbmUgTUdTTF9JT0NTUEFSQU1TCQlfSU9XKE1HU0xfTUFHSUNfSU9DLDAsc3RydWN0IF9NR1NMX1BBUkFNUykKKyNkZWZpbmUgTUdTTF9JT0NHUEFSQU1TCQlfSU9SKE1HU0xfTUFHSUNfSU9DLDEsc3RydWN0IF9NR1NMX1BBUkFNUykKKyNkZWZpbmUgTUdTTF9JT0NTVFhJRExFCQlfSU8oTUdTTF9NQUdJQ19JT0MsMikKKyNkZWZpbmUgTUdTTF9JT0NHVFhJRExFCQlfSU8oTUdTTF9NQUdJQ19JT0MsMykKKyNkZWZpbmUgTUdTTF9JT0NUWEVOQUJMRQlfSU8oTUdTTF9NQUdJQ19JT0MsNCkKKyNkZWZpbmUgTUdTTF9JT0NSWEVOQUJMRQlfSU8oTUdTTF9NQUdJQ19JT0MsNSkKKyNkZWZpbmUgTUdTTF9JT0NUWEFCT1JUCQlfSU8oTUdTTF9NQUdJQ19JT0MsNikKKyNkZWZpbmUgTUdTTF9JT0NHU1RBVFMJCV9JTyhNR1NMX01BR0lDX0lPQyw3KQorI2RlZmluZSBNR1NMX0lPQ1dBSVRFVkVOVAlfSU9XUihNR1NMX01BR0lDX0lPQyw4LGludCkKKyNkZWZpbmUgTUdTTF9JT0NDTFJNT0RDT1VOVAlfSU8oTUdTTF9NQUdJQ19JT0MsMTUpCisjZGVmaW5lIE1HU0xfSU9DTE9PUFRYRE9ORQlfSU8oTUdTTF9NQUdJQ19JT0MsOSkKKyNkZWZpbmUgTUdTTF9JT0NTSUYJCV9JTyhNR1NMX01BR0lDX0lPQywxMCkKKyNkZWZpbmUgTUdTTF9JT0NHSUYJCV9JTyhNR1NMX01BR0lDX0lPQywxMSkKKyNkZWZpbmUgTUdTTF9JT0NTR1BJTwkJX0lPVyhNR1NMX01BR0lDX0lPQywxNixzdHJ1Y3QgZ3Bpb19kZXNjKQorI2RlZmluZSBNR1NMX0lPQ0dHUElPCQlfSU9SKE1HU0xfTUFHSUNfSU9DLDE3LHN0cnVjdCBncGlvX2Rlc2MpCisjZGVmaW5lIE1HU0xfSU9DV0FJVEdQSU8JX0lPV1IoTUdTTF9NQUdJQ19JT0MsMTgsc3RydWN0IGdwaW9fZGVzYykKKyNkZWZpbmUgTUdTTF9JT0NTWFNZTkMJCV9JTyhNR1NMX01BR0lDX0lPQywgMTkpCisjZGVmaW5lIE1HU0xfSU9DR1hTWU5DCQlfSU8oTUdTTF9NQUdJQ19JT0MsIDIwKQorI2RlZmluZSBNR1NMX0lPQ1NYQ1RSTAkJX0lPKE1HU0xfTUFHSUNfSU9DLCAyMSkKKyNkZWZpbmUgTUdTTF9JT0NHWENUUkwJCV9JTyhNR1NMX01BR0lDX0lPQywgMjIpCisKKworI2VuZGlmIC8qIF9TWU5DTElOS19IXyAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NTk3NjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKQEAgLTAsMCArMSw5MzIgQEAKKy8qCisgKiBzeXNjdGwuaDogR2VuZXJhbCBsaW51eCBzeXN0ZW0gY29udHJvbCBpbnRlcmZhY2UKKyAqCisgKiBCZWd1biAyNCBNYXJjaCAxOTk1LCBTdGVwaGVuIFR3ZWVkaWUKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKgorICoqICBXQVJOSU5HOgorICoqICBUaGUgdmFsdWVzIGluIHRoaXMgZmlsZSBhcmUgZXhwb3J0ZWQgdG8gdXNlciBzcGFjZSB2aWEgCisgKiogIHRoZSBzeXNjdGwoKSBiaW5hcnkgaW50ZXJmYWNlLiAgRG8gKk5PVCogY2hhbmdlIHRoZQorICoqICBudW1iZXJpbmcgb2YgYW55IGV4aXN0aW5nIHZhbHVlcyBoZXJlLCBhbmQgZG8gbm90IGNoYW5nZQorICoqICBhbnkgbnVtYmVycyB3aXRoaW4gYW55IG9uZSBzZXQgb2YgdmFsdWVzLiAgSWYgeW91IGhhdmUgdG8KKyAqKiAgcmVkZWZpbmUgYW4gZXhpc3RpbmcgaW50ZXJmYWNlLCB1c2UgYSBuZXcgbnVtYmVyIGZvciBpdC4KKyAqKiAgVGhlIGtlcm5lbCB3aWxsIHRoZW4gcmV0dXJuIC1FTk9URElSIHRvIGFueSBhcHBsaWNhdGlvbiB1c2luZworICoqICB0aGUgb2xkIGJpbmFyeSBpbnRlcmZhY2UuCisgKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5kZWYgX0xJTlVYX1NZU0NUTF9ICisjZGVmaW5lIF9MSU5VWF9TWVNDVExfSAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworCitzdHJ1Y3QgY29tcGxldGlvbjsKKworI2RlZmluZSBDVExfTUFYTkFNRSAxMAkJLyogaG93IG1hbnkgcGF0aCBjb21wb25lbnRzIGRvIHdlIGFsbG93IGluIGEKKwkJCQkgICBjYWxsIHRvIHN5c2N0bD8gICBJbiBvdGhlciB3b3Jkcywgd2hhdCBpcworCQkJCSAgIHRoZSBsYXJnZXN0IGFjY2VwdGFibGUgdmFsdWUgZm9yIHRoZSBubGVuCisJCQkJICAgbWVtYmVyIG9mIGEgc3RydWN0IF9fc3lzY3RsX2FyZ3MgdG8gaGF2ZT8gKi8KKworc3RydWN0IF9fc3lzY3RsX2FyZ3MgeworCWludCAqbmFtZTsKKwlpbnQgbmxlbjsKKwl2b2lkICpvbGR2YWw7CisJc2l6ZV90ICpvbGRsZW5wOworCXZvaWQgKm5ld3ZhbDsKKwlzaXplX3QgbmV3bGVuOworCXVuc2lnbmVkIGxvbmcgX191bnVzZWRbNF07Cit9OworCisvKiBEZWZpbmUgc3lzY3RsIG5hbWVzIGZpcnN0ICovCisKKy8qIFRvcC1sZXZlbCBuYW1lczogKi8KKworZW51bQoreworCUNUTF9LRVJOPTEsCQkvKiBHZW5lcmFsIGtlcm5lbCBpbmZvIGFuZCBjb250cm9sICovCisJQ1RMX1ZNPTIsCQkvKiBWTSBtYW5hZ2VtZW50ICovCisJQ1RMX05FVD0zLAkJLyogTmV0d29ya2luZyAqLworCUNUTF9QUk9DPTQsCQkvKiByZW1vdmFsIGJyZWFrcyBzdHJhY2UoMSkgY29tcGlsYXRpb24gKi8KKwlDVExfRlM9NSwJCS8qIEZpbGVzeXN0ZW1zICovCisJQ1RMX0RFQlVHPTYsCQkvKiBEZWJ1Z2dpbmcgKi8KKwlDVExfREVWPTcsCQkvKiBEZXZpY2VzICovCisJQ1RMX0JVUz04LAkJLyogQnVzc2VzICovCisJQ1RMX0FCST05LAkJLyogQmluYXJ5IGVtdWxhdGlvbiAqLworCUNUTF9DUFU9MTAsCQkvKiBDUFUgc3R1ZmYgKHNwZWVkIHNjYWxpbmcsIGV0YykgKi8KKwlDVExfQVJMQU49MjU0LAkJLyogYXJsYW4gd2lyZWxlc3MgZHJpdmVyICovCisJQ1RMX1MzOTBEQkY9NTY3NywJLyogczM5MCBkZWJ1ZyAqLworCUNUTF9TVU5SUEM9NzI0OSwJLyogc3VucnBjIGRlYnVnICovCisJQ1RMX1BNPTk4OTksCQkvKiBmcnYgcG93ZXIgbWFuYWdlbWVudCAqLworCUNUTF9GUlY9OTg5OCwJCS8qIGZydiBzcGVjaWZpYyBzeXNjdGxzICovCit9OworCisvKiBDVExfQlVTIG5hbWVzOiAqLworZW51bQoreworCUNUTF9CVVNfSVNBPTEJCS8qIElTQSAqLworfTsKKworLyogL3Byb2Mvc3lzL2ZzL2lub3RpZnkvICovCitlbnVtCit7CisJSU5PVElGWV9NQVhfVVNFUl9JTlNUQU5DRVM9MSwJLyogbWF4IGluc3RhbmNlcyBwZXIgdXNlciAqLworCUlOT1RJRllfTUFYX1VTRVJfV0FUQ0hFUz0yLAkvKiBtYXggd2F0Y2hlcyBwZXIgdXNlciAqLworCUlOT1RJRllfTUFYX1FVRVVFRF9FVkVOVFM9MwkvKiBtYXggcXVldWVkIGV2ZW50cyBwZXIgaW5zdGFuY2UgKi8KK307CisKKy8qIENUTF9LRVJOIG5hbWVzOiAqLworZW51bQoreworCUtFUk5fT1NUWVBFPTEsCQkvKiBzdHJpbmc6IHN5c3RlbSB2ZXJzaW9uICovCisJS0VSTl9PU1JFTEVBU0U9MiwJLyogc3RyaW5nOiBzeXN0ZW0gcmVsZWFzZSAqLworCUtFUk5fT1NSRVY9MywJCS8qIGludDogc3lzdGVtIHJldmlzaW9uICovCisJS0VSTl9WRVJTSU9OPTQsCQkvKiBzdHJpbmc6IGNvbXBpbGUgdGltZSBpbmZvICovCisJS0VSTl9TRUNVUkVNQVNLPTUsCS8qIHN0cnVjdDogbWF4aW11bSByaWdodHMgbWFzayAqLworCUtFUk5fUFJPRj02LAkJLyogdGFibGU6IHByb2ZpbGluZyBpbmZvcm1hdGlvbiAqLworCUtFUk5fTk9ERU5BTUU9NywJLyogc3RyaW5nOiBob3N0bmFtZSAqLworCUtFUk5fRE9NQUlOTkFNRT04LAkvKiBzdHJpbmc6IGRvbWFpbm5hbWUgKi8KKworCUtFUk5fUEFOSUM9MTUsCQkvKiBpbnQ6IHBhbmljIHRpbWVvdXQgKi8KKwlLRVJOX1JFQUxST09UREVWPTE2LAkvKiByZWFsIHJvb3QgZGV2aWNlIHRvIG1vdW50IGFmdGVyIGluaXRyZCAqLworCisJS0VSTl9TUEFSQ19SRUJPT1Q9MjEsCS8qIHJlYm9vdCBjb21tYW5kIG9uIFNwYXJjICovCisJS0VSTl9DVExBTFRERUw9MjIsCS8qIGludDogYWxsb3cgY3RsLWFsdC1kZWwgdG8gcmVib290ICovCisJS0VSTl9QUklOVEs9MjMsCQkvKiBzdHJ1Y3Q6IGNvbnRyb2wgcHJpbnRrIGxvZ2dpbmcgcGFyYW1ldGVycyAqLworCUtFUk5fTkFNRVRSQU5TPTI0LAkvKiBOYW1lIHRyYW5zbGF0aW9uICovCisJS0VSTl9QUENfSFRBQlJFQ0xBSU09MjUsIC8qIHR1cm4gaHRhYiByZWNsYWltYXRpb24gb24vb2ZmIG9uIFBQQyAqLworCUtFUk5fUFBDX1pFUk9QQUdFRD0yNiwJLyogdHVybiBpZGxlIHBhZ2UgemVyb2luZyBvbi9vZmYgb24gUFBDICovCisJS0VSTl9QUENfUE9XRVJTQVZFX05BUD0yNywgLyogdXNlIG5hcCBtb2RlIGZvciBwb3dlciBzYXZpbmcgKi8KKwlLRVJOX01PRFBST0JFPTI4LAkvKiBzdHJpbmc6IG1vZHByb2JlIHBhdGggKi8KKwlLRVJOX1NHX0JJR19CVUZGPTI5LAkvKiBpbnQ6IHNnIGRyaXZlciByZXNlcnZlZCBidWZmZXIgc2l6ZSAqLworCUtFUk5fQUNDVD0zMCwJCS8qIEJTRCBwcm9jZXNzIGFjY291bnRpbmcgcGFyYW1ldGVycyAqLworCUtFUk5fUFBDX0wyQ1I9MzEsCS8qIGwyY3IgcmVnaXN0ZXIgb24gUFBDICovCisKKwlLRVJOX1JUU0lHTlI9MzIsCS8qIE51bWJlciBvZiBydCBzaWdzIHF1ZXVlZCAqLworCUtFUk5fUlRTSUdNQVg9MzMsCS8qIE1heCBxdWV1YWJsZSAqLworCQorCUtFUk5fU0hNTUFYPTM0LCAgICAgICAgIC8qIGxvbmc6IE1heGltdW0gc2hhcmVkIG1lbW9yeSBzZWdtZW50ICovCisJS0VSTl9NU0dNQVg9MzUsICAgICAgICAgLyogaW50OiBNYXhpbXVtIHNpemUgb2YgYSBtZXNzZWdlICovCisJS0VSTl9NU0dNTkI9MzYsICAgICAgICAgLyogaW50OiBNYXhpbXVtIG1lc3NhZ2UgcXVldWUgc2l6ZSAqLworCUtFUk5fTVNHUE9PTD0zNywgICAgICAgIC8qIGludDogTWF4aW11bSBzeXN0ZW0gbWVzc2FnZSBwb29sIHNpemUgKi8KKwlLRVJOX1NZU1JRPTM4LAkJLyogaW50OiBTeXNyZXEgZW5hYmxlICovCisJS0VSTl9NQVhfVEhSRUFEUz0zOSwJLyogaW50OiBNYXhpbXVtIG5yIG9mIHRocmVhZHMgaW4gdGhlIHN5c3RlbSAqLworIAlLRVJOX1JBTkRPTT00MCwJCS8qIFJhbmRvbSBkcml2ZXIgKi8KKyAJS0VSTl9TSE1BTEw9NDEsCQkvKiBpbnQ6IE1heGltdW0gc2l6ZSBvZiBzaGFyZWQgbWVtb3J5ICovCisgCUtFUk5fTVNHTU5JPTQyLAkJLyogaW50OiBtc2cgcXVldWUgaWRlbnRpZmllcnMgKi8KKyAJS0VSTl9TRU09NDMsCQkvKiBzdHJ1Y3Q6IHN5c3Ygc2VtYXBob3JlIGxpbWl0cyAqLworIAlLRVJOX1NQQVJDX1NUT1BfQT00NCwJLyogaW50OiBTcGFyYyBTdG9wLUEgZW5hYmxlICovCisgCUtFUk5fU0hNTU5JPTQ1LAkJLyogaW50OiBzaG0gYXJyYXkgaWRlbnRpZmllcnMgKi8KKwlLRVJOX09WRVJGTE9XVUlEPTQ2LAkvKiBpbnQ6IG92ZXJmbG93IFVJRCAqLworCUtFUk5fT1ZFUkZMT1dHSUQ9NDcsCS8qIGludDogb3ZlcmZsb3cgR0lEICovCisJS0VSTl9TSE1QQVRIPTQ4LAkvKiBzdHJpbmc6IHBhdGggdG8gc2htIGZzICovCisJS0VSTl9IT1RQTFVHPTQ5LAkvKiBzdHJpbmc6IHBhdGggdG8gdWV2ZW50IGhlbHBlciAoZGVwcmVjYXRlZCkgKi8KKwlLRVJOX0lFRUVfRU1VTEFUSU9OX1dBUk5JTkdTPTUwLCAvKiBpbnQ6IHVuaW1wbGVtZW50ZWQgaWVlZSBpbnN0cnVjdGlvbnMgKi8KKwlLRVJOX1MzOTBfVVNFUl9ERUJVR19MT0dHSU5HPTUxLCAgLyogaW50OiBkdW1wcyBvZiB1c2VyIGZhdWx0cyAqLworCUtFUk5fQ09SRV9VU0VTX1BJRD01MiwJCS8qIGludDogdXNlIGNvcmUgb3IgY29yZS4lcGlkICovCisJS0VSTl9UQUlOVEVEPTUzLAkvKiBpbnQ6IHZhcmlvdXMga2VybmVsIHRhaW50ZWQgZmxhZ3MgKi8KKwlLRVJOX0NBRFBJRD01NCwJCS8qIGludDogUElEIG9mIHRoZSBwcm9jZXNzIHRvIG5vdGlmeSBvbiBDQUQgKi8KKwlLRVJOX1BJRE1BWD01NSwJCS8qIGludDogUElEICMgbGltaXQgKi8KKyAgCUtFUk5fQ09SRV9QQVRURVJOPTU2LAkvKiBzdHJpbmc6IHBhdHRlcm4gZm9yIGNvcmUtZmlsZSBuYW1lcyAqLworCUtFUk5fUEFOSUNfT05fT09QUz01NywgIC8qIGludDogd2hldGhlciB3ZSB3aWxsIHBhbmljIG9uIGFuIG9vcHMgKi8KKwlLRVJOX0hQUEFfUFdSU1c9NTgsCS8qIGludDogaHBwYSBzb2Z0LXBvd2VyIGVuYWJsZSAqLworCUtFUk5fSFBQQV9VTkFMSUdORUQ9NTksCS8qIGludDogaHBwYSB1bmFsaWduZWQtdHJhcCBlbmFibGUgKi8KKwlLRVJOX1BSSU5US19SQVRFTElNSVQ9NjAsIC8qIGludDogdHVuZSBwcmludGsgcmF0ZWxpbWl0aW5nICovCisJS0VSTl9QUklOVEtfUkFURUxJTUlUX0JVUlNUPTYxLAkvKiBpbnQ6IHR1bmUgcHJpbnRrIHJhdGVsaW1pdGluZyAqLworCUtFUk5fUFRZPTYyLAkJLyogZGlyOiBwdHkgZHJpdmVyICovCisJS0VSTl9OR1JPVVBTX01BWD02MywJLyogaW50OiBOR1JPVVBTX01BWCAqLworCUtFUk5fU1BBUkNfU0NPTlNfUFdST0ZGPTY0LCAvKiBpbnQ6IHNlcmlhbCBjb25zb2xlIHBvd2VyLW9mZiBoYWx0ICovCisJS0VSTl9IWl9USU1FUj02NSwJLyogaW50OiBoeiB0aW1lciBvbiBvciBvZmYgKi8KKwlLRVJOX1VOS05PV05fTk1JX1BBTklDPTY2LCAvKiBpbnQ6IHVua25vd24gbm1pIHBhbmljIGZsYWcgKi8KKwlLRVJOX0JPT1RMT0FERVJfVFlQRT02NywgLyogaW50OiBib290IGxvYWRlciB0eXBlICovCisJS0VSTl9SQU5ET01JWkU9NjgsIC8qIGludDogcmFuZG9taXplIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSAqLworCUtFUk5fU0VUVUlEX0RVTVBBQkxFPTY5LCAvKiBpbnQ6IGJlaGF2aW91ciBvZiBkdW1wcyBmb3Igc2V0dWlkIGNvcmUgKi8KKwlLRVJOX1NQSU5fUkVUUlk9NzAsCS8qIGludDogbnVtYmVyIG9mIHNwaW5sb2NrIHJldHJpZXMgKi8KKwlLRVJOX0FDUElfVklERU9fRkxBR1M9NzEsIC8qIGludDogZmxhZ3MgZm9yIHNldHRpbmcgdXAgdmlkZW8gYWZ0ZXIgQUNQSSBzbGVlcCAqLworCUtFUk5fSUE2NF9VTkFMSUdORUQ9NzIsIC8qIGludDogaWE2NCB1bmFsaWduZWQgdXNlcmxhbmQgdHJhcCBlbmFibGUgKi8KKwlLRVJOX0NPTVBBVF9MT0c9NzMsCS8qIGludDogcHJpbnQgY29tcGF0IGxheWVyICBtZXNzYWdlcyAqLworCUtFUk5fTUFYX0xPQ0tfREVQVEg9NzQsIC8qIGludDogcnRtdXRleCdzIG1heGltdW0gbG9jayBkZXB0aCAqLworCUtFUk5fTk1JX1dBVENIRE9HPTc1LCAvKiBpbnQ6IGVuYWJsZS9kaXNhYmxlIG5taSB3YXRjaGRvZyAqLworCUtFUk5fUEFOSUNfT05fTk1JPTc2LCAvKiBpbnQ6IHdoZXRoZXIgd2Ugd2lsbCBwYW5pYyBvbiBhbiB1bnJlY292ZXJlZCAqLworfTsKKworCisKKy8qIENUTF9WTSBuYW1lczogKi8KK2VudW0KK3sKKwlWTV9VTlVTRUQxPTEsCQkvKiB3YXM6IHN0cnVjdDogU2V0IHZtIHN3YXBwaW5nIGNvbnRyb2wgKi8KKwlWTV9VTlVTRUQyPTIsCQkvKiB3YXM7IGludDogTGluZWFyIG9yIHNxcnQoKSBzd2Fwb3V0IGZvciBob2dzICovCisJVk1fVU5VU0VEMz0zLAkJLyogd2FzOiBzdHJ1Y3Q6IFNldCBmcmVlIHBhZ2UgdGhyZXNob2xkcyAqLworCVZNX1VOVVNFRDQ9NCwJCS8qIFNwYXJlICovCisJVk1fT1ZFUkNPTU1JVF9NRU1PUlk9NSwJLyogVHVybiBvZmYgdGhlIHZpcnR1YWwgbWVtb3J5IHNhZmV0eSBsaW1pdCAqLworCVZNX1VOVVNFRDU9NiwJCS8qIHdhczogc3RydWN0OiBTZXQgYnVmZmVyIG1lbW9yeSB0aHJlc2hvbGRzICovCisJVk1fVU5VU0VENz03LAkJLyogd2FzOiBzdHJ1Y3Q6IFNldCBjYWNoZSBtZW1vcnkgdGhyZXNob2xkcyAqLworCVZNX1VOVVNFRDg9OCwJCS8qIHdhczogc3RydWN0OiBDb250cm9sIGtzd2FwZCBiZWhhdmlvdXIgKi8KKwlWTV9VTlVTRUQ5PTksCQkvKiB3YXM6IHN0cnVjdDogU2V0IHBhZ2UgdGFibGUgY2FjaGUgcGFyYW1ldGVycyAqLworCVZNX1BBR0VfQ0xVU1RFUj0xMCwJLyogaW50OiBzZXQgbnVtYmVyIG9mIHBhZ2VzIHRvIHN3YXAgdG9nZXRoZXIgKi8KKwlWTV9ESVJUWV9CQUNLR1JPVU5EPTExLAkvKiBkaXJ0eV9iYWNrZ3JvdW5kX3JhdGlvICovCisJVk1fRElSVFlfUkFUSU89MTIsCS8qIGRpcnR5X3JhdGlvICovCisJVk1fRElSVFlfV0JfQ1M9MTMsCS8qIGRpcnR5X3dyaXRlYmFja19jZW50aXNlY3MgKi8KKwlWTV9ESVJUWV9FWFBJUkVfQ1M9MTQsCS8qIGRpcnR5X2V4cGlyZV9jZW50aXNlY3MgKi8KKwlWTV9OUl9QREZMVVNIX1RIUkVBRFM9MTUsIC8qIG5yX3BkZmx1c2hfdGhyZWFkcyAqLworCVZNX09WRVJDT01NSVRfUkFUSU89MTYsIC8qIHBlcmNlbnQgb2YgUkFNIHRvIGFsbG93IG92ZXJjb21taXQgaW4gKi8KKwlWTV9QQUdFQlVGPTE3LAkJLyogc3RydWN0OiBDb250cm9sIHBhZ2VidWYgcGFyYW1ldGVycyAqLworCVZNX0hVR0VUTEJfUEFHRVM9MTgsCS8qIGludDogTnVtYmVyIG9mIGF2YWlsYWJsZSBIdWdlIFBhZ2VzICovCisJVk1fU1dBUFBJTkVTUz0xOSwJLyogVGVuZGVuY3kgdG8gc3RlYWwgbWFwcGVkIG1lbW9yeSAqLworCVZNX0xPV01FTV9SRVNFUlZFX1JBVElPPTIwLC8qIHJlc2VydmF0aW9uIHJhdGlvIGZvciBsb3dlciBtZW1vcnkgem9uZXMgKi8KKwlWTV9NSU5fRlJFRV9LQllURVM9MjEsCS8qIE1pbmltdW0gZnJlZSBraWxvYnl0ZXMgdG8gbWFpbnRhaW4gKi8KKwlWTV9NQVhfTUFQX0NPVU5UPTIyLAkvKiBpbnQ6IE1heGltdW0gbnVtYmVyIG9mIG1tYXBzL2FkZHJlc3Mtc3BhY2UgKi8KKwlWTV9MQVBUT1BfTU9ERT0yMywJLyogdm0gbGFwdG9wIG1vZGUgKi8KKwlWTV9CTE9DS19EVU1QPTI0LAkvKiBibG9jayBkdW1wIG1vZGUgKi8KKwlWTV9IVUdFVExCX0dST1VQPTI1LAkvKiBwZXJtaXR0ZWQgaHVnZXRsYiBncm91cCAqLworCVZNX1ZGU19DQUNIRV9QUkVTU1VSRT0yNiwgLyogZGNhY2hlL2ljYWNoZSByZWNsYWltIHByZXNzdXJlICovCisJVk1fTEVHQUNZX1ZBX0xBWU9VVD0yNywgLyogbGVnYWN5L2NvbXBhdGliaWxpdHkgdmlydHVhbCBhZGRyZXNzIHNwYWNlIGxheW91dCAqLworCVZNX1NXQVBfVE9LRU5fVElNRU9VVD0yOCwgLyogZGVmYXVsdCB0aW1lIGZvciB0b2tlbiB0aW1lIG91dCAqLworCVZNX0RST1BfUEFHRUNBQ0hFPTI5LAkvKiBpbnQ6IG51a2UgbG90cyBvZiBwYWdlY2FjaGUgKi8KKwlWTV9QRVJDUFVfUEFHRUxJU1RfRlJBQ1RJT049MzAsLyogaW50OiBmcmFjdGlvbiBvZiBwYWdlcyBpbiBlYWNoIHBlcmNwdV9wYWdlbGlzdCAqLworCVZNX1pPTkVfUkVDTEFJTV9NT0RFPTMxLCAvKiByZWNsYWltIGxvY2FsIHpvbmUgbWVtb3J5IGJlZm9yZSBnb2luZyBvZmYgbm9kZSAqLworCVZNX01JTl9VTk1BUFBFRD0zMiwJLyogU2V0IG1pbiBwZXJjZW50IG9mIHVubWFwcGVkIHBhZ2VzICovCisJVk1fUEFOSUNfT05fT09NPTMzLAkvKiBwYW5pYyBhdCBvdXQtb2YtbWVtb3J5ICovCisJVk1fVkRTT19FTkFCTEVEPTM0LAkvKiBtYXAgVkRTTyBpbnRvIG5ldyBwcm9jZXNzZXM/ICovCisJVk1fTUlOX1NMQUI9MzUsCQkgLyogUGVyY2VudCBwYWdlcyBpZ25vcmVkIGJ5IHpvbmUgcmVjbGFpbSAqLworfTsKKworCisvKiBDVExfTkVUIG5hbWVzOiAqLworZW51bQoreworCU5FVF9DT1JFPTEsCisJTkVUX0VUSEVSPTIsCisJTkVUXzgwMj0zLAorCU5FVF9VTklYPTQsCisJTkVUX0lQVjQ9NSwKKwlORVRfSVBYPTYsCisJTkVUX0FUQUxLPTcsCisJTkVUX05FVFJPTT04LAorCU5FVF9BWDI1PTksCisJTkVUX0JSSURHRT0xMCwKKwlORVRfUk9TRT0xMSwKKwlORVRfSVBWNj0xMiwKKwlORVRfWDI1PTEzLAorCU5FVF9UUj0xNCwKKwlORVRfREVDTkVUPTE1LAorCU5FVF9FQ09ORVQ9MTYsCisJTkVUX1NDVFA9MTcsCisJTkVUX0xMQz0xOCwKKwlORVRfTkVURklMVEVSPTE5LAorCU5FVF9EQ0NQPTIwLAorCU5FVF9JUkRBPTQxMiwKK307CisKKy8qIC9wcm9jL3N5cy9rZXJuZWwvcmFuZG9tICovCitlbnVtCit7CisJUkFORE9NX1BPT0xTSVpFPTEsCisJUkFORE9NX0VOVFJPUFlfQ09VTlQ9MiwKKwlSQU5ET01fUkVBRF9USFJFU0g9MywKKwlSQU5ET01fV1JJVEVfVEhSRVNIPTQsCisJUkFORE9NX0JPT1RfSUQ9NSwKKwlSQU5ET01fVVVJRD02Cit9OworCisvKiAvcHJvYy9zeXMva2VybmVsL3B0eSAqLworZW51bQoreworCVBUWV9NQVg9MSwKKwlQVFlfTlI9MgorfTsKKworLyogL3Byb2Mvc3lzL2J1cy9pc2EgKi8KK2VudW0KK3sKKwlCVVNfSVNBX01FTV9CQVNFPTEsCisJQlVTX0lTQV9QT1JUX0JBU0U9MiwKKwlCVVNfSVNBX1BPUlRfU0hJRlQ9MworfTsKKworLyogL3Byb2Mvc3lzL25ldC9jb3JlICovCitlbnVtCit7CisJTkVUX0NPUkVfV01FTV9NQVg9MSwKKwlORVRfQ09SRV9STUVNX01BWD0yLAorCU5FVF9DT1JFX1dNRU1fREVGQVVMVD0zLAorCU5FVF9DT1JFX1JNRU1fREVGQVVMVD00LAorLyogd2FzCU5FVF9DT1JFX0RFU1RST1lfREVMQVkgKi8KKwlORVRfQ09SRV9NQVhfQkFDS0xPRz02LAorCU5FVF9DT1JFX0ZBU1RST1VURT03LAorCU5FVF9DT1JFX01TR19DT1NUPTgsCisJTkVUX0NPUkVfTVNHX0JVUlNUPTksCisJTkVUX0NPUkVfT1BUTUVNX01BWD0xMCwKKwlORVRfQ09SRV9IT1RfTElTVF9MRU5HVEg9MTEsCisJTkVUX0NPUkVfRElWRVJUX1ZFUlNJT049MTIsCisJTkVUX0NPUkVfTk9fQ09OR19USFJFU0g9MTMsCisJTkVUX0NPUkVfTk9fQ09ORz0xNCwKKwlORVRfQ09SRV9MT19DT05HPTE1LAorCU5FVF9DT1JFX01PRF9DT05HPTE2LAorCU5FVF9DT1JFX0RFVl9XRUlHSFQ9MTcsCisJTkVUX0NPUkVfU09NQVhDT05OPTE4LAorCU5FVF9DT1JFX0JVREdFVD0xOSwKKwlORVRfQ09SRV9BRVZFTlRfRVRJTUU9MjAsCisJTkVUX0NPUkVfQUVWRU5UX1JTRVFUSD0yMSwKKwlORVRfQ09SRV9XQVJOSU5HUz0yMiwKK307CisKKy8qIC9wcm9jL3N5cy9uZXQvZXRoZXJuZXQgKi8KKworLyogL3Byb2Mvc3lzL25ldC84MDIgKi8KKworLyogL3Byb2Mvc3lzL25ldC91bml4ICovCisKK2VudW0KK3sKKwlORVRfVU5JWF9ERVNUUk9ZX0RFTEFZPTEsCisJTkVUX1VOSVhfREVMRVRFX0RFTEFZPTIsCisJTkVUX1VOSVhfTUFYX0RHUkFNX1FMRU49MywKK307CisKKy8qIC9wcm9jL3N5cy9uZXQvbmV0ZmlsdGVyICovCitlbnVtCit7CisJTkVUX05GX0NPTk5UUkFDS19NQVg9MSwKKwlORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX1NZTl9TRU5UPTIsCisJTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9TWU5fUkVDVj0zLAorCU5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfRVNUQUJMSVNIRUQ9NCwKKwlORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0ZJTl9XQUlUPTUsCisJTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9DTE9TRV9XQUlUPTYsCisJTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9MQVNUX0FDSz03LAorCU5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfVElNRV9XQUlUPTgsCisJTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9DTE9TRT05LAorCU5FVF9ORl9DT05OVFJBQ0tfVURQX1RJTUVPVVQ9MTAsCisJTkVUX05GX0NPTk5UUkFDS19VRFBfVElNRU9VVF9TVFJFQU09MTEsCisJTkVUX05GX0NPTk5UUkFDS19JQ01QX1RJTUVPVVQ9MTIsCisJTkVUX05GX0NPTk5UUkFDS19HRU5FUklDX1RJTUVPVVQ9MTMsCisJTkVUX05GX0NPTk5UUkFDS19CVUNLRVRTPTE0LAorCU5FVF9ORl9DT05OVFJBQ0tfTE9HX0lOVkFMSUQ9MTUsCisJTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9NQVhfUkVUUkFOUz0xNiwKKwlORVRfTkZfQ09OTlRSQUNLX1RDUF9MT09TRT0xNywKKwlORVRfTkZfQ09OTlRSQUNLX1RDUF9CRV9MSUJFUkFMPTE4LAorCU5FVF9ORl9DT05OVFJBQ0tfVENQX01BWF9SRVRSQU5TPTE5LAorCU5FVF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX0NMT1NFRD0yMCwKKwlORVRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9DT09LSUVfV0FJVD0yMSwKKwlORVRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9DT09LSUVfRUNIT0VEPTIyLAorCU5FVF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX0VTVEFCTElTSEVEPTIzLAorCU5FVF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX1NIVVRET1dOX1NFTlQ9MjQsCisJTkVUX05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfU0hVVERPV05fUkVDRD0yNSwKKwlORVRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9TSFVURE9XTl9BQ0tfU0VOVD0yNiwKKwlORVRfTkZfQ09OTlRSQUNLX0NPVU5UPTI3LAorCU5FVF9ORl9DT05OVFJBQ0tfSUNNUFY2X1RJTUVPVVQ9MjgsCisJTkVUX05GX0NPTk5UUkFDS19GUkFHNl9USU1FT1VUPTI5LAorCU5FVF9ORl9DT05OVFJBQ0tfRlJBRzZfTE9XX1RIUkVTSD0zMCwKKwlORVRfTkZfQ09OTlRSQUNLX0ZSQUc2X0hJR0hfVEhSRVNIPTMxLAorCU5FVF9ORl9DT05OVFJBQ0tfQ0hFQ0tTVU09MzIsCit9OworCisvKiAvcHJvYy9zeXMvbmV0L2lwdjQgKi8KK2VudW0KK3sKKwkvKiB2Mi4wIGNvbXBhdGliaWxlIHZhcmlhYmxlcyAqLworCU5FVF9JUFY0X0ZPUldBUkQ9OCwKKwlORVRfSVBWNF9EWU5BRERSPTksCisKKwlORVRfSVBWNF9DT05GPTE2LAorCU5FVF9JUFY0X05FSUdIPTE3LAorCU5FVF9JUFY0X1JPVVRFPTE4LAorCU5FVF9JUFY0X0ZJQl9IQVNIPTE5LAorCU5FVF9JUFY0X05FVEZJTFRFUj0yMCwKKworCU5FVF9JUFY0X1RDUF9USU1FU1RBTVBTPTMzLAorCU5FVF9JUFY0X1RDUF9XSU5ET1dfU0NBTElORz0zNCwKKwlORVRfSVBWNF9UQ1BfU0FDSz0zNSwKKwlORVRfSVBWNF9UQ1BfUkVUUkFOU19DT0xMQVBTRT0zNiwKKwlORVRfSVBWNF9ERUZBVUxUX1RUTD0zNywKKwlORVRfSVBWNF9BVVRPQ09ORklHPTM4LAorCU5FVF9JUFY0X05PX1BNVFVfRElTQz0zOSwKKwlORVRfSVBWNF9UQ1BfU1lOX1JFVFJJRVM9NDAsCisJTkVUX0lQVjRfSVBGUkFHX0hJR0hfVEhSRVNIPTQxLAorCU5FVF9JUFY0X0lQRlJBR19MT1dfVEhSRVNIPTQyLAorCU5FVF9JUFY0X0lQRlJBR19USU1FPTQzLAorCU5FVF9JUFY0X1RDUF9NQVhfS0FfUFJPQkVTPTQ0LAorCU5FVF9JUFY0X1RDUF9LRUVQQUxJVkVfVElNRT00NSwKKwlORVRfSVBWNF9UQ1BfS0VFUEFMSVZFX1BST0JFUz00NiwKKwlORVRfSVBWNF9UQ1BfUkVUUklFUzE9NDcsCisJTkVUX0lQVjRfVENQX1JFVFJJRVMyPTQ4LAorCU5FVF9JUFY0X1RDUF9GSU5fVElNRU9VVD00OSwKKwlORVRfSVBWNF9JUF9NQVNRX0RFQlVHPTUwLAorCU5FVF9UQ1BfU1lOQ09PS0lFUz01MSwKKwlORVRfVENQX1NURFVSRz01MiwKKwlORVRfVENQX1JGQzEzMzc9NTMsCisJTkVUX1RDUF9TWU5fVEFJTERST1A9NTQsCisJTkVUX1RDUF9NQVhfU1lOX0JBQ0tMT0c9NTUsCisJTkVUX0lQVjRfTE9DQUxfUE9SVF9SQU5HRT01NiwKKwlORVRfSVBWNF9JQ01QX0VDSE9fSUdOT1JFX0FMTD01NywKKwlORVRfSVBWNF9JQ01QX0VDSE9fSUdOT1JFX0JST0FEQ0FTVFM9NTgsCisJTkVUX0lQVjRfSUNNUF9TT1VSQ0VRVUVOQ0hfUkFURT01OSwKKwlORVRfSVBWNF9JQ01QX0RFU1RVTlJFQUNIX1JBVEU9NjAsCisJTkVUX0lQVjRfSUNNUF9USU1FRVhDRUVEX1JBVEU9NjEsCisJTkVUX0lQVjRfSUNNUF9QQVJBTVBST0JfUkFURT02MiwKKwlORVRfSVBWNF9JQ01QX0VDSE9SRVBMWV9SQVRFPTYzLAorCU5FVF9JUFY0X0lDTVBfSUdOT1JFX0JPR1VTX0VSUk9SX1JFU1BPTlNFUz02NCwKKwlORVRfSVBWNF9JR01QX01BWF9NRU1CRVJTSElQUz02NSwKKwlORVRfVENQX1RXX1JFQ1lDTEU9NjYsCisJTkVUX0lQVjRfQUxXQVlTX0RFRlJBRz02NywKKwlORVRfSVBWNF9UQ1BfS0VFUEFMSVZFX0lOVFZMPTY4LAorCU5FVF9JUFY0X0lORVRfUEVFUl9USFJFU0hPTEQ9NjksCisJTkVUX0lQVjRfSU5FVF9QRUVSX01JTlRUTD03MCwKKwlORVRfSVBWNF9JTkVUX1BFRVJfTUFYVFRMPTcxLAorCU5FVF9JUFY0X0lORVRfUEVFUl9HQ19NSU5USU1FPTcyLAorCU5FVF9JUFY0X0lORVRfUEVFUl9HQ19NQVhUSU1FPTczLAorCU5FVF9UQ1BfT1JQSEFOX1JFVFJJRVM9NzQsCisJTkVUX1RDUF9BQk9SVF9PTl9PVkVSRkxPVz03NSwKKwlORVRfVENQX1NZTkFDS19SRVRSSUVTPTc2LAorCU5FVF9UQ1BfTUFYX09SUEhBTlM9NzcsCisJTkVUX1RDUF9NQVhfVFdfQlVDS0VUUz03OCwKKwlORVRfVENQX0ZBQ0s9NzksCisJTkVUX1RDUF9SRU9SREVSSU5HPTgwLAorCU5FVF9UQ1BfRUNOPTgxLAorCU5FVF9UQ1BfRFNBQ0s9ODIsCisJTkVUX1RDUF9NRU09ODMsCisJTkVUX1RDUF9XTUVNPTg0LAorCU5FVF9UQ1BfUk1FTT04NSwKKwlORVRfVENQX0FQUF9XSU49ODYsCisJTkVUX1RDUF9BRFZfV0lOX1NDQUxFPTg3LAorCU5FVF9JUFY0X05PTkxPQ0FMX0JJTkQ9ODgsCisJTkVUX0lQVjRfSUNNUF9SQVRFTElNSVQ9ODksCisJTkVUX0lQVjRfSUNNUF9SQVRFTUFTSz05MCwKKwlORVRfVENQX1RXX1JFVVNFPTkxLAorCU5FVF9UQ1BfRlJUTz05MiwKKwlORVRfVENQX0xPV19MQVRFTkNZPTkzLAorCU5FVF9JUFY0X0lQRlJBR19TRUNSRVRfSU5URVJWQUw9OTQsCisJTkVUX0lQVjRfSUdNUF9NQVhfTVNGPTk2LAorCU5FVF9UQ1BfTk9fTUVUUklDU19TQVZFPTk3LAorCU5FVF9UQ1BfREVGQVVMVF9XSU5fU0NBTEU9MTA1LAorCU5FVF9UQ1BfTU9ERVJBVEVfUkNWQlVGPTEwNiwKKwlORVRfVENQX1RTT19XSU5fRElWSVNPUj0xMDcsCisJTkVUX1RDUF9CSUNfQkVUQT0xMDgsCisJTkVUX0lQVjRfSUNNUF9FUlJPUlNfVVNFX0lOQk9VTkRfSUZBRERSPTEwOSwKKwlORVRfVENQX0NPTkdfQ09OVFJPTD0xMTAsCisJTkVUX1RDUF9BQkM9MTExLAorCU5FVF9JUFY0X0lQRlJBR19NQVhfRElTVD0xMTIsCisgCU5FVF9UQ1BfTVRVX1BST0JJTkc9MTEzLAorCU5FVF9UQ1BfQkFTRV9NU1M9MTE0LAorCU5FVF9JUFY0X1RDUF9XT1JLQVJPVU5EX1NJR05FRF9XSU5ET1dTPTExNSwKKwlORVRfVENQX0RNQV9DT1BZQlJFQUs9MTE2LAorCU5FVF9UQ1BfU0xPV19TVEFSVF9BRlRFUl9JRExFPTExNywKKwlORVRfQ0lQU09WNF9DQUNIRV9FTkFCTEU9MTE4LAorCU5FVF9DSVBTT1Y0X0NBQ0hFX0JVQ0tFVF9TSVpFPTExOSwKKwlORVRfQ0lQU09WNF9SQk1fT1BURk1UPTEyMCwKKwlORVRfQ0lQU09WNF9SQk1fU1RSSUNUVkFMSUQ9MTIxLAorCU5FVF9UQ1BfQVZBSUxfQ09OR19DT05UUk9MPTEyMiwKKwlORVRfVENQX0FMTE9XRURfQ09OR19DT05UUk9MPTEyMywKKwlORVRfVENQX01BWF9TU1RIUkVTSD0xMjQsCisJTkVUX1RDUF9GUlRPX1JFU1BPTlNFPTEyNSwKK307CisKK2VudW0geworCU5FVF9JUFY0X1JPVVRFX0ZMVVNIPTEsCisJTkVUX0lQVjRfUk9VVEVfTUlOX0RFTEFZPTIsIC8qIG9ic29sZXRlIHNpbmNlIDIuNi4yNSAqLworCU5FVF9JUFY0X1JPVVRFX01BWF9ERUxBWT0zLCAvKiBvYnNvbGV0ZSBzaW5jZSAyLjYuMjUgKi8KKwlORVRfSVBWNF9ST1VURV9HQ19USFJFU0g9NCwKKwlORVRfSVBWNF9ST1VURV9NQVhfU0laRT01LAorCU5FVF9JUFY0X1JPVVRFX0dDX01JTl9JTlRFUlZBTD02LAorCU5FVF9JUFY0X1JPVVRFX0dDX1RJTUVPVVQ9NywKKwlORVRfSVBWNF9ST1VURV9HQ19JTlRFUlZBTD04LAorCU5FVF9JUFY0X1JPVVRFX1JFRElSRUNUX0xPQUQ9OSwKKwlORVRfSVBWNF9ST1VURV9SRURJUkVDVF9OVU1CRVI9MTAsCisJTkVUX0lQVjRfUk9VVEVfUkVESVJFQ1RfU0lMRU5DRT0xMSwKKwlORVRfSVBWNF9ST1VURV9FUlJPUl9DT1NUPTEyLAorCU5FVF9JUFY0X1JPVVRFX0VSUk9SX0JVUlNUPTEzLAorCU5FVF9JUFY0X1JPVVRFX0dDX0VMQVNUSUNJVFk9MTQsCisJTkVUX0lQVjRfUk9VVEVfTVRVX0VYUElSRVM9MTUsCisJTkVUX0lQVjRfUk9VVEVfTUlOX1BNVFU9MTYsCisJTkVUX0lQVjRfUk9VVEVfTUlOX0FEVk1TUz0xNywKKwlORVRfSVBWNF9ST1VURV9TRUNSRVRfSU5URVJWQUw9MTgsCisJTkVUX0lQVjRfUk9VVEVfR0NfTUlOX0lOVEVSVkFMX01TPTE5LAorfTsKKworZW51bQoreworCU5FVF9QUk9UT19DT05GX0FMTD0tMiwKKwlORVRfUFJPVE9fQ09ORl9ERUZBVUxUPS0zCisKKwkvKiBBbmQgZGV2aWNlIGlmaW5kaWNlcyAuLi4gKi8KK307CisKK2VudW0KK3sKKwlORVRfSVBWNF9DT05GX0ZPUldBUkRJTkc9MSwKKwlORVRfSVBWNF9DT05GX01DX0ZPUldBUkRJTkc9MiwKKwlORVRfSVBWNF9DT05GX1BST1hZX0FSUD0zLAorCU5FVF9JUFY0X0NPTkZfQUNDRVBUX1JFRElSRUNUUz00LAorCU5FVF9JUFY0X0NPTkZfU0VDVVJFX1JFRElSRUNUUz01LAorCU5FVF9JUFY0X0NPTkZfU0VORF9SRURJUkVDVFM9NiwKKwlORVRfSVBWNF9DT05GX1NIQVJFRF9NRURJQT03LAorCU5FVF9JUFY0X0NPTkZfUlBfRklMVEVSPTgsCisJTkVUX0lQVjRfQ09ORl9BQ0NFUFRfU09VUkNFX1JPVVRFPTksCisJTkVUX0lQVjRfQ09ORl9CT09UUF9SRUxBWT0xMCwKKwlORVRfSVBWNF9DT05GX0xPR19NQVJUSUFOUz0xMSwKKwlORVRfSVBWNF9DT05GX1RBRz0xMiwKKwlORVRfSVBWNF9DT05GX0FSUEZJTFRFUj0xMywKKwlORVRfSVBWNF9DT05GX01FRElVTV9JRD0xNCwKKwlORVRfSVBWNF9DT05GX05PWEZSTT0xNSwKKwlORVRfSVBWNF9DT05GX05PUE9MSUNZPTE2LAorCU5FVF9JUFY0X0NPTkZfRk9SQ0VfSUdNUF9WRVJTSU9OPTE3LAorCU5FVF9JUFY0X0NPTkZfQVJQX0FOTk9VTkNFPTE4LAorCU5FVF9JUFY0X0NPTkZfQVJQX0lHTk9SRT0xOSwKKwlORVRfSVBWNF9DT05GX1BST01PVEVfU0VDT05EQVJJRVM9MjAsCisJTkVUX0lQVjRfQ09ORl9BUlBfQUNDRVBUPTIxLAorCU5FVF9JUFY0X0NPTkZfQVJQX05PVElGWT0yMiwKK307CisKKy8qIC9wcm9jL3N5cy9uZXQvaXB2NC9uZXRmaWx0ZXIgKi8KK2VudW0KK3sKKwlORVRfSVBWNF9ORl9DT05OVFJBQ0tfTUFYPTEsCisJTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX1NZTl9TRU5UPTIsCisJTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX1NZTl9SRUNWPTMsCisJTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0VTVEFCTElTSEVEPTQsCisJTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0ZJTl9XQUlUPTUsCisJTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0NMT1NFX1dBSVQ9NiwKKwlORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfTEFTVF9BQ0s9NywKKwlORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfVElNRV9XQUlUPTgsCisJTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0NMT1NFPTksCisJTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1VEUF9USU1FT1VUPTEwLAorCU5FVF9JUFY0X05GX0NPTk5UUkFDS19VRFBfVElNRU9VVF9TVFJFQU09MTEsCisJTkVUX0lQVjRfTkZfQ09OTlRSQUNLX0lDTVBfVElNRU9VVD0xMiwKKwlORVRfSVBWNF9ORl9DT05OVFJBQ0tfR0VORVJJQ19USU1FT1VUPTEzLAorCU5FVF9JUFY0X05GX0NPTk5UUkFDS19CVUNLRVRTPTE0LAorCU5FVF9JUFY0X05GX0NPTk5UUkFDS19MT0dfSU5WQUxJRD0xNSwKKwlORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfTUFYX1JFVFJBTlM9MTYsCisJTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9MT09TRT0xNywKKwlORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX0JFX0xJQkVSQUw9MTgsCisJTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9NQVhfUkVUUkFOUz0xOSwKKyAJTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9DTE9TRUQ9MjAsCisgCU5FVF9JUFY0X05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfQ09PS0lFX1dBSVQ9MjEsCisgCU5FVF9JUFY0X05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfQ09PS0lFX0VDSE9FRD0yMiwKKyAJTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9FU1RBQkxJU0hFRD0yMywKKyAJTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9TSFVURE9XTl9TRU5UPTI0LAorIAlORVRfSVBWNF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX1NIVVRET1dOX1JFQ0Q9MjUsCisgCU5FVF9JUFY0X05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfU0hVVERPV05fQUNLX1NFTlQ9MjYsCisJTkVUX0lQVjRfTkZfQ09OTlRSQUNLX0NPVU5UPTI3LAorCU5FVF9JUFY0X05GX0NPTk5UUkFDS19DSEVDS1NVTT0yOCwKK307CisgCisvKiAvcHJvYy9zeXMvbmV0L2lwdjYgKi8KK2VudW0geworCU5FVF9JUFY2X0NPTkY9MTYsCisJTkVUX0lQVjZfTkVJR0g9MTcsCisJTkVUX0lQVjZfUk9VVEU9MTgsCisJTkVUX0lQVjZfSUNNUD0xOSwKKwlORVRfSVBWNl9CSU5EVjZPTkxZPTIwLAorCU5FVF9JUFY2X0lQNkZSQUdfSElHSF9USFJFU0g9MjEsCisJTkVUX0lQVjZfSVA2RlJBR19MT1dfVEhSRVNIPTIyLAorCU5FVF9JUFY2X0lQNkZSQUdfVElNRT0yMywKKwlORVRfSVBWNl9JUDZGUkFHX1NFQ1JFVF9JTlRFUlZBTD0yNCwKKwlORVRfSVBWNl9NTERfTUFYX01TRj0yNSwKK307CisKK2VudW0geworCU5FVF9JUFY2X1JPVVRFX0ZMVVNIPTEsCisJTkVUX0lQVjZfUk9VVEVfR0NfVEhSRVNIPTIsCisJTkVUX0lQVjZfUk9VVEVfTUFYX1NJWkU9MywKKwlORVRfSVBWNl9ST1VURV9HQ19NSU5fSU5URVJWQUw9NCwKKwlORVRfSVBWNl9ST1VURV9HQ19USU1FT1VUPTUsCisJTkVUX0lQVjZfUk9VVEVfR0NfSU5URVJWQUw9NiwKKwlORVRfSVBWNl9ST1VURV9HQ19FTEFTVElDSVRZPTcsCisJTkVUX0lQVjZfUk9VVEVfTVRVX0VYUElSRVM9OCwKKwlORVRfSVBWNl9ST1VURV9NSU5fQURWTVNTPTksCisJTkVUX0lQVjZfUk9VVEVfR0NfTUlOX0lOVEVSVkFMX01TPTEwCit9OworCitlbnVtIHsKKwlORVRfSVBWNl9GT1JXQVJESU5HPTEsCisJTkVUX0lQVjZfSE9QX0xJTUlUPTIsCisJTkVUX0lQVjZfTVRVPTMsCisJTkVUX0lQVjZfQUNDRVBUX1JBPTQsCisJTkVUX0lQVjZfQUNDRVBUX1JFRElSRUNUUz01LAorCU5FVF9JUFY2X0FVVE9DT05GPTYsCisJTkVUX0lQVjZfREFEX1RSQU5TTUlUUz03LAorCU5FVF9JUFY2X1JUUl9TT0xJQ0lUUz04LAorCU5FVF9JUFY2X1JUUl9TT0xJQ0lUX0lOVEVSVkFMPTksCisJTkVUX0lQVjZfUlRSX1NPTElDSVRfREVMQVk9MTAsCisJTkVUX0lQVjZfVVNFX1RFTVBBRERSPTExLAorCU5FVF9JUFY2X1RFTVBfVkFMSURfTEZUPTEyLAorCU5FVF9JUFY2X1RFTVBfUFJFRkVSRURfTEZUPTEzLAorCU5FVF9JUFY2X1JFR0VOX01BWF9SRVRSWT0xNCwKKwlORVRfSVBWNl9NQVhfREVTWU5DX0ZBQ1RPUj0xNSwKKwlORVRfSVBWNl9NQVhfQUREUkVTU0VTPTE2LAorCU5FVF9JUFY2X0ZPUkNFX01MRF9WRVJTSU9OPTE3LAorCU5FVF9JUFY2X0FDQ0VQVF9SQV9ERUZSVFI9MTgsCisJTkVUX0lQVjZfQUNDRVBUX1JBX1BJTkZPPTE5LAorCU5FVF9JUFY2X0FDQ0VQVF9SQV9SVFJfUFJFRj0yMCwKKwlORVRfSVBWNl9SVFJfUFJPQkVfSU5URVJWQUw9MjEsCisJTkVUX0lQVjZfQUNDRVBUX1JBX1JUX0lORk9fTUFYX1BMRU49MjIsCisJTkVUX0lQVjZfUFJPWFlfTkRQPTIzLAorCU5FVF9JUFY2X0FDQ0VQVF9TT1VSQ0VfUk9VVEU9MjUsCisJX19ORVRfSVBWNl9NQVgKK307CisKKy8qIC9wcm9jL3N5cy9uZXQvaXB2Ni9pY21wICovCitlbnVtIHsKKwlORVRfSVBWNl9JQ01QX1JBVEVMSU1JVD0xCit9OworCisvKiAvcHJvYy9zeXMvbmV0Lzxwcm90b2NvbD4vbmVpZ2gvPGRldj4gKi8KK2VudW0geworCU5FVF9ORUlHSF9NQ0FTVF9TT0xJQ0lUPTEsCisJTkVUX05FSUdIX1VDQVNUX1NPTElDSVQ9MiwKKwlORVRfTkVJR0hfQVBQX1NPTElDSVQ9MywKKwlORVRfTkVJR0hfUkVUUkFOU19USU1FPTQsCisJTkVUX05FSUdIX1JFQUNIQUJMRV9USU1FPTUsCisJTkVUX05FSUdIX0RFTEFZX1BST0JFX1RJTUU9NiwKKwlORVRfTkVJR0hfR0NfU1RBTEVfVElNRT03LAorCU5FVF9ORUlHSF9VTlJFU19RTEVOPTgsCisJTkVUX05FSUdIX1BST1hZX1FMRU49OSwKKwlORVRfTkVJR0hfQU5ZQ0FTVF9ERUxBWT0xMCwKKwlORVRfTkVJR0hfUFJPWFlfREVMQVk9MTEsCisJTkVUX05FSUdIX0xPQ0tUSU1FPTEyLAorCU5FVF9ORUlHSF9HQ19JTlRFUlZBTD0xMywKKwlORVRfTkVJR0hfR0NfVEhSRVNIMT0xNCwKKwlORVRfTkVJR0hfR0NfVEhSRVNIMj0xNSwKKwlORVRfTkVJR0hfR0NfVEhSRVNIMz0xNiwKKwlORVRfTkVJR0hfUkVUUkFOU19USU1FX01TPTE3LAorCU5FVF9ORUlHSF9SRUFDSEFCTEVfVElNRV9NUz0xOCwKK307CisKKy8qIC9wcm9jL3N5cy9uZXQvZGNjcCAqLworZW51bSB7CisJTkVUX0RDQ1BfREVGQVVMVD0xLAorfTsKKworLyogL3Byb2Mvc3lzL25ldC9pcHggKi8KK2VudW0geworCU5FVF9JUFhfUFBST1BfQlJPQURDQVNUSU5HPTEsCisJTkVUX0lQWF9GT1JXQVJESU5HPTIKK307CisKKy8qIC9wcm9jL3N5cy9uZXQvbGxjICovCitlbnVtIHsKKwlORVRfTExDMj0xLAorCU5FVF9MTENfU1RBVElPTj0yLAorfTsKKworLyogL3Byb2Mvc3lzL25ldC9sbGMvbGxjMiAqLworZW51bSB7CisJTkVUX0xMQzJfVElNRU9VVD0xLAorfTsKKworLyogL3Byb2Mvc3lzL25ldC9sbGMvc3RhdGlvbiAqLworZW51bSB7CisJTkVUX0xMQ19TVEFUSU9OX0FDS19USU1FT1VUPTEsCit9OworCisvKiAvcHJvYy9zeXMvbmV0L2xsYy9sbGMyL3RpbWVvdXQgKi8KK2VudW0geworCU5FVF9MTEMyX0FDS19USU1FT1VUPTEsCisJTkVUX0xMQzJfUF9USU1FT1VUPTIsCisJTkVUX0xMQzJfUkVKX1RJTUVPVVQ9MywKKwlORVRfTExDMl9CVVNZX1RJTUVPVVQ9NCwKK307CisKKy8qIC9wcm9jL3N5cy9uZXQvYXBwbGV0YWxrICovCitlbnVtIHsKKwlORVRfQVRBTEtfQUFSUF9FWFBJUllfVElNRT0xLAorCU5FVF9BVEFMS19BQVJQX1RJQ0tfVElNRT0yLAorCU5FVF9BVEFMS19BQVJQX1JFVFJBTlNNSVRfTElNSVQ9MywKKwlORVRfQVRBTEtfQUFSUF9SRVNPTFZFX1RJTUU9NAorfTsKKworCisvKiAvcHJvYy9zeXMvbmV0L25ldHJvbSAqLworZW51bSB7CisJTkVUX05FVFJPTV9ERUZBVUxUX1BBVEhfUVVBTElUWT0xLAorCU5FVF9ORVRST01fT0JTT0xFU0NFTkNFX0NPVU5UX0lOSVRJQUxJU0VSPTIsCisJTkVUX05FVFJPTV9ORVRXT1JLX1RUTF9JTklUSUFMSVNFUj0zLAorCU5FVF9ORVRST01fVFJBTlNQT1JUX1RJTUVPVVQ9NCwKKwlORVRfTkVUUk9NX1RSQU5TUE9SVF9NQVhJTVVNX1RSSUVTPTUsCisJTkVUX05FVFJPTV9UUkFOU1BPUlRfQUNLTk9XTEVER0VfREVMQVk9NiwKKwlORVRfTkVUUk9NX1RSQU5TUE9SVF9CVVNZX0RFTEFZPTcsCisJTkVUX05FVFJPTV9UUkFOU1BPUlRfUkVRVUVTVEVEX1dJTkRPV19TSVpFPTgsCisJTkVUX05FVFJPTV9UUkFOU1BPUlRfTk9fQUNUSVZJVFlfVElNRU9VVD05LAorCU5FVF9ORVRST01fUk9VVElOR19DT05UUk9MPTEwLAorCU5FVF9ORVRST01fTElOS19GQUlMU19DT1VOVD0xMSwKKwlORVRfTkVUUk9NX1JFU0VUPTEyCit9OworCisvKiAvcHJvYy9zeXMvbmV0L2F4MjUgKi8KK2VudW0geworCU5FVF9BWDI1X0lQX0RFRkFVTFRfTU9ERT0xLAorCU5FVF9BWDI1X0RFRkFVTFRfTU9ERT0yLAorCU5FVF9BWDI1X0JBQ0tPRkZfVFlQRT0zLAorCU5FVF9BWDI1X0NPTk5FQ1RfTU9ERT00LAorCU5FVF9BWDI1X1NUQU5EQVJEX1dJTkRPVz01LAorCU5FVF9BWDI1X0VYVEVOREVEX1dJTkRPVz02LAorCU5FVF9BWDI1X1QxX1RJTUVPVVQ9NywKKwlORVRfQVgyNV9UMl9USU1FT1VUPTgsCisJTkVUX0FYMjVfVDNfVElNRU9VVD05LAorCU5FVF9BWDI1X0lETEVfVElNRU9VVD0xMCwKKwlORVRfQVgyNV9OMj0xMSwKKwlORVRfQVgyNV9QQUNMRU49MTIsCisJTkVUX0FYMjVfUFJPVE9DT0w9MTMsCisJTkVUX0FYMjVfREFNQV9TTEFWRV9USU1FT1VUPTE0Cit9OworCisvKiAvcHJvYy9zeXMvbmV0L3Jvc2UgKi8KK2VudW0geworCU5FVF9ST1NFX1JFU1RBUlRfUkVRVUVTVF9USU1FT1VUPTEsCisJTkVUX1JPU0VfQ0FMTF9SRVFVRVNUX1RJTUVPVVQ9MiwKKwlORVRfUk9TRV9SRVNFVF9SRVFVRVNUX1RJTUVPVVQ9MywKKwlORVRfUk9TRV9DTEVBUl9SRVFVRVNUX1RJTUVPVVQ9NCwKKwlORVRfUk9TRV9BQ0tfSE9MRF9CQUNLX1RJTUVPVVQ9NSwKKwlORVRfUk9TRV9ST1VUSU5HX0NPTlRST0w9NiwKKwlORVRfUk9TRV9MSU5LX0ZBSUxfVElNRU9VVD03LAorCU5FVF9ST1NFX01BWF9WQ1M9OCwKKwlORVRfUk9TRV9XSU5ET1dfU0laRT05LAorCU5FVF9ST1NFX05PX0FDVElWSVRZX1RJTUVPVVQ9MTAKK307CisKKy8qIC9wcm9jL3N5cy9uZXQveDI1ICovCitlbnVtIHsKKwlORVRfWDI1X1JFU1RBUlRfUkVRVUVTVF9USU1FT1VUPTEsCisJTkVUX1gyNV9DQUxMX1JFUVVFU1RfVElNRU9VVD0yLAorCU5FVF9YMjVfUkVTRVRfUkVRVUVTVF9USU1FT1VUPTMsCisJTkVUX1gyNV9DTEVBUl9SRVFVRVNUX1RJTUVPVVQ9NCwKKwlORVRfWDI1X0FDS19IT0xEX0JBQ0tfVElNRU9VVD01LAorCU5FVF9YMjVfRk9SV0FSRD02Cit9OworCisvKiAvcHJvYy9zeXMvbmV0L3Rva2VuLXJpbmcgKi8KK2VudW0KK3sKKwlORVRfVFJfUklGX1RJTUVPVVQ9MQorfTsKKworLyogL3Byb2Mvc3lzL25ldC9kZWNuZXQvICovCitlbnVtIHsKKwlORVRfREVDTkVUX05PREVfVFlQRSA9IDEsCisJTkVUX0RFQ05FVF9OT0RFX0FERFJFU1MgPSAyLAorCU5FVF9ERUNORVRfTk9ERV9OQU1FID0gMywKKwlORVRfREVDTkVUX0RFRkFVTFRfREVWSUNFID0gNCwKKwlORVRfREVDTkVUX1RJTUVfV0FJVCA9IDUsCisJTkVUX0RFQ05FVF9ETl9DT1VOVCA9IDYsCisJTkVUX0RFQ05FVF9ESV9DT1VOVCA9IDcsCisJTkVUX0RFQ05FVF9EUl9DT1VOVCA9IDgsCisJTkVUX0RFQ05FVF9EU1RfR0NfSU5URVJWQUwgPSA5LAorCU5FVF9ERUNORVRfQ09ORiA9IDEwLAorCU5FVF9ERUNORVRfTk9fRkNfTUFYX0NXTkQgPSAxMSwKKwlORVRfREVDTkVUX01FTSA9IDEyLAorCU5FVF9ERUNORVRfUk1FTSA9IDEzLAorCU5FVF9ERUNORVRfV01FTSA9IDE0LAorCU5FVF9ERUNORVRfREVCVUdfTEVWRUwgPSAyNTUKK307CisKKy8qIC9wcm9jL3N5cy9uZXQvZGVjbmV0L2NvbmYvPGRldj4gKi8KK2VudW0geworCU5FVF9ERUNORVRfQ09ORl9MT09QQkFDSyA9IC0yLAorCU5FVF9ERUNORVRfQ09ORl9ERENNUCA9IC0zLAorCU5FVF9ERUNORVRfQ09ORl9QUFAgPSAtNCwKKwlORVRfREVDTkVUX0NPTkZfWDI1ID0gLTUsCisJTkVUX0RFQ05FVF9DT05GX0dSRSA9IC02LAorCU5FVF9ERUNORVRfQ09ORl9FVEhFUiA9IC03CisKKwkvKiAuLi4gYW5kIGlmaW5kZXggb2YgZGV2aWNlcyAqLworfTsKKworLyogL3Byb2Mvc3lzL25ldC9kZWNuZXQvY29uZi88ZGV2Pi8gKi8KK2VudW0geworCU5FVF9ERUNORVRfQ09ORl9ERVZfUFJJT1JJVFkgPSAxLAorCU5FVF9ERUNORVRfQ09ORl9ERVZfVDEgPSAyLAorCU5FVF9ERUNORVRfQ09ORl9ERVZfVDIgPSAzLAorCU5FVF9ERUNORVRfQ09ORl9ERVZfVDMgPSA0LAorCU5FVF9ERUNORVRfQ09ORl9ERVZfRk9SV0FSRElORyA9IDUsCisJTkVUX0RFQ05FVF9DT05GX0RFVl9CTEtTSVpFID0gNiwKKwlORVRfREVDTkVUX0NPTkZfREVWX1NUQVRFID0gNworfTsKKworLyogL3Byb2Mvc3lzL25ldC9zY3RwICovCitlbnVtIHsKKwlORVRfU0NUUF9SVE9fSU5JVElBTCA9IDEsCisJTkVUX1NDVFBfUlRPX01JTiAgICAgPSAyLAorCU5FVF9TQ1RQX1JUT19NQVggICAgID0gMywKKwlORVRfU0NUUF9SVE9fQUxQSEEgICA9IDQsCisJTkVUX1NDVFBfUlRPX0JFVEEgICAgPSA1LAorCU5FVF9TQ1RQX1ZBTElEX0NPT0tJRV9MSUZFICAgICAgID0gIDYsCisJTkVUX1NDVFBfQVNTT0NJQVRJT05fTUFYX1JFVFJBTlMgPSAgNywKKwlORVRfU0NUUF9QQVRIX01BWF9SRVRSQU5TICAgICAgICA9ICA4LAorCU5FVF9TQ1RQX01BWF9JTklUX1JFVFJBTlNNSVRTICAgID0gIDksCisJTkVUX1NDVFBfSEJfSU5URVJWQUwgICAgICAgICAgICAgPSAxMCwKKwlORVRfU0NUUF9QUkVTRVJWRV9FTkFCTEUgICAgICAgICA9IDExLAorCU5FVF9TQ1RQX01BWF9CVVJTVCAgICAgICAgICAgICAgID0gMTIsCisJTkVUX1NDVFBfQURESVBfRU5BQkxFCQkgPSAxMywKKwlORVRfU0NUUF9QUlNDVFBfRU5BQkxFCQkgPSAxNCwKKwlORVRfU0NUUF9TTkRCVUZfUE9MSUNZCQkgPSAxNSwKKwlORVRfU0NUUF9TQUNLX1RJTUVPVVQJCSA9IDE2LAorCU5FVF9TQ1RQX1JDVkJVRl9QT0xJQ1kJCSA9IDE3LAorfTsKKworLyogL3Byb2Mvc3lzL25ldC9icmlkZ2UgKi8KK2VudW0geworCU5FVF9CUklER0VfTkZfQ0FMTF9BUlBUQUJMRVMgPSAxLAorCU5FVF9CUklER0VfTkZfQ0FMTF9JUFRBQkxFUyA9IDIsCisJTkVUX0JSSURHRV9ORl9DQUxMX0lQNlRBQkxFUyA9IDMsCisJTkVUX0JSSURHRV9ORl9GSUxURVJfVkxBTl9UQUdHRUQgPSA0LAorCU5FVF9CUklER0VfTkZfRklMVEVSX1BQUE9FX1RBR0dFRCA9IDUsCit9OworCisvKiBwcm9jL3N5cy9uZXQvaXJkYSAqLworZW51bSB7CisJTkVUX0lSREFfRElTQ09WRVJZPTEsCisJTkVUX0lSREFfREVWTkFNRT0yLAorCU5FVF9JUkRBX0RFQlVHPTMsCisJTkVUX0lSREFfRkFTVF9QT0xMPTQsCisJTkVUX0lSREFfRElTQ09WRVJZX1NMT1RTPTUsCisJTkVUX0lSREFfRElTQ09WRVJZX1RJTUVPVVQ9NiwKKwlORVRfSVJEQV9TTE9UX1RJTUVPVVQ9NywKKwlORVRfSVJEQV9NQVhfQkFVRF9SQVRFPTgsCisJTkVUX0lSREFfTUlOX1RYX1RVUk5fVElNRT05LAorCU5FVF9JUkRBX01BWF9UWF9EQVRBX1NJWkU9MTAsCisJTkVUX0lSREFfTUFYX1RYX1dJTkRPVz0xMSwKKwlORVRfSVJEQV9NQVhfTk9SRVBMWV9USU1FPTEyLAorCU5FVF9JUkRBX1dBUk5fTk9SRVBMWV9USU1FPTEzLAorCU5FVF9JUkRBX0xBUF9LRUVQQUxJVkVfVElNRT0xNCwKK307CisKKworLyogQ1RMX0ZTIG5hbWVzOiAqLworZW51bQoreworCUZTX05SSU5PREU9MSwJLyogaW50OmN1cnJlbnQgbnVtYmVyIG9mIGFsbG9jYXRlZCBpbm9kZXMgKi8KKwlGU19TVEFUSU5PREU9MiwKKwlGU19NQVhJTk9ERT0zLAkvKiBpbnQ6bWF4aW11bSBudW1iZXIgb2YgaW5vZGVzIHRoYXQgY2FuIGJlIGFsbG9jYXRlZCAqLworCUZTX05SRFFVT1Q9NCwJLyogaW50OmN1cnJlbnQgbnVtYmVyIG9mIGFsbG9jYXRlZCBkcXVvdHMgKi8KKwlGU19NQVhEUVVPVD01LAkvKiBpbnQ6bWF4aW11bSBudW1iZXIgb2YgZHF1b3RzIHRoYXQgY2FuIGJlIGFsbG9jYXRlZCAqLworCUZTX05SRklMRT02LAkvKiBpbnQ6Y3VycmVudCBudW1iZXIgb2YgYWxsb2NhdGVkIGZpbGVkZXNjcmlwdG9ycyAqLworCUZTX01BWEZJTEU9NywJLyogaW50Om1heGltdW0gbnVtYmVyIG9mIGZpbGVkZXNjcmlwdG9ycyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQgKi8KKwlGU19ERU5UUlk9OCwKKwlGU19OUlNVUEVSPTksCS8qIGludDpjdXJyZW50IG51bWJlciBvZiBhbGxvY2F0ZWQgc3VwZXJfYmxvY2tzICovCisJRlNfTUFYU1VQRVI9MTAsCS8qIGludDptYXhpbXVtIG51bWJlciBvZiBzdXBlcl9ibG9ja3MgdGhhdCBjYW4gYmUgYWxsb2NhdGVkICovCisJRlNfT1ZFUkZMT1dVSUQ9MTEsCS8qIGludDogb3ZlcmZsb3cgVUlEICovCisJRlNfT1ZFUkZMT1dHSUQ9MTIsCS8qIGludDogb3ZlcmZsb3cgR0lEICovCisJRlNfTEVBU0VTPTEzLAkvKiBpbnQ6IGxlYXNlcyBlbmFibGVkICovCisJRlNfRElSX05PVElGWT0xNCwJLyogaW50OiBkaXJlY3Rvcnkgbm90aWZpY2F0aW9uIGVuYWJsZWQgKi8KKwlGU19MRUFTRV9USU1FPTE1LAkvKiBpbnQ6IG1heGltdW0gdGltZSB0byB3YWl0IGZvciBhIGxlYXNlIGJyZWFrICovCisJRlNfRFFTVEFUUz0xNiwJLyogZGlzYyBxdW90YSB1c2FnZSBzdGF0aXN0aWNzIGFuZCBjb250cm9sICovCisJRlNfWEZTPTE3LAkvKiBzdHJ1Y3Q6IGNvbnRyb2wgeGZzIHBhcmFtZXRlcnMgKi8KKwlGU19BSU9fTlI9MTgsCS8qIGN1cnJlbnQgc3lzdGVtLXdpZGUgbnVtYmVyIG9mIGFpbyByZXF1ZXN0cyAqLworCUZTX0FJT19NQVhfTlI9MTksCS8qIHN5c3RlbS13aWRlIG1heGltdW0gbnVtYmVyIG9mIGFpbyByZXF1ZXN0cyAqLworCUZTX0lOT1RJRlk9MjAsCS8qIGlub3RpZnkgc3VibWVudSAqLworCUZTX09DRlMyPTk4OCwJLyogb2NmczIgKi8KK307CisKKy8qIC9wcm9jL3N5cy9mcy9xdW90YS8gKi8KK2VudW0geworCUZTX0RRX0xPT0tVUFMgPSAxLAorCUZTX0RRX0RST1BTID0gMiwKKwlGU19EUV9SRUFEUyA9IDMsCisJRlNfRFFfV1JJVEVTID0gNCwKKwlGU19EUV9DQUNIRV9ISVRTID0gNSwKKwlGU19EUV9BTExPQ0FURUQgPSA2LAorCUZTX0RRX0ZSRUUgPSA3LAorCUZTX0RRX1NZTkNTID0gOCwKKwlGU19EUV9XQVJOSU5HUyA9IDksCit9OworCisvKiBDVExfREVCVUcgbmFtZXM6ICovCisKKy8qIENUTF9ERVYgbmFtZXM6ICovCitlbnVtIHsKKwlERVZfQ0RST009MSwKKwlERVZfSFdNT049MiwKKwlERVZfUEFSUE9SVD0zLAorCURFVl9SQUlEPTQsCisJREVWX01BQ19ISUQ9NSwKKwlERVZfU0NTST02LAorCURFVl9JUE1JPTcsCit9OworCisvKiAvcHJvYy9zeXMvZGV2L2Nkcm9tICovCitlbnVtIHsKKwlERVZfQ0RST01fSU5GTz0xLAorCURFVl9DRFJPTV9BVVRPQ0xPU0U9MiwKKwlERVZfQ0RST01fQVVUT0VKRUNUPTMsCisJREVWX0NEUk9NX0RFQlVHPTQsCisJREVWX0NEUk9NX0xPQ0s9NSwKKwlERVZfQ0RST01fQ0hFQ0tfTUVESUE9NgorfTsKKworLyogL3Byb2Mvc3lzL2Rldi9wYXJwb3J0ICovCitlbnVtIHsKKwlERVZfUEFSUE9SVF9ERUZBVUxUPS0zCit9OworCisvKiAvcHJvYy9zeXMvZGV2L3JhaWQgKi8KK2VudW0geworCURFVl9SQUlEX1NQRUVEX0xJTUlUX01JTj0xLAorCURFVl9SQUlEX1NQRUVEX0xJTUlUX01BWD0yCit9OworCisvKiAvcHJvYy9zeXMvZGV2L3BhcnBvcnQvZGVmYXVsdCAqLworZW51bSB7CisJREVWX1BBUlBPUlRfREVGQVVMVF9USU1FU0xJQ0U9MSwKKwlERVZfUEFSUE9SVF9ERUZBVUxUX1NQSU5USU1FPTIKK307CisKKy8qIC9wcm9jL3N5cy9kZXYvcGFycG9ydC9wYXJwb3J0IG4gKi8KK2VudW0geworCURFVl9QQVJQT1JUX1NQSU5USU1FPTEsCisJREVWX1BBUlBPUlRfQkFTRV9BRERSPTIsCisJREVWX1BBUlBPUlRfSVJRPTMsCisJREVWX1BBUlBPUlRfRE1BPTQsCisJREVWX1BBUlBPUlRfTU9ERVM9NSwKKwlERVZfUEFSUE9SVF9ERVZJQ0VTPTYsCisJREVWX1BBUlBPUlRfQVVUT1BST0JFPTE2Cit9OworCisvKiAvcHJvYy9zeXMvZGV2L3BhcnBvcnQvcGFycG9ydCBuL2RldmljZXMvICovCitlbnVtIHsKKwlERVZfUEFSUE9SVF9ERVZJQ0VTX0FDVElWRT0tMywKK307CisKKy8qIC9wcm9jL3N5cy9kZXYvcGFycG9ydC9wYXJwb3J0IG4vZGV2aWNlcy9kZXZpY2UgbiAqLworZW51bSB7CisJREVWX1BBUlBPUlRfREVWSUNFX1RJTUVTTElDRT0xLAorfTsKKworLyogL3Byb2Mvc3lzL2Rldi9tYWNfaGlkICovCitlbnVtIHsKKwlERVZfTUFDX0hJRF9LRVlCT0FSRF9TRU5EU19MSU5VWF9LRVlDT0RFUz0xLAorCURFVl9NQUNfSElEX0tFWUJPQVJEX0xPQ0tfS0VZQ09ERVM9MiwKKwlERVZfTUFDX0hJRF9NT1VTRV9CVVRUT05fRU1VTEFUSU9OPTMsCisJREVWX01BQ19ISURfTU9VU0VfQlVUVE9OMl9LRVlDT0RFPTQsCisJREVWX01BQ19ISURfTU9VU0VfQlVUVE9OM19LRVlDT0RFPTUsCisJREVWX01BQ19ISURfQURCX01PVVNFX1NFTkRTX0tFWUNPREVTPTYKK307CisKKy8qIC9wcm9jL3N5cy9kZXYvc2NzaSAqLworZW51bSB7CisJREVWX1NDU0lfTE9HR0lOR19MRVZFTD0xLAorfTsKKworLyogL3Byb2Mvc3lzL2Rldi9pcG1pICovCitlbnVtIHsKKwlERVZfSVBNSV9QT1dFUk9GRl9QT1dFUkNZQ0xFPTEsCit9OworCisvKiAvcHJvYy9zeXMvYWJpICovCitlbnVtCit7CisJQUJJX0RFRkhBTkRMRVJfQ09GRj0xLAkvKiBkZWZhdWx0IGhhbmRsZXIgZm9yIGNvZmYgYmluYXJpZXMgKi8KKwlBQklfREVGSEFORExFUl9FTEY9MiwgCS8qIGRlZmF1bHQgaGFuZGxlciBmb3IgRUxGIGJpbmFyaWVzICovCisJQUJJX0RFRkhBTkRMRVJfTENBTEw3PTMsLyogZGVmYXVsdCBoYW5kbGVyIGZvciBwcm9jcyB1c2luZyBsY2FsbDcgKi8KKwlBQklfREVGSEFORExFUl9MSUJDU089NCwvKiBkZWZhdWx0IGhhbmRsZXIgZm9yIGFuIGxpYmMuc28gRUxGIGludGVycCAqLworCUFCSV9UUkFDRT01LAkJLyogdHJhY2luZyBmbGFncyAqLworCUFCSV9GQUtFX1VUU05BTUU9NiwJLyogZmFrZSB0YXJnZXQgdXRzbmFtZSBpbmZvcm1hdGlvbiAqLworfTsKKworCisjZW5kaWYgLyogX0xJTlVYX1NZU0NUTF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGFza3N0YXRzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGFza3N0YXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ2NmU1NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC90YXNrc3RhdHMuaApAQCAtMCwwICsxLDIxMyBAQAorLyogdGFza3N0YXRzLmggLSBleHBvcnRpbmcgcGVyLXRhc2sgc3RhdGlzdGljcworICoKKyAqIENvcHlyaWdodCAoQykgU2hhaWxhYmggTmFnYXIsIElCTSBDb3JwLiAyMDA2CisgKiAgICAgICAgICAgKEMpIEJhbGJpciBTaW5naCwgICBJQk0gQ29ycC4gMjAwNgorICogICAgICAgICAgIChDKSBKYXkgTGFuLCAgICAgICAgU0dJLCAyMDA2CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIuMSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgX0xJTlVYX1RBU0tTVEFUU19ICisjZGVmaW5lIF9MSU5VWF9UQVNLU1RBVFNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogRm9ybWF0IGZvciBwZXItdGFzayBkYXRhIHJldHVybmVkIHRvIHVzZXJsYW5kIHdoZW4KKyAqCS0gYSB0YXNrIGV4aXRzCisgKgktIGxpc3RlbmVyIHJlcXVlc3RzIHN0YXRzIGZvciBhIHRhc2sKKyAqCisgKiBUaGUgc3RydWN0IGlzIHZlcnNpb25lZC4gTmV3ZXIgdmVyc2lvbnMgc2hvdWxkIG9ubHkgYWRkIGZpZWxkcyB0bworICogdGhlIGJvdHRvbSBvZiB0aGUgc3RydWN0IHRvIG1haW50YWluIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisgKgorICoKKyAqIFRvIGFkZCBuZXcgZmllbGRzCisgKglhKSBidW1wIHVwIFRBU0tTVEFUU19WRVJTSU9OCisgKgliKSBhZGQgY29tbWVudCBpbmRpY2F0aW5nIG5ldyB2ZXJzaW9uIG51bWJlciBhdCBlbmQgb2Ygc3RydWN0CisgKgljKSBhZGQgbmV3IGZpZWxkcyBhZnRlciB2ZXJzaW9uIGNvbW1lbnQ7IG1haW50YWluIDY0LWJpdCBhbGlnbm1lbnQKKyAqLworCisKKyNkZWZpbmUgVEFTS1NUQVRTX1ZFUlNJT04JOAorI2RlZmluZSBUU19DT01NX0xFTgkJMzIJLyogc2hvdWxkIGJlID49IFRBU0tfQ09NTV9MRU4KKwkJCQkJICogaW4gbGludXgvc2NoZWQuaCAqLworCitzdHJ1Y3QgdGFza3N0YXRzIHsKKworCS8qIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIHN0cnVjdC4gVGhpcyBmaWVsZCBpcyBhbHdheXMgc2V0IHRvCisJICogVEFLU1RBVFNfVkVSU0lPTiwgd2hpY2ggaXMgZGVmaW5lZCBpbiA8bGludXgvdGFza3N0YXRzLmg+LgorCSAqIEVhY2ggdGltZSB0aGUgc3RydWN0IGlzIGNoYW5nZWQsIHRoZSB2YWx1ZSBzaG91bGQgYmUgaW5jcmVtZW50ZWQuCisJICovCisJX191MTYJdmVyc2lvbjsKKwlfX3UzMglhY19leGl0Y29kZTsJCS8qIEV4aXQgc3RhdHVzICovCisKKwkvKiBUaGUgYWNjb3VudGluZyBmbGFncyBvZiBhIHRhc2sgYXMgZGVmaW5lZCBpbiA8bGludXgvYWNjdC5oPgorCSAqIERlZmluZWQgdmFsdWVzIGFyZSBBRk9SSywgQVNVLCBBQ09NUEFULCBBQ09SRSwgYW5kIEFYU0lHLgorCSAqLworCV9fdTgJYWNfZmxhZzsJCS8qIFJlY29yZCBmbGFncyAqLworCV9fdTgJYWNfbmljZTsJCS8qIHRhc2tfbmljZSAqLworCisJLyogRGVsYXkgYWNjb3VudGluZyBmaWVsZHMgc3RhcnQKKwkgKgorCSAqIEFsbCB2YWx1ZXMsIHVudGlsIGNvbW1lbnQgIkRlbGF5IGFjY291bnRpbmcgZmllbGRzIGVuZCIgYXJlCisJICogYXZhaWxhYmxlIG9ubHkgaWYgZGVsYXkgYWNjb3VudGluZyBpcyBlbmFibGVkLCBldmVuIHRob3VnaCB0aGUgbGFzdAorCSAqIGZldyBmaWVsZHMgYXJlIG5vdCBkZWxheXMKKwkgKgorCSAqIHh4eF9jb3VudCBpcyB0aGUgbnVtYmVyIG9mIGRlbGF5IHZhbHVlcyByZWNvcmRlZAorCSAqIHh4eF9kZWxheV90b3RhbCBpcyB0aGUgY29ycmVzcG9uZGluZyBjdW11bGF0aXZlIGRlbGF5IGluIG5hbm9zZWNvbmRzCisJICoKKwkgKiB4eHhfZGVsYXlfdG90YWwgd3JhcHMgYXJvdW5kIHRvIHplcm8gb24gb3ZlcmZsb3cKKwkgKiB4eHhfY291bnQgaW5jcmVtZW50ZWQgcmVnYXJkbGVzcyBvZiBvdmVyZmxvdworCSAqLworCisJLyogRGVsYXkgd2FpdGluZyBmb3IgY3B1LCB3aGlsZSBydW5uYWJsZQorCSAqIGNvdW50LCBkZWxheV90b3RhbCBOT1QgdXBkYXRlZCBhdG9taWNhbGx5CisJICovCisJX191NjQJY3B1X2NvdW50IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKKwlfX3U2NAljcHVfZGVsYXlfdG90YWw7CisKKwkvKiBGb2xsb3dpbmcgZm91ciBmaWVsZHMgYXRvbWljYWxseSB1cGRhdGVkIHVzaW5nIHRhc2stPmRlbGF5cy0+bG9jayAqLworCisJLyogRGVsYXkgd2FpdGluZyBmb3Igc3luY2hyb25vdXMgYmxvY2sgSS9PIHRvIGNvbXBsZXRlCisJICogZG9lcyBub3QgYWNjb3VudCBmb3IgZGVsYXlzIGluIEkvTyBzdWJtaXNzaW9uCisJICovCisJX191NjQJYmxraW9fY291bnQ7CisJX191NjQJYmxraW9fZGVsYXlfdG90YWw7CisKKwkvKiBEZWxheSB3YWl0aW5nIGZvciBwYWdlIGZhdWx0IEkvTyAoc3dhcCBpbiBvbmx5KSAqLworCV9fdTY0CXN3YXBpbl9jb3VudDsKKwlfX3U2NAlzd2FwaW5fZGVsYXlfdG90YWw7CisKKwkvKiBjcHUgIndhbGwtY2xvY2siIHJ1bm5pbmcgdGltZQorCSAqIE9uIHNvbWUgYXJjaGl0ZWN0dXJlcywgdmFsdWUgd2lsbCBhZGp1c3QgZm9yIGNwdSB0aW1lIHN0b2xlbgorCSAqIGZyb20gdGhlIGtlcm5lbCBpbiBpbnZvbHVudGFyeSB3YWl0cyBkdWUgdG8gdmlydHVhbGl6YXRpb24uCisJICogVmFsdWUgaXMgY3VtdWxhdGl2ZSwgaW4gbmFub3NlY29uZHMsIHdpdGhvdXQgYSBjb3JyZXNwb25kaW5nIGNvdW50CisJICogYW5kIHdyYXBzIGFyb3VuZCB0byB6ZXJvIHNpbGVudGx5IG9uIG92ZXJmbG93CisJICovCisJX191NjQJY3B1X3J1bl9yZWFsX3RvdGFsOworCisJLyogY3B1ICJ2aXJ0dWFsIiBydW5uaW5nIHRpbWUKKwkgKiBVc2VzIHRpbWUgaW50ZXJ2YWxzIHNlZW4gYnkgdGhlIGtlcm5lbCBpLmUuIG5vIGFkanVzdG1lbnQKKwkgKiBmb3Iga2VybmVsJ3MgaW52b2x1bnRhcnkgd2FpdHMgZHVlIHRvIHZpcnR1YWxpemF0aW9uLgorCSAqIFZhbHVlIGlzIGN1bXVsYXRpdmUsIGluIG5hbm9zZWNvbmRzLCB3aXRob3V0IGEgY29ycmVzcG9uZGluZyBjb3VudAorCSAqIGFuZCB3cmFwcyBhcm91bmQgdG8gemVybyBzaWxlbnRseSBvbiBvdmVyZmxvdworCSAqLworCV9fdTY0CWNwdV9ydW5fdmlydHVhbF90b3RhbDsKKwkvKiBEZWxheSBhY2NvdW50aW5nIGZpZWxkcyBlbmQgKi8KKwkvKiB2ZXJzaW9uIDEgZW5kcyBoZXJlICovCisKKwkvKiBCYXNpYyBBY2NvdW50aW5nIEZpZWxkcyBzdGFydCAqLworCWNoYXIJYWNfY29tbVtUU19DT01NX0xFTl07CS8qIENvbW1hbmQgbmFtZSAqLworCV9fdTgJYWNfc2NoZWQgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOworCQkJCQkvKiBTY2hlZHVsaW5nIGRpc2NpcGxpbmUgKi8KKwlfX3U4CWFjX3BhZFszXTsKKwlfX3UzMglhY191aWQgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOworCQkJCQkvKiBVc2VyIElEICovCisJX191MzIJYWNfZ2lkOwkJCS8qIEdyb3VwIElEICovCisJX191MzIJYWNfcGlkOwkJCS8qIFByb2Nlc3MgSUQgKi8KKwlfX3UzMglhY19wcGlkOwkJLyogUGFyZW50IHByb2Nlc3MgSUQgKi8KKwlfX3UzMglhY19idGltZTsJCS8qIEJlZ2luIHRpbWUgW3NlYyBzaW5jZSAxOTcwXSAqLworCV9fdTY0CWFjX2V0aW1lIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKKwkJCQkJLyogRWxhcHNlZCB0aW1lIFt1c2VjXSAqLworCV9fdTY0CWFjX3V0aW1lOwkJLyogVXNlciBDUFUgdGltZSBbdXNlY10gKi8KKwlfX3U2NAlhY19zdGltZTsJCS8qIFNZc3RlbSBDUFUgdGltZSBbdXNlY10gKi8KKwlfX3U2NAlhY19taW5mbHQ7CQkvKiBNaW5vciBQYWdlIEZhdWx0IENvdW50ICovCisJX191NjQJYWNfbWFqZmx0OwkJLyogTWFqb3IgUGFnZSBGYXVsdCBDb3VudCAqLworCS8qIEJhc2ljIEFjY291bnRpbmcgRmllbGRzIGVuZCAqLworCisJLyogRXh0ZW5kZWQgYWNjb3VudGluZyBmaWVsZHMgc3RhcnQgKi8KKwkvKiBBY2N1bXVsYXRlZCBSU1MgdXNhZ2UgaW4gZHVyYXRpb24gb2YgYSB0YXNrLCBpbiBNQnl0ZXMtdXNlY3MuCisJICogVGhlIGN1cnJlbnQgcnNzIHVzYWdlIGlzIGFkZGVkIHRvIHRoaXMgY291bnRlciBldmVyeSB0aW1lCisJICogYSB0aWNrIGlzIGNoYXJnZWQgdG8gYSB0YXNrJ3Mgc3lzdGVtIHRpbWUuIFNvLCBhdCB0aGUgZW5kIHdlCisJICogd2lsbCBoYXZlIG1lbW9yeSB1c2FnZSBtdWx0aXBsaWVkIGJ5IHN5c3RlbSB0aW1lLiBUaHVzIGFuCisJICogYXZlcmFnZSB1c2FnZSBwZXIgc3lzdGVtIHRpbWUgdW5pdCBjYW4gYmUgY2FsY3VsYXRlZC4KKwkgKi8KKwlfX3U2NAljb3JlbWVtOwkJLyogYWNjdW11bGF0ZWQgUlNTIHVzYWdlIGluIE1CLXVzZWMgKi8KKwkvKiBBY2N1bXVsYXRlZCB2aXJ0dWFsIG1lbW9yeSB1c2FnZSBpbiBkdXJhdGlvbiBvZiBhIHRhc2suCisJICogU2FtZSBhcyBhY2N0X3Jzc19tZW0xIGFib3ZlIGV4Y2VwdCB0aGF0IHdlIGtlZXAgdHJhY2sgb2YgVk0gdXNhZ2UuCisJICovCisJX191NjQJdmlydG1lbTsJCS8qIGFjY3VtdWxhdGVkIFZNICB1c2FnZSBpbiBNQi11c2VjICovCisKKwkvKiBIaWdoIHdhdGVybWFyayBvZiBSU1MgYW5kIHZpcnR1YWwgbWVtb3J5IHVzYWdlIGluIGR1cmF0aW9uIG9mCisJICogYSB0YXNrLCBpbiBLQnl0ZXMuCisJICovCisJX191NjQJaGl3YXRlcl9yc3M7CQkvKiBIaWdoLXdhdGVybWFyayBvZiBSU1MgdXNhZ2UsIGluIEtCICovCisJX191NjQJaGl3YXRlcl92bTsJCS8qIEhpZ2gtd2F0ZXIgVk0gdXNhZ2UsIGluIEtCICovCisKKwkvKiBUaGUgZm9sbG93aW5nIGZvdXIgZmllbGRzIGFyZSBJL08gc3RhdGlzdGljcyBvZiBhIHRhc2suICovCisJX191NjQJcmVhZF9jaGFyOwkJLyogYnl0ZXMgcmVhZCAqLworCV9fdTY0CXdyaXRlX2NoYXI7CQkvKiBieXRlcyB3cml0dGVuICovCisJX191NjQJcmVhZF9zeXNjYWxsczsJCS8qIHJlYWQgc3lzY2FsbHMgKi8KKwlfX3U2NAl3cml0ZV9zeXNjYWxsczsJCS8qIHdyaXRlIHN5c2NhbGxzICovCisJLyogRXh0ZW5kZWQgYWNjb3VudGluZyBmaWVsZHMgZW5kICovCisKKyNkZWZpbmUgVEFTS1NUQVRTX0hBU19JT19BQ0NPVU5USU5HCisJLyogUGVyLXRhc2sgc3RvcmFnZSBJL08gYWNjb3VudGluZyBzdGFydHMgKi8KKwlfX3U2NAlyZWFkX2J5dGVzOwkJLyogYnl0ZXMgb2YgcmVhZCBJL08gKi8KKwlfX3U2NAl3cml0ZV9ieXRlczsJCS8qIGJ5dGVzIG9mIHdyaXRlIEkvTyAqLworCV9fdTY0CWNhbmNlbGxlZF93cml0ZV9ieXRlczsJLyogYnl0ZXMgb2YgY2FuY2VsbGVkIHdyaXRlIEkvTyAqLworCisJX191NjQgIG52Y3N3OwkJCS8qIHZvbHVudGFyeV9jdHh0X3N3aXRjaGVzICovCisJX191NjQgIG5pdmNzdzsJCQkvKiBub252b2x1bnRhcnlfY3R4dF9zd2l0Y2hlcyAqLworCisJLyogdGltZSBhY2NvdW50aW5nIGZvciBTTVQgbWFjaGluZXMgKi8KKwlfX3U2NAlhY191dGltZXNjYWxlZDsJCS8qIHV0aW1lIHNjYWxlZCBvbiBmcmVxdWVuY3kgZXRjICovCisJX191NjQJYWNfc3RpbWVzY2FsZWQ7CQkvKiBzdGltZSBzY2FsZWQgb24gZnJlcXVlbmN5IGV0YyAqLworCV9fdTY0CWNwdV9zY2FsZWRfcnVuX3JlYWxfdG90YWw7IC8qIHNjYWxlZCBjcHVfcnVuX3JlYWxfdG90YWwgKi8KKworCS8qIERlbGF5IHdhaXRpbmcgZm9yIG1lbW9yeSByZWNsYWltICovCisJX191NjQJZnJlZXBhZ2VzX2NvdW50OworCV9fdTY0CWZyZWVwYWdlc19kZWxheV90b3RhbDsKK307CisKKworLyoKKyAqIENvbW1hbmRzIHNlbnQgZnJvbSB1c2Vyc3BhY2UKKyAqIE5vdCB2ZXJzaW9uZWQuIE5ldyBjb21tYW5kcyBzaG91bGQgb25seSBiZSBpbnNlcnRlZCBhdCB0aGUgZW51bSdzIGVuZAorICogcHJpb3IgdG8gX19UQVNLU1RBVFNfQ01EX01BWAorICovCisKK2VudW0geworCVRBU0tTVEFUU19DTURfVU5TUEVDID0gMCwJLyogUmVzZXJ2ZWQgKi8KKwlUQVNLU1RBVFNfQ01EX0dFVCwJCS8qIHVzZXItPmtlcm5lbCByZXF1ZXN0L2dldC1yZXNwb25zZSAqLworCVRBU0tTVEFUU19DTURfTkVXLAkJLyoga2VybmVsLT51c2VyIGV2ZW50ICovCisJX19UQVNLU1RBVFNfQ01EX01BWCwKK307CisKKyNkZWZpbmUgVEFTS1NUQVRTX0NNRF9NQVggKF9fVEFTS1NUQVRTX0NNRF9NQVggLSAxKQorCitlbnVtIHsKKwlUQVNLU1RBVFNfVFlQRV9VTlNQRUMgPSAwLAkvKiBSZXNlcnZlZCAqLworCVRBU0tTVEFUU19UWVBFX1BJRCwJCS8qIFByb2Nlc3MgaWQgKi8KKwlUQVNLU1RBVFNfVFlQRV9UR0lELAkJLyogVGhyZWFkIGdyb3VwIGlkICovCisJVEFTS1NUQVRTX1RZUEVfU1RBVFMsCQkvKiB0YXNrc3RhdHMgc3RydWN0dXJlICovCisJVEFTS1NUQVRTX1RZUEVfQUdHUl9QSUQsCS8qIGNvbnRhaW5zIHBpZCArIHN0YXRzICovCisJVEFTS1NUQVRTX1RZUEVfQUdHUl9UR0lELAkvKiBjb250YWlucyB0Z2lkICsgc3RhdHMgKi8KKwlUQVNLU1RBVFNfVFlQRV9OVUxMLAkJLyogY29udGFpbnMgbm90aGluZyAqLworCV9fVEFTS1NUQVRTX1RZUEVfTUFYLAorfTsKKworI2RlZmluZSBUQVNLU1RBVFNfVFlQRV9NQVggKF9fVEFTS1NUQVRTX1RZUEVfTUFYIC0gMSkKKworZW51bSB7CisJVEFTS1NUQVRTX0NNRF9BVFRSX1VOU1BFQyA9IDAsCisJVEFTS1NUQVRTX0NNRF9BVFRSX1BJRCwKKwlUQVNLU1RBVFNfQ01EX0FUVFJfVEdJRCwKKwlUQVNLU1RBVFNfQ01EX0FUVFJfUkVHSVNURVJfQ1BVTUFTSywKKwlUQVNLU1RBVFNfQ01EX0FUVFJfREVSRUdJU1RFUl9DUFVNQVNLLAorCV9fVEFTS1NUQVRTX0NNRF9BVFRSX01BWCwKK307CisKKyNkZWZpbmUgVEFTS1NUQVRTX0NNRF9BVFRSX01BWCAoX19UQVNLU1RBVFNfQ01EX0FUVFJfTUFYIC0gMSkKKworLyogTkVUTElOS19HRU5FUklDIHJlbGF0ZWQgaW5mbyAqLworCisjZGVmaW5lIFRBU0tTVEFUU19HRU5MX05BTUUJIlRBU0tTVEFUUyIKKyNkZWZpbmUgVEFTS1NUQVRTX0dFTkxfVkVSU0lPTgkweDEKKworI2VuZGlmIC8qIF9MSU5VWF9UQVNLU1RBVFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3RjX2FjdC90Y19jc3VtLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGNfYWN0L3RjX2NzdW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDQ3YzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3RjX2FjdC90Y19jc3VtLmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBfX0xJTlVYX1RDX0NTVU1fSAorI2RlZmluZSBfX0xJTlVYX1RDX0NTVU1fSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wa3RfY2xzLmg+CisKKyNkZWZpbmUgVENBX0FDVF9DU1VNIDE2CisKK2VudW0geworCVRDQV9DU1VNX1VOU1BFQywKKwlUQ0FfQ1NVTV9QQVJNUywKKwlUQ0FfQ1NVTV9UTSwKKwlfX1RDQV9DU1VNX01BWAorfTsKKyNkZWZpbmUgVENBX0NTVU1fTUFYIChfX1RDQV9DU1VNX01BWCAtIDEpCisKK2VudW0geworCVRDQV9DU1VNX1VQREFURV9GTEFHX0lQVjRIRFIgPSAxLAorCVRDQV9DU1VNX1VQREFURV9GTEFHX0lDTVAgICAgPSAyLAorCVRDQV9DU1VNX1VQREFURV9GTEFHX0lHTVAgICAgPSA0LAorCVRDQV9DU1VNX1VQREFURV9GTEFHX1RDUCAgICAgPSA4LAorCVRDQV9DU1VNX1VQREFURV9GTEFHX1VEUCAgICAgPSAxNiwKKwlUQ0FfQ1NVTV9VUERBVEVfRkxBR19VRFBMSVRFID0gMzIKK307CisKK3N0cnVjdCB0Y19jc3VtIHsKKwl0Y19nZW47CisKKwlfX3UzMiB1cGRhdGVfZmxhZ3M7Cit9OworCisjZW5kaWYgLyogX19MSU5VWF9UQ19DU1VNX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC90Y19hY3QvdGNfZ2FjdC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3RjX2FjdC90Y19nYWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdiZjk0ZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC90Y19hY3QvdGNfZ2FjdC5oCkBAIC0wLDAgKzEsMzIgQEAKKyNpZm5kZWYgX19MSU5VWF9UQ19HQUNUX0gKKyNkZWZpbmUgX19MSU5VWF9UQ19HQUNUX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcGt0X2Nscy5oPgorCisjZGVmaW5lIFRDQV9BQ1RfR0FDVCA1CitzdHJ1Y3QgdGNfZ2FjdCB7CisJdGNfZ2VuOworCit9OworCitzdHJ1Y3QgdGNfZ2FjdF9wIHsKKyNkZWZpbmUgUEdBQ1RfTk9ORSAgICAgICAgICAgICAgMAorI2RlZmluZSBQR0FDVF9ORVRSQU5EICAgICAgICAgICAxCisjZGVmaW5lIFBHQUNUX0RFVEVSTSAgICAgICAgICAgIDIKKyNkZWZpbmUgTUFYX1JBTkQgICAgICAgICAgICAgICAgKFBHQUNUX0RFVEVSTSArIDEgKQorCV9fdTE2ICAgICAgICAgICAgICAgICBwdHlwZTsKKwlfX3UxNiAgICAgICAgICAgICAgICAgcHZhbDsKKwlpbnQgICAgICAgICAgICAgICAgICAgcGFjdGlvbjsKK307CisgCitlbnVtIHsKKwlUQ0FfR0FDVF9VTlNQRUMsCisJVENBX0dBQ1RfVE0sCisJVENBX0dBQ1RfUEFSTVMsCisJVENBX0dBQ1RfUFJPQiwKKwlfX1RDQV9HQUNUX01BWAorfTsKKyNkZWZpbmUgVENBX0dBQ1RfTUFYIChfX1RDQV9HQUNUX01BWCAtIDEpCisgCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC90Y19hY3QvdGNfaXB0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGNfYWN0L3RjX2lwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMzM1NTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGNfYWN0L3RjX2lwdC5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgX19MSU5VWF9UQ19JUFRfSAorI2RlZmluZSBfX0xJTlVYX1RDX0lQVF9ICisKKyNpbmNsdWRlIDxsaW51eC9wa3RfY2xzLmg+CisKKyNkZWZpbmUgVENBX0FDVF9JUFQgNgorCitlbnVtIHsKKwlUQ0FfSVBUX1VOU1BFQywKKwlUQ0FfSVBUX1RBQkxFLAorCVRDQV9JUFRfSE9PSywKKwlUQ0FfSVBUX0lOREVYLAorCVRDQV9JUFRfQ05ULAorCVRDQV9JUFRfVE0sCisJVENBX0lQVF9UQVJHLAorCV9fVENBX0lQVF9NQVgKK307CisjZGVmaW5lIFRDQV9JUFRfTUFYIChfX1RDQV9JUFRfTUFYIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC90Y19hY3QvdGNfbWlycmVkLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGNfYWN0L3RjX21pcnJlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NjE3NTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGNfYWN0L3RjX21pcnJlZC5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgX19MSU5VWF9UQ19NSVJfSAorI2RlZmluZSBfX0xJTlVYX1RDX01JUl9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BrdF9jbHMuaD4KKworI2RlZmluZSBUQ0FfQUNUX01JUlJFRCA4CisjZGVmaW5lIFRDQV9FR1JFU1NfUkVESVIgMSAgLyogcGFja2V0IHJlZGlyZWN0IHRvIEVHUkVTUyovCisjZGVmaW5lIFRDQV9FR1JFU1NfTUlSUk9SIDIgLyogbWlycm9yIHBhY2tldCB0byBFR1JFU1MgKi8KKyNkZWZpbmUgVENBX0lOR1JFU1NfUkVESVIgMyAgLyogcGFja2V0IHJlZGlyZWN0IHRvIElOR1JFU1MqLworI2RlZmluZSBUQ0FfSU5HUkVTU19NSVJST1IgNCAvKiBtaXJyb3IgcGFja2V0IHRvIElOR1JFU1MgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitzdHJ1Y3QgdGNfbWlycmVkIHsKKwl0Y19nZW47CisJaW50ICAgICAgICAgICAgICAgICAgICAgZWFjdGlvbjsgICAvKiBvbmUgb2YgSU4vRUdSRVNTX01JUlJPUi9SRURJUiAqLworCV9fdTMyICAgICAgICAgICAgICAgICAgIGlmaW5kZXg7ICAvKiBpZmluZGV4IG9mIGVncmVzcyBwb3J0ICovCit9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK2VudW0geworCVRDQV9NSVJSRURfVU5TUEVDLAorCVRDQV9NSVJSRURfVE0sCisJVENBX01JUlJFRF9QQVJNUywKKwlfX1RDQV9NSVJSRURfTUFYCit9OworI2RlZmluZSBUQ0FfTUlSUkVEX01BWCAoX19UQ0FfTUlSUkVEX01BWCAtIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGNfYWN0L3RjX25hdC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3RjX2FjdC90Y19uYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjYzYWViCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3RjX2FjdC90Y19uYXQuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIF9fTElOVVhfVENfTkFUX0gKKyNkZWZpbmUgX19MSU5VWF9UQ19OQVRfSAorCisjaW5jbHVkZSA8bGludXgvcGt0X2Nscy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgVENBX0FDVF9OQVQgOQorCitlbnVtIHsKKwlUQ0FfTkFUX1VOU1BFQywKKwlUQ0FfTkFUX1BBUk1TLAorCVRDQV9OQVRfVE0sCisJX19UQ0FfTkFUX01BWAorfTsKKyNkZWZpbmUgVENBX05BVF9NQVggKF9fVENBX05BVF9NQVggLSAxKQorCisjZGVmaW5lIFRDQV9OQVRfRkxBR19FR1JFU1MgMQorCitzdHJ1Y3QgdGNfbmF0IHsKKwl0Y19nZW47CisJX19iZTMyIG9sZF9hZGRyOworCV9fYmUzMiBuZXdfYWRkcjsKKwlfX2JlMzIgbWFzazsKKwlfX3UzMiBmbGFnczsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3RjX2FjdC90Y19wZWRpdC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3RjX2FjdC90Y19wZWRpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNmNmYWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGNfYWN0L3RjX3BlZGl0LmgKQEAgLTAsMCArMSwzNCBAQAorI2lmbmRlZiBfX0xJTlVYX1RDX1BFRF9ICisjZGVmaW5lIF9fTElOVVhfVENfUEVEX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcGt0X2Nscy5oPgorCisjZGVmaW5lIFRDQV9BQ1RfUEVESVQgNworCitlbnVtIHsKKwlUQ0FfUEVESVRfVU5TUEVDLAorCVRDQV9QRURJVF9UTSwKKwlUQ0FfUEVESVRfUEFSTVMsCisJX19UQ0FfUEVESVRfTUFYCit9OworI2RlZmluZSBUQ0FfUEVESVRfTUFYIChfX1RDQV9QRURJVF9NQVggLSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK3N0cnVjdCB0Y19wZWRpdF9rZXkgeworCV9fdTMyICAgICAgICAgICBtYXNrOyAgLyogQU5EICovCisJX191MzIgICAgICAgICAgIHZhbDsgICAvKlhPUiAqLworCV9fdTMyICAgICAgICAgICBvZmY7ICAvKm9mZnNldCAqLworCV9fdTMyICAgICAgICAgICBhdDsKKwlfX3UzMiAgICAgICAgICAgb2ZmbWFzazsKKwlfX3UzMiAgICAgICAgICAgc2hpZnQ7Cit9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK3N0cnVjdCB0Y19wZWRpdF9zZWwgeworCXRjX2dlbjsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICBua2V5czsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICBmbGFnczsKKwlzdHJ1Y3QgdGNfcGVkaXRfa2V5ICAgICBrZXlzWzBdOworfTsKKyNkZWZpbmUgdGNfcGVkaXQgdGNfcGVkaXRfc2VsCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3RjX2FjdC90Y19za2JlZGl0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGNfYWN0L3RjX3NrYmVkaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTJlOTEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3RjX2FjdC90Y19za2JlZGl0LmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUKKyAqIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgorICoKKyAqIEF1dGhvcjogQWxleGFuZGVyIER1eWNrIDxhbGV4YW5kZXIuaC5kdXlja0BpbnRlbC5jb20+CisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1RDX1NLQkVESVRfSAorI2RlZmluZSBfX0xJTlVYX1RDX1NLQkVESVRfSAorCisjaW5jbHVkZSA8bGludXgvcGt0X2Nscy5oPgorCisjZGVmaW5lIFRDQV9BQ1RfU0tCRURJVCAxMQorCisjZGVmaW5lIFNLQkVESVRfRl9QUklPUklUWQkJMHgxCisjZGVmaW5lIFNLQkVESVRfRl9RVUVVRV9NQVBQSU5HCQkweDIKKyNkZWZpbmUgU0tCRURJVF9GX01BUksJCQkweDQKKworc3RydWN0IHRjX3NrYmVkaXQgeworCXRjX2dlbjsKK307CisKK2VudW0geworCVRDQV9TS0JFRElUX1VOU1BFQywKKwlUQ0FfU0tCRURJVF9UTSwKKwlUQ0FfU0tCRURJVF9QQVJNUywKKwlUQ0FfU0tCRURJVF9QUklPUklUWSwKKwlUQ0FfU0tCRURJVF9RVUVVRV9NQVBQSU5HLAorCVRDQV9TS0JFRElUX01BUkssCisJX19UQ0FfU0tCRURJVF9NQVgKK307CisjZGVmaW5lIFRDQV9TS0JFRElUX01BWCAoX19UQ0FfU0tCRURJVF9NQVggLSAxKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC90Y19lbWF0Y2gvdGNfZW1fY21wLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGNfZW1hdGNoL3RjX2VtX2NtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNGJiMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGNfZW1hdGNoL3RjX2VtX2NtcC5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX19MSU5VWF9UQ19FTV9DTVBfSAorI2RlZmluZSBfX0xJTlVYX1RDX0VNX0NNUF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BrdF9jbHMuaD4KKworc3RydWN0IHRjZl9lbV9jbXAgeworCV9fdTMyCQl2YWw7CisJX191MzIJCW1hc2s7CisJX191MTYJCW9mZjsKKwlfX3U4CQlhbGlnbjo0OworCV9fdTgJCWZsYWdzOjQ7CisJX191OAkJbGF5ZXI6NDsKKwlfX3U4CQlvcG5kOjQ7Cit9OworCitlbnVtIHsKKwlUQ0ZfRU1fQUxJR05fVTggID0gMSwKKwlUQ0ZfRU1fQUxJR05fVTE2ID0gMiwKKwlUQ0ZfRU1fQUxJR05fVTMyID0gNAorfTsKKworI2RlZmluZSBUQ0ZfRU1fQ01QX1RSQU5TCTEKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGNfZW1hdGNoL3RjX2VtX21ldGEuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC90Y19lbWF0Y2gvdGNfZW1fbWV0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMzg5NjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGNfZW1hdGNoL3RjX2VtX21ldGEuaApAQCAtMCwwICsxLDkyIEBACisjaWZuZGVmIF9fTElOVVhfVENfRU1fTUVUQV9ICisjZGVmaW5lIF9fTElOVVhfVENfRU1fTUVUQV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BrdF9jbHMuaD4KKworZW51bSB7CisJVENBX0VNX01FVEFfVU5TUEVDLAorCVRDQV9FTV9NRVRBX0hEUiwKKwlUQ0FfRU1fTUVUQV9MVkFMVUUsCisJVENBX0VNX01FVEFfUlZBTFVFLAorCV9fVENBX0VNX01FVEFfTUFYCit9OworI2RlZmluZSBUQ0FfRU1fTUVUQV9NQVggKF9fVENBX0VNX01FVEFfTUFYIC0gMSkKKworc3RydWN0IHRjZl9tZXRhX3ZhbCB7CisJX191MTYJCQlraW5kOworCV9fdTgJCQlzaGlmdDsKKwlfX3U4CQkJb3A7Cit9OworCisjZGVmaW5lIFRDRl9NRVRBX1RZUEVfTUFTSwkoMHhmIDw8IDEyKQorI2RlZmluZSBUQ0ZfTUVUQV9UWVBFKGtpbmQpCSgoKGtpbmQpICYgVENGX01FVEFfVFlQRV9NQVNLKSA+PiAxMikKKyNkZWZpbmUgVENGX01FVEFfSURfTUFTSwkweDdmZgorI2RlZmluZSBUQ0ZfTUVUQV9JRChraW5kKQkoKGtpbmQpICYgVENGX01FVEFfSURfTUFTSykKKworZW51bSB7CisJVENGX01FVEFfVFlQRV9WQVIsCisJVENGX01FVEFfVFlQRV9JTlQsCisJX19UQ0ZfTUVUQV9UWVBFX01BWAorfTsKKyNkZWZpbmUgVENGX01FVEFfVFlQRV9NQVggKF9fVENGX01FVEFfVFlQRV9NQVggLSAxKQorCitlbnVtIHsKKwlUQ0ZfTUVUQV9JRF9WQUxVRSwKKwlUQ0ZfTUVUQV9JRF9SQU5ET00sCisJVENGX01FVEFfSURfTE9BREFWR18wLAorCVRDRl9NRVRBX0lEX0xPQURBVkdfMSwKKwlUQ0ZfTUVUQV9JRF9MT0FEQVZHXzIsCisJVENGX01FVEFfSURfREVWLAorCVRDRl9NRVRBX0lEX1BSSU9SSVRZLAorCVRDRl9NRVRBX0lEX1BST1RPQ09MLAorCVRDRl9NRVRBX0lEX1BLVFRZUEUsCisJVENGX01FVEFfSURfUEtUTEVOLAorCVRDRl9NRVRBX0lEX0RBVEFMRU4sCisJVENGX01FVEFfSURfTUFDTEVOLAorCVRDRl9NRVRBX0lEX05GTUFSSywKKwlUQ0ZfTUVUQV9JRF9UQ0lOREVYLAorCVRDRl9NRVRBX0lEX1JUQ0xBU1NJRCwKKwlUQ0ZfTUVUQV9JRF9SVElJRiwKKwlUQ0ZfTUVUQV9JRF9TS19GQU1JTFksCisJVENGX01FVEFfSURfU0tfU1RBVEUsCisJVENGX01FVEFfSURfU0tfUkVVU0UsCisJVENGX01FVEFfSURfU0tfQk9VTkRfSUYsCisJVENGX01FVEFfSURfU0tfUkVGQ05ULAorCVRDRl9NRVRBX0lEX1NLX1NIVVRET1dOLAorCVRDRl9NRVRBX0lEX1NLX1BST1RPLAorCVRDRl9NRVRBX0lEX1NLX1RZUEUsCisJVENGX01FVEFfSURfU0tfUkNWQlVGLAorCVRDRl9NRVRBX0lEX1NLX1JNRU1fQUxMT0MsCisJVENGX01FVEFfSURfU0tfV01FTV9BTExPQywKKwlUQ0ZfTUVUQV9JRF9TS19PTUVNX0FMTE9DLAorCVRDRl9NRVRBX0lEX1NLX1dNRU1fUVVFVUVELAorCVRDRl9NRVRBX0lEX1NLX1JDVl9RTEVOLAorCVRDRl9NRVRBX0lEX1NLX1NORF9RTEVOLAorIAlUQ0ZfTUVUQV9JRF9TS19FUlJfUUxFTiwKKwlUQ0ZfTUVUQV9JRF9TS19GT1JXQVJEX0FMTE9DUywKKwlUQ0ZfTUVUQV9JRF9TS19TTkRCVUYsCisgCVRDRl9NRVRBX0lEX1NLX0FMTE9DUywKKyAJVENGX01FVEFfSURfU0tfUk9VVEVfQ0FQUywKKyAJVENGX01FVEFfSURfU0tfSEFTSCwKKyAJVENGX01FVEFfSURfU0tfTElOR0VSVElNRSwKKyAJVENGX01FVEFfSURfU0tfQUNLX0JBQ0tMT0csCisgCVRDRl9NRVRBX0lEX1NLX01BWF9BQ0tfQkFDS0xPRywKKyAJVENGX01FVEFfSURfU0tfUFJJTywKKyAJVENGX01FVEFfSURfU0tfUkNWTE9XQVQsCisgCVRDRl9NRVRBX0lEX1NLX1JDVlRJTUVPLAorIAlUQ0ZfTUVUQV9JRF9TS19TTkRUSU1FTywKKyAJVENGX01FVEFfSURfU0tfU0VORE1TR19PRkYsCisgCVRDRl9NRVRBX0lEX1NLX1dSSVRFX1BFTkRJTkcsCisJVENGX01FVEFfSURfVkxBTl9UQUcsCisJVENGX01FVEFfSURfUlhIQVNILAorCV9fVENGX01FVEFfSURfTUFYCit9OworI2RlZmluZSBUQ0ZfTUVUQV9JRF9NQVggKF9fVENGX01FVEFfSURfTUFYIC0gMSkKKworc3RydWN0IHRjZl9tZXRhX2hkciB7CisJc3RydWN0IHRjZl9tZXRhX3ZhbAlsZWZ0OworCXN0cnVjdCB0Y2ZfbWV0YV92YWwJcmlnaHQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC90Y19lbWF0Y2gvdGNfZW1fbmJ5dGUuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC90Y19lbWF0Y2gvdGNfZW1fbmJ5dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTcyY2ZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3RjX2VtYXRjaC90Y19lbV9uYnl0ZS5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgX19MSU5VWF9UQ19FTV9OQllURV9ICisjZGVmaW5lIF9fTElOVVhfVENfRU1fTkJZVEVfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wa3RfY2xzLmg+CisKK3N0cnVjdCB0Y2ZfZW1fbmJ5dGUgeworCV9fdTE2CQlvZmY7CisJX191MTYJCWxlbjoxMjsKKwlfX3U4CQlsYXllcjo0OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGNfZW1hdGNoL3RjX2VtX3RleHQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC90Y19lbWF0Y2gvdGNfZW1fdGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYWM0MDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGNfZW1hdGNoL3RjX2VtX3RleHQuaApAQCAtMCwwICsxLDE5IEBACisjaWZuZGVmIF9fTElOVVhfVENfRU1fVEVYVF9ICisjZGVmaW5lIF9fTElOVVhfVENfRU1fVEVYVF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BrdF9jbHMuaD4KKworI2RlZmluZSBUQ19FTV9URVhUX0FMR09TSVoJMTYKKworc3RydWN0IHRjZl9lbV90ZXh0IHsKKwljaGFyCQlhbGdvW1RDX0VNX1RFWFRfQUxHT1NJWl07CisJX191MTYJCWZyb21fb2Zmc2V0OworCV9fdTE2CQl0b19vZmZzZXQ7CisJX191MTYJCXBhdHRlcm5fbGVuOworCV9fdTgJCWZyb21fbGF5ZXI6NDsKKwlfX3U4CQl0b19sYXllcjo0OworCV9fdTgJCXBhZDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3RjcC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3RjcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ODAxZGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGNwLmgKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJRGVmaW5pdGlvbnMgZm9yIHRoZSBUQ1AgcHJvdG9jb2wuCisgKgorICogVmVyc2lvbjoJQCgjKXRjcC5oCTEuMC4yCTA0LzI4LzkzCisgKgorICogQXV0aG9yOglGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfTElOVVhfVENQX0gKKyNkZWZpbmUgX0xJTlVYX1RDUF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKworc3RydWN0IHRjcGhkciB7CisJX19iZTE2CXNvdXJjZTsKKwlfX2JlMTYJZGVzdDsKKwlfX2JlMzIJc2VxOworCV9fYmUzMglhY2tfc2VxOworI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTE2CXJlczE6NCwKKwkJZG9mZjo0LAorCQlmaW46MSwKKwkJc3luOjEsCisJCXJzdDoxLAorCQlwc2g6MSwKKwkJYWNrOjEsCisJCXVyZzoxLAorCQllY2U6MSwKKwkJY3dyOjE7CisjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwlfX3UxNglkb2ZmOjQsCisJCXJlczE6NCwKKwkJY3dyOjEsCisJCWVjZToxLAorCQl1cmc6MSwKKwkJYWNrOjEsCisJCXBzaDoxLAorCQlyc3Q6MSwKKwkJc3luOjEsCisJCWZpbjoxOworI2Vsc2UKKyNlcnJvcgkiQWRqdXN0IHlvdXIgPGFzbS9ieXRlb3JkZXIuaD4gZGVmaW5lcyIKKyNlbmRpZgkKKwlfX2JlMTYJd2luZG93OworCV9fc3VtMTYJY2hlY2s7CisJX19iZTE2CXVyZ19wdHI7Cit9OworCisvKgorICoJVGhlIHVuaW9uIGNhc3QgdXNlcyBhIGdjYyBleHRlbnNpb24gdG8gYXZvaWQgYWxpYXNpbmcgcHJvYmxlbXMKKyAqICAodW5pb24gaXMgY29tcGF0aWJsZSB0byBhbnkgb2YgaXRzIG1lbWJlcnMpCisgKiAgVGhpcyBtZWFucyB0aGlzIHBhcnQgb2YgdGhlIGNvZGUgaXMgLWZzdHJpY3QtYWxpYXNpbmcgc2FmZSBub3cuCisgKi8KK3VuaW9uIHRjcF93b3JkX2hkciB7IAorCXN0cnVjdCB0Y3BoZHIgaGRyOworCV9fYmUzMiAJCSAgd29yZHNbNV07Cit9OyAKKworI2RlZmluZSB0Y3BfZmxhZ193b3JkKHRwKSAoICgodW5pb24gdGNwX3dvcmRfaGRyICopKHRwKSktPndvcmRzIFszXSkgCisKK2VudW0geyAKKwlUQ1BfRkxBR19DV1IgPSBfX2NwdV90b19iZTMyKDB4MDA4MDAwMDApLAorCVRDUF9GTEFHX0VDRSA9IF9fY3B1X3RvX2JlMzIoMHgwMDQwMDAwMCksCisJVENQX0ZMQUdfVVJHID0gX19jcHVfdG9fYmUzMigweDAwMjAwMDAwKSwKKwlUQ1BfRkxBR19BQ0sgPSBfX2NwdV90b19iZTMyKDB4MDAxMDAwMDApLAorCVRDUF9GTEFHX1BTSCA9IF9fY3B1X3RvX2JlMzIoMHgwMDA4MDAwMCksCisJVENQX0ZMQUdfUlNUID0gX19jcHVfdG9fYmUzMigweDAwMDQwMDAwKSwKKwlUQ1BfRkxBR19TWU4gPSBfX2NwdV90b19iZTMyKDB4MDAwMjAwMDApLAorCVRDUF9GTEFHX0ZJTiA9IF9fY3B1X3RvX2JlMzIoMHgwMDAxMDAwMCksCisJVENQX1JFU0VSVkVEX0JJVFMgPSBfX2NwdV90b19iZTMyKDB4MEYwMDAwMDApLAorCVRDUF9EQVRBX09GRlNFVCA9IF9fY3B1X3RvX2JlMzIoMHhGMDAwMDAwMCkKK307IAorCisvKgorICogVENQIGdlbmVyYWwgY29uc3RhbnRzCisgKi8KKyNkZWZpbmUgVENQX01TU19ERUZBVUxUCQkgNTM2VQkvKiBJUHY0IChSRkMxMTIyLCBSRkMyNTgxKSAqLworI2RlZmluZSBUQ1BfTVNTX0RFU0lSRUQJCTEyMjBVCS8qIElQdjYgKHR1bm5lbGVkKSwgRUROUzAgKFJGQzMyMjYpICovCisKKy8qIFRDUCBzb2NrZXQgb3B0aW9ucyAqLworI2RlZmluZSBUQ1BfTk9ERUxBWQkJMQkvKiBUdXJuIG9mZiBOYWdsZSdzIGFsZ29yaXRobS4gKi8KKyNkZWZpbmUgVENQX01BWFNFRwkJMgkvKiBMaW1pdCBNU1MgKi8KKyNkZWZpbmUgVENQX0NPUksJCTMJLyogTmV2ZXIgc2VuZCBwYXJ0aWFsbHkgY29tcGxldGUgc2VnbWVudHMgKi8KKyNkZWZpbmUgVENQX0tFRVBJRExFCQk0CS8qIFN0YXJ0IGtlZXBsaXZlcyBhZnRlciB0aGlzIHBlcmlvZCAqLworI2RlZmluZSBUQ1BfS0VFUElOVFZMCQk1CS8qIEludGVydmFsIGJldHdlZW4ga2VlcGFsaXZlcyAqLworI2RlZmluZSBUQ1BfS0VFUENOVAkJNgkvKiBOdW1iZXIgb2Yga2VlcGFsaXZlcyBiZWZvcmUgZGVhdGggKi8KKyNkZWZpbmUgVENQX1NZTkNOVAkJNwkvKiBOdW1iZXIgb2YgU1lOIHJldHJhbnNtaXRzICovCisjZGVmaW5lIFRDUF9MSU5HRVIyCQk4CS8qIExpZmUgdGltZSBvZiBvcnBoYW5lZCBGSU4tV0FJVC0yIHN0YXRlICovCisjZGVmaW5lIFRDUF9ERUZFUl9BQ0NFUFQJOQkvKiBXYWtlIHVwIGxpc3RlbmVyIG9ubHkgd2hlbiBkYXRhIGFycml2ZSAqLworI2RlZmluZSBUQ1BfV0lORE9XX0NMQU1QCTEwCS8qIEJvdW5kIGFkdmVydGlzZWQgd2luZG93ICovCisjZGVmaW5lIFRDUF9JTkZPCQkxMQkvKiBJbmZvcm1hdGlvbiBhYm91dCB0aGlzIGNvbm5lY3Rpb24uICovCisjZGVmaW5lIFRDUF9RVUlDS0FDSwkJMTIJLyogQmxvY2svcmVlbmFibGUgcXVpY2sgYWNrcyAqLworI2RlZmluZSBUQ1BfQ09OR0VTVElPTgkJMTMJLyogQ29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobSAqLworI2RlZmluZSBUQ1BfTUQ1U0lHCQkxNAkvKiBUQ1AgTUQ1IFNpZ25hdHVyZSAoUkZDMjM4NSkgKi8KKyNkZWZpbmUgVENQX0NPT0tJRV9UUkFOU0FDVElPTlMJMTUJLyogVENQIENvb2tpZSBUcmFuc2FjdGlvbnMgKi8KKyNkZWZpbmUgVENQX1RISU5fTElORUFSX1RJTUVPVVRTIDE2ICAgICAgLyogVXNlIGxpbmVhciB0aW1lb3V0cyBmb3IgdGhpbiBzdHJlYW1zKi8KKyNkZWZpbmUgVENQX1RISU5fRFVQQUNLICAgICAgICAgMTcgICAgICAvKiBGYXN0IHJldHJhbnMuIGFmdGVyIDEgZHVwYWNrICovCisjZGVmaW5lIFRDUF9VU0VSX1RJTUVPVVQJMTgJLyogSG93IGxvbmcgZm9yIGxvc3MgcmV0cnkgYmVmb3JlIHRpbWVvdXQgKi8KKworLyogZm9yIFRDUF9JTkZPIHNvY2tldCBvcHRpb24gKi8KKyNkZWZpbmUgVENQSV9PUFRfVElNRVNUQU1QUwkxCisjZGVmaW5lIFRDUElfT1BUX1NBQ0sJCTIKKyNkZWZpbmUgVENQSV9PUFRfV1NDQUxFCQk0CisjZGVmaW5lIFRDUElfT1BUX0VDTgkJOAorCitlbnVtIHRjcF9jYV9zdGF0ZSB7CisJVENQX0NBX09wZW4gPSAwLAorI2RlZmluZSBUQ1BGX0NBX09wZW4JKDE8PFRDUF9DQV9PcGVuKQorCVRDUF9DQV9EaXNvcmRlciA9IDEsCisjZGVmaW5lIFRDUEZfQ0FfRGlzb3JkZXIgKDE8PFRDUF9DQV9EaXNvcmRlcikKKwlUQ1BfQ0FfQ1dSID0gMiwKKyNkZWZpbmUgVENQRl9DQV9DV1IJKDE8PFRDUF9DQV9DV1IpCisJVENQX0NBX1JlY292ZXJ5ID0gMywKKyNkZWZpbmUgVENQRl9DQV9SZWNvdmVyeSAoMTw8VENQX0NBX1JlY292ZXJ5KQorCVRDUF9DQV9Mb3NzID0gNAorI2RlZmluZSBUQ1BGX0NBX0xvc3MJKDE8PFRDUF9DQV9Mb3NzKQorfTsKKworc3RydWN0IHRjcF9pbmZvIHsKKwlfX3U4CXRjcGlfc3RhdGU7CisJX191OAl0Y3BpX2NhX3N0YXRlOworCV9fdTgJdGNwaV9yZXRyYW5zbWl0czsKKwlfX3U4CXRjcGlfcHJvYmVzOworCV9fdTgJdGNwaV9iYWNrb2ZmOworCV9fdTgJdGNwaV9vcHRpb25zOworCV9fdTgJdGNwaV9zbmRfd3NjYWxlIDogNCwgdGNwaV9yY3Zfd3NjYWxlIDogNDsKKworCV9fdTMyCXRjcGlfcnRvOworCV9fdTMyCXRjcGlfYXRvOworCV9fdTMyCXRjcGlfc25kX21zczsKKwlfX3UzMgl0Y3BpX3Jjdl9tc3M7CisKKwlfX3UzMgl0Y3BpX3VuYWNrZWQ7CisJX191MzIJdGNwaV9zYWNrZWQ7CisJX191MzIJdGNwaV9sb3N0OworCV9fdTMyCXRjcGlfcmV0cmFuczsKKwlfX3UzMgl0Y3BpX2ZhY2tldHM7CisKKwkvKiBUaW1lcy4gKi8KKwlfX3UzMgl0Y3BpX2xhc3RfZGF0YV9zZW50OworCV9fdTMyCXRjcGlfbGFzdF9hY2tfc2VudDsgICAgIC8qIE5vdCByZW1lbWJlcmVkLCBzb3JyeS4gKi8KKwlfX3UzMgl0Y3BpX2xhc3RfZGF0YV9yZWN2OworCV9fdTMyCXRjcGlfbGFzdF9hY2tfcmVjdjsKKworCS8qIE1ldHJpY3MuICovCisJX191MzIJdGNwaV9wbXR1OworCV9fdTMyCXRjcGlfcmN2X3NzdGhyZXNoOworCV9fdTMyCXRjcGlfcnR0OworCV9fdTMyCXRjcGlfcnR0dmFyOworCV9fdTMyCXRjcGlfc25kX3NzdGhyZXNoOworCV9fdTMyCXRjcGlfc25kX2N3bmQ7CisJX191MzIJdGNwaV9hZHZtc3M7CisJX191MzIJdGNwaV9yZW9yZGVyaW5nOworCisJX191MzIJdGNwaV9yY3ZfcnR0OworCV9fdTMyCXRjcGlfcmN2X3NwYWNlOworCisJX191MzIJdGNwaV90b3RhbF9yZXRyYW5zOworfTsKKworLyogZm9yIFRDUF9NRDVTSUcgc29ja2V0IG9wdGlvbiAqLworI2RlZmluZSBUQ1BfTUQ1U0lHX01BWEtFWUxFTgk4MAorCitzdHJ1Y3QgdGNwX21kNXNpZyB7CisJc3RydWN0IF9fa2VybmVsX3NvY2thZGRyX3N0b3JhZ2UgdGNwbV9hZGRyOwkvKiBhZGRyZXNzIGFzc29jaWF0ZWQgKi8KKwlfX3UxNglfX3RjcG1fcGFkMTsJCQkJLyogemVybyAqLworCV9fdTE2CXRjcG1fa2V5bGVuOwkJCQkvKiBrZXkgbGVuZ3RoICovCisJX191MzIJX190Y3BtX3BhZDI7CQkJCS8qIHplcm8gKi8KKwlfX3U4CXRjcG1fa2V5W1RDUF9NRDVTSUdfTUFYS0VZTEVOXTsJCS8qIGtleSAoYmluYXJ5KSAqLworfTsKKworLyogZm9yIFRDUF9DT09LSUVfVFJBTlNBQ1RJT05TIChUQ1BDVCkgc29ja2V0IG9wdGlvbiAqLworI2RlZmluZSBUQ1BfQ09PS0lFX01JTgkJIDgJCS8qICA2NC1iaXRzICovCisjZGVmaW5lIFRDUF9DT09LSUVfTUFYCQkxNgkJLyogMTI4LWJpdHMgKi8KKyNkZWZpbmUgVENQX0NPT0tJRV9QQUlSX1NJWkUJKDIqVENQX0NPT0tJRV9NQVgpCisKKy8qIEZsYWdzIGZvciBib3RoIGdldHNvY2tvcHQgYW5kIHNldHNvY2tvcHQgKi8KKyNkZWZpbmUgVENQX0NPT0tJRV9JTl9BTFdBWVMJKDEgPDwgMCkJLyogRGlzY2FyZCBTWU4gd2l0aG91dCBjb29raWUgKi8KKyNkZWZpbmUgVENQX0NPT0tJRV9PVVRfTkVWRVIJKDEgPDwgMSkJLyogUHJvaGliaXQgb3V0Z29pbmcgY29va2llcywKKwkJCQkJCSAqIHN1cGVyY2VkZXMgZXZlcnl0aGluZy4gKi8KKworLyogRmxhZ3MgZm9yIGdldHNvY2tvcHQgKi8KKyNkZWZpbmUgVENQX1NfREFUQV9JTgkJKDEgPDwgMikJLyogV2FzIGRhdGEgcmVjZWl2ZWQ/ICovCisjZGVmaW5lIFRDUF9TX0RBVEFfT1VUCQkoMSA8PCAzKQkvKiBXYXMgZGF0YSBzZW50PyAqLworCisvKiBUQ1BfQ09PS0lFX1RSQU5TQUNUSU9OUyBkYXRhICovCitzdHJ1Y3QgdGNwX2Nvb2tpZV90cmFuc2FjdGlvbnMgeworCV9fdTE2CXRjcGN0X2ZsYWdzOwkJCS8qIHNlZSBhYm92ZSAqLworCV9fdTgJX190Y3BjdF9wYWQxOwkJCS8qIHplcm8gKi8KKwlfX3U4CXRjcGN0X2Nvb2tpZV9kZXNpcmVkOwkJLyogYnl0ZXMgKi8KKwlfX3UxNgl0Y3BjdF9zX2RhdGFfZGVzaXJlZDsJCS8qIGJ5dGVzIG9mIHZhcmlhYmxlIGRhdGEgKi8KKwlfX3UxNgl0Y3BjdF91c2VkOwkJCS8qIGJ5dGVzIGluIHZhbHVlICovCisJX191OAl0Y3BjdF92YWx1ZVtUQ1BfTVNTX0RFRkFVTFRdOworfTsKKworCisjZW5kaWYJLyogX0xJTlVYX1RDUF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGVsZXBob255LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGVsZXBob255LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYzYWZlMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC90ZWxlcGhvbnkuaApAQCAtMCwwICsxLDI2MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCQl0ZWxlcGhvbnkuaAorICoKKyAqCQlCYXNpYyBMaW51eCBUZWxlcGhvbnkgSW50ZXJmYWNlCisgKgorICoJCShjKSBDb3B5cmlnaHQgMTk5OS0yMDAxIFF1aWNrbmV0IFRlY2hub2xvZ2llcywgSW5jLgorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgIEF1dGhvcnM6ICAgICAgIEVkIE9rZXJzb24sIDxlb2tlcnNvbkBxdWlja25ldC5uZXQ+CisgKiAgICAgICAgICAgICAgICAgICBHcmVnIEhlcmxlaW4sIDxnaGVybGVpbkBxdWlja25ldC5uZXQ+CisgKgorICogICAgQ29udHJpYnV0b3JzOiAgQWxhbiBDb3gsIDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CisgKiAgICAgICAgICAgICAgICAgICBEYXZpZCBXLiBFcmhhcnQsIDxkZXJoYXJ0QHF1aWNrbmV0Lm5ldD4KKyAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBRVUlDS05FVCBURUNITk9MT0dJRVMsIElOQy4gQkUgTElBQkxFIFRPIEFOWSBQQVJUWSBGT1IKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTiwgRVZFTiBJRiBRVUlDS05FVAorICogVEVDSE5PTE9HSUVTLCBJTkMuIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFFVSUNLTkVUIFRFQ0hOT0xPR0lFUywgSU5DLiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCisgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgU09GVFdBUkUgUFJPVklERUQgSEVSRVVOREVSIElTCisgKiBPTiBBTiAiQVMgSVMiIEJBU0lTLCBBTkQgUVVJQ0tORVQgVEVDSE5PTE9HSUVTLCBJTkMuIEhBUyBOTyBPQkxJR0FUSU9OCisgKiBUTyBQUk9WSURFIE1BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIFRFTEVQSE9OWV9ICisjZGVmaW5lIFRFTEVQSE9OWV9ICisKKyNkZWZpbmUgVEVMRVBIT05ZX1ZFUlNJT04gMzAxMworCisjZGVmaW5lIFBIT05FX1ZFTkRPUl9JWEogICAgICAgICAgMQorI2RlZmluZSBQSE9ORV9WRU5ET1JfUVVJQ0tORVQJICBQSE9ORV9WRU5ET1JfSVhKCisjZGVmaW5lIFBIT05FX1ZFTkRPUl9WT0lDRVRST05JWCAgMgorI2RlZmluZSBQSE9ORV9WRU5ET1JfQUNVTEFCICAgICAgIDMKKyNkZWZpbmUgUEhPTkVfVkVORE9SX0RJR0kgICAgICAgICA0CisjZGVmaW5lIFBIT05FX1ZFTkRPUl9GUkFOS0xJTiAgICAgNQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgVmVuZG9yIFN1bW1hcnkgSW5mb3JtYXRpb24gQXJlYQorICoKKyAqICBRdWlja25ldCBUZWNobm9sb2dpZXMsIEluYy4gLSBtYWtlcyBsb3cgZGVuc2l0eSBhbmFsb2cgdGVsZXBob255IGNhcmRzCisgKiAgICB3aXRoIGF1ZGlvIGNvbXByZXNzaW9uLCBQT1RTIGFuZCBQU1ROIGludGVyZmFjZXMgKHd3dy5xdWlja25ldC5uZXQpCisgKgorICogIChvdGhlciB2ZW5kb3JzIGZvbGxvd2luZyB0aGlzIEFQSSBzaHVsZCBhZGQgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZgorICogIHRoZSB0ZWxlcGhvbnkgcHJvZHVjdHMgdGhleSBzdXBwb3J0IHVuZGVyIExpbnV4KQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUVRJX1BIT05FSkFDSwkJMTAwCisjZGVmaW5lIFFUSV9MSU5FSkFDSwkJMzAwCisjZGVmaW5lIFFUSV9QSE9ORUpBQ0tfTElURQk0MDAKKyNkZWZpbmUgUVRJX1BIT05FSkFDS19QQ0kJNTAwCisjZGVmaW5lIFFUSV9QSE9ORUNBUkQJCTYwMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIFRoZSBjYXBhYmlsaXRpZXMgaW9jdGxzIGNhbiBpbmZvcm0geW91IG9mIHRoZSBjYXBhYmlsaXRpZXMgb2YgZWFjaCBwaG9uZQorKiBkZXZpY2UgaW5zdGFsbGVkIGluIHlvdXIgc3lzdGVtLiAgVGhlIFBIT05FQ1RMX0NBUEFCSUxJVElFUyBpb2N0bAorKiByZXR1cm5zIGFuIGludGVnZXIgdmFsdWUgaW5kaWNhdGluZyB0aGUgbnVtYmVyIG9mIGNhcGFiaWxpdGllcyB0aGUgICAKKyogZGV2aWNlIGhhcy4gIFRoZSBQSE9ORUNUTF9DQVBBQklMSVRJRVNfTElTVCB3aWxsIGZpbGwgYW4gYXJyYXkgb2YgCisqIGNhcGFiaWxpdHkgc3RydWN0cyB3aXRoIGFsbCBvZiBpdHMgY2FwYWJpbGl0aWVzLiAgVGhlCisqIFBIT05FQ1RMX0NBUEFCSUxJVElFU19DSEVDSyB0YWtlcyBhIHNpbmdsZSBjYXBhYmlsaXR5IHN0cnVjdCBhbmQgcmV0dXJucworKiBhIFRSVUUgaWYgdGhlIGRldmljZSBoYXMgdGhhdCBjYXBhYmlsaXR5LCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyogCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIGVudW0geworCXZlbmRvciA9IDAsCisJZGV2aWNlLAorCXBvcnQsCisJY29kZWMsCisJZHNwCit9IHBob25lX2NhcDsKKworc3RydWN0IHBob25lX2NhcGFiaWxpdHkgeworCWNoYXIgZGVzY1s4MF07CisJcGhvbmVfY2FwIGNhcHR5cGU7CisJaW50IGNhcDsKKwlpbnQgaGFuZGxlOworfTsKKwordHlwZWRlZiBlbnVtIHsKKwlwb3RzID0gMCwKKwlwc3RuLAorCWhhbmRzZXQsCisJc3BlYWtlcgorfSBwaG9uZV9wb3J0czsKKworI2RlZmluZSBQSE9ORV9DQVBBQklMSVRJRVMgICAgICAgICAgICAgIF9JTyAgKCdxJywgMHg4MCkKKyNkZWZpbmUgUEhPTkVfQ0FQQUJJTElUSUVTX0xJU1QgICAgICAgICBfSU9SICgncScsIDB4ODEsIHN0cnVjdCBwaG9uZV9jYXBhYmlsaXR5ICopCisjZGVmaW5lIFBIT05FX0NBUEFCSUxJVElFU19DSEVDSyAgICAgICAgX0lPVyAoJ3EnLCAweDgyLCBzdHJ1Y3QgcGhvbmVfY2FwYWJpbGl0eSAqKQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIGNoYXIgbW9udGhbM107CisgICAgICAgIGNoYXIgZGF5WzNdOworICAgICAgICBjaGFyIGhvdXJbM107CisgICAgICAgIGNoYXIgbWluWzNdOworICAgICAgICBpbnQgbnVtbGVuOworICAgICAgICBjaGFyIG51bWJlclsxMV07CisgICAgICAgIGludCBuYW1lbGVuOworICAgICAgICBjaGFyIG5hbWVbODBdOworfSBQSE9ORV9DSUQ7CisgCisjZGVmaW5lIFBIT05FX1JJTkcJCQlfSU8gICgncScsIDB4ODMpCisjZGVmaW5lIFBIT05FX0hPT0tTVEFURQkJCV9JTyAgKCdxJywgMHg4NCkKKyNkZWZpbmUgUEhPTkVfTUFYUklOR1MJCQlfSU9XICgncScsIDB4ODUsIGNoYXIpCisjZGVmaW5lIFBIT05FX1JJTkdfQ0FERU5DRQkJX0lPVyAoJ3EnLCAweDg2LCBzaG9ydCkKKyNkZWZpbmUgT0xEX1BIT05FX1JJTkdfU1RBUlQgICAgICAgICAgICBfSU8gICgncScsIDB4ODcpCisjZGVmaW5lIFBIT05FX1JJTkdfU1RBUlQJCV9JT1cgKCdxJywgMHg4NywgUEhPTkVfQ0lEICopCisjZGVmaW5lIFBIT05FX1JJTkdfU1RPUAkJCV9JTyAgKCdxJywgMHg4OCkKKworI2RlZmluZSBVU0FfUklOR19DQURFTkNFCSAweEMwQzAKKworI2RlZmluZSBQSE9ORV9SRUNfQ09ERUMJCQlfSU9XICgncScsIDB4ODksIGludCkKKyNkZWZpbmUgUEhPTkVfUkVDX1NUQVJUCQkJX0lPICAoJ3EnLCAweDhBKQorI2RlZmluZSBQSE9ORV9SRUNfU1RPUAkJCV9JTyAgKCdxJywgMHg4QikKKyNkZWZpbmUgUEhPTkVfUkVDX0RFUFRICQkJX0lPVyAoJ3EnLCAweDhDLCBpbnQpCisjZGVmaW5lIFBIT05FX0ZSQU1FCQkJX0lPVyAoJ3EnLCAweDhELCBpbnQpCisjZGVmaW5lIFBIT05FX1JFQ19WT0xVTUUJCV9JT1cgKCdxJywgMHg4RSwgaW50KQorI2RlZmluZSBQSE9ORV9SRUNfVk9MVU1FX0xJTkVBUgkJX0lPVyAoJ3EnLCAweERCLCBpbnQpCisjZGVmaW5lIFBIT05FX1JFQ19MRVZFTAkJCV9JTyAgKCdxJywgMHg4RikKKworI2RlZmluZSBQSE9ORV9QTEFZX0NPREVDCQlfSU9XICgncScsIDB4OTAsIGludCkKKyNkZWZpbmUgUEhPTkVfUExBWV9TVEFSVAkJX0lPICAoJ3EnLCAweDkxKQorI2RlZmluZSBQSE9ORV9QTEFZX1NUT1AJCQlfSU8gICgncScsIDB4OTIpCisjZGVmaW5lIFBIT05FX1BMQVlfREVQVEgJCV9JT1cgKCdxJywgMHg5MywgaW50KQorI2RlZmluZSBQSE9ORV9QTEFZX1ZPTFVNRQkJX0lPVyAoJ3EnLCAweDk0LCBpbnQpCisjZGVmaW5lIFBIT05FX1BMQVlfVk9MVU1FX0xJTkVBUglfSU9XICgncScsIDB4REMsIGludCkKKyNkZWZpbmUgUEhPTkVfUExBWV9MRVZFTAkJX0lPICAoJ3EnLCAweDk1KQorI2RlZmluZSBQSE9ORV9EVE1GX1JFQURZCQlfSU9SICgncScsIDB4OTYsIGludCkKKyNkZWZpbmUgUEhPTkVfR0VUX0RUTUYJCQlfSU9SICgncScsIDB4OTcsIGludCkKKyNkZWZpbmUgUEhPTkVfR0VUX0RUTUZfQVNDSUkJCV9JT1IgKCdxJywgMHg5OCwgaW50KQorI2RlZmluZSBQSE9ORV9EVE1GX09PQgkJCV9JT1cgKCdxJywgMHg5OSwgaW50KQorI2RlZmluZSBQSE9ORV9FWENFUFRJT04JCQlfSU9SICgncScsIDB4OUEsIGludCkKKyNkZWZpbmUgUEhPTkVfUExBWV9UT05FCQkJX0lPVyAoJ3EnLCAweDlCLCBjaGFyKQorI2RlZmluZSBQSE9ORV9TRVRfVE9ORV9PTl9USU1FCQlfSU9XICgncScsIDB4OUMsIGludCkKKyNkZWZpbmUgUEhPTkVfU0VUX1RPTkVfT0ZGX1RJTUUJCV9JT1cgKCdxJywgMHg5RCwgaW50KQorI2RlZmluZSBQSE9ORV9HRVRfVE9ORV9PTl9USU1FCQlfSU8gICgncScsIDB4OUUpCisjZGVmaW5lIFBIT05FX0dFVF9UT05FX09GRl9USU1FCQlfSU8gICgncScsIDB4OUYpCisjZGVmaW5lIFBIT05FX0dFVF9UT05FX1NUQVRFCQlfSU8gICgncScsIDB4QTApCisjZGVmaW5lIFBIT05FX0JVU1kJCQlfSU8gICgncScsIDB4QTEpCisjZGVmaW5lIFBIT05FX1JJTkdCQUNLCQkJX0lPICAoJ3EnLCAweEEyKQorI2RlZmluZSBQSE9ORV9ESUFMVE9ORQkJCV9JTyAgKCdxJywgMHhBMykKKyNkZWZpbmUgUEhPTkVfQ1BUX1NUT1AJCQlfSU8gICgncScsIDB4QTQpCisKKyNkZWZpbmUgUEhPTkVfUFNUTl9TRVRfU1RBVEUJCV9JT1cgKCdxJywgMHhBNCwgaW50KQorI2RlZmluZSBQSE9ORV9QU1ROX0dFVF9TVEFURQkJX0lPICAoJ3EnLCAweEE1KQorCisjZGVmaW5lIFBTVE5fT05fSE9PSwkJMAorI2RlZmluZSBQU1ROX1JJTkdJTkcJCTEKKyNkZWZpbmUgUFNUTl9PRkZfSE9PSwkJMgorI2RlZmluZSBQU1ROX1BVTFNFX0RJQUwJCTMKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAKKyogVGhlIHdpbmsgZHVyYXRpb24gaXMgdHVuYWJsZSB3aXRoIHRoaXMgaW9jdGwuICBUaGUgZGVmYXVsdCB3aW5rIGR1cmF0aW9uICAKKyogaXMgMzIwbXMuICBZb3UgZG8gbm90IG5lZWQgdG8gdXNlIHRoaXMgaW9jdGwgaWYgeW91IGRvIG5vdCByZXF1aXJlIGEKKyogZGlmZmVyZW50IHdpbmsgZHVyYXRpb24uCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBQSE9ORV9XSU5LX0RVUkFUSU9OCQlfSU9XICgncScsIDB4QTYsIGludCkKKyNkZWZpbmUgUEhPTkVfV0lOSwkJCV9JT1cgKCdxJywgMHhBQSwgaW50KQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIAorKiAgQ29kZWMgRGVmaW5pdGlvbnMKKyogCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIGVudW0geworCUc3MjNfNjMgPSAxLAorCUc3MjNfNTMgPSAyLAorCVRTODUgPSAzLAorCVRTNDggPSA0LAorCVRTNDEgPSA1LAorCUc3MjggPSA2LAorCUc3MjkgPSA3LAorCVVMQVcgPSA4LAorCUFMQVcgPSA5LAorCUxJTkVBUjE2ID0gMTAsCisJTElORUFSOCA9IDExLAorCVdTUyA9IDEyLAorCUc3MjlCID0gMTMKK30gcGhvbmVfY29kZWM7CisKK3N0cnVjdCBwaG9uZV9jb2RlY19kYXRhCit7CisgICAgICAgIHBob25lX2NvZGVjIHR5cGU7CisgICAgICAgIHVuc2lnbmVkIHNob3J0IGJ1Zl9taW4sIGJ1Zl9vcHQsIGJ1Zl9tYXg7Cit9OworCisjZGVmaW5lIFBIT05FX1FVRVJZX0NPREVDICAgICAgICAgICAgICAgX0lPV1IgKCdxJywgMHhBNywgc3RydWN0IHBob25lX2NvZGVjX2RhdGEgKikKKyNkZWZpbmUgUEhPTkVfUFNUTl9MSU5FVEVTVCAgICAgICAgICAgICBfSU8gKCdxJywgMHhBOCkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAKKyogVGhpcyBjb250cm9scyB0aGUgVkFEL0NORyBmdW5jdGlvbmFsaXR5IG9mIEcuNzIzLjEuICBUaGUgZHJpdmVyIHdpbGwKKyogYWx3YXlzIHBhc3MgZnVsbCBzaXplIGZyYW1lcywgYW55IHVudXNlZCBieXRlcyB3aWxsIGJlIHBhZGRlZCB3aXRoIHplcm9zLAorKiBhbmQgZnJhbWVzIHBhc3NlZCB0byB0aGUgZHJpdmVyIHNob3VsZCBhbHNvIGJlIHBhZGRlZCB3aXRoIHplcm9zLiAgVGhlCisqIGZyYW1lIHR5cGUgaXMgZW5jb2RlZCBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgdHdvIGJpdHMgb2YgdGhlIGZpcnN0CisqIFdPUkQgb2YgdGhlIGZyYW1lIGFzIGZvbGxvd3M6CisqCisqIGJpdHMgMS0wCUZyYW1lIFR5cGUJRGF0YSBSYXRlCQlTaWduaWZpY2FudCBXb3JkcworKiAwMAkJMAkJRy43MjMuMSA2LjMJCTEyCisqIDAxCQkxCQlHLjcyMy4xIDUuMwkJMTAKKyogMTAJCTIJCVZBRC9DTkcJCQkgMgorKiAxMQkJMwkJUmVwZWF0IGxhc3QgQ05HCQkgMiBiaXRzCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBQSE9ORV9WQUQJCQlfSU9XICgncScsIDB4QTksIGludCkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIFRoZSBleGNlcHRpb24gc3RydWN0dXJlIGFsbG93cyB1cyB0byBtdWx0aXBsZXggbXVsdGlwbGUgZXZlbnRzIG9udG8gdGhlCisqIHNlbGVjdCgpIGV4Y2VwdGlvbiBzZXQuICBJZiBhbnkgb2YgdGhlc2UgZmxhZ3MgYXJlIHNldCBzZWxlY3QoKSB3aWxsCisqIHJldHVybiB3aXRoIGEgcG9zaXRpdmUgaW5kaWNhdGlvbiBvbiB0aGUgZXhjZXB0aW9uIHNldC4gIFRoZSBkdG1mX3JlYWR5CisqIGJpdCBpbmRpY2F0ZXMgaWYgdGhlcmUgaXMgZGF0YSB3YWl0aW5nIGluIHRoZSBEVE1GIGJ1ZmZlci4gIFRoZQorKiBob29rc3RhdGUgYml0IGlzIHNldCBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBob29rc3RhdGUgc3RhdHVzLCBpdCBkb2VzIG5vdAorKiBpbmRpY2F0ZSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgaG9va3N3aXRjaC4gIFRoZSBwc3RuX3JpbmcgYml0CisqIGluZGljYXRlcyB0aGF0IHRoZSBEQUEgb24gYSBMaW5lSkFDSyBjYXJkIGhhcyBkZXRlY3RlZCByaW5nIHZvbHRhZ2Ugb24KKyogdGhlIFBTVE4gcG9ydC4gIFRoZSBjYWxsZXJfaWQgYml0IGluZGljYXRlcyB0aGF0IGNhbGxlcl9pZCBkYXRhIGhhcyBiZWVuCisqIHJlY2VpdmVkIGFuZCBpcyBhdmFpbGFibGUuICBUaGUgcHN0bl93aW5rIGJpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgREFBIG9uCisqIHRoZSBMaW5lSkFDSyBoYXMgcmVjZWl2ZWQgYSB3aW5rIGZyb20gdGhlIHRlbGNvIHN3aXRjaC4gIFRoZSBmMCwgZjEsIGYyCisqIGFuZCBmMyBiaXRzIGluZGljYXRlIHRoYXQgdGhlIGZpbHRlciBoYXMgYmVlbiB0cmlnZ2VyZWQgYnkgZGV0ZWN0aW5nIHRoZQorKiBmcmVxdWVuY3kgcHJvZ3JhbW1lZCBpbnRvIHRoYXQgZmlsdGVyLgorKgorKiBUaGUgcmVtYWluaW5nIGJpdHMgc2hvdWxkIGJlIHNldCB0byB6ZXJvLiBUaGV5IHdpbGwgYmVjb21lIGRlZmluZWQgb3ZlciB0aW1lCisqIGZvciBvdGhlciBpbnRlcmZhY2UgY2FyZHMgYW5kIHRoZWlyIG5lZWRzLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IHBob25lX2V4Y2VwdAoreworCXVuc2lnbmVkIGludCBkdG1mX3JlYWR5OjE7CisJdW5zaWduZWQgaW50IGhvb2tzdGF0ZToxOworCXVuc2lnbmVkIGludCBwc3RuX3Jpbmc6MTsKKwl1bnNpZ25lZCBpbnQgY2FsbGVyX2lkOjE7CisJdW5zaWduZWQgaW50IHBzdG5fd2luazoxOworCXVuc2lnbmVkIGludCBmMDoxOworCXVuc2lnbmVkIGludCBmMToxOworCXVuc2lnbmVkIGludCBmMjoxOworCXVuc2lnbmVkIGludCBmMzoxOworCXVuc2lnbmVkIGludCBmbGFzaDoxOworCXVuc2lnbmVkIGludCBmYzA6MTsKKwl1bnNpZ25lZCBpbnQgZmMxOjE7CisJdW5zaWduZWQgaW50IGZjMjoxOworCXVuc2lnbmVkIGludCBmYzM6MTsKKwl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQ6MTg7Cit9OworCit1bmlvbiB0ZWxlcGhvbnlfZXhjZXB0aW9uIHsKKwlzdHJ1Y3QgcGhvbmVfZXhjZXB0IGJpdHM7CisJdW5zaWduZWQgaW50IGJ5dGVzOworfTsKKworCisjZW5kaWYJCS8qIFRFTEVQSE9OWV9IICovCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC90ZXJtaW9zLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGVybWlvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhY2QwYzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGVybWlvcy5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgX0xJTlVYX1RFUk1JT1NfSAorI2RlZmluZSBfTElOVVhfVEVSTUlPU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS90ZXJtaW9zLmg+CisKKyNkZWZpbmUgTkZGCTUKKworc3RydWN0IHRlcm1pb3gKK3sKKwlfX3UxNgl4X2hmbGFnOworCV9fdTE2CXhfY2ZsYWc7CisJX191MTYJeF9yZmxhZ1tORkZdOworCV9fdTE2CXhfc2ZsYWc7Cit9OworCisjZGVmaW5lCVJUU1hPRkYJCTB4MDAwMQkJLyogUlRTIGZsb3cgY29udHJvbCBvbiBpbnB1dCAqLworI2RlZmluZQlDVFNYT04JCTB4MDAwMgkJLyogQ1RTIGZsb3cgY29udHJvbCBvbiBvdXRwdXQgKi8KKyNkZWZpbmUJRFRSWE9GRgkJMHgwMDA0CQkvKiBEVFIgZmxvdyBjb250cm9sIG9uIGlucHV0ICovCisjZGVmaW5lIERTUlhPTgkJMHgwMDA4CQkvKiBEQ0QgZmxvdyBjb250cm9sIG9uIG91dHB1dCAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC90aW1lLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZjczYjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGltZS5oCkBAIC0wLDAgKzEsNzYgQEAKKyNpZm5kZWYgX0xJTlVYX1RJTUVfSAorI2RlZmluZSBfTElOVVhfVElNRV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisKKyNpZm5kZWYgX1NUUlVDVF9USU1FU1BFQworI2RlZmluZSBfU1RSVUNUX1RJTUVTUEVDCitzdHJ1Y3QgdGltZXNwZWMgeworCV9fa2VybmVsX3RpbWVfdAl0dl9zZWM7CQkJLyogc2Vjb25kcyAqLworCWxvbmcJCXR2X25zZWM7CQkvKiBuYW5vc2Vjb25kcyAqLworfTsKKyNlbmRpZgorCitzdHJ1Y3QgdGltZXZhbCB7CisJX19rZXJuZWxfdGltZV90CQl0dl9zZWM7CQkvKiBzZWNvbmRzICovCisJX19rZXJuZWxfc3VzZWNvbmRzX3QJdHZfdXNlYzsJLyogbWljcm9zZWNvbmRzICovCit9OworCitzdHJ1Y3QgdGltZXpvbmUgeworCWludAl0el9taW51dGVzd2VzdDsJLyogbWludXRlcyB3ZXN0IG9mIEdyZWVud2ljaCAqLworCWludAl0el9kc3R0aW1lOwkvKiB0eXBlIG9mIGRzdCBjb3JyZWN0aW9uICovCit9OworCisKKyNkZWZpbmUgTkZEQklUUwkJCV9fTkZEQklUUworCisjZGVmaW5lIEZEX1NFVFNJWkUJCV9fRkRfU0VUU0laRQorI2RlZmluZSBGRF9TRVQoZmQsZmRzZXRwKQlfX0ZEX1NFVChmZCxmZHNldHApCisjZGVmaW5lIEZEX0NMUihmZCxmZHNldHApCV9fRkRfQ0xSKGZkLGZkc2V0cCkKKyNkZWZpbmUgRkRfSVNTRVQoZmQsZmRzZXRwKQlfX0ZEX0lTU0VUKGZkLGZkc2V0cCkKKyNkZWZpbmUgRkRfWkVSTyhmZHNldHApCQlfX0ZEX1pFUk8oZmRzZXRwKQorCisvKgorICogTmFtZXMgb2YgdGhlIGludGVydmFsIHRpbWVycywgYW5kIHN0cnVjdHVyZQorICogZGVmaW5pbmcgYSB0aW1lciBzZXR0aW5nOgorICovCisjZGVmaW5lCUlUSU1FUl9SRUFMCQkwCisjZGVmaW5lCUlUSU1FUl9WSVJUVUFMCQkxCisjZGVmaW5lCUlUSU1FUl9QUk9GCQkyCisKK3N0cnVjdCBpdGltZXJzcGVjIHsKKwlzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7CS8qIHRpbWVyIHBlcmlvZCAqLworCXN0cnVjdCB0aW1lc3BlYyBpdF92YWx1ZTsJLyogdGltZXIgZXhwaXJhdGlvbiAqLworfTsKKworc3RydWN0IGl0aW1lcnZhbCB7CisJc3RydWN0IHRpbWV2YWwgaXRfaW50ZXJ2YWw7CS8qIHRpbWVyIGludGVydmFsICovCisJc3RydWN0IHRpbWV2YWwgaXRfdmFsdWU7CS8qIGN1cnJlbnQgdmFsdWUgKi8KK307CisKKy8qCisgKiBUaGUgSURzIG9mIHRoZSB2YXJpb3VzIHN5c3RlbSBjbG9ja3MgKGZvciBQT1NJWC4xYiBpbnRlcnZhbCB0aW1lcnMpOgorICovCisjZGVmaW5lIENMT0NLX1JFQUxUSU1FCQkJMAorI2RlZmluZSBDTE9DS19NT05PVE9OSUMJCQkxCisjZGVmaW5lIENMT0NLX1BST0NFU1NfQ1BVVElNRV9JRAkyCisjZGVmaW5lIENMT0NLX1RIUkVBRF9DUFVUSU1FX0lECQkzCisjZGVmaW5lIENMT0NLX01PTk9UT05JQ19SQVcJCTQKKyNkZWZpbmUgQ0xPQ0tfUkVBTFRJTUVfQ09BUlNFCQk1CisjZGVmaW5lIENMT0NLX01PTk9UT05JQ19DT0FSU0UJCTYKKworLyoKKyAqIFRoZSBJRHMgb2YgdmFyaW91cyBoYXJkd2FyZSBjbG9ja3M6CisgKi8KKyNkZWZpbmUgQ0xPQ0tfU0dJX0NZQ0xFCQkJMTAKKyNkZWZpbmUgTUFYX0NMT0NLUwkJCTE2CisjZGVmaW5lIENMT0NLU19NQVNLCQkJKENMT0NLX1JFQUxUSU1FIHwgQ0xPQ0tfTU9OT1RPTklDKQorI2RlZmluZSBDTE9DS1NfTU9OTwkJCUNMT0NLX01PTk9UT05JQworCisvKgorICogVGhlIHZhcmlvdXMgZmxhZ3MgZm9yIHNldHRpbmcgUE9TSVguMWIgaW50ZXJ2YWwgdGltZXJzOgorICovCisjZGVmaW5lIFRJTUVSX0FCU1RJTUUJCQkweDAxCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3RpbWVzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGltZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2I2MjYxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3RpbWVzLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfTElOVVhfVElNRVNfSAorI2RlZmluZSBfTElOVVhfVElNRVNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHRtcyB7CisJX19rZXJuZWxfY2xvY2tfdCB0bXNfdXRpbWU7CisJX19rZXJuZWxfY2xvY2tfdCB0bXNfc3RpbWU7CisJX19rZXJuZWxfY2xvY2tfdCB0bXNfY3V0aW1lOworCV9fa2VybmVsX2Nsb2NrX3QgdG1zX2NzdGltZTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3RpbWV4LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmM1ODVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKQEAgLTAsMCArMSwxNjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKGMpIERhdmlkIEwuIE1pbGxzIDE5OTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzICAgICAqCisgKiBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkICoKKyAqIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhlICAgKgorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyAgICAgICAgICAqCisgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBVbml2ZXJzaXR5IG9mIERlbGF3YXJlIG5vdCBiZSB1c2VkIGluICAgICoKKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgICAgICAgKgorICogd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgVGhlIFVuaXZlcnNpdHkgb2YgRGVsYXdhcmUgICAqCisgKiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IHRoaXMgc29mdHdhcmUgZm9yIGFueSAgICAgICoKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LiAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBNb2RpZmljYXRpb24gaGlzdG9yeSB0aW1leC5oCisgKgorICogMjkgRGVjIDk3CVJ1c3NlbGwgS2luZworICoJTW92ZWQgQ0xPQ0tfVElDS19SQVRFLCBDTE9DS19USUNLX0ZBQ1RPUiBhbmQgRklORVRVTkUgdG8gYXNtL3RpbWV4LmgKKyAqCWZvciBBUk0gbWFjaGluZXMKKyAqCisgKiAgOSBKYW4gOTcgICAgQWRyaWFuIFN1bgorICogICAgICBTaGlmdGVkIExBVENIIGRlZmluZSB0byBhbGxvdyBhY2Nlc3MgdG8gYWxwaGEgbWFjaGluZXMuCisgKgorICogMjYgU2VwIDk0CURhdmlkIEwuIE1pbGxzCisgKglBZGRlZCBkZWZpbmVzIGZvciBoeWJyaWQgcGhhc2UvZnJlcXVlbmN5LWxvY2sgbG9vcC4KKyAqCisgKiAxOSBNYXIgOTQJRGF2aWQgTC4gTWlsbHMKKyAqCU1vdmVkIGRlZmluZXMgZnJvbSBrZXJuZWwgcm91dGluZXMgdG8gaGVhZGVyIGZpbGUgYW5kIGFkZGVkIG5ldworICoJZGVmaW5lcyBmb3IgUFBTIHBoYXNlLWxvY2sgbG9vcC4KKyAqCisgKiAyMCBGZWIgOTQJRGF2aWQgTC4gTWlsbHMKKyAqCVJldmlzZWQgc3RhdHVzIGNvZGVzIGFuZCBzdHJ1Y3R1cmVzIGZvciBleHRlcm5hbCBjbG9jayBhbmQgUFBTCisgKglzaWduYWwgZGlzY2lwbGluZS4KKyAqCisgKiAyOCBOb3YgOTMJRGF2aWQgTC4gTWlsbHMKKyAqCUFkanVzdGVkIHBhcmFtZXRlcnMgdG8gaW1wcm92ZSBzdGFiaWxpdHkgYW5kIGluY3JlYXNlIHBvbGwKKyAqCWludGVydmFsLgorICoKKyAqIDE3IFNlcCA5MyAgICBEYXZpZCBMLiBNaWxscworICogICAgICBDcmVhdGVkIGZpbGUgJE5UUC9pbmNsdWRlL3N5cy90aW1leC5oCisgKiAwNyBPY3QgOTMgICAgVG9yc3RlbiBEdXdlCisgKiAgICAgIERlcml2ZWQgbGludXgvdGltZXguaAorICogMTk5NS0wOC0xMyAgICBUb3JzdGVuIER1d2UKKyAqICAgICAga2VybmVsIFBMTCB1cGRhdGVkIHRvIDE5OTQtMTItMTMgc3BlY3MgKHJmYy0xNTg5KQorICogMTk5Ny0wOC0zMCAgICBVbHJpY2ggV2luZGwKKyAqICAgICAgQWRkZWQgbmV3IGNvbnN0YW50IE5UUF9QSEFTRV9MSU1JVAorICogMjAwNC0wOC0xMiAgICBDaHJpc3RvcGggTGFtZXRlcgorICogICAgICBSZXdvcmtlZCB0aW1lIGludGVycG9sYXRpb24gbG9naWMKKyAqLworI2lmbmRlZiBfTElOVVhfVElNRVhfSAorI2RlZmluZSBfTElOVVhfVElNRVhfSAorCisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorCisjZGVmaW5lIE5UUF9BUEkJCTQJLyogTlRQIEFQSSB2ZXJzaW9uICovCisKKy8qCisgKiBzeXNjYWxsIGludGVyZmFjZSAtIHVzZWQgKG1haW5seSBieSBOVFAgZGFlbW9uKQorICogdG8gZGlzY2lwbGluZSBrZXJuZWwgY2xvY2sgb3NjaWxsYXRvcgorICovCitzdHJ1Y3QgdGltZXggeworCXVuc2lnbmVkIGludCBtb2RlczsJLyogbW9kZSBzZWxlY3RvciAqLworCWxvbmcgb2Zmc2V0OwkJLyogdGltZSBvZmZzZXQgKHVzZWMpICovCisJbG9uZyBmcmVxOwkJLyogZnJlcXVlbmN5IG9mZnNldCAoc2NhbGVkIHBwbSkgKi8KKwlsb25nIG1heGVycm9yOwkJLyogbWF4aW11bSBlcnJvciAodXNlYykgKi8KKwlsb25nIGVzdGVycm9yOwkJLyogZXN0aW1hdGVkIGVycm9yICh1c2VjKSAqLworCWludCBzdGF0dXM7CQkvKiBjbG9jayBjb21tYW5kL3N0YXR1cyAqLworCWxvbmcgY29uc3RhbnQ7CQkvKiBwbGwgdGltZSBjb25zdGFudCAqLworCWxvbmcgcHJlY2lzaW9uOwkJLyogY2xvY2sgcHJlY2lzaW9uICh1c2VjKSAocmVhZCBvbmx5KSAqLworCWxvbmcgdG9sZXJhbmNlOwkJLyogY2xvY2sgZnJlcXVlbmN5IHRvbGVyYW5jZSAocHBtKQorCQkJCSAqIChyZWFkIG9ubHkpCisJCQkJICovCisJc3RydWN0IHRpbWV2YWwgdGltZTsJLyogKHJlYWQgb25seSkgKi8KKwlsb25nIHRpY2s7CQkvKiAobW9kaWZpZWQpIHVzZWNzIGJldHdlZW4gY2xvY2sgdGlja3MgKi8KKworCWxvbmcgcHBzZnJlcTsgICAgICAgICAgIC8qIHBwcyBmcmVxdWVuY3kgKHNjYWxlZCBwcG0pIChybykgKi8KKwlsb25nIGppdHRlcjsgICAgICAgICAgICAvKiBwcHMgaml0dGVyICh1cykgKHJvKSAqLworCWludCBzaGlmdDsgICAgICAgICAgICAgIC8qIGludGVydmFsIGR1cmF0aW9uIChzKSAoc2hpZnQpIChybykgKi8KKwlsb25nIHN0YWJpbDsgICAgICAgICAgICAvKiBwcHMgc3RhYmlsaXR5IChzY2FsZWQgcHBtKSAocm8pICovCisJbG9uZyBqaXRjbnQ7ICAgICAgICAgICAgLyogaml0dGVyIGxpbWl0IGV4Y2VlZGVkIChybykgKi8KKwlsb25nIGNhbGNudDsgICAgICAgICAgICAvKiBjYWxpYnJhdGlvbiBpbnRlcnZhbHMgKHJvKSAqLworCWxvbmcgZXJyY250OyAgICAgICAgICAgIC8qIGNhbGlicmF0aW9uIGVycm9ycyAocm8pICovCisJbG9uZyBzdGJjbnQ7ICAgICAgICAgICAgLyogc3RhYmlsaXR5IGxpbWl0IGV4Y2VlZGVkIChybykgKi8KKworCWludCB0YWk7CQkvKiBUQUkgb2Zmc2V0IChybykgKi8KKworCWludCAgOjMyOyBpbnQgIDozMjsgaW50ICA6MzI7IGludCAgOjMyOworCWludCAgOjMyOyBpbnQgIDozMjsgaW50ICA6MzI7IGludCAgOjMyOworCWludCAgOjMyOyBpbnQgIDozMjsgaW50ICA6MzI7Cit9OworCisvKgorICogTW9kZSBjb2RlcyAodGltZXgubW9kZSkKKyAqLworI2RlZmluZSBBREpfT0ZGU0VUCQkweDAwMDEJLyogdGltZSBvZmZzZXQgKi8KKyNkZWZpbmUgQURKX0ZSRVFVRU5DWQkJMHgwMDAyCS8qIGZyZXF1ZW5jeSBvZmZzZXQgKi8KKyNkZWZpbmUgQURKX01BWEVSUk9SCQkweDAwMDQJLyogbWF4aW11bSB0aW1lIGVycm9yICovCisjZGVmaW5lIEFESl9FU1RFUlJPUgkJMHgwMDA4CS8qIGVzdGltYXRlZCB0aW1lIGVycm9yICovCisjZGVmaW5lIEFESl9TVEFUVVMJCTB4MDAxMAkvKiBjbG9jayBzdGF0dXMgKi8KKyNkZWZpbmUgQURKX1RJTUVDT05TVAkJMHgwMDIwCS8qIHBsbCB0aW1lIGNvbnN0YW50ICovCisjZGVmaW5lIEFESl9UQUkJCQkweDAwODAJLyogc2V0IFRBSSBvZmZzZXQgKi8KKyNkZWZpbmUgQURKX01JQ1JPCQkweDEwMDAJLyogc2VsZWN0IG1pY3Jvc2Vjb25kIHJlc29sdXRpb24gKi8KKyNkZWZpbmUgQURKX05BTk8JCTB4MjAwMAkvKiBzZWxlY3QgbmFub3NlY29uZCByZXNvbHV0aW9uICovCisjZGVmaW5lIEFESl9USUNLCQkweDQwMDAJLyogdGljayB2YWx1ZSAqLworCisjZGVmaW5lIEFESl9PRkZTRVRfU0lOR0xFU0hPVAkweDgwMDEJLyogb2xkLWZhc2hpb25lZCBhZGp0aW1lICovCisjZGVmaW5lIEFESl9PRkZTRVRfU1NfUkVBRAkweGEwMDEJLyogcmVhZC1vbmx5IGFkanRpbWUgKi8KKworLyogTlRQIHVzZXJsYW5kIGxpa2VzIHRoZSBNT0RfIHByZWZpeCBiZXR0ZXIgKi8KKyNkZWZpbmUgTU9EX09GRlNFVAlBREpfT0ZGU0VUCisjZGVmaW5lIE1PRF9GUkVRVUVOQ1kJQURKX0ZSRVFVRU5DWQorI2RlZmluZSBNT0RfTUFYRVJST1IJQURKX01BWEVSUk9SCisjZGVmaW5lIE1PRF9FU1RFUlJPUglBREpfRVNURVJST1IKKyNkZWZpbmUgTU9EX1NUQVRVUwlBREpfU1RBVFVTCisjZGVmaW5lIE1PRF9USU1FQ09OU1QJQURKX1RJTUVDT05TVAorI2RlZmluZSBNT0RfVEFJCUFESl9UQUkKKyNkZWZpbmUgTU9EX01JQ1JPCUFESl9NSUNSTworI2RlZmluZSBNT0RfTkFOTwlBREpfTkFOTworCisKKy8qCisgKiBTdGF0dXMgY29kZXMgKHRpbWV4LnN0YXR1cykKKyAqLworI2RlZmluZSBTVEFfUExMCQkweDAwMDEJLyogZW5hYmxlIFBMTCB1cGRhdGVzIChydykgKi8KKyNkZWZpbmUgU1RBX1BQU0ZSRVEJMHgwMDAyCS8qIGVuYWJsZSBQUFMgZnJlcSBkaXNjaXBsaW5lIChydykgKi8KKyNkZWZpbmUgU1RBX1BQU1RJTUUJMHgwMDA0CS8qIGVuYWJsZSBQUFMgdGltZSBkaXNjaXBsaW5lIChydykgKi8KKyNkZWZpbmUgU1RBX0ZMTAkJMHgwMDA4CS8qIHNlbGVjdCBmcmVxdWVuY3ktbG9jayBtb2RlIChydykgKi8KKworI2RlZmluZSBTVEFfSU5TCQkweDAwMTAJLyogaW5zZXJ0IGxlYXAgKHJ3KSAqLworI2RlZmluZSBTVEFfREVMCQkweDAwMjAJLyogZGVsZXRlIGxlYXAgKHJ3KSAqLworI2RlZmluZSBTVEFfVU5TWU5DCTB4MDA0MAkvKiBjbG9jayB1bnN5bmNocm9uaXplZCAocncpICovCisjZGVmaW5lIFNUQV9GUkVRSE9MRAkweDAwODAJLyogaG9sZCBmcmVxdWVuY3kgKHJ3KSAqLworCisjZGVmaW5lIFNUQV9QUFNTSUdOQUwJMHgwMTAwCS8qIFBQUyBzaWduYWwgcHJlc2VudCAocm8pICovCisjZGVmaW5lIFNUQV9QUFNKSVRURVIJMHgwMjAwCS8qIFBQUyBzaWduYWwgaml0dGVyIGV4Y2VlZGVkIChybykgKi8KKyNkZWZpbmUgU1RBX1BQU1dBTkRFUgkweDA0MDAJLyogUFBTIHNpZ25hbCB3YW5kZXIgZXhjZWVkZWQgKHJvKSAqLworI2RlZmluZSBTVEFfUFBTRVJST1IJMHgwODAwCS8qIFBQUyBzaWduYWwgY2FsaWJyYXRpb24gZXJyb3IgKHJvKSAqLworCisjZGVmaW5lIFNUQV9DTE9DS0VSUgkweDEwMDAJLyogY2xvY2sgaGFyZHdhcmUgZmF1bHQgKHJvKSAqLworI2RlZmluZSBTVEFfTkFOTwkweDIwMDAJLyogcmVzb2x1dGlvbiAoMCA9IHVzLCAxID0gbnMpIChybykgKi8KKyNkZWZpbmUgU1RBX01PREUJMHg0MDAwCS8qIG1vZGUgKDAgPSBQTEwsIDEgPSBGTEwpIChybykgKi8KKyNkZWZpbmUgU1RBX0NMSwkJMHg4MDAwCS8qIGNsb2NrIHNvdXJjZSAoMCA9IEEsIDEgPSBCKSAocm8pICovCisKKy8qIHJlYWQtb25seSBiaXRzICovCisjZGVmaW5lIFNUQV9ST05MWSAoU1RBX1BQU1NJR05BTCB8IFNUQV9QUFNKSVRURVIgfCBTVEFfUFBTV0FOREVSIHwgXAorCVNUQV9QUFNFUlJPUiB8IFNUQV9DTE9DS0VSUiB8IFNUQV9OQU5PIHwgU1RBX01PREUgfCBTVEFfQ0xLKQorCisvKgorICogQ2xvY2sgc3RhdGVzICh0aW1lX3N0YXRlKQorICovCisjZGVmaW5lIFRJTUVfT0sJCTAJLyogY2xvY2sgc3luY2hyb25pemVkLCBubyBsZWFwIHNlY29uZCAqLworI2RlZmluZSBUSU1FX0lOUwkxCS8qIGluc2VydCBsZWFwIHNlY29uZCAqLworI2RlZmluZSBUSU1FX0RFTAkyCS8qIGRlbGV0ZSBsZWFwIHNlY29uZCAqLworI2RlZmluZSBUSU1FX09PUAkzCS8qIGxlYXAgc2Vjb25kIGluIHByb2dyZXNzICovCisjZGVmaW5lIFRJTUVfV0FJVAk0CS8qIGxlYXAgc2Vjb25kIGhhcyBvY2N1cnJlZCAqLworI2RlZmluZSBUSU1FX0VSUk9SCTUJLyogY2xvY2sgbm90IHN5bmNocm9uaXplZCAqLworI2RlZmluZSBUSU1FX0JBRAlUSU1FX0VSUk9SIC8qIGJ3IGNvbXBhdCAqLworCisKKyNlbmRpZiAvKiBMSU5VWF9USU1FWF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGlvY2wuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC90aW9jbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NTY4NjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGlvY2wuaApAQCAtMCwwICsxLDM5IEBACisjaWZuZGVmIF9MSU5VWF9USU9DTF9ICisjZGVmaW5lIF9MSU5VWF9USU9DTF9ICisKKyNkZWZpbmUgVElPQ0xfU0VUU0VMCTIJLyogc2V0IGEgc2VsZWN0aW9uICovCisjZGVmaW5lIAlUSU9DTF9TRUxDSEFSCTAJLyogc2VsZWN0IGNoYXJhY3RlcnMgKi8KKyNkZWZpbmUgCVRJT0NMX1NFTFdPUkQJMQkvKiBzZWxlY3Qgd2hvbGUgd29yZHMgKi8KKyNkZWZpbmUgCVRJT0NMX1NFTExJTkUJMgkvKiBzZWxlY3Qgd2hvbGUgbGluZXMgKi8KKyNkZWZpbmUgCVRJT0NMX1NFTFBPSU5URVIJMwkvKiBzaG93IHRoZSBwb2ludGVyICovCisjZGVmaW5lIAlUSU9DTF9TRUxDTEVBUgk0CS8qIGNsZWFyIHZpc2liaWxpdHkgb2Ygc2VsZWN0aW9uICovCisjZGVmaW5lIAlUSU9DTF9TRUxNT1VTRVJFUE9SVAkxNgkvKiByZXBvcnQgYmVnaW5uaW5nIG9mIHNlbGVjdGlvbiAqLworI2RlZmluZSAJVElPQ0xfU0VMQlVUVE9OTUFTSwkxNQkvKiBidXR0b24gbWFzayBmb3IgcmVwb3J0ICovCisvKiBzZWxlY3Rpb24gZXh0ZW50ICovCitzdHJ1Y3QgdGlvY2xfc2VsZWN0aW9uIHsKKwl1bnNpZ25lZCBzaG9ydCB4czsJLyogWCBzdGFydCAqLworCXVuc2lnbmVkIHNob3J0IHlzOwkvKiBZIHN0YXJ0ICovCisJdW5zaWduZWQgc2hvcnQgeGU7CS8qIFggZW5kICovCisJdW5zaWduZWQgc2hvcnQgeWU7CS8qIFkgZW5kICovCisJdW5zaWduZWQgc2hvcnQgc2VsX21vZGU7CS8qIHNlbGVjdGlvbiBtb2RlICovCit9OworCisjZGVmaW5lIFRJT0NMX1BBU1RFU0VMCTMJLyogcGFzdGUgcHJldmlvdXMgc2VsZWN0aW9uICovCisjZGVmaW5lIFRJT0NMX1VOQkxBTktTQ1JFRU4JNAkvKiB1bmJsYW5rIHNjcmVlbiAqLworCisjZGVmaW5lIFRJT0NMX1NFTExPQURMVVQJNQorCS8qIHNldCBjaGFyYWN0ZXJzIHRvIGJlIGNvbnNpZGVyZWQgYWxwaGFiZXRpYyB3aGVuIHNlbGVjdGluZyAqLworCS8qIHUzMls4XSBiaXQgYXJyYXksIDQgYnl0ZXMtYWxpZ25lZCB3aXRoIHR5cGUgKi8KKworLyogdGhlc2UgdHdvIGRvbid0IHJldHVybiBhIHZhbHVlOiB0aGV5IHdyaXRlIGl0IGJhY2sgaW4gdGhlIHR5cGUgKi8KKyNkZWZpbmUgVElPQ0xfR0VUU0hJRlRTVEFURQk2CS8qIHdyaXRlIHNoaWZ0IHN0YXRlICovCisjZGVmaW5lIFRJT0NMX0dFVE1PVVNFUkVQT1JUSU5HCTcJLyogd3JpdGUgd2hldGhlciBtb3VzZSBldmVudCBhcmUgcmVwb3J0ZWQgKi8KKyNkZWZpbmUgVElPQ0xfU0VUVkVTQUJMQU5LCTEwCS8qIHNldCB2ZXNhIGJsYW5raW5nIG1vZGUgKi8KKyNkZWZpbmUgVElPQ0xfU0VUS01TR1JFRElSRUNUCTExCS8qIHJlc3RyaWN0IGtlcm5lbCBtZXNzYWdlcyB0byBhIHZ0ICovCisjZGVmaW5lIFRJT0NMX0dFVEZHQ09OU09MRQkxMgkvKiBnZXQgZm9yZWdyb3VuZCB2dCAqLworI2RlZmluZSBUSU9DTF9TQ1JPTExDT05TT0xFCTEzCS8qIHNjcm9sbCBjb25zb2xlICovCisjZGVmaW5lIFRJT0NMX0JMQU5LU0NSRUVOCTE0CS8qIGtlZXAgc2NyZWVuIGJsYW5rIGV2ZW4gaWYgYSBrZXkgaXMgcHJlc3NlZCAqLworI2RlZmluZSBUSU9DTF9CTEFOS0VEU0NSRUVOCTE1CS8qIHJldHVybiB3aGljaCB2dCB3YXMgYmxhbmtlZCAqLworI2RlZmluZSBUSU9DTF9HRVRLTVNHUkVESVJFQ1QJMTcJLyogZ2V0IHRoZSB2dCB0aGUga2VybmVsIG1lc3NhZ2VzIGFyZSByZXN0cmljdGVkIHRvICovCisKKyNlbmRpZiAvKiBfTElOVVhfVElPQ0xfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3RpcGMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC90aXBjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE1YjVjOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC90aXBjLmgKQEAgLTAsMCArMSwyMTUgQEAKKy8qCisgKiBpbmNsdWRlL2xpbnV4L3RpcGMuaDogSW5jbHVkZSBmaWxlIGZvciBUSVBDIHNvY2tldCBpbnRlcmZhY2UKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDYsIEVyaWNzc29uIEFCCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIFdpbmQgUml2ZXIgU3lzdGVtcworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfTElOVVhfVElQQ19IXworI2RlZmluZSBfTElOVVhfVElQQ19IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIFRJUEMgYWRkcmVzc2luZyBwcmltaXRpdmVzCisgKi8KKyAKK3N0cnVjdCB0aXBjX3BvcnRpZCB7CisJX191MzIgcmVmOworCV9fdTMyIG5vZGU7Cit9OworCitzdHJ1Y3QgdGlwY19uYW1lIHsKKwlfX3UzMiB0eXBlOworCV9fdTMyIGluc3RhbmNlOworfTsKKworc3RydWN0IHRpcGNfbmFtZV9zZXEgeworCV9fdTMyIHR5cGU7CisJX191MzIgbG93ZXI7CisJX191MzIgdXBwZXI7Cit9OworCitzdGF0aWMgX19pbmxpbmVfXyBfX3UzMiB0aXBjX2FkZHIodW5zaWduZWQgaW50IHpvbmUsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgY2x1c3RlciwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBub2RlKQoreworCXJldHVybiAoem9uZSA8PCAyNCkgfCAoY2x1c3RlciA8PCAxMikgfCBub2RlOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgdGlwY196b25lKF9fdTMyIGFkZHIpCit7CisJcmV0dXJuIGFkZHIgPj4gMjQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCB0aXBjX2NsdXN0ZXIoX191MzIgYWRkcikKK3sKKwlyZXR1cm4gKGFkZHIgPj4gMTIpICYgMHhmZmY7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCB0aXBjX25vZGUoX191MzIgYWRkcikKK3sKKwlyZXR1cm4gYWRkciAmIDB4ZmZmOworfQorCisvKgorICogQXBwbGljYXRpb24tYWNjZXNzaWJsZSBwb3J0IG5hbWUgdHlwZXMKKyAqLworCisjZGVmaW5lIFRJUENfQ0ZHX1NSVgkJMAkvKiBjb25maWd1cmF0aW9uIHNlcnZpY2UgbmFtZSB0eXBlICovCisjZGVmaW5lIFRJUENfVE9QX1NSVgkJMQkvKiB0b3BvbG9neSBzZXJ2aWNlIG5hbWUgdHlwZSAqLworI2RlZmluZSBUSVBDX1JFU0VSVkVEX1RZUEVTCTY0CS8qIGxvd2VzdCB1c2VyLXB1Ymxpc2hhYmxlIG5hbWUgdHlwZSAqLworCisvKiAKKyAqIFB1YmxpY2F0aW9uIHNjb3BlcyB3aGVuIGJpbmRpbmcgcG9ydCBuYW1lcyBhbmQgcG9ydCBuYW1lIHNlcXVlbmNlcworICovCisKKyNkZWZpbmUgVElQQ19aT05FX1NDT1BFCQkxCisjZGVmaW5lIFRJUENfQ0xVU1RFUl9TQ09QRQkyCisjZGVmaW5lIFRJUENfTk9ERV9TQ09QRQkJMworCisvKgorICogTGltaXRpbmcgdmFsdWVzIGZvciBtZXNzYWdlcworICovCisKKyNkZWZpbmUgVElQQ19NQVhfVVNFUl9NU0dfU0laRQk2NjAwMAorCisvKgorICogTWVzc2FnZSBpbXBvcnRhbmNlIGxldmVscworICovCisKKyNkZWZpbmUgVElQQ19MT1dfSU1QT1JUQU5DRQkJMAorI2RlZmluZSBUSVBDX01FRElVTV9JTVBPUlRBTkNFCQkxCisjZGVmaW5lIFRJUENfSElHSF9JTVBPUlRBTkNFCQkyCisjZGVmaW5lIFRJUENfQ1JJVElDQUxfSU1QT1JUQU5DRQkzCisKKy8qIAorICogTXNnIHJlamVjdGlvbi9jb25uZWN0aW9uIHNodXRkb3duIHJlYXNvbnMKKyAqLworCisjZGVmaW5lIFRJUENfT0sJCQkwCisjZGVmaW5lIFRJUENfRVJSX05PX05BTUUJMQorI2RlZmluZSBUSVBDX0VSUl9OT19QT1JUCTIKKyNkZWZpbmUgVElQQ19FUlJfTk9fTk9ERQkzCisjZGVmaW5lIFRJUENfRVJSX09WRVJMT0FECTQKKyNkZWZpbmUgVElQQ19DT05OX1NIVVRET1dOCTUKKworLyoKKyAqIFRJUEMgdG9wb2xvZ3kgc3Vic2NyaXB0aW9uIHNlcnZpY2UgZGVmaW5pdGlvbnMKKyAqLworCisjZGVmaW5lIFRJUENfU1VCX1BPUlRTICAgICAJMHgwMSAgCS8qIGZpbHRlciBmb3IgcG9ydCBhdmFpbGFiaWxpdHkgKi8KKyNkZWZpbmUgVElQQ19TVUJfU0VSVklDRSAgICAgCTB4MDIgIAkvKiBmaWx0ZXIgZm9yIHNlcnZpY2UgYXZhaWxhYmlsaXR5ICovCisjZGVmaW5lIFRJUENfU1VCX0NBTkNFTCAgICAgICAgIDB4MDQgICAgLyogY2FuY2VsIGEgc3Vic2NyaXB0aW9uICovCisjaWYgMAorLyogVGhlIGZvbGxvd2luZyBmaWx0ZXIgb3B0aW9ucyBhcmUgbm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBUSVBDX1NVQl9OT19CSU5EX0VWVFMJMHgwNAkvKiBmaWx0ZXIgb3V0ICJwdWJsaXNoIiBldmVudHMgKi8KKyNkZWZpbmUgVElQQ19TVUJfTk9fVU5CSU5EX0VWVFMJMHgwOAkvKiBmaWx0ZXIgb3V0ICJ3aXRoZHJhdyIgZXZlbnRzICovCisjZGVmaW5lIFRJUENfU1VCX1NJTkdMRV9FVlQJMHgxMAkvKiBleHBpcmUgYWZ0ZXIgZmlyc3QgZXZlbnQgKi8KKyNlbmRpZgorCisjZGVmaW5lIFRJUENfV0FJVF9GT1JFVkVSCX4wCS8qIHRpbWVvdXQgZm9yIHBlcm1hbmVudCBzdWJzY3JpcHRpb24gKi8KKworc3RydWN0IHRpcGNfc3Vic2NyIHsKKwlzdHJ1Y3QgdGlwY19uYW1lX3NlcSBzZXE7CS8qIG5hbWUgc2VxdWVuY2Ugb2YgaW50ZXJlc3QgKi8KKwlfX3UzMiB0aW1lb3V0OwkJCS8qIHN1YnNjcmlwdGlvbiBkdXJhdGlvbiAoaW4gbXMpICovCisgICAgICAgIF9fdTMyIGZpbHRlcjsgICAJCS8qIGJpdG1hc2sgb2YgZmlsdGVyIG9wdGlvbnMgKi8KKwljaGFyIHVzcl9oYW5kbGVbOF07CQkvKiBhdmFpbGFibGUgZm9yIHN1YnNjcmliZXIgdXNlICovCit9OworCisjZGVmaW5lIFRJUENfUFVCTElTSEVECQkxCS8qIHB1YmxpY2F0aW9uIGV2ZW50ICovCisjZGVmaW5lIFRJUENfV0lUSERSQVdOCQkyCS8qIHdpdGhkcmF3IGV2ZW50ICovCisjZGVmaW5lIFRJUENfU1VCU0NSX1RJTUVPVVQJMwkvKiBzdWJzY3JpcHRpb24gdGltZW91dCBldmVudCAqLworCitzdHJ1Y3QgdGlwY19ldmVudCB7CisJX191MzIgZXZlbnQ7CQkJLyogZXZlbnQgdHlwZSAqLworCV9fdTMyIGZvdW5kX2xvd2VyOwkJLyogbWF0Y2hpbmcgbmFtZSBzZXEgaW5zdGFuY2VzICovCisJX191MzIgZm91bmRfdXBwZXI7CQkvKiAgICAiICAgICAgIiAgICAiICAgICAiICAgICAgKi8KKwlzdHJ1Y3QgdGlwY19wb3J0aWQgcG9ydDsJLyogYXNzb2NpYXRlZCBwb3J0ICovCisJc3RydWN0IHRpcGNfc3Vic2NyIHM7CQkvKiBhc3NvY2lhdGVkIHN1YnNjcmlwdGlvbiAqLworfTsKKworLyoKKyAqIFNvY2tldCBBUEkKKyAqLworCisjaWZuZGVmIEFGX1RJUEMKKyNkZWZpbmUgQUZfVElQQwkJMzAKKyNlbmRpZgorCisjaWZuZGVmIFBGX1RJUEMKKyNkZWZpbmUgUEZfVElQQwkJQUZfVElQQworI2VuZGlmCisKKyNpZm5kZWYgU09MX1RJUEMKKyNkZWZpbmUgU09MX1RJUEMJMjcxCisjZW5kaWYKKworI2RlZmluZSBUSVBDX0FERFJfTkFNRVNFUQkxCisjZGVmaW5lIFRJUENfQUREUl9NQ0FTVAkJMQorI2RlZmluZSBUSVBDX0FERFJfTkFNRQkJMgorI2RlZmluZSBUSVBDX0FERFJfSUQJCTMKKworc3RydWN0IHNvY2thZGRyX3RpcGMgeworCXVuc2lnbmVkIHNob3J0IGZhbWlseTsKKwl1bnNpZ25lZCBjaGFyICBhZGRydHlwZTsKKwlzaWduZWQgICBjaGFyICBzY29wZTsKKwl1bmlvbiB7CisJCXN0cnVjdCB0aXBjX3BvcnRpZCBpZDsKKwkJc3RydWN0IHRpcGNfbmFtZV9zZXEgbmFtZXNlcTsKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCB0aXBjX25hbWUgbmFtZTsKKwkJCV9fdTMyIGRvbWFpbjsKKwkJfSBuYW1lOworCX0gYWRkcjsKK307CisKKy8qCisgKiBBbmNpbGxhcnkgZGF0YSBvYmplY3RzIHN1cHBvcnRlZCBieSByZWN2bXNnKCkKKyAqLworCisjZGVmaW5lIFRJUENfRVJSSU5GTwkxCS8qIGVycm9yIGluZm8gKi8KKyNkZWZpbmUgVElQQ19SRVREQVRBCTIJLyogcmV0dXJuZWQgZGF0YSAqLworI2RlZmluZSBUSVBDX0RFU1ROQU1FCTMJLyogZGVzdGluYXRpb24gbmFtZSAqLworCisvKgorICogVElQQy1zcGVjaWZpYyBzb2NrZXQgb3B0aW9uIHZhbHVlcworICovCisKKyNkZWZpbmUgVElQQ19JTVBPUlRBTkNFCQkxMjcJLyogRGVmYXVsdDogVElQQ19MT1dfSU1QT1JUQU5DRSAqLworI2RlZmluZSBUSVBDX1NSQ19EUk9QUEFCTEUJMTI4CS8qIERlZmF1bHQ6IGJhc2VkIG9uIHNvY2tldCB0eXBlICovCisjZGVmaW5lIFRJUENfREVTVF9EUk9QUEFCTEUJMTI5CS8qIERlZmF1bHQ6IGJhc2VkIG9uIHNvY2tldCB0eXBlICovCisjZGVmaW5lIFRJUENfQ09OTl9USU1FT1VUCTEzMAkvKiBEZWZhdWx0OiA4MDAwIChtcykgICovCisjZGVmaW5lIFRJUENfTk9ERV9SRUNWUV9ERVBUSAkxMzEJLyogRGVmYXVsdDogbm9uZSAocmVhZCBvbmx5KSAqLworI2RlZmluZSBUSVBDX1NPQ0tfUkVDVlFfREVQVEgJMTMyCS8qIERlZmF1bHQ6IG5vbmUgKHJlYWQgb25seSkgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGlwY19jb25maWcuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC90aXBjX2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYTkwNDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdGlwY19jb25maWcuaApAQCAtMCwwICsxLDQxOSBAQAorLyoKKyAqIGluY2x1ZGUvbGludXgvdGlwY19jb25maWcuaDogSW5jbHVkZSBmaWxlIGZvciBUSVBDIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlCisgKiAKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA2LCBFcmljc3NvbiBBQgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDcsIFdpbmQgUml2ZXIgU3lzdGVtcworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfTElOVVhfVElQQ19DT05GSUdfSF8KKyNkZWZpbmUgX0xJTlVYX1RJUENfQ09ORklHX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworLyoKKyAqIENvbmZpZ3VyYXRpb24KKyAqCisgKiBBbGwgY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50IG1lc3NhZ2luZyBpbnZvbHZlcyBzZW5kaW5nIGEgcmVxdWVzdCBtZXNzYWdlCisgKiB0byB0aGUgVElQQyBjb25maWd1cmF0aW9uIHNlcnZpY2Ugb24gYSBub2RlLCB3aGljaCBzZW5kcyBhIHJlcGx5IG1lc3NhZ2UKKyAqIGJhY2suICAoSW4gdGhlIGZ1dHVyZSBtdWx0aS1tZXNzYWdlIHJlcGxpZXMgbWF5IGJlIHN1cHBvcnRlZC4pCisgKgorICogQm90aCByZXF1ZXN0IGFuZCByZXBseSBtZXNzYWdlcyBjb25zaXN0IG9mIGEgdHJhbnNwb3J0IGhlYWRlciBhbmQgcGF5bG9hZC4KKyAqIFRoZSB0cmFuc3BvcnQgaGVhZGVyIGNvbnRhaW5zIGluZm8gYWJvdXQgdGhlIGRlc2lyZWQgb3BlcmF0aW9uOworICogdGhlIHBheWxvYWQgY29uc2lzdHMgb2YgemVybyBvciBtb3JlIHR5cGUvbGVuZ3RoL3ZhbHVlIChUTFYpIGl0ZW1zCisgKiB3aGljaCBzcGVjaWZ5IHBhcmFtZXRlcnMgb3IgcmVzdWx0cyBmb3IgdGhlIG9wZXJhdGlvbi4KKyAqCisgKiBGb3IgbWFueSBvcGVyYXRpb25zLCB0aGUgcmVxdWVzdCBhbmQgcmVwbHkgbWVzc2FnZXMgaGF2ZSBhIGZpeGVkIG51bWJlcgorICogb2YgVExWcyAodXN1YWxseSB6ZXJvIG9yIG9uZSk7IGhvd2V2ZXIsIHNvbWUgcmVwbHkgbWVzc2FnZXMgbWF5IHJldHVybiAKKyAqIGEgdmFyaWFibGUgbnVtYmVyIG9mIFRMVnMuICBBIGZhaWxlZCByZXF1ZXN0IGlzIGRlbm90ZWQgYnkgdGhlIHByZXNlbmNlCisgKiBvZiBhbiAiZXJyb3Igc3RyaW5nIiBUTFYgaW4gdGhlIHJlcGx5IG1lc3NhZ2UgaW5zdGVhZCBvZiB0aGUgVExWKHMpIHRoZQorICogcmVwbHkgc2hvdWxkIGNvbnRhaW4gaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuCisgKi8KKyAKKy8qIAorICogUHVibGljIGNvbW1hbmRzOgorICogTWF5IGJlIGlzc3VlZCBieSBhbnkgcHJvY2Vzcy4KKyAqIEFjY2VwdGVkIGJ5IG93biBub2RlLCBvciBieSByZW1vdGUgbm9kZSBvbmx5IGlmIHJlbW90ZSBtYW5hZ2VtZW50IGVuYWJsZWQuICAgICAgICAgICAgICAgICAgICAgICAKKyAqLworIAorI2RlZmluZSAgVElQQ19DTURfTk9PUCAgIAkgICAgMHgwMDAwICAgIC8qIHR4IG5vbmUsIHJ4IG5vbmUgKi8KKyNkZWZpbmUgIFRJUENfQ01EX0dFVF9OT0RFUyAgICAgICAgIDB4MDAwMSAgICAvKiB0eCBuZXRfYWRkciwgcnggbm9kZV9pbmZvKHMpICovCisjZGVmaW5lICBUSVBDX0NNRF9HRVRfTUVESUFfTkFNRVMgICAweDAwMDIgICAgLyogdHggbm9uZSwgcnggbWVkaWFfbmFtZShzKSAqLworI2RlZmluZSAgVElQQ19DTURfR0VUX0JFQVJFUl9OQU1FUyAgMHgwMDAzICAgIC8qIHR4IG5vbmUsIHJ4IGJlYXJlcl9uYW1lKHMpICovCisjZGVmaW5lICBUSVBDX0NNRF9HRVRfTElOS1MgICAgICAgICAweDAwMDQgICAgLyogdHggbmV0X2FkZHIsIHJ4IGxpbmtfaW5mbyhzKSAqLworI2RlZmluZSAgVElQQ19DTURfU0hPV19OQU1FX1RBQkxFICAgMHgwMDA1ICAgIC8qIHR4IG5hbWVfdGJsX3F1ZXJ5LCByeCB1bHRyYV9zdHJpbmcgKi8KKyNkZWZpbmUgIFRJUENfQ01EX1NIT1dfUE9SVFMgICAgICAgIDB4MDAwNiAgICAvKiB0eCBub25lLCByeCB1bHRyYV9zdHJpbmcgKi8KKyNkZWZpbmUgIFRJUENfQ01EX1NIT1dfTElOS19TVEFUUyAgIDB4MDAwQiAgICAvKiB0eCBsaW5rX25hbWUsIHJ4IHVsdHJhX3N0cmluZyAqLworI2RlZmluZSAgVElQQ19DTURfU0hPV19TVEFUUyAgICAgICAgMHgwMDBGICAgIC8qIHR4IHVuc2lnbmVkLCByeCB1bHRyYV9zdHJpbmcgKi8KKworI2lmIDAKKyNkZWZpbmUgIFRJUENfQ01EX1NIT1dfUE9SVF9TVEFUUyAgIDB4MDAwOCAgICAvKiB0eCBwb3J0X3JlZiwgcnggdWx0cmFfc3RyaW5nICovCisjZGVmaW5lICBUSVBDX0NNRF9SRVNFVF9QT1JUX1NUQVRTICAweDAwMDkgICAgLyogdHggcG9ydF9yZWYsIHJ4IG5vbmUgKi8KKyNkZWZpbmUgIFRJUENfQ01EX0dFVF9ST1VURVMgICAgICAgIDB4MDAwQSAgICAvKiB0eCA/LCByeCA/ICovCisjZGVmaW5lICBUSVBDX0NNRF9HRVRfTElOS19QRUVSICAgICAweDAwMEQgICAgLyogdHggbGlua19uYW1lLCByeCA/ICovCisjZW5kaWYKKworLyogCisgKiBQcm90ZWN0ZWQgY29tbWFuZHM6CisgKiBNYXkgb25seSBiZSBpc3N1ZWQgYnkgIm5ldHdvcmsgYWRtaW5pc3RyYXRpb24gY2FwYWJsZSIgcHJvY2Vzcy4KKyAqIEFjY2VwdGVkIGJ5IG93biBub2RlLCBvciBieSByZW1vdGUgbm9kZSBvbmx5IGlmIHJlbW90ZSBtYW5hZ2VtZW50IGVuYWJsZWQKKyAqIGFuZCB0aGlzIG5vZGUgaXMgem9uZSBtYW5hZ2VyLiAgICAgICAgICAgICAgICAgICAgICAgCisgKi8KKworI2RlZmluZSAgVElQQ19DTURfR0VUX1JFTU9URV9NTkcgICAgMHg0MDAzICAgIC8qIHR4IG5vbmUsIHJ4IHVuc2lnbmVkICovCisjZGVmaW5lICBUSVBDX0NNRF9HRVRfTUFYX1BPUlRTICAgICAweDQwMDQgICAgLyogdHggbm9uZSwgcnggdW5zaWduZWQgKi8KKyNkZWZpbmUgIFRJUENfQ01EX0dFVF9NQVhfUFVCTCAgICAgIDB4NDAwNSAgICAvKiB0eCBub25lLCByeCB1bnNpZ25lZCAqLworI2RlZmluZSAgVElQQ19DTURfR0VUX01BWF9TVUJTQ1IgICAgMHg0MDA2ICAgIC8qIHR4IG5vbmUsIHJ4IHVuc2lnbmVkICovCisjZGVmaW5lICBUSVBDX0NNRF9HRVRfTUFYX1pPTkVTICAgICAweDQwMDcgICAgLyogdHggbm9uZSwgcnggdW5zaWduZWQgKi8KKyNkZWZpbmUgIFRJUENfQ01EX0dFVF9NQVhfQ0xVU1RFUlMgIDB4NDAwOCAgICAvKiB0eCBub25lLCByeCB1bnNpZ25lZCAqLworI2RlZmluZSAgVElQQ19DTURfR0VUX01BWF9OT0RFUyAgICAgMHg0MDA5ICAgIC8qIHR4IG5vbmUsIHJ4IHVuc2lnbmVkICovCisjZGVmaW5lICBUSVBDX0NNRF9HRVRfTUFYX1NMQVZFUyAgICAweDQwMEEgICAgLyogdHggbm9uZSwgcnggdW5zaWduZWQgKi8KKyNkZWZpbmUgIFRJUENfQ01EX0dFVF9ORVRJRCAgICAgICAgIDB4NDAwQiAgICAvKiB0eCBub25lLCByeCB1bnNpZ25lZCAqLworCisjZGVmaW5lICBUSVBDX0NNRF9FTkFCTEVfQkVBUkVSICAgICAweDQxMDEgICAgLyogdHggYmVhcmVyX2NvbmZpZywgcnggbm9uZSAqLworI2RlZmluZSAgVElQQ19DTURfRElTQUJMRV9CRUFSRVIgICAgMHg0MTAyICAgIC8qIHR4IGJlYXJlcl9uYW1lLCByeCBub25lICovCisjZGVmaW5lICBUSVBDX0NNRF9TRVRfTElOS19UT0wgICAgICAweDQxMDcgICAgLyogdHggbGlua19jb25maWcsIHJ4IG5vbmUgKi8KKyNkZWZpbmUgIFRJUENfQ01EX1NFVF9MSU5LX1BSSSAgICAgIDB4NDEwOCAgICAvKiB0eCBsaW5rX2NvbmZpZywgcnggbm9uZSAqLworI2RlZmluZSAgVElQQ19DTURfU0VUX0xJTktfV0lORE9XICAgMHg0MTA5ICAgIC8qIHR4IGxpbmtfY29uZmlnLCByeCBub25lICovCisjZGVmaW5lICBUSVBDX0NNRF9TRVRfTE9HX1NJWkUgICAgICAweDQxMEEgICAgLyogdHggdW5zaWduZWQsIHJ4IG5vbmUgKi8KKyNkZWZpbmUgIFRJUENfQ01EX0RVTVBfTE9HICAgICAgICAgIDB4NDEwQiAgICAvKiB0eCBub25lLCByeCB1bHRyYV9zdHJpbmcgKi8KKyNkZWZpbmUgIFRJUENfQ01EX1JFU0VUX0xJTktfU1RBVFMgIDB4NDEwQyAgICAvKiB0eCBsaW5rX25hbWUsIHJ4IG5vbmUgKi8KKworI2lmIDAKKyNkZWZpbmUgIFRJUENfQ01EX0NSRUFURV9MSU5LICAgICAgIDB4NDEwMyAgICAvKiB0eCBsaW5rX2NyZWF0ZSwgcnggbm9uZSAqLworI2RlZmluZSAgVElQQ19DTURfUkVNT1ZFX0xJTksgICAgICAgMHg0MTA0ICAgIC8qIHR4IGxpbmtfbmFtZSwgcnggbm9uZSAqLworI2RlZmluZSAgVElQQ19DTURfQkxPQ0tfTElOSyAgICAgICAgMHg0MTA1ICAgIC8qIHR4IGxpbmtfbmFtZSwgcnggbm9uZSAqLworI2RlZmluZSAgVElQQ19DTURfVU5CTE9DS19MSU5LICAgICAgMHg0MTA2ICAgIC8qIHR4IGxpbmtfbmFtZSwgcnggbm9uZSAqLworI2VuZGlmCisKKy8qIAorICogUHJpdmF0ZSBjb21tYW5kczoKKyAqIE1heSBvbmx5IGJlIGlzc3VlZCBieSAibmV0d29yayBhZG1pbmlzdHJhdGlvbiBjYXBhYmxlIiBwcm9jZXNzLgorICogQWNjZXB0ZWQgYnkgb3duIG5vZGUgb25seTsgY2Fubm90IGJlIHVzZWQgb24gYSByZW1vdGUgbm9kZS4gICAgICAgICAgICAgICAgICAgICAgIAorICovCisKKyNkZWZpbmUgIFRJUENfQ01EX1NFVF9OT0RFX0FERFIgICAgIDB4ODAwMSAgICAvKiB0eCBuZXRfYWRkciwgcnggbm9uZSAqLworI2lmIDAKKyNkZWZpbmUgIFRJUENfQ01EX1NFVF9aT05FX01BU1RFUiAgIDB4ODAwMiAgICAvKiB0eCBub25lLCByeCBub25lICovCisjZW5kaWYKKyNkZWZpbmUgIFRJUENfQ01EX1NFVF9SRU1PVEVfTU5HICAgIDB4ODAwMyAgICAvKiB0eCB1bnNpZ25lZCwgcnggbm9uZSAqLworI2RlZmluZSAgVElQQ19DTURfU0VUX01BWF9QT1JUUyAgICAgMHg4MDA0ICAgIC8qIHR4IHVuc2lnbmVkLCByeCBub25lICovCisjZGVmaW5lICBUSVBDX0NNRF9TRVRfTUFYX1BVQkwgICAgICAweDgwMDUgICAgLyogdHggdW5zaWduZWQsIHJ4IG5vbmUgKi8KKyNkZWZpbmUgIFRJUENfQ01EX1NFVF9NQVhfU1VCU0NSICAgIDB4ODAwNiAgICAvKiB0eCB1bnNpZ25lZCwgcnggbm9uZSAqLworI2RlZmluZSAgVElQQ19DTURfU0VUX01BWF9aT05FUyAgICAgMHg4MDA3ICAgIC8qIHR4IHVuc2lnbmVkLCByeCBub25lICovCisjZGVmaW5lICBUSVBDX0NNRF9TRVRfTUFYX0NMVVNURVJTICAweDgwMDggICAgLyogdHggdW5zaWduZWQsIHJ4IG5vbmUgKi8KKyNkZWZpbmUgIFRJUENfQ01EX1NFVF9NQVhfTk9ERVMgICAgIDB4ODAwOSAgICAvKiB0eCB1bnNpZ25lZCwgcnggbm9uZSAqLworI2RlZmluZSAgVElQQ19DTURfU0VUX01BWF9TTEFWRVMgICAgMHg4MDBBICAgIC8qIHR4IHVuc2lnbmVkLCByeCBub25lICovCisjZGVmaW5lICBUSVBDX0NNRF9TRVRfTkVUSUQgICAgICAgICAweDgwMEIgICAgLyogdHggdW5zaWduZWQsIHJ4IG5vbmUgKi8KKworLyoKKyAqIFJlc2VydmVkIGNvbW1hbmRzOgorICogTWF5IG5vdCBiZSBpc3N1ZWQgYnkgYW55IHByb2Nlc3MuCisgKiBVc2VkIGludGVybmFsbHkgYnkgVElQQy4KKyAqLworCisjZGVmaW5lICBUSVBDX0NNRF9OT1RfTkVUX0FETUlOICAgICAweEMwMDEgICAgLyogdHggbm9uZSwgcnggbm9uZSAqLworCisvKgorICogVExWIHR5cGVzIGRlZmluZWQgZm9yIFRJUEMKKyAqLworCisjZGVmaW5lIFRJUENfVExWX05PTkUJCTAJLyogbm8gVExWIHByZXNlbnQgKi8KKyNkZWZpbmUgVElQQ19UTFZfVk9JRAkJMQkvKiBlbXB0eSBUTFYgKDAgZGF0YSBieXRlcykqLworI2RlZmluZSBUSVBDX1RMVl9VTlNJR05FRAkyCS8qIDMyLWJpdCBpbnRlZ2VyICovCisjZGVmaW5lIFRJUENfVExWX1NUUklORwkJMwkvKiBjaGFyWzEyOF0gKG1heCkgKi8KKyNkZWZpbmUgVElQQ19UTFZfTEFSR0VfU1RSSU5HCTQJLyogY2hhclsyMDQ4XSAobWF4KSAqLworI2RlZmluZSBUSVBDX1RMVl9VTFRSQV9TVFJJTkcJNQkvKiBjaGFyWzMyNzY4XSAobWF4KSAqLworCisjZGVmaW5lIFRJUENfVExWX0VSUk9SX1NUUklORwkxNgkvKiBjaGFyWzEyOF0gY29udGFpbmluZyAiZXJyb3IgY29kZSIgKi8KKyNkZWZpbmUgVElQQ19UTFZfTkVUX0FERFIgICAJMTcJLyogMzItYml0IGludGVnZXIgZGVub3RpbmcgPFouQy5OPiAqLworI2RlZmluZSBUSVBDX1RMVl9NRURJQV9OQU1FCTE4CS8qIGNoYXJbVElQQ19NQVhfTUVESUFfTkFNRV0gKi8KKyNkZWZpbmUgVElQQ19UTFZfQkVBUkVSX05BTUUJMTkJLyogY2hhcltUSVBDX01BWF9CRUFSRVJfTkFNRV0gKi8KKyNkZWZpbmUgVElQQ19UTFZfTElOS19OQU1FCTIwCS8qIGNoYXJbVElQQ19NQVhfTElOS19OQU1FXSAqLworI2RlZmluZSBUSVBDX1RMVl9OT0RFX0lORk8JMjEJLyogc3RydWN0IHRpcGNfbm9kZV9pbmZvICovCisjZGVmaW5lIFRJUENfVExWX0xJTktfSU5GTwkyMgkvKiBzdHJ1Y3QgdGlwY19saW5rX2luZm8gKi8KKyNkZWZpbmUgVElQQ19UTFZfQkVBUkVSX0NPTkZJRyAgMjMJLyogc3RydWN0IHRpcGNfYmVhcmVyX2NvbmZpZyAqLworI2RlZmluZSBUSVBDX1RMVl9MSU5LX0NPTkZJRyAgICAyNAkvKiBzdHJ1Y3QgdGlwY19saW5rX2NvbmZpZyAqLworI2RlZmluZSBUSVBDX1RMVl9OQU1FX1RCTF9RVUVSWQkyNQkvKiBzdHJ1Y3QgdGlwY19uYW1lX3RhYmxlX3F1ZXJ5ICovCisjZGVmaW5lIFRJUENfVExWX1BPUlRfUkVGICAgCTI2CS8qIDMyLWJpdCBwb3J0IHJlZmVyZW5jZSAqLworCisvKgorICogTWF4aW11bSBzaXplcyBvZiBUSVBDIGJlYXJlci1yZWxhdGVkIG5hbWVzIChpbmNsdWRpbmcgdGVybWluYXRpbmcgTlVMKQorICovIAorCisjZGVmaW5lIFRJUENfTUFYX01FRElBX05BTUUJMTYJLyogZm9ybWF0ID0gbWVkaWEgKi8KKyNkZWZpbmUgVElQQ19NQVhfSUZfTkFNRQkxNgkvKiBmb3JtYXQgPSBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgVElQQ19NQVhfQkVBUkVSX05BTUUJMzIJLyogZm9ybWF0ID0gbWVkaWE6aW50ZXJmYWNlICovCisjZGVmaW5lIFRJUENfTUFYX0xJTktfTkFNRQk2MAkvKiBmb3JtYXQgPSBaLkMuTjppbnRlcmZhY2UtWi5DLk46aW50ZXJmYWNlICovCisKKy8qCisgKiBMaW5rIHByaW9yaXR5IGxpbWl0cyAobWluLCBkZWZhdWx0LCBtYXgsIG1lZGlhIGRlZmF1bHQpCisgKi8KKworI2RlZmluZSBUSVBDX01JTl9MSU5LX1BSSQkwCisjZGVmaW5lIFRJUENfREVGX0xJTktfUFJJCTEwCisjZGVmaW5lIFRJUENfTUFYX0xJTktfUFJJCTMxCisjZGVmaW5lIFRJUENfTUVESUFfTElOS19QUkkJKFRJUENfTUFYX0xJTktfUFJJICsgMSkKKworLyoKKyAqIExpbmsgdG9sZXJhbmNlIGxpbWl0cyAobWluLCBkZWZhdWx0LCBtYXgpLCBpbiBtcworICovCisKKyNkZWZpbmUgVElQQ19NSU5fTElOS19UT0wgNTAKKyNkZWZpbmUgVElQQ19ERUZfTElOS19UT0wgMTUwMAorI2RlZmluZSBUSVBDX01BWF9MSU5LX1RPTCAzMDAwMAorCisvKgorICogTGluayB3aW5kb3cgbGltaXRzIChtaW4sIGRlZmF1bHQsIG1heCksIGluIHBhY2tldHMKKyAqLworCisjZGVmaW5lIFRJUENfTUlOX0xJTktfV0lOIDE2CisjZGVmaW5lIFRJUENfREVGX0xJTktfV0lOIDUwCisjZGVmaW5lIFRJUENfTUFYX0xJTktfV0lOIDE1MAorCisKK3N0cnVjdCB0aXBjX25vZGVfaW5mbyB7CisJX19iZTMyIGFkZHI7CQkJLyogbmV0d29yayBhZGRyZXNzIG9mIG5vZGUgKi8KKwlfX2JlMzIgdXA7CQkJLyogMD1kb3duLCAxPSB1cCAqLworfTsKKworc3RydWN0IHRpcGNfbGlua19pbmZvIHsKKwlfX2JlMzIgZGVzdDsJCQkvKiBuZXR3b3JrIGFkZHJlc3Mgb2YgcGVlciBub2RlICovCisJX19iZTMyIHVwOwkJCS8qIDA9ZG93biwgMT11cCAqLworCWNoYXIgc3RyW1RJUENfTUFYX0xJTktfTkFNRV07CS8qIGxpbmsgbmFtZSAqLworfTsKKworc3RydWN0IHRpcGNfYmVhcmVyX2NvbmZpZyB7CisJX19iZTMyIHByaW9yaXR5OwkJLyogUmFuZ2UgWzEsMzFdLiBPdmVycmlkZSBwZXIgbGluayAgKi8KKwlfX2JlMzIgZGV0ZWN0X3Njb3BlOworCWNoYXIgbmFtZVtUSVBDX01BWF9CRUFSRVJfTkFNRV07Cit9OworCitzdHJ1Y3QgdGlwY19saW5rX2NvbmZpZyB7CisJX19iZTMyIHZhbHVlOworCWNoYXIgbmFtZVtUSVBDX01BWF9MSU5LX05BTUVdOworfTsKKworI2RlZmluZSBUSVBDX05UUV9BTExUWVBFUyAweDgwMDAwMDAwCisKK3N0cnVjdCB0aXBjX25hbWVfdGFibGVfcXVlcnkgeworCV9fYmUzMiBkZXB0aDsJLyogMTp0eXBlLCAyOituYW1lIGluZm8sIDM6K3BvcnQgaW5mbywgNCs6K2RlYnVnIGluZm8gKi8KKwlfX2JlMzIgdHlwZTsJLyoge3QsbCx1fSBpbmZvIGlnbm9yZWQgaWYgaGlnaCBiaXQgb2YgImRlcHRoIiBpcyBzZXQgKi8KKwlfX2JlMzIgbG93Ym91bmQ7IC8qIChpLmUuIGRpc3BsYXlzIGFsbCBlbnRyaWVzIG9mIG5hbWUgdGFibGUpICovCisJX19iZTMyIHVwYm91bmQ7Cit9OworCisvKgorICogVGhlIGVycm9yIHN0cmluZyBUTFYgaXMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGNhdXNlIAorICogb2YgdGhlIHJlcXVlc3QgZmFpbHVyZS4gIFRvIHNpbXBsaWZ5IGVycm9yIHByb2Nlc3NpbmcgKGFuZCB0byBzYXZlIHNwYWNlKQorICogdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgc3RyaW5nIGNhbiBiZSBhIHNwZWNpYWwgZXJyb3IgY29kZSBjaGFyYWN0ZXIKKyAqIChseWluZyBieSB0aGUgcmFuZ2UgMHg4MCB0byAweEZGKSB3aGljaCByZXByZXNlbnRzIGEgcHJlLWRlZmluZWQgcmVhc29uLgorICovCisKKyNkZWZpbmUgVElQQ19DRkdfVExWX0VSUk9SICAgICAgIlx4ODAiICAvKiByZXF1ZXN0IGNvbnRhaW5zIGluY29ycmVjdCBUTFYocykgKi8KKyNkZWZpbmUgVElQQ19DRkdfTk9UX05FVF9BRE1JTiAgIlx4ODEiCS8qIG11c3QgYmUgbmV0d29yayBhZG1pbmlzdHJhdG9yICovCisjZGVmaW5lIFRJUENfQ0ZHX05PVF9aT05FX01TVFIJIlx4ODIiCS8qIG11c3QgYmUgem9uZSBtYXN0ZXIgKi8KKyNkZWZpbmUgVElQQ19DRkdfTk9fUkVNT1RFCSJceDgzIgkvKiByZW1vdGUgbWFuYWdlbWVudCBub3QgZW5hYmxlZCAqLworI2RlZmluZSBUSVBDX0NGR19OT1RfU1VQUE9SVEVEICAiXHg4NCIJLyogcmVxdWVzdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IFRJUEMgKi8KKyNkZWZpbmUgVElQQ19DRkdfSU5WQUxJRF9WQUxVRSAgIlx4ODUiICAvKiByZXF1ZXN0IGhhcyBpbnZhbGlkIGFyZ3VtZW50IHZhbHVlICovCisKKyNpZiAwCisvKiBwcm90b3R5cGVzIFRMViBzdHJ1Y3R1cmVzIGZvciBwcm9wb3NlZCBjb21tYW5kcyAqLworc3RydWN0IHRpcGNfbGlua19jcmVhdGUgeworCV9fdTMyICAgZG9tYWluOworCXN0cnVjdCB0aXBjX21lZGlhX2FkZHIgcGVlcl9hZGRyOworCWNoYXIgYmVhcmVyX25hbWVbVElQQ19NQVhfQkVBUkVSX05BTUVdOworfTsKKworc3RydWN0IHRpcGNfcm91dGVfaW5mbyB7CisJX191MzIgZGVzdDsKKwlfX3UzMiByb3V0ZXI7Cit9OworI2VuZGlmCisKKy8qCisgKiBBIFRMViBjb25zaXN0cyBvZiBhIGRlc2NyaXB0b3IsIGZvbGxvd2VkIGJ5IHRoZSBUTFYgdmFsdWUuCisgKiBUTFYgZGVzY3JpcHRvciBmaWVsZHMgYXJlIHN0b3JlZCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXI7IAorICogVExWIHZhbHVlcyBtdXN0IGFsc28gYmUgc3RvcmVkIGluIG5ldHdvcmsgYnl0ZSBvcmRlciAod2hlcmUgYXBwbGljYWJsZSkuCisgKiBUTFYgZGVzY3JpcHRvcnMgbXVzdCBiZSBhbGlnbmVkIHRvIGFkZHJlc3NlcyB3aGljaCBhcmUgbXVsdGlwbGUgb2YgNCwKKyAqIHNvIHVwIHRvIDMgYnl0ZXMgb2YgcGFkZGluZyBtYXkgZXhpc3QgYXQgdGhlIGVuZCBvZiB0aGUgVExWIHZhbHVlIGFyZWEuCisgKiBUaGVyZSBtdXN0IG5vdCBiZSBhbnkgcGFkZGluZyBiZXR3ZWVuIHRoZSBUTFYgZGVzY3JpcHRvciBhbmQgaXRzIHZhbHVlLgorICovCisKK3N0cnVjdCB0bHZfZGVzYyB7CisJX19iZTE2IHRsdl9sZW47CQkvKiBUTFYgbGVuZ3RoIChkZXNjcmlwdG9yICsgdmFsdWUpICovCisJX19iZTE2IHRsdl90eXBlOwkJLyogVExWIGlkZW50aWZpZXIgKi8KK307CisKKyNkZWZpbmUgVExWX0FMSUdOVE8gNAorCisjZGVmaW5lIFRMVl9BTElHTihkYXRhbGVuKSAoKChkYXRhbGVuKSsoVExWX0FMSUdOVE8tMSkpICYgfihUTFZfQUxJR05UTy0xKSkKKyNkZWZpbmUgVExWX0xFTkdUSChkYXRhbGVuKSAoc2l6ZW9mKHN0cnVjdCB0bHZfZGVzYykgKyAoZGF0YWxlbikpCisjZGVmaW5lIFRMVl9TUEFDRShkYXRhbGVuKSAoVExWX0FMSUdOKFRMVl9MRU5HVEgoZGF0YWxlbikpKQorI2RlZmluZSBUTFZfREFUQSh0bHYpICgodm9pZCAqKSgoY2hhciAqKSh0bHYpICsgVExWX0xFTkdUSCgwKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBUTFZfT0soY29uc3Qgdm9pZCAqdGx2LCBfX3UxNiBzcGFjZSkKK3sKKwkvKgorCSAqIFdvdWxkIGFsc28gbGlrZSB0byBjaGVjayB0aGF0ICJ0bHYiIGlzIGEgbXVsdGlwbGUgb2YgNCwKKwkgKiBidXQgZG9uJ3Qga25vdyBob3cgdG8gZG8gdGhpcyBpbiBhIHBvcnRhYmxlIHdheS4KKwkgKiAtIFRyaWVkIGRvaW5nICghKHRsdiAmIChUTFZfQUxJR05UTy0xKSkpLCBidXQgR0NDIGNvbXBpbGVyCisJICogICB3b24ndCBhbGxvdyBiaW5hcnkgIiYiIHdpdGggYSBwb2ludGVyLgorCSAqIC0gVHJpZWQgY2FzdGluZyAidGx2IiB0byBpbnRlZ2VyIHR5cGUsIGJ1dCBjYXVzZXMgd2FybmluZyBhYm91dCBzaXplCisJICogICBtaXNtYXRjaCB3aGVuIHBvaW50ZXIgaXMgYmlnZ2VyIHRoYW4gY2hvc2VuIHR5cGUgKGludCwgbG9uZywgLi4uKS4KKwkgKi8KKworCXJldHVybiAoc3BhY2UgPj0gVExWX1NQQUNFKDApKSAmJgorCQkobnRvaHMoKChzdHJ1Y3QgdGx2X2Rlc2MgKil0bHYpLT50bHZfbGVuKSA8PSBzcGFjZSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBUTFZfQ0hFQ0soY29uc3Qgdm9pZCAqdGx2LCBfX3UxNiBzcGFjZSwgX191MTYgZXhwX3R5cGUpCit7CisJcmV0dXJuIFRMVl9PSyh0bHYsIHNwYWNlKSAmJiAKKwkJKG50b2hzKCgoc3RydWN0IHRsdl9kZXNjICopdGx2KS0+dGx2X3R5cGUpID09IGV4cF90eXBlKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IFRMVl9TRVQodm9pZCAqdGx2LCBfX3UxNiB0eXBlLCB2b2lkICpkYXRhLCBfX3UxNiBsZW4pCit7CisJc3RydWN0IHRsdl9kZXNjICp0bHZfcHRyOworCWludCB0bHZfbGVuOworCisJdGx2X2xlbiA9IFRMVl9MRU5HVEgobGVuKTsKKwl0bHZfcHRyID0gKHN0cnVjdCB0bHZfZGVzYyAqKXRsdjsKKwl0bHZfcHRyLT50bHZfdHlwZSA9IGh0b25zKHR5cGUpOworCXRsdl9wdHItPnRsdl9sZW4gID0gaHRvbnModGx2X2xlbik7CisJaWYgKGxlbiAmJiBkYXRhKQorCQltZW1jcHkoVExWX0RBVEEodGx2X3B0ciksIGRhdGEsIHRsdl9sZW4pOworCXJldHVybiBUTFZfU1BBQ0UobGVuKTsKK30KKworLyoKKyAqIEEgVExWIGxpc3QgZGVzY3JpcHRvciBzaW1wbGlmaWVzIHByb2Nlc3Npbmcgb2YgbWVzc2FnZXMgCisgKiBjb250YWluaW5nIG11bHRpcGxlIFRMVnMuCisgKi8KKworc3RydWN0IHRsdl9saXN0X2Rlc2MgeworCXN0cnVjdCB0bHZfZGVzYyAqdGx2X3B0cjsJLyogcHRyIHRvIGN1cnJlbnQgVExWICovCisJX191MzIgdGx2X3NwYWNlOwkJLyogIyBieXRlcyBmcm9tIGN1cnIgVExWIHRvIGxpc3QgZW5kICovCit9OworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIFRMVl9MSVNUX0lOSVQoc3RydWN0IHRsdl9saXN0X2Rlc2MgKmxpc3QsIAorCQkJCSB2b2lkICpkYXRhLCBfX3UzMiBzcGFjZSkKK3sKKwlsaXN0LT50bHZfcHRyID0gKHN0cnVjdCB0bHZfZGVzYyAqKWRhdGE7CisJbGlzdC0+dGx2X3NwYWNlID0gc3BhY2U7Cit9CisJICAgICAKK3N0YXRpYyBfX2lubGluZV9fIGludCBUTFZfTElTVF9FTVBUWShzdHJ1Y3QgdGx2X2xpc3RfZGVzYyAqbGlzdCkKK3sgCisJcmV0dXJuIChsaXN0LT50bHZfc3BhY2UgPT0gMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBUTFZfTElTVF9DSEVDSyhzdHJ1Y3QgdGx2X2xpc3RfZGVzYyAqbGlzdCwgX191MTYgZXhwX3R5cGUpCit7CisJcmV0dXJuIFRMVl9DSEVDSyhsaXN0LT50bHZfcHRyLCBsaXN0LT50bHZfc3BhY2UsIGV4cF90eXBlKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCAqVExWX0xJU1RfREFUQShzdHJ1Y3QgdGx2X2xpc3RfZGVzYyAqbGlzdCkKK3sKKwlyZXR1cm4gVExWX0RBVEEobGlzdC0+dGx2X3B0cik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgVExWX0xJU1RfU1RFUChzdHJ1Y3QgdGx2X2xpc3RfZGVzYyAqbGlzdCkKK3sKKwlfX3UxNiB0bHZfc3BhY2UgPSBUTFZfQUxJR04obnRvaHMobGlzdC0+dGx2X3B0ci0+dGx2X2xlbikpOworCisgICAgICAgIGxpc3QtPnRsdl9wdHIgPSAoc3RydWN0IHRsdl9kZXNjICopKChjaGFyICopbGlzdC0+dGx2X3B0ciArIHRsdl9zcGFjZSk7CisJbGlzdC0+dGx2X3NwYWNlIC09IHRsdl9zcGFjZTsKK30KKworLyoKKyAqIENvbmZpZ3VyYXRpb24gbWVzc2FnZXMgZXhjaGFuZ2VkIHZpYSBORVRMSU5LX0dFTkVSSUMgdXNlIHRoZSBmb2xsb3dpbmcKKyAqIGZhbWlseSBpZCwgbmFtZSwgdmVyc2lvbiBhbmQgY29tbWFuZC4KKyAqLworI2RlZmluZSBUSVBDX0dFTkxfTkFNRQkJIlRJUEMiCisjZGVmaW5lIFRJUENfR0VOTF9WRVJTSU9OCTB4MQorI2RlZmluZSBUSVBDX0dFTkxfQ01ECQkweDEKKworLyoKKyAqIFRJUEMgc3BlY2lmaWMgaGVhZGVyIHVzZWQgaW4gTkVUTElOS19HRU5FUklDIHJlcXVlc3RzLgorICovCitzdHJ1Y3QgdGlwY19nZW5sbXNnaGRyIHsKKwlfX3UzMiBkZXN0OwkJLyogRGVzdGluYXRpb24gYWRkcmVzcyAqLworCV9fdTE2IGNtZDsJCS8qIENvbW1hbmQgKi8KKwlfX3UxNiByZXNlcnZlZDsJCS8qIFVudXNlZCAqLworfTsKKworI2RlZmluZSBUSVBDX0dFTkxfSERSTEVOCU5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgdGlwY19nZW5sbXNnaGRyKSkKKworLyoKKyAqIENvbmZpZ3VyYXRpb24gbWVzc2FnZXMgZXhjaGFuZ2VkIHZpYSBUSVBDIHNvY2tldHMgdXNlIHRoZSBUSVBDIGNvbmZpZ3VyYXRpb24gCisgKiBtZXNzYWdlIGhlYWRlciwgd2hpY2ggaXMgZGVmaW5lZCBiZWxvdy4gIFRoaXMgc3RydWN0dXJlIGlzIGFuYWxvZ291cyAKKyAqIHRvIHRoZSBOZXRsaW5rIG1lc3NhZ2UgaGVhZGVyLCBidXQgZmllbGRzIGFyZSBzdG9yZWQgaW4gbmV0d29yayBieXRlIG9yZGVyIAorICogYW5kIG5vIHBhZGRpbmcgaXMgcGVybWl0dGVkIGJldHdlZW4gdGhlIGhlYWRlciBhbmQgdGhlIG1lc3NhZ2UgZGF0YSAKKyAqIHRoYXQgZm9sbG93cy4KKyAqLworCitzdHJ1Y3QgdGlwY19jZmdfbXNnX2hkcgoreworCV9fYmUzMiB0Y21fbGVuOwkJLyogTWVzc2FnZSBsZW5ndGggKGluY2x1ZGluZyBoZWFkZXIpICovCisJX19iZTE2IHRjbV90eXBlOwkvKiBDb21tYW5kIHR5cGUgKi8KKwlfX2JlMTYgdGNtX2ZsYWdzOwkvKiBBZGRpdGlvbmFsIGZsYWdzICovCisJY2hhciAgdGNtX3Jlc2VydmVkWzhdOwkvKiBVbnVzZWQgKi8KK307CisKKyNkZWZpbmUgVENNX0ZfUkVRVUVTVAkweDEJLyogRmxhZzogUmVxdWVzdCBtZXNzYWdlICovCisjZGVmaW5lIFRDTV9GX01PUkUJMHgyCS8qIEZsYWc6IE1lc3NhZ2UgdG8gYmUgY29udGludWVkICovCisKKyNkZWZpbmUgVENNX0FMSUdOKGRhdGFsZW4pICAoKChkYXRhbGVuKSszKSAmIH4zKQorI2RlZmluZSBUQ01fTEVOR1RIKGRhdGFsZW4pIChzaXplb2Yoc3RydWN0IHRpcGNfY2ZnX21zZ19oZHIpICsgZGF0YWxlbikKKyNkZWZpbmUgVENNX1NQQUNFKGRhdGFsZW4pICAoVENNX0FMSUdOKFRDTV9MRU5HVEgoZGF0YWxlbikpKQorI2RlZmluZSBUQ01fREFUQSh0Y21faGRyKSAgICgodm9pZCAqKSgoY2hhciAqKSh0Y21faGRyKSArIFRDTV9MRU5HVEgoMCkpKQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgVENNX1NFVCh2b2lkICptc2csIF9fdTE2IGNtZCwgX191MTYgZmxhZ3MsCisJCQkgIHZvaWQgKmRhdGEsIF9fdTE2IGRhdGFfbGVuKQoreworCXN0cnVjdCB0aXBjX2NmZ19tc2dfaGRyICp0Y21faGRyOworCWludCBtc2dfbGVuOworCisJbXNnX2xlbiA9IFRDTV9MRU5HVEgoZGF0YV9sZW4pOworCXRjbV9oZHIgPSAoc3RydWN0IHRpcGNfY2ZnX21zZ19oZHIgKiltc2c7CisJdGNtX2hkci0+dGNtX2xlbiAgID0gaHRvbmwobXNnX2xlbik7CisJdGNtX2hkci0+dGNtX3R5cGUgID0gaHRvbnMoY21kKTsKKwl0Y21faGRyLT50Y21fZmxhZ3MgPSBodG9ucyhmbGFncyk7CisJaWYgKGRhdGFfbGVuICYmIGRhdGEpCisJCW1lbWNweShUQ01fREFUQShtc2cpLCBkYXRhLCBkYXRhX2xlbik7CisJcmV0dXJuIFRDTV9TUEFDRShkYXRhX2xlbik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3Rvc2hpYmEuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC90b3NoaWJhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE3YzRlZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC90b3NoaWJhLmgKQEAgLTAsMCArMSwzOCBAQAorLyogdG9zaGliYS5oIC0tIExpbnV4IGRyaXZlciBmb3IgYWNjZXNzaW5nIHRoZSBTTU0gb24gVG9zaGliYSBsYXB0b3BzIAorICoKKyAqIENvcHlyaWdodCAoYykgMTk5Ni0yMDAwICBKb25hdGhhbiBBLiBCdXp6YXJkIChqb25hdGhhbkBidXp6YXJkLm9yZy51aykKKyAqCisgKiBUaGFua3MgdG8gSnVlcmdlbiBIZWluemwgPGp1ZXJnZW5AbW9ub2NlcnVzLmRlbW9uLmNvLnVrPiBmb3IgdGhlIHBvaW50ZXJzCisgKiBvbiBtYWtpbmcgc3VyZSB0aGUgc3RydWN0dXJlIGlzIGFsaWduZWQgYW5kIHBhY2tlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX1RPU0hJQkFfSAorI2RlZmluZSBfTElOVVhfVE9TSElCQV9ICisKKyNkZWZpbmUgVE9TSF9QUk9DICIvcHJvYy90b3NoaWJhIgorI2RlZmluZSBUT1NIX0RFVklDRSAiL2Rldi90b3NoaWJhIgorI2RlZmluZSBUT1NIX1NNTSBfSU9XUigndCcsIDB4OTAsIGludCkJLyogYnJva2VuOiBtZWFudCAyNCBieXRlcyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IGVheDsKKwl1bnNpZ25lZCBpbnQgZWJ4IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwl1bnNpZ25lZCBpbnQgZWN4IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwl1bnNpZ25lZCBpbnQgZWR4IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwl1bnNpZ25lZCBpbnQgZXNpIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwl1bnNpZ25lZCBpbnQgZWRpIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gU01NUmVnaXN0ZXJzOworCitpbnQgdG9zaF9zbW0oU01NUmVnaXN0ZXJzICpyZWdzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdHR5LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdHR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg5OTZiYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC90dHkuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX0xJTlVYX1RUWV9ICisjZGVmaW5lIF9MSU5VWF9UVFlfSAorCisvKgorICogJ3R0eS5oJyBkZWZpbmVzIHNvbWUgc3RydWN0dXJlcyB1c2VkIGJ5IHR0eV9pby5jIGFuZCBzb21lIGRlZmluZXMuCisgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdHlwZXMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMGNkM2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdHlwZXMuaApAQCAtMCwwICsxLDUxIEBACisjaWZuZGVmIF9MSU5VWF9UWVBFU19ICisjZGVmaW5lIF9MSU5VWF9UWVBFU19ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X3R5cGVzLmg+CisKKworLyoKKyAqIEJlbG93IGFyZSB0cnVseSBMaW51eC1zcGVjaWZpYyB0eXBlcyB0aGF0IHNob3VsZCBuZXZlciBjb2xsaWRlIHdpdGgKKyAqIGFueSBhcHBsaWNhdGlvbi9saWJyYXJ5IHRoYXQgd2FudHMgbGludXgvdHlwZXMuaC4KKyAqLworCisjaWZkZWYgX19DSEVDS0VSX18KKyNkZWZpbmUgX19iaXR3aXNlX18gX19hdHRyaWJ1dGVfXygoYml0d2lzZSkpCisjZWxzZQorI2RlZmluZSBfX2JpdHdpc2VfXworI2VuZGlmCisjaWZkZWYgX19DSEVDS19FTkRJQU5fXworI2RlZmluZSBfX2JpdHdpc2UgX19iaXR3aXNlX18KKyNlbHNlCisjZGVmaW5lIF9fYml0d2lzZQorI2VuZGlmCisKK3R5cGVkZWYgX191MTYgX19iaXR3aXNlIF9fbGUxNjsKK3R5cGVkZWYgX191MTYgX19iaXR3aXNlIF9fYmUxNjsKK3R5cGVkZWYgX191MzIgX19iaXR3aXNlIF9fbGUzMjsKK3R5cGVkZWYgX191MzIgX19iaXR3aXNlIF9fYmUzMjsKK3R5cGVkZWYgX191NjQgX19iaXR3aXNlIF9fbGU2NDsKK3R5cGVkZWYgX191NjQgX19iaXR3aXNlIF9fYmU2NDsKKwordHlwZWRlZiBfX3UxNiBfX2JpdHdpc2UgX19zdW0xNjsKK3R5cGVkZWYgX191MzIgX19iaXR3aXNlIF9fd3N1bTsKKworLyoKKyAqIGFsaWduZWRfdTY0IHNob3VsZCBiZSB1c2VkIGluIGRlZmluaW5nIGtlcm5lbDwtPnVzZXJzcGFjZSBBQklzIHRvIGF2b2lkCisgKiBjb21tb24gMzIvNjQtYml0IGNvbXBhdCBwcm9ibGVtcy4KKyAqIDY0LWJpdCB2YWx1ZXMgYWxpZ24gdG8gNC1ieXRlIGJvdW5kYXJpZXMgb24geDg2XzMyIChhbmQgcG9zc2libHkgb3RoZXIKKyAqIGFyY2hpdGVjdHVyZXMpIGFuZCB0byA4LWJ5dGUgYm91bmRhcmllcyBvbiA2NC1iaXQgYXJjaGl0ZXR1cmVzLiAgVGhlIG5ldworICogYWxpZ25lZF82NCB0eXBlIGVuZm9yY2VzIDgtYnl0ZSBhbGlnbm1lbnQgc28gdGhhdCBzdHJ1Y3RzIGNvbnRhaW5pbmcKKyAqIGFsaWduZWRfNjQgdmFsdWVzIGhhdmUgdGhlIHNhbWUgYWxpZ25tZW50IG9uIDMyLWJpdCBhbmQgNjQtYml0IGFyY2hpdGVjdHVyZXMuCisgKiBObyBjb252ZXJzaW9ucyBhcmUgbmVjZXNzYXJ5IGJldHdlZW4gMzItYml0IHVzZXItc3BhY2UgYW5kIGEgNjQtYml0IGtlcm5lbC4KKyAqLworI2RlZmluZSBfX2FsaWduZWRfdTY0IF9fdTY0IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKQorI2RlZmluZSBfX2FsaWduZWRfYmU2NCBfX2JlNjQgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpCisjZGVmaW5lIF9fYWxpZ25lZF9sZTY0IF9fbGU2NCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkKKworI2VuZGlmIC8qICBfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfTElOVVhfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3VkZl9mc19pLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdWRmX2ZzX2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTM2OTY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3VkZl9mc19pLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIHVkZl9mc19pLmgKKyAqCisgKiBUaGlzIGZpbGUgaXMgaW50ZW5kZWQgZm9yIHRoZSBMaW51eCBrZXJuZWwvbW9kdWxlLiAKKyAqCisgKiBDT1BZUklHSFQKKyAqCVRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICoJTGljZW5zZSAoR1BMKS4gQ29waWVzIG9mIHRoZSBHUEwgY2FuIGJlIG9idGFpbmVkIGZyb206CisgKgkJZnRwOi8vcHJlcC5haS5taXQuZWR1L3B1Yi9nbnUvR1BMCisgKglFYWNoIGNvbnRyaWJ1dGluZyBhdXRob3IgcmV0YWlucyBhbGwgcmlnaHRzIHRvIHRoZWlyIG93biB3b3JrLgorICovCisjaWZuZGVmIF9VREZfRlNfSV9ICisjZGVmaW5lIF9VREZfRlNfSV9IIDEKKworLyogZXhwb3J0ZWQgSU9DVExzLCB3ZSBoYXZlICdsJywgMHg0MC0weDdmICovCisjZGVmaW5lIFVERl9HRVRFQVNJWkUgICBfSU9SKCdsJywgMHg0MCwgaW50KQorI2RlZmluZSBVREZfR0VURUFCTE9DSyAgX0lPUignbCcsIDB4NDEsIHZvaWQgKikKKyNkZWZpbmUgVURGX0dFVFZPTElERU5UIF9JT1IoJ2wnLCAweDQyLCB2b2lkICopCisjZGVmaW5lIFVERl9SRUxPQ0FURV9CTE9DS1MgX0lPV1IoJ2wnLCAweDQzLCBsb25nKQorCisjZW5kaWYgLyogX1VERl9GU19JX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC91ZHAuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC91ZHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2NmMjFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3VkcC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJRGVmaW5pdGlvbnMgZm9yIHRoZSBVRFAgcHJvdG9jb2wuCisgKgorICogVmVyc2lvbjoJQCgjKXVkcC5oCTEuMC4yCTA0LzI4LzkzCisgKgorICogQXV0aG9yOglGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfTElOVVhfVURQX0gKKyNkZWZpbmUgX0xJTlVYX1VEUF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgdWRwaGRyIHsKKwlfX2JlMTYJc291cmNlOworCV9fYmUxNglkZXN0OworCV9fYmUxNglsZW47CisJX19zdW0xNgljaGVjazsKK307CisKKy8qIFVEUCBzb2NrZXQgb3B0aW9ucyAqLworI2RlZmluZSBVRFBfQ09SSwkxCS8qIE5ldmVyIHNlbmQgcGFydGlhbGx5IGNvbXBsZXRlIHNlZ21lbnRzICovCisjZGVmaW5lIFVEUF9FTkNBUAkxMDAJLyogU2V0IHRoZSBzb2NrZXQgdG8gYWNjZXB0IGVuY2Fwc3VsYXRlZCBwYWNrZXRzICovCisKKy8qIFVEUCBlbmNhcHN1bGF0aW9uIHR5cGVzICovCisjZGVmaW5lIFVEUF9FTkNBUF9FU1BJTlVEUF9OT05fSUtFCTEgLyogZHJhZnQtaWV0Zi1pcHNlYy1uYXQtdC1pa2UtMDAvMDEgKi8KKyNkZWZpbmUgVURQX0VOQ0FQX0VTUElOVURQCTIgLyogZHJhZnQtaWV0Zi1pcHNlYy11ZHAtZW5jYXBzLTA2ICovCisjZGVmaW5lIFVEUF9FTkNBUF9MMlRQSU5VRFAJMyAvKiByZmMyNjYxICovCisKKworI2VuZGlmCS8qIF9MSU5VWF9VRFBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3VpbnB1dC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3VpbnB1dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZDIzNGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdWlucHV0LmgKQEAgLTAsMCArMSwxMzYgQEAKKyNpZm5kZWYgX19VSU5QVVRfSF8KKyNkZWZpbmUgX19VSU5QVVRfSF8KKy8qCisgKiAgVXNlciBsZXZlbCBkcml2ZXIgc3VwcG9ydCBmb3IgaW5wdXQgc3Vic3lzdGVtCisgKgorICogSGVhdmlseSBiYXNlZCBvbiBldmRldi5jIGJ5IFZvanRlY2ggUGF2bGlrCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBBdXRob3I6IEFyaXN0ZXUgU2VyZ2lvIFJvemFuc2tpIEZpbGhvIDxhcmlzQGNhdGhlZHJhbGxhYnMub3JnPgorICoKKyAqIENoYW5nZXMvUmV2aXNpb25zOgorICoJMC4zCTI0LzA1LzIwMDYgKEFuc3NpIEhhbm51bGEgPGFuc3NpLmhhbm51bGFnbWFpbC5jb20+KQorICoJCS0gdXBkYXRlIGZmIHN1cHBvcnQgZm9yIHRoZSBjaGFuZ2VzIGluIGtlcm5lbCBpbnRlcmZhY2UKKyAqCQktIGFkZCBVSU5QVVRfVkVSU0lPTgorICoJMC4yCTE2LzEwLzIwMDQgKE1pY2FoIERvd3R5IDxtaWNhaEBuYXZpLmN4PikKKyAqCQktIGFkZGVkIGZvcmNlIGZlZWRiYWNrIHN1cHBvcnQKKyAqICAgICAgICAgICAgIC0gYWRkZWQgVUlfU0VUX1BIWVMKKyAqCTAuMQkyMC8wNi8yMDAyCisgKgkJLSBmaXJzdCBwdWJsaWMgdmVyc2lvbgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorCisjZGVmaW5lIFVJTlBVVF9WRVJTSU9OCQkzCisKKworc3RydWN0IHVpbnB1dF9mZl91cGxvYWQgeworCWludAkJCXJlcXVlc3RfaWQ7CisJaW50CQkJcmV0dmFsOworCXN0cnVjdCBmZl9lZmZlY3QJZWZmZWN0OworCXN0cnVjdCBmZl9lZmZlY3QJb2xkOworfTsKKworc3RydWN0IHVpbnB1dF9mZl9lcmFzZSB7CisJaW50CQkJcmVxdWVzdF9pZDsKKwlpbnQJCQlyZXR2YWw7CisJaW50CQkJZWZmZWN0X2lkOworfTsKKworLyogaW9jdGwgKi8KKyNkZWZpbmUgVUlOUFVUX0lPQ1RMX0JBU0UJJ1UnCisjZGVmaW5lIFVJX0RFVl9DUkVBVEUJCV9JTyhVSU5QVVRfSU9DVExfQkFTRSwgMSkKKyNkZWZpbmUgVUlfREVWX0RFU1RST1kJCV9JTyhVSU5QVVRfSU9DVExfQkFTRSwgMikKKworI2RlZmluZSBVSV9TRVRfRVZCSVQJCV9JT1coVUlOUFVUX0lPQ1RMX0JBU0UsIDEwMCwgaW50KQorI2RlZmluZSBVSV9TRVRfS0VZQklUCQlfSU9XKFVJTlBVVF9JT0NUTF9CQVNFLCAxMDEsIGludCkKKyNkZWZpbmUgVUlfU0VUX1JFTEJJVAkJX0lPVyhVSU5QVVRfSU9DVExfQkFTRSwgMTAyLCBpbnQpCisjZGVmaW5lIFVJX1NFVF9BQlNCSVQJCV9JT1coVUlOUFVUX0lPQ1RMX0JBU0UsIDEwMywgaW50KQorI2RlZmluZSBVSV9TRVRfTVNDQklUCQlfSU9XKFVJTlBVVF9JT0NUTF9CQVNFLCAxMDQsIGludCkKKyNkZWZpbmUgVUlfU0VUX0xFREJJVAkJX0lPVyhVSU5QVVRfSU9DVExfQkFTRSwgMTA1LCBpbnQpCisjZGVmaW5lIFVJX1NFVF9TTkRCSVQJCV9JT1coVUlOUFVUX0lPQ1RMX0JBU0UsIDEwNiwgaW50KQorI2RlZmluZSBVSV9TRVRfRkZCSVQJCV9JT1coVUlOUFVUX0lPQ1RMX0JBU0UsIDEwNywgaW50KQorI2RlZmluZSBVSV9TRVRfUEhZUwkJX0lPVyhVSU5QVVRfSU9DVExfQkFTRSwgMTA4LCBjaGFyKikKKyNkZWZpbmUgVUlfU0VUX1NXQklUCQlfSU9XKFVJTlBVVF9JT0NUTF9CQVNFLCAxMDksIGludCkKKworI2RlZmluZSBVSV9CRUdJTl9GRl9VUExPQUQJX0lPV1IoVUlOUFVUX0lPQ1RMX0JBU0UsIDIwMCwgc3RydWN0IHVpbnB1dF9mZl91cGxvYWQpCisjZGVmaW5lIFVJX0VORF9GRl9VUExPQUQJX0lPVyhVSU5QVVRfSU9DVExfQkFTRSwgMjAxLCBzdHJ1Y3QgdWlucHV0X2ZmX3VwbG9hZCkKKyNkZWZpbmUgVUlfQkVHSU5fRkZfRVJBU0UJX0lPV1IoVUlOUFVUX0lPQ1RMX0JBU0UsIDIwMiwgc3RydWN0IHVpbnB1dF9mZl9lcmFzZSkKKyNkZWZpbmUgVUlfRU5EX0ZGX0VSQVNFCQlfSU9XKFVJTlBVVF9JT0NUTF9CQVNFLCAyMDMsIHN0cnVjdCB1aW5wdXRfZmZfZXJhc2UpCisKKy8qCisgKiBUbyB3cml0ZSBhIGZvcmNlLWZlZWRiYWNrLWNhcGFibGUgZHJpdmVyLCB0aGUgdXBsb2FkX2VmZmVjdAorICogYW5kIGVyYXNlX2VmZmVjdCBjYWxsYmFja3MgaW4gaW5wdXRfZGV2IG11c3QgYmUgaW1wbGVtZW50ZWQuCisgKiBUaGUgdWlucHV0IGRyaXZlciB3aWxsIGdlbmVyYXRlIGEgZmFrZSBpbnB1dCBldmVudCB3aGVuIG9uZSBvZgorICogdGhlc2UgY2FsbGJhY2tzIGFyZSBpbnZva2VkLiBUaGUgdXNlcnNwYWNlIGNvZGUgdGhlbiB1c2VzCisgKiBpb2N0bHMgdG8gcmV0cmlldmUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGFuZCBzZW5kIHRoZSByZXR1cm4gY29kZS4KKyAqIFRoZSBjYWxsYmFjayBibG9ja3MgdW50aWwgdGhpcyByZXR1cm4gY29kZSBpcyBzZW50LgorICoKKyAqIFRoZSBkZXNjcmliZWQgY2FsbGJhY2sgbWVjaGFuaXNtIGlzIG9ubHkgdXNlZCBpZiBmZl9lZmZlY3RzX21heAorICogaXMgc2V0LgorICoKKyAqIFRvIGltcGxlbWVudCB1cGxvYWRfZWZmZWN0KCk6CisgKiAgIDEuIFdhaXQgZm9yIGFuIGV2ZW50IHdpdGggdHlwZSA9PSBFVl9VSU5QVVQgYW5kIGNvZGUgPT0gVUlfRkZfVVBMT0FELgorICogICAgICBBIHJlcXVlc3QgSUQgd2lsbCBiZSBnaXZlbiBpbiAndmFsdWUnLgorICogICAyLiBBbGxvY2F0ZSBhIHVpbnB1dF9mZl91cGxvYWQgc3RydWN0LCBmaWxsIGluIHJlcXVlc3RfaWQgd2l0aAorICogICAgICB0aGUgJ3ZhbHVlJyBmcm9tIHRoZSBFVl9VSU5QVVQgZXZlbnQuCisgKiAgIDMuIElzc3VlIGEgVUlfQkVHSU5fRkZfVVBMT0FEIGlvY3RsLCBnaXZpbmcgaXQgdGhlCisgKiAgICAgIHVpbnB1dF9mZl91cGxvYWQgc3RydWN0LiBJdCB3aWxsIGJlIGZpbGxlZCBpbiB3aXRoIHRoZQorICogICAgICBmZl9lZmZlY3RzIHBhc3NlZCB0byB1cGxvYWRfZWZmZWN0KCkuCisgKiAgIDQuIFBlcmZvcm0gdGhlIGVmZmVjdCB1cGxvYWQsIGFuZCBwbGFjZSBhIHJldHVybiBjb2RlIGJhY2sgaW50bworICAgICAgICB0aGUgdWlucHV0X2ZmX3VwbG9hZCBzdHJ1Y3QuCisgKiAgIDUuIElzc3VlIGEgVUlfRU5EX0ZGX1VQTE9BRCBpb2N0bCwgYWxzbyBnaXZpbmcgaXQgdGhlCisgKiAgICAgIHVpbnB1dF9mZl91cGxvYWRfZWZmZWN0IHN0cnVjdC4gVGhpcyB3aWxsIGNvbXBsZXRlIGV4ZWN1dGlvbgorICogICAgICBvZiBvdXIgdXBsb2FkX2VmZmVjdCgpIGhhbmRsZXIuCisgKgorICogVG8gaW1wbGVtZW50IGVyYXNlX2VmZmVjdCgpOgorICogICAxLiBXYWl0IGZvciBhbiBldmVudCB3aXRoIHR5cGUgPT0gRVZfVUlOUFVUIGFuZCBjb2RlID09IFVJX0ZGX0VSQVNFLgorICogICAgICBBIHJlcXVlc3QgSUQgd2lsbCBiZSBnaXZlbiBpbiAndmFsdWUnLgorICogICAyLiBBbGxvY2F0ZSBhIHVpbnB1dF9mZl9lcmFzZSBzdHJ1Y3QsIGZpbGwgaW4gcmVxdWVzdF9pZCB3aXRoCisgKiAgICAgIHRoZSAndmFsdWUnIGZyb20gdGhlIEVWX1VJTlBVVCBldmVudC4KKyAqICAgMy4gSXNzdWUgYSBVSV9CRUdJTl9GRl9FUkFTRSBpb2N0bCwgZ2l2aW5nIGl0IHRoZQorICogICAgICB1aW5wdXRfZmZfZXJhc2Ugc3RydWN0LiBJdCB3aWxsIGJlIGZpbGxlZCBpbiB3aXRoIHRoZQorICogICAgICBlZmZlY3QgSUQgcGFzc2VkIHRvIGVyYXNlX2VmZmVjdCgpLgorICogICA0LiBQZXJmb3JtIHRoZSBlZmZlY3QgZXJhc3VyZSwgYW5kIHBsYWNlIGEgcmV0dXJuIGNvZGUgYmFjaworICogICAgICBpbnRvIHRoZSB1aW5wdXRfZmZfZXJhc2Ugc3RydWN0LgorICogICA1LiBJc3N1ZSBhIFVJX0VORF9GRl9FUkFTRSBpb2N0bCwgYWxzbyBnaXZpbmcgaXQgdGhlCisgKiAgICAgIHVpbnB1dF9mZl9lcmFzZV9lZmZlY3Qgc3RydWN0LiBUaGlzIHdpbGwgY29tcGxldGUgZXhlY3V0aW9uCisgKiAgICAgIG9mIG91ciBlcmFzZV9lZmZlY3QoKSBoYW5kbGVyLgorICovCisKKy8qCisgKiBUaGlzIGlzIHRoZSBuZXcgZXZlbnQgdHlwZSwgdXNlZCBvbmx5IGJ5IHVpbnB1dC4KKyAqICdjb2RlJyBpcyBVSV9GRl9VUExPQUQgb3IgVUlfRkZfRVJBU0UsIGFuZCAndmFsdWUnCisgKiBpcyB0aGUgdW5pcXVlIHJlcXVlc3QgSUQuIFRoaXMgbnVtYmVyIHdhcyBwaWNrZWQKKyAqIGFyYml0cmFyaWx5LCBhYm92ZSBFVl9NQVggKHNpbmNlIHRoZSBpbnB1dCBzeXN0ZW0KKyAqIG5ldmVyIHNlZXMgaXQpIGJ1dCBpbiB0aGUgcmFuZ2Ugb2YgYSAxNi1iaXQgaW50LgorICovCisjZGVmaW5lIEVWX1VJTlBVVAkJMHgwMTAxCisjZGVmaW5lIFVJX0ZGX1VQTE9BRAkJMQorI2RlZmluZSBVSV9GRl9FUkFTRQkJMgorCisjZGVmaW5lIFVJTlBVVF9NQVhfTkFNRV9TSVpFCTgwCitzdHJ1Y3QgdWlucHV0X3VzZXJfZGV2IHsKKwljaGFyIG5hbWVbVUlOUFVUX01BWF9OQU1FX1NJWkVdOworCXN0cnVjdCBpbnB1dF9pZCBpZDsKKwlpbnQgZmZfZWZmZWN0c19tYXg7CisJaW50IGFic21heFtBQlNfQ05UXTsKKwlpbnQgYWJzbWluW0FCU19DTlRdOworCWludCBhYnNmdXp6W0FCU19DTlRdOworCWludCBhYnNmbGF0W0FCU19DTlRdOworfTsKKyNlbmRpZgkvKiBfX1VJTlBVVF9IXyAqLworCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdWlvLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdWlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZmNGE4NgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC91aW8uaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIF9fTElOVVhfVUlPX0gKKyNkZWZpbmUgX19MSU5VWF9VSU9fSAorCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICoJQmVya2VsZXkgc3R5bGUgVUlPIHN0cnVjdHVyZXMJLQlBbGFuIENveCAxOTk0LgorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKK3N0cnVjdCBpb3ZlYworeworCXZvaWQgKmlvdl9iYXNlOwkvKiBCU0QgdXNlcyBjYWRkcl90ICgxMDAzLjFnIHJlcXVpcmVzIHZvaWQgKikgKi8KKwlfX2tlcm5lbF9zaXplX3QgaW92X2xlbjsgLyogTXVzdCBiZSBzaXplX3QgKDEwMDMuMWcpICovCit9OworCisvKgorICoJVUlPX01BWElPViBzaGFsbCBiZSBhdCBsZWFzdCAxNiAxMDAzLjFnICg1LjQuMS4xKQorICovCisgCisjZGVmaW5lIFVJT19GQVNUSU9WCTgKKyNkZWZpbmUgVUlPX01BWElPVgkxMDI0CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdWx0cmFzb3VuZC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3VsdHJhc291bmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTMzOWRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3VsdHJhc291bmQuaApAQCAtMCwwICsxLDEwMyBAQAorI2lmbmRlZiBfVUxUUkFTT1VORF9IXworI2RlZmluZSBfVUxUUkFTT1VORF9IXworLyoKKyAqCXVsdHJhc291bmQuaCAtIE1hY3JvcyBmb3IgcHJvZ3JhbW1pbmcgdGhlIEdyYXZpcyBVbHRyYXNvdW5kCisgKgkJCVRoZXNlIG1hY3JvcyBhcmUgZXh0cmVtZWx5IGRldmljZSBkZXBlbmRlbnQKKyAqCQkJYW5kIG5vdCBwb3J0YWJsZS4KKyAqLworLyoKKyAqIENvcHlyaWdodCAoQykgYnkgSGFubnUgU2F2b2xhaW5lbiAxOTkzLTE5OTcKKyAqCisgKiBPU1MvRnJlZSBmb3IgTGludXggaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFIChHUEwpCisgKiBWZXJzaW9uIDIgKEp1bmUgMTk5MSkuIFNlZSB0aGUgIkNPUFlJTkciIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvZnR3YXJlCisgKiBmb3IgbW9yZSBpbmZvLgorICovCisKKworLyoKKyAqCVByaXZhdGUgZXZlbnRzIGZvciBHcmF2aXMgVWx0cmFzb3VuZCAoR1VTKQorICoKKyAqCUZvcm1hdDoKKyAqCQlieXRlIDAgCQktIFNFUV9QUklWQVRFICgweGZlKQorICoJCWJ5dGUgMSAJCS0gU3ludGhlc2l6ZXIgZGV2aWNlIG51bWJlciAoMC1OKQorICoJCWJ5dGUgMiAJCS0gQ29tbWFuZCAoc2VlIGJlbG93KQorICoJCWJ5dGUgMyAJCS0gVm9pY2UgbnVtYmVyICgwLTMxKQorICoJCWJ5dGVzIDQgYW5kIDUJLSBwYXJhbWV0ZXIgUDEgKHVuc2lnbmVkIHNob3J0KQorICoJCWJ5dGVzIDYgYW5kIDcJLSBwYXJhbWV0ZXIgUDIgKHVuc2lnbmVkIHNob3J0KQorICoKKyAqCUNvbW1hbmRzOgorICoJCUVhY2ggY29tbWFuZCBhZmZlY3RzIG9uZSB2b2ljZSBkZWZpbmVkIGluIGJ5dGUgMy4KKyAqCQlVbnVzZWQgcGFyYW1ldGVycyAoUDEgYW5kL29yIFAyICpNVVNUKiBiZSBpbml0aWFsaXplZCB0byB6ZXJvKS4KKyAqCQlfR1VTX05VTVZPSUNFUwktIFNldHMgbWF4LiBudW1iZXIgb2YgY29uY3VycmVudCB2b2ljZXMgKFAxPTE0LTMxLCBkZWZhdWx0IDE2KQorICoJCV9HVVNfVk9JQ0VTQU1QTEUtICoqKioqKioqKioqKiBPQlNPTEVURSAqKioqKioqKioqKioqCisgKgkJX0dVU19WT0lDRU9OCS0gU3RhcnRzIHZvaWNlIChQMT12b2ljZSBtb2RlKQorICoJCV9HVVNfVk9JQ0VPRkYJLSBTdG9wcyB2b2ljZSAobm8gcGFyYW1ldGVycykKKyAqCQlfR1VTX1ZPSUNFRkFERQktIFN0b3BzIHRoZSB2b2ljZSBzbW9vdGhseS4KKyAqCQlfR1VTX1ZPSUNFTU9ERQktIEFsdGVycyB0aGUgdm9pY2UgbW9kZSwgZG9uJ3Qgc3RhcnQgb3Igc3RvcCB2b2ljZSAoUDE9dm9pY2UgbW9kZSkKKyAqCQlfR1VTX1ZPSUNFQkFMQQktIFNldHMgdm9pY2UgYmFsYW5jZSAoUDEsIDA9bGVmdCwgNz1taWRkbGUgYW5kIDE1PXJpZ2h0LCBkZWZhdWx0IDcpCisgKgkJX0dVU19WT0lDRUZSRVEJLSBTZXRzIHZvaWNlIChzYW1wbGUpIHBsYXliYWNrIGZyZXF1ZW5jeSAoUDE9SHopCisgKgkJX0dVU19WT0lDRVZPTAktIFNldHMgdm9pY2Ugdm9sdW1lIChQMT12b2x1bWUsIDB4ZmZmPW1heCwgMHhlZmY9aGFsZiwgMHgwMDA9b2ZmKQorICoJCV9HVVNfVk9JQ0VWT0wyCS0gU2V0cyB2b2ljZSB2b2x1bWUgKFAxPXZvbHVtZSwgMHhmZmY9bWF4LCAweGVmZj1oYWxmLCAweDAwMD1vZmYpCisgKgkJCQkgIChMaWtlIEdVU19WT0lDRVZPTCBidXQgZG9lc24ndCBjaGFuZ2UgdGhlIGh3CisgKgkJCQkgIHZvbHVtZS4gSXQganVzdCB1cGRhdGVzIHZvbHVtZSBpbiB0aGUgdm9pY2UgdGFibGUpLgorICoKKyAqCQlfR1VTX1JBTVBSQU5HRQktIFNldHMgbGltaXRzIGZvciB2b2x1bWUgcmFtcGluZyAoUDE9bG93IHZvbHVtZSwgUDI9aGlnaCB2b2x1bWUpCisgKgkJX0dVU19SQU1QUkFURQktIFNldHMgdGhlIHNwZWVkIGZvciB2b2x1bWUgcmFtcGluZyAoUDE9c2NhbGUsIFAyPXJhdGUpCisgKgkJX0dVU19SQU1QTU9ERQktIFNldHMgdGhlIHZvbHVtZSByYW1waW5nIG1vZGUgKFAxPXJhbXBpbmcgbW9kZSkKKyAqCQlfR1VTX1JBTVBPTgktIFN0YXJ0cyB2b2x1bWUgcmFtcGluZyAobm8gcGFyYW1ldGVycykKKyAqCQlfR1VTX1JBTVBPRkYJLSBTdG9wcyB2b2x1bWUgcmFtcGluZyAobm8gcGFyYW1ldGVycykKKyAqCQlfR1VTX1ZPTFVNRV9TQ0FMRSAtIENoYW5nZXMgdGhlIHZvbHVtZSBjYWxjdWxhdGlvbiBjb25zdGFudHMKKyAqCQkJCSAgZm9yIGFsbCB2b2ljZXMuCisgKi8KKworI2RlZmluZSBfR1VTX05VTVZPSUNFUwkJMHgwMAorI2RlZmluZSBfR1VTX1ZPSUNFU0FNUExFCTB4MDEJLyogT0JTT0xFVEUgKi8KKyNkZWZpbmUgX0dVU19WT0lDRU9OCQkweDAyCisjZGVmaW5lIF9HVVNfVk9JQ0VPRkYJCTB4MDMKKyNkZWZpbmUgX0dVU19WT0lDRU1PREUJCTB4MDQKKyNkZWZpbmUgX0dVU19WT0lDRUJBTEEJCTB4MDUKKyNkZWZpbmUgX0dVU19WT0lDRUZSRVEJCTB4MDYKKyNkZWZpbmUgX0dVU19WT0lDRVZPTAkJMHgwNworI2RlZmluZSBfR1VTX1JBTVBSQU5HRQkJMHgwOAorI2RlZmluZSBfR1VTX1JBTVBSQVRFCQkweDA5CisjZGVmaW5lIF9HVVNfUkFNUE1PREUJCTB4MGEKKyNkZWZpbmUgX0dVU19SQU1QT04JCTB4MGIKKyNkZWZpbmUgX0dVU19SQU1QT0ZGCQkweDBjCisjZGVmaW5lIF9HVVNfVk9JQ0VGQURFCQkweDBkCisjZGVmaW5lIF9HVVNfVk9MVU1FX1NDQUxFCTB4MGUKKyNkZWZpbmUgX0dVU19WT0lDRVZPTDIJCTB4MGYKKyNkZWZpbmUgX0dVU19WT0lDRV9QT1MJCTB4MTAKKworLyoKKyAqCUdVUyBBUEkgbWFjcm9zCisgKi8KKworI2RlZmluZSBfR1VTX0NNRChjaG4sIHZvaWNlLCBjbWQsIHAxLCBwMikgXAorCQkJCQl7X1NFUV9ORUVEQlVGKDgpOyBfc2VxYnVmW19zZXFidWZwdHJdID0gU0VRX1BSSVZBVEU7XAorCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrMV0gPSAoY2huKTsgX3NlcWJ1Zltfc2VxYnVmcHRyKzJdID0gY21kO1wKKwkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzNdID0gdm9pY2U7XAorCQkJCQkqKHVuc2lnbmVkIHNob3J0KikmX3NlcWJ1Zltfc2VxYnVmcHRyKzRdID0gcDE7XAorCQkJCQkqKHVuc2lnbmVkIHNob3J0KikmX3NlcWJ1Zltfc2VxYnVmcHRyKzZdID0gcDI7XAorCQkJCQlfU0VRX0FEVkJVRig4KTt9CisKKyNkZWZpbmUgR1VTX05VTVZPSUNFUyhjaG4sIHAxKQkJCV9HVVNfQ01EKGNobiwgMCwgX0dVU19OVU1WT0lDRVMsIChwMSksIDApCisjZGVmaW5lIEdVU19WT0lDRVNBTVBMRShjaG4sIHZvaWNlLCBwMSkJCV9HVVNfQ01EKGNobiwgdm9pY2UsIF9HVVNfVk9JQ0VTQU1QTEUsIChwMSksIDApCS8qIE9CU09MRVRFICovCisjZGVmaW5lIEdVU19WT0lDRU9OKGNobiwgdm9pY2UsIHAxKQkJX0dVU19DTUQoY2huLCB2b2ljZSwgX0dVU19WT0lDRU9OLCAocDEpLCAwKQorI2RlZmluZSBHVVNfVk9JQ0VPRkYoY2huLCB2b2ljZSkJCV9HVVNfQ01EKGNobiwgdm9pY2UsIF9HVVNfVk9JQ0VPRkYsIDAsIDApCisjZGVmaW5lIEdVU19WT0lDRUZBREUoY2huLCB2b2ljZSkJCV9HVVNfQ01EKGNobiwgdm9pY2UsIF9HVVNfVk9JQ0VGQURFLCAwLCAwKQorI2RlZmluZSBHVVNfVk9JQ0VNT0RFKGNobiwgdm9pY2UsIHAxKQkJX0dVU19DTUQoY2huLCB2b2ljZSwgX0dVU19WT0lDRU1PREUsIChwMSksIDApCisjZGVmaW5lIEdVU19WT0lDRUJBTEEoY2huLCB2b2ljZSwgcDEpCQlfR1VTX0NNRChjaG4sIHZvaWNlLCBfR1VTX1ZPSUNFQkFMQSwgKHAxKSwgMCkKKyNkZWZpbmUgR1VTX1ZPSUNFRlJFUShjaG4sIHZvaWNlLCBwKQkJX0dVU19DTUQoY2huLCB2b2ljZSwgX0dVU19WT0lDRUZSRVEsIFwKKwkJCQkJCQkocCkgJiAweGZmZmYsICgocCkgPj4gMTYpICYgMHhmZmZmKQorI2RlZmluZSBHVVNfVk9JQ0VWT0woY2huLCB2b2ljZSwgcDEpCQlfR1VTX0NNRChjaG4sIHZvaWNlLCBfR1VTX1ZPSUNFVk9MLCAocDEpLCAwKQorI2RlZmluZSBHVVNfVk9JQ0VWT0wyKGNobiwgdm9pY2UsIHAxKQkJX0dVU19DTUQoY2huLCB2b2ljZSwgX0dVU19WT0lDRVZPTDIsIChwMSksIDApCisjZGVmaW5lIEdVU19SQU1QUkFOR0UoY2huLCB2b2ljZSwgbG93LCBoaWdoKQlfR1VTX0NNRChjaG4sIHZvaWNlLCBfR1VTX1JBTVBSQU5HRSwgKGxvdyksIChoaWdoKSkKKyNkZWZpbmUgR1VTX1JBTVBSQVRFKGNobiwgdm9pY2UsIHAxLCBwMikJX0dVU19DTUQoY2huLCB2b2ljZSwgX0dVU19SQU1QUkFURSwgKHAxKSwgKHAyKSkKKyNkZWZpbmUgR1VTX1JBTVBNT0RFKGNobiwgdm9pY2UsIHAxKQkJX0dVU19DTUQoY2huLCB2b2ljZSwgX0dVU19SQU1QTU9ERSwgKHAxKSwgMCkKKyNkZWZpbmUgR1VTX1JBTVBPTihjaG4sIHZvaWNlLCBwMSkJCV9HVVNfQ01EKGNobiwgdm9pY2UsIF9HVVNfUkFNUE9OLCAocDEpLCAwKQorI2RlZmluZSBHVVNfUkFNUE9GRihjaG4sIHZvaWNlKQkJCV9HVVNfQ01EKGNobiwgdm9pY2UsIF9HVVNfUkFNUE9GRiwgMCwgMCkKKyNkZWZpbmUgR1VTX1ZPTFVNRV9TQ0FMRShjaG4sIHZvaWNlLCBwMSwgcDIpCV9HVVNfQ01EKGNobiwgdm9pY2UsIF9HVVNfVk9MVU1FX1NDQUxFLCAocDEpLCAocDIpKQorI2RlZmluZSBHVVNfVk9JQ0VfUE9TKGNobiwgdm9pY2UsIHApCQlfR1VTX0NNRChjaG4sIHZvaWNlLCBfR1VTX1ZPSUNFX1BPUywgXAorCQkJCQkJCShwKSAmIDB4ZmZmZiwgKChwKSA+PiAxNikgJiAweGZmZmYpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3VuLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTU2MWM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3VuLmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBfTElOVVhfVU5fSAorI2RlZmluZSBfTElOVVhfVU5fSAorCisjZGVmaW5lIFVOSVhfUEFUSF9NQVgJMTA4CisKK3N0cnVjdCBzb2NrYWRkcl91biB7CisJc2FfZmFtaWx5X3Qgc3VuX2ZhbWlseTsJLyogQUZfVU5JWCAqLworCWNoYXIgc3VuX3BhdGhbVU5JWF9QQVRIX01BWF07CS8qIHBhdGhuYW1lICovCit9OworCisjZW5kaWYgLyogX0xJTlVYX1VOX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC91bmlzdGQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC91bmlzdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYThkNWI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3VuaXN0ZC5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBfTElOVVhfVU5JU1REX0hfCisjZGVmaW5lIF9MSU5VWF9VTklTVERfSF8KKworLyoKKyAqIEluY2x1ZGUgbWFjaGluZSBzcGVjaWZpYyBzeXNjYWxsIG51bWJlcnMKKyAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKworI2VuZGlmIC8qIF9MSU5VWF9VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC91c2IvYXVkaW8uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC91c2IvYXVkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzU0ZGJhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3VzYi9hdWRpby5oCkBAIC0wLDAgKzEsNTQ1IEBACisvKgorICogPGxpbnV4L3VzYi9hdWRpby5oPiAtLSBVU0IgQXVkaW8gZGVmaW5pdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFRodW10cm9uaWNzIFB0eSBMdGQuCisgKiBEZXZlbG9wZWQgZm9yIFRodW10cm9uaWNzIGJ5IEdyZXkgSW5ub3ZhdGlvbgorICogQmVuIFdpbGxpYW1zb24gPGJlbi53aWxsaWFtc29uQGdyZXlpbm5vdmF0aW9uLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIGZpbGUgaG9sZHMgVVNCIGNvbnN0YW50cyBhbmQgc3RydWN0dXJlcyBkZWZpbmVkCisgKiBieSB0aGUgVVNCIERldmljZSBDbGFzcyBEZWZpbml0aW9uIGZvciBBdWRpbyBEZXZpY2VzLgorICogQ29tbWVudHMgYmVsb3cgcmVmZXJlbmNlIHJlbGV2YW50IHNlY3Rpb25zIG9mIHRoYXQgZG9jdW1lbnQ6CisgKgorICogaHR0cDovL3d3dy51c2Iub3JnL2RldmVsb3BlcnMvZGV2Y2xhc3NfZG9jcy9hdWRpbzEwLnBkZgorICoKKyAqIFR5cGVzIGFuZCBkZWZpbmVzIGluIHRoaXMgZmlsZSBhcmUgZWl0aGVyIHNwZWNpZmljIHRvIHZlcnNpb24gMS4wIG9mCisgKiB0aGlzIHN0YW5kYXJkIG9yIGNvbW1vbiBmb3IgbmV3ZXIgdmVyc2lvbnMuCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1VTQl9BVURJT19ICisjZGVmaW5lIF9fTElOVVhfVVNCX0FVRElPX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIGJJbnRlcmZhY2VQcm90b2NvbCB2YWx1ZXMgdG8gZGVub3RlIHRoZSB2ZXJzaW9uIG9mIHRoZSBzdGFuZGFyZCB1c2VkICovCisjZGVmaW5lIFVBQ19WRVJTSU9OXzEJCQkweDAwCisjZGVmaW5lIFVBQ19WRVJTSU9OXzIJCQkweDIwCisKKy8qIEEuMiBBdWRpbyBJbnRlcmZhY2UgU3ViY2xhc3MgQ29kZXMgKi8KKyNkZWZpbmUgVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTAkweDAxCisjZGVmaW5lIFVTQl9TVUJDTEFTU19BVURJT1NUUkVBTUlORwkweDAyCisjZGVmaW5lIFVTQl9TVUJDTEFTU19NSURJU1RSRUFNSU5HCTB4MDMKKworLyogQS41IEF1ZGlvIENsYXNzLVNwZWNpZmljIEFDIEludGVyZmFjZSBEZXNjcmlwdG9yIFN1YnR5cGVzICovCisjZGVmaW5lIFVBQ19IRUFERVIJCQkweDAxCisjZGVmaW5lIFVBQ19JTlBVVF9URVJNSU5BTAkJMHgwMgorI2RlZmluZSBVQUNfT1VUUFVUX1RFUk1JTkFMCQkweDAzCisjZGVmaW5lIFVBQ19NSVhFUl9VTklUCQkJMHgwNAorI2RlZmluZSBVQUNfU0VMRUNUT1JfVU5JVAkJMHgwNQorI2RlZmluZSBVQUNfRkVBVFVSRV9VTklUCQkweDA2CisjZGVmaW5lIFVBQzFfUFJPQ0VTU0lOR19VTklUCQkweDA3CisjZGVmaW5lIFVBQzFfRVhURU5TSU9OX1VOSVQJCTB4MDgKKworLyogQS42IEF1ZGlvIENsYXNzLVNwZWNpZmljIEFTIEludGVyZmFjZSBEZXNjcmlwdG9yIFN1YnR5cGVzICovCisjZGVmaW5lIFVBQ19BU19HRU5FUkFMCQkJMHgwMQorI2RlZmluZSBVQUNfRk9STUFUX1RZUEUJCQkweDAyCisjZGVmaW5lIFVBQ19GT1JNQVRfU1BFQ0lGSUMJCTB4MDMKKworLyogQS43IFByb2Nlc3NpbmcgVW5pdCBQcm9jZXNzIFR5cGVzICovCisjZGVmaW5lIFVBQ19QUk9DRVNTX1VOREVGSU5FRAkJMHgwMAorI2RlZmluZSBVQUNfUFJPQ0VTU19VUF9ET1dOTUlYCQkweDAxCisjZGVmaW5lIFVBQ19QUk9DRVNTX0RPTEJZX1BST0xPR0lDCTB4MDIKKyNkZWZpbmUgVUFDX1BST0NFU1NfU1RFUkVPX0VYVEVOREVSCTB4MDMKKyNkZWZpbmUgVUFDX1BST0NFU1NfUkVWRVJCCQkweDA0CisjZGVmaW5lIFVBQ19QUk9DRVNTX0NIT1JVUwkJMHgwNQorI2RlZmluZSBVQUNfUFJPQ0VTU19EWU5fUkFOR0VfQ09NUAkweDA2CisKKy8qIEEuOCBBdWRpbyBDbGFzcy1TcGVjaWZpYyBFbmRwb2ludCBEZXNjcmlwdG9yIFN1YnR5cGVzICovCisjZGVmaW5lIFVBQ19FUF9HRU5FUkFMCQkJMHgwMQorCisvKiBBLjkgQXVkaW8gQ2xhc3MtU3BlY2lmaWMgUmVxdWVzdCBDb2RlcyAqLworI2RlZmluZSBVQUNfU0VUXwkJCTB4MDAKKyNkZWZpbmUgVUFDX0dFVF8JCQkweDgwCisKKyNkZWZpbmUgVUFDX19DVVIJCQkweDEKKyNkZWZpbmUgVUFDX19NSU4JCQkweDIKKyNkZWZpbmUgVUFDX19NQVgJCQkweDMKKyNkZWZpbmUgVUFDX19SRVMJCQkweDQKKyNkZWZpbmUgVUFDX19NRU0JCQkweDUKKworI2RlZmluZSBVQUNfU0VUX0NVUgkJCShVQUNfU0VUXyB8IFVBQ19fQ1VSKQorI2RlZmluZSBVQUNfR0VUX0NVUgkJCShVQUNfR0VUXyB8IFVBQ19fQ1VSKQorI2RlZmluZSBVQUNfU0VUX01JTgkJCShVQUNfU0VUXyB8IFVBQ19fTUlOKQorI2RlZmluZSBVQUNfR0VUX01JTgkJCShVQUNfR0VUXyB8IFVBQ19fTUlOKQorI2RlZmluZSBVQUNfU0VUX01BWAkJCShVQUNfU0VUXyB8IFVBQ19fTUFYKQorI2RlZmluZSBVQUNfR0VUX01BWAkJCShVQUNfR0VUXyB8IFVBQ19fTUFYKQorI2RlZmluZSBVQUNfU0VUX1JFUwkJCShVQUNfU0VUXyB8IFVBQ19fUkVTKQorI2RlZmluZSBVQUNfR0VUX1JFUwkJCShVQUNfR0VUXyB8IFVBQ19fUkVTKQorI2RlZmluZSBVQUNfU0VUX01FTQkJCShVQUNfU0VUXyB8IFVBQ19fTUVNKQorI2RlZmluZSBVQUNfR0VUX01FTQkJCShVQUNfR0VUXyB8IFVBQ19fTUVNKQorCisjZGVmaW5lIFVBQ19HRVRfU1RBVAkJCTB4ZmYKKworLyogQS4xMCBDb250cm9sIFNlbGVjdG9yIENvZGVzICovCisKKy8qIEEuMTAuMSBUZXJtaW5hbCBDb250cm9sIFNlbGVjdG9ycyAqLworI2RlZmluZSBVQUNfVEVSTV9DT1BZX1BST1RFQ1QJCTB4MDEKKworLyogQS4xMC4yIEZlYXR1cmUgVW5pdCBDb250cm9sIFNlbGVjdG9ycyAqLworI2RlZmluZSBVQUNfRlVfTVVURQkJCTB4MDEKKyNkZWZpbmUgVUFDX0ZVX1ZPTFVNRQkJCTB4MDIKKyNkZWZpbmUgVUFDX0ZVX0JBU1MJCQkweDAzCisjZGVmaW5lIFVBQ19GVV9NSUQJCQkweDA0CisjZGVmaW5lIFVBQ19GVV9UUkVCTEUJCQkweDA1CisjZGVmaW5lIFVBQ19GVV9HUkFQSElDX0VRVUFMSVpFUgkweDA2CisjZGVmaW5lIFVBQ19GVV9BVVRPTUFUSUNfR0FJTgkJMHgwNworI2RlZmluZSBVQUNfRlVfREVMQVkJCQkweDA4CisjZGVmaW5lIFVBQ19GVV9CQVNTX0JPT1NUCQkweDA5CisjZGVmaW5lIFVBQ19GVV9MT1VETkVTUwkJCTB4MGEKKworI2RlZmluZSBVQUNfQ09OVFJPTF9CSVQoQ1MpCSgxIDw8ICgoQ1MpIC0gMSkpCisKKy8qIEEuMTAuMy4xIFVwL0Rvd24tbWl4IFByb2Nlc3NpbmcgVW5pdCBDb250cm9scyBTZWxlY3RvcnMgKi8KKyNkZWZpbmUgVUFDX1VEX0VOQUJMRQkJCTB4MDEKKyNkZWZpbmUgVUFDX1VEX01PREVfU0VMRUNUCQkweDAyCisKKy8qIEEuMTAuMy4yIERvbGJ5IFByb2xvZ2ljICh0bSkgUHJvY2Vzc2luZyBVbml0IENvbnRyb2xzIFNlbGVjdG9ycyAqLworI2RlZmluZSBVQUNfRFBfRU5BQkxFCQkJMHgwMQorI2RlZmluZSBVQUNfRFBfTU9ERV9TRUxFQ1QJCTB4MDIKKworLyogQS4xMC4zLjMgM0QgU3RlcmVvIEV4dGVuZGVyIFByb2Nlc3NpbmcgVW5pdCBDb250cm9sIFNlbGVjdG9ycyAqLworI2RlZmluZSBVQUNfM0RfRU5BQkxFCQkJMHgwMQorI2RlZmluZSBVQUNfM0RfU1BBQ0UJCQkweDAyCisKKy8qIEEuMTAuMy40IFJldmVyYmVyYXRpb24gUHJvY2Vzc2luZyBVbml0IENvbnRyb2wgU2VsZWN0b3JzICovCisjZGVmaW5lIFVBQ19SRVZFUkJfRU5BQkxFCQkweDAxCisjZGVmaW5lIFVBQ19SRVZFUkJfTEVWRUwJCTB4MDIKKyNkZWZpbmUgVUFDX1JFVkVSQl9USU1FCQkJMHgwMworI2RlZmluZSBVQUNfUkVWRVJCX0ZFRURCQUNLCQkweDA0CisKKy8qIEEuMTAuMy41IENob3J1cyBQcm9jZXNzaW5nIFVuaXQgQ29udHJvbCBTZWxlY3RvcnMgKi8KKyNkZWZpbmUgVUFDX0NIT1JVU19FTkFCTEUJCTB4MDEKKyNkZWZpbmUgVUFDX0NIT1JVU19MRVZFTAkJMHgwMgorI2RlZmluZSBVQUNfQ0hPUlVTX1JBVEUJCQkweDAzCisjZGVmaW5lIFVBQ19DSE9SVVNfREVQVEgJCTB4MDQKKworLyogQS4xMC4zLjYgRHluYW1pYyBSYW5nZSBDb21wcmVzc29yIFVuaXQgQ29udHJvbCBTZWxlY3RvcnMgKi8KKyNkZWZpbmUgVUFDX0RDUl9FTkFCTEUJCQkweDAxCisjZGVmaW5lIFVBQ19EQ1JfUkFURQkJCTB4MDIKKyNkZWZpbmUgVUFDX0RDUl9NQVhBTVBMCQkJMHgwMworI2RlZmluZSBVQUNfRENSX1RIUkVTSE9MRAkJMHgwNAorI2RlZmluZSBVQUNfRENSX0FUVEFDS19USU1FCQkweDA1CisjZGVmaW5lIFVBQ19EQ1JfUkVMRUFTRV9USU1FCQkweDA2CisKKy8qIEEuMTAuNCBFeHRlbnNpb24gVW5pdCBDb250cm9sIFNlbGVjdG9ycyAqLworI2RlZmluZSBVQUNfWFVfRU5BQkxFCQkJMHgwMQorCisvKiBNSURJIC0gQS4xIE1TIENsYXNzLVNwZWNpZmljIEludGVyZmFjZSBEZXNjcmlwdG9yIFN1YnR5cGVzICovCisjZGVmaW5lIFVBQ19NU19IRUFERVIJCQkweDAxCisjZGVmaW5lIFVBQ19NSURJX0lOX0pBQ0sJCTB4MDIKKyNkZWZpbmUgVUFDX01JRElfT1VUX0pBQ0sJCTB4MDMKKworLyogTUlESSAtIEEuMSBNUyBDbGFzcy1TcGVjaWZpYyBFbmRwb2ludCBEZXNjcmlwdG9yIFN1YnR5cGVzICovCisjZGVmaW5lIFVBQ19NU19HRU5FUkFMCQkJMHgwMQorCisvKiBUZXJtaW5hbHMgLSAyLjEgVVNCIFRlcm1pbmFsIFR5cGVzICovCisjZGVmaW5lIFVBQ19URVJNSU5BTF9VTkRFRklORUQJCTB4MTAwCisjZGVmaW5lIFVBQ19URVJNSU5BTF9TVFJFQU1JTkcJCTB4MTAxCisjZGVmaW5lIFVBQ19URVJNSU5BTF9WRU5ET1JfU1BFQwkweDFGRgorCisvKiBUZXJtaW5hbCBDb250cm9sIFNlbGVjdG9ycyAqLworLyogNC4zLjIgIENsYXNzLVNwZWNpZmljIEFDIEludGVyZmFjZSBEZXNjcmlwdG9yICovCitzdHJ1Y3QgdWFjMV9hY19oZWFkZXJfZGVzY3JpcHRvciB7CisJX191OCAgYkxlbmd0aDsJCQkvKiA4ICsgbiAqLworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsJCS8qIFVTQl9EVF9DU19JTlRFUkZBQ0UgKi8KKwlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CS8qIFVBQ19NU19IRUFERVIgKi8KKwlfX2xlMTYgYmNkQURDOwkJCS8qIDB4MDEwMCAqLworCV9fbGUxNiB3VG90YWxMZW5ndGg7CQkvKiBpbmNsdWRlcyBVbml0IGFuZCBUZXJtaW5hbCBkZXNjLiAqLworCV9fdTggIGJJbkNvbGxlY3Rpb247CQkvKiBuICovCisJX191OCAgYmFJbnRlcmZhY2VOcltdOwkJLyogW25dICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBVQUNfRFRfQUNfSEVBREVSX1NJWkUobikJKDggKyAobikpCisKKy8qIEFzIGFib3ZlLCBidXQgbW9yZSB1c2VmdWwgZm9yIGRlZmluaW5nIHlvdXIgb3duIGRlc2NyaXB0b3JzOiAqLworI2RlZmluZSBERUNMQVJFX1VBQ19BQ19IRUFERVJfREVTQ1JJUFRPUihuKQkJCVwKK3N0cnVjdCB1YWMxX2FjX2hlYWRlcl9kZXNjcmlwdG9yXyMjbiB7CQkJXAorCV9fdTggIGJMZW5ndGg7CQkJCQkJXAorCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsJCQkJCVwKKwlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CQkJCVwKKwlfX2xlMTYgYmNkQURDOwkJCQkJCVwKKwlfX2xlMTYgd1RvdGFsTGVuZ3RoOwkJCQkJXAorCV9fdTggIGJJbkNvbGxlY3Rpb247CQkJCQlcCisJX191OCAgYmFJbnRlcmZhY2VOcltuXTsJCQkJCVwKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpCisKKy8qIDQuMy4yLjEgSW5wdXQgVGVybWluYWwgRGVzY3JpcHRvciAqLworc3RydWN0IHVhY19pbnB1dF90ZXJtaW5hbF9kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOwkJCS8qIGluIGJ5dGVzOiAxMiAqLworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsJCS8qIENTX0lOVEVSRkFDRSBkZXNjcmlwdG9yIHR5cGUgKi8KKwlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CS8qIElOUFVUX1RFUk1JTkFMIGRlc2NyaXB0b3Igc3VidHlwZSAqLworCV9fdTggIGJUZXJtaW5hbElEOwkJLyogQ29uc3RhbnQgdW5pcXVlbHkgdGVybWluYWwgSUQgKi8KKwlfX2xlMTYgd1Rlcm1pbmFsVHlwZTsJCS8qIFVTQiBBdWRpbyBUZXJtaW5hbCBUeXBlcyAqLworCV9fdTggIGJBc3NvY1Rlcm1pbmFsOwkJLyogSUQgb2YgdGhlIE91dHB1dCBUZXJtaW5hbCBhc3NvY2lhdGVkICovCisJX191OCAgYk5yQ2hhbm5lbHM7CQkvKiBOdW1iZXIgb2YgbG9naWNhbCBvdXRwdXQgY2hhbm5lbHMgKi8KKwlfX2xlMTYgd0NoYW5uZWxDb25maWc7CisJX191OCAgaUNoYW5uZWxOYW1lczsKKwlfX3U4ICBpVGVybWluYWw7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBVQUNfRFRfSU5QVVRfVEVSTUlOQUxfU0laRQkJCTEyCisKKy8qIFRlcm1pbmFscyAtIDIuMiBJbnB1dCBUZXJtaW5hbCBUeXBlcyAqLworI2RlZmluZSBVQUNfSU5QVVRfVEVSTUlOQUxfVU5ERUZJTkVECQkJMHgyMDAKKyNkZWZpbmUgVUFDX0lOUFVUX1RFUk1JTkFMX01JQ1JPUEhPTkUJCQkweDIwMQorI2RlZmluZSBVQUNfSU5QVVRfVEVSTUlOQUxfREVTS1RPUF9NSUNST1BIT05FCQkweDIwMgorI2RlZmluZSBVQUNfSU5QVVRfVEVSTUlOQUxfUEVSU09OQUxfTUlDUk9QSE9ORQkJMHgyMDMKKyNkZWZpbmUgVUFDX0lOUFVUX1RFUk1JTkFMX09NTklfRElSX01JQ1JPUEhPTkUJCTB4MjA0CisjZGVmaW5lIFVBQ19JTlBVVF9URVJNSU5BTF9NSUNST1BIT05FX0FSUkFZCQkweDIwNQorI2RlZmluZSBVQUNfSU5QVVRfVEVSTUlOQUxfUFJPQ19NSUNST1BIT05FX0FSUkFZCTB4MjA2CisKKy8qIFRlcm1pbmFscyAtIGNvbnRyb2wgc2VsZWN0b3JzICovCisKKyNkZWZpbmUgVUFDX1RFUk1JTkFMX0NTX0NPUFlfUFJPVEVDVF9DT05UUk9MCQkweDAxCisKKy8qIDQuMy4yLjIgT3V0cHV0IFRlcm1pbmFsIERlc2NyaXB0b3IgKi8KK3N0cnVjdCB1YWMxX291dHB1dF90ZXJtaW5hbF9kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOwkJCS8qIGluIGJ5dGVzOiA5ICovCisJX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJLyogQ1NfSU5URVJGQUNFIGRlc2NyaXB0b3IgdHlwZSAqLworCV9fdTggIGJEZXNjcmlwdG9yU3VidHlwZTsJLyogT1VUUFVUX1RFUk1JTkFMIGRlc2NyaXB0b3Igc3VidHlwZSAqLworCV9fdTggIGJUZXJtaW5hbElEOwkJLyogQ29uc3RhbnQgdW5pcXVlbHkgdGVybWluYWwgSUQgKi8KKwlfX2xlMTYgd1Rlcm1pbmFsVHlwZTsJCS8qIFVTQiBBdWRpbyBUZXJtaW5hbCBUeXBlcyAqLworCV9fdTggIGJBc3NvY1Rlcm1pbmFsOwkJLyogSUQgb2YgdGhlIElucHV0IFRlcm1pbmFsIGFzc29jaWF0ZWQgKi8KKwlfX3U4ICBiU291cmNlSUQ7CQkvKiBJRCBvZiB0aGUgY29ubmVjdGVkIFVuaXQgb3IgVGVybWluYWwqLworCV9fdTggIGlUZXJtaW5hbDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIFVBQ19EVF9PVVRQVVRfVEVSTUlOQUxfU0laRQkJCTkKKworLyogVGVybWluYWxzIC0gMi4zIE91dHB1dCBUZXJtaW5hbCBUeXBlcyAqLworI2RlZmluZSBVQUNfT1VUUFVUX1RFUk1JTkFMX1VOREVGSU5FRAkJCTB4MzAwCisjZGVmaW5lIFVBQ19PVVRQVVRfVEVSTUlOQUxfU1BFQUtFUgkJCTB4MzAxCisjZGVmaW5lIFVBQ19PVVRQVVRfVEVSTUlOQUxfSEVBRFBIT05FUwkJCTB4MzAyCisjZGVmaW5lIFVBQ19PVVRQVVRfVEVSTUlOQUxfSEVBRF9NT1VOVEVEX0RJU1BMQVlfQVVESU8JMHgzMDMKKyNkZWZpbmUgVUFDX09VVFBVVF9URVJNSU5BTF9ERVNLVE9QX1NQRUFLRVIJCTB4MzA0CisjZGVmaW5lIFVBQ19PVVRQVVRfVEVSTUlOQUxfUk9PTV9TUEVBS0VSCQkweDMwNQorI2RlZmluZSBVQUNfT1VUUFVUX1RFUk1JTkFMX0NPTU1VTklDQVRJT05fU1BFQUtFUgkweDMwNgorI2RlZmluZSBVQUNfT1VUUFVUX1RFUk1JTkFMX0xPV19GUkVRX0VGRkVDVFNfU1BFQUtFUgkweDMwNworCisvKiBTZXQgYkNvbnRyb2xTaXplID0gMiBhcyBkZWZhdWx0IHNldHRpbmcgKi8KKyNkZWZpbmUgVUFDX0RUX0ZFQVRVUkVfVU5JVF9TSVpFKGNoKQkJKDcgKyAoKGNoKSArIDEpICogMikKKworLyogQXMgYWJvdmUsIGJ1dCBtb3JlIHVzZWZ1bCBmb3IgZGVmaW5pbmcgeW91ciBvd24gZGVzY3JpcHRvcnM6ICovCisjZGVmaW5lIERFQ0xBUkVfVUFDX0ZFQVRVUkVfVU5JVF9ERVNDUklQVE9SKGNoKQkJCVwKK3N0cnVjdCB1YWNfZmVhdHVyZV91bml0X2Rlc2NyaXB0b3JfIyNjaCB7CQkJXAorCV9fdTggIGJMZW5ndGg7CQkJCQkJXAorCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsJCQkJCVwKKwlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CQkJCVwKKwlfX3U4ICBiVW5pdElEOwkJCQkJCVwKKwlfX3U4ICBiU291cmNlSUQ7CQkJCQlcCisJX191OCAgYkNvbnRyb2xTaXplOwkJCQkJXAorCV9fbGUxNiBibWFDb250cm9sc1tjaCArIDFdOwkJCQlcCisJX191OCAgaUZlYXR1cmU7CQkJCQkJXAorfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkKKworLyogNC4zLjIuMyBNaXhlciBVbml0IERlc2NyaXB0b3IgKi8KK3N0cnVjdCB1YWNfbWl4ZXJfdW5pdF9kZXNjcmlwdG9yIHsKKwlfX3U4IGJMZW5ndGg7CisJX191OCBiRGVzY3JpcHRvclR5cGU7CisJX191OCBiRGVzY3JpcHRvclN1YnR5cGU7CisJX191OCBiVW5pdElEOworCV9fdTggYk5ySW5QaW5zOworCV9fdTggYmFTb3VyY2VJRFtdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0YXRpYyBfX2lubGluZV9fIF9fdTggdWFjX21peGVyX3VuaXRfYk5yQ2hhbm5lbHMoc3RydWN0IHVhY19taXhlcl91bml0X2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJcmV0dXJuIGRlc2MtPmJhU291cmNlSURbZGVzYy0+Yk5ySW5QaW5zXTsKK30KKworc3RhdGljIF9faW5saW5lX18gX191MzIgdWFjX21peGVyX3VuaXRfd0NoYW5uZWxDb25maWcoc3RydWN0IHVhY19taXhlcl91bml0X2Rlc2NyaXB0b3IgKmRlc2MsCisJCQkJCQkgIGludCBwcm90b2NvbCkKK3sKKwlpZiAocHJvdG9jb2wgPT0gVUFDX1ZFUlNJT05fMSkKKwkJcmV0dXJuIChkZXNjLT5iYVNvdXJjZUlEW2Rlc2MtPmJOckluUGlucyArIDJdIDw8IDgpIHwKKwkJCWRlc2MtPmJhU291cmNlSURbZGVzYy0+Yk5ySW5QaW5zICsgMV07CisJZWxzZQorCQlyZXR1cm4gIChkZXNjLT5iYVNvdXJjZUlEW2Rlc2MtPmJOckluUGlucyArIDRdIDw8IDI0KSB8CisJCQkoZGVzYy0+YmFTb3VyY2VJRFtkZXNjLT5iTnJJblBpbnMgKyAzXSA8PCAxNikgfAorCQkJKGRlc2MtPmJhU291cmNlSURbZGVzYy0+Yk5ySW5QaW5zICsgMl0gPDwgOCkgIHwKKwkJCShkZXNjLT5iYVNvdXJjZUlEW2Rlc2MtPmJOckluUGlucyArIDFdKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX191OCB1YWNfbWl4ZXJfdW5pdF9pQ2hhbm5lbE5hbWVzKHN0cnVjdCB1YWNfbWl4ZXJfdW5pdF9kZXNjcmlwdG9yICpkZXNjLAorCQkJCQkJaW50IHByb3RvY29sKQoreworCXJldHVybiAocHJvdG9jb2wgPT0gVUFDX1ZFUlNJT05fMSkgPworCQlkZXNjLT5iYVNvdXJjZUlEW2Rlc2MtPmJOckluUGlucyArIDNdIDoKKwkJZGVzYy0+YmFTb3VyY2VJRFtkZXNjLT5iTnJJblBpbnMgKyA1XTsKK30KKworc3RhdGljIF9faW5saW5lX18gX191OCAqdWFjX21peGVyX3VuaXRfYm1Db250cm9scyhzdHJ1Y3QgdWFjX21peGVyX3VuaXRfZGVzY3JpcHRvciAqZGVzYywKKwkJCQkJICAgICAgaW50IHByb3RvY29sKQoreworCXJldHVybiAocHJvdG9jb2wgPT0gVUFDX1ZFUlNJT05fMSkgPworCQkmZGVzYy0+YmFTb3VyY2VJRFtkZXNjLT5iTnJJblBpbnMgKyA0XSA6CisJCSZkZXNjLT5iYVNvdXJjZUlEW2Rlc2MtPmJOckluUGlucyArIDZdOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX3U4IHVhY19taXhlcl91bml0X2lNaXhlcihzdHJ1Y3QgdWFjX21peGVyX3VuaXRfZGVzY3JpcHRvciAqZGVzYykKK3sKKwlfX3U4ICpyYXcgPSAoX191OCAqKSBkZXNjOworCXJldHVybiByYXdbZGVzYy0+Ykxlbmd0aCAtIDFdOworfQorCisvKiA0LjMuMi40IFNlbGVjdG9yIFVuaXQgRGVzY3JpcHRvciAqLworc3RydWN0IHVhY19zZWxlY3Rvcl91bml0X2Rlc2NyaXB0b3IgeworCV9fdTggYkxlbmd0aDsKKwlfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4IGJEZXNjcmlwdG9yU3VidHlwZTsKKwlfX3U4IGJVaW50SUQ7CisJX191OCBiTnJJblBpbnM7CisJX191OCBiYVNvdXJjZUlEW107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RhdGljIF9faW5saW5lX18gX191OCB1YWNfc2VsZWN0b3JfdW5pdF9pU2VsZWN0b3Ioc3RydWN0IHVhY19zZWxlY3Rvcl91bml0X2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJX191OCAqcmF3ID0gKF9fdTggKikgZGVzYzsKKwlyZXR1cm4gcmF3W2Rlc2MtPmJMZW5ndGggLSAxXTsKK30KKworLyogNC4zLjIuNSBGZWF0dXJlIFVuaXQgRGVzY3JpcHRvciAqLworc3RydWN0IHVhY19mZWF0dXJlX3VuaXRfZGVzY3JpcHRvciB7CisJX191OCBiTGVuZ3RoOworCV9fdTggYkRlc2NyaXB0b3JUeXBlOworCV9fdTggYkRlc2NyaXB0b3JTdWJ0eXBlOworCV9fdTggYlVuaXRJRDsKKwlfX3U4IGJTb3VyY2VJRDsKKwlfX3U4IGJDb250cm9sU2l6ZTsKKwlfX3U4IGJtYUNvbnRyb2xzWzBdOyAvKiB2YXJpYWJsZSBsZW5ndGggKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBfX2lubGluZV9fIF9fdTggdWFjX2ZlYXR1cmVfdW5pdF9pRmVhdHVyZShzdHJ1Y3QgdWFjX2ZlYXR1cmVfdW5pdF9kZXNjcmlwdG9yICpkZXNjKQoreworCV9fdTggKnJhdyA9IChfX3U4ICopIGRlc2M7CisJcmV0dXJuIHJhd1tkZXNjLT5iTGVuZ3RoIC0gMV07Cit9CisKKy8qIDQuMy4yLjYgUHJvY2Vzc2luZyBVbml0IERlc2NyaXB0b3JzICovCitzdHJ1Y3QgdWFjX3Byb2Nlc3NpbmdfdW5pdF9kZXNjcmlwdG9yIHsKKwlfX3U4IGJMZW5ndGg7CisJX191OCBiRGVzY3JpcHRvclR5cGU7CisJX191OCBiRGVzY3JpcHRvclN1YnR5cGU7CisJX191OCBiVW5pdElEOworCV9fdTE2IHdQcm9jZXNzVHlwZTsKKwlfX3U4IGJOckluUGluczsKKwlfX3U4IGJhU291cmNlSURbXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdGF0aWMgX19pbmxpbmVfXyBfX3U4IHVhY19wcm9jZXNzaW5nX3VuaXRfYk5yQ2hhbm5lbHMoc3RydWN0IHVhY19wcm9jZXNzaW5nX3VuaXRfZGVzY3JpcHRvciAqZGVzYykKK3sKKwlyZXR1cm4gZGVzYy0+YmFTb3VyY2VJRFtkZXNjLT5iTnJJblBpbnNdOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX3UzMiB1YWNfcHJvY2Vzc2luZ191bml0X3dDaGFubmVsQ29uZmlnKHN0cnVjdCB1YWNfcHJvY2Vzc2luZ191bml0X2Rlc2NyaXB0b3IgKmRlc2MsCisJCQkJCQkgICAgICAgaW50IHByb3RvY29sKQoreworCWlmIChwcm90b2NvbCA9PSBVQUNfVkVSU0lPTl8xKQorCQlyZXR1cm4gKGRlc2MtPmJhU291cmNlSURbZGVzYy0+Yk5ySW5QaW5zICsgMl0gPDwgOCkgfAorCQkJZGVzYy0+YmFTb3VyY2VJRFtkZXNjLT5iTnJJblBpbnMgKyAxXTsKKwllbHNlCisJCXJldHVybiAgKGRlc2MtPmJhU291cmNlSURbZGVzYy0+Yk5ySW5QaW5zICsgNF0gPDwgMjQpIHwKKwkJCShkZXNjLT5iYVNvdXJjZUlEW2Rlc2MtPmJOckluUGlucyArIDNdIDw8IDE2KSB8CisJCQkoZGVzYy0+YmFTb3VyY2VJRFtkZXNjLT5iTnJJblBpbnMgKyAyXSA8PCA4KSAgfAorCQkJKGRlc2MtPmJhU291cmNlSURbZGVzYy0+Yk5ySW5QaW5zICsgMV0pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX3U4IHVhY19wcm9jZXNzaW5nX3VuaXRfaUNoYW5uZWxOYW1lcyhzdHJ1Y3QgdWFjX3Byb2Nlc3NpbmdfdW5pdF9kZXNjcmlwdG9yICpkZXNjLAorCQkJCQkJICAgICBpbnQgcHJvdG9jb2wpCit7CisJcmV0dXJuIChwcm90b2NvbCA9PSBVQUNfVkVSU0lPTl8xKSA/CisJCWRlc2MtPmJhU291cmNlSURbZGVzYy0+Yk5ySW5QaW5zICsgM10gOgorCQlkZXNjLT5iYVNvdXJjZUlEW2Rlc2MtPmJOckluUGlucyArIDVdOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX3U4IHVhY19wcm9jZXNzaW5nX3VuaXRfYkNvbnRyb2xTaXplKHN0cnVjdCB1YWNfcHJvY2Vzc2luZ191bml0X2Rlc2NyaXB0b3IgKmRlc2MsCisJCQkJCQkgICAgaW50IHByb3RvY29sKQoreworCXJldHVybiAocHJvdG9jb2wgPT0gVUFDX1ZFUlNJT05fMSkgPworCQlkZXNjLT5iYVNvdXJjZUlEW2Rlc2MtPmJOckluUGlucyArIDRdIDoKKwkJZGVzYy0+YmFTb3VyY2VJRFtkZXNjLT5iTnJJblBpbnMgKyA2XTsKK30KKworc3RhdGljIF9faW5saW5lX18gX191OCAqdWFjX3Byb2Nlc3NpbmdfdW5pdF9ibUNvbnRyb2xzKHN0cnVjdCB1YWNfcHJvY2Vzc2luZ191bml0X2Rlc2NyaXB0b3IgKmRlc2MsCisJCQkJCQkgICBpbnQgcHJvdG9jb2wpCit7CisJcmV0dXJuIChwcm90b2NvbCA9PSBVQUNfVkVSU0lPTl8xKSA/CisJCSZkZXNjLT5iYVNvdXJjZUlEW2Rlc2MtPmJOckluUGlucyArIDVdIDoKKwkJJmRlc2MtPmJhU291cmNlSURbZGVzYy0+Yk5ySW5QaW5zICsgN107Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fdTggdWFjX3Byb2Nlc3NpbmdfdW5pdF9pUHJvY2Vzc2luZyhzdHJ1Y3QgdWFjX3Byb2Nlc3NpbmdfdW5pdF9kZXNjcmlwdG9yICpkZXNjLAorCQkJCQkJICAgaW50IHByb3RvY29sKQoreworCV9fdTggY29udHJvbF9zaXplID0gdWFjX3Byb2Nlc3NpbmdfdW5pdF9iQ29udHJvbFNpemUoZGVzYywgcHJvdG9jb2wpOworCXJldHVybiBkZXNjLT5iYVNvdXJjZUlEW2Rlc2MtPmJOckluUGlucyArIGNvbnRyb2xfc2l6ZV07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fdTggKnVhY19wcm9jZXNzaW5nX3VuaXRfc3BlY2lmaWMoc3RydWN0IHVhY19wcm9jZXNzaW5nX3VuaXRfZGVzY3JpcHRvciAqZGVzYywKKwkJCQkJCSBpbnQgcHJvdG9jb2wpCit7CisJX191OCBjb250cm9sX3NpemUgPSB1YWNfcHJvY2Vzc2luZ191bml0X2JDb250cm9sU2l6ZShkZXNjLCBwcm90b2NvbCk7CisJcmV0dXJuICZkZXNjLT5iYVNvdXJjZUlEW2Rlc2MtPmJOckluUGlucyArIGNvbnRyb2xfc2l6ZSArIDFdOworfQorCisvKiA0LjUuMiBDbGFzcy1TcGVjaWZpYyBBUyBJbnRlcmZhY2UgRGVzY3JpcHRvciAqLworc3RydWN0IHVhYzFfYXNfaGVhZGVyX2Rlc2NyaXB0b3IgeworCV9fdTggIGJMZW5ndGg7CQkJLyogaW4gYnl0ZXM6IDcgKi8KKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CQkvKiBVU0JfRFRfQ1NfSU5URVJGQUNFICovCisJX191OCAgYkRlc2NyaXB0b3JTdWJ0eXBlOwkvKiBBU19HRU5FUkFMICovCisJX191OCAgYlRlcm1pbmFsTGluazsJCS8qIFRlcm1pbmFsIElEIG9mIGNvbm5lY3RlZCBUZXJtaW5hbCAqLworCV9fdTggIGJEZWxheTsJCQkvKiBEZWxheSBpbnRyb2R1Y2VkIGJ5IHRoZSBkYXRhIHBhdGggKi8KKwlfX2xlMTYgd0Zvcm1hdFRhZzsJCS8qIFRoZSBBdWRpbyBEYXRhIEZvcm1hdCAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgVUFDX0RUX0FTX0hFQURFUl9TSVpFCQk3CisKKy8qIEZvcm1hdHMgLSBBLjEuMSBBdWRpbyBEYXRhIEZvcm1hdCBUeXBlIEkgQ29kZXMgKi8KKyNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lfVU5ERUZJTkVECTB4MAorI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSV9QQ00JCTB4MQorI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSV9QQ004CQkweDIKKyNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lfSUVFRV9GTE9BVAkweDMKKyNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lfQUxBVwkJMHg0CisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JX01VTEFXCQkweDUKKworc3RydWN0IHVhY19mb3JtYXRfdHlwZV9pX2NvbnRpbnVvdXNfZGVzY3JpcHRvciB7CisJX191OCAgYkxlbmd0aDsJCQkvKiBpbiBieXRlczogOCArIChucyAqIDMpICovCisJX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJLyogVVNCX0RUX0NTX0lOVEVSRkFDRSAqLworCV9fdTggIGJEZXNjcmlwdG9yU3VidHlwZTsJLyogRk9STUFUX1RZUEUgKi8KKwlfX3U4ICBiRm9ybWF0VHlwZTsJCS8qIEZPUk1BVF9UWVBFXzEgKi8KKwlfX3U4ICBiTnJDaGFubmVsczsJCS8qIHBoeXNpY2FsIGNoYW5uZWxzIGluIHRoZSBzdHJlYW0gKi8KKwlfX3U4ICBiU3ViZnJhbWVTaXplOwkJLyogKi8KKwlfX3U4ICBiQml0UmVzb2x1dGlvbjsKKwlfX3U4ICBiU2FtRnJlcVR5cGU7CisJX191OCAgdExvd2VyU2FtRnJlcVszXTsKKwlfX3U4ICB0VXBwZXJTYW1GcmVxWzNdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lfQ09OVElOVU9VU19ERVNDX1NJWkUJMTQKKworc3RydWN0IHVhY19mb3JtYXRfdHlwZV9pX2Rpc2NyZXRlX2Rlc2NyaXB0b3IgeworCV9fdTggIGJMZW5ndGg7CQkJLyogaW4gYnl0ZXM6IDggKyAobnMgKiAzKSAqLworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsJCS8qIFVTQl9EVF9DU19JTlRFUkZBQ0UgKi8KKwlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CS8qIEZPUk1BVF9UWVBFICovCisJX191OCAgYkZvcm1hdFR5cGU7CQkvKiBGT1JNQVRfVFlQRV8xICovCisJX191OCAgYk5yQ2hhbm5lbHM7CQkvKiBwaHlzaWNhbCBjaGFubmVscyBpbiB0aGUgc3RyZWFtICovCisJX191OCAgYlN1YmZyYW1lU2l6ZTsJCS8qICovCisJX191OCAgYkJpdFJlc29sdXRpb247CisJX191OCAgYlNhbUZyZXFUeXBlOworCV9fdTggIHRTYW1GcmVxW11bM107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBERUNMQVJFX1VBQ19GT1JNQVRfVFlQRV9JX0RJU0NSRVRFX0RFU0MobikJCVwKK3N0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaV9kaXNjcmV0ZV9kZXNjcmlwdG9yXyMjbiB7CQlcCisJX191OCAgYkxlbmd0aDsJCQkJCQlcCisJX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJCQkJXAorCV9fdTggIGJEZXNjcmlwdG9yU3VidHlwZTsJCQkJXAorCV9fdTggIGJGb3JtYXRUeXBlOwkJCQkJXAorCV9fdTggIGJOckNoYW5uZWxzOwkJCQkJXAorCV9fdTggIGJTdWJmcmFtZVNpemU7CQkJCQlcCisJX191OCAgYkJpdFJlc29sdXRpb247CQkJCQlcCisJX191OCAgYlNhbUZyZXFUeXBlOwkJCQkJXAorCV9fdTggIHRTYW1GcmVxW25dWzNdOwkJCQkJXAorfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkKKworI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSV9ESVNDUkVURV9ERVNDX1NJWkUobikJKDggKyAobiAqIDMpKQorCitzdHJ1Y3QgdWFjX2Zvcm1hdF90eXBlX2lfZXh0X2Rlc2NyaXB0b3IgeworCV9fdTggYkxlbmd0aDsKKwlfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4IGJEZXNjcmlwdG9yU3VidHlwZTsKKwlfX3U4IGJGb3JtYXRUeXBlOworCV9fdTggYlN1YnNsb3RTaXplOworCV9fdTggYkJpdFJlc29sdXRpb247CisJX191OCBiSGVhZGVyTGVuZ3RoOworCV9fdTggYkNvbnRyb2xTaXplOworCV9fdTggYlNpZGVCYW5kUHJvdG9jb2w7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBGb3JtYXRzIC0gQXVkaW8gRGF0YSBGb3JtYXQgVHlwZSBJIENvZGVzICovCisKKyNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lJX01QRUcJMHgxMDAxCisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JSV9BQzMJMHgxMDAyCisKK3N0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaWlfZGlzY3JldGVfZGVzY3JpcHRvciB7CisJX191OCBiTGVuZ3RoOworCV9fdTggYkRlc2NyaXB0b3JUeXBlOworCV9fdTggYkRlc2NyaXB0b3JTdWJ0eXBlOworCV9fdTggYkZvcm1hdFR5cGU7CisJX19sZTE2IHdNYXhCaXRSYXRlOworCV9fbGUxNiB3U2FtcGxlc1BlckZyYW1lOworCV9fdTggYlNhbUZyZXFUeXBlOworCV9fdTggdFNhbUZyZXFbXVszXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaWlfZXh0X2Rlc2NyaXB0b3IgeworCV9fdTggYkxlbmd0aDsKKwlfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4IGJEZXNjcmlwdG9yU3VidHlwZTsKKwlfX3U4IGJGb3JtYXRUeXBlOworCV9fdTE2IHdNYXhCaXRSYXRlOworCV9fdTE2IHdTYW1wbGVzUGVyRnJhbWU7CisJX191OCBiSGVhZGVyTGVuZ3RoOworCV9fdTggYlNpZGVCYW5kUHJvdG9jb2w7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiB0eXBlIElJSSAqLworI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSUlJX0lFQzE5MzdfQUMzCTB4MjAwMQorI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSUlJX0lFQzE5MzdfTVBFRzFfTEFZRVIxCTB4MjAwMgorI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSUlJX0lFQzE5MzdfTVBFRzJfTk9FWFQJMHgyMDAzCisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JSUlfSUVDMTkzN19NUEVHMl9FWFQJMHgyMDA0CisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JSUlfSUVDMTkzN19NUEVHMl9MQVlFUjFfTFMJMHgyMDA1CisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JSUlfSUVDMTkzN19NUEVHMl9MQVlFUjIzX0xTCTB4MjAwNgorCisvKiBGb3JtYXRzIC0gQS4yIEZvcm1hdCBUeXBlIENvZGVzICovCisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9VTkRFRklORUQJMHgwCisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JCQkweDEKKyNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lJCQkweDIKKyNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lJSQkJMHgzCisjZGVmaW5lIFVBQ19FWFRfRk9STUFUX1RZUEVfSQkJMHg4MQorI2RlZmluZSBVQUNfRVhUX0ZPUk1BVF9UWVBFX0lJCQkweDgyCisjZGVmaW5lIFVBQ19FWFRfRk9STUFUX1RZUEVfSUlJCQkweDgzCisKK3N0cnVjdCB1YWNfaXNvX2VuZHBvaW50X2Rlc2NyaXB0b3IgeworCV9fdTggIGJMZW5ndGg7CQkJLyogaW4gYnl0ZXM6IDcgKi8KKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CQkvKiBVU0JfRFRfQ1NfRU5EUE9JTlQgKi8KKwlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CS8qIEVQX0dFTkVSQUwgKi8KKwlfX3U4ICBibUF0dHJpYnV0ZXM7CisJX191OCAgYkxvY2tEZWxheVVuaXRzOworCV9fbGUxNiB3TG9ja0RlbGF5OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyNkZWZpbmUgVUFDX0lTT19FTkRQT0lOVF9ERVNDX1NJWkUJNworCisjZGVmaW5lIFVBQ19FUF9DU19BVFRSX1NBTVBMRV9SQVRFCTB4MDEKKyNkZWZpbmUgVUFDX0VQX0NTX0FUVFJfUElUQ0hfQ09OVFJPTAkweDAyCisjZGVmaW5lIFVBQ19FUF9DU19BVFRSX0ZJTExfTUFYCQkweDgwCisKKy8qIHN0YXR1cyB3b3JkIGZvcm1hdCAoMy43LjEuMSkgKi8KKworI2RlZmluZSBVQUMxX1NUQVRVU19UWVBFX09SSUdfTUFTSwkJMHgwZgorI2RlZmluZSBVQUMxX1NUQVRVU19UWVBFX09SSUdfQVVESU9fQ09OVFJPTF9JRgkweDAKKyNkZWZpbmUgVUFDMV9TVEFUVVNfVFlQRV9PUklHX0FVRElPX1NUUkVBTV9JRgkweDEKKyNkZWZpbmUgVUFDMV9TVEFUVVNfVFlQRV9PUklHX0FVRElPX1NUUkVBTV9FUAkweDIKKworI2RlZmluZSBVQUMxX1NUQVRVU19UWVBFX0lSUV9QRU5ESU5HCQkoMSA8PCA3KQorI2RlZmluZSBVQUMxX1NUQVRVU19UWVBFX01FTV9DSEFOR0VECQkoMSA8PCA2KQorCitzdHJ1Y3QgdWFjMV9zdGF0dXNfd29yZCB7CisJX191OCBiU3RhdHVzVHlwZTsKKwlfX3U4IGJPcmlnaW5hdG9yOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisjZW5kaWYgLyogX19MSU5VWF9VU0JfQVVESU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3VzYi9jZGMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC91c2IvY2RjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU4NmRjNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC91c2IvY2RjLmgKQEAgLTAsMCArMSwzOTkgQEAKKy8qCisgKiBVU0IgQ29tbXVuaWNhdGlvbnMgRGV2aWNlIENsYXNzIChDREMpIGRlZmluaXRpb25zCisgKgorICogQ0RDIHNheXMgaG93IHRvIHRhbGsgdG8gbG90cyBvZiBkaWZmZXJlbnQgdHlwZXMgb2YgbmV0d29yayBhZGFwdGVycywKKyAqIG5vdGFibHkgZXRoZXJuZXQgYWRhcHRlcnMgYW5kIHZhcmlvdXMgbW9kZW1zLiAgSXQncyB1c2VkIG1vc3RseSB3aXRoCisgKiBmaXJtd2FyZSBiYXNlZCBVU0IgcGVyaXBoZXJhbHMuCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1VTQl9DRENfSAorI2RlZmluZSBfX0xJTlVYX1VTQl9DRENfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBVU0JfQ0RDX1NVQkNMQVNTX0FDTQkJCTB4MDIKKyNkZWZpbmUgVVNCX0NEQ19TVUJDTEFTU19FVEhFUk5FVAkJMHgwNgorI2RlZmluZSBVU0JfQ0RDX1NVQkNMQVNTX1dIQ00JCQkweDA4CisjZGVmaW5lIFVTQl9DRENfU1VCQ0xBU1NfRE1NCQkJMHgwOQorI2RlZmluZSBVU0JfQ0RDX1NVQkNMQVNTX01ETE0JCQkweDBhCisjZGVmaW5lIFVTQl9DRENfU1VCQ0xBU1NfT0JFWAkJCTB4MGIKKyNkZWZpbmUgVVNCX0NEQ19TVUJDTEFTU19FRU0JCQkweDBjCisjZGVmaW5lIFVTQl9DRENfU1VCQ0xBU1NfTkNNCQkJMHgwZAorCisjZGVmaW5lIFVTQl9DRENfUFJPVE9fTk9ORQkJCTAKKworI2RlZmluZSBVU0JfQ0RDX0FDTV9QUk9UT19BVF9WMjVURVIJCTEKKyNkZWZpbmUgVVNCX0NEQ19BQ01fUFJPVE9fQVRfUENDQTEwMQkJMgorI2RlZmluZSBVU0JfQ0RDX0FDTV9QUk9UT19BVF9QQ0NBMTAxX1dBS0UJMworI2RlZmluZSBVU0JfQ0RDX0FDTV9QUk9UT19BVF9HU00JCTQKKyNkZWZpbmUgVVNCX0NEQ19BQ01fUFJPVE9fQVRfM0cJCQk1CisjZGVmaW5lIFVTQl9DRENfQUNNX1BST1RPX0FUX0NETUEJCTYKKyNkZWZpbmUgVVNCX0NEQ19BQ01fUFJPVE9fVkVORE9SCQkweGZmCisKKyNkZWZpbmUgVVNCX0NEQ19QUk9UT19FRU0JCQk3CisKKyNkZWZpbmUgVVNCX0NEQ19OQ01fUFJPVE9fTlRCCQkJMQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogQ2xhc3MtU3BlY2lmaWMgZGVzY3JpcHRvcnMgLi4uIHRoZXJlIGFyZSBhIGNvdXBsZSBkb3plbiBvZiB0aGVtCisgKi8KKworI2RlZmluZSBVU0JfQ0RDX0hFQURFUl9UWVBFCQkweDAwCS8qIGhlYWRlcl9kZXNjICovCisjZGVmaW5lIFVTQl9DRENfQ0FMTF9NQU5BR0VNRU5UX1RZUEUJMHgwMQkvKiBjYWxsX21nbXRfZGVzY3JpcHRvciAqLworI2RlZmluZSBVU0JfQ0RDX0FDTV9UWVBFCQkweDAyCS8qIGFjbV9kZXNjcmlwdG9yICovCisjZGVmaW5lIFVTQl9DRENfVU5JT05fVFlQRQkJMHgwNgkvKiB1bmlvbl9kZXNjICovCisjZGVmaW5lIFVTQl9DRENfQ09VTlRSWV9UWVBFCQkweDA3CisjZGVmaW5lIFVTQl9DRENfTkVUV09SS19URVJNSU5BTF9UWVBFCTB4MGEJLyogbmV0d29ya190ZXJtaW5hbF9kZXNjICovCisjZGVmaW5lIFVTQl9DRENfRVRIRVJORVRfVFlQRQkJMHgwZgkvKiBldGhlcl9kZXNjICovCisjZGVmaW5lIFVTQl9DRENfV0hDTV9UWVBFCQkweDExCisjZGVmaW5lIFVTQl9DRENfTURMTV9UWVBFCQkweDEyCS8qIG1kbG1fZGVzYyAqLworI2RlZmluZSBVU0JfQ0RDX01ETE1fREVUQUlMX1RZUEUJMHgxMwkvKiBtZGxtX2RldGFpbF9kZXNjICovCisjZGVmaW5lIFVTQl9DRENfRE1NX1RZUEUJCTB4MTQKKyNkZWZpbmUgVVNCX0NEQ19PQkVYX1RZUEUJCTB4MTUKKyNkZWZpbmUgVVNCX0NEQ19OQ01fVFlQRQkJMHgxYQorCisvKiAiSGVhZGVyIEZ1bmN0aW9uYWwgRGVzY3JpcHRvciIgZnJvbSBDREMgc3BlYyAgNS4yLjMuMSAqLworc3RydWN0IHVzYl9jZGNfaGVhZGVyX2Rlc2MgeworCV9fdTgJYkxlbmd0aDsKKwlfX3U4CWJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4CWJEZXNjcmlwdG9yU3ViVHlwZTsKKworCV9fbGUxNgliY2RDREM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogIkNhbGwgTWFuYWdlbWVudCBEZXNjcmlwdG9yIiBmcm9tIENEQyBzcGVjICA1LjIuMy4yICovCitzdHJ1Y3QgdXNiX2NkY19jYWxsX21nbXRfZGVzY3JpcHRvciB7CisJX191OAliTGVuZ3RoOworCV9fdTgJYkRlc2NyaXB0b3JUeXBlOworCV9fdTgJYkRlc2NyaXB0b3JTdWJUeXBlOworCisJX191OAlibUNhcGFiaWxpdGllczsKKyNkZWZpbmUgVVNCX0NEQ19DQUxMX01HTVRfQ0FQX0NBTExfTUdNVAkJMHgwMQorI2RlZmluZSBVU0JfQ0RDX0NBTExfTUdNVF9DQVBfREFUQV9JTlRGCQkweDAyCisKKwlfX3U4CWJEYXRhSW50ZXJmYWNlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qICJBYnN0cmFjdCBDb250cm9sIE1hbmFnZW1lbnQgRGVzY3JpcHRvciIgZnJvbSBDREMgc3BlYyAgNS4yLjMuMyAqLworc3RydWN0IHVzYl9jZGNfYWNtX2Rlc2NyaXB0b3IgeworCV9fdTgJYkxlbmd0aDsKKwlfX3U4CWJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4CWJEZXNjcmlwdG9yU3ViVHlwZTsKKworCV9fdTgJYm1DYXBhYmlsaXRpZXM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogY2FwYWJpbGl0aWVzIGZyb20gNS4yLjMuMyAqLworCisjZGVmaW5lIFVTQl9DRENfQ09NTV9GRUFUVVJFCTB4MDEKKyNkZWZpbmUgVVNCX0NEQ19DQVBfTElORQkweDAyCisjZGVmaW5lIFVTQl9DRENfQ0FQX0JSSwkweDA0CisjZGVmaW5lIFVTQl9DRENfQ0FQX05PVElGWQkweDA4CisKKy8qICJVbmlvbiBGdW5jdGlvbmFsIERlc2NyaXB0b3IiIGZyb20gQ0RDIHNwZWMgNS4yLjMuOCAqLworc3RydWN0IHVzYl9jZGNfdW5pb25fZGVzYyB7CisJX191OAliTGVuZ3RoOworCV9fdTgJYkRlc2NyaXB0b3JUeXBlOworCV9fdTgJYkRlc2NyaXB0b3JTdWJUeXBlOworCisJX191OAliTWFzdGVySW50ZXJmYWNlMDsKKwlfX3U4CWJTbGF2ZUludGVyZmFjZTA7CisJLyogLi4uIGFuZCB0aGVyZSBjb3VsZCBiZSBvdGhlciBzbGF2ZSBpbnRlcmZhY2VzICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogIkNvdW50cnkgU2VsZWN0aW9uIEZ1bmN0aW9uYWwgRGVzY3JpcHRvciIgZnJvbSBDREMgc3BlYyA1LjIuMy45ICovCitzdHJ1Y3QgdXNiX2NkY19jb3VudHJ5X2Z1bmN0aW9uYWxfZGVzYyB7CisJX191OAliTGVuZ3RoOworCV9fdTgJYkRlc2NyaXB0b3JUeXBlOworCV9fdTgJYkRlc2NyaXB0b3JTdWJUeXBlOworCisJX191OAlpQ291bnRyeUNvZGVSZWxEYXRlOworCV9fbGUxNgl3Q291bnR5Q29kZTA7CisJLyogLi4uIGFuZCB0aGVyZSBjYW4gYmUgYSBsb3Qgb2YgY291bnRyeSBjb2RlcyAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qICJOZXR3b3JrIENoYW5uZWwgVGVybWluYWwgRnVuY3Rpb25hbCBEZXNjcmlwdG9yIiBmcm9tIENEQyBzcGVjIDUuMi4zLjExICovCitzdHJ1Y3QgdXNiX2NkY19uZXR3b3JrX3Rlcm1pbmFsX2Rlc2MgeworCV9fdTgJYkxlbmd0aDsKKwlfX3U4CWJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4CWJEZXNjcmlwdG9yU3ViVHlwZTsKKworCV9fdTgJYkVudGl0eUlkOworCV9fdTgJaU5hbWU7CisJX191OAliQ2hhbm5lbEluZGV4OworCV9fdTgJYlBoeXNpY2FsSW50ZXJmYWNlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qICJFdGhlcm5ldCBOZXR3b3JraW5nIEZ1bmN0aW9uYWwgRGVzY3JpcHRvciIgZnJvbSBDREMgc3BlYyA1LjIuMy4xNiAqLworc3RydWN0IHVzYl9jZGNfZXRoZXJfZGVzYyB7CisJX191OAliTGVuZ3RoOworCV9fdTgJYkRlc2NyaXB0b3JUeXBlOworCV9fdTgJYkRlc2NyaXB0b3JTdWJUeXBlOworCisJX191OAlpTUFDQWRkcmVzczsKKwlfX2xlMzIJYm1FdGhlcm5ldFN0YXRpc3RpY3M7CisJX19sZTE2CXdNYXhTZWdtZW50U2l6ZTsKKwlfX2xlMTYJd051bWJlck1DRmlsdGVyczsKKwlfX3U4CWJOdW1iZXJQb3dlckZpbHRlcnM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogIlRlbGVwaG9uZSBDb250cm9sIE1vZGVsIEZ1bmN0aW9uYWwgRGVzY3JpcHRvciIgZnJvbSBDREMgV01DIHNwZWMgNi4zLi4zICovCitzdHJ1Y3QgdXNiX2NkY19kbW1fZGVzYyB7CisJX191OAliRnVuY3Rpb25MZW5ndGg7CisJX191OAliRGVzY3JpcHRvclR5cGU7CisJX191OAliRGVzY3JpcHRvclN1YnR5cGU7CisJX191MTYJYmNkVmVyc2lvbjsKKwlfX2xlMTYJd01heENvbW1hbmQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogIk1ETE0gRnVuY3Rpb25hbCBEZXNjcmlwdG9yIiBmcm9tIENEQyBXTUMgc3BlYyA2LjcuMi4zICovCitzdHJ1Y3QgdXNiX2NkY19tZGxtX2Rlc2MgeworCV9fdTgJYkxlbmd0aDsKKwlfX3U4CWJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4CWJEZXNjcmlwdG9yU3ViVHlwZTsKKworCV9fbGUxNgliY2RWZXJzaW9uOworCV9fdTgJYkdVSURbMTZdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qICJNRExNIERldGFpbCBGdW5jdGlvbmFsIERlc2NyaXB0b3IiIGZyb20gQ0RDIFdNQyBzcGVjIDYuNy4yLjQgKi8KK3N0cnVjdCB1c2JfY2RjX21kbG1fZGV0YWlsX2Rlc2MgeworCV9fdTgJYkxlbmd0aDsKKwlfX3U4CWJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4CWJEZXNjcmlwdG9yU3ViVHlwZTsKKworCS8qIHR5cGUgaXMgYXNzb2NpYXRlZCB3aXRoIG1kbG1fZGVzYy5iR1VJRCAqLworCV9fdTgJYkd1aWREZXNjcmlwdG9yVHlwZTsKKwlfX3U4CWJEZXRhaWxEYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qICJPQkVYIENvbnRyb2wgTW9kZWwgRnVuY3Rpb25hbCBEZXNjcmlwdG9yIiAqLworc3RydWN0IHVzYl9jZGNfb2JleF9kZXNjIHsKKwlfX3U4CWJMZW5ndGg7CisJX191OAliRGVzY3JpcHRvclR5cGU7CisJX191OAliRGVzY3JpcHRvclN1YlR5cGU7CisKKwlfX2xlMTYJYmNkVmVyc2lvbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiAiTkNNIENvbnRyb2wgTW9kZWwgRnVuY3Rpb25hbCBEZXNjcmlwdG9yIiAqLworc3RydWN0IHVzYl9jZGNfbmNtX2Rlc2MgeworCV9fdTgJYkxlbmd0aDsKKwlfX3U4CWJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4CWJEZXNjcmlwdG9yU3ViVHlwZTsKKworCV9fbGUxNgliY2ROY21WZXJzaW9uOworCV9fdTgJYm1OZXR3b3JrQ2FwYWJpbGl0aWVzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogQ2xhc3MtU3BlY2lmaWMgQ29udHJvbCBSZXF1ZXN0cyAoNi4yKQorICoKKyAqIHNlY3Rpb24gMy42LjIuMSB0YWJsZSA0IGhhcyB0aGUgQUNNIHByb2ZpbGUsIGZvciBtb2RlbXMuCisgKiBzZWN0aW9uIDMuOC4yIHRhYmxlIDEwIGhhcyB0aGUgZXRoZXJuZXQgcHJvZmlsZS4KKyAqCisgKiBNaWNyb3NvZnQncyBSTkRJUyBzdGFjayBmb3IgRXRoZXJuZXQgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgQ0RDIEFDTSB2YXJpYW50LAorICogaGVhdmlseSBkZXBlbmRlbnQgb24gdGhlIGVuY2Fwc3VsYXRlZCAocHJvcHJpZXRhcnkpIGNvbW1hbmQgbWVjaGFuaXNtLgorICovCisKKyNkZWZpbmUgVVNCX0NEQ19TRU5EX0VOQ0FQU1VMQVRFRF9DT01NQU5ECTB4MDAKKyNkZWZpbmUgVVNCX0NEQ19HRVRfRU5DQVBTVUxBVEVEX1JFU1BPTlNFCTB4MDEKKyNkZWZpbmUgVVNCX0NEQ19SRVFfU0VUX0xJTkVfQ09ESU5HCQkweDIwCisjZGVmaW5lIFVTQl9DRENfUkVRX0dFVF9MSU5FX0NPRElORwkJMHgyMQorI2RlZmluZSBVU0JfQ0RDX1JFUV9TRVRfQ09OVFJPTF9MSU5FX1NUQVRFCTB4MjIKKyNkZWZpbmUgVVNCX0NEQ19SRVFfU0VORF9CUkVBSwkJCTB4MjMKKyNkZWZpbmUgVVNCX0NEQ19TRVRfRVRIRVJORVRfTVVMVElDQVNUX0ZJTFRFUlMJMHg0MAorI2RlZmluZSBVU0JfQ0RDX1NFVF9FVEhFUk5FVF9QTV9QQVRURVJOX0ZJTFRFUgkweDQxCisjZGVmaW5lIFVTQl9DRENfR0VUX0VUSEVSTkVUX1BNX1BBVFRFUk5fRklMVEVSCTB4NDIKKyNkZWZpbmUgVVNCX0NEQ19TRVRfRVRIRVJORVRfUEFDS0VUX0ZJTFRFUgkweDQzCisjZGVmaW5lIFVTQl9DRENfR0VUX0VUSEVSTkVUX1NUQVRJU1RJQwkJMHg0NAorI2RlZmluZSBVU0JfQ0RDX0dFVF9OVEJfUEFSQU1FVEVSUwkJMHg4MAorI2RlZmluZSBVU0JfQ0RDX0dFVF9ORVRfQUREUkVTUwkJCTB4ODEKKyNkZWZpbmUgVVNCX0NEQ19TRVRfTkVUX0FERFJFU1MJCQkweDgyCisjZGVmaW5lIFVTQl9DRENfR0VUX05UQl9GT1JNQVQJCQkweDgzCisjZGVmaW5lIFVTQl9DRENfU0VUX05UQl9GT1JNQVQJCQkweDg0CisjZGVmaW5lIFVTQl9DRENfR0VUX05UQl9JTlBVVF9TSVpFCQkweDg1CisjZGVmaW5lIFVTQl9DRENfU0VUX05UQl9JTlBVVF9TSVpFCQkweDg2CisjZGVmaW5lIFVTQl9DRENfR0VUX01BWF9EQVRBR1JBTV9TSVpFCQkweDg3CisjZGVmaW5lIFVTQl9DRENfU0VUX01BWF9EQVRBR1JBTV9TSVpFCQkweDg4CisjZGVmaW5lIFVTQl9DRENfR0VUX0NSQ19NT0RFCQkJMHg4OQorI2RlZmluZSBVU0JfQ0RDX1NFVF9DUkNfTU9ERQkJCTB4OGEKKworLyogTGluZSBDb2RpbmcgU3RydWN0dXJlIGZyb20gQ0RDIHNwZWMgNi4yLjEzICovCitzdHJ1Y3QgdXNiX2NkY19saW5lX2NvZGluZyB7CisJX19sZTMyCWR3RFRFUmF0ZTsKKwlfX3U4CWJDaGFyRm9ybWF0OworI2RlZmluZSBVU0JfQ0RDXzFfU1RPUF9CSVRTCQkJMAorI2RlZmluZSBVU0JfQ0RDXzFfNV9TVE9QX0JJVFMJCQkxCisjZGVmaW5lIFVTQl9DRENfMl9TVE9QX0JJVFMJCQkyCisKKwlfX3U4CWJQYXJpdHlUeXBlOworI2RlZmluZSBVU0JfQ0RDX05PX1BBUklUWQkJCTAKKyNkZWZpbmUgVVNCX0NEQ19PRERfUEFSSVRZCQkJMQorI2RlZmluZSBVU0JfQ0RDX0VWRU5fUEFSSVRZCQkJMgorI2RlZmluZSBVU0JfQ0RDX01BUktfUEFSSVRZCQkJMworI2RlZmluZSBVU0JfQ0RDX1NQQUNFX1BBUklUWQkJCTQKKworCV9fdTgJYkRhdGFCaXRzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIHRhYmxlIDYyOyBiaXRzIGluIG11bHRpY2FzdCBmaWx0ZXIgKi8KKyNkZWZpbmUJVVNCX0NEQ19QQUNLRVRfVFlQRV9QUk9NSVNDVU9VUwkJKDEgPDwgMCkKKyNkZWZpbmUJVVNCX0NEQ19QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUCSgxIDw8IDEpIC8qIG5vIGZpbHRlciAqLworI2RlZmluZQlVU0JfQ0RDX1BBQ0tFVF9UWVBFX0RJUkVDVEVECQkoMSA8PCAyKQorI2RlZmluZQlVU0JfQ0RDX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVAkJKDEgPDwgMykKKyNkZWZpbmUJVVNCX0NEQ19QQUNLRVRfVFlQRV9NVUxUSUNBU1QJCSgxIDw8IDQpIC8qIGZpbHRlcmVkICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIENsYXNzLVNwZWNpZmljIE5vdGlmaWNhdGlvbnMgKDYuMykgc2VudCBieSBpbnRlcnJ1cHQgdHJhbnNmZXJzCisgKgorICogc2VjdGlvbiAzLjguMiB0YWJsZSAxMSBvZiB0aGUgQ0RDIHNwZWMgbGlzdHMgRXRoZXJuZXQgbm90aWZpY2F0aW9ucworICogc2VjdGlvbiAzLjYuMi4xIHRhYmxlIDUgc3BlY2lmaWVzIEFDTSBub3RpZmljYXRpb25zLCBhY2NlcHRlZCBieSBSTkRJUworICogUk5ESVMgYWxzbyBkZWZpbmVzIGl0cyBvd24gYml0LWluY29tcGF0aWJsZSBub3RpZmljYXRpb25zCisgKi8KKworI2RlZmluZSBVU0JfQ0RDX05PVElGWV9ORVRXT1JLX0NPTk5FQ1RJT04JMHgwMAorI2RlZmluZSBVU0JfQ0RDX05PVElGWV9SRVNQT05TRV9BVkFJTEFCTEUJMHgwMQorI2RlZmluZSBVU0JfQ0RDX05PVElGWV9TRVJJQUxfU1RBVEUJCTB4MjAKKyNkZWZpbmUgVVNCX0NEQ19OT1RJRllfU1BFRURfQ0hBTkdFCQkweDJhCisKK3N0cnVjdCB1c2JfY2RjX25vdGlmaWNhdGlvbiB7CisJX191OAlibVJlcXVlc3RUeXBlOworCV9fdTgJYk5vdGlmaWNhdGlvblR5cGU7CisJX19sZTE2CXdWYWx1ZTsKKwlfX2xlMTYJd0luZGV4OworCV9fbGUxNgl3TGVuZ3RoOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBDbGFzcyBTcGVjaWZpYyBzdHJ1Y3R1cmVzIGFuZCBjb25zdGFudHMKKyAqCisgKiBDREMgTkNNIE5UQiBwYXJhbWV0ZXJzIHN0cnVjdHVyZSwgQ0RDIE5DTSBzdWJjbGFzcyA2LjIuMQorICoKKyAqLworCitzdHJ1Y3QgdXNiX2NkY19uY21fbnRiX3BhcmFtZXRlcnMgeworCV9fbGUxNgl3TGVuZ3RoOworCV9fbGUxNglibU50YkZvcm1hdHNTdXBwb3J0ZWQ7CisJX19sZTMyCWR3TnRiSW5NYXhTaXplOworCV9fbGUxNgl3TmRwSW5EaXZpc29yOworCV9fbGUxNgl3TmRwSW5QYXlsb2FkUmVtYWluZGVyOworCV9fbGUxNgl3TmRwSW5BbGlnbm1lbnQ7CisJX19sZTE2CXdQYWRkaW5nMTsKKwlfX2xlMzIJZHdOdGJPdXRNYXhTaXplOworCV9fbGUxNgl3TmRwT3V0RGl2aXNvcjsKKwlfX2xlMTYJd05kcE91dFBheWxvYWRSZW1haW5kZXI7CisJX19sZTE2CXdOZHBPdXRBbGlnbm1lbnQ7CisJX19sZTE2CXdQYWRkaW5nMjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogQ0RDIE5DTSB0cmFuc2ZlciBoZWFkZXJzLCBDREMgTkNNIHN1YmNsYXNzIDMuMgorICovCisKKyNkZWZpbmUgVVNCX0NEQ19OQ01fTlRIMTZfU0lHTgkJMHg0ODRENDM0RSAvKiBOQ01IICovCisjZGVmaW5lIFVTQl9DRENfTkNNX05USDMyX1NJR04JCTB4Njg2RDYzNkUgLyogbmNtaCAqLworCitzdHJ1Y3QgdXNiX2NkY19uY21fbnRoMTYgeworCV9fbGUzMglkd1NpZ25hdHVyZTsKKwlfX2xlMTYJd0hlYWRlckxlbmd0aDsKKwlfX2xlMTYJd1NlcXVlbmNlOworCV9fbGUxNgl3QmxvY2tMZW5ndGg7CisJX19sZTE2CXdGcEluZGV4OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCB1c2JfY2RjX25jbV9udGgzMiB7CisJX19sZTMyCWR3U2lnbmF0dXJlOworCV9fbGUxNgl3SGVhZGVyTGVuZ3RoOworCV9fbGUxNgl3U2VxdWVuY2U7CisJX19sZTMyCWR3QmxvY2tMZW5ndGg7CisJX19sZTMyCWR3RnBJbmRleDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogQ0RDIE5DTSBkYXRhZ3JhbSBwb2ludGVycywgQ0RDIE5DTSBzdWJjbGFzcyAzLjMKKyAqLworCisjZGVmaW5lIFVTQl9DRENfTkNNX05EUDE2X0NSQ19TSUdOCTB4MzE0RDQzNEUgLyogTkNNMSAqLworI2RlZmluZSBVU0JfQ0RDX05DTV9ORFAxNl9OT0NSQ19TSUdOCTB4MzA0RDQzNEUgLyogTkNNMCAqLworI2RlZmluZSBVU0JfQ0RDX05DTV9ORFAzMl9DUkNfU0lHTgkweDMxNkQ2MzZFIC8qIG5jbTEgKi8KKyNkZWZpbmUgVVNCX0NEQ19OQ01fTkRQMzJfTk9DUkNfU0lHTgkweDMwNkQ2MzZFIC8qIG5jbTAgKi8KKworLyogMTYtYml0IE5DTSBEYXRhZ3JhbSBQb2ludGVyIEVudHJ5ICovCitzdHJ1Y3QgdXNiX2NkY19uY21fZHBlMTYgeworCV9fbGUxNgl3RGF0YWdyYW1JbmRleDsKKwlfX2xlMTYJd0RhdGFncmFtTGVuZ3RoOworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKKy8qIDE2LWJpdCBOQ00gRGF0YWdyYW0gUG9pbnRlciBUYWJsZSAqLworc3RydWN0IHVzYl9jZGNfbmNtX25kcDE2IHsKKwlfX2xlMzIJZHdTaWduYXR1cmU7CisJX19sZTE2CXdMZW5ndGg7CisJX19sZTE2CXdOZXh0RnBJbmRleDsKKwlzdHJ1Y3QJdXNiX2NkY19uY21fZHBlMTYgZHBlMTZbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogMzItYml0IE5DTSBEYXRhZ3JhbSBQb2ludGVyIEVudHJ5ICovCitzdHJ1Y3QgdXNiX2NkY19uY21fZHBlMzIgeworCV9fbGUzMglkd0RhdGFncmFtSW5kZXg7CisJX19sZTMyCWR3RGF0YWdyYW1MZW5ndGg7Cit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworLyogMzItYml0IE5DTSBEYXRhZ3JhbSBQb2ludGVyIFRhYmxlICovCitzdHJ1Y3QgdXNiX2NkY19uY21fbmRwMzIgeworCV9fbGUzMglkd1NpZ25hdHVyZTsKKwlfX2xlMTYJd0xlbmd0aDsKKwlfX2xlMTYJd1Jlc2VydmVkNjsKKwlfX2xlMzIJZHdOZXh0TmRwSW5kZXg7CisJX19sZTMyCWR3UmVzZXJ2ZWQxMjsKKwlzdHJ1Y3QJdXNiX2NkY19uY21fZHBlMzIgZHBlMzJbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogQ0RDIE5DTSBzdWJjbGFzcyAzLjIuMSBhbmQgMy4yLjIgKi8KKyNkZWZpbmUgVVNCX0NEQ19OQ01fTkRQMTZfSU5ERVhfTUlOCQkJMHgwMDBDCisjZGVmaW5lIFVTQl9DRENfTkNNX05EUDMyX0lOREVYX01JTgkJCTB4MDAxMAorCisvKiBDREMgTkNNIHN1YmNsYXNzIDMuMy4zIERhdGFncmFtIEZvcm1hdHRpbmcgKi8KKyNkZWZpbmUgVVNCX0NEQ19OQ01fREFUQUdSQU1fRk9STUFUX0NSQwkJCTB4MzAKKyNkZWZpbmUgVVNCX0NEQ19OQ01fREFUQUdSQU1fRk9STUFUX05PQ1JDCQkwWDMxCisKKy8qIENEQyBOQ00gc3ViY2xhc3MgNC4yIE5DTSBDb21tdW5pY2F0aW9ucyBJbnRlcmZhY2UgUHJvdG9jb2wgQ29kZSAqLworI2RlZmluZSBVU0JfQ0RDX05DTV9QUk9UT19DT0RFX05PX0VOQ0FQX0NPTU1BTkRTCTB4MDAKKyNkZWZpbmUgVVNCX0NEQ19OQ01fUFJPVE9fQ09ERV9FWFRFUk5fUFJPVE8JCTB4RkUKKworLyogQ0RDIE5DTSBzdWJjbGFzcyA1LjIuMSBOQ00gRnVuY3Rpb25hbCBEZXNjcmlwdG9yLCBibU5ldHdvcmtDYXBhYmlsaXRpZXMgKi8KKyNkZWZpbmUgVVNCX0NEQ19OQ01fTkNBUF9FVEhfRklMVEVSCQkJKDEgPDwgMCkKKyNkZWZpbmUgVVNCX0NEQ19OQ01fTkNBUF9ORVRfQUREUkVTUwkJCSgxIDw8IDEpCisjZGVmaW5lIFVTQl9DRENfTkNNX05DQVBfRU5DQVBfQ09NTUFORAkJCSgxIDw8IDIpCisjZGVmaW5lIFVTQl9DRENfTkNNX05DQVBfTUFYX0RBVEFHUkFNX1NJWkUJCSgxIDw8IDMpCisjZGVmaW5lIFVTQl9DRENfTkNNX05DQVBfQ1JDX01PREUJCQkoMSA8PCA0KQorCisvKiBDREMgTkNNIHN1YmNsYXNzIFRhYmxlIDYtMzogTlRCIFBhcmFtZXRlciBTdHJ1Y3R1cmUgKi8KKyNkZWZpbmUgVVNCX0NEQ19OQ01fTlRCMTZfU1VQUE9SVEVECQkJKDEgPDwgMCkKKyNkZWZpbmUgVVNCX0NEQ19OQ01fTlRCMzJfU1VQUE9SVEVECQkJKDEgPDwgMSkKKworLyogQ0RDIE5DTSBzdWJjbGFzcyBUYWJsZSA2LTM6IE5UQiBQYXJhbWV0ZXIgU3RydWN0dXJlICovCisjZGVmaW5lIFVTQl9DRENfTkNNX05EUF9BTElHTl9NSU5fU0laRQkJCTB4MDQKKyNkZWZpbmUgVVNCX0NEQ19OQ01fTlRCX01BWF9MRU5HVEgJCQkweDFDCisKKy8qIENEQyBOQ00gc3ViY2xhc3MgNi4yLjUgU2V0TnRiRm9ybWF0ICovCisjZGVmaW5lIFVTQl9DRENfTkNNX05UQjE2X0ZPUk1BVAkJCTB4MDAKKyNkZWZpbmUgVVNCX0NEQ19OQ01fTlRCMzJfRk9STUFUCQkJMHgwMQorCisvKiBDREMgTkNNIHN1YmNsYXNzIDYuMi43IFNldE50YklucHV0U2l6ZSAqLworI2RlZmluZSBVU0JfQ0RDX05DTV9OVEJfTUlOX0lOX1NJWkUJCQkyMDQ4CisjZGVmaW5lIFVTQl9DRENfTkNNX05UQl9NSU5fT1VUX1NJWkUJCQkyMDQ4CisKKy8qIENEQyBOQ00gc3ViY2xhc3MgNi4yLjExIFNldENyY01vZGUgKi8KKyNkZWZpbmUgVVNCX0NEQ19OQ01fQ1JDX05PVF9BUFBFTkRFRAkJCTB4MDAKKyNkZWZpbmUgVVNCX0NEQ19OQ01fQ1JDX0FQUEVOREVECQkJMHgwMQorCisjZW5kaWYgLyogX19MSU5VWF9VU0JfQ0RDX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC91c2IvY2gxMS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3VzYi9jaDExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE5MTk0YwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC91c2IvY2gxMS5oCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogVGhpcyBmaWxlIGhvbGRzIEh1YiBwcm90b2NvbCBjb25zdGFudHMgYW5kIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZQorICogZGVmaW5lZCBpbiBjaGFwdGVyIDExIChIdWIgU3BlY2lmaWNhdGlvbikgb2YgdGhlIFVTQiAyLjAgc3BlY2lmaWNhdGlvbi4KKyAqCisgKiBJdCBpcyB1c2VkL3NoYXJlZCBiZXR3ZWVuIHRoZSBVU0IgY29yZSwgdGhlIEhDRHMgYW5kIGNvdXBsZSBvZiBvdGhlciBVU0IKKyAqIGRyaXZlcnMuCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX0NIMTFfSAorI2RlZmluZSBfX0xJTlVYX0NIMTFfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4JLyogX191OCBldGMgKi8KKworLyoKKyAqIEh1YiByZXF1ZXN0IHR5cGVzCisgKi8KKworI2RlZmluZSBVU0JfUlRfSFVCCShVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9ERVZJQ0UpCisjZGVmaW5lIFVTQl9SVF9QT1JUCShVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9PVEhFUikKKworLyoKKyAqIEh1YiBjbGFzcyByZXF1ZXN0cworICogU2VlIFVTQiAyLjAgc3BlYyBUYWJsZSAxMS0xNgorICovCisjZGVmaW5lIEhVQl9DTEVBUl9UVF9CVUZGRVIJOAorI2RlZmluZSBIVUJfUkVTRVRfVFQJCTkKKyNkZWZpbmUgSFVCX0dFVF9UVF9TVEFURQkxMAorI2RlZmluZSBIVUJfU1RPUF9UVAkJMTEKKworLyoKKyAqIEh1YiBDbGFzcyBmZWF0dXJlIG51bWJlcnMKKyAqIFNlZSBVU0IgMi4wIHNwZWMgVGFibGUgMTEtMTcKKyAqLworI2RlZmluZSBDX0hVQl9MT0NBTF9QT1dFUgkwCisjZGVmaW5lIENfSFVCX09WRVJfQ1VSUkVOVAkxCisKKy8qCisgKiBQb3J0IGZlYXR1cmUgbnVtYmVycworICogU2VlIFVTQiAyLjAgc3BlYyBUYWJsZSAxMS0xNworICovCisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfQ09OTkVDVElPTgkwCisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfRU5BQkxFCQkxCisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfU1VTUEVORAkJMgkvKiBMMiBzdXNwZW5kICovCisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfT1ZFUl9DVVJSRU5UCTMKKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9SRVNFVAkJNAorI2RlZmluZSBVU0JfUE9SVF9GRUFUX0wxCQk1CS8qIEwxIHN1c3BlbmQgKi8KKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9QT1dFUgkJOAorI2RlZmluZSBVU0JfUE9SVF9GRUFUX0xPV1NQRUVECQk5CS8qIFNob3VsZCBuZXZlciBiZSB1c2VkICovCisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OCTE2CisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfQ19FTkFCTEUJCTE3CisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfQ19TVVNQRU5ECQkxOAorI2RlZmluZSBVU0JfUE9SVF9GRUFUX0NfT1ZFUl9DVVJSRU5UCTE5CisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfQ19SRVNFVAkJMjAKKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9URVNUICAgICAgICAgICAgICAyMQorI2RlZmluZSBVU0JfUE9SVF9GRUFUX0lORElDQVRPUiAgICAgICAgIDIyCisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfQ19QT1JUX0wxICAgICAgICAgMjMKKworLyoKKyAqIEh1YiBTdGF0dXMgYW5kIEh1YiBDaGFuZ2UgcmVzdWx0cworICogU2VlIFVTQiAyLjAgc3BlYyBUYWJsZSAxMS0xOSBhbmQgVGFibGUgMTEtMjAKKyAqLworc3RydWN0IHVzYl9wb3J0X3N0YXR1cyB7CisJX19sZTE2IHdQb3J0U3RhdHVzOworCV9fbGUxNiB3UG9ydENoYW5nZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogd1BvcnRTdGF0dXMgYml0IGZpZWxkCisgKiBTZWUgVVNCIDIuMCBzcGVjIFRhYmxlIDExLTIxCisgKi8KKyNkZWZpbmUgVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OCTB4MDAwMQorI2RlZmluZSBVU0JfUE9SVF9TVEFUX0VOQUJMRQkJMHgwMDAyCisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfU1VTUEVORAkJMHgwMDA0CisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfT1ZFUkNVUlJFTlQJMHgwMDA4CisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfUkVTRVQJCTB4MDAxMAorI2RlZmluZSBVU0JfUE9SVF9TVEFUX0wxCQkweDAwMjAKKy8qIGJpdHMgNiB0byA3IGFyZSByZXNlcnZlZCAqLworI2RlZmluZSBVU0JfUE9SVF9TVEFUX1BPV0VSCQkweDAxMDAKKyNkZWZpbmUgVVNCX1BPUlRfU1RBVF9MT1dfU1BFRUQJCTB4MDIwMAorI2RlZmluZSBVU0JfUE9SVF9TVEFUX0hJR0hfU1BFRUQgICAgICAgIDB4MDQwMAorI2RlZmluZSBVU0JfUE9SVF9TVEFUX1RFU1QgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBVU0JfUE9SVF9TVEFUX0lORElDQVRPUiAgICAgICAgIDB4MTAwMAorLyogYml0cyAxMyB0byAxNSBhcmUgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgVVNCX1BPUlRfU1RBVF9TVVBFUl9TUEVFRAkweDgwMDAJLyogTGludXgtaW50ZXJuYWwgKi8KKworLyoKKyAqIHdQb3J0Q2hhbmdlIGJpdCBmaWVsZAorICogU2VlIFVTQiAyLjAgc3BlYyBUYWJsZSAxMS0yMgorICogQml0cyAwIHRvIDQgc2hvd24sIGJpdHMgNSB0byAxNSBhcmUgcmVzZXJ2ZWQKKyAqLworI2RlZmluZSBVU0JfUE9SVF9TVEFUX0NfQ09OTkVDVElPTgkweDAwMDEKKyNkZWZpbmUgVVNCX1BPUlRfU1RBVF9DX0VOQUJMRQkJMHgwMDAyCisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfQ19TVVNQRU5ECQkweDAwMDQKKyNkZWZpbmUgVVNCX1BPUlRfU1RBVF9DX09WRVJDVVJSRU5UCTB4MDAwOAorI2RlZmluZSBVU0JfUE9SVF9TVEFUX0NfUkVTRVQJCTB4MDAxMAorI2RlZmluZSBVU0JfUE9SVF9TVEFUX0NfTDEJCTB4MDAyMAorCisvKgorICogd0h1YkNoYXJhY3RlcmlzdGljcyAobWFza3MpCisgKiBTZWUgVVNCIDIuMCBzcGVjIFRhYmxlIDExLTEzLCBvZmZzZXQgMworICovCisjZGVmaW5lIEhVQl9DSEFSX0xQU00JCTB4MDAwMyAvKiBEMSAuLiBEMCAqLworI2RlZmluZSBIVUJfQ0hBUl9DT01QT1VORAkweDAwMDQgLyogRDIgICAgICAgKi8KKyNkZWZpbmUgSFVCX0NIQVJfT0NQTQkJMHgwMDE4IC8qIEQ0IC4uIEQzICovCisjZGVmaW5lIEhVQl9DSEFSX1RUVFQgICAgICAgICAgIDB4MDA2MCAvKiBENiAuLiBENSAqLworI2RlZmluZSBIVUJfQ0hBUl9QT1JUSU5EICAgICAgICAweDAwODAgLyogRDcgICAgICAgKi8KKworc3RydWN0IHVzYl9odWJfc3RhdHVzIHsKKwlfX2xlMTYgd0h1YlN0YXR1czsKKwlfX2xlMTYgd0h1YkNoYW5nZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogSHViIFN0YXR1cyAmIEh1YiBDaGFuZ2UgYml0IG1hc2tzCisgKiBTZWUgVVNCIDIuMCBzcGVjIFRhYmxlIDExLTE5IGFuZCBUYWJsZSAxMS0yMAorICogQml0cyAwIGFuZCAxIGZvciB3SHViU3RhdHVzIGFuZCB3SHViQ2hhbmdlCisgKiBCaXRzIDIgdG8gMTUgYXJlIHJlc2VydmVkIGZvciBib3RoCisgKi8KKyNkZWZpbmUgSFVCX1NUQVRVU19MT0NBTF9QT1dFUgkweDAwMDEKKyNkZWZpbmUgSFVCX1NUQVRVU19PVkVSQ1VSUkVOVAkweDAwMDIKKyNkZWZpbmUgSFVCX0NIQU5HRV9MT0NBTF9QT1dFUgkweDAwMDEKKyNkZWZpbmUgSFVCX0NIQU5HRV9PVkVSQ1VSUkVOVAkweDAwMDIKKworCisvKgorICogSHViIGRlc2NyaXB0b3IKKyAqIFNlZSBVU0IgMi4wIHNwZWMgVGFibGUgMTEtMTMKKyAqLworCisjZGVmaW5lIFVTQl9EVF9IVUIJCQkoVVNCX1RZUEVfQ0xBU1MgfCAweDA5KQorI2RlZmluZSBVU0JfRFRfSFVCX05PTlZBUl9TSVpFCQk3CisKK3N0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgeworCV9fdTggIGJEZXNjTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4ICBiTmJyUG9ydHM7CisJX19sZTE2IHdIdWJDaGFyYWN0ZXJpc3RpY3M7CisJX191OCAgYlB3ck9uMlB3ckdvb2Q7CisJX191OCAgYkh1YkNvbnRyQ3VycmVudDsKKwkJLyogYWRkIDEgYml0IGZvciBodWIgc3RhdHVzIGNoYW5nZTsgcm91bmQgdG8gYnl0ZXMgKi8KKwlfX3U4ICBEZXZpY2VSZW1vdmFibGVbKFVTQl9NQVhDSElMRFJFTiArIDEgKyA3KSAvIDhdOworCV9fdTggIFBvcnRQd3JDdHJsTWFza1soVVNCX01BWENISUxEUkVOICsgMSArIDcpIC8gOF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKiBwb3J0IGluZGljYXRvciBzdGF0dXMgc2VsZWN0b3JzLCB0YWJsZXMgMTEtNyBhbmQgMTEtMjUgKi8KKyNkZWZpbmUgSFVCX0xFRF9BVVRPCTAKKyNkZWZpbmUgSFVCX0xFRF9BTUJFUgkxCisjZGVmaW5lIEhVQl9MRURfR1JFRU4JMgorI2RlZmluZSBIVUJfTEVEX09GRgkzCisKK2VudW0gaHViX2xlZF9tb2RlIHsKKwlJTkRJQ0FUT1JfQVVUTyA9IDAsCisJSU5ESUNBVE9SX0NZQ0xFLAorCS8qIHNvZnR3YXJlIGJsaW5rcyBmb3IgYXR0ZW50aW9uOiAgc29mdHdhcmUsIGhhcmR3YXJlLCByZXNlcnZlZCAqLworCUlORElDQVRPUl9HUkVFTl9CTElOSywgSU5ESUNBVE9SX0dSRUVOX0JMSU5LX09GRiwKKwlJTkRJQ0FUT1JfQU1CRVJfQkxJTkssIElORElDQVRPUl9BTUJFUl9CTElOS19PRkYsCisJSU5ESUNBVE9SX0FMVF9CTElOSywgSU5ESUNBVE9SX0FMVF9CTElOS19PRkYKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBUcmFuc2FjdGlvbiBUcmFuc2xhdG9yIFRoaW5rIFRpbWVzLCBpbiBiaXRzICovCisjZGVmaW5lIEhVQl9UVFRUXzhfQklUUwkJMHgwMAorI2RlZmluZSBIVUJfVFRUVF8xNl9CSVRTCTB4MjAKKyNkZWZpbmUgSFVCX1RUVFRfMjRfQklUUwkweDQwCisjZGVmaW5lIEhVQl9UVFRUXzMyX0JJVFMJMHg2MAorCisjZW5kaWYgLyogX19MSU5VWF9DSDExX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC91c2IvY2g5LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdXNiL2NoOS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZTVhNTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdXNiL2NoOS5oCkBAIC0wLDAgKzEsODc5IEBACisvKgorICogVGhpcyBmaWxlIGhvbGRzIFVTQiBjb25zdGFudHMgYW5kIHN0cnVjdHVyZXMgdGhhdCBhcmUgbmVlZGVkIGZvcgorICogVVNCIGRldmljZSBBUElzLiAgVGhlc2UgYXJlIHVzZWQgYnkgdGhlIFVTQiBkZXZpY2UgbW9kZWwsIHdoaWNoIGlzCisgKiBkZWZpbmVkIGluIGNoYXB0ZXIgOSBvZiB0aGUgVVNCIDIuMCBzcGVjaWZpY2F0aW9uIGFuZCBpbiB0aGUKKyAqIFdpcmVsZXNzIFVTQiAxLjAgKHNwcmVhZCBhcm91bmQpLiAgTGludXggaGFzIHNldmVyYWwgQVBJcyBpbiBDIHRoYXQKKyAqIG5lZWQgdGhlc2U6CisgKgorICogLSB0aGUgbWFzdGVyL2hvc3Qgc2lkZSBMaW51eC1VU0Iga2VybmVsIGRyaXZlciBBUEk7CisgKiAtIHRoZSAidXNiZnMiIHVzZXIgc3BhY2UgQVBJOyBhbmQKKyAqIC0gdGhlIExpbnV4ICJnYWRnZXQiIHNsYXZlL2RldmljZS9wZXJpcGhlcmFsIHNpZGUgZHJpdmVyIEFQSS4KKyAqCisgKiBVU0IgMi4wIGFkZHMgYW4gYWRkaXRpb25hbCAiT24gVGhlIEdvIiAoT1RHKSBtb2RlLCB3aGljaCBsZXRzIHN5c3RlbXMKKyAqIGFjdCBlaXRoZXIgYXMgYSBVU0IgbWFzdGVyL2hvc3Qgb3IgYXMgYSBVU0Igc2xhdmUvZGV2aWNlLiAgVGhhdCBtZWFucworICogdGhlIG1hc3RlciBhbmQgc2xhdmUgc2lkZSBBUElzIGJlbmVmaXQgZnJvbSB3b3JraW5nIHdlbGwgdG9nZXRoZXIuCisgKgorICogVGhlcmUncyBhbHNvICJXaXJlbGVzcyBVU0IiLCB1c2luZyBsb3cgcG93ZXIgc2hvcnQgcmFuZ2UgcmFkaW9zIGZvcgorICogcGVyaXBoZXJhbCBpbnRlcmNvbm5lY3Rpb24gYnV0IG90aGVyd2lzZSBidWlsZGluZyBvbiB0aGUgVVNCIGZyYW1ld29yay4KKyAqCisgKiBOb3RlIGFsbCBkZXNjcmlwdG9ycyBhcmUgZGVjbGFyZWQgJ19fYXR0cmlidXRlX18oKHBhY2tlZCkpJyBzbyB0aGF0OgorICoKKyAqIFthXSB0aGV5IG5ldmVyIGdldCBwYWRkZWQsIGVpdGhlciBpbnRlcm5hbGx5IChVU0Igc3BlYyB3cml0ZXJzCisgKiAgICAgcHJvYmFibHkgaGFuZGxlZCB0aGF0KSBvciBleHRlcm5hbGx5OworICoKKyAqIFtiXSBzbyB0aGF0IGFjY2Vzc2luZyBiaWdnZXItdGhhbi1hLWJ5dGVzIGZpZWxkcyB3aWxsIG5ldmVyCisgKiAgICAgZ2VuZXJhdGUgYnVzIGVycm9ycyBvbiBhbnkgcGxhdGZvcm0sIGV2ZW4gd2hlbiB0aGUgbG9jYXRpb24gb2YKKyAqICAgICBpdHMgZGVzY3JpcHRvciBpbnNpZGUgYSBidW5kbGUgaXNuJ3QgIm5hdHVyYWxseSBhbGlnbmVkIiwgYW5kCisgKgorICogW2NdIGZvciBjb25zaXN0ZW5jeSwgcmVtb3ZpbmcgYWxsIGRvdWJ0IGV2ZW4gd2hlbiBpdCBhcHBlYXJzIHRvCisgKiAgICAgc29tZW9uZSB0aGF0IHRoZSB0d28gb3RoZXIgcG9pbnRzIGFyZSBub24taXNzdWVzIGZvciB0aGF0CisgKiAgICAgcGFydGljdWxhciBkZXNjcmlwdG9yIHR5cGUuCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1VTQl9DSDlfSAorI2RlZmluZSBfX0xJTlVYX1VTQl9DSDlfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4JLyogX191OCBldGMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogQ09OVFJPTCBSRVFVRVNUIFNVUFBPUlQgKi8KKworLyoKKyAqIFVTQiBkaXJlY3Rpb25zCisgKgorICogVGhpcyBiaXQgZmxhZyBpcyB1c2VkIGluIGVuZHBvaW50IGRlc2NyaXB0b3JzJyBiRW5kcG9pbnRBZGRyZXNzIGZpZWxkLgorICogSXQncyBhbHNvIG9uZSBvZiB0aHJlZSBmaWVsZHMgaW4gY29udHJvbCByZXF1ZXN0cyBiUmVxdWVzdFR5cGUuCisgKi8KKyNkZWZpbmUgVVNCX0RJUl9PVVQJCQkwCQkvKiB0byBkZXZpY2UgKi8KKyNkZWZpbmUgVVNCX0RJUl9JTgkJCTB4ODAJCS8qIHRvIGhvc3QgKi8KKworLyoKKyAqIFVTQiB0eXBlcywgdGhlIHNlY29uZCBvZiB0aHJlZSBiUmVxdWVzdFR5cGUgZmllbGRzCisgKi8KKyNkZWZpbmUgVVNCX1RZUEVfTUFTSwkJCSgweDAzIDw8IDUpCisjZGVmaW5lIFVTQl9UWVBFX1NUQU5EQVJECQkoMHgwMCA8PCA1KQorI2RlZmluZSBVU0JfVFlQRV9DTEFTUwkJCSgweDAxIDw8IDUpCisjZGVmaW5lIFVTQl9UWVBFX1ZFTkRPUgkJCSgweDAyIDw8IDUpCisjZGVmaW5lIFVTQl9UWVBFX1JFU0VSVkVECQkoMHgwMyA8PCA1KQorCisvKgorICogVVNCIHJlY2lwaWVudHMsIHRoZSB0aGlyZCBvZiB0aHJlZSBiUmVxdWVzdFR5cGUgZmllbGRzCisgKi8KKyNkZWZpbmUgVVNCX1JFQ0lQX01BU0sJCQkweDFmCisjZGVmaW5lIFVTQl9SRUNJUF9ERVZJQ0UJCTB4MDAKKyNkZWZpbmUgVVNCX1JFQ0lQX0lOVEVSRkFDRQkJMHgwMQorI2RlZmluZSBVU0JfUkVDSVBfRU5EUE9JTlQJCTB4MDIKKyNkZWZpbmUgVVNCX1JFQ0lQX09USEVSCQkJMHgwMworLyogRnJvbSBXaXJlbGVzcyBVU0IgMS4wICovCisjZGVmaW5lIFVTQl9SRUNJUF9QT1JUCQkJMHgwNAorI2RlZmluZSBVU0JfUkVDSVBfUlBJUEUJCTB4MDUKKworLyoKKyAqIFN0YW5kYXJkIHJlcXVlc3RzLCBmb3IgdGhlIGJSZXF1ZXN0IGZpZWxkIG9mIGEgU0VUVVAgcGFja2V0LgorICoKKyAqIFRoZXNlIGFyZSBxdWFsaWZpZWQgYnkgdGhlIGJSZXF1ZXN0VHlwZSBmaWVsZCwgc28gdGhhdCBmb3IgZXhhbXBsZQorICogVFlQRV9DTEFTUyBvciBUWVBFX1ZFTkRPUiBzcGVjaWZpYyBmZWF0dXJlIGZsYWdzIGNvdWxkIGJlIHJldHJpZXZlZAorICogYnkgYSBHRVRfU1RBVFVTIHJlcXVlc3QuCisgKi8KKyNkZWZpbmUgVVNCX1JFUV9HRVRfU1RBVFVTCQkweDAwCisjZGVmaW5lIFVTQl9SRVFfQ0xFQVJfRkVBVFVSRQkJMHgwMQorI2RlZmluZSBVU0JfUkVRX1NFVF9GRUFUVVJFCQkweDAzCisjZGVmaW5lIFVTQl9SRVFfU0VUX0FERFJFU1MJCTB4MDUKKyNkZWZpbmUgVVNCX1JFUV9HRVRfREVTQ1JJUFRPUgkJMHgwNgorI2RlZmluZSBVU0JfUkVRX1NFVF9ERVNDUklQVE9SCQkweDA3CisjZGVmaW5lIFVTQl9SRVFfR0VUX0NPTkZJR1VSQVRJT04JMHgwOAorI2RlZmluZSBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OCTB4MDkKKyNkZWZpbmUgVVNCX1JFUV9HRVRfSU5URVJGQUNFCQkweDBBCisjZGVmaW5lIFVTQl9SRVFfU0VUX0lOVEVSRkFDRQkJMHgwQgorI2RlZmluZSBVU0JfUkVRX1NZTkNIX0ZSQU1FCQkweDBDCisKKyNkZWZpbmUgVVNCX1JFUV9TRVRfRU5DUllQVElPTgkJMHgwRAkvKiBXaXJlbGVzcyBVU0IgKi8KKyNkZWZpbmUgVVNCX1JFUV9HRVRfRU5DUllQVElPTgkJMHgwRQorI2RlZmluZSBVU0JfUkVRX1JQSVBFX0FCT1JUCQkweDBFCisjZGVmaW5lIFVTQl9SRVFfU0VUX0hBTkRTSEFLRQkJMHgwRgorI2RlZmluZSBVU0JfUkVRX1JQSVBFX1JFU0VUCQkweDBGCisjZGVmaW5lIFVTQl9SRVFfR0VUX0hBTkRTSEFLRQkJMHgxMAorI2RlZmluZSBVU0JfUkVRX1NFVF9DT05ORUNUSU9OCQkweDExCisjZGVmaW5lIFVTQl9SRVFfU0VUX1NFQ1VSSVRZX0RBVEEJMHgxMgorI2RlZmluZSBVU0JfUkVRX0dFVF9TRUNVUklUWV9EQVRBCTB4MTMKKyNkZWZpbmUgVVNCX1JFUV9TRVRfV1VTQl9EQVRBCQkweDE0CisjZGVmaW5lIFVTQl9SRVFfTE9PUEJBQ0tfREFUQV9XUklURQkweDE1CisjZGVmaW5lIFVTQl9SRVFfTE9PUEJBQ0tfREFUQV9SRUFECTB4MTYKKyNkZWZpbmUgVVNCX1JFUV9TRVRfSU5URVJGQUNFX0RTCTB4MTcKKworLyogVGhlIExpbmsgUG93ZXIgTWFuYWdlbWVudCAoTFBNKSBFQ04gZGVmaW5lcyBVU0JfUkVRX1RFU1RfQU5EX1NFVCBjb21tYW5kLAorICogdXNlZCBieSBodWJzIHRvIHB1dCBwb3J0cyBpbnRvIGEgbmV3IEwxIHN1c3BlbmQgc3RhdGUsIGV4Y2VwdCB0aGF0IGl0CisgKiBmb3Jnb3QgdG8gZGVmaW5lIGl0cyBudW1iZXIgLi4uCisgKi8KKworLyoKKyAqIFVTQiBmZWF0dXJlIGZsYWdzIGFyZSB3cml0dGVuIHVzaW5nIFVTQl9SRVFfe0NMRUFSLFNFVH1fRkVBVFVSRSwgYW5kCisgKiBhcmUgcmVhZCBhcyBhIGJpdCBhcnJheSByZXR1cm5lZCBieSBVU0JfUkVRX0dFVF9TVEFUVVMuICAoU28gdGhlcmUKKyAqIGFyZSBhdCBtb3N0IHNpeHRlZW4gZmVhdHVyZXMgb2YgZWFjaCB0eXBlLikgIEh1YnMgbWF5IGFsc28gc3VwcG9ydCBhCisgKiBuZXcgVVNCX1JFUV9URVNUX0FORF9TRVRfRkVBVFVSRSB0byBwdXQgcG9ydHMgaW50byBMMSBzdXNwZW5kLgorICovCisjZGVmaW5lIFVTQl9ERVZJQ0VfU0VMRl9QT1dFUkVECQkwCS8qIChyZWFkIG9ubHkpICovCisjZGVmaW5lIFVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUAkxCS8qIGRldiBtYXkgaW5pdGlhdGUgd2FrZXVwICovCisjZGVmaW5lIFVTQl9ERVZJQ0VfVEVTVF9NT0RFCQkyCS8qICh3aXJlZCBoaWdoIHNwZWVkIG9ubHkpICovCisjZGVmaW5lIFVTQl9ERVZJQ0VfQkFUVEVSWQkJMgkvKiAod2lyZWxlc3MpICovCisjZGVmaW5lIFVTQl9ERVZJQ0VfQl9ITlBfRU5BQkxFCQkzCS8qIChvdGcpIGRldiBtYXkgaW5pdGlhdGUgSE5QICovCisjZGVmaW5lIFVTQl9ERVZJQ0VfV1VTQl9ERVZJQ0UJCTMJLyogKHdpcmVsZXNzKSovCisjZGVmaW5lIFVTQl9ERVZJQ0VfQV9ITlBfU1VQUE9SVAk0CS8qIChvdGcpIFJIIHBvcnQgc3VwcG9ydHMgSE5QICovCisjZGVmaW5lIFVTQl9ERVZJQ0VfQV9BTFRfSE5QX1NVUFBPUlQJNQkvKiAob3RnKSBvdGhlciBSSCBwb3J0IGRvZXMgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9ERUJVR19NT0RFCQk2CS8qIChzcGVjaWFsIGRldmljZXMgb25seSkgKi8KKworLyoKKyAqIE5ldyBGZWF0dXJlIFNlbGVjdG9ycyBhcyBhZGRlZCBieSBVU0IgMy4wCisgKiBTZWUgVVNCIDMuMCBzcGVjIFRhYmxlIDktNgorICovCisjZGVmaW5lIFVTQl9ERVZJQ0VfVTFfRU5BQkxFCTQ4CS8qIGRldiBtYXkgaW5pdGlhdGUgVTEgdHJhbnNpdGlvbiAqLworI2RlZmluZSBVU0JfREVWSUNFX1UyX0VOQUJMRQk0OQkvKiBkZXYgbWF5IGluaXRpYXRlIFUyIHRyYW5zaXRpb24gKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9MVE1fRU5BQkxFCTUwCS8qIGRldiBtYXkgc2VuZCBMVE0gKi8KKyNkZWZpbmUgVVNCX0lOVFJGX0ZVTkNfU1VTUEVORAkwCS8qIGZ1bmN0aW9uIHN1c3BlbmQgKi8KKworI2RlZmluZSBVU0JfSU5UUl9GVU5DX1NVU1BFTkRfT1BUX01BU0sJMHhGRjAwCisKKyNkZWZpbmUgVVNCX0VORFBPSU5UX0hBTFQJCTAJLyogSU4vT1VUIHdpbGwgU1RBTEwgKi8KKworLyogQml0IGFycmF5IGVsZW1lbnRzIGFzIHJldHVybmVkIGJ5IHRoZSBVU0JfUkVRX0dFVF9TVEFUVVMgcmVxdWVzdC4gKi8KKyNkZWZpbmUgVVNCX0RFVl9TVEFUX1UxX0VOQUJMRUQJCTIJLyogdHJhbnNpdGlvbiBpbnRvIFUxIHN0YXRlICovCisjZGVmaW5lIFVTQl9ERVZfU1RBVF9VMl9FTkFCTEVECQkzCS8qIHRyYW5zaXRpb24gaW50byBVMiBzdGF0ZSAqLworI2RlZmluZSBVU0JfREVWX1NUQVRfTFRNX0VOQUJMRUQJNAkvKiBMYXRlbmN5IHRvbGVyYW5jZSBtZXNzYWdlcyAqLworCisvKioKKyAqIHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgLSBTRVRVUCBkYXRhIGZvciBhIFVTQiBkZXZpY2UgY29udHJvbCByZXF1ZXN0CisgKiBAYlJlcXVlc3RUeXBlOiBtYXRjaGVzIHRoZSBVU0IgYm1SZXF1ZXN0VHlwZSBmaWVsZAorICogQGJSZXF1ZXN0OiBtYXRjaGVzIHRoZSBVU0IgYlJlcXVlc3QgZmllbGQKKyAqIEB3VmFsdWU6IG1hdGNoZXMgdGhlIFVTQiB3VmFsdWUgZmllbGQgKGxlMTYgYnl0ZSBvcmRlcikKKyAqIEB3SW5kZXg6IG1hdGNoZXMgdGhlIFVTQiB3SW5kZXggZmllbGQgKGxlMTYgYnl0ZSBvcmRlcikKKyAqIEB3TGVuZ3RoOiBtYXRjaGVzIHRoZSBVU0Igd0xlbmd0aCBmaWVsZCAobGUxNiBieXRlIG9yZGVyKQorICoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gc2VuZCBjb250cm9sIHJlcXVlc3RzIHRvIGEgVVNCIGRldmljZS4gIEl0IG1hdGNoZXMKKyAqIHRoZSBkaWZmZXJlbnQgZmllbGRzIG9mIHRoZSBVU0IgMi4wIFNwZWMgc2VjdGlvbiA5LjMsIHRhYmxlIDktMi4gIFNlZSB0aGUKKyAqIFVTQiBzcGVjIGZvciBhIGZ1bGxlciBkZXNjcmlwdGlvbiBvZiB0aGUgZGlmZmVyZW50IGZpZWxkcywgYW5kIHdoYXQgdGhleSBhcmUKKyAqIHVzZWQgZm9yLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgZHJpdmVyIGZvciBhbnkgaW50ZXJmYWNlIGNhbiBpc3N1ZSBjb250cm9sIHJlcXVlc3RzLgorICogRm9yIG1vc3QgZGV2aWNlcywgaW50ZXJmYWNlcyBkb24ndCBjb29yZGluYXRlIHdpdGggZWFjaCBvdGhlciwgc28KKyAqIHN1Y2ggcmVxdWVzdHMgbWF5IGJlIG1hZGUgYXQgYW55IHRpbWUuCisgKi8KK3N0cnVjdCB1c2JfY3RybHJlcXVlc3QgeworCV9fdTggYlJlcXVlc3RUeXBlOworCV9fdTggYlJlcXVlc3Q7CisJX19sZTE2IHdWYWx1ZTsKKwlfX2xlMTYgd0luZGV4OworCV9fbGUxNiB3TGVuZ3RoOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBTVEFOREFSRCBERVNDUklQVE9SUyAuLi4gYXMgcmV0dXJuZWQgYnkgR0VUX0RFU0NSSVBUT1IsIG9yCisgKiAocmFyZWx5KSBhY2NlcHRlZCBieSBTRVRfREVTQ1JJUFRPUi4KKyAqCisgKiBOb3RlIHRoYXQgYWxsIG11bHRpLWJ5dGUgdmFsdWVzIGhlcmUgYXJlIGVuY29kZWQgaW4gbGl0dGxlIGVuZGlhbgorICogYnl0ZSBvcmRlciAib24gdGhlIHdpcmUiLiAgV2l0aGluIHRoZSBrZXJuZWwgYW5kIHdoZW4gZXhwb3NlZAorICogdGhyb3VnaCB0aGUgTGludXgtVVNCIEFQSXMsIHRoZXkgYXJlIG5vdCBjb252ZXJ0ZWQgdG8gY3B1IGJ5dGUKKyAqIG9yZGVyOyBpdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNsaWVudCBjb2RlIHRvIGRvIHRoaXMuCisgKiBUaGUgc2luZ2xlIGV4Y2VwdGlvbiBpcyB3aGVuIGRldmljZSBhbmQgY29uZmlndXJhdGlvbiBkZXNjcmlwdG9ycyAoYnV0CisgKiBub3Qgb3RoZXIgZGVzY3JpcHRvcnMpIGFyZSByZWFkIGZyb20gdXNiZnMgKGkuZS4gL3Byb2MvYnVzL3VzYi9CQkIvREREKTsKKyAqIGluIHRoaXMgY2FzZSB0aGUgZmllbGRzIGFyZSBjb252ZXJ0ZWQgdG8gaG9zdCBlbmRpYW5uZXNzIGJ5IHRoZSBrZXJuZWwuCisgKi8KKworLyoKKyAqIERlc2NyaXB0b3IgdHlwZXMgLi4uIFVTQiAyLjAgc3BlYyB0YWJsZSA5LjUKKyAqLworI2RlZmluZSBVU0JfRFRfREVWSUNFCQkJMHgwMQorI2RlZmluZSBVU0JfRFRfQ09ORklHCQkJMHgwMgorI2RlZmluZSBVU0JfRFRfU1RSSU5HCQkJMHgwMworI2RlZmluZSBVU0JfRFRfSU5URVJGQUNFCQkweDA0CisjZGVmaW5lIFVTQl9EVF9FTkRQT0lOVAkJCTB4MDUKKyNkZWZpbmUgVVNCX0RUX0RFVklDRV9RVUFMSUZJRVIJCTB4MDYKKyNkZWZpbmUgVVNCX0RUX09USEVSX1NQRUVEX0NPTkZJRwkweDA3CisjZGVmaW5lIFVTQl9EVF9JTlRFUkZBQ0VfUE9XRVIJCTB4MDgKKy8qIHRoZXNlIGFyZSBmcm9tIGEgbWlub3IgdXNiIDIuMCByZXZpc2lvbiAoRUNOKSAqLworI2RlZmluZSBVU0JfRFRfT1RHCQkJMHgwOQorI2RlZmluZSBVU0JfRFRfREVCVUcJCQkweDBhCisjZGVmaW5lIFVTQl9EVF9JTlRFUkZBQ0VfQVNTT0NJQVRJT04JMHgwYgorLyogdGhlc2UgYXJlIGZyb20gdGhlIFdpcmVsZXNzIFVTQiBzcGVjICovCisjZGVmaW5lIFVTQl9EVF9TRUNVUklUWQkJCTB4MGMKKyNkZWZpbmUgVVNCX0RUX0tFWQkJCTB4MGQKKyNkZWZpbmUgVVNCX0RUX0VOQ1JZUFRJT05fVFlQRQkJMHgwZQorI2RlZmluZSBVU0JfRFRfQk9TCQkJMHgwZgorI2RlZmluZSBVU0JfRFRfREVWSUNFX0NBUEFCSUxJVFkJMHgxMAorI2RlZmluZSBVU0JfRFRfV0lSRUxFU1NfRU5EUE9JTlRfQ09NUAkweDExCisjZGVmaW5lIFVTQl9EVF9XSVJFX0FEQVBURVIJCTB4MjEKKyNkZWZpbmUgVVNCX0RUX1JQSVBFCQkJMHgyMgorI2RlZmluZSBVU0JfRFRfQ1NfUkFESU9fQ09OVFJPTAkJMHgyMworLyogRnJvbSB0aGUgVDEwIFVBUyBzcGVjaWZpY2F0aW9uICovCisjZGVmaW5lIFVTQl9EVF9QSVBFX1VTQUdFCQkweDI0CisvKiBGcm9tIHRoZSBVU0IgMy4wIHNwZWMgKi8KKyNkZWZpbmUJVVNCX0RUX1NTX0VORFBPSU5UX0NPTVAJCTB4MzAKKworLyogQ29udmVudGlvbmFsIGNvZGVzIGZvciBjbGFzcy1zcGVjaWZpYyBkZXNjcmlwdG9ycy4gIFRoZSBjb252ZW50aW9uIGlzCisgKiBkZWZpbmVkIGluIHRoZSBVU0IgIkNvbW1vbiBDbGFzcyIgU3BlYyAoMy4xMSkuICBJbmRpdmlkdWFsIGNsYXNzIHNwZWNzCisgKiBhcmUgYXV0aG9yaXRhdGl2ZSBmb3IgdGhlaXIgdXNhZ2UsIG5vdCB0aGUgImNvbW1vbiBjbGFzcyIgd3JpdGV1cC4KKyAqLworI2RlZmluZSBVU0JfRFRfQ1NfREVWSUNFCQkoVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRFRfREVWSUNFKQorI2RlZmluZSBVU0JfRFRfQ1NfQ09ORklHCQkoVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRFRfQ09ORklHKQorI2RlZmluZSBVU0JfRFRfQ1NfU1RSSU5HCQkoVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRFRfU1RSSU5HKQorI2RlZmluZSBVU0JfRFRfQ1NfSU5URVJGQUNFCQkoVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRFRfSU5URVJGQUNFKQorI2RlZmluZSBVU0JfRFRfQ1NfRU5EUE9JTlQJCShVU0JfVFlQRV9DTEFTUyB8IFVTQl9EVF9FTkRQT0lOVCkKKworLyogQWxsIHN0YW5kYXJkIGRlc2NyaXB0b3JzIGhhdmUgdGhlc2UgMiBmaWVsZHMgYXQgdGhlIGJlZ2lubmluZyAqLworc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciB7CisJX191OCAgYkxlbmd0aDsKKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBVU0JfRFRfREVWSUNFOiBEZXZpY2UgZGVzY3JpcHRvciAqLworc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvciB7CisJX191OCAgYkxlbmd0aDsKKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CisKKwlfX2xlMTYgYmNkVVNCOworCV9fdTggIGJEZXZpY2VDbGFzczsKKwlfX3U4ICBiRGV2aWNlU3ViQ2xhc3M7CisJX191OCAgYkRldmljZVByb3RvY29sOworCV9fdTggIGJNYXhQYWNrZXRTaXplMDsKKwlfX2xlMTYgaWRWZW5kb3I7CisJX19sZTE2IGlkUHJvZHVjdDsKKwlfX2xlMTYgYmNkRGV2aWNlOworCV9fdTggIGlNYW51ZmFjdHVyZXI7CisJX191OCAgaVByb2R1Y3Q7CisJX191OCAgaVNlcmlhbE51bWJlcjsKKwlfX3U4ICBiTnVtQ29uZmlndXJhdGlvbnM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBVU0JfRFRfREVWSUNFX1NJWkUJCTE4CisKKworLyoKKyAqIERldmljZSBhbmQvb3IgSW50ZXJmYWNlIENsYXNzIGNvZGVzCisgKiBhcyBmb3VuZCBpbiBiRGV2aWNlQ2xhc3Mgb3IgYkludGVyZmFjZUNsYXNzCisgKiBhbmQgZGVmaW5lZCBieSB3d3cudXNiLm9yZyBkb2N1bWVudHMKKyAqLworI2RlZmluZSBVU0JfQ0xBU1NfUEVSX0lOVEVSRkFDRQkJMAkvKiBmb3IgRGV2aWNlQ2xhc3MgKi8KKyNkZWZpbmUgVVNCX0NMQVNTX0FVRElPCQkJMQorI2RlZmluZSBVU0JfQ0xBU1NfQ09NTQkJCTIKKyNkZWZpbmUgVVNCX0NMQVNTX0hJRAkJCTMKKyNkZWZpbmUgVVNCX0NMQVNTX1BIWVNJQ0FMCQk1CisjZGVmaW5lIFVTQl9DTEFTU19TVElMTF9JTUFHRQkJNgorI2RlZmluZSBVU0JfQ0xBU1NfUFJJTlRFUgkJNworI2RlZmluZSBVU0JfQ0xBU1NfTUFTU19TVE9SQUdFCQk4CisjZGVmaW5lIFVTQl9DTEFTU19IVUIJCQk5CisjZGVmaW5lIFVTQl9DTEFTU19DRENfREFUQQkJMHgwYQorI2RlZmluZSBVU0JfQ0xBU1NfQ1NDSUQJCQkweDBiCS8qIGNoaXArIHNtYXJ0IGNhcmQgKi8KKyNkZWZpbmUgVVNCX0NMQVNTX0NPTlRFTlRfU0VDCQkweDBkCS8qIGNvbnRlbnQgc2VjdXJpdHkgKi8KKyNkZWZpbmUgVVNCX0NMQVNTX1ZJREVPCQkJMHgwZQorI2RlZmluZSBVU0JfQ0xBU1NfV0lSRUxFU1NfQ09OVFJPTExFUgkweGUwCisjZGVmaW5lIFVTQl9DTEFTU19NSVNDCQkJMHhlZgorI2RlZmluZSBVU0JfQ0xBU1NfQVBQX1NQRUMJCTB4ZmUKKyNkZWZpbmUgVVNCX0NMQVNTX1ZFTkRPUl9TUEVDCQkweGZmCisKKyNkZWZpbmUgVVNCX1NVQkNMQVNTX1ZFTkRPUl9TUEVDCTB4ZmYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVVNCX0RUX0NPTkZJRzogQ29uZmlndXJhdGlvbiBkZXNjcmlwdG9yIGluZm9ybWF0aW9uLgorICoKKyAqIFVTQl9EVF9PVEhFUl9TUEVFRF9DT05GSUcgaXMgdGhlIHNhbWUgZGVzY3JpcHRvciwgZXhjZXB0IHRoYXQgdGhlCisgKiBkZXNjcmlwdG9yIHR5cGUgaXMgZGlmZmVyZW50LiAgSGlnaHNwZWVkLWNhcGFibGUgZGV2aWNlcyBjYW4gbG9vaworICogZGlmZmVyZW50IGRlcGVuZGluZyBvbiB3aGF0IHNwZWVkIHRoZXkncmUgY3VycmVudGx5IHJ1bm5pbmcuICBPbmx5CisgKiBkZXZpY2VzIHdpdGggYSBVU0JfRFRfREVWSUNFX1FVQUxJRklFUiBoYXZlIGFueSBPVEhFUl9TUEVFRF9DT05GSUcKKyAqIGRlc2NyaXB0b3JzLgorICovCitzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKworCV9fbGUxNiB3VG90YWxMZW5ndGg7CisJX191OCAgYk51bUludGVyZmFjZXM7CisJX191OCAgYkNvbmZpZ3VyYXRpb25WYWx1ZTsKKwlfX3U4ICBpQ29uZmlndXJhdGlvbjsKKwlfX3U4ICBibUF0dHJpYnV0ZXM7CisJX191OCAgYk1heFBvd2VyOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgVVNCX0RUX0NPTkZJR19TSVpFCQk5CisKKy8qIGZyb20gY29uZmlnIGRlc2NyaXB0b3IgYm1BdHRyaWJ1dGVzICovCisjZGVmaW5lIFVTQl9DT05GSUdfQVRUX09ORQkJKDEgPDwgNykJLyogbXVzdCBiZSBzZXQgKi8KKyNkZWZpbmUgVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSCSgxIDw8IDYpCS8qIHNlbGYgcG93ZXJlZCAqLworI2RlZmluZSBVU0JfQ09ORklHX0FUVF9XQUtFVVAJCSgxIDw8IDUpCS8qIGNhbiB3YWtldXAgKi8KKyNkZWZpbmUgVVNCX0NPTkZJR19BVFRfQkFUVEVSWQkJKDEgPDwgNCkJLyogYmF0dGVyeSBwb3dlcmVkICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFVTQl9EVF9TVFJJTkc6IFN0cmluZyBkZXNjcmlwdG9yICovCitzdHJ1Y3QgdXNiX3N0cmluZ19kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKworCV9fbGUxNiB3RGF0YVsxXTsJCS8qIFVURi0xNkxFIGVuY29kZWQgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBub3RlIHRoYXQgInN0cmluZyIgemVybyBpcyBzcGVjaWFsLCBpdCBob2xkcyBsYW5ndWFnZSBjb2RlcyB0aGF0CisgKiB0aGUgZGV2aWNlIHN1cHBvcnRzLCBub3QgVW5pY29kZSBjaGFyYWN0ZXJzLgorICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFVTQl9EVF9JTlRFUkZBQ0U6IEludGVyZmFjZSBkZXNjcmlwdG9yICovCitzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKworCV9fdTggIGJJbnRlcmZhY2VOdW1iZXI7CisJX191OCAgYkFsdGVybmF0ZVNldHRpbmc7CisJX191OCAgYk51bUVuZHBvaW50czsKKwlfX3U4ICBiSW50ZXJmYWNlQ2xhc3M7CisJX191OCAgYkludGVyZmFjZVN1YkNsYXNzOworCV9fdTggIGJJbnRlcmZhY2VQcm90b2NvbDsKKwlfX3U4ICBpSW50ZXJmYWNlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgVVNCX0RUX0lOVEVSRkFDRV9TSVpFCQk5CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFVTQl9EVF9FTkRQT0lOVDogRW5kcG9pbnQgZGVzY3JpcHRvciAqLworc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKworCV9fdTggIGJFbmRwb2ludEFkZHJlc3M7CisJX191OCAgYm1BdHRyaWJ1dGVzOworCV9fbGUxNiB3TWF4UGFja2V0U2l6ZTsKKwlfX3U4ICBiSW50ZXJ2YWw7CisKKwkvKiBOT1RFOiAgdGhlc2UgdHdvIGFyZSBfb25seV8gaW4gYXVkaW8gZW5kcG9pbnRzLiAqLworCS8qIHVzZSBVU0JfRFRfRU5EUE9JTlQqX1NJWkUgaW4gYkxlbmd0aCwgbm90IHNpemVvZi4gKi8KKwlfX3U4ICBiUmVmcmVzaDsKKwlfX3U4ICBiU3luY2hBZGRyZXNzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgVVNCX0RUX0VORFBPSU5UX1NJWkUJCTcKKyNkZWZpbmUgVVNCX0RUX0VORFBPSU5UX0FVRElPX1NJWkUJOQkvKiBBdWRpbyBleHRlbnNpb24gKi8KKworCisvKgorICogRW5kcG9pbnRzCisgKi8KKyNkZWZpbmUgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLCTB4MGYJLyogaW4gYkVuZHBvaW50QWRkcmVzcyAqLworI2RlZmluZSBVU0JfRU5EUE9JTlRfRElSX01BU0sJCTB4ODAKKworI2RlZmluZSBVU0JfRU5EUE9JTlRfU1lOQ1RZUEUJCTB4MGMKKyNkZWZpbmUgVVNCX0VORFBPSU5UX1NZTkNfTk9ORQkJKDAgPDwgMikKKyNkZWZpbmUgVVNCX0VORFBPSU5UX1NZTkNfQVNZTkMJCSgxIDw8IDIpCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9TWU5DX0FEQVBUSVZFCSgyIDw8IDIpCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9TWU5DX1NZTkMJCSgzIDw8IDIpCisKKyNkZWZpbmUgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0sJMHgwMwkvKiBpbiBibUF0dHJpYnV0ZXMgKi8KKyNkZWZpbmUgVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTAkwCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MJCTEKKyNkZWZpbmUgVVNCX0VORFBPSU5UX1hGRVJfQlVMSwkJMgorI2RlZmluZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQJCTMKKyNkZWZpbmUgVVNCX0VORFBPSU5UX01BWF9BREpVU1RBQkxFCTB4ODAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfbnVtIC0gZ2V0IHRoZSBlbmRwb2ludCdzIG51bWJlcgorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgQGVwZCdzIG51bWJlcjogMCB0byAxNS4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IHVzYl9lbmRwb2ludF9udW0oY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuIGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSzsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfdHlwZSAtIGdldCB0aGUgZW5kcG9pbnQncyB0cmFuc2ZlciB0eXBlCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyBvbmUgb2YgVVNCX0VORFBPSU5UX1hGRVJfe0NPTlRST0wsIElTT0MsIEJVTEssIElOVH0gYWNjb3JkaW5nCisgKiB0byBAZXBkJ3MgdHJhbnNmZXIgdHlwZS4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IHVzYl9lbmRwb2ludF90eXBlKGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiBlcGQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9kaXJfaW4gLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIElOIGRpcmVjdGlvbgorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBJTiwgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCB1c2JfZW5kcG9pbnRfZGlyX2luKGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAoKGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9JTik7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X2Rpcl9vdXQgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIE9VVCBkaXJlY3Rpb24KKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgT1VULCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IHVzYl9lbmRwb2ludF9kaXJfb3V0KAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAoKGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9PVVQpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF94ZmVyX2J1bGsgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIGJ1bGsgdHJhbnNmZXIgdHlwZQorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBidWxrLCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICgoZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KKwkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSyk7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X3hmZXJfY29udHJvbCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgY29udHJvbCB0cmFuc2ZlciB0eXBlCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIGNvbnRyb2wsIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdXNiX2VuZHBvaW50X3hmZXJfY29udHJvbCgKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKChlcGQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQorCQlVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfeGZlcl9pbnQgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIGludGVycnVwdCB0cmFuc2ZlciB0eXBlCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIGludGVycnVwdCwgb3RoZXJ3aXNlIGl0IHJldHVybnMKKyAqIGZhbHNlLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdXNiX2VuZHBvaW50X3hmZXJfaW50KAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAoKGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09CisJCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCk7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X3hmZXJfaXNvYyAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgaXNvY2hyb25vdXMgdHJhbnNmZXIgdHlwZQorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBpc29jaHJvbm91cywgb3RoZXJ3aXNlIGl0IHJldHVybnMKKyAqIGZhbHNlLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdXNiX2VuZHBvaW50X3hmZXJfaXNvYygKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKChlcGQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQorCQlVU0JfRU5EUE9JTlRfWEZFUl9JU09DKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfaXNfYnVsa19pbiAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBidWxrIElOCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgYnVsayB0cmFuc2ZlciB0eXBlIGFuZCBJTiBkaXJlY3Rpb24sCisgKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IHVzYl9lbmRwb2ludF9pc19idWxrX2luKAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiB1c2JfZW5kcG9pbnRfeGZlcl9idWxrKGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9pbihlcGQpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9pc19idWxrX291dCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBidWxrIE9VVAorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGJ1bGsgdHJhbnNmZXIgdHlwZSBhbmQgT1VUIGRpcmVjdGlvbiwKKyAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdXNiX2VuZHBvaW50X2lzX2J1bGtfb3V0KAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiB1c2JfZW5kcG9pbnRfeGZlcl9idWxrKGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9vdXQoZXBkKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfaXNfaW50X2luIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGludGVycnVwdCBJTgorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGludGVycnVwdCB0cmFuc2ZlciB0eXBlIGFuZCBJTiBkaXJlY3Rpb24sCisgKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IHVzYl9lbmRwb2ludF9pc19pbnRfaW4oCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuIHVzYl9lbmRwb2ludF94ZmVyX2ludChlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfaW4oZXBkKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfaXNfaW50X291dCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBpbnRlcnJ1cHQgT1VUCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgaW50ZXJydXB0IHRyYW5zZmVyIHR5cGUgYW5kIE9VVCBkaXJlY3Rpb24sCisgKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IHVzYl9lbmRwb2ludF9pc19pbnRfb3V0KAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiB1c2JfZW5kcG9pbnRfeGZlcl9pbnQoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX291dChlcGQpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9pc19pc29jX2luIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGlzb2Nocm9ub3VzIElOCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgaXNvY2hyb25vdXMgdHJhbnNmZXIgdHlwZSBhbmQgSU4gZGlyZWN0aW9uLAorICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCB1c2JfZW5kcG9pbnRfaXNfaXNvY19pbigKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gdXNiX2VuZHBvaW50X3hmZXJfaXNvYyhlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfaW4oZXBkKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfaXNfaXNvY19vdXQgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaXMgaXNvY2hyb25vdXMgT1VUCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgaXNvY2hyb25vdXMgdHJhbnNmZXIgdHlwZSBhbmQgT1VUIGRpcmVjdGlvbiwKKyAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdXNiX2VuZHBvaW50X2lzX2lzb2Nfb3V0KAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiB1c2JfZW5kcG9pbnRfeGZlcl9pc29jKGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9vdXQoZXBkKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVVNCX0RUX1NTX0VORFBPSU5UX0NPTVA6IFN1cGVyU3BlZWQgRW5kcG9pbnQgQ29tcGFuaW9uIGRlc2NyaXB0b3IgKi8KK3N0cnVjdCB1c2Jfc3NfZXBfY29tcF9kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKworCV9fdTggIGJNYXhCdXJzdDsKKwlfX3U4ICBibUF0dHJpYnV0ZXM7CisJX191MTYgd0J5dGVzUGVySW50ZXJ2YWw7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBVU0JfRFRfU1NfRVBfQ09NUF9TSVpFCQk2CisvKiBCaXRzIDQ6MCBvZiBibUF0dHJpYnV0ZXMgaWYgdGhpcyBpcyBhIGJ1bGsgZW5kcG9pbnQgKi8KKyNkZWZpbmUgVVNCX1NTX01BWF9TVFJFQU1TKHApCQkoMSA8PCAocCAmIDB4MWYpKQorLyogQml0cyAxOjAgb2YgYm1BdHRyaWJ1dGVzIGlmIHRoaXMgaXMgYW4gaXNvYyBlbmRwb2ludCAqLworI2RlZmluZSBVU0JfU1NfTVVMVChwKQkJCSgxICsgKChwKSAmIDB4MykpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSOiBEZXZpY2UgUXVhbGlmaWVyIGRlc2NyaXB0b3IgKi8KK3N0cnVjdCB1c2JfcXVhbGlmaWVyX2Rlc2NyaXB0b3IgeworCV9fdTggIGJMZW5ndGg7CisJX191OCAgYkRlc2NyaXB0b3JUeXBlOworCisJX19sZTE2IGJjZFVTQjsKKwlfX3U4ICBiRGV2aWNlQ2xhc3M7CisJX191OCAgYkRldmljZVN1YkNsYXNzOworCV9fdTggIGJEZXZpY2VQcm90b2NvbDsKKwlfX3U4ICBiTWF4UGFja2V0U2l6ZTA7CisJX191OCAgYk51bUNvbmZpZ3VyYXRpb25zOworCV9fdTggIGJSRVNFUlZFRDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFVTQl9EVF9PVEcgKGZyb20gT1RHIDEuMGEgc3VwcGxlbWVudCkgKi8KK3N0cnVjdCB1c2Jfb3RnX2Rlc2NyaXB0b3IgeworCV9fdTggIGJMZW5ndGg7CisJX191OCAgYkRlc2NyaXB0b3JUeXBlOworCisJX191OCAgYm1BdHRyaWJ1dGVzOwkvKiBzdXBwb3J0IGZvciBITlAsIFNSUCwgZXRjICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogZnJvbSB1c2Jfb3RnX2Rlc2NyaXB0b3IuYm1BdHRyaWJ1dGVzICovCisjZGVmaW5lIFVTQl9PVEdfU1JQCQkoMSA8PCAwKQorI2RlZmluZSBVU0JfT1RHX0hOUAkJKDEgPDwgMSkJLyogc3dhcCBob3N0L2RldmljZSByb2xlcyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBVU0JfRFRfREVCVUc6ICBmb3Igc3BlY2lhbCBoaWdoc3BlZWQgZGV2aWNlcywgcmVwbGFjaW5nIHNlcmlhbCBjb25zb2xlICovCitzdHJ1Y3QgdXNiX2RlYnVnX2Rlc2NyaXB0b3IgeworCV9fdTggIGJMZW5ndGg7CisJX191OCAgYkRlc2NyaXB0b3JUeXBlOworCisJLyogYnVsayBlbmRwb2ludHMgd2l0aCA4IGJ5dGUgbWF4cGFja2V0ICovCisJX191OCAgYkRlYnVnSW5FbmRwb2ludDsKKwlfX3U4ICBiRGVidWdPdXRFbmRwb2ludDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFVTQl9EVF9JTlRFUkZBQ0VfQVNTT0NJQVRJT046IGdyb3VwcyBpbnRlcmZhY2VzICovCitzdHJ1Y3QgdXNiX2ludGVyZmFjZV9hc3NvY19kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKworCV9fdTggIGJGaXJzdEludGVyZmFjZTsKKwlfX3U4ICBiSW50ZXJmYWNlQ291bnQ7CisJX191OCAgYkZ1bmN0aW9uQ2xhc3M7CisJX191OCAgYkZ1bmN0aW9uU3ViQ2xhc3M7CisJX191OCAgYkZ1bmN0aW9uUHJvdG9jb2w7CisJX191OCAgaUZ1bmN0aW9uOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVVNCX0RUX1NFQ1VSSVRZOiAgZ3JvdXAgb2Ygd2lyZWxlc3Mgc2VjdXJpdHkgZGVzY3JpcHRvcnMsIGluY2x1ZGluZworICogZW5jcnlwdGlvbiB0eXBlcyBhdmFpbGFibGUgZm9yIHNldHRpbmcgdXAgYSBDQy9hc3NvY2lhdGlvbi4KKyAqLworc3RydWN0IHVzYl9zZWN1cml0eV9kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKworCV9fbGUxNiB3VG90YWxMZW5ndGg7CisJX191OCAgYk51bUVuY3J5cHRpb25UeXBlczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFVTQl9EVF9LRVk6ICB1c2VkIHdpdGgge0dFVCxTRVR9X1NFQ1VSSVRZX0RBVEE7IG9ubHkgcHVibGljIGtleXMKKyAqIG1heSBiZSByZXRyaWV2ZWQuCisgKi8KK3N0cnVjdCB1c2Jfa2V5X2Rlc2NyaXB0b3IgeworCV9fdTggIGJMZW5ndGg7CisJX191OCAgYkRlc2NyaXB0b3JUeXBlOworCisJX191OCAgdFRLSURbM107CisJX191OCAgYlJlc2VydmVkOworCV9fdTggIGJLZXlEYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVVNCX0RUX0VOQ1JZUFRJT05fVFlQRTogIGJ1bmRsZWQgaW4gRFRfU0VDVVJJVFkgZ3JvdXBzICovCitzdHJ1Y3QgdXNiX2VuY3J5cHRpb25fZGVzY3JpcHRvciB7CisJX191OCAgYkxlbmd0aDsKKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CisKKwlfX3U4ICBiRW5jcnlwdGlvblR5cGU7CisjZGVmaW5lCVVTQl9FTkNfVFlQRV9VTlNFQ1VSRQkJMAorI2RlZmluZQlVU0JfRU5DX1RZUEVfV0lSRUQJCTEJLyogbm9uLXdpcmVsZXNzIG1vZGUgKi8KKyNkZWZpbmUJVVNCX0VOQ19UWVBFX0NDTV8xCQkyCS8qIGFlczEyOC9jYmMgc2Vzc2lvbiAqLworI2RlZmluZQlVU0JfRU5DX1RZUEVfUlNBXzEJCTMJLyogcnNhMzA3Mi9zaGExIGF1dGggKi8KKwlfX3U4ICBiRW5jcnlwdGlvblZhbHVlOwkJLyogdXNlIGluIFNFVF9FTkNSWVBUSU9OICovCisJX191OCAgYkF1dGhLZXlJbmRleDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVVNCX0RUX0JPUzogIGdyb3VwIG9mIGRldmljZS1sZXZlbCBjYXBhYmlsaXRpZXMgKi8KK3N0cnVjdCB1c2JfYm9zX2Rlc2NyaXB0b3IgeworCV9fdTggIGJMZW5ndGg7CisJX191OCAgYkRlc2NyaXB0b3JUeXBlOworCisJX19sZTE2IHdUb3RhbExlbmd0aDsKKwlfX3U4ICBiTnVtRGV2aWNlQ2FwczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgVVNCX0RUX0JPU19TSVpFCQk1CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBVU0JfRFRfREVWSUNFX0NBUEFCSUxJVFk6ICBncm91cGVkIHdpdGggQk9TICovCitzdHJ1Y3QgdXNiX2Rldl9jYXBfaGVhZGVyIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4ICBiRGV2Q2FwYWJpbGl0eVR5cGU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lCVVTQl9DQVBfVFlQRV9XSVJFTEVTU19VU0IJMQorCitzdHJ1Y3QgdXNiX3dpcmVsZXNzX2NhcF9kZXNjcmlwdG9yIHsJLyogVWx0cmEgV2lkZSBCYW5kICovCisJX191OCAgYkxlbmd0aDsKKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CisJX191OCAgYkRldkNhcGFiaWxpdHlUeXBlOworCisJX191OCAgYm1BdHRyaWJ1dGVzOworI2RlZmluZQlVU0JfV0lSRUxFU1NfUDJQX0RSRAkJKDEgPDwgMSkKKyNkZWZpbmUJVVNCX1dJUkVMRVNTX0JFQUNPTl9NQVNLCSgzIDw8IDIpCisjZGVmaW5lCVVTQl9XSVJFTEVTU19CRUFDT05fU0VMRgkoMSA8PCAyKQorI2RlZmluZQlVU0JfV0lSRUxFU1NfQkVBQ09OX0RJUkVDVEVECSgyIDw8IDIpCisjZGVmaW5lCVVTQl9XSVJFTEVTU19CRUFDT05fTk9ORQkoMyA8PCAyKQorCV9fbGUxNiB3UEhZUmF0ZXM7CS8qIGJpdCByYXRlcywgTWJwcyAqLworI2RlZmluZQlVU0JfV0lSRUxFU1NfUEhZXzUzCQkoMSA8PCAwKQkvKiBhbHdheXMgc2V0ICovCisjZGVmaW5lCVVTQl9XSVJFTEVTU19QSFlfODAJCSgxIDw8IDEpCisjZGVmaW5lCVVTQl9XSVJFTEVTU19QSFlfMTA3CQkoMSA8PCAyKQkvKiBhbHdheXMgc2V0ICovCisjZGVmaW5lCVVTQl9XSVJFTEVTU19QSFlfMTYwCQkoMSA8PCAzKQorI2RlZmluZQlVU0JfV0lSRUxFU1NfUEhZXzIwMAkJKDEgPDwgNCkJLyogYWx3YXlzIHNldCAqLworI2RlZmluZQlVU0JfV0lSRUxFU1NfUEhZXzMyMAkJKDEgPDwgNSkKKyNkZWZpbmUJVVNCX1dJUkVMRVNTX1BIWV80MDAJCSgxIDw8IDYpCisjZGVmaW5lCVVTQl9XSVJFTEVTU19QSFlfNDgwCQkoMSA8PCA3KQorCV9fdTggIGJtVEZJVFhQb3dlckluZm87CS8qIFRGSSBwb3dlciBsZXZlbHMgKi8KKwlfX3U4ICBibUZGSVRYUG93ZXJJbmZvOwkvKiBGRkkgcG93ZXIgbGV2ZWxzICovCisJX19sZTE2IGJtQmFuZEdyb3VwOworCV9fdTggIGJSZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIFVTQiAyLjAgRXh0ZW5zaW9uIGRlc2NyaXB0b3IgKi8KKyNkZWZpbmUJVVNCX0NBUF9UWVBFX0VYVAkJMgorCitzdHJ1Y3QgdXNiX2V4dF9jYXBfZGVzY3JpcHRvciB7CQkvKiBMaW5rIFBvd2VyIE1hbmFnZW1lbnQgKi8KKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4ICBiRGV2Q2FwYWJpbGl0eVR5cGU7CisJX19sZTMyIGJtQXR0cmlidXRlczsKKyNkZWZpbmUgVVNCX0xQTV9TVVBQT1JUCQkJKDEgPDwgMSkJLyogc3VwcG9ydHMgTFBNICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFVTQl9EVF9VU0JfRVhUX0NBUF9TSVpFCTcKKworLyoKKyAqIFN1cGVyU3BlZWQgVVNCIENhcGFiaWxpdHkgZGVzY3JpcHRvcjogRGVmaW5lcyB0aGUgc2V0IG9mIFN1cGVyU3BlZWQgVVNCCisgKiBzcGVjaWZpYyBkZXZpY2UgbGV2ZWwgY2FwYWJpbGl0aWVzCisgKi8KKyNkZWZpbmUJCVVTQl9TU19DQVBfVFlQRQkJMworc3RydWN0IHVzYl9zc19jYXBfZGVzY3JpcHRvciB7CQkvKiBMaW5rIFBvd2VyIE1hbmFnZW1lbnQgKi8KKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4ICBiRGV2Q2FwYWJpbGl0eVR5cGU7CisJX191OCAgYm1BdHRyaWJ1dGVzOworI2RlZmluZSBVU0JfTFRNX1NVUFBPUlQJCQkoMSA8PCAxKSAvKiBzdXBwb3J0cyBMVE0gKi8KKwlfX2xlMTYgd1NwZWVkU3VwcG9ydGVkOworI2RlZmluZSBVU0JfTE9XX1NQRUVEX09QRVJBVElPTgkJKDEpCSAvKiBMb3cgc3BlZWQgb3BlcmF0aW9uICovCisjZGVmaW5lIFVTQl9GVUxMX1NQRUVEX09QRVJBVElPTgkoMSA8PCAxKSAvKiBGdWxsIHNwZWVkIG9wZXJhdGlvbiAqLworI2RlZmluZSBVU0JfSElHSF9TUEVFRF9PUEVSQVRJT04JKDEgPDwgMikgLyogSGlnaCBzcGVlZCBvcGVyYXRpb24gKi8KKyNkZWZpbmUgVVNCXzVHQlBTX09QRVJBVElPTgkJKDEgPDwgMykgLyogT3BlcmF0aW9uIGF0IDVHYnBzICovCisJX191OCAgYkZ1bmN0aW9uYWxpdHlTdXBwb3J0OworCV9fdTggIGJVMWRldkV4aXRMYXQ7CisJX19sZTE2IGJVMkRldkV4aXRMYXQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFVTQl9EVF9VU0JfU1NfQ0FQX1NJWkUJMTAKKworLyoKKyAqIENvbnRhaW5lciBJRCBDYXBhYmlsaXR5IGRlc2NyaXB0b3I6IERlZmluZXMgdGhlIGluc3RhbmNlIHVuaXF1ZSBJRCB1c2VkIHRvCisgKiBpZGVudGlmeSB0aGUgaW5zdGFuY2UgYWNyb3NzIGFsbCBvcGVyYXRpbmcgbW9kZXMKKyAqLworI2RlZmluZQlDT05UQUlORVJfSURfVFlQRQk0CitzdHJ1Y3QgdXNiX3NzX2NvbnRhaW5lcl9pZF9kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4ICBiRGV2Q2FwYWJpbGl0eVR5cGU7CisJX191OCAgYlJlc2VydmVkOworCV9fdTggIENvbnRhaW5lcklEWzE2XTsgLyogMTI4LWJpdCBudW1iZXIgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgVVNCX0RUX1VTQl9TU19DT05UTl9JRF9TSVpFCTIwCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBVU0JfRFRfV0lSRUxFU1NfRU5EUE9JTlRfQ09NUDogIGNvbXBhbmlvbiBkZXNjcmlwdG9yIGFzc29jaWF0ZWQgd2l0aAorICogZWFjaCBlbmRwb2ludCBkZXNjcmlwdG9yIGZvciBhIHdpcmVsZXNzIGRldmljZQorICovCitzdHJ1Y3QgdXNiX3dpcmVsZXNzX2VwX2NvbXBfZGVzY3JpcHRvciB7CisJX191OCAgYkxlbmd0aDsKKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CisKKwlfX3U4ICBiTWF4QnVyc3Q7CisJX191OCAgYk1heFNlcXVlbmNlOworCV9fbGUxNiB3TWF4U3RyZWFtRGVsYXk7CisJX19sZTE2IHdPdmVyVGhlQWlyUGFja2V0U2l6ZTsKKwlfX3U4ICBiT3ZlclRoZUFpckludGVydmFsOworCV9fdTggIGJtQ29tcEF0dHJpYnV0ZXM7CisjZGVmaW5lIFVTQl9FTkRQT0lOVF9TV0lUQ0hfTUFTSwkweDAzCS8qIGluIGJtQ29tcEF0dHJpYnV0ZXMgKi8KKyNkZWZpbmUgVVNCX0VORFBPSU5UX1NXSVRDSF9OTwkJMAorI2RlZmluZSBVU0JfRU5EUE9JTlRfU1dJVENIX1NXSVRDSAkxCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9TV0lUQ0hfU0NBTEUJMgorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVVNCX1JFUV9TRVRfSEFORFNIQUtFIGlzIGEgZm91ci13YXkgaGFuZHNoYWtlIHVzZWQgYmV0d2VlbiBhIHdpcmVsZXNzCisgKiBob3N0IGFuZCBhIGRldmljZSBmb3IgY29ubmVjdGlvbiBzZXQgdXAsIG11dHVhbCBhdXRoZW50aWNhdGlvbiwgYW5kCisgKiBleGNoYW5naW5nIHNob3J0IGxpdmVkIHNlc3Npb24ga2V5cy4gIFRoZSBoYW5kc2hha2UgZGVwZW5kcyBvbiBhIENDLgorICovCitzdHJ1Y3QgdXNiX2hhbmRzaGFrZSB7CisJX191OCBiTWVzc2FnZU51bWJlcjsKKwlfX3U4IGJTdGF0dXM7CisJX191OCB0VEtJRFszXTsKKwlfX3U4IGJSZXNlcnZlZDsKKwlfX3U4IENESURbMTZdOworCV9fdTggbm9uY2VbMTZdOworCV9fdTggTUlDWzhdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVVNCX1JFUV9TRVRfQ09OTkVDVElPTiBtb2RpZmllcyBvciByZXZva2VzIGEgY29ubmVjdGlvbiBjb250ZXh0IChDQykuCisgKiBBIENDIG1heSBhbHNvIGJlIHNldCB1cCB1c2luZyBub24td2lyZWxlc3Mgc2VjdXJlIGNoYW5uZWxzIChpbmNsdWRpbmcKKyAqIHdpcmVkIFVTQiEpLCBhbmQgc29tZSBkZXZpY2VzIG1heSBzdXBwb3J0IENDcyB3aXRoIG11bHRpcGxlIGhvc3RzLgorICovCitzdHJ1Y3QgdXNiX2Nvbm5lY3Rpb25fY29udGV4dCB7CisJX191OCBDSElEWzE2XTsJCS8qIHBlcnNpc3RlbnQgaG9zdCBpZCAqLworCV9fdTggQ0RJRFsxNl07CQkvKiBkZXZpY2UgaWQgKHVuaXF1ZSB3L2luIGhvc3QgY29udGV4dCkgKi8KKwlfX3U4IENLWzE2XTsJCS8qIGNvbm5lY3Rpb24ga2V5ICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBVU0IgMi4wIGRlZmluZXMgdGhyZWUgc3BlZWRzLCBoZXJlJ3MgaG93IExpbnV4IGlkZW50aWZpZXMgdGhlbSAqLworCitlbnVtIHVzYl9kZXZpY2Vfc3BlZWQgeworCVVTQl9TUEVFRF9VTktOT1dOID0gMCwJCQkvKiBlbnVtZXJhdGluZyAqLworCVVTQl9TUEVFRF9MT1csIFVTQl9TUEVFRF9GVUxMLAkJLyogdXNiIDEuMSAqLworCVVTQl9TUEVFRF9ISUdILAkJCQkvKiB1c2IgMi4wICovCisJVVNCX1NQRUVEX1dJUkVMRVNTLAkJCS8qIHdpcmVsZXNzICh1c2IgMi41KSAqLworCVVTQl9TUEVFRF9TVVBFUiwJCQkvKiB1c2IgMy4wICovCit9OworCitlbnVtIHVzYl9kZXZpY2Vfc3RhdGUgeworCS8qIE5PVEFUVEFDSEVEIGlzbid0IGluIHRoZSBVU0Igc3BlYywgYW5kIHRoaXMgc3RhdGUgYWN0cworCSAqIHRoZSBzYW1lIGFzIEFUVEFDSEVEIC4uLiBidXQgaXQncyBjbGVhcmVyIHRoaXMgd2F5LgorCSAqLworCVVTQl9TVEFURV9OT1RBVFRBQ0hFRCA9IDAsCisKKwkvKiBjaGFwdGVyIDkgYW5kIGF1dGhlbnRpY2F0aW9uICh3aXJlbGVzcykgZGV2aWNlIHN0YXRlcyAqLworCVVTQl9TVEFURV9BVFRBQ0hFRCwKKwlVU0JfU1RBVEVfUE9XRVJFRCwJCQkvKiB3aXJlZCAqLworCVVTQl9TVEFURV9SRUNPTk5FQ1RJTkcsCQkJLyogYXV0aCAqLworCVVTQl9TVEFURV9VTkFVVEhFTlRJQ0FURUQsCQkvKiBhdXRoICovCisJVVNCX1NUQVRFX0RFRkFVTFQsCQkJLyogbGltaXRlZCBmdW5jdGlvbiAqLworCVVTQl9TVEFURV9BRERSRVNTLAorCVVTQl9TVEFURV9DT05GSUdVUkVELAkJCS8qIG1vc3QgZnVuY3Rpb25zICovCisKKwlVU0JfU1RBVEVfU1VTUEVOREVECisKKwkvKiBOT1RFOiAgdGhlcmUgYXJlIGFjdHVhbGx5IGZvdXIgZGlmZmVyZW50IFNVU1BFTkRFRAorCSAqIHN0YXRlcywgcmV0dXJuaW5nIHRvIFBPV0VSRUQsIERFRkFVTFQsIEFERFJFU1MsIG9yCisJICogQ09ORklHVVJFRCByZXNwZWN0aXZlbHkgd2hlbiBTT0YgdG9rZW5zIGZsb3cgYWdhaW4uCisJICogQXQgdGhpcyBsZXZlbCB0aGVyZSdzIG5vIGRpZmZlcmVuY2UgYmV0d2VlbiBMMSBhbmQgTDIKKwkgKiBzdXNwZW5kIHN0YXRlcy4gIChMMiBiZWluZyBvcmlnaW5hbCBVU0IgMS4xIHN1c3BlbmQuKQorCSAqLworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEFzIHBlciBVU0IgY29tcGxpYW5jZSB1cGRhdGUsIGEgZGV2aWNlIHRoYXQgaXMgYWN0aXZlbHkgZHJhd2luZworICogbW9yZSB0aGFuIDEwMG1BIGZyb20gVVNCIG11c3QgcmVwb3J0IGl0c2VsZiBhcyBidXMtcG93ZXJlZCBpbgorICogdGhlIEdldFN0YXR1cyhERVZJQ0UpIGNhbGwuCisgKiBodHRwOi8vY29tcGxpYW5jZS51c2Iub3JnL2luZGV4LmFzcD9VcGRhdGVGaWxlPUVsZWN0cmljYWwmRm9ybWF0PVN0YW5kYXJkIzM0CisgKi8KKyNkZWZpbmUgVVNCX1NFTEZfUE9XRVJfVkJVU19NQVhfRFJBVwkJMTAwCisKKyNlbmRpZiAvKiBfX0xJTlVYX1VTQl9DSDlfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3VzYi9nX3ByaW50ZXIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC91c2IvZ19wcmludGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE3OGZkZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC91c2IvZ19wcmludGVyLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIGdfcHJpbnRlci5oIC0tIEhlYWRlciBmaWxlIGZvciBVU0IgUHJpbnRlciBnYWRnZXQgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IENyYWlnIFcuIE5hZGxlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaWZuZGVmIF9fTElOVVhfVVNCX0dfUFJJTlRFUl9ICisjZGVmaW5lIF9fTElOVVhfVVNCX0dfUFJJTlRFUl9ICisKKyNkZWZpbmUgUFJJTlRFUl9OT1RfRVJST1IJMHgwOAorI2RlZmluZSBQUklOVEVSX1NFTEVDVEVECTB4MTAKKyNkZWZpbmUgUFJJTlRFUl9QQVBFUl9FTVBUWQkweDIwCisKKy8qIFRoZSAnZycgY29kZSBpcyBhbHNvIHVzZWQgYnkgZ2FkZ2V0ZnMgaW9jdGwgcmVxdWVzdHMuCisgKiBEb24ndCBhZGQgYW55IGNvbGxpZGluZyBjb2RlcyB0byBlaXRoZXIgZHJpdmVyLCBhbmQga2VlcAorICogdGhlbSBpbiB1bmlxdWUgcmFuZ2VzIChzaXplIDB4MjAgZm9yIG5vdykuCisgKi8KKyNkZWZpbmUgR0FER0VUX0dFVF9QUklOVEVSX1NUQVRVUwlfSU9SKCdnJywgMHgyMSwgdW5zaWduZWQgY2hhcikKKyNkZWZpbmUgR0FER0VUX1NFVF9QUklOVEVSX1NUQVRVUwlfSU9XUignZycsIDB4MjIsIHVuc2lnbmVkIGNoYXIpCisKKyNlbmRpZiAvKiBfX0xJTlVYX1VTQl9HX1BSSU5URVJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3VzYi9nYWRnZXRmcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3VzYi9nYWRnZXRmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYjEyZTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdXNiL2dhZGdldGZzLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIEZpbGVzeXN0ZW0gYmFzZWQgdXNlci1tb2RlIEFQSSB0byBVU0IgR2FkZ2V0IGNvbnRyb2xsZXIgaGFyZHdhcmUKKyAqCisgKiBPdGhlciB0aGFuIGVwMCBvcGVyYXRpb25zLCBtb3N0IHRoaW5ncyBhcmUgZG9uZSBieSByZWFkKCkgYW5kIHdyaXRlKCkKKyAqIG9uIGVuZHBvaW50IGZpbGVzIGZvdW5kIGluIG9uZSBkaXJlY3RvcnkuICBUaGV5IGFyZSBjb25maWd1cmVkIGJ5CisgKiB3cml0aW5nIGRlc2NyaXB0b3JzLCBhbmQgdGhlbiBtYXkgYmUgdXNlZCBmb3Igbm9ybWFsIHN0cmVhbSBzdHlsZQorICogaS9vIHJlcXVlc3RzLiAgV2hlbiBlcDAgaXMgY29uZmlndXJlZCwgdGhlIGRldmljZSBjYW4gZW51bWVyYXRlOworICogd2hlbiBpdCdzIGNsb3NlZCwgdGhlIGRldmljZSBkaXNjb25uZWN0cyBmcm9tIHVzYi4gIE9wZXJhdGlvbnMgb24KKyAqIGVwMCByZXF1aXJlIGlvY3RsKCkgb3BlcmF0aW9ucy4KKyAqCisgKiBDb25maWd1cmF0aW9uIGFuZCBkZXZpY2UgZGVzY3JpcHRvcnMgZ2V0IHdyaXR0ZW4gdG8gL2Rldi9nYWRnZXQvJENISVAsCisgKiB3aGljaCBtYXkgdGhlbiBiZSB1c2VkIHRvIHJlYWQgdXNiX2dhZGdldGZzX2V2ZW50IHN0cnVjdHMuICBUaGUgZHJpdmVyCisgKiBtYXkgYWN0aXZhdGUgZW5kcG9pbnRzIGFzIGl0IGhhbmRsZXMgU0VUX0NPTkZJR1VSQVRJT04gc2V0dXAgZXZlbnRzLAorICogb3IgZWFybGllcjsgd3JpdGluZyBlbmRwb2ludCBkZXNjcmlwdG9ycyB0byAvZGV2L2dhZGdldC8kRU5EUE9JTlQKKyAqIHRoZW4gcGVyZm9ybWluZyBkYXRhIHRyYW5zZmVycyBieSByZWFkaW5nIG9yIHdyaXRpbmcuCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1VTQl9HQURHRVRGU19ICisjZGVmaW5lIF9fTElOVVhfVVNCX0dBREdFVEZTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KKworLyoKKyAqIEV2ZW50cyBhcmUgZGVsaXZlcmVkIG9uIHRoZSBlcDAgZmlsZSBkZXNjcmlwdG9yLCB3aGVuIHRoZSB1c2VyIG1vZGUgZHJpdmVyCisgKiByZWFkcyBmcm9tIHRoaXMgZmlsZSBkZXNjcmlwdG9yIGFmdGVyIHdyaXRpbmcgdGhlIGRlc2NyaXB0b3JzLiAgRG9uJ3QKKyAqIHN0b3AgcG9sbGluZyB0aGlzIGRlc2NyaXB0b3IuCisgKi8KKworZW51bSB1c2JfZ2FkZ2V0ZnNfZXZlbnRfdHlwZSB7CisJR0FER0VURlNfTk9QID0gMCwKKworCUdBREdFVEZTX0NPTk5FQ1QsCisJR0FER0VURlNfRElTQ09OTkVDVCwKKwlHQURHRVRGU19TRVRVUCwKKwlHQURHRVRGU19TVVNQRU5ELAorCS8qIGFuZCBsaWtlbHkgbW9yZSAhICovCit9OworCisvKiBOT1RFOiAgdGhpcyBzdHJ1Y3R1cmUgbXVzdCBzdGF5IHRoZSBzYW1lIHNpemUgYW5kIGxheW91dCBvbgorICogYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBrZXJuZWxzLgorICovCitzdHJ1Y3QgdXNiX2dhZGdldGZzX2V2ZW50IHsKKwl1bmlvbiB7CisJCS8qIE5PUCwgRElTQ09OTkVDVCwgU1VTUEVORDogbm90aGluZworCQkgKiAuLi4gc29tZSBoYXJkd2FyZSBjYW4ndCByZXBvcnQgZGlzY29ubmVjdGlvbgorCQkgKi8KKworCQkvKiBDT05ORUNUOiBqdXN0IHRoZSBzcGVlZCAqLworCQllbnVtIHVzYl9kZXZpY2Vfc3BlZWQJc3BlZWQ7CisKKwkJLyogU0VUVVA6IHBhY2tldDsgREFUQSBwaGFzZSBpL28gcHJlY2VkZXMgbmV4dCBldmVudAorCQkgKihzZXR1cC5ibVJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikgZmxhZ3MgZGlyZWN0aW9uCisJCSAqIC4uLiBpbmNsdWRlcyBTRVRfQ09ORklHVVJBVElPTiwgU0VUX0lOVEVSRkFDRQorCQkgKi8KKwkJc3RydWN0IHVzYl9jdHJscmVxdWVzdAlzZXR1cDsKKwl9IHU7CisJZW51bSB1c2JfZ2FkZ2V0ZnNfZXZlbnRfdHlwZQl0eXBlOworfTsKKworCisvKiBUaGUgJ2cnIGNvZGUgaXMgYWxzbyB1c2VkIGJ5IHByaW50ZXIgZ2FkZ2V0IGlvY3RsIHJlcXVlc3RzLgorICogRG9uJ3QgYWRkIGFueSBjb2xsaWRpbmcgY29kZXMgdG8gZWl0aGVyIGRyaXZlciwgYW5kIGtlZXAKKyAqIHRoZW0gaW4gdW5pcXVlIHJhbmdlcyAoc2l6ZSAweDIwIGZvciBub3cpLgorICovCisKKy8qIGVuZHBvaW50IGlvY3RscyAqLworCisvKiBJTiB0cmFuc2ZlcnMgbWF5IGJlIHJlcG9ydGVkIHRvIHRoZSBnYWRnZXQgZHJpdmVyIGFzIGNvbXBsZXRlCisgKgl3aGVuIHRoZSBmaWZvIGlzIGxvYWRlZCwgYmVmb3JlIHRoZSBob3N0IHJlYWRzIHRoZSBkYXRhOworICogT1VUIHRyYW5zZmVycyBtYXkgYmUgcmVwb3J0ZWQgdG8gdGhlIGhvc3QncyAiY2xpZW50IiBkcml2ZXIgYXMKKyAqCWNvbXBsZXRlIHdoZW4gdGhleSdyZSBzaXR0aW5nIGluIHRoZSBGSUZPIHVucmVhZC4KKyAqIFRISVMgcmV0dXJucyBob3cgbWFueSBieXRlcyBhcmUgInVuY2xhaW1lZCIgaW4gdGhlIGVuZHBvaW50IGZpZm8KKyAqIChuZWVkZWQgZm9yIHByZWNpc2UgZmF1bHQgaGFuZGxpbmcsIHdoZW4gdGhlIGhhcmR3YXJlIGFsbG93cyBpdCkKKyAqLworI2RlZmluZQlHQURHRVRGU19GSUZPX1NUQVRVUwlfSU8oJ2cnLCAxKQorCisvKiBkaXNjYXJkcyBhbnkgdW5jbGFpbWVkIGRhdGEgaW4gdGhlIGZpZm8uICovCisjZGVmaW5lCUdBREdFVEZTX0ZJRk9fRkxVU0gJX0lPKCdnJywgMikKKworLyogcmVzZXRzIGVuZHBvaW50IGhhbHQrdG9nZ2xlOyB1c2VkIHRvIGltcGxlbWVudCBzZXRfaW50ZXJmYWNlLgorICogc29tZSBoYXJkd2FyZSAobGlrZSBweGEyeHgpIGNhbid0IHN1cHBvcnQgdGhpcy4KKyAqLworI2RlZmluZQlHQURHRVRGU19DTEVBUl9IQUxUCV9JTygnZycsIDMpCisKKyNlbmRpZiAvKiBfX0xJTlVYX1VTQl9HQURHRVRGU19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdXNiL21pZGkuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC91c2IvbWlkaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMTA0MDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdXNiL21pZGkuaApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIDxsaW51eC91c2IvbWlkaS5oPiAtLSBVU0IgTUlESSBkZWZpbml0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGh1bXRyb25pY3MgUHR5IEx0ZC4KKyAqIERldmVsb3BlZCBmb3IgVGh1bXRyb25pY3MgYnkgR3JleSBJbm5vdmF0aW9uCisgKiBCZW4gV2lsbGlhbXNvbiA8YmVuLndpbGxpYW1zb25AZ3JleWlubm92YXRpb24uY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgZmlsZSBob2xkcyBVU0IgY29uc3RhbnRzIGFuZCBzdHJ1Y3R1cmVzIGRlZmluZWQKKyAqIGJ5IHRoZSBVU0IgRGV2aWNlIENsYXNzIERlZmluaXRpb24gZm9yIE1JREkgRGV2aWNlcy4KKyAqIENvbW1lbnRzIGJlbG93IHJlZmVyZW5jZSByZWxldmFudCBzZWN0aW9ucyBvZiB0aGF0IGRvY3VtZW50OgorICoKKyAqIGh0dHA6Ly93d3cudXNiLm9yZy9kZXZlbG9wZXJzL2RldmNsYXNzX2RvY3MvbWlkaTEwLnBkZgorICovCisKKyNpZm5kZWYgX19MSU5VWF9VU0JfTUlESV9ICisjZGVmaW5lIF9fTElOVVhfVVNCX01JRElfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogQS4xICBNUyBDbGFzcy1TcGVjaWZpYyBJbnRlcmZhY2UgRGVzY3JpcHRvciBTdWJ0eXBlcyAqLworI2RlZmluZSBVU0JfTVNfSEVBREVSCQkweDAxCisjZGVmaW5lIFVTQl9NU19NSURJX0lOX0pBQ0sJMHgwMgorI2RlZmluZSBVU0JfTVNfTUlESV9PVVRfSkFDSwkweDAzCisjZGVmaW5lIFVTQl9NU19FTEVNRU5UCQkweDA0CisKKy8qIEEuMiAgTVMgQ2xhc3MtU3BlY2lmaWMgRW5kcG9pbnQgRGVzY3JpcHRvciBTdWJ0eXBlcyAqLworI2RlZmluZSBVU0JfTVNfR0VORVJBTAkJMHgwMQorCisvKiBBLjMgIE1TIE1JREkgSU4gYW5kIE9VVCBKYWNrIFR5cGVzICovCisjZGVmaW5lIFVTQl9NU19FTUJFRERFRAkJMHgwMQorI2RlZmluZSBVU0JfTVNfRVhURVJOQUwJCTB4MDIKKworLyogNi4xLjIuMSAgQ2xhc3MtU3BlY2lmaWMgTVMgSW50ZXJmYWNlIEhlYWRlciBEZXNjcmlwdG9yICovCitzdHJ1Y3QgdXNiX21zX2hlYWRlcl9kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CisJX19sZTE2IGJjZE1TQzsKKwlfX2xlMTYgd1RvdGFsTGVuZ3RoOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgVVNCX0RUX01TX0hFQURFUl9TSVpFCTcKKworLyogNi4xLjIuMiAgTUlESSBJTiBKYWNrIERlc2NyaXB0b3IgKi8KK3N0cnVjdCB1c2JfbWlkaV9pbl9qYWNrX2Rlc2NyaXB0b3IgeworCV9fdTggIGJMZW5ndGg7CisJX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJLyogVVNCX0RUX0NTX0lOVEVSRkFDRSAqLworCV9fdTggIGJEZXNjcmlwdG9yU3VidHlwZTsJLyogVVNCX01TX01JRElfSU5fSkFDSyAqLworCV9fdTggIGJKYWNrVHlwZTsJCS8qIFVTQl9NU19FTUJFRERFRC9FWFRFUk5BTCAqLworCV9fdTggIGJKYWNrSUQ7CisJX191OCAgaUphY2s7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBVU0JfRFRfTUlESV9JTl9TSVpFCTYKKworc3RydWN0IHVzYl9taWRpX3NvdXJjZV9waW4geworCV9fdTggIGJhU291cmNlSUQ7CisJX191OCAgYmFTb3VyY2VQaW47Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogNi4xLjIuMyAgTUlESSBPVVQgSmFjayBEZXNjcmlwdG9yICovCitzdHJ1Y3QgdXNiX21pZGlfb3V0X2phY2tfZGVzY3JpcHRvciB7CisJX191OCAgYkxlbmd0aDsKKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CQkvKiBVU0JfRFRfQ1NfSU5URVJGQUNFICovCisJX191OCAgYkRlc2NyaXB0b3JTdWJ0eXBlOwkvKiBVU0JfTVNfTUlESV9PVVRfSkFDSyAqLworCV9fdTggIGJKYWNrVHlwZTsJCS8qIFVTQl9NU19FTUJFRERFRC9FWFRFUk5BTCAqLworCV9fdTggIGJKYWNrSUQ7CisJX191OCAgYk5ySW5wdXRQaW5zOwkJLyogcCAqLworCXN0cnVjdCB1c2JfbWlkaV9zb3VyY2VfcGluIHBpbnNbXTsgLyogW3BdICovCisJLypfX3U4ICBpSmFjazsgIC0tIG9tbWl0dGVkIGR1ZSB0byB2YXJpYWJsZS1zaXplZCBwaW5zW10gKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIFVTQl9EVF9NSURJX09VVF9TSVpFKHApCSg3ICsgMiAqIChwKSkKKworLyogQXMgYWJvdmUsIGJ1dCBtb3JlIHVzZWZ1bCBmb3IgZGVmaW5pbmcgeW91ciBvd24gZGVzY3JpcHRvcnM6ICovCisjZGVmaW5lIERFQ0xBUkVfVVNCX01JRElfT1VUX0pBQ0tfREVTQ1JJUFRPUihwKQkJCVwKK3N0cnVjdCB1c2JfbWlkaV9vdXRfamFja19kZXNjcmlwdG9yXyMjcCB7CQkJXAorCV9fdTggIGJMZW5ndGg7CQkJCQkJXAorCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsJCQkJCVwKKwlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CQkJCVwKKwlfX3U4ICBiSmFja1R5cGU7CQkJCQlcCisJX191OCAgYkphY2tJRDsJCQkJCQlcCisJX191OCAgYk5ySW5wdXRQaW5zOwkJCQkJXAorCXN0cnVjdCB1c2JfbWlkaV9zb3VyY2VfcGluIHBpbnNbcF07CQkJXAorCV9fdTggIGlKYWNrOwkJCQkJCVwKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpCisKKy8qIDYuMi4yICBDbGFzcy1TcGVjaWZpYyBNUyBCdWxrIERhdGEgRW5kcG9pbnQgRGVzY3JpcHRvciAqLworc3RydWN0IHVzYl9tc19lbmRwb2ludF9kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOwkJCS8qIDQrbiAqLworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsJCS8qIFVTQl9EVF9DU19FTkRQT0lOVCAqLworCV9fdTggIGJEZXNjcmlwdG9yU3VidHlwZTsJLyogVVNCX01TX0dFTkVSQUwgKi8KKwlfX3U4ICBiTnVtRW1iTUlESUphY2s7CQkvKiBuICovCisJX191OCAgYmFBc3NvY0phY2tJRFtdOwkJLyogW25dICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBVU0JfRFRfTVNfRU5EUE9JTlRfU0laRShuKQkoNCArIChuKSkKKworLyogQXMgYWJvdmUsIGJ1dCBtb3JlIHVzZWZ1bCBmb3IgZGVmaW5pbmcgeW91ciBvd24gZGVzY3JpcHRvcnM6ICovCisjZGVmaW5lIERFQ0xBUkVfVVNCX01TX0VORFBPSU5UX0RFU0NSSVBUT1IobikJCQlcCitzdHJ1Y3QgdXNiX21zX2VuZHBvaW50X2Rlc2NyaXB0b3JfIyNuIHsJCQkJXAorCV9fdTggIGJMZW5ndGg7CQkJCQkJXAorCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsJCQkJCVwKKwlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CQkJCVwKKwlfX3U4ICBiTnVtRW1iTUlESUphY2s7CQkJCQlcCisJX191OCAgYmFBc3NvY0phY2tJRFtuXTsJCQkJCVwKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpCisKKyNlbmRpZiAvKiBfX0xJTlVYX1VTQl9NSURJX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC91c2IvdG1jLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdXNiL3RtYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNDVhZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdXNiL3RtYy5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU3RlZmFuIEtvcHAsIEdlY2hpbmdlbiwgR2VybWFueQorICogQ29weXJpZ2h0IChDKSAyMDA4IE5vdmVsbCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CisgKgorICogVGhpcyBmaWxlIGhvbGRzIFVTQiBjb25zdGFudHMgZGVmaW5lZCBieSB0aGUgVVNCIERldmljZSBDbGFzcworICogRGVmaW5pdGlvbiBmb3IgVGVzdCBhbmQgTWVhc3VyZW1lbnQgZGV2aWNlcyBwdWJsaXNoZWQgYnkgdGhlIFVTQi1JRi4KKyAqCisgKiBJdCBhbHNvIGhhcyB0aGUgaW9jdGwgZGVmaW5pdGlvbnMgZm9yIHRoZSB1c2J0bWMga2VybmVsIGRyaXZlciB0aGF0CisgKiB1c2Vyc3BhY2UgbmVlZHMgdG8ga25vdyBhYm91dC4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfVVNCX1RNQ19ICisjZGVmaW5lIF9fTElOVVhfVVNCX1RNQ19ICisKKy8qIFVTQiBUTUMgc3RhdHVzIHZhbHVlcyAqLworI2RlZmluZSBVU0JUTUNfU1RBVFVTX1NVQ0NFU1MJCQkJMHgwMQorI2RlZmluZSBVU0JUTUNfU1RBVFVTX1BFTkRJTkcJCQkJMHgwMgorI2RlZmluZSBVU0JUTUNfU1RBVFVTX0ZBSUxFRAkJCQkweDgwCisjZGVmaW5lIFVTQlRNQ19TVEFUVVNfVFJBTlNGRVJfTk9UX0lOX1BST0dSRVNTCQkweDgxCisjZGVmaW5lIFVTQlRNQ19TVEFUVVNfU1BMSVRfTk9UX0lOX1BST0dSRVNTCQkweDgyCisjZGVmaW5lIFVTQlRNQ19TVEFUVVNfU1BMSVRfSU5fUFJPR1JFU1MJCQkweDgzCisKKy8qIFVTQiBUTUMgcmVxdWVzdHMgdmFsdWVzICovCisjZGVmaW5lIFVTQlRNQ19SRVFVRVNUX0lOSVRJQVRFX0FCT1JUX0JVTEtfT1VUCQkxCisjZGVmaW5lIFVTQlRNQ19SRVFVRVNUX0NIRUNLX0FCT1JUX0JVTEtfT1VUX1NUQVRVUwkyCisjZGVmaW5lIFVTQlRNQ19SRVFVRVNUX0lOSVRJQVRFX0FCT1JUX0JVTEtfSU4JCTMKKyNkZWZpbmUgVVNCVE1DX1JFUVVFU1RfQ0hFQ0tfQUJPUlRfQlVMS19JTl9TVEFUVVMJNAorI2RlZmluZSBVU0JUTUNfUkVRVUVTVF9JTklUSUFURV9DTEVBUgkJCTUKKyNkZWZpbmUgVVNCVE1DX1JFUVVFU1RfQ0hFQ0tfQ0xFQVJfU1RBVFVTCQk2CisjZGVmaW5lIFVTQlRNQ19SRVFVRVNUX0dFVF9DQVBBQklMSVRJRVMJCQk3CisjZGVmaW5lIFVTQlRNQ19SRVFVRVNUX0lORElDQVRPUl9QVUxTRQkJCTY0CisKKy8qIFJlcXVlc3QgdmFsdWVzIGZvciBVU0JUTUMgZHJpdmVyJ3MgaW9jdGwgZW50cnkgcG9pbnQgKi8KKyNkZWZpbmUgVVNCVE1DX0lPQ19OUgkJCTkxCisjZGVmaW5lIFVTQlRNQ19JT0NUTF9JTkRJQ0FUT1JfUFVMU0UJX0lPKFVTQlRNQ19JT0NfTlIsIDEpCisjZGVmaW5lIFVTQlRNQ19JT0NUTF9DTEVBUgkJX0lPKFVTQlRNQ19JT0NfTlIsIDIpCisjZGVmaW5lIFVTQlRNQ19JT0NUTF9BQk9SVF9CVUxLX09VVAlfSU8oVVNCVE1DX0lPQ19OUiwgMykKKyNkZWZpbmUgVVNCVE1DX0lPQ1RMX0FCT1JUX0JVTEtfSU4JX0lPKFVTQlRNQ19JT0NfTlIsIDQpCisjZGVmaW5lIFVTQlRNQ19JT0NUTF9DTEVBUl9PVVRfSEFMVAlfSU8oVVNCVE1DX0lPQ19OUiwgNikKKyNkZWZpbmUgVVNCVE1DX0lPQ1RMX0NMRUFSX0lOX0hBTFQJX0lPKFVTQlRNQ19JT0NfTlIsIDcpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3VzYmRldmljZV9mcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3VzYmRldmljZV9mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNWVjMDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdXNiZGV2aWNlX2ZzLmgKQEAgLTAsMCArMSwxNTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCXVzYmRldmljZV9mcy5oICAtLSAgVVNCIGRldmljZSBmaWxlIHN5c3RlbS4KKyAqCisgKglDb3B5cmlnaHQgKEMpIDIwMDAKKyAqICAgICAgICAgIFRob21hcyBTYWlsZXIgKHNhaWxlckBpZmUuZWUuZXRoei5jaCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICoJYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqCU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICoJWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKglGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiAgSGlzdG9yeToKKyAqICAgMC4xICAwNC4wMS4yMDAwICBDcmVhdGVkCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9MSU5VWF9VU0JERVZJQ0VfRlNfSAorI2RlZmluZSBfTElOVVhfVVNCREVWSUNFX0ZTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIHVzYmRldmZzIGlvY3RsIGNvZGVzICovCisKK3N0cnVjdCB1c2JkZXZmc19jdHJsdHJhbnNmZXIgeworCV9fdTggYlJlcXVlc3RUeXBlOworCV9fdTggYlJlcXVlc3Q7CisJX191MTYgd1ZhbHVlOworCV9fdTE2IHdJbmRleDsKKwlfX3UxNiB3TGVuZ3RoOworCV9fdTMyIHRpbWVvdXQ7ICAvKiBpbiBtaWxsaXNlY29uZHMgKi8KKyAJdm9pZCAqZGF0YTsKK307CisKK3N0cnVjdCB1c2JkZXZmc19idWxrdHJhbnNmZXIgeworCXVuc2lnbmVkIGludCBlcDsKKwl1bnNpZ25lZCBpbnQgbGVuOworCXVuc2lnbmVkIGludCB0aW1lb3V0OyAvKiBpbiBtaWxsaXNlY29uZHMgKi8KKwl2b2lkICpkYXRhOworfTsKKworc3RydWN0IHVzYmRldmZzX3NldGludGVyZmFjZSB7CisJdW5zaWduZWQgaW50IGludGVyZmFjZTsKKwl1bnNpZ25lZCBpbnQgYWx0c2V0dGluZzsKK307CisKK3N0cnVjdCB1c2JkZXZmc19kaXNjb25uZWN0c2lnbmFsIHsKKwl1bnNpZ25lZCBpbnQgc2lnbnI7CisJdm9pZCAqY29udGV4dDsKK307CisKKyNkZWZpbmUgVVNCREVWRlNfTUFYRFJJVkVSTkFNRSAyNTUKKworc3RydWN0IHVzYmRldmZzX2dldGRyaXZlciB7CisJdW5zaWduZWQgaW50IGludGVyZmFjZTsKKwljaGFyIGRyaXZlcltVU0JERVZGU19NQVhEUklWRVJOQU1FICsgMV07Cit9OworCitzdHJ1Y3QgdXNiZGV2ZnNfY29ubmVjdGluZm8geworCXVuc2lnbmVkIGludCBkZXZudW07CisJdW5zaWduZWQgY2hhciBzbG93OworfTsKKworI2RlZmluZSBVU0JERVZGU19VUkJfU0hPUlRfTk9UX09LCTB4MDEKKyNkZWZpbmUgVVNCREVWRlNfVVJCX0lTT19BU0FQCQkweDAyCisjZGVmaW5lIFVTQkRFVkZTX1VSQl9CVUxLX0NPTlRJTlVBVElPTgkweDA0CisjZGVmaW5lIFVTQkRFVkZTX1VSQl9OT19GU0JSCQkweDIwCisjZGVmaW5lIFVTQkRFVkZTX1VSQl9aRVJPX1BBQ0tFVAkweDQwCisjZGVmaW5lIFVTQkRFVkZTX1VSQl9OT19JTlRFUlJVUFQJMHg4MAorCisjZGVmaW5lIFVTQkRFVkZTX1VSQl9UWVBFX0lTTwkJICAgMAorI2RlZmluZSBVU0JERVZGU19VUkJfVFlQRV9JTlRFUlJVUFQJICAgMQorI2RlZmluZSBVU0JERVZGU19VUkJfVFlQRV9DT05UUk9MCSAgIDIKKyNkZWZpbmUgVVNCREVWRlNfVVJCX1RZUEVfQlVMSwkJICAgMworCitzdHJ1Y3QgdXNiZGV2ZnNfaXNvX3BhY2tldF9kZXNjIHsKKwl1bnNpZ25lZCBpbnQgbGVuZ3RoOworCXVuc2lnbmVkIGludCBhY3R1YWxfbGVuZ3RoOworCXVuc2lnbmVkIGludCBzdGF0dXM7Cit9OworCitzdHJ1Y3QgdXNiZGV2ZnNfdXJiIHsKKwl1bnNpZ25lZCBjaGFyIHR5cGU7CisJdW5zaWduZWQgY2hhciBlbmRwb2ludDsKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCBmbGFnczsKKwl2b2lkICpidWZmZXI7CisJaW50IGJ1ZmZlcl9sZW5ndGg7CisJaW50IGFjdHVhbF9sZW5ndGg7CisJaW50IHN0YXJ0X2ZyYW1lOworCWludCBudW1iZXJfb2ZfcGFja2V0czsKKwlpbnQgZXJyb3JfY291bnQ7CisJdW5zaWduZWQgaW50IHNpZ25yOwkvKiBzaWduYWwgdG8gYmUgc2VudCBvbiBjb21wbGV0aW9uLAorCQkJCSAgb3IgMCBpZiBub25lIHNob3VsZCBiZSBzZW50LiAqLworCXZvaWQgKnVzZXJjb250ZXh0OworCXN0cnVjdCB1c2JkZXZmc19pc29fcGFja2V0X2Rlc2MgaXNvX2ZyYW1lX2Rlc2NbMF07Cit9OworCisvKiBpb2N0bHMgZm9yIHRhbGtpbmcgZGlyZWN0bHkgdG8gZHJpdmVycyAqLworc3RydWN0IHVzYmRldmZzX2lvY3RsIHsKKwlpbnQJaWZubzsJCS8qIGludGVyZmFjZSAwLi5OIDsgbmVnYXRpdmUgbnVtYmVycyByZXNlcnZlZCAqLworCWludAlpb2N0bF9jb2RlOwkvKiBNVVNUIGVuY29kZSBzaXplICsgZGlyZWN0aW9uIG9mIGRhdGEgc28gdGhlCisJCQkJICogbWFjcm9zIGluIDxhc20vaW9jdGwuaD4gZ2l2ZSBjb3JyZWN0IHZhbHVlcyAqLworCXZvaWQgKmRhdGE7CS8qIHBhcmFtIGJ1ZmZlciAoaW4sIG9yIG91dCkgKi8KK307CisKKy8qIFlvdSBjYW4gZG8gbW9zdCB0aGluZ3Mgd2l0aCBodWJzIGp1c3QgdGhyb3VnaCBjb250cm9sIG1lc3NhZ2VzLAorICogZXhjZXB0IGZpbmQgb3V0IHdoYXQgZGV2aWNlIGNvbm5lY3RzIHRvIHdoYXQgcG9ydC4gKi8KK3N0cnVjdCB1c2JkZXZmc19odWJfcG9ydGluZm8geworCWNoYXIgbnBvcnRzOwkJLyogbnVtYmVyIG9mIGRvd25zdHJlYW0gcG9ydHMgaW4gdGhpcyBodWIgKi8KKwljaGFyIHBvcnQgWzEyN107CS8qIGUuZy4gcG9ydCAzIGNvbm5lY3RzIHRvIGRldmljZSAyNyAqLworfTsKKworCisjZGVmaW5lIFVTQkRFVkZTX0NPTlRST0wgICAgICAgICAgIF9JT1dSKCdVJywgMCwgc3RydWN0IHVzYmRldmZzX2N0cmx0cmFuc2ZlcikKKyNkZWZpbmUgVVNCREVWRlNfQ09OVFJPTDMyICAgICAgICAgICBfSU9XUignVScsIDAsIHN0cnVjdCB1c2JkZXZmc19jdHJsdHJhbnNmZXIzMikKKyNkZWZpbmUgVVNCREVWRlNfQlVMSyAgICAgICAgICAgICAgX0lPV1IoJ1UnLCAyLCBzdHJ1Y3QgdXNiZGV2ZnNfYnVsa3RyYW5zZmVyKQorI2RlZmluZSBVU0JERVZGU19CVUxLMzIgICAgICAgICAgICAgIF9JT1dSKCdVJywgMiwgc3RydWN0IHVzYmRldmZzX2J1bGt0cmFuc2ZlcjMyKQorI2RlZmluZSBVU0JERVZGU19SRVNFVEVQICAgICAgICAgICBfSU9SKCdVJywgMywgdW5zaWduZWQgaW50KQorI2RlZmluZSBVU0JERVZGU19TRVRJTlRFUkZBQ0UgICAgICBfSU9SKCdVJywgNCwgc3RydWN0IHVzYmRldmZzX3NldGludGVyZmFjZSkKKyNkZWZpbmUgVVNCREVWRlNfU0VUQ09ORklHVVJBVElPTiAgX0lPUignVScsIDUsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgVVNCREVWRlNfR0VURFJJVkVSICAgICAgICAgX0lPVygnVScsIDgsIHN0cnVjdCB1c2JkZXZmc19nZXRkcml2ZXIpCisjZGVmaW5lIFVTQkRFVkZTX1NVQk1JVFVSQiAgICAgICAgIF9JT1IoJ1UnLCAxMCwgc3RydWN0IHVzYmRldmZzX3VyYikKKyNkZWZpbmUgVVNCREVWRlNfU1VCTUlUVVJCMzIgICAgICAgX0lPUignVScsIDEwLCBzdHJ1Y3QgdXNiZGV2ZnNfdXJiMzIpCisjZGVmaW5lIFVTQkRFVkZTX0RJU0NBUkRVUkIgICAgICAgIF9JTygnVScsIDExKQorI2RlZmluZSBVU0JERVZGU19SRUFQVVJCICAgICAgICAgICBfSU9XKCdVJywgMTIsIHZvaWQgKikKKyNkZWZpbmUgVVNCREVWRlNfUkVBUFVSQjMyICAgICAgICAgX0lPVygnVScsIDEyLCBfX3UzMikKKyNkZWZpbmUgVVNCREVWRlNfUkVBUFVSQk5ERUxBWSAgICAgX0lPVygnVScsIDEzLCB2b2lkICopCisjZGVmaW5lIFVTQkRFVkZTX1JFQVBVUkJOREVMQVkzMiAgIF9JT1coJ1UnLCAxMywgX191MzIpCisjZGVmaW5lIFVTQkRFVkZTX0RJU0NTSUdOQUwgICAgICAgIF9JT1IoJ1UnLCAxNCwgc3RydWN0IHVzYmRldmZzX2Rpc2Nvbm5lY3RzaWduYWwpCisjZGVmaW5lIFVTQkRFVkZTX0RJU0NTSUdOQUwzMiAgICAgIF9JT1IoJ1UnLCAxNCwgc3RydWN0IHVzYmRldmZzX2Rpc2Nvbm5lY3RzaWduYWwzMikKKyNkZWZpbmUgVVNCREVWRlNfQ0xBSU1JTlRFUkZBQ0UgICAgX0lPUignVScsIDE1LCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIFVTQkRFVkZTX1JFTEVBU0VJTlRFUkZBQ0UgIF9JT1IoJ1UnLCAxNiwgdW5zaWduZWQgaW50KQorI2RlZmluZSBVU0JERVZGU19DT05ORUNUSU5GTyAgICAgICBfSU9XKCdVJywgMTcsIHN0cnVjdCB1c2JkZXZmc19jb25uZWN0aW5mbykKKyNkZWZpbmUgVVNCREVWRlNfSU9DVEwgICAgICAgICAgICAgX0lPV1IoJ1UnLCAxOCwgc3RydWN0IHVzYmRldmZzX2lvY3RsKQorI2RlZmluZSBVU0JERVZGU19JT0NUTDMyICAgICAgICAgICBfSU9XUignVScsIDE4LCBzdHJ1Y3QgdXNiZGV2ZnNfaW9jdGwzMikKKyNkZWZpbmUgVVNCREVWRlNfSFVCX1BPUlRJTkZPICAgICAgX0lPUignVScsIDE5LCBzdHJ1Y3QgdXNiZGV2ZnNfaHViX3BvcnRpbmZvKQorI2RlZmluZSBVU0JERVZGU19SRVNFVCAgICAgICAgICAgICBfSU8oJ1UnLCAyMCkKKyNkZWZpbmUgVVNCREVWRlNfQ0xFQVJfSEFMVCAgICAgICAgX0lPUignVScsIDIxLCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIFVTQkRFVkZTX0RJU0NPTk5FQ1QgICAgICAgIF9JTygnVScsIDIyKQorI2RlZmluZSBVU0JERVZGU19DT05ORUNUICAgICAgICAgICBfSU8oJ1UnLCAyMykKKyNkZWZpbmUgVVNCREVWRlNfQ0xBSU1fUE9SVCAgICAgICAgX0lPUignVScsIDI0LCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIFVTQkRFVkZTX1JFTEVBU0VfUE9SVCAgICAgIF9JT1IoJ1UnLCAyNSwgdW5zaWduZWQgaW50KQorI2VuZGlmIC8qIF9MSU5VWF9VU0JERVZJQ0VfRlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3V0aW1lLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdXRpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2RmNjczCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3V0aW1lLmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBfTElOVVhfVVRJTUVfSAorI2RlZmluZSBfTElOVVhfVVRJTUVfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHV0aW1idWYgeworCV9fa2VybmVsX3RpbWVfdCBhY3RpbWU7CisJX19rZXJuZWxfdGltZV90IG1vZHRpbWU7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC91dHNuYW1lLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdXRzbmFtZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzODdkNDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdXRzbmFtZS5oCkBAIC0wLDAgKzEsMzQgQEAKKyNpZm5kZWYgX0xJTlVYX1VUU05BTUVfSAorI2RlZmluZSBfTElOVVhfVVRTTkFNRV9ICisKKyNkZWZpbmUgX19PTERfVVRTX0xFTiA4CisKK3N0cnVjdCBvbGRvbGRfdXRzbmFtZSB7CisJY2hhciBzeXNuYW1lWzldOworCWNoYXIgbm9kZW5hbWVbOV07CisJY2hhciByZWxlYXNlWzldOworCWNoYXIgdmVyc2lvbls5XTsKKwljaGFyIG1hY2hpbmVbOV07Cit9OworCisjZGVmaW5lIF9fTkVXX1VUU19MRU4gNjQKKworc3RydWN0IG9sZF91dHNuYW1lIHsKKwljaGFyIHN5c25hbWVbNjVdOworCWNoYXIgbm9kZW5hbWVbNjVdOworCWNoYXIgcmVsZWFzZVs2NV07CisJY2hhciB2ZXJzaW9uWzY1XTsKKwljaGFyIG1hY2hpbmVbNjVdOworfTsKKworc3RydWN0IG5ld191dHNuYW1lIHsKKwljaGFyIHN5c25hbWVbX19ORVdfVVRTX0xFTiArIDFdOworCWNoYXIgbm9kZW5hbWVbX19ORVdfVVRTX0xFTiArIDFdOworCWNoYXIgcmVsZWFzZVtfX05FV19VVFNfTEVOICsgMV07CisJY2hhciB2ZXJzaW9uW19fTkVXX1VUU19MRU4gKyAxXTsKKwljaGFyIG1hY2hpbmVbX19ORVdfVVRTX0xFTiArIDFdOworCWNoYXIgZG9tYWlubmFtZVtfX05FV19VVFNfTEVOICsgMV07Cit9OworCisKKyNlbmRpZiAvKiBfTElOVVhfVVRTTkFNRV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdmVyc2lvbi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3ZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjRiMjU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3ZlcnNpb24uaApAQCAtMCwwICsxLDIgQEAKKyNkZWZpbmUgTElOVVhfVkVSU0lPTl9DT0RFIDEzMjY0NQorI2RlZmluZSBLRVJORUxfVkVSU0lPTihhLGIsYykgKCgoYSkgPDwgMTYpICsgKChiKSA8PCA4KSArIChjKSkKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC92ZXRoLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdmV0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNTRjMWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdmV0aC5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX19ORVRfVkVUSF9IXworI2RlZmluZSBfX05FVF9WRVRIX0hfCisKK2VudW0geworCVZFVEhfSU5GT19VTlNQRUMsCisJVkVUSF9JTkZPX1BFRVIsCisKKwlfX1ZFVEhfSU5GT19NQVgKKyNkZWZpbmUgVkVUSF9JTkZPX01BWAkoX19WRVRIX0lORk9fTUFYIC0gMSkKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3Zob3N0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdmhvc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjVhNDg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3Zob3N0LmgKQEAgLTAsMCArMSwxMzAgQEAKKyNpZm5kZWYgX0xJTlVYX1ZIT1NUX0gKKyNkZWZpbmUgX0xJTlVYX1ZIT1NUX0gKKy8qIFVzZXJzcGFjZSBpbnRlcmZhY2UgZm9yIGluLWtlcm5lbCB2aXJ0aW8gYWNjZWxlcmF0b3JzLiAqLworCisvKiB2aG9zdCBpcyB1c2VkIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHN5c3RlbSBjYWxscyBpbnZvbHZlZCBpbiB2aXJ0aW8uCisgKgorICogRXhpc3RpbmcgdmlydGlvIG5ldCBjb2RlIGlzIHVzZWQgaW4gdGhlIGd1ZXN0IHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICoKKyAqIFRoaXMgaGVhZGVyIGluY2x1ZGVzIGludGVyZmFjZSB1c2VkIGJ5IHVzZXJzcGFjZSBoeXBlcnZpc29yIGZvcgorICogZGV2aWNlIGNvbmZpZ3VyYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9fcmluZy5oPgorCitzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGUgeworCXVuc2lnbmVkIGludCBpbmRleDsKKwl1bnNpZ25lZCBpbnQgbnVtOworfTsKKworc3RydWN0IHZob3N0X3ZyaW5nX2ZpbGUgeworCXVuc2lnbmVkIGludCBpbmRleDsKKwlpbnQgZmQ7IC8qIFBhc3MgLTEgdG8gdW5iaW5kIGZyb20gZmlsZS4gKi8KKworfTsKKworc3RydWN0IHZob3N0X3ZyaW5nX2FkZHIgeworCXVuc2lnbmVkIGludCBpbmRleDsKKwkvKiBPcHRpb24gZmxhZ3MuICovCisJdW5zaWduZWQgaW50IGZsYWdzOworCS8qIEZsYWcgdmFsdWVzOiAqLworCS8qIFdoZXRoZXIgbG9nIGFkZHJlc3MgaXMgdmFsaWQuIElmIHNldCBlbmFibGVzIGxvZ2dpbmcuICovCisjZGVmaW5lIFZIT1NUX1ZSSU5HX0ZfTE9HIDAKKworCS8qIFN0YXJ0IG9mIGFycmF5IG9mIGRlc2NyaXB0b3JzICh2aXJ0dWFsbHkgY29udGlndW91cykgKi8KKwlfX3U2NCBkZXNjX3VzZXJfYWRkcjsKKwkvKiBVc2VkIHN0cnVjdHVyZSBhZGRyZXNzLiBNdXN0IGJlIDMyIGJpdCBhbGlnbmVkICovCisJX191NjQgdXNlZF91c2VyX2FkZHI7CisJLyogQXZhaWxhYmxlIHN0cnVjdHVyZSBhZGRyZXNzLiBNdXN0IGJlIDE2IGJpdCBhbGlnbmVkICovCisJX191NjQgYXZhaWxfdXNlcl9hZGRyOworCS8qIExvZ2dpbmcgc3VwcG9ydC4gKi8KKwkvKiBMb2cgd3JpdGVzIHRvIHVzZWQgc3RydWN0dXJlLCBhdCBvZmZzZXQgY2FsY3VsYXRlZCBmcm9tIHNwZWNpZmllZAorCSAqIGFkZHJlc3MuIEFkZHJlc3MgbXVzdCBiZSAzMiBiaXQgYWxpZ25lZC4gKi8KKwlfX3U2NCBsb2dfZ3Vlc3RfYWRkcjsKK307CisKK3N0cnVjdCB2aG9zdF9tZW1vcnlfcmVnaW9uIHsKKwlfX3U2NCBndWVzdF9waHlzX2FkZHI7CisJX191NjQgbWVtb3J5X3NpemU7IC8qIGJ5dGVzICovCisJX191NjQgdXNlcnNwYWNlX2FkZHI7CisJX191NjQgZmxhZ3NfcGFkZGluZzsgLyogTm8gZmxhZ3MgYXJlIGN1cnJlbnRseSBzcGVjaWZpZWQuICovCit9OworCisvKiBBbGwgcmVnaW9uIGFkZHJlc3NlcyBhbmQgc2l6ZXMgbXVzdCBiZSA0SyBhbGlnbmVkLiAqLworI2RlZmluZSBWSE9TVF9QQUdFX1NJWkUgMHgxMDAwCisKK3N0cnVjdCB2aG9zdF9tZW1vcnkgeworCV9fdTMyIG5yZWdpb25zOworCV9fdTMyIHBhZGRpbmc7CisJc3RydWN0IHZob3N0X21lbW9yeV9yZWdpb24gcmVnaW9uc1swXTsKK307CisKKy8qIGlvY3RscyAqLworCisjZGVmaW5lIFZIT1NUX1ZJUlRJTyAweEFGCisKKy8qIEZlYXR1cmVzIGJpdG1hc2sgZm9yIGZvcndhcmQgY29tcGF0aWJpbGl0eS4gIFRyYW5zcG9ydCBiaXRzIGFyZSB1c2VkIGZvcgorICogdmhvc3Qgc3BlY2lmaWMgZmVhdHVyZXMuICovCisjZGVmaW5lIFZIT1NUX0dFVF9GRUFUVVJFUwlfSU9SKFZIT1NUX1ZJUlRJTywgMHgwMCwgX191NjQpCisjZGVmaW5lIFZIT1NUX1NFVF9GRUFUVVJFUwlfSU9XKFZIT1NUX1ZJUlRJTywgMHgwMCwgX191NjQpCisKKy8qIFNldCBjdXJyZW50IHByb2Nlc3MgYXMgdGhlIChleGNsdXNpdmUpIG93bmVyIG9mIHRoaXMgZmlsZSBkZXNjcmlwdG9yLiAgVGhpcworICogbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciB2aG9zdCBjb21tYW5kLiAgRnVydGhlciBjYWxscyB0bworICogVkhPU1RfT1dORVJfU0VUIGZhaWwgdW50aWwgVkhPU1RfT1dORVJfUkVTRVQgaXMgY2FsbGVkLiAqLworI2RlZmluZSBWSE9TVF9TRVRfT1dORVIgX0lPKFZIT1NUX1ZJUlRJTywgMHgwMSkKKy8qIEdpdmUgdXAgb3duZXJzaGlwLCBhbmQgcmVzZXQgdGhlIGRldmljZSB0byBkZWZhdWx0IHZhbHVlcy4KKyAqIEFsbG93cyBzdWJzZXF1ZW50IGNhbGwgdG8gVkhPU1RfT1dORVJfU0VUIHRvIHN1Y2NlZWQuICovCisjZGVmaW5lIFZIT1NUX1JFU0VUX09XTkVSIF9JTyhWSE9TVF9WSVJUSU8sIDB4MDIpCisKKy8qIFNldCB1cC9tb2RpZnkgbWVtb3J5IGxheW91dCAqLworI2RlZmluZSBWSE9TVF9TRVRfTUVNX1RBQkxFCV9JT1coVkhPU1RfVklSVElPLCAweDAzLCBzdHJ1Y3Qgdmhvc3RfbWVtb3J5KQorCisvKiBXcml0ZSBsb2dnaW5nIHNldHVwLiAqLworLyogTWVtb3J5IHdyaXRlcyBjYW4gb3B0aW9uYWxseSBiZSBsb2dnZWQgYnkgc2V0dGluZyBiaXQgYXQgYW4gb2Zmc2V0CisgKiAoY2FsY3VsYXRlZCBmcm9tIHRoZSBwaHlzaWNhbCBhZGRyZXNzKSBmcm9tIHNwZWNpZmllZCBsb2cgYmFzZS4KKyAqIFRoZSBiaXQgaXMgc2V0IHVzaW5nIGFuIGF0b21pYyAzMiBiaXQgb3BlcmF0aW9uLiAqLworLyogU2V0IGJhc2UgYWRkcmVzcyBmb3IgbG9nZ2luZy4gKi8KKyNkZWZpbmUgVkhPU1RfU0VUX0xPR19CQVNFIF9JT1coVkhPU1RfVklSVElPLCAweDA0LCBfX3U2NCkKKy8qIFNwZWNpZnkgYW4gZXZlbnRmZCBmaWxlIGRlc2NyaXB0b3IgdG8gc2lnbmFsIG9uIGxvZyB3cml0ZS4gKi8KKyNkZWZpbmUgVkhPU1RfU0VUX0xPR19GRCBfSU9XKFZIT1NUX1ZJUlRJTywgMHgwNywgaW50KQorCisvKiBSaW5nIHNldHVwLiAqLworLyogU2V0IG51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiByaW5nLiBUaGlzIHBhcmFtZXRlciBjYW4gbm90CisgKiBiZSBtb2RpZmllZCB3aGlsZSByaW5nIGlzIHJ1bm5pbmcgKGJvdW5kIHRvIGEgZGV2aWNlKS4gKi8KKyNkZWZpbmUgVkhPU1RfU0VUX1ZSSU5HX05VTSBfSU9XKFZIT1NUX1ZJUlRJTywgMHgxMCwgc3RydWN0IHZob3N0X3ZyaW5nX3N0YXRlKQorLyogU2V0IGFkZHJlc3NlcyBmb3IgdGhlIHJpbmcuICovCisjZGVmaW5lIFZIT1NUX1NFVF9WUklOR19BRERSIF9JT1coVkhPU1RfVklSVElPLCAweDExLCBzdHJ1Y3Qgdmhvc3RfdnJpbmdfYWRkcikKKy8qIEJhc2UgdmFsdWUgd2hlcmUgcXVldWUgbG9va3MgZm9yIGF2YWlsYWJsZSBkZXNjcmlwdG9ycyAqLworI2RlZmluZSBWSE9TVF9TRVRfVlJJTkdfQkFTRSBfSU9XKFZIT1NUX1ZJUlRJTywgMHgxMiwgc3RydWN0IHZob3N0X3ZyaW5nX3N0YXRlKQorLyogR2V0IGFjY2Vzc29yOiByZWFkcyBpbmRleCwgd3JpdGVzIHZhbHVlIGluIG51bSAqLworI2RlZmluZSBWSE9TVF9HRVRfVlJJTkdfQkFTRSBfSU9XUihWSE9TVF9WSVJUSU8sIDB4MTIsIHN0cnVjdCB2aG9zdF92cmluZ19zdGF0ZSkKKworLyogVGhlIGZvbGxvd2luZyBpb2N0bHMgdXNlIGV2ZW50ZmQgZmlsZSBkZXNjcmlwdG9ycyB0byBzaWduYWwgYW5kIHBvbGwKKyAqIGZvciBldmVudHMuICovCisKKy8qIFNldCBldmVudGZkIHRvIHBvbGwgZm9yIGFkZGVkIGJ1ZmZlcnMgKi8KKyNkZWZpbmUgVkhPU1RfU0VUX1ZSSU5HX0tJQ0sgX0lPVyhWSE9TVF9WSVJUSU8sIDB4MjAsIHN0cnVjdCB2aG9zdF92cmluZ19maWxlKQorLyogU2V0IGV2ZW50ZmQgdG8gc2lnbmFsIHdoZW4gYnVmZmVycyBoYXZlIGJlZWQgdXNlZCAqLworI2RlZmluZSBWSE9TVF9TRVRfVlJJTkdfQ0FMTCBfSU9XKFZIT1NUX1ZJUlRJTywgMHgyMSwgc3RydWN0IHZob3N0X3ZyaW5nX2ZpbGUpCisvKiBTZXQgZXZlbnRmZCB0byBzaWduYWwgYW4gZXJyb3IgKi8KKyNkZWZpbmUgVkhPU1RfU0VUX1ZSSU5HX0VSUiBfSU9XKFZIT1NUX1ZJUlRJTywgMHgyMiwgc3RydWN0IHZob3N0X3ZyaW5nX2ZpbGUpCisKKy8qIFZIT1NUX05FVCBzcGVjaWZpYyBkZWZpbmVzICovCisKKy8qIEF0dGFjaCB2aXJ0aW8gbmV0IHJpbmcgdG8gYSByYXcgc29ja2V0LCBvciB0YXAgZGV2aWNlLgorICogVGhlIHNvY2tldCBtdXN0IGJlIGFscmVhZHkgYm91bmQgdG8gYW4gZXRoZXJuZXQgZGV2aWNlLCB0aGlzIGRldmljZSB3aWxsIGJlCisgKiB1c2VkIGZvciB0cmFuc21pdC4gIFBhc3MgZmQgLTEgdG8gdW5iaW5kIGZyb20gdGhlIHNvY2tldCBhbmQgdGhlIHRyYW5zbWl0CisgKiBkZXZpY2UuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHN0b3AgdGhlIHJpbmcgKGUuZy4gZm9yIG1pZ3JhdGlvbikuICovCisjZGVmaW5lIFZIT1NUX05FVF9TRVRfQkFDS0VORCBfSU9XKFZIT1NUX1ZJUlRJTywgMHgzMCwgc3RydWN0IHZob3N0X3ZyaW5nX2ZpbGUpCisKKy8qIEZlYXR1cmUgYml0cyAqLworLyogTG9nIGFsbCB3cml0ZSBkZXNjcmlwdG9ycy4gQ2FuIGJlIGNoYW5nZWQgd2hpbGUgZGV2aWNlIGlzIGFjdGl2ZS4gKi8KKyNkZWZpbmUgVkhPU1RfRl9MT0dfQUxMIDI2CisvKiB2aG9zdC1uZXQgc2hvdWxkIGFkZCB2aXJ0aW9fbmV0X2hkciBmb3IgUlgsIGFuZCBzdHJpcCBmb3IgVFggcGFja2V0cy4gKi8KKyNkZWZpbmUgVkhPU1RfTkVUX0ZfVklSVElPX05FVF9IRFIgMjcKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdmlkZW9kZXYuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC92aWRlb2Rldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MWE1ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdmlkZW9kZXYuaApAQCAtMCwwICsxLDMyMCBAQAorLyoKKyAqCVZpZGVvIGZvciBMaW51eCB2ZXJzaW9uIDEgLSBPQlNPTEVURQorICoKKyAqCUhlYWRlciBmaWxlIGZvciB2NGwxIGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucywgZm9yCisgKglMaW51eCBrZXJuZWxzIDIuMi54IG9yIDIuNC54LgorICoKKyAqCVByb3ZpZGVzIGhlYWRlciBmb3IgbGVnYWN5IGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucworICoKKyAqCVNlZSBodHRwOi8vbGludXh0di5vcmcgZm9yIG1vcmUgaW5mbworICoKKyAqLworI2lmbmRlZiBfX0xJTlVYX1ZJREVPREVWX0gKKyNkZWZpbmUgX19MSU5VWF9WSURFT0RFVl9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisKKworI2RlZmluZSBWSURfVFlQRV9DQVBUVVJFCTEJLyogQ2FuIGNhcHR1cmUgKi8KKyNkZWZpbmUgVklEX1RZUEVfVFVORVIJCTIJLyogQ2FuIHR1bmUgKi8KKyNkZWZpbmUgVklEX1RZUEVfVEVMRVRFWFQJNAkvKiBEb2VzIHRlbGV0ZXh0ICovCisjZGVmaW5lIFZJRF9UWVBFX09WRVJMQVkJOAkvKiBPdmVybGF5IG9udG8gZnJhbWUgYnVmZmVyICovCisjZGVmaW5lIFZJRF9UWVBFX0NIUk9NQUtFWQkxNgkvKiBPdmVybGF5IGJ5IGNocm9tYWtleSAqLworI2RlZmluZSBWSURfVFlQRV9DTElQUElORwkzMgkvKiBDYW4gY2xpcCAqLworI2RlZmluZSBWSURfVFlQRV9GUkFNRVJBTQk2NAkvKiBVc2VzIHRoZSBmcmFtZSBidWZmZXIgbWVtb3J5ICovCisjZGVmaW5lIFZJRF9UWVBFX1NDQUxFUwkJMTI4CS8qIFNjYWxhYmxlICovCisjZGVmaW5lIFZJRF9UWVBFX01PTk9DSFJPTUUJMjU2CS8qIE1vbm9jaHJvbWUgb25seSAqLworI2RlZmluZSBWSURfVFlQRV9TVUJDQVBUVVJFCTUxMgkvKiBDYW4gY2FwdHVyZSBzdWJhcmVhcyBvZiB0aGUgaW1hZ2UgKi8KKyNkZWZpbmUgVklEX1RZUEVfTVBFR19ERUNPREVSCTEwMjQJLyogQ2FuIGRlY29kZSBNUEVHIHN0cmVhbXMgKi8KKyNkZWZpbmUgVklEX1RZUEVfTVBFR19FTkNPREVSCTIwNDgJLyogQ2FuIGVuY29kZSBNUEVHIHN0cmVhbXMgKi8KKyNkZWZpbmUgVklEX1RZUEVfTUpQRUdfREVDT0RFUgk0MDk2CS8qIENhbiBkZWNvZGUgTUpQRUcgc3RyZWFtcyAqLworI2RlZmluZSBWSURfVFlQRV9NSlBFR19FTkNPREVSCTgxOTIJLyogQ2FuIGVuY29kZSBNSlBFRyBzdHJlYW1zICovCisKK3N0cnVjdCB2aWRlb19jYXBhYmlsaXR5Cit7CisJY2hhciBuYW1lWzMyXTsKKwlpbnQgdHlwZTsKKwlpbnQgY2hhbm5lbHM7CS8qIE51bSBjaGFubmVscyAqLworCWludCBhdWRpb3M7CS8qIE51bSBhdWRpbyBkZXZpY2VzICovCisJaW50IG1heHdpZHRoOwkvKiBTdXBwb3J0ZWQgd2lkdGggKi8KKwlpbnQgbWF4aGVpZ2h0OwkvKiBBbmQgaGVpZ2h0ICovCisJaW50IG1pbndpZHRoOwkvKiBTdXBwb3J0ZWQgd2lkdGggKi8KKwlpbnQgbWluaGVpZ2h0OwkvKiBBbmQgaGVpZ2h0ICovCit9OworCisKK3N0cnVjdCB2aWRlb19jaGFubmVsCit7CisJaW50IGNoYW5uZWw7CisJY2hhciBuYW1lWzMyXTsKKwlpbnQgdHVuZXJzOworCV9fdTMyICBmbGFnczsKKyNkZWZpbmUgVklERU9fVkNfVFVORVIJCTEJLyogQ2hhbm5lbCBoYXMgYSB0dW5lciAqLworI2RlZmluZSBWSURFT19WQ19BVURJTwkJMgkvKiBDaGFubmVsIGhhcyBhdWRpbyAqLworCV9fdTE2ICB0eXBlOworI2RlZmluZSBWSURFT19UWVBFX1RWCQkxCisjZGVmaW5lIFZJREVPX1RZUEVfQ0FNRVJBCTIKKwlfX3UxNiBub3JtOwkJCS8qIE5vcm0gc2V0IGJ5IGNoYW5uZWwgKi8KK307CisKK3N0cnVjdCB2aWRlb190dW5lcgoreworCWludCB0dW5lcjsKKwljaGFyIG5hbWVbMzJdOworCXVuc2lnbmVkIGxvbmcgcmFuZ2Vsb3csIHJhbmdlaGlnaDsJLyogVHVuZXIgcmFuZ2UgKi8KKwlfX3UzMiBmbGFnczsKKyNkZWZpbmUgVklERU9fVFVORVJfUEFMCQkxCisjZGVmaW5lIFZJREVPX1RVTkVSX05UU0MJMgorI2RlZmluZSBWSURFT19UVU5FUl9TRUNBTQk0CisjZGVmaW5lIFZJREVPX1RVTkVSX0xPVwkJOAkvKiBVc2VzIEtIeiBub3QgTUh6ICovCisjZGVmaW5lIFZJREVPX1RVTkVSX05PUk0JMTYJLyogVHVuZXIgY2FuIHNldCBub3JtICovCisjZGVmaW5lIFZJREVPX1RVTkVSX1NURVJFT19PTgkxMjgJLyogVHVuZXIgaXMgc2VlaW5nIHN0ZXJlbyAqLworI2RlZmluZSBWSURFT19UVU5FUl9SRFNfT04gICAgICAyNTYgICAgIC8qIFR1bmVyIGlzIHNlZWluZyBhbiBSRFMgZGF0YXN0cmVhbSAqLworI2RlZmluZSBWSURFT19UVU5FUl9NQlNfT04gICAgICA1MTIgICAgIC8qIFR1bmVyIGlzIHNlZWluZyBhbiBNQlMgZGF0YXN0cmVhbSAqLworCV9fdTE2IG1vZGU7CQkJLyogUEFML05UU0MvU0VDQU0vT1RIRVIgKi8KKyNkZWZpbmUgVklERU9fTU9ERV9QQUwJCTAKKyNkZWZpbmUgVklERU9fTU9ERV9OVFNDCQkxCisjZGVmaW5lIFZJREVPX01PREVfU0VDQU0JMgorI2RlZmluZSBWSURFT19NT0RFX0FVVE8JCTMKKwlfX3UxNiBzaWduYWw7CQkJLyogU2lnbmFsIHN0cmVuZ3RoIDE2Yml0IHNjYWxlICovCit9OworCitzdHJ1Y3QgdmlkZW9fcGljdHVyZQoreworCV9fdTE2CWJyaWdodG5lc3M7CisJX191MTYJaHVlOworCV9fdTE2CWNvbG91cjsKKwlfX3UxNgljb250cmFzdDsKKwlfX3UxNgl3aGl0ZW5lc3M7CS8qIEJsYWNrIGFuZCB3aGl0ZSBvbmx5ICovCisJX191MTYJZGVwdGg7CQkvKiBDYXB0dXJlIGRlcHRoICovCisJX191MTYgICBwYWxldHRlOwkvKiBQYWxldHRlIGluIHVzZSAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX0dSRVkJMQkvKiBMaW5lYXIgZ3JleXNjYWxlICovCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfSEkyNDAJMgkvKiBIaWdoIDI0MCBjdWJlIChCVDg0OCkgKi8KKyNkZWZpbmUgVklERU9fUEFMRVRURV9SR0I1NjUJMwkvKiA1NjUgMTYgYml0IFJHQiAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX1JHQjI0CTQJLyogMjRiaXQgUkdCICovCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfUkdCMzIJNQkvKiAzMmJpdCBSR0IgKi8KKyNkZWZpbmUgVklERU9fUEFMRVRURV9SR0I1NTUJNgkvKiA1NTUgMTViaXQgUkdCICovCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfWVVWNDIyCTcJLyogWVVWNDIyIGNhcHR1cmUgKi8KKyNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVlWCTgKKyNkZWZpbmUgVklERU9fUEFMRVRURV9VWVZZCTkJLyogVGhlIGdyZWF0IHRoaW5nIGFib3V0IHN0YW5kYXJkcyBpcyAuLi4gKi8KKyNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MjAJMTAKKyNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MTEJMTEJLyogWVVWNDExIGNhcHR1cmUgKi8KKyNkZWZpbmUgVklERU9fUEFMRVRURV9SQVcJMTIJLyogUkFXIGNhcHR1cmUgKEJUODQ4KSAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX1lVVjQyMlAJMTMJLyogWVVWIDQ6MjoyIFBsYW5hciAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX1lVVjQxMVAJMTQJLyogWVVWIDQ6MToxIFBsYW5hciAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX1lVVjQyMFAJMTUJLyogWVVWIDQ6MjowIFBsYW5hciAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX1lVVjQxMFAJMTYJLyogWVVWIDQ6MTowIFBsYW5hciAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX1BMQU5BUgkxMwkvKiBzdGFydCBvZiBwbGFuYXIgZW50cmllcyAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX0NPTVBPTkVOVCA3CS8qIHN0YXJ0IG9mIGNvbXBvbmVudCBlbnRyaWVzICovCit9OworCitzdHJ1Y3QgdmlkZW9fYXVkaW8KK3sKKwlpbnQJYXVkaW87CQkvKiBBdWRpbyBjaGFubmVsICovCisJX191MTYJdm9sdW1lOwkJLyogSWYgc2V0dGFibGUgKi8KKwlfX3UxNgliYXNzLCB0cmVibGU7CisJX191MzIJZmxhZ3M7CisjZGVmaW5lIFZJREVPX0FVRElPX01VVEUJMQorI2RlZmluZSBWSURFT19BVURJT19NVVRBQkxFCTIKKyNkZWZpbmUgVklERU9fQVVESU9fVk9MVU1FCTQKKyNkZWZpbmUgVklERU9fQVVESU9fQkFTUwk4CisjZGVmaW5lIFZJREVPX0FVRElPX1RSRUJMRQkxNgorI2RlZmluZSBWSURFT19BVURJT19CQUxBTkNFCTMyCisJY2hhciAgICBuYW1lWzE2XTsKKyNkZWZpbmUgVklERU9fU09VTkRfTU9OTwkxCisjZGVmaW5lIFZJREVPX1NPVU5EX1NURVJFTwkyCisjZGVmaW5lIFZJREVPX1NPVU5EX0xBTkcxCTQKKyNkZWZpbmUgVklERU9fU09VTkRfTEFORzIJOAorCV9fdTE2ICAgbW9kZTsKKwlfX3UxNgliYWxhbmNlOwkvKiBTdGVyZW8gYmFsYW5jZSAqLworCV9fdTE2CXN0ZXA7CQkvKiBTdGVwIGFjdHVhbCB2b2x1bWUgdXNlcyAqLworfTsKKworc3RydWN0IHZpZGVvX2NsaXAKK3sKKwlfX3MzMgl4LHk7CisJX19zMzIJd2lkdGgsIGhlaWdodDsKKwlzdHJ1Y3QJdmlkZW9fY2xpcCAqbmV4dDsJLyogRm9yIHVzZXIgdXNlL2RyaXZlciB1c2Ugb25seSAqLworfTsKKworc3RydWN0IHZpZGVvX3dpbmRvdworeworCV9fdTMyCXgseTsJCQkvKiBQb3NpdGlvbiBvZiB3aW5kb3cgKi8KKwlfX3UzMgl3aWR0aCxoZWlnaHQ7CQkvKiBJdHMgc2l6ZSAqLworCV9fdTMyCWNocm9tYWtleTsKKwlfX3UzMglmbGFnczsKKwlzdHJ1Y3QJdmlkZW9fY2xpcCAqY2xpcHM7CS8qIFNldCBvbmx5ICovCisJaW50CWNsaXBjb3VudDsKKyNkZWZpbmUgVklERU9fV0lORE9XX0lOVEVSTEFDRQkxCisjZGVmaW5lIFZJREVPX1dJTkRPV19DSFJPTUFLRVkJMTYJLyogT3ZlcmxheSBieSBjaHJvbWFrZXkgKi8KKyNkZWZpbmUgVklERU9fQ0xJUF9CSVRNQVAJLTEKKy8qIGJpdG1hcCBpcyAxMDI0eDYyNSwgYSAnMScgYml0IHJlcHJlc2VudHMgYSBjbGlwcGVkIHBpeGVsICovCisjZGVmaW5lIFZJREVPX0NMSVBNQVBfU0laRQkoMTI4ICogNjI1KQorfTsKKworc3RydWN0IHZpZGVvX2NhcHR1cmUKK3sKKwlfX3UzMiAJeCx5OwkJCS8qIE9mZnNldHMgaW50byBpbWFnZSAqLworCV9fdTMyCXdpZHRoLCBoZWlnaHQ7CQkvKiBBcmVhIHRvIGNhcHR1cmUgKi8KKwlfX3UxNglkZWNpbWF0aW9uOwkJLyogRGVjaW1hdGlvbiBkaXZpZGVyICovCisJX191MTYJZmxhZ3M7CQkJLyogRmxhZ3MgZm9yIGNhcHR1cmUgKi8KKyNkZWZpbmUgVklERU9fQ0FQVFVSRV9PREQJCTAJLyogVGVtcG9yYWwgKi8KKyNkZWZpbmUgVklERU9fQ0FQVFVSRV9FVkVOCQkxCit9OworCitzdHJ1Y3QgdmlkZW9fYnVmZmVyCit7CisJdm9pZAkqYmFzZTsKKwlpbnQJaGVpZ2h0LHdpZHRoOworCWludAlkZXB0aDsKKwlpbnQJYnl0ZXNwZXJsaW5lOworfTsKKworc3RydWN0IHZpZGVvX21tYXAKK3sKKwl1bnNpZ25lZAlpbnQgZnJhbWU7CQkvKiBGcmFtZSAoMCAtIG4pIGZvciBkb3VibGUgYnVmZmVyICovCisJaW50CQloZWlnaHQsd2lkdGg7CisJdW5zaWduZWQJaW50IGZvcm1hdDsJCS8qIHNob3VsZCBiZSBWSURFT19QQUxFVFRFXyogKi8KK307CisKK3N0cnVjdCB2aWRlb19rZXkKK3sKKwlfX3U4CWtleVs4XTsKKwlfX3UzMglmbGFnczsKK307CisKK3N0cnVjdCB2aWRlb19tYnVmCit7CisJaW50CXNpemU7CQkvKiBUb3RhbCBtZW1vcnkgdG8gbWFwICovCisJaW50CWZyYW1lczsJCS8qIEZyYW1lcyAqLworCWludAlvZmZzZXRzW1ZJREVPX01BWF9GUkFNRV07Cit9OworCisjZGVmaW5lIAlWSURFT19OT19VTklUCSgtMSkKKworc3RydWN0IHZpZGVvX3VuaXQKK3sKKwlpbnQgCXZpZGVvOwkJLyogVmlkZW8gbWlub3IgKi8KKwlpbnQJdmJpOwkJLyogVkJJIG1pbm9yICovCisJaW50CXJhZGlvOwkJLyogUmFkaW8gbWlub3IgKi8KKwlpbnQJYXVkaW87CQkvKiBBdWRpbyBtaW5vciAqLworCWludAl0ZWxldGV4dDsJLyogVGVsZXRleHQgbWlub3IgKi8KK307CisKK3N0cnVjdCB2YmlfZm9ybWF0IHsKKwlfX3UzMglzYW1wbGluZ19yYXRlOwkvKiBpbiBIeiAqLworCV9fdTMyCXNhbXBsZXNfcGVyX2xpbmU7CisJX191MzIJc2FtcGxlX2Zvcm1hdDsJLyogVklERU9fUEFMRVRURV9SQVcgb25seSAoMSBieXRlKSAqLworCV9fczMyCXN0YXJ0WzJdOwkvKiBzdGFydGluZyBsaW5lIGZvciBlYWNoIGZyYW1lICovCisJX191MzIJY291bnRbMl07CS8qIGNvdW50IG9mIGxpbmVzIGZvciBlYWNoIGZyYW1lICovCisJX191MzIJZmxhZ3M7CisjZGVmaW5lCVZCSV9VTlNZTkMJMQkvKiBjYW4gZGlzdGluZ3VlcyBiZXR3ZWVuIHRvcC9ib3R0b20gZmllbGQgKi8KKyNkZWZpbmUJVkJJX0lOVEVSTEFDRUQJMgkvKiBsaW5lcyBhcmUgaW50ZXJsYWNlZCAqLworfTsKKworLyogdmlkZW9faW5mbyBpcyBiaWFzZWQgdG93YXJkcyBoYXJkd2FyZSBtcGVnIGVuY29kZS9kZWNvZGUgKi8KKy8qIGJ1dCBpdCBjb3VsZCBhcHBseSBnZW5lcmljYWxseSB0byBhbnkgaGFyZHdhcmUgY29tcHJlc3Nvci9kZWNvbXByZXNzb3IgKi8KK3N0cnVjdCB2aWRlb19pbmZvCit7CisJX191MzIJZnJhbWVfY291bnQ7CS8qIGZyYW1lcyBvdXRwdXQgc2luY2UgZGVjb2RlL2VuY29kZSBiZWdhbiAqLworCV9fdTMyCWhfc2l6ZTsJCS8qIGN1cnJlbnQgdW5zY2FsZWQgaG9yaXpvbnRhbCBzaXplICovCisJX191MzIJdl9zaXplOwkJLyogY3VycmVudCB1bnNjYWxlZCB2ZXJpdGNhbCBzaXplICovCisJX191MzIJc21wdGVfdGltZWNvZGU7CS8qIGN1cnJlbnQgU01QVEUgdGltZWNvZGUgKGZvciBjdXJyZW50IEdPUCkgKi8KKwlfX3UzMglwaWN0dXJlX3R5cGU7CS8qIGN1cnJlbnQgcGljdHVyZSB0eXBlICovCisJX191MzIJdGVtcG9yYWxfcmVmZXJlbmNlOwkvKiBjdXJyZW50IHRlbXBvcmFsIHJlZmVyZW5jZSAqLworCV9fdTgJdXNlcl9kYXRhWzI1Nl07CS8qIHVzZXIgZGF0YSBsYXN0IGZvdW5kIGluIGNvbXByZXNzZWQgc3RyZWFtICovCisJLyogdXNlcl9kYXRhWzBdIGNvbnRhaW5zIHVzZXIgZGF0YSBmbGFncywgdXNlcl9kYXRhWzFdIGhhcyBjb3VudCAqLworfTsKKworLyogZ2VuZXJpYyBzdHJ1Y3R1cmUgZm9yIHNldHRpbmcgcGxheWJhY2sgbW9kZXMgKi8KK3N0cnVjdCB2aWRlb19wbGF5X21vZGUKK3sKKwlpbnQJbW9kZTsKKwlpbnQJcDE7CisJaW50CXAyOworfTsKKworLyogZm9yIGxvYWRpbmcgbWljcm9jb2RlIC8gZnBnYSBwcm9ncmFtbWluZyAqLworc3RydWN0IHZpZGVvX2NvZGUKK3sKKwljaGFyCWxvYWR3aGF0WzE2XTsJLyogbmFtZSBvciB0YWcgb2YgZmlsZSBiZWluZyBwYXNzZWQgKi8KKwlpbnQJZGF0YXNpemU7CisJX191OAkqZGF0YTsKK307CisKKyNkZWZpbmUgVklESU9DR0NBUAkJX0lPUigndicsMSxzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSkJLyogR2V0IGNhcGFiaWxpdGllcyAqLworI2RlZmluZSBWSURJT0NHQ0hBTgkJX0lPV1IoJ3YnLDIsc3RydWN0IHZpZGVvX2NoYW5uZWwpCS8qIEdldCBjaGFubmVsIGluZm8gKHNvdXJjZXMpICovCisjZGVmaW5lIFZJRElPQ1NDSEFOCQlfSU9XKCd2JywzLHN0cnVjdCB2aWRlb19jaGFubmVsKQkvKiBTZXQgY2hhbm5lbCAJKi8KKyNkZWZpbmUgVklESU9DR1RVTkVSCQlfSU9XUigndicsNCxzdHJ1Y3QgdmlkZW9fdHVuZXIpCQkvKiBHZXQgdHVuZXIgYWJpbGl0aWVzICovCisjZGVmaW5lIFZJRElPQ1NUVU5FUgkJX0lPVygndicsNSxzdHJ1Y3QgdmlkZW9fdHVuZXIpCQkvKiBUdW5lIHRoZSB0dW5lciBmb3IgdGhlIGN1cnJlbnQgY2hhbm5lbCAqLworI2RlZmluZSBWSURJT0NHUElDVAkJX0lPUigndicsNixzdHJ1Y3QgdmlkZW9fcGljdHVyZSkJLyogR2V0IHBpY3R1cmUgcHJvcGVydGllcyAqLworI2RlZmluZSBWSURJT0NTUElDVAkJX0lPVygndicsNyxzdHJ1Y3QgdmlkZW9fcGljdHVyZSkJLyogU2V0IHBpY3R1cmUgcHJvcGVydGllcyAqLworI2RlZmluZSBWSURJT0NDQVBUVVJFCQlfSU9XKCd2Jyw4LGludCkJCQkJLyogU3RhcnQsIGVuZCBjYXB0dXJlICovCisjZGVmaW5lIFZJRElPQ0dXSU4JCV9JT1IoJ3YnLDksIHN0cnVjdCB2aWRlb193aW5kb3cpCS8qIEdldCB0aGUgdmlkZW8gb3ZlcmxheSB3aW5kb3cgKi8KKyNkZWZpbmUgVklESU9DU1dJTgkJX0lPVygndicsMTAsIHN0cnVjdCB2aWRlb193aW5kb3cpCS8qIFNldCB0aGUgdmlkZW8gb3ZlcmxheSB3aW5kb3cgLSBwYXNzZXMgY2xpcCBsaXN0IGZvciBoYXJkd2FyZSBzbWFydHMgLCBjaHJvbWFrZXkgZXRjICovCisjZGVmaW5lIFZJRElPQ0dGQlVGCQlfSU9SKCd2JywxMSwgc3RydWN0IHZpZGVvX2J1ZmZlcikJLyogR2V0IGZyYW1lIGJ1ZmZlciAqLworI2RlZmluZSBWSURJT0NTRkJVRgkJX0lPVygndicsMTIsIHN0cnVjdCB2aWRlb19idWZmZXIpCS8qIFNldCBmcmFtZSBidWZmZXIgLSByb290IG9ubHkgKi8KKyNkZWZpbmUgVklESU9DS0VZCQlfSU9SKCd2JywxMywgc3RydWN0IHZpZGVvX2tleSkJCS8qIFZpZGVvIGtleSBldmVudCAtIHRvIGRldiAyNTUgaXMgdG8gYWxsIC0gY3V0cyBjYXB0dXJlIG9uIGFsbCBETUEgd2luZG93cyB3aXRoIHRoaXMga2V5ICgweEZGRkZGRkZGID09IGFsbCkgKi8KKyNkZWZpbmUgVklESU9DR0ZSRVEJCV9JT1IoJ3YnLDE0LCB1bnNpZ25lZCBsb25nKQkJLyogU2V0IHR1bmVyICovCisjZGVmaW5lIFZJRElPQ1NGUkVRCQlfSU9XKCd2JywxNSwgdW5zaWduZWQgbG9uZykJCS8qIFNldCB0dW5lciAqLworI2RlZmluZSBWSURJT0NHQVVESU8JCV9JT1IoJ3YnLDE2LCBzdHJ1Y3QgdmlkZW9fYXVkaW8pCS8qIEdldCBhdWRpbyBpbmZvICovCisjZGVmaW5lIFZJRElPQ1NBVURJTwkJX0lPVygndicsMTcsIHN0cnVjdCB2aWRlb19hdWRpbykJLyogQXVkaW8gc291cmNlLCBtdXRlIGV0YyAqLworI2RlZmluZSBWSURJT0NTWU5DCQlfSU9XKCd2JywxOCwgaW50KQkJCS8qIFN5bmMgd2l0aCBtbWFwIGdyYWJiaW5nICovCisjZGVmaW5lIFZJRElPQ01DQVBUVVJFCQlfSU9XKCd2JywxOSwgc3RydWN0IHZpZGVvX21tYXApCQkvKiBHcmFiIGZyYW1lcyAqLworI2RlZmluZSBWSURJT0NHTUJVRgkJX0lPUigndicsMjAsIHN0cnVjdCB2aWRlb19tYnVmKQkJLyogTWVtb3J5IG1hcCBidWZmZXIgaW5mbyAqLworI2RlZmluZSBWSURJT0NHVU5JVAkJX0lPUigndicsMjEsIHN0cnVjdCB2aWRlb191bml0KQkJLyogR2V0IGF0dGFjaGVkIHVuaXRzICovCisjZGVmaW5lIFZJRElPQ0dDQVBUVVJFCQlfSU9SKCd2JywyMiwgc3RydWN0IHZpZGVvX2NhcHR1cmUpCS8qIEdldCBzdWJjYXB0dXJlICovCisjZGVmaW5lIFZJRElPQ1NDQVBUVVJFCQlfSU9XKCd2JywyMywgc3RydWN0IHZpZGVvX2NhcHR1cmUpCS8qIFNldCBzdWJjYXB0dXJlICovCisjZGVmaW5lIFZJRElPQ1NQTEFZTU9ERQkJX0lPVygndicsMjQsIHN0cnVjdCB2aWRlb19wbGF5X21vZGUpCS8qIFNldCBvdXRwdXQgdmlkZW8gbW9kZS9mZWF0dXJlICovCisjZGVmaW5lIFZJRElPQ1NXUklURU1PREUJX0lPVygndicsMjUsIGludCkJCQkvKiBTZXQgd3JpdGUgbW9kZSAqLworI2RlZmluZSBWSURJT0NHUExBWUlORk8JCV9JT1IoJ3YnLDI2LCBzdHJ1Y3QgdmlkZW9faW5mbykJCS8qIEdldCBjdXJyZW50IHBsYXliYWNrIGluZm8gZnJvbSBoYXJkd2FyZSAqLworI2RlZmluZSBWSURJT0NTTUlDUk9DT0RFCV9JT1coJ3YnLDI3LCBzdHJ1Y3QgdmlkZW9fY29kZSkJCS8qIExvYWQgbWljcm9jb2RlIGludG8gaGFyZHdhcmUgKi8KKyNkZWZpbmUJVklESU9DR1ZCSUZNVAkJX0lPUigndicsMjgsIHN0cnVjdCB2YmlfZm9ybWF0KQkJLyogR2V0IFZCSSBpbmZvcm1hdGlvbiAqLworI2RlZmluZQlWSURJT0NTVkJJRk1UCQlfSU9XKCd2JywyOSwgc3RydWN0IHZiaV9mb3JtYXQpCQkvKiBTZXQgVkJJIGluZm9ybWF0aW9uICovCisKKworI2RlZmluZSBCQVNFX1ZJRElPQ1BSSVZBVEUJMTkyCQkvKiAxOTItMjU1IGFyZSBwcml2YXRlICovCisKKy8qIFZJRElPQ1NXUklURU1PREUgKi8KKyNkZWZpbmUgVklEX1dSSVRFX01QRUdfQVVECQkwCisjZGVmaW5lIFZJRF9XUklURV9NUEVHX1ZJRAkJMQorI2RlZmluZSBWSURfV1JJVEVfT1NECQkJMgorI2RlZmluZSBWSURfV1JJVEVfVFRYCQkJMworI2RlZmluZSBWSURfV1JJVEVfQ0MJCQk0CisjZGVmaW5lIFZJRF9XUklURV9NSlBFRwkJCTUKKworLyogVklESU9DU1BMQVlNT0RFICovCisjZGVmaW5lIFZJRF9QTEFZX1ZJRF9PVVRfTU9ERQkJMAorCS8qIHAxOiA9IFZJREVPX01PREVfUEFMLCBWSURFT19NT0RFX05UU0MsIGV0YyAuLi4gKi8KKyNkZWZpbmUgVklEX1BMQVlfR0VOTE9DSwkJMQorCS8qIHAxOiAwID0gT0ZGLCAxID0gT04gKi8KKwkvKiBwMjogR0VOTE9DSyBGSU5FIERFTEFZIHZhbHVlICovCisjZGVmaW5lIFZJRF9QTEFZX05PUk1BTAkJCTIKKyNkZWZpbmUgVklEX1BMQVlfUEFVU0UJCQkzCisjZGVmaW5lIFZJRF9QTEFZX1NJTkdMRV9GUkFNRQkJNAorI2RlZmluZSBWSURfUExBWV9GQVNUX0ZPUldBUkQJCTUKKyNkZWZpbmUgVklEX1BMQVlfU0xPV19NT1RJT04JCTYKKyNkZWZpbmUgVklEX1BMQVlfSU1NRURJQVRFX05PUk1BTAk3CisjZGVmaW5lIFZJRF9QTEFZX1NXSVRDSF9DSEFOTkVMUwk4CisjZGVmaW5lIFZJRF9QTEFZX0ZSRUVaRV9GUkFNRQkJOQorI2RlZmluZSBWSURfUExBWV9TVElMTF9NT0RFCQkxMAorI2RlZmluZSBWSURfUExBWV9NQVNURVJfTU9ERQkJMTEKKwkvKiBwMTogc2VlIGJlbG93ICovCisjZGVmaW5lCQlWSURfUExBWV9NQVNURVJfTk9ORQkxCisjZGVmaW5lCQlWSURfUExBWV9NQVNURVJfVklERU8JMgorI2RlZmluZQkJVklEX1BMQVlfTUFTVEVSX0FVRElPCTMKKyNkZWZpbmUgVklEX1BMQVlfQUNUSVZFX1NDQU5MSU5FUwkxMgorCS8qIHAxID0gZmlyc3QgYWN0aXZlOyBwMiA9IGxhc3QgYWN0aXZlICovCisjZGVmaW5lIFZJRF9QTEFZX1JFU0VUCQkJMTMKKyNkZWZpbmUgVklEX1BMQVlfRU5EX01BUksJCTE0CisKKworI2VuZGlmIC8qIF9fTElOVVhfVklERU9ERVZfSCAqLworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1iYXNpYy1vZmZzZXQ6IDgKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YWYwYjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKQEAgLTAsMCArMSwxODE3IEBACisvKgorICogIFZpZGVvIGZvciBMaW51eCBUd28gaGVhZGVyIGZpbGUKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDcgdGhlIGNvbnRyaWJ1dG9ycworICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gcmVkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiAgQlNEIGxpY2Vuc2UgYXMgc3RhdGVkIGJlbG93OgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqICBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBUaGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisgKiAgICAgcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqICBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICogIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoJSGVhZGVyIGZpbGUgZm9yIHY0bCBvciBWNEwyIGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucworICogd2l0aCBwdWJsaWMgQVBJLgorICogQWxsIGtlcm5lbC1zcGVjaWZpYyBzdHVmZiB3ZXJlIG1vdmVkIHRvIG1lZGlhL3Y0bDItZGV2LmgsIHNvCisgKiBubyAjaWYgX19LRVJORUwgdGVzdHMgYXJlIGFsbG93ZWQgaGVyZQorICoKKyAqCVNlZSBodHRwOi8vbGludXh0di5vcmcgZm9yIG1vcmUgaW5mbworICoKKyAqCUF1dGhvcjogQmlsbCBEaXJrcyA8YmlsbEB0aGVkaXJrcy5vcmc+CisgKgkJSnVzdGluIFNjaG9lbWFuCisgKiAgICAgICAgICAgICAgSGFucyBWZXJrdWlsIDxodmVya3VpbEB4czRhbGwubmw+CisgKgkJZXQgYWwuCisgKi8KKyNpZm5kZWYgX19MSU5VWF9WSURFT0RFVjJfSAorI2RlZmluZSBfX0xJTlVYX1ZJREVPREVWMl9ICisKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICogQ29tbW9uIHN0dWZmIGZvciBib3RoIFY0TDEgYW5kIFY0TDIKKyAqIE1vdmVkIGZyb20gdmlkZW9kZXYuaAorICovCisjZGVmaW5lIFZJREVPX01BWF9GUkFNRSAgICAgICAgICAgICAgIDMyCisKKworLyogVGhlc2UgZGVmaW5lcyBhcmUgVjRMMSBzcGVjaWZpYyBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggdGhlIFY0TDIgQVBJIQorICAgVGhleSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGlzIGhlYWRlciBpbiB0aGUgZnV0dXJlLiAqLworCisjZGVmaW5lIFZJRF9UWVBFX0NBUFRVUkUJMQkvKiBDYW4gY2FwdHVyZSAqLworI2RlZmluZSBWSURfVFlQRV9UVU5FUgkJMgkvKiBDYW4gdHVuZSAqLworI2RlZmluZSBWSURfVFlQRV9URUxFVEVYVAk0CS8qIERvZXMgdGVsZXRleHQgKi8KKyNkZWZpbmUgVklEX1RZUEVfT1ZFUkxBWQk4CS8qIE92ZXJsYXkgb250byBmcmFtZSBidWZmZXIgKi8KKyNkZWZpbmUgVklEX1RZUEVfQ0hST01BS0VZCTE2CS8qIE92ZXJsYXkgYnkgY2hyb21ha2V5ICovCisjZGVmaW5lIFZJRF9UWVBFX0NMSVBQSU5HCTMyCS8qIENhbiBjbGlwICovCisjZGVmaW5lIFZJRF9UWVBFX0ZSQU1FUkFNCTY0CS8qIFVzZXMgdGhlIGZyYW1lIGJ1ZmZlciBtZW1vcnkgKi8KKyNkZWZpbmUgVklEX1RZUEVfU0NBTEVTCQkxMjgJLyogU2NhbGFibGUgKi8KKyNkZWZpbmUgVklEX1RZUEVfTU9OT0NIUk9NRQkyNTYJLyogTW9ub2Nocm9tZSBvbmx5ICovCisjZGVmaW5lIFZJRF9UWVBFX1NVQkNBUFRVUkUJNTEyCS8qIENhbiBjYXB0dXJlIHN1YmFyZWFzIG9mIHRoZSBpbWFnZSAqLworI2RlZmluZSBWSURfVFlQRV9NUEVHX0RFQ09ERVIJMTAyNAkvKiBDYW4gZGVjb2RlIE1QRUcgc3RyZWFtcyAqLworI2RlZmluZSBWSURfVFlQRV9NUEVHX0VOQ09ERVIJMjA0OAkvKiBDYW4gZW5jb2RlIE1QRUcgc3RyZWFtcyAqLworI2RlZmluZSBWSURfVFlQRV9NSlBFR19ERUNPREVSCTQwOTYJLyogQ2FuIGRlY29kZSBNSlBFRyBzdHJlYW1zICovCisjZGVmaW5lIFZJRF9UWVBFX01KUEVHX0VOQ09ERVIJODE5MgkvKiBDYW4gZW5jb2RlIE1KUEVHIHN0cmVhbXMgKi8KKworLyoKKyAqCU0gSSBTIEMgRSBMIEwgQSBOIEUgTyBVIFMKKyAqLworCisvKiAgRm91ci1jaGFyYWN0ZXItY29kZSAoRk9VUkNDKSAqLworI2RlZmluZSB2NGwyX2ZvdXJjYyhhLCBiLCBjLCBkKVwKKwkoKF9fdTMyKShhKSB8ICgoX191MzIpKGIpIDw8IDgpIHwgKChfX3UzMikoYykgPDwgMTYpIHwgKChfX3UzMikoZCkgPDwgMjQpKQorCisvKgorICoJRSBOIFUgTSBTCisgKi8KK2VudW0gdjRsMl9maWVsZCB7CisJVjRMMl9GSUVMRF9BTlkgICAgICAgICAgID0gMCwgLyogZHJpdmVyIGNhbiBjaG9vc2UgZnJvbSBub25lLAorCQkJCQkgdG9wLCBib3R0b20sIGludGVybGFjZWQKKwkJCQkJIGRlcGVuZGluZyBvbiB3aGF0ZXZlciBpdCB0aGlua3MKKwkJCQkJIGlzIGFwcHJveGltYXRlIC4uLiAqLworCVY0TDJfRklFTERfTk9ORSAgICAgICAgICA9IDEsIC8qIHRoaXMgZGV2aWNlIGhhcyBubyBmaWVsZHMgLi4uICovCisJVjRMMl9GSUVMRF9UT1AgICAgICAgICAgID0gMiwgLyogdG9wIGZpZWxkIG9ubHkgKi8KKwlWNEwyX0ZJRUxEX0JPVFRPTSAgICAgICAgPSAzLCAvKiBib3R0b20gZmllbGQgb25seSAqLworCVY0TDJfRklFTERfSU5URVJMQUNFRCAgICA9IDQsIC8qIGJvdGggZmllbGRzIGludGVybGFjZWQgKi8KKwlWNEwyX0ZJRUxEX1NFUV9UQiAgICAgICAgPSA1LCAvKiBib3RoIGZpZWxkcyBzZXF1ZW50aWFsIGludG8gb25lCisJCQkJCSBidWZmZXIsIHRvcC1ib3R0b20gb3JkZXIgKi8KKwlWNEwyX0ZJRUxEX1NFUV9CVCAgICAgICAgPSA2LCAvKiBzYW1lIGFzIGFib3ZlICsgYm90dG9tLXRvcCBvcmRlciAqLworCVY0TDJfRklFTERfQUxURVJOQVRFICAgICA9IDcsIC8qIGJvdGggZmllbGRzIGFsdGVybmF0aW5nIGludG8KKwkJCQkJIHNlcGFyYXRlIGJ1ZmZlcnMgKi8KKwlWNEwyX0ZJRUxEX0lOVEVSTEFDRURfVEIgPSA4LCAvKiBib3RoIGZpZWxkcyBpbnRlcmxhY2VkLCB0b3AgZmllbGQKKwkJCQkJIGZpcnN0IGFuZCB0aGUgdG9wIGZpZWxkIGlzCisJCQkJCSB0cmFuc21pdHRlZCBmaXJzdCAqLworCVY0TDJfRklFTERfSU5URVJMQUNFRF9CVCA9IDksIC8qIGJvdGggZmllbGRzIGludGVybGFjZWQsIHRvcCBmaWVsZAorCQkJCQkgZmlyc3QgYW5kIHRoZSBib3R0b20gZmllbGQgaXMKKwkJCQkJIHRyYW5zbWl0dGVkIGZpcnN0ICovCit9OworI2RlZmluZSBWNEwyX0ZJRUxEX0hBU19UT1AoZmllbGQpCVwKKwkoKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX1RPUCAJfHxcCisJIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEIHx8XAorCSAoZmllbGQpID09IFY0TDJfRklFTERfSU5URVJMQUNFRF9UQiB8fFwKKwkgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRURfQlQgfHxcCisJIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfVEIJfHxcCisJIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfQlQpCisjZGVmaW5lIFY0TDJfRklFTERfSEFTX0JPVFRPTShmaWVsZCkJXAorCSgoZmllbGQpID09IFY0TDJfRklFTERfQk9UVE9NIAl8fFwKKwkgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgfHxcCisJIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX1RCIHx8XAorCSAoZmllbGQpID09IFY0TDJfRklFTERfSU5URVJMQUNFRF9CVCB8fFwKKwkgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX1NFUV9UQgl8fFwKKwkgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX1NFUV9CVCkKKyNkZWZpbmUgVjRMMl9GSUVMRF9IQVNfQk9USChmaWVsZCkJXAorCSgoZmllbGQpID09IFY0TDJfRklFTERfSU5URVJMQUNFRCB8fFwKKwkgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRURfVEIgfHxcCisJIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX0JUIHx8XAorCSAoZmllbGQpID09IFY0TDJfRklFTERfU0VRX1RCIHx8XAorCSAoZmllbGQpID09IFY0TDJfRklFTERfU0VRX0JUKQorCitlbnVtIHY0bDJfYnVmX3R5cGUgeworCVY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSAgICAgICAgPSAxLAorCVY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICAgICAgICAgPSAyLAorCVY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWSAgICAgICAgPSAzLAorCVY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUgICAgICAgICAgPSA0LAorCVY0TDJfQlVGX1RZUEVfVkJJX09VVFBVVCAgICAgICAgICAgPSA1LAorCVY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFICAgPSA2LAorCVY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQgICAgPSA3LAorI2lmIDEKKwkvKiBFeHBlcmltZW50YWwgKi8KKwlWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9PVkVSTEFZID0gOCwKKyNlbmRpZgorCVY0TDJfQlVGX1RZUEVfUFJJVkFURSAgICAgICAgICAgICAgPSAweDgwLAorfTsKKworZW51bSB2NGwyX3R1bmVyX3R5cGUgeworCVY0TDJfVFVORVJfUkFESU8JICAgICA9IDEsCisJVjRMMl9UVU5FUl9BTkFMT0dfVFYJICAgICA9IDIsCisJVjRMMl9UVU5FUl9ESUdJVEFMX1RWCSAgICAgPSAzLAorfTsKKworZW51bSB2NGwyX21lbW9yeSB7CisJVjRMMl9NRU1PUllfTU1BUCAgICAgICAgICAgICA9IDEsCisJVjRMMl9NRU1PUllfVVNFUlBUUiAgICAgICAgICA9IDIsCisJVjRMMl9NRU1PUllfT1ZFUkxBWSAgICAgICAgICA9IDMsCit9OworCisvKiBzZWUgYWxzbyBodHRwOi8vdmVrdG9yLnRoZW9yZW0uY2EvZ3JhcGhpY3MveWNiY3IvICovCitlbnVtIHY0bDJfY29sb3JzcGFjZSB7CisJLyogSVRVLVIgNjAxIC0tIGJyb2FkY2FzdCBOVFNDL1BBTCAqLworCVY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0gICAgID0gMSwKKworCS8qIDExMjUtTGluZSAoVVMpIEhEVFYgKi8KKwlWNEwyX0NPTE9SU1BBQ0VfU01QVEUyNDBNICAgICA9IDIsCisKKwkvKiBIRCBhbmQgbW9kZXJuIGNhcHR1cmVzLiAqLworCVY0TDJfQ09MT1JTUEFDRV9SRUM3MDkgICAgICAgID0gMywKKworCS8qIGJyb2tlbiBCVDg3OCBleHRlbnRzICg2MDEsIGx1bWEgcmFuZ2UgMTYtMjUzIGluc3RlYWQgb2YgMTYtMjM1KSAqLworCVY0TDJfQ09MT1JTUEFDRV9CVDg3OCAgICAgICAgID0gNCwKKworCS8qIFRoZXNlIHNob3VsZCBiZSB1c2VmdWwuICBBc3N1bWUgNjAxIGV4dGVudHMuICovCisJVjRMMl9DT0xPUlNQQUNFXzQ3MF9TWVNURU1fTSAgPSA1LAorCVY0TDJfQ09MT1JTUEFDRV80NzBfU1lTVEVNX0JHID0gNiwKKworCS8qIEkga25vdyB0aGVyZSB3aWxsIGJlIGNhbWVyYXMgdGhhdCBzZW5kIHRoaXMuICBTbywgdGhpcyBpcworCSAqIHVuc3BlY2lmaWVkIGNocm9tYXRpY2l0aWVzIGFuZCBmdWxsIDAtMjU1IG9uIGVhY2ggb2YgdGhlCisJICogWSdDYkNyIGNvbXBvbmVudHMKKwkgKi8KKwlWNEwyX0NPTE9SU1BBQ0VfSlBFRyAgICAgICAgICA9IDcsCisKKwkvKiBGb3IgUkdCIGNvbG91cnNwYWNlcywgdGhpcyBpcyBwcm9iYWJseSBhIGdvb2Qgc3RhcnQuICovCisJVjRMMl9DT0xPUlNQQUNFX1NSR0IgICAgICAgICAgPSA4LAorfTsKKworZW51bSB2NGwyX3ByaW9yaXR5IHsKKwlWNEwyX1BSSU9SSVRZX1VOU0VUICAgICAgID0gMCwgIC8qIG5vdCBpbml0aWFsaXplZCAqLworCVY0TDJfUFJJT1JJVFlfQkFDS0dST1VORCAgPSAxLAorCVY0TDJfUFJJT1JJVFlfSU5URVJBQ1RJVkUgPSAyLAorCVY0TDJfUFJJT1JJVFlfUkVDT1JEICAgICAgPSAzLAorCVY0TDJfUFJJT1JJVFlfREVGQVVMVCAgICAgPSBWNEwyX1BSSU9SSVRZX0lOVEVSQUNUSVZFLAorfTsKKworc3RydWN0IHY0bDJfcmVjdCB7CisJX19zMzIgICBsZWZ0OworCV9fczMyICAgdG9wOworCV9fczMyICAgd2lkdGg7CisJX19zMzIgICBoZWlnaHQ7Cit9OworCitzdHJ1Y3QgdjRsMl9mcmFjdCB7CisJX191MzIgICBudW1lcmF0b3I7CisJX191MzIgICBkZW5vbWluYXRvcjsKK307CisKKy8qCisgKglEIFIgSSBWIEUgUiAgIEMgQSBQIEEgQiBJIEwgSSBUIEkgRSBTCisgKi8KK3N0cnVjdCB2NGwyX2NhcGFiaWxpdHkgeworCV9fdTgJZHJpdmVyWzE2XTsJLyogaS5lLiAiYnR0diIgKi8KKwlfX3U4CWNhcmRbMzJdOwkvKiBpLmUuICJIYXVwcGF1Z2UgV2luVFYiICovCisJX191OAlidXNfaW5mb1szMl07CS8qICJQQ0k6IiArIHBjaV9uYW1lKHBjaV9kZXYpICovCisJX191MzIgICB2ZXJzaW9uOyAgICAgICAgLyogc2hvdWxkIHVzZSBLRVJORUxfVkVSU0lPTigpICovCisJX191MzIJY2FwYWJpbGl0aWVzOwkvKiBEZXZpY2UgY2FwYWJpbGl0aWVzICovCisJX191MzIJcmVzZXJ2ZWRbNF07Cit9OworCisvKiBWYWx1ZXMgZm9yICdjYXBhYmlsaXRpZXMnIGZpZWxkICovCisjZGVmaW5lIFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUJCTB4MDAwMDAwMDEgIC8qIElzIGEgdmlkZW8gY2FwdHVyZSBkZXZpY2UgKi8KKyNkZWZpbmUgVjRMMl9DQVBfVklERU9fT1VUUFVUCQkweDAwMDAwMDAyICAvKiBJcyBhIHZpZGVvIG91dHB1dCBkZXZpY2UgKi8KKyNkZWZpbmUgVjRMMl9DQVBfVklERU9fT1ZFUkxBWQkJMHgwMDAwMDAwNCAgLyogQ2FuIGRvIHZpZGVvIG92ZXJsYXkgKi8KKyNkZWZpbmUgVjRMMl9DQVBfVkJJX0NBUFRVUkUJCTB4MDAwMDAwMTAgIC8qIElzIGEgcmF3IFZCSSBjYXB0dXJlIGRldmljZSAqLworI2RlZmluZSBWNEwyX0NBUF9WQklfT1VUUFVUCQkweDAwMDAwMDIwICAvKiBJcyBhIHJhdyBWQkkgb3V0cHV0IGRldmljZSAqLworI2RlZmluZSBWNEwyX0NBUF9TTElDRURfVkJJX0NBUFRVUkUJMHgwMDAwMDA0MCAgLyogSXMgYSBzbGljZWQgVkJJIGNhcHR1cmUgZGV2aWNlICovCisjZGVmaW5lIFY0TDJfQ0FQX1NMSUNFRF9WQklfT1VUUFVUCTB4MDAwMDAwODAgIC8qIElzIGEgc2xpY2VkIFZCSSBvdXRwdXQgZGV2aWNlICovCisjZGVmaW5lIFY0TDJfQ0FQX1JEU19DQVBUVVJFCQkweDAwMDAwMTAwICAvKiBSRFMgZGF0YSBjYXB0dXJlICovCisjZGVmaW5lIFY0TDJfQ0FQX1ZJREVPX09VVFBVVF9PVkVSTEFZCTB4MDAwMDAyMDAgIC8qIENhbiBkbyB2aWRlbyBvdXRwdXQgb3ZlcmxheSAqLworI2RlZmluZSBWNEwyX0NBUF9IV19GUkVRX1NFRUsJCTB4MDAwMDA0MDAgIC8qIENhbiBkbyBoYXJkd2FyZSBmcmVxdWVuY3kgc2VlayAgKi8KKyNkZWZpbmUgVjRMMl9DQVBfUkRTX09VVFBVVAkJMHgwMDAwMDgwMCAgLyogSXMgYW4gUkRTIGVuY29kZXIgKi8KKworI2RlZmluZSBWNEwyX0NBUF9UVU5FUgkJCTB4MDAwMTAwMDAgIC8qIGhhcyBhIHR1bmVyICovCisjZGVmaW5lIFY0TDJfQ0FQX0FVRElPCQkJMHgwMDAyMDAwMCAgLyogaGFzIGF1ZGlvIHN1cHBvcnQgKi8KKyNkZWZpbmUgVjRMMl9DQVBfUkFESU8JCQkweDAwMDQwMDAwICAvKiBpcyBhIHJhZGlvIGRldmljZSAqLworI2RlZmluZSBWNEwyX0NBUF9NT0RVTEFUT1IJCTB4MDAwODAwMDAgIC8qIGhhcyBhIG1vZHVsYXRvciAqLworCisjZGVmaW5lIFY0TDJfQ0FQX1JFQURXUklURSAgICAgICAgICAgICAgMHgwMTAwMDAwMCAgLyogcmVhZC93cml0ZSBzeXN0ZW1jYWxscyAqLworI2RlZmluZSBWNEwyX0NBUF9BU1lOQ0lPICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAgIC8qIGFzeW5jIEkvTyAqLworI2RlZmluZSBWNEwyX0NBUF9TVFJFQU1JTkcgICAgICAgICAgICAgIDB4MDQwMDAwMDAgIC8qIHN0cmVhbWluZyBJL08gaW9jdGxzICovCisKKy8qCisgKglWIEkgRCBFIE8gICBJIE0gQSBHIEUgICBGIE8gUiBNIEEgVAorICovCitzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHsKKwlfX3UzMiAgICAgICAgIAkJd2lkdGg7CisJX191MzIJCQloZWlnaHQ7CisJX191MzIJCQlwaXhlbGZvcm1hdDsKKwllbnVtIHY0bDJfZmllbGQgIAlmaWVsZDsKKwlfX3UzMiAgICAgICAgICAgIAlieXRlc3BlcmxpbmU7CS8qIGZvciBwYWRkaW5nLCB6ZXJvIGlmIHVudXNlZCAqLworCV9fdTMyICAgICAgICAgIAkJc2l6ZWltYWdlOworCWVudW0gdjRsMl9jb2xvcnNwYWNlCWNvbG9yc3BhY2U7CisJX191MzIJCQlwcml2OwkJLyogcHJpdmF0ZSBkYXRhLCBkZXBlbmRzIG9uIHBpeGVsZm9ybWF0ICovCit9OworCisvKiAgICAgIFBpeGVsIGZvcm1hdCAgICAgICAgIEZPVVJDQyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGggIERlc2NyaXB0aW9uICAqLworCisvKiBSR0IgZm9ybWF0cyAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfUkdCMzMyICB2NGwyX2ZvdXJjYygnUicsICdHJywgJ0InLCAnMScpIC8qICA4ICBSR0ItMy0zLTIgICAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9SR0I0NDQgIHY0bDJfZm91cmNjKCdSJywgJzQnLCAnNCcsICc0JykgLyogMTYgIHh4eHhycnJyIGdnZ2diYmJiICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9SR0I1NTUgIHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnQicsICdPJykgLyogMTYgIFJHQi01LTUtNSAgICAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1JHQjU2NSAgdjRsMl9mb3VyY2MoJ1InLCAnRycsICdCJywgJ1AnKSAvKiAxNiAgUkdCLTUtNi01ICAgICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfUkdCNTU1WCB2NGwyX2ZvdXJjYygnUicsICdHJywgJ0InLCAnUScpIC8qIDE2ICBSR0ItNS01LTUgQkUgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9SR0I1NjVYIHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnQicsICdSJykgLyogMTYgIFJHQi01LTYtNSBCRSAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX0JHUjY2NiAgdjRsMl9mb3VyY2MoJ0InLCAnRycsICdSJywgJ0gnKSAvKiAxOCAgQkdSLTYtNi02CSAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX0JHUjI0ICAgdjRsMl9mb3VyY2MoJ0InLCAnRycsICdSJywgJzMnKSAvKiAyNCAgQkdSLTgtOC04ICAgICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfUkdCMjQgICB2NGwyX2ZvdXJjYygnUicsICdHJywgJ0InLCAnMycpIC8qIDI0ICBSR0ItOC04LTggICAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9CR1IzMiAgIHY0bDJfZm91cmNjKCdCJywgJ0cnLCAnUicsICc0JykgLyogMzIgIEJHUi04LTgtOC04ICAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1JHQjMyICAgdjRsMl9mb3VyY2MoJ1InLCAnRycsICdCJywgJzQnKSAvKiAzMiAgUkdCLTgtOC04LTggICAqLworCisvKiBHcmV5IGZvcm1hdHMgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX0dSRVkgICAgdjRsMl9mb3VyY2MoJ0cnLCAnUicsICdFJywgJ1knKSAvKiAgOCAgR3JleXNjYWxlICAgICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfWTQgICAgICB2NGwyX2ZvdXJjYygnWScsICcwJywgJzQnLCAnICcpIC8qICA0ICBHcmV5c2NhbGUgICAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZNiAgICAgIHY0bDJfZm91cmNjKCdZJywgJzAnLCAnNicsICcgJykgLyogIDYgIEdyZXlzY2FsZSAgICAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1kxMCAgICAgdjRsMl9mb3VyY2MoJ1knLCAnMScsICcwJywgJyAnKSAvKiAxMCAgR3JleXNjYWxlICAgICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfWTE2ICAgICB2NGwyX2ZvdXJjYygnWScsICcxJywgJzYnLCAnICcpIC8qIDE2ICBHcmV5c2NhbGUgICAgICovCisKKy8qIFBhbGV0dGUgZm9ybWF0cyAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfUEFMOCAgICB2NGwyX2ZvdXJjYygnUCcsICdBJywgJ0wnLCAnOCcpIC8qICA4ICA4LWJpdCBwYWxldHRlICovCisKKy8qIEx1bWluYW5jZStDaHJvbWluYW5jZSBmb3JtYXRzICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVlU0MTAgIHY0bDJfZm91cmNjKCdZJywgJ1YnLCAnVScsICc5JykgLyogIDkgIFlWVSA0OjE6MCAgICAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1lWVTQyMCAgdjRsMl9mb3VyY2MoJ1knLCAnVicsICcxJywgJzInKSAvKiAxMiAgWVZVIDQ6MjowICAgICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVZViAgICB2NGwyX2ZvdXJjYygnWScsICdVJywgJ1knLCAnVicpIC8qIDE2ICBZVVYgNDoyOjIgICAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZWVVWICAgIHY0bDJfZm91cmNjKCdZJywgJ1knLCAnVScsICdWJykgLyogMTYgIFlVViA0OjI6MiAgICAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1lWWVUgICAgdjRsMl9mb3VyY2MoJ1knLCAnVicsICdZJywgJ1UnKSAvKiAxNiBZVlUgNDoyOjIgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1VZVlkgICAgdjRsMl9mb3VyY2MoJ1UnLCAnWScsICdWJywgJ1knKSAvKiAxNiAgWVVWIDQ6MjoyICAgICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfVllVWSAgICB2NGwyX2ZvdXJjYygnVicsICdZJywgJ1UnLCAnWScpIC8qIDE2ICBZVVYgNDoyOjIgICAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVVY0MjJQIHY0bDJfZm91cmNjKCc0JywgJzInLCAnMicsICdQJykgLyogMTYgIFlWVTQyMiBwbGFuYXIgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1lVVjQxMVAgdjRsMl9mb3VyY2MoJzQnLCAnMScsICcxJywgJ1AnKSAvKiAxNiAgWVZVNDExIHBsYW5hciAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfWTQxUCAgICB2NGwyX2ZvdXJjYygnWScsICc0JywgJzEnLCAnUCcpIC8qIDEyICBZVVYgNDoxOjEgICAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVVY0NDQgIHY0bDJfZm91cmNjKCdZJywgJzQnLCAnNCcsICc0JykgLyogMTYgIHh4eHh5eXl5IHV1dXV2dnZ2ICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVVY1NTUgIHY0bDJfZm91cmNjKCdZJywgJ1UnLCAnVicsICdPJykgLyogMTYgIFlVVi01LTUtNSAgICAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1lVVjU2NSAgdjRsMl9mb3VyY2MoJ1knLCAnVScsICdWJywgJ1AnKSAvKiAxNiAgWVVWLTUtNi01ICAgICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVWMzIgICB2NGwyX2ZvdXJjYygnWScsICdVJywgJ1YnLCAnNCcpIC8qIDMyICBZVVYtOC04LTgtOCAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVVY0MTAgIHY0bDJfZm91cmNjKCdZJywgJ1UnLCAnVicsICc5JykgLyogIDkgIFlVViA0OjE6MCAgICAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1lVVjQyMCAgdjRsMl9mb3VyY2MoJ1knLCAnVScsICcxJywgJzInKSAvKiAxMiAgWVVWIDQ6MjowICAgICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfSEkyNDAgICB2NGwyX2ZvdXJjYygnSCcsICdJJywgJzInLCAnNCcpIC8qICA4ICA4LWJpdCBjb2xvciAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ITTEyICAgIHY0bDJfZm91cmNjKCdIJywgJ00nLCAnMScsICcyJykgLyogIDggIFlVViA0OjI6MCAxNngxNiBtYWNyb2Jsb2NrcyAqLworCisvKiB0d28gcGxhbmVzIC0tIG9uZSBZLCBvbmUgQ3IgKyBDYiBpbnRlcmxlYXZlZCAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX05WMTIgICAgdjRsMl9mb3VyY2MoJ04nLCAnVicsICcxJywgJzInKSAvKiAxMiAgWS9DYkNyIDQ6MjowICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfTlYyMSAgICB2NGwyX2ZvdXJjYygnTicsICdWJywgJzInLCAnMScpIC8qIDEyICBZL0NyQ2IgNDoyOjAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9OVjE2ICAgIHY0bDJfZm91cmNjKCdOJywgJ1YnLCAnMScsICc2JykgLyogMTYgIFkvQ2JDciA0OjI6MiAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX05WNjEgICAgdjRsMl9mb3VyY2MoJ04nLCAnVicsICc2JywgJzEnKSAvKiAxNiAgWS9DckNiIDQ6MjoyICAqLworCisvKiBCYXllciBmb3JtYXRzIC0gc2VlIGh0dHA6Ly93d3cuc2lsaWNvbmltYWdpbmcuY29tL1JHQiUyMEJheWVyLmh0bSAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfU0JHR1I4ICB2NGwyX2ZvdXJjYygnQicsICdBJywgJzgnLCAnMScpIC8qICA4ICBCR0JHLi4gR1JHUi4uICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TR0JSRzggIHY0bDJfZm91cmNjKCdHJywgJ0InLCAnUicsICdHJykgLyogIDggIEdCR0IuLiBSR1JHLi4gKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHUkJHOCAgdjRsMl9mb3VyY2MoJ0cnLCAnUicsICdCJywgJ0cnKSAvKiAgOCAgR1JHUi4uIEJHQkcuLiAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfU1JHR0I4ICB2NGwyX2ZvdXJjYygnUicsICdHJywgJ0cnLCAnQicpIC8qICA4ICBSR1JHLi4gR0JHQi4uICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TQkdHUjEwIHY0bDJfZm91cmNjKCdCJywgJ0cnLCAnMScsICcwJykgLyogMTAgIEJHQkcuLiBHUkdSLi4gKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHQlJHMTAgdjRsMl9mb3VyY2MoJ0cnLCAnQicsICcxJywgJzAnKSAvKiAxMCAgR0JHQi4uIFJHUkcuLiAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dSQkcxMCB2NGwyX2ZvdXJjYygnQicsICdBJywgJzEnLCAnMCcpIC8qIDEwICBHUkdSLi4gQkdCRy4uICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TUkdHQjEwIHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnMScsICcwJykgLyogMTAgIFJHUkcuLiBHQkdCLi4gKi8KKwkvKiAxMGJpdCByYXcgYmF5ZXIgRFBDTSBjb21wcmVzc2VkIHRvIDggYml0cyAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dSQkcxMERQQ004IHY0bDJfZm91cmNjKCdCJywgJ0QnLCAnMScsICcwJykKKwkvKgorCSAqIDEwYml0IHJhdyBiYXllciwgZXhwYW5kZWQgdG8gMTYgYml0cworCSAqIHh4eHhycnJycnJycnJyeHh4eGdnZ2dnZ2dnZ2cgeHh4eGdnZ2dnZ2dnZ2d4eHh4YmJiYmJiYmJiYi4uLgorCSAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfU0JHR1IxNiB2NGwyX2ZvdXJjYygnQicsICdZJywgJ1InLCAnMicpIC8qIDE2ICBCR0JHLi4gR1JHUi4uICovCisKKy8qIGNvbXByZXNzZWQgZm9ybWF0cyAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfTUpQRUcgICAgdjRsMl9mb3VyY2MoJ00nLCAnSicsICdQJywgJ0cnKSAvKiBNb3Rpb24tSlBFRyAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9KUEVHICAgICB2NGwyX2ZvdXJjYygnSicsICdQJywgJ0UnLCAnRycpIC8qIEpGSUYgSlBFRyAgICAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX0RWICAgICAgIHY0bDJfZm91cmNjKCdkJywgJ3YnLCAncycsICdkJykgLyogMTM5NCAgICAgICAgICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfTVBFRyAgICAgdjRsMl9mb3VyY2MoJ00nLCAnUCcsICdFJywgJ0cnKSAvKiBNUEVHLTEvMi80ICAgICovCisKKy8qICBWZW5kb3Itc3BlY2lmaWMgZm9ybWF0cyAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9DUElBMSAgICB2NGwyX2ZvdXJjYygnQycsICdQJywgJ0knLCAnQScpIC8qIGNwaWExIFlVViAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfV05WQSAgICAgdjRsMl9mb3VyY2MoJ1cnLCAnTicsICdWJywgJ0EnKSAvKiBXaW5ub3YgaHcgY29tcHJlc3MgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1NOOUMxMFggIHY0bDJfZm91cmNjKCdTJywgJzknLCAnMScsICcwJykgLyogU045QzEweCBjb21wcmVzc2lvbiAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfU045QzIwWF9JNDIwIHY0bDJfZm91cmNjKCdTJywgJzknLCAnMicsICcwJykgLyogU045QzIweCBZVVYgNDoyOjAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1BXQzEgICAgIHY0bDJfZm91cmNjKCdQJywgJ1cnLCAnQycsICcxJykgLyogcHdjIG9sZGVyIHdlYmNhbSAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfUFdDMiAgICAgdjRsMl9mb3VyY2MoJ1AnLCAnVycsICdDJywgJzInKSAvKiBwd2MgbmV3ZXIgd2ViY2FtICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9FVDYxWDI1MSB2NGwyX2ZvdXJjYygnRScsICc2JywgJzInLCAnNScpIC8qIEVUNjFYMjUxIGNvbXByZXNzaW9uICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TUENBNTAxICB2NGwyX2ZvdXJjYygnUycsICc1JywgJzAnLCAnMScpIC8qIFlVWVYgcGVyIGxpbmUgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1NQQ0E1MDUgIHY0bDJfZm91cmNjKCdTJywgJzUnLCAnMCcsICc1JykgLyogWVlVViBwZXIgbGluZSAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfU1BDQTUwOCAgdjRsMl9mb3VyY2MoJ1MnLCAnNScsICcwJywgJzgnKSAvKiBZVVZZIHBlciBsaW5lICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TUENBNTYxICB2NGwyX2ZvdXJjYygnUycsICc1JywgJzYnLCAnMScpIC8qIGNvbXByZXNzZWQgR0JSRyBiYXllciAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfUEFDMjA3ICAgdjRsMl9mb3VyY2MoJ1AnLCAnMicsICcwJywgJzcnKSAvKiBjb21wcmVzc2VkIEJHR1IgYmF5ZXIgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX01SOTczMTBBIHY0bDJfZm91cmNjKCdNJywgJzMnLCAnMScsICcwJykgLyogY29tcHJlc3NlZCBCR0dSIGJheWVyICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TTjlDMjAyOCB2NGwyX2ZvdXJjYygnUycsICdPJywgJ04nLCAnWCcpIC8qIGNvbXByZXNzZWQgR0JSRyBiYXllciAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfU1E5MDVDICAgdjRsMl9mb3VyY2MoJzknLCAnMCcsICc1JywgJ0MnKSAvKiBjb21wcmVzc2VkIFJHR0IgYmF5ZXIgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1BKUEcgICAgIHY0bDJfZm91cmNjKCdQJywgJ0onLCAnUCcsICdHJykgLyogUGl4YXJ0IDczeHggSlBFRyAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfT1Y1MTEgICAgdjRsMl9mb3VyY2MoJ08nLCAnNScsICcxJywgJzEnKSAvKiBvdjUxMSBKUEVHICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9PVjUxOCAgICB2NGwyX2ZvdXJjYygnTycsICc1JywgJzEnLCAnOCcpIC8qIG92NTE4IEpQRUcgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1NUVjA2ODAgIHY0bDJfZm91cmNjKCdTJywgJzYnLCAnOCcsICcwJykgLyogc3R2MDY4MCBiYXllciAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfVE02MDAwICAgdjRsMl9mb3VyY2MoJ1QnLCAnTScsICc2JywgJzAnKSAvKiB0bTU2MDAvdG02MHgwICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9DSVRfWVlWWVVZIHY0bDJfZm91cmNjKCdDJywgJ0knLCAnVCcsICdWJykgLyogb25lIGxpbmUgb2YgWSB0aGVuIDEgbGluZSBvZiBWWVVZICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9LT05JQ0E0MjAgIHY0bDJfZm91cmNjKCdLJywgJ08nLCAnTicsICdJJykgLyogWVVWNDIwIHBsYW5hciBpbiBibG9ja3Mgb2YgMjU2IHBpeGVscyAqLworCisvKgorICoJRiBPIFIgTSBBIFQgICBFIE4gVSBNIEUgUiBBIFQgSSBPIE4KKyAqLworc3RydWN0IHY0bDJfZm10ZGVzYyB7CisJX191MzIJCSAgICBpbmRleDsgICAgICAgICAgICAgLyogRm9ybWF0IG51bWJlciAgICAgICovCisJZW51bSB2NGwyX2J1Zl90eXBlICB0eXBlOyAgICAgICAgICAgICAgLyogYnVmZmVyIHR5cGUgICAgICAgICovCisJX191MzIgICAgICAgICAgICAgICBmbGFnczsKKwlfX3U4CQkgICAgZGVzY3JpcHRpb25bMzJdOyAgIC8qIERlc2NyaXB0aW9uIHN0cmluZyAqLworCV9fdTMyCQkgICAgcGl4ZWxmb3JtYXQ7ICAgICAgIC8qIEZvcm1hdCBmb3VyY2MgICAgICAqLworCV9fdTMyCQkgICAgcmVzZXJ2ZWRbNF07Cit9OworCisjZGVmaW5lIFY0TDJfRk1UX0ZMQUdfQ09NUFJFU1NFRCAweDAwMDEKKyNkZWZpbmUgVjRMMl9GTVRfRkxBR19FTVVMQVRFRCAgIDB4MDAwMgorCisjaWYgMQorCS8qIEV4cGVyaW1lbnRhbCBGcmFtZSBTaXplIGFuZCBmcmFtZSByYXRlIGVudW1lcmF0aW9uICovCisvKgorICoJRiBSIEEgTSBFICAgUyBJIFogRSAgIEUgTiBVIE0gRSBSIEEgVCBJIE8gTgorICovCitlbnVtIHY0bDJfZnJtc2l6ZXR5cGVzIHsKKwlWNEwyX0ZSTVNJWkVfVFlQRV9ESVNDUkVURQk9IDEsCisJVjRMMl9GUk1TSVpFX1RZUEVfQ09OVElOVU9VUwk9IDIsCisJVjRMMl9GUk1TSVpFX1RZUEVfU1RFUFdJU0UJPSAzLAorfTsKKworc3RydWN0IHY0bDJfZnJtc2l6ZV9kaXNjcmV0ZSB7CisJX191MzIJCQl3aWR0aDsJCS8qIEZyYW1lIHdpZHRoIFtwaXhlbF0gKi8KKwlfX3UzMgkJCWhlaWdodDsJCS8qIEZyYW1lIGhlaWdodCBbcGl4ZWxdICovCit9OworCitzdHJ1Y3QgdjRsMl9mcm1zaXplX3N0ZXB3aXNlIHsKKwlfX3UzMgkJCW1pbl93aWR0aDsJLyogTWluaW11bSBmcmFtZSB3aWR0aCBbcGl4ZWxdICovCisJX191MzIJCQltYXhfd2lkdGg7CS8qIE1heGltdW0gZnJhbWUgd2lkdGggW3BpeGVsXSAqLworCV9fdTMyCQkJc3RlcF93aWR0aDsJLyogRnJhbWUgd2lkdGggc3RlcCBzaXplIFtwaXhlbF0gKi8KKwlfX3UzMgkJCW1pbl9oZWlnaHQ7CS8qIE1pbmltdW0gZnJhbWUgaGVpZ2h0IFtwaXhlbF0gKi8KKwlfX3UzMgkJCW1heF9oZWlnaHQ7CS8qIE1heGltdW0gZnJhbWUgaGVpZ2h0IFtwaXhlbF0gKi8KKwlfX3UzMgkJCXN0ZXBfaGVpZ2h0OwkvKiBGcmFtZSBoZWlnaHQgc3RlcCBzaXplIFtwaXhlbF0gKi8KK307CisKK3N0cnVjdCB2NGwyX2ZybXNpemVlbnVtIHsKKwlfX3UzMgkJCWluZGV4OwkJLyogRnJhbWUgc2l6ZSBudW1iZXIgKi8KKwlfX3UzMgkJCXBpeGVsX2Zvcm1hdDsJLyogUGl4ZWwgZm9ybWF0ICovCisJX191MzIJCQl0eXBlOwkJLyogRnJhbWUgc2l6ZSB0eXBlIHRoZSBkZXZpY2Ugc3VwcG9ydHMuICovCisKKwl1bmlvbiB7CQkJCQkvKiBGcmFtZSBzaXplICovCisJCXN0cnVjdCB2NGwyX2ZybXNpemVfZGlzY3JldGUJZGlzY3JldGU7CisJCXN0cnVjdCB2NGwyX2ZybXNpemVfc3RlcHdpc2UJc3RlcHdpc2U7CisJfTsKKworCV9fdTMyICAgcmVzZXJ2ZWRbMl07CQkJLyogUmVzZXJ2ZWQgc3BhY2UgZm9yIGZ1dHVyZSB1c2UgKi8KK307CisKKy8qCisgKglGIFIgQSBNIEUgICBSIEEgVCBFICAgRSBOIFUgTSBFIFIgQSBUIEkgTyBOCisgKi8KK2VudW0gdjRsMl9mcm1pdmFsdHlwZXMgeworCVY0TDJfRlJNSVZBTF9UWVBFX0RJU0NSRVRFCT0gMSwKKwlWNEwyX0ZSTUlWQUxfVFlQRV9DT05USU5VT1VTCT0gMiwKKwlWNEwyX0ZSTUlWQUxfVFlQRV9TVEVQV0lTRQk9IDMsCit9OworCitzdHJ1Y3QgdjRsMl9mcm1pdmFsX3N0ZXB3aXNlIHsKKwlzdHJ1Y3QgdjRsMl9mcmFjdAltaW47CQkvKiBNaW5pbXVtIGZyYW1lIGludGVydmFsIFtzXSAqLworCXN0cnVjdCB2NGwyX2ZyYWN0CW1heDsJCS8qIE1heGltdW0gZnJhbWUgaW50ZXJ2YWwgW3NdICovCisJc3RydWN0IHY0bDJfZnJhY3QJc3RlcDsJCS8qIEZyYW1lIGludGVydmFsIHN0ZXAgc2l6ZSBbc10gKi8KK307CisKK3N0cnVjdCB2NGwyX2ZybWl2YWxlbnVtIHsKKwlfX3UzMgkJCWluZGV4OwkJLyogRnJhbWUgZm9ybWF0IGluZGV4ICovCisJX191MzIJCQlwaXhlbF9mb3JtYXQ7CS8qIFBpeGVsIGZvcm1hdCAqLworCV9fdTMyCQkJd2lkdGg7CQkvKiBGcmFtZSB3aWR0aCAqLworCV9fdTMyCQkJaGVpZ2h0OwkJLyogRnJhbWUgaGVpZ2h0ICovCisJX191MzIJCQl0eXBlOwkJLyogRnJhbWUgaW50ZXJ2YWwgdHlwZSB0aGUgZGV2aWNlIHN1cHBvcnRzLiAqLworCisJdW5pb24gewkJCQkJLyogRnJhbWUgaW50ZXJ2YWwgKi8KKwkJc3RydWN0IHY0bDJfZnJhY3QJCWRpc2NyZXRlOworCQlzdHJ1Y3QgdjRsMl9mcm1pdmFsX3N0ZXB3aXNlCXN0ZXB3aXNlOworCX07CisKKwlfX3UzMglyZXNlcnZlZFsyXTsJCQkvKiBSZXNlcnZlZCBzcGFjZSBmb3IgZnV0dXJlIHVzZSAqLworfTsKKyNlbmRpZgorCisvKgorICoJVCBJIE0gRSBDIE8gRCBFCisgKi8KK3N0cnVjdCB2NGwyX3RpbWVjb2RlIHsKKwlfX3UzMgl0eXBlOworCV9fdTMyCWZsYWdzOworCV9fdTgJZnJhbWVzOworCV9fdTgJc2Vjb25kczsKKwlfX3U4CW1pbnV0ZXM7CisJX191OAlob3VyczsKKwlfX3U4CXVzZXJiaXRzWzRdOworfTsKKworLyogIFR5cGUgICovCisjZGVmaW5lIFY0TDJfVENfVFlQRV8yNEZQUwkJMQorI2RlZmluZSBWNEwyX1RDX1RZUEVfMjVGUFMJCTIKKyNkZWZpbmUgVjRMMl9UQ19UWVBFXzMwRlBTCQkzCisjZGVmaW5lIFY0TDJfVENfVFlQRV81MEZQUwkJNAorI2RlZmluZSBWNEwyX1RDX1RZUEVfNjBGUFMJCTUKKworLyogIEZsYWdzICAqLworI2RlZmluZSBWNEwyX1RDX0ZMQUdfRFJPUEZSQU1FCQkweDAwMDEgLyogImRyb3AtZnJhbWUiIG1vZGUgKi8KKyNkZWZpbmUgVjRMMl9UQ19GTEFHX0NPTE9SRlJBTUUJCTB4MDAwMgorI2RlZmluZSBWNEwyX1RDX1VTRVJCSVRTX2ZpZWxkCQkweDAwMEMKKyNkZWZpbmUgVjRMMl9UQ19VU0VSQklUU19VU0VSREVGSU5FRAkweDAwMDAKKyNkZWZpbmUgVjRMMl9UQ19VU0VSQklUU184QklUQ0hBUlMJMHgwMDA4CisvKiBUaGUgYWJvdmUgaXMgYmFzZWQgb24gU01QVEUgdGltZWNvZGVzICovCisKK3N0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiB7CisJaW50IHF1YWxpdHk7CisKKwlpbnQgIEFQUG47ICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgQVBQIHNlZ21lbnQgdG8gYmUgd3JpdHRlbiwKKwkJCQkgKiBtdXN0IGJlIDAuLjE1ICovCisJaW50ICBBUFBfbGVuOyAgICAgICAgICAgLyogTGVuZ3RoIG9mIGRhdGEgaW4gSlBFRyBBUFBuIHNlZ21lbnQgKi8KKwljaGFyIEFQUF9kYXRhWzYwXTsgICAgICAvKiBEYXRhIGluIHRoZSBKUEVHIEFQUG4gc2VnbWVudC4gKi8KKworCWludCAgQ09NX2xlbjsgICAgICAgICAgIC8qIExlbmd0aCBvZiBkYXRhIGluIEpQRUcgQ09NIHNlZ21lbnQgKi8KKwljaGFyIENPTV9kYXRhWzYwXTsgICAgICAvKiBEYXRhIGluIEpQRUcgQ09NIHNlZ21lbnQgKi8KKworCV9fdTMyIGpwZWdfbWFya2VyczsgICAgIC8qIFdoaWNoIG1hcmtlcnMgc2hvdWxkIGdvIGludG8gdGhlIEpQRUcKKwkJCQkgKiBvdXRwdXQuIFVubGVzcyB5b3UgZXhhY3RseSBrbm93IHdoYXQKKwkJCQkgKiB5b3UgZG8sIGxlYXZlIHRoZW0gdW50b3VjaGVkLgorCQkJCSAqIElubHVkaW5nIGxlc3MgbWFya2VycyB3aWxsIG1ha2UgdGhlCisJCQkJICogcmVzdWx0aW5nIGNvZGUgc21hbGxlciwgYnV0IHRoZXJlIHdpbGwKKwkJCQkgKiBiZSBmZXdlciBhcHBsaWNhdGlvbnMgd2hpY2ggY2FuIHJlYWQgaXQuCisJCQkJICogVGhlIHByZXNlbmNlIG9mIHRoZSBBUFAgYW5kIENPTSBtYXJrZXIKKwkJCQkgKiBpcyBpbmZsdWVuY2VkIGJ5IEFQUF9sZW4gYW5kIENPTV9sZW4KKwkJCQkgKiBPTkxZLCBub3QgYnkgdGhpcyBwcm9wZXJ0eSEgKi8KKworI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0RIVCAoMTw8MykgICAgLyogRGVmaW5lIEh1ZmZtYW4gVGFibGVzICovCisjZGVmaW5lIFY0TDJfSlBFR19NQVJLRVJfRFFUICgxPDw0KSAgICAvKiBEZWZpbmUgUXVhbnRpemF0aW9uIFRhYmxlcyAqLworI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0RSSSAoMTw8NSkgICAgLyogRGVmaW5lIFJlc3RhcnQgSW50ZXJ2YWwgKi8KKyNkZWZpbmUgVjRMMl9KUEVHX01BUktFUl9DT00gKDE8PDYpICAgIC8qIENvbW1lbnQgc2VnbWVudCAqLworI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0FQUCAoMTw8NykgICAgLyogQXBwIHNlZ21lbnQsIGRyaXZlciB3aWxsCisJCQkJCSogYWxsd2F5cyB1c2UgQVBQMCAqLworfTsKKworLyoKKyAqCU0gRSBNIE8gUiBZIC0gTSBBIFAgUCBJIE4gRyAgIEIgVSBGIEYgRSBSIFMKKyAqLworc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgeworCV9fdTMyCQkJY291bnQ7CisJZW51bSB2NGwyX2J1Zl90eXBlICAgICAgdHlwZTsKKwllbnVtIHY0bDJfbWVtb3J5ICAgICAgICBtZW1vcnk7CisJX191MzIJCQlyZXNlcnZlZFsyXTsKK307CisKK3N0cnVjdCB2NGwyX2J1ZmZlciB7CisJX191MzIJCQlpbmRleDsKKwllbnVtIHY0bDJfYnVmX3R5cGUgICAgICB0eXBlOworCV9fdTMyCQkJYnl0ZXN1c2VkOworCV9fdTMyCQkJZmxhZ3M7CisJZW51bSB2NGwyX2ZpZWxkCQlmaWVsZDsKKwlzdHJ1Y3QgdGltZXZhbAkJdGltZXN0YW1wOworCXN0cnVjdCB2NGwyX3RpbWVjb2RlCXRpbWVjb2RlOworCV9fdTMyCQkJc2VxdWVuY2U7CisKKwkvKiBtZW1vcnkgbG9jYXRpb24gKi8KKwllbnVtIHY0bDJfbWVtb3J5ICAgICAgICBtZW1vcnk7CisJdW5pb24geworCQlfX3UzMiAgICAgICAgICAgb2Zmc2V0OworCQl1bnNpZ25lZCBsb25nICAgdXNlcnB0cjsKKwl9IG07CisJX191MzIJCQlsZW5ndGg7CisJX191MzIJCQlpbnB1dDsKKwlfX3UzMgkJCXJlc2VydmVkOworfTsKKworLyogIEZsYWdzIGZvciAnZmxhZ3MnIGZpZWxkICovCisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfTUFQUEVECTB4MDAwMSAgLyogQnVmZmVyIGlzIG1hcHBlZCAoZmxhZykgKi8KKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19RVUVVRUQJMHgwMDAyCS8qIEJ1ZmZlciBpcyBxdWV1ZWQgZm9yIHByb2Nlc3NpbmcgKi8KKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19ET05FCTB4MDAwNAkvKiBCdWZmZXIgaXMgcmVhZHkgKi8KKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19LRVlGUkFNRQkweDAwMDgJLyogSW1hZ2UgaXMgYSBrZXlmcmFtZSAoSS1mcmFtZSkgKi8KKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19QRlJBTUUJMHgwMDEwCS8qIEltYWdlIGlzIGEgUC1mcmFtZSAqLworI2RlZmluZSBWNEwyX0JVRl9GTEFHX0JGUkFNRQkweDAwMjAJLyogSW1hZ2UgaXMgYSBCLWZyYW1lICovCisvKiBCdWZmZXIgaXMgcmVhZHksIGJ1dCB0aGUgZGF0YSBjb250YWluZWQgd2l0aGluIGlzIGNvcnJ1cHRlZC4gKi8KKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19FUlJPUgkweDAwNDAKKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19USU1FQ09ERQkweDAxMDAJLyogdGltZWNvZGUgZmllbGQgaXMgdmFsaWQgKi8KKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19JTlBVVCAgICAgMHgwMjAwICAvKiBpbnB1dCBmaWVsZCBpcyB2YWxpZCAqLworCisvKgorICoJTyBWIEUgUiBMIEEgWSAgIFAgUiBFIFYgSSBFIFcKKyAqLworc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgeworCV9fdTMyCQkJY2FwYWJpbGl0eTsKKwlfX3UzMgkJCWZsYWdzOworLyogRklYTUU6IGluIHRoZW9yeSB3ZSBzaG91bGQgcGFzcyBzb21ldGhpbmcgbGlrZSBQQ0kgZGV2aWNlICsgbWVtb3J5CisgKiByZWdpb24gKyBvZmZzZXQgaW5zdGVhZCBvZiBzb21lIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwl2b2lkICAgICAgICAgICAgICAgICAgICAqYmFzZTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0CWZtdDsKK307CisvKiAgRmxhZ3MgZm9yIHRoZSAnY2FwYWJpbGl0eScgZmllbGQuIFJlYWQgb25seSAqLworI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0VYVEVSTk9WRVJMQVkJMHgwMDAxCisjZGVmaW5lIFY0TDJfRkJVRl9DQVBfQ0hST01BS0VZCQkweDAwMDIKKyNkZWZpbmUgVjRMMl9GQlVGX0NBUF9MSVNUX0NMSVBQSU5HICAgICAweDAwMDQKKyNkZWZpbmUgVjRMMl9GQlVGX0NBUF9CSVRNQVBfQ0xJUFBJTkcJMHgwMDA4CisjZGVmaW5lIFY0TDJfRkJVRl9DQVBfTE9DQUxfQUxQSEEJMHgwMDEwCisjZGVmaW5lIFY0TDJfRkJVRl9DQVBfR0xPQkFMX0FMUEhBCTB4MDAyMAorI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0xPQ0FMX0lOVl9BTFBIQQkweDAwNDAKKyNkZWZpbmUgVjRMMl9GQlVGX0NBUF9TUkNfQ0hST01BS0VZCTB4MDA4MAorLyogIEZsYWdzIGZvciB0aGUgJ2ZsYWdzJyBmaWVsZC4gKi8KKyNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfUFJJTUFSWQkJMHgwMDAxCisjZGVmaW5lIFY0TDJfRkJVRl9GTEFHX09WRVJMQVkJCTB4MDAwMgorI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19DSFJPTUFLRVkJMHgwMDA0CisjZGVmaW5lIFY0TDJfRkJVRl9GTEFHX0xPQ0FMX0FMUEhBCTB4MDAwOAorI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19HTE9CQUxfQUxQSEEJMHgwMDEwCisjZGVmaW5lIFY0TDJfRkJVRl9GTEFHX0xPQ0FMX0lOVl9BTFBIQQkweDAwMjAKKyNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfU1JDX0NIUk9NQUtFWQkweDAwNDAKKworc3RydWN0IHY0bDJfY2xpcCB7CisJc3RydWN0IHY0bDJfcmVjdCAgICAgICAgYzsKKwlzdHJ1Y3QgdjRsMl9jbGlwCSpuZXh0OworfTsKKworc3RydWN0IHY0bDJfd2luZG93IHsKKwlzdHJ1Y3QgdjRsMl9yZWN0ICAgICAgICB3OworCWVudW0gdjRsMl9maWVsZCAgCWZpZWxkOworCV9fdTMyCQkJY2hyb21ha2V5OworCXN0cnVjdCB2NGwyX2NsaXAJKmNsaXBzOworCV9fdTMyCQkJY2xpcGNvdW50OworCXZvaWQJCQkqYml0bWFwOworCV9fdTggICAgICAgICAgICAgICAgICAgIGdsb2JhbF9hbHBoYTsKK307CisKKy8qCisgKglDIEEgUCBUIFUgUiBFICAgUCBBIFIgQSBNIEUgVCBFIFIgUworICovCitzdHJ1Y3QgdjRsMl9jYXB0dXJlcGFybSB7CisJX191MzIJCSAgIGNhcGFiaWxpdHk7CSAgLyogIFN1cHBvcnRlZCBtb2RlcyAqLworCV9fdTMyCQkgICBjYXB0dXJlbW9kZTsJICAvKiAgQ3VycmVudCBtb2RlICovCisJc3RydWN0IHY0bDJfZnJhY3QgIHRpbWVwZXJmcmFtZTsgIC8qICBUaW1lIHBlciBmcmFtZSBpbiAuMXVzIHVuaXRzICovCisJX191MzIJCSAgIGV4dGVuZGVkbW9kZTsgIC8qICBEcml2ZXItc3BlY2lmaWMgZXh0ZW5zaW9ucyAqLworCV9fdTMyICAgICAgICAgICAgICByZWFkYnVmZmVyczsgICAvKiAgIyBvZiBidWZmZXJzIGZvciByZWFkICovCisJX191MzIJCSAgIHJlc2VydmVkWzRdOworfTsKKworLyogIEZsYWdzIGZvciAnY2FwYWJpbGl0eScgYW5kICdjYXB0dXJlbW9kZScgZmllbGRzICovCisjZGVmaW5lIFY0TDJfTU9ERV9ISUdIUVVBTElUWQkweDAwMDEJLyogIEhpZ2ggcXVhbGl0eSBpbWFnaW5nIG1vZGUgKi8KKyNkZWZpbmUgVjRMMl9DQVBfVElNRVBFUkZSQU1FCTB4MTAwMAkvKiAgdGltZXBlcmZyYW1lIGZpZWxkIGlzIHN1cHBvcnRlZCAqLworCitzdHJ1Y3QgdjRsMl9vdXRwdXRwYXJtIHsKKwlfX3UzMgkJICAgY2FwYWJpbGl0eTsJIC8qICBTdXBwb3J0ZWQgbW9kZXMgKi8KKwlfX3UzMgkJICAgb3V0cHV0bW9kZTsJIC8qICBDdXJyZW50IG1vZGUgKi8KKwlzdHJ1Y3QgdjRsMl9mcmFjdCAgdGltZXBlcmZyYW1lOyAvKiAgVGltZSBwZXIgZnJhbWUgaW4gc2Vjb25kcyAqLworCV9fdTMyCQkgICBleHRlbmRlZG1vZGU7IC8qICBEcml2ZXItc3BlY2lmaWMgZXh0ZW5zaW9ucyAqLworCV9fdTMyICAgICAgICAgICAgICB3cml0ZWJ1ZmZlcnM7IC8qICAjIG9mIGJ1ZmZlcnMgZm9yIHdyaXRlICovCisJX191MzIJCSAgIHJlc2VydmVkWzRdOworfTsKKworLyoKKyAqCUkgTiBQIFUgVCAgIEkgTSBBIEcgRSAgIEMgUiBPIFAgUCBJIE4gRworICovCitzdHJ1Y3QgdjRsMl9jcm9wY2FwIHsKKwllbnVtIHY0bDJfYnVmX3R5cGUgICAgICB0eXBlOworCXN0cnVjdCB2NGwyX3JlY3QgICAgICAgIGJvdW5kczsKKwlzdHJ1Y3QgdjRsMl9yZWN0ICAgICAgICBkZWZyZWN0OworCXN0cnVjdCB2NGwyX2ZyYWN0ICAgICAgIHBpeGVsYXNwZWN0OworfTsKKworc3RydWN0IHY0bDJfY3JvcCB7CisJZW51bSB2NGwyX2J1Zl90eXBlICAgICAgdHlwZTsKKwlzdHJ1Y3QgdjRsMl9yZWN0ICAgICAgICBjOworfTsKKworLyoKKyAqICAgICAgQSBOIEEgTCBPIEcgICBWIEkgRCBFIE8gICBTIFQgQSBOIEQgQSBSIEQKKyAqLworCit0eXBlZGVmIF9fdTY0IHY0bDJfc3RkX2lkOworCisvKiBvbmUgYml0IGZvciBlYWNoICovCisjZGVmaW5lIFY0TDJfU1REX1BBTF9CICAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDAwMSkKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0IxICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDAyKQorI2RlZmluZSBWNEwyX1NURF9QQUxfRyAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMDQpCisjZGVmaW5lIFY0TDJfU1REX1BBTF9IICAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDAwOCkKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0kgICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDEwKQorI2RlZmluZSBWNEwyX1NURF9QQUxfRCAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMjApCisjZGVmaW5lIFY0TDJfU1REX1BBTF9EMSAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDA0MCkKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0sgICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDgwKQorCisjZGVmaW5lIFY0TDJfU1REX1BBTF9NICAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDEwMCkKKyNkZWZpbmUgVjRMMl9TVERfUEFMX04gICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMjAwKQorI2RlZmluZSBWNEwyX1NURF9QQUxfTmMgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDA0MDApCisjZGVmaW5lIFY0TDJfU1REX1BBTF82MCAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDgwMCkKKworI2RlZmluZSBWNEwyX1NURF9OVFNDX00gICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDEwMDApCisjZGVmaW5lIFY0TDJfU1REX05UU0NfTV9KUCAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMjAwMCkKKyNkZWZpbmUgVjRMMl9TVERfTlRTQ180NDMgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDA0MDAwKQorI2RlZmluZSBWNEwyX1NURF9OVFNDX01fS1IgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDgwMDApCisKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU1fQiAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDEwMDAwKQorI2RlZmluZSBWNEwyX1NURF9TRUNBTV9EICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMjAwMDApCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0cgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDA0MDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU1fSCAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDgwMDAwKQorI2RlZmluZSBWNEwyX1NURF9TRUNBTV9LICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAxMDAwMDApCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0sxICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDIwMDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU1fTCAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwNDAwMDAwKQorI2RlZmluZSBWNEwyX1NURF9TRUNBTV9MQyAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDA4MDAwMDApCisKKy8qIEFUU0MvSERUViAqLworI2RlZmluZSBWNEwyX1NURF9BVFNDXzhfVlNCICAgICAoKHY0bDJfc3RkX2lkKTB4MDEwMDAwMDApCisjZGVmaW5lIFY0TDJfU1REX0FUU0NfMTZfVlNCICAgICgodjRsMl9zdGRfaWQpMHgwMjAwMDAwMCkKKworLyogRklYTUU6CisgICBBbHRob3VnaCBzdGRfaWQgaXMgNjQgYml0cywgdGhlcmUgaXMgYW4gaXNzdWUgb24gUFBDMzIgYXJjaGl0ZWN0dXJlIHRoYXQKKyAgIG1ha2VzIHN3aXRjaChfX3U2NCkgdG8gYnJlYWsuIFNvLCB0aGVyZSdzIGEgaGFjayBvbiB2NGwyLWNvbW1vbi5jIHJvdW5kaW5nCisgICB0aGlzIHZhbHVlIHRvIDMyIGJpdHMuCisgICBBcywgY3VycmVudGx5LCB0aGUgbWF4IHZhbHVlIGlzIGZvciBWNEwyX1NURF9BVFNDXzE2X1ZTQiAoMzAgYml0cyB3aWRlKSwKKyAgIGl0IHNob3VsZCB3b3JrIGZpbmUuIEhvd2V2ZXIsIGlmIG5lZWRlZCB0byBhZGQgbW9yZSB0aGFuIHR3byBzdGFuZGFyZHMsCisgICB2NGwyLWNvbW1vbi5jIHNob3VsZCBiZSBmaXhlZC4KKyAqLworCisvKiBzb21lIG1lcmdlZCBzdGFuZGFyZHMgKi8KKyNkZWZpbmUgVjRMMl9TVERfTU4JKFY0TDJfU1REX1BBTF9NfFY0TDJfU1REX1BBTF9OfFY0TDJfU1REX1BBTF9OY3xWNEwyX1NURF9OVFNDKQorI2RlZmluZSBWNEwyX1NURF9CCShWNEwyX1NURF9QQUxfQnxWNEwyX1NURF9QQUxfQjF8VjRMMl9TVERfU0VDQU1fQikKKyNkZWZpbmUgVjRMMl9TVERfR0gJKFY0TDJfU1REX1BBTF9HfFY0TDJfU1REX1BBTF9IfFY0TDJfU1REX1NFQ0FNX0d8VjRMMl9TVERfU0VDQU1fSCkKKyNkZWZpbmUgVjRMMl9TVERfREsJKFY0TDJfU1REX1BBTF9ES3xWNEwyX1NURF9TRUNBTV9ESykKKworLyogc29tZSBjb21tb24gbmVlZGVkIHN0dWZmICovCisjZGVmaW5lIFY0TDJfU1REX1BBTF9CRwkJKFY0TDJfU1REX1BBTF9CCQl8XAorCQkJCSBWNEwyX1NURF9QQUxfQjEJfFwKKwkJCQkgVjRMMl9TVERfUEFMX0cpCisjZGVmaW5lIFY0TDJfU1REX1BBTF9ESwkJKFY0TDJfU1REX1BBTF9ECQl8XAorCQkJCSBWNEwyX1NURF9QQUxfRDEJfFwKKwkJCQkgVjRMMl9TVERfUEFMX0spCisjZGVmaW5lIFY0TDJfU1REX1BBTAkJKFY0TDJfU1REX1BBTF9CRwl8XAorCQkJCSBWNEwyX1NURF9QQUxfREsJfFwKKwkJCQkgVjRMMl9TVERfUEFMX0gJCXxcCisJCQkJIFY0TDJfU1REX1BBTF9JKQorI2RlZmluZSBWNEwyX1NURF9OVFNDICAgICAgICAgICAoVjRMMl9TVERfTlRTQ19NCXxcCisJCQkJIFY0TDJfU1REX05UU0NfTV9KUCAgICAgfFwKKwkJCQkgVjRMMl9TVERfTlRTQ19NX0tSKQorI2RlZmluZSBWNEwyX1NURF9TRUNBTV9ESyAgICAgIAkoVjRMMl9TVERfU0VDQU1fRAl8XAorCQkJCSBWNEwyX1NURF9TRUNBTV9LCXxcCisJCQkJIFY0TDJfU1REX1NFQ0FNX0sxKQorI2RlZmluZSBWNEwyX1NURF9TRUNBTQkJKFY0TDJfU1REX1NFQ0FNX0IJfFwKKwkJCQkgVjRMMl9TVERfU0VDQU1fRwl8XAorCQkJCSBWNEwyX1NURF9TRUNBTV9ICXxcCisJCQkJIFY0TDJfU1REX1NFQ0FNX0RLCXxcCisJCQkJIFY0TDJfU1REX1NFQ0FNX0wgICAgICAgfFwKKwkJCQkgVjRMMl9TVERfU0VDQU1fTEMpCisKKyNkZWZpbmUgVjRMMl9TVERfNTI1XzYwCQkoVjRMMl9TVERfUEFMX00JCXxcCisJCQkJIFY0TDJfU1REX1BBTF82MAl8XAorCQkJCSBWNEwyX1NURF9OVFNDCQl8XAorCQkJCSBWNEwyX1NURF9OVFNDXzQ0MykKKyNkZWZpbmUgVjRMMl9TVERfNjI1XzUwCQkoVjRMMl9TVERfUEFMCQl8XAorCQkJCSBWNEwyX1NURF9QQUxfTgkJfFwKKwkJCQkgVjRMMl9TVERfUEFMX05jCXxcCisJCQkJIFY0TDJfU1REX1NFQ0FNKQorI2RlZmluZSBWNEwyX1NURF9BVFNDICAgICAgICAgICAoVjRMMl9TVERfQVRTQ184X1ZTQiAgICB8XAorCQkJCSBWNEwyX1NURF9BVFNDXzE2X1ZTQikKKworI2RlZmluZSBWNEwyX1NURF9VTktOT1dOICAgICAgICAwCisjZGVmaW5lIFY0TDJfU1REX0FMTCAgICAgICAgICAgIChWNEwyX1NURF81MjVfNjAJfFwKKwkJCQkgVjRMMl9TVERfNjI1XzUwKQorCitzdHJ1Y3QgdjRsMl9zdGFuZGFyZCB7CisJX191MzIJCSAgICAgaW5kZXg7CisJdjRsMl9zdGRfaWQgICAgICAgICAgaWQ7CisJX191OAkJICAgICBuYW1lWzI0XTsKKwlzdHJ1Y3QgdjRsMl9mcmFjdCAgICBmcmFtZXBlcmlvZDsgLyogRnJhbWVzLCBub3QgZmllbGRzICovCisJX191MzIJCSAgICAgZnJhbWVsaW5lczsKKwlfX3UzMgkJICAgICByZXNlcnZlZFs0XTsKK307CisKKy8qCisgKglWIEkgRCBFIE8JVCBJIE0gSSBOIEcgUwlEIFYJUCBSIEUgUyBFIFQKKyAqLworc3RydWN0IHY0bDJfZHZfcHJlc2V0IHsKKwlfX3UzMglwcmVzZXQ7CisJX191MzIJcmVzZXJ2ZWRbNF07Cit9OworCisvKgorICoJRCBWCVAgUiBFIFMgRSBUIFMJRSBOIFUgTSBFIFIgQSBUIEkgTyBOCisgKi8KK3N0cnVjdCB2NGwyX2R2X2VudW1fcHJlc2V0IHsKKwlfX3UzMglpbmRleDsKKwlfX3UzMglwcmVzZXQ7CisJX191OAluYW1lWzMyXTsgLyogTmFtZSBvZiB0aGUgcHJlc2V0IHRpbWluZyAqLworCV9fdTMyCXdpZHRoOworCV9fdTMyCWhlaWdodDsKKwlfX3UzMglyZXNlcnZlZFs0XTsKK307CisKKy8qCisgKiAJRCBWCVAgUiBFIFMgRSBUCVYgQSBMIFUgRSBTCisgKi8KKyNkZWZpbmUJCVY0TDJfRFZfSU5WQUxJRAkJMAorI2RlZmluZQkJVjRMMl9EVl80ODBQNTlfOTQJMSAvKiBCVC4xMzYyICovCisjZGVmaW5lCQlWNEwyX0RWXzU3NlA1MAkJMiAvKiBCVC4xMzYyICovCisjZGVmaW5lCQlWNEwyX0RWXzcyMFAyNAkJMyAvKiBTTVBURSAyOTZNICovCisjZGVmaW5lCQlWNEwyX0RWXzcyMFAyNQkJNCAvKiBTTVBURSAyOTZNICovCisjZGVmaW5lCQlWNEwyX0RWXzcyMFAzMAkJNSAvKiBTTVBURSAyOTZNICovCisjZGVmaW5lCQlWNEwyX0RWXzcyMFA1MAkJNiAvKiBTTVBURSAyOTZNICovCisjZGVmaW5lCQlWNEwyX0RWXzcyMFA1OV85NAk3IC8qIFNNUFRFIDI3NE0gKi8KKyNkZWZpbmUJCVY0TDJfRFZfNzIwUDYwCQk4IC8qIFNNUFRFIDI3NE0vMjk2TSAqLworI2RlZmluZQkJVjRMMl9EVl8xMDgwSTI5Xzk3CTkgLyogQlQuMTEyMC8gU01QVEUgMjc0TSAqLworI2RlZmluZQkJVjRMMl9EVl8xMDgwSTMwCQkxMCAvKiBCVC4xMTIwLyBTTVBURSAyNzRNICovCisjZGVmaW5lCQlWNEwyX0RWXzEwODBJMjUJCTExIC8qIEJULjExMjAgKi8KKyNkZWZpbmUJCVY0TDJfRFZfMTA4MEk1MAkJMTIgLyogU01QVEUgMjk2TSAqLworI2RlZmluZQkJVjRMMl9EVl8xMDgwSTYwCQkxMyAvKiBTTVBURSAyOTZNICovCisjZGVmaW5lCQlWNEwyX0RWXzEwODBQMjQJCTE0IC8qIFNNUFRFIDI5Nk0gKi8KKyNkZWZpbmUJCVY0TDJfRFZfMTA4MFAyNQkJMTUgLyogU01QVEUgMjk2TSAqLworI2RlZmluZQkJVjRMMl9EVl8xMDgwUDMwCQkxNiAvKiBTTVBURSAyOTZNICovCisjZGVmaW5lCQlWNEwyX0RWXzEwODBQNTAJCTE3IC8qIEJULjExMjAgKi8KKyNkZWZpbmUJCVY0TDJfRFZfMTA4MFA2MAkJMTggLyogQlQuMTEyMCAqLworCisvKgorICoJRCBWIAlCIFQJVCBJIE0gSSBOIEcgUworICovCisKKy8qIEJULjY1Ni9CVC4xMTIwIHRpbWluZyBkYXRhICovCitzdHJ1Y3QgdjRsMl9idF90aW1pbmdzIHsKKwlfX3UzMgl3aWR0aDsJCS8qIHdpZHRoIGluIHBpeGVscyAqLworCV9fdTMyCWhlaWdodDsJCS8qIGhlaWdodCBpbiBsaW5lcyAqLworCV9fdTMyCWludGVybGFjZWQ7CS8qIEludGVybGFjZWQgb3IgcHJvZ3Jlc3NpdmUgKi8KKwlfX3UzMglwb2xhcml0aWVzOwkvKiBQb3NpdGl2ZSBvciBuZWdhdGl2ZSBwb2xhcml0eSAqLworCV9fdTY0CXBpeGVsY2xvY2s7CS8qIFBpeGVsIGNsb2NrIGluIEhaLiBFeC4gNzQuMjVNSHotPjc0MjUwMDAwICovCisJX191MzIJaGZyb250cG9yY2g7CS8qIEhvcml6cG9udGFsIGZyb250IHBvcmNoIGluIHBpeGVscyAqLworCV9fdTMyCWhzeW5jOwkJLyogSG9yaXpvbnRhbCBTeW5jIGxlbmd0aCBpbiBwaXhlbHMgKi8KKwlfX3UzMgloYmFja3BvcmNoOwkvKiBIb3Jpem9udGFsIGJhY2sgcG9yY2ggaW4gcGl4ZWxzICovCisJX191MzIJdmZyb250cG9yY2g7CS8qIFZlcnRpY2FsIGZyb250IHBvcmNoIGluIHBpeGVscyAqLworCV9fdTMyCXZzeW5jOwkJLyogVmVydGljYWwgU3luYyBsZW5ndGggaW4gbGluZXMgKi8KKwlfX3UzMgl2YmFja3BvcmNoOwkvKiBWZXJ0aWNhbCBiYWNrIHBvcmNoIGluIGxpbmVzICovCisJX191MzIJaWxfdmZyb250cG9yY2g7CS8qIFZlcnRpY2FsIGZyb250IHBvcmNoIGZvciBib3R0b20gZmllbGQgb2YKKwkJCQkgKiBpbnRlcmxhY2VkIGZpZWxkIGZvcm1hdHMKKwkJCQkgKi8KKwlfX3UzMglpbF92c3luYzsJLyogVmVydGljYWwgc3luYyBsZW5ndGggZm9yIGJvdHRvbSBmaWVsZCBvZgorCQkJCSAqIGludGVybGFjZWQgZmllbGQgZm9ybWF0cworCQkJCSAqLworCV9fdTMyCWlsX3ZiYWNrcG9yY2g7CS8qIFZlcnRpY2FsIGJhY2sgcG9yY2ggZm9yIGJvdHRvbSBmaWVsZCBvZgorCQkJCSAqIGludGVybGFjZWQgZmllbGQgZm9ybWF0cworCQkJCSAqLworCV9fdTMyCXJlc2VydmVkWzE2XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBJbnRlcmxhY2VkIG9yIHByb2dyZXNzaXZlIGZvcm1hdCAqLworI2RlZmluZQlWNEwyX0RWX1BST0dSRVNTSVZFCTAKKyNkZWZpbmUJVjRMMl9EVl9JTlRFUkxBQ0VECTEKKworLyogUG9sYXJpdGllcy4gSWYgYml0IGlzIG5vdCBzZXQsIGl0IGlzIGFzc3VtZWQgdG8gYmUgbmVnYXRpdmUgcG9sYXJpdHkgKi8KKyNkZWZpbmUgVjRMMl9EVl9WU1lOQ19QT1NfUE9MCTB4MDAwMDAwMDEKKyNkZWZpbmUgVjRMMl9EVl9IU1lOQ19QT1NfUE9MCTB4MDAwMDAwMDIKKworCisvKiBEViB0aW1pbmdzICovCitzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzIHsKKwlfX3UzMiB0eXBlOworCXVuaW9uIHsKKwkJc3RydWN0IHY0bDJfYnRfdGltaW5ncwlidDsKKwkJX191MzIJcmVzZXJ2ZWRbMzJdOworCX07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogVmFsdWVzIGZvciB0aGUgdHlwZSBmaWVsZCAqLworI2RlZmluZSBWNEwyX0RWX0JUXzY1Nl8xMTIwCTAJLyogQlQuNjU2LzExMjAgdGltaW5nIHR5cGUgKi8KKworLyoKKyAqCVYgSSBEIEUgTyAgIEkgTiBQIFUgVCBTCisgKi8KK3N0cnVjdCB2NGwyX2lucHV0IHsKKwlfX3UzMgkgICAgIGluZGV4OwkJLyogIFdoaWNoIGlucHV0ICovCisJX191OAkgICAgIG5hbWVbMzJdOwkJLyogIExhYmVsICovCisJX191MzIJICAgICB0eXBlOwkJLyogIFR5cGUgb2YgaW5wdXQgKi8KKwlfX3UzMgkgICAgIGF1ZGlvc2V0OwkJLyogIEFzc29jaWF0ZWQgYXVkaW9zIChiaXRmaWVsZCkgKi8KKwlfX3UzMiAgICAgICAgdHVuZXI7ICAgICAgICAgICAgIC8qICBBc3NvY2lhdGVkIHR1bmVyICovCisJdjRsMl9zdGRfaWQgIHN0ZDsKKwlfX3UzMgkgICAgIHN0YXR1czsKKwlfX3UzMgkgICAgIGNhcGFiaWxpdGllczsKKwlfX3UzMgkgICAgIHJlc2VydmVkWzNdOworfTsKKworLyogIFZhbHVlcyBmb3IgdGhlICd0eXBlJyBmaWVsZCAqLworI2RlZmluZSBWNEwyX0lOUFVUX1RZUEVfVFVORVIJCTEKKyNkZWZpbmUgVjRMMl9JTlBVVF9UWVBFX0NBTUVSQQkJMgorCisvKiBmaWVsZCAnc3RhdHVzJyAtIGdlbmVyYWwgKi8KKyNkZWZpbmUgVjRMMl9JTl9TVF9OT19QT1dFUiAgICAweDAwMDAwMDAxICAvKiBBdHRhY2hlZCBkZXZpY2UgaXMgb2ZmICovCisjZGVmaW5lIFY0TDJfSU5fU1RfTk9fU0lHTkFMICAgMHgwMDAwMDAwMgorI2RlZmluZSBWNEwyX0lOX1NUX05PX0NPTE9SICAgIDB4MDAwMDAwMDQKKworLyogZmllbGQgJ3N0YXR1cycgLSBzZW5zb3Igb3JpZW50YXRpb24gKi8KKy8qIElmIHNlbnNvciBpcyBtb3VudGVkIHVwc2lkZSBkb3duIHNldCBib3RoIGJpdHMgKi8KKyNkZWZpbmUgVjRMMl9JTl9TVF9IRkxJUCAgICAgICAweDAwMDAwMDEwIC8qIEZyYW1lcyBhcmUgZmxpcHBlZCBob3Jpem9udGFsbHkgKi8KKyNkZWZpbmUgVjRMMl9JTl9TVF9WRkxJUCAgICAgICAweDAwMDAwMDIwIC8qIEZyYW1lcyBhcmUgZmxpcHBlZCB2ZXJ0aWNhbGx5ICovCisKKy8qIGZpZWxkICdzdGF0dXMnIC0gYW5hbG9nICovCisjZGVmaW5lIFY0TDJfSU5fU1RfTk9fSF9MT0NLICAgMHgwMDAwMDEwMCAgLyogTm8gaG9yaXpvbnRhbCBzeW5jIGxvY2sgKi8KKyNkZWZpbmUgVjRMMl9JTl9TVF9DT0xPUl9LSUxMICAweDAwMDAwMjAwICAvKiBDb2xvciBraWxsZXIgaXMgYWN0aXZlICovCisKKy8qIGZpZWxkICdzdGF0dXMnIC0gZGlnaXRhbCAqLworI2RlZmluZSBWNEwyX0lOX1NUX05PX1NZTkMgICAgIDB4MDAwMTAwMDAgIC8qIE5vIHN5bmNocm9uaXphdGlvbiBsb2NrICovCisjZGVmaW5lIFY0TDJfSU5fU1RfTk9fRVFVICAgICAgMHgwMDAyMDAwMCAgLyogTm8gZXF1YWxpemVyIGxvY2sgKi8KKyNkZWZpbmUgVjRMMl9JTl9TVF9OT19DQVJSSUVSICAweDAwMDQwMDAwICAvKiBDYXJyaWVyIHJlY292ZXJ5IGZhaWxlZCAqLworCisvKiBmaWVsZCAnc3RhdHVzJyAtIFZDUiBhbmQgc2V0LXRvcCBib3ggKi8KKyNkZWZpbmUgVjRMMl9JTl9TVF9NQUNST1ZJU0lPTiAweDAxMDAwMDAwICAvKiBNYWNyb3Zpc2lvbiBkZXRlY3RlZCAqLworI2RlZmluZSBWNEwyX0lOX1NUX05PX0FDQ0VTUyAgIDB4MDIwMDAwMDAgIC8qIENvbmRpdGlvbmFsIGFjY2VzcyBkZW5pZWQgKi8KKyNkZWZpbmUgVjRMMl9JTl9TVF9WVFIgICAgICAgICAweDA0MDAwMDAwICAvKiBWVFIgdGltZSBjb25zdGFudCAqLworCisvKiBjYXBhYmlsaXRpZXMgZmxhZ3MgKi8KKyNkZWZpbmUgVjRMMl9JTl9DQVBfUFJFU0VUUwkJMHgwMDAwMDAwMSAvKiBTdXBwb3J0cyBTX0RWX1BSRVNFVCAqLworI2RlZmluZSBWNEwyX0lOX0NBUF9DVVNUT01fVElNSU5HUwkweDAwMDAwMDAyIC8qIFN1cHBvcnRzIFNfRFZfVElNSU5HUyAqLworI2RlZmluZSBWNEwyX0lOX0NBUF9TVEQJCQkweDAwMDAwMDA0IC8qIFN1cHBvcnRzIFNfU1REICovCisKKy8qCisgKglWIEkgRCBFIE8gICBPIFUgVCBQIFUgVCBTCisgKi8KK3N0cnVjdCB2NGwyX291dHB1dCB7CisJX191MzIJICAgICBpbmRleDsJCS8qICBXaGljaCBvdXRwdXQgKi8KKwlfX3U4CSAgICAgbmFtZVszMl07CQkvKiAgTGFiZWwgKi8KKwlfX3UzMgkgICAgIHR5cGU7CQkvKiAgVHlwZSBvZiBvdXRwdXQgKi8KKwlfX3UzMgkgICAgIGF1ZGlvc2V0OwkJLyogIEFzc29jaWF0ZWQgYXVkaW9zIChiaXRmaWVsZCkgKi8KKwlfX3UzMgkgICAgIG1vZHVsYXRvcjsgICAgICAgICAvKiAgQXNzb2NpYXRlZCBtb2R1bGF0b3IgKi8KKwl2NGwyX3N0ZF9pZCAgc3RkOworCV9fdTMyCSAgICAgY2FwYWJpbGl0aWVzOworCV9fdTMyCSAgICAgcmVzZXJ2ZWRbM107Cit9OworLyogIFZhbHVlcyBmb3IgdGhlICd0eXBlJyBmaWVsZCAqLworI2RlZmluZSBWNEwyX09VVFBVVF9UWVBFX01PRFVMQVRPUgkJMQorI2RlZmluZSBWNEwyX09VVFBVVF9UWVBFX0FOQUxPRwkJCTIKKyNkZWZpbmUgVjRMMl9PVVRQVVRfVFlQRV9BTkFMT0dWR0FPVkVSTEFZCTMKKworLyogY2FwYWJpbGl0aWVzIGZsYWdzICovCisjZGVmaW5lIFY0TDJfT1VUX0NBUF9QUkVTRVRTCQkweDAwMDAwMDAxIC8qIFN1cHBvcnRzIFNfRFZfUFJFU0VUICovCisjZGVmaW5lIFY0TDJfT1VUX0NBUF9DVVNUT01fVElNSU5HUwkweDAwMDAwMDAyIC8qIFN1cHBvcnRzIFNfRFZfVElNSU5HUyAqLworI2RlZmluZSBWNEwyX09VVF9DQVBfU1RECQkweDAwMDAwMDA0IC8qIFN1cHBvcnRzIFNfU1REICovCisKKy8qCisgKglDIE8gTiBUIFIgTyBMIFMKKyAqLworc3RydWN0IHY0bDJfY29udHJvbCB7CisJX191MzIJCSAgICAgaWQ7CisJX19zMzIJCSAgICAgdmFsdWU7Cit9OworCitzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCB7CisJX191MzIgaWQ7CisJX191MzIgc2l6ZTsKKwlfX3UzMiByZXNlcnZlZDJbMV07CisJdW5pb24geworCQlfX3MzMiB2YWx1ZTsKKwkJX19zNjQgdmFsdWU2NDsKKwkJY2hhciAqc3RyaW5nOworCX07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzIHsKKwlfX3UzMiBjdHJsX2NsYXNzOworCV9fdTMyIGNvdW50OworCV9fdTMyIGVycm9yX2lkeDsKKwlfX3UzMiByZXNlcnZlZFsyXTsKKwlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqY29udHJvbHM7Cit9OworCisvKiAgVmFsdWVzIGZvciBjdHJsX2NsYXNzIGZpZWxkICovCisjZGVmaW5lIFY0TDJfQ1RSTF9DTEFTU19VU0VSIDB4MDA5ODAwMDAJLyogT2xkLXN0eWxlICd1c2VyJyBjb250cm9scyAqLworI2RlZmluZSBWNEwyX0NUUkxfQ0xBU1NfTVBFRyAweDAwOTkwMDAwCS8qIE1QRUctY29tcHJlc3Npb24gY29udHJvbHMgKi8KKyNkZWZpbmUgVjRMMl9DVFJMX0NMQVNTX0NBTUVSQSAweDAwOWEwMDAwCS8qIENhbWVyYSBjbGFzcyBjb250cm9scyAqLworI2RlZmluZSBWNEwyX0NUUkxfQ0xBU1NfRk1fVFggMHgwMDliMDAwMAkvKiBGTSBNb2R1bGF0b3IgY29udHJvbCBjbGFzcyAqLworCisjZGVmaW5lIFY0TDJfQ1RSTF9JRF9NQVNLICAgICAgCSAgKDB4MGZmZmZmZmYpCisjZGVmaW5lIFY0TDJfQ1RSTF9JRDJDTEFTUyhpZCkgICAgKChpZCkgJiAweDBmZmYwMDAwVUwpCisjZGVmaW5lIFY0TDJfQ1RSTF9EUklWRVJfUFJJVihpZCkgKCgoaWQpICYgMHhmZmZmKSA+PSAweDEwMDApCisKK2VudW0gdjRsMl9jdHJsX3R5cGUgeworCVY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIJICAgICA9IDEsCisJVjRMMl9DVFJMX1RZUEVfQk9PTEVBTgkgICAgID0gMiwKKwlWNEwyX0NUUkxfVFlQRV9NRU5VCSAgICAgPSAzLAorCVY0TDJfQ1RSTF9UWVBFX0JVVFRPTgkgICAgID0gNCwKKwlWNEwyX0NUUkxfVFlQRV9JTlRFR0VSNjQgICAgID0gNSwKKwlWNEwyX0NUUkxfVFlQRV9DVFJMX0NMQVNTICAgID0gNiwKKwlWNEwyX0NUUkxfVFlQRV9TVFJJTkcgICAgICAgID0gNywKK307CisKKy8qICBVc2VkIGluIHRoZSBWSURJT0NfUVVFUllDVFJMIGlvY3RsIGZvciBxdWVyeWluZyBjb250cm9scyAqLworc3RydWN0IHY0bDJfcXVlcnljdHJsIHsKKwlfX3UzMgkJICAgICBpZDsKKwllbnVtIHY0bDJfY3RybF90eXBlICB0eXBlOworCV9fdTgJCSAgICAgbmFtZVszMl07CS8qIFdoYXRldmVyICovCisJX19zMzIJCSAgICAgbWluaW11bTsJLyogTm90ZSBzaWduZWRuZXNzICovCisJX19zMzIJCSAgICAgbWF4aW11bTsKKwlfX3MzMgkJICAgICBzdGVwOworCV9fczMyCQkgICAgIGRlZmF1bHRfdmFsdWU7CisJX191MzIgICAgICAgICAgICAgICAgZmxhZ3M7CisJX191MzIJCSAgICAgcmVzZXJ2ZWRbMl07Cit9OworCisvKiAgVXNlZCBpbiB0aGUgVklESU9DX1FVRVJZTUVOVSBpb2N0bCBmb3IgcXVlcnlpbmcgbWVudSBpdGVtcyAqLworc3RydWN0IHY0bDJfcXVlcnltZW51IHsKKwlfX3UzMgkJaWQ7CisJX191MzIJCWluZGV4OworCV9fdTgJCW5hbWVbMzJdOwkvKiBXaGF0ZXZlciAqLworCV9fdTMyCQlyZXNlcnZlZDsKK307CisKKy8qICBDb250cm9sIGZsYWdzICAqLworI2RlZmluZSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRAkJMHgwMDAxCisjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX0dSQUJCRUQJCTB4MDAwMgorI2RlZmluZSBWNEwyX0NUUkxfRkxBR19SRUFEX09OTFkgCTB4MDAwNAorI2RlZmluZSBWNEwyX0NUUkxfRkxBR19VUERBVEUgCQkweDAwMDgKKyNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkUgCTB4MDAxMAorI2RlZmluZSBWNEwyX0NUUkxfRkxBR19TTElERVIgCQkweDAwMjAKKyNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfV1JJVEVfT05MWSAJMHgwMDQwCisKKy8qICBRdWVyeSBmbGFnLCB0byBiZSBPUmVkIHdpdGggdGhlIGNvbnRyb2wgSUQgKi8KKyNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfTkVYVF9DVFJMCTB4ODAwMDAwMDAKKworLyogIFVzZXItY2xhc3MgY29udHJvbCBJRHMgZGVmaW5lZCBieSBWNEwyICovCisjZGVmaW5lIFY0TDJfQ0lEX0JBU0UJCQkoVjRMMl9DVFJMX0NMQVNTX1VTRVIgfCAweDkwMCkKKyNkZWZpbmUgVjRMMl9DSURfVVNFUl9CQVNFIAkJVjRMMl9DSURfQkFTRQorLyogIElEcyByZXNlcnZlZCBmb3IgZHJpdmVyIHNwZWNpZmljIGNvbnRyb2xzICovCisjZGVmaW5lIFY0TDJfQ0lEX1BSSVZBVEVfQkFTRQkJMHgwODAwMDAwMAorCisjZGVmaW5lIFY0TDJfQ0lEX1VTRVJfQ0xBU1MgCQkoVjRMMl9DVFJMX0NMQVNTX1VTRVIgfCAxKQorI2RlZmluZSBWNEwyX0NJRF9CUklHSFRORVNTCQkoVjRMMl9DSURfQkFTRSswKQorI2RlZmluZSBWNEwyX0NJRF9DT05UUkFTVAkJKFY0TDJfQ0lEX0JBU0UrMSkKKyNkZWZpbmUgVjRMMl9DSURfU0FUVVJBVElPTgkJKFY0TDJfQ0lEX0JBU0UrMikKKyNkZWZpbmUgVjRMMl9DSURfSFVFCQkJKFY0TDJfQ0lEX0JBU0UrMykKKyNkZWZpbmUgVjRMMl9DSURfQVVESU9fVk9MVU1FCQkoVjRMMl9DSURfQkFTRSs1KQorI2RlZmluZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFCQkoVjRMMl9DSURfQkFTRSs2KQorI2RlZmluZSBWNEwyX0NJRF9BVURJT19CQVNTCQkoVjRMMl9DSURfQkFTRSs3KQorI2RlZmluZSBWNEwyX0NJRF9BVURJT19UUkVCTEUJCShWNEwyX0NJRF9CQVNFKzgpCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX01VVEUJCShWNEwyX0NJRF9CQVNFKzkpCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTCQkoVjRMMl9DSURfQkFTRSsxMCkKKyNkZWZpbmUgVjRMMl9DSURfQkxBQ0tfTEVWRUwJCShWNEwyX0NJRF9CQVNFKzExKSAvKiBEZXByZWNhdGVkICovCisjZGVmaW5lIFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRQkoVjRMMl9DSURfQkFTRSsxMikKKyNkZWZpbmUgVjRMMl9DSURfRE9fV0hJVEVfQkFMQU5DRQkoVjRMMl9DSURfQkFTRSsxMykKKyNkZWZpbmUgVjRMMl9DSURfUkVEX0JBTEFOQ0UJCShWNEwyX0NJRF9CQVNFKzE0KQorI2RlZmluZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0UJCShWNEwyX0NJRF9CQVNFKzE1KQorI2RlZmluZSBWNEwyX0NJRF9HQU1NQQkJCShWNEwyX0NJRF9CQVNFKzE2KQorI2RlZmluZSBWNEwyX0NJRF9XSElURU5FU1MJCShWNEwyX0NJRF9HQU1NQSkgLyogRGVwcmVjYXRlZCAqLworI2RlZmluZSBWNEwyX0NJRF9FWFBPU1VSRQkJKFY0TDJfQ0lEX0JBU0UrMTcpCisjZGVmaW5lIFY0TDJfQ0lEX0FVVE9HQUlOCQkoVjRMMl9DSURfQkFTRSsxOCkKKyNkZWZpbmUgVjRMMl9DSURfR0FJTgkJCShWNEwyX0NJRF9CQVNFKzE5KQorI2RlZmluZSBWNEwyX0NJRF9IRkxJUAkJCShWNEwyX0NJRF9CQVNFKzIwKQorI2RlZmluZSBWNEwyX0NJRF9WRkxJUAkJCShWNEwyX0NJRF9CQVNFKzIxKQorCisvKiBEZXByZWNhdGVkOyB1c2UgVjRMMl9DSURfUEFOX1JFU0VUIGFuZCBWNEwyX0NJRF9USUxUX1JFU0VUICovCisjZGVmaW5lIFY0TDJfQ0lEX0hDRU5URVIJCShWNEwyX0NJRF9CQVNFKzIyKQorI2RlZmluZSBWNEwyX0NJRF9WQ0VOVEVSCQkoVjRMMl9DSURfQkFTRSsyMykKKworI2RlZmluZSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWQkoVjRMMl9DSURfQkFTRSsyNCkKK2VudW0gdjRsMl9wb3dlcl9saW5lX2ZyZXF1ZW5jeSB7CisJVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfRElTQUJMRUQJPSAwLAorCVY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzUwSFoJPSAxLAorCVY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzYwSFoJPSAyLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfSFVFX0FVVE8JCQkoVjRMMl9DSURfQkFTRSsyNSkKKyNkZWZpbmUgVjRMMl9DSURfV0hJVEVfQkFMQU5DRV9URU1QRVJBVFVSRQkoVjRMMl9DSURfQkFTRSsyNikKKyNkZWZpbmUgVjRMMl9DSURfU0hBUlBORVNTCQkJKFY0TDJfQ0lEX0JBU0UrMjcpCisjZGVmaW5lIFY0TDJfQ0lEX0JBQ0tMSUdIVF9DT01QRU5TQVRJT04gCShWNEwyX0NJRF9CQVNFKzI4KQorI2RlZmluZSBWNEwyX0NJRF9DSFJPTUFfQUdDICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMjkpCisjZGVmaW5lIFY0TDJfQ0lEX0NPTE9SX0tJTExFUiAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSszMCkKKyNkZWZpbmUgVjRMMl9DSURfQ09MT1JGWAkJCShWNEwyX0NJRF9CQVNFKzMxKQorZW51bSB2NGwyX2NvbG9yZnggeworCVY0TDJfQ09MT1JGWF9OT05FCT0gMCwKKwlWNEwyX0NPTE9SRlhfQlcJCT0gMSwKKwlWNEwyX0NPTE9SRlhfU0VQSUEJPSAyLAorCVY0TDJfQ09MT1JGWF9ORUdBVElWRSA9IDMsCisJVjRMMl9DT0xPUkZYX0VNQk9TUyA9IDQsCisJVjRMMl9DT0xPUkZYX1NLRVRDSCA9IDUsCisJVjRMMl9DT0xPUkZYX1NLWV9CTFVFID0gNiwKKwlWNEwyX0NPTE9SRlhfR1JBU1NfR1JFRU4gPSA3LAorCVY0TDJfQ09MT1JGWF9TS0lOX1dISVRFTiA9IDgsCisJVjRMMl9DT0xPUkZYX1ZJVklEID0gOSwKK307CisjZGVmaW5lIFY0TDJfQ0lEX0FVVE9CUklHSFRORVNTCQkJKFY0TDJfQ0lEX0JBU0UrMzIpCisjZGVmaW5lIFY0TDJfQ0lEX0JBTkRfU1RPUF9GSUxURVIJCShWNEwyX0NJRF9CQVNFKzMzKQorCisjZGVmaW5lIFY0TDJfQ0lEX1JPVEFURQkJCQkoVjRMMl9DSURfQkFTRSszNCkKKyNkZWZpbmUgVjRMMl9DSURfQkdfQ09MT1IJCQkoVjRMMl9DSURfQkFTRSszNSkKKworI2RlZmluZSBWNEwyX0NJRF9DSFJPTUFfR0FJTiAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMzYpCisKKyNkZWZpbmUgVjRMMl9DSURfSUxMVU1JTkFUT1JTXzEJCQkoVjRMMl9DSURfQkFTRSszNykKKyNkZWZpbmUgVjRMMl9DSURfSUxMVU1JTkFUT1JTXzIJCQkoVjRMMl9DSURfQkFTRSszOCkKKworLyogbGFzdCBDSUQgKyAxICovCisjZGVmaW5lIFY0TDJfQ0lEX0xBU1RQMSAgICAgICAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSszOSkKKworLyogIE1QRUctY2xhc3MgY29udHJvbCBJRHMgZGVmaW5lZCBieSBWNEwyICovCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQkFTRSAJCQkoVjRMMl9DVFJMX0NMQVNTX01QRUcgfCAweDkwMCkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DTEFTUyAJCQkoVjRMMl9DVFJMX0NMQVNTX01QRUcgfCAxKQorCisvKiAgTVBFRyBzdHJlYW1zICovCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEUgCQkoVjRMMl9DSURfTVBFR19CQVNFKzApCitlbnVtIHY0bDJfbXBlZ19zdHJlYW1fdHlwZSB7CisJVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1BTICAgPSAwLCAvKiBNUEVHLTIgcHJvZ3JhbSBzdHJlYW0gKi8KKwlWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfVFMgICA9IDEsIC8qIE1QRUctMiB0cmFuc3BvcnQgc3RyZWFtICovCisJVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcxX1NTICAgPSAyLCAvKiBNUEVHLTEgc3lzdGVtIHN0cmVhbSAqLworCVY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9EVkQgID0gMywgLyogTVBFRy0yIERWRC1jb21wYXRpYmxlIHN0cmVhbSAqLworCVY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMV9WQ0QgID0gNCwgLyogTVBFRy0xIFZDRC1jb21wYXRpYmxlIHN0cmVhbSAqLworCVY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9TVkNEID0gNSwgLyogTVBFRy0yIFNWQ0QtY29tcGF0aWJsZSBzdHJlYW0gKi8KK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9QTVQgCQkoVjRMMl9DSURfTVBFR19CQVNFKzEpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9BVURJTyAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMikKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1ZJREVPIAkJKFY0TDJfQ0lEX01QRUdfQkFTRSszKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUENSIAkJKFY0TDJfQ0lEX01QRUdfQkFTRSs0KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QRVNfSURfQVVESU8gCShWNEwyX0NJRF9NUEVHX0JBU0UrNSkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19TVFJFQU1fUEVTX0lEX1ZJREVPIAkoVjRMMl9DSURfTVBFR19CQVNFKzYpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1ZCSV9GTVQgCQkoVjRMMl9DSURfTVBFR19CQVNFKzcpCitlbnVtIHY0bDJfbXBlZ19zdHJlYW1fdmJpX2ZtdCB7CisJVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkUgPSAwLCAgLyogTm8gVkJJIGluIHRoZSBNUEVHIHN0cmVhbSAqLworCVY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9JVlRWID0gMSwgIC8qIFZCSSBpbiBwcml2YXRlIHBhY2tldHMsIElWVFYgZm9ybWF0ICovCit9OworCisvKiAgTVBFRyBhdWRpbyAqLworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVEgCShWNEwyX0NJRF9NUEVHX0JBU0UrMTAwKQorZW51bSB2NGwyX21wZWdfYXVkaW9fc2FtcGxpbmdfZnJlcSB7CisJVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDQxMDAgPSAwLAorCVY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ4MDAwID0gMSwKKwlWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV8zMjAwMCA9IDIsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HIAkJKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDEpCitlbnVtIHY0bDJfbXBlZ19hdWRpb19lbmNvZGluZyB7CisJVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzEgPSAwLAorCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yID0gMSwKKwlWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMyA9IDIsCisJVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FBQyAgICAgPSAzLAorCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQzMgICAgID0gNCwKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTDFfQklUUkFURSAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMTAyKQorZW51bSB2NGwyX21wZWdfYXVkaW9fbDFfYml0cmF0ZSB7CisJVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMzJLICA9IDAsCisJVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfNjRLICA9IDEsCisJVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfOTZLICA9IDIsCisJVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMTI4SyA9IDMsCisJVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMTYwSyA9IDQsCisJVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMTkySyA9IDUsCisJVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMjI0SyA9IDYsCisJVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMjU2SyA9IDcsCisJVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMjg4SyA9IDgsCisJVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMzIwSyA9IDksCisJVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMzUySyA9IDEwLAorCVY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzM4NEsgPSAxMSwKKwlWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV80MTZLID0gMTIsCisJVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfNDQ4SyA9IDEzLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFIAkJKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDMpCitlbnVtIHY0bDJfbXBlZ19hdWRpb19sMl9iaXRyYXRlIHsKKwlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zMksgID0gMCwKKwlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV80OEsgID0gMSwKKwlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV81NksgID0gMiwKKwlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV82NEsgID0gMywKKwlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV84MEsgID0gNCwKKwlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV85NksgID0gNSwKKwlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8xMTJLID0gNiwKKwlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8xMjhLID0gNywKKwlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8xNjBLID0gOCwKKwlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8xOTJLID0gOSwKKwlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yMjRLID0gMTAsCisJVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMjU2SyA9IDExLAorCVY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzMyMEsgPSAxMiwKKwlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zODRLID0gMTMsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wzX0JJVFJBVEUgCQkoVjRMMl9DSURfTVBFR19CQVNFKzEwNCkKK2VudW0gdjRsMl9tcGVnX2F1ZGlvX2wzX2JpdHJhdGUgeworCVY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzMySyAgPSAwLAorCVY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzQwSyAgPSAxLAorCVY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzQ4SyAgPSAyLAorCVY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzU2SyAgPSAzLAorCVY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzY0SyAgPSA0LAorCVY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzgwSyAgPSA1LAorCVY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzk2SyAgPSA2LAorCVY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzExMksgPSA3LAorCVY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzEyOEsgPSA4LAorCVY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzE2MEsgPSA5LAorCVY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzE5MksgPSAxMCwKKwlWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8yMjRLID0gMTEsCisJVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMjU2SyA9IDEyLAorCVY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzMyMEsgPSAxMywKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERSAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMTA1KQorZW51bSB2NGwyX21wZWdfYXVkaW9fbW9kZSB7CisJVjRMMl9NUEVHX0FVRElPX01PREVfU1RFUkVPICAgICAgID0gMCwKKwlWNEwyX01QRUdfQVVESU9fTU9ERV9KT0lOVF9TVEVSRU8gPSAxLAorCVY0TDJfTVBFR19BVURJT19NT0RFX0RVQUwgICAgICAgICA9IDIsCisJVjRMMl9NUEVHX0FVRElPX01PREVfTU9OTyAgICAgICAgID0gMywKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT04gCShWNEwyX0NJRF9NUEVHX0JBU0UrMTA2KQorZW51bSB2NGwyX21wZWdfYXVkaW9fbW9kZV9leHRlbnNpb24geworCVY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF80ICA9IDAsCisJVjRMMl9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OX0JPVU5EXzggID0gMSwKKwlWNEwyX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT05fQk9VTkRfMTIgPSAyLAorCVY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF8xNiA9IDMsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VNUEhBU0lTIAkJKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDcpCitlbnVtIHY0bDJfbXBlZ19hdWRpb19lbXBoYXNpcyB7CisJVjRMMl9NUEVHX0FVRElPX0VNUEhBU0lTX05PTkUgICAgICAgICA9IDAsCisJVjRMMl9NUEVHX0FVRElPX0VNUEhBU0lTXzUwX0RJVl8xNV91UyA9IDEsCisJVjRMMl9NUEVHX0FVRElPX0VNUEhBU0lTX0NDSVRUX0oxNyAgICA9IDIsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0NSQyAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMTA4KQorZW51bSB2NGwyX21wZWdfYXVkaW9fY3JjIHsKKwlWNEwyX01QRUdfQVVESU9fQ1JDX05PTkUgID0gMCwKKwlWNEwyX01QRUdfQVVESU9fQ1JDX0NSQzE2ID0gMSwKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTVVURSAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMTA5KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0FBQ19CSVRSQVRFCQkoVjRMMl9DSURfTVBFR19CQVNFKzExMCkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19BQzNfQklUUkFURQkJKFY0TDJfQ0lEX01QRUdfQkFTRSsxMTEpCitlbnVtIHY0bDJfbXBlZ19hdWRpb19hYzNfYml0cmF0ZSB7CisJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzMySyAgPSAwLAorCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV80MEsgID0gMSwKKwlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNDhLICA9IDIsCisJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzU2SyAgPSAzLAorCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV82NEsgID0gNCwKKwlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfODBLICA9IDUsCisJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzk2SyAgPSA2LAorCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8xMTJLID0gNywKKwlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMTI4SyA9IDgsCisJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzE2MEsgPSA5LAorCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8xOTJLID0gMTAsCisJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzIyNEsgPSAxMSwKKwlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjU2SyA9IDEyLAorCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zMjBLID0gMTMsCisJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzM4NEsgPSAxNCwKKwlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNDQ4SyA9IDE1LAorCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV81MTJLID0gMTYsCisJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzU3NksgPSAxNywKKwlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNjQwSyA9IDE4LAorfTsKKworLyogIE1QRUcgdmlkZW8gKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORyAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMjAwKQorZW51bSB2NGwyX21wZWdfdmlkZW9fZW5jb2RpbmcgeworCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzEgICAgID0gMCwKKwlWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18yICAgICA9IDEsCisJVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfNF9BVkMgPSAyLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19BU1BFQ1QgCQkoVjRMMl9DSURfTVBFR19CQVNFKzIwMSkKK2VudW0gdjRsMl9tcGVnX3ZpZGVvX2FzcGVjdCB7CisJVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8xeDEgICAgID0gMCwKKwlWNEwyX01QRUdfVklERU9fQVNQRUNUXzR4MyAgICAgPSAxLAorCVY0TDJfTVBFR19WSURFT19BU1BFQ1RfMTZ4OSAgICA9IDIsCisJVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8yMjF4MTAwID0gMywKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fQl9GUkFNRVMgCQkoVjRMMl9DSURfTVBFR19CQVNFKzIwMikKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19HT1BfU0laRSAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMjAzKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9DTE9TVVJFIAkoVjRMMl9DSURfTVBFR19CQVNFKzIwNCkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19QVUxMRE9XTiAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMjA1KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERSAJKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDYpCitlbnVtIHY0bDJfbXBlZ192aWRlb19iaXRyYXRlX21vZGUgeworCVY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSID0gMCwKKwlWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX0NCUiA9IDEsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEUgCQkoVjRMMl9DSURfTVBFR19CQVNFKzIwNykKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUsgCShWNEwyX0NJRF9NUEVHX0JBU0UrMjA4KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1RFTVBPUkFMX0RFQ0lNQVRJT04gKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDkpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVVURSAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMjEwKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01VVEVfWVVWIAkJKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTEpCisKKy8qICBNUEVHLWNsYXNzIGNvbnRyb2wgSURzIHNwZWNpZmljIHRvIHRoZSBDWDIzNDF4IGRyaXZlciBhcyBkZWZpbmVkIGJ5IFY0TDIgKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UgCQkJCShWNEwyX0NUUkxfQ0xBU1NfTVBFRyB8IDB4MTAwMCkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSX01PREUgCShWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSswKQorZW51bSB2NGwyX21wZWdfY3gyMzQxeF92aWRlb19zcGF0aWFsX2ZpbHRlcl9tb2RlIHsKKwlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19TUEFUSUFMX0ZJTFRFUl9NT0RFX01BTlVBTCA9IDAsCisJVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERV9BVVRPICAgPSAxLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSIAkJKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzEpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEUgCShWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSsyKQorZW51bSB2NGwyX21wZWdfY3gyMzQxeF92aWRlb19sdW1hX3NwYXRpYWxfZmlsdGVyX3R5cGUgeworCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRV9PRkYgICAgICAgICAgICAgICAgICA9IDAsCisJVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzFEX0hPUiAgICAgICAgICAgICAgID0gMSwKKwlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEVfMURfVkVSVCAgICAgICAgICAgICAgPSAyLAorCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRV8yRF9IVl9TRVBBUkFCTEUgICAgICA9IDMsCisJVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzJEX1NZTV9OT05fU0VQQVJBQkxFID0gNCwKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfU1BBVElBTF9GSUxURVJfVFlQRSAJKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzMpCitlbnVtIHY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX2Nocm9tYV9zcGF0aWFsX2ZpbHRlcl90eXBlIHsKKwlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfU1BBVElBTF9GSUxURVJfVFlQRV9PRkYgICAgPSAwLAorCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzFEX0hPUiA9IDEsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSX01PREUgCShWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSs0KQorZW51bSB2NGwyX21wZWdfY3gyMzQxeF92aWRlb190ZW1wb3JhbF9maWx0ZXJfbW9kZSB7CisJVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSX01PREVfTUFOVUFMID0gMCwKKwlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19URU1QT1JBTF9GSUxURVJfTU9ERV9BVVRPICAgPSAxLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUiAJCShWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSs1KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFIAkJKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzYpCitlbnVtIHY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX21lZGlhbl9maWx0ZXJfdHlwZSB7CisJVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFX09GRiAgICAgID0gMCwKKwlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfSE9SICAgICAgPSAxLAorCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9WRVJUICAgICA9IDIsCisJVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFX0hPUl9WRVJUID0gMywKKwlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfRElBRyAgICAgPSA0LAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfTUVESUFOX0ZJTFRFUl9CT1RUT00gCShWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSs3KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9NRURJQU5fRklMVEVSX1RPUCAJKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzgpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfTUVESUFOX0ZJTFRFUl9CT1RUT00JKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzkpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfTUVESUFOX0ZJTFRFUl9UT1AgCShWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSsxMCkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1NUUkVBTV9JTlNFUlRfTkFWX1BBQ0tFVFMgCShWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSsxMSkKKworLyogIENhbWVyYSBjbGFzcyBjb250cm9sIElEcyAqLworI2RlZmluZSBWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSAJKFY0TDJfQ1RSTF9DTEFTU19DQU1FUkEgfCAweDkwMCkKKyNkZWZpbmUgVjRMMl9DSURfQ0FNRVJBX0NMQVNTIAkJKFY0TDJfQ1RSTF9DTEFTU19DQU1FUkEgfCAxKQorCisjZGVmaW5lIFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE8JCQkoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMSkKK2VudW0gIHY0bDJfZXhwb3N1cmVfYXV0b190eXBlIHsKKwlWNEwyX0VYUE9TVVJFX0FVVE8gPSAwLAorCVY0TDJfRVhQT1NVUkVfTUFOVUFMID0gMSwKKwlWNEwyX0VYUE9TVVJFX1NIVVRURVJfUFJJT1JJVFkgPSAyLAorCVY0TDJfRVhQT1NVUkVfQVBFUlRVUkVfUFJJT1JJVFkgPSAzCit9OworI2RlZmluZSBWNEwyX0NJRF9FWFBPU1VSRV9BQlNPTFVURQkJKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzIpCisjZGVmaW5lIFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE9fUFJJT1JJVFkJCShWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSszKQorCisjZGVmaW5lIFY0TDJfQ0lEX1BBTl9SRUxBVElWRQkJCShWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSs0KQorI2RlZmluZSBWNEwyX0NJRF9USUxUX1JFTEFUSVZFCQkJKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzUpCisjZGVmaW5lIFY0TDJfQ0lEX1BBTl9SRVNFVAkJCShWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSs2KQorI2RlZmluZSBWNEwyX0NJRF9USUxUX1JFU0VUCQkJKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzcpCisKKyNkZWZpbmUgVjRMMl9DSURfUEFOX0FCU09MVVRFCQkJKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzgpCisjZGVmaW5lIFY0TDJfQ0lEX1RJTFRfQUJTT0xVVEUJCQkoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrOSkKKworI2RlZmluZSBWNEwyX0NJRF9GT0NVU19BQlNPTFVURQkJCShWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxMCkKKyNkZWZpbmUgVjRMMl9DSURfRk9DVVNfUkVMQVRJVkUJCQkoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTEpCisjZGVmaW5lIFY0TDJfQ0lEX0ZPQ1VTX0FVVE8JCQkoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTIpCisKKyNkZWZpbmUgVjRMMl9DSURfWk9PTV9BQlNPTFVURQkJCShWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxMykKKyNkZWZpbmUgVjRMMl9DSURfWk9PTV9SRUxBVElWRQkJCShWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxNCkKKyNkZWZpbmUgVjRMMl9DSURfWk9PTV9DT05USU5VT1VTCQkoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTUpCisKKyNkZWZpbmUgVjRMMl9DSURfUFJJVkFDWQkJCShWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxNikKKworI2RlZmluZSBWNEwyX0NJRF9JUklTX0FCU09MVVRFCQkJKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzE3KQorI2RlZmluZSBWNEwyX0NJRF9JUklTX1JFTEFUSVZFCQkJKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzE4KQorCisvKiBGTSBNb2R1bGF0b3IgY2xhc3MgY29udHJvbCBJRHMgKi8KKyNkZWZpbmUgVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRQkJKFY0TDJfQ1RSTF9DTEFTU19GTV9UWCB8IDB4OTAwKQorI2RlZmluZSBWNEwyX0NJRF9GTV9UWF9DTEFTUwkJCShWNEwyX0NUUkxfQ0xBU1NfRk1fVFggfCAxKQorCisjZGVmaW5lIFY0TDJfQ0lEX1JEU19UWF9ERVZJQVRJT04JCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMSkKKyNkZWZpbmUgVjRMMl9DSURfUkRTX1RYX1BJCQkJKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAyKQorI2RlZmluZSBWNEwyX0NJRF9SRFNfVFhfUFRZCQkJKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAzKQorI2RlZmluZSBWNEwyX0NJRF9SRFNfVFhfUFNfTkFNRQkJCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgNSkKKyNkZWZpbmUgVjRMMl9DSURfUkRTX1RYX1JBRElPX1RFWFQJCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgNikKKworI2RlZmluZSBWNEwyX0NJRF9BVURJT19MSU1JVEVSX0VOQUJMRUQJCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgNjQpCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0xJTUlURVJfUkVMRUFTRV9USU1FCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgNjUpCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0xJTUlURVJfREVWSUFUSU9OCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgNjYpCisKKyNkZWZpbmUgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fRU5BQkxFRAkoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDgwKQorI2RlZmluZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9HQUlOCQkoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDgxKQorI2RlZmluZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9USFJFU0hPTEQJKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA4MikKKyNkZWZpbmUgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fQVRUQUNLX1RJTUUJKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA4MykKKyNkZWZpbmUgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fUkVMRUFTRV9USU1FCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgODQpCisKKyNkZWZpbmUgVjRMMl9DSURfUElMT1RfVE9ORV9FTkFCTEVECQkoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDk2KQorI2RlZmluZSBWNEwyX0NJRF9QSUxPVF9UT05FX0RFVklBVElPTgkJKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA5NykKKyNkZWZpbmUgVjRMMl9DSURfUElMT1RfVE9ORV9GUkVRVUVOQ1kJCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgOTgpCisKKyNkZWZpbmUgVjRMMl9DSURfVFVORV9QUkVFTVBIQVNJUwkJKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAxMTIpCitlbnVtIHY0bDJfcHJlZW1waGFzaXMgeworCVY0TDJfUFJFRU1QSEFTSVNfRElTQUJMRUQJPSAwLAorCVY0TDJfUFJFRU1QSEFTSVNfNTBfdVMJCT0gMSwKKwlWNEwyX1BSRUVNUEhBU0lTXzc1X3VTCQk9IDIsCit9OworI2RlZmluZSBWNEwyX0NJRF9UVU5FX1BPV0VSX0xFVkVMCQkoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDExMykKKyNkZWZpbmUgVjRMMl9DSURfVFVORV9BTlRFTk5BX0NBUEFDSVRPUgkJKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAxMTQpCisKKy8qCisgKglUIFUgTiBJIE4gRworICovCitzdHJ1Y3QgdjRsMl90dW5lciB7CisJX191MzIgICAgICAgICAgICAgICAgICAgaW5kZXg7CisJX191OAkJCW5hbWVbMzJdOworCWVudW0gdjRsMl90dW5lcl90eXBlICAgIHR5cGU7CisJX191MzIJCQljYXBhYmlsaXR5OworCV9fdTMyCQkJcmFuZ2Vsb3c7CisJX191MzIJCQlyYW5nZWhpZ2g7CisJX191MzIJCQlyeHN1YmNoYW5zOworCV9fdTMyCQkJYXVkbW9kZTsKKwlfX3MzMgkJCXNpZ25hbDsKKwlfX3MzMgkJCWFmYzsKKwlfX3UzMgkJCXJlc2VydmVkWzRdOworfTsKKworc3RydWN0IHY0bDJfbW9kdWxhdG9yIHsKKwlfX3UzMgkJCWluZGV4OworCV9fdTgJCQluYW1lWzMyXTsKKwlfX3UzMgkJCWNhcGFiaWxpdHk7CisJX191MzIJCQlyYW5nZWxvdzsKKwlfX3UzMgkJCXJhbmdlaGlnaDsKKwlfX3UzMgkJCXR4c3ViY2hhbnM7CisJX191MzIJCQlyZXNlcnZlZFs0XTsKK307CisKKy8qICBGbGFncyBmb3IgdGhlICdjYXBhYmlsaXR5JyBmaWVsZCAqLworI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9MT1cJCTB4MDAwMQorI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9OT1JNCQkweDAwMDIKKyNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfU1RFUkVPCQkweDAwMTAKKyNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfTEFORzIJCTB4MDAyMAorI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9TQVAJCTB4MDAyMAorI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9MQU5HMQkJMHgwMDQwCisjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX1JEUwkJMHgwMDgwCisjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX1JEU19CTE9DS19JTwkweDAxMDAKKyNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfUkRTX0NPTlRST0xTCTB4MDIwMAorCisvKiAgRmxhZ3MgZm9yIHRoZSAncnhzdWJjaGFucycgZmllbGQgKi8KKyNkZWZpbmUgVjRMMl9UVU5FUl9TVUJfTU9OTwkJMHgwMDAxCisjZGVmaW5lIFY0TDJfVFVORVJfU1VCX1NURVJFTwkJMHgwMDAyCisjZGVmaW5lIFY0TDJfVFVORVJfU1VCX0xBTkcyCQkweDAwMDQKKyNkZWZpbmUgVjRMMl9UVU5FUl9TVUJfU0FQCQkweDAwMDQKKyNkZWZpbmUgVjRMMl9UVU5FUl9TVUJfTEFORzEJCTB4MDAwOAorI2RlZmluZSBWNEwyX1RVTkVSX1NVQl9SRFMJCTB4MDAxMAorCisvKiAgVmFsdWVzIGZvciB0aGUgJ2F1ZG1vZGUnIGZpZWxkICovCisjZGVmaW5lIFY0TDJfVFVORVJfTU9ERV9NT05PCQkweDAwMDAKKyNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX1NURVJFTwkJMHgwMDAxCisjZGVmaW5lIFY0TDJfVFVORVJfTU9ERV9MQU5HMgkJMHgwMDAyCisjZGVmaW5lIFY0TDJfVFVORVJfTU9ERV9TQVAJCTB4MDAwMgorI2RlZmluZSBWNEwyX1RVTkVSX01PREVfTEFORzEJCTB4MDAwMworI2RlZmluZSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzIJMHgwMDA0CisKK3N0cnVjdCB2NGwyX2ZyZXF1ZW5jeSB7CisJX191MzIJCSAgICAgIHR1bmVyOworCWVudW0gdjRsMl90dW5lcl90eXBlICB0eXBlOworCV9fdTMyCQkgICAgICBmcmVxdWVuY3k7CisJX191MzIJCSAgICAgIHJlc2VydmVkWzhdOworfTsKKworc3RydWN0IHY0bDJfaHdfZnJlcV9zZWVrIHsKKwlfX3UzMgkJICAgICAgdHVuZXI7CisJZW51bSB2NGwyX3R1bmVyX3R5cGUgIHR5cGU7CisJX191MzIJCSAgICAgIHNlZWtfdXB3YXJkOworCV9fdTMyCQkgICAgICB3cmFwX2Fyb3VuZDsKKwlfX3UzMgkJICAgICAgc3BhY2luZzsKKwlfX3UzMgkJICAgICAgcmVzZXJ2ZWRbN107Cit9OworCisvKgorICoJUiBEIFMKKyAqLworCitzdHJ1Y3QgdjRsMl9yZHNfZGF0YSB7CisJX191OCAJbHNiOworCV9fdTggCW1zYjsKKwlfX3U4IAlibG9jazsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIFY0TDJfUkRTX0JMT0NLX01TSyAJIDB4NworI2RlZmluZSBWNEwyX1JEU19CTE9DS19BIAkgMAorI2RlZmluZSBWNEwyX1JEU19CTE9DS19CIAkgMQorI2RlZmluZSBWNEwyX1JEU19CTE9DS19DIAkgMgorI2RlZmluZSBWNEwyX1JEU19CTE9DS19EIAkgMworI2RlZmluZSBWNEwyX1JEU19CTE9DS19DX0FMVCAJIDQKKyNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfSU5WQUxJRCAJIDcKKworI2RlZmluZSBWNEwyX1JEU19CTE9DS19DT1JSRUNURUQgMHg0MAorI2RlZmluZSBWNEwyX1JEU19CTE9DS19FUlJPUiAJIDB4ODAKKworLyoKKyAqCUEgVSBEIEkgTworICovCitzdHJ1Y3QgdjRsMl9hdWRpbyB7CisJX191MzIJaW5kZXg7CisJX191OAluYW1lWzMyXTsKKwlfX3UzMgljYXBhYmlsaXR5OworCV9fdTMyCW1vZGU7CisJX191MzIJcmVzZXJ2ZWRbMl07Cit9OworCisvKiAgRmxhZ3MgZm9yIHRoZSAnY2FwYWJpbGl0eScgZmllbGQgKi8KKyNkZWZpbmUgVjRMMl9BVURDQVBfU1RFUkVPCQkweDAwMDAxCisjZGVmaW5lIFY0TDJfQVVEQ0FQX0FWTAkJCTB4MDAwMDIKKworLyogIEZsYWdzIGZvciB0aGUgJ21vZGUnIGZpZWxkICovCisjZGVmaW5lIFY0TDJfQVVETU9ERV9BVkwJCTB4MDAwMDEKKworc3RydWN0IHY0bDJfYXVkaW9vdXQgeworCV9fdTMyCWluZGV4OworCV9fdTgJbmFtZVszMl07CisJX191MzIJY2FwYWJpbGl0eTsKKwlfX3UzMgltb2RlOworCV9fdTMyCXJlc2VydmVkWzJdOworfTsKKworLyoKKyAqCU0gUCBFIEcgICBTIEUgUiBWIEkgQyBFIFMKKyAqCisgKglOT1RFOiBFWFBFUklNRU5UQUwgQVBJCisgKi8KKyNpZiAxCisjZGVmaW5lIFY0TDJfRU5DX0lEWF9GUkFNRV9JICAgICgwKQorI2RlZmluZSBWNEwyX0VOQ19JRFhfRlJBTUVfUCAgICAoMSkKKyNkZWZpbmUgVjRMMl9FTkNfSURYX0ZSQU1FX0IgICAgKDIpCisjZGVmaW5lIFY0TDJfRU5DX0lEWF9GUkFNRV9NQVNLICgweGYpCisKK3N0cnVjdCB2NGwyX2VuY19pZHhfZW50cnkgeworCV9fdTY0IG9mZnNldDsKKwlfX3U2NCBwdHM7CisJX191MzIgbGVuZ3RoOworCV9fdTMyIGZsYWdzOworCV9fdTMyIHJlc2VydmVkWzJdOworfTsKKworI2RlZmluZSBWNEwyX0VOQ19JRFhfRU5UUklFUyAoNjQpCitzdHJ1Y3QgdjRsMl9lbmNfaWR4IHsKKwlfX3UzMiBlbnRyaWVzOworCV9fdTMyIGVudHJpZXNfY2FwOworCV9fdTMyIHJlc2VydmVkWzRdOworCXN0cnVjdCB2NGwyX2VuY19pZHhfZW50cnkgZW50cnlbVjRMMl9FTkNfSURYX0VOVFJJRVNdOworfTsKKworCisjZGVmaW5lIFY0TDJfRU5DX0NNRF9TVEFSVCAgICAgICgwKQorI2RlZmluZSBWNEwyX0VOQ19DTURfU1RPUCAgICAgICAoMSkKKyNkZWZpbmUgVjRMMl9FTkNfQ01EX1BBVVNFICAgICAgKDIpCisjZGVmaW5lIFY0TDJfRU5DX0NNRF9SRVNVTUUgICAgICgzKQorCisvKiBGbGFncyBmb3IgVjRMMl9FTkNfQ01EX1NUT1AgKi8KKyNkZWZpbmUgVjRMMl9FTkNfQ01EX1NUT1BfQVRfR09QX0VORCAgICAoMSA8PCAwKQorCitzdHJ1Y3QgdjRsMl9lbmNvZGVyX2NtZCB7CisJX191MzIgY21kOworCV9fdTMyIGZsYWdzOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCV9fdTMyIGRhdGFbOF07CisJCX0gcmF3OworCX07Cit9OworCisjZW5kaWYKKworCisvKgorICoJRCBBIFQgQSAgIFMgRSBSIFYgSSBDIEUgUyAgICggViBCIEkgKQorICoKKyAqCURhdGEgc2VydmljZXMgQVBJIGJ5IE1pY2hhZWwgU2NoaW1laworICovCisKKy8qIFJhdyBWQkkgKi8KK3N0cnVjdCB2NGwyX3ZiaV9mb3JtYXQgeworCV9fdTMyCXNhbXBsaW5nX3JhdGU7CQkvKiBpbiAxIEh6ICovCisJX191MzIJb2Zmc2V0OworCV9fdTMyCXNhbXBsZXNfcGVyX2xpbmU7CisJX191MzIJc2FtcGxlX2Zvcm1hdDsJCS8qIFY0TDJfUElYX0ZNVF8qICovCisJX19zMzIJc3RhcnRbMl07CisJX191MzIJY291bnRbMl07CisJX191MzIJZmxhZ3M7CQkJLyogVjRMMl9WQklfKiAqLworCV9fdTMyCXJlc2VydmVkWzJdOwkJLyogbXVzdCBiZSB6ZXJvICovCit9OworCisvKiAgVkJJIGZsYWdzICAqLworI2RlZmluZSBWNEwyX1ZCSV9VTlNZTkMJCSgxIDw8IDApCisjZGVmaW5lIFY0TDJfVkJJX0lOVEVSTEFDRUQJKDEgPDwgMSkKKworLyogU2xpY2VkIFZCSQorICoKKyAqICAgIFRoaXMgaW1wbGVtZW50cyBpcyBhIHByb3Bvc2FsIFY0TDIgQVBJIHRvIGFsbG93IFNMSUNFRCBWQkkKKyAqIHJlcXVpcmVkIGZvciBzb21lIGhhcmR3YXJlIGVuY29kZXJzLiBJdCBzaG91bGQgY2hhbmdlIHdpdGhvdXQKKyAqIG5vdGljZSBpbiB0aGUgZGVmaW5pdGl2ZSBpbXBsZW1lbnRhdGlvbi4KKyAqLworCitzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCB7CisJX191MTYgICBzZXJ2aWNlX3NldDsKKwkvKiBzZXJ2aWNlX2xpbmVzWzBdWy4uLl0gc3BlY2lmaWVzIGxpbmVzIDAtMjMgKDEtMjMgdXNlZCkgb2YgdGhlIGZpcnN0IGZpZWxkCisJICAgc2VydmljZV9saW5lc1sxXVsuLi5dIHNwZWNpZmllcyBsaW5lcyAwLTIzICgxLTIzIHVzZWQpIG9mIHRoZSBzZWNvbmQgZmllbGQKKwkJCQkgKGVxdWFscyBmcmFtZSBsaW5lcyAzMTMtMzM2IGZvciA2MjUgbGluZSB2aWRlbworCQkJCSAgc3RhbmRhcmRzLCAyNjMtMjg2IGZvciA1MjUgbGluZSBzdGFuZGFyZHMpICovCisJX191MTYgICBzZXJ2aWNlX2xpbmVzWzJdWzI0XTsKKwlfX3UzMiAgIGlvX3NpemU7CisJX191MzIgICByZXNlcnZlZFsyXTsgICAgICAgICAgICAvKiBtdXN0IGJlIHplcm8gKi8KK307CisKKy8qIFRlbGV0ZXh0IFdvcmxkIFN5c3RlbSBUZWxldGV4dAorICAgKFdTVCksIGRlZmluZWQgb24gSVRVLVIgQlQuNjUzLTIgKi8KKyNkZWZpbmUgVjRMMl9TTElDRURfVEVMRVRFWFRfQiAgICAgICAgICAoMHgwMDAxKQorLyogVmlkZW8gUHJvZ3JhbSBTeXN0ZW0sIGRlZmluZWQgb24gRVRTIDMwMCAyMzEqLworI2RlZmluZSBWNEwyX1NMSUNFRF9WUFMgICAgICAgICAgICAgICAgICgweDA0MDApCisvKiBDbG9zZWQgQ2FwdGlvbiwgZGVmaW5lZCBvbiBFSUEtNjA4ICovCisjZGVmaW5lIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1ICAgICAgICAgKDB4MTAwMCkKKy8qIFdpZGUgU2NyZWVuIFN5c3RlbSwgZGVmaW5lZCBvbiBJVFUtUiBCVDExMTkuMSAqLworI2RlZmluZSBWNEwyX1NMSUNFRF9XU1NfNjI1ICAgICAgICAgICAgICgweDQwMDApCisKKyNkZWZpbmUgVjRMMl9TTElDRURfVkJJXzUyNSAgICAgICAgICAgICAoVjRMMl9TTElDRURfQ0FQVElPTl81MjUpCisjZGVmaW5lIFY0TDJfU0xJQ0VEX1ZCSV82MjUgICAgICAgICAgICAgKFY0TDJfU0xJQ0VEX1RFTEVURVhUX0IgfCBWNEwyX1NMSUNFRF9WUFMgfCBWNEwyX1NMSUNFRF9XU1NfNjI1KQorCitzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2NhcCB7CisJX191MTYgICBzZXJ2aWNlX3NldDsKKwkvKiBzZXJ2aWNlX2xpbmVzWzBdWy4uLl0gc3BlY2lmaWVzIGxpbmVzIDAtMjMgKDEtMjMgdXNlZCkgb2YgdGhlIGZpcnN0IGZpZWxkCisJICAgc2VydmljZV9saW5lc1sxXVsuLi5dIHNwZWNpZmllcyBsaW5lcyAwLTIzICgxLTIzIHVzZWQpIG9mIHRoZSBzZWNvbmQgZmllbGQKKwkJCQkgKGVxdWFscyBmcmFtZSBsaW5lcyAzMTMtMzM2IGZvciA2MjUgbGluZSB2aWRlbworCQkJCSAgc3RhbmRhcmRzLCAyNjMtMjg2IGZvciA1MjUgbGluZSBzdGFuZGFyZHMpICovCisJX191MTYgICBzZXJ2aWNlX2xpbmVzWzJdWzI0XTsKKwllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZTsKKwlfX3UzMiAgIHJlc2VydmVkWzNdOyAgICAvKiBtdXN0IGJlIDAgKi8KK307CisKK3N0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSB7CisJX191MzIgICBpZDsKKwlfX3UzMiAgIGZpZWxkOyAgICAgICAgICAvKiAwOiBmaXJzdCBmaWVsZCwgMTogc2Vjb25kIGZpZWxkICovCisJX191MzIgICBsaW5lOyAgICAgICAgICAgLyogMS0yMyAqLworCV9fdTMyICAgcmVzZXJ2ZWQ7ICAgICAgIC8qIG11c3QgYmUgMCAqLworCV9fdTggICAgZGF0YVs0OF07Cit9OworCisvKgorICogU2xpY2VkIFZCSSBkYXRhIGluc2VydGVkIGludG8gTVBFRyBTdHJlYW1zCisgKi8KKworLyoKKyAqIFY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9JVlRWOgorICoKKyAqIFN0cnVjdHVyZSBvZiBwYXlsb2FkIGNvbnRhaW5lZCBpbiBhbiBNUEVHIDIgUHJpdmF0ZSBTdHJlYW0gMSBQRVMgUGFja2V0IGluIGFuCisgKiBNUEVHLTIgUHJvZ3JhbSBQYWNrIHRoYXQgY29udGFpbnMgVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX0lWVFYgU2xpY2VkIFZCSQorICogZGF0YQorICoKKyAqIE5vdGUsIHRoZSBNUEVHLTIgUHJvZ3JhbSBQYWNrIGFuZCBQcml2YXRlIFN0cmVhbSAxIFBFUyBwYWNrZXQgaGVhZGVyCisgKiBkZWZpbml0aW9ucyBhcmUgbm90IGluY2x1ZGVkIGhlcmUuICBTZWUgdGhlIE1QRUctMiBzcGVjaWZpY2F0aW9ucyBmb3IgZGV0YWlscworICogb24gdGhlc2UgaGVhZGVycy4KKyAqLworCisvKiBMaW5lIHR5cGUgSURzICovCisjZGVmaW5lIFY0TDJfTVBFR19WQklfSVZUVl9URUxFVEVYVF9CICAgICAoMSkKKyNkZWZpbmUgVjRMMl9NUEVHX1ZCSV9JVlRWX0NBUFRJT05fNTI1ICAgICg0KQorI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfV1NTXzYyNSAgICAgICAgKDUpCisjZGVmaW5lIFY0TDJfTVBFR19WQklfSVZUVl9WUFMgICAgICAgICAgICAoNykKKworc3RydWN0IHY0bDJfbXBlZ192YmlfaXR2MF9saW5lIHsKKwlfX3U4IGlkOwkvKiBPbmUgb2YgVjRMMl9NUEVHX1ZCSV9JVlRWXyogYWJvdmUgKi8KKwlfX3U4IGRhdGFbNDJdOwkvKiBTbGljZWQgVkJJIGRhdGEgZm9yIHRoZSBsaW5lICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHY0bDJfbXBlZ192YmlfaXR2MCB7CisJX19sZTMyIGxpbmVtYXNrWzJdOyAvKiBCaXRtYXNrcyBvZiBWQkkgc2VydmljZSBsaW5lcyBwcmVzZW50ICovCisJc3RydWN0IHY0bDJfbXBlZ192YmlfaXR2MF9saW5lIGxpbmVbMzVdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCB2NGwyX21wZWdfdmJpX0lUVjAgeworCXN0cnVjdCB2NGwyX21wZWdfdmJpX2l0djBfbGluZSBsaW5lWzM2XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIFY0TDJfTVBFR19WQklfSVZUVl9NQUdJQzAJIml0djAiCisjZGVmaW5lIFY0TDJfTVBFR19WQklfSVZUVl9NQUdJQzEJIklUVjAiCisKK3N0cnVjdCB2NGwyX21wZWdfdmJpX2ZtdF9pdnR2IHsKKwlfX3U4IG1hZ2ljWzRdOworCXVuaW9uIHsKKwkJc3RydWN0IHY0bDJfbXBlZ192YmlfaXR2MCBpdHYwOworCQlzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9JVFYwIElUVjA7CisJfTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICoJQSBHIEcgUiBFIEcgQSBUIEUgICBTIFQgUiBVIEMgVCBVIFIgRSBTCisgKi8KKworLyoJU3RyZWFtIGRhdGEgZm9ybWF0CisgKi8KK3N0cnVjdCB2NGwyX2Zvcm1hdCB7CisJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGU7CisJdW5pb24geworCQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0CQlwaXg7ICAgICAvKiBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgKi8KKwkJc3RydWN0IHY0bDJfd2luZG93CQl3aW47ICAgICAvKiBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVkgKi8KKwkJc3RydWN0IHY0bDJfdmJpX2Zvcm1hdAkJdmJpOyAgICAgLyogVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSAqLworCQlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdAlzbGljZWQ7ICAvKiBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRSAqLworCQlfX3U4CXJhd19kYXRhWzIwMF07ICAgICAgICAgICAgICAgICAgIC8qIHVzZXItZGVmaW5lZCAqLworCX0gZm10OworfTsKKworCisvKglTdHJlYW0gdHlwZS1kZXBlbmRlbnQgcGFyYW1ldGVycworICovCitzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtIHsKKwllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZTsKKwl1bmlvbiB7CisJCXN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtCWNhcHR1cmU7CisJCXN0cnVjdCB2NGwyX291dHB1dHBhcm0Jb3V0cHV0OworCQlfX3U4CXJhd19kYXRhWzIwMF07ICAvKiB1c2VyLWRlZmluZWQgKi8KKwl9IHBhcm07Cit9OworCisvKgorICoJRSBWIEUgTiBUIFMKKyAqLworCisjZGVmaW5lIFY0TDJfRVZFTlRfQUxMCQkJCTAKKyNkZWZpbmUgVjRMMl9FVkVOVF9WU1lOQwkJCTEKKyNkZWZpbmUgVjRMMl9FVkVOVF9FT1MJCQkJMgorI2RlZmluZSBWNEwyX0VWRU5UX1BSSVZBVEVfU1RBUlQJCTB4MDgwMDAwMDAKKworLyogUGF5bG9hZCBmb3IgVjRMMl9FVkVOVF9WU1lOQyAqLworc3RydWN0IHY0bDJfZXZlbnRfdnN5bmMgeworCS8qIENhbiBiZSBWNEwyX0ZJRUxEX0FOWSwgX05PTkUsIF9UT1Agb3IgX0JPVFRPTSAqLworCV9fdTggZmllbGQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHY0bDJfZXZlbnQgeworCV9fdTMyCQkJCXR5cGU7CisJdW5pb24geworCQlzdHJ1Y3QgdjRsMl9ldmVudF92c3luYyB2c3luYzsKKwkJX191OAkJCWRhdGFbNjRdOworCX0gdTsKKwlfX3UzMgkJCQlwZW5kaW5nOworCV9fdTMyCQkJCXNlcXVlbmNlOworCXN0cnVjdCB0aW1lc3BlYwkJCXRpbWVzdGFtcDsKKwlfX3UzMgkJCQlyZXNlcnZlZFs5XTsKK307CisKK3N0cnVjdCB2NGwyX2V2ZW50X3N1YnNjcmlwdGlvbiB7CisJX191MzIJCQkJdHlwZTsKKwlfX3UzMgkJCQlyZXNlcnZlZFs3XTsKK307CisKKy8qCisgKglBIEQgViBBIE4gQyBFIEQgICBEIEUgQiBVIEcgRyBJIE4gRworICoKKyAqCU5PVEU6IEVYUEVSSU1FTlRBTCBBUEksIE5FVkVSIFJFTFkgT04gVEhJUyBJTiBBUFBMSUNBVElPTlMhCisgKglGT1IgREVCVUdHSU5HLCBURVNUSU5HIEFORCBJTlRFUk5BTCBVU0UgT05MWSEKKyAqLworCisvKiBWSURJT0NfREJHX0dfUkVHSVNURVIgYW5kIFZJRElPQ19EQkdfU19SRUdJU1RFUiAqLworCisjZGVmaW5lIFY0TDJfQ0hJUF9NQVRDSF9IT1NUICAgICAgIDAgIC8qIE1hdGNoIGFnYWluc3QgY2hpcCBJRCBvbiBob3N0ICgwIGZvciB0aGUgaG9zdCkgKi8KKyNkZWZpbmUgVjRMMl9DSElQX01BVENIX0kyQ19EUklWRVIgMSAgLyogTWF0Y2ggYWdhaW5zdCBJMkMgZHJpdmVyIG5hbWUgKi8KKyNkZWZpbmUgVjRMMl9DSElQX01BVENIX0kyQ19BRERSICAgMiAgLyogTWF0Y2ggYWdhaW5zdCBJMkMgNy1iaXQgYWRkcmVzcyAqLworI2RlZmluZSBWNEwyX0NISVBfTUFUQ0hfQUM5NyAgICAgICAzICAvKiBNYXRjaCBhZ2FpbnN0IGFuY2lsaWFyeSBBQzk3IGNoaXAgKi8KKworc3RydWN0IHY0bDJfZGJnX21hdGNoIHsKKwlfX3UzMiB0eXBlOyAvKiBNYXRjaCB0eXBlICovCisJdW5pb24geyAgICAgLyogTWF0Y2ggdGhpcyBjaGlwLCBtZWFuaW5nIGRldGVybWluZWQgYnkgdHlwZSAqLworCQlfX3UzMiBhZGRyOworCQljaGFyIG5hbWVbMzJdOworCX07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyIHsKKwlzdHJ1Y3QgdjRsMl9kYmdfbWF0Y2ggbWF0Y2g7CisJX191MzIgc2l6ZTsJLyogcmVnaXN0ZXIgc2l6ZSBpbiBieXRlcyAqLworCV9fdTY0IHJlZzsKKwlfX3U2NCB2YWw7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogVklESU9DX0RCR19HX0NISVBfSURFTlQgKi8KK3N0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50IHsKKwlzdHJ1Y3QgdjRsMl9kYmdfbWF0Y2ggbWF0Y2g7CisJX191MzIgaWRlbnQ7ICAgICAgIC8qIGNoaXAgaWRlbnRpZmllciBhcyBzcGVjaWZpZWQgaW4gPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPiAqLworCV9fdTMyIHJldmlzaW9uOyAgICAvKiBjaGlwIHJldmlzaW9uLCBjaGlwIHNwZWNpZmljICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoKKyAqCUkgTyBDIFQgTCAgIEMgTyBEIEUgUyAgIEYgTyBSICAgViBJIEQgRSBPICAgRCBFIFYgSSBDIEUgUworICoKKyAqLworI2RlZmluZSBWSURJT0NfUVVFUllDQVAJCSBfSU9SKCdWJywgIDAsIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkpCisjZGVmaW5lIFZJRElPQ19SRVNFUlZFRAkJICBfSU8oJ1YnLCAgMSkKKyNkZWZpbmUgVklESU9DX0VOVU1fRk1UICAgICAgICAgX0lPV1IoJ1YnLCAgMiwgc3RydWN0IHY0bDJfZm10ZGVzYykKKyNkZWZpbmUgVklESU9DX0dfRk1UCQlfSU9XUignVicsICA0LCBzdHJ1Y3QgdjRsMl9mb3JtYXQpCisjZGVmaW5lIFZJRElPQ19TX0ZNVAkJX0lPV1IoJ1YnLCAgNSwgc3RydWN0IHY0bDJfZm9ybWF0KQorI2RlZmluZSBWSURJT0NfUkVRQlVGUwkJX0lPV1IoJ1YnLCAgOCwgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMpCisjZGVmaW5lIFZJRElPQ19RVUVSWUJVRgkJX0lPV1IoJ1YnLCAgOSwgc3RydWN0IHY0bDJfYnVmZmVyKQorI2RlZmluZSBWSURJT0NfR19GQlVGCQkgX0lPUignVicsIDEwLCBzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlcikKKyNkZWZpbmUgVklESU9DX1NfRkJVRgkJIF9JT1coJ1YnLCAxMSwgc3RydWN0IHY0bDJfZnJhbWVidWZmZXIpCisjZGVmaW5lIFZJRElPQ19PVkVSTEFZCQkgX0lPVygnVicsIDE0LCBpbnQpCisjZGVmaW5lIFZJRElPQ19RQlVGCQlfSU9XUignVicsIDE1LCBzdHJ1Y3QgdjRsMl9idWZmZXIpCisjZGVmaW5lIFZJRElPQ19EUUJVRgkJX0lPV1IoJ1YnLCAxNywgc3RydWN0IHY0bDJfYnVmZmVyKQorI2RlZmluZSBWSURJT0NfU1RSRUFNT04JCSBfSU9XKCdWJywgMTgsIGludCkKKyNkZWZpbmUgVklESU9DX1NUUkVBTU9GRgkgX0lPVygnVicsIDE5LCBpbnQpCisjZGVmaW5lIFZJRElPQ19HX1BBUk0JCV9JT1dSKCdWJywgMjEsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0pCisjZGVmaW5lIFZJRElPQ19TX1BBUk0JCV9JT1dSKCdWJywgMjIsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0pCisjZGVmaW5lIFZJRElPQ19HX1NURAkJIF9JT1IoJ1YnLCAyMywgdjRsMl9zdGRfaWQpCisjZGVmaW5lIFZJRElPQ19TX1NURAkJIF9JT1coJ1YnLCAyNCwgdjRsMl9zdGRfaWQpCisjZGVmaW5lIFZJRElPQ19FTlVNU1RECQlfSU9XUignVicsIDI1LCBzdHJ1Y3QgdjRsMl9zdGFuZGFyZCkKKyNkZWZpbmUgVklESU9DX0VOVU1JTlBVVAlfSU9XUignVicsIDI2LCBzdHJ1Y3QgdjRsMl9pbnB1dCkKKyNkZWZpbmUgVklESU9DX0dfQ1RSTAkJX0lPV1IoJ1YnLCAyNywgc3RydWN0IHY0bDJfY29udHJvbCkKKyNkZWZpbmUgVklESU9DX1NfQ1RSTAkJX0lPV1IoJ1YnLCAyOCwgc3RydWN0IHY0bDJfY29udHJvbCkKKyNkZWZpbmUgVklESU9DX0dfVFVORVIJCV9JT1dSKCdWJywgMjksIHN0cnVjdCB2NGwyX3R1bmVyKQorI2RlZmluZSBWSURJT0NfU19UVU5FUgkJIF9JT1coJ1YnLCAzMCwgc3RydWN0IHY0bDJfdHVuZXIpCisjZGVmaW5lIFZJRElPQ19HX0FVRElPCQkgX0lPUignVicsIDMzLCBzdHJ1Y3QgdjRsMl9hdWRpbykKKyNkZWZpbmUgVklESU9DX1NfQVVESU8JCSBfSU9XKCdWJywgMzQsIHN0cnVjdCB2NGwyX2F1ZGlvKQorI2RlZmluZSBWSURJT0NfUVVFUllDVFJMCV9JT1dSKCdWJywgMzYsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCkKKyNkZWZpbmUgVklESU9DX1FVRVJZTUVOVQlfSU9XUignVicsIDM3LCBzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUpCisjZGVmaW5lIFZJRElPQ19HX0lOUFVUCQkgX0lPUignVicsIDM4LCBpbnQpCisjZGVmaW5lIFZJRElPQ19TX0lOUFVUCQlfSU9XUignVicsIDM5LCBpbnQpCisjZGVmaW5lIFZJRElPQ19HX09VVFBVVAkJIF9JT1IoJ1YnLCA0NiwgaW50KQorI2RlZmluZSBWSURJT0NfU19PVVRQVVQJCV9JT1dSKCdWJywgNDcsIGludCkKKyNkZWZpbmUgVklESU9DX0VOVU1PVVRQVVQJX0lPV1IoJ1YnLCA0OCwgc3RydWN0IHY0bDJfb3V0cHV0KQorI2RlZmluZSBWSURJT0NfR19BVURPVVQJCSBfSU9SKCdWJywgNDksIHN0cnVjdCB2NGwyX2F1ZGlvb3V0KQorI2RlZmluZSBWSURJT0NfU19BVURPVVQJCSBfSU9XKCdWJywgNTAsIHN0cnVjdCB2NGwyX2F1ZGlvb3V0KQorI2RlZmluZSBWSURJT0NfR19NT0RVTEFUT1IJX0lPV1IoJ1YnLCA1NCwgc3RydWN0IHY0bDJfbW9kdWxhdG9yKQorI2RlZmluZSBWSURJT0NfU19NT0RVTEFUT1IJIF9JT1coJ1YnLCA1NSwgc3RydWN0IHY0bDJfbW9kdWxhdG9yKQorI2RlZmluZSBWSURJT0NfR19GUkVRVUVOQ1kJX0lPV1IoJ1YnLCA1Niwgc3RydWN0IHY0bDJfZnJlcXVlbmN5KQorI2RlZmluZSBWSURJT0NfU19GUkVRVUVOQ1kJIF9JT1coJ1YnLCA1Nywgc3RydWN0IHY0bDJfZnJlcXVlbmN5KQorI2RlZmluZSBWSURJT0NfQ1JPUENBUAkJX0lPV1IoJ1YnLCA1OCwgc3RydWN0IHY0bDJfY3JvcGNhcCkKKyNkZWZpbmUgVklESU9DX0dfQ1JPUAkJX0lPV1IoJ1YnLCA1OSwgc3RydWN0IHY0bDJfY3JvcCkKKyNkZWZpbmUgVklESU9DX1NfQ1JPUAkJIF9JT1coJ1YnLCA2MCwgc3RydWN0IHY0bDJfY3JvcCkKKyNkZWZpbmUgVklESU9DX0dfSlBFR0NPTVAJIF9JT1IoJ1YnLCA2MSwgc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uKQorI2RlZmluZSBWSURJT0NfU19KUEVHQ09NUAkgX0lPVygnVicsIDYyLCBzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24pCisjZGVmaW5lIFZJRElPQ19RVUVSWVNURCAgICAgIAkgX0lPUignVicsIDYzLCB2NGwyX3N0ZF9pZCkKKyNkZWZpbmUgVklESU9DX1RSWV9GTVQgICAgICAJX0lPV1IoJ1YnLCA2NCwgc3RydWN0IHY0bDJfZm9ybWF0KQorI2RlZmluZSBWSURJT0NfRU5VTUFVRElPCV9JT1dSKCdWJywgNjUsIHN0cnVjdCB2NGwyX2F1ZGlvKQorI2RlZmluZSBWSURJT0NfRU5VTUFVRE9VVAlfSU9XUignVicsIDY2LCBzdHJ1Y3QgdjRsMl9hdWRpb291dCkKKyNkZWZpbmUgVklESU9DX0dfUFJJT1JJVFkgICAgICAgIF9JT1IoJ1YnLCA2NywgZW51bSB2NGwyX3ByaW9yaXR5KQorI2RlZmluZSBWSURJT0NfU19QUklPUklUWSAgICAgICAgX0lPVygnVicsIDY4LCBlbnVtIHY0bDJfcHJpb3JpdHkpCisjZGVmaW5lIFZJRElPQ19HX1NMSUNFRF9WQklfQ0FQIF9JT1dSKCdWJywgNjksIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfY2FwKQorI2RlZmluZSBWSURJT0NfTE9HX1NUQVRVUyAgICAgICAgIF9JTygnVicsIDcwKQorI2RlZmluZSBWSURJT0NfR19FWFRfQ1RSTFMJX0lPV1IoJ1YnLCA3MSwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzKQorI2RlZmluZSBWSURJT0NfU19FWFRfQ1RSTFMJX0lPV1IoJ1YnLCA3Miwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzKQorI2RlZmluZSBWSURJT0NfVFJZX0VYVF9DVFJMUwlfSU9XUignVicsIDczLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMpCisjaWYgMQorI2RlZmluZSBWSURJT0NfRU5VTV9GUkFNRVNJWkVTCV9JT1dSKCdWJywgNzQsIHN0cnVjdCB2NGwyX2ZybXNpemVlbnVtKQorI2RlZmluZSBWSURJT0NfRU5VTV9GUkFNRUlOVEVSVkFMUyBfSU9XUignVicsIDc1LCBzdHJ1Y3QgdjRsMl9mcm1pdmFsZW51bSkKKyNkZWZpbmUgVklESU9DX0dfRU5DX0lOREVYICAgICAgIF9JT1IoJ1YnLCA3Niwgc3RydWN0IHY0bDJfZW5jX2lkeCkKKyNkZWZpbmUgVklESU9DX0VOQ09ERVJfQ01EICAgICAgX0lPV1IoJ1YnLCA3Nywgc3RydWN0IHY0bDJfZW5jb2Rlcl9jbWQpCisjZGVmaW5lIFZJRElPQ19UUllfRU5DT0RFUl9DTUQgIF9JT1dSKCdWJywgNzgsIHN0cnVjdCB2NGwyX2VuY29kZXJfY21kKQorI2VuZGlmCisKKyNpZiAxCisvKiBFeHBlcmltZW50YWwsIG1lYW50IGZvciBkZWJ1Z2dpbmcsIHRlc3RpbmcgYW5kIGludGVybmFsIHVzZS4KKyAgIE9ubHkgaW1wbGVtZW50ZWQgaWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRyBpcyBkZWZpbmVkLgorICAgWW91IG11c3QgYmUgcm9vdCB0byB1c2UgdGhlc2UgaW9jdGxzLiBOZXZlciB1c2UgdGhlc2UgaW4gYXBwbGljYXRpb25zISAqLworI2RlZmluZQlWSURJT0NfREJHX1NfUkVHSVNURVIgCSBfSU9XKCdWJywgNzksIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlcikKKyNkZWZpbmUJVklESU9DX0RCR19HX1JFR0lTVEVSIAlfSU9XUignVicsIDgwLCBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIpCisKKy8qIEV4cGVyaW1lbnRhbCwgbWVhbnQgZm9yIGRlYnVnZ2luZywgdGVzdGluZyBhbmQgaW50ZXJuYWwgdXNlLgorICAgTmV2ZXIgdXNlIHRoaXMgaW9jdGwgaW4gYXBwbGljYXRpb25zISAqLworI2RlZmluZSBWSURJT0NfREJHX0dfQ0hJUF9JREVOVCBfSU9XUignVicsIDgxLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCkKKyNlbmRpZgorCisjZGVmaW5lIFZJRElPQ19TX0hXX0ZSRVFfU0VFSwkgX0lPVygnVicsIDgyLCBzdHJ1Y3QgdjRsMl9od19mcmVxX3NlZWspCisjZGVmaW5lCVZJRElPQ19FTlVNX0RWX1BSRVNFVFMJX0lPV1IoJ1YnLCA4Mywgc3RydWN0IHY0bDJfZHZfZW51bV9wcmVzZXQpCisjZGVmaW5lCVZJRElPQ19TX0RWX1BSRVNFVAlfSU9XUignVicsIDg0LCBzdHJ1Y3QgdjRsMl9kdl9wcmVzZXQpCisjZGVmaW5lCVZJRElPQ19HX0RWX1BSRVNFVAlfSU9XUignVicsIDg1LCBzdHJ1Y3QgdjRsMl9kdl9wcmVzZXQpCisjZGVmaW5lCVZJRElPQ19RVUVSWV9EVl9QUkVTRVQJX0lPUignVicsICA4Niwgc3RydWN0IHY0bDJfZHZfcHJlc2V0KQorI2RlZmluZQlWSURJT0NfU19EVl9USU1JTkdTCV9JT1dSKCdWJywgODcsIHN0cnVjdCB2NGwyX2R2X3RpbWluZ3MpCisjZGVmaW5lCVZJRElPQ19HX0RWX1RJTUlOR1MJX0lPV1IoJ1YnLCA4OCwgc3RydWN0IHY0bDJfZHZfdGltaW5ncykKKyNkZWZpbmUJVklESU9DX0RRRVZFTlQJCSBfSU9SKCdWJywgODksIHN0cnVjdCB2NGwyX2V2ZW50KQorI2RlZmluZQlWSURJT0NfU1VCU0NSSUJFX0VWRU5UCSBfSU9XKCdWJywgOTAsIHN0cnVjdCB2NGwyX2V2ZW50X3N1YnNjcmlwdGlvbikKKyNkZWZpbmUJVklESU9DX1VOU1VCU0NSSUJFX0VWRU5UIF9JT1coJ1YnLCA5MSwgc3RydWN0IHY0bDJfZXZlbnRfc3Vic2NyaXB0aW9uKQorCisvKiBSZW1pbmRlcjogd2hlbiBhZGRpbmcgbmV3IGlvY3RscyBwbGVhc2UgYWRkIHN1cHBvcnQgZm9yIHRoZW0gdG8KKyAgIGRyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jIGFzIHdlbGwhICovCisKKyNpZmRlZiBfX09MRF9WSURJT0NfCisvKiBmb3IgY29tcGF0aWJpbGl0eSwgd2lsbCBnbyBhd2F5IHNvbWUgZGF5ICovCisjZGVmaW5lIFZJRElPQ19PVkVSTEFZX09MRCAgICAgCV9JT1dSKCdWJywgMTQsIGludCkKKyNkZWZpbmUgVklESU9DX1NfUEFSTV9PTEQgICAgICAJIF9JT1coJ1YnLCAyMiwgc3RydWN0IHY0bDJfc3RyZWFtcGFybSkKKyNkZWZpbmUgVklESU9DX1NfQ1RSTF9PTEQgICAgICAJIF9JT1coJ1YnLCAyOCwgc3RydWN0IHY0bDJfY29udHJvbCkKKyNkZWZpbmUgVklESU9DX0dfQVVESU9fT0xEICAgICAJX0lPV1IoJ1YnLCAzMywgc3RydWN0IHY0bDJfYXVkaW8pCisjZGVmaW5lIFZJRElPQ19HX0FVRE9VVF9PTEQgICAgCV9JT1dSKCdWJywgNDksIHN0cnVjdCB2NGwyX2F1ZGlvb3V0KQorI2RlZmluZSBWSURJT0NfQ1JPUENBUF9PTEQgICAgIAkgX0lPUignVicsIDU4LCBzdHJ1Y3QgdjRsMl9jcm9wY2FwKQorI2VuZGlmCisKKyNkZWZpbmUgQkFTRV9WSURJT0NfUFJJVkFURQkxOTIJCS8qIDE5Mi0yNTUgYXJlIHByaXZhdGUgKi8KKworI2VuZGlmIC8qIF9fTElOVVhfVklERU9ERVYyX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC92aXJ0aW9fOXAuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC92aXJ0aW9fOXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjhiNDM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3ZpcnRpb185cC5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgX0xJTlVYX1ZJUlRJT185UF9ICisjZGVmaW5lIF9MSU5VWF9WSVJUSU9fOVBfSAorLyogVGhpcyBoZWFkZXIgaXMgQlNEIGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQKKyAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KKworLyogVGhlIGZlYXR1cmUgYml0bWFwIGZvciB2aXJ0aW8gOVAgKi8KKworLyogVGhlIG1vdW50IHBvaW50IGlzIHNwZWNpZmllZCBpbiBhIGNvbmZpZyB2YXJpYWJsZSAqLworI2RlZmluZSBWSVJUSU9fOVBfTU9VTlRfVEFHIDAKKworc3RydWN0IHZpcnRpb185cF9jb25maWcgeworCS8qIGxlbmd0aCBvZiB0aGUgdGFnIG5hbWUgKi8KKwlfX3UxNiB0YWdfbGVuOworCS8qIG5vbi1OVUxMIHRlcm1pbmF0ZWQgdGFnIG5hbWUgKi8KKwlfX3U4IHRhZ1swXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNlbmRpZiAvKiBfTElOVVhfVklSVElPXzlQX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC92aXJ0aW9fYmFsbG9vbi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUwZWNkMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC92aXJ0aW9fYmFsbG9vbi5oCkBAIC0wLDAgKzEsMzYgQEAKKyNpZm5kZWYgX0xJTlVYX1ZJUlRJT19CQUxMT09OX0gKKyNkZWZpbmUgX0xJTlVYX1ZJUlRJT19CQUxMT09OX0gKKy8qIFRoaXMgaGVhZGVyIGlzIEJTRCBsaWNlbnNlZCBzbyBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50CisgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4gKi8KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgorCisvKiBUaGUgZmVhdHVyZSBiaXRtYXAgZm9yIHZpcnRpbyBiYWxsb29uICovCisjZGVmaW5lIFZJUlRJT19CQUxMT09OX0ZfTVVTVF9URUxMX0hPU1QJMCAvKiBUZWxsIGJlZm9yZSByZWNsYWltaW5nIHBhZ2VzICovCisjZGVmaW5lIFZJUlRJT19CQUxMT09OX0ZfU1RBVFNfVlEJMSAvKiBNZW1vcnkgU3RhdHMgdmlydHF1ZXVlICovCisKKy8qIFNpemUgb2YgYSBQRk4gaW4gdGhlIGJhbGxvb24gaW50ZXJmYWNlLiAqLworI2RlZmluZSBWSVJUSU9fQkFMTE9PTl9QRk5fU0hJRlQgMTIKKworc3RydWN0IHZpcnRpb19iYWxsb29uX2NvbmZpZworeworCS8qIE51bWJlciBvZiBwYWdlcyBob3N0IHdhbnRzIEd1ZXN0IHRvIGdpdmUgdXAuICovCisJX19sZTMyIG51bV9wYWdlczsKKwkvKiBOdW1iZXIgb2YgcGFnZXMgd2UndmUgYWN0dWFsbHkgZ290IGluIGJhbGxvb24uICovCisJX19sZTMyIGFjdHVhbDsKK307CisKKyNkZWZpbmUgVklSVElPX0JBTExPT05fU19TV0FQX0lOICAwICAgLyogQW1vdW50IG9mIG1lbW9yeSBzd2FwcGVkIGluICovCisjZGVmaW5lIFZJUlRJT19CQUxMT09OX1NfU1dBUF9PVVQgMSAgIC8qIEFtb3VudCBvZiBtZW1vcnkgc3dhcHBlZCBvdXQgKi8KKyNkZWZpbmUgVklSVElPX0JBTExPT05fU19NQUpGTFQgICAyICAgLyogTnVtYmVyIG9mIG1ham9yIGZhdWx0cyAqLworI2RlZmluZSBWSVJUSU9fQkFMTE9PTl9TX01JTkZMVCAgIDMgICAvKiBOdW1iZXIgb2YgbWlub3IgZmF1bHRzICovCisjZGVmaW5lIFZJUlRJT19CQUxMT09OX1NfTUVNRlJFRSAgNCAgIC8qIFRvdGFsIGFtb3VudCBvZiBmcmVlIG1lbW9yeSAqLworI2RlZmluZSBWSVJUSU9fQkFMTE9PTl9TX01FTVRPVCAgIDUgICAvKiBUb3RhbCBhbW91bnQgb2YgbWVtb3J5ICovCisjZGVmaW5lIFZJUlRJT19CQUxMT09OX1NfTlIgICAgICAgNgorCitzdHJ1Y3QgdmlydGlvX2JhbGxvb25fc3RhdCB7CisJdTE2IHRhZzsKKwl1NjQgdmFsOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2VuZGlmIC8qIF9MSU5VWF9WSVJUSU9fQkFMTE9PTl9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ibGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjc3MjBkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ibGsuaApAQCAtMCwwICsxLDk5IEBACisjaWZuZGVmIF9MSU5VWF9WSVJUSU9fQkxLX0gKKyNkZWZpbmUgX0xJTlVYX1ZJUlRJT19CTEtfSAorLyogVGhpcyBoZWFkZXIgaXMgQlNEIGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQKKyAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KKworLyogRmVhdHVyZSBiaXRzICovCisjZGVmaW5lIFZJUlRJT19CTEtfRl9CQVJSSUVSCTAJLyogRG9lcyBob3N0IHN1cHBvcnQgYmFycmllcnM/ICovCisjZGVmaW5lIFZJUlRJT19CTEtfRl9TSVpFX01BWAkxCS8qIEluZGljYXRlcyBtYXhpbXVtIHNlZ21lbnQgc2l6ZSAqLworI2RlZmluZSBWSVJUSU9fQkxLX0ZfU0VHX01BWAkyCS8qIEluZGljYXRlcyBtYXhpbXVtICMgb2Ygc2VnbWVudHMgKi8KKyNkZWZpbmUgVklSVElPX0JMS19GX0dFT01FVFJZCTQJLyogTGVnYWN5IGdlb21ldHJ5IGF2YWlsYWJsZSAgKi8KKyNkZWZpbmUgVklSVElPX0JMS19GX1JPCQk1CS8qIERpc2sgaXMgcmVhZC1vbmx5ICovCisjZGVmaW5lIFZJUlRJT19CTEtfRl9CTEtfU0laRQk2CS8qIEJsb2NrIHNpemUgb2YgZGlzayBpcyBhdmFpbGFibGUqLworI2RlZmluZSBWSVJUSU9fQkxLX0ZfU0NTSQk3CS8qIFN1cHBvcnRzIHNjc2kgY29tbWFuZCBwYXNzdGhydSAqLworI2RlZmluZSBWSVJUSU9fQkxLX0ZfRkxVU0gJOQkvKiBDYWNoZSBmbHVzaCBjb21tYW5kIHN1cHBvcnQgKi8KKyNkZWZpbmUgVklSVElPX0JMS19GX1RPUE9MT0dZCTEwCS8qIFRvcG9sb2d5IGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSAqLworCisjZGVmaW5lIFZJUlRJT19CTEtfSURfQllURVMJMjAJLyogSUQgc3RyaW5nIGxlbmd0aCAqLworCitzdHJ1Y3QgdmlydGlvX2Jsa19jb25maWcgeworCS8qIFRoZSBjYXBhY2l0eSAoaW4gNTEyLWJ5dGUgc2VjdG9ycykuICovCisJX191NjQgY2FwYWNpdHk7CisJLyogVGhlIG1heGltdW0gc2VnbWVudCBzaXplIChpZiBWSVJUSU9fQkxLX0ZfU0laRV9NQVgpICovCisJX191MzIgc2l6ZV9tYXg7CisJLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIHNlZ21lbnRzIChpZiBWSVJUSU9fQkxLX0ZfU0VHX01BWCkgKi8KKwlfX3UzMiBzZWdfbWF4OworCS8qIGdlb21ldHJ5IHRoZSBkZXZpY2UgKGlmIFZJUlRJT19CTEtfRl9HRU9NRVRSWSkgKi8KKwlzdHJ1Y3QgdmlydGlvX2Jsa19nZW9tZXRyeSB7CisJCV9fdTE2IGN5bGluZGVyczsKKwkJX191OCBoZWFkczsKKwkJX191OCBzZWN0b3JzOworCX0gZ2VvbWV0cnk7CisKKwkvKiBibG9jayBzaXplIG9mIGRldmljZSAoaWYgVklSVElPX0JMS19GX0JMS19TSVpFKSAqLworCV9fdTMyIGJsa19zaXplOworCisJLyogdGhlIG5leHQgNCBlbnRyaWVzIGFyZSBndWFyZGVkIGJ5IFZJUlRJT19CTEtfRl9UT1BPTE9HWSAgKi8KKwkvKiBleHBvbmVudCBmb3IgcGh5c2ljYWwgYmxvY2sgcGVyIGxvZ2ljYWwgYmxvY2suICovCisJX191OCBwaHlzaWNhbF9ibG9ja19leHA7CisJLyogYWxpZ25tZW50IG9mZnNldCBpbiBsb2dpY2FsIGJsb2Nrcy4gKi8KKwlfX3U4IGFsaWdubWVudF9vZmZzZXQ7CisJLyogbWluaW11bSBJL08gc2l6ZSB3aXRob3V0IHBlcmZvcm1hbmNlIHBlbmFsdHkgaW4gbG9naWNhbCBibG9ja3MuICovCisJX191MTYgbWluX2lvX3NpemU7CisJLyogb3B0aW1hbCBzdXN0YWluZWQgSS9PIHNpemUgaW4gbG9naWNhbCBibG9ja3MuICovCisJX191MzIgb3B0X2lvX3NpemU7CisKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qCisgKiBDb21tYW5kIHR5cGVzCisgKgorICogVXNhZ2UgaXMgYSBiaXQgdHJpY2t5IGFzIHNvbWUgYml0cyBhcmUgdXNlZCBhcyBmbGFncyBhbmQgc29tZSBhcmUgbm90LgorICoKKyAqIFJ1bGVzOgorICogICBWSVJUSU9fQkxLX1RfT1VUIG1heSBiZSBjb21iaW5lZCB3aXRoIFZJUlRJT19CTEtfVF9TQ1NJX0NNRCBvcgorICogICBWSVJUSU9fQkxLX1RfQkFSUklFUi4gIFZJUlRJT19CTEtfVF9GTFVTSCBpcyBhIGNvbW1hbmQgb2YgaXRzIG93bgorICogICBhbmQgbWF5IG5vdCBiZSBjb21iaW5lZCB3aXRoIGFueSBvZiB0aGUgb3RoZXIgZmxhZ3MuCisgKi8KKworLyogVGhlc2UgdHdvIGRlZmluZSBkaXJlY3Rpb24uICovCisjZGVmaW5lIFZJUlRJT19CTEtfVF9JTgkJMAorI2RlZmluZSBWSVJUSU9fQkxLX1RfT1VUCTEKKworLyogVGhpcyBiaXQgc2F5cyBpdCdzIGEgc2NzaSBjb21tYW5kLCBub3QgYW4gYWN0dWFsIHJlYWQgb3Igd3JpdGUuICovCisjZGVmaW5lIFZJUlRJT19CTEtfVF9TQ1NJX0NNRAkyCisKKy8qIENhY2hlIGZsdXNoIGNvbW1hbmQgKi8KKyNkZWZpbmUgVklSVElPX0JMS19UX0ZMVVNICTQKKworLyogR2V0IGRldmljZSBJRCBjb21tYW5kICovCisjZGVmaW5lIFZJUlRJT19CTEtfVF9HRVRfSUQgICAgOAorCisvKiBCYXJyaWVyIGJlZm9yZSB0aGlzIG9wLiAqLworI2RlZmluZSBWSVJUSU9fQkxLX1RfQkFSUklFUgkweDgwMDAwMDAwCisKKy8qIFRoaXMgaXMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIHJlYWQgc2NhdHRlci1nYXRoZXIgbGlzdC4gKi8KK3N0cnVjdCB2aXJ0aW9fYmxrX291dGhkciB7CisJLyogVklSVElPX0JMS19UKiAqLworCV9fdTMyIHR5cGU7CisJLyogaW8gcHJpb3JpdHkuICovCisJX191MzIgaW9wcmlvOworCS8qIFNlY3RvciAoaWUuIDUxMiBieXRlIG9mZnNldCkgKi8KKwlfX3U2NCBzZWN0b3I7Cit9OworCitzdHJ1Y3QgdmlydGlvX3Njc2lfaW5oZHIgeworCV9fdTMyIGVycm9yczsKKwlfX3UzMiBkYXRhX2xlbjsKKwlfX3UzMiBzZW5zZV9sZW47CisJX191MzIgcmVzaWR1YWw7Cit9OworCisvKiBBbmQgdGhpcyBpcyB0aGUgZmluYWwgYnl0ZSBvZiB0aGUgd3JpdGUgc2NhdHRlci1nYXRoZXIgbGlzdC4gKi8KKyNkZWZpbmUgVklSVElPX0JMS19TX09LCQkwCisjZGVmaW5lIFZJUlRJT19CTEtfU19JT0VSUgkxCisjZGVmaW5lIFZJUlRJT19CTEtfU19VTlNVUFAJMgorI2VuZGlmIC8qIF9MSU5VWF9WSVJUSU9fQkxLX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZjQ1ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oCkBAIC0wLDAgKzEsMzEgQEAKKyNpZm5kZWYgX0xJTlVYX1ZJUlRJT19DT05GSUdfSAorI2RlZmluZSBfTElOVVhfVklSVElPX0NPTkZJR19ICisvKiBUaGlzIGhlYWRlciwgZXhjbHVkaW5nIHRoZSAjaWZkZWYgX19LRVJORUxfXyBwYXJ0LCBpcyBCU0QgbGljZW5zZWQgc28KKyAqIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCisKKy8qIFZpcnRpbyBkZXZpY2VzIHVzZSBhIHN0YW5kYXJkaXplZCBjb25maWd1cmF0aW9uIHNwYWNlIHRvIGRlZmluZSB0aGVpcgorICogZmVhdHVyZXMgYW5kIHBhc3MgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiwgYnV0IGVhY2ggaW1wbGVtZW50YXRpb24gY2FuCisgKiBzdG9yZSBhbmQgYWNjZXNzIHRoYXQgc3BhY2UgZGlmZmVyZW50bHkuICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogU3RhdHVzIGJ5dGUgZm9yIGd1ZXN0IHRvIHJlcG9ydCBwcm9ncmVzcywgYW5kIHN5bmNocm9uaXplIGZlYXR1cmVzLiAqLworLyogV2UgaGF2ZSBzZWVuIGRldmljZSBhbmQgcHJvY2Vzc2VkIGdlbmVyaWMgZmllbGRzIChWSVJUSU9fQ09ORklHX0ZfVklSVElPKSAqLworI2RlZmluZSBWSVJUSU9fQ09ORklHX1NfQUNLTk9XTEVER0UJMQorLyogV2UgaGF2ZSBmb3VuZCBhIGRyaXZlciBmb3IgdGhlIGRldmljZS4gKi8KKyNkZWZpbmUgVklSVElPX0NPTkZJR19TX0RSSVZFUgkJMgorLyogRHJpdmVyIGhhcyB1c2VkIGl0cyBwYXJ0cyBvZiB0aGUgY29uZmlnLCBhbmQgaXMgaGFwcHkgKi8KKyNkZWZpbmUgVklSVElPX0NPTkZJR19TX0RSSVZFUl9PSwk0CisvKiBXZSd2ZSBnaXZlbiB1cCBvbiB0aGlzIGRldmljZS4gKi8KKyNkZWZpbmUgVklSVElPX0NPTkZJR19TX0ZBSUxFRAkJMHg4MAorCisvKiBTb21lIHZpcnRpbyBmZWF0dXJlIGJpdHMgKGN1cnJlbnRseSBiaXRzIDI4IHRocm91Z2ggMzEpIGFyZSByZXNlcnZlZCBmb3IgdGhlCisgKiB0cmFuc3BvcnQgYmVpbmcgdXNlZCAoZWcuIHZpcnRpb19yaW5nKSwgdGhlIHJlc3QgYXJlIHBlci1kZXZpY2UgZmVhdHVyZQorICogYml0cy4gKi8KKyNkZWZpbmUgVklSVElPX1RSQU5TUE9SVF9GX1NUQVJUCTI4CisjZGVmaW5lIFZJUlRJT19UUkFOU1BPUlRfRl9FTkQJCTMyCisKKy8qIERvIHdlIGdldCBjYWxsYmFja3Mgd2hlbiB0aGUgcmluZyBpcyBjb21wbGV0ZWx5IHVzZWQsIGV2ZW4gaWYgd2UndmUKKyAqIHN1cHByZXNzZWQgdGhlbT8gKi8KKyNkZWZpbmUgVklSVElPX0ZfTk9USUZZX09OX0VNUFRZCTI0CisKKyNlbmRpZiAvKiBfTElOVVhfVklSVElPX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1M2JiMjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaApAQCAtMCwwICsxLDQ5IEBACisjaWZuZGVmIF9MSU5VWF9WSVJUSU9fQ09OU09MRV9ICisjZGVmaW5lIF9MSU5VWF9WSVJUSU9fQ09OU09MRV9ICisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgorLyoKKyAqIFRoaXMgaGVhZGVyLCBleGNsdWRpbmcgdGhlICNpZmRlZiBfX0tFUk5FTF9fIHBhcnQsIGlzIEJTRCBsaWNlbnNlZCBzbworICogYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudCBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIFJlZCBIYXQsIEluYy4sIDIwMDksIDIwMTAKKyAqLworCisvKiBGZWF0dXJlIGJpdHMgKi8KKyNkZWZpbmUgVklSVElPX0NPTlNPTEVfRl9TSVpFCTAJLyogRG9lcyBob3N0IHByb3ZpZGUgY29uc29sZSBzaXplPyAqLworI2RlZmluZSBWSVJUSU9fQ09OU09MRV9GX01VTFRJUE9SVCAxCS8qIERvZXMgaG9zdCBwcm92aWRlIG11bHRpcGxlIHBvcnRzPyAqLworCisjZGVmaW5lIFZJUlRJT19DT05TT0xFX0JBRF9JRAkJKH4odTMyKTApCisKK3N0cnVjdCB2aXJ0aW9fY29uc29sZV9jb25maWcgeworCS8qIGNvbHVtcyBvZiB0aGUgc2NyZWVucyAqLworCV9fdTE2IGNvbHM7CisJLyogcm93cyBvZiB0aGUgc2NyZWVucyAqLworCV9fdTE2IHJvd3M7CisJLyogbWF4LiBudW1iZXIgb2YgcG9ydHMgdGhpcyBkZXZpY2UgY2FuIGhvbGQgKi8KKwlfX3UzMiBtYXhfbnJfcG9ydHM7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKgorICogQSBtZXNzYWdlIHRoYXQncyBwYXNzZWQgYmV0d2VlbiB0aGUgSG9zdCBhbmQgdGhlIEd1ZXN0IGZvciBhCisgKiBwYXJ0aWN1bGFyIHBvcnQuCisgKi8KK3N0cnVjdCB2aXJ0aW9fY29uc29sZV9jb250cm9sIHsKKwlfX3UzMiBpZDsJCS8qIFBvcnQgbnVtYmVyICovCisJX191MTYgZXZlbnQ7CQkvKiBUaGUga2luZCBvZiBjb250cm9sIGV2ZW50IChzZWUgYmVsb3cpICovCisJX191MTYgdmFsdWU7CQkvKiBFeHRyYSBpbmZvcm1hdGlvbiBmb3IgdGhlIGtleSAqLworfTsKKworLyogU29tZSBldmVudHMgZm9yIGNvbnRyb2wgbWVzc2FnZXMgKi8KKyNkZWZpbmUgVklSVElPX0NPTlNPTEVfREVWSUNFX1JFQURZCTAKKyNkZWZpbmUgVklSVElPX0NPTlNPTEVfUE9SVF9BREQJCTEKKyNkZWZpbmUgVklSVElPX0NPTlNPTEVfUE9SVF9SRU1PVkUJMgorI2RlZmluZSBWSVJUSU9fQ09OU09MRV9QT1JUX1JFQURZCTMKKyNkZWZpbmUgVklSVElPX0NPTlNPTEVfQ09OU09MRV9QT1JUCTQKKyNkZWZpbmUgVklSVElPX0NPTlNPTEVfUkVTSVpFCQk1CisjZGVmaW5lIFZJUlRJT19DT05TT0xFX1BPUlRfT1BFTgk2CisjZGVmaW5lIFZJUlRJT19DT05TT0xFX1BPUlRfTkFNRQk3CisKKworI2VuZGlmIC8qIF9MSU5VWF9WSVJUSU9fQ09OU09MRV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdmlydGlvX2lkcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3ZpcnRpb19pZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjY2MGMwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3ZpcnRpb19pZHMuaApAQCAtMCwwICsxLDE3IEBACisjaWZuZGVmIF9MSU5VWF9WSVJUSU9fSURTX0gKKyNkZWZpbmUgX0xJTlVYX1ZJUlRJT19JRFNfSAorLyoKKyAqIFZpcnRpbyBJRHMKKyAqCisgKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAorICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuCisgKi8KKworI2RlZmluZSBWSVJUSU9fSURfTkVUCQkxIC8qIHZpcnRpbyBuZXQgKi8KKyNkZWZpbmUgVklSVElPX0lEX0JMT0NLCQkyIC8qIHZpcnRpbyBibG9jayAqLworI2RlZmluZSBWSVJUSU9fSURfQ09OU09MRQkzIC8qIHZpcnRpbyBjb25zb2xlICovCisjZGVmaW5lIFZJUlRJT19JRF9STkcJCTQgLyogdmlydGlvIHJpbmcgKi8KKyNkZWZpbmUgVklSVElPX0lEX0JBTExPT04JNSAvKiB2aXJ0aW8gYmFsbG9vbiAqLworI2RlZmluZSBWSVJUSU9fSURfOVAJCTkgLyogOXAgdmlydGlvIGNvbnNvbGUgKi8KKworI2VuZGlmIC8qIF9MSU5VWF9WSVJUSU9fSURTX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NWU0MjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCkBAIC0wLDAgKzEsMTMxIEBACisjaWZuZGVmIF9MSU5VWF9WSVJUSU9fTkVUX0gKKyNkZWZpbmUgX0xJTlVYX1ZJUlRJT19ORVRfSAorLyogVGhpcyBoZWFkZXIgaXMgQlNEIGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQKKyAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorCisvKiBUaGUgZmVhdHVyZSBiaXRtYXAgZm9yIHZpcnRpbyBuZXQgKi8KKyNkZWZpbmUgVklSVElPX05FVF9GX0NTVU0JMAkvKiBIb3N0IGhhbmRsZXMgcGt0cyB3LyBwYXJ0aWFsIGNzdW0gKi8KKyNkZWZpbmUgVklSVElPX05FVF9GX0dVRVNUX0NTVU0JMQkvKiBHdWVzdCBoYW5kbGVzIHBrdHMgdy8gcGFydGlhbCBjc3VtICovCisjZGVmaW5lIFZJUlRJT19ORVRfRl9NQUMJNQkvKiBIb3N0IGhhcyBnaXZlbiBNQUMgYWRkcmVzcy4gKi8KKyNkZWZpbmUgVklSVElPX05FVF9GX0dTTwk2CS8qIEhvc3QgaGFuZGxlcyBwa3RzIHcvIGFueSBHU08gdHlwZSAqLworI2RlZmluZSBWSVJUSU9fTkVUX0ZfR1VFU1RfVFNPNAk3CS8qIEd1ZXN0IGNhbiBoYW5kbGUgVFNPdjQgaW4uICovCisjZGVmaW5lIFZJUlRJT19ORVRfRl9HVUVTVF9UU082CTgJLyogR3Vlc3QgY2FuIGhhbmRsZSBUU092NiBpbi4gKi8KKyNkZWZpbmUgVklSVElPX05FVF9GX0dVRVNUX0VDTgk5CS8qIEd1ZXN0IGNhbiBoYW5kbGUgVFNPWzZdIHcvIEVDTiBpbi4gKi8KKyNkZWZpbmUgVklSVElPX05FVF9GX0dVRVNUX1VGTwkxMAkvKiBHdWVzdCBjYW4gaGFuZGxlIFVGTyBpbi4gKi8KKyNkZWZpbmUgVklSVElPX05FVF9GX0hPU1RfVFNPNAkxMQkvKiBIb3N0IGNhbiBoYW5kbGUgVFNPdjQgaW4uICovCisjZGVmaW5lIFZJUlRJT19ORVRfRl9IT1NUX1RTTzYJMTIJLyogSG9zdCBjYW4gaGFuZGxlIFRTT3Y2IGluLiAqLworI2RlZmluZSBWSVJUSU9fTkVUX0ZfSE9TVF9FQ04JMTMJLyogSG9zdCBjYW4gaGFuZGxlIFRTT1s2XSB3LyBFQ04gaW4uICovCisjZGVmaW5lIFZJUlRJT19ORVRfRl9IT1NUX1VGTwkxNAkvKiBIb3N0IGNhbiBoYW5kbGUgVUZPIGluLiAqLworI2RlZmluZSBWSVJUSU9fTkVUX0ZfTVJHX1JYQlVGCTE1CS8qIEhvc3QgY2FuIG1lcmdlIHJlY2VpdmUgYnVmZmVycy4gKi8KKyNkZWZpbmUgVklSVElPX05FVF9GX1NUQVRVUwkxNgkvKiB2aXJ0aW9fbmV0X2NvbmZpZy5zdGF0dXMgYXZhaWxhYmxlICovCisjZGVmaW5lIFZJUlRJT19ORVRfRl9DVFJMX1ZRCTE3CS8qIENvbnRyb2wgY2hhbm5lbCBhdmFpbGFibGUgKi8KKyNkZWZpbmUgVklSVElPX05FVF9GX0NUUkxfUlgJMTgJLyogQ29udHJvbCBjaGFubmVsIFJYIG1vZGUgc3VwcG9ydCAqLworI2RlZmluZSBWSVJUSU9fTkVUX0ZfQ1RSTF9WTEFOCTE5CS8qIENvbnRyb2wgY2hhbm5lbCBWTEFOIGZpbHRlcmluZyAqLworI2RlZmluZSBWSVJUSU9fTkVUX0ZfQ1RSTF9SWF9FWFRSQSAyMAkvKiBFeHRyYSBSWCBtb2RlIGNvbnRyb2wgc3VwcG9ydCAqLworCisjZGVmaW5lIFZJUlRJT19ORVRfU19MSU5LX1VQCTEJLyogTGluayBpcyB1cCAqLworCitzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcgeworCS8qIFRoZSBjb25maWcgZGVmaW5pbmcgbWFjIGFkZHJlc3MgKGlmIFZJUlRJT19ORVRfRl9NQUMpICovCisJX191OCBtYWNbNl07CisJLyogU2VlIFZJUlRJT19ORVRfRl9TVEFUVVMgYW5kIFZJUlRJT19ORVRfU18qIGFib3ZlICovCisJX191MTYgc3RhdHVzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogVGhpcyBpcyB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgc2NhdHRlci1nYXRoZXIgbGlzdC4gIElmIHlvdSBkb24ndAorICogc3BlY2lmeSBHU08gb3IgQ1NVTSBmZWF0dXJlcywgeW91IGNhbiBzaW1wbHkgaWdub3JlIHRoZSBoZWFkZXIuICovCitzdHJ1Y3QgdmlydGlvX25ldF9oZHIgeworI2RlZmluZSBWSVJUSU9fTkVUX0hEUl9GX05FRURTX0NTVU0JMQkvLyBVc2UgY3N1bV9zdGFydCwgY3N1bV9vZmZzZXQKKwlfX3U4IGZsYWdzOworI2RlZmluZSBWSVJUSU9fTkVUX0hEUl9HU09fTk9ORQkJMAkvLyBOb3QgYSBHU08gZnJhbWUKKyNkZWZpbmUgVklSVElPX05FVF9IRFJfR1NPX1RDUFY0CTEJLy8gR1NPIGZyYW1lLCBJUHY0IFRDUCAoVFNPKQorI2RlZmluZSBWSVJUSU9fTkVUX0hEUl9HU09fVURQCQkzCS8vIEdTTyBmcmFtZSwgSVB2NCBVRFAgKFVGTykKKyNkZWZpbmUgVklSVElPX05FVF9IRFJfR1NPX1RDUFY2CTQJLy8gR1NPIGZyYW1lLCBJUHY2IFRDUAorI2RlZmluZSBWSVJUSU9fTkVUX0hEUl9HU09fRUNOCQkweDgwCS8vIFRDUCBoYXMgRUNOIHNldAorCV9fdTggZ3NvX3R5cGU7CisJX191MTYgaGRyX2xlbjsJCS8qIEV0aGVybmV0ICsgSVAgKyB0Y3AvdWRwIGhkcnMgKi8KKwlfX3UxNiBnc29fc2l6ZTsJCS8qIEJ5dGVzIHRvIGFwcGVuZCB0byBoZHJfbGVuIHBlciBmcmFtZSAqLworCV9fdTE2IGNzdW1fc3RhcnQ7CS8qIFBvc2l0aW9uIHRvIHN0YXJ0IGNoZWNrc3VtbWluZyBmcm9tICovCisJX191MTYgY3N1bV9vZmZzZXQ7CS8qIE9mZnNldCBhZnRlciB0aGF0IHRvIHBsYWNlIGNoZWNrc3VtICovCit9OworCisvKiBUaGlzIGlzIHRoZSB2ZXJzaW9uIG9mIHRoZSBoZWFkZXIgdG8gdXNlIHdoZW4gdGhlIE1SR19SWEJVRgorICogZmVhdHVyZSBoYXMgYmVlbiBuZWdvdGlhdGVkLiAqLworc3RydWN0IHZpcnRpb19uZXRfaGRyX21yZ19yeGJ1ZiB7CisJc3RydWN0IHZpcnRpb19uZXRfaGRyIGhkcjsKKwlfX3UxNiBudW1fYnVmZmVyczsJLyogTnVtYmVyIG9mIG1lcmdlZCByeCBidWZmZXJzICovCit9OworCisvKgorICogQ29udHJvbCB2aXJ0cXVldWUgZGF0YSBzdHJ1Y3R1cmVzCisgKgorICogVGhlIGNvbnRyb2wgdmlydHF1ZXVlIGV4cGVjdHMgYSBoZWFkZXIgaW4gdGhlIGZpcnN0IHNnIGVudHJ5CisgKiBhbmQgYW4gYWNrL3N0YXR1cyByZXNwb25zZSBpbiB0aGUgbGFzdCBlbnRyeS4gIERhdGEgZm9yIHRoZQorICogY29tbWFuZCBnb2VzIGluIGJldHdlZW4uCisgKi8KK3N0cnVjdCB2aXJ0aW9fbmV0X2N0cmxfaGRyIHsKKwlfX3U4IGNsYXNzOworCV9fdTggY21kOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordHlwZWRlZiBfX3U4IHZpcnRpb19uZXRfY3RybF9hY2s7CisKKyNkZWZpbmUgVklSVElPX05FVF9PSyAgICAgMAorI2RlZmluZSBWSVJUSU9fTkVUX0VSUiAgICAxCisKKy8qCisgKiBDb250cm9sIHRoZSBSWCBtb2RlLCBpZS4gcHJvbWlzdWNvdXMsIGFsbG11bHRpLCBldGMuLi4KKyAqIEFsbCBjb21tYW5kcyByZXF1aXJlIGFuICJvdXQiIHNnIGVudHJ5IGNvbnRhaW5pbmcgYSAxIGJ5dGUKKyAqIHN0YXRlIHZhbHVlLCB6ZXJvID0gZGlzYWJsZSwgbm9uLXplcm8gPSBlbmFibGUuICBDb21tYW5kcworICogMCBhbmQgMSBhcmUgc3VwcG9ydGVkIHdpdGggdGhlIFZJUlRJT19ORVRfRl9DVFJMX1JYIGZlYXR1cmUuCisgKiBDb21tYW5kcyAyLTUgYXJlIGFkZGVkIHdpdGggVklSVElPX05FVF9GX0NUUkxfUlhfRVhUUkEuCisgKi8KKyNkZWZpbmUgVklSVElPX05FVF9DVFJMX1JYICAgIDAKKyAjZGVmaW5lIFZJUlRJT19ORVRfQ1RSTF9SWF9QUk9NSVNDICAgICAgMAorICNkZWZpbmUgVklSVElPX05FVF9DVFJMX1JYX0FMTE1VTFRJICAgICAxCisgI2RlZmluZSBWSVJUSU9fTkVUX0NUUkxfUlhfQUxMVU5JICAgICAgIDIKKyAjZGVmaW5lIFZJUlRJT19ORVRfQ1RSTF9SWF9OT01VTFRJICAgICAgMworICNkZWZpbmUgVklSVElPX05FVF9DVFJMX1JYX05PVU5JICAgICAgICA0CisgI2RlZmluZSBWSVJUSU9fTkVUX0NUUkxfUlhfTk9CQ0FTVCAgICAgIDUKKworLyoKKyAqIENvbnRyb2wgdGhlIE1BQyBmaWx0ZXIgdGFibGUuCisgKgorICogVGhlIE1BQyBmaWx0ZXIgdGFibGUgaXMgbWFuYWdlZCBieSB0aGUgaHlwZXJ2aXNvciwgdGhlIGd1ZXN0IHNob3VsZAorICogYXNzdW1lIHRoZSBzaXplIGlzIGluZmluaXRlLiAgRmlsdGVyaW5nIHNob3VsZCBiZSBjb25zaWRlcmVkCisgKiBub24tcGVyZmVjdCwgaWUuIGJhc2VkIG9uIGh5cGVydmlzb3IgcmVzb3VyY2VzLCB0aGUgZ3Vlc3QgbWF5CisgKiByZWNlaXZlZCBwYWNrZXRzIGZyb20gc291cmNlcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBmaWx0ZXIgbGlzdC4KKyAqCisgKiBJbiBhZGRpdGlvbiB0byB0aGUgY2xhc3MvY21kIGhlYWRlciwgdGhlIFRBQkxFX1NFVCBjb21tYW5kIHJlcXVpcmVzCisgKiB0d28gb3V0IHNjYXR0ZXJsaXN0cy4gIEVhY2ggY29udGFpbnMgYSA0IGJ5dGUgY291bnQgb2YgZW50cmllcyBmb2xsb3dlZAorICogYnkgYSBjb25jYXRlbmF0ZWQgYnl0ZSBzdHJlYW0gb2YgdGhlIEVUSF9BTEVOIE1BQyBhZGRyZXNzZXMuICBUaGUKKyAqIGZpcnN0IHNnIGxpc3QgY29udGFpbnMgdW5pY2FzdCBhZGRyZXNzZXMsIHRoZSBzZWNvbmQgaXMgZm9yIG11bHRpY2FzdC4KKyAqIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBwcmVzZW50IGlmIHRoZSBWSVJUSU9fTkVUX0ZfQ1RSTF9SWCBmZWF0dXJlCisgKiBpcyBhdmFpbGFibGUuCisgKi8KK3N0cnVjdCB2aXJ0aW9fbmV0X2N0cmxfbWFjIHsKKwlfX3UzMiBlbnRyaWVzOworCV9fdTggbWFjc1tdW0VUSF9BTEVOXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgVklSVElPX05FVF9DVFJMX01BQyAgICAxCisgI2RlZmluZSBWSVJUSU9fTkVUX0NUUkxfTUFDX1RBQkxFX1NFVCAgICAgICAgMAorCisvKgorICogQ29udHJvbCBWTEFOIGZpbHRlcmluZworICoKKyAqIFRoZSBWTEFOIGZpbHRlciB0YWJsZSBpcyBjb250cm9sbGVkIHZpYSBhIHNpbXBsZSBBREQvREVMIGludGVyZmFjZS4KKyAqIFZMQU4gSURzIG5vdCBhZGRlZCBtYXkgYmUgZmlsdGVyZCBieSB0aGUgaHlwZXJ2aXNvci4gIERlbCBpcyB0aGUKKyAqIG9wcG9zaXRlIG9mIGFkZC4gIEJvdGggY29tbWFuZHMgZXhwZWN0IGFuIG91dCBlbnRyeSBjb250YWluaW5nIGEgMgorICogYnl0ZSBWTEFOIElELiAgVkxBTiBmaWx0ZXJ0aW5nIGlzIGF2YWlsYWJsZSB3aXRoIHRoZQorICogVklSVElPX05FVF9GX0NUUkxfVkxBTiBmZWF0dXJlIGJpdC4KKyAqLworI2RlZmluZSBWSVJUSU9fTkVUX0NUUkxfVkxBTiAgICAgICAyCisgI2RlZmluZSBWSVJUSU9fTkVUX0NUUkxfVkxBTl9BREQgICAgICAgICAgICAgMAorICNkZWZpbmUgVklSVElPX05FVF9DVFJMX1ZMQU5fREVMICAgICAgICAgICAgIDEKKworI2VuZGlmIC8qIF9MSU5VWF9WSVJUSU9fTkVUX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC92aXJ0aW9fcGNpLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdmlydGlvX3BjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhM2Q3YzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdmlydGlvX3BjaS5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBWaXJ0aW8gUENJIGRyaXZlcgorICoKKyAqIFRoaXMgbW9kdWxlIGFsbG93cyB2aXJ0aW8gZGV2aWNlcyB0byBiZSB1c2VkIG92ZXIgYSB2aXJ0dWFsIFBDSSBkZXZpY2UuCisgKiBUaGlzIGNhbiBiZSB1c2VkIHdpdGggUUVNVSBiYXNlZCBWTU1zIGxpa2UgS1ZNIG9yIFhlbi4KKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDcKKyAqCisgKiBBdXRob3JzOgorICogIEFudGhvbnkgTGlndW9yaSAgPGFsaWd1b3JpQHVzLmlibS5jb20+CisgKgorICogVGhpcyBoZWFkZXIgaXMgQlNEIGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQKKyAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLgorICovCisKKyNpZm5kZWYgX0xJTlVYX1ZJUlRJT19QQ0lfSAorI2RlZmluZSBfTElOVVhfVklSVElPX1BDSV9ICisKKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+CisKKy8qIEEgMzItYml0IHIvbyBiaXRtYXNrIG9mIHRoZSBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgKi8KKyNkZWZpbmUgVklSVElPX1BDSV9IT1NUX0ZFQVRVUkVTCTAKKworLyogQSAzMi1iaXQgci93IGJpdG1hc2sgb2YgZmVhdHVyZXMgYWN0aXZhdGVkIGJ5IHRoZSBndWVzdCAqLworI2RlZmluZSBWSVJUSU9fUENJX0dVRVNUX0ZFQVRVUkVTCTQKKworLyogQSAzMi1iaXQgci93IFBGTiBmb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBxdWV1ZSAqLworI2RlZmluZSBWSVJUSU9fUENJX1FVRVVFX1BGTgkJOAorCisvKiBBIDE2LWJpdCByL28gcXVldWUgc2l6ZSBmb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBxdWV1ZSAqLworI2RlZmluZSBWSVJUSU9fUENJX1FVRVVFX05VTQkJMTIKKworLyogQSAxNi1iaXQgci93IHF1ZXVlIHNlbGVjdG9yICovCisjZGVmaW5lIFZJUlRJT19QQ0lfUVVFVUVfU0VMCQkxNAorCisvKiBBIDE2LWJpdCByL3cgcXVldWUgbm90aWZpZXIgKi8KKyNkZWZpbmUgVklSVElPX1BDSV9RVUVVRV9OT1RJRlkJCTE2CisKKy8qIEFuIDgtYml0IGRldmljZSBzdGF0dXMgcmVnaXN0ZXIuICAqLworI2RlZmluZSBWSVJUSU9fUENJX1NUQVRVUwkJMTgKKworLyogQW4gOC1iaXQgci9vIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIuICBSZWFkaW5nIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUKKyAqIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIElTUiBhbmQgd2lsbCBhbHNvIGNsZWFyIGl0LiAgVGhpcyBpcyBlZmZlY3RpdmVseQorICogYSByZWFkLWFuZC1hY2tub3dsZWRnZS4gKi8KKyNkZWZpbmUgVklSVElPX1BDSV9JU1IJCQkxOQorCisvKiBUaGUgYml0IG9mIHRoZSBJU1Igd2hpY2ggaW5kaWNhdGVzIGEgZGV2aWNlIGNvbmZpZ3VyYXRpb24gY2hhbmdlLiAqLworI2RlZmluZSBWSVJUSU9fUENJX0lTUl9DT05GSUcJCTB4MgorCisvKiBNU0ktWCByZWdpc3RlcnM6IG9ubHkgZW5hYmxlZCBpZiBNU0ktWCBpcyBlbmFibGVkLiAqLworLyogQSAxNi1iaXQgdmVjdG9yIGZvciBjb25maWd1cmF0aW9uIGNoYW5nZXMuICovCisjZGVmaW5lIFZJUlRJT19NU0lfQ09ORklHX1ZFQ1RPUiAgICAgICAgMjAKKy8qIEEgMTYtYml0IHZlY3RvciBmb3Igc2VsZWN0ZWQgcXVldWUgbm90aWZpY2F0aW9ucy4gKi8KKyNkZWZpbmUgVklSVElPX01TSV9RVUVVRV9WRUNUT1IgICAgICAgICAyMgorLyogVmVjdG9yIHZhbHVlIHVzZWQgdG8gZGlzYWJsZSBNU0kgZm9yIHF1ZXVlICovCisjZGVmaW5lIFZJUlRJT19NU0lfTk9fVkVDVE9SICAgICAgICAgICAgMHhmZmZmCisKKy8qIFRoZSByZW1haW5pbmcgc3BhY2UgaXMgZGVmaW5lZCBieSBlYWNoIGRyaXZlciBhcyB0aGUgcGVyLWRyaXZlcgorICogY29uZmlndXJhdGlvbiBzcGFjZSAqLworI2RlZmluZSBWSVJUSU9fUENJX0NPTkZJRyhkZXYpCQkoKGRldiktPm1zaXhfZW5hYmxlZCA/IDI0IDogMjApCisKKy8qIFZpcnRpbyBBQkkgdmVyc2lvbiwgdGhpcyBtdXN0IG1hdGNoIGV4YWN0bHkgKi8KKyNkZWZpbmUgVklSVElPX1BDSV9BQklfVkVSU0lPTgkJMAorCisvKiBIb3cgbWFueSBiaXRzIHRvIHNoaWZ0IHBoeXNpY2FsIHF1ZXVlIGFkZHJlc3Mgd3JpdHRlbiB0byBRVUVVRV9QRk4uCisgKiAxMiBpcyBoaXN0b3JpY2FsLCBhbmQgZHVlIHRvIHg4NiBwYWdlIHNpemUuICovCisjZGVmaW5lIFZJUlRJT19QQ0lfUVVFVUVfQUREUl9TSElGVAkxMgorCisvKiBUaGUgYWxpZ25tZW50IHRvIHVzZSBiZXR3ZWVuIGNvbnN1bWVyIGFuZCBwcm9kdWNlciBwYXJ0cyBvZiB2cmluZy4KKyAqIHg4NiBwYWdlc2l6ZSBhZ2Fpbi4gKi8KKyNkZWZpbmUgVklSVElPX1BDSV9WUklOR19BTElHTgkJNDA5NgorI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdmlydGlvX3JpbmcuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC92aXJ0aW9fcmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MWRjNDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdmlydGlvX3JpbmcuaApAQCAtMCwwICsxLDExMyBAQAorI2lmbmRlZiBfTElOVVhfVklSVElPX1JJTkdfSAorI2RlZmluZSBfTElOVVhfVklSVElPX1JJTkdfSAorLyogQW4gaW50ZXJmYWNlIGZvciBlZmZpY2llbnQgdmlydGlvIGltcGxlbWVudGF0aW9uLCBjdXJyZW50bHkgZm9yIHVzZSBieSBLVk0KKyAqIGFuZCBsZ3Vlc3QsIGJ1dCBob3BlZnVsbHkgb3RoZXJzIHNvb24uICBEbyBOT1QgY2hhbmdlIHRoaXMgc2luY2UgaXQgd2lsbAorICogYnJlYWsgZXhpc3Rpbmcgc2VydmVycyBhbmQgY2xpZW50cy4KKyAqCisgKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAorICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuCisgKgorICogQ29weXJpZ2h0IFJ1c3R5IFJ1c3NlbGwgSUJNIENvcnBvcmF0aW9uIDIwMDcuICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogVGhpcyBtYXJrcyBhIGJ1ZmZlciBhcyBjb250aW51aW5nIHZpYSB0aGUgbmV4dCBmaWVsZC4gKi8KKyNkZWZpbmUgVlJJTkdfREVTQ19GX05FWFQJMQorLyogVGhpcyBtYXJrcyBhIGJ1ZmZlciBhcyB3cml0ZS1vbmx5IChvdGhlcndpc2UgcmVhZC1vbmx5KS4gKi8KKyNkZWZpbmUgVlJJTkdfREVTQ19GX1dSSVRFCTIKKy8qIFRoaXMgbWVhbnMgdGhlIGJ1ZmZlciBjb250YWlucyBhIGxpc3Qgb2YgYnVmZmVyIGRlc2NyaXB0b3JzLiAqLworI2RlZmluZSBWUklOR19ERVNDX0ZfSU5ESVJFQ1QJNAorCisvKiBUaGUgSG9zdCB1c2VzIHRoaXMgaW4gdXNlZC0+ZmxhZ3MgdG8gYWR2aXNlIHRoZSBHdWVzdDogZG9uJ3Qga2ljayBtZSB3aGVuCisgKiB5b3UgYWRkIGEgYnVmZmVyLiAgSXQncyB1bnJlbGlhYmxlLCBzbyBpdCdzIHNpbXBseSBhbiBvcHRpbWl6YXRpb24uICBHdWVzdAorICogd2lsbCBzdGlsbCBraWNrIGlmIGl0J3Mgb3V0IG9mIGJ1ZmZlcnMuICovCisjZGVmaW5lIFZSSU5HX1VTRURfRl9OT19OT1RJRlkJMQorLyogVGhlIEd1ZXN0IHVzZXMgdGhpcyBpbiBhdmFpbC0+ZmxhZ3MgdG8gYWR2aXNlIHRoZSBIb3N0OiBkb24ndCBpbnRlcnJ1cHQgbWUKKyAqIHdoZW4geW91IGNvbnN1bWUgYSBidWZmZXIuICBJdCdzIHVucmVsaWFibGUsIHNvIGl0J3Mgc2ltcGx5IGFuCisgKiBvcHRpbWl6YXRpb24uICAqLworI2RlZmluZSBWUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVAkxCisKKy8qIFdlIHN1cHBvcnQgaW5kaXJlY3QgYnVmZmVyIGRlc2NyaXB0b3JzICovCisjZGVmaW5lIFZJUlRJT19SSU5HX0ZfSU5ESVJFQ1RfREVTQwkyOAorCisvKiBWaXJ0aW8gcmluZyBkZXNjcmlwdG9yczogMTYgYnl0ZXMuICBUaGVzZSBjYW4gY2hhaW4gdG9nZXRoZXIgdmlhICJuZXh0Ii4gKi8KK3N0cnVjdCB2cmluZ19kZXNjIHsKKwkvKiBBZGRyZXNzIChndWVzdC1waHlzaWNhbCkuICovCisJX191NjQgYWRkcjsKKwkvKiBMZW5ndGguICovCisJX191MzIgbGVuOworCS8qIFRoZSBmbGFncyBhcyBpbmRpY2F0ZWQgYWJvdmUuICovCisJX191MTYgZmxhZ3M7CisJLyogV2UgY2hhaW4gdW51c2VkIGRlc2NyaXB0b3JzIHZpYSB0aGlzLCB0b28gKi8KKwlfX3UxNiBuZXh0OworfTsKKworc3RydWN0IHZyaW5nX2F2YWlsIHsKKwlfX3UxNiBmbGFnczsKKwlfX3UxNiBpZHg7CisJX191MTYgcmluZ1tdOworfTsKKworLyogdTMyIGlzIHVzZWQgaGVyZSBmb3IgaWRzIGZvciBwYWRkaW5nIHJlYXNvbnMuICovCitzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtIHsKKwkvKiBJbmRleCBvZiBzdGFydCBvZiB1c2VkIGRlc2NyaXB0b3IgY2hhaW4uICovCisJX191MzIgaWQ7CisJLyogVG90YWwgbGVuZ3RoIG9mIHRoZSBkZXNjcmlwdG9yIGNoYWluIHdoaWNoIHdhcyB1c2VkICh3cml0dGVuIHRvKSAqLworCV9fdTMyIGxlbjsKK307CisKK3N0cnVjdCB2cmluZ191c2VkIHsKKwlfX3UxNiBmbGFnczsKKwlfX3UxNiBpZHg7CisJc3RydWN0IHZyaW5nX3VzZWRfZWxlbSByaW5nW107Cit9OworCitzdHJ1Y3QgdnJpbmcgeworCXVuc2lnbmVkIGludCBudW07CisKKwlzdHJ1Y3QgdnJpbmdfZGVzYyAqZGVzYzsKKworCXN0cnVjdCB2cmluZ19hdmFpbCAqYXZhaWw7CisKKwlzdHJ1Y3QgdnJpbmdfdXNlZCAqdXNlZDsKK307CisKKy8qIFRoZSBzdGFuZGFyZCBsYXlvdXQgZm9yIHRoZSByaW5nIGlzIGEgY29udGludW91cyBjaHVuayBvZiBtZW1vcnkgd2hpY2ggbG9va3MKKyAqIGxpa2UgdGhpcy4gIFdlIGFzc3VtZSBudW0gaXMgYSBwb3dlciBvZiAyLgorICoKKyAqIHN0cnVjdCB2cmluZworICogeworICoJLy8gVGhlIGFjdHVhbCBkZXNjcmlwdG9ycyAoMTYgYnl0ZXMgZWFjaCkKKyAqCXN0cnVjdCB2cmluZ19kZXNjIGRlc2NbbnVtXTsKKyAqCisgKgkvLyBBIHJpbmcgb2YgYXZhaWxhYmxlIGRlc2NyaXB0b3IgaGVhZHMgd2l0aCBmcmVlLXJ1bm5pbmcgaW5kZXguCisgKglfX3UxNiBhdmFpbF9mbGFnczsKKyAqCV9fdTE2IGF2YWlsX2lkeDsKKyAqCV9fdTE2IGF2YWlsYWJsZVtudW1dOworICoKKyAqCS8vIFBhZGRpbmcgdG8gdGhlIG5leHQgYWxpZ24gYm91bmRhcnkuCisgKgljaGFyIHBhZFtdOworICoKKyAqCS8vIEEgcmluZyBvZiB1c2VkIGRlc2NyaXB0b3IgaGVhZHMgd2l0aCBmcmVlLXJ1bm5pbmcgaW5kZXguCisgKglfX3UxNiB1c2VkX2ZsYWdzOworICoJX191MTYgdXNlZF9pZHg7CisgKglzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtIHVzZWRbbnVtXTsKKyAqIH07CisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgdnJpbmdfaW5pdChzdHJ1Y3QgdnJpbmcgKnZyLCB1bnNpZ25lZCBpbnQgbnVtLCB2b2lkICpwLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBhbGlnbikKK3sKKwl2ci0+bnVtID0gbnVtOworCXZyLT5kZXNjID0gcDsKKwl2ci0+YXZhaWwgPSBwICsgbnVtKnNpemVvZihzdHJ1Y3QgdnJpbmdfZGVzYyk7CisJdnItPnVzZWQgPSAodm9pZCAqKSgoKHVuc2lnbmVkIGxvbmcpJnZyLT5hdmFpbC0+cmluZ1tudW1dICsgYWxpZ24tMSkKKwkJCSAgICAmIH4oYWxpZ24gLSAxKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIHZyaW5nX3NpemUodW5zaWduZWQgaW50IG51bSwgdW5zaWduZWQgbG9uZyBhbGlnbikKK3sKKwlyZXR1cm4gKChzaXplb2Yoc3RydWN0IHZyaW5nX2Rlc2MpICogbnVtICsgc2l6ZW9mKF9fdTE2KSAqICgyICsgbnVtKQorCQkgKyBhbGlnbiAtIDEpICYgfihhbGlnbiAtIDEpKQorCQkrIHNpemVvZihfX3UxNikgKiAyICsgc2l6ZW9mKHN0cnVjdCB2cmluZ191c2VkX2VsZW0pICogbnVtOworfQorCisjZW5kaWYgLyogX0xJTlVYX1ZJUlRJT19SSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC92aXJ0aW9fcm5nLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdmlydGlvX3JuZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZDVkZTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdmlydGlvX3JuZy5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfTElOVVhfVklSVElPX1JOR19ICisjZGVmaW5lIF9MSU5VWF9WSVJUSU9fUk5HX0gKKy8qIFRoaXMgaGVhZGVyIGlzIEJTRCBsaWNlbnNlZCBzbyBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50CisgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4gKi8KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgorCisjZW5kaWYgLyogX0xJTlVYX1ZJUlRJT19STkdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3Z0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvdnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTA4ZjA1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3Z0LmgKQEAgLTAsMCArMSw5MCBAQAorI2lmbmRlZiBfTElOVVhfVlRfSAorI2RlZmluZSBfTElOVVhfVlRfSAorCisKKy8qCisgKiBUaGVzZSBjb25zdGFudHMgYXJlIGFsc28gdXNlZnVsIGZvciB1c2VyLWxldmVsIGFwcHMgKGUuZy4sIFZDCisgKiByZXNpemluZykuCisgKi8KKyNkZWZpbmUgTUlOX05SX0NPTlNPTEVTIDEgICAgICAgLyogbXVzdCBiZSBhdCBsZWFzdCAxICovCisjZGVmaW5lIE1BWF9OUl9DT05TT0xFUwk2MwkvKiBzZXJpYWwgbGluZXMgc3RhcnQgYXQgNjQgKi8KKyNkZWZpbmUgTUFYX05SX1VTRVJfQ09OU09MRVMgNjMJLyogbXVzdCBiZSByb290IHRvIGFsbG9jYXRlIGFib3ZlIHRoaXMgKi8KKwkJLyogTm90ZTogdGhlIGlvY3RsIFZUX0dFVFNUQVRFIGRvZXMgbm90IHdvcmsgZm9yCisJCSAgIGNvbnNvbGVzIDE2IGFuZCBoaWdoZXIgKHNpbmNlIGl0IHJldHVybnMgYSBzaG9ydCkgKi8KKworLyogMHg1NiBpcyAnVicsIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIHRlcm1pb3MgYW5kIGtkICovCisKKyNkZWZpbmUgVlRfT1BFTlFSWQkweDU2MDAJLyogZmluZCBhdmFpbGFibGUgdnQgKi8KKworc3RydWN0IHZ0X21vZGUgeworCWNoYXIgbW9kZTsJCS8qIHZ0IG1vZGUgKi8KKwljaGFyIHdhaXR2OwkJLyogaWYgc2V0LCBoYW5nIG9uIHdyaXRlcyBpZiBub3QgYWN0aXZlICovCisJc2hvcnQgcmVsc2lnOwkJLyogc2lnbmFsIHRvIHJhaXNlIG9uIHJlbGVhc2UgcmVxICovCisJc2hvcnQgYWNxc2lnOwkJLyogc2lnbmFsIHRvIHJhaXNlIG9uIGFjcXVpc2l0aW9uICovCisJc2hvcnQgZnJzaWc7CQkvKiB1bnVzZWQgKHNldCB0byAwKSAqLworfTsKKyNkZWZpbmUgVlRfR0VUTU9ERQkweDU2MDEJLyogZ2V0IG1vZGUgb2YgYWN0aXZlIHZ0ICovCisjZGVmaW5lIFZUX1NFVE1PREUJMHg1NjAyCS8qIHNldCBtb2RlIG9mIGFjdGl2ZSB2dCAqLworI2RlZmluZQkJVlRfQVVUTwkJMHgwMAkvKiBhdXRvIHZ0IHN3aXRjaGluZyAqLworI2RlZmluZQkJVlRfUFJPQ0VTUwkweDAxCS8qIHByb2Nlc3MgY29udHJvbHMgc3dpdGNoaW5nICovCisjZGVmaW5lCQlWVF9BQ0tBQ1EJMHgwMgkvKiBhY2tub3dsZWRnZSBzd2l0Y2ggKi8KKworc3RydWN0IHZ0X3N0YXQgeworCXVuc2lnbmVkIHNob3J0IHZfYWN0aXZlOwkvKiBhY3RpdmUgdnQgKi8KKwl1bnNpZ25lZCBzaG9ydCB2X3NpZ25hbDsJLyogc2lnbmFsIHRvIHNlbmQgKi8KKwl1bnNpZ25lZCBzaG9ydCB2X3N0YXRlOwkJLyogdnQgYml0bWFzayAqLworfTsKKyNkZWZpbmUgVlRfR0VUU1RBVEUJMHg1NjAzCS8qIGdldCBnbG9iYWwgdnQgc3RhdGUgaW5mbyAqLworI2RlZmluZSBWVF9TRU5EU0lHCTB4NTYwNAkvKiBzaWduYWwgdG8gc2VuZCB0byBiaXRtYXNrIG9mIHZ0cyAqLworCisjZGVmaW5lIFZUX1JFTERJU1AJMHg1NjA1CS8qIHJlbGVhc2UgZGlzcGxheSAqLworCisjZGVmaW5lIFZUX0FDVElWQVRFCTB4NTYwNgkvKiBtYWtlIHZ0IGFjdGl2ZSAqLworI2RlZmluZSBWVF9XQUlUQUNUSVZFCTB4NTYwNwkvKiB3YWl0IGZvciB2dCBhY3RpdmUgKi8KKyNkZWZpbmUgVlRfRElTQUxMT0NBVEUJMHg1NjA4ICAvKiBmcmVlIG1lbW9yeSBhc3NvY2lhdGVkIHRvIHZ0ICovCisKK3N0cnVjdCB2dF9zaXplcyB7CisJdW5zaWduZWQgc2hvcnQgdl9yb3dzOwkJLyogbnVtYmVyIG9mIHJvd3MgKi8KKwl1bnNpZ25lZCBzaG9ydCB2X2NvbHM7CQkvKiBudW1iZXIgb2YgY29sdW1ucyAqLworCXVuc2lnbmVkIHNob3J0IHZfc2Nyb2xsc2l6ZTsJLyogbnVtYmVyIG9mIGxpbmVzIG9mIHNjcm9sbGJhY2sgKi8KK307CisjZGVmaW5lIFZUX1JFU0laRQkweDU2MDkJLyogc2V0IGtlcm5lbCdzIGlkZWEgb2Ygc2NyZWVuc2l6ZSAqLworCitzdHJ1Y3QgdnRfY29uc2l6ZSB7CisJdW5zaWduZWQgc2hvcnQgdl9yb3dzOwkvKiBudW1iZXIgb2Ygcm93cyAqLworCXVuc2lnbmVkIHNob3J0IHZfY29sczsJLyogbnVtYmVyIG9mIGNvbHVtbnMgKi8KKwl1bnNpZ25lZCBzaG9ydCB2X3ZsaW47CS8qIG51bWJlciBvZiBwaXhlbCByb3dzIG9uIHNjcmVlbiAqLworCXVuc2lnbmVkIHNob3J0IHZfY2xpbjsJLyogbnVtYmVyIG9mIHBpeGVsIHJvd3MgcGVyIGNoYXJhY3RlciAqLworCXVuc2lnbmVkIHNob3J0IHZfdmNvbDsJLyogbnVtYmVyIG9mIHBpeGVsIGNvbHVtbnMgb24gc2NyZWVuICovCisJdW5zaWduZWQgc2hvcnQgdl9jY29sOwkvKiBudW1iZXIgb2YgcGl4ZWwgY29sdW1ucyBwZXIgY2hhcmFjdGVyICovCit9OworI2RlZmluZSBWVF9SRVNJWkVYICAgICAgMHg1NjBBICAvKiBzZXQga2VybmVsJ3MgaWRlYSBvZiBzY3JlZW5zaXplICsgbW9yZSAqLworI2RlZmluZSBWVF9MT0NLU1dJVENIICAgMHg1NjBCICAvKiBkaXNhbGxvdyB2dCBzd2l0Y2hpbmcgKi8KKyNkZWZpbmUgVlRfVU5MT0NLU1dJVENIIDB4NTYwQyAgLyogYWxsb3cgdnQgc3dpdGNoaW5nICovCisjZGVmaW5lIFZUX0dFVEhJRk9OVE1BU0sgMHg1NjBEICAvKiByZXR1cm4gaGkgZm9udCBtYXNrICovCisKK3N0cnVjdCB2dF9ldmVudCB7CisJdW5zaWduZWQgaW50IGV2ZW50OworI2RlZmluZSBWVF9FVkVOVF9TV0lUQ0gJCTB4MDAwMQkvKiBDb25zb2xlIHN3aXRjaCAqLworI2RlZmluZSBWVF9FVkVOVF9CTEFOSwkJMHgwMDAyCS8qIFNjcmVlbiBibGFuayAqLworI2RlZmluZSBWVF9FVkVOVF9VTkJMQU5LCTB4MDAwNAkvKiBTY3JlZW4gdW5ibGFuayAqLworI2RlZmluZSBWVF9FVkVOVF9SRVNJWkUJCTB4MDAwOAkvKiBSZXNpemUgZGlzcGxheSAqLworI2RlZmluZSBWVF9NQVhfRVZFTlQJCTB4MDAwRgorCXVuc2lnbmVkIGludCBvbGRldjsJCS8qIE9sZCBjb25zb2xlICovCisJdW5zaWduZWQgaW50IG5ld2V2OwkJLyogTmV3IGNvbnNvbGUgKGlmIGNoYW5naW5nKSAqLworCXVuc2lnbmVkIGludCBwYWRbNF07CQkvKiBQYWRkaW5nIGZvciBleHBhbnNpb24gKi8KK307CisKKyNkZWZpbmUgVlRfV0FJVEVWRU5UCTB4NTYwRQkvKiBXYWl0IGZvciBhbiBldmVudCAqLworCitzdHJ1Y3QgdnRfc2V0YWN0aXZhdGUgeworCXVuc2lnbmVkIGludCBjb25zb2xlOworCXN0cnVjdCB2dF9tb2RlIG1vZGU7Cit9OworCisjZGVmaW5lIFZUX1NFVEFDVElWQVRFCTB4NTYwRgkvKiBBY3RpdmF0ZSBhbmQgc2V0IHRoZSBtb2RlIG9mIGEgY29uc29sZSAqLworCisKKyNkZWZpbmUgdnRfZ2V0X2ttc2dfcmVkaXJlY3QoKSB2dF9rbXNnX3JlZGlyZWN0KC0xKQorCisjZW5kaWYgLyogX0xJTlVYX1ZUX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC93YWl0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvd2FpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZGJkYzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvd2FpdC5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgX0xJTlVYX1dBSVRfSAorI2RlZmluZSBfTElOVVhfV0FJVF9ICisKKyNkZWZpbmUgV05PSEFORwkJMHgwMDAwMDAwMQorI2RlZmluZSBXVU5UUkFDRUQJMHgwMDAwMDAwMgorI2RlZmluZSBXU1RPUFBFRAlXVU5UUkFDRUQKKyNkZWZpbmUgV0VYSVRFRAkJMHgwMDAwMDAwNAorI2RlZmluZSBXQ09OVElOVUVECTB4MDAwMDAwMDgKKyNkZWZpbmUgV05PV0FJVAkJMHgwMTAwMDAwMAkvKiBEb24ndCByZWFwLCBqdXN0IHBvbGwgc3RhdHVzLiAgKi8KKworI2RlZmluZSBfX1dOT1RIUkVBRAkweDIwMDAwMDAwCS8qIERvbid0IHdhaXQgb24gY2hpbGRyZW4gb2Ygb3RoZXIgdGhyZWFkcyBpbiB0aGlzIGdyb3VwICovCisjZGVmaW5lIF9fV0FMTAkJMHg0MDAwMDAwMAkvKiBXYWl0IG9uIGFsbCBjaGlsZHJlbiwgcmVnYXJkbGVzcyBvZiB0eXBlICovCisjZGVmaW5lIF9fV0NMT05FCTB4ODAwMDAwMDAJLyogV2FpdCBvbmx5IG9uIG5vbi1TSUdDSExEIGNoaWxkcmVuICovCisKKy8qIEZpcnN0IGFyZ3VtZW50IHRvIHdhaXRpZDogKi8KKyNkZWZpbmUgUF9BTEwJCTAKKyNkZWZpbmUgUF9QSUQJCTEKKyNkZWZpbmUgUF9QR0lECQkyCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvd2Fucm91dGVyLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvd2Fucm91dGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU2MTVhYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC93YW5yb3V0ZXIuaApAQCAtMCwwICsxLDQ1MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIHdhbnJvdXRlci5oCURlZmluaXRpb25zIGZvciB0aGUgV0FOIE11bHRpcHJvdG9jb2wgUm91dGVyIE1vZHVsZS4KKyoJCVRoaXMgbW9kdWxlIHByb3ZpZGVzIEFQSSBhbmQgY29tbW9uIHNlcnZpY2VzIGZvciBXQU4gTGluaworKgkJRHJpdmVycyBhbmQgaXMgY29tcGxldGVseSBoYXJkd2FyZS1pbmRlcGVuZGVudC4KKyoKKyogQXV0aG9yOiAJTmVuYWQgQ29yYmljIDxuY29yYmljQHNhbmdvbWEuY29tPgorKgkJR2lkZW9uIEhhY2sgCQorKiBBZGRpdGlvbnM6CUFybmFsZG8gTWVsbworKgorKiBDb3B5cmlnaHQ6CShjKSAxOTk1LTIwMDAgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgorKgorKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKiBKdWwgMjEsIDIwMDAgIE5lbmFkIENvcmJpYwlBZGRlZCBXQU5fRlQxX1JFQURZIFN0YXRlCisqIEZlYiAyNCwgMjAwMCAgTmVuYWQgQ29yYmljICAgIEFkZGVkIHN1cHBvcnQgZm9yIHNvY2tldCBiYXNlZCB4MjVhcGkKKyogSmFuIDI4LCAyMDAwICBOZW5hZCBDb3JiaWMgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIEFTWU5DIHByb3RvY29sLgorKiBPY3QgMDQsIDE5OTkgIE5lbmFkIENvcmJpYyAJVXBkYXRlZCBmb3IgMi4xLjAgcmVsZWFzZQorKiBKdW4gMDIsIDE5OTkgIEdpZGVvbiBIYWNrCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBTNTE0IGFkYXB0ZXIuCisqIE1heSAyMywgMTk5OQlBcm5hbGRvIE1lbG8JQWRkZWQgbG9jYWxfYWRkciB0byB3YW5pZl9jb25mX3QKKyoJCQkJV0FOX0RJU0NPTk5FQ1RJTkcgc3RhdGUgYWRkZWQKKyogSnVsIDIwLCAxOTk4CURhdmlkIEZvbmcJQWRkZWQgSW52ZXJzZSBBUlAgb3B0aW9ucyB0byAnd2FuaWZfY29uZl90JworKiBKdW4gMTIsIDE5OTgJRGF2aWQgRm9uZwlBZGRlZCBDaXNjbyBIRExDIHN1cHBvcnQuCisqIERlYyAxNiwgMTk5NwlKYXNwcmVldCBTaW5naAlNb3ZlZCAnZW5hYmxlX0lQWCcgYW5kICduZXR3b3JrX251bWJlcicgdG8KKyoJCQkJJ3dhbmlmX2NvbmZfdCcKKyogRGVjIDA1LCAxOTk3CUphc3ByZWV0IFNpbmdoCUFkZGVkICdwYXAnLCAnY2hhcCcgdG8gJ3dhbmlmX2NvbmZfdCcKKyoJCQkJQWRkZWQgJ2F1dGhlbnRpY2F0b3InIHRvICd3YW5fcHBwX2NvbmZfdCcKKyogTm92IDA2LCAxOTk3CUphc3ByZWV0IFNpbmdoCUNoYW5nZWQgUm91dGVyIERyaXZlciB2ZXJzaW9uIHRvIDEuMSBmcm9tIDEuMAorKiBPY3QgMjAsIDE5OTcJSmFzcHJlZXQgU2luZ2gJQWRkZWQgJ2NpcicsJ2JjJywnYmUnIGFuZCAnbWMnIHRvICd3YW5pZl9jb25mX3QnCisqCQkJCUFkZGVkICdlbmFibGVfSVBYJyBhbmQgJ25ldHdvcmtfbnVtYmVyJyB0byAKKyoJCQkJJ3dhbl9kZXZpY2VfdCcuICBBbHNvIGFkZGVkIGRlZmluZXMgZm9yCisqCQkJCVVEUCBQQUNLRVQgVFlQRSwgSW50ZXJydXB0IHRlc3QsIGNyaXRpY2FsIHZhbHVlcworKgkJCQlmb3IgUkFDRSBjb25kaXRpb25zLgorKiBPY3QgMDUsIDE5OTcJSmFzcHJlZXQgU2luZ2gJQWRkZWQgJ2RsY2lfbnVtJyBhbmQgJ2RsY2lbMTAwXScgdG8gCisqCQkJCSd3YW5fZnJfY29uZl90JyB0byBjb25maWd1cmUgYSBsaXN0IG9mIGRsY2kocykKKyoJCQkJZm9yIGEgTk9ERSAKKyogSnVsIDA3LCAxOTk3CUphc3ByZWV0IFNpbmdoCUFkZGVkICd0dGwnIHRvICd3YW5kZXZfY29uZl90JyAmICd3YW5fZGV2aWNlX3QnCisqIE1heSAyOSwgMTk5NyAJSmFzcHJlZXQgU2luZ2gJQWRkZWQgJ3R4X2ludF9lbmFibGVkJyB0byAnd2FuX2RldmljZV90JworKiBNYXkgMjEsIDE5OTcJSmFzcHJlZXQgU2luZ2gJQWRkZWQgJ3VkcF9wb3J0JyB0byAnd2FuX2RldmljZV90JworKiBBcHIgMjUsIDE5OTcgIEZhcmhhbiBUaGF3YXIgICBBZGRlZCAndWRwX3BvcnQnIHRvICd3YW5kZXZfY29uZl90JworKiBKYW4gMTYsIDE5OTcJR2VuZSBLb3ppbglyb3V0ZXJfZGV2bGlzdCBtYWRlIHB1YmxpYworKiBKYW4gMDIsIDE5OTcJR2VuZSBLb3ppbglJbml0aWFsIHZlcnNpb24gKGJhc2VkIG9uIHdhbnBpcGUuaCkuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZglfUk9VVEVSX0gKKyNkZWZpbmUJX1JPVVRFUl9ICisKKyNkZWZpbmUJUk9VVEVSX05BTUUJIndhbnJvdXRlciIJLyogaW4gY2FzZSB3ZSBldmVyIGNoYW5nZSBpdCAqLworI2RlZmluZQlST1VURVJfVkVSU0lPTgkxCQkvKiB2ZXJzaW9uIG51bWJlciAqLworI2RlZmluZQlST1VURVJfUkVMRUFTRQkxCQkvKiByZWxlYXNlIChtaW5vciB2ZXJzaW9uKSBudW1iZXIgKi8KKyNkZWZpbmUJUk9VVEVSX0lPQ1RMCSdXJwkJLyogZm9yIElPQ1RMIGNhbGxzICovCisjZGVmaW5lCVJPVVRFUl9NQUdJQwkweDUyNEQ0MTU3TAkvKiBzaWduYXR1cmU6ICdXQU5SJyByZXZlcnNlZCAqLworCisvKiBJT0NUTCBjb2RlcyBmb3IgL3Byb2Mvcm91dGVyLzxkZXZpY2U+IGVudHJpZXMgKHVwIHRvIDI1NSkgKi8KK2VudW0gcm91dGVyX2lvY3RscworeworCVJPVVRFUl9TRVRVUAk9IFJPVVRFUl9JT0NUTDw8OCwJLyogY29uZmlndXJlIGRldmljZSAqLworCVJPVVRFUl9ET1dOLAkJCQkvKiBzaHV0IGRvd24gZGV2aWNlICovCisJUk9VVEVSX1NUQVQsCQkJCS8qIGdldCBkZXZpY2Ugc3RhdHVzICovCisJUk9VVEVSX0lGTkVXLAkJCQkvKiBhZGQgaW50ZXJmYWNlICovCisJUk9VVEVSX0lGREVMLAkJCQkvKiBkZWxldGUgaW50ZXJmYWNlICovCisJUk9VVEVSX0lGU1RBVCwJCQkJLyogZ2V0IGludGVyZmFjZSBzdGF0dXMgKi8KKwlST1VURVJfVVNFUgk9IChST1VURVJfSU9DVEw8PDgpKzE2LAkvKiBkcml2ZXItc3BlY2lmaWMgY2FsbHMgKi8KKwlST1VURVJfVVNFUl9NQVgJPSAoUk9VVEVSX0lPQ1RMPDw4KSszMQorfTsKKworLyogaWRlbnRpZmllcnMgZm9yIGRpc3BsYXlpbmcgcHJvYyBmaWxlIGRhdGEgZm9yIGR1YWwgcG9ydCBhZGFwdGVycyAqLworI2RlZmluZSBQUk9DX0RBVEFfUE9SVF8wIDB4ODAwMAkvKiB0aGUgZGF0YSBpcyBmb3IgcG9ydCAwICovCisjZGVmaW5lIFBST0NfREFUQV9QT1JUXzEgMHg4MDAxCS8qIHRoZSBkYXRhIGlzIGZvciBwb3J0IDEgKi8KKworLyogTkxQSUQgZm9yIHBhY2tldCBlbmNhcHN1bGF0aW9uIChJU08vSUVDIFRSIDk1NzcpICovCisjZGVmaW5lCU5MUElEX0lQCTB4Q0MJLyogSW50ZXJuZXQgUHJvdG9jb2wgRGF0YWdyYW0gKi8KKyNkZWZpbmUJTkxQSURfU05BUAkweDgwCS8qIElFRUUgU3VibmV0d29yayBBY2Nlc3MgUHJvdG9jb2wgKi8KKyNkZWZpbmUJTkxQSURfQ0xOUAkweDgxCS8qIElTTy9JRUMgODQ3MyAqLworI2RlZmluZQlOTFBJRF9FU0lTCTB4ODIJLyogSVNPL0lFQyA5NTQyICovCisjZGVmaW5lCU5MUElEX0lTSVMJMHg4MwkvKiBJU08vSUVDIElTSVMgKi8KKyNkZWZpbmUJTkxQSURfUTkzMwkweDA4CS8qIENDSVRUIFEuOTMzICovCisKKy8qIE1pc2NlbGxhbmVvdXMgKi8KKyNkZWZpbmUJV0FOX0lGTkFNRV9TWgkxNQkvKiBtYXggbGVuZ3RoIG9mIHRoZSBpbnRlcmZhY2UgbmFtZSAqLworI2RlZmluZQlXQU5fRFJWTkFNRV9TWgkxNQkvKiBtYXggbGVuZ3RoIG9mIHRoZSBsaW5rIGRyaXZlciBuYW1lICovCisjZGVmaW5lCVdBTl9BRERSRVNTX1NaCTMxCS8qIG1heCBsZW5ndGggb2YgdGhlIFdBTiBtZWRpYSBhZGRyZXNzICovCisjZGVmaW5lIFVTRURfQllfRklFTEQJOAkvKiBtYXggbGVuZ3RoIG9mIHRoZSB1c2VkIGJ5IGZpZWxkICovCisKKy8qIERlZmluZXMgZm9yIFVEUCBQQUNLRVQgVFlQRSAqLworI2RlZmluZSBVRFBfUFRQSVBFX1RZUEUgCTB4MDEKKyNkZWZpbmUgVURQX0ZQSVBFX1RZUEUJCTB4MDIKKyNkZWZpbmUgVURQX0NQSVBFX1RZUEUJCTB4MDMKKyNkZWZpbmUgVURQX0RSVlNUQVRTX1RZUEUgCTB4MDQKKyNkZWZpbmUgVURQX0lOVkFMSURfVFlQRSAgCTB4MDUKKworLyogQ29tbWFuZCByZXR1cm4gY29kZSAqLworI2RlZmluZSBDTURfT0sJCTAJCS8qIG5vcm1hbCBmaXJtd2FyZSByZXR1cm4gY29kZSAqLworI2RlZmluZSBDTURfVElNRU9VVAkweEZGCQkvKiBmaXJtd2FyZSBjb21tYW5kIHRpbWVkIG91dCAqLworCisvKiBVRFAgUGFja2V0IE1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgVURQX1BLVF9GUk1fU1RBQ0sJMHgwMAorI2RlZmluZSBVRFBfUEtUX0ZSTV9ORVRXT1JLCTB4MDEKKworLyogTWF4aW11bSBpbnRlcnJ1cHQgdGVzdCBjb3VudGVyICovCisjZGVmaW5lIE1BWF9JTlRSX1RFU1RfQ09VTlRFUgkxMDAKKworLyogQ3JpdGljYWwgVmFsdWVzIGZvciBSQUNFIGNvbmRpdGlvbnMqLworI2RlZmluZSBDUklUSUNBTF9JTl9JU1IJCTB4QTEKKyNkZWZpbmUgQ1JJVElDQUxfSU5UUl9IQU5ETEVECTB4QjEKKworLyoqKioqKiBEYXRhIFR5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogWC4yNS1zcGVjaWZpYyBsaW5rLWxldmVsIGNvbmZpZ3VyYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IHdhbl94MjVfY29uZgoreworCXVuc2lnbmVkIGxvX3B2YzsJLyogbG93ZXN0IHBlcm1hbmVudCBjaXJjdWl0IG51bWJlciAqLworCXVuc2lnbmVkIGhpX3B2YzsJLyogaGlnaGVzdCBwZXJtYW5lbnQgY2lyY3VpdCBudW1iZXIgKi8KKwl1bnNpZ25lZCBsb19zdmM7CS8qIGxvd2VzdCBzd2l0Y2hlZCBjaXJjdWl0IG51bWJlciAqLworCXVuc2lnbmVkIGhpX3N2YzsJLyogaGlnaGVzdCBzd2l0Y2hlZCBjaXJjdWl0IG51bWJlciAqLworCXVuc2lnbmVkIGhkbGNfd2luZG93OwkvKiBIRExDIHdpbmRvdyBzaXplICgxLi43KSAqLworCXVuc2lnbmVkIHBrdF93aW5kb3c7CS8qIFguMjUgcGFja2V0IHdpbmRvdyBzaXplICgxLi43KSAqLworCXVuc2lnbmVkIHQxOwkJLyogSERMQyB0aW1lciBUMSwgc2VjICgxLi4zMCkgKi8KKwl1bnNpZ25lZCB0MjsJCS8qIEhETEMgdGltZXIgVDIsIHNlYyAoMC4uMjkpICovCisJdW5zaWduZWQgdDQ7CQkvKiBIRExDIHN1cGVydmlzb3J5IGZyYW1lIHRpbWVyID0gVDQgKiBUMSAqLworCXVuc2lnbmVkIG4yOwkJLyogSERMQyByZXRyYW5zbWlzc2lvbiBsaW1pdCAoMS4uMzApICovCisJdW5zaWduZWQgdDEwX3QyMDsJLyogWC4yNSBSRVNUQVJUIHRpbWVvdXQsIHNlYyAoMS4uMjU1KSAqLworCXVuc2lnbmVkIHQxMV90MjE7CS8qIFguMjUgQ0FMTCB0aW1lb3V0LCBzZWMgKDEuLjI1NSkgKi8KKwl1bnNpZ25lZCB0MTJfdDIyOwkvKiBYLjI1IFJFU0VUIHRpbWVvdXQsIHNlYyAoMS4uMjU1KSAqLworCXVuc2lnbmVkIHQxM190MjM7CS8qIFguMjUgQ0xFQVIgdGltZW91dCwgc2VjICgxLi4yNTUpICovCisJdW5zaWduZWQgdDE2X3QyNjsJLyogWC4yNSBJTlRFUlJVUFQgdGltZW91dCwgc2VjICgxLi4yNTUpICovCisJdW5zaWduZWQgdDI4OwkJLyogWC4yNSBSRUdJU1RSQVRJT04gdGltZW91dCwgc2VjICgxLi4yNTUpICovCisJdW5zaWduZWQgcjEwX3IyMDsJLyogUkVTVEFSVCByZXRyYW5zbWlzc2lvbiBsaW1pdCAoMC4uMjUwKSAqLworCXVuc2lnbmVkIHIxMl9yMjI7CS8qIFJFU0VUIHJldHJhbnNtaXNzaW9uIGxpbWl0ICgwLi4yNTApICovCisJdW5zaWduZWQgcjEzX3IyMzsJLyogQ0xFQVIgcmV0cmFuc21pc3Npb24gbGltaXQgKDAuLjI1MCkgKi8KKwl1bnNpZ25lZCBjY2l0dF9jb21wYXQ7CS8qIGNvbXBhdGliaWxpdHkgbW9kZTogMTk4OC8xOTg0LzE5ODAgKi8KKwl1bnNpZ25lZCB4MjVfY29uZl9vcHQ7ICAgLyogVXNlciBkZWZpbmVkIHgyNSBjb25maWcgb3B0b2lucyAqLworCXVuc2lnbmVkIGNoYXIgTEFQQl9oZGxjX29ubHk7IC8qIFJ1biBpbiBIRExDIG9ubHkgbW9kZSAqLworCXVuc2lnbmVkIGNoYXIgbG9nZ2luZzsgICAvKiBDb250cm9sIGNvbm5lY3Rpb24gbG9nZ2luZyAqLyAgCisJdW5zaWduZWQgY2hhciBvb2Jfb25fbW9kZW07IC8qIFdoZXRoZXIgdG8gc2VuZCBtb2RlbSBzdGF0dXMgdG8gdGhlIHVzZXIgYXBwICovCit9IHdhbl94MjVfY29uZl90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEZyYW1lIHJlbGF5IHNwZWNpZmljIGxpbmstbGV2ZWwgY29uZmlndXJhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgd2FuX2ZyX2NvbmYKK3sKKwl1bnNpZ25lZCBzaWduYWxsaW5nOwkvKiBsb2NhbCBpbi1jaGFubmVsIHNpZ25hbGxpbmcgdHlwZSAqLworCXVuc2lnbmVkIHQzOTE7CQkvKiBsaW5rIGludGVncml0eSB2ZXJpZmljYXRpb24gdGltZXIgKi8KKwl1bnNpZ25lZCB0MzkyOwkJLyogcG9sbGluZyB2ZXJpZmljYXRpb24gdGltZXIgKi8KKwl1bnNpZ25lZCBuMzkxOwkJLyogZnVsbCBzdGF0dXMgcG9sbGluZyBjeWNsZSBjb3VudGVyICovCisJdW5zaWduZWQgbjM5MjsJCS8qIGVycm9yIHRocmVzaG9sZCBjb3VudGVyICovCisJdW5zaWduZWQgbjM5MzsJCS8qIG1vbml0b3JlZCBldmVudHMgY291bnRlciAqLworCXVuc2lnbmVkIGRsY2lfbnVtOwkvKiBudW1iZXIgb2YgRExDcyAoYWNjZXNzIG5vZGUpICovCisJdW5zaWduZWQgIGRsY2lbMTAwXTsgICAgLyogTGlzdCBvZiBhbGwgRExDSXMgKi8KK30gd2FuX2ZyX2NvbmZfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBQUFAtc3BlY2lmaWMgbGluay1sZXZlbCBjb25maWd1cmF0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCB3YW5fcHBwX2NvbmYKK3sKKwl1bnNpZ25lZCByZXN0YXJ0X3RtcjsJLyogcmVzdGFydCB0aW1lciAqLworCXVuc2lnbmVkIGF1dGhfcnNydF90bXI7CS8qIGF1dGhlbnRpY2F0aW9uIHRpbWVyICovCisJdW5zaWduZWQgYXV0aF93YWl0X3RtcjsJLyogYXV0aGVudGljYXRpb24gdGltZXIgKi8KKwl1bnNpZ25lZCBtZG1fZmFpbF90bXI7CS8qIG1vZGVtIGZhaWx1cmUgdGltZXIgKi8KKwl1bnNpZ25lZCBkdHJfZHJvcF90bXI7CS8qIERUUiBkcm9wIHRpbWVyICovCisJdW5zaWduZWQgY29ubmVjdF90bW91dDsJLyogY29ubmVjdGlvbiB0aW1lb3V0ICovCisJdW5zaWduZWQgY29uZl9yZXRyeTsJLyogbWF4LiByZXRyeSAqLworCXVuc2lnbmVkIHRlcm1fcmV0cnk7CS8qIG1heC4gcmV0cnkgKi8KKwl1bnNpZ25lZCBmYWlsX3JldHJ5OwkvKiBtYXguIHJldHJ5ICovCisJdW5zaWduZWQgYXV0aF9yZXRyeTsJLyogbWF4LiByZXRyeSAqLworCXVuc2lnbmVkIGF1dGhfb3B0aW9uczsJLyogYXV0aGVudGljYXRpb24gb3B0LiAqLworCXVuc2lnbmVkIGlwX29wdGlvbnM7CS8qIElQIG9wdGlvbnMgKi8KKwljaGFyCWF1dGhlbnRpY2F0b3I7CS8qIEFVVEhFTlRJQ0FUT1Igb3Igbm90ICovCisJY2hhcglpcF9tb2RlOwkvKiBTdGF0aWMvSG9zdC9QZWVyICovCit9IHdhbl9wcHBfY29uZl90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENIRExDLXNwZWNpZmljIGxpbmstbGV2ZWwgY29uZmlndXJhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgd2FuX2NoZGxjX2NvbmYKK3sKKwl1bnNpZ25lZCBjaGFyIGlnbm9yZV9kY2Q7CS8qIFByb3RvY29sIG9wdGlvbnM6CQkqLworCXVuc2lnbmVkIGNoYXIgaWdub3JlX2N0czsJLyogIElnbm9yZSB0aGVzZSB0byBkZXRlcm1pbmUJKi8KKwl1bnNpZ25lZCBjaGFyIGlnbm9yZV9rZWVwYWxpdmU7CS8qICBsaW5rIHN0YXR1cyAoWWVzIG9yIE5vKQkqLworCXVuc2lnbmVkIGNoYXIgaGRsY19zdHJlYW1pbmc7CS8qICBoZGxjX3N0cmVhbWluZyBtb2RlIChZL04pICovCisJdW5zaWduZWQgY2hhciByZWNlaXZlX29ubHk7CS8qICBubyB0cmFuc21pdCBidWZmZXJpbmcgKFkvTikgKi8KKwl1bnNpZ25lZCBrZWVwYWxpdmVfdHhfdG1yOwkvKiB0cmFuc21pdCBrZWVwYWxpdmUgdGltZXIgKi8KKwl1bnNpZ25lZCBrZWVwYWxpdmVfcnhfdG1yOwkvKiByZWNlaXZlICBrZWVwYWxpdmUgdGltZXIgKi8KKwl1bnNpZ25lZCBrZWVwYWxpdmVfZXJyX21hcmdpbjsJLyoga2VlcGFsaXZlX2Vycm9yX3RvbGVyYW5jZSAqLworCXVuc2lnbmVkIHNsYXJwX3RpbWVyOwkJLyogU0xBUlAgcmVxdWVzdCB0aW1lciAqLworfSB3YW5fY2hkbGNfY29uZl90OworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogV0FOIGRldmljZSBjb25maWd1cmF0aW9uLiBQYXNzZWQgdG8gUk9VVEVSX1NFVFVQIElPQ1RMLgorICovCit0eXBlZGVmIHN0cnVjdCB3YW5kZXZfY29uZgoreworCXVuc2lnbmVkIG1hZ2ljOwkJLyogbWFnaWMgbnVtYmVyIChmb3IgdmVyaWZpY2F0aW9uKSAqLworCXVuc2lnbmVkIGNvbmZpZ19pZDsJLyogY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgaWRlbnRpZmllciAqLworCQkJCS8qKioqKiogaGFyZHdhcmUgY29uZmlndXJhdGlvbiAqKioqKiovCisJdW5zaWduZWQgaW9wb3J0OwkvKiBhZGFwdGVyIEkvTyBwb3J0IGJhc2UgKi8KKwl1bnNpZ25lZCBsb25nIG1hZGRyOwkvKiBkdWFsLXBvcnQgbWVtb3J5IGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBtc2l6ZTsJCS8qIGR1YWwtcG9ydCBtZW1vcnkgc2l6ZSAqLworCWludCBpcnE7CQkvKiBpbnRlcnJ1cHQgcmVxdWVzdCBsZXZlbCAqLworCWludCBkbWE7CQkvKiBETUEgcmVxdWVzdCBsZXZlbCAqLworICAgICAgICBjaGFyIFM1MTRfQ1BVX25vWzFdOwkvKiBTNTE0IFBDSSBhZGFwdGVyIENQVSBudW1iZXIgKCdBJyBvciAnQicpICovCisgICAgICAgIHVuc2lnbmVkIFBDSV9zbG90X25vOwkvKiBTNTE0IFBDSSBhZGFwdGVyIHNsb3QgbnVtYmVyICovCisJY2hhciBhdXRvX3BjaV9jZmc7CS8qIFM1MTUgUENJIGF1dG9tYXRpYyBzbG90IGRldGVjdGlvbiAqLworCWNoYXIgY29tbV9wb3J0OwkJLyogQ29tbXVuaWNhdGlvbiBQb3J0IChQUkk9MCwgU0VDPTEpICovIAorCXVuc2lnbmVkIGJwczsJCS8qIGRhdGEgdHJhbnNmZXIgcmF0ZSAqLworCXVuc2lnbmVkIG10dTsJCS8qIG1heGltdW0gdHJhbnNtaXQgdW5pdCBzaXplICovCisgICAgICAgIHVuc2lnbmVkIHVkcF9wb3J0OyAgICAgIC8qIFVEUCBwb3J0IGZvciBtYW5hZ2VtZW50ICovCisJdW5zaWduZWQgY2hhciB0dGw7CS8qIFRpbWUgVG8gTGl2ZSBmb3IgVURQIHNlY3VyaXR5ICovCisJdW5zaWduZWQgY2hhciBmdDE7CS8qIEZUMSBDb25maWd1cmF0b3IgT3B0aW9uICovCisgICAgICAgIGNoYXIgaW50ZXJmYWNlOwkJLyogUlMtMjMyL1YuMzUsIGV0Yy4gKi8KKwljaGFyIGNsb2NraW5nOwkJLyogZXh0ZXJuYWwvaW50ZXJuYWwgKi8KKwljaGFyIGxpbmVfY29kaW5nOwkvKiBOUlovTlJaSS9GTTAvRk0xLCBldGMuICovCisJY2hhciBzdGF0aW9uOwkJLyogRFRFL0RDRSwgcHJpbWFyeS9zZWNvbmRhcnksIGV0Yy4gKi8KKwljaGFyIGNvbm5lY3Rpb247CS8qIHBlcm1hbmVudC9zd2l0Y2hlZC9vbi1kZW1hbmQgKi8KKwljaGFyIHJlYWRfbW9kZTsJCS8qIHJlYWQgbW9kZTogUG9sbGluZyBvciBpbnRlcnJ1cHQgKi8KKwljaGFyIHJlY2VpdmVfb25seTsJLyogZGlzYWJsZSB0eCBidWZmZXJzICovCisJY2hhciB0dHk7CQkvKiBDcmVhdGUgYSBmYWtlIHR0eSBkZXZpY2UgKi8KKwl1bnNpZ25lZCB0dHlfbWFqb3I7CS8qIE1ham9yIG51bWJlciBmb3Igd2FucGlwZSB0dHkgZGV2aWNlICovCisJdW5zaWduZWQgdHR5X21pbm9yOyAJLyogTWlub3IgbnVtYmVyIGZvciB3YW5waXBlIHR0eSBkZXZpY2UgKi8KKwl1bnNpZ25lZCB0dHlfbW9kZTsJLyogVFRZIG9wZXJhdGlvbiBtb2RlIFNZTkMgb3IgQVNZTkMgKi8KKwljaGFyIGJhY2t1cDsJCS8qIEJhY2t1cCBNb2RlICovCisJdW5zaWduZWQgaHdfb3B0WzRdOwkvKiBvdGhlciBoYXJkd2FyZSBvcHRpb25zICovCisJdW5zaWduZWQgcmVzZXJ2ZWRbNF07CisJCQkJLyoqKioqKiBhcmJpdHJhcnkgZGF0YSAqKioqKioqKioqKioqKiovCisJdW5zaWduZWQgZGF0YV9zaXplOwkvKiBkYXRhIGJ1ZmZlciBzaXplICovCisJdm9pZCogZGF0YTsJCS8qIGRhdGEgYnVmZmVyLCBlLmcuIGZpcm13YXJlICovCisJdW5pb24JCQkvKioqKioqIHByb3RvY29sLXNwZWNpZmljICoqKioqKioqKioqKi8KKwl7CisJCXdhbl94MjVfY29uZl90IHgyNTsJLyogWC4yNSBjb25maWd1cmF0aW9uICovCisJCXdhbl9wcHBfY29uZl90IHBwcDsJLyogUFBQIGNvbmZpZ3VyYXRpb24gKi8KKwkJd2FuX2ZyX2NvbmZfdCBmcjsJLyogZnJhbWUgcmVsYXkgY29uZmlndXJhdGlvbiAqLworCQl3YW5fY2hkbGNfY29uZl90IGNoZGxjOwkvKiBDaXNjbyBIRExDIGNvbmZpZ3VyYXRpb24gKi8KKwl9IHU7Cit9IHdhbmRldl9jb25mX3Q7CisKKy8qICdjb25maWdfaWQnIGRlZmluaXRpb25zICovCisjZGVmaW5lCVdBTkNPTkZJR19YMjUJMTAxCS8qIFguMjUgbGluayAqLworI2RlZmluZQlXQU5DT05GSUdfRlIJMTAyCS8qIGZyYW1lIHJlbGF5IGxpbmsgKi8KKyNkZWZpbmUJV0FOQ09ORklHX1BQUAkxMDMJLyogc3luY2hyb25vdXMgUFBQIGxpbmsgKi8KKyNkZWZpbmUgV0FOQ09ORklHX0NIRExDCTEwNAkvKiBDaXNjbyBIRExDIExpbmsgKi8KKyNkZWZpbmUgV0FOQ09ORklHX0JTQwkxMDUJLyogQmlTeW5jIFN0cmVhbWluZyAqLworI2RlZmluZSBXQU5DT05GSUdfSERMQwkxMDYJLyogSERMQyBTdXBwb3J0ICovCisjZGVmaW5lIFdBTkNPTkZJR19NUFBQICAxMDcJLyogTXVsdGkgUG9ydCBQUFAgb3ZlciBSQVcgQ0hETEMgKi8KKworLyoKKyAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBkZWZpbmVzLgorICovCisvKiBnZW5lcmFsIG9wdGlvbnMgKi8KKyNkZWZpbmUJV0FOT1BUX09GRgkwCisjZGVmaW5lCVdBTk9QVF9PTgkxCisjZGVmaW5lCVdBTk9QVF9OTwkwCisjZGVmaW5lCVdBTk9QVF9ZRVMJMQorCisvKiBpbnRlcmNhY2Ugb3B0aW9ucyAqLworI2RlZmluZQlXQU5PUFRfUlMyMzIJMAorI2RlZmluZQlXQU5PUFRfVjM1CTEKKworLyogZGF0YSBlbmNvZGluZyBvcHRpb25zICovCisjZGVmaW5lCVdBTk9QVF9OUloJMAorI2RlZmluZQlXQU5PUFRfTlJaSQkxCisjZGVmaW5lCVdBTk9QVF9GTTAJMgorI2RlZmluZQlXQU5PUFRfRk0xCTMKKworLyogbGluayB0eXBlIG9wdGlvbnMgKi8KKyNkZWZpbmUJV0FOT1BUX1BPSU5UVE9QT0lOVAkwCS8qIFJUUyBhbHdheXMgYWN0aXZlICovCisjZGVmaW5lCVdBTk9QVF9NVUxUSURST1AJMQkvKiBSVFMgaXMgYWN0aXZlIHdoZW4gdHJhbnNtaXR0aW5nICovCisKKy8qIGNsb2NraW5nIG9wdGlvbnMgKi8KKyNkZWZpbmUJV0FOT1BUX0VYVEVSTkFMCTAKKyNkZWZpbmUJV0FOT1BUX0lOVEVSTkFMCTEKKworLyogc3RhdGlvbiBvcHRpb25zICovCisjZGVmaW5lCVdBTk9QVF9EVEUJCTAKKyNkZWZpbmUJV0FOT1BUX0RDRQkJMQorI2RlZmluZQlXQU5PUFRfQ1BFCQkwCisjZGVmaW5lCVdBTk9QVF9OT0RFCQkxCisjZGVmaW5lCVdBTk9QVF9TRUNPTkRBUlkJMAorI2RlZmluZQlXQU5PUFRfUFJJTUFSWQkJMQorCisvKiBjb25uZWN0aW9uIG9wdGlvbnMgKi8KKyNkZWZpbmUJV0FOT1BUX1BFUk1BTkVOVAkwCS8qIERUUiBhbHdheXMgYWN0aXZlICovCisjZGVmaW5lCVdBTk9QVF9TV0lUQ0hFRAkJMQkvKiB1c2UgRFRSIHRvIHNldHVwIGxpbmsgKGRpYWwtdXApICovCisjZGVmaW5lCVdBTk9QVF9PTkRFTUFORAkJMgkvKiBhY3RpdmF0ZSBEVFIgb25seSBiZWZvcmUgc2VuZGluZyAqLworCisvKiBmcmFtZSByZWxheSBpbi1jaGFubmVsIHNpZ25hbGxpbmcgKi8KKyNkZWZpbmUJV0FOT1BUX0ZSX0FOU0kJCTEJLyogQU5TSSBUMS42MTcgQW5uZXggRCAqLworI2RlZmluZQlXQU5PUFRfRlJfUTkzMwkJMgkvKiBJVFUgUS45MzNBICovCisjZGVmaW5lCVdBTk9QVF9GUl9MTUkJCTMJLyogTE1JICovCisKKy8qIFBQUCBJUCBNb2RlIE9wdGlvbnMgKi8KKyNkZWZpbmUJV0FOT1BUX1BQUF9TVEFUSUMJMAorI2RlZmluZQlXQU5PUFRfUFBQX0hPU1QJCTEKKyNkZWZpbmUJV0FOT1BUX1BQUF9QRUVSCQkyCisKKy8qIEFTWSBNb2RlIE9wdGlvbnMgKi8KKyNkZWZpbmUgV0FOT1BUX09ORSAJCTEKKyNkZWZpbmUgV0FOT1BUX1RXTwkJMgorI2RlZmluZSBXQU5PUFRfT05FX0FORF9IQUxGCTMKKworI2RlZmluZSBXQU5PUFRfTk9ORQkwCisjZGVmaW5lIFdBTk9QVF9PREQgICAgICAxCisjZGVmaW5lIFdBTk9QVF9FVkVOCTIKKworLyogQ0hETEMgUHJvdG9jb2wgT3B0aW9ucyAqLworLyogREYgQ29tbW1lbnRlZCBvdXQgZm9yIG5vdy4KKworI2RlZmluZSBXQU5PUFRfQ0hETENfTk9fRENECQlJR05PUkVfRENEX0ZPUl9MSU5LX1NUQVQKKyNkZWZpbmUgV0FOT1BUX0NIRExDX05PX0NUUwkJSUdOT1JFX0NUU19GT1JfTElOS19TVEFUCisjZGVmaW5lIFdBTk9QVF9DSERMQ19OT19LRUVQQUxJVkUJSUdOT1JFX0tQQUxWX0ZPUl9MSU5LX1NUQVQKKyovCisKKy8qIFBvcnQgb3B0aW9ucyAqLworI2RlZmluZSBXQU5PUFRfUFJJIDAKKyNkZWZpbmUgV0FOT1BUX1NFQyAxCisvKiByZWFkIG1vZGUgKi8KKyNkZWZpbmUJV0FOT1BUX0lOVFIJMAorI2RlZmluZSBXQU5PUFRfUE9MTAkxCisKKworI2RlZmluZSBXQU5PUFRfVFRZX1NZTkMgIDAKKyNkZWZpbmUgV0FOT1BUX1RUWV9BU1lOQyAxCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFdBTiBMaW5rIFN0YXR1cyBJbmZvIChmb3IgUk9VVEVSX1NUQVQgSU9DVEwpLgorICovCit0eXBlZGVmIHN0cnVjdCB3YW5kZXZfc3RhdAoreworCXVuc2lnbmVkIHN0YXRlOwkJLyogbGluayBzdGF0ZSAqLworCXVuc2lnbmVkIG5kZXY7CQkvKiBudW1iZXIgb2YgY29uZmlndXJlZCBpbnRlcmZhY2VzICovCisKKwkvKiBsaW5rL2ludGVyZmFjZSBjb25maWd1cmF0aW9uICovCisJdW5zaWduZWQgY29ubmVjdGlvbjsJLyogcGVybWFuZW50L3N3aXRjaGVkL29uLWRlbWFuZCAqLworCXVuc2lnbmVkIG1lZGlhX3R5cGU7CS8qIEZyYW1lIHJlbGF5L1BQUC9YLjI1L1NETEMsIGV0Yy4gKi8KKwl1bnNpZ25lZCBtdHU7CQkvKiBtYXguIHRyYW5zbWl0IHVuaXQgZm9yIHRoaXMgZGV2aWNlICovCisKKwkvKiBwaHlzaWNhbCBsZXZlbCBzdGF0aXN0aWNzICovCisJdW5zaWduZWQgbW9kZW1fc3RhdHVzOwkvKiBtb2RlbSBzdGF0dXMgKi8KKwl1bnNpZ25lZCByeF9mcmFtZXM7CS8qIHJlY2VpdmVkIGZyYW1lcyBjb3VudCAqLworCXVuc2lnbmVkIHJ4X292ZXJydW5zOwkvKiByZWNlaXZlciBvdmVycnVuIGVycm9yIGNvdW50ICovCisJdW5zaWduZWQgcnhfY3JjX2VycjsJLyogcmVjZWl2ZSBDUkMgZXJyb3IgY291bnQgKi8KKwl1bnNpZ25lZCByeF9hYm9ydHM7CS8qIHJlY2VpdmVkIGFib3J0ZWQgZnJhbWVzIGNvdW50ICovCisJdW5zaWduZWQgcnhfYmFkX2xlbmd0aDsJLyogdW5leHBldGVkbHkgbG9uZy9zaG9ydCBmcmFtZXMgY291bnQgKi8KKwl1bnNpZ25lZCByeF9kcm9wcGVkOwkvKiBmcmFtZXMgZGlzY2FyZGVkIGF0IGRldmljZSBsZXZlbCAqLworCXVuc2lnbmVkIHR4X2ZyYW1lczsJLyogdHJhbnNtaXR0ZWQgZnJhbWVzIGNvdW50ICovCisJdW5zaWduZWQgdHhfdW5kZXJydW5zOwkvKiBhYm9ydGVkIHRyYW5zbWlzc2lvbnMgKHVuZGVycnVucykgY291bnQgKi8KKwl1bnNpZ25lZCB0eF90aW1lb3V0czsJLyogdHJhbnNtaXNzaW9uIHRpbWVvdXRzICovCisJdW5zaWduZWQgdHhfcmVqZWN0czsJLyogb3RoZXIgdHJhbnNtaXQgZXJyb3JzICovCisKKwkvKiBtZWRpYSBsZXZlbCBzdGF0aXN0aWNzICovCisJdW5zaWduZWQgcnhfYmFkX2Zvcm1hdDsJLyogZnJhbWVzIHdpdGggaW52YWxpZCBmb3JtYXQgKi8KKwl1bnNpZ25lZCByeF9iYWRfYWRkcjsJLyogZnJhbWVzIHdpdGggaW52YWxpZCBtZWRpYSBhZGRyZXNzICovCisJdW5zaWduZWQgdHhfcmV0cmllczsJLyogZnJhbWVzIHJlLXRyYW5zbWl0dGVkICovCisJdW5zaWduZWQgcmVzZXJ2ZWRbMTZdOwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworfSB3YW5kZXZfc3RhdF90OworCisvKiAnc3RhdGUnIGRlZmluZXMgKi8KK2VudW0gd2FuX3N0YXRlcworeworCVdBTl9VTkNPTkZJR1VSRUQsCS8qIGxpbmsvY2hhbm5lbCBpcyBub3QgY29uZmlndXJlZCAqLworCVdBTl9ESVNDT05ORUNURUQsCS8qIGxpbmsvY2hhbm5lbCBpcyBkaXNjb25uZWN0ZWQgKi8KKwlXQU5fQ09OTkVDVElORywJCS8qIGNvbm5lY3Rpb24gaXMgaW4gcHJvZ3Jlc3MgKi8KKwlXQU5fQ09OTkVDVEVELAkJLyogbGluay9jaGFubmVsIGlzIG9wZXJhdGlvbmFsICovCisJV0FOX0xJTUlULAkJLyogZm9yIHZlcmlmaWNhdGlvbiBvbmx5ICovCisJV0FOX0RVQUxQT1JULAkJLyogZm9yIER1YWwgUG9ydCBjYXJkcyAqLworCVdBTl9ESVNDT05ORUNUSU5HLAorCVdBTl9GVDFfUkVBRFkJCS8qIEZUMSBDb25maWd1cmF0b3IgUmVhZHkgKi8KK307CisKK2VudW0geworCVdBTl9MT0NBTF9JUCwKKwlXQU5fUE9JTlRPUE9JTlRfSVAsCisJV0FOX05FVE1BU0tfSVAsCisJV0FOX0JST0FEQ0FTVF9JUAorfTsKKworLyogJ21vZGVtX3N0YXR1cycgbWFza3MgKi8KKyNkZWZpbmUJV0FOX01PREVNX0NUUwkweDAwMDEJLyogQ1RTIGxpbmUgYWN0aXZlICovCisjZGVmaW5lCVdBTl9NT0RFTV9EQ0QJMHgwMDAyCS8qIERDRCBsaW5lIGFjdGl2ZSAqLworI2RlZmluZQlXQU5fTU9ERU1fRFRSCTB4MDAxMAkvKiBEVFIgbGluZSBhY3RpdmUgKi8KKyNkZWZpbmUJV0FOX01PREVNX1JUUwkweDAwMjAJLyogUlRTIGxpbmUgYWN0aXZlICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogV0FOIGludGVyZmFjZSAobG9naWNhbCBjaGFubmVsKSBjb25maWd1cmF0aW9uIChmb3IgUk9VVEVSX0lGTkVXIElPQ1RMKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgd2FuaWZfY29uZgoreworCXVuc2lnbmVkIG1hZ2ljOwkJCS8qIG1hZ2ljIG51bWJlciAqLworCXVuc2lnbmVkIGNvbmZpZ19pZDsJCS8qIGNvbmZpZ3VyYXRpb24gaWRlbnRpZmllciAqLworCWNoYXIgbmFtZVtXQU5fSUZOQU1FX1NaKzFdOwkvKiBpbnRlcmZhY2UgbmFtZSwgQVNDSUlaICovCisJY2hhciBhZGRyW1dBTl9BRERSRVNTX1NaKzFdOwkvKiBtZWRpYSBhZGRyZXNzLCBBU0NJSVogKi8KKwljaGFyIHVzZWRieVtVU0VEX0JZX0ZJRUxEXTsJLyogdXNlZCBieSBBUEkgb3IgV0FOUElQRSAqLworCXVuc2lnbmVkIGlkbGVfdGltZW91dDsJCS8qIHNlYywgYmVmb3JlIGRpc2Nvbm5lY3RpbmcgKi8KKwl1bnNpZ25lZCBob2xkX3RpbWVvdXQ7CQkvKiBzZWMsIGJlZm9yZSByZS1jb25uZWN0aW5nICovCisJdW5zaWduZWQgY2lyOwkJCS8qIENvbW1pdHRlZCBJbmZvcm1hdGlvbiBSYXRlIGZ3ZCxid2QqLworCXVuc2lnbmVkIGJjOwkJCS8qIENvbW1pdHRlZCBCdXJzdCBTaXplIGZ3ZCwgYndkICovCisJdW5zaWduZWQgYmU7CQkJLyogRXhjZXNzIEJ1cnN0IFNpemUgZndkLCBid2QgKi8gCisJdW5zaWduZWQgY2hhciBlbmFibGVfSVBYOwkvKiBFbmFibGUgb3IgRGlzYWJsZSBJUFggKi8KKwl1bnNpZ25lZCBjaGFyIGluYXJwOwkJLyogU2VuZCBJbnZlcnNlIEFSUCByZXF1ZXN0cyBZL04gKi8KKwl1bnNpZ25lZCBpbmFycF9pbnRlcnZhbDsJLyogc2VjLCBiZXR3ZWVuIEluQVJQIHJlcXVlc3RzICovCisJdW5zaWduZWQgbG9uZyBuZXR3b3JrX251bWJlcjsJLyogTmV0d29yayBOdW1iZXIgZm9yIElQWCAqLworCWNoYXIgbWM7CQkJLyogTXVsdGljYXN0IG9uIG9yIG9mZiAqLworCWNoYXIgbG9jYWxfYWRkcltXQU5fQUREUkVTU19TWisxXTsvKiBsb2NhbCBtZWRpYSBhZGRyZXNzLCBBU0NJSVogKi8KKwl1bnNpZ25lZCBjaGFyIHBvcnQ7CQkvKiBib2FyZCBwb3J0ICovCisJdW5zaWduZWQgY2hhciBwcm90b2NvbDsJCS8qIHByb2NvY29sIHVzZWQgaW4gdGhpcyBjaGFubmVsIChUQ1BPWDI1IG9yIFgyNSkgKi8KKwljaGFyIHBhcDsJCQkvKiBQQVAgZW5hYmxlZCBvciBkaXNhYmxlZCAqLworCWNoYXIgY2hhcDsJCQkvKiBDSEFQIGVuYWJsZWQgb3IgZGlzYWJsZWQgKi8KKwl1bnNpZ25lZCBjaGFyIHVzZXJpZFs1MTFdOwkvKiBMaXN0IG9mIFVzZXIgSWQgKi8KKwl1bnNpZ25lZCBjaGFyIHBhc3N3ZFs1MTFdOwkvKiBMaXN0IG9mIHBhc3N3b3JkcyAqLworCXVuc2lnbmVkIGNoYXIgc3lzbmFtZVszMV07CS8qIE5hbWUgb2YgdGhlIHN5c3RlbSAqLworCXVuc2lnbmVkIGNoYXIgaWdub3JlX2RjZDsJLyogUHJvdG9jb2wgb3B0aW9uczogKi8KKwl1bnNpZ25lZCBjaGFyIGlnbm9yZV9jdHM7CS8qICBJZ25vcmUgdGhlc2UgdG8gZGV0ZXJtaW5lICovCisJdW5zaWduZWQgY2hhciBpZ25vcmVfa2VlcGFsaXZlOwkvKiAgbGluayBzdGF0dXMgKFllcyBvciBObykgKi8KKwl1bnNpZ25lZCBjaGFyIGhkbGNfc3RyZWFtaW5nOwkvKiAgSGRsYyBzdHJlYW1pbmcgbW9kZSAoWS9OKSAqLworCXVuc2lnbmVkIGtlZXBhbGl2ZV90eF90bXI7CS8qIHRyYW5zbWl0IGtlZXBhbGl2ZSB0aW1lciAqLworCXVuc2lnbmVkIGtlZXBhbGl2ZV9yeF90bXI7CS8qIHJlY2VpdmUgIGtlZXBhbGl2ZSB0aW1lciAqLworCXVuc2lnbmVkIGtlZXBhbGl2ZV9lcnJfbWFyZ2luOwkvKiBrZWVwYWxpdmVfZXJyb3JfdG9sZXJhbmNlICovCisJdW5zaWduZWQgc2xhcnBfdGltZXI7CQkvKiBTTEFSUCByZXF1ZXN0IHRpbWVyICovCisJdW5zaWduZWQgY2hhciB0dGw7CQkvKiBUaW1lIFRvIExpdmUgZm9yIFVEUCBzZWN1cml0eSAqLworCWNoYXIgaW50ZXJmYWNlOwkJCS8qIFJTLTIzMi9WLjM1LCBldGMuICovCisJY2hhciBjbG9ja2luZzsJCQkvKiBleHRlcm5hbC9pbnRlcm5hbCAqLworCXVuc2lnbmVkIGJwczsJCQkvKiBkYXRhIHRyYW5zZmVyIHJhdGUgKi8KKwl1bnNpZ25lZCBtdHU7CQkJLyogbWF4aW11bSB0cmFuc21pdCB1bml0IHNpemUgKi8KKwl1bnNpZ25lZCBjaGFyIGlmX2Rvd247CQkvKiBicmluZCBkb3duIGludGVyZmFjZSB3aGVuIGRpc2Nvbm5lY3RlZCAqLworCXVuc2lnbmVkIGNoYXIgZ2F0ZXdheTsJCS8qIElzIHRoaXMgaW50ZXJmYWNlIGEgZ2F0ZXdheSAqLworCXVuc2lnbmVkIGNoYXIgdHJ1ZV9pZl9lbmNvZGluZzsJLyogU2V0IHRoZSBkZXYtPnR5cGUgdG8gdHJ1ZSBib2FyZCBwcm90b2NvbCAqLworCisJdW5zaWduZWQgY2hhciBhc3lfZGF0YV90cmFuczsgICAgIC8qIGFzeW5jIEFQSSBvcHRpb25zICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgcnRzX2hzX2Zvcl9yZWNlaXZlOyAvKiBhc3luYyBQcm90b2NvbCBvcHRpb25zICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgeG9uX3hvZmZfaHNfZm9yX3JlY2VpdmU7CisJdW5zaWduZWQgY2hhciB4b25feG9mZl9oc19mb3JfdHJhbnNtaXQ7CisJdW5zaWduZWQgY2hhciBkY2RfaHNfZm9yX3RyYW5zbWl0OworCXVuc2lnbmVkIGNoYXIgY3RzX2hzX2Zvcl90cmFuc21pdDsKKwl1bnNpZ25lZCBjaGFyIGFzeW5jX21vZGU7CisJdW5zaWduZWQgdHhfYml0c19wZXJfY2hhcjsKKwl1bnNpZ25lZCByeF9iaXRzX3Blcl9jaGFyOworCXVuc2lnbmVkIHN0b3BfYml0czsgIAorCXVuc2lnbmVkIGNoYXIgcGFyaXR5OworIAl1bnNpZ25lZCBicmVha190aW1lcjsKKyAgICAgICAgdW5zaWduZWQgaW50ZXJfY2hhcl90aW1lcjsKKwl1bnNpZ25lZCByeF9jb21wbGV0ZV9sZW5ndGg7CisJdW5zaWduZWQgeG9uX2NoYXI7CisJdW5zaWduZWQgeG9mZl9jaGFyOworCXVuc2lnbmVkIGNoYXIgcmVjZWl2ZV9vbmx5OwkvKiAgbm8gdHJhbnNtaXQgYnVmZmVyaW5nIChZL04pICovCit9IHdhbmlmX2NvbmZfdDsKKworI2VuZGlmCS8qIF9ST1VURVJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3dhdGNoZG9nLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvd2F0Y2hkb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmMwYzYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3dhdGNoZG9nLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqCUdlbmVyaWMgd2F0Y2hkb2cgZGVmaW5lcy4gRGVyaXZlZCBmcm9tLi4KKyAqCisgKiBCZXJrc2hpcmUgUEMgV2F0Y2hkb2cgRGVmaW5lcworICogYnkgS2VuIEhvbGxpcyA8a2hvbGxpc0BiaXRnYXRlLmNvbT4KKyAqCisgKi8KKworI2lmbmRlZiBfTElOVVhfV0FUQ0hET0dfSAorI2RlZmluZSBfTElOVVhfV0FUQ0hET0dfSAorCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lCVdBVENIRE9HX0lPQ1RMX0JBU0UJJ1cnCisKK3N0cnVjdCB3YXRjaGRvZ19pbmZvIHsKKwlfX3UzMiBvcHRpb25zOwkJLyogT3B0aW9ucyB0aGUgY2FyZC9kcml2ZXIgc3VwcG9ydHMgKi8KKwlfX3UzMiBmaXJtd2FyZV92ZXJzaW9uOwkvKiBGaXJtd2FyZSB2ZXJzaW9uIG9mIHRoZSBjYXJkICovCisJX191OCAgaWRlbnRpdHlbMzJdOwkvKiBJZGVudGl0eSBvZiB0aGUgYm9hcmQgKi8KK307CisKKyNkZWZpbmUJV0RJT0NfR0VUU1VQUE9SVAlfSU9SKFdBVENIRE9HX0lPQ1RMX0JBU0UsIDAsIHN0cnVjdCB3YXRjaGRvZ19pbmZvKQorI2RlZmluZQlXRElPQ19HRVRTVEFUVVMJCV9JT1IoV0FUQ0hET0dfSU9DVExfQkFTRSwgMSwgaW50KQorI2RlZmluZQlXRElPQ19HRVRCT09UU1RBVFVTCV9JT1IoV0FUQ0hET0dfSU9DVExfQkFTRSwgMiwgaW50KQorI2RlZmluZQlXRElPQ19HRVRURU1QCQlfSU9SKFdBVENIRE9HX0lPQ1RMX0JBU0UsIDMsIGludCkKKyNkZWZpbmUJV0RJT0NfU0VUT1BUSU9OUwlfSU9SKFdBVENIRE9HX0lPQ1RMX0JBU0UsIDQsIGludCkKKyNkZWZpbmUJV0RJT0NfS0VFUEFMSVZFCQlfSU9SKFdBVENIRE9HX0lPQ1RMX0JBU0UsIDUsIGludCkKKyNkZWZpbmUJV0RJT0NfU0VUVElNRU9VVCAgICAgICAgX0lPV1IoV0FUQ0hET0dfSU9DVExfQkFTRSwgNiwgaW50KQorI2RlZmluZQlXRElPQ19HRVRUSU1FT1VUICAgICAgICBfSU9SKFdBVENIRE9HX0lPQ1RMX0JBU0UsIDcsIGludCkKKyNkZWZpbmUJV0RJT0NfU0VUUFJFVElNRU9VVAlfSU9XUihXQVRDSERPR19JT0NUTF9CQVNFLCA4LCBpbnQpCisjZGVmaW5lCVdESU9DX0dFVFBSRVRJTUVPVVQJX0lPUihXQVRDSERPR19JT0NUTF9CQVNFLCA5LCBpbnQpCisjZGVmaW5lCVdESU9DX0dFVFRJTUVMRUZUCV9JT1IoV0FUQ0hET0dfSU9DVExfQkFTRSwgMTAsIGludCkKKworI2RlZmluZQlXRElPRl9VTktOT1dOCQktMQkvKiBVbmtub3duIGZsYWcgZXJyb3IgKi8KKyNkZWZpbmUJV0RJT1NfVU5LTk9XTgkJLTEJLyogVW5rbm93biBzdGF0dXMgZXJyb3IgKi8KKworI2RlZmluZQlXRElPRl9PVkVSSEVBVAkJMHgwMDAxCS8qIFJlc2V0IGR1ZSB0byBDUFUgb3ZlcmhlYXQgKi8KKyNkZWZpbmUJV0RJT0ZfRkFORkFVTFQJCTB4MDAwMgkvKiBGYW4gZmFpbGVkICovCisjZGVmaW5lCVdESU9GX0VYVEVSTjEJCTB4MDAwNAkvKiBFeHRlcm5hbCByZWxheSAxICovCisjZGVmaW5lCVdESU9GX0VYVEVSTjIJCTB4MDAwOAkvKiBFeHRlcm5hbCByZWxheSAyICovCisjZGVmaW5lCVdESU9GX1BPV0VSVU5ERVIJMHgwMDEwCS8qIFBvd2VyIGJhZC9wb3dlciBmYXVsdCAqLworI2RlZmluZQlXRElPRl9DQVJEUkVTRVQJCTB4MDAyMAkvKiBDYXJkIHByZXZpb3VzbHkgcmVzZXQgdGhlIENQVSAqLworI2RlZmluZQlXRElPRl9QT1dFUk9WRVIJCTB4MDA0MAkvKiBQb3dlciBvdmVyIHZvbHRhZ2UgKi8KKyNkZWZpbmUJV0RJT0ZfU0VUVElNRU9VVAkweDAwODAgIC8qIFNldCB0aW1lb3V0IChpbiBzZWNvbmRzKSAqLworI2RlZmluZQlXRElPRl9NQUdJQ0NMT1NFCTB4MDEwMAkvKiBTdXBwb3J0cyBtYWdpYyBjbG9zZSBjaGFyICovCisjZGVmaW5lCVdESU9GX1BSRVRJTUVPVVQJMHgwMjAwICAvKiBQcmV0aW1lb3V0IChpbiBzZWNvbmRzKSwgZ2V0L3NldCAqLworI2RlZmluZQlXRElPRl9LRUVQQUxJVkVQSU5HCTB4ODAwMAkvKiBLZWVwIGFsaXZlIHBpbmcgcmVwbHkgKi8KKworI2RlZmluZQlXRElPU19ESVNBQkxFQ0FSRAkweDAwMDEJLyogVHVybiBvZmYgdGhlIHdhdGNoZG9nIHRpbWVyICovCisjZGVmaW5lCVdESU9TX0VOQUJMRUNBUkQJMHgwMDAyCS8qIFR1cm4gb24gdGhlIHdhdGNoZG9nIHRpbWVyICovCisjZGVmaW5lCVdESU9TX1RFTVBQQU5JQwkJMHgwMDA0CS8qIEtlcm5lbCBwYW5pYyBvbiB0ZW1wZXJhdHVyZSB0cmlwICovCisKKworI2VuZGlmICAvKiBpZm5kZWYgX0xJTlVYX1dBVENIRE9HX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC93aW1heC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3dpbWF4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZkY2M1NgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC93aW1heC5oCkBAIC0wLDAgKzEsMjM5IEBACisvKgorICogTGludXggV2lNYXgKKyAqIEFQSSBmb3IgdXNlciBzcGFjZQorICoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICAgZGlzdHJpYnV0aW9uLgorICogICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICogSW50ZWwgQ29ycG9yYXRpb24gPGxpbnV4LXdpbWF4QGludGVsLmNvbT4KKyAqIEluYWt5IFBlcmV6LUdvbnphbGV6IDxpbmFreS5wZXJlei1nb256YWxlekBpbnRlbC5jb20+CisgKiAgLSBJbml0aWFsIGltcGxlbWVudGF0aW9uCisgKgorICoKKyAqIFRoaXMgZmlsZSBkZWNsYXJlcyB0aGUgdXNlci9rZXJuZWwgcHJvdG9jb2wgdGhhdCBpcyBzcG9rZW4gb3ZlcgorICogR2VuZXJpYyBOZXRsaW5rLCBhcyB3ZWxsIGFzIGFueSB0eXBlIGRlY2xhcmF0aW9uIHRoYXQgaXMgdG8gYmUgdXNlZAorICogYnkga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIEl0IGlzIGludGVuZGVkIGZvciB1c2VyIHNwYWNlIHRvIGNsb25lIGl0IHZlcmJhdGltIHRvIHVzZSBpdCBhcyBhCisgKiBwcmltYXJ5IHJlZmVyZW5jZSBmb3IgZGVmaW5pdGlvbnMuCisgKgorICogU3R1ZmYgaW50ZW5kZWQgZm9yIGtlcm5lbCB1c2FnZSBhcyB3ZWxsIGFzIGZ1bGwgcHJvdG9jb2wgYW5kIHN0YWNrCisgKiBkb2N1bWVudGF0aW9uIGlzIHJvb3RlZCBpbiBpbmNsdWRlL25ldC93aW1heC5oLgorICovCisKKyNpZm5kZWYgX19MSU5VWF9fV0lNQVhfSF9fCisjZGVmaW5lIF9fTElOVVhfX1dJTUFYX0hfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworZW51bSB7CisJLyoqCisJICogVmVyc2lvbiBvZiB0aGUgaW50ZXJmYWNlICh1bnNpZ25lZCBkZWNpbWFsLCBNTW0sIG1heCAyNS41KQorCSAqIE0gLSBNYWpvcjogY2hhbmdlIGlmIHJlbW92aW5nIG9yIG1vZGlmeWluZyBhbiBleGlzdGluZyBjYWxsLgorCSAqIG0gLSBtaW5vcjogY2hhbmdlIHdoZW4gYWRkaW5nIGEgbmV3IGNhbGwKKwkgKi8KKwlXSU1BWF9HTkxfVkVSU0lPTiA9IDAxLAorCS8qIEdlbmVyaWMgTmV0TGluayBhdHRyaWJ1dGVzICovCisJV0lNQVhfR05MX0FUVFJfSU5WQUxJRCA9IDB4MDAsCisJV0lNQVhfR05MX0FUVFJfTUFYID0gMTAsCit9OworCisKKy8qCisgKiBHZW5lcmljIE5ldExpbmsgb3BlcmF0aW9ucworICoKKyAqIE1vc3Qgb2YgdGhlc2UgbWFwIHRvIGFuIEFQSSBjYWxsOyBfT1BfIHN0YW5kcyBmb3Igb3BlcmF0aW9uLCBfUlBfCisgKiBmb3IgcmVwbHkgYW5kIF9SRV8gZm9yIHJlcG9ydCAoYWthOiBzaWduYWwpLgorICovCitlbnVtIHsKKwlXSU1BWF9HTkxfT1BfTVNHX0ZST01fVVNFUiwJLyogVXNlciB0byBrZXJuZWwgbWVzc2FnZSAqLworCVdJTUFYX0dOTF9PUF9NU0dfVE9fVVNFUiwJLyogS2VybmVsIHRvIHVzZXIgbWVzc2FnZSAqLworCVdJTUFYX0dOTF9PUF9SRktJTEwsCS8qIFJ1biB3aW1heF9yZmtpbGwoKSAqLworCVdJTUFYX0dOTF9PUF9SRVNFVCwJLyogUnVuIHdpbWF4X3Jma2lsbCgpICovCisJV0lNQVhfR05MX1JFX1NUQVRFX0NIQU5HRSwJLyogUmVwb3J0OiBzdGF0dXMgY2hhbmdlICovCisJV0lNQVhfR05MX09QX1NUQVRFX0dFVCwJCS8qIFJlcXVlc3QgZm9yIGN1cnJlbnQgc3RhdGUgKi8KK307CisKKworLyogTWVzc2FnZSBmcm9tIHVzZXIgLyB0byB1c2VyICovCitlbnVtIHsKKwlXSU1BWF9HTkxfTVNHX0lGSURYID0gMSwKKwlXSU1BWF9HTkxfTVNHX1BJUEVfTkFNRSwKKwlXSU1BWF9HTkxfTVNHX0RBVEEsCit9OworCisKKy8qCisgKiB3aW1heF9yZmtpbGwoKQorICoKKyAqIFRoZSBzdGF0ZSBvZiB0aGUgcmFkaW8gKE9OL09GRikgaXMgbWFwcGVkIHRvIHRoZSByZmtpbGwgc3Vic3lzdGVtJ3MKKyAqIHN3aXRjaCBzdGF0ZSAoRElTQUJMRUQvRU5BQkxFRCkuCisgKi8KK2VudW0gd2ltYXhfcmZfc3RhdGUgeworCVdJTUFYX1JGX09GRiA9IDAsCS8qIFJhZGlvIGlzIG9mZiwgcmZraWxsIG9uL2VuYWJsZWQgKi8KKwlXSU1BWF9SRl9PTiA9IDEsCS8qIFJhZGlvIGlzIG9uLCByZmtpbGwgb2ZmL2Rpc2FibGVkICovCisJV0lNQVhfUkZfUVVFUlkgPSAyLAorfTsKKworLyogQXR0cmlidXRlcyAqLworZW51bSB7CisJV0lNQVhfR05MX1JGS0lMTF9JRklEWCA9IDEsCisJV0lNQVhfR05MX1JGS0lMTF9TVEFURSwKK307CisKKworLyogQXR0cmlidXRlcyBmb3Igd2ltYXhfcmVzZXQoKSAqLworZW51bSB7CisJV0lNQVhfR05MX1JFU0VUX0lGSURYID0gMSwKK307CisKKy8qIEF0cmlidXRlcyBmb3Igd2ltYXhfc3RhdGVfZ2V0KCkgKi8KK2VudW0geworCVdJTUFYX0dOTF9TVEdFVF9JRklEWCA9IDEsCit9OworCisvKgorICogQXR0cmlidXRlcyBmb3IgdGhlIFJlcG9ydCBTdGF0ZSBDaGFuZ2UKKyAqCisgKiBGb3Igbm93IHdlIGp1c3QgaGF2ZSB0aGUgb2xkIGFuZCBuZXcgc3RhdGVzOyBuZXcgYXR0cmlidXRlcyBtaWdodAorICogYmUgYWRkZWQgbGF0ZXIgb24uCisgKi8KK2VudW0geworCVdJTUFYX0dOTF9TVENIX0lGSURYID0gMSwKKwlXSU1BWF9HTkxfU1RDSF9TVEFURV9PTEQsCisJV0lNQVhfR05MX1NUQ0hfU1RBVEVfTkVXLAorfTsKKworCisvKioKKyAqIGVudW0gd2ltYXhfc3QgLSBUaGUgZGlmZmVyZW50IHN0YXRlcyBvZiBhIFdpTUFYIGRldmljZQorICogQF9fV0lNQVhfU1RfTlVMTDogVGhlIGRldmljZSBzdHJ1Y3R1cmUgaGFzIGJlZW4gYWxsb2NhdGVkIGFuZCB6ZXJvZWQsCisgKiAgICAgYnV0IHN0aWxsIHdpbWF4X2Rldl9hZGQoKSBoYXNuJ3QgYmVlbiBjYWxsZWQuIFRoZXJlIGlzIG5vIHN0YXRlLgorICoKKyAqIEBXSU1BWF9TVF9ET1dOOiBUaGUgZGV2aWNlIGhhcyBiZWVuIHJlZ2lzdGVyZWQgd2l0aCB0aGUgV2lNQVggYW5kCisgKiAgICAgbmV0d29ya2luZyBzdGFja3MsIGJ1dCBpdCBpcyBub3QgaW5pdGlhbGl6ZWQgKG5vcm1hbGx5IHRoYXQgaXMKKyAqICAgICBkb25lIHdpdGggJ2lmY29uZmlnIERFViB1cCcgW29yIGVxdWl2YWxlbnRdLCB3aGljaCBjYW4gdXBsb2FkCisgKiAgICAgZmlybXdhcmUgYW5kIGVuYWJsZSBjb21tdW5pY2F0aW9ucyB3aXRoIHRoZSBkZXZpY2UpLgorICogICAgIEluIHRoaXMgc3RhdGUsIHRoZSBkZXZpY2UgaXMgcG93ZXJlZCBkb3duIGFuZCB1c2luZyBhcyBsZXNzCisgKiAgICAgcG93ZXIgYXMgcG9zc2libGUuCisgKiAgICAgVGhpcyBzdGF0ZSBpcyB0aGUgZGVmYXVsdCBhZnRlciBhIGNhbGwgdG8gd2ltYXhfZGV2X2FkZCgpLiBJdAorICogICAgIGlzIG9rIHRvIGhhdmUgZHJpdmVycyBtb3ZlIGRpcmVjdGx5IHRvICVXSU1BWF9TVF9VTklOSVRJQUxJWkVECisgKiAgICAgb3IgJVdJTUFYX1NUX1JBRElPX09GRiBpbiBfcHJvYmUoKSBhZnRlciB0aGUgY2FsbCB0bworICogICAgIHdpbWF4X2Rldl9hZGQoKS4KKyAqICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoZSBkcml2ZXIgbGVhdmVzIHRoaXMgc3RhdGUgd2hlbgorICogICAgIGNhbGxpbmcgJ2lmY29uZmlnIERFViB1cCcgYW5kIGVudGVycyBpdCBiYWNrIG9uICdpZmNvbmZpZyBERVYKKyAqICAgICBkb3duJy4KKyAqCisgKiBAX19XSU1BWF9TVF9RVUlFU0NJTkc6IFRoZSBkZXZpY2UgaXMgYmVpbmcgdG9ybiBkb3duLCBzbyBubyBBUEkKKyAqICAgICBvcGVyYXRpb25zIGFyZSBhbGxvd2VkIHRvIHByb2NlZWQgZXhjZXB0IHRoZSBvbmVzIG5lZWRlZCB0bworICogICAgIGNvbXBsZXRlIHRoZSBkZXZpY2UgY2xlYW4gdXAgcHJvY2Vzcy4KKyAqCisgKiBAV0lNQVhfU1RfVU5JTklUSUFMSVpFRDogW29wdGlvbmFsXSBDb21tdW5pY2F0aW9uIHdpdGggdGhlIGRldmljZQorICogICAgIGlzIHNldHVwLCBidXQgdGhlIGRldmljZSBzdGlsbCByZXF1aXJlcyBzb21lIGNvbmZpZ3VyYXRpb24KKyAqICAgICBiZWZvcmUgYmVpbmcgb3BlcmF0aW9uYWwuCisgKiAgICAgU29tZSBXaU1BWCBBUEkgY2FsbHMgbWlnaHQgd29yay4KKyAqCisgKiBAV0lNQVhfU1RfUkFESU9fT0ZGOiBUaGUgZGV2aWNlIGlzIGZ1bGx5IHVwOyByYWRpbyBpcyBvZmYgKHdldGhlcgorICogICAgIGJ5IGhhcmR3YXJlIG9yIHNvZnR3YXJlIHN3aXRjaGVzKS4KKyAqICAgICBJdCBpcyByZWNvbW1lbmRlZCB0byBhbHdheXMgbGVhdmUgdGhlIGRldmljZSBpbiB0aGlzIHN0YXRlCisgKiAgICAgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uCisgKgorICogQFdJTUFYX1NUX1JFQURZOiBUaGUgZGV2aWNlIGlzIGZ1bGx5IHVwIGFuZCByYWRpbyBpcyBvbi4KKyAqCisgKiBAV0lNQVhfU1RfU0NBTk5JTkc6IFtvcHRpb25hbF0gVGhlIGRldmljZSBoYXMgYmVlbiBpbnN0cnVjdGVkIHRvCisgKiAgICAgc2Nhbi4gSW4gdGhpcyBzdGF0ZSwgdGhlIGRldmljZSBjYW5ub3QgYmUgYWN0aXZlbHkgY29ubmVjdGVkIHRvCisgKiAgICAgYSBuZXR3b3JrLgorICoKKyAqIEBXSU1BWF9TVF9DT05ORUNUSU5HOiBUaGUgZGV2aWNlIGlzIGNvbm5lY3RpbmcgdG8gYSBuZXR3b3JrLiBUaGlzCisgKiAgICAgc3RhdGUgZXhpc3RzIGJlY2F1c2UgaW4gc29tZSBkZXZpY2VzLCB0aGUgY29ubmVjdCBwcm9jZXNzIGNhbgorICogICAgIGluY2x1ZGUgYSBudW1iZXIgb2YgbmVnb3RpYXRpb25zIGJldHdlZW4gdXNlciBzcGFjZSwga2VybmVsCisgKiAgICAgc3BhY2UgYW5kIHRoZSBkZXZpY2UuIFVzZXIgc3BhY2UgbmVlZHMgdG8ga25vdyB3aGF0IHRoZSBkZXZpY2UKKyAqICAgICBpcyBkb2luZy4gSWYgdGhlIGNvbm5lY3Qgc2VxdWVuY2UgaW4gYSBkZXZpY2UgaXMgYXRvbWljIGFuZAorICogICAgIGZhc3QsIHRoZSBkZXZpY2UgY2FuIHRyYW5zaXRpb24gZGlyZWN0bHkgdG8gQ09OTkVDVEVECisgKgorICogQFdJTUFYX1NUX0NPTk5FQ1RFRDogVGhlIGRldmljZSBpcyBjb25uZWN0ZWQgdG8gYSBuZXR3b3JrLgorICoKKyAqIEBfX1dJTUFYX1NUX0lOVkFMSUQ6IFRoaXMgaXMgYW4gaW52YWxpZCBzdGF0ZSB1c2VkIHRvIG1hcmsgdGhlCisgKiAgICAgbWF4aW11bSBudW1lcmljIHZhbHVlIG9mIHN0YXRlcy4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqCisgKiBUcmFuc2l0aW9ucyBmcm9tIG9uZSBzdGF0ZSB0byBhbm90aGVyIG9uZSBhcmUgYXRvbWljIGFuZCBjYW4gb25seQorICogYmUgY2F1c2VkIGluIGtlcm5lbCBzcGFjZSB3aXRoIHdpbWF4X3N0YXRlX2NoYW5nZSgpLiBUbyByZWFkIHRoZQorICogc3RhdGUsIHVzZSB3aW1heF9zdGF0ZV9nZXQoKS4KKyAqCisgKiBTdGF0ZXMgc3RhcnRpbmcgd2l0aCBfXyBhcmUgaW50ZXJuYWwgYW5kIHNoYWxsIG5vdCBiZSB1c2VkIG9yCisgKiByZWZlcnJlZCB0byBieSBkcml2ZXJzIG9yIHVzZXJzcGFjZS4gVGhleSBsb29rIHVnbHksIGJ1dCB0aGF0J3MgdGhlCisgKiBwb2ludCAtLSBpZiBhbnkgdXNlIGlzIG1hZGUgbm9uLWludGVybmFsIHRvIHRoZSBzdGFjaywgaXQgaXMgZWFzaWVyCisgKiB0byBjYXRjaCBvbiByZXZpZXcuCisgKgorICogQWxsIEFQSSBvcGVyYXRpb25zIFt3aXRoIHdlbGwgZGVmaW5lZCBleGNlcHRpb25zXSB3aWxsIHRha2UgdGhlCisgKiBkZXZpY2UgbXV0ZXggYmVmb3JlIHN0YXJ0aW5nIGFuZCB0aGVuIGNoZWNrIHRoZSBzdGF0ZS4gSWYgdGhlIHN0YXRlCisgKiBpcyAlX19XSU1BWF9TVF9OVUxMLCAlV0lNQVhfU1RfRE9XTiwgJVdJTUFYX1NUX1VOSU5JVElBTElaRUQgb3IKKyAqICVfX1dJTUFYX1NUX1FVSUVTQ0lORywgaXQgd2lsbCBkcm9wIHRoZSBsb2NrIGFuZCBxdWl0IHdpdGgKKyAqIC0lRUlOVkFMLCAtJUVOT01FRElVTSwgLSVFTk9UQ09OTiBvciAtJUVTSFVURE9XTi4KKyAqCisgKiBUaGUgb3JkZXIgb2YgdGhlIGRlZmluaXRpb25zIGlzIGltcG9ydGFudCwgc28gd2UgY2FuIGRvIG51bWVyaWNhbAorICogY29tcGFyaXNvbnMgKGVnOiA8ICVXSU1BWF9TVF9SQURJT19PRkYgbWVhbnMgdGhlIGRldmljZSBpcyBub3QgcmVhZHkKKyAqIHRvIG9wZXJhdGUpLgorICovCisvKgorICogVGhlIGFsbG93ZWQgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgdGFibGUgYmVsb3cKKyAqIChzdGF0ZXMgaW4gcm93cyBjYW4gZ28gdG8gc3RhdGVzIGluIGNvbHVtbnMgd2hlcmUgdGhlcmUgaXMgYW4gWCk6CisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5JTkkgICBSQURJTyBSRUFEWSBTQ0FOIENPTk5FQyBDT05ORUMKKyAqICAgICAgICAgICAgIE5VTEwgRE9XTiBRVUlFU0NJTkcgVElBTElaRUQgIE9GRiAgICAgICAgTklORyAgVElORyAgIFRFRAorICogTlVMTCAgICAgICAgIC0gICAgeAorICogRE9XTiAgICAgICAgICAgICAgLSAgICAgIHggICAgICAgIHggICAgICAgeAorICogUVVJRVNDSU5HICAgICAgICAgeCAgICAgIC0KKyAqIFVOSU5JVElBTElaRUQgICAgICAgICAgICB4ICAgICAgICAtICAgICAgIHgKKyAqIFJBRElPX09GRiAgICAgICAgICAgICAgICB4ICAgICAgICAgICAgICAgIC0gICAgIHgKKyAqIFJFQURZICAgICAgICAgICAgICAgICAgICB4ICAgICAgICAgICAgICAgIHggICAgIC0gICAgIHggICAgIHggICAgICB4CisgKiBTQ0FOTklORyAgICAgICAgICAgICAgICAgeCAgICAgICAgICAgICAgICB4ICAgICB4ICAgICAtICAgICB4ICAgICAgeAorICogQ09OTkVDVElORyAgICAgICAgICAgICAgIHggICAgICAgICAgICAgICAgeCAgICAgeCAgICAgeCAgICAgLSAgICAgIHgKKyAqIENPTk5FQ1RFRCAgICAgICAgICAgICAgICB4ICAgICAgICAgICAgICAgIHggICAgIHggICAgICAgICAgICAgICAgICAtCisgKgorICogVGhpcyB0YWJsZSBub3QgYXZhaWxhYmxlIGluIGtlcm5lbC1kb2MgYmVjYXVzZSB0aGUgZm9ybWF0dGluZyBtZXNzZXMgaXQgdXAuCisgKi8KKyBlbnVtIHdpbWF4X3N0IHsKKwlfX1dJTUFYX1NUX05VTEwgPSAwLAorCVdJTUFYX1NUX0RPV04sCisJX19XSU1BWF9TVF9RVUlFU0NJTkcsCisJV0lNQVhfU1RfVU5JTklUSUFMSVpFRCwKKwlXSU1BWF9TVF9SQURJT19PRkYsCisJV0lNQVhfU1RfUkVBRFksCisJV0lNQVhfU1RfU0NBTk5JTkcsCisJV0lNQVhfU1RfQ09OTkVDVElORywKKwlXSU1BWF9TVF9DT05ORUNURUQsCisJX19XSU1BWF9TVF9JTlZBTElECQkJLyogQWx3YXlzIGtlZXAgbGFzdCAqLworfTsKKworCisjZW5kaWYgLyogI2lmbmRlZiBfX0xJTlVYX19XSU1BWF9IX18gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC93aW1heC9pMjQwMG0uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC93aW1heC9pMjQwMG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmQzNTYxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3dpbWF4L2kyNDAwbS5oCkBAIC0wLDAgKzEsNTcyIEBACisvKgorICogSW50ZWwgV2lyZWxlc3MgV2lNYXggQ29ubmVjdGlvbiAyNDAwbQorICogSG9zdC1EZXZpY2UgcHJvdG9jb2wgaW50ZXJmYWNlIGRlZmluaXRpb25zCisgKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgICBkaXN0cmlidXRpb24uCisgKiAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKiBJbnRlbCBDb3Jwb3JhdGlvbiA8bGludXgtd2ltYXhAaW50ZWwuY29tPgorICogSW5ha3kgUGVyZXotR29uemFsZXogPGluYWt5LnBlcmV6LWdvbnphbGV6QGludGVsLmNvbT4KKyAqICAtIEluaXRpYWwgaW1wbGVtZW50YXRpb24KKyAqCisgKgorICogVGhpcyBoZWFkZXIgZGVmaW5lcyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb25zdGFudHMgdXNlZCB0bworICogY29tbXVuaWNhdGUgd2l0aCB0aGUgZGV2aWNlLgorICoKKyAqIEJPT1RNT0RFL0JPT1RST00vRklSTVdBUkUgVVBMT0FEIFBST1RPQ09MCisgKgorICogVGhlIGZpcm13YXJlIHVwbG9hZCBwcm90b2NvbCBpcyBxdWl0ZSBzaW1wbGUgYW5kIG9ubHkgcmVxdWlyZXMgYQorICogaGFuZGZ1bCBvZiBjb21tYW5kcy4gU2VlIGRyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9mdy5jIGZvciBtb3JlCisgKiBkZXRhaWxzLgorICoKKyAqIFRoZSBCQ0YgZGF0YSBzdHJ1Y3R1cmUgaXMgZm9yIHRoZSBmaXJtd2FyZSBmaWxlIGhlYWRlci4KKyAqCisgKgorICogVEhFIERBVEEgLyBDT05UUk9MIFBST1RPQ09MCisgKgorICogVGhpcyBpcyB0aGUgbm9ybWFsIHByb3RvY29sIHNwb2tlbiB3aXRoIHRoZSBkZXZpY2Ugb25jZSB0aGUKKyAqIGZpcm13YXJlIGlzIHVwbG9hZGVkLiBJdCB0cmFuc3BvcnRzIGRhdGEgcGF5bG9hZHMgYW5kIGNvbnRyb2wKKyAqIG1lc3NhZ2VzIGJhY2sgYW5kIGZvcnRoLgorICoKKyAqIEl0IGNvbnNpc3RzICdtZXNzYWdlcycgdGhhdCBwYWNrIG9uZSBvciBtb3JlIHBheWxvYWRzIGVhY2guIFRoZQorICogZm9ybWF0IGlzIGRlc2NyaWJlZCBpbiBkZXRhaWwgaW4gZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3J4LmMgYW5kCisgKiB0eC5jLgorICoKKyAqCisgKiBUSEUgTDNMNCBQUk9UT0NPTAorICoKKyAqIFRoZSB0ZXJtIEwzTDQgcmVmZXJzIHRvIExheWVyIDMgKHRoZSBkZXZpY2UpLCBMYXllciA0ICh0aGUKKyAqIGRyaXZlci9ob3N0IHNvZnR3YXJlKS4KKyAqCisgKiBUaGlzIGlzIHRoZSBjb250cm9sIHByb3RvY29sIHVzZWQgYnkgdGhlIGhvc3QgdG8gY29udHJvbCB0aGUgaTI0MDBtCisgKiBkZXZpY2UgKHNjYW4sIGNvbm5lY3QsIGRpc2Nvbm5lY3QuLi4pLiBUaGlzIGlzIHNlbnQgdG8gLyByZWNlaXZlZAorICogYXMgY29udHJvbCBmcmFtZXMuIFRoZXNlIGZyYW1lcyBjb25zaXN0IG9mIGEgaGVhZGVyIGFuZCB6ZXJvIG9yCisgKiBtb3JlIFRMVnMgd2l0aCBpbmZvcm1hdGlvbi4gV2UgY2FsbCBlYWNoIGNvbnRyb2wgZnJhbWUgYSAibWVzc2FnZSIuCisgKgorICogRWFjaCBtZXNzYWdlIGlzIGNvbXBvc2VkIG9mOgorICoKKyAqIEhFQURFUgorICogW1RMVjAgKyBQQVlMT0FEMF0KKyAqIFtUTFYxICsgUEFZTE9BRDFdCisgKiBbLi4uXQorICogW1RMVk4gKyBQQVlMT0FETl0KKyAqCisgKiBUaGUgSEVBREVSIGlzIGRlZmluZWQgYnkgJ3N0cnVjdCBpMjQwMG1fbDNsNF9oZHInLiBUaGUgcGF5bG9hZHMgYXJlCisgKiBkZWZpbmVkIGJ5IGEgVExWIHN0cnVjdHVyZSAoVHlwZSBMZW5ndGggVmFsdWUpIHdoaWNoIGlzIGEgJ2hlYWRlcicKKyAqIChzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIpIGFuZCB0aGVuIHRoZSBwYXlsb2FkLgorICoKKyAqIEFsbCBpbnRlZ2VycyBhcmUgcmVwcmVzZW50ZWQgYXMgTGl0dGxlIEVuZGlhbi4KKyAqCisgKiAtIFJFUVVFU1RTIEFORCBFVkVOVFMKKyAqCisgKiBUaGUgcmVxdWVzdHMgY2FuIGJlIGNsYXNpZmllZCBhcyBmb2xsb3dzOgorICoKKyAqICAgQ09NTUFORDogIGltcGxpZXMgYSByZXF1ZXN0IGZyb20gdGhlIGhvc3QgdG8gdGhlIGRldmljZSByZXF1ZXN0aW5nCisgKiAgICAgICAgICAgICBhbiBhY3Rpb24gYmVpbmcgcGVyZm9ybWVkLiBUaGUgZGV2aWNlIHdpbGwgcmVwbHkgd2l0aCBhCisgKiAgICAgICAgICAgICBtZXNzYWdlICh3aXRoIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGNvbW1hbmQpLCBzdGF0dXMgYW5kCisgKiAgICAgICAgICAgICBubyAoVExWKSBwYXlsb2FkLiBFeGVjdXRpb24gb2YgYSBjb21tYW5kIG1pZ2h0IGNhdXNlCisgKiAgICAgICAgICAgICBldmVudHMgKG9mIGRpZmZlcmVudCB0eXBlKSB0byBiZSBzZW50IGxhdGVyIG9uIGFzCisgKiAgICAgICAgICAgICBkZXZpY2UncyBzdGF0ZSBjaGFuZ2VzLgorICoKKyAqICAgR0VUL1NFVDogIHNpbWlsYXIgdG8gQ09NTUFORCwgYnV0IHdpbGwgbm90IGNhdXNlIG90aGVyCisgKiAgICAgICAgICAgICBFVkVOVHMuIFRoZSByZXBseSwgaW4gdGhlIGNhc2Ugb2YgR0VULCB3aWxsIGNvbnRhaW4KKyAqICAgICAgICAgICAgIFRMVnMgd2l0aCB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uLgorICoKKyAqICAgRVZFTlQ6ICAgIGFzeW5jaHJvbm91cyBtZXNzYWdlcyBzZW50IGZyb20gdGhlIGRldmljZSwgbWF5YmUgYXMgYQorICogICAgICAgICAgICAgY29uc2VxdWVuY2Ugb2YgcHJldmlvdXMgQ09NTUFORHMgYnV0IGRpc2Fzc29jaWF0ZWQgZnJvbQorICogICAgICAgICAgICAgdGhlbS4KKyAqCisgKiBPbmx5IG9uZSByZXF1ZXN0IG1pZ2h0IGJlIHBlbmRpbmcgYXQgdGhlIHNhbWUgdGltZSAoaWU6IGRvbid0CisgKiBwYXJhbGxlbGl6ZSBub3IgcG9zdCBhbm90aGVyIEdFVCByZXF1ZXN0IGJlZm9yZSB0aGUgcHJldmlvdXMKKyAqIENPTU1BTkQgaGFzIGJlZW4gYWNrbm93bGVkZ2VkIHdpdGggaXQncyBjb3JyZXNwb25kaW5nIHJlcGx5IGJ5IHRoZQorICogZGV2aWNlKS4KKyAqCisgKiBUaGUgZGlmZmVyZW50IHJlcXVlc3RzIGFuZCB0aGVpciBmb3JtYXRzIGFyZSBkZXNjcmliZWQgYmVsb3c6CisgKgorICogIEkyNDAwTV9NVF8qICAgTWVzc2FnZSB0eXBlcworICogIEkyNDAwTV9NU18qICAgTWVzc2FnZSBzdGF0dXMgKGZvciByZXBsaWVzLCBldmVudHMpCisgKiAgaTI0MDBtX3Rsdl8qICBUTFZzCisgKgorICogZGF0YSB0eXBlcyBhcmUgbmFtZWQgJ3N0cnVjdCBpMjQwMG1fbXNnX09QTkFNRScsIE9QTkFNRSBtYXRjaGluZyB0aGUKKyAqIG9wZXJhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfX1dJTUFYX19JMjQwME1fSF9fCisjZGVmaW5lIF9fTElOVVhfX1dJTUFYX19JMjQwME1fSF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisKKy8qCisgKiBIb3N0IERldmljZSBJbnRlcmZhY2UgKEhESSkgY29tbW9uIHRvIGFsbCBidXNzZXMKKyAqLworCisvKiBCb290LW1vZGUgKGZpcm13YXJlIHVwbG9hZCBtb2RlKSBjb21tYW5kcyAqLworCisvKiBIZWFkZXIgZm9yIHRoZSBmaXJtd2FyZSBmaWxlICovCitzdHJ1Y3QgaTI0MDBtX2JjZl9oZHIgeworCV9fbGUzMiBtb2R1bGVfdHlwZTsKKwlfX2xlMzIgaGVhZGVyX2xlbjsKKwlfX2xlMzIgaGVhZGVyX3ZlcnNpb247CisJX19sZTMyIG1vZHVsZV9pZDsKKwlfX2xlMzIgbW9kdWxlX3ZlbmRvcjsKKwlfX2xlMzIgZGF0ZTsJCS8qIEJDRCBZWVlNTUREICovCisJX19sZTMyIHNpemU7ICAgICAgICAgICAgLyogaW4gZHdvcmRzICovCisJX19sZTMyIGtleV9zaXplOwkvKiBpbiBkd29yZHMgKi8KKwlfX2xlMzIgbW9kdWx1c19zaXplOwkvKiBpbiBkd29yZHMgKi8KKwlfX2xlMzIgZXhwb25lbnRfc2l6ZTsJLyogaW4gZHdvcmRzICovCisJX191OCByZXNlcnZlZFs4OF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogQm9vdCBtb2RlIG9wY29kZXMgKi8KK2VudW0gaTI0MDBtX2JyaF9vcGNvZGUgeworCUkyNDAwTV9CUkhfUkVBRCA9IDEsCisJSTI0MDBNX0JSSF9XUklURSA9IDIsCisJSTI0MDBNX0JSSF9KVU1QID0gMywKKwlJMjQwME1fQlJIX1NJR05FRF9KVU1QID0gOCwKKwlJMjQwME1fQlJIX0hBU0hfUEFZTE9BRF9PTkxZID0gOSwKK307CisKKy8qIEJvb3QgbW9kZSBjb21tYW5kIG1hc2tzIGFuZCBzdHVmZiAqLworZW51bSBpMjQwMG1fYnJoIHsKKwlJMjQwME1fQlJIX1NJR05BVFVSRSA9IDB4Y2JiYzAwMDAsCisJSTI0MDBNX0JSSF9TSUdOQVRVUkVfTUFTSyA9IDB4ZmZmZjAwMDAsCisJSTI0MDBNX0JSSF9TSUdOQVRVUkVfU0hJRlQgPSAxNiwKKwlJMjQwME1fQlJIX09QQ09ERV9NQVNLID0gMHgwMDAwMDAwZiwKKwlJMjQwME1fQlJIX1JFU1BPTlNFX01BU0sgPSAweDAwMDAwMGYwLAorCUkyNDAwTV9CUkhfUkVTUE9OU0VfU0hJRlQgPSA0LAorCUkyNDAwTV9CUkhfRElSRUNUX0FDQ0VTUyA9IDB4MDAwMDA0MDAsCisJSTI0MDBNX0JSSF9SRVNQT05TRV9SRVFVSVJFRCA9IDB4MDAwMDAyMDAsCisJSTI0MDBNX0JSSF9VU0VfQ0hFQ0tTVU0gPSAweDAwMDAwMTAwLAorfTsKKworCisvKioKKyAqIGkyNDAwbV9ib290cm9tX2hlYWRlciAtIEhlYWRlciBmb3IgYSBib290LW1vZGUgY29tbWFuZAorICoKKyAqIEBjbWQ6IHRoZSBhYm92ZSBjb21tYW5kIGRlc2NyaXB0b3IKKyAqIEB0YXJnZXRfYWRkcjogd2hlcmUgb24gdGhlIGRldmljZSBtZW1vcnkgc2hvdWxkIHRoZSBhY3Rpb24gYmUgcGVyZm9ybWVkLgorICogQGRhdGFfc2l6ZTogZm9yIHJlYWQvd3JpdGUsIGFtb3VudCBvZiBkYXRhIHRvIGJlIHJlYWQvd3JpdHRlbgorICogQGJsb2NrX2NoZWNrc3VtOiBjaGVja3N1bSB2YWx1ZSAoaWYgYXBwbGljYWJsZSkKKyAqIEBwYXlsb2FkOiB0aGUgYmVnaW5uaW5nIG9mIGRhdGEgYXR0YWNoZWQgdG8gdGhpcyBoZWFkZXIKKyAqLworc3RydWN0IGkyNDAwbV9ib290cm9tX2hlYWRlciB7CisJX19sZTMyIGNvbW1hbmQ7CQkvKiBDb21wb3NlIHdpdGggZW51bSBpMjQwMF9icmggKi8KKwlfX2xlMzIgdGFyZ2V0X2FkZHI7CisJX19sZTMyIGRhdGFfc2l6ZTsKKwlfX2xlMzIgYmxvY2tfY2hlY2tzdW07CisJY2hhciBwYXlsb2FkWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworLyoKKyAqIERhdGEgLyBjb250cm9sIHByb3RvY29sCisgKi8KKworLyogUGFja2V0IHR5cGVzIGZvciB0aGUgaG9zdC1kZXZpY2UgaW50ZXJmYWNlICovCitlbnVtIGkyNDAwbV9wdCB7CisJSTI0MDBNX1BUX0RBVEEgPSAwLAorCUkyNDAwTV9QVF9DVFJMLAorCUkyNDAwTV9QVF9UUkFDRSwJLyogRm9yIGRldmljZSBkZWJ1ZyAqLworCUkyNDAwTV9QVF9SRVNFVF9XQVJNLAkvKiBkZXZpY2UgcmVzZXQgKi8KKwlJMjQwME1fUFRfUkVTRVRfQ09MRCwJLyogVVNCW3RyYW5zcG9ydF0gcmVzZXQsIGxpa2UgcmVjb25uZWN0ICovCisJSTI0MDBNX1BUX0VEQVRBLAkvKiBFeHRlbmRlZCBSWCBkYXRhICovCisJSTI0MDBNX1BUX0lMTEVHQUwKK307CisKKworLyoKKyAqIFBheWxvYWQgZm9yIGEgZGF0YSBwYWNrZXQKKyAqCisgKiBUaGlzIGlzIHByZWZpeGVkIHRvIGVhY2ggYW5kIGV2ZXJ5IG91dGdvaW5nIERBVEEgdHlwZS4KKyAqLworc3RydWN0IGkyNDAwbV9wbF9kYXRhX2hkciB7CisJX19sZTMyIHJlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisvKgorICogUGF5bG9hZCBmb3IgYW4gZXh0ZW5kZWQgZGF0YSBwYWNrZXQKKyAqCisgKiBOZXcgaW4gZncgdjEuNAorICoKKyAqIEByZW9yZGVyOiBpZiB0aGlzIHBheWxvYWQgaGFzIHRvIGJlIHJlb3JkZXIgb3Igbm90IChhbmQgaG93KQorICogQGNzOiB0aGUgdHlwZSBvZiBkYXRhIGluIHRoZSBwYWNrZXQsIGFzIGRlZmluZWQgcGVyICg4MDIuMTZlCisgKiAgICAgVDExLjEzLjE5LjEpLiBDdXJyZW50bHkgb25seSAyIChJUHY0IHBhY2tldCkgc3VwcG9ydGVkLgorICoKKyAqIFRoaXMgaXMgcHJlZml4ZWQgdG8gZWFjaCBhbmQgZXZlcnkgSU5DT01JTkcgREFUQSBwYWNrZXQuCisgKi8KK3N0cnVjdCBpMjQwMG1fcGxfZWRhdGFfaGRyIHsKKwlfX2xlMzIgcmVvcmRlcjsJCS8qIGJpdHMgZGVmaW5lZCBpbiBpMjQwMG1fcm8gKi8KKwlfX3U4IGNzOworCV9fdTggcmVzZXJ2ZWRbMTFdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworZW51bSBpMjQwMG1fY3MgeworCUkyNDAwTV9DU19JUFY0XzAgPSAwLAorCUkyNDAwTV9DU19JUFY0ID0gMiwKK307CisKK2VudW0gaTI0MDBtX3JvIHsKKwlJMjQwME1fUk9fTkVFREVEICAgICA9IDB4MDEsCisJSTI0MDBNX1JPX1RZUEUgICAgICAgPSAweDAzLAorCUkyNDAwTV9ST19UWVBFX1NISUZUID0gMSwKKwlJMjQwME1fUk9fQ0lOICAgICAgICA9IDB4MGYsCisJSTI0MDBNX1JPX0NJTl9TSElGVCAgPSA0LAorCUkyNDAwTV9ST19GQk4gICAgICAgID0gMHgwN2ZmLAorCUkyNDAwTV9ST19GQk5fU0hJRlQgID0gOCwKKwlJMjQwME1fUk9fU04gICAgICAgICA9IDB4MDdmZiwKKwlJMjQwME1fUk9fU05fU0hJRlQgICA9IDIxLAorfTsKKworZW51bSBpMjQwMG1fcm9fdHlwZSB7CisJSTI0MDBNX1JPX1RZUEVfUkVTRVQgPSAwLAorCUkyNDAwTV9ST19UWVBFX1BBQ0tFVCwKKwlJMjQwME1fUk9fVFlQRV9XUywKKwlJMjQwME1fUk9fVFlQRV9QQUNLRVRfV1MsCit9OworCisKKy8qIE1pc2MgY29uc3RhbnRzICovCitlbnVtIHsKKwlJMjQwME1fUExfQUxJR04gPSAxNiwJLyogUGF5bG9hZCBkYXRhIHNpemUgYWxpZ25tZW50ICovCisJSTI0MDBNX1BMX1NJWkVfTUFYID0gMHgzRUZGLAorCUkyNDAwTV9NQVhfUExTX0lOX01TRyA9IDYwLAorCS8qIHByb3RvY29sIGJhcmtlcnM6IHN5bmMgc2VxdWVuY2VzOyBmb3Igbm90aWZpY2F0aW9ucyB0aGV5CisJICogYXJlIHNlbnQgaW4gZ3JvdXBzIG9mIGZvdXIuICovCisJSTI0MDBNX0gyRF9QUkVWSUVXX0JBUktFUiA9IDB4Y2FmZTkwMGQsCisJSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSID0gMHhjMDFkYzAxZCwKKwlJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIgPSAweDUwZjc1MGY3LAorCUkyNDAwTV9OQk9PVF9CQVJLRVIgPSAweGRlYWRiZWVmLAorCUkyNDAwTV9TQk9PVF9CQVJLRVIgPSAweDBmZjFjMWExLAorCUkyNDAwTV9TQk9PVF9CQVJLRVJfNjA1MCA9IDB4ODAwMDAwMDEsCisJSTI0MDBNX0FDS19CQVJLRVIgPSAweGZlZWRiYWJlLAorCUkyNDAwTV9EMkhfTVNHX0JBUktFUiA9IDB4YmVlZmJhYmUsCit9OworCisKKy8qCisgKiBIYXJkd2FyZSBwYXlsb2FkIGRlc2NyaXB0b3IKKyAqCisgKiBCaXRmaWVsZHMgZW5jb2RlZCBpbiBhIHN0cnVjdCB0byBlbmZvcmNlIHR5cGluZyBzZW1hbnRpY3MuCisgKgorICogTG9vayBpbiByeC5jIGFuZCB0eC5jIGZvciBhIGZ1bGwgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdC4KKyAqLworc3RydWN0IGkyNDAwbV9wbGQgeworCV9fbGUzMiB2YWw7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBJMjQwME1fUExEX1NJWkVfTUFTSyAweDAwMDAzZmZmCisjZGVmaW5lIEkyNDAwTV9QTERfVFlQRV9TSElGVCAxNgorI2RlZmluZSBJMjQwME1fUExEX1RZUEVfTUFTSyAweDAwMGYwMDAwCisKKy8qCisgKiBIZWFkZXIgZm9yIGEgVFggbWVzc2FnZSBvciBSWCBtZXNzYWdlCisgKgorICogQGJhcmtlcjogcHJlYW1ibGUKKyAqIEBzaXplOiB1c2VkIGZvciBtYW5hZ2VtZW50IG9mIHRoZSBGSUZPIHF1ZXVlIGJ1ZmZlcjsgYmVmb3JlCisgKiAgICAgc2VuZGluZywgdGhpcyBpcyBjb252ZXJ0ZWQgdG8gYmUgYSByZWFsIHByZWFtYmxlLiBUaGlzCisgKiAgICAgaW5kaWNhdGVzIHRoZSByZWFsIHNpemUgb2YgdGhlIFRYIG1lc3NhZ2UgdGhhdCBzdGFydHMgYXQgdGhpcworICogICAgIHBvaW50LiBJZiB0aGUgaGlnaGVzdCBiaXQgaXMgc2V0LCB0aGVuIHRoaXMgbWVzc2FnZSBpcyB0byBiZQorICogICAgIHNraXBwZWQuCisgKiBAc2VxdWVuY2U6IHNlcXVlbmNlIG51bWJlciBvZiB0aGlzIG1lc3NhZ2UKKyAqIEBvZmZzZXQ6IG9mZnNldCB3aGVyZSB0aGUgbWVzc2FnZSBpdHNlbGYgc3RhcnRzIC0tIHNlZSB0aGUgY29tbWVudHMKKyAqICAgICBpbiB0aGUgZmlsZSBoZWFkZXIgYWJvdXQgbWVzc2FnZSBoZWFkZXIgYW5kIHBheWxvYWQgZGVzY3JpcHRvcgorICogICAgIGFsaWdubWVudC4KKyAqIEBudW1fcGxzOiBudW1iZXIgb2YgcGF5bG9hZHMgaW4gdGhpcyBtZXNzYWdlCisgKiBAcGFkZGluZzogYW1vdW50IG9mIHBhZGRpbmcgYnl0ZXMgYXQgdGhlIGVuZCBvZiB0aGUgbWVzc2FnZSB0byBtYWtlCisgKiAgICAgICAgICAgaXQgYmUgb2YgYmxvY2stc2l6ZSBhbGlnbmVkCisgKgorICogTG9vayBpbiByeC5jIGFuZCB0eC5jIGZvciBhIGZ1bGwgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdC4KKyAqLworc3RydWN0IGkyNDAwbV9tc2dfaGRyIHsKKwl1bmlvbiB7CisJCV9fbGUzMiBiYXJrZXI7CisJCV9fdTMyIHNpemU7CS8qIHNhbWUgc2l6ZSB0eXBlIGFzIGJhcmtlciEhICovCisJfTsKKwl1bmlvbiB7CisJCV9fbGUzMiBzZXF1ZW5jZTsKKwkJX191MzIgb2Zmc2V0OwkvKiBzYW1lIHNpemUgdHlwZSBhcyBiYXJrZXIhISAqLworCX07CisJX19sZTE2IG51bV9wbHM7CisJX19sZTE2IHJzdjE7CisJX19sZTE2IHBhZGRpbmc7CisJX19sZTE2IHJzdjI7CisJc3RydWN0IGkyNDAwbV9wbGQgcGxkWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworCisvKgorICogTDMvTDQgY29udHJvbCBwcm90b2NvbAorICovCisKK2VudW0geworCS8qIEludGVyZmFjZSB2ZXJzaW9uICovCisJSTI0MDBNX0wzTDRfVkVSU0lPTiAgICAgICAgICAgICA9IDB4MDEwMCwKK307CisKKy8qIE1lc3NhZ2UgdHlwZXMgKi8KK2VudW0gaTI0MDBtX210IHsKKwlJMjQwME1fTVRfUkVTRVJWRUQgICAgICAgICAgICAgID0gMHgwMDAwLAorCUkyNDAwTV9NVF9JTlZBTElEICAgICAgICAgICAgICAgPSAweGZmZmYsCisJSTI0MDBNX01UX1JFUE9SVF9NQVNLCQk9IDB4ODAwMCwKKworCUkyNDAwTV9NVF9HRVRfU0NBTl9SRVNVTFQgIAk9IDB4NDIwMiwKKwlJMjQwME1fTVRfU0VUX1NDQU5fUEFSQU0gICAJPSAweDQ0MDIsCisJSTI0MDBNX01UX0NNRF9SRl9DT05UUk9MICAgCT0gMHg0NjAyLAorCUkyNDAwTV9NVF9DTURfU0NBTiAgICAgICAgIAk9IDB4NDYwMywKKwlJMjQwME1fTVRfQ01EX0NPTk5FQ1QgICAgICAJPSAweDQ2MDQsCisJSTI0MDBNX01UX0NNRF9ESVNDT05ORUNUICAgCT0gMHg0NjA1LAorCUkyNDAwTV9NVF9DTURfRVhJVF9JRExFICAgCT0gMHg0NjA2LAorCUkyNDAwTV9NVF9HRVRfTE1fVkVSU0lPTiAgIAk9IDB4NTIwMSwKKwlJMjQwME1fTVRfR0VUX0RFVklDRV9JTkZPICAJPSAweDUyMDIsCisJSTI0MDBNX01UX0dFVF9MSU5LX1NUQVRVUyAgCT0gMHg1MjAzLAorCUkyNDAwTV9NVF9HRVRfU1RBVElTVElDUyAgIAk9IDB4NTIwNCwKKwlJMjQwME1fTVRfR0VUX1NUQVRFICAgICAgICAJPSAweDUyMDUsCisJSTI0MDBNX01UX0dFVF9NRURJQV9TVEFUVVMJPSAweDUyMDYsCisJSTI0MDBNX01UX1NFVF9JTklUX0NPTkZJRwk9IDB4NTQwNCwKKwlJMjQwME1fTVRfQ01EX0lOSVQJICAgICAgICA9IDB4NTYwMSwKKwlJMjQwME1fTVRfQ01EX1RFUk1JTkFURQkJPSAweDU2MDIsCisJSTI0MDBNX01UX0NNRF9NT0RFX09GX09QCT0gMHg1NjAzLAorCUkyNDAwTV9NVF9DTURfUkVTRVRfREVWSUNFCT0gMHg1NjA0LAorCUkyNDAwTV9NVF9DTURfTU9OSVRPUl9DT05UUk9MICAgPSAweDU2MDUsCisJSTI0MDBNX01UX0NNRF9FTlRFUl9QT1dFUlNBVkUgICA9IDB4NTYwNiwKKwlJMjQwME1fTVRfR0VUX1RMU19PUEVSQVRJT05fUkVTVUxUID0gMHg2MjAxLAorCUkyNDAwTV9NVF9TRVRfRUFQX1NVQ0NFU1MgICAgICAgPSAweDY0MDIsCisJSTI0MDBNX01UX1NFVF9FQVBfRkFJTCAgICAgICAgICA9IDB4NjQwMywKKwlJMjQwME1fTVRfU0VUX0VBUF9LRVkgICAgICAgICAgCT0gMHg2NDA0LAorCUkyNDAwTV9NVF9DTURfU0VORF9FQVBfUkVTUE9OU0UgPSAweDY2MDIsCisJSTI0MDBNX01UX1JFUE9SVF9TQ0FOX1JFU1VMVCAgICA9IDB4YzAwMiwKKwlJMjQwME1fTVRfUkVQT1JUX1NUQVRFCQk9IDB4ZDAwMiwKKwlJMjQwME1fTVRfUkVQT1JUX1BPV0VSU0FWRV9SRUFEWSA9IDB4ZDAwNSwKKwlJMjQwME1fTVRfUkVQT1JUX0VBUF9SRVFVRVNUICAgID0gMHhlMDAyLAorCUkyNDAwTV9NVF9SRVBPUlRfRUFQX1JFU1RBUlQgICAgPSAweGUwMDMsCisJSTI0MDBNX01UX1JFUE9SVF9BTFRfQUNDRVBUICAgIAk9IDB4ZTAwNCwKKwlJMjQwME1fTVRfUkVQT1JUX0tFWV9SRVFVRVNUIAk9IDB4ZTAwNSwKK307CisKKworLyoKKyAqIE1lc3NhZ2UgQWNrIFN0YXR1cyBjb2RlcworICoKKyAqIFdoZW4gYSBtZXNzYWdlIGlzIHJlcGxpZWQtdG8sIHRoaXMgc3RhdHVzIGlzIHJlcG9ydGVkLgorICovCitlbnVtIGkyNDAwbV9tcyB7CisJSTI0MDBNX01TX0RPTkVfT0sgICAgICAgICAgICAgICAgICA9IDAsCisJSTI0MDBNX01TX0RPTkVfSU5fUFJPR1JFU1MgICAgICAgICA9IDEsCisJSTI0MDBNX01TX0lOVkFMSURfT1AgICAgICAgICAgICAgICA9IDIsCisJSTI0MDBNX01TX0JBRF9TVEFURSAgICAgICAgICAgICAgICA9IDMsCisJSTI0MDBNX01TX0lMTEVHQUxfVkFMVUUgICAgICAgICAgICA9IDQsCisJSTI0MDBNX01TX01JU1NJTkdfUEFSQU1TICAgICAgICAgICA9IDUsCisJSTI0MDBNX01TX1ZFUlNJT05fRVJST1IgICAgICAgICAgICA9IDYsCisJSTI0MDBNX01TX0FDQ0VTU0lCSUxJVFlfRVJST1IgICAgICA9IDcsCisJSTI0MDBNX01TX0JVU1kgICAgICAgICAgICAgICAgICAgICA9IDgsCisJSTI0MDBNX01TX0NPUlJVUFRFRF9UTFYgICAgICAgICAgICA9IDksCisJSTI0MDBNX01TX1VOSU5JVElBTElaRUQgICAgICAgICAgICA9IDEwLAorCUkyNDAwTV9NU19VTktOT1dOX0VSUk9SICAgICAgICAgICAgPSAxMSwKKwlJMjQwME1fTVNfUFJPRFVDVElPTl9FUlJPUiAgICAgICAgID0gMTIsCisJSTI0MDBNX01TX05PX1JGICAgICAgICAgICAgICAgICAgICA9IDEzLAorCUkyNDAwTV9NU19OT1RfUkVBRFlfRk9SX1BPV0VSU0FWRSAgPSAxNCwKKwlJMjQwME1fTVNfVEhFUk1BTF9DUklUSUNBTCAgICAgICAgID0gMTUsCisJSTI0MDBNX01TX01BWAorfTsKKworCisvKioKKyAqIGkyNDAwbV90bHYgLSBlbnVtZXJhdGlvbiBvZiB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIFRMVnMKKyAqCisgKiBUTFZzIHN0YW5kIGZvciB0eXBlLWxlbmd0aC12YWx1ZSBhbmQgYXJlIHRoZSBoZWFkZXIgZm9yIGEgcGF5bG9hZAorICogY29tcG9zZWQgb2YgYWxtb3N0IGFueXRoaW5nLiBFYWNoIHBheWxvYWQgaGFzIGEgdHlwZSBhc3NpZ25lZAorICogYW5kIGEgbGVuZ3RoLgorICovCitlbnVtIGkyNDAwbV90bHYgeworCUkyNDAwTV9UTFZfTDRfTUVTU0FHRV9WRVJTSU9OUyA9IDEyOSwKKwlJMjQwME1fVExWX1NZU1RFTV9TVEFURSA9IDE0MSwKKwlJMjQwME1fVExWX01FRElBX1NUQVRVUyA9IDE2MSwKKwlJMjQwME1fVExWX1JGX09QRVJBVElPTiA9IDE2MiwKKwlJMjQwME1fVExWX1JGX1NUQVRVUyA9IDE2MywKKwlJMjQwME1fVExWX0RFVklDRV9SRVNFVF9UWVBFID0gMTMyLAorCUkyNDAwTV9UTFZfQ09ORklHX0lETEVfUEFSQU1FVEVSUyA9IDYwMSwKKwlJMjQwME1fVExWX0NPTkZJR19JRExFX1RJTUVPVVQgPSA2MTEsCisJSTI0MDBNX1RMVl9DT05GSUdfRDJIX0RBVEFfRk9STUFUID0gNjE0LAorCUkyNDAwTV9UTFZfQ09ORklHX0RMX0hPU1RfUkVPUkRFUiA9IDYxNSwKK307CisKKworc3RydWN0IGkyNDAwbV90bHZfaGRyIHsKKwlfX2xlMTYgdHlwZTsKKwlfX2xlMTYgbGVuZ3RoOwkJLyogcGF5bG9hZCdzICovCisJX191OCAgIHBsWzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCitzdHJ1Y3QgaTI0MDBtX2wzbDRfaGRyIHsKKwlfX2xlMTYgdHlwZTsKKwlfX2xlMTYgbGVuZ3RoOwkJLyogcGF5bG9hZCdzICovCisJX19sZTE2IHZlcnNpb247CisJX19sZTE2IHJlc3YxOworCV9fbGUxNiBzdGF0dXM7CisJX19sZTE2IHJlc3YyOworCXN0cnVjdCBpMjQwMG1fdGx2X2hkciBwbFswXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworLyoqCisgKiBpMjQwMG1fc3lzdGVtX3N0YXRlIC0gZGlmZmVyZW50IHN0YXRlcyBvZiB0aGUgZGV2aWNlCisgKi8KK2VudW0gaTI0MDBtX3N5c3RlbV9zdGF0ZSB7CisJSTI0MDBNX1NTX1VOSU5JVElBTElaRUQgPSAxLAorCUkyNDAwTV9TU19JTklULAorCUkyNDAwTV9TU19SRUFEWSwKKwlJMjQwME1fU1NfU0NBTiwKKwlJMjQwME1fU1NfU1RBTkRCWSwKKwlJMjQwME1fU1NfQ09OTkVDVElORywKKwlJMjQwME1fU1NfV0lNQVhfQ09OTkVDVEVELAorCUkyNDAwTV9TU19EQVRBX1BBVEhfQ09OTkVDVEVELAorCUkyNDAwTV9TU19JRExFLAorCUkyNDAwTV9TU19ESVNDT05ORUNUSU5HLAorCUkyNDAwTV9TU19PVVRfT0ZfWk9ORSwKKwlJMjQwME1fU1NfU0xFRVBBQ1RJVkUsCisJSTI0MDBNX1NTX1BST0RVQ1RJT04sCisJSTI0MDBNX1NTX0NPTkZJRywKKwlJMjQwME1fU1NfUkZfT0ZGLAorCUkyNDAwTV9TU19SRl9TSFVURE9XTiwKKwlJMjQwME1fU1NfREVWSUNFX0RJU0NPTk5FQ1QsCisJSTI0MDBNX1NTX01BWCwKK307CisKKworLyoqCisgKiBpMjQwMG1fdGx2X3N5c3RlbV9zdGF0ZSAtIHJlcG9ydCBvbiB0aGUgc3RhdGUgb2YgdGhlIHN5c3RlbQorICoKKyAqIEBzdGF0ZTogc2VlIGVudW0gaTI0MDBtX3N5c3RlbV9zdGF0ZQorICovCitzdHJ1Y3QgaTI0MDBtX3Rsdl9zeXN0ZW1fc3RhdGUgeworCXN0cnVjdCBpMjQwMG1fdGx2X2hkciBoZHI7CisJX19sZTMyIHN0YXRlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCitzdHJ1Y3QgaTI0MDBtX3Rsdl9sNF9tZXNzYWdlX3ZlcnNpb25zIHsKKwlzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgaGRyOworCV9fbGUxNiBtYWpvcjsKKwlfX2xlMTYgbWlub3I7CisJX19sZTE2IGJyYW5jaDsKKwlfX2xlMTYgcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKK3N0cnVjdCBpMjQwMG1fdGx2X2RldGFpbGVkX2RldmljZV9pbmZvIHsKKwlzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgaGRyOworCV9fdTggcmVzZXJ2ZWQxWzQwMF07CisJX191OCBtYWNfYWRkcmVzc1s2XTsKKwlfX3U4IHJlc2VydmVkMlsyXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworZW51bSBpMjQwMG1fcmZfc3dpdGNoX3N0YXR1cyB7CisJSTI0MDBNX1JGX1NXSVRDSF9PTiA9IDEsCisJSTI0MDBNX1JGX1NXSVRDSF9PRkYgPSAyLAorfTsKKworc3RydWN0IGkyNDAwbV90bHZfcmZfc3dpdGNoZXNfc3RhdHVzIHsKKwlzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgaGRyOworCV9fdTggc3dfcmZfc3dpdGNoOwkvKiAxIE9OLCAyIE9GRiAqLworCV9fdTggaHdfcmZfc3dpdGNoOwkvKiAxIE9OLCAyIE9GRiAqLworCV9fdTggcmVzZXJ2ZWRbMl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKK2VudW0geworCWkyNDAwbV9yZl9vcGVyYXRpb25fb24gPSAxLAorCWkyNDAwbV9yZl9vcGVyYXRpb25fb2ZmID0gMgorfTsKKworc3RydWN0IGkyNDAwbV90bHZfcmZfb3BlcmF0aW9uIHsKKwlzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgaGRyOworCV9fbGUzMiBzdGF0dXM7CS8qIDEgT04sIDIgT0ZGICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKK2VudW0gaTI0MDBtX3Rsdl9yZXNldF90eXBlIHsKKwlJMjQwME1fUkVTRVRfVFlQRV9DT0xEID0gMSwKKwlJMjQwME1fUkVTRVRfVFlQRV9XQVJNCit9OworCitzdHJ1Y3QgaTI0MDBtX3Rsdl9kZXZpY2VfcmVzZXRfdHlwZSB7CisJc3RydWN0IGkyNDAwbV90bHZfaGRyIGhkcjsKKwlfX2xlMzIgcmVzZXRfdHlwZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworc3RydWN0IGkyNDAwbV90bHZfY29uZmlnX2lkbGVfcGFyYW1ldGVycyB7CisJc3RydWN0IGkyNDAwbV90bHZfaGRyIGhkcjsKKwlfX2xlMzIgaWRsZV90aW1lb3V0OwkvKiAxMDAgdG8gMzAwMDAwIG1zIFs1bWluXSwgMTAwIGluY3JlbWVudHMKKwkJCQkgKiAwIGRpc2FibGVkICovCisJX19sZTMyIGlkbGVfcGFnaW5nX2ludGVydmFsOwkvKiBmcmFtZXMgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworZW51bSBpMjQwMG1fbWVkaWFfc3RhdHVzIHsKKwlJMjQwME1fTUVESUFfU1RBVFVTX0xJTktfVVAgPSAxLAorCUkyNDAwTV9NRURJQV9TVEFUVVNfTElOS19ET1dOLAorCUkyNDAwTV9NRURJQV9TVEFUVVNfTElOS19SRU5FVywKK307CisKK3N0cnVjdCBpMjQwMG1fdGx2X21lZGlhX3N0YXR1cyB7CisJc3RydWN0IGkyNDAwbV90bHZfaGRyIGhkcjsKKwlfX2xlMzIgbWVkaWFfc3RhdHVzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisvKiBOZXcgaW4gdjEuNCAqLworc3RydWN0IGkyNDAwbV90bHZfY29uZmlnX2lkbGVfdGltZW91dCB7CisJc3RydWN0IGkyNDAwbV90bHZfaGRyIGhkcjsKKwlfX2xlMzIgdGltZW91dDsJLyogMTAwIHRvIDMwMDAwMCBtcyBbNW1pbl0sIDEwMCBpbmNyZW1lbnRzCisJCQkgKiAwIGRpc2FibGVkICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBOZXcgaW4gdjEuNCAtLSBmb3IgYmFja3dhcmQgY29tcGF0LCB3aWxsIGJlIHJlbW92ZWQgKi8KK3N0cnVjdCBpMjQwMG1fdGx2X2NvbmZpZ19kMmhfZGF0YV9mb3JtYXQgeworCXN0cnVjdCBpMjQwMG1fdGx2X2hkciBoZHI7CisJX191OCBmb3JtYXQ7IAkJLyogMCBvbGQgZm9ybWF0LCAxIGVuaGFuY2VkICovCisJX191OCByZXNlcnZlZFszXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIE5ldyBpbiB2MS40ICovCitzdHJ1Y3QgaTI0MDBtX3Rsdl9jb25maWdfZGxfaG9zdF9yZW9yZGVyIHsKKwlzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgaGRyOworCV9fdTggcmVvcmRlcjsgCQkvKiAwIGRpc2FibGVkLCAxIGVuYWJsZWQgKi8KKwlfX3U4IHJlc2VydmVkWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisjZW5kaWYgLyogI2lmbmRlZiBfX0xJTlVYX19XSU1BWF9fSTI0MDBNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgvd2lyZWxlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzY0MjZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmgKQEAgLTAsMCArMSwxMTI4IEBACisvKgorICogVGhpcyBmaWxlIGRlZmluZSBhIHNldCBvZiBzdGFuZGFyZCB3aXJlbGVzcyBleHRlbnNpb25zCisgKgorICogVmVyc2lvbiA6CTIyCTE2LjMuMDcKKyAqCisgKiBBdXRob3JzIDoJSmVhbiBUb3VycmlsaGVzIC0gSFBMIC0gPGp0QGhwbC5ocC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDE5OTctMjAwNyBKZWFuIFRvdXJyaWxoZXMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKi8KKworI2lmbmRlZiBfTElOVVhfV0lSRUxFU1NfSAorI2RlZmluZSBfTElOVVhfV0lSRUxFU1NfSAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKiogRE9DVU1FTlRBVElPTiAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBJbml0aWFsIEFQSXMgKDE5OTYgLT4gb253YXJkKSA6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQmFzaWNhbGx5LCB0aGUgd2lyZWxlc3MgZXh0ZW5zaW9ucyBhcmUgZm9yIG5vdyBhIHNldCBvZiBzdGFuZGFyZCBpb2N0bAorICogY2FsbCArIC9wcm9jL25ldC93aXJlbGVzcworICoKKyAqIFRoZSBlbnRyeSAvcHJvYy9uZXQvd2lyZWxlc3MgZ2l2ZSBzdGF0aXN0aWNzIGFuZCBpbmZvcm1hdGlvbiBvbiB0aGUKKyAqIGRyaXZlci4KKyAqIFRoaXMgaXMgYmV0dGVyIHRoYW4gaGF2aW5nIGVhY2ggZHJpdmVyIGhhdmluZyBpdHMgZW50cnkgYmVjYXVzZQorICogaXRzIGNlbnRyYWxpc2VkIGFuZCB3ZSBtYXkgcmVtb3ZlIHRoZSBkcml2ZXIgbW9kdWxlIHNhZmVseS4KKyAqCisgKiBJb2N0bCBhcmUgdXNlZCB0byBjb25maWd1cmUgdGhlIGRyaXZlciBhbmQgaXNzdWUgY29tbWFuZHMuICBUaGlzIGlzCisgKiBiZXR0ZXIgdGhhbiBjb21tYW5kIGxpbmUgb3B0aW9ucyBvZiBpbnNtb2QgYmVjYXVzZSB3ZSBtYXkgd2FudCB0bworICogY2hhbmdlIGR5bmFtaWNhbGx5ICh3aGlsZSB0aGUgZHJpdmVyIGlzIHJ1bm5pbmcpIHNvbWUgcGFyYW1ldGVycy4KKyAqCisgKiBUaGUgaW9jdGwgbWVjaGFuaW1zbSBhcmUgY29waWVkIGZyb20gc3RhbmRhcmQgZGV2aWNlcyBpb2N0bC4KKyAqIFdlIGhhdmUgdGhlIGxpc3Qgb2YgY29tbWFuZCBwbHVzIGEgc3RydWN0dXJlIGRlc2NpYmluZyB0aGUKKyAqIGRhdGEgZXhjaGFuZ2VkLi4uCisgKiBOb3RlIHRoYXQgdG8gYWRkIHRoZXNlIGlvY3RsLCBJIHdhcyBvYmxpZ2VkIHRvIG1vZGlmeSA6CisgKgkjIG5ldC9jb3JlL2Rldi5jICh0d28gcGxhY2UgKyBhZGQgaW5jbHVkZSkKKyAqCSMgbmV0L2lwdjQvYWZfaW5ldC5jIChvbmUgcGxhY2UgKyBhZGQgaW5jbHVkZSkKKyAqCisgKiAvcHJvYy9uZXQvd2lyZWxlc3MgaXMgYSBjb3B5IG9mIC9wcm9jL25ldC9kZXYuCisgKiBXZSBoYXZlIGEgc3RydWN0dXJlIGZvciBkYXRhIHBhc3NlZCBmcm9tIHRoZSBkcml2ZXIgdG8gL3Byb2MvbmV0L3dpcmVsZXNzCisgKiBUb28gYWRkIHRoaXMsIEkndmUgbW9kaWZpZWQgOgorICoJIyBuZXQvY29yZS9kZXYuYyAodHdvIG90aGVyIHBsYWNlcykKKyAqCSMgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCAob25lIHBsYWNlKQorICoJIyBpbmNsdWRlL2xpbnV4L3Byb2NfZnMuaCAob25lIHBsYWNlKQorICoKKyAqIE5ldyBkcml2ZXIgQVBJICgyMDAyIC0+IG9ud2FyZCkgOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVGhpcyBmaWxlIGlzIG9ubHkgY29uY2VybmVkIHdpdGggdGhlIHVzZXIgc3BhY2UgQVBJIGFuZCBjb21tb24gZGVmaW5pdGlvbnMuCisgKiBUaGUgbmV3IGRyaXZlciBBUEkgaXMgZGVmaW5lZCBhbmQgZG9jdW1lbnRlZCBpbiA6CisgKgkjIGluY2x1ZGUvbmV0L2l3X2hhbmRsZXIuaAorICoKKyAqIE5vdGUgYXMgd2VsbCB0aGF0IC9wcm9jL25ldC93aXJlbGVzcyBpbXBsZW1lbnRhdGlvbiBoYXMgbm93IG1vdmVkIGluIDoKKyAqCSMgbmV0L2NvcmUvd2lyZWxlc3MuYworICoKKyAqIFdpcmVsZXNzIEV2ZW50cyAoMjAwMiAtPiBvbndhcmQpIDoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBFdmVudHMgYXJlIGRlZmluZWQgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUsIGFuZCBpbXBsZW1lbnRlZCBpbiA6CisgKgkjIG5ldC9jb3JlL3dpcmVsZXNzLmMKKyAqCisgKiBPdGhlciBjb21tZW50cyA6CisgKiAtLS0tLS0tLS0tLS0tLQorICogRG8gbm90IGFkZCBoZXJlIHRoaW5ncyB0aGF0IGFyZSByZWR1bmRhbnQgd2l0aCBvdGhlciBtZWNoYW5pc21zCisgKiAoZHJpdmVycyBpbml0LCBpZmNvbmZpZywgL3Byb2MvbmV0L2RldiwgLi4uKSBhbmQgd2l0aCBhcmUgbm90CisgKiB3aXJlbGVzcyBzcGVjaWZpYy4KKyAqCisgKiBUaGVzZSB3aXJlbGVzcyBleHRlbnNpb25zIGFyZSBub3QgbWFnaWMgOiBlYWNoIGRyaXZlciBoYXMgdG8gcHJvdmlkZQorICogc3VwcG9ydCBmb3IgdGhlbS4uLgorICoKKyAqIElNUE9SVEFOVCBOT1RFIDogQXMgZXZlcnl0aGluZyBpbiB0aGUga2VybmVsLCB0aGlzIGlzIHZlcnkgbXVjaCBhCisgKiB3b3JrIGluIHByb2dyZXNzLiBDb250YWN0IG1lIGlmIHlvdSBoYXZlIGlkZWFzIG9mIGltcHJvdmVtZW50cy4uLgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBJTkNMVURFUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CQkvKiBmb3IgX191KiBhbmQgX19zKiB0eXBlZGVmcyAqLworI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgkJLyogZm9yICJzdHJ1Y3Qgc29ja2FkZHIiIGV0IGFsCSovCisjaW5jbHVkZSA8bGludXgvaWYuaD4JCQkvKiBmb3IgSUZOQU1TSVogYW5kIGNvLi4uICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBWRVJTSU9OICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFRoaXMgY29uc3RhbnQgaXMgdXNlZCB0byBrbm93IHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlIHdpcmVsZXNzCisgKiBleHRlbnNpb25zIGFuZCB0byBrbm93IHdoaWNoIHZlcnNpb24gb2Ygd2lyZWxlc3MgZXh0ZW5zaW9ucyBpdCBpcworICogKHRoZXJlIGlzIHNvbWUgc3R1ZmYgdGhhdCB3aWxsIGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuLi4pCisgKiBJIGp1c3QgcGxhbiB0byBpbmNyZW1lbnQgd2l0aCBlYWNoIG5ldyB2ZXJzaW9uLgorICovCisjZGVmaW5lIFdJUkVMRVNTX0VYVAkyMgorCisvKgorICogQ2hhbmdlcyA6CisgKgorICogVjIgdG8gVjMKKyAqIC0tLS0tLS0tCisgKglBbGFuIENveCBzdGFydCBzb21lIGluY29tcGF0aWJsZXMgY2hhbmdlcy4gSSd2ZSBpbnRlZ3JhdGVkIGEgYml0IG1vcmUuCisgKgktIEVuY3J5cHRpb24gcmVuYW1lZCB0byBFbmNvZGUgdG8gYXZvaWQgVVMgcmVndWxhdGlvbiBwcm9ibGVtcworICoJLSBGcmVxdWVuY3kgY2hhbmdlZCBmcm9tIGZsb2F0IHRvIHN0cnVjdCB0byBhdm9pZCBwcm9ibGVtcyBvbiBvbGQgMzg2CisgKgorICogVjMgdG8gVjQKKyAqIC0tLS0tLS0tCisgKgktIEFkZCBzZW5zaXRpdml0eQorICoKKyAqIFY0IHRvIFY1CisgKiAtLS0tLS0tLQorICoJLSBNaXNzaW5nIGVuY29kaW5nIGRlZmluaXRpb25zIGluIHJhbmdlCisgKgktIEFjY2VzcyBwb2ludHMgc3R1ZmYKKyAqCisgKiBWNSB0byBWNgorICogLS0tLS0tLS0KKyAqCS0gODAyLjExIHN1cHBvcnQgKEVTU0lEIGlvY3RscykKKyAqCisgKiBWNiB0byBWNworICogLS0tLS0tLS0KKyAqCS0gZGVmaW5lIElXX0VTU0lEX01BWF9TSVpFIGFuZCBJV19NQVhfQVAKKyAqCisgKiBWNyB0byBWOAorICogLS0tLS0tLS0KKyAqCS0gQ2hhbmdlZCBteSBlLW1haWwgYWRkcmVzcworICoJLSBNb3JlIDgwMi4xMSBzdXBwb3J0IChuaWNrbmFtZSwgcmF0ZSwgcnRzLCBmcmFnKQorICoJLSBMaXN0IGluZGV4IGluIGZyZXF1ZW5jaWVzCisgKgorICogVjggdG8gVjkKKyAqIC0tLS0tLS0tCisgKgktIFN1cHBvcnQgZm9yICdtb2RlIG9mIG9wZXJhdGlvbicgKGFkLWhvYywgbWFuYWdlZC4uLikKKyAqCS0gU3VwcG9ydCBmb3IgdW5pY2FzdCBhbmQgbXVsdGljYXN0IHBvd2VyIHNhdmluZworICoJLSBDaGFuZ2UgZW5jb2RpbmcgdG8gc3VwcG9ydCBsYXJnZXIgdG9rZW5zICg+NjQgYml0cykKKyAqCS0gVXBkYXRlZCBpd19wYXJhbXMgKGRpc2FibGUsIGZsYWdzKSBhbmQgdXNlIGl0IGZvciBOV0lECisgKgktIEV4dHJhY3RlZCBpd19wb2ludCBmcm9tIGl3cmVxIGZvciBjbGFyaXR5CisgKgorICogVjkgdG8gVjEwCisgKiAtLS0tLS0tLS0KKyAqCS0gQWRkIFBNIGNhcGFiaWxpdHkgdG8gcmFuZ2Ugc3RydWN0dXJlCisgKgktIEFkZCBQTSBtb2RpZmllciA6IE1BWC9NSU4vUkVMQVRJVkUKKyAqCS0gQWRkIGVuY29kaW5nIG9wdGlvbiA6IElXX0VOQ09ERV9OT0tFWQorICoJLSBBZGQgVHhQb3dlciBpb2N0bHMgKHdvcmsgbGlrZSBUeFJhdGUpCisgKgorICogVjEwIHRvIFYxMQorICogLS0tLS0tLS0tLQorICoJLSBBZGQgV0UgdmVyc2lvbiBpbiByYW5nZSAoaGVscCBiYWNrd2FyZC9mb3J3YXJkIGNvbXBhdGliaWxpdHkpCisgKgktIEFkZCByZXRyeSBpb2N0bHMgKHdvcmsgbGlrZSBQTSkKKyAqCisgKiBWMTEgdG8gVjEyCisgKiAtLS0tLS0tLS0tCisgKgktIEFkZCBTSU9DU0lXU1RBVFMgdG8gZ2V0IC9wcm9jL25ldC93aXJlbGVzcyBwcm9ncmFtYXRpY2FsbHkKKyAqCS0gQWRkIERFViBQUklWQVRFIElPQ1RMIHRvIGF2b2lkIGNvbGxpc2lvbnMgaW4gU0lPQ0RFVlBSSVZBVEUgc3BhY2UKKyAqCS0gQWRkIG5ldyBzdGF0aXN0aWNzIChmcmFnLCByZXRyeSwgYmVhY29uKQorICoJLSBBZGQgYXZlcmFnZSBxdWFsaXR5IChmb3IgdXNlciBzcGFjZSBjYWxpYnJhdGlvbikKKyAqCisgKiBWMTIgdG8gVjEzCisgKiAtLS0tLS0tLS0tCisgKgktIERvY3VtZW50IGNyZWF0aW9uIG9mIG5ldyBkcml2ZXIgQVBJLgorICoJLSBFeHRyYWN0IHVuaW9uIGl3cmVxX2RhdGEgZnJvbSBzdHJ1Y3QgaXdyZXEgKGZvciBuZXcgZHJpdmVyIEFQSSkuCisgKgktIFJlbmFtZSBTSU9DU0lXTkFNRSBhcyBTSU9DU0lXQ09NTUlUCisgKgorICogVjEzIHRvIFYxNAorICogLS0tLS0tLS0tLQorICoJLSBXaXJlbGVzcyBFdmVudHMgc3VwcG9ydCA6IGRlZmluZSBzdHJ1Y3QgaXdfZXZlbnQKKyAqCS0gRGVmaW5lIGFkZGl0aW9uYWwgc3BlY2lmaWMgZXZlbnQgbnVtYmVycworICoJLSBBZGQgImFkZHIiIGFuZCAicGFyYW0iIGZpZWxkcyBpbiB1bmlvbiBpd3JlcV9kYXRhCisgKgktIEFQIHNjYW5uaW5nIHN0dWZmIChTSU9DU0lXU0NBTiBhbmQgZnJpZW5kcykKKyAqCisgKiBWMTQgdG8gVjE1CisgKiAtLS0tLS0tLS0tCisgKgktIEFkZCBJV19QUklWX1RZUEVfQUREUiBmb3Igc3RydWN0IHNvY2thZGRyIHByaXZhdGUgYXJnCisgKgktIE1ha2Ugc3RydWN0IGl3X2ZyZXEgc2lnbmVkIChib3RoIG0gJiBlKSwgYWRkIGV4cGxpY2l0IHBhZGRpbmcKKyAqCS0gQWRkIElXRVZDVVNUT00gZm9yIGRyaXZlciBzcGVjaWZpYyBldmVudC9zY2FubmluZyB0b2tlbgorICoJLSBBZGQgSVdfTUFYX0dFVF9TUFkgZm9yIGRyaXZlciByZXR1cm5pbmcgYSBsb3Qgb2YgYWRkcmVzc2VzCisgKgktIEFkZCBJV19UWFBPV19SQU5HRSBmb3IgcmFuZ2Ugb2YgVHggUG93ZXJzCisgKgktIEFkZCBJV0VWUkVHSVNURVJFRCAmIElXRVZFWFBJUkVEIGV2ZW50cyBmb3IgQWNjZXNzIFBvaW50cworICoJLSBBZGQgSVdfTU9ERV9NT05JVE9SIGZvciBwYXNzaXZlIG1vbml0b3IKKyAqCisgKiBWMTUgdG8gVjE2CisgKiAtLS0tLS0tLS0tCisgKgktIEluY3JlYXNlIHRoZSBudW1iZXIgb2YgYml0cmF0ZXMgaW4gaXdfcmFuZ2UgdG8gMzIgKGZvciA4MDIuMTFnKQorICoJLSBJbmNyZWFzZSB0aGUgbnVtYmVyIG9mIGZyZXF1ZW5jaWVzIGluIGl3X3JhbmdlIHRvIDMyIChmb3IgODAyLjExYithKQorICoJLSBSZXNodWZmbGUgc3RydWN0IGl3X3JhbmdlIGZvciBpbmNyZWFzZXMsIGFkZCBmaWxsZXIKKyAqCS0gSW5jcmVhc2UgSVdfTUFYX0FQIHRvIDY0IGZvciBkcml2ZXIgcmV0dXJuaW5nIGEgbG90IG9mIGFkZHJlc3NlcworICoJLSBSZW1vdmUgSVdfTUFYX0dFVF9TUFkgYmVjYXVzZSBjb25mbGljdCB3aXRoIGVuaGFuY2VkIHNweSBzdXBwb3J0CisgKgktIEFkZCBTSU9DU0lXVEhSU1BZL1NJT0NHSVdUSFJTUFkgYW5kICJzdHJ1Y3QgaXdfdGhyc3B5IgorICoJLSBBZGQgSVdfRU5DT0RFX1RFTVAgYW5kIGl3X3JhbmdlLT5lbmNvZGluZ19sb2dpbl9pbmRleAorICoKKyAqIFYxNiB0byBWMTcKKyAqIC0tLS0tLS0tLS0KKyAqCS0gQWRkIGZsYWdzIHRvIGZyZXF1ZW5jeSAtPiBhdXRvL2ZpeGVkCisgKgktIERvY3VtZW50IChzdHJ1Y3QgaXdfcXVhbGl0eSAqKS0+dXBkYXRlZCwgYWRkIG5ldyBmbGFncyAoSU5WQUxJRCkKKyAqCS0gV2lyZWxlc3MgRXZlbnQgY2FwYWJpbGl0eSBpbiBzdHJ1Y3QgaXdfcmFuZ2UKKyAqCS0gQWRkIHN1cHBvcnQgZm9yIHJlbGF0aXZlIFR4UG93ZXIgKHlpY2sgISkKKyAqCisgKiBWMTcgdG8gVjE4IChGcm9tIEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+KQorICogLS0tLS0tLS0tLQorICoJLSBBZGQgc3VwcG9ydCBmb3IgV1BBL1dQQTIKKyAqCS0gQWRkIGV4dGVuZGVkIGVuY29kaW5nIGNvbmZpZ3VyYXRpb24gKFNJT0NTSVdFTkNPREVFWFQgYW5kCisgKgkgIFNJT0NHSVdFTkNPREVFWFQpCisgKgktIEFkZCBTSU9DU0lXR0VOSUUvU0lPQ0dJV0dFTklFCisgKgktIEFkZCBTSU9DU0lXTUxNRQorICoJLSBBZGQgU0lPQ1NJV1BNS1NBCisgKgktIEFkZCBzdHJ1Y3QgaXdfcmFuZ2UgYml0IGZpZWxkIGZvciBzdXBwb3J0ZWQgZW5jb2RpbmcgY2FwYWJpbGl0aWVzCisgKgktIEFkZCBvcHRpb25hbCBzY2FuIHJlcXVlc3QgcGFyYW1ldGVycyBmb3IgU0lPQ1NJV1NDQU4KKyAqCS0gQWRkIFNJT0NTSVdBVVRIL1NJT0NHSVdBVVRIIGZvciBzZXR0aW5nIGF1dGhlbnRpY2F0aW9uIGFuZCBXUEEKKyAqCSAgcmVsYXRlZCBwYXJhbWV0ZXJzIChleHRlbnNpYmxlIHVwIHRvIDQwOTYgcGFyYW1ldGVyIHZhbHVlcykKKyAqCS0gQWRkIHdpcmVsZXNzIGV2ZW50czogSVdFVkdFTklFLCBJV0VWTUlDSEFFTE1JQ0ZBSUxVUkUsCisgKgkgIElXRVZBU1NPQ1JFUUlFLCBJV0VWQVNTT0NSRVNQSUUsIElXRVZQTUtJRENBTkQKKyAqCisgKiBWMTggdG8gVjE5CisgKiAtLS0tLS0tLS0tCisgKgktIFJlbW92ZSAoc3RydWN0IGl3X3BvaW50ICopLT5wb2ludGVyIGZyb20gZXZlbnRzIGFuZCBzdHJlYW1zCisgKgktIFJlbW92ZSBoZWFkZXIgaW5jbHVkZXMgdG8gaGVscCB1c2VyIHNwYWNlCisgKgktIEluY3JlYXNlIElXX0VOQ09ESU5HX1RPS0VOX01BWCBmcm9tIDMyIHRvIDY0CisgKgktIEFkZCBJV19RVUFMX0FMTF9VUERBVEVEIGFuZCBJV19RVUFMX0FMTF9JTlZBTElEIG1hY3JvcworICoJLSBBZGQgZXhwbGljaXQgZmxhZyB0byB0ZWxsIHN0YXRzIGFyZSBpbiBkQm0gOiBJV19RVUFMX0RCTQorICoJLSBBZGQgSVdfSU9DVExfSURYKCkgYW5kIElXX0VWRU5UX0lEWCgpIG1hY3JvcworICoKKyAqIFYxOSB0byBWMjAKKyAqIC0tLS0tLS0tLS0KKyAqCS0gUnROZXRsaW5rIHJlcXVlc3RzIHN1cHBvcnQgKFNFVC9HRVQpCisgKgorICogVjIwIHRvIFYyMQorICogLS0tLS0tLS0tLQorICoJLSBSZW1vdmUgKHN0cnVjdCBuZXRfZGV2aWNlICopLT5nZXRfd2lyZWxlc3Nfc3RhdHMoKQorICoJLSBDaGFuZ2UgbGVuZ3RoIGluIEVTU0lEIGFuZCBOSUNLIHRvIHN0cmxlbigpIGluc3RlYWQgb2Ygc3RybGVuKCkrMQorICoJLSBBZGQgSVdfUkVUUllfU0hPUlQvSVdfUkVUUllfTE9ORyByZXRyeSBtb2RpZmllcnMKKyAqCS0gUG93ZXIvUmV0cnkgcmVsYXRpdmUgdmFsdWVzIG5vIGxvbmdlciAqIDEwMDAwMAorICoJLSBBZGQgZXhwbGljaXQgZmxhZyB0byB0ZWxsIHN0YXRzIGFyZSBpbiA4MDIuMTFrIFJDUEkgOiBJV19RVUFMX1JDUEkKKyAqCisgKiBWMjEgdG8gVjIyCisgKiAtLS0tLS0tLS0tCisgKgktIFByZXZlbnQgbGVha2luZyBvZiBrZXJuZWwgc3BhY2UgaW4gc3RyZWFtIG9uIDY0IGJpdHMuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiogQ09OU1RBTlRTICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIElPQ1RMIExJU1QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogV2lyZWxlc3MgSWRlbnRpZmljYXRpb24gKi8KKyNkZWZpbmUgU0lPQ1NJV0NPTU1JVAkweDhCMDAJCS8qIENvbW1pdCBwZW5kaW5nIGNoYW5nZXMgdG8gZHJpdmVyICovCisjZGVmaW5lIFNJT0NHSVdOQU1FCTB4OEIwMQkJLyogZ2V0IG5hbWUgPT0gd2lyZWxlc3MgcHJvdG9jb2wgKi8KKy8qIFNJT0NHSVdOQU1FIGlzIHVzZWQgdG8gdmVyaWZ5IHRoZSBwcmVzZW5jZSBvZiBXaXJlbGVzcyBFeHRlbnNpb25zLgorICogQ29tbW9uIHZhbHVlcyA6ICJJRUVFIDgwMi4xMS1EUyIsICJJRUVFIDgwMi4xMS1GSCIsICJJRUVFIDgwMi4xMWIiLi4uCisgKiBEb24ndCBwdXQgdGhlIG5hbWUgb2YgeW91ciBkcml2ZXIgdGhlcmUsIGl0J3MgdXNlbGVzcy4gKi8KKworLyogQmFzaWMgb3BlcmF0aW9ucyAqLworI2RlZmluZSBTSU9DU0lXTldJRAkweDhCMDIJCS8qIHNldCBuZXR3b3JrIGlkIChwcmUtODAyLjExKSAqLworI2RlZmluZSBTSU9DR0lXTldJRAkweDhCMDMJCS8qIGdldCBuZXR3b3JrIGlkICh0aGUgY2VsbCkgKi8KKyNkZWZpbmUgU0lPQ1NJV0ZSRVEJMHg4QjA0CQkvKiBzZXQgY2hhbm5lbC9mcmVxdWVuY3kgKEh6KSAqLworI2RlZmluZSBTSU9DR0lXRlJFUQkweDhCMDUJCS8qIGdldCBjaGFubmVsL2ZyZXF1ZW5jeSAoSHopICovCisjZGVmaW5lIFNJT0NTSVdNT0RFCTB4OEIwNgkJLyogc2V0IG9wZXJhdGlvbiBtb2RlICovCisjZGVmaW5lIFNJT0NHSVdNT0RFCTB4OEIwNwkJLyogZ2V0IG9wZXJhdGlvbiBtb2RlICovCisjZGVmaW5lIFNJT0NTSVdTRU5TCTB4OEIwOAkJLyogc2V0IHNlbnNpdGl2aXR5IChkQm0pICovCisjZGVmaW5lIFNJT0NHSVdTRU5TCTB4OEIwOQkJLyogZ2V0IHNlbnNpdGl2aXR5IChkQm0pICovCisKKy8qIEluZm9ybWF0aXZlIHN0dWZmICovCisjZGVmaW5lIFNJT0NTSVdSQU5HRQkweDhCMEEJCS8qIFVudXNlZCAqLworI2RlZmluZSBTSU9DR0lXUkFOR0UJMHg4QjBCCQkvKiBHZXQgcmFuZ2Ugb2YgcGFyYW1ldGVycyAqLworI2RlZmluZSBTSU9DU0lXUFJJVgkweDhCMEMJCS8qIFVudXNlZCAqLworI2RlZmluZSBTSU9DR0lXUFJJVgkweDhCMEQJCS8qIGdldCBwcml2YXRlIGlvY3RsIGludGVyZmFjZSBpbmZvICovCisjZGVmaW5lIFNJT0NTSVdTVEFUUwkweDhCMEUJCS8qIFVudXNlZCAqLworI2RlZmluZSBTSU9DR0lXU1RBVFMJMHg4QjBGCQkvKiBHZXQgL3Byb2MvbmV0L3dpcmVsZXNzIHN0YXRzICovCisvKiBTSU9DR0lXU1RBVFMgaXMgc3RyaWN0bHkgdXNlZCBiZXR3ZWVuIHVzZXIgc3BhY2UgYW5kIHRoZSBrZXJuZWwsIGFuZAorICogaXMgbmV2ZXIgcGFzc2VkIHRvIHRoZSBkcml2ZXIgKGkuZS4gdGhlIGRyaXZlciB3aWxsIG5ldmVyIHNlZSBpdCkuICovCisKKy8qIFNweSBzdXBwb3J0IChzdGF0aXN0aWNzIHBlciBNQUMgYWRkcmVzcyAtIHVzZWQgZm9yIE1vYmlsZSBJUCBzdXBwb3J0KSAqLworI2RlZmluZSBTSU9DU0lXU1BZCTB4OEIxMAkJLyogc2V0IHNweSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgU0lPQ0dJV1NQWQkweDhCMTEJCS8qIGdldCBzcHkgaW5mbyAocXVhbGl0eSBvZiBsaW5rKSAqLworI2RlZmluZSBTSU9DU0lXVEhSU1BZCTB4OEIxMgkJLyogc2V0IHNweSB0aHJlc2hvbGQgKHNweSBldmVudCkgKi8KKyNkZWZpbmUgU0lPQ0dJV1RIUlNQWQkweDhCMTMJCS8qIGdldCBzcHkgdGhyZXNob2xkICovCisKKy8qIEFjY2VzcyBQb2ludCBtYW5pcHVsYXRpb24gKi8KKyNkZWZpbmUgU0lPQ1NJV0FQCTB4OEIxNAkJLyogc2V0IGFjY2VzcyBwb2ludCBNQUMgYWRkcmVzc2VzICovCisjZGVmaW5lIFNJT0NHSVdBUAkweDhCMTUJCS8qIGdldCBhY2Nlc3MgcG9pbnQgTUFDIGFkZHJlc3NlcyAqLworI2RlZmluZSBTSU9DR0lXQVBMSVNUCTB4OEIxNwkJLyogRGVwcmVjYXRlZCBpbiBmYXZvciBvZiBzY2FubmluZyAqLworI2RlZmluZSBTSU9DU0lXU0NBTgkweDhCMTgJCS8qIHRyaWdnZXIgc2Nhbm5pbmcgKGxpc3QgY2VsbHMpICovCisjZGVmaW5lIFNJT0NHSVdTQ0FOCTB4OEIxOQkJLyogZ2V0IHNjYW5uaW5nIHJlc3VsdHMgKi8KKworLyogODAyLjExIHNwZWNpZmljIHN1cHBvcnQgKi8KKyNkZWZpbmUgU0lPQ1NJV0VTU0lECTB4OEIxQQkJLyogc2V0IEVTU0lEIChuZXR3b3JrIG5hbWUpICovCisjZGVmaW5lIFNJT0NHSVdFU1NJRAkweDhCMUIJCS8qIGdldCBFU1NJRCAqLworI2RlZmluZSBTSU9DU0lXTklDS04JMHg4QjFDCQkvKiBzZXQgbm9kZSBuYW1lL25pY2tuYW1lICovCisjZGVmaW5lIFNJT0NHSVdOSUNLTgkweDhCMUQJCS8qIGdldCBub2RlIG5hbWUvbmlja25hbWUgKi8KKy8qIEFzIHRoZSBFU1NJRCBhbmQgTklDS04gYXJlIHN0cmluZ3MgdXAgdG8gMzIgYnl0ZXMgbG9uZywgaXQgZG9lc24ndCBmaXQKKyAqIHdpdGhpbiB0aGUgJ2l3cmVxJyBzdHJ1Y3R1cmUsIHNvIHdlIG5lZWQgdG8gdXNlIHRoZSAnZGF0YScgbWVtYmVyIHRvCisgKiBwb2ludCB0byBhIHN0cmluZyBpbiB1c2VyIHNwYWNlLCBsaWtlIGl0IGlzIGRvbmUgZm9yIFJBTkdFLi4uICovCisKKy8qIE90aGVyIHBhcmFtZXRlcnMgdXNlZnVsIGluIDgwMi4xMSBhbmQgc29tZSBvdGhlciBkZXZpY2VzICovCisjZGVmaW5lIFNJT0NTSVdSQVRFCTB4OEIyMAkJLyogc2V0IGRlZmF1bHQgYml0IHJhdGUgKGJwcykgKi8KKyNkZWZpbmUgU0lPQ0dJV1JBVEUJMHg4QjIxCQkvKiBnZXQgZGVmYXVsdCBiaXQgcmF0ZSAoYnBzKSAqLworI2RlZmluZSBTSU9DU0lXUlRTCTB4OEIyMgkJLyogc2V0IFJUUy9DVFMgdGhyZXNob2xkIChieXRlcykgKi8KKyNkZWZpbmUgU0lPQ0dJV1JUUwkweDhCMjMJCS8qIGdldCBSVFMvQ1RTIHRocmVzaG9sZCAoYnl0ZXMpICovCisjZGVmaW5lIFNJT0NTSVdGUkFHCTB4OEIyNAkJLyogc2V0IGZyYWdtZW50YXRpb24gdGhyIChieXRlcykgKi8KKyNkZWZpbmUgU0lPQ0dJV0ZSQUcJMHg4QjI1CQkvKiBnZXQgZnJhZ21lbnRhdGlvbiB0aHIgKGJ5dGVzKSAqLworI2RlZmluZSBTSU9DU0lXVFhQT1cJMHg4QjI2CQkvKiBzZXQgdHJhbnNtaXQgcG93ZXIgKGRCbSkgKi8KKyNkZWZpbmUgU0lPQ0dJV1RYUE9XCTB4OEIyNwkJLyogZ2V0IHRyYW5zbWl0IHBvd2VyIChkQm0pICovCisjZGVmaW5lIFNJT0NTSVdSRVRSWQkweDhCMjgJCS8qIHNldCByZXRyeSBsaW1pdHMgYW5kIGxpZmV0aW1lICovCisjZGVmaW5lIFNJT0NHSVdSRVRSWQkweDhCMjkJCS8qIGdldCByZXRyeSBsaW1pdHMgYW5kIGxpZmV0aW1lICovCisKKy8qIEVuY29kaW5nIHN0dWZmIChzY3JhbWJsaW5nLCBoYXJkd2FyZSBzZWN1cml0eSwgV0VQLi4uKSAqLworI2RlZmluZSBTSU9DU0lXRU5DT0RFCTB4OEIyQQkJLyogc2V0IGVuY29kaW5nIHRva2VuICYgbW9kZSAqLworI2RlZmluZSBTSU9DR0lXRU5DT0RFCTB4OEIyQgkJLyogZ2V0IGVuY29kaW5nIHRva2VuICYgbW9kZSAqLworLyogUG93ZXIgc2F2aW5nIHN0dWZmIChwb3dlciBtYW5hZ2VtZW50LCB1bmljYXN0IGFuZCBtdWx0aWNhc3QpICovCisjZGVmaW5lIFNJT0NTSVdQT1dFUgkweDhCMkMJCS8qIHNldCBQb3dlciBNYW5hZ2VtZW50IHNldHRpbmdzICovCisjZGVmaW5lIFNJT0NHSVdQT1dFUgkweDhCMkQJCS8qIGdldCBQb3dlciBNYW5hZ2VtZW50IHNldHRpbmdzICovCisKKy8qIFdQQSA6IEdlbmVyaWMgSUVFRSA4MDIuMTEgaW5mb3JtYXRpb20gZWxlbWVudCAoZS5nLiwgZm9yIFdQQS9SU04vV01NKS4KKyAqIFRoaXMgaW9jdGwgdXNlcyBzdHJ1Y3QgaXdfcG9pbnQgYW5kIGRhdGEgYnVmZmVyIHRoYXQgaW5jbHVkZXMgSUUgaWQgYW5kIGxlbgorICogZmllbGRzLiBNb3JlIHRoYW4gb25lIElFIG1heSBiZSBpbmNsdWRlZCBpbiB0aGUgcmVxdWVzdC4gU2V0dGluZyB0aGUgZ2VuZXJpYworICogSUUgdG8gZW1wdHkgYnVmZmVyIChsZW49MCkgcmVtb3ZlcyB0aGUgZ2VuZXJpYyBJRSBmcm9tIHRoZSBkcml2ZXIuIERyaXZlcnMKKyAqIGFyZSBhbGxvd2VkIHRvIGdlbmVyYXRlIHRoZWlyIG93biBXUEEvUlNOIElFcywgYnV0IGluIHRoZXNlIGNhc2VzLCBkcml2ZXJzCisgKiBhcmUgcmVxdWlyZWQgdG8gcmVwb3J0IHRoZSB1c2VkIElFIGFzIGEgd2lyZWxlc3MgZXZlbnQsIGUuZy4sIHdoZW4KKyAqIGFzc29jaWF0aW5nIHdpdGggYW4gQVAuICovCisjZGVmaW5lIFNJT0NTSVdHRU5JRQkweDhCMzAJCS8qIHNldCBnZW5lcmljIElFICovCisjZGVmaW5lIFNJT0NHSVdHRU5JRQkweDhCMzEJCS8qIGdldCBnZW5lcmljIElFICovCisKKy8qIFdQQSA6IElFRUUgODAyLjExIE1MTUUgcmVxdWVzdHMgKi8KKyNkZWZpbmUgU0lPQ1NJV01MTUUJMHg4QjE2CQkvKiByZXF1ZXN0IE1MTUUgb3BlcmF0aW9uOyB1c2VzCisJCQkJCSAqIHN0cnVjdCBpd19tbG1lICovCisvKiBXUEEgOiBBdXRoZW50aWNhdGlvbiBtb2RlIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgU0lPQ1NJV0FVVEgJMHg4QjMyCQkvKiBzZXQgYXV0aGVudGljYXRpb24gbW9kZSBwYXJhbXMgKi8KKyNkZWZpbmUgU0lPQ0dJV0FVVEgJMHg4QjMzCQkvKiBnZXQgYXV0aGVudGljYXRpb24gbW9kZSBwYXJhbXMgKi8KKworLyogV1BBIDogRXh0ZW5kZWQgdmVyc2lvbiBvZiBlbmNvZGluZyBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIFNJT0NTSVdFTkNPREVFWFQgMHg4QjM0CQkvKiBzZXQgZW5jb2RpbmcgdG9rZW4gJiBtb2RlICovCisjZGVmaW5lIFNJT0NHSVdFTkNPREVFWFQgMHg4QjM1CQkvKiBnZXQgZW5jb2RpbmcgdG9rZW4gJiBtb2RlICovCisKKy8qIFdQQTIgOiBQTUtTQSBjYWNoZSBtYW5hZ2VtZW50ICovCisjZGVmaW5lIFNJT0NTSVdQTUtTQQkweDhCMzYJCS8qIFBNS1NBIGNhY2hlIG9wZXJhdGlvbiAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBERVYgUFJJVkFURSBJT0NUTCBMSVNUIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFRoZXNlIDMyIGlvY3RsIGFyZSB3aXJlbGVzcyBkZXZpY2UgcHJpdmF0ZSwgZm9yIDE2IGNvbW1hbmRzLgorICogRWFjaCBkcml2ZXIgaXMgZnJlZSB0byB1c2UgdGhlbSBmb3Igd2hhdGV2ZXIgcHVycG9zZSBpdCBjaG9vc2VzLAorICogaG93ZXZlciB0aGUgZHJpdmVyICptdXN0KiBleHBvcnQgdGhlIGRlc2NyaXB0aW9uIG9mIHRob3NlIGlvY3RscworICogd2l0aCBTSU9DR0lXUFJJViBhbmQgKm11c3QqIHVzZSBhcmd1bWVudHMgYXMgZGVmaW5lZCBiZWxvdy4KKyAqIElmIHlvdSBkb24ndCBmb2xsb3cgdGhvc2UgcnVsZXMsIERhdmVNIGlzIGdvaW5nIHRvIGhhdGUgeW91IChyZWFzb24gOgorICogaXQgbWFrZSBtaXhlZCAzMi82NGJpdCBvcGVyYXRpb24gaW1wb3NzaWJsZSkuCisgKi8KKyNkZWZpbmUgU0lPQ0lXRklSU1RQUklWCTB4OEJFMAorI2RlZmluZSBTSU9DSVdMQVNUUFJJVgkweDhCRkYKKy8qIFByZXZpb3VzbHksIHdlIHdlcmUgdXNpbmcgU0lPQ0RFVlBSSVZBVEUsIGJ1dCB3ZSBub3cgaGF2ZSBvdXIKKyAqIHNlcGFyYXRlIHJhbmdlIGJlY2F1c2Ugb2YgY29sbGlzaW9ucyB3aXRoIG90aGVyIHRvb2xzIHN1Y2ggYXMKKyAqICdtaWktdG9vbCcuCisgKiBXZSBub3cgaGF2ZSAzMiBjb21tYW5kcywgc28gYSBiaXQgbW9yZSBzcGFjZSA7LSkuCisgKiBBbHNvLCBhbGwgJ2V2ZW4nIGNvbW1hbmRzIGFyZSBvbmx5IHVzYWJsZSBieSByb290IGFuZCBkb24ndCByZXR1cm4gdGhlCisgKiBjb250ZW50IG9mIGlmci9pd3IgdG8gdXNlciAoYnV0IHlvdSBhcmUgbm90IG9ibGlnZWQgdG8gdXNlIHRoZSBzZXQvZ2V0CisgKiBjb252ZW50aW9uLCBqdXN0IHVzZSBldmVyeSBvdGhlciB0d28gY29tbWFuZCkuIE1vcmUgZGV0YWlscyBpbiBpd3ByaXYuYy4KKyAqIEFuZCBJIHJlcGVhdCA6IHlvdSBhcmUgbm90IGZvcmNlZCB0byB1c2UgdGhlbSB3aXRoIGl3cHJpdiwgYnV0IHlvdQorICogbXVzdCBiZSBjb21wbGlhbnQgd2l0aCBpdC4KKyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIElPQ1RMIFNUVUZGIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogVGhlIGZpcnN0IGFuZCB0aGUgbGFzdCAocmFuZ2UpICovCisjZGVmaW5lIFNJT0NJV0ZJUlNUCTB4OEIwMAorI2RlZmluZSBTSU9DSVdMQVNUCVNJT0NJV0xBU1RQUklWCQkvKiAweDhCRkYgKi8KKyNkZWZpbmUgSVdfSU9DVExfSURYKGNtZCkJKChjbWQpIC0gU0lPQ0lXRklSU1QpCisjZGVmaW5lIElXX0hBTkRMRVIoaWQsIGZ1bmMpCQkJXAorCVtJV19JT0NUTF9JRFgoaWQpXSA9IGZ1bmMKKworLyogT2RkIDogZ2V0ICh3b3JsZCBhY2Nlc3MpLCBldmVuIDogc2V0IChyb290IGFjY2VzcykgKi8KKyNkZWZpbmUgSVdfSVNfU0VUKGNtZCkJKCEoKGNtZCkgJiAweDEpKQorI2RlZmluZSBJV19JU19HRVQoY21kKQkoKGNtZCkgJiAweDEpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdJUkVMRVNTIEVWRU5UUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogVGhvc2UgYXJlICpOT1QqIGlvY3RscywgZG8gbm90IGlzc3VlIHJlcXVlc3Qgb24gdGhlbSAhISEgKi8KKy8qIE1vc3QgZXZlbnRzIHVzZSB0aGUgc2FtZSBpZGVudGlmaWVyIGFzIGlvY3RsIHJlcXVlc3RzICovCisKKyNkZWZpbmUgSVdFVlRYRFJPUAkweDhDMDAJCS8qIFBhY2tldCBkcm9wcGVkIHRvIGV4Y2Vzc2l2ZSByZXRyeSAqLworI2RlZmluZSBJV0VWUVVBTAkweDhDMDEJCS8qIFF1YWxpdHkgcGFydCBvZiBzdGF0aXN0aWNzIChzY2FuKSAqLworI2RlZmluZSBJV0VWQ1VTVE9NCTB4OEMwMgkJLyogRHJpdmVyIHNwZWNpZmljIGFzY2lpIHN0cmluZyAqLworI2RlZmluZSBJV0VWUkVHSVNURVJFRAkweDhDMDMJCS8qIERpc2NvdmVyZWQgYSBuZXcgbm9kZSAoQVAgbW9kZSkgKi8KKyNkZWZpbmUgSVdFVkVYUElSRUQJMHg4QzA0CQkvKiBFeHBpcmVkIGEgbm9kZSAoQVAgbW9kZSkgKi8KKyNkZWZpbmUgSVdFVkdFTklFCTB4OEMwNQkJLyogR2VuZXJpYyBJRSAoV1BBLCBSU04sIFdNTSwgLi4pCisJCQkJCSAqIChzY2FuIHJlc3VsdHMpOyBUaGlzIGluY2x1ZGVzIGlkIGFuZAorCQkJCQkgKiBsZW5ndGggZmllbGRzLiBPbmUgSVdFVkdFTklFIG1heQorCQkJCQkgKiBjb250YWluIG1vcmUgdGhhbiBvbmUgSUUuIFNjYW4KKwkJCQkJICogcmVzdWx0cyBtYXkgY29udGFpbiBvbmUgb3IgbW9yZQorCQkJCQkgKiBJV0VWR0VOSUUgZXZlbnRzLiAqLworI2RlZmluZSBJV0VWTUlDSEFFTE1JQ0ZBSUxVUkUgMHg4QzA2CS8qIE1pY2hhZWwgTUlDIGZhaWx1cmUKKwkJCQkJICogKHN0cnVjdCBpd19taWNoYWVsbWljZmFpbHVyZSkKKwkJCQkJICovCisjZGVmaW5lIElXRVZBU1NPQ1JFUUlFCTB4OEMwNwkJLyogSUVzIHVzZWQgaW4gKFJlKUFzc29jaWF0aW9uIFJlcXVlc3QuCisJCQkJCSAqIFRoZSBkYXRhIGluY2x1ZGVzIGlkIGFuZCBsZW5ndGgKKwkJCQkJICogZmllbGRzIGFuZCBtYXkgY29udGFpbiBtb3JlIHRoYW4gb25lCisJCQkJCSAqIElFLiBUaGlzIGV2ZW50IGlzIHJlcXVpcmVkIGluCisJCQkJCSAqIE1hbmFnZWQgbW9kZSBpZiB0aGUgZHJpdmVyCisJCQkJCSAqIGdlbmVyYXRlcyBpdHMgb3duIFdQQS9SU04gSUUuIFRoaXMKKwkJCQkJICogc2hvdWxkIGJlIHNlbnQganVzdCBiZWZvcmUKKwkJCQkJICogSVdFVlJFR0lTVEVSRUQgZXZlbnQgZm9yIHRoZQorCQkJCQkgKiBhc3NvY2lhdGlvbi4gKi8KKyNkZWZpbmUgSVdFVkFTU09DUkVTUElFCTB4OEMwOAkJLyogSUVzIHVzZWQgaW4gKFJlKUFzc29jaWF0aW9uCisJCQkJCSAqIFJlc3BvbnNlLiBUaGUgZGF0YSBpbmNsdWRlcyBpZCBhbmQKKwkJCQkJICogbGVuZ3RoIGZpZWxkcyBhbmQgbWF5IGNvbnRhaW4gbW9yZQorCQkJCQkgKiB0aGFuIG9uZSBJRS4gVGhpcyBtYXkgYmUgc2VudAorCQkJCQkgKiBiZXR3ZWVuIElXRVZBU1NPQ1JFUUlFIGFuZAorCQkJCQkgKiBJV0VWUkVHSVNURVJFRCBldmVudHMgZm9yIHRoZQorCQkJCQkgKiBhc3NvY2lhdGlvbi4gKi8KKyNkZWZpbmUgSVdFVlBNS0lEQ0FORAkweDhDMDkJCS8qIFBNS0lEIGNhbmRpZGF0ZSBmb3IgUlNOCisJCQkJCSAqIHByZS1hdXRoZW50aWNhdGlvbgorCQkJCQkgKiAoc3RydWN0IGl3X3Bta2lkX2NhbmQpICovCisKKyNkZWZpbmUgSVdFVkZJUlNUCTB4OEMwMAorI2RlZmluZSBJV19FVkVOVF9JRFgoY21kKQkoKGNtZCkgLSBJV0VWRklSU1QpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUFJJVkFURSBJTkZPIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qCisgKiBUaGUgZm9sbG93aW5nIGlzIHVzZWQgd2l0aCBTSU9DR0lXUFJJVi4gSXQgYWxsb3cgYSBkcml2ZXIgdG8gZGVmaW5lCisgKiB0aGUgaW50ZXJmYWNlIChuYW1lLCB0eXBlIG9mIGRhdGEpIGZvciBpdHMgcHJpdmF0ZSBpb2N0bC4KKyAqIFByaXZhdGVzIGlvY3RsIGFyZSBTSU9DSVdGSVJTVFBSSVYgLT4gU0lPQ0lXTEFTVFBSSVYKKyAqLworCisjZGVmaW5lIElXX1BSSVZfVFlQRV9NQVNLCTB4NzAwMAkvKiBUeXBlIG9mIGFyZ3VtZW50cyAqLworI2RlZmluZSBJV19QUklWX1RZUEVfTk9ORQkweDAwMDAKKyNkZWZpbmUgSVdfUFJJVl9UWVBFX0JZVEUJMHgxMDAwCS8qIENoYXIgYXMgbnVtYmVyICovCisjZGVmaW5lIElXX1BSSVZfVFlQRV9DSEFSCTB4MjAwMAkvKiBDaGFyIGFzIGNoYXJhY3RlciAqLworI2RlZmluZSBJV19QUklWX1RZUEVfSU5UCTB4NDAwMAkvKiAzMiBiaXRzIGludCAqLworI2RlZmluZSBJV19QUklWX1RZUEVfRkxPQVQJMHg1MDAwCS8qIHN0cnVjdCBpd19mcmVxICovCisjZGVmaW5lIElXX1BSSVZfVFlQRV9BRERSCTB4NjAwMAkvKiBzdHJ1Y3Qgc29ja2FkZHIgKi8KKworI2RlZmluZSBJV19QUklWX1NJWkVfRklYRUQJMHgwODAwCS8qIFZhcmlhYmxlIG9yIGZpeGVkIG51bWJlciBvZiBhcmdzICovCisKKyNkZWZpbmUgSVdfUFJJVl9TSVpFX01BU0sJMHgwN0ZGCS8qIE1heCBudW1iZXIgb2YgdGhvc2UgYXJncyAqLworCisvKgorICogTm90ZSA6IGlmIHRoZSBudW1iZXIgb2YgYXJncyBpcyBmaXhlZCBhbmQgdGhlIHNpemUgPCAxNiBvY3RldHMsCisgKiBpbnN0ZWFkIG9mIHBhc3NpbmcgYSBwb2ludGVyIHdlIHdpbGwgcHV0IGFyZ3MgaW4gdGhlIGl3cmVxIHN0cnVjdC4uLgorICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9USEVSIENPTlNUQU5UUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBNYXhpbXVtIGZyZXF1ZW5jaWVzIGluIHRoZSByYW5nZSBzdHJ1Y3QgKi8KKyNkZWZpbmUgSVdfTUFYX0ZSRVFVRU5DSUVTCTMyCisvKiBOb3RlIDogaWYgeW91IGhhdmUgc29tZXRoaW5nIGxpa2UgODAgZnJlcXVlbmNpZXMsCisgKiBkb24ndCBpbmNyZWFzZSB0aGlzIGNvbnN0YW50IGFuZCBkb24ndCBmaWxsIHRoZSBmcmVxdWVuY3kgbGlzdC4KKyAqIFRoZSB1c2VyIHdpbGwgYmUgYWJsZSB0byBzZXQgYnkgY2hhbm5lbCBhbnl3YXkuLi4gKi8KKworLyogTWF4aW11bSBiaXQgcmF0ZXMgaW4gdGhlIHJhbmdlIHN0cnVjdCAqLworI2RlZmluZSBJV19NQVhfQklUUkFURVMJCTMyCisKKy8qIE1heGltdW0gdHggcG93ZXJzIGluIHRoZSByYW5nZSBzdHJ1Y3QgKi8KKyNkZWZpbmUgSVdfTUFYX1RYUE9XRVIJCTgKKy8qIE5vdGUgOiBpZiB5b3UgbW9yZSB0aGFuIDggVFhQb3dlcnMsIGp1c3Qgc2V0IHRoZSBtYXggYW5kIG1pbiBvcgorICogYSBmZXcgb2YgdGhlbSBpbiB0aGUgc3RydWN0IGl3X3JhbmdlLiAqLworCisvKiBNYXhpbXVtIG9mIGFkZHJlc3MgdGhhdCB5b3UgbWF5IHNldCB3aXRoIFNQWSAqLworI2RlZmluZSBJV19NQVhfU1BZCQk4CisKKy8qIE1heGltdW0gb2YgYWRkcmVzcyB0aGF0IHlvdSBtYXkgZ2V0IGluIHRoZQorICAgbGlzdCBvZiBhY2Nlc3MgcG9pbnRzIGluIHJhbmdlICovCisjZGVmaW5lIElXX01BWF9BUAkJNjQKKworLyogTWF4aW11bSBzaXplIG9mIHRoZSBFU1NJRCBhbmQgTklDS04gc3RyaW5ncyAqLworI2RlZmluZSBJV19FU1NJRF9NQVhfU0laRQkzMgorCisvKiBNb2RlcyBvZiBvcGVyYXRpb24gKi8KKyNkZWZpbmUgSVdfTU9ERV9BVVRPCTAJLyogTGV0IHRoZSBkcml2ZXIgZGVjaWRlcyAqLworI2RlZmluZSBJV19NT0RFX0FESE9DCTEJLyogU2luZ2xlIGNlbGwgbmV0d29yayAqLworI2RlZmluZSBJV19NT0RFX0lORlJBCTIJLyogTXVsdGkgY2VsbCBuZXR3b3JrLCByb2FtaW5nLCAuLi4gKi8KKyNkZWZpbmUgSVdfTU9ERV9NQVNURVIJMwkvKiBTeW5jaHJvbmlzYXRpb24gbWFzdGVyIG9yIEFjY2VzcyBQb2ludCAqLworI2RlZmluZSBJV19NT0RFX1JFUEVBVAk0CS8qIFdpcmVsZXNzIFJlcGVhdGVyIChmb3J3YXJkZXIpICovCisjZGVmaW5lIElXX01PREVfU0VDT05ECTUJLyogU2Vjb25kYXJ5IG1hc3Rlci9yZXBlYXRlciAoYmFja3VwKSAqLworI2RlZmluZSBJV19NT0RFX01PTklUT1IJNgkvKiBQYXNzaXZlIG1vbml0b3IgKGxpc3RlbiBvbmx5KSAqLworI2RlZmluZSBJV19NT0RFX01FU0gJNwkvKiBNZXNoIChJRUVFIDgwMi4xMXMpIG5ldHdvcmsgKi8KKworLyogU3RhdGlzdGljcyBmbGFncyAoYml0bWFzayBpbiB1cGRhdGVkKSAqLworI2RlZmluZSBJV19RVUFMX1FVQUxfVVBEQVRFRAkweDAxCS8qIFZhbHVlIHdhcyB1cGRhdGVkIHNpbmNlIGxhc3QgcmVhZCAqLworI2RlZmluZSBJV19RVUFMX0xFVkVMX1VQREFURUQJMHgwMgorI2RlZmluZSBJV19RVUFMX05PSVNFX1VQREFURUQJMHgwNAorI2RlZmluZSBJV19RVUFMX0FMTF9VUERBVEVECTB4MDcKKyNkZWZpbmUgSVdfUVVBTF9EQk0JCTB4MDgJLyogTGV2ZWwgKyBOb2lzZSBhcmUgZEJtICovCisjZGVmaW5lIElXX1FVQUxfUVVBTF9JTlZBTElECTB4MTAJLyogRHJpdmVyIGRvZXNuJ3QgcHJvdmlkZSB2YWx1ZSAqLworI2RlZmluZSBJV19RVUFMX0xFVkVMX0lOVkFMSUQJMHgyMAorI2RlZmluZSBJV19RVUFMX05PSVNFX0lOVkFMSUQJMHg0MAorI2RlZmluZSBJV19RVUFMX1JDUEkJCTB4ODAJLyogTGV2ZWwgKyBOb2lzZSBhcmUgODAyLjExayBSQ1BJICovCisjZGVmaW5lIElXX1FVQUxfQUxMX0lOVkFMSUQJMHg3MAorCisvKiBGcmVxdWVuY3kgZmxhZ3MgKi8KKyNkZWZpbmUgSVdfRlJFUV9BVVRPCQkweDAwCS8qIExldCB0aGUgZHJpdmVyIGRlY2lkZXMgKi8KKyNkZWZpbmUgSVdfRlJFUV9GSVhFRAkJMHgwMQkvKiBGb3JjZSBhIHNwZWNpZmljIHZhbHVlICovCisKKy8qIE1heGltdW0gbnVtYmVyIG9mIHNpemUgb2YgZW5jb2RpbmcgdG9rZW4gYXZhaWxhYmxlCisgKiB0aGV5IGFyZSBsaXN0ZWQgaW4gdGhlIHJhbmdlIHN0cnVjdHVyZSAqLworI2RlZmluZSBJV19NQVhfRU5DT0RJTkdfU0laRVMJOAorCisvKiBNYXhpbXVtIHNpemUgb2YgdGhlIGVuY29kaW5nIHRva2VuIGluIGJ5dGVzICovCisjZGVmaW5lIElXX0VOQ09ESU5HX1RPS0VOX01BWAk2NAkvKiA1MTIgYml0cyAoZm9yIG5vdykgKi8KKworLyogRmxhZ3MgZm9yIGVuY29kaW5nIChhbG9uZyB3aXRoIHRoZSB0b2tlbikgKi8KKyNkZWZpbmUgSVdfRU5DT0RFX0lOREVYCQkweDAwRkYJLyogVG9rZW4gaW5kZXggKGlmIG5lZWRlZCkgKi8KKyNkZWZpbmUgSVdfRU5DT0RFX0ZMQUdTCQkweEZGMDAJLyogRmxhZ3MgZGVmaW5lZCBiZWxvdyAqLworI2RlZmluZSBJV19FTkNPREVfTU9ERQkJMHhGMDAwCS8qIE1vZGVzIGRlZmluZWQgYmVsb3cgKi8KKyNkZWZpbmUgSVdfRU5DT0RFX0RJU0FCTEVECTB4ODAwMAkvKiBFbmNvZGluZyBkaXNhYmxlZCAqLworI2RlZmluZSBJV19FTkNPREVfRU5BQkxFRAkweDAwMDAJLyogRW5jb2RpbmcgZW5hYmxlZCAqLworI2RlZmluZSBJV19FTkNPREVfUkVTVFJJQ1RFRAkweDQwMDAJLyogUmVmdXNlIG5vbi1lbmNvZGVkIHBhY2tldHMgKi8KKyNkZWZpbmUgSVdfRU5DT0RFX09QRU4JCTB4MjAwMAkvKiBBY2NlcHQgbm9uLWVuY29kZWQgcGFja2V0cyAqLworI2RlZmluZSBJV19FTkNPREVfTk9LRVkJCTB4MDgwMCAgLyogS2V5IGlzIHdyaXRlIG9ubHksIHNvIG5vdCBwcmVzZW50ICovCisjZGVmaW5lIElXX0VOQ09ERV9URU1QCQkweDA0MDAgIC8qIFRlbXBvcmFyeSBrZXkgKi8KKworLyogUG93ZXIgbWFuYWdlbWVudCBmbGFncyBhdmFpbGFibGUgKGFsb25nIHdpdGggdGhlIHZhbHVlLCBpZiBhbnkpICovCisjZGVmaW5lIElXX1BPV0VSX09OCQkweDAwMDAJLyogTm8gZGV0YWlscy4uLiAqLworI2RlZmluZSBJV19QT1dFUl9UWVBFCQkweEYwMDAJLyogVHlwZSBvZiBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgSVdfUE9XRVJfUEVSSU9ECQkweDEwMDAJLyogVmFsdWUgaXMgYSBwZXJpb2QvZHVyYXRpb24gb2YgICovCisjZGVmaW5lIElXX1BPV0VSX1RJTUVPVVQJMHgyMDAwCS8qIFZhbHVlIGlzIGEgdGltZW91dCAodG8gZ28gYXNsZWVwKSAqLworI2RlZmluZSBJV19QT1dFUl9NT0RFCQkweDBGMDAJLyogUG93ZXIgTWFuYWdlbWVudCBtb2RlICovCisjZGVmaW5lIElXX1BPV0VSX1VOSUNBU1RfUgkweDAxMDAJLyogUmVjZWl2ZSBvbmx5IHVuaWNhc3QgbWVzc2FnZXMgKi8KKyNkZWZpbmUgSVdfUE9XRVJfTVVMVElDQVNUX1IJMHgwMjAwCS8qIFJlY2VpdmUgb25seSBtdWx0aWNhc3QgbWVzc2FnZXMgKi8KKyNkZWZpbmUgSVdfUE9XRVJfQUxMX1IJCTB4MDMwMAkvKiBSZWNlaXZlIGFsbCBtZXNzYWdlcyB0aG91Z2ggUE0gKi8KKyNkZWZpbmUgSVdfUE9XRVJfRk9SQ0VfUwkweDA0MDAJLyogRm9yY2UgUE0gcHJvY2VkdXJlIGZvciBzZW5kaW5nIHVuaWNhc3QgKi8KKyNkZWZpbmUgSVdfUE9XRVJfUkVQRUFURVIJMHgwODAwCS8qIFJlcGVhdCBicm9hZGNhc3QgbWVzc2FnZXMgaW4gUE0gcGVyaW9kICovCisjZGVmaW5lIElXX1BPV0VSX01PRElGSUVSCTB4MDAwRgkvKiBNb2RpZnkgYSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgSVdfUE9XRVJfTUlOCQkweDAwMDEJLyogVmFsdWUgaXMgYSBtaW5pbXVtICAqLworI2RlZmluZSBJV19QT1dFUl9NQVgJCTB4MDAwMgkvKiBWYWx1ZSBpcyBhIG1heGltdW0gKi8KKyNkZWZpbmUgSVdfUE9XRVJfUkVMQVRJVkUJMHgwMDA0CS8qIFZhbHVlIGlzIG5vdCBpbiBzZWNvbmRzL21zL3VzICovCisKKy8qIFRyYW5zbWl0IFBvd2VyIGZsYWdzIGF2YWlsYWJsZSAqLworI2RlZmluZSBJV19UWFBPV19UWVBFCQkweDAwRkYJLyogVHlwZSBvZiB2YWx1ZSAqLworI2RlZmluZSBJV19UWFBPV19EQk0JCTB4MDAwMAkvKiBWYWx1ZSBpcyBpbiBkQm0gKi8KKyNkZWZpbmUgSVdfVFhQT1dfTVdBVFQJCTB4MDAwMQkvKiBWYWx1ZSBpcyBpbiBtVyAqLworI2RlZmluZSBJV19UWFBPV19SRUxBVElWRQkweDAwMDIJLyogVmFsdWUgaXMgaW4gYXJiaXRyYXJ5IHVuaXRzICovCisjZGVmaW5lIElXX1RYUE9XX1JBTkdFCQkweDEwMDAJLyogUmFuZ2Ugb2YgdmFsdWUgYmV0d2VlbiBtaW4vbWF4ICovCisKKy8qIFJldHJ5IGxpbWl0cyBhbmQgbGlmZXRpbWUgZmxhZ3MgYXZhaWxhYmxlICovCisjZGVmaW5lIElXX1JFVFJZX09OCQkweDAwMDAJLyogTm8gZGV0YWlscy4uLiAqLworI2RlZmluZSBJV19SRVRSWV9UWVBFCQkweEYwMDAJLyogVHlwZSBvZiBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgSVdfUkVUUllfTElNSVQJCTB4MTAwMAkvKiBNYXhpbXVtIG51bWJlciBvZiByZXRyaWVzKi8KKyNkZWZpbmUgSVdfUkVUUllfTElGRVRJTUUJMHgyMDAwCS8qIE1heGltdW0gZHVyYXRpb24gb2YgcmV0cmllcyBpbiB1cyAqLworI2RlZmluZSBJV19SRVRSWV9NT0RJRklFUgkweDAwRkYJLyogTW9kaWZ5IGEgcGFyYW1ldGVyICovCisjZGVmaW5lIElXX1JFVFJZX01JTgkJMHgwMDAxCS8qIFZhbHVlIGlzIGEgbWluaW11bSAgKi8KKyNkZWZpbmUgSVdfUkVUUllfTUFYCQkweDAwMDIJLyogVmFsdWUgaXMgYSBtYXhpbXVtICovCisjZGVmaW5lIElXX1JFVFJZX1JFTEFUSVZFCTB4MDAwNAkvKiBWYWx1ZSBpcyBub3QgaW4gc2Vjb25kcy9tcy91cyAqLworI2RlZmluZSBJV19SRVRSWV9TSE9SVAkJMHgwMDEwCS8qIFZhbHVlIGlzIGZvciBzaG9ydCBwYWNrZXRzICAqLworI2RlZmluZSBJV19SRVRSWV9MT05HCQkweDAwMjAJLyogVmFsdWUgaXMgZm9yIGxvbmcgcGFja2V0cyAqLworCisvKiBTY2FubmluZyByZXF1ZXN0IGZsYWdzICovCisjZGVmaW5lIElXX1NDQU5fREVGQVVMVAkJMHgwMDAwCS8qIERlZmF1bHQgc2NhbiBvZiB0aGUgZHJpdmVyICovCisjZGVmaW5lIElXX1NDQU5fQUxMX0VTU0lECTB4MDAwMQkvKiBTY2FuIGFsbCBFU1NJRHMgKi8KKyNkZWZpbmUgSVdfU0NBTl9USElTX0VTU0lECTB4MDAwMgkvKiBTY2FuIG9ubHkgdGhpcyBFU1NJRCAqLworI2RlZmluZSBJV19TQ0FOX0FMTF9GUkVRCTB4MDAwNAkvKiBTY2FuIGFsbCBGcmVxdWVuY2llcyAqLworI2RlZmluZSBJV19TQ0FOX1RISVNfRlJFUQkweDAwMDgJLyogU2NhbiBvbmx5IHRoaXMgRnJlcXVlbmN5ICovCisjZGVmaW5lIElXX1NDQU5fQUxMX01PREUJMHgwMDEwCS8qIFNjYW4gYWxsIE1vZGVzICovCisjZGVmaW5lIElXX1NDQU5fVEhJU19NT0RFCTB4MDAyMAkvKiBTY2FuIG9ubHkgdGhpcyBNb2RlICovCisjZGVmaW5lIElXX1NDQU5fQUxMX1JBVEUJMHgwMDQwCS8qIFNjYW4gYWxsIEJpdC1SYXRlcyAqLworI2RlZmluZSBJV19TQ0FOX1RISVNfUkFURQkweDAwODAJLyogU2NhbiBvbmx5IHRoaXMgQml0LVJhdGUgKi8KKy8qIHN0cnVjdCBpd19zY2FuX3JlcSBzY2FuX3R5cGUgKi8KKyNkZWZpbmUgSVdfU0NBTl9UWVBFX0FDVElWRSAwCisjZGVmaW5lIElXX1NDQU5fVFlQRV9QQVNTSVZFIDEKKy8qIE1heGltdW0gc2l6ZSBvZiByZXR1cm5lZCBkYXRhICovCisjZGVmaW5lIElXX1NDQU5fTUFYX0RBVEEJNDA5NgkvKiBJbiBieXRlcyAqLworCisvKiBTY2FuIGNhcGFiaWxpdHkgZmxhZ3MgLSBpbiAoc3RydWN0IGl3X3JhbmdlICopLT5zY2FuX2NhcGEgKi8KKyNkZWZpbmUgSVdfU0NBTl9DQVBBX05PTkUJCTB4MDAKKyNkZWZpbmUgSVdfU0NBTl9DQVBBX0VTU0lECQkweDAxCisjZGVmaW5lIElXX1NDQU5fQ0FQQV9CU1NJRAkJMHgwMgorI2RlZmluZSBJV19TQ0FOX0NBUEFfQ0hBTk5FTAkweDA0CisjZGVmaW5lIElXX1NDQU5fQ0FQQV9NT0RFCQkweDA4CisjZGVmaW5lIElXX1NDQU5fQ0FQQV9SQVRFCQkweDEwCisjZGVmaW5lIElXX1NDQU5fQ0FQQV9UWVBFCQkweDIwCisjZGVmaW5lIElXX1NDQU5fQ0FQQV9USU1FCQkweDQwCisKKy8qIE1heCBudW1iZXIgb2YgY2hhciBpbiBjdXN0b20gZXZlbnQgLSB1c2UgbXVsdGlwbGUgb2YgdGhlbSBpZiBuZWVkZWQgKi8KKyNkZWZpbmUgSVdfQ1VTVE9NX01BWAkJMjU2CS8qIEluIGJ5dGVzICovCisKKy8qIEdlbmVyaWMgaW5mb3JtYXRpb24gZWxlbWVudCAqLworI2RlZmluZSBJV19HRU5FUklDX0lFX01BWAkxMDI0CisKKy8qIE1MTUUgcmVxdWVzdHMgKFNJT0NTSVdNTE1FIC8gc3RydWN0IGl3X21sbWUpICovCisjZGVmaW5lIElXX01MTUVfREVBVVRICQkwCisjZGVmaW5lIElXX01MTUVfRElTQVNTT0MJMQorI2RlZmluZSBJV19NTE1FX0FVVEgJCTIKKyNkZWZpbmUgSVdfTUxNRV9BU1NPQwkJMworCisvKiBTSU9DU0lXQVVUSC9TSU9DR0lXQVVUSCBzdHJ1Y3QgaXdfcGFyYW0gZmxhZ3MgKi8KKyNkZWZpbmUgSVdfQVVUSF9JTkRFWAkJMHgwRkZGCisjZGVmaW5lIElXX0FVVEhfRkxBR1MJCTB4RjAwMAorLyogU0lPQ1NJV0FVVEgvU0lPQ0dJV0FVVEggcGFyYW1ldGVycyAoMCAuLiA0MDk1KQorICogKElXX0FVVEhfSU5ERVggbWFzayBpbiBzdHJ1Y3QgaXdfcGFyYW0gZmxhZ3M7IHRoaXMgaXMgdGhlIGluZGV4IG9mIHRoZQorICogcGFyYW1ldGVyIHRoYXQgaXMgYmVpbmcgc2V0L2dldCB0bzsgdmFsdWUgd2lsbCBiZSByZWFkL3dyaXR0ZW4gdG8KKyAqIHN0cnVjdCBpd19wYXJhbSB2YWx1ZSBmaWVsZCkgKi8KKyNkZWZpbmUgSVdfQVVUSF9XUEFfVkVSU0lPTgkJMAorI2RlZmluZSBJV19BVVRIX0NJUEhFUl9QQUlSV0lTRQkJMQorI2RlZmluZSBJV19BVVRIX0NJUEhFUl9HUk9VUAkJMgorI2RlZmluZSBJV19BVVRIX0tFWV9NR01UCQkzCisjZGVmaW5lIElXX0FVVEhfVEtJUF9DT1VOVEVSTUVBU1VSRVMJNAorI2RlZmluZSBJV19BVVRIX0RST1BfVU5FTkNSWVBURUQJNQorI2RlZmluZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHCQk2CisjZGVmaW5lIElXX0FVVEhfV1BBX0VOQUJMRUQJCTcKKyNkZWZpbmUgSVdfQVVUSF9SWF9VTkVOQ1JZUFRFRF9FQVBPTAk4CisjZGVmaW5lIElXX0FVVEhfUk9BTUlOR19DT05UUk9MCQk5CisjZGVmaW5lIElXX0FVVEhfUFJJVkFDWV9JTlZPS0VECQkxMAorI2RlZmluZSBJV19BVVRIX0NJUEhFUl9HUk9VUF9NR01UCTExCisjZGVmaW5lIElXX0FVVEhfTUZQCQkJMTIKKworLyogSVdfQVVUSF9XUEFfVkVSU0lPTiB2YWx1ZXMgKGJpdCBmaWVsZCkgKi8KKyNkZWZpbmUgSVdfQVVUSF9XUEFfVkVSU0lPTl9ESVNBQkxFRAkweDAwMDAwMDAxCisjZGVmaW5lIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBCQkweDAwMDAwMDAyCisjZGVmaW5lIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBMgkweDAwMDAwMDA0CisKKy8qIElXX0FVVEhfUEFJUldJU0VfQ0lQSEVSLCBJV19BVVRIX0dST1VQX0NJUEhFUiwgYW5kIElXX0FVVEhfQ0lQSEVSX0dST1VQX01HTVQKKyAqIHZhbHVlcyAoYml0IGZpZWxkKSAqLworI2RlZmluZSBJV19BVVRIX0NJUEhFUl9OT05FCTB4MDAwMDAwMDEKKyNkZWZpbmUgSVdfQVVUSF9DSVBIRVJfV0VQNDAJMHgwMDAwMDAwMgorI2RlZmluZSBJV19BVVRIX0NJUEhFUl9US0lQCTB4MDAwMDAwMDQKKyNkZWZpbmUgSVdfQVVUSF9DSVBIRVJfQ0NNUAkweDAwMDAwMDA4CisjZGVmaW5lIElXX0FVVEhfQ0lQSEVSX1dFUDEwNAkweDAwMDAwMDEwCisjZGVmaW5lIElXX0FVVEhfQ0lQSEVSX0FFU19DTUFDCTB4MDAwMDAwMjAKKworLyogSVdfQVVUSF9LRVlfTUdNVCB2YWx1ZXMgKGJpdCBmaWVsZCkgKi8KKyNkZWZpbmUgSVdfQVVUSF9LRVlfTUdNVF84MDJfMVgJMQorI2RlZmluZSBJV19BVVRIX0tFWV9NR01UX1BTSwkyCisKKy8qIElXX0FVVEhfODAyMTFfQVVUSF9BTEcgdmFsdWVzIChiaXQgZmllbGQpICovCisjZGVmaW5lIElXX0FVVEhfQUxHX09QRU5fU1lTVEVNCTB4MDAwMDAwMDEKKyNkZWZpbmUgSVdfQVVUSF9BTEdfU0hBUkVEX0tFWQkweDAwMDAwMDAyCisjZGVmaW5lIElXX0FVVEhfQUxHX0xFQVAJMHgwMDAwMDAwNAorCisvKiBJV19BVVRIX1JPQU1JTkdfQ09OVFJPTCB2YWx1ZXMgKi8KKyNkZWZpbmUgSVdfQVVUSF9ST0FNSU5HX0VOQUJMRQkwCS8qIGRyaXZlci9maXJtd2FyZSBiYXNlZCByb2FtaW5nICovCisjZGVmaW5lIElXX0FVVEhfUk9BTUlOR19ESVNBQkxFCTEJLyogdXNlciBzcGFjZSBwcm9ncmFtIHVzZWQgZm9yIHJvYW1pbmcKKwkJCQkJICogY29udHJvbCAqLworCisvKiBJV19BVVRIX01GUCAobWFuYWdlbWVudCBmcmFtZSBwcm90ZWN0aW9uKSB2YWx1ZXMgKi8KKyNkZWZpbmUgSVdfQVVUSF9NRlBfRElTQUJMRUQJMAkvKiBNRlAgZGlzYWJsZWQgKi8KKyNkZWZpbmUgSVdfQVVUSF9NRlBfT1BUSU9OQUwJMQkvKiBNRlAgb3B0aW9uYWwgKi8KKyNkZWZpbmUgSVdfQVVUSF9NRlBfUkVRVUlSRUQJMgkvKiBNRlAgcmVxdWlyZWQgKi8KKworLyogU0lPQ1NJV0VOQ09ERUVYVCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBJV19FTkNPREVfU0VRX01BWF9TSVpFCTgKKy8qIHN0cnVjdCBpd19lbmNvZGVfZXh0IC0+YWxnICovCisjZGVmaW5lIElXX0VOQ09ERV9BTEdfTk9ORQkwCisjZGVmaW5lIElXX0VOQ09ERV9BTEdfV0VQCTEKKyNkZWZpbmUgSVdfRU5DT0RFX0FMR19US0lQCTIKKyNkZWZpbmUgSVdfRU5DT0RFX0FMR19DQ01QCTMKKyNkZWZpbmUgSVdfRU5DT0RFX0FMR19QTUsJNAorI2RlZmluZSBJV19FTkNPREVfQUxHX0FFU19DTUFDCTUKKy8qIHN0cnVjdCBpd19lbmNvZGVfZXh0IC0+ZXh0X2ZsYWdzICovCisjZGVmaW5lIElXX0VOQ09ERV9FWFRfVFhfU0VRX1ZBTElECTB4MDAwMDAwMDEKKyNkZWZpbmUgSVdfRU5DT0RFX0VYVF9SWF9TRVFfVkFMSUQJMHgwMDAwMDAwMgorI2RlZmluZSBJV19FTkNPREVfRVhUX0dST1VQX0tFWQkJMHgwMDAwMDAwNAorI2RlZmluZSBJV19FTkNPREVfRVhUX1NFVF9UWF9LRVkJMHgwMDAwMDAwOAorCisvKiBJV0VWTUlDSEFFTE1JQ0ZBSUxVUkUgOiBzdHJ1Y3QgaXdfbWljaGFlbG1pY2ZhaWx1cmUgLT5mbGFncyAqLworI2RlZmluZSBJV19NSUNGQUlMVVJFX0tFWV9JRAkweDAwMDAwMDAzIC8qIEtleSBJRCAwLi4zICovCisjZGVmaW5lIElXX01JQ0ZBSUxVUkVfR1JPVVAJMHgwMDAwMDAwNAorI2RlZmluZSBJV19NSUNGQUlMVVJFX1BBSVJXSVNFCTB4MDAwMDAwMDgKKyNkZWZpbmUgSVdfTUlDRkFJTFVSRV9TVEFLRVkJMHgwMDAwMDAxMAorI2RlZmluZSBJV19NSUNGQUlMVVJFX0NPVU5UCTB4MDAwMDAwNjAgLyogMSBvciAyICgwID0gY291bnQgbm90IHN1cHBvcnRlZCkKKwkJCQkJICAgICovCisKKy8qIEJpdCBmaWVsZCB2YWx1ZXMgZm9yIGVuY19jYXBhIGluIHN0cnVjdCBpd19yYW5nZSAqLworI2RlZmluZSBJV19FTkNfQ0FQQV9XUEEJCTB4MDAwMDAwMDEKKyNkZWZpbmUgSVdfRU5DX0NBUEFfV1BBMgkweDAwMDAwMDAyCisjZGVmaW5lIElXX0VOQ19DQVBBX0NJUEhFUl9US0lQCTB4MDAwMDAwMDQKKyNkZWZpbmUgSVdfRU5DX0NBUEFfQ0lQSEVSX0NDTVAJMHgwMDAwMDAwOAorI2RlZmluZSBJV19FTkNfQ0FQQV80V0FZX0hBTkRTSEFLRQkweDAwMDAwMDEwCisKKy8qIEV2ZW50IGNhcGFiaWxpdHkgbWFjcm9zIC0gaW4gKHN0cnVjdCBpd19yYW5nZSAqKS0+ZXZlbnRfY2FwYQorICogQmVjYXVzZSB3ZSBoYXZlIG1vcmUgdGhhbiAzMiBwb3NzaWJsZSBldmVudHMsIHdlIHVzZSBhbiBhcnJheSBvZgorICogMzIgYml0IGJpdG1hc2tzLiBOb3RlIDogMzIgYml0cyA9IDB4MjAgPSAyXjUuICovCisjZGVmaW5lIElXX0VWRU5UX0NBUEFfQkFTRShjbWQpCQkoKGNtZCA+PSBTSU9DSVdGSVJTVFBSSVYpID8gXAorCQkJCQkgKGNtZCAtIFNJT0NJV0ZJUlNUUFJJViArIDB4NjApIDogXAorCQkJCQkgKGNtZCAtIFNJT0NJV0ZJUlNUKSkKKyNkZWZpbmUgSVdfRVZFTlRfQ0FQQV9JTkRFWChjbWQpCShJV19FVkVOVF9DQVBBX0JBU0UoY21kKSA+PiA1KQorI2RlZmluZSBJV19FVkVOVF9DQVBBX01BU0soY21kKQkJKDEgPDwgKElXX0VWRU5UX0NBUEFfQkFTRShjbWQpICYgMHgxRikpCisvKiBFdmVudCBjYXBhYmlsaXR5IGNvbnN0YW50cyAtIGV2ZW50IGF1dG9nZW5lcmF0ZWQgYnkgdGhlIGtlcm5lbAorICogVGhpcyBsaXN0IGlzIHZhbGlkIGZvciBtb3N0IDgwMi4xMSBkZXZpY2VzLCBjdXN0b21pc2UgYXMgbmVlZGVkLi4uICovCisjZGVmaW5lIElXX0VWRU5UX0NBUEFfS18wCShJV19FVkVOVF9DQVBBX01BU0soMHg4QjA0KSB8IFwKKwkJCQkgSVdfRVZFTlRfQ0FQQV9NQVNLKDB4OEIwNikgfCBcCisJCQkJIElXX0VWRU5UX0NBUEFfTUFTSygweDhCMUEpKQorI2RlZmluZSBJV19FVkVOVF9DQVBBX0tfMQkoSVdfRVZFTlRfQ0FQQV9NQVNLKDB4OEIyQSkpCisvKiAiRWFzeSIgbWFjcm8gdG8gc2V0IGV2ZW50cyBpbiBpd19yYW5nZSAobGVzcyBlZmZpY2llbnQpICovCisjZGVmaW5lIElXX0VWRU5UX0NBUEFfU0VUKGV2ZW50X2NhcGEsIGNtZCkgKGV2ZW50X2NhcGFbSVdfRVZFTlRfQ0FQQV9JTkRFWChjbWQpXSB8PSBJV19FVkVOVF9DQVBBX01BU0soY21kKSkKKyNkZWZpbmUgSVdfRVZFTlRfQ0FQQV9TRVRfS0VSTkVMKGV2ZW50X2NhcGEpIHtldmVudF9jYXBhWzBdIHw9IElXX0VWRU5UX0NBUEFfS18wOyBldmVudF9jYXBhWzFdIHw9IElXX0VWRU5UX0NBUEFfS18xOyB9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBUWVBFUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTVUJUWVBFUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qCisgKglHZW5lcmljIGZvcm1hdCBmb3IgbW9zdCBwYXJhbWV0ZXJzIHRoYXQgZml0IGluIGFuIGludAorICovCitzdHJ1Y3QJaXdfcGFyYW0KK3sKKyAgX19zMzIJCXZhbHVlOwkJLyogVGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIgaXRzZWxmICovCisgIF9fdTgJCWZpeGVkOwkJLyogSGFyZHdhcmUgc2hvdWxkIG5vdCB1c2UgYXV0byBzZWxlY3QgKi8KKyAgX191OAkJZGlzYWJsZWQ7CS8qIERpc2FibGUgdGhlIGZlYXR1cmUgKi8KKyAgX191MTYJCWZsYWdzOwkJLyogVmFyaW91cyBzcGVjaWZjIGZsYWdzIChpZiBhbnkpICovCit9OworCisvKgorICoJRm9yIGFsbCBkYXRhIGxhcmdlciB0aGFuIDE2IG9jdGV0cywgd2UgbmVlZCB0byB1c2UgYQorICoJcG9pbnRlciB0byBtZW1vcnkgYWxsb2NhdGVkIGluIHVzZXIgc3BhY2UuCisgKi8KK3N0cnVjdAlpd19wb2ludAoreworICB2b2lkICpwb2ludGVyOwkvKiBQb2ludGVyIHRvIHRoZSBkYXRhICAoaW4gdXNlciBzcGFjZSkgKi8KKyAgX191MTYJCWxlbmd0aDsJCS8qIG51bWJlciBvZiBmaWVsZHMgb3Igc2l6ZSBpbiBieXRlcyAqLworICBfX3UxNgkJZmxhZ3M7CQkvKiBPcHRpb25hbCBwYXJhbXMgKi8KK307CisKKworLyoKKyAqCUEgZnJlcXVlbmN5CisgKglGb3IgbnVtYmVycyBsb3dlciB0aGFuIDEwXjksIHdlIGVuY29kZSB0aGUgbnVtYmVyIGluICdtJyBhbmQKKyAqCXNldCAnZScgdG8gMAorICoJRm9yIG51bWJlciBncmVhdGVyIHRoYW4gMTBeOSwgd2UgZGl2aWRlIGl0IGJ5IHRoZSBsb3dlc3QgcG93ZXIKKyAqCW9mIDEwIHRvIGdldCAnbScgbG93ZXIgdGhhbiAxMF45LCB3aXRoICdtJz0gZiAvICgxMF4nZScpLi4uCisgKglUaGUgcG93ZXIgb2YgMTAgaXMgaW4gJ2UnLCB0aGUgcmVzdWx0IG9mIHRoZSBkaXZpc2lvbiBpcyBpbiAnbScuCisgKi8KK3N0cnVjdAlpd19mcmVxCit7CisJX19zMzIJCW07CQkvKiBNYW50aXNzYSAqLworCV9fczE2CQllOwkJLyogRXhwb25lbnQgKi8KKwlfX3U4CQlpOwkJLyogTGlzdCBpbmRleCAod2hlbiBpbiByYW5nZSBzdHJ1Y3QpICovCisJX191OAkJZmxhZ3M7CQkvKiBGbGFncyAoZml4ZWQvYXV0bykgKi8KK307CisKKy8qCisgKglRdWFsaXR5IG9mIHRoZSBsaW5rCisgKi8KK3N0cnVjdAlpd19xdWFsaXR5Cit7CisJX191OAkJcXVhbDsJCS8qIGxpbmsgcXVhbGl0eSAoJXJldHJpZXMsIFNOUiwKKwkJCQkJICAgJW1pc3NlZCBiZWFjb25zIG9yIGJldHRlci4uLikgKi8KKwlfX3U4CQlsZXZlbDsJCS8qIHNpZ25hbCBsZXZlbCAoZEJtKSAqLworCV9fdTgJCW5vaXNlOwkJLyogbm9pc2UgbGV2ZWwgKGRCbSkgKi8KKwlfX3U4CQl1cGRhdGVkOwkvKiBGbGFncyB0byBrbm93IGlmIHVwZGF0ZWQgKi8KK307CisKKy8qCisgKglQYWNrZXQgZGlzY2FyZGVkIGluIHRoZSB3aXJlbGVzcyBhZGFwdGVyIGR1ZSB0bworICoJIndpcmVsZXNzIiBzcGVjaWZpYyBwcm9ibGVtcy4uLgorICoJTm90ZSA6IHRoZSBsaXN0IG9mIGNvdW50ZXIgYW5kIHN0YXRpc3RpY3MgaW4gbmV0X2RldmljZV9zdGF0cworICoJaXMgYWxyZWFkeSBwcmV0dHkgZXhoYXVzdGl2ZSwgYW5kIHlvdSBzaG91bGQgdXNlIHRoYXQgZmlyc3QuCisgKglUaGlzIGlzIG9ubHkgYWRkaXRpb25hbCBzdGF0cy4uLgorICovCitzdHJ1Y3QJaXdfZGlzY2FyZGVkCit7CisJX191MzIJCW53aWQ7CQkvKiBSeCA6IFdyb25nIG53aWQvZXNzaWQgKi8KKwlfX3UzMgkJY29kZTsJCS8qIFJ4IDogVW5hYmxlIHRvIGNvZGUvZGVjb2RlIChXRVApICovCisJX191MzIJCWZyYWdtZW50OwkvKiBSeCA6IENhbid0IHBlcmZvcm0gTUFDIHJlYXNzZW1ibHkgKi8KKwlfX3UzMgkJcmV0cmllczsJLyogVHggOiBNYXggTUFDIHJldHJpZXMgbnVtIHJlYWNoZWQgKi8KKwlfX3UzMgkJbWlzYzsJCS8qIE90aGVycyBjYXNlcyAqLworfTsKKworLyoKKyAqCVBhY2tldC9UaW1lIHBlcmlvZCBtaXNzZWQgaW4gdGhlIHdpcmVsZXNzIGFkYXB0ZXIgZHVlIHRvCisgKgkid2lyZWxlc3MiIHNwZWNpZmljIHByb2JsZW1zLi4uCisgKi8KK3N0cnVjdAlpd19taXNzZWQKK3sKKwlfX3UzMgkJYmVhY29uOwkJLyogTWlzc2VkIGJlYWNvbnMvc3VwZXJmcmFtZSAqLworfTsKKworLyoKKyAqCVF1YWxpdHkgcmFuZ2UgKGZvciBzcHkgdGhyZXNob2xkKQorICovCitzdHJ1Y3QJaXdfdGhyc3B5Cit7CisJc3RydWN0IHNvY2thZGRyCQlhZGRyOwkJLyogU291cmNlIGFkZHJlc3MgKGh3L21hYykgKi8KKwlzdHJ1Y3QgaXdfcXVhbGl0eQlxdWFsOwkJLyogUXVhbGl0eSBvZiB0aGUgbGluayAqLworCXN0cnVjdCBpd19xdWFsaXR5CWxvdzsJCS8qIExvdyB0aHJlc2hvbGQgKi8KKwlzdHJ1Y3QgaXdfcXVhbGl0eQloaWdoOwkJLyogSGlnaCB0aHJlc2hvbGQgKi8KK307CisKKy8qCisgKglPcHRpb25hbCBkYXRhIGZvciBzY2FuIHJlcXVlc3QKKyAqCisgKglOb3RlOiB0aGVzZSBvcHRpb25hbCBwYXJhbWV0ZXJzIGFyZSBjb250cm9sbGluZyBwYXJhbWV0ZXJzIGZvciB0aGUKKyAqCXNjYW5uaW5nIGJlaGF2aW9yLCB0aGVzZSBkbyBub3QgYXBwbHkgdG8gZ2V0dGluZyBzY2FuIHJlc3VsdHMKKyAqCShTSU9DR0lXU0NBTikuIERyaXZlcnMgYXJlIGV4cGVjdGVkIHRvIGtlZXAgYSBsb2NhbCBCU1MgdGFibGUgYW5kCisgKglwcm92aWRlIGEgbWVyZ2VkIHJlc3VsdHMgd2l0aCBhbGwgQlNTZXMgZXZlbiBpZiB0aGUgcHJldmlvdXMgc2NhbgorICoJcmVxdWVzdCBsaW1pdGVkIHNjYW5uaW5nIHRvIGEgc3Vic2V0LCBlLmcuLCBieSBzcGVjaWZ5aW5nIGFuIFNTSUQuCisgKglFc3BlY2lhbGx5LCBzY2FuIHJlc3VsdHMgYXJlIHJlcXVpcmVkIHRvIGluY2x1ZGUgYW4gZW50cnkgZm9yIHRoZQorICoJY3VycmVudCBCU1MgaWYgdGhlIGRyaXZlciBpcyBpbiBNYW5hZ2VkIG1vZGUgYW5kIGFzc29jaWF0ZWQgd2l0aCBhbiBBUC4KKyAqLworc3RydWN0CWl3X3NjYW5fcmVxCit7CisJX191OAkJc2Nhbl90eXBlOyAvKiBJV19TQ0FOX1RZUEVfe0FDVElWRSxQQVNTSVZFfSAqLworCV9fdTgJCWVzc2lkX2xlbjsKKwlfX3U4CQludW1fY2hhbm5lbHM7IC8qIG51bSBlbnRyaWVzIGluIGNoYW5uZWxfbGlzdDsKKwkJCQkgICAgICAgKiAwID0gc2NhbiBhbGwgYWxsb3dlZCBjaGFubmVscyAqLworCV9fdTgJCWZsYWdzOyAvKiByZXNlcnZlZCBhcyBwYWRkaW5nOyB1c2UgemVybywgdGhpcyBtYXkKKwkJCQkqIGJlIHVzZWQgaW4gdGhlIGZ1dHVyZSBmb3IgYWRkaW5nIGZsYWdzCisJCQkJKiB0byByZXF1ZXN0IGRpZmZlcmVudCBzY2FuIGJlaGF2aW9yICovCisJc3RydWN0IHNvY2thZGRyCWJzc2lkOyAvKiBmZjpmZjpmZjpmZjpmZjpmZiBmb3IgYnJvYWRjYXN0IEJTU0lEIG9yCisJCQkJKiBpbmRpdmlkdWFsIGFkZHJlc3Mgb2YgYSBzcGVjaWZpYyBCU1MgKi8KKworCS8qCisJICogVXNlIHRoaXMgRVNTSUQgaWYgSVdfU0NBTl9USElTX0VTU0lEIGZsYWcgaXMgdXNlZCBpbnN0ZWFkIG9mIHVzaW5nCisJICogdGhlIGN1cnJlbnQgRVNTSUQuIFRoaXMgYWxsb3dzIHNjYW4gcmVxdWVzdHMgZm9yIHNwZWNpZmljIEVTU0lECisJICogd2l0aG91dCBoYXZpbmcgdG8gY2hhbmdlIHRoZSBjdXJyZW50IEVTU0lEIGFuZCBwb3RlbnRpYWxseSBicmVha2luZworCSAqIHRoZSBjdXJyZW50IGFzc29jaWF0aW9uLgorCSAqLworCV9fdTgJCWVzc2lkW0lXX0VTU0lEX01BWF9TSVpFXTsKKworCS8qCisJICogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgY2hhbmdpbmcgdGhlIGRlZmF1bHQgc2Nhbm5pbmcgYmVoYXZpb3IuCisJICogVGhlc2UgYXJlIGJhc2VkIG9uIHRoZSBNTE1FLVNDQU4ucmVxdWVzdCBmcm9tIElFRUUgU3RkIDgwMi4xMS4KKwkgKiBUVSBpcyAxLjAyNCBtcy4gSWYgdGhlc2UgYXJlIHNldCB0byAwLCBkcml2ZXIgaXMgZXhwZWN0ZWQgdG8gdXNlCisJICogcmVhc29uYWJsZSBkZWZhdWx0IHZhbHVlcy4gbWluX2NoYW5uZWxfdGltZSBkZWZpbmVzIHRoZSB0aW1lIHRoYXQKKwkgKiB3aWxsIGJlIHVzZWQgdG8gd2FpdCBmb3IgdGhlIGZpcnN0IHJlcGx5IG9uIGVhY2ggY2hhbm5lbC4gSWYgbm8KKwkgKiByZXBsaWVzIGFyZSByZWNlaXZlZCwgbmV4dCBjaGFubmVsIHdpbGwgYmUgc2Nhbm5lZCBhZnRlciB0aGlzLiBJZgorCSAqIHJlcGxpZXMgYXJlIHJlY2VpdmVkLCB0b3RhbCB0aW1lIHdhaXRlZCBvbiB0aGUgY2hhbm5lbCBpcyBkZWZpbmVkIGJ5CisJICogbWF4X2NoYW5uZWxfdGltZS4KKwkgKi8KKwlfX3UzMgkJbWluX2NoYW5uZWxfdGltZTsgLyogaW4gVFUgKi8KKwlfX3UzMgkJbWF4X2NoYW5uZWxfdGltZTsgLyogaW4gVFUgKi8KKworCXN0cnVjdCBpd19mcmVxCWNoYW5uZWxfbGlzdFtJV19NQVhfRlJFUVVFTkNJRVNdOworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXUEEgU1VQUE9SVCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKglFeHRlbmRlZCBkYXRhIHN0cnVjdHVyZSBmb3IgZ2V0L3NldCBlbmNvZGluZyAodGhpcyBpcyB1c2VkIHdpdGgKKyAqCVNJT0NTSVdFTkNPREVFWFQvU0lPQ0dJV0VOQ09ERUVYVC4gc3RydWN0IGl3X3BvaW50IGFuZCBJV19FTkNPREVfKgorICoJZmxhZ3MgYXJlIHVzZWQgaW4gdGhlIHNhbWUgd2F5IGFzIHdpdGggU0lPQ1NJV0VOQ09ERS9TSU9DR0lXRU5DT0RFIGFuZAorICoJb25seSB0aGUgZGF0YSBjb250ZW50cyBjaGFuZ2VzIChrZXkgZGF0YSAtPiB0aGlzIHN0cnVjdHVyZSwgaW5jbHVkaW5nCisgKglrZXkgZGF0YSkuCisgKgorICoJSWYgdGhlIG5ldyBrZXkgaXMgdGhlIGZpcnN0IGdyb3VwIGtleSwgaXQgd2lsbCBiZSBzZXQgYXMgdGhlIGRlZmF1bHQKKyAqCVRYIGtleS4gT3RoZXJ3aXNlLCBkZWZhdWx0IFRYIGtleSBpbmRleCBpcyBvbmx5IGNoYW5nZWQgaWYKKyAqCUlXX0VOQ09ERV9FWFRfU0VUX1RYX0tFWSBmbGFnIGlzIHNldC4KKyAqCisgKglLZXkgd2lsbCBiZSBjaGFuZ2VkIHdpdGggU0lPQ1NJV0VOQ09ERUVYVCBpbiBhbGwgY2FzZXMgZXhjZXB0IGZvcgorICoJc3BlY2lhbCAiY2hhbmdlIFRYIGtleSBpbmRleCIgb3BlcmF0aW9uIHdoaWNoIGlzIGluZGljYXRlZCBieSBzZXR0aW5nCisgKglrZXlfbGVuID0gMCBhbmQgZXh0X2ZsYWdzIHw9IElXX0VOQ09ERV9FWFRfU0VUX1RYX0tFWS4KKyAqCisgKgl0eF9zZXEvcnhfc2VxIGFyZSBvbmx5IHVzZWQgd2hlbiByZXNwZWN0aXZlCisgKglJV19FTkNPREVfRVhUX3tUWCxSWH1fU0VRX1ZBTElEIGZsYWcgaXMgc2V0IGluIGV4dF9mbGFncy4gTm9ybWFsCisgKglUS0lQL0NDTVAgb3BlcmF0aW9uIGlzIHRvIHNldCBSWCBzZXEgd2l0aCBTSU9DU0lXRU5DT0RFRVhUIGFuZCBzdGFydAorICoJVFggc2VxIGZyb20gemVybyB3aGVuZXZlciBrZXkgaXMgY2hhbmdlZC4gU0lPQ0dJV0VOQ09ERUVYVCBpcyBub3JtYWxseQorICoJdXNlZCBvbmx5IGJ5IGFuIEF1dGhlbnRpY2F0b3IgKEFQIG9yIGFuIElCU1Mgc3RhdGlvbikgdG8gZ2V0IHRoZQorICoJY3VycmVudCBUWCBzZXF1ZW5jZSBudW1iZXIuIFVzaW5nIFRYX1NFUV9WQUxJRCBmb3IgU0lPQ1NJV0VOQ09ERUVYVCBhbmQKKyAqCVJYX1NFUV9WQUxJRCBmb3IgU0lPQ0dJV0VOQ09ERUVYVCBhcmUgb3B0aW9uYWwsIGJ1dCBjYW4gYmUgdXNlZnVsIGZvcgorICoJZGVidWdnaW5nL3Rlc3RpbmcuCisgKi8KK3N0cnVjdAlpd19lbmNvZGVfZXh0Cit7CisJX191MzIJCWV4dF9mbGFnczsgLyogSVdfRU5DT0RFX0VYVF8qICovCisJX191OAkJdHhfc2VxW0lXX0VOQ09ERV9TRVFfTUFYX1NJWkVdOyAvKiBMU0IgZmlyc3QgKi8KKwlfX3U4CQlyeF9zZXFbSVdfRU5DT0RFX1NFUV9NQVhfU0laRV07IC8qIExTQiBmaXJzdCAqLworCXN0cnVjdCBzb2NrYWRkcglhZGRyOyAvKiBmZjpmZjpmZjpmZjpmZjpmZiBmb3IgYnJvYWRjYXN0L211bHRpY2FzdAorCQkJICAgICAgICogKGdyb3VwKSBrZXlzIG9yIHVuaWNhc3QgYWRkcmVzcyBmb3IKKwkJCSAgICAgICAqIGluZGl2aWR1YWwga2V5cyAqLworCV9fdTE2CQlhbGc7IC8qIElXX0VOQ09ERV9BTEdfKiAqLworCV9fdTE2CQlrZXlfbGVuOworCV9fdTgJCWtleVswXTsKK307CisKKy8qIFNJT0NTSVdNTE1FIGRhdGEgKi8KK3N0cnVjdAlpd19tbG1lCit7CisJX191MTYJCWNtZDsgLyogSVdfTUxNRV8qICovCisJX191MTYJCXJlYXNvbl9jb2RlOworCXN0cnVjdCBzb2NrYWRkcglhZGRyOworfTsKKworLyogU0lPQ1NJV1BNS1NBIGRhdGEgKi8KKyNkZWZpbmUgSVdfUE1LU0FfQURECQkxCisjZGVmaW5lIElXX1BNS1NBX1JFTU9WRQkJMgorI2RlZmluZSBJV19QTUtTQV9GTFVTSAkJMworCisjZGVmaW5lIElXX1BNS0lEX0xFTgkxNgorCitzdHJ1Y3QJaXdfcG1rc2EKK3sKKwlfX3UzMgkJY21kOyAvKiBJV19QTUtTQV8qICovCisJc3RydWN0IHNvY2thZGRyCWJzc2lkOworCV9fdTgJCXBta2lkW0lXX1BNS0lEX0xFTl07Cit9OworCisvKiBJV0VWTUlDSEFFTE1JQ0ZBSUxVUkUgZGF0YSAqLworc3RydWN0CWl3X21pY2hhZWxtaWNmYWlsdXJlCit7CisJX191MzIJCWZsYWdzOworCXN0cnVjdCBzb2NrYWRkcglzcmNfYWRkcjsKKwlfX3U4CQl0c2NbSVdfRU5DT0RFX1NFUV9NQVhfU0laRV07IC8qIExTQiBmaXJzdCAqLworfTsKKworLyogSVdFVlBNS0lEQ0FORCBkYXRhICovCisjZGVmaW5lIElXX1BNS0lEX0NBTkRfUFJFQVVUSAkweDAwMDAwMDAxIC8qIFJOUyBwcmUtYXV0aGVudGljYXRpb24gZW5hYmxlZCAqLworc3RydWN0CWl3X3Bta2lkX2NhbmQKK3sKKwlfX3UzMgkJZmxhZ3M7IC8qIElXX1BNS0lEX0NBTkRfKiAqLworCV9fdTMyCQlpbmRleDsgLyogdGhlIHNtYWxsZXIgdGhlIGluZGV4LCB0aGUgaGlnaGVyIHRoZQorCQkJCSogcHJpb3JpdHkgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIJYnNzaWQ7Cit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV0lSRUxFU1MgU1RBVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogV2lyZWxlc3Mgc3RhdGlzdGljcyAodXNlZCBmb3IgL3Byb2MvbmV0L3dpcmVsZXNzKQorICovCitzdHJ1Y3QJaXdfc3RhdGlzdGljcworeworCV9fdTE2CQlzdGF0dXM7CQkvKiBTdGF0dXMKKwkJCQkJICogLSBkZXZpY2UgZGVwZW5kZW50IGZvciBub3cgKi8KKworCXN0cnVjdCBpd19xdWFsaXR5CXF1YWw7CQkvKiBRdWFsaXR5IG9mIHRoZSBsaW5rCisJCQkJCQkgKiAoaW5zdGFudC9tZWFuL21heCkgKi8KKwlzdHJ1Y3QgaXdfZGlzY2FyZGVkCWRpc2NhcmQ7CS8qIFBhY2tldCBkaXNjYXJkZWQgY291bnRzICovCisJc3RydWN0IGl3X21pc3NlZAltaXNzOwkJLyogUGFja2V0IG1pc3NlZCBjb3VudHMgKi8KK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJT0NUTCBSRVFVRVNUIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgdGhlIHBheWxvYWQgb2YgYW4gaW9jdGwsIGFuZCBpcyB1c2VkIAorICogYmVsb3cuCisgKgorICogTm90ZSB0aGF0IHRoaXMgc3RydWN0dXJlIHNob3VsZCBmaXQgb24gdGhlIG1lbW9yeSBmb290cHJpbnQKKyAqIG9mIGl3cmVxICh3aGljaCBpcyB0aGUgc2FtZSBhcyBpZnJlcSksIHdoaWNoIG1lYW4gYSBtYXggc2l6ZSBvZgorICogMTYgb2N0ZXRzID0gMTI4IGJpdHMuIFdhcm5pbmcsIHBvaW50ZXJzIG1pZ2h0IGJlIDY0IGJpdHMgd2lkZS4uLgorICogWW91IHNob3VsZCBjaGVjayB0aGlzIHdoZW4gaW5jcmVhc2luZyB0aGUgc3RydWN0dXJlcyBkZWZpbmVkCisgKiBhYm92ZSBpbiB0aGlzIGZpbGUuLi4KKyAqLwordW5pb24JaXdyZXFfZGF0YQoreworCS8qIENvbmZpZyAtIGdlbmVyaWMgKi8KKwljaGFyCQluYW1lW0lGTkFNU0laXTsKKwkvKiBOYW1lIDogdXNlZCB0byB2ZXJpZnkgdGhlIHByZXNlbmNlIG9mICB3aXJlbGVzcyBleHRlbnNpb25zLgorCSAqIE5hbWUgb2YgdGhlIHByb3RvY29sL3Byb3ZpZGVyLi4uICovCisKKwlzdHJ1Y3QgaXdfcG9pbnQJZXNzaWQ7CQkvKiBFeHRlbmRlZCBuZXR3b3JrIG5hbWUgKi8KKwlzdHJ1Y3QgaXdfcGFyYW0JbndpZDsJCS8qIG5ldHdvcmsgaWQgKG9yIGRvbWFpbiAtIHRoZSBjZWxsKSAqLworCXN0cnVjdCBpd19mcmVxCWZyZXE7CQkvKiBmcmVxdWVuY3kgb3IgY2hhbm5lbCA6CisJCQkJCSAqIDAtMTAwMCA9IGNoYW5uZWwKKwkJCQkJICogPiAxMDAwID0gZnJlcXVlbmN5IGluIEh6ICovCisKKwlzdHJ1Y3QgaXdfcGFyYW0Jc2VuczsJCS8qIHNpZ25hbCBsZXZlbCB0aHJlc2hvbGQgKi8KKwlzdHJ1Y3QgaXdfcGFyYW0JYml0cmF0ZTsJLyogZGVmYXVsdCBiaXQgcmF0ZSAqLworCXN0cnVjdCBpd19wYXJhbQl0eHBvd2VyOwkvKiBkZWZhdWx0IHRyYW5zbWl0IHBvd2VyICovCisJc3RydWN0IGl3X3BhcmFtCXJ0czsJCS8qIFJUUyB0aHJlc2hvbGQgdGhyZXNob2xkICovCisJc3RydWN0IGl3X3BhcmFtCWZyYWc7CQkvKiBGcmFnbWVudGF0aW9uIHRocmVzaG9sZCAqLworCV9fdTMyCQltb2RlOwkJLyogT3BlcmF0aW9uIG1vZGUgKi8KKwlzdHJ1Y3QgaXdfcGFyYW0JcmV0cnk7CQkvKiBSZXRyeSBsaW1pdHMgJiBsaWZldGltZSAqLworCisJc3RydWN0IGl3X3BvaW50CWVuY29kaW5nOwkvKiBFbmNvZGluZyBzdHVmZiA6IHRva2VucyAqLworCXN0cnVjdCBpd19wYXJhbQlwb3dlcjsJCS8qIFBNIGR1cmF0aW9uL3RpbWVvdXQgKi8KKwlzdHJ1Y3QgaXdfcXVhbGl0eSBxdWFsOwkJLyogUXVhbGl0eSBwYXJ0IG9mIHN0YXRpc3RpY3MgKi8KKworCXN0cnVjdCBzb2NrYWRkcglhcF9hZGRyOwkvKiBBY2Nlc3MgcG9pbnQgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkcglhZGRyOwkJLyogRGVzdGluYXRpb24gYWRkcmVzcyAoaHcvbWFjKSAqLworCisJc3RydWN0IGl3X3BhcmFtCXBhcmFtOwkJLyogT3RoZXIgc21hbGwgcGFyYW1ldGVycyAqLworCXN0cnVjdCBpd19wb2ludAlkYXRhOwkJLyogT3RoZXIgbGFyZ2UgcGFyYW1ldGVycyAqLworfTsKKworLyoKKyAqIFRoZSBzdHJ1Y3R1cmUgdG8gZXhjaGFuZ2UgZGF0YSBmb3IgaW9jdGwuCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB0aGUgc2FtZSBhcyAnc3RydWN0IGlmcmVxJywgYnV0IChyZSlkZWZpbmVkIGZvcgorICogY29udmVuaWVuY2UuLi4KKyAqIERvIEkgbmVlZCB0byByZW1pbmQgeW91IGFib3V0IHN0cnVjdHVyZSBzaXplICgzMiBvY3RldHMpID8KKyAqLworc3RydWN0CWl3cmVxIAoreworCXVuaW9uCisJeworCQljaGFyCWlmcm5fbmFtZVtJRk5BTVNJWl07CS8qIGlmIG5hbWUsIGUuZy4gImV0aDAiICovCisJfSBpZnJfaWZybjsKKworCS8qIERhdGEgcGFydCAoZGVmaW5lZCBqdXN0IGFib3ZlKSAqLworCXVuaW9uCWl3cmVxX2RhdGEJdTsKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIElPQ1RMIERBVEEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qCisgKglGb3IgdGhvc2UgaW9jdGwgd2hpY2ggd2FudCB0byBleGNoYW5nZSBtb2RlIGRhdGEgdGhhdCB3aGF0IGNvdWxkCisgKglmaXQgaW4gdGhlIGFib3ZlIHN0cnVjdHVyZS4uLgorICovCisKKy8qCisgKglSYW5nZSBvZiBwYXJhbWV0ZXJzCisgKi8KKworc3RydWN0CWl3X3JhbmdlCit7CisJLyogSW5mb3JtYXRpdmUgc3R1ZmYgKHRvIGNob29zZSBiZXR3ZWVuIGRpZmZlcmVudCBpbnRlcmZhY2UpICovCisJX191MzIJCXRocm91Z2hwdXQ7CS8qIFRvIGdpdmUgYW4gaWRlYS4uLiAqLworCS8qIEluIHRoZW9yeSB0aGlzIHZhbHVlIHNob3VsZCBiZSB0aGUgbWF4aW11bSBiZW5jaG1hcmtlZAorCSAqIFRDUC9JUCB0aHJvdWdocHV0LCBiZWNhdXNlIHdpdGggbW9zdCBvZiB0aGVzZSBkZXZpY2VzIHRoZQorCSAqIGJpdCByYXRlIGlzIG1lYW5pbmdsZXNzIChvdmVyaGVhZCBhbiBjbykgdG8gZXN0aW1hdGUgaG93CisJICogZmFzdCB0aGUgY29ubmVjdGlvbiB3aWxsIGdvIGFuZCBwaWNrIHRoZSBmYXN0ZXN0IG9uZS4KKwkgKiBJIHN1Z2dlc3QgcGVvcGxlIHRvIHBsYXkgd2l0aCBOZXRwZXJmIG9yIGFueSBiZW5jaG1hcmsuLi4KKwkgKi8KKworCS8qIE5XSUQgKG9yIGRvbWFpbiBpZCkgKi8KKwlfX3UzMgkJbWluX253aWQ7CS8qIE1pbmltYWwgTldJRCB3ZSBhcmUgYWJsZSB0byBzZXQgKi8KKwlfX3UzMgkJbWF4X253aWQ7CS8qIE1heGltYWwgTldJRCB3ZSBhcmUgYWJsZSB0byBzZXQgKi8KKworCS8qIE9sZCBGcmVxdWVuY3kgKGJhY2t3YXJkIGNvbXBhdCAtIG1vdmVkIGxvd2VyICkgKi8KKwlfX3UxNgkJb2xkX251bV9jaGFubmVsczsKKwlfX3U4CQlvbGRfbnVtX2ZyZXF1ZW5jeTsKKworCS8qIFNjYW4gY2FwYWJpbGl0aWVzICovCisJX191OAkJc2Nhbl9jYXBhOyAJLyogSVdfU0NBTl9DQVBBXyogYml0IGZpZWxkICovCisKKwkvKiBXaXJlbGVzcyBldmVudCBjYXBhYmlsaXR5IGJpdG1hc2tzICovCisJX191MzIJCWV2ZW50X2NhcGFbNl07CisKKwkvKiBzaWduYWwgbGV2ZWwgdGhyZXNob2xkIHJhbmdlICovCisJX19zMzIJCXNlbnNpdGl2aXR5OworCisJLyogUXVhbGl0eSBvZiBsaW5rICYgU05SIHN0dWZmICovCisJLyogUXVhbGl0eSByYW5nZSAobGluaywgbGV2ZWwsIG5vaXNlKQorCSAqIElmIHRoZSBxdWFsaXR5IGlzIGFic29sdXRlLCBpdCB3aWxsIGJlIGluIHRoZSByYW5nZSBbMCA7IG1heF9xdWFsXSwKKwkgKiBpZiB0aGUgcXVhbGl0eSBpcyBkQm0sIGl0IHdpbGwgYmUgaW4gdGhlIHJhbmdlIFttYXhfcXVhbCA7IDBdLgorCSAqIERvbid0IGZvcmdldCB0aGF0IHdlIHVzZSA4IGJpdCBhcml0aG1ldGljcy4uLiAqLworCXN0cnVjdCBpd19xdWFsaXR5CW1heF9xdWFsOwkvKiBRdWFsaXR5IG9mIHRoZSBsaW5rICovCisJLyogVGhpcyBzaG91bGQgY29udGFpbiB0aGUgYXZlcmFnZS90eXBpY2FsIHZhbHVlcyBvZiB0aGUgcXVhbGl0eQorCSAqIGluZGljYXRvci4gVGhpcyBzaG91bGQgYmUgdGhlIHRocmVzaG9sZCBiZXR3ZWVuIGEgImdvb2QiIGFuZAorCSAqIGEgImJhZCIgbGluayAoZXhhbXBsZSA6IG1vbml0b3IgZ29pbmcgZnJvbSBncmVlbiB0byBvcmFuZ2UpLgorCSAqIEN1cnJlbnRseSwgdXNlciBzcGFjZSBhcHBzIGxpa2UgcXVhbGl0eSBtb25pdG9ycyBkb24ndCBoYXZlIGFueQorCSAqIHdheSB0byBjYWxpYnJhdGUgdGhlIG1lYXN1cmVtZW50LiBXaXRoIHRoaXMsIHRoZXkgY2FuIHNwbGl0CisJICogdGhlIHJhbmdlIGJldHdlZW4gMCBhbmQgbWF4X3F1YWwgaW4gZGlmZmVyZW50IHF1YWxpdHkgbGV2ZWwKKwkgKiAodXNpbmcgYSBnZW9tZXRyaWMgc3ViZGl2aXNpb24gY2VudGVyZWQgb24gdGhlIGF2ZXJhZ2UpLgorCSAqIEkgZXhwZWN0IHRoYXQgcGVvcGxlIGRvaW5nIHRoZSB1c2VyIHNwYWNlIGFwcHMgd2lsbCBmZWVkYmFjaworCSAqIHVzIG9uIHdoaWNoIHZhbHVlIHdlIG5lZWQgdG8gcHV0IGluIGVhY2ggZHJpdmVyLi4uICovCisJc3RydWN0IGl3X3F1YWxpdHkJYXZnX3F1YWw7CS8qIFF1YWxpdHkgb2YgdGhlIGxpbmsgKi8KKworCS8qIFJhdGVzICovCisJX191OAkJbnVtX2JpdHJhdGVzOwkvKiBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgbGlzdCAqLworCV9fczMyCQliaXRyYXRlW0lXX01BWF9CSVRSQVRFU107CS8qIGxpc3QsIGluIGJwcyAqLworCisJLyogUlRTIHRocmVzaG9sZCAqLworCV9fczMyCQltaW5fcnRzOwkvKiBNaW5pbWFsIFJUUyB0aHJlc2hvbGQgKi8KKwlfX3MzMgkJbWF4X3J0czsJLyogTWF4aW1hbCBSVFMgdGhyZXNob2xkICovCisKKwkvKiBGcmFnIHRocmVzaG9sZCAqLworCV9fczMyCQltaW5fZnJhZzsJLyogTWluaW1hbCBmcmFnIHRocmVzaG9sZCAqLworCV9fczMyCQltYXhfZnJhZzsJLyogTWF4aW1hbCBmcmFnIHRocmVzaG9sZCAqLworCisJLyogUG93ZXIgTWFuYWdlbWVudCBkdXJhdGlvbiAmIHRpbWVvdXQgKi8KKwlfX3MzMgkJbWluX3BtcDsJLyogTWluaW1hbCBQTSBwZXJpb2QgKi8KKwlfX3MzMgkJbWF4X3BtcDsJLyogTWF4aW1hbCBQTSBwZXJpb2QgKi8KKwlfX3MzMgkJbWluX3BtdDsJLyogTWluaW1hbCBQTSB0aW1lb3V0ICovCisJX19zMzIJCW1heF9wbXQ7CS8qIE1heGltYWwgUE0gdGltZW91dCAqLworCV9fdTE2CQlwbXBfZmxhZ3M7CS8qIEhvdyB0byBkZWNvZGUgbWF4L21pbiBQTSBwZXJpb2QgKi8KKwlfX3UxNgkJcG10X2ZsYWdzOwkvKiBIb3cgdG8gZGVjb2RlIG1heC9taW4gUE0gdGltZW91dCAqLworCV9fdTE2CQlwbV9jYXBhOwkvKiBXaGF0IFBNIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCAqLworCisJLyogRW5jb2RlciBzdHVmZiAqLworCV9fdTE2CWVuY29kaW5nX3NpemVbSVdfTUFYX0VOQ09ESU5HX1NJWkVTXTsJLyogRGlmZmVyZW50IHRva2VuIHNpemVzICovCisJX191OAludW1fZW5jb2Rpbmdfc2l6ZXM7CS8qIE51bWJlciBvZiBlbnRyeSBpbiB0aGUgbGlzdCAqLworCV9fdTgJbWF4X2VuY29kaW5nX3Rva2VuczsJLyogTWF4IG51bWJlciBvZiB0b2tlbnMgKi8KKwkvKiBGb3IgZHJpdmVycyB0aGF0IG5lZWQgYSAibG9naW4vcGFzc3dkIiBmb3JtICovCisJX191OAllbmNvZGluZ19sb2dpbl9pbmRleDsJLyogdG9rZW4gaW5kZXggZm9yIGxvZ2luIHRva2VuICovCisKKwkvKiBUcmFuc21pdCBwb3dlciAqLworCV9fdTE2CQl0eHBvd2VyX2NhcGE7CS8qIFdoYXQgb3B0aW9ucyBhcmUgc3VwcG9ydGVkICovCisJX191OAkJbnVtX3R4cG93ZXI7CS8qIE51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBsaXN0ICovCisJX19zMzIJCXR4cG93ZXJbSVdfTUFYX1RYUE9XRVJdOwkvKiBsaXN0LCBpbiBicHMgKi8KKworCS8qIFdpcmVsZXNzIEV4dGVuc2lvbiB2ZXJzaW9uIGluZm8gKi8KKwlfX3U4CQl3ZV92ZXJzaW9uX2NvbXBpbGVkOwkvKiBNdXN0IGJlIFdJUkVMRVNTX0VYVCAqLworCV9fdTgJCXdlX3ZlcnNpb25fc291cmNlOwkvKiBMYXN0IHVwZGF0ZSBvZiBzb3VyY2UgKi8KKworCS8qIFJldHJ5IGxpbWl0cyBhbmQgbGlmZXRpbWUgKi8KKwlfX3UxNgkJcmV0cnlfY2FwYTsJLyogV2hhdCByZXRyeSBvcHRpb25zIGFyZSBzdXBwb3J0ZWQgKi8KKwlfX3UxNgkJcmV0cnlfZmxhZ3M7CS8qIEhvdyB0byBkZWNvZGUgbWF4L21pbiByZXRyeSBsaW1pdCAqLworCV9fdTE2CQlyX3RpbWVfZmxhZ3M7CS8qIEhvdyB0byBkZWNvZGUgbWF4L21pbiByZXRyeSBsaWZlICovCisJX19zMzIJCW1pbl9yZXRyeTsJLyogTWluaW1hbCBudW1iZXIgb2YgcmV0cmllcyAqLworCV9fczMyCQltYXhfcmV0cnk7CS8qIE1heGltYWwgbnVtYmVyIG9mIHJldHJpZXMgKi8KKwlfX3MzMgkJbWluX3JfdGltZTsJLyogTWluaW1hbCByZXRyeSBsaWZldGltZSAqLworCV9fczMyCQltYXhfcl90aW1lOwkvKiBNYXhpbWFsIHJldHJ5IGxpZmV0aW1lICovCisKKwkvKiBGcmVxdWVuY3kgKi8KKwlfX3UxNgkJbnVtX2NoYW5uZWxzOwkvKiBOdW1iZXIgb2YgY2hhbm5lbHMgWzA7IG51bSAtIDFdICovCisJX191OAkJbnVtX2ZyZXF1ZW5jeTsJLyogTnVtYmVyIG9mIGVudHJ5IGluIHRoZSBsaXN0ICovCisJc3RydWN0IGl3X2ZyZXEJZnJlcVtJV19NQVhfRlJFUVVFTkNJRVNdOwkvKiBsaXN0ICovCisJLyogTm90ZSA6IHRoaXMgZnJlcXVlbmN5IGxpc3QgZG9lc24ndCBuZWVkIHRvIGZpdCBjaGFubmVsIG51bWJlcnMsCisJICogYmVjYXVzZSBlYWNoIGVudHJ5IGNvbnRhaW4gaXRzIGNoYW5uZWwgaW5kZXggKi8KKworCV9fdTMyCQllbmNfY2FwYTsJLyogSVdfRU5DX0NBUEFfKiBiaXQgZmllbGQgKi8KK307CisKKy8qCisgKiBQcml2YXRlIGlvY3RsIGludGVyZmFjZSBpbmZvcm1hdGlvbgorICovCisgCitzdHJ1Y3QJaXdfcHJpdl9hcmdzCit7CisJX191MzIJCWNtZDsJCS8qIE51bWJlciBvZiB0aGUgaW9jdGwgdG8gaXNzdWUgKi8KKwlfX3UxNgkJc2V0X2FyZ3M7CS8qIFR5cGUgYW5kIG51bWJlciBvZiBhcmdzICovCisJX191MTYJCWdldF9hcmdzOwkvKiBUeXBlIGFuZCBudW1iZXIgb2YgYXJncyAqLworCWNoYXIJCW5hbWVbSUZOQU1TSVpdOwkvKiBOYW1lIG9mIHRoZSBleHRlbnNpb24gKi8KK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdJUkVMRVNTIEVWRU5UUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoKKyAqIFdpcmVsZXNzIGV2ZW50cyBhcmUgY2FycmllZCB0aHJvdWdoIHRoZSBydG5ldGxpbmsgc29ja2V0IHRvIHVzZXIKKyAqIHNwYWNlLiBUaGV5IGFyZSBlbmNhcHN1bGF0ZWQgaW4gdGhlIElGTEFfV0lSRUxFU1MgZmllbGQgb2YKKyAqIGEgUlRNX05FV0xJTksgbWVzc2FnZS4KKyAqLworCisvKgorICogQSBXaXJlbGVzcyBFdmVudC4gQ29udGFpbnMgYmFzaWNhbGx5IHRoZSBzYW1lIGRhdGEgYXMgdGhlIGlvY3RsLi4uCisgKi8KK3N0cnVjdCBpd19ldmVudAoreworCV9fdTE2CQlsZW47CQkJLyogUmVhbCBsZW5ndGggb2YgdGhpcyBzdHVmZiAqLworCV9fdTE2CQljbWQ7CQkJLyogV2lyZWxlc3MgSU9DVEwgKi8KKwl1bmlvbiBpd3JlcV9kYXRhCXU7CQkvKiBJT0NUTCBmaXhlZCBwYXlsb2FkICovCit9OworCisvKiBTaXplIG9mIHRoZSBFdmVudCBwcmVmaXggKGluY2x1ZGluZyBwYWRkaW5nIGFuZCBhbGlnbmVtZW50IGp1bmspICovCisjZGVmaW5lIElXX0VWX0xDUF9MRU4JKHNpemVvZihzdHJ1Y3QgaXdfZXZlbnQpIC0gc2l6ZW9mKHVuaW9uIGl3cmVxX2RhdGEpKQorLyogU2l6ZSBvZiB0aGUgdmFyaW91cyBldmVudHMgKi8KKyNkZWZpbmUgSVdfRVZfQ0hBUl9MRU4JKElXX0VWX0xDUF9MRU4gKyBJRk5BTVNJWikKKyNkZWZpbmUgSVdfRVZfVUlOVF9MRU4JKElXX0VWX0xDUF9MRU4gKyBzaXplb2YoX191MzIpKQorI2RlZmluZSBJV19FVl9GUkVRX0xFTgkoSVdfRVZfTENQX0xFTiArIHNpemVvZihzdHJ1Y3QgaXdfZnJlcSkpCisjZGVmaW5lIElXX0VWX1BBUkFNX0xFTgkoSVdfRVZfTENQX0xFTiArIHNpemVvZihzdHJ1Y3QgaXdfcGFyYW0pKQorI2RlZmluZSBJV19FVl9BRERSX0xFTgkoSVdfRVZfTENQX0xFTiArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKQorI2RlZmluZSBJV19FVl9RVUFMX0xFTgkoSVdfRVZfTENQX0xFTiArIHNpemVvZihzdHJ1Y3QgaXdfcXVhbGl0eSkpCisKKy8qIGl3X3BvaW50IGV2ZW50cyBhcmUgc3BlY2lhbC4gRmlyc3QsIHRoZSBwYXlsb2FkIChleHRyYSBkYXRhKSBjb21lIGF0CisgKiB0aGUgZW5kIG9mIHRoZSBldmVudCwgc28gdGhleSBhcmUgYmlnZ2VyIHRoYW4gSVdfRVZfUE9JTlRfTEVOLiBTZWNvbmQsCisgKiB3ZSBvbWl0IHRoZSBwb2ludGVyLCBzbyBzdGFydCBhdCBhbiBvZmZzZXQuICovCisjZGVmaW5lIElXX0VWX1BPSU5UX09GRiAoKChjaGFyICopICYoKChzdHJ1Y3QgaXdfcG9pbnQgKikgTlVMTCktPmxlbmd0aCkpIC0gXAorCQkJICAoY2hhciAqKSBOVUxMKQorI2RlZmluZSBJV19FVl9QT0lOVF9MRU4JKElXX0VWX0xDUF9MRU4gKyBzaXplb2Yoc3RydWN0IGl3X3BvaW50KSAtIFwKKwkJCSBJV19FVl9QT0lOVF9PRkYpCisKKworLyogU2l6ZSBvZiB0aGUgRXZlbnQgcHJlZml4IHdoZW4gcGFja2VkIGluIHN0cmVhbSAqLworI2RlZmluZSBJV19FVl9MQ1BfUEtfTEVOCSg0KQorLyogU2l6ZSBvZiB0aGUgdmFyaW91cyBldmVudHMgd2hlbiBwYWNrZWQgaW4gc3RyZWFtICovCisjZGVmaW5lIElXX0VWX0NIQVJfUEtfTEVOCShJV19FVl9MQ1BfUEtfTEVOICsgSUZOQU1TSVopCisjZGVmaW5lIElXX0VWX1VJTlRfUEtfTEVOCShJV19FVl9MQ1BfUEtfTEVOICsgc2l6ZW9mKF9fdTMyKSkKKyNkZWZpbmUgSVdfRVZfRlJFUV9QS19MRU4JKElXX0VWX0xDUF9QS19MRU4gKyBzaXplb2Yoc3RydWN0IGl3X2ZyZXEpKQorI2RlZmluZSBJV19FVl9QQVJBTV9QS19MRU4JKElXX0VWX0xDUF9QS19MRU4gKyBzaXplb2Yoc3RydWN0IGl3X3BhcmFtKSkKKyNkZWZpbmUgSVdfRVZfQUREUl9QS19MRU4JKElXX0VWX0xDUF9QS19MRU4gKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSkKKyNkZWZpbmUgSVdfRVZfUVVBTF9QS19MRU4JKElXX0VWX0xDUF9QS19MRU4gKyBzaXplb2Yoc3RydWN0IGl3X3F1YWxpdHkpKQorI2RlZmluZSBJV19FVl9QT0lOVF9QS19MRU4JKElXX0VWX0xDUF9QS19MRU4gKyA0KQorCisjZW5kaWYJLyogX0xJTlVYX1dJUkVMRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC94MjUuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC94MjUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDUwYTdmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3gyNS5oCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogVGhlc2UgYXJlIHRoZSBwdWJsaWMgZWxlbWVudHMgb2YgdGhlIExpbnV4IGtlcm5lbCBYLjI1IGltcGxlbWVudGF0aW9uLgorICoKKyAqIAlIaXN0b3J5CisgKgltYXIvMjAvMDAJRGFuaWVsYSBTcXVhc3NvbmkgRGlzYWJsaW5nL2VuYWJsaW5nIG9mIGZhY2lsaXRpZXMgCisgKgkJCQkJICBuZWdvdGlhdGlvbi4KKyAqCWFwci8wMi8wNQlTaGF1biBQZXJlaXJhIFNlbGVjdGl2ZSBzdWIgYWRkcmVzcyBtYXRjaGluZyB3aXRoCisgKgkJCQkJY2FsbCB1c2VyIGRhdGEKKyAqLworCisjaWZuZGVmCVgyNV9LRVJORUxfSAorI2RlZmluZQlYMjVfS0VSTkVMX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUJU0lPQ1gyNUdTVUJTQ1JJUAkoU0lPQ1BST1RPUFJJVkFURSArIDApCisjZGVmaW5lCVNJT0NYMjVTU1VCU0NSSVAJKFNJT0NQUk9UT1BSSVZBVEUgKyAxKQorI2RlZmluZQlTSU9DWDI1R0ZBQ0lMSVRJRVMJKFNJT0NQUk9UT1BSSVZBVEUgKyAyKQorI2RlZmluZQlTSU9DWDI1U0ZBQ0lMSVRJRVMJKFNJT0NQUk9UT1BSSVZBVEUgKyAzKQorI2RlZmluZQlTSU9DWDI1R0NBTExVU0VSREFUQQkoU0lPQ1BST1RPUFJJVkFURSArIDQpCisjZGVmaW5lCVNJT0NYMjVTQ0FMTFVTRVJEQVRBCShTSU9DUFJPVE9QUklWQVRFICsgNSkKKyNkZWZpbmUJU0lPQ1gyNUdDQVVTRURJQUcJKFNJT0NQUk9UT1BSSVZBVEUgKyA2KQorI2RlZmluZSBTSU9DWDI1U0NVRE1BVENITEVOCShTSU9DUFJPVE9QUklWQVRFICsgNykKKyNkZWZpbmUgU0lPQ1gyNUNBTExBQ0NQVEFQUFJWICAgKFNJT0NQUk9UT1BSSVZBVEUgKyA4KQorI2RlZmluZSBTSU9DWDI1U0VORENBTExBQ0NQVCAgICAoU0lPQ1BST1RPUFJJVkFURSArIDkpCisjZGVmaW5lIFNJT0NYMjVHRFRFRkFDSUxJVElFUyAoU0lPQ1BST1RPUFJJVkFURSArIDEwKQorI2RlZmluZSBTSU9DWDI1U0RURUZBQ0lMSVRJRVMgKFNJT0NQUk9UT1BSSVZBVEUgKyAxMSkKKyNkZWZpbmUgU0lPQ1gyNVNDQVVTRURJQUcJKFNJT0NQUk9UT1BSSVZBVEUgKyAxMikKKworLyoKKyAqCVZhbHVlcyBmb3Ige2dldCxzZXR9c29ja29wdC4KKyAqLworI2RlZmluZQlYMjVfUUJJVElOQ0wJCTEKKworLyoKKyAqCVguMjUgUGFja2V0IFNpemUgdmFsdWVzLgorICovCisjZGVmaW5lCVgyNV9QUzE2CQk0CisjZGVmaW5lCVgyNV9QUzMyCQk1CisjZGVmaW5lCVgyNV9QUzY0CQk2CisjZGVmaW5lCVgyNV9QUzEyOAkJNworI2RlZmluZQlYMjVfUFMyNTYJCTgKKyNkZWZpbmUJWDI1X1BTNTEyCQk5CisjZGVmaW5lCVgyNV9QUzEwMjQJCTEwCisjZGVmaW5lCVgyNV9QUzIwNDgJCTExCisjZGVmaW5lCVgyNV9QUzQwOTYJCTEyCisKKy8qCisgKiBBbiBYLjEyMSBhZGRyZXNzLCBpdCBpcyBoZWxkIGFzIEFTQ0lJIHRleHQsIG51bGwgdGVybWluYXRlZCwgdXAgdG8gMTUKKyAqIGRpZ2l0cyBhbmQgYSBudWxsIHRlcm1pbmF0b3IuCisgKi8KK3N0cnVjdCB4MjVfYWRkcmVzcyB7CisJY2hhciB4MjVfYWRkclsxNl07Cit9OworCisvKgorICoJTGludXggWC4yNSBBZGRyZXNzIHN0cnVjdHVyZSwgdXNlZCBmb3IgYmluZCwgYW5kIGNvbm5lY3QgbW9zdGx5LgorICovCitzdHJ1Y3Qgc29ja2FkZHJfeDI1IHsKKwlzYV9mYW1pbHlfdAkgICBzeDI1X2ZhbWlseTsJCS8qIE11c3QgYmUgQUZfWDI1ICovCisJc3RydWN0IHgyNV9hZGRyZXNzIHN4MjVfYWRkcjsJCS8qIFguMTIxIEFkZHJlc3MgKi8KK307CisKKy8qCisgKglEVEUvRENFIHN1YnNjcmlwdGlvbiBvcHRpb25zLgorICoKKyAqICAgICAgQXMgdGhpcyBpcyBtaXNzaW5nIGxvdHMgb2Ygb3B0aW9ucywgdXNlciBzaG91bGQgZXhwZWN0IG1ham9yCisgKgljaGFuZ2VzIG9mIHRoaXMgc3RydWN0dXJlIGluIDIuNS54IHdoaWNoIG1pZ2h0IGJyZWFrIGNvbXBhdGliaWx0eS4KKyAqICAgICAgVGhlIHNvbWV3aGF0IHVnbHkgZGltZW5zaW9uIDIwMC1zaXplb2YoKSBpcyBuZWVkZWQgdG8gbWFpbnRhaW4KKyAqCWJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisgKi8KK3N0cnVjdCB4MjVfc3Vic2NyaXBfc3RydWN0IHsKKwljaGFyIGRldmljZVsyMDAtc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXTsKKwl1bnNpZ25lZCBsb25nCWdsb2JhbF9mYWNpbF9tYXNrOwkvKiAwIHRvIGRpc2FibGUgbmVnb3RpYXRpb24gKi8KKwl1bnNpZ25lZCBpbnQJZXh0ZW5kZWQ7Cit9OworCisvKiB2YWx1ZXMgZm9yIGFib3ZlIGdsb2JhbF9mYWNpbF9tYXNrICovCisKKyNkZWZpbmUJWDI1X01BU0tfUkVWRVJTRQkweDAxCQorI2RlZmluZQlYMjVfTUFTS19USFJPVUdIUFVUCTB4MDIKKyNkZWZpbmUJWDI1X01BU0tfUEFDS0VUX1NJWkUJMHgwNAorI2RlZmluZQlYMjVfTUFTS19XSU5ET1dfU0laRQkweDA4CisKKyNkZWZpbmUgWDI1X01BU0tfQ0FMTElOR19BRSAweDEwCisjZGVmaW5lIFgyNV9NQVNLX0NBTExFRF9BRSAweDIwCisKKworLyoKKyAqCVJvdXRpbmcgdGFibGUgY29udHJvbCBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCB4MjVfcm91dGVfc3RydWN0IHsKKwlzdHJ1Y3QgeDI1X2FkZHJlc3MgYWRkcmVzczsKKwl1bnNpZ25lZCBpbnQJICAgc2lnZGlnaXRzOworCWNoYXIJCSAgIGRldmljZVsyMDBdOworfTsKKworLyoKKyAqCUZhY2lsaXRpZXMgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgeDI1X2ZhY2lsaXRpZXMgeworCXVuc2lnbmVkIGludAl3aW5zaXplX2luLCB3aW5zaXplX291dDsKKwl1bnNpZ25lZCBpbnQJcGFjc2l6ZV9pbiwgcGFjc2l6ZV9vdXQ7CisJdW5zaWduZWQgaW50CXRocm91Z2hwdXQ7CisJdW5zaWduZWQgaW50CXJldmVyc2U7Cit9OworCisvKgorKiBJVFUgRFRFIGZhY2lsaXRpZXMKKyogT25seSB0aGUgY2FsbGVkIGFuZCBjYWxsaW5nIGFkZHJlc3MKKyogZXh0ZW5zaW9uIGFyZSBjdXJyZW50bHkgaW1wbGVtZW50ZWQuCisqIFRoZSByZXN0IGFyZSBpbiBwbGFjZSB0byBhdm9pZCB0aGUgc3RydWN0CisqIGNoYW5naW5nIHNpemUgaWYgc29tZW9uZSBuZWVkcyB0aGVtIGxhdGVyCisqLworCitzdHJ1Y3QgeDI1X2R0ZV9mYWNpbGl0aWVzIHsKKwlfX3UxNiBkZWxheV9jdW11bDsKKwlfX3UxNiBkZWxheV90YXJnZXQ7CisJX191MTYgZGVsYXlfbWF4OworCV9fdTggbWluX3Rocm91Z2hwdXQ7CisJX191OCBleHBlZGl0ZWQ7CisJX191OCBjYWxsaW5nX2xlbjsKKwlfX3U4IGNhbGxlZF9sZW47CisJX191OCBjYWxsaW5nX2FlWzIwXTsKKwlfX3U4IGNhbGxlZF9hZVsyMF07Cit9OworCisvKgorICoJQ2FsbCBVc2VyIERhdGEgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgeDI1X2NhbGx1c2VyZGF0YSB7CisJdW5zaWduZWQgaW50CWN1ZGxlbmd0aDsKKwl1bnNpZ25lZCBjaGFyCWN1ZGRhdGFbMTI4XTsKK307CisKKy8qCisgKglDYWxsIGNsZWFyaW5nIENhdXNlIGFuZCBEaWFnbm9zdGljIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IHgyNV9jYXVzZWRpYWcgeworCXVuc2lnbmVkIGNoYXIJY2F1c2U7CisJdW5zaWduZWQgY2hhcglkaWFnbm9zdGljOworfTsKKworLyoKKyAqCUZ1cnRoZXIgb3B0aW9uYWwgY2FsbCB1c2VyIGRhdGEgbWF0Y2ggbGVuZ3RoIHNlbGVjdGlvbgorICovCitzdHJ1Y3QgeDI1X3N1YmFkZHIgeworCXVuc2lnbmVkIGludCBjdWRtYXRjaGxlbmd0aDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3hhdHRyLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgveGF0dHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmNhMzNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L3hhdHRyLmgKQEAgLTAsMCArMSwxNyBAQAorLyoKKyAgRmlsZTogbGludXgveGF0dHIuaAorCisgIEV4dGVuZGVkIGF0dHJpYnV0ZXMgaGFuZGxpbmcuCisKKyAgQ29weXJpZ2h0IChDKSAyMDAxIGJ5IEFuZHJlYXMgR3J1ZW5iYWNoZXIgPGEuZ3J1ZW5iYWNoZXJAY29tcHV0ZXIub3JnPgorICBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICBDb3B5cmlnaHQgKGMpIDIwMDQgUmVkIEhhdCwgSW5jLiwgSmFtZXMgTW9ycmlzIDxqbW9ycmlzQHJlZGhhdC5jb20+CisqLworI2lmbmRlZiBfTElOVVhfWEFUVFJfSAorI2RlZmluZSBfTElOVVhfWEFUVFJfSAorCisjZGVmaW5lIFhBVFRSX0NSRUFURQkweDEJLyogc2V0IHZhbHVlLCBmYWlsIGlmIGF0dHIgYWxyZWFkeSBleGlzdHMgKi8KKyNkZWZpbmUgWEFUVFJfUkVQTEFDRQkweDIJLyogc2V0IHZhbHVlLCBmYWlsIGlmIGF0dHIgZG9lcyBub3QgZXhpc3QgKi8KKworCisjZW5kaWYJLyogX0xJTlVYX1hBVFRSX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9saW51eC94ZnJtLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgveGZybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZjJiNjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbGludXgveGZybS5oCkBAIC0wLDAgKzEsNDg4IEBACisjaWZuZGVmIF9MSU5VWF9YRlJNX0gKKyNkZWZpbmUgX0xJTlVYX1hGUk1fSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogQWxsIG9mIHRoZSBzdHJ1Y3R1cmVzIGluIHRoaXMgZmlsZSBtYXkgbm90IGNoYW5nZSBzaXplIGFzIHRoZXkgYXJlCisgKiBwYXNzZWQgaW50byB0aGUga2VybmVsIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIHNvY2tldHMuCisgKi8KKworLyogU3RydWN0dXJlIHRvIGVuY2Fwc3VsYXRlIGFkZHJlc3Nlcy4gSSBkbyBub3Qgd2FudCB0byB1c2UKKyAqICJzdGFuZGFyZCIgc3RydWN0dXJlLiBNeSBhcG9sb2dpZXMuCisgKi8KK3R5cGVkZWYgdW5pb24geworCV9fYmUzMgkJYTQ7CisJX19iZTMyCQlhNls0XTsKK30geGZybV9hZGRyZXNzX3Q7CisKKy8qIElkZW50IG9mIGEgc3BlY2lmaWMgeGZybV9zdGF0ZS4gSXQgaXMgdXNlZCBvbiBpbnB1dCB0byBsb29rdXAKKyAqIHRoZSBzdGF0ZSBieSAoc3BpLGRhZGRyLGFoL2VzcCkgb3IgdG8gc3RvcmUgaW5mb3JtYXRpb24gYWJvdXQKKyAqIHNwaSwgcHJvdG9jb2wgYW5kIHR1bm5lbCBhZGRyZXNzIG9uIG91dHB1dC4KKyAqLworc3RydWN0IHhmcm1faWQgeworCXhmcm1fYWRkcmVzc190CWRhZGRyOworCV9fYmUzMgkJc3BpOworCV9fdTgJCXByb3RvOworfTsKKworc3RydWN0IHhmcm1fc2VjX2N0eCB7CisJX191OAljdHhfZG9pOworCV9fdTgJY3R4X2FsZzsKKwlfX3UxNgljdHhfbGVuOworCV9fdTMyCWN0eF9zaWQ7CisJY2hhcgljdHhfc3RyWzBdOworfTsKKworLyogU2VjdXJpdHkgQ29udGV4dCBEb21haW5zIG9mIEludGVycHJldGF0aW9uICovCisjZGVmaW5lIFhGUk1fU0NfRE9JX1JFU0VSVkVEIDAKKyNkZWZpbmUgWEZSTV9TQ19ET0lfTFNNIDEKKworLyogU2VjdXJpdHkgQ29udGV4dCBBbGdvcml0aG1zICovCisjZGVmaW5lIFhGUk1fU0NfQUxHX1JFU0VSVkVEIDAKKyNkZWZpbmUgWEZSTV9TQ19BTEdfU0VMSU5VWCAxCisKKy8qIFNlbGVjdG9yLCB1c2VkIGFzIHNlbGVjdG9yIGJvdGggb24gcG9saWN5IHJ1bGVzIChTUEQpIGFuZCBTQXMuICovCisKK3N0cnVjdCB4ZnJtX3NlbGVjdG9yIHsKKwl4ZnJtX2FkZHJlc3NfdAlkYWRkcjsKKwl4ZnJtX2FkZHJlc3NfdAlzYWRkcjsKKwlfX2JlMTYJZHBvcnQ7CisJX19iZTE2CWRwb3J0X21hc2s7CisJX19iZTE2CXNwb3J0OworCV9fYmUxNglzcG9ydF9tYXNrOworCV9fdTE2CWZhbWlseTsKKwlfX3U4CXByZWZpeGxlbl9kOworCV9fdTgJcHJlZml4bGVuX3M7CisJX191OAlwcm90bzsKKwlpbnQJaWZpbmRleDsKKwlfX2tlcm5lbF91aWQzMl90CXVzZXI7Cit9OworCisjZGVmaW5lIFhGUk1fSU5GICh+KF9fdTY0KTApCisKK3N0cnVjdCB4ZnJtX2xpZmV0aW1lX2NmZyB7CisJX191NjQJc29mdF9ieXRlX2xpbWl0OworCV9fdTY0CWhhcmRfYnl0ZV9saW1pdDsKKwlfX3U2NAlzb2Z0X3BhY2tldF9saW1pdDsKKwlfX3U2NAloYXJkX3BhY2tldF9saW1pdDsKKwlfX3U2NAlzb2Z0X2FkZF9leHBpcmVzX3NlY29uZHM7CisJX191NjQJaGFyZF9hZGRfZXhwaXJlc19zZWNvbmRzOworCV9fdTY0CXNvZnRfdXNlX2V4cGlyZXNfc2Vjb25kczsKKwlfX3U2NAloYXJkX3VzZV9leHBpcmVzX3NlY29uZHM7Cit9OworCitzdHJ1Y3QgeGZybV9saWZldGltZV9jdXIgeworCV9fdTY0CWJ5dGVzOworCV9fdTY0CXBhY2tldHM7CisJX191NjQJYWRkX3RpbWU7CisJX191NjQJdXNlX3RpbWU7Cit9OworCitzdHJ1Y3QgeGZybV9yZXBsYXlfc3RhdGUgeworCV9fdTMyCW9zZXE7CisJX191MzIJc2VxOworCV9fdTMyCWJpdG1hcDsKK307CisKK3N0cnVjdCB4ZnJtX2FsZ28geworCWNoYXIJCWFsZ19uYW1lWzY0XTsKKwl1bnNpZ25lZCBpbnQJYWxnX2tleV9sZW47ICAgIC8qIGluIGJpdHMgKi8KKwljaGFyCQlhbGdfa2V5WzBdOworfTsKKworc3RydWN0IHhmcm1fYWxnb19hdXRoIHsKKwljaGFyCQlhbGdfbmFtZVs2NF07CisJdW5zaWduZWQgaW50CWFsZ19rZXlfbGVuOyAgICAvKiBpbiBiaXRzICovCisJdW5zaWduZWQgaW50CWFsZ190cnVuY19sZW47ICAvKiBpbiBiaXRzICovCisJY2hhcgkJYWxnX2tleVswXTsKK307CisKK3N0cnVjdCB4ZnJtX2FsZ29fYWVhZCB7CisJY2hhcgkJYWxnX25hbWVbNjRdOworCXVuc2lnbmVkIGludAlhbGdfa2V5X2xlbjsJLyogaW4gYml0cyAqLworCXVuc2lnbmVkIGludAlhbGdfaWN2X2xlbjsJLyogaW4gYml0cyAqLworCWNoYXIJCWFsZ19rZXlbMF07Cit9OworCitzdHJ1Y3QgeGZybV9zdGF0cyB7CisJX191MzIJcmVwbGF5X3dpbmRvdzsKKwlfX3UzMglyZXBsYXk7CisJX191MzIJaW50ZWdyaXR5X2ZhaWxlZDsKK307CisKK2VudW0geworCVhGUk1fUE9MSUNZX1RZUEVfTUFJTgk9IDAsCisJWEZSTV9QT0xJQ1lfVFlQRV9TVUIJPSAxLAorCVhGUk1fUE9MSUNZX1RZUEVfTUFYCT0gMiwKKwlYRlJNX1BPTElDWV9UWVBFX0FOWQk9IDI1NQorfTsKKworZW51bSB7CisJWEZSTV9QT0xJQ1lfSU4JPSAwLAorCVhGUk1fUE9MSUNZX09VVAk9IDEsCisJWEZSTV9QT0xJQ1lfRldECT0gMiwKKwlYRlJNX1BPTElDWV9NQVNLID0gMywKKwlYRlJNX1BPTElDWV9NQVgJPSAzCit9OworCitlbnVtIHsKKwlYRlJNX1NIQVJFX0FOWSwJCS8qIE5vIGxpbWl0YXRpb25zICovCisJWEZSTV9TSEFSRV9TRVNTSU9OLAkvKiBGb3IgdGhpcyBzZXNzaW9uIG9ubHkgKi8KKwlYRlJNX1NIQVJFX1VTRVIsCS8qIEZvciB0aGlzIHVzZXIgb25seSAqLworCVhGUk1fU0hBUkVfVU5JUVVFCS8qIFVzZSBvbmNlICovCit9OworCisjZGVmaW5lIFhGUk1fTU9ERV9UUkFOU1BPUlQgMAorI2RlZmluZSBYRlJNX01PREVfVFVOTkVMIDEKKyNkZWZpbmUgWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIDIKKyNkZWZpbmUgWEZSTV9NT0RFX0lOX1RSSUdHRVIgMworI2RlZmluZSBYRlJNX01PREVfQkVFVCA0CisjZGVmaW5lIFhGUk1fTU9ERV9NQVggNQorCisvKiBOZXRsaW5rIGNvbmZpZ3VyYXRpb24gbWVzc2FnZXMuICAqLworZW51bSB7CisJWEZSTV9NU0dfQkFTRSA9IDB4MTAsCisKKwlYRlJNX01TR19ORVdTQSA9IDB4MTAsCisjZGVmaW5lIFhGUk1fTVNHX05FV1NBIFhGUk1fTVNHX05FV1NBCisJWEZSTV9NU0dfREVMU0EsCisjZGVmaW5lIFhGUk1fTVNHX0RFTFNBIFhGUk1fTVNHX0RFTFNBCisJWEZSTV9NU0dfR0VUU0EsCisjZGVmaW5lIFhGUk1fTVNHX0dFVFNBIFhGUk1fTVNHX0dFVFNBCisKKwlYRlJNX01TR19ORVdQT0xJQ1ksCisjZGVmaW5lIFhGUk1fTVNHX05FV1BPTElDWSBYRlJNX01TR19ORVdQT0xJQ1kKKwlYRlJNX01TR19ERUxQT0xJQ1ksCisjZGVmaW5lIFhGUk1fTVNHX0RFTFBPTElDWSBYRlJNX01TR19ERUxQT0xJQ1kKKwlYRlJNX01TR19HRVRQT0xJQ1ksCisjZGVmaW5lIFhGUk1fTVNHX0dFVFBPTElDWSBYRlJNX01TR19HRVRQT0xJQ1kKKworCVhGUk1fTVNHX0FMTE9DU1BJLAorI2RlZmluZSBYRlJNX01TR19BTExPQ1NQSSBYRlJNX01TR19BTExPQ1NQSQorCVhGUk1fTVNHX0FDUVVJUkUsCisjZGVmaW5lIFhGUk1fTVNHX0FDUVVJUkUgWEZSTV9NU0dfQUNRVUlSRQorCVhGUk1fTVNHX0VYUElSRSwKKyNkZWZpbmUgWEZSTV9NU0dfRVhQSVJFIFhGUk1fTVNHX0VYUElSRQorCisJWEZSTV9NU0dfVVBEUE9MSUNZLAorI2RlZmluZSBYRlJNX01TR19VUERQT0xJQ1kgWEZSTV9NU0dfVVBEUE9MSUNZCisJWEZSTV9NU0dfVVBEU0EsCisjZGVmaW5lIFhGUk1fTVNHX1VQRFNBIFhGUk1fTVNHX1VQRFNBCisKKwlYRlJNX01TR19QT0xFWFBJUkUsCisjZGVmaW5lIFhGUk1fTVNHX1BPTEVYUElSRSBYRlJNX01TR19QT0xFWFBJUkUKKworCVhGUk1fTVNHX0ZMVVNIU0EsCisjZGVmaW5lIFhGUk1fTVNHX0ZMVVNIU0EgWEZSTV9NU0dfRkxVU0hTQQorCVhGUk1fTVNHX0ZMVVNIUE9MSUNZLAorI2RlZmluZSBYRlJNX01TR19GTFVTSFBPTElDWSBYRlJNX01TR19GTFVTSFBPTElDWQorCisJWEZSTV9NU0dfTkVXQUUsCisjZGVmaW5lIFhGUk1fTVNHX05FV0FFIFhGUk1fTVNHX05FV0FFCisJWEZSTV9NU0dfR0VUQUUsCisjZGVmaW5lIFhGUk1fTVNHX0dFVEFFIFhGUk1fTVNHX0dFVEFFCisKKwlYRlJNX01TR19SRVBPUlQsCisjZGVmaW5lIFhGUk1fTVNHX1JFUE9SVCBYRlJNX01TR19SRVBPUlQKKworCVhGUk1fTVNHX01JR1JBVEUsCisjZGVmaW5lIFhGUk1fTVNHX01JR1JBVEUgWEZSTV9NU0dfTUlHUkFURQorCisJWEZSTV9NU0dfTkVXU0FESU5GTywKKyNkZWZpbmUgWEZSTV9NU0dfTkVXU0FESU5GTyBYRlJNX01TR19ORVdTQURJTkZPCisJWEZSTV9NU0dfR0VUU0FESU5GTywKKyNkZWZpbmUgWEZSTV9NU0dfR0VUU0FESU5GTyBYRlJNX01TR19HRVRTQURJTkZPCisKKwlYRlJNX01TR19ORVdTUERJTkZPLAorI2RlZmluZSBYRlJNX01TR19ORVdTUERJTkZPIFhGUk1fTVNHX05FV1NQRElORk8KKwlYRlJNX01TR19HRVRTUERJTkZPLAorI2RlZmluZSBYRlJNX01TR19HRVRTUERJTkZPIFhGUk1fTVNHX0dFVFNQRElORk8KKworCVhGUk1fTVNHX01BUFBJTkcsCisjZGVmaW5lIFhGUk1fTVNHX01BUFBJTkcgWEZSTV9NU0dfTUFQUElORworCV9fWEZSTV9NU0dfTUFYCit9OworI2RlZmluZSBYRlJNX01TR19NQVggKF9fWEZSTV9NU0dfTUFYIC0gMSkKKworI2RlZmluZSBYRlJNX05SX01TR1RZUEVTIChYRlJNX01TR19NQVggKyAxIC0gWEZSTV9NU0dfQkFTRSkKKworLyoKKyAqIEdlbmVyaWMgTFNNIHNlY3VyaXR5IGNvbnRleHQgZm9yIGNvbXVuaWNhdGluZyB0byB1c2VyIHNwYWNlCisgKiBOT1RFOiBTYW1lIGZvcm1hdCBhcyBzYWRiX3hfc2VjX2N0eAorICovCitzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggeworCV9fdTE2CQkJbGVuOworCV9fdTE2CQkJZXh0dHlwZTsKKwlfX3U4CQkJY3R4X2FsZzsgIC8qIExTTXM6IGUuZy4sIHNlbGludXggPT0gMSAqLworCV9fdTgJCQljdHhfZG9pOworCV9fdTE2CQkJY3R4X2xlbjsKK307CisKK3N0cnVjdCB4ZnJtX3VzZXJfdG1wbCB7CisJc3RydWN0IHhmcm1faWQJCWlkOworCV9fdTE2CQkJZmFtaWx5OworCXhmcm1fYWRkcmVzc190CQlzYWRkcjsKKwlfX3UzMgkJCXJlcWlkOworCV9fdTgJCQltb2RlOworCV9fdTgJCQlzaGFyZTsKKwlfX3U4CQkJb3B0aW9uYWw7CisJX191MzIJCQlhYWxnb3M7CisJX191MzIJCQllYWxnb3M7CisJX191MzIJCQljYWxnb3M7Cit9OworCitzdHJ1Y3QgeGZybV9lbmNhcF90bXBsIHsKKwlfX3UxNgkJZW5jYXBfdHlwZTsKKwlfX2JlMTYJCWVuY2FwX3Nwb3J0OworCV9fYmUxNgkJZW5jYXBfZHBvcnQ7CisJeGZybV9hZGRyZXNzX3QJZW5jYXBfb2E7Cit9OworCisvKiBBRVZFTlQgZmxhZ3MgICovCitlbnVtIHhmcm1fYWVfZnR5cGVfdCB7CisJWEZSTV9BRV9VTlNQRUMsCisJWEZSTV9BRV9SVEhSPTEsCS8qIHJlcGxheSB0aHJlc2hvbGQqLworCVhGUk1fQUVfUlZBTD0yLCAvKiByZXBsYXkgdmFsdWUgKi8KKwlYRlJNX0FFX0xWQUw9NCwgLyogbGlmZXRpbWUgdmFsdWUgKi8KKwlYRlJNX0FFX0VUSFI9OCwgLyogZXhwaXJ5IHRpbWVyIHRocmVzaG9sZCAqLworCVhGUk1fQUVfQ1I9MTYsIC8qIEV2ZW50IGNhdXNlIGlzIHJlcGxheSB1cGRhdGUgKi8KKwlYRlJNX0FFX0NFPTMyLCAvKiBFdmVudCBjYXVzZSBpcyB0aW1lciBleHBpcnkgKi8KKwlYRlJNX0FFX0NVPTY0LCAvKiBFdmVudCBjYXVzZSBpcyBwb2xpY3kgdXBkYXRlICovCisJX19YRlJNX0FFX01BWAorCisjZGVmaW5lIFhGUk1fQUVfTUFYIChfX1hGUk1fQUVfTUFYIC0gMSkKK307CisKK3N0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfdHlwZSB7CisJX191OAkJdHlwZTsKKwlfX3UxNgkJcmVzZXJ2ZWQxOworCV9fdTgJCXJlc2VydmVkMjsKK307CisKKy8qIE5ldGxpbmsgbWVzc2FnZSBhdHRyaWJ1dGVzLiAgKi8KK2VudW0geGZybV9hdHRyX3R5cGVfdCB7CisJWEZSTUFfVU5TUEVDLAorCVhGUk1BX0FMR19BVVRILAkJLyogc3RydWN0IHhmcm1fYWxnbyAqLworCVhGUk1BX0FMR19DUllQVCwJLyogc3RydWN0IHhmcm1fYWxnbyAqLworCVhGUk1BX0FMR19DT01QLAkJLyogc3RydWN0IHhmcm1fYWxnbyAqLworCVhGUk1BX0VOQ0FQLAkJLyogc3RydWN0IHhmcm1fYWxnbyArIHN0cnVjdCB4ZnJtX2VuY2FwX3RtcGwgKi8KKwlYRlJNQV9UTVBMLAkJLyogMSBvciBtb3JlIHN0cnVjdCB4ZnJtX3VzZXJfdG1wbCAqLworCVhGUk1BX1NBLAkJLyogc3RydWN0IHhmcm1fdXNlcnNhX2luZm8gICovCisJWEZSTUFfUE9MSUNZLAkJLypzdHJ1Y3QgeGZybV91c2VycG9saWN5X2luZm8gKi8KKwlYRlJNQV9TRUNfQ1RYLAkJLyogc3RydWN0IHhmcm1fc2VjX2N0eCAqLworCVhGUk1BX0xUSU1FX1ZBTCwKKwlYRlJNQV9SRVBMQVlfVkFMLAorCVhGUk1BX1JFUExBWV9USFJFU0gsCisJWEZSTUFfRVRJTUVSX1RIUkVTSCwKKwlYRlJNQV9TUkNBRERSLAkJLyogeGZybV9hZGRyZXNzX3QgKi8KKwlYRlJNQV9DT0FERFIsCQkvKiB4ZnJtX2FkZHJlc3NfdCAqLworCVhGUk1BX0xBU1RVU0VELAkJLyogdW5zaWduZWQgbG9uZyAgKi8KKwlYRlJNQV9QT0xJQ1lfVFlQRSwJLyogc3RydWN0IHhmcm1fdXNlcnBvbGljeV90eXBlICovCisJWEZSTUFfTUlHUkFURSwKKwlYRlJNQV9BTEdfQUVBRCwJCS8qIHN0cnVjdCB4ZnJtX2FsZ29fYWVhZCAqLworCVhGUk1BX0tNQUREUkVTUywgICAgICAgIC8qIHN0cnVjdCB4ZnJtX3VzZXJfa21hZGRyZXNzICovCisJWEZSTUFfQUxHX0FVVEhfVFJVTkMsCS8qIHN0cnVjdCB4ZnJtX2FsZ29fYXV0aCAqLworCVhGUk1BX01BUkssCQkvKiBzdHJ1Y3QgeGZybV9tYXJrICovCisJX19YRlJNQV9NQVgKKworI2RlZmluZSBYRlJNQV9NQVggKF9fWEZSTUFfTUFYIC0gMSkKK307CisKK3N0cnVjdCB4ZnJtX21hcmsgeworCV9fdTMyICAgICAgICAgICB2OyAvKiB2YWx1ZSAqLworCV9fdTMyICAgICAgICAgICBtOyAvKiBtYXNrICovCit9OworCitlbnVtIHhmcm1fc2FkYXR0cl90eXBlX3QgeworCVhGUk1BX1NBRF9VTlNQRUMsCisJWEZSTUFfU0FEX0NOVCwKKwlYRlJNQV9TQURfSElORk8sCisJX19YRlJNQV9TQURfTUFYCisKKyNkZWZpbmUgWEZSTUFfU0FEX01BWCAoX19YRlJNQV9TQURfTUFYIC0gMSkKK307CisKK3N0cnVjdCB4ZnJtdV9zYWRoaW5mbyB7CisJX191MzIgc2FkaGNudDsgLyogY3VycmVudCBoYXNoIGJrdHMgKi8KKwlfX3UzMiBzYWRobWNudDsgLyogbWF4IGFsbG93ZWQgaGFzaCBia3RzICovCit9OworCitlbnVtIHhmcm1fc3BkYXR0cl90eXBlX3QgeworCVhGUk1BX1NQRF9VTlNQRUMsCisJWEZSTUFfU1BEX0lORk8sCisJWEZSTUFfU1BEX0hJTkZPLAorCV9fWEZSTUFfU1BEX01BWAorCisjZGVmaW5lIFhGUk1BX1NQRF9NQVggKF9fWEZSTUFfU1BEX01BWCAtIDEpCit9OworCitzdHJ1Y3QgeGZybXVfc3BkaW5mbyB7CisJX191MzIgaW5jbnQ7CisJX191MzIgb3V0Y250OworCV9fdTMyIGZ3ZGNudDsKKwlfX3UzMiBpbnNjbnQ7CisJX191MzIgb3V0c2NudDsKKwlfX3UzMiBmd2RzY250OworfTsKKworc3RydWN0IHhmcm11X3NwZGhpbmZvIHsKKwlfX3UzMiBzcGRoY250OworCV9fdTMyIHNwZGhtY250OworfTsKKworc3RydWN0IHhmcm1fdXNlcnNhX2luZm8geworCXN0cnVjdCB4ZnJtX3NlbGVjdG9yCQlzZWw7CisJc3RydWN0IHhmcm1faWQJCQlpZDsKKwl4ZnJtX2FkZHJlc3NfdAkJCXNhZGRyOworCXN0cnVjdCB4ZnJtX2xpZmV0aW1lX2NmZwlsZnQ7CisJc3RydWN0IHhmcm1fbGlmZXRpbWVfY3VyCWN1cmxmdDsKKwlzdHJ1Y3QgeGZybV9zdGF0cwkJc3RhdHM7CisJX191MzIJCQkJc2VxOworCV9fdTMyCQkJCXJlcWlkOworCV9fdTE2CQkJCWZhbWlseTsKKwlfX3U4CQkJCW1vZGU7CQkvKiBYRlJNX01PREVfeHh4ICovCisJX191OAkJCQlyZXBsYXlfd2luZG93OworCV9fdTgJCQkJZmxhZ3M7CisjZGVmaW5lIFhGUk1fU1RBVEVfTk9FQ04JMQorI2RlZmluZSBYRlJNX1NUQVRFX0RFQ0FQX0RTQ1AJMgorI2RlZmluZSBYRlJNX1NUQVRFX05PUE1UVURJU0MJNAorI2RlZmluZSBYRlJNX1NUQVRFX1dJTERSRUNWCTgKKyNkZWZpbmUgWEZSTV9TVEFURV9JQ01QCQkxNgorI2RlZmluZSBYRlJNX1NUQVRFX0FGX1VOU1BFQwkzMgorfTsKKworc3RydWN0IHhmcm1fdXNlcnNhX2lkIHsKKwl4ZnJtX2FkZHJlc3NfdAkJCWRhZGRyOworCV9fYmUzMgkJCQlzcGk7CisJX191MTYJCQkJZmFtaWx5OworCV9fdTgJCQkJcHJvdG87Cit9OworCitzdHJ1Y3QgeGZybV9hZXZlbnRfaWQgeworCXN0cnVjdCB4ZnJtX3VzZXJzYV9pZAkJc2FfaWQ7CisJeGZybV9hZGRyZXNzX3QJCQlzYWRkcjsKKwlfX3UzMgkJCQlmbGFnczsKKwlfX3UzMgkJCQlyZXFpZDsKK307CisKK3N0cnVjdCB4ZnJtX3VzZXJzcGlfaW5mbyB7CisJc3RydWN0IHhmcm1fdXNlcnNhX2luZm8JCWluZm87CisJX191MzIJCQkJbWluOworCV9fdTMyCQkJCW1heDsKK307CisKK3N0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfaW5mbyB7CisJc3RydWN0IHhmcm1fc2VsZWN0b3IJCXNlbDsKKwlzdHJ1Y3QgeGZybV9saWZldGltZV9jZmcJbGZ0OworCXN0cnVjdCB4ZnJtX2xpZmV0aW1lX2N1cgljdXJsZnQ7CisJX191MzIJCQkJcHJpb3JpdHk7CisJX191MzIJCQkJaW5kZXg7CisJX191OAkJCQlkaXI7CisJX191OAkJCQlhY3Rpb247CisjZGVmaW5lIFhGUk1fUE9MSUNZX0FMTE9XCTAKKyNkZWZpbmUgWEZSTV9QT0xJQ1lfQkxPQ0sJMQorCV9fdTgJCQkJZmxhZ3M7CisjZGVmaW5lIFhGUk1fUE9MSUNZX0xPQ0FMT0sJMQkvKiBBbGxvdyB1c2VyIHRvIG92ZXJyaWRlIGdsb2JhbCBwb2xpY3kgKi8KKwkvKiBBdXRvbWF0aWNhbGx5IGV4cGFuZCBzZWxlY3RvciB0byBpbmNsdWRlIG1hdGNoaW5nIElDTVAgcGF5bG9hZHMuICovCisjZGVmaW5lIFhGUk1fUE9MSUNZX0lDTVAJMgorCV9fdTgJCQkJc2hhcmU7Cit9OworCitzdHJ1Y3QgeGZybV91c2VycG9saWN5X2lkIHsKKwlzdHJ1Y3QgeGZybV9zZWxlY3RvcgkJc2VsOworCV9fdTMyCQkJCWluZGV4OworCV9fdTgJCQkJZGlyOworfTsKKworc3RydWN0IHhmcm1fdXNlcl9hY3F1aXJlIHsKKwlzdHJ1Y3QgeGZybV9pZAkJCWlkOworCXhmcm1fYWRkcmVzc190CQkJc2FkZHI7CisJc3RydWN0IHhmcm1fc2VsZWN0b3IJCXNlbDsKKwlzdHJ1Y3QgeGZybV91c2VycG9saWN5X2luZm8JcG9saWN5OworCV9fdTMyCQkJCWFhbGdvczsKKwlfX3UzMgkJCQllYWxnb3M7CisJX191MzIJCQkJY2FsZ29zOworCV9fdTMyCQkJCXNlcTsKK307CisKK3N0cnVjdCB4ZnJtX3VzZXJfZXhwaXJlIHsKKwlzdHJ1Y3QgeGZybV91c2Vyc2FfaW5mbwkJc3RhdGU7CisJX191OAkJCQloYXJkOworfTsKKworc3RydWN0IHhmcm1fdXNlcl9wb2xleHBpcmUgeworCXN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfaW5mbwlwb2w7CisJX191OAkJCQloYXJkOworfTsKKworc3RydWN0IHhmcm1fdXNlcnNhX2ZsdXNoIHsKKwlfX3U4CQkJCXByb3RvOworfTsKKworc3RydWN0IHhmcm1fdXNlcl9yZXBvcnQgeworCV9fdTgJCQkJcHJvdG87CisJc3RydWN0IHhmcm1fc2VsZWN0b3IJCXNlbDsKK307CisKKy8qIFVzZWQgYnkgTUlHUkFURSB0byBwYXNzIGFkZHJlc3NlcyBJS0Ugc2hvdWxkIHVzZSB0byBwZXJmb3JtCisgKiBTQSBuZWdvdGlhdGlvbiB3aXRoIHRoZSBwZWVyICovCitzdHJ1Y3QgeGZybV91c2VyX2ttYWRkcmVzcyB7CisJeGZybV9hZGRyZXNzX3QgICAgICAgICAgICAgICAgICBsb2NhbDsKKwl4ZnJtX2FkZHJlc3NfdCAgICAgICAgICAgICAgICAgIHJlbW90ZTsKKwlfX3UzMgkJCQlyZXNlcnZlZDsKKwlfX3UxNgkJCQlmYW1pbHk7Cit9OworCitzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGUgeworCXhmcm1fYWRkcmVzc190CQkJb2xkX2RhZGRyOworCXhmcm1fYWRkcmVzc190CQkJb2xkX3NhZGRyOworCXhmcm1fYWRkcmVzc190CQkJbmV3X2RhZGRyOworCXhmcm1fYWRkcmVzc190CQkJbmV3X3NhZGRyOworCV9fdTgJCQkJcHJvdG87CisJX191OAkJCQltb2RlOworCV9fdTE2CQkJCXJlc2VydmVkOworCV9fdTMyCQkJCXJlcWlkOworCV9fdTE2CQkJCW9sZF9mYW1pbHk7CisJX191MTYJCQkJbmV3X2ZhbWlseTsKK307CisKK3N0cnVjdCB4ZnJtX3VzZXJfbWFwcGluZyB7CisJc3RydWN0IHhmcm1fdXNlcnNhX2lkCQlpZDsKKwlfX3UzMgkJCQlyZXFpZDsKKwl4ZnJtX2FkZHJlc3NfdAkJCW9sZF9zYWRkcjsKKwl4ZnJtX2FkZHJlc3NfdAkJCW5ld19zYWRkcjsKKwlfX2JlMTYJCQkJb2xkX3Nwb3J0OworCV9fYmUxNgkJCQluZXdfc3BvcnQ7Cit9OworCisvKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3IgdXNlcnNwYWNlICovCisjZGVmaW5lIFhGUk1HUlBfQUNRVUlSRQkJMQorI2RlZmluZSBYRlJNR1JQX0VYUElSRQkJMgorI2RlZmluZSBYRlJNR1JQX1NBCQk0CisjZGVmaW5lIFhGUk1HUlBfUE9MSUNZCQk4CisjZGVmaW5lIFhGUk1HUlBfUkVQT1JUCQkweDIwCisKK2VudW0geGZybV9ubGdyb3VwcyB7CisJWEZSTU5MR1JQX05PTkUsCisjZGVmaW5lIFhGUk1OTEdSUF9OT05FCQlYRlJNTkxHUlBfTk9ORQorCVhGUk1OTEdSUF9BQ1FVSVJFLAorI2RlZmluZSBYRlJNTkxHUlBfQUNRVUlSRQlYRlJNTkxHUlBfQUNRVUlSRQorCVhGUk1OTEdSUF9FWFBJUkUsCisjZGVmaW5lIFhGUk1OTEdSUF9FWFBJUkUJWEZSTU5MR1JQX0VYUElSRQorCVhGUk1OTEdSUF9TQSwKKyNkZWZpbmUgWEZSTU5MR1JQX1NBCQlYRlJNTkxHUlBfU0EKKwlYRlJNTkxHUlBfUE9MSUNZLAorI2RlZmluZSBYRlJNTkxHUlBfUE9MSUNZCVhGUk1OTEdSUF9QT0xJQ1kKKwlYRlJNTkxHUlBfQUVWRU5UUywKKyNkZWZpbmUgWEZSTU5MR1JQX0FFVkVOVFMJWEZSTU5MR1JQX0FFVkVOVFMKKwlYRlJNTkxHUlBfUkVQT1JULAorI2RlZmluZSBYRlJNTkxHUlBfUkVQT1JUCVhGUk1OTEdSUF9SRVBPUlQKKwlYRlJNTkxHUlBfTUlHUkFURSwKKyNkZWZpbmUgWEZSTU5MR1JQX01JR1JBVEUJWEZSTU5MR1JQX01JR1JBVEUKKwlYRlJNTkxHUlBfTUFQUElORywKKyNkZWZpbmUgWEZSTU5MR1JQX01BUFBJTkcJWEZSTU5MR1JQX01BUFBJTkcKKwlfX1hGUk1OTEdSUF9NQVgKK307CisjZGVmaW5lIFhGUk1OTEdSUF9NQVgJKF9fWEZSTU5MR1JQX01BWCAtIDEpCisKKyNlbmRpZiAvKiBfTElOVVhfWEZSTV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbG9jYWxlLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbG9jYWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhmYzUzMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9sb2NhbGUuaApAQCAtMCwwICsxLDIxMCBAQAorLyogQ29weXJpZ2h0IChDKSAxOTkxLDE5OTIsMTk5NS0yMDAyLDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qCisgKglJU08gQzk5IFN0YW5kYXJkOiA3LjExIExvY2FsaXphdGlvbgk8bG9jYWxlLmg+CisgKi8KKworI2lmbmRlZglfTE9DQUxFX0gKKyNkZWZpbmUJX0xPQ0FMRV9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKyNkZWZpbmUgX19uZWVkX05VTEwKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxiaXRzL2xvY2FsZS5oPgorCitfX0JFR0lOX0RFQ0xTCisKKy8qIFRoZXNlIGFyZSB0aGUgcG9zc2liaWxpdGllcyBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHNldGxvY2FsZS4KKyAgIFRoZSBjb2RlIGFzc3VtZXMgdGhhdCB0aGUgbG93ZXN0IExDXyogc3ltYm9sIGhhcyB0aGUgdmFsdWUgemVyby4gICovCisjZGVmaW5lIExDX0NUWVBFICAgICAgICAgIF9fTENfQ1RZUEUKKyNkZWZpbmUgTENfTlVNRVJJQyAgICAgICAgX19MQ19OVU1FUklDCisjZGVmaW5lIExDX1RJTUUgICAgICAgICAgIF9fTENfVElNRQorI2RlZmluZSBMQ19DT0xMQVRFICAgICAgICBfX0xDX0NPTExBVEUKKyNkZWZpbmUgTENfTU9ORVRBUlkgICAgICAgX19MQ19NT05FVEFSWQorI2RlZmluZSBMQ19NRVNTQUdFUyAgICAgICBfX0xDX01FU1NBR0VTCisjZGVmaW5lCUxDX0FMTAkJICBfX0xDX0FMTAorI2RlZmluZSBMQ19QQVBFUgkgIF9fTENfUEFQRVIKKyNkZWZpbmUgTENfTkFNRQkJICBfX0xDX05BTUUKKyNkZWZpbmUgTENfQUREUkVTUwkgIF9fTENfQUREUkVTUworI2RlZmluZSBMQ19URUxFUEhPTkUJICBfX0xDX1RFTEVQSE9ORQorI2RlZmluZSBMQ19NRUFTVVJFTUVOVAkgIF9fTENfTUVBU1VSRU1FTlQKKyNkZWZpbmUgTENfSURFTlRJRklDQVRJT04gX19MQ19JREVOVElGSUNBVElPTgorCisKK19fQkVHSU5fTkFNRVNQQUNFX1NURAorCisvKiBTdHJ1Y3R1cmUgZ2l2aW5nIGluZm9ybWF0aW9uIGFib3V0IG51bWVyaWMgYW5kIG1vbmV0YXJ5IG5vdGF0aW9uLiAgKi8KK3N0cnVjdCBsY29udgoreworICAvKiBOdW1lcmljIChub24tbW9uZXRhcnkpIGluZm9ybWF0aW9uLiAgKi8KKworICBjaGFyICpkZWNpbWFsX3BvaW50OwkJLyogRGVjaW1hbCBwb2ludCBjaGFyYWN0ZXIuICAqLworICBjaGFyICp0aG91c2FuZHNfc2VwOwkJLyogVGhvdXNhbmRzIHNlcGFyYXRvci4gICovCisgIC8qIEVhY2ggZWxlbWVudCBpcyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBpbiBlYWNoIGdyb3VwOworICAgICBlbGVtZW50cyB3aXRoIGhpZ2hlciBpbmRpY2VzIGFyZSBmYXJ0aGVyIGxlZnQuCisgICAgIEFuIGVsZW1lbnQgd2l0aCB2YWx1ZSBDSEFSX01BWCBtZWFucyB0aGF0IG5vIGZ1cnRoZXIgZ3JvdXBpbmcgaXMgZG9uZS4KKyAgICAgQW4gZWxlbWVudCB3aXRoIHZhbHVlIDAgbWVhbnMgdGhhdCB0aGUgcHJldmlvdXMgZWxlbWVudCBpcyB1c2VkCisgICAgIGZvciBhbGwgZ3JvdXBzIGZhcnRoZXIgbGVmdC4gICovCisgIGNoYXIgKmdyb3VwaW5nOworCisgIC8qIE1vbmV0YXJ5IGluZm9ybWF0aW9uLiAgKi8KKworICAvKiBGaXJzdCB0aHJlZSBjaGFycyBhcmUgYSBjdXJyZW5jeSBzeW1ib2wgZnJvbSBJU08gNDIxNy4KKyAgICAgRm91cnRoIGNoYXIgaXMgdGhlIHNlcGFyYXRvci4gIEZpZnRoIGNoYXIgaXMgJ1wwJy4gICovCisgIGNoYXIgKmludF9jdXJyX3N5bWJvbDsKKyAgY2hhciAqY3VycmVuY3lfc3ltYm9sOwkvKiBMb2NhbCBjdXJyZW5jeSBzeW1ib2wuICAqLworICBjaGFyICptb25fZGVjaW1hbF9wb2ludDsJLyogRGVjaW1hbCBwb2ludCBjaGFyYWN0ZXIuICAqLworICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsJLyogVGhvdXNhbmRzIHNlcGFyYXRvci4gICovCisgIGNoYXIgKm1vbl9ncm91cGluZzsJCS8qIExpa2UgYGdyb3VwaW5nJyBlbGVtZW50IChhYm92ZSkuICAqLworICBjaGFyICpwb3NpdGl2ZV9zaWduOwkJLyogU2lnbiBmb3IgcG9zaXRpdmUgdmFsdWVzLiAgKi8KKyAgY2hhciAqbmVnYXRpdmVfc2lnbjsJCS8qIFNpZ24gZm9yIG5lZ2F0aXZlIHZhbHVlcy4gICovCisgIGNoYXIgaW50X2ZyYWNfZGlnaXRzOwkJLyogSW50J2wgZnJhY3Rpb25hbCBkaWdpdHMuICAqLworICBjaGFyIGZyYWNfZGlnaXRzOwkJLyogTG9jYWwgZnJhY3Rpb25hbCBkaWdpdHMuICAqLworICAvKiAxIGlmIGN1cnJlbmN5X3N5bWJvbCBwcmVjZWRlcyBhIHBvc2l0aXZlIHZhbHVlLCAwIGlmIHN1Y2NlZWRzLiAgKi8KKyAgY2hhciBwX2NzX3ByZWNlZGVzOworICAvKiAxIGlmZiBhIHNwYWNlIHNlcGFyYXRlcyBjdXJyZW5jeV9zeW1ib2wgZnJvbSBhIHBvc2l0aXZlIHZhbHVlLiAgKi8KKyAgY2hhciBwX3NlcF9ieV9zcGFjZTsKKyAgLyogMSBpZiBjdXJyZW5jeV9zeW1ib2wgcHJlY2VkZXMgYSBuZWdhdGl2ZSB2YWx1ZSwgMCBpZiBzdWNjZWVkcy4gICovCisgIGNoYXIgbl9jc19wcmVjZWRlczsKKyAgLyogMSBpZmYgYSBzcGFjZSBzZXBhcmF0ZXMgY3VycmVuY3lfc3ltYm9sIGZyb20gYSBuZWdhdGl2ZSB2YWx1ZS4gICovCisgIGNoYXIgbl9zZXBfYnlfc3BhY2U7CisgIC8qIFBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBzaWduIHBvc2l0aW9uczoKKyAgICAgMCBQYXJlbnRoZXNlcyBzdXJyb3VuZCB0aGUgcXVhbnRpdHkgYW5kIGN1cnJlbmN5X3N5bWJvbC4KKyAgICAgMSBUaGUgc2lnbiBzdHJpbmcgcHJlY2VkZXMgdGhlIHF1YW50aXR5IGFuZCBjdXJyZW5jeV9zeW1ib2wuCisgICAgIDIgVGhlIHNpZ24gc3RyaW5nIGZvbGxvd3MgdGhlIHF1YW50aXR5IGFuZCBjdXJyZW5jeV9zeW1ib2wuCisgICAgIDMgVGhlIHNpZ24gc3RyaW5nIGltbWVkaWF0ZWx5IHByZWNlZGVzIHRoZSBjdXJyZW5jeV9zeW1ib2wuCisgICAgIDQgVGhlIHNpZ24gc3RyaW5nIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIGN1cnJlbmN5X3N5bWJvbC4gICovCisgIGNoYXIgcF9zaWduX3Bvc247CisgIGNoYXIgbl9zaWduX3Bvc247CisjaWZkZWYgX19VU0VfSVNPQzk5CisgIC8qIDEgaWYgaW50X2N1cnJfc3ltYm9sIHByZWNlZGVzIGEgcG9zaXRpdmUgdmFsdWUsIDAgaWYgc3VjY2VlZHMuICAqLworICBjaGFyIGludF9wX2NzX3ByZWNlZGVzOworICAvKiAxIGlmZiBhIHNwYWNlIHNlcGFyYXRlcyBpbnRfY3Vycl9zeW1ib2wgZnJvbSBhIHBvc2l0aXZlIHZhbHVlLiAgKi8KKyAgY2hhciBpbnRfcF9zZXBfYnlfc3BhY2U7CisgIC8qIDEgaWYgaW50X2N1cnJfc3ltYm9sIHByZWNlZGVzIGEgbmVnYXRpdmUgdmFsdWUsIDAgaWYgc3VjY2VlZHMuICAqLworICBjaGFyIGludF9uX2NzX3ByZWNlZGVzOworICAvKiAxIGlmZiBhIHNwYWNlIHNlcGFyYXRlcyBpbnRfY3Vycl9zeW1ib2wgZnJvbSBhIG5lZ2F0aXZlIHZhbHVlLiAgKi8KKyAgY2hhciBpbnRfbl9zZXBfYnlfc3BhY2U7CisgIC8qIFBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBzaWduIHBvc2l0aW9uczoKKyAgICAgMCBQYXJlbnRoZXNlcyBzdXJyb3VuZCB0aGUgcXVhbnRpdHkgYW5kIGludF9jdXJyX3N5bWJvbC4KKyAgICAgMSBUaGUgc2lnbiBzdHJpbmcgcHJlY2VkZXMgdGhlIHF1YW50aXR5IGFuZCBpbnRfY3Vycl9zeW1ib2wuCisgICAgIDIgVGhlIHNpZ24gc3RyaW5nIGZvbGxvd3MgdGhlIHF1YW50aXR5IGFuZCBpbnRfY3Vycl9zeW1ib2wuCisgICAgIDMgVGhlIHNpZ24gc3RyaW5nIGltbWVkaWF0ZWx5IHByZWNlZGVzIHRoZSBpbnRfY3Vycl9zeW1ib2wuCisgICAgIDQgVGhlIHNpZ24gc3RyaW5nIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIGludF9jdXJyX3N5bWJvbC4gICovCisgIGNoYXIgaW50X3Bfc2lnbl9wb3NuOworICBjaGFyIGludF9uX3NpZ25fcG9zbjsKKyNlbHNlCisgIGNoYXIgX19pbnRfcF9jc19wcmVjZWRlczsKKyAgY2hhciBfX2ludF9wX3NlcF9ieV9zcGFjZTsKKyAgY2hhciBfX2ludF9uX2NzX3ByZWNlZGVzOworICBjaGFyIF9faW50X25fc2VwX2J5X3NwYWNlOworICBjaGFyIF9faW50X3Bfc2lnbl9wb3NuOworICBjaGFyIF9faW50X25fc2lnbl9wb3NuOworI2VuZGlmCit9OworCisKKy8qIFNldCBhbmQvb3IgcmV0dXJuIHRoZSBjdXJyZW50IGxvY2FsZS4gICovCitleHRlcm4gY2hhciAqc2V0bG9jYWxlIChpbnQgX19jYXRlZ29yeSwgX19jb25zdCBjaGFyICpfX2xvY2FsZSkgX19USFJPVzsKKworLyogUmV0dXJuIHRoZSBudW1lcmljL21vbmV0YXJ5IGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBsb2NhbGUuICAqLworZXh0ZXJuIHN0cnVjdCBsY29udiAqbG9jYWxlY29udiAodm9pZCkgX19USFJPVzsKKworX19FTkRfTkFNRVNQQUNFX1NURAorCisKKyNpZmRlZglfX1VTRV9HTlUKKy8qIFRoZSBjb25jZXB0IG9mIG9uZSBzdGF0aWMgbG9jYWxlIHBlciBjYXRlZ29yeSBpcyBub3QgdmVyeSB3ZWxsCisgICB0aG91Z2h0IG91dC4gIE1hbnkgYXBwbGljYXRpb25zIHdpbGwgbmVlZCB0byBwcm9jZXNzIGl0cyBkYXRhIHVzaW5nCisgICBpbmZvcm1hdGlvbiBmcm9tIHNldmVyYWwgZGlmZmVyZW50IGxvY2FsZXMuICBBbm90aGVyIGFwcGxpY2F0aW9uIGlzCisgICB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGludGVybmF0aW9uYWxpemF0aW9uIGhhbmRsaW5nIGluIHRoZQorICAgdXBjb21pbmcgSVNPIEMrKyBzdGFuZGFyZCBsaWJyYXJ5LiAgVG8gc3VwcG9ydCB0aGlzIGFub3RoZXIgc2V0IG9mCisgICB0aGUgZnVuY3Rpb25zIHVzaW5nIGxvY2FsZSBkYXRhIGV4aXN0IHdoaWNoIGhhdmUgYW4gYWRkaXRpb25hbAorICAgYXJndW1lbnQuCisKKyAgIEF0dGVudGlvbjogYWxsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgKm5vdCogc3RhbmRhcmRpemVkIGluIGFueSBmb3JtLgorICAgVGhpcyBpcyBhIHByb29mLW9mLWNvbmNlcHQgaW1wbGVtZW50YXRpb24uICAqLworCisvKiBHZXQgbG9jYWxlIGRhdGF0eXBlIGRlZmluaXRpb24uICAqLworIyBpbmNsdWRlIDx4bG9jYWxlLmg+CisKK3R5cGVkZWYgX19sb2NhbGVfdCBsb2NhbGVfdDsKKworLyogUmV0dXJuIGEgcmVmZXJlbmNlIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgc2V0IG9mIGxvY2FsZQorICAgZGF0YXNldHMuICBVbmxpa2UgZm9yIHRoZSBDQVRFR09SWSBwYXJhbWV0ZXIgZm9yIGBzZXRsb2NhbGUnIHRoZQorICAgQ0FURUdPUllfTUFTSyBwYXJhbWV0ZXIgaGVyZSB1c2VzIGEgc2luZ2xlIGJpdCBmb3IgZWFjaCBjYXRlZ29yeSwKKyAgIG1hZGUgYnkgT1InaW5nIHRvZ2V0aGVyIExDXypfTUFTSyBiaXRzIGFib3ZlLiAgKi8KK2V4dGVybiBfX2xvY2FsZV90IG5ld2xvY2FsZSAoaW50IF9fY2F0ZWdvcnlfbWFzaywgX19jb25zdCBjaGFyICpfX2xvY2FsZSwKKwkJCSAgICAgX19sb2NhbGVfdCBfX2Jhc2UpIF9fVEhST1c7CisKKy8qIFRoZXNlIGFyZSB0aGUgYml0cyB0aGF0IGNhbiBiZSBzZXQgaW4gdGhlIENBVEVHT1JZX01BU0sgYXJndW1lbnQgdG8KKyAgIGBuZXdsb2NhbGUnLiAgSW4gdGhlIEdOVSBpbXBsZW1lbnRhdGlvbiwgTENfRk9PX01BU0sgaGFzIHRoZSB2YWx1ZQorICAgb2YgKDEgPDwgTENfRk9PKSwgYnV0IHRoaXMgaXMgbm90IGEgcGFydCBvZiB0aGUgaW50ZXJmYWNlIHRoYXQKKyAgIGNhbGxlcnMgY2FuIGFzc3VtZSB3aWxsIGJlIHRydWUuICAqLworIyBkZWZpbmUgTENfQ1RZUEVfTUFTSwkJKDEgPDwgX19MQ19DVFlQRSkKKyMgZGVmaW5lIExDX05VTUVSSUNfTUFTSwkoMSA8PCBfX0xDX05VTUVSSUMpCisjIGRlZmluZSBMQ19USU1FX01BU0sJCSgxIDw8IF9fTENfVElNRSkKKyMgZGVmaW5lIExDX0NPTExBVEVfTUFTSwkoMSA8PCBfX0xDX0NPTExBVEUpCisjIGRlZmluZSBMQ19NT05FVEFSWV9NQVNLCSgxIDw8IF9fTENfTU9ORVRBUlkpCisjIGRlZmluZSBMQ19NRVNTQUdFU19NQVNLCSgxIDw8IF9fTENfTUVTU0FHRVMpCisjIGRlZmluZSBMQ19QQVBFUl9NQVNLCQkoMSA8PCBfX0xDX1BBUEVSKQorIyBkZWZpbmUgTENfTkFNRV9NQVNLCQkoMSA8PCBfX0xDX05BTUUpCisjIGRlZmluZSBMQ19BRERSRVNTX01BU0sJKDEgPDwgX19MQ19BRERSRVNTKQorIyBkZWZpbmUgTENfVEVMRVBIT05FX01BU0sJKDEgPDwgX19MQ19URUxFUEhPTkUpCisjIGRlZmluZSBMQ19NRUFTVVJFTUVOVF9NQVNLCSgxIDw8IF9fTENfTUVBU1VSRU1FTlQpCisjIGRlZmluZSBMQ19JREVOVElGSUNBVElPTl9NQVNLCSgxIDw8IF9fTENfSURFTlRJRklDQVRJT04pCisjIGRlZmluZSBMQ19BTExfTUFTSwkJKExDX0NUWVBFX01BU0sgXAorCQkJCSB8IExDX05VTUVSSUNfTUFTSyBcCisJCQkJIHwgTENfVElNRV9NQVNLIFwKKwkJCQkgfCBMQ19DT0xMQVRFX01BU0sgXAorCQkJCSB8IExDX01PTkVUQVJZX01BU0sgXAorCQkJCSB8IExDX01FU1NBR0VTX01BU0sgXAorCQkJCSB8IExDX1BBUEVSX01BU0sgXAorCQkJCSB8IExDX05BTUVfTUFTSyBcCisJCQkJIHwgTENfQUREUkVTU19NQVNLIFwKKwkJCQkgfCBMQ19URUxFUEhPTkVfTUFTSyBcCisJCQkJIHwgTENfTUVBU1VSRU1FTlRfTUFTSyBcCisJCQkJIHwgTENfSURFTlRJRklDQVRJT05fTUFTSyBcCisJCQkJICkKKworLyogUmV0dXJuIGEgZHVwbGljYXRlIG9mIHRoZSBzZXQgb2YgbG9jYWxlIGluIERBVEFTRVQuICBBbGwgdXNhZ2UKKyAgIGNvdW50ZXJzIGFyZSBpbmNyZWFzZWQgaWYgbmVjZXNzYXJ5LiAgKi8KK2V4dGVybiBfX2xvY2FsZV90IGR1cGxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIF9fVEhST1c7CisKKy8qIEZyZWUgdGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgbG9jYWxlIGRhdGFzZXQgcHJldmlvdXNseSByZXR1cm5lZAorICAgYnkgYSBjYWxsIHRvIGBzZXRsb2NhbGVfcicuICAqLworZXh0ZXJuIHZvaWQgZnJlZWxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIF9fVEhST1c7CisKKy8qIFN3aXRjaCB0aGUgY3VycmVudCB0aHJlYWQncyBsb2NhbGUgdG8gREFUQVNFVC4KKyAgIElmIERBVEFTRVQgaXMgbnVsbCwgaW5zdGVhZCBqdXN0IHJldHVybiB0aGUgY3VycmVudCBzZXR0aW5nLgorICAgVGhlIHNwZWNpYWwgdmFsdWUgTENfR0xPQkFMX0xPQ0FMRSBpcyB0aGUgaW5pdGlhbCBzZXR0aW5nCisgICBmb3IgYWxsIHRocmVhZHMgYW5kIGNhbiBhbHNvIGJlIGluc3RhbGxlZCBhbnkgdGltZSwgbWVhbmluZworICAgdGhlIHRocmVhZCB1c2VzIHRoZSBnbG9iYWwgc2V0dGluZ3MgY29udHJvbGxlZCBieSBgc2V0bG9jYWxlJy4gICovCitleHRlcm4gX19sb2NhbGVfdCB1c2Vsb2NhbGUgKF9fbG9jYWxlX3QgX19kYXRhc2V0KSBfX1RIUk9XOworCisvKiBUaGlzIHZhbHVlIGNhbiBiZSBwYXNzZWQgdG8gYHVzZWxvY2FsZScgYW5kIG1heSBiZSByZXR1cm5lZCBieSBpdC4KKyAgIFBhc3NpbmcgdGhpcyB2YWx1ZSB0byBhbnkgb3RoZXIgZnVuY3Rpb24gaGFzIHVuZGVmaW5lZCBiZWhhdmlvci4gICovCisjIGRlZmluZSBMQ19HTE9CQUxfTE9DQUxFCSgoX19sb2NhbGVfdCkgLTFMKQorCisjZW5kaWYKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIGxvY2FsZS5oICAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL21hbGxvYy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL21hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZDdhOGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbWFsbG9jLmgKQEAgLTAsMCArMSwxNzQgQEAKKy8qIFByb3RvdHlwZXMgYW5kIGRlZmluaXRpb24gZm9yIG1hbGxvYyBpbXBsZW1lbnRhdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OSwgMjAwMCwgMjAwMi0yMDA0LCAyMDA1LCAyMDA3CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfTUFMTE9DX0gKKyNkZWZpbmUgX01BTExPQ19IIDEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjIGRlZmluZSBfX21hbGxvY19wdHJfdCAgdm9pZCAqCisKKy8qIFVzZWQgYnkgR05VIGxpYmMgaW50ZXJuYWxzLiAqLworI2RlZmluZSBfX21hbGxvY19zaXplX3Qgc2l6ZV90CisjZGVmaW5lIF9fbWFsbG9jX3B0cmRpZmZfdCBwdHJkaWZmX3QKKworI2lmZGVmIF9fR05VQ19fCisKKyMgZGVmaW5lIF9fTUFMTE9DX1AoYXJncykJYXJncyBfX1RIUk9XCisvKiBUaGlzIG1hY3JvIHdpbGwgYmUgdXNlZCBmb3IgZnVuY3Rpb25zIHdoaWNoIG1pZ2h0IHRha2UgQysrIGNhbGxiYWNrCisgICBmdW5jdGlvbnMuICAqLworIyBkZWZpbmUgX19NQUxMT0NfUE1UKGFyZ3MpCWFyZ3MKKworI2Vsc2UJLyogTm90IEdDQy4gICovCisKKyMgZGVmaW5lIF9fTUFMTE9DX1AoYXJncykJYXJncworIyBkZWZpbmUgX19NQUxMT0NfUE1UKGFyZ3MpCWFyZ3MKKworI2VuZGlmCS8qIEdDQy4gICovCisKKworX19CRUdJTl9ERUNMUworCisvKiBBbGxvY2F0ZSBTSVpFIGJ5dGVzIG9mIG1lbW9yeS4gICovCitleHRlcm4gdm9pZCAqbWFsbG9jIF9fTUFMTE9DX1AgKChzaXplX3QgX19zaXplKSkgX19hdHRyaWJ1dGVfbWFsbG9jX18gX193dXI7CisKKy8qIEFsbG9jYXRlIE5NRU1CIGVsZW1lbnRzIG9mIFNJWkUgYnl0ZXMgZWFjaCwgYWxsIGluaXRpYWxpemVkIHRvIDAuICAqLworZXh0ZXJuIHZvaWQgKmNhbGxvYyBfX01BTExPQ19QICgoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpKQorICAgICAgIF9fYXR0cmlidXRlX21hbGxvY19fIF9fd3VyOworCisvKiBSZS1hbGxvY2F0ZSB0aGUgcHJldmlvdXNseSBhbGxvY2F0ZWQgYmxvY2sgaW4gX19wdHIsIG1ha2luZyB0aGUgbmV3CisgICBibG9jayBTSVpFIGJ5dGVzIGxvbmcuICAqLworLyogX19hdHRyaWJ1dGVfbWFsbG9jX18gaXMgbm90IHVzZWQsIGJlY2F1c2UgaWYgcmVhbGxvYyByZXR1cm5zCisgICB0aGUgc2FtZSBwb2ludGVyIHRoYXQgd2FzIHBhc3NlZCB0byBpdCwgYWxpYXNpbmcgbmVlZHMgdG8gYmUgYWxsb3dlZAorICAgYmV0d2VlbiBvYmplY3RzIHBvaW50ZWQgYnkgdGhlIG9sZCBhbmQgbmV3IHBvaW50ZXJzLiAgKi8KK2V4dGVybiB2b2lkICpyZWFsbG9jIF9fTUFMTE9DX1AgKCh2b2lkICpfX3B0ciwgc2l6ZV90IF9fc2l6ZSkpCisgICAgICAgX19hdHRyaWJ1dGVfd2Fybl91bnVzZWRfcmVzdWx0X187CisKKy8qIEZyZWUgYSBibG9jayBhbGxvY2F0ZWQgYnkgYG1hbGxvYycsIGByZWFsbG9jJyBvciBgY2FsbG9jJy4gICovCitleHRlcm4gdm9pZCBmcmVlIF9fTUFMTE9DX1AgKCh2b2lkICpfX3B0cikpOworCisvKiBGcmVlIGEgYmxvY2sgYWxsb2NhdGVkIGJ5IGBjYWxsb2MnLiAqLworZXh0ZXJuIHZvaWQgY2ZyZWUgX19NQUxMT0NfUCAoKHZvaWQgKl9fcHRyKSk7CisKKy8qIEFsbG9jYXRlIFNJWkUgYnl0ZXMgYWxsb2NhdGVkIHRvIEFMSUdOTUVOVCBieXRlcy4gICovCitleHRlcm4gdm9pZCAqbWVtYWxpZ24gX19NQUxMT0NfUCAoKHNpemVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSkpCisgICAgICAgX19hdHRyaWJ1dGVfbWFsbG9jX18gX193dXI7CisKKy8qIEFsbG9jYXRlIFNJWkUgYnl0ZXMgb24gYSBwYWdlIGJvdW5kYXJ5LiAgKi8KK2V4dGVybiB2b2lkICp2YWxsb2MgX19NQUxMT0NfUCAoKHNpemVfdCBfX3NpemUpKQorICAgICAgIF9fYXR0cmlidXRlX21hbGxvY19fIF9fd3VyOworCisvKiBFcXVpdmFsZW50IHRvIHZhbGxvYyhtaW5pbXVtLXBhZ2UtdGhhdC1ob2xkcyhuKSksIHRoYXQgaXMsIHJvdW5kIHVwCisgICBfX3NpemUgdG8gbmVhcmVzdCBwYWdlc2l6ZS4gKi8KK2V4dGVybiB2b2lkICogcHZhbGxvYyBfX01BTExPQ19QICgoc2l6ZV90IF9fc2l6ZSkpCisgICAgICAgX19hdHRyaWJ1dGVfbWFsbG9jX18gX193dXI7CisKKy8qIFVuZGVybHlpbmcgYWxsb2NhdGlvbiBmdW5jdGlvbjsgc3VjY2Vzc2l2ZSBjYWxscyBzaG91bGQgcmV0dXJuCisgICBjb250aWd1b3VzIHBpZWNlcyBvZiBtZW1vcnkuICAqLworZXh0ZXJuIHZvaWQgKigqX19tb3JlY29yZSkgX19NQUxMT0NfUE1UICgocHRyZGlmZl90IF9fc2l6ZSkpOworCisvKiBEZWZhdWx0IHZhbHVlIG9mIGBfX21vcmVjb3JlJy4gICovCitleHRlcm4gdm9pZCAqX19kZWZhdWx0X21vcmVjb3JlIF9fTUFMTE9DX1AgKChwdHJkaWZmX3QgX19zaXplKSkKKyAgICAgICBfX2F0dHJpYnV0ZV9tYWxsb2NfXzsKKworLyogU1ZJRDIvWFBHIG1hbGxpbmZvIHN0cnVjdHVyZSAqLworCitzdHJ1Y3QgbWFsbGluZm8geworICBpbnQgYXJlbmE7ICAgIC8qIG5vbi1tbWFwcGVkIHNwYWNlIGFsbG9jYXRlZCBmcm9tIHN5c3RlbSAqLworICBpbnQgb3JkYmxrczsgIC8qIG51bWJlciBvZiBmcmVlIGNodW5rcyAqLworICBpbnQgc21ibGtzOyAgIC8qIG51bWJlciBvZiBmYXN0YmluIGJsb2NrcyAqLworICBpbnQgaGJsa3M7ICAgIC8qIG51bWJlciBvZiBtbWFwcGVkIHJlZ2lvbnMgKi8KKyAgaW50IGhibGtoZDsgICAvKiBzcGFjZSBpbiBtbWFwcGVkIHJlZ2lvbnMgKi8KKyAgaW50IHVzbWJsa3M7ICAvKiBtYXhpbXVtIHRvdGFsIGFsbG9jYXRlZCBzcGFjZSAqLworICBpbnQgZnNtYmxrczsgIC8qIHNwYWNlIGF2YWlsYWJsZSBpbiBmcmVlZCBmYXN0YmluIGJsb2NrcyAqLworICBpbnQgdW9yZGJsa3M7IC8qIHRvdGFsIGFsbG9jYXRlZCBzcGFjZSAqLworICBpbnQgZm9yZGJsa3M7IC8qIHRvdGFsIGZyZWUgc3BhY2UgKi8KKyAgaW50IGtlZXBjb3N0OyAvKiB0b3AtbW9zdCwgcmVsZWFzYWJsZSAodmlhIG1hbGxvY190cmltKSBzcGFjZSAqLworfTsKKworLyogUmV0dXJucyBhIGNvcHkgb2YgdGhlIHVwZGF0ZWQgY3VycmVudCBtYWxsaW5mby4gKi8KK2V4dGVybiBzdHJ1Y3QgbWFsbGluZm8gbWFsbGluZm8gX19NQUxMT0NfUCAoKHZvaWQpKTsKKworLyogU1ZJRDIvWFBHIG1hbGxvcHQgb3B0aW9ucyAqLworI2lmbmRlZiBNX01YRkFTVAorIyBkZWZpbmUgTV9NWEZBU1QgIDEJLyogbWF4aW11bSByZXF1ZXN0IHNpemUgZm9yICJmYXN0YmlucyIgKi8KKyNlbmRpZgorI2lmbmRlZiBNX05MQkxLUworIyBkZWZpbmUgTV9OTEJMS1MgIDIJLyogVU5VU0VEIGluIHRoaXMgbWFsbG9jICovCisjZW5kaWYKKyNpZm5kZWYgTV9HUkFJTgorIyBkZWZpbmUgTV9HUkFJTiAgIDMJLyogVU5VU0VEIGluIHRoaXMgbWFsbG9jICovCisjZW5kaWYKKyNpZm5kZWYgTV9LRUVQCisjIGRlZmluZSBNX0tFRVAgICAgNAkvKiBVTlVTRUQgaW4gdGhpcyBtYWxsb2MgKi8KKyNlbmRpZgorCisvKiBtYWxsb3B0IG9wdGlvbnMgdGhhdCBhY3R1YWxseSBkbyBzb21ldGhpbmcgKi8KKyNkZWZpbmUgTV9UUklNX1RIUkVTSE9MRCAgICAtMQorI2RlZmluZSBNX1RPUF9QQUQgICAgICAgICAgIC0yCisjZGVmaW5lIE1fTU1BUF9USFJFU0hPTEQgICAgLTMKKyNkZWZpbmUgTV9NTUFQX01BWCAgICAgICAgICAtNAorI2RlZmluZSBNX0NIRUNLX0FDVElPTiAgICAgIC01CisjZGVmaW5lIE1fUEVSVFVSQgkgICAgLTYKKworLyogR2VuZXJhbCBTVklEL1hQRyBpbnRlcmZhY2UgdG8gdHVuYWJsZSBwYXJhbWV0ZXJzLiAqLworZXh0ZXJuIGludCBtYWxsb3B0IF9fTUFMTE9DX1AgKChpbnQgX19wYXJhbSwgaW50IF9fdmFsKSk7CisKKy8qIFJlbGVhc2UgYWxsIGJ1dCBfX3BhZCBieXRlcyBvZiBmcmVlZCB0b3AtbW9zdCBtZW1vcnkgYmFjayB0byB0aGUKKyAgIHN5c3RlbS4gUmV0dXJuIDEgaWYgc3VjY2Vzc2Z1bCwgZWxzZSAwLiAqLworZXh0ZXJuIGludCBtYWxsb2NfdHJpbSBfX01BTExPQ19QICgoc2l6ZV90IF9fcGFkKSk7CisKKy8qIFJlcG9ydCB0aGUgbnVtYmVyIG9mIHVzYWJsZSBhbGxvY2F0ZWQgYnl0ZXMgYXNzb2NpYXRlZCB3aXRoIGFsbG9jYXRlZAorICAgY2h1bmsgX19wdHIuICovCitleHRlcm4gc2l6ZV90IG1hbGxvY191c2FibGVfc2l6ZSBfX01BTExPQ19QICgodm9pZCAqX19wdHIpKTsKKworLyogUHJpbnRzIGJyaWVmIHN1bW1hcnkgc3RhdGlzdGljcyBvbiBzdGRlcnIuICovCitleHRlcm4gdm9pZCBtYWxsb2Nfc3RhdHMgX19NQUxMT0NfUCAoKHZvaWQpKTsKKworLyogUmVjb3JkIHRoZSBzdGF0ZSBvZiBhbGwgbWFsbG9jIHZhcmlhYmxlcyBpbiBhbiBvcGFxdWUgZGF0YSBzdHJ1Y3R1cmUuICovCitleHRlcm4gdm9pZCAqbWFsbG9jX2dldF9zdGF0ZSBfX01BTExPQ19QICgodm9pZCkpOworCisvKiBSZXN0b3JlIHRoZSBzdGF0ZSBvZiBhbGwgbWFsbG9jIHZhcmlhYmxlcyBmcm9tIGRhdGEgb2J0YWluZWQgd2l0aAorICAgbWFsbG9jX2dldF9zdGF0ZSgpLiAqLworZXh0ZXJuIGludCBtYWxsb2Nfc2V0X3N0YXRlIF9fTUFMTE9DX1AgKCh2b2lkICpfX3B0cikpOworCisvKiBDYWxsZWQgb25jZSB3aGVuIG1hbGxvYyBpcyBpbml0aWFsaXplZDsgcmVkZWZpbmluZyB0aGlzIHZhcmlhYmxlIGluCisgICB0aGUgYXBwbGljYXRpb24gcHJvdmlkZXMgdGhlIHByZWZlcnJlZCB3YXkgdG8gc2V0IHVwIHRoZSBob29rCisgICBwb2ludGVycy4gKi8KK2V4dGVybiB2b2lkICgqX19tYWxsb2NfaW5pdGlhbGl6ZV9ob29rKSBfX01BTExPQ19QTVQgKCh2b2lkKSk7CisvKiBIb29rcyBmb3IgZGVidWdnaW5nIGFuZCB1c2VyLWRlZmluZWQgdmVyc2lvbnMuICovCitleHRlcm4gdm9pZCAoKl9fZnJlZV9ob29rKSBfX01BTExPQ19QTVQgKCh2b2lkICpfX3B0ciwKKwkJCQkJX19jb25zdCBfX21hbGxvY19wdHJfdCkpOworZXh0ZXJuIHZvaWQgKigqX19tYWxsb2NfaG9vaykgX19NQUxMT0NfUE1UICgoc2l6ZV90IF9fc2l6ZSwKKwkJCQkJICAgICBfX2NvbnN0IF9fbWFsbG9jX3B0cl90KSk7CitleHRlcm4gdm9pZCAqKCpfX3JlYWxsb2NfaG9vaykgX19NQUxMT0NfUE1UICgodm9pZCAqX19wdHIsIHNpemVfdCBfX3NpemUsCisJCQkJCSAgICAgIF9fY29uc3QgX19tYWxsb2NfcHRyX3QpKTsKK2V4dGVybiB2b2lkICooKl9fbWVtYWxpZ25faG9vaykgX19NQUxMT0NfUE1UICgoc2l6ZV90IF9fYWxpZ25tZW50LAorCQkJCQkgICAgICAgc2l6ZV90IF9fc2l6ZSwKKwkJCQkJICAgICAgIF9fY29uc3QgX19tYWxsb2NfcHRyX3QpKTsKK2V4dGVybiB2b2lkICgqX19hZnRlcl9tb3JlY29yZV9ob29rKSBfX01BTExPQ19QTVQgKCh2b2lkKSk7CisKKy8qIEFjdGl2YXRlIGEgc3RhbmRhcmQgc2V0IG9mIGRlYnVnZ2luZyBob29rcy4gKi8KK2V4dGVybiB2b2lkIF9fbWFsbG9jX2NoZWNrX2luaXQgX19NQUxMT0NfUCAoKHZvaWQpKTsKKworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogbWFsbG9jLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9tYXRoLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbWF0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MGIyZTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbWF0aC5oCkBAIC0wLDAgKzEsNDY4IEBACisvKiBEZWNsYXJhdGlvbnMgZm9yIG1hdGggZnVuY3Rpb25zLgorICAgQ29weXJpZ2h0IChDKSAxOTkxLTE5OTMsIDE5OTUtMTk5OSwgMjAwMSwgMjAwMiwgMjAwNCwgMjAwNgorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qCisgKglJU08gQzk5IFN0YW5kYXJkOiA3LjEyIE1hdGhlbWF0aWNzCTxtYXRoLmg+CisgKi8KKworI2lmbmRlZglfTUFUSF9ICisjZGVmaW5lCV9NQVRIX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworX19CRUdJTl9ERUNMUworCisvKiBHZXQgbWFjaGluZS1kZXBlbmRlbnQgSFVHRV9WQUwgdmFsdWUgKHJldHVybmVkIG9uIG92ZXJmbG93KS4KKyAgIE9uIGFsbCBJRUVFNzU0IG1hY2hpbmVzLCB0aGlzIGlzICtJbmZpbml0eS4gICovCisjaW5jbHVkZSA8Yml0cy9odWdlX3ZhbC5oPgorI2lmZGVmIF9fVVNFX0lTT0M5OQorIyBpbmNsdWRlIDxiaXRzL2h1Z2VfdmFsZi5oPgorIyBpbmNsdWRlIDxiaXRzL2h1Z2VfdmFsbC5oPgorCisvKiBHZXQgbWFjaGluZS1kZXBlbmRlbnQgSU5GSU5JVFkgdmFsdWUuICAqLworIyBpbmNsdWRlIDxiaXRzL2luZi5oPgorCisvKiBHZXQgbWFjaGluZS1kZXBlbmRlbnQgTkFOIHZhbHVlIChyZXR1cm5lZCBmb3Igc29tZSBkb21haW4gZXJyb3JzKS4gICovCisjIGluY2x1ZGUgPGJpdHMvbmFuLmg+CisjZW5kaWYgLyogX19VU0VfSVNPQzk5ICovCisKKy8qIEdldCBnZW5lcmFsIGFuZCBJU08gQzk5IHNwZWNpZmljIGluZm9ybWF0aW9uLiAgKi8KKyNpbmNsdWRlIDxiaXRzL21hdGhkZWYuaD4KKworLyogVGhlIGZpbGUgPGJpdHMvbWF0aGNhbGxzLmg+IGNvbnRhaW5zIHRoZSBwcm90b3R5cGVzIGZvciBhbGwgdGhlCisgICBhY3R1YWwgbWF0aCBmdW5jdGlvbnMuICBUaGVzZSBtYWNyb3MgYXJlIHVzZWQgZm9yIHRob3NlIHByb3RvdHlwZXMsCisgICBzbyB3ZSBjYW4gZWFzaWx5IGRlY2xhcmUgZWFjaCBmdW5jdGlvbiBhcyBib3RoIGBuYW1lJyBhbmQgYF9fbmFtZScsCisgICBhbmQgY2FuIGRlY2xhcmUgdGhlIGZsb2F0IHZlcnNpb25zIGBuYW1lZicgYW5kIGBfX25hbWVmJy4gICovCisKKyNkZWZpbmUgX19NQVRIQ0FMTChmdW5jdGlvbixzdWZmaXgsIGFyZ3MpCVwKKyAgX19NQVRIREVDTCAoX01kb3VibGVfLGZ1bmN0aW9uLHN1ZmZpeCwgYXJncykKKyNkZWZpbmUgX19NQVRIREVDTCh0eXBlLCBmdW5jdGlvbixzdWZmaXgsIGFyZ3MpIFwKKyAgX19NQVRIREVDTF8xKHR5cGUsIGZ1bmN0aW9uLHN1ZmZpeCwgYXJncyk7IFwKKyAgX19NQVRIREVDTF8xKHR5cGUsIF9fQ09OQ0FUKF9fLGZ1bmN0aW9uKSxzdWZmaXgsIGFyZ3MpCisjZGVmaW5lIF9fTUFUSENBTExYKGZ1bmN0aW9uLHN1ZmZpeCwgYXJncywgYXR0cmliKQlcCisgIF9fTUFUSERFQ0xYIChfTWRvdWJsZV8sZnVuY3Rpb24sc3VmZml4LCBhcmdzLCBhdHRyaWIpCisjZGVmaW5lIF9fTUFUSERFQ0xYKHR5cGUsIGZ1bmN0aW9uLHN1ZmZpeCwgYXJncywgYXR0cmliKSBcCisgIF9fTUFUSERFQ0xfMSh0eXBlLCBmdW5jdGlvbixzdWZmaXgsIGFyZ3MpIF9fYXR0cmlidXRlX18gKGF0dHJpYik7IFwKKyAgX19NQVRIREVDTF8xKHR5cGUsIF9fQ09OQ0FUKF9fLGZ1bmN0aW9uKSxzdWZmaXgsIGFyZ3MpIF9fYXR0cmlidXRlX18gKGF0dHJpYikKKyNkZWZpbmUgX19NQVRIREVDTF8xKHR5cGUsIGZ1bmN0aW9uLHN1ZmZpeCwgYXJncykgXAorICBleHRlcm4gdHlwZSBfX01BVEhfUFJFQ05BTUUoZnVuY3Rpb24sc3VmZml4KSBhcmdzIF9fVEhST1cKKworI2RlZmluZSBfTWRvdWJsZV8gCQlkb3VibGUKKyNkZWZpbmUgX19NQVRIX1BSRUNOQU1FKG5hbWUscikJX19DT05DQVQobmFtZSxyKQorIyBkZWZpbmUgX01kb3VibGVfQkVHSU5fTkFNRVNQQUNFIF9fQkVHSU5fTkFNRVNQQUNFX1NURAorIyBkZWZpbmUgX01kb3VibGVfRU5EX05BTUVTUEFDRSAgIF9fRU5EX05BTUVTUEFDRV9TVEQKKyNpbmNsdWRlIDxiaXRzL21hdGhjYWxscy5oPgorI3VuZGVmCV9NZG91YmxlXworI3VuZGVmIF9NZG91YmxlX0JFR0lOX05BTUVTUEFDRQorI3VuZGVmIF9NZG91YmxlX0VORF9OQU1FU1BBQ0UKKyN1bmRlZglfX01BVEhfUFJFQ05BTUUKKworI2lmIGRlZmluZWQgX19VU0VfTUlTQyB8fCBkZWZpbmVkIF9fVVNFX0lTT0M5OQorCisKKy8qIEluY2x1ZGUgdGhlIGZpbGUgb2YgZGVjbGFyYXRpb25zIGFnYWluLCB0aGlzIHRpbWUgdXNpbmcgYGZsb2F0JworICAgaW5zdGVhZCBvZiBgZG91YmxlJyBhbmQgYXBwZW5kaW5nIGYgdG8gZWFjaCBmdW5jdGlvbiBuYW1lLiAgKi8KKworIyBpZm5kZWYgX01mbG9hdF8KKyMgIGRlZmluZSBfTWZsb2F0XwkJZmxvYXQKKyMgZW5kaWYKKyMgZGVmaW5lIF9NZG91YmxlXyAJCV9NZmxvYXRfCisjIGlmZGVmIF9fU1REQ19fCisjICBkZWZpbmUgX19NQVRIX1BSRUNOQU1FKG5hbWUscikgbmFtZSMjZiMjcgorIyBlbHNlCisjICBkZWZpbmUgX19NQVRIX1BSRUNOQU1FKG5hbWUscikgbmFtZS8qKi9mLyoqL3IKKyMgZW5kaWYKKyMgZGVmaW5lIF9NZG91YmxlX0JFR0lOX05BTUVTUEFDRSBfX0JFR0lOX05BTUVTUEFDRV9DOTkKKyMgZGVmaW5lIF9NZG91YmxlX0VORF9OQU1FU1BBQ0UgICBfX0VORF9OQU1FU1BBQ0VfQzk5CisjIGluY2x1ZGUgPGJpdHMvbWF0aGNhbGxzLmg+CisjIHVuZGVmCV9NZG91YmxlXworIyB1bmRlZiBfTWRvdWJsZV9CRUdJTl9OQU1FU1BBQ0UKKyMgdW5kZWYgX01kb3VibGVfRU5EX05BTUVTUEFDRQorIyB1bmRlZglfX01BVEhfUFJFQ05BTUUKKworIyBpZiAoX19TVERDX18gLSAwIHx8IF9fR05VQ19fIC0gMCkgXAorICAgICAmJiAoIWRlZmluZWQgX19OT19MT05HX0RPVUJMRV9NQVRIIHx8IGRlZmluZWQgX19MREJMX0NPTVBBVCkKKyMgIGlmZGVmIF9fTERCTF9DT01QQVQKKworIyAgIGlmZGVmIF9fVVNFX0lTT0M5OSAKK2V4dGVybiBmbG9hdCBfX25sZGJsX25leHR0b3dhcmRmIChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9feSkKKwkJCQkgIF9fVEhST1cgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOworIyAgICBpZmRlZiBfX1JFRElSRUNUX05USAorZXh0ZXJuIGZsb2F0IF9fUkVESVJFQ1RfTlRIIChuZXh0dG93YXJkZiwgKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KSwKKwkJCSAgICAgX19ubGRibF9uZXh0dG93YXJkZikKKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOworZXh0ZXJuIGRvdWJsZSBfX1JFRElSRUNUX05USCAobmV4dHRvd2FyZCwgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSksCisJCQkgICAgICBuZXh0YWZ0ZXIpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKK2V4dGVybiBsb25nIGRvdWJsZSBfX1JFRElSRUNUX05USCAobmV4dHRvd2FyZGwsCisJCQkJICAgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSwKKwkJCQkgICBuZXh0YWZ0ZXIpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKKyMgICAgZW5kaWYKKyMgICBlbmRpZgorCisvKiBJbmNsdWRlIHRoZSBmaWxlIG9mIGRlY2xhcmF0aW9ucyBhZ2FpbiwgdGhpcyB0aW1lIHVzaW5nIGBsb25nIGRvdWJsZScKKyAgIGluc3RlYWQgb2YgYGRvdWJsZScgYW5kIGFwcGVuZGluZyBsIHRvIGVhY2ggZnVuY3Rpb24gbmFtZS4gICovCisKKyMgICB1bmRlZiBfX01BVEhERUNMXzEKKyMgICBkZWZpbmUgX19NQVRIREVDTF8yKHR5cGUsIGZ1bmN0aW9uLHN1ZmZpeCwgYXJncywgYWxpYXMpIFwKKyAgZXh0ZXJuIHR5cGUgX19SRURJUkVDVF9OVEgoX19NQVRIX1BSRUNOQU1FKGZ1bmN0aW9uLHN1ZmZpeCksIFwKKwkJCSAgICAgYXJncywgYWxpYXMpCisjICAgZGVmaW5lIF9fTUFUSERFQ0xfMSh0eXBlLCBmdW5jdGlvbixzdWZmaXgsIGFyZ3MpIFwKKyAgX19NQVRIREVDTF8yKHR5cGUsIGZ1bmN0aW9uLHN1ZmZpeCwgYXJncywgX19DT05DQVQoZnVuY3Rpb24sc3VmZml4KSkKKyMgIGVuZGlmCisKKyMgIGlmbmRlZiBfTWxvbmdfZG91YmxlXworIyAgIGRlZmluZSBfTWxvbmdfZG91YmxlXwlsb25nIGRvdWJsZQorIyAgZW5kaWYKKyMgIGRlZmluZSBfTWRvdWJsZV8gCQlfTWxvbmdfZG91YmxlXworIyAgaWZkZWYgX19TVERDX18KKyMgICBkZWZpbmUgX19NQVRIX1BSRUNOQU1FKG5hbWUscikgbmFtZSMjbCMjcgorIyAgZWxzZQorIyAgIGRlZmluZSBfX01BVEhfUFJFQ05BTUUobmFtZSxyKSBuYW1lLyoqL2wvKiovcgorIyAgZW5kaWYKKyMgIGRlZmluZSBfTWRvdWJsZV9CRUdJTl9OQU1FU1BBQ0UgX19CRUdJTl9OQU1FU1BBQ0VfQzk5CisjICBkZWZpbmUgX01kb3VibGVfRU5EX05BTUVTUEFDRSAgIF9fRU5EX05BTUVTUEFDRV9DOTkKKyMgIGluY2x1ZGUgPGJpdHMvbWF0aGNhbGxzLmg+CisjICB1bmRlZiBfTWRvdWJsZV8KKyMgdW5kZWYgX01kb3VibGVfQkVHSU5fTkFNRVNQQUNFCisjIHVuZGVmIF9NZG91YmxlX0VORF9OQU1FU1BBQ0UKKyMgIHVuZGVmIF9fTUFUSF9QUkVDTkFNRQorCisjIGVuZGlmIC8qIF9fU1REQ19fIHx8IF9fR05VQ19fICovCisKKyNlbmRpZgkvKiBVc2UgbWlzYyBvciBJU08gQzk5LiAgKi8KKyN1bmRlZglfX01BVEhERUNMXzEKKyN1bmRlZglfX01BVEhERUNMCisjdW5kZWYJX19NQVRIQ0FMTAorCisKKyNpZiBkZWZpbmVkIF9fVVNFX01JU0MgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTgorLyogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGJ5IGBnYW1tYScgYW5kIGBsZ2FtbWEnLiAgKi8KK2V4dGVybiBpbnQgc2lnbmdhbTsKKyNlbmRpZgorCisKKy8qIElTTyBDOTkgZGVmaW5lcyBzb21lIGdlbmVyaWMgbWFjcm9zIHdoaWNoIHdvcmsgb24gYW55IGRhdGEgdHlwZS4gICovCisjaWZkZWYgX19VU0VfSVNPQzk5CisKKy8qIEdldCB0aGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHZhbHVlcyBkZXNjcmliaW5nIHRoZSBmbG9hdGluZy1wb2ludAorICAgZXZhbHVhdGlvbi4gIFRoZSBmb2xsb3dpbmcgc3ltYm9scyB3aWxsIGdldCBkZWZpbmVkOgorCisgICAgZmxvYXRfdAlmbG9hdGluZy1wb2ludCB0eXBlIGF0IGxlYXN0IGFzIHdpZGUgYXMgYGZsb2F0JyB1c2VkCisJCXRvIGV2YWx1YXRlIGBmbG9hdCcgZXhwcmVzc2lvbnMKKyAgICBkb3VibGVfdAlmbG9hdGluZy1wb2ludCB0eXBlIGF0IGxlYXN0IGFzIHdpZGUgYXMgYGRvdWJsZScgdXNlZAorCQl0byBldmFsdWF0ZSBgZG91YmxlJyBleHByZXNzaW9ucworCisgICAgRkxUX0VWQUxfTUVUSE9ECisJCURlZmluZWQgdG8KKwkJICAwCWlmIGBmbG9hdF90JyBpcyBgZmxvYXQnIGFuZCBgZG91YmxlX3QnIGlzIGBkb3VibGUnCisJCSAgMQlpZiBgZmxvYXRfdCcgYW5kIGBkb3VibGVfdCcgYXJlIGBkb3VibGUnCisJCSAgMglpZiBgZmxvYXRfdCcgYW5kIGBkb3VibGVfdCcgYXJlIGBsb25nIGRvdWJsZScKKwkJICBlbHNlCWBmbG9hdF90JyBhbmQgYGRvdWJsZV90JyBhcmUgdW5zcGVjaWZpZWQKKworICAgIElORklOSVRZCXJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbmZpbml0eSB2YWx1ZSBvZiB0eXBlIGBmbG9hdCcKKworICAgIEZQX0ZBU1RfRk1BCisgICAgRlBfRkFTVF9GTUFGCisgICAgRlBfRkFTVF9GTUFMCisJCUlmIGRlZmluZWQgaXQgaW5kaWNhdGVzIHRoYXQgdGhlIGBmbWEnIGZ1bmN0aW9uCisJCWdlbmVyYWxseSBleGVjdXRlcyBhYm91dCBhcyBmYXN0IGFzIGEgbXVsdGlwbHkgYW5kIGFuIGFkZC4KKwkJVGhpcyBtYWNybyBpcyBkZWZpbmVkIG9ubHkgaWZmIHRoZSBgZm1hJyBmdW5jdGlvbiBpcworCQlpbXBsZW1lbnRlZCBkaXJlY3RseSB3aXRoIGEgaGFyZHdhcmUgbXVsdGlwbHktYWRkIGluc3RydWN0aW9ucy4KKworICAgIEZQX0lMT0dCMAlFeHBhbmRzIHRvIGEgdmFsdWUgcmV0dXJuZWQgYnkgYGlsb2diICgwLjApJy4KKyAgICBGUF9JTE9HQk5BTglFeHBhbmRzIHRvIGEgdmFsdWUgcmV0dXJuZWQgYnkgYGlsb2diIChOQU4pJy4KKworICAgIERFQ0lNQUxfRElHCU51bWJlciBvZiBkZWNpbWFsIGRpZ2l0cyBzdXBwb3J0ZWQgYnkgY29udmVyc2lvbiBiZXR3ZWVuCisJCWRlY2ltYWwgYW5kIGFsbCBpbnRlcm5hbCBmbG9hdGluZy1wb2ludCBmb3JtYXRzLgorCisqLworCisvKiBBbGwgZmxvYXRpbmctcG9pbnQgbnVtYmVycyBjYW4gYmUgcHV0IGluIG9uZSBvZiB0aGVzZSBjYXRlZ29yaWVzLiAgKi8KK2VudW0KKyAgeworICAgIEZQX05BTiwKKyMgZGVmaW5lIEZQX05BTiBGUF9OQU4KKyAgICBGUF9JTkZJTklURSwKKyMgZGVmaW5lIEZQX0lORklOSVRFIEZQX0lORklOSVRFCisgICAgRlBfWkVSTywKKyMgZGVmaW5lIEZQX1pFUk8gRlBfWkVSTworICAgIEZQX1NVQk5PUk1BTCwKKyMgZGVmaW5lIEZQX1NVQk5PUk1BTCBGUF9TVUJOT1JNQUwKKyAgICBGUF9OT1JNQUwKKyMgZGVmaW5lIEZQX05PUk1BTCBGUF9OT1JNQUwKKyAgfTsKKworLyogUmV0dXJuIG51bWJlciBvZiBjbGFzc2lmaWNhdGlvbiBhcHByb3ByaWF0ZSBmb3IgWC4gICovCisjIGlmZGVmIF9fTk9fTE9OR19ET1VCTEVfTUFUSAorIyAgZGVmaW5lIGZwY2xhc3NpZnkoeCkgXAorICAgICAoc2l6ZW9mICh4KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKHgpIDogX19mcGNsYXNzaWZ5ICh4KSkKKyMgZWxzZQorIyAgZGVmaW5lIGZwY2xhc3NpZnkoeCkgXAorICAgICAoc2l6ZW9mICh4KSA9PSBzaXplb2YgKGZsb2F0KQkJCQkJICAgICAgXAorICAgICAgPyBfX2ZwY2xhc3NpZnlmICh4KQkJCQkJCSAgICAgIFwKKyAgICAgIDogc2l6ZW9mICh4KSA9PSBzaXplb2YgKGRvdWJsZSkJCQkJCSAgICAgIFwKKyAgICAgID8gX19mcGNsYXNzaWZ5ICh4KSA6IF9fZnBjbGFzc2lmeWwgKHgpKQorIyBlbmRpZgorCisvKiBSZXR1cm4gbm9uemVybyB2YWx1ZSBpZiBzaWduIG9mIFggaXMgbmVnYXRpdmUuICAqLworIyBpZmRlZiBfX05PX0xPTkdfRE9VQkxFX01BVEgKKyMgIGRlZmluZSBzaWduYml0KHgpIFwKKyAgICAgKHNpemVvZiAoeCkgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX3NpZ25iaXRmICh4KSA6IF9fc2lnbmJpdCAoeCkpCisjIGVsc2UKKyMgIGRlZmluZSBzaWduYml0KHgpIFwKKyAgICAgKHNpemVvZiAoeCkgPT0gc2l6ZW9mIChmbG9hdCkJCQkJCSAgICAgIFwKKyAgICAgID8gX19zaWduYml0ZiAoeCkJCQkJCQkJICAgICAgXAorICAgICAgOiBzaXplb2YgKHgpID09IHNpemVvZiAoZG91YmxlKQkJCQkJICAgICAgXAorICAgICAgPyBfX3NpZ25iaXQgKHgpIDogX19zaWduYml0bCAoeCkpCisjIGVuZGlmCisKKy8qIFJldHVybiBub256ZXJvIHZhbHVlIGlmIFggaXMgbm90ICstSW5mIG9yIE5hTi4gICovCisjIGlmZGVmIF9fTk9fTE9OR19ET1VCTEVfTUFUSAorIyAgZGVmaW5lIGlzZmluaXRlKHgpIFwKKyAgICAgKHNpemVvZiAoeCkgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2Zpbml0ZWYgKHgpIDogX19maW5pdGUgKHgpKQorIyBlbHNlCisjICBkZWZpbmUgaXNmaW5pdGUoeCkgXAorICAgICAoc2l6ZW9mICh4KSA9PSBzaXplb2YgKGZsb2F0KQkJCQkJICAgICAgXAorICAgICAgPyBfX2Zpbml0ZWYgKHgpCQkJCQkJCSAgICAgIFwKKyAgICAgIDogc2l6ZW9mICh4KSA9PSBzaXplb2YgKGRvdWJsZSkJCQkJCSAgICAgIFwKKyAgICAgID8gX19maW5pdGUgKHgpIDogX19maW5pdGVsICh4KSkKKyMgZW5kaWYKKworLyogUmV0dXJuIG5vbnplcm8gdmFsdWUgaWYgWCBpcyBuZWl0aGVyIHplcm8sIHN1Ym5vcm1hbCwgSW5mLCBub3IgTmFOLiAgKi8KKyMgZGVmaW5lIGlzbm9ybWFsKHgpIChmcGNsYXNzaWZ5ICh4KSA9PSBGUF9OT1JNQUwpCisKKy8qIFJldHVybiBub256ZXJvIHZhbHVlIGlmIFggaXMgYSBOYU4uICBXZSBjb3VsZCB1c2UgYGZwY2xhc3NpZnknIGJ1dAorICAgd2UgYWxyZWFkeSBoYXZlIHRoaXMgZnVuY3Rpb25zIGBfX2lzbmFuJyBhbmQgaXQgaXMgZmFzdGVyLiAgKi8KKyMgaWZkZWYgX19OT19MT05HX0RPVUJMRV9NQVRICisjICBkZWZpbmUgaXNuYW4oeCkgXAorICAgICAoc2l6ZW9mICh4KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9faXNuYW5mICh4KSA6IF9faXNuYW4gKHgpKQorIyBlbHNlCisjICBkZWZpbmUgaXNuYW4oeCkgXAorICAgICAoc2l6ZW9mICh4KSA9PSBzaXplb2YgKGZsb2F0KQkJCQkJICAgICAgXAorICAgICAgPyBfX2lzbmFuZiAoeCkJCQkJCQkJICAgICAgXAorICAgICAgOiBzaXplb2YgKHgpID09IHNpemVvZiAoZG91YmxlKQkJCQkJICAgICAgXAorICAgICAgPyBfX2lzbmFuICh4KSA6IF9faXNuYW5sICh4KSkKKyMgZW5kaWYKKworLyogUmV0dXJuIG5vbnplcm8gdmFsdWUgaXMgWCBpcyBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBpbmZpbml0eS4gICovCisjIGlmZGVmIF9fTk9fTE9OR19ET1VCTEVfTUFUSAorIyAgZGVmaW5lIGlzaW5mKHgpIFwKKyAgICAgKHNpemVvZiAoeCkgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2lzaW5mZiAoeCkgOiBfX2lzaW5mICh4KSkKKyMgZWxzZQorIyAgZGVmaW5lIGlzaW5mKHgpIFwKKyAgICAgKHNpemVvZiAoeCkgPT0gc2l6ZW9mIChmbG9hdCkJCQkJCSAgICAgIFwKKyAgICAgID8gX19pc2luZmYgKHgpCQkJCQkJCSAgICAgIFwKKyAgICAgIDogc2l6ZW9mICh4KSA9PSBzaXplb2YgKGRvdWJsZSkJCQkJCSAgICAgIFwKKyAgICAgID8gX19pc2luZiAoeCkgOiBfX2lzaW5mbCAoeCkpCisjIGVuZGlmCisKKy8qIEJpdG1hc2tzIGZvciB0aGUgbWF0aF9lcnJoYW5kbGluZyBtYWNyby4gICovCisjIGRlZmluZSBNQVRIX0VSUk5PCTEJLyogZXJybm8gc2V0IGJ5IG1hdGggZnVuY3Rpb25zLiAgKi8KKyMgZGVmaW5lIE1BVEhfRVJSRVhDRVBUCTIJLyogRXhjZXB0aW9ucyByYWlzZWQgYnkgbWF0aCBmdW5jdGlvbnMuICAqLworCisjZW5kaWYgLyogVXNlIElTTyBDOTkuICAqLworCisjaWZkZWYJX19VU0VfTUlTQworLyogU3VwcG9ydCBmb3IgdmFyaW91cyBkaWZmZXJlbnQgc3RhbmRhcmQgZXJyb3IgaGFuZGxpbmcgYmVoYXZpb3JzLiAgKi8KK3R5cGVkZWYgZW51bQoreworICBfSUVFRV8gPSAtMSwJLyogQWNjb3JkaW5nIHRvIElFRUUgNzU0L0lFRUUgODU0LiAgKi8KKyAgX1NWSURfLAkvKiBBY2NvcmRpbmcgdG8gU3lzdGVtIFYsIHJlbGVhc2UgNC4gICovCisgIF9YT1BFTl8sCS8qIE5vd2FkYXlzIGFsc28gVW5peDk4LiAgKi8KKyAgX1BPU0lYXywKKyAgX0lTT0NfCS8qIEFjdHVhbGx5IHRoaXMgaXMgSVNPIEM5OS4gICovCit9IF9MSUJfVkVSU0lPTl9UWVBFOworCisvKiBUaGlzIHZhcmlhYmxlIGNhbiBiZSBjaGFuZ2VkIGF0IHJ1bi10aW1lIHRvIGFueSBvZiB0aGUgdmFsdWVzIGFib3ZlIHRvCisgICBhZmZlY3QgZmxvYXRpbmcgcG9pbnQgZXJyb3IgaGFuZGxpbmcgYmVoYXZpb3IgKGl0IG1heSBhbHNvIGJlIG5lY2Vzc2FyeQorICAgdG8gY2hhbmdlIHRoZSBoYXJkd2FyZSBGUFUgZXhjZXB0aW9uIHNldHRpbmdzKS4gICovCitleHRlcm4gX0xJQl9WRVJTSU9OX1RZUEUgX0xJQl9WRVJTSU9OOworI2VuZGlmCisKKworI2lmZGVmIF9fVVNFX1NWSUQKKy8qIEluIFNWSUQgZXJyb3IgaGFuZGxpbmcsIGBtYXRoZXJyJyBpcyBjYWxsZWQgd2l0aCB0aGlzIGRlc2NyaXB0aW9uCisgICBvZiB0aGUgZXhjZXB0aW9uYWwgY29uZGl0aW9uLgorCisgICBXZSBoYXZlIGEgcHJvYmxlbSB3aGVuIHVzaW5nIEMrKyBzaW5jZSBgZXhjZXB0aW9uJyBpcyBhIHJlc2VydmVkCisgICBuYW1lIGluIEMrKy4gICovCisjIGlmZGVmIF9fY3BsdXNwbHVzCitzdHJ1Y3QgX19leGNlcHRpb24KKyMgZWxzZQorc3RydWN0IGV4Y2VwdGlvbgorIyBlbmRpZgorICB7CisgICAgaW50IHR5cGU7CisgICAgY2hhciAqbmFtZTsKKyAgICBkb3VibGUgYXJnMTsKKyAgICBkb3VibGUgYXJnMjsKKyAgICBkb3VibGUgcmV0dmFsOworICB9OworCisjIGlmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gaW50IG1hdGhlcnIgKHN0cnVjdCBfX2V4Y2VwdGlvbiAqX19leGMpIHRocm93ICgpOworIyBlbHNlCitleHRlcm4gaW50IG1hdGhlcnIgKHN0cnVjdCBleGNlcHRpb24gKl9fZXhjKTsKKyMgZW5kaWYKKworIyBkZWZpbmUgWF9UTE9TUwkxLjQxNDg0NzU1MDQwNTY4ODAwMDAwZSsxNgorCisvKiBUeXBlcyBvZiBleGNlcHRpb25zIGluIHRoZSBgdHlwZScgZmllbGQuICAqLworIyBkZWZpbmUgRE9NQUlOCQkxCisjIGRlZmluZSBTSU5HCQkyCisjIGRlZmluZSBPVkVSRkxPVwkzCisjIGRlZmluZSBVTkRFUkZMT1cJNAorIyBkZWZpbmUgVExPU1MJCTUKKyMgZGVmaW5lIFBMT1NTCQk2CisKKy8qIFNWSUQgbW9kZSBzcGVjaWZpZXMgcmV0dXJuaW5nIHRoaXMgbGFyZ2UgdmFsdWUgaW5zdGVhZCBvZiBpbmZpbml0eS4gICovCisjIGRlZmluZSBIVUdFCQkzLjQwMjgyMzQ3ZSszOEYKKworI2Vsc2UJLyogIVNWSUQgKi8KKworIyBpZmRlZiBfX1VTRV9YT1BFTgorLyogWC9PcGVuIHdhbnRzIGFub3RoZXIgc3RyYW5nZSBjb25zdGFudC4gICovCisjICBkZWZpbmUgTUFYRkxPQVQJMy40MDI4MjM0N2UrMzhGCisjIGVuZGlmCisKKyNlbmRpZgkvKiBTVklEICovCisKKworLyogU29tZSB1c2VmdWwgY29uc3RhbnRzLiAgKi8KKyNpZiBkZWZpbmVkIF9fVVNFX0JTRCB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOCisjIGRlZmluZSBNX0UJCTIuNzE4MjgxODI4NDU5MDQ1MjM1NAkvKiBlICovCisjIGRlZmluZSBNX0xPRzJFCTEuNDQyNjk1MDQwODg4OTYzNDA3NAkvKiBsb2dfMiBlICovCisjIGRlZmluZSBNX0xPRzEwRQkwLjQzNDI5NDQ4MTkwMzI1MTgyNzY1CS8qIGxvZ18xMCBlICovCisjIGRlZmluZSBNX0xOMgkJMC42OTMxNDcxODA1NTk5NDUzMDk0MgkvKiBsb2dfZSAyICovCisjIGRlZmluZSBNX0xOMTAJCTIuMzAyNTg1MDkyOTk0MDQ1Njg0MDIJLyogbG9nX2UgMTAgKi8KKyMgZGVmaW5lIE1fUEkJCTMuMTQxNTkyNjUzNTg5NzkzMjM4NDYJLyogcGkgKi8KKyMgZGVmaW5lIE1fUElfMgkJMS41NzA3OTYzMjY3OTQ4OTY2MTkyMwkvKiBwaS8yICovCisjIGRlZmluZSBNX1BJXzQJCTAuNzg1Mzk4MTYzMzk3NDQ4MzA5NjIJLyogcGkvNCAqLworIyBkZWZpbmUgTV8xX1BJCQkwLjMxODMwOTg4NjE4Mzc5MDY3MTU0CS8qIDEvcGkgKi8KKyMgZGVmaW5lIE1fMl9QSQkJMC42MzY2MTk3NzIzNjc1ODEzNDMwOAkvKiAyL3BpICovCisjIGRlZmluZSBNXzJfU1FSVFBJCTEuMTI4Mzc5MTY3MDk1NTEyNTczOTAJLyogMi9zcXJ0KHBpKSAqLworIyBkZWZpbmUgTV9TUVJUMgkxLjQxNDIxMzU2MjM3MzA5NTA0ODgwCS8qIHNxcnQoMikgKi8KKyMgZGVmaW5lIE1fU1FSVDFfMgkwLjcwNzEwNjc4MTE4NjU0NzUyNDQwCS8qIDEvc3FydCgyKSAqLworI2VuZGlmCisKKy8qIFRoZSBhYm92ZSBjb25zdGFudHMgYXJlIG5vdCBhZGVxdWF0ZSBmb3IgY29tcHV0YXRpb24gdXNpbmcgYGxvbmcgZG91YmxlJ3MuCisgICBUaGVyZWZvcmUgd2UgcHJvdmlkZSBhcyBhbiBleHRlbnNpb24gY29uc3RhbnRzIHdpdGggc2ltaWxhciBuYW1lcyBhcyBhCisgICBHTlUgZXh0ZW5zaW9uLiAgUHJvdmlkZSBlbm91Z2ggZGlnaXRzIGZvciB0aGUgMTI4LWJpdCBJRUVFIHF1YWQuICAqLworI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgTV9FbAkJMi43MTgyODE4Mjg0NTkwNDUyMzUzNjAyODc0NzEzNTI2NjI1TCAgLyogZSAqLworIyBkZWZpbmUgTV9MT0cyRWwJMS40NDI2OTUwNDA4ODg5NjM0MDczNTk5MjQ2ODEwMDE4OTIxTCAgLyogbG9nXzIgZSAqLworIyBkZWZpbmUgTV9MT0cxMEVsCTAuNDM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA1MUwgIC8qIGxvZ18xMCBlICovCisjIGRlZmluZSBNX0xOMmwJCTAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NkwgIC8qIGxvZ19lIDIgKi8KKyMgZGVmaW5lIE1fTE4xMGwJMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyTCAgLyogbG9nX2UgMTAgKi8KKyMgZGVmaW5lIE1fUElsCQkzLjE0MTU5MjY1MzU4OTc5MzIzODQ2MjY0MzM4MzI3OTUwMjlMICAvKiBwaSAqLworIyBkZWZpbmUgTV9QSV8ybAkxLjU3MDc5NjMyNjc5NDg5NjYxOTIzMTMyMTY5MTYzOTc1MTRMICAvKiBwaS8yICovCisjIGRlZmluZSBNX1BJXzRsCTAuNzg1Mzk4MTYzMzk3NDQ4MzA5NjE1NjYwODQ1ODE5ODc1N0wgIC8qIHBpLzQgKi8KKyMgZGVmaW5lIE1fMV9QSWwJMC4zMTgzMDk4ODYxODM3OTA2NzE1Mzc3Njc1MjY3NDUwMjg3TCAgLyogMS9waSAqLworIyBkZWZpbmUgTV8yX1BJbAkwLjYzNjYxOTc3MjM2NzU4MTM0MzA3NTUzNTA1MzQ5MDA1NzRMICAvKiAyL3BpICovCisjIGRlZmluZSBNXzJfU1FSVFBJbAkxLjEyODM3OTE2NzA5NTUxMjU3Mzg5NjE1ODkwMzEyMTU0NTJMICAvKiAyL3NxcnQocGkpICovCisjIGRlZmluZSBNX1NRUlQybAkxLjQxNDIxMzU2MjM3MzA5NTA0ODgwMTY4ODcyNDIwOTY5ODFMICAvKiBzcXJ0KDIpICovCisjIGRlZmluZSBNX1NRUlQxXzJsCTAuNzA3MTA2NzgxMTg2NTQ3NTI0NDAwODQ0MzYyMTA0ODQ5MEwgIC8qIDEvc3FydCgyKSAqLworI2VuZGlmCisKKworLyogV2hlbiBjb21waWxpbmcgaW4gc3RyaWN0IElTTyBDIGNvbXBhdGlibGUgbW9kZSB3ZSBtdXN0IG5vdCB1c2UgdGhlCisgICBpbmxpbmUgZnVuY3Rpb25zIHNpbmNlIHRoZXksIGFtb25nIG90aGVyIHRoaW5ncywgZG8gbm90IHNldCB0aGUKKyAgIGBlcnJubycgdmFyaWFibGUgY29ycmVjdGx5LiAgKi8KKyNpZiBkZWZpbmVkIF9fU1RSSUNUX0FOU0lfXyAmJiAhZGVmaW5lZCBfX05PX01BVEhfSU5MSU5FUworIyBkZWZpbmUgX19OT19NQVRIX0lOTElORVMJMQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIF9fVVNFX0lTT0M5OSAmJiBfX0dOVUNfUFJFUkVRKDIsOTcpCisvKiBJU08gQzk5IGRlZmluZXMgc29tZSBtYWNyb3MgdG8gY29tcGFyZSBudW1iZXIgd2hpbGUgdGFraW5nIGNhcmUgZm9yCisgICB1bm9yZGVyZWQgbnVtYmVycy4gIE1hbnkgRlBVcyBwcm92aWRlIHNwZWNpYWwgaW5zdHJ1Y3Rpb25zIHRvIHN1cHBvcnQKKyAgIHRoZXNlIG9wZXJhdGlvbnMuICBHZW5lcmljIHN1cHBvcnQgaW4gR0NDIGZvciB0aGVzZSBhcyBidWlsdGlucyB3ZW50CisgICBpbiBiZWZvcmUgMy4wLjAsIGJ1dCBub3QgYWxsIGNwdXMgYWRkZWQgdGhlaXIgcGF0dGVybnMuICBXZSBkZWZpbmUKKyAgIHZlcnNpb25zIHRoYXQgdXNlIHRoZSBidWlsdGlucyBoZXJlLCBhbmQgPGJpdHMvbWF0aGlubGluZS5oPiB3aWxsCisgICB1bmRlZi9yZWRlZmluZSBhcyBhcHByb3ByaWF0ZSBmb3IgdGhlIHNwZWNpZmljIEdDQyB2ZXJzaW9uIGluIHVzZS4gICovCisjIGRlZmluZSBpc2dyZWF0ZXIoeCwgeSkJX19idWlsdGluX2lzZ3JlYXRlcih4LCB5KQorIyBkZWZpbmUgaXNncmVhdGVyZXF1YWwoeCwgeSkJX19idWlsdGluX2lzZ3JlYXRlcmVxdWFsKHgsIHkpCisjIGRlZmluZSBpc2xlc3MoeCwgeSkJCV9fYnVpbHRpbl9pc2xlc3MoeCwgeSkKKyMgZGVmaW5lIGlzbGVzc2VxdWFsKHgsIHkpCV9fYnVpbHRpbl9pc2xlc3NlcXVhbCh4LCB5KQorIyBkZWZpbmUgaXNsZXNzZ3JlYXRlcih4LCB5KQlfX2J1aWx0aW5faXNsZXNzZ3JlYXRlcih4LCB5KQorIyBkZWZpbmUgaXN1bm9yZGVyZWQodSwgdikJX19idWlsdGluX2lzdW5vcmRlcmVkKHUsIHYpCisjZW5kaWYKKworLyogR2V0IG1hY2hpbmUtZGVwZW5kZW50IGlubGluZSB2ZXJzaW9ucyAoaWYgdGhlcmUgYXJlIGFueSkuICAqLworI2lmZGVmIF9fVVNFX0VYVEVSTl9JTkxJTkVTCisjIGluY2x1ZGUgPGJpdHMvbWF0aGlubGluZS5oPgorI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9JU09DOTkKKy8qIElmIHdlJ3ZlIHN0aWxsIGdvdCB1bmRlZmluZWQgY29tcGFyaXNvbiBtYWNyb3MsIHByb3ZpZGUgZGVmYXVsdHMuICAqLworCisvKiBSZXR1cm4gbm9uemVybyB2YWx1ZSBpZiBYIGlzIGdyZWF0ZXIgdGhhbiBZLiAgKi8KKyMgaWZuZGVmIGlzZ3JlYXRlcgorIyAgZGVmaW5lIGlzZ3JlYXRlcih4LCB5KSBcCisgIChfX2V4dGVuc2lvbl9fCQkJCQkJCSAgICAgIFwKKyAgICh7IF9fdHlwZW9mX18oeCkgX194ID0gKHgpOyBfX3R5cGVvZl9fKHkpIF9feSA9ICh5KTsJCQkgICAgICBcCisgICAgICAhaXN1bm9yZGVyZWQgKF9feCwgX195KSAmJiBfX3ggPiBfX3k7IH0pKQorIyBlbmRpZgorCisvKiBSZXR1cm4gbm9uemVybyB2YWx1ZSBpZiBYIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBZLiAgKi8KKyMgaWZuZGVmIGlzZ3JlYXRlcmVxdWFsCisjICBkZWZpbmUgaXNncmVhdGVyZXF1YWwoeCwgeSkgXAorICAoX19leHRlbnNpb25fXwkJCQkJCQkgICAgICBcCisgICAoeyBfX3R5cGVvZl9fKHgpIF9feCA9ICh4KTsgX190eXBlb2ZfXyh5KSBfX3kgPSAoeSk7CQkJICAgICAgXAorICAgICAgIWlzdW5vcmRlcmVkIChfX3gsIF9feSkgJiYgX194ID49IF9feTsgfSkpCisjIGVuZGlmCisKKy8qIFJldHVybiBub256ZXJvIHZhbHVlIGlmIFggaXMgbGVzcyB0aGFuIFkuICAqLworIyBpZm5kZWYgaXNsZXNzCisjICBkZWZpbmUgaXNsZXNzKHgsIHkpIFwKKyAgKF9fZXh0ZW5zaW9uX18JCQkJCQkJICAgICAgXAorICAgKHsgX190eXBlb2ZfXyh4KSBfX3ggPSAoeCk7IF9fdHlwZW9mX18oeSkgX195ID0gKHkpOwkJCSAgICAgIFwKKyAgICAgICFpc3Vub3JkZXJlZCAoX194LCBfX3kpICYmIF9feCA8IF9feTsgfSkpCisjIGVuZGlmCisKKy8qIFJldHVybiBub256ZXJvIHZhbHVlIGlmIFggaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIFkuICAqLworIyBpZm5kZWYgaXNsZXNzZXF1YWwKKyMgIGRlZmluZSBpc2xlc3NlcXVhbCh4LCB5KSBcCisgIChfX2V4dGVuc2lvbl9fCQkJCQkJCSAgICAgIFwKKyAgICh7IF9fdHlwZW9mX18oeCkgX194ID0gKHgpOyBfX3R5cGVvZl9fKHkpIF9feSA9ICh5KTsJCQkgICAgICBcCisgICAgICAhaXN1bm9yZGVyZWQgKF9feCwgX195KSAmJiBfX3ggPD0gX195OyB9KSkKKyMgZW5kaWYKKworLyogUmV0dXJuIG5vbnplcm8gdmFsdWUgaWYgZWl0aGVyIFggaXMgbGVzcyB0aGFuIFkgb3IgWSBpcyBsZXNzIHRoYW4gWC4gICovCisjIGlmbmRlZiBpc2xlc3NncmVhdGVyCisjICBkZWZpbmUgaXNsZXNzZ3JlYXRlcih4LCB5KSBcCisgIChfX2V4dGVuc2lvbl9fCQkJCQkJCSAgICAgIFwKKyAgICh7IF9fdHlwZW9mX18oeCkgX194ID0gKHgpOyBfX3R5cGVvZl9fKHkpIF9feSA9ICh5KTsJCQkgICAgICBcCisgICAgICAhaXN1bm9yZGVyZWQgKF9feCwgX195KSAmJiAoX194IDwgX195IHx8IF9feSA8IF9feCk7IH0pKQorIyBlbmRpZgorCisvKiBSZXR1cm4gbm9uemVybyB2YWx1ZSBpZiBhcmd1bWVudHMgYXJlIHVub3JkZXJlZC4gICovCisjIGlmbmRlZiBpc3Vub3JkZXJlZAorIyAgZGVmaW5lIGlzdW5vcmRlcmVkKHUsIHYpIFwKKyAgKF9fZXh0ZW5zaW9uX18JCQkJCQkJICAgICAgXAorICAgKHsgX190eXBlb2ZfXyh1KSBfX3UgPSAodSk7IF9fdHlwZW9mX18odikgX192ID0gKHYpOwkJCSAgICAgIFwKKyAgICAgIGZwY2xhc3NpZnkgKF9fdSkgPT0gRlBfTkFOIHx8IGZwY2xhc3NpZnkgKF9fdikgPT0gRlBfTkFOOyB9KSkKKyMgZW5kaWYKKworI2VuZGlmCisKK19fRU5EX0RFQ0xTCisKKworI2VuZGlmIC8qIG1hdGguaCAgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9tY2hlY2suaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9tY2hlY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjVmMjFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL21jaGVjay5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfTUNIRUNLX0gKKyNkZWZpbmUgX01DSEVDS19ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKK19fQkVHSU5fREVDTFMKKworLyogUmV0dXJuIHZhbHVlcyBmb3IgYG1wcm9iZSc6IHRoZXNlIGFyZSB0aGUga2luZHMgb2YgaW5jb25zaXN0ZW5jaWVzIHRoYXQKKyAgIGBtY2hlY2snIGVuYWJsZXMgZGV0ZWN0aW9uIG9mLiAgKi8KK2VudW0gbWNoZWNrX3N0YXR1cworICB7CisgICAgTUNIRUNLX0RJU0FCTEVEID0gLTEsICAgICAgIC8qIENvbnNpc3RlbmN5IGNoZWNraW5nIGlzIG5vdCB0dXJuZWQgb24uICAqLworICAgIE1DSEVDS19PSywgICAgICAgICAgICAgICAgICAvKiBCbG9jayBpcyBmaW5lLiAgKi8KKyAgICBNQ0hFQ0tfRlJFRSwgICAgICAgICAgICAgICAgLyogQmxvY2sgZnJlZWQgdHdpY2UuICAqLworICAgIE1DSEVDS19IRUFELCAgICAgICAgICAgICAgICAvKiBNZW1vcnkgYmVmb3JlIHRoZSBibG9jayB3YXMgY2xvYmJlcmVkLiAgKi8KKyAgICBNQ0hFQ0tfVEFJTCAgICAgICAgICAgICAgICAgLyogTWVtb3J5IGFmdGVyIHRoZSBibG9jayB3YXMgY2xvYmJlcmVkLiAgKi8KKyAgfTsKKworCisvKiBBY3RpdmF0ZSBhIHN0YW5kYXJkIGNvbGxlY3Rpb24gb2YgZGVidWdnaW5nIGhvb2tzLiAgVGhpcyBtdXN0IGJlIGNhbGxlZAorICAgYmVmb3JlIGBtYWxsb2MnIGlzIGV2ZXIgY2FsbGVkLiAgQUJPUlRGVU5DIGlzIGNhbGxlZCB3aXRoIGFuIGVycm9yIGNvZGUKKyAgIChzZWUgZW51bSBhYm92ZSkgd2hlbiBhbiBpbmNvbnNpc3RlbmN5IGlzIGRldGVjdGVkLiAgSWYgQUJPUlRGVU5DIGlzCisgICBudWxsLCB0aGUgc3RhbmRhcmQgZnVuY3Rpb24gcHJpbnRzIG9uIHN0ZGVyciBhbmQgdGhlbiBjYWxscyBgYWJvcnQnLiAgKi8KK2V4dGVybiBpbnQgbWNoZWNrICh2b2lkICgqX19hYm9ydGZ1bmMpIChlbnVtIG1jaGVja19zdGF0dXMpKSBfX1RIUk9XOworCisvKiBTaW1pbGFyIHRvIGBtY2hlY2u0IGJ1dCBwZXJmb3JtcyBjaGVja3MgZm9yIGFsbCBibG9jayB3aGVuZXZlciBvbmUgb2YKKyAgIHRoZSBtZW1vcnkgaGFuZGxpbmcgZnVuY3Rpb25zIGlzIGNhbGxlZC4gIFRoaXMgY2FuIGJlIHZlcnkgc2xvdy4gICovCitleHRlcm4gaW50IG1jaGVja19wZWRhbnRpYyAodm9pZCAoKl9fYWJvcnRmdW5jKSAoZW51bSBtY2hlY2tfc3RhdHVzKSkgX19USFJPVzsKKworLyogRm9yY2UgY2hlY2sgb2YgYWxsIGJsb2NrcyBub3cuICAqLworZXh0ZXJuIHZvaWQgbWNoZWNrX2NoZWNrX2FsbCAodm9pZCk7CisKKy8qIENoZWNrIGZvciBhYmVycmF0aW9ucyBpbiBhIHBhcnRpY3VsYXIgbWFsbG9jJ2QgYmxvY2suICBZb3UgbXVzdCBoYXZlCisgICBjYWxsZWQgYG1jaGVjaycgYWxyZWFkeS4gIFRoZXNlIGFyZSB0aGUgc2FtZSBjaGVja3MgdGhhdCBgbWNoZWNrJyBkb2VzCisgICB3aGVuIHlvdSBmcmVlIG9yIHJlYWxsb2NhdGUgYSBibG9jay4gICovCitleHRlcm4gZW51bSBtY2hlY2tfc3RhdHVzIG1wcm9iZSAodm9pZCAqX19wdHIpIF9fVEhST1c7CisKKy8qIEFjdGl2YXRlIGEgc3RhbmRhcmQgY29sbGVjdGlvbiBvZiB0cmFjaW5nIGhvb2tzLiAgKi8KK2V4dGVybiB2b2lkIG10cmFjZSAodm9pZCkgX19USFJPVzsKK2V4dGVybiB2b2lkIG11bnRyYWNlICh2b2lkKSBfX1RIUk9XOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogbWNoZWNrLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9tZW1vcnkuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9tZW1vcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDNmYTZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL21lbW9yeS5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5MSwgMTk5NiwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyoKKyAqIFNWSUQKKyAqLworCisjaWZuZGVmCV9NRU1PUllfSAorI2RlZmluZQlfTUVNT1JZX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworCisjaWZuZGVmCV9TVFJJTkdfSAorIyBpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgkvKiBzdHJpbmcuaCAgKi8KKworCisjZW5kaWYJLyogbWVtb3J5LmggICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbW50ZW50LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbW50ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgyZTk1MwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9tbnRlbnQuaApAQCAtMCwwICsxLDk4IEBACisvKiBVdGlsaXRpZXMgZm9yIHJlYWRpbmcvd3JpdGluZyBmc3RhYiwgbXRhYiwgZXRjLgorICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmCV9NTlRFTlRfSAorI2RlZmluZQlfTU5URU5UX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNkZWZpbmUgX19uZWVkX0ZJTEUKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHBhdGhzLmg+CisKKworLyogRmlsZSBsaXN0aW5nIGNhbm9uaWNhbCBpbnRlcmVzdGluZyBtb3VudCBwb2ludHMuICAqLworI2RlZmluZQlNTlRUQUIJCV9QQVRIX01OVFRBQgkvKiBEZXByZWNhdGVkIGFsaWFzLiAgKi8KKworLyogRmlsZSBsaXN0aW5nIGN1cnJlbnRseSBhY3RpdmUgbW91bnQgcG9pbnRzLiAgKi8KKyNkZWZpbmUJTU9VTlRFRAkJX1BBVEhfTU9VTlRFRAkvKiBEZXByZWNhdGVkIGFsaWFzLiAgKi8KKworCisvKiBHZW5lcmFsIGZpbGVzeXN0ZW0gdHlwZXMuICAqLworI2RlZmluZSBNTlRUWVBFX0lHTk9SRQkiaWdub3JlIgkvKiBJZ25vcmUgdGhpcyBlbnRyeS4gICovCisjZGVmaW5lIE1OVFRZUEVfTkZTCSJuZnMiCQkvKiBOZXR3b3JrIGZpbGUgc3lzdGVtLiAgKi8KKyNkZWZpbmUgTU5UVFlQRV9TV0FQCSJzd2FwIgkJLyogU3dhcCBkZXZpY2UuICAqLworCisKKy8qIEdlbmVyaWMgbW91bnQgb3B0aW9ucy4gICovCisjZGVmaW5lIE1OVE9QVF9ERUZBVUxUUwkiZGVmYXVsdHMiCS8qIFVzZSBhbGwgZGVmYXVsdCBvcHRpb25zLiAgKi8KKyNkZWZpbmUgTU5UT1BUX1JPCSJybyIJCS8qIFJlYWQgb25seS4gICovCisjZGVmaW5lIE1OVE9QVF9SVwkicnciCQkvKiBSZWFkL3dyaXRlLiAgKi8KKyNkZWZpbmUgTU5UT1BUX1NVSUQJInN1aWQiCQkvKiBTZXQgdWlkIGFsbG93ZWQuICAqLworI2RlZmluZSBNTlRPUFRfTk9TVUlECSJub3N1aWQiCS8qIE5vIHNldCB1aWQgYWxsb3dlZC4gICovCisjZGVmaW5lIE1OVE9QVF9OT0FVVE8JIm5vYXV0byIJLyogRG8gbm90IGF1dG8gbW91bnQuICAqLworCisKK19fQkVHSU5fREVDTFMKKworLyogU3RydWN0dXJlIGRlc2NyaWJpbmcgYSBtb3VudCB0YWJsZSBlbnRyeS4gICovCitzdHJ1Y3QgbW50ZW50CisgIHsKKyAgICBjaGFyICptbnRfZnNuYW1lOwkJLyogRGV2aWNlIG9yIHNlcnZlciBmb3IgZmlsZXN5c3RlbS4gICovCisgICAgY2hhciAqbW50X2RpcjsJCS8qIERpcmVjdG9yeSBtb3VudGVkIG9uLiAgKi8KKyAgICBjaGFyICptbnRfdHlwZTsJCS8qIFR5cGUgb2YgZmlsZXN5c3RlbTogdWZzLCBuZnMsIGV0Yy4gICovCisgICAgY2hhciAqbW50X29wdHM7CQkvKiBDb21tYS1zZXBhcmF0ZWQgb3B0aW9ucyBmb3IgZnMuICAqLworICAgIGludCBtbnRfZnJlcTsJCS8qIER1bXAgZnJlcXVlbmN5IChpbiBkYXlzKS4gICovCisgICAgaW50IG1udF9wYXNzbm87CQkvKiBQYXNzIG51bWJlciBmb3IgYGZzY2snLiAgKi8KKyAgfTsKKworCisvKiBQcmVwYXJlIHRvIGJlZ2luIHJlYWRpbmcgYW5kL29yIHdyaXRpbmcgbW91bnQgdGFibGUgZW50cmllcyBmcm9tIHRoZQorICAgYmVnaW5uaW5nIG9mIEZJTEUuICBNT0RFIGlzIGFzIGZvciBgZm9wZW4nLiAgKi8KK2V4dGVybiBGSUxFICpzZXRtbnRlbnQgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX2NvbnN0IGNoYXIgKl9fbW9kZSkgX19USFJPVzsKKworLyogUmVhZCBvbmUgbW91bnQgdGFibGUgZW50cnkgZnJvbSBTVFJFQU0uICBSZXR1cm5zIGEgcG9pbnRlciB0byBzdG9yYWdlCisgICByZXVzZWQgb24gdGhlIG5leHQgY2FsbCwgb3IgbnVsbCBmb3IgRU9GIG9yIGVycm9yICh1c2UgZmVvZi9mZXJyb3IgdG8KKyAgIGNoZWNrKS4gICovCitleHRlcm4gc3RydWN0IG1udGVudCAqZ2V0bW50ZW50IChGSUxFICpfX3N0cmVhbSkgX19USFJPVzsKKworI2lmZGVmIF9fVVNFX01JU0MKKy8qIFJlZW50cmFudCB2ZXJzaW9uIG9mIHRoZSBhYm92ZSBmdW5jdGlvbi4gICovCitleHRlcm4gc3RydWN0IG1udGVudCAqZ2V0bW50ZW50X3IgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCisJCQkJICAgc3RydWN0IG1udGVudCAqX19yZXN0cmljdCBfX3Jlc3VsdCwKKwkJCQkgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAorCQkJCSAgIGludCBfX2J1ZnNpemUpIF9fVEhST1c7CisjZW5kaWYKKworLyogV3JpdGUgdGhlIG1vdW50IHRhYmxlIGVudHJ5IGRlc2NyaWJlZCBieSBNTlQgdG8gU1RSRUFNLgorICAgUmV0dXJuIHplcm8gb24gc3VjY2Vzcywgbm9uemVybyBvbiBmYWlsdXJlLiAgKi8KK2V4dGVybiBpbnQgYWRkbW50ZW50IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAorCQkgICAgICBfX2NvbnN0IHN0cnVjdCBtbnRlbnQgKl9fcmVzdHJpY3QgX19tbnQpIF9fVEhST1c7CisKKy8qIENsb3NlIGEgc3RyZWFtIG9wZW5lZCB3aXRoIGBzZXRtbnRlbnQnLiAgKi8KK2V4dGVybiBpbnQgZW5kbW50ZW50IChGSUxFICpfX3N0cmVhbSkgX19USFJPVzsKKworLyogU2VhcmNoIE1OVC0+bW50X29wdHMgZm9yIGFuIG9wdGlvbiBtYXRjaGluZyBPUFQuCisgICBSZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSBzdWJzdHJpbmcsIG9yIG51bGwgaWYgbm9uZSBmb3VuZC4gICovCitleHRlcm4gY2hhciAqaGFzbW50b3B0IChfX2NvbnN0IHN0cnVjdCBtbnRlbnQgKl9fbW50LAorCQkJX19jb25zdCBjaGFyICpfX29wdCkgX19USFJPVzsKKworCitfX0VORF9ERUNMUworCisjZW5kaWYJLyogbW50ZW50LmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9tb25ldGFyeS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL21vbmV0YXJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyMzRjYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9tb25ldGFyeS5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qIEhlYWRlciBmaWxlIGZvciBtb25ldGFyeSB2YWx1ZSBmb3JtYXR0aW5nIGZ1bmN0aW9ucy4KKyAgIENvcHlyaWdodCAoQykgMTk5NiwxOTk3LDE5OTgsMTk5OSwyMDAwLDIwMDIsMjAwNgorCUZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmCV9NT05FVEFSWV9ICisjZGVmaW5lCV9NT05FVEFSWV9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKy8qIEdldCBuZWVkZWQgdHlwZXMuICAqLworI2RlZmluZSBfX25lZWRfc2l6ZV90CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8Yml0cy90eXBlcy5oPgorCisjaWZuZGVmCV9fc3NpemVfdF9kZWZpbmVkCit0eXBlZGVmIF9fc3NpemVfdCBzc2l6ZV90OworIyBkZWZpbmUgX19zc2l6ZV90X2RlZmluZWQKKyNlbmRpZgorCisKK19fQkVHSU5fREVDTFMKKworLyogRm9ybWF0dGluZyBhIG1vbmV0YXJ5IHZhbHVlIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBsb2NhbGUuICAqLworZXh0ZXJuIHNzaXplX3Qgc3RyZm1vbiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNpemUsCisJCQlfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9mb3JtYXRfc3RyZm1vbl9fICgzLCA0KTsKKworI2lmZGVmIF9fVVNFX0dOVQorIyBpbmNsdWRlIDx4bG9jYWxlLmg+CisKKy8qIEZvcm1hdHRpbmcgYSBtb25ldGFyeSB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgbG9jYWxlLiAgKi8KK2V4dGVybiBzc2l6ZV90IHN0cmZtb25fbCAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNpemUsCisJCQkgIF9fbG9jYWxlX3QgbG9jLAorCQkJICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9mb3JtYXRfc3RyZm1vbl9fICg0LCA1KTsKKyNlbmRpZgorCisjaWZkZWYgX19MREJMX0NPTVBBVAorIyBpbmNsdWRlIDxiaXRzL21vbmV0YXJ5LWxkYmwuaD4KKyNlbmRpZgorCitfX0VORF9ERUNMUworCisjZW5kaWYJLyogbW9uZXRhcnkuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL21xdWV1ZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL21xdWV1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YzNlMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbXF1ZXVlLmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfTVFVRVVFX0gKKyNkZWZpbmUgX01RVUVVRV9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNkZWZpbmUgX19uZWVkX3NpZ2V2ZW50X3QKKyNpbmNsdWRlIDxiaXRzL3NpZ2luZm8uaD4KKyNkZWZpbmUgX19uZWVkX3RpbWVzcGVjCisjaW5jbHVkZSA8dGltZS5oPgorLyogR2V0IHRoZSBkZWZpbml0aW9uIG9mIG1xZF90IGFuZCBzdHJ1Y3QgbXFfYXR0ci4gICovCisjaW5jbHVkZSA8Yml0cy9tcXVldWUuaD4KKworX19CRUdJTl9ERUNMUworCisvKiBFc3RhYmxpc2ggY29ubmVjdGlvbiBiZXR3ZWVuIGEgcHJvY2VzcyBhbmQgYSBtZXNzYWdlIHF1ZXVlIE5BTUUgYW5kCisgICByZXR1cm4gbWVzc2FnZSBxdWV1ZSBkZXNjcmlwdG9yIG9yIChtcWRfdCkgLTEgb24gZXJyb3IuICBPRkxBRyBkZXRlcm1pbmVzCisgICB0aGUgdHlwZSBvZiBhY2Nlc3MgdXNlZC4gIElmIE9fQ1JFQVQgaXMgb24gT0ZMQUcsIHRoZSB0aGlyZCBhcmd1bWVudCBpcworICAgdGFrZW4gYXMgYSBgbW9kZV90JywgdGhlIG1vZGUgb2YgdGhlIGNyZWF0ZWQgbWVzc2FnZSBxdWV1ZSwgYW5kIHRoZSBmb3VydGgKKyAgIGFyZ3VtZW50IGlzIHRha2VuIGFzIGBzdHJ1Y3QgbXFfYXR0ciAqJywgcG9pbnRlciB0byBtZXNzYWdlIHF1ZXVlCisgICBhdHRyaWJ1dGVzLiAgSWYgdGhlIGZvdXJ0aCBhcmd1bWVudCBpcyBOVUxMLCBkZWZhdWx0IGF0dHJpYnV0ZXMgYXJlCisgICB1c2VkLiAgKi8KK2V4dGVybiBtcWRfdCBtcV9vcGVuIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgaW50IF9fb2ZsYWcsIC4uLikKKyAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKy8qIFJlbW92ZXMgdGhlIGFzc29jaWF0aW9uIGJldHdlZW4gbWVzc2FnZSBxdWV1ZSBkZXNjcmlwdG9yIE1RREVTIGFuZCBpdHMKKyAgIG1lc3NhZ2UgcXVldWUuICAqLworZXh0ZXJuIGludCBtcV9jbG9zZSAobXFkX3QgX19tcWRlcykgX19USFJPVzsKKworLyogUXVlcnkgc3RhdHVzIGFuZCBhdHRyaWJ1dGVzIG9mIG1lc3NhZ2UgcXVldWUgTVFERVMuICAqLworZXh0ZXJuIGludCBtcV9nZXRhdHRyIChtcWRfdCBfX21xZGVzLCBzdHJ1Y3QgbXFfYXR0ciAqX19tcXN0YXQpCisgIF9fVEhST1cgX19ub25udWxsICgoMikpOworCisvKiBTZXQgYXR0cmlidXRlcyBhc3NvY2lhdGVkIHdpdGggbWVzc2FnZSBxdWV1ZSBNUURFUyBhbmQgaWYgT01RU1RBVCBpcworICAgbm90IE5VTEwgYWxzbyBxdWVyeSBpdHMgb2xkIGF0dHJpYnV0ZXMuICAqLworZXh0ZXJuIGludCBtcV9zZXRhdHRyIChtcWRfdCBfX21xZGVzLAorCQkgICAgICAgX19jb25zdCBzdHJ1Y3QgbXFfYXR0ciAqX19yZXN0cmljdCBfX21xc3RhdCwKKwkJICAgICAgIHN0cnVjdCBtcV9hdHRyICpfX3Jlc3RyaWN0IF9fb21xc3RhdCkKKyAgX19USFJPVyBfX25vbm51bGwgKCgyKSk7CisKKy8qIFJlbW92ZSBtZXNzYWdlIHF1ZXVlIG5hbWVkIE5BTUUuICAqLworZXh0ZXJuIGludCBtcV91bmxpbmsgKF9fY29uc3QgY2hhciAqX19uYW1lKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworLyogUmVnaXN0ZXIgbm90aWZpY2F0aW9uIGlzc3VlZCB1cG9uIG1lc3NhZ2UgYXJyaXZhbCB0byBhbiBlbXB0eQorICAgbWVzc2FnZSBxdWV1ZSBNUURFUy4gICovCitleHRlcm4gaW50IG1xX25vdGlmeSAobXFkX3QgX19tcWRlcywgX19jb25zdCBzdHJ1Y3Qgc2lnZXZlbnQgKl9fbm90aWZpY2F0aW9uKQorICAgICBfX1RIUk9XOworCisvKiBSZWNlaXZlIHRoZSBvbGRlc3QgZnJvbSBoaWdoZXN0IHByaW9yaXR5IG1lc3NhZ2VzIGluIG1lc3NhZ2UgcXVldWUKKyAgIE1RREVTLiAgKi8KK2V4dGVybiBzc2l6ZV90IG1xX3JlY2VpdmUgKG1xZF90IF9fbXFkZXMsIGNoYXIgKl9fbXNnX3B0ciwgc2l6ZV90IF9fbXNnX2xlbiwKKwkJCSAgIHVuc2lnbmVkIGludCAqX19tc2dfcHJpbykgX19ub25udWxsICgoMikpOworCisvKiBBZGQgbWVzc2FnZSBwb2ludGVkIGJ5IE1TR19QVFIgdG8gbWVzc2FnZSBxdWV1ZSBNUURFUy4gICovCitleHRlcm4gaW50IG1xX3NlbmQgKG1xZF90IF9fbXFkZXMsIF9fY29uc3QgY2hhciAqX19tc2dfcHRyLCBzaXplX3QgX19tc2dfbGVuLAorCQkgICAgdW5zaWduZWQgaW50IF9fbXNnX3ByaW8pIF9fbm9ubnVsbCAoKDIpKTsKKworI2lmZGVmIF9fVVNFX1hPUEVOMksKKy8qIFJlY2VpdmUgdGhlIG9sZGVzdCBmcm9tIGhpZ2hlc3QgcHJpb3JpdHkgbWVzc2FnZXMgaW4gbWVzc2FnZSBxdWV1ZQorICAgTVFERVMsIHN0b3Agd2FpdGluZyBpZiBBQlNfVElNRU9VVCBleHBpcmVzLiAgKi8KK2V4dGVybiBzc2l6ZV90IG1xX3RpbWVkcmVjZWl2ZSAobXFkX3QgX19tcWRlcywgY2hhciAqX19yZXN0cmljdCBfX21zZ19wdHIsCisJCQkJc2l6ZV90IF9fbXNnX2xlbiwKKwkJCQl1bnNpZ25lZCBpbnQgKl9fcmVzdHJpY3QgX19tc2dfcHJpbywKKwkJCQlfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBfX2Fic190aW1lb3V0KQorICBfX25vbm51bGwgKCgyLCA1KSk7CisKKy8qIEFkZCBtZXNzYWdlIHBvaW50ZWQgYnkgTVNHX1BUUiB0byBtZXNzYWdlIHF1ZXVlIE1RREVTLCBzdG9wIGJsb2NraW5nCisgICBvbiBmdWxsIG1lc3NhZ2UgcXVldWUgaWYgQUJTX1RJTUVPVVQgZXhwaXJlcy4gICovCitleHRlcm4gaW50IG1xX3RpbWVkc2VuZCAobXFkX3QgX19tcWRlcywgX19jb25zdCBjaGFyICpfX21zZ19wdHIsCisJCQkgc2l6ZV90IF9fbXNnX2xlbiwgdW5zaWduZWQgaW50IF9fbXNnX3ByaW8sCisJCQkgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fYWJzX3RpbWVvdXQpCisgIF9fbm9ubnVsbCAoKDIsIDUpKTsKKyNlbmRpZgorCisvKiBEZWZpbmUgc29tZSBpbmxpbmVzIGhlbHBpbmcgdG8gY2F0Y2ggY29tbW9uIHByb2JsZW1zLiAgKi8KKyNpZiBfX1VTRV9GT1JUSUZZX0xFVkVMID4gMCAmJiBkZWZpbmVkIF9fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgXAorICAgICYmIGRlZmluZWQgX192YV9hcmdfcGFja19sZW4KKyMgaW5jbHVkZSA8Yml0cy9tcXVldWUyLmg+CisjZW5kaWYKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIG1xdWV1ZS5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbXRkL2luZnRsLXVzZXIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9tdGQvaW5mdGwtdXNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNzZiZDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbXRkL2luZnRsLXVzZXIuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogUGFydHMgb2YgSU5GVEwgaGVhZGVycyBzaGFyZWQgd2l0aCB1c2Vyc3BhY2UKKyAqCisgKi8KKworI2lmbmRlZiBfX01URF9JTkZUTF9VU0VSX0hfXworI2RlZmluZSBfX01URF9JTkZUTF9VU0VSX0hfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZQlPU0FLX1ZFUlNJT04JMHg1MTIwCisjZGVmaW5lCVBFUkNFTlRVU0VECTk4CisKKyNkZWZpbmUJU0VDVE9SU0laRQk1MTIKKworLyogQmxvY2sgQ29udHJvbCBJbmZvcm1hdGlvbiAqLworCitzdHJ1Y3QgaW5mdGxfYmNpIHsKKwlfX3U4IEVDQ3NpZ1s2XTsKKwlfX3U4IFN0YXR1czsKKwlfX3U4IFN0YXR1czE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaW5mdGxfdW5pdGhlYWQxIHsKKwlfX3UxNiB2aXJ0dWFsVW5pdE5vOworCV9fdTE2IHByZXZVbml0Tm87CisJX191OCBBTkFDOworCV9fdTggTkFDczsKKwlfX3U4IHBhcml0eVBlckZpZWxkOworCV9fdTggZGlzY2FyZGVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGluZnRsX3VuaXRoZWFkMiB7CisJX191OCBwYXJpdHlQZXJGaWVsZDsKKwlfX3U4IEFOQUM7CisJX191MTYgcHJldlVuaXRObzsKKwlfX3UxNiB2aXJ0dWFsVW5pdE5vOworCV9fdTggTkFDczsKKwlfX3U4IGRpc2NhcmRlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBpbmZ0bF91bml0dGFpbCB7CisJX191OCBSZXNlcnZlZFs0XTsKKwlfX3UxNiBFcmFzZU1hcms7CisJX191MTYgRXJhc2VNYXJrMTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3VuaW9uIGluZnRsX3VjaSB7CisJc3RydWN0IGluZnRsX3VuaXRoZWFkMSBhOworCXN0cnVjdCBpbmZ0bF91bml0aGVhZDIgYjsKKwlzdHJ1Y3QgaW5mdGxfdW5pdHRhaWwgYzsKK307CisKK3N0cnVjdCBpbmZ0bF9vb2IgeworCXN0cnVjdCBpbmZ0bF9iY2kgYjsKKwl1bmlvbiBpbmZ0bF91Y2kgdTsKK307CisKKworLyogSU5GVEwgTWVkaWEgSGVhZGVyICovCisKK3N0cnVjdCBJTkZUTFBhcnRpdGlvbiB7CisJX191MzIgdmlydHVhbFVuaXRzOworCV9fdTMyIGZpcnN0VW5pdDsKKwlfX3UzMiBsYXN0VW5pdDsKKwlfX3UzMiBmbGFnczsKKwlfX3UzMiBzcGFyZVVuaXRzOworCV9fdTMyIFJlc2VydmVkMDsKKwlfX3UzMiBSZXNlcnZlZDE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgSU5GVExNZWRpYUhlYWRlciB7CisJY2hhciBib290UmVjb3JkSURbOF07CisJX191MzIgTm9PZkJvb3RJbWFnZUJsb2NrczsKKwlfX3UzMiBOb09mQmluYXJ5UGFydGl0aW9uczsKKwlfX3UzMiBOb09mQkRUTFBhcnRpdGlvbnM7CisJX191MzIgQmxvY2tNdWx0aXBsaWVyQml0czsKKwlfX3UzMiBGb3JtYXRGbGFnczsKKwlfX3UzMiBPc2FrVmVyc2lvbjsKKwlfX3UzMiBQZXJjZW50VXNlZDsKKwlzdHJ1Y3QgSU5GVExQYXJ0aXRpb24gUGFydGl0aW9uc1s0XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIFBhcnRpdGlvbiBmbGFnIHR5cGVzICovCisjZGVmaW5lCUlORlRMX0JJTkFSWQkweDIwMDAwMDAwCisjZGVmaW5lCUlORlRMX0JEVEwJMHg0MDAwMDAwMAorI2RlZmluZQlJTkZUTF9MQVNUCTB4ODAwMDAwMDAKKworI2VuZGlmIC8qIF9fTVREX0lORlRMX1VTRVJfSF9fICovCisKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL210ZC9tdGQtYWJpLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbXRkL210ZC1hYmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODYzNjRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL210ZC9tdGQtYWJpLmgKQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMTk5OS0yMDEwIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4gZXQgYWwuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX01URF9BQklfSF9fCisjZGVmaW5lIF9fTVREX0FCSV9IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBlcmFzZV9pbmZvX3VzZXIgeworCV9fdTMyIHN0YXJ0OworCV9fdTMyIGxlbmd0aDsKK307CisKK3N0cnVjdCBlcmFzZV9pbmZvX3VzZXI2NCB7CisJX191NjQgc3RhcnQ7CisJX191NjQgbGVuZ3RoOworfTsKKworc3RydWN0IG10ZF9vb2JfYnVmIHsKKwlfX3UzMiBzdGFydDsKKwlfX3UzMiBsZW5ndGg7CisJdW5zaWduZWQgY2hhciAqcHRyOworfTsKKworc3RydWN0IG10ZF9vb2JfYnVmNjQgeworCV9fdTY0IHN0YXJ0OworCV9fdTMyIHBhZDsKKwlfX3UzMiBsZW5ndGg7CisJX191NjQgdXNyX3B0cjsKK307CisKKyNkZWZpbmUgTVREX0FCU0VOVAkJMAorI2RlZmluZSBNVERfUkFNCQkJMQorI2RlZmluZSBNVERfUk9NCQkJMgorI2RlZmluZSBNVERfTk9SRkxBU0gJCTMKKyNkZWZpbmUgTVREX05BTkRGTEFTSAkJNAorI2RlZmluZSBNVERfREFUQUZMQVNICQk2CisjZGVmaW5lIE1URF9VQklWT0xVTUUJCTcKKyNkZWZpbmUgTVREX01MQ05BTkRGTEFTSAk4CisKKyNkZWZpbmUgTVREX1dSSVRFQUJMRQkJMHg0MDAJLyogRGV2aWNlIGlzIHdyaXRlYWJsZSAqLworI2RlZmluZSBNVERfQklUX1dSSVRFQUJMRQkweDgwMAkvKiBTaW5nbGUgYml0cyBjYW4gYmUgZmxpcHBlZCAqLworI2RlZmluZSBNVERfTk9fRVJBU0UJCTB4MTAwMAkvKiBObyBlcmFzZSBuZWNlc3NhcnkgKi8KKyNkZWZpbmUgTVREX1BPV0VSVVBfTE9DSwkweDIwMDAJLyogQWx3YXlzIGxvY2tlZCBhZnRlciByZXNldCAqLworCisvLyBTb21lIGNvbW1vbiBkZXZpY2VzIC8gY29tYmluYXRpb25zIG9mIGNhcGFiaWxpdGllcworI2RlZmluZSBNVERfQ0FQX1JPTQkJMAorI2RlZmluZSBNVERfQ0FQX1JBTQkJKE1URF9XUklURUFCTEUgfCBNVERfQklUX1dSSVRFQUJMRSB8IE1URF9OT19FUkFTRSkKKyNkZWZpbmUgTVREX0NBUF9OT1JGTEFTSAkoTVREX1dSSVRFQUJMRSB8IE1URF9CSVRfV1JJVEVBQkxFKQorI2RlZmluZSBNVERfQ0FQX05BTkRGTEFTSAkoTVREX1dSSVRFQUJMRSkKKworLyogRUNDIGJ5dGUgcGxhY2VtZW50ICovCisjZGVmaW5lIE1URF9OQU5ERUNDX09GRgkJMAkvLyBTd2l0Y2ggb2ZmIEVDQyAoTm90IHJlY29tbWVuZGVkKQorI2RlZmluZSBNVERfTkFOREVDQ19QTEFDRQkxCS8vIFVzZSB0aGUgZ2l2ZW4gcGxhY2VtZW50IGluIHRoZSBzdHJ1Y3R1cmUgKFlBRkZTMSBsZWdhY3kgbW9kZSkKKyNkZWZpbmUgTVREX05BTkRFQ0NfQVVUT1BMQUNFCTIJLy8gVXNlIHRoZSBkZWZhdWx0IHBsYWNlbWVudCBzY2hlbWUKKyNkZWZpbmUgTVREX05BTkRFQ0NfUExBQ0VPTkxZCTMJLy8gVXNlIHRoZSBnaXZlbiBwbGFjZW1lbnQgaW4gdGhlIHN0cnVjdHVyZSAoRG8gbm90IHN0b3JlIGVjYyByZXN1bHQgb24gcmVhZCkKKyNkZWZpbmUgTVREX05BTkRFQ0NfQVVUT1BMX1VTUiAJNAkvLyBVc2UgdGhlIGdpdmVuIGF1dG9wbGFjZW1lbnQgc2NoZW1lIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBkZWZhdWx0CisKKy8qIE9UUCBtb2RlIHNlbGVjdGlvbiAqLworI2RlZmluZSBNVERfT1RQX09GRgkJMAorI2RlZmluZSBNVERfT1RQX0ZBQ1RPUlkJCTEKKyNkZWZpbmUgTVREX09UUF9VU0VSCQkyCisKK3N0cnVjdCBtdGRfaW5mb191c2VyIHsKKwlfX3U4IHR5cGU7CisJX191MzIgZmxhZ3M7CisJX191MzIgc2l6ZTsJIC8vIFRvdGFsIHNpemUgb2YgdGhlIE1URAorCV9fdTMyIGVyYXNlc2l6ZTsKKwlfX3UzMiB3cml0ZXNpemU7CisJX191MzIgb29ic2l6ZTsgICAvLyBBbW91bnQgb2YgT09CIGRhdGEgcGVyIGJsb2NrIChlLmcuIDE2KQorCS8qIFRoZSBiZWxvdyB0d28gZmllbGRzIGFyZSBvYnNvbGV0ZSBhbmQgYnJva2VuLCBkbyBub3QgdXNlIHRoZW0KKwkgKiAoVE9ETzogcmVtb3ZlIGF0IHNvbWUgcG9pbnQpICovCisJX191MzIgZWNjdHlwZTsKKwlfX3UzMiBlY2NzaXplOworfTsKKworc3RydWN0IHJlZ2lvbl9pbmZvX3VzZXIgeworCV9fdTMyIG9mZnNldDsJCS8qIEF0IHdoaWNoIHRoaXMgcmVnaW9uIHN0YXJ0cywKKwkJCQkJICogZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBNVEQgKi8KKwlfX3UzMiBlcmFzZXNpemU7CQkvKiBGb3IgdGhpcyByZWdpb24gKi8KKwlfX3UzMiBudW1ibG9ja3M7CQkvKiBOdW1iZXIgb2YgYmxvY2tzIGluIHRoaXMgcmVnaW9uICovCisJX191MzIgcmVnaW9uaW5kZXg7Cit9OworCitzdHJ1Y3Qgb3RwX2luZm8geworCV9fdTMyIHN0YXJ0OworCV9fdTMyIGxlbmd0aDsKKwlfX3UzMiBsb2NrZWQ7Cit9OworCisjZGVmaW5lIE1FTUdFVElORk8JCV9JT1IoJ00nLCAxLCBzdHJ1Y3QgbXRkX2luZm9fdXNlcikKKyNkZWZpbmUgTUVNRVJBU0UJCV9JT1coJ00nLCAyLCBzdHJ1Y3QgZXJhc2VfaW5mb191c2VyKQorI2RlZmluZSBNRU1XUklURU9PQgkJX0lPV1IoJ00nLCAzLCBzdHJ1Y3QgbXRkX29vYl9idWYpCisjZGVmaW5lIE1FTVJFQURPT0IJCV9JT1dSKCdNJywgNCwgc3RydWN0IG10ZF9vb2JfYnVmKQorI2RlZmluZSBNRU1MT0NLCQkJX0lPVygnTScsIDUsIHN0cnVjdCBlcmFzZV9pbmZvX3VzZXIpCisjZGVmaW5lIE1FTVVOTE9DSwkJX0lPVygnTScsIDYsIHN0cnVjdCBlcmFzZV9pbmZvX3VzZXIpCisjZGVmaW5lIE1FTUdFVFJFR0lPTkNPVU5UCV9JT1IoJ00nLCA3LCBpbnQpCisjZGVmaW5lIE1FTUdFVFJFR0lPTklORk8JX0lPV1IoJ00nLCA4LCBzdHJ1Y3QgcmVnaW9uX2luZm9fdXNlcikKKyNkZWZpbmUgTUVNU0VUT09CU0VMCQlfSU9XKCdNJywgOSwgc3RydWN0IG5hbmRfb29iaW5mbykKKyNkZWZpbmUgTUVNR0VUT09CU0VMCQlfSU9SKCdNJywgMTAsIHN0cnVjdCBuYW5kX29vYmluZm8pCisjZGVmaW5lIE1FTUdFVEJBREJMT0NLCQlfSU9XKCdNJywgMTEsIF9fa2VybmVsX2xvZmZfdCkKKyNkZWZpbmUgTUVNU0VUQkFEQkxPQ0sJCV9JT1coJ00nLCAxMiwgX19rZXJuZWxfbG9mZl90KQorI2RlZmluZSBPVFBTRUxFQ1QJCV9JT1IoJ00nLCAxMywgaW50KQorI2RlZmluZSBPVFBHRVRSRUdJT05DT1VOVAlfSU9XKCdNJywgMTQsIGludCkKKyNkZWZpbmUgT1RQR0VUUkVHSU9OSU5GTwlfSU9XKCdNJywgMTUsIHN0cnVjdCBvdHBfaW5mbykKKyNkZWZpbmUgT1RQTE9DSwkJCV9JT1IoJ00nLCAxNiwgc3RydWN0IG90cF9pbmZvKQorI2RlZmluZSBFQ0NHRVRMQVlPVVQJCV9JT1IoJ00nLCAxNywgc3RydWN0IG5hbmRfZWNjbGF5b3V0X3VzZXIpCisjZGVmaW5lIEVDQ0dFVFNUQVRTCQlfSU9SKCdNJywgMTgsIHN0cnVjdCBtdGRfZWNjX3N0YXRzKQorI2RlZmluZSBNVERGSUxFTU9ERQkJX0lPKCdNJywgMTkpCisjZGVmaW5lIE1FTUVSQVNFNjQJCV9JT1coJ00nLCAyMCwgc3RydWN0IGVyYXNlX2luZm9fdXNlcjY0KQorI2RlZmluZSBNRU1XUklURU9PQjY0CQlfSU9XUignTScsIDIxLCBzdHJ1Y3QgbXRkX29vYl9idWY2NCkKKyNkZWZpbmUgTUVNUkVBRE9PQjY0CQlfSU9XUignTScsIDIyLCBzdHJ1Y3QgbXRkX29vYl9idWY2NCkKKyNkZWZpbmUgTUVNSVNMT0NLRUQJCV9JT1IoJ00nLCAyMywgc3RydWN0IGVyYXNlX2luZm9fdXNlcikKKworLyoKKyAqIE9ic29sZXRlIGxlZ2FjeSBpbnRlcmZhY2UuIEtlZXAgaXQgaW4gb3JkZXIgbm90IHRvIGJyZWFrIHVzZXJzcGFjZQorICogaW50ZXJmYWNlcworICovCitzdHJ1Y3QgbmFuZF9vb2JpbmZvIHsKKwlfX3UzMiB1c2VlY2M7CisJX191MzIgZWNjYnl0ZXM7CisJX191MzIgb29iZnJlZVs4XVsyXTsKKwlfX3UzMiBlY2Nwb3NbMzJdOworfTsKKworc3RydWN0IG5hbmRfb29iZnJlZSB7CisJX191MzIgb2Zmc2V0OworCV9fdTMyIGxlbmd0aDsKK307CisKKyNkZWZpbmUgTVREX01BWF9PT0JGUkVFX0VOVFJJRVMJOAorI2RlZmluZSBNVERfTUFYX0VDQ1BPU19FTlRSSUVTCTY0CisvKgorICogT0JTT0xFVEU6IEVDQyBsYXlvdXQgY29udHJvbCBzdHJ1Y3R1cmUuIEV4cG9ydGVkIHRvIHVzZXItc3BhY2UgdmlhIGlvY3RsCisgKiBFQ0NHRVRMQVlPVVQgZm9yIGJhY2t3YXJkcyBjb21wYXRiaWxpdHkgYW5kIHNob3VsZCBub3QgYmUgbWlzdGFrZW4gYXMgYQorICogY29tcGxldGUgc2V0IG9mIEVDQyBpbmZvcm1hdGlvbi4gVGhlIGlvY3RsIHRydW5jYXRlcyB0aGUgbGFyZ2VyIGludGVybmFsCisgKiBzdHJ1Y3R1cmUgdG8gcmV0YWluIGJpbmFyeSBjb21wYXRpYmlsaXR5IHdpdGggdGhlIHN0YXRpYyBkZWNsYXJhdGlvbiBvZiB0aGUKKyAqIGlvY3RsLiBOb3RlIHRoYXQgdGhlICJNVERfTUFYXy4uLl9FTlRSSUVTIiBtYWNyb3MgcmVwcmVzZW50IHRoZSBtYXggc2l6ZSBvZgorICogdGhlIHVzZXIgc3RydWN0LCBub3QgdGhlIE1BWCBzaXplIG9mIHRoZSBpbnRlcm5hbCBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQuCisgKi8KK3N0cnVjdCBuYW5kX2VjY2xheW91dF91c2VyIHsKKwlfX3UzMiBlY2NieXRlczsKKwlfX3UzMiBlY2Nwb3NbTVREX01BWF9FQ0NQT1NfRU5UUklFU107CisJX191MzIgb29iYXZhaWw7CisJc3RydWN0IG5hbmRfb29iZnJlZSBvb2JmcmVlW01URF9NQVhfT09CRlJFRV9FTlRSSUVTXTsKK307CisKKy8qKgorICogc3RydWN0IG10ZF9lY2Nfc3RhdHMgLSBlcnJvciBjb3JyZWN0aW9uIHN0YXRzCisgKgorICogQGNvcnJlY3RlZDoJbnVtYmVyIG9mIGNvcnJlY3RlZCBiaXRzCisgKiBAZmFpbGVkOgludW1iZXIgb2YgdW5jb3JyZWN0YWJsZSBlcnJvcnMKKyAqIEBiYWRibG9ja3M6CW51bWJlciBvZiBiYWQgYmxvY2tzIGluIHRoaXMgcGFydGl0aW9uCisgKiBAYmJ0YmxvY2tzOgludW1iZXIgb2YgYmxvY2tzIHJlc2VydmVkIGZvciBiYWQgYmxvY2sgdGFibGVzCisgKi8KK3N0cnVjdCBtdGRfZWNjX3N0YXRzIHsKKwlfX3UzMiBjb3JyZWN0ZWQ7CisJX191MzIgZmFpbGVkOworCV9fdTMyIGJhZGJsb2NrczsKKwlfX3UzMiBiYnRibG9ja3M7Cit9OworCisvKgorICogUmVhZC93cml0ZSBmaWxlIG1vZGVzIGZvciBhY2Nlc3MgdG8gTVRECisgKi8KK2VudW0gbXRkX2ZpbGVfbW9kZXMgeworCU1URF9NT0RFX05PUk1BTCA9IE1URF9PVFBfT0ZGLAorCU1URF9NT0RFX09UUF9GQUNUT1JZID0gTVREX09UUF9GQUNUT1JZLAorCU1URF9NT0RFX09UUF9VU0VSID0gTVREX09UUF9VU0VSLAorCU1URF9NT0RFX1JBVywKK307CisKKyNlbmRpZiAvKiBfX01URF9BQklfSF9fICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbXRkL210ZC11c2VyLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbXRkL210ZC11c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMzMjdjOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9tdGQvbXRkLXVzZXIuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IMKpIDE5OTktMjAxMCBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX01URF9VU0VSX0hfXworI2RlZmluZSBfX01URF9VU0VSX0hfXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKy8qIFRoaXMgZmlsZSBpcyBibGVzc2VkIGZvciBpbmNsdXNpb24gYnkgdXNlcnNwYWNlICovCisjaW5jbHVkZSA8bXRkL210ZC1hYmkuaD4KKwordHlwZWRlZiBzdHJ1Y3QgbXRkX2luZm9fdXNlciBtdGRfaW5mb190OwordHlwZWRlZiBzdHJ1Y3QgZXJhc2VfaW5mb191c2VyIGVyYXNlX2luZm9fdDsKK3R5cGVkZWYgc3RydWN0IHJlZ2lvbl9pbmZvX3VzZXIgcmVnaW9uX2luZm9fdDsKK3R5cGVkZWYgc3RydWN0IG5hbmRfb29iaW5mbyBuYW5kX29vYmluZm9fdDsKK3R5cGVkZWYgc3RydWN0IG5hbmRfZWNjbGF5b3V0X3VzZXIgbmFuZF9lY2NsYXlvdXRfdDsKKworI2VuZGlmIC8qIF9fTVREX1VTRVJfSF9fICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbXRkL25mdGwtdXNlci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL210ZC9uZnRsLXVzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGVhYmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL210ZC9uZnRsLXVzZXIuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IMKpIDE5OTktMjAxMCBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX01URF9ORlRMX1VTRVJfSF9fCisjZGVmaW5lIF9fTVREX05GVExfVVNFUl9IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIEJsb2NrIENvbnRyb2wgSW5mb3JtYXRpb24gKi8KKworc3RydWN0IG5mdGxfYmNpIHsKKwl1bnNpZ25lZCBjaGFyIEVDQ1NpZ1s2XTsKKwlfX3U4IFN0YXR1czsKKwlfX3U4IFN0YXR1czE7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIFVuaXQgQ29udHJvbCBJbmZvcm1hdGlvbiAqLworCitzdHJ1Y3QgbmZ0bF91Y2kwIHsKKwlfX3UxNiBWaXJ0VW5pdE51bTsKKwlfX3UxNiBSZXBsVW5pdE51bTsKKwlfX3UxNiBTcGFyZVZpcnRVbml0TnVtOworCV9fdTE2IFNwYXJlUmVwbFVuaXROdW07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbmZ0bF91Y2kxIHsKKwlfX3UzMiBXZWFySW5mbzsKKwlfX3UxNiBFcmFzZU1hcms7CisJX191MTYgRXJhc2VNYXJrMTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBuZnRsX3VjaTIgeworICAgICAgICBfX3UxNiBGb2xkTWFyazsKKyAgICAgICAgX191MTYgRm9sZE1hcmsxOworCV9fdTMyIHVudXNlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3VuaW9uIG5mdGxfdWNpIHsKKwlzdHJ1Y3QgbmZ0bF91Y2kwIGE7CisJc3RydWN0IG5mdGxfdWNpMSBiOworCXN0cnVjdCBuZnRsX3VjaTIgYzsKK307CisKK3N0cnVjdCBuZnRsX29vYiB7CisJc3RydWN0IG5mdGxfYmNpIGI7CisJdW5pb24gbmZ0bF91Y2kgdTsKK307CisKKy8qIE5GVEwgTWVkaWEgSGVhZGVyICovCisKK3N0cnVjdCBORlRMTWVkaWFIZWFkZXIgeworCWNoYXIgRGF0YU9yZ0lEWzZdOworCV9fdTE2IE51bUVyYXNlVW5pdHM7CisJX191MTYgRmlyc3RQaHlzaWNhbEVVTjsKKwlfX3UzMiBGb3JtYXR0ZWRTaXplOworCXVuc2lnbmVkIGNoYXIgVW5pdFNpemVGYWN0b3I7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIE1BWF9FUkFTRV9aT05FUyAoODE5MiAtIDUxMikKKworI2RlZmluZSBFUkFTRV9NQVJLIDB4M2M2OQorI2RlZmluZSBTRUNUT1JfRlJFRSAweGZmCisjZGVmaW5lIFNFQ1RPUl9VU0VEIDB4NTUKKyNkZWZpbmUgU0VDVE9SX0lHTk9SRSAweDExCisjZGVmaW5lIFNFQ1RPUl9ERUxFVEVEIDB4MDAKKworI2RlZmluZSBGT0xEX01BUktfSU5fUFJPR1JFU1MgMHg1NTU1CisKKyNkZWZpbmUgWk9ORV9HT09EIDB4ZmYKKyNkZWZpbmUgWk9ORV9CQURfT1JJR0lOQUwgMAorI2RlZmluZSBaT05FX0JBRF9NQVJLRUQgNworCisKKyNlbmRpZiAvKiBfX01URF9ORlRMX1VTRVJfSF9fICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbXRkL3ViaS11c2VyLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbXRkL3ViaS11c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBkNDdhZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9tdGQvdWJpLXVzZXIuaApAQCAtMCwwICsxLDQxMiBAQAorLyoKKyAqIENvcHlyaWdodCDCqSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnAuLCAyMDA2CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZQorICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqIEF1dGhvcjogQXJ0ZW0gQml0eXV0c2tpeSAo0JHQuNGC0Y7RhtC60LjQuSDQkNGA0YLRkdC8KQorICovCisKKyNpZm5kZWYgX19VQklfVVNFUl9IX18KKyNkZWZpbmUgX19VQklfVVNFUl9IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBVQkkgZGV2aWNlIGNyZWF0aW9uICh0aGUgc2FtZSBhcyBNVEQgZGV2aWNlIGF0dGFjaG1lbnQpCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqIE1URCBkZXZpY2VzIG1heSBiZSBhdHRhY2hlZCB1c2luZyAlVUJJX0lPQ0FUVCBpb2N0bCBjb21tYW5kIG9mIHRoZSBVQkkKKyAqIGNvbnRyb2wgZGV2aWNlLiBUaGUgY2FsbGVyIGhhcyB0byBwcm9wZXJseSBmaWxsIGFuZCBwYXNzCisgKiAmc3RydWN0IHViaV9hdHRhY2hfcmVxIG9iamVjdCAtIFVCSSB3aWxsIGF0dGFjaCB0aGUgTVREIGRldmljZSBzcGVjaWZpZWQgaW4KKyAqIHRoZSByZXF1ZXN0IGFuZCByZXR1cm4gdGhlIG5ld2x5IGNyZWF0ZWQgVUJJIGRldmljZSBudW1iZXIgYXMgdGhlIGlvY3RsCisgKiByZXR1cm4gdmFsdWUuCisgKgorICogVUJJIGRldmljZSBkZWxldGlvbiAodGhlIHNhbWUgYXMgTVREIGRldmljZSBkZXRhY2htZW50KQorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKiBBbiBVQkkgZGV2aWNlIG1heWJlIGRlbGV0ZWQgd2l0aCAlVUJJX0lPQ0RFVCBpb2N0bCBjb21tYW5kIG9mIHRoZSBVQkkKKyAqIGNvbnRyb2wgZGV2aWNlLgorICoKKyAqIFVCSSB2b2x1bWUgY3JlYXRpb24KKyAqIH5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKiBVQkkgdm9sdW1lcyBhcmUgY3JlYXRlZCB2aWEgdGhlICVVQklfSU9DTUtWT0wgaW9jdGwgY29tbWFuZCBvZiBVQkkgY2hhcmFjdGVyCisgKiBkZXZpY2UuIEEgJnN0cnVjdCB1YmlfbWt2b2xfcmVxIG9iamVjdCBoYXMgdG8gYmUgcHJvcGVybHkgZmlsbGVkIGFuZCBhCisgKiBwb2ludGVyIHRvIGl0IGhhcyB0byBiZSBwYXNzZWQgdG8gdGhlIGlvY3RsLgorICoKKyAqIFVCSSB2b2x1bWUgZGVsZXRpb24KKyAqIH5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKiBUbyBkZWxldGUgYSB2b2x1bWUsIHRoZSAlVUJJX0lPQ1JNVk9MIGlvY3RsIGNvbW1hbmQgb2YgdGhlIFVCSSBjaGFyYWN0ZXIKKyAqIGRldmljZSBzaG91bGQgYmUgdXNlZC4gQSBwb2ludGVyIHRvIHRoZSAzMi1iaXQgdm9sdW1lIElEIGhhc3QgdG8gYmUgcGFzc2VkCisgKiB0byB0aGUgaW9jdGwuCisgKgorICogVUJJIHZvbHVtZSByZS1zaXplCisgKiB+fn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKiBUbyByZS1zaXplIGEgdm9sdW1lLCB0aGUgJVVCSV9JT0NSU1ZPTCBpb2N0bCBjb21tYW5kIG9mIHRoZSBVQkkgY2hhcmFjdGVyCisgKiBkZXZpY2Ugc2hvdWxkIGJlIHVzZWQuIEEgJnN0cnVjdCB1YmlfcnN2b2xfcmVxIG9iamVjdCBoYXMgdG8gYmUgcHJvcGVybHkKKyAqIGZpbGxlZCBhbmQgYSBwb2ludGVyIHRvIGl0IGhhcyB0byBiZSBwYXNzZWQgdG8gdGhlIGlvY3RsLgorICoKKyAqIFVCSSB2b2x1bWVzIHJlLW5hbWUKKyAqIH5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKiBUbyByZS1uYW1lIHNldmVyYWwgdm9sdW1lcyBhdG9taWNhbGx5IGF0IG9uZSBnbywgdGhlICVVQklfSU9DUk5WT0wgY29tbWFuZAorICogb2YgdGhlIFVCSSBjaGFyYWN0ZXIgZGV2aWNlIHNob3VsZCBiZSB1c2VkLiBBICZzdHJ1Y3QgdWJpX3Judm9sX3JlcSBvYmplY3QKKyAqIGhhcyB0byBiZSBwcm9wZXJseSBmaWxsZWQgYW5kIGEgcG9pbnRlciB0byBpdCBoYXMgdG8gYmUgcGFzc2VkIHRvIHRoZSBpb2N0bC4KKyAqCisgKiBVQkkgdm9sdW1lIHVwZGF0ZQorICogfn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKiBWb2x1bWUgdXBkYXRlIHNob3VsZCBiZSBkb25lIHZpYSB0aGUgJVVCSV9JT0NWT0xVUCBpb2N0bCBjb21tYW5kIG9mIHRoZQorICogY29ycmVzcG9uZGluZyBVQkkgdm9sdW1lIGNoYXJhY3RlciBkZXZpY2UuIEEgcG9pbnRlciB0byBhIDY0LWJpdCB1cGRhdGUKKyAqIHNpemUgc2hvdWxkIGJlIHBhc3NlZCB0byB0aGUgaW9jdGwuIEFmdGVyIHRoaXMsIFVCSSBleHBlY3RzIHVzZXIgdG8gd3JpdGUKKyAqIHRoaXMgbnVtYmVyIG9mIGJ5dGVzIHRvIHRoZSB2b2x1bWUgY2hhcmFjdGVyIGRldmljZS4gVGhlIHVwZGF0ZSBpcyBmaW5pc2hlZAorICogd2hlbiB0aGUgY2xhaW1lZCBudW1iZXIgb2YgYnl0ZXMgaXMgcGFzc2VkLiBTbywgdGhlIHZvbHVtZSB1cGRhdGUgc2VxdWVuY2UKKyAqIGlzIHNvbWV0aGluZyBsaWtlOgorICoKKyAqIGZkID0gb3BlbigiL2Rldi9teV92b2x1bWUiKTsKKyAqIGlvY3RsKGZkLCBVQklfSU9DVk9MVVAsICZpbWFnZV9zaXplKTsKKyAqIHdyaXRlKGZkLCBidWYsIGltYWdlX3NpemUpOworICogY2xvc2UoZmQpOworICoKKyAqIExvZ2ljYWwgZXJhc2VibG9jayBlcmFzZQorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKgorICogVG8gZXJhc2UgYSBsb2dpY2FsIGVyYXNlYmxvY2ssIHRoZSAlVUJJX0lPQ0VCRVIgaW9jdGwgY29tbWFuZCBvZiB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgVUJJIHZvbHVtZSBjaGFyYWN0ZXIgZGV2aWNlIHNob3VsZCBiZSB1c2VkLiBUaGlzIGNvbW1hbmQKKyAqIHVubWFwcyB0aGUgcmVxdWVzdGVkIGxvZ2ljYWwgZXJhc2VibG9jaywgbWFrZXMgc3VyZSB0aGUgY29ycmVzcG9uZGluZworICogcGh5c2ljYWwgZXJhc2VibG9jayBpcyBzdWNjZXNzZnVsbHkgZXJhc2VkLCBhbmQgcmV0dXJucy4KKyAqCisgKiBBdG9taWMgbG9naWNhbCBlcmFzZWJsb2NrIGNoYW5nZQorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKiBBdG9taWMgbG9naWNhbCBlcmFzZWJsb2NrIGNoYW5nZSBvcGVyYXRpb24gaXMgY2FsbGVkIHVzaW5nIHRoZSAlVUJJX0lPQ0VCQ0gKKyAqIGlvY3RsIGNvbW1hbmQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgVUJJIHZvbHVtZSBjaGFyYWN0ZXIgZGV2aWNlLiBBIHBvaW50ZXIgdG8KKyAqIGEgJnN0cnVjdCB1YmlfbGViX2NoYW5nZV9yZXEgb2JqZWN0IGhhcyB0byBiZSBwYXNzZWQgdG8gdGhlIGlvY3RsLiBUaGVuIHRoZQorICogdXNlciBpcyBleHBlY3RlZCB0byB3cml0ZSB0aGUgcmVxdWVzdGVkIGFtb3VudCBvZiBieXRlcyAoc2ltaWxhcmx5IHRvIHdoYXQKKyAqIHNob3VsZCBiZSBkb25lIGluIGNhc2Ugb2YgdGhlICJ2b2x1bWUgdXBkYXRlIiBpb2N0bCkuCisgKgorICogTG9naWNhbCBlcmFzZWJsb2NrIG1hcAorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKgorICogVG8gbWFwIGEgbG9naWNhbCBlcmFzZWJsb2NrIHRvIGEgcGh5c2ljYWwgZXJhc2VibG9jaywgdGhlICVVQklfSU9DRUJNQVAKKyAqIGlvY3RsIGNvbW1hbmQgc2hvdWxkIGJlIHVzZWQuIEEgcG9pbnRlciB0byBhICZzdHJ1Y3QgdWJpX21hcF9yZXEgb2JqZWN0IGlzCisgKiBleHBlY3RlZCB0byBiZSBwYXNzZWQuIFRoZSBpb2N0bCBtYXBzIHRoZSByZXF1ZXN0ZWQgbG9naWNhbCBlcmFzZWJsb2NrIHRvCisgKiBhIHBoeXNpY2FsIGVyYXNlYmxvY2sgYW5kIHJldHVybnMuICBPbmx5IG5vbi1tYXBwZWQgbG9naWNhbCBlcmFzZWJsb2NrcyBjYW4KKyAqIGJlIG1hcHBlZC4gSWYgdGhlIGxvZ2ljYWwgZXJhc2VibG9jayBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3QgaXMgYWxyZWFkeQorICogbWFwcGVkIHRvIGEgcGh5c2ljYWwgZXJhc2VibG9jaywgdGhlIGlvY3RsIGZhaWxzIGFuZCByZXR1cm5zIGVycm9yLgorICoKKyAqIExvZ2ljYWwgZXJhc2VibG9jayB1bm1hcAorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKgorICogVG8gdW5tYXAgYSBsb2dpY2FsIGVyYXNlYmxvY2sgdG8gYSBwaHlzaWNhbCBlcmFzZWJsb2NrLCB0aGUgJVVCSV9JT0NFQlVOTUFQCisgKiBpb2N0bCBjb21tYW5kIHNob3VsZCBiZSB1c2VkLiBUaGUgaW9jdGwgdW5tYXBzIHRoZSBsb2dpY2FsIGVyYXNlYmxvY2tzLAorICogc2NoZWR1bGVzIGNvcnJlc3BvbmRpbmcgcGh5c2ljYWwgZXJhc2VibG9jayBmb3IgZXJhc3VyZSwgYW5kIHJldHVybnMuIFVubGlrZQorICogdGhlICJMRUIgZXJhc2UiIGNvbW1hbmQsIGl0IGRvZXMgbm90IHdhaXQgZm9yIHRoZSBwaHlzaWNhbCBlcmFzZWJsb2NrIGJlaW5nCisgKiBlcmFzZWQuIE5vdGUsIHRoZSBzaWRlIGVmZmVjdCBvZiB0aGlzIGlzIHRoYXQgaWYgYW4gdW5jbGVhbiByZWJvb3QgaGFwcGVucworICogYWZ0ZXIgdGhlIHVubWFwIGlvY3RsIHJldHVybnMsIHlvdSBtYXkgZmluZCB0aGUgTEVCIG1hcHBlZCBhZ2FpbiB0byB0aGUgc2FtZQorICogcGh5c2ljYWwgZXJhc2VibG9jayBhZnRlciB0aGUgVUJJIGlzIHJ1biBhZ2Fpbi4KKyAqCisgKiBDaGVjayBpZiBsb2dpY2FsIGVyYXNlYmxvY2sgaXMgbWFwcGVkCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqIFRvIGNoZWNrIGlmIGEgbG9naWNhbCBlcmFzZWJsb2NrIGlzIG1hcHBlZCB0byBhIHBoeXNpY2FsIGVyYXNlYmxvY2ssIHRoZQorICogJVVCSV9JT0NFQklTTUFQIGlvY3RsIGNvbW1hbmQgc2hvdWxkIGJlIHVzZWQuIEl0IHJldHVybnMgJTAgaWYgdGhlIExFQiBpcworICogbm90IG1hcHBlZCwgYW5kICUxIGlmIGl0IGlzIG1hcHBlZC4KKyAqCisgKiBTZXQgYW4gVUJJIHZvbHVtZSBwcm9wZXJ0eQorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqIFRvIHNldCBhbiBVQkkgdm9sdW1lIHByb3BlcnR5IHRoZSAlVUJJX0lPQ1NFVFBST1AgaW9jdGwgY29tbWFuZCBzaG91bGQgYmUKKyAqIHVzZWQuIEEgcG9pbnRlciB0byBhICZzdHJ1Y3QgdWJpX3NldF9wcm9wX3JlcSBvYmplY3QgaXMgZXhwZWN0ZWQgdG8gYmUKKyAqIHBhc3NlZC4gVGhlIG9iamVjdCBkZXNjcmliZXMgd2hpY2ggcHJvcGVydHkgc2hvdWxkIGJlIHNldCwgYW5kIHRvIHdoaWNoIHZhbHVlCisgKiBpdCBzaG91bGQgYmUgc2V0LgorICovCisKKy8qCisgKiBXaGVuIGEgbmV3IFVCSSB2b2x1bWUgb3IgVUJJIGRldmljZSBpcyBjcmVhdGVkLCB1c2VycyBtYXkgZWl0aGVyIHNwZWNpZnkgdGhlCisgKiB2b2x1bWUvZGV2aWNlIG51bWJlciB0aGV5IHdhbnQgdG8gY3JlYXRlIG9yIHRvIGxldCBVQkkgYXV0b21hdGljYWxseSBhc3NpZ24KKyAqIHRoZSBudW1iZXIgdXNpbmcgdGhlc2UgY29uc3RhbnRzLgorICovCisjZGVmaW5lIFVCSV9WT0xfTlVNX0FVVE8gKC0xKQorI2RlZmluZSBVQklfREVWX05VTV9BVVRPICgtMSkKKworLyogTWF4aW11bSB2b2x1bWUgbmFtZSBsZW5ndGggKi8KKyNkZWZpbmUgVUJJX01BWF9WT0xVTUVfTkFNRSAxMjcKKworLyogaW9jdGwgY29tbWFuZHMgb2YgVUJJIGNoYXJhY3RlciBkZXZpY2VzICovCisKKyNkZWZpbmUgVUJJX0lPQ19NQUdJQyAnbycKKworLyogQ3JlYXRlIGFuIFVCSSB2b2x1bWUgKi8KKyNkZWZpbmUgVUJJX0lPQ01LVk9MIF9JT1coVUJJX0lPQ19NQUdJQywgMCwgc3RydWN0IHViaV9ta3ZvbF9yZXEpCisvKiBSZW1vdmUgYW4gVUJJIHZvbHVtZSAqLworI2RlZmluZSBVQklfSU9DUk1WT0wgX0lPVyhVQklfSU9DX01BR0lDLCAxLCBfX3MzMikKKy8qIFJlLXNpemUgYW4gVUJJIHZvbHVtZSAqLworI2RlZmluZSBVQklfSU9DUlNWT0wgX0lPVyhVQklfSU9DX01BR0lDLCAyLCBzdHJ1Y3QgdWJpX3Jzdm9sX3JlcSkKKy8qIFJlLW5hbWUgdm9sdW1lcyAqLworI2RlZmluZSBVQklfSU9DUk5WT0wgX0lPVyhVQklfSU9DX01BR0lDLCAzLCBzdHJ1Y3QgdWJpX3Judm9sX3JlcSkKKworLyogaW9jdGwgY29tbWFuZHMgb2YgdGhlIFVCSSBjb250cm9sIGNoYXJhY3RlciBkZXZpY2UgKi8KKworI2RlZmluZSBVQklfQ1RSTF9JT0NfTUFHSUMgJ28nCisKKy8qIEF0dGFjaCBhbiBNVEQgZGV2aWNlICovCisjZGVmaW5lIFVCSV9JT0NBVFQgX0lPVyhVQklfQ1RSTF9JT0NfTUFHSUMsIDY0LCBzdHJ1Y3QgdWJpX2F0dGFjaF9yZXEpCisvKiBEZXRhY2ggYW4gTVREIGRldmljZSAqLworI2RlZmluZSBVQklfSU9DREVUIF9JT1coVUJJX0NUUkxfSU9DX01BR0lDLCA2NSwgX19zMzIpCisKKy8qIGlvY3RsIGNvbW1hbmRzIG9mIFVCSSB2b2x1bWUgY2hhcmFjdGVyIGRldmljZXMgKi8KKworI2RlZmluZSBVQklfVk9MX0lPQ19NQUdJQyAnTycKKworLyogU3RhcnQgVUJJIHZvbHVtZSB1cGRhdGUgKi8KKyNkZWZpbmUgVUJJX0lPQ1ZPTFVQIF9JT1coVUJJX1ZPTF9JT0NfTUFHSUMsIDAsIF9fczY0KQorLyogTEVCIGVyYXN1cmUgY29tbWFuZCwgdXNlZCBmb3IgZGVidWdnaW5nLCBkaXNhYmxlZCBieSBkZWZhdWx0ICovCisjZGVmaW5lIFVCSV9JT0NFQkVSIF9JT1coVUJJX1ZPTF9JT0NfTUFHSUMsIDEsIF9fczMyKQorLyogQXRvbWljIExFQiBjaGFuZ2UgY29tbWFuZCAqLworI2RlZmluZSBVQklfSU9DRUJDSCBfSU9XKFVCSV9WT0xfSU9DX01BR0lDLCAyLCBfX3MzMikKKy8qIE1hcCBMRUIgY29tbWFuZCAqLworI2RlZmluZSBVQklfSU9DRUJNQVAgX0lPVyhVQklfVk9MX0lPQ19NQUdJQywgMywgc3RydWN0IHViaV9tYXBfcmVxKQorLyogVW5tYXAgTEVCIGNvbW1hbmQgKi8KKyNkZWZpbmUgVUJJX0lPQ0VCVU5NQVAgX0lPVyhVQklfVk9MX0lPQ19NQUdJQywgNCwgX19zMzIpCisvKiBDaGVjayBpZiBMRUIgaXMgbWFwcGVkIGNvbW1hbmQgKi8KKyNkZWZpbmUgVUJJX0lPQ0VCSVNNQVAgX0lPUihVQklfVk9MX0lPQ19NQUdJQywgNSwgX19zMzIpCisvKiBTZXQgYW4gVUJJIHZvbHVtZSBwcm9wZXJ0eSAqLworI2RlZmluZSBVQklfSU9DU0VUUFJPUCBfSU9XKFVCSV9WT0xfSU9DX01BR0lDLCA2LCBzdHJ1Y3QgdWJpX3NldF9wcm9wX3JlcSkKKworLyogTWF4aW11bSBNVEQgZGV2aWNlIG5hbWUgbGVuZ3RoIHN1cHBvcnRlZCBieSBVQkkgKi8KKyNkZWZpbmUgTUFYX1VCSV9NVERfTkFNRV9MRU4gMTI3CisKKy8qIE1heGltdW0gYW1vdW50IG9mIFVCSSB2b2x1bWVzIHRoYXQgY2FuIGJlIHJlLW5hbWVkIGF0IG9uZSBnbyAqLworI2RlZmluZSBVQklfTUFYX1JOVk9MIDMyCisKKy8qCisgKiBVQkkgZGF0YSB0eXBlIGhpbnQgY29uc3RhbnRzLgorICoKKyAqIFVCSV9MT05HVEVSTTogbG9uZy10ZXJtIGRhdGEKKyAqIFVCSV9TSE9SVFRFUk06IHNob3J0LXRlcm0gZGF0YQorICogVUJJX1VOS05PV046IGRhdGEgcGVyc2lzdGVuY2UgaXMgdW5rbm93bgorICoKKyAqIFRoZXNlIGNvbnN0YW50cyBhcmUgdXNlZCB3aGVuIGRhdGEgaXMgd3JpdHRlbiB0byBVQkkgdm9sdW1lcyBpbiBvcmRlciB0bworICogaGVscCB0aGUgVUJJIHdlYXItbGV2ZWxpbmcgdW5pdCB0byBmaW5kIG1vcmUgYXBwcm9wcmlhdGUgcGh5c2ljYWwKKyAqIGVyYXNlYmxvY2tzLgorICovCitlbnVtIHsKKwlVQklfTE9OR1RFUk0gID0gMSwKKwlVQklfU0hPUlRURVJNID0gMiwKKwlVQklfVU5LTk9XTiAgID0gMywKK307CisKKy8qCisgKiBVQkkgdm9sdW1lIHR5cGUgY29uc3RhbnRzLgorICoKKyAqIEBVQklfRFlOQU1JQ19WT0xVTUU6IGR5bmFtaWMgdm9sdW1lCisgKiBAVUJJX1NUQVRJQ19WT0xVTUU6ICBzdGF0aWMgdm9sdW1lCisgKi8KK2VudW0geworCVVCSV9EWU5BTUlDX1ZPTFVNRSA9IDMsCisJVUJJX1NUQVRJQ19WT0xVTUUgID0gNCwKK307CisKKy8qCisgKiBVQkkgc2V0IHByb3BlcnR5IGlvY3RsIGNvbnN0YW50cworICoKKyAqIEBVQklfUFJPUF9ESVJFQ1RfV1JJVEU6IGFsbG93IC8gZGlzYWxsb3cgdXNlciB0byBkaXJlY3RseSB3cml0ZSBhbmQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGVyYXNlIGluZGl2aWR1YWwgZXJhc2VibG9ja3Mgb24gZHluYW1pYyB2b2x1bWVzCisgKi8KK2VudW0geworICAgICAgIFVCSV9QUk9QX0RJUkVDVF9XUklURSA9IDEsCit9OworCisvKioKKyAqIHN0cnVjdCB1YmlfYXR0YWNoX3JlcSAtIGF0dGFjaCBNVEQgZGV2aWNlIHJlcXVlc3QuCisgKiBAdWJpX251bTogVUJJIGRldmljZSBudW1iZXIgdG8gY3JlYXRlCisgKiBAbXRkX251bTogTVREIGRldmljZSBudW1iZXIgdG8gYXR0YWNoCisgKiBAdmlkX2hkcl9vZmZzZXQ6IFZJRCBoZWFkZXIgb2Zmc2V0ICh1c2UgZGVmYXVsdHMgaWYgJTApCisgKiBAcGFkZGluZzogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSwgbm90IHVzZWQsIGhhcyB0byBiZSB6ZXJvZWQKKyAqCisgKiBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIHVzZWQgdG8gc3BlY2lmeSBNVEQgZGV2aWNlIFVCSSBoYXMgdG8gYXR0YWNoIGFuZCB0aGUKKyAqIHBhcmFtZXRlcnMgaXQgaGFzIHRvIHVzZS4gVGhlIG51bWJlciB3aGljaCBzaG91bGQgYmUgYXNzaWduZWQgdG8gdGhlIG5ldyBVQkkKKyAqIGRldmljZSBpcyBwYXNzZWQgaW4gQHViaV9udW0uIFVCSSBtYXkgYXV0b21hdGljYWxseSBhc3NpZ24gdGhlIG51bWJlciBpZgorICogQFVCSV9ERVZfTlVNX0FVVE8gaXMgcGFzc2VkLiBJbiB0aGlzIGNhc2UsIHRoZSBkZXZpY2UgbnVtYmVyIGlzIHJldHVybmVkIGluCisgKiBAdWJpX251bS4KKyAqCisgKiBNb3N0IGFwcGxpY2F0aW9ucyBzaG91bGQgcGFzcyAlMCBpbiBAdmlkX2hkcl9vZmZzZXQgdG8gbWFrZSBVQkkgdXNlIGRlZmF1bHQKKyAqIG9mZnNldCBvZiB0aGUgVklEIGhlYWRlciB3aXRoaW4gcGh5c2ljYWwgZXJhc2VibG9ja3MuIFRoZSBkZWZhdWx0IG9mZnNldCBpcworICogdGhlIG5leHQgbWluLiBJL08gdW5pdCBhZnRlciB0aGUgRUMgaGVhZGVyLiBGb3IgZXhhbXBsZSwgaXQgd2lsbCBiZSBvZmZzZXQKKyAqIDUxMiBpbiBjYXNlIG9mIGEgNTEyIGJ5dGVzIHBhZ2UgTkFORCBmbGFzaCB3aXRoIG5vIHN1Yi1wYWdlIHN1cHBvcnQuIE9yCisgKiBpdCB3aWxsIGJlIDUxMiBpbiBjYXNlIG9mIGEgMktpQiBwYWdlIE5BTkQgZmxhc2ggd2l0aCA0IDUxMi1ieXRlIHN1Yi1wYWdlcy4KKyAqCisgKiBCdXQgaW4gcmFyZSBjYXNlcywgaWYgdGhpcyBvcHRpbWl6ZXMgdGhpbmdzLCB0aGUgVklEIGhlYWRlciBtYXkgYmUgcGxhY2VkIHRvCisgKiBhIGRpZmZlcmVudCBvZmZzZXQuIEZvciBleGFtcGxlLCB0aGUgYm9vdC1sb2FkZXIgbWlnaHQgZG8gdGhpbmdzIGZhc3RlciBpZgorICogdGhlIFZJRCBoZWFkZXIgc2l0cyBhdCB0aGUgZW5kIG9mIHRoZSBmaXJzdCAyS2lCIE5BTkQgcGFnZSB3aXRoIDQgc3ViLXBhZ2VzLgorICogQXMgdGhlIGJvb3QtbG9hZGVyIHdvdWxkIG5vdCBub3JtYWxseSBuZWVkIHRvIHJlYWQgRUMgaGVhZGVycyAodW5sZXNzIGl0CisgKiBuZWVkcyBVQkkgaW4gUlcgbW9kZSksIGl0IG1pZ2h0IGJlIGZhc3RlciB0byBjYWxjdWxhdGUgRUNDLiBUaGlzIGlzIHdlaXJkCisgKiBleGFtcGxlLCBidXQgaXQgcmVhbC1saWZlIGV4YW1wbGUuIFNvLCBpbiB0aGlzIGV4YW1wbGUsIEB2aWRfaGRyX29mZmVyIHdvdWxkCisgKiBiZSAyS2lCLTY0IGJ5dGVzID0gMTk4NC4gTm90ZSwgdGhhdCB0aGlzIHBvc2l0aW9uIGlzIG5vdCBldmVuIDUxMi1ieXRlcworICogYWxpZ25lZCwgd2hpY2ggaXMgT0ssIGFzIFVCSSBpcyBjbGV2ZXIgZW5vdWdoIHRvIHJlYWxpemUgdGhpcyBpcyA0dGgKKyAqIHN1Yi1wYWdlIG9mIHRoZSBmaXJzdCBwYWdlIGFuZCBhZGQgbmVlZGVkIHBhZGRpbmcuCisgKi8KK3N0cnVjdCB1YmlfYXR0YWNoX3JlcSB7CisJX19zMzIgdWJpX251bTsKKwlfX3MzMiBtdGRfbnVtOworCV9fczMyIHZpZF9oZHJfb2Zmc2V0OworCV9fczggcGFkZGluZ1sxMl07Cit9OworCisvKioKKyAqIHN0cnVjdCB1YmlfbWt2b2xfcmVxIC0gdm9sdW1lIGRlc2NyaXB0aW9uIGRhdGEgc3RydWN0dXJlIHVzZWQgaW4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgdm9sdW1lIGNyZWF0aW9uIHJlcXVlc3RzLgorICogQHZvbF9pZDogdm9sdW1lIG51bWJlcgorICogQGFsaWdubWVudDogdm9sdW1lIGFsaWdubWVudAorICogQGJ5dGVzOiB2b2x1bWUgc2l6ZSBpbiBieXRlcworICogQHZvbF90eXBlOiB2b2x1bWUgdHlwZSAoJVVCSV9EWU5BTUlDX1ZPTFVNRSBvciAlVUJJX1NUQVRJQ19WT0xVTUUpCisgKiBAcGFkZGluZzE6IHJlc2VydmVkIGZvciBmdXR1cmUsIG5vdCB1c2VkLCBoYXMgdG8gYmUgemVyb2VkCisgKiBAbmFtZV9sZW46IHZvbHVtZSBuYW1lIGxlbmd0aAorICogQHBhZGRpbmcyOiByZXNlcnZlZCBmb3IgZnV0dXJlLCBub3QgdXNlZCwgaGFzIHRvIGJlIHplcm9lZAorICogQG5hbWU6IHZvbHVtZSBuYW1lCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBieSB1c2VyLXNwYWNlIHByb2dyYW1zIHdoZW4gY3JlYXRpbmcgbmV3IHZvbHVtZXMuIFRoZQorICogQHVzZWRfYnl0ZXMgZmllbGQgaXMgb25seSBuZWNlc3Nhcnkgd2hlbiBjcmVhdGluZyBzdGF0aWMgdm9sdW1lcy4KKyAqCisgKiBUaGUgQGFsaWdubWVudCBmaWVsZCBzcGVjaWZpZXMgdGhlIHJlcXVpcmVkIGFsaWdubWVudCBvZiB0aGUgdm9sdW1lIGxvZ2ljYWwKKyAqIGVyYXNlYmxvY2suIFRoaXMgbWVhbnMsIHRoYXQgdGhlIHNpemUgb2YgbG9naWNhbCBlcmFzZWJsb2NrcyB3aWxsIGJlIGFsaWduZWQKKyAqIHRvIHRoaXMgbnVtYmVyLCBpLmUuLAorICoJKFVCSSBkZXZpY2UgbG9naWNhbCBlcmFzZWJsb2NrIHNpemUpIG1vZCAoQGFsaWdubWVudCkgPSAwLgorICoKKyAqIFRvIHB1dCBpdCBkaWZmZXJlbnRseSwgdGhlIGxvZ2ljYWwgZXJhc2VibG9jayBvZiB0aGlzIHZvbHVtZSBtYXkgYmUgc2xpZ2h0bHkKKyAqIHNob3J0ZW5lZCBpbiBvcmRlciB0byBtYWtlIGl0IHByb3Blcmx5IGFsaWduZWQuIFRoZSBhbGlnbm1lbnQgaGFzIHRvIGJlCisgKiBtdWx0aXBsZSBvZiB0aGUgZmxhc2ggbWluaW1hbCBpbnB1dC9vdXRwdXQgdW5pdCwgb3IgJTEgdG8gdXRpbGl6ZSB0aGUgZW50aXJlCisgKiBhdmFpbGFibGUgc3BhY2Ugb2YgbG9naWNhbCBlcmFzZWJsb2Nrcy4KKyAqCisgKiBUaGUgQGFsaWdubWVudCBmaWVsZCBtYXkgYmUgdXNlZnVsLCBmb3IgZXhhbXBsZSwgd2hlbiBvbmUgd2FudHMgdG8gbWFpbnRhaW4KKyAqIGEgYmxvY2sgZGV2aWNlIG9uIHRvcCBvZiBhbiBVQkkgdm9sdW1lLiBJbiB0aGlzIGNhc2UsIGl0IGlzIGRlc2lyYWJsZSB0byBmaXQKKyAqIGFuIGludGVnZXIgbnVtYmVyIG9mIGJsb2NrcyBpbiBsb2dpY2FsIGVyYXNlYmxvY2tzIG9mIHRoaXMgVUJJIHZvbHVtZS4gV2l0aAorICogYWxpZ25tZW50IGl0IGlzIHBvc3NpYmxlIHRvIHVwZGF0ZSB0aGlzIHZvbHVtZSB1c2luZyBwbGFuZSBVQkkgdm9sdW1lIGltYWdlCisgKiBCTE9Ccywgd2l0aG91dCBjYXJpbmcgYWJvdXQgaG93IHRvIHByb3Blcmx5IGFsaWduIHRoZW0uCisgKi8KK3N0cnVjdCB1YmlfbWt2b2xfcmVxIHsKKwlfX3MzMiB2b2xfaWQ7CisJX19zMzIgYWxpZ25tZW50OworCV9fczY0IGJ5dGVzOworCV9fczggdm9sX3R5cGU7CisJX19zOCBwYWRkaW5nMTsKKwlfX3MxNiBuYW1lX2xlbjsKKwlfX3M4IHBhZGRpbmcyWzRdOworCWNoYXIgbmFtZVtVQklfTUFYX1ZPTFVNRV9OQU1FICsgMV07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoqCisgKiBzdHJ1Y3QgdWJpX3Jzdm9sX3JlcSAtIGEgZGF0YSBzdHJ1Y3R1cmUgdXNlZCBpbiB2b2x1bWUgcmUtc2l6ZSByZXF1ZXN0cy4KKyAqIEB2b2xfaWQ6IElEIG9mIHRoZSB2b2x1bWUgdG8gcmUtc2l6ZQorICogQGJ5dGVzOiBuZXcgc2l6ZSBvZiB0aGUgdm9sdW1lIGluIGJ5dGVzCisgKgorICogUmUtc2l6aW5nIGlzIHBvc3NpYmxlIGZvciBib3RoIGR5bmFtaWMgYW5kIHN0YXRpYyB2b2x1bWVzLiBCdXQgd2hpbGUgZHluYW1pYworICogdm9sdW1lcyBtYXkgYmUgcmUtc2l6ZWQgYXJiaXRyYXJpbHksIHN0YXRpYyB2b2x1bWVzIGNhbm5vdCBiZSBtYWRlIHRvIGJlCisgKiBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBvZiBieXRlcyB0aGV5IGJlYXIuIFRvIGFyYml0cmFyaWx5IHNocmluayBhIHN0YXRpYworICogdm9sdW1lLCBpdCBtdXN0IGJlIHdpcGVkIG91dCBmaXJzdCAoYnkgbWVhbnMgb2Ygdm9sdW1lIHVwZGF0ZSBvcGVyYXRpb24gd2l0aAorICogemVybyBudW1iZXIgb2YgYnl0ZXMpLgorICovCitzdHJ1Y3QgdWJpX3Jzdm9sX3JlcSB7CisJX19zNjQgYnl0ZXM7CisJX19zMzIgdm9sX2lkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qKgorICogc3RydWN0IHViaV9ybnZvbF9yZXEgLSB2b2x1bWVzIHJlLW5hbWUgcmVxdWVzdC4KKyAqIEBjb3VudDogY291bnQgb2Ygdm9sdW1lcyB0byByZS1uYW1lCisgKiBAcGFkZGluZzE6ICByZXNlcnZlZCBmb3IgZnV0dXJlLCBub3QgdXNlZCwgaGFzIHRvIGJlIHplcm9lZAorICogQHZvbF9pZDogSUQgb2YgdGhlIHZvbHVtZSB0byByZS1uYW1lCisgKiBAbmFtZV9sZW46IG5hbWUgbGVuZ3RoCisgKiBAcGFkZGluZzI6ICByZXNlcnZlZCBmb3IgZnV0dXJlLCBub3QgdXNlZCwgaGFzIHRvIGJlIHplcm9lZAorICogQG5hbWU6IG5ldyB2b2x1bWUgbmFtZQorICoKKyAqIFVCSSBhbGxvd3MgdG8gcmUtbmFtZSB1cCB0byAlMzIgdm9sdW1lcyBhdCBvbmUgZ28uIFRoZSBjb3VudCBvZiB2b2x1bWVzIHRvCisgKiByZS1uYW1lIGlzIHNwZWNpZmllZCBpbiB0aGUgQGNvdW50IGZpZWxkLiBUaGUgSUQgb2YgdGhlIHZvbHVtZXMgdG8gcmUtbmFtZQorICogYW5kIHRoZSBuZXcgbmFtZXMgYXJlIHNwZWNpZmllZCBpbiB0aGUgQHZvbF9pZCBhbmQgQG5hbWUgZmllbGRzLgorICoKKyAqIFRoZSBVQkkgdm9sdW1lIHJlLW5hbWUgb3BlcmF0aW9uIGlzIGF0b21pYywgd2hpY2ggbWVhbnMgdGhhdCBzaG91bGQgcG93ZXIgY3V0CisgKiBoYXBwZW4sIHRoZSB2b2x1bWVzIHdpbGwgaGF2ZSBlaXRoZXIgb2xkIG5hbWUgb3IgbmV3IG5hbWUuIFNvIHRoZSBwb3NzaWJsZQorICogdXNlLWNhc2VzIG9mIHRoaXMgY29tbWFuZCBpcyBhdG9taWMgdXBncmFkZS4gSW5kZWVkLCB0byB1cGdyYWRlLCBzYXksIHZvbHVtZXMKKyAqIEEgYW5kIEIgb25lIG1heSBjcmVhdGUgdGVtcG9yYXJ5IHZvbHVtZXMgJUExIGFuZCAlQjEgd2l0aCB0aGUgbmV3IGNvbnRlbnRzLAorICogdGhlbiBhdG9taWNhbGx5IHJlLW5hbWUgQTEtPkEgYW5kIEIxLT5CLCBpbiB3aGljaCBjYXNlIG9sZCAlQSBhbmQgJUIgd2lsbAorICogYmUgcmVtb3ZlZC4KKyAqCisgKiBJZiBpdCBpcyBub3QgZGVzaXJhYmxlIHRvIHJlbW92ZSBvbGQgQSBhbmQgQiwgdGhlIHJlLW5hbWUgcmVxdWVzdCBoYXMgdG8KKyAqIGNvbnRhaW4gNCBlbnRyaWVzOiBBMS0+QSwgQS0+QTEsIEIxLT5CLCBCLT5CMSwgaW4gd2hpY2ggY2FzZSBvbGQgQTEgYW5kIEIxCisgKiBiZWNvbWUgQSBhbmQgQiwgYW5kIG9sZCBBIGFuZCBCIHdpbGwgYmVjb21lIEExIGFuZCBCMS4KKyAqCisgKiBJdCBpcyBhbHNvIE9LIHRvIHJlcXVlc3Q6IEExLT5BLCBBMS0+WCwgQjEtPkIsIEItPlksIGluIHdoaWNoIGNhc2Ugb2xkIEExCisgKiBhbmQgQjEgYmVjb21lIEEgYW5kIEIsIGFuZCBvbGQgQSBhbmQgQiBiZWNvbWUgWCBhbmQgWS4KKyAqCisgKiBJbiBvdGhlciB3b3JkcywgaW4gY2FzZSBvZiByZS1uYW1pbmcgaW50byBhbiBleGlzdGluZyB2b2x1bWUgbmFtZSwgdGhlCisgKiBleGlzdGluZyB2b2x1bWUgaXMgcmVtb3ZlZCwgdW5sZXNzIGl0IGlzIHJlLW5hbWVkIGFzIHdlbGwgYXQgdGhlIHNhbWUKKyAqIHJlLW5hbWUgcmVxdWVzdC4KKyAqLworc3RydWN0IHViaV9ybnZvbF9yZXEgeworCV9fczMyIGNvdW50OworCV9fczggcGFkZGluZzFbMTJdOworCXN0cnVjdCB7CisJCV9fczMyIHZvbF9pZDsKKwkJX19zMTYgbmFtZV9sZW47CisJCV9fczggIHBhZGRpbmcyWzJdOworCQljaGFyICAgIG5hbWVbVUJJX01BWF9WT0xVTUVfTkFNRSArIDFdOworCX0gZW50c1tVQklfTUFYX1JOVk9MXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKioKKyAqIHN0cnVjdCB1YmlfbGViX2NoYW5nZV9yZXEgLSBhIGRhdGEgc3RydWN0dXJlIHVzZWQgaW4gYXRvbWljIExFQiBjaGFuZ2UKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy4KKyAqIEBsbnVtOiBsb2dpY2FsIGVyYXNlYmxvY2sgbnVtYmVyIHRvIGNoYW5nZQorICogQGJ5dGVzOiBob3cgbWFueSBieXRlcyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIGxvZ2ljYWwgZXJhc2VibG9jaworICogQGR0eXBlOiBkYXRhIHR5cGUgKCVVQklfTE9OR1RFUk0sICVVQklfU0hPUlRURVJNLCAlVUJJX1VOS05PV04pCisgKiBAcGFkZGluZzogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSwgbm90IHVzZWQsIGhhcyB0byBiZSB6ZXJvZWQKKyAqLworc3RydWN0IHViaV9sZWJfY2hhbmdlX3JlcSB7CisJX19zMzIgbG51bTsKKwlfX3MzMiBieXRlczsKKwlfX3M4ICBkdHlwZTsKKwlfX3M4ICBwYWRkaW5nWzddOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qKgorICogc3RydWN0IHViaV9tYXBfcmVxIC0gYSBkYXRhIHN0cnVjdHVyZSB1c2VkIGluIG1hcCBMRUIgcmVxdWVzdHMuCisgKiBAbG51bTogbG9naWNhbCBlcmFzZWJsb2NrIG51bWJlciB0byB1bm1hcAorICogQGR0eXBlOiBkYXRhIHR5cGUgKCVVQklfTE9OR1RFUk0sICVVQklfU0hPUlRURVJNLCAlVUJJX1VOS05PV04pCisgKiBAcGFkZGluZzogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSwgbm90IHVzZWQsIGhhcyB0byBiZSB6ZXJvZWQKKyAqLworc3RydWN0IHViaV9tYXBfcmVxIHsKKwlfX3MzMiBsbnVtOworCV9fczggIGR0eXBlOworCV9fczggIHBhZGRpbmdbM107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKioKKyAqIHN0cnVjdCB1Ymlfc2V0X3Byb3BfcmVxIC0gYSBkYXRhIHN0cnVjdHVyZSB1c2VkIHRvIHNldCBhbiB1Ymkgdm9sdW1lCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5LgorICogQHByb3BlcnR5OiBwcm9wZXJ0eSB0byBzZXQgKCVVQklfUFJPUF9ESVJFQ1RfV1JJVEUpCisgKiBAcGFkZGluZzogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSwgbm90IHVzZWQsIGhhcyB0byBiZSB6ZXJvZWQKKyAqIEB2YWx1ZTogdmFsdWUgdG8gc2V0CisgKi8KK3N0cnVjdCB1Ymlfc2V0X3Byb3BfcmVxIHsKKyAgICAgICBfX3U4ICBwcm9wZXJ0eTsKKyAgICAgICBfX3U4ICBwYWRkaW5nWzddOworICAgICAgIF9fdTY0IHZhbHVlOworfSAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZW5kaWYgLyogX19VQklfVVNFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXQvZXRoZXJuZXQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXQvZXRoZXJuZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjQyZDU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldC9ldGhlcm5ldC5oCkBAIC0wLDAgKzEsODQgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5NywgMTk5OSwgMjAwMSwgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyogQmFzZWQgb24gdGhlIEZyZWVCU0QgdmVyc2lvbiBvZiB0aGlzIGZpbGUuIEN1cmlvdXNseSwgdGhhdCBmaWxlCisgICBsYWNrcyBhIGNvcHlyaWdodCBpbiB0aGUgaGVhZGVyLiAqLworCisjaWZuZGVmIF9fTkVUX0VUSEVSTkVUX0gKKyNkZWZpbmUgX19ORVRfRVRIRVJORVRfSCAxCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPiAgICAgLyogSUVFRSA4MDIuMyBFdGhlcm5ldCBjb25zdGFudHMgKi8KKworX19CRUdJTl9ERUNMUworCisvKiBUaGlzIGlzIGEgbmFtZSBmb3IgdGhlIDQ4IGJpdCBldGhlcm5ldCBhZGRyZXNzIGF2YWlsYWJsZSBvbiBtYW55CisgICBzeXN0ZW1zLiAgKi8KK3N0cnVjdCBldGhlcl9hZGRyCit7CisgIHVfaW50OF90IGV0aGVyX2FkZHJfb2N0ZXRbRVRIX0FMRU5dOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCisvKiAxME1iL3MgZXRoZXJuZXQgaGVhZGVyICovCitzdHJ1Y3QgZXRoZXJfaGVhZGVyCit7CisgIHVfaW50OF90ICBldGhlcl9kaG9zdFtFVEhfQUxFTl07CS8qIGRlc3RpbmF0aW9uIGV0aCBhZGRyCSovCisgIHVfaW50OF90ICBldGhlcl9zaG9zdFtFVEhfQUxFTl07CS8qIHNvdXJjZSBldGhlciBhZGRyCSovCisgIHVfaW50MTZfdCBldGhlcl90eXBlOwkJICAgICAgICAvKiBwYWNrZXQgdHlwZSBJRCBmaWVsZAkqLworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCisvKiBFdGhlcm5ldCBwcm90b2NvbCBJRCdzICovCisjZGVmaW5lCUVUSEVSVFlQRV9QVVAJCTB4MDIwMCAgICAgICAgICAvKiBYZXJveCBQVVAgKi8KKyNkZWZpbmUgRVRIRVJUWVBFX1NQUklURQkweDA1MDAJCS8qIFNwcml0ZSAqLworI2RlZmluZQlFVEhFUlRZUEVfSVAJCTB4MDgwMAkJLyogSVAgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0FSUAkJMHgwODA2CQkvKiBBZGRyZXNzIHJlc29sdXRpb24gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1JFVkFSUAkweDgwMzUJCS8qIFJldmVyc2UgQVJQICovCisjZGVmaW5lIEVUSEVSVFlQRV9BVAkJMHg4MDlCCQkvKiBBcHBsZVRhbGsgcHJvdG9jb2wgKi8KKyNkZWZpbmUgRVRIRVJUWVBFX0FBUlAJCTB4ODBGMwkJLyogQXBwbGVUYWxrIEFSUCAqLworI2RlZmluZQlFVEhFUlRZUEVfVkxBTgkJMHg4MTAwCQkvKiBJRUVFIDgwMi4xUSBWTEFOIHRhZ2dpbmcgKi8KKyNkZWZpbmUgRVRIRVJUWVBFX0lQWAkJMHg4MTM3CQkvKiBJUFggKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0lQVjYJCTB4ODZkZAkJLyogSVAgcHJvdG9jb2wgdmVyc2lvbiA2ICovCisjZGVmaW5lIEVUSEVSVFlQRV9MT09QQkFDSwkweDkwMDAJCS8qIHVzZWQgdG8gdGVzdCBpbnRlcmZhY2VzICovCisKKworI2RlZmluZQlFVEhFUl9BRERSX0xFTglFVEhfQUxFTiAgICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBldGhlcm5ldCBhZGRyICovCisjZGVmaW5lCUVUSEVSX1RZUEVfTEVOCTIgICAgICAgICAgICAgICAgICAgICAgICAvKiBieXRlcyBpbiB0eXBlIGZpZWxkICovCisjZGVmaW5lCUVUSEVSX0NSQ19MRU4JNCAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJ5dGVzIGluIENSQyBmaWVsZCAqLworI2RlZmluZQlFVEhFUl9IRFJfTEVOCUVUSF9ITEVOICAgICAgICAgICAgICAgICAvKiB0b3RhbCBvY3RldHMgaW4gaGVhZGVyICovCisjZGVmaW5lCUVUSEVSX01JTl9MRU4JKEVUSF9aTEVOICsgRVRIRVJfQ1JDX0xFTikgLyogbWluIHBhY2tldCBsZW5ndGggKi8KKyNkZWZpbmUJRVRIRVJfTUFYX0xFTgkoRVRIX0ZSQU1FX0xFTiArIEVUSEVSX0NSQ19MRU4pIC8qIG1heCBwYWNrZXQgbGVuZ3RoICovCisKKy8qIG1ha2Ugc3VyZSBldGhlbmV0IGxlbmd0aCBpcyB2YWxpZCAqLworI2RlZmluZQlFVEhFUl9JU19WQUxJRF9MRU4oZm9vKQlcCisJKChmb28pID49IEVUSEVSX01JTl9MRU4gJiYgKGZvbykgPD0gRVRIRVJfTUFYX0xFTikKKworLyoKKyAqIFRoZSBFVEhFUlRZUEVfTlRSQUlMRVIgcGFja2V0IHR5cGVzIHN0YXJ0aW5nIGF0IEVUSEVSVFlQRV9UUkFJTCBoYXZlCisgKiAodHlwZS1FVEhFUlRZUEVfVFJBSUwpKjUxMiBieXRlcyBvZiBkYXRhIGZvbGxvd2VkCisgKiBieSBhbiBFVEhFUiB0eXBlIChhcyBnaXZlbiBhYm92ZSkgYW5kIHRoZW4gdGhlICh2YXJpYWJsZS1sZW5ndGgpIGhlYWRlci4KKyAqLworI2RlZmluZQlFVEhFUlRZUEVfVFJBSUwJCTB4MTAwMAkJLyogVHJhaWxlciBwYWNrZXQgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX05UUkFJTEVSCTE2CisKKyNkZWZpbmUJRVRIRVJNVFUJRVRIX0RBVEFfTEVOCisjZGVmaW5lCUVUSEVSTUlOCShFVEhFUl9NSU5fTEVOIC0gRVRIRVJfSERSX0xFTiAtIEVUSEVSX0NSQ19MRU4pCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZgkvKiBuZXQvZXRoZXJuZXQuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldC9pZi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldC9pZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYjNlOWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0L2lmLmgKQEAgLTAsMCArMSwyMDUgQEAKKy8qIG5ldC9pZi5oIC0tIGRlY2xhcmF0aW9ucyBmb3IgaW5xdWlyaW5nIGFib3V0IG5ldHdvcmsgaW50ZXJmYWNlcworICAgQ29weXJpZ2h0IChDKSAxOTk3LDk4LDk5LDIwMDAsMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfTkVUX0lGX0gKKyNkZWZpbmUgX05FVF9JRl9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKyNpZmRlZiBfX1VTRV9NSVNDCisjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorIyBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKworCisvKiBMZW5ndGggb2YgaW50ZXJmYWNlIG5hbWUuICAqLworI2RlZmluZSBJRl9OQU1FU0laRQkxNgorCitzdHJ1Y3QgaWZfbmFtZWluZGV4CisgIHsKKyAgICB1bnNpZ25lZCBpbnQgaWZfaW5kZXg7CS8qIDEsIDIsIC4uLiAqLworICAgIGNoYXIgKmlmX25hbWU7CQkvKiBudWxsIHRlcm1pbmF0ZWQgbmFtZTogImV0aDAiLCAuLi4gKi8KKyAgfTsKKworCisjaWZkZWYgX19VU0VfTUlTQworLyogU3RhbmRhcmQgaW50ZXJmYWNlIGZsYWdzLiAqLworZW51bQorICB7CisgICAgSUZGX1VQID0gMHgxLAkJLyogSW50ZXJmYWNlIGlzIHVwLiAgKi8KKyMgZGVmaW5lIElGRl9VUAlJRkZfVVAKKyAgICBJRkZfQlJPQURDQVNUID0gMHgyLAkvKiBCcm9hZGNhc3QgYWRkcmVzcyB2YWxpZC4gICovCisjIGRlZmluZSBJRkZfQlJPQURDQVNUCUlGRl9CUk9BRENBU1QKKyAgICBJRkZfREVCVUcgPSAweDQsCQkvKiBUdXJuIG9uIGRlYnVnZ2luZy4gICovCisjIGRlZmluZSBJRkZfREVCVUcJSUZGX0RFQlVHCisgICAgSUZGX0xPT1BCQUNLID0gMHg4LAkJLyogSXMgYSBsb29wYmFjayBuZXQuICAqLworIyBkZWZpbmUgSUZGX0xPT1BCQUNLCUlGRl9MT09QQkFDSworICAgIElGRl9QT0lOVE9QT0lOVCA9IDB4MTAsCS8qIEludGVyZmFjZSBpcyBwb2ludC10by1wb2ludCBsaW5rLiAgKi8KKyMgZGVmaW5lIElGRl9QT0lOVE9QT0lOVCBJRkZfUE9JTlRPUE9JTlQKKyAgICBJRkZfTk9UUkFJTEVSUyA9IDB4MjAsCS8qIEF2b2lkIHVzZSBvZiB0cmFpbGVycy4gICovCisjIGRlZmluZSBJRkZfTk9UUkFJTEVSUwlJRkZfTk9UUkFJTEVSUworICAgIElGRl9SVU5OSU5HID0gMHg0MCwJCS8qIFJlc291cmNlcyBhbGxvY2F0ZWQuICAqLworIyBkZWZpbmUgSUZGX1JVTk5JTkcJSUZGX1JVTk5JTkcKKyAgICBJRkZfTk9BUlAgPSAweDgwLAkJLyogTm8gYWRkcmVzcyByZXNvbHV0aW9uIHByb3RvY29sLiAgKi8KKyMgZGVmaW5lIElGRl9OT0FSUAlJRkZfTk9BUlAKKyAgICBJRkZfUFJPTUlTQyA9IDB4MTAwLAkvKiBSZWNlaXZlIGFsbCBwYWNrZXRzLiAgKi8KKyMgZGVmaW5lIElGRl9QUk9NSVNDCUlGRl9QUk9NSVNDCisKKyAgICAvKiBOb3Qgc3VwcG9ydGVkICovCisgICAgSUZGX0FMTE1VTFRJID0gMHgyMDAsCS8qIFJlY2VpdmUgYWxsIG11bHRpY2FzdCBwYWNrZXRzLiAgKi8KKyMgZGVmaW5lIElGRl9BTExNVUxUSQlJRkZfQUxMTVVMVEkKKworICAgIElGRl9NQVNURVIgPSAweDQwMCwJCS8qIE1hc3RlciBvZiBhIGxvYWQgYmFsYW5jZXIuICAqLworIyBkZWZpbmUgSUZGX01BU1RFUglJRkZfTUFTVEVSCisgICAgSUZGX1NMQVZFID0gMHg4MDAsCQkvKiBTbGF2ZSBvZiBhIGxvYWQgYmFsYW5jZXIuICAqLworIyBkZWZpbmUgSUZGX1NMQVZFCUlGRl9TTEFWRQorCisgICAgSUZGX01VTFRJQ0FTVCA9IDB4MTAwMCwJLyogU3VwcG9ydHMgbXVsdGljYXN0LiAgKi8KKyMgZGVmaW5lIElGRl9NVUxUSUNBU1QJSUZGX01VTFRJQ0FTVAorCisgICAgSUZGX1BPUlRTRUwgPSAweDIwMDAsCS8qIENhbiBzZXQgbWVkaWEgdHlwZS4gICovCisjIGRlZmluZSBJRkZfUE9SVFNFTAlJRkZfUE9SVFNFTAorICAgIElGRl9BVVRPTUVESUEgPSAweDQwMDAsCS8qIEF1dG8gbWVkaWEgc2VsZWN0IGFjdGl2ZS4gICovCisjIGRlZmluZSBJRkZfQVVUT01FRElBCUlGRl9BVVRPTUVESUEKKyAgICBJRkZfRFlOQU1JQyA9IDB4ODAwMAkvKiBEaWFsdXAgZGV2aWNlIHdpdGggY2hhbmdpbmcgYWRkcmVzc2VzLiAgKi8KKyMgZGVmaW5lIElGRl9EWU5BTUlDCUlGRl9EWU5BTUlDCisgIH07CisKKy8qIFRoZSBpZmFkZHIgc3RydWN0dXJlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IG9uZSBhZGRyZXNzIG9mIGFuCisgICBpbnRlcmZhY2UuICBUaGV5IGFyZSBtYWludGFpbmVkIGJ5IHRoZSBkaWZmZXJlbnQgYWRkcmVzcyBmYW1pbGllcywKKyAgIGFyZSBhbGxvY2F0ZWQgYW5kIGF0dGFjaGVkIHdoZW4gYW4gYWRkcmVzcyBpcyBzZXQsIGFuZCBhcmUgbGlua2VkCisgICB0b2dldGhlciBzbyBhbGwgYWRkcmVzc2VzIGZvciBhbiBpbnRlcmZhY2UgY2FuIGJlIGxvY2F0ZWQuICAqLworCitzdHJ1Y3QgaWZhZGRyCisgIHsKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgaWZhX2FkZHI7CS8qIEFkZHJlc3Mgb2YgaW50ZXJmYWNlLiAgKi8KKyAgICB1bmlvbgorICAgICAgeworCXN0cnVjdCBzb2NrYWRkcglpZnVfYnJvYWRhZGRyOworCXN0cnVjdCBzb2NrYWRkcglpZnVfZHN0YWRkcjsKKyAgICAgIH0gaWZhX2lmdTsKKyAgICBzdHJ1Y3QgaWZhY2UgKmlmYV9pZnA7CS8qIEJhY2stcG9pbnRlciB0byBpbnRlcmZhY2UuICAqLworICAgIHN0cnVjdCBpZmFkZHIgKmlmYV9uZXh0OwkvKiBOZXh0IGFkZHJlc3MgZm9yIGludGVyZmFjZS4gICovCisgIH07CisKKyMgZGVmaW5lIGlmYV9icm9hZGFkZHIJaWZhX2lmdS5pZnVfYnJvYWRhZGRyCS8qIGJyb2FkY2FzdCBhZGRyZXNzCSovCisjIGRlZmluZSBpZmFfZHN0YWRkcglpZmFfaWZ1LmlmdV9kc3RhZGRyCS8qIG90aGVyIGVuZCBvZiBsaW5rCSovCisKKy8qIERldmljZSBtYXBwaW5nIHN0cnVjdHVyZS4gSSdkIGp1c3QgZ29uZSBvZmYgYW5kIGRlc2lnbmVkIGEKKyAgIGJlYXV0aWZ1bCBzY2hlbWUgdXNpbmcgb25seSBsb2FkYWJsZSBtb2R1bGVzIHdpdGggYXJndW1lbnRzIGZvcgorICAgZHJpdmVyIG9wdGlvbnMgYW5kIGFsb25nIGNvbWUgdGhlIFBDTUNJQSBwZW9wbGUgOCkKKworICAgQWggd2VsbC4gVGhlIGdldCgpIHNpZGUgb2YgdGhpcyBpcyBnb29kIGZvciBXRFNFVFVQLCBhbmQgaXQnbGwgYmUKKyAgIGhhbmR5IGZvciBkZWJ1Z2dpbmcgdGhpbmdzLiBUaGUgc2V0IHNpZGUgaXMgZmluZSBmb3Igbm93IGFuZCBiZWluZworICAgdmVyeSBzbWFsbCBtaWdodCBiZSB3b3J0aCBrZWVwaW5nIGZvciBjbGVhbiBjb25maWd1cmF0aW9uLiAgKi8KKworc3RydWN0IGlmbWFwCisgIHsKKyAgICB1bnNpZ25lZCBsb25nIGludCBtZW1fc3RhcnQ7CisgICAgdW5zaWduZWQgbG9uZyBpbnQgbWVtX2VuZDsKKyAgICB1bnNpZ25lZCBzaG9ydCBpbnQgYmFzZV9hZGRyOworICAgIHVuc2lnbmVkIGNoYXIgaXJxOworICAgIHVuc2lnbmVkIGNoYXIgZG1hOworICAgIHVuc2lnbmVkIGNoYXIgcG9ydDsKKyAgICAvKiAzIGJ5dGVzIHNwYXJlICovCisgIH07CisKKy8qIEludGVyZmFjZSByZXF1ZXN0IHN0cnVjdHVyZSB1c2VkIGZvciBzb2NrZXQgaW9jdGwncy4gIEFsbCBpbnRlcmZhY2UKKyAgIGlvY3RsJ3MgbXVzdCBoYXZlIHBhcmFtZXRlciBkZWZpbml0aW9ucyB3aGljaCBiZWdpbiB3aXRoIGlmcl9uYW1lLgorICAgVGhlIHJlbWFpbmRlciBtYXkgYmUgaW50ZXJmYWNlIHNwZWNpZmljLiAgKi8KKworc3RydWN0IGlmcmVxCisgIHsKKyMgZGVmaW5lIElGSFdBRERSTEVOCTYKKyMgZGVmaW5lIElGTkFNU0laCUlGX05BTUVTSVpFCisgICAgdW5pb24KKyAgICAgIHsKKwljaGFyIGlmcm5fbmFtZVtJRk5BTVNJWl07CS8qIEludGVyZmFjZSBuYW1lLCBlLmcuICJlbjAiLiAgKi8KKyAgICAgIH0gaWZyX2lmcm47CisKKyAgICB1bmlvbgorICAgICAgeworCXN0cnVjdCBzb2NrYWRkciBpZnJ1X2FkZHI7CisJc3RydWN0IHNvY2thZGRyIGlmcnVfZHN0YWRkcjsKKwlzdHJ1Y3Qgc29ja2FkZHIgaWZydV9icm9hZGFkZHI7CisJc3RydWN0IHNvY2thZGRyIGlmcnVfbmV0bWFzazsKKwlzdHJ1Y3Qgc29ja2FkZHIgaWZydV9od2FkZHI7CisJc2hvcnQgaW50IGlmcnVfZmxhZ3M7CisJaW50IGlmcnVfaXZhbHVlOworCWludCBpZnJ1X210dTsKKwlzdHJ1Y3QgaWZtYXAgaWZydV9tYXA7CisJY2hhciBpZnJ1X3NsYXZlW0lGTkFNU0laXTsJLyogSnVzdCBmaXRzIHRoZSBzaXplICovCisJY2hhciBpZnJ1X25ld25hbWVbSUZOQU1TSVpdOworCV9fY2FkZHJfdCBpZnJ1X2RhdGE7CisgICAgICB9IGlmcl9pZnJ1OworICB9OworIyBkZWZpbmUgaWZyX25hbWUJaWZyX2lmcm4uaWZybl9uYW1lCS8qIGludGVyZmFjZSBuYW1lIAkqLworIyBkZWZpbmUgaWZyX2h3YWRkcglpZnJfaWZydS5pZnJ1X2h3YWRkcgkvKiBNQUMgYWRkcmVzcyAJCSovCisjIGRlZmluZSBpZnJfYWRkcglpZnJfaWZydS5pZnJ1X2FkZHIJLyogYWRkcmVzcwkJKi8KKyMgZGVmaW5lIGlmcl9kc3RhZGRyCWlmcl9pZnJ1LmlmcnVfZHN0YWRkcgkvKiBvdGhlciBlbmQgb2YgcC1wIGxuawkqLworIyBkZWZpbmUgaWZyX2Jyb2FkYWRkcglpZnJfaWZydS5pZnJ1X2Jyb2FkYWRkcgkvKiBicm9hZGNhc3QgYWRkcmVzcwkqLworIyBkZWZpbmUgaWZyX25ldG1hc2sJaWZyX2lmcnUuaWZydV9uZXRtYXNrCS8qIGludGVyZmFjZSBuZXQgbWFzawkqLworIyBkZWZpbmUgaWZyX2ZsYWdzCWlmcl9pZnJ1LmlmcnVfZmxhZ3MJLyogZmxhZ3MJCSovCisjIGRlZmluZSBpZnJfbWV0cmljCWlmcl9pZnJ1LmlmcnVfaXZhbHVlCS8qIG1ldHJpYwkJKi8KKyMgZGVmaW5lIGlmcl9tdHUJaWZyX2lmcnUuaWZydV9tdHUJLyogbXR1CQkJKi8KKyMgZGVmaW5lIGlmcl9tYXAJaWZyX2lmcnUuaWZydV9tYXAJLyogZGV2aWNlIG1hcAkJKi8KKyMgZGVmaW5lIGlmcl9zbGF2ZQlpZnJfaWZydS5pZnJ1X3NsYXZlCS8qIHNsYXZlIGRldmljZQkJKi8KKyMgZGVmaW5lIGlmcl9kYXRhCWlmcl9pZnJ1LmlmcnVfZGF0YQkvKiBmb3IgdXNlIGJ5IGludGVyZmFjZQkqLworIyBkZWZpbmUgaWZyX2lmaW5kZXgJaWZyX2lmcnUuaWZydV9pdmFsdWUgICAgLyogaW50ZXJmYWNlIGluZGV4ICAgICAgKi8KKyMgZGVmaW5lIGlmcl9iYW5kd2lkdGgJaWZyX2lmcnUuaWZydV9pdmFsdWUJLyogbGluayBiYW5kd2lkdGgJKi8KKyMgZGVmaW5lIGlmcl9xbGVuCWlmcl9pZnJ1LmlmcnVfaXZhbHVlCS8qIHF1ZXVlIGxlbmd0aAkJKi8KKyMgZGVmaW5lIGlmcl9uZXduYW1lCWlmcl9pZnJ1LmlmcnVfbmV3bmFtZQkvKiBOZXcgbmFtZQkJKi8KKyMgZGVmaW5lIF9JT1RfaWZyZXEJX0lPVChfSU9UUyhjaGFyKSxJRk5BTVNJWixfSU9UUyhjaGFyKSwxNiwwLDApCisjIGRlZmluZSBfSU9UX2lmcmVxX3Nob3J0IF9JT1QoX0lPVFMoY2hhciksSUZOQU1TSVosX0lPVFMoc2hvcnQpLDEsMCwwKQorIyBkZWZpbmUgX0lPVF9pZnJlcV9pbnQJX0lPVChfSU9UUyhjaGFyKSxJRk5BTVNJWixfSU9UUyhpbnQpLDEsMCwwKQorCisKKy8qIFN0cnVjdHVyZSB1c2VkIGluIFNJT0NHSUZDT05GIHJlcXVlc3QuICBVc2VkIHRvIHJldHJpZXZlIGludGVyZmFjZQorICAgY29uZmlndXJhdGlvbiBmb3IgbWFjaGluZSAodXNlZnVsIGZvciBwcm9ncmFtcyB3aGljaCBtdXN0IGtub3cgYWxsCisgICBuZXR3b3JrcyBhY2Nlc3NpYmxlKS4gICovCisKK3N0cnVjdCBpZmNvbmYKKyAgeworICAgIGludAlpZmNfbGVuOwkJCS8qIFNpemUgb2YgYnVmZmVyLiAgKi8KKyAgICB1bmlvbgorICAgICAgeworCV9fY2FkZHJfdCBpZmN1X2J1ZjsKKwlzdHJ1Y3QgaWZyZXEgKmlmY3VfcmVxOworICAgICAgfSBpZmNfaWZjdTsKKyAgfTsKKyMgZGVmaW5lIGlmY19idWYJaWZjX2lmY3UuaWZjdV9idWYJLyogQnVmZmVyIGFkZHJlc3MuICAqLworIyBkZWZpbmUgaWZjX3JlcQlpZmNfaWZjdS5pZmN1X3JlcQkvKiBBcnJheSBvZiBzdHJ1Y3R1cmVzLiAgKi8KKyMgZGVmaW5lIF9JT1RfaWZjb25mIF9JT1QoX0lPVFMoc3RydWN0IGlmY29uZiksMSwwLDAsMCwwKSAvKiBub3QgcmlnaHQgKi8KKyNlbmRpZgkvKiBNaXNjLiAgKi8KKworX19CRUdJTl9ERUNMUworCisvKiBDb252ZXJ0IGFuIGludGVyZmFjZSBuYW1lIHRvIGFuIGluZGV4LCBhbmQgdmljZSB2ZXJzYS4gICovCitleHRlcm4gdW5zaWduZWQgaW50IGlmX25hbWV0b2luZGV4IChfX2NvbnN0IGNoYXIgKl9faWZuYW1lKSBfX1RIUk9XOworZXh0ZXJuIGNoYXIgKmlmX2luZGV4dG9uYW1lICh1bnNpZ25lZCBpbnQgX19pZmluZGV4LCBjaGFyICpfX2lmbmFtZSkgX19USFJPVzsKKworLyogUmV0dXJuIGEgbGlzdCBvZiBhbGwgaW50ZXJmYWNlcyBhbmQgdGhlaXIgaW5kaWNlcy4gICovCitleHRlcm4gc3RydWN0IGlmX25hbWVpbmRleCAqaWZfbmFtZWluZGV4ICh2b2lkKSBfX1RIUk9XOworCisvKiBGcmVlIHRoZSBkYXRhIHJldHVybmVkIGZyb20gaWZfbmFtZWluZGV4LiAgKi8KK2V4dGVybiB2b2lkIGlmX2ZyZWVuYW1laW5kZXggKHN0cnVjdCBpZl9uYW1laW5kZXggKl9fcHRyKSBfX1RIUk9XOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogbmV0L2lmLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXQvaWZfYXJwLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0L2lmX2FycC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MDg2NTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0L2lmX2FycC5oCkBAIC0wLDAgKzEsMTgyIEBACisvKiBEZWZpbml0aW9ucyBmb3IgQWRkcmVzcyBSZXNvbHV0aW9uIFByb3RvY29sLgorICAgQ29weXJpZ2h0IChDKSAxOTk3LDE5OTksMjAwMSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisgICBDb250cmlidXRlZCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5Ny4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qIEJhc2VkIG9uIHRoZSA0LjRCU0QgYW5kIExpbnV4IHZlcnNpb24gb2YgdGhpcyBmaWxlLiAgKi8KKworI2lmbmRlZiBfTkVUX0lGX0FSUF9ICisKKyNkZWZpbmUgX05FVF9JRl9BUlBfSCAxCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKK19fQkVHSU5fREVDTFMKKworLyogU29tZSBpbnRlcm5hbHMgZnJvbSBkZWVwIGRvd24gaW4gdGhlIGtlcm5lbC4gICovCisjZGVmaW5lIE1BWF9BRERSX0xFTgk3CisKKworLyogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyBhbiBldGhlcm5ldCBhcnAgaGVhZGVyLiAgKi8KKworLyogQVJQIHByb3RvY29sIG9wY29kZXMuICovCisjZGVmaW5lCUFSUE9QX1JFUVVFU1QJMQkJLyogQVJQIHJlcXVlc3QuICAqLworI2RlZmluZQlBUlBPUF9SRVBMWQkyCQkvKiBBUlAgcmVwbHkuICAqLworI2RlZmluZQlBUlBPUF9SUkVRVUVTVAkzCQkvKiBSQVJQIHJlcXVlc3QuICAqLworI2RlZmluZQlBUlBPUF9SUkVQTFkJNAkJLyogUkFSUCByZXBseS4gICovCisjZGVmaW5lCUFSUE9QX0luUkVRVUVTVAk4CQkvKiBJbkFSUCByZXF1ZXN0LiAgKi8KKyNkZWZpbmUJQVJQT1BfSW5SRVBMWQk5CQkvKiBJbkFSUCByZXBseS4gICovCisjZGVmaW5lCUFSUE9QX05BSwkxMAkJLyogKEFUTSlBUlAgTkFLLiAgKi8KKworLyogU2VlIFJGQyA4MjYgZm9yIHByb3RvY29sIGRlc2NyaXB0aW9uLiAgQVJQIHBhY2tldHMgYXJlIHZhcmlhYmxlCisgICBpbiBzaXplOyB0aGUgYXJwaGRyIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBmaXhlZC1sZW5ndGggcG9ydGlvbi4KKyAgIFByb3RvY29sIHR5cGUgdmFsdWVzIGFyZSB0aGUgc2FtZSBhcyB0aG9zZSBmb3IgMTAgTWIvcyBFdGhlcm5ldC4KKyAgIEl0IGlzIGZvbGxvd2VkIGJ5IHRoZSB2YXJpYWJsZS1zaXplZCBmaWVsZHMgYXJfc2hhLCBhcnBfc3BhLAorICAgYXJwX3RoYSBhbmQgYXJwX3RwYSBpbiB0aGF0IG9yZGVyLCBhY2NvcmRpbmcgdG8gdGhlIGxlbmd0aHMKKyAgIHNwZWNpZmllZC4gIEZpZWxkIG5hbWVzIHVzZWQgY29ycmVzcG9uZCB0byBSRkMgODI2LiAgKi8KKworc3RydWN0IGFycGhkcgorICB7CisgICAgdW5zaWduZWQgc2hvcnQgaW50IGFyX2hyZDsJCS8qIEZvcm1hdCBvZiBoYXJkd2FyZSBhZGRyZXNzLiAgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCBpbnQgYXJfcHJvOwkJLyogRm9ybWF0IG9mIHByb3RvY29sIGFkZHJlc3MuICAqLworICAgIHVuc2lnbmVkIGNoYXIgYXJfaGxuOwkJLyogTGVuZ3RoIG9mIGhhcmR3YXJlIGFkZHJlc3MuICAqLworICAgIHVuc2lnbmVkIGNoYXIgYXJfcGxuOwkJLyogTGVuZ3RoIG9mIHByb3RvY29sIGFkZHJlc3MuICAqLworICAgIHVuc2lnbmVkIHNob3J0IGludCBhcl9vcDsJCS8qIEFSUCBvcGNvZGUgKGNvbW1hbmQpLiAgKi8KKyNpZiAwCisgICAgLyogRXRoZXJuZXQgbG9va3MgbGlrZSB0aGlzIDogVGhpcyBiaXQgaXMgdmFyaWFibGUgc2l6ZWQKKyAgICAgICBob3dldmVyLi4uICAqLworICAgIHVuc2lnbmVkIGNoYXIgX19hcl9zaGFbRVRIX0FMRU5dOwkvKiBTZW5kZXIgaGFyZHdhcmUgYWRkcmVzcy4gICovCisgICAgdW5zaWduZWQgY2hhciBfX2FyX3NpcFs0XTsJCS8qIFNlbmRlciBJUCBhZGRyZXNzLiAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIF9fYXJfdGhhW0VUSF9BTEVOXTsJLyogVGFyZ2V0IGhhcmR3YXJlIGFkZHJlc3MuICAqLworICAgIHVuc2lnbmVkIGNoYXIgX19hcl90aXBbNF07CQkvKiBUYXJnZXQgSVAgYWRkcmVzcy4gICovCisjZW5kaWYKKyAgfTsKKworCisvKiBBUlAgcHJvdG9jb2wgSEFSRFdBUkUgaWRlbnRpZmllcnMuICovCisjZGVmaW5lIEFSUEhSRF9ORVRST00JMAkJLyogRnJvbSBLQTlROiBORVQvUk9NIHBzZXVkby4gKi8KKyNkZWZpbmUgQVJQSFJEX0VUSEVSIAkxCQkvKiBFdGhlcm5ldCAxMC8xMDBNYnBzLiAgKi8KKyNkZWZpbmUJQVJQSFJEX0VFVEhFUgkyCQkvKiBFeHBlcmltZW50YWwgRXRoZXJuZXQuICAqLworI2RlZmluZQlBUlBIUkRfQVgyNQkzCQkvKiBBWC4yNSBMZXZlbCAyLiAgKi8KKyNkZWZpbmUJQVJQSFJEX1BST05FVAk0CQkvKiBQUk9uZXQgdG9rZW4gcmluZy4gICovCisjZGVmaW5lCUFSUEhSRF9DSEFPUwk1CQkvKiBDaGFvc25ldC4gICovCisjZGVmaW5lCUFSUEhSRF9JRUVFODAyCTYJCS8qIElFRUUgODAyLjIgRXRoZXJuZXQvVFIvVEIuICAqLworI2RlZmluZQlBUlBIUkRfQVJDTkVUCTcJCS8qIEFSQ25ldC4gICovCisjZGVmaW5lCUFSUEhSRF9BUFBMRVRMSwk4CQkvKiBBUFBMRXRhbGsuICAqLworI2RlZmluZQlBUlBIUkRfRExDSQkxNQkJLyogRnJhbWUgUmVsYXkgRExDSS4gICovCisjZGVmaW5lCUFSUEhSRF9BVE0JMTkJCS8qIEFUTS4gICovCisjZGVmaW5lCUFSUEhSRF9NRVRSSUNPTQkyMwkJLyogTWV0cmljb20gU1RSSVAgKG5ldyBJQU5BIGlkKS4gICovCisjZGVmaW5lIEFSUEhSRF9JRUVFMTM5NAkyNAkJLyogSUVFRSAxMzk0IElQdjQgLSBSRkMgMjczNC4gICovCisjZGVmaW5lIEFSUEhSRF9FVUk2NAkJMjcJCS8qIEVVSS02NC4gICovCisjZGVmaW5lIEFSUEhSRF9JTkZJTklCQU5ECTMyCQkvKiBJbmZpbmlCYW5kLiAgKi8KKworLyogRHVtbXkgdHlwZXMgZm9yIG5vbiBBUlAgaGFyZHdhcmUgKi8KKyNkZWZpbmUgQVJQSFJEX1NMSVAJMjU2CisjZGVmaW5lIEFSUEhSRF9DU0xJUAkyNTcKKyNkZWZpbmUgQVJQSFJEX1NMSVA2CTI1OAorI2RlZmluZSBBUlBIUkRfQ1NMSVA2CTI1OQorI2RlZmluZSBBUlBIUkRfUlNSVkQJMjYwCQkvKiBOb3Rpb25hbCBLSVNTIHR5cGUuICAqLworI2RlZmluZSBBUlBIUkRfQURBUFQJMjY0CisjZGVmaW5lIEFSUEhSRF9ST1NFCTI3MAorI2RlZmluZSBBUlBIUkRfWDI1CTI3MQkJLyogQ0NJVFQgWC4yNS4gICovCisjZGVmaW5lIEFSUEhSRF9IV1gyNQkyNzIJCS8qIEJvYXJkcyB3aXRoIFguMjUgaW4gZmlybXdhcmUuICAqLworI2RlZmluZSBBUlBIUkRfUFBQCTUxMgorI2RlZmluZSBBUlBIUkRfQ0lTQ08JNTEzCQkvKiBDaXNjbyBIRExDLiAgKi8KKyNkZWZpbmUgQVJQSFJEX0hETEMJQVJQSFJEX0NJU0NPCisjZGVmaW5lIEFSUEhSRF9MQVBCCTUxNgkJLyogTEFQQi4gICovCisjZGVmaW5lIEFSUEhSRF9ERENNUAk1MTcJCS8qIERpZ2l0YWwncyBERENNUC4gICovCisjZGVmaW5lCUFSUEhSRF9SQVdIRExDCTUxOAkJLyogUmF3IEhETEMuICAqLworCisjZGVmaW5lIEFSUEhSRF9UVU5ORUwJNzY4CQkvKiBJUElQIHR1bm5lbC4gICovCisjZGVmaW5lIEFSUEhSRF9UVU5ORUw2CTc2OQkJLyogSVBJUDYgdHVubmVsLiAgKi8KKyNkZWZpbmUgQVJQSFJEX0ZSQUQJNzcwICAgICAgICAgICAgIC8qIEZyYW1lIFJlbGF5IEFjY2VzcyBEZXZpY2UuICAqLworI2RlZmluZSBBUlBIUkRfU0tJUAk3NzEJCS8qIFNLSVAgdmlmLiAgKi8KKyNkZWZpbmUgQVJQSFJEX0xPT1BCQUNLCTc3MgkJLyogTG9vcGJhY2sgZGV2aWNlLiAgKi8KKyNkZWZpbmUgQVJQSFJEX0xPQ0FMVExLIDc3MwkJLyogTG9jYWx0YWxrIGRldmljZS4gICovCisjZGVmaW5lIEFSUEhSRF9GRERJCTc3NAkJLyogRmliZXIgRGlzdHJpYnV0ZWQgRGF0YSBJbnRlcmZhY2UuICovCisjZGVmaW5lIEFSUEhSRF9CSUYJNzc1ICAgICAgICAgICAgIC8qIEFQMTAwMCBCSUYuICAqLworI2RlZmluZSBBUlBIUkRfU0lUCTc3NgkJLyogc2l0MCBkZXZpY2UgLSBJUHY2LWluLUlQdjQuICAqLworI2RlZmluZSBBUlBIUkRfSVBERFAJNzc3CQkvKiBJUC1pbi1ERFAgdHVubmVsLiAgKi8KKyNkZWZpbmUgQVJQSFJEX0lQR1JFCTc3OAkJLyogR1JFIG92ZXIgSVAuICAqLworI2RlZmluZSBBUlBIUkRfUElNUkVHCTc3OQkJLyogUElNU00gcmVnaXN0ZXIgaW50ZXJmYWNlLiAgKi8KKyNkZWZpbmUgQVJQSFJEX0hJUFBJCTc4MAkJLyogSGlnaCBQZXJmb3JtYW5jZSBQYXJhbGxlbCBJJ2ZhY2UuICovCisjZGVmaW5lIEFSUEhSRF9BU0gJNzgxCQkvKiAoTmV4dXMgRWxlY3Ryb25pY3MpIEFzaC4gICovCisjZGVmaW5lIEFSUEhSRF9FQ09ORVQJNzgyCQkvKiBBY29ybiBFY29uZXQuICAqLworI2RlZmluZSBBUlBIUkRfSVJEQQk3ODMJCS8qIExpbnV4LUlyREEuICAqLworI2RlZmluZSBBUlBIUkRfRkNQUAk3ODQJCS8qIFBvaW50IHRvIHBvaW50IGZpYnJlY2hhbmVsLiAgKi8KKyNkZWZpbmUgQVJQSFJEX0ZDQUwJNzg1CQkvKiBGaWJyZWNoYW5lbCBhcmJpdHJhdGVkIGxvb3AuICAqLworI2RlZmluZSBBUlBIUkRfRkNQTAk3ODYJCS8qIEZpYnJlY2hhbmVsIHB1YmxpYyBsb29wLiAgKi8KKyNkZWZpbmUgQVJQSFJEX0ZDRkFCUklDIDc4NwkJLyogRmlicmVjaGFuZWwgZmFicmljLiAgKi8KKyNkZWZpbmUgQVJQSFJEX0lFRUU4MDJfVFIgODAwCQkvKiBNYWdpYyB0eXBlIGlkZW50IGZvciBUUi4gICovCisjZGVmaW5lIEFSUEhSRF9JRUVFODAyMTEgODAxCQkvKiBJRUVFIDgwMi4xMS4gICovCisjZGVmaW5lIEFSUEhSRF9JRUVFODAyMTFfUFJJU00gODAyCS8qIElFRUUgODAyLjExICsgUHJpc20yIGhlYWRlci4gICovCisjZGVmaW5lIEFSUEhSRF9JRUVFODAyMTFfUkFESU9UQVAgODAzCS8qIElFRUUgODAyLjExICsgcmFkaW90YXAgaGVhZGVyLiAgKi8KKworI2RlZmluZSBBUlBIUkRfVk9JRAkgIDB4RkZGRgkvKiBWb2lkIHR5cGUsIG5vdGhpbmcgaXMga25vd24uICAqLworI2RlZmluZSBBUlBIUkRfTk9ORQkgIDB4RkZGRQkvKiBaZXJvIGhlYWRlciBsZW5ndGguICAqLworCisKKy8qIEFSUCBpb2N0bCByZXF1ZXN0LiAgKi8KK3N0cnVjdCBhcnByZXEKKyAgeworICAgIHN0cnVjdCBzb2NrYWRkciBhcnBfcGE7CQkvKiBQcm90b2NvbCBhZGRyZXNzLiAgKi8KKyAgICBzdHJ1Y3Qgc29ja2FkZHIgYXJwX2hhOwkJLyogSGFyZHdhcmUgYWRkcmVzcy4gICovCisgICAgaW50IGFycF9mbGFnczsJCQkvKiBGbGFncy4gICovCisgICAgc3RydWN0IHNvY2thZGRyIGFycF9uZXRtYXNrOwkvKiBOZXRtYXNrIChvbmx5IGZvciBwcm94eSBhcnBzKS4gICovCisgICAgY2hhciBhcnBfZGV2WzE2XTsKKyAgfTsKKworc3RydWN0IGFycHJlcV9vbGQKKyAgeworICAgIHN0cnVjdCBzb2NrYWRkciBhcnBfcGE7CQkvKiBQcm90b2NvbCBhZGRyZXNzLiAgKi8KKyAgICBzdHJ1Y3Qgc29ja2FkZHIgYXJwX2hhOwkJLyogSGFyZHdhcmUgYWRkcmVzcy4gICovCisgICAgaW50IGFycF9mbGFnczsJCQkvKiBGbGFncy4gICovCisgICAgc3RydWN0IHNvY2thZGRyIGFycF9uZXRtYXNrOwkvKiBOZXRtYXNrIChvbmx5IGZvciBwcm94eSBhcnBzKS4gICovCisgIH07CisKKy8qIEFSUCBGbGFnIHZhbHVlcy4gICovCisjZGVmaW5lIEFURl9DT00JCTB4MDIJCS8qIENvbXBsZXRlZCBlbnRyeSAoaGEgdmFsaWQpLiAgKi8KKyNkZWZpbmUJQVRGX1BFUk0JMHgwNAkJLyogUGVybWFuZW50IGVudHJ5LiAgKi8KKyNkZWZpbmUJQVRGX1BVQkwJMHgwOAkJLyogUHVibGlzaCBlbnRyeS4gICovCisjZGVmaW5lCUFURl9VU0VUUkFJTEVSUwkweDEwCQkvKiBIYXMgcmVxdWVzdGVkIHRyYWlsZXJzLiAgKi8KKyNkZWZpbmUgQVRGX05FVE1BU0sgICAgIDB4MjAgICAgICAgICAgICAvKiBXYW50IHRvIHVzZSBhIG5ldG1hc2sgKG9ubHkKKwkJCQkJICAgZm9yIHByb3h5IGVudHJpZXMpLiAgKi8KKyNkZWZpbmUgQVRGX0RPTlRQVUIJMHg0MAkJLyogRG9uJ3QgYW5zd2VyIHRoaXMgYWRkcmVzc2VzLiAgKi8KKyNkZWZpbmUgQVRGX01BR0lDCTB4ODAJCS8qIEF1dG9tYXRpY2FsbHkgYWRkZWQgZW50cnkuICAqLworCisKKy8qIFN1cHBvcnQgZm9yIHRoZSB1c2VyIHNwYWNlIGFycCBkYWVtb24sIGFycGQuICAqLworI2RlZmluZSBBUlBEX1VQREFURQkweDAxCisjZGVmaW5lIEFSUERfTE9PS1VQCTB4MDIKKyNkZWZpbmUgQVJQRF9GTFVTSAkweDAzCisKK3N0cnVjdCBhcnBkX3JlcXVlc3QKKyAgeworICAgIHVuc2lnbmVkIHNob3J0IGludCByZXE7CQkvKiBSZXF1ZXN0IHR5cGUuICAqLworICAgIHVfaW50MzJfdCBpcDsJCQkvKiBJUCBhZGRyZXNzIG9mIGVudHJ5LiAgKi8KKyAgICB1bnNpZ25lZCBsb25nIGludCBkZXY7CQkvKiBEZXZpY2UgZW50cnkgaXMgdGllZCB0by4gICovCisgICAgdW5zaWduZWQgbG9uZyBpbnQgc3RhbXA7CisgICAgdW5zaWduZWQgbG9uZyBpbnQgdXBkYXRlZDsKKyAgICB1bnNpZ25lZCBjaGFyIGhhW01BWF9BRERSX0xFTl07CS8qIEhhcmR3YXJlIGFkZHJlc3MuICAqLworICB9OworCitfX0VORF9ERUNMUworCisjZW5kaWYJLyogbmV0L2lmX2FycC5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0L2lmX3BhY2tldC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldC9pZl9wYWNrZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTE4NGU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldC9pZl9wYWNrZXQuaApAQCAtMCwwICsxLDM3IEBACisvKiBEZWZpbml0aW9ucyBmb3IgdXNlIHdpdGggTGludXggU09DS19QQUNLRVQgc29ja2V0cy4KKyAgIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfX0lGX1BBQ0tFVF9ICisjZGVmaW5lIF9fSUZfUEFDS0VUX0gKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaW5jbHVkZSA8Yml0cy9zb2NrYWRkci5oPgorCisvKiBUaGlzIGlzIHRoZSBTT0NLX1BBQ0tFVCBhZGRyZXNzIHN0cnVjdHVyZSBhcyB1c2VkIGluIExpbnV4IDIuMC4KKyAgIEZyb20gTGludXggMi4xIHRoZSBBRl9QQUNLRVQgaW50ZXJmYWNlIGlzIHByZWZlcnJlZCBhbmQgeW91IHNob3VsZAorICAgY29uc2lkZXIgdXNpbmcgaXQgaW4gcGxhY2Ugb2YgdGhpcyBvbmUuICAqLworCitzdHJ1Y3Qgc29ja2FkZHJfcGt0CisgIHsKKyAgICBfX1NPQ0tBRERSX0NPTU1PTiAoc3BrdF8pOworICAgIHVuc2lnbmVkIGNoYXIgc3BrdF9kZXZpY2VbMTRdOworICAgIHVuc2lnbmVkIHNob3J0IHNwa3RfcHJvdG9jb2w7CisgIH07CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldC9pZl9wcHAuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXQvaWZfcHBwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY1ZWM4MwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXQvaWZfcHBwLmgKQEAgLTAsMCArMSwxNjkgQEAKKy8qCUZyb206IGlmX3BwcC5oLHYgMS4zIDE5OTUvMDYvMTIgMTE6MzY6NTAgcGF1bHVzIEV4cCAqLworCisvKgorICogaWZfcHBwLmggLSBQb2ludC10by1Qb2ludCBQcm90b2NvbCBkZWZpbml0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5ODkgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkuIAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBDQVJORUdJRSBNRUxMT04gVU5JVkVSU0lUWSBBTkQKKyAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBVTklWRVJTSVRZIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURQorICogR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIKKyAqIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgorICogT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgorICogSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKy8qCisgKiAgPT1GSUxFVkVSU0lPTiA5NjA5MjY9PQorICoKKyAqICBOT1RFIFRPIE1BSU5UQUlORVJTOgorICogICAgIElmIHlvdSBtb2RpZnkgdGhpcyBmaWxlIGF0IGFsbCwgcGxlYXNlIHNldCB0aGUgYWJvdmUgZGF0ZS4KKyAqICAgICBpZl9wcHAuaCBpcyBzaGlwcGVkIHdpdGggYSBQUFAgZGlzdHJpYnV0aW9uIGFzIHdlbGwgYXMgd2l0aCB0aGUga2VybmVsOworICogICAgIGlmIGV2ZXJ5b25lIGluY3JlYXNlcyB0aGUgRklMRVZFUlNJT04gbnVtYmVyIGFib3ZlLCB0aGVuIHNjcmlwdHMKKyAqICAgICBjYW4gZG8gdGhlIHJpZ2h0IHRoaW5nIHdoZW4gZGVjaWRpbmcgd2hldGhlciB0byBpbnN0YWxsIGEgbmV3IGlmX3BwcC5oCisgKiAgICAgZmlsZS4gIERvbid0IGNoYW5nZSB0aGUgZm9ybWF0IG9mIHRoYXQgbGluZSBvdGhlcndpc2UsIHNvIHRoZQorICogICAgIGluc3RhbGxhdGlvbiBzY3JpcHQgY2FuIHJlY29nbml6ZSBpdC4KKyAqLworCisKKyNpZm5kZWYgX19ORVRfSUZfUFBQX0gKKyNkZWZpbmUgX19ORVRfSUZfUFBQX0ggMQorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxuZXQvcHBwX2RlZnMuaD4KKworX19CRUdJTl9ERUNMUworCisvKgorICogUGFja2V0IHNpemVzCisgKi8KKworI2RlZmluZQlQUFBfTVRVCQkxNTAwCS8qIERlZmF1bHQgTVRVIChzaXplIG9mIEluZm8gZmllbGQpICovCisjZGVmaW5lIFBQUF9NQVhNUlUJNjUwMDAJLyogTGFyZ2VzdCBNUlUgd2UgYWxsb3cgKi8KKyNkZWZpbmUgUFBQX1ZFUlNJT04JIjIuMi4wIgorI2RlZmluZSBQUFBfTUFHSUMJMHg1MDAyCS8qIE1hZ2ljIHZhbHVlIGZvciB0aGUgcHBwIHN0cnVjdHVyZSAqLworI2RlZmluZSBQUk9UT19JUFgJMHgwMDJiCS8qIHByb3RvY29sIG51bWJlcnMgKi8KKyNkZWZpbmUgUFJPVE9fRE5BX1JUICAgIDB4MDAyNyAgLyogRE5BIFJvdXRpbmcgKi8KKworCisvKgorICogQml0IGRlZmluaXRpb25zIGZvciBmbGFncy4KKyAqLworCisjZGVmaW5lIFNDX0NPTVBfUFJPVAkweDAwMDAwMDAxCS8qIHByb3RvY29sIGNvbXByZXNzaW9uIChvdXRwdXQpICovCisjZGVmaW5lIFNDX0NPTVBfQUMJMHgwMDAwMDAwMgkvKiBoZWFkZXIgY29tcHJlc3Npb24gKG91dHB1dCkgKi8KKyNkZWZpbmUJU0NfQ09NUF9UQ1AJMHgwMDAwMDAwNAkvKiBUQ1AgKFZKKSBjb21wcmVzc2lvbiAob3V0cHV0KSAqLworI2RlZmluZSBTQ19OT19UQ1BfQ0NJRAkweDAwMDAwMDA4CS8qIGRpc2FibGUgVkogY29ubmVjdGlvbi1pZCBjb21wLiAqLworI2RlZmluZSBTQ19SRUpfQ09NUF9BQwkweDAwMDAwMDEwCS8qIHJlamVjdCBhZHJzL2N0cmwgY29tcC4gb24gaW5wdXQgKi8KKyNkZWZpbmUgU0NfUkVKX0NPTVBfVENQCTB4MDAwMDAwMjAJLyogcmVqZWN0IFRDUCAoVkopIGNvbXAuIG9uIGlucHV0ICovCisjZGVmaW5lIFNDX0NDUF9PUEVOCTB4MDAwMDAwNDAJLyogTG9vayBhdCBDQ1AgcGFja2V0cyAqLworI2RlZmluZSBTQ19DQ1BfVVAJMHgwMDAwMDA4MAkvKiBNYXkgc2VuZC9yZWN2IGNvbXByZXNzZWQgcGFja2V0cyAqLworI2RlZmluZSBTQ19FTkFCTEVfSVAJMHgwMDAwMDEwMAkvKiBJUCBwYWNrZXRzIG1heSBiZSBleGNoYW5nZWQgKi8KKyNkZWZpbmUgU0NfQ09NUF9SVU4JMHgwMDAwMTAwMAkvKiBjb21wcmVzc29yIGhhcyBiZWVuIGluaXRlZCAqLworI2RlZmluZSBTQ19ERUNPTVBfUlVOCTB4MDAwMDIwMDAJLyogZGVjb21wcmVzc29yIGhhcyBiZWVuIGluaXRlZCAqLworI2RlZmluZSBTQ19ERUJVRwkweDAwMDEwMDAwCS8qIGVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyAqLworI2RlZmluZSBTQ19MT0dfSU5QS1QJMHgwMDAyMDAwMAkvKiBsb2cgY29udGVudHMgb2YgZ29vZCBwa3RzIHJlY3ZkICovCisjZGVmaW5lIFNDX0xPR19PVVRQS1QJMHgwMDA0MDAwMAkvKiBsb2cgY29udGVudHMgb2YgcGt0cyBzZW50ICovCisjZGVmaW5lIFNDX0xPR19SQVdJTgkweDAwMDgwMDAwCS8qIGxvZyBhbGwgY2hhcnMgcmVjZWl2ZWQgKi8KKyNkZWZpbmUgU0NfTE9HX0ZMVVNICTB4MDAxMDAwMDAJLyogbG9nIGFsbCBjaGFycyBmbHVzaGVkICovCisjZGVmaW5lCVNDX01BU0sJCTB4MGZFMGZmZmYJLyogYml0cyB0aGF0IHVzZXIgY2FuIGNoYW5nZSAqLworCisvKiBzdGF0ZSBiaXRzICovCisjZGVmaW5lCVNDX0VTQ0FQRUQJMHg4MDAwMDAwMAkvKiBzYXcgYSBQUFBfRVNDQVBFICovCisjZGVmaW5lCVNDX0ZMVVNICTB4NDAwMDAwMDAJLyogZmx1c2ggaW5wdXQgdW50aWwgbmV4dCBQUFBfRkxBRyAqLworI2RlZmluZSBTQ19WSl9SRVNFVAkweDIwMDAwMDAwCS8qIE5lZWQgdG8gcmVzZXQgdGhlIFZKIGRlY29tcHJlc3NvciAqLworI2RlZmluZSBTQ19YTUlUX0JVU1kJMHgxMDAwMDAwMAkvKiBwcHBfd3JpdGVfd2FrZXVwIGlzIGFjdGl2ZSAqLworI2RlZmluZSBTQ19SQ1ZfT0REUAkweDA4MDAwMDAwCS8qIGhhdmUgcmN2ZCBjaGFyIHdpdGggb2RkIHBhcml0eSAqLworI2RlZmluZSBTQ19SQ1ZfRVZOUAkweDA0MDAwMDAwCS8qIGhhdmUgcmN2ZCBjaGFyIHdpdGggZXZlbiBwYXJpdHkgKi8KKyNkZWZpbmUgU0NfUkNWX0I3XzEJMHgwMjAwMDAwMAkvKiBoYXZlIHJjdmQgY2hhciB3aXRoIGJpdCA3ID0gMSAqLworI2RlZmluZSBTQ19SQ1ZfQjdfMAkweDAxMDAwMDAwCS8qIGhhdmUgcmN2ZCBjaGFyIHdpdGggYml0IDcgPSAwICovCisjZGVmaW5lIFNDX0RDX0ZFUlJPUgkweDAwODAwMDAwCS8qIGZhdGFsIGRlY29tcCBlcnJvciBkZXRlY3RlZCAqLworI2RlZmluZSBTQ19EQ19FUlJPUgkweDAwNDAwMDAwCS8qIG5vbi1mYXRhbCBkZWNvbXAgZXJyb3IgZGV0ZWN0ZWQgKi8KKworLyoKKyAqIElvY3RsIGRlZmluaXRpb25zLgorICovCisKK3N0cnVjdCBucGlvY3RsIHsKKyAgICBpbnQJCXByb3RvY29sOwkvKiBQUFAgcHJvdG9jb2wsIGUuZy4gUFBQX0lQICovCisgICAgZW51bSBOUG1vZGUJbW9kZTsKK307CisKKy8qIFN0cnVjdHVyZSBkZXNjcmliaW5nIGEgQ0NQIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBmb3IgUFBQSU9DU0NPTVBSRVNTICovCitzdHJ1Y3QgcHBwX29wdGlvbl9kYXRhIHsKKwl1X2ludDhfdCAgKnB0cjsKKwl1X2ludDMyX3QgbGVuZ3RoOworCWludAkgIHRyYW5zbWl0OworfTsKKworc3RydWN0IGlmcHBwc3RhdHNyZXEgeworICBzdHJ1Y3QgaWZyZXEJICAgYjsKKyAgc3RydWN0IHBwcF9zdGF0cyBzdGF0czsJCQkvKiBzdGF0aXN0aWMgaW5mb3JtYXRpb24gKi8KK307CisKK3N0cnVjdCBpZnBwcGNzdGF0c3JlcSB7CisgIHN0cnVjdCBpZnJlcQkJYjsKKyAgc3RydWN0IHBwcF9jb21wX3N0YXRzIHN0YXRzOworfTsKKworI2RlZmluZSBpZnJfX25hbWUgICAgICAgYi5pZnJfaWZybi5pZnJuX25hbWUKKyNkZWZpbmUgc3RhdHNfcHRyICAgICAgIGIuaWZyX2lmcnUuaWZydV9kYXRhCisKKy8qCisgKiBJb2N0bCBkZWZpbml0aW9ucy4KKyAqLworCisjZGVmaW5lCVBQUElPQ0dGTEFHUwlfSU9SKCd0JywgOTAsIGludCkJLyogZ2V0IGNvbmZpZ3VyYXRpb24gZmxhZ3MgKi8KKyNkZWZpbmUJUFBQSU9DU0ZMQUdTCV9JT1coJ3QnLCA4OSwgaW50KQkvKiBzZXQgY29uZmlndXJhdGlvbiBmbGFncyAqLworI2RlZmluZQlQUFBJT0NHQVNZTkNNQVAJX0lPUigndCcsIDg4LCBpbnQpCS8qIGdldCBhc3luYyBtYXAgKi8KKyNkZWZpbmUJUFBQSU9DU0FTWU5DTUFQCV9JT1coJ3QnLCA4NywgaW50KQkvKiBzZXQgYXN5bmMgbWFwICovCisjZGVmaW5lCVBQUElPQ0dVTklUCV9JT1IoJ3QnLCA4NiwgaW50KQkvKiBnZXQgcHBwIHVuaXQgbnVtYmVyICovCisjZGVmaW5lCVBQUElPQ0dSQVNZTkNNQVAgX0lPUigndCcsIDg1LCBpbnQpCS8qIGdldCByZWNlaXZlIGFzeW5jIG1hcCAqLworI2RlZmluZQlQUFBJT0NTUkFTWU5DTUFQIF9JT1coJ3QnLCA4NCwgaW50KQkvKiBzZXQgcmVjZWl2ZSBhc3luYyBtYXAgKi8KKyNkZWZpbmUJUFBQSU9DR01SVQlfSU9SKCd0JywgODMsIGludCkJLyogZ2V0IG1heCByZWNlaXZlIHVuaXQgKi8KKyNkZWZpbmUJUFBQSU9DU01SVQlfSU9XKCd0JywgODIsIGludCkJLyogc2V0IG1heCByZWNlaXZlIHVuaXQgKi8KKyNkZWZpbmUJUFBQSU9DU01BWENJRAlfSU9XKCd0JywgODEsIGludCkJLyogc2V0IFZKIG1heCBzbG90IElEICovCisjZGVmaW5lIFBQUElPQ0dYQVNZTkNNQVAgX0lPUigndCcsIDgwLCBleHRfYWNjbSkgLyogZ2V0IGV4dGVuZGVkIEFDQ00gKi8KKyNkZWZpbmUgUFBQSU9DU1hBU1lOQ01BUCBfSU9XKCd0JywgNzksIGV4dF9hY2NtKSAvKiBzZXQgZXh0ZW5kZWQgQUNDTSAqLworI2RlZmluZSBQUFBJT0NYRkVSVU5JVAlfSU8oJ3QnLCA3OCkJCS8qIHRyYW5zZmVyIFBQUCB1bml0ICovCisjZGVmaW5lIFBQUElPQ1NDT01QUkVTUwlfSU9XKCd0JywgNzcsIHN0cnVjdCBwcHBfb3B0aW9uX2RhdGEpCisjZGVmaW5lIFBQUElPQ0dOUE1PREUJX0lPV1IoJ3QnLCA3Niwgc3RydWN0IG5waW9jdGwpIC8qIGdldCBOUCBtb2RlICovCisjZGVmaW5lIFBQUElPQ1NOUE1PREUJX0lPVygndCcsIDc1LCBzdHJ1Y3QgbnBpb2N0bCkgIC8qIHNldCBOUCBtb2RlICovCisjZGVmaW5lIFBQUElPQ0dERUJVRwlfSU9SKCd0JywgNjUsIGludCkJLyogUmVhZCBkZWJ1ZyBsZXZlbCAqLworI2RlZmluZSBQUFBJT0NTREVCVUcJX0lPVygndCcsIDY0LCBpbnQpCS8qIFNldCBkZWJ1ZyBsZXZlbCAqLworI2RlZmluZSBQUFBJT0NHSURMRQlfSU9SKCd0JywgNjMsIHN0cnVjdCBwcHBfaWRsZSkgLyogZ2V0IGlkbGUgdGltZSAqLworCisjZGVmaW5lIFNJT0NHUFBQU1RBVFMgICAoU0lPQ0RFVlBSSVZBVEUgKyAwKQorI2RlZmluZSBTSU9DR1BQUFZFUiAgICAgKFNJT0NERVZQUklWQVRFICsgMSkgIC8qIE5FVkVSIGNoYW5nZSB0aGlzISEgKi8KKyNkZWZpbmUgU0lPQ0dQUFBDU1RBVFMgIChTSU9DREVWUFJJVkFURSArIDIpCisKKyNpZiAhZGVmaW5lZChpZnJfbXR1KQorI2RlZmluZSBpZnJfbXR1CWlmcl9pZnJ1LmlmcnVfbWV0cmljCisjZW5kaWYKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIG5ldC9pZl9wcHAuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldC9pZl9zaGFwZXIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXQvaWZfc2hhcGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2MGFmMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXQvaWZfc2hhcGVyLmgKQEAgLTAsMCArMSw1OSBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9ORVRfSUZfU0hBUEVSX0gKKyNkZWZpbmUgX05FVF9JRl9TSEFQRVJfSCAxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorCitfX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgU0hBUEVSX1FMRU4JMTAKKy8qCisgKglUaGlzIGlzIGEgYml0IHNwZWVkIGRlcGVuZGFudCAocmVhZCBpdCBzaG91bGRudCBiZSBhIGNvbnN0YW50ISkKKyAqCisgKgk1IGlzIGFib3V0IHJpZ2h0IGZvciAyOC44IHVwd2FyZHMuIEJlbG93IHRoYXQgZG91YmxlIGZvciBldmVyeQorICoJaGFsdmluZyBvZiBzcGVlZCBvciBzby4gLSBpZSBhYm91dCAyMCBmb3IgOTYwMCBiYXVkLgorICovCisjZGVmaW5lIFNIQVBFUl9MQVRFTkNZCSg1ICogSFopCisjZGVmaW5lIFNIQVBFUl9NQVhTTElQCTIKKyNkZWZpbmUgU0hBUEVSX0JVUlNUCShIWiAvIDUwKQkvKiBHb29kIGZvciA+MTI4SyB0aGVuICovCisKKyNkZWZpbmUgU0hBUEVSX1NFVF9ERVYJCTB4MDAwMQorI2RlZmluZSBTSEFQRVJfU0VUX1NQRUVECTB4MDAwMgorI2RlZmluZSBTSEFQRVJfR0VUX0RFVgkJMHgwMDAzCisjZGVmaW5lIFNIQVBFUl9HRVRfU1BFRUQJMHgwMDA0CisKK3N0cnVjdCBzaGFwZXJjb25mCit7CisgIHVfaW50MTZfdCBzc19jbWQ7CisgIHVuaW9uCisgIHsKKyAgICBjaGFyIHNzdV9uYW1lWzE0XTsKKyAgICB1X2ludDMyX3Qgc3N1X3NwZWVkOworICB9IHNzX3U7CisjZGVmaW5lIHNzX3NwZWVkIHNzX3Uuc3N1X3NwZWVkCisjZGVmaW5lIHNzX25hbWUgc3NfdS5zc3VfbmFtZQorfTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIG5ldC9pZl9zaGFwZXIuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldC9pZl9zbGlwLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0L2lmX3NsaXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmJkN2YzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldC9pZl9zbGlwLmgKQEAgLTAsMCArMSwyNSBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9ORVRfSUZfU0xJUF9ICisjZGVmaW5lIF9ORVRfSUZfU0xJUF9IIDEKKworLyogV2UgY2FuIHVzZSB0aGUga2VybmVsIGhlYWRlci4gICovCisjaW5jbHVkZSA8bGludXgvaWZfc2xpcC5oPgorCisjZW5kaWYJLyogbmV0L2lmX3NsaXAuaC4gICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0L3BwcC1jb21wLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0L3BwcC1jb21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE5OTJkNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXQvcHBwLWNvbXAuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8bGludXgvcHBwLWNvbXAuaD4KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXQvcHBwX2RlZnMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXQvcHBwX2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODkyNGM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldC9wcHBfZGVmcy5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX05FVF9QUFBfREVGU19ICisjZGVmaW5lIF9ORVRfUFBQX0RFRlNfSCAxCisKKyNkZWZpbmUgX19uZWVkX3RpbWVfdAorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BwcF9kZWZzLmg+CisKKyNlbmRpZiAvKiBuZXQvcHBwX2RlZnMuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldC9yb3V0ZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldC9yb3V0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNWM4MTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0L3JvdXRlLmgKQEAgLTAsMCArMSwxNDUgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5NywgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyogQmFzZWQgb24gdGhlIDQuNEJTRCBhbmQgTGludXggdmVyc2lvbiBvZiB0aGlzIGZpbGUuICAqLworCisjaWZuZGVmIF9ORVRfUk9VVEVfSAorI2RlZmluZSBfTkVUX1JPVVRFX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGJpdHMvd29yZHNpemUuaD4KKworCisvKiBUaGlzIHN0cnVjdHVyZSBnZXRzIHBhc3NlZCBieSB0aGUgU0lPQ0FERFJUIGFuZCBTSU9DREVMUlQgY2FsbHMuICovCitzdHJ1Y3QgcnRlbnRyeQorICB7CisgICAgdW5zaWduZWQgbG9uZyBpbnQgcnRfcGFkMTsKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgcnRfZHN0OwkJLyogVGFyZ2V0IGFkZHJlc3MuICAqLworICAgIHN0cnVjdCBzb2NrYWRkciBydF9nYXRld2F5OwkJLyogR2F0ZXdheSBhZGRyIChSVEZfR0FURVdBWSkuICAqLworICAgIHN0cnVjdCBzb2NrYWRkciBydF9nZW5tYXNrOwkJLyogVGFyZ2V0IG5ldHdvcmsgbWFzayAoSVApLiAgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCBpbnQgcnRfZmxhZ3M7CisgICAgc2hvcnQgaW50IHJ0X3BhZDI7CisgICAgdW5zaWduZWQgbG9uZyBpbnQgcnRfcGFkMzsKKyAgICB1bnNpZ25lZCBjaGFyIHJ0X3RvczsKKyAgICB1bnNpZ25lZCBjaGFyIHJ0X2NsYXNzOworI2lmIF9fV09SRFNJWkUgPT0gNjQKKyAgICBzaG9ydCBpbnQgcnRfcGFkNFszXTsKKyNlbHNlCisgICAgc2hvcnQgaW50IHJ0X3BhZDQ7CisjZW5kaWYKKyAgICBzaG9ydCBpbnQgcnRfbWV0cmljOwkJLyogKzEgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5ISAgKi8KKyAgICBjaGFyICpydF9kZXY7CQkJLyogRm9yY2luZyB0aGUgZGV2aWNlIGF0IGFkZC4gICovCisgICAgdW5zaWduZWQgbG9uZyBpbnQgcnRfbXR1OwkJLyogUGVyIHJvdXRlIE1UVS9XaW5kb3cuICAqLworICAgIHVuc2lnbmVkIGxvbmcgaW50IHJ0X3dpbmRvdzsJLyogV2luZG93IGNsYW1waW5nLiAgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCBpbnQgcnRfaXJ0dDsJCS8qIEluaXRpYWwgUlRULiAgKi8KKyAgfTsKKy8qIENvbXBhdGliaWxpdHkgaGFjay4gICovCisjZGVmaW5lIHJ0X21zcwlydF9tdHUKKworCitzdHJ1Y3QgaW42X3J0bXNnCisgIHsKKyAgICBzdHJ1Y3QgaW42X2FkZHIgcnRtc2dfZHN0OworICAgIHN0cnVjdCBpbjZfYWRkciBydG1zZ19zcmM7CisgICAgc3RydWN0IGluNl9hZGRyIHJ0bXNnX2dhdGV3YXk7CisgICAgdV9pbnQzMl90IHJ0bXNnX3R5cGU7CisgICAgdV9pbnQxNl90IHJ0bXNnX2RzdF9sZW47CisgICAgdV9pbnQxNl90IHJ0bXNnX3NyY19sZW47CisgICAgdV9pbnQzMl90IHJ0bXNnX21ldHJpYzsKKyAgICB1bnNpZ25lZCBsb25nIGludCBydG1zZ19pbmZvOworICAgIHVfaW50MzJfdCBydG1zZ19mbGFnczsKKyAgICBpbnQgcnRtc2dfaWZpbmRleDsKKyAgfTsKKworCisjZGVmaW5lCVJURl9VUAkJMHgwMDAxCQkvKiBSb3V0ZSB1c2FibGUuICAqLworI2RlZmluZQlSVEZfR0FURVdBWQkweDAwMDIJCS8qIERlc3RpbmF0aW9uIGlzIGEgZ2F0ZXdheS4gICovCisKKyNkZWZpbmUJUlRGX0hPU1QJMHgwMDA0CQkvKiBIb3N0IGVudHJ5IChuZXQgb3RoZXJ3aXNlKS4gICovCisjZGVmaW5lIFJURl9SRUlOU1RBVEUJMHgwMDA4CQkvKiBSZWluc3RhdGUgcm91dGUgYWZ0ZXIgdGltZW91dC4gICovCisjZGVmaW5lCVJURl9EWU5BTUlDCTB4MDAxMAkJLyogQ3JlYXRlZCBkeW4uIChieSByZWRpcmVjdCkuICAqLworI2RlZmluZQlSVEZfTU9ESUZJRUQJMHgwMDIwCQkvKiBNb2RpZmllZCBkeW4uIChieSByZWRpcmVjdCkuICAqLworI2RlZmluZSBSVEZfTVRVCQkweDAwNDAJCS8qIFNwZWNpZmljIE1UVSBmb3IgdGhpcyByb3V0ZS4gICovCisjZGVmaW5lIFJURl9NU1MJCVJURl9NVFUJCS8qIENvbXBhdGliaWxpdHkuICAqLworI2RlZmluZSBSVEZfV0lORE9XCTB4MDA4MAkJLyogUGVyIHJvdXRlIHdpbmRvdyBjbGFtcGluZy4gICovCisjZGVmaW5lIFJURl9JUlRUCTB4MDEwMAkJLyogSW5pdGlhbCByb3VuZCB0cmlwIHRpbWUuICAqLworI2RlZmluZSBSVEZfUkVKRUNUCTB4MDIwMAkJLyogUmVqZWN0IHJvdXRlLiAgKi8KKyNkZWZpbmUJUlRGX1NUQVRJQwkweDA0MDAJCS8qIE1hbnVhbGx5IGluamVjdGVkIHJvdXRlLiAgKi8KKyNkZWZpbmUJUlRGX1hSRVNPTFZFCTB4MDgwMAkJLyogRXh0ZXJuYWwgcmVzb2x2ZXIuICAqLworI2RlZmluZSBSVEZfTk9GT1JXQVJEICAgMHgxMDAwCQkvKiBGb3J3YXJkaW5nIGluaGliaXRlZC4gICovCisjZGVmaW5lIFJURl9USFJPVwkweDIwMDAJCS8qIEdvIHRvIG5leHQgY2xhc3MuICAqLworI2RlZmluZSBSVEZfTk9QTVRVRElTQyAgMHg0MDAwCQkvKiBEbyBub3Qgc2VuZCBwYWNrZXRzIHdpdGggREYuICAqLworCisvKiBmb3IgSVB2NiAqLworI2RlZmluZSBSVEZfREVGQVVMVAkweDAwMDEwMDAwCS8qIGRlZmF1bHQgLSBsZWFybmVkIHZpYSBORAkqLworI2RlZmluZSBSVEZfQUxMT05MSU5LCTB4MDAwMjAwMDAJLyogZmFsbGJhY2ssIG5vIHJvdXRlcnMgb24gbGluawkqLworI2RlZmluZSBSVEZfQUREUkNPTkYJMHgwMDA0MDAwMAkvKiBhZGRyY29uZiByb3V0ZSAtIFJBCQkqLworCisjZGVmaW5lIFJURl9MSU5LUlQJMHgwMDEwMDAwMAkvKiBsaW5rIHNwZWNpZmljIC0gZGV2aWNlIG1hdGNoCSovCisjZGVmaW5lIFJURl9OT05FWFRIT1AJMHgwMDIwMDAwMAkvKiByb3V0ZSB3aXRoIG5vIG5leHRob3AJKi8KKworI2RlZmluZSBSVEZfQ0FDSEUJMHgwMTAwMDAwMAkvKiBjYWNoZSBlbnRyeQkJCSovCisjZGVmaW5lIFJURl9GTE9XCTB4MDIwMDAwMDAJLyogZmxvdyBzaWduaWZpY2FudCByb3V0ZQkqLworI2RlZmluZSBSVEZfUE9MSUNZCTB4MDQwMDAwMDAJLyogcG9saWN5IHJvdXRlCQkJKi8KKworI2RlZmluZSBSVENGX1ZBTFZFCTB4MDAyMDAwMDAKKyNkZWZpbmUgUlRDRl9NQVNRCTB4MDA0MDAwMDAKKyNkZWZpbmUgUlRDRl9OQVQJMHgwMDgwMDAwMAorI2RlZmluZSBSVENGX0RPUkVESVJFQ1QgMHgwMTAwMDAwMAorI2RlZmluZSBSVENGX0xPRwkweDAyMDAwMDAwCisjZGVmaW5lIFJUQ0ZfRElSRUNUU1JDCTB4MDQwMDAwMDAKKworI2RlZmluZSBSVEZfTE9DQUwJMHg4MDAwMDAwMAorI2RlZmluZSBSVEZfSU5URVJGQUNFCTB4NDAwMDAwMDAKKyNkZWZpbmUgUlRGX01VTFRJQ0FTVAkweDIwMDAwMDAwCisjZGVmaW5lIFJURl9CUk9BRENBU1QJMHgxMDAwMDAwMAorI2RlZmluZSBSVEZfTkFUCQkweDA4MDAwMDAwCisKKyNkZWZpbmUgUlRGX0FERFJDTEFTU01BU0sJMHhGODAwMDAwMAorI2RlZmluZSBSVF9BRERSQ0xBU1MoZmxhZ3MpCSgoX191X2ludDMyX3QpIGZsYWdzID4+IDIzKQorCisjZGVmaW5lIFJUX1RPUyh0b3MpCQkoKHRvcykgJiBJUFRPU19UT1NfTUFTSykKKworI2RlZmluZSBSVF9MT0NBTEFERFIoZmxhZ3MpCSgoZmxhZ3MgJiBSVEZfQUREUkNMQVNTTUFTSykgXAorCQkJCSA9PSAoUlRGX0xPQ0FMfFJURl9JTlRFUkZBQ0UpKQorCisjZGVmaW5lIFJUX0NMQVNTX1VOU1BFQwkJMAorI2RlZmluZSBSVF9DTEFTU19ERUZBVUxUCTI1MworCisjZGVmaW5lIFJUX0NMQVNTX01BSU4JCTI1NAorI2RlZmluZSBSVF9DTEFTU19MT0NBTAkJMjU1CisjZGVmaW5lIFJUX0NMQVNTX01BWAkJMjU1CisKKworI2RlZmluZSBSVE1TR19BQ0sJCU5MTVNHX0FDSworI2RlZmluZSBSVE1TR19PVkVSUlVOCQlOTE1TR19PVkVSUlVOCisKKyNkZWZpbmUgUlRNU0dfTkVXREVWSUNFCQkweDExCisjZGVmaW5lIFJUTVNHX0RFTERFVklDRQkJMHgxMgorI2RlZmluZSBSVE1TR19ORVdST1VURQkJMHgyMQorI2RlZmluZSBSVE1TR19ERUxST1VURQkJMHgyMgorI2RlZmluZSBSVE1TR19ORVdSVUxFCQkweDMxCisjZGVmaW5lIFJUTVNHX0RFTFJVTEUJCTB4MzIKKyNkZWZpbmUgUlRNU0dfQ09OVFJPTAkJMHg0MAorCisjZGVmaW5lIFJUTVNHX0FSX0ZBSUxFRAkJMHg1MQkvKiBBZGRyZXNzIFJlc29sdXRpb24gZmFpbGVkLiAgKi8KKworI2VuZGlmIC8qIG5ldC9yb3V0ZS5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0YXNoL2FzaC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldGFzaC9hc2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTJjMGFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldGFzaC9hc2guaApAQCAtMCwwICsxLDQwIEBACisvKiBEZWZpbml0aW9ucyBmb3IgdXNlIHdpdGggTGludXggQUZfQVNIIHNvY2tldHMuCisgICBDb3B5cmlnaHQgKEMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX05FVEFTSF9BU0hfSAorI2RlZmluZSBfTkVUQVNIX0FTSF9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaW5jbHVkZSA8Yml0cy9zb2NrYWRkci5oPgorCitzdHJ1Y3Qgc29ja2FkZHJfYXNoCisgIHsKKyAgICBfX1NPQ0tBRERSX0NPTU1PTiAoc2FzaF8pOwkJLyogQ29tbW9uIGRhdGE6IGFkZHJlc3MgZmFtaWx5IGV0Yy4gICovCisgICAgaW50IHNhc2hfaWZpbmRleDsJCQkvKiBJbnRlcmZhY2UgdG8gdXNlLiAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIHNhc2hfY2hhbm5lbDsJCS8qIFJlYWx0aW1lIG9yIGNvbnRyb2wuICAqLworICAgIHVuc2lnbmVkIGludCBzYXNoX3BsZW47CisgICAgdW5zaWduZWQgY2hhciBzYXNoX3ByZWZpeFsxNl07CisgIH07CisKKy8qIFZhbHVlcyBmb3IgYGNoYW5uZWwnIG1lbWJlci4gICovCisjZGVmaW5lIEFTSF9DSEFOTkVMX0FOWQkJMAorI2RlZmluZSBBU0hfQ0hBTk5FTF9DT05UUk9MCTEKKyNkZWZpbmUgQVNIX0NIQU5ORUxfUkVBTFRJTUUJMgorCisjZW5kaWYJLyogbmV0YXNoL2FzaC5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0YXRhbGsvYXQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXRhdGFsay9hdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NjhmYzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0YXRhbGsvYXQuaApAQCAtMCwwICsxLDMwIEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTUsIDE5OTYsIDE5OTcsIDIwMDQKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9ORVRBVEFMS19BVF9ICisjZGVmaW5lIF9ORVRBVEFMS19BVF9IIDEKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGJpdHMvc29ja2FkZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9hdGFsay5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworI2RlZmluZSBTT0xfQVRBTEsgICAgICAgMjU4ICAgICAvKiBzb2Nrb3B0IGxldmVsIGZvciBhdGFsayAqLworCisjZW5kaWYJLyogbmV0YXRhbGsvYXQuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldGF4MjUvYXgyNS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldGF4MjUvYXgyNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlM2M3YWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0YXgyNS9heDI1LmgKQEAgLTAsMCArMSwxNzEgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5NywgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfTkVUQVgyNV9BWDI1X0gKKyNkZWZpbmUgX05FVEFYMjVfQVgyNV9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaW5jbHVkZSA8Yml0cy9zb2NrYWRkci5oPgorCisvKiBTZXRzb2Nrb3B0aW9ucygyKSBsZXZlbC4gIFRoYW5rcyB0byBCU0QgdGhlc2UgbXVzdCBtYXRjaCBJUFBST1RPX3h4eC4gICovCisjZGVmaW5lIFNPTF9BWDI1CTI1NworCisvKiBBWC4yNSBmbGFnczogKi8KKyNkZWZpbmUgQVgyNV9XSU5ET1cJMQorI2RlZmluZSBBWDI1X1QxCQkyCisjZGVmaW5lIEFYMjVfVDIJCTUKKyNkZWZpbmUgQVgyNV9UMwkJNAorI2RlZmluZSBBWDI1X04yCQkzCisjZGVmaW5lIEFYMjVfQkFDS09GRgk2CisjZGVmaW5lIEFYMjVfRVhUU0VRCTcKKyNkZWZpbmUgQVgyNV9QSURJTkNMCTgKKyNkZWZpbmUgQVgyNV9JRExFCTkKKyNkZWZpbmUJQVgyNV9QQUNMRU4JMTAKKyNkZWZpbmUgQVgyNV9JUE1BWFFVRVVFIDExCisjZGVmaW5lIEFYMjVfSUFNRElHSQkxMgorI2RlZmluZSBBWDI1X0tJTEwJOTkKKworLyogQVguMjUgc29ja2V0IGlvY3RsczogKi8KKyNkZWZpbmUgU0lPQ0FYMjVHRVRVSUQJCShTSU9DUFJPVE9QUklWQVRFKQorI2RlZmluZSBTSU9DQVgyNUFERFVJRAkJKFNJT0NQUk9UT1BSSVZBVEUrMSkKKyNkZWZpbmUgU0lPQ0FYMjVERUxVSUQJCShTSU9DUFJPVE9QUklWQVRFKzIpCisjZGVmaW5lIFNJT0NBWDI1Tk9VSUQJCShTSU9DUFJPVE9QUklWQVRFKzMpCisjZGVmaW5lIFNJT0NBWDI1QlBRQUREUgkJKFNJT0NQUk9UT1BSSVZBVEUrNCkKKyNkZWZpbmUgU0lPQ0FYMjVHRVRQQVJNUwkoU0lPQ1BST1RPUFJJVkFURSs1KQorI2RlZmluZSBTSU9DQVgyNVNFVFBBUk1TCShTSU9DUFJPVE9QUklWQVRFKzYpCisjZGVmaW5lIFNJT0NBWDI1T1BUUlQJCShTSU9DUFJPVE9QUklWQVRFKzcpCisjZGVmaW5lIFNJT0NBWDI1Q1RMQ09OCQkoU0lPQ1BST1RPUFJJVkFURSs4KQorI2RlZmluZSBTSU9DQVgyNUdFVElORk8JCShTSU9DUFJPVE9QUklWQVRFKzkpCisjZGVmaW5lIFNJT0NBWDI1QURERldECQkoU0lPQ1BST1RPUFJJVkFURSsxMCkKKyNkZWZpbmUgU0lPQ0FYMjVERUxGV0QJCShTSU9DUFJPVE9QUklWQVRFKzExKQorCisvKiB1bmtub3duOiAqLworI2RlZmluZSBBWDI1X05PVUlEX0RFRkFVTFQJMAorI2RlZmluZSBBWDI1X05PVUlEX0JMT0NLCTEKKyNkZWZpbmUgQVgyNV9TRVRfUlRfSVBNT0RFCTIKKworLyogRGlnaXBlYXRpbmcgZmxhZ3M6ICovCisjZGVmaW5lIEFYMjVfRElHSV9JTkJBTkQJMHgwMQkvKiBBbGxvdyBkaWdpcGVhdGluZyB3aXRoaW4gcG9ydCAqLworI2RlZmluZSBBWDI1X0RJR0lfWEJBTkQJCTB4MDIJLyogQWxsb3cgZGlnaXBlYXRpbmcgYWNyb3NzIHBvcnRzICovCisKKy8qIE1heGltaW0gbnVtYmVyIG9mIGRpZ2lwZWF0ZXJzOiAqLworI2RlZmluZSBBWDI1X01BWF9ESUdJUyA4CisKKwordHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIGNoYXIgYXgyNV9jYWxsWzddOwkJLyogNiBjYWxsICsgU1NJRCAoc2hpZnRlZCBhc2NpaSkgKi8KKyAgfQorYXgyNV9hZGRyZXNzOworCitzdHJ1Y3Qgc29ja2FkZHJfYXgyNQorICB7CisgICAgc2FfZmFtaWx5X3Qgc2F4MjVfZmFtaWx5OworICAgIGF4MjVfYWRkcmVzcyBzYXgyNV9jYWxsOworICAgIGludCBzYXgyNV9uZGlnaXM7CisgIH07CisKKy8qCisgKiBUaGUgc29ja2FkZHIgc3RydWN0IHdpdGggdGhlIGRpZ2lwZWF0ZXIgYWRyZXNzZXM6CisgKi8KK3N0cnVjdCBmdWxsX3NvY2thZGRyX2F4MjUKKyAgeworICAgIHN0cnVjdCBzb2NrYWRkcl9heDI1IGZzYV9heDI1OworICAgIGF4MjVfYWRkcmVzcyBmc2FfZGlnaXBlYXRlcltBWDI1X01BWF9ESUdJU107CisgIH07CisjZGVmaW5lIHNheDI1X3VpZAlzYXgyNV9uZGlnaXMKKworc3RydWN0IGF4MjVfcm91dGVzX3N0cnVjdAorICB7CisgICAgYXgyNV9hZGRyZXNzIHBvcnRfYWRkcjsKKyAgICBheDI1X2FkZHJlc3MgZGVzdF9hZGRyOworICAgIHVuc2lnbmVkIGNoYXIgZGlnaV9jb3VudDsKKyAgICBheDI1X2FkZHJlc3MgZGlnaV9hZGRyW0FYMjVfTUFYX0RJR0lTXTsKKyAgfTsKKworLyogVGhlIEFYLjI1IGlvY3RsIHN0cnVjdHVyZTogKi8KK3N0cnVjdCBheDI1X2N0bF9zdHJ1Y3QKKyAgeworICAgIGF4MjVfYWRkcmVzcyBwb3J0X2FkZHI7CisgICAgYXgyNV9hZGRyZXNzIHNvdXJjZV9hZGRyOworICAgIGF4MjVfYWRkcmVzcyBkZXN0X2FkZHI7CisgICAgdW5zaWduZWQgaW50IGNtZDsKKyAgICB1bnNpZ25lZCBsb25nIGFyZzsKKyAgICB1bnNpZ25lZCBjaGFyIGRpZ2lfY291bnQ7CisgICAgYXgyNV9hZGRyZXNzIGRpZ2lfYWRkcltBWDI1X01BWF9ESUdJU107CisgIH07CisKK3N0cnVjdCBheDI1X2luZm9fc3RydWN0CisgIHsKKyAgICB1bnNpZ25lZCBpbnQgIG4yLCBuMmNvdW50OworICAgIHVuc2lnbmVkIGludCB0MSwgdDF0aW1lcjsKKyAgICB1bnNpZ25lZCBpbnQgdDIsIHQydGltZXI7CisgICAgdW5zaWduZWQgaW50IHQzLCB0M3RpbWVyOworICAgIHVuc2lnbmVkIGludCBpZGxlLCBpZGxldGltZXI7CisgICAgdW5zaWduZWQgaW50IHN0YXRlOworICAgIHVuc2lnbmVkIGludCByY3ZfcSwgc25kX3E7CisgIH07CisKK3N0cnVjdCBheDI1X2Z3ZF9zdHJ1Y3QKKyAgeworICAgIGF4MjVfYWRkcmVzcyBwb3J0X2Zyb207CisgICAgYXgyNV9hZGRyZXNzIHBvcnRfdG87CisgIH07CisKKy8qIEFYLjI1IHJvdXRlIHN0cnVjdHVyZTogKi8KK3N0cnVjdCBheDI1X3JvdXRlX29wdF9zdHJ1Y3QKKyAgeworICAgIGF4MjVfYWRkcmVzcyBwb3J0X2FkZHI7CisgICAgYXgyNV9hZGRyZXNzIGRlc3RfYWRkcjsKKyAgICBpbnQgY21kOworICAgIGludCBhcmc7CisgIH07CisKKy8qIEFYLjI1IEJQUSBzdHVmZjogKi8KK3N0cnVjdCBheDI1X2JwcWFkZHJfc3RydWN0CisgIHsKKyAgICBjaGFyIGRldlsxNl07CisgICAgYXgyNV9hZGRyZXNzIGFkZHI7CisgIH07CisKKy8qIERlZmluaXRpb25zIGZvciB0aGUgQVguMjUgYHZhbHVlcycgZmllbGRzOiAqLworI2RlZmluZQlBWDI1X1ZBTFVFU19JUERFRk1PREUJMAkvKiAnRCc9REcgJ1YnPVZDICovCisjZGVmaW5lCUFYMjVfVkFMVUVTX0FYREVGTU9ERQkxCS8qIDg9Tm9ybWFsIDEyOD1FeHRlbmRlZCBTZXEgTm9zICovCisjZGVmaW5lCUFYMjVfVkFMVUVTX05FVFJPTQkyCS8qIEFsbG93IE5FVC9ST00gIC0gMD1ObyAxPVllcyAqLworI2RlZmluZQlBWDI1X1ZBTFVFU19URVhUCTMJLyogQWxsb3cgUElEPVRleHQgLSAwPU5vIDE9WWVzICovCisjZGVmaW5lCUFYMjVfVkFMVUVTX0JBQ0tPRkYJNAkvKiAnRSc9RXhwb25lbnRpYWwgJ0wnPUxpbmVhciAqLworI2RlZmluZQlBWDI1X1ZBTFVFU19DT05NT0RFCTUJLyogQWxsb3cgY29ubmVjdGVkIG1vZGVzIC0gMD1ObyAxPVllcyAqLworI2RlZmluZQlBWDI1X1ZBTFVFU19XSU5ET1cJNgkvKiBEZWZhdWx0IHdpbmRvdyBzaXplIGZvciBzdGFuZGFyZCBBWC4yNSAqLworI2RlZmluZQlBWDI1X1ZBTFVFU19FV0lORE9XCTcJLyogRGVmYXVsdCB3aW5kb3cgc2l6ZSBmb3IgZXh0ZW5kZWQgQVguMjUgKi8KKyNkZWZpbmUJQVgyNV9WQUxVRVNfVDEJCTgJLyogRGVmYXVsdCBUMSB0aW1lb3V0IHZhbHVlICovCisjZGVmaW5lCUFYMjVfVkFMVUVTX1QyCQk5CS8qIERlZmF1bHQgVDIgdGltZW91dCB2YWx1ZSAqLworI2RlZmluZQlBWDI1X1ZBTFVFU19UMwkJMTAJLyogRGVmYXVsdCBUMyB0aW1lb3V0IHZhbHVlICovCisjZGVmaW5lCUFYMjVfVkFMVUVTX04yCQkxMQkvKiBEZWZhdWx0IE4yIHZhbHVlICovCisjZGVmaW5lCUFYMjVfVkFMVUVTX0RJR0kJMTIJLyogRGlnaXBlYXQgbW9kZSAqLworI2RlZmluZSBBWDI1X1ZBTFVFU19JRExFCTEzCS8qIG1vZGUgdmMgaWRsZSB0aW1lciAqLworI2RlZmluZSBBWDI1X1ZBTFVFU19QQUNMRU4JMTQJLyogQVguMjUgTVRVICovCisjZGVmaW5lIEFYMjVfVkFMVUVTX0lQTUFYUVVFVUUgIDE1CS8qIE1heGltdW0gbnVtYmVyIG9mIGJ1ZmZlcnMgZW5xdWV1ZWQgKi8KKyNkZWZpbmUJQVgyNV9NQVhfVkFMVUVTCQkyMAorCitzdHJ1Y3QgYXgyNV9wYXJtc19zdHJ1Y3QKKyAgeworICAgIGF4MjVfYWRkcmVzcyBwb3J0X2FkZHI7CisgICAgdW5zaWduZWQgc2hvcnQgdmFsdWVzW0FYMjVfTUFYX1ZBTFVFU107CisgIH07CisKKyNlbmRpZiAvKiBuZXRheDI1L2F4MjUuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldGRiLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0ZGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjYwYzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldGRiLmgKQEAgLTAsMCArMSw2OTEgQEAKKyAgLyogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qIEFsbCBkYXRhIHJldHVybmVkIGJ5IHRoZSBuZXR3b3JrIGRhdGEgYmFzZSBsaWJyYXJ5IGFyZSBzdXBwbGllZCBpbgorICAgaG9zdCBvcmRlciBhbmQgcmV0dXJuZWQgaW4gbmV0d29yayBvcmRlciAoc3VpdGFibGUgZm9yIHVzZSBpbgorICAgc3lzdGVtIGNhbGxzKS4gICovCisKKyNpZm5kZWYJX05FVERCX0gKKyNkZWZpbmUJX05FVERCX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpZmRlZiBfX1VTRV9NSVNDCisvKiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBtYWtlIHRoaXMgaW5jbHVkZSBmaWxlIHByb3Blcmx5IHJlcGxhY2UgdGhlCisgICBTdW4gdmVyc2lvbi4gICovCisjIGluY2x1ZGUgPHJwYy9uZXRkYi5oPgorI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9HTlUKKyMgZGVmaW5lIF9fbmVlZF9zaWdldmVudF90CisjIGluY2x1ZGUgPGJpdHMvc2lnaW5mby5oPgorIyBkZWZpbmUgX19uZWVkX3RpbWVzcGVjCisjIGluY2x1ZGUgPHRpbWUuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Yml0cy9uZXRkYi5oPgorCisvKiBBYnNvbHV0ZSBmaWxlIG5hbWUgZm9yIG5ldHdvcmsgZGF0YSBiYXNlIGZpbGVzLiAgKi8KKyNkZWZpbmUJX1BBVEhfSEVRVUlWCQkiL2V0Yy9ob3N0cy5lcXVpdiIKKyNkZWZpbmUJX1BBVEhfSE9TVFMJCSIvZXRjL2hvc3RzIgorI2RlZmluZQlfUEFUSF9ORVRXT1JLUwkJIi9ldGMvbmV0d29ya3MiCisjZGVmaW5lCV9QQVRIX05TU1dJVENIX0NPTkYJIi9ldGMvbnNzd2l0Y2guY29uZiIKKyNkZWZpbmUJX1BBVEhfUFJPVE9DT0xTCQkiL2V0Yy9wcm90b2NvbHMiCisjZGVmaW5lCV9QQVRIX1NFUlZJQ0VTCQkiL2V0Yy9zZXJ2aWNlcyIKKworCitfX0JFR0lOX0RFQ0xTCisKKy8qIEVycm9yIHN0YXR1cyBmb3Igbm9uLXJlZW50cmFudCBsb29rdXAgZnVuY3Rpb25zLgorICAgV2UgdXNlIGEgbWFjcm8gdG8gYWNjZXNzIGFsd2F5cyB0aGUgdGhyZWFkLXNwZWNpZmljIGBoX2Vycm5vJyB2YXJpYWJsZS4gICovCisjZGVmaW5lIGhfZXJybm8gKCpfX2hfZXJybm9fbG9jYXRpb24gKCkpCisKKy8qIEZ1bmN0aW9uIHRvIGdldCBhZGRyZXNzIG9mIGdsb2JhbCBgaF9lcnJubycgdmFyaWFibGUuICAqLworZXh0ZXJuIGludCAqX19oX2Vycm5vX2xvY2F0aW9uICh2b2lkKSBfX1RIUk9XIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKKworCisvKiBQb3NzaWJsZSB2YWx1ZXMgbGVmdCBpbiBgaF9lcnJubycuICAqLworI2RlZmluZQlIT1NUX05PVF9GT1VORAkxCS8qIEF1dGhvcml0YXRpdmUgQW5zd2VyIEhvc3Qgbm90IGZvdW5kLiAgKi8KKyNkZWZpbmUJVFJZX0FHQUlOCTIJLyogTm9uLUF1dGhvcml0YXRpdmUgSG9zdCBub3QgZm91bmQsCisJCQkJICAgb3IgU0VSVkVSRkFJTC4gICovCisjZGVmaW5lCU5PX1JFQ09WRVJZCTMJLyogTm9uIHJlY292ZXJhYmxlIGVycm9ycywgRk9STUVSUiwgUkVGVVNFRCwKKwkJCQkgICBOT1RJTVAuICAqLworI2RlZmluZQlOT19EQVRBCQk0CS8qIFZhbGlkIG5hbWUsIG5vIGRhdGEgcmVjb3JkIG9mIHJlcXVlc3RlZAorCQkJCSAgIHR5cGUuICAqLworI2lmIGRlZmluZWQgX19VU0VfTUlTQyB8fCBkZWZpbmVkIF9fVVNFX0dOVQorIyBkZWZpbmUgTkVUREJfSU5URVJOQUwJLTEJLyogU2VlIGVycm5vLiAgKi8KKyMgZGVmaW5lIE5FVERCX1NVQ0NFU1MJMAkvKiBObyBwcm9ibGVtLiAgKi8KKyMgZGVmaW5lIE5PX0FERFJFU1MJTk9fREFUQQkvKiBObyBhZGRyZXNzLCBsb29rIGZvciBNWCByZWNvcmQuICAqLworI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9YT1BFTjJLCisvKiBIaWdoZXN0IHJlc2VydmVkIEludGVybmV0IHBvcnQgbnVtYmVyLiAgKi8KKyMgZGVmaW5lIElQUE9SVF9SRVNFUlZFRAkxMDI0CisjZW5kaWYKKworI2lmZGVmIF9fVVNFX0dOVQorLyogU2NvcGUgZGVsaW1pdGVyIGZvciBnZXRhZGRyaW5mbygpLCBnZXRuYW1laW5mbygpLiAgKi8KKyMgZGVmaW5lIFNDT1BFX0RFTElNSVRFUgknJScKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfX1VTRV9NSVNDIHx8IGRlZmluZWQgX19VU0VfR05VCisvKiBQcmludCBlcnJvciBpbmRpY2F0ZWQgYnkgYGhfZXJybm8nIHZhcmlhYmxlIG9uIHN0YW5kYXJkIGVycm9yLiAgU1RSCisgICBpZiBub24tbnVsbCBpcyBwcmludGVkIGJlZm9yZSB0aGUgZXJyb3Igc3RyaW5nLiAgKi8KK2V4dGVybiB2b2lkIGhlcnJvciAoX19jb25zdCBjaGFyICpfX3N0cikgX19USFJPVzsKKworLyogUmV0dXJuIHN0cmluZyBhc3NvY2lhdGVkIHdpdGggZXJyb3IgRVJSX05VTS4gICovCitleHRlcm4gX19jb25zdCBjaGFyICpoc3RyZXJyb3IgKGludCBfX2Vycl9udW0pIF9fVEhST1c7CisjZW5kaWYKKworCisvKiBEZXNjcmlwdGlvbiBvZiBkYXRhIGJhc2UgZW50cnkgZm9yIGEgc2luZ2xlIGhvc3QuICAqLworc3RydWN0IGhvc3RlbnQKK3sKKyAgY2hhciAqaF9uYW1lOwkJCS8qIE9mZmljaWFsIG5hbWUgb2YgaG9zdC4gICovCisgIGNoYXIgKipoX2FsaWFzZXM7CQkvKiBBbGlhcyBsaXN0LiAgKi8KKyAgaW50IGhfYWRkcnR5cGU7CQkvKiBIb3N0IGFkZHJlc3MgdHlwZS4gICovCisgIGludCBoX2xlbmd0aDsJCQkvKiBMZW5ndGggb2YgYWRkcmVzcy4gICovCisgIGNoYXIgKipoX2FkZHJfbGlzdDsJCS8qIExpc3Qgb2YgYWRkcmVzc2VzIGZyb20gbmFtZSBzZXJ2ZXIuICAqLworI2lmIGRlZmluZWQgX19VU0VfTUlTQyB8fCBkZWZpbmVkIF9fVVNFX0dOVQorIyBkZWZpbmUJaF9hZGRyCWhfYWRkcl9saXN0WzBdIC8qIEFkZHJlc3MsIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiovCisjZW5kaWYKK307CisKKy8qIE9wZW4gaG9zdCBkYXRhIGJhc2UgZmlsZXMgYW5kIG1hcmsgdGhlbSBhcyBzdGF5aW5nIG9wZW4gZXZlbiBhZnRlcgorICAgYSBsYXRlciBzZWFyY2ggaWYgU1RBWV9PUEVOIGlzIG5vbi16ZXJvLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiB2b2lkIHNldGhvc3RlbnQgKGludCBfX3N0YXlfb3Blbik7CisKKy8qIENsb3NlIGhvc3QgZGF0YSBiYXNlIGZpbGVzIGFuZCBjbGVhciBgc3RheSBvcGVuJyBmbGFnLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiB2b2lkIGVuZGhvc3RlbnQgKHZvaWQpOworCisvKiBHZXQgbmV4dCBlbnRyeSBmcm9tIGhvc3QgZGF0YSBiYXNlIGZpbGUuICBPcGVuIGRhdGEgYmFzZSBpZgorICAgbmVjZXNzYXJ5LgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBzdHJ1Y3QgaG9zdGVudCAqZ2V0aG9zdGVudCAodm9pZCk7CisKKy8qIFJldHVybiBlbnRyeSBmcm9tIGhvc3QgZGF0YSBiYXNlIHdoaWNoIGFkZHJlc3MgbWF0Y2ggQUREUiB3aXRoCisgICBsZW5ndGggTEVOIGFuZCB0eXBlIFRZUEUuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIHN0cnVjdCBob3N0ZW50ICpnZXRob3N0YnlhZGRyIChfX2NvbnN0IHZvaWQgKl9fYWRkciwgX19zb2NrbGVuX3QgX19sZW4sCisJCQkJICAgICAgaW50IF9fdHlwZSk7CisKKy8qIFJldHVybiBlbnRyeSBmcm9tIGhvc3QgZGF0YSBiYXNlIGZvciBob3N0IHdpdGggTkFNRS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gc3RydWN0IGhvc3RlbnQgKmdldGhvc3RieW5hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKTsKKworI2lmZGVmIF9fVVNFX01JU0MKKy8qIFJldHVybiBlbnRyeSBmcm9tIGhvc3QgZGF0YSBiYXNlIGZvciBob3N0IHdpdGggTkFNRS4gIEFGIG11c3QgYmUKKyAgIHNldCB0byB0aGUgYWRkcmVzcyB0eXBlIHdoaWNoIGlzIGBBRl9JTkVUJyBmb3IgSVB2NCBvciBgQUZfSU5FVDYnCisgICBmb3IgSVB2Ni4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgcGFydCBvZiBQT1NJWCBhbmQgdGhlcmVmb3JlIG5vIG9mZmljaWFsCisgICBjYW5jZWxsYXRpb24gcG9pbnQuICBCdXQgZHVlIHRvIHNpbWlsYXJpdHkgd2l0aCBhbiBQT1NJWCBpbnRlcmZhY2UKKyAgIG9yIGR1ZSB0byB0aGUgaW1wbGVtZW50YXRpb24gaXQgaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kCisgICB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIHN0cnVjdCBob3N0ZW50ICpnZXRob3N0YnluYW1lMiAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX2FmKTsKKworLyogUmVlbnRyYW50IHZlcnNpb25zIG9mIHRoZSBmdW5jdGlvbnMgYWJvdmUuICBUaGUgYWRkaXRpb25hbAorICAgYXJndW1lbnRzIHNwZWNpZnkgYSBidWZmZXIgb2YgQlVGTEVOIHN0YXJ0aW5nIGF0IEJVRi4gIFRoZSBsYXN0CisgICBhcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gYSB2YXJpYWJsZSB3aGljaCBnZXRzIHRoZSB2YWx1ZSB3aGljaAorICAgd291bGQgYmUgc3RvcmVkIGluIHRoZSBnbG9iYWwgdmFyaWFibGUgYGhlcnJubycgYnkgdGhlCisgICBub24tcmVlbnRyYW50IGZ1bmN0aW9ucy4KKworICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgcGFydCBvZiBQT1NJWCBhbmQgdGhlcmVmb3JlIG5vIG9mZmljaWFsCisgICBjYW5jZWxsYXRpb24gcG9pbnQuICBCdXQgZHVlIHRvIHNpbWlsYXJpdHkgd2l0aCBhbiBQT1NJWCBpbnRlcmZhY2UKKyAgIG9yIGR1ZSB0byB0aGUgaW1wbGVtZW50YXRpb24gdGhleSBhcmUgY2FuY2VsbGF0aW9uIHBvaW50cyBhbmQKKyAgIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gaW50IGdldGhvc3RlbnRfciAoc3RydWN0IGhvc3RlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAorCQkJIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKKwkJCSBzdHJ1Y3QgaG9zdGVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQsCisJCQkgaW50ICpfX3Jlc3RyaWN0IF9faF9lcnJub3ApOworCitleHRlcm4gaW50IGdldGhvc3RieWFkZHJfciAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fYWRkciwgX19zb2NrbGVuX3QgX19sZW4sCisJCQkgICAgaW50IF9fdHlwZSwKKwkJCSAgICBzdHJ1Y3QgaG9zdGVudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCisJCQkgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAorCQkJICAgIHN0cnVjdCBob3N0ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCwKKwkJCSAgICBpbnQgKl9fcmVzdHJpY3QgX19oX2Vycm5vcCk7CisKK2V4dGVybiBpbnQgZ2V0aG9zdGJ5bmFtZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAorCQkJICAgIHN0cnVjdCBob3N0ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKKwkJCSAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCisJCQkgICAgc3RydWN0IGhvc3RlbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0LAorCQkJICAgIGludCAqX19yZXN0cmljdCBfX2hfZXJybm9wKTsKKworZXh0ZXJuIGludCBnZXRob3N0YnluYW1lMl9yIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLCBpbnQgX19hZiwKKwkJCSAgICAgc3RydWN0IGhvc3RlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAorCQkJICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCisJCQkgICAgIHN0cnVjdCBob3N0ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCwKKwkJCSAgICAgaW50ICpfX3Jlc3RyaWN0IF9faF9lcnJub3ApOworI2VuZGlmCS8qIG1pc2MgKi8KKworCisvKiBPcGVuIG5ldHdvcmsgZGF0YSBiYXNlIGZpbGVzIGFuZCBtYXJrIHRoZW0gYXMgc3RheWluZyBvcGVuIGV2ZW4KKyAgIGFmdGVyIGEgbGF0ZXIgc2VhcmNoIGlmIFNUQVlfT1BFTiBpcyBub24temVyby4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gdm9pZCBzZXRuZXRlbnQgKGludCBfX3N0YXlfb3Blbik7CisKKy8qIENsb3NlIG5ldHdvcmsgZGF0YSBiYXNlIGZpbGVzIGFuZCBjbGVhciBgc3RheSBvcGVuJyBmbGFnLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiB2b2lkIGVuZG5ldGVudCAodm9pZCk7CisKKy8qIEdldCBuZXh0IGVudHJ5IGZyb20gbmV0d29yayBkYXRhIGJhc2UgZmlsZS4gIE9wZW4gZGF0YSBiYXNlIGlmCisgICBuZWNlc3NhcnkuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIHN0cnVjdCBuZXRlbnQgKmdldG5ldGVudCAodm9pZCk7CisKKy8qIFJldHVybiBlbnRyeSBmcm9tIG5ldHdvcmsgZGF0YSBiYXNlIHdoaWNoIGFkZHJlc3MgbWF0Y2ggTkVUIGFuZAorICAgdHlwZSBUWVBFLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBzdHJ1Y3QgbmV0ZW50ICpnZXRuZXRieWFkZHIgKHVpbnQzMl90IF9fbmV0LCBpbnQgX190eXBlKTsKKworLyogUmV0dXJuIGVudHJ5IGZyb20gbmV0d29yayBkYXRhIGJhc2UgZm9yIG5ldHdvcmsgd2l0aCBOQU1FLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBzdHJ1Y3QgbmV0ZW50ICpnZXRuZXRieW5hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKTsKKworI2lmZGVmCV9fVVNFX01JU0MKKy8qIFJlZW50cmFudCB2ZXJzaW9ucyBvZiB0aGUgZnVuY3Rpb25zIGFib3ZlLiAgVGhlIGFkZGl0aW9uYWwKKyAgIGFyZ3VtZW50cyBzcGVjaWZ5IGEgYnVmZmVyIG9mIEJVRkxFTiBzdGFydGluZyBhdCBCVUYuICBUaGUgbGFzdAorICAgYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIGEgdmFyaWFibGUgd2hpY2ggZ2V0cyB0aGUgdmFsdWUgd2hpY2gKKyAgIHdvdWxkIGJlIHN0b3JlZCBpbiB0aGUgZ2xvYmFsIHZhcmlhYmxlIGBoZXJybm8nIGJ5IHRoZQorICAgbm9uLXJlZW50cmFudCBmdW5jdGlvbnMuCisKKyAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIHRoZXkgYXJlIGNhbmNlbGxhdGlvbiBwb2ludHMgYW5kCisgICB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBnZXRuZXRlbnRfciAoc3RydWN0IG5ldGVudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCisJCQljaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCisJCQlzdHJ1Y3QgbmV0ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCwKKwkJCWludCAqX19yZXN0cmljdCBfX2hfZXJybm9wKTsKKworZXh0ZXJuIGludCBnZXRuZXRieWFkZHJfciAodWludDMyX3QgX19uZXQsIGludCBfX3R5cGUsCisJCQkgICBzdHJ1Y3QgbmV0ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKKwkJCSAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKKwkJCSAgIHN0cnVjdCBuZXRlbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0LAorCQkJICAgaW50ICpfX3Jlc3RyaWN0IF9faF9lcnJub3ApOworCitleHRlcm4gaW50IGdldG5ldGJ5bmFtZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAorCQkJICAgc3RydWN0IG5ldGVudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCisJCQkgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCisJCQkgICBzdHJ1Y3QgbmV0ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCwKKwkJCSAgIGludCAqX19yZXN0cmljdCBfX2hfZXJybm9wKTsKKyNlbmRpZgkvKiBtaXNjICovCisKKworLyogRGVzY3JpcHRpb24gb2YgZGF0YSBiYXNlIGVudHJ5IGZvciBhIHNpbmdsZSBzZXJ2aWNlLiAgKi8KK3N0cnVjdCBzZXJ2ZW50Cit7CisgIGNoYXIgKnNfbmFtZTsJCQkvKiBPZmZpY2lhbCBzZXJ2aWNlIG5hbWUuICAqLworICBjaGFyICoqc19hbGlhc2VzOwkJLyogQWxpYXMgbGlzdC4gICovCisgIGludCBzX3BvcnQ7CQkJLyogUG9ydCBudW1iZXIuICAqLworICBjaGFyICpzX3Byb3RvOwkJLyogUHJvdG9jb2wgdG8gdXNlLiAgKi8KK307CisKKy8qIE9wZW4gc2VydmljZSBkYXRhIGJhc2UgZmlsZXMgYW5kIG1hcmsgdGhlbSBhcyBzdGF5aW5nIG9wZW4gZXZlbgorICAgYWZ0ZXIgYSBsYXRlciBzZWFyY2ggaWYgU1RBWV9PUEVOIGlzIG5vbi16ZXJvLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiB2b2lkIHNldHNlcnZlbnQgKGludCBfX3N0YXlfb3Blbik7CisKKy8qIENsb3NlIHNlcnZpY2UgZGF0YSBiYXNlIGZpbGVzIGFuZCBjbGVhciBgc3RheSBvcGVuJyBmbGFnLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiB2b2lkIGVuZHNlcnZlbnQgKHZvaWQpOworCisvKiBHZXQgbmV4dCBlbnRyeSBmcm9tIHNlcnZpY2UgZGF0YSBiYXNlIGZpbGUuICBPcGVuIGRhdGEgYmFzZSBpZgorICAgbmVjZXNzYXJ5LgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBzdHJ1Y3Qgc2VydmVudCAqZ2V0c2VydmVudCAodm9pZCk7CisKKy8qIFJldHVybiBlbnRyeSBmcm9tIG5ldHdvcmsgZGF0YSBiYXNlIGZvciBuZXR3b3JrIHdpdGggTkFNRSBhbmQKKyAgIHByb3RvY29sIFBST1RPLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBzdHJ1Y3Qgc2VydmVudCAqZ2V0c2VydmJ5bmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUsCisJCQkJICAgICAgX19jb25zdCBjaGFyICpfX3Byb3RvKTsKKworLyogUmV0dXJuIGVudHJ5IGZyb20gc2VydmljZSBkYXRhIGJhc2Ugd2hpY2ggbWF0Y2hlcyBwb3J0IFBPUlQgYW5kCisgICBwcm90b2NvbCBQUk9UTy4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gc3RydWN0IHNlcnZlbnQgKmdldHNlcnZieXBvcnQgKGludCBfX3BvcnQsIF9fY29uc3QgY2hhciAqX19wcm90byk7CisKKworI2lmZGVmCV9fVVNFX01JU0MKKy8qIFJlZW50cmFudCB2ZXJzaW9ucyBvZiB0aGUgZnVuY3Rpb25zIGFib3ZlLiAgVGhlIGFkZGl0aW9uYWwKKyAgIGFyZ3VtZW50cyBzcGVjaWZ5IGEgYnVmZmVyIG9mIEJVRkxFTiBzdGFydGluZyBhdCBCVUYuCisKKyAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIHRoZXkgYXJlIGNhbmNlbGxhdGlvbiBwb2ludHMgYW5kCisgICB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBnZXRzZXJ2ZW50X3IgKHN0cnVjdCBzZXJ2ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKKwkJCSBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCisJCQkgc3RydWN0IHNlcnZlbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0KTsKKworZXh0ZXJuIGludCBnZXRzZXJ2YnluYW1lX3IgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCisJCQkgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcHJvdG8sCisJCQkgICAgc3RydWN0IHNlcnZlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAorCQkJICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKKwkJCSAgICBzdHJ1Y3Qgc2VydmVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpOworCitleHRlcm4gaW50IGdldHNlcnZieXBvcnRfciAoaW50IF9fcG9ydCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcHJvdG8sCisJCQkgICAgc3RydWN0IHNlcnZlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAorCQkJICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKKwkJCSAgICBzdHJ1Y3Qgc2VydmVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpOworI2VuZGlmCS8qIG1pc2MgKi8KKworCisvKiBEZXNjcmlwdGlvbiBvZiBkYXRhIGJhc2UgZW50cnkgZm9yIGEgc2luZ2xlIHNlcnZpY2UuICAqLworc3RydWN0IHByb3RvZW50Cit7CisgIGNoYXIgKnBfbmFtZTsJCQkvKiBPZmZpY2lhbCBwcm90b2NvbCBuYW1lLiAgKi8KKyAgY2hhciAqKnBfYWxpYXNlczsJCS8qIEFsaWFzIGxpc3QuICAqLworICBpbnQgcF9wcm90bzsJCQkvKiBQcm90b2NvbCBudW1iZXIuICAqLworfTsKKworLyogT3BlbiBwcm90b2NvbCBkYXRhIGJhc2UgZmlsZXMgYW5kIG1hcmsgdGhlbSBhcyBzdGF5aW5nIG9wZW4gZXZlbgorICAgYWZ0ZXIgYSBsYXRlciBzZWFyY2ggaWYgU1RBWV9PUEVOIGlzIG5vbi16ZXJvLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiB2b2lkIHNldHByb3RvZW50IChpbnQgX19zdGF5X29wZW4pOworCisvKiBDbG9zZSBwcm90b2NvbCBkYXRhIGJhc2UgZmlsZXMgYW5kIGNsZWFyIGBzdGF5IG9wZW4nIGZsYWcuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIHZvaWQgZW5kcHJvdG9lbnQgKHZvaWQpOworCisvKiBHZXQgbmV4dCBlbnRyeSBmcm9tIHByb3RvY29sIGRhdGEgYmFzZSBmaWxlLiAgT3BlbiBkYXRhIGJhc2UgaWYKKyAgIG5lY2Vzc2FyeS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gc3RydWN0IHByb3RvZW50ICpnZXRwcm90b2VudCAodm9pZCk7CisKKy8qIFJldHVybiBlbnRyeSBmcm9tIHByb3RvY29sIGRhdGEgYmFzZSBmb3IgbmV0d29yayB3aXRoIE5BTUUuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIHN0cnVjdCBwcm90b2VudCAqZ2V0cHJvdG9ieW5hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKTsKKworLyogUmV0dXJuIGVudHJ5IGZyb20gcHJvdG9jb2wgZGF0YSBiYXNlIHdoaWNoIG51bWJlciBpcyBQUk9UTy4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gc3RydWN0IHByb3RvZW50ICpnZXRwcm90b2J5bnVtYmVyIChpbnQgX19wcm90byk7CisKKworI2lmZGVmCV9fVVNFX01JU0MKKy8qIFJlZW50cmFudCB2ZXJzaW9ucyBvZiB0aGUgZnVuY3Rpb25zIGFib3ZlLiAgVGhlIGFkZGl0aW9uYWwKKyAgIGFyZ3VtZW50cyBzcGVjaWZ5IGEgYnVmZmVyIG9mIEJVRkxFTiBzdGFydGluZyBhdCBCVUYuCisKKyAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIHRoZXkgYXJlIGNhbmNlbGxhdGlvbiBwb2ludHMgYW5kCisgICB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBnZXRwcm90b2VudF9yIChzdHJ1Y3QgcHJvdG9lbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAorCQkJICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCisJCQkgIHN0cnVjdCBwcm90b2VudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpOworCitleHRlcm4gaW50IGdldHByb3RvYnluYW1lX3IgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCisJCQkgICAgIHN0cnVjdCBwcm90b2VudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCisJCQkgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKKwkJCSAgICAgc3RydWN0IHByb3RvZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCk7CisKK2V4dGVybiBpbnQgZ2V0cHJvdG9ieW51bWJlcl9yIChpbnQgX19wcm90bywKKwkJCSAgICAgICBzdHJ1Y3QgcHJvdG9lbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAorCQkJICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKKwkJCSAgICAgICBzdHJ1Y3QgcHJvdG9lbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0KTsKKworCisvKiBFc3RhYmxpc2ggbmV0d29yayBncm91cCBORVRHUk9VUCBmb3IgZW51bWVyYXRpb24uCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGl0IGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgc2V0bmV0Z3JlbnQgKF9fY29uc3QgY2hhciAqX19uZXRncm91cCk7CisKKy8qIEZyZWUgYWxsIHNwYWNlIGFsbG9jYXRlZCBieSBwcmV2aW91cyBgc2V0bmV0Z3JlbnQnIGNhbGwuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGl0IGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiB2b2lkIGVuZG5ldGdyZW50ICh2b2lkKTsKKworLyogR2V0IG5leHQgbWVtYmVyIG9mIG5ldGdyb3VwIGVzdGFibGlzaGVkIGJ5IGxhc3QgYHNldG5ldGdyZW50JyBjYWxsCisgICBhbmQgcmV0dXJuIHBvaW50ZXJzIHRvIGVsZW1lbnRzIGluIEhPU1RQLCBVU0VSUCwgYW5kIERPTUFJTlAuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGl0IGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgZ2V0bmV0Z3JlbnQgKGNoYXIgKipfX3Jlc3RyaWN0IF9faG9zdHAsCisJCQljaGFyICoqX19yZXN0cmljdCBfX3VzZXJwLAorCQkJY2hhciAqKl9fcmVzdHJpY3QgX19kb21haW5wKTsKKworCisvKiBUZXN0IHdoZXRoZXIgTkVUR1JPVVAgY29udGFpbnMgdGhlIHRyaXBsZSAoSE9TVCxVU0VSLERPTUFJTikuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGl0IGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgaW5uZXRnciAoX19jb25zdCBjaGFyICpfX25ldGdyb3VwLCBfX2NvbnN0IGNoYXIgKl9faG9zdCwKKwkJICAgIF9fY29uc3QgY2hhciAqX191c2VyLCBfX2NvbnN0IGNoYXIgKmRvbWFpbik7CisKKy8qIFJlZW50cmFudCB2ZXJzaW9uIG9mIGBnZXRuZXRncmVudCcgd2hlcmUgcmVzdWx0IGlzIHBsYWNlZCBpbiBCVUZGRVIuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGl0IGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgZ2V0bmV0Z3JlbnRfciAoY2hhciAqKl9fcmVzdHJpY3QgX19ob3N0cCwKKwkJCSAgY2hhciAqKl9fcmVzdHJpY3QgX191c2VycCwKKwkJCSAgY2hhciAqKl9fcmVzdHJpY3QgX19kb21haW5wLAorCQkJICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmZmVyLCBzaXplX3QgX19idWZsZW4pOworI2VuZGlmCS8qIG1pc2MgKi8KKworCisjaWZkZWYgX19VU0VfQlNECisvKiBDYWxsIGByc2hkJyBhdCBwb3J0IFJQT1JUIG9uIHJlbW90ZSBtYWNoaW5lICpBSE9TVCB0byBleGVjdXRlIENNRC4KKyAgIFRoZSBsb2NhbCB1c2VyIGlzIExPQ1VTRVIsIG9uIHRoZSByZW1vdGUgbWFjaGluZSB0aGUgY29tbWFuZCBpcworICAgZXhlY3V0ZWQgYXMgUkVNVVNFUi4gIEluICpGRDJQIHRoZSBkZXNjcmlwdG9yIHRvIHRoZSBzb2NrZXQgZm9yIHRoZQorICAgY29ubmVjdGlvbiBpcyByZXR1cm5lZC4gIFRoZSBjYWxsZXIgbXVzdCBoYXZlIHRoZSByaWdodCB0byB1c2UgYQorICAgcmVzZXJ2ZWQgcG9ydC4gIFdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgKkFIT1NUIGNvbnRhaW5zIHRoZQorICAgb2ZmaWNpYWwgaG9zdCBuYW1lLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBwYXJ0IG9mIFBPU0lYIGFuZCB0aGVyZWZvcmUgbm8gb2ZmaWNpYWwKKyAgIGNhbmNlbGxhdGlvbiBwb2ludC4gIEJ1dCBkdWUgdG8gc2ltaWxhcml0eSB3aXRoIGFuIFBPU0lYIGludGVyZmFjZQorICAgb3IgZHVlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBpdCBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQKKyAgIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gaW50IHJjbWQgKGNoYXIgKipfX3Jlc3RyaWN0IF9fYWhvc3QsIHVuc2lnbmVkIHNob3J0IGludCBfX3Jwb3J0LAorCQkgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbG9jdXNlciwKKwkJIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3JlbXVzZXIsCisJCSBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19jbWQsIGludCAqX19yZXN0cmljdCBfX2ZkMnApOworCisvKiBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IGZ1bmN0aW9uIHdoZXJlIHRoZSBwcm90b2NvbCBjYW4gYmUgc2VsZWN0ZWQKKyAgIGFuZCB3aGljaCB0aGVyZWZvcmUgY2FuIGJlIHVzZWQgZm9yIElQdjYuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGl0IGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgcmNtZF9hZiAoY2hhciAqKl9fcmVzdHJpY3QgX19haG9zdCwgdW5zaWduZWQgc2hvcnQgaW50IF9fcnBvcnQsCisJCSAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19sb2N1c2VyLAorCQkgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcmVtdXNlciwKKwkJICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2NtZCwgaW50ICpfX3Jlc3RyaWN0IF9fZmQycCwKKwkJICAgIHNhX2ZhbWlseV90IF9fYWYpOworCisvKiBDYWxsIGByZXhlY2QnIGF0IHBvcnQgUlBPUlQgb24gcmVtb3RlIG1hY2hpbmUgKkFIT1NUIHRvIGV4ZWN1dGUKKyAgIENNRC4gIFRoZSBwcm9jZXNzIHJ1bnMgYXQgdGhlIHJlbW90ZSBtYWNoaW5lIHVzaW5nIHRoZSBJRCBvZiB1c2VyCisgICBOQU1FIHdob3NlIGNsZWFydGV4dCBwYXNzd29yZCBpcyBQQVNTV0QuICBJbiAqRkQyUCB0aGUgZGVzY3JpcHRvcgorICAgdG8gdGhlIHNvY2tldCBmb3IgdGhlIGNvbm5lY3Rpb24gaXMgcmV0dXJuZWQuICBXaGVuIHRoZSBmdW5jdGlvbgorICAgcmV0dXJucyAqQUhPU1QgY29udGFpbnMgdGhlIG9mZmljaWFsIGhvc3QgbmFtZS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgcGFydCBvZiBQT1NJWCBhbmQgdGhlcmVmb3JlIG5vIG9mZmljaWFsCisgICBjYW5jZWxsYXRpb24gcG9pbnQuICBCdXQgZHVlIHRvIHNpbWlsYXJpdHkgd2l0aCBhbiBQT1NJWCBpbnRlcmZhY2UKKyAgIG9yIGR1ZSB0byB0aGUgaW1wbGVtZW50YXRpb24gaXQgaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kCisgICB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCByZXhlYyAoY2hhciAqKl9fcmVzdHJpY3QgX19haG9zdCwgaW50IF9fcnBvcnQsCisJCSAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKKwkJICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXNzLAorCQkgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2NtZCwgaW50ICpfX3Jlc3RyaWN0IF9fZmQycCk7CisKKy8qIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgZnVuY3Rpb24gd2hlcmUgdGhlIHByb3RvY29sIGNhbiBiZSBzZWxlY3RlZAorICAgYW5kIHdoaWNoIHRoZXJlZm9yZSBjYW4gYmUgdXNlZCBmb3IgSVB2Ni4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgcGFydCBvZiBQT1NJWCBhbmQgdGhlcmVmb3JlIG5vIG9mZmljaWFsCisgICBjYW5jZWxsYXRpb24gcG9pbnQuICBCdXQgZHVlIHRvIHNpbWlsYXJpdHkgd2l0aCBhbiBQT1NJWCBpbnRlcmZhY2UKKyAgIG9yIGR1ZSB0byB0aGUgaW1wbGVtZW50YXRpb24gaXQgaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kCisgICB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCByZXhlY19hZiAoY2hhciAqKl9fcmVzdHJpY3QgX19haG9zdCwgaW50IF9fcnBvcnQsCisJCSAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKKwkJICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXNzLAorCQkgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2NtZCwgaW50ICpfX3Jlc3RyaWN0IF9fZmQycCwKKwkJICAgICBzYV9mYW1pbHlfdCBfX2FmKTsKKworLyogQ2hlY2sgd2hldGhlciB1c2VyIFJFTVVTRVIgb24gc3lzdGVtIFJIT1NUIGlzIGFsbG93ZWQgdG8gbG9naW4gYXMgTE9DVVNFUi4KKyAgIElmIFNVU0VSIGlzIG5vdCB6ZXJvIHRoZSB1c2VyIHRyaWVzIHRvIGJlY29tZSBzdXBlcnVzZXIuICBSZXR1cm4gMCBpZgorICAgaXQgaXMgcG9zc2libGUuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGl0IGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgcnVzZXJvayAoX19jb25zdCBjaGFyICpfX3Job3N0LCBpbnQgX19zdXNlciwKKwkJICAgIF9fY29uc3QgY2hhciAqX19yZW11c2VyLCBfX2NvbnN0IGNoYXIgKl9fbG9jdXNlcik7CisKKy8qIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgZnVuY3Rpb24gd2hlcmUgdGhlIHByb3RvY29sIGNhbiBiZSBzZWxlY3RlZAorICAgYW5kIHdoaWNoIHRoZXJlZm9yZSBjYW4gYmUgdXNlZCBmb3IgSVB2Ni4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgcGFydCBvZiBQT1NJWCBhbmQgdGhlcmVmb3JlIG5vIG9mZmljaWFsCisgICBjYW5jZWxsYXRpb24gcG9pbnQuICBCdXQgZHVlIHRvIHNpbWlsYXJpdHkgd2l0aCBhbiBQT1NJWCBpbnRlcmZhY2UKKyAgIG9yIGR1ZSB0byB0aGUgaW1wbGVtZW50YXRpb24gaXQgaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kCisgICB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBydXNlcm9rX2FmIChfX2NvbnN0IGNoYXIgKl9fcmhvc3QsIGludCBfX3N1c2VyLAorCQkgICAgICAgX19jb25zdCBjaGFyICpfX3JlbXVzZXIsIF9fY29uc3QgY2hhciAqX19sb2N1c2VyLAorCQkgICAgICAgc2FfZmFtaWx5X3QgX19hZik7CisKKy8qIFRyeSB0byBhbGxvY2F0ZSByZXNlcnZlZCBwb3J0LCByZXR1cm5pbmcgYSBkZXNjcmlwdG9yIGZvciBhIHNvY2tldCBvcGVuZWQKKyAgIGF0IHRoaXMgcG9ydCBvciAtMSBpZiB1bnN1Y2Nlc3NmdWwuICBUaGUgc2VhcmNoIGZvciBhbiBhdmFpbGFibGUgcG9ydAorICAgd2lsbCBzdGFydCBhdCBBTFBPUlQgYW5kIGNvbnRpbnVlcyB3aXRoIGxvd2VyIG51bWJlcnMuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGl0IGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgcnJlc3Zwb3J0IChpbnQgKl9fYWxwb3J0KTsKKworLyogVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBmdW5jdGlvbiB3aGVyZSB0aGUgcHJvdG9jb2wgY2FuIGJlIHNlbGVjdGVkCisgICBhbmQgd2hpY2ggdGhlcmVmb3JlIGNhbiBiZSB1c2VkIGZvciBJUHY2LgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBwYXJ0IG9mIFBPU0lYIGFuZCB0aGVyZWZvcmUgbm8gb2ZmaWNpYWwKKyAgIGNhbmNlbGxhdGlvbiBwb2ludC4gIEJ1dCBkdWUgdG8gc2ltaWxhcml0eSB3aXRoIGFuIFBPU0lYIGludGVyZmFjZQorICAgb3IgZHVlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBpdCBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQKKyAgIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gaW50IHJyZXN2cG9ydF9hZiAoaW50ICpfX2FscG9ydCwgc2FfZmFtaWx5X3QgX19hZik7CisjZW5kaWYKKworCisvKiBFeHRlbnNpb24gZnJvbSBQT1NJWC4xZy4gICovCisjaWZkZWYJX19VU0VfUE9TSVgKKy8qIFN0cnVjdHVyZSB0byBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IGFkZHJlc3Mgb2YgYSBzZXJ2aWNlIHByb3ZpZGVyLiAgKi8KK3N0cnVjdCBhZGRyaW5mbworeworICBpbnQgYWlfZmxhZ3M7CQkJLyogSW5wdXQgZmxhZ3MuICAqLworICBpbnQgYWlfZmFtaWx5OwkJLyogUHJvdG9jb2wgZmFtaWx5IGZvciBzb2NrZXQuICAqLworICBpbnQgYWlfc29ja3R5cGU7CQkvKiBTb2NrZXQgdHlwZS4gICovCisgIGludCBhaV9wcm90b2NvbDsJCS8qIFByb3RvY29sIGZvciBzb2NrZXQuICAqLworICBzb2NrbGVuX3QgYWlfYWRkcmxlbjsJCS8qIExlbmd0aCBvZiBzb2NrZXQgYWRkcmVzcy4gICovCisgIHN0cnVjdCBzb2NrYWRkciAqYWlfYWRkcjsJLyogU29ja2V0IGFkZHJlc3MgZm9yIHNvY2tldC4gICovCisgIGNoYXIgKmFpX2Nhbm9ubmFtZTsJCS8qIENhbm9uaWNhbCBuYW1lIGZvciBzZXJ2aWNlIGxvY2F0aW9uLiAgKi8KKyAgc3RydWN0IGFkZHJpbmZvICphaV9uZXh0OwkvKiBQb2ludGVyIHRvIG5leHQgaW4gbGlzdC4gICovCit9OworCisjIGlmZGVmIF9fVVNFX0dOVQorLyogU3RydWN0dXJlIHVzZWQgYXMgY29udHJvbCBibG9jayBmb3IgYXN5bmNocm9ub3VzIGxvb2t1cC4gICovCitzdHJ1Y3QgZ2FpY2IKK3sKKyAgY29uc3QgY2hhciAqYXJfbmFtZTsJCS8qIE5hbWUgdG8gbG9vayB1cC4gICovCisgIGNvbnN0IGNoYXIgKmFyX3NlcnZpY2U7CS8qIFNlcnZpY2UgbmFtZS4gICovCisgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqYXJfcmVxdWVzdDsgLyogQWRkaXRpb25hbCByZXF1ZXN0IHNwZWNpZmljYXRpb24uICAqLworICBzdHJ1Y3QgYWRkcmluZm8gKmFyX3Jlc3VsdDsJLyogUG9pbnRlciB0byByZXN1bHQuICAqLworICAvKiBUaGUgZm9sbG93aW5nIGFyZSBpbnRlcm5hbCBlbGVtZW50cy4gICovCisgIGludCBfX3JldHVybjsKKyAgaW50IF9fdW51c2VkWzVdOworfTsKKworLyogTG9va3VwIG1vZGUuICAqLworIyAgZGVmaW5lIEdBSV9XQUlUCTAKKyMgIGRlZmluZSBHQUlfTk9XQUlUCTEKKyMgZW5kaWYKKworLyogUG9zc2libGUgdmFsdWVzIGZvciBgYWlfZmxhZ3MnIGZpZWxkIGluIGBhZGRyaW5mbycgc3RydWN0dXJlLiAgKi8KKyMgZGVmaW5lIEFJX1BBU1NJVkUJMHgwMDAxCS8qIFNvY2tldCBhZGRyZXNzIGlzIGludGVuZGVkIGZvciBgYmluZCcuICAqLworIyBkZWZpbmUgQUlfQ0FOT05OQU1FCTB4MDAwMgkvKiBSZXF1ZXN0IGZvciBjYW5vbmljYWwgbmFtZS4gICovCisjIGRlZmluZSBBSV9OVU1FUklDSE9TVAkweDAwMDQJLyogRG9uJ3QgdXNlIG5hbWUgcmVzb2x1dGlvbi4gICovCisjIGRlZmluZSBBSV9WNE1BUFBFRAkweDAwMDgJLyogSVB2NCBtYXBwZWQgYWRkcmVzc2VzIGFyZSBhY2NlcHRhYmxlLiAgKi8KKyMgZGVmaW5lIEFJX0FMTAkJMHgwMDEwCS8qIFJldHVybiBJUHY0IG1hcHBlZCBhbmQgSVB2NiBhZGRyZXNzZXMuICAqLworIyBkZWZpbmUgQUlfQUREUkNPTkZJRwkweDAwMjAJLyogVXNlIGNvbmZpZ3VyYXRpb24gb2YgdGhpcyBob3N0IHRvIGNob29zZQorCQkJCSAgIHJldHVybmVkIGFkZHJlc3MgdHlwZS4uICAqLworIyBpZmRlZiBfX1VTRV9HTlUKKyMgIGRlZmluZSBBSV9JRE4JMHgwMDQwCS8qIElETiBlbmNvZGUgaW5wdXQgKGFzc3VtaW5nIGl0IGlzIGVuY29kZWQKKwkJCQkgICBpbiB0aGUgY3VycmVudCBsb2NhbGUncyBjaGFyYWN0ZXIgc2V0KQorCQkJCSAgIGJlZm9yZSBsb29raW5nIGl0IHVwLiAqLworIyAgZGVmaW5lIEFJX0NBTk9OSUROCTB4MDA4MAkvKiBUcmFuc2xhdGUgY2Fub25pY2FsIG5hbWUgZnJvbSBJRE4gZm9ybWF0LiAqLworIyAgZGVmaW5lIEFJX0lETl9BTExPV19VTkFTU0lHTkVEIDB4MDEwMCAvKiBEb24ndCByZWplY3QgdW5hc3NpZ25lZCBVbmljb2RlCisJCQkJCSAgICBjb2RlIHBvaW50cy4gICovCisjICBkZWZpbmUgQUlfSUROX1VTRV9TVEQzX0FTQ0lJX1JVTEVTIDB4MDIwMCAvKiBWYWxpZGF0ZSBzdHJpbmdzIGFjY29yZGluZyB0bworCQkJCQkJU1REMyBydWxlcy4gICovCisjIGVuZGlmCisjIGRlZmluZSBBSV9OVU1FUklDU0VSVgkweDA0MDAJLyogRG9uJ3QgdXNlIG5hbWUgcmVzb2x1dGlvbi4gICovCisKKy8qIEVycm9yIHZhbHVlcyBmb3IgYGdldGFkZHJpbmZvJyBmdW5jdGlvbi4gICovCisjIGRlZmluZSBFQUlfQkFERkxBR1MJICAtMQkvKiBJbnZhbGlkIHZhbHVlIGZvciBgYWlfZmxhZ3MnIGZpZWxkLiAgKi8KKyMgZGVmaW5lIEVBSV9OT05BTUUJICAtMgkvKiBOQU1FIG9yIFNFUlZJQ0UgaXMgdW5rbm93bi4gICovCisjIGRlZmluZSBFQUlfQUdBSU4JICAtMwkvKiBUZW1wb3JhcnkgZmFpbHVyZSBpbiBuYW1lIHJlc29sdXRpb24uICAqLworIyBkZWZpbmUgRUFJX0ZBSUwJICAtNAkvKiBOb24tcmVjb3ZlcmFibGUgZmFpbHVyZSBpbiBuYW1lIHJlcy4gICovCisjIGRlZmluZSBFQUlfRkFNSUxZCSAgLTYJLyogYGFpX2ZhbWlseScgbm90IHN1cHBvcnRlZC4gICovCisjIGRlZmluZSBFQUlfU09DS1RZUEUJICAtNwkvKiBgYWlfc29ja3R5cGUnIG5vdCBzdXBwb3J0ZWQuICAqLworIyBkZWZpbmUgRUFJX1NFUlZJQ0UJICAtOAkvKiBTRVJWSUNFIG5vdCBzdXBwb3J0ZWQgZm9yIGBhaV9zb2NrdHlwZScuICAqLworIyBkZWZpbmUgRUFJX01FTU9SWQkgIC0xMAkvKiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLiAgKi8KKyMgZGVmaW5lIEVBSV9TWVNURU0JICAtMTEJLyogU3lzdGVtIGVycm9yIHJldHVybmVkIGluIGBlcnJubycuICAqLworIyBkZWZpbmUgRUFJX09WRVJGTE9XCSAgLTEyCS8qIEFyZ3VtZW50IGJ1ZmZlciBvdmVyZmxvdy4gICovCisjIGlmZGVmIF9fVVNFX0dOVQorIyAgZGVmaW5lIEVBSV9OT0RBVEEJICAtNQkvKiBObyBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCBOQU1FLiAgKi8KKyMgIGRlZmluZSBFQUlfQUREUkZBTUlMWSAgLTkJLyogQWRkcmVzcyBmYW1pbHkgZm9yIE5BTUUgbm90IHN1cHBvcnRlZC4gICovCisjICBkZWZpbmUgRUFJX0lOUFJPR1JFU1MgIC0xMDAJLyogUHJvY2Vzc2luZyByZXF1ZXN0IGluIHByb2dyZXNzLiAgKi8KKyMgIGRlZmluZSBFQUlfQ0FOQ0VMRUQJICAtMTAxCS8qIFJlcXVlc3QgY2FuY2VsZWQuICAqLworIyAgZGVmaW5lIEVBSV9OT1RDQU5DRUxFRCAtMTAyCS8qIFJlcXVlc3Qgbm90IGNhbmNlbGVkLiAgKi8KKyMgIGRlZmluZSBFQUlfQUxMRE9ORQkgIC0xMDMJLyogQWxsIHJlcXVlc3RzIGRvbmUuICAqLworIyAgZGVmaW5lIEVBSV9JTlRSCSAgLTEwNAkvKiBJbnRlcnJ1cHRlZCBieSBhIHNpZ25hbC4gICovCisjICBkZWZpbmUgRUFJX0lETl9FTkNPREUgIC0xMDUJLyogSUROIGVuY29kaW5nIGZhaWxlZC4gICovCisjIGVuZGlmCisKKyMgaWZkZWYgX19VU0VfTUlTQworIyAgZGVmaW5lIE5JX01BWEhPU1QgICAgICAxMDI1CisjICBkZWZpbmUgTklfTUFYU0VSViAgICAgIDMyCisjIGVuZGlmCisKKyMgZGVmaW5lIE5JX05VTUVSSUNIT1NUCTEJLyogRG9uJ3QgdHJ5IHRvIGxvb2sgdXAgaG9zdG5hbWUuICAqLworIyBkZWZpbmUgTklfTlVNRVJJQ1NFUlYgMgkvKiBEb24ndCBjb252ZXJ0IHBvcnQgbnVtYmVyIHRvIG5hbWUuICAqLworIyBkZWZpbmUgTklfTk9GUUROCTQJLyogT25seSByZXR1cm4gbm9kZW5hbWUgcG9ydGlvbi4gICovCisjIGRlZmluZSBOSV9OQU1FUkVRRAk4CS8qIERvbid0IHJldHVybiBudW1lcmljIGFkZHJlc3Nlcy4gICovCisjIGRlZmluZSBOSV9ER1JBTQkxNgkvKiBMb29rIHVwIFVEUCBzZXJ2aWNlIHJhdGhlciB0aGFuIFRDUC4gICovCisjIGlmZGVmIF9fVVNFX0dOVQorIyAgZGVmaW5lIE5JX0lETgkzMgkvKiBDb252ZXJ0IG5hbWUgZnJvbSBJRE4gZm9ybWF0LiAgKi8KKyMgIGRlZmluZSBOSV9JRE5fQUxMT1dfVU5BU1NJR05FRCA2NCAvKiBEb24ndCByZWplY3QgdW5hc3NpZ25lZCBVbmljb2RlCisJCQkJCWNvZGUgcG9pbnRzLiAgKi8KKyMgIGRlZmluZSBOSV9JRE5fVVNFX1NURDNfQVNDSUlfUlVMRVMgMTI4IC8qIFZhbGlkYXRlIHN0cmluZ3MgYWNjb3JkaW5nIHRvCisJCQkJCSAgICAgU1REMyBydWxlcy4gICovCisjIGVuZGlmCisKKy8qIFRyYW5zbGF0ZSBuYW1lIG9mIGEgc2VydmljZSBsb2NhdGlvbiBhbmQvb3IgYSBzZXJ2aWNlIG5hbWUgdG8gc2V0IG9mCisgICBzb2NrZXQgYWRkcmVzc2VzLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgZ2V0YWRkcmluZm8gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCisJCQlfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zZXJ2aWNlLAorCQkJX19jb25zdCBzdHJ1Y3QgYWRkcmluZm8gKl9fcmVzdHJpY3QgX19yZXEsCisJCQlzdHJ1Y3QgYWRkcmluZm8gKipfX3Jlc3RyaWN0IF9fcGFpKTsKKworLyogRnJlZSBgYWRkcmluZm8nIHN0cnVjdHVyZSBBSSBpbmNsdWRpbmcgYXNzb2NpYXRlZCBzdG9yYWdlLiAgKi8KK2V4dGVybiB2b2lkIGZyZWVhZGRyaW5mbyAoc3RydWN0IGFkZHJpbmZvICpfX2FpKSBfX1RIUk9XOworCisvKiBDb252ZXJ0IGVycm9yIHJldHVybiBmcm9tIGdldGFkZHJpbmZvKCkgdG8gYSBzdHJpbmcuICAqLworZXh0ZXJuIF9fY29uc3QgY2hhciAqZ2FpX3N0cmVycm9yIChpbnQgX19lY29kZSkgX19USFJPVzsKKworLyogVHJhbnNsYXRlIGEgc29ja2V0IGFkZHJlc3MgdG8gYSBsb2NhdGlvbiBhbmQgc2VydmljZSBuYW1lLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgZ2V0bmFtZWluZm8gKF9fY29uc3Qgc3RydWN0IHNvY2thZGRyICpfX3Jlc3RyaWN0IF9fc2EsCisJCQlzb2NrbGVuX3QgX19zYWxlbiwgY2hhciAqX19yZXN0cmljdCBfX2hvc3QsCisJCQlzb2NrbGVuX3QgX19ob3N0bGVuLCBjaGFyICpfX3Jlc3RyaWN0IF9fc2VydiwKKwkJCXNvY2tsZW5fdCBfX3NlcnZsZW4sIHVuc2lnbmVkIGludCBfX2ZsYWdzKTsKKyNlbmRpZgkvKiBQT1NJWCAqLworCisjaWZkZWYgX19VU0VfR05VCisvKiBFbnF1ZXVlIEVOVCByZXF1ZXN0cyBmcm9tIHRoZSBMSVNULiAgSWYgTU9ERSBpcyBHQUlfV0FJVCB3YWl0IHVudGlsIGFsbAorICAgcmVxdWVzdHMgYXJlIGhhbmRsZWQuICBJZiBXQUlUIGlzIEdBSV9OT1dBSVQgcmV0dXJuIGltbWVkaWF0ZWx5IGFmdGVyCisgICBxdWV1ZWluZyB0aGUgcmVxdWVzdHMgYW5kIHNpZ25hbCBjb21wbGV0aW9uIGFjY29yZGluZyB0byBTSUcuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGl0IGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgZ2V0YWRkcmluZm9fYSAoaW50IF9fbW9kZSwgc3RydWN0IGdhaWNiICpfX2xpc3RbX19yZXN0cmljdF9hcnJdLAorCQkJICBpbnQgX19lbnQsIHN0cnVjdCBzaWdldmVudCAqX19yZXN0cmljdCBfX3NpZyk7CisKKy8qIFN1c3BlbmQgZXhlY3V0aW9uIG9mIHRoZSB0aHJlYWQgdW50aWwgYXQgbGVhc3Qgb25lIG9mIHRoZSBFTlQgcmVxdWVzdHMKKyAgIGluIExJU1QgaXMgaGFuZGxlZC4gIElmIFRJTUVPVVQgaXMgbm90IGEgbnVsbCBwb2ludGVyIGl0IHNwZWNpZmllcyB0aGUKKyAgIGxvbmdlc3QgdGltZSB0aGUgZnVuY3Rpb24ga2VlcHMgd2FpdGluZyBiZWZvcmUgcmV0dXJuaW5nIHdpdGggYW4gZXJyb3IuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGl0IGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgZ2FpX3N1c3BlbmQgKF9fY29uc3Qgc3RydWN0IGdhaWNiICpfX2NvbnN0IF9fbGlzdFtdLCBpbnQgX19lbnQsCisJCQlfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX190aW1lb3V0KTsKKworLyogR2V0IHRoZSBlcnJvciBzdGF0dXMgb2YgdGhlIHJlcXVlc3QgUkVRLiAgKi8KK2V4dGVybiBpbnQgZ2FpX2Vycm9yIChzdHJ1Y3QgZ2FpY2IgKl9fcmVxKSBfX1RIUk9XOworCisvKiBDYW5jZWwgdGhlIHJlcXVlc3RzIGFzc29jaWF0ZWQgd2l0aCBHQUlDQlAuICAqLworZXh0ZXJuIGludCBnYWlfY2FuY2VsIChzdHJ1Y3QgZ2FpY2IgKl9fZ2FpY2JwKSBfX1RIUk9XOworI2VuZGlmCS8qIEdOVSAqLworCitfX0VORF9ERUNMUworCisjZW5kaWYJLyogbmV0ZGIuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldGVjb25ldC9lYy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldGVjb25ldC9lYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMTYwMWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0ZWNvbmV0L2VjLmgKQEAgLTAsMCArMSw1MiBAQAorLyogRGVmaW5pdGlvbnMgZm9yIHVzZSB3aXRoIExpbnV4IEFGX0VDT05FVCBzb2NrZXRzLgorICAgQ29weXJpZ2h0IChDKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9ORVRFQ09ORVRfRUNfSAorI2RlZmluZSBfTkVURUNPTkVUX0VDX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxiaXRzL3NvY2thZGRyLmg+CisKK3N0cnVjdCBlY19hZGRyCisgIHsKKyAgICB1bnNpZ25lZCBjaGFyIHN0YXRpb247CQkvKiBTdGF0aW9uIG51bWJlci4gICovCisgICAgdW5zaWduZWQgY2hhciBuZXQ7CQkJLyogTmV0d29yayBudW1iZXIuICAqLworICB9OworCitzdHJ1Y3Qgc29ja2FkZHJfZWMKKyAgeworICAgIF9fU09DS0FERFJfQ09NTU9OIChzZWNfKTsKKyAgICB1bnNpZ25lZCBjaGFyIHBvcnQ7CQkJLyogUG9ydCBudW1iZXIuICAqLworICAgIHVuc2lnbmVkIGNoYXIgY2I7CQkJLyogQ29udHJvbC9mbGFnIGJ5dGUuICAqLworICAgIHVuc2lnbmVkIGNoYXIgdHlwZTsJCQkvKiBUeXBlIG9mIG1lc3NhZ2UuICAqLworICAgIHN0cnVjdCBlY19hZGRyIGFkZHI7CisgICAgdW5zaWduZWQgbG9uZyBjb29raWU7CisgIH07CisKKyNkZWZpbmUgRUNUWVBFX1BBQ0tFVF9SRUNFSVZFRAkJMAkvKiBQYWNrZXQgcmVjZWl2ZWQgKi8KKyNkZWZpbmUgRUNUWVBFX1RSQU5TTUlUX1NUQVRVUwkJMHgxMAkvKiBUcmFuc21pdCBjb21wbGV0ZWQgKi8KKworI2RlZmluZSBFQ1RZUEVfVFJBTlNNSVRfT0sJCTEKKyNkZWZpbmUgRUNUWVBFX1RSQU5TTUlUX05PVF9MSVNURU5JTkcJMgorI2RlZmluZSBFQ1RZUEVfVFJBTlNNSVRfTkVUX0VSUk9SCTMKKyNkZWZpbmUgRUNUWVBFX1RSQU5TTUlUX05PX0NMT0NLCTQKKyNkZWZpbmUgRUNUWVBFX1RSQU5TTUlUX0xJTkVfSkFNTUVECTUKKyNkZWZpbmUgRUNUWVBFX1RSQU5TTUlUX05PVF9QUkVTRU5UCTYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0aW5ldC9ldGhlci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldGluZXQvZXRoZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTc4MGUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldGluZXQvZXRoZXIuaApAQCAtMCwwICsxLDU0IEBACisvKiBGdW5jdGlvbnMgZm9yIHN0b3JpbmcgRXRoZXJuZXQgYWRkcmVzc2VzIGluIEFTQ0lJIGFuZCBtYXBwaW5nIHRvIGhvc3RuYW1lcy4KKyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfTkVUSU5FVF9FVEhFUl9ICisjZGVmaW5lIF9ORVRJTkVUX0VUSEVSX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworLyogR2V0IGRlZmluaXRpb24gb2YgYHN0cnVjdCBldGhlcl9hZGRyJy4gICovCisjaW5jbHVkZSA8bmV0aW5ldC9pZl9ldGhlci5oPgorCitfX0JFR0lOX0RFQ0xTCisKKy8qIENvbnZlcnQgNDggYml0IEV0aGVybmV0IEFERFJlc3MgdG8gQVNDSUkuICAqLworZXh0ZXJuIGNoYXIgKmV0aGVyX250b2EgKF9fY29uc3Qgc3RydWN0IGV0aGVyX2FkZHIgKl9fYWRkcikgX19USFJPVzsKK2V4dGVybiBjaGFyICpldGhlcl9udG9hX3IgKF9fY29uc3Qgc3RydWN0IGV0aGVyX2FkZHIgKl9fYWRkciwgY2hhciAqX19idWYpCisgICAgIF9fVEhST1c7CisKKy8qIENvbnZlcnQgQVNDSUkgc3RyaW5nIFMgdG8gNDggYml0IEV0aGVybmV0IGFkZHJlc3MuICAqLworZXh0ZXJuIHN0cnVjdCBldGhlcl9hZGRyICpldGhlcl9hdG9uIChfX2NvbnN0IGNoYXIgKl9fYXNjKSBfX1RIUk9XOworZXh0ZXJuIHN0cnVjdCBldGhlcl9hZGRyICpldGhlcl9hdG9uX3IgKF9fY29uc3QgY2hhciAqX19hc2MsCisJCQkJCXN0cnVjdCBldGhlcl9hZGRyICpfX2FkZHIpIF9fVEhST1c7CisKKy8qIE1hcCA0OCBiaXQgRXRoZXJuZXQgbnVtYmVyIEFERFIgdG8gSE9TVE5BTUUuICAqLworZXh0ZXJuIGludCBldGhlcl9udG9ob3N0IChjaGFyICpfX2hvc3RuYW1lLCBfX2NvbnN0IHN0cnVjdCBldGhlcl9hZGRyICpfX2FkZHIpCisgICAgIF9fVEhST1c7CisKKy8qIE1hcCBIT1NUTkFNRSB0byA0OCBiaXQgRXRoZXJuZXQgYWRkcmVzcy4gICovCitleHRlcm4gaW50IGV0aGVyX2hvc3R0b24gKF9fY29uc3QgY2hhciAqX19ob3N0bmFtZSwgc3RydWN0IGV0aGVyX2FkZHIgKl9fYWRkcikKKyAgICAgX19USFJPVzsKKworLyogU2NhbiBMSU5FIGFuZCBzZXQgQUREUiBhbmQgSE9TVE5BTUUuICAqLworZXh0ZXJuIGludCBldGhlcl9saW5lIChfX2NvbnN0IGNoYXIgKl9fbGluZSwgc3RydWN0IGV0aGVyX2FkZHIgKl9fYWRkciwKKwkJICAgICAgIGNoYXIgKl9faG9zdG5hbWUpIF9fVEhST1c7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBuZXRpbmV0L2V0aGVyLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXRpbmV0L2ljbXA2LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0aW5ldC9pY21wNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjYjFhYTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0aW5ldC9pY21wNi5oCkBAIC0wLDAgKzEsMzQ2IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywyMDAwLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX05FVElORVRfSUNNUDZfSAorI2RlZmluZSBfTkVUSU5FVF9JQ01QNl9IIDEKKworI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorCisjZGVmaW5lIElDTVA2X0ZJTFRFUiAxCisKKyNkZWZpbmUgSUNNUDZfRklMVEVSX0JMT0NLCQkxCisjZGVmaW5lIElDTVA2X0ZJTFRFUl9QQVNTCQkyCisjZGVmaW5lIElDTVA2X0ZJTFRFUl9CTE9DS09USEVSUwkzCisjZGVmaW5lIElDTVA2X0ZJTFRFUl9QQVNTT05MWQkJNAorCitzdHJ1Y3QgaWNtcDZfZmlsdGVyCisgIHsKKyAgICB1aW50MzJfdCBpY21wNl9maWx0WzhdOworICB9OworCitzdHJ1Y3QgaWNtcDZfaGRyCisgIHsKKyAgICB1aW50OF90ICAgICBpY21wNl90eXBlOyAgIC8qIHR5cGUgZmllbGQgKi8KKyAgICB1aW50OF90ICAgICBpY21wNl9jb2RlOyAgIC8qIGNvZGUgZmllbGQgKi8KKyAgICB1aW50MTZfdCAgICBpY21wNl9ja3N1bTsgIC8qIGNoZWNrc3VtIGZpZWxkICovCisgICAgdW5pb24KKyAgICAgIHsKKwl1aW50MzJfdCAgaWNtcDZfdW5fZGF0YTMyWzFdOyAvKiB0eXBlLXNwZWNpZmljIGZpZWxkICovCisJdWludDE2X3QgIGljbXA2X3VuX2RhdGExNlsyXTsgLyogdHlwZS1zcGVjaWZpYyBmaWVsZCAqLworCXVpbnQ4X3QgICBpY21wNl91bl9kYXRhOFs0XTsgIC8qIHR5cGUtc3BlY2lmaWMgZmllbGQgKi8KKyAgICAgIH0gaWNtcDZfZGF0YXVuOworICB9OworCisjZGVmaW5lIGljbXA2X2RhdGEzMiAgICBpY21wNl9kYXRhdW4uaWNtcDZfdW5fZGF0YTMyCisjZGVmaW5lIGljbXA2X2RhdGExNiAgICBpY21wNl9kYXRhdW4uaWNtcDZfdW5fZGF0YTE2CisjZGVmaW5lIGljbXA2X2RhdGE4ICAgICBpY21wNl9kYXRhdW4uaWNtcDZfdW5fZGF0YTgKKyNkZWZpbmUgaWNtcDZfcHB0ciAgICAgIGljbXA2X2RhdGEzMlswXSAgLyogcGFyYW1ldGVyIHByb2IgKi8KKyNkZWZpbmUgaWNtcDZfbXR1ICAgICAgIGljbXA2X2RhdGEzMlswXSAgLyogcGFja2V0IHRvbyBiaWcgKi8KKyNkZWZpbmUgaWNtcDZfaWQgICAgICAgIGljbXA2X2RhdGExNlswXSAgLyogZWNobyByZXF1ZXN0L3JlcGx5ICovCisjZGVmaW5lIGljbXA2X3NlcSAgICAgICBpY21wNl9kYXRhMTZbMV0gIC8qIGVjaG8gcmVxdWVzdC9yZXBseSAqLworI2RlZmluZSBpY21wNl9tYXhkZWxheSAgaWNtcDZfZGF0YTE2WzBdICAvKiBtY2FzdCBncm91cCBtZW1iZXJzaGlwICovCisKKyNkZWZpbmUgSUNNUDZfRFNUX1VOUkVBQ0ggICAgICAgICAgICAgMQorI2RlZmluZSBJQ01QNl9QQUNLRVRfVE9PX0JJRyAgICAgICAgICAyCisjZGVmaW5lIElDTVA2X1RJTUVfRVhDRUVERUQgICAgICAgICAgIDMKKyNkZWZpbmUgSUNNUDZfUEFSQU1fUFJPQiAgICAgICAgICAgICAgNAorCisjZGVmaW5lIElDTVA2X0lORk9NU0dfTUFTSyAgMHg4MCAgICAvKiBhbGwgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyAqLworCisjZGVmaW5lIElDTVA2X0VDSE9fUkVRVUVTVCAgICAgICAgICAxMjgKKyNkZWZpbmUgSUNNUDZfRUNIT19SRVBMWSAgICAgICAgICAgIDEyOQorI2RlZmluZSBNTERfTElTVEVORVJfUVVFUlkgICAgICAgICAgMTMwCisjZGVmaW5lIE1MRF9MSVNURU5FUl9SRVBPUlQgICAgICAgICAxMzEKKyNkZWZpbmUgTUxEX0xJU1RFTkVSX1JFRFVDVElPTiAgICAgIDEzMgorCisjZGVmaW5lIElDTVA2X0RTVF9VTlJFQUNIX05PUk9VVEUgICAgIDAgLyogbm8gcm91dGUgdG8gZGVzdGluYXRpb24gKi8KKyNkZWZpbmUgSUNNUDZfRFNUX1VOUkVBQ0hfQURNSU4gICAgICAgMSAvKiBjb21tdW5pY2F0aW9uIHdpdGggZGVzdGluYXRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZG1pbmlzdHJhdGl2ZWx5IHByb2hpYml0ZWQgKi8KKyNkZWZpbmUgSUNNUDZfRFNUX1VOUkVBQ0hfQkVZT05EU0NPUEUgMiAvKiBiZXlvbmQgc2NvcGUgb2Ygc291cmNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgSUNNUDZfRFNUX1VOUkVBQ0hfQUREUiAgICAgICAgMyAvKiBhZGRyZXNzIHVucmVhY2hhYmxlICovCisjZGVmaW5lIElDTVA2X0RTVF9VTlJFQUNIX05PUE9SVCAgICAgIDQgLyogYmFkIHBvcnQgKi8KKworI2RlZmluZSBJQ01QNl9USU1FX0VYQ0VFRF9UUkFOU0lUICAgICAwIC8qIEhvcCBMaW1pdCA9PSAwIGluIHRyYW5zaXQgKi8KKyNkZWZpbmUgSUNNUDZfVElNRV9FWENFRURfUkVBU1NFTUJMWSAgMSAvKiBSZWFzc2VtYmx5IHRpbWUgb3V0ICovCisKKyNkZWZpbmUgSUNNUDZfUEFSQU1QUk9CX0hFQURFUiAgICAgICAgMCAvKiBlcnJvbmVvdXMgaGVhZGVyIGZpZWxkICovCisjZGVmaW5lIElDTVA2X1BBUkFNUFJPQl9ORVhUSEVBREVSICAgIDEgLyogdW5yZWNvZ25pemVkIE5leHQgSGVhZGVyICovCisjZGVmaW5lIElDTVA2X1BBUkFNUFJPQl9PUFRJT04gICAgICAgIDIgLyogdW5yZWNvZ25pemVkIElQdjYgb3B0aW9uICovCisKKyNkZWZpbmUgSUNNUDZfRklMVEVSX1dJTExQQVNTKHR5cGUsIGZpbHRlcnApIFwKKwkoKCgoZmlsdGVycCktPmljbXA2X2ZpbHRbKHR5cGUpID4+IDVdKSAmICgxIDw8ICgodHlwZSkgJiAzMSkpKSA9PSAwKQorCisjZGVmaW5lIElDTVA2X0ZJTFRFUl9XSUxMQkxPQ0sodHlwZSwgZmlsdGVycCkgXAorCSgoKChmaWx0ZXJwKS0+aWNtcDZfZmlsdFsodHlwZSkgPj4gNV0pICYgKDEgPDwgKCh0eXBlKSAmIDMxKSkpICE9IDApCisKKyNkZWZpbmUgSUNNUDZfRklMVEVSX1NFVFBBU1ModHlwZSwgZmlsdGVycCkgXAorCSgoKChmaWx0ZXJwKS0+aWNtcDZfZmlsdFsodHlwZSkgPj4gNV0pICY9IH4oMSA8PCAoKHR5cGUpICYgMzEpKSkpCisKKyNkZWZpbmUgSUNNUDZfRklMVEVSX1NFVEJMT0NLKHR5cGUsIGZpbHRlcnApIFwKKwkoKCgoZmlsdGVycCktPmljbXA2X2ZpbHRbKHR5cGUpID4+IDVdKSB8PSAgKDEgPDwgKCh0eXBlKSAmIDMxKSkpKQorCisjZGVmaW5lIElDTVA2X0ZJTFRFUl9TRVRQQVNTQUxMKGZpbHRlcnApIFwKKwltZW1zZXQgKGZpbHRlcnAsIDAsIHNpemVvZiAoc3RydWN0IGljbXA2X2ZpbHRlcikpOworCisjZGVmaW5lIElDTVA2X0ZJTFRFUl9TRVRCTE9DS0FMTChmaWx0ZXJwKSBcCisJbWVtc2V0IChmaWx0ZXJwLCAweEZGLCBzaXplb2YgKHN0cnVjdCBpY21wNl9maWx0ZXIpKTsKKworI2RlZmluZSBORF9ST1VURVJfU09MSUNJVCAgICAgICAgICAgMTMzCisjZGVmaW5lIE5EX1JPVVRFUl9BRFZFUlQgICAgICAgICAgICAxMzQKKyNkZWZpbmUgTkRfTkVJR0hCT1JfU09MSUNJVCAgICAgICAgIDEzNQorI2RlZmluZSBORF9ORUlHSEJPUl9BRFZFUlQgICAgICAgICAgMTM2CisjZGVmaW5lIE5EX1JFRElSRUNUICAgICAgICAgICAgICAgICAxMzcKKworc3RydWN0IG5kX3JvdXRlcl9zb2xpY2l0ICAgICAgLyogcm91dGVyIHNvbGljaXRhdGlvbiAqLworICB7CisgICAgc3RydWN0IGljbXA2X2hkciAgbmRfcnNfaGRyOworICAgIC8qIGNvdWxkIGJlIGZvbGxvd2VkIGJ5IG9wdGlvbnMgKi8KKyAgfTsKKworI2RlZmluZSBuZF9yc190eXBlICAgICAgICAgICAgICAgbmRfcnNfaGRyLmljbXA2X3R5cGUKKyNkZWZpbmUgbmRfcnNfY29kZSAgICAgICAgICAgICAgIG5kX3JzX2hkci5pY21wNl9jb2RlCisjZGVmaW5lIG5kX3JzX2Nrc3VtICAgICAgICAgICAgICBuZF9yc19oZHIuaWNtcDZfY2tzdW0KKyNkZWZpbmUgbmRfcnNfcmVzZXJ2ZWQgICAgICAgICAgIG5kX3JzX2hkci5pY21wNl9kYXRhMzJbMF0KKworc3RydWN0IG5kX3JvdXRlcl9hZHZlcnQgICAgICAgLyogcm91dGVyIGFkdmVydGlzZW1lbnQgKi8KKyAgeworICAgIHN0cnVjdCBpY21wNl9oZHIgIG5kX3JhX2hkcjsKKyAgICB1aW50MzJfdCAgIG5kX3JhX3JlYWNoYWJsZTsgICAvKiByZWFjaGFibGUgdGltZSAqLworICAgIHVpbnQzMl90ICAgbmRfcmFfcmV0cmFuc21pdDsgIC8qIHJldHJhbnNtaXQgdGltZXIgKi8KKyAgICAvKiBjb3VsZCBiZSBmb2xsb3dlZCBieSBvcHRpb25zICovCisgIH07CisKKyNkZWZpbmUgbmRfcmFfdHlwZSAgICAgICAgICAgICAgIG5kX3JhX2hkci5pY21wNl90eXBlCisjZGVmaW5lIG5kX3JhX2NvZGUgICAgICAgICAgICAgICBuZF9yYV9oZHIuaWNtcDZfY29kZQorI2RlZmluZSBuZF9yYV9ja3N1bSAgICAgICAgICAgICAgbmRfcmFfaGRyLmljbXA2X2Nrc3VtCisjZGVmaW5lIG5kX3JhX2N1cmhvcGxpbWl0ICAgICAgICBuZF9yYV9oZHIuaWNtcDZfZGF0YThbMF0KKyNkZWZpbmUgbmRfcmFfZmxhZ3NfcmVzZXJ2ZWQgICAgIG5kX3JhX2hkci5pY21wNl9kYXRhOFsxXQorI2RlZmluZSBORF9SQV9GTEFHX01BTkFHRUQgICAgICAgMHg4MAorI2RlZmluZSBORF9SQV9GTEFHX09USEVSICAgICAgICAgMHg0MAorI2RlZmluZSBORF9SQV9GTEFHX0hPTUVfQUdFTlQgICAgMHgyMAorI2RlZmluZSBuZF9yYV9yb3V0ZXJfbGlmZXRpbWUgICAgbmRfcmFfaGRyLmljbXA2X2RhdGExNlsxXQorCitzdHJ1Y3QgbmRfbmVpZ2hib3Jfc29saWNpdCAgICAvKiBuZWlnaGJvciBzb2xpY2l0YXRpb24gKi8KKyAgeworICAgIHN0cnVjdCBpY21wNl9oZHIgIG5kX25zX2hkcjsKKyAgICBzdHJ1Y3QgaW42X2FkZHIgICBuZF9uc190YXJnZXQ7IC8qIHRhcmdldCBhZGRyZXNzICovCisgICAgLyogY291bGQgYmUgZm9sbG93ZWQgYnkgb3B0aW9ucyAqLworICB9OworCisjZGVmaW5lIG5kX25zX3R5cGUgICAgICAgICAgICAgICBuZF9uc19oZHIuaWNtcDZfdHlwZQorI2RlZmluZSBuZF9uc19jb2RlICAgICAgICAgICAgICAgbmRfbnNfaGRyLmljbXA2X2NvZGUKKyNkZWZpbmUgbmRfbnNfY2tzdW0gICAgICAgICAgICAgIG5kX25zX2hkci5pY21wNl9ja3N1bQorI2RlZmluZSBuZF9uc19yZXNlcnZlZCAgICAgICAgICAgbmRfbnNfaGRyLmljbXA2X2RhdGEzMlswXQorCitzdHJ1Y3QgbmRfbmVpZ2hib3JfYWR2ZXJ0ICAgICAvKiBuZWlnaGJvciBhZHZlcnRpc2VtZW50ICovCisgIHsKKyAgICBzdHJ1Y3QgaWNtcDZfaGRyICBuZF9uYV9oZHI7CisgICAgc3RydWN0IGluNl9hZGRyICAgbmRfbmFfdGFyZ2V0OyAvKiB0YXJnZXQgYWRkcmVzcyAqLworICAgIC8qIGNvdWxkIGJlIGZvbGxvd2VkIGJ5IG9wdGlvbnMgKi8KKyAgfTsKKworI2RlZmluZSBuZF9uYV90eXBlICAgICAgICAgICAgICAgbmRfbmFfaGRyLmljbXA2X3R5cGUKKyNkZWZpbmUgbmRfbmFfY29kZSAgICAgICAgICAgICAgIG5kX25hX2hkci5pY21wNl9jb2RlCisjZGVmaW5lIG5kX25hX2Nrc3VtICAgICAgICAgICAgICBuZF9uYV9oZHIuaWNtcDZfY2tzdW0KKyNkZWZpbmUgbmRfbmFfZmxhZ3NfcmVzZXJ2ZWQgICAgIG5kX25hX2hkci5pY21wNl9kYXRhMzJbMF0KKyNpZiAgICAgQllURV9PUkRFUiA9PSBCSUdfRU5ESUFOCisjZGVmaW5lIE5EX05BX0ZMQUdfUk9VVEVSICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIE5EX05BX0ZMQUdfU09MSUNJVEVEICAgICAweDQwMDAwMDAwCisjZGVmaW5lIE5EX05BX0ZMQUdfT1ZFUlJJREUgICAgICAweDIwMDAwMDAwCisjZWxzZSAgIC8qIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTiAqLworI2RlZmluZSBORF9OQV9GTEFHX1JPVVRFUiAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBORF9OQV9GTEFHX1NPTElDSVRFRCAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBORF9OQV9GTEFHX09WRVJSSURFICAgICAgMHgwMDAwMDAyMAorI2VuZGlmCisKK3N0cnVjdCBuZF9yZWRpcmVjdCAgICAgICAgICAgIC8qIHJlZGlyZWN0ICovCisgIHsKKyAgICBzdHJ1Y3QgaWNtcDZfaGRyICBuZF9yZF9oZHI7CisgICAgc3RydWN0IGluNl9hZGRyICAgbmRfcmRfdGFyZ2V0OyAvKiB0YXJnZXQgYWRkcmVzcyAqLworICAgIHN0cnVjdCBpbjZfYWRkciAgIG5kX3JkX2RzdDsgICAgLyogZGVzdGluYXRpb24gYWRkcmVzcyAqLworICAgIC8qIGNvdWxkIGJlIGZvbGxvd2VkIGJ5IG9wdGlvbnMgKi8KKyAgfTsKKworI2RlZmluZSBuZF9yZF90eXBlICAgICAgICAgICAgICAgbmRfcmRfaGRyLmljbXA2X3R5cGUKKyNkZWZpbmUgbmRfcmRfY29kZSAgICAgICAgICAgICAgIG5kX3JkX2hkci5pY21wNl9jb2RlCisjZGVmaW5lIG5kX3JkX2Nrc3VtICAgICAgICAgICAgICBuZF9yZF9oZHIuaWNtcDZfY2tzdW0KKyNkZWZpbmUgbmRfcmRfcmVzZXJ2ZWQgICAgICAgICAgIG5kX3JkX2hkci5pY21wNl9kYXRhMzJbMF0KKworc3RydWN0IG5kX29wdF9oZHIgICAgICAgICAgICAgLyogTmVpZ2hib3IgZGlzY292ZXJ5IG9wdGlvbiBoZWFkZXIgKi8KKyAgeworICAgIHVpbnQ4X3QgIG5kX29wdF90eXBlOworICAgIHVpbnQ4X3QgIG5kX29wdF9sZW47ICAgICAgICAvKiBpbiB1bml0cyBvZiA4IG9jdGV0cyAqLworICAgIC8qIGZvbGxvd2VkIGJ5IG9wdGlvbiBzcGVjaWZpYyBkYXRhICovCisgIH07CisKKyNkZWZpbmUgTkRfT1BUX1NPVVJDRV9MSU5LQUREUgkJMQorI2RlZmluZSBORF9PUFRfVEFSR0VUX0xJTktBRERSCQkyCisjZGVmaW5lIE5EX09QVF9QUkVGSVhfSU5GT1JNQVRJT04JMworI2RlZmluZSBORF9PUFRfUkVESVJFQ1RFRF9IRUFERVIJNAorI2RlZmluZSBORF9PUFRfTVRVCQkJNQorI2RlZmluZSBORF9PUFRfUlRSX0FEVl9JTlRFUlZBTAkJNworI2RlZmluZSBORF9PUFRfSE9NRV9BR0VOVF9JTkZPCQk4CisKK3N0cnVjdCBuZF9vcHRfcHJlZml4X2luZm8gICAgIC8qIHByZWZpeCBpbmZvcm1hdGlvbiAqLworICB7CisgICAgdWludDhfdCAgIG5kX29wdF9waV90eXBlOworICAgIHVpbnQ4X3QgICBuZF9vcHRfcGlfbGVuOworICAgIHVpbnQ4X3QgICBuZF9vcHRfcGlfcHJlZml4X2xlbjsKKyAgICB1aW50OF90ICAgbmRfb3B0X3BpX2ZsYWdzX3Jlc2VydmVkOworICAgIHVpbnQzMl90ICBuZF9vcHRfcGlfdmFsaWRfdGltZTsKKyAgICB1aW50MzJfdCAgbmRfb3B0X3BpX3ByZWZlcnJlZF90aW1lOworICAgIHVpbnQzMl90ICBuZF9vcHRfcGlfcmVzZXJ2ZWQyOworICAgIHN0cnVjdCBpbjZfYWRkciAgbmRfb3B0X3BpX3ByZWZpeDsKKyAgfTsKKworI2RlZmluZSBORF9PUFRfUElfRkxBR19PTkxJTksJMHg4MAorI2RlZmluZSBORF9PUFRfUElfRkxBR19BVVRPCTB4NDAKKyNkZWZpbmUgTkRfT1BUX1BJX0ZMQUdfUkFERFIJMHgyMAorCitzdHJ1Y3QgbmRfb3B0X3JkX2hkciAgICAgICAgICAvKiByZWRpcmVjdGVkIGhlYWRlciAqLworICB7CisgICAgdWludDhfdCAgIG5kX29wdF9yaF90eXBlOworICAgIHVpbnQ4X3QgICBuZF9vcHRfcmhfbGVuOworICAgIHVpbnQxNl90ICBuZF9vcHRfcmhfcmVzZXJ2ZWQxOworICAgIHVpbnQzMl90ICBuZF9vcHRfcmhfcmVzZXJ2ZWQyOworICAgIC8qIGZvbGxvd2VkIGJ5IElQIGhlYWRlciBhbmQgZGF0YSAqLworICB9OworCitzdHJ1Y3QgbmRfb3B0X210dSAgICAgICAgICAgICAvKiBNVFUgb3B0aW9uICovCisgIHsKKyAgICB1aW50OF90ICAgbmRfb3B0X210dV90eXBlOworICAgIHVpbnQ4X3QgICBuZF9vcHRfbXR1X2xlbjsKKyAgICB1aW50MTZfdCAgbmRfb3B0X210dV9yZXNlcnZlZDsKKyAgICB1aW50MzJfdCAgbmRfb3B0X210dV9tdHU7CisgIH07CisKK3N0cnVjdCBtbGRfaGRyCisgIHsKKyAgICBzdHJ1Y3QgaWNtcDZfaGRyICAgIG1sZF9pY21wNl9oZHI7CisgICAgc3RydWN0IGluNl9hZGRyICAgICBtbGRfYWRkcjsgLyogbXVsdGljYXN0IGFkZHJlc3MgKi8KKyAgfTsKKworI2RlZmluZSBtbGRfdHlwZSAgICAgICAgbWxkX2ljbXA2X2hkci5pY21wNl90eXBlCisjZGVmaW5lIG1sZF9jb2RlICAgICAgICBtbGRfaWNtcDZfaGRyLmljbXA2X2NvZGUKKyNkZWZpbmUgbWxkX2Nrc3VtICAgICAgIG1sZF9pY21wNl9oZHIuaWNtcDZfY2tzdW0KKyNkZWZpbmUgbWxkX21heGRlbGF5ICAgIG1sZF9pY21wNl9oZHIuaWNtcDZfZGF0YTE2WzBdCisjZGVmaW5lIG1sZF9yZXNlcnZlZCAgICBtbGRfaWNtcDZfaGRyLmljbXA2X2RhdGExNlsxXQorCisjZGVmaW5lIElDTVA2X1JPVVRFUl9SRU5VTUJFUklORyAgICAxMzgKKworc3RydWN0IGljbXA2X3JvdXRlcl9yZW51bSAgICAvKiByb3V0ZXIgcmVudW1iZXJpbmcgaGVhZGVyICovCisgIHsKKyAgICBzdHJ1Y3QgaWNtcDZfaGRyICAgIHJyX2hkcjsKKyAgICB1aW50OF90ICAgICAgICAgICAgIHJyX3NlZ251bTsKKyAgICB1aW50OF90ICAgICAgICAgICAgIHJyX2ZsYWdzOworICAgIHVpbnQxNl90ICAgICAgICAgICAgcnJfbWF4ZGVsYXk7CisgICAgdWludDMyX3QgICAgICAgICAgICBycl9yZXNlcnZlZDsKKyAgfTsKKworI2RlZmluZSBycl90eXBlCQlycl9oZHIuaWNtcDZfdHlwZQorI2RlZmluZSBycl9jb2RlICAgICAgICAgcnJfaGRyLmljbXA2X2NvZGUKKyNkZWZpbmUgcnJfY2tzdW0gICAgICAgIHJyX2hkci5pY21wNl9ja3N1bQorI2RlZmluZSBycl9zZXFudW0gICAgICAgcnJfaGRyLmljbXA2X2RhdGEzMlswXQorCisvKiBSb3V0ZXIgcmVudW1iZXJpbmcgZmxhZ3MgKi8KKyNkZWZpbmUgSUNNUDZfUlJfRkxBR1NfVEVTVCAgICAgICAgICAgICAweDgwCisjZGVmaW5lIElDTVA2X1JSX0ZMQUdTX1JFUVJFU1VMVCAgICAgICAgMHg0MAorI2RlZmluZSBJQ01QNl9SUl9GTEFHU19GT1JDRUFQUExZICAgICAgIDB4MjAKKyNkZWZpbmUgSUNNUDZfUlJfRkxBR1NfU1BFQ1NJVEUgICAgICAgICAweDEwCisjZGVmaW5lIElDTVA2X1JSX0ZMQUdTX1BSRVZET05FICAgICAgICAgMHgwOAorCitzdHJ1Y3QgcnJfcGNvX21hdGNoICAgIC8qIG1hdGNoIHByZWZpeCBwYXJ0ICovCisgIHsKKyAgICB1aW50OF90ICAgICAgICAgICAgIHJwbV9jb2RlOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgcnBtX2xlbjsKKyAgICB1aW50OF90ICAgICAgICAgICAgIHJwbV9vcmRpbmFsOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgcnBtX21hdGNobGVuOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgcnBtX21pbmxlbjsKKyAgICB1aW50OF90ICAgICAgICAgICAgIHJwbV9tYXhsZW47CisgICAgdWludDE2X3QgICAgICAgICAgICBycG1fcmVzZXJ2ZWQ7CisgICAgc3RydWN0IGluNl9hZGRyICAgICBycG1fcHJlZml4OworICB9OworCisvKiBQQ08gY29kZSB2YWx1ZXMgKi8KKyNkZWZpbmUgUlBNX1BDT19BREQgICAgICAgICAgICAgMQorI2RlZmluZSBSUE1fUENPX0NIQU5HRSAgICAgICAgICAyCisjZGVmaW5lIFJQTV9QQ09fU0VUR0xPQkFMICAgICAgIDMKKworc3RydWN0IHJyX3Bjb191c2UgICAgICAvKiB1c2UgcHJlZml4IHBhcnQgKi8KKyAgeworICAgIHVpbnQ4X3QgICAgICAgICAgICAgcnB1X3VzZWxlbjsKKyAgICB1aW50OF90ICAgICAgICAgICAgIHJwdV9rZWVwbGVuOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgcnB1X3JhbWFzazsKKyAgICB1aW50OF90ICAgICAgICAgICAgIHJwdV9yYWZsYWdzOworICAgIHVpbnQzMl90ICAgICAgICAgICAgcnB1X3ZsdGltZTsKKyAgICB1aW50MzJfdCAgICAgICAgICAgIHJwdV9wbHRpbWU7CisgICAgdWludDMyX3QgICAgICAgICAgICBycHVfZmxhZ3M7CisgICAgc3RydWN0IGluNl9hZGRyICAgICBycHVfcHJlZml4OworICB9OworCisjZGVmaW5lIElDTVA2X1JSX1BDT1VTRV9SQUZMQUdTX09OTElOSyAgMHgyMAorI2RlZmluZSBJQ01QNl9SUl9QQ09VU0VfUkFGTEFHU19BVVRPICAgIDB4MTAKKworI2lmIEJZVEVfT1JERVIgPT0gQklHX0VORElBTgorIyBkZWZpbmUgSUNNUDZfUlJfUENPVVNFX0ZMQUdTX0RFQ1JWTFRJTUUgMHg4MDAwMDAwMAorIyBkZWZpbmUgSUNNUDZfUlJfUENPVVNFX0ZMQUdTX0RFQ1JQTFRJTUUgMHg0MDAwMDAwMAorI2VsaWYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOCisjIGRlZmluZSBJQ01QNl9SUl9QQ09VU0VfRkxBR1NfREVDUlZMVElNRSAweDgwCisjIGRlZmluZSBJQ01QNl9SUl9QQ09VU0VfRkxBR1NfREVDUlBMVElNRSAweDQwCisjZW5kaWYKKworc3RydWN0IHJyX3Jlc3VsdCAgICAgICAvKiByb3V0ZXIgcmVudW1iZXJpbmcgcmVzdWx0IG1lc3NhZ2UgKi8KKyAgeworICAgIHVpbnQxNl90ICAgICAgICAgICAgcnJyX2ZsYWdzOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgcnJyX29yZGluYWw7CisgICAgdWludDhfdCAgICAgICAgICAgICBycnJfbWF0Y2hlZGxlbjsKKyAgICB1aW50MzJfdCAgICAgICAgICAgIHJycl9pZmlkOworICAgIHN0cnVjdCBpbjZfYWRkciAgICAgcnJyX3ByZWZpeDsKKyAgfTsKKworI2lmIEJZVEVfT1JERVIgPT0gQklHX0VORElBTgorIyBkZWZpbmUgSUNNUDZfUlJfUkVTVUxUX0ZMQUdTX09PQiAgICAgICAweDAwMDIKKyMgZGVmaW5lIElDTVA2X1JSX1JFU1VMVF9GTEFHU19GT1JCSURERU4gMHgwMDAxCisjZWxpZiBCWVRFX09SREVSID09IExJVFRMRV9FTkRJQU4KKyMgZGVmaW5lIElDTVA2X1JSX1JFU1VMVF9GTEFHU19PT0IgICAgICAgMHgwMjAwCisjIGRlZmluZSBJQ01QNl9SUl9SRVNVTFRfRkxBR1NfRk9SQklEREVOIDB4MDEwMAorI2VuZGlmCisKKy8qIE1vYmlsZSBJUHY2IGV4dGVuc2lvbjogQWR2ZXJ0aXNlbWVudCBJbnRlcnZhbC4gICovCitzdHJ1Y3QgbmRfb3B0X2Fkdl9pbnRlcnZhbAorICB7CisgICAgdWludDhfdCAgIG5kX29wdF9hZHZfaW50ZXJ2YWxfdHlwZTsKKyAgICB1aW50OF90ICAgbmRfb3B0X2Fkdl9pbnRlcnZhbF9sZW47CisgICAgdWludDE2X3QgIG5kX29wdF9hZHZfaW50ZXJ2YWxfcmVzZXJ2ZWQ7CisgICAgdWludDMyX3QgIG5kX29wdF9hZHZfaW50ZXJ2YWxfaXZhbDsKKyAgfTsKKworLyogTW9iaWxlIElQdjYgZXh0ZW5zaW9uOiBIb21lIEFnZW50IEluZm8uICAqLworc3RydWN0IG5kX29wdF9ob21lX2FnZW50X2luZm8KKyAgeworICAgIHVpbnQ4X3QgICBuZF9vcHRfaG9tZV9hZ2VudF9pbmZvX3R5cGU7CisgICAgdWludDhfdCAgIG5kX29wdF9ob21lX2FnZW50X2luZm9fbGVuOworICAgIHVpbnQxNl90ICBuZF9vcHRfaG9tZV9hZ2VudF9pbmZvX3Jlc2VydmVkOworICAgIGludDE2X3QgICBuZF9vcHRfaG9tZV9hZ2VudF9pbmZvX3ByZWZlcmVuY2U7CisgICAgdWludDE2X3QgIG5kX29wdF9ob21lX2FnZW50X2luZm9fbGlmZXRpbWU7CisgIH07CisKKyNlbmRpZiAvKiBuZXRpbmV0L2ljbXB2Ni5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0aW5ldC9pZl9ldGhlci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldGluZXQvaWZfZXRoZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWRiNTliCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldGluZXQvaWZfZXRoZXIuaApAQCAtMCwwICsxLDEwNSBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9fTkVUSU5FVF9JRl9FVEhFUl9ICisKKyNkZWZpbmUgX19ORVRJTkVUX0lGX0VUSEVSX0gJMQorI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8qIEdldCBkZWZpbml0aW9ucyBmcm9tIGtlcm5lbCBoZWFkZXIgZmlsZS4gICovCisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKworI2lmZGVmIF9fVVNFX0JTRAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk4MiwgMTk4NiwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIylpZl9ldGhlci5oCTguMyAoQmVya2VsZXkpIDUvMi85NQorICoJJEZyZWVCU0QkCisgKi8KKworI2luY2x1ZGUgPG5ldC9ldGhlcm5ldC5oPgorI2luY2x1ZGUgPG5ldC9pZl9hcnAuaD4KKworX19CRUdJTl9ERUNMUworLyoKKyAqIEV0aGVybmV0IEFkZHJlc3MgUmVzb2x1dGlvbiBQcm90b2NvbC4KKyAqCisgKiBTZWUgUkZDIDgyNiBmb3IgcHJvdG9jb2wgZGVzY3JpcHRpb24uICBTdHJ1Y3R1cmUgYmVsb3cgaXMgYWRhcHRlZAorICogdG8gcmVzb2x2aW5nIGludGVybmV0IGFkZHJlc3Nlcy4gIEZpZWxkIG5hbWVzIHVzZWQgY29ycmVzcG9uZCB0bworICogUkZDIDgyNi4KKyAqLworc3RydWN0CWV0aGVyX2FycCB7CisJc3RydWN0CWFycGhkciBlYV9oZHI7CQkvKiBmaXhlZC1zaXplIGhlYWRlciAqLworCXVfaW50OF90IGFycF9zaGFbRVRIX0FMRU5dOwkvKiBzZW5kZXIgaGFyZHdhcmUgYWRkcmVzcyAqLworCXVfaW50OF90IGFycF9zcGFbNF07CQkvKiBzZW5kZXIgcHJvdG9jb2wgYWRkcmVzcyAqLworCXVfaW50OF90IGFycF90aGFbRVRIX0FMRU5dOwkvKiB0YXJnZXQgaGFyZHdhcmUgYWRkcmVzcyAqLworCXVfaW50OF90IGFycF90cGFbNF07CQkvKiB0YXJnZXQgcHJvdG9jb2wgYWRkcmVzcyAqLworfTsKKyNkZWZpbmUJYXJwX2hyZAllYV9oZHIuYXJfaHJkCisjZGVmaW5lCWFycF9wcm8JZWFfaGRyLmFyX3BybworI2RlZmluZQlhcnBfaGxuCWVhX2hkci5hcl9obG4KKyNkZWZpbmUJYXJwX3BsbgllYV9oZHIuYXJfcGxuCisjZGVmaW5lCWFycF9vcAllYV9oZHIuYXJfb3AKKworLyoKKyAqIE1hY3JvIHRvIG1hcCBhbiBJUCBtdWx0aWNhc3QgYWRkcmVzcyB0byBhbiBFdGhlcm5ldCBtdWx0aWNhc3QgYWRkcmVzcy4KKyAqIFRoZSBoaWdoLW9yZGVyIDI1IGJpdHMgb2YgdGhlIEV0aGVybmV0IGFkZHJlc3MgYXJlIHN0YXRpY2FsbHkgYXNzaWduZWQsCisgKiBhbmQgdGhlIGxvdy1vcmRlciAyMyBiaXRzIGFyZSB0YWtlbiBmcm9tIHRoZSBsb3cgZW5kIG9mIHRoZSBJUCBhZGRyZXNzLgorICovCisjZGVmaW5lIEVUSEVSX01BUF9JUF9NVUxUSUNBU1QoaXBhZGRyLCBlbmFkZHIpIFwKKwkvKiBzdHJ1Y3QgaW5fYWRkciAqaXBhZGRyOyAqLyBcCisJLyogdV9jaGFyIGVuYWRkcltFVEhfQUxFTl07CSAgICovIFwKK3sgXAorCShlbmFkZHIpWzBdID0gMHgwMTsgXAorCShlbmFkZHIpWzFdID0gMHgwMDsgXAorCShlbmFkZHIpWzJdID0gMHg1ZTsgXAorCShlbmFkZHIpWzNdID0gKCh1X2ludDhfdCAqKWlwYWRkcilbMV0gJiAweDdmOyBcCisJKGVuYWRkcilbNF0gPSAoKHVfaW50OF90ICopaXBhZGRyKVsyXTsgXAorCShlbmFkZHIpWzVdID0gKCh1X2ludDhfdCAqKWlwYWRkcilbM107IFwKK30KKworX19FTkRfREVDTFMKKyNlbmRpZiAvKiBfX1VTRV9CU0QgKi8KKworI2VuZGlmIC8qIG5ldGluZXQvaWZfZXRoZXIuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldGluZXQvaWZfZmRkaS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldGluZXQvaWZfZmRkaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMGVjOTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0aW5ldC9pZl9mZGRpLmgKQEAgLTAsMCArMSwzNyBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9ORVRJTkVUX0lGX0ZERElfSAorI2RlZmluZQlfTkVUSU5FVF9JRl9GRERJX0ggMQorCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pZl9mZGRpLmg+CisKKyNpZmRlZiBfX1VTRV9CU0QKKworc3RydWN0IGZkZGlfaGVhZGVyIHsKKyAgdV9pbnQ4X3QgZmRkaV9mYzsgICAgICAgICAgICAgICAgICAgIC8qIEZyYW1lIENvbnRyb2wgKEZDKSB2YWx1ZSAqLworICB1X2ludDhfdCBmZGRpX2Rob3N0W0ZERElfS19BTEVOXTsgICAgLyogRGVzdGluYXRpb24gaG9zdCAqLworICB1X2ludDhfdCBmZGRpX3Nob3N0W0ZERElfS19BTEVOXTsgICAgLyogU291cmNlIGhvc3QgKi8KK307CisjZW5kaWYKKworI2VuZGlmCS8qIG5ldGluZXQvaWZfZmRkaS5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0aW5ldC9pZl90ci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldGluZXQvaWZfdHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWMzOTExCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldGluZXQvaWZfdHIuaApAQCAtMCwwICsxLDExMSBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk3LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9ORVRJTkVUX0lGX1RSX0gKKyNkZWZpbmUJX05FVElORVRfSUZfVFJfSCAxCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworLyogSUVFRSA4MDIuNSBUb2tlbi1SaW5nIG1hZ2ljIGNvbnN0YW50cy4gIFRoZSBmcmFtZSBzaXplcyBvbWl0IHRoZSBwcmVhbWJsZQorICAgYW5kIEZDUy9DUkMgKGZyYW1lIGNoZWNrIHNlcXVlbmNlKS4gKi8KKyNkZWZpbmUgVFJfQUxFTgkJNgkJLyogT2N0ZXRzIGluIG9uZSB0b2tlbi1yaW5nIGFkZHIgKi8KKyNkZWZpbmUgVFJfSExFTiAJKHNpemVvZiAoc3RydWN0IHRyaF9oZHIpICsgc2l6ZW9mIChzdHJ1Y3QgdHJsbGMpKQorI2RlZmluZSBBQwkJMHgxMAorI2RlZmluZSBMTENfRlJBTUUgCTB4NDAKKworLyogTExDIGFuZCBTTkFQIGNvbnN0YW50cyAqLworI2RlZmluZSBFWFRFTkRFRF9TQVAgCTB4QUEKKyNkZWZpbmUgVUlfQ01EICAgICAgIAkweDAzCisKKy8qIFRoaXMgaXMgYW4gVG9rZW4tUmluZyBmcmFtZSBoZWFkZXIuICovCitzdHJ1Y3QgdHJoX2hkcgoreworICB1X2ludDhfdCAgYWM7CQkJLyogYWNjZXNzIGNvbnRyb2wgZmllbGQgKi8KKyAgdV9pbnQ4X3QgIGZjOwkJCS8qIGZyYW1lIGNvbnRyb2wgZmllbGQgKi8KKyAgdV9pbnQ4X3QgIGRhZGRyW1RSX0FMRU5dOwkvKiBkZXN0aW5hdGlvbiBhZGRyZXNzICovCisgIHVfaW50OF90ICBzYWRkcltUUl9BTEVOXTsJLyogc291cmNlIGFkZHJlc3MgKi8KKyAgdV9pbnQxNl90IHJjZjsJCS8qIHJvdXRlIGNvbnRyb2wgZmllbGQgKi8KKyAgdV9pbnQxNl90IHJzZWdbOF07CQkvKiByb3V0aW5nIHJlZ2lzdGVycyAqLworfTsKKworLyogVGhpcyBpcyBhbiBUb2tlbi1SaW5nIExMQyBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCB0cmxsYworeworICB1X2ludDhfdCAgZHNhcDsJCS8qIGRlc3RpbmF0aW9uIFNBUCAqLworICB1X2ludDhfdCAgc3NhcDsJCS8qIHNvdXJjZSBTQVAgKi8KKyAgdV9pbnQ4X3QgIGxsYzsJCS8qIExMQyBjb250cm9sIGZpZWxkICovCisgIHVfaW50OF90ICBwcm90aWRbM107CQkvKiBwcm90b2NvbCBpZCAqLworICB1X2ludDE2X3QgZXRoZXJ0eXBlOwkJLyogZXRoZXIgdHlwZSBmaWVsZCAqLworfTsKKworLyogVG9rZW4tUmluZyBzdGF0aXN0aWNzIGNvbGxlY3Rpb24gZGF0YS4gKi8KK3N0cnVjdCB0cl9zdGF0aXN0aWNzCit7CisgIHVuc2lnbmVkIGxvbmcgcnhfcGFja2V0czsgICAgIC8qIHRvdGFsIHBhY2tldHMgcmVjZWl2ZWQJKi8KKyAgdW5zaWduZWQgbG9uZyB0eF9wYWNrZXRzOwkvKiB0b3RhbCBwYWNrZXRzIHRyYW5zbWl0dGVkCSovCisgIHVuc2lnbmVkIGxvbmcgcnhfYnl0ZXM7CS8qIHRvdGFsIGJ5dGVzIHJlY2VpdmVkICAgCSovCisgIHVuc2lnbmVkIGxvbmcgdHhfYnl0ZXM7CS8qIHRvdGFsIGJ5dGVzIHRyYW5zbWl0dGVkCSovCisgIHVuc2lnbmVkIGxvbmcgcnhfZXJyb3JzOwkvKiBiYWQgcGFja2V0cyByZWNlaXZlZAkJKi8KKyAgdW5zaWduZWQgbG9uZyB0eF9lcnJvcnM7CS8qIHBhY2tldCB0cmFuc21pdCBwcm9ibGVtcwkqLworICB1bnNpZ25lZCBsb25nIHJ4X2Ryb3BwZWQ7CS8qIG5vIHNwYWNlIGluIGxpbnV4IGJ1ZmZlcnMJKi8KKyAgdW5zaWduZWQgbG9uZyB0eF9kcm9wcGVkOwkvKiBubyBzcGFjZSBhdmFpbGFibGUgaW4gbGludXgJKi8KKyAgdW5zaWduZWQgbG9uZyBtdWx0aWNhc3Q7CS8qIG11bHRpY2FzdCBwYWNrZXRzIHJlY2VpdmVkCSovCisgIHVuc2lnbmVkIGxvbmcgdHJhbnNtaXRfY29sbGlzaW9uOworCisgIC8qIGRldGFpbGVkIFRva2VuLVJpbmcgZXJyb3JzLiBTZWUgSUJNIFRva2VuLVJpbmcgTmV0d29yaworICAgICBBcmNoaXRlY3R1cmUgZm9yIG1vcmUgaW5mbyAqLworCisgIHVuc2lnbmVkIGxvbmcgbGluZV9lcnJvcnM7CisgIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxfZXJyb3JzOworICB1bnNpZ25lZCBsb25nIGJ1cnN0X2Vycm9yczsKKyAgdW5zaWduZWQgbG9uZyBBX0NfZXJyb3JzOworICB1bnNpZ25lZCBsb25nIGFib3J0X2RlbGltaXRlcnM7CisgIHVuc2lnbmVkIGxvbmcgbG9zdF9mcmFtZXM7CisgIHVuc2lnbmVkIGxvbmcgcmVjdl9jb25nZXN0X2NvdW50OworICB1bnNpZ25lZCBsb25nIGZyYW1lX2NvcGllZF9lcnJvcnM7CisgIHVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5X2Vycm9yczsKKyAgdW5zaWduZWQgbG9uZyB0b2tlbl9lcnJvcnM7CisgIHVuc2lnbmVkIGxvbmcgZHVtbXkxOworfTsKKworLyogc291cmNlIHJvdXRpbmcgc3R1ZmYgKi8KKyNkZWZpbmUgVFJfUklJIAkJCTB4ODAKKyNkZWZpbmUgVFJfUkNGX0RJUl9CSVQgCQkweDgwCisjZGVmaW5lIFRSX1JDRl9MRU5fTUFTSyAJMHgxZjAwCisjZGVmaW5lIFRSX1JDRl9CUk9BRENBU1QgCTB4ODAwMAkvKiBhbGwtcm91dGVzIGJyb2FkY2FzdCAqLworI2RlZmluZSBUUl9SQ0ZfTElNSVRFRF9CUk9BRENBU1QgMHhDMDAwCS8qIHNpbmdsZS1yb3V0ZSBicm9hZGNhc3QgKi8KKyNkZWZpbmUgVFJfUkNGX0ZSQU1FMksgCQkweDIwCisjZGVmaW5lIFRSX1JDRl9CUk9BRENBU1RfTUFTSyAJMHhDMDAwCisjZGVmaW5lIFRSX01BWFJJRkxFTiAJCTE4CisKKyNpZmRlZiBfX1VTRV9CU0QKKworc3RydWN0IHRybl9oZHIKK3sKKyAgdV9pbnQ4X3QgdHJuX2FjOyAgICAgICAgICAgICAgICAvKiBhY2Nlc3MgY29udHJvbCBmaWVsZCAqLworICB1X2ludDhfdCB0cm5fZmM7ICAgICAgICAgICAgICAgIC8qIGZpZWxkIGNvbnRyb2wgZmllbGQgKi8KKyAgdV9pbnQ4X3QgdHJuX2Rob3N0W1RSX0FMRU5dOyAgICAvKiBkZXN0aW5hdGlvbiBob3N0ICovCisgIHVfaW50OF90IHRybl9zaG9zdFtUUl9BTEVOXTsgICAgLyogc291cmNlIGhvc3QgKi8KKyAgdV9pbnQxNl90IHRybl9yY2Y7ICAgICAgICAgICAgICAvKiByb3V0ZSBjb250cm9sIGZpZWxkICovCisgIHVfaW50MTZfdCB0cm5fcnNlZ1s4XTsgICAgICAgICAgLyogcm91dGluZyByZWdpc3RlcnMgKi8KK307CisKKyNlbmRpZgorCisjZW5kaWYJLyogbmV0aW5ldC9pZl90ci5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0aW5ldC9pZ21wLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0aW5ldC9pZ21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjczOTZiYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXRpbmV0L2lnbXAuaApAQCAtMCwwICsxLDEyNiBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk5LCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9ORVRJTkVUX0lHTVBfSAorI2RlZmluZQlfTkVUSU5FVF9JR01QX0ggMQorCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpZmRlZiBfX1VTRV9CU0QKKworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKworX19CRUdJTl9ERUNMUworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4IFN0ZXBoZW4gRGVlcmluZy4KKyAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogU3RlcGhlbiBEZWVyaW5nIG9mIFN0YW5mb3JkIFVuaXZlcnNpdHkuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIylpZ21wLmgJOC4xIChCZXJrZWxleSkgNi8xMC85MworICoJJEZyZWVCU0QkCisgKi8KKworc3RydWN0IGlnbXAgeworICB1X2ludDhfdCBpZ21wX3R5cGU7ICAgICAgICAgICAgIC8qIElHTVAgdHlwZSAqLworICB1X2ludDhfdCBpZ21wX2NvZGU7ICAgICAgICAgICAgIC8qIHJvdXRpbmcgY29kZSAqLworICB1X2ludDE2X3QgaWdtcF9ja3N1bTsgICAgICAgICAgIC8qIGNoZWNrc3VtICovCisgIHN0cnVjdCBpbl9hZGRyIGlnbXBfZ3JvdXA7ICAgICAgLyogZ3JvdXAgYWRkcmVzcyAqLworfTsKKworI2RlZmluZSBJR01QX01JTkxFTgkJCTgKKworLyoKKyAqIE1lc3NhZ2UgdHlwZXMsIGluY2x1ZGluZyB2ZXJzaW9uIG51bWJlci4KKyAqLworI2RlZmluZSBJR01QX01FTUJFUlNISVBfUVVFUlkgICAJMHgxMQkvKiBtZW1iZXJzaGlwIHF1ZXJ5ICAgICAgICAgKi8KKyNkZWZpbmUgSUdNUF9WMV9NRU1CRVJTSElQX1JFUE9SVAkweDEyCS8qIFZlci4gMSBtZW1iZXJzaGlwIHJlcG9ydCAqLworI2RlZmluZSBJR01QX1YyX01FTUJFUlNISVBfUkVQT1JUCTB4MTYJLyogVmVyLiAyIG1lbWJlcnNoaXAgcmVwb3J0ICovCisjZGVmaW5lIElHTVBfVjJfTEVBVkVfR1JPVVAJCTB4MTcJLyogTGVhdmUtZ3JvdXAgbWVzc2FnZQkgICAgKi8KKworI2RlZmluZSBJR01QX0RWTVJQCQkJMHgxMwkvKiBEVk1SUCByb3V0aW5nIG1lc3NhZ2UgICAgKi8KKyNkZWZpbmUgSUdNUF9QSU0JCQkweDE0CS8qIFBJTSByb3V0aW5nIG1lc3NhZ2UgICAgICAqLworI2RlZmluZSBJR01QX1RSQUNFCQkJMHgxNQorCisjZGVmaW5lIElHTVBfTVRSQUNFX1JFU1AJCTB4MWUJLyogdHJhY2Vyb3V0ZSByZXNwLih0byBzZW5kZXIpKi8KKyNkZWZpbmUgSUdNUF9NVFJBQ0UJCQkweDFmCS8qIG1jYXN0IHRyYWNlcm91dGUgbWVzc2FnZXMgICovCisKKyNkZWZpbmUgSUdNUF9NQVhfSE9TVF9SRVBPUlRfREVMQVkJMTAJLyogbWF4IGRlbGF5IGZvciByZXNwb25zZSB0byAgICAgKi8KKwkJCQkJCS8qICBxdWVyeSAoaW4gc2Vjb25kcykgYWNjb3JkaW5nICovCisJCQkJCQkvKiAgdG8gUkZDMTExMiAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJR01QX1RJTUVSX1NDQUxFCQkxMAkvKiBkZW5vdGVzIHRoYXQgdGhlIGlnbXAgY29kZSBmaWVsZCAqLworCQkJCQkJLyogc3BlY2lmaWVzIHRpbWUgaW4gMTB0aCBvZiBzZWNvbmRzKi8KKworLyoKKyAqIFN0YXRlcyBmb3IgdGhlIElHTVAgdjIgc3RhdGUgdGFibGUuCisgKi8KKyNkZWZpbmUgSUdNUF9ERUxBWUlOR19NRU1CRVIJMQorI2RlZmluZSBJR01QX0lETEVfTUVNQkVSCTIKKyNkZWZpbmUgSUdNUF9MQVpZX01FTUJFUgkzCisjZGVmaW5lIElHTVBfU0xFRVBJTkdfTUVNQkVSCTQKKyNkZWZpbmUgSUdNUF9BV0FLRU5JTkdfTUVNQkVSCTUKKworLyoKKyAqIFN0YXRlcyBmb3IgSUdNUCByb3V0ZXIgdmVyc2lvbiBjYWNoZS4KKyAqLworI2RlZmluZSBJR01QX3YxX1JPVVRFUgkJMQorI2RlZmluZSBJR01QX3YyX1JPVVRFUgkJMgorCisvKgorICogVGhlIGZvbGxvd2luZyBmb3VyIGRlZmluaW5pdGlvbnMgYXJlIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKyAqIFRoZXkgc2hvdWxkIGJlIHJlbW92ZWQgYXMgc29vbiBhcyBhbGwgYXBwbGljYXRpb25zIGFyZSB1cGRhdGVkIHRvCisgKiB1c2UgdGhlIG5ldyBjb25zdGFudCBuYW1lcy4KKyAqLworI2RlZmluZSBJR01QX0hPU1RfTUVNQkVSU0hJUF9RVUVSWQlJR01QX01FTUJFUlNISVBfUVVFUlkKKyNkZWZpbmUgSUdNUF9IT1NUX01FTUJFUlNISVBfUkVQT1JUCUlHTVBfVjFfTUVNQkVSU0hJUF9SRVBPUlQKKyNkZWZpbmUgSUdNUF9IT1NUX05FV19NRU1CRVJTSElQX1JFUE9SVAlJR01QX1YyX01FTUJFUlNISVBfUkVQT1JUCisjZGVmaW5lIElHTVBfSE9TVF9MRUFWRV9NRVNTQUdFCQlJR01QX1YyX0xFQVZFX0dST1VQCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZgorCisjZW5kaWYJLyogbmV0aW5ldC9pZ21wLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MDIyN2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oCkBAIC0wLDAgKzEsNTY3IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTEtMjAwMSwgMjAwMywgMjAwNCwgMjAwNiwgMjAwNywgMjAwOAorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYJX05FVElORVRfSU5fSAorI2RlZmluZQlfTkVUSU5FVF9JTl9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPGJpdHMvdHlwZXMuaD4KKworCitfX0JFR0lOX0RFQ0xTCisKKy8qIFN0YW5kYXJkIHdlbGwtZGVmaW5lZCBJUCBwcm90b2NvbHMuICAqLworZW51bQorICB7CisgICAgSVBQUk9UT19JUCA9IDAsCSAgIC8qIER1bW15IHByb3RvY29sIGZvciBUQ1AuICAqLworI2RlZmluZSBJUFBST1RPX0lQCQlJUFBST1RPX0lQCisgICAgSVBQUk9UT19IT1BPUFRTID0gMCwgICAvKiBJUHY2IEhvcC1ieS1Ib3Agb3B0aW9ucy4gICovCisjZGVmaW5lIElQUFJPVE9fSE9QT1BUUwkJSVBQUk9UT19IT1BPUFRTCisgICAgSVBQUk9UT19JQ01QID0gMSwJICAgLyogSW50ZXJuZXQgQ29udHJvbCBNZXNzYWdlIFByb3RvY29sLiAgKi8KKyNkZWZpbmUgSVBQUk9UT19JQ01QCQlJUFBST1RPX0lDTVAKKyAgICBJUFBST1RPX0lHTVAgPSAyLAkgICAvKiBJbnRlcm5ldCBHcm91cCBNYW5hZ2VtZW50IFByb3RvY29sLiAqLworI2RlZmluZSBJUFBST1RPX0lHTVAJCUlQUFJPVE9fSUdNUAorICAgIElQUFJPVE9fSVBJUCA9IDQsCSAgIC8qIElQSVAgdHVubmVscyAob2xkZXIgS0E5USB0dW5uZWxzIHVzZSA5NCkuICAqLworI2RlZmluZSBJUFBST1RPX0lQSVAJCUlQUFJPVE9fSVBJUAorICAgIElQUFJPVE9fVENQID0gNiwJICAgLyogVHJhbnNtaXNzaW9uIENvbnRyb2wgUHJvdG9jb2wuICAqLworI2RlZmluZSBJUFBST1RPX1RDUAkJSVBQUk9UT19UQ1AKKyAgICBJUFBST1RPX0VHUCA9IDgsCSAgIC8qIEV4dGVyaW9yIEdhdGV3YXkgUHJvdG9jb2wuICAqLworI2RlZmluZSBJUFBST1RPX0VHUAkJSVBQUk9UT19FR1AKKyAgICBJUFBST1RPX1BVUCA9IDEyLAkgICAvKiBQVVAgcHJvdG9jb2wuICAqLworI2RlZmluZSBJUFBST1RPX1BVUAkJSVBQUk9UT19QVVAKKyAgICBJUFBST1RPX1VEUCA9IDE3LAkgICAvKiBVc2VyIERhdGFncmFtIFByb3RvY29sLiAgKi8KKyNkZWZpbmUgSVBQUk9UT19VRFAJCUlQUFJPVE9fVURQCisgICAgSVBQUk9UT19JRFAgPSAyMiwJICAgLyogWE5TIElEUCBwcm90b2NvbC4gICovCisjZGVmaW5lIElQUFJPVE9fSURQCQlJUFBST1RPX0lEUAorICAgIElQUFJPVE9fVFAgPSAyOSwJICAgLyogU08gVHJhbnNwb3J0IFByb3RvY29sIENsYXNzIDQuICAqLworI2RlZmluZSBJUFBST1RPX1RQCQlJUFBST1RPX1RQCisgICAgSVBQUk9UT19EQ0NQID0gMzMsCSAgIC8qIERhdGFncmFtIENvbmdlc3Rpb24gQ29udHJvbCBQcm90b2NvbC4gICovCisjZGVmaW5lIElQUFJPVE9fRENDUAkJSVBQUk9UT19EQ0NQCisgICAgSVBQUk9UT19JUFY2ID0gNDEsICAgICAvKiBJUHY2IGhlYWRlci4gICovCisjZGVmaW5lIElQUFJPVE9fSVBWNgkJSVBQUk9UT19JUFY2CisgICAgSVBQUk9UT19ST1VUSU5HID0gNDMsICAvKiBJUHY2IHJvdXRpbmcgaGVhZGVyLiAgKi8KKyNkZWZpbmUgSVBQUk9UT19ST1VUSU5HCQlJUFBST1RPX1JPVVRJTkcKKyAgICBJUFBST1RPX0ZSQUdNRU5UID0gNDQsIC8qIElQdjYgZnJhZ21lbnRhdGlvbiBoZWFkZXIuICAqLworI2RlZmluZSBJUFBST1RPX0ZSQUdNRU5UCUlQUFJPVE9fRlJBR01FTlQKKyAgICBJUFBST1RPX1JTVlAgPSA0NiwJICAgLyogUmVzZXJ2YXRpb24gUHJvdG9jb2wuICAqLworI2RlZmluZSBJUFBST1RPX1JTVlAJCUlQUFJPVE9fUlNWUAorICAgIElQUFJPVE9fR1JFID0gNDcsCSAgIC8qIEdlbmVyYWwgUm91dGluZyBFbmNhcHN1bGF0aW9uLiAgKi8KKyNkZWZpbmUgSVBQUk9UT19HUkUJCUlQUFJPVE9fR1JFCisgICAgSVBQUk9UT19FU1AgPSA1MCwgICAgICAvKiBlbmNhcHN1bGF0aW5nIHNlY3VyaXR5IHBheWxvYWQuICAqLworI2RlZmluZSBJUFBST1RPX0VTUAkJSVBQUk9UT19FU1AKKyAgICBJUFBST1RPX0FIID0gNTEsICAgICAgIC8qIGF1dGhlbnRpY2F0aW9uIGhlYWRlci4gICovCisjZGVmaW5lIElQUFJPVE9fQUgJCUlQUFJPVE9fQUgKKyAgICBJUFBST1RPX0lDTVBWNiA9IDU4LCAgIC8qIElDTVB2Ni4gICovCisjZGVmaW5lIElQUFJPVE9fSUNNUFY2CQlJUFBST1RPX0lDTVBWNgorICAgIElQUFJPVE9fTk9ORSA9IDU5LCAgICAgLyogSVB2NiBubyBuZXh0IGhlYWRlci4gICovCisjZGVmaW5lIElQUFJPVE9fTk9ORQkJSVBQUk9UT19OT05FCisgICAgSVBQUk9UT19EU1RPUFRTID0gNjAsICAvKiBJUHY2IGRlc3RpbmF0aW9uIG9wdGlvbnMuICAqLworI2RlZmluZSBJUFBST1RPX0RTVE9QVFMJCUlQUFJPVE9fRFNUT1BUUworICAgIElQUFJPVE9fTVRQID0gOTIsCSAgIC8qIE11bHRpY2FzdCBUcmFuc3BvcnQgUHJvdG9jb2wuICAqLworI2RlZmluZSBJUFBST1RPX01UUAkJSVBQUk9UT19NVFAKKyAgICBJUFBST1RPX0VOQ0FQID0gOTgsCSAgIC8qIEVuY2Fwc3VsYXRpb24gSGVhZGVyLiAgKi8KKyNkZWZpbmUgSVBQUk9UT19FTkNBUAkJSVBQUk9UT19FTkNBUAorICAgIElQUFJPVE9fUElNID0gMTAzLAkgICAvKiBQcm90b2NvbCBJbmRlcGVuZGVudCBNdWx0aWNhc3QuICAqLworI2RlZmluZSBJUFBST1RPX1BJTQkJSVBQUk9UT19QSU0KKyAgICBJUFBST1RPX0NPTVAgPSAxMDgsCSAgIC8qIENvbXByZXNzaW9uIEhlYWRlciBQcm90b2NvbC4gICovCisjZGVmaW5lIElQUFJPVE9fQ09NUAkJSVBQUk9UT19DT01QCisgICAgSVBQUk9UT19TQ1RQID0gMTMyLAkgICAvKiBTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2wuICAqLworI2RlZmluZSBJUFBST1RPX1NDVFAJCUlQUFJPVE9fU0NUUAorICAgIElQUFJPVE9fVURQTElURSA9IDEzNiwgLyogVURQLUxpdGUgcHJvdG9jb2wuICAqLworI2RlZmluZSBJUFBST1RPX1VEUExJVEUJCUlQUFJPVE9fVURQTElURQorICAgIElQUFJPVE9fUkFXID0gMjU1LAkgICAvKiBSYXcgSVAgcGFja2V0cy4gICovCisjZGVmaW5lIElQUFJPVE9fUkFXCQlJUFBST1RPX1JBVworICAgIElQUFJPVE9fTUFYCisgIH07CisKKworLyogVHlwZSB0byByZXByZXNlbnQgYSBwb3J0LiAgKi8KK3R5cGVkZWYgdWludDE2X3QgaW5fcG9ydF90OworCisvKiBTdGFuZGFyZCB3ZWxsLWtub3duIHBvcnRzLiAgKi8KK2VudW0KKyAgeworICAgIElQUE9SVF9FQ0hPID0gNywJCS8qIEVjaG8gc2VydmljZS4gICovCisgICAgSVBQT1JUX0RJU0NBUkQgPSA5LAkJLyogRGlzY2FyZCB0cmFuc21pc3Npb25zIHNlcnZpY2UuICAqLworICAgIElQUE9SVF9TWVNUQVQgPSAxMSwJCS8qIFN5c3RlbSBzdGF0dXMgc2VydmljZS4gICovCisgICAgSVBQT1JUX0RBWVRJTUUgPSAxMywJLyogVGltZSBvZiBkYXkgc2VydmljZS4gICovCisgICAgSVBQT1JUX05FVFNUQVQgPSAxNSwJLyogTmV0d29yayBzdGF0dXMgc2VydmljZS4gICovCisgICAgSVBQT1JUX0ZUUCA9IDIxLAkJLyogRmlsZSBUcmFuc2ZlciBQcm90b2NvbC4gICovCisgICAgSVBQT1JUX1RFTE5FVCA9IDIzLAkJLyogVGVsbmV0IHByb3RvY29sLiAgKi8KKyAgICBJUFBPUlRfU01UUCA9IDI1LAkJLyogU2ltcGxlIE1haWwgVHJhbnNmZXIgUHJvdG9jb2wuICAqLworICAgIElQUE9SVF9USU1FU0VSVkVSID0gMzcsCS8qIFRpbWVzZXJ2ZXIgc2VydmljZS4gICovCisgICAgSVBQT1JUX05BTUVTRVJWRVIgPSA0MiwJLyogRG9tYWluIE5hbWUgU2VydmljZS4gICovCisgICAgSVBQT1JUX1dIT0lTID0gNDMsCQkvKiBJbnRlcm5ldCBXaG9pcyBzZXJ2aWNlLiAgKi8KKyAgICBJUFBPUlRfTVRQID0gNTcsCisKKyAgICBJUFBPUlRfVEZUUCA9IDY5LAkJLyogVHJpdmlhbCBGaWxlIFRyYW5zZmVyIFByb3RvY29sLiAgKi8KKyAgICBJUFBPUlRfUkpFID0gNzcsCisgICAgSVBQT1JUX0ZJTkdFUiA9IDc5LAkJLyogRmluZ2VyIHNlcnZpY2UuICAqLworICAgIElQUE9SVF9UVFlMSU5LID0gODcsCisgICAgSVBQT1JUX1NVUERVUCA9IDk1LAkJLyogU1VQRFVQIHByb3RvY29sLiAgKi8KKworCisgICAgSVBQT1JUX0VYRUNTRVJWRVIgPSA1MTIsCS8qIGV4ZWNkIHNlcnZpY2UuICAqLworICAgIElQUE9SVF9MT0dJTlNFUlZFUiA9IDUxMywJLyogcmxvZ2luZCBzZXJ2aWNlLiAgKi8KKyAgICBJUFBPUlRfQ01EU0VSVkVSID0gNTE0LAorICAgIElQUE9SVF9FRlNTRVJWRVIgPSA1MjAsCisKKyAgICAvKiBVRFAgcG9ydHMuICAqLworICAgIElQUE9SVF9CSUZGVURQID0gNTEyLAorICAgIElQUE9SVF9XSE9TRVJWRVIgPSA1MTMsCisgICAgSVBQT1JUX1JPVVRFU0VSVkVSID0gNTIwLAorCisgICAgLyogUG9ydHMgbGVzcyB0aGFuIHRoaXMgdmFsdWUgYXJlIHJlc2VydmVkIGZvciBwcml2aWxlZ2VkIHByb2Nlc3Nlcy4gICovCisgICAgSVBQT1JUX1JFU0VSVkVEID0gMTAyNCwKKworICAgIC8qIFBvcnRzIGdyZWF0ZXIgdGhpcyB2YWx1ZSBhcmUgcmVzZXJ2ZWQgZm9yIChub24tcHJpdmlsZWdlZCkgc2VydmVycy4gICovCisgICAgSVBQT1JUX1VTRVJSRVNFUlZFRCA9IDUwMDAKKyAgfTsKKworCisvKiBJbnRlcm5ldCBhZGRyZXNzLiAgKi8KK3R5cGVkZWYgdWludDMyX3QgaW5fYWRkcl90Oworc3RydWN0IGluX2FkZHIKKyAgeworICAgIGluX2FkZHJfdCBzX2FkZHI7CisgIH07CisKKworLyogRGVmaW5pdGlvbnMgb2YgdGhlIGJpdHMgaW4gYW4gSW50ZXJuZXQgYWRkcmVzcyBpbnRlZ2VyLgorCisgICBPbiBzdWJuZXRzLCBob3N0IGFuZCBuZXR3b3JrIHBhcnRzIGFyZSBmb3VuZCBhY2NvcmRpbmcgdG8KKyAgIHRoZSBzdWJuZXQgbWFzaywgbm90IHRoZXNlIG1hc2tzLiAgKi8KKworI2RlZmluZQlJTl9DTEFTU0EoYSkJCSgoKChpbl9hZGRyX3QpKGEpKSAmIDB4ODAwMDAwMDApID09IDApCisjZGVmaW5lCUlOX0NMQVNTQV9ORVQJCTB4ZmYwMDAwMDAKKyNkZWZpbmUJSU5fQ0xBU1NBX05TSElGVAkyNAorI2RlZmluZQlJTl9DTEFTU0FfSE9TVAkJKDB4ZmZmZmZmZmYgJiB+SU5fQ0xBU1NBX05FVCkKKyNkZWZpbmUJSU5fQ0xBU1NBX01BWAkJMTI4CisKKyNkZWZpbmUJSU5fQ0xBU1NCKGEpCQkoKCgoaW5fYWRkcl90KShhKSkgJiAweGMwMDAwMDAwKSA9PSAweDgwMDAwMDAwKQorI2RlZmluZQlJTl9DTEFTU0JfTkVUCQkweGZmZmYwMDAwCisjZGVmaW5lCUlOX0NMQVNTQl9OU0hJRlQJMTYKKyNkZWZpbmUJSU5fQ0xBU1NCX0hPU1QJCSgweGZmZmZmZmZmICYgfklOX0NMQVNTQl9ORVQpCisjZGVmaW5lCUlOX0NMQVNTQl9NQVgJCTY1NTM2CisKKyNkZWZpbmUJSU5fQ0xBU1NDKGEpCQkoKCgoaW5fYWRkcl90KShhKSkgJiAweGUwMDAwMDAwKSA9PSAweGMwMDAwMDAwKQorI2RlZmluZQlJTl9DTEFTU0NfTkVUCQkweGZmZmZmZjAwCisjZGVmaW5lCUlOX0NMQVNTQ19OU0hJRlQJOAorI2RlZmluZQlJTl9DTEFTU0NfSE9TVAkJKDB4ZmZmZmZmZmYgJiB+SU5fQ0xBU1NDX05FVCkKKworI2RlZmluZQlJTl9DTEFTU0QoYSkJCSgoKChpbl9hZGRyX3QpKGEpKSAmIDB4ZjAwMDAwMDApID09IDB4ZTAwMDAwMDApCisjZGVmaW5lCUlOX01VTFRJQ0FTVChhKQkJSU5fQ0xBU1NEKGEpCisKKyNkZWZpbmUJSU5fRVhQRVJJTUVOVEFMKGEpCSgoKChpbl9hZGRyX3QpKGEpKSAmIDB4ZTAwMDAwMDApID09IDB4ZTAwMDAwMDApCisjZGVmaW5lCUlOX0JBRENMQVNTKGEpCQkoKCgoaW5fYWRkcl90KShhKSkgJiAweGYwMDAwMDAwKSA9PSAweGYwMDAwMDAwKQorCisvKiBBZGRyZXNzIHRvIGFjY2VwdCBhbnkgaW5jb21pbmcgbWVzc2FnZXMuICAqLworI2RlZmluZQlJTkFERFJfQU5ZCQkoKGluX2FkZHJfdCkgMHgwMDAwMDAwMCkKKy8qIEFkZHJlc3MgdG8gc2VuZCB0byBhbGwgaG9zdHMuICAqLworI2RlZmluZQlJTkFERFJfQlJPQURDQVNUCSgoaW5fYWRkcl90KSAweGZmZmZmZmZmKQorLyogQWRkcmVzcyBpbmRpY2F0aW5nIGFuIGVycm9yIHJldHVybi4gICovCisjZGVmaW5lCUlOQUREUl9OT05FCQkoKGluX2FkZHJfdCkgMHhmZmZmZmZmZikKKworLyogTmV0d29yayBudW1iZXIgZm9yIGxvY2FsIGhvc3QgbG9vcGJhY2suICAqLworI2RlZmluZQlJTl9MT09QQkFDS05FVAkJMTI3CisvKiBBZGRyZXNzIHRvIGxvb3BiYWNrIGluIHNvZnR3YXJlIHRvIGxvY2FsIGhvc3QuICAqLworI2lmbmRlZiBJTkFERFJfTE9PUEJBQ0sKKyMgZGVmaW5lIElOQUREUl9MT09QQkFDSwkoKGluX2FkZHJfdCkgMHg3ZjAwMDAwMSkgLyogSW5ldCAxMjcuMC4wLjEuICAqLworI2VuZGlmCisKKy8qIERlZmluZXMgZm9yIE11bHRpY2FzdCBJTkFERFIuICAqLworI2RlZmluZSBJTkFERFJfVU5TUEVDX0dST1VQCSgoaW5fYWRkcl90KSAweGUwMDAwMDAwKSAvKiAyMjQuMC4wLjAgKi8KKyNkZWZpbmUgSU5BRERSX0FMTEhPU1RTX0dST1VQCSgoaW5fYWRkcl90KSAweGUwMDAwMDAxKSAvKiAyMjQuMC4wLjEgKi8KKyNkZWZpbmUgSU5BRERSX0FMTFJUUlNfR1JPVVAgICAgKChpbl9hZGRyX3QpIDB4ZTAwMDAwMDIpIC8qIDIyNC4wLjAuMiAqLworI2RlZmluZSBJTkFERFJfTUFYX0xPQ0FMX0dST1VQICAoKGluX2FkZHJfdCkgMHhlMDAwMDBmZikgLyogMjI0LjAuMC4yNTUgKi8KKworCisvKiBJUHY2IGFkZHJlc3MgKi8KK3N0cnVjdCBpbjZfYWRkcgorICB7CisgICAgdW5pb24KKyAgICAgIHsKKwl1aW50OF90CV9fdTZfYWRkcjhbMTZdOworI2lmIGRlZmluZWQgX19VU0VfTUlTQyB8fCBkZWZpbmVkIF9fVVNFX0dOVQorCXVpbnQxNl90IF9fdTZfYWRkcjE2WzhdOworCXVpbnQzMl90IF9fdTZfYWRkcjMyWzRdOworI2VuZGlmCisgICAgICB9IF9faW42X3U7CisjZGVmaW5lIHM2X2FkZHIJCQlfX2luNl91Ll9fdTZfYWRkcjgKKyNpZiBkZWZpbmVkIF9fVVNFX01JU0MgfHwgZGVmaW5lZCBfX1VTRV9HTlUKKyMgZGVmaW5lIHM2X2FkZHIxNgkJX19pbjZfdS5fX3U2X2FkZHIxNgorIyBkZWZpbmUgczZfYWRkcjMyCQlfX2luNl91Ll9fdTZfYWRkcjMyCisjZW5kaWYKKyAgfTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2FueTsgICAgICAgIC8qIDo6ICovCitleHRlcm4gY29uc3Qgc3RydWN0IGluNl9hZGRyIGluNmFkZHJfbG9vcGJhY2s7ICAgLyogOjoxICovCisjZGVmaW5lIElONkFERFJfQU5ZX0lOSVQgeyB7IHsgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCB9IH0gfQorI2RlZmluZSBJTjZBRERSX0xPT1BCQUNLX0lOSVQgeyB7IHsgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSB9IH0gfQorCisjZGVmaW5lIElORVRfQUREUlNUUkxFTiAxNgorI2RlZmluZSBJTkVUNl9BRERSU1RSTEVOIDQ2CisKKworLyogU3RydWN0dXJlIGRlc2NyaWJpbmcgYW4gSW50ZXJuZXQgc29ja2V0IGFkZHJlc3MuICAqLworc3RydWN0IHNvY2thZGRyX2luCisgIHsKKyAgICBfX1NPQ0tBRERSX0NPTU1PTiAoc2luXyk7CisgICAgaW5fcG9ydF90IHNpbl9wb3J0OwkJCS8qIFBvcnQgbnVtYmVyLiAgKi8KKyAgICBzdHJ1Y3QgaW5fYWRkciBzaW5fYWRkcjsJCS8qIEludGVybmV0IGFkZHJlc3MuICAqLworCisgICAgLyogUGFkIHRvIHNpemUgb2YgYHN0cnVjdCBzb2NrYWRkcicuICAqLworICAgIHVuc2lnbmVkIGNoYXIgc2luX3plcm9bc2l6ZW9mIChzdHJ1Y3Qgc29ja2FkZHIpIC0KKwkJCSAgIF9fU09DS0FERFJfQ09NTU9OX1NJWkUgLQorCQkJICAgc2l6ZW9mIChpbl9wb3J0X3QpIC0KKwkJCSAgIHNpemVvZiAoc3RydWN0IGluX2FkZHIpXTsKKyAgfTsKKworLyogRGl0dG8sIGZvciBJUHY2LiAgKi8KK3N0cnVjdCBzb2NrYWRkcl9pbjYKKyAgeworICAgIF9fU09DS0FERFJfQ09NTU9OIChzaW42Xyk7CisgICAgaW5fcG9ydF90IHNpbjZfcG9ydDsJLyogVHJhbnNwb3J0IGxheWVyIHBvcnQgIyAqLworICAgIHVpbnQzMl90IHNpbjZfZmxvd2luZm87CS8qIElQdjYgZmxvdyBpbmZvcm1hdGlvbiAqLworICAgIHN0cnVjdCBpbjZfYWRkciBzaW42X2FkZHI7CS8qIElQdjYgYWRkcmVzcyAqLworICAgIHVpbnQzMl90IHNpbjZfc2NvcGVfaWQ7CS8qIElQdjYgc2NvcGUtaWQgKi8KKyAgfTsKKworCisjaWYgZGVmaW5lZCBfX1VTRV9NSVNDIHx8IGRlZmluZWQgX19VU0VfR05VCisvKiBJUHY0IG11bHRpY2FzdCByZXF1ZXN0LiAgKi8KK3N0cnVjdCBpcF9tcmVxCisgIHsKKyAgICAvKiBJUCBtdWx0aWNhc3QgYWRkcmVzcyBvZiBncm91cC4gICovCisgICAgc3RydWN0IGluX2FkZHIgaW1yX211bHRpYWRkcjsKKworICAgIC8qIExvY2FsIElQIGFkZHJlc3Mgb2YgaW50ZXJmYWNlLiAgKi8KKyAgICBzdHJ1Y3QgaW5fYWRkciBpbXJfaW50ZXJmYWNlOworICB9OworCitzdHJ1Y3QgaXBfbXJlcV9zb3VyY2UKKyAgeworICAgIC8qIElQIG11bHRpY2FzdCBhZGRyZXNzIG9mIGdyb3VwLiAgKi8KKyAgICBzdHJ1Y3QgaW5fYWRkciBpbXJfbXVsdGlhZGRyOworCisgICAgLyogSVAgYWRkcmVzcyBvZiBzb3VyY2UuICAqLworICAgIHN0cnVjdCBpbl9hZGRyIGltcl9pbnRlcmZhY2U7CisKKyAgICAvKiBJUCBhZGRyZXNzIG9mIGludGVyZmFjZS4gICovCisgICAgc3RydWN0IGluX2FkZHIgaW1yX3NvdXJjZWFkZHI7CisgIH07CisjZW5kaWYKKworCisvKiBMaWtld2lzZSwgZm9yIElQdjYuICAqLworc3RydWN0IGlwdjZfbXJlcQorICB7CisgICAgLyogSVB2NiBtdWx0aWNhc3QgYWRkcmVzcyBvZiBncm91cCAqLworICAgIHN0cnVjdCBpbjZfYWRkciBpcHY2bXJfbXVsdGlhZGRyOworCisgICAgLyogbG9jYWwgaW50ZXJmYWNlICovCisgICAgdW5zaWduZWQgaW50IGlwdjZtcl9pbnRlcmZhY2U7CisgIH07CisKKworI2lmIGRlZmluZWQgX19VU0VfTUlTQyB8fCBkZWZpbmVkIF9fVVNFX0dOVQorLyogTXVsdGljYXN0IGdyb3VwIHJlcXVlc3QuICAqLworc3RydWN0IGdyb3VwX3JlcQorICB7CisgICAgLyogSW50ZXJmYWNlIGluZGV4LiAgKi8KKyAgICB1aW50MzJfdCBncl9pbnRlcmZhY2U7CisKKyAgICAvKiBHcm91cCBhZGRyZXNzLiAgKi8KKyAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBncl9ncm91cDsKKyAgfTsKKworc3RydWN0IGdyb3VwX3NvdXJjZV9yZXEKKyAgeworICAgIC8qIEludGVyZmFjZSBpbmRleC4gICovCisgICAgdWludDMyX3QgZ3NyX2ludGVyZmFjZTsKKworICAgIC8qIEdyb3VwIGFkZHJlc3MuICAqLworICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGdzcl9ncm91cDsKKworICAgIC8qIFNvdXJjZSBhZGRyZXNzLiAgKi8KKyAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBnc3Jfc291cmNlOworICB9OworCisKKy8qIEZ1bGwtc3RhdGUgZmlsdGVyIG9wZXJhdGlvbnMuICAqLworc3RydWN0IGlwX21zZmlsdGVyCisgIHsKKyAgICAvKiBJUCBtdWx0aWNhc3QgYWRkcmVzcyBvZiBncm91cC4gICovCisgICAgc3RydWN0IGluX2FkZHIgaW1zZl9tdWx0aWFkZHI7CisKKyAgICAvKiBMb2NhbCBJUCBhZGRyZXNzIG9mIGludGVyZmFjZS4gICovCisgICAgc3RydWN0IGluX2FkZHIgaW1zZl9pbnRlcmZhY2U7CisKKyAgICAvKiBGaWx0ZXIgbW9kZS4gICovCisgICAgdWludDMyX3QgaW1zZl9mbW9kZTsKKworICAgIC8qIE51bWJlciBvZiBzb3VyY2UgYWRkcmVzc2VzLiAgKi8KKyAgICB1aW50MzJfdCBpbXNmX251bXNyYzsKKyAgICAvKiBTb3VyY2UgYWRkcmVzc2VzLiAgKi8KKyAgICBzdHJ1Y3QgaW5fYWRkciBpbXNmX3NsaXN0WzFdOworICB9OworCisjZGVmaW5lIElQX01TRklMVEVSX1NJWkUobnVtc3JjKSAoc2l6ZW9mIChzdHJ1Y3QgaXBfbXNmaWx0ZXIpIFwKKwkJCQkgIC0gc2l6ZW9mIChzdHJ1Y3QgaW5fYWRkcikJCSAgICAgIFwKKwkJCQkgICsgKG51bXNyYykgKiBzaXplb2YgKHN0cnVjdCBpbl9hZGRyKSkKKworc3RydWN0IGdyb3VwX2ZpbHRlcgorICB7CisgICAgLyogSW50ZXJmYWNlIGluZGV4LiAgKi8KKyAgICB1aW50MzJfdCBnZl9pbnRlcmZhY2U7CisKKyAgICAvKiBHcm91cCBhZGRyZXNzLiAgKi8KKyAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBnZl9ncm91cDsKKworICAgIC8qIEZpbHRlciBtb2RlLiAgKi8KKyAgICB1aW50MzJfdCBnZl9mbW9kZTsKKworICAgIC8qIE51bWJlciBvZiBzb3VyY2UgYWRkcmVzc2VzLiAgKi8KKyAgICB1aW50MzJfdCBnZl9udW1zcmM7CisgICAgLyogU291cmNlIGFkZHJlc3Nlcy4gICovCisgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgZ2Zfc2xpc3RbMV07Cit9OworCisjZGVmaW5lIEdST1VQX0ZJTFRFUl9TSVpFKG51bXNyYykgKHNpemVvZiAoc3RydWN0IGdyb3VwX2ZpbHRlcikgXAorCQkJCSAgIC0gc2l6ZW9mIChzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSkJICAgICAgXAorCQkJCSAgICsgKChudW1zcmMpCQkJCSAgICAgIFwKKwkJCQkgICAgICAqIHNpemVvZiAoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UpKSkKKyNlbmRpZgorCisKKy8qIEdldCBzeXN0ZW0tc3BlY2lmaWMgZGVmaW5pdGlvbnMuICAqLworI2luY2x1ZGUgPGJpdHMvaW4uaD4KKworLyogRnVuY3Rpb25zIHRvIGNvbnZlcnQgYmV0d2VlbiBob3N0IGFuZCBuZXR3b3JrIGJ5dGUgb3JkZXIuCisKKyAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIG5vcm1hbGx5IHRha2UgYHVuc2lnbmVkIGxvbmcgaW50JyBvcgorICAgYHVuc2lnbmVkIHNob3J0IGludCcgdmFsdWVzIGFzIGFyZ3VtZW50cyBhbmQgYWxzbyByZXR1cm4gdGhlbS4gIEJ1dAorICAgdGhpcyB3YXMgYSBzaG9ydC1zaWdodGVkIGRlY2lzaW9uIHNpbmNlIG9uIGRpZmZlcmVudCBzeXN0ZW1zIHRoZSB0eXBlcworICAgbWF5IGhhdmUgZGlmZmVyZW50IHJlcHJlc2VudGF0aW9ucyBidXQgdGhlIHZhbHVlcyBhcmUgYWx3YXlzIHRoZSBzYW1lLiAgKi8KKworZXh0ZXJuIHVpbnQzMl90IG50b2hsICh1aW50MzJfdCBfX25ldGxvbmcpIF9fVEhST1cgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOworZXh0ZXJuIHVpbnQxNl90IG50b2hzICh1aW50MTZfdCBfX25ldHNob3J0KQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKK2V4dGVybiB1aW50MzJfdCBodG9ubCAodWludDMyX3QgX19ob3N0bG9uZykKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CitleHRlcm4gdWludDE2X3QgaHRvbnMgKHVpbnQxNl90IF9faG9zdHNob3J0KQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKKworI2luY2x1ZGUgPGVuZGlhbi5oPgorCisvKiBHZXQgbWFjaGluZSBkZXBlbmRlbnQgb3B0aW1pemVkIHZlcnNpb25zIG9mIGJ5dGUgc3dhcHBpbmcgZnVuY3Rpb25zLiAgKi8KKyNpbmNsdWRlIDxiaXRzL2J5dGVzd2FwLmg+CisKKyNpZmRlZiBfX09QVElNSVpFX18KKy8qIFdlIGNhbiBvcHRpbWl6ZSBjYWxscyB0byB0aGUgY29udmVyc2lvbiBmdW5jdGlvbnMuICBFaXRoZXIgbm90aGluZyBoYXMKKyAgIHRvIGJlIGRvbmUgb3Igd2UgYXJlIHVzaW5nIGRpcmVjdGx5IHRoZSBieXRlLXN3YXBwaW5nIGZ1bmN0aW9ucyB3aGljaAorICAgb2Z0ZW4gY2FuIGJlIGlubGluZWQuICAqLworIyBpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCisvKiBUaGUgaG9zdCBieXRlIG9yZGVyIGlzIHRoZSBzYW1lIGFzIG5ldHdvcmsgYnl0ZSBvcmRlciwKKyAgIHNvIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWxsIGp1c3QgaWRlbnRpdHkuICAqLworIyBkZWZpbmUgbnRvaGwoeCkJKHgpCisjIGRlZmluZSBudG9ocyh4KQkoeCkKKyMgZGVmaW5lIGh0b25sKHgpCSh4KQorIyBkZWZpbmUgaHRvbnMoeCkJKHgpCisjIGVsc2UKKyMgIGlmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKyMgICBkZWZpbmUgbnRvaGwoeCkJX19ic3dhcF8zMiAoeCkKKyMgICBkZWZpbmUgbnRvaHMoeCkJX19ic3dhcF8xNiAoeCkKKyMgICBkZWZpbmUgaHRvbmwoeCkJX19ic3dhcF8zMiAoeCkKKyMgICBkZWZpbmUgaHRvbnMoeCkJX19ic3dhcF8xNiAoeCkKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBJTjZfSVNfQUREUl9VTlNQRUNJRklFRChhKSBcCisJKCgoX19jb25zdCB1aW50MzJfdCAqKSAoYSkpWzBdID09IDAJCQkJICAgICAgXAorCSAmJiAoKF9fY29uc3QgdWludDMyX3QgKikgKGEpKVsxXSA9PSAwCQkJCSAgICAgIFwKKwkgJiYgKChfX2NvbnN0IHVpbnQzMl90ICopIChhKSlbMl0gPT0gMAkJCQkgICAgICBcCisJICYmICgoX19jb25zdCB1aW50MzJfdCAqKSAoYSkpWzNdID09IDApCisKKyNkZWZpbmUgSU42X0lTX0FERFJfTE9PUEJBQ0soYSkgXAorCSgoKF9fY29uc3QgdWludDMyX3QgKikgKGEpKVswXSA9PSAwCQkJCSAgICAgIFwKKwkgJiYgKChfX2NvbnN0IHVpbnQzMl90ICopIChhKSlbMV0gPT0gMAkJCQkgICAgICBcCisJICYmICgoX19jb25zdCB1aW50MzJfdCAqKSAoYSkpWzJdID09IDAJCQkJICAgICAgXAorCSAmJiAoKF9fY29uc3QgdWludDMyX3QgKikgKGEpKVszXSA9PSBodG9ubCAoMSkpCisKKyNkZWZpbmUgSU42X0lTX0FERFJfTVVMVElDQVNUKGEpICgoKF9fY29uc3QgdWludDhfdCAqKSAoYSkpWzBdID09IDB4ZmYpCisKKyNkZWZpbmUgSU42X0lTX0FERFJfTElOS0xPQ0FMKGEpIFwKKwkoKCgoX19jb25zdCB1aW50MzJfdCAqKSAoYSkpWzBdICYgaHRvbmwgKDB4ZmZjMDAwMDApKQkJICAgICAgXAorCSA9PSBodG9ubCAoMHhmZTgwMDAwMCkpCisKKyNkZWZpbmUgSU42X0lTX0FERFJfU0lURUxPQ0FMKGEpIFwKKwkoKCgoX19jb25zdCB1aW50MzJfdCAqKSAoYSkpWzBdICYgaHRvbmwgKDB4ZmZjMDAwMDApKQkJICAgICAgXAorCSA9PSBodG9ubCAoMHhmZWMwMDAwMCkpCisKKyNkZWZpbmUgSU42X0lTX0FERFJfVjRNQVBQRUQoYSkgXAorCSgoKChfX2NvbnN0IHVpbnQzMl90ICopIChhKSlbMF0gPT0gMCkJCQkJICAgICAgXAorCSAmJiAoKChfX2NvbnN0IHVpbnQzMl90ICopIChhKSlbMV0gPT0gMCkJCQkgICAgICBcCisJICYmICgoKF9fY29uc3QgdWludDMyX3QgKikgKGEpKVsyXSA9PSBodG9ubCAoMHhmZmZmKSkpCisKKyNkZWZpbmUgSU42X0lTX0FERFJfVjRDT01QQVQoYSkgXAorCSgoKChfX2NvbnN0IHVpbnQzMl90ICopIChhKSlbMF0gPT0gMCkJCQkJICAgICAgXAorCSAmJiAoKChfX2NvbnN0IHVpbnQzMl90ICopIChhKSlbMV0gPT0gMCkJCQkgICAgICBcCisJICYmICgoKF9fY29uc3QgdWludDMyX3QgKikgKGEpKVsyXSA9PSAwKQkJCSAgICAgIFwKKwkgJiYgKG50b2hsICgoKF9fY29uc3QgdWludDMyX3QgKikgKGEpKVszXSkgPiAxKSkKKworI2RlZmluZSBJTjZfQVJFX0FERFJfRVFVQUwoYSxiKSBcCisJKCgoKF9fY29uc3QgdWludDMyX3QgKikgKGEpKVswXSA9PSAoKF9fY29uc3QgdWludDMyX3QgKikgKGIpKVswXSkgICAgIFwKKwkgJiYgKCgoX19jb25zdCB1aW50MzJfdCAqKSAoYSkpWzFdID09ICgoX19jb25zdCB1aW50MzJfdCAqKSAoYikpWzFdKSAgXAorCSAmJiAoKChfX2NvbnN0IHVpbnQzMl90ICopIChhKSlbMl0gPT0gKChfX2NvbnN0IHVpbnQzMl90ICopIChiKSlbMl0pICBcCisJICYmICgoKF9fY29uc3QgdWludDMyX3QgKikgKGEpKVszXSA9PSAoKF9fY29uc3QgdWludDMyX3QgKikgKGIpKVszXSkpCisKKyNpZiBkZWZpbmVkIF9fVVNFX01JU0MgfHwgZGVmaW5lZCBfX1VTRV9HTlUKKy8qIEJpbmQgc29ja2V0IHRvIGEgcHJpdmlsZWdlZCBJUCBwb3J0LiAgKi8KK2V4dGVybiBpbnQgYmluZHJlc3Zwb3J0IChpbnQgX19zb2NrZmQsIHN0cnVjdCBzb2NrYWRkcl9pbiAqX19zb2NrX2luKSBfX1RIUk9XOworCisvKiBUaGUgSVB2NiB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24uICAqLworZXh0ZXJuIGludCBiaW5kcmVzdnBvcnQ2IChpbnQgX19zb2NrZmQsIHN0cnVjdCBzb2NrYWRkcl9pbjYgKl9fc29ja19pbikKKyAgICAgX19USFJPVzsKKyNlbmRpZgorCisKKyNkZWZpbmUgSU42X0lTX0FERFJfTUNfTk9ERUxPQ0FMKGEpIFwKKwkoSU42X0lTX0FERFJfTVVMVElDQVNUKGEpCQkJCQkgICAgICBcCisJICYmICgoKChfX2NvbnN0IHVpbnQ4X3QgKikgKGEpKVsxXSAmIDB4ZikgPT0gMHgxKSkKKworI2RlZmluZSBJTjZfSVNfQUREUl9NQ19MSU5LTE9DQUwoYSkgXAorCShJTjZfSVNfQUREUl9NVUxUSUNBU1QoYSkJCQkJCSAgICAgIFwKKwkgJiYgKCgoKF9fY29uc3QgdWludDhfdCAqKSAoYSkpWzFdICYgMHhmKSA9PSAweDIpKQorCisjZGVmaW5lIElONl9JU19BRERSX01DX1NJVEVMT0NBTChhKSBcCisJKElONl9JU19BRERSX01VTFRJQ0FTVChhKQkJCQkJICAgICAgXAorCSAmJiAoKCgoX19jb25zdCB1aW50OF90ICopIChhKSlbMV0gJiAweGYpID09IDB4NSkpCisKKyNkZWZpbmUgSU42X0lTX0FERFJfTUNfT1JHTE9DQUwoYSkgXAorCShJTjZfSVNfQUREUl9NVUxUSUNBU1QoYSkJCQkJCSAgICAgIFwKKwkgJiYgKCgoKF9fY29uc3QgdWludDhfdCAqKSAoYSkpWzFdICYgMHhmKSA9PSAweDgpKQorCisjZGVmaW5lIElONl9JU19BRERSX01DX0dMT0JBTChhKSBcCisJKElONl9JU19BRERSX01VTFRJQ0FTVChhKQkJCQkJICAgICAgXAorCSAmJiAoKCgoX19jb25zdCB1aW50OF90ICopIChhKSlbMV0gJiAweGYpID09IDB4ZSkpCisKKworI2lmZGVmIF9fVVNFX0dOVQorLyogSVB2NiBwYWNrZXQgaW5mb3JtYXRpb24uICAqLworc3RydWN0IGluNl9wa3RpbmZvCisgIHsKKyAgICBzdHJ1Y3QgaW42X2FkZHIgaXBpNl9hZGRyOwkvKiBzcmMvZHN0IElQdjYgYWRkcmVzcyAqLworICAgIHVuc2lnbmVkIGludCBpcGk2X2lmaW5kZXg7CS8qIHNlbmQvcmVjdiBpbnRlcmZhY2UgaW5kZXggKi8KKyAgfTsKKworLyogSVB2NiBNVFUgaW5mb3JtYXRpb24uICAqLworc3RydWN0IGlwNl9tdHVpbmZvCisgIHsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGlwNm1fYWRkcjsgLyogZHN0IGFkZHJlc3MgaW5jbHVkaW5nIHpvbmUgSUQgKi8KKyAgICB1aW50MzJfdCBpcDZtX210dTsJCSAgIC8qIHBhdGggTVRVIGluIGhvc3QgYnl0ZSBvcmRlciAqLworICB9OworCisKKy8qIE9ic29sZXRlIGhvcC1ieS1ob3AgYW5kIERlc3RpbmF0aW9uIE9wdGlvbnMgUHJvY2Vzc2luZyAoUkZDIDIyOTIpLiAgKi8KK2V4dGVybiBpbnQgaW5ldDZfb3B0aW9uX3NwYWNlIChpbnQgX19uYnl0ZXMpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfZGVwcmVjYXRlZF9fOworZXh0ZXJuIGludCBpbmV0Nl9vcHRpb25faW5pdCAodm9pZCAqX19icCwgc3RydWN0IGNtc2doZHIgKipfX2Ntc2dwLAorCQkJICAgICAgaW50IF9fdHlwZSkgX19USFJPVyBfX2F0dHJpYnV0ZV9kZXByZWNhdGVkX187CitleHRlcm4gaW50IGluZXQ2X29wdGlvbl9hcHBlbmQgKHN0cnVjdCBjbXNnaGRyICpfX2Ntc2csCisJCQkJX19jb25zdCB1aW50OF90ICpfX3R5cGVwLCBpbnQgX19tdWx0eCwKKwkJCQlpbnQgX19wbHVzeSkgX19USFJPVyBfX2F0dHJpYnV0ZV9kZXByZWNhdGVkX187CitleHRlcm4gdWludDhfdCAqaW5ldDZfb3B0aW9uX2FsbG9jIChzdHJ1Y3QgY21zZ2hkciAqX19jbXNnLCBpbnQgX19kYXRhbGVuLAorCQkJCSAgICBpbnQgX19tdWx0eCwgaW50IF9fcGx1c3kpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfZGVwcmVjYXRlZF9fOworZXh0ZXJuIGludCBpbmV0Nl9vcHRpb25fbmV4dCAoX19jb25zdCBzdHJ1Y3QgY21zZ2hkciAqX19jbXNnLAorCQkJICAgICAgdWludDhfdCAqKl9fdHB0cnApCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfZGVwcmVjYXRlZF9fOworZXh0ZXJuIGludCBpbmV0Nl9vcHRpb25fZmluZCAoX19jb25zdCBzdHJ1Y3QgY21zZ2hkciAqX19jbXNnLAorCQkJICAgICAgdWludDhfdCAqKl9fdHB0cnAsIGludCBfX3R5cGUpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfZGVwcmVjYXRlZF9fOworCisKKy8qIEhvcC1ieS1Ib3AgYW5kIERlc3RpbmF0aW9uIE9wdGlvbnMgUHJvY2Vzc2luZyAoUkZDIDM1NDIpLiAgKi8KK2V4dGVybiBpbnQgaW5ldDZfb3B0X2luaXQgKHZvaWQgKl9fZXh0YnVmLCBzb2NrbGVuX3QgX19leHRsZW4pIF9fVEhST1c7CitleHRlcm4gaW50IGluZXQ2X29wdF9hcHBlbmQgKHZvaWQgKl9fZXh0YnVmLCBzb2NrbGVuX3QgX19leHRsZW4sIGludCBfX29mZnNldCwKKwkJCSAgICAgdWludDhfdCBfX3R5cGUsIHNvY2tsZW5fdCBfX2xlbiwgdWludDhfdCBfX2FsaWduLAorCQkJICAgICB2b2lkICoqX19kYXRhYnVmcCkgX19USFJPVzsKK2V4dGVybiBpbnQgaW5ldDZfb3B0X2ZpbmlzaCAodm9pZCAqX19leHRidWYsIHNvY2tsZW5fdCBfX2V4dGxlbiwgaW50IF9fb2Zmc2V0KQorICAgICBfX1RIUk9XOworZXh0ZXJuIGludCBpbmV0Nl9vcHRfc2V0X3ZhbCAodm9pZCAqX19kYXRhYnVmLCBpbnQgX19vZmZzZXQsIHZvaWQgKl9fdmFsLAorCQkJICAgICAgc29ja2xlbl90IF9fdmFsbGVuKSBfX1RIUk9XOworZXh0ZXJuIGludCBpbmV0Nl9vcHRfbmV4dCAodm9pZCAqX19leHRidWYsIHNvY2tsZW5fdCBfX2V4dGxlbiwgaW50IF9fb2Zmc2V0LAorCQkJICAgdWludDhfdCAqX190eXBlcCwgc29ja2xlbl90ICpfX2xlbnAsCisJCQkgICB2b2lkICoqX19kYXRhYnVmcCkgX19USFJPVzsKK2V4dGVybiBpbnQgaW5ldDZfb3B0X2ZpbmQgKHZvaWQgKl9fZXh0YnVmLCBzb2NrbGVuX3QgX19leHRsZW4sIGludCBfX29mZnNldCwKKwkJCSAgIHVpbnQ4X3QgX190eXBlLCBzb2NrbGVuX3QgKl9fbGVucCwKKwkJCSAgIHZvaWQgKipfX2RhdGFidWZwKSBfX1RIUk9XOworZXh0ZXJuIGludCBpbmV0Nl9vcHRfZ2V0X3ZhbCAodm9pZCAqX19kYXRhYnVmLCBpbnQgX19vZmZzZXQsIHZvaWQgKl9fdmFsLAorCQkJICAgICAgc29ja2xlbl90IF9fdmFsbGVuKSBfX1RIUk9XOworCisKKy8qIFJvdXRpbmcgSGVhZGVyIE9wdGlvbiAoUkZDIDM1NDIpLiAgKi8KK2V4dGVybiBzb2NrbGVuX3QgaW5ldDZfcnRoX3NwYWNlIChpbnQgX190eXBlLCBpbnQgX19zZWdtZW50cykgX19USFJPVzsKK2V4dGVybiB2b2lkICppbmV0Nl9ydGhfaW5pdCAodm9pZCAqX19icCwgc29ja2xlbl90IF9fYnBfbGVuLCBpbnQgX190eXBlLAorCQkJICAgICBpbnQgX19zZWdtZW50cykgX19USFJPVzsKK2V4dGVybiBpbnQgaW5ldDZfcnRoX2FkZCAodm9pZCAqX19icCwgX19jb25zdCBzdHJ1Y3QgaW42X2FkZHIgKl9fYWRkcikgX19USFJPVzsKK2V4dGVybiBpbnQgaW5ldDZfcnRoX3JldmVyc2UgKF9fY29uc3Qgdm9pZCAqX19pbiwgdm9pZCAqX19vdXQpIF9fVEhST1c7CitleHRlcm4gaW50IGluZXQ2X3J0aF9zZWdtZW50cyAoX19jb25zdCB2b2lkICpfX2JwKSBfX1RIUk9XOworZXh0ZXJuIHN0cnVjdCBpbjZfYWRkciAqaW5ldDZfcnRoX2dldGFkZHIgKF9fY29uc3Qgdm9pZCAqX19icCwgaW50IF9faW5kZXgpCisgICAgIF9fVEhST1c7CisKKworLyogTXVsdGljYXN0IHNvdXJjZSBmaWx0ZXIgc3VwcG9ydC4gICovCisKKy8qIEdldCBJUHY0IHNvdXJjZSBmaWx0ZXIuICAqLworZXh0ZXJuIGludCBnZXRpcHY0c291cmNlZmlsdGVyIChpbnQgX19zLCBzdHJ1Y3QgaW5fYWRkciBfX2ludGVyZmFjZV9hZGRyLAorCQkJCXN0cnVjdCBpbl9hZGRyIF9fZ3JvdXAsIHVpbnQzMl90ICpfX2Ztb2RlLAorCQkJCXVpbnQzMl90ICpfX251bXNyYywgc3RydWN0IGluX2FkZHIgKl9fc2xpc3QpCisgICAgIF9fVEhST1c7CisKKy8qIFNldCBJUHY0IHNvdXJjZSBmaWx0ZXIuICAqLworZXh0ZXJuIGludCBzZXRpcHY0c291cmNlZmlsdGVyIChpbnQgX19zLCBzdHJ1Y3QgaW5fYWRkciBfX2ludGVyZmFjZV9hZGRyLAorCQkJCXN0cnVjdCBpbl9hZGRyIF9fZ3JvdXAsIHVpbnQzMl90IF9fZm1vZGUsCisJCQkJdWludDMyX3QgX19udW1zcmMsCisJCQkJX19jb25zdCBzdHJ1Y3QgaW5fYWRkciAqX19zbGlzdCkKKyAgICAgX19USFJPVzsKKworCisvKiBHZXQgc291cmNlIGZpbHRlci4gICovCitleHRlcm4gaW50IGdldHNvdXJjZWZpbHRlciAoaW50IF9fcywgdWludDMyX3QgX19pbnRlcmZhY2VfYWRkciwKKwkJCSAgICBfX2NvbnN0IHN0cnVjdCBzb2NrYWRkciAqX19ncm91cCwKKwkJCSAgICBzb2NrbGVuX3QgX19ncm91cGxlbiwgdWludDMyX3QgKl9fZm1vZGUsCisJCQkgICAgdWludDMyX3QgKl9fbnVtc3JjLAorCQkJICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICpfX3NsaXN0KSBfX1RIUk9XOworCisvKiBTZXQgc291cmNlIGZpbHRlci4gICovCitleHRlcm4gaW50IHNldHNvdXJjZWZpbHRlciAoaW50IF9fcywgdWludDMyX3QgX19pbnRlcmZhY2VfYWRkciwKKwkJCSAgICBfX2NvbnN0IHN0cnVjdCBzb2NrYWRkciAqX19ncm91cCwKKwkJCSAgICBzb2NrbGVuX3QgX19ncm91cGxlbiwgdWludDMyX3QgX19mbW9kZSwKKwkJCSAgICB1aW50MzJfdCBfX251bXNyYywKKwkJCSAgICBfX2NvbnN0IHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICpfX3NsaXN0KSBfX1RIUk9XOworI2VuZGlmCS8qIHVzZSBHTlUgKi8KKworX19FTkRfREVDTFMKKworI2VuZGlmCS8qIG5ldGluZXQvaW4uaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldGluZXQvaW5fc3lzdG0uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXRpbmV0L2luX3N5c3RtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFhMDhlMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXRpbmV0L2luX3N5c3RtLmgKQEAgLTAsMCArMSw0MSBAQAorLyogU3lzdGVtIHNwZWNpZmljIHR5cGUgZGVmaW5pdGlvbnMgZm9yIG5ldHdvcmtpbmcgY29kZS4KKyAgIENvcHlyaWdodCAoQykgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfTkVUSU5FVF9JTl9TWVNUTV9ICisjZGVmaW5lIF9ORVRJTkVUX0lOX1NZU1RNX0ggMQorCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK19fQkVHSU5fREVDTFMKKworLyoKKyAqIE5ldHdvcmsgb3JkZXIgdmVyc2lvbnMgb2YgdmFyaW91cyBkYXRhIHR5cGVzLiBVbmZvcnR1bmF0ZWx5LCBCU0QKKyAqIGFzc3VtZXMgc3BlY2lmaWMgc2l6ZXMgZm9yIHNob3J0cyAoMTYgYml0KSBhbmQgbG9uZ3MgKDMyIGJpdCkgd2hpY2gKKyAqIGRvbid0IGhvbGQgaW4gZ2VuZXJhbC4gQXMgYSBjb25zZXF1ZW5jZSwgdGhlIG5ldHdvcmsgb3JkZXIgdmVyc2lvbnMKKyAqIG1heSBub3QgcmVmbGVjdCB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIG5hdGl2ZSBkYXRhIHR5cGVzLgorICovCisKK3R5cGVkZWYgdV9pbnQxNl90IG5fc2hvcnQ7ICAgICAgLyogc2hvcnQgYXMgcmVjZWl2ZWQgZnJvbSB0aGUgbmV0ICovCit0eXBlZGVmIHVfaW50MzJfdCBuX2xvbmc7ICAgICAgIC8qIGxvbmcgYXMgcmVjZWl2ZWQgZnJvbSB0aGUgbmV0ICAqLwordHlwZWRlZiB1X2ludDMyX3Qgbl90aW1lOyAgICAgICAvKiBtcyBzaW5jZSAwMDowMCBHTVQsIGJ5dGUgcmV2ICAgKi8KKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIG5ldGluZXQvaW5fc3lzdG0uaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldGluZXQvaXAuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXRpbmV0L2lwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM5MTQ0MAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXRpbmV0L2lwLmgKQEAgLTAsMCArMSwyNDkgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5MSw5Miw5Myw5NSw5Niw5Nyw5OCw5OSwyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9fTkVUSU5FVF9JUF9ICisjZGVmaW5lIF9fTkVUSU5FVF9JUF9IIDEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisKK19fQkVHSU5fREVDTFMKKworc3RydWN0IHRpbWVzdGFtcAorICB7CisgICAgdV9pbnQ4X3QgbGVuOworICAgIHVfaW50OF90IHB0cjsKKyNpZiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOCisgICAgdW5zaWduZWQgaW50IGZsYWdzOjQ7CisgICAgdW5zaWduZWQgaW50IG92ZXJmbG93OjQ7CisjZWxpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCisgICAgdW5zaWduZWQgaW50IG92ZXJmbG93OjQ7CisgICAgdW5zaWduZWQgaW50IGZsYWdzOjQ7CisjZWxzZQorIyBlcnJvcgkiUGxlYXNlIGZpeCA8Yml0cy9lbmRpYW4uaD4iCisjZW5kaWYKKyAgICB1X2ludDMyX3QgZGF0YVs5XTsKKyAgfTsKKworc3RydWN0IGlwaGRyCisgIHsKKyNpZiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOCisgICAgdW5zaWduZWQgaW50IGlobDo0OworICAgIHVuc2lnbmVkIGludCB2ZXJzaW9uOjQ7CisjZWxpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCisgICAgdW5zaWduZWQgaW50IHZlcnNpb246NDsKKyAgICB1bnNpZ25lZCBpbnQgaWhsOjQ7CisjZWxzZQorIyBlcnJvcgkiUGxlYXNlIGZpeCA8Yml0cy9lbmRpYW4uaD4iCisjZW5kaWYKKyAgICB1X2ludDhfdCB0b3M7CisgICAgdV9pbnQxNl90IHRvdF9sZW47CisgICAgdV9pbnQxNl90IGlkOworICAgIHVfaW50MTZfdCBmcmFnX29mZjsKKyAgICB1X2ludDhfdCB0dGw7CisgICAgdV9pbnQ4X3QgcHJvdG9jb2w7CisgICAgdV9pbnQxNl90IGNoZWNrOworICAgIHVfaW50MzJfdCBzYWRkcjsKKyAgICB1X2ludDMyX3QgZGFkZHI7CisgICAgLypUaGUgb3B0aW9ucyBzdGFydCBoZXJlLiAqLworICB9OworCisjaWZkZWYgX19VU0VfQlNECisvKgorICogQ29weXJpZ2h0IChjKSAxOTgyLCAxOTg2LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKWlwLmgJOC4xIChCZXJrZWxleSkgNi8xMC85MworICovCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgaW50ZXJuZXQgcHJvdG9jb2wgdmVyc2lvbiA0LgorICogUGVyIFJGQyA3OTEsIFNlcHRlbWJlciAxOTgxLgorICovCisKKy8qCisgKiBTdHJ1Y3R1cmUgb2YgYW4gaW50ZXJuZXQgaGVhZGVyLCBuYWtlZCBvZiBvcHRpb25zLgorICovCitzdHJ1Y3QgaXAKKyAgeworI2lmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKyAgICB1bnNpZ25lZCBpbnQgaXBfaGw6NDsJCS8qIGhlYWRlciBsZW5ndGggKi8KKyAgICB1bnNpZ25lZCBpbnQgaXBfdjo0OwkJLyogdmVyc2lvbiAqLworI2VuZGlmCisjaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorICAgIHVuc2lnbmVkIGludCBpcF92OjQ7CQkvKiB2ZXJzaW9uICovCisgICAgdW5zaWduZWQgaW50IGlwX2hsOjQ7CQkvKiBoZWFkZXIgbGVuZ3RoICovCisjZW5kaWYKKyAgICB1X2ludDhfdCBpcF90b3M7CQkJLyogdHlwZSBvZiBzZXJ2aWNlICovCisgICAgdV9zaG9ydCBpcF9sZW47CQkJLyogdG90YWwgbGVuZ3RoICovCisgICAgdV9zaG9ydCBpcF9pZDsJCQkvKiBpZGVudGlmaWNhdGlvbiAqLworICAgIHVfc2hvcnQgaXBfb2ZmOwkJCS8qIGZyYWdtZW50IG9mZnNldCBmaWVsZCAqLworI2RlZmluZQlJUF9SRiAweDgwMDAJCQkvKiByZXNlcnZlZCBmcmFnbWVudCBmbGFnICovCisjZGVmaW5lCUlQX0RGIDB4NDAwMAkJCS8qIGRvbnQgZnJhZ21lbnQgZmxhZyAqLworI2RlZmluZQlJUF9NRiAweDIwMDAJCQkvKiBtb3JlIGZyYWdtZW50cyBmbGFnICovCisjZGVmaW5lCUlQX09GRk1BU0sgMHgxZmZmCQkvKiBtYXNrIGZvciBmcmFnbWVudGluZyBiaXRzICovCisgICAgdV9pbnQ4X3QgaXBfdHRsOwkJCS8qIHRpbWUgdG8gbGl2ZSAqLworICAgIHVfaW50OF90IGlwX3A7CQkJLyogcHJvdG9jb2wgKi8KKyAgICB1X3Nob3J0IGlwX3N1bTsJCQkvKiBjaGVja3N1bSAqLworICAgIHN0cnVjdCBpbl9hZGRyIGlwX3NyYywgaXBfZHN0OwkvKiBzb3VyY2UgYW5kIGRlc3QgYWRkcmVzcyAqLworICB9OworCisvKgorICogVGltZSBzdGFtcCBvcHRpb24gc3RydWN0dXJlLgorICovCitzdHJ1Y3QgaXBfdGltZXN0YW1wCisgIHsKKyAgICB1X2ludDhfdCBpcHRfY29kZTsJCQkvKiBJUE9QVF9UUyAqLworICAgIHVfaW50OF90IGlwdF9sZW47CQkJLyogc2l6ZSBvZiBzdHJ1Y3R1cmUgKHZhcmlhYmxlKSAqLworICAgIHVfaW50OF90IGlwdF9wdHI7CQkJLyogaW5kZXggb2YgY3VycmVudCBlbnRyeSAqLworI2lmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKyAgICB1bnNpZ25lZCBpbnQgaXB0X2ZsZzo0OwkJLyogZmxhZ3MsIHNlZSBiZWxvdyAqLworICAgIHVuc2lnbmVkIGludCBpcHRfb2Zsdzo0OwkJLyogb3ZlcmZsb3cgY291bnRlciAqLworI2VuZGlmCisjaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorICAgIHVuc2lnbmVkIGludCBpcHRfb2Zsdzo0OwkJLyogb3ZlcmZsb3cgY291bnRlciAqLworICAgIHVuc2lnbmVkIGludCBpcHRfZmxnOjQ7CQkvKiBmbGFncywgc2VlIGJlbG93ICovCisjZW5kaWYKKyAgICB1X2ludDMyX3QgZGF0YVs5XTsKKyAgfTsKKyNlbmRpZiAvKiBfX1VTRV9CU0QgKi8KKworI2RlZmluZQlJUFZFUlNJT04JNCAgICAgICAgICAgICAgIC8qIElQIHZlcnNpb24gbnVtYmVyICovCisjZGVmaW5lCUlQX01BWFBBQ0tFVAk2NTUzNQkJLyogbWF4aW11bSBwYWNrZXQgc2l6ZSAqLworCisvKgorICogRGVmaW5pdGlvbnMgZm9yIElQIHR5cGUgb2Ygc2VydmljZSAoaXBfdG9zKQorICovCisjZGVmaW5lCUlQVE9TX1RPU19NQVNLCQkweDFFCisjZGVmaW5lCUlQVE9TX1RPUyh0b3MpCQkoKHRvcykgJiBJUFRPU19UT1NfTUFTSykKKyNkZWZpbmUJSVBUT1NfTE9XREVMQVkJCTB4MTAKKyNkZWZpbmUJSVBUT1NfVEhST1VHSFBVVAkweDA4CisjZGVmaW5lCUlQVE9TX1JFTElBQklMSVRZCTB4MDQKKyNkZWZpbmUJSVBUT1NfTE9XQ09TVAkJMHgwMgorI2RlZmluZQlJUFRPU19NSU5DT1NUCQlJUFRPU19MT1dDT1NUCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgSVAgcHJlY2VkZW5jZSAoYWxzbyBpbiBpcF90b3MpIChob3BlZnVsbHkgdW51c2VkKQorICovCisjZGVmaW5lCUlQVE9TX1BSRUNfTUFTSwkJCTB4ZTAKKyNkZWZpbmUJSVBUT1NfUFJFQyh0b3MpICAgICAgICAgICAgICAgICgodG9zKSAmIElQVE9TX1BSRUNfTUFTSykKKyNkZWZpbmUJSVBUT1NfUFJFQ19ORVRDT05UUk9MCQkweGUwCisjZGVmaW5lCUlQVE9TX1BSRUNfSU5URVJORVRDT05UUk9MCTB4YzAKKyNkZWZpbmUJSVBUT1NfUFJFQ19DUklUSUNfRUNQCQkweGEwCisjZGVmaW5lCUlQVE9TX1BSRUNfRkxBU0hPVkVSUklERQkweDgwCisjZGVmaW5lCUlQVE9TX1BSRUNfRkxBU0gJCTB4NjAKKyNkZWZpbmUJSVBUT1NfUFJFQ19JTU1FRElBVEUJCTB4NDAKKyNkZWZpbmUJSVBUT1NfUFJFQ19QUklPUklUWQkJMHgyMAorI2RlZmluZQlJUFRPU19QUkVDX1JPVVRJTkUJCTB4MDAKKworLyoKKyAqIERlZmluaXRpb25zIGZvciBvcHRpb25zLgorICovCisjZGVmaW5lCUlQT1BUX0NPUFkJCTB4ODAKKyNkZWZpbmUJSVBPUFRfQ0xBU1NfTUFTSwkweDYwCisjZGVmaW5lCUlQT1BUX05VTUJFUl9NQVNLCTB4MWYKKworI2RlZmluZQlJUE9QVF9DT1BJRUQobykJCSgobykgJiBJUE9QVF9DT1BZKQorI2RlZmluZQlJUE9QVF9DTEFTUyhvKQkJKChvKSAmIElQT1BUX0NMQVNTX01BU0spCisjZGVmaW5lCUlQT1BUX05VTUJFUihvKQkJKChvKSAmIElQT1BUX05VTUJFUl9NQVNLKQorCisjZGVmaW5lCUlQT1BUX0NPTlRST0wJCTB4MDAKKyNkZWZpbmUJSVBPUFRfUkVTRVJWRUQxCQkweDIwCisjZGVmaW5lCUlQT1BUX0RFQk1FQVMJCTB4NDAKKyNkZWZpbmUJSVBPUFRfTUVBU1VSRU1FTlQgICAgICAgSVBPUFRfREVCTUVBUworI2RlZmluZQlJUE9QVF9SRVNFUlZFRDIJCTB4NjAKKworI2RlZmluZQlJUE9QVF9FT0wJCTAJCS8qIGVuZCBvZiBvcHRpb24gbGlzdCAqLworI2RlZmluZQlJUE9QVF9FTkQJCUlQT1BUX0VPTAorI2RlZmluZQlJUE9QVF9OT1AJCTEJCS8qIG5vIG9wZXJhdGlvbiAqLworI2RlZmluZQlJUE9QVF9OT09QCQlJUE9QVF9OT1AKKworI2RlZmluZQlJUE9QVF9SUgkJNwkJLyogcmVjb3JkIHBhY2tldCByb3V0ZSAqLworI2RlZmluZQlJUE9QVF9UUwkJNjgJCS8qIHRpbWVzdGFtcCAqLworI2RlZmluZQlJUE9QVF9USU1FU1RBTVAJCUlQT1BUX1RTCisjZGVmaW5lCUlQT1BUX1NFQ1VSSVRZCQkxMzAJCS8qIHByb3ZpZGUgcyxjLGgsdGNjICovCisjZGVmaW5lCUlQT1BUX1NFQwkJSVBPUFRfU0VDVVJJVFkKKyNkZWZpbmUJSVBPUFRfTFNSUgkJMTMxCQkvKiBsb29zZSBzb3VyY2Ugcm91dGUgKi8KKyNkZWZpbmUJSVBPUFRfU0FUSUQJCTEzNgkJLyogc2F0bmV0IGlkICovCisjZGVmaW5lCUlQT1BUX1NJRAkJSVBPUFRfU0FUSUQKKyNkZWZpbmUJSVBPUFRfU1NSUgkJMTM3CQkvKiBzdHJpY3Qgc291cmNlIHJvdXRlICovCisjZGVmaW5lCUlQT1BUX1JBCQkxNDgJCS8qIHJvdXRlciBhbGVydCAqLworCisvKgorICogT2Zmc2V0cyB0byBmaWVsZHMgaW4gb3B0aW9ucyBvdGhlciB0aGFuIEVPTCBhbmQgTk9QLgorICovCisjZGVmaW5lCUlQT1BUX09QVFZBTAkJMAkJLyogb3B0aW9uIElEICovCisjZGVmaW5lCUlQT1BUX09MRU4JCTEJCS8qIG9wdGlvbiBsZW5ndGggKi8KKyNkZWZpbmUJSVBPUFRfT0ZGU0VUCQkyCQkvKiBvZmZzZXQgd2l0aGluIG9wdGlvbiAqLworI2RlZmluZQlJUE9QVF9NSU5PRkYJCTQJCS8qIG1pbiB2YWx1ZSBvZiBhYm92ZSAqLworCisjZGVmaW5lCU1BWF9JUE9QVExFTgkJNDAKKworLyogZmxhZyBiaXRzIGZvciBpcHRfZmxnICovCisjZGVmaW5lCUlQT1BUX1RTX1RTT05MWQkJMAkJLyogdGltZXN0YW1wcyBvbmx5ICovCisjZGVmaW5lCUlQT1BUX1RTX1RTQU5EQUREUgkxCQkvKiB0aW1lc3RhbXBzIGFuZCBhZGRyZXNzZXMgKi8KKyNkZWZpbmUJSVBPUFRfVFNfUFJFU1BFQwkzCQkvKiBzcGVjaWZpZWQgbW9kdWxlcyBvbmx5ICovCisKKy8qIGJpdHMgZm9yIHNlY3VyaXR5IChub3QgYnl0ZSBzd2FwcGVkKSAqLworI2RlZmluZQlJUE9QVF9TRUNVUl9VTkNMQVNTCTB4MDAwMAorI2RlZmluZQlJUE9QVF9TRUNVUl9DT05GSUQJMHhmMTM1CisjZGVmaW5lCUlQT1BUX1NFQ1VSX0VGVE8JMHg3ODlhCisjZGVmaW5lCUlQT1BUX1NFQ1VSX01NTU0JMHhiYzRkCisjZGVmaW5lCUlQT1BUX1NFQ1VSX1JFU1RSCTB4YWYxMworI2RlZmluZQlJUE9QVF9TRUNVUl9TRUNSRVQJMHhkNzg4CisjZGVmaW5lCUlQT1BUX1NFQ1VSX1RPUFNFQ1JFVAkweDZiYzUKKworLyoKKyAqIEludGVybmV0IGltcGxlbWVudGF0aW9uIHBhcmFtZXRlcnMuCisgKi8KKyNkZWZpbmUJTUFYVFRMCQkyNTUJCS8qIG1heGltdW0gdGltZSB0byBsaXZlIChzZWNvbmRzKSAqLworI2RlZmluZQlJUERFRlRUTAk2NAkJLyogZGVmYXVsdCB0dGwsIGZyb20gUkZDIDEzNDAgKi8KKyNkZWZpbmUJSVBGUkFHVFRMCTYwCQkvKiB0aW1lIHRvIGxpdmUgZm9yIGZyYWdzLCBzbG93aHogKi8KKyNkZWZpbmUJSVBUVExERUMJMQkJLyogc3VidHJhY3RlZCB3aGVuIGZvcndhcmRpbmcgKi8KKworI2RlZmluZQlJUF9NU1MJCTU3NgkJLyogZGVmYXVsdCBtYXhpbXVtIHNlZ21lbnQgc2l6ZSAqLworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogbmV0aW5ldC9pcC5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0aW5ldC9pcDYuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXRpbmV0L2lwNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZjJhZjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0aW5ldC9pcDYuaApAQCAtMCwwICsxLDE4OSBAQAorLyogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTcsIDIwMDEsIDIwMDMsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX05FVElORVRfSVA2X0gKKyNkZWZpbmUgX05FVElORVRfSVA2X0ggMQorCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisKK3N0cnVjdCBpcDZfaGRyCisgIHsKKyAgICB1bmlvbgorICAgICAgeworCXN0cnVjdCBpcDZfaGRyY3RsCisJICB7CisJICAgIHVpbnQzMl90IGlwNl91bjFfZmxvdzsgICAvKiA0IGJpdHMgdmVyc2lvbiwgOCBiaXRzIFRDLAorCQkJCQkyMCBiaXRzIGZsb3ctSUQgKi8KKwkgICAgdWludDE2X3QgaXA2X3VuMV9wbGVuOyAgIC8qIHBheWxvYWQgbGVuZ3RoICovCisJICAgIHVpbnQ4X3QgIGlwNl91bjFfbnh0OyAgICAvKiBuZXh0IGhlYWRlciAqLworCSAgICB1aW50OF90ICBpcDZfdW4xX2hsaW07ICAgLyogaG9wIGxpbWl0ICovCisJICB9IGlwNl91bjE7CisJdWludDhfdCBpcDZfdW4yX3ZmYzsgICAgICAgLyogNCBiaXRzIHZlcnNpb24sIHRvcCA0IGJpdHMgdGNsYXNzICovCisgICAgICB9IGlwNl9jdGx1bjsKKyAgICBzdHJ1Y3QgaW42X2FkZHIgaXA2X3NyYzsgICAgICAvKiBzb3VyY2UgYWRkcmVzcyAqLworICAgIHN0cnVjdCBpbjZfYWRkciBpcDZfZHN0OyAgICAgIC8qIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KKyAgfTsKKworI2RlZmluZSBpcDZfdmZjICAgaXA2X2N0bHVuLmlwNl91bjJfdmZjCisjZGVmaW5lIGlwNl9mbG93ICBpcDZfY3RsdW4uaXA2X3VuMS5pcDZfdW4xX2Zsb3cKKyNkZWZpbmUgaXA2X3BsZW4gIGlwNl9jdGx1bi5pcDZfdW4xLmlwNl91bjFfcGxlbgorI2RlZmluZSBpcDZfbnh0ICAgaXA2X2N0bHVuLmlwNl91bjEuaXA2X3VuMV9ueHQKKyNkZWZpbmUgaXA2X2hsaW0gIGlwNl9jdGx1bi5pcDZfdW4xLmlwNl91bjFfaGxpbQorI2RlZmluZSBpcDZfaG9wcyAgaXA2X2N0bHVuLmlwNl91bjEuaXA2X3VuMV9obGltCisKKy8qIEdlbmVyaWMgZXh0ZW5zaW9uIGhlYWRlci4gICovCitzdHJ1Y3QgaXA2X2V4dAorICB7CisgICAgdWludDhfdCAgaXA2ZV9ueHQ7CQkvKiBuZXh0IGhlYWRlci4gICovCisgICAgdWludDhfdCAgaXA2ZV9sZW47CQkvKiBsZW5ndGggaW4gdW5pdHMgb2YgOCBvY3RldHMuICAqLworICB9OworCisvKiBIb3AtYnktSG9wIG9wdGlvbnMgaGVhZGVyLiAgKi8KK3N0cnVjdCBpcDZfaGJoCisgIHsKKyAgICB1aW50OF90ICBpcDZoX254dDsJCS8qIG5leHQgaGVhZGVyLiAgKi8KKyAgICB1aW50OF90ICBpcDZoX2xlbjsJCS8qIGxlbmd0aCBpbiB1bml0cyBvZiA4IG9jdGV0cy4gICovCisgICAgLyogZm9sbG93ZWQgYnkgb3B0aW9ucyAqLworICB9OworCisvKiBEZXN0aW5hdGlvbiBvcHRpb25zIGhlYWRlciAqLworc3RydWN0IGlwNl9kZXN0CisgIHsKKyAgICB1aW50OF90ICBpcDZkX254dDsJCS8qIG5leHQgaGVhZGVyICovCisgICAgdWludDhfdCAgaXA2ZF9sZW47CQkvKiBsZW5ndGggaW4gdW5pdHMgb2YgOCBvY3RldHMgKi8KKyAgICAvKiBmb2xsb3dlZCBieSBvcHRpb25zICovCisgIH07CisKKy8qIFJvdXRpbmcgaGVhZGVyICovCitzdHJ1Y3QgaXA2X3J0aGRyCisgIHsKKyAgICB1aW50OF90ICBpcDZyX254dDsJCS8qIG5leHQgaGVhZGVyICovCisgICAgdWludDhfdCAgaXA2cl9sZW47CQkvKiBsZW5ndGggaW4gdW5pdHMgb2YgOCBvY3RldHMgKi8KKyAgICB1aW50OF90ICBpcDZyX3R5cGU7CQkvKiByb3V0aW5nIHR5cGUgKi8KKyAgICB1aW50OF90ICBpcDZyX3NlZ2xlZnQ7CS8qIHNlZ21lbnRzIGxlZnQgKi8KKyAgICAvKiBmb2xsb3dlZCBieSByb3V0aW5nIHR5cGUgc3BlY2lmaWMgZGF0YSAqLworICB9OworCisvKiBUeXBlIDAgUm91dGluZyBoZWFkZXIgKi8KK3N0cnVjdCBpcDZfcnRoZHIwCisgIHsKKyAgICB1aW50OF90ICBpcDZyMF9ueHQ7CQkvKiBuZXh0IGhlYWRlciAqLworICAgIHVpbnQ4X3QgIGlwNnIwX2xlbjsJCS8qIGxlbmd0aCBpbiB1bml0cyBvZiA4IG9jdGV0cyAqLworICAgIHVpbnQ4X3QgIGlwNnIwX3R5cGU7CS8qIGFsd2F5cyB6ZXJvICovCisgICAgdWludDhfdCAgaXA2cjBfc2VnbGVmdDsJLyogc2VnbWVudHMgbGVmdCAqLworICAgIHVpbnQ4X3QgIGlwNnIwX3Jlc2VydmVkOwkvKiByZXNlcnZlZCBmaWVsZCAqLworICAgIHVpbnQ4X3QgIGlwNnIwX3NsbWFwWzNdOwkvKiBzdHJpY3QvbG9vc2UgYml0IG1hcCAqLworICAgIC8qIGZvbGxvd2VkIGJ5IHVwIHRvIDEyNyBzdHJ1Y3QgaW42X2FkZHIgKi8KKyAgICBzdHJ1Y3QgaW42X2FkZHIgaXA2cjBfYWRkclswXTsKKyAgfTsKKworLyogRnJhZ21lbnQgaGVhZGVyICovCitzdHJ1Y3QgaXA2X2ZyYWcKKyAgeworICAgIHVpbnQ4X3QgICBpcDZmX254dDsJCS8qIG5leHQgaGVhZGVyICovCisgICAgdWludDhfdCAgIGlwNmZfcmVzZXJ2ZWQ7CS8qIHJlc2VydmVkIGZpZWxkICovCisgICAgdWludDE2X3QgIGlwNmZfb2ZmbGc7CS8qIG9mZnNldCwgcmVzZXJ2ZWQsIGFuZCBmbGFnICovCisgICAgdWludDMyX3QgIGlwNmZfaWRlbnQ7CS8qIGlkZW50aWZpY2F0aW9uICovCisgIH07CisKKyNpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KKyMgZGVmaW5lIElQNkZfT0ZGX01BU0sgICAgICAgMHhmZmY4ICAvKiBtYXNrIG91dCBvZmZzZXQgZnJvbSBfb2ZmbGcgKi8KKyMgZGVmaW5lIElQNkZfUkVTRVJWRURfTUFTSyAgMHgwMDA2ICAvKiByZXNlcnZlZCBiaXRzIGluIGlwNmZfb2ZmbGcgKi8KKyMgZGVmaW5lIElQNkZfTU9SRV9GUkFHICAgICAgMHgwMDAxICAvKiBtb3JlLWZyYWdtZW50cyBmbGFnICovCisjZWxzZSAgIC8qIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTiAqLworIyBkZWZpbmUgSVA2Rl9PRkZfTUFTSyAgICAgICAweGY4ZmYgIC8qIG1hc2sgb3V0IG9mZnNldCBmcm9tIF9vZmZsZyAqLworIyBkZWZpbmUgSVA2Rl9SRVNFUlZFRF9NQVNLICAweDA2MDAgIC8qIHJlc2VydmVkIGJpdHMgaW4gaXA2Zl9vZmZsZyAqLworIyBkZWZpbmUgSVA2Rl9NT1JFX0ZSQUcgICAgICAweDAxMDAgIC8qIG1vcmUtZnJhZ21lbnRzIGZsYWcgKi8KKyNlbmRpZgorCisvKiBJUHY2IG9wdGlvbnMgKi8KK3N0cnVjdCBpcDZfb3B0CisgIHsKKyAgICB1aW50OF90ICBpcDZvX3R5cGU7CisgICAgdWludDhfdCAgaXA2b19sZW47CisgIH07CisKKy8qIFRoZSBoaWdoLW9yZGVyIDMgYml0cyBvZiB0aGUgb3B0aW9uIHR5cGUgZGVmaW5lIHRoZSBiZWhhdmlvcgorICogd2hlbiBwcm9jZXNzaW5nIGFuIHVua25vd24gb3B0aW9uIGFuZCB3aGV0aGVyIG9yIG5vdCB0aGUgb3B0aW9uCisgKiBjb250ZW50IGNoYW5nZXMgaW4gZmxpZ2h0LgorICovCisjZGVmaW5lIElQNk9QVF9UWVBFKG8pCQkoKG8pICYgMHhjMCkKKyNkZWZpbmUgSVA2T1BUX1RZUEVfU0tJUAkweDAwCisjZGVmaW5lIElQNk9QVF9UWVBFX0RJU0NBUkQJMHg0MAorI2RlZmluZSBJUDZPUFRfVFlQRV9GT1JDRUlDTVAJMHg4MAorI2RlZmluZSBJUDZPUFRfVFlQRV9JQ01QCTB4YzAKKyNkZWZpbmUgSVA2T1BUX1RZUEVfTVVUQUJMRQkweDIwCisKKy8qIFNwZWNpYWwgb3B0aW9uIHR5cGVzIGZvciBwYWRkaW5nLiAgKi8KKyNkZWZpbmUgSVA2T1BUX1BBRDEJMAorI2RlZmluZSBJUDZPUFRfUEFETgkxCisKKyNkZWZpbmUgSVA2T1BUX0pVTUJPCQkweGMyCisjZGVmaW5lIElQNk9QVF9OU0FQX0FERFIJMHhjMworI2RlZmluZSBJUDZPUFRfVFVOTkVMX0xJTUlUCTB4MDQKKyNkZWZpbmUgSVA2T1BUX1JPVVRFUl9BTEVSVAkweDA1CisKKy8qIEp1bWJvIFBheWxvYWQgT3B0aW9uICovCitzdHJ1Y3QgaXA2X29wdF9qdW1ibworICB7CisgICAgdWludDhfdCAgaXA2b2pfdHlwZTsKKyAgICB1aW50OF90ICBpcDZval9sZW47CisgICAgdWludDhfdCAgaXA2b2pfanVtYm9fbGVuWzRdOworICB9OworI2RlZmluZSBJUDZPUFRfSlVNQk9fTEVOCTYKKworLyogTlNBUCBBZGRyZXNzIE9wdGlvbiAqLworc3RydWN0IGlwNl9vcHRfbnNhcAorICB7CisgICAgdWludDhfdCAgaXA2b25fdHlwZTsKKyAgICB1aW50OF90ICBpcDZvbl9sZW47CisgICAgdWludDhfdCAgaXA2b25fc3JjX25zYXBfbGVuOworICAgIHVpbnQ4X3QgIGlwNm9uX2RzdF9uc2FwX2xlbjsKKyAgICAgIC8qIGZvbGxvd2VkIGJ5IHNvdXJjZSBOU0FQICovCisgICAgICAvKiBmb2xsb3dlZCBieSBkZXN0aW5hdGlvbiBOU0FQICovCisgIH07CisKKy8qIFR1bm5lbCBMaW1pdCBPcHRpb24gKi8KK3N0cnVjdCBpcDZfb3B0X3R1bm5lbAorICB7CisgICAgdWludDhfdCAgaXA2b3RfdHlwZTsKKyAgICB1aW50OF90ICBpcDZvdF9sZW47CisgICAgdWludDhfdCAgaXA2b3RfZW5jYXBfbGltaXQ7CisgIH07CisKKy8qIFJvdXRlciBBbGVydCBPcHRpb24gKi8KK3N0cnVjdCBpcDZfb3B0X3JvdXRlcgorICB7CisgICAgdWludDhfdCAgaXA2b3JfdHlwZTsKKyAgICB1aW50OF90ICBpcDZvcl9sZW47CisgICAgdWludDhfdCAgaXA2b3JfdmFsdWVbMl07CisgIH07CisKKy8qIFJvdXRlciBhbGVydCB2YWx1ZXMgKGluIG5ldHdvcmsgYnl0ZSBvcmRlcikgKi8KKyNpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KKyMgZGVmaW5lIElQNl9BTEVSVF9NTEQJMHgwMDAwCisjIGRlZmluZSBJUDZfQUxFUlRfUlNWUAkweDAwMDEKKyMgZGVmaW5lIElQNl9BTEVSVF9BTgkweDAwMDIKKyNlbHNlIC8qIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElORyAqLworIyBkZWZpbmUgSVA2X0FMRVJUX01MRAkweDAwMDAKKyMgZGVmaW5lIElQNl9BTEVSVF9SU1ZQCTB4MDEwMAorIyBkZWZpbmUgSVA2X0FMRVJUX0FOCTB4MDIwMAorI2VuZGlmCisKKyNlbmRpZiAvKiBuZXRpbmV0L2lwNi5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0aW5ldC9pcF9pY21wLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0aW5ldC9pcF9pY21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZjOGU5YwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXRpbmV0L2lwX2ljbXAuaApAQCAtMCwwICsxLDI4MyBAQAorLyogQ29weXJpZ2h0IChDKSAxOTkxLCA5MiwgOTMsIDk1LCA5NiwgOTcsIDk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9fTkVUSU5FVF9JUF9JQ01QX0gKKyNkZWZpbmUgX19ORVRJTkVUX0lQX0lDTVBfSCAgICAxCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworX19CRUdJTl9ERUNMUworCitzdHJ1Y3QgaWNtcGhkcgoreworICB1X2ludDhfdCB0eXBlOwkJLyogbWVzc2FnZSB0eXBlICovCisgIHVfaW50OF90IGNvZGU7CQkvKiB0eXBlIHN1Yi1jb2RlICovCisgIHVfaW50MTZfdCBjaGVja3N1bTsKKyAgdW5pb24KKyAgeworICAgIHN0cnVjdAorICAgIHsKKyAgICAgIHVfaW50MTZfdAlpZDsKKyAgICAgIHVfaW50MTZfdAlzZXF1ZW5jZTsKKyAgICB9IGVjaG87CQkJLyogZWNobyBkYXRhZ3JhbSAqLworICAgIHVfaW50MzJfdAlnYXRld2F5OwkvKiBnYXRld2F5IGFkZHJlc3MgKi8KKyAgICBzdHJ1Y3QKKyAgICB7CisgICAgICB1X2ludDE2X3QJX191bnVzZWQ7CisgICAgICB1X2ludDE2X3QJbXR1OworICAgIH0gZnJhZzsJCQkvKiBwYXRoIG10dSBkaXNjb3ZlcnkgKi8KKyAgfSB1bjsKK307CisKKyNkZWZpbmUgSUNNUF9FQ0hPUkVQTFkJCTAJLyogRWNobyBSZXBseQkJCSovCisjZGVmaW5lIElDTVBfREVTVF9VTlJFQUNICTMJLyogRGVzdGluYXRpb24gVW5yZWFjaGFibGUJKi8KKyNkZWZpbmUgSUNNUF9TT1VSQ0VfUVVFTkNICTQJLyogU291cmNlIFF1ZW5jaAkJKi8KKyNkZWZpbmUgSUNNUF9SRURJUkVDVAkJNQkvKiBSZWRpcmVjdCAoY2hhbmdlIHJvdXRlKQkqLworI2RlZmluZSBJQ01QX0VDSE8JCTgJLyogRWNobyBSZXF1ZXN0CQkJKi8KKyNkZWZpbmUgSUNNUF9USU1FX0VYQ0VFREVECTExCS8qIFRpbWUgRXhjZWVkZWQJCSovCisjZGVmaW5lIElDTVBfUEFSQU1FVEVSUFJPQgkxMgkvKiBQYXJhbWV0ZXIgUHJvYmxlbQkJKi8KKyNkZWZpbmUgSUNNUF9USU1FU1RBTVAJCTEzCS8qIFRpbWVzdGFtcCBSZXF1ZXN0CQkqLworI2RlZmluZSBJQ01QX1RJTUVTVEFNUFJFUExZCTE0CS8qIFRpbWVzdGFtcCBSZXBseQkJKi8KKyNkZWZpbmUgSUNNUF9JTkZPX1JFUVVFU1QJMTUJLyogSW5mb3JtYXRpb24gUmVxdWVzdAkJKi8KKyNkZWZpbmUgSUNNUF9JTkZPX1JFUExZCQkxNgkvKiBJbmZvcm1hdGlvbiBSZXBseQkJKi8KKyNkZWZpbmUgSUNNUF9BRERSRVNTCQkxNwkvKiBBZGRyZXNzIE1hc2sgUmVxdWVzdAkJKi8KKyNkZWZpbmUgSUNNUF9BRERSRVNTUkVQTFkJMTgJLyogQWRkcmVzcyBNYXNrIFJlcGx5CQkqLworI2RlZmluZSBOUl9JQ01QX1RZUEVTCQkxOAorCisKKy8qIENvZGVzIGZvciBVTlJFQUNILiAqLworI2RlZmluZSBJQ01QX05FVF9VTlJFQUNICTAJLyogTmV0d29yayBVbnJlYWNoYWJsZQkJKi8KKyNkZWZpbmUgSUNNUF9IT1NUX1VOUkVBQ0gJMQkvKiBIb3N0IFVucmVhY2hhYmxlCQkqLworI2RlZmluZSBJQ01QX1BST1RfVU5SRUFDSAkyCS8qIFByb3RvY29sIFVucmVhY2hhYmxlCQkqLworI2RlZmluZSBJQ01QX1BPUlRfVU5SRUFDSAkzCS8qIFBvcnQgVW5yZWFjaGFibGUJCSovCisjZGVmaW5lIElDTVBfRlJBR19ORUVERUQJNAkvKiBGcmFnbWVudGF0aW9uIE5lZWRlZC9ERiBzZXQJKi8KKyNkZWZpbmUgSUNNUF9TUl9GQUlMRUQJCTUJLyogU291cmNlIFJvdXRlIGZhaWxlZAkJKi8KKyNkZWZpbmUgSUNNUF9ORVRfVU5LTk9XTgk2CisjZGVmaW5lIElDTVBfSE9TVF9VTktOT1dOCTcKKyNkZWZpbmUgSUNNUF9IT1NUX0lTT0xBVEVECTgKKyNkZWZpbmUgSUNNUF9ORVRfQU5PCQk5CisjZGVmaW5lIElDTVBfSE9TVF9BTk8JCTEwCisjZGVmaW5lIElDTVBfTkVUX1VOUl9UT1MJMTEKKyNkZWZpbmUgSUNNUF9IT1NUX1VOUl9UT1MJMTIKKyNkZWZpbmUgSUNNUF9QS1RfRklMVEVSRUQJMTMJLyogUGFja2V0IGZpbHRlcmVkICovCisjZGVmaW5lIElDTVBfUFJFQ19WSU9MQVRJT04JMTQJLyogUHJlY2VkZW5jZSB2aW9sYXRpb24gKi8KKyNkZWZpbmUgSUNNUF9QUkVDX0NVVE9GRgkxNQkvKiBQcmVjZWRlbmNlIGN1dCBvZmYgKi8KKyNkZWZpbmUgTlJfSUNNUF9VTlJFQUNICQkxNQkvKiBpbnN0ZWFkIG9mIGhhcmRjb2RpbmcgaW1tZWRpYXRlIHZhbHVlICovCisKKy8qIENvZGVzIGZvciBSRURJUkVDVC4gKi8KKyNkZWZpbmUgSUNNUF9SRURJUl9ORVQJCTAJLyogUmVkaXJlY3QgTmV0CQkJKi8KKyNkZWZpbmUgSUNNUF9SRURJUl9IT1NUCQkxCS8qIFJlZGlyZWN0IEhvc3QJCSovCisjZGVmaW5lIElDTVBfUkVESVJfTkVUVE9TCTIJLyogUmVkaXJlY3QgTmV0IGZvciBUT1MJCSovCisjZGVmaW5lIElDTVBfUkVESVJfSE9TVFRPUwkzCS8qIFJlZGlyZWN0IEhvc3QgZm9yIFRPUwkqLworCisvKiBDb2RlcyBmb3IgVElNRV9FWENFRURFRC4gKi8KKyNkZWZpbmUgSUNNUF9FWENfVFRMCQkwCS8qIFRUTCBjb3VudCBleGNlZWRlZAkJKi8KKyNkZWZpbmUgSUNNUF9FWENfRlJBR1RJTUUJMQkvKiBGcmFnbWVudCBSZWFzcyB0aW1lIGV4Y2VlZGVkCSovCisKKworI2lmZGVmIF9fVVNFX0JTRAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk4MiwgMTk4NiwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIylpcF9pY21wLmgJOC4xIChCZXJrZWxleSkgNi8xMC85MworICovCisKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgorCisvKgorICogSW50ZXJuYWwgb2YgYW4gSUNNUCBSb3V0ZXIgQWR2ZXJ0aXNlbWVudAorICovCitzdHJ1Y3QgaWNtcF9yYV9hZGRyCit7CisgIHVfaW50MzJfdCBpcmFfYWRkcjsKKyAgdV9pbnQzMl90IGlyYV9wcmVmZXJlbmNlOworfTsKKworc3RydWN0IGljbXAKK3sKKyAgdV9pbnQ4X3QgIGljbXBfdHlwZTsJLyogdHlwZSBvZiBtZXNzYWdlLCBzZWUgYmVsb3cgKi8KKyAgdV9pbnQ4X3QgIGljbXBfY29kZTsJLyogdHlwZSBzdWIgY29kZSAqLworICB1X2ludDE2X3QgaWNtcF9ja3N1bTsJLyogb25lcyBjb21wbGVtZW50IGNoZWNrc3VtIG9mIHN0cnVjdCAqLworICB1bmlvbgorICB7CisgICAgdV9jaGFyIGloX3BwdHI7CQkvKiBJQ01QX1BBUkFNUFJPQiAqLworICAgIHN0cnVjdCBpbl9hZGRyIGloX2d3YWRkcjsJLyogZ2F0ZXdheSBhZGRyZXNzICovCisgICAgc3RydWN0IGloX2lkc2VxCQkvKiBlY2hvIGRhdGFncmFtICovCisgICAgeworICAgICAgdV9pbnQxNl90IGljZF9pZDsKKyAgICAgIHVfaW50MTZfdCBpY2Rfc2VxOworICAgIH0gaWhfaWRzZXE7CisgICAgdV9pbnQzMl90IGloX3ZvaWQ7CisKKyAgICAvKiBJQ01QX1VOUkVBQ0hfTkVFREZSQUcgLS0gUGF0aCBNVFUgRGlzY292ZXJ5IChSRkMxMTkxKSAqLworICAgIHN0cnVjdCBpaF9wbXR1CisgICAgeworICAgICAgdV9pbnQxNl90IGlwbV92b2lkOworICAgICAgdV9pbnQxNl90IGlwbV9uZXh0bXR1OworICAgIH0gaWhfcG10dTsKKworICAgIHN0cnVjdCBpaF9ydHJhZHYKKyAgICB7CisgICAgICB1X2ludDhfdCBpcnRfbnVtX2FkZHJzOworICAgICAgdV9pbnQ4X3QgaXJ0X3dwYTsKKyAgICAgIHVfaW50MTZfdCBpcnRfbGlmZXRpbWU7CisgICAgfSBpaF9ydHJhZHY7CisgIH0gaWNtcF9odW47CisjZGVmaW5lCWljbXBfcHB0cglpY21wX2h1bi5paF9wcHRyCisjZGVmaW5lCWljbXBfZ3dhZGRyCWljbXBfaHVuLmloX2d3YWRkcgorI2RlZmluZQlpY21wX2lkCQlpY21wX2h1bi5paF9pZHNlcS5pY2RfaWQKKyNkZWZpbmUJaWNtcF9zZXEJaWNtcF9odW4uaWhfaWRzZXEuaWNkX3NlcQorI2RlZmluZQlpY21wX3ZvaWQJaWNtcF9odW4uaWhfdm9pZAorI2RlZmluZQlpY21wX3Btdm9pZAlpY21wX2h1bi5paF9wbXR1LmlwbV92b2lkCisjZGVmaW5lCWljbXBfbmV4dG10dQlpY21wX2h1bi5paF9wbXR1LmlwbV9uZXh0bXR1CisjZGVmaW5lCWljbXBfbnVtX2FkZHJzCWljbXBfaHVuLmloX3J0cmFkdi5pcnRfbnVtX2FkZHJzCisjZGVmaW5lCWljbXBfd3BhCWljbXBfaHVuLmloX3J0cmFkdi5pcnRfd3BhCisjZGVmaW5lCWljbXBfbGlmZXRpbWUJaWNtcF9odW4uaWhfcnRyYWR2LmlydF9saWZldGltZQorICB1bmlvbgorICB7CisgICAgc3RydWN0CisgICAgeworICAgICAgdV9pbnQzMl90IGl0c19vdGltZTsKKyAgICAgIHVfaW50MzJfdCBpdHNfcnRpbWU7CisgICAgICB1X2ludDMyX3QgaXRzX3R0aW1lOworICAgIH0gaWRfdHM7CisgICAgc3RydWN0CisgICAgeworICAgICAgc3RydWN0IGlwIGlkaV9pcDsKKyAgICAgIC8qIG9wdGlvbnMgYW5kIHRoZW4gNjQgYml0cyBvZiBkYXRhICovCisgICAgfSBpZF9pcDsKKyAgICBzdHJ1Y3QgaWNtcF9yYV9hZGRyIGlkX3JhZHY7CisgICAgdV9pbnQzMl90ICAgaWRfbWFzazsKKyAgICB1X2ludDhfdCAgICBpZF9kYXRhWzFdOworICB9IGljbXBfZHVuOworI2RlZmluZQlpY21wX290aW1lCWljbXBfZHVuLmlkX3RzLml0c19vdGltZQorI2RlZmluZQlpY21wX3J0aW1lCWljbXBfZHVuLmlkX3RzLml0c19ydGltZQorI2RlZmluZQlpY21wX3R0aW1lCWljbXBfZHVuLmlkX3RzLml0c190dGltZQorI2RlZmluZQlpY21wX2lwCQlpY21wX2R1bi5pZF9pcC5pZGlfaXAKKyNkZWZpbmUJaWNtcF9yYWR2CWljbXBfZHVuLmlkX3JhZHYKKyNkZWZpbmUJaWNtcF9tYXNrCWljbXBfZHVuLmlkX21hc2sKKyNkZWZpbmUJaWNtcF9kYXRhCWljbXBfZHVuLmlkX2RhdGEKK307CisKKy8qCisgKiBMb3dlciBib3VuZHMgb24gcGFja2V0IGxlbmd0aHMgZm9yIHZhcmlvdXMgdHlwZXMuCisgKiBGb3IgdGhlIGVycm9yIGFkdmljZSBwYWNrZXRzIG11c3QgZmlyc3QgaW5zdXJlIHRoYXQgdGhlCisgKiBwYWNrZXQgaXMgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIHJldHVybmVkIGlwIGhlYWRlci4KKyAqIE9ubHkgdGhlbiBjYW4gd2UgZG8gdGhlIGNoZWNrIHRvIHNlZSBpZiA2NCBiaXRzIG9mIHBhY2tldAorICogZGF0YSBoYXZlIGJlZW4gcmV0dXJuZWQsIHNpbmNlIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHJldHVybmVkCisgKiBpcCBoZWFkZXIgbGVuZ3RoLgorICovCisjZGVmaW5lCUlDTVBfTUlOTEVOCTgJCQkJLyogYWJzIG1pbmltdW0gKi8KKyNkZWZpbmUJSUNNUF9UU0xFTgkoOCArIDMgKiBzaXplb2YgKG5fdGltZSkpCS8qIHRpbWVzdGFtcCAqLworI2RlZmluZQlJQ01QX01BU0tMRU4JMTIJCQkJLyogYWRkcmVzcyBtYXNrICovCisjZGVmaW5lCUlDTVBfQURWTEVOTUlOCSg4ICsgc2l6ZW9mIChzdHJ1Y3QgaXApICsgOCkJLyogbWluICovCisjaWZuZGVmIF9JUF9WSEwKKyNkZWZpbmUJSUNNUF9BRFZMRU4ocCkJKDggKyAoKHApLT5pY21wX2lwLmlwX2hsIDw8IDIpICsgOCkKKwkvKiBOLkIuOiBtdXN0IHNlcGFyYXRlbHkgY2hlY2sgdGhhdCBpcF9obCA+PSA1ICovCisjZWxzZQorI2RlZmluZQlJQ01QX0FEVkxFTihwKQkoOCArIChJUF9WSExfSEwoKHApLT5pY21wX2lwLmlwX3ZobCkgPDwgMikgKyA4KQorCS8qIE4uQi46IG11c3Qgc2VwYXJhdGVseSBjaGVjayB0aGF0IGhlYWRlciBsZW5ndGggPj0gNSAqLworI2VuZGlmCisKKy8qIERlZmluaXRpb24gb2YgdHlwZSBhbmQgY29kZSBmaWVsZHMuICovCisvKiBkZWZpbmVkIGFib3ZlOiBJQ01QX0VDSE9SRVBMWSwgSUNNUF9SRURJUkVDVCwgSUNNUF9FQ0hPICovCisjZGVmaW5lCUlDTVBfVU5SRUFDSAkJMwkJLyogZGVzdCB1bnJlYWNoYWJsZSwgY29kZXM6ICovCisjZGVmaW5lCUlDTVBfU09VUkNFUVVFTkNICTQJCS8qIHBhY2tldCBsb3N0LCBzbG93IGRvd24gKi8KKyNkZWZpbmUJSUNNUF9ST1VURVJBRFZFUlQJOQkJLyogcm91dGVyIGFkdmVydGlzZW1lbnQgKi8KKyNkZWZpbmUJSUNNUF9ST1VURVJTT0xJQ0lUCTEwCQkvKiByb3V0ZXIgc29saWNpdGF0aW9uICovCisjZGVmaW5lCUlDTVBfVElNWENFRUQJCTExCQkvKiB0aW1lIGV4Y2VlZGVkLCBjb2RlOiAqLworI2RlZmluZQlJQ01QX1BBUkFNUFJPQgkJMTIJCS8qIGlwIGhlYWRlciBiYWQgKi8KKyNkZWZpbmUJSUNNUF9UU1RBTVAJCTEzCQkvKiB0aW1lc3RhbXAgcmVxdWVzdCAqLworI2RlZmluZQlJQ01QX1RTVEFNUFJFUExZCTE0CQkvKiB0aW1lc3RhbXAgcmVwbHkgKi8KKyNkZWZpbmUJSUNNUF9JUkVRCQkxNQkJLyogaW5mb3JtYXRpb24gcmVxdWVzdCAqLworI2RlZmluZQlJQ01QX0lSRVFSRVBMWQkJMTYJCS8qIGluZm9ybWF0aW9uIHJlcGx5ICovCisjZGVmaW5lCUlDTVBfTUFTS1JFUQkJMTcJCS8qIGFkZHJlc3MgbWFzayByZXF1ZXN0ICovCisjZGVmaW5lCUlDTVBfTUFTS1JFUExZCQkxOAkJLyogYWRkcmVzcyBtYXNrIHJlcGx5ICovCisKKyNkZWZpbmUJSUNNUF9NQVhUWVBFCQkxOAorCisvKiBVTlJFQUNIIGNvZGVzICovCisjZGVmaW5lCUlDTVBfVU5SRUFDSF9ORVQJICAgICAgICAwCS8qIGJhZCBuZXQgKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNIX0hPU1QJICAgICAgICAxCS8qIGJhZCBob3N0ICovCisjZGVmaW5lCUlDTVBfVU5SRUFDSF9QUk9UT0NPTAkgICAgICAgIDIJLyogYmFkIHByb3RvY29sICovCisjZGVmaW5lCUlDTVBfVU5SRUFDSF9QT1JUCSAgICAgICAgMwkvKiBiYWQgcG9ydCAqLworI2RlZmluZQlJQ01QX1VOUkVBQ0hfTkVFREZSQUcJICAgICAgICA0CS8qIElQX0RGIGNhdXNlZCBkcm9wICovCisjZGVmaW5lCUlDTVBfVU5SRUFDSF9TUkNGQUlMCSAgICAgICAgNQkvKiBzcmMgcm91dGUgZmFpbGVkICovCisjZGVmaW5lCUlDTVBfVU5SRUFDSF9ORVRfVU5LTk9XTiAgICAgICAgNgkvKiB1bmtub3duIG5ldCAqLworI2RlZmluZQlJQ01QX1VOUkVBQ0hfSE9TVF9VTktOT1dOICAgICAgIDcJLyogdW5rbm93biBob3N0ICovCisjZGVmaW5lCUlDTVBfVU5SRUFDSF9JU09MQVRFRAkgICAgICAgIDgJLyogc3JjIGhvc3QgaXNvbGF0ZWQgKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNIX05FVF9QUk9ISUIJICAgICAgICA5CS8qIG5ldCBkZW5pZWQgKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNIX0hPU1RfUFJPSElCICAgICAgICAxMAkvKiBob3N0IGRlbmllZCAqLworI2RlZmluZQlJQ01QX1VOUkVBQ0hfVE9TTkVUCSAgICAgICAgMTEJLyogYmFkIHRvcyBmb3IgbmV0ICovCisjZGVmaW5lCUlDTVBfVU5SRUFDSF9UT1NIT1NUCSAgICAgICAgMTIJLyogYmFkIHRvcyBmb3IgaG9zdCAqLworI2RlZmluZQlJQ01QX1VOUkVBQ0hfRklMVEVSX1BST0hJQiAgICAgIDEzCS8qIGFkbWluIHByb2hpYiAqLworI2RlZmluZQlJQ01QX1VOUkVBQ0hfSE9TVF9QUkVDRURFTkNFICAgIDE0CS8qIGhvc3QgcHJlYyB2aW8uICovCisjZGVmaW5lCUlDTVBfVU5SRUFDSF9QUkVDRURFTkNFX0NVVE9GRiAgMTUJLyogcHJlYyBjdXRvZmYgKi8KKworLyogUkVESVJFQ1QgY29kZXMgKi8KKyNkZWZpbmUJSUNNUF9SRURJUkVDVF9ORVQJMAkJLyogZm9yIG5ldHdvcmsgKi8KKyNkZWZpbmUJSUNNUF9SRURJUkVDVF9IT1NUCTEJCS8qIGZvciBob3N0ICovCisjZGVmaW5lCUlDTVBfUkVESVJFQ1RfVE9TTkVUCTIJCS8qIGZvciB0b3MgYW5kIG5ldCAqLworI2RlZmluZQlJQ01QX1JFRElSRUNUX1RPU0hPU1QJMwkJLyogZm9yIHRvcyBhbmQgaG9zdCAqLworCisvKiBUSU1FWENFRUQgY29kZXMgKi8KKyNkZWZpbmUJSUNNUF9USU1YQ0VFRF9JTlRSQU5TCTAJCS8qIHR0bD09MCBpbiB0cmFuc2l0ICovCisjZGVmaW5lCUlDTVBfVElNWENFRURfUkVBU1MJMQkJLyogdHRsPT0wIGluIHJlYXNzICovCisKKy8qIFBBUkFNUFJPQiBjb2RlICovCisjZGVmaW5lCUlDTVBfUEFSQU1QUk9CX09QVEFCU0VOVCAxCQkvKiByZXEuIG9wdC4gYWJzZW50ICovCisKKyNkZWZpbmUJSUNNUF9JTkZPVFlQRSh0eXBlKSBcCisJKCh0eXBlKSA9PSBJQ01QX0VDSE9SRVBMWSB8fCAodHlwZSkgPT0gSUNNUF9FQ0hPIHx8IFwKKwkodHlwZSkgPT0gSUNNUF9ST1VURVJBRFZFUlQgfHwgKHR5cGUpID09IElDTVBfUk9VVEVSU09MSUNJVCB8fCBcCisJKHR5cGUpID09IElDTVBfVFNUQU1QIHx8ICh0eXBlKSA9PSBJQ01QX1RTVEFNUFJFUExZIHx8IFwKKwkodHlwZSkgPT0gSUNNUF9JUkVRIHx8ICh0eXBlKSA9PSBJQ01QX0lSRVFSRVBMWSB8fCBcCisJKHR5cGUpID09IElDTVBfTUFTS1JFUSB8fCAodHlwZSkgPT0gSUNNUF9NQVNLUkVQTFkpCisKKyNlbmRpZiAvKiBfX1VTRV9CU0QgKi8KKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIG5ldGluZXQvaXBfaWNtcC5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0aW5ldC90Y3AuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXRpbmV0L3RjcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZTg0MTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0aW5ldC90Y3AuaApAQCAtMCwwICsxLDI0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk4MiwgMTk4NiwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIyl0Y3AuaAk4LjEgKEJlcmtlbGV5KSA2LzEwLzkzCisgKi8KKworI2lmbmRlZiBfTkVUSU5FVF9UQ1BfSAorI2RlZmluZSBfTkVUSU5FVF9UQ1BfSAkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCisvKgorICogVXNlci1zZXR0YWJsZSBvcHRpb25zICh1c2VkIHdpdGggc2V0c29ja29wdCkuCisgKi8KKyNkZWZpbmUJVENQX05PREVMQVkJIDEJLyogRG9uJ3QgZGVsYXkgc2VuZCB0byBjb2FsZXNjZSBwYWNrZXRzICAqLworI2RlZmluZQlUQ1BfTUFYU0VHCSAyCS8qIFNldCBtYXhpbXVtIHNlZ21lbnQgc2l6ZSAgKi8KKyNkZWZpbmUgVENQX0NPUksJIDMJLyogQ29udHJvbCBzZW5kaW5nIG9mIHBhcnRpYWwgZnJhbWVzICAqLworI2RlZmluZSBUQ1BfS0VFUElETEUJIDQJLyogU3RhcnQga2VlcGxpdmVzIGFmdGVyIHRoaXMgcGVyaW9kICovCisjZGVmaW5lIFRDUF9LRUVQSU5UVkwJIDUJLyogSW50ZXJ2YWwgYmV0d2VlbiBrZWVwYWxpdmVzICovCisjZGVmaW5lIFRDUF9LRUVQQ05UCSA2CS8qIE51bWJlciBvZiBrZWVwYWxpdmVzIGJlZm9yZSBkZWF0aCAqLworI2RlZmluZSBUQ1BfU1lOQ05UCSA3CS8qIE51bWJlciBvZiBTWU4gcmV0cmFuc21pdHMgKi8KKyNkZWZpbmUgVENQX0xJTkdFUjIJIDgJLyogTGlmZSB0aW1lIG9mIG9ycGhhbmVkIEZJTi1XQUlULTIgc3RhdGUgKi8KKyNkZWZpbmUgVENQX0RFRkVSX0FDQ0VQVCA5CS8qIFdha2UgdXAgbGlzdGVuZXIgb25seSB3aGVuIGRhdGEgYXJyaXZlICovCisjZGVmaW5lIFRDUF9XSU5ET1dfQ0xBTVAgMTAJLyogQm91bmQgYWR2ZXJ0aXNlZCB3aW5kb3cgKi8KKyNkZWZpbmUgVENQX0lORk8JIDExCS8qIEluZm9ybWF0aW9uIGFib3V0IHRoaXMgY29ubmVjdGlvbi4gKi8KKyNkZWZpbmUJVENQX1FVSUNLQUNLCSAxMgkvKiBCb2NrL3JlZW5hYmxlIHF1aWNrIEFDS3MuICAqLworI2RlZmluZSBUQ1BfQ09OR0VTVElPTgkgMTMJLyogQ29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobS4gICovCisjZGVmaW5lIFRDUF9NRDVTSUcJIDE0CS8qIFRDUCBNRDUgU2lnbmF0dXJlIChSRkMyMzg1KSAqLworCisjaWZkZWYgX19VU0VfTUlTQworIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyMgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorCisjIGlmZGVmIF9fRkFWT1JfQlNECit0eXBlZGVmCXVfaW50MzJfdCB0Y3Bfc2VxOworLyoKKyAqIFRDUCBoZWFkZXIuCisgKiBQZXIgUkZDIDc5MywgU2VwdGVtYmVyLCAxOTgxLgorICovCitzdHJ1Y3QgdGNwaGRyCisgIHsKKyAgICB1X2ludDE2X3QgdGhfc3BvcnQ7CQkvKiBzb3VyY2UgcG9ydCAqLworICAgIHVfaW50MTZfdCB0aF9kcG9ydDsJCS8qIGRlc3RpbmF0aW9uIHBvcnQgKi8KKyAgICB0Y3Bfc2VxIHRoX3NlcTsJCS8qIHNlcXVlbmNlIG51bWJlciAqLworICAgIHRjcF9zZXEgdGhfYWNrOwkJLyogYWNrbm93bGVkZ2VtZW50IG51bWJlciAqLworIyAgaWYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTgorICAgIHVfaW50OF90IHRoX3gyOjQ7CQkvKiAodW51c2VkKSAqLworICAgIHVfaW50OF90IHRoX29mZjo0OwkJLyogZGF0YSBvZmZzZXQgKi8KKyMgIGVuZGlmCisjICBpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCisgICAgdV9pbnQ4X3QgdGhfb2ZmOjQ7CQkvKiBkYXRhIG9mZnNldCAqLworICAgIHVfaW50OF90IHRoX3gyOjQ7CQkvKiAodW51c2VkKSAqLworIyAgZW5kaWYKKyAgICB1X2ludDhfdCB0aF9mbGFnczsKKyMgIGRlZmluZSBUSF9GSU4JMHgwMQorIyAgZGVmaW5lIFRIX1NZTgkweDAyCisjICBkZWZpbmUgVEhfUlNUCTB4MDQKKyMgIGRlZmluZSBUSF9QVVNICTB4MDgKKyMgIGRlZmluZSBUSF9BQ0sJMHgxMAorIyAgZGVmaW5lIFRIX1VSRwkweDIwCisgICAgdV9pbnQxNl90IHRoX3dpbjsJCS8qIHdpbmRvdyAqLworICAgIHVfaW50MTZfdCB0aF9zdW07CQkvKiBjaGVja3N1bSAqLworICAgIHVfaW50MTZfdCB0aF91cnA7CQkvKiB1cmdlbnQgcG9pbnRlciAqLworfTsKKworIyBlbHNlIC8qICFfX0ZBVk9SX0JTRCAqLworc3RydWN0IHRjcGhkcgorICB7CisgICAgdV9pbnQxNl90IHNvdXJjZTsKKyAgICB1X2ludDE2X3QgZGVzdDsKKyAgICB1X2ludDMyX3Qgc2VxOworICAgIHVfaW50MzJfdCBhY2tfc2VxOworIyAgaWYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTgorICAgIHVfaW50MTZfdCByZXMxOjQ7CisgICAgdV9pbnQxNl90IGRvZmY6NDsKKyAgICB1X2ludDE2X3QgZmluOjE7CisgICAgdV9pbnQxNl90IHN5bjoxOworICAgIHVfaW50MTZfdCByc3Q6MTsKKyAgICB1X2ludDE2X3QgcHNoOjE7CisgICAgdV9pbnQxNl90IGFjazoxOworICAgIHVfaW50MTZfdCB1cmc6MTsKKyAgICB1X2ludDE2X3QgcmVzMjoyOworIyAgZWxpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCisgICAgdV9pbnQxNl90IGRvZmY6NDsKKyAgICB1X2ludDE2X3QgcmVzMTo0OworICAgIHVfaW50MTZfdCByZXMyOjI7CisgICAgdV9pbnQxNl90IHVyZzoxOworICAgIHVfaW50MTZfdCBhY2s6MTsKKyAgICB1X2ludDE2X3QgcHNoOjE7CisgICAgdV9pbnQxNl90IHJzdDoxOworICAgIHVfaW50MTZfdCBzeW46MTsKKyAgICB1X2ludDE2X3QgZmluOjE7CisjICBlbHNlCisjICAgZXJyb3IgIkFkanVzdCB5b3VyIDxiaXRzL2VuZGlhbi5oPiBkZWZpbmVzIgorIyAgZW5kaWYKKyAgICB1X2ludDE2X3Qgd2luZG93OworICAgIHVfaW50MTZfdCBjaGVjazsKKyAgICB1X2ludDE2X3QgdXJnX3B0cjsKK307CisjIGVuZGlmIC8qIF9fRkFWT1JfQlNEICovCisKK2VudW0KK3sKKyAgVENQX0VTVEFCTElTSEVEID0gMSwKKyAgVENQX1NZTl9TRU5ULAorICBUQ1BfU1lOX1JFQ1YsCisgIFRDUF9GSU5fV0FJVDEsCisgIFRDUF9GSU5fV0FJVDIsCisgIFRDUF9USU1FX1dBSVQsCisgIFRDUF9DTE9TRSwKKyAgVENQX0NMT1NFX1dBSVQsCisgIFRDUF9MQVNUX0FDSywKKyAgVENQX0xJU1RFTiwKKyAgVENQX0NMT1NJTkcgICAvKiBub3cgYSB2YWxpZCBzdGF0ZSAqLworfTsKKworIyBkZWZpbmUgVENQT1BUX0VPTAkJMAorIyBkZWZpbmUgVENQT1BUX05PUAkJMQorIyBkZWZpbmUgVENQT1BUX01BWFNFRwkJMgorIyBkZWZpbmUgVENQT0xFTl9NQVhTRUcJCTQKKyMgZGVmaW5lIFRDUE9QVF9XSU5ET1cJCTMKKyMgZGVmaW5lIFRDUE9MRU5fV0lORE9XCQkzCisjIGRlZmluZSBUQ1BPUFRfU0FDS19QRVJNSVRURUQJNAkJLyogRXhwZXJpbWVudGFsICovCisjIGRlZmluZSBUQ1BPTEVOX1NBQ0tfUEVSTUlUVEVECTIKKyMgZGVmaW5lIFRDUE9QVF9TQUNLCQk1CQkvKiBFeHBlcmltZW50YWwgKi8KKyMgZGVmaW5lIFRDUE9QVF9USU1FU1RBTVAJOAorIyBkZWZpbmUgVENQT0xFTl9USU1FU1RBTVAJMTAKKyMgZGVmaW5lIFRDUE9MRU5fVFNUQU1QX0FQUEEJKFRDUE9MRU5fVElNRVNUQU1QKzIpIC8qIGFwcGVuZGl4IEEgKi8KKworIyBkZWZpbmUgVENQT1BUX1RTVEFNUF9IRFIJXAorICAgIChUQ1BPUFRfTk9QPDwyNHxUQ1BPUFRfTk9QPDwxNnxUQ1BPUFRfVElNRVNUQU1QPDw4fFRDUE9MRU5fVElNRVNUQU1QKQorCisvKgorICogRGVmYXVsdCBtYXhpbXVtIHNlZ21lbnQgc2l6ZSBmb3IgVENQLgorICogV2l0aCBhbiBJUCBNU1Mgb2YgNTc2LCB0aGlzIGlzIDUzNiwKKyAqIGJ1dCA1MTIgaXMgcHJvYmFibHkgbW9yZSBjb252ZW5pZW50LgorICogVGhpcyBzaG91bGQgYmUgZGVmaW5lZCBhcyBNSU4oNTEyLCBJUF9NU1MgLSBzaXplb2YgKHN0cnVjdCB0Y3BpcGhkcikpLgorICovCisjIGRlZmluZSBUQ1BfTVNTCTUxMgorCisjIGRlZmluZSBUQ1BfTUFYV0lOCTY1NTM1CS8qIGxhcmdlc3QgdmFsdWUgZm9yICh1bnNjYWxlZCkgd2luZG93ICovCisKKyMgZGVmaW5lIFRDUF9NQVhfV0lOU0hJRlQJMTQJLyogbWF4aW11bSB3aW5kb3cgc2hpZnQgKi8KKworIyBkZWZpbmUgU09MX1RDUAkJNgkvKiBUQ1AgbGV2ZWwgKi8KKworCisjIGRlZmluZSBUQ1BJX09QVF9USU1FU1RBTVBTCTEKKyMgZGVmaW5lIFRDUElfT1BUX1NBQ0sJCTIKKyMgZGVmaW5lIFRDUElfT1BUX1dTQ0FMRQk0CisjIGRlZmluZSBUQ1BJX09QVF9FQ04JCTgKKworLyogVmFsdWVzIGZvciB0Y3BpX3N0YXRlLiAgKi8KK2VudW0gdGNwX2NhX3N0YXRlCit7CisgIFRDUF9DQV9PcGVuID0gMCwKKyAgVENQX0NBX0Rpc29yZGVyID0gMSwKKyAgVENQX0NBX0NXUiA9IDIsCisgIFRDUF9DQV9SZWNvdmVyeSA9IDMsCisgIFRDUF9DQV9Mb3NzID0gNAorfTsKKworc3RydWN0IHRjcF9pbmZvCit7CisgIHVfaW50OF90CXRjcGlfc3RhdGU7CisgIHVfaW50OF90CXRjcGlfY2Ffc3RhdGU7CisgIHVfaW50OF90CXRjcGlfcmV0cmFuc21pdHM7CisgIHVfaW50OF90CXRjcGlfcHJvYmVzOworICB1X2ludDhfdAl0Y3BpX2JhY2tvZmY7CisgIHVfaW50OF90CXRjcGlfb3B0aW9uczsKKyAgdV9pbnQ4X3QJdGNwaV9zbmRfd3NjYWxlIDogNCwgdGNwaV9yY3Zfd3NjYWxlIDogNDsKKworICB1X2ludDMyX3QJdGNwaV9ydG87CisgIHVfaW50MzJfdAl0Y3BpX2F0bzsKKyAgdV9pbnQzMl90CXRjcGlfc25kX21zczsKKyAgdV9pbnQzMl90CXRjcGlfcmN2X21zczsKKworICB1X2ludDMyX3QJdGNwaV91bmFja2VkOworICB1X2ludDMyX3QJdGNwaV9zYWNrZWQ7CisgIHVfaW50MzJfdAl0Y3BpX2xvc3Q7CisgIHVfaW50MzJfdAl0Y3BpX3JldHJhbnM7CisgIHVfaW50MzJfdAl0Y3BpX2ZhY2tldHM7CisKKyAgLyogVGltZXMuICovCisgIHVfaW50MzJfdAl0Y3BpX2xhc3RfZGF0YV9zZW50OworICB1X2ludDMyX3QJdGNwaV9sYXN0X2Fja19zZW50OwkvKiBOb3QgcmVtZW1iZXJlZCwgc29ycnkuICAqLworICB1X2ludDMyX3QJdGNwaV9sYXN0X2RhdGFfcmVjdjsKKyAgdV9pbnQzMl90CXRjcGlfbGFzdF9hY2tfcmVjdjsKKworICAvKiBNZXRyaWNzLiAqLworICB1X2ludDMyX3QJdGNwaV9wbXR1OworICB1X2ludDMyX3QJdGNwaV9yY3Zfc3N0aHJlc2g7CisgIHVfaW50MzJfdAl0Y3BpX3J0dDsKKyAgdV9pbnQzMl90CXRjcGlfcnR0dmFyOworICB1X2ludDMyX3QJdGNwaV9zbmRfc3N0aHJlc2g7CisgIHVfaW50MzJfdAl0Y3BpX3NuZF9jd25kOworICB1X2ludDMyX3QJdGNwaV9hZHZtc3M7CisgIHVfaW50MzJfdAl0Y3BpX3Jlb3JkZXJpbmc7CisKKyAgdV9pbnQzMl90CXRjcGlfcmN2X3J0dDsKKyAgdV9pbnQzMl90CXRjcGlfcmN2X3NwYWNlOworCisgIHVfaW50MzJfdAl0Y3BpX3RvdGFsX3JldHJhbnM7Cit9OworCisKKy8qIEZvciBUQ1BfTUQ1U0lHIHNvY2tldCBvcHRpb24uICAqLworI2RlZmluZSBUQ1BfTUQ1U0lHX01BWEtFWUxFTgk4MAorCitzdHJ1Y3QgdGNwX21kNXNpZworeworICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSB0Y3BtX2FkZHI7CQkvKiBBZGRyZXNzIGFzc29jaWF0ZWQuICAqLworICB1X2ludDE2X3QJX190Y3BtX3BhZDE7CQkJLyogWmVyby4gICovCisgIHVfaW50MTZfdAl0Y3BtX2tleWxlbjsJCQkvKiBLZXkgbGVuZ3RoLiAgKi8KKyAgdV9pbnQzMl90CV9fdGNwbV9wYWQyOwkJCS8qIFplcm8uICAqLworICB1X2ludDhfdAl0Y3BtX2tleVtUQ1BfTUQ1U0lHX01BWEtFWUxFTl07CS8qIEtleSAoYmluYXJ5KS4gICovCit9OworCisjZW5kaWYgLyogTWlzYy4gICovCisKKyNlbmRpZiAvKiBuZXRpbmV0L3RjcC5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0aW5ldC91ZHAuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXRpbmV0L3VkcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YjY5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0aW5ldC91ZHAuaApAQCAtMCwwICsxLDc5IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTEsIDkyLCA5MywgOTUsIDk2LCA5NywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyoKKyAqIENvcHlyaWdodCAoQykgMTk4MiwgMTk4NiBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9fTkVUSU5FVF9VRFBfSAorI2RlZmluZSBfX05FVElORVRfVURQX0ggICAgMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworCisvKiBVRFAgaGVhZGVyIGFzIHNwZWNpZmllZCBieSBSRkMgNzY4LCBBdWd1c3QgMTk4MC4gKi8KKyNpZmRlZiBfX0ZBVk9SX0JTRAorCitzdHJ1Y3QgdWRwaGRyCit7CisgIHVfaW50MTZfdCB1aF9zcG9ydDsJCS8qIHNvdXJjZSBwb3J0ICovCisgIHVfaW50MTZfdCB1aF9kcG9ydDsJCS8qIGRlc3RpbmF0aW9uIHBvcnQgKi8KKyAgdV9pbnQxNl90IHVoX3VsZW47CQkvKiB1ZHAgbGVuZ3RoICovCisgIHVfaW50MTZfdCB1aF9zdW07CQkvKiB1ZHAgY2hlY2tzdW0gKi8KK307CisKKyNlbHNlCisKK3N0cnVjdCB1ZHBoZHIKK3sKKyAgdV9pbnQxNl90IHNvdXJjZTsKKyAgdV9pbnQxNl90IGRlc3Q7CisgIHVfaW50MTZfdCBsZW47CisgIHVfaW50MTZfdCBjaGVjazsKK307CisjZW5kaWYKKworI2RlZmluZSBTT0xfVURQICAgICAgICAgICAgMTcgICAgICAvKiBzb2Nrb3B0IGxldmVsIGZvciBVRFAgKi8KKworI2VuZGlmIC8qIG5ldGluZXQvdWRwLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXRpcHgvaXB4LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0aXB4L2lweC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYjQyZWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0aXB4L2lweC5oCkBAIC0wLDAgKzEsMTEzIEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTEsIDkyLCA5MywgOTUsIDk2LCA5NywgOTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX19ORVRJUFhfSVBYX0gKKyNkZWZpbmUgX19ORVRJUFhfSVBYX0ggMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGJpdHMvc29ja2FkZHIuaD4KKworX19CRUdJTl9ERUNMUworCisjZGVmaW5lIFNPTF9JUFggICAgMjU2ICAgICAgICAgIC8qIHNvY2tvcHQgbGV2ZWwgKi8KKworI2RlZmluZSBJUFhfVFlQRSAgICAgICAgMQorI2RlZmluZSBJUFhfTk9ERV9MRU4JNgorI2RlZmluZSBJUFhfTVRVCQk1NzYKKworc3RydWN0IHNvY2thZGRyX2lweAorICB7CisgICAgc2FfZmFtaWx5X3Qgc2lweF9mYW1pbHk7CisgICAgdV9pbnQxNl90IHNpcHhfcG9ydDsKKyAgICB1X2ludDMyX3Qgc2lweF9uZXR3b3JrOworICAgIHVuc2lnbmVkIGNoYXIgc2lweF9ub2RlW0lQWF9OT0RFX0xFTl07CisgICAgdV9pbnQ4X3Qgc2lweF90eXBlOworICAgIHVuc2lnbmVkIGNoYXIgc2lweF96ZXJvOwkvKiAxNiBieXRlIGZpbGwgKi8KKyAgfTsKKworLyoKKyAqCVNvIHdlIGNhbiBmaXQgdGhlIGV4dHJhIGluZm8gZm9yIFNJT0NTSUZBRERSIGludG8gdGhlIGFkZHJlc3MgbmljZWx5CisgKi8KKworI2RlZmluZSBzaXB4X3NwZWNpYWwJc2lweF9wb3J0CisjZGVmaW5lIHNpcHhfYWN0aW9uCXNpcHhfemVybworI2RlZmluZSBJUFhfRExUSVRGCTAKKyNkZWZpbmUgSVBYX0NSVElURgkxCisKK3R5cGVkZWYgc3RydWN0IGlweF9yb3V0ZV9kZWZpbml0aW9uCisgIHsKKyAgICB1bnNpZ25lZCBsb25nIGlweF9uZXR3b3JrOworICAgIHVuc2lnbmVkIGxvbmcgaXB4X3JvdXRlcl9uZXR3b3JrOworICAgIHVuc2lnbmVkIGNoYXIgaXB4X3JvdXRlcl9ub2RlW0lQWF9OT0RFX0xFTl07CisgIH0KK2lweF9yb3V0ZV9kZWZpbml0aW9uOworCit0eXBlZGVmIHN0cnVjdCBpcHhfaW50ZXJmYWNlX2RlZmluaXRpb24KKyAgeworICAgIHVuc2lnbmVkIGxvbmcgaXB4X25ldHdvcms7CisgICAgdW5zaWduZWQgY2hhciBpcHhfZGV2aWNlWzE2XTsKKyAgICB1bnNpZ25lZCBjaGFyIGlweF9kbGlua190eXBlOworI2RlZmluZSBJUFhfRlJBTUVfTk9ORQkJMAorI2RlZmluZSBJUFhfRlJBTUVfU05BUAkJMQorI2RlZmluZSBJUFhfRlJBTUVfODAyMgkJMgorI2RlZmluZSBJUFhfRlJBTUVfRVRIRVJJSQkzCisjZGVmaW5lIElQWF9GUkFNRV84MDIzCQk0CisjZGVmaW5lIElQWF9GUkFNRV9UUl84MDIyCTUKKyAgICB1bnNpZ25lZCBjaGFyIGlweF9zcGVjaWFsOworI2RlZmluZSBJUFhfU1BFQ0lBTF9OT05FCTAKKyNkZWZpbmUgSVBYX1BSSU1BUlkJCTEKKyNkZWZpbmUgSVBYX0lOVEVSTkFMCQkyCisgICAgdW5zaWduZWQgY2hhciBpcHhfbm9kZVtJUFhfTk9ERV9MRU5dOworICB9CitpcHhfaW50ZXJmYWNlX2RlZmluaXRpb247CisKK3R5cGVkZWYgc3RydWN0IGlweF9jb25maWdfZGF0YQorICB7CisgICAgdW5zaWduZWQgY2hhciBpcHhjZmdfYXV0b19zZWxlY3RfcHJpbWFyeTsKKyAgICB1bnNpZ25lZCBjaGFyIGlweGNmZ19hdXRvX2NyZWF0ZV9pbnRlcmZhY2VzOworICB9CitpcHhfY29uZmlnX2RhdGE7CisKKy8qCisgKiBPTEQgUm91dGUgRGVmaW5pdGlvbiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKyAqLworCitzdHJ1Y3QgaXB4X3JvdXRlX2RlZgorICB7CisgICAgdW5zaWduZWQgbG9uZyBpcHhfbmV0d29yazsKKyAgICB1bnNpZ25lZCBsb25nIGlweF9yb3V0ZXJfbmV0d29yazsKKyNkZWZpbmUgSVBYX1JPVVRFX05PX1JPVVRFUgkwCisgICAgdW5zaWduZWQgY2hhciBpcHhfcm91dGVyX25vZGVbSVBYX05PREVfTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIGlweF9kZXZpY2VbMTZdOworICAgIHVuc2lnbmVkIHNob3J0IGlweF9mbGFnczsKKyNkZWZpbmUgSVBYX1JUX1NOQVAJCTgKKyNkZWZpbmUgSVBYX1JUXzgwMjIJCTQKKyNkZWZpbmUgSVBYX1JUX0JMVUVCT09LCQkyCisjZGVmaW5lIElQWF9SVF9ST1VURUQJCTEKKyAgfTsKKworI2RlZmluZSBTSU9DQUlQWElURkNSVAkJKFNJT0NQUk9UT1BSSVZBVEUpCisjZGVmaW5lIFNJT0NBSVBYUFJJU0xUCQkoU0lPQ1BST1RPUFJJVkFURSArIDEpCisjZGVmaW5lIFNJT0NJUFhDRkdEQVRBCQkoU0lPQ1BST1RPUFJJVkFURSArIDIpCisjZGVmaW5lIFNJT0NJUFhOQ1BDT05OCQkoU0lPQ1BST1RPUFJJVkFURSArIDMpCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBuZXRpcHgvaXB4LmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXRpdWN2L2l1Y3YuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXRpdWN2L2l1Y3YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzllYmZmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldGl1Y3YvaXVjdi5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfX05FVElVQ1ZfSVVDVl9ICisjZGVmaW5lIF9fTkVUSVVDVl9JVUNWX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxiaXRzL3NvY2thZGRyLmg+CisKK19fQkVHSU5fREVDTFMKKworc3RydWN0IHNvY2thZGRyX2l1Y3YKKyAgeworICAgIF9fU09DS0FERFJfQ09NTU9OIChzaXVjdl8pOworICAgIHVuc2lnbmVkIHNob3J0CXNpdWN2X3BvcnQ7CQkvKiBSZXNlcnZlZCAqLworICAgIHVuc2lnbmVkIGludAlzaXVjdl9hZGRyOwkJLyogUmVzZXJ2ZWQgKi8KKyAgICBjaGFyCQlzaXVjdl9ub2RlaWRbOF07CS8qIFJlc2VydmVkICovCisgICAgY2hhcgkJc2l1Y3ZfdXNlcl9pZFs4XTsJLyogR3Vlc3QgVXNlciBJZCAqLworICAgIGNoYXIJCXNpdWN2X25hbWVbOF07CQkvKiBBcHBsaWNhdGlvbiBOYW1lICovCisgIH07CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldHBhY2tldC9wYWNrZXQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXRwYWNrZXQvcGFja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM2MzQyOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9uZXRwYWNrZXQvcGFja2V0LmgKQEAgLTAsMCArMSw2NCBAQAorLyogRGVmaW5pdGlvbnMgZm9yIHVzZSB3aXRoIExpbnV4IEFGX1BBQ0tFVCBzb2NrZXRzLgorICAgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9fTkVUUEFDS0VUX1BBQ0tFVF9ICisjZGVmaW5lIF9fTkVUUEFDS0VUX1BBQ0tFVF9ICTEKKworc3RydWN0IHNvY2thZGRyX2xsCisgIHsKKyAgICB1bnNpZ25lZCBzaG9ydCBpbnQgc2xsX2ZhbWlseTsKKyAgICB1bnNpZ25lZCBzaG9ydCBpbnQgc2xsX3Byb3RvY29sOworICAgIGludCBzbGxfaWZpbmRleDsKKyAgICB1bnNpZ25lZCBzaG9ydCBpbnQgc2xsX2hhdHlwZTsKKyAgICB1bnNpZ25lZCBjaGFyIHNsbF9wa3R0eXBlOworICAgIHVuc2lnbmVkIGNoYXIgc2xsX2hhbGVuOworICAgIHVuc2lnbmVkIGNoYXIgc2xsX2FkZHJbOF07CisgIH07CisKKy8qIFBhY2tldCB0eXBlcy4gICovCisKKyNkZWZpbmUgUEFDS0VUX0hPU1QJCTAJCS8qIFRvIHVzLiAgKi8KKyNkZWZpbmUgUEFDS0VUX0JST0FEQ0FTVAkxCQkvKiBUbyBhbGwuICAqLworI2RlZmluZSBQQUNLRVRfTVVMVElDQVNUCTIJCS8qIFRvIGdyb3VwLiAgKi8KKyNkZWZpbmUgUEFDS0VUX09USEVSSE9TVAkzCQkvKiBUbyBzb21lb25lIGVsc2UuICAqLworI2RlZmluZSBQQUNLRVRfT1VUR09JTkcJCTQJCS8qIE9yaWdpbmF0ZWQgYnkgdXMgLiAqLworI2RlZmluZSBQQUNLRVRfTE9PUEJBQ0sJCTUKKyNkZWZpbmUgUEFDS0VUX0ZBU1RST1VURQk2CisKKy8qIFBhY2tldCBzb2NrZXQgb3B0aW9ucy4gICovCisKKyNkZWZpbmUgUEFDS0VUX0FERF9NRU1CRVJTSElQCQkxCisjZGVmaW5lIFBBQ0tFVF9EUk9QX01FTUJFUlNISVAJCTIKKyNkZWZpbmUJUEFDS0VUX1JFQ1ZfT1VUUFVUCQkzCisjZGVmaW5lCVBBQ0tFVF9SWF9SSU5HCQkJNQorI2RlZmluZQlQQUNLRVRfU1RBVElTVElDUwkJNgorCitzdHJ1Y3QgcGFja2V0X21yZXEKKyAgeworICAgIGludCBtcl9pZmluZGV4OworICAgIHVuc2lnbmVkIHNob3J0IGludCBtcl90eXBlOworICAgIHVuc2lnbmVkIHNob3J0IGludCBtcl9hbGVuOworICAgIHVuc2lnbmVkIGNoYXIgbXJfYWRkcmVzc1s4XTsKKyAgfTsKKworI2RlZmluZSBQQUNLRVRfTVJfTVVMVElDQVNUCTAKKyNkZWZpbmUgUEFDS0VUX01SX1BST01JU0MJMQorI2RlZmluZSBQQUNLRVRfTVJfQUxMTVVMVEkJMgorCisjZW5kaWYJLyogbmV0cGFja2V0L3BhY2tldC5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0cm9tL25ldHJvbS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldHJvbS9uZXRyb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTg0NzcyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldHJvbS9uZXRyb20uaApAQCAtMCwwICsxLDg0IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX05FVFJPTV9ORVRST01fSAorI2RlZmluZSBfTkVUUk9NX05FVFJPTV9ICTEKKworI2luY2x1ZGUgPG5ldGF4MjUvYXgyNS5oPgorCisvKiBTZXRzb2Nrb3B0aW9ucygyKSBsZXZlbC4gIFRoYW5rcyB0byBCU0QgdGhlc2UgbXVzdCBtYXRjaCBJUFBST1RPX3h4eC4gICovCisjZGVmaW5lIFNPTF9ORVRST00JMjU5CisKKy8qIE5ldFJvbSBjb250cm9sIHZhbHVlczogKi8KKyNkZWZpbmUgTkVUUk9NX1QxCTEKKyNkZWZpbmUgTkVUUk9NX1QyCTIKKyNkZWZpbmUgTkVUUk9NX04yCTMKKyNkZWZpbmUgTkVUUk9NX1BBQ0xFTgk1CisjZGVmaW5lCU5FVFJPTV9UNAk2CisjZGVmaW5lIE5FVFJPTV9JRExFCTcKKworI2RlZmluZSBORVRST01fS0lMTAk5OQorCisvKiBUeXBlIG9mIHJvdXRlOiAqLworI2RlZmluZSBORVRST01fTkVJR0ggICAgMAorI2RlZmluZSBORVRST01fTk9ERSAgICAgMQorCitzdHJ1Y3QgbnJfcm91dGVfc3RydWN0CisgIHsKKyAgICBpbnQgdHlwZTsKKyAgICBheDI1X2FkZHJlc3MgY2FsbHNpZ247CisgICAgY2hhciBkZXZpY2VbMTZdOworICAgIHVuc2lnbmVkIGludCBxdWFsaXR5OworICAgIGNoYXIgbW5lbW9uaWNbN107CisgICAgYXgyNV9hZGRyZXNzIG5laWdoYm91cjsKKyAgICB1bnNpZ25lZCBpbnQgb2JzX2NvdW50OworICAgIHVuc2lnbmVkIGludCBuZGlnaXM7CisgICAgYXgyNV9hZGRyZXNzIGRpZ2lwZWF0ZXJzW0FYMjVfTUFYX0RJR0lTXTsKKyAgfTsKKworLyogTmV0Um9tIHNvY2tldCBpb2N0bHM6ICovCisjZGVmaW5lCVNJT0NOUkdFVFBBUk1TCQkoU0lPQ1BST1RPUFJJVkFURSswKQorI2RlZmluZQlTSU9DTlJTRVRQQVJNUwkJKFNJT0NQUk9UT1BSSVZBVEUrMSkKKyNkZWZpbmUJU0lPQ05SREVDT0JTCQkoU0lPQ1BST1RPUFJJVkFURSsyKQorI2RlZmluZQlTSU9DTlJSVENUTAkJKFNJT0NQUk9UT1BSSVZBVEUrMykKKyNkZWZpbmUJU0lPQ05SQ1RMQ09OCQkoU0lPQ1BST1RPUFJJVkFURSs0KQorCisvKiBOZXRSb20gcGFyYW1ldGVyIHN0cnVjdHVyZTogKi8KK3N0cnVjdCBucl9wYXJtc19zdHJ1Y3QKKyAgeworICAgIHVuc2lnbmVkIGludCBxdWFsaXR5OworICAgIHVuc2lnbmVkIGludCBvYnNfY291bnQ7CisgICAgdW5zaWduZWQgaW50IHR0bDsKKyAgICB1bnNpZ25lZCBpbnQgdGltZW91dDsKKyAgICB1bnNpZ25lZCBpbnQgYWNrX2RlbGF5OworICAgIHVuc2lnbmVkIGludCBidXN5X2RlbGF5OworICAgIHVuc2lnbmVkIGludCB0cmllczsKKyAgICB1bnNpZ25lZCBpbnQgd2luZG93OworICAgIHVuc2lnbmVkIGludCBwYWNsZW47CisgIH07CisKKy8qIE5ldFJvbSBjb250cm9sIHN0cnVjdHVyZTogKi8KK3N0cnVjdCBucl9jdGxfc3RydWN0CisgIHsKKyAgICB1bnNpZ25lZCBjaGFyIGluZGV4OworICAgIHVuc2lnbmVkIGNoYXIgaWQ7CisgICAgdW5zaWduZWQgaW50IGNtZDsKKyAgICB1bnNpZ25lZCBsb25nIGFyZzsKKyAgfTsKKworI2VuZGlmIC8qIG5ldHJvbS9uZXRyb20uaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldHJvc2Uvcm9zZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25ldHJvc2Uvcm9zZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YmE3ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0cm9zZS9yb3NlLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8qIERlZmluaXRpb25zIGZvciBSb3NlIHBhY2tldCByYWRpbyBhZGRyZXNzIGZhbWlseS4KKyAgIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyogV2hhdCBmb2xsb3dzIGlzIGNvcGllZCBmcm9tIHRoZSAyLjEuOTMgPGxpbnV4L3Jvc2UuaD4uICAqLworCisjaWZuZGVmIF9ORVRST1NFX1JPU0VfSAorI2RlZmluZSBfTkVUUk9TRV9ST1NFX0ggMQorCisvKiBTb2NrZXQgbGV2ZWwgdmFsdWVzLiAgKi8KKyNkZWZpbmUgU09MX1JPU0UgICAgICAgIDI2MAorCisKKy8qIFRoZXNlIGFyZSB0aGUgcHVibGljIGVsZW1lbnRzIG9mIHRoZSBMaW51eCBrZXJuZWwgUm9zZQorICAgaW1wbGVtZW50YXRpb24uICBGb3Iga2VybmVsIEFYLjI1IHNlZSB0aGUgZmlsZSBheDI1LmguIFRoaXMgZmlsZQorICAgcmVxdWlyZXMgYXgyNS5oIGZvciB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYXgyNV9hZGRyZXNzIHN0cnVjdHVyZS4gICovCisjZGVmaW5lIFJPU0VfTVRVCTI1MQorCisjZGVmaW5lIFJPU0VfTUFYX0RJR0lTCTYKKworI2RlZmluZQlST1NFX0RFRkVSCTEKKyNkZWZpbmUJUk9TRV9UMQkJMgorI2RlZmluZQlST1NFX1QyCQkzCisjZGVmaW5lCVJPU0VfVDMJCTQKKyNkZWZpbmUJUk9TRV9JRExFCTUKKyNkZWZpbmUJUk9TRV9RQklUSU5DTAk2CisjZGVmaW5lCVJPU0VfSE9MREJBQ0sJNworCisjZGVmaW5lCVNJT0NSU0dDQVVTRQkJKFNJT0NQUk9UT1BSSVZBVEUgKyAwKQorI2RlZmluZQlTSU9DUlNTQ0FVU0UJCShTSU9DUFJPVE9QUklWQVRFICsgMSkKKyNkZWZpbmUJU0lPQ1JTTDJDQUxMCQkoU0lPQ1BST1RPUFJJVkFURSArIDIpCisjZGVmaW5lCVNJT0NSU1NMMkNBTEwJCShTSU9DUFJPVE9QUklWQVRFICsgMikKKyNkZWZpbmUJU0lPQ1JTQUNDRVBUCQkoU0lPQ1BST1RPUFJJVkFURSArIDMpCisjZGVmaW5lCVNJT0NSU0NMUlJUCQkoU0lPQ1BST1RPUFJJVkFURSArIDQpCisjZGVmaW5lCVNJT0NSU0dMMkNBTEwJCShTSU9DUFJPVE9QUklWQVRFICsgNSkKKyNkZWZpbmUJU0lPQ1JTR0ZBQ0lMSVRJRVMJKFNJT0NQUk9UT1BSSVZBVEUgKyA2KQorCisjZGVmaW5lCVJPU0VfRFRFX09SSUdJTkFURUQJMHgwMAorI2RlZmluZQlST1NFX05VTUJFUl9CVVNZCTB4MDEKKyNkZWZpbmUJUk9TRV9JTlZBTElEX0ZBQ0lMSVRZCTB4MDMKKyNkZWZpbmUJUk9TRV9ORVRXT1JLX0NPTkdFU1RJT04JMHgwNQorI2RlZmluZQlST1NFX09VVF9PRl9PUkRFUgkweDA5CisjZGVmaW5lCVJPU0VfQUNDRVNTX0JBUlJFRAkweDBCCisjZGVmaW5lCVJPU0VfTk9UX09CVEFJTkFCTEUJMHgwRAorI2RlZmluZQlST1NFX1JFTU9URV9QUk9DRURVUkUJMHgxMQorI2RlZmluZQlST1NFX0xPQ0FMX1BST0NFRFVSRQkweDEzCisjZGVmaW5lCVJPU0VfU0hJUF9BQlNFTlQJMHgzOQorCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGNoYXIgcm9zZV9hZGRyWzVdOworfSByb3NlX2FkZHJlc3M7CisKK3N0cnVjdCBzb2NrYWRkcl9yb3NlCit7CisgIHNhX2ZhbWlseV90IHNyb3NlX2ZhbWlseTsKKyAgcm9zZV9hZGRyZXNzIHNyb3NlX2FkZHI7CisgIGF4MjVfYWRkcmVzcyBzcm9zZV9jYWxsOworICBpbnQgc3Jvc2VfbmRpZ2lzOworICBheDI1X2FkZHJlc3MJc3Jvc2VfZGlnaTsKK307CisKK3N0cnVjdCBmdWxsX3NvY2thZGRyX3Jvc2UKK3sKKyAgc2FfZmFtaWx5X3Qgc3Jvc2VfZmFtaWx5OworICByb3NlX2FkZHJlc3Mgc3Jvc2VfYWRkcjsKKyAgYXgyNV9hZGRyZXNzIHNyb3NlX2NhbGw7CisgIHVuc2lnbmVkIGludCBzcm9zZV9uZGlnaXM7CisgIGF4MjVfYWRkcmVzcyBzcm9zZV9kaWdpc1tST1NFX01BWF9ESUdJU107Cit9OworCitzdHJ1Y3Qgcm9zZV9yb3V0ZV9zdHJ1Y3QKK3sKKyAgcm9zZV9hZGRyZXNzIGFkZHJlc3M7CisgIHVuc2lnbmVkIHNob3J0IGludCBtYXNrOworICBheDI1X2FkZHJlc3MJbmVpZ2hib3VyOworICBjaGFyIGRldmljZVsxNl07CisgIHVuc2lnbmVkIGNoYXIJbmRpZ2lzOworICBheDI1X2FkZHJlc3MgZGlnaXBlYXRlcnNbQVgyNV9NQVhfRElHSVNdOworfTsKKworc3RydWN0IHJvc2VfY2F1c2Vfc3RydWN0Cit7CisgIHVuc2lnbmVkIGNoYXIJY2F1c2U7CisgIHVuc2lnbmVkIGNoYXIJZGlhZ25vc3RpYzsKK307CisKK3N0cnVjdCByb3NlX2ZhY2lsaXRpZXNfc3RydWN0Cit7CisgIHJvc2VfYWRkcmVzcyBzb3VyY2VfYWRkciwgICBkZXN0X2FkZHI7CisgIGF4MjVfYWRkcmVzcyBzb3VyY2VfY2FsbCwgICBkZXN0X2NhbGw7CisgIHVuc2lnbmVkIGNoYXIgc291cmNlX25kaWdpcywgZGVzdF9uZGlnaXM7CisgIGF4MjVfYWRkcmVzcyBzb3VyY2VfZGlnaXNbUk9TRV9NQVhfRElHSVNdOworICBheDI1X2FkZHJlc3MgZGVzdF9kaWdpc1tST1NFX01BWF9ESUdJU107CisgIHVuc2lnbmVkIGludCByYW5kOworICByb3NlX2FkZHJlc3MgZmFpbF9hZGRyOworICBheDI1X2FkZHJlc3MgZmFpbF9jYWxsOworfTsKKworI2VuZGlmCS8qIG5ldHJvc2Uvcm9zZS5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmZzL25mcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25mcy9uZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWU0YjY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25mcy9uZnMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8bGludXgvbmZzLmg+CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmxfdHlwZXMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ubF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMTkwYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbmxfdHlwZXMuaApAQCAtMCwwICsxLDU1IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTksIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX05MX1RZUEVTX0gKKyNkZWZpbmUgX05MX1RZUEVTX0ggMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworLyogVGhlIGRlZmF1bHQgbWVzc2FnZSBzZXQgdXNlZCBieSB0aGUgZ2VuY2F0IHByb2dyYW0uICAqLworI2RlZmluZSBOTF9TRVREIDEKKworLyogVmFsdWUgZm9yIEZMQUcgcGFyYW1ldGVyIG9mIGBjYXRnZXRzJyB0byBzYXkgd2Ugd2FudCBYUEc0IGNvbXBsaWFuY2UuICAqLworI2RlZmluZSBOTF9DQVRfTE9DQUxFIDEKKworCitfX0JFR0lOX0RFQ0xTCisKKy8qIE1lc3NhZ2UgY2F0YWxvZyBkZXNjcmlwdG9yIHR5cGUuICAqLwordHlwZWRlZiB2b2lkICpubF9jYXRkOworCisvKiBUeXBlIHVzZWQgYnkgYG5sX2xhbmdpbmZvJy4gICovCit0eXBlZGVmIGludCBubF9pdGVtOworCisvKiBPcGVuIG1lc3NhZ2UgY2F0YWxvZyBmb3IgbGF0ZXIgdXNlLCByZXR1cm5pbmcgZGVzY3JpcHRvci4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gbmxfY2F0ZCBjYXRvcGVuIChfX2NvbnN0IGNoYXIgKl9fY2F0X25hbWUsIGludCBfX2ZsYWcpIF9fbm9ubnVsbCAoKDEpKTsKKworLyogUmV0dXJuIHRyYW5zbGF0aW9uIHdpdGggTlVNQkVSIGluIFNFVCBvZiBDQVRBTE9HOyBpZiBub3QgZm91bmQKKyAgIHJldHVybiBTVFJJTkcuICAqLworZXh0ZXJuIGNoYXIgKmNhdGdldHMgKG5sX2NhdGQgX19jYXRhbG9nLCBpbnQgX19zZXQsIGludCBfX251bWJlciwKKwkJICAgICAgX19jb25zdCBjaGFyICpfX3N0cmluZykgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKy8qIENsb3NlIG1lc3NhZ2UgQ0FUQUxPRy4gICovCitleHRlcm4gaW50IGNhdGNsb3NlIChubF9jYXRkIF9fY2F0YWxvZykgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBubF90eXBlcy5oICAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25zcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL25zcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMWIyNTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvbnNzLmgKQEAgLTAsMCArMSw2NCBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk5LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisvKiBEZWZpbmUgaW50ZXJmYWNlIHRvIE5TUy4gIFRoaXMgaXMgbWVhbnQgZm9yIHRoZSBpbnRlcmZhY2UgZnVuY3Rpb25zCisgICBhbmQgZm9yIGltcGxlbWVudG9ycyBvZiBuZXcgc2VydmljZXMuICAqLworCisjaWZuZGVmIF9OU1NfSAorI2RlZmluZSBfTlNTX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworCitfX0JFR0lOX0RFQ0xTCisKKy8qIFBvc3NpYmxlIHJlc3VsdHMgb2YgbG9va3VwIHVzaW5nIGEgbnNzXyogZnVuY3Rpb24uICAqLworZW51bSBuc3Nfc3RhdHVzCit7CisgIE5TU19TVEFUVVNfVFJZQUdBSU4gPSAtMiwKKyAgTlNTX1NUQVRVU19VTkFWQUlMLAorICBOU1NfU1RBVFVTX05PVEZPVU5ELAorICBOU1NfU1RBVFVTX1NVQ0NFU1MsCisgIE5TU19TVEFUVVNfUkVUVVJOCit9OworCisKKy8qIERhdGEgc3RydWN0dXJlIHVzZWQgZm9yIHRoZSAnZ2V0aG9zdGJ5bmFtZTRfcicgZnVuY3Rpb24uICAqLworc3RydWN0IGdhaWhfYWRkcnR1cGxlCisgIHsKKyAgICBzdHJ1Y3QgZ2FpaF9hZGRydHVwbGUgKm5leHQ7CisgICAgY2hhciAqbmFtZTsKKyAgICBpbnQgZmFtaWx5OworICAgIHVpbnQzMl90IGFkZHJbNF07CisgICAgdWludDMyX3Qgc2NvcGVpZDsKKyAgfTsKKworCisvKiBPdmVyd3JpdGUgc2VydmljZSBzZWxlY3Rpb24gZm9yIGRhdGFiYXNlIERCTkFNRSB1c2luZyBzcGVjaWZpY2F0aW9uCisgICBpbiBTVFJJTkcuCisgICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgc3lzdGVtIHByb2dyYW1zIHdoaWNoIGhhdmUgdG8KKyAgIHdvcmsgYXJvdW5kIG5vbi1leGlzdGluZyBzZXJ2aWNlcyAoZS5lLiwgd2hpbGUgYm9vdGluZykuCisgICBBdHRlbnRpb246IFVzaW5nIHRoaXMgZnVuY3Rpb24gcmVwZWF0ZWRseSB3aWxsIHNsb3dseSBlYXQgdXAgdGhlCisgICB3aG9sZSBtZW1vcnkgc2luY2UgcHJldmlvdXMgc2VsZWN0aW9uIGRhdGEgY2Fubm90IGJlIGZyZWVkLiAgKi8KK2V4dGVybiBpbnQgX19uc3NfY29uZmlndXJlX2xvb2t1cCAoX19jb25zdCBjaGFyICpfX2RibmFtZSwKKwkJCQkgICBfX2NvbnN0IGNoYXIgKl9fc3RyaW5nKSBfX1RIUk9XOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogbnNzLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9vYnN0YWNrLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvb2JzdGFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNmZlNTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvb2JzdGFjay5oCkBAIC0wLDAgKzEsNTA5IEBACisvKiBvYnN0YWNrLmggLSBvYmplY3Qgc3RhY2sgbWFjcm9zCisgICBDb3B5cmlnaHQgKEMpIDE5ODgtMTk5NCwxOTk2LTE5OTksMjAwMywyMDA0LDIwMDUKKwlGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogU3VtbWFyeToKKworQWxsIHRoZSBhcHBhcmVudCBmdW5jdGlvbnMgZGVmaW5lZCBoZXJlIGFyZSBtYWNyb3MuIFRoZSBpZGVhCitpcyB0aGF0IHlvdSB3b3VsZCB1c2UgdGhlc2UgcHJlLXRlc3RlZCBtYWNyb3MgdG8gc29sdmUgYQordmVyeSBzcGVjaWZpYyBzZXQgb2YgcHJvYmxlbXMsIGFuZCB0aGV5IHdvdWxkIHJ1biBmYXN0LgorQ2F1dGlvbjogbm8gc2lkZS1lZmZlY3RzIGluIGFyZ3VtZW50cyBwbGVhc2UhISBUaGV5IG1heSBiZQorZXZhbHVhdGVkIE1BTlkgdGltZXMhIQorCitUaGVzZSBtYWNyb3Mgb3BlcmF0ZSBhIHN0YWNrIG9mIG9iamVjdHMuICBFYWNoIG9iamVjdCBzdGFydHMgbGlmZQorc21hbGwsIGFuZCBtYXkgZ3JvdyB0byBtYXR1cml0eS4gIChDb25zaWRlciBidWlsZGluZyBhIHdvcmQgc3lsbGFibGUKK2J5IHN5bGxhYmxlLikgIEFuIG9iamVjdCBjYW4gbW92ZSB3aGlsZSBpdCBpcyBncm93aW5nLiAgT25jZSBpdCBoYXMKK2JlZW4gImZpbmlzaGVkIiBpdCBuZXZlciBjaGFuZ2VzIGFkZHJlc3MgYWdhaW4uICBTbyB0aGUgInRvcCBvZiB0aGUKK3N0YWNrIiBpcyB0eXBpY2FsbHkgYW4gaW1tYXR1cmUgZ3Jvd2luZyBvYmplY3QsIHdoaWxlIHRoZSByZXN0IG9mIHRoZQorc3RhY2sgaXMgb2YgbWF0dXJlLCBmaXhlZCBzaXplIGFuZCBmaXhlZCBhZGRyZXNzIG9iamVjdHMuCisKK1RoZXNlIHJvdXRpbmVzIGdyYWIgbGFyZ2UgY2h1bmtzIG9mIG1lbW9yeSwgdXNpbmcgYSBmdW5jdGlvbiB5b3UKK3N1cHBseSwgY2FsbGVkIGBvYnN0YWNrX2NodW5rX2FsbG9jJy4gIE9uIG9jY2FzaW9uLCB0aGV5IGZyZWUgY2h1bmtzLAorYnkgY2FsbGluZyBgb2JzdGFja19jaHVua19mcmVlJy4gIFlvdSBtdXN0IGRlZmluZSB0aGVtIGFuZCBkZWNsYXJlCit0aGVtIGJlZm9yZSB1c2luZyBhbnkgb2JzdGFjayBtYWNyb3MuCisKK0VhY2ggaW5kZXBlbmRlbnQgc3RhY2sgaXMgcmVwcmVzZW50ZWQgYnkgYSBgc3RydWN0IG9ic3RhY2snLgorRWFjaCBvZiB0aGUgb2JzdGFjayBtYWNyb3MgZXhwZWN0cyBhIHBvaW50ZXIgdG8gc3VjaCBhIHN0cnVjdHVyZQorYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgorCitPbmUgbW90aXZhdGlvbiBmb3IgdGhpcyBwYWNrYWdlIGlzIHRoZSBwcm9ibGVtIG9mIGdyb3dpbmcgY2hhciBzdHJpbmdzCitpbiBzeW1ib2wgdGFibGVzLiAgVW5sZXNzIHlvdSBhcmUgImZhc2Npc3QgcGlnIHdpdGggYSByZWFkLW9ubHkgbWluZCIKKy0tR29zcGVyJ3MgaW1tb3J0YWwgcXVvdGUgZnJvbSBIQUtNRU0gaXRlbSAxNTQsIG91dCBvZiBjb250ZXh0LS15b3UKK3dvdWxkIG5vdCBsaWtlIHRvIHB1dCBhbnkgYXJiaXRyYXJ5IHVwcGVyIGxpbWl0IG9uIHRoZSBsZW5ndGggb2YgeW91cgorc3ltYm9scy4KKworSW4gcHJhY3RpY2UgdGhpcyBvZnRlbiBtZWFucyB5b3Ugd2lsbCBidWlsZCBtYW55IHNob3J0IHN5bWJvbHMgYW5kIGEKK2ZldyBsb25nIHN5bWJvbHMuICBBdCB0aGUgdGltZSB5b3UgYXJlIHJlYWRpbmcgYSBzeW1ib2wgeW91IGRvbid0IGtub3cKK2hvdyBsb25nIGl0IGlzLiAgT25lIHRyYWRpdGlvbmFsIG1ldGhvZCBpcyB0byByZWFkIGEgc3ltYm9sIGludG8gYQorYnVmZmVyLCByZWFsbG9jKClhdGluZyB0aGUgYnVmZmVyIGV2ZXJ5IHRpbWUgeW91IHRyeSB0byByZWFkIGEgc3ltYm9sCit0aGF0IGlzIGxvbmdlciB0aGFuIHRoZSBidWZmZXIuICBUaGlzIGlzIGJlYXV0LCBidXQgeW91IHN0aWxsIHdpbGwKK3dhbnQgdG8gY29weSB0aGUgc3ltYm9sIGZyb20gdGhlIGJ1ZmZlciB0byBhIG1vcmUgcGVybWFuZW50CitzeW1ib2wtdGFibGUgZW50cnkgc2F5IGFib3V0IGhhbGYgdGhlIHRpbWUuCisKK1dpdGggb2JzdGFja3MsIHlvdSBjYW4gd29yayBkaWZmZXJlbnRseS4gIFVzZSBvbmUgb2JzdGFjayBmb3IgYWxsIHN5bWJvbAorbmFtZXMuICBBcyB5b3UgcmVhZCBhIHN5bWJvbCwgZ3JvdyB0aGUgbmFtZSBpbiB0aGUgb2JzdGFjayBncmFkdWFsbHkuCitXaGVuIHRoZSBuYW1lIGlzIGNvbXBsZXRlLCBmaW5hbGl6ZSBpdC4gIFRoZW4sIGlmIHRoZSBzeW1ib2wgZXhpc3RzIGFscmVhZHksCitmcmVlIHRoZSBuZXdseSByZWFkIG5hbWUuCisKK1RoZSB3YXkgd2UgZG8gdGhpcyBpcyB0byB0YWtlIGEgbGFyZ2UgY2h1bmssIGFsbG9jYXRpbmcgbWVtb3J5IGZyb20KK2xvdyBhZGRyZXNzZXMuICBXaGVuIHlvdSB3YW50IHRvIGJ1aWxkIGEgc3ltYm9sIGluIHRoZSBjaHVuayB5b3UganVzdAorYWRkIGNoYXJzIGFib3ZlIHRoZSBjdXJyZW50ICJoaWdoIHdhdGVyIG1hcmsiIGluIHRoZSBjaHVuay4gIFdoZW4geW91CitoYXZlIGZpbmlzaGVkIGFkZGluZyBjaGFycywgYmVjYXVzZSB5b3UgZ290IHRvIHRoZSBlbmQgb2YgdGhlIHN5bWJvbCwKK3lvdSBrbm93IGhvdyBsb25nIHRoZSBjaGFycyBhcmUsIGFuZCB5b3UgY2FuIGNyZWF0ZSBhIG5ldyBvYmplY3QuCitNb3N0bHkgdGhlIGNoYXJzIHdpbGwgbm90IGJ1cnN0IG92ZXIgdGhlIGhpZ2hlc3QgYWRkcmVzcyBvZiB0aGUgY2h1bmssCitiZWNhdXNlIHlvdSB3b3VsZCB0eXBpY2FsbHkgZXhwZWN0IGEgY2h1bmsgdG8gYmUgKHNheSkgMTAwIHRpbWVzIGFzCitsb25nIGFzIGFuIGF2ZXJhZ2Ugb2JqZWN0LgorCitJbiBjYXNlIHRoYXQgaXNuJ3QgY2xlYXIsIHdoZW4gd2UgaGF2ZSBlbm91Z2ggY2hhcnMgdG8gbWFrZSB1cAordGhlIG9iamVjdCwgVEhFWSBBUkUgQUxSRUFEWSBDT05USUdVT1VTIElOIFRIRSBDSFVOSyAoZ3VhcmFudGVlZCkKK3NvIHdlIGp1c3QgcG9pbnQgdG8gaXQgd2hlcmUgaXQgbGllcy4gIE5vIG1vdmluZyBvZiBjaGFycyBpcworbmVlZGVkIGFuZCB0aGlzIGlzIHRoZSBzZWNvbmQgd2luOiBwb3RlbnRpYWxseSBsb25nIHN0cmluZ3MgbmVlZAorbmV2ZXIgYmUgZXhwbGljaXRseSBzaHVmZmxlZC4gT25jZSBhbiBvYmplY3QgaXMgZm9ybWVkLCBpdCBkb2VzIG5vdAorY2hhbmdlIGl0cyBhZGRyZXNzIGR1cmluZyBpdHMgbGlmZXRpbWUuCisKK1doZW4gdGhlIGNoYXJzIGJ1cnN0IG92ZXIgYSBjaHVuayBib3VuZGFyeSwgd2UgYWxsb2NhdGUgYSBsYXJnZXIKK2NodW5rLCBhbmQgdGhlbiBjb3B5IHRoZSBwYXJ0bHkgZm9ybWVkIG9iamVjdCBmcm9tIHRoZSBlbmQgb2YgdGhlIG9sZAorY2h1bmsgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IGxhcmdlciBjaHVuay4gIFdlIHRoZW4gY2Fycnkgb24KK2FjY3JldGluZyBjaGFyYWN0ZXJzIHRvIHRoZSBlbmQgb2YgdGhlIG9iamVjdCBhcyB3ZSBub3JtYWxseSB3b3VsZC4KKworQSBzcGVjaWFsIG1hY3JvIGlzIHByb3ZpZGVkIHRvIGFkZCBhIHNpbmdsZSBjaGFyIGF0IGEgdGltZSB0byBhCitncm93aW5nIG9iamVjdC4gIFRoaXMgYWxsb3dzIHRoZSB1c2Ugb2YgcmVnaXN0ZXIgdmFyaWFibGVzLCB3aGljaAorYnJlYWsgdGhlIG9yZGluYXJ5ICdncm93dGgnIG1hY3JvLgorCitTdW1tYXJ5OgorCVdlIGFsbG9jYXRlIGxhcmdlIGNodW5rcy4KKwlXZSBjYXJ2ZSBvdXQgb25lIG9iamVjdCBhdCBhIHRpbWUgZnJvbSB0aGUgY3VycmVudCBjaHVuay4KKwlPbmNlIGNhcnZlZCwgYW4gb2JqZWN0IG5ldmVyIG1vdmVzLgorCVdlIGFyZSBmcmVlIHRvIGFwcGVuZCBkYXRhIG9mIGFueSBzaXplIHRvIHRoZSBjdXJyZW50bHkKKwkgIGdyb3dpbmcgb2JqZWN0LgorCUV4YWN0bHkgb25lIG9iamVjdCBpcyBncm93aW5nIGluIGFuIG9ic3RhY2sgYXQgYW55IG9uZSB0aW1lLgorCVlvdSBjYW4gcnVuIG9uZSBvYnN0YWNrIHBlciBjb250cm9sIGJsb2NrLgorCVlvdSBtYXkgaGF2ZSBhcyBtYW55IGNvbnRyb2wgYmxvY2tzIGFzIHlvdSBkYXJlLgorCUJlY2F1c2Ugb2YgdGhlIHdheSB3ZSBkbyBpdCwgeW91IGNhbiBgdW53aW5kJyBhbiBvYnN0YWNrCisJICBiYWNrIHRvIGEgcHJldmlvdXMgc3RhdGUuIChZb3UgbWF5IHJlbW92ZSBvYmplY3RzIG11Y2gKKwkgIGFzIHlvdSB3b3VsZCB3aXRoIGEgc3RhY2suKQorKi8KKworCisvKiBEb24ndCBkbyB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1vcmUgdGhhbiBvbmNlLiAgKi8KKworI2lmbmRlZiBfT0JTVEFDS19ICisjZGVmaW5lIF9PQlNUQUNLX0ggMQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisMCisvKiBXZSBuZWVkIHRoZSB0eXBlIG9mIGEgcG9pbnRlciBzdWJ0cmFjdGlvbi4gIElmIF9fUFRSRElGRl9UWVBFX18gaXMKKyAgIGRlZmluZWQsIGFzIHdpdGggR05VIEMsIHVzZSB0aGF0OyB0aGF0IHdheSB3ZSBkb24ndCBwb2xsdXRlIHRoZQorICAgbmFtZXNwYWNlIHdpdGggPHN0ZGRlZi5oPidzIHN5bWJvbHMuICBPdGhlcndpc2UsIGluY2x1ZGUgPHN0ZGRlZi5oPgorICAgYW5kIHVzZSBwdHJkaWZmX3QuICAqLworCisjaWZkZWYgX19QVFJESUZGX1RZUEVfXworIyBkZWZpbmUgUFRSX0lOVF9UWVBFIF9fUFRSRElGRl9UWVBFX18KKyNlbHNlCisjIGluY2x1ZGUgPHN0ZGRlZi5oPgorIyBkZWZpbmUgUFRSX0lOVF9UWVBFIHB0cmRpZmZfdAorI2VuZGlmCisKKy8qIElmIEIgaXMgdGhlIGJhc2Ugb2YgYW4gb2JqZWN0IGFkZHJlc3NlZCBieSBQLCByZXR1cm4gdGhlIHJlc3VsdCBvZgorICAgYWxpZ25pbmcgUCB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiBBICsgMS4gIEIgYW5kIFAgbXVzdCBiZSBvZiB0eXBlCisgICBjaGFyICouICBBICsgMSBtdXN0IGJlIGEgcG93ZXIgb2YgMi4gICovCisKKyNkZWZpbmUgX19CUFRSX0FMSUdOKEIsIFAsIEEpICgoQikgKyAoKChQKSAtIChCKSArIChBKSkgJiB+KEEpKSkKKworLyogU2ltaWxpYXIgdG8gX0JQVFJfQUxJR04gKEIsIFAsIEEpLCBleGNlcHQgb3B0aW1pemUgdGhlIGNvbW1vbiBjYXNlCisgICB3aGVyZSBwb2ludGVycyBjYW4gYmUgY29udmVydGVkIHRvIGludGVnZXJzLCBhbGlnbmVkIGFzIGludGVnZXJzLAorICAgYW5kIGNvbnZlcnRlZCBiYWNrIGFnYWluLiAgSWYgUFRSX0lOVF9UWVBFIGlzIG5hcnJvd2VyIHRoYW4gYQorICAgcG9pbnRlciAoZS5nLiwgdGhlIEFTLzQwMCksIHBsYXkgaXQgc2FmZSBhbmQgY29tcHV0ZSB0aGUgYWxpZ25tZW50CisgICByZWxhdGl2ZSB0byBCLiAgT3RoZXJ3aXNlLCB1c2UgdGhlIGZhc3RlciBzdHJhdGVneSBvZiBjb21wdXRpbmcgdGhlCisgICBhbGlnbm1lbnQgcmVsYXRpdmUgdG8gMC4gICovCisKKyNkZWZpbmUgX19QVFJfQUxJR04oQiwgUCwgQSkJCQkJCQkgICAgXAorICBfX0JQVFJfQUxJR04gKHNpemVvZiAoUFRSX0lOVF9UWVBFKSA8IHNpemVvZiAodm9pZCAqKSA/IChCKSA6IChjaGFyICopIDAsIFwKKwkJUCwgQSkKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCitzdHJ1Y3QgX29ic3RhY2tfY2h1bmsJCS8qIExpdmVzIGF0IGZyb250IG9mIGVhY2ggY2h1bmsuICovCit7CisgIGNoYXIgICpsaW1pdDsJCQkvKiAxIHBhc3QgZW5kIG9mIHRoaXMgY2h1bmsgKi8KKyAgc3RydWN0IF9vYnN0YWNrX2NodW5rICpwcmV2OwkvKiBhZGRyZXNzIG9mIHByaW9yIGNodW5rIG9yIE5VTEwgKi8KKyAgY2hhcgljb250ZW50c1s0XTsJCS8qIG9iamVjdHMgYmVnaW4gaGVyZSAqLworfTsKKworc3RydWN0IG9ic3RhY2sJCS8qIGNvbnRyb2wgY3VycmVudCBvYmplY3QgaW4gY3VycmVudCBjaHVuayAqLworeworICBsb25nCWNodW5rX3NpemU7CQkvKiBwcmVmZXJyZWQgc2l6ZSB0byBhbGxvY2F0ZSBjaHVua3MgaW4gKi8KKyAgc3RydWN0IF9vYnN0YWNrX2NodW5rICpjaHVuazsJLyogYWRkcmVzcyBvZiBjdXJyZW50IHN0cnVjdCBvYnN0YWNrX2NodW5rICovCisgIGNoYXIJKm9iamVjdF9iYXNlOwkJLyogYWRkcmVzcyBvZiBvYmplY3Qgd2UgYXJlIGJ1aWxkaW5nICovCisgIGNoYXIJKm5leHRfZnJlZTsJCS8qIHdoZXJlIHRvIGFkZCBuZXh0IGNoYXIgdG8gY3VycmVudCBvYmplY3QgKi8KKyAgY2hhcgkqY2h1bmtfbGltaXQ7CQkvKiBhZGRyZXNzIG9mIGNoYXIgYWZ0ZXIgY3VycmVudCBjaHVuayAqLworICB1bmlvbgorICB7CisgICAgUFRSX0lOVF9UWVBFIHRlbXBpbnQ7CisgICAgdm9pZCAqdGVtcHB0cjsKKyAgfSB0ZW1wOwkJCS8qIFRlbXBvcmFyeSBmb3Igc29tZSBtYWNyb3MuICAqLworICBpbnQgICBhbGlnbm1lbnRfbWFzazsJCS8qIE1hc2sgb2YgYWxpZ25tZW50IGZvciBlYWNoIG9iamVjdC4gKi8KKyAgLyogVGhlc2UgcHJvdG90eXBlcyB2YXJ5IGJhc2VkIG9uIGB1c2VfZXh0cmFfYXJnJywgYW5kIHdlIHVzZQorICAgICBjYXN0cyB0byB0aGUgcHJvdG90eXBlbGVzcyBmdW5jdGlvbiB0eXBlIGluIGFsbCBhc3NpZ25tZW50cywKKyAgICAgYnV0IGhhdmluZyBwcm90b3R5cGVzIGhlcmUgcXVpZXRzIC1Xc3RyaWN0LXByb3RvdHlwZXMuICAqLworICBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKigqY2h1bmtmdW4pICh2b2lkICosIGxvbmcpOworICB2b2lkICgqZnJlZWZ1bikgKHZvaWQgKiwgc3RydWN0IF9vYnN0YWNrX2NodW5rICopOworICB2b2lkICpleHRyYV9hcmc7CQkvKiBmaXJzdCBhcmcgZm9yIGNodW5rIGFsbG9jL2RlYWxsb2MgZnVuY3MgKi8KKyAgdW5zaWduZWQgdXNlX2V4dHJhX2FyZzoxOwkvKiBjaHVuayBhbGxvYy9kZWFsbG9jIGZ1bmNzIHRha2UgZXh0cmEgYXJnICovCisgIHVuc2lnbmVkIG1heWJlX2VtcHR5X29iamVjdDoxOy8qIFRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhhdCB0aGUgY3VycmVudAorCQkJCSAgIGNodW5rIGNvbnRhaW5zIGEgemVyby1sZW5ndGggb2JqZWN0LiAgVGhpcworCQkJCSAgIHByZXZlbnRzIGZyZWVpbmcgdGhlIGNodW5rIGlmIHdlIGFsbG9jYXRlCisJCQkJICAgYSBiaWdnZXIgY2h1bmsgdG8gcmVwbGFjZSBpdC4gKi8KKyAgdW5zaWduZWQgYWxsb2NfZmFpbGVkOjE7CS8qIE5vIGxvbmdlciB1c2VkLCBhcyB3ZSBub3cgY2FsbCB0aGUgZmFpbGVkCisJCQkJICAgaGFuZGxlciBvbiBlcnJvciwgYnV0IHJldGFpbmVkIGZvciBiaW5hcnkKKwkJCQkgICBjb21wYXRpYmlsaXR5LiAgKi8KK307CisKKy8qIERlY2xhcmUgdGhlIGV4dGVybmFsIGZ1bmN0aW9ucyB3ZSB1c2U7IHRoZXkgYXJlIGluIG9ic3RhY2suYy4gICovCisKK2V4dGVybiB2b2lkIF9vYnN0YWNrX25ld2NodW5rIChzdHJ1Y3Qgb2JzdGFjayAqLCBpbnQpOworZXh0ZXJuIGludCBfb2JzdGFja19iZWdpbiAoc3RydWN0IG9ic3RhY2sgKiwgaW50LCBpbnQsCisJCQkgICAgdm9pZCAqKCopIChsb25nKSwgdm9pZCAoKikgKHZvaWQgKikpOworZXh0ZXJuIGludCBfb2JzdGFja19iZWdpbl8xIChzdHJ1Y3Qgb2JzdGFjayAqLCBpbnQsIGludCwKKwkJCSAgICAgdm9pZCAqKCopICh2b2lkICosIGxvbmcpLAorCQkJICAgICB2b2lkICgqKSAodm9pZCAqLCB2b2lkICopLCB2b2lkICopOworZXh0ZXJuIGludCBfb2JzdGFja19tZW1vcnlfdXNlZCAoc3RydWN0IG9ic3RhY2sgKik7CisKK3ZvaWQgb2JzdGFja19mcmVlIChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjaywgdm9pZCAqYmxvY2spOworCisMCisvKiBFcnJvciBoYW5kbGVyIGNhbGxlZCB3aGVuIGBvYnN0YWNrX2NodW5rX2FsbG9jJyBmYWlsZWQgdG8gYWxsb2NhdGUKKyAgIG1vcmUgbWVtb3J5LiAgVGhpcyBjYW4gYmUgc2V0IHRvIGEgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIHdoaWNoCisgICBzaG91bGQgZWl0aGVyIGFib3J0IGdyYWNlZnVsbHkgb3IgdXNlIGxvbmdqdW1wIC0gYnV0IHNob3VsZG4ndAorICAgcmV0dXJuLiAgVGhlIGRlZmF1bHQgYWN0aW9uIGlzIHRvIHByaW50IGEgbWVzc2FnZSBhbmQgYWJvcnQuICAqLworZXh0ZXJuIHZvaWQgKCpvYnN0YWNrX2FsbG9jX2ZhaWxlZF9oYW5kbGVyKSAodm9pZCk7CisKKy8qIEV4aXQgdmFsdWUgdXNlZCB3aGVuIGBwcmludF9hbmRfYWJvcnQnIGlzIHVzZWQuICAqLworZXh0ZXJuIGludCBvYnN0YWNrX2V4aXRfZmFpbHVyZTsKKwwKKy8qIFBvaW50ZXIgdG8gYmVnaW5uaW5nIG9mIG9iamVjdCBiZWluZyBhbGxvY2F0ZWQgb3IgdG8gYmUgYWxsb2NhdGVkIG5leHQuCisgICBOb3RlIHRoYXQgdGhpcyBtaWdodCBub3QgYmUgdGhlIGZpbmFsIGFkZHJlc3Mgb2YgdGhlIG9iamVjdAorICAgYmVjYXVzZSBhIG5ldyBjaHVuayBtaWdodCBiZSBuZWVkZWQgdG8gaG9sZCB0aGUgZmluYWwgc2l6ZS4gICovCisKKyNkZWZpbmUgb2JzdGFja19iYXNlKGgpICgodm9pZCAqKSAoaCktPm9iamVjdF9iYXNlKQorCisvKiBTaXplIGZvciBhbGxvY2F0aW5nIG9yZGluYXJ5IGNodW5rcy4gICovCisKKyNkZWZpbmUgb2JzdGFja19jaHVua19zaXplKGgpICgoaCktPmNodW5rX3NpemUpCisKKy8qIFBvaW50ZXIgdG8gbmV4dCBieXRlIG5vdCB5ZXQgYWxsb2NhdGVkIGluIGN1cnJlbnQgY2h1bmsuICAqLworCisjZGVmaW5lIG9ic3RhY2tfbmV4dF9mcmVlKGgpCSgoaCktPm5leHRfZnJlZSkKKworLyogTWFzayBzcGVjaWZ5aW5nIGxvdyBiaXRzIHRoYXQgc2hvdWxkIGJlIGNsZWFyIGluIGFkZHJlc3Mgb2YgYW4gb2JqZWN0LiAgKi8KKworI2RlZmluZSBvYnN0YWNrX2FsaWdubWVudF9tYXNrKGgpICgoaCktPmFsaWdubWVudF9tYXNrKQorCisvKiBUbyBwcmV2ZW50IHByb3RvdHlwZSB3YXJuaW5ncyBwcm92aWRlIGNvbXBsZXRlIGFyZ3VtZW50IGxpc3QuICAqLworI2RlZmluZSBvYnN0YWNrX2luaXQoaCkJCQkJCQlcCisgIF9vYnN0YWNrX2JlZ2luICgoaCksIDAsIDAsCQkJCQlcCisJCSAgKHZvaWQgKigqKSAobG9uZykpIG9ic3RhY2tfY2h1bmtfYWxsb2MsCVwKKwkJICAodm9pZCAoKikgKHZvaWQgKikpIG9ic3RhY2tfY2h1bmtfZnJlZSkKKworI2RlZmluZSBvYnN0YWNrX2JlZ2luKGgsIHNpemUpCQkJCQlcCisgIF9vYnN0YWNrX2JlZ2luICgoaCksIChzaXplKSwgMCwJCQkJXAorCQkgICh2b2lkICooKikgKGxvbmcpKSBvYnN0YWNrX2NodW5rX2FsbG9jLAlcCisJCSAgKHZvaWQgKCopICh2b2lkICopKSBvYnN0YWNrX2NodW5rX2ZyZWUpCisKKyNkZWZpbmUgb2JzdGFja19zcGVjaWZ5X2FsbG9jYXRpb24oaCwgc2l6ZSwgYWxpZ25tZW50LCBjaHVua2Z1biwgZnJlZWZ1bikgIFwKKyAgX29ic3RhY2tfYmVnaW4gKChoKSwgKHNpemUpLCAoYWxpZ25tZW50KSwJCQkJICAgXAorCQkgICh2b2lkICooKikgKGxvbmcpKSAoY2h1bmtmdW4pLAkJCSAgIFwKKwkJICAodm9pZCAoKikgKHZvaWQgKikpIChmcmVlZnVuKSkKKworI2RlZmluZSBvYnN0YWNrX3NwZWNpZnlfYWxsb2NhdGlvbl93aXRoX2FyZyhoLCBzaXplLCBhbGlnbm1lbnQsIGNodW5rZnVuLCBmcmVlZnVuLCBhcmcpIFwKKyAgX29ic3RhY2tfYmVnaW5fMSAoKGgpLCAoc2l6ZSksIChhbGlnbm1lbnQpLAkJCQlcCisJCSAgICAodm9pZCAqKCopICh2b2lkICosIGxvbmcpKSAoY2h1bmtmdW4pLAkJXAorCQkgICAgKHZvaWQgKCopICh2b2lkICosIHZvaWQgKikpIChmcmVlZnVuKSwgKGFyZykpCisKKyNkZWZpbmUgb2JzdGFja19jaHVua2Z1bihoLCBuZXdjaHVua2Z1bikgXAorICAoKGgpIC0+IGNodW5rZnVuID0gKHN0cnVjdCBfb2JzdGFja19jaHVuayAqKCopKHZvaWQgKiwgbG9uZykpIChuZXdjaHVua2Z1bikpCisKKyNkZWZpbmUgb2JzdGFja19mcmVlZnVuKGgsIG5ld2ZyZWVmdW4pIFwKKyAgKChoKSAtPiBmcmVlZnVuID0gKHZvaWQgKCopKHZvaWQgKiwgc3RydWN0IF9vYnN0YWNrX2NodW5rICopKSAobmV3ZnJlZWZ1bikpCisKKyNkZWZpbmUgb2JzdGFja18xZ3Jvd19mYXN0KGgsYWNoYXIpICgqKChoKS0+bmV4dF9mcmVlKSsrID0gKGFjaGFyKSkKKworI2RlZmluZSBvYnN0YWNrX2JsYW5rX2Zhc3QoaCxuKSAoKGgpLT5uZXh0X2ZyZWUgKz0gKG4pKQorCisjZGVmaW5lIG9ic3RhY2tfbWVtb3J5X3VzZWQoaCkgX29ic3RhY2tfbWVtb3J5X3VzZWQgKGgpCisMCisjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiBkZWZpbmVkIF9fU1REQ19fICYmIF9fU1REQ19fCisvKiBOZXh0U3RlcCAyLjAgY2MgaXMgcmVhbGx5IGdjYyAxLjkzIGJ1dCBpdCBkZWZpbmVzIF9fR05VQ19fID0gMiBhbmQKKyAgIGRvZXMgbm90IGltcGxlbWVudCBfX2V4dGVuc2lvbl9fLiAgQnV0IHRoYXQgY29tcGlsZXIgZG9lc24ndCBkZWZpbmUKKyAgIF9fR05VQ19NSU5PUl9fLiAgKi8KKyMgaWYgX19HTlVDX18gPCAyIHx8IChfX05lWFRfXyAmJiAhX19HTlVDX01JTk9SX18pCisjICBkZWZpbmUgX19leHRlbnNpb25fXworIyBlbmRpZgorCisvKiBGb3IgR05VIEMsIGlmIG5vdCAtdHJhZGl0aW9uYWwsCisgICB3ZSBjYW4gZGVmaW5lIHRoZXNlIG1hY3JvcyB0byBjb21wdXRlIGFsbCBhcmdzIG9ubHkgb25jZQorICAgd2l0aG91dCB1c2luZyBhIGdsb2JhbCB2YXJpYWJsZS4KKyAgIEFsc28sIHdlIGNhbiBhdm9pZCB1c2luZyB0aGUgYHRlbXAnIHNsb3QsIHRvIG1ha2UgZmFzdGVyIGNvZGUuICAqLworCisjIGRlZmluZSBvYnN0YWNrX29iamVjdF9zaXplKE9CU1RBQ0spCQkJCQlcCisgIF9fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyAgKHsgc3RydWN0IG9ic3RhY2sgY29uc3QgKl9fbyA9IChPQlNUQUNLKTsJCQkJXAorICAgICAodW5zaWduZWQpIChfX28tPm5leHRfZnJlZSAtIF9fby0+b2JqZWN0X2Jhc2UpOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX3Jvb20oT0JTVEFDSykJCQkJCQlcCisgIF9fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyAgKHsgc3RydWN0IG9ic3RhY2sgY29uc3QgKl9fbyA9IChPQlNUQUNLKTsJCQkJXAorICAgICAodW5zaWduZWQpIChfX28tPmNodW5rX2xpbWl0IC0gX19vLT5uZXh0X2ZyZWUpOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX21ha2Vfcm9vbShPQlNUQUNLLGxlbmd0aCkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIGludCBfX2xlbiA9IChsZW5ndGgpOwkJCQkJCVwKKyAgIGlmIChfX28tPmNodW5rX2xpbWl0IC0gX19vLT5uZXh0X2ZyZWUgPCBfX2xlbikJCQlcCisgICAgIF9vYnN0YWNrX25ld2NodW5rIChfX28sIF9fbGVuKTsJCQkJCVwKKyAgICh2b2lkKSAwOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX2VtcHR5X3AoT0JTVEFDSykJCQkJCVwKKyAgX19leHRlbnNpb25fXwkJCQkJCQkJXAorICAoeyBzdHJ1Y3Qgb2JzdGFjayBjb25zdCAqX19vID0gKE9CU1RBQ0spOwkJCQlcCisgICAgIChfX28tPmNodW5rLT5wcmV2ID09IDAJCQkJCQlcCisgICAgICAmJiBfX28tPm5leHRfZnJlZSA9PSBfX1BUUl9BTElHTiAoKGNoYXIgKikgX19vLT5jaHVuaywJCVwKKwkJCQkJX19vLT5jaHVuay0+Y29udGVudHMsCQlcCisJCQkJCV9fby0+YWxpZ25tZW50X21hc2spKTsgfSkKKworIyBkZWZpbmUgb2JzdGFja19ncm93KE9CU1RBQ0ssd2hlcmUsbGVuZ3RoKQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOwkJCQkJXAorICAgaW50IF9fbGVuID0gKGxlbmd0aCk7CQkJCQkJXAorICAgaWYgKF9fby0+bmV4dF9mcmVlICsgX19sZW4gPiBfX28tPmNodW5rX2xpbWl0KQkJCVwKKyAgICAgX29ic3RhY2tfbmV3Y2h1bmsgKF9fbywgX19sZW4pOwkJCQkJXAorICAgbWVtY3B5IChfX28tPm5leHRfZnJlZSwgd2hlcmUsIF9fbGVuKTsJCQkJXAorICAgX19vLT5uZXh0X2ZyZWUgKz0gX19sZW47CQkJCQkJXAorICAgKHZvaWQpIDA7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfZ3JvdzAoT0JTVEFDSyx3aGVyZSxsZW5ndGgpCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCisgICBpbnQgX19sZW4gPSAobGVuZ3RoKTsJCQkJCQlcCisgICBpZiAoX19vLT5uZXh0X2ZyZWUgKyBfX2xlbiArIDEgPiBfX28tPmNodW5rX2xpbWl0KQkJCVwKKyAgICAgX29ic3RhY2tfbmV3Y2h1bmsgKF9fbywgX19sZW4gKyAxKTsJCQkJXAorICAgbWVtY3B5IChfX28tPm5leHRfZnJlZSwgd2hlcmUsIF9fbGVuKTsJCQkJXAorICAgX19vLT5uZXh0X2ZyZWUgKz0gX19sZW47CQkJCQkJXAorICAgKihfX28tPm5leHRfZnJlZSkrKyA9IDA7CQkJCQkJXAorICAgKHZvaWQpIDA7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfMWdyb3coT0JTVEFDSyxkYXR1bSkJCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCisgICBpZiAoX19vLT5uZXh0X2ZyZWUgKyAxID4gX19vLT5jaHVua19saW1pdCkJCQkJXAorICAgICBfb2JzdGFja19uZXdjaHVuayAoX19vLCAxKTsJCQkJCVwKKyAgIG9ic3RhY2tfMWdyb3dfZmFzdCAoX19vLCBkYXR1bSk7CQkJCQlcCisgICAodm9pZCkgMDsgfSkKKworLyogVGhlc2UgYXNzdW1lIHRoYXQgdGhlIG9ic3RhY2sgYWxpZ25tZW50IGlzIGdvb2QgZW5vdWdoIGZvciBwb2ludGVycworICAgb3IgaW50cywgYW5kIHRoYXQgdGhlIGRhdGEgYWRkZWQgc28gZmFyIHRvIHRoZSBjdXJyZW50IG9iamVjdAorICAgc2hhcmVzIHRoYXQgbXVjaCBhbGlnbm1lbnQuICAqLworCisjIGRlZmluZSBvYnN0YWNrX3B0cl9ncm93KE9CU1RBQ0ssZGF0dW0pCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCisgICBpZiAoX19vLT5uZXh0X2ZyZWUgKyBzaXplb2YgKHZvaWQgKikgPiBfX28tPmNodW5rX2xpbWl0KQkJXAorICAgICBfb2JzdGFja19uZXdjaHVuayAoX19vLCBzaXplb2YgKHZvaWQgKikpOwkJCQlcCisgICBvYnN0YWNrX3B0cl9ncm93X2Zhc3QgKF9fbywgZGF0dW0pOyB9KQkJCQlcCisKKyMgZGVmaW5lIG9ic3RhY2tfaW50X2dyb3coT0JTVEFDSyxkYXR1bSkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIGlmIChfX28tPm5leHRfZnJlZSArIHNpemVvZiAoaW50KSA+IF9fby0+Y2h1bmtfbGltaXQpCQlcCisgICAgIF9vYnN0YWNrX25ld2NodW5rIChfX28sIHNpemVvZiAoaW50KSk7CQkJCVwKKyAgIG9ic3RhY2tfaW50X2dyb3dfZmFzdCAoX19vLCBkYXR1bSk7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfcHRyX2dyb3dfZmFzdChPQlNUQUNLLGFwdHIpCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28xID0gKE9CU1RBQ0spOwkJCQkJXAorICAgKihjb25zdCB2b2lkICoqKSBfX28xLT5uZXh0X2ZyZWUgPSAoYXB0cik7CQkJCVwKKyAgIF9fbzEtPm5leHRfZnJlZSArPSBzaXplb2YgKGNvbnN0IHZvaWQgKik7CQkJCVwKKyAgICh2b2lkKSAwOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX2ludF9ncm93X2Zhc3QoT0JTVEFDSyxhaW50KQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vMSA9IChPQlNUQUNLKTsJCQkJCVwKKyAgICooaW50ICopIF9fbzEtPm5leHRfZnJlZSA9IChhaW50KTsJCQkJCVwKKyAgIF9fbzEtPm5leHRfZnJlZSArPSBzaXplb2YgKGludCk7CQkJCQlcCisgICAodm9pZCkgMDsgfSkKKworIyBkZWZpbmUgb2JzdGFja19ibGFuayhPQlNUQUNLLGxlbmd0aCkJCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCisgICBpbnQgX19sZW4gPSAobGVuZ3RoKTsJCQkJCQlcCisgICBpZiAoX19vLT5jaHVua19saW1pdCAtIF9fby0+bmV4dF9mcmVlIDwgX19sZW4pCQkJXAorICAgICBfb2JzdGFja19uZXdjaHVuayAoX19vLCBfX2xlbik7CQkJCQlcCisgICBvYnN0YWNrX2JsYW5rX2Zhc3QgKF9fbywgX19sZW4pOwkJCQkJXAorICAgKHZvaWQpIDA7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfYWxsb2MoT0JTVEFDSyxsZW5ndGgpCQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19oID0gKE9CU1RBQ0spOwkJCQkJXAorICAgb2JzdGFja19ibGFuayAoX19oLCAobGVuZ3RoKSk7CQkJCQlcCisgICBvYnN0YWNrX2ZpbmlzaCAoX19oKTsgfSkKKworIyBkZWZpbmUgb2JzdGFja19jb3B5KE9CU1RBQ0ssd2hlcmUsbGVuZ3RoKQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19oID0gKE9CU1RBQ0spOwkJCQkJXAorICAgb2JzdGFja19ncm93IChfX2gsICh3aGVyZSksIChsZW5ndGgpKTsJCQkJXAorICAgb2JzdGFja19maW5pc2ggKF9faCk7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfY29weTAoT0JTVEFDSyx3aGVyZSxsZW5ndGgpCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX2ggPSAoT0JTVEFDSyk7CQkJCQlcCisgICBvYnN0YWNrX2dyb3cwIChfX2gsICh3aGVyZSksIChsZW5ndGgpKTsJCQkJXAorICAgb2JzdGFja19maW5pc2ggKF9faCk7IH0pCisKKy8qIFRoZSBsb2NhbCB2YXJpYWJsZSBpcyBuYW1lZCBfX28xIHRvIGF2b2lkIGEgbmFtZSBjb25mbGljdAorICAgd2hlbiBvYnN0YWNrX2JsYW5rIGlzIGNhbGxlZC4gICovCisjIGRlZmluZSBvYnN0YWNrX2ZpbmlzaChPQlNUQUNLKQkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbzEgPSAoT0JTVEFDSyk7CQkJCQlcCisgICB2b2lkICpfX3ZhbHVlID0gKHZvaWQgKikgX19vMS0+b2JqZWN0X2Jhc2U7CQkJCVwKKyAgIGlmIChfX28xLT5uZXh0X2ZyZWUgPT0gX192YWx1ZSkJCQkJCVwKKyAgICAgX19vMS0+bWF5YmVfZW1wdHlfb2JqZWN0ID0gMTsJCQkJCVwKKyAgIF9fbzEtPm5leHRfZnJlZQkJCQkJCQlcCisgICAgID0gX19QVFJfQUxJR04gKF9fbzEtPm9iamVjdF9iYXNlLCBfX28xLT5uZXh0X2ZyZWUsCQkJXAorCQkgICAgX19vMS0+YWxpZ25tZW50X21hc2spOwkJCQlcCisgICBpZiAoX19vMS0+bmV4dF9mcmVlIC0gKGNoYXIgKilfX28xLT5jaHVuawkJCQlcCisgICAgICAgPiBfX28xLT5jaHVua19saW1pdCAtIChjaGFyICopX19vMS0+Y2h1bmspCQkJXAorICAgICBfX28xLT5uZXh0X2ZyZWUgPSBfX28xLT5jaHVua19saW1pdDsJCQkJXAorICAgX19vMS0+b2JqZWN0X2Jhc2UgPSBfX28xLT5uZXh0X2ZyZWU7CQkJCQlcCisgICBfX3ZhbHVlOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX2ZyZWUoT0JTVEFDSywgT0JKKQkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIHZvaWQgKl9fb2JqID0gKE9CSik7CQkJCQkJCVwKKyAgIGlmIChfX29iaiA+ICh2b2lkICopX19vLT5jaHVuayAmJiBfX29iaiA8ICh2b2lkICopX19vLT5jaHVua19saW1pdCkgIFwKKyAgICAgX19vLT5uZXh0X2ZyZWUgPSBfX28tPm9iamVjdF9iYXNlID0gKGNoYXIgKilfX29iajsJCQlcCisgICBlbHNlIChvYnN0YWNrX2ZyZWUpIChfX28sIF9fb2JqKTsgfSkKKwwKKyNlbHNlIC8qIG5vdCBfX0dOVUNfXyBvciBub3QgX19TVERDX18gKi8KKworIyBkZWZpbmUgb2JzdGFja19vYmplY3Rfc2l6ZShoKSBcCisgKHVuc2lnbmVkKSAoKGgpLT5uZXh0X2ZyZWUgLSAoaCktPm9iamVjdF9iYXNlKQorCisjIGRlZmluZSBvYnN0YWNrX3Jvb20oaCkJCVwKKyAodW5zaWduZWQpICgoaCktPmNodW5rX2xpbWl0IC0gKGgpLT5uZXh0X2ZyZWUpCisKKyMgZGVmaW5lIG9ic3RhY2tfZW1wdHlfcChoKSBcCisgKChoKS0+Y2h1bmstPnByZXYgPT0gMAkJCQkJCQlcCisgICYmIChoKS0+bmV4dF9mcmVlID09IF9fUFRSX0FMSUdOICgoY2hhciAqKSAoaCktPmNodW5rLAkJXAorCQkJCSAgICAoaCktPmNodW5rLT5jb250ZW50cywJCVwKKwkJCQkgICAgKGgpLT5hbGlnbm1lbnRfbWFzaykpCisKKy8qIE5vdGUgdGhhdCB0aGUgY2FsbCB0byBfb2JzdGFja19uZXdjaHVuayBpcyBlbmNsb3NlZCBpbiAoLi4uLCAwKQorICAgc28gdGhhdCB3ZSBjYW4gYXZvaWQgaGF2aW5nIHZvaWQgZXhwcmVzc2lvbnMKKyAgIGluIHRoZSBhcm1zIG9mIHRoZSBjb25kaXRpb25hbCBleHByZXNzaW9uLgorICAgQ2FzdGluZyB0aGUgdGhpcmQgb3BlcmFuZCB0byB2b2lkIHdhcyB0cmllZCBiZWZvcmUsCisgICBidXQgc29tZSBjb21waWxlcnMgd29uJ3QgYWNjZXB0IGl0LiAgKi8KKworIyBkZWZpbmUgb2JzdGFja19tYWtlX3Jvb20oaCxsZW5ndGgpCQkJCQlcCisoIChoKS0+dGVtcC50ZW1waW50ID0gKGxlbmd0aCksCQkJCQkJXAorICAoKChoKS0+bmV4dF9mcmVlICsgKGgpLT50ZW1wLnRlbXBpbnQgPiAoaCktPmNodW5rX2xpbWl0KQkJXAorICAgPyAoX29ic3RhY2tfbmV3Y2h1bmsgKChoKSwgKGgpLT50ZW1wLnRlbXBpbnQpLCAwKSA6IDApKQorCisjIGRlZmluZSBvYnN0YWNrX2dyb3coaCx3aGVyZSxsZW5ndGgpCQkJCQlcCisoIChoKS0+dGVtcC50ZW1waW50ID0gKGxlbmd0aCksCQkJCQkJXAorICAoKChoKS0+bmV4dF9mcmVlICsgKGgpLT50ZW1wLnRlbXBpbnQgPiAoaCktPmNodW5rX2xpbWl0KQkJXAorICAgPyAoX29ic3RhY2tfbmV3Y2h1bmsgKChoKSwgKGgpLT50ZW1wLnRlbXBpbnQpLCAwKSA6IDApLAkJXAorICBtZW1jcHkgKChoKS0+bmV4dF9mcmVlLCB3aGVyZSwgKGgpLT50ZW1wLnRlbXBpbnQpLAkJCVwKKyAgKGgpLT5uZXh0X2ZyZWUgKz0gKGgpLT50ZW1wLnRlbXBpbnQpCisKKyMgZGVmaW5lIG9ic3RhY2tfZ3JvdzAoaCx3aGVyZSxsZW5ndGgpCQkJCQlcCisoIChoKS0+dGVtcC50ZW1waW50ID0gKGxlbmd0aCksCQkJCQkJXAorICAoKChoKS0+bmV4dF9mcmVlICsgKGgpLT50ZW1wLnRlbXBpbnQgKyAxID4gKGgpLT5jaHVua19saW1pdCkJCVwKKyAgID8gKF9vYnN0YWNrX25ld2NodW5rICgoaCksIChoKS0+dGVtcC50ZW1waW50ICsgMSksIDApIDogMCksCQlcCisgIG1lbWNweSAoKGgpLT5uZXh0X2ZyZWUsIHdoZXJlLCAoaCktPnRlbXAudGVtcGludCksCQkJXAorICAoaCktPm5leHRfZnJlZSArPSAoaCktPnRlbXAudGVtcGludCwJCQkJCVwKKyAgKigoaCktPm5leHRfZnJlZSkrKyA9IDApCisKKyMgZGVmaW5lIG9ic3RhY2tfMWdyb3coaCxkYXR1bSkJCQkJCQlcCisoICgoKGgpLT5uZXh0X2ZyZWUgKyAxID4gKGgpLT5jaHVua19saW1pdCkJCQkJXAorICAgPyAoX29ic3RhY2tfbmV3Y2h1bmsgKChoKSwgMSksIDApIDogMCksCQkJCVwKKyAgb2JzdGFja18xZ3Jvd19mYXN0IChoLCBkYXR1bSkpCisKKyMgZGVmaW5lIG9ic3RhY2tfcHRyX2dyb3coaCxkYXR1bSkJCQkJCVwKKyggKCgoaCktPm5leHRfZnJlZSArIHNpemVvZiAoY2hhciAqKSA+IChoKS0+Y2h1bmtfbGltaXQpCQlcCisgICA/IChfb2JzdGFja19uZXdjaHVuayAoKGgpLCBzaXplb2YgKGNoYXIgKikpLCAwKSA6IDApLAkJXAorICBvYnN0YWNrX3B0cl9ncm93X2Zhc3QgKGgsIGRhdHVtKSkKKworIyBkZWZpbmUgb2JzdGFja19pbnRfZ3JvdyhoLGRhdHVtKQkJCQkJXAorKCAoKChoKS0+bmV4dF9mcmVlICsgc2l6ZW9mIChpbnQpID4gKGgpLT5jaHVua19saW1pdCkJCQlcCisgICA/IChfb2JzdGFja19uZXdjaHVuayAoKGgpLCBzaXplb2YgKGludCkpLCAwKSA6IDApLAkJCVwKKyAgb2JzdGFja19pbnRfZ3Jvd19mYXN0IChoLCBkYXR1bSkpCisKKyMgZGVmaW5lIG9ic3RhY2tfcHRyX2dyb3dfZmFzdChoLGFwdHIpCQkJCQlcCisgICgoKGNvbnN0IHZvaWQgKiopICgoaCktPm5leHRfZnJlZSArPSBzaXplb2YgKHZvaWQgKikpKVstMV0gPSAoYXB0cikpCisKKyMgZGVmaW5lIG9ic3RhY2tfaW50X2dyb3dfZmFzdChoLGFpbnQpCQkJCQlcCisgICgoKGludCAqKSAoKGgpLT5uZXh0X2ZyZWUgKz0gc2l6ZW9mIChpbnQpKSlbLTFdID0gKGFpbnQpKQorCisjIGRlZmluZSBvYnN0YWNrX2JsYW5rKGgsbGVuZ3RoKQkJCQkJXAorKCAoaCktPnRlbXAudGVtcGludCA9IChsZW5ndGgpLAkJCQkJCVwKKyAgKCgoaCktPmNodW5rX2xpbWl0IC0gKGgpLT5uZXh0X2ZyZWUgPCAoaCktPnRlbXAudGVtcGludCkJCVwKKyAgID8gKF9vYnN0YWNrX25ld2NodW5rICgoaCksIChoKS0+dGVtcC50ZW1waW50KSwgMCkgOiAwKSwJCVwKKyAgb2JzdGFja19ibGFua19mYXN0IChoLCAoaCktPnRlbXAudGVtcGludCkpCisKKyMgZGVmaW5lIG9ic3RhY2tfYWxsb2MoaCxsZW5ndGgpCQkJCQlcCisgKG9ic3RhY2tfYmxhbmsgKChoKSwgKGxlbmd0aCkpLCBvYnN0YWNrX2ZpbmlzaCAoKGgpKSkKKworIyBkZWZpbmUgb2JzdGFja19jb3B5KGgsd2hlcmUsbGVuZ3RoKQkJCQkJXAorIChvYnN0YWNrX2dyb3cgKChoKSwgKHdoZXJlKSwgKGxlbmd0aCkpLCBvYnN0YWNrX2ZpbmlzaCAoKGgpKSkKKworIyBkZWZpbmUgb2JzdGFja19jb3B5MChoLHdoZXJlLGxlbmd0aCkJCQkJCVwKKyAob2JzdGFja19ncm93MCAoKGgpLCAod2hlcmUpLCAobGVuZ3RoKSksIG9ic3RhY2tfZmluaXNoICgoaCkpKQorCisjIGRlZmluZSBvYnN0YWNrX2ZpbmlzaChoKQkJCQkJCVwKKyggKChoKS0+bmV4dF9mcmVlID09IChoKS0+b2JqZWN0X2Jhc2UJCQkJCVwKKyAgID8gKCgoaCktPm1heWJlX2VtcHR5X29iamVjdCA9IDEpLCAwKQkJCQkJXAorICAgOiAwKSwJCQkJCQkJCVwKKyAgKGgpLT50ZW1wLnRlbXBwdHIgPSAoaCktPm9iamVjdF9iYXNlLAkJCQkJXAorICAoaCktPm5leHRfZnJlZQkJCQkJCQlcCisgICAgPSBfX1BUUl9BTElHTiAoKGgpLT5vYmplY3RfYmFzZSwgKGgpLT5uZXh0X2ZyZWUsCQkJXAorCQkgICAoaCktPmFsaWdubWVudF9tYXNrKSwJCQkJXAorICAoKChoKS0+bmV4dF9mcmVlIC0gKGNoYXIgKikgKGgpLT5jaHVuawkJCQlcCisgICAgPiAoaCktPmNodW5rX2xpbWl0IC0gKGNoYXIgKikgKGgpLT5jaHVuaykJCQkJXAorICAgPyAoKGgpLT5uZXh0X2ZyZWUgPSAoaCktPmNodW5rX2xpbWl0KSA6IDApLAkJCQlcCisgIChoKS0+b2JqZWN0X2Jhc2UgPSAoaCktPm5leHRfZnJlZSwJCQkJCVwKKyAgKGgpLT50ZW1wLnRlbXBwdHIpCisKKyMgZGVmaW5lIG9ic3RhY2tfZnJlZShoLG9iaikJCQkJCQlcCisoIChoKS0+dGVtcC50ZW1waW50ID0gKGNoYXIgKikgKG9iaikgLSAoY2hhciAqKSAoaCktPmNodW5rLAkJXAorICAoKCgoaCktPnRlbXAudGVtcGludCA+IDAJCQkJCQlcCisgICAgJiYgKGgpLT50ZW1wLnRlbXBpbnQgPCAoaCktPmNodW5rX2xpbWl0IC0gKGNoYXIgKikgKGgpLT5jaHVuaykpCVwKKyAgID8gKGludCkgKChoKS0+bmV4dF9mcmVlID0gKGgpLT5vYmplY3RfYmFzZQkJCQlcCisJICAgID0gKGgpLT50ZW1wLnRlbXBpbnQgKyAoY2hhciAqKSAoaCktPmNodW5rKQkJCVwKKyAgIDogKCgob2JzdGFja19mcmVlKSAoKGgpLCAoaCktPnRlbXAudGVtcGludCArIChjaGFyICopIChoKS0+Y2h1bmspLCAwKSwgMCkpKQorCisjZW5kaWYgLyogbm90IF9fR05VQ19fIG9yIG5vdCBfX1NURENfXyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30JLyogQysrICovCisjZW5kaWYKKworI2VuZGlmIC8qIG9ic3RhY2suaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3BhdGhzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcGF0aHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjJjNzdlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3BhdGhzLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OSwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIylwYXRocy5oCTguMSAoQmVya2VsZXkpIDYvMi85MworICovCisKKyNpZm5kZWYgX1BBVEhTX0hfCisjZGVmaW5lCV9QQVRIU19IXworCisvKiBEZWZhdWx0IHNlYXJjaCBwYXRoLiAqLworI2RlZmluZQlfUEFUSF9ERUZQQVRICSIvdXNyL2JpbjovYmluIgorLyogQWxsIHN0YW5kYXJkIHV0aWxpdGllcyBwYXRoLiAqLworI2RlZmluZQlfUEFUSF9TVERQQVRIIFwKKwkiL3Vzci9iaW46L2JpbjovdXNyL3NiaW46L3NiaW4iCisKKyNkZWZpbmUJX1BBVEhfQlNIRUxMCSIvYmluL3NoIgorI2RlZmluZQlfUEFUSF9DT05TT0xFCSIvZGV2L2NvbnNvbGUiCisjZGVmaW5lCV9QQVRIX0NTSEVMTAkiL2Jpbi9jc2giCisjZGVmaW5lCV9QQVRIX0RFVkRCCSIvdmFyL3J1bi9kZXYuZGIiCisjZGVmaW5lCV9QQVRIX0RFVk5VTEwJIi9kZXYvbnVsbCIKKyNkZWZpbmUJX1BBVEhfRFJVTQkiL2Rldi9kcnVtIgorI2RlZmluZQlfUEFUSF9LTE9HCSIvcHJvYy9rbXNnIgorI2RlZmluZQlfUEFUSF9LTUVNCSIvZGV2L2ttZW0iCisjZGVmaW5lCV9QQVRIX0xBU1RMT0cJIi92YXIvbG9nL2xhc3Rsb2ciCisjZGVmaW5lCV9QQVRIX01BSUxESVIJIi92YXIvbWFpbCIKKyNkZWZpbmUJX1BBVEhfTUFOCSIvdXNyL3NoYXJlL21hbiIKKyNkZWZpbmUJX1BBVEhfTUVNCSIvZGV2L21lbSIKKyNkZWZpbmUJX1BBVEhfTU5UVEFCCSIvZXRjL2ZzdGFiIgorI2RlZmluZQlfUEFUSF9NT1VOVEVECSIvZXRjL210YWIiCisjZGVmaW5lCV9QQVRIX05PTE9HSU4JIi9ldGMvbm9sb2dpbiIKKyNkZWZpbmUJX1BBVEhfUFJFU0VSVkUJIi92YXIvbGliIgorI2RlZmluZQlfUEFUSF9SV0hPRElSCSIvdmFyL3Nwb29sL3J3aG8iCisjZGVmaW5lCV9QQVRIX1NFTkRNQUlMCSIvdXNyL3NiaW4vc2VuZG1haWwiCisjZGVmaW5lCV9QQVRIX1NIQURPVwkiL2V0Yy9zaGFkb3ciCisjZGVmaW5lCV9QQVRIX1NIRUxMUwkiL2V0Yy9zaGVsbHMiCisjZGVmaW5lCV9QQVRIX1RUWQkiL2Rldi90dHkiCisjZGVmaW5lCV9QQVRIX1VOSVgJIi9ib290L3ZtbGludXgiCisjZGVmaW5lIF9QQVRIX1VUTVAJIi92YXIvcnVuL3V0bXAiCisjZGVmaW5lCV9QQVRIX1ZJCSIvdXNyL2Jpbi92aSIKKyNkZWZpbmUgX1BBVEhfV1RNUAkiL3Zhci9sb2cvd3RtcCIKKworLyogUHJvdmlkZSB0cmFpbGluZyBzbGFzaCwgc2luY2UgbW9zdGx5IHVzZWQgZm9yIGJ1aWxkaW5nIHBhdGhuYW1lcy4gKi8KKyNkZWZpbmUJX1BBVEhfREVWCSIvZGV2LyIKKyNkZWZpbmUJX1BBVEhfVE1QCSIvdG1wLyIKKyNkZWZpbmUJX1BBVEhfVkFSREIJIi92YXIvZGIvIgorI2RlZmluZQlfUEFUSF9WQVJSVU4JIi92YXIvcnVuLyIKKyNkZWZpbmUJX1BBVEhfVkFSVE1QCSIvdmFyL3RtcC8iCisKKyNlbmRpZiAvKiAhX1BBVEhTX0hfICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcG9sbC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3BvbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmZiNDFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3BvbGwuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8c3lzL3BvbGwuaD4KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9wcmludGYuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9wcmludGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjBjZGNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3ByaW50Zi5oCkBAIC0wLDAgKzEsMTQ5IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5MywxOTk1LTE5OTksMjAwMCwyMDAxLDIwMDYKKwlGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZglfUFJJTlRGX0gKKworI2RlZmluZQlfUFJJTlRGX0gJMQorI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKK19fQkVHSU5fREVDTFMKKworI2RlZmluZQlfX25lZWRfRklMRQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lCV9fbmVlZF9zaXplX3QKKyNkZWZpbmUgX19uZWVkX3djaGFyX3QKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworCitzdHJ1Y3QgcHJpbnRmX2luZm8KK3sKKyAgaW50IHByZWM7CQkJLyogUHJlY2lzaW9uLiAgKi8KKyAgaW50IHdpZHRoOwkJCS8qIFdpZHRoLiAgKi8KKyAgd2NoYXJfdCBzcGVjOwkJCS8qIEZvcm1hdCBsZXR0ZXIuICAqLworICB1bnNpZ25lZCBpbnQgaXNfbG9uZ19kb3VibGU6MTsvKiBMIGZsYWcuICAqLworICB1bnNpZ25lZCBpbnQgaXNfc2hvcnQ6MTsJLyogaCBmbGFnLiAgKi8KKyAgdW5zaWduZWQgaW50IGlzX2xvbmc6MTsJLyogbCBmbGFnLiAgKi8KKyAgdW5zaWduZWQgaW50IGFsdDoxOwkJLyogIyBmbGFnLiAgKi8KKyAgdW5zaWduZWQgaW50IHNwYWNlOjE7CQkvKiBTcGFjZSBmbGFnLiAgKi8KKyAgdW5zaWduZWQgaW50IGxlZnQ6MTsJCS8qIC0gZmxhZy4gICovCisgIHVuc2lnbmVkIGludCBzaG93c2lnbjoxOwkvKiArIGZsYWcuICAqLworICB1bnNpZ25lZCBpbnQgZ3JvdXA6MTsJCS8qICcgZmxhZy4gICovCisgIHVuc2lnbmVkIGludCBleHRyYToxOwkJLyogRm9yIHNwZWNpYWwgdXNlLiAgKi8KKyAgdW5zaWduZWQgaW50IGlzX2NoYXI6MTsJLyogaGggZmxhZy4gICovCisgIHVuc2lnbmVkIGludCB3aWRlOjE7CQkvKiBOb256ZXJvIGZvciB3aWRlIGNoYXJhY3RlciBzdHJlYW1zLiAgKi8KKyAgdW5zaWduZWQgaW50IGkxOG46MTsJCS8qIEkgZmxhZy4gICovCisgIHdjaGFyX3QgcGFkOwkJCS8qIFBhZGRpbmcgY2hhcmFjdGVyLiAgKi8KK307CisKKworLyogVHlwZSBvZiBhIHByaW50ZiBzcGVjaWZpZXItaGFuZGxlciBmdW5jdGlvbi4KKyAgIFNUUkVBTSBpcyB0aGUgRklMRSBvbiB3aGljaCB0byB3cml0ZSBvdXRwdXQuCisgICBJTkZPIGdpdmVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAgIEFSR1MgaXMgYSB2ZWN0b3Igb2YgcG9pbnRlcnMgdG8gdGhlIGFyZ3VtZW50IGRhdGE7CisgICB0aGUgbnVtYmVyIG9mIHBvaW50ZXJzIHdpbGwgYmUgdGhlIG51bWJlciByZXR1cm5lZAorICAgYnkgdGhlIGFzc29jaWF0ZWQgYXJnaW5mbyBmdW5jdGlvbiBmb3IgdGhlIHNhbWUgSU5GTy4KKworICAgVGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4sCisgICBvciAtMSBmb3IgZXJyb3JzLiAgKi8KKwordHlwZWRlZiBpbnQgcHJpbnRmX2Z1bmN0aW9uIChGSUxFICpfX3N0cmVhbSwKKwkJCSAgICAgX19jb25zdCBzdHJ1Y3QgcHJpbnRmX2luZm8gKl9faW5mbywKKwkJCSAgICAgX19jb25zdCB2b2lkICpfX2NvbnN0ICpfX2FyZ3MpOworCisvKiBUeXBlIG9mIGEgcHJpbnRmIHNwZWNpZmllci1hcmdpbmZvIGZ1bmN0aW9uLgorICAgSU5GTyBnaXZlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgICBOLCBBUkdUWVBFUywgYW5kIHJldHVybiB2YWx1ZSBhcmUgYXMgZm9yIHBhcnNlX3ByaW50Zl9mb3JtYXQuICAqLworCit0eXBlZGVmIGludCBwcmludGZfYXJnaW5mb19mdW5jdGlvbiAoX19jb25zdCBzdHJ1Y3QgcHJpbnRmX2luZm8gKl9faW5mbywKKwkJCQkgICAgIHNpemVfdCBfX24sIGludCAqX19hcmd0eXBlcyk7CisKKworLyogUmVnaXN0ZXIgRlVOQyB0byBiZSBjYWxsZWQgdG8gZm9ybWF0IFNQRUMgc3BlY2lmaWVyczsgQVJHSU5GTyBtdXN0IGJlCisgICBzcGVjaWZpZWQgdG8gZGV0ZXJtaW5lIGhvdyBtYW55IGFyZ3VtZW50cyBhIFNQRUMgY29udmVyc2lvbiByZXF1aXJlcyBhbmQKKyAgIHdoYXQgdGhlaXIgdHlwZXMgYXJlLiAgKi8KKworZXh0ZXJuIGludCByZWdpc3Rlcl9wcmludGZfZnVuY3Rpb24gKGludCBfX3NwZWMsIHByaW50Zl9mdW5jdGlvbiBfX2Z1bmMsCisJCQkJICAgICBwcmludGZfYXJnaW5mb19mdW5jdGlvbiBfX2FyZ2luZm8pOworCisKKy8qIFBhcnNlIEZNVCwgYW5kIGZpbGwgaW4gTiBlbGVtZW50cyBvZiBBUkdUWVBFUyB3aXRoIHRoZQorICAgdHlwZXMgbmVlZGVkIGZvciB0aGUgY29udmVyc2lvbnMgRk1UIHNwZWNpZmllcy4gIFJldHVybnMKKyAgIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHJlcXVpcmVkIGJ5IEZNVC4KKworICAgVGhlIEFSR0lORk8gZnVuY3Rpb24gcmVnaXN0ZXJlZCB3aXRoIGEgdXNlci1kZWZpbmVkIGZvcm1hdCBpcyBwYXNzZWQgYQorICAgYHN0cnVjdCBwcmludGZfaW5mbycgZGVzY3JpYmluZyB0aGUgZm9ybWF0IHNwZWMgYmVpbmcgcGFyc2VkLiAgQSB3aWR0aAorICAgb3IgcHJlY2lzaW9uIG9mIElOVF9NSU4gbWVhbnMgYSBgKicgd2FzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUKKyAgIHdpZHRoL3ByZWNpc2lvbiB3aWxsIGNvbWUgZnJvbSBhbiBhcmcuICBUaGUgZnVuY3Rpb24gc2hvdWxkIGZpbGwgaW4gdGhlCisgICBhcnJheSBpdCBpcyBwYXNzZWQgd2l0aCB0aGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyBpdCB3YW50cywgYW5kIHJldHVybgorICAgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgaXQgd2FudHMuICAqLworCitleHRlcm4gc2l6ZV90IHBhcnNlX3ByaW50Zl9mb3JtYXQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgc2l6ZV90IF9fbiwKKwkJCQkgICBpbnQgKl9fcmVzdHJpY3QgX19hcmd0eXBlcykgX19USFJPVzsKKworCisvKiBDb2RlcyByZXR1cm5lZCBieSBgcGFyc2VfcHJpbnRmX2Zvcm1hdCcgZm9yIGJhc2ljIHR5cGVzLgorCisgICBUaGVzZSB2YWx1ZXMgY292ZXIgYWxsIHRoZSBzdGFuZGFyZCBmb3JtYXQgc3BlY2lmaWNhdGlvbnMuCisgICBVc2VycyBjYW4gYWRkIG5ldyB2YWx1ZXMgYWZ0ZXIgUEFfTEFTVCBmb3IgdGhlaXIgb3duIHR5cGVzLiAgKi8KKworZW51bQorewkJCQkvKiBDIHR5cGU6ICovCisgIFBBX0lOVCwJCQkvKiBpbnQgKi8KKyAgUEFfQ0hBUiwJCQkvKiBpbnQsIGNhc3QgdG8gY2hhciAqLworICBQQV9XQ0hBUiwJCQkvKiB3aWRlIGNoYXIgKi8KKyAgUEFfU1RSSU5HLAkJCS8qIGNvbnN0IGNoYXIgKiwgYSAnXDAnLXRlcm1pbmF0ZWQgc3RyaW5nICovCisgIFBBX1dTVFJJTkcsCQkJLyogY29uc3Qgd2NoYXJfdCAqLCB3aWRlIGNoYXJhY3RlciBzdHJpbmcgKi8KKyAgUEFfUE9JTlRFUiwJCQkvKiB2b2lkICogKi8KKyAgUEFfRkxPQVQsCQkJLyogZmxvYXQgKi8KKyAgUEFfRE9VQkxFLAkJCS8qIGRvdWJsZSAqLworICBQQV9MQVNUCit9OworCisvKiBGbGFnIGJpdHMgdGhhdCBjYW4gYmUgc2V0IGluIGEgdHlwZSByZXR1cm5lZCBieSBgcGFyc2VfcHJpbnRmX2Zvcm1hdCcuICAqLworI2RlZmluZQlQQV9GTEFHX01BU0sJCTB4ZmYwMAorI2RlZmluZQlQQV9GTEFHX0xPTkdfTE9ORwkoMSA8PCA4KQorI2RlZmluZQlQQV9GTEFHX0xPTkdfRE9VQkxFCVBBX0ZMQUdfTE9OR19MT05HCisjZGVmaW5lCVBBX0ZMQUdfTE9ORwkJKDEgPDwgOSkKKyNkZWZpbmUJUEFfRkxBR19TSE9SVAkJKDEgPDwgMTApCisjZGVmaW5lCVBBX0ZMQUdfUFRSCQkoMSA8PCAxMSkKKworCisKKy8qIEZ1bmN0aW9uIHdoaWNoIGNhbiBiZSByZWdpc3RlcmVkIGFzIGBwcmludGYnLWhhbmRsZXJzLiAgKi8KKworLyogUHJpbnQgZmxvYXRpbmcgcG9pbnQgdmFsdWUgdXNpbmcgdXNpbmcgYWJicmV2aWF0aW9ucyBmb3IgdGhlIG9yZGVycworICAgb2YgbWFnbml0dWRlIHVzZWQgZm9yIG51bWJlcnMgKCdrJyBmb3Iga2lsbywgJ20nIGZvciBtZWdhIGV0YykuICBJZgorICAgdGhlIGZvcm1hdCBzcGVjaWZpZXIgaXMgYSB1cHBlcmNhc2UgY2hhcmFjdGVyIHBvd2VycyBvZiAxMDAwIGFyZQorICAgdXNlZC4gIE90aGVyd2lzZSBwb3dlcnMgb2YgMTAyNC4gICovCitleHRlcm4gaW50IHByaW50Zl9zaXplIChGSUxFICpfX3Jlc3RyaWN0IF9fZnAsCisJCQlfX2NvbnN0IHN0cnVjdCBwcmludGZfaW5mbyAqX19pbmZvLAorCQkJX19jb25zdCB2b2lkICpfX2NvbnN0ICpfX3Jlc3RyaWN0IF9fYXJncykgX19USFJPVzsKKworLyogVGhpcyBpcyB0aGUgYXBwcm9wcmlhdGUgYXJndW1lbnQgaW5mb3JtYXRpb24gZnVuY3Rpb24gZm9yIGBwcmludGZfc2l6ZScuICAqLworZXh0ZXJuIGludCBwcmludGZfc2l6ZV9pbmZvIChfX2NvbnN0IHN0cnVjdCBwcmludGZfaW5mbyAqX19yZXN0cmljdAorCQkJICAgICBfX2luZm8sIHNpemVfdCBfX24sIGludCAqX19yZXN0cmljdCBfX2FyZ3R5cGVzKQorICAgICBfX1RIUk9XOworCisjaWZkZWYgX19MREJMX0NPTVBBVAorIyBpbmNsdWRlIDxiaXRzL3ByaW50Zi1sZGJsLmg+CisjZW5kaWYKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIHByaW50Zi5oICAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3Byb3RvY29scy9yb3V0ZWQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9wcm90b2NvbHMvcm91dGVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVmZDg2NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9wcm90b2NvbHMvcm91dGVkLmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTg5LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKXJvdXRlZC5oCTguMSAoQmVya2VsZXkpIDYvMi85MworICovCisKKyNpZm5kZWYgX1BST1RPQ09MU19ST1VURURfSAorI2RlZmluZQlfUFJPVE9DT0xTX1JPVVRFRF9IIDEKKworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKy8qCisgKiBSb3V0aW5nIEluZm9ybWF0aW9uIFByb3RvY29sCisgKgorICogRGVyaXZlZCBmcm9tIFhlcm94IE5TIFJvdXRpbmcgSW5mb3JtYXRpb24gUHJvdG9jb2wKKyAqIGJ5IGNoYW5naW5nIDMyLWJpdCBuZXQgbnVtYmVycyB0byBzb2NrYWRkcidzIGFuZAorICogcGFkZGluZyBzdHVmZiB0byAzMi1iaXQgYm91bmRhcmllcy4KKyAqLworI2RlZmluZQlSSVBWRVJTSU9OCTEKKworc3RydWN0IG5ldGluZm8geworCXN0cnVjdAlzb2NrYWRkciByaXBfZHN0OwkvKiBkZXN0aW5hdGlvbiBuZXQvaG9zdCAqLworCWludAlyaXBfbWV0cmljOwkJLyogY29zdCBvZiByb3V0ZSAqLworfTsKKworc3RydWN0IHJpcCB7CisJdV9jaGFyCXJpcF9jbWQ7CQkvKiByZXF1ZXN0L3Jlc3BvbnNlICovCisJdV9jaGFyCXJpcF92ZXJzOwkJLyogcHJvdG9jb2wgdmVyc2lvbiAjICovCisJdV9jaGFyCXJpcF9yZXMxWzJdOwkJLyogcGFkIHRvIDMyLWJpdCBib3VuZGFyeSAqLworCXVuaW9uIHsKKwkJc3RydWN0CW5ldGluZm8gcnVfbmV0c1sxXTsJLyogdmFyaWFibGUgbGVuZ3RoLi4uICovCisJCWNoYXIJcnVfdHJhY2VmaWxlWzFdOwkvKiBkaXR0byAuLi4gKi8KKwl9IHJpcHVuOworI2RlZmluZQlyaXBfbmV0cwlyaXB1bi5ydV9uZXRzCisjZGVmaW5lCXJpcF90cmFjZWZpbGUJcmlwdW4ucnVfdHJhY2VmaWxlCit9OworCisvKgorICogUGFja2V0IHR5cGVzLgorICovCisjZGVmaW5lCVJJUENNRF9SRVFVRVNUCQkxCS8qIHdhbnQgaW5mbyAqLworI2RlZmluZQlSSVBDTURfUkVTUE9OU0UJCTIJLyogcmVzcG9uZGluZyB0byByZXF1ZXN0ICovCisjZGVmaW5lCVJJUENNRF9UUkFDRU9OCQkzCS8qIHR1cm4gdHJhY2luZyBvbiAqLworI2RlZmluZQlSSVBDTURfVFJBQ0VPRkYJCTQJLyogdHVybiBpdCBvZmYgKi8KKworI2RlZmluZQlSSVBDTURfTUFYCQk1CisjaWZkZWYgUklQQ01EUworY2hhciAqcmlwY21kc1tSSVBDTURfTUFYXSA9CisgIHsgIiMwIiwgIlJFUVVFU1QiLCAiUkVTUE9OU0UiLCAiVFJBQ0VPTiIsICJUUkFDRU9GRiIgfTsKKyNlbmRpZgorCisjZGVmaW5lCUhPUENOVF9JTkZJTklUWQkJMTYJLyogcGVyIFhlcm94IE5TICovCisjZGVmaW5lCU1BWFBBQ0tFVFNJWkUJCTUxMgkvKiBtYXggYnJvYWRjYXN0IHNpemUgKi8KKworLyoKKyAqIFRpbWVyIHZhbHVlcyB1c2VkIGluIG1hbmFnaW5nIHRoZSByb3V0aW5nIHRhYmxlLgorICogQ29tcGxldGUgdGFibGVzIGFyZSBicm9hZGNhc3QgZXZlcnkgU1VQUExZX0lOVEVSVkFMIHNlY29uZHMuCisgKiBJZiBjaGFuZ2VzIG9jY3VyIGJldHdlZW4gdXBkYXRlcywgZHluYW1pYyB1cGRhdGVzIGNvbnRhaW5pbmcgb25seSBjaGFuZ2VzCisgKiBtYXkgYmUgc2VudC4gIFdoZW4gdGhlc2UgYXJlIHNlbnQsIGEgdGltZXIgaXMgc2V0IGZvciBhIHJhbmRvbSB2YWx1ZQorICogYmV0d2VlbiBNSU5fV0FJVFRJTUUgYW5kIE1BWF9XQUlUVElNRSwgYW5kIG5vIGFkZGl0aW9uYWwgZHluYW1pYyB1cGRhdGVzCisgKiBhcmUgc2VudCB1bnRpbCB0aGUgdGltZXIgZXhwaXJlcy4KKyAqCisgKiBFdmVyeSB1cGRhdGUgb2YgYSByb3V0aW5nIGVudHJ5IGZvcmNlcyBhbiBlbnRyeSdzIHRpbWVyIHRvIGJlIHJlc2V0LgorICogQWZ0ZXIgRVhQSVJFX1RJTUUgd2l0aG91dCB1cGRhdGVzLCB0aGUgZW50cnkgaXMgbWFya2VkIGludmFsaWQsCisgKiBidXQgaGVsZCBvbnRvIHVudGlsIEdBUkJBR0VfVElNRSBzbyB0aGF0IG90aGVycyBtYXkKKyAqIHNlZSBpdCAiYmUgZGVsZXRlZCIuCisgKi8KKyNkZWZpbmUJVElNRVJfUkFURQkJMzAJLyogYWxhcm0gY2xvY2tzIGV2ZXJ5IDMwIHNlY29uZHMgKi8KKworI2RlZmluZQlTVVBQTFlfSU5URVJWQUwJCTMwCS8qIHRpbWUgdG8gc3VwcGx5IHRhYmxlcyAqLworI2RlZmluZQlNSU5fV0FJVFRJTUUJCTIJLyogbWluLiBpbnRlcnZhbCB0byBicm9hZGNhc3QgY2hhbmdlcyAqLworI2RlZmluZQlNQVhfV0FJVFRJTUUJCTUJLyogbWF4LiB0aW1lIHRvIGRlbGF5IGNoYW5nZXMgKi8KKworI2RlZmluZQlFWFBJUkVfVElNRQkJMTgwCS8qIHRpbWUgdG8gbWFyayBlbnRyeSBpbnZhbGlkICovCisjZGVmaW5lCUdBUkJBR0VfVElNRQkJMjQwCS8qIHRpbWUgdG8gZ2FyYmFnZSBjb2xsZWN0ICovCisKKyNlbmRpZiAvKiBwcm90b2NvbHMvcm91dGVkLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9wcm90b2NvbHMvcndob2QuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9wcm90b2NvbHMvcndob2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDZkNmY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3Byb3RvY29scy9yd2hvZC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpcndob2QuaAk4LjEgKEJlcmtlbGV5KSA2LzIvOTMKKyAqLworCisjaWZuZGVmIF9QUk9UT0NPTFNfUldIT0RfSAorI2RlZmluZQlfUFJPVE9DT0xTX1JXSE9EX0ggMQorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8qCisgKiByd2hvIHByb3RvY29sIHBhY2tldCBmb3JtYXQuCisgKi8KK3N0cnVjdAlvdXRtcCB7CisJY2hhcglvdXRfbGluZVs4XTsJCS8qIHR0eSBuYW1lICovCisJY2hhcglvdXRfbmFtZVs4XTsJCS8qIHVzZXIgaWQgKi8KKwlpbnQzMl90CW91dF90aW1lOwkJLyogdGltZSBvbiAqLworfTsKKworc3RydWN0CXdob2QgeworCWNoYXIJd2RfdmVyczsJCS8qIHByb3RvY29sIHZlcnNpb24gIyAqLworCWNoYXIJd2RfdHlwZTsJCS8qIHBhY2tldCB0eXBlLCBzZWUgYmVsb3cgKi8KKwljaGFyCXdkX3BhZFsyXTsKKwlpbnQJd2Rfc2VuZHRpbWU7CQkvKiB0aW1lIHN0YW1wIGJ5IHNlbmRlciAqLworCWludAl3ZF9yZWN2dGltZTsJCS8qIHRpbWUgc3RhbXAgYXBwbGllZCBieSByZWNlaXZlciAqLworCWNoYXIJd2RfaG9zdG5hbWVbMzJdOwkvKiBob3N0cydzIG5hbWUgKi8KKwlpbnQJd2RfbG9hZGF2WzNdOwkJLyogbG9hZCBhdmVyYWdlIGFzIGluIHVwdGltZSAqLworCWludAl3ZF9ib290dGltZTsJCS8qIHRpbWUgc3lzdGVtIGJvb3RlZCAqLworCXN0cnVjdAl3aG9lbnQgeworCQlzdHJ1Y3QJb3V0bXAgd2VfdXRtcDsJLyogYWN0aXZlIHR0eSBpbmZvICovCisJCWludAl3ZV9pZGxlOwkvKiB0dHkgaWRsZSB0aW1lICovCisJfSB3ZF93ZVsxMDI0IC8gc2l6ZW9mIChzdHJ1Y3Qgd2hvZW50KV07Cit9OworCisjZGVmaW5lCVdIT0RWRVJTSU9OCTEKKyNkZWZpbmUJV0hPRFRZUEVfU1RBVFVTCTEJCS8qIGhvc3Qgc3RhdHVzICovCisKKy8qIFdlIHVzZWQgdG8gZGVmaW5lIF9QQVRIX1JXSE9ESVIgaGVyZSBidXQgaXQncyBub3cgaW4gPHBhdGhzLmg+LiAgKi8KKyNpbmNsdWRlIDxwYXRocy5oPgorCisjZW5kaWYgLyogcHJvdG9jb2xzL3J3aG9kLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9wcm90b2NvbHMvdGFsa2QuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9wcm90b2NvbHMvdGFsa2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGYzM2IxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3Byb3RvY29scy90YWxrZC5oCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKXRhbGtkLmgJOC4xIChCZXJrZWxleSkgNi8yLzkzCisgKi8KKworI2lmbmRlZiBfUFJPVE9DT0xTX1RBTEtEX0gKKyNkZWZpbmUJX1BST1RPQ09MU19UQUxLRF9IIDEKKworLyoKKyAqIFRoaXMgZGVzY3JpYmVzIHRoZSBwcm90b2NvbCB1c2VkIGJ5IHRoZSB0YWxrIHNlcnZlciBhbmQgY2xpZW50cy4KKyAqCisgKiBUaGUgdGFsayBzZXJ2ZXIgYWN0cyBhIHJlcG9zaXRvcnkgb2YgaW52aXRhdGlvbnMsIHJlc3BvbmRpbmcgdG8KKyAqIHJlcXVlc3RzIGJ5IGNsaWVudHMgd2lzaGluZyB0byByZW5kZXp2b3VzIGZvciB0aGUgcHVycG9zZSBvZgorICogaG9sZGluZyBhIGNvbnZlcnNhdGlvbi4gIEluIG5vcm1hbCBvcGVyYXRpb24sIGEgY2xpZW50LCB0aGUgY2FsbGVyLAorICogaW5pdGlhdGVzIGEgcmVuZGV6dm91cyBieSBzZW5kaW5nIGEgQ1RMX01TRyB0byB0aGUgc2VydmVyIG9mCisgKiB0eXBlIExPT0tfVVAuICBUaGlzIGNhdXNlcyB0aGUgc2VydmVyIHRvIHNlYXJjaCBpdHMgaW52aXRhdGlvbgorICogdGFibGVzIHRvIGNoZWNrIGlmIGFuIGludml0YXRpb24gY3VycmVudGx5IGV4aXN0cyBmb3IgdGhlIGNhbGxlcgorICogKHRvIHNwZWFrIHRvIHRoZSBjYWxsZWUgc3BlY2lmaWVkIGluIHRoZSBtZXNzYWdlKS4gIElmIHRoZSBsb29rdXAKKyAqIGZhaWxzLCB0aGUgY2FsbGVyIHRoZW4gc2VuZHMgYW4gQU5OT1VOQ0UgbWVzc2FnZSBjYXVzaW5nIHRoZSBzZXJ2ZXIKKyAqIHRvIGJyb2FkY2FzdCBhbiBhbm5vdW5jZW1lbnQgb24gdGhlIGNhbGxlZSdzIGxvZ2luIHBvcnRzIHJlcXVlc3RpbmcKKyAqIGNvbnRhY3QuICBXaGVuIHRoZSBjYWxsZWUgcmVzcG9uZHMsIHRoZSBsb2NhbCBzZXJ2ZXIgdXNlcyB0aGUKKyAqIHJlY29yZGVkIGludml0YXRpb24gdG8gcmVzcG9uZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSByZW5kZXp2b3VzCisgKiBhZGRyZXNzIGFuZCB0aGUgY2FsbGVyIGFuZCBjYWxsZWUgY2xpZW50IHByb2dyYW1zIGVzdGFibGlzaCBhCisgKiBzdHJlYW0gY29ubmVjdGlvbiB0aHJvdWdoIHdoaWNoIHRoZSBjb252ZXJzYXRpb24gdGFrZXMgcGxhY2UuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworLyoKKyAqIENsaWVudC0+c2VydmVyIHJlcXVlc3QgbWVzc2FnZSBmb3JtYXQuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1X2NoYXIJdmVyczsJCS8qIHByb3RvY29sIHZlcnNpb24gKi8KKwl1X2NoYXIJdHlwZTsJCS8qIHJlcXVlc3QgdHlwZSwgc2VlIGJlbG93ICovCisJdV9jaGFyCWFuc3dlcjsJCS8qIG5vdCB1c2VkICovCisJdV9jaGFyCXBhZDsKKwl1X2ludDMyX3QgaWRfbnVtOwkvKiBtZXNzYWdlIGlkICovCisJc3RydWN0CW9zb2NrYWRkciBhZGRyOwkJLyogb2xkICg0LjMpIHN0eWxlICovCisJc3RydWN0CW9zb2NrYWRkciBjdGxfYWRkcjsJLyogb2xkICg0LjMpIHN0eWxlICovCisJaW50MzJfdAlwaWQ7CQkvKiBjYWxsZXIncyBwcm9jZXNzIGlkICovCisjZGVmaW5lCU5BTUVfU0laRQkxMgorCWNoYXIJbF9uYW1lW05BTUVfU0laRV07LyogY2FsbGVyJ3MgbmFtZSAqLworCWNoYXIJcl9uYW1lW05BTUVfU0laRV07LyogY2FsbGVlJ3MgbmFtZSAqLworI2RlZmluZQlUVFlfU0laRQkxNgorCWNoYXIJcl90dHlbVFRZX1NJWkVdOy8qIGNhbGxlZSdzIHR0eSBuYW1lICovCit9IENUTF9NU0c7CisKKy8qCisgKiBTZXJ2ZXItPmNsaWVudCByZXNwb25zZSBtZXNzYWdlIGZvcm1hdC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVfY2hhcgl2ZXJzOwkJLyogcHJvdG9jb2wgdmVyc2lvbiAqLworCXVfY2hhcgl0eXBlOwkJLyogdHlwZSBvZiByZXF1ZXN0IG1lc3NhZ2UsIHNlZSBiZWxvdyAqLworCXVfY2hhcglhbnN3ZXI7CQkvKiByZXNwb25zZSB0byByZXF1ZXN0IG1lc3NhZ2UsIHNlZSBiZWxvdyAqLworCXVfY2hhcglwYWQ7CisJdV9pbnQzMl90IGlkX251bTsJLyogbWVzc2FnZSBpZCAqLworCXN0cnVjdAlvc29ja2FkZHIgYWRkcjsJLyogYWRkcmVzcyBmb3IgZXN0YWJsaXNoaW5nIGNvbnZlcnNhdGlvbiAqLworfSBDVExfUkVTUE9OU0U7CisKKyNkZWZpbmUJVEFMS19WRVJTSU9OCTEJCS8qIHByb3RvY29sIHZlcnNpb24gKi8KKworLyogbWVzc2FnZSB0eXBlIHZhbHVlcyAqLworI2RlZmluZSBMRUFWRV9JTlZJVEUJMAkvKiBsZWF2ZSBpbnZpdGF0aW9uIHdpdGggc2VydmVyICovCisjZGVmaW5lIExPT0tfVVAJCTEJLyogY2hlY2sgZm9yIGludml0YXRpb24gYnkgY2FsbGVlICovCisjZGVmaW5lIERFTEVURQkJMgkvKiBkZWxldGUgaW52aXRhdGlvbiBieSBjYWxsZXIgKi8KKyNkZWZpbmUgQU5OT1VOQ0UJMwkvKiBhbm5vdW5jZSBpbnZpdGF0aW9uIGJ5IGNhbGxlciAqLworCisvKiBhbnN3ZXIgdmFsdWVzICovCisjZGVmaW5lIFNVQ0NFU1MJCTAJLyogb3BlcmF0aW9uIGNvbXBsZXRlZCBwcm9wZXJseSAqLworI2RlZmluZSBOT1RfSEVSRQkxCS8qIGNhbGxlZSBub3QgbG9nZ2VkIGluICovCisjZGVmaW5lIEZBSUxFRAkJMgkvKiBvcGVyYXRpb24gZmFpbGVkIGZvciB1bmV4cGxhaW5lZCByZWFzb24gKi8KKyNkZWZpbmUgTUFDSElORV9VTktOT1dOCTMJLyogY2FsbGVyJ3MgbWFjaGluZSBuYW1lIHVua25vd24gKi8KKyNkZWZpbmUgUEVSTUlTU0lPTl9ERU5JRUQgNAkvKiBjYWxsZWUncyB0dHkgZG9lc24ndCBwZXJtaXQgYW5ub3VuY2UgKi8KKyNkZWZpbmUgVU5LTk9XTl9SRVFVRVNUCTUJLyogcmVxdWVzdCBoYXMgaW52YWxpZCB0eXBlIHZhbHVlICovCisjZGVmaW5lCUJBRFZFUlNJT04JNgkvKiByZXF1ZXN0IGhhcyBpbnZhbGlkIHByb3RvY29sIHZlcnNpb24gKi8KKyNkZWZpbmUJQkFEQUREUgkJNwkvKiByZXF1ZXN0IGhhcyBpbnZhbGlkIGFkZHIgdmFsdWUgKi8KKyNkZWZpbmUJQkFEQ1RMQUREUgk4CS8qIHJlcXVlc3QgaGFzIGludmFsaWQgY3RsX2FkZHIgdmFsdWUgKi8KKworLyoKKyAqIE9wZXJhdGlvbmFsIHBhcmFtZXRlcnMuCisgKi8KKyNkZWZpbmUgTUFYX0xJRkUJNjAJLyogbWF4IHRpbWUgZGFlbW9uIHNhdmVzIGludml0YXRpb25zICovCisvKiBSSU5HX1dBSVQgc2hvdWxkIGJlIDEwJ3Mgb2Ygc2Vjb25kcyBsZXNzIHRoYW4gTUFYX0xJRkUgKi8KKyNkZWZpbmUgUklOR19XQUlUCTMwCS8qIHRpbWUgdG8gd2FpdCBiZWZvcmUgcmVzZW5kaW5nIGludml0YXRpb24gKi8KKworI2VuZGlmIC8qIHByb3RvY29scy90YWxrZC5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcHJvdG9jb2xzL3RpbWVkLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcHJvdG9jb2xzL3RpbWVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM0NWJlZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9wcm90b2NvbHMvdGltZWQuaApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKXRpbWVkLmgJOC4xIChCZXJrZWxleSkgNi8yLzkzCisgKi8KKworI2lmbmRlZglfUFJPVE9DT0xTX1RJTUVEX0gKKyNkZWZpbmUJX1BST1RPQ09MU19USU1FRF9IIDEKKworI2luY2x1ZGUgPHJwYy90eXBlcy5oPgorCisvKgorICogVGltZSBTeW5jaHJvbml6YXRpb24gUHJvdG9jb2wKKyAqLworCisjZGVmaW5lCVRTUFZFUlNJT04JMQorI2RlZmluZSBBTllBRERSIAlOVUxMCisKK3N0cnVjdCB0c3AgeworCXVfY2hhcgl0c3BfdHlwZTsKKwl1X2NoYXIJdHNwX3ZlcnM7CisJdV9zaG9ydAl0c3Bfc2VxOworCXVuaW9uIHsKKwkJc3RydWN0IHRpbWV2YWwgdHNwdV90aW1lOworCQljaGFyIHRzcHVfaG9wY250OworCX0gdHNwX3U7CisJY2hhciB0c3BfbmFtZVtNQVhIT1NUTkFNRUxFTl07Cit9OworCisjZGVmaW5lCXRzcF90aW1lCXRzcF91LnRzcHVfdGltZQorI2RlZmluZQl0c3BfaG9wY250CXRzcF91LnRzcHVfaG9wY250CisKKy8qCisgKiBDb21tYW5kIHR5cGVzLgorICovCisjZGVmaW5lCVRTUF9BTlkJCQkwCS8qIG1hdGNoIGFueSB0eXBlcyAqLworI2RlZmluZQlUU1BfQURKVElNRQkJMQkvKiBzZW5kIGFkanRpbWUgKi8KKyNkZWZpbmUJVFNQX0FDSwkJCTIJLyogZ2VuZXJpYyBhY2tub3dsZWRnZW1lbnQgKi8KKyNkZWZpbmUJVFNQX01BU1RFUlJFUQkJMwkvKiBhc2sgZm9yIG1hc3RlcidzIG5hbWUgKi8KKyNkZWZpbmUJVFNQX01BU1RFUkFDSwkJNAkvKiBhY2tub3dsZWRnZSBtYXN0ZXIgcmVxdWVzdCAqLworI2RlZmluZQlUU1BfU0VUVElNRQkJNQkvKiBzZW5kIG5ldHdvcmsgdGltZSAqLworI2RlZmluZQlUU1BfTUFTVEVSVVAJCTYJLyogaW5mb3JtIHNsYXZlcyB0aGF0IG1hc3RlciBpcyB1cCAqLworI2RlZmluZQlUU1BfU0xBVkVVUAkJNwkvKiBzbGF2ZSBpcyB1cCBidXQgbm90IHBvbGxlZCAqLworI2RlZmluZQlUU1BfRUxFQ1RJT04JCTgJLyogYWR2YW5jZSBjYW5kaWRhdHVyZSBmb3IgbWFzdGVyICovCisjZGVmaW5lCVRTUF9BQ0NFUFQJCTkJLyogc3VwcG9ydCBjYW5kaWRhdHVyZSBvZiBtYXN0ZXIgKi8KKyNkZWZpbmUJVFNQX1JFRlVTRQkJMTAJLyogcmVqZWN0IGNhbmRpZGF0dXJlIG9mIG1hc3RlciAqLworI2RlZmluZQlUU1BfQ09ORkxJQ1QJCTExCS8qIHR3byBvciBtb3JlIG1hc3RlcnMgcHJlc2VudCAqLworI2RlZmluZQlUU1BfUkVTT0xWRQkJMTIJLyogbWFzdGVycycgY29uZmxpY3QgcmVzb2x1dGlvbiAqLworI2RlZmluZQlUU1BfUVVJVAkJMTMJLyogcmVqZWN0IGNhbmRpZGF0dXJlIGlmIG1hc3RlciBpcyB1cCAqLworI2RlZmluZQlUU1BfREFURQkJMTQJLyogcmVzZXQgdGhlIHRpbWUgKGRhdGUgY29tbWFuZCkgKi8KKyNkZWZpbmUJVFNQX0RBVEVSRVEJCTE1CS8qIHJlbW90ZSByZXF1ZXN0IHRvIHJlc2V0IHRoZSB0aW1lICovCisjZGVmaW5lCVRTUF9EQVRFQUNLCQkxNgkvKiBhY2tub3dsZWRnZSB0aW1lIHNldHRpbmcgICovCisjZGVmaW5lCVRTUF9UUkFDRU9OCQkxNwkvKiB0dXJuIHRyYWNpbmcgb24gKi8KKyNkZWZpbmUJVFNQX1RSQUNFT0ZGCQkxOAkvKiB0dXJuIHRyYWNpbmcgb2ZmICovCisjZGVmaW5lCVRTUF9NU0lURQkJMTkJLyogZmluZCBvdXQgbWFzdGVyJ3Mgc2l0ZSAqLworI2RlZmluZQlUU1BfTVNJVEVSRVEJCTIwCS8qIHJlbW90ZSBtYXN0ZXIncyBzaXRlIHJlcXVlc3QgKi8KKyNkZWZpbmUJVFNQX1RFU1QJCTIxCS8qIGZvciB0ZXN0aW5nIGVsZWN0aW9uIGFsZ28gKi8KKyNkZWZpbmUJVFNQX1NFVERBVEUJCTIyCS8qIE5ldyBmcm9tIGRhdGUgY29tbWFuZCAqLworI2RlZmluZQlUU1BfU0VUREFURVJFUQkJMjMJLyogTmV3IHJlbW90ZSBmb3IgYWJvdmUgKi8KKyNkZWZpbmUJVFNQX0xPT1AJCTI0CS8qIGxvb3AgZGV0ZWN0aW9uIHBhY2tldCAqLworCisjZGVmaW5lCVRTUFRZUEVOVU1CRVIJCTI1CisKKyNpZmRlZiBUU1BUWVBFUworY2hhciAqdHNwdHlwZVtUU1BUWVBFTlVNQkVSXSA9CisgIHsgIkFOWSIsICJBREpUSU1FIiwgIkFDSyIsICJNQVNURVJSRVEiLCAiTUFTVEVSQUNLIiwgIlNFVFRJTUUiLCAiTUFTVEVSVVAiLAorICAiU0xBVkVVUCIsICJFTEVDVElPTiIsICJBQ0NFUFQiLCAiUkVGVVNFIiwgIkNPTkZMSUNUIiwgIlJFU09MVkUiLCAiUVVJVCIsCisgICJEQVRFIiwgIkRBVEVSRVEiLCAiREFURUFDSyIsICJUUkFDRU9OIiwgIlRSQUNFT0ZGIiwgIk1TSVRFIiwgIk1TSVRFUkVRIiwKKyAgIlRFU1QiLCAiU0VUREFURSIsICJTRVREQVRFUkVRIiwgIkxPT1AiIH07CisjZW5kaWYKKworI2VuZGlmIC8qIHByb3RvY29scy90aW1lZC5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcHRocmVhZC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3B0aHJlYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWZmZDM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3B0aHJlYWQuaApAQCAtMCwwICsxLDExMjEgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOAorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1BUSFJFQURfSAorI2RlZmluZSBfUFRIUkVBRF9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaW5jbHVkZSA8ZW5kaWFuLmg+CisjaW5jbHVkZSA8c2NoZWQuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNkZWZpbmUgX19uZWVkX3NpZ3NldF90CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8Yml0cy9wdGhyZWFkdHlwZXMuaD4KKyNpbmNsdWRlIDxiaXRzL3NldGptcC5oPgorI2luY2x1ZGUgPGJpdHMvd29yZHNpemUuaD4KKworCisvKiBEZXRhY2ggc3RhdGUuICAqLworZW51bQoreworICBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSwKKyNkZWZpbmUgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUJUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUKKyAgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQKKyNkZWZpbmUgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQJUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQKK307CisKKworLyogTXV0ZXggdHlwZXMuICAqLworZW51bQoreworICBQVEhSRUFEX01VVEVYX1RJTUVEX05QLAorICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKKyAgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QLAorICBQVEhSRUFEX01VVEVYX0FEQVBUSVZFX05QCisjaWZkZWYgX19VU0VfVU5JWDk4CisgICwKKyAgUFRIUkVBRF9NVVRFWF9OT1JNQUwgPSBQVEhSRUFEX01VVEVYX1RJTUVEX05QLAorICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSA9IFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAorICBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0sgPSBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlAsCisgIFBUSFJFQURfTVVURVhfREVGQVVMVCA9IFBUSFJFQURfTVVURVhfTk9STUFMCisjZW5kaWYKKyNpZmRlZiBfX1VTRV9HTlUKKyAgLyogRm9yIGNvbXBhdGliaWxpdHkuICAqLworICAsIFBUSFJFQURfTVVURVhfRkFTVF9OUCA9IFBUSFJFQURfTVVURVhfVElNRURfTlAKKyNlbmRpZgorfTsKKworCisjaWZkZWYgX19VU0VfR05VCisvKiBSb2J1c3QgbXV0ZXggb3Igbm90IGZsYWdzLiAgKi8KK2VudW0KK3sKKyAgUFRIUkVBRF9NVVRFWF9TVEFMTEVEX05QLAorICBQVEhSRUFEX01VVEVYX1JPQlVTVF9OUAorfTsKKyNlbmRpZgorCisKKyNpZmRlZiBfX1VTRV9VTklYOTgKKy8qIE11dGV4IHByb3RvY29scy4gICovCitlbnVtCit7CisgIFBUSFJFQURfUFJJT19OT05FLAorICBQVEhSRUFEX1BSSU9fSU5IRVJJVCwKKyAgUFRIUkVBRF9QUklPX1BST1RFQ1QKK307CisjZW5kaWYKKworCisvKiBNdXRleCBpbml0aWFsaXplcnMuICAqLworI2lmIF9fV09SRFNJWkUgPT0gNjQKKyMgZGVmaW5lIFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIgXAorICB7IHsgMCwgMCwgMCwgMCwgMCwgMCwgeyAwLCAwIH0gfSB9CisjIGlmZGVmIF9fVVNFX0dOVQorIyAgZGVmaW5lIFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSX05QIFwKKyAgeyB7IDAsIDAsIDAsIDAsIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLCAwLCB7IDAsIDAgfSB9IH0KKyMgIGRlZmluZSBQVEhSRUFEX0VSUk9SQ0hFQ0tfTVVURVhfSU5JVElBTElaRVJfTlAgXAorICB7IHsgMCwgMCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QLCAwLCB7IDAsIDAgfSB9IH0KKyMgIGRlZmluZSBQVEhSRUFEX0FEQVBUSVZFX01VVEVYX0lOSVRJQUxJWkVSX05QIFwKKyAgeyB7IDAsIDAsIDAsIDAsIFBUSFJFQURfTVVURVhfQURBUFRJVkVfTlAsIDAsIHsgMCwgMCB9IH0gfQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIgXAorICB7IHsgMCwgMCwgMCwgMCwgMCwgeyAwIH0gfSB9CisjIGlmZGVmIF9fVVNFX0dOVQorIyAgZGVmaW5lIFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSX05QIFwKKyAgeyB7IDAsIDAsIDAsIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLCAwLCB7IDAgfSB9IH0KKyMgIGRlZmluZSBQVEhSRUFEX0VSUk9SQ0hFQ0tfTVVURVhfSU5JVElBTElaRVJfTlAgXAorICB7IHsgMCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QLCAwLCB7IDAgfSB9IH0KKyMgIGRlZmluZSBQVEhSRUFEX0FEQVBUSVZFX01VVEVYX0lOSVRJQUxJWkVSX05QIFwKKyAgeyB7IDAsIDAsIDAsIFBUSFJFQURfTVVURVhfQURBUFRJVkVfTlAsIDAsIHsgMCB9IH0gfQorIyBlbmRpZgorI2VuZGlmCisKKworLyogUmVhZC13cml0ZSBsb2NrIHR5cGVzLiAgKi8KKyNpZiBkZWZpbmVkIF9fVVNFX1VOSVg5OCB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOMksKK2VudW0KK3sKKyAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1JFQURFUl9OUCwKKyAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OUCwKKyAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OT05SRUNVUlNJVkVfTlAsCisgIFBUSFJFQURfUldMT0NLX0RFRkFVTFRfTlAgPSBQVEhSRUFEX1JXTE9DS19QUkVGRVJfUkVBREVSX05QCit9OworCisvKiBSZWFkLXdyaXRlIGxvY2sgaW5pdGlhbGl6ZXJzLiAgKi8KKyMgZGVmaW5lIFBUSFJFQURfUldMT0NLX0lOSVRJQUxJWkVSIFwKKyAgeyB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSB9CisjIGlmZGVmIF9fVVNFX0dOVQorIyAgaWYgX19XT1JEU0laRSA9PSA2NAorIyAgIGRlZmluZSBQVEhSRUFEX1JXTE9DS19XUklURVJfTk9OUkVDVVJTSVZFX0lOSVRJQUxJWkVSX05QIFwKKyAgeyB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCQkJCQkgICAgICBcCisJUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OT05SRUNVUlNJVkVfTlAgfSB9CisjICBlbHNlCisjICAgaWYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTgorIyAgICBkZWZpbmUgUFRIUkVBRF9SV0xPQ0tfV1JJVEVSX05PTlJFQ1VSU0lWRV9JTklUSUFMSVpFUl9OUCBcCisgIHsgeyAwLCAwLCAwLCAwLCAwLCAwLCBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05PTlJFQ1VSU0lWRV9OUCwgXAorICAgICAgMCwgMCwgMCwgMCB9IH0KKyMgICBlbHNlCisjICAgIGRlZmluZSBQVEhSRUFEX1JXTE9DS19XUklURVJfTk9OUkVDVVJTSVZFX0lOSVRJQUxJWkVSX05QIFwKKyAgeyB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTk9OUkVDVVJTSVZFX05QLFwKKyAgICAgIDAgfSB9CisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYgIC8qIFVuaXg5OCBvciBYT3BlbjJLICovCisKKworLyogU2NoZWR1bGVyIGluaGVyaXRhbmNlLiAgKi8KK2VudW0KK3sKKyAgUFRIUkVBRF9JTkhFUklUX1NDSEVELAorI2RlZmluZSBQVEhSRUFEX0lOSEVSSVRfU0NIRUQgICBQVEhSRUFEX0lOSEVSSVRfU0NIRUQKKyAgUFRIUkVBRF9FWFBMSUNJVF9TQ0hFRAorI2RlZmluZSBQVEhSRUFEX0VYUExJQ0lUX1NDSEVEICBQVEhSRUFEX0VYUExJQ0lUX1NDSEVECit9OworCisKKy8qIFNjb3BlIGhhbmRsaW5nLiAgKi8KK2VudW0KK3sKKyAgUFRIUkVBRF9TQ09QRV9TWVNURU0sCisjZGVmaW5lIFBUSFJFQURfU0NPUEVfU1lTVEVNICAgIFBUSFJFQURfU0NPUEVfU1lTVEVNCisgIFBUSFJFQURfU0NPUEVfUFJPQ0VTUworI2RlZmluZSBQVEhSRUFEX1NDT1BFX1BST0NFU1MgICBQVEhSRUFEX1NDT1BFX1BST0NFU1MKK307CisKKworLyogUHJvY2VzcyBzaGFyZWQgb3IgcHJpdmF0ZSBmbGFnLiAgKi8KK2VudW0KK3sKKyAgUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUsCisjZGVmaW5lIFBUSFJFQURfUFJPQ0VTU19QUklWQVRFIFBUSFJFQURfUFJPQ0VTU19QUklWQVRFCisgIFBUSFJFQURfUFJPQ0VTU19TSEFSRUQKKyNkZWZpbmUgUFRIUkVBRF9QUk9DRVNTX1NIQVJFRCAgUFRIUkVBRF9QUk9DRVNTX1NIQVJFRAorfTsKKworCisKKy8qIENvbmRpdGlvbmFsIHZhcmlhYmxlIGhhbmRsaW5nLiAgKi8KKyNkZWZpbmUgUFRIUkVBRF9DT05EX0lOSVRJQUxJWkVSIHsgeyAwLCAwLCAwLCAwLCAwLCAodm9pZCAqKSAwLCAwLCAwIH0gfQorCisKKy8qIENsZWFudXAgYnVmZmVycyAqLworc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyCit7CisgIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopOyAgICAgICAgICAgICAvKiBGdW5jdGlvbiB0byBjYWxsLiAgKi8KKyAgdm9pZCAqX19hcmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEl0cyBhcmd1bWVudC4gICovCisgIGludCBfX2NhbmNlbHR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBTYXZlZCBjYW5jZWxsYXRpb24gdHlwZS4gKi8KKyAgc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX3ByZXY7IC8qIENoYWluaW5nIG9mIGNsZWFudXAgZnVuY3Rpb25zLiAgKi8KK307CisKKy8qIENhbmNlbGxhdGlvbiAqLworZW51bQoreworICBQVEhSRUFEX0NBTkNFTF9FTkFCTEUsCisjZGVmaW5lIFBUSFJFQURfQ0FOQ0VMX0VOQUJMRSAgIFBUSFJFQURfQ0FOQ0VMX0VOQUJMRQorICBQVEhSRUFEX0NBTkNFTF9ESVNBQkxFCisjZGVmaW5lIFBUSFJFQURfQ0FOQ0VMX0RJU0FCTEUgIFBUSFJFQURfQ0FOQ0VMX0RJU0FCTEUKK307CitlbnVtCit7CisgIFBUSFJFQURfQ0FOQ0VMX0RFRkVSUkVELAorI2RlZmluZSBQVEhSRUFEX0NBTkNFTF9ERUZFUlJFRAlQVEhSRUFEX0NBTkNFTF9ERUZFUlJFRAorICBQVEhSRUFEX0NBTkNFTF9BU1lOQ0hST05PVVMKKyNkZWZpbmUgUFRIUkVBRF9DQU5DRUxfQVNZTkNIUk9OT1VTCVBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VUworfTsKKyNkZWZpbmUgUFRIUkVBRF9DQU5DRUxFRCAoKHZvaWQgKikgLTEpCisKKworLyogU2luZ2xlIGV4ZWN1dGlvbiBoYW5kbGluZy4gICovCisjZGVmaW5lIFBUSFJFQURfT05DRV9JTklUIDAKKworCisjaWZkZWYgX19VU0VfWE9QRU4ySworLyogVmFsdWUgcmV0dXJuZWQgYnkgJ3B0aHJlYWRfYmFycmllcl93YWl0JyBmb3Igb25lIG9mIHRoZSB0aHJlYWRzIGFmdGVyCisgICB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIHRocmVhZHMgaGF2ZSBjYWxsZWQgdGhpcyBmdW5jdGlvbi4KKyAgIC0xIGlzIGRpc3RpbmN0IGZyb20gMCBhbmQgYWxsIGVycm5vIGNvbnN0YW50cyAqLworIyBkZWZpbmUgUFRIUkVBRF9CQVJSSUVSX1NFUklBTF9USFJFQUQgLTEKKyNlbmRpZgorCisKK19fQkVHSU5fREVDTFMKKworLyogQ3JlYXRlIGEgbmV3IHRocmVhZCwgc3RhcnRpbmcgd2l0aCBleGVjdXRpb24gb2YgU1RBUlQtUk9VVElORQorICAgZ2V0dGluZyBwYXNzZWQgQVJHLiAgQ3JlYXRpb24gYXR0cmlidXRlZCBjb21lIGZyb20gQVRUUi4gIFRoZSBuZXcKKyAgIGhhbmRsZSBpcyBzdG9yZWQgaW4gKk5FV1RIUkVBRC4gICovCitleHRlcm4gaW50IHB0aHJlYWRfY3JlYXRlIChwdGhyZWFkX3QgKl9fcmVzdHJpY3QgX19uZXd0aHJlYWQsCisJCQkgICBfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKKwkJCSAgIHZvaWQgKigqX19zdGFydF9yb3V0aW5lKSAodm9pZCAqKSwKKwkJCSAgIHZvaWQgKl9fcmVzdHJpY3QgX19hcmcpIF9fVEhST1cgX19ub25udWxsICgoMSwgMykpOworCisvKiBUZXJtaW5hdGUgY2FsbGluZyB0aHJlYWQuCisKKyAgIFRoZSByZWdpc3RlcmVkIGNsZWFudXAgaGFuZGxlcnMgYXJlIGNhbGxlZCB2aWEgZXhjZXB0aW9uIGhhbmRsaW5nCisgICBzbyB3ZSBjYW5ub3QgbWFyayB0aGlzIGZ1bmN0aW9uIHdpdGggX19USFJPVy4qLworZXh0ZXJuIHZvaWQgcHRocmVhZF9leGl0ICh2b2lkICpfX3JldHZhbCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOworCisvKiBNYWtlIGNhbGxpbmcgdGhyZWFkIHdhaXQgZm9yIHRlcm1pbmF0aW9uIG9mIHRoZSB0aHJlYWQgVEguICBUaGUKKyAgIGV4aXQgc3RhdHVzIG9mIHRoZSB0aHJlYWQgaXMgc3RvcmVkIGluICpUSFJFQURfUkVUVVJOLCBpZiBUSFJFQURfUkVUVVJOCisgICBpcyBub3QgTlVMTC4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aAorICAgX19USFJPVy4gICovCitleHRlcm4gaW50IHB0aHJlYWRfam9pbiAocHRocmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVhZF9yZXR1cm4pOworCisjaWZkZWYgX19VU0VfR05VCisvKiBDaGVjayB3aGV0aGVyIHRocmVhZCBUSCBoYXMgdGVybWluYXRlZC4gIElmIHllcyByZXR1cm4gdGhlIHN0YXR1cyBvZgorICAgdGhlIHRocmVhZCBpbiAqVEhSRUFEX1JFVFVSTiwgaWYgVEhSRUFEX1JFVFVSTiBpcyBub3QgTlVMTC4gICovCitleHRlcm4gaW50IHB0aHJlYWRfdHJ5am9pbl9ucCAocHRocmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVhZF9yZXR1cm4pIF9fVEhST1c7CisKKy8qIE1ha2UgY2FsbGluZyB0aHJlYWQgd2FpdCBmb3IgdGVybWluYXRpb24gb2YgdGhlIHRocmVhZCBUSCwgYnV0IG9ubHkKKyAgIHVudGlsIFRJTUVPVVQuICBUaGUgZXhpdCBzdGF0dXMgb2YgdGhlIHRocmVhZCBpcyBzdG9yZWQgaW4KKyAgICpUSFJFQURfUkVUVVJOLCBpZiBUSFJFQURfUkVUVVJOIGlzIG5vdCBOVUxMLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoCisgICBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF90aW1lZGpvaW5fbnAgKHB0aHJlYWRfdCBfX3RoLCB2b2lkICoqX190aHJlYWRfcmV0dXJuLAorCQkJCSBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19hYnN0aW1lKTsKKyNlbmRpZgorCisvKiBJbmRpY2F0ZSB0aGF0IHRoZSB0aHJlYWQgVEggaXMgbmV2ZXIgdG8gYmUgam9pbmVkIHdpdGggUFRIUkVBRF9KT0lOLgorICAgVGhlIHJlc291cmNlcyBvZiBUSCB3aWxsIHRoZXJlZm9yZSBiZSBmcmVlZCBpbW1lZGlhdGVseSB3aGVuIGl0CisgICB0ZXJtaW5hdGVzLCBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yIGFub3RoZXIgdGhyZWFkIHRvIHBlcmZvcm0gUFRIUkVBRF9KT0lOCisgICBvbiBpdC4gICovCitleHRlcm4gaW50IHB0aHJlYWRfZGV0YWNoIChwdGhyZWFkX3QgX190aCkgX19USFJPVzsKKworCisvKiBPYnRhaW4gdGhlIGlkZW50aWZpZXIgb2YgdGhlIGN1cnJlbnQgdGhyZWFkLiAgKi8KK2V4dGVybiBwdGhyZWFkX3QgcHRocmVhZF9zZWxmICh2b2lkKSBfX1RIUk9XIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKKworLyogQ29tcGFyZSB0d28gdGhyZWFkIGlkZW50aWZpZXJzLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9lcXVhbCAocHRocmVhZF90IF9fdGhyZWFkMSwgcHRocmVhZF90IF9fdGhyZWFkMikgX19USFJPVzsKKworCisvKiBUaHJlYWQgYXR0cmlidXRlIGhhbmRsaW5nLiAgKi8KKworLyogSW5pdGlhbGl6ZSB0aHJlYWQgYXR0cmlidXRlICpBVFRSIHdpdGggZGVmYXVsdCBhdHRyaWJ1dGVzCisgICAoZGV0YWNoc3RhdGUgaXMgUFRIUkVBRF9KT0lOQUJMRSwgc2NoZWR1bGluZyBwb2xpY3kgaXMgU0NIRURfT1RIRVIsCisgICAgbm8gdXNlci1wcm92aWRlZCBzdGFjaykuICAqLworZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfaW5pdCAocHRocmVhZF9hdHRyX3QgKl9fYXR0cikgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKy8qIERlc3Ryb3kgdGhyZWFkIGF0dHJpYnV0ZSAqQVRUUi4gICovCitleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9kZXN0cm95IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworLyogR2V0IGRldGFjaCBzdGF0ZSBhdHRyaWJ1dGUuICAqLworZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3RhdGUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKKwkJCQkJaW50ICpfX2RldGFjaHN0YXRlKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDIpKTsKKworLyogU2V0IGRldGFjaCBzdGF0ZSBhdHRyaWJ1dGUuICAqLworZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCisJCQkJCWludCBfX2RldGFjaHN0YXRlKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworCisvKiBHZXQgdGhlIHNpemUgb2YgdGhlIGd1YXJkIGFyZWEgY3JlYXRlZCBmb3Igc3RhY2sgb3ZlcmZsb3cgcHJvdGVjdGlvbi4gICovCitleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRndWFyZHNpemUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKKwkJCQkgICAgICBzaXplX3QgKl9fZ3VhcmRzaXplKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDIpKTsKKworLyogU2V0IHRoZSBzaXplIG9mIHRoZSBndWFyZCBhcmVhIGNyZWF0ZWQgZm9yIHN0YWNrIG92ZXJmbG93IHByb3RlY3Rpb24uICAqLworZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0Z3VhcmRzaXplIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAorCQkJCSAgICAgIHNpemVfdCBfX2d1YXJkc2l6ZSkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKworLyogUmV0dXJuIGluICpQQVJBTSB0aGUgc2NoZWR1bGluZyBwYXJhbWV0ZXJzIG9mICpBVFRSLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcGFyYW0gKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKKwkJCQkgICAgICAgX19hdHRyLAorCQkJCSAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QgX19wYXJhbSkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxLCAyKSk7CisKKy8qIFNldCBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgKHByaW9yaXR5LCBldGMpIGluICpBVFRSIGFjY29yZGluZyB0byBQQVJBTS4gICovCitleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBhcmFtIChwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCisJCQkJICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0CisJCQkJICAgICAgIF9fcGFyYW0pIF9fVEhST1cgX19ub25udWxsICgoMSwgMikpOworCisvKiBSZXR1cm4gaW4gKlBPTElDWSB0aGUgc2NoZWR1bGluZyBwb2xpY3kgb2YgKkFUVFIuICAqLworZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwb2xpY3kgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKKwkJCQkJX19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19wb2xpY3kpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSwgMikpOworCisvKiBTZXQgc2NoZWR1bGluZyBwb2xpY3kgaW4gKkFUVFIgYWNjb3JkaW5nIHRvIFBPTElDWS4gICovCitleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGljeSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fcG9saWN5KQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworLyogUmV0dXJuIGluICpJTkhFUklUIHRoZSBzY2hlZHVsaW5nIGluaGVyaXRhbmNlIG1vZGUgb2YgKkFUVFIuICAqLworZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0aW5oZXJpdHNjaGVkIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CisJCQkJCSBfX2F0dHIsIGludCAqX19yZXN0cmljdCBfX2luaGVyaXQpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSwgMikpOworCisvKiBTZXQgc2NoZWR1bGluZyBpbmhlcml0YW5jZSBtb2RlIGluICpBVFRSIGFjY29yZGluZyB0byBJTkhFUklULiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGluaGVyaXRzY2hlZCAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKKwkJCQkJIGludCBfX2luaGVyaXQpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisKKy8qIFJldHVybiBpbiAqU0NPUEUgdGhlIHNjaGVkdWxpbmcgY29udGVudGlvbiBzY29wZSBvZiAqQVRUUi4gICovCitleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY29wZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCisJCQkJICBpbnQgKl9fcmVzdHJpY3QgX19zY29wZSkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxLCAyKSk7CisKKy8qIFNldCBzY2hlZHVsaW5nIGNvbnRlbnRpb24gc2NvcGUgaW4gKkFUVFIgYWNjb3JkaW5nIHRvIFNDT1BFLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjb3BlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19zY29wZSkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKy8qIFJldHVybiB0aGUgcHJldmlvdXNseSBzZXQgYWRkcmVzcyBmb3IgdGhlIHN0YWNrLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkciAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAorCQkJCSAgICAgIF9fYXR0ciwgdm9pZCAqKl9fcmVzdHJpY3QgX19zdGFja2FkZHIpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSwgMikpIF9fYXR0cmlidXRlX2RlcHJlY2F0ZWRfXzsKKworLyogU2V0IHRoZSBzdGFydGluZyBhZGRyZXNzIG9mIHRoZSBzdGFjayBvZiB0aGUgdGhyZWFkIHRvIGJlIGNyZWF0ZWQuCisgICBEZXBlbmRpbmcgb24gd2hldGhlciB0aGUgc3RhY2sgZ3Jvd3MgdXAgb3IgZG93biB0aGUgdmFsdWUgbXVzdCBlaXRoZXIKKyAgIGJlIGhpZ2hlciBvciBsb3dlciB0aGFuIGFsbCB0aGUgYWRkcmVzcyBpbiB0aGUgbWVtb3J5IGJsb2NrLiAgVGhlCisgICBtaW5pbWFsIHNpemUgb2YgdGhlIGJsb2NrIG11c3QgYmUgUFRIUkVBRF9TVEFDS19NSU4uICAqLworZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2thZGRyIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAorCQkJCSAgICAgIHZvaWQgKl9fc3RhY2thZGRyKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKSBfX2F0dHJpYnV0ZV9kZXByZWNhdGVkX187CisKKy8qIFJldHVybiB0aGUgY3VycmVudGx5IHVzZWQgbWluaW1hbCBzdGFjayBzaXplLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAorCQkJCSAgICAgIF9fYXR0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc3RhY2tzaXplKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDIpKTsKKworLyogQWRkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtaW5pbXVtIHN0YWNrIHNpemUgbmVlZGVkIGZvciB0aGUgdGhyZWFkCisgICB0byBiZSBzdGFydGVkLiAgVGhpcyBzaXplIG11c3QgbmV2ZXIgYmUgbGVzcyB0aGFuIFBUSFJFQURfU1RBQ0tfTUlOCisgICBhbmQgbXVzdCBhbHNvIG5vdCBleGNlZWQgdGhlIHN5c3RlbSBsaW1pdHMuICAqLworZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2tzaXplIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAorCQkJCSAgICAgIHNpemVfdCBfX3N0YWNrc2l6ZSkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKyNpZmRlZiBfX1VTRV9YT1BFTjJLCisvKiBSZXR1cm4gdGhlIHByZXZpb3VzbHkgc2V0IGFkZHJlc3MgZm9yIHRoZSBzdGFjay4gICovCitleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFjayAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCisJCQkJICB2b2lkICoqX19yZXN0cmljdCBfX3N0YWNrYWRkciwKKwkJCQkgIHNpemVfdCAqX19yZXN0cmljdCBfX3N0YWNrc2l6ZSkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxLCAyLCAzKSk7CisKKy8qIFRoZSBmb2xsb3dpbmcgdHdvIGludGVyZmFjZXMgYXJlIGludGVuZGVkIHRvIHJlcGxhY2UgdGhlIGxhc3QgdHdvLiAgVGhleQorICAgcmVxdWlyZSBzZXR0aW5nIHRoZSBhZGRyZXNzIGFzIHdlbGwgYXMgdGhlIHNpemUgc2luY2Ugb25seSBzZXR0aW5nIHRoZQorICAgYWRkcmVzcyB3aWxsIG1ha2UgdGhlIGltcGxlbWVudGF0aW9uIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcyBpbXBvc3NpYmxlLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICpfX3N0YWNrYWRkciwKKwkJCQkgIHNpemVfdCBfX3N0YWNrc2l6ZSkgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisjZW5kaWYKKworI2lmZGVmIF9fVVNFX0dOVQorLyogVGhyZWFkIGNyZWF0ZWQgd2l0aCBhdHRyaWJ1dGUgQVRUUiB3aWxsIGJlIGxpbWl0ZWQgdG8gcnVuIG9ubHkgb24KKyAgIHRoZSBwcm9jZXNzb3JzIHJlcHJlc2VudGVkIGluIENQVVNFVC4gICovCitleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRhZmZpbml0eV9ucCAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKKwkJCQkJc2l6ZV90IF9fY3B1c2V0c2l6ZSwKKwkJCQkJX19jb25zdCBjcHVfc2V0X3QgKl9fY3B1c2V0KQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDMpKTsKKworLyogR2V0IGJpdCBzZXQgaW4gQ1BVU0VUIHJlcHJlc2VudGluZyB0aGUgcHJvY2Vzc29ycyB0aHJlYWRzIGNyZWF0ZWQgd2l0aAorICAgQVRUUiBjYW4gcnVuIG9uLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGFmZmluaXR5X25wIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCisJCQkJCXNpemVfdCBfX2NwdXNldHNpemUsCisJCQkJCWNwdV9zZXRfdCAqX19jcHVzZXQpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSwgMykpOworCisKKy8qIEluaXRpYWxpemUgdGhyZWFkIGF0dHJpYnV0ZSAqQVRUUiB3aXRoIGF0dHJpYnV0ZXMgY29ycmVzcG9uZGluZyB0byB0aGUKKyAgIGFscmVhZHkgcnVubmluZyB0aHJlYWQgVEguICBJdCBzaGFsbCBiZSBjYWxsZWQgb24gdW5pbml0aWFsaXplZCBBVFRSCisgICBhbmQgZGVzdHJveWVkIHdpdGggcHRocmVhZF9hdHRyX2Rlc3Ryb3kgd2hlbiBubyBsb25nZXIgbmVlZGVkLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9nZXRhdHRyX25wIChwdGhyZWFkX3QgX190aCwgcHRocmVhZF9hdHRyX3QgKl9fYXR0cikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgyKSk7CisjZW5kaWYKKworCisvKiBGdW5jdGlvbnMgZm9yIHNjaGVkdWxpbmcgY29udHJvbC4gICovCisKKy8qIFNldCB0aGUgc2NoZWR1bGluZyBwYXJhbWV0ZXJzIGZvciBUQVJHRVRfVEhSRUFEIGFjY29yZGluZyB0byBQT0xJQ1kKKyAgIGFuZCAqUEFSQU0uICAqLworZXh0ZXJuIGludCBwdGhyZWFkX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsIGludCBfX3BvbGljeSwKKwkJCQkgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDMpKTsKKworLyogUmV0dXJuIGluICpQT0xJQ1kgYW5kICpQQVJBTSB0aGUgc2NoZWR1bGluZyBwYXJhbWV0ZXJzIGZvciBUQVJHRVRfVEhSRUFELiAqLworZXh0ZXJuIGludCBwdGhyZWFkX2dldHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsCisJCQkJICBpbnQgKl9fcmVzdHJpY3QgX19wb2xpY3ksCisJCQkJICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QgX19wYXJhbSkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgyLCAzKSk7CisKKy8qIFNldCB0aGUgc2NoZWR1bGluZyBwcmlvcml0eSBmb3IgVEFSR0VUX1RIUkVBRC4gICovCitleHRlcm4gaW50IHB0aHJlYWRfc2V0c2NoZWRwcmlvIChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFkLCBpbnQgX19wcmlvKQorICAgICBfX1RIUk9XOworCisKKyNpZmRlZiBfX1VTRV9VTklYOTgKKy8qIERldGVybWluZSBsZXZlbCBvZiBjb25jdXJyZW5jeS4gICovCitleHRlcm4gaW50IHB0aHJlYWRfZ2V0Y29uY3VycmVuY3kgKHZvaWQpIF9fVEhST1c7CisKKy8qIFNldCBuZXcgY29uY3VycmVuY3kgbGV2ZWwgdG8gTEVWRUwuICAqLworZXh0ZXJuIGludCBwdGhyZWFkX3NldGNvbmN1cnJlbmN5IChpbnQgX19sZXZlbCkgX19USFJPVzsKKyNlbmRpZgorCisjaWZkZWYgX19VU0VfR05VCisvKiBZaWVsZCB0aGUgcHJvY2Vzc29yIHRvIGFub3RoZXIgdGhyZWFkIG9yIHByb2Nlc3MuCisgICBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gdGhlIFBPU0lYIGBzY2hlZF95aWVsZCcgZnVuY3Rpb24gYnV0CisgICBtaWdodCBiZSBkaWZmZXJlbnRseSBpbXBsZW1lbnRlZCBpbiB0aGUgY2FzZSBvZiBhIG0tb24tbiB0aHJlYWQKKyAgIGltcGxlbWVudGF0aW9uLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF95aWVsZCAodm9pZCkgX19USFJPVzsKKworCisvKiBMaW1pdCBzcGVjaWZpZWQgdGhyZWFkIFRIIHRvIHJ1biBvbmx5IG9uIHRoZSBwcm9jZXNzb3JzIHJlcHJlc2VudGVkCisgICBpbiBDUFVTRVQuICAqLworZXh0ZXJuIGludCBwdGhyZWFkX3NldGFmZmluaXR5X25wIChwdGhyZWFkX3QgX190aCwgc2l6ZV90IF9fY3B1c2V0c2l6ZSwKKwkJCQkgICBfX2NvbnN0IGNwdV9zZXRfdCAqX19jcHVzZXQpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMykpOworCisvKiBHZXQgYml0IHNldCBpbiBDUFVTRVQgcmVwcmVzZW50aW5nIHRoZSBwcm9jZXNzb3JzIFRIIGNhbiBydW4gb24uICAqLworZXh0ZXJuIGludCBwdGhyZWFkX2dldGFmZmluaXR5X25wIChwdGhyZWFkX3QgX190aCwgc2l6ZV90IF9fY3B1c2V0c2l6ZSwKKwkJCQkgICBjcHVfc2V0X3QgKl9fY3B1c2V0KQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDMpKTsKKyNlbmRpZgorCisKKy8qIEZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgaW5pdGlhbGl6YXRpb24uICAqLworCisvKiBHdWFyYW50ZWUgdGhhdCB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gSU5JVF9ST1VUSU5FIHdpbGwgYmUgY2FsbGVkCisgICBvbmx5IG9uY2UsIGV2ZW4gaWYgcHRocmVhZF9vbmNlIGlzIGV4ZWN1dGVkIHNldmVyYWwgdGltZXMgd2l0aCB0aGUKKyAgIHNhbWUgT05DRV9DT05UUk9MIGFyZ3VtZW50LiBPTkNFX0NPTlRST0wgbXVzdCBwb2ludCB0byBhIHN0YXRpYyBvcgorICAgZXh0ZXJuIHZhcmlhYmxlIGluaXRpYWxpemVkIHRvIFBUSFJFQURfT05DRV9JTklULgorCisgICBUaGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIG1pZ2h0IHRocm93IGV4Y2VwdGlvbiB3aGljaCBpcyB3aHkKKyAgIHRoaXMgZnVuY3Rpb24gaXMgbm90IG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBwdGhyZWFkX29uY2UgKHB0aHJlYWRfb25jZV90ICpfX29uY2VfY29udHJvbCwKKwkJCSB2b2lkICgqX19pbml0X3JvdXRpbmUpICh2b2lkKSkgX19ub25udWxsICgoMSwgMikpOworCisKKy8qIEZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY2FuY2VsbGF0aW9uLgorCisgICBOb3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBsaWNpdGx5IG5vdCBtYXJrZWQgdG8gbm90IHRocm93IGFuCisgICBleGNlcHRpb24gaW4gQysrIGNvZGUuICBJZiBjYW5jZWxsYXRpb24gaXMgaW1wbGVtZW50ZWQgYnkgdW53aW5kaW5nCisgICB0aGlzIGlzIG5lY2Vzc2FyeSB0byBoYXZlIHRoZSBjb21waWxlciBnZW5lcmF0ZSB0aGUgdW53aW5kIGluZm9ybWF0aW9uLiAgKi8KKworLyogU2V0IGNhbmNlbGFiaWxpdHkgc3RhdGUgb2YgY3VycmVudCB0aHJlYWQgdG8gU1RBVEUsIHJldHVybmluZyBvbGQKKyAgIHN0YXRlIGluICpPTERTVEFURSBpZiBPTERTVEFURSBpcyBub3QgTlVMTC4gICovCitleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUgKGludCBfX3N0YXRlLCBpbnQgKl9fb2xkc3RhdGUpOworCisvKiBTZXQgY2FuY2VsbGF0aW9uIHN0YXRlIG9mIGN1cnJlbnQgdGhyZWFkIHRvIFRZUEUsIHJldHVybmluZyB0aGUgb2xkCisgICB0eXBlIGluICpPTERUWVBFIGlmIE9MRFRZUEUgaXMgbm90IE5VTEwuICAqLworZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHR5cGUgKGludCBfX3R5cGUsIGludCAqX19vbGR0eXBlKTsKKworLyogQ2FuY2VsIFRIUkVBRCBpbW1lZGlhdGVseSBvciBhdCB0aGUgbmV4dCBwb3NzaWJpbGl0eS4gICovCitleHRlcm4gaW50IHB0aHJlYWRfY2FuY2VsIChwdGhyZWFkX3QgX190aCk7CisKKy8qIFRlc3QgZm9yIHBlbmRpbmcgY2FuY2VsbGF0aW9uIGZvciB0aGUgY3VycmVudCB0aHJlYWQgYW5kIHRlcm1pbmF0ZQorICAgdGhlIHRocmVhZCBhcyBwZXIgcHRocmVhZF9leGl0KFBUSFJFQURfQ0FOQ0VMRUQpIGlmIGl0IGhhcyBiZWVuCisgICBjYW5jZWxsZWQuICAqLworZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0Y2FuY2VsICh2b2lkKTsKKworCisvKiBDYW5jZWxsYXRpb24gaGFuZGxpbmcgd2l0aCBpbnRlZ3JhdGlvbiBpbnRvIGV4Y2VwdGlvbiBoYW5kbGluZy4gICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIHN0cnVjdAorICB7CisgICAgX19qbXBfYnVmIF9fY2FuY2VsX2ptcF9idWY7CisgICAgaW50IF9fbWFza193YXNfc2F2ZWQ7CisgIH0gX19jYW5jZWxfam1wX2J1ZlsxXTsKKyAgdm9pZCAqX19wYWRbNF07Cit9IF9fcHRocmVhZF91bndpbmRfYnVmX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKSk7CisKKy8qIE5vIHNwZWNpYWwgYXR0cmlidXRlcyBieSBkZWZhdWx0LiAgKi8KKyNpZm5kZWYgX19jbGVhbnVwX2ZjdF9hdHRyaWJ1dGUKKyMgZGVmaW5lIF9fY2xlYW51cF9mY3RfYXR0cmlidXRlCisjZW5kaWYKKworCisvKiBTdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgY2xlYW51cCBoYW5kbGVyIGluZm9ybWF0aW9uLiAgKi8KK3N0cnVjdCBfX3B0aHJlYWRfY2xlYW51cF9mcmFtZQoreworICB2b2lkICgqX19jYW5jZWxfcm91dGluZSkgKHZvaWQgKik7CisgIHZvaWQgKl9fY2FuY2VsX2FyZzsKKyAgaW50IF9fZG9faXQ7CisgIGludCBfX2NhbmNlbF90eXBlOworfTsKKworI2lmIGRlZmluZWQgX19HTlVDX18gJiYgZGVmaW5lZCBfX0VYQ0VQVElPTlMKKyMgaWZkZWYgX19jcGx1c3BsdXMKKy8qIENsYXNzIHRvIGhhbmRsZSBjYW5jZWxsYXRpb24gaGFuZGxlciBpbnZvY2F0aW9uLiAgKi8KK2NsYXNzIF9fcHRocmVhZF9jbGVhbnVwX2NsYXNzCit7CisgIHZvaWQgKCpfX2NhbmNlbF9yb3V0aW5lKSAodm9pZCAqKTsKKyAgdm9pZCAqX19jYW5jZWxfYXJnOworICBpbnQgX19kb19pdDsKKyAgaW50IF9fY2FuY2VsX3R5cGU7CisKKyBwdWJsaWM6CisgIF9fcHRocmVhZF9jbGVhbnVwX2NsYXNzICh2b2lkICgqX19mY3QpICh2b2lkICopLCB2b2lkICpfX2FyZykKKyAgICA6IF9fY2FuY2VsX3JvdXRpbmUgKF9fZmN0KSwgX19jYW5jZWxfYXJnIChfX2FyZyksIF9fZG9faXQgKDEpIHsgfQorICB+X19wdGhyZWFkX2NsZWFudXBfY2xhc3MgKCkgeyBpZiAoX19kb19pdCkgX19jYW5jZWxfcm91dGluZSAoX19jYW5jZWxfYXJnKTsgfQorICB2b2lkIF9fc2V0ZG9pdCAoaW50IF9fbmV3dmFsKSB7IF9fZG9faXQgPSBfX25ld3ZhbDsgfQorICB2b2lkIF9fZGVmZXIgKCkgeyBwdGhyZWFkX3NldGNhbmNlbHR5cGUgKFBUSFJFQURfQ0FOQ0VMX0RFRkVSUkVELAorCQkJCQkgICAmX19jYW5jZWxfdHlwZSk7IH0KKyAgdm9pZCBfX3Jlc3RvcmUgKCkgY29uc3QgeyBwdGhyZWFkX3NldGNhbmNlbHR5cGUgKF9fY2FuY2VsX3R5cGUsIDApOyB9Cit9OworCisvKiBJbnN0YWxsIGEgY2xlYW51cCBoYW5kbGVyOiBST1VUSU5FIHdpbGwgYmUgY2FsbGVkIHdpdGggYXJndW1lbnRzIEFSRworICAgd2hlbiB0aGUgdGhyZWFkIGlzIGNhbmNlbGVkIG9yIGNhbGxzIHB0aHJlYWRfZXhpdC4gIFJPVVRJTkUgd2lsbCBhbHNvCisgICBiZSBjYWxsZWQgd2l0aCBhcmd1bWVudHMgQVJHIHdoZW4gdGhlIG1hdGNoaW5nIHB0aHJlYWRfY2xlYW51cF9wb3AKKyAgIGlzIGV4ZWN1dGVkIHdpdGggbm9uLXplcm8gRVhFQ1VURSBhcmd1bWVudC4KKworICAgcHRocmVhZF9jbGVhbnVwX3B1c2ggYW5kIHB0aHJlYWRfY2xlYW51cF9wb3AgYXJlIG1hY3JvcyBhbmQgbXVzdCBhbHdheXMKKyAgIGJlIHVzZWQgaW4gbWF0Y2hpbmcgcGFpcnMgYXQgdGhlIHNhbWUgbmVzdGluZyBsZXZlbCBvZiBicmFjZXMuICAqLworIyAgZGVmaW5lIHB0aHJlYWRfY2xlYW51cF9wdXNoKHJvdXRpbmUsIGFyZykgXAorICBkbyB7CQkJCQkJCQkJICAgICAgXAorICAgIF9fcHRocmVhZF9jbGVhbnVwX2NsYXNzIF9fY2xmcmFtZSAocm91dGluZSwgYXJnKQorCisvKiBSZW1vdmUgYSBjbGVhbnVwIGhhbmRsZXIgaW5zdGFsbGVkIGJ5IHRoZSBtYXRjaGluZyBwdGhyZWFkX2NsZWFudXBfcHVzaC4KKyAgIElmIEVYRUNVVEUgaXMgbm9uLXplcm8sIHRoZSBoYW5kbGVyIGZ1bmN0aW9uIGlzIGNhbGxlZC4gKi8KKyMgIGRlZmluZSBwdGhyZWFkX2NsZWFudXBfcG9wKGV4ZWN1dGUpIFwKKyAgICBfX2NsZnJhbWUuX19zZXRkb2l0IChleGVjdXRlKTsJCQkJCSAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworIyAgaWZkZWYgX19VU0VfR05VCisvKiBJbnN0YWxsIGEgY2xlYW51cCBoYW5kbGVyIGFzIHB0aHJlYWRfY2xlYW51cF9wdXNoIGRvZXMsIGJ1dCBhbHNvCisgICBzYXZlcyB0aGUgY3VycmVudCBjYW5jZWxsYXRpb24gdHlwZSBhbmQgc2V0cyBpdCB0byBkZWZlcnJlZAorICAgY2FuY2VsbGF0aW9uLiAgKi8KKyMgICBkZWZpbmUgcHRocmVhZF9jbGVhbnVwX3B1c2hfZGVmZXJfbnAocm91dGluZSwgYXJnKSBcCisgIGRvIHsJCQkJCQkJCQkgICAgICBcCisgICAgX19wdGhyZWFkX2NsZWFudXBfY2xhc3MgX19jbGZyYW1lIChyb3V0aW5lLCBhcmcpOwkJCSAgICAgIFwKKyAgICBfX2NsZnJhbWUuX19kZWZlciAoKQorCisvKiBSZW1vdmUgYSBjbGVhbnVwIGhhbmRsZXIgYXMgcHRocmVhZF9jbGVhbnVwX3BvcCBkb2VzLCBidXQgYWxzbworICAgcmVzdG9yZXMgdGhlIGNhbmNlbGxhdGlvbiB0eXBlIHRoYXQgd2FzIGluIGVmZmVjdCB3aGVuIHRoZSBtYXRjaGluZworICAgcHRocmVhZF9jbGVhbnVwX3B1c2hfZGVmZXIgd2FzIGNhbGxlZC4gICovCisjICAgZGVmaW5lIHB0aHJlYWRfY2xlYW51cF9wb3BfcmVzdG9yZV9ucChleGVjdXRlKSBcCisgICAgX19jbGZyYW1lLl9fcmVzdG9yZSAoKTsJCQkJCQkgICAgICBcCisgICAgX19jbGZyYW1lLl9fc2V0ZG9pdCAoZXhlY3V0ZSk7CQkJCQkgICAgICBcCisgIH0gd2hpbGUgKDApCisjICBlbmRpZgorIyBlbHNlCisvKiBGdW5jdGlvbiBjYWxsZWQgdG8gY2FsbCB0aGUgY2xlYW51cCBoYW5kbGVyLiAgQXMgYW4gZXh0ZXJuIGlubGluZQorICAgZnVuY3Rpb24gdGhlIGNvbXBpbGVyIGlzIGZyZWUgdG8gZGVjaWRlIGlubGluaW5nIHRoZSBjaGFuZ2Ugd2hlbgorICAgbmVlZGVkIG9yIGZhbGwgYmFjayBvbiB0aGUgY29weSB3aGljaCBtdXN0IGV4aXN0IHNvbWV3aGVyZQorICAgZWxzZS4gICovCitfX2V4dGVybl9pbmxpbmUgdm9pZAorX19wdGhyZWFkX2NsZWFudXBfcm91dGluZSAoc3RydWN0IF9fcHRocmVhZF9jbGVhbnVwX2ZyYW1lICpfX2ZyYW1lKQoreworICBpZiAoX19mcmFtZS0+X19kb19pdCkKKyAgICBfX2ZyYW1lLT5fX2NhbmNlbF9yb3V0aW5lIChfX2ZyYW1lLT5fX2NhbmNlbF9hcmcpOworfQorCisvKiBJbnN0YWxsIGEgY2xlYW51cCBoYW5kbGVyOiBST1VUSU5FIHdpbGwgYmUgY2FsbGVkIHdpdGggYXJndW1lbnRzIEFSRworICAgd2hlbiB0aGUgdGhyZWFkIGlzIGNhbmNlbGVkIG9yIGNhbGxzIHB0aHJlYWRfZXhpdC4gIFJPVVRJTkUgd2lsbCBhbHNvCisgICBiZSBjYWxsZWQgd2l0aCBhcmd1bWVudHMgQVJHIHdoZW4gdGhlIG1hdGNoaW5nIHB0aHJlYWRfY2xlYW51cF9wb3AKKyAgIGlzIGV4ZWN1dGVkIHdpdGggbm9uLXplcm8gRVhFQ1VURSBhcmd1bWVudC4KKworICAgcHRocmVhZF9jbGVhbnVwX3B1c2ggYW5kIHB0aHJlYWRfY2xlYW51cF9wb3AgYXJlIG1hY3JvcyBhbmQgbXVzdCBhbHdheXMKKyAgIGJlIHVzZWQgaW4gbWF0Y2hpbmcgcGFpcnMgYXQgdGhlIHNhbWUgbmVzdGluZyBsZXZlbCBvZiBicmFjZXMuICAqLworIyAgZGVmaW5lIHB0aHJlYWRfY2xlYW51cF9wdXNoKHJvdXRpbmUsIGFyZykgXAorICBkbyB7CQkJCQkJCQkJICAgICAgXAorICAgIHN0cnVjdCBfX3B0aHJlYWRfY2xlYW51cF9mcmFtZSBfX2NsZnJhbWUJCQkJICAgICAgXAorICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY2xlYW51cF9fIChfX3B0aHJlYWRfY2xlYW51cF9yb3V0aW5lKSkpCQkgICAgICBcCisgICAgICA9IHsgLl9fY2FuY2VsX3JvdXRpbmUgPSAocm91dGluZSksIC5fX2NhbmNlbF9hcmcgPSAoYXJnKSwJIAkgICAgICBcCisJICAuX19kb19pdCA9IDEgfTsKKworLyogUmVtb3ZlIGEgY2xlYW51cCBoYW5kbGVyIGluc3RhbGxlZCBieSB0aGUgbWF0Y2hpbmcgcHRocmVhZF9jbGVhbnVwX3B1c2guCisgICBJZiBFWEVDVVRFIGlzIG5vbi16ZXJvLCB0aGUgaGFuZGxlciBmdW5jdGlvbiBpcyBjYWxsZWQuICovCisjICBkZWZpbmUgcHRocmVhZF9jbGVhbnVwX3BvcChleGVjdXRlKSBcCisgICAgX19jbGZyYW1lLl9fZG9faXQgPSAoZXhlY3V0ZSk7CQkJCQkgICAgICBcCisgIH0gd2hpbGUgKDApCisKKyMgIGlmZGVmIF9fVVNFX0dOVQorLyogSW5zdGFsbCBhIGNsZWFudXAgaGFuZGxlciBhcyBwdGhyZWFkX2NsZWFudXBfcHVzaCBkb2VzLCBidXQgYWxzbworICAgc2F2ZXMgdGhlIGN1cnJlbnQgY2FuY2VsbGF0aW9uIHR5cGUgYW5kIHNldHMgaXQgdG8gZGVmZXJyZWQKKyAgIGNhbmNlbGxhdGlvbi4gICovCisjICAgZGVmaW5lIHB0aHJlYWRfY2xlYW51cF9wdXNoX2RlZmVyX25wKHJvdXRpbmUsIGFyZykgXAorICBkbyB7CQkJCQkJCQkJICAgICAgXAorICAgIHN0cnVjdCBfX3B0aHJlYWRfY2xlYW51cF9mcmFtZSBfX2NsZnJhbWUJCQkJICAgICAgXAorICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY2xlYW51cF9fIChfX3B0aHJlYWRfY2xlYW51cF9yb3V0aW5lKSkpCQkgICAgICBcCisgICAgICA9IHsgLl9fY2FuY2VsX3JvdXRpbmUgPSAocm91dGluZSksIC5fX2NhbmNlbF9hcmcgPSAoYXJnKSwJCSAgICAgIFwKKwkgIC5fX2RvX2l0ID0gMSB9OwkJCQkJCSAgICAgIFwKKyAgICAodm9pZCkgcHRocmVhZF9zZXRjYW5jZWx0eXBlIChQVEhSRUFEX0NBTkNFTF9ERUZFUlJFRCwJCSAgICAgIFwKKwkJCQkgICZfX2NsZnJhbWUuX19jYW5jZWxfdHlwZSkKKworLyogUmVtb3ZlIGEgY2xlYW51cCBoYW5kbGVyIGFzIHB0aHJlYWRfY2xlYW51cF9wb3AgZG9lcywgYnV0IGFsc28KKyAgIHJlc3RvcmVzIHRoZSBjYW5jZWxsYXRpb24gdHlwZSB0aGF0IHdhcyBpbiBlZmZlY3Qgd2hlbiB0aGUgbWF0Y2hpbmcKKyAgIHB0aHJlYWRfY2xlYW51cF9wdXNoX2RlZmVyIHdhcyBjYWxsZWQuICAqLworIyAgIGRlZmluZSBwdGhyZWFkX2NsZWFudXBfcG9wX3Jlc3RvcmVfbnAoZXhlY3V0ZSkgXAorICAgICh2b2lkKSBwdGhyZWFkX3NldGNhbmNlbHR5cGUgKF9fY2xmcmFtZS5fX2NhbmNlbF90eXBlLCBOVUxMKTsJICAgICAgXAorICAgIF9fY2xmcmFtZS5fX2RvX2l0ID0gKGV4ZWN1dGUpOwkJCQkJICAgICAgXAorICB9IHdoaWxlICgwKQorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbHNlCisvKiBJbnN0YWxsIGEgY2xlYW51cCBoYW5kbGVyOiBST1VUSU5FIHdpbGwgYmUgY2FsbGVkIHdpdGggYXJndW1lbnRzIEFSRworICAgd2hlbiB0aGUgdGhyZWFkIGlzIGNhbmNlbGVkIG9yIGNhbGxzIHB0aHJlYWRfZXhpdC4gIFJPVVRJTkUgd2lsbCBhbHNvCisgICBiZSBjYWxsZWQgd2l0aCBhcmd1bWVudHMgQVJHIHdoZW4gdGhlIG1hdGNoaW5nIHB0aHJlYWRfY2xlYW51cF9wb3AKKyAgIGlzIGV4ZWN1dGVkIHdpdGggbm9uLXplcm8gRVhFQ1VURSBhcmd1bWVudC4KKworICAgcHRocmVhZF9jbGVhbnVwX3B1c2ggYW5kIHB0aHJlYWRfY2xlYW51cF9wb3AgYXJlIG1hY3JvcyBhbmQgbXVzdCBhbHdheXMKKyAgIGJlIHVzZWQgaW4gbWF0Y2hpbmcgcGFpcnMgYXQgdGhlIHNhbWUgbmVzdGluZyBsZXZlbCBvZiBicmFjZXMuICAqLworIyBkZWZpbmUgcHRocmVhZF9jbGVhbnVwX3B1c2gocm91dGluZSwgYXJnKSBcCisgIGRvIHsJCQkJCQkJCQkgICAgICBcCisgICAgX19wdGhyZWFkX3Vud2luZF9idWZfdCBfX2NhbmNlbF9idWY7CQkJCSAgICAgIFwKKyAgICB2b2lkICgqX19jYW5jZWxfcm91dGluZSkgKHZvaWQgKikgPSAocm91dGluZSk7CQkJICAgICAgXAorICAgIHZvaWQgKl9fY2FuY2VsX2FyZyA9IChhcmcpOwkJCQkJCSAgICAgIFwKKyAgICBpbnQgbm90X2ZpcnN0X2NhbGwgPSBfX3NpZ3NldGptcCAoKHN0cnVjdCBfX2ptcF9idWZfdGFnICopICh2b2lkICopCSAgICAgIFwKKwkJCQkgICAgICBfX2NhbmNlbF9idWYuX19jYW5jZWxfam1wX2J1ZiwgMCk7ICAgICAgXAorICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChub3RfZmlyc3RfY2FsbCwgMCkpCQkJCSAgICAgIFwKKyAgICAgIHsJCQkJCQkJCQkgICAgICBcCisJX19jYW5jZWxfcm91dGluZSAoX19jYW5jZWxfYXJnKTsJCQkJICAgICAgXAorCV9fcHRocmVhZF91bndpbmRfbmV4dCAoJl9fY2FuY2VsX2J1Zik7CQkJCSAgICAgIFwKKwkvKiBOT1RSRUFDSEVEICovCQkJCQkJICAgICAgXAorICAgICAgfQkJCQkJCQkJCSAgICAgIFwKKwkJCQkJCQkJCSAgICAgIFwKKyAgICBfX3B0aHJlYWRfcmVnaXN0ZXJfY2FuY2VsICgmX19jYW5jZWxfYnVmKTsJCQkJICAgICAgXAorICAgIGRvIHsKK2V4dGVybiB2b2lkIF9fcHRocmVhZF9yZWdpc3Rlcl9jYW5jZWwgKF9fcHRocmVhZF91bndpbmRfYnVmX3QgKl9fYnVmKQorICAgICBfX2NsZWFudXBfZmN0X2F0dHJpYnV0ZTsKKworLyogUmVtb3ZlIGEgY2xlYW51cCBoYW5kbGVyIGluc3RhbGxlZCBieSB0aGUgbWF0Y2hpbmcgcHRocmVhZF9jbGVhbnVwX3B1c2guCisgICBJZiBFWEVDVVRFIGlzIG5vbi16ZXJvLCB0aGUgaGFuZGxlciBmdW5jdGlvbiBpcyBjYWxsZWQuICovCisjIGRlZmluZSBwdGhyZWFkX2NsZWFudXBfcG9wKGV4ZWN1dGUpIFwKKyAgICAgIGRvOyB3aGlsZSAoMCk7IC8qIEVtcHR5IHRvIGFsbG93IGxhYmVsIGJlZm9yZSBwdGhyZWFkX2NsZWFudXBfcG9wLiAgKi8gIFwKKyAgICB9IHdoaWxlICgwKTsJCQkJCQkJICAgICAgXAorICAgIF9fcHRocmVhZF91bnJlZ2lzdGVyX2NhbmNlbCAoJl9fY2FuY2VsX2J1Zik7CQkJICAgICAgXAorICAgIGlmIChleGVjdXRlKQkJCQkJCQkgICAgICBcCisgICAgICBfX2NhbmNlbF9yb3V0aW5lIChfX2NhbmNlbF9hcmcpOwkJCQkJICAgICAgXAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgX19wdGhyZWFkX3VucmVnaXN0ZXJfY2FuY2VsIChfX3B0aHJlYWRfdW53aW5kX2J1Zl90ICpfX2J1ZikKKyAgX19jbGVhbnVwX2ZjdF9hdHRyaWJ1dGU7CisKKyMgaWZkZWYgX19VU0VfR05VCisvKiBJbnN0YWxsIGEgY2xlYW51cCBoYW5kbGVyIGFzIHB0aHJlYWRfY2xlYW51cF9wdXNoIGRvZXMsIGJ1dCBhbHNvCisgICBzYXZlcyB0aGUgY3VycmVudCBjYW5jZWxsYXRpb24gdHlwZSBhbmQgc2V0cyBpdCB0byBkZWZlcnJlZAorICAgY2FuY2VsbGF0aW9uLiAgKi8KKyMgIGRlZmluZSBwdGhyZWFkX2NsZWFudXBfcHVzaF9kZWZlcl9ucChyb3V0aW5lLCBhcmcpIFwKKyAgZG8gewkJCQkJCQkJCSAgICAgIFwKKyAgICBfX3B0aHJlYWRfdW53aW5kX2J1Zl90IF9fY2FuY2VsX2J1ZjsJCQkJICAgICAgXAorICAgIHZvaWQgKCpfX2NhbmNlbF9yb3V0aW5lKSAodm9pZCAqKSA9IChyb3V0aW5lKTsJCQkgICAgICBcCisgICAgdm9pZCAqX19jYW5jZWxfYXJnID0gKGFyZyk7CQkJCQkJICAgICAgXAorICAgIGludCBub3RfZmlyc3RfY2FsbCA9IF9fc2lnc2V0am1wICgoc3RydWN0IF9fam1wX2J1Zl90YWcgKikgKHZvaWQgKikJICAgICAgXAorCQkJCSAgICAgIF9fY2FuY2VsX2J1Zi5fX2NhbmNlbF9qbXBfYnVmLCAwKTsgICAgICBcCisgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKG5vdF9maXJzdF9jYWxsLCAwKSkJCQkJICAgICAgXAorICAgICAgewkJCQkJCQkJCSAgICAgIFwKKwlfX2NhbmNlbF9yb3V0aW5lIChfX2NhbmNlbF9hcmcpOwkJCQkgICAgICBcCisJX19wdGhyZWFkX3Vud2luZF9uZXh0ICgmX19jYW5jZWxfYnVmKTsJCQkJICAgICAgXAorCS8qIE5PVFJFQUNIRUQgKi8JCQkJCQkgICAgICBcCisgICAgICB9CQkJCQkJCQkJICAgICAgXAorCQkJCQkJCQkJICAgICAgXAorICAgIF9fcHRocmVhZF9yZWdpc3Rlcl9jYW5jZWxfZGVmZXIgKCZfX2NhbmNlbF9idWYpOwkJCSAgICAgIFwKKyAgICBkbyB7CitleHRlcm4gdm9pZCBfX3B0aHJlYWRfcmVnaXN0ZXJfY2FuY2VsX2RlZmVyIChfX3B0aHJlYWRfdW53aW5kX2J1Zl90ICpfX2J1ZikKKyAgICAgX19jbGVhbnVwX2ZjdF9hdHRyaWJ1dGU7CisKKy8qIFJlbW92ZSBhIGNsZWFudXAgaGFuZGxlciBhcyBwdGhyZWFkX2NsZWFudXBfcG9wIGRvZXMsIGJ1dCBhbHNvCisgICByZXN0b3JlcyB0aGUgY2FuY2VsbGF0aW9uIHR5cGUgdGhhdCB3YXMgaW4gZWZmZWN0IHdoZW4gdGhlIG1hdGNoaW5nCisgICBwdGhyZWFkX2NsZWFudXBfcHVzaF9kZWZlciB3YXMgY2FsbGVkLiAgKi8KKyMgIGRlZmluZSBwdGhyZWFkX2NsZWFudXBfcG9wX3Jlc3RvcmVfbnAoZXhlY3V0ZSkgXAorICAgICAgZG87IHdoaWxlICgwKTsgLyogRW1wdHkgdG8gYWxsb3cgbGFiZWwgYmVmb3JlIHB0aHJlYWRfY2xlYW51cF9wb3AuICAqLyAgXAorICAgIH0gd2hpbGUgKDApOwkJCQkJCQkgICAgICBcCisgICAgX19wdGhyZWFkX3VucmVnaXN0ZXJfY2FuY2VsX3Jlc3RvcmUgKCZfX2NhbmNlbF9idWYpOwkJICAgICAgXAorICAgIGlmIChleGVjdXRlKQkJCQkJCQkgICAgICBcCisgICAgICBfX2NhbmNlbF9yb3V0aW5lIChfX2NhbmNlbF9hcmcpOwkJCQkJICAgICAgXAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgX19wdGhyZWFkX3VucmVnaXN0ZXJfY2FuY2VsX3Jlc3RvcmUgKF9fcHRocmVhZF91bndpbmRfYnVmX3QgKl9fYnVmKQorICBfX2NsZWFudXBfZmN0X2F0dHJpYnV0ZTsKKyMgZW5kaWYKKworLyogSW50ZXJuYWwgaW50ZXJmYWNlIHRvIGluaXRpYXRlIGNsZWFudXAuICAqLworZXh0ZXJuIHZvaWQgX19wdGhyZWFkX3Vud2luZF9uZXh0IChfX3B0aHJlYWRfdW53aW5kX2J1Zl90ICpfX2J1ZikKKyAgICAgX19jbGVhbnVwX2ZjdF9hdHRyaWJ1dGUgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpCisjIGlmbmRlZiBTSEFSRUQKKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fd2Vha19fKSkKKyMgZW5kaWYKKyAgICAgOworI2VuZGlmCisKKy8qIEZ1bmN0aW9uIHVzZWQgaW4gdGhlIG1hY3Jvcy4gICovCitzdHJ1Y3QgX19qbXBfYnVmX3RhZzsKK2V4dGVybiBpbnQgX19zaWdzZXRqbXAgKHN0cnVjdCBfX2ptcF9idWZfdGFnICpfX2VudiwgaW50IF9fc2F2ZW1hc2spIF9fVEhST1c7CisKKworLyogTXV0ZXggaGFuZGxpbmcuICAqLworCisvKiBJbml0aWFsaXplIGEgbXV0ZXguICAqLworZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2luaXQgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCwKKwkJCSAgICAgICBfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fbXV0ZXhhdHRyKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworLyogRGVzdHJveSBhIG11dGV4LiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9tdXRleF9kZXN0cm95IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisvKiBUcnkgbG9ja2luZyBhIG11dGV4LiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9tdXRleF90cnlsb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisvKiBMb2NrIGEgbXV0ZXguICAqLworZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2xvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKyNpZmRlZiBfX1VTRV9YT1BFTjJLCisvKiBXYWl0IHVudGlsIGxvY2sgYmVjb21lcyBhdmFpbGFibGUsIG9yIHNwZWNpZmllZCB0aW1lIHBhc3Nlcy4gKi8KK2V4dGVybiBpbnQgcHRocmVhZF9tdXRleF90aW1lZGxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgX19USFJPVyBfX25vbm51bGwgKCgxLCAyKSk7CisjZW5kaWYKKworLyogVW5sb2NrIGEgbXV0ZXguICAqLworZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3VubG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworCisjaWZkZWYgX19VU0VfVU5JWDk4CisvKiBHZXQgdGhlIHByaW9yaXR5IGNlaWxpbmcgb2YgTVVURVguICAqLworZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2dldHByaW9jZWlsaW5nIChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhfdCAqCisJCQkJCSBfX3Jlc3RyaWN0IF9fbXV0ZXgsCisJCQkJCSBpbnQgKl9fcmVzdHJpY3QgX19wcmlvY2VpbGluZykKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxLCAyKSk7CisKKy8qIFNldCB0aGUgcHJpb3JpdHkgY2VpbGluZyBvZiBNVVRFWCB0byBQUklPQ0VJTElORywgcmV0dXJuIG9sZAorICAgcHJpb3JpdHkgY2VpbGluZyB2YWx1ZSBpbiAqT0xEX0NFSUxJTkcuICAqLworZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3NldHByaW9jZWlsaW5nIChwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKKwkJCQkJIGludCBfX3ByaW9jZWlsaW5nLAorCQkJCQkgaW50ICpfX3Jlc3RyaWN0IF9fb2xkX2NlaWxpbmcpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSwgMykpOworI2VuZGlmCisKKworI2lmZGVmIF9fVVNFX0dOVQorLyogRGVjbGFyZSB0aGUgc3RhdGUgcHJvdGVjdGVkIGJ5IE1VVEVYIGFzIGNvbnNpc3RlbnQuICAqLworZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2NvbnNpc3RlbnRfbnAgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisjZW5kaWYKKworCisvKiBGdW5jdGlvbnMgZm9yIGhhbmRsaW5nIG11dGV4IGF0dHJpYnV0ZXMuICAqLworCisvKiBJbml0aWFsaXplIG11dGV4IGF0dHJpYnV0ZSBvYmplY3QgQVRUUiB3aXRoIGRlZmF1bHQgYXR0cmlidXRlcworICAgKGtpbmQgaXMgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCkuICAqLworZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisvKiBEZXN0cm95IG11dGV4IGF0dHJpYnV0ZSBvYmplY3QgQVRUUi4gICovCitleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKy8qIEdldCB0aGUgcHJvY2Vzcy1zaGFyZWQgZmxhZyBvZiB0aGUgbXV0ZXggYXR0cmlidXRlIEFUVFIuICAqLworZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKgorCQkJCQkgX19yZXN0cmljdCBfX2F0dHIsCisJCQkJCSBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDIpKTsKKworLyogU2V0IHRoZSBwcm9jZXNzLXNoYXJlZCBmbGFnIG9mIHRoZSBtdXRleCBhdHRyaWJ1dGUgQVRUUi4gICovCitleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwKKwkJCQkJIGludCBfX3BzaGFyZWQpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisjaWZkZWYgX19VU0VfVU5JWDk4CisvKiBSZXR1cm4gaW4gKktJTkQgdGhlIG11dGV4IGtpbmQgYXR0cmlidXRlIGluICpBVFRSLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0dHlwZSAoX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX3Jlc3RyaWN0CisJCQkJICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19raW5kKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDIpKTsKKworLyogU2V0IHRoZSBtdXRleCBraW5kIGF0dHJpYnV0ZSBpbiAqQVRUUiB0byBLSU5EIChlaXRoZXIgUFRIUkVBRF9NVVRFWF9OT1JNQUwsCisgICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSwgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLLCBvcgorICAgUFRIUkVBRF9NVVRFWF9ERUZBVUxUKS4gICovCitleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwgaW50IF9fa2luZCkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKy8qIFJldHVybiBpbiAqUFJPVE9DT0wgdGhlIG11dGV4IHByb3RvY29sIGF0dHJpYnV0ZSBpbiAqQVRUUi4gICovCitleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHByb3RvY29sIChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKgorCQkJCQkgIF9fcmVzdHJpY3QgX19hdHRyLAorCQkJCQkgIGludCAqX19yZXN0cmljdCBfX3Byb3RvY29sKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDIpKTsKKworLyogU2V0IHRoZSBtdXRleCBwcm90b2NvbCBhdHRyaWJ1dGUgaW4gKkFUVFIgdG8gUFJPVE9DT0wgKGVpdGhlcgorICAgUFRIUkVBRF9QUklPX05PTkUsIFBUSFJFQURfUFJJT19JTkhFUklULCBvciBQVEhSRUFEX1BSSU9fUFJPVEVDVCkuICAqLworZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9zZXRwcm90b2NvbCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLAorCQkJCQkgIGludCBfX3Byb3RvY29sKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworLyogUmV0dXJuIGluICpQUklPQ0VJTElORyB0aGUgbXV0ZXggcHJpb2NlaWxpbmcgYXR0cmlidXRlIGluICpBVFRSLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0cHJpb2NlaWxpbmcgKF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqCisJCQkJCSAgICAgX19yZXN0cmljdCBfX2F0dHIsCisJCQkJCSAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHJpb2NlaWxpbmcpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSwgMikpOworCisvKiBTZXQgdGhlIG11dGV4IHByaW9jZWlsaW5nIGF0dHJpYnV0ZSBpbiAqQVRUUiB0byBQUklPQ0VJTElORy4gICovCitleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHByaW9jZWlsaW5nIChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsCisJCQkJCSAgICAgaW50IF9fcHJpb2NlaWxpbmcpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpOworI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIEdldCB0aGUgcm9idXN0bmVzcyBmbGFnIG9mIHRoZSBtdXRleCBhdHRyaWJ1dGUgQVRUUi4gICovCitleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHJvYnVzdF9ucCAoX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsCisJCQkJCSAgIGludCAqX19yb2J1c3RuZXNzKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDIpKTsKKworLyogU2V0IHRoZSByb2J1c3RuZXNzIGZsYWcgb2YgdGhlIG11dGV4IGF0dHJpYnV0ZSBBVFRSLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cm9idXN0X25wIChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsCisJCQkJCSAgIGludCBfX3JvYnVzdG5lc3MpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpOworI2VuZGlmCisKKworI2lmIGRlZmluZWQgX19VU0VfVU5JWDk4IHx8IGRlZmluZWQgX19VU0VfWE9QRU4ySworLyogRnVuY3Rpb25zIGZvciBoYW5kbGluZyByZWFkLXdyaXRlIGxvY2tzLiAgKi8KKworLyogSW5pdGlhbGl6ZSByZWFkLXdyaXRlIGxvY2sgUldMT0NLIHVzaW5nIGF0dHJpYnV0ZXMgQVRUUiwgb3IgdXNlCisgICB0aGUgZGVmYXVsdCB2YWx1ZXMgaWYgbGF0ZXIgaXMgTlVMTC4gICovCitleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2luaXQgKHB0aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCisJCQkJX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19yZXN0cmljdAorCQkJCV9fYXR0cikgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKy8qIERlc3Ryb3kgcmVhZC13cml0ZSBsb2NrIFJXTE9DSy4gICovCitleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2Rlc3Ryb3kgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworLyogQWNxdWlyZSByZWFkIGxvY2sgZm9yIFJXTE9DSy4gICovCitleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3JkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisvKiBUcnkgdG8gYWNxdWlyZSByZWFkIGxvY2sgZm9yIFJXTE9DSy4gICovCitleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RyeXJkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spCisgIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisjIGlmZGVmIF9fVVNFX1hPUEVOMksKKy8qIFRyeSB0byBhY3F1aXJlIHJlYWQgbG9jayBmb3IgUldMT0NLIG9yIHJldHVybiBhZnRlciBzcGVjZmllZCB0aW1lLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdGltZWRyZGxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCisJCQkJICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0CisJCQkJICAgICAgIF9fYWJzdGltZSkgX19USFJPVyBfX25vbm51bGwgKCgxLCAyKSk7CisjIGVuZGlmCisKKy8qIEFjcXVpcmUgd3JpdGUgbG9jayBmb3IgUldMT0NLLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfd3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKy8qIFRyeSB0byBhY3F1aXJlIHdyaXRlIGxvY2sgZm9yIFJXTE9DSy4gICovCitleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RyeXdybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisjIGlmZGVmIF9fVVNFX1hPUEVOMksKKy8qIFRyeSB0byBhY3F1aXJlIHdyaXRlIGxvY2sgZm9yIFJXTE9DSyBvciByZXR1cm4gYWZ0ZXIgc3BlY2ZpZWQgdGltZS4gICovCitleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RpbWVkd3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3Jlc3RyaWN0IF9fcndsb2NrLAorCQkJCSAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAorCQkJCSAgICAgICBfX2Fic3RpbWUpIF9fVEhST1cgX19ub25udWxsICgoMSwgMikpOworIyBlbmRpZgorCisvKiBVbmxvY2sgUldMT0NLLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdW5sb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKworLyogRnVuY3Rpb25zIGZvciBoYW5kbGluZyByZWFkLXdyaXRlIGxvY2sgYXR0cmlidXRlcy4gICovCisKKy8qIEluaXRpYWxpemUgYXR0cmlidXRlIG9iamVjdCBBVFRSIHdpdGggZGVmYXVsdCB2YWx1ZXMuICAqLworZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfaW5pdCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0cikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKy8qIERlc3Ryb3kgYXR0cmlidXRlIG9iamVjdCBBVFRSLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisvKiBSZXR1cm4gY3VycmVudCBzZXR0aW5nIG9mIHByb2Nlc3Mtc2hhcmVkIGF0dHJpYnV0ZSBvZiBBVFRSIGluIFBTSEFSRUQuICAqLworZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqCisJCQkJCSAgX19yZXN0cmljdCBfX2F0dHIsCisJCQkJCSAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxLCAyKSk7CisKKy8qIFNldCBwcm9jZXNzLXNoYXJlZCBhdHRyaWJ1dGUgb2YgQVRUUiB0byBQU0hBUkVELiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCisJCQkJCSAgaW50IF9fcHNoYXJlZCkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKy8qIFJldHVybiBjdXJyZW50IHNldHRpbmcgb2YgcmVhZGVyL3dyaXRlciBwcmVmZXJlbmNlLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dldGtpbmRfbnAgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKgorCQkJCQkgIF9fcmVzdHJpY3QgX19hdHRyLAorCQkJCQkgIGludCAqX19yZXN0cmljdCBfX3ByZWYpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSwgMikpOworCisvKiBTZXQgcmVhZGVyL3dyaXRlIHByZWZlcmVuY2UuICAqLworZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0a2luZF9ucCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKKwkJCQkJICBpbnQgX19wcmVmKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKyNlbmRpZgorCisKKy8qIEZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY29uZGl0aW9uYWwgdmFyaWFibGVzLiAgKi8KKworLyogSW5pdGlhbGl6ZSBjb25kaXRpb24gdmFyaWFibGUgQ09ORCB1c2luZyBhdHRyaWJ1dGVzIEFUVFIsIG9yIHVzZQorICAgdGhlIGRlZmF1bHQgdmFsdWVzIGlmIGxhdGVyIGlzIE5VTEwuICAqLworZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfaW5pdCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAorCQkJICAgICAgX19jb25zdCBwdGhyZWFkX2NvbmRhdHRyX3QgKl9fcmVzdHJpY3QKKwkJCSAgICAgIF9fY29uZF9hdHRyKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworLyogRGVzdHJveSBjb25kaXRpb24gdmFyaWFibGUgQ09ORC4gICovCitleHRlcm4gaW50IHB0aHJlYWRfY29uZF9kZXN0cm95IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworLyogV2FrZSB1cCBvbmUgdGhyZWFkIHdhaXRpbmcgZm9yIGNvbmRpdGlvbiB2YXJpYWJsZSBDT05ELiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9jb25kX3NpZ25hbCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKy8qIFdha2UgdXAgYWxsIHRocmVhZHMgd2FpdGluZyBmb3IgY29uZGl0aW9uIHZhcmlhYmxlcyBDT05ELiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKy8qIFdhaXQgZm9yIGNvbmRpdGlvbiB2YXJpYWJsZSBDT05EIHRvIGJlIHNpZ25hbGVkIG9yIGJyb2FkY2FzdC4KKyAgIE1VVEVYIGlzIGFzc3VtZWQgdG8gYmUgbG9ja2VkIGJlZm9yZS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aAorICAgX19USFJPVy4gICovCitleHRlcm4gaW50IHB0aHJlYWRfY29uZF93YWl0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCisJCQkgICAgICBwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCkKKyAgICAgX19ub25udWxsICgoMSwgMikpOworCisvKiBXYWl0IGZvciBjb25kaXRpb24gdmFyaWFibGUgQ09ORCB0byBiZSBzaWduYWxlZCBvciBicm9hZGNhc3QgdW50aWwKKyAgIEFCU1RJTUUuICBNVVRFWCBpcyBhc3N1bWVkIHRvIGJlIGxvY2tlZCBiZWZvcmUuICBBQlNUSU1FIGlzIGFuCisgICBhYnNvbHV0ZSB0aW1lIHNwZWNpZmljYXRpb247IHplcm8gaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgZXBvY2gKKyAgICgwMDowMDowMCBHTVQsIEphbnVhcnkgMSwgMTk3MCkuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGgKKyAgIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCisJCQkJICAgcHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCisJCQkJICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKKwkJCQkgICBfX2Fic3RpbWUpIF9fbm9ubnVsbCAoKDEsIDIsIDMpKTsKKworLyogRnVuY3Rpb25zIGZvciBoYW5kbGluZyBjb25kaXRpb24gdmFyaWFibGUgYXR0cmlidXRlcy4gICovCisKKy8qIEluaXRpYWxpemUgY29uZGl0aW9uIHZhcmlhYmxlIGF0dHJpYnV0ZSBBVFRSLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9pbml0IChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKy8qIERlc3Ryb3kgY29uZGl0aW9uIHZhcmlhYmxlIGF0dHJpYnV0ZSBBVFRSLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95IChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKy8qIEdldCB0aGUgcHJvY2Vzcy1zaGFyZWQgZmxhZyBvZiB0aGUgY29uZGl0aW9uIHZhcmlhYmxlIGF0dHJpYnV0ZSBBVFRSLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxLCAyKSk7CisKKy8qIFNldCB0aGUgcHJvY2Vzcy1zaGFyZWQgZmxhZyBvZiB0aGUgY29uZGl0aW9uIHZhcmlhYmxlIGF0dHJpYnV0ZSBBVFRSLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworI2lmZGVmIF9fVVNFX1hPUEVOMksKKy8qIEdldCB0aGUgY2xvY2sgc2VsZWN0ZWQgZm9yIHRoZSBjb25kaXRvbiB2YXJpYWJsZSBhdHRyaWJ1dGUgQVRUUi4gICovCitleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfZ2V0Y2xvY2sgKF9fY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICoKKwkJCQkgICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKKwkJCQkgICAgICBfX2Nsb2NraWRfdCAqX19yZXN0cmljdCBfX2Nsb2NrX2lkKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDIpKTsKKworLyogU2V0IHRoZSBjbG9jayBzZWxlY3RlZCBmb3IgdGhlIGNvbmRpdG9uIHZhcmlhYmxlIGF0dHJpYnV0ZSBBVFRSLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9zZXRjbG9jayAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIsCisJCQkJICAgICAgX19jbG9ja2lkX3QgX19jbG9ja19pZCkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisjZW5kaWYKKworCisjaWZkZWYgX19VU0VfWE9QRU4ySworLyogRnVuY3Rpb25zIHRvIGhhbmRsZSBzcGlubG9ja3MuICAqLworCisvKiBJbml0aWFsaXplIHRoZSBzcGlubG9jayBMT0NLLiAgSWYgUFNIQVJFRCBpcyBub256ZXJvIHRoZSBzcGlubG9jayBjYW4KKyAgIGJlIHNoYXJlZCBiZXR3ZWVuIGRpZmZlcmVudCBwcm9jZXNzZXMuICAqLworZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5faW5pdCAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2ssIGludCBfX3BzaGFyZWQpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisvKiBEZXN0cm95IHRoZSBzcGlubG9jayBMT0NLLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9zcGluX2Rlc3Ryb3kgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworLyogV2FpdCB1bnRpbCBzcGlubG9jayBMT0NLIGlzIHJldHJpZXZlZC4gICovCitleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9sb2NrIChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKy8qIFRyeSB0byBsb2NrIHNwaW5sb2NrIExPQ0suICAqLworZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fdHJ5bG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisvKiBSZWxlYXNlIHNwaW5sb2NrIExPQ0suICAqLworZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fdW5sb2NrIChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKworLyogRnVuY3Rpb25zIHRvIGhhbmRsZSBiYXJyaWVycy4gICovCisKKy8qIEluaXRpYWxpemUgQkFSUklFUiB3aXRoIHRoZSBhdHRyaWJ1dGVzIGluIEFUVFIuICBUaGUgYmFycmllciBpcworICAgb3BlbmVkIHdoZW4gQ09VTlQgd2FpdGVycyBhcnJpdmVkLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX2luaXQgKHB0aHJlYWRfYmFycmllcl90ICpfX3Jlc3RyaWN0IF9fYmFycmllciwKKwkJCQkgX19jb25zdCBwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fcmVzdHJpY3QKKwkJCQkgX19hdHRyLCB1bnNpZ25lZCBpbnQgX19jb3VudCkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKy8qIERlc3Ryb3kgYSBwcmV2aW91c2x5IGR5bmFtaWNhbGx5IGluaXRpYWxpemVkIGJhcnJpZXIgQkFSUklFUi4gICovCitleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcl9kZXN0cm95IChwdGhyZWFkX2JhcnJpZXJfdCAqX19iYXJyaWVyKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworLyogV2FpdCBvbiBiYXJyaWVyIEJBUlJJRVIuICAqLworZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJfd2FpdCAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKworLyogSW5pdGlhbGl6ZSBiYXJyaWVyIGF0dHJpYnV0ZSBBVFRSLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9pbml0IChwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0cikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKy8qIERlc3Ryb3kgcHJldmlvdXNseSBkeW5hbWljYWxseSBpbml0aWFsaXplZCBiYXJyaWVyIGF0dHJpYnV0ZSBBVFRSLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9kZXN0cm95IChwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0cikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKy8qIEdldCB0aGUgcHJvY2Vzcy1zaGFyZWQgZmxhZyBvZiB0aGUgYmFycmllciBhdHRyaWJ1dGUgQVRUUi4gICovCitleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKgorCQkJCQkgICBfX3Jlc3RyaWN0IF9fYXR0ciwKKwkJCQkJICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxLCAyKSk7CisKKy8qIFNldCB0aGUgcHJvY2Vzcy1zaGFyZWQgZmxhZyBvZiB0aGUgYmFycmllciBhdHRyaWJ1dGUgQVRUUi4gICovCitleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9iYXJyaWVyYXR0cl90ICpfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisjZW5kaWYKKworCisvKiBGdW5jdGlvbnMgZm9yIGhhbmRsaW5nIHRocmVhZC1zcGVjaWZpYyBkYXRhLiAgKi8KKworLyogQ3JlYXRlIGEga2V5IHZhbHVlIGlkZW50aWZ5aW5nIGEgbG9jYXRpb24gaW4gdGhlIHRocmVhZC1zcGVjaWZpYworICAgZGF0YSBhcmVhLiAgRWFjaCB0aHJlYWQgbWFpbnRhaW5zIGEgZGlzdGluY3QgdGhyZWFkLXNwZWNpZmljIGRhdGEKKyAgIGFyZWEuICBERVNUUl9GVU5DVElPTiwgaWYgbm9uLU5VTEwsIGlzIGNhbGxlZCB3aXRoIHRoZSB2YWx1ZQorICAgYXNzb2NpYXRlZCB0byB0aGF0IGtleSB3aGVuIHRoZSBrZXkgaXMgZGVzdHJveWVkLgorICAgREVTVFJfRlVOQ1RJT04gaXMgbm90IGNhbGxlZCBpZiB0aGUgdmFsdWUgYXNzb2NpYXRlZCBpcyBOVUxMIHdoZW4KKyAgIHRoZSBrZXkgaXMgZGVzdHJveWVkLiAgKi8KK2V4dGVybiBpbnQgcHRocmVhZF9rZXlfY3JlYXRlIChwdGhyZWFkX2tleV90ICpfX2tleSwKKwkJCSAgICAgICB2b2lkICgqX19kZXN0cl9mdW5jdGlvbikgKHZvaWQgKikpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisvKiBEZXN0cm95IEtFWS4gICovCitleHRlcm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0ZSAocHRocmVhZF9rZXlfdCBfX2tleSkgX19USFJPVzsKKworLyogUmV0dXJuIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHRocmVhZC1zcGVjaWZpYyBkYXRhIHNsb3QgaWRlbnRpZmllZCBieSBLRVkuICAqLworZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXkpIF9fVEhST1c7CisKKy8qIFN0b3JlIFBPSU5URVIgaW4gdGhlIHRocmVhZC1zcGVjaWZpYyBkYXRhIHNsb3QgaWRlbnRpZmllZCBieSBLRVkuICovCitleHRlcm4gaW50IHB0aHJlYWRfc2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXksCisJCQkJX19jb25zdCB2b2lkICpfX3BvaW50ZXIpIF9fVEhST1cgOworCisKKyNpZmRlZiBfX1VTRV9YT1BFTjJLCisvKiBHZXQgSUQgb2YgQ1BVLXRpbWUgY2xvY2sgZm9yIHRocmVhZCBUSFJFQURfSUQuICAqLworZXh0ZXJuIGludCBwdGhyZWFkX2dldGNwdWNsb2NraWQgKHB0aHJlYWRfdCBfX3RocmVhZF9pZCwKKwkJCQkgIF9fY2xvY2tpZF90ICpfX2Nsb2NrX2lkKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDIpKTsKKyNlbmRpZgorCisKKy8qIEluc3RhbGwgaGFuZGxlcnMgdG8gYmUgY2FsbGVkIHdoZW4gYSBuZXcgcHJvY2VzcyBpcyBjcmVhdGVkIHdpdGggRk9SSy4KKyAgIFRoZSBQUkVQQVJFIGhhbmRsZXIgaXMgY2FsbGVkIGluIHRoZSBwYXJlbnQgcHJvY2VzcyBqdXN0IGJlZm9yZSBwZXJmb3JtaW5nCisgICBGT1JLLiBUaGUgUEFSRU5UIGhhbmRsZXIgaXMgY2FsbGVkIGluIHRoZSBwYXJlbnQgcHJvY2VzcyBqdXN0IGFmdGVyIEZPUksuCisgICBUaGUgQ0hJTEQgaGFuZGxlciBpcyBjYWxsZWQgaW4gdGhlIGNoaWxkIHByb2Nlc3MuICBFYWNoIG9mIHRoZSB0aHJlZQorICAgaGFuZGxlcnMgY2FuIGJlIE5VTEwsIG1lYW5pbmcgdGhhdCBubyBoYW5kbGVyIG5lZWRzIHRvIGJlIGNhbGxlZCBhdCB0aGF0CisgICBwb2ludC4KKyAgIFBUSFJFQURfQVRGT1JLIGNhbiBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcywgaW4gd2hpY2ggY2FzZSB0aGUgUFJFUEFSRQorICAgaGFuZGxlcnMgYXJlIGNhbGxlZCBpbiBMSUZPIG9yZGVyIChsYXN0IGFkZGVkIHdpdGggUFRIUkVBRF9BVEZPUkssCisgICBmaXJzdCBjYWxsZWQgYmVmb3JlIEZPUkspLCBhbmQgdGhlIFBBUkVOVCBhbmQgQ0hJTEQgaGFuZGxlcnMgYXJlIGNhbGxlZAorICAgaW4gRklGTyAoZmlyc3QgYWRkZWQsIGZpcnN0IGNhbGxlZCkuICAqLworCitleHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCksCisJCQkgICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKKwkJCSAgIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkpIF9fVEhST1c7CisKKworI2lmZGVmIF9fVVNFX0VYVEVSTl9JTkxJTkVTCisvKiBPcHRpbWl6YXRpb25zLiAgKi8KK19fZXh0ZXJuX2lubGluZSBpbnQKK19fTlRIIChwdGhyZWFkX2VxdWFsIChwdGhyZWFkX3QgX190aHJlYWQxLCBwdGhyZWFkX3QgX190aHJlYWQyKSkKK3sKKyAgcmV0dXJuIF9fdGhyZWFkMSA9PSBfX3RocmVhZDI7Cit9CisjZW5kaWYKKworX19FTkRfREVDTFMKKworI2VuZGlmCS8qIHB0aHJlYWQuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3B0eS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3B0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZWQ3N2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcHR5LmgKQEAgLTAsMCArMSw0NiBAQAorLyogRnVuY3Rpb25zIGZvciBwc2V1ZG8gVFRZIGhhbmRsaW5nLgorICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9QVFlfSAorI2RlZmluZSBfUFRZX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgPHRlcm1pb3MuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKworCitfX0JFR0lOX0RFQ0xTCisKKy8qIENyZWF0ZSBwc2V1ZG8gdHR5IG1hc3RlciBzbGF2ZSBwYWlyIHdpdGggTkFNRSBhbmQgc2V0IHRlcm1pbmFsCisgICBhdHRyaWJ1dGVzIGFjY29yZGluZyB0byBURVJNUCBhbmQgV0lOUCBhbmQgcmV0dXJuIGhhbmRsZXMgZm9yIGJvdGgKKyAgIGVuZHMgaW4gQU1BU1RFUiBhbmQgQVNMQVZFLiAgKi8KK2V4dGVybiBpbnQgb3BlbnB0eSAoaW50ICpfX2FtYXN0ZXIsIGludCAqX19hc2xhdmUsIGNoYXIgKl9fbmFtZSwKKwkJICAgIGNvbnN0IHN0cnVjdCB0ZXJtaW9zICpfX3Rlcm1wLAorCQkgICAgY29uc3Qgc3RydWN0IHdpbnNpemUgKl9fd2lucCkgX19USFJPVzsKKworLyogQ3JlYXRlIGNoaWxkIHByb2Nlc3MgYW5kIGVzdGFibGlzaCB0aGUgc2xhdmUgcHNldWRvIHRlcm1pbmFsIGFzIHRoZQorICAgY2hpbGQncyBjb250cm9sbGluZyB0ZXJtaW5hbC4gICovCitleHRlcm4gaW50IGZvcmtwdHkgKGludCAqX19hbWFzdGVyLCBjaGFyICpfX25hbWUsCisJCSAgICBjb25zdCBzdHJ1Y3QgdGVybWlvcyAqX190ZXJtcCwKKwkJICAgIGNvbnN0IHN0cnVjdCB3aW5zaXplICpfX3dpbnApIF9fVEhST1c7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZgkvKiBwdHkuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3B3ZC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3B3ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NzQxMzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcHdkLmgKQEAgLTAsMCArMSwxODYgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5MSwxOTkyLDE5OTUtMjAwMSwyMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qCisgKglQT1NJWCBTdGFuZGFyZDogOS4yLjIgVXNlciBEYXRhYmFzZSBBY2Nlc3MJPHB3ZC5oPgorICovCisKKyNpZm5kZWYJX1BXRF9ICisjZGVmaW5lCV9QV0RfSAkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKKyNpbmNsdWRlIDxiaXRzL3R5cGVzLmg+CisKKyNkZWZpbmUgX19uZWVkX3NpemVfdAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaWYgZGVmaW5lZCBfX1VTRV9YT1BFTiB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOMksKKy8qIFRoZSBTaW5nbGUgVW5peCBzcGVjaWZpY2F0aW9uIHNheXMgdGhhdCBzb21lIG1vcmUgdHlwZXMgYXJlCisgICBhdmFpbGFibGUgaGVyZS4gICovCisjIGlmbmRlZiBfX2dpZF90X2RlZmluZWQKK3R5cGVkZWYgX19naWRfdCBnaWRfdDsKKyMgIGRlZmluZSBfX2dpZF90X2RlZmluZWQKKyMgZW5kaWYKKworIyBpZm5kZWYgX191aWRfdF9kZWZpbmVkCit0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CisjICBkZWZpbmUgX191aWRfdF9kZWZpbmVkCisjIGVuZGlmCisjZW5kaWYKKworLyogVGhlIHBhc3N3ZCBzdHJ1Y3R1cmUuICAqLworc3RydWN0IHBhc3N3ZAoreworICBjaGFyICpwd19uYW1lOwkJLyogVXNlcm5hbWUuICAqLworICBjaGFyICpwd19wYXNzd2Q7CQkvKiBQYXNzd29yZC4gICovCisgIF9fdWlkX3QgcHdfdWlkOwkJLyogVXNlciBJRC4gICovCisgIF9fZ2lkX3QgcHdfZ2lkOwkJLyogR3JvdXAgSUQuICAqLworICBjaGFyICpwd19nZWNvczsJCS8qIFJlYWwgbmFtZS4gICovCisgIGNoYXIgKnB3X2RpcjsJCQkvKiBIb21lIGRpcmVjdG9yeS4gICovCisgIGNoYXIgKnB3X3NoZWxsOwkJLyogU2hlbGwgcHJvZ3JhbS4gICovCit9OworCisKKyNpZiBkZWZpbmVkIF9fVVNFX1NWSUQgfHwgZGVmaW5lZCBfX1VTRV9HTlUKKyMgZGVmaW5lIF9fbmVlZF9GSUxFCisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjZW5kaWYKKworCisjaWYgZGVmaW5lZCBfX1VTRV9TVklEIHx8IGRlZmluZWQgX19VU0VfTUlTQyB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOX0VYVEVOREVECisvKiBSZXdpbmQgdGhlIHBhc3N3b3JkLWZpbGUgc3RyZWFtLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiB2b2lkIHNldHB3ZW50ICh2b2lkKTsKKworLyogQ2xvc2UgdGhlIHBhc3N3b3JkLWZpbGUgc3RyZWFtLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiB2b2lkIGVuZHB3ZW50ICh2b2lkKTsKKworLyogUmVhZCBhbiBlbnRyeSBmcm9tIHRoZSBwYXNzd29yZC1maWxlIHN0cmVhbSwgb3BlbmluZyBpdCBpZiBuZWNlc3NhcnkuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIHN0cnVjdCBwYXNzd2QgKmdldHB3ZW50ICh2b2lkKTsKKyNlbmRpZgorCisjaWZkZWYJX19VU0VfU1ZJRAorLyogUmVhZCBhbiBlbnRyeSBmcm9tIFNUUkVBTS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgcGFydCBvZiBQT1NJWCBhbmQgdGhlcmVmb3JlIG5vIG9mZmljaWFsCisgICBjYW5jZWxsYXRpb24gcG9pbnQuICBCdXQgZHVlIHRvIHNpbWlsYXJpdHkgd2l0aCBhbiBQT1NJWCBpbnRlcmZhY2UKKyAgIG9yIGR1ZSB0byB0aGUgaW1wbGVtZW50YXRpb24gaXQgaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kCisgICB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIHN0cnVjdCBwYXNzd2QgKmZnZXRwd2VudCAoRklMRSAqX19zdHJlYW0pOworCisvKiBXcml0ZSB0aGUgZ2l2ZW4gZW50cnkgb250byB0aGUgZ2l2ZW4gc3RyZWFtLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBwYXJ0IG9mIFBPU0lYIGFuZCB0aGVyZWZvcmUgbm8gb2ZmaWNpYWwKKyAgIGNhbmNlbGxhdGlvbiBwb2ludC4gIEJ1dCBkdWUgdG8gc2ltaWxhcml0eSB3aXRoIGFuIFBPU0lYIGludGVyZmFjZQorICAgb3IgZHVlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBpdCBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQKKyAgIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gaW50IHB1dHB3ZW50IChfX2NvbnN0IHN0cnVjdCBwYXNzd2QgKl9fcmVzdHJpY3QgX19wLAorCQkgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19mKTsKKyNlbmRpZgorCisvKiBTZWFyY2ggZm9yIGFuIGVudHJ5IHdpdGggYSBtYXRjaGluZyB1c2VyIElELgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBzdHJ1Y3QgcGFzc3dkICpnZXRwd3VpZCAoX191aWRfdCBfX3VpZCk7CisKKy8qIFNlYXJjaCBmb3IgYW4gZW50cnkgd2l0aCBhIG1hdGNoaW5nIHVzZXJuYW1lLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBzdHJ1Y3QgcGFzc3dkICpnZXRwd25hbSAoX19jb25zdCBjaGFyICpfX25hbWUpOworCisjaWYgZGVmaW5lZCBfX1VTRV9QT1NJWCB8fCBkZWZpbmVkIF9fVVNFX01JU0MKKworIyBpZmRlZiBfX1VTRV9NSVNDCisvKiBSZWFzb25hYmxlIHZhbHVlIGZvciB0aGUgYnVmZmVyIHNpemVkIHVzZWQgaW4gdGhlIHJlZW50cmFudAorICAgZnVuY3Rpb25zIGJlbG93LiAgQnV0IGJldHRlciB1c2UgYHN5c2NvbmYnLiAgKi8KKyMgIGRlZmluZSBOU1NfQlVGTEVOX1BBU1NXRAkxMDI0CisjIGVuZGlmCisKKy8qIFJlZW50cmFudCB2ZXJzaW9ucyBvZiBzb21lIG9mIHRoZSBmdW5jdGlvbnMgYWJvdmUuCisKKyAgIFBMRUFTRSBOT1RFOiB0aGUgYGdldHB3ZW50X3InIGZ1bmN0aW9uIGlzIG5vdCAoeWV0KSBzdGFuZGFyZGl6ZWQuCisgICBUaGUgaW50ZXJmYWNlIG1heSBjaGFuZ2UgaW4gbGF0ZXIgdmVyc2lvbnMgb2YgdGhpcyBsaWJyYXJ5LiAgQnV0CisgICB0aGUgaW50ZXJmYWNlIGlzIGRlc2lnbmVkIGZvbGxvd2luZyB0aGUgcHJpbmNpcGFscyB1c2VkIGZvciB0aGUKKyAgIG90aGVyIHJlZW50cmFudCBmdW5jdGlvbnMgc28gdGhlIGNoYW5jZXMgYXJlIGdvb2QgdGhpcyBpcyB3aGF0IHRoZQorICAgUE9TSVggcGVvcGxlIHdvdWxkIGNob29zZS4gICovCisKKyMgaWYgZGVmaW5lZCBfX1VTRV9TVklEIHx8IGRlZmluZWQgX19VU0VfTUlTQworLyogVGhpcyBmdW5jdGlvbiBpcyBub3QgcGFydCBvZiBQT1NJWCBhbmQgdGhlcmVmb3JlIG5vIG9mZmljaWFsCisgICBjYW5jZWxsYXRpb24gcG9pbnQuICBCdXQgZHVlIHRvIHNpbWlsYXJpdHkgd2l0aCBhbiBQT1NJWCBpbnRlcmZhY2UKKyAgIG9yIGR1ZSB0byB0aGUgaW1wbGVtZW50YXRpb24gaXQgaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kCisgICB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBnZXRwd2VudF9yIChzdHJ1Y3QgcGFzc3dkICpfX3Jlc3RyaWN0IF9fcmVzdWx0YnVmLAorCQkgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1ZmZlciwgc2l6ZV90IF9fYnVmbGVuLAorCQkgICAgICAgc3RydWN0IHBhc3N3ZCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpOworIyBlbmRpZgorCitleHRlcm4gaW50IGdldHB3dWlkX3IgKF9fdWlkX3QgX191aWQsCisJCSAgICAgICBzdHJ1Y3QgcGFzc3dkICpfX3Jlc3RyaWN0IF9fcmVzdWx0YnVmLAorCQkgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1ZmZlciwgc2l6ZV90IF9fYnVmbGVuLAorCQkgICAgICAgc3RydWN0IHBhc3N3ZCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpOworCitleHRlcm4gaW50IGdldHB3bmFtX3IgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCisJCSAgICAgICBzdHJ1Y3QgcGFzc3dkICpfX3Jlc3RyaWN0IF9fcmVzdWx0YnVmLAorCQkgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1ZmZlciwgc2l6ZV90IF9fYnVmbGVuLAorCQkgICAgICAgc3RydWN0IHBhc3N3ZCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpOworCisKKyMgaWZkZWYJX19VU0VfU1ZJRAorLyogUmVhZCBhbiBlbnRyeSBmcm9tIFNUUkVBTS4gIFRoaXMgZnVuY3Rpb24gaXMgbm90IHN0YW5kYXJkaXplZCBhbmQKKyAgIHByb2JhYmx5IG5ldmVyIHdpbGwuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGl0IGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgZmdldHB3ZW50X3IgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCisJCQlzdHJ1Y3QgcGFzc3dkICpfX3Jlc3RyaWN0IF9fcmVzdWx0YnVmLAorCQkJY2hhciAqX19yZXN0cmljdCBfX2J1ZmZlciwgc2l6ZV90IF9fYnVmbGVuLAorCQkJc3RydWN0IHBhc3N3ZCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpOworIyBlbmRpZgorCisjZW5kaWYJLyogUE9TSVggb3IgcmVlbnRyYW50ICovCisKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIFJlLWNvbnN0cnVjdCB0aGUgcGFzc3dvcmQtZmlsZSBsaW5lIGZvciB0aGUgZ2l2ZW4gdWlkCisgICBpbiB0aGUgZ2l2ZW4gYnVmZmVyLiAgVGhpcyBrbm93cyB0aGUgZm9ybWF0IHRoYXQgdGhlIGNhbGxlcgorICAgd2lsbCBleHBlY3QsIGJ1dCB0aGlzIG5lZWQgbm90IGJlIHRoZSBmb3JtYXQgb2YgdGhlIHBhc3N3b3JkIGZpbGUuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGl0IGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgZ2V0cHcgKF9fdWlkX3QgX191aWQsIGNoYXIgKl9fYnVmZmVyKTsKKyNlbmRpZgorCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogcHdkLmggICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcmRtYS9pYl91c2VyX21hZC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JkbWEvaWJfdXNlcl9tYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmZjZTFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JkbWEvaWJfdXNlcl9tYWQuaApAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBUb3BzcGluIENvbW11bmljYXRpb25zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBWb2x0YWlyZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBJQl9VU0VSX01BRF9ICisjZGVmaW5lIElCX1VTRVJfTUFEX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworLyoKKyAqIEluY3JlbWVudCB0aGlzIHZhbHVlIGlmIGFueSBjaGFuZ2VzIHRoYXQgYnJlYWsgdXNlcnNwYWNlIEFCSQorICogY29tcGF0aWJpbGl0eSBhcmUgbWFkZS4KKyAqLworI2RlZmluZSBJQl9VU0VSX01BRF9BQklfVkVSU0lPTgk1CisKKy8qCisgKiBNYWtlIHN1cmUgdGhhdCBhbGwgc3RydWN0cyBkZWZpbmVkIGluIHRoaXMgZmlsZSByZW1haW4gbGFpZCBvdXQgc28KKyAqIHRoYXQgdGhleSBwYWNrIHRoZSBzYW1lIHdheSBvbiAzMi1iaXQgYW5kIDY0LWJpdCBhcmNoaXRlY3R1cmVzICh0bworICogYXZvaWQgaW5jb21wYXRpYmlsaXR5IGJldHdlZW4gMzItYml0IHVzZXJzcGFjZSBhbmQgNjQtYml0IGtlcm5lbHMpLgorICovCisKKy8qKgorICogaWJfdXNlcl9tYWRfaGRyX29sZCAtIE9sZCB2ZXJzaW9uIG9mIE1BRCBwYWNrZXQgaGVhZGVyIHdpdGhvdXQgcGtleV9pbmRleAorICogQGlkIC0gSUQgb2YgYWdlbnQgTUFEIHJlY2VpdmVkIHdpdGgvdG8gYmUgc2VudCB3aXRoCisgKiBAc3RhdHVzIC0gMCBvbiBzdWNjZXNzZnVsIHJlY2VpdmUsIEVUSU1FRE9VVCBpZiBubyByZXNwb25zZQorICogICByZWNlaXZlZCAodHJhbnNhY3Rpb24gSUQgaW4gZGF0YVtdIHdpbGwgYmUgc2V0IHRvIFRJRCBvZiBvcmlnaW5hbAorICogICByZXF1ZXN0KSAoaWdub3JlZCBvbiBzZW5kKQorICogQHRpbWVvdXRfbXMgLSBNaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgcmVzcG9uc2UgKHVuc2V0IG9uIHJlY2VpdmUpCisgKiBAcmV0cmllcyAtIE51bWJlciBvZiBhdXRvbWF0aWMgcmV0cmllcyB0byBhdHRlbXB0CisgKiBAcXBuIC0gUmVtb3RlIFFQIG51bWJlciByZWNlaXZlZCBmcm9tL3RvIGJlIHNlbnQgdG8KKyAqIEBxa2V5IC0gUmVtb3RlIFFfS2V5IHRvIGJlIHNlbnQgd2l0aCAodW5zZXQgb24gcmVjZWl2ZSkKKyAqIEBsaWQgLSBSZW1vdGUgbGlkIHJlY2VpdmVkIGZyb20vdG8gYmUgc2VudCB0bworICogQHNsIC0gU2VydmljZSBsZXZlbCByZWNlaXZlZCB3aXRoL3RvIGJlIHNlbnQgd2l0aAorICogQHBhdGhfYml0cyAtIExvY2FsIHBhdGggYml0cyByZWNlaXZlZCB3aXRoL3RvIGJlIHNlbnQgd2l0aAorICogQGdyaF9wcmVzZW50IC0gSWYgc2V0LCBHUkggd2FzIHJlY2VpdmVkL3Nob3VsZCBiZSBzZW50CisgKiBAZ2lkX2luZGV4IC0gTG9jYWwgR0lEIGluZGV4IHRvIHNlbmQgd2l0aCAodW5zZXQgb24gcmVjZWl2ZSkKKyAqIEBob3BfbGltaXQgLSBIb3AgbGltaXQgaW4gR1JICisgKiBAdHJhZmZpY19jbGFzcyAtIFRyYWZmaWMgY2xhc3MgaW4gR1JICisgKiBAZ2lkIC0gUmVtb3RlIEdJRCBpbiBHUkgKKyAqIEBmbG93X2xhYmVsIC0gRmxvdyBsYWJlbCBpbiBHUkgKKyAqLworc3RydWN0IGliX3VzZXJfbWFkX2hkcl9vbGQgeworCV9fdTMyCWlkOworCV9fdTMyCXN0YXR1czsKKwlfX3UzMgl0aW1lb3V0X21zOworCV9fdTMyCXJldHJpZXM7CisJX191MzIJbGVuZ3RoOworCV9fYmUzMglxcG47CisJX19iZTMyICBxa2V5OworCV9fYmUxNglsaWQ7CisJX191OAlzbDsKKwlfX3U4CXBhdGhfYml0czsKKwlfX3U4CWdyaF9wcmVzZW50OworCV9fdTgJZ2lkX2luZGV4OworCV9fdTgJaG9wX2xpbWl0OworCV9fdTgJdHJhZmZpY19jbGFzczsKKwlfX3U4CWdpZFsxNl07CisJX19iZTMyCWZsb3dfbGFiZWw7Cit9OworCisvKioKKyAqIGliX3VzZXJfbWFkX2hkciAtIE1BRCBwYWNrZXQgaGVhZGVyCisgKiAgIFRoaXMgbGF5b3V0IGFsbG93cyBzcGVjaWZ5aW5nL3JlY2VpdmluZyB0aGUgUF9LZXkgaW5kZXguICBUbyB1c2UKKyAqICAgdGhpcyBjYXBhYmlsaXR5LCBhbiBhcHBsaWNhdGlvbiBtdXN0IGNhbGwgdGhlCisgKiAgIElCX1VTRVJfTUFEX0VOQUJMRV9QS0VZIGlvY3RsIG9uIHRoZSB1c2VyIE1BRCBmaWxlIGhhbmRsZSBiZWZvcmUKKyAqICAgYW55IG90aGVyIGFjdGlvbnMgd2l0aCB0aGUgZmlsZSBoYW5kbGUuCisgKiBAaWQgLSBJRCBvZiBhZ2VudCBNQUQgcmVjZWl2ZWQgd2l0aC90byBiZSBzZW50IHdpdGgKKyAqIEBzdGF0dXMgLSAwIG9uIHN1Y2Nlc3NmdWwgcmVjZWl2ZSwgRVRJTUVET1VUIGlmIG5vIHJlc3BvbnNlCisgKiAgIHJlY2VpdmVkICh0cmFuc2FjdGlvbiBJRCBpbiBkYXRhW10gd2lsbCBiZSBzZXQgdG8gVElEIG9mIG9yaWdpbmFsCisgKiAgIHJlcXVlc3QpIChpZ25vcmVkIG9uIHNlbmQpCisgKiBAdGltZW91dF9tcyAtIE1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciByZXNwb25zZSAodW5zZXQgb24gcmVjZWl2ZSkKKyAqIEByZXRyaWVzIC0gTnVtYmVyIG9mIGF1dG9tYXRpYyByZXRyaWVzIHRvIGF0dGVtcHQKKyAqIEBxcG4gLSBSZW1vdGUgUVAgbnVtYmVyIHJlY2VpdmVkIGZyb20vdG8gYmUgc2VudCB0bworICogQHFrZXkgLSBSZW1vdGUgUV9LZXkgdG8gYmUgc2VudCB3aXRoICh1bnNldCBvbiByZWNlaXZlKQorICogQGxpZCAtIFJlbW90ZSBsaWQgcmVjZWl2ZWQgZnJvbS90byBiZSBzZW50IHRvCisgKiBAc2wgLSBTZXJ2aWNlIGxldmVsIHJlY2VpdmVkIHdpdGgvdG8gYmUgc2VudCB3aXRoCisgKiBAcGF0aF9iaXRzIC0gTG9jYWwgcGF0aCBiaXRzIHJlY2VpdmVkIHdpdGgvdG8gYmUgc2VudCB3aXRoCisgKiBAZ3JoX3ByZXNlbnQgLSBJZiBzZXQsIEdSSCB3YXMgcmVjZWl2ZWQvc2hvdWxkIGJlIHNlbnQKKyAqIEBnaWRfaW5kZXggLSBMb2NhbCBHSUQgaW5kZXggdG8gc2VuZCB3aXRoICh1bnNldCBvbiByZWNlaXZlKQorICogQGhvcF9saW1pdCAtIEhvcCBsaW1pdCBpbiBHUkgKKyAqIEB0cmFmZmljX2NsYXNzIC0gVHJhZmZpYyBjbGFzcyBpbiBHUkgKKyAqIEBnaWQgLSBSZW1vdGUgR0lEIGluIEdSSAorICogQGZsb3dfbGFiZWwgLSBGbG93IGxhYmVsIGluIEdSSAorICogQHBrZXlfaW5kZXggLSBQX0tleSBpbmRleAorICovCitzdHJ1Y3QgaWJfdXNlcl9tYWRfaGRyIHsKKwlfX3UzMglpZDsKKwlfX3UzMglzdGF0dXM7CisJX191MzIJdGltZW91dF9tczsKKwlfX3UzMglyZXRyaWVzOworCV9fdTMyCWxlbmd0aDsKKwlfX2JlMzIJcXBuOworCV9fYmUzMiAgcWtleTsKKwlfX2JlMTYJbGlkOworCV9fdTgJc2w7CisJX191OAlwYXRoX2JpdHM7CisJX191OAlncmhfcHJlc2VudDsKKwlfX3U4CWdpZF9pbmRleDsKKwlfX3U4CWhvcF9saW1pdDsKKwlfX3U4CXRyYWZmaWNfY2xhc3M7CisJX191OAlnaWRbMTZdOworCV9fYmUzMglmbG93X2xhYmVsOworCV9fdTE2CXBrZXlfaW5kZXg7CisJX191OAlyZXNlcnZlZFs2XTsKK307CisKKy8qKgorICogaWJfdXNlcl9tYWQgLSBNQUQgcGFja2V0CisgKiBAaGRyIC0gTUFEIHBhY2tldCBoZWFkZXIKKyAqIEBkYXRhIC0gQ29udGVudHMgb2YgTUFECisgKgorICovCitzdHJ1Y3QgaWJfdXNlcl9tYWQgeworCXN0cnVjdCBpYl91c2VyX21hZF9oZHIgaGRyOworCV9fdTY0CWRhdGFbMF07Cit9OworCisvKgorICogRWFybGllciB2ZXJzaW9ucyBvZiB0aGlzIGludGVyZmFjZSBkZWZpbml0aW9uIGRlY2xhcmVkIHRoZQorICogbWV0aG9kX21hc2tbXSBtZW1iZXIgYXMgYW4gYXJyYXkgb2YgX191MzIgYnV0IHRyZWF0ZWQgaXQgYXMgYQorICogYml0bWFwIG1hZGUgdXAgb2YgbG9uZ3MgaW4gdGhlIGtlcm5lbC4gIFRoaXMgYW1iaWd1aXR5IG1lYW50IHRoYXQKKyAqIDMyLWJpdCBiaWctZW5kaWFuIGFwcGxpY2F0aW9ucyB0aGF0IGNhbiBydW4gb24gYm90aCAzMi1iaXQgYW5kCisgKiA2NC1iaXQga2VybmVscyBoYWQgbm8gY29uc2lzdGVudCBBQkkgdG8gcmVseSBvbiwgYW5kIDY0LWJpdAorICogYmlnLWVuZGlhbiBhcHBsaWNhdGlvbnMgdGhhdCB0cmVhdGVkIG1ldGhvZF9tYXNrIGFzIGJlaW5nIG1hZGUgdXAKKyAqIG9mIDMyLWJpdCB3b3JkcyB3b3VsZCBoYXZlIHRoZWlyIGJpdG1hcCBtaXNpbnRlcnByZXRlZC4KKyAqCisgKiBUbyBjbGVhciB1cCB0aGlzIGNvbmZ1c2lvbiwgd2UgY2hhbmdlIHRoZSBkZWNsYXJhdGlvbiBvZgorICogbWV0aG9kX21hc2tbXSB0byB1c2UgdW5zaWduZWQgbG9uZyBhbmQgaGFuZGxlIHRoZSBjb252ZXJzaW9uIGZyb20KKyAqIDMyLWJpdCB1c2Vyc3BhY2UgdG8gNjQtYml0IGtlcm5lbCBmb3IgYmlnLWVuZGlhbiBzeXN0ZW1zIGluIHRoZQorICogY29tcGF0X2lvY3RsIG1ldGhvZC4gIFVuZm9ydHVuYXRlbHksIHRvIGtlZXAgdGhlIHN0cnVjdHVyZSBsYXlvdXQKKyAqIHRoZSBzYW1lLCB3ZSBuZWVkIHRoZSBtZXRob2RfbWFza1tdIGFycmF5IHRvIGJlIGFsaWduZWQgb25seSB0byA0CisgKiBieXRlcyBldmVuIHdoZW4gbG9uZyBpcyA2NCBiaXRzLCB3aGljaCBmb3JjZXMgdXMgaW50byB0aGlzIHVnbHkKKyAqIHR5cGVkZWYuCisgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDQpKSkgcGFja2VkX3Vsb25nOworI2RlZmluZSBJQl9VU0VSX01BRF9MT05HU19QRVJfTUVUSE9EX01BU0sgKDEyOCAvICg4ICogc2l6ZW9mIChsb25nKSkpCisKKy8qKgorICogaWJfdXNlcl9tYWRfcmVnX3JlcSAtIE1BRCByZWdpc3RyYXRpb24gcmVxdWVzdAorICogQGlkIC0gU2V0IGJ5IHRoZSBrZXJuZWw7IHVzZWQgdG8gaWRlbnRpZnkgYWdlbnQgaW4gZnV0dXJlIHJlcXVlc3RzLgorICogQHFwbiAtIFF1ZXVlIHBhaXIgbnVtYmVyOyBtdXN0IGJlIDAgb3IgMS4KKyAqIEBtZXRob2RfbWFzayAtIFRoZSBjYWxsZXIgd2lsbCByZWNlaXZlIHVuc29saWNpdGVkIE1BRHMgZm9yIGFueSBtZXRob2QKKyAqICAgd2hlcmUgQG1ldGhvZF9tYXNrID0gMS4KKyAqIEBtZ210X2NsYXNzIC0gSW5kaWNhdGVzIHdoaWNoIG1hbmFnZW1lbnQgY2xhc3Mgb2YgTUFEcyBzaG91bGQgYmUgcmVjZWl2ZQorICogICBieSB0aGUgY2FsbGVyLiAgVGhpcyBmaWVsZCBpcyBvbmx5IHJlcXVpcmVkIGlmIHRoZSB1c2VyIHdpc2hlcyB0bworICogICByZWNlaXZlIHVuc29saWNpdGVkIE1BRHMsIG90aGVyd2lzZSBpdCBzaG91bGQgYmUgMC4KKyAqIEBtZ210X2NsYXNzX3ZlcnNpb24gLSBJbmRpY2F0ZXMgd2hpY2ggdmVyc2lvbiBvZiBNQURzIGZvciB0aGUgZ2l2ZW4KKyAqICAgbWFuYWdlbWVudCBjbGFzcyB0byByZWNlaXZlLgorICogQG91aTogSW5kaWNhdGVzIElFRUUgT1VJIHdoZW4gbWdtdF9jbGFzcyBpcyBhIHZlbmRvciBjbGFzcworICogICBpbiB0aGUgcmFuZ2UgZnJvbSAweDMwIHRvIDB4NGYuIE90aGVyd2lzZSBub3QgdXNlZC4KKyAqIEBybXBwX3ZlcnNpb246IElmIHNldCwgaW5kaWNhdGVzIHRoZSBSTVBQIHZlcnNpb24gdXNlZC4KKyAqCisgKi8KK3N0cnVjdCBpYl91c2VyX21hZF9yZWdfcmVxIHsKKwlfX3UzMglpZDsKKwlwYWNrZWRfdWxvbmcgbWV0aG9kX21hc2tbSUJfVVNFUl9NQURfTE9OR1NfUEVSX01FVEhPRF9NQVNLXTsKKwlfX3U4CXFwbjsKKwlfX3U4CW1nbXRfY2xhc3M7CisJX191OAltZ210X2NsYXNzX3ZlcnNpb247CisJX191OCAgICBvdWlbM107CisJX191OAlybXBwX3ZlcnNpb247Cit9OworCisjZGVmaW5lIElCX0lPQ1RMX01BR0lDCQkweDFiCisKKyNkZWZpbmUgSUJfVVNFUl9NQURfUkVHSVNURVJfQUdFTlQJX0lPV1IoSUJfSU9DVExfTUFHSUMsIDEsIFwKKwkJCQkJICAgICAgc3RydWN0IGliX3VzZXJfbWFkX3JlZ19yZXEpCisKKyNkZWZpbmUgSUJfVVNFUl9NQURfVU5SRUdJU1RFUl9BR0VOVAlfSU9XKElCX0lPQ1RMX01BR0lDLCAyLCBfX3UzMikKKworI2RlZmluZSBJQl9VU0VSX01BRF9FTkFCTEVfUEtFWQkJX0lPKElCX0lPQ1RMX01BR0lDLCAzKQorCisjZW5kaWYgLyogSUJfVVNFUl9NQURfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JlX2NvbXAuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9yZV9jb21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkxMTQ0NwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9yZV9jb21wLmgKQEAgLTAsMCArMSwyNiBAQAorLyogIENvcHlyaWdodCAoQykgMTk5NiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfUkVfQ09NUF9ICisjZGVmaW5lIF9SRV9DT01QX0gJMQorCisvKiBUaGlzIGlzIG9ubHkgYSB3cmFwcGVyIGFyb3VuZCB0aGUgPHJlZ2V4Lmg+IGZpbGUuICBYUEc0LjIgbWVudGlvbnMKKyAgIHRoaXMgbmFtZS4gICovCisjaW5jbHVkZSA8cmVnZXguaD4KKworI2VuZGlmIC8qIHJlX2NvbXAuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JlZ2V4LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcmVnZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTMyNzcyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JlZ2V4LmgKQEAgLTAsMCArMSw1NzUgQEAKKy8qIERlZmluaXRpb25zIGZvciBkYXRhIHN0cnVjdHVyZXMgYW5kIHJvdXRpbmVzIGZvciB0aGUgcmVndWxhcgorICAgZXhwcmVzc2lvbiBsaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAxOTg1LDE5ODktOTMsMTk5NS05OCwyMDAwLDIwMDEsMjAwMiwyMDAzLDIwMDUsMjAwNiwyMDA4CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfUkVHRVhfSAorI2RlZmluZSBfUkVHRVhfSCAxCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworLyogQWxsb3cgdGhlIHVzZSBpbiBDKysgY29kZS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIFRoZSBmb2xsb3dpbmcgdHdvIHR5cGVzIGhhdmUgdG8gYmUgc2lnbmVkIGFuZCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUKKyAgIHdpZGUgZW5vdWdoIHRvIGhvbGQgYSB2YWx1ZSBvZiBhIHBvaW50ZXIuICBGb3IgbW9zdCBBTlNJIGNvbXBpbGVycworICAgcHRyZGlmZl90IGFuZCBzaXplX3Qgc2hvdWxkIGJlIGxpa2VseSBPSy4gIFN0aWxsIHNpemUgb2YgdGhlc2UgdHdvCisgICB0eXBlcyBpcyAyIGZvciBNaWNyb3NvZnQgQy4gIFVnaC4uLiAqLwordHlwZWRlZiBsb25nIGludCBzX3JlZ190OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBhY3RpdmVfcmVnX3Q7CisKKy8qIFRoZSBmb2xsb3dpbmcgYml0cyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHJlZ2V4cCBzeW50YXggd2UKKyAgIHJlY29nbml6ZS4gIFRoZSBzZXQvbm90LXNldCBtZWFuaW5ncyBhcmUgY2hvc2VuIHNvIHRoYXQgRW1hY3Mgc3ludGF4CisgICByZW1haW5zIHRoZSB2YWx1ZSAwLiAgVGhlIGJpdHMgYXJlIGdpdmVuIGluIGFscGhhYmV0aWNhbCBvcmRlciwgYW5kCisgICB0aGUgZGVmaW5pdGlvbnMgc2hpZnRlZCBieSBvbmUgZnJvbSB0aGUgcHJldmlvdXMgYml0OyB0aHVzLCB3aGVuIHdlCisgICBhZGQgb3IgcmVtb3ZlIGEgYml0LCBvbmx5IG9uZSBvdGhlciBkZWZpbml0aW9uIG5lZWQgY2hhbmdlLiAgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcmVnX3N5bnRheF90OworCisjaWZkZWYgX19VU0VfR05VCisvKiBJZiB0aGlzIGJpdCBpcyBub3Qgc2V0LCB0aGVuIFwgaW5zaWRlIGEgYnJhY2tldCBleHByZXNzaW9uIGlzIGxpdGVyYWwuCisgICBJZiBzZXQsIHRoZW4gc3VjaCBhIFwgcXVvdGVzIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyLiAgKi8KKyMgZGVmaW5lIFJFX0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMgKCh1bnNpZ25lZCBsb25nIGludCkgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgbm90IHNldCwgdGhlbiArIGFuZCA/IGFyZSBvcGVyYXRvcnMsIGFuZCBcKyBhbmQgXD8gYXJlCisgICAgIGxpdGVyYWxzLgorICAgSWYgc2V0LCB0aGVuIFwrIGFuZCBcPyBhcmUgb3BlcmF0b3JzIGFuZCArIGFuZCA/IGFyZSBsaXRlcmFscy4gICovCisjIGRlZmluZSBSRV9CS19QTFVTX1FNIChSRV9CQUNLU0xBU0hfRVNDQVBFX0lOX0xJU1RTIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBjaGFyYWN0ZXIgY2xhc3NlcyBhcmUgc3VwcG9ydGVkLiAgVGhleSBhcmU6CisgICAgIFs6YWxwaGE6XSwgWzp1cHBlcjpdLCBbOmxvd2VyOl0sICBbOmRpZ2l0Ol0sIFs6YWxudW06XSwgWzp4ZGlnaXQ6XSwKKyAgICAgWzpzcGFjZTpdLCBbOnByaW50Ol0sIFs6cHVuY3Q6XSwgWzpncmFwaDpdLCBhbmQgWzpjbnRybDpdLgorICAgSWYgbm90IHNldCwgdGhlbiBjaGFyYWN0ZXIgY2xhc3NlcyBhcmUgbm90IHN1cHBvcnRlZC4gICovCisjIGRlZmluZSBSRV9DSEFSX0NMQVNTRVMgKFJFX0JLX1BMVVNfUU0gPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIF4gYW5kICQgYXJlIGFsd2F5cyBhbmNob3JzIChvdXRzaWRlIGJyYWNrZXQKKyAgICAgZXhwcmVzc2lvbnMsIG9mIGNvdXJzZSkuCisgICBJZiB0aGlzIGJpdCBpcyBub3Qgc2V0LCB0aGVuIGl0IGRlcGVuZHM6CisgICAgICAgIF4gIGlzIGFuIGFuY2hvciBpZiBpdCBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgcmVndWxhcgorICAgICAgICAgICBleHByZXNzaW9uIG9yIGFmdGVyIGFuIG9wZW4tZ3JvdXAgb3IgYW4gYWx0ZXJuYXRpb24gb3BlcmF0b3I7CisgICAgICAgICQgIGlzIGFuIGFuY2hvciBpZiBpdCBpcyBhdCB0aGUgZW5kIG9mIGEgcmVndWxhciBleHByZXNzaW9uLCBvcgorICAgICAgICAgICBiZWZvcmUgYSBjbG9zZS1ncm91cCBvciBhbiBhbHRlcm5hdGlvbiBvcGVyYXRvci4KKworICAgVGhpcyBiaXQgY291bGQgYmUgKHJlKWNvbWJpbmVkIHdpdGggUkVfQ09OVEVYVF9JTkRFUF9PUFMsIGJlY2F1c2UKKyAgIFBPU0lYIGRyYWZ0IDExLjIgc2F5cyB0aGF0ICogZXRjLiBpbiBsZWFkaW5nIHBvc2l0aW9ucyBpcyB1bmRlZmluZWQuCisgICBXZSBhbHJlYWR5IGltcGxlbWVudGVkIGEgcHJldmlvdXMgZHJhZnQgd2hpY2ggbWFkZSB0aG9zZSBjb25zdHJ1Y3RzCisgICBpbnZhbGlkLCB0aG91Z2gsIHNvIHdlIGhhdmVuJ3QgY2hhbmdlZCB0aGUgY29kZSBiYWNrLiAgKi8KKyMgZGVmaW5lIFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUyAoUkVfQ0hBUl9DTEFTU0VTIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlIGFsd2F5cyBzcGVjaWFsCisgICAgIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhleSBhcmUgaW4gdGhlIHBhdHRlcm4uCisgICBJZiB0aGlzIGJpdCBpcyBub3Qgc2V0LCB0aGVuIHNwZWNpYWwgY2hhcmFjdGVycyBhcmUgc3BlY2lhbCBvbmx5IGluCisgICAgIHNvbWUgY29udGV4dHM7IG90aGVyd2lzZSB0aGV5IGFyZSBvcmRpbmFyeS4gIFNwZWNpZmljYWxseSwKKyAgICAgKiArID8gYW5kIGludGVydmFscyBhcmUgb25seSBzcGVjaWFsIHdoZW4gbm90IGFmdGVyIHRoZSBiZWdpbm5pbmcsCisgICAgIG9wZW4tZ3JvdXAsIG9yIGFsdGVybmF0aW9uIG9wZXJhdG9yLiAgKi8KKyMgZGVmaW5lIFJFX0NPTlRFWFRfSU5ERVBfT1BTIChSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuICosICssID8sIGFuZCB7IGNhbm5vdCBiZSBmaXJzdCBpbiBhbiByZSBvcgorICAgICBpbW1lZGlhdGVseSBhZnRlciBhbiBhbHRlcm5hdGlvbiBvciBiZWdpbi1ncm91cCBvcGVyYXRvci4gICovCisjIGRlZmluZSBSRV9DT05URVhUX0lOVkFMSURfT1BTIChSRV9DT05URVhUX0lOREVQX09QUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gLiBtYXRjaGVzIG5ld2xpbmUuCisgICBJZiBub3Qgc2V0LCB0aGVuIGl0IGRvZXNuJ3QuICAqLworIyBkZWZpbmUgUkVfRE9UX05FV0xJTkUgKFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIC4gZG9lc24ndCBtYXRjaCBOVUwuCisgICBJZiBub3Qgc2V0LCB0aGVuIGl0IGRvZXMuICAqLworIyBkZWZpbmUgUkVfRE9UX05PVF9OVUxMIChSRV9ET1RfTkVXTElORSA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIG5vbm1hdGNoaW5nIGxpc3RzIFteLi4uXSBkbyBub3QgbWF0Y2ggbmV3bGluZS4KKyAgIElmIG5vdCBzZXQsIHRoZXkgZG8uICAqLworIyBkZWZpbmUgUkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FIChSRV9ET1RfTk9UX05VTEwgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCBlaXRoZXIgXHsuLi5cfSBvciB7Li4ufSBkZWZpbmVzIGFuCisgICAgIGludGVydmFsLCBkZXBlbmRpbmcgb24gUkVfTk9fQktfQlJBQ0VTLgorICAgSWYgbm90IHNldCwgXHssIFx9LCB7LCBhbmQgfSBhcmUgbGl0ZXJhbHMuICAqLworIyBkZWZpbmUgUkVfSU5URVJWQUxTIChSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCArLCA/IGFuZCB8IGFyZW4ndCByZWNvZ25pemVkIGFzIG9wZXJhdG9ycy4KKyAgIElmIG5vdCBzZXQsIHRoZXkgYXJlLiAgKi8KKyMgZGVmaW5lIFJFX0xJTUlURURfT1BTIChSRV9JTlRFUlZBTFMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCBuZXdsaW5lIGlzIGFuIGFsdGVybmF0aW9uIG9wZXJhdG9yLgorICAgSWYgbm90IHNldCwgbmV3bGluZSBpcyBsaXRlcmFsLiAgKi8KKyMgZGVmaW5lIFJFX05FV0xJTkVfQUxUIChSRV9MSU1JVEVEX09QUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gYHsuLi59JyBkZWZpbmVzIGFuIGludGVydmFsLCBhbmQgXHsgYW5kIFx9CisgICAgIGFyZSBsaXRlcmFscy4KKyAgSWYgbm90IHNldCwgdGhlbiBgXHsuLi5cfScgZGVmaW5lcyBhbiBpbnRlcnZhbC4gICovCisjIGRlZmluZSBSRV9OT19CS19CUkFDRVMgKFJFX05FV0xJTkVfQUxUIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgKC4uLikgZGVmaW5lcyBhIGdyb3VwLCBhbmQgXCggYW5kIFwpIGFyZSBsaXRlcmFscy4KKyAgIElmIG5vdCBzZXQsIFwoLi4uXCkgZGVmaW5lcyBhIGdyb3VwLCBhbmQgKCBhbmQgKSBhcmUgbGl0ZXJhbHMuICAqLworIyBkZWZpbmUgUkVfTk9fQktfUEFSRU5TIChSRV9OT19CS19CUkFDRVMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIFw8ZGlnaXQ+IG1hdGNoZXMgPGRpZ2l0Pi4KKyAgIElmIG5vdCBzZXQsIHRoZW4gXDxkaWdpdD4gaXMgYSBiYWNrLXJlZmVyZW5jZS4gICovCisjIGRlZmluZSBSRV9OT19CS19SRUZTIChSRV9OT19CS19QQVJFTlMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIHwgaXMgYW4gYWx0ZXJuYXRpb24gb3BlcmF0b3IsIGFuZCBcfCBpcyBsaXRlcmFsLgorICAgSWYgbm90IHNldCwgdGhlbiBcfCBpcyBhbiBhbHRlcm5hdGlvbiBvcGVyYXRvciwgYW5kIHwgaXMgbGl0ZXJhbC4gICovCisjIGRlZmluZSBSRV9OT19CS19WQkFSIChSRV9OT19CS19SRUZTIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBhbiBlbmRpbmcgcmFuZ2UgcG9pbnQgY29sbGF0aW5nIGhpZ2hlcgorICAgICB0aGFuIHRoZSBzdGFydGluZyByYW5nZSBwb2ludCwgYXMgaW4gW3otYV0sIGlzIGludmFsaWQuCisgICBJZiBub3Qgc2V0LCB0aGVuIHdoZW4gZW5kaW5nIHJhbmdlIHBvaW50IGNvbGxhdGVzIGhpZ2hlciB0aGFuIHRoZQorICAgICBzdGFydGluZyByYW5nZSBwb2ludCwgdGhlIHJhbmdlIGlzIGlnbm9yZWQuICAqLworIyBkZWZpbmUgUkVfTk9fRU1QVFlfUkFOR0VTIChSRV9OT19CS19WQkFSIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBhbiB1bm1hdGNoZWQgKSBpcyBvcmRpbmFyeS4KKyAgIElmIG5vdCBzZXQsIHRoZW4gYW4gdW5tYXRjaGVkICkgaXMgaW52YWxpZC4gICovCisjIGRlZmluZSBSRV9VTk1BVENIRURfUklHSFRfUEFSRU5fT1JEIChSRV9OT19FTVBUWV9SQU5HRVMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCBzdWNjZWVkIGFzIHNvb24gYXMgd2UgbWF0Y2ggdGhlIHdob2xlIHBhdHRlcm4sCisgICB3aXRob3V0IGZ1cnRoZXIgYmFja3RyYWNraW5nLiAgKi8KKyMgZGVmaW5lIFJFX05PX1BPU0lYX0JBQ0tUUkFDS0lORyAoUkVfVU5NQVRDSEVEX1JJR0hUX1BBUkVOX09SRCA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIGRvIG5vdCBwcm9jZXNzIHRoZSBHTlUgcmVnZXggb3BlcmF0b3JzLgorICAgSWYgbm90IHNldCwgdGhlbiB0aGUgR05VIHJlZ2V4IG9wZXJhdG9ycyBhcmUgcmVjb2duaXplZC4gKi8KKyMgZGVmaW5lIFJFX05PX0dOVV9PUFMgKFJFX05PX1BPU0lYX0JBQ0tUUkFDS0lORyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHR1cm4gb24gaW50ZXJuYWwgcmVnZXggZGVidWdnaW5nLgorICAgSWYgbm90IHNldCwgYW5kIGRlYnVnZ2luZyB3YXMgb24sIHR1cm4gaXQgb2ZmLgorICAgVGhpcyBvbmx5IHdvcmtzIGlmIHJlZ2V4LmMgaXMgY29tcGlsZWQgLURERUJVRy4KKyAgIFdlIGRlZmluZSB0aGlzIGJpdCBhbHdheXMsIHNvIHRoYXQgYWxsIHRoYXQncyBuZWVkZWQgdG8gdHVybiBvbgorICAgZGVidWdnaW5nIGlzIHRvIHJlY29tcGlsZSByZWdleC5jOyB0aGUgY2FsbGluZyBjb2RlIGNhbiBhbHdheXMgaGF2ZQorICAgdGhpcyBiaXQgc2V0LCBhbmQgaXQgd29uJ3QgYWZmZWN0IGFueXRoaW5nIGluIHRoZSBub3JtYWwgY2FzZS4gKi8KKyMgZGVmaW5lIFJFX0RFQlVHIChSRV9OT19HTlVfT1BTIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgYSBzeW50YWN0aWNhbGx5IGludmFsaWQgaW50ZXJ2YWwgaXMgdHJlYXRlZCBhcworICAgYSBzdHJpbmcgb2Ygb3JkaW5hcnkgY2hhcmFjdGVycy4gIEZvciBleGFtcGxlLCB0aGUgRVJFICdhezEnIGlzCisgICB0cmVhdGVkIGFzICdhXHsxJy4gICovCisjIGRlZmluZSBSRV9JTlZBTElEX0lOVEVSVkFMX09SRCAoUkVfREVCVUcgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIGlnbm9yZSBjYXNlIHdoZW4gbWF0Y2hpbmcuCisgICBJZiBub3Qgc2V0LCB0aGVuIGNhc2UgaXMgc2lnbmlmaWNhbnQuICAqLworIyBkZWZpbmUgUkVfSUNBU0UgKFJFX0lOVkFMSURfSU5URVJWQUxfT1JEIDw8IDEpCisKKy8qIFRoaXMgYml0IGlzIHVzZWQgaW50ZXJuYWxseSBsaWtlIFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUyBidXQgb25seQorICAgZm9yIF4sIGJlY2F1c2UgaXQgaXMgZGlmZmljdWx0IHRvIHNjYW4gdGhlIHJlZ2V4IGJhY2t3YXJkcyB0byBmaW5kCisgICB3aGV0aGVyIF4gc2hvdWxkIGJlIHNwZWNpYWwuICAqLworIyBkZWZpbmUgUkVfQ0FSRVRfQU5DSE9SU19IRVJFIChSRV9JQ0FTRSA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gXHsgY2Fubm90IGJlIGZpcnN0IGluIGFuIGJyZSBvcgorICAgaW1tZWRpYXRlbHkgYWZ0ZXIgYW4gYWx0ZXJuYXRpb24gb3IgYmVnaW4tZ3JvdXAgb3BlcmF0b3IuICAqLworIyBkZWZpbmUgUkVfQ09OVEVYVF9JTlZBTElEX0RVUCAoUkVfQ0FSRVRfQU5DSE9SU19IRVJFIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBub19zdWIgd2lsbCBiZSBzZXQgdG8gMSBkdXJpbmcKKyAgIHJlX2NvbXBpbGVfcGF0dGVybi4gICovCisjIGRlZmluZSBSRV9OT19TVUIgKFJFX0NPTlRFWFRfSU5WQUxJRF9EVVAgPDwgMSkKKyNlbmRpZgorCisvKiBUaGlzIGdsb2JhbCB2YXJpYWJsZSBkZWZpbmVzIHRoZSBwYXJ0aWN1bGFyIHJlZ2V4cCBzeW50YXggdG8gdXNlIChmb3IKKyAgIHNvbWUgaW50ZXJmYWNlcykuICBXaGVuIGEgcmVnZXhwIGlzIGNvbXBpbGVkLCB0aGUgc3ludGF4IHVzZWQgaXMKKyAgIHN0b3JlZCBpbiB0aGUgcGF0dGVybiBidWZmZXIsIHNvIGNoYW5naW5nIHRoaXMgZG9lcyBub3QgYWZmZWN0CisgICBhbHJlYWR5LWNvbXBpbGVkIHJlZ2V4cHMuICAqLworZXh0ZXJuIHJlZ19zeW50YXhfdCByZV9zeW50YXhfb3B0aW9uczsKKwwKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIERlZmluZSBjb21iaW5hdGlvbnMgb2YgdGhlIGFib3ZlIGJpdHMgZm9yIHRoZSBzdGFuZGFyZCBwb3NzaWJpbGl0aWVzLgorICAgKFRoZSBbW1sgY29tbWVudHMgZGVsaW1pdCB3aGF0IGdldHMgcHV0IGludG8gdGhlIFRleGluZm8gZmlsZSwgc28KKyAgIGRvbid0IGRlbGV0ZSB0aGVtISkgICovCisvKiBbW1tiZWdpbiBzeW50YXhlc11dXSAqLworI2RlZmluZSBSRV9TWU5UQVhfRU1BQ1MgMAorCisjZGVmaW5lIFJFX1NZTlRBWF9BV0sJCQkJCQkJXAorICAoUkVfQkFDS1NMQVNIX0VTQ0FQRV9JTl9MSVNUUyAgIHwgUkVfRE9UX05PVF9OVUxMCQkJXAorICAgfCBSRV9OT19CS19QQVJFTlMgICAgICAgICAgICAgIHwgUkVfTk9fQktfUkVGUwkJCVwKKyAgIHwgUkVfTk9fQktfVkJBUiAgICAgICAgICAgICAgICB8IFJFX05PX0VNUFRZX1JBTkdFUwkJCVwKKyAgIHwgUkVfRE9UX05FV0xJTkUJCSAgfCBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMJCVwKKyAgIHwgUkVfVU5NQVRDSEVEX1JJR0hUX1BBUkVOX09SRCB8IFJFX05PX0dOVV9PUFMpCisKKyNkZWZpbmUgUkVfU1lOVEFYX0dOVV9BV0sJCQkJCQlcCisgICgoUkVfU1lOVEFYX1BPU0lYX0VYVEVOREVEIHwgUkVfQkFDS1NMQVNIX0VTQ0FQRV9JTl9MSVNUUyB8IFJFX0RFQlVHKQlcCisgICAmIH4oUkVfRE9UX05PVF9OVUxMIHwgUkVfSU5URVJWQUxTIHwgUkVfQ09OVEVYVF9JTkRFUF9PUFMJCVwKKyAgICAgICB8IFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMgKSkKKworI2RlZmluZSBSRV9TWU5UQVhfUE9TSVhfQVdLCQkJCQkJXAorICAoUkVfU1lOVEFYX1BPU0lYX0VYVEVOREVEIHwgUkVfQkFDS1NMQVNIX0VTQ0FQRV9JTl9MSVNUUwkJXAorICAgfCBSRV9JTlRFUlZBTFMJICAgIHwgUkVfTk9fR05VX09QUykKKworI2RlZmluZSBSRV9TWU5UQVhfR1JFUAkJCQkJCQlcCisgIChSRV9CS19QTFVTX1FNICAgICAgICAgICAgICB8IFJFX0NIQVJfQ0xBU1NFUwkJCQlcCisgICB8IFJFX0hBVF9MSVNUU19OT1RfTkVXTElORSB8IFJFX0lOVEVSVkFMUwkJCQlcCisgICB8IFJFX05FV0xJTkVfQUxUKQorCisjZGVmaW5lIFJFX1NZTlRBWF9FR1JFUAkJCQkJCQlcCisgIChSRV9DSEFSX0NMQVNTRVMgICAgICAgIHwgUkVfQ09OVEVYVF9JTkRFUF9BTkNIT1JTCQkJXAorICAgfCBSRV9DT05URVhUX0lOREVQX09QUyB8IFJFX0hBVF9MSVNUU19OT1RfTkVXTElORQkJCVwKKyAgIHwgUkVfTkVXTElORV9BTFQgICAgICAgfCBSRV9OT19CS19QQVJFTlMJCQkJXAorICAgfCBSRV9OT19CS19WQkFSKQorCisjZGVmaW5lIFJFX1NZTlRBWF9QT1NJWF9FR1JFUAkJCQkJCVwKKyAgKFJFX1NZTlRBWF9FR1JFUCB8IFJFX0lOVEVSVkFMUyB8IFJFX05PX0JLX0JSQUNFUwkJCVwKKyAgIHwgUkVfSU5WQUxJRF9JTlRFUlZBTF9PUkQpCisKKy8qIFAxMDAzLjIvRDExLjIsIHNlY3Rpb24gNC4yMC43LjEsIGxpbmVzIDUwNzhmZi4gICovCisjZGVmaW5lIFJFX1NZTlRBWF9FRCBSRV9TWU5UQVhfUE9TSVhfQkFTSUMKKworI2RlZmluZSBSRV9TWU5UQVhfU0VEIFJFX1NZTlRBWF9QT1NJWF9CQVNJQworCisvKiBTeW50YXggYml0cyBjb21tb24gdG8gYm90aCBiYXNpYyBhbmQgZXh0ZW5kZWQgUE9TSVggcmVnZXggc3ludGF4LiAgKi8KKyNkZWZpbmUgX1JFX1NZTlRBWF9QT1NJWF9DT01NT04JCQkJCQlcCisgIChSRV9DSEFSX0NMQVNTRVMgfCBSRV9ET1RfTkVXTElORSAgICAgIHwgUkVfRE9UX05PVF9OVUxMCQlcCisgICB8IFJFX0lOVEVSVkFMUyAgfCBSRV9OT19FTVBUWV9SQU5HRVMpCisKKyNkZWZpbmUgUkVfU1lOVEFYX1BPU0lYX0JBU0lDCQkJCQkJXAorICAoX1JFX1NZTlRBWF9QT1NJWF9DT01NT04gfCBSRV9CS19QTFVTX1FNIHwgUkVfQ09OVEVYVF9JTlZBTElEX0RVUCkKKworLyogRGlmZmVycyBmcm9tIC4uLl9QT1NJWF9CQVNJQyBvbmx5IGluIHRoYXQgUkVfQktfUExVU19RTSBiZWNvbWVzCisgICBSRV9MSU1JVEVEX09QUywgaS5lLiwgXD8gXCsgXHwgYXJlIG5vdCByZWNvZ25pemVkLiAgQWN0dWFsbHksIHRoaXMKKyAgIGlzbid0IG1pbmltYWwsIHNpbmNlIG90aGVyIG9wZXJhdG9ycywgc3VjaCBhcyBcYCwgYXJlbid0IGRpc2FibGVkLiAgKi8KKyNkZWZpbmUgUkVfU1lOVEFYX1BPU0lYX01JTklNQUxfQkFTSUMJCQkJCVwKKyAgKF9SRV9TWU5UQVhfUE9TSVhfQ09NTU9OIHwgUkVfTElNSVRFRF9PUFMpCisKKyNkZWZpbmUgUkVfU1lOVEFYX1BPU0lYX0VYVEVOREVECQkJCQlcCisgIChfUkVfU1lOVEFYX1BPU0lYX0NPTU1PTiAgfCBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMJCQlcCisgICB8IFJFX0NPTlRFWFRfSU5ERVBfT1BTICAgfCBSRV9OT19CS19CUkFDRVMJCQkJXAorICAgfCBSRV9OT19CS19QQVJFTlMgICAgICAgIHwgUkVfTk9fQktfVkJBUgkJCQlcCisgICB8IFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMgfCBSRV9VTk1BVENIRURfUklHSFRfUEFSRU5fT1JEKQorCisvKiBEaWZmZXJzIGZyb20gLi4uX1BPU0lYX0VYVEVOREVEIGluIHRoYXQgUkVfQ09OVEVYVF9JTkRFUF9PUFMgaXMKKyAgIHJlbW92ZWQgYW5kIFJFX05PX0JLX1JFRlMgaXMgYWRkZWQuICAqLworI2RlZmluZSBSRV9TWU5UQVhfUE9TSVhfTUlOSU1BTF9FWFRFTkRFRAkJCQlcCisgIChfUkVfU1lOVEFYX1BPU0lYX0NPTU1PTiAgfCBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMJCQlcCisgICB8IFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMgfCBSRV9OT19CS19CUkFDRVMJCQkJXAorICAgfCBSRV9OT19CS19QQVJFTlMgICAgICAgIHwgUkVfTk9fQktfUkVGUwkJCQlcCisgICB8IFJFX05PX0JLX1ZCQVIJICAgIHwgUkVfVU5NQVRDSEVEX1JJR0hUX1BBUkVOX09SRCkKKy8qIFtbW2VuZCBzeW50YXhlc11dXSAqLworDAorLyogTWF4aW11bSBudW1iZXIgb2YgZHVwbGljYXRlcyBhbiBpbnRlcnZhbCBjYW4gYWxsb3cuICBTb21lIHN5c3RlbXMKKyAgIChlcnJvbmVvdXNseSkgZGVmaW5lIHRoaXMgaW4gb3RoZXIgaGVhZGVyIGZpbGVzLCBidXQgd2Ugd2FudCBvdXIKKyAgIHZhbHVlLCBzbyByZW1vdmUgYW55IHByZXZpb3VzIGRlZmluZS4gICovCisjIGlmZGVmIFJFX0RVUF9NQVgKKyMgIHVuZGVmIFJFX0RVUF9NQVgKKyMgZW5kaWYKKy8qIElmIHNpemVvZihpbnQpID09IDIsIHRoZW4gKCgxIDw8IDE1KSAtIDEpIG92ZXJmbG93cy4gICovCisjIGRlZmluZSBSRV9EVVBfTUFYICgweDdmZmYpCisjZW5kaWYKKworCisvKiBQT1NJWCBgY2ZsYWdzJyBiaXRzIChpLmUuLCBpbmZvcm1hdGlvbiBmb3IgYHJlZ2NvbXAnKS4gICovCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiB1c2UgZXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9uIHN5bnRheC4KKyAgIElmIG5vdCBzZXQsIHRoZW4gdXNlIGJhc2ljIHJlZ3VsYXIgZXhwcmVzc2lvbiBzeW50YXguICAqLworI2RlZmluZSBSRUdfRVhURU5ERUQgMQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gaWdub3JlIGNhc2Ugd2hlbiBtYXRjaGluZy4KKyAgIElmIG5vdCBzZXQsIHRoZW4gY2FzZSBpcyBzaWduaWZpY2FudC4gICovCisjZGVmaW5lIFJFR19JQ0FTRSAoUkVHX0VYVEVOREVEIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBhbmNob3JzIGRvIG5vdCBtYXRjaCBhdCBuZXdsaW5lCisgICAgIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZy4KKyAgIElmIG5vdCBzZXQsIHRoZW4gYW5jaG9ycyBkbyBtYXRjaCBhdCBuZXdsaW5lcy4gICovCisjZGVmaW5lIFJFR19ORVdMSU5FIChSRUdfSUNBU0UgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIHJlcG9ydCBvbmx5IHN1Y2Nlc3Mgb3IgZmFpbCBpbiByZWdleGVjLgorICAgSWYgbm90IHNldCwgdGhlbiByZXR1cm5zIGRpZmZlciBiZXR3ZWVuIG5vdCBtYXRjaGluZyBhbmQgZXJyb3JzLiAgKi8KKyNkZWZpbmUgUkVHX05PU1VCIChSRUdfTkVXTElORSA8PCAxKQorCisKKy8qIFBPU0lYIGBlZmxhZ3MnIGJpdHMgKGkuZS4sIGluZm9ybWF0aW9uIGZvciByZWdleGVjKS4gICovCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiB0aGUgYmVnaW5uaW5nLW9mLWxpbmUgb3BlcmF0b3IgZG9lc24ndCBtYXRjaAorICAgICB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcgKHByZXN1bWFibHkgYmVjYXVzZSBpdCdzIG5vdCB0aGUKKyAgICAgYmVnaW5uaW5nIG9mIGEgbGluZSkuCisgICBJZiBub3Qgc2V0LCB0aGVuIHRoZSBiZWdpbm5pbmctb2YtbGluZSBvcGVyYXRvciBkb2VzIG1hdGNoIHRoZQorICAgICBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZy4gICovCisjZGVmaW5lIFJFR19OT1RCT0wgMQorCisvKiBMaWtlIFJFR19OT1RCT0wsIGV4Y2VwdCBmb3IgdGhlIGVuZC1vZi1saW5lLiAgKi8KKyNkZWZpbmUgUkVHX05PVEVPTCAoMSA8PCAxKQorCisvKiBVc2UgUE1BVENIWzBdIHRvIGRlbGltaXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHNlYXJjaCBpbiB0aGUKKyAgIGJ1ZmZlci4gICovCisjZGVmaW5lIFJFR19TVEFSVEVORCAoMSA8PCAyKQorCisKKy8qIElmIGFueSBlcnJvciBjb2RlcyBhcmUgcmVtb3ZlZCwgY2hhbmdlZCwgb3IgYWRkZWQsIHVwZGF0ZSB0aGUKKyAgIGByZV9lcnJvcl9tc2cnIHRhYmxlIGluIHJlZ2V4LmMuICAqLwordHlwZWRlZiBlbnVtCit7CisjaWYgZGVmaW5lZCBfWE9QRU5fU09VUkNFIHx8IGRlZmluZWQgX19VU0VfWE9QRU4ySworICBSRUdfRU5PU1lTID0gLTEsCS8qIFRoaXMgd2lsbCBuZXZlciBoYXBwZW4gZm9yIHRoaXMgaW1wbGVtZW50YXRpb24uICAqLworI2VuZGlmCisKKyAgUkVHX05PRVJST1IgPSAwLAkvKiBTdWNjZXNzLiAgKi8KKyAgUkVHX05PTUFUQ0gsCQkvKiBEaWRuJ3QgZmluZCBhIG1hdGNoIChmb3IgcmVnZXhlYykuICAqLworCisgIC8qIFBPU0lYIHJlZ2NvbXAgcmV0dXJuIGVycm9yIGNvZGVzLiAgKEluIHRoZSBvcmRlciBsaXN0ZWQgaW4gdGhlCisgICAgIHN0YW5kYXJkLikgICovCisgIFJFR19CQURQQVQsCQkvKiBJbnZhbGlkIHBhdHRlcm4uICAqLworICBSRUdfRUNPTExBVEUsCQkvKiBJbmFsaWQgY29sbGF0aW5nIGVsZW1lbnQuICAqLworICBSRUdfRUNUWVBFLAkJLyogSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZS4gICovCisgIFJFR19FRVNDQVBFLAkJLyogVHJhaWxpbmcgYmFja3NsYXNoLiAgKi8KKyAgUkVHX0VTVUJSRUcsCQkvKiBJbnZhbGlkIGJhY2sgcmVmZXJlbmNlLiAgKi8KKyAgUkVHX0VCUkFDSywJCS8qIFVubWF0Y2hlZCBsZWZ0IGJyYWNrZXQuICAqLworICBSRUdfRVBBUkVOLAkJLyogUGFyZW50aGVzaXMgaW1iYWxhbmNlLiAgKi8KKyAgUkVHX0VCUkFDRSwJCS8qIFVubWF0Y2hlZCBcey4gICovCisgIFJFR19CQURCUiwJCS8qIEludmFsaWQgY29udGVudHMgb2YgXHtcfS4gICovCisgIFJFR19FUkFOR0UsCQkvKiBJbnZhbGlkIHJhbmdlIGVuZC4gICovCisgIFJFR19FU1BBQ0UsCQkvKiBSYW4gb3V0IG9mIG1lbW9yeS4gICovCisgIFJFR19CQURSUFQsCQkvKiBObyBwcmVjZWRpbmcgcmUgZm9yIHJlcGV0aXRpb24gb3AuICAqLworCisgIC8qIEVycm9yIGNvZGVzIHdlJ3ZlIGFkZGVkLiAgKi8KKyAgUkVHX0VFTkQsCQkvKiBQcmVtYXR1cmUgZW5kLiAgKi8KKyAgUkVHX0VTSVpFLAkJLyogQ29tcGlsZWQgcGF0dGVybiBiaWdnZXIgdGhhbiAyXjE2IGJ5dGVzLiAgKi8KKyAgUkVHX0VSUEFSRU4JCS8qIFVubWF0Y2hlZCApIG9yIFwpOyBub3QgcmV0dXJuZWQgZnJvbSByZWdjb21wLiAgKi8KK30gcmVnX2VycmNvZGVfdDsKKwwKKy8qIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIGNvbXBpbGVkIHBhdHRlcm4uICBCZWZvcmUgY2FsbGluZworICAgdGhlIHBhdHRlcm4gY29tcGlsZXIsIHRoZSBmaWVsZHMgYGJ1ZmZlcicsIGBhbGxvY2F0ZWQnLCBgZmFzdG1hcCcsCisgICBgdHJhbnNsYXRlJywgYW5kIGBub19zdWInIGNhbiBiZSBzZXQuICBBZnRlciB0aGUgcGF0dGVybiBoYXMgYmVlbgorICAgY29tcGlsZWQsIHRoZSBgcmVfbnN1YicgZmllbGQgaXMgYXZhaWxhYmxlLiAgQWxsIG90aGVyIGZpZWxkcyBhcmUKKyAgIHByaXZhdGUgdG8gdGhlIHJlZ2V4IHJvdXRpbmVzLiAgKi8KKworI2lmbmRlZiBSRV9UUkFOU0xBVEVfVFlQRQorIyBkZWZpbmUgX19SRV9UUkFOU0xBVEVfVFlQRSB1bnNpZ25lZCBjaGFyICoKKyMgaWZkZWYgX19VU0VfR05VCisjICBkZWZpbmUgUkVfVFJBTlNMQVRFX1RZUEUgX19SRV9UUkFOU0xBVEVfVFlQRQorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9HTlUKKyMgZGVmaW5lIF9fUkVQQl9QUkVGSVgobmFtZSkgbmFtZQorI2Vsc2UKKyMgZGVmaW5lIF9fUkVQQl9QUkVGSVgobmFtZSkgX18jI25hbWUKKyNlbmRpZgorCitzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIKK3sKKyAgLyogU3BhY2UgdGhhdCBob2xkcyB0aGUgY29tcGlsZWQgcGF0dGVybi4gIEl0IGlzIGRlY2xhcmVkIGFzCisgICAgIGB1bnNpZ25lZCBjaGFyIConIGJlY2F1c2UgaXRzIGVsZW1lbnRzIGFyZSBzb21ldGltZXMgdXNlZCBhcworICAgICBhcnJheSBpbmRleGVzLiAgKi8KKyAgdW5zaWduZWQgY2hhciAqX19SRVBCX1BSRUZJWChidWZmZXIpOworCisgIC8qIE51bWJlciBvZiBieXRlcyB0byB3aGljaCBgYnVmZmVyJyBwb2ludHMuICAqLworICB1bnNpZ25lZCBsb25nIGludCBfX1JFUEJfUFJFRklYKGFsbG9jYXRlZCk7CisKKyAgLyogTnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHVzZWQgaW4gYGJ1ZmZlcicuICAqLworICB1bnNpZ25lZCBsb25nIGludCBfX1JFUEJfUFJFRklYKHVzZWQpOworCisgIC8qIFN5bnRheCBzZXR0aW5nIHdpdGggd2hpY2ggdGhlIHBhdHRlcm4gd2FzIGNvbXBpbGVkLiAgKi8KKyAgcmVnX3N5bnRheF90IF9fUkVQQl9QUkVGSVgoc3ludGF4KTsKKworICAvKiBQb2ludGVyIHRvIGEgZmFzdG1hcCwgaWYgYW55LCBvdGhlcndpc2UgemVyby4gIHJlX3NlYXJjaCB1c2VzIHRoZQorICAgICBmYXN0bWFwLCBpZiB0aGVyZSBpcyBvbmUsIHRvIHNraXAgb3ZlciBpbXBvc3NpYmxlIHN0YXJ0aW5nIHBvaW50cworICAgICBmb3IgbWF0Y2hlcy4gICovCisgIGNoYXIgKl9fUkVQQl9QUkVGSVgoZmFzdG1hcCk7CisKKyAgLyogRWl0aGVyIGEgdHJhbnNsYXRlIHRhYmxlIHRvIGFwcGx5IHRvIGFsbCBjaGFyYWN0ZXJzIGJlZm9yZQorICAgICBjb21wYXJpbmcgdGhlbSwgb3IgemVybyBmb3Igbm8gdHJhbnNsYXRpb24uICBUaGUgdHJhbnNsYXRpb24gaXMKKyAgICAgYXBwbGllZCB0byBhIHBhdHRlcm4gd2hlbiBpdCBpcyBjb21waWxlZCBhbmQgdG8gYSBzdHJpbmcgd2hlbiBpdAorICAgICBpcyBtYXRjaGVkLiAgKi8KKyAgX19SRV9UUkFOU0xBVEVfVFlQRSBfX1JFUEJfUFJFRklYKHRyYW5zbGF0ZSk7CisKKyAgLyogTnVtYmVyIG9mIHN1YmV4cHJlc3Npb25zIGZvdW5kIGJ5IHRoZSBjb21waWxlci4gICovCisgIHNpemVfdCByZV9uc3ViOworCisgIC8qIFplcm8gaWYgdGhpcyBwYXR0ZXJuIGNhbm5vdCBtYXRjaCB0aGUgZW1wdHkgc3RyaW5nLCBvbmUgZWxzZS4KKyAgICAgV2VsbCwgaW4gdHJ1dGggaXQncyB1c2VkIG9ubHkgaW4gYHJlX3NlYXJjaF8yJywgdG8gc2VlIHdoZXRoZXIgb3IKKyAgICAgbm90IHdlIHNob3VsZCB1c2UgdGhlIGZhc3RtYXAsIHNvIHdlIGRvbid0IHNldCB0aGlzIGFic29sdXRlbHkKKyAgICAgcGVyZmVjdGx5OyBzZWUgYHJlX2NvbXBpbGVfZmFzdG1hcCcgKHRoZSBgZHVwbGljYXRlJyBjYXNlKS4gICovCisgIHVuc2lnbmVkIF9fUkVQQl9QUkVGSVgoY2FuX2JlX251bGwpIDogMTsKKworICAvKiBJZiBSRUdTX1VOQUxMT0NBVEVELCBhbGxvY2F0ZSBzcGFjZSBpbiB0aGUgYHJlZ3MnIHN0cnVjdHVyZQorICAgICBmb3IgYG1heCAoUkVfTlJFR1MsIHJlX25zdWIgKyAxKScgZ3JvdXBzLgorICAgICBJZiBSRUdTX1JFQUxMT0NBVEUsIHJlYWxsb2NhdGUgc3BhY2UgaWYgbmVjZXNzYXJ5LgorICAgICBJZiBSRUdTX0ZJWEVELCB1c2Ugd2hhdCdzIHRoZXJlLiAgKi8KKyNpZmRlZiBfX1VTRV9HTlUKKyMgZGVmaW5lIFJFR1NfVU5BTExPQ0FURUQgMAorIyBkZWZpbmUgUkVHU19SRUFMTE9DQVRFIDEKKyMgZGVmaW5lIFJFR1NfRklYRUQgMgorI2VuZGlmCisgIHVuc2lnbmVkIF9fUkVQQl9QUkVGSVgocmVnc19hbGxvY2F0ZWQpIDogMjsKKworICAvKiBTZXQgdG8gemVybyB3aGVuIGByZWdleF9jb21waWxlJyBjb21waWxlcyBhIHBhdHRlcm47IHNldCB0byBvbmUKKyAgICAgYnkgYHJlX2NvbXBpbGVfZmFzdG1hcCcgaWYgaXQgdXBkYXRlcyB0aGUgZmFzdG1hcC4gICovCisgIHVuc2lnbmVkIF9fUkVQQl9QUkVGSVgoZmFzdG1hcF9hY2N1cmF0ZSkgOiAxOworCisgIC8qIElmIHNldCwgYHJlX21hdGNoXzInIGRvZXMgbm90IHJldHVybiBpbmZvcm1hdGlvbiBhYm91dAorICAgICBzdWJleHByZXNzaW9ucy4gICovCisgIHVuc2lnbmVkIF9fUkVQQl9QUkVGSVgobm9fc3ViKSA6IDE7CisKKyAgLyogSWYgc2V0LCBhIGJlZ2lubmluZy1vZi1saW5lIGFuY2hvciBkb2Vzbid0IG1hdGNoIGF0IHRoZSBiZWdpbm5pbmcKKyAgICAgb2YgdGhlIHN0cmluZy4gICovCisgIHVuc2lnbmVkIF9fUkVQQl9QUkVGSVgobm90X2JvbCkgOiAxOworCisgIC8qIFNpbWlsYXJseSBmb3IgYW4gZW5kLW9mLWxpbmUgYW5jaG9yLiAgKi8KKyAgdW5zaWduZWQgX19SRVBCX1BSRUZJWChub3RfZW9sKSA6IDE7CisKKyAgLyogSWYgdHJ1ZSwgYW4gYW5jaG9yIGF0IGEgbmV3bGluZSBtYXRjaGVzLiAgKi8KKyAgdW5zaWduZWQgX19SRVBCX1BSRUZJWChuZXdsaW5lX2FuY2hvcikgOiAxOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgcmVnZXhfdDsKKwwKKy8qIFR5cGUgZm9yIGJ5dGUgb2Zmc2V0cyB3aXRoaW4gdGhlIHN0cmluZy4gIFBPU0lYIG1hbmRhdGVzIHRoaXMuICAqLwordHlwZWRlZiBpbnQgcmVnb2ZmX3Q7CisKKworI2lmZGVmIF9fVVNFX0dOVQorLyogVGhpcyBpcyB0aGUgc3RydWN0dXJlIHdlIHN0b3JlIHJlZ2lzdGVyIG1hdGNoIGRhdGEgaW4uICBTZWUKKyAgIHJlZ2V4LnRleGluZm8gZm9yIGEgZnVsbCBkZXNjcmlwdGlvbiBvZiB3aGF0IHJlZ2lzdGVycyBtYXRjaC4gICovCitzdHJ1Y3QgcmVfcmVnaXN0ZXJzCit7CisgIHVuc2lnbmVkIG51bV9yZWdzOworICByZWdvZmZfdCAqc3RhcnQ7CisgIHJlZ29mZl90ICplbmQ7Cit9OworCisKKy8qIElmIGByZWdzX2FsbG9jYXRlZCcgaXMgUkVHU19VTkFMTE9DQVRFRCBpbiB0aGUgcGF0dGVybiBidWZmZXIsCisgICBgcmVfbWF0Y2hfMicgcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhdCBsZWFzdCB0aGlzIG1hbnkgcmVnaXN0ZXJzCisgICB0aGUgZmlyc3QgdGltZSBhIGByZWdzJyBzdHJ1Y3R1cmUgaXMgcGFzc2VkLiAgKi8KKyMgaWZuZGVmIFJFX05SRUdTCisjICBkZWZpbmUgUkVfTlJFR1MgMzAKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIFBPU0lYIHNwZWNpZmljYXRpb24gZm9yIHJlZ2lzdGVycy4gIEFzaWRlIGZyb20gdGhlIGRpZmZlcmVudCBuYW1lcyB0aGFuCisgICBgcmVfcmVnaXN0ZXJzJywgUE9TSVggdXNlcyBhbiBhcnJheSBvZiBzdHJ1Y3R1cmVzLCBpbnN0ZWFkIG9mIGEKKyAgIHN0cnVjdHVyZSBvZiBhcnJheXMuICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgcmVnb2ZmX3Qgcm1fc287ICAvKiBCeXRlIG9mZnNldCBmcm9tIHN0cmluZydzIHN0YXJ0IHRvIHN1YnN0cmluZydzIHN0YXJ0LiAgKi8KKyAgcmVnb2ZmX3Qgcm1fZW87ICAvKiBCeXRlIG9mZnNldCBmcm9tIHN0cmluZydzIHN0YXJ0IHRvIHN1YnN0cmluZydzIGVuZC4gICovCit9IHJlZ21hdGNoX3Q7CisMCisvKiBEZWNsYXJhdGlvbnMgZm9yIHJvdXRpbmVzLiAgKi8KKworI2lmZGVmIF9fVVNFX0dOVQorLyogU2V0cyB0aGUgY3VycmVudCBkZWZhdWx0IHN5bnRheCB0byBTWU5UQVgsIGFuZCByZXR1cm4gdGhlIG9sZCBzeW50YXguCisgICBZb3UgY2FuIGFsc28gc2ltcGx5IGFzc2lnbiB0byB0aGUgYHJlX3N5bnRheF9vcHRpb25zJyB2YXJpYWJsZS4gICovCitleHRlcm4gcmVnX3N5bnRheF90IHJlX3NldF9zeW50YXggKHJlZ19zeW50YXhfdCBfX3N5bnRheCk7CisKKy8qIENvbXBpbGUgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBQQVRURVJOLCB3aXRoIGxlbmd0aCBMRU5HVEgKKyAgIGFuZCBzeW50YXggZ2l2ZW4gYnkgdGhlIGdsb2JhbCBgcmVfc3ludGF4X29wdGlvbnMnLCBpbnRvIHRoZSBidWZmZXIKKyAgIEJVRkZFUi4gIFJldHVybiBOVUxMIGlmIHN1Y2Nlc3NmdWwsIGFuZCBhbiBlcnJvciBzdHJpbmcgaWYgbm90LiAgKi8KK2V4dGVybiBjb25zdCBjaGFyICpyZV9jb21waWxlX3BhdHRlcm4gKGNvbnN0IGNoYXIgKl9fcGF0dGVybiwgc2l6ZV90IF9fbGVuZ3RoLAorCQkJCSAgICAgICBzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKl9fYnVmZmVyKTsKKworCisvKiBDb21waWxlIGEgZmFzdG1hcCBmb3IgdGhlIGNvbXBpbGVkIHBhdHRlcm4gaW4gQlVGRkVSOyB1c2VkIHRvCisgICBhY2NlbGVyYXRlIHNlYXJjaGVzLiAgUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCBhbmQgLTIgaWYgd2FzIGFuCisgICBpbnRlcm5hbCBlcnJvci4gICovCitleHRlcm4gaW50IHJlX2NvbXBpbGVfZmFzdG1hcCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpfX2J1ZmZlcik7CisKKworLyogU2VhcmNoIGluIHRoZSBzdHJpbmcgU1RSSU5HICh3aXRoIGxlbmd0aCBMRU5HVEgpIGZvciB0aGUgcGF0dGVybgorICAgY29tcGlsZWQgaW50byBCVUZGRVIuICBTdGFydCBzZWFyY2hpbmcgYXQgcG9zaXRpb24gU1RBUlQsIGZvciBSQU5HRQorICAgY2hhcmFjdGVycy4gIFJldHVybiB0aGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIG1hdGNoLCAtMSBmb3Igbm8KKyAgIG1hdGNoLCBvciAtMiBmb3IgYW4gaW50ZXJuYWwgZXJyb3IuICBBbHNvIHJldHVybiByZWdpc3RlcgorICAgaW5mb3JtYXRpb24gaW4gUkVHUyAoaWYgUkVHUyBhbmQgQlVGRkVSLT5ub19zdWIgYXJlIG5vbnplcm8pLiAgKi8KK2V4dGVybiBpbnQgcmVfc2VhcmNoIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKl9fYnVmZmVyLCBjb25zdCBjaGFyICpfX3N0cmluZywKKwkJICAgICAgaW50IF9fbGVuZ3RoLCBpbnQgX19zdGFydCwgaW50IF9fcmFuZ2UsCisJCSAgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKl9fcmVncyk7CisKKworLyogTGlrZSBgcmVfc2VhcmNoJywgYnV0IHNlYXJjaCBpbiB0aGUgY29uY2F0ZW5hdGlvbiBvZiBTVFJJTkcxIGFuZAorICAgU1RSSU5HMi4gIEFsc28sIHN0b3Agc2VhcmNoaW5nIGF0IGluZGV4IFNUQVJUICsgU1RPUC4gICovCitleHRlcm4gaW50IHJlX3NlYXJjaF8yIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKl9fYnVmZmVyLAorCQkJY29uc3QgY2hhciAqX19zdHJpbmcxLCBpbnQgX19sZW5ndGgxLAorCQkJY29uc3QgY2hhciAqX19zdHJpbmcyLCBpbnQgX19sZW5ndGgyLCBpbnQgX19zdGFydCwKKwkJCWludCBfX3JhbmdlLCBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpfX3JlZ3MsIGludCBfX3N0b3ApOworCisKKy8qIExpa2UgYHJlX3NlYXJjaCcsIGJ1dCByZXR1cm4gaG93IG1hbnkgY2hhcmFjdGVycyBpbiBTVFJJTkcgdGhlIHJlZ2V4cAorICAgaW4gQlVGRkVSIG1hdGNoZWQsIHN0YXJ0aW5nIGF0IHBvc2l0aW9uIFNUQVJULiAgKi8KK2V4dGVybiBpbnQgcmVfbWF0Y2ggKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqX19idWZmZXIsIGNvbnN0IGNoYXIgKl9fc3RyaW5nLAorCQkgICAgIGludCBfX2xlbmd0aCwgaW50IF9fc3RhcnQsIHN0cnVjdCByZV9yZWdpc3RlcnMgKl9fcmVncyk7CisKKworLyogUmVsYXRlcyB0byBgcmVfbWF0Y2gnIGFzIGByZV9zZWFyY2hfMicgcmVsYXRlcyB0byBgcmVfc2VhcmNoJy4gICovCitleHRlcm4gaW50IHJlX21hdGNoXzIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqX19idWZmZXIsCisJCSAgICAgICBjb25zdCBjaGFyICpfX3N0cmluZzEsIGludCBfX2xlbmd0aDEsCisJCSAgICAgICBjb25zdCBjaGFyICpfX3N0cmluZzIsIGludCBfX2xlbmd0aDIsIGludCBfX3N0YXJ0LAorCQkgICAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqX19yZWdzLCBpbnQgX19zdG9wKTsKKworCisvKiBTZXQgUkVHUyB0byBob2xkIE5VTV9SRUdTIHJlZ2lzdGVycywgc3RvcmluZyB0aGVtIGluIFNUQVJUUyBhbmQKKyAgIEVORFMuICBTdWJzZXF1ZW50IG1hdGNoZXMgdXNpbmcgQlVGRkVSIGFuZCBSRUdTIHdpbGwgdXNlIHRoaXMgbWVtb3J5CisgICBmb3IgcmVjb3JkaW5nIHJlZ2lzdGVyIGluZm9ybWF0aW9uLiAgU1RBUlRTIGFuZCBFTkRTIG11c3QgYmUKKyAgIGFsbG9jYXRlZCB3aXRoIG1hbGxvYywgYW5kIG11c3QgZWFjaCBiZSBhdCBsZWFzdCBgTlVNX1JFR1MgKiBzaXplb2YKKyAgIChyZWdvZmZfdCknIGJ5dGVzIGxvbmcuCisKKyAgIElmIE5VTV9SRUdTID09IDAsIHRoZW4gc3Vic2VxdWVudCBtYXRjaGVzIHNob3VsZCBhbGxvY2F0ZSB0aGVpciBvd24KKyAgIHJlZ2lzdGVyIGRhdGEuCisKKyAgIFVubGVzcyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIGZpcnN0IHNlYXJjaCBvciBtYXRjaCB1c2luZworICAgUEFUVEVSTl9CVUZGRVIgd2lsbCBhbGxvY2F0ZSBpdHMgb3duIHJlZ2lzdGVyIGRhdGEsIHdpdGhvdXQKKyAgIGZyZWVpbmcgdGhlIG9sZCBkYXRhLiAgKi8KK2V4dGVybiB2b2lkIHJlX3NldF9yZWdpc3RlcnMgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqX19idWZmZXIsCisJCQkgICAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpfX3JlZ3MsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgX19udW1fcmVncywKKwkJCSAgICAgIHJlZ29mZl90ICpfX3N0YXJ0cywgcmVnb2ZmX3QgKl9fZW5kcyk7CisjZW5kaWYJLyogVXNlIEdOVSAqLworCisjaWYgZGVmaW5lZCBfUkVHRVhfUkVfQ09NUCB8fCAoZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIF9fVVNFX0JTRCkKKyMgaWZuZGVmIF9DUkFZCisvKiA0LjIgYnNkIGNvbXBhdGliaWxpdHkuICAqLworZXh0ZXJuIGNoYXIgKnJlX2NvbXAgKGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IHJlX2V4ZWMgKGNvbnN0IGNoYXIgKik7CisjIGVuZGlmCisjZW5kaWYKKworLyogR0NDIDIuOTUgYW5kIGxhdGVyIGhhdmUgIl9fcmVzdHJpY3QiOyBDOTkgY29tcGlsZXJzIGhhdmUKKyAgICJyZXN0cmljdCIsIGFuZCAiY29uZmlndXJlIiBtYXkgaGF2ZSBkZWZpbmVkICJyZXN0cmljdCIuICAqLworI2lmbmRlZiBfX3Jlc3RyaWN0CisjIGlmICEgKDIgPCBfX0dOVUNfXyB8fCAoMiA9PSBfX0dOVUNfXyAmJiA5NSA8PSBfX0dOVUNfTUlOT1JfXykpCisjICBpZiBkZWZpbmVkIHJlc3RyaWN0IHx8IDE5OTkwMUwgPD0gX19TVERDX1ZFUlNJT05fXworIyAgIGRlZmluZSBfX3Jlc3RyaWN0IHJlc3RyaWN0CisjICBlbHNlCisjICAgZGVmaW5lIF9fcmVzdHJpY3QKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKy8qIGdjYyAzLjEgYW5kIHVwIHN1cHBvcnQgdGhlIFtyZXN0cmljdF0gc3ludGF4LiAgKi8KKyNpZm5kZWYgX19yZXN0cmljdF9hcnIKKyMgaWYgKF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSAxKSkgXAorICAgICAmJiAhZGVmaW5lZCBfX0dOVUdfXworIyAgZGVmaW5lIF9fcmVzdHJpY3RfYXJyIF9fcmVzdHJpY3QKKyMgZWxzZQorIyAgZGVmaW5lIF9fcmVzdHJpY3RfYXJyCisjIGVuZGlmCisjZW5kaWYKKworLyogUE9TSVggY29tcGF0aWJpbGl0eS4gICovCitleHRlcm4gaW50IHJlZ2NvbXAgKHJlZ2V4X3QgKl9fcmVzdHJpY3QgX19wcmVnLAorCQkgICAgY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3BhdHRlcm4sCisJCSAgICBpbnQgX19jZmxhZ3MpOworCitleHRlcm4gaW50IHJlZ2V4ZWMgKGNvbnN0IHJlZ2V4X3QgKl9fcmVzdHJpY3QgX19wcmVnLAorCQkgICAgY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3N0cmluZywgc2l6ZV90IF9fbm1hdGNoLAorCQkgICAgcmVnbWF0Y2hfdCBfX3BtYXRjaFtfX3Jlc3RyaWN0X2Fycl0sCisJCSAgICBpbnQgX19lZmxhZ3MpOworCitleHRlcm4gc2l6ZV90IHJlZ2Vycm9yIChpbnQgX19lcnJjb2RlLCBjb25zdCByZWdleF90ICpfX3Jlc3RyaWN0IF9fcHJlZywKKwkJCWNoYXIgKl9fcmVzdHJpY3QgX19lcnJidWYsIHNpemVfdCBfX2VycmJ1Zl9zaXplKTsKKworZXh0ZXJuIHZvaWQgcmVnZnJlZSAocmVnZXhfdCAqX19wcmVnKTsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgkvKiBDKysgKi8KKworI2VuZGlmIC8qIHJlZ2V4LmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9yZWdleHAuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9yZWdleHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTk3OWQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JlZ2V4cC5oCkBAIC0wLDAgKzEsMjI4IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDQsIDIwMDgKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisgICBDb250cmlidXRlZCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5Ni4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1JFR0VYUF9ICisjZGVmaW5lIF9SRUdFWFBfSAkxCisKKy8qIFRoZSBjb250ZW50cyBvZiB0aGlzIGhlYWRlciBmaWxlIHdhcyBmaXJzdCBzdGFuZGFyZGl6ZWQgaW4gWC9PcGVuCisgICBTeXN0ZW0gSW50ZXJmYWNlIGFuZCBIZWFkZXJzIElzc3VlIDIsIG9yaWdpbmFsbHkgY29taW5nIGZyb20gU3lzVi4KKyAgIEluIGlzc3VlIDQsIHZlcnNpb24gMiwgaXQgaXMgbWFya2VkIGFzIFRPIEJFIFdJVERSQVdOLCBhbmQgaXQgaGFzCisgICBiZWVuIHdpdGhkcmF3biBpbiBTVVN2My4KKworICAgVGhpcyBjb2RlIHNob3VsZG4ndCBiZSB1c2VkIGluIGFueSBuZXdseSB3cml0dGVuIGNvZGUuICBJdCBpcworICAgaW5jbHVkZWQgb25seSBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLiAgVXNlIHRoZSBQT1NJWCBkZWZpbml0aW9uCisgICBpbiA8cmVnZXguaD4gZm9yIHBvcnRhYmxlIGFwcGxpY2F0aW9ucyBhbmQgYSByZWFzb25hYmxlIGludGVyZmFjZS4gICovCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorI2luY2x1ZGUgPGFsbG9jYS5oPgorI2luY2x1ZGUgPHJlZ2V4Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qIFRoZSBpbXBsZW1lbnRhdGlvbiBwcm92aWRlZCBoZXJlIGVtdWxhdGVzIHRoZSBuZWVkZWQgZnVuY3Rpb25hbGl0eQorICAgYnkgbWFwcGluZyB0byB0aGUgUE9TSVggcmVndWxhciBleHByZXNzaW9uIG1hdGNoZXIuICBUaGUgaW50ZXJmYWNlCisgICBmb3IgdGhlIGhlcmUgaW5jbHVkZWQgZnVuY3Rpb24gaXMgd2VpcmQgKHRoaXMgcmVhbGx5IGlzIGEgaGFybWxlc3MKKyAgIHdvcmQpLgorCisgICBUaGUgdXNlciBoYXMgdG8gcHJvdmlkZSBzaXggbWFjcm9zIGJlZm9yZSB0aGlzIGhlYWRlciBmaWxlIGNhbiBiZQorICAgaW5jbHVkZWQ6CisKKyAgIElOSVQJCURlY2xhcmF0aW9ucyB2b3IgdmFyaWFibGVzIHdoaWNoIGNhbiBiZSB1c2VkIGJ5IHRoZQorCQlvdGhlciBtYWNyb3MuCisKKyAgIEdFVEMoKQlSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBuZXh0IGNoYXJhY3RlciBpbiB0aGUgcmVndWxhcgorCQlleHByZXNzaW9uIHBhdHRlcm4uICBTdWNjZXNzaXZlIGNhbGxzIHNob3VsZCByZXR1cm4KKwkJc3VjY2Vzc2l2ZSBjaGFyYWN0ZXJzLgorCisgICBQRUVLQygpCVJldHVybiB0aGUgdmFsdWUgb2YgdGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSByZWd1bGFyCisJCWV4cHJlc3Npb24gcGF0dGVybi4gIEltbWVkaWF0ZWx5IHN1Y2Nlc3NpdmUgY2FsbHMgdG8KKwkJUEVFS0MoKSBzaG91bGQgcmV0dXJuIHRoZSBzYW1lIGNoYXJhY3RlciB3aGljaCBzaG91bGQKKwkJYWxzbyBiZSB0aGUgbmV4dCBjaGFyYWN0ZXIgcmV0dXJuZWQgYnkgR0VUQygpLgorCisgICBVTkdFVEMoYykJQ2F1c2UgYGMnIHRvIGJlIHJldHVybmVkIGJ5IHRoZSBuZXh0IGNhbGwgdG8gR0VUQygpIGFuZAorCQlQRUVLQygpLgorCisgICBSRVRVUk4ocHRyKQlVc2VkIGZvciBub3JtYWwgZXhpdCBvZiB0aGUgYGNvbXBpbGUnIGZ1bmN0aW9uLiAgYHB0cicKKwkJaXMgYSBwb2ludGVyIHRvIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGxhc3QgY2hhcmFjdGVyIG9mCisJCXRoZSBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb24uCisKKyAgIEVSUk9SKHZhbCkJVXNlZCBmb3IgYWJub3JtYWwgcmV0dXJuIGZyb20gYGNvbXBpbGUnLiAgYHZhbCcgaXMgdGhlCisJCWVycm9yIG51bWJlci4gIFRoZSBlcnJvciBjb2RlcyBhcmU6CisJCTExCVJhbmdlIGVuZHBvaW50IHRvbyBsYXJnZS4KKwkJMTYJQmFkIG51bWJlci4KKwkJMjUJXGRpZ2l0IG91dCBvZiByYW5nZS4KKwkJMzYJSWxsZWdhbCBvciBtaXNzaW5nIGRlbGltaXRlci4KKwkJNDEJTm8gcmVtZW1iZXJlZCBzZWFyY2ggc3RyaW5nLgorCQk0MglcKCBcKSBpbWJhbGFuY2UuCisJCTQzCVRvbyBtYW55IFwoLgorCQk0NAlNb3JlIHRhbiB0d28gbnVtYmVycyBnaXZlbiBpbiBceyBcfS4KKwkJNDUJfSBleHBlY3RlZCBhZnRlciBcLgorCQk0NglGaXJzdCBudW1iZXIgZXhjZWVkcyBzZWNvbmQgaW4gXHsgXH0uCisJCTQ5CVsgXSBpbWJhbGFuY2UuCisJCTUwCVJlZ3VsYXIgZXhwcmVzc2lvbiBvdmVyZmxvdy4KKworICAqLworCitfX0JFR0lOX0RFQ0xTCisKKy8qIEludGVyZmFjZSB2YXJpYWJsZXMuICBUaGV5IGNvbnRhaW4gdGhlIHJlc3VsdHMgb2YgdGhlIHN1Y2Nlc3NmdWwKKyAgIGNhbGxzIHRvIGBzZXRwJyBhbmQgYGFkdmFuY2UnLiAgKi8KK2V4dGVybiBjaGFyICpsb2MxOworZXh0ZXJuIGNoYXIgKmxvYzI7CisKKy8qIFRoZSB1c2Ugb2YgdGhpcyB2YXJpYWJsZSBpbiB0aGUgYGFkdmFuY2UnIGZ1bmN0aW9uIGlzIG5vdAorICAgc3VwcG9ydGVkLiAgKi8KK2V4dGVybiBjaGFyICpsb2NzOworCisKKyNpZm5kZWYgX19ET19OT1RfREVGSU5FX0NPTVBJTEUKKy8qIEdldCBhbmQgY29tcGlsZSB0aGUgdXNlciBzdXBwbGllZCBwYXR0ZXJuIHVwIHRvIGVuZCBvZiBsaW5lIG9yCisgICBzdHJpbmcgb3IgdW50aWwgRU9GIGlzIHNlZW4sIHdoYXRldmVyIGhhcHBlbnMgZmlyc3QuICBUaGUgcmVzdWx0IGlzCisgICBwbGFjZWQgaW4gdGhlIGJ1ZmZlciBzdGFydGluZyBhdCBFWFBCVUYgYW5kIGRlbGltaXRlZCBieSBFTkRCVUYuCisKKyAgIFRoaXMgZnVuY3Rpb24gY2Fubm90IGJlIGRlZmluZWQgaW4gdGhlIGxpYmMgaXRzZWxmIHNpbmNlIGl0IGRlcGVuZHMKKyAgIG9uIHRoZSBtYWNyb3MuICAqLworY2hhciAqCitjb21waWxlIChjaGFyICpfX3Jlc3RyaWN0IGluc3RyaW5nLCBjaGFyICpfX3Jlc3RyaWN0IGV4cGJ1ZiwKKwkgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IGVuZGJ1ZiwgaW50IGVvZikKK3sKKyAgY2hhciAqX19pbnB1dF9idWZmZXIgPSBOVUxMOworICBzaXplX3QgX19pbnB1dF9zaXplID0gMDsKKyAgc2l6ZV90IF9fY3VycmVudF9zaXplID0gMDsKKyAgaW50IF9fY2g7CisgIGludCBfX2Vycm9yOworICBJTklUCisKKyAgLyogQWxpZ24gdGhlIGV4cHJlc3Npb24gYnVmZmVyIGFjY29yZGluZyB0byB0aGUgbmVlZHMgZm9yIGFuIG9iamVjdAorICAgICBvZiB0eXBlIGByZWdleF90Jy4gIFRoZW4gY2hlY2sgZm9yIG1pbmltdW0gc2l6ZSBvZiB0aGUgYnVmZmVyIGZvcgorICAgICB0aGUgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9uLiAgKi8KKyAgcmVnZXhfdCAqX19leHByX3B0cjsKKyMgaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiBfX0dOVUNfXyA+PSAyCisgIGNvbnN0IHNpemVfdCBfX3JlcSA9IF9fYWxpZ25vZl9fIChyZWdleF90ICopOworIyBlbHNlCisgIC8qIEhvdyBzaGFsbCB3ZSBmaW5kIG91dD8gIFdlIHNpbXBseSBndWVzcyBpdCBhbmQgY2FuIGNoYW5nZSBpdCBpcworICAgICB0aGlzIHJlYWxseSBwcm9vZnMgdG8gYmUgd3JvbmcuICAqLworICBjb25zdCBzaXplX3QgX19yZXEgPSA4OworIyBlbmRpZgorICBleHBidWYgKz0gX19yZXE7CisgIGV4cGJ1ZiAtPSAoZXhwYnVmIC0gKChjaGFyICopIDApKSAlIF9fcmVxOworICBpZiAoZW5kYnVmIDwgZXhwYnVmICsgc2l6ZW9mIChyZWdleF90KSkKKyAgICB7CisgICAgICBFUlJPUiAoNTApOworICAgIH0KKyAgX19leHByX3B0ciA9IChyZWdleF90ICopIGV4cGJ1ZjsKKyAgLyogVGhlIHJlbWFpbmluZyBzcGFjZSBpbiB0aGUgYnVmZmVyIGNhbiBiZSB1c2VkIGZvciB0aGUgY29tcGlsZWQKKyAgICAgcGF0dGVybi4gICovCisgIF9fZXhwcl9wdHItPl9fUkVQQl9QUkVGSVggKGJ1ZmZlcikgPSBleHBidWYgKyBzaXplb2YgKHJlZ2V4X3QpOworICBfX2V4cHJfcHRyLT5fX1JFUEJfUFJFRklYIChhbGxvY2F0ZWQpCisgICAgPSBlbmRidWYgLSAoY2hhciAqKSBfX2V4cHJfcHRyLT5fX1JFUEJfUFJFRklYIChidWZmZXIpOworCisgIHdoaWxlICgoX19jaCA9IChHRVRDICgpKSkgIT0gZW9mKQorICAgIHsKKyAgICAgIGlmIChfX2NoID09ICdcMCcgfHwgX19jaCA9PSAnXG4nKQorCXsKKwkgIFVOR0VUQyAoX19jaCk7CisJICBicmVhazsKKwl9CisKKyAgICAgIGlmIChfX2N1cnJlbnRfc2l6ZSArIDEgPj0gX19pbnB1dF9zaXplKQorCXsKKwkgIHNpemVfdCBfX25ld19zaXplID0gX19pbnB1dF9zaXplID8gMiAqIF9faW5wdXRfc2l6ZSA6IDEyODsKKwkgIGNoYXIgKl9fbmV3X3Jvb20gPSAoY2hhciAqKSBhbGxvY2EgKF9fbmV3X3NpemUpOworCSAgLyogU2VlIHdoZXRoZXIgd2UgY2FuIHVzZSB0aGUgb2xkIGJ1ZmZlci4gICovCisJICBpZiAoX19uZXdfcm9vbSArIF9fbmV3X3NpemUgPT0gX19pbnB1dF9idWZmZXIpCisJICAgIHsKKwkgICAgICBfX2lucHV0X3NpemUgKz0gX19uZXdfc2l6ZTsKKwkgICAgICBfX2lucHV0X2J1ZmZlciA9IChjaGFyICopIG1lbWNweSAoX19uZXdfcm9vbSwgX19pbnB1dF9idWZmZXIsCisJCQkJCSAgICAgICBfX2N1cnJlbnRfc2l6ZSk7CisJICAgIH0KKwkgIGVsc2UgaWYgKF9faW5wdXRfYnVmZmVyICsgX19pbnB1dF9zaXplID09IF9fbmV3X3Jvb20pCisJICAgIF9faW5wdXRfc2l6ZSArPSBfX25ld19zaXplOworCSAgZWxzZQorCSAgICB7CisJICAgICAgX19pbnB1dF9zaXplID0gX19uZXdfc2l6ZTsKKwkgICAgICBfX2lucHV0X2J1ZmZlciA9IChjaGFyICopIG1lbWNweSAoX19uZXdfcm9vbSwgX19pbnB1dF9idWZmZXIsCisJCQkJCQlfX2N1cnJlbnRfc2l6ZSk7CisJICAgIH0KKwl9CisgICAgICBfX2lucHV0X2J1ZmZlcltfX2N1cnJlbnRfc2l6ZSsrXSA9IF9fY2g7CisgICAgfQorICBpZiAoX19jdXJyZW50X3NpemUpCisgICAgX19pbnB1dF9idWZmZXJbX19jdXJyZW50X3NpemUrK10gPSAnXDAnOworICBlbHNlCisgICAgX19pbnB1dF9idWZmZXIgPSAiIjsKKworICAvKiBOb3cgY29tcGlsZSB0aGUgcGF0dGVybi4gICovCisgIF9fZXJyb3IgPSByZWdjb21wIChfX2V4cHJfcHRyLCBfX2lucHV0X2J1ZmZlciwgUkVHX05FV0xJTkUpOworICBpZiAoX19lcnJvciAhPSAwKQorICAgIC8qIE9oIHdlbGwsIHdlIGhhdmUgdG8gdHJhbnNsYXRlIFBPU0lYIGVycm9yIGNvZGVzLiAgKi8KKyAgICBzd2l0Y2ggKF9fZXJyb3IpCisgICAgICB7CisgICAgICBjYXNlIFJFR19CQURQQVQ6CisgICAgICBjYXNlIFJFR19FQ09MTEFURToKKyAgICAgIGNhc2UgUkVHX0VDVFlQRToKKyAgICAgIGNhc2UgUkVHX0VFU0NBUEU6CisgICAgICBjYXNlIFJFR19CQURSUFQ6CisgICAgICBjYXNlIFJFR19FRU5EOgorICAgICAgY2FzZSBSRUdfRVJQQVJFTjoKKyAgICAgIGRlZmF1bHQ6CisJLyogVGhlcmUgaXMgbm8gbWF0Y2hpbmcgZXJyb3IgY29kZS4gICovCisJUkVUVVJOICgzNik7CisgICAgICBjYXNlIFJFR19FU1VCUkVHOgorCVJFVFVSTiAoMjUpOworICAgICAgY2FzZSBSRUdfRUJSQUNLOgorCVJFVFVSTiAoNDkpOworICAgICAgY2FzZSBSRUdfRVBBUkVOOgorCVJFVFVSTiAoNDIpOworICAgICAgY2FzZSBSRUdfRUJSQUNFOgorCVJFVFVSTiAoNDQpOworICAgICAgY2FzZSBSRUdfQkFEQlI6CisJUkVUVVJOICg0Nik7CisgICAgICBjYXNlIFJFR19FUkFOR0U6CisJUkVUVVJOICgxMSk7CisgICAgICBjYXNlIFJFR19FU1BBQ0U6CisgICAgICBjYXNlIFJFR19FU0laRToKKwlFUlJPUiAoNTApOworICAgICAgfQorCisgIC8qIEV2ZXJ5dGhpbmcgaXMgb2suICAqLworICBSRVRVUk4gKChjaGFyICopIChfX2V4cHJfcHRyLT5fX1JFUEJfUFJFRklYIChidWZmZXIpCisJCSAgICArIF9fZXhwcl9wdHItPl9fUkVQQl9QUkVGSVggKHVzZWQpKSk7Cit9CisjZW5kaWYKKworCisvKiBGaW5kIHRoZSBuZXh0IG1hdGNoIGluIFNUUklORy4gIFRoZSBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb24gaXMKKyAgIGZvdW5kIGluIHRoZSBidWZmZXIgc3RhcnRpbmcgYXQgRVhQQlVGLiAgYGxvYzEnIHdpbGwgcmV0dXJuIHRoZQorICAgZmlyc3QgY2hhcmFjdGVyIG1hdGNoZWQgYW5kIGBsb2MyJyBwb2ludHMgdG8gdGhlIG5leHQgdW5tYXRjaGVkCisgICBjaGFyYWN0ZXIuICAqLworZXh0ZXJuIGludCBzdGVwIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zdHJpbmcsCisJCSBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19leHBidWYpIF9fVEhST1c7CisKKy8qIE1hdGNoIHRoZSBiZWdpbm5pbmcgb2YgU1RSSU5HIHdpdGggdGhlIGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgaW4gRVhQQlVGLiAgSWYgdGhlIG1hdGNoIGlzIHN1Y2Nlc3NmdWwgYGxvYzInIHdpbGwgY29udGFpbiB0aGUKKyAgIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCB1bm1hdGNoZWQgY2hhcmFjdGVyLiAgKi8KK2V4dGVybiBpbnQgYWR2YW5jZSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RyaW5nLAorCQkgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZXhwYnVmKSBfX1RIUk9XOworCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiByZWdleHAuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3Jlc29sdi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3Jlc29sdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNTYzMWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcmVzb2x2LmgKQEAgLTAsMCArMSwzODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5ODcsIDE5ODkKKyAqICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElOVEVSTkVUIFNPRlRXQVJFIENPTlNPUlRJVU0gRElTQ0xBSU1TCisgKiBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIElOVEVSTkVUIFNPRlRXQVJFCisgKiBDT05TT1JUSVVNIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgorICogUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKKyAqIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUworICogU09GVFdBUkUuCisgKi8KKworLyoKKyAqCUAoIylyZXNvbHYuaAk4LjEgKEJlcmtlbGV5KSA2LzIvOTMKKyAqCSRCSU5ESWQ6IHJlc29sdi5oLHYgOC4zMSAyMDAwLzAzLzMwIDIwOjE2OjUwIHZpeGllIEV4cCAkCisgKi8KKworI2lmbmRlZiBfUkVTT0xWX0hfCisKKy8qIFRoZXNlIGhlYWRlcnMgYXJlIG5lZWRlZCBmb3IgdHlwZXMgdXNlZCBpbiB0aGUgYHN0cnVjdCByZXNfc3RhdGUnCisgICBkZWNsYXJhdGlvbi4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorCisjaWZuZGVmIF9fbmVlZF9yZXNfc3RhdGUKKyMgZGVmaW5lIF9SRVNPTFZfSF8KKworIyBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyMgaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjIGluY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorI2VuZGlmCisKKyNpZm5kZWYgX19yZXNfc3RhdGVfZGVmaW5lZAorIyBkZWZpbmUgX19yZXNfc3RhdGVfZGVmaW5lZAorCit0eXBlZGVmIGVudW0geyByZXNfZ29haGVhZCwgcmVzX25leHRucywgcmVzX21vZGlmaWVkLCByZXNfZG9uZSwgcmVzX2Vycm9yIH0KKwlyZXNfc2VuZGhvb2thY3Q7CisKK3R5cGVkZWYgcmVzX3NlbmRob29rYWN0ICgqcmVzX3NlbmRfcWhvb2spIChzdHJ1Y3Qgc29ja2FkZHJfaW4gKiBjb25zdCAqbnMsCisJCQkJCSAgIGNvbnN0IHVfY2hhciAqKnF1ZXJ5LAorCQkJCQkgICBpbnQgKnF1ZXJ5bGVuLAorCQkJCQkgICB1X2NoYXIgKmFucywKKwkJCQkJICAgaW50IGFuc3NpeiwKKwkJCQkJICAgaW50ICpyZXNwbGVuKTsKKwordHlwZWRlZiByZXNfc2VuZGhvb2thY3QgKCpyZXNfc2VuZF9yaG9vaykgKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqbnMsCisJCQkJCSAgIGNvbnN0IHVfY2hhciAqcXVlcnksCisJCQkJCSAgIGludCBxdWVyeWxlbiwKKwkJCQkJICAgdV9jaGFyICphbnMsCisJCQkJCSAgIGludCBhbnNzaXosCisJCQkJCSAgIGludCAqcmVzcGxlbik7CisKKy8qCisgKiBHbG9iYWwgZGVmaW5lcyBhbmQgdmFyaWFibGVzIGZvciByZXNvbHZlciBzdHViLgorICovCisjIGRlZmluZSBNQVhOUwkJCTMJLyogbWF4ICMgbmFtZSBzZXJ2ZXJzIHdlJ2xsIHRyYWNrICovCisjIGRlZmluZSBNQVhERkxTUkNICQkzCS8qICMgZGVmYXVsdCBkb21haW4gbGV2ZWxzIHRvIHRyeSAqLworIyBkZWZpbmUgTUFYRE5TUkNICQk2CS8qIG1heCAjIGRvbWFpbnMgaW4gc2VhcmNoIHBhdGggKi8KKyMgZGVmaW5lIExPQ0FMRE9NQUlOUEFSVFMJMgkvKiBtaW4gbGV2ZWxzIGluIG5hbWUgdGhhdCBpcyAibG9jYWwiICovCisKKyMgZGVmaW5lIFJFU19USU1FT1VUCQk1CS8qIG1pbi4gc2Vjb25kcyBiZXR3ZWVuIHJldHJpZXMgKi8KKyMgZGVmaW5lIE1BWFJFU09MVlNPUlQJCTEwCS8qIG51bWJlciBvZiBuZXQgdG8gc29ydCBvbiAqLworIyBkZWZpbmUgUkVTX01BWE5ET1RTCQkxNQkvKiBzaG91bGQgcmVmbGVjdCBiaXQgZmllbGQgc2l6ZSAqLworIyBkZWZpbmUgUkVTX01BWFJFVFJBTlMJCTMwCS8qIG9ubHkgZm9yIHJlc29sdi5jb25mL1JFU19PUFRJT05TICovCisjIGRlZmluZSBSRVNfTUFYUkVUUlkJCTUJLyogb25seSBmb3IgcmVzb2x2LmNvbmYvUkVTX09QVElPTlMgKi8KKyMgZGVmaW5lIFJFU19ERkxSRVRSWQkJMgkvKiBEZWZhdWx0ICMvdHJpZXMuICovCisjIGRlZmluZSBSRVNfTUFYVElNRQkJNjU1MzUJLyogSW5maW5pdHksIGluIG1pbGxpc2Vjb25kcy4gKi8KKworc3RydWN0IF9fcmVzX3N0YXRlIHsKKwlpbnQJcmV0cmFuczsJIAkvKiByZXRyYW5zbWl0aW9uIHRpbWUgaW50ZXJ2YWwgKi8KKwlpbnQJcmV0cnk7CQkJLyogbnVtYmVyIG9mIHRpbWVzIHRvIHJldHJhbnNtaXQgKi8KKwl1X2xvbmcJb3B0aW9uczsJCS8qIG9wdGlvbiBmbGFncyAtIHNlZSBiZWxvdy4gKi8KKwlpbnQJbnNjb3VudDsJCS8qIG51bWJlciBvZiBuYW1lIHNlcnZlcnMgKi8KKwlzdHJ1Y3Qgc29ja2FkZHJfaW4KKwkJbnNhZGRyX2xpc3RbTUFYTlNdOwkvKiBhZGRyZXNzIG9mIG5hbWUgc2VydmVyICovCisjIGRlZmluZSBuc2FkZHIJbnNhZGRyX2xpc3RbMF0JCS8qIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCisJdV9zaG9ydAlpZDsJCQkvKiBjdXJyZW50IG1lc3NhZ2UgaWQgKi8KKwkvKiAyIGJ5dGUgaG9sZSBoZXJlLiAgKi8KKwljaGFyCSpkbnNyY2hbTUFYRE5TUkNIKzFdOwkvKiBjb21wb25lbnRzIG9mIGRvbWFpbiB0byBzZWFyY2ggKi8KKwljaGFyCWRlZmRuYW1lWzI1Nl07CQkvKiBkZWZhdWx0IGRvbWFpbiAoZGVwcmVjYXRlZCkgKi8KKwl1X2xvbmcJcGZjb2RlOwkJCS8qIFJFU19QUkZfIGZsYWdzIC0gc2VlIGJlbG93LiAqLworCXVuc2lnbmVkIG5kb3RzOjQ7CQkvKiB0aHJlc2hvbGQgZm9yIGluaXRpYWwgYWJzLiBxdWVyeSAqLworCXVuc2lnbmVkIG5zb3J0OjQ7CQkvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gc29ydF9saXN0W10gKi8KKwl1bnNpZ25lZCBpcHY2X3VuYXZhaWw6MTsJLyogY29ubmVjdGluZyB0byBJUHY2IHNlcnZlciBmYWlsZWQgKi8KKwl1bnNpZ25lZCB1bnVzZWQ6MjM7CisJc3RydWN0IHsKKwkJc3RydWN0IGluX2FkZHIJYWRkcjsKKwkJdV9pbnQzMl90CW1hc2s7CisJfSBzb3J0X2xpc3RbTUFYUkVTT0xWU09SVF07CisJLyogNCBieXRlIGhvbGUgaGVyZSBvbiA2NC1iaXQgYXJjaGl0ZWN0dXJlcy4gICovCisJcmVzX3NlbmRfcWhvb2sgcWhvb2s7CQkvKiBxdWVyeSBob29rICovCisJcmVzX3NlbmRfcmhvb2sgcmhvb2s7CQkvKiByZXNwb25zZSBob29rICovCisJaW50CXJlc19oX2Vycm5vOwkJLyogbGFzdCBvbmUgc2V0IGZvciB0aGlzIGNvbnRleHQgKi8KKwlpbnQJX3Zjc29jazsJCS8qIFBSSVZBVEU6IGZvciByZXNfc2VuZCBWQyBpL28gKi8KKwl1X2ludAlfZmxhZ3M7CQkJLyogUFJJVkFURTogc2VlIGJlbG93ICovCisJLyogNCBieXRlIGhvbGUgaGVyZSBvbiA2NC1iaXQgYXJjaGl0ZWN0dXJlcy4gICovCisJdW5pb24geworCQljaGFyCXBhZFs1Ml07CS8qIE9uIGFuIGkzODYgdGhpcyBtZWFucyA1MTJiIHRvdGFsLiAqLworCQlzdHJ1Y3QgeworCQkJdV9pbnQxNl90CQluc2NvdW50OworCQkJdV9pbnQxNl90CQluc21hcFtNQVhOU107CisJCQlpbnQJCQluc3NvY2tzW01BWE5TXTsKKwkJCXVfaW50MTZfdAkJbnNjb3VudDY7CisJCQl1X2ludDE2X3QJCW5zaW5pdDsKKwkJCXN0cnVjdCBzb2NrYWRkcl9pbjYJKm5zYWRkcnNbTUFYTlNdOworI2lmZGVmIF9MSUJDCisJCQl1bnNpZ25lZCBsb25nIGxvbmcgaW50CWluaXRzdGFtcAorCQkJICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyNlbHNlCisJCQl1bnNpZ25lZCBpbnQJCV9pbml0c3RhbXBbMl07CisjZW5kaWYKKwkJfSBfZXh0OworCX0gX3U7Cit9OworCit0eXBlZGVmIHN0cnVjdCBfX3Jlc19zdGF0ZSAqcmVzX3N0YXRlOworIyB1bmRlZiBfX25lZWRfcmVzX3N0YXRlCisjZW5kaWYKKworI2lmZGVmIF9SRVNPTFZfSF8KKy8qCisgKiBSZXZpc2lvbiBpbmZvcm1hdGlvbi4gIFRoaXMgaXMgdGhlIHJlbGVhc2UgZGF0ZSBpbiBZWVlZTU1ERCBmb3JtYXQuCisgKiBJdCBjYW4gY2hhbmdlIGV2ZXJ5IGRheSBzbyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gd2l0aCBpdCBpcyB1c2UgaXQKKyAqIGluIHByZXByb2Nlc3NvciBjb21tYW5kcyBzdWNoIGFzICIjaWYgKF9fUkVTID4gMTk5MzExMDQpIi4gIERvIG5vdAorICogY29tcGFyZSBmb3IgZXF1YWxpdHk7IHJhdGhlciwgdXNlIGl0IHRvIGRldGVybWluZSB3aGV0aGVyIHlvdXIgcmVzb2x2ZXIKKyAqIGlzIG5ldyBlbm91Z2ggdG8gY29udGFpbiBhIGNlcnRhaW4gZmVhdHVyZS4KKyAqLworCisjZGVmaW5lCV9fUkVTCTE5OTkxMDA2CisKKy8qCisgKiBSZXNvbHZlciBjb25maWd1cmF0aW9uIGZpbGUuCisgKiBOb3JtYWxseSBub3QgcHJlc2VudCwgYnV0IG1heSBjb250YWluIHRoZSBhZGRyZXNzIG9mIHRoZQorICogaW5pdGFsIG5hbWUgc2VydmVyKHMpIHRvIHF1ZXJ5IGFuZCB0aGUgZG9tYWluIHNlYXJjaCBsaXN0LgorICovCisKKyNpZm5kZWYgX1BBVEhfUkVTQ09ORgorI2RlZmluZSBfUEFUSF9SRVNDT05GICAgICAgICAiL2V0Yy9yZXNvbHYuY29uZiIKKyNlbmRpZgorCitzdHJ1Y3QgcmVzX3N5bSB7CisJaW50CW51bWJlcjsJCS8qIElkZW50aWZ5aW5nIG51bWJlciwgbGlrZSBUX01YICovCisJY2hhciAqCW5hbWU7CQkvKiBJdHMgc3ltYm9saWMgbmFtZSwgbGlrZSAiTVgiICovCisJY2hhciAqCWh1bWFubmFtZTsJLyogSXRzIGZ1biBuYW1lLCBsaWtlICJtYWlsIGV4Y2hhbmdlciIgKi8KK307CisKKy8qCisgKiBSZXNvbHZlciBmbGFncyAodXNlZCB0byBiZSBkaXNjcmV0ZSBwZXItbW9kdWxlIHN0YXRpY3MgaW50cykuCisgKi8KKyNkZWZpbmUJUkVTX0ZfVkMJMHgwMDAwMDAwMQkvKiBzb2NrZXQgaXMgVENQICovCisjZGVmaW5lCVJFU19GX0NPTk4JMHgwMDAwMDAwMgkvKiBzb2NrZXQgaXMgY29ubmVjdGVkICovCisjZGVmaW5lIFJFU19GX0VETlMwRVJSCTB4MDAwMDAwMDQJLyogRUROUzAgY2F1c2VkIGVycm9ycyAqLworCisvKiByZXNfZmluZHpvbmVjdXQoKSBvcHRpb25zICovCisjZGVmaW5lCVJFU19FWEhBVVNUSVZFCTB4MDAwMDAwMDEJLyogYWx3YXlzIGRvIGFsbCBxdWVyaWVzICovCisKKy8qCisgKiBSZXNvbHZlciBvcHRpb25zIChrZWVwIHRoZXNlIGluIHN5bmNoIHdpdGggcmVzX2RlYnVnLmMsIHBsZWFzZSkKKyAqLworI2RlZmluZSBSRVNfSU5JVAkweDAwMDAwMDAxCS8qIGFkZHJlc3MgaW5pdGlhbGl6ZWQgKi8KKyNkZWZpbmUgUkVTX0RFQlVHCTB4MDAwMDAwMDIJLyogcHJpbnQgZGVidWcgbWVzc2FnZXMgKi8KKyNkZWZpbmUgUkVTX0FBT05MWQkweDAwMDAwMDA0CS8qIGF1dGhvcml0YXRpdmUgYW5zd2VycyBvbmx5ICghSU1QTCkqLworI2RlZmluZSBSRVNfVVNFVkMJMHgwMDAwMDAwOAkvKiB1c2UgdmlydHVhbCBjaXJjdWl0ICovCisjZGVmaW5lIFJFU19QUklNQVJZCTB4MDAwMDAwMTAJLyogcXVlcnkgcHJpbWFyeSBzZXJ2ZXIgb25seSAoIUlNUEwpICovCisjZGVmaW5lIFJFU19JR05UQwkweDAwMDAwMDIwCS8qIGlnbm9yZSB0cnVjYXRpb24gZXJyb3JzICovCisjZGVmaW5lIFJFU19SRUNVUlNFCTB4MDAwMDAwNDAJLyogcmVjdXJzaW9uIGRlc2lyZWQgKi8KKyNkZWZpbmUgUkVTX0RFRk5BTUVTCTB4MDAwMDAwODAJLyogdXNlIGRlZmF1bHQgZG9tYWluIG5hbWUgKi8KKyNkZWZpbmUgUkVTX1NUQVlPUEVOCTB4MDAwMDAxMDAJLyogS2VlcCBUQ1Agc29ja2V0IG9wZW4gKi8KKyNkZWZpbmUgUkVTX0ROU1JDSAkweDAwMDAwMjAwCS8qIHNlYXJjaCB1cCBsb2NhbCBkb21haW4gdHJlZSAqLworI2RlZmluZQlSRVNfSU5TRUNVUkUxCTB4MDAwMDA0MDAJLyogdHlwZSAxIHNlY3VyaXR5IGRpc2FibGVkICovCisjZGVmaW5lCVJFU19JTlNFQ1VSRTIJMHgwMDAwMDgwMAkvKiB0eXBlIDIgc2VjdXJpdHkgZGlzYWJsZWQgKi8KKyNkZWZpbmUJUkVTX05PQUxJQVNFUwkweDAwMDAxMDAwCS8qIHNodXRzIG9mZiBIT1NUQUxJQVNFUyBmZWF0dXJlICovCisjZGVmaW5lCVJFU19VU0VfSU5FVDYJMHgwMDAwMjAwMAkvKiB1c2UvbWFwIElQdjYgaW4gZ2V0aG9zdGJ5bmFtZSgpICovCisjZGVmaW5lIFJFU19ST1RBVEUJMHgwMDAwNDAwMAkvKiByb3RhdGUgbnMgbGlzdCBhZnRlciBlYWNoIHF1ZXJ5ICovCisjZGVmaW5lCVJFU19OT0NIRUNLTkFNRQkweDAwMDA4MDAwCS8qIGRvIG5vdCBjaGVjayBuYW1lcyBmb3Igc2FuaXR5LiAqLworI2RlZmluZQlSRVNfS0VFUFRTSUcJMHgwMDAxMDAwMAkvKiBkbyBub3Qgc3RyaXAgVFNJRyByZWNvcmRzICovCisjZGVmaW5lCVJFU19CTEFTVAkweDAwMDIwMDAwCS8qIGJsYXN0IGFsbCByZWN1cnNpdmUgc2VydmVycyAqLworI2RlZmluZSBSRVNfVVNFQlNUUklORwkweDAwMDQwMDAwCS8qIElQdjYgcmV2ZXJzZSBsb29rdXAgd2l0aCBieXRlCisJCQkJCSAgIHN0cmluZ3MgKi8KKyNkZWZpbmUgUkVTX05PSVA2RE9USU5UCTB4MDAwODAwMDAJLyogRG8gbm90IHVzZSAuaXA2LmludCBpbiBJUHY2CisJCQkJCSAgIHJldmVyc2UgbG9va3VwICovCisjZGVmaW5lIFJFU19VU0VfRUROUzAJMHgwMDEwMDAwMAkvKiBVc2UgRUROUzAuICAqLworCisjZGVmaW5lIFJFU19ERUZBVUxUCShSRVNfUkVDVVJTRXxSRVNfREVGTkFNRVN8UkVTX0ROU1JDSHxSRVNfTk9JUDZET1RJTlQpCisKKy8qCisgKiBSZXNvbHZlciAicGZjb2RlIiB2YWx1ZXMuICBVc2VkIGJ5IGRpZy4KKyAqLworI2RlZmluZSBSRVNfUFJGX1NUQVRTCTB4MDAwMDAwMDEKKyNkZWZpbmUgUkVTX1BSRl9VUERBVEUJMHgwMDAwMDAwMgorI2RlZmluZSBSRVNfUFJGX0NMQVNTICAgMHgwMDAwMDAwNAorI2RlZmluZSBSRVNfUFJGX0NNRAkweDAwMDAwMDA4CisjZGVmaW5lIFJFU19QUkZfUVVFUwkweDAwMDAwMDEwCisjZGVmaW5lIFJFU19QUkZfQU5TCTB4MDAwMDAwMjAKKyNkZWZpbmUgUkVTX1BSRl9BVVRICTB4MDAwMDAwNDAKKyNkZWZpbmUgUkVTX1BSRl9BREQJMHgwMDAwMDA4MAorI2RlZmluZSBSRVNfUFJGX0hFQUQxCTB4MDAwMDAxMDAKKyNkZWZpbmUgUkVTX1BSRl9IRUFEMgkweDAwMDAwMjAwCisjZGVmaW5lIFJFU19QUkZfVFRMSUQJMHgwMDAwMDQwMAorI2RlZmluZSBSRVNfUFJGX0hFQURYCTB4MDAwMDA4MDAKKyNkZWZpbmUgUkVTX1BSRl9RVUVSWQkweDAwMDAxMDAwCisjZGVmaW5lIFJFU19QUkZfUkVQTFkJMHgwMDAwMjAwMAorI2RlZmluZSBSRVNfUFJGX0lOSVQJMHgwMDAwNDAwMAorLyoJCQkweDAwMDA4MDAwCSovCisKKy8qIFRoaW5ncyBpbnZvbHZpbmcgYW4gaW50ZXJuYWwgKHN0YXRpYykgcmVzb2x2ZXIgY29udGV4dC4gKi8KK19fQkVHSU5fREVDTFMKK2V4dGVybiBzdHJ1Y3QgX19yZXNfc3RhdGUgKl9fcmVzX3N0YXRlKHZvaWQpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKK19fRU5EX0RFQ0xTCisjZGVmaW5lIF9yZXMgKCpfX3Jlc19zdGF0ZSgpKQorCisjaWZuZGVmIF9fQklORF9OT1NUQVRJQworI2RlZmluZSBmcF9ucXVlcnkJCV9fZnBfbnF1ZXJ5CisjZGVmaW5lIGZwX3F1ZXJ5CQlfX2ZwX3F1ZXJ5CisjZGVmaW5lIGhvc3RhbGlhcwkJX19ob3N0YWxpYXMKKyNkZWZpbmUgcF9xdWVyeQkJCV9fcF9xdWVyeQorI2RlZmluZSByZXNfY2xvc2UJCV9fcmVzX2Nsb3NlCisjZGVmaW5lIHJlc19pbml0CQlfX3Jlc19pbml0CisjZGVmaW5lIHJlc19pc291cnNlcnZlcgkJX19yZXNfaXNvdXJzZXJ2ZXIKKyNkZWZpbmUgcmVzX21rcXVlcnkJCV9fcmVzX21rcXVlcnkKKyNkZWZpbmUgcmVzX3F1ZXJ5CQlfX3Jlc19xdWVyeQorI2RlZmluZSByZXNfcXVlcnlkb21haW4JCV9fcmVzX3F1ZXJ5ZG9tYWluCisjZGVmaW5lIHJlc19zZWFyY2gJCV9fcmVzX3NlYXJjaAorI2RlZmluZSByZXNfc2VuZAkJX19yZXNfc2VuZAorCitfX0JFR0lOX0RFQ0xTCit2b2lkCQlmcF9ucXVlcnkgKGNvbnN0IHVfY2hhciAqLCBpbnQsIEZJTEUgKikgX19USFJPVzsKK3ZvaWQJCWZwX3F1ZXJ5IChjb25zdCB1X2NoYXIgKiwgRklMRSAqKSBfX1RIUk9XOworY29uc3QgY2hhciAqCWhvc3RhbGlhcyAoY29uc3QgY2hhciAqKSBfX1RIUk9XOwordm9pZAkJcF9xdWVyeSAoY29uc3QgdV9jaGFyICopIF9fVEhST1c7Cit2b2lkCQlyZXNfY2xvc2UgKHZvaWQpIF9fVEhST1c7CitpbnQJCXJlc19pbml0ICh2b2lkKSBfX1RIUk9XOworaW50CQlyZXNfaXNvdXJzZXJ2ZXIgKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBfX1RIUk9XOworaW50CQlyZXNfbWtxdWVyeSAoaW50LCBjb25zdCBjaGFyICosIGludCwgaW50LCBjb25zdCB1X2NoYXIgKiwKKwkJCSAgICAgaW50LCBjb25zdCB1X2NoYXIgKiwgdV9jaGFyICosIGludCkgX19USFJPVzsKK2ludAkJcmVzX3F1ZXJ5IChjb25zdCBjaGFyICosIGludCwgaW50LCB1X2NoYXIgKiwgaW50KSBfX1RIUk9XOworaW50CQlyZXNfcXVlcnlkb21haW4gKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQsIGludCwKKwkJCQkgdV9jaGFyICosIGludCkgX19USFJPVzsKK2ludAkJcmVzX3NlYXJjaCAoY29uc3QgY2hhciAqLCBpbnQsIGludCwgdV9jaGFyICosIGludCkgX19USFJPVzsKK2ludAkJcmVzX3NlbmQgKGNvbnN0IHVfY2hhciAqLCBpbnQsIHVfY2hhciAqLCBpbnQpIF9fVEhST1c7CitfX0VORF9ERUNMUworI2VuZGlmCisKKyNkZWZpbmUgYjY0X250b3AJCV9fYjY0X250b3AKKyNkZWZpbmUgYjY0X3B0b24JCV9fYjY0X3B0b24KKyNkZWZpbmUgZG5fY29tcAkJCV9fZG5fY29tcAorI2RlZmluZSBkbl9jb3VudF9sYWJlbHMJCV9fZG5fY291bnRfbGFiZWxzCisjZGVmaW5lIGRuX2V4cGFuZAkJX19kbl9leHBhbmQKKyNkZWZpbmUgZG5fc2tpcG5hbWUJCV9fZG5fc2tpcG5hbWUKKyNkZWZpbmUgZnBfcmVzc3RhdAkJX19mcF9yZXNzdGF0CisjZGVmaW5lIGxvY19hdG9uCQlfX2xvY19hdG9uCisjZGVmaW5lIGxvY19udG9hCQlfX2xvY19udG9hCisjZGVmaW5lIHBfY2RuYW1lCQlfX3BfY2RuYW1lCisjZGVmaW5lIHBfY2RubmFtZQkJX19wX2Nkbm5hbWUKKyNkZWZpbmUgcF9jbGFzcwkJCV9fcF9jbGFzcworI2RlZmluZSBwX2ZxbmFtZQkJX19wX2ZxbmFtZQorI2RlZmluZSBwX2Zxbm5hbWUJCV9fcF9mcW5uYW1lCisjZGVmaW5lIHBfb3B0aW9uCQlfX3Bfb3B0aW9uCisjZGVmaW5lIHBfc2Vjc3RvZGF0ZQkJX19wX3NlY3N0b2RhdGUKKyNkZWZpbmUgcF9zZWN0aW9uCQlfX3Bfc2VjdGlvbgorI2RlZmluZSBwX3RpbWUJCQlfX3BfdGltZQorI2RlZmluZSBwX3R5cGUJCQlfX3BfdHlwZQorI2RlZmluZSBwX3Jjb2RlCQkJX19wX3Jjb2RlCisjZGVmaW5lIHB1dGxvbmcJCQlfX3B1dGxvbmcKKyNkZWZpbmUgcHV0c2hvcnQJCV9fcHV0c2hvcnQKKyNkZWZpbmUgcmVzX2Rub2sJCV9fcmVzX2Rub2sKKyNkZWZpbmUgcmVzX2hub2sJCV9fcmVzX2hub2sKKyNkZWZpbmUgcmVzX2hvc3RhbGlhcwkJX19yZXNfaG9zdGFsaWFzCisjZGVmaW5lIHJlc19tYWlsb2sJCV9fcmVzX21haWxvaworI2RlZmluZSByZXNfbmFtZWlucXVlcnkJCV9fcmVzX25hbWVpbnF1ZXJ5CisjZGVmaW5lIHJlc19uY2xvc2UJCV9fcmVzX25jbG9zZQorI2RlZmluZSByZXNfbmluaXQJCV9fcmVzX25pbml0CisjZGVmaW5lIHJlc19ubWtxdWVyeQkJX19yZXNfbm1rcXVlcnkKKyNkZWZpbmUgcmVzX25wcXVlcnkJCV9fcmVzX25wcXVlcnkKKyNkZWZpbmUgcmVzX25xdWVyeQkJX19yZXNfbnF1ZXJ5CisjZGVmaW5lIHJlc19ucXVlcnlkb21haW4JX19yZXNfbnF1ZXJ5ZG9tYWluCisjZGVmaW5lIHJlc19uc2VhcmNoCQlfX3Jlc19uc2VhcmNoCisjZGVmaW5lIHJlc19uc2VuZAkJX19yZXNfbnNlbmQKKyNkZWZpbmUgcmVzX25pc291cnNlcnZlcglfX3Jlc19uaXNvdXJzZXJ2ZXIKKyNkZWZpbmUgcmVzX293bm9rCQlfX3Jlc19vd25vaworI2RlZmluZSByZXNfcXVlcmllc21hdGNoCV9fcmVzX3F1ZXJpZXNtYXRjaAorI2RlZmluZSByZXNfcmFuZG9taWQJCV9fcmVzX3JhbmRvbWlkCisjZGVmaW5lIHN5bV9udG9wCQlfX3N5bV9udG9wCisjZGVmaW5lIHN5bV9udG9zCQlfX3N5bV9udG9zCisjZGVmaW5lIHN5bV9zdG9uCQlfX3N5bV9zdG9uCitfX0JFR0lOX0RFQ0xTCitpbnQJCXJlc19obm9rIChjb25zdCBjaGFyICopIF9fVEhST1c7CitpbnQJCXJlc19vd25vayAoY29uc3QgY2hhciAqKSBfX1RIUk9XOworaW50CQlyZXNfbWFpbG9rIChjb25zdCBjaGFyICopIF9fVEhST1c7CitpbnQJCXJlc19kbm9rIChjb25zdCBjaGFyICopIF9fVEhST1c7CitpbnQJCXN5bV9zdG9uIChjb25zdCBzdHJ1Y3QgcmVzX3N5bSAqLCBjb25zdCBjaGFyICosIGludCAqKSBfX1RIUk9XOworY29uc3QgY2hhciAqCXN5bV9udG9zIChjb25zdCBzdHJ1Y3QgcmVzX3N5bSAqLCBpbnQsIGludCAqKSBfX1RIUk9XOworY29uc3QgY2hhciAqCXN5bV9udG9wIChjb25zdCBzdHJ1Y3QgcmVzX3N5bSAqLCBpbnQsIGludCAqKSBfX1RIUk9XOworaW50CQliNjRfbnRvcCAodV9jaGFyIGNvbnN0ICosIHNpemVfdCwgY2hhciAqLCBzaXplX3QpIF9fVEhST1c7CitpbnQJCWI2NF9wdG9uIChjaGFyIGNvbnN0ICosIHVfY2hhciAqLCBzaXplX3QpIF9fVEhST1c7CitpbnQJCWxvY19hdG9uIChjb25zdCBjaGFyICphc2NpaSwgdV9jaGFyICpiaW5hcnkpIF9fVEhST1c7Citjb25zdCBjaGFyICoJbG9jX250b2EgKGNvbnN0IHVfY2hhciAqYmluYXJ5LCBjaGFyICphc2NpaSkgX19USFJPVzsKK2ludAkJZG5fc2tpcG5hbWUgKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKikgX19USFJPVzsKK3ZvaWQJCXB1dGxvbmcgKHVfaW50MzJfdCwgdV9jaGFyICopIF9fVEhST1c7Cit2b2lkCQlwdXRzaG9ydCAodV9pbnQxNl90LCB1X2NoYXIgKikgX19USFJPVzsKK2NvbnN0IGNoYXIgKglwX2NsYXNzIChpbnQpIF9fVEhST1c7Citjb25zdCBjaGFyICoJcF90aW1lICh1X2ludDMyX3QpIF9fVEhST1c7Citjb25zdCBjaGFyICoJcF90eXBlIChpbnQpIF9fVEhST1c7Citjb25zdCBjaGFyICoJcF9yY29kZSAoaW50KSBfX1RIUk9XOworY29uc3QgdV9jaGFyICoJcF9jZG5uYW1lIChjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosIGludCwgRklMRSAqKQorICAgICBfX1RIUk9XOworY29uc3QgdV9jaGFyICoJcF9jZG5hbWUgKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwgRklMRSAqKSBfX1RIUk9XOworY29uc3QgdV9jaGFyICoJcF9mcW5uYW1lIChjb25zdCB1X2NoYXIgKmNwLCBjb25zdCB1X2NoYXIgKm1zZywKKwkJCSAgIGludCwgY2hhciAqLCBpbnQpIF9fVEhST1c7Citjb25zdCB1X2NoYXIgKglwX2ZxbmFtZSAoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLCBGSUxFICopIF9fVEhST1c7Citjb25zdCBjaGFyICoJcF9vcHRpb24gKHVfbG9uZyBvcHRpb24pIF9fVEhST1c7CitjaGFyICoJCXBfc2Vjc3RvZGF0ZSAodV9sb25nKSBfX1RIUk9XOworaW50CQlkbl9jb3VudF9sYWJlbHMgKGNvbnN0IGNoYXIgKikgX19USFJPVzsKK2ludAkJZG5fY29tcCAoY29uc3QgY2hhciAqLCB1X2NoYXIgKiwgaW50LCB1X2NoYXIgKiosIHVfY2hhciAqKikKKyAgICAgX19USFJPVzsKK2ludAkJZG5fZXhwYW5kIChjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLAorCQkJICAgY2hhciAqLCBpbnQpIF9fVEhST1c7Cit1X2ludAkJcmVzX3JhbmRvbWlkICh2b2lkKSBfX1RIUk9XOworaW50CQlyZXNfbmFtZWlucXVlcnkgKGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsCisJCQkJIGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKikgX19USFJPVzsKK2ludAkJcmVzX3F1ZXJpZXNtYXRjaCAoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLAorCQkJCSAgY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqKSBfX1RIUk9XOworY29uc3QgY2hhciAqCXBfc2VjdGlvbiAoaW50IHNlY3Rpb24sIGludCBvcGNvZGUpIF9fVEhST1c7CisvKiBUaGluZ3MgaW52b2x2aW5nIGEgcmVzb2x2ZXIgY29udGV4dC4gKi8KK2ludAkJcmVzX25pbml0IChyZXNfc3RhdGUpIF9fVEhST1c7CitpbnQJCXJlc19uaXNvdXJzZXJ2ZXIgKGNvbnN0IHJlc19zdGF0ZSwKKwkJCQkgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBfX1RIUk9XOwordm9pZAkJZnBfcmVzc3RhdCAoY29uc3QgcmVzX3N0YXRlLCBGSUxFICopIF9fVEhST1c7Cit2b2lkCQlyZXNfbnBxdWVyeSAoY29uc3QgcmVzX3N0YXRlLCBjb25zdCB1X2NoYXIgKiwgaW50LCBGSUxFICopCisgICAgIF9fVEhST1c7Citjb25zdCBjaGFyICoJcmVzX2hvc3RhbGlhcyAoY29uc3QgcmVzX3N0YXRlLCBjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KQorICAgICBfX1RIUk9XOworaW50CQlyZXNfbnF1ZXJ5IChyZXNfc3RhdGUsIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIHVfY2hhciAqLCBpbnQpCisgICAgIF9fVEhST1c7CitpbnQJCXJlc19uc2VhcmNoIChyZXNfc3RhdGUsIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIHVfY2hhciAqLCBpbnQpCisgICAgIF9fVEhST1c7CitpbnQJCXJlc19ucXVlcnlkb21haW4gKHJlc19zdGF0ZSwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCwKKwkJCQkgIGludCwgdV9jaGFyICosIGludCkgX19USFJPVzsKK2ludAkJcmVzX25ta3F1ZXJ5IChyZXNfc3RhdGUsIGludCwgY29uc3QgY2hhciAqLCBpbnQsIGludCwKKwkJCSAgICAgIGNvbnN0IHVfY2hhciAqLCBpbnQsIGNvbnN0IHVfY2hhciAqLCB1X2NoYXIgKiwKKwkJCSAgICAgIGludCkgX19USFJPVzsKK2ludAkJcmVzX25zZW5kIChyZXNfc3RhdGUsIGNvbnN0IHVfY2hhciAqLCBpbnQsIHVfY2hhciAqLCBpbnQpCisgICAgIF9fVEhST1c7Cit2b2lkCQlyZXNfbmNsb3NlIChyZXNfc3RhdGUpIF9fVEhST1c7CitfX0VORF9ERUNMUworI2VuZGlmCisKKyNlbmRpZiAvKiAhX1JFU09MVl9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwYy9hdXRoLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjL2F1dGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzkzMWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwYy9hdXRoLmgKQEAgLTAsMCArMSwyMTMgQEAKKy8qIEAoIylhdXRoLmgJMi4zIDg4LzA4LzA3IDQuMCBSUENTUkM7IGZyb20gMS4xNyA4OC8wMi8wOCBTTUkgKi8KKy8qCisgKiBTdW4gUlBDIGlzIGEgcHJvZHVjdCBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGFuZCBpcyBwcm92aWRlZCBmb3IKKyAqIHVucmVzdHJpY3RlZCB1c2UgcHJvdmlkZWQgdGhhdCB0aGlzIGxlZ2VuZCBpcyBpbmNsdWRlZCBvbiBhbGwgdGFwZQorICogbWVkaWEgYW5kIGFzIGEgcGFydCBvZiB0aGUgc29mdHdhcmUgcHJvZ3JhbSBpbiB3aG9sZSBvciBwYXJ0LiAgVXNlcnMKKyAqIG1heSBjb3B5IG9yIG1vZGlmeSBTdW4gUlBDIHdpdGhvdXQgY2hhcmdlLCBidXQgYXJlIG5vdCBhdXRob3JpemVkCisgKiB0byBsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgaXQgdG8gYW55b25lIGVsc2UgZXhjZXB0IGFzIHBhcnQgb2YgYSBwcm9kdWN0IG9yCisgKiBwcm9ncmFtIGRldmVsb3BlZCBieSB0aGUgdXNlci4KKyAqCisgKiBTVU4gUlBDIElTIFBST1ZJREVEIEFTIElTIFdJVEggTk8gV0FSUkFOVElFUyBPRiBBTlkgS0lORCBJTkNMVURJTkcgVEhFCisgKiBXQVJSQU5USUVTIE9GIERFU0lHTiwgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UsIE9SIEFSSVNJTkcgRlJPTSBBIENPVVJTRSBPRiBERUFMSU5HLCBVU0FHRSBPUiBUUkFERSBQUkFDVElDRS4KKyAqCisgKiBTdW4gUlBDIGlzIHByb3ZpZGVkIHdpdGggbm8gc3VwcG9ydCBhbmQgd2l0aG91dCBhbnkgb2JsaWdhdGlvbiBvbiB0aGUKKyAqIHBhcnQgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiB0byBhc3Npc3QgaW4gaXRzIHVzZSwgY29ycmVjdGlvbiwKKyAqIG1vZGlmaWNhdGlvbiBvciBlbmhhbmNlbWVudC4KKyAqCisgKiBTVU4gTUlDUk9TWVNURU1TLCBJTkMuIFNIQUxMIEhBVkUgTk8gTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUKKyAqIElORlJJTkdFTUVOVCBPRiBDT1BZUklHSFRTLCBUUkFERSBTRUNSRVRTIE9SIEFOWSBQQVRFTlRTIEJZIFNVTiBSUEMKKyAqIE9SIEFOWSBQQVJUIFRIRVJFT0YuCisgKgorICogSW4gbm8gZXZlbnQgd2lsbCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJlIGxpYWJsZSBmb3IgYW55IGxvc3QgcmV2ZW51ZQorICogb3IgcHJvZml0cyBvciBvdGhlciBzcGVjaWFsLCBpbmRpcmVjdCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBldmVuIGlmCisgKiBTdW4gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorICoKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIDI1NTAgR2FyY2lhIEF2ZW51ZQorICogTW91bnRhaW4gVmlldywgQ2FsaWZvcm5pYSAgOTQwNDMKKyAqLworCisvKgorICogYXV0aC5oLCBBdXRoZW50aWNhdGlvbiBpbnRlcmZhY2UuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTg0LCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKgorICogVGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgY29tcGxldGVseSBvcGFxdWUgdG8gdGhlIGNsaWVudC4gIFRoZSBjbGllbnQKKyAqIGlzIHJlcXVpcmVkIHRvIHBhc3MgYSBBVVRIICogdG8gcm91dGluZXMgdGhhdCBjcmVhdGUgcnBjCisgKiAic2Vzc2lvbnMiLgorICovCisKKyNpZm5kZWYgX1JQQ19BVVRIX0gKKworI2RlZmluZSBfUlBDX0FVVEhfSAkxCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxycGMveGRyLmg+CisKK19fQkVHSU5fREVDTFMKKworI2RlZmluZSBNQVhfQVVUSF9CWVRFUwk0MDAKKyNkZWZpbmUgTUFYTkVUTkFNRUxFTgkyNTUJLyogbWF4aW11bSBsZW5ndGggb2YgbmV0d29yayB1c2VyJ3MgbmFtZSAqLworCisvKgorICogU3RhdHVzIHJldHVybmVkIGZyb20gYXV0aGVudGljYXRpb24gY2hlY2sKKyAqLworZW51bSBhdXRoX3N0YXQgeworCUFVVEhfT0s9MCwKKwkvKgorCSAqIGZhaWxlZCBhdCByZW1vdGUgZW5kCisJICovCisJQVVUSF9CQURDUkVEPTEsCQkJLyogYm9ndXMgY3JlZGVudGlhbHMgKHNlYWwgYnJva2VuKSAqLworCUFVVEhfUkVKRUNURURDUkVEPTIsCQkvKiBjbGllbnQgc2hvdWxkIGJlZ2luIG5ldyBzZXNzaW9uICovCisJQVVUSF9CQURWRVJGPTMsCQkJLyogYm9ndXMgdmVyaWZpZXIgKHNlYWwgYnJva2VuKSAqLworCUFVVEhfUkVKRUNURURWRVJGPTQsCQkvKiB2ZXJpZmllciBleHBpcmVkIG9yIHdhcyByZXBsYXllZCAqLworCUFVVEhfVE9PV0VBSz01LAkJCS8qIHJlamVjdGVkIGR1ZSB0byBzZWN1cml0eSByZWFzb25zICovCisJLyoKKwkgKiBmYWlsZWQgbG9jYWxseQorCSovCisJQVVUSF9JTlZBTElEUkVTUD02LAkJLyogYm9ndXMgcmVzcG9uc2UgdmVyaWZpZXIgKi8KKwlBVVRIX0ZBSUxFRD03CQkJLyogc29tZSB1bmtub3duIHJlYXNvbiAqLworfTsKKwordW5pb24gZGVzX2Jsb2NrIHsKKwlzdHJ1Y3QgeworCQl1X2ludDMyX3QgaGlnaDsKKwkJdV9pbnQzMl90IGxvdzsKKwl9IGtleTsKKwljaGFyIGNbOF07Cit9OwordHlwZWRlZiB1bmlvbiBkZXNfYmxvY2sgZGVzX2Jsb2NrOworZXh0ZXJuIGJvb2xfdCB4ZHJfZGVzX2Jsb2NrIChYRFIgKl9feGRycywgZGVzX2Jsb2NrICpfX2Jsa3ApIF9fVEhST1c7CisKKy8qCisgKiBBdXRoZW50aWNhdGlvbiBpbmZvLiAgT3BhcXVlIHRvIGNsaWVudC4KKyAqLworc3RydWN0IG9wYXF1ZV9hdXRoIHsKKwllbnVtX3QJb2FfZmxhdm9yOwkJLyogZmxhdm9yIG9mIGF1dGggKi8KKwljYWRkcl90CW9hX2Jhc2U7CQkvKiBhZGRyZXNzIG9mIG1vcmUgYXV0aCBzdHVmZiAqLworCXVfaW50CW9hX2xlbmd0aDsJCS8qIG5vdCB0byBleGNlZWQgTUFYX0FVVEhfQllURVMgKi8KK307CisKKy8qCisgKiBBdXRoIGhhbmRsZSwgaW50ZXJmYWNlIHRvIGNsaWVudCBzaWRlIGF1dGhlbnRpY2F0b3JzLgorICovCit0eXBlZGVmIHN0cnVjdCBBVVRIIEFVVEg7CitzdHJ1Y3QgQVVUSCB7CisgIHN0cnVjdCBvcGFxdWVfYXV0aCBhaF9jcmVkOworICBzdHJ1Y3Qgb3BhcXVlX2F1dGggYWhfdmVyZjsKKyAgdW5pb24gZGVzX2Jsb2NrIGFoX2tleTsKKyAgc3RydWN0IGF1dGhfb3BzIHsKKyAgICB2b2lkICgqYWhfbmV4dHZlcmYpIChBVVRIICopOworICAgIGludCAgKCphaF9tYXJzaGFsKSAoQVVUSCAqLCBYRFIgKik7CQkvKiBuZXh0dmVyZiAmIHNlcmlhbGl6ZSAqLworICAgIGludCAgKCphaF92YWxpZGF0ZSkgKEFVVEggKiwgc3RydWN0IG9wYXF1ZV9hdXRoICopOworCQkJCQkJLyogdmFsaWRhdGUgdmVyaWZpZXIgKi8KKyAgICBpbnQgICgqYWhfcmVmcmVzaCkgKEFVVEggKik7CQkvKiByZWZyZXNoIGNyZWRlbnRpYWxzICovCisgICAgdm9pZCAoKmFoX2Rlc3Ryb3kpIChBVVRIICopOyAJICAgIAkvKiBkZXN0cm95IHRoaXMgc3RydWN0dXJlICovCisgIH0gKmFoX29wczsKKyAgY2FkZHJfdCBhaF9wcml2YXRlOworfTsKKworCisvKgorICogQXV0aGVudGljYXRpb24gb3BzLgorICogVGhlIG9wcyBhbmQgdGhlIGF1dGggaGFuZGxlIHByb3ZpZGUgdGhlIGludGVyZmFjZSB0byB0aGUgYXV0aGVudGljYXRvcnMuCisgKgorICogQVVUSAkqYXV0aDsKKyAqIFhEUgkqeGRyczsKKyAqIHN0cnVjdCBvcGFxdWVfYXV0aCB2ZXJmOworICovCisjZGVmaW5lIEFVVEhfTkVYVFZFUkYoYXV0aCkJCVwKKwkJKCgqKChhdXRoKS0+YWhfb3BzLT5haF9uZXh0dmVyZikpKGF1dGgpKQorI2RlZmluZSBhdXRoX25leHR2ZXJmKGF1dGgpCQlcCisJCSgoKigoYXV0aCktPmFoX29wcy0+YWhfbmV4dHZlcmYpKShhdXRoKSkKKworI2RlZmluZSBBVVRIX01BUlNIQUxMKGF1dGgsIHhkcnMpCVwKKwkJKCgqKChhdXRoKS0+YWhfb3BzLT5haF9tYXJzaGFsKSkoYXV0aCwgeGRycykpCisjZGVmaW5lIGF1dGhfbWFyc2hhbGwoYXV0aCwgeGRycykJXAorCQkoKCooKGF1dGgpLT5haF9vcHMtPmFoX21hcnNoYWwpKShhdXRoLCB4ZHJzKSkKKworI2RlZmluZSBBVVRIX1ZBTElEQVRFKGF1dGgsIHZlcmZwKQlcCisJCSgoKigoYXV0aCktPmFoX29wcy0+YWhfdmFsaWRhdGUpKSgoYXV0aCksIHZlcmZwKSkKKyNkZWZpbmUgYXV0aF92YWxpZGF0ZShhdXRoLCB2ZXJmcCkJXAorCQkoKCooKGF1dGgpLT5haF9vcHMtPmFoX3ZhbGlkYXRlKSkoKGF1dGgpLCB2ZXJmcCkpCisKKyNkZWZpbmUgQVVUSF9SRUZSRVNIKGF1dGgpCQlcCisJCSgoKigoYXV0aCktPmFoX29wcy0+YWhfcmVmcmVzaCkpKGF1dGgpKQorI2RlZmluZSBhdXRoX3JlZnJlc2goYXV0aCkJCVwKKwkJKCgqKChhdXRoKS0+YWhfb3BzLT5haF9yZWZyZXNoKSkoYXV0aCkpCisKKyNkZWZpbmUgQVVUSF9ERVNUUk9ZKGF1dGgpCQlcCisJCSgoKigoYXV0aCktPmFoX29wcy0+YWhfZGVzdHJveSkpKGF1dGgpKQorI2RlZmluZSBhdXRoX2Rlc3Ryb3koYXV0aCkJCVwKKwkJKCgqKChhdXRoKS0+YWhfb3BzLT5haF9kZXN0cm95KSkoYXV0aCkpCisKKworZXh0ZXJuIHN0cnVjdCBvcGFxdWVfYXV0aCBfbnVsbF9hdXRoOworCisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIHZhcmlvdXMgaW1wbGVtZW50YXRpb25zIG9mIGNsaWVudCBzaWRlIGF1dGhlbnRpY2F0b3JzLgorICovCisKKy8qCisgKiBVbml4IHN0eWxlIGF1dGhlbnRpY2F0aW9uCisgKiBBVVRIICphdXRodW5peF9jcmVhdGUobWFjaG5hbWUsIHVpZCwgZ2lkLCBsZW4sIGF1cF9naWRzKQorICoJY2hhciAqbWFjaG5hbWU7CisgKglpbnQgdWlkOworICoJaW50IGdpZDsKKyAqCWludCBsZW47CisgKglpbnQgKmF1cF9naWRzOworICovCitleHRlcm4gQVVUSCAqYXV0aHVuaXhfY3JlYXRlIChjaGFyICpfX21hY2huYW1lLCBfX3VpZF90IF9fdWlkLCBfX2dpZF90IF9fZ2lkLAorCQkJICAgICAgaW50IF9fbGVuLCBfX2dpZF90ICpfX2F1cF9naWRzKTsKK2V4dGVybiBBVVRIICphdXRodW5peF9jcmVhdGVfZGVmYXVsdCAodm9pZCk7CitleHRlcm4gQVVUSCAqYXV0aG5vbmVfY3JlYXRlICh2b2lkKSBfX1RIUk9XOworZXh0ZXJuIEFVVEggKmF1dGhkZXNfY3JlYXRlIChjb25zdCBjaGFyICpfX3NlcnZlcm5hbWUsIHVfaW50IF9fd2luZG93LAorCQkJICAgICBzdHJ1Y3Qgc29ja2FkZHIgKl9fc3luY2FkZHIsIGRlc19ibG9jayAqX19ja2V5KQorICAgICBfX1RIUk9XOworZXh0ZXJuIEFVVEggKmF1dGhkZXNfcGtfY3JlYXRlIChjb25zdCBjaGFyICosIG5ldG9iaiAqLCB1X2ludCwKKwkJCQlzdHJ1Y3Qgc29ja2FkZHIgKiwgZGVzX2Jsb2NrICopIF9fVEhST1c7CisKKworI2RlZmluZSBBVVRIX05PTkUJMAkJLyogbm8gYXV0aGVudGljYXRpb24gKi8KKyNkZWZpbmUJQVVUSF9OVUxMCTAJCS8qIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUJQVVUSF9TWVMJMQkJLyogdW5peCBzdHlsZSAodWlkLCBnaWRzKSAqLworI2RlZmluZQlBVVRIX1VOSVgJQVVUSF9TWVMKKyNkZWZpbmUJQVVUSF9TSE9SVAkyCQkvKiBzaG9ydCBoYW5kIHVuaXggc3R5bGUgKi8KKyNkZWZpbmUgQVVUSF9ERVMJMwkJLyogZGVzIHN0eWxlIChlbmNyeXB0ZWQgdGltZXN0YW1wcykgKi8KKyNkZWZpbmUgQVVUSF9ESAkJQVVUSF9ERVMJLyogRGlmZmllLUhlbGxtYW4gKHRoaXMgaXMgREVTKSAqLworI2RlZmluZSBBVVRIX0tFUkIgICAgICAgNCAgICAgICAgICAgICAgIC8qIGtlcmJlcm9zIHN0eWxlICovCisKKy8qCisgKiAgTmV0bmFtZSBtYW5pcHVsYXRpbmcgZnVuY3Rpb25zCisgKgorICovCitleHRlcm4gaW50IGdldG5ldG5hbWUgKGNoYXIgKikgX19USFJPVzsKK2V4dGVybiBpbnQgaG9zdDJuZXRuYW1lIChjaGFyICosIF9fY29uc3QgY2hhciAqLCBfX2NvbnN0IGNoYXIgKikgX19USFJPVzsKK2V4dGVybiBpbnQgdXNlcjJuZXRuYW1lIChjaGFyICosIF9fY29uc3QgdWlkX3QsIF9fY29uc3QgY2hhciAqKSBfX1RIUk9XOworZXh0ZXJuIGludCBuZXRuYW1lMnVzZXIgKF9fY29uc3QgY2hhciAqLCB1aWRfdCAqLCBnaWRfdCAqLCBpbnQgKiwgZ2lkX3QgKikKKyAgICAgX19USFJPVzsKK2V4dGVybiBpbnQgbmV0bmFtZTJob3N0IChfX2NvbnN0IGNoYXIgKiwgY2hhciAqLCBfX2NvbnN0IGludCkgX19USFJPVzsKKworLyoKKyAqCisgKiBUaGVzZSByb3V0aW5lcyBpbnRlcmZhY2UgdG8gdGhlIGtleXNlcnYgZGFlbW9uCisgKgorICovCitleHRlcm4gaW50IGtleV9kZWNyeXB0c2Vzc2lvbiAoY2hhciAqLCBkZXNfYmxvY2sgKik7CitleHRlcm4gaW50IGtleV9kZWNyeXB0c2Vzc2lvbl9wayAoY2hhciAqLCBuZXRvYmogKiwgZGVzX2Jsb2NrICopOworZXh0ZXJuIGludCBrZXlfZW5jcnlwdHNlc3Npb24gKGNoYXIgKiwgZGVzX2Jsb2NrICopOworZXh0ZXJuIGludCBrZXlfZW5jcnlwdHNlc3Npb25fcGsgKGNoYXIgKiwgbmV0b2JqICosIGRlc19ibG9jayAqKTsKK2V4dGVybiBpbnQga2V5X2dlbmRlcyAoZGVzX2Jsb2NrICopOworZXh0ZXJuIGludCBrZXlfc2V0c2VjcmV0IChjaGFyICopOworZXh0ZXJuIGludCBrZXlfc2VjcmV0a2V5X2lzX3NldCAodm9pZCk7CitleHRlcm4gaW50IGtleV9nZXRfY29udiAoY2hhciAqLCBkZXNfYmxvY2sgKik7CisKKy8qCisgKiBYRFIgYW4gb3BhcXVlIGF1dGhlbnRpY2F0aW9uIHN0cnVjdC4KKyAqLworZXh0ZXJuIGJvb2xfdCB4ZHJfb3BhcXVlX2F1dGggKFhEUiAqLCBzdHJ1Y3Qgb3BhcXVlX2F1dGggKikgX19USFJPVzsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIHJwYy9hdXRoLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGMvYXV0aF9kZXMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGMvYXV0aF9kZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmFkYTg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwYy9hdXRoX2Rlcy5oCkBAIC0wLDAgKzEsMTEyIEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1JQQ19BVVRIX0RFU19ICisjZGVmaW5lIF9SUENfQVVUSF9ERVNfSAkxCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxycGMvYXV0aC5oPgorCitfX0JFR0lOX0RFQ0xTCisKKy8qIFRoZXJlIGFyZSB0d28ga2luZHMgb2YgIm5hbWVzIjogZnVsbG5hbWVzIGFuZCBuaWNrbmFtZXMgKi8KK2VudW0gYXV0aGRlc19uYW1la2luZAorICB7CisgICAgQUROX0ZVTExOQU1FLAorICAgIEFETl9OSUNLTkFNRQorICB9OworCisvKiBBIGZ1bGxuYW1lIGNvbnRhaW5zIHRoZSBuZXR3b3JrIG5hbWUgb2YgdGhlIGNsaWVudCwKKyAgIGEgY29udmVyc2F0aW9uIGtleSBhbmQgdGhlIHdpbmRvdyAqLworc3RydWN0IGF1dGhkZXNfZnVsbG5hbWUKKyAgeworICAgIGNoYXIgKm5hbWU7CQkvKiBuZXR3b3JrIG5hbWUgb2YgY2xpZW50LCB1cCB0byBNQVhORVROQU1FTEVOICovCisgICAgZGVzX2Jsb2NrIGtleTsJLyogY29udmVyc2F0aW9uIGtleSAqLworICAgIHVpbnQzMl90IHdpbmRvdzsJLyogYXNzb2NpYXRlZCB3aW5kb3cgKi8KKyAgfTsKKworLyogQSBjcmVkZW50aWFsICovCitzdHJ1Y3QgYXV0aGRlc19jcmVkCisgIHsKKyAgICBlbnVtIGF1dGhkZXNfbmFtZWtpbmQgYWRjX25hbWVraW5kOworICAgIHN0cnVjdCBhdXRoZGVzX2Z1bGxuYW1lIGFkY19mdWxsbmFtZTsKKyAgICB1aW50MzJfdCBhZGNfbmlja25hbWU7CisgIH07CisKKy8qIEEgdGltZXZhbCByZXBsYWNlbWVudCBmb3IgITMyYml0IHBsYXRmb3JtcyAqLworc3RydWN0IHJwY190aW1ldmFsCisgIHsKKyAgICB1aW50MzJfdCB0dl9zZWM7ICAgICAgICAgICAgLyogU2Vjb25kcy4gICovCisgICAgdWludDMyX3QgdHZfdXNlYzsgICAgICAgICAgIC8qIE1pY3Jvc2Vjb25kcy4gICovCisgIH07CisKKy8qIEEgZGVzIGF1dGhlbnRpY2F0aW9uIHZlcmlmaWVyICovCitzdHJ1Y3QgYXV0aGRlc192ZXJmCisgIHsKKyAgICB1bmlvbgorICAgICAgeworCXN0cnVjdCBycGNfdGltZXZhbCBhZHZfY3RpbWU7CS8qIGNsZWFyIHRpbWUgKi8KKwlkZXNfYmxvY2sgYWR2X3h0aW1lOwkJLyogY3J5cHQgdGltZSAqLworICAgICAgfQorICAgIGFkdl90aW1lX3U7CisgICAgdWludDMyX3QgYWR2X2ludF91OworICB9OworCisvKiBkZXMgYXV0aGVudGljYXRpb24gdmVyaWZpZXI6IGNsaWVudCB2YXJpZXR5CisKKyAgIGFkdl90aW1lc3RhbXAgaXMgdGhlIGN1cnJlbnQgdGltZS4KKyAgIGFkdl93aW52ZXJmIGlzIHRoZSBjcmVkZW50aWFsIHdpbmRvdyArIDEuCisgICBCb3RoIGFyZSBlbmNyeXB0ZWQgdXNpbmcgdGhlIGNvbnZlcnNhdGlvbiBrZXkuICovCisjZGVmaW5lIGFkdl90aW1lc3RhbXAgIGFkdl90aW1lX3UuYWR2X2N0aW1lCisjZGVmaW5lIGFkdl94dGltZXN0YW1wIGFkdl90aW1lX3UuYWR2X3h0aW1lCisjZGVmaW5lIGFkdl93aW52ZXJmICAgIGFkdl9pbnRfdQorCisvKiBkZXMgYXV0aGVudGljYXRpb24gdmVyaWZpZXI6IHNlcnZlciB2YXJpZXR5CisKKyAgIGFkdl90aW1ldmVyZiBpcyB0aGUgY2xpZW50J3MgdGltZXN0YW1wICsgY2xpZW50J3Mgd2luZG93CisgICBhZHZfbmlja25hbWUgaXMgdGhlIHNlcnZlcidzIG5pY2tuYW1lIGZvciB0aGUgY2xpZW50LgorICAgYWR2X3RpbWV2ZXJmIGlzIGVuY3J5cHRlZCB1c2luZyB0aGUgY29udmVyc2F0aW9uIGtleS4gKi8KKyNkZWZpbmUgYWR2X3RpbWV2ZXJmICAgYWR2X3RpbWVfdS5hZHZfY3RpbWUKKyNkZWZpbmUgYWR2X3h0aW1ldmVyZiAgYWR2X3RpbWVfdS5hZHZfeHRpbWUKKyNkZWZpbmUgYWR2X25pY2tuYW1lICAgYWR2X2ludF91CisKKy8qIE1hcCBhIGRlcyBjcmVkZW50aWFsIGludG8gYSB1bml4IGNyZWQuICovCitleHRlcm4gaW50IGF1dGhkZXNfZ2V0dWNyZWQgKF9fY29uc3Qgc3RydWN0IGF1dGhkZXNfY3JlZCAqIF9fYWRjLAorCQkJICAgICB1aWRfdCAqIF9fdWlkLCBnaWRfdCAqIF9fZ2lkLAorCQkJICAgICBzaG9ydCAqX19ncm91cGxlbiwgZ2lkX3QgKiBfX2dyb3VwcykgX19USFJPVzsKKworLyogR2V0IHRoZSBwdWJsaWMga2V5IGZvciBOQU1FIGFuZCBwbGFjZSBpdCBpbiBLRVkuICBOQU1FIGNhbiBvbmx5IGJlCisgICB1cCB0byBNQVhORVROQU1FTEVOIGJ5dGVzIGxvbmcgYW5kIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgS0VZIHNob3VsZAorICAgaGF2ZSBIRVhLRVlCWVRFUyArIDEgYnl0ZXMgbG9uZyB0byBmaXQgYWxsIGNoYXJhY3RlcnMgZnJvbSB0aGUga2V5LiAgKi8KK2V4dGVybiBpbnQgZ2V0cHVibGlja2V5IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgY2hhciAqX19rZXkpIF9fVEhST1c7CisKKy8qIEdldCB0aGUgc2VjcmV0IGtleSBmb3IgTkFNRSBhbmQgcGxhY2UgaXQgaW4gS0VZLiAgUEFTU1dEIGlzIHVzZWQgdG8KKyAgIGRlY3J5cHQgdGhlIGVuY3J5cHRlZCBrZXkgc3RvcmVkIGluIHRoZSBkYXRhYmFzZS4gIE5BTUUgY2FuIG9ubHkgYmUKKyAgIHVwIHRvIE1BWE5FVE5BTUVMRU4gYnl0ZXMgbG9uZyBhbmQgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBLRVkKKyAgIHNob3VsZCBoYXZlIEhFWEtFWUJZVEVTICsgMSBieXRlcyBsb25nIHRvIGZpdCBhbGwgY2hhcmFjdGVycyBmcm9tCisgICB0aGUga2V5LiAgKi8KK2V4dGVybiBpbnQgZ2V0c2VjcmV0a2V5IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgY2hhciAqX19rZXksCisJCQkgX19jb25zdCBjaGFyICpfX3Bhc3N3ZCkgX19USFJPVzsKKworZXh0ZXJuIGludCBydGltZSAoc3RydWN0IHNvY2thZGRyX2luICpfX2FkZHJwLCBzdHJ1Y3QgcnBjX3RpbWV2YWwgKl9fdGltZXAsCisJCSAgc3RydWN0IHJwY190aW1ldmFsICpfX3RpbWVvdXQpIF9fVEhST1c7CisKK19fRU5EX0RFQ0xTCisKKworI2VuZGlmIC8qIHJwYy9hdXRoX2Rlcy5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjL2F1dGhfdW5peC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwYy9hdXRoX3VuaXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjQ2NjFkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwYy9hdXRoX3VuaXguaApAQCAtMCwwICsxLDkwIEBACisvKiBAKCMpYXV0aF91bml4LmgJMi4yIDg4LzA3LzI5IDQuMCBSUENTUkM7IGZyb20gMS44IDg4LzAyLzA4IFNNSSAqLworLyoKKyAqIFN1biBSUEMgaXMgYSBwcm9kdWN0IG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYW5kIGlzIHByb3ZpZGVkIGZvcgorICogdW5yZXN0cmljdGVkIHVzZSBwcm92aWRlZCB0aGF0IHRoaXMgbGVnZW5kIGlzIGluY2x1ZGVkIG9uIGFsbCB0YXBlCisgKiBtZWRpYSBhbmQgYXMgYSBwYXJ0IG9mIHRoZSBzb2Z0d2FyZSBwcm9ncmFtIGluIHdob2xlIG9yIHBhcnQuICBVc2VycworICogbWF5IGNvcHkgb3IgbW9kaWZ5IFN1biBSUEMgd2l0aG91dCBjaGFyZ2UsIGJ1dCBhcmUgbm90IGF1dGhvcml6ZWQKKyAqIHRvIGxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBpdCB0byBhbnlvbmUgZWxzZSBleGNlcHQgYXMgcGFydCBvZiBhIHByb2R1Y3Qgb3IKKyAqIHByb2dyYW0gZGV2ZWxvcGVkIGJ5IHRoZSB1c2VyLgorICoKKyAqIFNVTiBSUEMgSVMgUFJPVklERUQgQVMgSVMgV0lUSCBOTyBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIElOQ0xVRElORyBUSEUKKyAqIFdBUlJBTlRJRVMgT0YgREVTSUdOLCBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSwgT1IgQVJJU0lORyBGUk9NIEEgQ09VUlNFIE9GIERFQUxJTkcsIFVTQUdFIE9SIFRSQURFIFBSQUNUSUNFLgorICoKKyAqIFN1biBSUEMgaXMgcHJvdmlkZWQgd2l0aCBubyBzdXBwb3J0IGFuZCB3aXRob3V0IGFueSBvYmxpZ2F0aW9uIG9uIHRoZQorICogcGFydCBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIHRvIGFzc2lzdCBpbiBpdHMgdXNlLCBjb3JyZWN0aW9uLAorICogbW9kaWZpY2F0aW9uIG9yIGVuaGFuY2VtZW50LgorICoKKyAqIFNVTiBNSUNST1NZU1RFTVMsIElOQy4gU0hBTEwgSEFWRSBOTyBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRQorICogSU5GUklOR0VNRU5UIE9GIENPUFlSSUdIVFMsIFRSQURFIFNFQ1JFVFMgT1IgQU5ZIFBBVEVOVFMgQlkgU1VOIFJQQworICogT1IgQU5ZIFBBUlQgVEhFUkVPRi4KKyAqCisgKiBJbiBubyBldmVudCB3aWxsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYmUgbGlhYmxlIGZvciBhbnkgbG9zdCByZXZlbnVlCisgKiBvciBwcm9maXRzIG9yIG90aGVyIHNwZWNpYWwsIGluZGlyZWN0IGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIGV2ZW4gaWYKKyAqIFN1biBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisgKgorICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogMjU1MCBHYXJjaWEgQXZlbnVlCisgKiBNb3VudGFpbiBWaWV3LCBDYWxpZm9ybmlhICA5NDA0MworICovCisvKiAgICAgIEAoIylhdXRoX3VuaXguaCAxLjUgODYvMDcvMTYgU01JICAgICAgKi8KKworLyoKKyAqIGF1dGhfdW5peC5oLCBQcm90b2NvbCBmb3IgVU5JWCBzdHlsZSBhdXRoZW50aWNhdGlvbiBwYXJhbWV0ZXJzIGZvciBSUEMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5ODQsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqLworCisvKgorICogVGhlIHN5c3RlbSBpcyB2ZXJ5IHdlYWsuICBUaGUgY2xpZW50IHVzZXMgbm8gZW5jcnlwdGlvbiBmb3IgIGl0CisgKiBjcmVkZW50aWFscyBhbmQgb25seSBzZW5kcyBudWxsIHZlcmlmaWVycy4gIFRoZSBzZXJ2ZXIgc2VuZHMgYmFja3MKKyAqIG51bGwgdmVyaWZpZXJzIG9yIG9wdGlvbmFsbHkgYSB2ZXJpZmllciB0aGF0IHN1Z2dlc3RzIGEgbmV3IHNob3J0IGhhbmQKKyAqIGZvciB0aGUgY3JlZGVudGlhbHMuCisgKi8KKworI2lmbmRlZiBfUlBDX0FVVEhfVU5JWF9ICisjZGVmaW5lIF9SUENfQVVUSF9VTklYX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxycGMvdHlwZXMuaD4KKyNpbmNsdWRlIDxycGMvYXV0aC5oPgorI2luY2x1ZGUgPHJwYy94ZHIuaD4KKworX19CRUdJTl9ERUNMUworCisvKiBUaGUgbWFjaGluZSBuYW1lIGlzIHBhcnQgb2YgYSBjcmVkZW50aWFsOyBpdCBtYXkgbm90IGV4Y2VlZCAyNTUgYnl0ZXMgKi8KKyNkZWZpbmUgTUFYX01BQ0hJTkVfTkFNRSAyNTUKKworLyogZ2lkcyBjb21wb3NlIHBhcnQgb2YgYSBjcmVkZW50aWFsOyB0aGVyZSBtYXkgbm90IGJlIG1vcmUgdGhhbiAxNiBvZiB0aGVtICovCisjZGVmaW5lIE5HUlBTIDE2CisKKy8qCisgKiBVbml4IHN0eWxlIGNyZWRlbnRpYWxzLgorICovCitzdHJ1Y3QgYXV0aHVuaXhfcGFybXMKKyAgeworICAgIHVfbG9uZyBhdXBfdGltZTsKKyAgICBjaGFyICphdXBfbWFjaG5hbWU7CisgICAgX191aWRfdCBhdXBfdWlkOworICAgIF9fZ2lkX3QgYXVwX2dpZDsKKyAgICB1X2ludCBhdXBfbGVuOworICAgIF9fZ2lkX3QgKmF1cF9naWRzOworICB9OworCitleHRlcm4gYm9vbF90IHhkcl9hdXRodW5peF9wYXJtcyAoWERSICpfX3hkcnMsIHN0cnVjdCBhdXRodW5peF9wYXJtcyAqX19wKQorICAgICBfX1RIUk9XOworCisvKgorICogSWYgYSByZXNwb25zZSB2ZXJpZmllciBoYXMgZmxhdm9yIEFVVEhfU0hPUlQsCisgKiB0aGVuIHRoZSBib2R5IG9mIHRoZSByZXNwb25zZSB2ZXJpZmllciBlbmNhcHN1bGF0ZXMgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU7CisgKiBhZ2FpbiBpdCBpcyBzZXJpYWxpemVkIGluIHRoZSBvYnZpb3VzIGZhc2hpb24uCisgKi8KK3N0cnVjdCBzaG9ydF9oYW5kX3ZlcmYKKyAgeworICAgIHN0cnVjdCBvcGFxdWVfYXV0aCBuZXdfY3JlZDsKKyAgfTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIHJwYy9hdXRoX3VuaXguaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwYy9jbG50LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjL2NsbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjI3MWM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwYy9jbG50LmgKQEAgLTAsMCArMSw0MjEgQEAKKy8qIEAoIyljbG50LmgJMi4xIDg4LzA3LzI5IDQuMCBSUENTUkM7IGZyb20gMS4zMSA4OC8wMi8wOCBTTUkqLworLyoKKyAqIFN1biBSUEMgaXMgYSBwcm9kdWN0IG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYW5kIGlzIHByb3ZpZGVkIGZvcgorICogdW5yZXN0cmljdGVkIHVzZSBwcm92aWRlZCB0aGF0IHRoaXMgbGVnZW5kIGlzIGluY2x1ZGVkIG9uIGFsbCB0YXBlCisgKiBtZWRpYSBhbmQgYXMgYSBwYXJ0IG9mIHRoZSBzb2Z0d2FyZSBwcm9ncmFtIGluIHdob2xlIG9yIHBhcnQuICBVc2VycworICogbWF5IGNvcHkgb3IgbW9kaWZ5IFN1biBSUEMgd2l0aG91dCBjaGFyZ2UsIGJ1dCBhcmUgbm90IGF1dGhvcml6ZWQKKyAqIHRvIGxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBpdCB0byBhbnlvbmUgZWxzZSBleGNlcHQgYXMgcGFydCBvZiBhIHByb2R1Y3Qgb3IKKyAqIHByb2dyYW0gZGV2ZWxvcGVkIGJ5IHRoZSB1c2VyLgorICoKKyAqIFNVTiBSUEMgSVMgUFJPVklERUQgQVMgSVMgV0lUSCBOTyBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIElOQ0xVRElORyBUSEUKKyAqIFdBUlJBTlRJRVMgT0YgREVTSUdOLCBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSwgT1IgQVJJU0lORyBGUk9NIEEgQ09VUlNFIE9GIERFQUxJTkcsIFVTQUdFIE9SIFRSQURFIFBSQUNUSUNFLgorICoKKyAqIFN1biBSUEMgaXMgcHJvdmlkZWQgd2l0aCBubyBzdXBwb3J0IGFuZCB3aXRob3V0IGFueSBvYmxpZ2F0aW9uIG9uIHRoZQorICogcGFydCBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIHRvIGFzc2lzdCBpbiBpdHMgdXNlLCBjb3JyZWN0aW9uLAorICogbW9kaWZpY2F0aW9uIG9yIGVuaGFuY2VtZW50LgorICoKKyAqIFNVTiBNSUNST1NZU1RFTVMsIElOQy4gU0hBTEwgSEFWRSBOTyBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRQorICogSU5GUklOR0VNRU5UIE9GIENPUFlSSUdIVFMsIFRSQURFIFNFQ1JFVFMgT1IgQU5ZIFBBVEVOVFMgQlkgU1VOIFJQQworICogT1IgQU5ZIFBBUlQgVEhFUkVPRi4KKyAqCisgKiBJbiBubyBldmVudCB3aWxsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYmUgbGlhYmxlIGZvciBhbnkgbG9zdCByZXZlbnVlCisgKiBvciBwcm9maXRzIG9yIG90aGVyIHNwZWNpYWwsIGluZGlyZWN0IGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIGV2ZW4gaWYKKyAqIFN1biBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisgKgorICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogMjU1MCBHYXJjaWEgQXZlbnVlCisgKiBNb3VudGFpbiBWaWV3LCBDYWxpZm9ybmlhICA5NDA0MworICovCisKKy8qCisgKiBjbG50LmggLSBDbGllbnQgc2lkZSByZW1vdGUgcHJvY2VkdXJlIGNhbGwgaW50ZXJmYWNlLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk4NCwgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICovCisKKyNpZm5kZWYgX1JQQ19DTE5UX0gKKyNkZWZpbmUgX1JQQ19DTE5UX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxycGMvdHlwZXMuaD4KKyNpbmNsdWRlIDxycGMvYXV0aC5oPgorI2luY2x1ZGUgPHN5cy91bi5oPgorCitfX0JFR0lOX0RFQ0xTCisKKy8qCisgKiBScGMgY2FsbHMgcmV0dXJuIGFuIGVudW0gY2xudF9zdGF0LiAgVGhpcyBzaG91bGQgYmUgbG9va2VkIGF0IG1vcmUsCisgKiBzaW5jZSBlYWNoIGltcGxlbWVudGF0aW9uIGlzIHJlcXVpcmVkIHRvIGxpdmUgd2l0aCB0aGlzIChpbXBsZW1lbnRhdGlvbgorICogaW5kZXBlbmRlbnQpIGxpc3Qgb2YgZXJyb3JzLgorICovCitlbnVtIGNsbnRfc3RhdCB7CisJUlBDX1NVQ0NFU1M9MCwJCQkvKiBjYWxsIHN1Y2NlZWRlZCAqLworCS8qCisJICogbG9jYWwgZXJyb3JzCisJICovCisJUlBDX0NBTlRFTkNPREVBUkdTPTEsCQkvKiBjYW4ndCBlbmNvZGUgYXJndW1lbnRzICovCisJUlBDX0NBTlRERUNPREVSRVM9MiwJCS8qIGNhbid0IGRlY29kZSByZXN1bHRzICovCisJUlBDX0NBTlRTRU5EPTMsCQkJLyogZmFpbHVyZSBpbiBzZW5kaW5nIGNhbGwgKi8KKwlSUENfQ0FOVFJFQ1Y9NCwJCQkvKiBmYWlsdXJlIGluIHJlY2VpdmluZyByZXN1bHQgKi8KKwlSUENfVElNRURPVVQ9NSwJCQkvKiBjYWxsIHRpbWVkIG91dCAqLworCS8qCisJICogcmVtb3RlIGVycm9ycworCSAqLworCVJQQ19WRVJTTUlTTUFUQ0g9NiwJCS8qIHJwYyB2ZXJzaW9ucyBub3QgY29tcGF0aWJsZSAqLworCVJQQ19BVVRIRVJST1I9NywJCS8qIGF1dGhlbnRpY2F0aW9uIGVycm9yICovCisJUlBDX1BST0dVTkFWQUlMPTgsCQkvKiBwcm9ncmFtIG5vdCBhdmFpbGFibGUgKi8KKwlSUENfUFJPR1ZFUlNNSVNNQVRDSD05LAkJLyogcHJvZ3JhbSB2ZXJzaW9uIG1pc21hdGNoZWQgKi8KKwlSUENfUFJPQ1VOQVZBSUw9MTAsCQkvKiBwcm9jZWR1cmUgdW5hdmFpbGFibGUgKi8KKwlSUENfQ0FOVERFQ09ERUFSR1M9MTEsCQkvKiBkZWNvZGUgYXJndW1lbnRzIGVycm9yICovCisJUlBDX1NZU1RFTUVSUk9SPTEyLAkJLyogZ2VuZXJpYyAib3RoZXIgcHJvYmxlbSIgKi8KKwlSUENfTk9CUk9BRENBU1QgPSAyMSwJCS8qIEJyb2FkY2FzdGluZyBub3Qgc3VwcG9ydGVkICovCisJLyoKKwkgKiBjYWxscnBjICYgY2xudF9jcmVhdGUgZXJyb3JzCisJICovCisJUlBDX1VOS05PV05IT1NUPTEzLAkJLyogdW5rbm93biBob3N0IG5hbWUgKi8KKwlSUENfVU5LTk9XTlBST1RPPTE3LAkJLyogdW5rbm93biBwcm90b2NvbCAqLworCVJQQ19VTktOT1dOQUREUiA9IDE5LAkJLyogUmVtb3RlIGFkZHJlc3MgdW5rbm93biAqLworCisJLyoKKwkgKiBycGNiaW5kIGVycm9ycworCSAqLworCVJQQ19SUENCRkFJTFVSRT0xNCwJCS8qIHBvcnRtYXBwZXIgZmFpbGVkIGluIGl0cyBjYWxsICovCisjZGVmaW5lIFJQQ19QTUFQRkFJTFVSRSBSUENfUlBDQkZBSUxVUkUKKwlSUENfUFJPR05PVFJFR0lTVEVSRUQ9MTUsCS8qIHJlbW90ZSBwcm9ncmFtIGlzIG5vdCByZWdpc3RlcmVkICovCisJUlBDX04yQVhMQVRFRkFJTFVSRSA9IDIyLAkvKiBOYW1lIHRvIGFkZHIgdHJhbnNsYXRpb24gZmFpbGVkICovCisJLyoKKwkgKiB1bnNwZWNpZmllZCBlcnJvcgorCSAqLworCVJQQ19GQUlMRUQ9MTYsCisJUlBDX0lOVFI9MTgsCisJUlBDX1RMSUVSUk9SPTIwLAorCVJQQ19VREVSUk9SPTIzLAorICAgICAgICAvKgorICAgICAgICAgKiBhc3luY2hyb25vdXMgZXJyb3JzCisgICAgICAgICAqLworICAgICAgICBSUENfSU5QUk9HUkVTUyA9IDI0LAorICAgICAgICBSUENfU1RBTEVSQUNIQU5ETEUgPSAyNQorfTsKKworCisvKgorICogRXJyb3IgaW5mby4KKyAqLworc3RydWN0IHJwY19lcnIgeworICBlbnVtIGNsbnRfc3RhdCByZV9zdGF0dXM7CisgIHVuaW9uIHsKKyAgICBpbnQgUkVfZXJybm87CQkvKiByZWxhdGVkIHN5c3RlbSBlcnJvciAqLworICAgIGVudW0gYXV0aF9zdGF0IFJFX3doeTsJLyogd2h5IHRoZSBhdXRoIGVycm9yIG9jY3VycmVkICovCisgICAgc3RydWN0IHsKKyAgICAgIHVfbG9uZyBsb3c7CQkvKiBsb3dlc3QgdmVyaW9uIHN1cHBvcnRlZCAqLworICAgICAgdV9sb25nIGhpZ2g7CQkvKiBoaWdoZXN0IHZlcmlvbiBzdXBwb3J0ZWQgKi8KKyAgICB9IFJFX3ZlcnM7CisgICAgc3RydWN0IHsJCQkvKiBtYXliZSBtZWFuaW5nZnVsIGlmIFJQQ19GQUlMRUQgKi8KKyAgICAgIGxvbmcgczE7CisgICAgICBsb25nIHMyOworICAgIH0gUkVfbGI7CQkJLyogbGlmZSBib290ICYgZGVidWdnaW5nIG9ubHkgKi8KKyAgfSBydTsKKyNkZWZpbmUJcmVfZXJybm8JcnUuUkVfZXJybm8KKyNkZWZpbmUJcmVfd2h5CQlydS5SRV93aHkKKyNkZWZpbmUJcmVfdmVycwkJcnUuUkVfdmVycworI2RlZmluZQlyZV9sYgkJcnUuUkVfbGIKK307CisKKworLyoKKyAqIENsaWVudCBycGMgaGFuZGxlLgorICogQ3JlYXRlZCBieSBpbmRpdmlkdWFsIGltcGxlbWVudGF0aW9ucywgc2VlIGUuZy4gcnBjX3VkcC5jLgorICogQ2xpZW50IGlzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgYXV0aCwgc2VlIGUuZy4gYXV0aF9ub25lLmMuCisgKi8KK3R5cGVkZWYgc3RydWN0IENMSUVOVCBDTElFTlQ7CitzdHJ1Y3QgQ0xJRU5UIHsKKyAgQVVUSAkqY2xfYXV0aDsJCSAvKiBhdXRoZW50aWNhdG9yICovCisgIHN0cnVjdCBjbG50X29wcyB7CisgICAgZW51bSBjbG50X3N0YXQgKCpjbF9jYWxsKSAoQ0xJRU5UICosIHVfbG9uZywgeGRycHJvY190LCBjYWRkcl90LCB4ZHJwcm9jX3QsCisJCQkgICAgICAgY2FkZHJfdCwgc3RydWN0IHRpbWV2YWwpOworCQkJICAgICAgIAkvKiBjYWxsIHJlbW90ZSBwcm9jZWR1cmUgKi8KKyAgICB2b2lkICgqY2xfYWJvcnQpICh2b2lkKTsJLyogYWJvcnQgYSBjYWxsICovCisgICAgdm9pZCAoKmNsX2dldGVycikgKENMSUVOVCAqLCBzdHJ1Y3QgcnBjX2VyciAqKTsKKwkJCQkvKiBnZXQgc3BlY2lmaWMgZXJyb3IgY29kZSAqLworICAgIGJvb2xfdCAoKmNsX2ZyZWVyZXMpIChDTElFTlQgKiwgeGRycHJvY190LCBjYWRkcl90KTsKKwkJCQkvKiBmcmVlcyByZXN1bHRzICovCisgICAgdm9pZCAoKmNsX2Rlc3Ryb3kpIChDTElFTlQgKik7IC8qIGRlc3Ryb3kgdGhpcyBzdHJ1Y3R1cmUgKi8KKyAgICBib29sX3QgKCpjbF9jb250cm9sKSAoQ0xJRU5UICosIGludCwgY2hhciAqKTsKKwkJCQkvKiB0aGUgaW9jdGwoKSBvZiBycGMgKi8KKyAgfSAqY2xfb3BzOworICBjYWRkcl90IGNsX3ByaXZhdGU7CQkvKiBwcml2YXRlIHN0dWZmICovCit9OworCisKKy8qCisgKiBjbGllbnQgc2lkZSBycGMgaW50ZXJmYWNlIG9wcworICoKKyAqIFBhcmFtZXRlciB0eXBlcyBhcmU6CisgKgorICovCisKKy8qCisgKiBlbnVtIGNsbnRfc3RhdAorICogQ0xOVF9DQUxMKHJoLCBwcm9jLCB4YXJncywgYXJnc3AsIHhyZXMsIHJlc3AsIHRpbWVvdXQpCisgKiAJQ0xJRU5UICpyaDsKKyAqCXVfbG9uZyBwcm9jOworICoJeGRycHJvY190IHhhcmdzOworICoJY2FkZHJfdCBhcmdzcDsKKyAqCXhkcnByb2NfdCB4cmVzOworICoJY2FkZHJfdCByZXNwOworICoJc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKyAqLworI2RlZmluZQlDTE5UX0NBTEwocmgsIHByb2MsIHhhcmdzLCBhcmdzcCwgeHJlcywgcmVzcCwgc2VjcykJXAorCSgoKihyaCktPmNsX29wcy0+Y2xfY2FsbCkocmgsIHByb2MsIHhhcmdzLCBhcmdzcCwgeHJlcywgcmVzcCwgc2VjcykpCisjZGVmaW5lCWNsbnRfY2FsbChyaCwgcHJvYywgeGFyZ3MsIGFyZ3NwLCB4cmVzLCByZXNwLCBzZWNzKQlcCisJKCgqKHJoKS0+Y2xfb3BzLT5jbF9jYWxsKShyaCwgcHJvYywgeGFyZ3MsIGFyZ3NwLCB4cmVzLCByZXNwLCBzZWNzKSkKKworLyoKKyAqIHZvaWQKKyAqIENMTlRfQUJPUlQocmgpOworICogCUNMSUVOVCAqcmg7CisgKi8KKyNkZWZpbmUJQ0xOVF9BQk9SVChyaCkJKCgqKHJoKS0+Y2xfb3BzLT5jbF9hYm9ydCkocmgpKQorI2RlZmluZQljbG50X2Fib3J0KHJoKQkoKCoocmgpLT5jbF9vcHMtPmNsX2Fib3J0KShyaCkpCisKKy8qCisgKiBzdHJ1Y3QgcnBjX2VycgorICogQ0xOVF9HRVRFUlIocmgpOworICogCUNMSUVOVCAqcmg7CisgKi8KKyNkZWZpbmUJQ0xOVF9HRVRFUlIocmgsZXJycCkJKCgqKHJoKS0+Y2xfb3BzLT5jbF9nZXRlcnIpKHJoLCBlcnJwKSkKKyNkZWZpbmUJY2xudF9nZXRlcnIocmgsZXJycCkJKCgqKHJoKS0+Y2xfb3BzLT5jbF9nZXRlcnIpKHJoLCBlcnJwKSkKKworCisvKgorICogYm9vbF90CisgKiBDTE5UX0ZSRUVSRVMocmgsIHhyZXMsIHJlc3ApOworICogCUNMSUVOVCAqcmg7CisgKgl4ZHJwcm9jX3QgeHJlczsKKyAqCWNhZGRyX3QgcmVzcDsKKyAqLworI2RlZmluZQlDTE5UX0ZSRUVSRVMocmgseHJlcyxyZXNwKSAoKCoocmgpLT5jbF9vcHMtPmNsX2ZyZWVyZXMpKHJoLHhyZXMscmVzcCkpCisjZGVmaW5lCWNsbnRfZnJlZXJlcyhyaCx4cmVzLHJlc3ApICgoKihyaCktPmNsX29wcy0+Y2xfZnJlZXJlcykocmgseHJlcyxyZXNwKSkKKworLyoKKyAqIGJvb2xfdAorICogQ0xOVF9DT05UUk9MKGNsLCByZXF1ZXN0LCBpbmZvKQorICogICAgICBDTElFTlQgKmNsOworICogICAgICB1X2ludCByZXF1ZXN0OworICogICAgICBjaGFyICppbmZvOworICovCisjZGVmaW5lCUNMTlRfQ09OVFJPTChjbCxycSxpbikgKCgqKGNsKS0+Y2xfb3BzLT5jbF9jb250cm9sKShjbCxycSxpbikpCisjZGVmaW5lCWNsbnRfY29udHJvbChjbCxycSxpbikgKCgqKGNsKS0+Y2xfb3BzLT5jbF9jb250cm9sKShjbCxycSxpbikpCisKKy8qCisgKiBjb250cm9sIG9wZXJhdGlvbnMgdGhhdCBhcHBseSB0byBhbGwgdHJhbnNwb3J0cworICoKKyAqIE5vdGU6IG9wdGlvbnMgbWFya2VkIFhYWCBhcmUgbm8tb3BzIGluIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgUlBDLgorICogVGhlIGFyZSBwcmVzZW50IGluIFRJLVJQQyBidXQgY2FuJ3QgYmUgaW1wbGVtZW50ZWQgaGVyZSBzaW5jZSB0aGV5CisgKiBkZXBlbmQgb24gdGhlIHByZXNlbmNlIG9mIFNUUkVBTVMvVExJLCB3aGljaCB3ZSBkb24ndCBoYXZlLgorICovCisjZGVmaW5lIENMU0VUX1RJTUVPVVQgICAgICAgIDEgICAgLyogc2V0IHRpbWVvdXQgKHRpbWV2YWwpICovCisjZGVmaW5lIENMR0VUX1RJTUVPVVQgICAgICAgIDIgICAgLyogZ2V0IHRpbWVvdXQgKHRpbWV2YWwpICovCisjZGVmaW5lIENMR0VUX1NFUlZFUl9BRERSICAgIDMgICAgLyogZ2V0IHNlcnZlcidzIGFkZHJlc3MgKHNvY2thZGRyKSAqLworI2RlZmluZSBDTEdFVF9GRCAgICAgICAgICAgICA2ICAgIC8qIGdldCBjb25uZWN0aW9ucyBmaWxlIGRlc2NyaXB0b3IgKi8KKyNkZWZpbmUgQ0xHRVRfU1ZDX0FERFIgICAgICAgNyAgICAvKiBnZXQgc2VydmVyJ3MgYWRkcmVzcyAobmV0YnVmKSAgICAgIFhYWCAqLworI2RlZmluZSBDTFNFVF9GRF9DTE9TRSAgICAgICA4ICAgIC8qIGNsb3NlIGZkIHdoaWxlIGNsbnRfZGVzdHJveSAqLworI2RlZmluZSBDTFNFVF9GRF9OQ0xPU0UgICAgICA5ICAgIC8qIERvIG5vdCBjbG9zZSBmZCB3aGlsZSBjbG50X2Rlc3Ryb3kqLworI2RlZmluZSBDTEdFVF9YSUQgICAgICAgICAgICAxMCAgIC8qIEdldCB4aWQgKi8KKyNkZWZpbmUgQ0xTRVRfWElEICAgICAgICAgICAgMTEgICAvKiBTZXQgeGlkICovCisjZGVmaW5lIENMR0VUX1ZFUlMgICAgICAgICAgIDEyICAgLyogR2V0IHZlcnNpb24gbnVtYmVyICovCisjZGVmaW5lIENMU0VUX1ZFUlMgICAgICAgICAgIDEzICAgLyogU2V0IHZlcnNpb24gbnVtYmVyICovCisjZGVmaW5lIENMR0VUX1BST0cgICAgICAgICAgIDE0ICAgLyogR2V0IHByb2dyYW0gbnVtYmVyICovCisjZGVmaW5lIENMU0VUX1BST0cgICAgICAgICAgIDE1ICAgLyogU2V0IHByb2dyYW0gbnVtYmVyICovCisjZGVmaW5lIENMU0VUX1NWQ19BRERSICAgICAgIDE2ICAgLyogZ2V0IHNlcnZlcidzIGFkZHJlc3MgKG5ldGJ1ZikgICAgICBYWFggKi8KKyNkZWZpbmUgQ0xTRVRfUFVTSF9USU1PRCAgICAgMTcgICAvKiBwdXNoIHRpbW9kIGlmIG5vdCBhbHJlYWR5IHByZXNlbnQgIFhYWCAqLworI2RlZmluZSBDTFNFVF9QT1BfVElNT0QgICAgICAxOCAgIC8qIHBvcCB0aW1vZCAgICAgICAgICAgICAgICAgICAgICAgICAgWFhYICovCisvKgorICogQ29ubmVjdGlvbmxlc3Mgb25seSBjb250cm9sIG9wZXJhdGlvbnMKKyAqLworI2RlZmluZSBDTFNFVF9SRVRSWV9USU1FT1VUCTQJLyogc2V0IHJldHJ5IHRpbWVvdXQgKHRpbWV2YWwpICovCisjZGVmaW5lIENMR0VUX1JFVFJZX1RJTUVPVVQJNQkvKiBnZXQgcmV0cnkgdGltZW91dCAodGltZXZhbCkgKi8KKworLyoKKyAqIHZvaWQKKyAqIENMTlRfREVTVFJPWShyaCk7CisgKiAJQ0xJRU5UICpyaDsKKyAqLworI2RlZmluZQlDTE5UX0RFU1RST1kocmgpCSgoKihyaCktPmNsX29wcy0+Y2xfZGVzdHJveSkocmgpKQorI2RlZmluZQljbG50X2Rlc3Ryb3kocmgpCSgoKihyaCktPmNsX29wcy0+Y2xfZGVzdHJveSkocmgpKQorCisKKy8qCisgKiBSUENURVNUIGlzIGEgdGVzdCBwcm9ncmFtIHdoaWNoIGlzIGFjY2Vzc2libGUgb24gZXZlcnkgcnBjCisgKiB0cmFuc3BvcnQvcG9ydC4gIEl0IGlzIHVzZWQgZm9yIHRlc3RpbmcsIHBlcmZvcm1hbmNlIGV2YWx1YXRpb24sCisgKiBhbmQgbmV0d29yayBhZG1pbmlzdHJhdGlvbi4KKyAqLworCisjZGVmaW5lIFJQQ1RFU1RfUFJPR1JBTQkJKCh1X2xvbmcpMSkKKyNkZWZpbmUgUlBDVEVTVF9WRVJTSU9OCQkoKHVfbG9uZykxKQorI2RlZmluZSBSUENURVNUX05VTExfUFJPQwkoKHVfbG9uZykyKQorI2RlZmluZSBSUENURVNUX05VTExfQkFUQ0hfUFJPQwkoKHVfbG9uZykzKQorCisvKgorICogQnkgY29udmVudGlvbiwgcHJvY2VkdXJlIDAgdGFrZXMgbnVsbCBhcmd1bWVudHMgYW5kIHJldHVybnMgdGhlbQorICovCisKKyNkZWZpbmUgTlVMTFBST0MgKCh1X2xvbmcpMCkKKworLyoKKyAqIEJlbG93IGFyZSB0aGUgY2xpZW50IGhhbmRsZSBjcmVhdGlvbiByb3V0aW5lcyBmb3IgdGhlIHZhcmlvdXMKKyAqIGltcGxlbWVudGF0aW9ucyBvZiBjbGllbnQgc2lkZSBycGMuICBUaGV5IGNhbiByZXR1cm4gTlVMTCBpZiBhCisgKiBjcmVhdGlvbiBmYWlsdXJlIG9jY3Vycy4KKyAqLworCisvKgorICogTWVtb3J5IGJhc2VkIHJwYyAoZm9yIHNwZWVkIGNoZWNrIGFuZCB0ZXN0aW5nKQorICogQ0xJRU5UICoKKyAqIGNsbnRyYXdfY3JlYXRlKHByb2csIHZlcnMpCisgKgl1X2xvbmcgcHJvZzsKKyAqCXVfbG9uZyB2ZXJzOworICovCitleHRlcm4gQ0xJRU5UICpjbG50cmF3X2NyZWF0ZSAoX19jb25zdCB1X2xvbmcgX19wcm9nLCBfX2NvbnN0IHVfbG9uZyBfX3ZlcnMpCisgICAgIF9fVEhST1c7CisKKworLyoKKyAqIEdlbmVyaWMgY2xpZW50IGNyZWF0aW9uIHJvdXRpbmUuIFN1cHBvcnRlZCBwcm90b2NvbHMgYXJlICJ1ZHAiLCAidGNwIiBhbmQKKyAqICJ1bml4IgorICogQ0xJRU5UICoKKyAqIGNsbnRfY3JlYXRlKGhvc3QsIHByb2csIHZlcnMsIHByb3QpCisgKgljaGFyICpob3N0OyAJLS0gaG9zdG5hbWUKKyAqCXVfbG9uZyBwcm9nOwktLSBwcm9ncmFtIG51bWJlcgorICoJdV9vbmcgdmVyczsJLS0gdmVyc2lvbiBudW1iZXIKKyAqCWNoYXIgKnByb3Q7CS0tIHByb3RvY29sCisgKi8KK2V4dGVybiBDTElFTlQgKmNsbnRfY3JlYXRlIChfX2NvbnN0IGNoYXIgKl9faG9zdCwgX19jb25zdCB1X2xvbmcgX19wcm9nLAorCQkJICAgIF9fY29uc3QgdV9sb25nIF9fdmVycywgX19jb25zdCBjaGFyICpfX3Byb3QpCisgICAgIF9fVEhST1c7CisKKworLyoKKyAqIFRDUCBiYXNlZCBycGMKKyAqIENMSUVOVCAqCisgKiBjbG50dGNwX2NyZWF0ZShyYWRkciwgcHJvZywgdmVycywgc29ja3AsIHNlbmRzeiwgcmVjdnN6KQorICoJc3RydWN0IHNvY2thZGRyX2luICpyYWRkcjsKKyAqCXVfbG9uZyBwcm9nOworICoJdV9sb25nIHZlcnNpb247CisgKglyZWdpc3RlciBpbnQgKnNvY2twOworICoJdV9pbnQgc2VuZHN6OworICoJdV9pbnQgcmVjdnN6OworICovCitleHRlcm4gQ0xJRU5UICpjbG50dGNwX2NyZWF0ZSAoc3RydWN0IHNvY2thZGRyX2luICpfX3JhZGRyLCB1X2xvbmcgX19wcm9nLAorCQkJICAgICAgIHVfbG9uZyBfX3ZlcnNpb24sIGludCAqX19zb2NrcCwgdV9pbnQgX19zZW5kc3osCisJCQkgICAgICAgdV9pbnQgX19yZWN2c3opIF9fVEhST1c7CisKKy8qCisgKiBVRFAgYmFzZWQgcnBjLgorICogQ0xJRU5UICoKKyAqIGNsbnR1ZHBfY3JlYXRlKHJhZGRyLCBwcm9ncmFtLCB2ZXJzaW9uLCB3YWl0LCBzb2NrcCkKKyAqCXN0cnVjdCBzb2NrYWRkcl9pbiAqcmFkZHI7CisgKgl1X2xvbmcgcHJvZ3JhbTsKKyAqCXVfbG9uZyB2ZXJzaW9uOworICoJc3RydWN0IHRpbWV2YWwgd2FpdF9yZXNlbmQ7CisgKglpbnQgKnNvY2twOworICoKKyAqIFNhbWUgYXMgYWJvdmUsIGJ1dCB5b3Ugc3BlY2lmeSBtYXggcGFja2V0IHNpemVzLgorICogQ0xJRU5UICoKKyAqIGNsbnR1ZHBfYnVmY3JlYXRlKHJhZGRyLCBwcm9ncmFtLCB2ZXJzaW9uLCB3YWl0LCBzb2NrcCwgc2VuZHN6LCByZWN2c3opCisgKglzdHJ1Y3Qgc29ja2FkZHJfaW4gKnJhZGRyOworICoJdV9sb25nIHByb2dyYW07CisgKgl1X2xvbmcgdmVyc2lvbjsKKyAqCXN0cnVjdCB0aW1ldmFsIHdhaXRfcmVzZW5kOworICoJaW50ICpzb2NrcDsKKyAqCXVfaW50IHNlbmRzejsKKyAqCXVfaW50IHJlY3ZzejsKKyAqLworZXh0ZXJuIENMSUVOVCAqY2xudHVkcF9jcmVhdGUgKHN0cnVjdCBzb2NrYWRkcl9pbiAqX19yYWRkciwgdV9sb25nIF9fcHJvZ3JhbSwKKwkJCSAgICAgICB1X2xvbmcgX192ZXJzaW9uLCBzdHJ1Y3QgdGltZXZhbCBfX3dhaXRfcmVzZW5kLAorCQkJICAgICAgIGludCAqX19zb2NrcCkgX19USFJPVzsKK2V4dGVybiBDTElFTlQgKmNsbnR1ZHBfYnVmY3JlYXRlIChzdHJ1Y3Qgc29ja2FkZHJfaW4gKl9fcmFkZHIsCisJCQkJICB1X2xvbmcgX19wcm9ncmFtLCB1X2xvbmcgX192ZXJzaW9uLAorCQkJCSAgc3RydWN0IHRpbWV2YWwgX193YWl0X3Jlc2VuZCwgaW50ICpfX3NvY2twLAorCQkJCSAgdV9pbnQgX19zZW5kc3osIHVfaW50IF9fcmVjdnN6KSBfX1RIUk9XOworCisKKworCisvKgorICogQUZfVU5JWCBiYXNlZCBycGMKKyAqIENMSUVOVCAqCisgKiBjbG50dW5peF9jcmVhdGUocmFkZHIsIHByb2csIHZlcnMsIHNvY2twLCBzZW5kc3osIHJlY3ZzeikKKyAqICAgICAgc3RydWN0IHNvY2thZGRyX3VuICpyYWRkcjsKKyAqICAgICAgdV9sb25nIHByb2c7CisgKiAgICAgIHVfbG9uZyB2ZXJzaW9uOworICogICAgICByZWdpc3RlciBpbnQgKnNvY2twOworICogICAgICB1X2ludCBzZW5kc3o7CisgKiAgICAgIHVfaW50IHJlY3ZzejsKKyAqLworZXh0ZXJuIENMSUVOVCAqY2xudHVuaXhfY3JlYXRlICAoc3RydWN0IHNvY2thZGRyX3VuICpfX3JhZGRyLCB1X2xvbmcgX19wcm9ncmFtLAorCQkJCSB1X2xvbmcgX192ZXJzaW9uLCBpbnQgKl9fc29ja3AsCisJCQkJIHVfaW50IF9fc2VuZHN6LCB1X2ludCBfX3JlY3ZzeikgX19USFJPVzsKKworCitleHRlcm4gaW50IGNhbGxycGMgKF9fY29uc3QgY2hhciAqX19ob3N0LCBfX2NvbnN0IHVfbG9uZyBfX3Byb2dudW0sCisJCSAgICBfX2NvbnN0IHVfbG9uZyBfX3ZlcnNudW0sIF9fY29uc3QgdV9sb25nIF9fcHJvY251bSwKKwkJICAgIF9fY29uc3QgeGRycHJvY190IF9faW5wcm9jLCBfX2NvbnN0IGNoYXIgKl9faW4sCisJCSAgICBfX2NvbnN0IHhkcnByb2NfdCBfX291dHByb2MsIGNoYXIgKl9fb3V0KSBfX1RIUk9XOworZXh0ZXJuIGludCBfcnBjX2R0YWJsZXNpemUgKHZvaWQpIF9fVEhST1c7CisKKy8qCisgKiBQcmludCB3aHkgY3JlYXRpb24gZmFpbGVkCisgKi8KK2V4dGVybiB2b2lkIGNsbnRfcGNyZWF0ZWVycm9yIChfX2NvbnN0IGNoYXIgKl9fbXNnKTsJLyogc3RkZXJyICovCitleHRlcm4gY2hhciAqY2xudF9zcGNyZWF0ZWVycm9yKF9fY29uc3QgY2hhciAqX19tc2cpIF9fVEhST1c7CS8qIHN0cmluZyAqLworCisvKgorICogTGlrZSBjbG50X3BlcnJvcigpLCBidXQgaXMgbW9yZSB2ZXJib3NlIGluIGl0cyBvdXRwdXQKKyAqLworZXh0ZXJuIHZvaWQgY2xudF9wZXJybm8gKGVudW0gY2xudF9zdGF0IF9fbnVtKTsJCS8qIHN0ZGVyciAqLworCisvKgorICogUHJpbnQgYW4gRW5nbGlzaCBlcnJvciBtZXNzYWdlLCBnaXZlbiB0aGUgY2xpZW50IGVycm9yIGNvZGUKKyAqLworZXh0ZXJuIHZvaWQgY2xudF9wZXJyb3IgKENMSUVOVCAqX19jbG50LCBfX2NvbnN0IGNoYXIgKl9fbXNnKTsKKwkJCQkJCQkvKiBzdGRlcnIgKi8KK2V4dGVybiBjaGFyICpjbG50X3NwZXJyb3IgKENMSUVOVCAqX19jbG50LCBfX2NvbnN0IGNoYXIgKl9fbXNnKSBfX1RIUk9XOworCQkJCQkJCS8qIHN0cmluZyAqLworCisvKgorICogSWYgYSBjcmVhdGlvbiBmYWlscywgdGhlIGZvbGxvd2luZyBhbGxvd3MgdGhlIHVzZXIgdG8gZmlndXJlIG91dCB3aHkuCisgKi8KK3N0cnVjdCBycGNfY3JlYXRlZXJyIHsKKwllbnVtIGNsbnRfc3RhdCBjZl9zdGF0OworCXN0cnVjdCBycGNfZXJyIGNmX2Vycm9yOyAvKiB1c2VmdWwgd2hlbiBjZl9zdGF0ID09IFJQQ19QTUFQRkFJTFVSRSAqLworfTsKKworZXh0ZXJuIHN0cnVjdCBycGNfY3JlYXRlZXJyIHJwY19jcmVhdGVlcnI7CisKKworCisvKgorICogQ29weSBlcnJvciBtZXNzYWdlIHRvIGJ1ZmZlci4KKyAqLworZXh0ZXJuIGNoYXIgKmNsbnRfc3BlcnJubyAoZW51bSBjbG50X3N0YXQgX19udW0pIF9fVEhST1c7CS8qIHN0cmluZyAqLworCisvKgorICogZ2V0IHRoZSBwb3J0IG51bWJlciBvbiB0aGUgaG9zdCBmb3IgdGhlIHJwYyBwcm9ncmFtLHZlcnNpb24gYW5kIHByb3RvCisgKi8KK2V4dGVybiBpbnQgZ2V0cnBjcG9ydCAoX19jb25zdCBjaGFyICogX19ob3N0LCB1X2xvbmcgX19wcm9nbnVtLAorCQkgICAgICAgdV9sb25nIF9fdmVyc251bSwgdV9pbnQgcHJvdG8pIF9fVEhST1c7CisKKy8qCisgKiBnZXQgdGhlIGxvY2FsIGhvc3QncyBJUCBhZGRyZXNzIHdpdGhvdXQgY29uc3VsdGluZworICogbmFtZSBzZXJ2aWNlIGxpYnJhcnkgZnVuY3Rpb25zCisgKi8KK2V4dGVybiB2b2lkIGdldF9teWFkZHJlc3MgKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBfX1RIUk9XOworCisjZGVmaW5lIFVEUE1TR1NJWkUJODgwMAkvKiBycGMgaW1wb3NlZCBsaW1pdCBvbiB1ZHAgbXNnIHNpemUgKi8KKyNkZWZpbmUgUlBDU01BTExNU0dTSVpFCTQwMAkvKiBhIG1vcmUgcmVhc29uYWJsZSBwYWNrZXQgc2l6ZSAqLworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogcnBjL2NsbnQuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwYy9kZXNfY3J5cHQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGMvZGVzX2NyeXB0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE2NTg4NwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGMvZGVzX2NyeXB0LmgKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIEAoIylkZXNfY3J5cHQuaAkyLjEgODgvMDgvMTEgNC4wIFJQQ1NSQzsJZnJvbSAxLjQgODgvMDIvMDggKEMpIDE5ODYgU01JCisgKgorICogZGVzX2NyeXB0LmgsIGRlcyBsaWJyYXJ5IHJvdXRpbmUgaW50ZXJmYWNlCisgKiBDb3B5cmlnaHQgKEMpIDE5ODYsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqLworLyoKKyAqIFN1biBSUEMgaXMgYSBwcm9kdWN0IG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYW5kIGlzIHByb3ZpZGVkIGZvcgorICogdW5yZXN0cmljdGVkIHVzZSBwcm92aWRlZCB0aGF0IHRoaXMgbGVnZW5kIGlzIGluY2x1ZGVkIG9uIGFsbCB0YXBlCisgKiBtZWRpYSBhbmQgYXMgYSBwYXJ0IG9mIHRoZSBzb2Z0d2FyZSBwcm9ncmFtIGluIHdob2xlIG9yIHBhcnQuICBVc2VycworICogbWF5IGNvcHkgb3IgbW9kaWZ5IFN1biBSUEMgd2l0aG91dCBjaGFyZ2UsIGJ1dCBhcmUgbm90IGF1dGhvcml6ZWQKKyAqIHRvIGxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBpdCB0byBhbnlvbmUgZWxzZSBleGNlcHQgYXMgcGFydCBvZiBhIHByb2R1Y3Qgb3IKKyAqIHByb2dyYW0gZGV2ZWxvcGVkIGJ5IHRoZSB1c2VyLgorICoKKyAqIFNVTiBSUEMgSVMgUFJPVklERUQgQVMgSVMgV0lUSCBOTyBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIElOQ0xVRElORyBUSEUKKyAqIFdBUlJBTlRJRVMgT0YgREVTSUdOLCBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSwgT1IgQVJJU0lORyBGUk9NIEEgQ09VUlNFIE9GIERFQUxJTkcsIFVTQUdFIE9SIFRSQURFIFBSQUNUSUNFLgorICoKKyAqIFN1biBSUEMgaXMgcHJvdmlkZWQgd2l0aCBubyBzdXBwb3J0IGFuZCB3aXRob3V0IGFueSBvYmxpZ2F0aW9uIG9uIHRoZQorICogcGFydCBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIHRvIGFzc2lzdCBpbiBpdHMgdXNlLCBjb3JyZWN0aW9uLAorICogbW9kaWZpY2F0aW9uIG9yIGVuaGFuY2VtZW50LgorICoKKyAqIFNVTiBNSUNST1NZU1RFTVMsIElOQy4gU0hBTEwgSEFWRSBOTyBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRQorICogSU5GUklOR0VNRU5UIE9GIENPUFlSSUdIVFMsIFRSQURFIFNFQ1JFVFMgT1IgQU5ZIFBBVEVOVFMgQlkgU1VOIFJQQworICogT1IgQU5ZIFBBUlQgVEhFUkVPRi4KKyAqCisgKiBJbiBubyBldmVudCB3aWxsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYmUgbGlhYmxlIGZvciBhbnkgbG9zdCByZXZlbnVlCisgKiBvciBwcm9maXRzIG9yIG90aGVyIHNwZWNpYWwsIGluZGlyZWN0IGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIGV2ZW4gaWYKKyAqIFN1biBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisgKgorICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogMjU1MCBHYXJjaWEgQXZlbnVlCisgKiBNb3VudGFpbiBWaWV3LCBDYWxpZm9ybmlhICA5NDA0MworICovCisKKyNpZm5kZWYgX19ERVNfQ1JZUFRfSF9fCisjZGVmaW5lIF9fREVTX0NSWVBUX0hfXyAxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgREVTX01BWERBVEEgODE5MgkvKiBtYXggYnl0ZXMgZW5jcnlwdGVkIGluIG9uZSBjYWxsICovCisjZGVmaW5lIERFU19ESVJNQVNLICgxIDw8IDApCisjZGVmaW5lIERFU19FTkNSWVBUICgwKkRFU19ESVJNQVNLKQkvKiBFbmNyeXB0ICovCisjZGVmaW5lIERFU19ERUNSWVBUICgxKkRFU19ESVJNQVNLKQkvKiBEZWNyeXB0ICovCisKKworI2RlZmluZSBERVNfREVWTUFTSyAoMSA8PCAxKQorI2RlZmluZQlERVNfSFcgKDAqREVTX0RFVk1BU0spCS8qIFVzZSBoYXJkd2FyZSBkZXZpY2UgKi8KKyNkZWZpbmUgREVTX1NXICgxKkRFU19ERVZNQVNLKQkvKiBVc2Ugc29mdHdhcmUgZGV2aWNlICovCisKKworI2RlZmluZSBERVNFUlJfTk9ORSAwCS8qIHN1Y2NlZWRlZCAqLworI2RlZmluZSBERVNFUlJfTk9IV0RFVklDRSAxCS8qIHN1Y2NlZWRlZCwgYnV0IGh3IGRldmljZSBub3QgYXZhaWxhYmxlICovCisjZGVmaW5lIERFU0VSUl9IV0VSUk9SIDIJLyogZmFpbGVkLCBoYXJkd2FyZS9kcml2ZXIgZXJyb3IgKi8KKyNkZWZpbmUgREVTRVJSX0JBRFBBUkFNIDMJLyogZmFpbGVkLCBiYWQgcGFyYW1ldGVyIHRvIGNhbGwgKi8KKworI2RlZmluZSBERVNfRkFJTEVEKGVycikgXAorCSgoZXJyKSA+IERFU0VSUl9OT0hXREVWSUNFKQorCisvKgorICogY2JjX2NyeXB0KCkKKyAqIGVjYl9jcnlwdCgpCisgKgorICogRW5jcnlwdCAob3IgZGVjcnlwdCkgbGVuIGJ5dGVzIG9mIGEgYnVmZmVyIGJ1Zi4KKyAqIFRoZSBsZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIGVpZ2h0LgorICogVGhlIGtleSBzaG91bGQgaGF2ZSBvZGQgcGFyaXR5IGluIHRoZSBsb3cgYml0IG9mIGVhY2ggYnl0ZS4KKyAqIGl2ZWMgaXMgdGhlIGlucHV0IHZlY3RvciwgYW5kIGlzIHVwZGF0ZWQgdG8gdGhlIG5ldyBvbmUgKGNiYyBvbmx5KS4KKyAqIFRoZSBtb2RlIGlzIGNyZWF0ZWQgYnkgb3JpbmcgdG9nZXRoZXIgdGhlIGFwcHJvcHJpYXRlIHBhcmFtZXRlcnMuCisgKiBERVNFUlJfTk9IV0RFVklDRSBpcyByZXR1cm5lZCBpZiBERVNfSFcgd2FzIHNwZWNpZmllZCBidXQKKyAqIHRoZXJlIHdhcyBubyBoYXJkd2FyZSB0byBkbyBpdCBvbiAodGhlIGRhdGEgd2lsbCBzdGlsbCBiZQorICogZW5jcnlwdGVkIHRob3VnaCwgaW4gc29mdHdhcmUpLgorICovCisKKworLyoKKyAqIENpcGhlciBCbG9jayBDaGFpbmluZyBtb2RlCisgKi8KK2V4dGVybiBpbnQgY2JjX2NyeXB0IChjaGFyICpfX2tleSwgY2hhciAqX19idWYsIHVuc2lnbmVkIF9fbGVuLAorCQkgICAgICB1bnNpZ25lZCBfX21vZGUsIGNoYXIgKl9faXZlYykgX19USFJPVzsKKworLyoKKyAqIEVsZWN0cm9uaWMgQ29kZSBCb29rIG1vZGUKKyAqLworZXh0ZXJuIGludCBlY2JfY3J5cHQgKGNoYXIgKl9fa2V5LCBjaGFyICpfX2J1ZiwgdW5zaWduZWQgX19sZW4sCisJCSAgICAgIHVuc2lnbmVkIF9fbW9kZSkgX19USFJPVzsKKworLyoKKyAqIFNldCBkZXMgcGFyaXR5IGZvciBhIGtleS4KKyAqIERFUyBwYXJpdHkgaXMgb2RkIGFuZCBpbiB0aGUgbG93IGJpdCBvZiBlYWNoIGJ5dGUKKyAqLworZXh0ZXJuIHZvaWQgZGVzX3NldHBhcml0eSAoY2hhciAqX19rZXkpIF9fVEhST1c7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwYy9rZXlfcHJvdC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwYy9rZXlfcHJvdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMmViNzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjL2tleV9wcm90LmgKQEAgLTAsMCArMSwzNDYgQEAKKy8qCisgKiBQbGVhc2UgZG8gbm90IGVkaXQgdGhpcyBmaWxlLgorICogSXQgd2FzIGdlbmVyYXRlZCB1c2luZyBycGNnZW4uCisgKi8KKworI2lmbmRlZiBfS0VZX1BST1RfSF9SUENHRU4KKyNkZWZpbmUgX0tFWV9QUk9UX0hfUlBDR0VOCisKKyNpbmNsdWRlIDxycGMvcnBjLmg+CisKKy8qCisgKiBTdW4gUlBDIGlzIGEgcHJvZHVjdCBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGFuZCBpcyBwcm92aWRlZCBmb3IKKyAqIHVucmVzdHJpY3RlZCB1c2UgcHJvdmlkZWQgdGhhdCB0aGlzIGxlZ2VuZCBpcyBpbmNsdWRlZCBvbiBhbGwgdGFwZQorICogbWVkaWEgYW5kIGFzIGEgcGFydCBvZiB0aGUgc29mdHdhcmUgcHJvZ3JhbSBpbiB3aG9sZSBvciBwYXJ0LiAgVXNlcnMKKyAqIG1heSBjb3B5IG9yIG1vZGlmeSBTdW4gUlBDIHdpdGhvdXQgY2hhcmdlLCBidXQgYXJlIG5vdCBhdXRob3JpemVkCisgKiB0byBsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgaXQgdG8gYW55b25lIGVsc2UgZXhjZXB0IGFzIHBhcnQgb2YgYSBwcm9kdWN0IG9yCisgKiBwcm9ncmFtIGRldmVsb3BlZCBieSB0aGUgdXNlci4KKyAqCisgKiBTVU4gUlBDIElTIFBST1ZJREVEIEFTIElTIFdJVEggTk8gV0FSUkFOVElFUyBPRiBBTlkgS0lORCBJTkNMVURJTkcgVEhFCisgKiBXQVJSQU5USUVTIE9GIERFU0lHTiwgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UsIE9SIEFSSVNJTkcgRlJPTSBBIENPVVJTRSBPRiBERUFMSU5HLCBVU0FHRSBPUiBUUkFERSBQUkFDVElDRS4KKyAqCisgKiBTdW4gUlBDIGlzIHByb3ZpZGVkIHdpdGggbm8gc3VwcG9ydCBhbmQgd2l0aG91dCBhbnkgb2JsaWdhdGlvbiBvbiB0aGUKKyAqIHBhcnQgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiB0byBhc3Npc3QgaW4gaXRzIHVzZSwgY29ycmVjdGlvbiwKKyAqIG1vZGlmaWNhdGlvbiBvciBlbmhhbmNlbWVudC4KKyAqCisgKiBTVU4gTUlDUk9TWVNURU1TLCBJTkMuIFNIQUxMIEhBVkUgTk8gTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUKKyAqIElORlJJTkdFTUVOVCBPRiBDT1BZUklHSFRTLCBUUkFERSBTRUNSRVRTIE9SIEFOWSBQQVRFTlRTIEJZIFNVTiBSUEMKKyAqIE9SIEFOWSBQQVJUIFRIRVJFT0YuCisgKgorICogSW4gbm8gZXZlbnQgd2lsbCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJlIGxpYWJsZSBmb3IgYW55IGxvc3QgcmV2ZW51ZQorICogb3IgcHJvZml0cyBvciBvdGhlciBzcGVjaWFsLCBpbmRpcmVjdCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBldmVuIGlmCisgKiBTdW4gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorICoKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIDI1NTAgR2FyY2lhIEF2ZW51ZQorICogTW91bnRhaW4gVmlldywgQ2FsaWZvcm5pYSAgOTQwNDMKKyAqLworI2lmIDAKKyNwcmFnbWEgaWRlbnQJIkAoIylrZXlfcHJvdC54CTEuNwk5NC8wNC8yOSBTTUkiCisjZW5kaWYKKy8qIENvcHlyaWdodCAoYykgIDE5OTAsIDE5OTEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiAqLworCisvKiAKKyAqIENvbXBpbGVkIGZyb20ga2V5X3Byb3QueCB1c2luZyBycGNnZW4uCisgKiBETyBOT1QgRURJVCBUSElTIEZJTEUhCisgKiBUaGlzIGlzIE5PVCBzb3VyY2UgY29kZSEKKyAqLworI2RlZmluZSBQUk9PVCAzCisjZGVmaW5lIEhFWE1PRFVMVVMgImQ0YTBiYTAyNTBiNmZkMmVjNjI2ZTdlZmQ2MzdkZjc2YzcxNmUyMmQwOTQ0Yjg4YiIKKyNkZWZpbmUgSEVYS0VZQllURVMgNDgKKyNkZWZpbmUgS0VZU0laRSAxOTIKKyNkZWZpbmUgS0VZQllURVMgMjQKKyNkZWZpbmUgS0VZQ0hFQ0tTVU1TSVpFIDE2CisKK2VudW0ga2V5c3RhdHVzIHsKKwlLRVlfU1VDQ0VTUyA9IDAsCisJS0VZX05PU0VDUkVUID0gMSwKKwlLRVlfVU5LTk9XTiA9IDIsCisJS0VZX1NZU1RFTUVSUiA9IDMsCit9OwordHlwZWRlZiBlbnVtIGtleXN0YXR1cyBrZXlzdGF0dXM7CisjaWZkZWYgX19jcGx1c3BsdXMgCitleHRlcm4gIkMiIGJvb2xfdCB4ZHJfa2V5c3RhdHVzKFhEUiAqLCBrZXlzdGF0dXMqKTsKKyNlbGlmIF9fU1REQ19fIAorZXh0ZXJuICBib29sX3QgeGRyX2tleXN0YXR1cyhYRFIgKiwga2V5c3RhdHVzKik7CisjZWxzZSAvKiBPbGQgU3R5bGUgQyAqLyAKK2Jvb2xfdCB4ZHJfa2V5c3RhdHVzKCk7CisjZW5kaWYgLyogT2xkIFN0eWxlIEMgKi8gCisKKwordHlwZWRlZiBjaGFyIGtleWJ1ZltIRVhLRVlCWVRFU107CisjaWZkZWYgX19jcGx1c3BsdXMgCitleHRlcm4gIkMiIGJvb2xfdCB4ZHJfa2V5YnVmKFhEUiAqLCBrZXlidWYpOworI2VsaWYgX19TVERDX18gCitleHRlcm4gIGJvb2xfdCB4ZHJfa2V5YnVmKFhEUiAqLCBrZXlidWYpOworI2Vsc2UgLyogT2xkIFN0eWxlIEMgKi8gCitib29sX3QgeGRyX2tleWJ1ZigpOworI2VuZGlmIC8qIE9sZCBTdHlsZSBDICovIAorCisKK3R5cGVkZWYgY2hhciAqbmV0bmFtZXN0cjsKKyNpZmRlZiBfX2NwbHVzcGx1cyAKK2V4dGVybiAiQyIgYm9vbF90IHhkcl9uZXRuYW1lc3RyKFhEUiAqLCBuZXRuYW1lc3RyKik7CisjZWxpZiBfX1NURENfXyAKK2V4dGVybiAgYm9vbF90IHhkcl9uZXRuYW1lc3RyKFhEUiAqLCBuZXRuYW1lc3RyKik7CisjZWxzZSAvKiBPbGQgU3R5bGUgQyAqLyAKK2Jvb2xfdCB4ZHJfbmV0bmFtZXN0cigpOworI2VuZGlmIC8qIE9sZCBTdHlsZSBDICovIAorCisKK3N0cnVjdCBjcnlwdGtleWFyZyB7CisJbmV0bmFtZXN0ciByZW1vdGVuYW1lOworCWRlc19ibG9jayBkZXNrZXk7Cit9OwordHlwZWRlZiBzdHJ1Y3QgY3J5cHRrZXlhcmcgY3J5cHRrZXlhcmc7CisjaWZkZWYgX19jcGx1c3BsdXMgCitleHRlcm4gIkMiIGJvb2xfdCB4ZHJfY3J5cHRrZXlhcmcoWERSICosIGNyeXB0a2V5YXJnKik7CisjZWxpZiBfX1NURENfXyAKK2V4dGVybiAgYm9vbF90IHhkcl9jcnlwdGtleWFyZyhYRFIgKiwgY3J5cHRrZXlhcmcqKTsKKyNlbHNlIC8qIE9sZCBTdHlsZSBDICovIAorYm9vbF90IHhkcl9jcnlwdGtleWFyZygpOworI2VuZGlmIC8qIE9sZCBTdHlsZSBDICovIAorCisKK3N0cnVjdCBjcnlwdGtleWFyZzIgeworCW5ldG5hbWVzdHIgcmVtb3RlbmFtZTsKKwluZXRvYmogcmVtb3Rla2V5OworCWRlc19ibG9jayBkZXNrZXk7Cit9OwordHlwZWRlZiBzdHJ1Y3QgY3J5cHRrZXlhcmcyIGNyeXB0a2V5YXJnMjsKKyNpZmRlZiBfX2NwbHVzcGx1cyAKK2V4dGVybiAiQyIgYm9vbF90IHhkcl9jcnlwdGtleWFyZzIoWERSICosIGNyeXB0a2V5YXJnMiopOworI2VsaWYgX19TVERDX18gCitleHRlcm4gIGJvb2xfdCB4ZHJfY3J5cHRrZXlhcmcyKFhEUiAqLCBjcnlwdGtleWFyZzIqKTsKKyNlbHNlIC8qIE9sZCBTdHlsZSBDICovIAorYm9vbF90IHhkcl9jcnlwdGtleWFyZzIoKTsKKyNlbmRpZiAvKiBPbGQgU3R5bGUgQyAqLyAKKworCitzdHJ1Y3QgY3J5cHRrZXlyZXMgeworCWtleXN0YXR1cyBzdGF0dXM7CisJdW5pb24geworCQlkZXNfYmxvY2sgZGVza2V5OworCX0gY3J5cHRrZXlyZXNfdTsKK307Cit0eXBlZGVmIHN0cnVjdCBjcnlwdGtleXJlcyBjcnlwdGtleXJlczsKKyNpZmRlZiBfX2NwbHVzcGx1cyAKK2V4dGVybiAiQyIgYm9vbF90IHhkcl9jcnlwdGtleXJlcyhYRFIgKiwgY3J5cHRrZXlyZXMqKTsKKyNlbGlmIF9fU1REQ19fIAorZXh0ZXJuICBib29sX3QgeGRyX2NyeXB0a2V5cmVzKFhEUiAqLCBjcnlwdGtleXJlcyopOworI2Vsc2UgLyogT2xkIFN0eWxlIEMgKi8gCitib29sX3QgeGRyX2NyeXB0a2V5cmVzKCk7CisjZW5kaWYgLyogT2xkIFN0eWxlIEMgKi8gCisKKyNkZWZpbmUgTUFYR0lEUyAxNgorCitzdHJ1Y3QgdW5peGNyZWQgeworCXVfaW50IHVpZDsKKwl1X2ludCBnaWQ7CisJc3RydWN0IHsKKwkJdV9pbnQgZ2lkc19sZW47CisJCXVfaW50ICpnaWRzX3ZhbDsKKwl9IGdpZHM7Cit9OwordHlwZWRlZiBzdHJ1Y3QgdW5peGNyZWQgdW5peGNyZWQ7CisjaWZkZWYgX19jcGx1c3BsdXMgCitleHRlcm4gIkMiIGJvb2xfdCB4ZHJfdW5peGNyZWQoWERSICosIHVuaXhjcmVkKik7CisjZWxpZiBfX1NURENfXyAKK2V4dGVybiAgYm9vbF90IHhkcl91bml4Y3JlZChYRFIgKiwgdW5peGNyZWQqKTsKKyNlbHNlIC8qIE9sZCBTdHlsZSBDICovIAorYm9vbF90IHhkcl91bml4Y3JlZCgpOworI2VuZGlmIC8qIE9sZCBTdHlsZSBDICovIAorCisKK3N0cnVjdCBnZXRjcmVkcmVzIHsKKwlrZXlzdGF0dXMgc3RhdHVzOworCXVuaW9uIHsKKwkJdW5peGNyZWQgY3JlZDsKKwl9IGdldGNyZWRyZXNfdTsKK307Cit0eXBlZGVmIHN0cnVjdCBnZXRjcmVkcmVzIGdldGNyZWRyZXM7CisjaWZkZWYgX19jcGx1c3BsdXMgCitleHRlcm4gIkMiIGJvb2xfdCB4ZHJfZ2V0Y3JlZHJlcyhYRFIgKiwgZ2V0Y3JlZHJlcyopOworI2VsaWYgX19TVERDX18gCitleHRlcm4gIGJvb2xfdCB4ZHJfZ2V0Y3JlZHJlcyhYRFIgKiwgZ2V0Y3JlZHJlcyopOworI2Vsc2UgLyogT2xkIFN0eWxlIEMgKi8gCitib29sX3QgeGRyX2dldGNyZWRyZXMoKTsKKyNlbmRpZiAvKiBPbGQgU3R5bGUgQyAqLyAKKworCitzdHJ1Y3Qga2V5X25ldHN0YXJnIHsKKwlrZXlidWYgc3RfcHJpdl9rZXk7CisJa2V5YnVmIHN0X3B1Yl9rZXk7CisJbmV0bmFtZXN0ciBzdF9uZXRuYW1lOworfTsKK3R5cGVkZWYgc3RydWN0IGtleV9uZXRzdGFyZyBrZXlfbmV0c3Rhcmc7CisjaWZkZWYgX19jcGx1c3BsdXMgCitleHRlcm4gIkMiIGJvb2xfdCB4ZHJfa2V5X25ldHN0YXJnKFhEUiAqLCBrZXlfbmV0c3RhcmcqKTsKKyNlbGlmIF9fU1REQ19fIAorZXh0ZXJuICBib29sX3QgeGRyX2tleV9uZXRzdGFyZyhYRFIgKiwga2V5X25ldHN0YXJnKik7CisjZWxzZSAvKiBPbGQgU3R5bGUgQyAqLyAKK2Jvb2xfdCB4ZHJfa2V5X25ldHN0YXJnKCk7CisjZW5kaWYgLyogT2xkIFN0eWxlIEMgKi8gCisKKworc3RydWN0IGtleV9uZXRzdHJlcyB7CisJa2V5c3RhdHVzIHN0YXR1czsKKwl1bmlvbiB7CisJCWtleV9uZXRzdGFyZyBrbmV0OworCX0ga2V5X25ldHN0cmVzX3U7Cit9OwordHlwZWRlZiBzdHJ1Y3Qga2V5X25ldHN0cmVzIGtleV9uZXRzdHJlczsKKyNpZmRlZiBfX2NwbHVzcGx1cyAKK2V4dGVybiAiQyIgYm9vbF90IHhkcl9rZXlfbmV0c3RyZXMoWERSICosIGtleV9uZXRzdHJlcyopOworI2VsaWYgX19TVERDX18gCitleHRlcm4gIGJvb2xfdCB4ZHJfa2V5X25ldHN0cmVzKFhEUiAqLCBrZXlfbmV0c3RyZXMqKTsKKyNlbHNlIC8qIE9sZCBTdHlsZSBDICovIAorYm9vbF90IHhkcl9rZXlfbmV0c3RyZXMoKTsKKyNlbmRpZiAvKiBPbGQgU3R5bGUgQyAqLyAKKworCisjaWZuZGVmIG9wYXF1ZQorI2RlZmluZSBvcGFxdWUgY2hhcgorI2VuZGlmCisKKworI2RlZmluZSBLRVlfUFJPRyAoKHVfbG9uZykxMDAwMjkpCisjZGVmaW5lIEtFWV9WRVJTICgodV9sb25nKTEpCisKKyNpZmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBLRVlfU0VUICgodV9sb25nKTEpCitleHRlcm4gIkMiIGtleXN0YXR1cyAqIGtleV9zZXRfMShvcGFxdWUgKiwgQ0xJRU5UICopOworZXh0ZXJuICJDIiBrZXlzdGF0dXMgKiBrZXlfc2V0XzFfc3ZjKG9wYXF1ZSAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKTsKKyNkZWZpbmUgS0VZX0VOQ1JZUFQgKCh1X2xvbmcpMikKK2V4dGVybiAiQyIgY3J5cHRrZXlyZXMgKiBrZXlfZW5jcnlwdF8xKGNyeXB0a2V5YXJnICosIENMSUVOVCAqKTsKK2V4dGVybiAiQyIgY3J5cHRrZXlyZXMgKiBrZXlfZW5jcnlwdF8xX3N2YyhjcnlwdGtleWFyZyAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKTsKKyNkZWZpbmUgS0VZX0RFQ1JZUFQgKCh1X2xvbmcpMykKK2V4dGVybiAiQyIgY3J5cHRrZXlyZXMgKiBrZXlfZGVjcnlwdF8xKGNyeXB0a2V5YXJnICosIENMSUVOVCAqKTsKK2V4dGVybiAiQyIgY3J5cHRrZXlyZXMgKiBrZXlfZGVjcnlwdF8xX3N2YyhjcnlwdGtleWFyZyAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKTsKKyNkZWZpbmUgS0VZX0dFTiAoKHVfbG9uZyk0KQorZXh0ZXJuICJDIiBkZXNfYmxvY2sgKiBrZXlfZ2VuXzEodm9pZCAqLCBDTElFTlQgKik7CitleHRlcm4gIkMiIGRlc19ibG9jayAqIGtleV9nZW5fMV9zdmModm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKTsKKyNkZWZpbmUgS0VZX0dFVENSRUQgKCh1X2xvbmcpNSkKK2V4dGVybiAiQyIgZ2V0Y3JlZHJlcyAqIGtleV9nZXRjcmVkXzEobmV0bmFtZXN0ciAqLCBDTElFTlQgKik7CitleHRlcm4gIkMiIGdldGNyZWRyZXMgKiBrZXlfZ2V0Y3JlZF8xX3N2YyhuZXRuYW1lc3RyICosIHN0cnVjdCBzdmNfcmVxICopOworCisjZWxpZiBfX1NURENfXworI2RlZmluZSBLRVlfU0VUICgodV9sb25nKTEpCitleHRlcm4gIGtleXN0YXR1cyAqIGtleV9zZXRfMShvcGFxdWUgKiwgQ0xJRU5UICopOworZXh0ZXJuICBrZXlzdGF0dXMgKiBrZXlfc2V0XzFfc3ZjKG9wYXF1ZSAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKTsKKyNkZWZpbmUgS0VZX0VOQ1JZUFQgKCh1X2xvbmcpMikKK2V4dGVybiAgY3J5cHRrZXlyZXMgKiBrZXlfZW5jcnlwdF8xKGNyeXB0a2V5YXJnICosIENMSUVOVCAqKTsKK2V4dGVybiAgY3J5cHRrZXlyZXMgKiBrZXlfZW5jcnlwdF8xX3N2YyhjcnlwdGtleWFyZyAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKTsKKyNkZWZpbmUgS0VZX0RFQ1JZUFQgKCh1X2xvbmcpMykKK2V4dGVybiAgY3J5cHRrZXlyZXMgKiBrZXlfZGVjcnlwdF8xKGNyeXB0a2V5YXJnICosIENMSUVOVCAqKTsKK2V4dGVybiAgY3J5cHRrZXlyZXMgKiBrZXlfZGVjcnlwdF8xX3N2YyhjcnlwdGtleWFyZyAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKTsKKyNkZWZpbmUgS0VZX0dFTiAoKHVfbG9uZyk0KQorZXh0ZXJuICBkZXNfYmxvY2sgKiBrZXlfZ2VuXzEodm9pZCAqLCBDTElFTlQgKik7CitleHRlcm4gIGRlc19ibG9jayAqIGtleV9nZW5fMV9zdmModm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKTsKKyNkZWZpbmUgS0VZX0dFVENSRUQgKCh1X2xvbmcpNSkKK2V4dGVybiAgZ2V0Y3JlZHJlcyAqIGtleV9nZXRjcmVkXzEobmV0bmFtZXN0ciAqLCBDTElFTlQgKik7CitleHRlcm4gIGdldGNyZWRyZXMgKiBrZXlfZ2V0Y3JlZF8xX3N2YyhuZXRuYW1lc3RyICosIHN0cnVjdCBzdmNfcmVxICopOworCisjZWxzZSAvKiBPbGQgU3R5bGUgQyAqLyAKKyNkZWZpbmUgS0VZX1NFVCAoKHVfbG9uZykxKQorZXh0ZXJuICBrZXlzdGF0dXMgKiBrZXlfc2V0XzEoKTsKK2V4dGVybiAga2V5c3RhdHVzICoga2V5X3NldF8xX3N2YygpOworI2RlZmluZSBLRVlfRU5DUllQVCAoKHVfbG9uZykyKQorZXh0ZXJuICBjcnlwdGtleXJlcyAqIGtleV9lbmNyeXB0XzEoKTsKK2V4dGVybiAgY3J5cHRrZXlyZXMgKiBrZXlfZW5jcnlwdF8xX3N2YygpOworI2RlZmluZSBLRVlfREVDUllQVCAoKHVfbG9uZykzKQorZXh0ZXJuICBjcnlwdGtleXJlcyAqIGtleV9kZWNyeXB0XzEoKTsKK2V4dGVybiAgY3J5cHRrZXlyZXMgKiBrZXlfZGVjcnlwdF8xX3N2YygpOworI2RlZmluZSBLRVlfR0VOICgodV9sb25nKTQpCitleHRlcm4gIGRlc19ibG9jayAqIGtleV9nZW5fMSgpOworZXh0ZXJuICBkZXNfYmxvY2sgKiBrZXlfZ2VuXzFfc3ZjKCk7CisjZGVmaW5lIEtFWV9HRVRDUkVEICgodV9sb25nKTUpCitleHRlcm4gIGdldGNyZWRyZXMgKiBrZXlfZ2V0Y3JlZF8xKCk7CitleHRlcm4gIGdldGNyZWRyZXMgKiBrZXlfZ2V0Y3JlZF8xX3N2YygpOworI2VuZGlmIC8qIE9sZCBTdHlsZSBDICovIAorI2RlZmluZSBLRVlfVkVSUzIgKCh1X2xvbmcpMikKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIGtleXN0YXR1cyAqIGtleV9zZXRfMihvcGFxdWUgKiwgQ0xJRU5UICopOworZXh0ZXJuICJDIiBrZXlzdGF0dXMgKiBrZXlfc2V0XzJfc3ZjKG9wYXF1ZSAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKTsKK2V4dGVybiAiQyIgY3J5cHRrZXlyZXMgKiBrZXlfZW5jcnlwdF8yKGNyeXB0a2V5YXJnICosIENMSUVOVCAqKTsKK2V4dGVybiAiQyIgY3J5cHRrZXlyZXMgKiBrZXlfZW5jcnlwdF8yX3N2YyhjcnlwdGtleWFyZyAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKTsKK2V4dGVybiAiQyIgY3J5cHRrZXlyZXMgKiBrZXlfZGVjcnlwdF8yKGNyeXB0a2V5YXJnICosIENMSUVOVCAqKTsKK2V4dGVybiAiQyIgY3J5cHRrZXlyZXMgKiBrZXlfZGVjcnlwdF8yX3N2YyhjcnlwdGtleWFyZyAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKTsKK2V4dGVybiAiQyIgZGVzX2Jsb2NrICoga2V5X2dlbl8yKHZvaWQgKiwgQ0xJRU5UICopOworZXh0ZXJuICJDIiBkZXNfYmxvY2sgKiBrZXlfZ2VuXzJfc3ZjKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKik7CitleHRlcm4gIkMiIGdldGNyZWRyZXMgKiBrZXlfZ2V0Y3JlZF8yKG5ldG5hbWVzdHIgKiwgQ0xJRU5UICopOworZXh0ZXJuICJDIiBnZXRjcmVkcmVzICoga2V5X2dldGNyZWRfMl9zdmMobmV0bmFtZXN0ciAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKTsKKyNkZWZpbmUgS0VZX0VOQ1JZUFRfUEsgKCh1X2xvbmcpNikKK2V4dGVybiAiQyIgY3J5cHRrZXlyZXMgKiBrZXlfZW5jcnlwdF9wa18yKGNyeXB0a2V5YXJnMiAqLCBDTElFTlQgKik7CitleHRlcm4gIkMiIGNyeXB0a2V5cmVzICoga2V5X2VuY3J5cHRfcGtfMl9zdmMoY3J5cHRrZXlhcmcyICosIHN0cnVjdCBzdmNfcmVxICopOworI2RlZmluZSBLRVlfREVDUllQVF9QSyAoKHVfbG9uZyk3KQorZXh0ZXJuICJDIiBjcnlwdGtleXJlcyAqIGtleV9kZWNyeXB0X3BrXzIoY3J5cHRrZXlhcmcyICosIENMSUVOVCAqKTsKK2V4dGVybiAiQyIgY3J5cHRrZXlyZXMgKiBrZXlfZGVjcnlwdF9wa18yX3N2YyhjcnlwdGtleWFyZzIgKiwgc3RydWN0IHN2Y19yZXEgKik7CisjZGVmaW5lIEtFWV9ORVRfUFVUICgodV9sb25nKTgpCitleHRlcm4gIkMiIGtleXN0YXR1cyAqIGtleV9uZXRfcHV0XzIoa2V5X25ldHN0YXJnICosIENMSUVOVCAqKTsKK2V4dGVybiAiQyIga2V5c3RhdHVzICoga2V5X25ldF9wdXRfMl9zdmMoa2V5X25ldHN0YXJnICosIHN0cnVjdCBzdmNfcmVxICopOworI2RlZmluZSBLRVlfTkVUX0dFVCAoKHVfbG9uZyk5KQorZXh0ZXJuICJDIiBrZXlfbmV0c3RyZXMgKiBrZXlfbmV0X2dldF8yKHZvaWQgKiwgQ0xJRU5UICopOworZXh0ZXJuICJDIiBrZXlfbmV0c3RyZXMgKiBrZXlfbmV0X2dldF8yX3N2Yyh2b2lkICosIHN0cnVjdCBzdmNfcmVxICopOworI2RlZmluZSBLRVlfR0VUX0NPTlYgKCh1X2xvbmcpMTApCitleHRlcm4gIkMiIGNyeXB0a2V5cmVzICoga2V5X2dldF9jb252XzIob3BhcXVlICosIENMSUVOVCAqKTsKK2V4dGVybiAiQyIgY3J5cHRrZXlyZXMgKiBrZXlfZ2V0X2NvbnZfMl9zdmMob3BhcXVlICosIHN0cnVjdCBzdmNfcmVxICopOworCisjZWxpZiBfX1NURENfXworZXh0ZXJuICBrZXlzdGF0dXMgKiBrZXlfc2V0XzIob3BhcXVlICosIENMSUVOVCAqKTsKK2V4dGVybiAga2V5c3RhdHVzICoga2V5X3NldF8yX3N2YyhvcGFxdWUgKiwgc3RydWN0IHN2Y19yZXEgKik7CitleHRlcm4gIGNyeXB0a2V5cmVzICoga2V5X2VuY3J5cHRfMihjcnlwdGtleWFyZyAqLCBDTElFTlQgKik7CitleHRlcm4gIGNyeXB0a2V5cmVzICoga2V5X2VuY3J5cHRfMl9zdmMoY3J5cHRrZXlhcmcgKiwgc3RydWN0IHN2Y19yZXEgKik7CitleHRlcm4gIGNyeXB0a2V5cmVzICoga2V5X2RlY3J5cHRfMihjcnlwdGtleWFyZyAqLCBDTElFTlQgKik7CitleHRlcm4gIGNyeXB0a2V5cmVzICoga2V5X2RlY3J5cHRfMl9zdmMoY3J5cHRrZXlhcmcgKiwgc3RydWN0IHN2Y19yZXEgKik7CitleHRlcm4gIGRlc19ibG9jayAqIGtleV9nZW5fMih2b2lkICosIENMSUVOVCAqKTsKK2V4dGVybiAgZGVzX2Jsb2NrICoga2V5X2dlbl8yX3N2Yyh2b2lkICosIHN0cnVjdCBzdmNfcmVxICopOworZXh0ZXJuICBnZXRjcmVkcmVzICoga2V5X2dldGNyZWRfMihuZXRuYW1lc3RyICosIENMSUVOVCAqKTsKK2V4dGVybiAgZ2V0Y3JlZHJlcyAqIGtleV9nZXRjcmVkXzJfc3ZjKG5ldG5hbWVzdHIgKiwgc3RydWN0IHN2Y19yZXEgKik7CisjZGVmaW5lIEtFWV9FTkNSWVBUX1BLICgodV9sb25nKTYpCitleHRlcm4gIGNyeXB0a2V5cmVzICoga2V5X2VuY3J5cHRfcGtfMihjcnlwdGtleWFyZzIgKiwgQ0xJRU5UICopOworZXh0ZXJuICBjcnlwdGtleXJlcyAqIGtleV9lbmNyeXB0X3BrXzJfc3ZjKGNyeXB0a2V5YXJnMiAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKTsKKyNkZWZpbmUgS0VZX0RFQ1JZUFRfUEsgKCh1X2xvbmcpNykKK2V4dGVybiAgY3J5cHRrZXlyZXMgKiBrZXlfZGVjcnlwdF9wa18yKGNyeXB0a2V5YXJnMiAqLCBDTElFTlQgKik7CitleHRlcm4gIGNyeXB0a2V5cmVzICoga2V5X2RlY3J5cHRfcGtfMl9zdmMoY3J5cHRrZXlhcmcyICosIHN0cnVjdCBzdmNfcmVxICopOworI2RlZmluZSBLRVlfTkVUX1BVVCAoKHVfbG9uZyk4KQorZXh0ZXJuICBrZXlzdGF0dXMgKiBrZXlfbmV0X3B1dF8yKGtleV9uZXRzdGFyZyAqLCBDTElFTlQgKik7CitleHRlcm4gIGtleXN0YXR1cyAqIGtleV9uZXRfcHV0XzJfc3ZjKGtleV9uZXRzdGFyZyAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKTsKKyNkZWZpbmUgS0VZX05FVF9HRVQgKCh1X2xvbmcpOSkKK2V4dGVybiAga2V5X25ldHN0cmVzICoga2V5X25ldF9nZXRfMih2b2lkICosIENMSUVOVCAqKTsKK2V4dGVybiAga2V5X25ldHN0cmVzICoga2V5X25ldF9nZXRfMl9zdmModm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKTsKKyNkZWZpbmUgS0VZX0dFVF9DT05WICgodV9sb25nKTEwKQorZXh0ZXJuICBjcnlwdGtleXJlcyAqIGtleV9nZXRfY29udl8yKG9wYXF1ZSAqLCBDTElFTlQgKik7CitleHRlcm4gIGNyeXB0a2V5cmVzICoga2V5X2dldF9jb252XzJfc3ZjKG9wYXF1ZSAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKTsKKworI2Vsc2UgLyogT2xkIFN0eWxlIEMgKi8gCitleHRlcm4gIGtleXN0YXR1cyAqIGtleV9zZXRfMigpOworZXh0ZXJuICBrZXlzdGF0dXMgKiBrZXlfc2V0XzJfc3ZjKCk7CitleHRlcm4gIGNyeXB0a2V5cmVzICoga2V5X2VuY3J5cHRfMigpOworZXh0ZXJuICBjcnlwdGtleXJlcyAqIGtleV9lbmNyeXB0XzJfc3ZjKCk7CitleHRlcm4gIGNyeXB0a2V5cmVzICoga2V5X2RlY3J5cHRfMigpOworZXh0ZXJuICBjcnlwdGtleXJlcyAqIGtleV9kZWNyeXB0XzJfc3ZjKCk7CitleHRlcm4gIGRlc19ibG9jayAqIGtleV9nZW5fMigpOworZXh0ZXJuICBkZXNfYmxvY2sgKiBrZXlfZ2VuXzJfc3ZjKCk7CitleHRlcm4gIGdldGNyZWRyZXMgKiBrZXlfZ2V0Y3JlZF8yKCk7CitleHRlcm4gIGdldGNyZWRyZXMgKiBrZXlfZ2V0Y3JlZF8yX3N2YygpOworI2RlZmluZSBLRVlfRU5DUllQVF9QSyAoKHVfbG9uZyk2KQorZXh0ZXJuICBjcnlwdGtleXJlcyAqIGtleV9lbmNyeXB0X3BrXzIoKTsKK2V4dGVybiAgY3J5cHRrZXlyZXMgKiBrZXlfZW5jcnlwdF9wa18yX3N2YygpOworI2RlZmluZSBLRVlfREVDUllQVF9QSyAoKHVfbG9uZyk3KQorZXh0ZXJuICBjcnlwdGtleXJlcyAqIGtleV9kZWNyeXB0X3BrXzIoKTsKK2V4dGVybiAgY3J5cHRrZXlyZXMgKiBrZXlfZGVjcnlwdF9wa18yX3N2YygpOworI2RlZmluZSBLRVlfTkVUX1BVVCAoKHVfbG9uZyk4KQorZXh0ZXJuICBrZXlzdGF0dXMgKiBrZXlfbmV0X3B1dF8yKCk7CitleHRlcm4gIGtleXN0YXR1cyAqIGtleV9uZXRfcHV0XzJfc3ZjKCk7CisjZGVmaW5lIEtFWV9ORVRfR0VUICgodV9sb25nKTkpCitleHRlcm4gIGtleV9uZXRzdHJlcyAqIGtleV9uZXRfZ2V0XzIoKTsKK2V4dGVybiAga2V5X25ldHN0cmVzICoga2V5X25ldF9nZXRfMl9zdmMoKTsKKyNkZWZpbmUgS0VZX0dFVF9DT05WICgodV9sb25nKTEwKQorZXh0ZXJuICBjcnlwdGtleXJlcyAqIGtleV9nZXRfY29udl8yKCk7CitleHRlcm4gIGNyeXB0a2V5cmVzICoga2V5X2dldF9jb252XzJfc3ZjKCk7CisjZW5kaWYgLyogT2xkIFN0eWxlIEMgKi8gCisKKyNlbmRpZiAvKiAhX0tFWV9QUk9UX0hfUlBDR0VOICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjL25ldGRiLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjL25ldGRiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM5ZDhjMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGMvbmV0ZGIuaApAQCAtMCwwICsxLDc0IEBACisvKiBAKCMpbmV0ZGIuaAkyLjEgODgvMDcvMjkgMy45IFJQQ1NSQyAqLworLyoKKyAqIFN1biBSUEMgaXMgYSBwcm9kdWN0IG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYW5kIGlzIHByb3ZpZGVkIGZvcgorICogdW5yZXN0cmljdGVkIHVzZSBwcm92aWRlZCB0aGF0IHRoaXMgbGVnZW5kIGlzIGluY2x1ZGVkIG9uIGFsbCB0YXBlCisgKiBtZWRpYSBhbmQgYXMgYSBwYXJ0IG9mIHRoZSBzb2Z0d2FyZSBwcm9ncmFtIGluIHdob2xlIG9yIHBhcnQuICBVc2VycworICogbWF5IGNvcHkgb3IgbW9kaWZ5IFN1biBSUEMgd2l0aG91dCBjaGFyZ2UsIGJ1dCBhcmUgbm90IGF1dGhvcml6ZWQKKyAqIHRvIGxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBpdCB0byBhbnlvbmUgZWxzZSBleGNlcHQgYXMgcGFydCBvZiBhIHByb2R1Y3Qgb3IKKyAqIHByb2dyYW0gZGV2ZWxvcGVkIGJ5IHRoZSB1c2VyLgorICoKKyAqIFNVTiBSUEMgSVMgUFJPVklERUQgQVMgSVMgV0lUSCBOTyBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIElOQ0xVRElORyBUSEUKKyAqIFdBUlJBTlRJRVMgT0YgREVTSUdOLCBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSwgT1IgQVJJU0lORyBGUk9NIEEgQ09VUlNFIE9GIERFQUxJTkcsIFVTQUdFIE9SIFRSQURFIFBSQUNUSUNFLgorICoKKyAqIFN1biBSUEMgaXMgcHJvdmlkZWQgd2l0aCBubyBzdXBwb3J0IGFuZCB3aXRob3V0IGFueSBvYmxpZ2F0aW9uIG9uIHRoZQorICogcGFydCBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIHRvIGFzc2lzdCBpbiBpdHMgdXNlLCBjb3JyZWN0aW9uLAorICogbW9kaWZpY2F0aW9uIG9yIGVuaGFuY2VtZW50LgorICoKKyAqIFNVTiBNSUNST1NZU1RFTVMsIElOQy4gU0hBTEwgSEFWRSBOTyBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRQorICogSU5GUklOR0VNRU5UIE9GIENPUFlSSUdIVFMsIFRSQURFIFNFQ1JFVFMgT1IgQU5ZIFBBVEVOVFMgQlkgU1VOIFJQQworICogT1IgQU5ZIFBBUlQgVEhFUkVPRi4KKyAqCisgKiBJbiBubyBldmVudCB3aWxsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYmUgbGlhYmxlIGZvciBhbnkgbG9zdCByZXZlbnVlCisgKiBvciBwcm9maXRzIG9yIG90aGVyIHNwZWNpYWwsIGluZGlyZWN0IGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIGV2ZW4gaWYKKyAqIFN1biBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisgKgorICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogMjU1MCBHYXJjaWEgQXZlbnVlCisgKiBNb3VudGFpbiBWaWV3LCBDYWxpZm9ybmlhICA5NDA0MworICovCisvKglAKCMpcnBjLmggMS44IDg3LzA3LzI0IFNNSQkqLworCisvKiBDbGVhbmVkIHVwIGZvciBHTlUgQyBsaWJyYXJ5IHJvbGFuZEBnbnUuYWkubWl0LmVkdToKKyAgIGFkZGVkIG11bHRpcGxlIGluY2x1c2lvbiBwcm90ZWN0aW9uIGFuZCB1c2Ugb2YgPHN5cy9jZGVmcy5oPi4KKyAgIEluIEdOVSB0aGlzIGZpbGUgaXMgI2luY2x1ZGUnZCBieSA8bmV0ZGIuaD4uICAqLworCisjaWZuZGVmIF9SUENfTkVUREJfSAorI2RlZmluZSBfUlBDX05FVERCX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworI2RlZmluZSBfX25lZWRfc2l6ZV90CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKK19fQkVHSU5fREVDTFMKKworc3RydWN0IHJwY2VudAoreworICBjaGFyICpyX25hbWU7CQkvKiBOYW1lIG9mIHNlcnZlciBmb3IgdGhpcyBycGMgcHJvZ3JhbS4gICovCisgIGNoYXIgKipyX2FsaWFzZXM7CS8qIEFsaWFzIGxpc3QuICAqLworICBpbnQgcl9udW1iZXI7CQkvKiBSUEMgcHJvZ3JhbSBudW1iZXIuICAqLworfTsKKworZXh0ZXJuIHZvaWQgc2V0cnBjZW50IChpbnQgX19zdGF5b3BlbikgX19USFJPVzsKK2V4dGVybiB2b2lkIGVuZHJwY2VudCAodm9pZCkgX19USFJPVzsKK2V4dGVybiBzdHJ1Y3QgcnBjZW50ICpnZXRycGNieW5hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSBfX1RIUk9XOworZXh0ZXJuIHN0cnVjdCBycGNlbnQgKmdldHJwY2J5bnVtYmVyIChpbnQgX19udW1iZXIpIF9fVEhST1c7CitleHRlcm4gc3RydWN0IHJwY2VudCAqZ2V0cnBjZW50ICh2b2lkKSBfX1RIUk9XOworCisjaWZkZWYgX19VU0VfTUlTQworZXh0ZXJuIGludCBnZXRycGNieW5hbWVfciAoX19jb25zdCBjaGFyICpfX25hbWUsIHN0cnVjdCBycGNlbnQgKl9fcmVzdWx0X2J1ZiwKKwkJCSAgIGNoYXIgKl9fYnVmZmVyLCBzaXplX3QgX19idWZsZW4sCisJCQkgICBzdHJ1Y3QgcnBjZW50ICoqX19yZXN1bHQpIF9fVEhST1c7CisKK2V4dGVybiBpbnQgZ2V0cnBjYnludW1iZXJfciAoaW50IF9fbnVtYmVyLCBzdHJ1Y3QgcnBjZW50ICpfX3Jlc3VsdF9idWYsCisJCQkgICAgIGNoYXIgKl9fYnVmZmVyLCBzaXplX3QgX19idWZsZW4sCisJCQkgICAgIHN0cnVjdCBycGNlbnQgKipfX3Jlc3VsdCkgX19USFJPVzsKKworZXh0ZXJuIGludCBnZXRycGNlbnRfciAoc3RydWN0IHJwY2VudCAqX19yZXN1bHRfYnVmLCBjaGFyICpfX2J1ZmZlciwKKwkJCXNpemVfdCBfX2J1Zmxlbiwgc3RydWN0IHJwY2VudCAqKl9fcmVzdWx0KSBfX1RIUk9XOworI2VuZGlmCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBycGMvbmV0ZGIuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwYy9wbWFwX2NsbnQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGMvcG1hcF9jbG50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIxYzQ1MgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGMvcG1hcF9jbG50LmgKQEAgLTAsMCArMSw5OCBAQAorLyogQCgjKXBtYXBfY2xudC5oCTIuMSA4OC8wNy8yOSA0LjAgUlBDU1JDOyBmcm9tIDEuMTEgODgvMDIvMDggU01JICovCisvKgorICogU3VuIFJQQyBpcyBhIHByb2R1Y3Qgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBhbmQgaXMgcHJvdmlkZWQgZm9yCisgKiB1bnJlc3RyaWN0ZWQgdXNlIHByb3ZpZGVkIHRoYXQgdGhpcyBsZWdlbmQgaXMgaW5jbHVkZWQgb24gYWxsIHRhcGUKKyAqIG1lZGlhIGFuZCBhcyBhIHBhcnQgb2YgdGhlIHNvZnR3YXJlIHByb2dyYW0gaW4gd2hvbGUgb3IgcGFydC4gIFVzZXJzCisgKiBtYXkgY29weSBvciBtb2RpZnkgU3VuIFJQQyB3aXRob3V0IGNoYXJnZSwgYnV0IGFyZSBub3QgYXV0aG9yaXplZAorICogdG8gbGljZW5zZSBvciBkaXN0cmlidXRlIGl0IHRvIGFueW9uZSBlbHNlIGV4Y2VwdCBhcyBwYXJ0IG9mIGEgcHJvZHVjdCBvcgorICogcHJvZ3JhbSBkZXZlbG9wZWQgYnkgdGhlIHVzZXIuCisgKgorICogU1VOIFJQQyBJUyBQUk9WSURFRCBBUyBJUyBXSVRIIE5PIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgSU5DTFVESU5HIFRIRQorICogV0FSUkFOVElFUyBPRiBERVNJR04sIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFLCBPUiBBUklTSU5HIEZST00gQSBDT1VSU0UgT0YgREVBTElORywgVVNBR0UgT1IgVFJBREUgUFJBQ1RJQ0UuCisgKgorICogU3VuIFJQQyBpcyBwcm92aWRlZCB3aXRoIG5vIHN1cHBvcnQgYW5kIHdpdGhvdXQgYW55IG9ibGlnYXRpb24gb24gdGhlCisgKiBwYXJ0IG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gdG8gYXNzaXN0IGluIGl0cyB1c2UsIGNvcnJlY3Rpb24sCisgKiBtb2RpZmljYXRpb24gb3IgZW5oYW5jZW1lbnQuCisgKgorICogU1VOIE1JQ1JPU1lTVEVNUywgSU5DLiBTSEFMTCBIQVZFIE5PIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFCisgKiBJTkZSSU5HRU1FTlQgT0YgQ09QWVJJR0hUUywgVFJBREUgU0VDUkVUUyBPUiBBTlkgUEFURU5UUyBCWSBTVU4gUlBDCisgKiBPUiBBTlkgUEFSVCBUSEVSRU9GLgorICoKKyAqIEluIG5vIGV2ZW50IHdpbGwgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBiZSBsaWFibGUgZm9yIGFueSBsb3N0IHJldmVudWUKKyAqIG9yIHByb2ZpdHMgb3Igb3RoZXIgc3BlY2lhbCwgaW5kaXJlY3QgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgZXZlbiBpZgorICogU3VuIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKyAqCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiAyNTUwIEdhcmNpYSBBdmVudWUKKyAqIE1vdW50YWluIFZpZXcsIENhbGlmb3JuaWEgIDk0MDQzCisgKi8KKworLyoKKyAqIHBtYXBfY2xudC5oCisgKiBTdXBwbGllcyBDIHJvdXRpbmVzIHRvIGdldCB0byBwb3J0bWFwIHNlcnZpY2VzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk4NCwgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICovCisKKyNpZm5kZWYgX1JQQ19QTUFQX0NMTlRfSAorI2RlZmluZSBfUlBDX1BNQVBfQ0xOVF9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaW5jbHVkZSA8cnBjL3R5cGVzLmg+CisjaW5jbHVkZSA8cnBjL3hkci5oPgorI2luY2x1ZGUgPHJwYy9jbG50Lmg+CisKK19fQkVHSU5fREVDTFMKKwordHlwZWRlZiBib29sX3QgKCpyZXN1bHRwcm9jX3QpIChjYWRkcl90IHJlc3AsIHN0cnVjdCBzb2NrYWRkcl9pbiAqcmFkZHIpOworCisvKgorICogVXNhZ2U6CisgKglzdWNjZXNzID0gcG1hcF9zZXQocHJvZ3JhbSwgdmVyc2lvbiwgcHJvdG9jb2wsIHBvcnQpOworICoJc3VjY2VzcyA9IHBtYXBfdW5zZXQocHJvZ3JhbSwgdmVyc2lvbik7CisgKglwb3J0ID0gcG1hcF9nZXRwb3J0KGFkZHJlc3MsIHByb2dyYW0sIHZlcnNpb24sIHByb3RvY29sKTsKKyAqCWhlYWQgPSBwbWFwX2dldG1hcHMoYWRkcmVzcyk7CisgKgljbG50X3N0YXQgPSBwbWFwX3JtdGNhbGwoYWRkcmVzcywgcHJvZ3JhbSwgdmVyc2lvbiwgcHJvY2VkdXJlLAorICoJCXhkcmFyZ3MsIGFyZ3NwLCB4ZHJyZXMsIHJlc3AsIHRvdXQsIHBvcnRfcHRyKQorICoJCSh3b3JrcyBmb3IgdWRwIG9ubHkuKQorICogCWNsbnRfc3RhdCA9IGNsbnRfYnJvYWRjYXN0KHByb2dyYW0sIHZlcnNpb24sIHByb2NlZHVyZSwKKyAqCQl4ZHJhcmdzLCBhcmdzcCwJeGRycmVzLCByZXNwLCBlYWNocmVzdWx0KQorICoJCShsaWtlIHBtYXBfcm10Y2FsbCwgZXhjZXB0IHRoZSBjYWxsIGlzIGJyb2FkY2FzdGVkIHRvIGFsbAorICoJCWxvY2FsbHkgY29ubmVjdGVkIG5ldHMuICBGb3IgZWFjaCB2YWxpZCByZXNwb25zZSByZWNlaXZlZCwKKyAqCQl0aGUgcHJvY2VkdXJlIGVhY2hyZXN1bHQgaXMgY2FsbGVkLiAgSXRzIGZvcm0gaXM6CisgKglkb25lID0gZWFjaHJlc3VsdChyZXNwLCByYWRkcikKKyAqCQlib29sX3QgZG9uZTsKKyAqCQljYWRkcl90IHJlc3A7CisgKgkJc3RydWN0IHNvY2thZGRyX2luIHJhZGRyOworICoJCXdoZXJlIHJlc3AgcG9pbnRzIHRvIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsIGFuZCByYWRkciBpcyB0aGUKKyAqCQlhZGRyZXNzIGlmIHRoZSByZXNwb25kZXIgdG8gdGhlIGJyb2FkY2FzdC4KKyAqLworCitleHRlcm4gYm9vbF90IHBtYXBfc2V0IChfX2NvbnN0IHVfbG9uZyBfX3Byb2dyYW0sIF9fY29uc3QgdV9sb25nIF9fdmVycywKKwkJCWludCBfX3Byb3RvY29sLCB1X3Nob3J0IF9fcG9ydCkgX19USFJPVzsKK2V4dGVybiBib29sX3QgcG1hcF91bnNldCAoX19jb25zdCB1X2xvbmcgX19wcm9ncmFtLCBfX2NvbnN0IHVfbG9uZyBfX3ZlcnMpCisgICAgIF9fVEhST1c7CitleHRlcm4gc3RydWN0IHBtYXBsaXN0ICpwbWFwX2dldG1hcHMgKHN0cnVjdCBzb2NrYWRkcl9pbiAqX19hZGRyZXNzKSBfX1RIUk9XOworZXh0ZXJuIGVudW0gY2xudF9zdGF0IHBtYXBfcm10Y2FsbCAoc3RydWN0IHNvY2thZGRyX2luICpfX2FkZHIsCisJCQkJICAgIF9fY29uc3QgdV9sb25nIF9fcHJvZywKKwkJCQkgICAgX19jb25zdCB1X2xvbmcgX192ZXJzLAorCQkJCSAgICBfX2NvbnN0IHVfbG9uZyBfX3Byb2MsCisJCQkJICAgIHhkcnByb2NfdCBfX3hkcmFyZ3MsCisJCQkJICAgIGNhZGRyX3QgX19hcmdzcCwgeGRycHJvY190IF9feGRycmVzLAorCQkJCSAgICBjYWRkcl90IF9fcmVzcCwgc3RydWN0IHRpbWV2YWwgX190b3V0LAorCQkJCSAgICB1X2xvbmcgKl9fcG9ydF9wdHIpIF9fVEhST1c7CitleHRlcm4gZW51bSBjbG50X3N0YXQgY2xudF9icm9hZGNhc3QgKF9fY29uc3QgdV9sb25nIF9fcHJvZywKKwkJCQkgICAgICBfX2NvbnN0IHVfbG9uZyBfX3ZlcnMsCisJCQkJICAgICAgX19jb25zdCB1X2xvbmcgX19wcm9jLCB4ZHJwcm9jX3QgX194YXJncywKKwkJCQkgICAgICBjYWRkcl90IF9fYXJnc3AsIHhkcnByb2NfdCBfX3hyZXN1bHRzLAorCQkJCSAgICAgIGNhZGRyX3QgX19yZXN1bHRzcCwKKwkJCQkgICAgICByZXN1bHRwcm9jX3QgX19lYWNocmVzdWx0KSBfX1RIUk9XOworZXh0ZXJuIHVfc2hvcnQgcG1hcF9nZXRwb3J0IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKl9fYWRkcmVzcywKKwkJCSAgICAgX19jb25zdCB1X2xvbmcgX19wcm9ncmFtLAorCQkJICAgICBfX2NvbnN0IHVfbG9uZyBfX3ZlcnNpb24sIHVfaW50IF9fcHJvdG9jb2wpCisgICAgIF9fVEhST1c7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBycGMvcG1hcF9jbG50LmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGMvcG1hcF9wcm90LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjL3BtYXBfcHJvdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNjRlMzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjL3BtYXBfcHJvdC5oCkBAIC0wLDAgKzEsMTA4IEBACisvKiBAKCMpcG1hcF9wcm90LmgJMi4xIDg4LzA3LzI5IDQuMCBSUENTUkM7IGZyb20gMS4xNCA4OC8wMi8wOCBTTUkgKi8KKy8qCisgKiBTdW4gUlBDIGlzIGEgcHJvZHVjdCBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGFuZCBpcyBwcm92aWRlZCBmb3IKKyAqIHVucmVzdHJpY3RlZCB1c2UgcHJvdmlkZWQgdGhhdCB0aGlzIGxlZ2VuZCBpcyBpbmNsdWRlZCBvbiBhbGwgdGFwZQorICogbWVkaWEgYW5kIGFzIGEgcGFydCBvZiB0aGUgc29mdHdhcmUgcHJvZ3JhbSBpbiB3aG9sZSBvciBwYXJ0LiAgVXNlcnMKKyAqIG1heSBjb3B5IG9yIG1vZGlmeSBTdW4gUlBDIHdpdGhvdXQgY2hhcmdlLCBidXQgYXJlIG5vdCBhdXRob3JpemVkCisgKiB0byBsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgaXQgdG8gYW55b25lIGVsc2UgZXhjZXB0IGFzIHBhcnQgb2YgYSBwcm9kdWN0IG9yCisgKiBwcm9ncmFtIGRldmVsb3BlZCBieSB0aGUgdXNlci4KKyAqCisgKiBTVU4gUlBDIElTIFBST1ZJREVEIEFTIElTIFdJVEggTk8gV0FSUkFOVElFUyBPRiBBTlkgS0lORCBJTkNMVURJTkcgVEhFCisgKiBXQVJSQU5USUVTIE9GIERFU0lHTiwgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UsIE9SIEFSSVNJTkcgRlJPTSBBIENPVVJTRSBPRiBERUFMSU5HLCBVU0FHRSBPUiBUUkFERSBQUkFDVElDRS4KKyAqCisgKiBTdW4gUlBDIGlzIHByb3ZpZGVkIHdpdGggbm8gc3VwcG9ydCBhbmQgd2l0aG91dCBhbnkgb2JsaWdhdGlvbiBvbiB0aGUKKyAqIHBhcnQgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiB0byBhc3Npc3QgaW4gaXRzIHVzZSwgY29ycmVjdGlvbiwKKyAqIG1vZGlmaWNhdGlvbiBvciBlbmhhbmNlbWVudC4KKyAqCisgKiBTVU4gTUlDUk9TWVNURU1TLCBJTkMuIFNIQUxMIEhBVkUgTk8gTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUKKyAqIElORlJJTkdFTUVOVCBPRiBDT1BZUklHSFRTLCBUUkFERSBTRUNSRVRTIE9SIEFOWSBQQVRFTlRTIEJZIFNVTiBSUEMKKyAqIE9SIEFOWSBQQVJUIFRIRVJFT0YuCisgKgorICogSW4gbm8gZXZlbnQgd2lsbCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJlIGxpYWJsZSBmb3IgYW55IGxvc3QgcmV2ZW51ZQorICogb3IgcHJvZml0cyBvciBvdGhlciBzcGVjaWFsLCBpbmRpcmVjdCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBldmVuIGlmCisgKiBTdW4gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorICoKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIDI1NTAgR2FyY2lhIEF2ZW51ZQorICogTW91bnRhaW4gVmlldywgQ2FsaWZvcm5pYSAgOTQwNDMKKyAqLworCisvKgorICogcG1hcF9wcm90LmgKKyAqIFByb3RvY29sIGZvciB0aGUgbG9jYWwgYmluZGVyIHNlcnZpY2UsIG9yIHBtYXAuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTg0LCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKi8KKworI2lmbmRlZiBfUlBDX1BNQVBfUFJPVF9ICisjZGVmaW5lIF9SUENfUE1BUF9QUk9UX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgPHJwYy94ZHIuaD4KKworX19CRUdJTl9ERUNMUworCisvKiBUaGUgZm9sbG93aW5nIHByb2NlZHVyZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgcHJvdG9jb2w6CisgKgorICogUE1BUFBST0NfTlVMTCgpIHJldHVybnMgKCkKKyAqIAl0YWtlcyBub3RoaW5nLCByZXR1cm5zIG5vdGhpbmcKKyAqCisgKiBQTUFQUFJPQ19TRVQoc3RydWN0IHBtYXApIHJldHVybnMgKGJvb2xfdCkKKyAqIAlUUlVFIGlzIHN1Y2Nlc3MsIEZBTFNFIGlzIGZhaWx1cmUuICBSZWdpc3RlcnMgdGhlIHR1cGxlCisgKglbcHJvZywgdmVycywgcHJvdCwgcG9ydF0uCisgKgorICogUE1BUFBST0NfVU5TRVQoc3RydWN0IHBtYXApIHJldHVybnMgKGJvb2xfdCkKKyAqCVRSVUUgaXMgc3VjY2VzcywgRkFMU0UgaXMgZmFpbHVyZS4gIFVuLXJlZ2lzdGVycyBwYWlyCisgKglbcHJvZywgdmVyc10uICBwcm90IGFuZCBwb3J0IGFyZSBpZ25vcmVkLgorICoKKyAqIFBNQVBQUk9DX0dFVFBPUlQoc3RydWN0IHBtYXApIHJldHVybnMgKGxvbmcgdW5zaWduZWQpLgorICoJMCBpcyBmYWlsdXJlLiAgT3RoZXJ3aXNlIHJldHVybnMgdGhlIHBvcnQgbnVtYmVyIHdoZXJlIHRoZSBwYWlyCisgKglbcHJvZywgdmVyc10gaXMgcmVnaXN0ZXJlZC4gIEl0IG1heSBsaWUhCisgKgorICogUE1BUFBST0NfRFVNUCgpIFJFVFVSTlMgKHN0cnVjdCBwbWFwbGlzdCAqKQorICoKKyAqIFBNQVBQUk9DX0NBTExJVCh1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCBzdHJpbmc8PikKKyAqIAlSRVRVUk5TIChwb3J0LCBzdHJpbmc8Pik7CisgKiB1c2FnZTogZW5jYXBzdWxhdGVkcmVzdWx0cyA9IFBNQVBQUk9DX0NBTExJVChwcm9nLCB2ZXJzLCBwcm9jLCBlbmNhcHN1bGF0ZWRhcmdzKTsKKyAqIAlDYWxscyB0aGUgcHJvY2VkdXJlIG9uIHRoZSBsb2NhbCBtYWNoaW5lLiAgSWYgaXQgaXMgbm90IHJlZ2lzdGVyZWQsCisgKgl0aGlzIHByb2NlZHVyZSBpcyBxdWl0ZTsgaWUgaXQgZG9lcyBub3QgcmV0dXJuIGVycm9yIGluZm9ybWF0aW9uISEhCisgKglUaGlzIHByb2NlZHVyZSBvbmx5IGlzIHN1cHBvcnRlZCBvbiBycGMvdWRwIGFuZCBjYWxscyB2aWEKKyAqCXJwYy91ZHAuICBUaGlzIHJvdXRpbmUgb25seSBwYXNzZXMgbnVsbCBhdXRoZW50aWNhdGlvbiBwYXJhbWV0ZXJzLgorICoJVGhpcyBmaWxlIGhhcyBubyBpbnRlcmZhY2UgdG8geGRyIHJvdXRpbmVzIGZvciBQTUFQUFJPQ19DQUxMSVQuCisgKgorICogVGhlIHNlcnZpY2Ugc3VwcG9ydHMgcmVtb3RlIHByb2NlZHVyZSBjYWxscyBvbiB1ZHAvaXAgb3IgdGNwL2lwIHNvY2tldCAxMTEuCisgKi8KKworI2RlZmluZSBQTUFQUE9SVAkJKCh1X3Nob3J0KTExMSkKKyNkZWZpbmUgUE1BUFBST0cJCSgodV9sb25nKTEwMDAwMCkKKyNkZWZpbmUgUE1BUFZFUlMJCSgodV9sb25nKTIpCisjZGVmaW5lIFBNQVBWRVJTX1BST1RPCQkoKHVfbG9uZykyKQorI2RlZmluZSBQTUFQVkVSU19PUklHCQkoKHVfbG9uZykxKQorI2RlZmluZSBQTUFQUFJPQ19OVUxMCQkoKHVfbG9uZykwKQorI2RlZmluZSBQTUFQUFJPQ19TRVQJCSgodV9sb25nKTEpCisjZGVmaW5lIFBNQVBQUk9DX1VOU0VUCQkoKHVfbG9uZykyKQorI2RlZmluZSBQTUFQUFJPQ19HRVRQT1JUCSgodV9sb25nKTMpCisjZGVmaW5lIFBNQVBQUk9DX0RVTVAJCSgodV9sb25nKTQpCisjZGVmaW5lIFBNQVBQUk9DX0NBTExJVAkJKCh1X2xvbmcpNSkKKworc3RydWN0IHBtYXAgeworCWxvbmcgdW5zaWduZWQgcG1fcHJvZzsKKwlsb25nIHVuc2lnbmVkIHBtX3ZlcnM7CisJbG9uZyB1bnNpZ25lZCBwbV9wcm90OworCWxvbmcgdW5zaWduZWQgcG1fcG9ydDsKK307CisKK2V4dGVybiBib29sX3QgeGRyX3BtYXAgKFhEUiAqX194ZHJzLCBzdHJ1Y3QgcG1hcCAqX19yZWdzKSBfX1RIUk9XOworCitzdHJ1Y3QgcG1hcGxpc3QgeworCXN0cnVjdCBwbWFwCXBtbF9tYXA7CisJc3RydWN0IHBtYXBsaXN0ICpwbWxfbmV4dDsKK307CisKK2V4dGVybiBib29sX3QgeGRyX3BtYXBsaXN0IChYRFIgKl9feGRycywgc3RydWN0IHBtYXBsaXN0ICoqX19ycCkgX19USFJPVzsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIHJwYy9wbWFwX3Byb3QuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwYy9wbWFwX3JtdC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwYy9wbWFwX3JtdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMzhiNWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjL3BtYXBfcm10LmgKQEAgLTAsMCArMSw2OCBAQAorLyogQCgjKXBtYXBfcm10LmgJMi4xIDg4LzA3LzI5IDQuMCBSUENTUkM7IGZyb20gMS4yIDg4LzAyLzA4IFNNSSAqLworLyoKKyAqIFN1biBSUEMgaXMgYSBwcm9kdWN0IG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYW5kIGlzIHByb3ZpZGVkIGZvcgorICogdW5yZXN0cmljdGVkIHVzZSBwcm92aWRlZCB0aGF0IHRoaXMgbGVnZW5kIGlzIGluY2x1ZGVkIG9uIGFsbCB0YXBlCisgKiBtZWRpYSBhbmQgYXMgYSBwYXJ0IG9mIHRoZSBzb2Z0d2FyZSBwcm9ncmFtIGluIHdob2xlIG9yIHBhcnQuICBVc2VycworICogbWF5IGNvcHkgb3IgbW9kaWZ5IFN1biBSUEMgd2l0aG91dCBjaGFyZ2UsIGJ1dCBhcmUgbm90IGF1dGhvcml6ZWQKKyAqIHRvIGxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBpdCB0byBhbnlvbmUgZWxzZSBleGNlcHQgYXMgcGFydCBvZiBhIHByb2R1Y3Qgb3IKKyAqIHByb2dyYW0gZGV2ZWxvcGVkIGJ5IHRoZSB1c2VyLgorICoKKyAqIFNVTiBSUEMgSVMgUFJPVklERUQgQVMgSVMgV0lUSCBOTyBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIElOQ0xVRElORyBUSEUKKyAqIFdBUlJBTlRJRVMgT0YgREVTSUdOLCBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSwgT1IgQVJJU0lORyBGUk9NIEEgQ09VUlNFIE9GIERFQUxJTkcsIFVTQUdFIE9SIFRSQURFIFBSQUNUSUNFLgorICoKKyAqIFN1biBSUEMgaXMgcHJvdmlkZWQgd2l0aCBubyBzdXBwb3J0IGFuZCB3aXRob3V0IGFueSBvYmxpZ2F0aW9uIG9uIHRoZQorICogcGFydCBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIHRvIGFzc2lzdCBpbiBpdHMgdXNlLCBjb3JyZWN0aW9uLAorICogbW9kaWZpY2F0aW9uIG9yIGVuaGFuY2VtZW50LgorICoKKyAqIFNVTiBNSUNST1NZU1RFTVMsIElOQy4gU0hBTEwgSEFWRSBOTyBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRQorICogSU5GUklOR0VNRU5UIE9GIENPUFlSSUdIVFMsIFRSQURFIFNFQ1JFVFMgT1IgQU5ZIFBBVEVOVFMgQlkgU1VOIFJQQworICogT1IgQU5ZIFBBUlQgVEhFUkVPRi4KKyAqCisgKiBJbiBubyBldmVudCB3aWxsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYmUgbGlhYmxlIGZvciBhbnkgbG9zdCByZXZlbnVlCisgKiBvciBwcm9maXRzIG9yIG90aGVyIHNwZWNpYWwsIGluZGlyZWN0IGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIGV2ZW4gaWYKKyAqIFN1biBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisgKgorICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogMjU1MCBHYXJjaWEgQXZlbnVlCisgKiBNb3VudGFpbiBWaWV3LCBDYWxpZm9ybmlhICA5NDA0MworICovCisKKy8qCisgKiBTdHJ1Y3R1cmVzIGFuZCBYRFIgcm91dGluZXMgZm9yIHBhcmFtZXRlcnMgdG8gYW5kIHJlcGxpZXMgZnJvbQorICogdGhlIHBvcnRtYXBwZXIgcmVtb3RlLWNhbGwtc2VydmljZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5ODYsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqLworCisjaWZuZGVmIF9SUENfUE1BUF9STVRfSAorI2RlZmluZSBfUlBDX1BNQVBfUk1UX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxycGMvdHlwZXMuaD4KKyNpbmNsdWRlIDxycGMveGRyLmg+CisKK19fQkVHSU5fREVDTFMKKworc3RydWN0IHJtdGNhbGxhcmdzIHsKKwl1X2xvbmcgcHJvZywgdmVycywgcHJvYywgYXJnbGVuOworCWNhZGRyX3QgYXJnc19wdHI7CisJeGRycHJvY190IHhkcl9hcmdzOworfTsKKworZXh0ZXJuIGJvb2xfdCB4ZHJfcm10Y2FsbF9hcmdzIChYRFIgKl9feGRycywgc3RydWN0IHJtdGNhbGxhcmdzICpfX2NycCkKKyAgICAgX19USFJPVzsKKworc3RydWN0IHJtdGNhbGxyZXMgeworCXVfbG9uZyAqcG9ydF9wdHI7CisJdV9sb25nIHJlc3VsdHNsZW47CisJY2FkZHJfdCByZXN1bHRzX3B0cjsKKwl4ZHJwcm9jX3QgeGRyX3Jlc3VsdHM7Cit9OworCitleHRlcm4gYm9vbF90IHhkcl9ybXRjYWxscmVzIChYRFIgKl9feGRycywgc3RydWN0IHJtdGNhbGxyZXMgKl9fY3JwKSBfX1RIUk9XOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogcnBjL3BtYXBfcm10LmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGMvcnBjLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjL3JwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZTQzODUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjL3JwYy5oCkBAIC0wLDAgKzEsOTcgQEAKKy8qIEAoIylycGMuaAkyLjMgODgvMDgvMTAgNC4wIFJQQ1NSQzsgZnJvbSAxLjkgODgvMDIvMDggU01JICovCisvKgorICogU3VuIFJQQyBpcyBhIHByb2R1Y3Qgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBhbmQgaXMgcHJvdmlkZWQgZm9yCisgKiB1bnJlc3RyaWN0ZWQgdXNlIHByb3ZpZGVkIHRoYXQgdGhpcyBsZWdlbmQgaXMgaW5jbHVkZWQgb24gYWxsIHRhcGUKKyAqIG1lZGlhIGFuZCBhcyBhIHBhcnQgb2YgdGhlIHNvZnR3YXJlIHByb2dyYW0gaW4gd2hvbGUgb3IgcGFydC4gIFVzZXJzCisgKiBtYXkgY29weSBvciBtb2RpZnkgU3VuIFJQQyB3aXRob3V0IGNoYXJnZSwgYnV0IGFyZSBub3QgYXV0aG9yaXplZAorICogdG8gbGljZW5zZSBvciBkaXN0cmlidXRlIGl0IHRvIGFueW9uZSBlbHNlIGV4Y2VwdCBhcyBwYXJ0IG9mIGEgcHJvZHVjdCBvcgorICogcHJvZ3JhbSBkZXZlbG9wZWQgYnkgdGhlIHVzZXIuCisgKgorICogU1VOIFJQQyBJUyBQUk9WSURFRCBBUyBJUyBXSVRIIE5PIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgSU5DTFVESU5HIFRIRQorICogV0FSUkFOVElFUyBPRiBERVNJR04sIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFLCBPUiBBUklTSU5HIEZST00gQSBDT1VSU0UgT0YgREVBTElORywgVVNBR0UgT1IgVFJBREUgUFJBQ1RJQ0UuCisgKgorICogU3VuIFJQQyBpcyBwcm92aWRlZCB3aXRoIG5vIHN1cHBvcnQgYW5kIHdpdGhvdXQgYW55IG9ibGlnYXRpb24gb24gdGhlCisgKiBwYXJ0IG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gdG8gYXNzaXN0IGluIGl0cyB1c2UsIGNvcnJlY3Rpb24sCisgKiBtb2RpZmljYXRpb24gb3IgZW5oYW5jZW1lbnQuCisgKgorICogU1VOIE1JQ1JPU1lTVEVNUywgSU5DLiBTSEFMTCBIQVZFIE5PIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFCisgKiBJTkZSSU5HRU1FTlQgT0YgQ09QWVJJR0hUUywgVFJBREUgU0VDUkVUUyBPUiBBTlkgUEFURU5UUyBCWSBTVU4gUlBDCisgKiBPUiBBTlkgUEFSVCBUSEVSRU9GLgorICoKKyAqIEluIG5vIGV2ZW50IHdpbGwgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBiZSBsaWFibGUgZm9yIGFueSBsb3N0IHJldmVudWUKKyAqIG9yIHByb2ZpdHMgb3Igb3RoZXIgc3BlY2lhbCwgaW5kaXJlY3QgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgZXZlbiBpZgorICogU3VuIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKyAqCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiAyNTUwIEdhcmNpYSBBdmVudWUKKyAqIE1vdW50YWluIFZpZXcsIENhbGlmb3JuaWEgIDk0MDQzCisgKi8KKworLyoKKyAqIHJwYy5oLCBKdXN0IGluY2x1ZGVzIHRoZSBiaWxsaW9ucyBvZiBycGMgaGVhZGVyIGZpbGVzIG5lY2Vzc2FyeSB0bworICogZG8gcmVtb3RlIHByb2NlZHVyZSBjYWxsaW5nLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk4NCwgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICovCisKKyNpZm5kZWYgX1JQQ19SUENfSAorI2RlZmluZSBfUlBDX1JQQ19IIDEKKworI2luY2x1ZGUgPHJwYy90eXBlcy5oPgkJLyogc29tZSB0eXBlZGVmcyAqLworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKworLyogZXh0ZXJuYWwgZGF0YSByZXByZXNlbnRhdGlvbiBpbnRlcmZhY2VzICovCisjaW5jbHVkZSA8cnBjL3hkci5oPgkJLyogZ2VuZXJpYyAoZGUpc2VyaWFsaXplciAqLworCisvKiBDbGllbnQgc2lkZSBvbmx5IGF1dGhlbnRpY2F0aW9uICovCisjaW5jbHVkZSA8cnBjL2F1dGguaD4JCS8qIGdlbmVyaWMgYXV0aGVudGljYXRvciAoY2xpZW50IHNpZGUpICovCisKKy8qIENsaWVudCBzaWRlIChtb3N0bHkpIHJlbW90ZSBwcm9jZWR1cmUgY2FsbCAqLworI2luY2x1ZGUgPHJwYy9jbG50Lmg+CQkvKiBnZW5lcmljIHJwYyBzdHVmZiAqLworCisvKiBzZW1pLXByaXZhdGUgcHJvdG9jb2wgaGVhZGVycyAqLworI2luY2x1ZGUgPHJwYy9ycGNfbXNnLmg+CS8qIHByb3RvY29sIGZvciBycGMgbWVzc2FnZXMgKi8KKyNpbmNsdWRlIDxycGMvYXV0aF91bml4Lmg+CS8qIHByb3RvY29sIGZvciB1bml4IHN0eWxlIGNyZWQgKi8KKyNpbmNsdWRlIDxycGMvYXV0aF9kZXMuaD4JLyogcHJvdG9jb2wgZm9yIGRlcyBzdHlsZSBjcmVkICovCisKKy8qIFNlcnZlciBzaWRlIG9ubHkgcmVtb3RlIHByb2NlZHVyZSBjYWxsZWUgKi8KKyNpbmNsdWRlIDxycGMvc3ZjLmg+CQkvKiBzZXJ2aWNlIG1hbmFnZXIgYW5kIG11bHRpcGxleGVyICovCisjaW5jbHVkZSA8cnBjL3N2Y19hdXRoLmg+CS8qIHNlcnZpY2Ugc2lkZSBhdXRoZW50aWNhdG9yICovCisKKy8qCisgKiBDT01NRU5UIE9VVCBUSEUgTkVYVCBJTkNMVURFIElGIFJVTk5JTkcgT04gU1VOIE9TIE9SIE9OIEEgVkVSU0lPTgorICogT0YgVU5JWCBCQVNFRCBPTiBORlNTUkMuICBUaGVzZSBzeXN0ZW1zIHdpbGwgYWxyZWFkeSBoYXZlIHRoZSBzdHJ1Y3R1cmVzCisgKiBkZWZpbmVkIGJ5IDxycGMvbmV0ZGIuaD4gaW5jbHVkZWQgaW4gPG5ldGRiLmg+LgorICovCisvKiByb3V0aW5lcyBmb3IgcGFyc2luZyAvZXRjL3JwYyAqLworI2luY2x1ZGUgPHJwYy9uZXRkYi5oPgkJLyogc3RydWN0dXJlcyBhbmQgcm91dGluZXMgdG8gcGFyc2UgL2V0Yy9ycGMgKi8KKworX19CRUdJTl9ERUNMUworCisvKiBHbG9iYWwgdmFyaWFibGVzLCBwcm90ZWN0ZWQgZm9yIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucy4gICovCitleHRlcm4gZmRfc2V0ICpfX3JwY190aHJlYWRfc3ZjX2Zkc2V0ICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CisjZGVmaW5lIHN2Y19mZHNldCAoKl9fcnBjX3RocmVhZF9zdmNfZmRzZXQgKCkpCisKK2V4dGVybiBzdHJ1Y3QgcnBjX2NyZWF0ZWVyciAqX19ycGNfdGhyZWFkX2NyZWF0ZWVyciAodm9pZCkKKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOworI2RlZmluZSBnZXRfcnBjX2NyZWF0ZWVycigpICgqX19ycGNfdGhyZWFkX2NyZWF0ZWVyciAoKSkKKy8qIFRoZSBwZW9wbGUgd2hvICJlbmdpbmVlcmVkIiBSUEMgc2hvdWxkIGJlZSBwdW5pc2hlZCBmb3IgbmFtaW5nIHRoZQorICAgZGF0YSBzdHJ1Y3R1cmUgYW5kIHRoZSB2YXJpYWJsZSB0aGUgc2FtZS4gIFdlIGNhbm5vdCBhbHdheXMgZGVmaW5lIHRoZQorICAgbWFjcm8gJ3JwY19jcmVhdGVlcnInIGJlY2F1c2UgdGhpcyB3b3VsZCBwcmV2ZW50IHBlb3BsZSBmcm9tIGRlZmluaW5nCisgICBvYmplY3Qgb2YgdHlwZSAnc3RydWN0IHJwY19jcmVhdGVlcnInLiAgU28gd2UgbGVhdmUgaXQgdXAgdG8gdGhlIHVzZXIKKyAgIHRvIHNlbGVjdCB0cmFuc3BhcmVudCByZXBsYWNlbWVudCBhbHNvIG9mIHRoaXMgdmFyaWFibGUuICAqLworI2lmZGVmIF9SUENfTVRfVkFSUworIyBkZWZpbmUgcnBjX2NyZWF0ZWVyciAoKl9fcnBjX3RocmVhZF9jcmVhdGVlcnIgKCkpCisjZW5kaWYKKworZXh0ZXJuIHN0cnVjdCBwb2xsZmQgKipfX3JwY190aHJlYWRfc3ZjX3BvbGxmZCAodm9pZCkKKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOworI2RlZmluZSBzdmNfcG9sbGZkICgqX19ycGNfdGhyZWFkX3N2Y19wb2xsZmQgKCkpCisKK2V4dGVybiBpbnQgKl9fcnBjX3RocmVhZF9zdmNfbWF4X3BvbGxmZCAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOworI2RlZmluZSBzdmNfbWF4X3BvbGxmZCAoKl9fcnBjX3RocmVhZF9zdmNfbWF4X3BvbGxmZCAoKSkKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIHJwYy9ycGMuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwYy9ycGNfZGVzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjL3JwY19kZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjM2ZDE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwYy9ycGNfZGVzLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIFN1biBSUEMgaXMgYSBwcm9kdWN0IG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYW5kIGlzIHByb3ZpZGVkIGZvcgorICogdW5yZXN0cmljdGVkIHVzZSBwcm92aWRlZCB0aGF0IHRoaXMgbGVnZW5kIGlzIGluY2x1ZGVkIG9uIGFsbCB0YXBlCisgKiBtZWRpYSBhbmQgYXMgYSBwYXJ0IG9mIHRoZSBzb2Z0d2FyZSBwcm9ncmFtIGluIHdob2xlIG9yIHBhcnQuICBVc2VycworICogbWF5IGNvcHkgb3IgbW9kaWZ5IFN1biBSUEMgd2l0aG91dCBjaGFyZ2UsIGJ1dCBhcmUgbm90IGF1dGhvcml6ZWQKKyAqIHRvIGxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBpdCB0byBhbnlvbmUgZWxzZSBleGNlcHQgYXMgcGFydCBvZiBhIHByb2R1Y3Qgb3IKKyAqIHByb2dyYW0gZGV2ZWxvcGVkIGJ5IHRoZSB1c2VyLgorICogCisgKiBTVU4gUlBDIElTIFBST1ZJREVEIEFTIElTIFdJVEggTk8gV0FSUkFOVElFUyBPRiBBTlkgS0lORCBJTkNMVURJTkcgVEhFCisgKiBXQVJSQU5USUVTIE9GIERFU0lHTiwgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UsIE9SIEFSSVNJTkcgRlJPTSBBIENPVVJTRSBPRiBERUFMSU5HLCBVU0FHRSBPUiBUUkFERSBQUkFDVElDRS4KKyAqIAorICogU3VuIFJQQyBpcyBwcm92aWRlZCB3aXRoIG5vIHN1cHBvcnQgYW5kIHdpdGhvdXQgYW55IG9ibGlnYXRpb24gb24gdGhlCisgKiBwYXJ0IG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gdG8gYXNzaXN0IGluIGl0cyB1c2UsIGNvcnJlY3Rpb24sCisgKiBtb2RpZmljYXRpb24gb3IgZW5oYW5jZW1lbnQuCisgKiAKKyAqIFNVTiBNSUNST1NZU1RFTVMsIElOQy4gU0hBTEwgSEFWRSBOTyBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRQorICogSU5GUklOR0VNRU5UIE9GIENPUFlSSUdIVFMsIFRSQURFIFNFQ1JFVFMgT1IgQU5ZIFBBVEVOVFMgQlkgU1VOIFJQQworICogT1IgQU5ZIFBBUlQgVEhFUkVPRi4KKyAqIAorICogSW4gbm8gZXZlbnQgd2lsbCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJlIGxpYWJsZSBmb3IgYW55IGxvc3QgcmV2ZW51ZQorICogb3IgcHJvZml0cyBvciBvdGhlciBzcGVjaWFsLCBpbmRpcmVjdCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBldmVuIGlmCisgKiBTdW4gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorICogCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiAyNTUwIEdhcmNpYSBBdmVudWUKKyAqIE1vdW50YWluIFZpZXcsIENhbGlmb3JuaWEgIDk0MDQzCisgKi8KKy8qCisgKiBHZW5lcmljIERFUyBkcml2ZXIgaW50ZXJmYWNlCisgKiBLZWVwIHRoaXMgZmlsZSBoYXJkd2FyZSBpbmRlcGVuZGVudCEKKyAqIENvcHlyaWdodCAoYykgMTk4NiBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKi8KKworI2lmbmRlZiBfREVTX0gKKyNkZWZpbmUgX0RFU19ICisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2RlZmluZSBERVNfTUFYTEVOIAk2NTUzNgkvKiBtYXhpbXVtICMgb2YgYnl0ZXMgdG8gZW5jcnlwdCAgKi8KKyNkZWZpbmUgREVTX1FVSUNLTEVOCTE2CS8qIG1heGltdW0gIyBvZiBieXRlcyB0byBlbmNyeXB0IHF1aWNrbHkgKi8KKworZW51bSBkZXNkaXIKKyAgeworICAgIEVOQ1JZUFQsIERFQ1JZUFQKKyAgfTsKK2VudW0gZGVzbW9kZQorICB7CisgICAgQ0JDLCBFQ0IKKyAgfTsKKworLyoKKyAqIHBhcmFtZXRlcnMgdG8gaW9jdGwgY2FsbAorICovCitzdHJ1Y3QgZGVzcGFyYW1zCisgIHsKKyAgICB1X2NoYXIgZGVzX2tleVs4XTsJCS8qIGtleSAod2l0aCBsb3cgYml0IHBhcml0eSkgKi8KKyAgICBlbnVtIGRlc2RpciBkZXNfZGlyOwkvKiBkaXJlY3Rpb24gKi8KKyAgICBlbnVtIGRlc21vZGUgZGVzX21vZGU7CS8qIG1vZGUgKi8KKyAgICB1X2NoYXIgZGVzX2l2ZWNbOF07CQkvKiBpbnB1dCB2ZWN0b3IgKi8KKyAgICB1bnNpZ25lZCBkZXNfbGVuOwkJLyogbnVtYmVyIG9mIGJ5dGVzIHRvIGNyeXB0ICovCisgICAgdW5pb24KKyAgICAgIHsKKwl1X2NoYXIgVURFU19kYXRhW0RFU19RVUlDS0xFTl07CisJdV9jaGFyICpVREVTX2J1ZjsKKyAgICAgIH0KKyAgICBVREVTOworI2RlZmluZSBkZXNfZGF0YSBVREVTLlVERVNfZGF0YQkvKiBkaXJlY3QgZGF0YSBoZXJlIGlmIHF1aWNrICovCisjZGVmaW5lIGRlc19idWYJVURFUy5VREVTX2J1ZgkvKiBvdGhlcndpc2UsIHBvaW50ZXIgdG8gZGF0YSAqLworICB9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGMvcnBjX21zZy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwYy9ycGNfbXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM2ZDYwZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGMvcnBjX21zZy5oCkBAIC0wLDAgKzEsMjAyIEBACisvKiBAKCMpcnBjX21zZy5oCTIuMSA4OC8wNy8yOSA0LjAgUlBDU1JDICovCisvKgorICogU3VuIFJQQyBpcyBhIHByb2R1Y3Qgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBhbmQgaXMgcHJvdmlkZWQgZm9yCisgKiB1bnJlc3RyaWN0ZWQgdXNlIHByb3ZpZGVkIHRoYXQgdGhpcyBsZWdlbmQgaXMgaW5jbHVkZWQgb24gYWxsIHRhcGUKKyAqIG1lZGlhIGFuZCBhcyBhIHBhcnQgb2YgdGhlIHNvZnR3YXJlIHByb2dyYW0gaW4gd2hvbGUgb3IgcGFydC4gIFVzZXJzCisgKiBtYXkgY29weSBvciBtb2RpZnkgU3VuIFJQQyB3aXRob3V0IGNoYXJnZSwgYnV0IGFyZSBub3QgYXV0aG9yaXplZAorICogdG8gbGljZW5zZSBvciBkaXN0cmlidXRlIGl0IHRvIGFueW9uZSBlbHNlIGV4Y2VwdCBhcyBwYXJ0IG9mIGEgcHJvZHVjdCBvcgorICogcHJvZ3JhbSBkZXZlbG9wZWQgYnkgdGhlIHVzZXIuCisgKgorICogU1VOIFJQQyBJUyBQUk9WSURFRCBBUyBJUyBXSVRIIE5PIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgSU5DTFVESU5HIFRIRQorICogV0FSUkFOVElFUyBPRiBERVNJR04sIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFLCBPUiBBUklTSU5HIEZST00gQSBDT1VSU0UgT0YgREVBTElORywgVVNBR0UgT1IgVFJBREUgUFJBQ1RJQ0UuCisgKgorICogU3VuIFJQQyBpcyBwcm92aWRlZCB3aXRoIG5vIHN1cHBvcnQgYW5kIHdpdGhvdXQgYW55IG9ibGlnYXRpb24gb24gdGhlCisgKiBwYXJ0IG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gdG8gYXNzaXN0IGluIGl0cyB1c2UsIGNvcnJlY3Rpb24sCisgKiBtb2RpZmljYXRpb24gb3IgZW5oYW5jZW1lbnQuCisgKgorICogU1VOIE1JQ1JPU1lTVEVNUywgSU5DLiBTSEFMTCBIQVZFIE5PIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFCisgKiBJTkZSSU5HRU1FTlQgT0YgQ09QWVJJR0hUUywgVFJBREUgU0VDUkVUUyBPUiBBTlkgUEFURU5UUyBCWSBTVU4gUlBDCisgKiBPUiBBTlkgUEFSVCBUSEVSRU9GLgorICoKKyAqIEluIG5vIGV2ZW50IHdpbGwgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBiZSBsaWFibGUgZm9yIGFueSBsb3N0IHJldmVudWUKKyAqIG9yIHByb2ZpdHMgb3Igb3RoZXIgc3BlY2lhbCwgaW5kaXJlY3QgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgZXZlbiBpZgorICogU3VuIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKyAqCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiAyNTUwIEdhcmNpYSBBdmVudWUKKyAqIE1vdW50YWluIFZpZXcsIENhbGlmb3JuaWEgIDk0MDQzCisgKi8KKy8qICAgICAgQCgjKXJwY19tc2cuaCAxLjcgODYvMDcvMTYgU01JICAgICAgKi8KKworI2lmbmRlZiBfUlBDX01TR19ICisjZGVmaW5lIF9SUENfTVNHX0ggMQorCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNpbmNsdWRlIDxycGMveGRyLmg+CisjaW5jbHVkZSA8cnBjL2NsbnQuaD4KKworLyoKKyAqIHJwY19tc2cuaAorICogcnBjIG1lc3NhZ2UgZGVmaW5pdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMTk4NCwgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICovCisKKyNkZWZpbmUgUlBDX01TR19WRVJTSU9OCQkoKHVfbG9uZykgMikKKyNkZWZpbmUgUlBDX1NFUlZJQ0VfUE9SVAkoKHVfc2hvcnQpIDIwNDgpCisKK19fQkVHSU5fREVDTFMKKworLyoKKyAqIEJvdHRvbSB1cCBkZWZpbml0aW9uIG9mIGFuIHJwYyBtZXNzYWdlLgorICogTk9URTogY2FsbCBhbmQgcmVwbHkgdXNlIHRoZSBzYW1lIG92ZXJhbGwgc3RydWN0IGJ1dAorICogZGlmZmVyZW50IHBhcnRzIG9mIHVuaW9ucyB3aXRoaW4gaXQuCisgKi8KKworZW51bSBtc2dfdHlwZSB7CisJQ0FMTD0wLAorCVJFUExZPTEKK307CisKK2VudW0gcmVwbHlfc3RhdCB7CisJTVNHX0FDQ0VQVEVEPTAsCisJTVNHX0RFTklFRD0xCit9OworCitlbnVtIGFjY2VwdF9zdGF0IHsKKwlTVUNDRVNTPTAsCisJUFJPR19VTkFWQUlMPTEsCisJUFJPR19NSVNNQVRDSD0yLAorCVBST0NfVU5BVkFJTD0zLAorCUdBUkJBR0VfQVJHUz00LAorCVNZU1RFTV9FUlI9NQorfTsKKworZW51bSByZWplY3Rfc3RhdCB7CisJUlBDX01JU01BVENIPTAsCisJQVVUSF9FUlJPUj0xCit9OworCisvKgorICogUmVwbHkgcGFydCBvZiBhbiBycGMgZXhjaGFuZ2UKKyAqLworCisvKgorICogUmVwbHkgdG8gYW4gcnBjIHJlcXVlc3QgdGhhdCB3YXMgYWNjZXB0ZWQgYnkgdGhlIHNlcnZlci4KKyAqIE5vdGU6IHRoZXJlIGNvdWxkIGJlIGFuIGVycm9yIGV2ZW4gdGhvdWdoIHRoZSByZXF1ZXN0IHdhcworICogYWNjZXB0ZWQuCisgKi8KK3N0cnVjdCBhY2NlcHRlZF9yZXBseSB7CisJc3RydWN0IG9wYXF1ZV9hdXRoCWFyX3ZlcmY7CisJZW51bSBhY2NlcHRfc3RhdAlhcl9zdGF0OworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVfbG9uZwlsb3c7CisJCQl1X2xvbmcJaGlnaDsKKwkJfSBBUl92ZXJzaW9uczsKKwkJc3RydWN0IHsKKwkJCWNhZGRyX3QJd2hlcmU7CisJCQl4ZHJwcm9jX3QgcHJvYzsKKwkJfSBBUl9yZXN1bHRzOworCQkvKiBhbmQgbWFueSBvdGhlciBudWxsIGNhc2VzICovCisJfSBydTsKKyNkZWZpbmUJYXJfcmVzdWx0cwlydS5BUl9yZXN1bHRzCisjZGVmaW5lCWFyX3ZlcnMJCXJ1LkFSX3ZlcnNpb25zCit9OworCisvKgorICogUmVwbHkgdG8gYW4gcnBjIHJlcXVlc3QgdGhhdCB3YXMgcmVqZWN0ZWQgYnkgdGhlIHNlcnZlci4KKyAqLworc3RydWN0IHJlamVjdGVkX3JlcGx5IHsKKwllbnVtIHJlamVjdF9zdGF0IHJqX3N0YXQ7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdV9sb25nIGxvdzsKKwkJCXVfbG9uZyBoaWdoOworCQl9IFJKX3ZlcnNpb25zOworCQllbnVtIGF1dGhfc3RhdCBSSl93aHk7ICAvKiB3aHkgYXV0aGVudGljYXRpb24gZGlkIG5vdCB3b3JrICovCisJfSBydTsKKyNkZWZpbmUJcmpfdmVycwlydS5SSl92ZXJzaW9ucworI2RlZmluZQlyal93aHkJcnUuUkpfd2h5Cit9OworCisvKgorICogQm9keSBvZiBhIHJlcGx5IHRvIGFuIHJwYyByZXF1ZXN0LgorICovCitzdHJ1Y3QgcmVwbHlfYm9keSB7CisJZW51bSByZXBseV9zdGF0IHJwX3N0YXQ7CisJdW5pb24geworCQlzdHJ1Y3QgYWNjZXB0ZWRfcmVwbHkgUlBfYXI7CisJCXN0cnVjdCByZWplY3RlZF9yZXBseSBSUF9kcjsKKwl9IHJ1OworI2RlZmluZQlycF9hY3B0CXJ1LlJQX2FyCisjZGVmaW5lCXJwX3JqY3QJcnUuUlBfZHIKK307CisKKy8qCisgKiBCb2R5IG9mIGFuIHJwYyByZXF1ZXN0IGNhbGwuCisgKi8KK3N0cnVjdCBjYWxsX2JvZHkgeworCXVfbG9uZyBjYl9ycGN2ZXJzOwkvKiBtdXN0IGJlIGVxdWFsIHRvIHR3byAqLworCXVfbG9uZyBjYl9wcm9nOworCXVfbG9uZyBjYl92ZXJzOworCXVfbG9uZyBjYl9wcm9jOworCXN0cnVjdCBvcGFxdWVfYXV0aCBjYl9jcmVkOworCXN0cnVjdCBvcGFxdWVfYXV0aCBjYl92ZXJmOyAvKiBwcm90b2NvbCBzcGVjaWZpYyAtIHByb3ZpZGVkIGJ5IGNsaWVudCAqLworfTsKKworLyoKKyAqIFRoZSBycGMgbWVzc2FnZQorICovCitzdHJ1Y3QgcnBjX21zZyB7CisJdV9sb25nCQkJcm1feGlkOworCWVudW0gbXNnX3R5cGUJCXJtX2RpcmVjdGlvbjsKKwl1bmlvbiB7CisJCXN0cnVjdCBjYWxsX2JvZHkgUk1fY21iOworCQlzdHJ1Y3QgcmVwbHlfYm9keSBSTV9ybWI7CisJfSBydTsKKyNkZWZpbmUJcm1fY2FsbAkJcnUuUk1fY21iCisjZGVmaW5lCXJtX3JlcGx5CXJ1LlJNX3JtYgorfTsKKyNkZWZpbmUJYWNwdGVkX3JwbHkJcnUuUk1fcm1iLnJ1LlJQX2FyCisjZGVmaW5lCXJqY3RlZF9ycGx5CXJ1LlJNX3JtYi5ydS5SUF9kcgorCisKKy8qCisgKiBYRFIgcm91dGluZSB0byBoYW5kbGUgYSBycGMgbWVzc2FnZS4KKyAqIHhkcl9jYWxsbXNnKHhkcnMsIGNtc2cpCisgKiAJWERSICp4ZHJzOworICogCXN0cnVjdCBycGNfbXNnICpjbXNnOworICovCitleHRlcm4gYm9vbF90CXhkcl9jYWxsbXNnIChYRFIgKl9feGRycywgc3RydWN0IHJwY19tc2cgKl9fY21zZykgX19USFJPVzsKKworLyoKKyAqIFhEUiByb3V0aW5lIHRvIHByZS1zZXJpYWxpemUgdGhlIHN0YXRpYyBwYXJ0IG9mIGEgcnBjIG1lc3NhZ2UuCisgKiB4ZHJfY2FsbGhkcih4ZHJzLCBjbXNnKQorICogCVhEUiAqeGRyczsKKyAqIAlzdHJ1Y3QgcnBjX21zZyAqY21zZzsKKyAqLworZXh0ZXJuIGJvb2xfdAl4ZHJfY2FsbGhkciAoWERSICpfX3hkcnMsIHN0cnVjdCBycGNfbXNnICpfX2Ntc2cpIF9fVEhST1c7CisKKy8qCisgKiBYRFIgcm91dGluZSB0byBoYW5kbGUgYSBycGMgcmVwbHkuCisgKiB4ZHJfcmVwbHltc2coeGRycywgcm1zZykKKyAqIAlYRFIgKnhkcnM7CisgKiAJc3RydWN0IHJwY19tc2cgKnJtc2c7CisgKi8KK2V4dGVybiBib29sX3QJeGRyX3JlcGx5bXNnIChYRFIgKl9feGRycywgc3RydWN0IHJwY19tc2cgKl9fcm1zZykgX19USFJPVzsKKworLyoKKyAqIEZpbGxzIGluIHRoZSBlcnJvciBwYXJ0IG9mIGEgcmVwbHkgbWVzc2FnZS4KKyAqIF9zZXRlcnJfcmVwbHkobXNnLCBlcnJvcikKKyAqIAlzdHJ1Y3QgcnBjX21zZyAqbXNnOworICogCXN0cnVjdCBycGNfZXJyICplcnJvcjsKKyAqLworZXh0ZXJuIHZvaWQJX3NldGVycl9yZXBseSAoc3RydWN0IHJwY19tc2cgKl9fbXNnLCBzdHJ1Y3QgcnBjX2VyciAqX19lcnJvcikKKyAgICAgX19USFJPVzsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIHJwYy9ycGNfbXNnLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGMvc3ZjLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjL3N2Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MTIzMTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjL3N2Yy5oCkBAIC0wLDAgKzEsMzIxIEBACisvKgorICogU3VuIFJQQyBpcyBhIHByb2R1Y3Qgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBhbmQgaXMgcHJvdmlkZWQgZm9yCisgKiB1bnJlc3RyaWN0ZWQgdXNlIHByb3ZpZGVkIHRoYXQgdGhpcyBsZWdlbmQgaXMgaW5jbHVkZWQgb24gYWxsIHRhcGUKKyAqIG1lZGlhIGFuZCBhcyBhIHBhcnQgb2YgdGhlIHNvZnR3YXJlIHByb2dyYW0gaW4gd2hvbGUgb3IgcGFydC4gIFVzZXJzCisgKiBtYXkgY29weSBvciBtb2RpZnkgU3VuIFJQQyB3aXRob3V0IGNoYXJnZSwgYnV0IGFyZSBub3QgYXV0aG9yaXplZAorICogdG8gbGljZW5zZSBvciBkaXN0cmlidXRlIGl0IHRvIGFueW9uZSBlbHNlIGV4Y2VwdCBhcyBwYXJ0IG9mIGEgcHJvZHVjdCBvcgorICogcHJvZ3JhbSBkZXZlbG9wZWQgYnkgdGhlIHVzZXIuCisgKgorICogU1VOIFJQQyBJUyBQUk9WSURFRCBBUyBJUyBXSVRIIE5PIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgSU5DTFVESU5HIFRIRQorICogV0FSUkFOVElFUyBPRiBERVNJR04sIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFLCBPUiBBUklTSU5HIEZST00gQSBDT1VSU0UgT0YgREVBTElORywgVVNBR0UgT1IgVFJBREUgUFJBQ1RJQ0UuCisgKgorICogU3VuIFJQQyBpcyBwcm92aWRlZCB3aXRoIG5vIHN1cHBvcnQgYW5kIHdpdGhvdXQgYW55IG9ibGlnYXRpb24gb24gdGhlCisgKiBwYXJ0IG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gdG8gYXNzaXN0IGluIGl0cyB1c2UsIGNvcnJlY3Rpb24sCisgKiBtb2RpZmljYXRpb24gb3IgZW5oYW5jZW1lbnQuCisgKgorICogU1VOIE1JQ1JPU1lTVEVNUywgSU5DLiBTSEFMTCBIQVZFIE5PIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFCisgKiBJTkZSSU5HRU1FTlQgT0YgQ09QWVJJR0hUUywgVFJBREUgU0VDUkVUUyBPUiBBTlkgUEFURU5UUyBCWSBTVU4gUlBDCisgKiBPUiBBTlkgUEFSVCBUSEVSRU9GLgorICoKKyAqIEluIG5vIGV2ZW50IHdpbGwgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBiZSBsaWFibGUgZm9yIGFueSBsb3N0IHJldmVudWUKKyAqIG9yIHByb2ZpdHMgb3Igb3RoZXIgc3BlY2lhbCwgaW5kaXJlY3QgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgZXZlbiBpZgorICogU3VuIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKyAqCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiAyNTUwIEdhcmNpYSBBdmVudWUKKyAqIE1vdW50YWluIFZpZXcsIENhbGlmb3JuaWEgIDk0MDQzCisgKi8KKworLyoKKyAqIHN2Yy5oLCBTZXJ2ZXItc2lkZSByZW1vdGUgcHJvY2VkdXJlIGNhbGwgaW50ZXJmYWNlLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk4NCwgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICovCisKKyNpZm5kZWYgX1JQQ19TVkNfSAorI2RlZmluZSBfUlBDX1NWQ19IIDEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaW5jbHVkZSA8cnBjL3JwY19tc2cuaD4KKworX19CRUdJTl9ERUNMUworCisvKgorICogVGhpcyBpbnRlcmZhY2UgbXVzdCBtYW5hZ2UgdHdvIGl0ZW1zIGNvbmNlcm5pbmcgcmVtb3RlIHByb2NlZHVyZSBjYWxsaW5nOgorICoKKyAqIDEpIEFuIGFyYml0cmFyeSBudW1iZXIgb2YgdHJhbnNwb3J0IGNvbm5lY3Rpb25zIHVwb24gd2hpY2ggcnBjIHJlcXVlc3RzCisgKiBhcmUgcmVjZWl2ZWQuICBUaGUgdHdvIG1vc3Qgbm90YWJsZSB0cmFuc3BvcnRzIGFyZSBUQ1AgYW5kIFVEUDsgIHRoZXkgYXJlCisgKiBjcmVhdGVkIGFuZCByZWdpc3RlcmVkIGJ5IHJvdXRpbmVzIGluIHN2Y190Y3AuYyBhbmQgc3ZjX3VkcC5jLCByZXNwZWN0aXZlbHk7CisgKiB0aGV5IGluIHR1cm4gY2FsbCB4cHJ0X3JlZ2lzdGVyIGFuZCB4cHJ0X3VucmVnaXN0ZXIuCisgKgorICogMikgQW4gYXJiaXRyYXJ5IG51bWJlciBvZiBsb2NhbGx5IHJlZ2lzdGVyZWQgc2VydmljZXMuICBTZXJ2aWNlcyBhcmUKKyAqIGRlc2NyaWJlZCBieSB0aGUgZm9sbG93aW5nIGZvdXIgZGF0YTogcHJvZ3JhbSBudW1iZXIsIHZlcnNpb24gbnVtYmVyLAorICogInNlcnZpY2UgZGlzcGF0Y2giIGZ1bmN0aW9uLCBhIHRyYW5zcG9ydCBoYW5kbGUsIGFuZCBhIGJvb2xlYW4gdGhhdAorICogaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBleHBvcnRlZCBwcm9ncmFtIHNob3VsZCBiZSByZWdpc3RlcmVkIHdpdGggYQorICogbG9jYWwgYmluZGVyIHNlcnZpY2U7ICBpZiB0cnVlIHRoZSBwcm9ncmFtJ3MgbnVtYmVyIGFuZCB2ZXJzaW9uIGFuZCB0aGUKKyAqIHBvcnQgbnVtYmVyIGZyb20gdGhlIHRyYW5zcG9ydCBoYW5kbGUgYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgYmluZGVyLgorICogVGhlc2UgZGF0YSBhcmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBycGMgc3ZjIHN5c3RlbSB2aWEgc3ZjX3JlZ2lzdGVyLgorICoKKyAqIEEgc2VydmljZSdzIGRpc3BhdGNoIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBhbiBycGMgcmVxdWVzdCBjb21lcyBpbgorICogb24gYSB0cmFuc3BvcnQuICBUaGUgcmVxdWVzdCdzIHByb2dyYW0gYW5kIHZlcnNpb24gbnVtYmVycyBtdXN0IG1hdGNoCisgKiB0aG9zZSBvZiB0aGUgcmVnaXN0ZXJlZCBzZXJ2aWNlLiAgVGhlIGRpc3BhdGNoIGZ1bmN0aW9uIGlzIHBhc3NlZCB0d28KKyAqIHBhcmFtZXRlcnMsIHN0cnVjdCBzdmNfcmVxICogYW5kIFNWQ1hQUlQgKiwgZGVmaW5lZCBiZWxvdy4KKyAqLworCitlbnVtIHhwcnRfc3RhdCB7CisJWFBSVF9ESUVELAorCVhQUlRfTU9SRVJFUVMsCisJWFBSVF9JRExFCit9OworCisvKgorICogU2VydmVyIHNpZGUgdHJhbnNwb3J0IGhhbmRsZQorICovCit0eXBlZGVmIHN0cnVjdCBTVkNYUFJUIFNWQ1hQUlQ7CitzdHJ1Y3QgU1ZDWFBSVCB7CisgIGludCB4cF9zb2NrOworICB1X3Nob3J0IHhwX3BvcnQ7CQkvKiBhc3NvY2lhdGVkIHBvcnQgbnVtYmVyICovCisgIGNvbnN0IHN0cnVjdCB4cF9vcHMgeworICAgIGJvb2xfdAkoKnhwX3JlY3YpIChTVkNYUFJUICpfX3hwcnQsIHN0cnVjdCBycGNfbXNnICpfX21zZyk7CisJCQkJLyogcmVjZWl2ZSBpbmNvbWluZyByZXF1ZXN0cyAqLworICAgIGVudW0geHBydF9zdGF0ICgqeHBfc3RhdCkgKFNWQ1hQUlQgKl9feHBydCk7CisJCQkJLyogZ2V0IHRyYW5zcG9ydCBzdGF0dXMgKi8KKyAgICBib29sX3QJKCp4cF9nZXRhcmdzKSAoU1ZDWFBSVCAqX194cHJ0LCB4ZHJwcm9jX3QgX194ZHJfYXJncywKKwkJCSAgICAgICBjYWRkcl90IGFyZ3NfcHRyKTsgLyogZ2V0IGFyZ3VtZW50cyAqLworICAgIGJvb2xfdAkoKnhwX3JlcGx5KSAoU1ZDWFBSVCAqX194cHJ0LCBzdHJ1Y3QgcnBjX21zZyAqX19tc2cpOworCQkJCS8qIHNlbmQgcmVwbHkgKi8KKyAgICBib29sX3QJKCp4cF9mcmVlYXJncykgKFNWQ1hQUlQgKl9feHBydCwgeGRycHJvY190IF9feGRyX2FyZ3MsCisJCQkJY2FkZHJfdCBhcmdzX3B0cik7CisJCQkJLyogZnJlZSBtZW0gYWxsb2NhdGVkIGZvciBhcmdzICovCisgICAgdm9pZAkoKnhwX2Rlc3Ryb3kpIChTVkNYUFJUICpfX3hwcnQpOworCQkJCS8qIGRlc3Ryb3kgdGhpcyBzdHJ1Y3QgKi8KKyAgfSAqeHBfb3BzOworICBpbnQJCXhwX2FkZHJsZW47CSAvKiBsZW5ndGggb2YgcmVtb3RlIGFkZHJlc3MgKi8KKyAgc3RydWN0IHNvY2thZGRyX2luIHhwX3JhZGRyOwkgLyogcmVtb3RlIGFkZHJlc3MgKi8KKyAgc3RydWN0IG9wYXF1ZV9hdXRoIHhwX3ZlcmY7CSAvKiByYXcgcmVzcG9uc2UgdmVyaWZpZXIgKi8KKyAgY2FkZHJfdAkJeHBfcDE7CQkgLyogcHJpdmF0ZSAqLworICBjYWRkcl90CQl4cF9wMjsJCSAvKiBwcml2YXRlICovCisgIGNoYXIJCXhwX3BhZCBbMjU2XTsJLyogcGFkZGluZywgaW50ZXJuYWwgdXNlICovCit9OworCisvKgorICogIEFwcHJvdmVkIHdheSBvZiBnZXR0aW5nIGFkZHJlc3Mgb2YgY2FsbGVyCisgKi8KKyNkZWZpbmUgc3ZjX2dldGNhbGxlcih4KSAoJih4KS0+eHBfcmFkZHIpCisKKy8qCisgKiBPcGVyYXRpb25zIGRlZmluZWQgb24gYW4gU1ZDWFBSVCBoYW5kbGUKKyAqCisgKiBTVkNYUFJUCQkqeHBydDsKKyAqIHN0cnVjdCBycGNfbXNnCSptc2c7CisgKiB4ZHJwcm9jX3QJCSB4YXJnczsKKyAqIGNhZGRyX3QJCSBhcmdzcDsKKyAqLworI2RlZmluZSBTVkNfUkVDVih4cHJ0LCBtc2cpCQkJCVwKKwkoKih4cHJ0KS0+eHBfb3BzLT54cF9yZWN2KSgoeHBydCksIChtc2cpKQorI2RlZmluZSBzdmNfcmVjdih4cHJ0LCBtc2cpCQkJCVwKKwkoKih4cHJ0KS0+eHBfb3BzLT54cF9yZWN2KSgoeHBydCksIChtc2cpKQorCisjZGVmaW5lIFNWQ19TVEFUKHhwcnQpCQkJCQlcCisJKCooeHBydCktPnhwX29wcy0+eHBfc3RhdCkoeHBydCkKKyNkZWZpbmUgc3ZjX3N0YXQoeHBydCkJCQkJCVwKKwkoKih4cHJ0KS0+eHBfb3BzLT54cF9zdGF0KSh4cHJ0KQorCisjZGVmaW5lIFNWQ19HRVRBUkdTKHhwcnQsIHhhcmdzLCBhcmdzcCkJCQlcCisJKCooeHBydCktPnhwX29wcy0+eHBfZ2V0YXJncykoKHhwcnQpLCAoeGFyZ3MpLCAoYXJnc3ApKQorI2RlZmluZSBzdmNfZ2V0YXJncyh4cHJ0LCB4YXJncywgYXJnc3ApCQkJXAorCSgqKHhwcnQpLT54cF9vcHMtPnhwX2dldGFyZ3MpKCh4cHJ0KSwgKHhhcmdzKSwgKGFyZ3NwKSkKKworI2RlZmluZSBTVkNfUkVQTFkoeHBydCwgbXNnKQkJCQlcCisJKCooeHBydCktPnhwX29wcy0+eHBfcmVwbHkpICgoeHBydCksIChtc2cpKQorI2RlZmluZSBzdmNfcmVwbHkoeHBydCwgbXNnKQkJCQlcCisJKCooeHBydCktPnhwX29wcy0+eHBfcmVwbHkpICgoeHBydCksIChtc2cpKQorCisjZGVmaW5lIFNWQ19GUkVFQVJHUyh4cHJ0LCB4YXJncywgYXJnc3ApCQlcCisJKCooeHBydCktPnhwX29wcy0+eHBfZnJlZWFyZ3MpKCh4cHJ0KSwgKHhhcmdzKSwgKGFyZ3NwKSkKKyNkZWZpbmUgc3ZjX2ZyZWVhcmdzKHhwcnQsIHhhcmdzLCBhcmdzcCkJCVwKKwkoKih4cHJ0KS0+eHBfb3BzLT54cF9mcmVlYXJncykoKHhwcnQpLCAoeGFyZ3MpLCAoYXJnc3ApKQorCisjZGVmaW5lIFNWQ19ERVNUUk9ZKHhwcnQpCQkJCVwKKwkoKih4cHJ0KS0+eHBfb3BzLT54cF9kZXN0cm95KSh4cHJ0KQorI2RlZmluZSBzdmNfZGVzdHJveSh4cHJ0KQkJCQlcCisJKCooeHBydCktPnhwX29wcy0+eHBfZGVzdHJveSkoeHBydCkKKworCisvKgorICogU2VydmljZSByZXF1ZXN0CisgKi8KK3N0cnVjdCBzdmNfcmVxIHsKKyAgcnBjcHJvZ190IHJxX3Byb2c7ICAgICAgICAgICAgLyogc2VydmljZSBwcm9ncmFtIG51bWJlciAqLworICBycGN2ZXJzX3QgcnFfdmVyczsgICAgICAgICAgICAvKiBzZXJ2aWNlIHByb3RvY29sIHZlcnNpb24gKi8KKyAgcnBjcHJvY190IHJxX3Byb2M7ICAgICAgICAgICAgLyogdGhlIGRlc2lyZWQgcHJvY2VkdXJlICovCisgIHN0cnVjdCBvcGFxdWVfYXV0aCBycV9jcmVkOyAgIC8qIHJhdyBjcmVkcyBmcm9tIHRoZSB3aXJlICovCisgIGNhZGRyX3QgcnFfY2xudGNyZWQ7ICAgICAgICAgIC8qIHJlYWQgb25seSBjb29rZWQgY3JlZCAqLworICBTVkNYUFJUICpycV94cHJ0OyAgICAgICAgICAgICAvKiBhc3NvY2lhdGVkIHRyYW5zcG9ydCAqLworfTsKKworI2lmbmRlZiBfX0RJU1BBVENIX0ZOX1QKKyNkZWZpbmUgX19ESVNQQVRDSF9GTl9UCit0eXBlZGVmIHZvaWQgKCpfX2Rpc3BhdGNoX2ZuX3QpIChzdHJ1Y3Qgc3ZjX3JlcSosIFNWQ1hQUlQqKTsKKyNlbmRpZgorCisvKgorICogU2VydmljZSByZWdpc3RyYXRpb24KKyAqCisgKiBzdmNfcmVnaXN0ZXIoeHBydCwgcHJvZywgdmVycywgZGlzcGF0Y2gsIHByb3RvY29sKQorICoJU1ZDWFBSVCAqeHBydDsKKyAqCXJwY3Byb2dfdCBwcm9nOworICoJcnBjdmVyc190IHZlcnM7CisgKgl2b2lkICgqZGlzcGF0Y2gpKHN0cnVjdCBzdmNfcmVxKiwgU1ZDWFBSVCopOworICoJcnBjcHJvdF90IHByb3RvY29sOyAgbGlrZSBUQ1Agb3IgVURQLCB6ZXJvIG1lYW5zIGRvIG5vdCByZWdpc3RlcgorICovCitleHRlcm4gYm9vbF90IHN2Y19yZWdpc3RlciAoU1ZDWFBSVCAqX194cHJ0LCBycGNwcm9nX3QgX19wcm9nLAorCQkJICAgIHJwY3ZlcnNfdCBfX3ZlcnMsIF9fZGlzcGF0Y2hfZm5fdCBfX2Rpc3BhdGNoLAorCQkJICAgIHJwY3Byb3RfdCBfX3Byb3RvY29sKSBfX1RIUk9XOworCisvKgorICogU2VydmljZSB1bi1yZWdpc3RyYXRpb24KKyAqCisgKiBzdmNfdW5yZWdpc3Rlcihwcm9nLCB2ZXJzKQorICoJcnBjcHJvZ190IHByb2c7CisgKglycGN2ZXJzX3QgdmVyczsKKyAqLworZXh0ZXJuIHZvaWQgc3ZjX3VucmVnaXN0ZXIgKHJwY3Byb2dfdCBfX3Byb2csIHJwY3ZlcnNfdCBfX3ZlcnMpIF9fVEhST1c7CisKKy8qCisgKiBUcmFuc3BvcnQgcmVnaXN0cmF0aW9uLgorICoKKyAqIHhwcnRfcmVnaXN0ZXIoeHBydCkKKyAqCVNWQ1hQUlQgKnhwcnQ7CisgKi8KK2V4dGVybiB2b2lkIHhwcnRfcmVnaXN0ZXIgKFNWQ1hQUlQgKl9feHBydCkgX19USFJPVzsKKworLyoKKyAqIFRyYW5zcG9ydCB1bi1yZWdpc3RlcgorICoKKyAqIHhwcnRfdW5yZWdpc3Rlcih4cHJ0KQorICoJU1ZDWFBSVCAqeHBydDsKKyAqLworZXh0ZXJuIHZvaWQgeHBydF91bnJlZ2lzdGVyIChTVkNYUFJUICpfX3hwcnQpIF9fVEhST1c7CisKKworLyoKKyAqIFdoZW4gdGhlIHNlcnZpY2Ugcm91dGluZSBpcyBjYWxsZWQsIGl0IG11c3QgZmlyc3QgY2hlY2sgdG8gc2VlIGlmIGl0CisgKiBrbm93cyBhYm91dCB0aGUgcHJvY2VkdXJlOyAgaWYgbm90LCBpdCBzaG91bGQgY2FsbCBzdmNlcnJfbm9wcm9jCisgKiBhbmQgcmV0dXJuLiAgSWYgc28sIGl0IHNob3VsZCBkZXNlcmlhbGl6ZSBpdHMgYXJndW1lbnRzIHZpYQorICogU1ZDX0dFVEFSR1MgKGRlZmluZWQgYWJvdmUpLiAgSWYgdGhlIGRlc2VyaWFsaXphdGlvbiBkb2VzIG5vdCB3b3JrLAorICogc3ZjZXJyX2RlY29kZSBzaG91bGQgYmUgY2FsbGVkIGZvbGxvd2VkIGJ5IGEgcmV0dXJuLiAgU3VjY2Vzc2Z1bAorICogZGVjb2Rpbmcgb2YgdGhlIGFyZ3VtZW50cyBzaG91bGQgYmUgZm9sbG93ZWQgdGhlIGV4ZWN1dGlvbiBvZiB0aGUKKyAqIHByb2NlZHVyZSdzIGNvZGUgYW5kIGEgY2FsbCB0byBzdmNfc2VuZHJlcGx5LgorICoKKyAqIEFsc28sIGlmIHRoZSBzZXJ2aWNlIHJlZnVzZXMgdG8gZXhlY3V0ZSB0aGUgcHJvY2VkdXJlIGR1ZSB0byB0b28tCisgKiB3ZWFrIGF1dGhlbnRpY2F0aW9uIHBhcmFtZXRlcnMsIHN2Y2Vycl93ZWFrYXV0aCBzaG91bGQgYmUgY2FsbGVkLgorICogTm90ZTogZG8gbm90IGNvbmZ1c2UgYWNjZXNzLWNvbnRyb2wgZmFpbHVyZSB3aXRoIHdlYWsgYXV0aGVudGljYXRpb24hCisgKgorICogTkI6IEluIHB1cmUgaW1wbGVtZW50YXRpb25zIG9mIHJwYywgdGhlIGNhbGxlciBhbHdheXMgd2FpdHMgZm9yIGEgcmVwbHkKKyAqIG1zZy4gIFRoaXMgbWVzc2FnZSBpcyBzZW50IHdoZW4gc3ZjX3NlbmRyZXBseSBpcyBjYWxsZWQuCisgKiBUaGVyZWZvcmUgcHVyZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9ucyBzaG91bGQgYWx3YXlzIGNhbGwKKyAqIHN2Y19zZW5kcmVwbHkgZXZlbiBpZiB0aGUgZnVuY3Rpb24gbG9naWNhbGx5IHJldHVybnMgdm9pZDsgIHVzZQorICogeGRyLmggLSB4ZHJfdm9pZCBmb3IgdGhlIHhkciByb3V0aW5lLiAgSE9XRVZFUiwgdGNwIGJhc2VkIHJwYyBhbGxvd3MKKyAqIGZvciB0aGUgYWJ1c2Ugb2YgcHVyZSBycGMgdmlhIGJhdGNoZWQgY2FsbGluZyBvciBwaXBlbGluaW5nLiAgSW4gdGhlCisgKiBjYXNlIG9mIGEgYmF0Y2hlZCBjYWxsLCBzdmNfc2VuZHJlcGx5IHNob3VsZCBOT1QgYmUgY2FsbGVkIHNpbmNlCisgKiB0aGlzIHdvdWxkIHNlbmQgYSByZXR1cm4gbWVzc2FnZSwgd2hpY2ggaXMgd2hhdCBiYXRjaGluZyB0cmllcyB0byBhdm9pZC4KKyAqIEl0IGlzIHRoZSBzZXJ2aWNlL3Byb3RvY29sIHdyaXRlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGtub3cgd2hpY2ggY2FsbHMgYXJlCisgKiBiYXRjaGVkIGFuZCB3aGljaCBhcmUgbm90LiAgV2FybmluZzogcmVzcG9uZGluZyB0byBiYXRjaCBjYWxscyBtYXkKKyAqIGRlYWRsb2NrIHRoZSBjYWxsZXIgYW5kIHNlcnZlciBwcm9jZXNzZXMhCisgKi8KKworZXh0ZXJuIGJvb2xfdAlzdmNfc2VuZHJlcGx5IChTVkNYUFJUICp4cHJ0LCB4ZHJwcm9jX3QgX194ZHJfcmVzdWx0cywKKwkJCSAgICAgICBjYWRkcl90IF9feGRyX2xvY2F0aW9uKSBfX1RIUk9XOworCitleHRlcm4gdm9pZAlzdmNlcnJfZGVjb2RlIChTVkNYUFJUICpfX3hwcnQpIF9fVEhST1c7CisKK2V4dGVybiB2b2lkCXN2Y2Vycl93ZWFrYXV0aCAoU1ZDWFBSVCAqX194cHJ0KSBfX1RIUk9XOworCitleHRlcm4gdm9pZAlzdmNlcnJfbm9wcm9jIChTVkNYUFJUICpfX3hwcnQpIF9fVEhST1c7CisKK2V4dGVybiB2b2lkCXN2Y2Vycl9wcm9ndmVycyAoU1ZDWFBSVCAqX194cHJ0LCBycGN2ZXJzX3QgX19sb3dfdmVycywKKwkJCQkgcnBjdmVyc190IF9faGlnaF92ZXJzKSBfX1RIUk9XOworCitleHRlcm4gdm9pZAlzdmNlcnJfYXV0aCAoU1ZDWFBSVCAqX194cHJ0LCBlbnVtIGF1dGhfc3RhdCBfX3doeSkgX19USFJPVzsKKworZXh0ZXJuIHZvaWQJc3ZjZXJyX25vcHJvZyAoU1ZDWFBSVCAqX194cHJ0KSBfX1RIUk9XOworCitleHRlcm4gdm9pZAlzdmNlcnJfc3lzdGVtZXJyIChTVkNYUFJUICpfX3hwcnQpIF9fVEhST1c7CisKKy8qCisgKiBMb3dlc3QgbGV2ZWwgZGlzcGF0Y2hpbmcgLU9SLSB3aG8gb3ducyB0aGlzIHByb2Nlc3MgYW55d2F5LgorICogU29tZWJvZHkgaGFzIHRvIHdhaXQgZm9yIGluY29taW5nIHJlcXVlc3RzIGFuZCB0aGVuIGNhbGwgdGhlIGNvcnJlY3QKKyAqIHNlcnZpY2Ugcm91dGluZS4gIFRoZSByb3V0aW5lIHN2Y19ydW4gZG9lcyBpbmZpbml0ZSB3YWl0aW5nOyBpLmUuLAorICogc3ZjX3J1biBuZXZlciByZXR1cm5zLgorICogU2luY2UgYW5vdGhlciAoY29leGlzdGVudCkgcGFja2FnZSBtYXkgd2lzaCB0byBzZWxlY3RpdmVseSB3YWl0IGZvcgorICogaW5jb21pbmcgY2FsbHMgb3Igb3RoZXIgZXZlbnRzIG91dHNpZGUgb2YgdGhlIHJwYyBhcmNoaXRlY3R1cmUsIHRoZQorICogcm91dGluZSBzdmNfZ2V0cmVxIGlzIHByb3ZpZGVkLiAgSXQgbXVzdCBiZSBwYXNzZWQgcmVhZGZkcywgdGhlCisgKiAiaW4tcGxhY2UiIHJlc3VsdHMgb2YgYSBzZWxlY3Qgc3lzdGVtIGNhbGwgKHNlZSBzZWxlY3QsIHNlY3Rpb24gMikuCisgKi8KKworLyoKKyAqIEdsb2JhbCBrZWVwZXIgb2YgcnBjIHNlcnZpY2UgZGVzY3JpcHRvcnMgaW4gdXNlCisgKiBkeW5hbWljOyBtdXN0IGJlIGluc3BlY3RlZCBiZWZvcmUgZWFjaCBjYWxsIHRvIHNlbGVjdAorICovCisKK2V4dGVybiBzdHJ1Y3QgcG9sbGZkICpzdmNfcG9sbGZkOworZXh0ZXJuIGludCBzdmNfbWF4X3BvbGxmZDsKK2V4dGVybiBmZF9zZXQgc3ZjX2Zkc2V0OworI2RlZmluZSBzdmNfZmRzIHN2Y19mZHNldC5mZHNfYml0c1swXQkvKiBjb21wYXRpYmlsaXR5ICovCisKKy8qCisgKiBhIHNtYWxsIHByb2dyYW0gaW1wbGVtZW50ZWQgYnkgdGhlIHN2Y19ycGMgaW1wbGVtZW50YXRpb24gaXRzZWxmOworICogYWxzbyBzZWUgY2xudC5oIGZvciBwcm90b2NvbCBudW1iZXJzLgorICovCitleHRlcm4gdm9pZCBzdmNfZ2V0cmVxIChpbnQgX19yZGZkcykgX19USFJPVzsKK2V4dGVybiB2b2lkIHN2Y19nZXRyZXFfY29tbW9uIChjb25zdCBpbnQgX19mZCkgX19USFJPVzsKK2V4dGVybiB2b2lkIHN2Y19nZXRyZXFzZXQgKGZkX3NldCAqX19yZWFkZmRzKSBfX1RIUk9XOworZXh0ZXJuIHZvaWQgc3ZjX2dldHJlcV9wb2xsIChzdHJ1Y3QgcG9sbGZkICosIGNvbnN0IGludCkgX19USFJPVzsKK2V4dGVybiB2b2lkIHN2Y19leGl0ICh2b2lkKSBfX1RIUk9XOworZXh0ZXJuIHZvaWQgc3ZjX3J1biAodm9pZCkgX19USFJPVzsKKworLyoKKyAqIFNvY2tldCB0byB1c2Ugb24gc3ZjeHh4X2NyZWF0ZSBjYWxsIHRvIGdldCBkZWZhdWx0IHNvY2tldAorICovCisjZGVmaW5lCVJQQ19BTllTT0NLCS0xCisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIGV4aXN0aW5nIHNlcnZpY2Ugc2lkZSB0cmFuc3BvcnQgaW1wbGVtZW50YXRpb25zCisgKi8KKworLyoKKyAqIE1lbW9yeSBiYXNlZCBycGMgZm9yIHRlc3RpbmcgYW5kIHRpbWluZy4KKyAqLworZXh0ZXJuIFNWQ1hQUlQgKnN2Y3Jhd19jcmVhdGUgKHZvaWQpIF9fVEhST1c7CisKKy8qCisgKiBVZHAgYmFzZWQgcnBjLgorICovCitleHRlcm4gU1ZDWFBSVCAqc3ZjdWRwX2NyZWF0ZSAoaW50IF9fc29jaykgX19USFJPVzsKK2V4dGVybiBTVkNYUFJUICpzdmN1ZHBfYnVmY3JlYXRlIChpbnQgX19zb2NrLCB1X2ludCBfX3NlbmRzeiwgdV9pbnQgX19yZWN2c3opCisgICAgIF9fVEhST1c7CisKKy8qCisgKiBUY3AgYmFzZWQgcnBjLgorICovCitleHRlcm4gU1ZDWFBSVCAqc3ZjdGNwX2NyZWF0ZSAoaW50IF9fc29jaywgdV9pbnQgX19zZW5kc2l6ZSwgdV9pbnQgX19yZWN2c2l6ZSkKKyAgICAgX19USFJPVzsKKworLyoKKyAqIEZEIGJhc2VkIHJwYy4KKyAqLworZXh0ZXJuIFNWQ1hQUlQgKnN2Y2ZkX2NyZWF0ZSAoaW50IF9fc29jaywgdV9pbnQgX19zZW5kc2l6ZSwgdV9pbnQgX19yZWN2c2l6ZSkKKyAgICAgX19USFJPVzsKKworLyoKKyAqIFVuaXggYmFzZWQgcnBjLgorICovCitleHRlcm4gU1ZDWFBSVCAqc3ZjdW5peF9jcmVhdGUgKGludCBfX3NvY2ssIHVfaW50IF9fc2VuZHNpemUsIHVfaW50IF9fcmVjdnNpemUsCisJCQkJY2hhciAqX19wYXRoKSBfX1RIUk9XOworCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBycGMvc3ZjLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGMvc3ZjX2F1dGguaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGMvc3ZjX2F1dGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzFhNzE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwYy9zdmNfYXV0aC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qIEAoIylzdmNfYXV0aC5oCTIuMSA4OC8wNy8yOSA0LjAgUlBDU1JDICovCisvKgorICogU3VuIFJQQyBpcyBhIHByb2R1Y3Qgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBhbmQgaXMgcHJvdmlkZWQgZm9yCisgKiB1bnJlc3RyaWN0ZWQgdXNlIHByb3ZpZGVkIHRoYXQgdGhpcyBsZWdlbmQgaXMgaW5jbHVkZWQgb24gYWxsIHRhcGUKKyAqIG1lZGlhIGFuZCBhcyBhIHBhcnQgb2YgdGhlIHNvZnR3YXJlIHByb2dyYW0gaW4gd2hvbGUgb3IgcGFydC4gIFVzZXJzCisgKiBtYXkgY29weSBvciBtb2RpZnkgU3VuIFJQQyB3aXRob3V0IGNoYXJnZSwgYnV0IGFyZSBub3QgYXV0aG9yaXplZAorICogdG8gbGljZW5zZSBvciBkaXN0cmlidXRlIGl0IHRvIGFueW9uZSBlbHNlIGV4Y2VwdCBhcyBwYXJ0IG9mIGEgcHJvZHVjdCBvcgorICogcHJvZ3JhbSBkZXZlbG9wZWQgYnkgdGhlIHVzZXIuCisgKgorICogU1VOIFJQQyBJUyBQUk9WSURFRCBBUyBJUyBXSVRIIE5PIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgSU5DTFVESU5HIFRIRQorICogV0FSUkFOVElFUyBPRiBERVNJR04sIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFLCBPUiBBUklTSU5HIEZST00gQSBDT1VSU0UgT0YgREVBTElORywgVVNBR0UgT1IgVFJBREUgUFJBQ1RJQ0UuCisgKgorICogU3VuIFJQQyBpcyBwcm92aWRlZCB3aXRoIG5vIHN1cHBvcnQgYW5kIHdpdGhvdXQgYW55IG9ibGlnYXRpb24gb24gdGhlCisgKiBwYXJ0IG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gdG8gYXNzaXN0IGluIGl0cyB1c2UsIGNvcnJlY3Rpb24sCisgKiBtb2RpZmljYXRpb24gb3IgZW5oYW5jZW1lbnQuCisgKgorICogU1VOIE1JQ1JPU1lTVEVNUywgSU5DLiBTSEFMTCBIQVZFIE5PIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFCisgKiBJTkZSSU5HRU1FTlQgT0YgQ09QWVJJR0hUUywgVFJBREUgU0VDUkVUUyBPUiBBTlkgUEFURU5UUyBCWSBTVU4gUlBDCisgKiBPUiBBTlkgUEFSVCBUSEVSRU9GLgorICoKKyAqIEluIG5vIGV2ZW50IHdpbGwgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBiZSBsaWFibGUgZm9yIGFueSBsb3N0IHJldmVudWUKKyAqIG9yIHByb2ZpdHMgb3Igb3RoZXIgc3BlY2lhbCwgaW5kaXJlY3QgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgZXZlbiBpZgorICogU3VuIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKyAqCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiAyNTUwIEdhcmNpYSBBdmVudWUKKyAqIE1vdW50YWluIFZpZXcsIENhbGlmb3JuaWEgIDk0MDQzCisgKi8KKy8qICAgICAgQCgjKXN2Y19hdXRoLmggMS42IDg2LzA3LzE2IFNNSSAgICAgICovCisKKy8qCisgKiBzdmNfYXV0aC5oLCBTZXJ2aWNlIHNpZGUgb2YgcnBjIGF1dGhlbnRpY2F0aW9uLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk4NCwgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICovCisKKyNpZm5kZWYgX1JQQ19TVkNfQVVUSF9ICisjZGVmaW5lIF9SUENfU1ZDX0FVVEhfSAkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorI2luY2x1ZGUgPHJwYy9zdmMuaD4KKworX19CRUdJTl9ERUNMUworCisvKgorICogU2VydmVyIHNpZGUgYXV0aGVudGljYXRvcgorICovCitleHRlcm4gZW51bSBhdXRoX3N0YXQgX2F1dGhlbnRpY2F0ZSAoc3RydWN0IHN2Y19yZXEgKl9fcnFzdCwKKwkJCQkgICAgIHN0cnVjdCBycGNfbXNnICpfX21zZykgX19USFJPVzsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIHJwYy9zdmNfYXV0aC5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjL3R5cGVzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjL3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVkOTkwOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGMvdHlwZXMuaApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIFN1biBSUEMgaXMgYSBwcm9kdWN0IG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYW5kIGlzIHByb3ZpZGVkIGZvcgorICogdW5yZXN0cmljdGVkIHVzZSBwcm92aWRlZCB0aGF0IHRoaXMgbGVnZW5kIGlzIGluY2x1ZGVkIG9uIGFsbCB0YXBlCisgKiBtZWRpYSBhbmQgYXMgYSBwYXJ0IG9mIHRoZSBzb2Z0d2FyZSBwcm9ncmFtIGluIHdob2xlIG9yIHBhcnQuICBVc2VycworICogbWF5IGNvcHkgb3IgbW9kaWZ5IFN1biBSUEMgd2l0aG91dCBjaGFyZ2UsIGJ1dCBhcmUgbm90IGF1dGhvcml6ZWQKKyAqIHRvIGxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBpdCB0byBhbnlvbmUgZWxzZSBleGNlcHQgYXMgcGFydCBvZiBhIHByb2R1Y3Qgb3IKKyAqIHByb2dyYW0gZGV2ZWxvcGVkIGJ5IHRoZSB1c2VyLgorICoKKyAqIFNVTiBSUEMgSVMgUFJPVklERUQgQVMgSVMgV0lUSCBOTyBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIElOQ0xVRElORyBUSEUKKyAqIFdBUlJBTlRJRVMgT0YgREVTSUdOLCBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSwgT1IgQVJJU0lORyBGUk9NIEEgQ09VUlNFIE9GIERFQUxJTkcsIFVTQUdFIE9SIFRSQURFIFBSQUNUSUNFLgorICoKKyAqIFN1biBSUEMgaXMgcHJvdmlkZWQgd2l0aCBubyBzdXBwb3J0IGFuZCB3aXRob3V0IGFueSBvYmxpZ2F0aW9uIG9uIHRoZQorICogcGFydCBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIHRvIGFzc2lzdCBpbiBpdHMgdXNlLCBjb3JyZWN0aW9uLAorICogbW9kaWZpY2F0aW9uIG9yIGVuaGFuY2VtZW50LgorICoKKyAqIFNVTiBNSUNST1NZU1RFTVMsIElOQy4gU0hBTEwgSEFWRSBOTyBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRQorICogSU5GUklOR0VNRU5UIE9GIENPUFlSSUdIVFMsIFRSQURFIFNFQ1JFVFMgT1IgQU5ZIFBBVEVOVFMgQlkgU1VOIFJQQworICogT1IgQU5ZIFBBUlQgVEhFUkVPRi4KKyAqCisgKiBJbiBubyBldmVudCB3aWxsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYmUgbGlhYmxlIGZvciBhbnkgbG9zdCByZXZlbnVlCisgKiBvciBwcm9maXRzIG9yIG90aGVyIHNwZWNpYWwsIGluZGlyZWN0IGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIGV2ZW4gaWYKKyAqIFN1biBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisgKgorICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogMjU1MCBHYXJjaWEgQXZlbnVlCisgKiBNb3VudGFpbiBWaWV3LCBDYWxpZm9ybmlhICA5NDA0MworICovCisvKiBmaXhpbmNsdWRlcyBzaG91bGQgbm90IGFkZCBleHRlcm4gIkMiIHRvIHRoaXMgZmlsZSAqLworLyoKKyAqIFJwYyBhZGRpdGlvbnMgdG8gPHN5cy90eXBlcy5oPgorICovCisjaWZuZGVmIF9SUENfVFlQRVNfSAorI2RlZmluZSBfUlBDX1RZUEVTX0ggMQorCit0eXBlZGVmIGludCBib29sX3Q7Cit0eXBlZGVmIGludCBlbnVtX3Q7CisvKiBUaGlzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gdWludDMyX3QgaW4gdGhlIGZ1dHVyZSAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHJwY3Byb2dfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBycGN2ZXJzX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcnBjcHJvY190OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHJwY3Byb3RfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBycGNwb3J0X3Q7CisKKyNkZWZpbmUgICAgICAgIF9fZG9udGNhcmVfXyAgICAtMQorCisjaWZuZGVmIEZBTFNFCisjICAgICAgZGVmaW5lICBGQUxTRSAgICgwKQorI2VuZGlmCisKKyNpZm5kZWYgVFJVRQorIyAgICAgIGRlZmluZSAgVFJVRSAgICAoMSkKKyNlbmRpZgorCisjaWZuZGVmIE5VTEwKKyMgICAgICBkZWZpbmUgIE5VTEwgMAorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4JCS8qIEZvciBtYWxsb2MgZGVjbC4gICovCisjZGVmaW5lIG1lbV9hbGxvYyhic2l6ZSkJbWFsbG9jKGJzaXplKQorLyoKKyAqIFhYWDogVGhpcyBtdXN0IG5vdCB1c2UgdGhlIHNlY29uZCBhcmd1bWVudCwgb3IgY29kZSBpbiB4ZHJfYXJyYXkuYyBuZWVkcworICogdG8gYmUgbW9kaWZpZWQuCisgKi8KKyNkZWZpbmUgbWVtX2ZyZWUocHRyLCBic2l6ZSkJZnJlZShwdHIpCisKKyNpZm5kZWYgbWFrZWRldiAvKiBpZSwgd2UgaGF2ZW4ndCBhbHJlYWR5IGluY2x1ZGVkIGl0ICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2lmbmRlZiBfX3VfY2hhcl9kZWZpbmVkCit0eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsKK3R5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7Cit0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7Cit0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsKK3R5cGVkZWYgX19xdWFkX3QgcXVhZF90OwordHlwZWRlZiBfX3VfcXVhZF90IHVfcXVhZF90OwordHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CisjIGRlZmluZSBfX3VfY2hhcl9kZWZpbmVkCisjZW5kaWYKKyNpZm5kZWYgX19kYWRkcl90X2RlZmluZWQKK3R5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CisjIGlmICEgZGVmaW5lZChjYWRkcl90KSAmJiAhIGRlZmluZWQoX19jYWRkcl90X2RlZmluZWQpCit0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OworIyAgZGVmaW5lIF9fY2FkZHJfdF9kZWZpbmVkCisjIGVuZGlmCisjIGRlZmluZSBfX2RhZGRyX3RfZGVmaW5lZAorI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorCisjaWZuZGVmIElOQUREUl9MT09QQkFDSworI2RlZmluZSAgICAgICBJTkFERFJfTE9PUEJBQ0sgICAgICAgICAodV9sb25nKTB4N0YwMDAwMDEKKyNlbmRpZgorI2lmbmRlZiBNQVhIT1NUTkFNRUxFTgorI2RlZmluZSAgICAgICAgTUFYSE9TVE5BTUVMRU4gIDY0CisjZW5kaWYKKworI2VuZGlmIC8qIHJwYy90eXBlcy5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjL3hkci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwYy94ZHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTk2OTFkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwYy94ZHIuaApAQCAtMCwwICsxLDM3OSBAQAorLyoKKyAqIFN1biBSUEMgaXMgYSBwcm9kdWN0IG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYW5kIGlzIHByb3ZpZGVkIGZvcgorICogdW5yZXN0cmljdGVkIHVzZSBwcm92aWRlZCB0aGF0IHRoaXMgbGVnZW5kIGlzIGluY2x1ZGVkIG9uIGFsbCB0YXBlCisgKiBtZWRpYSBhbmQgYXMgYSBwYXJ0IG9mIHRoZSBzb2Z0d2FyZSBwcm9ncmFtIGluIHdob2xlIG9yIHBhcnQuICBVc2VycworICogbWF5IGNvcHkgb3IgbW9kaWZ5IFN1biBSUEMgd2l0aG91dCBjaGFyZ2UsIGJ1dCBhcmUgbm90IGF1dGhvcml6ZWQKKyAqIHRvIGxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBpdCB0byBhbnlvbmUgZWxzZSBleGNlcHQgYXMgcGFydCBvZiBhIHByb2R1Y3Qgb3IKKyAqIHByb2dyYW0gZGV2ZWxvcGVkIGJ5IHRoZSB1c2VyLgorICoKKyAqIFNVTiBSUEMgSVMgUFJPVklERUQgQVMgSVMgV0lUSCBOTyBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIElOQ0xVRElORyBUSEUKKyAqIFdBUlJBTlRJRVMgT0YgREVTSUdOLCBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSwgT1IgQVJJU0lORyBGUk9NIEEgQ09VUlNFIE9GIERFQUxJTkcsIFVTQUdFIE9SIFRSQURFIFBSQUNUSUNFLgorICoKKyAqIFN1biBSUEMgaXMgcHJvdmlkZWQgd2l0aCBubyBzdXBwb3J0IGFuZCB3aXRob3V0IGFueSBvYmxpZ2F0aW9uIG9uIHRoZQorICogcGFydCBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIHRvIGFzc2lzdCBpbiBpdHMgdXNlLCBjb3JyZWN0aW9uLAorICogbW9kaWZpY2F0aW9uIG9yIGVuaGFuY2VtZW50LgorICoKKyAqIFNVTiBNSUNST1NZU1RFTVMsIElOQy4gU0hBTEwgSEFWRSBOTyBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRQorICogSU5GUklOR0VNRU5UIE9GIENPUFlSSUdIVFMsIFRSQURFIFNFQ1JFVFMgT1IgQU5ZIFBBVEVOVFMgQlkgU1VOIFJQQworICogT1IgQU5ZIFBBUlQgVEhFUkVPRi4KKyAqCisgKiBJbiBubyBldmVudCB3aWxsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYmUgbGlhYmxlIGZvciBhbnkgbG9zdCByZXZlbnVlCisgKiBvciBwcm9maXRzIG9yIG90aGVyIHNwZWNpYWwsIGluZGlyZWN0IGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIGV2ZW4gaWYKKyAqIFN1biBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisgKgorICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogMjU1MCBHYXJjaWEgQXZlbnVlCisgKiBNb3VudGFpbiBWaWV3LCBDYWxpZm9ybmlhICA5NDA0MworICovCisKKy8qCisgKiB4ZHIuaCwgRXh0ZXJuYWwgRGF0YSBSZXByZXNlbnRhdGlvbiBTZXJpYWxpemF0aW9uIFJvdXRpbmVzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk4NCwgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICovCisKKyNpZm5kZWYgX1JQQ19YRFJfSAorI2RlZmluZSBfUlBDX1hEUl9IIDEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8cnBjL3R5cGVzLmg+CisKKy8qIFdlIG5lZWQgRklMRS4gICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKworX19CRUdJTl9ERUNMUworCisvKgorICogWERSIHByb3ZpZGVzIGEgY29udmVudGlvbmFsIHdheSBmb3IgY29udmVydGluZyBiZXR3ZWVuIEMgZGF0YQorICogdHlwZXMgYW5kIGFuIGV4dGVybmFsIGJpdC1zdHJpbmcgcmVwcmVzZW50YXRpb24uICBMaWJyYXJ5IHN1cHBsaWVkCisgKiByb3V0aW5lcyBwcm92aWRlIGZvciB0aGUgY29udmVyc2lvbiBvbiBidWlsdC1pbiBDIGRhdGEgdHlwZXMuICBUaGVzZQorICogcm91dGluZXMgYW5kIHV0aWxpdHkgcm91dGluZXMgZGVmaW5lZCBoZXJlIGFyZSB1c2VkIHRvIGhlbHAgaW1wbGVtZW50CisgKiBhIHR5cGUgZW5jb2RlL2RlY29kZSByb3V0aW5lIGZvciBlYWNoIHVzZXItZGVmaW5lZCB0eXBlLgorICoKKyAqIEVhY2ggZGF0YSB0eXBlIHByb3ZpZGVzIGEgc2luZ2xlIHByb2NlZHVyZSB3aGljaCB0YWtlcyB0d28gYXJndW1lbnRzOgorICoKKyAqICAgICAgYm9vbF90CisgKiAgICAgIHhkcnByb2MoeGRycywgYXJncmVzcCkKKyAqICAgICAgICAgICAgICBYRFIgKnhkcnM7CisgKiAgICAgICAgICAgICAgPHR5cGU+ICphcmdyZXNwOworICoKKyAqIHhkcnMgaXMgYW4gaW5zdGFuY2Ugb2YgYSBYRFIgaGFuZGxlLCB0byB3aGljaCBvciBmcm9tIHdoaWNoIHRoZSBkYXRhCisgKiB0eXBlIGlzIHRvIGJlIGNvbnZlcnRlZC4gIGFyZ3Jlc3AgaXMgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgdG8gYmUKKyAqIGNvbnZlcnRlZC4gIFRoZSBYRFIgaGFuZGxlIGNvbnRhaW5zIGFuIG9wZXJhdGlvbiBmaWVsZCB3aGljaCBpbmRpY2F0ZXMKKyAqIHdoaWNoIG9mIHRoZSBvcGVyYXRpb25zIChFTkNPREUsIERFQ09ERSAqIG9yIEZSRUUpIGlzIHRvIGJlIHBlcmZvcm1lZC4KKyAqCisgKiBYRFJfREVDT0RFIG1heSBhbGxvY2F0ZSBzcGFjZSBpZiB0aGUgcG9pbnRlciBhcmdyZXNwIGlzIG51bGwuICBUaGlzCisgKiBkYXRhIGNhbiBiZSBmcmVlZCB3aXRoIHRoZSBYRFJfRlJFRSBvcGVyYXRpb24uCisgKgorICogV2Ugd3JpdGUgb25seSBvbmUgcHJvY2VkdXJlIHBlciBkYXRhIHR5cGUgdG8gbWFrZSBpdCBlYXN5CisgKiB0byBrZWVwIHRoZSBlbmNvZGUgYW5kIGRlY29kZSBwcm9jZWR1cmVzIGZvciBhIGRhdGEgdHlwZSBjb25zaXN0ZW50LgorICogSW4gbWFueSBjYXNlcyB0aGUgc2FtZSBjb2RlIHBlcmZvcm1zIGFsbCBvcGVyYXRpb25zIG9uIGEgdXNlciBkZWZpbmVkIHR5cGUsCisgKiBiZWNhdXNlIGFsbCB0aGUgaGFyZCB3b3JrIGlzIGRvbmUgaW4gdGhlIGNvbXBvbmVudCB0eXBlIHJvdXRpbmVzLgorICogZGVjb2RlIGFzIGEgc2VyaWVzIG9mIGNhbGxzIG9uIHRoZSBuZXN0ZWQgZGF0YSB0eXBlcy4KKyAqLworCisvKgorICogWGRyIG9wZXJhdGlvbnMuICBYRFJfRU5DT0RFIGNhdXNlcyB0aGUgdHlwZSB0byBiZSBlbmNvZGVkIGludG8gdGhlCisgKiBzdHJlYW0uICBYRFJfREVDT0RFIGNhdXNlcyB0aGUgdHlwZSB0byBiZSBleHRyYWN0ZWQgZnJvbSB0aGUgc3RyZWFtLgorICogWERSX0ZSRUUgY2FuIGJlIHVzZWQgdG8gcmVsZWFzZSB0aGUgc3BhY2UgYWxsb2NhdGVkIGJ5IGFuIFhEUl9ERUNPREUKKyAqIHJlcXVlc3QuCisgKi8KK2VudW0geGRyX29wIHsKKyAgWERSX0VOQ09ERSA9IDAsCisgIFhEUl9ERUNPREUgPSAxLAorICBYRFJfRlJFRSA9IDIKK307CisKKy8qCisgKiBUaGlzIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgcGVyIHVuaXQgb2YgZXh0ZXJuYWwgZGF0YS4KKyAqLworI2RlZmluZSBCWVRFU19QRVJfWERSX1VOSVQJKDQpCisvKgorICogVGhpcyBvbmx5IHdvcmtzIGlmIHRoZSBhYm92ZSBpcyBhIHBvd2VyIG9mIDIuICBCdXQgaXQncyBkZWZpbmVkIHRvIGJlCisgKiA0IGJ5IHRoZSBhcHByb3ByaWF0ZSBSRkNzLiAgU28gaXQgd2lsbCB3b3JrLiAgQW5kIGl0J3Mgbm9ybWFsbHkgcXVpY2tlcgorICogdGhhbiB0aGUgb2xkIHJvdXRpbmUuCisgKi8KKyNpZiAxCisjZGVmaW5lIFJORFVQKHgpICAoKCh4KSArIEJZVEVTX1BFUl9YRFJfVU5JVCAtIDEpICYgfihCWVRFU19QRVJfWERSX1VOSVQgLSAxKSkKKyNlbHNlIC8qIHRoaXMgaXMgdGhlIG9sZCByb3V0aW5lICovCisjZGVmaW5lIFJORFVQKHgpICAoKCgoeCkgKyBCWVRFU19QRVJfWERSX1VOSVQgLSAxKSAvIEJZVEVTX1BFUl9YRFJfVU5JVCkgXAorCQkgICAgKiBCWVRFU19QRVJfWERSX1VOSVQpCisjZW5kaWYKKworLyoKKyAqIFRoZSBYRFIgaGFuZGxlLgorICogQ29udGFpbnMgb3BlcmF0aW9uIHdoaWNoIGlzIGJlaW5nIGFwcGxpZWQgdG8gdGhlIHN0cmVhbSwKKyAqIGFuIG9wZXJhdGlvbnMgdmVjdG9yIGZvciB0aGUgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbiAoZS5nLiBzZWUgeGRyX21lbS5jKSwKKyAqIGFuZCB0d28gcHJpdmF0ZSBmaWVsZHMgZm9yIHRoZSB1c2Ugb2YgdGhlIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IFhEUiBYRFI7CitzdHJ1Y3QgWERSCisgIHsKKyAgICBlbnVtIHhkcl9vcCB4X29wOwkJLyogb3BlcmF0aW9uOyBmYXN0IGFkZGl0aW9uYWwgcGFyYW0gKi8KKyAgICBzdHJ1Y3QgeGRyX29wcworICAgICAgeworCWJvb2xfdCAoKnhfZ2V0bG9uZykgKFhEUiAqX194ZHJzLCBsb25nICpfX2xwKTsKKwkvKiBnZXQgYSBsb25nIGZyb20gdW5kZXJseWluZyBzdHJlYW0gKi8KKwlib29sX3QgKCp4X3B1dGxvbmcpIChYRFIgKl9feGRycywgX19jb25zdCBsb25nICpfX2xwKTsKKwkvKiBwdXQgYSBsb25nIHRvICIgKi8KKwlib29sX3QgKCp4X2dldGJ5dGVzKSAoWERSICpfX3hkcnMsIGNhZGRyX3QgX19hZGRyLCB1X2ludCBfX2xlbik7CisJLyogZ2V0IHNvbWUgYnl0ZXMgZnJvbSAiICovCisJYm9vbF90ICgqeF9wdXRieXRlcykgKFhEUiAqX194ZHJzLCBfX2NvbnN0IGNoYXIgKl9fYWRkciwgdV9pbnQgX19sZW4pOworCS8qIHB1dCBzb21lIGJ5dGVzIHRvICIgKi8KKwl1X2ludCAoKnhfZ2V0cG9zdG4pIChfX2NvbnN0IFhEUiAqX194ZHJzKTsKKwkvKiByZXR1cm5zIGJ5dGVzIG9mZiBmcm9tIGJlZ2lubmluZyAqLworCWJvb2xfdCAoKnhfc2V0cG9zdG4pIChYRFIgKl9feGRycywgdV9pbnQgX19wb3MpOworCS8qIGxldHMgeW91IHJlcG9zaXRpb24gdGhlIHN0cmVhbSAqLworCWludDMyX3QgKigqeF9pbmxpbmUpIChYRFIgKl9feGRycywgdV9pbnQgX19sZW4pOworCS8qIGJ1ZiBxdWljayBwdHIgdG8gYnVmZmVyZWQgZGF0YSAqLworCXZvaWQgKCp4X2Rlc3Ryb3kpIChYRFIgKl9feGRycyk7CisJLyogZnJlZSBwcml2YXRlcyBvZiB0aGlzIHhkcl9zdHJlYW0gKi8KKwlib29sX3QgKCp4X2dldGludDMyKSAoWERSICpfX3hkcnMsIGludDMyX3QgKl9faXApOworCS8qIGdldCBhIGludCBmcm9tIHVuZGVybHlpbmcgc3RyZWFtICovCisJYm9vbF90ICgqeF9wdXRpbnQzMikgKFhEUiAqX194ZHJzLCBfX2NvbnN0IGludDMyX3QgKl9faXApOworCS8qIHB1dCBhIGludCB0byAiICovCisgICAgICB9CisgICAgICp4X29wczsKKyAgICBjYWRkcl90IHhfcHVibGljOwkJLyogdXNlcnMnIGRhdGEgKi8KKyAgICBjYWRkcl90IHhfcHJpdmF0ZTsJCS8qIHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCisgICAgY2FkZHJfdCB4X2Jhc2U7CQkvKiBwcml2YXRlIHVzZWQgZm9yIHBvc2l0aW9uIGluZm8gKi8KKyAgICB1X2ludCB4X2hhbmR5OwkJLyogZXh0cmEgcHJpdmF0ZSB3b3JkICovCisgIH07CisKKy8qCisgKiBBIHhkcnByb2NfdCBleGlzdHMgZm9yIGVhY2ggZGF0YSB0eXBlIHdoaWNoIGlzIHRvIGJlIGVuY29kZWQgb3IgZGVjb2RlZC4KKyAqCisgKiBUaGUgc2Vjb25kIGFyZ3VtZW50IHRvIHRoZSB4ZHJwcm9jX3QgaXMgYSBwb2ludGVyIHRvIGFuIG9wYXF1ZSBwb2ludGVyLgorICogVGhlIG9wYXF1ZSBwb2ludGVyIGdlbmVyYWxseSBwb2ludHMgdG8gYSBzdHJ1Y3R1cmUgb2YgdGhlIGRhdGEgdHlwZQorICogdG8gYmUgZGVjb2RlZC4gIElmIHRoaXMgcG9pbnRlciBpcyAwLCB0aGVuIHRoZSB0eXBlIHJvdXRpbmVzIHNob3VsZAorICogYWxsb2NhdGUgZHluYW1pYyBzdG9yYWdlIG9mIHRoZSBhcHByb3ByaWF0ZSBzaXplIGFuZCByZXR1cm4gaXQuCisgKiBib29sX3QgICAgICAgKCp4ZHJwcm9jX3QpKFhEUiAqLCBjYWRkcl90ICopOworICovCit0eXBlZGVmIGJvb2xfdCAoKnhkcnByb2NfdCkgKFhEUiAqLCB2b2lkICosLi4uKTsKKworCisvKgorICogT3BlcmF0aW9ucyBkZWZpbmVkIG9uIGEgWERSIGhhbmRsZQorICoKKyAqIFhEUiAgICAgICAgICAqeGRyczsKKyAqIGludDMyX3QgICAgICAqaW50MzJwOworICogbG9uZyAgICAgICAgICpsb25ncDsKKyAqIGNhZGRyX3QgICAgICAgYWRkcjsKKyAqIHVfaW50ICAgICAgICAgbGVuOworICogdV9pbnQgICAgICAgICBwb3M7CisgKi8KKyNkZWZpbmUgWERSX0dFVElOVDMyKHhkcnMsIGludDMycCkgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKih4ZHJzKS0+eF9vcHMtPnhfZ2V0aW50MzIpKHhkcnMsIGludDMycCkKKyNkZWZpbmUgeGRyX2dldGludDMyKHhkcnMsIGludDMycCkgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKih4ZHJzKS0+eF9vcHMtPnhfZ2V0aW50MzIpKHhkcnMsIGludDMycCkKKworI2RlZmluZSBYRFJfUFVUSU5UMzIoeGRycywgaW50MzJwKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgqKHhkcnMpLT54X29wcy0+eF9wdXRpbnQzMikoeGRycywgaW50MzJwKQorI2RlZmluZSB4ZHJfcHV0aW50MzIoeGRycywgaW50MzJwKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgqKHhkcnMpLT54X29wcy0+eF9wdXRpbnQzMikoeGRycywgaW50MzJwKQorCisjZGVmaW5lIFhEUl9HRVRMT05HKHhkcnMsIGxvbmdwKQkJCVwKKwkoKih4ZHJzKS0+eF9vcHMtPnhfZ2V0bG9uZykoeGRycywgbG9uZ3ApCisjZGVmaW5lIHhkcl9nZXRsb25nKHhkcnMsIGxvbmdwKQkJCVwKKwkoKih4ZHJzKS0+eF9vcHMtPnhfZ2V0bG9uZykoeGRycywgbG9uZ3ApCisKKyNkZWZpbmUgWERSX1BVVExPTkcoeGRycywgbG9uZ3ApCQkJXAorCSgqKHhkcnMpLT54X29wcy0+eF9wdXRsb25nKSh4ZHJzLCBsb25ncCkKKyNkZWZpbmUgeGRyX3B1dGxvbmcoeGRycywgbG9uZ3ApCQkJXAorCSgqKHhkcnMpLT54X29wcy0+eF9wdXRsb25nKSh4ZHJzLCBsb25ncCkKKworI2RlZmluZSBYRFJfR0VUQllURVMoeGRycywgYWRkciwgbGVuKQkJCVwKKwkoKih4ZHJzKS0+eF9vcHMtPnhfZ2V0Ynl0ZXMpKHhkcnMsIGFkZHIsIGxlbikKKyNkZWZpbmUgeGRyX2dldGJ5dGVzKHhkcnMsIGFkZHIsIGxlbikJCQlcCisJKCooeGRycyktPnhfb3BzLT54X2dldGJ5dGVzKSh4ZHJzLCBhZGRyLCBsZW4pCisKKyNkZWZpbmUgWERSX1BVVEJZVEVTKHhkcnMsIGFkZHIsIGxlbikJCQlcCisJKCooeGRycyktPnhfb3BzLT54X3B1dGJ5dGVzKSh4ZHJzLCBhZGRyLCBsZW4pCisjZGVmaW5lIHhkcl9wdXRieXRlcyh4ZHJzLCBhZGRyLCBsZW4pCQkJXAorCSgqKHhkcnMpLT54X29wcy0+eF9wdXRieXRlcykoeGRycywgYWRkciwgbGVuKQorCisjZGVmaW5lIFhEUl9HRVRQT1MoeGRycykJCQkJXAorCSgqKHhkcnMpLT54X29wcy0+eF9nZXRwb3N0bikoeGRycykKKyNkZWZpbmUgeGRyX2dldHBvcyh4ZHJzKQkJCQlcCisJKCooeGRycyktPnhfb3BzLT54X2dldHBvc3RuKSh4ZHJzKQorCisjZGVmaW5lIFhEUl9TRVRQT1MoeGRycywgcG9zKQkJCQlcCisJKCooeGRycyktPnhfb3BzLT54X3NldHBvc3RuKSh4ZHJzLCBwb3MpCisjZGVmaW5lIHhkcl9zZXRwb3MoeGRycywgcG9zKQkJCQlcCisJKCooeGRycyktPnhfb3BzLT54X3NldHBvc3RuKSh4ZHJzLCBwb3MpCisKKyNkZWZpbmUJWERSX0lOTElORSh4ZHJzLCBsZW4pCQkJCVwKKwkoKih4ZHJzKS0+eF9vcHMtPnhfaW5saW5lKSh4ZHJzLCBsZW4pCisjZGVmaW5lCXhkcl9pbmxpbmUoeGRycywgbGVuKQkJCQlcCisJKCooeGRycyktPnhfb3BzLT54X2lubGluZSkoeGRycywgbGVuKQorCisjZGVmaW5lCVhEUl9ERVNUUk9ZKHhkcnMpCQkJCQlcCisJZG8gewkJCQkJCQlcCisJCWlmICgoeGRycyktPnhfb3BzLT54X2Rlc3Ryb3kpCQkJXAorCQkJKCooeGRycyktPnhfb3BzLT54X2Rlc3Ryb3kpKHhkcnMpOwlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUJeGRyX2Rlc3Ryb3koeGRycykJCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJaWYgKCh4ZHJzKS0+eF9vcHMtPnhfZGVzdHJveSkJCQlcCisJCQkoKih4ZHJzKS0+eF9vcHMtPnhfZGVzdHJveSkoeGRycyk7CVwKKwl9IHdoaWxlICgwKQorCisvKgorICogU3VwcG9ydCBzdHJ1Y3QgZm9yIGRpc2NyaW1pbmF0ZWQgdW5pb25zLgorICogWW91IGNyZWF0ZSBhbiBhcnJheSBvZiB4ZHJkaXNjcmltIHN0cnVjdHVyZXMsIHRlcm1pbmF0ZWQgd2l0aAorICogYSBlbnRyeSB3aXRoIGEgbnVsbCBwcm9jZWR1cmUgcG9pbnRlci4gIFRoZSB4ZHJfdW5pb24gcm91dGluZSBnZXRzCisgKiB0aGUgZGlzY3JpbWluYW50IHZhbHVlIGFuZCB0aGVuIHNlYXJjaGVzIHRoZSBhcnJheSBvZiBzdHJ1Y3R1cmVzCisgKiBmb3IgYSBtYXRjaGluZyB2YWx1ZS4gIElmIGEgbWF0Y2ggaXMgZm91bmQgdGhlIGFzc29jaWF0ZWQgeGRyIHJvdXRpbmUKKyAqIGlzIGNhbGxlZCB0byBoYW5kbGUgdGhhdCBwYXJ0IG9mIHRoZSB1bmlvbi4gIElmIHRoZXJlIGlzCisgKiBubyBtYXRjaCwgdGhlbiBhIGRlZmF1bHQgcm91dGluZSBtYXkgYmUgY2FsbGVkLgorICogSWYgdGhlcmUgaXMgbm8gbWF0Y2ggYW5kIG5vIGRlZmF1bHQgcm91dGluZSBpdCBpcyBhbiBlcnJvci4KKyAqLworI2RlZmluZSBOVUxMX3hkcnByb2NfdCAoKHhkcnByb2NfdCkwKQorc3RydWN0IHhkcl9kaXNjcmltCit7CisgIGludCB2YWx1ZTsKKyAgeGRycHJvY190IHByb2M7Cit9OworCisvKgorICogSW5saW5lIHJvdXRpbmVzIGZvciBmYXN0IGVuY29kZS9kZWNvZGUgb2YgcHJpbWl0aXZlIGRhdGEgdHlwZXMuCisgKiBDYXZlYXQgZW1wdG9yOiB0aGVzZSB1c2Ugc2luZ2xlIG1lbW9yeSBjeWNsZXMgdG8gZ2V0IHRoZQorICogZGF0YSBmcm9tIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciwgYW5kIHdpbGwgZmFpbCB0byBvcGVyYXRlCisgKiBwcm9wZXJseSBpZiB0aGUgZGF0YSBpcyBub3QgYWxpZ25lZC4gIFRoZSBzdGFuZGFyZCB3YXkgdG8gdXNlIHRoZXNlCisgKiBpcyB0byBzYXk6CisgKiAgICAgIGlmICgoYnVmID0gWERSX0lOTElORSh4ZHJzLCBjb3VudCkpID09IE5VTEwpCisgKiAgICAgICAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgKiAgICAgIDw8PCBtYWNybyBjYWxscyA+Pj4KKyAqIHdoZXJlIGBgY291bnQnJyBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGRhdGEgb2NjdXBpZWQKKyAqIGJ5IHRoZSBwcmltaXRpdmUgZGF0YSB0eXBlcy4KKyAqCisgKiBOLkIuIGFuZCBmcm96ZW4gZm9yIGFsbCB0aW1lOiBlYWNoIGRhdGEgdHlwZSBoZXJlIHVzZXMgNCBieXRlcworICogb2YgZXh0ZXJuYWwgcmVwcmVzZW50YXRpb24uCisgKi8KKworI2RlZmluZSBJWERSX0dFVF9JTlQzMihidWYpICAgICAgICAgICAoKGludDMyX3QpbnRvaGwoKHVpbnQzMl90KSooYnVmKSsrKSkKKyNkZWZpbmUgSVhEUl9QVVRfSU5UMzIoYnVmLCB2KSAgICAgICAgKCooYnVmKSsrID0gKGludDMyX3QpaHRvbmwoKHVpbnQzMl90KSh2KSkpCisjZGVmaW5lIElYRFJfR0VUX1VfSU5UMzIoYnVmKSAgICAgICAgICgodWludDMyX3QpSVhEUl9HRVRfSU5UMzIoYnVmKSkKKyNkZWZpbmUgSVhEUl9QVVRfVV9JTlQzMihidWYsIHYpICAgICAgSVhEUl9QVVRfSU5UMzIoYnVmLCAoaW50MzJfdCkodikpCisKKy8qIFdBUk5JTkc6IFRoZSBJWERSXypfTE9ORyBkZWZpbmVzIGFyZSByZW1vdmVkIGJ5IFN1biBmb3IgbmV3IHBsYXRmb3JtcworICogYW5kIHNob3VsZG4ndCBiZSB1c2VkIGFueSBsb25nZXIuIENvZGUgd2hpY2ggdXNlIHRoaXMgZGVmaW5lcyBvciBsb25ncworICogaW4gdGhlIFJQQyBjb2RlIHdpbGwgbm90IHdvcmsgb24gNjRiaXQgU29sYXJpcyBwbGF0Zm9ybXMgIQorICovCisjZGVmaW5lIElYRFJfR0VUX0xPTkcoYnVmKSAoKGxvbmcpSVhEUl9HRVRfVV9JTlQzMihidWYpKQorI2RlZmluZSBJWERSX1BVVF9MT05HKGJ1ZiwgdikgKChsb25nKUlYRFJfUFVUX0lOVDMyKGJ1ZiwgKGxvbmcpKHYpKSkKKyNkZWZpbmUgSVhEUl9HRVRfVV9MT05HKGJ1ZikJICAgICAgKCh1X2xvbmcpSVhEUl9HRVRfTE9ORyhidWYpKQorI2RlZmluZSBJWERSX1BVVF9VX0xPTkcoYnVmLCB2KQkgICAgICBJWERSX1BVVF9MT05HKGJ1ZiwgKGxvbmcpKHYpKQorCisKKyNkZWZpbmUgSVhEUl9HRVRfQk9PTChidWYpICAgICAgICAgICAgKChib29sX3QpSVhEUl9HRVRfTE9ORyhidWYpKQorI2RlZmluZSBJWERSX0dFVF9FTlVNKGJ1ZiwgdCkgICAgICAgICAoKHQpSVhEUl9HRVRfTE9ORyhidWYpKQorI2RlZmluZSBJWERSX0dFVF9TSE9SVChidWYpICAgICAgICAgICAoKHNob3J0KUlYRFJfR0VUX0xPTkcoYnVmKSkKKyNkZWZpbmUgSVhEUl9HRVRfVV9TSE9SVChidWYpICAgICAgICAgKCh1X3Nob3J0KUlYRFJfR0VUX0xPTkcoYnVmKSkKKworI2RlZmluZSBJWERSX1BVVF9CT09MKGJ1ZiwgdikgICAgICAgICBJWERSX1BVVF9MT05HKGJ1ZiwgKGxvbmcpKHYpKQorI2RlZmluZSBJWERSX1BVVF9FTlVNKGJ1ZiwgdikgICAgICAgICBJWERSX1BVVF9MT05HKGJ1ZiwgKGxvbmcpKHYpKQorI2RlZmluZSBJWERSX1BVVF9TSE9SVChidWYsIHYpICAgICAgICBJWERSX1BVVF9MT05HKGJ1ZiwgKGxvbmcpKHYpKQorI2RlZmluZSBJWERSX1BVVF9VX1NIT1JUKGJ1ZiwgdikgICAgICBJWERSX1BVVF9MT05HKGJ1ZiwgKGxvbmcpKHYpKQorCisvKgorICogVGhlc2UgYXJlIHRoZSAiZ2VuZXJpYyIgeGRyIHJvdXRpbmVzLgorICogTm9uZSBvZiB0aGVzZSBjYW4gaGF2ZSBjb25zdCBhcHBsaWVkIGJlY2F1c2UgaXQncyBub3QgcG9zc2libGUgdG8KKyAqIGtub3cgd2hldGhlciB0aGUgY2FsbCBpcyBhIHJlYWQgb3IgYSB3cml0ZSB0byB0aGUgcGFzc2VkIHBhcmFtZXRlcgorICogYWxzbywgdGhlIFhEUiBzdHJ1Y3R1cmUgaXMgYWx3YXlzIHVwZGF0ZWQgYnkgc29tZSBvZiB0aGVzZSBjYWxscy4KKyAqLworZXh0ZXJuIGJvb2xfdCB4ZHJfdm9pZCAodm9pZCkgX19USFJPVzsKK2V4dGVybiBib29sX3QgeGRyX3Nob3J0IChYRFIgKl9feGRycywgc2hvcnQgKl9fc3ApIF9fVEhST1c7CitleHRlcm4gYm9vbF90IHhkcl91X3Nob3J0IChYRFIgKl9feGRycywgdV9zaG9ydCAqX191c3ApIF9fVEhST1c7CitleHRlcm4gYm9vbF90IHhkcl9pbnQgKFhEUiAqX194ZHJzLCBpbnQgKl9faXApIF9fVEhST1c7CitleHRlcm4gYm9vbF90IHhkcl91X2ludCAoWERSICpfX3hkcnMsIHVfaW50ICpfX3VwKSBfX1RIUk9XOworZXh0ZXJuIGJvb2xfdCB4ZHJfbG9uZyAoWERSICpfX3hkcnMsIGxvbmcgKl9fbHApIF9fVEhST1c7CitleHRlcm4gYm9vbF90IHhkcl91X2xvbmcgKFhEUiAqX194ZHJzLCB1X2xvbmcgKl9fdWxwKSBfX1RIUk9XOworZXh0ZXJuIGJvb2xfdCB4ZHJfaHlwZXIgKFhEUiAqX194ZHJzLCBxdWFkX3QgKl9fbGxwKSBfX1RIUk9XOworZXh0ZXJuIGJvb2xfdCB4ZHJfdV9oeXBlciAoWERSICpfX3hkcnMsIHVfcXVhZF90ICpfX3VsbHApIF9fVEhST1c7CitleHRlcm4gYm9vbF90IHhkcl9sb25nbG9uZ190IChYRFIgKl9feGRycywgcXVhZF90ICpfX2xscCkgX19USFJPVzsKK2V4dGVybiBib29sX3QgeGRyX3VfbG9uZ2xvbmdfdCAoWERSICpfX3hkcnMsIHVfcXVhZF90ICpfX3VsbHApIF9fVEhST1c7CitleHRlcm4gYm9vbF90IHhkcl9pbnQ4X3QgKFhEUiAqX194ZHJzLCBpbnQ4X3QgKl9faXApIF9fVEhST1c7CitleHRlcm4gYm9vbF90IHhkcl91aW50OF90IChYRFIgKl9feGRycywgdWludDhfdCAqX191cCkgX19USFJPVzsKK2V4dGVybiBib29sX3QgeGRyX2ludDE2X3QgKFhEUiAqX194ZHJzLCBpbnQxNl90ICpfX2lwKSBfX1RIUk9XOworZXh0ZXJuIGJvb2xfdCB4ZHJfdWludDE2X3QgKFhEUiAqX194ZHJzLCB1aW50MTZfdCAqX191cCkgX19USFJPVzsKK2V4dGVybiBib29sX3QgeGRyX2ludDMyX3QgKFhEUiAqX194ZHJzLCBpbnQzMl90ICpfX2lwKSBfX1RIUk9XOworZXh0ZXJuIGJvb2xfdCB4ZHJfdWludDMyX3QgKFhEUiAqX194ZHJzLCB1aW50MzJfdCAqX191cCkgX19USFJPVzsKK2V4dGVybiBib29sX3QgeGRyX2ludDY0X3QgKFhEUiAqX194ZHJzLCBpbnQ2NF90ICpfX2lwKSBfX1RIUk9XOworZXh0ZXJuIGJvb2xfdCB4ZHJfdWludDY0X3QgKFhEUiAqX194ZHJzLCB1aW50NjRfdCAqX191cCkgX19USFJPVzsKK2V4dGVybiBib29sX3QgeGRyX3F1YWRfdCAoWERSICpfX3hkcnMsIHF1YWRfdCAqX19pcCkgX19USFJPVzsKK2V4dGVybiBib29sX3QgeGRyX3VfcXVhZF90IChYRFIgKl9feGRycywgdV9xdWFkX3QgKl9fdXApIF9fVEhST1c7CitleHRlcm4gYm9vbF90IHhkcl9ib29sIChYRFIgKl9feGRycywgYm9vbF90ICpfX2JwKSBfX1RIUk9XOworZXh0ZXJuIGJvb2xfdCB4ZHJfZW51bSAoWERSICpfX3hkcnMsIGVudW1fdCAqX19lcCkgX19USFJPVzsKK2V4dGVybiBib29sX3QgeGRyX2FycmF5IChYRFIgKiBfeGRycywgY2FkZHJfdCAqX19hZGRycCwgdV9pbnQgKl9fc2l6ZXAsCisJCQkgdV9pbnQgX19tYXhzaXplLCB1X2ludCBfX2Vsc2l6ZSwgeGRycHJvY190IF9fZWxwcm9jKQorICAgICBfX1RIUk9XOworZXh0ZXJuIGJvb2xfdCB4ZHJfYnl0ZXMgKFhEUiAqX194ZHJzLCBjaGFyICoqX19jcHAsIHVfaW50ICpfX3NpemVwLAorCQkJIHVfaW50IF9fbWF4c2l6ZSkgX19USFJPVzsKK2V4dGVybiBib29sX3QgeGRyX29wYXF1ZSAoWERSICpfX3hkcnMsIGNhZGRyX3QgX19jcCwgdV9pbnQgX19jbnQpIF9fVEhST1c7CitleHRlcm4gYm9vbF90IHhkcl9zdHJpbmcgKFhEUiAqX194ZHJzLCBjaGFyICoqX19jcHAsIHVfaW50IF9fbWF4c2l6ZSkgX19USFJPVzsKK2V4dGVybiBib29sX3QgeGRyX3VuaW9uIChYRFIgKl9feGRycywgZW51bV90ICpfX2RzY21wLCBjaGFyICpfX3VucCwKKwkJCSBfX2NvbnN0IHN0cnVjdCB4ZHJfZGlzY3JpbSAqX19jaG9pY2VzLAorCQkJIHhkcnByb2NfdCBkZmF1bHQpIF9fVEhST1c7CitleHRlcm4gYm9vbF90IHhkcl9jaGFyIChYRFIgKl9feGRycywgY2hhciAqX19jcCkgX19USFJPVzsKK2V4dGVybiBib29sX3QgeGRyX3VfY2hhciAoWERSICpfX3hkcnMsIHVfY2hhciAqX19jcCkgX19USFJPVzsKK2V4dGVybiBib29sX3QgeGRyX3ZlY3RvciAoWERSICpfX3hkcnMsIGNoYXIgKl9fYmFzZXAsIHVfaW50IF9fbmVsZW0sCisJCQkgIHVfaW50IF9fZWxlbXNpemUsIHhkcnByb2NfdCBfX3hkcl9lbGVtKSBfX1RIUk9XOworZXh0ZXJuIGJvb2xfdCB4ZHJfZmxvYXQgKFhEUiAqX194ZHJzLCBmbG9hdCAqX19mcCkgX19USFJPVzsKK2V4dGVybiBib29sX3QgeGRyX2RvdWJsZSAoWERSICpfX3hkcnMsIGRvdWJsZSAqX19kcCkgX19USFJPVzsKK2V4dGVybiBib29sX3QgeGRyX3JlZmVyZW5jZSAoWERSICpfX3hkcnMsIGNhZGRyX3QgKl9feHBwLCB1X2ludCBfX3NpemUsCisJCQkgICAgIHhkcnByb2NfdCBfX3Byb2MpIF9fVEhST1c7CitleHRlcm4gYm9vbF90IHhkcl9wb2ludGVyIChYRFIgKl9feGRycywgY2hhciAqKl9fb2JqcHAsCisJCQkgICB1X2ludCBfX29ial9zaXplLCB4ZHJwcm9jX3QgX194ZHJfb2JqKSBfX1RIUk9XOworZXh0ZXJuIGJvb2xfdCB4ZHJfd3JhcHN0cmluZyAoWERSICpfX3hkcnMsIGNoYXIgKipfX2NwcCkgX19USFJPVzsKK2V4dGVybiB1X2xvbmcgeGRyX3NpemVvZiAoeGRycHJvY190LCB2b2lkICopIF9fVEhST1c7CisKKy8qCisgKiBDb21tb24gb3BhcXVlIGJ5dGVzIG9iamVjdHMgdXNlZCBieSBtYW55IHJwYyBwcm90b2NvbHM7CisgKiBkZWNsYXJlZCBoZXJlIGR1ZSB0byBjb21tb25hbGl0eS4KKyAqLworI2RlZmluZSBNQVhfTkVUT0JKX1NaIDEwMjQKK3N0cnVjdCBuZXRvYmoKK3sKKyAgdV9pbnQgbl9sZW47CisgIGNoYXIgKm5fYnl0ZXM7Cit9OwordHlwZWRlZiBzdHJ1Y3QgbmV0b2JqIG5ldG9iajsKK2V4dGVybiBib29sX3QgeGRyX25ldG9iaiAoWERSICpfX3hkcnMsIHN0cnVjdCBuZXRvYmogKl9fbnApIF9fVEhST1c7CisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIHB1YmxpYyByb3V0aW5lcyBmb3IgdGhlIHZhcmlvdXMgaW1wbGVtZW50YXRpb25zIG9mCisgKiB4ZHIgc3RyZWFtcy4KKyAqLworCisvKiBYRFIgdXNpbmcgbWVtb3J5IGJ1ZmZlcnMgKi8KK2V4dGVybiB2b2lkIHhkcm1lbV9jcmVhdGUgKFhEUiAqX194ZHJzLCBfX2NvbnN0IGNhZGRyX3QgX19hZGRyLAorCQkJICAgdV9pbnQgX19zaXplLCBlbnVtIHhkcl9vcCBfX3hvcCkgX19USFJPVzsKKworLyogWERSIHVzaW5nIHN0ZGlvIGxpYnJhcnkgKi8KK2V4dGVybiB2b2lkIHhkcnN0ZGlvX2NyZWF0ZSAoWERSICpfX3hkcnMsIEZJTEUgKl9fZmlsZSwgZW51bSB4ZHJfb3AgX194b3ApCisgICAgIF9fVEhST1c7CisKKy8qIFhEUiBwc2V1ZG8gcmVjb3JkcyBmb3IgdGNwICovCitleHRlcm4gdm9pZCB4ZHJyZWNfY3JlYXRlIChYRFIgKl9feGRycywgdV9pbnQgX19zZW5kc2l6ZSwKKwkJCSAgIHVfaW50IF9fcmVjdnNpemUsIGNhZGRyX3QgX190Y3BfaGFuZGxlLAorCQkJICAgaW50ICgqX19yZWFkaXQpIChjaGFyICosIGNoYXIgKiwgaW50KSwKKwkJCSAgIGludCAoKl9fd3JpdGVpdCkgKGNoYXIgKiwgY2hhciAqLCBpbnQpKSBfX1RIUk9XOworCisvKiBtYWtlIGVuZCBvZiB4ZHIgcmVjb3JkICovCitleHRlcm4gYm9vbF90IHhkcnJlY19lbmRvZnJlY29yZCAoWERSICpfX3hkcnMsIGJvb2xfdCBfX3NlbmRub3cpIF9fVEhST1c7CisKKy8qIG1vdmUgdG8gYmVnaW5uaW5nIG9mIG5leHQgcmVjb3JkICovCitleHRlcm4gYm9vbF90IHhkcnJlY19za2lwcmVjb3JkIChYRFIgKl9feGRycykgX19USFJPVzsKKworLyogdHJ1ZSBpZiBubyBtb3JlIGlucHV0ICovCitleHRlcm4gYm9vbF90IHhkcnJlY19lb2YgKFhEUiAqX194ZHJzKSBfX1RIUk9XOworCisvKiBmcmVlIG1lbW9yeSBidWZmZXJzIGZvciB4ZHIgKi8KK2V4dGVybiB2b2lkIHhkcl9mcmVlICh4ZHJwcm9jX3QgX19wcm9jLCBjaGFyICpfX29ianApIF9fVEhST1c7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBycGMveGRyLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGNzdmMvYm9vdHBhcmFtLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL2Jvb3RwYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMGZhOGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL2Jvb3RwYXJhbS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfUlBDU1ZDX0JPT1RQQVJBTV9ICisjZGVmaW5lIF9SUENTVkNfQk9PVFBBUkFNX0gKKworI2luY2x1ZGUgPHJwY3N2Yy9ib290cGFyYW1fcHJvdC5oPgorCisjZW5kaWYgIC8qIF9SUENTVkNfQk9PVFBBUkFNX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwY3N2Yy9ib290cGFyYW1fcHJvdC54IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwY3N2Yy9ib290cGFyYW1fcHJvdC54Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YmMwZGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL2Jvb3RwYXJhbV9wcm90LngKQEAgLTAsMCArMSw5NyBAQAorLyogQCgjKWJvb3RwYXJhbV9wcm90LngJMi4xIDg4LzA4LzAxIDQuMCBSUENTUkMgKi8KKy8qIEAoIylib290cGFyYW1fcHJvdC54IDEuMiA4Ny8wNi8yNCBDb3B5ciAxOTg3IFN1biBNaWNybyAqLworCisvKgorICogU3VuIFJQQyBpcyBhIHByb2R1Y3Qgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBhbmQgaXMgcHJvdmlkZWQgZm9yCisgKiB1bnJlc3RyaWN0ZWQgdXNlIHByb3ZpZGVkIHRoYXQgdGhpcyBsZWdlbmQgaXMgaW5jbHVkZWQgb24gYWxsIHRhcGUKKyAqIG1lZGlhIGFuZCBhcyBhIHBhcnQgb2YgdGhlIHNvZnR3YXJlIHByb2dyYW0gaW4gd2hvbGUgb3IgcGFydC4gIFVzZXJzCisgKiBtYXkgY29weSBvciBtb2RpZnkgU3VuIFJQQyB3aXRob3V0IGNoYXJnZSwgYnV0IGFyZSBub3QgYXV0aG9yaXplZAorICogdG8gbGljZW5zZSBvciBkaXN0cmlidXRlIGl0IHRvIGFueW9uZSBlbHNlIGV4Y2VwdCBhcyBwYXJ0IG9mIGEgcHJvZHVjdCBvcgorICogcHJvZ3JhbSBkZXZlbG9wZWQgYnkgdGhlIHVzZXIuCisgKiAKKyAqIFNVTiBSUEMgSVMgUFJPVklERUQgQVMgSVMgV0lUSCBOTyBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIElOQ0xVRElORyBUSEUKKyAqIFdBUlJBTlRJRVMgT0YgREVTSUdOLCBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSwgT1IgQVJJU0lORyBGUk9NIEEgQ09VUlNFIE9GIERFQUxJTkcsIFVTQUdFIE9SIFRSQURFIFBSQUNUSUNFLgorICogCisgKiBTdW4gUlBDIGlzIHByb3ZpZGVkIHdpdGggbm8gc3VwcG9ydCBhbmQgd2l0aG91dCBhbnkgb2JsaWdhdGlvbiBvbiB0aGUKKyAqIHBhcnQgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiB0byBhc3Npc3QgaW4gaXRzIHVzZSwgY29ycmVjdGlvbiwKKyAqIG1vZGlmaWNhdGlvbiBvciBlbmhhbmNlbWVudC4KKyAqIAorICogU1VOIE1JQ1JPU1lTVEVNUywgSU5DLiBTSEFMTCBIQVZFIE5PIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFCisgKiBJTkZSSU5HRU1FTlQgT0YgQ09QWVJJR0hUUywgVFJBREUgU0VDUkVUUyBPUiBBTlkgUEFURU5UUyBCWSBTVU4gUlBDCisgKiBPUiBBTlkgUEFSVCBUSEVSRU9GLgorICogCisgKiBJbiBubyBldmVudCB3aWxsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYmUgbGlhYmxlIGZvciBhbnkgbG9zdCByZXZlbnVlCisgKiBvciBwcm9maXRzIG9yIG90aGVyIHNwZWNpYWwsIGluZGlyZWN0IGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIGV2ZW4gaWYKKyAqIFN1biBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisgKiAKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIDI1NTAgR2FyY2lhIEF2ZW51ZQorICogTW91bnRhaW4gVmlldywgQ2FsaWZvcm5pYSAgOTQwNDMKKyAqLworCisvKgorICogUlBDIGZvciBib290cGFybXMgc2VydmljZS4KKyAqIFRoZXJlIGFyZSB0d28gcHJvY2VkdXJlczoKKyAqICAgV0hPQU1JIHRha2VzIGEgbmV0IGFkZHJlc3MgYW5kIHJldHVybnMgYSBjbGllbnQgbmFtZSBhbmQgYWxzbyBhCisgKglsaWtlbHkgbmV0IGFkZHJlc3MgZm9yIHJvdXRpbmcKKyAqICAgR0VURklMRSB0YWtlcyBhIGNsaWVudCBuYW1lIGFuZCBmaWxlIGlkZW50aWZpZXIgYW5kIHJldHVybnMgdGhlCisgKglzZXJ2ZXIgbmFtZSwgc2VydmVyIG5ldCBhZGRyZXNzIGFuZCBwYXRobmFtZSBmb3IgdGhlIGZpbGUuCisgKiAgIGZpbGUgaWRlbnRpZmllcnMgdHlwaWNhbGx5IGluY2x1ZGUgcm9vdCwgc3dhcCwgcHViIGFuZCBkdW1wCisgKi8KKworI2lmZGVmIFJQQ19IRFIKKyUjaW5jbHVkZSA8cnBjL3R5cGVzLmg+CislI2luY2x1ZGUgPHN5cy90aW1lLmg+CislI2luY2x1ZGUgPHN5cy9lcnJuby5oPgorJSNpbmNsdWRlIDxuZnMvbmZzLmg+CisjZW5kaWYKKworY29uc3QgTUFYX01BQ0hJTkVfTkFNRSAgPSAyNTU7Citjb25zdCBNQVhfUEFUSF9MRU4JPSAxMDI0OworY29uc3QgTUFYX0ZJTEVJRAk9IDMyOworY29uc3QgSVBfQUREUl9UWVBFCT0gMTsKKwordHlwZWRlZglzdHJpbmcJYnBfbWFjaGluZV9uYW1lX3Q8TUFYX01BQ0hJTkVfTkFNRT47Cit0eXBlZGVmCXN0cmluZwlicF9wYXRoX3Q8TUFYX1BBVEhfTEVOPjsKK3R5cGVkZWYJc3RyaW5nCWJwX2ZpbGVpZF90PE1BWF9GSUxFSUQ+OworCitzdHJ1Y3QJaXBfYWRkcl90IHsKKwljaGFyCW5ldDsKKwljaGFyCWhvc3Q7CisJY2hhcglsaDsKKwljaGFyCWltcG5vOworfTsKKwordW5pb24gYnBfYWRkcmVzcyBzd2l0Y2ggKGludCBhZGRyZXNzX3R5cGUpIHsKKwljYXNlIElQX0FERFJfVFlQRToKKwkJaXBfYWRkcl90CWlwX2FkZHI7Cit9OworCitzdHJ1Y3QgYnBfd2hvYW1pX2FyZyB7CisJYnBfYWRkcmVzcwkJY2xpZW50X2FkZHJlc3M7Cit9OworCitzdHJ1Y3QgYnBfd2hvYW1pX3JlcyB7CisJYnBfbWFjaGluZV9uYW1lX3QJY2xpZW50X25hbWU7CisJYnBfbWFjaGluZV9uYW1lX3QJZG9tYWluX25hbWU7CisJYnBfYWRkcmVzcwkJcm91dGVyX2FkZHJlc3M7Cit9OworCitzdHJ1Y3QgYnBfZ2V0ZmlsZV9hcmcgeworCWJwX21hY2hpbmVfbmFtZV90CWNsaWVudF9uYW1lOworCWJwX2ZpbGVpZF90CQlmaWxlX2lkOworfTsKKwkKK3N0cnVjdCBicF9nZXRmaWxlX3JlcyB7CisJYnBfbWFjaGluZV9uYW1lX3QJc2VydmVyX25hbWU7CisJYnBfYWRkcmVzcwkJc2VydmVyX2FkZHJlc3M7CisJYnBfcGF0aF90CQlzZXJ2ZXJfcGF0aDsKK307CisKK3Byb2dyYW0gQk9PVFBBUkFNUFJPRyB7CisJdmVyc2lvbiBCT09UUEFSQU1WRVJTIHsKKwkJYnBfd2hvYW1pX3JlcwlCT09UUEFSQU1QUk9DX1dIT0FNSShicF93aG9hbWlfYXJnKSA9IDE7CisJCWJwX2dldGZpbGVfcmVzCUJPT1RQQVJBTVBST0NfR0VURklMRShicF9nZXRmaWxlX2FyZykgPSAyOworCX0gPSAxOworfSA9IDEwMDAyNjsKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGNzdmMva2V5X3Byb3QueCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGNzdmMva2V5X3Byb3QueApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTI3MmNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwY3N2Yy9rZXlfcHJvdC54CkBAIC0wLDAgKzEsMjg2IEBACislLyoKKyUgKiBTdW4gUlBDIGlzIGEgcHJvZHVjdCBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGFuZCBpcyBwcm92aWRlZCBmb3IKKyUgKiB1bnJlc3RyaWN0ZWQgdXNlIHByb3ZpZGVkIHRoYXQgdGhpcyBsZWdlbmQgaXMgaW5jbHVkZWQgb24gYWxsIHRhcGUKKyUgKiBtZWRpYSBhbmQgYXMgYSBwYXJ0IG9mIHRoZSBzb2Z0d2FyZSBwcm9ncmFtIGluIHdob2xlIG9yIHBhcnQuICBVc2VycworJSAqIG1heSBjb3B5IG9yIG1vZGlmeSBTdW4gUlBDIHdpdGhvdXQgY2hhcmdlLCBidXQgYXJlIG5vdCBhdXRob3JpemVkCislICogdG8gbGljZW5zZSBvciBkaXN0cmlidXRlIGl0IHRvIGFueW9uZSBlbHNlIGV4Y2VwdCBhcyBwYXJ0IG9mIGEgcHJvZHVjdCBvcgorJSAqIHByb2dyYW0gZGV2ZWxvcGVkIGJ5IHRoZSB1c2VyLgorJSAqCislICogU1VOIFJQQyBJUyBQUk9WSURFRCBBUyBJUyBXSVRIIE5PIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgSU5DTFVESU5HIFRIRQorJSAqIFdBUlJBTlRJRVMgT0YgREVTSUdOLCBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorJSAqIFBVUlBPU0UsIE9SIEFSSVNJTkcgRlJPTSBBIENPVVJTRSBPRiBERUFMSU5HLCBVU0FHRSBPUiBUUkFERSBQUkFDVElDRS4KKyUgKgorJSAqIFN1biBSUEMgaXMgcHJvdmlkZWQgd2l0aCBubyBzdXBwb3J0IGFuZCB3aXRob3V0IGFueSBvYmxpZ2F0aW9uIG9uIHRoZQorJSAqIHBhcnQgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiB0byBhc3Npc3QgaW4gaXRzIHVzZSwgY29ycmVjdGlvbiwKKyUgKiBtb2RpZmljYXRpb24gb3IgZW5oYW5jZW1lbnQuCislICoKKyUgKiBTVU4gTUlDUk9TWVNURU1TLCBJTkMuIFNIQUxMIEhBVkUgTk8gTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUKKyUgKiBJTkZSSU5HRU1FTlQgT0YgQ09QWVJJR0hUUywgVFJBREUgU0VDUkVUUyBPUiBBTlkgUEFURU5UUyBCWSBTVU4gUlBDCislICogT1IgQU5ZIFBBUlQgVEhFUkVPRi4KKyUgKgorJSAqIEluIG5vIGV2ZW50IHdpbGwgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBiZSBsaWFibGUgZm9yIGFueSBsb3N0IHJldmVudWUKKyUgKiBvciBwcm9maXRzIG9yIG90aGVyIHNwZWNpYWwsIGluZGlyZWN0IGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIGV2ZW4gaWYKKyUgKiBTdW4gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorJSAqCislICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorJSAqIDI1NTAgR2FyY2lhIEF2ZW51ZQorJSAqIE1vdW50YWluIFZpZXcsIENhbGlmb3JuaWEgIDk0MDQzCislICovCisvKgorICogS2V5IHNlcnZlciBwcm90b2NvbCBkZWZpbml0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDE5OTAsIDE5OTEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICoKKyAqIFRoZSBrZXlzZXJ2ZXIgaXMgYSBwdWJsaWMga2V5IHN0b3JhZ2UvZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHNlcnZpY2UKKyAqIFRoZSBlbmNyeXB0aW9uIG1ldGhvZCB1c2VkIGlzIGJhc2VkIG9uIHRoZSBEaWZmaWUtSGVsbG1hbiBleHBvbmVudGlhbAorICoga2V5IGV4Y2hhbmdlIHRlY2hub2xvZ3kuCisgKgorICogVGhlIGtleSBzZXJ2ZXIgaXMgbG9jYWwgdG8gZWFjaCBtYWNoaW5lLCBha2luIHRvIHRoZSBwb3J0bWFwcGVyLgorICogVW5kZXIgVEktUlBDLCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGtleXNlcnZlciBpcyB0aHJvdWdoIHRoZQorICogbG9vcGJhY2sgdHJhbnNwb3J0LgorICoKKyAqIE5PVEU6IFRoaXMgLnggZmlsZSBnZW5lcmF0ZXMgdGhlIFVTRVIgbGV2ZWwgaGVhZGVycyBmb3IgdGhlIGtleXNlcnZlci4KKyAqIHRoZSBLRVJORUwgbGV2ZWwgaGVhZGVycyBhcmUgY3JlYXRlZCBieSBoYW5kIGFzIHRoZXkga2VybmVsIGhhcyBzcGVjaWFsCisgKiByZXF1aXJlbWVudHMuCisgKi8KKworJSNpZiAwCislI3ByYWdtYSBpZGVudAkiQCgjKWtleV9wcm90LngJMS43CTk0LzA0LzI5IFNNSSIKKyUjZW5kaWYKKyUKKyUvKiBDb3B5cmlnaHQgKGMpICAxOTkwLCAxOTkxIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gKi8KKyUKKyUvKiAKKyUgKiBDb21waWxlZCBmcm9tIGtleV9wcm90LnggdXNpbmcgcnBjZ2VuLgorJSAqIERPIE5PVCBFRElUIFRISVMgRklMRSEKKyUgKiBUaGlzIGlzIE5PVCBzb3VyY2UgY29kZSEKKyUgKi8KKworLyoKKyAqIFBST09UIGFuZCBNT0RVTFVTIGRlZmluZSB0aGUgd2F5IHRoZSBEaWZmaWUtSGVsbG1hbiBrZXkgaXMgZ2VuZXJhdGVkLgorICoKKyAqIE1PRFVMVVMgc2hvdWxkIGJlIGNob3NlbiBhcyBhIHByaW1lIG9mIHRoZSBmb3JtOiBNT0RVTFVTID09IDIqcCArIDEsCisgKiB3aGVyZSBwIGlzIGFsc28gcHJpbWUuCisgKgorICogUFJPT1Qgc2F0aXNmaWVzIHRoZSBmb2xsb3dpbmcgdHdvIGNvbmRpdGlvbnM6CisgKiAoMSkgKFBST09UICoqIDIpICUgTU9EVUxVUyAhPSAxCisgKiAoMikgKFBST09UICoqIHApICUgTU9EVUxVUyAhPSAxCisgKgorICovCisKK2NvbnN0IFBST09UID0gMzsKK2NvbnN0IEhFWE1PRFVMVVMgPSAiZDRhMGJhMDI1MGI2ZmQyZWM2MjZlN2VmZDYzN2RmNzZjNzE2ZTIyZDA5NDRiODhiIjsKKworY29uc3QgSEVYS0VZQllURVMgPSA0ODsJCS8qIEhFWEtFWUJZVEVTID09IHN0cmxlbihIRVhNT0RVTFVTKSAqLworY29uc3QgS0VZU0laRSA9IDE5MjsJCS8qIEtFWVNJWkUgPT0gYml0IGxlbmd0aCBvZiBrZXkgKi8KK2NvbnN0IEtFWUJZVEVTID0gMjQ7CQkvKiBieXRlIGxlbmd0aCBvZiBrZXkgKi8KKworLyoKKyAqIFRoZSBmaXJzdCAxNiBoZXggZGlnaXRzIG9mIHRoZSBlbmNyeXB0ZWQgc2VjcmV0IGtleSBhcmUgdXNlZCBhcworICogYSBjaGVja3N1bSBpbiB0aGUgZGF0YWJhc2UuCisgKi8KK2NvbnN0IEtFWUNIRUNLU1VNU0laRSA9IDE2OworCisvKgorICogc3RhdHVzIG9mIG9wZXJhdGlvbgorICovCitlbnVtIGtleXN0YXR1cyB7CisJS0VZX1NVQ0NFU1MsCS8qIG5vIHByb2JsZW1zICovCisJS0VZX05PU0VDUkVULAkvKiBubyBzZWNyZXQga2V5IHN0b3JlZCAqLworCUtFWV9VTktOT1dOLAkvKiB1bmtub3duIG5ldG5hbWUgKi8KKwlLRVlfU1lTVEVNRVJSIAkvKiBzeXN0ZW0gZXJyb3IgKG91dCBvZiBtZW1vcnksIGVuY3J5cHRpb24gZmFpbHVyZSkgKi8KK307CisKK3R5cGVkZWYgb3BhcXVlIGtleWJ1ZltIRVhLRVlCWVRFU107CS8qIHN0b3JlIGtleSBpbiBoZXggKi8KKwordHlwZWRlZiBzdHJpbmcgbmV0bmFtZXN0cjxNQVhORVROQU1FTEVOPjsKKworLyoKKyAqIEFyZ3VtZW50IHRvIEVOQ1JZUFQgb3IgREVDUllQVCAKKyAqLworc3RydWN0IGNyeXB0a2V5YXJnIHsKKwluZXRuYW1lc3RyIHJlbW90ZW5hbWU7CisJZGVzX2Jsb2NrIGRlc2tleTsKK307CisKKy8qCisgKiBBcmd1bWVudCB0byBFTkNSWVBUX1BLIG9yIERFQ1JZUFRfUEsKKyAqLworc3RydWN0IGNyeXB0a2V5YXJnMiB7CisJbmV0bmFtZXN0ciByZW1vdGVuYW1lOworCW5ldG9iaglyZW1vdGVrZXk7CS8qIENvbnRhaW5zIGEgbGVuZ3RoIHVwIHRvIDEwMjQgYnl0ZXMgKi8KKwlkZXNfYmxvY2sgZGVza2V5OworfTsKKworCisvKgorICogUmVzdWx0IG9mIEVOQ1JZUFQsIERFQ1JZUFQsIEVOQ1JZUFRfUEssIGFuZCBERUNSWVBUX1BLCisgKi8KK3VuaW9uIGNyeXB0a2V5cmVzIHN3aXRjaCAoa2V5c3RhdHVzIHN0YXR1cykgeworY2FzZSBLRVlfU1VDQ0VTUzoKKwlkZXNfYmxvY2sgZGVza2V5OworZGVmYXVsdDoKKwl2b2lkOworfTsKKworY29uc3QgTUFYR0lEUyAgPSAxNjsJLyogbWF4IG51bWJlciBvZiBnaWRzIGluIGdpZCBsaXN0ICovCisKKy8qCisgKiBVbml4IGNyZWRlbnRpYWwgCisgKi8JCitzdHJ1Y3QgdW5peGNyZWQgeworCXVfaW50IHVpZDsKKwl1X2ludCBnaWQ7CisJdV9pbnQgZ2lkczxNQVhHSURTPjsJCit9OworCisvKgorICogUmVzdWx0IHJldHVybmVkIGZyb20gR0VUQ1JFRAorICovCit1bmlvbiBnZXRjcmVkcmVzIHN3aXRjaCAoa2V5c3RhdHVzIHN0YXR1cykgeworY2FzZSBLRVlfU1VDQ0VTUzoKKwl1bml4Y3JlZCBjcmVkOworZGVmYXVsdDoKKwl2b2lkOworfTsKKy8qCisgKiBrZXlfbmV0c3Rhcmc7CisgKi8KKworc3RydWN0IGtleV9uZXRzdGFyZyB7CisJa2V5YnVmIHN0X3ByaXZfa2V5OworCWtleWJ1ZiBzdF9wdWJfa2V5OworCW5ldG5hbWVzdHIgc3RfbmV0bmFtZTsKK307CisKK3VuaW9uIGtleV9uZXRzdHJlcyBzd2l0Y2ggKGtleXN0YXR1cyBzdGF0dXMpeworY2FzZSBLRVlfU1VDQ0VTUzoKKwlrZXlfbmV0c3Rhcmcga25ldDsKK2RlZmF1bHQ6CisJdm9pZDsKK307CQorCisjaWZkZWYgUlBDX0hEUgorJQorJSNpZm5kZWYgb3BhcXVlCislI2RlZmluZSBvcGFxdWUgY2hhcgorJSNlbmRpZgorJQorI2VuZGlmCitwcm9ncmFtIEtFWV9QUk9HIHsKKwl2ZXJzaW9uIEtFWV9WRVJTIHsKKworCQkvKgorCQkgKiBUaGlzIGlzIG15IHNlY3JldCBrZXkuCisJIAkgKiBTdG9yZSBpdCBmb3IgbWUuCisJCSAqLworCQlrZXlzdGF0dXMgCisJCUtFWV9TRVQoa2V5YnVmKSA9IDE7CQorCQorCQkvKgorCQkgKiBJIHdhbnQgdG8gdGFsayB0byBYLgorCQkgKiBFbmNyeXB0IGEgY29udmVyc2F0aW9uIGtleSBmb3IgbWUuCisJIAkgKi8KKwkJY3J5cHRrZXlyZXMKKwkJS0VZX0VOQ1JZUFQoY3J5cHRrZXlhcmcpID0gMjsJCisKKwkJLyoKKwkJICogWCBqdXN0IHNlbnQgbWUgYSBtZXNzYWdlLgorCQkgKiBEZWNyeXB0IHRoZSBjb252ZXJzYXRpb24ga2V5IGZvciBtZS4KKwkJICovCisJCWNyeXB0a2V5cmVzCisJCUtFWV9ERUNSWVBUKGNyeXB0a2V5YXJnKSA9IDM7CisKKwkJLyoKKwkJICogR2VuZXJhdGUgYSBzZWN1cmUgY29udmVyc2F0aW9uIGtleSBmb3IgbWUKKwkJICovCisJCWRlc19ibG9jayAKKwkJS0VZX0dFTih2b2lkKSA9IDQ7CisKKwkJLyoKKwkJICogR2V0IG1lIHRoZSB1aWQsIGdpZCBhbmQgZ3JvdXAtYWNjZXNzLWxpc3QgYXNzb2NpYXRlZAorCQkgKiB3aXRoIHRoaXMgbmV0bmFtZSAoZm9yIGtlcm5lbCB3aGljaCBjYW5ub3QgdXNlIE5JUykKKwkJICovCisJCWdldGNyZWRyZXMKKwkJS0VZX0dFVENSRUQobmV0bmFtZXN0cikgPSA1OworCX0gPSAxOworCXZlcnNpb24gS0VZX1ZFUlMyIHsKKworCQkvKgorCQkgKiAjIyMjIyMjCisJCSAqIFByb2NlZHVyZXMgMS01IGFyZSBpZGVudGljYWwgdG8gdmVyc2lvbiAxCisJCSAqICMjIyMjIyMKKwkJICovCisKKwkJLyoKKwkJICogVGhpcyBpcyBteSBzZWNyZXQga2V5LgorCSAJICogU3RvcmUgaXQgZm9yIG1lLgorCQkgKi8KKwkJa2V5c3RhdHVzIAorCQlLRVlfU0VUKGtleWJ1ZikgPSAxOwkKKwkKKwkJLyoKKwkJICogSSB3YW50IHRvIHRhbGsgdG8gWC4KKwkJICogRW5jcnlwdCBhIGNvbnZlcnNhdGlvbiBrZXkgZm9yIG1lLgorCSAJICovCisJCWNyeXB0a2V5cmVzCisJCUtFWV9FTkNSWVBUKGNyeXB0a2V5YXJnKSA9IDI7CQorCisJCS8qCisJCSAqIFgganVzdCBzZW50IG1lIGEgbWVzc2FnZS4KKwkJICogRGVjcnlwdCB0aGUgY29udmVyc2F0aW9uIGtleSBmb3IgbWUuCisJCSAqLworCQljcnlwdGtleXJlcworCQlLRVlfREVDUllQVChjcnlwdGtleWFyZykgPSAzOworCisJCS8qCisJCSAqIEdlbmVyYXRlIGEgc2VjdXJlIGNvbnZlcnNhdGlvbiBrZXkgZm9yIG1lCisJCSAqLworCQlkZXNfYmxvY2sgCisJCUtFWV9HRU4odm9pZCkgPSA0OworCisJCS8qCisJCSAqIEdldCBtZSB0aGUgdWlkLCBnaWQgYW5kIGdyb3VwLWFjY2Vzcy1saXN0IGFzc29jaWF0ZWQKKwkJICogd2l0aCB0aGlzIG5ldG5hbWUgKGZvciBrZXJuZWwgd2hpY2ggY2Fubm90IHVzZSBOSVMpCisJCSAqLworCQlnZXRjcmVkcmVzCisJCUtFWV9HRVRDUkVEKG5ldG5hbWVzdHIpID0gNTsKKwkJCisJCS8qCisJCSAqIEkgd2FudCB0byB0YWxrIHRvIFguIGFuZCBJIGtub3cgWCdzIHB1YmxpYyBrZXkKKwkJICogRW5jcnlwdCBhIGNvbnZlcnNhdGlvbiBrZXkgZm9yIG1lLgorCSAJICovCisJCWNyeXB0a2V5cmVzCisJCUtFWV9FTkNSWVBUX1BLKGNyeXB0a2V5YXJnMikgPSA2OwkKKworCQkvKgorCQkgKiBYIGp1c3Qgc2VudCBtZSBhIG1lc3NhZ2UuIGFuZCBJIGtub3cgWCdzIHB1YmxpYyBrZXkKKwkJICogRGVjcnlwdCB0aGUgY29udmVyc2F0aW9uIGtleSBmb3IgbWUuCisJCSAqLworCQljcnlwdGtleXJlcworCQlLRVlfREVDUllQVF9QSyhjcnlwdGtleWFyZzIpID0gNzsKKwkJCisJCS8qIAorCQkgKiBTdG9yZSBteSBwdWJsaWMga2V5LCBuZXRuYW1lIGFuZCBwcml2YXRlIGtleS4gCisJCSAqLworCQlrZXlzdGF0dXMKKwkJS0VZX05FVF9QVVQoa2V5X25ldHN0YXJnKSA9IDg7CisJCQorCQkvKgorCQkgKiBSZXRyaWV2ZSBteSBwdWJsaWMga2V5LCBuZXRuYW1lIGFuZCBwcml2YXRlIGtleS4gCisJCSAqLworIAkJa2V5X25ldHN0cmVzCisJCUtFWV9ORVRfR0VUKHZvaWQpID0gOTsKKwkJCisJCS8qCisJCSAqIFJldHVybiBtZSB0aGUgY29udmVyc2F0aW9uIGtleSB0aGF0IGlzIGNvbnN0cnVjdGVkIAorCQkgKiBmcm9tIG15IHNlY3JldCBrZXkgYW5kIHRoaXMgcHVibGlja2V5LiAKKwkJICovCisKKwkJY3J5cHRrZXlyZXMgCisJCUtFWV9HRVRfQ09OVihrZXlidWYpID0gMTA7IAorCisJCQorCX0gPSAyOworfSA9IDEwMDAyOTsKKworCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL2tsbV9wcm90LnggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL2tsbV9wcm90LngKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYzZTEyZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGNzdmMva2xtX3Byb3QueApAQCAtMCwwICsxLDEzNCBAQAorLyogQCgjKWtsbV9wcm90LngJMi4xIDg4LzA4LzAxIDQuMCBSUENTUkMgKi8KKy8qIEAoIylrbG1fcHJvdC54IDEuNyA4Ny8wNy8wOCBDb3B5ciAxOTg3IFN1biBNaWNybyAqLworCisvKgorICogU3VuIFJQQyBpcyBhIHByb2R1Y3Qgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBhbmQgaXMgcHJvdmlkZWQgZm9yCisgKiB1bnJlc3RyaWN0ZWQgdXNlIHByb3ZpZGVkIHRoYXQgdGhpcyBsZWdlbmQgaXMgaW5jbHVkZWQgb24gYWxsIHRhcGUKKyAqIG1lZGlhIGFuZCBhcyBhIHBhcnQgb2YgdGhlIHNvZnR3YXJlIHByb2dyYW0gaW4gd2hvbGUgb3IgcGFydC4gIFVzZXJzCisgKiBtYXkgY29weSBvciBtb2RpZnkgU3VuIFJQQyB3aXRob3V0IGNoYXJnZSwgYnV0IGFyZSBub3QgYXV0aG9yaXplZAorICogdG8gbGljZW5zZSBvciBkaXN0cmlidXRlIGl0IHRvIGFueW9uZSBlbHNlIGV4Y2VwdCBhcyBwYXJ0IG9mIGEgcHJvZHVjdCBvcgorICogcHJvZ3JhbSBkZXZlbG9wZWQgYnkgdGhlIHVzZXIuCisgKiAKKyAqIFNVTiBSUEMgSVMgUFJPVklERUQgQVMgSVMgV0lUSCBOTyBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIElOQ0xVRElORyBUSEUKKyAqIFdBUlJBTlRJRVMgT0YgREVTSUdOLCBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSwgT1IgQVJJU0lORyBGUk9NIEEgQ09VUlNFIE9GIERFQUxJTkcsIFVTQUdFIE9SIFRSQURFIFBSQUNUSUNFLgorICogCisgKiBTdW4gUlBDIGlzIHByb3ZpZGVkIHdpdGggbm8gc3VwcG9ydCBhbmQgd2l0aG91dCBhbnkgb2JsaWdhdGlvbiBvbiB0aGUKKyAqIHBhcnQgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiB0byBhc3Npc3QgaW4gaXRzIHVzZSwgY29ycmVjdGlvbiwKKyAqIG1vZGlmaWNhdGlvbiBvciBlbmhhbmNlbWVudC4KKyAqIAorICogU1VOIE1JQ1JPU1lTVEVNUywgSU5DLiBTSEFMTCBIQVZFIE5PIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFCisgKiBJTkZSSU5HRU1FTlQgT0YgQ09QWVJJR0hUUywgVFJBREUgU0VDUkVUUyBPUiBBTlkgUEFURU5UUyBCWSBTVU4gUlBDCisgKiBPUiBBTlkgUEFSVCBUSEVSRU9GLgorICogCisgKiBJbiBubyBldmVudCB3aWxsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYmUgbGlhYmxlIGZvciBhbnkgbG9zdCByZXZlbnVlCisgKiBvciBwcm9maXRzIG9yIG90aGVyIHNwZWNpYWwsIGluZGlyZWN0IGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIGV2ZW4gaWYKKyAqIFN1biBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisgKiAKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIDI1NTAgR2FyY2lhIEF2ZW51ZQorICogTW91bnRhaW4gVmlldywgQ2FsaWZvcm5pYSAgOTQwNDMKKyAqLworCisvKgorICogS2VybmVsL2xvY2sgbWFuYWdlciBwcm90b2NvbCBkZWZpbml0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDE5ODYgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICoKKyAqIHByb3RvY29sIHVzZWQgYmV0d2VlbiB0aGUgVU5JWCBrZXJuZWwgKHRoZSAiY2xpZW50IikgYW5kIHRoZQorICogbG9jYWwgbG9jayBtYW5hZ2VyLiAgVGhlIGxvY2FsIGxvY2sgbWFuYWdlciBpcyBhIGRlYW1vbiBydW5uaW5nCisgKiBhYm92ZSB0aGUga2VybmVsLgorICovCisKK2NvbnN0CUxNX01BWFNUUkxFTiA9IDEwMjQ7CisKKy8qCisgKiBsb2NrIG1hbmFnZXIgc3RhdHVzIHJldHVybnMKKyAqLworZW51bSBrbG1fc3RhdHMgeworCWtsbV9ncmFudGVkID0gMCwJLyogbG9jayBpcyBncmFudGVkICovCisJa2xtX2RlbmllZCA9IDEsCQkvKiBsb2NrIGlzIGRlbmllZCAqLworCWtsbV9kZW5pZWRfbm9sb2NrcyA9IDIsIC8qIG5vIGxvY2sgZW50cnkgYXZhaWxhYmxlICovCisJa2xtX3dvcmtpbmcgPSAzIAkvKiBsb2NrIGlzIGJlaW5nIHByb2Nlc3NlZCAqLworfTsKKworLyoKKyAqIGxvY2sgbWFuYWdlciBsb2NrIGlkZW50aWZpZXIKKyAqLworc3RydWN0IGtsbV9sb2NrIHsKKwlzdHJpbmcgc2VydmVyX25hbWU8TE1fTUFYU1RSTEVOPjsKKwluZXRvYmogZmg7CQkvKiBhIGNvdW50ZWQgZmlsZSBoYW5kbGUgKi8KKwlpbnQgcGlkOwkJLyogaG9sZGVyIG9mIHRoZSBsb2NrICovCisJdW5zaWduZWQgbF9vZmZzZXQ7CS8qIGJlZ2lubmluZyBvZmZzZXQgb2YgdGhlIGxvY2sgKi8KKwl1bnNpZ25lZCBsX2xlbjsJCS8qIGJ5dGUgbGVuZ3RoIG9mIHRoZSBsb2NrOworCQkJCSAqIHplcm8gbWVhbnMgdGhyb3VnaCBlbmQgb2YgZmlsZSAqLworfTsKKworLyoKKyAqIGxvY2sgaG9sZGVyIGlkZW50aWZpZXIKKyAqLworc3RydWN0IGtsbV9ob2xkZXIgeworCWJvb2wgZXhjbHVzaXZlOwkJLyogRkFMU0UgaWYgc2hhcmVkIGxvY2sgKi8KKwlpbnQgc3ZpZDsJCS8qIGhvbGRlciBvZiB0aGUgbG9jayAocGlkKSAqLworCXVuc2lnbmVkIGxfb2Zmc2V0OwkvKiBiZWdpbm5pbmcgb2Zmc2V0IG9mIHRoZSBsb2NrICovCisJdW5zaWduZWQgbF9sZW47CQkvKiBieXRlIGxlbmd0aCBvZiB0aGUgbG9jazsKKwkJCQkgKiB6ZXJvIG1lYW5zIHRocm91Z2ggZW5kIG9mIGZpbGUgKi8KK307CisKKy8qCisgKiByZXBseSB0byBLTE1fTE9DSyAvIEtMTV9VTkxPQ0sgLyBLTE1fQ0FOQ0VMCisgKi8KK3N0cnVjdCBrbG1fc3RhdCB7CisJa2xtX3N0YXRzIHN0YXQ7Cit9OworCisvKgorICogcmVwbHkgdG8gYSBLTE1fVEVTVCBjYWxsCisgKi8KK3VuaW9uIGtsbV90ZXN0cnBseSBzd2l0Y2ggKGtsbV9zdGF0cyBzdGF0KSB7CisJY2FzZSBrbG1fZGVuaWVkOgorCQlzdHJ1Y3Qga2xtX2hvbGRlciBob2xkZXI7CisJZGVmYXVsdDogLyogQWxsIG90aGVyIGNhc2VzIHJldHVybiBubyBhcmd1bWVudHMgKi8KKwkJdm9pZDsKK307CisKKworLyoKKyAqIGFyZ3VtZW50cyB0byBLTE1fTE9DSworICovCitzdHJ1Y3Qga2xtX2xvY2thcmdzIHsKKwlib29sIGJsb2NrOworCWJvb2wgZXhjbHVzaXZlOworCXN0cnVjdCBrbG1fbG9jayBhbG9jazsKK307CisKKy8qCisgKiBhcmd1bWVudHMgdG8gS0xNX1RFU1QKKyAqLworc3RydWN0IGtsbV90ZXN0YXJncyB7CisJYm9vbCBleGNsdXNpdmU7CisJc3RydWN0IGtsbV9sb2NrIGFsb2NrOworfTsKKworLyoKKyAqIGFyZ3VtZW50cyB0byBLTE1fVU5MT0NLCisgKi8KK3N0cnVjdCBrbG1fdW5sb2NrYXJncyB7CisJc3RydWN0IGtsbV9sb2NrIGFsb2NrOworfTsKKworcHJvZ3JhbSBLTE1fUFJPRyB7CisJdmVyc2lvbiBLTE1fVkVSUyB7CisKKwkJa2xtX3Rlc3RycGx5CUtMTV9URVNUIChzdHJ1Y3Qga2xtX3Rlc3RhcmdzKSA9CTE7CisKKwkJa2xtX3N0YXQJS0xNX0xPQ0sgKHN0cnVjdCBrbG1fbG9ja2FyZ3MpID0JMjsKKworCQlrbG1fc3RhdAlLTE1fQ0FOQ0VMIChzdHJ1Y3Qga2xtX2xvY2thcmdzKSA9CTM7CisJCS8qIGtsbV9ncmFudGVkPT4gdGhlIGNhbmNlbCByZXF1ZXN0IGZhaWxzIGR1ZSB0byBsb2NrIGlzIGFscmVhZHkgZ3JhbnRlZCAqLworCQkvKiBrbG1fZGVuaWVkPT4gdGhlIGNhbmNlbCByZXF1ZXN0IHN1Y2Nlc3NmdWxseSBhYm9ydHMKK2xvY2sgcmVxdWVzdCAgKi8KKworCQlrbG1fc3RhdAlLTE1fVU5MT0NLIChzdHJ1Y3Qga2xtX3VubG9ja2FyZ3MpID0JNDsKKwl9ID0gMTsKK30gPSAxMDAwMjA7CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGNzdmMvbW91bnQueCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGNzdmMvbW91bnQueApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTBiNGNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwY3N2Yy9tb3VudC54CkBAIC0wLDAgKzEsMTYxIEBACisvKiBAKCMpbW91bnQueAkyLjEgODgvMDgvMDEgNC4wIFJQQ1NSQyAqLworLyogQCgjKW1vdW50LnggMS4yIDg3LzA5LzE4IENvcHlyIDE5ODcgU3VuIE1pY3JvICovCisKKy8qCisgKiBTdW4gUlBDIGlzIGEgcHJvZHVjdCBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGFuZCBpcyBwcm92aWRlZCBmb3IKKyAqIHVucmVzdHJpY3RlZCB1c2UgcHJvdmlkZWQgdGhhdCB0aGlzIGxlZ2VuZCBpcyBpbmNsdWRlZCBvbiBhbGwgdGFwZQorICogbWVkaWEgYW5kIGFzIGEgcGFydCBvZiB0aGUgc29mdHdhcmUgcHJvZ3JhbSBpbiB3aG9sZSBvciBwYXJ0LiAgVXNlcnMKKyAqIG1heSBjb3B5IG9yIG1vZGlmeSBTdW4gUlBDIHdpdGhvdXQgY2hhcmdlLCBidXQgYXJlIG5vdCBhdXRob3JpemVkCisgKiB0byBsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgaXQgdG8gYW55b25lIGVsc2UgZXhjZXB0IGFzIHBhcnQgb2YgYSBwcm9kdWN0IG9yCisgKiBwcm9ncmFtIGRldmVsb3BlZCBieSB0aGUgdXNlci4KKyAqCisgKiBTVU4gUlBDIElTIFBST1ZJREVEIEFTIElTIFdJVEggTk8gV0FSUkFOVElFUyBPRiBBTlkgS0lORCBJTkNMVURJTkcgVEhFCisgKiBXQVJSQU5USUVTIE9GIERFU0lHTiwgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UsIE9SIEFSSVNJTkcgRlJPTSBBIENPVVJTRSBPRiBERUFMSU5HLCBVU0FHRSBPUiBUUkFERSBQUkFDVElDRS4KKyAqCisgKiBTdW4gUlBDIGlzIHByb3ZpZGVkIHdpdGggbm8gc3VwcG9ydCBhbmQgd2l0aG91dCBhbnkgb2JsaWdhdGlvbiBvbiB0aGUKKyAqIHBhcnQgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiB0byBhc3Npc3QgaW4gaXRzIHVzZSwgY29ycmVjdGlvbiwKKyAqIG1vZGlmaWNhdGlvbiBvciBlbmhhbmNlbWVudC4KKyAqCisgKiBTVU4gTUlDUk9TWVNURU1TLCBJTkMuIFNIQUxMIEhBVkUgTk8gTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUKKyAqIElORlJJTkdFTUVOVCBPRiBDT1BZUklHSFRTLCBUUkFERSBTRUNSRVRTIE9SIEFOWSBQQVRFTlRTIEJZIFNVTiBSUEMKKyAqIE9SIEFOWSBQQVJUIFRIRVJFT0YuCisgKgorICogSW4gbm8gZXZlbnQgd2lsbCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJlIGxpYWJsZSBmb3IgYW55IGxvc3QgcmV2ZW51ZQorICogb3IgcHJvZml0cyBvciBvdGhlciBzcGVjaWFsLCBpbmRpcmVjdCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBldmVuIGlmCisgKiBTdW4gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorICoKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIDI1NTAgR2FyY2lhIEF2ZW51ZQorICogTW91bnRhaW4gVmlldywgQ2FsaWZvcm5pYSAgOTQwNDMKKyAqLworCisvKgorICogUHJvdG9jb2wgZGVzY3JpcHRpb24gZm9yIHRoZSBtb3VudCBwcm9ncmFtCisgKi8KKworCitjb25zdCBNTlRQQVRITEVOID0gMTAyNDsJLyogbWF4aW11bSBieXRlcyBpbiBhIHBhdGhuYW1lIGFyZ3VtZW50ICovCitjb25zdCBNTlROQU1MRU4gPSAyNTU7CQkvKiBtYXhpbXVtIGJ5dGVzIGluIGEgbmFtZSBhcmd1bWVudCAqLworY29uc3QgRkhTSVpFID0gMzI7CQkvKiBzaXplIGluIGJ5dGVzIG9mIGEgZmlsZSBoYW5kbGUgKi8KKworLyoKKyAqIFRoZSBmaGFuZGxlIGlzIHRoZSBmaWxlIGhhbmRsZSB0aGF0IHRoZSBzZXJ2ZXIgcGFzc2VzIHRvIHRoZSBjbGllbnQuCisgKiBBbGwgZmlsZSBvcGVyYXRpb25zIGFyZSBkb25lIHVzaW5nIHRoZSBmaWxlIGhhbmRsZXMgdG8gcmVmZXIgdG8gYSBmaWxlCisgKiBvciBhIGRpcmVjdG9yeS4gVGhlIGZpbGUgaGFuZGxlIGNhbiBjb250YWluIHdoYXRldmVyIGluZm9ybWF0aW9uIHRoZQorICogc2VydmVyIG5lZWRzIHRvIGRpc3Rpbmd1aXNoIGFuIGluZGl2aWR1YWwgZmlsZS4KKyAqLwordHlwZWRlZiBvcGFxdWUgZmhhbmRsZVtGSFNJWkVdOworCisvKgorICogSWYgYSBzdGF0dXMgb2YgemVybyBpcyByZXR1cm5lZCwgdGhlIGNhbGwgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgYW5kCisgKiBhIGZpbGUgaGFuZGxlIGZvciB0aGUgZGlyZWN0b3J5IGZvbGxvd3MuIEEgbm9uLXplcm8gc3RhdHVzIGluZGljYXRlcworICogc29tZSBzb3J0IG9mIGVycm9yLiBUaGUgc3RhdHVzIGNvcnJlc3BvbmRzIHdpdGggVU5JWCBlcnJvciBudW1iZXJzLgorICovCit1bmlvbiBmaHN0YXR1cyBzd2l0Y2ggKHVuc2lnbmVkIGZoc19zdGF0dXMpIHsKK2Nhc2UgMDoKKwlmaGFuZGxlIGZoc19maGFuZGxlOworZGVmYXVsdDoKKwl2b2lkOworfTsKKworLyoKKyAqIFRoZSB0eXBlIGRpcnBhdGggaXMgdGhlIHBhdGhuYW1lIG9mIGEgZGlyZWN0b3J5CisgKi8KK3R5cGVkZWYgc3RyaW5nIGRpcnBhdGg8TU5UUEFUSExFTj47CisKKy8qCisgKiBUaGUgdHlwZSBuYW1lIGlzIHVzZWQgZm9yIGFyYml0cmFyeSBuYW1lcyAoaG9zdG5hbWVzLCBncm91cG5hbWVzKQorICovCit0eXBlZGVmIHN0cmluZyBuYW1lPE1OVE5BTUxFTj47CisKKy8qCisgKiBBIGxpc3Qgb2Ygd2hvIGhhcyB3aGF0IG1vdW50ZWQKKyAqLwordHlwZWRlZiBzdHJ1Y3QgbW91bnRib2R5ICptb3VudGxpc3Q7CitzdHJ1Y3QgbW91bnRib2R5IHsKKwluYW1lIG1sX2hvc3RuYW1lOworCWRpcnBhdGggbWxfZGlyZWN0b3J5OworCW1vdW50bGlzdCBtbF9uZXh0OworfTsKKworLyoKKyAqIEEgbGlzdCBvZiBuZXRncm91cHMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgZ3JvdXBub2RlICpncm91cHM7CitzdHJ1Y3QgZ3JvdXBub2RlIHsKKwluYW1lIGdyX25hbWU7CisJZ3JvdXBzIGdyX25leHQ7Cit9OworCisvKgorICogQSBsaXN0IG9mIHdoYXQgaXMgZXhwb3J0ZWQgYW5kIHRvIHdob20KKyAqLwordHlwZWRlZiBzdHJ1Y3QgZXhwb3J0bm9kZSAqZXhwb3J0czsKK3N0cnVjdCBleHBvcnRub2RlIHsKKwlkaXJwYXRoIGV4X2RpcjsKKwlncm91cHMgZXhfZ3JvdXBzOworCWV4cG9ydHMgZXhfbmV4dDsKK307CisKK3Byb2dyYW0gTU9VTlRQUk9HIHsKKwkvKgorCSAqIFZlcnNpb24gb25lIG9mIHRoZSBtb3VudCBwcm90b2NvbCBjb21tdW5pY2F0ZXMgd2l0aCB2ZXJzaW9uIHR3bworCSAqIG9mIHRoZSBORlMgcHJvdG9jb2wuIFRoZSBvbmx5IGNvbm5lY3RpbmcgcG9pbnQgaXMgdGhlIGZoYW5kbGUKKwkgKiBzdHJ1Y3R1cmUsIHdoaWNoIGlzIHRoZSBzYW1lIGZvciBib3RoIHByb3RvY29scy4KKwkgKi8KKwl2ZXJzaW9uIE1PVU5UVkVSUyB7CisJCS8qCisJCSAqIERvZXMgbm8gd29yay4gSXQgaXMgbWFkZSBhdmFpbGFibGUgaW4gYWxsIFJQQyBzZXJ2aWNlcworCQkgKiB0byBhbGxvdyBzZXJ2ZXIgcmVzcG9uc2UgdGVzdGluZyBhbmQgdGltaW5nCisJCSAqLworCQl2b2lkCisJCU1PVU5UUFJPQ19OVUxMKHZvaWQpID0gMDsKKworCQkvKgorCQkgKiBJZiBmaHNfc3RhdHVzIGlzIDAsIHRoZW4gZmhzX2ZoYW5kbGUgY29udGFpbnMgdGhlCisJIAkgKiBmaWxlIGhhbmRsZSBmb3IgdGhlIGRpcmVjdG9yeS4gVGhpcyBmaWxlIGhhbmRsZSBtYXkKKwkJICogYmUgdXNlZCBpbiB0aGUgTkZTIHByb3RvY29sLiBUaGlzIHByb2NlZHVyZSBhbHNvIGFkZHMKKwkJICogYSBuZXcgZW50cnkgdG8gdGhlIG1vdW50IGxpc3QgZm9yIHRoaXMgY2xpZW50IG1vdW50aW5nCisJCSAqIHRoZSBkaXJlY3RvcnkuCisJCSAqIFVuaXggYXV0aGVudGljYXRpb24gcmVxdWlyZWQuCisJCSAqLworCQlmaHN0YXR1cworCQlNT1VOVFBST0NfTU5UKGRpcnBhdGgpID0gMTsKKworCQkvKgorCQkgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIHJlbW90ZWx5IG1vdW50ZWQgZmlsZXN5c3RlbXMuIFRoZQorCQkgKiBtb3VudGxpc3QgY29udGFpbnMgb25lIGVudHJ5IGZvciBlYWNoIGhvc3RuYW1lIGFuZAorCQkgKiBkaXJlY3RvcnkgcGFpci4KKwkJICovCisJCW1vdW50bGlzdAorCQlNT1VOVFBST0NfRFVNUCh2b2lkKSA9IDI7CisKKwkJLyoKKwkJICogUmVtb3ZlcyB0aGUgbW91bnQgbGlzdCBlbnRyeSBmb3IgdGhlIGRpcmVjdG9yeQorCQkgKiBVbml4IGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkLgorCQkgKi8KKwkJdm9pZAorCQlNT1VOVFBST0NfVU1OVChkaXJwYXRoKSA9IDM7CisKKwkJLyoKKwkJICogUmVtb3ZlcyBhbGwgb2YgdGhlIG1vdW50IGxpc3QgZW50cmllcyBmb3IgdGhpcyBjbGllbnQKKwkJICogVW5peCBhdXRoZW50aWNhdGlvbiByZXF1aXJlZC4KKwkJICovCisJCXZvaWQKKwkJTU9VTlRQUk9DX1VNTlRBTEwodm9pZCkgPSA0OworCisJCS8qCisJCSAqIFJldHVybnMgYSBsaXN0IG9mIGFsbCB0aGUgZXhwb3J0ZWQgZmlsZXN5c3RlbXMsIGFuZCB3aGljaAorCQkgKiBtYWNoaW5lcyBhcmUgYWxsb3dlZCB0byBpbXBvcnQgaXQuCisJCSAqLworCQlleHBvcnRzCisJCU1PVU5UUFJPQ19FWFBPUlQodm9pZCkgID0gNTsKKworCQkvKgorCQkgKiBJZGVudGljYWwgdG8gTU9VTlRQUk9DX0VYUE9SVCBhYm92ZQorCQkgKi8KKwkJZXhwb3J0cworCQlNT1VOVFBST0NfRVhQT1JUQUxMKHZvaWQpID0gNjsKKwl9ID0gMTsKK30gPSAxMDAwMDU7CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL25mc19wcm90LnggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL25mc19wcm90LngKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMwZGFiMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGNzdmMvbmZzX3Byb3QueApAQCAtMCwwICsxLDM1NCBAQAorLyogQCgjKW5mc19wcm90LngJMi4xIDg4LzA4LzAxIDQuMCBSUENTUkMgKi8KKworLyoKKyAqIFN1biBSUEMgaXMgYSBwcm9kdWN0IG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYW5kIGlzIHByb3ZpZGVkIGZvcgorICogdW5yZXN0cmljdGVkIHVzZSBwcm92aWRlZCB0aGF0IHRoaXMgbGVnZW5kIGlzIGluY2x1ZGVkIG9uIGFsbCB0YXBlCisgKiBtZWRpYSBhbmQgYXMgYSBwYXJ0IG9mIHRoZSBzb2Z0d2FyZSBwcm9ncmFtIGluIHdob2xlIG9yIHBhcnQuICBVc2VycworICogbWF5IGNvcHkgb3IgbW9kaWZ5IFN1biBSUEMgd2l0aG91dCBjaGFyZ2UsIGJ1dCBhcmUgbm90IGF1dGhvcml6ZWQKKyAqIHRvIGxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBpdCB0byBhbnlvbmUgZWxzZSBleGNlcHQgYXMgcGFydCBvZiBhIHByb2R1Y3Qgb3IKKyAqIHByb2dyYW0gZGV2ZWxvcGVkIGJ5IHRoZSB1c2VyLgorICoKKyAqIFNVTiBSUEMgSVMgUFJPVklERUQgQVMgSVMgV0lUSCBOTyBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIElOQ0xVRElORyBUSEUKKyAqIFdBUlJBTlRJRVMgT0YgREVTSUdOLCBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSwgT1IgQVJJU0lORyBGUk9NIEEgQ09VUlNFIE9GIERFQUxJTkcsIFVTQUdFIE9SIFRSQURFIFBSQUNUSUNFLgorICoKKyAqIFN1biBSUEMgaXMgcHJvdmlkZWQgd2l0aCBubyBzdXBwb3J0IGFuZCB3aXRob3V0IGFueSBvYmxpZ2F0aW9uIG9uIHRoZQorICogcGFydCBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIHRvIGFzc2lzdCBpbiBpdHMgdXNlLCBjb3JyZWN0aW9uLAorICogbW9kaWZpY2F0aW9uIG9yIGVuaGFuY2VtZW50LgorICoKKyAqIFNVTiBNSUNST1NZU1RFTVMsIElOQy4gU0hBTEwgSEFWRSBOTyBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRQorICogSU5GUklOR0VNRU5UIE9GIENPUFlSSUdIVFMsIFRSQURFIFNFQ1JFVFMgT1IgQU5ZIFBBVEVOVFMgQlkgU1VOIFJQQworICogT1IgQU5ZIFBBUlQgVEhFUkVPRi4KKyAqCisgKiBJbiBubyBldmVudCB3aWxsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYmUgbGlhYmxlIGZvciBhbnkgbG9zdCByZXZlbnVlCisgKiBvciBwcm9maXRzIG9yIG90aGVyIHNwZWNpYWwsIGluZGlyZWN0IGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIGV2ZW4gaWYKKyAqIFN1biBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisgKgorICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogMjU1MCBHYXJjaWEgQXZlbnVlCisgKiBNb3VudGFpbiBWaWV3LCBDYWxpZm9ybmlhICA5NDA0MworICovCisKKy8qCisgKiBuZnNfcHJvdC54IDEuMiA4Ny8xMC8xMgorICogQ29weXJpZ2h0IDE5ODcgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICovCitjb25zdCBORlNfUE9SVCAgICAgICAgICA9IDIwNDk7Citjb25zdCBORlNfTUFYREFUQSAgICAgICA9IDgxOTI7Citjb25zdCBORlNfTUFYUEFUSExFTiAgICA9IDEwMjQ7Citjb25zdCBORlNfTUFYTkFNTEVOCT0gMjU1OworY29uc3QgTkZTX0ZIU0laRQk9IDMyOworY29uc3QgTkZTX0NPT0tJRVNJWkUJPSA0OworY29uc3QgTkZTX0ZJRk9fREVWCT0gLTE7CS8qIHNpemUga2x1ZGdlIGZvciBuYW1lZCBwaXBlcyAqLworCisvKgorICogRmlsZSB0eXBlcworICovCitjb25zdCBORlNNT0RFX0ZNVCAgPSAwMTcwMDAwOwkvKiB0eXBlIG9mIGZpbGUgKi8KK2NvbnN0IE5GU01PREVfRElSICA9IDAwNDAwMDA7CS8qIGRpcmVjdG9yeSAqLworY29uc3QgTkZTTU9ERV9DSFIgID0gMDAyMDAwMDsJLyogY2hhcmFjdGVyIHNwZWNpYWwgKi8KK2NvbnN0IE5GU01PREVfQkxLICA9IDAwNjAwMDA7CS8qIGJsb2NrIHNwZWNpYWwgKi8KK2NvbnN0IE5GU01PREVfUkVHICA9IDAxMDAwMDA7CS8qIHJlZ3VsYXIgKi8KK2NvbnN0IE5GU01PREVfTE5LICA9IDAxMjAwMDA7CS8qIHN5bWJvbGljIGxpbmsgKi8KK2NvbnN0IE5GU01PREVfU09DSyA9IDAxNDAwMDA7CS8qIHNvY2tldCAqLworY29uc3QgTkZTTU9ERV9GSUZPID0gMDAxMDAwMDsJLyogZmlmbyAqLworCisvKgorICogRXJyb3Igc3RhdHVzCisgKi8KK2VudW0gbmZzc3RhdCB7CisJTkZTX09LPSAwLAkJLyogbm8gZXJyb3IgKi8KKwlORlNFUlJfUEVSTT0xLAkJLyogTm90IG93bmVyICovCisJTkZTRVJSX05PRU5UPTIsCQkvKiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5ICovCisJTkZTRVJSX0lPPTUsCQkvKiBJL08gZXJyb3IgKi8KKwlORlNFUlJfTlhJTz02LAkJLyogTm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcyAqLworCU5GU0VSUl9BQ0NFUz0xMywJLyogUGVybWlzc2lvbiBkZW5pZWQgKi8KKwlORlNFUlJfRVhJU1Q9MTcsCS8qIEZpbGUgZXhpc3RzICovCisJTkZTRVJSX05PREVWPTE5LAkvKiBObyBzdWNoIGRldmljZSAqLworCU5GU0VSUl9OT1RESVI9MjAsCS8qIE5vdCBhIGRpcmVjdG9yeSovCisJTkZTRVJSX0lTRElSPTIxLAkvKiBJcyBhIGRpcmVjdG9yeSAqLworCU5GU0VSUl9GQklHPTI3LAkJLyogRmlsZSB0b28gbGFyZ2UgKi8KKwlORlNFUlJfTk9TUEM9MjgsCS8qIE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlICovCisJTkZTRVJSX1JPRlM9MzAsCQkvKiBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0gKi8KKwlORlNFUlJfTkFNRVRPT0xPTkc9NjMsCS8qIEZpbGUgbmFtZSB0b28gbG9uZyAqLworCU5GU0VSUl9OT1RFTVBUWT02NiwJLyogRGlyZWN0b3J5IG5vdCBlbXB0eSAqLworCU5GU0VSUl9EUVVPVD02OSwJLyogRGlzYyBxdW90YSBleGNlZWRlZCAqLworCU5GU0VSUl9TVEFMRT03MCwJLyogU3RhbGUgTkZTIGZpbGUgaGFuZGxlICovCisJTkZTRVJSX1dGTFVTSD05OQkvKiB3cml0ZSBjYWNoZSBmbHVzaGVkICovCit9OworCisvKgorICogRmlsZSB0eXBlcworICovCitlbnVtIGZ0eXBlIHsKKwlORk5PTiA9IDAsCS8qIG5vbi1maWxlICovCisJTkZSRUcgPSAxLAkvKiByZWd1bGFyIGZpbGUgKi8KKwlORkRJUiA9IDIsCS8qIGRpcmVjdG9yeSAqLworCU5GQkxLID0gMywJLyogYmxvY2sgc3BlY2lhbCAqLworCU5GQ0hSID0gNCwJLyogY2hhcmFjdGVyIHNwZWNpYWwgKi8KKwlORkxOSyA9IDUsCS8qIHN5bWJvbGljIGxpbmsgKi8KKwlORlNPQ0sgPSA2LAkvKiB1bml4IGRvbWFpbiBzb2NrZXRzICovCisJTkZCQUQgPSA3LAkvKiB1bnVzZWQgKi8KKwlORkZJRk8gPSA4IAkvKiBuYW1lZCBwaXBlICovCit9OworCisvKgorICogRmlsZSBhY2Nlc3MgaGFuZGxlCisgKi8KK3N0cnVjdCBuZnNfZmggeworCW9wYXF1ZSBkYXRhW05GU19GSFNJWkVdOworfTsKKworLyoKKyAqIFRpbWV2YWwKKyAqLworc3RydWN0IG5mc3RpbWUgeworCXVuc2lnbmVkIHNlY29uZHM7CisJdW5zaWduZWQgdXNlY29uZHM7Cit9OworCisKKy8qCisgKiBGaWxlIGF0dHJpYnV0ZXMKKyAqLworc3RydWN0IGZhdHRyIHsKKwlmdHlwZSB0eXBlOwkJLyogZmlsZSB0eXBlICovCisJdW5zaWduZWQgbW9kZTsJCS8qIHByb3RlY3Rpb24gbW9kZSBiaXRzICovCisJdW5zaWduZWQgbmxpbms7CQkvKiAjIGhhcmQgbGlua3MgKi8KKwl1bnNpZ25lZCB1aWQ7CQkvKiBvd25lciB1c2VyIGlkICovCisJdW5zaWduZWQgZ2lkOwkJLyogb3duZXIgZ3JvdXAgaWQgKi8KKwl1bnNpZ25lZCBzaXplOwkJLyogZmlsZSBzaXplIGluIGJ5dGVzICovCisJdW5zaWduZWQgYmxvY2tzaXplOwkvKiBwcmVmZXJyZWQgYmxvY2sgc2l6ZSAqLworCXVuc2lnbmVkIHJkZXY7CQkvKiBzcGVjaWFsIGRldmljZSAjICovCisJdW5zaWduZWQgYmxvY2tzOwkvKiBLYiBvZiBkaXNrIHVzZWQgYnkgZmlsZSAqLworCXVuc2lnbmVkIGZzaWQ7CQkvKiBkZXZpY2UgIyAqLworCXVuc2lnbmVkIGZpbGVpZDsJLyogaW5vZGUgIyAqLworCW5mc3RpbWUJYXRpbWU7CQkvKiB0aW1lIG9mIGxhc3QgYWNjZXNzICovCisJbmZzdGltZQltdGltZTsJCS8qIHRpbWUgb2YgbGFzdCBtb2RpZmljYXRpb24gKi8KKwluZnN0aW1lCWN0aW1lOwkJLyogdGltZSBvZiBsYXN0IGNoYW5nZSAqLworfTsKKworLyoKKyAqIEZpbGUgYXR0cmlidXRlcyB3aGljaCBjYW4gYmUgc2V0CisgKi8KK3N0cnVjdCBzYXR0ciB7CisJdW5zaWduZWQgbW9kZTsJLyogcHJvdGVjdGlvbiBtb2RlIGJpdHMgKi8KKwl1bnNpZ25lZCB1aWQ7CS8qIG93bmVyIHVzZXIgaWQgKi8KKwl1bnNpZ25lZCBnaWQ7CS8qIG93bmVyIGdyb3VwIGlkICovCisJdW5zaWduZWQgc2l6ZTsJLyogZmlsZSBzaXplIGluIGJ5dGVzICovCisJbmZzdGltZQlhdGltZTsJLyogdGltZSBvZiBsYXN0IGFjY2VzcyAqLworCW5mc3RpbWUJbXRpbWU7CS8qIHRpbWUgb2YgbGFzdCBtb2RpZmljYXRpb24gKi8KK307CisKKwordHlwZWRlZiBzdHJpbmcgZmlsZW5hbWU8TkZTX01BWE5BTUxFTj47Cit0eXBlZGVmIHN0cmluZyBuZnNwYXRoPE5GU19NQVhQQVRITEVOPjsKKworLyoKKyAqIFJlcGx5IHN0YXR1cyB3aXRoIGZpbGUgYXR0cmlidXRlcworICovCit1bmlvbiBhdHRyc3RhdCBzd2l0Y2ggKG5mc3N0YXQgc3RhdHVzKSB7CitjYXNlIE5GU19PSzoKKwlmYXR0ciBhdHRyaWJ1dGVzOworZGVmYXVsdDoKKwl2b2lkOworfTsKKworc3RydWN0IHNhdHRyYXJncyB7CisJbmZzX2ZoIGZpbGU7CisJc2F0dHIgYXR0cmlidXRlczsKK307CisKKy8qCisgKiBBcmd1bWVudHMgZm9yIGRpcmVjdG9yeSBvcGVyYXRpb25zCisgKi8KK3N0cnVjdCBkaXJvcGFyZ3MgeworCW5mc19maAlkaXI7CS8qIGRpcmVjdG9yeSBmaWxlIGhhbmRsZSAqLworCWZpbGVuYW1lIG5hbWU7CQkvKiBuYW1lICh1cCB0byBORlNfTUFYTkFNTEVOIGJ5dGVzKSAqLworfTsKKworc3RydWN0IGRpcm9wb2tyZXMgeworCW5mc19maCBmaWxlOworCWZhdHRyIGF0dHJpYnV0ZXM7Cit9OworCisvKgorICogUmVzdWx0cyBmcm9tIGRpcmVjdG9yeSBvcGVyYXRpb24KKyAqLwordW5pb24gZGlyb3ByZXMgc3dpdGNoIChuZnNzdGF0IHN0YXR1cykgeworY2FzZSBORlNfT0s6CisJZGlyb3Bva3JlcyBkaXJvcHJlczsKK2RlZmF1bHQ6CisJdm9pZDsKK307CisKK3VuaW9uIHJlYWRsaW5rcmVzIHN3aXRjaCAobmZzc3RhdCBzdGF0dXMpIHsKK2Nhc2UgTkZTX09LOgorCW5mc3BhdGggZGF0YTsKK2RlZmF1bHQ6CisJdm9pZDsKK307CisKKy8qCisgKiBBcmd1bWVudHMgdG8gcmVtb3RlIHJlYWQKKyAqLworc3RydWN0IHJlYWRhcmdzIHsKKwluZnNfZmggZmlsZTsJCS8qIGhhbmRsZSBmb3IgZmlsZSAqLworCXVuc2lnbmVkIG9mZnNldDsJLyogYnl0ZSBvZmZzZXQgaW4gZmlsZSAqLworCXVuc2lnbmVkIGNvdW50OwkJLyogaW1tZWRpYXRlIHJlYWQgY291bnQgKi8KKwl1bnNpZ25lZCB0b3RhbGNvdW50OwkvKiB0b3RhbCByZWFkIGNvdW50IChmcm9tIHRoaXMgb2Zmc2V0KSovCit9OworCisvKgorICogU3RhdHVzIE9LIHBvcnRpb24gb2YgcmVtb3RlIHJlYWQgcmVwbHkKKyAqLworc3RydWN0IHJlYWRva3JlcyB7CisJZmF0dHIJYXR0cmlidXRlczsJLyogYXR0cmlidXRlcywgbmVlZCBmb3IgcGFnaW4qLworCW9wYXF1ZSBkYXRhPE5GU19NQVhEQVRBPjsKK307CisKK3VuaW9uIHJlYWRyZXMgc3dpdGNoIChuZnNzdGF0IHN0YXR1cykgeworY2FzZSBORlNfT0s6CisJcmVhZG9rcmVzIHJlcGx5OworZGVmYXVsdDoKKwl2b2lkOworfTsKKworLyoKKyAqIEFyZ3VtZW50cyB0byByZW1vdGUgd3JpdGUKKyAqLworc3RydWN0IHdyaXRlYXJncyB7CisJbmZzX2ZoCWZpbGU7CQkvKiBoYW5kbGUgZm9yIGZpbGUgKi8KKwl1bnNpZ25lZCBiZWdpbm9mZnNldDsJLyogYmVnaW5uaW5nIGJ5dGUgb2Zmc2V0IGluIGZpbGUgKi8KKwl1bnNpZ25lZCBvZmZzZXQ7CS8qIGN1cnJlbnQgYnl0ZSBvZmZzZXQgaW4gZmlsZSAqLworCXVuc2lnbmVkIHRvdGFsY291bnQ7CS8qIHRvdGFsIHdyaXRlIGNvdW50ICh0byB0aGlzIG9mZnNldCkqLworCW9wYXF1ZSBkYXRhPE5GU19NQVhEQVRBPjsKK307CisKK3N0cnVjdCBjcmVhdGVhcmdzIHsKKwlkaXJvcGFyZ3Mgd2hlcmU7CisJc2F0dHIgYXR0cmlidXRlczsKK307CisKK3N0cnVjdCByZW5hbWVhcmdzIHsKKwlkaXJvcGFyZ3MgZnJvbTsKKwlkaXJvcGFyZ3MgdG87Cit9OworCitzdHJ1Y3QgbGlua2FyZ3MgeworCW5mc19maCBmcm9tOworCWRpcm9wYXJncyB0bzsKK307CisKK3N0cnVjdCBzeW1saW5rYXJncyB7CisJZGlyb3BhcmdzIGZyb207CisJbmZzcGF0aCB0bzsKKwlzYXR0ciBhdHRyaWJ1dGVzOworfTsKKworCit0eXBlZGVmIG9wYXF1ZSBuZnNjb29raWVbTkZTX0NPT0tJRVNJWkVdOworCisvKgorICogQXJndW1lbnRzIHRvIHJlYWRkaXIKKyAqLworc3RydWN0IHJlYWRkaXJhcmdzIHsKKwluZnNfZmggZGlyOwkJLyogZGlyZWN0b3J5IGhhbmRsZSAqLworCW5mc2Nvb2tpZSBjb29raWU7CisJdW5zaWduZWQgY291bnQ7CQkvKiBudW1iZXIgb2YgZGlyZWN0b3J5IGJ5dGVzIHRvIHJlYWQgKi8KK307CisKK3N0cnVjdCBlbnRyeSB7CisJdW5zaWduZWQgZmlsZWlkOworCWZpbGVuYW1lIG5hbWU7CisJbmZzY29va2llIGNvb2tpZTsKKwllbnRyeSAqbmV4dGVudHJ5OworfTsKKworc3RydWN0IGRpcmxpc3QgeworCWVudHJ5ICplbnRyaWVzOworCWJvb2wgZW9mOworfTsKKwordW5pb24gcmVhZGRpcnJlcyBzd2l0Y2ggKG5mc3N0YXQgc3RhdHVzKSB7CitjYXNlIE5GU19PSzoKKwlkaXJsaXN0IHJlcGx5OworZGVmYXVsdDoKKwl2b2lkOworfTsKKworc3RydWN0IHN0YXRmc29rcmVzIHsKKwl1bnNpZ25lZCB0c2l6ZTsJLyogcHJlZmVycmVkIHRyYW5zZmVyIHNpemUgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBic2l6ZTsJLyogZnVuZGFtZW50YWwgZmlsZSBzeXN0ZW0gYmxvY2sgc2l6ZSAqLworCXVuc2lnbmVkIGJsb2NrczsJLyogdG90YWwgYmxvY2tzIGluIGZpbGUgc3lzdGVtICovCisJdW5zaWduZWQgYmZyZWU7CS8qIGZyZWUgYmxvY2tzIGluIGZzICovCisJdW5zaWduZWQgYmF2YWlsOwkvKiBmcmVlIGJsb2NrcyBhdmFpbCB0byBub24tc3VwZXJ1c2VyICovCit9OworCit1bmlvbiBzdGF0ZnNyZXMgc3dpdGNoIChuZnNzdGF0IHN0YXR1cykgeworY2FzZSBORlNfT0s6CisJc3RhdGZzb2tyZXMgcmVwbHk7CitkZWZhdWx0OgorCXZvaWQ7Cit9OworCisvKgorICogUmVtb3RlIGZpbGUgc2VydmljZSByb3V0aW5lcworICovCitwcm9ncmFtIE5GU19QUk9HUkFNIHsKKwl2ZXJzaW9uIE5GU19WRVJTSU9OIHsKKwkJdm9pZAorCQlORlNQUk9DX05VTEwodm9pZCkgPSAwOworCisJCWF0dHJzdGF0CisJCU5GU1BST0NfR0VUQVRUUihuZnNfZmgpID0JMTsKKworCQlhdHRyc3RhdAorCQlORlNQUk9DX1NFVEFUVFIoc2F0dHJhcmdzKSA9IDI7CisKKwkJdm9pZAorCQlORlNQUk9DX1JPT1Qodm9pZCkgPSAzOworCisJCWRpcm9wcmVzCisJCU5GU1BST0NfTE9PS1VQKGRpcm9wYXJncykgPSA0OworCisJCXJlYWRsaW5rcmVzCisJCU5GU1BST0NfUkVBRExJTksobmZzX2ZoKSA9IDU7CisKKwkJcmVhZHJlcworCQlORlNQUk9DX1JFQUQocmVhZGFyZ3MpID0gNjsKKworCQl2b2lkCisJCU5GU1BST0NfV1JJVEVDQUNIRSh2b2lkKSA9IDc7CisKKwkJYXR0cnN0YXQKKwkJTkZTUFJPQ19XUklURSh3cml0ZWFyZ3MpID0gODsKKworCQlkaXJvcHJlcworCQlORlNQUk9DX0NSRUFURShjcmVhdGVhcmdzKSA9IDk7CisKKwkJbmZzc3RhdAorCQlORlNQUk9DX1JFTU9WRShkaXJvcGFyZ3MpID0gMTA7CisKKwkJbmZzc3RhdAorCQlORlNQUk9DX1JFTkFNRShyZW5hbWVhcmdzKSA9IDExOworCisJCW5mc3N0YXQKKwkJTkZTUFJPQ19MSU5LKGxpbmthcmdzKSA9IDEyOworCisJCW5mc3N0YXQKKwkJTkZTUFJPQ19TWU1MSU5LKHN5bWxpbmthcmdzKSA9IDEzOworCisJCWRpcm9wcmVzCisJCU5GU1BST0NfTUtESVIoY3JlYXRlYXJncykgPSAxNDsKKworCQluZnNzdGF0CisJCU5GU1BST0NfUk1ESVIoZGlyb3BhcmdzKSA9IDE1OworCisJCXJlYWRkaXJyZXMKKwkJTkZTUFJPQ19SRUFERElSKHJlYWRkaXJhcmdzKSA9IDE2OworCisJCXN0YXRmc3JlcworCQlORlNQUk9DX1NUQVRGUyhuZnNfZmgpID0gMTc7CisJfSA9IDI7Cit9ID0gMTAwMDAzOwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwY3N2Yy9uaXMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGNzdmMvbmlzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ5NTQ1NwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGNzdmMvbmlzLmgKQEAgLTAsMCArMSw2MTUgQEAKKy8qCisgKiBTdW4gUlBDIGlzIGEgcHJvZHVjdCBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGFuZCBpcyBwcm92aWRlZCBmb3IKKyAqIHVucmVzdHJpY3RlZCB1c2UgcHJvdmlkZWQgdGhhdCB0aGlzIGxlZ2VuZCBpcyBpbmNsdWRlZCBvbiBhbGwgdGFwZQorICogbWVkaWEgYW5kIGFzIGEgcGFydCBvZiB0aGUgc29mdHdhcmUgcHJvZ3JhbSBpbiB3aG9sZSBvciBwYXJ0LiAgVXNlcnMKKyAqIG1heSBjb3B5IG9yIG1vZGlmeSBTdW4gUlBDIHdpdGhvdXQgY2hhcmdlLCBidXQgYXJlIG5vdCBhdXRob3JpemVkCisgKiB0byBsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgaXQgdG8gYW55b25lIGVsc2UgZXhjZXB0IGFzIHBhcnQgb2YgYSBwcm9kdWN0IG9yCisgKiBwcm9ncmFtIGRldmVsb3BlZCBieSB0aGUgdXNlciBvciB3aXRoIHRoZSBleHByZXNzIHdyaXR0ZW4gY29uc2VudCBvZgorICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICoKKyAqIFNVTiBSUEMgSVMgUFJPVklERUQgQVMgSVMgV0lUSCBOTyBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIElOQ0xVRElORyBUSEUKKyAqIFdBUlJBTlRJRVMgT0YgREVTSUdOLCBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSwgT1IgQVJJU0lORyBGUk9NIEEgQ09VUlNFIE9GIERFQUxJTkcsIFVTQUdFIE9SIFRSQURFIFBSQUNUSUNFLgorICoKKyAqIFN1biBSUEMgaXMgcHJvdmlkZWQgd2l0aCBubyBzdXBwb3J0IGFuZCB3aXRob3V0IGFueSBvYmxpZ2F0aW9uIG9uIHRoZQorICogcGFydCBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIHRvIGFzc2lzdCBpbiBpdHMgdXNlLCBjb3JyZWN0aW9uLAorICogbW9kaWZpY2F0aW9uIG9yIGVuaGFuY2VtZW50LgorICoKKyAqIFNVTiBNSUNST1NZU1RFTVMsIElOQy4gU0hBTEwgSEFWRSBOTyBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRQorICogSU5GUklOR0VNRU5UIE9GIENPUFlSSUdIVFMsIFRSQURFIFNFQ1JFVFMgT1IgQU5ZIFBBVEVOVFMgQlkgU1VOIFJQQworICogT1IgQU5ZIFBBUlQgVEhFUkVPRi4KKyAqCisgKiBJbiBubyBldmVudCB3aWxsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYmUgbGlhYmxlIGZvciBhbnkgbG9zdCByZXZlbnVlCisgKiBvciBwcm9maXRzIG9yIG90aGVyIHNwZWNpYWwsIGluZGlyZWN0IGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIGV2ZW4gaWYKKyAqIFN1biBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisgKgorICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogMjU1MCBHYXJjaWEgQXZlbnVlCisgKiBNb3VudGFpbiBWaWV3LCBDYWxpZm9ybmlhICA5NDA0MworICovCisKKyNpZm5kZWYgX1JQQ1NWQ19OSVNfSAorI2RlZmluZSBfUlBDU1ZDX05JU19IIDEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaW5jbHVkZSA8cnBjL3JwYy5oPgorI2luY2x1ZGUgPHJwY3N2Yy9uaXNfdGFncy5oPgorCitfX0JFR0lOX0RFQ0xTCisKKy8qCisgKgluaXMuaAorICoKKyAqCVRoaXMgZmlsZSBpcyB0aGUgbWFpbiBpbmNsdWRlIGZpbGUgZm9yIE5JUyBjbGllbnRzLiBJdCBjb250YWlucworICoJYm90aCB0aGUgY2xpZW50IGxpYnJhcnkgZnVuY3Rpb24gZGVmaW5lcyBhbmQgdGhlIHZhcmlvdXMgZGF0YQorICogCXN0cnVjdHVyZXMgdXNlZCBieSB0aGUgTklTIHNlcnZpY2UuIEl0IGluY2x1ZGVzIHRoZSBmaWxlIG5pc190YWdzLmgKKyAqCXdoaWNoIGRlZmluZXMgdGhlIHRhZyB2YWx1ZXMuIFRoaXMgYWxsb3dzIHRoZSB0YWdzIHRvIGNoYW5nZSB3aXRob3V0CisgKgloYXZpbmcgdG8gY2hhbmdlIHRoZSBuaXMueCBmaWxlLgorICoKKyAqCU5PVEUgOiBUSElTIEZJTEUgSVMgTk9UIEdFTkVSQVRFRCBXSVRIIFJQQ0dFTiAhIFNPIFlPVSBIQVZFIFRPCisgKiAgICAgICAgICAgICBBREQgQUxMIFRIRSBDSEFOR0VTIE9OIG5pc18qLnggRklMRVMgSEVSRSBBR0FJTiAhCisgKgorICogICAgICBJIGhhdmUgcmVtb3ZlZCBhbGwgdGhlIFNvbGFyaXMgaW50ZXJuYWwgc3RydWN0cyBhbmQgdmFyaWFibGVzLAorICogICAgICBiZWNhdXNlIHRoZXkgYXJlIG5vdCBzdXBwb3J0ZWQsIFN1biBjaGFuZ2VkIHRoZW0gYmV0d2VlbiB2YXJpb3VzCisgKiAgICAgIHJlbGVhc2VzIGFuZCB0aGV5IHNob3VsZG4ndCBiZSB1c2VkIGluIHVzZXIgcHJvZ3JhbXMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8a3VrdWtAc3VzZS5kZT4KKyAqLworCisKKyNpZm5kZWYgX19uaXNfb2JqZWN0X2gKKyNkZWZpbmUgX19uaXNfb2JqZWN0X2gKKworI2RlZmluZSBOSVNfTUFYU1RSSU5HTEVOIDI1NQorI2RlZmluZSBOSVNfTUFYTkFNRUxFTiAxMDI0CisjZGVmaW5lIE5JU19NQVhBVFRSTkFNRSAzMgorI2RlZmluZSBOSVNfTUFYQVRUUlZBTCAyMDQ4CisjZGVmaW5lIE5JU19NQVhDT0xVTU5TIDY0CisjZGVmaW5lIE5JU19NQVhBVFRSIDE2CisjZGVmaW5lIE5JU19NQVhQQVRIIDEwMjQKKyNkZWZpbmUgTklTX01BWFJFUExJQ0FTIDEyOAorI2RlZmluZSBOSVNfTUFYTElOS1MgMTYKKyNkZWZpbmUgTklTX1BLX05PTkUgMAorI2RlZmluZSBOSVNfUEtfREggMQorI2RlZmluZSBOSVNfUEtfUlNBIDIKKyNkZWZpbmUgTklTX1BLX0tFUkIgMworI2RlZmluZSBOSVNfUEtfREhFWFQgNAorCitzdHJ1Y3QgbmlzX2F0dHIgeworCWNoYXIgKnphdHRyX25keDsKKwlzdHJ1Y3QgeworCQl1X2ludCB6YXR0cl92YWxfbGVuOworCQljaGFyICp6YXR0cl92YWxfdmFsOworCX0gemF0dHJfdmFsOworfTsKK3R5cGVkZWYgc3RydWN0IG5pc19hdHRyIG5pc19hdHRyOworCit0eXBlZGVmIGNoYXIgKm5pc19uYW1lOworCitlbnVtIHpvdHlwZXMgeworCUJPR1VTX09CSiA9IDAsCisJTk9fT0JKID0gMSwKKwlESVJFQ1RPUllfT0JKID0gMiwKKwlHUk9VUF9PQkogPSAzLAorCVRBQkxFX09CSiA9IDQsCisJRU5UUllfT0JKID0gNSwKKwlMSU5LX09CSiA9IDYsCisJUFJJVkFURV9PQkogPSA3LAorCU5JU19CT0dVU19PQkogPSAwLAorCU5JU19OT19PQkogPSAxLAorCU5JU19ESVJFQ1RPUllfT0JKID0gMiwKKwlOSVNfR1JPVVBfT0JKID0gMywKKwlOSVNfVEFCTEVfT0JKID0gNCwKKwlOSVNfRU5UUllfT0JKID0gNSwKKwlOSVNfTElOS19PQkogPSA2LAorCU5JU19QUklWQVRFX09CSiA9IDcKK307Cit0eXBlZGVmIGVudW0gem90eXBlcyB6b3R5cGVzOworCitlbnVtIG5zdHlwZSB7CisJVU5LTk9XTiA9IDAsCisJTklTID0gMSwKKwlTVU5ZUCA9IDIsCisJSVZZID0gMywKKwlETlMgPSA0LAorCVg1MDAgPSA1LAorCUROQU5TID0gNiwKKwlYQ0hTID0gNywKKwlDRFMgPSA4LAorfTsKK3R5cGVkZWYgZW51bSBuc3R5cGUgbnN0eXBlOworCitzdHJ1Y3Qgb2FyX21hc2sgeworICAgICAgICB1aW50MzJfdCBvYV9yaWdodHM7CisgICAgICAgIHpvdHlwZXMgb2Ffb3R5cGU7Cit9OwordHlwZWRlZiBzdHJ1Y3Qgb2FyX21hc2sgb2FyX21hc2s7CisKK3N0cnVjdCBlbmRwb2ludCB7CisJY2hhciAqdWFkZHI7CisJY2hhciAqZmFtaWx5OworCWNoYXIgKnByb3RvOworfTsKK3R5cGVkZWYgc3RydWN0IGVuZHBvaW50IGVuZHBvaW50OworCitzdHJ1Y3QgbmlzX3NlcnZlciB7CisJbmlzX25hbWUgbmFtZTsKKwlzdHJ1Y3QgeworCQl1X2ludCBlcF9sZW47CisJCWVuZHBvaW50ICplcF92YWw7CisJfSBlcDsKKwl1aW50MzJfdCBrZXlfdHlwZTsKKwluZXRvYmogcGtleTsKK307Cit0eXBlZGVmIHN0cnVjdCBuaXNfc2VydmVyIG5pc19zZXJ2ZXI7CisKK3N0cnVjdCBkaXJlY3Rvcnlfb2JqIHsKKwluaXNfbmFtZSBkb19uYW1lOworCW5zdHlwZSBkb190eXBlOworCXN0cnVjdCB7CisJCXVfaW50IGRvX3NlcnZlcnNfbGVuOworCQluaXNfc2VydmVyICpkb19zZXJ2ZXJzX3ZhbDsKKwl9IGRvX3NlcnZlcnM7CisJdWludDMyX3QgZG9fdHRsOworCXN0cnVjdCB7CisJCXVfaW50IGRvX2FybWFza19sZW47CisJCW9hcl9tYXNrICpkb19hcm1hc2tfdmFsOworCX0gZG9fYXJtYXNrOworfTsKK3R5cGVkZWYgc3RydWN0IGRpcmVjdG9yeV9vYmogZGlyZWN0b3J5X29iajsKKworI2RlZmluZSBFTl9CSU5BUlkgMQorI2RlZmluZSBFTl9DUllQVCAyCisjZGVmaW5lIEVOX1hEUiA0CisjZGVmaW5lIEVOX01PRElGSUVEIDgKKyNkZWZpbmUgRU5fQVNOMSA2NAorCitzdHJ1Y3QgZW50cnlfY29sIHsKKwl1aW50MzJfdCBlY19mbGFnczsKKwlzdHJ1Y3QgeworCQl1X2ludCBlY192YWx1ZV9sZW47CisJCWNoYXIgKmVjX3ZhbHVlX3ZhbDsKKwl9IGVjX3ZhbHVlOworfTsKK3R5cGVkZWYgc3RydWN0IGVudHJ5X2NvbCBlbnRyeV9jb2w7CisKK3N0cnVjdCBlbnRyeV9vYmogeworCWNoYXIgKmVuX3R5cGU7CisJc3RydWN0IHsKKwkJdV9pbnQgZW5fY29sc19sZW47CisJCWVudHJ5X2NvbCAqZW5fY29sc192YWw7CisJfSBlbl9jb2xzOworfTsKK3R5cGVkZWYgc3RydWN0IGVudHJ5X29iaiBlbnRyeV9vYmo7CisKK3N0cnVjdCBncm91cF9vYmogeworCXVpbnQzMl90IGdyX2ZsYWdzOworCXN0cnVjdCB7CisJCXVfaW50IGdyX21lbWJlcnNfbGVuOworCQluaXNfbmFtZSAqZ3JfbWVtYmVyc192YWw7CisJfSBncl9tZW1iZXJzOworfTsKK3R5cGVkZWYgc3RydWN0IGdyb3VwX29iaiBncm91cF9vYmo7CisKK3N0cnVjdCBsaW5rX29iaiB7CisJem90eXBlcyBsaV9ydHlwZTsKKwlzdHJ1Y3QgeworCQl1X2ludCBsaV9hdHRyc19sZW47CisJCW5pc19hdHRyICpsaV9hdHRyc192YWw7CisJfSBsaV9hdHRyczsKKwluaXNfbmFtZSBsaV9uYW1lOworfTsKK3R5cGVkZWYgc3RydWN0IGxpbmtfb2JqIGxpbmtfb2JqOworCisjZGVmaW5lIFRBX0JJTkFSWSAxCisjZGVmaW5lIFRBX0NSWVBUIDIKKyNkZWZpbmUgVEFfWERSIDQKKyNkZWZpbmUgVEFfU0VBUkNIQUJMRSA4CisjZGVmaW5lIFRBX0NBU0UgMTYKKyNkZWZpbmUgVEFfTU9ESUZJRUQgMzIKKyNkZWZpbmUgVEFfQVNOMSA2NAorCitzdHJ1Y3QgdGFibGVfY29sIHsKKwljaGFyICp0Y19uYW1lOworCXVpbnQzMl90IHRjX2ZsYWdzOworCXVpbnQzMl90IHRjX3JpZ2h0czsKK307Cit0eXBlZGVmIHN0cnVjdCB0YWJsZV9jb2wgdGFibGVfY29sOworCitzdHJ1Y3QgdGFibGVfb2JqIHsKKwljaGFyICp0YV90eXBlOworCWludCB0YV9tYXhjb2w7CisJdV9jaGFyIHRhX3NlcDsKKwlzdHJ1Y3QgeworCQl1X2ludCB0YV9jb2xzX2xlbjsKKwkJdGFibGVfY29sICp0YV9jb2xzX3ZhbDsKKwl9IHRhX2NvbHM7CisJY2hhciAqdGFfcGF0aDsKK307Cit0eXBlZGVmIHN0cnVjdCB0YWJsZV9vYmogdGFibGVfb2JqOworCitzdHJ1Y3Qgb2JqZGF0YSB7CisJem90eXBlcyB6b190eXBlOworCXVuaW9uIHsKKwkJc3RydWN0IGRpcmVjdG9yeV9vYmogZGlfZGF0YTsKKwkJc3RydWN0IGdyb3VwX29iaiBncl9kYXRhOworCQlzdHJ1Y3QgdGFibGVfb2JqIHRhX2RhdGE7CisJCXN0cnVjdCBlbnRyeV9vYmogZW5fZGF0YTsKKwkJc3RydWN0IGxpbmtfb2JqIGxpX2RhdGE7CisJCXN0cnVjdCB7CisJCQl1X2ludCBwb19kYXRhX2xlbjsKKwkJCWNoYXIgKnBvX2RhdGFfdmFsOworCQl9IHBvX2RhdGE7CisJfSBvYmpkYXRhX3U7Cit9OwordHlwZWRlZiBzdHJ1Y3Qgb2JqZGF0YSBvYmpkYXRhOworCitzdHJ1Y3QgbmlzX29pZCB7CisJdWludDMyX3QgY3RpbWU7CisJdWludDMyX3QgbXRpbWU7Cit9OwordHlwZWRlZiBzdHJ1Y3QgbmlzX29pZCBuaXNfb2lkOworCitzdHJ1Y3QgbmlzX29iamVjdCB7CisJbmlzX29pZCB6b19vaWQ7CisJbmlzX25hbWUgem9fbmFtZTsKKwluaXNfbmFtZSB6b19vd25lcjsKKwluaXNfbmFtZSB6b19ncm91cDsKKwluaXNfbmFtZSB6b19kb21haW47CisJdWludDMyX3Qgem9fYWNjZXNzOworCXVpbnQzMl90IHpvX3R0bDsKKwlvYmpkYXRhIHpvX2RhdGE7Cit9OwordHlwZWRlZiBzdHJ1Y3QgbmlzX29iamVjdCBuaXNfb2JqZWN0OworCisjZW5kaWYgLyogaWYgX19uaXNfb2JqZWN0X2ggKi8KKworZW51bSBuaXNfZXJyb3IgeworCU5JU19TVUNDRVNTID0gMCwKKwlOSVNfU19TVUNDRVNTID0gMSwKKwlOSVNfTk9URk9VTkQgPSAyLAorCU5JU19TX05PVEZPVU5EID0gMywKKwlOSVNfQ0FDSEVFWFBJUkVEID0gNCwKKwlOSVNfTkFNRVVOUkVBQ0hBQkxFID0gNSwKKwlOSVNfVU5LTk9XTk9CSiA9IDYsCisJTklTX1RSWUFHQUlOID0gNywKKwlOSVNfU1lTVEVNRVJST1IgPSA4LAorCU5JU19DSEFJTkJST0tFTiA9IDksCisJTklTX1BFUk1JU1NJT04gPSAxMCwKKwlOSVNfTk9UT1dORVIgPSAxMSwKKwlOSVNfTk9UX01FID0gMTIsCisJTklTX05PTUVNT1JZID0gMTMsCisJTklTX05BTUVFWElTVFMgPSAxNCwKKwlOSVNfTk9UTUFTVEVSID0gMTUsCisJTklTX0lOVkFMSURPQkogPSAxNiwKKwlOSVNfQkFETkFNRSA9IDE3LAorCU5JU19OT0NBTExCQUNLID0gMTgsCisJTklTX0NCUkVTVUxUUyA9IDE5LAorCU5JU19OT1NVQ0hOQU1FID0gMjAsCisJTklTX05PVFVOSVFVRSA9IDIxLAorCU5JU19JQk1PREVSUk9SID0gMjIsCisJTklTX05PU1VDSFRBQkxFID0gMjMsCisJTklTX1RZUEVNSVNNQVRDSCA9IDI0LAorCU5JU19MSU5LTkFNRUVSUk9SID0gMjUsCisJTklTX1BBUlRJQUwgPSAyNiwKKwlOSVNfVE9PTUFOWUFUVFJTID0gMjcsCisJTklTX1JQQ0VSUk9SID0gMjgsCisJTklTX0JBREFUVFJJQlVURSA9IDI5LAorCU5JU19OT1RTRUFSQ0hBQkxFID0gMzAsCisJTklTX0NCRVJST1IgPSAzMSwKKwlOSVNfRk9SRUlHTk5TID0gMzIsCisJTklTX0JBRE9CSkVDVCA9IDMzLAorCU5JU19OT1RTQU1FT0JKID0gMzQsCisJTklTX01PREZBSUwgPSAzNSwKKwlOSVNfQkFEUkVRVUVTVCA9IDM2LAorCU5JU19OT1RFTVBUWSA9IDM3LAorCU5JU19DT0xEU1RBUlRfRVJSID0gMzgsCisJTklTX1JFU1lOQyA9IDM5LAorCU5JU19GQUlMID0gNDAsCisJTklTX1VOQVZBSUwgPSA0MSwKKwlOSVNfUkVTMkJJRyA9IDQyLAorCU5JU19TUlZBVVRIID0gNDMsCisJTklTX0NMTlRBVVRIID0gNDQsCisJTklTX05PRklMRVNQQUNFID0gNDUsCisJTklTX05PUFJPQyA9IDQ2LAorCU5JU19EVU1QTEFURVIgPSA0NywKK307Cit0eXBlZGVmIGVudW0gbmlzX2Vycm9yIG5pc19lcnJvcjsKKworc3RydWN0IG5pc19yZXN1bHQgeworCW5pc19lcnJvciBzdGF0dXM7CisJc3RydWN0IHsKKwkJdV9pbnQgb2JqZWN0c19sZW47CisJCW5pc19vYmplY3QgKm9iamVjdHNfdmFsOworCX0gb2JqZWN0czsKKwluZXRvYmogY29va2llOworCXVpbnQzMl90IHp0aWNrczsKKwl1aW50MzJfdCBkdGlja3M7CisJdWludDMyX3QgYXRpY2tzOworCXVpbnQzMl90IGN0aWNrczsKK307Cit0eXBlZGVmIHN0cnVjdCBuaXNfcmVzdWx0IG5pc19yZXN1bHQ7CisKK3N0cnVjdCBuc19yZXF1ZXN0IHsKKwluaXNfbmFtZSBuc19uYW1lOworCXN0cnVjdCB7CisJCXVfaW50IG5zX29iamVjdF9sZW47CisJCW5pc19vYmplY3QgKm5zX29iamVjdF92YWw7CisJfSBuc19vYmplY3Q7Cit9OwordHlwZWRlZiBzdHJ1Y3QgbnNfcmVxdWVzdCBuc19yZXF1ZXN0OworCitzdHJ1Y3QgaWJfcmVxdWVzdCB7CisJbmlzX25hbWUgaWJyX25hbWU7CisJc3RydWN0IHsKKwkJdV9pbnQgaWJyX3NyY2hfbGVuOworCQluaXNfYXR0ciAqaWJyX3NyY2hfdmFsOworCX0gaWJyX3NyY2g7CisJdWludDMyX3QgaWJyX2ZsYWdzOworCXN0cnVjdCB7CisJCXVfaW50IGlicl9vYmpfbGVuOworCQluaXNfb2JqZWN0ICppYnJfb2JqX3ZhbDsKKwl9IGlicl9vYmo7CisJc3RydWN0IHsKKwkJdV9pbnQgaWJyX2NiaG9zdF9sZW47CisJCW5pc19zZXJ2ZXIgKmlicl9jYmhvc3RfdmFsOworCX0gaWJyX2NiaG9zdDsKKwl1X2ludCBpYnJfYnVmc2l6ZTsKKwluZXRvYmogaWJyX2Nvb2tpZTsKK307Cit0eXBlZGVmIHN0cnVjdCBpYl9yZXF1ZXN0IGliX3JlcXVlc3Q7CisKK3N0cnVjdCBwaW5nX2FyZ3MgeworCW5pc19uYW1lIGRpcjsKKwl1aW50MzJfdCBzdGFtcDsKK307Cit0eXBlZGVmIHN0cnVjdCBwaW5nX2FyZ3MgcGluZ19hcmdzOworCitlbnVtIGxvZ19lbnRyeV90IHsKKwlMT0dfTk9QID0gMCwKKwlBRERfTkFNRSA9IDEsCisJUkVNX05BTUUgPSAyLAorCU1PRF9OQU1FX09MRCA9IDMsCisJTU9EX05BTUVfTkVXID0gNCwKKwlBRERfSUJBU0UgPSA1LAorCVJFTV9JQkFTRSA9IDYsCisJTU9EX0lCQVNFID0gNywKKwlVUERfU1RBTVAgPSA4LAorfTsKK3R5cGVkZWYgZW51bSBsb2dfZW50cnlfdCBsb2dfZW50cnlfdDsKKworc3RydWN0IGxvZ19lbnRyeSB7CisJdWludDMyX3QgbGVfdGltZTsKKwlsb2dfZW50cnlfdCBsZV90eXBlOworCW5pc19uYW1lIGxlX3ByaW5jcDsKKwluaXNfbmFtZSBsZV9uYW1lOworCXN0cnVjdCB7CisJCXVfaW50IGxlX2F0dHJzX2xlbjsKKwkJbmlzX2F0dHIgKmxlX2F0dHJzX3ZhbDsKKwl9IGxlX2F0dHJzOworCW5pc19vYmplY3QgbGVfb2JqZWN0OworfTsKK3R5cGVkZWYgc3RydWN0IGxvZ19lbnRyeSBsb2dfZW50cnk7CisKK3N0cnVjdCBsb2dfcmVzdWx0IHsKKwluaXNfZXJyb3IgbHJfc3RhdHVzOworCW5ldG9iaiBscl9jb29raWU7CisJc3RydWN0IHsKKwkJdV9pbnQgbHJfZW50cmllc19sZW47CisJCWxvZ19lbnRyeSAqbHJfZW50cmllc192YWw7CisJfSBscl9lbnRyaWVzOworfTsKK3R5cGVkZWYgc3RydWN0IGxvZ19yZXN1bHQgbG9nX3Jlc3VsdDsKKworc3RydWN0IGNwX3Jlc3VsdCB7CisJbmlzX2Vycm9yIGNwX3N0YXR1czsKKwl1aW50MzJfdCBjcF96dGlja3M7CisJdWludDMyX3QgY3BfZHRpY2tzOworfTsKK3R5cGVkZWYgc3RydWN0IGNwX3Jlc3VsdCBjcF9yZXN1bHQ7CisKK3N0cnVjdCBuaXNfdGFnIHsKKwl1aW50MzJfdCB0YWdfdHlwZTsKKwljaGFyICp0YWdfdmFsOworfTsKK3R5cGVkZWYgc3RydWN0IG5pc190YWcgbmlzX3RhZzsKKworc3RydWN0IG5pc190YWdsaXN0IHsKKwlzdHJ1Y3QgeworCQl1X2ludCB0YWdzX2xlbjsKKwkJbmlzX3RhZyAqdGFnc192YWw7CisJfSB0YWdzOworfTsKK3R5cGVkZWYgc3RydWN0IG5pc190YWdsaXN0IG5pc190YWdsaXN0OworCitzdHJ1Y3QgZHVtcF9hcmdzIHsKKwluaXNfbmFtZSBkYV9kaXI7CisJdWludDMyX3QgZGFfdGltZTsKKwlzdHJ1Y3QgeworCQl1X2ludCBkYV9jYmhvc3RfbGVuOworCQluaXNfc2VydmVyICpkYV9jYmhvc3RfdmFsOworCX0gZGFfY2Job3N0OworfTsKK3R5cGVkZWYgc3RydWN0IGR1bXBfYXJncyBkdW1wX2FyZ3M7CisKK3N0cnVjdCBmZF9hcmdzIHsKKwluaXNfbmFtZSBkaXJfbmFtZTsKKwluaXNfbmFtZSByZXF1ZXN0ZXI7Cit9OwordHlwZWRlZiBzdHJ1Y3QgZmRfYXJncyBmZF9hcmdzOworCitzdHJ1Y3QgZmRfcmVzdWx0IHsKKwluaXNfZXJyb3Igc3RhdHVzOworCW5pc19uYW1lIHNvdXJjZTsKKwlzdHJ1Y3QgeworCQl1X2ludCBkaXJfZGF0YV9sZW47CisJCWNoYXIgKmRpcl9kYXRhX3ZhbDsKKwl9IGRpcl9kYXRhOworCXN0cnVjdCB7CisJCXVfaW50IHNpZ25hdHVyZV9sZW47CisJCWNoYXIgKnNpZ25hdHVyZV92YWw7CisJfSBzaWduYXR1cmU7Cit9OwordHlwZWRlZiBzdHJ1Y3QgZmRfcmVzdWx0IGZkX3Jlc3VsdDsKKworLyogR2VuZXJpYyBjbGllbnQgY3JlYXRpbmcgZmxhZ3MgKi8KKyNkZWZpbmUgWk1IX1ZDCQkxCisjZGVmaW5lIFpNSF9ERwkJMgorI2RlZmluZSBaTUhfQVVUSAk0CisKKy8qIFRlc3RpbmcgQWNjZXNzIHJpZ2h0cyBmb3Igb2JqZWN0cyAqLworCisjZGVmaW5lIE5JU19SRUFEX0FDQwkJMQorI2RlZmluZSBOSVNfTU9ESUZZX0FDQwkJMgorI2RlZmluZSBOSVNfQ1JFQVRFX0FDQwkJNAorI2RlZmluZSBOSVNfREVTVFJPWV9BQ0MJOAorLyogVGVzdCBtYWNyb3MuIGEgPT0gYWNjZXNzIHJpZ2h0cywgbSA9PSBkZXNpcmVkIHJpZ2h0cy4gKi8KKyNkZWZpbmUgTklTX1dPUkxEKGEsIG0pICAgICAgICAoKChhKSAmIChtKSkgIT0gMCkKKyNkZWZpbmUgTklTX0dST1VQKGEsIG0pICAgICAgICAoKChhKSAmICgobSkgPDwgOCkpICE9IDApCisjZGVmaW5lIE5JU19PV05FUihhLCBtKSAgICAgICAgKCgoYSkgJiAoKG0pIDw8IDE2KSkgIT0gMCkKKyNkZWZpbmUgTklTX05PQk9EWShhLCBtKSAgICAgICAoKChhKSAmICgobSkgPDwgMjQpKSAhPSAwKQorLyoKKyAqIEVPTCBBbGVydCAtIFRoZSBmb2xsb3dpbmcgbm9uLXByZWZpeGVkIHRlc3QgbWFjcm9zIGFyZQorICogaGVyZSBmb3IgYmFja3dhcmQgY29tcGF0YWJpbGl0eSwgYW5kIHdpbGwgYmUgbm90IGJlIHByZXNlbnQKKyAqIGluIGZ1dHVyZSByZWxlYXNlcyAtIHVzZSB0aGUgTklTXyooKSBtYWNyb3MgYWJvdmUuCisgKi8KKyNkZWZpbmUgV09STEQoYSwgbSkJKCgoYSkgJiAobSkpICE9IDApCisjZGVmaW5lIEdST1VQKGEsIG0pCSgoKGEpICYgKChtKSA8PCA4KSkgIT0gMCkKKyNkZWZpbmUgT1dORVIoYSwgbSkJKCgoYSkgJiAoKG0pIDw8IDE2KSkgIT0gMCkKKyNkZWZpbmUgTk9CT0RZKGEsIG0pCSgoKGEpICYgKChtKSA8PCAyNCkpICE9IDApCisKKyNkZWZpbmUgT0FUWVBFKGQsIG4pICgoKGQpLT5kb19hcm1hc2suZG9fYXJtYXNrX3ZhbCtuKS0+b2Ffb3R5cGUpCisjZGVmaW5lIE9BUklHSFRTKGQsIG4pICgoKGQpLT5kb19hcm1hc2suZG9fYXJtYXNrX3ZhbCtuKS0+b2FfcmlnaHRzKQorI2RlZmluZSBXT1JMRF9ERUZBVUxUIChOSVNfUkVBRF9BQ0MpCisjZGVmaW5lIEdST1VQX0RFRkFVTFQgKE5JU19SRUFEX0FDQyA8PCA4KQorI2RlZmluZSBPV05FUl9ERUZBVUxUICgoTklTX1JFQURfQUNDICsgTklTX01PRElGWV9BQ0MgKyBOSVNfQ1JFQVRFX0FDQyArXAorCQkJTklTX0RFU1RST1lfQUNDKSA8PCAxNikKKyNkZWZpbmUgREVGQVVMVF9SSUdIVFMgKFdPUkxEX0RFRkFVTFQgfCBHUk9VUF9ERUZBVUxUIHwgT1dORVJfREVGQVVMVCkKKworLyogUmVzdWx0IG1hbmlwdWxhdGlvbiBkZWZpbmVzIC4uLiAqLworI2RlZmluZSBOSVNfUkVTX05VTU9CSih4KQkoKHgpLT5vYmplY3RzLm9iamVjdHNfbGVuKQorI2RlZmluZSBOSVNfUkVTX09CSkVDVCh4KQkoKHgpLT5vYmplY3RzLm9iamVjdHNfdmFsKQorI2RlZmluZSBOSVNfUkVTX0NPT0tJRSh4KQkoKHgpLT5jb29raWUpCisjZGVmaW5lIE5JU19SRVNfU1RBVFVTKHgpCSgoeCktPnN0YXR1cykKKworLyogVGhlc2UgZGVmaW5lcyBtYWtlIGdldHRpbmcgYXQgdGhlIHZhcmlhbnQgcGFydCBvZiB0aGUgb2JqZWN0IGVhc2llci4gKi8KKyNkZWZpbmUgVEFfZGF0YSB6b19kYXRhLm9iamRhdGFfdS50YV9kYXRhCisjZGVmaW5lIEVOX2RhdGEgem9fZGF0YS5vYmpkYXRhX3UuZW5fZGF0YQorI2RlZmluZSBESV9kYXRhIHpvX2RhdGEub2JqZGF0YV91LmRpX2RhdGEKKyNkZWZpbmUgTElfZGF0YSB6b19kYXRhLm9iamRhdGFfdS5saV9kYXRhCisjZGVmaW5lIEdSX2RhdGEgem9fZGF0YS5vYmpkYXRhX3UuZ3JfZGF0YQorCisjZGVmaW5lIF9fdHlwZV9vZihvKSAoKG8pLT56b19kYXRhLnpvX3R5cGUpCisKKy8qIERlY2xhcmF0aW9ucyBmb3IgdGhlIGludGVybmFsIHN1YnJvdXRpbmVzIGluIG5pc2xpYi5jICovCitlbnVtIG5hbWVfcG9zIHtTQU1FX05BTUUsIEhJR0hFUl9OQU1FLCBMT1dFUl9OQU1FLCBOT1RfU0VRVUVOVElBTCwgQkFEX05BTUV9OwordHlwZWRlZiBlbnVtIG5hbWVfcG9zIG5hbWVfcG9zOworCisvKgorICogRGVmaW5lcyBmb3IgZ2V0dGluZyBhdCBjb2x1bW4gZGF0YSBpbiBlbnRyeSBvYmplY3RzLiBCZWNhdXNlIFJQQ0dFTgorICogZ2VuZXJhdGVzIHNvbWUgcmF0aGVyIHdvcmR5IHN0cnVjdHVyZXMsIHdlIGNyZWF0ZSBzb21lIGRlZmluZXMgdGhhdAorICogY29sbGFwc2UgdGhlIG5lZWRlZCBrZXlzdHJva2VzIHRvIGFjY2VzcyBhIHBhcnRpY3VsYXIgdmFsdWUgdXNpbmcKKyAqIHRoZXNlIGRlZmluaXRpb25zIHRoZXkgdGFrZSBhbiBuaXNfb2JqZWN0ICosIGFuZCBhbiBpbnQgYW5kIHJldHVybgorICogYSB1X2NoYXIgKiBmb3IgVmFsdWUsIGFuZCBhbiBpbnQgZm9yIGxlbmd0aC4KKyAqLworI2RlZmluZSBFTlRSWV9WQUwob2JqLCBjb2wpIChvYmopLT5FTl9kYXRhLmVuX2NvbHMuZW5fY29sc192YWxbY29sXS5lY192YWx1ZS5lY192YWx1ZV92YWwKKyNkZWZpbmUgRU5UUllfTEVOKG9iaiwgY29sKSAob2JqKS0+RU5fZGF0YS5lbl9jb2xzLmVuX2NvbHNfdmFsW2NvbF0uZWNfdmFsdWUuZWNfdmFsdWVfbGVuCisKKworLyogUHJvdG90eXBlcywgYW5kIGV4dGVybiBkZWNsYXJhdGlvbnMgZm9yIHRoZSBOSVMgbGlicmFyeSBmdW5jdGlvbnMuICovCisjaW5jbHVkZSA8cnBjc3ZjL25pc2xpYi5oPgorI2VuZGlmCisKKy8qCisgKiBuaXNfMy5oCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIHRoYXQgYXJlIG9ubHkgb2YgaW50ZXJlc3QgdG8gdGhlIGFjdHVhbAorICogc2VydmljZSBkYWVtb24gYW5kIGNsaWVudCBzdHVicy4gTm9ybWFsIHVzZXJzIG9mIE5JUyB3aWxsIG5vdCBpbmNsdWRlCisgKiB0aGlzIGZpbGUuCisgKgorICogTk9URSA6IFRoaXMgaW5jbHVkZSBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSBhIGNvbWJpbmF0aW9uCisgKiBvZiBycGNnZW4gYW5kIHNlZC4gRE8gTk9UIEVESVQgSVQsIGNoYW5nZSB0aGUgbmlzLnggZmlsZSBpbnN0ZWFkCisgKiBhbmQgdGhlbiByZW1ha2UgdGhpcyBmaWxlLgorICovCisjaWZuZGVmIF9fbmlzXzNfaAorI2RlZmluZSBfX25pc18zX2gKKworI2RlZmluZSBOSVNfUFJPRyAxMDAzMDAKKyNkZWZpbmUgTklTX1ZFUlNJT04gMworCisjZGVmaW5lIE5JU19MT09LVVAgMQorZXh0ZXJuICBuaXNfcmVzdWx0ICogbmlzX2xvb2t1cF8zIChuc19yZXF1ZXN0ICosIENMSUVOVCAqKSBfX1RIUk9XOworZXh0ZXJuICBuaXNfcmVzdWx0ICogbmlzX2xvb2t1cF8zX3N2YyAobnNfcmVxdWVzdCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKSBfX1RIUk9XOworI2RlZmluZSBOSVNfQUREIDIKK2V4dGVybiAgbmlzX3Jlc3VsdCAqIG5pc19hZGRfMyAobnNfcmVxdWVzdCAqLCBDTElFTlQgKikgX19USFJPVzsKK2V4dGVybiAgbmlzX3Jlc3VsdCAqIG5pc19hZGRfM19zdmMgKG5zX3JlcXVlc3QgKiwgc3RydWN0IHN2Y19yZXEgKikgX19USFJPVzsKKyNkZWZpbmUgTklTX01PRElGWSAzCitleHRlcm4gIG5pc19yZXN1bHQgKiBuaXNfbW9kaWZ5XzMgKG5zX3JlcXVlc3QgKiwgQ0xJRU5UICopIF9fVEhST1c7CitleHRlcm4gIG5pc19yZXN1bHQgKiBuaXNfbW9kaWZ5XzNfc3ZjIChuc19yZXF1ZXN0ICosIHN0cnVjdCBzdmNfcmVxICopIF9fVEhST1c7CisjZGVmaW5lIE5JU19SRU1PVkUgNAorZXh0ZXJuICBuaXNfcmVzdWx0ICogbmlzX3JlbW92ZV8zIChuc19yZXF1ZXN0ICosIENMSUVOVCAqKSBfX1RIUk9XOworZXh0ZXJuICBuaXNfcmVzdWx0ICogbmlzX3JlbW92ZV8zX3N2YyAobnNfcmVxdWVzdCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKSBfX1RIUk9XOworI2RlZmluZSBOSVNfSUJMSVNUIDUKK2V4dGVybiAgbmlzX3Jlc3VsdCAqIG5pc19pYmxpc3RfMyAoaWJfcmVxdWVzdCAqLCBDTElFTlQgKikgX19USFJPVzsKK2V4dGVybiAgbmlzX3Jlc3VsdCAqIG5pc19pYmxpc3RfM19zdmMgKGliX3JlcXVlc3QgKiwgc3RydWN0IHN2Y19yZXEgKikgX19USFJPVzsKKyNkZWZpbmUgTklTX0lCQUREIDYKK2V4dGVybiAgbmlzX3Jlc3VsdCAqIG5pc19pYmFkZF8zIChpYl9yZXF1ZXN0ICosIENMSUVOVCAqKSBfX1RIUk9XOworZXh0ZXJuICBuaXNfcmVzdWx0ICogbmlzX2liYWRkXzNfc3ZjIChpYl9yZXF1ZXN0ICosIHN0cnVjdCBzdmNfcmVxICopIF9fVEhST1c7CisjZGVmaW5lIE5JU19JQk1PRElGWSA3CitleHRlcm4gIG5pc19yZXN1bHQgKiBuaXNfaWJtb2RpZnlfMyAoaWJfcmVxdWVzdCAqLCBDTElFTlQgKikgX19USFJPVzsKK2V4dGVybiAgbmlzX3Jlc3VsdCAqIG5pc19pYm1vZGlmeV8zX3N2YyAoaWJfcmVxdWVzdCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKQorICAgICBfX1RIUk9XOworI2RlZmluZSBOSVNfSUJSRU1PVkUgOAorZXh0ZXJuICBuaXNfcmVzdWx0ICogbmlzX2licmVtb3ZlXzMgKGliX3JlcXVlc3QgKiwgQ0xJRU5UICopIF9fVEhST1c7CitleHRlcm4gIG5pc19yZXN1bHQgKiBuaXNfaWJyZW1vdmVfM19zdmMgKGliX3JlcXVlc3QgKiwgc3RydWN0IHN2Y19yZXEgKikKKyAgICAgX19USFJPVzsKKyNkZWZpbmUgTklTX0lCRklSU1QgOQorZXh0ZXJuICBuaXNfcmVzdWx0ICogbmlzX2liZmlyc3RfMyAoaWJfcmVxdWVzdCAqLCBDTElFTlQgKikgX19USFJPVzsKK2V4dGVybiAgbmlzX3Jlc3VsdCAqIG5pc19pYmZpcnN0XzNfc3ZjIChpYl9yZXF1ZXN0ICosIHN0cnVjdCBzdmNfcmVxICopCisgICAgIF9fVEhST1c7CisjZGVmaW5lIE5JU19JQk5FWFQgMTAKK2V4dGVybiAgbmlzX3Jlc3VsdCAqIG5pc19pYm5leHRfMyAoaWJfcmVxdWVzdCAqLCBDTElFTlQgKikgX19USFJPVzsKK2V4dGVybiAgbmlzX3Jlc3VsdCAqIG5pc19pYm5leHRfM19zdmMgKGliX3JlcXVlc3QgKiwgc3RydWN0IHN2Y19yZXEgKikgX19USFJPVzsKKyNkZWZpbmUgTklTX0ZJTkRESVJFQ1RPUlkgMTIKK2V4dGVybiAgZmRfcmVzdWx0ICogbmlzX2ZpbmRkaXJlY3RvcnlfMyAoZmRfYXJncyAqLCBDTElFTlQgKikgX19USFJPVzsKK2V4dGVybiAgZmRfcmVzdWx0ICogbmlzX2ZpbmRkaXJlY3RvcnlfM19zdmMgKGZkX2FyZ3MgKiwKKwkJCQkJICAgICBzdHJ1Y3Qgc3ZjX3JlcSAqKSBfX1RIUk9XOworI2RlZmluZSBOSVNfU1RBVFVTIDE0CitleHRlcm4gIG5pc190YWdsaXN0ICogbmlzX3N0YXR1c18zIChuaXNfdGFnbGlzdCAqLCBDTElFTlQgKikgX19USFJPVzsKK2V4dGVybiAgbmlzX3RhZ2xpc3QgKiBuaXNfc3RhdHVzXzNfc3ZjIChuaXNfdGFnbGlzdCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKQorICAgICBfX1RIUk9XOworI2RlZmluZSBOSVNfRFVNUExPRyAxNQorZXh0ZXJuICBsb2dfcmVzdWx0ICogbmlzX2R1bXBsb2dfMyAoZHVtcF9hcmdzICosIENMSUVOVCAqKSBfX1RIUk9XOworZXh0ZXJuICBsb2dfcmVzdWx0ICogbmlzX2R1bXBsb2dfM19zdmMgKGR1bXBfYXJncyAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKSBfX1RIUk9XOworI2RlZmluZSBOSVNfRFVNUCAxNgorZXh0ZXJuICBsb2dfcmVzdWx0ICogbmlzX2R1bXBfMyAoZHVtcF9hcmdzICosIENMSUVOVCAqKSBfX1RIUk9XOworZXh0ZXJuICBsb2dfcmVzdWx0ICogbmlzX2R1bXBfM19zdmMgKGR1bXBfYXJncyAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKSBfX1RIUk9XOworI2RlZmluZSBOSVNfQ0FMTEJBQ0sgMTcKK2V4dGVybiAgYm9vbF90ICogbmlzX2NhbGxiYWNrXzMgKG5ldG9iaiAqLCBDTElFTlQgKikgX19USFJPVzsKK2V4dGVybiAgYm9vbF90ICogbmlzX2NhbGxiYWNrXzNfc3ZjIChuZXRvYmogKiwgc3RydWN0IHN2Y19yZXEgKikgX19USFJPVzsKKyNkZWZpbmUgTklTX0NQVElNRSAxOAorZXh0ZXJuICB1aW50MzJfdCAqIG5pc19jcHRpbWVfMyAobmlzX25hbWUgKiwgQ0xJRU5UICopIF9fVEhST1c7CitleHRlcm4gIHVpbnQzMl90ICogbmlzX2NwdGltZV8zX3N2YyAobmlzX25hbWUgKiwgc3RydWN0IHN2Y19yZXEgKikgX19USFJPVzsKKyNkZWZpbmUgTklTX0NIRUNLUE9JTlQgMTkKK2V4dGVybiAgY3BfcmVzdWx0ICogbmlzX2NoZWNrcG9pbnRfMyAobmlzX25hbWUgKiwgQ0xJRU5UICopIF9fVEhST1c7CitleHRlcm4gIGNwX3Jlc3VsdCAqIG5pc19jaGVja3BvaW50XzNfc3ZjIChuaXNfbmFtZSAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKQorICAgICBfX1RIUk9XOworI2RlZmluZSBOSVNfUElORyAyMAorZXh0ZXJuICB2b2lkICogbmlzX3BpbmdfMyAocGluZ19hcmdzICosIENMSUVOVCAqKSBfX1RIUk9XOworZXh0ZXJuICB2b2lkICogbmlzX3BpbmdfM19zdmMgKHBpbmdfYXJncyAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKSBfX1RIUk9XOworI2RlZmluZSBOSVNfU0VSVlNUQVRFIDIxCitleHRlcm4gIG5pc190YWdsaXN0ICogbmlzX3NlcnZzdGF0ZV8zIChuaXNfdGFnbGlzdCAqLCBDTElFTlQgKikgX19USFJPVzsKK2V4dGVybiAgbmlzX3RhZ2xpc3QgKiBuaXNfc2VydnN0YXRlXzNfc3ZjIChuaXNfdGFnbGlzdCAqLAorCQkJCQkgICBzdHJ1Y3Qgc3ZjX3JlcSAqKSBfX1RIUk9XOworI2RlZmluZSBOSVNfTUtESVIgMjIKK2V4dGVybiAgbmlzX2Vycm9yICogbmlzX21rZGlyXzMgKG5pc19uYW1lICosIENMSUVOVCAqKSBfX1RIUk9XOworZXh0ZXJuICBuaXNfZXJyb3IgKiBuaXNfbWtkaXJfM19zdmMgKG5pc19uYW1lICosIHN0cnVjdCBzdmNfcmVxICopIF9fVEhST1c7CisjZGVmaW5lIE5JU19STURJUiAyMworZXh0ZXJuICBuaXNfZXJyb3IgKiBuaXNfcm1kaXJfMyAobmlzX25hbWUgKiwgQ0xJRU5UICopIF9fVEhST1c7CitleHRlcm4gIG5pc19lcnJvciAqIG5pc19ybWRpcl8zX3N2YyAobmlzX25hbWUgKiwgc3RydWN0IHN2Y19yZXEgKikgX19USFJPVzsKKyNkZWZpbmUgTklTX1VQREtFWVMgMjQKK2V4dGVybiAgbmlzX2Vycm9yICogbmlzX3VwZGtleXNfMyAobmlzX25hbWUgKiwgQ0xJRU5UICopIF9fVEhST1c7CitleHRlcm4gIG5pc19lcnJvciAqIG5pc191cGRrZXlzXzNfc3ZjIChuaXNfbmFtZSAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKSBfX1RIUk9XOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogISBfUlBDU1ZDX05JU19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL25pcy54IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwY3N2Yy9uaXMueApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGRkYjA1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwY3N2Yy9uaXMueApAQCAtMCwwICsxLDQ3MyBAQAorJS8qCislICogU3VuIFJQQyBpcyBhIHByb2R1Y3Qgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBhbmQgaXMgcHJvdmlkZWQgZm9yCislICogdW5yZXN0cmljdGVkIHVzZSBwcm92aWRlZCB0aGF0IHRoaXMgbGVnZW5kIGlzIGluY2x1ZGVkIG9uIGFsbCB0YXBlCislICogbWVkaWEgYW5kIGFzIGEgcGFydCBvZiB0aGUgc29mdHdhcmUgcHJvZ3JhbSBpbiB3aG9sZSBvciBwYXJ0LiAgVXNlcnMKKyUgKiBtYXkgY29weSBvciBtb2RpZnkgU3VuIFJQQyB3aXRob3V0IGNoYXJnZSwgYnV0IGFyZSBub3QgYXV0aG9yaXplZAorJSAqIHRvIGxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBpdCB0byBhbnlvbmUgZWxzZSBleGNlcHQgYXMgcGFydCBvZiBhIHByb2R1Y3Qgb3IKKyUgKiBwcm9ncmFtIGRldmVsb3BlZCBieSB0aGUgdXNlciBvciB3aXRoIHRoZSBleHByZXNzIHdyaXR0ZW4gY29uc2VudCBvZgorJSAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyUgKgorJSAqIFNVTiBSUEMgSVMgUFJPVklERUQgQVMgSVMgV0lUSCBOTyBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIElOQ0xVRElORyBUSEUKKyUgKiBXQVJSQU5USUVTIE9GIERFU0lHTiwgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyUgKiBQVVJQT1NFLCBPUiBBUklTSU5HIEZST00gQSBDT1VSU0UgT0YgREVBTElORywgVVNBR0UgT1IgVFJBREUgUFJBQ1RJQ0UuCislICoKKyUgKiBTdW4gUlBDIGlzIHByb3ZpZGVkIHdpdGggbm8gc3VwcG9ydCBhbmQgd2l0aG91dCBhbnkgb2JsaWdhdGlvbiBvbiB0aGUKKyUgKiBwYXJ0IG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gdG8gYXNzaXN0IGluIGl0cyB1c2UsIGNvcnJlY3Rpb24sCislICogbW9kaWZpY2F0aW9uIG9yIGVuaGFuY2VtZW50LgorJSAqCislICogU1VOIE1JQ1JPU1lTVEVNUywgSU5DLiBTSEFMTCBIQVZFIE5PIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFCislICogSU5GUklOR0VNRU5UIE9GIENPUFlSSUdIVFMsIFRSQURFIFNFQ1JFVFMgT1IgQU5ZIFBBVEVOVFMgQlkgU1VOIFJQQworJSAqIE9SIEFOWSBQQVJUIFRIRVJFT0YuCislICoKKyUgKiBJbiBubyBldmVudCB3aWxsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYmUgbGlhYmxlIGZvciBhbnkgbG9zdCByZXZlbnVlCislICogb3IgcHJvZml0cyBvciBvdGhlciBzcGVjaWFsLCBpbmRpcmVjdCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBldmVuIGlmCislICogU3VuIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKyUgKgorJSAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyUgKiAyNTUwIEdhcmNpYSBBdmVudWUKKyUgKiBNb3VudGFpbiBWaWV3LCBDYWxpZm9ybmlhICA5NDA0MworJSAqLworCisjaWZkZWYgUlBDX0hEUgorJS8qCislICoJbmlzLmgKKyUgKgorJSAqCVRoaXMgZmlsZSBpcyB0aGUgbWFpbiBpbmNsdWRlIGZpbGUgZm9yIE5JUyBjbGllbnRzLiBJdCBjb250YWlucworJSAqCWJvdGggdGhlIGNsaWVudCBsaWJyYXJ5IGZ1bmN0aW9uIGRlZmluZXMgYW5kIHRoZSB2YXJpb3VzIGRhdGEKKyUgKiAJc3RydWN0dXJlcyB1c2VkIGJ5IHRoZSBOSVMgc2VydmljZS4gSXQgaW5jbHVkZXMgdGhlIGZpbGUgbmlzX3RhZ3MuaAorJSAqCXdoaWNoIGRlZmluZXMgdGhlIHRhZyB2YWx1ZXMuIFRoaXMgYWxsb3dzIHRoZSB0YWdzIHRvIGNoYW5nZSB3aXRob3V0CislICoJaGF2aW5nIHRvIGNoYW5nZSB0aGUgbmlzLnggZmlsZS4KKyUgKgorJSAqCU5PVEUgOiBETyBOT1QgRURJVCBUSElTIEZJTEUhIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdoZW4KKyUgKgkgICAgICAgcnBjZ2VuIGlzIHJ1biBvbiB0aGUgbmlzLnggZmlsZS4gTm90ZSB0aGF0IHRoZXJlIGlzIGEKKyUgKgkgICAgICAgc2ltcGxlIHNlZCBzY3JpcHQgdG8gcmVtb3ZlIHNvbWUgdW5uZWVkZWQgbGluZXMuIChTZWUgdGhlCislICoJICAgICAgIE1ha2VmaWxlIHRhcmdldCBuaXMuaCkKKyUgKgorJSAqLworJSNpbmNsdWRlIDxycGNzdmMvbmlzX3RhZ3MuaD4KKyNlbmRpZgorCisvKiBUaGlzIGdldHMgc3R1ZmZlZCBpbnRvIHRoZSBzb3VyY2UgZmlsZXMuICovCisjaWYgUlBDX0hEUgorJSNpbmNsdWRlIDxycGMveGRyLmg+CisjZW5kaWYKKworLyogSW5jbHVkZSB0aGUgUlBDIExhbmd1YWdlIGRlc2NyaXB0aW9uIG9mIE5JUyBvYmplY3RzICovCisjaW5jbHVkZSAibmlzX29iamVjdC54IgorCisvKiBFcnJvcnMgIHRoYXQgY2FuIGJlIHJldHVybmVkIGJ5IHRoZSBzZXJ2aWNlICovCitlbnVtIG5pc19lcnJvciB7CisJTklTX1NVQ0NFU1MgPSAwLAkvKiBBLW9rLCBsZXQncyByb2NrIG4gcm9sbCAJKi8KKwlOSVNfU19TVUNDRVNTID0gMSwJLyogTmFtZSBmb3VuZCAobWF5YmUpCSAgIAkqLworCU5JU19OT1RGT1VORCA9IDIsCS8qIE5hbWUgZGVmaW5pdGVseSBub3QgZm91bmQgCSovCisJTklTX1NfTk9URk9VTkQgPSAzLAkvKiBOYW1lIG1heWJlIG5vdCBmb3VuZCAJKi8KKwlOSVNfQ0FDSEVFWFBJUkVEID0gNCwJLyogTmFtZSBleGlzdHMgYnV0IGNhY2hlIG91dCBvZiBkYXRlICovCisJTklTX05BTUVVTlJFQUNIQUJMRSA9IDUsIC8qIENhbid0IGdldCB0aGVyZSBmcm9tIGhlcmUgKi8KKwlOSVNfVU5LTk9XTk9CSiA9IDYsCS8qIE9iamVjdCB0eXBlIGlzIGJvZ3VzICovCisJTklTX1RSWUFHQUlOID0gNywJLyogSSdtIGJ1c3ksIGNhbGwgYmFjayAqLworCU5JU19TWVNURU1FUlJPUiA9IDgsCS8qIEdlbmVyaWMgc3lzdGVtIGVycm9yICovCisJTklTX0NIQUlOQlJPS0VOID0gOSwJLyogRmlyc3QvTmV4dCB3YXJuaW5nICovCisJTklTX1BFUk1JU1NJT04gPSAxMCwJLyogTm90IGVub3VnaCBwZXJtaXNzaW9uIHRvIGFjY2VzcyAqLworCU5JU19OT1RPV05FUiA9IDExLAkvKiBZb3UgZG9uJ3Qgb3duIGl0LCBzb3JyeSAqLworCU5JU19OT1RfTUUgPSAxMiwJLyogSSBkb24ndCBzZXJ2ZSB0aGlzIG5hbWUgKi8KKwlOSVNfTk9NRU1PUlkgPSAxMywJLyogT3V0dGEgVk0hIEhlbHAhICovCisJTklTX05BTUVFWElTVFMgPSAxNCwJLyogQ2FuJ3QgY3JlYXRlIG92ZXIgYW5vdGhlciBuYW1lICovCisJTklTX05PVE1BU1RFUiA9IDE1LAkvKiBJJ20ganVzdGEgc2Vjb25kYXJheSwgZG9uJ3QgYXNrIG1lICovCisJTklTX0lOVkFMSURPQkogPSAxNiwJLyogT2JqZWN0IGlzIGJyb2tlbiBzb21laG93ICovCisJTklTX0JBRE5BTUUgPSAxNywJLyogVW5wYXJzYWJsZSBuYW1lICovCisJTklTX05PQ0FMTEJBQ0sgPSAxOCwJLyogQ291bGRuJ3QgdGFsayB0byBjYWxsIGJhY2sgcHJvYyAqLworCU5JU19DQlJFU1VMVFMgPSAxOSwJLyogUmVzdWx0cyBiZWluZyBjYWxsZWQgYmFjayB0byB5b3UgKi8KKwlOSVNfTk9TVUNITkFNRSA9IDIwLAkvKiBOYW1lIHVua25vd24gKi8KKwlOSVNfTk9UVU5JUVVFID0gMjEsCS8qIFZhbHVlIGlzIG5vdCB1bmlxdWVzIChlbnRyeSkgKi8KKwlOSVNfSUJNT0RFUlJPUiA9IDIyLAkvKiBJbmYuIEJhc2UuIE1vZGlmeSBlcnJvci4gKi8KKwlOSVNfTk9TVUNIVEFCTEUgPSAyMywJLyogTmFtZSBmb3IgdGFibGUgd2FzIHdyb25nICovCisJTklTX1RZUEVNSVNNQVRDSCA9IDI0LCAJLyogRW50cnkgYW5kIHRhYmxlIHR5cGUgbWlzbWF0Y2ggKi8KKwlOSVNfTElOS05BTUVFUlJPUiA9IDI1LAkvKiBMaW5rIHBvaW50cyB0byBib2d1cyBuYW1lICovCisJTklTX1BBUlRJQUwgPSAyNiwJLyogUGFydGlhbCBzdWNjZXNzLCBmb3VuZCB0YWJsZSAqLworCU5JU19UT09NQU5ZQVRUUlMgPSAyNywJLyogVG9vIG1hbnkgYXR0cmlidXRlcyAqLworCU5JU19SUENFUlJPUiA9IDI4LAkvKiBSUEMgZXJyb3IgZW5jb3VudGVyZWQgKi8KKwlOSVNfQkFEQVRUUklCVVRFID0gMjksCS8qIEJhZCBvciBpbnZhbGlkIGF0dHJpYnV0ZSAqLworCU5JU19OT1RTRUFSQ0hBQkxFID0gMzAsCS8qIE5vbi1zZWFyY2hhYmxlIG9iamVjdCBzZWFyY2hlZCAqLworCU5JU19DQkVSUk9SID0gMzEsCS8qIEVycm9yIGR1cmluZyBjYWxsYmFjayAoc3ZjIGNyYXNoKSAqLworCU5JU19GT1JFSUdOTlMgPSAzMiwJLyogRm9yZWlnbiBOYW1lc3BhY2UgKi8KKwlOSVNfQkFET0JKRUNUID0gMzMsCS8qIE1hbGZvcm1lZCBvYmplY3Qgc3RydWN0dXJlICovCisJTklTX05PVFNBTUVPQkogPSAzNCwJLyogT2JqZWN0IHN3YXBwZWQgZHVyaW5nIGRlbGV0aW9uICovCisJTklTX01PREZBSUwgPSAzNSwJLyogRmFpbHVyZSBkdXJpbmcgYSBNb2RpZnkuICovCisJTklTX0JBRFJFUVVFU1QgPSAzNiwJLyogSWxsZWdhbCBxdWVyeSBmb3IgdGFibGUgKi8KKwlOSVNfTk9URU1QVFkgPSAzNywJLyogQXR0ZW1wdCB0byByZW1vdmUgYSBub24tZW1wdHkgdGJsICovCisJTklTX0NPTERTVEFSVF9FUlIgPSAzOCwgLyogRXJyb3IgYWNjZXNpbmcgdGhlIGNvbGQgc3RhcnQgZmlsZSAqLworCU5JU19SRVNZTkMgPSAzOSwJLyogVHJhbnNhY3Rpb24gbG9nIHRvbyBmYXIgb3V0IG9mIGRhdGUgKi8KKwlOSVNfRkFJTCA9IDQwLAkJLyogTklTIG9wZXJhdGlvbiBmYWlsZWQuICovCisJTklTX1VOQVZBSUwgPSA0MSwJLyogTklTKyBzZXJ2aWNlIGlzIHVuYXZhaWxhYmxlIChjbGllbnQpICovCisJTklTX1JFUzJCSUcgPSA0MiwJLyogTklTKyByZXN1bHQgdG9vIGJpZyBmb3IgZGF0YWdyYW0gKi8KKwlOSVNfU1JWQVVUSCA9IDQzLAkvKiBOSVMrIHNlcnZlciB3YXNuJ3QgYXV0aGVudGljYXRlZC4gKi8KKwlOSVNfQ0xOVEFVVEggPSA0NCwJLyogTklTKyBDbGllbnQgd2Fzbid0IGF1dGhlbnRpY2F0ZWQuICovCisJTklTX05PRklMRVNQQUNFID0gNDUsCS8qIE5JUysgc2VydmVyIHJhbiBvdXQgb2YgZGlzayBzcGFjZSAqLworCU5JU19OT1BST0MgPSA0NiwJLyogTklTKyBzZXJ2ZXIgY291bGRuJ3QgY3JlYXRlIG5ldyBwcm9jICovCisJTklTX0RVTVBMQVRFUiA9IDQ3CS8qIE5JUysgc2VydmVyIGFscmVhZHkgaGFzIGR1bXAgY2hpbGQgKi8KK307CisKKworLyoKKyAqIFN0cnVjdHVyZSBkZWZpbml0aW9ucyBmb3IgdGhlIHBhcmFtZXRlcnMgYW5kIHJlc3VsdHMgb2YgdGhlIGFjdHVhbAorICogTklTIFJQQyBjYWxscy4KKyAqCisgKiBUaGlzIGlzIHRoZSBzdGFuZGFyZCByZXN1bHQgKGluIHRoZSBwcm90b2NvbCkgb2YgbW9zdCBvZiB0aGUgbmlzCisgKiByZXF1ZXN0cy4KKyAqLworCitzdHJ1Y3QgbmlzX3Jlc3VsdCB7CisJbmlzX2Vycm9yCXN0YXR1czsJCS8qIFN0YXR1cyBvZiB0aGUgcmVzcG9uc2UgKi8KKwluaXNfb2JqZWN0CW9iamVjdHM8PjsJLyogb2JqZWN0cyBmb3VuZCAJICAqLworCW5ldG9iagkJY29va2llOwkJLyogQ29va2llIERhdGEgCQkgICovCisJdWludDMyX3QJenRpY2tzOwkJLyogc2VydmVyIHRpY2tzCSAJICAqLworCXVpbnQzMl90CWR0aWNrczsJCS8qIERCTSB0aWNrcy4JCSAgKi8KKwl1aW50MzJfdAlhdGlja3M7CQkvKiBDYWNoZSAoYWNjZWwpIHRpY2tzCSAgKi8KKwl1aW50MzJfdAljdGlja3M7CQkvKiBDbGllbnQgdGlja3MJCSAgKi8KK307CisKKy8qCisgKiBBIE5hbWUgU2VydmljZSByZXF1ZXN0CisgKiBUaGlzIHJlcXVlc3QgaXMgdXNlZCB0byBhY2Nlc3MgdGhlIG5hbWUgc3BhY2UsIG5zX25hbWUgaXMgdGhlIG5hbWUKKyAqIG9mIHRoZSBvYmplY3Qgd2l0aGluIHRoZSBuYW1lc3BhY2UgYW5kIHRoZSBvYmplY3QgaXMgaXQncyB2YWx1ZSwgZm9yCisgKiBhZGQvbW9kaWZ5LCBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIGZvciByZW1vdmUuCisgKi8KKworc3RydWN0IG5zX3JlcXVlc3QgeworCW5pc19uYW1lCW5zX25hbWU7CS8qIE5hbWUgaW4gdGhlIE5JUyBuYW1lIHNwYWNlCSovCisJbmlzX29iamVjdAluc19vYmplY3Q8MT47CS8qIE9wdGlvbmFsIE9iamVjdCAoYWRkL3JlbW92ZSkJKi8KK307CisKKy8qCisgKiBBbiBpbmZvcm1hdGlvbiBiYXNlIHJlcXVlc3QKKyAqIFRoaXMgcmVxdWVzdCBpbmNsdWRlcyB0aGUgTklTIG5hbWUgb2YgdGhlIHRhYmxlIHdlIHdpc2ggdG8gc2VhcmNoLCB0aGUKKyAqIHNlYXJjaCBjcml0ZXJpYSBpbiB0aGUgZm9ybSBvZiBhdHRyaWJ1dGUvdmFsdWUgcGFpcnMgYW5kIGFuIG9wdGlvbmFsCisgKiBjYWxsYmFjayBwcm9ncmFtIG51bWJlci4gSWYgdGhlIGNhbGxiYWNrIHByb2dyYW0gbnVtYmVyIGlzIHByb3ZpZGVkCisgKiB0aGUgc2VydmVyIHdpbGwgc2VuZCBiYWNrIG9iamVjdHMgb25lIGF0IGEgdGltZSwgb3RoZXJ3aXNlIGl0IHdpbGwKKyAqIHJldHVybiB0aGVtIGFsbCBpbiB0aGUgcmVzcG9uc2UuCisgKi8KKworc3RydWN0IGliX3JlcXVlc3QgeworCW5pc19uYW1lICAJaWJyX25hbWU7CS8qIFRoZSBuYW1lIG9mIHRoZSBUYWJsZSAJKi8KKwluaXNfYXR0ciAgCWlicl9zcmNoPD47IAkvKiBUaGUgc2VhcmNoIGNyaXRlcmVpYSAJKi8KKwl1aW50MzJfdAlpYnJfZmxhZ3M7CS8qIE9wdGlvbmFsIGZsYWdzIAkJKi8KKwluaXNfb2JqZWN0CWlicl9vYmo8MT47CS8qIG9wdGlvbmFsIG9iamVjdCAoYWRkL21vZGlmeSkgKi8KKwluaXNfc2VydmVyCWlicl9jYmhvc3Q8MT47CS8qIE9wdGlvbmFsIGNhbGxiYWNrIGluZm8JKi8KKwl1X2ludAkJaWJyX2J1ZnNpemU7CS8qIE9wdGlvbmFsIGZpcnN0L25leHQgYnVmc2l6ZQkqLworCW5ldG9iagkJaWJyX2Nvb2tpZTsJLyogVGhlIGZpcnN0L25leHQgY29va2llCSovCit9OworCisvKgorICogVGhpcyBhcmd1bWVudCB0byB0aGUgUElORyBjYWxsIG5vdGlmaWVzIHRoZSByZXBsaWNhcyB0aGF0IHNvbWV0aGluZyBpbgorICogYSBkaXJlY3RvcnkgaGFzIGNoYW5nZWQgYW5kIHRoaXMgaXMgaXQncyB0aW1lc3RhbXAuIFRoZSByZXBsaWNhIHdpbGwgdXNlCisgKiB0aGUgdGltZXN0YW1wIHRvIGRldGVybWluZSBpZiBpdHMgcmVzeW5jIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4KKyAqLworc3RydWN0IHBpbmdfYXJncyB7CisJbmlzX25hbWUJZGlyOwkvKiBEaXJlY3RvcnkgdGhhdCBoYWQgdGhlIGNoYW5nZSAqLworCXVpbnQzMl90CXN0YW1wOwkvKiB0aW1lc3RhbXAgb2YgdGhlIHRyYW5zYWN0aW9uICAqLworfTsKKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgdHlwZSBvZiBlbnRyaWVzIHRoYXQgYXJlIHN0b3JlZCBpbiB0aGUgdHJhbnNhY3Rpb24gbG9nLAorICogbm90ZSB0aGF0IG1vZGlmaWNhdGlvbnMgd2lsbCBhcHBlYXIgYXMgdHdvIGVudHJpZXMsIGZvciBuYW1lcywgdGhleSBoYXZlCisgKiBhICJPTEQiIGVudHJ5IGZvbGxvd2VkIGJ5IGEgIk5FVyIgZW50cnkuIEZvciBlbnRyaWVzIGluIHRhYmxlcywgdGhlcmUKKyAqIGlzIGEgcmVtb3ZlIGZvbGxvd2VkIGJ5IGFuIGFkZC4gSXQgaXMgZG9uZSB0aGlzIHdheSBzbyB0aGF0IHdlIGNhbiByZWFkCisgKiB0aGUgbG9nIGJhY2t3YXJkcyB0byBiYWNrIG91dCB0cmFuc2FjdGlvbnMgYW5kIGZvcndhcmRzIHRvIHByb3BvZ2F0ZQorICogdXBkYXRlZC4KKyAqLworZW51bSBsb2dfZW50cnlfdCB7CisJTE9HX05PUCA9IDAsCisJQUREX05BTUUgPSAxLAkJLyogTmFtZSBBZGRlZCB0byBuYW1lIHNwYWNlIAkJICAqLworCVJFTV9OQU1FID0gMiwJCS8qIE5hbWUgcmVtb3ZlZCBmcm9tIG5hbWUgc3BhY2UgCSAgKi8KKwlNT0RfTkFNRV9PTEQgPSAzLAkvKiBOYW1lIHdhcyBtb2RpZmllZCBpbiB0aGUgbmFtZSBzcGFjZSAJICAqLworCU1PRF9OQU1FX05FVyA9IDQsCS8qIE5hbWUgd2FzIG1vZGlmaWVkIGluIHRoZSBuYW1lIHNwYWNlIAkgICovCisJQUREX0lCQVNFID0gNSwJCS8qIEVudHJ5IGFkZGVkIHRvIGluZm9ybWF0aW9uIGJhc2UgCSAgKi8KKwlSRU1fSUJBU0UgPSA2LAkJLyogRW50cnkgcmVtb3ZlZCBmcm9tIGluZm9ybWF0aW9uIGJhc2UgICAgKi8KKwlNT0RfSUJBU0UgPSA3LAkJLyogRW50cnkgd2FzIG1vZGlmaWVkIGluIGluZm9ybWF0aW9uIGJhc2UgKi8KKwlVUERfU1RBTVAgPSA4CQkvKiBVcGRhdGUgdGltZXN0YW1wICh1c2VkIGFzIGZlbmNlcG9zdHMpICAqLworfTsKKworLyoKKyAqIFRoaXMgcmVzdWx0IGlzIHJldHVybmVkIGZyb20gdGhlIG5hbWUgc2VydmljZSB3aGVuIGl0IGlzIHJlcXVlc3RlZCB0bworICogZHVtcCBsb2dnZWQgZW50cmllcyBmcm9tIGl0cyB0cmFuc2FjdGlvbiBsb2cuIEluZm9ybWF0aW9uIGJhc2UgdXBkYXRlcworICogd2lsbCBoYXZlIHRoZSBuYW1lIG9mIHRoZSBpbmZvcm1hdGlvbiBiYXNlIGluIHRoZSBsZV9uYW1lIGZpZWxkIGFuZAorICogYSBjYW5vbmljYWwgc2V0IG9mIGF0dHJpYnV0ZS92YWx1ZSBwYWlycyB0byBmdWxseSBzcGVjaWZ5IHRoZSBlbnRyeSdzCisgKiAnbmFtZScuCisgKi8KK3N0cnVjdCBsb2dfZW50cnkgeworCXVpbnQzMl90CWxlX3RpbWU7CS8qIFRpbWUgaW4gc2Vjb25kcyAJCSovCisJbG9nX2VudHJ5X3QJbGVfdHlwZTsJLyogVHlwZSBvZiBsb2cgZW50cnkgCQkqLworCW5pc19uYW1lCWxlX3ByaW5jcDsJLyogUHJpbmNpcGFsIG1ha2luZyB0aGUgY2hhbmdlCSovCisJbmlzX25hbWUJbGVfbmFtZTsJLyogTmFtZSBvZiB0YWJsZS9kaXIgaW52b2x2ZWQgCSovCisJbmlzX2F0dHIJbGVfYXR0cnM8PjsJLyogTGlzdCBvZiBBViBwYWlycy4JCSovCisJbmlzX29iamVjdAlsZV9vYmplY3Q7CS8qIEFjdHVhbCBvYmplY3QgdmFsdWUgCQkqLworfTsKKworc3RydWN0IGxvZ19yZXN1bHQgeworCW5pc19lcnJvciAJbHJfc3RhdHVzOwkvKiBUaGUgc3RhdHVzIGl0c2VsZiAJIAkqLworCW5ldG9iagkJbHJfY29va2llOwkvKiBVc2VkIGJ5IHRoZSBkdW1wIGNhbGxiYWNrCSovCisJbG9nX2VudHJ5CWxyX2VudHJpZXM8PjsJLyogemVybyBvciBtb3JlIGVudHJpZXMgCSovCit9OworCitzdHJ1Y3QgY3BfcmVzdWx0IHsKKwluaXNfZXJyb3IJY3Bfc3RhdHVzOwkvKiBTdGF0dXMgb2YgdGhlIGNoZWNrcG9pbnQgCSovCisJdWludDMyX3QJY3BfenRpY2tzOwkvKiBTZXJ2aWNlICd0aWNrcycgCSAgICAJKi8KKwl1aW50MzJfdAljcF9kdGlja3M7CS8qIERhdGFiYXNlICd0aWNrcycJICAgIAkqLworfTsKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgYSBnZW5lcmljIE5JUyB0YWcgbGlzdC4gVGhlIHRhZ2xpc3QgY29udGFpbnMKKyAqIHplcm8gb3IgdGFncywgZWFjaCBvZiB3aGljaCBpcyBhIHR5cGUgYW5kIGEgdmFsdWUuICh1X2ludCkuCisgKiBUaGVzZSBhcmUgdXNlZCB0byByZXBvcnQgc3RhdGlzdGljcyAoc2VlIHRhZyBkZWZpbml0aW9ucyBiZWxvdykKKyAqIGFuZCB0byBzZXQgb3IgcmVzZXQgc3RhdGUgdmFyaWFibGVzLgorICovCitzdHJ1Y3QgbmlzX3RhZyB7CisJdWludDMyX3QJdGFnX3R5cGU7CS8qIFN0YXRpc3RpYyB0YWcgKG1heSB2YXJ5KSAJICovCisJc3RyaW5nCQl0YWdfdmFsPD47CS8qIFN0YXRpc3RpYyB2YWx1ZSBtYXkgYWxzbyB2YXJ5ICovCit9OworCitzdHJ1Y3QgbmlzX3RhZ2xpc3QgeworCW5pc190YWcgdGFnczw+OwkJCS8qIExpc3Qgb2YgdGFncyAqLworfTsKKworc3RydWN0IGR1bXBfYXJncyB7CisJbmlzX25hbWUJZGFfZGlyOwkJLyogRGlyZWN0b3J5IHRvIGR1bXAgCSovCisJdWludDMyX3QJZGFfdGltZTsJLyogRnJvbSB0aGlzIHRpbWVzdGFtcAkqLworCW5pc19zZXJ2ZXIJZGFfY2Job3N0PDE+OwkvKiBDYWxsYmFjayB0byB1c2UuCSovCit9OworCitzdHJ1Y3QgZmRfYXJncyB7CisJbmlzX25hbWUJZGlyX25hbWU7ICAvKiBUaGUgZGlyZWN0b3J5IHdlJ3JlIGxvb2tpbmcgZm9yICovCisJbmlzX25hbWUJcmVxdWVzdGVyOyAvKiBIb3N0IHByaW5jaXBhbCBuYW1lIGZvciBzaWduYXR1cmUgKi8KK307CisKK3N0cnVjdCBmZF9yZXN1bHQgeworCW5pc19lcnJvcglzdGF0dXM7CQkvKiBTdGF0dXMgcmV0dXJuZWQgYnkgZnVuY3Rpb24JKi8KKwluaXNfbmFtZQlzb3VyY2U7CQkvKiBTb3VyY2Ugb2YgdGhpcyBhbnN3ZXIgICAJKi8KKwlvcGFxdWUJCWRpcl9kYXRhPD47CS8qIERpcmVjdG9yeSBEYXRhIChYRFInZWQpIAkqLworCW9wYXF1ZQkJc2lnbmF0dXJlPD47CS8qIFNpZ25hdHVyZSBvZiB0aGUgc291cmNlIAkqLworfTsKKworJS8qCislICogU3RydWN0dXJlcyB1c2VkIGZvciBzZXJ2ZXIgYmluZGluZy4KKyUgKi8KK3N0cnVjdCBuaXNfYm91bmRfZW5kcG9pbnQgeworCWVuZHBvaW50IGVwOworCWludCBnZW5lcmF0aW9uOworCWludCByYW5rOworCXVpbnQzMl90IGZsYWdzOworCWludCBob3N0bnVtOworCWludCBlcG51bTsKKwluaXNfbmFtZSB1YWRkcjsKKwllbmRwb2ludCBjYmVwOworfTsKK3R5cGVkZWYgc3RydWN0IG5pc19ib3VuZF9lbmRwb2ludCBuaXNfYm91bmRfZW5kcG9pbnQ7CisKK3N0cnVjdCBuaXNfYm91bmRfZGlyZWN0b3J5IHsKKwlpbnQgZ2VuZXJhdGlvbjsKKwlpbnQgbWluX3Jhbms7ICAgICAgICAgICAvKiBtaW5pbXVtIHJhbmsgb2YgYm91bmQgZW5kcG9pbnRzICovCisJaW50IG9wdGltYWxfcmFuazsgICAgICAgLyogYmVzdCBwb3NzaWJsZSByYW5rIG9mIGFsbCBlbmRwb2ludHMgKi8KKwlkaXJlY3Rvcnlfb2JqIGRvYmo7CisJbmlzX2JvdW5kX2VuZHBvaW50IEJFUDw+OworfTsKK3R5cGVkZWYgc3RydWN0IG5pc19ib3VuZF9kaXJlY3RvcnkgbmlzX2JvdW5kX2RpcmVjdG9yeTsKKyUjZGVmaW5lIGJlcF9sZW4gQkVQLkJFUF9sZW4KKyUjZGVmaW5lIGJlcF92YWwgQkVQLkJFUF92YWwKKworc3RydWN0IG5pc19hY3RpdmVfZW5kcG9pbnQgeworCWVuZHBvaW50IGVwOworCW5pc19uYW1lIGhvc3RuYW1lOworCWludCByYW5rOworCWludCB1YWRkcl9nZW5lcmF0aW9uOworCW5pc19uYW1lIHVhZGRyOworCWludCBjYmVwX2dlbmVyYXRpb247CisJZW5kcG9pbnQgY2JlcDsKK307Cit0eXBlZGVmIHN0cnVjdCBuaXNfYWN0aXZlX2VuZHBvaW50IG5pc19hY3RpdmVfZW5kcG9pbnQ7CisKKyUvKiBkZWZpbmVzIGZvciBuaXNfYm91bmRfZW5kcG9pbnQuZmxhZ3MgKi8KKyUjZGVmaW5lIE5JU19CT1VORCAweDEKKyUjZGVmaW5lIE5JU19UUkFOU0lFTlRfRVJST1JTIDB4MgorCitwcm9ncmFtICBOSVNfUFJPRyB7CisKKwkvKiBSUEMgTGFuZ3VhZ2UgZGVzY3JpcHRpb24gb2YgdGhlIE5JUysgcHJvdG9jb2wgKi8KKwl2ZXJzaW9uIE5JU19WRVJTSU9OIHsKKwkJLyogVGhlIG5hbWUgc2VydmljZSBmdW5jdGlvbnMgKi8KKwkJbmlzX3Jlc3VsdCAgTklTX0xPT0tVUChuc19yZXF1ZXN0KSA9IDE7CisJCW5pc19yZXN1bHQgIE5JU19BREQobnNfcmVxdWVzdCkgPSAyOworCQluaXNfcmVzdWx0ICBOSVNfTU9ESUZZKG5zX3JlcXVlc3QpID0gMzsKKwkJbmlzX3Jlc3VsdCAgTklTX1JFTU9WRShuc19yZXF1ZXN0KSA9IDQ7CisKKwkJLyogVGhlIGluZm9ybWF0aW9uIGJhc2UgZnVuY3Rpb25zICovCisJCW5pc19yZXN1bHQgIE5JU19JQkxJU1QoaWJfcmVxdWVzdCkgPSA1OworCQluaXNfcmVzdWx0ICBOSVNfSUJBREQoaWJfcmVxdWVzdCkgPSA2OworCQluaXNfcmVzdWx0ICBOSVNfSUJNT0RJRlkoaWJfcmVxdWVzdCkgPSA3OworCQluaXNfcmVzdWx0ICBOSVNfSUJSRU1PVkUoaWJfcmVxdWVzdCkgPSA4OworCQluaXNfcmVzdWx0ICBOSVNfSUJGSVJTVChpYl9yZXF1ZXN0KSA9IDk7CisJCW5pc19yZXN1bHQgIE5JU19JQk5FWFQoaWJfcmVxdWVzdCkgPSAxMDsKKworCQkvKiBOSVMgQWRtaW5pc3RyYXRpdmUgZnVuY3Rpb25zICovCisJCWZkX3Jlc3VsdCAgIE5JU19GSU5ERElSRUNUT1JZKGZkX2FyZ3MpID0gMTI7CisKKwkJLyogSWYgZmV0Y2ggYW5kIG9wdGlvbmFsbHkgcmVzZXQgc3RhdGlzdGljcyAqLworCQluaXNfdGFnbGlzdCAgTklTX1NUQVRVUyhuaXNfdGFnbGlzdCkgPSAxNDsKKworCQkvKiBEdW1wIGNoYW5nZXMgdG8gZGlyZWN0b3J5IHNpbmNlIHRpbWUgaW4gZGFfdGltZSAqLworCQlsb2dfcmVzdWx0ICBOSVNfRFVNUExPRyhkdW1wX2FyZ3MpID0gMTU7CisKKwkJLyogRHVtcCBjb250ZW50cyBvZiBkaXJlY3RvcnkgbmFtZWQgKi8KKwkJbG9nX3Jlc3VsdCAgTklTX0RVTVAoZHVtcF9hcmdzKSA9IDE2OworCisJCS8qIENoZWNrIHN0YXR1cyBvZiBjYWxsYmFjayB0aHJlYWQgKi8KKwkJYm9vbAkgICAgTklTX0NBTExCQUNLKG5ldG9iaikgPSAxNzsKKworCQkvKiBSZXR1cm4gbGFzdCB1cGRhdGUgdGltZSBmb3IgbmFtZWQgZGlyICovCisJCXVpbnQzMl90ICAgIE5JU19DUFRJTUUobmlzX25hbWUpID0gMTg7CisKKwkJLyogQ2hlY2twb2ludCBkaXJlY3Rvcnkgb3IgdGFibGUgbmFtZWQgKi8KKwkJY3BfcmVzdWx0ICAgTklTX0NIRUNLUE9JTlQobmlzX25hbWUpID0gMTk7CisKKwkJLyogU2VuZCAnc3RhdHVzIGNoYW5nZWQnIHBpbmcgdG8gcmVwbGljYXRlcyAqLworCQl2b2lkCSAgICBOSVNfUElORyhwaW5nX2FyZ3MpID0gMjA7CisKKwkJLyogTW9kaWZ5IHNlcnZlciBiZWhhdmlvdXIgKHN1Y2ggYXMgZGVidWdnaW5nKSAqLworCQluaXNfdGFnbGlzdCBOSVNfU0VSVlNUQVRFKG5pc190YWdsaXN0KSA9IDIxOworCisJCS8qIENyZWF0ZSBhIERpcmVjdG9yeSAqLworCQluaXNfZXJyb3IgICBOSVNfTUtESVIobmlzX25hbWUpID0gMjI7CisKKwkJLyogUmVtb3ZlIGEgRGlyZWN0b3J5ICovCisJCW5pc19lcnJvciAgIE5JU19STURJUihuaXNfbmFtZSkgPSAyMzsKKworCQkvKiBVcGRhdGUgcHVibGljIGtleXMgb2YgYSBkaXJlY3Rvcnkgb2JqZWN0ICovCisJCW5pc19lcnJvciAgIE5JU19VUERLRVlTKG5pc19uYW1lKSA9IDI0OworCX0gPSAzOworfSA9IDEwMDMwMDsKKworLyoKKyAqIEluY2x1ZGVkIGJlbG93IGFyZSB0aGUgZGVmaW5lcyB0aGF0IGJlY29tZSBwYXJ0IG9mIG5pcy5oLAorICogdGhleSBhcmUgdGVjaG5pY2FsbHkgbm90IHBhcnQgb2YgdGhlIHByb3RvY29sLCBidXQgZG8gZGVmaW5lCisgKiBrZXkgYXNwZWN0cyBvZiB0aGUgaW1wbGVtZW50YXRpb24gYW5kIGFyZSB0aGVyZWZvcmUgdXNlZnVsCisgKiBpbiBidWlsZGluZyBhIGNvbmZvcm1pbmcgc2VydmVyIG9yIGNsaWVudC4KKyAqLworI2lmIFJQQ19IRFIKKyUvKgorJSAqIEdlbmVyaWMgImhhc2giIGRhdGFzdHJ1Y3R1cmVzLCB1c2VkIGJ5IGFsbCB0eXBlcyBvZiBoYXNoZWQgZGF0YS4KKyUgKi8KKyVzdHJ1Y3QgbmlzX2hhc2hfZGF0YSB7CislCW5pc19uYW1lCQluYW1lOwkgICAvKiBOSVMgbmFtZSBvZiBoYXNoZWQgaXRlbSAgICAgICovCislCWludAkJCWtleWNoYWluOyAgLyogSXQncyBoYXNoIGtleSAoZm9yIHBvcCkgICAgICAqLworJQlzdHJ1Y3QgbmlzX2hhc2hfZGF0YQkqbmV4dDsJICAgLyogSGFzaCBjb2xsaXNpb24gcG9pbnRlciAgICAgICAqLworJQlzdHJ1Y3QgbmlzX2hhc2hfZGF0YQkqcHJ2X2l0ZW07IC8qIEEgc2VyaWFsLCBkb3VibHkgbGlua2VkIGxpc3QgKi8KKyUJc3RydWN0IG5pc19oYXNoX2RhdGEJKm54dF9pdGVtOyAvKiBvZiBpdGVtcyBpbiB0aGUgaGFzaCB0YWJsZSAgICovCislfTsKKyV0eXBlZGVmIHN0cnVjdCBuaXNfaGFzaF9kYXRhIE5JU19IQVNIX0lURU07CislCislc3RydWN0IG5pc19oYXNoX3RhYmxlIHsKKyUJTklTX0hBU0hfSVRFTQkqa2V5c1s2NF07CS8qIEEgaGFzaCB0YWJsZSBvZiBpdGVtcyAgICAgICAgICAgKi8KKyUJTklTX0hBU0hfSVRFTQkqZmlyc3Q7CQkvKiBUaGUgZmlyc3QgIml0ZW0iIGluIHNlcmlhbCBsaXN0ICovCislfTsKKyV0eXBlZGVmIHN0cnVjdCBuaXNfaGFzaF90YWJsZSBOSVNfSEFTSF9UQUJMRTsKKyUKKyUvKiBTdHJ1Y3R1cmUgZm9yIHN0b3JpbmcgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0YXRpYyBkYXRhICovCislc3RydWN0IG5pc19zZGF0YSB7CislCXZvaWQJKmJ1ZjsJLyogTWVtb3J5IGFsbG9jYXRpb24gcG9pbnRlciAJKi8KKyUJdV9pbnQJc2l6ZTsJLyogQnVmZmVyIHNpemUJCQkqLworJX07CislCislLyogR2VuZXJpYyBjbGllbnQgY3JlYXRpbmcgZmxhZ3MgKi8KKyUjZGVmaW5lIFpNSF9WQwkJMQorJSNkZWZpbmUgWk1IX0RHCQkyCislI2RlZmluZSBaTUhfQVVUSAk0CislCislLyogVGVzdGluZyBBY2Nlc3MgcmlnaHRzIGZvciBvYmplY3RzICovCislCislI2RlZmluZSBOSVNfUkVBRF9BQ0MJCTEKKyUjZGVmaW5lIE5JU19NT0RJRllfQUNDCQkyCislI2RlZmluZSBOSVNfQ1JFQVRFX0FDQwkJNAorJSNkZWZpbmUgTklTX0RFU1RST1lfQUNDCTgKKyUvKiBUZXN0IG1hY3Jvcy4gYSA9PSBhY2Nlc3MgcmlnaHRzLCBtID09IGRlc2lyZWQgcmlnaHRzLiAqLworJSNkZWZpbmUgTklTX1dPUkxEKGEsIG0pCSgoKGEpICYgKG0pKSAhPSAwKQorJSNkZWZpbmUgTklTX0dST1VQKGEsIG0pCSgoKGEpICYgKChtKSA8PCA4KSkgIT0gMCkKKyUjZGVmaW5lIE5JU19PV05FUihhLCBtKQkoKChhKSAmICgobSkgPDwgMTYpKSAhPSAwKQorJSNkZWZpbmUgTklTX05PQk9EWShhLCBtKQkoKChhKSAmICgobSkgPDwgMjQpKSAhPSAwKQorJS8qCislICogRU9MIEFsZXJ0IC0gVGhlIGZvbGxvd2luZyBub24tcHJlZml4ZWQgdGVzdCBtYWNyb3MgYXJlCislICogaGVyZSBmb3IgYmFja3dhcmQgY29tcGF0YWJpbGl0eSwgYW5kIHdpbGwgYmUgbm90IGJlIHByZXNlbnQKKyUgKiBpbiBmdXR1cmUgcmVsZWFzZXMgLSB1c2UgdGhlIE5JU18qKCkgbWFjcm9zIGFib3ZlLgorJSAqLworJSNkZWZpbmUgV09STEQoYSwgbSkJKCgoYSkgJiAobSkpICE9IDApCislI2RlZmluZSBHUk9VUChhLCBtKQkoKChhKSAmICgobSkgPDwgOCkpICE9IDApCislI2RlZmluZSBPV05FUihhLCBtKQkoKChhKSAmICgobSkgPDwgMTYpKSAhPSAwKQorJSNkZWZpbmUgTk9CT0RZKGEsIG0pCSgoKGEpICYgKChtKSA8PCAyNCkpICE9IDApCislCislI2RlZmluZSBPQVRZUEUoZCwgbikgKCgoZCktPmRvX2FybWFzay5kb19hcm1hc2tfdmFsK24pLT5vYV9vdHlwZSkKKyUjZGVmaW5lIE9BUklHSFRTKGQsIG4pICgoKGQpLT5kb19hcm1hc2suZG9fYXJtYXNrX3ZhbCtuKS0+b2FfcmlnaHRzKQorJSNkZWZpbmUgV09STERfREVGQVVMVCAoTklTX1JFQURfQUNDKQorJSNkZWZpbmUgR1JPVVBfREVGQVVMVCAoTklTX1JFQURfQUNDIDw8IDgpCislI2RlZmluZSBPV05FUl9ERUZBVUxUICgoTklTX1JFQURfQUNDICtcCisJCQkgTklTX01PRElGWV9BQ0MgK1wKKwkJCSBOSVNfQ1JFQVRFX0FDQyArXAorCQkJIE5JU19ERVNUUk9ZX0FDQykgPDwgMTYpCislI2RlZmluZSBERUZBVUxUX1JJR0hUUyAoV09STERfREVGQVVMVCB8IEdST1VQX0RFRkFVTFQgfCBPV05FUl9ERUZBVUxUKQorJQorJS8qIFJlc3VsdCBtYW5pcHVsYXRpb24gZGVmaW5lcyAuLi4gKi8KKyUjZGVmaW5lIE5JU19SRVNfTlVNT0JKKHgpCSgoeCktPm9iamVjdHMub2JqZWN0c19sZW4pCislI2RlZmluZSBOSVNfUkVTX09CSkVDVCh4KQkoKHgpLT5vYmplY3RzLm9iamVjdHNfdmFsKQorJSNkZWZpbmUgTklTX1JFU19DT09LSUUoeCkJKCh4KS0+Y29va2llKQorJSNkZWZpbmUgTklTX1JFU19TVEFUVVMoeCkJKCh4KS0+c3RhdHVzKQorJQorJS8qIFRoZXNlIGRlZmluZXMgbWFrZSBnZXR0aW5nIGF0IHRoZSB2YXJpYW50IHBhcnQgb2YgdGhlIG9iamVjdCBlYXNpZXIuICovCislI2RlZmluZSBUQV9kYXRhIHpvX2RhdGEub2JqZGF0YV91LnRhX2RhdGEKKyUjZGVmaW5lIEVOX2RhdGEgem9fZGF0YS5vYmpkYXRhX3UuZW5fZGF0YQorJSNkZWZpbmUgRElfZGF0YSB6b19kYXRhLm9iamRhdGFfdS5kaV9kYXRhCislI2RlZmluZSBMSV9kYXRhIHpvX2RhdGEub2JqZGF0YV91LmxpX2RhdGEKKyUjZGVmaW5lIEdSX2RhdGEgem9fZGF0YS5vYmpkYXRhX3UuZ3JfZGF0YQorJQorJSNkZWZpbmUgX190eXBlX29mKG8pICgobyktPnpvX2RhdGEuem9fdHlwZSkKKyUKKyUvKiBEZWNsYXJhdGlvbnMgZm9yIHRoZSBpbnRlcm5hbCBzdWJyb3V0aW5lcyBpbiBuaXNsaWIuYyAqLworJWVudW0gbmFtZV9wb3Mge1NBTUVfTkFNRSwgSElHSEVSX05BTUUsIExPV0VSX05BTUUsIE5PVF9TRVFVRU5USUFMLCBCQURfTkFNRX07CisldHlwZWRlZiBlbnVtIG5hbWVfcG9zIG5hbWVfcG9zOworJQorJS8qCislICogRGVmaW5lcyBmb3IgZ2V0dGluZyBhdCBjb2x1bW4gZGF0YSBpbiBlbnRyeSBvYmplY3RzLiBCZWNhdXNlIFJQQ0dFTgorJSAqIGdlbmVyYXRlcyBzb21lIHJhdGhlciB3b3JkeSBzdHJ1Y3R1cmVzLCB3ZSBjcmVhdGUgc29tZSBkZWZpbmVzIHRoYXQKKyUgKiBjb2xsYXBzZSB0aGUgbmVlZGVkIGtleXN0cm9rZXMgdG8gYWNjZXNzIGEgcGFydGljdWxhciB2YWx1ZSB1c2luZworJSAqIHRoZXNlIGRlZmluaXRpb25zIHRoZXkgdGFrZSBhbiBuaXNfb2JqZWN0ICosIGFuZCBhbiBpbnQgYW5kIHJldHVybgorJSAqIGEgdV9jaGFyICogZm9yIFZhbHVlLCBhbmQgYW4gaW50IGZvciBsZW5ndGguCislICovCislI2RlZmluZSBFTlRSWV9WQUwob2JqLCBjb2wpIFwKKyUJKG9iaiktPkVOX2RhdGEuZW5fY29scy5lbl9jb2xzX3ZhbFtjb2xdLmVjX3ZhbHVlLmVjX3ZhbHVlX3ZhbAorJSNkZWZpbmUgRU5UUllfTEVOKG9iaiwgY29sKSBcCislCShvYmopLT5FTl9kYXRhLmVuX2NvbHMuZW5fY29sc192YWxbY29sXS5lY192YWx1ZS5lY192YWx1ZV9sZW4KKyUKKyUKKyUKKyUjaWZkZWYgX19jcGx1c3BsdXMKKyV9CislI2VuZGlmCislCislLyogUHJvdG90eXBlcywgYW5kIGV4dGVybiBkZWNsYXJhdGlvbnMgZm9yIHRoZSBOSVMgbGlicmFyeSBmdW5jdGlvbnMuICovCislI2luY2x1ZGUgPHJwY3N2Yy9uaXNsaWIuaD4KKyUjZW5kaWYgLyogX19OSVNfUlBDR0VOX0ggKi8KKyUvKiBFRElUX1NUQVJUICovCislCislLyoKKyUgKiBuaXNfMy5oCislICoKKyUgKiBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW5pdGlvbnMgdGhhdCBhcmUgb25seSBvZiBpbnRlcmVzdCB0byB0aGUgYWN0dWFsCislICogc2VydmljZSBkYWVtb24gYW5kIGNsaWVudCBzdHVicy4gTm9ybWFsIHVzZXJzIG9mIE5JUyB3aWxsIG5vdCBpbmNsdWRlCislICogdGhpcyBmaWxlLgorJSAqCislICogTk9URSA6IFRoaXMgaW5jbHVkZSBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSBhIGNvbWJpbmF0aW9uCislICogb2YgcnBjZ2VuIGFuZCBzZWQuIERPIE5PVCBFRElUIElULCBjaGFuZ2UgdGhlIG5pcy54IGZpbGUgaW5zdGVhZAorJSAqIGFuZCB0aGVuIHJlbWFrZSB0aGlzIGZpbGUuCislICovCislI2lmbmRlZiBfX25pc18zX2gKKyUjZGVmaW5lIF9fbmlzXzNfaAorJSNpZmRlZiBfX2NwbHVzcGx1cworJWV4dGVybiAiQyIgeworJSNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL25pc19jYWxsYmFjay5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwY3N2Yy9uaXNfY2FsbGJhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2E0ZWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwY3N2Yy9uaXNfY2FsbGJhY2suaApAQCAtMCwwICsxLDcxIEBACisvKgorICogU3VuIFJQQyBpcyBhIHByb2R1Y3Qgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBhbmQgaXMgcHJvdmlkZWQgZm9yCisgKiB1bnJlc3RyaWN0ZWQgdXNlIHByb3ZpZGVkIHRoYXQgdGhpcyBsZWdlbmQgaXMgaW5jbHVkZWQgb24gYWxsIHRhcGUKKyAqIG1lZGlhIGFuZCBhcyBhIHBhcnQgb2YgdGhlIHNvZnR3YXJlIHByb2dyYW0gaW4gd2hvbGUgb3IgcGFydC4gIFVzZXJzCisgKiBtYXkgY29weSBvciBtb2RpZnkgU3VuIFJQQyB3aXRob3V0IGNoYXJnZSwgYnV0IGFyZSBub3QgYXV0aG9yaXplZAorICogdG8gbGljZW5zZSBvciBkaXN0cmlidXRlIGl0IHRvIGFueW9uZSBlbHNlIGV4Y2VwdCBhcyBwYXJ0IG9mIGEgcHJvZHVjdCBvcgorICogcHJvZ3JhbSBkZXZlbG9wZWQgYnkgdGhlIHVzZXIgb3Igd2l0aCB0aGUgZXhwcmVzcyB3cml0dGVuIGNvbnNlbnQgb2YKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqCisgKiBTVU4gUlBDIElTIFBST1ZJREVEIEFTIElTIFdJVEggTk8gV0FSUkFOVElFUyBPRiBBTlkgS0lORCBJTkNMVURJTkcgVEhFCisgKiBXQVJSQU5USUVTIE9GIERFU0lHTiwgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UsIE9SIEFSSVNJTkcgRlJPTSBBIENPVVJTRSBPRiBERUFMSU5HLCBVU0FHRSBPUiBUUkFERSBQUkFDVElDRS4KKyAqCisgKiBTdW4gUlBDIGlzIHByb3ZpZGVkIHdpdGggbm8gc3VwcG9ydCBhbmQgd2l0aG91dCBhbnkgb2JsaWdhdGlvbiBvbiB0aGUKKyAqIHBhcnQgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiB0byBhc3Npc3QgaW4gaXRzIHVzZSwgY29ycmVjdGlvbiwKKyAqIG1vZGlmaWNhdGlvbiBvciBlbmhhbmNlbWVudC4KKyAqCisgKiBTVU4gTUlDUk9TWVNURU1TLCBJTkMuIFNIQUxMIEhBVkUgTk8gTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUKKyAqIElORlJJTkdFTUVOVCBPRiBDT1BZUklHSFRTLCBUUkFERSBTRUNSRVRTIE9SIEFOWSBQQVRFTlRTIEJZIFNVTiBSUEMKKyAqIE9SIEFOWSBQQVJUIFRIRVJFT0YuCisgKgorICogSW4gbm8gZXZlbnQgd2lsbCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJlIGxpYWJsZSBmb3IgYW55IGxvc3QgcmV2ZW51ZQorICogb3IgcHJvZml0cyBvciBvdGhlciBzcGVjaWFsLCBpbmRpcmVjdCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBldmVuIGlmCisgKiBTdW4gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorICoKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIDI1NTAgR2FyY2lhIEF2ZW51ZQorICogTW91bnRhaW4gVmlldywgQ2FsaWZvcm5pYSAgOTQwNDMKKyAqLworI2lmbmRlZiBfUlBDU1ZDX05JU19DQUxMQkFDS19ICisjZGVmaW5lIF9SUENTVkNfTklTX0NBTExCQUNLX0ggMQorCisjaW5jbHVkZSA8cnBjL3JwYy5oPgorI2luY2x1ZGUgPHJwY3N2Yy9uaXMuaD4KKworX19CRUdJTl9ERUNMUworCit0eXBlZGVmIG5pc19vYmplY3QgKm9ial9wOworCitzdHJ1Y3QgY2JhY2tfZGF0YSB7CisJc3RydWN0IHsKKwkJdV9pbnQgZW50cmllc19sZW47CisJCW9ial9wICplbnRyaWVzX3ZhbDsKKwl9IGVudHJpZXM7Cit9OwordHlwZWRlZiBzdHJ1Y3QgY2JhY2tfZGF0YSBjYmFja19kYXRhOworCisjZGVmaW5lIENCX1BST0cgMTAwMzAyCisjZGVmaW5lIENCX1ZFUlMgMQorCisjZGVmaW5lIENCUFJPQ19SRUNFSVZFIDEKK2V4dGVybiAgYm9vbF90ICogY2Jwcm9jX3JlY2VpdmVfMSAoY2JhY2tfZGF0YSAqLCBDTElFTlQgKikgX19USFJPVzsKK2V4dGVybiAgYm9vbF90ICogY2Jwcm9jX3JlY2VpdmVfMV9zdmMgKGNiYWNrX2RhdGEgKiwgc3RydWN0IHN2Y19yZXEgKikgX19USFJPVzsKKworI2RlZmluZSBDQlBST0NfRklOSVNIIDIKK2V4dGVybiAgdm9pZCAqIGNicHJvY19maW5pc2hfMSAodm9pZCAqLCBDTElFTlQgKikgX19USFJPVzsKK2V4dGVybiAgdm9pZCAqIGNicHJvY19maW5pc2hfMV9zdmMgKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKikgX19USFJPVzsKKworI2RlZmluZSBDQlBST0NfRVJST1IgMworZXh0ZXJuICB2b2lkICogY2Jwcm9jX2Vycm9yXzEgKG5pc19lcnJvciAqLCBDTElFTlQgKikgX19USFJPVzsKK2V4dGVybiAgdm9pZCAqIGNicHJvY19lcnJvcl8xX3N2YyAobmlzX2Vycm9yICosIHN0cnVjdCBzdmNfcmVxICopIF9fVEhST1c7CitleHRlcm4gaW50IGNiX3Byb2dfMV9mcmVlcmVzdWx0IChTVkNYUFJUICosIHhkcnByb2NfdCwgY2FkZHJfdCkgX19USFJPVzsKKworLyogdGhlIHhkciBmdW5jdGlvbnMgKi8KKworZXh0ZXJuICBib29sX3QgeGRyX29ial9wIChYRFIgKiwgb2JqX3AqKSBfX1RIUk9XOworZXh0ZXJuICBib29sX3QgeGRyX2NiYWNrX2RhdGEgKFhEUiAqLCBjYmFja19kYXRhKikgX19USFJPVzsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qICFfUlBDVlNDX05JU19DQUxMQkFDS19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL25pc19jYWxsYmFjay54IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwY3N2Yy9uaXNfY2FsbGJhY2sueApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODE3ODY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwY3N2Yy9uaXNfY2FsbGJhY2sueApAQCAtMCwwICsxLDY1IEBACislLyoKKyUgKiBTdW4gUlBDIGlzIGEgcHJvZHVjdCBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGFuZCBpcyBwcm92aWRlZCBmb3IKKyUgKiB1bnJlc3RyaWN0ZWQgdXNlIHByb3ZpZGVkIHRoYXQgdGhpcyBsZWdlbmQgaXMgaW5jbHVkZWQgb24gYWxsIHRhcGUKKyUgKiBtZWRpYSBhbmQgYXMgYSBwYXJ0IG9mIHRoZSBzb2Z0d2FyZSBwcm9ncmFtIGluIHdob2xlIG9yIHBhcnQuICBVc2VycworJSAqIG1heSBjb3B5IG9yIG1vZGlmeSBTdW4gUlBDIHdpdGhvdXQgY2hhcmdlLCBidXQgYXJlIG5vdCBhdXRob3JpemVkCislICogdG8gbGljZW5zZSBvciBkaXN0cmlidXRlIGl0IHRvIGFueW9uZSBlbHNlIGV4Y2VwdCBhcyBwYXJ0IG9mIGEgcHJvZHVjdCBvcgorJSAqIHByb2dyYW0gZGV2ZWxvcGVkIGJ5IHRoZSB1c2VyIG9yIHdpdGggdGhlIGV4cHJlc3Mgd3JpdHRlbiBjb25zZW50IG9mCislICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorJSAqCislICogU1VOIFJQQyBJUyBQUk9WSURFRCBBUyBJUyBXSVRIIE5PIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgSU5DTFVESU5HIFRIRQorJSAqIFdBUlJBTlRJRVMgT0YgREVTSUdOLCBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorJSAqIFBVUlBPU0UsIE9SIEFSSVNJTkcgRlJPTSBBIENPVVJTRSBPRiBERUFMSU5HLCBVU0FHRSBPUiBUUkFERSBQUkFDVElDRS4KKyUgKgorJSAqIFN1biBSUEMgaXMgcHJvdmlkZWQgd2l0aCBubyBzdXBwb3J0IGFuZCB3aXRob3V0IGFueSBvYmxpZ2F0aW9uIG9uIHRoZQorJSAqIHBhcnQgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiB0byBhc3Npc3QgaW4gaXRzIHVzZSwgY29ycmVjdGlvbiwKKyUgKiBtb2RpZmljYXRpb24gb3IgZW5oYW5jZW1lbnQuCislICoKKyUgKiBTVU4gTUlDUk9TWVNURU1TLCBJTkMuIFNIQUxMIEhBVkUgTk8gTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUKKyUgKiBJTkZSSU5HRU1FTlQgT0YgQ09QWVJJR0hUUywgVFJBREUgU0VDUkVUUyBPUiBBTlkgUEFURU5UUyBCWSBTVU4gUlBDCislICogT1IgQU5ZIFBBUlQgVEhFUkVPRi4KKyUgKgorJSAqIEluIG5vIGV2ZW50IHdpbGwgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBiZSBsaWFibGUgZm9yIGFueSBsb3N0IHJldmVudWUKKyUgKiBvciBwcm9maXRzIG9yIG90aGVyIHNwZWNpYWwsIGluZGlyZWN0IGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIGV2ZW4gaWYKKyUgKiBTdW4gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorJSAqCislICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorJSAqIDI1NTAgR2FyY2lhIEF2ZW51ZQorJSAqIE1vdW50YWluIFZpZXcsIENhbGlmb3JuaWEgIDk0MDQzCislICovCisKKy8qCisgKgluaXNfY2FsbGJhY2sueAorICoKKyAqCUNvcHlyaWdodCAoYykgMTk4OC0xOTkyIFN1biBNaWNyb3N5c3RlbXMgSW5jCisgKglBbGwgUmlnaHRzIFJlc2VydmVkLgorICovCisKKyUjcHJhZ21hIGlkZW50CSJAKCMpbmlzX2NhbGxiYWNrLngJMS43CTk0LzA1LzAzIFNNSSIKKworLyoKKyAqICJAKCMpem5zX2NiYWNrLnggMS4yIDkwLzA5LzEwIENvcHlyIDE5OTAgU3VuIE1pY3JvIiAKKyAqCisgKiBSUENMIGRlc2NyaXB0aW9uIG9mIHRoZSBDYWxsYmFjayBTZXJ2aWNlLgorICovCisKKyNpZmRlZiBSUENfSERSCislI2luY2x1ZGUgPHJwY3N2Yy9uaXMuaD4KKyNlbmRpZgorI2lmZGVmIFJQQ19YRFIKKyUjaW5jbHVkZSAibmlzX2NsbnQuaCIKKyNlbmRpZgorCit0eXBlZGVmIG5pc19vYmplY3QJKm9ial9wOworCitzdHJ1Y3QgY2JhY2tfZGF0YSB7CisJb2JqX3AJCWVudHJpZXM8PjsJLyogTGlzdCBvZiBvYmplY3RzICovCit9OworCitwcm9ncmFtIENCX1BST0cgeworCXZlcnNpb24gQ0JfVkVSUyB7CisJCWJvb2wJQ0JQUk9DX1JFQ0VJVkUoY2JhY2tfZGF0YSkgPSAxOworCQl2b2lkCUNCUFJPQ19GSU5JU0godm9pZCkgPSAyOworCQl2b2lkCUNCUFJPQ19FUlJPUihuaXNfZXJyb3IpID0gMzsKKwl9ID0gMTsKK30gPSAxMDAzMDI7CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL25pc19vYmplY3QueCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGNzdmMvbmlzX29iamVjdC54Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZTc2ODgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL25pc19vYmplY3QueApAQCAtMCwwICsxLDMwMiBAQAorLyoKKyAqCW5pc19vYmplY3QueAorICoKKyAqCUNvcHlyaWdodCAoYykgMTk4OC0xOTkyIFN1biBNaWNyb3N5c3RlbXMgSW5jCisgKglBbGwgUmlnaHRzIFJlc2VydmVkLgorICovCisKKyUjcHJhZ21hIGlkZW50CSJAKCMpbmlzX29iamVjdC54CTEuMTIJOTcvMTEvMTkgU01JIgorCisjaWYgUlBDX0hEUgorJQorJSNpZm5kZWYgX19uaXNfb2JqZWN0X2gKKyUjZGVmaW5lIF9fbmlzX29iamVjdF9oCislCisjZW5kaWYKKy8qCisgKiAJVGhpcyBmaWxlIGRlZmluZXMgdGhlIGZvcm1hdCBmb3IgYSBOSVMgb2JqZWN0IGluIFJQQyBsYW5ndWFnZS4KKyAqIEl0IGlzIGluY2x1ZGVkIGJ5IHRoZSBtYWluIC54IGZpbGUgYW5kIHRoZSBkYXRhYmFzZSBhY2Nlc3MgcHJvdG9jb2wKKyAqIGZpbGUuIEl0IGlzIGNvbW1vbiBiZWNhdXNlIGJvdGggb2YgdGhlbSBuZWVkIHRvIGRlYWwgd2l0aCB0aGUgc2FtZQorICogdHlwZSBvZiBvYmplY3QuIEdlbmVyYXRpbmcgdGhlIGFjdHVhbCBjb2RlIHRob3VnaCBpcyBhIGJpdCBtZXNzeSBiZWNhdXNlCisgKiB0aGUgbmlzLnggZmlsZSBhbmQgdGhlIG5pc19kYmEueCBmaWxlIHdpbGwgZ2VuZXJhdGUgeGRyIHJvdXRpbmVzIHRvCisgKiBlbmNvZGUvZGVjb2RlIG9iamVjdHMgd2hlbiBvbmx5IG9uZSBzZXQgaXMgbmVlZGVkLiBTdWNoIGlzIGxpZmUgd2hlbgorICogb25lIGlzIHVzaW5nIHJwY2dlbi4KKyAqCisgKiBOb3RlLCB0aGUgcHJvdG9jb2wgZG9lc24ndCBzcGVjaWZ5IGFueSBsaW1pdHMgb24gc3VjaCB0aGluZ3MgYXMKKyAqIG1heGltdW0gbmFtZSBsZW5ndGgsIG51bWJlciBvZiBhdHRyaWJ1dGVzLCBldGMuIFRoZXNlIGFyZSBlbmZvcmNlZAorICogYnkgdGhlIGRhdGFiYXNlIGJhY2tlbmQuIFdoZW4geW91IGhpdCB0aGVtIHlvdSB3aWxsIG5vLiBBbHNvIHNlZQorICogdGhlIGRiX2dldGxpbWl0cygpIGZ1bmN0aW9uIGZvciBmZXRjaGluZyB0aGUgbGltaXQgdmFsdWVzLgorICoKKyAqLworCisvKiBTb21lIG1hbmlmZXN0IGNvbnN0YW50cywgY2hvc2VuIHRvIG1heGltaXplIGZsZXhpYmlsaXR5IHdpdGhvdXQKKyAqIHBsdWdnaW5nIHRoZSB3aXJlIGZ1bGwgb2YgZGF0YS4KKyAqLworY29uc3QgTklTX01BWFNUUklOR0xFTiA9IDI1NTsKK2NvbnN0IE5JU19NQVhOQU1FTEVOICAgPSAxMDI0OworY29uc3QgTklTX01BWEFUVFJOQU1FICA9IDMyOworY29uc3QgTklTX01BWEFUVFJWQUwgICA9IDIwNDg7Citjb25zdCBOSVNfTUFYQ09MVU1OUyAgID0gNjQ7Citjb25zdCBOSVNfTUFYQVRUUiAgICAgID0gMTY7Citjb25zdCBOSVNfTUFYUEFUSCAgICAgID0gMTAyNDsKK2NvbnN0IE5JU19NQVhSRVBMSUNBUyAgPSAxMjg7Citjb25zdCBOSVNfTUFYTElOS1MgICAgID0gMTY7CisKK2NvbnN0IE5JU19QS19OT05FICAgICAgPSAwOwkvKiBubyBwdWJsaWMga2V5ICh1bml4L3N5cyBhdXRoKSAqLworY29uc3QgTklTX1BLX0RICSAgICAgICA9IDE7CS8qIFB1YmxpYyBrZXkgaXMgRGlmZmllLUhlbGxtYW4gdHlwZSAqLworY29uc3QgTklTX1BLX1JTQSAgICAgICA9IDI7CS8qIFB1YmxpYyBrZXkgaWYgUlNBIHR5cGUgKi8KK2NvbnN0IE5JU19QS19LRVJCICAgICAgPSAzOwkvKiBVc2Uga2VyYmVyb3Mgc3R5bGUgYXV0aGVudGljYXRpb24gKi8KK2NvbnN0IE5JU19QS19ESEVYVCAgICAgPSA0OwkvKiBFeHRlbmRlZCBEaWZmaWUtSGVsbG1hbiBmb3IgUlBDLUdTUyAqLworCisvKgorICogVGhlIGZ1bmRhbWVudGFsIG5hbWUgdHlwZSBvZiBOSVMuIFRoZSBuYW1lIG1heSBjb25zaXN0IG9mIHR3byBwYXJ0cywKKyAqIHRoZSBmaXJzdCBiZWluZyB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUsIGFuZCB0aGUgc2Vjb25kIGJlaW5nIGFuCisgKiBvcHRpb25hbCBzZXQgb2YgYXR0cmlidXRlL3ZhbHVlIHBhaXJzLgorICovCitzdHJ1Y3QgbmlzX2F0dHIgeworCXN0cmluZwl6YXR0cl9uZHg8PjsJLyogbmFtZSBvZiB0aGUgaW5kZXggCQkqLworCW9wYXF1ZQl6YXR0cl92YWw8PjsJLyogVmFsdWUgZm9yIHRoZSBhdHRyaWJ1dGUuIAkqLworfTsKKwordHlwZWRlZiBzdHJpbmcgbmlzX25hbWU8PjsJLyogVGhlIE5JUyBuYW1lIGl0c2VsZi4gKi8KKworLyogTklTIG9iamVjdCB0eXBlcyBhcmUgZGVmaW5lZCBieSB0aGUgZm9sbG93aW5nIGVudW1lcmF0aW9uLiBUaGUgbnVtYmVycworICogdGhleSB1c2UgYXJlIGJhc2VkIG9uIHRoZSBmb2xsb3dpbmcgc2NoZW1lIDoKKyAqCQkgICAgIDAgLSAxMDIzIGFyZSByZXNlcnZlZCBmb3IgU3VuLAorICogCQkxMDI0IC0gMjA0NyBhcmUgZGVmaW5lZCB0byBiZSBwcml2YXRlIHRvIGEgcGFydGljdWxhciB0cmVlLgorICoJCTIwNDggLSA0MDk1IGFyZSBkZWZpbmVkIHRvIGJlIHVzZXIgZGVmaW5lZC4KKyAqCQk0MDk2IC0gLi4uICBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCisgKgorICogRU9MIEFsZXJ0IC0gVGhlIG5vbi1wcmVmaXhlZCBuYW1lcyBhcmUgcHJlc2VudCBmb3IgYmFja3dhcmQKKyAqIGNvbXBhdGFiaWxpdHkgb25seSwgYW5kIHdpbGwgbm90IGV4aXN0IGluIGZ1dHVyZSByZWxlYXNlcy4gVXNlCisgKiB0aGUgTklTXyogbmFtZXMgZm9yIGZ1dHVyZSBjb21wYXRhYmlsaXR5LgorICovCisKK2VudW0gem90eXBlcyB7CisKKwlCT0dVU19PQkogIAk9IDAsCS8qIFVuaW5pdGlhbGl6ZWQgb2JqZWN0IHN0cnVjdHVyZSAJKi8KKwlOT19PQkogICAJPSAxLAkvKiBOVUxMIG9iamVjdCAobm8gZGF0YSkJIAkqLworCURJUkVDVE9SWV9PQkogCT0gMiwJLyogRGlyZWN0b3J5IG9iamVjdCBkZXNjcmliaW5nIGRvbWFpbiAJKi8KKwlHUk9VUF9PQkogIAk9IDMsCS8qIEdyb3VwIG9iamVjdCAoYSBsaXN0IG9mIG5hbWVzKSAJKi8KKwlUQUJMRV9PQkogIAk9IDQsCS8qIFRhYmxlIG9iamVjdCAoYSBkYXRhYmFzZSBzY2hlbWEpIAkqLworCUVOVFJZX09CSiAgCT0gNSwJLyogRW50cnkgb2JqZWN0IChhIGRhdGFiYXNlIHJlY29yZCkgCSovCisJTElOS19PQkogICAJPSA2LCAJLyogQSBuYW1lIGxpbmsuCQkJCSovCisJUFJJVkFURV9PQkogIAk9IDcsIAkvKiBQcml2YXRlIG9iamVjdCAoYWxsIG9wYXF1ZSBkYXRhKSAJKi8KKworCU5JU19CT0dVU19PQkogIAk9IDAsCS8qIFVuaW5pdGlhbGl6ZWQgb2JqZWN0IHN0cnVjdHVyZSAJKi8KKwlOSVNfTk9fT0JKICAgCT0gMSwJLyogTlVMTCBvYmplY3QgKG5vIGRhdGEpCSAJKi8KKwlOSVNfRElSRUNUT1JZX09CSiA9IDIsIC8qIERpcmVjdG9yeSBvYmplY3QgZGVzY3JpYmluZyBkb21haW4gCSovCisJTklTX0dST1VQX09CSiAgCT0gMywJLyogR3JvdXAgb2JqZWN0IChhIGxpc3Qgb2YgbmFtZXMpIAkqLworCU5JU19UQUJMRV9PQkogIAk9IDQsCS8qIFRhYmxlIG9iamVjdCAoYSBkYXRhYmFzZSBzY2hlbWEpIAkqLworCU5JU19FTlRSWV9PQkogIAk9IDUsCS8qIEVudHJ5IG9iamVjdCAoYSBkYXRhYmFzZSByZWNvcmQpIAkqLworCU5JU19MSU5LX09CSgk9IDYsIAkvKiBBIG5hbWUgbGluay4JCQkJKi8KKwlOSVNfUFJJVkFURV9PQkogID0gNyAvKiBQcml2YXRlIG9iamVjdCAoYWxsIG9wYXF1ZSBkYXRhKSAqLworfTsKKworLyoKKyAqIFRoZSB0eXBlcyBvZiBOYW1lIHNlcnZpY2VzIE5JUyBrbm93cyBhYm91dC4gVGhleSBhcmUgZW51bWVyYXRlZAorICogaGVyZS4gVGhlIEJpbmRlciBjb2RlIHdpbGwgdXNlIHRoaXMgdHlwZSB0byBkZXRlcm1pbmUgaWYgaXQgaGFzCisgKiBhIHNldCBvZiBsaWJyYXJ5IHJvdXRpbmVzIHRoYXQgd2lsbCBhY2Nlc3MgdGhlIGluZGljYXRlZCBuYW1lIHNlcnZpY2UuCisgKi8KK2VudW0gbnN0eXBlIHsKKwlVTktOT1dOID0gMCwKKwlOSVMgPSAxLAkvKiBOaXMgUGx1cyBTZXJ2aWNlCQkqLworCVNVTllQID0gMiwJLyogT2xkIE5JUyBTZXJ2aWNlCQkqLworCUlWWSA9IDMsCS8qIE5pcyBQbHVzIFBsdXMgU2VydmljZQkqLworCUROUyA9IDQsCS8qIERvbWFpbiBOYW1lIFNlcnZpY2UJCSovCisJWDUwMCA9IDUsCS8qIElTTy9DQ0NJVCBYLjUwMCBTZXJ2aWNlCSovCisJRE5BTlMgPSA2LAkvKiBEaWdpdGFsIERFQ05ldCBOYW1lIFNlcnZpY2UJKi8KKwlYQ0hTID0gNywJLyogWGVyb3ggQ2xlYXJpbmdIb3VzZSBTZXJ2aWNlCSovCisJQ0RTPSA4Cit9OworCisvKgorICogRElSRUNUT1JZIC0gVGhlIG5hbWUgc2VydmljZSBvYmplY3QuIFRoZXNlIG9iamVjdHMgaWRlbnRpZnkgb3RoZXIgbmFtZQorICogc2VydmVycyB0aGF0IGFyZSBzZXJ2aW5nIHNvbWUgcG9ydGlvbiBvZiB0aGUgbmFtZSBzcGFjZS4gRWFjaCBoYXMgYQorICogdHlwZSBhc3NvY2lhdGVkIHdpdGggaXQuIFRoZSByZXNvbHZlciBsaWJyYXJ5IHdpbGwgbm90ZSB3aGV0aGVyIG9yIG5vdAorICogaXMgaGFzIHRoZSBuZWVkZWQgcm91dGluZXMgdG8gYWNjZXNzIHRoYXQgdHlwZSBvZiBzZXJ2aWNlLgorICogVGhlIG9hcm1hc2sgc3RydWN0dXJlIGRlZmluZXMgYW4gYWNjZXNzIHJpZ2h0cyBtYXNrIG9uIGEgcGVyIG9iamVjdAorICogdHlwZSBiYXNpcyBmb3IgdGhlIG5hbWUgc3BhY2VzLiBUaGUgb25seSBiaXRzIGN1cnJlbnRseSB1c2VkIGFyZQorICogY3JlYXRlIGFuZCBkZXN0cm95LiBCeSBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhlc2UgYWNjZXNzIHJpZ2h0cyBmb3IKKyAqIGEgc3BlY2lmaWMgb2JqZWN0IHR5cGUgZm9yIGEgb25lIG9mIHRoZSBhY2Nlc3NvciBlbnRpdGllcyAob3duZXIsCisgKiBncm91cCwgd29ybGQpIHRoZSBhZG1pbmlzdHJhdG9yIGNhbiBjb250cm9sIHdoYXQgdHlwZXMgb2Ygb2JqZWN0cworICogbWF5IGJlIGZyZWVseSBhZGRlZCB0byB0aGUgbmFtZSBzcGFjZSBhbmQgd2hpY2ggcmVxdWlyZSB0aGUKKyAqIGFkbWluaXN0cmF0b3IncyBhcHByb3ZhbC4KKyAqLworc3RydWN0IG9hcl9tYXNrIHsKKwl1aW50MzJfdAlvYV9yaWdodHM7CS8qIEFjY2VzcyByaWdodHMgbWFzayAJKi8KKwl6b3R5cGVzCQlvYV9vdHlwZTsJLyogT2JqZWN0IHR5cGUgCQkqLworfTsKKworc3RydWN0IGVuZHBvaW50IHsKKwlzdHJpbmcJCXVhZGRyPD47CisJc3RyaW5nCQlmYW1pbHk8PjsgICAvKiBUcmFuc3BvcnQgZmFtaWx5IChJTkVULCBPU0ksIGV0YykgKi8KKwlzdHJpbmcJCXByb3RvPD47ICAgIC8qIFByb3RvY29sIChUQ1AsIFVEUCwgQ0xOUCwgIGV0YykgICAqLworfTsKKworLyoKKyAqIE5vdGU6IHBrZXkgaXMgYSBuZXRvYmogd2hpY2ggaXMgbGltaXRlZCB0byAxMDI0IGJ5dGVzIHdoaWNoIGxpbWl0cyB0aGUKKyAqIGtleXNpemUgdG8gODE5MiBiaXRzLiBUaGlzIGlzIGNvbnNpZGVyIHRvIGJlIGEgcmVhc29uYWJsZSBsaW1pdCBmb3IKKyAqIHRoZSBleHBlY3RlZCBsaWZldGltZSBvZiB0aGlzIHNlcnZpY2UuCisgKi8KK3N0cnVjdCBuaXNfc2VydmVyIHsKKwluaXNfbmFtZQluYW1lOyAJIAkvKiBQcmluY2lwYWwgbmFtZSBvZiB0aGUgc2VydmVyICAqLworCWVuZHBvaW50CWVwPD47ICAJCS8qIFVuaXZlcnNhbCBhZGRyKHMpIGZvciBzZXJ2ZXIgICovCisJdWludDMyX3QJa2V5X3R5cGU7CS8qIFB1YmxpYyBrZXkgdHlwZQkJICovCisJbmV0b2JqCQlwa2V5OwkJLyogc2VydmVyJ3MgcHVibGljIGtleSAgCSAqLworfTsKKworc3RydWN0IGRpcmVjdG9yeV9vYmogeworCW5pc19uYW1lICAgZG9fbmFtZTsJIC8qIE5hbWUgb2YgdGhlIGRpcmVjdG9yeSBiZWluZyBzZXJ2ZWQgICAqLworCW5zdHlwZQkgICBkb190eXBlOwkgLyogb25lIG9mIE5JUywgRE5TLCBJVlksIFlQLCBvciBYLjUwMCAJICovCisJbmlzX3NlcnZlciBkb19zZXJ2ZXJzPD47IC8qIDwwPiA9PSBQcmltYXJ5IG5hbWUgc2VydmVyICAgICAJICovCisJdWludDMyX3QgICBkb190dGw7CSAvKiBUaW1lIFRvIExpdmUgKGZvciBjYWNoZXMpIAkJICovCisJb2FyX21hc2sgICBkb19hcm1hc2s8PjsgIC8qIENyZWF0ZS9EZXN0cm95IHJpZ2h0cyBieSBvYmplY3QgdHlwZSAqLworfTsKKworLyoKKyAqIEVOVFJZIC0gVGhpcyBpcyBvbmUgcm93IG9mIGRhdGEgZnJvbSBhbiBpbmZvcm1hdGlvbiBiYXNlLgorICogVGhlIHR5cGUgdmFsdWUgaXMgdXNlZCBieSB0aGUgY2xpZW50IGxpYnJhcnkgdG8gY29udmVydCB0aGUgZW50cnkgdG8KKyAqIGl0J3MgaW50ZXJuYWwgc3RydWN0dXJlIHJlcHJlc2VudGF0aW9uLiBUaGUgVGFibGUgbmFtZSBpcyBhIGJhY2sgcG9pbnRlcgorICogdG8gdGhlIHRhYmxlIHdoZXJlIHRoZSBlbnRyeSBpcyBzdG9yZWQuIFRoaXMgYWxsb3dzIHRoZSBjbGllbnQgbGlicmFyeQorICogdG8gZGV0ZXJtaW5lIHdoZXJlIHRvIHNlbmQgYSByZXF1ZXN0IGlmIHRoZSBjbGllbnQgd2lzaGVzIHRvIGNoYW5nZSB0aGlzCisgKiBlbnRyeSBidXQgZ290IHRvIGl0IHRocm91Z2ggYSBMSU5LIHJhdGhlciB0aGFuIGRpcmVjdGx5LgorICogSWYgdGhlIGVudHJ5IGlzIGEgInN0YW5kYWxvbmUiIGVudHJ5IHRoZW4gdGhpcyBmaWVsZCBpcyB2b2lkLgorICovCitjb25zdCBFTl9CSU5BUlkgICA9IDE7CS8qIEluZGljYXRlcyB2YWx1ZSBpcyBiaW5hcnkgZGF0YSAJKi8KK2NvbnN0IEVOX0NSWVBUICAgID0gMjsJLyogSW5kaWNhdGVzIHRoZSB2YWx1ZSBpcyBlbmNyeXB0ZWQJKi8KK2NvbnN0IEVOX1hEUiAgICAgID0gNDsJLyogSW5kaWNhdGVzIHRoZSB2YWx1ZSBpcyBYRFIgZW5jb2RlZAkqLworY29uc3QgRU5fTU9ESUZJRUQgPSA4OwkvKiBJbmRpY2F0ZXMgZW50cnkgaXMgbW9kaWZpZWQuIAkqLworY29uc3QgRU5fQVNOMSAgICAgPSA2NDsJLyogTWVhbnMgY29udGVudHMgdXNlIEFTTi4xIGVuY29kaW5nICAgICovCisKK3N0cnVjdCBlbnRyeV9jb2wgeworCXVpbnQzMl90CWVjX2ZsYWdzOwkvKiBGbGFncyBmb3IgdGhpcyB2YWx1ZSAqLworCW9wYXF1ZQkJZWNfdmFsdWU8PjsJLyogSXQncyB0ZXh0dWFsIHZhbHVlCSovCit9OworCitzdHJ1Y3QgZW50cnlfb2JqIHsKKwlzdHJpbmcgCWVuX3R5cGU8PjsJLyogVHlwZSBvZiBlbnRyeSBzdWNoIGFzICJwYXNzd2QiICovCisJZW50cnlfY29sIGVuX2NvbHM8PjsJLyogVmFsdWUgZm9yIHRoZSBlbnRyeQkJICAqLworfTsKKworLyoKKyAqIEdST1VQIC0gVGhlIGdyb3VwIG9iamVjdCBjb250YWlucyBhIGxpc3Qgb2YgTklTIHByaW5jaXBhbCBuYW1lcy4gR3JvdXBzCisgKiBhcmUgdXNlZCB0byBhdXRob3JpemUgcHJpbmNpcGFscy4gRWFjaCBvYmplY3QgaGFzIGEgc2V0IG9mIGFjY2VzcyByaWdodHMKKyAqIGZvciBtZW1iZXJzIG9mIGl0cyBncm91cC4gUHJpbmNpcGFsIG5hbWVzIGluIGdyb3VwcyBhcmUgaW4gdGhlIGZvcm0KKyAqIG5hbWUuZGlyZWN0b3J5IGFuZCByZWN1cnNpdmUgZ3JvdXBzIGFyZSBleHByZXNzZWQgYXMgQGdyb3VwbmFtZS5kaXJlY3RvcnkKKyAqLworc3RydWN0IGdyb3VwX29iaiB7CisJdWludDMyX3QJZ3JfZmxhZ3M7CS8qIEZsYWdzIGNvbnRyb2xsaW5nIGdyb3VwCSovCisJbmlzX25hbWUJZ3JfbWVtYmVyczw+OyAgCS8qIExpc3Qgb2YgbmFtZXMgaW4gZ3JvdXAgCSovCit9OworCisvKgorICogTElOSyAtIFRoaXMgaXMgdGhlIExJTksgb2JqZWN0LiBJdCBpcyBxdWl0ZSBzaW1pbGFyIHRvIGEgc3ltYm9saWMgbGluaworICogaW4gdGhlIFVOSVggZmlsZXN5c3RlbS4gVGhlIGF0dHJpYnV0ZXMgaW4gdGhlIG1haW4gb2JqZWN0IHN0cnVjdHVyZSBhcmUKKyAqIHJlbGF0aXZlIHRvIHRoZSBMSU5LIGRhdGEgYW5kIG5vdCB3aGF0IGl0IHBvaW50cyB0byAobGlrZSB0aGUgZmlsZSBzeXN0ZW0pCisgKiAibW9kaWZ5IiBwcml2bGVnZXMgaGVyZSBpbmRpY2F0ZSB0aGUgcmlnaHQgdG8gbW9kaWZ5IHdoYXQgdGhlIGxpbmsgcG9pbnRzCisgKiBhdCBhbmQgbm90IHRvIG1vZGlmeSB0aGF0IGFjdHVhbCBvYmplY3QgcG9pbnRlZCB0byBieSB0aGUgbGluay4KKyAqLworc3RydWN0IGxpbmtfb2JqIHsKKwl6b3R5cGVzCSBsaV9ydHlwZTsJLyogUmVhbCB0eXBlIG9mIHRoZSBvYmplY3QJKi8KKwluaXNfYXR0ciBsaV9hdHRyczw+OwkvKiBBdHRyaWJ1dGUvVmFsdWVzIGZvciB0YWJsZXMJKi8KKwluaXNfbmFtZSBsaV9uYW1lOyAJLyogVGhlIG9iamVjdCdzIHJlYWwgTklTIG5hbWUJKi8KK307CisKKy8qCisgKiBUQUJMRSAtIFRoaXMgaXMgdGhlIHRhYmxlIG9iamVjdC4gSXQgaW1wbGVtZW50cyBhIHNpbXBsZQorICogZGF0YSBiYXNlIHRoYXQgYXBwbGljYXRpb25zIGFuZCB1c2UgZm9yIGNvbmZpZ3VyYXRpb24gb3IKKyAqIGFkbWluaXN0cmF0aW9uIHB1cnBvc2VzLiBUaGUgcm9sZSBvZiB0aGUgdGFibGUgaXMgdG8gZ3JvdXAgdG9nZXRoZXIKKyAqIGEgc2V0IG9mIHJlbGF0ZWQgZW50cmllcy4gVGFibGVzIGFyZSB0aGUgc2ltcGxlIGRhdGFiYXNlIGNvbXBvbmVudAorICogb2YgTklTLiBMaWtlIG1hbnkgZGF0YWJhc2VzLCB0YWJsZXMgYXJlIGxvZ2ljYWxseSBkaXZpZGVkIGludG8gY29sdW1ucworICogYW5kIHJvd3MuIFRoZSBjb2x1bW5zIGFyZSBsYWJlbGVkIHdpdGggaW5kZXhlcyBhbmQgZWFjaCBFTlRSWSBtYWtlcworICogdXAgYSByb3cuIFJvd3MgbWF5IGJlIGFkZHJlc3NlZCB3aXRoaW4gdGhlIHRhYmxlIGJ5IHNlbGVjdGluZyBvbmUKKyAqIG9yIG1vcmUgaW5kZXhlcywgYW5kIHZhbHVlcyBmb3IgdGhvc2UgaW5kZXhlcy4gRWFjaCByb3cgd2hpY2ggaGFzCisgKiBhIHZhbHVlIGZvciB0aGUgZ2l2ZW4gaW5kZXggdGhhdCBtYXRjaGVzIHRoZSBkZXNpcmVkIHZhbHVlIGlzIHJldHVybmVkLgorICogV2l0aGluIHRoZSBkZWZpbml0aW9uIG9mIGVhY2ggY29sdW1uIHRoZXJlIGlzIGEgZmxhZ3MgdmFyaWFibGUsIHRoaXMKKyAqIHZhcmlhYmxlIGNvbnRhaW5zIGZsYWdzIHdoaWNoIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0aGUgY29sdW1uIGlzCisgKiBzZWFyY2hhYmxlLCBjb250YWlucyBiaW5hcnkgZGF0YSwgYW5kIGFjY2VzcyByaWdodHMgZm9yIHRoZSBlbnRyeSBvYmplY3RzCisgKiBjb2x1bW4gdmFsdWUuCisgKi8KKworY29uc3QgVEFfQklOQVJZICAgICA9IDE7CS8qIE1lYW5zIHRhYmxlIGRhdGEgaXMgYmluYXJ5IAkJKi8KK2NvbnN0IFRBX0NSWVBUICAgICAgPSAyOwkvKiBNZWFucyB2YWx1ZSBzaG91bGQgYmUgZW5jcnlwdGVkIAkqLworY29uc3QgVEFfWERSICAgICAgICA9IDQ7CS8qIE1lYW5zIHZhbHVlIGlzIFhEUiBlbmNvZGVkCQkqLworY29uc3QgVEFfU0VBUkNIQUJMRSA9IDg7CS8qIE1lYW5zIHRoaXMgY29sdW1uIGlzIHNlYXJjaGFibGUJKi8KK2NvbnN0IFRBX0NBU0UgICAgICAgPSAxNjsJLyogTWVhbnMgdGhpcyBjb2x1bW4gaXMgQ2FzZSBTZW5zaXRpdmUJKi8KK2NvbnN0IFRBX01PRElGSUVEICAgPSAzMjsJLyogTWVhbnMgdGhpcyBjb2x1bW5zIGF0dHJzIGFyZSBtb2RpZmllZCovCitjb25zdCBUQV9BU04xICAgICAgID0gNjQ7CS8qIE1lYW5zIGNvbnRlbnRzIHVzZSBBU04uMSBlbmNvZGluZyAgICAgKi8KKworc3RydWN0IHRhYmxlX2NvbCB7CisJc3RyaW5nCQl0Y19uYW1lPDY0PjsJLyogQ29sdW1uIE5hbWUgCSAJICAgKi8KKwl1aW50MzJfdAl0Y19mbGFnczsJLyogY29udHJvbCBmbGFncwkgICAqLworCXVpbnQzMl90CXRjX3JpZ2h0czsJLyogQWNjZXNzIHJpZ2h0cyBtYXNrCSAgICovCit9OworCitzdHJ1Y3QgdGFibGVfb2JqIHsKKwlzdHJpbmcgCSAgdGFfdHlwZTw2ND47CSAvKiBUYWJsZSB0eXBlIHN1Y2ggYXMgInBhc3N3ZCIJKi8KKwlpbnQJICB0YV9tYXhjb2w7CSAvKiBUb3RhbCBudW1iZXIgb2YgY29sdW1ucwkqLworCXVfY2hhcgkgIHRhX3NlcDsJIC8qIFNlcGFyYXRvciBjaGFyYWN0ZXIgCSovCisJdGFibGVfY29sIHRhX2NvbHM8PjsgCSAvKiBUaGUgbnVtYmVyIG9mIHRhYmxlIGluZGV4ZXMgKi8KKwlzdHJpbmcJICB0YV9wYXRoPD47CSAvKiBBIHNlYXJjaCBwYXRoIGZvciB0aGlzIHRhYmxlICovCit9OworCisvKgorICogVGhpcyB1bmlvbiBqb2lucyB0b2dldGhlciBhbGwgb2YgdGhlIGN1cnJlbnRseSBrbm93biBvYmplY3RzLgorICovCit1bmlvbiBvYmpkYXRhIHN3aXRjaCAoem90eXBlcyB6b190eXBlKSB7CisgICAgICAgIGNhc2UgTklTX0RJUkVDVE9SWV9PQkogOgorICAgICAgICAgICAgICAgIHN0cnVjdCBkaXJlY3Rvcnlfb2JqIGRpX2RhdGE7CisgICAgICAgIGNhc2UgTklTX0dST1VQX09CSiA6CisgICAgICAgICAgICAgICAgc3RydWN0IGdyb3VwX29iaiBncl9kYXRhOworICAgICAgICBjYXNlIE5JU19UQUJMRV9PQkogOgorICAgICAgICAgICAgICAgIHN0cnVjdCB0YWJsZV9vYmogdGFfZGF0YTsKKyAgICAgICAgY2FzZSBOSVNfRU5UUllfT0JKOgorICAgICAgICAgICAgICAgIHN0cnVjdCBlbnRyeV9vYmogZW5fZGF0YTsKKyAgICAgICAgY2FzZSBOSVNfTElOS19PQkogOgorICAgICAgICAgICAgICAgIHN0cnVjdCBsaW5rX29iaiBsaV9kYXRhOworICAgICAgICBjYXNlIE5JU19QUklWQVRFX09CSiA6CisgICAgICAgICAgICAgICAgb3BhcXVlCXBvX2RhdGE8PjsKKwljYXNlIE5JU19OT19PQkogOgorCQl2b2lkOworICAgICAgICBjYXNlIE5JU19CT0dVU19PQkogOgorCQl2b2lkOworICAgICAgICBkZWZhdWx0IDoKKyAgICAgICAgICAgICAgICB2b2lkOworfTsKKworLyoKKyAqIFRoaXMgaXMgdGhlIGJhc2ljIE5JUyBvYmplY3QgZGF0YSB0eXBlLiBJdCBjb25zaXN0cyBvZiBhIGdlbmVyaWMgcGFydAorICogd2hpY2ggYWxsIG9iamVjdHMgY29udGFpbiwgYW5kIGEgc3BlY2lhbGl6ZWQgcGFydCB3aGljaCB2YXJpZXMgZGVwZW5kaW5nCisgKiBvbiB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LiBBbGwgb2YgdGhlIHNwZWNpYWxpemVkIHNlY3Rpb25zIGhhdmUgYmVlbgorICogZGVzY3JpYmVkIGFib3ZlLiBZb3UgbWlnaHQgaGF2ZSB3b25kZXJlZCB3aHkgdGhleSBhbGwgc3RhcnQgd2l0aCBhbgorICogaW50ZWdlciBzaXplLCBmb2xsb3dlZCBieSB0aGUgdXNlZnVsIGRhdGEuIFRoZSBhbnN3ZXIgaXMsIHdoZW4gdGhlCisgKiBzZXJ2ZXIgZG9lc24ndCByZWNvZ25pemUgdGhlIHR5cGUgcmV0dXJuZWQgaXQgdHJlYXRzIGl0IGFzIG9wYXF1ZSBkYXRhLgorICogQW5kIHRoZSBkZWZpbml0aW9uIGZvciBvcGFxdWUgZGF0YSBpcyB7aW50IHNpemU7IGNoYXIgKmRhdGE7fS4gSW4gdGhpcworICogd2F5LCBzZXJ2ZXJzIGFuZCB1dGlsaXR5IHJvdXRpbmVzIHRoYXQgZG8gbm90IHVuZGVyc3RhbmQgYSBnaXZlbiB0eXBlCisgKiBtYXkgc3RpbGwgcGFzcyBpdCBhcm91bmQuIE9uZSBoYXMgdG8gYmUgY2FyZWZ1bCBpbiBzZXR0aW5nCisgKiB0aGlzIHZhcmlhYmxlIGFjY3VyYXRlbHksIGl0IG11c3QgdGFrZSBpbnRvIGFjY291bnQgc3VjaCB0aGluZ3MgYXMKKyAqIFhEUiBwYWRkaW5nIG9mIHN0cnVjdHVyZXMgZXRjLiBUaGUgYmVzdCB3YXkgdG8gc2V0IGl0IGlzIHRvIG5vdGUgb25lJ3MKKyAqIHBvc2l0aW9uIGluIHRoZSBYRFIgZW5jb2Rpbmcgc3RyZWFtLCBlbmNvZGUgdGhlIHN0cnVjdHVyZSwgbG9vayBhdCB0aGUKKyAqIG5ldyBwb3NpdGlvbiBhbmQgY2FsY3VsYXRlIHRoZSBzaXplLgorICovCitzdHJ1Y3QgbmlzX29pZCB7CisJdWludDMyX3QgY3RpbWU7CQkvKiBUaW1lIG9mIG9iamVjdHMgY3JlYXRpb24gCSovCisJdWludDMyX3QgbXRpbWU7CQkvKiBUaW1lIG9mIG9iamVjdHMgbW9kaWZpY2F0aW9uICovCit9OworCitzdHJ1Y3QgbmlzX29iamVjdCB7CisJbmlzX29pZAkgem9fb2lkOwkvKiBvYmplY3QgaWRlbnRpdHkgdmVyaWZpZXIuCQkqLworCW5pc19uYW1lIHpvX25hbWU7CS8qIFRoZSBOSVMgbmFtZSBmb3IgdGhpcyBvYmplY3QJCSovCisJbmlzX25hbWUgem9fb3duZXI7CS8qIE5JUyBuYW1lIG9mIG9iamVjdCBvd25lci4JCSovCisJbmlzX25hbWUgem9fZ3JvdXA7CS8qIE5JUyBuYW1lIG9mIGFjY2VzcyBncm91cC4JCSovCisJbmlzX25hbWUgem9fZG9tYWluOwkvKiBUaGUgYWRtaW5pc3RyYXRvciBmb3IgdGhlIG9iamVjdAkqLworCXVpbnQzMl90IHpvX2FjY2VzczsJLyogQWNjZXNzIHJpZ2h0cyAob3duZXIsIGdyb3VwLCB3b3JsZCkJKi8KKwl1aW50MzJfdCB6b190dGw7CS8qIE9iamVjdCdzIHRpbWUgdG8gbGl2ZSBpbiBzZWNvbmRzLgkqLworCW9iamRhdGEJIHpvX2RhdGE7CS8qIERhdGEgc3RydWN0dXJlIGZvciB0aGlzIHR5cGUgCSovCit9OworI2lmIFJQQ19IRFIKKyUKKyUjZW5kaWYgLyogaWYgX19uaXNfb2JqZWN0X2ggKi8KKyUKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwY3N2Yy9uaXNfdGFncy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwY3N2Yy9uaXNfdGFncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMjQxODgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL25pc190YWdzLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTEsIFN1biBNaWNyb3N5c3RlbXMgSW5jLgorICovCisKKy8qCisgKgluaXNfdGFncy5oCisgKgorICoJVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSB0YWdzIGFuZCBzdGF0aXN0aWNzIGRlZmluaXRpb25zLiBJdCBpcworICoJYXV0b21hdGljYWxseSBpbmNsdWRlZCBieSBuaXMuaAorICovCisKKyNpZm5kZWYJX1JQQ1NWQ19OSVNfVEFHU19ICisjZGVmaW5lCV9SUENTVkNfTklTX1RBR1NfSAorCisjaWYgMAorI3ByYWdtYSBpZGVudAkiQCgjKW5pc190YWdzLmgJMS4xNgk5Ni8xMC8yNSBTTUkiCisjZW5kaWYKKy8qIGZyb20gZmlsZTogem5zX3RhZ3MuaAkxLjcgQ29weXJpZ2h0IChjKSAxOTkwIFN1biBNaWNyb3N5c3RlbXMgKi8KKworI2lmZGVmCV9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKKyNkZWZpbmUJTklTX0RJUgkiZGF0YSIKKworLyogTG9va3VwIGFuZCBMaXN0IGZ1bmN0aW9uIGZsYWdzICovCisjZGVmaW5lCUZPTExPV19MSU5LUwkoMTw8MCkJLyogRm9sbG93IGxpbmsgb2JqZWN0cyAJCQkqLworI2RlZmluZQlGT0xMT1dfUEFUSAkoMTw8MSkJLyogRm9sbG93IHRoZSBwYXRoIGluIGEgdGFibGUgCQkqLworI2RlZmluZQlIQVJEX0xPT0tVUAkoMTw8MikJLyogQmxvY2sgdW50aWwgc3VjY2Vzc2Z1bCAJCSovCisjZGVmaW5lCUFMTF9SRVNVTFRTCSgxPDwzKQkvKiBSZXRyaWV2ZSBhbGwgcmVzdWx0cyAJCSovCisjZGVmaW5lCU5PX0NBQ0hFCSgxPDw0KQkvKiBEbyBub3QgcmV0dXJuICdjYWNoZWQnIHJlc3VsdHMgCSovCisjZGVmaW5lCU1BU1RFUl9PTkxZCSgxPDw1KQkvKiBHZXQgdmFsdWUgb25seSBmcm9tIG1hc3RlciBzZXJ2ZXIJKi8KKyNkZWZpbmUJRVhQQU5EX05BTUUJKDE8PDYpCS8qIEV4cGFuZCBwYXJ0aXRpYWxseSBxdWFsaWZpZWQgbmFtZXMJKi8KKworLyogU2VtYW50aWMgbW9kaWZpY2F0aW9uIGZvciB0YWJsZSBvcGVyYXRpb25zIGZsYWdzICovCisjZGVmaW5lCVJFVFVSTl9SRVNVTFQJKDE8PDcpCS8qIFJldHVybiByZXN1bHRpbmcgb2JqZWN0IHRvIGNsaWVudCAgICAqLworI2RlZmluZQlBRERfT1ZFUldSSVRFCSgxPDw4KQkvKiBBbGxvdyBvdmVyd3JpdGVzIG9uIEFERAkJKi8KKyNkZWZpbmUJUkVNX01VTFRJUExFCSgxPDw5KQkvKiBBbGxvdyB3aWxkY2FyZCBkZWxldGVzCQkqLworI2RlZmluZQlNT0RfU0FNRU9CSgkoMTw8MTApCS8qIENoZWNrIG1vZGlmaWVkIG9iamVjdCBiZWZvcmUgd3JpdGUJKi8KKyNkZWZpbmUJQUREX1JFU0VSVkVECSgxPDwxMSkJLyogU3BhcmUgQUREIHNlbWFudGljCQkJKi8KKyNkZWZpbmUJUkVNX1JFU0VSVkVECSgxPDwxMikJLyogU3BhcmUgUkVNIHNlbWFudGljCQkJKi8KKyNkZWZpbmUJTU9EX0VYQ0xVU0lWRQkoMTw8MTMpCS8qIE1vZGlmeSBubyBvdmVyd3JpdGUgb24gbW9kaWZpZWQga2V5cyAqLworCisvKiBMb29rdXAgYW5kIExpc3QgZnVuY3Rpb24gZmxhZ3MgKGNvbnRpbnVlZCkgKi8KKyNkZWZpbmUJU09GVF9MT09LVVAJKDE8PDE0KQkvKiBUaGUgIm9sZCBkZWZhdWx0IiByZXR1cm4gb24gZmFpbHVyZSAgKi8KKworLyogVHJhbnNwb3J0IHNwZWNpZmljIG1vZGlmaWNhdGlvbnMgdG8gdGhlIG9wZXJhdGlvbiAqLworI2RlZmluZQlVU0VfREdSQU0JKDE8PDE2KSAvKiBVc2UgYSBkYXRhZ3JhbSB0cmFuc3BvcnQgCQkqLworI2RlZmluZQlOT19BVVRISU5GTwkoMTw8MTcpIC8qIERvbid0IGJvdGhlciBhdHRhY2hpbmcgYXV0aCBpbmZvCSovCisKKy8qCisgKiBEZWNsYXJhdGlvbnMgZm9yICJzdGFuZGFyZCIgTklTKyB0YWdzCisgKiBTdGF0ZSB2YXJpYWJsZSB0YWdzIGhhdmUgdmFsdWVzCTAgLSAyMDQ3CisgKiBTdGF0aXN0aWMgdGFncyBoYXZlIHZhbHVlcwkJMjA0OCAtIDY1NTM1CisgKiBVc2VyIFRhZ3MgaGF2ZSB2YWx1ZXMJCT4yXjE2CisgKi8KKyNkZWZpbmUJVEFHX0RFQlVHCTEJLyogc2V0IGRlYnVnIGxldmVsIAkJKi8KKyNkZWZpbmUJVEFHX1NUQVRTCTIJLyogRW5hYmxlL2Rpc2FibGUgc3RhdGlzdGljcyAJKi8KKyNkZWZpbmUJVEFHX0dDQUNIRQkzCS8qIEZsdXNoIHRoZSBHcm91cCBDYWNoZQkqLworI2RlZmluZQlUQUdfR0NBQ0hFX0FMTAlUQUdfR0NBQ0hFCisjZGVmaW5lCVRBR19EQ0FDSEUJNAkvKiBGbHVzaCB0aGUgZGlyZWN0b3J5IGNhY2hlCSovCisjZGVmaW5lCVRBR19EQ0FDSEVfT05FCVRBR19EQ0FDSEUKKyNkZWZpbmUJVEFHX09DQUNIRQk1CS8qIEZsdXNoIHRoZSBPYmplY3QgQ2FjaGUJKi8KKyNkZWZpbmUJVEFHX1NFQ1VSRQk2CS8qIFNldCB0aGUgc2VjdXJpdHkgbGV2ZWwgCSovCisjZGVmaW5lCVRBR19UQ0FDSEVfT05FCTcJLyogRmx1c2ggdGhlIHRhYmxlIGNhY2hlCSovCisjZGVmaW5lCVRBR19EQ0FDSEVfQUxMCTgJLyogRmx1c2ggZW50aXJlIGRpcmVjdG9yeSBjYWNoZQkqLworI2RlZmluZQlUQUdfVENBQ0hFX0FMTAk5CS8qIEZsdXNoIGVudGlyZSB0YWJsZSBjYWNoZQkqLworI2RlZmluZQlUQUdfR0NBQ0hFX09ORQkxMAkvKiBGbHVzaCBvbmUgZ3JvdXAgb2JqZWN0CSovCisjZGVmaW5lCVRBR19EQ0FDSEVfT05FX1JFRlJFU0ggMTEgLyogRmx1c2ggYW5kIHJlZnJlc2ggb25lIERPCSovCisjZGVmaW5lCVRBR19SRUFET05MWQkxMgkvKiBTZXQgcmVhZCBvbmx5IG1vZGUJCSovCisjZGVmaW5lCVRBR19SRUFEV1JJVEUJMTQJLyogUmVzZXQgcmVhZC13cml0ZSBtb2RlCSovCisKKyNkZWZpbmUJVEFHX09QU1RBVFMJMjA0OAkvKiBOSVMrIG9wZXJhdGlvbnMgc3RhdGlzdGljcyAgICovCisjZGVmaW5lCVRBR19USFJFQURTCTIwNDkJLyogQ2hpbGQgcHJvY2Vzcy90aHJlYWQgc3RhdHVzICAqLworI2RlZmluZQlUQUdfSEVBUAkyMDUwCS8qIEhlYXAgdXNhZ2Ugc3RhdGlzdGljcwkqLworI2RlZmluZQlUQUdfVVBEQVRFUwkyMDUxCS8qIFVwZGF0ZXMgdG8gdGhpcyBzZXJ2aWNlCSovCisjZGVmaW5lCVRBR19WSVNJQkxFCTIwNTIJLyogRmlyc3QgdXBkYXRlIHRoYXQgaXNuJ3QgcmVwbGljYXRlZCAqLworI2RlZmluZQlUQUdfU19EQ0FDSEUJMjA1MwkvKiBEaXJlY3RvcnkgY2FjaGUgc3RhdGlzdGljcwkqLworI2RlZmluZQlUQUdfU19PQ0FDSEUJMjA1NAkvKiBPYmplY3QgY2FjaGUgc3RhdGlzdGljcwkqLworI2RlZmluZQlUQUdfU19HQ0FDSEUJMjA1NQkvKiBHcm91cCBjYWNoZSBzdGF0aXN0aWNzCSovCisjZGVmaW5lCVRBR19TX1NUT1JBR0UJMjA1NgkvKiBHcm91cCBjYWNoZSBzdGF0aXN0aWNzCSovCisjZGVmaW5lCVRBR19VUFRJTUUJMjA1NwkvKiBUaW1lIHRoYXQgc2VydmVyIGhhcyBiZWVuIHVwICovCisjZGVmaW5lCVRBR19ESVJMSVNUCTIwNTgJLyogRGlyIHNlcnZlZCBieSB0aGlzIHNlcnZlciAgICAqLworI2RlZmluZQlUQUdfTklTQ09NUEFUCTIwNTkJLyogV2hldGhlciBzdXBwb3J0cyBOSVMgY29tcGF0IG1vZGUgKi8KKyNkZWZpbmUJVEFHX0ROU0ZPUldBUkRJTkcgMjA2MAkvKiBXaGV0aGVyIEROUyBmb3J3YXJkaW5nIHN1cHBvcnRlZCAqLworI2RlZmluZQlUQUdfU0VDVVJJVFlfTEVWRUwgMjA2MQkvKiBTZWN1cml0eSBsZXZlbCBvZiB0aGUgc2VydmVyCSovCisjZGVmaW5lCVRBR19ST09UU0VSVkVSCTIwNjIJLyogV2hldGhlciByb290IHNlcnZlcgkJKi8KKworLyoKKyAqIERlY2xhcmF0aW9ucyBmb3IgdGhlIEdyb3VwIG9iamVjdCBmbGFncy4gQ3VycmVudGx5CisgKiB0aGVyZSBhcmUgb25seSAzLgorICovCisjZGVmaW5lCUlNUE1FTV9HUk9VUFMgIDEJLyogSW1wbGljaXQgTWVtYmVyc2hpcCBhbGxvd2VkIAkqLworI2RlZmluZQlSRUNVUlNfR1JPVVBTICAyCS8qIFJlY3Vyc2l2ZSBHcm91cHMgYWxsb3dlZCAJKi8KKyNkZWZpbmUJTkVHTUVNX0dST1VQUyAgNAkvKiBOZWdhdGl2ZSBHcm91cHMgYWxsb3dlZAkqLworCisjaWZkZWYJX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYJLyogX1JQQ1NWQ19OSVNfVEFHU19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL25pc2xpYi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwY3N2Yy9uaXNsaWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODkyN2VjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwY3N2Yy9uaXNsaWIuaApAQCAtMCwwICsxLDI4NyBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDA2LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisgICBDb250cmlidXRlZCBieSBUaG9yc3RlbiBLdWt1ayA8a3VrdWtAc3VzZS5kZT4sIDE5OTcuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmCV9fUlBDU1ZDX05JU0xJQl9IX18KKyNkZWZpbmUJX19SUENTVkNfTklTTElCX0hfXworCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworX19CRUdJTl9ERUNMUworCit0eXBlZGVmIGNvbnN0IGNoYXIgKmNvbnN0X25pc19uYW1lOworCisvKiBuaXNfbmFtZXM6IFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBsb2NhdGUgYW5kIG1hbmlwdWxhdGUgYWxsIE5JUysKKyAqIG9iamVjdHMgZXhjZXB0IHRoZSBOSVMrIGVudHJ5IG9iamVjdHMuCisgKgorICogbmlzX2xvb2t1cCAobmFtZSwgZmxhZ3MpIHJlc29sdmVzIGEgTklTKyBuYW1lIGFuZCByZXR1cm5zIGEgY29weSBvZgorICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgb2JqZWN0ICBmcm9tIGEgTklTKyBzZXJ2ZXIuCisgKiAgICBjb25zdCBuaXNfbmFtZSBuYW1lOiBuYW1lIG9mIHRoZSBvYmplY3QgdG8gYmUgcmVzb2x2ZWQKKyAqICAgIHVuc2lnbmVkIGludCBmbGFnczogbG9naWNhbGx5IE9SaW5nIHplcm8gb3IgbW9yZSBmbGFncyAoRk9MTE9XX0xJTktTLAorICogICAgICAgICAgICAgICAgICAgICAgICAgIEhBUkRfTE9PS1VQLCBbTk9fQ0FDSEVdLCBNQVNURVJfT05MWSwgRVhQQU5EX05BTUUpCisgKgorICogbmlzX2FkZCAobmFtZSwgb2JqKSBhZGRzIG9iamVjdHMgdG8gdGhlIE5JUysgbmFtZXNwYWNlLgorICogICAgY29uc3QgbmlzX25hbWUgbmFtZTogZnVsbHkgcXVhbGlmaWVkIE5JUysgbmFtZS4KKyAqICAgIGNvbnN0IG5pc19vYmplY3QgKm9iajogb2JqZWN0IG1lbWJlcnMgem9fbmFtZSBhbmQgem9fZG9tYWluIHdpbGwgYmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0ZWQgZnJvbSBuYW1lLgorICoKKyAqIG5pc19yZW1vdmUgKG5hbWUsIG9iaikgcmVtb3ZlcyBvYmplY3RzIGZyb20gdGhlIE5JUysgbmFtZXNwYWNlLgorICogICAgY29uc3QgbmlzX25hbWUgbmFtZTogZnVsbHkgcXVhbGlmaWVkIE5JUysgbmFtZS4KKyAqICAgIGNvbnN0IG5pc19vYmplY3QgKm9iajogaWYgbm90IE5VTEwsIGl0IGlzIGFzc3VtZWQgdG8gcG9pbnQgdG8gYSBjb3B5CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBvYmplY3QgYmVpbmcgcmVtb3ZlZC4gSW4gdGhpcyBjYXNlLCBpZgorICogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgb2JqZWN0IG9uIHRoZSBzZXJ2ZXIgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QgaWRlbnRpZmllciBhcyB0aGUgIG9iamVjdCAgYmVpbmcgIHBhc3NlZCwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG9wZXJhdGlvbiB3aWxsIGZhaWwgd2l0aCB0aGUgTklTX05PVFNBTUVPQkoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IuCisgKgorICogbmlzX21vZGlmeSAobmFtZSwgb2JqKSBjYW4gY2hhbmdlIHNwZWNpZmljIGF0dHJpYnV0ZXMgb2YgYW4gb2JqZWN0CisgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgYWxyZWFkeSBleGlzdHMgaW4gdGhlIG5hbWVzcGFjZS4KKyAqLworZXh0ZXJuIG5pc19yZXN1bHQgKm5pc19sb29rdXAgKGNvbnN0X25pc19uYW1lIG5hbWUsIHVuc2lnbmVkIGludCBmbGFncykKKyAgICAgX19USFJPVzsKK2V4dGVybiBuaXNfcmVzdWx0ICpuaXNfYWRkIChjb25zdF9uaXNfbmFtZSBuYW1lLCBjb25zdCBuaXNfb2JqZWN0ICpvYmopCisgICAgIF9fVEhST1c7CitleHRlcm4gbmlzX3Jlc3VsdCAqbmlzX3JlbW92ZSAoY29uc3RfbmlzX25hbWUgbmFtZSwKKwkJCSAgICAgICBjb25zdCBuaXNfb2JqZWN0ICpvYmopIF9fVEhST1c7CitleHRlcm4gbmlzX3Jlc3VsdCAqbmlzX21vZGlmeSAoY29uc3RfbmlzX25hbWUgbmFtZSwKKwkJCSAgICAgICBjb25zdCBuaXNfb2JqZWN0ICpvYmopIF9fVEhST1c7CisKKy8qIG5pc190YWJsZXM6IFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBzZWFyY2ggYW5kIG1vZGlmeSBOSVMrIHRhYmxlcy4KKyAqCisgKiBuaXNfbGlzdCAodGFibGVfbmFtZSwgZmxhZ3MsIGNhbGxiYWNrKHRhYmxlX25hbWUsIG9iaiwgdXNlcmRhdGEpLCB1c2VyZGF0YSkKKyAqICAgICAgICAgICBzZWFyY2ggYSB0YWJsZSBpbiB0aGUgTklTKyBuYW1lc3BhY2UuCisgKiAgICBjb25zdCBuaXNfbmFtZSB0YWJsZV9uYW1lOiBpbmRleGVkIG5hbWUgKFt4eD15eV0sdGFibGUuZGlyKQorICogICAgdW5zaWduZWQgaW50IGZsYWdzOiBsb2dpY2FsbHkgT1Jpbmcgb25lIG9yIG1vcmUgZmxhZ3MgKEZPTExPV19MSU5LUywKKyAqICAgICAgICAgICAgICAgICAgICAgIFtGT0xMT1dfUEFUSF0sIEhBUkRfTE9PS1VQLCBbQUxMX1JFU1VMVFNdLCBbTk9fQ0FDSEVdLAorICogICAgICAgICAgICAgICAgICAgICAgTUFTVEVSX09OTFksIEVYUEFORF9OQU1FLCBSRVRVUk5fUkVTVUxUKQorICogICAgY2FsbGJhY2soKTogY2FsbGJhY2sgaXMgYW4gb3B0aW9uYWwgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgd2lsbAorICogICAgICAgICAgICAgICAgcHJvY2VzcyB0aGUgRU5UUlkgdHlwZSBvYmplY3RzIHRoYXQgYXJlIHJldHVybmVkIGZyb20gdGhlCisgKiAgICAgICAgICAgICAgICBzZWFyY2guIElmIHRoaXMgcG9pbnRlciBpcyBOVUxMLCB0aGVuIGFsbCBlbnRyaWVzIHRoYXQgbWF0Y2gKKyAqICAgICAgICAgICAgICAgIHRoZSBzZWFyY2ggY3JpdGVyaWEgYXJlIHJldHVybmVkIGluIHRoZSBuaXNfcmVzdWx0IHN0cnVjdHVyZSwKKyAqICAgICAgICAgICAgICAgIG90aGVyd2lzZSAgdGhpcyAgZnVuY3Rpb24gIHdpbGwgIGJlICBjYWxsZWQgb25jZSBmb3IgZWFjaAorICogICAgICAgICAgICAgICAgZW50cnkgcmV0dXJuZWQuCisgKiAgICB2b2lkICp1c2VyZGF0YTogcGFzc2VkIHRvIGNhbGxiYWNrIGZ1bmN0aW9uIGFsb25nIHdpdGggdGhlIHJldHVybmVkCisgKiAgICAgICAgICAgICAgICAgICAgZW50cnkgb2JqZWN0LgorICoKKyAqIG5pc19hZGRfZW50cnkgKHRhYmxlX25hbWUsIG9iaiwgZmxhZ3MpIHdpbGwgYWRkIHRoZSBOSVMrIG9iamVjdCB0byB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JUysgdGFibGVfbmFtZS4KKyAqICAgIGNvbnN0IG5pc19uYW1lIHRhYmxlX25hbWUKKyAqICAgIGNvbnN0IG5pc19vYmplY3QgKm9iagorICogICAgdW5zaWduZWQgaW50IGZsYWdzOiAwLCBBRERfT1ZFUldSSVRFLCBSRVRVUk5fUkVTVUxUCisgKgorICogbmlzX21vZGlmeV9lbnRyeSAobmFtZSwgb2JqLCBmbGFncykgbW9kaWZpZXMgYW4gb2JqZWN0IGlkZW50aWZpZWQgYnkgbmFtZS4KKyAqICAgIGNvbnN0IG5pc19uYW1lIG5hbWU6IG9iamVjdCBpZGVudGlmaWVyCisgKiAgICBjb25zdCBuaXNfb2JqZWN0ICpvYmo6IHNob3VsZCBwb2ludCB0byBhbiBlbnRyeSB3aXRoIHRoZSBFTl9NT0RJRklFRAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnIHNldCBpbiBlYWNoIGNvbHVtbiB0aGF0IGNvbnRhaW5zIG5ldworICogICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbi4KKyAqICAgIHVuc2lnbmVkIGludCBmbGFnczogMCwgTU9EX1NBTUVPQkosIFJFVFVSTl9SRVNVTFQKKyAqCisgKiBuaXNfcmVtb3ZlX2VudHJ5ICh0YWJsZV9uYW1lLCBvYmosIGZsYWdzKSByZW1vdmVzIGEgc2V0IG9mIGVudHJpZXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllZCBieSB0YWJsZV9uYW1lIGZyb20gdGhlIHRhYmxlLgorICogICAgY29uc3QgbmlzX25hbWUgdGFibGVfbmFtZTogaW5kZXhlZCBOSVMrIG5hbWUKKyAqICAgIGNvbnN0IG5pc19vYmplY3QgKm9iajogaWYgb2JqIGlzIG5vbi1udWxsLCBpdCBpcyBwcmVzdW1lZCB0byBwb2ludCB0bworICogICAgICAgICAgICAgICAgICAgICAgICAgICBhIGNhY2hlZCBjb3B5IG9mIHRoZSBlbnRyeS4gV2hlbiB0aGUgcmVtb3ZhbCBpcworICogICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRlbXB0ZWQsIGFuZCB0aGUgb2JqZWN0IHRoYXQgd291bGQgYmUgcmVtb3ZlZAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIGNhY2hlZCBvYmplY3QgcG9pbnRlZCB0bworICogICAgICAgICAgICAgICAgICAgICAgICAgICBieSBvYmplY3QgdGhlbiB0aGUgb3BlcmF0aW9uIHdpbGwgZmFpbCB3aXRoIGFuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JU19OT1RTQU1FT0JKIGVycm9yCisgKiAgICB1bnNpZ25lZCBpbnQgZmxhZ3M6IDAsIFJFTV9NVUxUSVBMRQorICoKKyAqIG5pc19maXJzdF9lbnRyeSAodGFibGVfbmFtZSkgZmV0Y2hlcyBlbnRyaWVzIGZyb20gYSB0YWJsZSBvbmUgYXQgYSB0aW1lLgorICogICAgY29uc3QgbmlzX25hbWUgdGFibGVfbmFtZQorICoKKyAqIG5pc19uZXh0X2VudHJ5ICh0YWJsZV9uYW1lLCBjb29raWUpIHJldHJpZXZlcyB0aGUgIm5leHQiIGVudHJ5IGZyb20gYQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUgc3BlY2lmaWVkIGJ5IHRhYmxlX25hbWUuCisgKiAgICBjb25zdCBuaXNfbmFtZSB0YWJsZV9uYW1lOgorICogICAgY29uc3QgbmV0b2JqICpjb29raWU6IFRoZSB2YWx1ZSBvZiBjb29raWUgZnJvbSB0aGUgbmlzX3Jlc3VsdCBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtIHRoZSBwcmV2aW91cyBjYWxsLgorICovCitleHRlcm4gbmlzX3Jlc3VsdCAqbmlzX2xpc3QgKGNvbnN0X25pc19uYW1lIG5hbWUsIHVuc2lnbmVkIGludCBmbGFncywKKwkJCSAgICAgaW50ICgqY2FsbGJhY2spKGNvbnN0X25pc19uYW1lIHRhYmxlX25hbWUsCisJCQkJCSAgICAgY29uc3QgbmlzX29iamVjdCAqb2JqLAorCQkJCQkgICAgIGNvbnN0IHZvaWQgKnVzZXJkYXRhKSwKKwkJCSAgICAgY29uc3Qgdm9pZCAqdXNlcmRhdGEpIF9fVEhST1c7CitleHRlcm4gbmlzX3Jlc3VsdCAqbmlzX2FkZF9lbnRyeSAoY29uc3RfbmlzX25hbWUgdGFibGVfbmFtZSwKKwkJCQkgIGNvbnN0IG5pc19vYmplY3QgKm9iaiwKKwkJCQkgIHVuc2lnbmVkIGludCBmbGFncykgX19USFJPVzsKK2V4dGVybiBuaXNfcmVzdWx0ICpuaXNfbW9kaWZ5X2VudHJ5IChjb25zdF9uaXNfbmFtZSBuYW1lLAorCQkJCSAgICAgY29uc3QgbmlzX29iamVjdCAqb2JqLAorCQkJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKSBfX1RIUk9XOworZXh0ZXJuIG5pc19yZXN1bHQgKm5pc19yZW1vdmVfZW50cnkgKGNvbnN0X25pc19uYW1lIHRhYmxlX25hbWUsCisJCQkJICAgICBjb25zdCBuaXNfb2JqZWN0ICpvYmosCisJCQkJICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpIF9fVEhST1c7CitleHRlcm4gbmlzX3Jlc3VsdCAqbmlzX2ZpcnN0X2VudHJ5IChjb25zdF9uaXNfbmFtZSB0YWJsZV9uYW1lKSBfX1RIUk9XOworZXh0ZXJuIG5pc19yZXN1bHQgKm5pc19uZXh0X2VudHJ5IChjb25zdF9uaXNfbmFtZSB0YWJsZV9uYW1lLAorCQkJCSAgIGNvbnN0IG5ldG9iaiAqY29va2llKSBfX1RIUk9XOworLyoKKyoqIG5pc19zZXJ2ZXIKKyovCitleHRlcm4gbmlzX2Vycm9yIG5pc19ta2RpciAoY29uc3RfbmlzX25hbWUgZGlybmFtZSwKKwkJCSAgICBjb25zdCBuaXNfc2VydmVyICptYWNoaW5lKSBfX1RIUk9XOworZXh0ZXJuIG5pc19lcnJvciBuaXNfcm1kaXIgKGNvbnN0X25pc19uYW1lIGRpcm5hbWUsCisJCQkgICAgY29uc3QgbmlzX3NlcnZlciAqbWFjaGluZSkgX19USFJPVzsKK2V4dGVybiBuaXNfZXJyb3IgbmlzX3NlcnZzdGF0ZSAoY29uc3QgbmlzX3NlcnZlciAqbWFjaGluZSwKKwkJCQljb25zdCBuaXNfdGFnICp0YWdzLCBpbnQgbnVtdGFncywKKwkJCQluaXNfdGFnICoqcmVzdWx0KSBfX1RIUk9XOworZXh0ZXJuIG5pc19lcnJvciBuaXNfc3RhdHMgKGNvbnN0IG5pc19zZXJ2ZXIgKm1hY2hpbmUsCisJCQkgICAgY29uc3QgbmlzX3RhZyAqdGFncywgaW50IG51bXRhZ3MsCisJCQkgICAgbmlzX3RhZyAqKnJlc3VsdCkgX19USFJPVzsKK2V4dGVybiB2b2lkIG5pc19mcmVldGFncyAobmlzX3RhZyAqdGFncywgaW50IG51bXRhZ3MpIF9fVEhST1c7CitleHRlcm4gbmlzX3NlcnZlciAqKm5pc19nZXRzZXJ2bGlzdCAoY29uc3RfbmlzX25hbWUgZGlybmFtZSkgX19USFJPVzsKK2V4dGVybiB2b2lkIG5pc19mcmVlc2Vydmxpc3QgKG5pc19zZXJ2ZXIgKiptYWNoaW5lcykgX19USFJPVzsKKworLyoKKyoqIG5pc19zdWJyCisqLworZXh0ZXJuIG5pc19uYW1lIG5pc19sZWFmX29mIChjb25zdF9uaXNfbmFtZSBuYW1lKSBfX1RIUk9XOworZXh0ZXJuIG5pc19uYW1lIG5pc19sZWFmX29mX3IgKGNvbnN0X25pc19uYW1lIG5hbWUsIGNoYXIgKmJ1ZmZlciwKKwkJCSAgICAgICBzaXplX3QgYnVmbGVuKSBfX1RIUk9XOworZXh0ZXJuIG5pc19uYW1lIG5pc19uYW1lX29mIChjb25zdF9uaXNfbmFtZSBuYW1lKSBfX1RIUk9XOworZXh0ZXJuIG5pc19uYW1lIG5pc19uYW1lX29mX3IgKGNvbnN0X25pc19uYW1lIG5hbWUsIGNoYXIgKmJ1ZmZlciwKKwkJCSAgICAgICBzaXplX3QgYnVmbGVuKSBfX1RIUk9XOworZXh0ZXJuIG5pc19uYW1lIG5pc19kb21haW5fb2YgKGNvbnN0X25pc19uYW1lIG5hbWUpIF9fVEhST1c7CitleHRlcm4gbmlzX25hbWUgbmlzX2RvbWFpbl9vZl9yIChjb25zdF9uaXNfbmFtZSBuYW1lLCBjaGFyICpidWZmZXIsCisJCQkJIHNpemVfdCBidWZsZW4pIF9fVEhST1c7CitleHRlcm4gbmlzX25hbWUgKm5pc19nZXRuYW1lcyAoY29uc3RfbmlzX25hbWUgbmFtZSkgX19USFJPVzsKK2V4dGVybiB2b2lkIG5pc19mcmVlbmFtZXMgKG5pc19uYW1lICpuYW1lbGlzdCkgX19USFJPVzsKK2V4dGVybiBuYW1lX3BvcyBuaXNfZGlyX2NtcCAoY29uc3RfbmlzX25hbWUgbjEsIGNvbnN0X25pc19uYW1lIG4yKSBfX1RIUk9XOworZXh0ZXJuIG5pc19vYmplY3QgKm5pc19jbG9uZV9vYmplY3QgKGNvbnN0IG5pc19vYmplY3QgKnNyYywKKwkJCQkgICAgIG5pc19vYmplY3QgKmRlc3QpIF9fVEhST1c7CitleHRlcm4gdm9pZCBuaXNfZGVzdHJveV9vYmplY3QgKG5pc19vYmplY3QgKm9iaikgX19USFJPVzsKK2V4dGVybiB2b2lkIG5pc19wcmludF9vYmplY3QgKGNvbnN0IG5pc19vYmplY3QgKm9iaikgX19USFJPVzsKKworLyoKKyoqIG5pc19sb2NhbF9uYW1lcworKi8KK2V4dGVybiBuaXNfbmFtZSBuaXNfbG9jYWxfZ3JvdXAgKHZvaWQpIF9fVEhST1c7CitleHRlcm4gbmlzX25hbWUgbmlzX2xvY2FsX2RpcmVjdG9yeSAodm9pZCkgX19USFJPVzsKK2V4dGVybiBuaXNfbmFtZSBuaXNfbG9jYWxfcHJpbmNpcGFsICh2b2lkKSBfX1RIUk9XOworZXh0ZXJuIG5pc19uYW1lIG5pc19sb2NhbF9ob3N0ICh2b2lkKSBfX1RIUk9XOworCisvKgorKiogbmlzX2Vycm9yCisqLworZXh0ZXJuIGNvbnN0IGNoYXIgKm5pc19zcGVycm5vIChjb25zdCBuaXNfZXJyb3Igc3RhdHVzKSBfX1RIUk9XOworZXh0ZXJuIHZvaWQgbmlzX3BlcnJvciAoY29uc3QgbmlzX2Vycm9yIHN0YXR1cywgY29uc3QgY2hhciAqbGFiZWwpIF9fVEhST1c7CitleHRlcm4gdm9pZCBuaXNfbGVycm9yIChjb25zdCBuaXNfZXJyb3Igc3RhdHVzLCBjb25zdCBjaGFyICpsYWJlbCkgX19USFJPVzsKK2V4dGVybiBjaGFyICpuaXNfc3BlcnJvciAoY29uc3QgbmlzX2Vycm9yIHN0YXR1cywgY29uc3QgY2hhciAqbGFiZWwpIF9fVEhST1c7CitleHRlcm4gY2hhciAqbmlzX3NwZXJyb3JfciAoY29uc3QgbmlzX2Vycm9yIHN0YXR1cywgY29uc3QgY2hhciAqbGFiZWwsCisJCQkgICAgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuKSBfX1RIUk9XOworLyoKKyoqIG5pc19ncm91cHMKKyovCitleHRlcm4gYm9vbF90IG5pc19pc21lbWJlciAoY29uc3RfbmlzX25hbWUgcHJpbmNpcGFsLAorCQkJICAgIGNvbnN0X25pc19uYW1lIGdyb3VwKSBfX1RIUk9XOworZXh0ZXJuIG5pc19lcnJvciBuaXNfYWRkbWVtYmVyIChjb25zdF9uaXNfbmFtZSBtZW1iZXIsCisJCQkJY29uc3RfbmlzX25hbWUgZ3JvdXApIF9fVEhST1c7CitleHRlcm4gbmlzX2Vycm9yIG5pc19yZW1vdmVtZW1iZXIgKGNvbnN0X25pc19uYW1lIG1lbWJlciwKKwkJCQkgICBjb25zdF9uaXNfbmFtZSBncm91cCkgX19USFJPVzsKK2V4dGVybiBuaXNfZXJyb3IgbmlzX2NyZWF0ZWdyb3VwIChjb25zdF9uaXNfbmFtZSBncm91cCwKKwkJCQkgIHVuc2lnbmVkIGludCBmbGFncykgX19USFJPVzsKK2V4dGVybiBuaXNfZXJyb3IgbmlzX2Rlc3Ryb3lncm91cCAoY29uc3RfbmlzX25hbWUgZ3JvdXApIF9fVEhST1c7CitleHRlcm4gdm9pZCBuaXNfcHJpbnRfZ3JvdXBfZW50cnkgKGNvbnN0X25pc19uYW1lIGdyb3VwKSBfX1RIUk9XOworZXh0ZXJuIG5pc19lcnJvciBuaXNfdmVyaWZ5Z3JvdXAgKGNvbnN0X25pc19uYW1lIGdyb3VwKSBfX1RIUk9XOworCisvKgorKiogbmlzX3BpbmcKKyovCitleHRlcm4gdm9pZCBuaXNfcGluZyAoY29uc3RfbmlzX25hbWUgZGlybmFtZSwgdWludDMyX3QgdXRpbWUsCisJCSAgICAgIGNvbnN0IG5pc19vYmplY3QgKmRpcm9iaikgX19USFJPVzsKK2V4dGVybiBuaXNfcmVzdWx0ICpuaXNfY2hlY2twb2ludCAoY29uc3RfbmlzX25hbWUgZGlybmFtZSkgX19USFJPVzsKKworLyoKKyoqIG5pc19wcmludCAoWFhYIElOVEVSTkFMIEZVTkNUSU9OUywgU0hPVUxEIE5PVCBCRSBVU0VEICEhKQorKi8KK2V4dGVybiB2b2lkIG5pc19wcmludF9yZXN1bHQgKGNvbnN0IG5pc19yZXN1bHQgKnJlc3VsdCkgX19USFJPVzsKK2V4dGVybiB2b2lkIG5pc19wcmludF9yaWdodHMgKHVuc2lnbmVkIGludCByaWdodHMpIF9fVEhST1c7CitleHRlcm4gdm9pZCBuaXNfcHJpbnRfZGlyZWN0b3J5IChjb25zdCBkaXJlY3Rvcnlfb2JqICpkaXJvYmopIF9fVEhST1c7CitleHRlcm4gdm9pZCBuaXNfcHJpbnRfZ3JvdXAgKGNvbnN0IGdyb3VwX29iaiAqZ3Jwb2JqKSBfX1RIUk9XOworZXh0ZXJuIHZvaWQgbmlzX3ByaW50X3RhYmxlIChjb25zdCB0YWJsZV9vYmogKnRibG9iaikgX19USFJPVzsKK2V4dGVybiB2b2lkIG5pc19wcmludF9saW5rIChjb25zdCBsaW5rX29iaiAqbG5rb2JqKSBfX1RIUk9XOworZXh0ZXJuIHZvaWQgbmlzX3ByaW50X2VudHJ5IChjb25zdCBlbnRyeV9vYmogKmVub2JqKSBfX1RIUk9XOworCisvKgorKiogbmlzX2ZpbGUgKFhYWCBJTlRFUk5BTCBGVU5DVElPTlMsIFNIT1VMRCBOT1QgQkUgVVNFRCAhISkKKyovCitleHRlcm4gZGlyZWN0b3J5X29iaiAqcmVhZENvbGRTdGFydEZpbGUgKHZvaWQpIF9fVEhST1c7CitleHRlcm4gYm9vbF90IHdyaXRlQ29sZFN0YXJ0RmlsZSAoY29uc3QgZGlyZWN0b3J5X29iaiAqZGlyb2JqKSBfX1RIUk9XOworZXh0ZXJuIG5pc19vYmplY3QgKm5pc19yZWFkX29iaiAoY29uc3QgY2hhciAqb2JqKSBfX1RIUk9XOworZXh0ZXJuIGJvb2xfdCBuaXNfd3JpdGVfb2JqIChjb25zdCBjaGFyICpmaWxlLCBjb25zdCBuaXNfb2JqZWN0ICpvYmopIF9fVEhST1c7CisKKy8qCisqKiBuaXNfY2xvbmUgLSAoWFhYIElOVEVSTkFMIEZVTkNUSU9OUywgU0hPVUxEIE5PVCBCRSBVU0VEICEhKQorKi8KK2V4dGVybiBkaXJlY3Rvcnlfb2JqICpuaXNfY2xvbmVfZGlyZWN0b3J5IChjb25zdCBkaXJlY3Rvcnlfb2JqICpzcmMsCisJCQkJCSAgIGRpcmVjdG9yeV9vYmogKmRlc3QpIF9fVEhST1c7CitleHRlcm4gbmlzX3Jlc3VsdCAqbmlzX2Nsb25lX3Jlc3VsdCAoY29uc3QgbmlzX3Jlc3VsdCAqc3JjLAorCQkJCSAgICAgbmlzX3Jlc3VsdCAqZGVzdCkgX19USFJPVzsKKworLyogbmlzX2ZyZWUgLSBuaXNfZnJlZXJlc3VsdCAqLworZXh0ZXJuIHZvaWQgbmlzX2ZyZWVyZXN1bHQgKG5pc19yZXN1bHQgKnJlc3VsdCkgX19USFJPVzsKKy8qIChYWFggVEhFIEZPTExPV0lORyBBUkUgSU5URVJOQUwgRlVOQ1RJT05TLCBTSE9VTEQgTk9UIEJFIFVTRUQgISEpICovCitleHRlcm4gdm9pZCBuaXNfZnJlZV9yZXF1ZXN0IChpYl9yZXF1ZXN0ICpyZXEpIF9fVEhST1c7CitleHRlcm4gdm9pZCBuaXNfZnJlZV9kaXJlY3RvcnkgKGRpcmVjdG9yeV9vYmogKmRpcm9iaikgX19USFJPVzsKK2V4dGVybiB2b2lkIG5pc19mcmVlX29iamVjdCAobmlzX29iamVjdCAqb2JqKSBfX1RIUk9XOworCisvKiAoWFhYIElOVEVSTkFMIEZVTkNUSU9OUywgU0hPVUxEIE5PVCBCRSBVU0VEICEhKSAqLworZXh0ZXJuIG5pc19uYW1lIF9fbmlzX2RlZmF1bHRfb3duZXIgKGNoYXIgKikgX19USFJPVzsKK2V4dGVybiBuaXNfbmFtZSBfX25pc19kZWZhdWx0X2dyb3VwIChjaGFyICopIF9fVEhST1c7CitleHRlcm4gdWludDMyX3QgX19uaXNfZGVmYXVsdF90dGwgKGNoYXIgKikgX19USFJPVzsKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19uaXNfZGVmYXVsdF9hY2Nlc3MgKGNoYXIgKiwgdW5zaWduZWQgaW50KSBfX1RIUk9XOworZXh0ZXJuIGZkX3Jlc3VsdCAqX19uaXNfZmluZGRpcmVjdG9yeSAoZGlyZWN0b3J5X29iaiAqLCBjb25zdF9uaXNfbmFtZSkgX19USFJPVzsKK2V4dGVybiB2b2lkIF9fZnJlZV9mZHJlc3VsdCAoZmRfcmVzdWx0ICopIF9fVEhST1c7CitleHRlcm4gdWludDMyX3QgX19uaXNfaGFzaCAoY29uc3Qgdm9pZCAqa2V5YXJnLCByZWdpc3RlciBzaXplX3QgbGVuKSBfX1RIUk9XOworCisvKiBOSVMrIGNhY2hlIGxvY2tpbmcgKi8KK2V4dGVybiBpbnQgX19uaXNfbG9ja19jYWNoZSAodm9pZCkgX19USFJPVzsKK2V4dGVybiBpbnQgX19uaXNfdW5sb2NrX2NhY2hlICh2b2lkKSBfX1RIUk9XOworCisvKiAoWFhYIElOVEVSTkFMIEZVTkNUSU9OUywgT05MWSBGT1IgcnBjLm5pc2QgQU5EIGdsaWJjICEhKSAqLworI2lmIGRlZmluZWQgKE5JU19JTlRFUk5BTCkgfHwgZGVmaW5lZCAoX0xJQkMpCisKK3N0cnVjdCBkaXJfYmluZGluZworeworICBDTElFTlQgKmNsbnQ7ICAgICAgICAgICAgICAgICAgLyogUlBDIENMSUVOVCBoYW5kbGUgKi8KKyAgbmlzX3NlcnZlciAqc2VydmVyX3ZhbDsgICAgICAgIC8qIExpc3Qgb2Ygc2VydmVycyAqLworICB1bnNpZ25lZCBpbnQgc2VydmVyX2xlbjsgICAgICAgLyogIyBvZiBzZXJ2ZXJzICovCisgIHVuc2lnbmVkIGludCBzZXJ2ZXJfdXNlZDsgICAgICAvKiBXaGljaCBzZXJ2ZXIgd2UgYXJlIGJpbmQgaW4gdGhlIG1vbWVudCA/ICovCisgIHVuc2lnbmVkIGludCBjdXJyZW50X2VwOyAgICAgICAvKiBXaGljaCBlbmRwb2ludCBvZiB0aGUgc2VydmVyIGFyZSBpbiB1c2U/ICovCisgIHVuc2lnbmVkIGludCB0cnlzOyAgICAgICAgICAgICAvKiBIb3cgbWFueSBzZXJ2ZXIgaGF2ZSB3ZSB0cmllZCA/ICovCisgIHVuc2lnbmVkIGludCBjbGFzczsgICAgICAgICAgICAvKiBGcm9tIHdoaWNoIGNsYXNzIGlzIHNlcnZlcl92YWwgPyAqLworICBib29sX3QgbWFzdGVyX29ubHk7ICAgICAgICAgICAgLyogSXMgb25seSBiaW5kZWQgdG8gdGhlIG1hc3RlciAqLworICBib29sX3QgdXNlX2F1dGg7ICAgICAgICAgICAgICAgLyogRG8gd2UgdXNlIEFVVEggPyAqLworICBib29sX3QgdXNlX3VkcDsgICAgICAgICAgICAgICAgLyogRG8gd2UgdXNlIFVEUCA/ICovCisgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOyAgICAgICAvKiBTZXJ2ZXIncyBJUCBhZGRyZXNzICovCisgIGludCBzb2NrZXQ7ICAgICAgICAgICAgICAgICAgICAvKiBTZXJ2ZXIncyBsb2NhbCBzb2NrZXQgKi8KK307Cit0eXBlZGVmIHN0cnVjdCBkaXJfYmluZGluZyBkaXJfYmluZGluZzsKKworZXh0ZXJuIG5pc19lcnJvciBfX25pc2JpbmRfY3JlYXRlIChkaXJfYmluZGluZyAqLCBjb25zdCBuaXNfc2VydmVyICosCisJCQkJICAgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwKKwkJCQkgICB1bnNpZ25lZCBpbnQpIF9fVEhST1c7CitleHRlcm4gbmlzX2Vycm9yIF9fbmlzYmluZF9jb25uZWN0IChkaXJfYmluZGluZyAqKSBfX1RIUk9XOworZXh0ZXJuIG5pc19lcnJvciBfX25pc2JpbmRfbmV4dCAoZGlyX2JpbmRpbmcgKikgX19USFJPVzsKK2V4dGVybiB2b2lkIF9fbmlzYmluZF9kZXN0cm95IChkaXJfYmluZGluZyAqKSBfX1RIUk9XOworZXh0ZXJuIG5pc19lcnJvciBfX25pc2ZpbmRfc2VydmVyIChjb25zdF9uaXNfbmFtZSwgaW50LCBkaXJlY3Rvcnlfb2JqICoqLAorCQkJCSAgIGRpcl9iaW5kaW5nICosIHVuc2lnbmVkIGludCkgX19USFJPVzsKKworI2VuZGlmCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZgkvKiBfX1JQQ1NWQ19OSVNMSUJfSF9fICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL25sbV9wcm90LnggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL25sbV9wcm90LngKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYwYzkzMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGNzdmMvbmxtX3Byb3QueApAQCAtMCwwICsxLDE3OSBAQAorLyogQCgjKW5sbV9wcm90LngJMi4xIDg4LzA4LzAxIDQuMCBSUENTUkMgKi8KKy8qIEAoIylubG1fcHJvdC54IDEuOCA4Ny8wOS8yMSBDb3B5ciAxOTg3IFN1biBNaWNybyAqLworCisvKgorICogTmV0d29yayBsb2NrIG1hbmFnZXIgcHJvdG9jb2wgZGVmaW5pdGlvbgorICogQ29weXJpZ2h0IChDKSAxOTg2IFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqCisgKiBwcm90b2NvbCB1c2VkIGJldHdlZW4gbG9jYWwgbG9jayBtYW5hZ2VyIGFuZCByZW1vdGUgbG9jayBtYW5hZ2VyCisgKi8KKworI2lmZGVmIFJQQ19IRFIKKyUjZGVmaW5lIExNX01BWFNUUkxFTgkxMDI0CislI2RlZmluZSBNQVhOQU1FTEVOCUxNX01BWFNUUkxFTisxCisjZW5kaWYKKworLyoKKyAqIHN0YXR1cyBvZiBhIGNhbGwgdG8gdGhlIGxvY2sgbWFuYWdlcgorICovCitlbnVtIG5sbV9zdGF0cyB7CisJbmxtX2dyYW50ZWQgPSAwLAorCW5sbV9kZW5pZWQgPSAxLAorCW5sbV9kZW5pZWRfbm9sb2NrcyA9IDIsCisJbmxtX2Jsb2NrZWQgPSAzLAorCW5sbV9kZW5pZWRfZ3JhY2VfcGVyaW9kID0gNAorfTsKKworc3RydWN0IG5sbV9ob2xkZXIgeworCWJvb2wgZXhjbHVzaXZlOworCWludCBzdmlkOworCW5ldG9iaiBvaDsKKwl1bnNpZ25lZCBsX29mZnNldDsKKwl1bnNpZ25lZCBsX2xlbjsKK307CisKK3VuaW9uIG5sbV90ZXN0cnBseSBzd2l0Y2ggKG5sbV9zdGF0cyBzdGF0KSB7CisJY2FzZSBubG1fZGVuaWVkOgorCQlzdHJ1Y3QgbmxtX2hvbGRlciBob2xkZXI7CisJZGVmYXVsdDoKKwkJdm9pZDsKK307CisKK3N0cnVjdCBubG1fc3RhdCB7CisJbmxtX3N0YXRzIHN0YXQ7Cit9OworCitzdHJ1Y3QgbmxtX3JlcyB7CisJbmV0b2JqIGNvb2tpZTsKKwlubG1fc3RhdCBzdGF0OworfTsKKworc3RydWN0IG5sbV90ZXN0cmVzIHsKKwluZXRvYmogY29va2llOworCW5sbV90ZXN0cnBseSBzdGF0OworfTsKKworc3RydWN0IG5sbV9sb2NrIHsKKwlzdHJpbmcgY2FsbGVyX25hbWU8TE1fTUFYU1RSTEVOPjsKKwluZXRvYmogZmg7CQkvKiBpZGVudGlmeSBhIGZpbGUgKi8KKwluZXRvYmogb2g7CQkvKiBpZGVudGlmeSBvd25lciBvZiBhIGxvY2sgKi8KKwlpbnQgc3ZpZDsJCS8qIGdlbmVyYXRlZCBmcm9tIHBpZCBmb3Igc3ZpZCAqLworCXVuc2lnbmVkIGxfb2Zmc2V0OworCXVuc2lnbmVkIGxfbGVuOworfTsKKworc3RydWN0IG5sbV9sb2NrYXJncyB7CisJbmV0b2JqIGNvb2tpZTsKKwlib29sIGJsb2NrOworCWJvb2wgZXhjbHVzaXZlOworCXN0cnVjdCBubG1fbG9jayBhbG9jazsKKwlib29sIHJlY2xhaW07CQkvKiB1c2VkIGZvciByZWNvdmVyaW5nIGxvY2tzICovCisJaW50IHN0YXRlOwkJLyogc3BlY2lmeSBsb2NhbCBzdGF0dXMgbW9uaXRvciBzdGF0ZSAqLworfTsKKworc3RydWN0IG5sbV9jYW5jYXJncyB7CisJbmV0b2JqIGNvb2tpZTsJCQorCWJvb2wgYmxvY2s7CisJYm9vbCBleGNsdXNpdmU7CisJc3RydWN0IG5sbV9sb2NrIGFsb2NrOworfTsKKworc3RydWN0IG5sbV90ZXN0YXJncyB7CisJbmV0b2JqIGNvb2tpZTsJCQorCWJvb2wgZXhjbHVzaXZlOworCXN0cnVjdCBubG1fbG9jayBhbG9jazsKK307CisKK3N0cnVjdCBubG1fdW5sb2NrYXJncyB7CisJbmV0b2JqIGNvb2tpZTsJCQorCXN0cnVjdCBubG1fbG9jayBhbG9jazsKK307CisKKworI2lmZGVmIFJQQ19IRFIKKyUvKgorJSAqIFRoZSBmb2xsb3dpbmcgZW51bXMgYXJlIGFjdHVhbGx5IGJpdCBlbmNvZGVkIGZvciBlZmZpY2llbnQKKyUgKiBib29sZWFuIGFsZ2VicmEuLi4uIERPTidUIGNoYW5nZSB0aGVtLi4uLi4KKyUgKi8KKyNlbmRpZgorZW51bQlmc2hfbW9kZSB7CisJZnNtX0ROICA9IDAsCS8qIGRlbnkgbm9uZSAqLworCWZzbV9EUiAgPSAxLAkvKiBkZW55IHJlYWQgKi8KKwlmc21fRFcgID0gMiwJLyogZGVueSB3cml0ZSAqLworCWZzbV9EUlcgPSAzCS8qIGRlbnkgcmVhZC93cml0ZSAqLworfTsKKworZW51bQlmc2hfYWNjZXNzIHsKKwlmc2FfTk9ORSA9IDAsCS8qIGZvciBjb21wbGV0ZW5lc3MgKi8KKwlmc2FfUiAgICA9IDEsCS8qIHJlYWQgb25seSAqLworCWZzYV9XICAgID0gMiwJLyogd3JpdGUgb25seSAqLworCWZzYV9SVyAgID0gMwkvKiByZWFkL3dyaXRlICovCit9OworCitzdHJ1Y3QJbmxtX3NoYXJlIHsKKwlzdHJpbmcgY2FsbGVyX25hbWU8TE1fTUFYU1RSTEVOPjsKKwluZXRvYmoJZmg7CisJbmV0b2JqCW9oOworCWZzaF9tb2RlCW1vZGU7CisJZnNoX2FjY2VzcwlhY2Nlc3M7Cit9OworCitzdHJ1Y3QJbmxtX3NoYXJlYXJncyB7CisJbmV0b2JqCWNvb2tpZTsKKwlubG1fc2hhcmUJc2hhcmU7CisJYm9vbAlyZWNsYWltOworfTsKKworc3RydWN0CW5sbV9zaGFyZXJlcyB7CisJbmV0b2JqCWNvb2tpZTsKKwlubG1fc3RhdHMJc3RhdDsKKwlpbnQJc2VxdWVuY2U7Cit9OworCitzdHJ1Y3QJbmxtX25vdGlmeSB7CisJc3RyaW5nIG5hbWU8TUFYTkFNRUxFTj47CisJbG9uZyBzdGF0ZTsKK307CisKKy8qCisgKiBPdmVyLXRoZS13aXJlIHByb3RvY29sIHVzZWQgYmV0d2VlbiB0aGUgbmV0d29yayBsb2NrIG1hbmFnZXJzCisgKi8KKworcHJvZ3JhbSBOTE1fUFJPRyB7CisJdmVyc2lvbiBOTE1fVkVSUyB7CisKKwkJbmxtX3Rlc3RyZXMJTkxNX1RFU1Qoc3RydWN0IG5sbV90ZXN0YXJncykgPQkxOworCisJCW5sbV9yZXMJCU5MTV9MT0NLKHN0cnVjdCBubG1fbG9ja2FyZ3MpID0JMjsKKworCQlubG1fcmVzCQlOTE1fQ0FOQ0VMKHN0cnVjdCBubG1fY2FuY2FyZ3MpID0gMzsKKwkJbmxtX3JlcwkJTkxNX1VOTE9DSyhzdHJ1Y3QgbmxtX3VubG9ja2FyZ3MpID0JNDsKKworCQkvKgorCQkgKiByZW1vdGUgbG9jayBtYW5hZ2VyIGNhbGwtYmFjayB0byBncmFudCBsb2NrCisJCSAqLworCQlubG1fcmVzCQlOTE1fR1JBTlRFRChzdHJ1Y3QgbmxtX3Rlc3RhcmdzKT0gNTsKKwkJLyoKKwkJICogbWVzc2FnZSBwYXNzaW5nIHN0eWxlIG9mIHJlcXVlc3RpbmcgbG9jaworCQkgKi8KKwkJdm9pZAkJTkxNX1RFU1RfTVNHKHN0cnVjdCBubG1fdGVzdGFyZ3MpID0gNjsKKwkJdm9pZAkJTkxNX0xPQ0tfTVNHKHN0cnVjdCBubG1fbG9ja2FyZ3MpID0gNzsKKwkJdm9pZAkJTkxNX0NBTkNFTF9NU0coc3RydWN0IG5sbV9jYW5jYXJncykgPTg7CisJCXZvaWQJCU5MTV9VTkxPQ0tfTVNHKHN0cnVjdCBubG1fdW5sb2NrYXJncykgPSA5OworCQl2b2lkCQlOTE1fR1JBTlRFRF9NU0coc3RydWN0IG5sbV90ZXN0YXJncykgPSAxMDsKKwkJdm9pZAkJTkxNX1RFU1RfUkVTKG5sbV90ZXN0cmVzKSA9IDExOworCQl2b2lkCQlOTE1fTE9DS19SRVMobmxtX3JlcykgPSAxMjsKKwkJdm9pZAkJTkxNX0NBTkNFTF9SRVMobmxtX3JlcykgPSAxMzsKKwkJdm9pZAkJTkxNX1VOTE9DS19SRVMobmxtX3JlcykgPSAxNDsKKwkJdm9pZAkJTkxNX0dSQU5URURfUkVTKG5sbV9yZXMpID0gMTU7CisJfSA9IDE7CisKKwl2ZXJzaW9uIE5MTV9WRVJTWCB7CisJCW5sbV9zaGFyZXJlcwlOTE1fU0hBUkUobmxtX3NoYXJlYXJncykgPSAyMDsKKwkJbmxtX3NoYXJlcmVzCU5MTV9VTlNIQVJFKG5sbV9zaGFyZWFyZ3MpID0gMjE7CisJCW5sbV9yZXMJCU5MTV9OTV9MT0NLKG5sbV9sb2NrYXJncykgPSAyMjsKKwkJdm9pZAkJTkxNX0ZSRUVfQUxMKG5sbV9ub3RpZnkpID0gMjM7CisJfSA9IDM7CisKK30gPSAxMDAwMjE7CisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGNzdmMvcmV4LnggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL3JleC54Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0OWQ5ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL3JleC54CkBAIC0wLDAgKzEsMjI5IEBACisvKiBAKCMpcmV4LngJMi4xIDg4LzA4LzAxIDQuMCBSUENTUkMgKi8KKy8qIEAoIylyZXgueCAxLjMgODcvMDkvMTggQ29weXIgMTk4NyBTdW4gTWljcm8gKi8KKworLyoKKyAqIFN1biBSUEMgaXMgYSBwcm9kdWN0IG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYW5kIGlzIHByb3ZpZGVkIGZvcgorICogdW5yZXN0cmljdGVkIHVzZSBwcm92aWRlZCB0aGF0IHRoaXMgbGVnZW5kIGlzIGluY2x1ZGVkIG9uIGFsbCB0YXBlCisgKiBtZWRpYSBhbmQgYXMgYSBwYXJ0IG9mIHRoZSBzb2Z0d2FyZSBwcm9ncmFtIGluIHdob2xlIG9yIHBhcnQuICBVc2VycworICogbWF5IGNvcHkgb3IgbW9kaWZ5IFN1biBSUEMgd2l0aG91dCBjaGFyZ2UsIGJ1dCBhcmUgbm90IGF1dGhvcml6ZWQKKyAqIHRvIGxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBpdCB0byBhbnlvbmUgZWxzZSBleGNlcHQgYXMgcGFydCBvZiBhIHByb2R1Y3Qgb3IKKyAqIHByb2dyYW0gZGV2ZWxvcGVkIGJ5IHRoZSB1c2VyLgorICoKKyAqIFNVTiBSUEMgSVMgUFJPVklERUQgQVMgSVMgV0lUSCBOTyBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIElOQ0xVRElORyBUSEUKKyAqIFdBUlJBTlRJRVMgT0YgREVTSUdOLCBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSwgT1IgQVJJU0lORyBGUk9NIEEgQ09VUlNFIE9GIERFQUxJTkcsIFVTQUdFIE9SIFRSQURFIFBSQUNUSUNFLgorICoKKyAqIFN1biBSUEMgaXMgcHJvdmlkZWQgd2l0aCBubyBzdXBwb3J0IGFuZCB3aXRob3V0IGFueSBvYmxpZ2F0aW9uIG9uIHRoZQorICogcGFydCBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIHRvIGFzc2lzdCBpbiBpdHMgdXNlLCBjb3JyZWN0aW9uLAorICogbW9kaWZpY2F0aW9uIG9yIGVuaGFuY2VtZW50LgorICoKKyAqIFNVTiBNSUNST1NZU1RFTVMsIElOQy4gU0hBTEwgSEFWRSBOTyBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRQorICogSU5GUklOR0VNRU5UIE9GIENPUFlSSUdIVFMsIFRSQURFIFNFQ1JFVFMgT1IgQU5ZIFBBVEVOVFMgQlkgU1VOIFJQQworICogT1IgQU5ZIFBBUlQgVEhFUkVPRi4KKyAqCisgKiBJbiBubyBldmVudCB3aWxsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYmUgbGlhYmxlIGZvciBhbnkgbG9zdCByZXZlbnVlCisgKiBvciBwcm9maXRzIG9yIG90aGVyIHNwZWNpYWwsIGluZGlyZWN0IGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIGV2ZW4gaWYKKyAqIFN1biBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisgKgorICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogMjU1MCBHYXJjaWEgQXZlbnVlCisgKiBNb3VudGFpbiBWaWV3LCBDYWxpZm9ybmlhICA5NDA0MworICovCisKKy8qCisgKiBSZW1vdGUgZXhlY3V0aW9uIChyZXgpIHByb3RvY29sIHNwZWNpZmljYXRpb24KKyAqLworCitjb25zdCBTVFJJTkdTSVpFID0gMTAyNDsKK3R5cGVkZWYgc3RyaW5nIHJleHN0cmluZzwxMDI0PjsKKworLyoKKyAqIHZhbHVlcyB0byBwYXNzIHRvIFJFWFBST0NfU0lHTkFMCisgKi8KK2NvbnN0IFNJR0lOVCA9IDI7CS8qIGludGVycnVwdCAqLworCisvKgorICogVmFsdWVzIGZvciByc3RfZmxhZ3MsIGJlbG93CisgKi8KK2NvbnN0IFJFWF9JTlRFUkFDVElWRSA9IDE7CS8qIGludGVyYWN0aXZlIG1vZGUgKi8KKworc3RydWN0IHJleF9zdGFydCB7CisJcmV4c3RyaW5nIHJzdF9jbWQ8PjsJLyogbGlzdCBvZiBjb21tYW5kIGFuZCBhcmdzICovCisJcmV4c3RyaW5nIHJzdF9ob3N0OwkvKiB3b3JraW5nIGRpcmVjdG9yeSBob3N0IG5hbWUgKi8KKwlyZXhzdHJpbmcgcnN0X2ZzbmFtZTsJLyogd29ya2luZyBkaXJlY3RvcnkgZmlsZSBzeXN0ZW0gbmFtZSAqLworCXJleHN0cmluZyByc3RfZGlyd2l0aGluOy8qIHdvcmtpbmcgZGlyZWN0b3J5IHdpdGhpbiBmaWxlIHN5c3RlbSAqLworCXJleHN0cmluZyByc3RfZW52PD47CS8qIGxpc3Qgb2YgZW52aXJvbm1lbnQgKi8KKwl1bnNpZ25lZCBpbnQgcnN0X3BvcnQwOwkvKiBwb3J0IGZvciBzdGRpbiAqLworCXVuc2lnbmVkIGludCByc3RfcG9ydDE7CS8qIHBvcnQgZm9yIHN0ZG91dCAqLworCXVuc2lnbmVkIGludCByc3RfcG9ydDI7CS8qIHBvcnQgZm9yIHN0ZGVyciAqLworCXVuc2lnbmVkIGludCByc3RfZmxhZ3M7CS8qIG9wdGlvbnMgLSBzZWUgY29uc3QgYWJvdmUgKi8KK307CisKK3N0cnVjdCByZXhfcmVzdWx0IHsKKyAgIAlpbnQgcmx0X3N0YXQ7CQkvKiBpbnRlZ2VyIHN0YXR1cyBjb2RlICovCisJcmV4c3RyaW5nIHJsdF9tZXNzYWdlOwkvKiBzdHJpbmcgbWVzc2FnZSBmb3IgaHVtYW4gY29uc3VtcHRpb24gKi8KK307CisKKworc3RydWN0IHNndHR5YiB7CisJdW5zaWduZWQgZm91cjsJLyogYWx3YXlzIGVxdWFscyA0ICovCisJb3BhcXVlIGNoYXJzWzRdOworCS8qIGNoYXJzWzBdID09IGlucHV0IHNwZWVkICovCisJLyogY2hhcnNbMV0gPT0gb3V0cHV0IHNwZWVkICovCisJLyogY2hhcnNbMl0gPT0ga2lsbCBjaGFyYWN0ZXIgKi8KKwkvKiBjaGFyc1szXSA9PSBlcmFzZSBjaGFyYWN0ZXIgKi8KKwl1bnNpZ25lZCBmbGFnczsKK307CisvKiB2YWx1ZXMgZm9yIHNwZWVkcyBhYm92ZSAoYmF1ZCByYXRlcykgICovCitjb25zdCBCMCAgPSAwOworY29uc3QgQjUwID0gMTsKK2NvbnN0IEI3NSA9IDI7Citjb25zdCBCMTEwID0gMzsKK2NvbnN0IEIxMzQgPSA0OworY29uc3QgQjE1MCA9IDU7Citjb25zdCBCMjAwID0gNjsKK2NvbnN0IEIzMDAgPSA3OworY29uc3QgQjYwMCA9IDg7Citjb25zdCBCMTIwMCA9IDk7Citjb25zdCBCMTgwMCA9IDEwOworY29uc3QgQjI0MDAgPSAxMTsKK2NvbnN0IEI0ODAwID0gMTI7Citjb25zdCBCOTYwMCA9IDEzOworY29uc3QgQjE5MjAwID0gMTQ7Citjb25zdCBCMzg0MDAgPSAxNTsKKworLyogdmFsdWVzIGZvciBmbGFncyBhYm92ZSAqLworY29uc3QgVEFOREVNID0gMHgwMDAwMDAwMTsgLyogc2VuZCBzdG9wYyBvbiBvdXQgcSBmdWxsICovCitjb25zdCBDQlJFQUsgPSAweDAwMDAwMDAyOyAvKiBoYWxmLWNvb2tlZCBtb2RlICovCitjb25zdCBMQ0FTRSA9IDB4MDAwMDAwMDQ7IC8qIHNpbXVsYXRlIGxvd2VyIGNhc2UgKi8KK2NvbnN0IEVDSE8gPSAweDAwMDAwMDA4OyAvKiBlY2hvIGlucHV0ICovCitjb25zdCBDUk1PRCA9IDB4MDAwMDAwMTA7IC8qIG1hcCBcciB0byBcclxuIG9uIG91dHB1dCAqLworY29uc3QgUkFXID0gMHgwMDAwMDAyMDsgLyogbm8gaS9vIHByb2Nlc3NpbmcgKi8KK2NvbnN0IE9ERFAgPSAweDAwMDAwMDQwOyAvKiBnZXQvc2VuZCBvZGQgcGFyaXR5ICovCitjb25zdCBFVkVOUCA9IDB4MDAwMDAwODA7IC8qIGdldC9zZW5kIGV2ZW4gcGFyaXR5ICovCitjb25zdCBBTllQID0gMHgwMDAwMDBjMDsgLyogZ2V0IGFueSBwYXJpdHkvc2VuZCBub25lICovCitjb25zdCBOTERFTEFZID0gMHgwMDAwMDMwMDsgLyogXG4gZGVsYXkgKi8KK2NvbnN0ICBOTDAgPSAweDAwMDAwMDAwOworY29uc3QgIE5MMSA9IDB4MDAwMDAxMDA7IC8qIHR0eSAzNyAqLworY29uc3QgIE5MMiA9IDB4MDAwMDAyMDA7IC8qIHZ0MDUgKi8KK2NvbnN0ICBOTDMgPSAweDAwMDAwMzAwOworY29uc3QgVEJERUxBWSA9IDB4MDAwMDBjMDA7IC8qIGhvcml6b250YWwgdGFiIGRlbGF5ICovCitjb25zdCAgVEFCMCA9IDB4MDAwMDAwMDA7Citjb25zdCAgVEFCMSA9IDB4MDAwMDA0MDA7IC8qIHR0eSAzNyAqLworY29uc3QgIFRBQjIgPSAweDAwMDAwODAwOworY29uc3QgWFRBQlMgPSAweDAwMDAwYzAwOyAvKiBleHBhbmQgdGFicyBvbiBvdXRwdXQgKi8KK2NvbnN0IENSREVMQVkgPSAweDAwMDAzMDAwOyAvKiBcciBkZWxheSAqLworY29uc3QgIENSMCA9IDB4MDAwMDAwMDA7Citjb25zdCAgQ1IxID0gMHgwMDAwMTAwMDsgLyogdG4gMzAwICovCitjb25zdCAgQ1IyID0gMHgwMDAwMjAwMDsgLyogdHR5IDM3ICovCitjb25zdCAgQ1IzID0gMHgwMDAwMzAwMDsgLyogY29uY2VwdCAxMDAgKi8KK2NvbnN0IFZUREVMQVkgPSAweDAwMDA0MDAwOyAvKiB2ZXJ0aWNhbCB0YWIgZGVsYXkgKi8KK2NvbnN0ICBGRjAgPSAweDAwMDAwMDAwOworY29uc3QgIEZGMSA9IDB4MDAwMDQwMDA7IC8qIHR0eSAzNyAqLworY29uc3QgQlNERUxBWSA9IDB4MDAwMDgwMDA7IC8qIFxiIGRlbGF5ICovCitjb25zdCAgQlMwID0gMHgwMDAwMDAwMDsKK2NvbnN0ICBCUzEgPSAweDAwMDA4MDAwOworY29uc3QgQ1JUQlMgPSAweDAwMDEwMDAwOyAvKiBkbyBiYWNrc3BhY2luZyBmb3IgY3J0ICovCitjb25zdCBQUlRFUkEgPSAweDAwMDIwMDAwOyAvKiBcIC4uLiAvIGVyYXNlICovCitjb25zdCBDUlRFUkEgPSAweDAwMDQwMDAwOyAvKiAiIFxiICIgdG8gd2lwZSBvdXQgY2hhciAqLworY29uc3QgVElMREUgPSAweDAwMDgwMDAwOyAvKiBoYXplbHRpbmUgdGlsZGUga2x1ZGdlICovCitjb25zdCBNRE1CVUYgPSAweDAwMTAwMDAwOyAvKiBzdGFydC9zdG9wIG91dHB1dCBvbiBjYXJyaWVyIGludHIgKi8KK2NvbnN0IExJVE9VVCA9IDB4MDAyMDAwMDA7IC8qIGxpdGVyYWwgb3V0cHV0ICovCitjb25zdCBUT1NUT1AgPSAweDAwNDAwMDAwOyAvKiBTSUdUVE9VIG9uIGJhY2tncm91bmQgb3V0cHV0ICovCitjb25zdCBGTFVTSE8gPSAweDAwODAwMDAwOyAvKiBmbHVzaCBvdXRwdXQgdG8gdGVybWluYWwgKi8KK2NvbnN0IE5PSEFORyA9IDB4MDEwMDAwMDA7IC8qIG5vIFNJR0hVUCBvbiBjYXJyaWVyIGRyb3AgKi8KK2NvbnN0IEwwMDEwMDAgPSAweDAyMDAwMDAwOworY29uc3QgQ1JUS0lMID0gMHgwNDAwMDAwMDsgLyoga2lsbCBsaW5lIHdpdGggIiBcYiAiICovCitjb25zdCBQQVNTOCA9IDB4MDgwMDAwMDA7Citjb25zdCBDVExFQ0ggPSAweDEwMDAwMDAwOyAvKiBlY2hvIGNvbnRyb2wgY2hhcnMgYXMgXlggKi8KK2NvbnN0IFBFTkRJTiA9IDB4MjAwMDAwMDA7IC8qIHRwLT50X3Jhd3EgbmVlZHMgcmVyZWFkICovCitjb25zdCBERUNDVFEgPSAweDQwMDAwMDAwOyAvKiBvbmx5IF5RIHN0YXJ0cyBhZnRlciBeUyAqLworY29uc3QgTk9GTFNIID0gMHg4MDAwMDAwMDsgLyogbm8gb3V0cHV0IGZsdXNoIG9uIHNpZ25hbCAqLworCitzdHJ1Y3QgdGNoYXJzIHsKKwl1bnNpZ25lZCBzaXg7CS8qIGFsd2F5cyBlcXVhbHMgNiAqLworCW9wYXF1ZSBjaGFyc1s2XTsKKwkvKiBjaGFyc1swXSA9PSBpbnRlcnJ1cHQgY2hhciAqLworCS8qIGNoYXJzWzFdID09IHF1aXQgY2hhciAqLworCS8qIGNoYXJzWzJdID09IHN0YXJ0IG91dHB1dCBjaGFyICovCisJLyogY2hhcnNbM10gPT0gc3RvcCBvdXRwdXQgY2hhciAqLworCS8qIGNoYXJzWzRdID09IGVuZC1vZi1maWxlIGNoYXIgKi8KKwkvKiBjaGFyc1s1XSA9PSBpbnB1dCBkZWxpbWl0ZXIgKGxpa2UgbmwpICovCit9OworCitzdHJ1Y3QgbHRjaGFycyB7CisJdW5zaWduZWQgc2l4OwkvKiBhbHdheXMgZXF1YWxzIDYgKi8KKwlvcGFxdWUgY2hhcnNbNl07CisJLyogY2hhcnNbMF0gPT0gc3RvcCBwcm9jZXNzIHNpZ25hbCAqLworCS8qIGNoYXJzWzFdID09IGRlbGF5ZWQgc3RvcCBwcm9jZXNzIHNpZ25hbCAqLworCS8qIGNoYXJzWzJdID09IHJlcHJpbnQgbGluZSAqLworCS8qIGNoYXJzWzNdID09IGZsdXNoIG91dHB1dCAqLworCS8qIGNoYXJzWzRdID09IHdvcmQgZXJhc2UgKi8KKwkvKiBjaGFyc1s1XSA9PSBsaXRlcmFsIG5leHQgY2hhcmFjdGVyICovCisJdW5zaWduZWQgbW9kZTsKK307CisKK3N0cnVjdCByZXhfdHR5c2l6ZSB7CisJaW50IHRzX2xpbmVzOworCWludCB0c19jb2xzOworfTsKKworc3RydWN0IHJleF90dHltb2RlIHsKKyAgICBzZ3R0eWIgYmFzaWM7ICAgIC8qIHN0YW5kYXJkIHVuaXggdHR5IGZsYWdzICovCisgICAgdGNoYXJzIG1vcmU7IC8qIGludGVycnVwdCwga2lsbCBjaGFyYWN0ZXJzLCBldGMuICovCisgICAgbHRjaGFycyB5ZXRtb3JlOyAvKiBzcGVjaWFsIEJlcmtlbGV5IGNoYXJhY3RlcnMgKi8KKyAgICB1bnNpZ25lZCBhbmRtb3JlOyAgICAgLyogYW5kIEJlcmtlbGV5IG1vZGVzICovCit9OworCisvKiB2YWx1ZXMgZm9yIGFuZG1vcmUgYWJvdmUgKi8KK2NvbnN0IExDUlRCUyA9IDB4MDAwMTsJLyogZG8gYmFja3NwYWNpbmcgZm9yIGNydCAqLworY29uc3QgTFBSVEVSQSA9IDB4MDAwMjsJLyogXCAuLi4gLyBlcmFzZSAqLworY29uc3QgTENSVEVSQSA9IDB4MDAwNDsJLyogIiBcYiAiIHRvIHdpcGUgb3V0IGNoYXIgKi8KK2NvbnN0IExUSUxERSA9IDB4MDAwODsJLyogaGF6ZWx0aW5lIHRpbGRlIGtsdWRnZSAqLworY29uc3QgTE1ETUJVRiA9IDB4MDAxMDsJLyogc3RhcnQvc3RvcCBvdXRwdXQgb24gY2FycmllciBpbnRyICovCitjb25zdCBMTElUT1VUID0gMHgwMDIwOwkvKiBsaXRlcmFsIG91dHB1dCAqLworY29uc3QgTFRPU1RPUCA9IDB4MDA0MDsJLyogU0lHVFRPVSBvbiBiYWNrZ3JvdW5kIG91dHB1dCAqLworY29uc3QgTEZMVVNITyA9IDB4MDA4MDsJLyogZmx1c2ggb3V0cHV0IHRvIHRlcm1pbmFsICovCitjb25zdCBMTk9IQU5HID0gMHgwMTAwOwkvKiBubyBTSUdIVVAgb24gY2FycmllciBkcm9wICovCitjb25zdCBMTDAwMTAwMCA9IDB4MDIwMDsKK2NvbnN0IExDUlRLSUwgPSAweDA0MDA7CS8qIGtpbGwgbGluZSB3aXRoICIgXGIgIiAqLworY29uc3QgTFBBU1M4ID0gMHgwODAwOworY29uc3QgTENUTEVDSCA9IDB4MTAwMDsJLyogZWNobyBjb250cm9sIGNoYXJzIGFzIF5YICovCitjb25zdCBMUEVORElOID0gMHgyMDAwOwkvKiBuZWVkcyByZXJlYWQgKi8KK2NvbnN0IExERUNDVFEgPSAweDQwMDA7CS8qIG9ubHkgXlEgc3RhcnRzIGFmdGVyIF5TICovCitjb25zdCBMTk9GTFNIID0gMHg4MDAwOwkvKiBubyBvdXRwdXQgZmx1c2ggb24gc2lnbmFsICovCisKK3Byb2dyYW0gUkVYUFJPRyB7CisJdmVyc2lvbiBSRVhWRVJTIHsKKworCQkvKgorCQkgKiBTdGFydCByZW1vdGUgZXhlY3V0aW9uCisJCSAqLworCQlyZXhfcmVzdWx0CisJCVJFWFBST0NfU1RBUlQocmV4X3N0YXJ0KSA9IDE7CisKKwkJLyoKKwkJICogV2FpdCBmb3IgcmVtb3RlIGV4ZWN1dGlvbiB0byB0ZXJtaW5hdGUKKwkJICovCisJCXJleF9yZXN1bHQKKwkJUkVYUFJPQ19XQUlUKHZvaWQpID0gMjsKKworCQkvKgorCQkgKiBTZW5kIHR0eSBtb2RlcworCQkgKi8KKwkJdm9pZAorCQlSRVhQUk9DX01PREVTKHJleF90dHltb2RlKSA9IDM7CisKKwkJLyoKKwkJICogU2VuZCB3aW5kb3cgc2l6ZSBjaGFuZ2UKKwkJICovCisJCXZvaWQKKwkJUkVYUFJPQ19XSU5DSChyZXhfdHR5c2l6ZSkgPSA0OworCisJCS8qCisJCSAqIFNlbmQgb3RoZXIgc2lnbmFsCisJCSAqLworCQl2b2lkCisJCVJFWFBST0NfU0lHTkFMKGludCkgPSA1OworCX0gPSAxOworfSA9IDEwMDAxNzsKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGNzdmMvcnF1b3RhLnggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL3JxdW90YS54Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyODg4ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL3JxdW90YS54CkBAIC0wLDAgKzEsNjEgQEAKKy8qIEAoIylycXVvdGEueAkyLjEgODgvMDgvMDEgNC4wIFJQQ1NSQyAqLworLyogQCgjKXJxdW90YS54IDEuMiA4Ny8wOS8yMCBDb3B5ciAxOTg3IFN1biBNaWNybyAqLworCisvKgorICogUmVtb3RlIHF1b3RhIHByb3RvY29sCisgKiBSZXF1aXJlcyB1bml4IGF1dGhlbnRpY2F0aW9uCisgKi8KKworY29uc3QgUlFfUEFUSExFTiA9IDEwMjQ7CisKK3N0cnVjdCBnZXRxdW90YV9hcmdzIHsKKwlzdHJpbmcgZ3FhX3BhdGhwPFJRX1BBVEhMRU4+OyAgCS8qIHBhdGggdG8gZmlsZXN5c3RlbSBvZiBpbnRlcmVzdCAqLworCWludCBncWFfdWlkOwkgICAgICAgIAkvKiBpbnF1aXJlIGFib3V0IHF1b3RhIGZvciB1aWQgKi8KK307CisKKy8qCisgKiByZW1vdGUgcXVvdGEgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBycXVvdGEgeworCWludCBycV9ic2l6ZTsJCQkvKiBibG9jayBzaXplIGZvciBibG9jayBjb3VudHMgKi8KKwlib29sIHJxX2FjdGl2ZTsgIAkJLyogaW5kaWNhdGVzIHdoZXRoZXIgcXVvdGEgaXMgYWN0aXZlICovCisJdW5zaWduZWQgaW50IHJxX2JoYXJkbGltaXQ7CS8qIGFic29sdXRlIGxpbWl0IG9uIGRpc2sgYmxrcyBhbGxvYyAqLworCXVuc2lnbmVkIGludCBycV9ic29mdGxpbWl0OwkvKiBwcmVmZXJyZWQgbGltaXQgb24gZGlzayBibGtzICovCisJdW5zaWduZWQgaW50IHJxX2N1cmJsb2NrczsJLyogY3VycmVudCBibG9jayBjb3VudCAqLworCXVuc2lnbmVkIGludCBycV9maGFyZGxpbWl0OwkvKiBhYnNvbHV0ZSBsaW1pdCBvbiBhbGxvY2F0ZWQgZmlsZXMgKi8KKwl1bnNpZ25lZCBpbnQgcnFfZnNvZnRsaW1pdDsJLyogcHJlZmVycmVkIGZpbGUgbGltaXQgKi8KKwl1bnNpZ25lZCBpbnQgcnFfY3VyZmlsZXM7CS8qIGN1cnJlbnQgIyBhbGxvY2F0ZWQgZmlsZXMgKi8KKwl1bnNpZ25lZCBpbnQgcnFfYnRpbWVsZWZ0OwkvKiB0aW1lIGxlZnQgZm9yIGV4Y2Vzc2l2ZSBkaXNrIHVzZSAqLworCXVuc2lnbmVkIGludCBycV9mdGltZWxlZnQ7CS8qIHRpbWUgbGVmdCBmb3IgZXhjZXNzaXZlIGZpbGVzICovCit9OwkKKworZW51bSBncXJfc3RhdHVzIHsKKwlRX09LID0gMSwJCS8qIHF1b3RhIHJldHVybmVkICovCisJUV9OT1FVT1RBID0gMiwgIAkvKiBub3F1b3RhIGZvciB1aWQgKi8KKwlRX0VQRVJNID0gMwkJLyogbm8gcGVybWlzc2lvbiB0byBhY2Nlc3MgcXVvdGEgKi8KK307CisKK3VuaW9uIGdldHF1b3RhX3JzbHQgc3dpdGNoIChncXJfc3RhdHVzIHN0YXR1cykgeworY2FzZSBRX09LOgorCXJxdW90YSBncXJfcnF1b3RhOwkvKiB2YWxpZCBpZiBzdGF0dXMgPT0gUV9PSyAqLworY2FzZSBRX05PUVVPVEE6CisJdm9pZDsKK2Nhc2UgUV9FUEVSTToKKwl2b2lkOworfTsKKworcHJvZ3JhbSBSUVVPVEFQUk9HIHsKKwl2ZXJzaW9uIFJRVU9UQVZFUlMgeworCQkvKgorCQkgKiBHZXQgYWxsIHF1b3RhcworCQkgKi8KKwkJZ2V0cXVvdGFfcnNsdAorCQlSUVVPVEFQUk9DX0dFVFFVT1RBKGdldHF1b3RhX2FyZ3MpID0gMTsKKworCQkvKgorCSAJICogR2V0IGFjdGl2ZSBxdW90YXMgb25seQorCQkgKi8KKwkJZ2V0cXVvdGFfcnNsdAorCQlSUVVPVEFQUk9DX0dFVEFDVElWRVFVT1RBKGdldHF1b3RhX2FyZ3MpID0gMjsKKwl9ID0gMTsKK30gPSAxMDAwMTE7CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL3JzdGF0LnggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL3JzdGF0LngKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM2N2M0MwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGNzdmMvcnN0YXQueApAQCAtMCwwICsxLDE0NSBAQAorLyogQCgjKXJzdGF0LngJMi4yIDg4LzA4LzAxIDQuMCBSUENTUkMgKi8KKy8qIEAoIylyc3RhdC54IDEuMiA4Ny8wOS8xOCBDb3B5ciAxOTg3IFN1biBNaWNybyAqLworCisvKgorICogU3VuIFJQQyBpcyBhIHByb2R1Y3Qgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBhbmQgaXMgcHJvdmlkZWQgZm9yCisgKiB1bnJlc3RyaWN0ZWQgdXNlIHByb3ZpZGVkIHRoYXQgdGhpcyBsZWdlbmQgaXMgaW5jbHVkZWQgb24gYWxsIHRhcGUKKyAqIG1lZGlhIGFuZCBhcyBhIHBhcnQgb2YgdGhlIHNvZnR3YXJlIHByb2dyYW0gaW4gd2hvbGUgb3IgcGFydC4gIFVzZXJzCisgKiBtYXkgY29weSBvciBtb2RpZnkgU3VuIFJQQyB3aXRob3V0IGNoYXJnZSwgYnV0IGFyZSBub3QgYXV0aG9yaXplZAorICogdG8gbGljZW5zZSBvciBkaXN0cmlidXRlIGl0IHRvIGFueW9uZSBlbHNlIGV4Y2VwdCBhcyBwYXJ0IG9mIGEgcHJvZHVjdCBvcgorICogcHJvZ3JhbSBkZXZlbG9wZWQgYnkgdGhlIHVzZXIuCisgKiAKKyAqIFNVTiBSUEMgSVMgUFJPVklERUQgQVMgSVMgV0lUSCBOTyBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIElOQ0xVRElORyBUSEUKKyAqIFdBUlJBTlRJRVMgT0YgREVTSUdOLCBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSwgT1IgQVJJU0lORyBGUk9NIEEgQ09VUlNFIE9GIERFQUxJTkcsIFVTQUdFIE9SIFRSQURFIFBSQUNUSUNFLgorICogCisgKiBTdW4gUlBDIGlzIHByb3ZpZGVkIHdpdGggbm8gc3VwcG9ydCBhbmQgd2l0aG91dCBhbnkgb2JsaWdhdGlvbiBvbiB0aGUKKyAqIHBhcnQgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiB0byBhc3Npc3QgaW4gaXRzIHVzZSwgY29ycmVjdGlvbiwKKyAqIG1vZGlmaWNhdGlvbiBvciBlbmhhbmNlbWVudC4KKyAqIAorICogU1VOIE1JQ1JPU1lTVEVNUywgSU5DLiBTSEFMTCBIQVZFIE5PIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFCisgKiBJTkZSSU5HRU1FTlQgT0YgQ09QWVJJR0hUUywgVFJBREUgU0VDUkVUUyBPUiBBTlkgUEFURU5UUyBCWSBTVU4gUlBDCisgKiBPUiBBTlkgUEFSVCBUSEVSRU9GLgorICogCisgKiBJbiBubyBldmVudCB3aWxsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYmUgbGlhYmxlIGZvciBhbnkgbG9zdCByZXZlbnVlCisgKiBvciBwcm9maXRzIG9yIG90aGVyIHNwZWNpYWwsIGluZGlyZWN0IGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIGV2ZW4gaWYKKyAqIFN1biBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisgKiAKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIDI1NTAgR2FyY2lhIEF2ZW51ZQorICogTW91bnRhaW4gVmlldywgQ2FsaWZvcm5pYSAgOTQwNDMKKyAqLworCisvKgorICogR2F0aGVyIHN0YXRpc3RpY3Mgb24gcmVtb3RlIG1hY2hpbmVzCisgKi8KKworI2lmZGVmIFJQQ19IRFIKKworJSNpZm5kZWYgRlNDQUxFCislLyoKKyUgKiBTY2FsZSBmYWN0b3IgZm9yIHNjYWxlZCBpbnRlZ2VycyB1c2VkIHRvIGNvdW50IGxvYWQgYXZlcmFnZXMuCislICovCislI2RlZmluZSBGU0hJRlQgIDggICAgICAgICAgICAgICAvKiBiaXRzIHRvIHJpZ2h0IG9mIGZpeGVkIGJpbmFyeSBwb2ludCAqLworJSNkZWZpbmUgRlNDQUxFICAoMTw8RlNISUZUKQorJQorJSNlbmRpZiAvKiBuZGVmIEZTQ0FMRSAqLworCisjZW5kaWYgLyogZGVmIFJQQ19IRFIgKi8KKworY29uc3QgQ1BVU1RBVEVTID0gNDsKK2NvbnN0IERLX05EUklWRSA9IDQ7CisKKy8qCisgKiBHTVQgc2luY2UgMDowMCwgSmFudWFyeSAxLCAxOTcwCisgKi8KK3N0cnVjdCByc3RhdF90aW1ldmFsIHsKKwl1bnNpZ25lZCBpbnQgdHZfc2VjOwkvKiBzZWNvbmRzICovCisJdW5zaWduZWQgaW50IHR2X3VzZWM7CS8qIGFuZCBtaWNyb3NlY29uZHMgKi8KK307CisKK3N0cnVjdCBzdGF0c3RpbWUgewkJCQkvKiBSU1RBVFZFUlNfVElNRSAqLworCWludCBjcF90aW1lW0NQVVNUQVRFU107CisJaW50IGRrX3hmZXJbREtfTkRSSVZFXTsKKwl1bnNpZ25lZCBpbnQgdl9wZ3BnaW47CS8qIHRoZXNlIGFyZSBjdW11bGF0aXZlIHN1bSAqLworCXVuc2lnbmVkIGludCB2X3BncGdvdXQ7CisJdW5zaWduZWQgaW50IHZfcHN3cGluOworCXVuc2lnbmVkIGludCB2X3Bzd3BvdXQ7CisJdW5zaWduZWQgaW50IHZfaW50cjsKKwlpbnQgaWZfaXBhY2tldHM7CisJaW50IGlmX2llcnJvcnM7CisJaW50IGlmX29lcnJvcnM7CisJaW50IGlmX2NvbGxpc2lvbnM7CisJdW5zaWduZWQgaW50IHZfc3d0Y2g7CisJaW50IGF2ZW5ydW5bM107ICAgICAgICAgLyogc2NhbGVkIGJ5IEZTQ0FMRSAqLworCXJzdGF0X3RpbWV2YWwgYm9vdHRpbWU7CisJcnN0YXRfdGltZXZhbCBjdXJ0aW1lOworCWludCBpZl9vcGFja2V0czsKK307CisKK3N0cnVjdCBzdGF0c3N3dGNoIHsJCQkvKiBSU1RBVFZFUlNfU1dUQ0ggKi8KKwlpbnQgY3BfdGltZVtDUFVTVEFURVNdOworCWludCBka194ZmVyW0RLX05EUklWRV07CisJdW5zaWduZWQgaW50IHZfcGdwZ2luOwkvKiB0aGVzZSBhcmUgY3VtdWxhdGl2ZSBzdW0gKi8KKwl1bnNpZ25lZCBpbnQgdl9wZ3Bnb3V0OworCXVuc2lnbmVkIGludCB2X3Bzd3BpbjsKKwl1bnNpZ25lZCBpbnQgdl9wc3dwb3V0OworCXVuc2lnbmVkIGludCB2X2ludHI7CisJaW50IGlmX2lwYWNrZXRzOworCWludCBpZl9pZXJyb3JzOworCWludCBpZl9vZXJyb3JzOworCWludCBpZl9jb2xsaXNpb25zOworCXVuc2lnbmVkIGludCB2X3N3dGNoOworCXVuc2lnbmVkIGludCBhdmVucnVuWzNdOy8qIHNjYWxlZCBieSBGU0NBTEUgKi8KKwlyc3RhdF90aW1ldmFsIGJvb3R0aW1lOworCWludCBpZl9vcGFja2V0czsKK307CisKK3N0cnVjdCBzdGF0cyB7CQkJCS8qIFJTVEFUVkVSU19PUklHICovCisJaW50IGNwX3RpbWVbQ1BVU1RBVEVTXTsKKwlpbnQgZGtfeGZlcltES19ORFJJVkVdOworCXVuc2lnbmVkIGludCB2X3BncGdpbjsJLyogdGhlc2UgYXJlIGN1bXVsYXRpdmUgc3VtICovCisJdW5zaWduZWQgaW50IHZfcGdwZ291dDsKKwl1bnNpZ25lZCBpbnQgdl9wc3dwaW47CisJdW5zaWduZWQgaW50IHZfcHN3cG91dDsKKwl1bnNpZ25lZCBpbnQgdl9pbnRyOworCWludCBpZl9pcGFja2V0czsKKwlpbnQgaWZfaWVycm9yczsKKwlpbnQgaWZfb2Vycm9yczsKKwlpbnQgaWZfY29sbGlzaW9uczsKKwlpbnQgaWZfb3BhY2tldHM7Cit9OworCisKK3Byb2dyYW0gUlNUQVRQUk9HIHsKKwkvKgorCSAqIE5ld2VzdCB2ZXJzaW9uIGluY2x1ZGVzIGN1cnJlbnQgdGltZSBhbmQgY29udGV4dCBzd2l0Y2hpbmcgaW5mbworCSAqLworCXZlcnNpb24gUlNUQVRWRVJTX1RJTUUgeworCQlzdGF0c3RpbWUKKwkJUlNUQVRQUk9DX1NUQVRTKHZvaWQpID0gMTsKKworCQl1bnNpZ25lZCBpbnQKKwkJUlNUQVRQUk9DX0hBVkVESVNLKHZvaWQpID0gMjsKKwl9ID0gMzsKKwkvKgorCSAqIERvZXMgbm90IGhhdmUgY3VycmVudCB0aW1lCisJICovCisJdmVyc2lvbiBSU1RBVFZFUlNfU1dUQ0ggeworCQlzdGF0c3N3dGNoCisJCVJTVEFUUFJPQ19TVEFUUyh2b2lkKSA9IDE7CisKKwkJdW5zaWduZWQgaW50CisJCVJTVEFUUFJPQ19IQVZFRElTSyh2b2lkKSA9IDI7CisJfSA9IDI7CisJLyoKKwkgKiBPbGQgdmVyc2lvbiBoYXMgbm8gaW5mbyBhYm91dCBjdXJyZW50IHRpbWUgb3IgY29udGV4dCBzd2l0Y2hpbmcKKwkgKi8KKwl2ZXJzaW9uIFJTVEFUVkVSU19PUklHIHsKKwkJc3RhdHMKKwkJUlNUQVRQUk9DX1NUQVRTKHZvaWQpID0gMTsKKworCQl1bnNpZ25lZCBpbnQKKwkJUlNUQVRQUk9DX0hBVkVESVNLKHZvaWQpID0gMjsKKwl9ID0gMTsKK30gPSAxMDAwMDE7CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL3J1c2Vycy54IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwY3N2Yy9ydXNlcnMueApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzJjMjkzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwY3N2Yy9ydXNlcnMueApAQCAtMCwwICsxLDI0MCBAQAorLyoKKyAqIFN1biBSUEMgaXMgYSBwcm9kdWN0IG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYW5kIGlzIHByb3ZpZGVkIGZvcgorICogdW5yZXN0cmljdGVkIHVzZSBwcm92aWRlZCB0aGF0IHRoaXMgbGVnZW5kIGlzIGluY2x1ZGVkIG9uIGFsbCB0YXBlCisgKiBtZWRpYSBhbmQgYXMgYSBwYXJ0IG9mIHRoZSBzb2Z0d2FyZSBwcm9ncmFtIGluIHdob2xlIG9yIHBhcnQuICBVc2VycworICogbWF5IGNvcHkgb3IgbW9kaWZ5IFN1biBSUEMgd2l0aG91dCBjaGFyZ2UsIGJ1dCBhcmUgbm90IGF1dGhvcml6ZWQKKyAqIHRvIGxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBpdCB0byBhbnlvbmUgZWxzZSBleGNlcHQgYXMgcGFydCBvZiBhIHByb2R1Y3Qgb3IKKyAqIHByb2dyYW0gZGV2ZWxvcGVkIGJ5IHRoZSB1c2VyLgorICoKKyAqIFNVTiBSUEMgSVMgUFJPVklERUQgQVMgSVMgV0lUSCBOTyBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIElOQ0xVRElORyBUSEUKKyAqIFdBUlJBTlRJRVMgT0YgREVTSUdOLCBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSwgT1IgQVJJU0lORyBGUk9NIEEgQ09VUlNFIE9GIERFQUxJTkcsIFVTQUdFIE9SIFRSQURFIFBSQUNUSUNFLgorICoKKyAqIFN1biBSUEMgaXMgcHJvdmlkZWQgd2l0aCBubyBzdXBwb3J0IGFuZCB3aXRob3V0IGFueSBvYmxpZ2F0aW9uIG9uIHRoZQorICogcGFydCBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIHRvIGFzc2lzdCBpbiBpdHMgdXNlLCBjb3JyZWN0aW9uLAorICogbW9kaWZpY2F0aW9uIG9yIGVuaGFuY2VtZW50LgorICoKKyAqIFNVTiBNSUNST1NZU1RFTVMsIElOQy4gU0hBTEwgSEFWRSBOTyBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRQorICogSU5GUklOR0VNRU5UIE9GIENPUFlSSUdIVFMsIFRSQURFIFNFQ1JFVFMgT1IgQU5ZIFBBVEVOVFMgQlkgU1VOIFJQQworICogT1IgQU5ZIFBBUlQgVEhFUkVPRi4KKyAqCisgKiBJbiBubyBldmVudCB3aWxsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYmUgbGlhYmxlIGZvciBhbnkgbG9zdCByZXZlbnVlCisgKiBvciBwcm9maXRzIG9yIG90aGVyIHNwZWNpYWwsIGluZGlyZWN0IGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIGV2ZW4gaWYKKyAqIFN1biBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisgKgorICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogMjU1MCBHYXJjaWEgQXZlbnVlCisgKiBNb3VudGFpbiBWaWV3LCBDYWxpZm9ybmlhICA5NDA0MworICovCisKKyUvKgorJSAqIEZpbmQgb3V0IGFib3V0IHJlbW90ZSB1c2VycworJSAqLworCitjb25zdCBSVVNFUlNfTUFYVVNFUkxFTiA9IDMyOworY29uc3QgUlVTRVJTX01BWExJTkVMRU4gPSAzMjsKK2NvbnN0IFJVU0VSU19NQVhIT1NUTEVOID0gMjU3OworCitzdHJ1Y3QgcnVzZXJzX3V0bXAgeworCXN0cmluZyB1dF91c2VyPFJVU0VSU19NQVhVU0VSTEVOPjsJLyogYWthIHV0X25hbWUgKi8KKwlzdHJpbmcgdXRfbGluZTxSVVNFUlNfTUFYTElORUxFTj47CS8qIGRldmljZSAqLworCXN0cmluZyB1dF9ob3N0PFJVU0VSU19NQVhIT1NUTEVOPjsJLyogaG9zdCB1c2VyIGxvZ2dlZCBvbiBmcm9tICovCisJaW50IHV0X3R5cGU7CQkJCS8qIHR5cGUgb2YgZW50cnkgKi8KKwlpbnQgdXRfdGltZTsJCQkJLyogdGltZSBlbnRyeSB3YXMgbWFkZSAqLworCXVuc2lnbmVkIGludCB1dF9pZGxlOwkJCS8qIG1pbnV0ZXMgaWRsZSAqLworfTsKKwordHlwZWRlZiBydXNlcnNfdXRtcCB1dG1wX2FycmF5PD47CisKKyNpZmRlZiBSUENfSERSCislCislLyoKKyUgKiBWYWx1ZXMgZm9yIHV0X3R5cGUgZmllbGQgYWJvdmUuCislICovCisjZW5kaWYKK2NvbnN0CVJVU0VSU19FTVBUWSA9IDA7Citjb25zdAlSVVNFUlNfUlVOX0xWTCA9IDE7Citjb25zdAlSVVNFUlNfQk9PVF9USU1FID0gMjsKK2NvbnN0CVJVU0VSU19PTERfVElNRSA9IDM7Citjb25zdAlSVVNFUlNfTkVXX1RJTUUgPSA0OworY29uc3QJUlVTRVJTX0lOSVRfUFJPQ0VTUyA9IDU7Citjb25zdAlSVVNFUlNfTE9HSU5fUFJPQ0VTUyA9IDY7Citjb25zdAlSVVNFUlNfVVNFUl9QUk9DRVNTID0gNzsKK2NvbnN0CVJVU0VSU19ERUFEX1BST0NFU1MgPSA4OworY29uc3QJUlVTRVJTX0FDQ09VTlRJTkcgPSA5OworCitwcm9ncmFtIFJVU0VSU1BST0cgeworCisJdmVyc2lvbiBSVVNFUlNWRVJTXzMgeworCQlpbnQKKwkJUlVTRVJTUFJPQ19OVU0odm9pZCkgPSAxOworCisJCXV0bXBfYXJyYXkKKwkJUlVTRVJTUFJPQ19OQU1FUyh2b2lkKSA9IDI7CisKKwkJdXRtcF9hcnJheQorCQlSVVNFUlNQUk9DX0FMTE5BTUVTKHZvaWQpID0gMzsKKwl9ID0gMzsKKworfSA9IDEwMDAwMjsKKworI2lmZGVmIFJQQ19IRFIKKyUKKyUKKyUjaWZkZWYJX19jcGx1c3BsdXMKKyVleHRlcm4gIkMiIHsKKyUjZW5kaWYKKyUKKyUjaW5jbHVkZSA8cnBjL3hkci5oPgorJQorJS8qCislICogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmVzIGFyZSB1c2VkIGJ5IHZlcnNpb24gMiBvZiB0aGUgcnVzZXJzZCBwcm90b2NvbC4KKyUgKiBUaGV5IHdlcmUgbm90IGRldmVsb3BlZCB3aXRoIHJwY2dlbiwgc28gdGhleSBkbyBub3QgYXBwZWFyIGFzIFJQQ0wuCislICovCislCislI2RlZmluZQlSVVNFUlNWRVJTX0lETEUgMgorJSNkZWZpbmUJUlVTRVJTVkVSUyAzCQkvKiBjdXJyZW50IHZlcnNpb24gKi8KKyUjZGVmaW5lCU1BWFVTRVJTIDEwMAorJQorJS8qCislICogVGhpcyBpcyB0aGUgc3RydWN0dXJlIHVzZWQgaW4gdmVyc2lvbiAyIG9mIHRoZSBydXNlcnNkIFJQQyBzZXJ2aWNlLgorJSAqIEl0IGNvcnJlc3BvbmRzIHRvIHRoZSB1dG1wIHN0cnVjdHVyZSBmb3IgQlNEIHN5c3RlbXMuCislICovCislc3RydWN0IHJ1X3V0bXAgeworJQljaGFyCXV0X2xpbmVbOF07CQkvKiB0dHkgbmFtZSAqLworJQljaGFyCXV0X25hbWVbOF07CQkvKiB1c2VyIGlkICovCislCWNoYXIJdXRfaG9zdFsxNl07CQkvKiBob3N0IG5hbWUsIGlmIHJlbW90ZSAqLworJQlsb25nIGludCB1dF90aW1lOwkJLyogdGltZSBvbiAqLworJX07CislCislc3RydWN0IHV0bXBhcnIgeworJSAgICAgICBzdHJ1Y3QgcnVfdXRtcCAqKnV0YV9hcnI7CislICAgICAgIGludCB1dGFfY250OworJX07CisldHlwZWRlZiBzdHJ1Y3QgdXRtcGFyciB1dG1wYXJyOworJQorJWV4dGVybiBib29sX3QgeGRyX3V0bXBhcnIgKFhEUiAqeGRycywgc3RydWN0IHV0bXBhcnIgKm9ianApIF9fVEhST1c7CislCislc3RydWN0IHV0bXBpZGxlIHsKKyUJc3RydWN0IHJ1X3V0bXAgdWlfdXRtcDsKKyUJdW5zaWduZWQgaW50IHVpX2lkbGU7CislfTsKKyUKKyVzdHJ1Y3QgdXRtcGlkbGVhcnIgeworJQlzdHJ1Y3QgdXRtcGlkbGUgKip1aWFfYXJyOworJQlpbnQgdWlhX2NudDsKKyV9OworJQorJWV4dGVybiBib29sX3QgeGRyX3V0bXBpZGxlYXJyIChYRFIgKnhkcnMsIHN0cnVjdCB1dG1waWRsZWFyciAqb2JqcCkgX19USFJPVzsKKyUKKyUjaWZkZWYJX19jcGx1c3BsdXMKKyV9CislI2VuZGlmCisjZW5kaWYKKworCisjaWZkZWYJUlBDX1hEUgorJWJvb2xfdCB4ZHJfdXRtcCAoWERSICp4ZHJzLCBzdHJ1Y3QgcnVfdXRtcCAqb2JqcCk7CislCislYm9vbF90CisleGRyX3V0bXAoeGRycywgb2JqcCkKKyUJWERSICp4ZHJzOworJQlzdHJ1Y3QgcnVfdXRtcCAqb2JqcDsKKyV7CislCS8qIFNpbmNlIHRoZSBmaWVsZHMgYXJlIGNoYXIgZm9vIFt4eHhdLCB3ZSBzaG91bGQgbm90IGZyZWUgdGhlbS4gKi8KKyUJaWYgKHhkcnMtPnhfb3AgIT0gWERSX0ZSRUUpCislCXsKKyUJCWNoYXIgKnB0cjsKKyUJCXVuc2lnbmVkIGludCBzaXplOworJQkJcHRyID0gb2JqcC0+dXRfbGluZTsKKyUJCXNpemUgPSBzaXplb2YgKG9ianAtPnV0X2xpbmUpOworJQkJaWYgKCF4ZHJfYnl0ZXMgKHhkcnMsICZwdHIsICZzaXplLCBzaXplKSkgeworJQkJCXJldHVybiAoRkFMU0UpOworJQkJfQorJQkJcHRyID0gb2JqcC0+dXRfbmFtZTsKKyUJCXNpemUgPSBzaXplb2YgKG9ianAtPnV0X25hbWUpOworJQkJaWYgKCF4ZHJfYnl0ZXMgKHhkcnMsICZwdHIsICZzaXplLCBzaXplKSkgeworJQkJCXJldHVybiAoRkFMU0UpOworJQkJfQorJQkJcHRyID0gb2JqcC0+dXRfaG9zdDsKKyUJCXNpemUgPSBzaXplb2YgKG9ianAtPnV0X2hvc3QpOworJQkJaWYgKCF4ZHJfYnl0ZXMgKHhkcnMsICZwdHIsICZzaXplLCBzaXplKSkgeworJQkJCXJldHVybiAoRkFMU0UpOworJQkJfQorJQl9CislCWlmICgheGRyX2xvbmcoeGRycywgJm9ianAtPnV0X3RpbWUpKSB7CislCQlyZXR1cm4gKEZBTFNFKTsKKyUJfQorJQlyZXR1cm4gKFRSVUUpOworJX0KKyUKKyVib29sX3QgeGRyX3V0bXBwdHIoWERSICp4ZHJzLCBzdHJ1Y3QgcnVfdXRtcCAqKm9ianBwKTsKKyUKKyVib29sX3QKKyV4ZHJfdXRtcHB0cih4ZHJzLCBvYmpwcCkKKyUJWERSICp4ZHJzOworJQlzdHJ1Y3QgcnVfdXRtcCAqKm9ianBwOworJXsKKyUJaWYgKCF4ZHJfcmVmZXJlbmNlKHhkcnMsIChjaGFyICoqKSBvYmpwcCwgc2l6ZW9mIChzdHJ1Y3QgcnVfdXRtcCksCislCQkJICAgKHhkcnByb2NfdCkgeGRyX3V0bXApKSB7CislCQlyZXR1cm4gKEZBTFNFKTsKKyUJfQorJQlyZXR1cm4gKFRSVUUpOworJX0KKyUKKyVib29sX3QKKyV4ZHJfdXRtcGFycih4ZHJzLCBvYmpwKQorJQlYRFIgKnhkcnM7CislCXN0cnVjdCB1dG1wYXJyICpvYmpwOworJXsKKyUJaWYgKCF4ZHJfYXJyYXkoeGRycywgKGNoYXIgKiopJm9ianAtPnV0YV9hcnIsICh1X2ludCAqKSZvYmpwLT51dGFfY250LAorJQkJICAgICAgIE1BWFVTRVJTLCBzaXplb2Yoc3RydWN0IHJ1X3V0bXAgKiksCislCQkgICAgICAgKHhkcnByb2NfdCkgeGRyX3V0bXBwdHIpKSB7CislCQlyZXR1cm4gKEZBTFNFKTsKKyUJfQorJQlyZXR1cm4gKFRSVUUpOworJX0KKyUKKyVib29sX3QgeGRyX3V0bXBpZGxlKFhEUiAqeGRycywgc3RydWN0IHV0bXBpZGxlICpvYmpwKTsKKyUKKyVib29sX3QKKyV4ZHJfdXRtcGlkbGUoeGRycywgb2JqcCkKKyUJWERSICp4ZHJzOworJQlzdHJ1Y3QgdXRtcGlkbGUgKm9ianA7CisleworJQlpZiAoIXhkcl91dG1wKHhkcnMsICZvYmpwLT51aV91dG1wKSkgeworJQkJcmV0dXJuIChGQUxTRSk7CislCX0KKyUJaWYgKCF4ZHJfdV9pbnQoeGRycywgJm9ianAtPnVpX2lkbGUpKSB7CislCQlyZXR1cm4gKEZBTFNFKTsKKyUJfQorJQlyZXR1cm4gKFRSVUUpOworJX0KKyUKKyVib29sX3QgeGRyX3V0bXBpZGxlcHRyKFhEUiAqeGRycywgc3RydWN0IHV0bXBpZGxlICoqb2JqcCk7CislCislYm9vbF90CisleGRyX3V0bXBpZGxlcHRyKHhkcnMsIG9ianBwKQorJQlYRFIgKnhkcnM7CislCXN0cnVjdCB1dG1waWRsZSAqKm9ianBwOworJXsKKyUJaWYgKCF4ZHJfcmVmZXJlbmNlKHhkcnMsIChjaGFyICoqKSBvYmpwcCwgc2l6ZW9mIChzdHJ1Y3QgdXRtcGlkbGUpLAorJQkJCSAgICh4ZHJwcm9jX3QpIHhkcl91dG1waWRsZSkpIHsKKyUJCXJldHVybiAoRkFMU0UpOworJQl9CislCXJldHVybiAoVFJVRSk7CislfQorJQorJWJvb2xfdAorJXhkcl91dG1waWRsZWFycih4ZHJzLCBvYmpwKQorJQlYRFIgKnhkcnM7CislCXN0cnVjdCB1dG1waWRsZWFyciAqb2JqcDsKKyV7CislCWlmICgheGRyX2FycmF5KHhkcnMsIChjaGFyICoqKSZvYmpwLT51aWFfYXJyLCAodV9pbnQgKikmb2JqcC0+dWlhX2NudCwKKyUJCSAgICAgICBNQVhVU0VSUywgc2l6ZW9mKHN0cnVjdCB1dG1waWRsZSAqKSwKKyUJCSAgICAgICAoeGRycHJvY190KSB4ZHJfdXRtcGlkbGVwdHIpKSB7CislCQlyZXR1cm4gKEZBTFNFKTsKKyUJfQorJQlyZXR1cm4gKFRSVUUpOworJX0KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwY3N2Yy9zbV9pbnRlci54IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwY3N2Yy9zbV9pbnRlci54Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYmI3MDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL3NtX2ludGVyLngKQEAgLTAsMCArMSwxMTYgQEAKKy8qIEAoIylzbV9pbnRlci54CTIuMiA4OC8wOC8wMSA0LjAgUlBDU1JDICovCisvKiBAKCMpc21faW50ZXIueCAxLjcgODcvMDYvMjQgQ29weXIgMTk4NyBTdW4gTWljcm8gKi8KKworLyoKKyAqIFN1biBSUEMgaXMgYSBwcm9kdWN0IG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYW5kIGlzIHByb3ZpZGVkIGZvcgorICogdW5yZXN0cmljdGVkIHVzZSBwcm92aWRlZCB0aGF0IHRoaXMgbGVnZW5kIGlzIGluY2x1ZGVkIG9uIGFsbCB0YXBlCisgKiBtZWRpYSBhbmQgYXMgYSBwYXJ0IG9mIHRoZSBzb2Z0d2FyZSBwcm9ncmFtIGluIHdob2xlIG9yIHBhcnQuICBVc2VycworICogbWF5IGNvcHkgb3IgbW9kaWZ5IFN1biBSUEMgd2l0aG91dCBjaGFyZ2UsIGJ1dCBhcmUgbm90IGF1dGhvcml6ZWQKKyAqIHRvIGxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBpdCB0byBhbnlvbmUgZWxzZSBleGNlcHQgYXMgcGFydCBvZiBhIHByb2R1Y3Qgb3IKKyAqIHByb2dyYW0gZGV2ZWxvcGVkIGJ5IHRoZSB1c2VyLgorICoKKyAqIFNVTiBSUEMgSVMgUFJPVklERUQgQVMgSVMgV0lUSCBOTyBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIElOQ0xVRElORyBUSEUKKyAqIFdBUlJBTlRJRVMgT0YgREVTSUdOLCBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSwgT1IgQVJJU0lORyBGUk9NIEEgQ09VUlNFIE9GIERFQUxJTkcsIFVTQUdFIE9SIFRSQURFIFBSQUNUSUNFLgorICoKKyAqIFN1biBSUEMgaXMgcHJvdmlkZWQgd2l0aCBubyBzdXBwb3J0IGFuZCB3aXRob3V0IGFueSBvYmxpZ2F0aW9uIG9uIHRoZQorICogcGFydCBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIHRvIGFzc2lzdCBpbiBpdHMgdXNlLCBjb3JyZWN0aW9uLAorICogbW9kaWZpY2F0aW9uIG9yIGVuaGFuY2VtZW50LgorICoKKyAqIFNVTiBNSUNST1NZU1RFTVMsIElOQy4gU0hBTEwgSEFWRSBOTyBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRQorICogSU5GUklOR0VNRU5UIE9GIENPUFlSSUdIVFMsIFRSQURFIFNFQ1JFVFMgT1IgQU5ZIFBBVEVOVFMgQlkgU1VOIFJQQworICogT1IgQU5ZIFBBUlQgVEhFUkVPRi4KKyAqCisgKiBJbiBubyBldmVudCB3aWxsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYmUgbGlhYmxlIGZvciBhbnkgbG9zdCByZXZlbnVlCisgKiBvciBwcm9maXRzIG9yIG90aGVyIHNwZWNpYWwsIGluZGlyZWN0IGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIGV2ZW4gaWYKKyAqIFN1biBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisgKgorICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogMjU1MCBHYXJjaWEgQXZlbnVlCisgKiBNb3VudGFpbiBWaWV3LCBDYWxpZm9ybmlhICA5NDA0MworICovCisKKy8qCisgKiBTdGF0dXMgbW9uaXRvciBwcm90b2NvbCBzcGVjaWZpY2F0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDE5ODYgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICoKKyAqLworCisKK3Byb2dyYW0gU01fUFJPRyB7CisJdmVyc2lvbiBTTV9WRVJTICB7CisJCS8qIHJlc19zdGF0ID0gc3RhdF9zdWNjIGlmIHN0YXR1cyBtb25pdG9yIGFncmVlcyB0byBtb25pdG9yICovCisJCS8qIHJlc19zdGF0ID0gc3RhdF9mYWlsIGlmIHN0YXR1cyBtb25pdG9yIGNhbm5vdCBtb25pdG9yICovCisJCS8qIGlmIHJlc19zdGF0ID09IHN0YXRfc3VjYywgc3RhdGUgPSBzdGF0ZSBudW1iZXIgb2Ygc2l0ZSBzbV9uYW1lICovCisJCXN0cnVjdCBzbV9zdGF0X3JlcwkJCSBTTV9TVEFUKHN0cnVjdCBzbV9uYW1lKSA9IDE7CisKKwkJLyogcmVzX3N0YXQgPSBzdGF0X3N1Y2MgaWYgc3RhdHVzIG1vbml0b3IgYWdyZWVzIHRvIG1vbml0b3IgKi8KKwkJLyogcmVzX3N0YXQgPSBzdGF0X2ZhaWwgaWYgc3RhdHVzIG1vbml0b3IgY2Fubm90IG1vbml0b3IgKi8KKwkJLyogc3RhdCBjb25zaXN0cyBvZiBzdGF0ZSBudW1iZXIgb2YgbG9jYWwgc2l0ZSAqLworCQlzdHJ1Y3Qgc21fc3RhdF9yZXMJCQkgU01fTU9OKHN0cnVjdCBtb24pID0gMjsKKworCQkvKiBzdGF0IGNvbnNpc3RzIG9mIHN0YXRlIG51bWJlciBvZiBsb2NhbCBzaXRlICovCisJCXN0cnVjdCBzbV9zdGF0CQkJCSBTTV9VTk1PTihzdHJ1Y3QgbW9uX2lkKSA9IDM7CisKKwkJLyogc3RhdCBjb25zaXN0cyBvZiBzdGF0ZSBudW1iZXIgb2YgbG9jYWwgc2l0ZSAqLworCQlzdHJ1Y3Qgc21fc3RhdAkJCQkgU01fVU5NT05fQUxMKHN0cnVjdCBteV9pZCkgPSA0OworCisJCXZvaWQJCQkJCSBTTV9TSU1VX0NSQVNIKHZvaWQpID0gNTsKKworCX0gPSAxOworfSA9IDEwMDAyNDsKKworY29uc3QJU01fTUFYU1RSTEVOID0gMTAyNDsKKworc3RydWN0IHNtX25hbWUgeworCXN0cmluZyBtb25fbmFtZTxTTV9NQVhTVFJMRU4+OworfTsKKworc3RydWN0IG15X2lkIHsKKwlzdHJpbmcJIG15X25hbWU8U01fTUFYU1RSTEVOPjsJCS8qIG5hbWUgb2YgdGhlIHNpdGUgaW5pdGlhdGluZyB0aGUgbW9uaXRvcmluZyByZXF1ZXN0Ki8KKwlpbnQJbXlfcHJvZzsJCQkvKiBycGMgcHJvZ3JhbSAjIG9mIHRoZSByZXF1ZXN0aW5nIHByb2Nlc3MgKi8KKwlpbnQJbXlfdmVyczsJCQkvKiBycGMgdmVyc2lvbiAjIG9mIHRoZSByZXF1ZXN0aW5nIHByb2Nlc3MgKi8KKwlpbnQJbXlfcHJvYzsJCQkvKiBycGMgcHJvY2VkdXJlICMgb2YgdGhlIHJlcXVlc3RpbmcgcHJvY2VzcyAqLworfTsKKworc3RydWN0IG1vbl9pZCB7CisJc3RyaW5nCW1vbl9uYW1lPFNNX01BWFNUUkxFTj47CQkvKiBuYW1lIG9mIHRoZSBzaXRlIHRvIGJlIG1vbml0b3JlZCAqLworCXN0cnVjdCBteV9pZCBteV9pZDsKK307CisKKworc3RydWN0IG1vbnsKKwlzdHJ1Y3QgbW9uX2lkIG1vbl9pZDsKKwlvcGFxdWUgcHJpdlsxNl07IAkJLyogcHJpdmF0ZSBpbmZvcm1hdGlvbiB0byBzdG9yZSBhdCBtb25pdG9yIGZvciByZXF1ZXN0aW5nIHByb2Nlc3MgKi8KK307CisKKworLyoKKyAqIHN0YXRlICMgb2Ygc3RhdHVzIG1vbml0b3IgbW9ub3RvbmljYWxseSBpbmNyZWFzZXMgZWFjaCB0aW1lCisgKiBzdGF0dXMgb2YgdGhlIHNpdGUgY2hhbmdlczoKKyAqIGFuIGV2ZW4gbnVtYmVyICg+PSAwKSBpbmRpY2F0ZXMgdGhlIHNpdGUgaXMgZG93biBhbmQKKyAqIGFuIG9kZCBudW1iZXIgKD4gMCkgaW5kaWNhdGVzIHRoZSBzaXRlIGlzIHVwOworICovCitzdHJ1Y3Qgc21fc3RhdCB7CisJaW50IHN0YXRlOwkJLyogc3RhdGUgIyBvZiBzdGF0dXMgbW9uaXRvciAqLworfTsKKworZW51bSByZXMgeworCXN0YXRfc3VjYyA9IDAsCQkvKiBzdGF0dXMgbW9uaXRvciBhZ3JlZXMgdG8gbW9uaXRvciAqLworCXN0YXRfZmFpbCA9IDEJCS8qIHN0YXR1cyBtb25pdG9yIGNhbm5vdCBtb25pdG9yICovCit9OworCitzdHJ1Y3Qgc21fc3RhdF9yZXMgeworCXJlcyByZXNfc3RhdDsKKwlpbnQgc3RhdGU7Cit9OworCisvKgorICogc3RydWN0dXJlIG9mIHRoZSBzdGF0dXMgbWVzc2FnZSBzZW50IGJhY2sgYnkgdGhlIHN0YXR1cyBtb25pdG9yCisgKiB3aGVuIG1vbml0b3Igc2l0ZSBzdGF0dXMgY2hhbmdlcworICovCitzdHJ1Y3Qgc3RhdHVzIHsKKwlzdHJpbmcgbW9uX25hbWU8U01fTUFYU1RSTEVOPjsKKwlpbnQgc3RhdGU7CisJb3BhcXVlIHByaXZbMTZdOwkJLyogc3RvcmVkIHByaXZhdGUgaW5mb3JtYXRpb24gKi8KK307CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL3NwcmF5LnggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL3NwcmF5LngKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI0MmYwYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGNzdmMvc3ByYXkueApAQCAtMCwwICsxLDg0IEBACisvKiBAKCMpc3ByYXkueAkyLjEgODgvMDgvMDEgNC4wIFJQQ1NSQyAqLworLyogQCgjKXNwcmF5LnggMS4yIDg3LzA5LzE4IENvcHlyIDE5ODcgU3VuIE1pY3JvICovCisKKy8qCisgKiBTdW4gUlBDIGlzIGEgcHJvZHVjdCBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGFuZCBpcyBwcm92aWRlZCBmb3IKKyAqIHVucmVzdHJpY3RlZCB1c2UgcHJvdmlkZWQgdGhhdCB0aGlzIGxlZ2VuZCBpcyBpbmNsdWRlZCBvbiBhbGwgdGFwZQorICogbWVkaWEgYW5kIGFzIGEgcGFydCBvZiB0aGUgc29mdHdhcmUgcHJvZ3JhbSBpbiB3aG9sZSBvciBwYXJ0LiAgVXNlcnMKKyAqIG1heSBjb3B5IG9yIG1vZGlmeSBTdW4gUlBDIHdpdGhvdXQgY2hhcmdlLCBidXQgYXJlIG5vdCBhdXRob3JpemVkCisgKiB0byBsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgaXQgdG8gYW55b25lIGVsc2UgZXhjZXB0IGFzIHBhcnQgb2YgYSBwcm9kdWN0IG9yCisgKiBwcm9ncmFtIGRldmVsb3BlZCBieSB0aGUgdXNlci4KKyAqIAorICogU1VOIFJQQyBJUyBQUk9WSURFRCBBUyBJUyBXSVRIIE5PIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgSU5DTFVESU5HIFRIRQorICogV0FSUkFOVElFUyBPRiBERVNJR04sIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFLCBPUiBBUklTSU5HIEZST00gQSBDT1VSU0UgT0YgREVBTElORywgVVNBR0UgT1IgVFJBREUgUFJBQ1RJQ0UuCisgKiAKKyAqIFN1biBSUEMgaXMgcHJvdmlkZWQgd2l0aCBubyBzdXBwb3J0IGFuZCB3aXRob3V0IGFueSBvYmxpZ2F0aW9uIG9uIHRoZQorICogcGFydCBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIHRvIGFzc2lzdCBpbiBpdHMgdXNlLCBjb3JyZWN0aW9uLAorICogbW9kaWZpY2F0aW9uIG9yIGVuaGFuY2VtZW50LgorICogCisgKiBTVU4gTUlDUk9TWVNURU1TLCBJTkMuIFNIQUxMIEhBVkUgTk8gTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUKKyAqIElORlJJTkdFTUVOVCBPRiBDT1BZUklHSFRTLCBUUkFERSBTRUNSRVRTIE9SIEFOWSBQQVRFTlRTIEJZIFNVTiBSUEMKKyAqIE9SIEFOWSBQQVJUIFRIRVJFT0YuCisgKiAKKyAqIEluIG5vIGV2ZW50IHdpbGwgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBiZSBsaWFibGUgZm9yIGFueSBsb3N0IHJldmVudWUKKyAqIG9yIHByb2ZpdHMgb3Igb3RoZXIgc3BlY2lhbCwgaW5kaXJlY3QgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgZXZlbiBpZgorICogU3VuIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKyAqIAorICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogMjU1MCBHYXJjaWEgQXZlbnVlCisgKiBNb3VudGFpbiBWaWV3LCBDYWxpZm9ybmlhICA5NDA0MworICovCisKKy8qCisgKiBTcHJheSBhIHNlcnZlciB3aXRoIHBhY2tldHMKKyAqIFVzZWZ1bCBmb3IgdGVzdGluZyBmbGFraW5lc3Mgb2YgbmV0d29yayBpbnRlcmZhY2VzCisgKi8KKworY29uc3QgU1BSQVlNQVggPSA4ODQ1OwkvKiBtYXggYW1vdW50IGNhbiBzcHJheSAqLworCisvKgorICogR01UIHNpbmNlIDA6MDAsIDEgSmFudWFyeSAxOTcwCisgKi8KK3N0cnVjdCBzcHJheXRpbWV2YWwgeworCXVuc2lnbmVkIGludCBzZWM7CisJdW5zaWduZWQgaW50IHVzZWM7Cit9OworCisvKgorICogc3ByYXkgc3RhdGlzdGljcworICovCitzdHJ1Y3Qgc3ByYXljdW11bCB7CisJdW5zaWduZWQgaW50IGNvdW50ZXI7CisJc3ByYXl0aW1ldmFsIGNsb2NrOworfTsKKworLyoKKyAqIHNwcmF5IGRhdGEKKyAqLwordHlwZWRlZiBvcGFxdWUgc3ByYXlhcnI8U1BSQVlNQVg+OworCitwcm9ncmFtIFNQUkFZUFJPRyB7CisJdmVyc2lvbiBTUFJBWVZFUlMgeworCQkvKgorCQkgKiBKdXN0IHRocm93IGF3YXkgdGhlIGRhdGEgYW5kIGluY3JlbWVudCB0aGUgY291bnRlcgorCQkgKiBUaGlzIGNhbGwgbmV2ZXIgcmV0dXJucywgc28gdGhlIGNsaWVudCBzaG91bGQgYWx3YXlzIAorCQkgKiB0aW1lIGl0IG91dC4KKwkJICovCisJCXZvaWQKKwkJU1BSQVlQUk9DX1NQUkFZKHNwcmF5YXJyKSA9IDE7CisKKwkJLyoKKwkJICogR2V0IHRoZSB2YWx1ZSBvZiB0aGUgY291bnRlciBhbmQgZWxhcHNlZCB0aW1lICBzaW5jZQorCQkgKiBsYXN0IENMRUFSLgorCQkgKi8KKwkJc3ByYXljdW11bAkKKwkJU1BSQVlQUk9DX0dFVCh2b2lkKSA9IDI7CisKKwkJLyoKKwkJICogQ2xlYXIgdGhlIGNvdW50ZXIgYW5kIHJlc2V0IHRoZSBlbGFwc2VkIHRpbWUKKwkJICovCisJCXZvaWQKKwkJU1BSQVlQUk9DX0NMRUFSKHZvaWQpID0gMzsKKwl9ID0gMTsKK30gPSAxMDAwMTI7CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL3lwLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL3lwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZjMTNiOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGNzdmMveXAuaApAQCAtMCwwICsxLDMzNyBAQAorLyoKKyAqIFN1biBSUEMgaXMgYSBwcm9kdWN0IG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYW5kIGlzIHByb3ZpZGVkIGZvcgorICogdW5yZXN0cmljdGVkIHVzZSBwcm92aWRlZCB0aGF0IHRoaXMgbGVnZW5kIGlzIGluY2x1ZGVkIG9uIGFsbCB0YXBlCisgKiBtZWRpYSBhbmQgYXMgYSBwYXJ0IG9mIHRoZSBzb2Z0d2FyZSBwcm9ncmFtIGluIHdob2xlIG9yIHBhcnQuICBVc2VycworICogbWF5IGNvcHkgb3IgbW9kaWZ5IFN1biBSUEMgd2l0aG91dCBjaGFyZ2UsIGJ1dCBhcmUgbm90IGF1dGhvcml6ZWQKKyAqIHRvIGxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBpdCB0byBhbnlvbmUgZWxzZSBleGNlcHQgYXMgcGFydCBvZiBhIHByb2R1Y3Qgb3IKKyAqIHByb2dyYW0gZGV2ZWxvcGVkIGJ5IHRoZSB1c2VyLgorICoKKyAqIFNVTiBSUEMgSVMgUFJPVklERUQgQVMgSVMgV0lUSCBOTyBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIElOQ0xVRElORyBUSEUKKyAqIFdBUlJBTlRJRVMgT0YgREVTSUdOLCBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSwgT1IgQVJJU0lORyBGUk9NIEEgQ09VUlNFIE9GIERFQUxJTkcsIFVTQUdFIE9SIFRSQURFIFBSQUNUSUNFLgorICoKKyAqIFN1biBSUEMgaXMgcHJvdmlkZWQgd2l0aCBubyBzdXBwb3J0IGFuZCB3aXRob3V0IGFueSBvYmxpZ2F0aW9uIG9uIHRoZQorICogcGFydCBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIHRvIGFzc2lzdCBpbiBpdHMgdXNlLCBjb3JyZWN0aW9uLAorICogbW9kaWZpY2F0aW9uIG9yIGVuaGFuY2VtZW50LgorICoKKyAqIFNVTiBNSUNST1NZU1RFTVMsIElOQy4gU0hBTEwgSEFWRSBOTyBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRQorICogSU5GUklOR0VNRU5UIE9GIENPUFlSSUdIVFMsIFRSQURFIFNFQ1JFVFMgT1IgQU5ZIFBBVEVOVFMgQlkgU1VOIFJQQworICogT1IgQU5ZIFBBUlQgVEhFUkVPRi4KKyAqCisgKiBJbiBubyBldmVudCB3aWxsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYmUgbGlhYmxlIGZvciBhbnkgbG9zdCByZXZlbnVlCisgKiBvciBwcm9maXRzIG9yIG90aGVyIHNwZWNpYWwsIGluZGlyZWN0IGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIGV2ZW4gaWYKKyAqIFN1biBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisgKgorICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogMjU1MCBHYXJjaWEgQXZlbnVlCisgKiBNb3VudGFpbiBWaWV3LCBDYWxpZm9ybmlhICA5NDA0MworICovCisKKyNpZm5kZWYgX19SUENTVkNfWVBfSF9fCisjZGVmaW5lIF9fUlBDU1ZDX1lQX0hfXworCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxycGMvcnBjLmg+CisKKyNkZWZpbmUgWVBNQVhSRUNPUkQgMTAyNAorI2RlZmluZSBZUE1BWERPTUFJTiA2NAorI2RlZmluZSBZUE1BWE1BUCA2NAorI2RlZmluZSBZUE1BWFBFRVIgNjQKKworZW51bSB5cHN0YXQgeworCVlQX1RSVUUgPSAxLAorCVlQX05PTU9SRSA9IDIsCisJWVBfRkFMU0UgPSAwLAorCVlQX05PTUFQID0gLTEsCisJWVBfTk9ET00gPSAtMiwKKwlZUF9OT0tFWSA9IC0zLAorCVlQX0JBRE9QID0gLTQsCisJWVBfQkFEREIgPSAtNSwKKwlZUF9ZUEVSUiA9IC02LAorCVlQX0JBREFSR1MgPSAtNywKKwlZUF9WRVJTID0gLTgsCit9OwordHlwZWRlZiBlbnVtIHlwc3RhdCB5cHN0YXQ7CisKK2VudW0geXB4ZnJzdGF0IHsKKwlZUFhGUl9TVUNDID0gMSwKKwlZUFhGUl9BR0UgPSAyLAorCVlQWEZSX05PTUFQID0gLTEsCisJWVBYRlJfTk9ET00gPSAtMiwKKwlZUFhGUl9SU1JDID0gLTMsCisJWVBYRlJfUlBDID0gLTQsCisJWVBYRlJfTUFERFIgPSAtNSwKKwlZUFhGUl9ZUEVSUiA9IC02LAorCVlQWEZSX0JBREFSR1MgPSAtNywKKwlZUFhGUl9EQk0gPSAtOCwKKwlZUFhGUl9GSUxFID0gLTksCisJWVBYRlJfU0tFVyA9IC0xMCwKKwlZUFhGUl9DTEVBUiA9IC0xMSwKKwlZUFhGUl9GT1JDRSA9IC0xMiwKKwlZUFhGUl9YRlJFUlIgPSAtMTMsCisJWVBYRlJfUkVGVVNFRCA9IC0xNCwKK307Cit0eXBlZGVmIGVudW0geXB4ZnJzdGF0IHlweGZyc3RhdDsKKwordHlwZWRlZiBjaGFyICpkb21haW5uYW1lOwordHlwZWRlZiBjaGFyICptYXBuYW1lOwordHlwZWRlZiBjaGFyICpwZWVybmFtZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1X2ludCBrZXlkYXRfbGVuOworICBjaGFyICprZXlkYXRfdmFsOworfSBrZXlkYXQ7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdV9pbnQgdmFsZGF0X2xlbjsKKyAgY2hhciAqdmFsZGF0X3ZhbDsKK30gdmFsZGF0OworCitzdHJ1Y3QgeXBtYXBfcGFybXMgeworICBkb21haW5uYW1lIGRvbWFpbjsKKyAgbWFwbmFtZSBtYXA7CisgIHVfaW50IG9yZGVybnVtOworICBwZWVybmFtZSBwZWVyOworfTsKK3R5cGVkZWYgc3RydWN0IHlwbWFwX3Bhcm1zIHlwbWFwX3Bhcm1zOworCitzdHJ1Y3QgeXByZXFfa2V5IHsKKyAgZG9tYWlubmFtZSBkb21haW47CisgIG1hcG5hbWUgbWFwOworICBrZXlkYXQga2V5OworfTsKK3R5cGVkZWYgc3RydWN0IHlwcmVxX2tleSB5cHJlcV9rZXk7CisKK3N0cnVjdCB5cHJlcV9ub2tleSB7CisgIGRvbWFpbm5hbWUgZG9tYWluOworICBtYXBuYW1lIG1hcDsKK307Cit0eXBlZGVmIHN0cnVjdCB5cHJlcV9ub2tleSB5cHJlcV9ub2tleTsKKworc3RydWN0IHlwcmVxX3hmciB7CisgIHlwbWFwX3Bhcm1zIG1hcF9wYXJtczsKKyAgdV9pbnQgdHJhbnNpZDsKKyAgdV9pbnQgcHJvZzsKKyAgdV9pbnQgcG9ydDsKK307Cit0eXBlZGVmIHN0cnVjdCB5cHJlcV94ZnIgeXByZXFfeGZyOworCitzdHJ1Y3QgeXByZXNwX3ZhbCB7CisgIHlwc3RhdCBzdGF0OworICB2YWxkYXQgdmFsOworfTsKK3R5cGVkZWYgc3RydWN0IHlwcmVzcF92YWwgeXByZXNwX3ZhbDsKKworc3RydWN0IHlwcmVzcF9rZXlfdmFsIHsKKyAgeXBzdGF0IHN0YXQ7CisjaWZkZWYgU1RVUElEX1NVTl9CVUcKKyAgLyogVGhpcyBpcyB0aGUgZm9ybSBhcyBkaXN0cmlidXRlZCBieSBTdW4uICBCdXQgZXZlbiB0aGUgU3VuIE5JUworICAgICBzZXJ2ZXJzIGV4cGVjdCB0aGUgdmFsdWVzIGluIHRoZSBvdGhlciBvcmRlci4gIFNvIHRoZWlyCisgICAgIGltcGxlbWVudGF0aW9uIHNvbWVob3cgbXVzdCBjaGFuZ2UgdGhlIG9yZGVyIGludGVybmFsbHkuICBXZQorICAgICBkb24ndCB3YW50IHRvIGZvbGxvdyB0aGlzIGJhZCBleGFtcGxlIHNpbmNlIHRoZSB1c2VyIHNob3VsZCBiZQorICAgICBhYmxlIHRvIHVzZSBycGNnZW4gb24gdGhpcyBmaWxlLiAgKi8KKyAga2V5ZGF0IGtleTsKKyAgdmFsZGF0IHZhbDsKKyNlbHNlCisgIHZhbGRhdCB2YWw7CisgIGtleWRhdCBrZXk7CisjZW5kaWYKK307Cit0eXBlZGVmIHN0cnVjdCB5cHJlc3Bfa2V5X3ZhbCB5cHJlc3Bfa2V5X3ZhbDsKKworc3RydWN0IHlwcmVzcF9tYXN0ZXIgeworICB5cHN0YXQgc3RhdDsKKyAgcGVlcm5hbWUgcGVlcjsKK307Cit0eXBlZGVmIHN0cnVjdCB5cHJlc3BfbWFzdGVyIHlwcmVzcF9tYXN0ZXI7CisKK3N0cnVjdCB5cHJlc3Bfb3JkZXIgeworICB5cHN0YXQgc3RhdDsKKyAgdV9pbnQgb3JkZXJudW07Cit9OwordHlwZWRlZiBzdHJ1Y3QgeXByZXNwX29yZGVyIHlwcmVzcF9vcmRlcjsKKworc3RydWN0IHlwcmVzcF9hbGwgeworICBib29sX3QgbW9yZTsKKyAgdW5pb24geworICAgIHlwcmVzcF9rZXlfdmFsIHZhbDsKKyAgfSB5cHJlc3BfYWxsX3U7Cit9OwordHlwZWRlZiBzdHJ1Y3QgeXByZXNwX2FsbCB5cHJlc3BfYWxsOworCitzdHJ1Y3QgeXByZXNwX3hmciB7CisgIHVfaW50IHRyYW5zaWQ7CisgIHlweGZyc3RhdCB4ZnJzdGF0OworfTsKK3R5cGVkZWYgc3RydWN0IHlwcmVzcF94ZnIgeXByZXNwX3hmcjsKKworc3RydWN0IHlwbWFwbGlzdCB7CisgIG1hcG5hbWUgbWFwOworICBzdHJ1Y3QgeXBtYXBsaXN0ICpuZXh0OworfTsKK3R5cGVkZWYgc3RydWN0IHlwbWFwbGlzdCB5cG1hcGxpc3Q7CisKK3N0cnVjdCB5cHJlc3BfbWFwbGlzdCB7CisgIHlwc3RhdCBzdGF0OworICB5cG1hcGxpc3QgKm1hcHM7Cit9OwordHlwZWRlZiBzdHJ1Y3QgeXByZXNwX21hcGxpc3QgeXByZXNwX21hcGxpc3Q7CisKK2VudW0geXBwdXNoX3N0YXR1cyB7CisgIFlQUFVTSF9TVUNDID0gMSwKKyAgWVBQVVNIX0FHRSA9IDIsCisgIFlQUFVTSF9OT01BUCA9IC0xLAorICBZUFBVU0hfTk9ET00gPSAtMiwKKyAgWVBQVVNIX1JTUkMgPSAtMywKKyAgWVBQVVNIX1JQQyA9IC00LAorICBZUFBVU0hfTUFERFIgPSAtNSwKKyAgWVBQVVNIX1lQRVJSID0gLTYsCisgIFlQUFVTSF9CQURBUkdTID0gLTcsCisgIFlQUFVTSF9EQk0gPSAtOCwKKyAgWVBQVVNIX0ZJTEUgPSAtOSwKKyAgWVBQVVNIX1NLRVcgPSAtMTAsCisgIFlQUFVTSF9DTEVBUiA9IC0xMSwKKyAgWVBQVVNIX0ZPUkNFID0gLTEyLAorICBZUFBVU0hfWEZSRVJSID0gLTEzLAorICBZUFBVU0hfUkVGVVNFRCA9IC0xNCwKK307Cit0eXBlZGVmIGVudW0geXBwdXNoX3N0YXR1cyB5cHB1c2hfc3RhdHVzOworCitzdHJ1Y3QgeXBwdXNocmVzcF94ZnIgeworICB1X2ludCB0cmFuc2lkOworICB5cHB1c2hfc3RhdHVzIHN0YXR1czsKK307Cit0eXBlZGVmIHN0cnVjdCB5cHB1c2hyZXNwX3hmciB5cHB1c2hyZXNwX3hmcjsKKworZW51bSB5cGJpbmRfcmVzcHR5cGUgeworICBZUEJJTkRfU1VDQ19WQUwgPSAxLAorICBZUEJJTkRfRkFJTF9WQUwgPSAyLAorfTsKK3R5cGVkZWYgZW51bSB5cGJpbmRfcmVzcHR5cGUgeXBiaW5kX3Jlc3B0eXBlOworCitzdHJ1Y3QgeXBiaW5kX2JpbmRpbmcgeworICBjaGFyIHlwYmluZF9iaW5kaW5nX2FkZHJbNF07CisgIGNoYXIgeXBiaW5kX2JpbmRpbmdfcG9ydFsyXTsKK307Cit0eXBlZGVmIHN0cnVjdCB5cGJpbmRfYmluZGluZyB5cGJpbmRfYmluZGluZzsKKworc3RydWN0IHlwYmluZF9yZXNwIHsKKyAgeXBiaW5kX3Jlc3B0eXBlIHlwYmluZF9zdGF0dXM7CisgIHVuaW9uIHsKKyAgICB1X2ludCB5cGJpbmRfZXJyb3I7CisgICAgeXBiaW5kX2JpbmRpbmcgeXBiaW5kX2JpbmRpbmZvOworICB9IHlwYmluZF9yZXNwX3U7Cit9OwordHlwZWRlZiBzdHJ1Y3QgeXBiaW5kX3Jlc3AgeXBiaW5kX3Jlc3A7CisKKyNkZWZpbmUgWVBCSU5EX0VSUl9FUlIgMQorI2RlZmluZSBZUEJJTkRfRVJSX05PU0VSViAyCisjZGVmaW5lIFlQQklORF9FUlJfUkVTQyAzCisKK3N0cnVjdCB5cGJpbmRfc2V0ZG9tIHsKKyAgZG9tYWlubmFtZSB5cHNldGRvbV9kb21haW47CisgIHlwYmluZF9iaW5kaW5nIHlwc2V0ZG9tX2JpbmRpbmc7CisgIHVfaW50IHlwc2V0ZG9tX3ZlcnM7Cit9OwordHlwZWRlZiBzdHJ1Y3QgeXBiaW5kX3NldGRvbSB5cGJpbmRfc2V0ZG9tOworCitfX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgWVBQUk9HIDEwMDAwNAorI2RlZmluZSBZUFZFUlMgMgorCisjZGVmaW5lIFlQUFJPQ19OVUxMIDAKK2V4dGVybiAgdm9pZCAqeXBwcm9jX251bGxfMiAodm9pZCAqLCBDTElFTlQgKik7CitleHRlcm4gIHZvaWQgKnlwcHJvY19udWxsXzJfc3ZjICh2b2lkICosIHN0cnVjdCBzdmNfcmVxICopOworI2RlZmluZSBZUFBST0NfRE9NQUlOIDEKK2V4dGVybiAgYm9vbF90ICp5cHByb2NfZG9tYWluXzIgKGRvbWFpbm5hbWUgKiwgQ0xJRU5UICopOworZXh0ZXJuICBib29sX3QgKnlwcHJvY19kb21haW5fMl9zdmMgKGRvbWFpbm5hbWUgKiwgc3RydWN0IHN2Y19yZXEgKik7CisjZGVmaW5lIFlQUFJPQ19ET01BSU5fTk9OQUNLIDIKK2V4dGVybiAgYm9vbF90ICp5cHByb2NfZG9tYWluX25vbmFja18yIChkb21haW5uYW1lICosIENMSUVOVCAqKTsKK2V4dGVybiAgYm9vbF90ICp5cHByb2NfZG9tYWluX25vbmFja18yX3N2YyAoZG9tYWlubmFtZSAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKTsKKyNkZWZpbmUgWVBQUk9DX01BVENIIDMKK2V4dGVybiAgeXByZXNwX3ZhbCAqeXBwcm9jX21hdGNoXzIgKHlwcmVxX2tleSAqLCBDTElFTlQgKik7CitleHRlcm4gIHlwcmVzcF92YWwgKnlwcHJvY19tYXRjaF8yX3N2YyAoeXByZXFfa2V5ICosIHN0cnVjdCBzdmNfcmVxICopOworI2RlZmluZSBZUFBST0NfRklSU1QgNAorZXh0ZXJuICB5cHJlc3Bfa2V5X3ZhbCAqeXBwcm9jX2ZpcnN0XzIgKHlwcmVxX2tleSAqLCBDTElFTlQgKik7CitleHRlcm4gIHlwcmVzcF9rZXlfdmFsICp5cHByb2NfZmlyc3RfMl9zdmMgKHlwcmVxX2tleSAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKTsKKyNkZWZpbmUgWVBQUk9DX05FWFQgNQorZXh0ZXJuICB5cHJlc3Bfa2V5X3ZhbCAqeXBwcm9jX25leHRfMiAoeXByZXFfa2V5ICosIENMSUVOVCAqKTsKK2V4dGVybiAgeXByZXNwX2tleV92YWwgKnlwcHJvY19uZXh0XzJfc3ZjICh5cHJlcV9rZXkgKiwgc3RydWN0IHN2Y19yZXEgKik7CisjZGVmaW5lIFlQUFJPQ19YRlIgNgorZXh0ZXJuICB5cHJlc3BfeGZyICp5cHByb2NfeGZyXzIgKHlwcmVxX3hmciAqLCBDTElFTlQgKik7CitleHRlcm4gIHlwcmVzcF94ZnIgKnlwcHJvY194ZnJfMl9zdmMgKHlwcmVxX3hmciAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKTsKKyNkZWZpbmUgWVBQUk9DX0NMRUFSIDcKK2V4dGVybiAgdm9pZCAqeXBwcm9jX2NsZWFyXzIgKHZvaWQgKiwgQ0xJRU5UICopOworZXh0ZXJuICB2b2lkICp5cHByb2NfY2xlYXJfMl9zdmMgKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKik7CisjZGVmaW5lIFlQUFJPQ19BTEwgOAorZXh0ZXJuICB5cHJlc3BfYWxsICp5cHByb2NfYWxsXzIgKHlwcmVxX25va2V5ICosIENMSUVOVCAqKTsKK2V4dGVybiAgeXByZXNwX2FsbCAqeXBwcm9jX2FsbF8yX3N2YyAoeXByZXFfbm9rZXkgKiwgc3RydWN0IHN2Y19yZXEgKik7CisjZGVmaW5lIFlQUFJPQ19NQVNURVIgOQorZXh0ZXJuICB5cHJlc3BfbWFzdGVyICp5cHByb2NfbWFzdGVyXzIgKHlwcmVxX25va2V5ICosIENMSUVOVCAqKTsKK2V4dGVybiAgeXByZXNwX21hc3RlciAqeXBwcm9jX21hc3Rlcl8yX3N2YyAoeXByZXFfbm9rZXkgKiwgc3RydWN0IHN2Y19yZXEgKik7CisjZGVmaW5lIFlQUFJPQ19PUkRFUiAxMAorZXh0ZXJuICB5cHJlc3Bfb3JkZXIgKnlwcHJvY19vcmRlcl8yICh5cHJlcV9ub2tleSAqLCBDTElFTlQgKik7CitleHRlcm4gIHlwcmVzcF9vcmRlciAqeXBwcm9jX29yZGVyXzJfc3ZjICh5cHJlcV9ub2tleSAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKTsKKyNkZWZpbmUgWVBQUk9DX01BUExJU1QgMTEKK2V4dGVybiAgeXByZXNwX21hcGxpc3QgKnlwcHJvY19tYXBsaXN0XzIgKGRvbWFpbm5hbWUgKiwgQ0xJRU5UICopOworZXh0ZXJuICB5cHJlc3BfbWFwbGlzdCAqeXBwcm9jX21hcGxpc3RfMl9zdmMgKGRvbWFpbm5hbWUgKiwgc3RydWN0IHN2Y19yZXEgKik7CitleHRlcm4gaW50IHlwcHJvZ18yX2ZyZWVyZXN1bHQgKFNWQ1hQUlQgKiwgeGRycHJvY190LCBjYWRkcl90KTsKKworCisjZGVmaW5lIFlQUFVTSF9YRlJSRVNQUFJPRyAoMHg0MDAwMDAwMCkKKyNkZWZpbmUgWVBQVVNIX1hGUlJFU1BWRVJTIDEKKworI2RlZmluZSBZUFBVU0hQUk9DX05VTEwgMAorZXh0ZXJuICB2b2lkICp5cHB1c2hwcm9jX251bGxfMSAodm9pZCAqLCBDTElFTlQgKik7CitleHRlcm4gIHZvaWQgKnlwcHVzaHByb2NfbnVsbF8xX3N2YyAodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKTsKKyNkZWZpbmUgWVBQVVNIUFJPQ19YRlJSRVNQIDEKK2V4dGVybiAgdm9pZCAqeXBwdXNocHJvY194ZnJyZXNwXzEgKHlwcHVzaHJlc3BfeGZyICosIENMSUVOVCAqKTsKK2V4dGVybiAgdm9pZCAqeXBwdXNocHJvY194ZnJyZXNwXzFfc3ZjICh5cHB1c2hyZXNwX3hmciAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKTsKK2V4dGVybiBpbnQgeXBwdXNoX3hmcnJlc3Bwcm9nXzFfZnJlZXJlc3VsdCAoU1ZDWFBSVCAqLCB4ZHJwcm9jX3QsIGNhZGRyX3QpOworCisKKyNkZWZpbmUgWVBCSU5EUFJPRyAxMDAwMDcKKyNkZWZpbmUgWVBCSU5EVkVSUyAyCisKKyNkZWZpbmUgWVBCSU5EUFJPQ19OVUxMIDAKK2V4dGVybiAgdm9pZCAqeXBiaW5kcHJvY19udWxsXzIgKHZvaWQgKiwgQ0xJRU5UICopOworZXh0ZXJuICB2b2lkICp5cGJpbmRwcm9jX251bGxfMl9zdmMgKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKik7CisjZGVmaW5lIFlQQklORFBST0NfRE9NQUlOIDEKK2V4dGVybiAgeXBiaW5kX3Jlc3AgKnlwYmluZHByb2NfZG9tYWluXzIgKGRvbWFpbm5hbWUgKiwgQ0xJRU5UICopOworZXh0ZXJuICB5cGJpbmRfcmVzcCAqeXBiaW5kcHJvY19kb21haW5fMl9zdmMgKGRvbWFpbm5hbWUgKiwgc3RydWN0IHN2Y19yZXEgKik7CisjZGVmaW5lIFlQQklORFBST0NfU0VURE9NIDIKK2V4dGVybiAgdm9pZCAqeXBiaW5kcHJvY19zZXRkb21fMiAoeXBiaW5kX3NldGRvbSAqLCBDTElFTlQgKik7CitleHRlcm4gIHZvaWQgKnlwYmluZHByb2Nfc2V0ZG9tXzJfc3ZjICh5cGJpbmRfc2V0ZG9tICosIHN0cnVjdCBzdmNfcmVxICopOworZXh0ZXJuIGludCB5cGJpbmRwcm9nXzJfZnJlZXJlc3VsdCAoU1ZDWFBSVCAqLCB4ZHJwcm9jX3QsIGNhZGRyX3QpOworCisKK2V4dGVybiAgYm9vbF90IHhkcl95cHN0YXQgKFhEUiAqLCB5cHN0YXQqKTsKK2V4dGVybiAgYm9vbF90IHhkcl95cHhmcnN0YXQgKFhEUiAqLCB5cHhmcnN0YXQqKTsKK2V4dGVybiAgYm9vbF90IHhkcl9kb21haW5uYW1lIChYRFIgKiwgZG9tYWlubmFtZSopOworZXh0ZXJuICBib29sX3QgeGRyX21hcG5hbWUgKFhEUiAqLCBtYXBuYW1lKik7CitleHRlcm4gIGJvb2xfdCB4ZHJfcGVlcm5hbWUgKFhEUiAqLCBwZWVybmFtZSopOworZXh0ZXJuICBib29sX3QgeGRyX2tleWRhdCAoWERSICosIGtleWRhdCopOworZXh0ZXJuICBib29sX3QgeGRyX3ZhbGRhdCAoWERSICosIHZhbGRhdCopOworZXh0ZXJuICBib29sX3QgeGRyX3lwbWFwX3Bhcm1zIChYRFIgKiwgeXBtYXBfcGFybXMqKTsKK2V4dGVybiAgYm9vbF90IHhkcl95cHJlcV9rZXkgKFhEUiAqLCB5cHJlcV9rZXkqKTsKK2V4dGVybiAgYm9vbF90IHhkcl95cHJlcV9ub2tleSAoWERSICosIHlwcmVxX25va2V5Kik7CitleHRlcm4gIGJvb2xfdCB4ZHJfeXByZXFfeGZyIChYRFIgKiwgeXByZXFfeGZyKik7CitleHRlcm4gIGJvb2xfdCB4ZHJfeXByZXNwX3ZhbCAoWERSICosIHlwcmVzcF92YWwqKTsKK2V4dGVybiAgYm9vbF90IHhkcl95cHJlc3Bfa2V5X3ZhbCAoWERSICosIHlwcmVzcF9rZXlfdmFsKik7CitleHRlcm4gIGJvb2xfdCB4ZHJfeXByZXNwX21hc3RlciAoWERSICosIHlwcmVzcF9tYXN0ZXIqKTsKK2V4dGVybiAgYm9vbF90IHhkcl95cHJlc3Bfb3JkZXIgKFhEUiAqLCB5cHJlc3Bfb3JkZXIqKTsKK2V4dGVybiAgYm9vbF90IHhkcl95cHJlc3BfYWxsIChYRFIgKiwgeXByZXNwX2FsbCopOworZXh0ZXJuICBib29sX3QgeGRyX3lwcmVzcF94ZnIgKFhEUiAqLCB5cHJlc3BfeGZyKik7CitleHRlcm4gIGJvb2xfdCB4ZHJfeXBtYXBsaXN0IChYRFIgKiwgeXBtYXBsaXN0Kik7CitleHRlcm4gIGJvb2xfdCB4ZHJfeXByZXNwX21hcGxpc3QgKFhEUiAqLCB5cHJlc3BfbWFwbGlzdCopOworZXh0ZXJuICBib29sX3QgeGRyX3lwcHVzaF9zdGF0dXMgKFhEUiAqLCB5cHB1c2hfc3RhdHVzKik7CitleHRlcm4gIGJvb2xfdCB4ZHJfeXBwdXNocmVzcF94ZnIgKFhEUiAqLCB5cHB1c2hyZXNwX3hmciopOworZXh0ZXJuICBib29sX3QgeGRyX3lwYmluZF9yZXNwdHlwZSAoWERSICosIHlwYmluZF9yZXNwdHlwZSopOworZXh0ZXJuICBib29sX3QgeGRyX3lwYmluZF9iaW5kaW5nIChYRFIgKiwgeXBiaW5kX2JpbmRpbmcqKTsKK2V4dGVybiAgYm9vbF90IHhkcl95cGJpbmRfcmVzcCAoWERSICosIHlwYmluZF9yZXNwKik7CitleHRlcm4gIGJvb2xfdCB4ZHJfeXBiaW5kX3NldGRvbSAoWERSICosIHlwYmluZF9zZXRkb20qKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qICFfX1JQQ1NWQ19ZUF9IX18gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGNzdmMveXAueCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGNzdmMveXAueApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWIyNTY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwY3N2Yy95cC54CkBAIC0wLDAgKzEsMzA5IEBACisvKiBAKCMpeXAueAkyLjEgODgvMDgvMDEgNC4wIFJQQ1NSQyAqLworCisvKgorICogU3VuIFJQQyBpcyBhIHByb2R1Y3Qgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBhbmQgaXMgcHJvdmlkZWQgZm9yCisgKiB1bnJlc3RyaWN0ZWQgdXNlIHByb3ZpZGVkIHRoYXQgdGhpcyBsZWdlbmQgaXMgaW5jbHVkZWQgb24gYWxsIHRhcGUKKyAqIG1lZGlhIGFuZCBhcyBhIHBhcnQgb2YgdGhlIHNvZnR3YXJlIHByb2dyYW0gaW4gd2hvbGUgb3IgcGFydC4gIFVzZXJzCisgKiBtYXkgY29weSBvciBtb2RpZnkgU3VuIFJQQyB3aXRob3V0IGNoYXJnZSwgYnV0IGFyZSBub3QgYXV0aG9yaXplZAorICogdG8gbGljZW5zZSBvciBkaXN0cmlidXRlIGl0IHRvIGFueW9uZSBlbHNlIGV4Y2VwdCBhcyBwYXJ0IG9mIGEgcHJvZHVjdCBvcgorICogcHJvZ3JhbSBkZXZlbG9wZWQgYnkgdGhlIHVzZXIuCisgKgorICogU1VOIFJQQyBJUyBQUk9WSURFRCBBUyBJUyBXSVRIIE5PIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgSU5DTFVESU5HIFRIRQorICogV0FSUkFOVElFUyBPRiBERVNJR04sIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFLCBPUiBBUklTSU5HIEZST00gQSBDT1VSU0UgT0YgREVBTElORywgVVNBR0UgT1IgVFJBREUgUFJBQ1RJQ0UuCisgKgorICogU3VuIFJQQyBpcyBwcm92aWRlZCB3aXRoIG5vIHN1cHBvcnQgYW5kIHdpdGhvdXQgYW55IG9ibGlnYXRpb24gb24gdGhlCisgKiBwYXJ0IG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gdG8gYXNzaXN0IGluIGl0cyB1c2UsIGNvcnJlY3Rpb24sCisgKiBtb2RpZmljYXRpb24gb3IgZW5oYW5jZW1lbnQuCisgKgorICogU1VOIE1JQ1JPU1lTVEVNUywgSU5DLiBTSEFMTCBIQVZFIE5PIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFCisgKiBJTkZSSU5HRU1FTlQgT0YgQ09QWVJJR0hUUywgVFJBREUgU0VDUkVUUyBPUiBBTlkgUEFURU5UUyBCWSBTVU4gUlBDCisgKiBPUiBBTlkgUEFSVCBUSEVSRU9GLgorICoKKyAqIEluIG5vIGV2ZW50IHdpbGwgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBiZSBsaWFibGUgZm9yIGFueSBsb3N0IHJldmVudWUKKyAqIG9yIHByb2ZpdHMgb3Igb3RoZXIgc3BlY2lhbCwgaW5kaXJlY3QgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgZXZlbiBpZgorICogU3VuIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKyAqCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiAyNTUwIEdhcmNpYSBBdmVudWUKKyAqIE1vdW50YWluIFZpZXcsIENhbGlmb3JuaWEgIDk0MDQzCisgKi8KKworLyoKKyAqIFByb3RvY29sIGRlc2NyaXB0aW9uIGZpbGUgZm9yIHRoZSBZZWxsb3cgUGFnZXMgU2VydmljZQorICovCisKK2NvbnN0IFlQTUFYUkVDT1JEID0gMTAyNDsKK2NvbnN0IFlQTUFYRE9NQUlOID0gNjQ7Citjb25zdCBZUE1BWE1BUCA9IDY0OworY29uc3QgWVBNQVhQRUVSID0gNjQ7CisKKworZW51bSB5cHN0YXQgeworCVlQX1RSVUUJCT0gIDEsCisJWVBfTk9NT1JFCT0gIDIsCisJWVBfRkFMU0UJPSAgMCwKKwlZUF9OT01BUAk9IC0xLAorCVlQX05PRE9NCT0gLTIsCisJWVBfTk9LRVkJPSAtMywKKwlZUF9CQURPUAk9IC00LAorCVlQX0JBRERCCT0gLTUsCisJWVBfWVBFUlIJPSAtNiwKKwlZUF9CQURBUkdTCT0gLTcsCisJWVBfVkVSUwkJPSAtOAorfTsKKworCitlbnVtIHlweGZyc3RhdCB7CisJWVBYRlJfU1VDQwk9ICAxLAorCVlQWEZSX0FHRQk9ICAyLAorCVlQWEZSX05PTUFQCT0gLTEsCisJWVBYRlJfTk9ET00JPSAtMiwKKwlZUFhGUl9SU1JDCT0gLTMsCisJWVBYRlJfUlBDCT0gLTQsCisJWVBYRlJfTUFERFIJPSAtNSwKKwlZUFhGUl9ZUEVSUgk9IC02LAorCVlQWEZSX0JBREFSR1MJPSAtNywKKwlZUFhGUl9EQk0JPSAtOCwKKwlZUFhGUl9GSUxFCT0gLTksCisJWVBYRlJfU0tFVwk9IC0xMCwKKwlZUFhGUl9DTEVBUgk9IC0xMSwKKwlZUFhGUl9GT1JDRQk9IC0xMiwKKwlZUFhGUl9YRlJFUlIJPSAtMTMsCisJWVBYRlJfUkVGVVNFRAk9IC0xNAorfTsKKworCit0eXBlZGVmIHN0cmluZyBkb21haW5uYW1lPFlQTUFYRE9NQUlOPjsKK3R5cGVkZWYgc3RyaW5nIG1hcG5hbWU8WVBNQVhNQVA+OwordHlwZWRlZiBzdHJpbmcgcGVlcm5hbWU8WVBNQVhQRUVSPjsKK3R5cGVkZWYgb3BhcXVlIGtleWRhdDxZUE1BWFJFQ09SRD47Cit0eXBlZGVmIG9wYXF1ZSB2YWxkYXQ8WVBNQVhSRUNPUkQ+OworCisKK3N0cnVjdCB5cG1hcF9wYXJtcyB7CisJZG9tYWlubmFtZSBkb21haW47CisJbWFwbmFtZSBtYXA7CisJdW5zaWduZWQgaW50IG9yZGVybnVtOworCXBlZXJuYW1lIHBlZXI7Cit9OworCitzdHJ1Y3QgeXByZXFfa2V5IHsKKwlkb21haW5uYW1lIGRvbWFpbjsKKwltYXBuYW1lIG1hcDsKKwlrZXlkYXQga2V5OworfTsKKworc3RydWN0IHlwcmVxX25va2V5IHsKKwlkb21haW5uYW1lIGRvbWFpbjsKKwltYXBuYW1lIG1hcDsKK307CisKK3N0cnVjdCB5cHJlcV94ZnIgeworCXlwbWFwX3Bhcm1zIG1hcF9wYXJtczsKKwl1bnNpZ25lZCBpbnQgdHJhbnNpZDsKKwl1bnNpZ25lZCBpbnQgcHJvZzsKKwl1bnNpZ25lZCBpbnQgcG9ydDsKK307CisKKworc3RydWN0IHlwcmVzcF92YWwgeworCXlwc3RhdCBzdGF0OworCXZhbGRhdCB2YWw7Cit9OworCitzdHJ1Y3QgeXByZXNwX2tleV92YWwgeworCXlwc3RhdCBzdGF0OworI2lmZGVmIFNUVVBJRF9TVU5fQlVHCisJLyogVGhpcyBpcyB0aGUgZm9ybSBhcyBkaXN0cmlidXRlZCBieSBTdW4uICBCdXQgZXZlbiB0aGUgU3VuIE5JUworCSAgIHNlcnZlcnMgZXhwZWN0IHRoZSB2YWx1ZXMgaW4gdGhlIG90aGVyIG9yZGVyLiAgU28gdGhlaXIKKwkgICBpbXBsZW1lbnRhdGlvbiBzb21laG93IG11c3QgY2hhbmdlIHRoZSBvcmRlciBpbnRlcm5hbGx5LiAgV2UKKwkgICBkb24ndCB3YW50IHRvIGZvbGxvdyB0aGlzIGJhZCBleGFtcGxlIHNpbmNlIHRoZSB1c2VyIHNob3VsZCBiZQorCSAgIGFibGUgdG8gdXNlIHJwY2dlbiBvbiB0aGlzIGZpbGUuICAqLworCWtleWRhdCBrZXk7CisJdmFsZGF0IHZhbDsKKyNlbHNlCisJdmFsZGF0IHZhbDsKKwlrZXlkYXQga2V5OworI2VuZGlmCit9OworCisKK3N0cnVjdCB5cHJlc3BfbWFzdGVyIHsKKwl5cHN0YXQgc3RhdDsKKwlwZWVybmFtZSBwZWVyOworfTsKKworc3RydWN0IHlwcmVzcF9vcmRlciB7CisJeXBzdGF0IHN0YXQ7CisJdW5zaWduZWQgaW50IG9yZGVybnVtOworfTsKKwordW5pb24geXByZXNwX2FsbCBzd2l0Y2ggKGJvb2wgbW9yZSkgeworY2FzZSBUUlVFOgorCXlwcmVzcF9rZXlfdmFsIHZhbDsKK2Nhc2UgRkFMU0U6CisJdm9pZDsKK307CisKK3N0cnVjdCB5cHJlc3BfeGZyIHsKKwl1bnNpZ25lZCBpbnQgdHJhbnNpZDsKKwl5cHhmcnN0YXQgeGZyc3RhdDsKK307CisKK3N0cnVjdCB5cG1hcGxpc3QgeworCW1hcG5hbWUgbWFwOworCXlwbWFwbGlzdCAqbmV4dDsKK307CisKK3N0cnVjdCB5cHJlc3BfbWFwbGlzdCB7CisJeXBzdGF0IHN0YXQ7CisJeXBtYXBsaXN0ICptYXBzOworfTsKKworZW51bSB5cHB1c2hfc3RhdHVzIHsKKwlZUFBVU0hfU1VDQwk9ICAxLAkvKiBTdWNjZXNzICovCisJWVBQVVNIX0FHRSAJPSAgMiwJLyogTWFzdGVyJ3MgdmVyc2lvbiBub3QgbmV3ZXIgKi8KKwlZUFBVU0hfTk9NQVAJPSAtMSwJLyogQ2FuJ3QgZmluZCBzZXJ2ZXIgZm9yIG1hcCAqLworCVlQUFVTSF9OT0RPTQk9IC0yLAkvKiBEb21haW4gbm90IHN1cHBvcnRlZCAqLworCVlQUFVTSF9SU1JDCT0gLTMsCS8qIExvY2FsIHJlc291cmNlIGFsbG9jIGZhaWx1cmUgKi8KKwlZUFBVU0hfUlBDCT0gLTQsCS8qIFJQQyBmYWlsdXJlIHRhbGtpbmcgdG8gc2VydmVyICovCisJWVBQVVNIX01BRERSIAk9IC01LAkvKiBDYW4ndCBnZXQgbWFzdGVyIGFkZHJlc3MgKi8KKwlZUFBVU0hfWVBFUlIJPSAtNiwJLyogWVAgc2VydmVyL21hcCBkYiBlcnJvciAqLworCVlQUFVTSF9CQURBUkdTCT0gLTcsCS8qIFJlcXVlc3QgYXJndW1lbnRzIGJhZCAqLworCVlQUFVTSF9EQk0JPSAtOCwJLyogTG9jYWwgZGJtIG9wZXJhdGlvbiBmYWlsZWQgKi8KKwlZUFBVU0hfRklMRQk9IC05LAkvKiBMb2NhbCBmaWxlIEkvTyBvcGVyYXRpb24gZmFpbGVkICovCisJWVBQVVNIX1NLRVcJPSAtMTAsCS8qIE1hcCB2ZXJzaW9uIHNrZXcgZHVyaW5nIHRyYW5zZmVyICovCisJWVBQVVNIX0NMRUFSCT0gLTExLAkvKiBDYW4ndCBzZW5kICJDbGVhciIgcmVxIHRvIGxvY2FsIHlwc2VydiAqLworCVlQUFVTSF9GT1JDRQk9IC0xMiwJLyogTm8gbG9jYWwgb3JkZXIgbnVtYmVyIGluIG1hcCAgdXNlIC1mIGZsYWcuICovCisJWVBQVVNIX1hGUkVSUiAJPSAtMTMsCS8qIHlweGZyIGVycm9yICovCisJWVBQVVNIX1JFRlVTRUQJPSAtMTQgCS8qIFRyYW5zZmVyIHJlcXVlc3QgcmVmdXNlZCBieSB5cHNlcnYgKi8KK307CisKK3N0cnVjdCB5cHB1c2hyZXNwX3hmciB7CisJdW5zaWduZWQgdHJhbnNpZDsKKwl5cHB1c2hfc3RhdHVzIHN0YXR1czsKK307CisKKy8qCisgKiBSZXNwb25zZSBzdHJ1Y3R1cmUgYW5kIG92ZXJhbGwgcmVzdWx0IHN0YXR1cyBjb2Rlcy4gIFN1Y2Nlc3MgYW5kIGZhaWx1cmUKKyAqIHJlcHJlc2VudCB0d28gc2VwYXJhdGUgcmVzcG9uc2UgbWVzc2FnZSB0eXBlcy4KKyAqLworCitlbnVtIHlwYmluZF9yZXNwdHlwZSB7CisJWVBCSU5EX1NVQ0NfVkFMID0gMSwKKwlZUEJJTkRfRkFJTF9WQUwgPSAyCit9OworCitzdHJ1Y3QgeXBiaW5kX2JpbmRpbmcgeworICAgIG9wYXF1ZSB5cGJpbmRfYmluZGluZ19hZGRyWzRdOyAvKiBJbiBuZXR3b3JrIG9yZGVyICovCisgICAgb3BhcXVlIHlwYmluZF9iaW5kaW5nX3BvcnRbMl07IC8qIEluIG5ldHdvcmsgb3JkZXIgKi8KK307CisKK3VuaW9uIHlwYmluZF9yZXNwIHN3aXRjaCAoeXBiaW5kX3Jlc3B0eXBlIHlwYmluZF9zdGF0dXMpIHsKK2Nhc2UgWVBCSU5EX0ZBSUxfVkFMOgorICAgICAgICB1bnNpZ25lZCB5cGJpbmRfZXJyb3I7CitjYXNlIFlQQklORF9TVUNDX1ZBTDoKKyAgICAgICAgeXBiaW5kX2JpbmRpbmcgeXBiaW5kX2JpbmRpbmZvOworfTsKKworLyogRGV0YWlsZWQgZmFpbHVyZSByZWFzb24gY29kZXMgZm9yIHJlc3BvbnNlIGZpZWxkIHlwYmluZF9lcnJvciovCisKK2NvbnN0IFlQQklORF9FUlJfRVJSICAgID0gMTsJLyogSW50ZXJuYWwgZXJyb3IgKi8KK2NvbnN0IFlQQklORF9FUlJfTk9TRVJWID0gMjsJLyogTm8gYm91bmQgc2VydmVyIGZvciBwYXNzZWQgZG9tYWluICovCitjb25zdCBZUEJJTkRfRVJSX1JFU0MgICA9IDM7CS8qIFN5c3RlbSByZXNvdXJjZSBhbGxvY2F0aW9uIGZhaWx1cmUgKi8KKworCisvKgorICogUmVxdWVzdCBkYXRhIHN0cnVjdHVyZSBmb3IgeXBiaW5kICJTZXQgZG9tYWluIiBwcm9jZWR1cmUuCisgKi8KK3N0cnVjdCB5cGJpbmRfc2V0ZG9tIHsKKwlkb21haW5uYW1lIHlwc2V0ZG9tX2RvbWFpbjsKKwl5cGJpbmRfYmluZGluZyB5cHNldGRvbV9iaW5kaW5nOworCXVuc2lnbmVkIHlwc2V0ZG9tX3ZlcnM7Cit9OworCisKKy8qCisgKiBZUCBhY2Nlc3MgcHJvdG9jb2wKKyAqLworcHJvZ3JhbSBZUFBST0cgeworCXZlcnNpb24gWVBWRVJTIHsKKwkJdm9pZAorCQlZUFBST0NfTlVMTCh2b2lkKSA9IDA7CisKKwkJYm9vbAorCQlZUFBST0NfRE9NQUlOKGRvbWFpbm5hbWUpID0gMTsKKworCQlib29sCisJCVlQUFJPQ19ET01BSU5fTk9OQUNLKGRvbWFpbm5hbWUpID0gMjsKKworCQl5cHJlc3BfdmFsCisJCVlQUFJPQ19NQVRDSCh5cHJlcV9rZXkpID0gMzsKKworCQl5cHJlc3Bfa2V5X3ZhbAorCQlZUFBST0NfRklSU1QoeXByZXFfa2V5KSA9IDQ7CisKKwkJeXByZXNwX2tleV92YWwKKwkJWVBQUk9DX05FWFQoeXByZXFfa2V5KSA9IDU7CisKKwkJeXByZXNwX3hmcgorCQlZUFBST0NfWEZSKHlwcmVxX3hmcikgPSA2OworCisJCXZvaWQKKwkJWVBQUk9DX0NMRUFSKHZvaWQpID0gNzsKKworCQl5cHJlc3BfYWxsCisJCVlQUFJPQ19BTEwoeXByZXFfbm9rZXkpID0gODsKKworCQl5cHJlc3BfbWFzdGVyCisJCVlQUFJPQ19NQVNURVIoeXByZXFfbm9rZXkpID0gOTsKKworCQl5cHJlc3Bfb3JkZXIKKwkJWVBQUk9DX09SREVSKHlwcmVxX25va2V5KSA9IDEwOworCisJCXlwcmVzcF9tYXBsaXN0CisJCVlQUFJPQ19NQVBMSVNUKGRvbWFpbm5hbWUpID0gMTE7CisJfSA9IDI7Cit9ID0gMTAwMDA0OworCisKKy8qCisgKiBZUFBVU0hQUk9DX1hGUlJFU1AgaXMgdGhlIGNhbGxiYWNrIHJvdXRpbmUgZm9yIHJlc3VsdCBvZiBZUFBST0NfWEZSCisgKi8KK3Byb2dyYW0gWVBQVVNIX1hGUlJFU1BQUk9HIHsKKwl2ZXJzaW9uIFlQUFVTSF9YRlJSRVNQVkVSUyB7CisJCXZvaWQKKwkJWVBQVVNIUFJPQ19OVUxMKHZvaWQpID0gMDsKKworI2lmZGVmIFNUVVBJRF9TVU5fQlVHCisJCS8qIFRoaXMgaXMgdGhlIGZvcm0gYXMgZGlzdHJpYnV0ZWQgYnkgU3VuLiAgQnV0IGV2ZW4KKwkJICAgdGhlIFN1biBOSVMgc2VydmVycyBleHBlY3QgdGhlIHZhbHVlcyBpbiB0aGUgb3RoZXIKKwkJICAgb3JkZXIuICBTbyB0aGVpciBpbXBsZW1lbnRhdGlvbiBzb21laG93IG11c3QgY2hhbmdlCisJCSAgIHRoZSBvcmRlciBpbnRlcm5hbGx5LiAgV2UgZG9uJ3Qgd2FudCB0byBmb2xsb3cgdGhpcworCQkgICBiYWQgZXhhbXBsZSBzaW5jZSB0aGUgdXNlciBzaG91bGQgYmUgYWJsZSB0byB1c2UKKwkJICAgcnBjZ2VuIG9uIHRoaXMgZmlsZS4gICovCisJCXlwcHVzaHJlc3BfeGZyCisJCVlQUFVTSFBST0NfWEZSUkVTUCh2b2lkKSA9IDE7CisjZWxzZQorCQl2b2lkCisJCVlQUFVTSFBST0NfWEZSUkVTUCh5cHB1c2hyZXNwX3hmcikgPSAxOworI2VuZGlmCisJfSA9IDE7Cit9ID0gMHg0MDAwMDAwMDsJLyogdHJhbnNpZW50OiBjb3VsZCBiZSBhbnl0aGluZyB1cCB0byAweDVmZmZmZmZmICovCisKKy8qCisgKiBZUCBiaW5kaW5nIHByb3RvY29sCisgKi8KK3Byb2dyYW0gWVBCSU5EUFJPRyB7CisJdmVyc2lvbiBZUEJJTkRWRVJTIHsKKwkJdm9pZAorCQlZUEJJTkRQUk9DX05VTEwodm9pZCkgPSAwOworCisJCXlwYmluZF9yZXNwCisJCVlQQklORFBST0NfRE9NQUlOKGRvbWFpbm5hbWUpID0gMTsKKworCQl2b2lkCisJCVlQQklORFBST0NfU0VURE9NKHlwYmluZF9zZXRkb20pID0gMjsKKwl9ID0gMjsKK30gPSAxMDAwMDc7CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL3lwX3Byb3QuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGNzdmMveXBfcHJvdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMGRiMzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL3lwX3Byb3QuaApAQCAtMCwwICsxLDM2NiBAQAorLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBzeW1ib2xzIGFuZCBzdHJ1Y3R1cmVzIGRlZmluaW5nIHRoZSBycGMgcHJvdG9jb2wKKyAqIGJldHdlZW4gdGhlIE5JUyBjbGllbnRzIGFuZCB0aGUgTklTIHNlcnZlcnMuICBUaGUgc2VydmVycworICogYXJlIHRoZSBOSVMgZGF0YWJhc2Ugc2VydmVycywgYW5kIHRoZSBOSVMgYmluZGVycy4KKyAqLworCisjaWZuZGVmIF9SUENTVkNfWVBfUFJPVF9ICisjZGVmaW5lIF9SUENTVkNfWVBfUFJPVF9ICisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCisjaW5jbHVkZSA8cnBjL3JwYy5oPgorI2luY2x1ZGUgPHJwY3N2Yy95cGNsbnQuaD4KKworX19CRUdJTl9ERUNMUworCisvKgorICogVGhlIGZvbGxvd2luZyBwcm9jZWR1cmVzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIHByb3RvY29sOgorICoKKyAqIFlQUFJPQ19OVUxMKCkgcmV0dXJucyAoKSB0YWtlcyBub3RoaW5nLCByZXR1cm5zIG5vdGhpbmcuICBUaGlzIGluZGljYXRlcworICogdGhhdCB0aGUgTklTIHNlcnZlciBpcyBhbGl2ZS4KKyAqCisgKiBZUFBST0NfRE9NQUlOIChjaGFyICopIHJldHVybnMgKGJvb2xfdCkgVFJVRS4gIEluZGljYXRlcyB0aGF0IHRoZQorICogcmVzcG9uZGluZyBOSVMgc2VydmVyIGRvZXMgc2VydmUgdGhlIG5hbWVkIGRvbWFpbjsgRkFMU0UgaW5kaWNhdGVzIG5vCisgKiBzdXBwb3J0LgorICoKKyAqIFlQUFJPQ19ET01BSU5fTk9OQUNLIChjaGFyICopIHJldHVybnMgKFRSVUUpIGlmIHRoZSBOSVMgc2VydmVyIGRvZXMgc2VydmUKKyAqIHRoZSBuYW1lZCBkb21haW4sIG90aGVyd2lzZSBkb2VzIG5vdCByZXR1cm4uICBVc2VkIGluIHRoZSBicm9hZGNhc3QgY2FzZS4KKyAqCisgKiBZUFBST0NfTUFUQ0ggKHN0cnVjdCB5cHJlcV9rZXkpIHJldHVybnMgKHN0cnVjdCB5cHJlc3BfdmFsKS4gIFJldHVybnMgdGhlCisgKiByaWdodC1oYW5kIHZhbHVlIGZvciBhIHBhc3NlZCBsZWZ0LWhhbmQga2V5LCB3aXRoaW4gYSBuYW1lZCBtYXAgYW5kCisgKiBkb21haW4uCisgKgorICogWVBQUk9DX0ZJUlNUIChzdHJ1Y3QgeXByZXFfbm9rZXkpIHJldHVybnMgKHN0cnVjdCB5cHJlc3Bfa2V5X3ZhbCkuCisgKiBSZXR1cm5zIHRoZSBmaXJzdCBrZXktdmFsdWUgcGFpciBmcm9tIGEgbmFtZWQgZG9tYWluIGFuZCBtYXAuCisgKgorICogWVBQUk9DX05FWFQgKHN0cnVjdCB5cHJlcV9rZXkpIHJldHVybnMgKHN0cnVjdCB5cHJlc3Bfa2V5X3ZhbCkuICBSZXR1cm5zCisgKiB0aGUga2V5LXZhbHVlIHBhaXIgZm9sbG93aW5nIGEgcGFzc2VkIGtleS12YWx1ZSBwYWlyIHdpdGhpbiBhIG5hbWVkCisgKiBkb21haW4gYW5kIG1hcC4KKyAqCisgKiBZUFBST0NfWEZSIChzdHJ1Y3QgeXByZXFfeGZyKSByZXR1cm5zIG5vdGhpbmcuICBJbmRpY2F0ZXMgdG8gYSBzZXJ2ZXIgdGhhdAorICogYSBtYXAgc2hvdWxkIGJlIHVwZGF0ZWQuCisgKgorICogWVBQUk9DX0NMRUFSCXRha2VzIG5vdGhpbmcsIHJldHVybnMgbm90aGluZy4gIEluc3RydWN0cyBhIE5JUyBzZXJ2ZXIgdG8KKyAqIGNsb3NlIHRoZSBjdXJyZW50IG1hcCwgc28gdGhhdCBvbGQgdmVyc2lvbnMgb2YgdGhlIGRpc2sgZmlsZSBkb24ndCBnZXQKKyAqIGhlbGQgb3Blbi4KKyAqCisgKiBZUFBST0NfQUxMIChzdHJ1Y3QgeXByZXFfbm9rZXkpLCByZXR1cm5zCisgKiAJdW5pb24gc3dpdGNoIChib29sX3QgbW9yZSkgeworICoJCVRSVUU6CShzdHJ1Y3QgeXByZXNwX2tleV92YWwpOworICoJCUZBTFNFOgkoc3RydWN0KSB7fTsKKyAqCX0KKyAqCisgKiBZUFBST0NfTUFTVEVSIChzdHJ1Y3QgeXByZXFfbm9rZXkpLCByZXR1cm5zICh5cHJlc3BfbWFzdGVyKQorICoKKyAqIFlQUFJPQ19PUkRFUiAoc3RydWN0IHlwcmVxX25va2V5KSwgcmV0dXJucyAoeXByZXNwX29yZGVyKQorICoKKyAqIFlQUFJPQ19NQVBMSVNUIChjaGFyICopLCByZXR1cm5zIChzdHJ1Y3QgeXBtYXBsaXN0ICopCisgKi8KKworLyogUHJvZ3JhbSBhbmQgdmVyc2lvbiBzeW1ib2xzLCBtYWdpYyBudW1iZXJzICovCisKKyNkZWZpbmUgWVBQUk9HCQkxMDAwMDQKKyNkZWZpbmUgWVBWRVJTCQkyCisjZGVmaW5lIFlQVkVSU19PUklHCTEKKyNkZWZpbmUgWVBNQVhSRUNPUkQJMTAyNAorI2RlZmluZSBZUE1BWERPTUFJTgk2NCAvKiBYWFggb3JpZy4geXBfcHJvdC5oIGRlZmluZXMgMjU2ICovCisjZGVmaW5lIFlQTUFYTUFQCTY0CisjZGVmaW5lIFlQTUFYUEVFUgk2NCAvKiBYWFggb3JpZy4geXBfcHJvdC5oIGRlZmluZXMgMjU2ICovCisKKy8qIGJ5dGUgc2l6ZSBvZiBhIGxhcmdlIE5JUyBwYWNrZXQgKi8KKyNkZWZpbmUgWVBNU0dTWgkJMTYwMAorCit0eXBlZGVmIHN0cnVjdCB7CisgIHVfaW50IGtleWRhdF9sZW47CisgIGNoYXIgKmtleWRhdF92YWw7Cit9IGtleWRhdF90OworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVfaW50IHZhbGRhdF9sZW47CisgIGNoYXIgKnZhbGRhdF92YWw7Cit9IHZhbGRhdF90OworCitzdHJ1Y3QgeXBtYXBfcGFybXMgeworICBjaGFyICpkb21haW47CQkJLyogTnVsbCBzdHJpbmcgbWVhbnMgbm90IGF2YWlsYWJsZSAqLworICBjaGFyICptYXA7CQkJLyogTnVsbCBzdHJpbmcgbWVhbnMgbm90IGF2YWlsYWJsZSAqLworICB1bnNpZ25lZCBpbnQgb3JkZXJudW07CS8qIDAgbWVhbnMgbm90IGF2YWlsYWJsZSAqLworICBjaGFyICpvd25lcjsJCQkvKiBOdWxsIHN0cmluZyBtZWFucyBub3QgYXZhaWxhYmxlICovCit9OworCisvKgorICogUmVxdWVzdCBwYXJhbWV0ZXIgc3RydWN0dXJlcworICovCisKK3N0cnVjdCB5cHJlcV9rZXkgeworICBjb25zdCBjaGFyICpkb21haW47CisgIGNvbnN0IGNoYXIgKm1hcDsKKyAga2V5ZGF0X3Qga2V5ZGF0OworfTsKKworc3RydWN0IHlwcmVxX25va2V5IHsKKyAgY2hhciAqZG9tYWluOworICBjaGFyICptYXA7Cit9OworCitzdHJ1Y3QgeXByZXFfeGZyIHsKKyAgc3RydWN0IHlwbWFwX3Bhcm1zIG1hcF9wYXJtczsKKyAgdV9pbnQgdHJhbnNpZDsKKyAgdV9pbnQgcHJvdG87CisgIHVfaW50IHBvcnQ7Cit9OworCisjZGVmaW5lIHlweGZyX2RvbWFpbiBtYXBfcGFybXMuZG9tYWluCisjZGVmaW5lIHlweGZyX21hcCBtYXBfcGFybXMubWFwCisjZGVmaW5lIHlweGZyX29yZGVybnVtIG1hcF9wYXJtcy5vcmRlcm51bQorI2RlZmluZSB5cHhmcl9vd25lciBtYXBfcGFybXMub3duZXIKKworLyogUmV0dXJuIHN0YXR1cyB2YWx1ZXMgKi8KKworZW51bSB5cHN0YXQgeworICBZUF9UUlVFID0gMSwJCS8qIEdlbmVyYWwgcHVycG9zZSBzdWNjZXNzIGNvZGUgKi8KKyNkZWZpbmUgWVBfVFJVRSBZUF9UUlVFCisgIFlQX05PTU9SRSA9IDIsCS8qIE5vIG1vcmUgZW50cmllcyBpbiBtYXAgKi8KKyNkZWZpbmUgWVBfTk9NT1JFIFlQX05PTU9SRQorICBZUF9GQUxTRSA9IDAsCQkvKiBHZW5lcmFsIHB1cnBvc2UgZmFpbHVyZSBjb2RlICovCisjZGVmaW5lIFlQX0ZBTFNFIFlQX0ZBTFNFCisgIFlQX05PTUFQID0gLTEsCS8qIE5vIHN1Y2ggbWFwIGluIGRvbWFpbiAqLworI2RlZmluZSBZUF9OT01BUCBZUF9OT01BUAorICBZUF9OT0RPTSA9IC0yLAkvKiBEb21haW4gbm90IHN1cHBvcnRlZCAqLworI2RlZmluZSBZUF9OT0RPTSBZUF9OT0RPTQorICBZUF9OT0tFWSA9IC0zLAkvKiBObyBzdWNoIGtleSBpbiBtYXAgKi8KKyNkZWZpbmUgWVBfTk9LRVkgWVBfTk9LRVkKKyAgWVBfQkFET1AgPSAtNCwJLyogSW52YWxpZCBvcGVyYXRpb24gKi8KKyNkZWZpbmUgWVBfQkFET1AgWVBfQkFET1AKKyAgWVBfQkFEREIgPSAtNSwJLyogU2VydmVyIGRhdGEgYmFzZSBpcyBiYWQgKi8KKyNkZWZpbmUgWVBfQkFEREIgWVBfQkFEREIKKyAgWVBfWVBFUlIgPSAtNiwJLyogTklTIHNlcnZlciBlcnJvciAqLworI2RlZmluZSBZUF9ZUEVSUiBZUF9ZUEVSUgorICBZUF9CQURBUkdTID0gLTcsCS8qIFJlcXVlc3QgYXJndW1lbnRzIGJhZCAqLworI2RlZmluZSBZUF9CQURBUkdTIFlQX0JBREFSR1MKKyAgWVBfVkVSUyA9IC04LAkJLyogTklTIHNlcnZlciB2ZXJzaW9uIG1pc21hdGNoIC0gc2VydmVyIGNhbid0IHN1cHBseQorCQkJICAgcmVxdWVzdGVkIHNlcnZpY2UuICovCisjZGVmaW5lIFlQX1ZFUlMgWVBfVkVSUworfTsKKworLyoKKyAqIFJlc3BvbnNlIHBhcmFtZXRlciBzdHJ1Y3R1cmVzCisgKi8KKwordHlwZWRlZiBlbnVtIHlwc3RhdCB5cHN0YXQ7CisKK3N0cnVjdCB5cHJlc3BfdmFsIHsKKyAgeXBzdGF0IHN0YXR1czsKKyAgdmFsZGF0X3QgdmFsZGF0OworfTsKKworc3RydWN0IHlwcmVzcF9rZXlfdmFsIHsKKyAgeXBzdGF0IHN0YXR1czsKKyNpZmRlZiBTVFVQSURfU1VOX0JVRworICAvKiBUaGlzIGlzIHRoZSBmb3JtIGFzIGRpc3RyaWJ1dGVkIGJ5IFN1bi4gIEJ1dCBldmVuIHRoZSBTdW4gTklTCisgICAgIHNlcnZlcnMgZXhwZWN0IHRoZSB2YWx1ZXMgaW4gdGhlIG90aGVyIG9yZGVyLiAgU28gdGhlaXIKKyAgICAgaW1wbGVtZW50YXRpb24gc29tZWhvdyBtdXN0IGNoYW5nZSB0aGUgb3JkZXIgaW50ZXJuYWxseS4gIFdlCisgICAgIGRvbid0IHdhbnQgdG8gZm9sbG93IHRoaXMgYmFkIGV4YW1wbGUgc2luY2UgdGhlIHVzZXIgc2hvdWxkIGJlCisgICAgIGFibGUgdG8gdXNlIHJwY2dlbiBvbiB0aGlzIGZpbGUuICAqLworICBrZXlkYXRfdCBrZXlkYXQ7CisgIHZhbGRhdF90IHZhbGRhdDsKKyNlbHNlCisgIHZhbGRhdF90IHZhbGRhdDsKKyAga2V5ZGF0X3Qga2V5ZGF0OworI2VuZGlmCit9OworCitzdHJ1Y3QgeXByZXNwX21hc3RlciB7CisgIHlwc3RhdCBzdGF0dXM7CisgIGNoYXIgKm1hc3RlcjsKK307CisKK3N0cnVjdCB5cHJlc3Bfb3JkZXIgeworICB5cHN0YXQgc3RhdHVzOworICB1X2ludCBvcmRlcm51bTsKK307CisKK3N0cnVjdCB5cG1hcGxpc3QgeworICBjaGFyICptYXA7CisjZGVmaW5lIHlwbWxfbmFtZSBtYXAKKyAgc3RydWN0IHlwbWFwbGlzdCAqbmV4dDsKKyNkZWZpbmUgeXBtbF9uZXh0IG5leHQKK307CisKK3N0cnVjdCB5cHJlc3BfbWFwbGlzdCB7CisgIHlwc3RhdCBzdGF0dXM7CisgIHN0cnVjdCB5cG1hcGxpc3QgKmxpc3Q7Cit9OworCisvKgorICogUHJvY2VkdXJlIHN5bWJvbHMuICBZUFBST0NfTlVMTCwgWVBQUk9DX0RPTUFJTiwgYW5kIFlQUFJPQ19ET01BSU5fTk9OQUNLCisgKiBtdXN0IGtlZXAgdGhlIHNhbWUgdmFsdWVzICgwLCAxLCBhbmQgMikgdGhhdCB0aGV5IGhhZCBpbiB0aGUgZmlyc3QgdmVyc2lvbgorICogb2YgdGhlIHByb3RvY29sLgorICovCisKKyNkZWZpbmUgWVBQUk9DX05VTEwJMAorI2RlZmluZSBZUFBST0NfRE9NQUlOCTEKKyNkZWZpbmUgWVBQUk9DX0RPTUFJTl9OT05BQ0sgMgorI2RlZmluZSBZUFBST0NfTUFUQ0gJMworI2RlZmluZSBZUFBST0NfRklSU1QJNAorI2RlZmluZSBZUFBST0NfTkVYVAk1CisjZGVmaW5lIFlQUFJPQ19YRlIJNgorI2RlZmluZSBZUFBST0NfQ0xFQVIJNworI2RlZmluZSBZUFBST0NfQUxMCTgKKyNkZWZpbmUgWVBQUk9DX01BU1RFUgk5CisjZGVmaW5lIFlQUFJPQ19PUkRFUgkxMAorI2RlZmluZSBZUFBST0NfTUFQTElTVAkxMQorI2RlZmluZQlZUFBST0NfTkVXWEZSCTEyCisKKy8qCisgKgkJUHJvdG9jb2wgYmV0d2VlbiBjbGllbnRzIGFuZCBOSVMgYmluZGVyIHNlcnZlcnMKKyAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBwcm9jZWR1cmVzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIHByb3RvY29sOgorICoKKyAqIFlQQklORFBST0NfTlVMTCgpIHJldHVybnMgKCkKKyAqIAl0YWtlcyBub3RoaW5nLCByZXR1cm5zIG5vdGhpbmcKKyAqCisgKiBZUEJJTkRQUk9DX0RPTUFJTiB0YWtlcyAoY2hhciAqKSByZXR1cm5zIChzdHJ1Y3QgeXBiaW5kX3Jlc3ApCisgKgorICogWVBCSU5EUFJPQ19TRVRET00gdGFrZXMgKHN0cnVjdCB5cGJpbmRfc2V0ZG9tKSByZXR1cm5zIG5vdGhpbmcKKyAqLworCisvKiBQcm9ncmFtIGFuZCB2ZXJzaW9uIHN5bWJvbHMsIG1hZ2ljIG51bWJlcnMgKi8KKworI2RlZmluZSBZUEJJTkRQUk9HCQkxMDAwMDcKKyNkZWZpbmUgWVBCSU5EVkVSUwkJMgorI2RlZmluZSBZUEJJTkRWRVJTX09SSUcJCTEKKworLyogUHJvY2VkdXJlIHN5bWJvbHMgKi8KKworI2RlZmluZSBZUEJJTkRQUk9DX05VTEwJCTAKKyNkZWZpbmUgWVBCSU5EUFJPQ19ET01BSU4JMQorI2RlZmluZSBZUEJJTkRQUk9DX1NFVERPTQkyCisvKgorICogUmVzcG9uc2Ugc3RydWN0dXJlIGFuZCBvdmVyYWxsIHJlc3VsdCBzdGF0dXMgY29kZXMuICBTdWNjZXNzIGFuZCBmYWlsdXJlCisgKiByZXByZXNlbnQgdHdvIHNlcGFyYXRlIHJlc3BvbnNlIG1lc3NhZ2UgdHlwZXMuCisgKi8KKworZW51bSB5cGJpbmRfcmVzcHR5cGUge1lQQklORF9TVUNDX1ZBTCA9IDEsIFlQQklORF9GQUlMX1ZBTCA9IDJ9OworCitzdHJ1Y3QgeXBiaW5kX2JpbmRpbmcgeworICBzdHJ1Y3QgaW5fYWRkciB5cGJpbmRfYmluZGluZ19hZGRyOwkgICAgICAgIC8qIEluIG5ldHdvcmsgb3JkZXIgKi8KKyAgdW5zaWduZWQgc2hvcnQgaW50IHlwYmluZF9iaW5kaW5nX3BvcnQ7CS8qIEluIG5ldHdvcmsgb3JkZXIgKi8KK307CisKK3N0cnVjdCB5cGJpbmRfcmVzcCB7CisgIGVudW0geXBiaW5kX3Jlc3B0eXBlIHlwYmluZF9zdGF0dXM7CisgIHVuaW9uIHsKKyAgICB1X2ludCB5cGJpbmRfZXJyb3I7CisgICAgc3RydWN0IHlwYmluZF9iaW5kaW5nIHlwYmluZF9iaW5kaW5mbzsKKyAgfSB5cGJpbmRfcmVzcGJvZHk7Cit9OworCisKKy8qIERldGFpbGVkIGZhaWx1cmUgcmVhc29uIGNvZGVzIGZvciByZXNwb25zZSBmaWVsZCB5cGJpbmRfZXJyb3IqLworCisjZGVmaW5lIFlQQklORF9FUlJfRVJSIDEJCS8qIEludGVybmFsIGVycm9yICovCisjZGVmaW5lIFlQQklORF9FUlJfTk9TRVJWIDIJCS8qIE5vIGJvdW5kIHNlcnZlciBmb3IgcGFzc2VkIGRvbWFpbiAqLworI2RlZmluZSBZUEJJTkRfRVJSX1JFU0MgMwkJLyogU3lzdGVtIHJlc291cmNlIGFsbG9jYXRpb24gZmFpbHVyZSAqLworCisvKgorICogUmVxdWVzdCBkYXRhIHN0cnVjdHVyZSBmb3IgeXBiaW5kICJTZXQgZG9tYWluIiBwcm9jZWR1cmUuCisgKi8KK3N0cnVjdCB5cGJpbmRfc2V0ZG9tIHsKKyAgY2hhciAqeXBzZXRkb21fZG9tYWluOworICBzdHJ1Y3QgeXBiaW5kX2JpbmRpbmcgeXBzZXRkb21fYmluZGluZzsKKyAgdV9pbnQgeXBzZXRkb21fdmVyczsKK307CisjZGVmaW5lIHlwc2V0ZG9tX2FkZHIgeXBzZXRkb21fYmluZGluZy55cGJpbmRfYmluZGluZ19hZGRyCisjZGVmaW5lIHlwc2V0ZG9tX3BvcnQgeXBzZXRkb21fYmluZGluZy55cGJpbmRfYmluZGluZ19wb3J0CisKKy8qCisgKgkJUHJvdG9jb2wgYmV0d2VlbiBjbGllbnRzICh5cHhmciwgb25seSkgYW5kIHlwcHVzaAorICoJCXlwcHVzaCBzcGVha3MgYSBwcm90b2NvbCBpbiB0aGUgdHJhbnNpZW50IHJhbmdlLCB3aGljaAorICoJCWlzIHN1cHBsaWVkIHRvIHlweGZyIGFzIGEgY29tbWFuZC1saW5lIHBhcmFtZXRlciB3aGVuIGl0CisgKgkJaXMgYWN0aXZhdGVkIGJ5IHlwc2Vydi4KKyAqLworI2RlZmluZSBZUFBVU0hWRVJTCQkxCisjZGVmaW5lIFlQUFVTSFZFUlNfT1JJRwkJMQorCisvKiBQcm9jZWR1cmUgc3ltYm9scyAqLworCisjZGVmaW5lIFlQUFVTSFBST0NfTlVMTAkJMAorI2RlZmluZSBZUFBVU0hQUk9DX1hGUlJFU1AJMQorCisvKiBTdGF0dXMgdmFsdWVzIGZvciB5cHB1c2hyZXNwX3hmci5zdGF0dXMgKi8KKworZW51bSB5cHB1c2hfc3RhdHVzIHsKKyAgWVBQVVNIX1NVQ0MgPSAxLAkJLyogU3VjY2VzcyAqLworI2RlZmluZSBZUFBVU0hfU1VDQwlZUFBVU0hfU1VDQworICBZUFBVU0hfQUdFID0gMiwJCS8qIE1hc3RlcidzIHZlcnNpb24gbm90IG5ld2VyICovCisjZGVmaW5lIFlQUFVTSF9BR0UJWVBQVVNIX0FHRQorICBZUFBVU0hfTk9NQVAgPSAtMSwJCS8qIENhbid0IGZpbmQgc2VydmVyIGZvciBtYXAgKi8KKyNkZWZpbmUgWVBQVVNIX05PTUFQIAlZUFBVU0hfTk9NQVAKKyAgWVBQVVNIX05PRE9NID0gLTIsCQkvKiBEb21haW4gbm90IHN1cHBvcnRlZCAqLworI2RlZmluZSBZUFBVU0hfTk9ET00gCVlQUFVTSF9OT0RPTQorICBZUFBVU0hfUlNSQyA9IC0zLAkJLyogTG9jYWwgcmVzb3VjZSBhbGxvYyBmYWlsdXJlICovCisjZGVmaW5lIFlQUFVTSF9SU1JDIAlZUFBVU0hfUlNSQworICBZUFBVU0hfUlBDID0gLTQsCQkvKiBSUEMgZmFpbHVyZSB0YWxraW5nIHRvIHNlcnZlciAqLworI2RlZmluZSBZUFBVU0hfUlBDIAlZUFBVU0hfUlBDCisgIFlQUFVTSF9NQUREUiA9IC01LAkJLyogQ2FuJ3QgZ2V0IG1hc3RlciBhZGRyZXNzICovCisjZGVmaW5lIFlQUFVTSF9NQUREUglZUFBVU0hfTUFERFIKKyAgWVBQVVNIX1lQRVJSID0gLTYsCQkvKiBOSVMgc2VydmVyL21hcCBkYiBlcnJvciAqLworI2RlZmluZSBZUFBVU0hfWVBFUlIgCVlQUFVTSF9ZUEVSUgorICBZUFBVU0hfQkFEQVJHUyA9IC03LAkJLyogUmVxdWVzdCBhcmd1bWVudHMgYmFkICovCisjZGVmaW5lIFlQUFVTSF9CQURBUkdTIAlZUFBVU0hfQkFEQVJHUworICBZUFBVU0hfREJNID0gLTgsCQkvKiBMb2NhbCBkYm0gb3BlcmF0aW9uIGZhaWxlZCAqLworI2RlZmluZSBZUFBVU0hfREJNCVlQUFVTSF9EQk0KKyAgWVBQVVNIX0ZJTEUgPSAtOSwJCS8qIExvY2FsIGZpbGUgSS9PIG9wZXJhdGlvbiBmYWlsZWQgKi8KKyNkZWZpbmUgWVBQVVNIX0ZJTEUJWVBQVVNIX0ZJTEUKKyAgWVBQVVNIX1NLRVcgPSAtMTAsCQkvKiBNYXAgdmVyc2lvbiBza2V3IGR1cmluZyB0cmFuc2ZlciAqLworI2RlZmluZSBZUFBVU0hfU0tFVwlZUFBVU0hfU0tFVworICBZUFBVU0hfQ0xFQVIgPSAtMTEsCQkvKiBDYW4ndCBzZW5kICJDbGVhciIgcmVxIHRvIGxvY2FsIHlwc2VydiAqLworI2RlZmluZSBZUFBVU0hfQ0xFQVIJWVBQVVNIX0NMRUFSCisgIFlQUFVTSF9GT1JDRSA9IC0xMiwJCS8qIE5vIGxvY2FsIG9yZGVyIG51bWJlciBpbiBtYXAgLSB1c2UgLWYgZmxhZyovCisjZGVmaW5lIFlQUFVTSF9GT1JDRQlZUFBVU0hfRk9SQ0UKKyAgWVBQVVNIX1hGUkVSUiA9IC0xMywJCS8qIHlweGZyIGVycm9yICovCisjZGVmaW5lIFlQUFVTSF9YRlJFUlIJWVBQVVNIX1hGUkVSUgorICBZUFBVU0hfUkVGVVNFRCA9IC0xNCwJCS8qIFRyYW5zZmVyIHJlcXVlc3QgcmVmdXNlZCBieSB5cHNlcnYgKi8KKyNkZWZpbmUgWVBQVVNIX1JFRlVTRUQJWVBQVVNIX1JFRlVTRUQKKyAgWVBQVVNIX05PQUxJQVMgPSAtMTUJCS8qIEFsaWFzIG5vdCBmb3VuZCBmb3IgbWFwIG9yIGRvbWFpbiAqLworI2RlZmluZQlZUFBVU0hfTk9BTElBUwlZUFBVU0hfTk9BTElBUworfTsKK3R5cGVkZWYgZW51bSB5cHB1c2hfc3RhdHVzIHlwcHVzaF9zdGF0dXM7CisKK3N0cnVjdCB5cHB1c2hyZXNwX3hmciB7CisgIHVfaW50IHRyYW5zaWQ7CisgIHlwcHVzaF9zdGF0dXMgc3RhdHVzOworfTsKKworc3RydWN0IHlwcmVzcF9hbGwgeworICBib29sX3QgbW9yZTsKKyAgdW5pb24geworICAgIHN0cnVjdCB5cHJlc3Bfa2V5X3ZhbCB2YWw7CisgIH0geXByZXNwX2FsbF91OworfTsKKworZXh0ZXJuIGJvb2xfdCB4ZHJfeXByZXFfa2V5IChYRFIgKl9feGRycywgc3RydWN0IHlwcmVxX2tleSAqIF9fb2JqcCk7CitleHRlcm4gYm9vbF90IHhkcl95cHJlcV9ub2tleSAoWERSICpfX3hkcnMsIHN0cnVjdCB5cHJlcV9ub2tleSAqIF9fb2JqcCk7CitleHRlcm4gYm9vbF90IHhkcl95cHJlcV94ZnIgKFhEUiAqX194ZHJzLCBzdHJ1Y3QgeXByZXFfeGZyICogX19vYmpwKTsKK2V4dGVybiBib29sX3QgeGRyX3lwcmVzcF92YWwgKFhEUiAqX194ZHJzLCBzdHJ1Y3QgeXByZXNwX3ZhbCAqIF9fb2JqcCk7CitleHRlcm4gYm9vbF90IHhkcl95cHJlc3Bfa2V5X3ZhbCAoWERSICpfX3hkcnMsIHN0cnVjdCB5cHJlc3Bfa2V5X3ZhbCAqIF9fb2JqcCk7CitleHRlcm4gYm9vbF90IHhkcl95cGJpbmRfcmVzcCAoWERSICpfX3hkcnMsIHN0cnVjdCB5cGJpbmRfcmVzcCAqIF9fb2JqcCk7CitleHRlcm4gYm9vbF90IHhkcl95cGJpbmRfc2V0ZG9tIChYRFIgKl9feGRycywgc3RydWN0IHlwYmluZF9zZXRkb20gKiBfX29ianApOworZXh0ZXJuIGJvb2xfdCB4ZHJfeXBtYXBfcGFybXMgKFhEUiAqX194ZHJzLCBzdHJ1Y3QgeXBtYXBfcGFybXMgKiBfX29ianApOworZXh0ZXJuIGJvb2xfdCB4ZHJfeXBwdXNocmVzcF94ZnIgKFhEUiAqX194ZHJzLCBzdHJ1Y3QgeXBwdXNocmVzcF94ZnIgKiBfX29ianApOworZXh0ZXJuIGJvb2xfdCB4ZHJfeXByZXNwX29yZGVyIChYRFIgKl9feGRycywgc3RydWN0IHlwcmVzcF9vcmRlciAgKiBfX29ianApOworZXh0ZXJuIGJvb2xfdCB4ZHJfeXByZXNwX21hc3RlciAoWERSICpfX3hkcnMsIHN0cnVjdCB5cHJlc3BfbWFzdGVyICogX19vYmpwKTsKK2V4dGVybiBib29sX3QgeGRyX3lwYWxsIChYRFIgKl9feGRycywgc3RydWN0IHlwYWxsX2NhbGxiYWNrICogX19vYmpwKTsKK2V4dGVybiBib29sX3QgeGRyX3lwcmVzcF9tYXBsaXN0IChYRFIgKl9feGRycywgc3RydWN0IHlwcmVzcF9tYXBsaXN0ICogX19vYmpwKTsKK2V4dGVybiBib29sX3QgeGRyX3lwYmluZF9iaW5kaW5nIChYRFIgKl9feGRycywgc3RydWN0IHlwYmluZF9iaW5kaW5nICogX19vYmpwKTsKK2V4dGVybiBib29sX3QgeGRyX3lwYmluZF9yZXNwdHlwZSAoWERSICpfX3hkcnMsIGVudW0geXBiaW5kX3Jlc3B0eXBlICogX19vYmpwKTsKK2V4dGVybiBib29sX3QgeGRyX3lwc3RhdCAoWERSICpfX3hkcnMsIGVudW0geXBiaW5kX3Jlc3B0eXBlICogX19vYmpwKTsKK2V4dGVybiBib29sX3QgeGRyX3lwcmVzcF9hbGwgKFhEUiAqX194ZHJzLCBzdHJ1Y3QgeXByZXNwX2FsbCAgKiBfX29ianApOworZXh0ZXJuIGJvb2xfdCB4ZHJfZG9tYWlubmFtZSAoWERSICpfX3hkcnMsIGNoYXIgKiogX19vYmpwKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmCS8qIF9SUENTVkNfWVBfUFJPVF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL3lwY2xudC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwY3N2Yy95cGNsbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTM3YTI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwY3N2Yy95cGNsbnQuaApAQCAtMCwwICsxLDg5IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIENvbnRyaWJ1dGVkIGJ5IFRob3JzdGVuIEt1a3VrIDxrdWt1a0BzdXNlLmRlPiwgMTk5Ni4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKworI2lmbmRlZglfX1JQQ1NWQ19ZUENMTlRfSF9fCisjZGVmaW5lCV9fUlBDU1ZDX1lQQ0xOVF9IX18KKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKy8qIFNvbWUgZGVmaW5lcyAqLworI2RlZmluZSBZUEVSUl9TVUNDRVNTCTAJCS8qIFRoZXJlIGlzIG5vIGVycm9yICovCisjZGVmaW5lCVlQRVJSX0JBREFSR1MJMQkJLyogQXJncyB0byBmdW5jdGlvbiBhcmUgYmFkICovCisjZGVmaW5lCVlQRVJSX1JQQyAJMgkJLyogUlBDIGZhaWx1cmUgKi8KKyNkZWZpbmUJWVBFUlJfRE9NQUlOCTMJCS8qIENhbid0IGJpbmQgdG8gYSBzZXJ2ZXIgd2l0aCB0aGlzIGRvbWFpbiAqLworI2RlZmluZQlZUEVSUl9NQVAJNAkJLyogTm8gc3VjaCBtYXAgaW4gc2VydmVyJ3MgZG9tYWluICovCisjZGVmaW5lCVlQRVJSX0tFWQk1CQkvKiBObyBzdWNoIGtleSBpbiBtYXAgKi8KKyNkZWZpbmUJWVBFUlJfWVBFUlIJNgkJLyogSW50ZXJuYWwgeXAgc2VydmVyIG9yIGNsaWVudCBlcnJvciAqLworI2RlZmluZQlZUEVSUl9SRVNSQwk3CQkvKiBMb2NhbCByZXNvdXJjZSBhbGxvY2F0aW9uIGZhaWx1cmUgKi8KKyNkZWZpbmUJWVBFUlJfTk9NT1JFCTgJCS8qIE5vIG1vcmUgcmVjb3JkcyBpbiBtYXAgZGF0YWJhc2UgKi8KKyNkZWZpbmUJWVBFUlJfUE1BUAk5CQkvKiBDYW4ndCBjb21tdW5pY2F0ZSB3aXRoIHBvcnRtYXBwZXIgKi8KKyNkZWZpbmUJWVBFUlJfWVBCSU5ECTEwCQkvKiBDYW4ndCBjb21tdW5pY2F0ZSB3aXRoIHlwYmluZCAqLworI2RlZmluZQlZUEVSUl9ZUFNFUlYJMTEJCS8qIENhbid0IGNvbW11bmljYXRlIHdpdGggeXBzZXJ2ICovCisjZGVmaW5lCVlQRVJSX05PRE9NCTEyCQkvKiBMb2NhbCBkb21haW4gbmFtZSBub3Qgc2V0ICovCisjZGVmaW5lCVlQRVJSX0JBRERCCTEzCQkvKiB5cCBkYXRhIGJhc2UgaXMgYmFkICovCisjZGVmaW5lCVlQRVJSX1ZFUlMJMTQJCS8qIFlQIHZlcnNpb24gbWlzbWF0Y2ggKi8KKyNkZWZpbmUJWVBFUlJfQUNDRVNTCTE1CQkvKiBBY2Nlc3MgdmlvbGF0aW9uICovCisjZGVmaW5lCVlQRVJSX0JVU1kJMTYJCS8qIERhdGFiYXNlIGlzIGJ1c3kgKi8KKworLyogVHlwZXMgb2YgdXBkYXRlIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUJWVBPUF9DSEFOR0UJMQkJLyogQ2hhbmdlLCBkbyBub3QgYWRkICovCisjZGVmaW5lCVlQT1BfSU5TRVJUCTIJCS8qIEFkZCwgZG8gbm90IGNoYW5nZSAqLworI2RlZmluZQlZUE9QX0RFTEVURQkzCQkvKiBEZWxldGUgdGhpcyBlbnRyeSAqLworI2RlZmluZQlZUE9QX1NUT1JFCTQJCS8qIEFkZCwgb3IgY2hhbmdlICovCisKK19fQkVHSU5fREVDTFMKKworLyogc3RydWN0IHlwYWxsX2NhbGxiYWNrICogaXMgdGhlIGFyZyB3aGljaCBtdXN0IGJlIHBhc3NlZCB0byB5cF9hbGwuICAqLworc3RydWN0IHlwYWxsX2NhbGxiYWNrCisgIHsKKyAgICBpbnQgKCpmb3JlYWNoKSAoaW50IF9fc3RhdHVzLCBjaGFyICpfX2tleSwgaW50IF9fa2V5bGVuLAorCQkgICAgY2hhciAqX192YWwsIGludCBfX3ZhbGxlbiwgY2hhciAqX19kYXRhKTsKKyAgICBjaGFyICpkYXRhOworICB9OworCisvKiBFeHRlcm5hbCBOSVMgY2xpZW50IGZ1bmN0aW9uIHJlZmVyZW5jZXMuICAqLworZXh0ZXJuIGludCB5cF9iaW5kIChfX2NvbnN0IGNoYXIgKikgX19USFJPVzsKK2V4dGVybiB2b2lkIHlwX3VuYmluZCAoX19jb25zdCBjaGFyICopIF9fVEhST1c7CitleHRlcm4gaW50IHlwX2dldF9kZWZhdWx0X2RvbWFpbiAoY2hhciAqKikgX19USFJPVzsKK2V4dGVybiBpbnQgeXBfbWF0Y2ggKF9fY29uc3QgY2hhciAqLCBfX2NvbnN0IGNoYXIgKiwgX19jb25zdCBjaGFyICosCisJCSAgICAgX19jb25zdCBpbnQsIGNoYXIgKiosIGludCAqKSBfX1RIUk9XOworZXh0ZXJuIGludCB5cF9maXJzdCAoX19jb25zdCBjaGFyICosIF9fY29uc3QgY2hhciAqLCBjaGFyICoqLAorCQkgICAgIGludCAqLCBjaGFyICoqLCBpbnQgKikgX19USFJPVzsKK2V4dGVybiBpbnQgeXBfbmV4dCAoX19jb25zdCBjaGFyICosIF9fY29uc3QgY2hhciAqLCBfX2NvbnN0IGNoYXIgKiwKKwkJICAgIF9fY29uc3QgaW50LCBjaGFyICoqLCBpbnQgKiwgY2hhciAqKiwgaW50ICopIF9fVEhST1c7CitleHRlcm4gaW50IHlwX21hc3RlciAoX19jb25zdCBjaGFyICosIF9fY29uc3QgY2hhciAqLCBjaGFyICoqKSBfX1RIUk9XOworZXh0ZXJuIGludCB5cF9vcmRlciAoX19jb25zdCBjaGFyICosIF9fY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQgKikgX19USFJPVzsKK2V4dGVybiBpbnQgeXBfYWxsIChfX2NvbnN0IGNoYXIgKiwgX19jb25zdCBjaGFyICosCisJCSAgIF9fY29uc3Qgc3RydWN0IHlwYWxsX2NhbGxiYWNrICopIF9fVEhST1c7CitleHRlcm4gX19jb25zdCBjaGFyICp5cGVycl9zdHJpbmcgKF9fY29uc3QgaW50KSBfX1RIUk9XOworZXh0ZXJuIF9fY29uc3QgY2hhciAqeXBiaW5kZXJyX3N0cmluZyAoX19jb25zdCBpbnQpIF9fVEhST1c7CitleHRlcm4gaW50IHlwcHJvdF9lcnIgKF9fY29uc3QgaW50KSBfX1RIUk9XOworZXh0ZXJuIGludCB5cF91cGRhdGUgKGNoYXIgKiwgY2hhciAqLCB1bnNpZ25lZCBpbnQsICBjaGFyICosCisJCSAgICAgIGludCwgY2hhciAqLCBpbnQpIF9fVEhST1c7CisjaWYgMAorZXh0ZXJuIGludCB5cF9tYXBsaXN0IChfX2NvbnN0IGNoYXIgKiwgc3RydWN0IHlwbWFwbGlzdCAqKikgX19USFJPVzsKKyNlbmRpZgorCisvKiBUaGlzIGZ1bmN0aW9ucyBleGlzdHMgb25seSB1bmRlciBCU0QgYW5kIExpbnV4IHN5c3RlbXMuICAqLworZXh0ZXJuIGludCBfX3lwX2NoZWNrIChjaGFyICoqKSBfX1RIUk9XOworCitfX0VORF9ERUNMUworCisjZW5kaWYJLyogX19SUENTVkNfWVBDTE5UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwY3N2Yy95cHBhc3N3ZC54IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3JwY3N2Yy95cHBhc3N3ZC54Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMzQ5YWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL3lwcGFzc3dkLngKQEAgLTAsMCArMSw2MyBAQAorLyogQCgjKXlwcGFzc3dkLngJMi4xIDg4LzA4LzAxIDQuMCBSUENTUkMgKi8KKy8qIEAoIyl5cHBhc3N3ZC54IDEuMSA4Ny8wNC8xMyBDb3B5ciAxOTg3IFN1biBNaWNybyAqLworCisvKgorICogU3VuIFJQQyBpcyBhIHByb2R1Y3Qgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBhbmQgaXMgcHJvdmlkZWQgZm9yCisgKiB1bnJlc3RyaWN0ZWQgdXNlIHByb3ZpZGVkIHRoYXQgdGhpcyBsZWdlbmQgaXMgaW5jbHVkZWQgb24gYWxsIHRhcGUKKyAqIG1lZGlhIGFuZCBhcyBhIHBhcnQgb2YgdGhlIHNvZnR3YXJlIHByb2dyYW0gaW4gd2hvbGUgb3IgcGFydC4gIFVzZXJzCisgKiBtYXkgY29weSBvciBtb2RpZnkgU3VuIFJQQyB3aXRob3V0IGNoYXJnZSwgYnV0IGFyZSBub3QgYXV0aG9yaXplZAorICogdG8gbGljZW5zZSBvciBkaXN0cmlidXRlIGl0IHRvIGFueW9uZSBlbHNlIGV4Y2VwdCBhcyBwYXJ0IG9mIGEgcHJvZHVjdCBvcgorICogcHJvZ3JhbSBkZXZlbG9wZWQgYnkgdGhlIHVzZXIuCisgKiAKKyAqIFNVTiBSUEMgSVMgUFJPVklERUQgQVMgSVMgV0lUSCBOTyBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIElOQ0xVRElORyBUSEUKKyAqIFdBUlJBTlRJRVMgT0YgREVTSUdOLCBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSwgT1IgQVJJU0lORyBGUk9NIEEgQ09VUlNFIE9GIERFQUxJTkcsIFVTQUdFIE9SIFRSQURFIFBSQUNUSUNFLgorICogCisgKiBTdW4gUlBDIGlzIHByb3ZpZGVkIHdpdGggbm8gc3VwcG9ydCBhbmQgd2l0aG91dCBhbnkgb2JsaWdhdGlvbiBvbiB0aGUKKyAqIHBhcnQgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiB0byBhc3Npc3QgaW4gaXRzIHVzZSwgY29ycmVjdGlvbiwKKyAqIG1vZGlmaWNhdGlvbiBvciBlbmhhbmNlbWVudC4KKyAqIAorICogU1VOIE1JQ1JPU1lTVEVNUywgSU5DLiBTSEFMTCBIQVZFIE5PIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFCisgKiBJTkZSSU5HRU1FTlQgT0YgQ09QWVJJR0hUUywgVFJBREUgU0VDUkVUUyBPUiBBTlkgUEFURU5UUyBCWSBTVU4gUlBDCisgKiBPUiBBTlkgUEFSVCBUSEVSRU9GLgorICogCisgKiBJbiBubyBldmVudCB3aWxsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYmUgbGlhYmxlIGZvciBhbnkgbG9zdCByZXZlbnVlCisgKiBvciBwcm9maXRzIG9yIG90aGVyIHNwZWNpYWwsIGluZGlyZWN0IGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIGV2ZW4gaWYKKyAqIFN1biBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisgKiAKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIDI1NTAgR2FyY2lhIEF2ZW51ZQorICogTW91bnRhaW4gVmlldywgQ2FsaWZvcm5pYSAgOTQwNDMKKyAqLworCisvKgorICogWVAgcGFzc3dvcmQgdXBkYXRlIHByb3RvY29sCisgKiBSZXF1aXJlcyB1bml4IGF1dGhlbnRpY2F0aW9uCisgKi8KK3Byb2dyYW0gWVBQQVNTV0RQUk9HIHsKKwl2ZXJzaW9uIFlQUEFTU1dEVkVSUyB7CisJCS8qCisJCSAqIFVwZGF0ZSBteSBwYXNzd2QgZW50cnkgCisJCSAqLworCQlpbnQKKwkJWVBQQVNTV0RQUk9DX1VQREFURSh5cHBhc3N3ZCkgPSAxOworCX0gPSAxOworfSA9IDEwMDAwOTsKKworCitzdHJ1Y3QgcGFzc3dkIHsKKwlzdHJpbmcgcHdfbmFtZTw+OwkvKiB1c2VybmFtZSAqLworCXN0cmluZyBwd19wYXNzd2Q8PjsJLyogZW5jcnlwdGVkIHBhc3N3b3JkICovCisJaW50IHB3X3VpZDsJCS8qIHVzZXIgaWQgKi8KKwlpbnQgcHdfZ2lkOwkJLyogZ3JvdXAgaWQgKi8KKwlzdHJpbmcgcHdfZ2Vjb3M8PjsJLyogaW4gcmVhbCBsaWZlIG5hbWUgKi8KKwlzdHJpbmcgcHdfZGlyPD47CS8qIGhvbWUgZGlyZWN0b3J5ICovCisJc3RyaW5nIHB3X3NoZWxsPD47CS8qIGRlZmF1bHQgc2hlbGwgKi8KK307CisKK3N0cnVjdCB5cHBhc3N3ZCB7CisJc3RyaW5nIG9sZHBhc3M8PjsJLyogdW5lbmNyeXB0ZWQgb2xkIHBhc3N3b3JkICovCisJcGFzc3dkIG5ld3B3OwkJLyogbmV3IHBhc3N3ZCBlbnRyeSAqLworfTsKKworCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL3lwdXBkLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvcnBjc3ZjL3lwdXBkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUzZTY5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9ycGNzdmMveXB1cGQuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogU3VuIFJQQyBpcyBhIHByb2R1Y3Qgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBhbmQgaXMgcHJvdmlkZWQgZm9yCisgKiB1bnJlc3RyaWN0ZWQgdXNlIHByb3ZpZGVkIHRoYXQgdGhpcyBsZWdlbmQgaXMgaW5jbHVkZWQgb24gYWxsIHRhcGUKKyAqIG1lZGlhIGFuZCBhcyBhIHBhcnQgb2YgdGhlIHNvZnR3YXJlIHByb2dyYW0gaW4gd2hvbGUgb3IgcGFydC4gIFVzZXJzCisgKiBtYXkgY29weSBvciBtb2RpZnkgU3VuIFJQQyB3aXRob3V0IGNoYXJnZSwgYnV0IGFyZSBub3QgYXV0aG9yaXplZAorICogdG8gbGljZW5zZSBvciBkaXN0cmlidXRlIGl0IHRvIGFueW9uZSBlbHNlIGV4Y2VwdCBhcyBwYXJ0IG9mIGEgcHJvZHVjdCBvcgorICogcHJvZ3JhbSBkZXZlbG9wZWQgYnkgdGhlIHVzZXIgb3Igd2l0aCB0aGUgZXhwcmVzcyB3cml0dGVuIGNvbnNlbnQgb2YKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqCisgKiBTVU4gUlBDIElTIFBST1ZJREVEIEFTIElTIFdJVEggTk8gV0FSUkFOVElFUyBPRiBBTlkgS0lORCBJTkNMVURJTkcgVEhFCisgKiBXQVJSQU5USUVTIE9GIERFU0lHTiwgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UsIE9SIEFSSVNJTkcgRlJPTSBBIENPVVJTRSBPRiBERUFMSU5HLCBVU0FHRSBPUiBUUkFERSBQUkFDVElDRS4KKyAqCisgKiBTdW4gUlBDIGlzIHByb3ZpZGVkIHdpdGggbm8gc3VwcG9ydCBhbmQgd2l0aG91dCBhbnkgb2JsaWdhdGlvbiBvbiB0aGUKKyAqIHBhcnQgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiB0byBhc3Npc3QgaW4gaXRzIHVzZSwgY29ycmVjdGlvbiwKKyAqIG1vZGlmaWNhdGlvbiBvciBlbmhhbmNlbWVudC4KKyAqCisgKiBTVU4gTUlDUk9TWVNURU1TLCBJTkMuIFNIQUxMIEhBVkUgTk8gTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUKKyAqIElORlJJTkdFTUVOVCBPRiBDT1BZUklHSFRTLCBUUkFERSBTRUNSRVRTIE9SIEFOWSBQQVRFTlRTIEJZIFNVTiBSUEMKKyAqIE9SIEFOWSBQQVJUIFRIRVJFT0YuCisgKgorICogSW4gbm8gZXZlbnQgd2lsbCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJlIGxpYWJsZSBmb3IgYW55IGxvc3QgcmV2ZW51ZQorICogb3IgcHJvZml0cyBvciBvdGhlciBzcGVjaWFsLCBpbmRpcmVjdCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBldmVuIGlmCisgKiBTdW4gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorICoKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIDI1NTAgR2FyY2lhIEF2ZW51ZQorICogTW91bnRhaW4gVmlldywgQ2FsaWZvcm5pYSAgOTQwNDMKKyAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4NiwgMTk5MCBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKi8KKy8qIGZyb20gQCgjKXlwdXBkYXRlX3Byb3QueAkxLjMgOTEvMDMvMTEgVElSUEMgMS4wICovCisKKyNpZm5kZWYgX19SUENTVkNfWVBVUERfSF9fCisjZGVmaW5lIF9fUlBDU1ZDX1lQVVBEX0hfXworCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgPHJwYy9ycGMuaD4KKworI2RlZmluZSBNQVhNQVBOQU1FTEVOIDI1NQorI2RlZmluZSBNQVhZUERBVEFMRU4gMTAyMworI2RlZmluZSBNQVhFUlJNU0dMRU4gMjU1CisKK19fQkVHSU5fREVDTFMKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVfaW50IHlwX2J1Zl9sZW47CisJY2hhciAqeXBfYnVmX3ZhbDsKK30geXBfYnVmOworCitleHRlcm4gIGJvb2xfdCB4ZHJfeXBfYnVmIChYRFIgKiwgeXBfYnVmKik7CisKK3N0cnVjdCB5cHVwZGF0ZV9hcmdzIHsKKwljaGFyICptYXBuYW1lOworCXlwX2J1ZiBrZXk7CisJeXBfYnVmIGRhdHVtOworfTsKK3R5cGVkZWYgc3RydWN0IHlwdXBkYXRlX2FyZ3MgeXB1cGRhdGVfYXJnczsKKworZXh0ZXJuICBib29sX3QgeGRyX3lwdXBkYXRlX2FyZ3MgKFhEUiAqLCB5cHVwZGF0ZV9hcmdzKik7CisKK3N0cnVjdCB5cGRlbGV0ZV9hcmdzIHsKKwljaGFyICptYXBuYW1lOworCXlwX2J1ZiBrZXk7Cit9OwordHlwZWRlZiBzdHJ1Y3QgeXBkZWxldGVfYXJncyB5cGRlbGV0ZV9hcmdzOworCitleHRlcm4gIGJvb2xfdCB4ZHJfeXBkZWxldGVfYXJncyAoWERSICosIHlwZGVsZXRlX2FyZ3MqKTsKKworI2RlZmluZSBZUFVfUFJPRyAxMDAwMjgKKyNkZWZpbmUgWVBVX1ZFUlMgMQorCisjZGVmaW5lIFlQVV9DSEFOR0UgMQorZXh0ZXJuICB1X2ludCAqIHlwdV9jaGFuZ2VfMSAoeXB1cGRhdGVfYXJncyAqLCBDTElFTlQgKik7CitleHRlcm4gIHVfaW50ICogeXB1X2NoYW5nZV8xX3N2YyAoeXB1cGRhdGVfYXJncyAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKTsKKyNkZWZpbmUgWVBVX0lOU0VSVCAyCitleHRlcm4gIHVfaW50ICogeXB1X2luc2VydF8xICh5cHVwZGF0ZV9hcmdzICosIENMSUVOVCAqKTsKK2V4dGVybiAgdV9pbnQgKiB5cHVfaW5zZXJ0XzFfc3ZjICh5cHVwZGF0ZV9hcmdzICosIHN0cnVjdCBzdmNfcmVxICopOworI2RlZmluZSBZUFVfREVMRVRFIDMKK2V4dGVybiAgdV9pbnQgKiB5cHVfZGVsZXRlXzEgKHlwZGVsZXRlX2FyZ3MgKiwgQ0xJRU5UICopOworZXh0ZXJuICB1X2ludCAqIHlwdV9kZWxldGVfMV9zdmMgKHlwZGVsZXRlX2FyZ3MgKiwgc3RydWN0IHN2Y19yZXEgKik7CisjZGVmaW5lIFlQVV9TVE9SRSA0CitleHRlcm4gIHVfaW50ICogeXB1X3N0b3JlXzEgKHlwdXBkYXRlX2FyZ3MgKiwgQ0xJRU5UICopOworZXh0ZXJuICB1X2ludCAqIHlwdV9zdG9yZV8xX3N2YyAoeXB1cGRhdGVfYXJncyAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qICFfX1JQQ1NWQ19ZUFVQRF9IX18gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zY2hlZC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3NjaGVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk1YzgwZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zY2hlZC5oCkBAIC0wLDAgKzEsMTIwIEBACisvKiBEZWZpbml0aW9ucyBmb3IgUE9TSVggMTAwMy4xYi0xOTkzIChha2EgUE9TSVguNCkgc2NoZWR1bGluZyBpbnRlcmZhY2UuCisgICBDb3B5cmlnaHQgKEMpIDE5OTYsMTk5NywxOTk5LDIwMDEtMjAwNCwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmCV9TQ0hFRF9ICisjZGVmaW5lCV9TQ0hFRF9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKy8qIEdldCB0eXBlIGRlZmluaXRpb25zLiAgKi8KKyNpbmNsdWRlIDxiaXRzL3R5cGVzLmg+CisKKyNkZWZpbmUgX19uZWVkX3NpemVfdAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjZGVmaW5lIF9fbmVlZF90aW1lc3BlYworI2luY2x1ZGUgPHRpbWUuaD4KKworLyogR2V0IHN5c3RlbSBzcGVjaWZpYyBjb25zdGFudCBhbmQgZGF0YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMuICAqLworI2luY2x1ZGUgPGJpdHMvc2NoZWQuaD4KKy8qIERlZmluZSB0aGUgcmVhbCBuYW1lcyBmb3IgdGhlIGVsZW1lbnRzIG9mIGBzdHJ1Y3Qgc2NoZWRfcGFyYW0nLiAgKi8KKyNkZWZpbmUgc2NoZWRfcHJpb3JpdHkJX19zY2hlZF9wcmlvcml0eQorCisKK19fQkVHSU5fREVDTFMKKworLyogU2V0IHNjaGVkdWxpbmcgcGFyYW1ldGVycyBmb3IgYSBwcm9jZXNzLiAgKi8KK2V4dGVybiBpbnQgc2NoZWRfc2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKQorICAgICBfX1RIUk9XOworCisvKiBSZXRyaWV2ZSBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgZm9yIGEgcGFydGljdWxhciBwcm9jZXNzLiAgKi8KK2V4dGVybiBpbnQgc2NoZWRfZ2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgX19USFJPVzsKKworLyogU2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtIGFuZC9vciBwYXJhbWV0ZXJzIGZvciBhIHByb2Nlc3MuICAqLworZXh0ZXJuIGludCBzY2hlZF9zZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwKKwkJCSAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgX19USFJPVzsKKworLyogUmV0cmlldmUgc2NoZWR1bGluZyBhbGdvcml0aG0gZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgKi8KK2V4dGVybiBpbnQgc2NoZWRfZ2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkKSBfX1RIUk9XOworCisvKiBZaWVsZCB0aGUgcHJvY2Vzc29yLiAgKi8KK2V4dGVybiBpbnQgc2NoZWRfeWllbGQgKHZvaWQpIF9fVEhST1c7CisKKy8qIEdldCBtYXhpbXVtIHByaW9yaXR5IHZhbHVlIGZvciBhIHNjaGVkdWxlci4gICovCitleHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9tYXggKGludCBfX2FsZ29yaXRobSkgX19USFJPVzsKKworLyogR2V0IG1pbmltdW0gcHJpb3JpdHkgdmFsdWUgZm9yIGEgc2NoZWR1bGVyLiAgKi8KK2V4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoaW50IF9fYWxnb3JpdGhtKSBfX1RIUk9XOworCisvKiBHZXQgdGhlIFNDSEVEX1JSIGludGVydmFsIGZvciB0aGUgbmFtZWQgcHJvY2Vzcy4gICovCitleHRlcm4gaW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbCAoX19waWRfdCBfX3BpZCwgc3RydWN0IHRpbWVzcGVjICpfX3QpIF9fVEhST1c7CisKKworI2lmZGVmIF9fVVNFX0dOVQorLyogQWNjZXNzIG1hY3JvcyBmb3IgYGNwdV9zZXQnLiAgKi8KKyMgZGVmaW5lIENQVV9TRVRTSVpFIF9fQ1BVX1NFVFNJWkUKKyMgZGVmaW5lIENQVV9TRVQoY3B1LCBjcHVzZXRwKQkgX19DUFVfU0VUX1MgKGNwdSwgc2l6ZW9mIChjcHVfc2V0X3QpLCBjcHVzZXRwKQorIyBkZWZpbmUgQ1BVX0NMUihjcHUsIGNwdXNldHApCSBfX0NQVV9DTFJfUyAoY3B1LCBzaXplb2YgKGNwdV9zZXRfdCksIGNwdXNldHApCisjIGRlZmluZSBDUFVfSVNTRVQoY3B1LCBjcHVzZXRwKSBfX0NQVV9JU1NFVF9TIChjcHUsIHNpemVvZiAoY3B1X3NldF90KSwgXAorCQkJCQkJY3B1c2V0cCkKKyMgZGVmaW5lIENQVV9aRVJPKGNwdXNldHApCSBfX0NQVV9aRVJPX1MgKHNpemVvZiAoY3B1X3NldF90KSwgY3B1c2V0cCkKKyMgZGVmaW5lIENQVV9DT1VOVChjcHVzZXRwKQkgX19DUFVfQ09VTlRfUyAoc2l6ZW9mIChjcHVfc2V0X3QpLCBjcHVzZXRwKQorCisjIGRlZmluZSBDUFVfU0VUX1MoY3B1LCBzZXRzaXplLCBjcHVzZXRwKSAgIF9fQ1BVX1NFVF9TIChjcHUsIHNldHNpemUsIGNwdXNldHApCisjIGRlZmluZSBDUFVfQ0xSX1MoY3B1LCBzZXRzaXplLCBjcHVzZXRwKSAgIF9fQ1BVX0NMUl9TIChjcHUsIHNldHNpemUsIGNwdXNldHApCisjIGRlZmluZSBDUFVfSVNTRVRfUyhjcHUsIHNldHNpemUsIGNwdXNldHApIF9fQ1BVX0lTU0VUX1MgKGNwdSwgc2V0c2l6ZSwgXAorCQkJCQkJCSAgIGNwdXNldHApCisjIGRlZmluZSBDUFVfWkVST19TKHNldHNpemUsIGNwdXNldHApCSAgICBfX0NQVV9aRVJPX1MgKHNldHNpemUsIGNwdXNldHApCisjIGRlZmluZSBDUFVfQ09VTlRfUyhzZXRzaXplLCBjcHVzZXRwKQkgICAgX19DUFVfQ09VTlRfUyAoc2V0c2l6ZSwgY3B1c2V0cCkKKworIyBkZWZpbmUgQ1BVX0VRVUFMKGNwdXNldHAxLCBjcHVzZXRwMikgXAorICBfX0NQVV9FUVVBTF9TIChzaXplb2YgKGNwdV9zZXRfdCksIGNwdXNldHAxLCBjcHVzZXRwMikKKyMgZGVmaW5lIENQVV9FUVVBTF9TKHNldHNpemUsIGNwdXNldHAxLCBjcHVzZXRwMikgXAorICBfX0NQVV9FUVVBTF9TIChzZXRzaXplLCBjcHVzZXRwMSwgY3B1c2V0cDIpCisKKyMgZGVmaW5lIENQVV9BTkQoZGVzdHNldCwgc3Jjc2V0MSwgc3Jjc2V0MikgXAorICBfX0NQVV9PUF9TIChzaXplb2YgKGNwdV9zZXRfdCksIGRlc3RzZXQsIHNyY3NldDEsIHNyY3NldDIsICYpCisjIGRlZmluZSBDUFVfT1IoZGVzdHNldCwgc3Jjc2V0MSwgc3Jjc2V0MikgXAorICBfX0NQVV9PUF9TIChzaXplb2YgKGNwdV9zZXRfdCksIGRlc3RzZXQsIHNyY3NldDEsIHNyY3NldDIsIHwpCisjIGRlZmluZSBDUFVfWE9SKGRlc3RzZXQsIHNyY3NldDEsIHNyY3NldDIpIFwKKyAgX19DUFVfT1BfUyAoc2l6ZW9mIChjcHVfc2V0X3QpLCBkZXN0c2V0LCBzcmNzZXQxLCBzcmNzZXQyLCBeKQorIyBkZWZpbmUgQ1BVX0FORF9TKHNldHNpemUsIGRlc3RzZXQsIHNyY3NldDEsIHNyY3NldDIpIFwKKyAgX19DUFVfT1BfUyAoc2V0c2l6ZSwgZGVzdHNldCwgc3Jjc2V0MSwgc3Jjc2V0MiwgJikKKyMgZGVmaW5lIENQVV9PUl9TKHNldHNpemUsIGRlc3RzZXQsIHNyY3NldDEsIHNyY3NldDIpIFwKKyAgX19DUFVfT1BfUyAoc2V0c2l6ZSwgZGVzdHNldCwgc3Jjc2V0MSwgc3Jjc2V0MiwgfCkKKyMgZGVmaW5lIENQVV9YT1JfUyhzZXRzaXplLCBkZXN0c2V0LCBzcmNzZXQxLCBzcmNzZXQyKSBcCisgIF9fQ1BVX09QX1MgKHNldHNpemUsIGRlc3RzZXQsIHNyY3NldDEsIHNyY3NldDIsIF4pCisKKyMgZGVmaW5lIENQVV9BTExPQ19TSVpFKGNvdW50KSBfX0NQVV9BTExPQ19TSVpFIChjb3VudCkKKyMgZGVmaW5lIENQVV9BTExPQyhjb3VudCkgX19DUFVfQUxMT0MgKGNvdW50KQorIyBkZWZpbmUgQ1BVX0ZSRUUoY3B1c2V0KSBfX0NQVV9GUkVFIChjcHVzZXQpCisKKworLyogU2V0IHRoZSBDUFUgYWZmaW5pdHkgZm9yIGEgdGFzayAqLworZXh0ZXJuIGludCBzY2hlZF9zZXRhZmZpbml0eSAoX19waWRfdCBfX3BpZCwgc2l6ZV90IF9fY3B1c2V0c2l6ZSwKKwkJCSAgICAgIF9fY29uc3QgY3B1X3NldF90ICpfX2NwdXNldCkgX19USFJPVzsKKworLyogR2V0IHRoZSBDUFUgYWZmaW5pdHkgZm9yIGEgdGFzayAqLworZXh0ZXJuIGludCBzY2hlZF9nZXRhZmZpbml0eSAoX19waWRfdCBfX3BpZCwgc2l6ZV90IF9fY3B1c2V0c2l6ZSwKKwkJCSAgICAgIGNwdV9zZXRfdCAqX19jcHVzZXQpIF9fVEhST1c7CisjZW5kaWYKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIHNjaGVkLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zY3NpL2ZjL2ZjX2Vscy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3Njc2kvZmMvZmNfZWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgxYWJiZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zY3NpL2ZjL2ZjX2Vscy5oCkBAIC0wLDAgKzEsODMxIEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKiBNYWludGFpbmVkIGF0IHd3dy5PcGVuLUZDb0Uub3JnCisgKi8KKworI2lmbmRlZiBfRkNfRUxTX0hfCisjZGVmaW5lCV9GQ19FTFNfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBGaWJyZSBDaGFubmVsIFN3aXRjaCAtIEVuaGFuY2VkIExpbmsgU2VydmljZXMgZGVmaW5pdGlvbnMuCisgKiBGcm9tIFQxMSBGQy1MUyBSZXYgMS4yIEp1bmUgNywgMjAwNS4KKyAqLworCisvKgorICogRUxTIENvbW1hbmQgY29kZXMgLSBieXRlIDAgb2YgdGhlIGZyYW1lIHBheWxvYWQKKyAqLworZW51bSBmY19lbHNfY21kIHsKKwlFTFNfTFNfUkpUID0JMHgwMSwJLyogRVNMIHJlamVjdCAqLworCUVMU19MU19BQ0MgPQkweDAyLAkvKiBFU0wgQWNjZXB0ICovCisJRUxTX1BMT0dJID0JMHgwMywJLyogTl9Qb3J0IGxvZ2luICovCisJRUxTX0ZMT0dJID0JMHgwNCwJLyogRl9Qb3J0IGxvZ2luICovCisJRUxTX0xPR08gPQkweDA1LAkvKiBMb2dvdXQgKi8KKwlFTFNfQUJUWCA9CTB4MDYsCS8qIEFib3J0IGV4Y2hhbmdlIC0gb2Jzb2xldGUgKi8KKwlFTFNfUkNTID0JMHgwNywJLyogcmVhZCBjb25uZWN0aW9uIHN0YXR1cyAqLworCUVMU19SRVMgPQkweDA4LAkvKiByZWFkIGV4Y2hhbmdlIHN0YXR1cyBibG9jayAqLworCUVMU19SU1MgPQkweDA5LAkvKiByZWFkIHNlcXVlbmNlIHN0YXR1cyBibG9jayAqLworCUVMU19SU0kgPQkweDBhLAkvKiByZWFkIHNlcXVlbmNlIGluaXRpYXRpdmUgKi8KKwlFTFNfRVNUUyA9CTB4MGIsCS8qIGVzdGFibGlzaCBzdHJlYW1pbmcgKi8KKwlFTFNfRVNUQyA9CTB4MGMsCS8qIGVzdGltYXRlIGNyZWRpdCAqLworCUVMU19BRFZDID0JMHgwZCwJLyogYWR2aXNlIGNyZWRpdCAqLworCUVMU19SVFYgPQkweDBlLAkvKiByZWFkIHRpbWVvdXQgdmFsdWUgKi8KKwlFTFNfUkxTID0JMHgwZiwJLyogcmVhZCBsaW5rIGVycm9yIHN0YXR1cyBibG9jayAqLworCUVMU19FQ0hPID0JMHgxMCwJLyogZWNobyAqLworCUVMU19URVNUID0JMHgxMSwJLyogdGVzdCAqLworCUVMU19SUlEgPQkweDEyLAkvKiByZWluc3RhdGUgcmVjb3ZlcnkgcXVhbGlmaWVyICovCisJRUxTX1JFQyA9CTB4MTMsCS8qIHJlYWQgZXhjaGFuZ2UgY29uY2lzZSAqLworCUVMU19TUlIgPQkweDE0LAkvKiBzZXF1ZW5jZSByZXRyYW5zbWlzc2lvbiByZXF1ZXN0ICovCisJRUxTX1BSTEkgPQkweDIwLAkvKiBwcm9jZXNzIGxvZ2luICovCisJRUxTX1BSTE8gPQkweDIxLAkvKiBwcm9jZXNzIGxvZ291dCAqLworCUVMU19TQ04gPQkweDIyLAkvKiBzdGF0ZSBjaGFuZ2Ugbm90aWZpY2F0aW9uICovCisJRUxTX1RQTFMgPQkweDIzLAkvKiB0ZXN0IHByb2Nlc3MgbG9naW4gc3RhdGUgKi8KKwlFTFNfVFBSTE8gPQkweDI0LAkvKiB0aGlyZCBwYXJ0eSBwcm9jZXNzIGxvZ291dCAqLworCUVMU19MQ0xNID0JMHgyNSwJLyogbG9naW4gY29udHJvbCBsaXN0IG1nbXQgKG9icykgKi8KKwlFTFNfR0FJRCA9CTB4MzAsCS8qIGdldCBhbGlhc19JRCAqLworCUVMU19GQUNUID0JMHgzMSwJLyogZmFicmljIGFjdGl2YXRlIGFsaWFzX2lkICovCisJRUxTX0ZEQUNEVCA9CTB4MzIsCS8qIGZhYnJpYyBkZWFjdGl2YXRlIGFsaWFzX2lkICovCisJRUxTX05BQ1QgPQkweDMzLAkvKiBOLXBvcnQgYWN0aXZhdGUgYWxpYXNfaWQgKi8KKwlFTFNfTkRBQ1QgPQkweDM0LAkvKiBOLXBvcnQgZGVhY3RpdmF0ZSBhbGlhc19pZCAqLworCUVMU19RT1NSID0JMHg0MCwJLyogcXVhbGl0eSBvZiBzZXJ2aWNlIHJlcXVlc3QgKi8KKwlFTFNfUlZDUyA9CTB4NDEsCS8qIHJlYWQgdmlydHVhbCBjaXJjdWl0IHN0YXR1cyAqLworCUVMU19QRElTQyA9CTB4NTAsCS8qIGRpc2NvdmVyIE5fcG9ydCBzZXJ2aWNlIHBhcmFtcyAqLworCUVMU19GRElTQyA9CTB4NTEsCS8qIGRpc2NvdmVyIEZfcG9ydCBzZXJ2aWNlIHBhcmFtcyAqLworCUVMU19BRElTQyA9CTB4NTIsCS8qIGRpc2NvdmVyIGFkZHJlc3MgKi8KKwlFTFNfUk5DID0JMHg1MywJLyogcmVwb3J0IG5vZGUgY2FwIChvYnMpICovCisJRUxTX0ZBUlBfUkVRID0JMHg1NCwJLyogRkMgQVJQIHJlcXVlc3QgKi8KKwlFTFNfRkFSUF9SRVBMID0JMHg1NSwJLyogRkMgQVJQIHJlcGx5ICovCisJRUxTX1JQUyA9CTB4NTYsCS8qIHJlYWQgcG9ydCBzdGF0dXMgYmxvY2sgKi8KKwlFTFNfUlBMID0JMHg1NywJLyogcmVhZCBwb3J0IGxpc3QgKi8KKwlFTFNfUlBCQyA9CTB4NTgsCS8qIHJlYWQgcG9ydCBidWZmZXIgY29uZGl0aW9uICovCisJRUxTX0ZBTiA9CTB4NjAsCS8qIGZhYnJpYyBhZGRyZXNzIG5vdGlmaWNhdGlvbiAqLworCUVMU19SU0NOID0JMHg2MSwJLyogcmVnaXN0ZXJlZCBzdGF0ZSBjaGFuZ2Ugbm90aWZpY2F0aW9uICovCisJRUxTX1NDUiA9CTB4NjIsCS8qIHN0YXRlIGNoYW5nZSByZWdpc3RyYXRpb24gKi8KKwlFTFNfUk5GVCA9CTB4NjMsCS8qIHJlcG9ydCBub2RlIEZDLTQgdHlwZXMgKi8KKwlFTFNfQ1NSID0JMHg2OCwJLyogY2xvY2sgc3luY2guIHJlcXVlc3QgKi8KKwlFTFNfQ1NVID0JMHg2OSwJLyogY2xvY2sgc3luY2guIHVwZGF0ZSAqLworCUVMU19MSU5JVCA9CTB4NzAsCS8qIGxvb3AgaW5pdGlhbGl6ZSAqLworCUVMU19MU1RTID0JMHg3MiwJLyogbG9vcCBzdGF0dXMgKi8KKwlFTFNfUk5JRCA9CTB4NzgsCS8qIHJlcXVlc3Qgbm9kZSBJRCBkYXRhICovCisJRUxTX1JMSVIgPQkweDc5LAkvKiByZWdpc3RlcmVkIGxpbmsgaW5jaWRlbnQgcmVwb3J0ICovCisJRUxTX0xJUlIgPQkweDdhLAkvKiBsaW5rIGluY2lkZW50IHJlY29yZCByZWdpc3RyYXRpb24gKi8KKwlFTFNfU1JMID0JMHg3YiwJLyogc2NhbiByZW1vdGUgbG9vcCAqLworCUVMU19TQlJQID0JMHg3YywJLyogc2V0IGJpdC1lcnJvciByZXBvcnRpbmcgcGFyYW1zICovCisJRUxTX1JQU0MgPQkweDdkLAkvKiByZXBvcnQgc3BlZWQgY2FwYWJpbGl0aWVzICovCisJRUxTX1FTQSA9CTB4N2UsCS8qIHF1ZXJ5IHNlY3VyaXR5IGF0dHJpYnV0ZXMgKi8KKwlFTFNfRVZGUCA9CTB4N2YsCS8qIGV4Y2hhbmdlIHZpcnQuIGZhYnJpY3MgcGFyYW1zICovCisJRUxTX0xLQSA9CTB4ODAsCS8qIGxpbmsga2VlcC1hbGl2ZSAqLworCUVMU19BVVRIX0VMUyA9CTB4OTAsCS8qIGF1dGhlbnRpY2F0aW9uIEVMUyAqLworfTsKKworLyoKKyAqIEluaXRpYWxpemVyIHVzZWZ1bCBmb3IgZGVjb2RpbmcgdGFibGUuCisgKiBQbGVhc2Uga2VlcCB0aGlzIGluIHN5bmMgd2l0aCB0aGUgYWJvdmUgZGVmaW5pdGlvbnMuCisgKi8KKyNkZWZpbmUJRkNfRUxTX0NNRFNfSU5JVCB7CQkJXAorCVtFTFNfTFNfUkpUXSA9CSJMU19SSlQiLAkJXAorCVtFTFNfTFNfQUNDXSA9CSJMU19BQ0MiLAkJXAorCVtFTFNfUExPR0ldID0JIlBMT0dJIiwJCVwKKwlbRUxTX0ZMT0dJXSA9CSJGTE9HSSIsCQlcCisJW0VMU19MT0dPXSA9CSJMT0dPIiwJCQlcCisJW0VMU19BQlRYXSA9CSJBQlRYIiwJCQlcCisJW0VMU19SQ1NdID0JIlJDUyIsCQkJXAorCVtFTFNfUkVTXSA9CSJSRVMiLAkJCVwKKwlbRUxTX1JTU10gPQkiUlNTIiwJCQlcCisJW0VMU19SU0ldID0JIlJTSSIsCQkJXAorCVtFTFNfRVNUU10gPQkiRVNUUyIsCQkJXAorCVtFTFNfRVNUQ10gPQkiRVNUQyIsCQkJXAorCVtFTFNfQURWQ10gPQkiQURWQyIsCQkJXAorCVtFTFNfUlRWXSA9CSJSVFYiLAkJCVwKKwlbRUxTX1JMU10gPQkiUkxTIiwJCQlcCisJW0VMU19FQ0hPXSA9CSJFQ0hPIiwJCQlcCisJW0VMU19URVNUXSA9CSJURVNUIiwJCQlcCisJW0VMU19SUlFdID0JIlJSUSIsCQkJXAorCVtFTFNfUkVDXSA9CSJSRUMiLAkJCVwKKwlbRUxTX1NSUl0gPQkiU1JSIiwJCQlcCisJW0VMU19QUkxJXSA9CSJQUkxJIiwJCQlcCisJW0VMU19QUkxPXSA9CSJQUkxPIiwJCQlcCisJW0VMU19TQ05dID0JIlNDTiIsCQkJXAorCVtFTFNfVFBMU10gPQkiVFBMUyIsCQkJXAorCVtFTFNfVFBSTE9dID0JIlRQUkxPIiwJCVwKKwlbRUxTX0xDTE1dID0JIkxDTE0iLAkJCVwKKwlbRUxTX0dBSURdID0JIkdBSUQiLAkJCVwKKwlbRUxTX0ZBQ1RdID0JIkZBQ1QiLAkJCVwKKwlbRUxTX0ZEQUNEVF0gPQkiRkRBQ0RUIiwJCVwKKwlbRUxTX05BQ1RdID0JIk5BQ1QiLAkJCVwKKwlbRUxTX05EQUNUXSA9CSJOREFDVCIsCQlcCisJW0VMU19RT1NSXSA9CSJRT1NSIiwJCQlcCisJW0VMU19SVkNTXSA9CSJSVkNTIiwJCQlcCisJW0VMU19QRElTQ10gPQkiUERJU0MiLAkJXAorCVtFTFNfRkRJU0NdID0JIkZESVNDIiwJCVwKKwlbRUxTX0FESVNDXSA9CSJBRElTQyIsCQlcCisJW0VMU19STkNdID0JIlJOQyIsCQkJXAorCVtFTFNfRkFSUF9SRVFdID0gIkZBUlBfUkVRIiwJCVwKKwlbRUxTX0ZBUlBfUkVQTF0gPSAgIkZBUlBfUkVQTCIsCQlcCisJW0VMU19SUFNdID0JIlJQUyIsCQkJXAorCVtFTFNfUlBMXSA9CSJSUEwiLAkJCVwKKwlbRUxTX1JQQkNdID0JIlJQQkMiLAkJCVwKKwlbRUxTX0ZBTl0gPQkiRkFOIiwJCQlcCisJW0VMU19SU0NOXSA9CSJSU0NOIiwJCQlcCisJW0VMU19TQ1JdID0JIlNDUiIsCQkJXAorCVtFTFNfUk5GVF0gPQkiUk5GVCIsCQkJXAorCVtFTFNfQ1NSXSA9CSJDU1IiLAkJCVwKKwlbRUxTX0NTVV0gPQkiQ1NVIiwJCQlcCisJW0VMU19MSU5JVF0gPQkiTElOSVQiLAkJXAorCVtFTFNfTFNUU10gPQkiTFNUUyIsCQkJXAorCVtFTFNfUk5JRF0gPQkiUk5JRCIsCQkJXAorCVtFTFNfUkxJUl0gPQkiUkxJUiIsCQkJXAorCVtFTFNfTElSUl0gPQkiTElSUiIsCQkJXAorCVtFTFNfU1JMXSA9CSJTUkwiLAkJCVwKKwlbRUxTX1NCUlBdID0JIlNCUlAiLAkJCVwKKwlbRUxTX1JQU0NdID0JIlJQU0MiLAkJCVwKKwlbRUxTX1FTQV0gPQkiUVNBIiwJCQlcCisJW0VMU19FVkZQXSA9CSJFVkZQIiwJCQlcCisJW0VMU19MS0FdID0JIkxLQSIsCQkJXAorCVtFTFNfQVVUSF9FTFNdID0gIkFVVEhfRUxTIiwJCVwKK30KKworLyoKKyAqIExTX0FDQyBwYXlsb2FkLgorICovCitzdHJ1Y3QgZmNfZWxzX2xzX2FjYyB7CisJX191OCAgICAgICAgICBsYV9jbWQ7CQkvKiBjb21tYW5kIGNvZGUgRUxTX0xTX0FDQyAqLworCV9fdTggICAgICAgICAgbGFfcmVzdlszXTsJLyogcmVzZXJ2ZWQgKi8KK307CisKKy8qCisgKiBFTFMgcmVqZWN0IHBheWxvYWQuCisgKi8KK3N0cnVjdCBmY19lbHNfbHNfcmp0IHsKKwlfX3U4CWVyX2NtZDsJCS8qIGNvbW1hbmQgY29kZSBFTFNfTFNfUkpUICovCisJX191OAllcl9yZXN2WzRdOwkvKiByZXNlcnZlZCBtdXN0IGJlIHplcm8gKi8KKwlfX3U4CWVyX3JlYXNvbjsJLyogcmVhc29uIChlbnVtIGZjX2Vsc19yanRfcmVhc29uIGJlbG93KSAqLworCV9fdTgJZXJfZXhwbGFuOwkvKiBleHBsYW5hdGlvbiAoZW51bSBmY19lbHNfcmp0X2V4cGxhbiBiZWxvdykgKi8KKwlfX3U4CWVyX3ZlbmRvcjsJLyogdmVuZG9yIHNwZWNpZmljIGNvZGUgKi8KK307CisKKy8qCisgKiBFTFMgcmVqZWN0IHJlYXNvbiBjb2RlcyAoZXJfcmVhc29uKS4KKyAqLworZW51bSBmY19lbHNfcmp0X3JlYXNvbiB7CisJRUxTX1JKVF9OT05FID0JCTAsCS8qIG5vIHJlamVjdCAtIG5vdCB0byBiZSBzZW50ICovCisJRUxTX1JKVF9JTlZBTCA9CQkweDAxLAkvKiBpbnZhbGlkIEVMUyBjb21tYW5kIGNvZGUgKi8KKwlFTFNfUkpUX0xPR0lDID0JCTB4MDMsCS8qIGxvZ2ljYWwgZXJyb3IgKi8KKwlFTFNfUkpUX0JVU1kgPQkJMHgwNSwJLyogbG9naWNhbCBidXN5ICovCisJRUxTX1JKVF9QUk9UID0JCTB4MDcsCS8qIHByb3RvY29sIGVycm9yICovCisJRUxTX1JKVF9VTkFCID0JCTB4MDksCS8qIHVuYWJsZSB0byBwZXJmb3JtIGNvbW1hbmQgcmVxdWVzdCAqLworCUVMU19SSlRfVU5TVVAgPQkJMHgwYiwJLyogY29tbWFuZCBub3Qgc3VwcG9ydGVkICovCisJRUxTX1JKVF9JTlBST0cgPQkweDBlLAkvKiBjb21tYW5kIGFscmVhZHkgaW4gcHJvZ3Jlc3MgKi8KKwlFTFNfUkpUX0ZJUCA9CQkweDIwLAkvKiBGSVAgZXJyb3IgKi8KKwlFTFNfUkpUX1ZFTkRPUiA9CTB4ZmYsCS8qIHZlbmRvciBzcGVjaWZpYyBlcnJvciAqLworfTsKKworCisvKgorICogcmVhc29uIGNvZGUgZXhwbGFuYXRpb24gKGVyX2V4cGxhbikuCisgKi8KK2VudW0gZmNfZWxzX3JqdF9leHBsYW4geworCUVMU19FWFBMX05PTkUgPQkJMHgwMCwJLyogTm8gYWRkaXRpb25hbCBleHBsYW5hdGlvbiAqLworCUVMU19FWFBMX1NQUF9PUFRfRVJSID0JMHgwMSwJLyogc2VydmljZSBwYXJhbWV0ZXIgZXJyb3IgLSBvcHRpb25zICovCisJRUxTX0VYUExfU1BQX0lDVExfRVJSID0JMHgwMywJLyogc2VydmljZSBwYXJtIGVycm9yIC0gaW5pdGlhdG9yIGN0bCAqLworCUVMU19FWFBMX0FIID0JCTB4MTEsCS8qIGludmFsaWQgYXNzb2NpYXRpb24gaGVhZGVyICovCisJRUxTX0VYUExfQUhfUkVRID0JMHgxMywJLyogYXNzb2NpYXRpb25faGVhZGVyIHJlcXVpcmVkICovCisJRUxTX0VYUExfU0lEID0JCTB4MTUsCS8qIGludmFsaWQgb3JpZ2luYXRvciBTX0lEICovCisJRUxTX0VYUExfT1hJRF9SWElEID0JMHgxNywJLyogaW52YWxpZCBPWF9JRC1SWF9JRCBjb21iaW5hdGlvbiAqLworCUVMU19FWFBMX0lOUFJPRyA9CTB4MTksCS8qIFJlcXVlc3QgYWxyZWFkeSBpbiBwcm9ncmVzcyAqLworCUVMU19FWFBMX1BMT0dJX1JFUUQgPQkweDFlLAkvKiBOX1BvcnQgbG9naW4gcmVxdWlyZWQgKi8KKwlFTFNfRVhQTF9JTlNVRl9SRVMgPQkweDI5LAkvKiBpbnN1ZmZpY2llbnQgcmVzb3VyY2VzICovCisJRUxTX0VYUExfVU5BQl9EQVRBID0JMHgyYSwJLyogdW5hYmxlIHRvIHN1cHBseSByZXF1ZXN0ZWQgZGF0YSAqLworCUVMU19FWFBMX1VOU1VQUiA9CTB4MmMsCS8qIFJlcXVlc3Qgbm90IHN1cHBvcnRlZCAqLworCUVMU19FWFBMX0lOVl9MRU4gPQkweDJkLAkvKiBJbnZhbGlkIHBheWxvYWQgbGVuZ3RoICovCisJRUxTX0VYUExfTk9UX05FSUdIQk9SID0gMHg2MiwJLyogVk4yVk5fUG9ydCBub3QgaW4gbmVpZ2hib3Igc2V0ICovCisJLyogVEJEIC0gYWJvdmUgZGVmaW5pdGlvbnMgaW5jb21wbGV0ZSAqLworfTsKKworLyoKKyAqIENvbW1vbiBzZXJ2aWNlIHBhcmFtZXRlcnMgKE4gcG9ydHMpLgorICovCitzdHJ1Y3QgZmNfZWxzX2NzcCB7CisJX191OAkJc3BfaGlfdmVyOwkvKiBoaWdoZXN0IHZlcnNpb24gc3VwcG9ydGVkIChvYnMuKSAqLworCV9fdTgJCXNwX2xvX3ZlcjsJLyogaGlnaGVzdCB2ZXJzaW9uIHN1cHBvcnRlZCAob2JzLikgKi8KKwlfX2JlMTYJCXNwX2JiX2NyZWQ7CS8qIGJ1ZmZlci10by1idWZmZXIgY3JlZGl0cyAqLworCV9fYmUxNgkJc3BfZmVhdHVyZXM7CS8qIGNvbW1vbiBmZWF0dXJlIGZsYWdzICovCisJX19iZTE2CQlzcF9iYl9kYXRhOwkvKiBiLWIgc3RhdGUgbnVtYmVyIGFuZCBkYXRhIGZpZWxkIHN6ICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX19iZTE2CV9zcF90b3Rfc2VxOyAvKiB0b3RhbCBjb25jdXJyZW50IHNlcXVlbmNlcyAqLworCQkJX19iZTE2CV9zcF9yZWxfb2ZmOyAvKiByZWwuIG9mZnNldCBieSBpbmZvIGNhdCAqLworCQl9IHNwX3Bsb2dpOworCQlzdHJ1Y3QgeworCQkJX19iZTMyCV9zcF9yX2FfdG92OyAvKiByZXNvdXJjZSBhbGxvYy4gdGltZW91dCBtc2VjICovCisJCX0gc3BfZmxvZ2lfYWNjOworCX0gc3BfdTsKKwlfX2JlMzIJCXNwX2VfZF90b3Y7CS8qIGVycm9yIGRldGVjdCB0aW1lb3V0IHZhbHVlICovCit9OworI2RlZmluZQlzcF90b3Rfc2VxCXNwX3Uuc3BfcGxvZ2kuX3NwX3RvdF9zZXEKKyNkZWZpbmUJc3BfcmVsX29mZglzcF91LnNwX3Bsb2dpLl9zcF9yZWxfb2ZmCisjZGVmaW5lCXNwX3JfYV90b3YJc3BfdS5zcF9mbG9naV9hY2MuX3NwX3JfYV90b3YKKworI2RlZmluZQlGQ19TUF9CQl9EQVRBX01BU0sgMHhmZmYgLyogbWFzayBmb3IgZGF0YSBmaWVsZCBzaXplIGluIHNwX2JiX2RhdGEgKi8KKworLyoKKyAqIE1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGZvciBtYXggZGF0YSBmaWVsZCBzaXplIGluIHNlcnZpY2UgcGFyYW1ldGVycy4KKyAqLworI2RlZmluZQlGQ19TUF9NSU5fTUFYX1BBWUxPQUQJRkNfTUlOX01BWF9QQVlMT0FECisjZGVmaW5lCUZDX1NQX01BWF9NQVhfUEFZTE9BRAlGQ19NQVhfUEFZTE9BRAorCisvKgorICogc3BfZmVhdHVyZXMKKyAqLworI2RlZmluZQlGQ19TUF9GVF9OUElWCTB4ODAwMAkvKiBtdWx0aXBsZSBOX1BvcnRfSUQgc3VwcG9ydCAoRkxPR0kpICovCisjZGVmaW5lCUZDX1NQX0ZUX0NJUk8JMHg4MDAwCS8qIGNvbnRpbnVvdXNseSBpbmNyZWFzaW5nIHJlbCBvZmYgKFBMT0dJKSAqLworI2RlZmluZQlGQ19TUF9GVF9DTEFECTB4ODAwMAkvKiBjbGVhbiBhZGRyZXNzIChpbiBGTE9HSSBMU19BQ0MpICovCisjZGVmaW5lCUZDX1NQX0ZUX1JBTkQJMHg0MDAwCS8qIHJhbmRvbSByZWxhdGl2ZSBvZmZzZXQgKi8KKyNkZWZpbmUJRkNfU1BfRlRfVkFMCTB4MjAwMAkvKiB2YWxpZCB2ZW5kb3IgdmVyc2lvbiBsZXZlbCAqLworI2RlZmluZQlGQ19TUF9GVF9OUElWX0FDQwkweDIwMDAJLyogTlBJViBhc3NpZ25tZW50IChGTE9HSSBMU19BQ0MpICovCisjZGVmaW5lCUZDX1NQX0ZUX0ZQT1JUCTB4MTAwMAkvKiBGIHBvcnQgKDEpIHZzLiBOIHBvcnQgKDApICovCisjZGVmaW5lCUZDX1NQX0ZUX0FCQgkweDA4MDAJLyogYWx0ZXJuYXRlIEJCX2NyZWRpdCBtYW5hZ2VtZW50ICovCisjZGVmaW5lCUZDX1NQX0ZUX0VEVFIJMHgwNDAwCS8qIEVfRF9UT1YgUmVzb2x1dGlvbiBpcyBuYW5vc2Vjb25kcyAqLworI2RlZmluZQlGQ19TUF9GVF9NQ0FTVAkweDAyMDAJLyogbXVsdGljYXN0ICovCisjZGVmaW5lCUZDX1NQX0ZUX0JDQVNUCTB4MDEwMAkvKiBicm9hZGNhc3QgKi8KKyNkZWZpbmUJRkNfU1BfRlRfSFVOVAkweDAwODAJLyogaHVudCBncm91cCAqLworI2RlZmluZQlGQ19TUF9GVF9TSU1QCTB4MDA0MAkvKiBkZWRpY2F0ZWQgc2ltcGxleCAqLworI2RlZmluZQlGQ19TUF9GVF9TRUMJMHgwMDIwCS8qIHJlc2VydmVkIGZvciBzZWN1cml0eSAqLworI2RlZmluZQlGQ19TUF9GVF9DU1lOCTB4MDAxMAkvKiBjbG9jayBzeW5jaC4gc3VwcG9ydGVkICovCisjZGVmaW5lCUZDX1NQX0ZUX1JUVE9WCTB4MDAwOAkvKiBSX1RfVE9WIHZhbHVlIDEwMCB1UywgZWxzZSAxMDAgbVMgKi8KKyNkZWZpbmUJRkNfU1BfRlRfSEFMRgkweDAwMDQJLyogZHluYW1pYyBoYWxmIGR1cGxleCAqLworI2RlZmluZQlGQ19TUF9GVF9TRVFDCTB4MDAwMgkvKiBTRVFfQ05UICovCisjZGVmaW5lCUZDX1NQX0ZUX1BBWUwJMHgwMDAxCS8qIEZMT0dJIHBheWxvYWQgbGVuZ3RoIDI1NiwgZWxzZSAxMTYgKi8KKworLyoKKyAqIENsYXNzLXNwZWNpZmljIHNlcnZpY2UgcGFyYW1ldGVycy4KKyAqLworc3RydWN0IGZjX2Vsc19jc3NwIHsKKwlfX2JlMTYJCWNwX2NsYXNzOwkvKiBjbGFzcyBmbGFncyAqLworCV9fYmUxNgkJY3BfaW5pdDsJLyogaW5pdGlhdG9yIGZsYWdzICovCisJX19iZTE2CQljcF9yZWNpcDsJLyogcmVjaXBpZW50IGZsYWdzICovCisJX19iZTE2CQljcF9yZGZzOwkvKiByZWNlaXZlIGRhdGEgZmllbGQgc2l6ZSAqLworCV9fYmUxNgkJY3BfY29uX3NlcTsJLyogY29uY3VycmVudCBzZXF1ZW5jZXMgKi8KKwlfX2JlMTYJCWNwX2VlX2NyZWQ7CS8qIE4tcG9ydCBlbmQtdG8tZW5kIGNyZWRpdCAqLworCV9fdTgJCWNwX3Jlc3YxOwkvKiByZXNlcnZlZCAqLworCV9fdTgJCWNwX29wZW5fc2VxOwkvKiBvcGVuIHNlcXVlbmNlcyBwZXIgZXhjaGFuZ2UgKi8KKwlfX3U4CQlfY3BfcmVzdjJbMl07CS8qIHJlc2VydmVkICovCit9OworCisvKgorICogY3BfY2xhc3MgZmxhZ3MuCisgKi8KKyNkZWZpbmUJRkNfQ1BDX1ZBTElECTB4ODAwMAkJLyogY2xhc3MgdmFsaWQgKi8KKyNkZWZpbmUJRkNfQ1BDX0lNSVgJMHg0MDAwCQkvKiBpbnRlcm1peCBtb2RlICovCisjZGVmaW5lCUZDX0NQQ19TRVEJMHgwODAwCQkvKiBzZXF1ZW50aWFsIGRlbGl2ZXJ5ICovCisjZGVmaW5lCUZDX0NQQ19DQU1QCTB4MDIwMAkJLyogY2FtcC1vbiAqLworI2RlZmluZQlGQ19DUENfUFJJCTB4MDA4MAkJLyogcHJpb3JpdHkgKi8KKworLyoKKyAqIGNwX2luaXQgZmxhZ3MuCisgKiAoVEJEOiBub3QgYWxsIGZsYWdzIGRlZmluZWQgaGVyZSkuCisgKi8KKyNkZWZpbmUJRkNfQ1BJX0NTWU4JMHgwMDEwCQkvKiBjbG9jayBzeW5jaC4gY2FwYWJsZSAqLworCisvKgorICogY3BfcmVjaXAgZmxhZ3MuCisgKi8KKyNkZWZpbmUJRkNfQ1BSX0NTWU4JMHgwMDA4CQkvKiBjbG9jayBzeW5jaC4gY2FwYWJsZSAqLworCisvKgorICogTkZDX0VMU19GTE9HSTogRmFicmljIGxvZ2luIHJlcXVlc3QuCisgKiBORkNfRUxTX1BMT0dJOiBQb3J0IGxvZ2luIHJlcXVlc3QgKHNhbWUgZm9ybWF0KS4KKyAqLworc3RydWN0IGZjX2Vsc19mbG9naSB7CisJX191OAkJZmxfY21kOwkJLyogY29tbWFuZCAqLworCV9fdTgJCV9mbF9yZXN2ZFszXTsJLyogbXVzdCBiZSB6ZXJvICovCisJc3RydWN0IGZjX2Vsc19jc3AgZmxfY3NwOwkvKiBjb21tb24gc2VydmljZSBwYXJhbWV0ZXJzICovCisJX19iZTY0CQlmbF93d3BuOwkvKiBwb3J0IG5hbWUgKi8KKwlfX2JlNjQJCWZsX3d3bm47CS8qIG5vZGUgbmFtZSAqLworCXN0cnVjdCBmY19lbHNfY3NzcCBmbF9jc3NwWzRdOwkvKiBjbGFzcyAxLTQgc2VydmljZSBwYXJhbWV0ZXJzICovCisJX191OAkJZmxfdmVuZFsxNl07CS8qIHZlbmRvciB2ZXJzaW9uIGxldmVsICovCit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworLyoKKyAqIFByb2Nlc3MgbG9naW4gc2VydmljZSBwYXJhbWV0ZXIgcGFnZS4KKyAqLworc3RydWN0IGZjX2Vsc19zcHAgeworCV9fdTgJCXNwcF90eXBlOwkvKiB0eXBlIGNvZGUgb3IgY29tbW9uIHNlcnZpY2UgcGFyYW1zICovCisJX191OAkJc3BwX3R5cGVfZXh0OwkvKiB0eXBlIGNvZGUgZXh0ZW5zaW9uICovCisJX191OAkJc3BwX2ZsYWdzOworCV9fdTgJCV9zcHBfcmVzdmQ7CisJX19iZTMyCQlzcHBfb3JpZ19wYTsJLyogb3JpZ2luYXRvciBwcm9jZXNzIGFzc29jaWF0b3IgKi8KKwlfX2JlMzIJCXNwcF9yZXNwX3BhOwkvKiByZXNwb25kZXIgcHJvY2VzcyBhc3NvY2lhdG9yICovCisJX19iZTMyCQlzcHBfcGFyYW1zOwkvKiBzZXJ2aWNlIHBhcmFtZXRlcnMgKi8KK307CisKKy8qCisgKiBzcHBfZmxhZ3MuCisgKi8KKyNkZWZpbmUJRkNfU1BQX09QQV9WQUwJICAgIDB4ODAJLyogb3JpZ2luYXRvciBwcm9jLiBhc3NvYy4gdmFsaWQgKi8KKyNkZWZpbmUJRkNfU1BQX1JQQV9WQUwJICAgIDB4NDAJLyogcmVzcG9uZGVyIHByb2MuIGFzc29jLiB2YWxpZCAqLworI2RlZmluZQlGQ19TUFBfRVNUX0lNR19QQUlSIDB4MjAJLyogZXN0YWJsaXNoIGltYWdlIHBhaXIgKi8KKyNkZWZpbmUJRkNfU1BQX1JFU1BfTUFTSyAgICAweDBmCS8qIG1hc2sgZm9yIHJlc3BvbnNlIGNvZGUgKGJlbG93KSAqLworCisvKgorICogU1BQIHJlc3BvbnNlIGNvZGUgaW4gc3BwX2ZsYWdzIC0gbG93ZXIgNCBiaXRzLgorICovCitlbnVtIGZjX2Vsc19zcHBfcmVzcCB7CisJRkNfU1BQX1JFU1BfQUNLCT0JMSwJLyogcmVxdWVzdCBleGVjdXRlZCAqLworCUZDX1NQUF9SRVNQX1JFUyA9CTIsCS8qIHVuYWJsZSBkdWUgdG8gbGFjayBvZiByZXNvdXJjZXMgKi8KKwlGQ19TUFBfUkVTUF9JTklUID0JMywJLyogaW5pdGlhbGl6YXRpb24gbm90IGNvbXBsZXRlICovCisJRkNfU1BQX1JFU1BfTk9fUEEgPSAJNCwJLyogdW5rbm93biBwcm9jZXNzIGFzc29jaWF0b3IgKi8KKwlGQ19TUFBfUkVTUF9DT05GID0gCTUsCS8qIGNvbmZpZ3VyYXRpb24gcHJlY2x1ZGVzIGltYWdlIHBhaXIgKi8KKwlGQ19TUFBfUkVTUF9DT05EID0gCTYsCS8qIHJlcXVlc3QgY29tcGxldGVkIGNvbmRpdGlvbmFsbHkgKi8KKwlGQ19TUFBfUkVTUF9NVUxUID0gCTcsCS8qIHVuYWJsZSB0byBoYW5kbGUgbXVsdGlwbGUgU1BQcyAqLworCUZDX1NQUF9SRVNQX0lOVkwgPSAJOCwJLyogU1BQIGlzIGludmFsaWQgKi8KK307CisKKy8qCisgKiBFTFNfUlJRIC0gUmVpbnN0YXRlIFJlY292ZXJ5IFF1YWxpZmllcgorICovCitzdHJ1Y3QgZmNfZWxzX3JycSB7CisJX191OAkJcnJxX2NtZDsJLyogY29tbWFuZCAoMHgxMikgKi8KKwlfX3U4CQlycnFfemVyb1szXTsJLyogc3BlY2lmaWVkIGFzIHplcm8gLSBwYXJ0IG9mIGNtZCAqLworCV9fdTgJCXJycV9yZXN2ZDsJLyogcmVzZXJ2ZWQgKi8KKwlfX3U4CQlycnFfc19pZFszXTsJLyogb3JpZ2luYXRvciBGSUQgKi8KKwlfX2JlMTYJCXJycV9veF9pZDsJLyogb3JpZ2luYXRvciBleGNoYW5nZSBJRCAqLworCV9fYmUxNgkJcnJxX3J4X2lkOwkvKiByZXNwb25kZXJzIGV4Y2hhbmdlIElEICovCit9OworCisvKgorICogRUxTX1JFQyAtIFJlYWQgZXhjaGFuZ2UgY29uY2lzZS4KKyAqLworc3RydWN0IGZjX2Vsc19yZWMgeworCV9fdTgJCXJlY19jbWQ7CS8qIGNvbW1hbmQgKDB4MTMpICovCisJX191OAkJcmVjX3plcm9bM107CS8qIHNwZWNpZmllZCBhcyB6ZXJvIC0gcGFydCBvZiBjbWQgKi8KKwlfX3U4CQlyZWNfcmVzdmQ7CS8qIHJlc2VydmVkICovCisJX191OAkJcmVjX3NfaWRbM107CS8qIG9yaWdpbmF0b3IgRklEICovCisJX19iZTE2CQlyZWNfb3hfaWQ7CS8qIG9yaWdpbmF0b3IgZXhjaGFuZ2UgSUQgKi8KKwlfX2JlMTYJCXJlY19yeF9pZDsJLyogcmVzcG9uZGVycyBleGNoYW5nZSBJRCAqLworfTsKKworLyoKKyAqIEVMU19SRUMgTFNfQUNDIHBheWxvYWQuCisgKi8KK3N0cnVjdCBmY19lbHNfcmVjX2FjYyB7CisJX191OAkJcmVjYV9jbWQ7CS8qIGFjY2VwdCAoMHgwMikgKi8KKwlfX3U4CQlyZWNhX3plcm9bM107CS8qIHNwZWNpZmllZCBhcyB6ZXJvIC0gcGFydCBvZiBjbWQgKi8KKwlfX2JlMTYJCXJlY2Ffb3hfaWQ7CS8qIG9yaWdpbmF0b3IgZXhjaGFuZ2UgSUQgKi8KKwlfX2JlMTYJCXJlY2FfcnhfaWQ7CS8qIHJlc3BvbmRlcnMgZXhjaGFuZ2UgSUQgKi8KKwlfX3U4CQlyZWNhX3Jlc3ZkMTsJLyogcmVzZXJ2ZWQgKi8KKwlfX3U4CQlyZWNhX29maWRbM107CS8qIG9yaWdpbmF0b3IgRklEICovCisJX191OAkJcmVjYV9yZXN2ZDI7CS8qIHJlc2VydmVkICovCisJX191OAkJcmVjYV9yZmlkWzNdOwkvKiByZXNwb25kZXIgRklEICovCisJX19iZTMyCQlyZWNhX2ZjNHZhbHVlOwkvKiBGQzQgdmFsdWUgKi8KKwlfX2JlMzIJCXJlY2FfZV9zdGF0OwkvKiBFU0IgKGV4Y2hhbmdlIHN0YXR1cyBibG9jaykgc3RhdHVzICovCit9OworCisvKgorICogRUxTX1BSTEkgLSBQcm9jZXNzIGxvZ2luIHJlcXVlc3QgYW5kIHJlc3BvbnNlLgorICovCitzdHJ1Y3QgZmNfZWxzX3BybGkgeworCV9fdTgJCXBybGlfY21kOwkvKiBjb21tYW5kICovCisJX191OAkJcHJsaV9zcHBfbGVuOwkvKiBsZW5ndGggb2YgZWFjaCBzZXJ2LiBwYXJtLiBwYWdlICovCisJX19iZTE2CQlwcmxpX2xlbjsJLyogbGVuZ3RoIG9mIGVudGlyZSBwYXlsb2FkICovCisJLyogc2VydmljZSBwYXJhbWV0ZXIgcGFnZXMgZm9sbG93ICovCit9OworCisvKgorICogRUxTX1BSTE8gLSBQcm9jZXNzIGxvZ291dCByZXF1ZXN0IGFuZCByZXNwb25zZS4KKyAqLworc3RydWN0IGZjX2Vsc19wcmxvIHsKKwlfX3U4ICAgICAgICAgICAgcHJsb19jbWQ7ICAgICAgIC8qIGNvbW1hbmQgKi8KKwlfX3U4ICAgICAgICAgICAgcHJsb19vYnM7ICAgICAgIC8qIG9ic29sZXRlLCBidXQgc2hhbGwgYmUgc2V0IHRvIDEwaCAqLworCV9fYmUxNiAgICAgICAgICBwcmxvX2xlbjsgICAgICAgLyogcGF5bG9hZCBsZW5ndGggKi8KK307CisKKy8qCisgKiBFTFNfQURJU0MgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfZWxzX2FkaXNjIHsKKwlfX3U4CQlhZGlzY19jbWQ7CisJX191OAkJYWRpc2NfcmVzdlszXTsKKwlfX3U4ICAgICAgICAgICAgYWRpc2NfcmVzdjE7CisJX191OCAgICAgICAgICAgIGFkaXNjX2hhcmRfYWRkclszXTsKKwlfX2JlNjQgICAgICAgICAgYWRpc2Nfd3dwbjsKKwlfX2JlNjQgICAgICAgICAgYWRpc2Nfd3dubjsKKwlfX3U4ICAgICAgICAgICAgYWRpc2NfcmVzdjI7CisJX191OCAgICAgICAgICAgIGFkaXNjX3BvcnRfaWRbM107Cit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworLyoKKyAqIEVMU19MT0dPIC0gcHJvY2VzcyBvciBmYWJyaWMgbG9nb3V0LgorICovCitzdHJ1Y3QgZmNfZWxzX2xvZ28geworCV9fdTgJCWZsX2NtZDsJCS8qIGNvbW1hbmQgY29kZSAqLworCV9fdTgJCWZsX3plcm9bM107CS8qIHNwZWNpZmllZCBhcyB6ZXJvIC0gcGFydCBvZiBjbWQgKi8KKwlfX3U4CQlmbF9yZXN2ZDsJLyogcmVzZXJ2ZWQgKi8KKwlfX3U4CQlmbF9uX3BvcnRfaWRbM107LyogTiBwb3J0IElEICovCisJX19iZTY0CQlmbF9uX3BvcnRfd3duOwkvKiBwb3J0IG5hbWUgKi8KK307CisKKy8qCisgKiBFTFNfUlRWIC0gcmVhZCB0aW1lb3V0IHZhbHVlLgorICovCitzdHJ1Y3QgZmNfZWxzX3J0diB7CisJX191OAkJcnR2X2NtZDsJLyogY29tbWFuZCBjb2RlIDB4MGUgKi8KKwlfX3U4CQlydHZfemVyb1szXTsJLyogc3BlY2lmaWVkIGFzIHplcm8gLSBwYXJ0IG9mIGNtZCAqLworfTsKKworLyoKKyAqIExTX0FDQyBmb3IgRUxTX1JUViAtIHJlYWQgdGltZW91dCB2YWx1ZS4KKyAqLworc3RydWN0IGZjX2Vsc19ydHZfYWNjIHsKKwlfX3U4CQlydHZfY21kOwkvKiBjb21tYW5kIGNvZGUgMHgwMiAqLworCV9fdTgJCXJ0dl96ZXJvWzNdOwkvKiBzcGVjaWZpZWQgYXMgemVybyAtIHBhcnQgb2YgY21kICovCisJX19iZTMyCQlydHZfcl9hX3RvdjsJLyogcmVzb3VyY2UgYWxsb2NhdGlvbiB0aW1lb3V0IHZhbHVlICovCisJX19iZTMyCQlydHZfZV9kX3RvdjsJLyogZXJyb3IgZGV0ZWN0aW9uIHRpbWVvdXQgdmFsdWUgKi8KKwlfX2JlMzIJCXJ0dl90b3E7CS8qIHRpbWVvdXQgcXVhbGlmaWVyIChzZWUgYmVsb3cpICovCit9OworCisvKgorICogcnR2X3RvcSBiaXRzLgorICovCisjZGVmaW5lCUZDX0VMU19SVFZfRURSRVMgKDEgPDwgMjYpCS8qIEVfRF9UT1YgcmVzb2x1dGlvbiBpcyBuUyBlbHNlIG1TICovCisjZGVmaW5lCUZDX0VMU19SVFZfUlRUT1YgKDEgPDwgMTkpCS8qIFJfVF9UT1YgaXMgMTAwIHVTIGVsc2UgMTAwIG1TICovCisKKy8qCisgKiBFTFNfU0NSIC0gc3RhdGUgY2hhbmdlIHJlZ2lzdHJhdGlvbiBwYXlsb2FkLgorICovCitzdHJ1Y3QgZmNfZWxzX3NjciB7CisJX191OAkJc2NyX2NtZDsJLyogY29tbWFuZCBjb2RlICovCisJX191OAkJc2NyX3Jlc3ZbNl07CS8qIHJlc2VydmVkICovCisJX191OAkJc2NyX3JlZ19mdW5jOwkvKiByZWdpc3RyYXRpb24gZnVuY3Rpb24gKHNlZSBiZWxvdykgKi8KK307CisKK2VudW0gZmNfZWxzX3Njcl9mdW5jIHsKKwlFTFNfU0NSRl9GQUIgPQkxLAkvKiBmYWJyaWMtZGV0ZWN0ZWQgcmVnaXN0cmF0aW9uICovCisJRUxTX1NDUkZfTlBPUlQgPSAyLAkvKiBOeF9Qb3J0LWRldGVjdGVkIHJlZ2lzdHJhdGlvbiAqLworCUVMU19TQ1JGX0ZVTEwgPQkzLAkvKiBmdWxsIHJlZ2lzdHJhdGlvbiAqLworCUVMU19TQ1JGX0NMRUFSID0gMjU1LAkvKiByZW1vdmUgYW55IGN1cnJlbnQgcmVnaXN0cmF0aW9ucyAqLworfTsKKworLyoKKyAqIEVMU19SU0NOIC0gcmVnaXN0ZXJlZCBzdGF0ZSBjaGFuZ2Ugbm90aWZpY2F0aW9uIHBheWxvYWQuCisgKi8KK3N0cnVjdCBmY19lbHNfcnNjbiB7CisJX191OAkJcnNjbl9jbWQ7CS8qIFJTQ04gb3Bjb2RlICgweDYxKSAqLworCV9fdTgJCXJzY25fcGFnZV9sZW47CS8qIHBhZ2UgbGVuZ3RoICg0KSAqLworCV9fYmUxNgkJcnNjbl9wbGVuOwkvKiBwYXlsb2FkIGxlbmd0aCBpbmNsdWRpbmcgdGhpcyB3b3JkICovCisKKwkvKiBmb2xsb3dlZCBieSA0LWJ5dGUgZ2VuZXJpYyBhZmZlY3RlZCBQb3J0X0lEIHBhZ2VzICovCit9OworCitzdHJ1Y3QgZmNfZWxzX3JzY25fcGFnZSB7CisJX191OAkJcnNjbl9wYWdlX2ZsYWdzOyAvKiBldmVudCBhbmQgYWRkcmVzcyBmb3JtYXQgKi8KKwlfX3U4CQlyc2NuX2ZpZFszXTsJLyogZmFicmljIElEICovCit9OworCisjZGVmaW5lCUVMU19SU0NOX0VWX1FVQUxfQklUCTIJLyogc2hpZnQgY291bnQgZm9yIGV2ZW50IHF1YWxpZmllciAqLworI2RlZmluZQlFTFNfUlNDTl9FVl9RVUFMX01BU0sJMHhmCS8qIG1hc2sgZm9yIGV2ZW50IHF1YWxpZmllciAqLworI2RlZmluZQlFTFNfUlNDTl9BRERSX0ZNVF9CSVQJMAkvKiBzaGlmdCBjb3VudCBmb3IgYWRkcmVzcyBmb3JtYXQgKi8KKyNkZWZpbmUJRUxTX1JTQ05fQUREUl9GTVRfTUFTSwkweDMJLyogbWFzayBmb3IgYWRkcmVzcyBmb3JtYXQgKi8KKworZW51bSBmY19lbHNfcnNjbl9ldl9xdWFsIHsKKwlFTFNfRVZfUVVBTF9OT05FID0gMCwJCS8qIHVuc3BlY2lmaWVkICovCisJRUxTX0VWX1FVQUxfTlNfT0JKID0gMSwJCS8qIGNoYW5nZWQgbmFtZSBzZXJ2ZXIgb2JqZWN0ICovCisJRUxTX0VWX1FVQUxfUE9SVF9BVFRSID0gMiwJLyogY2hhbmdlZCBwb3J0IGF0dHJpYnV0ZSAqLworCUVMU19FVl9RVUFMX1NFUlZfT0JKID0gMywJLyogY2hhbmdlZCBzZXJ2aWNlIG9iamVjdCAqLworCUVMU19FVl9RVUFMX1NXX0NPTkZJRyA9IDQsCS8qIGNoYW5nZWQgc3dpdGNoIGNvbmZpZ3VyYXRpb24gKi8KKwlFTFNfRVZfUVVBTF9SRU1fT0JKID0gNSwJLyogcmVtb3ZlZCBvYmplY3QgKi8KK307CisKK2VudW0gZmNfZWxzX3JzY25fYWRkcl9mbXQgeworCUVMU19BRERSX0ZNVF9QT1JUID0gMCwJLyogcnNjbl9maWQgaXMgYSBwb3J0IGFkZHJlc3MgKi8KKwlFTFNfQUREUl9GTVRfQVJFQSA9IDEsCS8qIHJzY25fZmlkIGlzIGEgYXJlYSBhZGRyZXNzICovCisJRUxTX0FERFJfRk1UX0RPTSA9IDIsCS8qIHJzY25fZmlkIGlzIGEgZG9tYWluIGFkZHJlc3MgKi8KKwlFTFNfQUREUl9GTVRfRkFCID0gMywJLyogYW55dGhpbmcgb24gZmFicmljIG1heSBoYXZlIGNoYW5nZWQgKi8KK307CisKKy8qCisgKiBFTFNfUk5JRCAtIHJlcXVlc3QgTm9kZSBJRC4KKyAqLworc3RydWN0IGZjX2Vsc19ybmlkIHsKKwlfX3U4CQlybmlkX2NtZDsJLyogUk5JRCBvcGNvZGUgKDB4NzgpICovCisJX191OAkJcm5pZF9yZXN2WzNdOwkvKiByZXNlcnZlZCAqLworCV9fdTgJCXJuaWRfZm10OwkvKiBkYXRhIGZvcm1hdCAqLworCV9fdTgJCXJuaWRfcmVzdjJbM107CS8qIHJlc2VydmVkICovCit9OworCisvKgorICogTm9kZSBJZGVudGlmaWNhdGlvbiBEYXRhIGZvcm1hdHMgKHJuaWRfZm10KQorICovCitlbnVtIGZjX2Vsc19ybmlkX2ZtdCB7CisJRUxTX1JOSURGX05PTkUgPSAwLAkJLyogbm8gc3BlY2lmaWMgaWRlbnRpZmljYXRpb24gZGF0YSAqLworCUVMU19STklERl9HRU4gPSAweGRmLAkJLyogZ2VuZXJhbCB0b3BvbG9neSBkaXNjb3ZlcnkgZm9ybWF0ICovCit9OworCisvKgorICogRUxTX1JOSUQgcmVzcG9uc2UuCisgKi8KK3N0cnVjdCBmY19lbHNfcm5pZF9yZXNwIHsKKwlfX3U4CQlybmlkX2NtZDsJLyogcmVzcG9uc2UgY29kZSAoTFNfQUNDKSAqLworCV9fdTgJCXJuaWRfcmVzdlszXTsJLyogcmVzZXJ2ZWQgKi8KKwlfX3U4CQlybmlkX2ZtdDsJLyogZGF0YSBmb3JtYXQgKi8KKwlfX3U4CQlybmlkX2NpZF9sZW47CS8qIGNvbW1vbiBJRCBkYXRhIGxlbmd0aCAqLworCV9fdTgJCXJuaWRfcmVzdjI7CS8qIHJlc2VydmVkICovCisJX191OAkJcm5pZF9zaWRfbGVuOwkvKiBzcGVjaWZpYyBJRCBkYXRhIGxlbmd0aCAqLworfTsKKworc3RydWN0IGZjX2Vsc19ybmlkX2NpZCB7CisJX19iZTY0CQlybmlkX3d3cG47CS8qIE4gcG9ydCBuYW1lICovCisJX19iZTY0CQlybmlkX3d3bm47CS8qIG5vZGUgbmFtZSAqLworfTsKKworc3RydWN0IGZjX2Vsc19ybmlkX2dlbiB7CisJX191OAkJcm5pZF92ZW5kX2lkWzE2XTsgLyogdmVuZG9yLXVuaXF1ZSBJRCAqLworCV9fYmUzMgkJcm5pZF9hdHlwZTsJLyogYXNzb2NpYXRlZCB0eXBlIChzZWUgYmVsb3cpICovCisJX19iZTMyCQlybmlkX3BoeXNfcG9ydDsJLyogcGh5c2ljYWwgcG9ydCBudW1iZXIgKi8KKwlfX2JlMzIJCXJuaWRfYXR0X25vZGVzOwkvKiBudW1iZXIgb2YgYXR0YWNoZWQgbm9kZXMgKi8KKwlfX3U4CQlybmlkX25vZGVfbWdtdDsJLyogbm9kZSBtYW5hZ2VtZW50IChzZWUgYmVsb3cpICovCisJX191OAkJcm5pZF9pcF92ZXI7CS8qIElQIHZlcnNpb24gKHNlZSBiZWxvdykgKi8KKwlfX2JlMTYJCXJuaWRfcHJvdF9wb3J0OwkvKiBVRFAgLyBUQ1AgcG9ydCBudW1iZXIgKi8KKwlfX2JlMzIJCXJuaWRfaXBfYWRkcls0XTsgLyogSVAgYWRkcmVzcyAqLworCV9fdTgJCXJuaWRfcmVzdmRbMl07CS8qIHJlc2VydmVkICovCisJX19iZTE2CQlybmlkX3ZlbmRfc3BlYzsJLyogdmVuZG9yLXNwZWNpZmljIGZpZWxkICovCit9OworCitlbnVtIGZjX2Vsc19ybmlkX2F0eXBlIHsKKwlFTFNfUk5JREFfVU5LID0JCTB4MDEsCS8qIHVua25vd24gKi8KKwlFTFNfUk5JREFfT1RIRVIgPQkweDAyLAkvKiBub25lIG9mIHRoZSBmb2xsb3dpbmcgKi8KKwlFTFNfUk5JREFfSFVCID0JCTB4MDMsCisJRUxTX1JOSURBX1NXSVRDSCA9CTB4MDQsCisJRUxTX1JOSURBX0dBVEVXQVkgPQkweDA1LAorCUVMU19STklEQV9DT05WID0JMHgwNiwgICAvKiBPYnNvbGV0ZSwgZG8gbm90IHVzZSB0aGlzIHZhbHVlICovCisJRUxTX1JOSURBX0hCQSA9CSAgICAgICAgMHgwNywgICAvKiBPYnNvbGV0ZSwgZG8gbm90IHVzZSB0aGlzIHZhbHVlICovCisJRUxTX1JOSURBX1BST1hZID0gICAgICAgMHgwOCwgICAvKiBPYnNvbGV0ZSwgZG8gbm90IHVzZSB0aGlzIHZhbHVlICovCisJRUxTX1JOSURBX1NUT1JBR0UgPQkweDA5LAorCUVMU19STklEQV9IT1NUID0JMHgwYSwKKwlFTFNfUk5JREFfU1VCU1lTID0JMHgwYiwJLyogc3RvcmFnZSBzdWJzeXN0ZW0gKGUuZy4sIFJBSUQpICovCisJRUxTX1JOSURBX0FDQ0VTUyA9CTB4MGUsCS8qIGFjY2VzcyBkZXZpY2UgKGUuZy4gbWVkaWEgY2hhbmdlcikgKi8KKwlFTFNfUk5JREFfTkFTID0JCTB4MTEsCS8qIE5BUyBzZXJ2ZXIgKi8KKwlFTFNfUk5JREFfQlJJREdFID0JMHgxMiwJLyogYnJpZGdlICovCisJRUxTX1JOSURBX1ZJUlQgPQkweDEzLAkvKiB2aXJ0dWFsaXphdGlvbiBkZXZpY2UgKi8KKwlFTFNfUk5JREFfTUYgPQkJMHhmZiwJLyogbXVsdGlmdW5jdGlvbiBkZXZpY2UgKGJpdHMgYmVsb3cpICovCisJRUxTX1JOSURBX01GX0hVQiA9CTFVTCA8PCAzMSwgCS8qIGh1YiAqLworCUVMU19STklEQV9NRl9TVyA9CTFVTCA8PCAzMCwgCS8qIHN3aXRjaCAqLworCUVMU19STklEQV9NRl9HVyA9CTFVTCA8PCAyOSwJLyogZ2F0ZXdheSAqLworCUVMU19STklEQV9NRl9TVCA9CTFVTCA8PCAyOCwJLyogc3RvcmFnZSAqLworCUVMU19STklEQV9NRl9IT1NUID0JMVVMIDw8IDI3LAkvKiBob3N0ICovCisJRUxTX1JOSURBX01GX1NVQiA9CTFVTCA8PCAyNiwJLyogc3RvcmFnZSBzdWJzeXN0ZW0gKi8KKwlFTFNfUk5JREFfTUZfQUNDID0JMVVMIDw8IDI1LAkvKiBzdG9yYWdlIGFjY2VzcyBkZXYgKi8KKwlFTFNfUk5JREFfTUZfV0RNID0JMVVMIDw8IDI0LAkvKiB3YXZlbGVuZ3RoIGRpdmlzaW9uIG11eCAqLworCUVMU19STklEQV9NRl9OQVMgPQkxVUwgPDwgMjMsCS8qIE5BUyBzZXJ2ZXIgKi8KKwlFTFNfUk5JREFfTUZfQlIgPQkxVUwgPDwgMjIsCS8qIGJyaWRnZSAqLworCUVMU19STklEQV9NRl9WSVJUID0JMVVMIDw8IDIxLAkvKiB2aXJ0dWFsaXphdGlvbiBkZXZpY2UgKi8KK307CisKK2VudW0gZmNfZWxzX3JuaWRfbWdtdCB7CisJRUxTX1JOSURNX1NOTVAgPQkwLAorCUVMU19STklETV9URUxORVQgPQkxLAorCUVMU19STklETV9IVFRQID0JMiwKKwlFTFNfUk5JRE1fSFRUUFMgPQkzLAorCUVMU19STklETV9YTUwgPQkJNCwJLyogSFRUUCArIFhNTCAqLworfTsKKworZW51bSBmY19lbHNfcm5pZF9pcHZlciB7CisJRUxTX1JOSURJUF9OT05FID0JMCwJLyogbm8gSVAgc3VwcG9ydCBvciBub2RlIG1nbXQuICovCisJRUxTX1JOSURJUF9WNCA9CQkxLAkvKiBJUHY0ICovCisJRUxTX1JOSURJUF9WNiA9CQkyLAkvKiBJUHY2ICovCit9OworCisvKgorICogRUxTIFJQTCAtIFJlYWQgUG9ydCBMaXN0LgorICovCitzdHJ1Y3QgZmNfZWxzX3JwbCB7CisJX191OAkJcnBsX2NtZDsJLyogY29tbWFuZCAqLworCV9fdTgJCXJwbF9yZXN2WzVdOwkvKiByZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLworCV9fYmUxNgkJcnBsX21heF9zaXplOwkvKiBtYXhpbXVtIHJlc3BvbnNlIHNpemUgb3IgemVybyAqLworCV9fdTgJCXJwbF9yZXN2MTsJLyogcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KKwlfX3U4CQlycGxfaW5kZXhbM107CS8qIHN0YXJ0aW5nIGluZGV4ICovCit9OworCisvKgorICogUG9ydCBudW1iZXIgYmxvY2sgaW4gUlBMIHJlc3BvbnNlLgorICovCitzdHJ1Y3QgZmNfZWxzX3BuYiB7CisJX19iZTMyCQlwbmJfcGh5c19wbjsJLyogcGh5c2ljYWwgcG9ydCBudW1iZXIgKi8KKwlfX3U4CQlwbmJfcmVzdjsJLyogcmVzZXJ2ZWQgKi8KKwlfX3U4CQlwbmJfcG9ydF9pZFszXTsJLyogcG9ydCBJRCAqLworCV9fYmU2NAkJcG5iX3d3cG47CS8qIHBvcnQgbmFtZSAqLworfTsKKworLyoKKyAqIFJQTCBMU19BQ0MgcmVzcG9uc2UuCisgKi8KK3N0cnVjdCBmY19lbHNfcnBsX3Jlc3AgeworCV9fdTgJCXJwbF9jbWQ7CS8qIEVMU19MU19BQ0MgKi8KKwlfX3U4CQlycGxfcmVzdjE7CS8qIHJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCisJX19iZTE2CQlycGxfcGxlbjsJLyogcGF5bG9hZCBsZW5ndGggKi8KKwlfX3U4CQlycGxfcmVzdjI7CS8qIHJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCisJX191OAkJcnBsX2xsZW5bM107CS8qIGxpc3QgbGVuZ3RoICovCisJX191OAkJcnBsX3Jlc3YzOwkvKiByZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLworCV9fdTgJCXJwbF9pbmRleFszXTsJLyogc3RhcnRpbmcgaW5kZXggKi8KKwlzdHJ1Y3QgZmNfZWxzX3BuYiBycGxfcG5iWzFdOwkvKiB2YXJpYWJsZSBudW1iZXIgb2YgUE5CcyAqLworfTsKKworLyoKKyAqIExpbmsgRXJyb3IgU3RhdHVzIEJsb2NrLgorICovCitzdHJ1Y3QgZmNfZWxzX2xlc2IgeworCV9fYmUzMgkJbGVzYl9saW5rX2ZhaWw7CS8qIGxpbmsgZmFpbHVyZSBjb3VudCAqLworCV9fYmUzMgkJbGVzYl9zeW5jX2xvc3M7CS8qIGxvc3Mgb2Ygc3luY2hyb25pemF0aW9uIGNvdW50ICovCisJX19iZTMyCQlsZXNiX3NpZ19sb3NzOwkvKiBsb3NzIG9mIHNpZ25hbCBjb3VudCAqLworCV9fYmUzMgkJbGVzYl9wcmltX2VycjsJLyogcHJpbWl0aXZlIHNlcXVlbmNlIGVycm9yIGNvdW50ICovCisJX19iZTMyCQlsZXNiX2ludl93b3JkOwkvKiBpbnZhbGlkIHRyYW5zbWlzc2lvbiB3b3JkIGNvdW50ICovCisJX19iZTMyCQlsZXNiX2ludl9jcmM7CS8qIGludmFsaWQgQ1JDIGNvdW50ICovCit9OworCisvKgorICogRUxTIFJQUyAtIFJlYWQgUG9ydCBTdGF0dXMgQmxvY2sgcmVxdWVzdC4KKyAqLworc3RydWN0IGZjX2Vsc19ycHMgeworCV9fdTgJCXJwc19jbWQ7CS8qIGNvbW1hbmQgKi8KKwlfX3U4CQlycHNfcmVzdlsyXTsJLyogcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KKwlfX3U4CQlycHNfZmxhZzsJLyogZmxhZyAtIHNlZSBiZWxvdyAqLworCV9fYmU2NAkJcnBzX3BvcnRfc3BlYzsJLyogcG9ydCBzZWxlY3Rpb24gKi8KK307CisKK2VudW0gZmNfZWxzX3Jwc19mbGFnIHsKKwlGQ19FTFNfUlBTX0RJRCA9CTB4MDAsCS8qIHBvcnQgaWRlbnRpZmllZCBieSBEX0lEIG9mIHJlcS4gKi8KKwlGQ19FTFNfUlBTX1BQTiA9CTB4MDEsCS8qIHBvcnRfc3BlYyBpcyBwaHlzaWNhbCBwb3J0IG51bWJlciAqLworCUZDX0VMU19SUFNfV1dQTiA9CTB4MDIsCS8qIHBvcnRfc3BlYyBpcyBwb3J0IFdXTiAqLworfTsKKworLyoKKyAqIEVMUyBSUFMgTFNfQUNDIHJlc3BvbnNlLgorICovCitzdHJ1Y3QgZmNfZWxzX3Jwc19yZXNwIHsKKwlfX3U4CQlycHNfY21kOwkvKiBjb21tYW5kIC0gTFNfQUNDICovCisJX191OAkJcnBzX3Jlc3ZbMl07CS8qIHJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCisJX191OAkJcnBzX2ZsYWc7CS8qIGZsYWcgLSBzZWUgYmVsb3cgKi8KKwlfX3U4CQlycHNfcmVzdjJbMl07CS8qIHJlc2VydmVkICovCisJX19iZTE2CQlycHNfc3RhdHVzOwkvKiBwb3J0IHN0YXR1cyAtIHNlZSBiZWxvdyAqLworCXN0cnVjdCBmY19lbHNfbGVzYiBycHNfbGVzYjsJLyogbGluayBlcnJvciBzdGF0dXMgYmxvY2sgKi8KK307CisKK2VudW0gZmNfZWxzX3Jwc19yZXNwX2ZsYWcgeworCUZDX0VMU19SUFNfTFBFViA9CTB4MDEsCS8qIExfcG9ydCBleHRlbnNpb24gdmFsaWQgKi8KK307CisKK2VudW0gZmNfZWxzX3Jwc19yZXNwX3N0YXR1cyB7CisJRkNfRUxTX1JQU19QVFAgPQkxIDw8IDUsCS8qIHBvaW50LXRvLXBvaW50IGNvbm5lY3Rpb24gKi8KKwlGQ19FTFNfUlBTX0xPT1AgPQkxIDw8IDQsCS8qIGxvb3AgbW9kZSAqLworCUZDX0VMU19SUFNfRkFCID0JMSA8PCAzLAkvKiBmYWJyaWMgcHJlc2VudCAqLworCUZDX0VMU19SUFNfTk9fU0lHID0JMSA8PCAyLAkvKiBsb3NzIG9mIHNpZ25hbCAqLworCUZDX0VMU19SUFNfTk9fU1lOQyA9CTEgPDwgMSwJLyogbG9zcyBvZiBzeW5jaHJvbml6YXRpb24gKi8KKwlGQ19FTFNfUlBTX1JFU0VUID0JMSA8PCAwLAkvKiBpbiBsaW5rIHJlc2V0IHByb3RvY29sICovCit9OworCisvKgorICogRUxTIExJUlIgLSBMaW5rIEluY2lkZW50IFJlY29yZCBSZWdpc3RyYXRpb24gcmVxdWVzdC4KKyAqLworc3RydWN0IGZjX2Vsc19saXJyIHsKKwlfX3U4CQlsaXJyX2NtZDsJLyogY29tbWFuZCAqLworCV9fdTgJCWxpcnJfcmVzdlszXTsJLyogcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KKwlfX3U4CQlsaXJyX2Z1bmM7CS8qIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbiAqLworCV9fdTgJCWxpcnJfZm10OwkvKiBGQy00IHR5cGUgb2YgUkxJUiByZXF1ZXN0ZWQgKi8KKwlfX3U4CQlsaXJyX3Jlc3YyWzJdOwkvKiByZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLworfTsKKworZW51bSBmY19lbHNfbGlycl9mdW5jIHsKKwlFTFNfTElSUl9TRVRfQ09ORCA9IAkweDAxLAkvKiBzZXQgLSBjb25kaXRpb25hbGx5IHJlY2VpdmUgKi8KKwlFTFNfTElSUl9TRVRfVU5DT05EID0gCTB4MDIsCS8qIHNldCAtIHVuY29uZGl0aW9uYWxseSByZWNlaXZlICovCisJRUxTX0xJUlJfQ0xFQVIgPSAJMHhmZgkvKiBjbGVhciByZWdpc3RyYXRpb24gKi8KK307CisKKy8qCisgKiBFTFMgU1JMIC0gU2NhbiBSZW1vdGUgTG9vcCByZXF1ZXN0LgorICovCitzdHJ1Y3QgZmNfZWxzX3NybCB7CisJX191OAkJc3JsX2NtZDsJLyogY29tbWFuZCAqLworCV9fdTgJCXNybF9yZXN2WzNdOwkvKiByZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLworCV9fdTgJCXNybF9mbGFnOwkvKiBmbGFnIC0gc2VlIGJlbG93ICovCisJX191OAkJc3JsX2ZsYWdfcGFyYW1bM107CS8qIGZsYWcgcGFyYW1ldGVyICovCit9OworCitlbnVtIGZjX2Vsc19zcmxfZmxhZyB7CisJRkNfRUxTX1NSTF9BTEwgPQkweDAwLAkvKiBzY2FuIGFsbCBGTCBwb3J0cyAqLworCUZDX0VMU19TUkxfT05FID0JMHgwMSwJLyogc2NhbiBzcGVjaWZpZWQgbG9vcCAqLworCUZDX0VMU19TUkxfRU5fUEVSID0JMHgwMiwJLyogZW5hYmxlIHBlcmlvZGljIHNjYW5uaW5nIChwYXJhbSkgKi8KKwlGQ19FTFNfU1JMX0RJU19QRVIgPQkweDAzLAkvKiBkaXNhYmxlIHBlcmlvZGljIHNjYW5uaW5nICovCit9OworCisvKgorICogRUxTIFJMUyAtIFJlYWQgTGluayBFcnJvciBTdGF0dXMgQmxvY2sgcmVxdWVzdC4KKyAqLworc3RydWN0IGZjX2Vsc19ybHMgeworCV9fdTgJCXJsc19jbWQ7CS8qIGNvbW1hbmQgKi8KKwlfX3U4CQlybHNfcmVzdls0XTsJLyogcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KKwlfX3U4CQlybHNfcG9ydF9pZFszXTsJLyogcG9ydCBJRCAqLworfTsKKworLyoKKyAqIEVMUyBSTFMgTFNfQUNDIFJlc3BvbnNlLgorICovCitzdHJ1Y3QgZmNfZWxzX3Jsc19yZXNwIHsKKwlfX3U4CQlybHNfY21kOwkvKiBFTFNfTFNfQUNDICovCisJX191OAkJcmxzX3Jlc3ZbM107CS8qIHJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCisJc3RydWN0IGZjX2Vsc19sZXNiIHJsc19sZXNiOwkvKiBsaW5rIGVycm9yIHN0YXR1cyBibG9jayAqLworfTsKKworLyoKKyAqIEVMUyBSTElSIC0gUmVnaXN0ZXJlZCBMaW5rIEluY2lkZW50IFJlcG9ydC4KKyAqIFRoaXMgaXMgZm9sbG93ZWQgYnkgdGhlIENMSVIgYW5kIHRoZSBDTElELCBkZXNjcmliZWQgYmVsb3cuCisgKi8KK3N0cnVjdCBmY19lbHNfcmxpciB7CisJX191OAkJcmxpcl9jbWQ7CS8qIGNvbW1hbmQgKi8KKwlfX3U4CQlybGlyX3Jlc3ZbM107CS8qIHJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCisJX191OAkJcmxpcl9mbXQ7CS8qIGZvcm1hdCAoRkM0LXR5cGUgaWYgdHlwZSBzcGVjaWZpYykgKi8KKwlfX3U4CQlybGlyX2Nscl9sZW47CS8qIGNvbW1vbiBsaW5rIGluY2lkZW50IHJlY29yZCBsZW5ndGggKi8KKwlfX3U4CQlybGlyX2NsZF9sZW47CS8qIGNvbW1vbiBsaW5rIGluY2lkZW50IGRlc2MuIGxlbmd0aCAqLworCV9fdTgJCXJsaXJfc2xyX2xlbjsJLyogc3BlYy4gbGluayBpbmNpZGVudCByZWNvcmQgbGVuZ3RoICovCit9OworCisvKgorICogQ0xJUiAtIENvbW1vbiBMaW5rIEluY2lkZW50IFJlY29yZCBEYXRhLiAtIFNlbnQgdmlhIFJMSVIuCisgKi8KK3N0cnVjdCBmY19lbHNfY2xpciB7CisJX19iZTY0CQljbGlyX3d3cG47CS8qIGluY2lkZW50IHBvcnQgbmFtZSAqLworCV9fYmU2NAkJY2xpcl93d25uOwkvKiBpbmNpZGVudCBwb3J0IG5vZGUgbmFtZSAqLworCV9fdTgJCWNsaXJfcG9ydF90eXBlOwkvKiBpbmNpZGVudCBwb3J0IHR5cGUgKi8KKwlfX3U4CQljbGlyX3BvcnRfaWRbM107CS8qIGluY2lkZW50IHBvcnQgSUQgKi8KKworCV9fYmU2NAkJY2xpcl9jb25uX3d3cG47CS8qIGNvbm5lY3RlZCBwb3J0IG5hbWUgKi8KKwlfX2JlNjQJCWNsaXJfY29ubl93d25uOwkvKiBjb25uZWN0ZWQgbm9kZSBuYW1lICovCisJX19iZTY0CQljbGlyX2ZhYl9uYW1lOwkvKiBmYWJyaWMgbmFtZSAqLworCV9fYmUzMgkJY2xpcl9waHlzX3BvcnQ7CS8qIHBoeXNpY2FsIHBvcnQgbnVtYmVyICovCisJX19iZTMyCQljbGlyX3RyYW5zX2lkOwkvKiB0cmFuc2FjdGlvbiBJRCAqLworCV9fdTgJCWNsaXJfcmVzdlszXTsJLyogcmVzZXJ2ZWQgKi8KKwlfX3U4CQljbGlyX3RzX2ZtdDsJLyogdGltZSBzdGFtcCBmb3JtYXQgKi8KKwlfX2JlNjQJCWNsaXJfdGltZXN0YW1wOwkvKiB0aW1lIHN0YW1wICovCit9OworCisvKgorICogQ0xJUiBjbGlyX3RzX2ZtdCAtIHRpbWUgc3RhbXAgZm9ybWF0IHZhbHVlcy4KKyAqLworZW51bSBmY19lbHNfY2xpcl90c19mbXQgeworCUVMU19DTElSX1RTX1VOS05PV04gPSAJMCwJLyogdGltZSBzdGFtcCBmaWVsZCB1bmtub3duICovCisJRUxTX0NMSVJfVFNfU0VDX0ZSQUMgPSAJMSwJLyogdGltZSBpbiBzZWNvbmRzIGFuZCBmcmFjdGlvbnMgKi8KKwlFTFNfQ0xJUl9UU19DU1UgPQkyLAkvKiB0aW1lIGluIGNsb2NrIHN5bmNoIHVwZGF0ZSBmb3JtYXQgKi8KK307CisKKy8qCisgKiBDb21tb24gTGluayBJbmNpZGVudCBEZXNjcmlwdG9yIC0gc2VudCB2aWEgUkxJUi4KKyAqLworc3RydWN0IGZjX2Vsc19jbGlkIHsKKwlfX3U4CQljbGlkX2lxOwkvKiBpbmNpZGVudCBxdWFsaWZpZXIgZmxhZ3MgKi8KKwlfX3U4CQljbGlkX2ljOwkvKiBpbmNpZGVudCBjb2RlICovCisJX19iZTE2CQljbGlkX2VwYWk7CS8qIGRvbWFpbi9hcmVhIG9mIElTTCAqLworfTsKKworLyoKKyAqIENMSUQgaW5jaWRlbnQgcXVhbGlmaWVyIGZsYWdzLgorICovCitlbnVtIGZjX2Vsc19jbGlkX2lxIHsKKwlFTFNfQ0xJRF9TV0lUQ0ggPQkweDIwLAkvKiBpbmNpZGVudCBwb3J0IGlzIGEgc3dpdGNoIG5vZGUgKi8KKwlFTFNfQ0xJRF9FX1BPUlQgPQkweDEwLAkvKiBpbmNpZGVudCBpcyBhbiBJU0wgKEUpIHBvcnQgKi8KKwlFTFNfQ0xJRF9TRVZfTUFTSyA9CTB4MGMsCS8qIHNldmVyaXR5IDItYml0IGZpZWxkIG1hc2sgKi8KKwlFTFNfQ0xJRF9TRVZfSU5GTyA9CTB4MDAsCS8qIHJlcG9ydCBpcyBpbmZvcm1hdGlvbmFsICovCisJRUxTX0NMSURfU0VWX0lOT1AgPQkweDA4LAkvKiBsaW5rIG5vdCBvcGVyYXRpb25hbCAqLworCUVMU19DTElEX1NFVl9ERUcgPQkweDA0LAkvKiBsaW5rIGRlZ3JhZGVkIGJ1dCBvcGVyYXRpb25hbCAqLworCUVMU19DTElEX0xBU0VSID0JMHgwMiwJLyogc3ViYXNzZW1ibHkgaXMgYSBsYXNlciAqLworCUVMU19DTElEX0ZSVSA9CQkweDAxLAkvKiBmb3JtYXQgY2FuIGlkZW50aWZ5IGEgRlJVICovCit9OworCisvKgorICogQ0xJRCBpbmNpZGVudCBjb2RlLgorICovCitlbnVtIGZjX2Vsc19jbGlkX2ljIHsKKwlFTFNfQ0xJRF9JQ19JTVBMID0JMSwJLyogaW1wbGljaXQgaW5jaWRlbnQgKi8KKwlFTFNfQ0xJRF9JQ19CRVIgPQkyLAkvKiBiaXQtZXJyb3ItcmF0ZSB0aHJlc2hvbGQgZXhjZWVkZWQgKi8KKwlFTFNfQ0xJRF9JQ19MT1MgPQkzLAkvKiBsb3NzIG9mIHN5bmNoIG9yIHNpZ25hbCAqLworCUVMU19DTElEX0lDX05PUyA9CTQsCS8qIG5vbi1vcGVyYXRpb25hbCBwcmltaXRpdmUgc2VxdWVuY2UgKi8KKwlFTFNfQ0xJRF9JQ19QU1QgPQk1LAkvKiBwcmltaXRpdmUgc2VxdWVuY2UgdGltZW91dCAqLworCUVMU19DTElEX0lDX0lOVkFMID0JNiwJLyogaW52YWxpZCBwcmltaXRpdmUgc2VxdWVuY2UgKi8KKwlFTFNfQ0xJRF9JQ19MT09QX1RPID0JNywJLyogbG9vcCBpbml0aWFsaXphdGlvbiB0aW1lIG91dCAqLworCUVMU19DTElEX0lDX0xJUCA9CTgsCS8qIHJlY2VpdmluZyBMSVAgKi8KK307CisKKyNlbmRpZiAvKiBfRkNfRUxTX0hfICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc2NzaS9mYy9mY19mcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3Njc2kvZmMvZmNfZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGYyOGIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3Njc2kvZmMvZmNfZnMuaApAQCAtMCwwICsxLDM0OCBAQAorLyoKKyAqIENvcHlyaWdodChjKSAyMDA3IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogTWFpbnRhaW5lZCBhdCB3d3cuT3Blbi1GQ29FLm9yZworICovCisKKyNpZm5kZWYgX0ZDX0ZTX0hfCisjZGVmaW5lIF9GQ19GU19IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIEZpYnJlIENoYW5uZWwgRnJhbWluZyBhbmQgU2lnbmFsbGluZyBkZWZpbml0aW9ucy4KKyAqIEZyb20gVDExIEZDLUZTLTIgUmV2IDAuOTAgLSA5IEF1Z3VzdCAyMDA1LgorICovCisKKy8qCisgKiBGcmFtZSBoZWFkZXIKKyAqLworc3RydWN0IGZjX2ZyYW1lX2hlYWRlciB7CisJX191OCAgICAgICAgICBmaF9yX2N0bDsJLyogcm91dGluZyBjb250cm9sICovCisJX191OCAgICAgICAgICBmaF9kX2lkWzNdOwkvKiBEZXN0aW5hdGlvbiBJRCAqLworCisJX191OCAgICAgICAgICBmaF9jc19jdGw7CS8qIGNsYXNzIG9mIHNlcnZpY2UgY29udHJvbCAvIHByaSAqLworCV9fdTggICAgICAgICAgZmhfc19pZFszXTsJLyogU291cmNlIElEICovCisKKwlfX3U4ICAgICAgICAgIGZoX3R5cGU7CQkvKiBzZWUgZW51bSBmY19maF90eXBlIGJlbG93ICovCisJX191OCAgICAgICAgICBmaF9mX2N0bFszXTsJLyogZnJhbWUgY29udHJvbCAqLworCisJX191OCAgICAgICAgICBmaF9zZXFfaWQ7CS8qIHNlcXVlbmNlIElEICovCisJX191OCAgICAgICAgICBmaF9kZl9jdGw7CS8qIGRhdGEgZmllbGQgY29udHJvbCAqLworCV9fYmUxNiAgICAgICAgZmhfc2VxX2NudDsJLyogc2VxdWVuY2UgY291bnQgKi8KKworCV9fYmUxNiAgICAgICAgZmhfb3hfaWQ7CQkvKiBvcmlnaW5hdG9yIGV4Y2hhbmdlIElEICovCisJX19iZTE2ICAgICAgICBmaF9yeF9pZDsJCS8qIHJlc3BvbmRlciBleGNoYW5nZSBJRCAqLworCV9fYmUzMiAgICAgICAgZmhfcGFybV9vZmZzZXQ7CS8qIHBhcmFtZXRlciBvciByZWxhdGl2ZSBvZmZzZXQgKi8KK307CisKKyNkZWZpbmUgRkNfRlJBTUVfSEVBREVSX0xFTiAyNAkvKiBleHBlY3RlZCBsZW5ndGggb2Ygc3RydWN0dXJlICovCisKKyNkZWZpbmUgRkNfTUFYX1BBWUxPQUQgIDIxMTJVCQkvKiBtYXggcGF5bG9hZCBsZW5ndGggaW4gYnl0ZXMgKi8KKyNkZWZpbmUgRkNfTUlOX01BWF9QQVlMT0FEICAyNTZVIAkvKiBsb3dlciBsaW1pdCBvbiBtYXggcGF5bG9hZCAqLworCisjZGVmaW5lIEZDX01BWF9GUkFNRQkoRkNfTUFYX1BBWUxPQUQgKyBGQ19GUkFNRV9IRUFERVJfTEVOKQorI2RlZmluZSBGQ19NSU5fTUFYX0ZSQU1FIChGQ19NSU5fTUFYX1BBWUxPQUQgKyBGQ19GUkFNRV9IRUFERVJfTEVOKQorCisvKgorICogZmhfcl9jdGwgLSBSb3V0aW5nIGNvbnRyb2wgZGVmaW5pdGlvbnMuCisgKi8KKyAgICAvKgorICAgICAqIEZDLTQgZGV2aWNlX2RhdGEuCisgICAgICovCitlbnVtIGZjX3JjdGwgeworCUZDX1JDVExfRERfVU5DQVQgPSAweDAwLAkvKiB1bmNhdGVnb3JpemVkIGluZm9ybWF0aW9uICovCisJRkNfUkNUTF9ERF9TT0xfREFUQSA9IDB4MDEsCS8qIHNvbGljaXRlZCBkYXRhICovCisJRkNfUkNUTF9ERF9VTlNPTF9DVEwgPSAweDAyLAkvKiB1bnNvbGljaXRlZCBjb250cm9sICovCisJRkNfUkNUTF9ERF9TT0xfQ1RMID0gMHgwMywJLyogc29saWNpdGVkIGNvbnRyb2wgb3IgcmVwbHkgKi8KKwlGQ19SQ1RMX0REX1VOU09MX0RBVEEgPSAweDA0LAkvKiB1bnNvbGljaXRlZCBkYXRhICovCisJRkNfUkNUTF9ERF9EQVRBX0RFU0MgPSAweDA1LAkvKiBkYXRhIGRlc2NyaXB0b3IgKi8KKwlGQ19SQ1RMX0REX1VOU09MX0NNRCA9IDB4MDYsCS8qIHVuc29saWNpdGVkIGNvbW1hbmQgKi8KKwlGQ19SQ1RMX0REX0NNRF9TVEFUVVMgPSAweDA3LAkvKiBjb21tYW5kIHN0YXR1cyAqLworCisjZGVmaW5lIEZDX1JDVExfSUxTX1JFUSBGQ19SQ1RMX0REX1VOU09MX0NUTAkvKiBJTFMgcmVxdWVzdCAqLworI2RlZmluZSBGQ19SQ1RMX0lMU19SRVAgRkNfUkNUTF9ERF9TT0xfQ1RMCS8qIElMUyByZXBseSAqLworCisJLyoKKwkgKiBFeHRlbmRlZCBMaW5rX0RhdGEKKwkgKi8KKwlGQ19SQ1RMX0VMU19SRVEgPSAweDIyLAkvKiBleHRlbmRlZCBsaW5rIHNlcnZpY2VzIHJlcXVlc3QgKi8KKwlGQ19SQ1RMX0VMU19SRVAgPSAweDIzLAkvKiBleHRlbmRlZCBsaW5rIHNlcnZpY2VzIHJlcGx5ICovCisJRkNfUkNUTF9FTFM0X1JFUSA9IDB4MzIsIC8qIEZDLTQgRUxTIHJlcXVlc3QgKi8KKwlGQ19SQ1RMX0VMUzRfUkVQID0gMHgzMywgLyogRkMtNCBFTFMgcmVwbHkgKi8KKwkvKgorCSAqIE9wdGlvbmFsIEV4dGVuZGVkIEhlYWRlcnMKKwkgKi8KKwlGQ19SQ1RMX1ZGVEggPSAweDUwLAkvKiB2aXJ0dWFsIGZhYnJpYyB0YWdnaW5nIGhlYWRlciAqLworCUZDX1JDVExfSUZSSCA9IDB4NTEsCS8qIGludGVyLWZhYnJpYyByb3V0aW5nIGhlYWRlciAqLworCUZDX1JDVExfRU5DSCA9IDB4NTIsCS8qIGVuY2Fwc3VsYXRpb24gaGVhZGVyICovCisJLyoKKwkgKiBCYXNpYyBMaW5rIFNlcnZpY2VzIGZoX3JfY3RsIHZhbHVlcy4KKwkgKi8KKwlGQ19SQ1RMX0JBX05PUCA9IDB4ODAsCS8qIGJhc2ljIGxpbmsgc2VydmljZSBOT1AgKi8KKwlGQ19SQ1RMX0JBX0FCVFMgPSAweDgxLAkvKiBiYXNpYyBsaW5rIHNlcnZpY2UgYWJvcnQgKi8KKwlGQ19SQ1RMX0JBX1JNQyA9IDB4ODIsCS8qIHJlbW92ZSBjb25uZWN0aW9uICovCisJRkNfUkNUTF9CQV9BQ0MgPSAweDg0LAkvKiBiYXNpYyBhY2NlcHQgKi8KKwlGQ19SQ1RMX0JBX1JKVCA9IDB4ODUsCS8qIGJhc2ljIHJlamVjdCAqLworCUZDX1JDVExfQkFfUFJNVCA9IDB4ODYsCS8qIGRlZGljYXRlZCBjb25uZWN0aW9uIHByZWVtcHRlZCAqLworCS8qCisJICogTGluayBDb250cm9sIEluZm9ybWF0aW9uLgorCSAqLworCUZDX1JDVExfQUNLXzEgPSAweGMwLAkvKiBhY2tub3dsZWRnZV8xICovCisJRkNfUkNUTF9BQ0tfMCA9IDB4YzEsCS8qIGFja25vd2xlZGdlXzAgKi8KKwlGQ19SQ1RMX1BfUkpUID0gMHhjMiwJLyogcG9ydCByZWplY3QgKi8KKwlGQ19SQ1RMX0ZfUkpUID0gMHhjMywJLyogZmFicmljIHJlamVjdCAqLworCUZDX1JDVExfUF9CU1kgPSAweGM0LAkvKiBwb3J0IGJ1c3kgKi8KKwlGQ19SQ1RMX0ZfQlNZID0gMHhjNSwJLyogZmFicmljIGJ1c3kgdG8gZGF0YSBmcmFtZSAqLworCUZDX1JDVExfRl9CU1lMID0gMHhjNiwJLyogZmFicmljIGJ1c3kgdG8gbGluayBjb250cm9sIGZyYW1lICovCisJRkNfUkNUTF9MQ1IgPSAweGM3LAkvKiBsaW5rIGNyZWRpdCByZXNldCAqLworCUZDX1JDVExfRU5EID0gMHhjOSwJLyogZW5kICovCit9OworCQkJCSAgICAvKiBpbmNvbXBsZXRlIGxpc3Qgb2YgZGVmaW5pdGlvbnMgKi8KKworLyoKKyAqIFJfQ1RMIG5hbWVzIGluaXRpYWxpemVyLgorICogUGxlYXNlIGtlZXAgdGhpcyBtYXRjaGluZyB0aGUgYWJvdmUgZGVmaW5pdGlvbnMuCisgKi8KKyNkZWZpbmUgRkNfUkNUTF9OQU1FU19JTklUIHsgXAorCVtGQ19SQ1RMX0REX1VOQ0FUXSA9CQkidW5jYXQiLAkJCVwKKwlbRkNfUkNUTF9ERF9TT0xfREFUQV0gPQkJInNvbCBkYXRhIiwJCQlcCisJW0ZDX1JDVExfRERfVU5TT0xfQ1RMXSA9CSJ1bnNvbCBjdGwiLAkJCVwKKwlbRkNfUkNUTF9ERF9TT0xfQ1RMXSA9CQkic29sIGN0bC9yZXBseSIsCQlcCisJW0ZDX1JDVExfRERfVU5TT0xfREFUQV0gPQkidW5zb2wgZGF0YSIsCQkJXAorCVtGQ19SQ1RMX0REX0RBVEFfREVTQ10gPQkiZGF0YSBkZXNjIiwJCQlcCisJW0ZDX1JDVExfRERfVU5TT0xfQ01EXSA9CSJ1bnNvbCBjbWQiLAkJCVwKKwlbRkNfUkNUTF9ERF9DTURfU1RBVFVTXSA9CSJjbWQgc3RhdHVzIiwJCQlcCisJW0ZDX1JDVExfRUxTX1JFUV0gPQkJIkVMUyByZXEiLAkJCVwKKwlbRkNfUkNUTF9FTFNfUkVQXSA9CQkiRUxTIHJlcCIsCQkJXAorCVtGQ19SQ1RMX0VMUzRfUkVRXSA9CQkiRkMtNCBFTFMgcmVxIiwJCQlcCisJW0ZDX1JDVExfRUxTNF9SRVBdID0JCSJGQy00IEVMUyByZXAiLAkJCVwKKwlbRkNfUkNUTF9CQV9OT1BdID0JCSJCTFMgTk9QIiwJCQlcCisJW0ZDX1JDVExfQkFfQUJUU10gPQkJIkJMUyBhYm9ydCIsCQkJXAorCVtGQ19SQ1RMX0JBX1JNQ10gPQkJIkJMUyByZW1vdmUgY29ubmVjdGlvbiIsCVwKKwlbRkNfUkNUTF9CQV9BQ0NdID0JCSJCTFMgYWNjZXB0IiwJCQlcCisJW0ZDX1JDVExfQkFfUkpUXSA9CQkiQkxTIHJlamVjdCIsCQkJXAorCVtGQ19SQ1RMX0JBX1BSTVRdID0JCSJCTFMgZGVkaWNhdGVkIGNvbm5lY3Rpb24gcHJlZW1wdGVkIiwgXAorCVtGQ19SQ1RMX0FDS18xXSA9CQkiTEMgQUNLXzEiLAkJCVwKKwlbRkNfUkNUTF9BQ0tfMF0gPQkJIkxDIEFDS18wIiwJCQlcCisJW0ZDX1JDVExfUF9SSlRdID0JCSJMQyBwb3J0IHJlamVjdCIsCQlcCisJW0ZDX1JDVExfRl9SSlRdID0JCSJMQyBmYWJyaWMgcmVqZWN0IiwJCVwKKwlbRkNfUkNUTF9QX0JTWV0gPQkJIkxDIHBvcnQgYnVzeSIsCQkJXAorCVtGQ19SQ1RMX0ZfQlNZXSA9CQkiTEMgZmFicmljIGJ1c3kgdG8gZGF0YSBmcmFtZSIsCVwKKwlbRkNfUkNUTF9GX0JTWUxdID0JCSJMQyBmYWJyaWMgYnVzeSB0byBsaW5rIGNvbnRyb2wgZnJhbWUiLFwKKwlbRkNfUkNUTF9MQ1JdID0JCQkiTEMgbGluayBjcmVkaXQgcmVzZXQiLAkJXAorCVtGQ19SQ1RMX0VORF0gPQkJCSJMQyBlbmQiLAkJCVwKK30KKworLyoKKyAqIFdlbGwta25vd24gZmFicmljIGFkZHJlc3Nlcy4KKyAqLworZW51bSBmY193ZWxsX2tub3duX2ZpZCB7CisJRkNfRklEX05PTkUgPSAgICAgICAgICAgMHgwMDAwMDAsICAgICAgIC8qIE5vIGRlc3RpbmF0aW9uICovCisJRkNfRklEX0JDQVNUID0JCTB4ZmZmZmZmLAkvKiBicm9hZGNhc3QgKi8KKwlGQ19GSURfRkxPR0kgPQkJMHhmZmZmZmUsCS8qIGZhYnJpYyBsb2dpbiAqLworCUZDX0ZJRF9GQ1RSTCA9CQkweGZmZmZmZCwJLyogZmFicmljIGNvbnRyb2xsZXIgKi8KKwlGQ19GSURfRElSX1NFUlYgPQkweGZmZmZmYywJLyogZGlyZWN0b3J5IHNlcnZlciAqLworCUZDX0ZJRF9USU1FX1NFUlYgPQkweGZmZmZmYiwJLyogdGltZSBzZXJ2ZXIgKi8KKwlGQ19GSURfTUdNVF9TRVJWID0JMHhmZmZmZmEsCS8qIG1hbmFnZW1lbnQgc2VydmVyICovCisJRkNfRklEX1FPUyA9CQkweGZmZmZmOSwJLyogUW9TIEZhY2lsaXRhdG9yICovCisJRkNfRklEX0FMSUFTRVMgPQkweGZmZmZmOCwJLyogYWxpYXMgc2VydmVyIChGQy1QSDIpICovCisJRkNfRklEX1NFQ19LRVkgPQkweGZmZmZmNywJLyogU2VjdXJpdHkga2V5IGRpc3QuIHNlcnZlciAqLworCUZDX0ZJRF9DTE9DSyA9CQkweGZmZmZmNiwJLyogY2xvY2sgc3luY2ggc2VydmVyICovCisJRkNfRklEX01DQVNUX1NFUlYgPQkweGZmZmZmNSwJLyogbXVsdGljYXN0IHNlcnZlciAqLworfTsKKworI2RlZmluZQlGQ19GSURfV0VMTF9LTk9XTl9NQVgJMHhmZmZmZmYgLyogaGlnaGVzdCB3ZWxsLWtub3duIGZhYnJpYyBJRCAqLworI2RlZmluZQlGQ19GSURfV0VMTF9LTk9XTl9CQVNFCTB4ZmZmZmY1IC8qIHN0YXJ0IG9mIHdlbGwta25vd24gZmFicmljIElEICovCisKKy8qCisgKiBPdGhlciB3ZWxsLWtub3duIGFkZHJlc3Nlcywgb3V0c2lkZSB0aGUgYWJvdmUgY29udGlndW91cyByYW5nZS4KKyAqLworI2RlZmluZQlGQ19GSURfRE9NX01HUgkJMHhmZmZjMDAJLyogZG9tYWluIG1hbmFnZXIgYmFzZSAqLworCisvKgorICogRmFicmljIElEIGJ5dGVzLgorICovCisjZGVmaW5lCUZDX0ZJRF9ET01BSU4JCTAKKyNkZWZpbmUJRkNfRklEX1BPUlQJCTEKKyNkZWZpbmUJRkNfRklEX0xJTksJCTIKKworLyoKKyAqIGZoX3R5cGUgY29kZXMKKyAqLworZW51bSBmY19maF90eXBlIHsKKwlGQ19UWVBFX0JMUyA9CTB4MDAsCS8qIGJhc2ljIGxpbmsgc2VydmljZSAqLworCUZDX1RZUEVfRUxTID0JMHgwMSwJLyogZXh0ZW5kZWQgbGluayBzZXJ2aWNlICovCisJRkNfVFlQRV9JUCA9CTB4MDUsCS8qIElQIG92ZXIgRkMsIFJGQyA0MzM4ICovCisJRkNfVFlQRV9GQ1AgPQkweDA4LAkvKiBTQ1NJIEZDUCAqLworCUZDX1RZUEVfQ1QgPQkweDIwLAkvKiBGaWJyZSBDaGFubmVsIFNlcnZpY2VzIChGQy1DVCkgKi8KKwlGQ19UWVBFX0lMUyA9CTB4MjIsCS8qIGludGVybmFsIGxpbmsgc2VydmljZSAqLworfTsKKworLyoKKyAqIEZDX1RZUEUgbmFtZXMgaW5pdGlhbGl6ZXIuCisgKiBQbGVhc2Uga2VlcCB0aGlzIG1hdGNoaW5nIHRoZSBhYm92ZSBkZWZpbml0aW9ucy4KKyAqLworI2RlZmluZSBGQ19UWVBFX05BTUVTX0lOSVQgewkJCQlcCisJW0ZDX1RZUEVfQkxTXSA9CQkiQkxTIiwJCQlcCisJW0ZDX1RZUEVfRUxTXSA9CQkiRUxTIiwJCQlcCisJW0ZDX1RZUEVfSVBdID0JCSJJUCIsCQkJXAorCVtGQ19UWVBFX0ZDUF0gPQkJIkZDUCIsCQkJXAorCVtGQ19UWVBFX0NUXSA9CQkiQ1QiLAkJCVwKKwlbRkNfVFlQRV9JTFNdID0JCSJJTFMiLAkJCVwKK30KKworLyoKKyAqIEV4Y2hhbmdlIElEcy4KKyAqLworI2RlZmluZSBGQ19YSURfVU5LTk9XTiAgMHhmZmZmCS8qIHVua25vd24gZXhjaGFuZ2UgSUQgKi8KKyNkZWZpbmUgRkNfWElEX01JTgkweDAJLyogc3VwcG9ydGVkIG1pbiBleGNoYW5nZSBJRCAqLworI2RlZmluZSBGQ19YSURfTUFYCTB4ZmZmZQkvKiBzdXBwb3J0ZWQgbWF4IGV4Y2hhbmdlIElEICovCisKKy8qCisgKiBmaF9mX2N0bCAtIEZyYW1lIGNvbnRyb2wgZmxhZ3MuCisgKi8KKyNkZWZpbmUJRkNfRkNfRVhfQ1RYCSgxIDw8IDIzKQkvKiBzZW50IGJ5IHJlc3BvbmRlciB0byBleGNoYW5nZSAqLworI2RlZmluZQlGQ19GQ19TRVFfQ1RYCSgxIDw8IDIyKQkvKiBzZW50IGJ5IHJlc3BvbmRlciB0byBzZXF1ZW5jZSAqLworI2RlZmluZQlGQ19GQ19GSVJTVF9TRVEgKDEgPDwgMjEpCS8qIGZpcnN0IHNlcXVlbmNlIG9mIHRoaXMgZXhjaGFuZ2UgKi8KKyNkZWZpbmUJRkNfRkNfTEFTVF9TRVEJKDEgPDwgMjApCS8qIGxhc3Qgc2VxdWVuY2Ugb2YgdGhpcyBleGNoYW5nZSAqLworI2RlZmluZQlGQ19GQ19FTkRfU0VRCSgxIDw8IDE5KQkvKiBsYXN0IGZyYW1lIG9mIHNlcXVlbmNlICovCisjZGVmaW5lCUZDX0ZDX0VORF9DT05OCSgxIDw8IDE4KQkvKiBlbmQgb2YgY2xhc3MgMSBjb25uZWN0aW9uIHBlbmRpbmcgKi8KKyNkZWZpbmUJRkNfRkNfUkVTX0IxNwkoMSA8PCAxNykJLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUJRkNfRkNfU0VRX0lOSVQJKDEgPDwgMTYpCS8qIHRyYW5zZmVyIG9mIHNlcXVlbmNlIGluaXRpYXRpdmUgKi8KKyNkZWZpbmUJRkNfRkNfWF9JRF9SRUFTUyAoMSA8PCAxNSkJLyogZXhjaGFuZ2UgSUQgaGFzIGJlZW4gY2hhbmdlZCAqLworI2RlZmluZQlGQ19GQ19YX0lEX0lOVkFMICgxIDw8IDE0KQkvKiBleGNoYW5nZSBJRCBpbnZhbGlkYXRlZCAqLworCisjZGVmaW5lCUZDX0ZDX0FDS18xCSgxIDw8IDEyKQkvKiAxMzoxMiA9IDE6IEFDS18xIGV4cGVjdGVkICovCisjZGVmaW5lCUZDX0ZDX0FDS19OCSgyIDw8IDEyKQkvKiAxMzoxMiA9IDI6IEFDS19OIGV4cGVjdGVkICovCisjZGVmaW5lCUZDX0ZDX0FDS18wCSgzIDw8IDEyKQkvKiAxMzoxMiA9IDM6IEFDS18wIGV4cGVjdGVkICovCisKKyNkZWZpbmUJRkNfRkNfUkVTX0IxMQkoMSA8PCAxMSkJLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUJRkNfRkNfUkVTX0IxMAkoMSA8PCAxMCkJLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUJRkNfRkNfUkVUWF9TRVEJKDEgPDwgOSkJLyogcmV0cmFuc21pdHRlZCBzZXF1ZW5jZSAqLworI2RlZmluZQlGQ19GQ19VTklfVFgJKDEgPDwgOCkJLyogdW5pZGlyZWN0aW9uYWwgdHJhbnNtaXQgKGNsYXNzIDEpICovCisjZGVmaW5lCUZDX0ZDX0NPTlRfU0VRKGkpICgoaSkgPDwgNikKKyNkZWZpbmUJRkNfRkNfQUJUX1NFUShpKSAoKGkpIDw8IDQpCisjZGVmaW5lCUZDX0ZDX1JFTF9PRkYJKDEgPDwgMykJLyogcGFyYW1ldGVyIGlzIHJlbGF0aXZlIG9mZnNldCAqLworI2RlZmluZQlGQ19GQ19SRVMyCSgxIDw8IDIpCS8qIHJlc2VydmVkICovCisjZGVmaW5lCUZDX0ZDX0ZJTEwoaSkJKChpKSAmIDMpCS8qIDE6MDogYnl0ZXMgb2YgdHJhaWxpbmcgZmlsbCAqLworCisvKgorICogQkFfQUNDIHBheWxvYWQuCisgKi8KK3N0cnVjdCBmY19iYV9hY2MgeworCV9fdTgJCWJhX3NlcV9pZF92YWw7CS8qIFNFUV9JRCB2YWxpZGl0eSAqLworI2RlZmluZSBGQ19CQV9TRVFfSURfVkFMIDB4ODAKKwlfX3U4CQliYV9zZXFfaWQ7CS8qIFNFUV9JRCBvZiBzZXEgbGFzdCBkZWxpdmVyYWJsZSAqLworCV9fdTgJCWJhX3Jlc3ZkWzJdOwkvKiByZXNlcnZlZCAqLworCV9fYmUxNgkJYmFfb3hfaWQ7CS8qIE9YX0lEIGZvciBhYm9ydGVkIHNlcSBvciBleGNoICovCisJX19iZTE2CQliYV9yeF9pZDsJLyogUlhfSUQgZm9yIGFib3J0ZWQgc2VxIG9yIGV4Y2ggKi8KKwlfX2JlMTYJCWJhX2xvd19zZXFfY250OwkvKiBsb3cgU0VRX0NOVCBvZiBhYm9ydGVkIHNlcSAqLworCV9fYmUxNgkJYmFfaGlnaF9zZXFfY250OyAvKiBoaWdoIFNFUV9DTlQgb2YgYWJvcnRlZCBzZXEgKi8KK307CisKKy8qCisgKiBCQV9SSlQ6IEJhc2ljIFJlamVjdCBwYXlsb2FkLgorICovCitzdHJ1Y3QgZmNfYmFfcmp0IHsKKwlfX3U4CQlicl9yZXN2ZDsJLyogcmVzZXJ2ZWQgKi8KKwlfX3U4CQlicl9yZWFzb247CS8qIHJlYXNvbiBjb2RlICovCisJX191OAkJYnJfZXhwbGFuOwkvKiByZWFzb24gZXhwbGFuYXRpb24gKi8KKwlfX3U4CQlicl92ZW5kb3I7CS8qIHZlbmRvciB1bmlxdWUgY29kZSAqLworfTsKKworLyoKKyAqIEJBX1JKVCByZWFzb24gY29kZXMuCisgKiBGcm9tIEZTLTIuCisgKi8KK2VudW0gZmNfYmFfcmp0X3JlYXNvbiB7CisJRkNfQkFfUkpUX05PTkUgPQkwLAkvKiBpbiBzb2Z0d2FyZSB0aGlzIG1lYW5zIG5vIHJlamVjdCAqLworCUZDX0JBX1JKVF9JTlZMX0NNRCA9CTB4MDEsCS8qIGludmFsaWQgY29tbWFuZCBjb2RlICovCisJRkNfQkFfUkpUX0xPR19FUlIgPQkweDAzLAkvKiBsb2dpY2FsIGVycm9yICovCisJRkNfQkFfUkpUX0xPR19CVVNZID0JMHgwNSwJLyogbG9naWNhbCBidXN5ICovCisJRkNfQkFfUkpUX1BST1RPX0VSUiA9CTB4MDcsCS8qIHByb3RvY29sIGVycm9yICovCisJRkNfQkFfUkpUX1VOQUJMRSA9CTB4MDksCS8qIHVuYWJsZSB0byBwZXJmb3JtIHJlcXVlc3QgKi8KKwlGQ19CQV9SSlRfVkVORE9SID0JMHhmZiwJLyogdmVuZG9yLXNwZWNpZmljIChzZWUgYnJfdmVuZG9yKSAqLworfTsKKworLyoKKyAqIEJBX1JKVCByZWFzb24gY29kZSBleHBsYW5hdGlvbnMuCisgKi8KK2VudW0gZmNfYmFfcmp0X2V4cGxhbiB7CisJRkNfQkFfUkpUX0VYUF9OT05FID0JMHgwMCwJLyogbm8gYWRkaXRpb25hbCBleHBhbmF0aW9uICovCisJRkNfQkFfUkpUX0lOVl9YSUQgPQkweDAzLAkvKiBpbnZhbGlkIE9YX0lELVJYX0lEIGNvbWJpbmF0aW9uICovCisJRkNfQkFfUkpUX0FCVCA9CQkweDA1LAkvKiBzZXF1ZW5jZSBhYm9ydGVkLCBubyBzZXEgaW5mbyAqLworfTsKKworLyoKKyAqIFBfUkpUIG9yIEZfUkpUOiBQb3J0IFJlamVjdCBvciBGYWJyaWMgUmVqZWN0IHBhcmFtZXRlciBmaWVsZC4KKyAqLworc3RydWN0IGZjX3BmX3JqdCB7CisJX191OAkJcmpfYWN0aW9uOwkvKiByZXNlcnZlZCAqLworCV9fdTgJCXJqX3JlYXNvbjsJLyogcmVhc29uIGNvZGUgKi8KKwlfX3U4CQlyal9yZXN2ZDsJLyogcmVzZXJ2ZWQgKi8KKwlfX3U4CQlyal92ZW5kb3I7CS8qIHZlbmRvciB1bmlxdWUgY29kZSAqLworfTsKKworLyoKKyAqIFBfUkpUIGFuZCBGX1JKVCByZWplY3QgcmVhc29uIGNvZGVzLgorICovCitlbnVtIGZjX3BmX3JqdF9yZWFzb24geworCUZDX1JKVF9OT05FID0JCTAsCS8qIG5vbi1yZWplY3QgKHJlc2VydmVkIGJ5IHN0YW5kYXJkKSAqLworCUZDX1JKVF9JTlZMX0RJRCA9CTB4MDEsCS8qIGludmFsaWQgZGVzdGluYXRpb24gSUQgKi8KKwlGQ19SSlRfSU5WTF9TSUQgPQkweDAyLAkvKiBpbnZhbGlkIHNvdXJjZSBJRCAqLworCUZDX1JKVF9QX1VOQVZfVCA9CTB4MDMsCS8qIHBvcnQgdW5hdmFpbGFibGUsIHRlbXBvcmFyeSAqLworCUZDX1JKVF9QX1VOQVYgPQkJMHgwNCwJLyogcG9ydCB1bmF2YWlsYWJsZSwgcGVybWFuZW50ICovCisJRkNfUkpUX0NMU19VTlNVUCA9CTB4MDUsCS8qIGNsYXNzIG5vdCBzdXBwb3J0ZWQgKi8KKwlGQ19SSlRfREVMX1VTQUdFID0JMHgwNiwJLyogZGVsaW1pdGVyIHVzYWdlIGVycm9yICovCisJRkNfUkpUX1RZUEVfVU5TVVAgPQkweDA3LAkvKiB0eXBlIG5vdCBzdXBwb3J0ZWQgKi8KKwlGQ19SSlRfTElOS19DVEwgPQkweDA4LAkvKiBpbnZhbGlkIGxpbmsgY29udHJvbCAqLworCUZDX1JKVF9SX0NUTCA9CQkweDA5LAkvKiBpbnZhbGlkIFJfQ1RMIGZpZWxkICovCisJRkNfUkpUX0ZfQ1RMID0JCTB4MGEsCS8qIGludmFsaWQgRl9DVEwgZmllbGQgKi8KKwlGQ19SSlRfT1hfSUQgPQkJMHgwYiwJLyogaW52YWxpZCBvcmlnaW5hdG9yIGV4Y2hhbmdlIElEICovCisJRkNfUkpUX1JYX0lEID0JCTB4MGMsCS8qIGludmFsaWQgcmVzcG9uZGVyIGV4Y2hhbmdlIElEICovCisJRkNfUkpUX1NFUV9JRCA9CQkweDBkLAkvKiBpbnZhbGlkIHNlcXVlbmNlIElEICovCisJRkNfUkpUX0RGX0NUTCA9CQkweDBlLAkvKiBpbnZhbGlkIERGX0NUTCBmaWVsZCAqLworCUZDX1JKVF9TRVFfQ05UID0JMHgwZiwJLyogaW52YWxpZCBTRVFfQ05UIGZpZWxkICovCisJRkNfUkpUX1BBUkFNID0JCTB4MTAsCS8qIGludmFsaWQgcGFyYW1ldGVyIGZpZWxkICovCisJRkNfUkpUX0VYQ0hfRVJSID0JMHgxMSwJLyogZXhjaGFuZ2UgZXJyb3IgKi8KKwlGQ19SSlRfUFJPVE8gPQkJMHgxMiwJLyogcHJvdG9jb2wgZXJyb3IgKi8KKwlGQ19SSlRfTEVOID0JCTB4MTMsCS8qIGluY29ycmVjdCBsZW5ndGggKi8KKwlGQ19SSlRfVU5FWFBfQUNLID0JMHgxNCwJLyogdW5leHBlY3RlZCBBQ0sgKi8KKwlGQ19SSlRfRkFCX0NMQVNTID0JMHgxNSwJLyogY2xhc3MgdW5zdXBwb3J0ZWQgYnkgZmFicmljIGVudGl0eSAqLworCUZDX1JKVF9MT0dJX1JFUSA9CTB4MTYsCS8qIGxvZ2luIHJlcXVpcmVkICovCisJRkNfUkpUX1NFUV9YUyA9CQkweDE3LAkvKiBleGNlc3NpdmUgc2VxdWVuY2VzIGF0dGVtcHRlZCAqLworCUZDX1JKVF9FWENIX0VTVCA9CTB4MTgsCS8qIHVuYWJsZSB0byBlc3RhYmxpc2ggZXhjaGFuZ2UgKi8KKwlGQ19SSlRfRkFCX1VOQVYgPQkweDFhLAkvKiBmYWJyaWMgdW5hdmFpbGFibGUgKi8KKwlGQ19SSlRfVkNfSUQgPQkJMHgxYiwJLyogaW52YWxpZCBWQ19JRCAoY2xhc3MgNCkgKi8KKwlGQ19SSlRfQ1NfQ1RMID0JCTB4MWMsCS8qIGludmFsaWQgQ1NfQ1RMIGZpZWxkICovCisJRkNfUkpUX0lOU1VGX1JFUyA9CTB4MWQsCS8qIGluc3VmZi4gcmVzb3VyY2VzIGZvciBWQyAoQ2xhc3MgNCkgKi8KKwlGQ19SSlRfSU5WTF9DTFMgPQkweDFmLAkvKiBpbnZhbGlkIGNsYXNzIG9mIHNlcnZpY2UgKi8KKwlGQ19SSlRfUFJFRU1UX1JKVCA9CTB4MjAsCS8qIHByZWVtcHRpb24gcmVxdWVzdCByZWplY3RlZCAqLworCUZDX1JKVF9QUkVFTVRfRElTID0JMHgyMSwJLyogcHJlZW1wdGlvbiBub3QgZW5hYmxlZCAqLworCUZDX1JKVF9NQ0FTVF9FUlIgPQkweDIyLAkvKiBtdWx0aWNhc3QgZXJyb3IgKi8KKwlGQ19SSlRfTUNBU1RfRVQgPQkweDIzLAkvKiBtdWx0aWNhc3QgZXJyb3IgdGVybWluYXRlICovCisJRkNfUkpUX1BSTElfUkVRID0JMHgyNCwJLyogcHJvY2VzcyBsb2dpbiByZXF1aXJlZCAqLworCUZDX1JKVF9JTlZMX0FUVCA9CTB4MjUsCS8qIGludmFsaWQgYXR0YWNobWVudCAqLworCUZDX1JKVF9WRU5ET1IgPQkJMHhmZiwJLyogdmVuZG9yIHNwZWNpZmljIHJlamVjdCAqLworfTsKKworLyogZGVmYXVsdCB0aW1lb3V0IHZhbHVlcyAqLworCisjZGVmaW5lIEZDX0RFRl9FX0RfVE9WCTIwMDBVTAorI2RlZmluZSBGQ19ERUZfUl9BX1RPVgkxMDAwMFVMCisKKyNlbmRpZiAvKiBfRkNfRlNfSF8gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zY3NpL2ZjL2ZjX2dzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc2NzaS9mYy9mY19ncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNzM0NmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc2NzaS9mYy9mY19ncy5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQoYykgMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqIE1haW50YWluZWQgYXQgd3d3Lk9wZW4tRkNvRS5vcmcKKyAqLworCisjaWZuZGVmIF9GQ19HU19IXworI2RlZmluZQlfRkNfR1NfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBGaWJyZSBDaGFubmVsIFNlcnZpY2VzIC0gQ29tbW9uIFRyYW5zcG9ydC4KKyAqIEZyb20gVDExLm9yZyBGQy1HUy0yIFJldiA1LjMgTm92ZW1iZXIgMTk5OC4KKyAqLworCitzdHJ1Y3QgZmNfY3RfaGRyIHsKKwlfX3U4CQljdF9yZXY7CQkvKiByZXZpc2lvbiAqLworCV9fdTgJCWN0X2luX2lkWzNdOwkvKiBOX1BvcnQgSUQgb2Ygb3JpZ2luYWwgcmVxdWVzdG9yICovCisJX191OAkJY3RfZnNfdHlwZTsJLyogdHlwZSBvZiBmaWJyZSBjaGFubmVsIHNlcnZpY2UgKi8KKwlfX3U4CQljdF9mc19zdWJ0eXBlOwkvKiBzdWJ0eXBlICovCisJX191OAkJY3Rfb3B0aW9uczsKKwlfX3U4CQlfY3RfcmVzdmQxOworCV9fYmUxNgkJY3RfY21kOwkJLyogY29tbWFuZCAvIHJlc3BvbnNlIGNvZGUgKi8KKwlfX2JlMTYJCWN0X21yX3NpemU7CS8qIG1heGltdW0gLyByZXNpZHVhbCBzaXplICovCisJX191OAkJX2N0X3Jlc3ZkMjsKKwlfX3U4CQljdF9yZWFzb247CS8qIHJlamVjdCByZWFzb24gKi8KKwlfX3U4CQljdF9leHBsYW47CS8qIHJlYXNvbiBjb2RlIGV4cGxhbmF0aW9uICovCisJX191OAkJY3RfdmVuZG9yOwkvKiB2ZW5kb3IgdW5pcXVlIGRhdGEgKi8KK307CisKKyNkZWZpbmUJRkNfQ1RfSERSX0xFTgkxNgkvKiBleHBlY3RlZCBzaXplb2YgKHN0cnVjdCBmY19jdF9oZHIpICovCisKK2VudW0gZmNfY3RfcmV2IHsKKwlGQ19DVF9SRVYgPSAxCQkvKiBjb21tb24gdHJhbnNwb3J0IHJldmlzaW9uICovCit9OworCisvKgorICogY3RfZnNfdHlwZSB2YWx1ZXMuCisgKi8KK2VudW0gZmNfY3RfZnNfdHlwZSB7CisJRkNfRlNUX0FMSUFTID0JMHhmOCwJLyogYWxpYXMgc2VydmljZSAqLworCUZDX0ZTVF9NR01UID0JMHhmYSwJLyogbWFuYWdlbWVudCBzZXJ2aWNlICovCisJRkNfRlNUX1RJTUUgPQkweGZiLAkvKiB0aW1lIHNlcnZpY2UgKi8KKwlGQ19GU1RfRElSID0JMHhmYywJLyogZGlyZWN0b3J5IHNlcnZpY2UgKi8KK307CisKKy8qCisgKiBjdF9jbWQ6IENvbW1hbmQgLyByZXNwb25zZSBjb2RlcworICovCitlbnVtIGZjX2N0X2NtZCB7CisJRkNfRlNfUkpUID0JMHg4MDAxLAkvKiByZWplY3QgKi8KKwlGQ19GU19BQ0MgPQkweDgwMDIsCS8qIGFjY2VwdCAqLworfTsKKworLyoKKyAqIEZTX1JKVCByZWFzb24gY29kZXMuCisgKi8KK2VudW0gZmNfY3RfcmVhc29uIHsKKwlGQ19GU19SSlRfQ01EID0JCTB4MDEsCS8qIGludmFsaWQgY29tbWFuZCBjb2RlICovCisJRkNfRlNfUkpUX1ZFUiA9CQkweDAyLAkvKiBpbnZhbGlkIHZlcnNpb24gbGV2ZWwgKi8KKwlGQ19GU19SSlRfTE9HID0JCTB4MDMsCS8qIGxvZ2ljYWwgZXJyb3IgKi8KKwlGQ19GU19SSlRfSVVTSVogPQkweDA0LAkvKiBpbnZhbGlkIElVIHNpemUgKi8KKwlGQ19GU19SSlRfQlNZID0JCTB4MDUsCS8qIGxvZ2ljYWwgYnVzeSAqLworCUZDX0ZTX1JKVF9QUk9UTyA9CTB4MDcsCS8qIHByb3RvY29sIGVycm9yICovCisJRkNfRlNfUkpUX1VOQUJMID0JMHgwOSwJLyogdW5hYmxlIHRvIHBlcmZvcm0gY29tbWFuZCByZXF1ZXN0ICovCisJRkNfRlNfUkpUX1VOU1VQID0JMHgwYiwJLyogY29tbWFuZCBub3Qgc3VwcG9ydGVkICovCit9OworCisvKgorICogRlNfUkpUIHJlYXNvbiBjb2RlIGV4cGxhbmF0aW9ucy4KKyAqLworZW51bSBmY19jdF9leHBsYW4geworCUZDX0ZTX0VYUF9OT05FID0JMHgwMCwJLyogbm8gYWRkaXRpb25hbCBleHBsYW5hdGlvbiAqLworCUZDX0ZTX0VYUF9QSUQgPQkJMHgwMSwJLyogcG9ydCBJRCBub3QgcmVnaXN0ZXJlZCAqLworCUZDX0ZTX0VYUF9QTkFNID0JMHgwMiwJLyogcG9ydCBuYW1lIG5vdCByZWdpc3RlcmVkICovCisJRkNfRlNfRVhQX05OQU0gPQkweDAzLAkvKiBub2RlIG5hbWUgbm90IHJlZ2lzdGVyZWQgKi8KKwlGQ19GU19FWFBfQ09TID0JCTB4MDQsCS8qIGNsYXNzIG9mIHNlcnZpY2Ugbm90IHJlZ2lzdGVyZWQgKi8KKwlGQ19GU19FWFBfRlROUiA9CTB4MDcsCS8qIEZDLTQgdHlwZXMgbm90IHJlZ2lzdGVyZWQgKi8KKwkvKiBkZWZpbml0aW9ucyBub3QgY29tcGxldGUgKi8KK307CisKKyNlbmRpZiAvKiBfRkNfR1NfSF8gKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zY3NpL2ZjL2ZjX25zLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc2NzaS9mYy9mY19ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NTAxNWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc2NzaS9mYy9mY19ucy5oCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKiBNYWludGFpbmVkIGF0IHd3dy5PcGVuLUZDb0Uub3JnCisgKi8KKworI2lmbmRlZiBfRkNfTlNfSF8KKyNkZWZpbmUJX0ZDX05TX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICogRmlicmUgQ2hhbm5lbCBTZXJ2aWNlcyAtIE5hbWUgU2VydmljZSAoZE5TKQorICogRnJvbSBUMTEub3JnIEZDLUdTLTIgUmV2IDUuMyBOb3ZlbWJlciAxOTk4LgorICovCisKKy8qCisgKiBDb21tb24tdHJhbnNwb3J0IHN1Yi10eXBlIGZvciBOYW1lIFNlcnZlci4KKyAqLworI2RlZmluZQlGQ19OU19TVUJUWVBFCSAgICAyCS8qIGZzX2N0X2hkci5jdF9mc19zdWJ0eXBlICovCisKKy8qCisgKiBOYW1lIHNlcnZlciBSZXF1ZXN0cy4KKyAqIE5vdGU6ICB0aGlzIGlzIGFuIGluY29tcGxldGUgbGlzdCwgc29tZSB1bnVzZWQgcmVxdWVzdHMgYXJlIG9taXR0ZWQuCisgKi8KK2VudW0gZmNfbnNfcmVxIHsKKwlGQ19OU19HQV9OWFQgPQkweDAxMDAsCQkvKiBnZXQgYWxsIG5leHQgKi8KKwlGQ19OU19HSV9BID0JMHgwMTAxLAkJLyogZ2V0IGlkZW50aWZpZXJzIC0gc2NvcGUgKi8KKwlGQ19OU19HUE5fSUQgPQkweDAxMTIsCQkvKiBnZXQgcG9ydCBuYW1lIGJ5IElEICovCisJRkNfTlNfR05OX0lEID0JMHgwMTEzLAkJLyogZ2V0IG5vZGUgbmFtZSBieSBJRCAqLworCUZDX05TX0dJRF9QTiA9CTB4MDEyMSwJCS8qIGdldCBJRCBmb3IgcG9ydCBuYW1lICovCisJRkNfTlNfR0lEX05OID0JMHgwMTMxLAkJLyogZ2V0IElEcyBmb3Igbm9kZSBuYW1lICovCisJRkNfTlNfR0lEX0ZUID0JMHgwMTcxLAkJLyogZ2V0IElEcyBieSBGQzQgdHlwZSAqLworCUZDX05TX0dQTl9GVCA9CTB4MDE3MiwJCS8qIGdldCBwb3J0IG5hbWVzIGJ5IEZDNCB0eXBlICovCisJRkNfTlNfR0lEX1BUID0JMHgwMWExLAkJLyogZ2V0IElEcyBieSBwb3J0IHR5cGUgKi8KKwlGQ19OU19SUE5fSUQgPQkweDAyMTIsCQkvKiByZWcgcG9ydCBuYW1lIGZvciBJRCAqLworCUZDX05TX1JOTl9JRCA9CTB4MDIxMywJCS8qIHJlZyBub2RlIG5hbWUgZm9yIElEICovCisJRkNfTlNfUkZUX0lEID0JMHgwMjE3LAkJLyogcmVnIEZDNCB0eXBlIGZvciBJRCAqLworCUZDX05TX1JTUE5fSUQgPQkweDAyMTgsCQkvKiByZWcgc3ltYm9saWMgcG9ydCBuYW1lICovCisJRkNfTlNfUkZGX0lEID0JMHgwMjFmLAkJLyogcmVnIEZDNCBGZWF0dXJlcyBmb3IgSUQgKi8KKwlGQ19OU19SU05OX05OID0JMHgwMjM5LAkJLyogcmVnIHN5bWJvbGljIG5vZGUgbmFtZSAqLworfTsKKworLyoKKyAqIFBvcnQgdHlwZSB2YWx1ZXMuCisgKi8KK2VudW0gZmNfbnNfcHQgeworCUZDX05TX1VOSURfUE9SVCA9IDB4MDAsCS8qIHVuaWRlbnRpZmllZCAqLworCUZDX05TX05fUE9SVCA9CTB4MDEsCS8qIE4gcG9ydCAqLworCUZDX05TX05MX1BPUlQgPQkweDAyLAkvKiBOTCBwb3J0ICovCisJRkNfTlNfRk5MX1BPUlQgPSAweDAzLAkvKiBGL05MIHBvcnQgKi8KKwlGQ19OU19OWF9QT1JUID0JMHg3ZiwJLyogTnggcG9ydCAqLworCUZDX05TX0ZfUE9SVCA9CTB4ODEsCS8qIEYgcG9ydCAqLworCUZDX05TX0ZMX1BPUlQgPQkweDgyLAkvKiBGTCBwb3J0ICovCisJRkNfTlNfRV9QT1JUID0JMHg4NCwJLyogRSBwb3J0ICovCisJRkNfTlNfQl9QT1JUID0JMHg4NSwJLyogQiBwb3J0ICovCit9OworCisvKgorICogUG9ydCB0eXBlIG9iamVjdC4KKyAqLworc3RydWN0IGZjX25zX3B0X29iaiB7CisJX191OAkJcHRfdHlwZTsKK307CisKKy8qCisgKiBQb3J0IElEIG9iamVjdAorICovCitzdHJ1Y3QgZmNfbnNfZmlkIHsKKwlfX3U4CQlmcF9mbGFnczsJLyogZmxhZ3MgZm9yIHJlc3BvbnNlcyBvbmx5ICovCisJX191OAkJZnBfZmlkWzNdOworfTsKKworLyoKKyAqIGZwX2ZsYWdzIGluIHBvcnQgSUQgb2JqZWN0LCBmb3IgcmVzcG9uc2VzIG9ubHkuCisgKi8KKyNkZWZpbmUJRkNfTlNfRklEX0xBU1QJMHg4MAkJLyogbGFzdCBvYmplY3QgKi8KKworLyoKKyAqIEZDNC10eXBlcyBvYmplY3QuCisgKi8KKyNkZWZpbmUJRkNfTlNfVFlQRVMJMjU2CS8qIG51bWJlciBvZiBwb3NzaWJsZSBGQy00IHR5cGVzICovCisjZGVmaW5lCUZDX05TX0JQVwkzMgkvKiBiaXRzIHBlciB3b3JkIGluIGJpdG1hcCAqLworCitzdHJ1Y3QgZmNfbnNfZnRzIHsKKwlfX2JlMzIJZmZfdHlwZV9tYXBbRkNfTlNfVFlQRVMgLyBGQ19OU19CUFddOyAvKiBiaXRtYXAgb2YgRkMtNCB0eXBlcyAqLworfTsKKworLyoKKyAqIEZDNC1mZWF0dXJlcyBvYmplY3QuCisgKi8KK3N0cnVjdCBmY19uc19mZgl7CisJX19iZTMyCWZkX2ZlYXRbRkNfTlNfVFlQRVMgKiA0IC8gRkNfTlNfQlBXXTsgLyogNC1iaXRzIHBlciBGQy10eXBlICovCit9OworCisvKgorICogR0lEX1BUIHJlcXVlc3QuCisgKi8KK3N0cnVjdCBmY19uc19naWRfcHQgeworCV9fdTgJCWZuX3B0X3R5cGU7CisJX191OAkJZm5fZG9tYWluX2lkX3Njb3BlOworCV9fdTgJCWZuX2FyZWFfaWRfc2NvcGU7CisJX191OAkJZm5fcmVzdmQ7Cit9OworCisvKgorICogR0lEX0ZUIG9yIEdQTl9GVCByZXF1ZXN0LgorICovCitzdHJ1Y3QgZmNfbnNfZ2lkX2Z0IHsKKwlfX3U4CQlmbl9yZXN2ZDsKKwlfX3U4CQlmbl9kb21haW5faWRfc2NvcGU7CisJX191OAkJZm5fYXJlYV9pZF9zY29wZTsKKwlfX3U4CQlmbl9mYzRfdHlwZTsKK307CisKKy8qCisgKiBHUE5fRlQgcmVzcG9uc2UuCisgKi8KK3N0cnVjdCBmY19ncG5fZnRfcmVzcCB7CisJX191OAkJZnBfZmxhZ3M7CS8qIHNlZSBmcF9mbGFncyBkZWZpbml0aW9ucyBhYm92ZSAqLworCV9fdTgJCWZwX2ZpZFszXTsJLyogcG9ydCBJRCAqLworCV9fYmUzMgkJZnBfcmVzdmQ7CisJX19iZTY0CQlmcF93d3BuOwkvKiBwb3J0IG5hbWUgKi8KK307CisKKy8qCisgKiBHSURfUE4gcmVxdWVzdAorICovCitzdHJ1Y3QgZmNfbnNfZ2lkX3BuIHsKKwlfX2JlNjQgICAgIGZuX3d3cG47ICAgIC8qIHBvcnQgbmFtZSAqLworfTsKKworLyoKKyAqIEdJRF9QTiByZXNwb25zZQorICovCitzdHJ1Y3QgZmNfZ2lkX3BuX3Jlc3AgeworCV9fdTggICAgICBmcF9yZXN2ZDsKKwlfX3U4ICAgICAgZnBfZmlkWzNdOyAgICAgLyogcG9ydCBJRCAqLworfTsKKworLyoKKyAqIFJGVF9JRCByZXF1ZXN0IC0gcmVnaXN0ZXIgRkMtNCB0eXBlcyBmb3IgSUQuCisgKi8KK3N0cnVjdCBmY19uc19yZnRfaWQgeworCXN0cnVjdCBmY19uc19maWQgZnJfZmlkOwkvKiBwb3J0IElEIG9iamVjdCAqLworCXN0cnVjdCBmY19uc19mdHMgZnJfZnRzOwkvKiBGQy00IHR5cGVzIG9iamVjdCAqLworfTsKKworLyoKKyAqIFJQTl9JRCByZXF1ZXN0IC0gcmVnaXN0ZXIgcG9ydCBuYW1lIGZvciBJRC4KKyAqIFJOTl9JRCByZXF1ZXN0IC0gcmVnaXN0ZXIgbm9kZSBuYW1lIGZvciBJRC4KKyAqLworc3RydWN0IGZjX25zX3JuX2lkIHsKKwlzdHJ1Y3QgZmNfbnNfZmlkIGZyX2ZpZDsJLyogcG9ydCBJRCBvYmplY3QgKi8KKwlfX2JlNjQJCWZyX3d3bjsJCS8qIG5vZGUgbmFtZSBvciBwb3J0IG5hbWUgKi8KK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCisvKgorICogUlNOTl9OTiByZXF1ZXN0IC0gcmVnaXN0ZXIgc3ltYm9saWMgbm9kZSBuYW1lCisgKi8KK3N0cnVjdCBmY19uc19yc25uIHsKKwlfX2JlNjQJCWZyX3d3bjsJCS8qIG5vZGUgbmFtZSAqLworCV9fdTgJCWZyX25hbWVfbGVuOworCWNoYXIJCWZyX25hbWVbXTsKK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCisvKgorICogUlNQTl9JRCByZXF1ZXN0IC0gcmVnaXN0ZXIgc3ltYm9saWMgcG9ydCBuYW1lCisgKi8KK3N0cnVjdCBmY19uc19yc3BuIHsKKwlzdHJ1Y3QgZmNfbnNfZmlkIGZyX2ZpZDsJLyogcG9ydCBJRCBvYmplY3QgKi8KKwlfX3U4CQlmcl9uYW1lX2xlbjsKKwljaGFyCQlmcl9uYW1lW107Cit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworLyoKKyAqIFJGRl9JRCByZXF1ZXN0IC0gcmVnaXN0ZXIgRkMtNCBGZWF0dXJlcyBmb3IgSUQuCisgKi8KK3N0cnVjdCBmY19uc19yZmZfaWQgeworCXN0cnVjdCBmY19uc19maWQgZnJfZmlkOwkvKiBwb3J0IElEIG9iamVjdCAqLworCV9fdTgJCWZyX3Jlc3ZkWzJdOworCV9fdTgJCWZyX2ZlYXQ7CS8qIEZDLTQgRmVhdHVyZSBiaXRzICovCisJX191OAkJZnJfdHlwZTsJLyogRkMtNCB0eXBlICovCit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworI2VuZGlmIC8qIF9GQ19OU19IXyAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3Njc2kvc2NzaS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3Njc2kvc2NzaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YWI3NTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc2NzaS9zY3NpLmgKQEAgLTAsMCArMSwyMjYgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyoKKyAqIFRoaXMgaGVhZGVyIGZpbGUgY29udGFpbnMgcHVibGljIGNvbnN0YW50cyBhbmQgc3RydWN0dXJlcyB1c2VkIGJ5CisgKiB0aGUgc2NzaSBjb2RlIGZvciBsaW51eC4KKyAqLworCisjaWZuZGVmIF9TQ1NJX1NDU0lfSAorI2RlZmluZSBfU0NTSV9TQ1NJX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworLyoKKyAqICAgICAgU0NTSSBvcGNvZGVzCisgKi8KKworI2RlZmluZSBURVNUX1VOSVRfUkVBRFkgICAgICAgMHgwMAorI2RlZmluZSBSRVpFUk9fVU5JVCAgICAgICAgICAgMHgwMQorI2RlZmluZSBSRVFVRVNUX1NFTlNFICAgICAgICAgMHgwMworI2RlZmluZSBGT1JNQVRfVU5JVCAgICAgICAgICAgMHgwNAorI2RlZmluZSBSRUFEX0JMT0NLX0xJTUlUUyAgICAgMHgwNQorI2RlZmluZSBSRUFTU0lHTl9CTE9DS1MgICAgICAgMHgwNworI2RlZmluZSBSRUFEXzYgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBXUklURV82ICAgICAgICAgICAgICAgMHgwYQorI2RlZmluZSBTRUVLXzYgICAgICAgICAgICAgICAgMHgwYgorI2RlZmluZSBSRUFEX1JFVkVSU0UgICAgICAgICAgMHgwZgorI2RlZmluZSBXUklURV9GSUxFTUFSS1MgICAgICAgMHgxMAorI2RlZmluZSBTUEFDRSAgICAgICAgICAgICAgICAgMHgxMQorI2RlZmluZSBJTlFVSVJZICAgICAgICAgICAgICAgMHgxMgorI2RlZmluZSBSRUNPVkVSX0JVRkZFUkVEX0RBVEEgMHgxNAorI2RlZmluZSBNT0RFX1NFTEVDVCAgICAgICAgICAgMHgxNQorI2RlZmluZSBSRVNFUlZFICAgICAgICAgICAgICAgMHgxNgorI2RlZmluZSBSRUxFQVNFICAgICAgICAgICAgICAgMHgxNworI2RlZmluZSBDT1BZICAgICAgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBFUkFTRSAgICAgICAgICAgICAgICAgMHgxOQorI2RlZmluZSBNT0RFX1NFTlNFICAgICAgICAgICAgMHgxYQorI2RlZmluZSBTVEFSVF9TVE9QICAgICAgICAgICAgMHgxYgorI2RlZmluZSBSRUNFSVZFX0RJQUdOT1NUSUMgICAgMHgxYworI2RlZmluZSBTRU5EX0RJQUdOT1NUSUMgICAgICAgMHgxZAorI2RlZmluZSBBTExPV19NRURJVU1fUkVNT1ZBTCAgMHgxZQorCisjZGVmaW5lIFNFVF9XSU5ET1cgICAgICAgICAgICAweDI0CisjZGVmaW5lIFJFQURfQ0FQQUNJVFkgICAgICAgICAweDI1CisjZGVmaW5lIFJFQURfMTAgICAgICAgICAgICAgICAweDI4CisjZGVmaW5lIFdSSVRFXzEwICAgICAgICAgICAgICAweDJhCisjZGVmaW5lIFNFRUtfMTAgICAgICAgICAgICAgICAweDJiCisjZGVmaW5lIFdSSVRFX1ZFUklGWSAgICAgICAgICAweDJlCisjZGVmaW5lIFZFUklGWSAgICAgICAgICAgICAgICAweDJmCisjZGVmaW5lIFNFQVJDSF9ISUdIICAgICAgICAgICAweDMwCisjZGVmaW5lIFNFQVJDSF9FUVVBTCAgICAgICAgICAweDMxCisjZGVmaW5lIFNFQVJDSF9MT1cgICAgICAgICAgICAweDMyCisjZGVmaW5lIFNFVF9MSU1JVFMgICAgICAgICAgICAweDMzCisjZGVmaW5lIFBSRV9GRVRDSCAgICAgICAgICAgICAweDM0CisjZGVmaW5lIFJFQURfUE9TSVRJT04gICAgICAgICAweDM0CisjZGVmaW5lIFNZTkNIUk9OSVpFX0NBQ0hFICAgICAweDM1CisjZGVmaW5lIExPQ0tfVU5MT0NLX0NBQ0hFICAgICAweDM2CisjZGVmaW5lIFJFQURfREVGRUNUX0RBVEEgICAgICAweDM3CisjZGVmaW5lIE1FRElVTV9TQ0FOICAgICAgICAgICAweDM4CisjZGVmaW5lIENPTVBBUkUgICAgICAgICAgICAgICAweDM5CisjZGVmaW5lIENPUFlfVkVSSUZZICAgICAgICAgICAweDNhCisjZGVmaW5lIFdSSVRFX0JVRkZFUiAgICAgICAgICAweDNiCisjZGVmaW5lIFJFQURfQlVGRkVSICAgICAgICAgICAweDNjCisjZGVmaW5lIFVQREFURV9CTE9DSyAgICAgICAgICAweDNkCisjZGVmaW5lIFJFQURfTE9ORyAgICAgICAgICAgICAweDNlCisjZGVmaW5lIFdSSVRFX0xPTkcgICAgICAgICAgICAweDNmCisjZGVmaW5lIENIQU5HRV9ERUZJTklUSU9OICAgICAweDQwCisjZGVmaW5lIFdSSVRFX1NBTUUgICAgICAgICAgICAweDQxCisjZGVmaW5lIFJFQURfVE9DICAgICAgICAgICAgICAweDQzCisjZGVmaW5lIExPR19TRUxFQ1QgICAgICAgICAgICAweDRjCisjZGVmaW5lIExPR19TRU5TRSAgICAgICAgICAgICAweDRkCisjZGVmaW5lIE1PREVfU0VMRUNUXzEwICAgICAgICAweDU1CisjZGVmaW5lIFJFU0VSVkVfMTAgICAgICAgICAgICAweDU2CisjZGVmaW5lIFJFTEVBU0VfMTAgICAgICAgICAgICAweDU3CisjZGVmaW5lIE1PREVfU0VOU0VfMTAgICAgICAgICAweDVhCisjZGVmaW5lIFBFUlNJU1RFTlRfUkVTRVJWRV9JTiAweDVlCisjZGVmaW5lIFBFUlNJU1RFTlRfUkVTRVJWRV9PVVQgMHg1ZgorI2RlZmluZSBNT1ZFX01FRElVTSAgICAgICAgICAgMHhhNQorI2RlZmluZSBSRUFEXzEyICAgICAgICAgICAgICAgMHhhOAorI2RlZmluZSBXUklURV8xMiAgICAgICAgICAgICAgMHhhYQorI2RlZmluZSBXUklURV9WRVJJRllfMTIgICAgICAgMHhhZQorI2RlZmluZSBTRUFSQ0hfSElHSF8xMiAgICAgICAgMHhiMAorI2RlZmluZSBTRUFSQ0hfRVFVQUxfMTIgICAgICAgMHhiMQorI2RlZmluZSBTRUFSQ0hfTE9XXzEyICAgICAgICAgMHhiMgorI2RlZmluZSBSRUFEX0VMRU1FTlRfU1RBVFVTICAgMHhiOAorI2RlZmluZSBTRU5EX1ZPTFVNRV9UQUcgICAgICAgMHhiNgorI2RlZmluZSBXUklURV9MT05HXzIgICAgICAgICAgMHhlYQorCisvKgorICogIFN0YXR1cyBjb2RlcworICovCisKKyNkZWZpbmUgR09PRCAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBDSEVDS19DT05ESVRJT04gICAgICAweDAxCisjZGVmaW5lIENPTkRJVElPTl9HT09EICAgICAgIDB4MDIKKyNkZWZpbmUgQlVTWSAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBJTlRFUk1FRElBVEVfR09PRCAgICAweDA4CisjZGVmaW5lIElOVEVSTUVESUFURV9DX0dPT0QgIDB4MGEKKyNkZWZpbmUgUkVTRVJWQVRJT05fQ09ORkxJQ1QgMHgwYworI2RlZmluZSBDT01NQU5EX1RFUk1JTkFURUQgICAweDExCisjZGVmaW5lIFFVRVVFX0ZVTEwgICAgICAgICAgIDB4MTQKKworI2RlZmluZSBTVEFUVVNfTUFTSyAgICAgICAgICAweDNlCisKKy8qCisgKiAgU0VOU0UgS0VZUworICovCisKKyNkZWZpbmUgTk9fU0VOU0UgICAgICAgICAgICAweDAwCisjZGVmaW5lIFJFQ09WRVJFRF9FUlJPUiAgICAgMHgwMQorI2RlZmluZSBOT1RfUkVBRFkgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgTUVESVVNX0VSUk9SICAgICAgICAweDAzCisjZGVmaW5lIEhBUkRXQVJFX0VSUk9SICAgICAgMHgwNAorI2RlZmluZSBJTExFR0FMX1JFUVVFU1QgICAgIDB4MDUKKyNkZWZpbmUgVU5JVF9BVFRFTlRJT04gICAgICAweDA2CisjZGVmaW5lIERBVEFfUFJPVEVDVCAgICAgICAgMHgwNworI2RlZmluZSBCTEFOS19DSEVDSyAgICAgICAgIDB4MDgKKyNkZWZpbmUgQ09QWV9BQk9SVEVEICAgICAgICAweDBhCisjZGVmaW5lIEFCT1JURURfQ09NTUFORCAgICAgMHgwYgorI2RlZmluZSBWT0xVTUVfT1ZFUkZMT1cgICAgIDB4MGQKKyNkZWZpbmUgTUlTQ09NUEFSRSAgICAgICAgICAweDBlCisKKworLyoKKyAqICBERVZJQ0UgVFlQRVMKKyAqLworCisjZGVmaW5lIFRZUEVfRElTSyAgICAgICAgICAgMHgwMAorI2RlZmluZSBUWVBFX1RBUEUgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgVFlQRV9QUk9DRVNTT1IgICAgICAweDAzICAgIC8qIEhQIHNjYW5uZXJzIHVzZSB0aGlzICovCisjZGVmaW5lIFRZUEVfV09STSAgICAgICAgICAgMHgwNCAgICAvKiBUcmVhdGVkIGFzIFJPTSBieSBvdXIgc3lzdGVtICovCisjZGVmaW5lIFRZUEVfUk9NICAgICAgICAgICAgMHgwNQorI2RlZmluZSBUWVBFX1NDQU5ORVIgICAgICAgIDB4MDYKKyNkZWZpbmUgVFlQRV9NT0QgICAgICAgICAgICAweDA3ICAgIC8qIE1hZ25ldG8tb3B0aWNhbCBkaXNrIC0KKwkJCQkgICAgICogLSB0cmVhdGVkIGFzIFRZUEVfRElTSyAqLworI2RlZmluZSBUWVBFX01FRElVTV9DSEFOR0VSIDB4MDgKKyNkZWZpbmUgVFlQRV9FTkNMT1NVUkUJICAgIDB4MGQgICAgLyogRW5jbG9zdXJlIFNlcnZpY2VzIERldmljZSAqLworI2RlZmluZSBUWVBFX05PX0xVTiAgICAgICAgIDB4N2YKKworLyoKKyAqIHN0YW5kYXJkIG1vZGUtc2VsZWN0IGhlYWRlciBwcmVwZW5kZWQgdG8gYWxsIG1vZGUtc2VsZWN0IGNvbW1hbmRzCisgKgorICogbW92ZWQgaGVyZSBmcm9tIGNkcm9tLmggLS0ga3JheGVsCisgKi8KKworc3RydWN0IGNjc19tb2Rlc2VsX2hlYWQKKyAgeworICAgIHVuc2lnbmVkIGNoYXIgX3IxOwkJCS8qIHJlc2VydmVkLiAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIG1lZGl1bTsJCS8qIGRldmljZS1zcGVjaWZpYyBtZWRpdW0gdHlwZS4gICovCisgICAgdW5zaWduZWQgY2hhciBfcjI7CQkJLyogcmVzZXJ2ZWQuICAqLworICAgIHVuc2lnbmVkIGNoYXIgYmxvY2tfZGVzY19sZW5ndGg7CS8qIGJsb2NrIGRlc2NyaXB0b3IgbGVuZ3RoLiAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGRlbnNpdHk7CQkvKiBkZXZpY2Utc3BlY2lmaWMgZGVuc2l0eSBjb2RlLiAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIG51bWJlcl9ibG9ja3NfaGk7CS8qIG51bWJlciBvZiBibG9ja3MgaW4gdGhpcyBibG9jaworCQkJCQkgICBkZXNjLiAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIG51bWJlcl9ibG9ja3NfbWVkOworICAgIHVuc2lnbmVkIGNoYXIgbnVtYmVyX2Jsb2Nrc19sbzsKKyAgICB1bnNpZ25lZCBjaGFyIF9yMzsKKyAgICB1bnNpZ25lZCBjaGFyIGJsb2NrX2xlbmd0aF9oaTsJLyogYmxvY2sgbGVuZ3RoIGZvciBibG9ja3MgaW4gdGhpcworCQkJCQkgICBkZXNjLiAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGJsb2NrX2xlbmd0aF9tZWQ7CisgICAgdW5zaWduZWQgY2hhciBibG9ja19sZW5ndGhfbG87CisgIH07CisKKy8qCisgKiAgTUVTU0FHRSBDT0RFUworICovCisKKyNkZWZpbmUgQ09NTUFORF9DT01QTEVURSAgICAweDAwCisjZGVmaW5lIEVYVEVOREVEX01FU1NBR0UgICAgMHgwMQorI2RlZmluZSAgICAgRVhURU5ERURfTU9ESUZZX0RBVEFfUE9JTlRFUiAgICAweDAwCisjZGVmaW5lICAgICBFWFRFTkRFRF9TRFRSICAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgICAgIEVYVEVOREVEX0VYVEVOREVEX0lERU5USUZZICAgICAgMHgwMiAgICAvKiBTQ1NJLUkgb25seSAqLworI2RlZmluZSAgICAgRVhURU5ERURfV0RUUiAgICAgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIFNBVkVfUE9JTlRFUlMgICAgICAgMHgwMgorI2RlZmluZSBSRVNUT1JFX1BPSU5URVJTICAgIDB4MDMKKyNkZWZpbmUgRElTQ09OTkVDVCAgICAgICAgICAweDA0CisjZGVmaW5lIElOSVRJQVRPUl9FUlJPUiAgICAgMHgwNQorI2RlZmluZSBBQk9SVCAgICAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgTUVTU0FHRV9SRUpFQ1QgICAgICAweDA3CisjZGVmaW5lIE5PUCAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBNU0dfUEFSSVRZX0VSUk9SICAgIDB4MDkKKyNkZWZpbmUgTElOS0VEX0NNRF9DT01QTEVURSAweDBhCisjZGVmaW5lIExJTktFRF9GTEdfQ01EX0NPTVBMRVRFIDB4MGIKKyNkZWZpbmUgQlVTX0RFVklDRV9SRVNFVCAgICAweDBjCisKKyNkZWZpbmUgSU5JVElBVEVfUkVDT1ZFUlkgICAweDBmICAgICAgICAgICAgLyogU0NTSS1JSSBvbmx5ICovCisjZGVmaW5lIFJFTEVBU0VfUkVDT1ZFUlkgICAgMHgxMCAgICAgICAgICAgIC8qIFNDU0ktSUkgb25seSAqLworCisjZGVmaW5lIFNJTVBMRV9RVUVVRV9UQUcgICAgMHgyMAorI2RlZmluZSBIRUFEX09GX1FVRVVFX1RBRyAgIDB4MjEKKyNkZWZpbmUgT1JERVJFRF9RVUVVRV9UQUcgICAweDIyCisKKy8qCisgKiBIZXJlIGFyZSBzb21lIHNjc2kgc3BlY2lmaWMgaW9jdGwgY29tbWFuZHMgd2hpY2ggYXJlIHNvbWV0aW1lcyB1c2VmdWwuCisgKi8KKy8qIFRoZXNlIGFyZSBhIGZldyBvdGhlciBjb25zdGFudHMgb25seSB1c2VkIGJ5IHNjc2kgZGV2aWNlcy4gICovCisKKyNkZWZpbmUgU0NTSV9JT0NUTF9HRVRfSURMVU4gMHg1MzgyCisKKy8qIFVzZWQgdG8gdHVybiBvbiBhbmQgb2ZmIHRhZ2dlZCBxdWV1aW5nIGZvciBzY3NpIGRldmljZXMuICAqLworCisjZGVmaW5lIFNDU0lfSU9DVExfVEFHR0VEX0VOQUJMRSAweDUzODMKKyNkZWZpbmUgU0NTSV9JT0NUTF9UQUdHRURfRElTQUJMRSAweDUzODQKKworLyogVXNlZCB0byBvYnRhaW4gdGhlIGhvc3QgbnVtYmVyIG9mIGEgZGV2aWNlLiAgKi8KKyNkZWZpbmUgU0NTSV9JT0NUTF9QUk9CRV9IT1NUIDB4NTM4NQorCisvKiBVc2VkIHRvIGdldCB0aGUgYnVzIG51bWJlciBmb3IgYSBkZXZpY2UuICAqLworI2RlZmluZSBTQ1NJX0lPQ1RMX0dFVF9CVVNfTlVNQkVSIDB4NTM4NgorCisjZW5kaWYgLyogc2NzaS9zY3NpLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zY3NpL3Njc2lfYnNnX2ZjLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc2NzaS9zY3NpX2JzZ19mYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYTRlNGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc2NzaS9zY3NpX2JzZ19mYy5oCkBAIC0wLDAgKzEsMzIyIEBACisvKgorICogIEZDIFRyYW5zcG9ydCBCU0cgSW50ZXJmYWNlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCAgIEphbWVzIFNtYXJ0LCBFbXVsZXggQ29ycG9yYXRpb24KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBTQ1NJX0JTR19GQ19ICisjZGVmaW5lIFNDU0lfQlNHX0ZDX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpbnRlbmRlZCB0byBiZSBpbmNsdWRlZCBieSBib3RoIGtlcm5lbCBhbmQgdXNlciBzcGFjZQorICovCisKKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKworLyoKKyAqIEZDIFRyYW5zcG9ydCBTR0lPIHY0IEJTRyBNZXNzYWdlIFN1cHBvcnQKKyAqLworCisvKiBEZWZhdWx0IEJTRyByZXF1ZXN0IHRpbWVvdXQgKGluIHNlY29uZHMpICovCisjZGVmaW5lIEZDX0RFRkFVTFRfQlNHX1RJTUVPVVQJCSgxMCAqIEhaKQorCisKKy8qCisgKiBSZXF1ZXN0IE1lc3NhZ2UgQ29kZXMgc3VwcG9ydGVkIGJ5IHRoZSBGQyBUcmFuc3BvcnQKKyAqLworCisvKiBkZWZpbmUgdGhlIGNsYXNzIG1hc2tzIGZvciB0aGUgbWVzc2FnZSBjb2RlcyAqLworI2RlZmluZSBGQ19CU0dfQ0xTX01BU0sJCTB4RjAwMDAwMDAJLyogZmluZCBvYmplY3QgY2xhc3MgKi8KKyNkZWZpbmUgRkNfQlNHX0hTVF9NQVNLCQkweDgwMDAwMDAwCS8qIGZjIGhvc3QgY2xhc3MgKi8KKyNkZWZpbmUgRkNfQlNHX1JQVF9NQVNLCQkweDQwMDAwMDAwCS8qIGZjIHJwb3J0IGNsYXNzICovCisKKwkvKiBmY19ob3N0IE1lc3NhZ2UgQ29kZXMgKi8KKyNkZWZpbmUgRkNfQlNHX0hTVF9BRERfUlBPUlQJCShGQ19CU0dfSFNUX01BU0sgfCAweDAwMDAwMDAxKQorI2RlZmluZSBGQ19CU0dfSFNUX0RFTF9SUE9SVAkJKEZDX0JTR19IU1RfTUFTSyB8IDB4MDAwMDAwMDIpCisjZGVmaW5lIEZDX0JTR19IU1RfRUxTX05PTE9HSU4JCShGQ19CU0dfSFNUX01BU0sgfCAweDAwMDAwMDAzKQorI2RlZmluZSBGQ19CU0dfSFNUX0NUCQkJKEZDX0JTR19IU1RfTUFTSyB8IDB4MDAwMDAwMDQpCisjZGVmaW5lIEZDX0JTR19IU1RfVkVORE9SCQkoRkNfQlNHX0hTVF9NQVNLIHwgMHgwMDAwMDBGRikKKworCS8qIGZjX3Jwb3J0IE1lc3NhZ2UgQ29kZXMgKi8KKyNkZWZpbmUgRkNfQlNHX1JQVF9FTFMJCQkoRkNfQlNHX1JQVF9NQVNLIHwgMHgwMDAwMDAwMSkKKyNkZWZpbmUgRkNfQlNHX1JQVF9DVAkJCShGQ19CU0dfUlBUX01BU0sgfCAweDAwMDAwMDAyKQorCisKKworLyoKKyAqIEZDIEFkZHJlc3MgSWRlbnRpZmllcnMgaW4gTWVzc2FnZSBTdHJ1Y3R1cmVzIDoKKyAqCisgKiAgIFdoZW5ldmVyIGEgY29tbWFuZCBwYXlsb2FkIGNvbnRhaW5zIGEgRkMgQWRkcmVzcyBJZGVudGlmaWVyCisgKiAgIChha2EgcG9ydF9pZCksIHRoZSB2YWx1ZSBpcyBlZmZlY3RpdmVseSBpbiBiaWctZW5kaWFuCisgKiAgIG9yZGVyLCB0aHVzIHRoZSBhcnJheSBlbGVtZW50cyBhcmUgZGVjb2RlZCBhcyBmb2xsb3dzOgorICogICAgIGVsZW1lbnQgWzBdIGlzIGJpdHMgMjM6MTYgb2YgdGhlIEZDIEFkZHJlc3MgSWRlbnRpZmllcgorICogICAgIGVsZW1lbnQgWzFdIGlzIGJpdHMgMTU6OCBvZiB0aGUgRkMgQWRkcmVzcyBJZGVudGlmaWVyCisgKiAgICAgZWxlbWVudCBbMl0gaXMgYml0cyA3OjAgb2YgdGhlIEZDIEFkZHJlc3MgSWRlbnRpZmllcgorICovCisKKworLyoKKyAqIEZDIEhvc3QgTWVzc2FnZXMKKyAqLworCisvKiBGQ19CU0dfSFNUX0FERFJfUE9SVCA6ICovCisKKy8qIFJlcXVlc3Q6CisgKiBUaGlzIG1lc3NhZ2UgcmVxdWVzdHMgdGhlIEZDIGhvc3QgdG8gbG9naW4gdG8gdGhlIHJlbW90ZSBwb3J0CisgKiBhdCB0aGUgc3BlY2lmaWVkIE5fUG9ydF9JZC4gIFRoZSByZW1vdGUgcG9ydCBpcyB0byBiZSBlbnVtZXJhdGVkCisgKiB3aXRoIHRoZSB0cmFuc3BvcnQgdXBvbiBjb21wbGV0aW9uIG9mIHRoZSBsb2dpbi4KKyAqLworc3RydWN0IGZjX2JzZ19ob3N0X2FkZF9ycG9ydCB7CisJdWludDhfdAkJcmVzZXJ2ZWQ7CisKKwkvKiBGQyBBZGRyZXNzIElkZW50aWVyIG9mIHRoZSByZW1vdGUgcG9ydCB0byBsb2dpbiB0byAqLworCXVpbnQ4X3QJCXBvcnRfaWRbM107Cit9OworCisvKiBSZXNwb25zZToKKyAqIFRoZXJlIGlzIG5vIGFkZGl0aW9uYWwgcmVzcG9uc2UgZGF0YSAtIGZjX2JzZ19yZXBseS0+cmVzdWx0IGlzIHN1ZmZpY2llbnQKKyAqLworCisKKy8qIEZDX0JTR19IU1RfREVMX1JQT1JUIDogKi8KKworLyogUmVxdWVzdDoKKyAqIFRoaXMgbWVzc2FnZSByZXF1ZXN0cyB0aGUgRkMgaG9zdCB0byByZW1vdmUgYW4gZW51bWVyYXRlZAorICogcmVtb3RlIHBvcnQgYW5kIHRvIHRlcm1pbmF0ZSB0aGUgbG9naW4gdG8gaXQuCisgKgorICogTm90ZTogVGhlIGRyaXZlciBpcyBmcmVlIHRvIHJlamVjdCB0aGlzIHJlcXVlc3QgaWYgaXQgZGVzaXJlcyB0bworICogcmVtYWluIGxvZ2dlZCBpbiB3aXRoIHRoZSByZW1vdGUgcG9ydC4KKyAqLworc3RydWN0IGZjX2JzZ19ob3N0X2RlbF9ycG9ydCB7CisJdWludDhfdAkJcmVzZXJ2ZWQ7CisKKwkvKiBGQyBBZGRyZXNzIElkZW50aWVyIG9mIHRoZSByZW1vdGUgcG9ydCB0byBsb2dvdXQgb2YgKi8KKwl1aW50OF90CQlwb3J0X2lkWzNdOworfTsKKworLyogUmVzcG9uc2U6CisgKiBUaGVyZSBpcyBubyBhZGRpdGlvbmFsIHJlc3BvbnNlIGRhdGEgLSBmY19ic2dfcmVwbHktPnJlc3VsdCBpcyBzdWZmaWNpZW50CisgKi8KKworCisvKiBGQ19CU0dfSFNUX0VMU19OT0xPR0lOIDogKi8KKworLyogUmVxdWVzdDoKKyAqIFRoaXMgbWVzc2FnZSByZXF1ZXN0cyB0aGUgRkNfSG9zdCB0byBzZW5kIGFuIEVMUyB0byBhIHNwZWNpZmljCisgKiBOX1BvcnRfSUQuIFRoZSBob3N0IGRvZXMgbm90IG5lZWQgdG8gbG9nIGludG8gdGhlIHJlbW90ZSBwb3J0LAorICogbm9yIGRvZXMgaXQgbmVlZCB0byBlbnVtZXJhdGUgdGhlIHJwb3J0IGZvciBmdXJ0aGVyIHRyYWZmaWMKKyAqIChhbHRob3VnaCwgdGhlIEZDIGhvc3QgaXMgZnJlZSB0byBkbyBzbyBpZiBpdCBkZXNpcmVzKS4KKyAqLworc3RydWN0IGZjX2JzZ19ob3N0X2VscyB7CisJLyoKKwkgKiBFTFMgQ29tbWFuZCBDb2RlIGJlaW5nIHNlbnQgKG11c3QgYmUgdGhlIHNhbWUgYXMgYnl0ZSAwCisJICogb2YgdGhlIHBheWxvYWQpCisJICovCisJdWludDhfdCAJY29tbWFuZF9jb2RlOworCisJLyogRkMgQWRkcmVzcyBJZGVudGllciBvZiB0aGUgcmVtb3RlIHBvcnQgdG8gc2VuZCB0aGUgRUxTIHRvICovCisJdWludDhfdAkJcG9ydF9pZFszXTsKK307CisKKy8qIFJlc3BvbnNlOgorICovCisvKiBmY19ic2dfY3RlbHNfcmVwbHktPnN0YXR1cyB2YWx1ZXMgKi8KKyNkZWZpbmUgRkNfQ1RFTFNfU1RBVFVTX09LCTB4MDAwMDAwMDAKKyNkZWZpbmUgRkNfQ1RFTFNfU1RBVFVTX1JFSkVDVAkweDAwMDAwMDAxCisjZGVmaW5lIEZDX0NURUxTX1NUQVRVU19QX1JKVAkweDAwMDAwMDAyCisjZGVmaW5lIEZDX0NURUxTX1NUQVRVU19GX1JKVAkweDAwMDAwMDAzCisjZGVmaW5lIEZDX0NURUxTX1NUQVRVU19QX0JTWQkweDAwMDAwMDA0CisjZGVmaW5lIEZDX0NURUxTX1NUQVRVU19GX0JTWQkweDAwMDAwMDA2CitzdHJ1Y3QgZmNfYnNnX2N0ZWxzX3JlcGx5IHsKKwkvKgorCSAqIE5vdGU6IEFuIEVMUyBMU19SSlQgbWF5IGJlIHJlcG9ydGVkIGluIDIgd2F5czoKKwkgKiAgYSkgQSBzdGF0dXMgb2YgRkNfQ1RFTFNfU1RBVFVTX09LIGlzIHJldHVybmVkLiBUaGUgY2FsbGVyCisJICogICAgIGlzIHRvIGxvb2sgaW50byB0aGUgRUxTIHJlY2VpdmUgcGF5bG9hZCB0byBkZXRlcm1pbmUKKwkgKiAgICAgTFNfQUNDIG9yIExTX1JKVCAoYnkgY29udGVudHMgb2Ygd29yZCAwKS4gVGhlIHJlamVjdAorCSAqICAgICBkYXRhIHdpbGwgYmUgaW4gd29yZCAxLgorCSAqICBiKSBBIHN0YXR1cyBvZiBGQ19DVEVMU19TVEFUVVNfUkVKRUNUIGlzIHJldHVybmVkLCBUaGUKKwkgKiAgICAgcmp0X2RhdGEgZmllbGQgd2lsbCBjb250YWluIHZhbGlkIGRhdGEuCisJICoKKwkgKiBOb3RlOiBFTFMgTFNfQUNDIGlzIGRldGVybWluZWQgYnkgYW4gRkNfQ1RFTFNfU1RBVFVTX09LLCBhbmQKKwkgKiAgIHRoZSByZWNlaXZlIHBheWxvYWQgd29yZCAwIGluZGljYXRlcyBMU19BQ0MKKwkgKiAgIChlLmcuIHZhbHVlIGlzIDB4MDJ4eHh4eHgpLgorCSAqCisJICogTm90ZTogU2ltaWxhcmx5LCBhIENUIFJlamVjdCBtYXkgYmUgcmVwb3J0ZWQgaW4gMiB3YXlzOgorCSAqICBhKSBBIHN0YXR1cyBvZiBGQ19DVEVMU19TVEFUVVNfT0sgaXMgcmV0dXJuZWQuIFRoZSBjYWxsZXIKKwkgKiAgICAgaXMgdG8gbG9vayBpbnRvIHRoZSBDVCByZWNlaXZlIHBheWxvYWQgdG8gZGV0ZXJtaW5lCisJICogICAgIEFjY2VwdCBvciBSZWplY3QgKGJ5IGNvbnRlbnRzIG9mIHdvcmQgMikuIFRoZSByZWplY3QKKwkgKiAgICAgZGF0YSB3aWxsIGJlIGluIHdvcmQgMy4KKwkgKiAgYikgQSBzdGF0dXMgb2YgRkNfQ1RFTFNfU1RBVFVTX1JFSkVDVCBpcyByZXR1cm5lZCwgVGhlCisJICogICAgIHJqdF9kYXRhIGZpZWxkIHdpbGwgY29udGFpbiB2YWxpZCBkYXRhLgorCSAqCisJICogTm90ZTogeF9SSlQvQlNZIHN0YXR1cyB3aWxsIGluZGljYWUgdGhhdCB0aGUgcmp0X2RhdGEgZmllbGQKKwkgKiAgIGlzIHZhbGlkIGFuZCBjb250YWlucyB0aGUgcmVhc29uL2V4cGxhbmF0aW9uIHZhbHVlcy4KKwkgKi8KKwl1aW50MzJfdAlzdGF0dXM7CQkvKiBTZWUgRkNfQ1RFTFNfU1RBVFVTX3h4eCAqLworCisJLyogdmFsaWQgaWYgc3RhdHVzIGlzIG5vdCBGQ19DVEVMU19TVEFUVVNfT0sgKi8KKwlzdHJ1Y3QJeworCQl1aW50OF90CWFjdGlvbjsJCS8qIGZyYWdtZW50X2lkIGZvciBDVCBSRUpFQ1QgKi8KKwkJdWludDhfdAlyZWFzb25fY29kZTsKKwkJdWludDhfdAlyZWFzb25fZXhwbGFuYXRpb247CisJCXVpbnQ4X3QJdmVuZG9yX3VuaXF1ZTsKKwl9IHJqdF9kYXRhOworfTsKKworCisvKiBGQ19CU0dfSFNUX0NUIDogKi8KKworLyogUmVxdWVzdDoKKyAqIFRoaXMgbWVzc2FnZSByZXF1ZXN0cyB0aGF0IGEgQ1QgUmVxdWVzdCBiZSBwZXJmb3JtZWQgd2l0aCB0aGUKKyAqIGluZGljYXRlZCBOX1BvcnRfSUQuIFRoZSBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIGxvZ2dpbmcgaW4gd2l0aAorICogdGhlIGZhYnJpYyBhbmQvb3IgTl9Qb3J0X0lELCBldGMgYXMgcGVyIEZDIHJ1bGVzLiBUaGlzIHJlcXVlc3QgZG9lcworICogbm90IG1hbmRhdGUgdGhhdCB0aGUgZHJpdmVyIG11c3QgZW51bWVyYXRlIHRoZSBkZXN0aW5hdGlvbiBpbiB0aGUKKyAqIHRyYW5zcG9ydC4gVGhlIGRyaXZlciBpcyBhbGxvd2VkIHRvIGRlY2lkZSB3aGV0aGVyIHRvIGVudW1lcmF0ZSBpdCwKKyAqIGFuZCB3aGV0aGVyIHRvIHRlYXIgaXQgZG93biBhZnRlciB0aGUgcmVxdWVzdC4KKyAqLworc3RydWN0IGZjX2JzZ19ob3N0X2N0IHsKKwl1aW50OF90CQlyZXNlcnZlZDsKKworCS8qIEZDIEFkZHJlc3MgSWRlbnRpZXIgb2YgdGhlIHJlbW90ZSBwb3J0IHRvIHNlbmQgdGhlIEVMUyB0byAqLworCXVpbnQ4X3QJCXBvcnRfaWRbM107CisKKwkvKgorCSAqIFdlIG5lZWQgd29yZHMgMC0yIG9mIHRoZSBnZW5lcmljIHByZWFtYmxlIGZvciB0aGUgTExEJ3MKKwkgKi8KKwl1aW50MzJfdAlwcmVhbWJsZV93b3JkMDsJLyogcmV2aXNpb24gJiBJTl9JRCAqLworCXVpbnQzMl90CXByZWFtYmxlX3dvcmQxOwkvKiBHU19UeXBlLCBHU19TdWJUeXBlLCBPcHRpb25zLCBSc3ZkICovCisJdWludDMyX3QJcHJlYW1ibGVfd29yZDI7CS8qIENtZCBDb2RlLCBNYXggU2l6ZSAqLworCit9OworLyogUmVzcG9uc2U6CisgKgorICogVGhlIHJlcGx5IHN0cnVjdHVyZSBpcyBhbiBmY19ic2dfY3RlbHNfcmVwbHkgc3RydWN0dXJlCisgKi8KKworCisvKiBGQ19CU0dfSFNUX1ZFTkRPUiA6ICovCisKKy8qIFJlcXVlc3Q6CisgKiBOb3RlOiBXaGVuIHNwZWNpZnlpbmcgdmVuZG9yX2lkLCBiZSBzdXJlIHRvIHJlYWQgdGhlIFZlbmRvciBUeXBlIGFuZCBJRAorICogICBmb3JtYXR0aW5nIHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgaW4gc2NzaV9uZXRsaW5rLmgKKyAqLworc3RydWN0IGZjX2JzZ19ob3N0X3ZlbmRvciB7CisJLyoKKwkgKiBJZGVudGlmaWVzIHRoZSB2ZW5kb3IgdGhhdCB0aGUgbWVzc2FnZSBpcyBmb3JtYXR0ZWQgZm9yLiBUaGlzCisJICogc2hvdWxkIGJlIHRoZSByZWNpcGllbnQgb2YgdGhlIG1lc3NhZ2UuCisJICovCisJdWludDY0X3QgdmVuZG9yX2lkOworCisJLyogc3RhcnQgb2YgdmVuZG9yIGNvbW1hbmQgYXJlYSAqLworCXVpbnQzMl90IHZlbmRvcl9jbWRbMF07Cit9OworCisvKiBSZXNwb25zZToKKyAqLworc3RydWN0IGZjX2JzZ19ob3N0X3ZlbmRvcl9yZXBseSB7CisJLyogc3RhcnQgb2YgdmVuZG9yIHJlc3BvbnNlIGFyZWEgKi8KKwl1aW50MzJfdCB2ZW5kb3JfcnNwWzBdOworfTsKKworCisKKy8qCisgKiBGQyBSZW1vdGUgUG9ydCBNZXNzYWdlcworICovCisKKy8qIEZDX0JTR19SUFRfRUxTIDogKi8KKworLyogUmVxdWVzdDoKKyAqIFRoaXMgbWVzc2FnZSByZXF1ZXN0cyB0aGF0IGFuIEVMUyBiZSBwZXJmb3JtZWQgd2l0aCB0aGUgcnBvcnQuCisgKi8KK3N0cnVjdCBmY19ic2dfcnBvcnRfZWxzIHsKKwkvKgorCSAqIEVMUyBDb21tYW5kIENvZGUgYmVpbmcgc2VudCAobXVzdCBiZSB0aGUgc2FtZSBhcworCSAqIGJ5dGUgMCBvZiB0aGUgcGF5bG9hZCkKKwkgKi8KKwl1aW50OF90IGVsc19jb2RlOworfTsKKworLyogUmVzcG9uc2U6CisgKgorICogVGhlIHJlcGx5IHN0cnVjdHVyZSBpcyBhbiBmY19ic2dfY3RlbHNfcmVwbHkgc3RydWN0dXJlCisgKi8KKworCisvKiBGQ19CU0dfUlBUX0NUIDogKi8KKworLyogUmVxdWVzdDoKKyAqIFRoaXMgbWVzc2FnZSByZXF1ZXN0cyB0aGF0IGEgQ1QgUmVxdWVzdCBiZSBwZXJmb3JtZWQgd2l0aCB0aGUgcnBvcnQuCisgKi8KK3N0cnVjdCBmY19ic2dfcnBvcnRfY3QgeworCS8qCisJICogV2UgbmVlZCB3b3JkcyAwLTIgb2YgdGhlIGdlbmVyaWMgcHJlYW1ibGUgZm9yIHRoZSBMTEQncworCSAqLworCXVpbnQzMl90CXByZWFtYmxlX3dvcmQwOwkvKiByZXZpc2lvbiAmIElOX0lEICovCisJdWludDMyX3QJcHJlYW1ibGVfd29yZDE7CS8qIEdTX1R5cGUsIEdTX1N1YlR5cGUsIE9wdGlvbnMsIFJzdmQgKi8KKwl1aW50MzJfdAlwcmVhbWJsZV93b3JkMjsJLyogQ21kIENvZGUsIE1heCBTaXplICovCit9OworLyogUmVzcG9uc2U6CisgKgorICogVGhlIHJlcGx5IHN0cnVjdHVyZSBpcyBhbiBmY19ic2dfY3RlbHNfcmVwbHkgc3RydWN0dXJlCisgKi8KKworCisKKworLyogcmVxdWVzdCAoQ0RCKSBzdHJ1Y3R1cmUgb2YgdGhlIHNnX2lvX3Y0ICovCitzdHJ1Y3QgZmNfYnNnX3JlcXVlc3QgeworCXVpbnQzMl90IG1zZ2NvZGU7CisJdW5pb24geworCQlzdHJ1Y3QgZmNfYnNnX2hvc3RfYWRkX3Jwb3J0CWhfYWRkcnBvcnQ7CisJCXN0cnVjdCBmY19ic2dfaG9zdF9kZWxfcnBvcnQJaF9kZWxycG9ydDsKKwkJc3RydWN0IGZjX2JzZ19ob3N0X2VscwkJaF9lbHM7CisJCXN0cnVjdCBmY19ic2dfaG9zdF9jdAkJaF9jdDsKKwkJc3RydWN0IGZjX2JzZ19ob3N0X3ZlbmRvcgloX3ZlbmRvcjsKKworCQlzdHJ1Y3QgZmNfYnNnX3Jwb3J0X2VscwkJcl9lbHM7CisJCXN0cnVjdCBmY19ic2dfcnBvcnRfY3QJCXJfY3Q7CisJfSBycXN0X2RhdGE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKKy8qIHJlc3BvbnNlIChyZXF1ZXN0IHNlbnNlIGRhdGEpIHN0cnVjdHVyZSBvZiB0aGUgc2dfaW9fdjQgKi8KK3N0cnVjdCBmY19ic2dfcmVwbHkgeworCS8qCisJICogVGhlIGNvbXBsZXRpb24gcmVzdWx0LiBSZXN1bHQgZXhpc3RzIGluIHR3byBmb3JtczoKKwkgKiAgaWYgbmVnYXRpdmUsIGl0IGlzIGFuIC1FeHh4IHN5c3RlbSBlcnJubyB2YWx1ZS4gVGhlcmUgd2lsbAorCSAqICAgIGJlIG5vIGZ1cnRoZXIgcmVwbHkgaW5mb3JtYXRpb24gc3VwcGxpZWQuCisJICogIGVsc2UsIGl0J3MgdGhlIDQtYnl0ZSBzY3NpIGVycm9yIHJlc3VsdCwgd2l0aCBkcml2ZXIsIGhvc3QsCisJICogICAgbXNnIGFuZCBzdGF0dXMgZmllbGRzLiBUaGUgcGVyLW1zZ2NvZGUgcmVwbHkgc3RydWN0dXJlCisJICogICAgd2lsbCBjb250YWluIHZhbGlkIGRhdGEuCisJICovCisJdWludDMyX3QgcmVzdWx0OworCisJLyogSWYgdGhlcmUgd2FzIHJlcGx5X3BheWxvYWQsIGhvdyBtdWNoIHdhcyByZWNldmllZCA/ICovCisJdWludDMyX3QgcmVwbHlfcGF5bG9hZF9yY3ZfbGVuOworCisJdW5pb24geworCQlzdHJ1Y3QgZmNfYnNnX2hvc3RfdmVuZG9yX3JlcGx5CQl2ZW5kb3JfcmVwbHk7CisKKwkJc3RydWN0IGZjX2JzZ19jdGVsc19yZXBseQkJY3RlbHNfcmVwbHk7CisJfSByZXBseV9kYXRhOworfTsKKworCisjZW5kaWYgLyogU0NTSV9CU0dfRkNfSCAqLworCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc2NzaS9zY3NpX2lvY3RsLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc2NzaS9zY3NpX2lvY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFmMDE2MQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zY3NpL3Njc2lfaW9jdGwuaApAQCAtMCwwICsxLDM0IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1NDU0lfSU9DVExfSAorI2RlZmluZSBfU0NTSV9JT0NUTF9IIAorCisvKiBJT0NUTHMgZm9yIFNDU0kuICAqLworI2RlZmluZSBTQ1NJX0lPQ1RMX1NFTkRfQ09NTUFORAkJMQkvKiBTZW5kIGEgY29tbWFuZCB0byB0aGUgU0NTSSBob3N0LiAgKi8KKyNkZWZpbmUgU0NTSV9JT0NUTF9URVNUX1VOSVRfUkVBRFkJMgkvKiBUZXN0IGlmIHVuaXQgaXMgcmVhZHkuICAqLworI2RlZmluZSBTQ1NJX0lPQ1RMX0JFTkNITUFSS19DT01NQU5ECTMKKyNkZWZpbmUgU0NTSV9JT0NUTF9TWU5DCQkJNAkvKiBSZXF1ZXN0IHN5bmNocm9ub3VzIHBhcmFtZXRlcnMuICAqLworI2RlZmluZSBTQ1NJX0lPQ1RMX1NUQVJUX1VOSVQJCTUKKyNkZWZpbmUgU0NTSV9JT0NUTF9TVE9QX1VOSVQJCTYKKyNkZWZpbmUgU0NTSV9JT0NUTF9ET09STE9DSwkJMHg1MzgwCS8qIExvY2sgdGhlIGVqZWN0IG1lY2hhbmlzbS4gICovCisjZGVmaW5lIFNDU0lfSU9DVExfRE9PUlVOTE9DSwkJMHg1MzgxCS8qIFVubG9jayB0aGUgbWVjaGFuaXNtLiAgKi8KKworI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3Njc2kvc2NzaV9uZXRsaW5rLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc2NzaS9zY3NpX25ldGxpbmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGIwOWU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3Njc2kvc2NzaV9uZXRsaW5rLmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiAgU0NTSSBUcmFuc3BvcnQgTmV0bGluayBJbnRlcmZhY2UKKyAqICAgIFVzZWQgZm9yIHRoZSBwb3N0aW5nIG9mIG91dGJvdW5kIFNDU0kgdHJhbnNwb3J0IGV2ZW50cworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgICBKYW1lcyBTbWFydCwgRW11bGV4IENvcnBvcmF0aW9uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisjaWZuZGVmIFNDU0lfTkVUTElOS19ICisjZGVmaW5lIFNDU0lfTkVUTElOS19ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisKKworLyoKKyAqIFRoaXMgZmlsZSBpbnRlbmRlZCB0byBiZSBpbmNsdWRlZCBieSBib3RoIGtlcm5lbCBhbmQgdXNlciBzcGFjZQorICovCisKKy8qIFNpbmdsZSBOZXRsaW5rIE1lc3NhZ2UgdHlwZSB0byBzZW5kIGFsbCBTQ1NJIFRyYW5zcG9ydCBtZXNzYWdlcyAqLworI2RlZmluZSBTQ1NJX1RSQU5TUE9SVF9NU0cJCU5MTVNHX01JTl9UWVBFICsgMQorCisvKiBTQ1NJIFRyYW5zcG9ydCBCcm9hZGNhc3QgR3JvdXBzICovCisJLyogbGVhdmluZyBncm91cHMgMCBhbmQgMSB1bmFzc2lnbmVkICovCisjZGVmaW5lIFNDU0lfTkxfR1JQX0ZDX0VWRU5UUwkJKDE8PDIpCQkvKiBHcm91cCAyICovCisjZGVmaW5lIFNDU0lfTkxfR1JQX0NOVAkJCTMKKworCisvKiBTQ1NJX1RSQU5TUE9SVF9NU0cgZXZlbnQgbWVzc2FnZSBoZWFkZXIgKi8KK3N0cnVjdCBzY3NpX25sX2hkciB7CisJdWludDhfdCB2ZXJzaW9uOworCXVpbnQ4X3QgdHJhbnNwb3J0OworCXVpbnQxNl90IG1hZ2ljOworCXVpbnQxNl90IG1zZ3R5cGU7CisJdWludDE2X3QgbXNnbGVuOworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZih1aW50NjRfdCkpKSk7CisKKy8qIHNjc2lfbmxfaGRyLT52ZXJzaW9uIHZhbHVlICovCisjZGVmaW5lIFNDU0lfTkxfVkVSU0lPTgkJCQkxCisKKy8qIHNjc2lfbmxfaGRyLT5tYWdpYyB2YWx1ZSAqLworI2RlZmluZSBTQ1NJX05MX01BR0lDCQkJCTB4QTFCMgorCisvKiBzY3NpX25sX2hkci0+dHJhbnNwb3J0IHZhbHVlICovCisjZGVmaW5lIFNDU0lfTkxfVFJBTlNQT1JUCQkJMAorI2RlZmluZSBTQ1NJX05MX1RSQU5TUE9SVF9GQwkJCTEKKyNkZWZpbmUgU0NTSV9OTF9NQVhfVFJBTlNQT1JUUwkJCTIKKworLyogVHJhbnNwb3J0LWJhc2VkIHNjc2lfbmxfaGRyLT5tc2d0eXBlIHZhbHVlcyBhcmUgZGVmaW5lZCBpbiBlYWNoIHRyYW5zcG9ydCAqLworCisvKgorICogR0VORVJJQyBTQ1NJIHNjc2lfbmxfaGRyLT5tc2d0eXBlIFZhbHVlcworICovCisJLyoga2VybmVsIC0+IHVzZXIgKi8KKyNkZWZpbmUgU0NTSV9OTF9TSE9TVF9WRU5ET1IJCQkweDAwMDEKKwkvKiB1c2VyIC0+IGtlcm5lbCAqLworLyogU0NTSV9OTF9TSE9TVF9WRU5ET1IgbXNndHlwZSBpcyBrZXJuZWwtPnVzZXIgYW5kIHVzZXItPmtlcm5lbCAqLworCisKKy8qCisgKiBNZXNzYWdlIFN0cnVjdHVyZXMgOgorICovCisKKy8qIG1hY3JvIHRvIHJvdW5kIHVwIG1lc3NhZ2UgbGVuZ3RocyB0byA4Ynl0ZSBib3VuZGFyeSAqLworI2RlZmluZSBTQ1NJX05MX01TR0FMSUdOKGxlbikJCSgoKGxlbikgKyA3KSAmIH43KQorCisKKy8qCisgKiBTQ1NJIEhPU1QgVmVuZG9yIFVuaXF1ZSBtZXNzYWdlcyA6CisgKiAgIFNDU0lfTkxfU0hPU1RfVkVORE9SCisgKgorICogTm90ZTogVGhlIFZlbmRvciBVbmlxdWUgbWVzc2FnZSBwYXlsb2FkIHdpbGwgYmVnaW4gZGlyZWN0bHkgYWZ0ZXIKKyAqIAkgdGhpcyBzdHJ1Y3R1cmUsIHdpdGggdGhlIGxlbmd0aCBvZiB0aGUgcGF5bG9hZCBwZXIgdm1zZ19kYXRhbGVuLgorICoKKyAqIE5vdGU6IFdoZW4gc3BlY2lmeWluZyB2ZW5kb3JfaWQsIGJlIHN1cmUgdG8gcmVhZCB0aGUgVmVuZG9yIFR5cGUgYW5kIElECisgKiAgIGZvcm1hdHRpbmcgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBiZWxvdworICovCitzdHJ1Y3Qgc2NzaV9ubF9ob3N0X3ZlbmRvcl9tc2cgeworCXN0cnVjdCBzY3NpX25sX2hkciBzbmxoOwkJLyogbXVzdCBiZSAxc3QgZWxlbWVudCAhICovCisJdWludDY0X3QgdmVuZG9yX2lkOworCXVpbnQxNl90IGhvc3Rfbm87CisJdWludDE2X3Qgdm1zZ19kYXRhbGVuOworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZih1aW50NjRfdCkpKSk7CisKKworLyoKKyAqIFZlbmRvciBJRDoKKyAqICAgSWYgdHJhbnNwb3J0cyBwb3N0IHZlbmRvci11bmlxdWUgZXZlbnRzLCB0aGV5IG11c3QgcGFzcyBhIHdlbGwta25vd24KKyAqICAgMzItYml0IHZlbmRvciBpZGVudGlmaWVyLiBUaGlzIGlkZW50aWZpZXIgY29uc2lzdHMgb2YgOCBiaXRzIGluZGljYXRpbmcKKyAqICAgdGhlICJ0eXBlIiBvZiBpZGVudGlmaWVyIGNvbnRhaW5lZCwgYW5kIDI0IGJpdHMgb2YgaWQgZGF0YS4KKyAqCisgKiAgIElkZW50aWZpZXJzIGZvciBlYWNoIHR5cGU6CisgKiAgICBQQ0kgOiAgSUQgZGF0YSBpcyB0aGUgMTYgYml0IFBDSSBSZWdpc3RlcmVkIFZlbmRvciBJRAorICovCisjZGVmaW5lIFNDU0lfTkxfVklEX1RZUEVfU0hJRlQJCTU2CisjZGVmaW5lIFNDU0lfTkxfVklEX1RZUEVfTUFTSwkJKChfX3U2NCkweEZGIDw8IFNDU0lfTkxfVklEX1RZUEVfU0hJRlQpCisjZGVmaW5lIFNDU0lfTkxfVklEX1RZUEVfUENJCQkoKF9fdTY0KTB4MDEgPDwgU0NTSV9OTF9WSURfVFlQRV9TSElGVCkKKyNkZWZpbmUgU0NTSV9OTF9WSURfSURfTUFTSwkJKH4gU0NTSV9OTF9WSURfVFlQRV9NQVNLKQorCisKKyNkZWZpbmUgSU5JVF9TQ1NJX05MX0hEUihoZHIsIHQsIG10eXBlLCBtbGVuKQkJCVwKKwl7CQkJCQkJCVwKKwkoaGRyKS0+dmVyc2lvbiA9IFNDU0lfTkxfVkVSU0lPTjsJCQlcCisJKGhkciktPnRyYW5zcG9ydCA9IHQ7CQkJCQlcCisJKGhkciktPm1hZ2ljID0gU0NTSV9OTF9NQUdJQzsJCQkJXAorCShoZHIpLT5tc2d0eXBlID0gbXR5cGU7CQkJCQlcCisJKGhkciktPm1zZ2xlbiA9IG1sZW47CQkJCQlcCisJfQorCisKKworI2VuZGlmIC8qIFNDU0lfTkVUTElOS19IICovCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zY3NpL3Njc2lfbmV0bGlua19mYy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3Njc2kvc2NzaV9uZXRsaW5rX2ZjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JmNzZlNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zY3NpL3Njc2lfbmV0bGlua19mYy5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiAgRkMgVHJhbnNwb3J0IE5ldGxpbmsgSW50ZXJmYWNlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNiAgIEphbWVzIFNtYXJ0LCBFbXVsZXggQ29ycG9yYXRpb24KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKyNpZm5kZWYgU0NTSV9ORVRMSU5LX0ZDX0gKKyNkZWZpbmUgU0NTSV9ORVRMSU5LX0ZDX0gKKworI2luY2x1ZGUgPHNjc2kvc2NzaV9uZXRsaW5rLmg+CisKKy8qCisgKiBUaGlzIGZpbGUgaW50ZW5kZWQgdG8gYmUgaW5jbHVkZWQgYnkgYm90aCBrZXJuZWwgYW5kIHVzZXIgc3BhY2UKKyAqLworCisvKgorICogRkMgVHJhbnNwb3J0IE1lc3NhZ2UgVHlwZXMKKyAqLworCS8qIGtlcm5lbCAtPiB1c2VyICovCisjZGVmaW5lIEZDX05MX0FTWU5DX0VWRU5UCQkJMHgwMTAwCisJLyogdXNlciAtPiBrZXJuZWwgKi8KKy8qIG5vbmUgKi8KKworCisvKgorICogTWVzc2FnZSBTdHJ1Y3R1cmVzIDoKKyAqLworCisvKiBtYWNybyB0byByb3VuZCB1cCBtZXNzYWdlIGxlbmd0aHMgdG8gOGJ5dGUgYm91bmRhcnkgKi8KKyNkZWZpbmUgRkNfTkxfTVNHQUxJR04obGVuKQkJKCgobGVuKSArIDcpICYgfjcpCisKKworLyoKKyAqIEZDIFRyYW5zcG9ydCBCcm9hZGNhc3QgRXZlbnQgTWVzc2FnZSA6CisgKiAgIEZDX05MX0FTWU5DX0VWRU5UCisgKgorICogTm90ZTogaWYgVmVuZG9yIFVuaXF1ZSBtZXNzYWdlLCAmZXZlbnRfZGF0YSB3aWxsIGJlICBzdGFydCBvZgorICogCSB2ZW5kb3IgdW5pcXVlIHBheWxvYWQsIGFuZCB0aGUgbGVuZ3RoIG9mIHRoZSBwYXlsb2FkIGlzCisgKiAgICAgICBwZXIgZXZlbnRfZGF0YWxlbgorICoKKyAqIE5vdGU6IFdoZW4gc3BlY2lmeWluZyB2ZW5kb3JfaWQsIGJlIHN1cmUgdG8gcmVhZCB0aGUgVmVuZG9yIFR5cGUgYW5kIElECisgKiAgIGZvcm1hdHRpbmcgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBpbiBzY3NpX25ldGxpbmsuaAorICovCitzdHJ1Y3QgZmNfbmxfZXZlbnQgeworCXN0cnVjdCBzY3NpX25sX2hkciBzbmxoOwkJLyogbXVzdCBiZSAxc3QgZWxlbWVudCAhICovCisJdWludDY0X3Qgc2Vjb25kczsKKwl1aW50NjRfdCB2ZW5kb3JfaWQ7CisJdWludDE2X3QgaG9zdF9ubzsKKwl1aW50MTZfdCBldmVudF9kYXRhbGVuOworCXVpbnQzMl90IGV2ZW50X251bTsKKwl1aW50MzJfdCBldmVudF9jb2RlOworCXVpbnQzMl90IGV2ZW50X2RhdGE7Cit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKHVpbnQ2NF90KSkpKTsKKworCisjZW5kaWYgLyogU0NTSV9ORVRMSU5LX0ZDX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3Njc2kvc2cuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zY3NpL3NnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBkYzBhZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zY3NpL3NnLmgKQEAgLTAsMCArMSwyNzUgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qCisgICBIaXN0b3J5OgorICAgIFN0YXJ0ZWQ6IEF1ZyA5IGJ5IExhd3JlbmNlIEZvYXJkIChlbnRyb3B5QHdvcmxkLnN0ZC5jb20pLCB0byBhbGxvdyB1c2VyCisgICAgIHByb2Nlc3MgY29udHJvbCBvZiBTQ1NJIGRldmljZXMuCisgICAgRGV2ZWxvcG1lbnQgU3BvbnNvcmVkIGJ5IEtpbGx5IENvcnAuIE5ZIE5ZCisqLworCisjaWZuZGVmIF9TQ1NJX1NHX0gKKyNkZWZpbmUgX1NDU0lfU0dfSAkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCisKKy8qIE5ldyBpbnRlcmZhY2UgaW50cm9kdWNlZCBpbiB0aGUgMy54IFNHIGRyaXZlcnMgZm9sbG93cyAqLworCisvKiBTYW1lIHN0cnVjdHVyZSBhcyB1c2VkIGJ5IHJlYWR2KCkgTGludXggc3lzdGVtIGNhbGwuIEl0IGRlZmluZXMgb25lCisgICBzY2F0dGVyLWdhdGhlciBlbGVtZW50LiAqLwordHlwZWRlZiBzdHJ1Y3Qgc2dfaW92ZWMKK3sKKyAgdm9pZCAqIGlvdl9iYXNlOyAgICAgICAgICAgIC8qIFN0YXJ0aW5nIGFkZHJlc3MgICovCisgIHNpemVfdCBpb3ZfbGVuOyAgICAgICAgICAgICAvKiBMZW5ndGggaW4gYnl0ZXMgICovCit9IHNnX2lvdmVjX3Q7CisKKwordHlwZWRlZiBzdHJ1Y3Qgc2dfaW9faGRyCit7CisgIGludCBpbnRlcmZhY2VfaWQ7ICAgICAgICAgICAvKiBbaV0gJ1MnIGZvciBTQ1NJIGdlbmVyaWMgKHJlcXVpcmVkKSAqLworICBpbnQgZHhmZXJfZGlyZWN0aW9uOyAgICAgICAgLyogW2ldIGRhdGEgdHJhbnNmZXIgZGlyZWN0aW9uICAqLworICB1bnNpZ25lZCBjaGFyIGNtZF9sZW47ICAgICAgLyogW2ldIFNDU0kgY29tbWFuZCBsZW5ndGggKCA8PSAxNiBieXRlcykgKi8KKyAgdW5zaWduZWQgY2hhciBteF9zYl9sZW47ICAgIC8qIFtpXSBtYXggbGVuZ3RoIHRvIHdyaXRlIHRvIHNicCAqLworICB1bnNpZ25lZCBzaG9ydCBpbnQgaW92ZWNfY291bnQ7IC8qIFtpXSAwIGltcGxpZXMgbm8gc2NhdHRlciBnYXRoZXIgKi8KKyAgdW5zaWduZWQgaW50IGR4ZmVyX2xlbjsgICAgIC8qIFtpXSBieXRlIGNvdW50IG9mIGRhdGEgdHJhbnNmZXIgKi8KKyAgdm9pZCAqIGR4ZmVycDsgICAgICAgICAgICAgIC8qIFtpXSwgWyppb10gcG9pbnRzIHRvIGRhdGEgdHJhbnNmZXIgbWVtb3J5CisJCQkJIG9yIHNjYXR0ZXIgZ2F0aGVyIGxpc3QgKi8KKyAgdW5zaWduZWQgY2hhciAqIGNtZHA7ICAgICAgIC8qIFtpXSwgWyppXSBwb2ludHMgdG8gY29tbWFuZCB0byBwZXJmb3JtICovCisgIHVuc2lnbmVkIGNoYXIgKiBzYnA7ICAgICAgICAvKiBbaV0sIFsqb10gcG9pbnRzIHRvIHNlbnNlX2J1ZmZlciBtZW1vcnkgKi8KKyAgdW5zaWduZWQgaW50IHRpbWVvdXQ7ICAgICAgIC8qIFtpXSBNQVhfVUlOVC0+bm8gdGltZW91dCAodW5pdDogbWlsbGlzZWMpICovCisgIHVuc2lnbmVkIGludCBmbGFnczsgICAgICAgICAvKiBbaV0gMCAtPiBkZWZhdWx0LCBzZWUgU0dfRkxBRy4uLiAqLworICBpbnQgcGFja19pZDsgICAgICAgICAgICAgICAgLyogW2ktPm9dIHVudXNlZCBpbnRlcm5hbGx5IChub3JtYWxseSkgKi8KKyAgdm9pZCAqIHVzcl9wdHI7ICAgICAgICAgICAgIC8qIFtpLT5vXSB1bnVzZWQgaW50ZXJuYWxseSAqLworICB1bnNpZ25lZCBjaGFyIHN0YXR1czsgICAgICAgLyogW29dIHNjc2kgc3RhdHVzICovCisgIHVuc2lnbmVkIGNoYXIgbWFza2VkX3N0YXR1czsvKiBbb10gc2hpZnRlZCwgbWFza2VkIHNjc2kgc3RhdHVzICovCisgIHVuc2lnbmVkIGNoYXIgbXNnX3N0YXR1czsgICAvKiBbb10gbWVzc2FnaW5nIGxldmVsIGRhdGEgKG9wdGlvbmFsKSAqLworICB1bnNpZ25lZCBjaGFyIHNiX2xlbl93cjsgICAgLyogW29dIGJ5dGUgY291bnQgYWN0dWFsbHkgd3JpdHRlbiB0byBzYnAgKi8KKyAgdW5zaWduZWQgc2hvcnQgaW50IGhvc3Rfc3RhdHVzOyAvKiBbb10gZXJyb3JzIGZyb20gaG9zdCBhZGFwdGVyICovCisgIHVuc2lnbmVkIHNob3J0IGludCBkcml2ZXJfc3RhdHVzOy8qIFtvXSBlcnJvcnMgZnJvbSBzb2Z0d2FyZSBkcml2ZXIgKi8KKyAgaW50IHJlc2lkOyAgICAgICAgICAgICAgICAgIC8qIFtvXSBkeGZlcl9sZW4gLSBhY3R1YWxfdHJhbnNmZXJyZWQgKi8KKyAgdW5zaWduZWQgaW50IGR1cmF0aW9uOyAgICAgIC8qIFtvXSB0aW1lIHRha2VuIGJ5IGNtZCAodW5pdDogbWlsbGlzZWMpICovCisgIHVuc2lnbmVkIGludCBpbmZvOyAgICAgICAgICAvKiBbb10gYXV4aWxpYXJ5IGluZm9ybWF0aW9uICovCit9IHNnX2lvX2hkcl90OworCisKKy8qIFVzZSBuZWdhdGl2ZSB2YWx1ZXMgdG8gZmxhZyBkaWZmZXJlbmNlIGZyb20gb3JpZ2luYWwgc2dfaGVhZGVyIHN0cnVjdHVyZS4gICovCisjZGVmaW5lIFNHX0RYRkVSX05PTkUgLTEgICAgICAgIC8qIGUuZy4gYSBTQ1NJIFRlc3QgVW5pdCBSZWFkeSBjb21tYW5kICovCisjZGVmaW5lIFNHX0RYRkVSX1RPX0RFViAtMiAgICAgIC8qIGUuZy4gYSBTQ1NJIFdSSVRFIGNvbW1hbmQgKi8KKyNkZWZpbmUgU0dfRFhGRVJfRlJPTV9ERVYgLTMgICAgLyogZS5nLiBhIFNDU0kgUkVBRCBjb21tYW5kICovCisjZGVmaW5lIFNHX0RYRkVSX1RPX0ZST01fREVWIC00IC8qIHRyZWF0ZWQgbGlrZSBTR19EWEZFUl9GUk9NX0RFViB3aXRoIHRoZQorCQkJCSAgIGFkZGl0aW9uYWwgcHJvcGVydHkgdGhhbiBkdXJpbmcgaW5kaXJlY3QKKwkJCQkgICBJTyB0aGUgdXNlciBidWZmZXIgaXMgY29waWVkIGludG8gdGhlCisJCQkJICAga2VybmVsIGJ1ZmZlcnMgYmVmb3JlIHRoZSB0cmFuc2ZlciAqLworCisKKy8qIGZvbGxvd2luZyBmbGFnIHZhbHVlcyBjYW4gYmUgIm9yIi1lZCB0b2dldGhlciAqLworI2RlZmluZSBTR19GTEFHX0RJUkVDVF9JTyAxICAgICAvKiBkZWZhdWx0IGlzIGluZGlyZWN0IElPICovCisjZGVmaW5lIFNHX0ZMQUdfTFVOX0lOSElCSVQgMiAgIC8qIGRlZmF1bHQgaXMgdG8gcHV0IGRldmljZSdzIGx1biBpbnRvICovCisJCQkJLyogdGhlIDJuZCBieXRlIG9mIFNDU0kgY29tbWFuZCAqLworI2RlZmluZSBTR19GTEFHX05PX0RYRkVSIDB4MTAwMDAgLyogbm8gdHJhbnNmZXIgb2Yga2VybmVsIGJ1ZmZlcnMgdG8vZnJvbSAqLworCQkJCS8qIHVzZXIgc3BhY2UgKGRlYnVnIGluZGlyZWN0IElPKSAqLworCisvKiBUaGUgZm9sbG93aW5nICdpbmZvJyB2YWx1ZXMgYXJlICJvciItZWQgdG9nZXRoZXIuICAqLworI2RlZmluZSBTR19JTkZPX09LX01BU0sJMHgxCisjZGVmaW5lIFNHX0lORk9fT0sJMHgwCS8qIG5vIHNlbnNlLCBob3N0IG5vciBkcml2ZXIgIm5vaXNlIiAqLworI2RlZmluZSBTR19JTkZPX0NIRUNLCTB4MSAgICAgLyogc29tZXRoaW5nIGFibm9ybWFsIGhhcHBlbmVkICovCisKKyNkZWZpbmUgU0dfSU5GT19ESVJFQ1RfSU9fTUFTSwkweDYKKyNkZWZpbmUgU0dfSU5GT19JTkRJUkVDVF9JTyAJMHgwCS8qIGRhdGEgeGZlciB2aWEga2VybmVsIGJ1ZmZlcnMgKG9yIG5vIHhmZXIpICovCisjZGVmaW5lIFNHX0lORk9fRElSRUNUX0lPIAkweDIJLyogZGlyZWN0IElPIHJlcXVlc3RlZCBhbmQgcGVyZm9ybWVkICovCisjZGVmaW5lIFNHX0lORk9fTUlYRURfSU8gCTB4NAkvKiBwYXJ0IGRpcmVjdCwgcGFydCBpbmRpcmVjdCBJTyAqLworCisKKy8qIFJlcXVlc3QgaW5mb3JtYXRpb24gYWJvdXQgYSBzcGVjaWZpYyBTRyBkZXZpY2UsIHVzZWQgYnkKKyAgIFNHX0dFVF9TQ1NJX0lEIGlvY3RsICgpLiAgKi8KK3N0cnVjdCBzZ19zY3NpX2lkIHsKKyAgLyogSG9zdCBudW1iZXIgYXMgaW4gInNjc2k8bj4iIHdoZXJlICduJyBpcyBvbmUgb2YgMCwgMSwgMiBldGMuICAqLworICBpbnQgaG9zdF9ubzsKKyAgaW50IGNoYW5uZWw7CisgIC8qIFNDU0kgaWQgb2YgdGFyZ2V0IGRldmljZS4gICovCisgIGludCBzY3NpX2lkOworICBpbnQgbHVuOworICAvKiBUWVBFXy4uLiBkZWZpbmVkIGluIDxzY3NpL3Njc2kuaD4uICAqLworICBpbnQgc2NzaV90eXBlOworICAvKiBIb3N0IChhZGFwdGVyKSBtYXhpbXVtIGNvbW1hbmRzIHBlciBsdW4uICAqLworICBzaG9ydCBpbnQgaF9jbWRfcGVyX2x1bjsKKyAgLyogRGV2aWNlIChvciBhZGFwdGVyKSBtYXhpbXVtIHF1ZXVlIGxlbmd0aC4gICovCisgIHNob3J0IGludCBkX3F1ZXVlX2RlcHRoOworICAvKiBVbnVzZWQsIHNldCB0byAwIGZvciBub3cuICAqLworICBpbnQgdW51c2VkWzJdOworfTsKKworLyogVXNlZCBieSBTR19HRVRfUkVRVUVTVF9UQUJMRSBpb2N0bCgpLiAgKi8KK3R5cGVkZWYgc3RydWN0IHNnX3JlcV9pbmZvIHsKKyAgICBjaGFyIHJlcV9zdGF0ZTsgICAgIC8qIDAgLT4gbm90IHVzZWQsIDEgLT4gd3JpdHRlbiwgMiAtPiByZWFkeSB0byByZWFkICovCisgICAgY2hhciBvcnBoYW47ICAgICAgICAvKiAwIC0+IG5vcm1hbCByZXF1ZXN0LCAxIC0+IGZyb20gaW50ZXJydXBlZCBTR19JTyAqLworICAgIGNoYXIgc2dfaW9fb3duZWQ7ICAgLyogMCAtPiBjb21wbGV0ZSB3aXRoIHJlYWQoKSwgMSAtPiBvd25lZCBieSBTR19JTyAqLworICAgIGNoYXIgcHJvYmxlbTsgICAgICAgLyogMCAtPiBubyBwcm9ibGVtIGRldGVjdGVkLCAxIC0+IGVycm9yIHRvIHJlcG9ydCAqLworICAgIGludCBwYWNrX2lkOyAgICAgICAgLyogcGFja19pZCBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCAqLworICAgIHZvaWQgKiB1c3JfcHRyOyAgICAgLyogdXNlciBwcm92aWRlZCBwb2ludGVyIChpbiBuZXcgaW50ZXJmYWNlKSAqLworICAgIHVuc2lnbmVkIGludCBkdXJhdGlvbjsgLyogbWlsbGlzZWNzIGVsYXBzZWQgc2luY2Ugd3JpdHRlbiAocmVxX3N0YXRlPT0xKQorCQkJICAgICAgb3IgcmVxdWVzdCBkdXJhdGlvbiAocmVxX3N0YXRlPT0yKSAqLworICAgIGludCB1bnVzZWQ7Cit9IHNnX3JlcV9pbmZvX3Q7CisKKworLyogSU9DVExzOiBUaG9zZSBpb2N0bHMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdGhlIFNHIDMueCBkcml2ZXJzIGZvbGxvdy4KKyBbVGhvc2UgdGhhdCBvbmx5IGFwcGx5IHRvIHRoZSBTRyAyLnggZHJpdmVycyBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS5dCisgKF9HRVRfcyB5aWVsZCByZXN1bHQgdmlhICdpbnQgKicgM3JkIGFyZ3VtZW50IHVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkKSAqLworCisjZGVmaW5lIFNHX0VNVUxBVEVEX0hPU1QgMHgyMjAzIC8qIHRydWUgZm9yIGVtdWxhdGVkIGhvc3QgYWRhcHRlciAoQVRBUEkpICovCisKKy8qIFVzZWQgdG8gY29uZmlndXJlIFNDU0kgY29tbWFuZCB0cmFuc2Zvcm1hdGlvbiBsYXllciBmb3IgQVRBUEkgZGV2aWNlcyAqLworLyogT25seSBzdXBwb3J0ZWQgYnkgdGhlIGlkZS1zY3NpIGRyaXZlciAqLworI2RlZmluZSBTR19TRVRfVFJBTlNGT1JNIDB4MjIwNCAvKiBOLkIuIDNyZCBhcmcgaXMgbm90IHBvaW50ZXIgYnV0IHZhbHVlOiAqLworCQkgICAgICAvKiAzcmQgYXJnID0gMCB0byBkaXNhYmxlIHRyYW5zZm9ybSwgMSB0byBlbmFibGUgaXQgKi8KKyNkZWZpbmUgU0dfR0VUX1RSQU5TRk9STSAweDIyMDUKKworI2RlZmluZSBTR19TRVRfUkVTRVJWRURfU0laRSAweDIyNzUgIC8qIHJlcXVlc3QgYSBuZXcgcmVzZXJ2ZWQgYnVmZmVyIHNpemUgKi8KKyNkZWZpbmUgU0dfR0VUX1JFU0VSVkVEX1NJWkUgMHgyMjcyICAvKiBhY3R1YWwgc2l6ZSBvZiByZXNlcnZlZCBidWZmZXIgKi8KKworLyogVGhlIGZvbGxvd2luZyBpb2N0bCBoYXMgYSAnc2dfc2NzaV9pZF90IConIG9iamVjdCBhcyBpdHMgM3JkIGFyZ3VtZW50LiAqLworI2RlZmluZSBTR19HRVRfU0NTSV9JRCAweDIyNzYgICAvKiBZaWVsZHMgZmQncyBidXMsIGNoYW4sIGRldiwgbHVuICsgdHlwZSAqLworLyogU0NTSSBpZCBpbmZvcm1hdGlvbiBjYW4gYWxzbyBiZSBvYnRhaW5lZCBmcm9tIFNDU0lfSU9DVExfR0VUX0lETFVOICovCisKKy8qIE92ZXJyaWRlIGhvc3Qgc2V0dGluZyBhbmQgYWx3YXlzIERNQSB1c2luZyBsb3cgbWVtb3J5ICggPDE2TUIgb24gaTM4NikgKi8KKyNkZWZpbmUgU0dfU0VUX0ZPUkNFX0xPV19ETUEgMHgyMjc5ICAvKiAwLT4gdXNlIGFkYXB0ZXIgc2V0dGluZywgMS0+IGZvcmNlICovCisjZGVmaW5lIFNHX0dFVF9MT1dfRE1BIDB4MjI3YSAgIC8qIDAtPiB1c2UgYWxsIHJhbSBmb3IgZG1hOyAxLT4gbG93IGRtYSByYW0gKi8KKworLyogV2hlbiBTR19TRVRfRk9SQ0VfUEFDS19JRCBzZXQgdG8gMSwgcGFja19pZCBpcyBpbnB1dCB0byByZWFkKCkgd2hpY2gKKyAgIHRyaWVzIHRvIGZldGNoIGEgcGFja2V0IHdpdGggYSBtYXRjaGluZyBwYWNrX2lkLCB3YWl0cywgb3IgcmV0dXJucyBFQUdBSU4uCisgICBJZiBwYWNrX2lkIGlzIC0xIHRoZW4gcmVhZCBvbGRlc3Qgd2FpdGluZy4gV2hlbiAuLi5GT1JDRV9QQUNLX0lEIHNldCB0byAwCisgICB0aGVuIHBhY2tfaWQgaWdub3JlZCBieSByZWFkKCkgYW5kIG9sZGVzdCByZWFkYWJsZSBmZXRjaGVkLiAqLworI2RlZmluZSBTR19TRVRfRk9SQ0VfUEFDS19JRCAweDIyN2IKKyNkZWZpbmUgU0dfR0VUX1BBQ0tfSUQgMHgyMjdjIC8qIFlpZWxkcyBvbGRlc3QgcmVhZGFibGUgcGFja19pZCAob3IgLTEpICovCisKKyNkZWZpbmUgU0dfR0VUX05VTV9XQUlUSU5HIDB4MjI3ZCAvKiBOdW1iZXIgb2YgY29tbWFuZHMgYXdhaXRpbmcgcmVhZCgpICovCisKKy8qIFlpZWxkcyBtYXggc2NhdHRlciBnYXRoZXIgdGFibGVzaXplIGFsbG93ZWQgYnkgY3VycmVudCBob3N0IGFkYXB0ZXIgKi8KKyNkZWZpbmUgU0dfR0VUX1NHX1RBQkxFU0laRSAweDIyN0YgIC8qIDAgaW1wbGllcyBjYW4ndCBkbyBzY2F0dGVyIGdhdGhlciAqLworCisjZGVmaW5lIFNHX0dFVF9WRVJTSU9OX05VTSAweDIyODIgLyogRXhhbXBsZTogdmVyc2lvbiAyLjEuMzQgeWllbGRzIDIwMTM0ICovCisKKy8qIFJldHVybnMgLUVCVVNZIGlmIG9jY3VwaWVkLiAzcmQgYXJndW1lbnQgcG9pbnRlciB0byBpbnQgKHNlZSBuZXh0KSAqLworI2RlZmluZSBTR19TQ1NJX1JFU0VUIDB4MjI4NAorLyogQXNzb2NpYXRlZCB2YWx1ZXMgdGhhdCBjYW4gYmUgZ2l2ZW4gdG8gU0dfU0NTSV9SRVNFVCBmb2xsb3cgKi8KKyNkZWZpbmUgU0dfU0NTSV9SRVNFVF9OT1RISU5HCTAKKyNkZWZpbmUgU0dfU0NTSV9SRVNFVF9ERVZJQ0UJMQorI2RlZmluZSBTR19TQ1NJX1JFU0VUX0JVUwkyCisjZGVmaW5lIFNHX1NDU0lfUkVTRVRfSE9TVAkzCisKKy8qIHN5bmNocm9ub3VzIFNDU0kgY29tbWFuZCBpb2N0bCwgKG9ubHkgaW4gdmVyc2lvbiAzIGludGVyZmFjZSkgKi8KKyNkZWZpbmUgU0dfSU8gMHgyMjg1ICAgLyogc2ltaWxhciBlZmZlY3QgYXMgd3JpdGUoKSBmb2xsb3dlZCBieSByZWFkKCkgKi8KKworI2RlZmluZSBTR19HRVRfUkVRVUVTVF9UQUJMRSAweDIyODYgICAvKiB5aWVsZHMgdGFibGUgb2YgYWN0aXZlIHJlcXVlc3RzICovCisKKy8qIEhvdyB0byB0cmVhdCBFSU5UUiBkdXJpbmcgU0dfSU8gaW9jdGwoKSwgb25seSBpbiBTRyAzLnggc2VyaWVzICovCisjZGVmaW5lIFNHX1NFVF9LRUVQX09SUEhBTiAweDIyODcgLyogMSAtPiBob2xkIGZvciByZWFkKCksIDAgLT4gZHJvcCAoZGVmKSAqLworI2RlZmluZSBTR19HRVRfS0VFUF9PUlBIQU4gMHgyMjg4CisKKworI2RlZmluZSBTR19TQ0FUVEVSX1NaICg4ICogNDA5NikgIC8qIFBBR0VfU0laRSBub3QgYXZhaWxhYmxlIHRvIHVzZXIgKi8KKy8qIExhcmdlc3Qgc2l6ZSAoaW4gYnl0ZXMpIGEgc2luZ2xlIHNjYXR0ZXItZ2F0aGVyIGxpc3QgZWxlbWVudCBjYW4gaGF2ZS4KKyAgIFRoZSB2YWx1ZSBtdXN0IGJlIGEgcG93ZXIgb2YgMiBhbmQgPD0gKFBBR0VfU0laRSAqIDMyKSBbMTMxMDcyIGJ5dGVzIG9uCisgICBpMzg2XS4gVGhlIG1pbmltdW0gdmFsdWUgaXMgUEFHRV9TSVpFLiBJZiBzY2F0dGVyLWdhdGhlciBub3Qgc3VwcG9ydGVkCisgICBieSBhZGFwdGVyIHRoZW4gdGhpcyB2YWx1ZSBpcyB0aGUgbGFyZ2VzdCBkYXRhIGJsb2NrIHRoYXQgY2FuIGJlCisgICByZWFkL3dyaXR0ZW4gYnkgYSBzaW5nbGUgc2NzaSBjb21tYW5kLiBUaGUgdXNlciBjYW4gZmluZCB0aGUgdmFsdWUgb2YKKyAgIFBBR0VfU0laRSBieSBjYWxsaW5nIGdldHBhZ2VzaXplKCkgZGVmaW5lZCBpbiB1bmlzdGQuaCAuICovCisKKyNkZWZpbmUgU0dfREVGQVVMVF9SRVRSSUVTIDEKKworLyogRGVmYXVsdHMsIGNvbW1lbnRlZCBpZiB0aGV5IGRpZmZlciBmcm9tIG9yaWdpbmFsIHNnIGRyaXZlciAqLworI2RlZmluZSBTR19ERUZfRk9SQ0VfTE9XX0RNQSAwICAvKiB3YXMgMSAtPiBtZW1vcnkgYmVsb3cgMTZNQiBvbiBpMzg2ICovCisjZGVmaW5lIFNHX0RFRl9GT1JDRV9QQUNLX0lEIDAKKyNkZWZpbmUgU0dfREVGX0tFRVBfT1JQSEFOIDAKKyNkZWZpbmUgU0dfREVGX1JFU0VSVkVEX1NJWkUgU0dfU0NBVFRFUl9TWiAvKiBsb2FkIHRpbWUgb3B0aW9uICovCisKKy8qIG1heGltdW0gb3V0c3RhbmRpbmcgcmVxdWVzdHMsIHdyaXRlKCkgeWllbGRzIEVET00gaWYgZXhjZWVkZWQgKi8KKyNkZWZpbmUgU0dfTUFYX1FVRVVFIDE2CisKKyNkZWZpbmUgU0dfQklHX0JVRkYgU0dfREVGX1JFU0VSVkVEX1NJWkUgICAgLyogZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKworLyogQWx0ZXJuYXRlIHN0eWxlIHR5cGUgbmFtZXMsICIuLi5fdCIgdmFyaWFudHMgcHJlZmVycmVkICovCit0eXBlZGVmIHN0cnVjdCBzZ19pb19oZHIgU2dfaW9faGRyOwordHlwZWRlZiBzdHJ1Y3Qgc2dfaW9fdmVjIFNnX2lvX3ZlYzsKK3R5cGVkZWYgc3RydWN0IHNnX3Njc2lfaWQgU2dfc2NzaV9pZDsKK3R5cGVkZWYgc3RydWN0IHNnX3JlcV9pbmZvIFNnX3JlcV9pbmZvOworCisKKy8qIHZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnYgKi8KKy8qICAgVGhlIG9sZGVyIFNHIGludGVyZmFjZSBiYXNlZCBvbiB0aGUgJ3NnX2hlYWRlcicgc3RydWN0dXJlIGZvbGxvd3MuICAgKi8KKy8qIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4gKi8KKworI2RlZmluZSBTR19NQVhfU0VOU0UgMTYgICAvKiB0aGlzIG9ubHkgYXBwbGllcyB0byB0aGUgc2dfaGVhZGVyIGludGVyZmFjZSAqLworCitzdHJ1Y3Qgc2dfaGVhZGVyCisgeworICAgLyogTGVuZ3RoIG9mIGluY29taW5nIHBhY2tldCAoaW5jbHVkaW5nIGhlYWRlcikuICAqLworICAgaW50IHBhY2tfbGVuOworICAgLyogTWF4aW1hbCBsZW5ndGggb2YgZXhwZWN0ZWQgcmVwbHkuICAqLworICAgaW50IHJlcGx5X2xlbjsKKyAgIC8qIElkIG51bWJlciBvZiBwYWNrZXQuICAqLworICAgaW50IHBhY2tfaWQ7CisgICAvKiAwPT1vaywgb3RoZXJ3aXNlIGVycm9yIG51bWJlci4gICovCisgICBpbnQgcmVzdWx0OworICAgLyogRm9yY2UgMTIgYnl0ZSBjb21tYW5kIGxlbmd0aCBmb3IgZ3JvdXAgNiAmIDcgY29tbWFuZHMuICAqLworICAgdW5zaWduZWQgaW50IHR3ZWx2ZV9ieXRlOjE7CisgICAvKiBTQ1NJIHN0YXR1cyBmcm9tIHRhcmdldC4gICovCisgICB1bnNpZ25lZCBpbnQgdGFyZ2V0X3N0YXR1czo1OworICAgLyogSG9zdCBzdGF0dXMgKHNlZSAiRElEIiBjb2RlcykuICAqLworICAgdW5zaWduZWQgaW50IGhvc3Rfc3RhdHVzOjg7CisgICAvKiBEcml2ZXIgc3RhdHVzK3N1Z2dlc3Rpb24uICAqLworICAgdW5zaWduZWQgaW50IGRyaXZlcl9zdGF0dXM6ODsKKyAgIC8qIFVudXNlZC4gICovCisgICB1bnNpZ25lZCBpbnQgb3RoZXJfZmxhZ3M6MTA7CisgICAvKiBPdXRwdXQgaW4gMyBjYXNlczoKKyAgICAgIHdoZW4gdGFyZ2V0X3N0YXR1cyBpcyBDSEVDS19DT05ESVRJT04gb3IKKyAgICAgIHdoZW4gdGFyZ2V0X3N0YXR1cyBpcyBDT01NQU5EX1RFUk1JTkFURUQgb3IKKyAgICAgIHdoZW4gKGRyaXZlcl9zdGF0dXMgJiBEUklWRVJfU0VOU0UpIGlzIHRydWUuICAqLworICAgdW5zaWduZWQgY2hhciBzZW5zZV9idWZmZXJbU0dfTUFYX1NFTlNFXTsKKyB9OworCisKKy8qIElPQ1RMczogVGhlIGZvbGxvd2luZyBhcmUgbm90IHJlcXVpcmVkIChvciBpZ25vcmVkKSB3aGVuIHRoZSBzZ19pb19oZHJfdAorCSAgIGludGVyZmFjZSBpcyB1c2VkLiBUaGV5IGFyZSBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGgKKwkgICB0aGUgb3JpZ2luYWwgYW5kIHZlcnNpb24gMiBkcml2ZXJzLiAqLworCisjZGVmaW5lIFNHX1NFVF9USU1FT1VUCQkweDIyMDEJLyogU2V0IHRpbWVvdXQ7ICooaW50ICopYXJnPT10aW1lb3V0LiAgKi8KKyNkZWZpbmUgU0dfR0VUX1RJTUVPVVQJCTB4MjIwMgkvKiBHZXQgdGltZW91dDsgcmV0dXJuIHRpbWVvdXQuICAqLworCisvKiBHZXQvc2V0IGNvbW1hbmQgcXVldWluZyBzdGF0ZSBwZXIgZmQgKGRlZmF1bHQgaXMgU0dfREVGX0NPTU1BTkRfUSkuICovCisjZGVmaW5lIFNHX0dFVF9DT01NQU5EX1EJMHgyMjcwCS8qIFlpZWxkcyAwIChxdWV1aW5nIG9mZikgb3IgMSAob24pLiAgKi8KKyNkZWZpbmUgU0dfU0VUX0NPTU1BTkRfUSAJMHgyMjcxCS8qIENoYW5nZSBxdWV1aW5nIHN0YXRlIHdpdGggMCBvciAxLiAgKi8KKworLyogVHVybiBvbiBlcnJvciBzZW5zZSB0cmFjZSAoMS4uOCksIGR1bXAgdGhpcyBkZXZpY2UgdG8gbG9nL2NvbnNvbGUgKDkpCisgICBvciBkdW1wIGFsbCBzZyBkZXZpY2Ugc3RhdGVzICggPjkgKSB0byBsb2cvY29uc29sZS4gICovCisjZGVmaW5lIFNHX1NFVF9ERUJVRwkJMHgyMjdlCS8qIDAgLT4gdHVybiBvZmYgZGVidWcgKi8KKworI2RlZmluZSBTR19ORVhUX0NNRF9MRU4JCTB4MjI4MwkvKiBPdmVycmlkZSBTQ1NJIGNvbW1hbmQgbGVuZ3RoIHdpdGggZ2l2ZW4KKwkJCQkJICAgbnVtYmVyIG9uIHRoZSBuZXh0IHdyaXRlKCkgb24gdGhpcyBmaWxlCisJCQkJCSAgIGRlc2NyaXB0b3IuICAqLworCisvKiBEZWZhdWx0cywgY29tbWVudGVkIGlmIHRoZXkgZGlmZmVyIGZyb20gb3JpZ2luYWwgc2cgZHJpdmVyICovCisjZGVmaW5lIFNHX0RFRkFVTFRfVElNRU9VVCAoNjAqSFopIC8qIEhaID09ICdqaWZmaWVzIGluIDEgc2Vjb25kJyAqLworI2RlZmluZSBTR19ERUZfQ09NTUFORF9RIDAgICAgIC8qIGNvbW1hbmQgcXVldWluZyBpcyBhbHdheXMgb24gd2hlbgorCQkJCSAgdGhlIG5ldyBpbnRlcmZhY2UgaXMgdXNlZCAqLworI2RlZmluZSBTR19ERUZfVU5ERVJSVU5fRkxBRyAwCisKKworI2VuZGlmCS8qIHNjc2kvc2cuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3NlYXJjaC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3NlYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZmJhNjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc2VhcmNoLmgKQEAgLTAsMCArMSwxNzUgQEAKKy8qIERlY2xhcmF0aW9ucyBmb3IgU3lzdGVtIFYgc3R5bGUgc2VhcmNoaW5nIGZ1bmN0aW9ucy4KKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9TRUFSQ0hfSAorI2RlZmluZQlfU0VBUkNIX0ggMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworI2RlZmluZSBfX25lZWRfc2l6ZV90CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKK19fQkVHSU5fREVDTFMKKworI2lmIGRlZmluZWQgX19VU0VfU1ZJRCB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOX0VYVEVOREVECisvKiBQcm90b3R5cGUgc3RydWN0dXJlIGZvciBhIGxpbmtlZC1saXN0IGRhdGEgc3RydWN0dXJlLgorICAgVGhpcyBpcyB0aGUgdHlwZSB1c2VkIGJ5IHRoZSBgaW5zcXVlJyBhbmQgYHJlbXF1ZScgZnVuY3Rpb25zLiAgKi8KKworIyBpZmRlZiBfX1VTRV9HTlUKK3N0cnVjdCBxZWxlbQorICB7CisgICAgc3RydWN0IHFlbGVtICpxX2Zvcnc7CisgICAgc3RydWN0IHFlbGVtICpxX2JhY2s7CisgICAgY2hhciBxX2RhdGFbMV07CisgIH07CisjIGVuZGlmCisKKworLyogSW5zZXJ0IEVMRU0gaW50byBhIGRvdWJseS1saW5rZWQgbGlzdCwgYWZ0ZXIgUFJFVi4gICovCitleHRlcm4gdm9pZCBpbnNxdWUgKHZvaWQgKl9fZWxlbSwgdm9pZCAqX19wcmV2KSBfX1RIUk9XOworCisvKiBVbmxpbmsgRUxFTSBmcm9tIHRoZSBkb3VibHktbGlua2VkIGxpc3QgdGhhdCBpdCBpcyBpbi4gICovCitleHRlcm4gdm9pZCByZW1xdWUgKHZvaWQgKl9fZWxlbSkgX19USFJPVzsKKyNlbmRpZgorCisKKy8qIEZvciB1c2Ugd2l0aCBoc2VhcmNoKDMpLiAgKi8KKyNpZm5kZWYgX19DT01QQVJfRk5fVAorIyBkZWZpbmUgX19DT01QQVJfRk5fVAordHlwZWRlZiBpbnQgKCpfX2NvbXBhcl9mbl90KSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKTsKKworIyBpZmRlZglfX1VTRV9HTlUKK3R5cGVkZWYgX19jb21wYXJfZm5fdCBjb21wYXJpc29uX2ZuX3Q7CisjIGVuZGlmCisjZW5kaWYKKworLyogQWN0aW9uIHdoaWNoIHNoYWxsIGJlIHBlcmZvcm1lZCBpbiB0aGUgY2FsbCB0aGUgaHNlYXJjaC4gICovCit0eXBlZGVmIGVudW0KKyAgeworICAgIEZJTkQsCisgICAgRU5URVIKKyAgfQorQUNUSU9OOworCit0eXBlZGVmIHN0cnVjdCBlbnRyeQorICB7CisgICAgY2hhciAqa2V5OworICAgIHZvaWQgKmRhdGE7CisgIH0KK0VOVFJZOworCisvKiBPcGFxdWUgdHlwZSBmb3IgaW50ZXJuYWwgdXNlLiAgKi8KK3N0cnVjdCBfRU5UUlk7CisKKy8qIEZhbWlseSBvZiBoYXNoIHRhYmxlIGhhbmRsaW5nIGZ1bmN0aW9ucy4gIFRoZSBmdW5jdGlvbnMgYWxzbworICAgaGF2ZSByZWVudHJhbnQgY291bnRlcnBhcnRzIGVuZGluZyB3aXRoIF9yLiAgVGhlIG5vbi1yZWVudHJhbnQKKyAgIGZ1bmN0aW9ucyBhbGwgd29yayBvbiBhIHNpZ25sZSBpbnRlcm5hbCBoYXNoaW5nIHRhYmxlLiAgKi8KKworLyogU2VhcmNoIGZvciBlbnRyeSBtYXRjaGluZyBJVEVNLmtleSBpbiBpbnRlcm5hbCBoYXNoIHRhYmxlLiAgSWYKKyAgIEFDVElPTiBpcyBgRklORCcgcmV0dXJuIGZvdW5kIGVudHJ5IG9yIHNpZ25hbCBlcnJvciBieSByZXR1cm5pbmcKKyAgIE5VTEwuICBJZiBBQ1RJT04gaXMgYEVOVEVSJyByZXBsYWNlIGV4aXN0aW5nIGRhdGEgKGlmIGFueSkgd2l0aAorICAgSVRFTS5kYXRhLiAgKi8KK2V4dGVybiBFTlRSWSAqaHNlYXJjaCAoRU5UUlkgX19pdGVtLCBBQ1RJT04gX19hY3Rpb24pIF9fVEhST1c7CisKKy8qIENyZWF0ZSBhIG5ldyBoYXNoaW5nIHRhYmxlIHdoaWNoIHdpbGwgYXQgbW9zdCBjb250YWluIE5FTCBlbGVtZW50cy4gICovCitleHRlcm4gaW50IGhjcmVhdGUgKHNpemVfdCBfX25lbCkgX19USFJPVzsKKworLyogRGVzdHJveSBjdXJyZW50IGludGVybmFsIGhhc2hpbmcgdGFibGUuICAqLworZXh0ZXJuIHZvaWQgaGRlc3Ryb3kgKHZvaWQpIF9fVEhST1c7CisKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIERhdGEgdHlwZSBmb3IgcmVlbnRyYW50IGZ1bmN0aW9ucy4gICovCitzdHJ1Y3QgaHNlYXJjaF9kYXRhCisgIHsKKyAgICBzdHJ1Y3QgX0VOVFJZICp0YWJsZTsKKyAgICB1bnNpZ25lZCBpbnQgc2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgZmlsbGVkOworICB9OworCisvKiBSZWVudHJhbnQgdmVyc2lvbnMgd2hpY2ggY2FuIGhhbmRsZSBtdWx0aXBsZSBoYXNoaW5nIHRhYmxlcyBhdCB0aGUKKyAgIHNhbWUgdGltZS4gICovCitleHRlcm4gaW50IGhzZWFyY2hfciAoRU5UUlkgX19pdGVtLCBBQ1RJT04gX19hY3Rpb24sIEVOVFJZICoqX19yZXR2YWwsCisJCSAgICAgIHN0cnVjdCBoc2VhcmNoX2RhdGEgKl9faHRhYikgX19USFJPVzsKK2V4dGVybiBpbnQgaGNyZWF0ZV9yIChzaXplX3QgX19uZWwsIHN0cnVjdCBoc2VhcmNoX2RhdGEgKl9faHRhYikgX19USFJPVzsKK2V4dGVybiB2b2lkIGhkZXN0cm95X3IgKHN0cnVjdCBoc2VhcmNoX2RhdGEgKl9faHRhYikgX19USFJPVzsKKyNlbmRpZgorCisKKy8qIFRoZSB0c2VhcmNoIHJvdXRpbmVzIGFyZSB2ZXJ5IGludGVyZXN0aW5nLiBUaGV5IG1ha2UgbWFueQorICAgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGNvbXBpbGVyLiAgSXQgYXNzdW1lcyB0aGF0IHRoZSBmaXJzdCBmaWVsZAorICAgaW4gbm9kZSBtdXN0IGJlIHRoZSAia2V5IiBmaWVsZCwgd2hpY2ggcG9pbnRzIHRvIHRoZSBkYXR1bS4KKyAgIEV2ZXJ5dGhpbmcgZGVwZW5kcyBvbiB0aGF0LiAgKi8KKy8qIEZvciB0c2VhcmNoICovCit0eXBlZGVmIGVudW0KK3sKKyAgcHJlb3JkZXIsCisgIHBvc3RvcmRlciwKKyAgZW5kb3JkZXIsCisgIGxlYWYKK30KK1ZJU0lUOworCisvKiBTZWFyY2ggZm9yIGFuIGVudHJ5IG1hdGNoaW5nIHRoZSBnaXZlbiBLRVkgaW4gdGhlIHRyZWUgcG9pbnRlZCB0bworICAgYnkgKlJPT1RQIGFuZCBpbnNlcnQgYSBuZXcgZWxlbWVudCBpZiBub3QgZm91bmQuICAqLworZXh0ZXJuIHZvaWQgKnRzZWFyY2ggKF9fY29uc3Qgdm9pZCAqX19rZXksIHZvaWQgKipfX3Jvb3RwLAorCQkgICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKKworLyogU2VhcmNoIGZvciBhbiBlbnRyeSBtYXRjaGluZyB0aGUgZ2l2ZW4gS0VZIGluIHRoZSB0cmVlIHBvaW50ZWQgdG8KKyAgIGJ5ICpST09UUC4gIElmIG5vIG1hdGNoaW5nIGVudHJ5IGlzIGF2YWlsYWJsZSByZXR1cm4gTlVMTC4gICovCitleHRlcm4gdm9pZCAqdGZpbmQgKF9fY29uc3Qgdm9pZCAqX19rZXksIHZvaWQgKl9fY29uc3QgKl9fcm9vdHAsCisJCSAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKKworLyogUmVtb3ZlIHRoZSBlbGVtZW50IG1hdGNoaW5nIEtFWSBmcm9tIHRoZSB0cmVlIHBvaW50ZWQgdG8gYnkgKlJPT1RQLiAgKi8KK2V4dGVybiB2b2lkICp0ZGVsZXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19rZXksCisJCSAgICAgIHZvaWQgKipfX3Jlc3RyaWN0IF9fcm9vdHAsCisJCSAgICAgIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOworCisjaWZuZGVmIF9fQUNUSU9OX0ZOX1QKKyMgZGVmaW5lIF9fQUNUSU9OX0ZOX1QKK3R5cGVkZWYgdm9pZCAoKl9fYWN0aW9uX2ZuX3QpIChfX2NvbnN0IHZvaWQgKl9fbm9kZXAsIFZJU0lUIF9fdmFsdWUsCisJCQkgICAgICAgaW50IF9fbGV2ZWwpOworI2VuZGlmCisKKy8qIFdhbGsgdGhyb3VnaCB0aGUgd2hvbGUgdHJlZSBhbmQgY2FsbCB0aGUgQUNUSU9OIGNhbGxiYWNrIGZvciBldmVyeSBub2RlCisgICBvciBsZWFmLiAgKi8KK2V4dGVybiB2b2lkIHR3YWxrIChfX2NvbnN0IHZvaWQgKl9fcm9vdCwgX19hY3Rpb25fZm5fdCBfX2FjdGlvbik7CisKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIENhbGxiYWNrIHR5cGUgZm9yIGZ1bmN0aW9uIHRvIGZyZWUgYSB0cmVlIG5vZGUuICBJZiB0aGUga2V5cyBhcmUgYXRvbWljCisgICBkYXRhIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGRvIG5vdGhpbmcuICAqLwordHlwZWRlZiB2b2lkICgqX19mcmVlX2ZuX3QpICh2b2lkICpfX25vZGVwKTsKKworLyogRGVzdHJveSB0aGUgd2hvbGUgdHJlZSwgY2FsbCBGUkVFRkNUIGZvciBlYWNoIG5vZGUgb3IgbGVhZi4gICovCitleHRlcm4gdm9pZCB0ZGVzdHJveSAodm9pZCAqX19yb290LCBfX2ZyZWVfZm5fdCBfX2ZyZWVmY3QpOworI2VuZGlmCisKKworLyogUGVyZm9ybSBsaW5lYXIgc2VhcmNoIGZvciBLRVkgYnkgY29tcGFyaW5nIGJ5IENPTVBBUiBpbiBhbiBhcnJheQorICAgW0JBU0UsQkFTRStOTUVNQipTSVpFKS4gICovCitleHRlcm4gdm9pZCAqbGZpbmQgKF9fY29uc3Qgdm9pZCAqX19rZXksIF9fY29uc3Qgdm9pZCAqX19iYXNlLAorCQkgICAgc2l6ZV90ICpfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKKworLyogUGVyZm9ybSBsaW5lYXIgc2VhcmNoIGZvciBLRVkgYnkgY29tcGFyaW5nIGJ5IENPTVBBUiBmdW5jdGlvbiBpbgorICAgYXJyYXkgW0JBU0UsQkFTRStOTUVNQipTSVpFKSBhbmQgaW5zZXJ0IGVudHJ5IGlmIG5vdCBmb3VuZC4gICovCitleHRlcm4gdm9pZCAqbHNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tleSwgdm9pZCAqX19iYXNlLAorCQkgICAgICBzaXplX3QgKl9fbm1lbWIsIHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogc2VhcmNoLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zZW1hcGhvcmUuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zZW1hcGhvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjEzNzI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3NlbWFwaG9yZS5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfU0VNQVBIT1JFX0gKKyNkZWZpbmUgX1NFTUFQSE9SRV9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgX19VU0VfWE9QRU4ySworIyBkZWZpbmUgX19uZWVkX3RpbWVzcGVjCisjIGluY2x1ZGUgPHRpbWUuaD4KKyNlbmRpZgorCisvKiBHZXQgdGhlIGRlZmluaXRpb24gZm9yIHNlbV90LiAgKi8KKyNpbmNsdWRlIDxiaXRzL3NlbWFwaG9yZS5oPgorCisKK19fQkVHSU5fREVDTFMKKworLyogSW5pdGlhbGl6ZSBzZW1hcGhvcmUgb2JqZWN0IFNFTSB0byBWQUxVRS4gIElmIFBTSEFSRUQgdGhlbiBzaGFyZSBpdAorICAgd2l0aCBvdGhlciBwcm9jZXNzZXMuICAqLworZXh0ZXJuIGludCBzZW1faW5pdCAoc2VtX3QgKl9fc2VtLCBpbnQgX19wc2hhcmVkLCB1bnNpZ25lZCBpbnQgX192YWx1ZSkKKyAgICAgX19USFJPVzsKKy8qIEZyZWUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBzZW1hcGhvcmUgb2JqZWN0IFNFTS4gICovCitleHRlcm4gaW50IHNlbV9kZXN0cm95IChzZW1fdCAqX19zZW0pIF9fVEhST1c7CisKKy8qIE9wZW4gYSBuYW1lZCBzZW1hcGhvcmUgTkFNRSB3aXRoIG9wZW4gZmxhZ3MgT0ZMQUcuICAqLworZXh0ZXJuIHNlbV90ICpzZW1fb3BlbiAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX29mbGFnLCAuLi4pIF9fVEhST1c7CisKKy8qIENsb3NlIGRlc2NyaXB0b3IgZm9yIG5hbWVkIHNlbWFwaG9yZSBTRU0uICAqLworZXh0ZXJuIGludCBzZW1fY2xvc2UgKHNlbV90ICpfX3NlbSkgX19USFJPVzsKKworLyogUmVtb3ZlIG5hbWVkIHNlbWFwaG9yZSBOQU1FLiAgKi8KK2V4dGVybiBpbnQgc2VtX3VubGluayAoX19jb25zdCBjaGFyICpfX25hbWUpIF9fVEhST1c7CisKKy8qIFdhaXQgZm9yIFNFTSBiZWluZyBwb3N0ZWQuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGgKKyAgIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBzZW1fd2FpdCAoc2VtX3QgKl9fc2VtKTsKKworI2lmZGVmIF9fVVNFX1hPUEVOMksKKy8qIFNpbWlsYXIgdG8gYHNlbV93YWl0JyBidXQgd2FpdCBvbmx5IHVudGlsIEFCU1RJTUUuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGgKKyAgIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBzZW1fdGltZWR3YWl0IChzZW1fdCAqX19yZXN0cmljdCBfX3NlbSwKKwkJCSAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QgX19hYnN0aW1lKTsKKyNlbmRpZgorCisvKiBUZXN0IHdoZXRoZXIgU0VNIGlzIHBvc3RlZC4gICovCitleHRlcm4gaW50IHNlbV90cnl3YWl0IChzZW1fdCAqX19zZW0pIF9fVEhST1c7CisKKy8qIFBvc3QgU0VNLiAgKi8KK2V4dGVybiBpbnQgc2VtX3Bvc3QgKHNlbV90ICpfX3NlbSkgX19USFJPVzsKKworLyogR2V0IGN1cnJlbnQgdmFsdWUgb2YgU0VNIGFuZCBzdG9yZSBpdCBpbiAqU1ZBTC4gICovCitleHRlcm4gaW50IHNlbV9nZXR2YWx1ZSAoc2VtX3QgKl9fcmVzdHJpY3QgX19zZW0sIGludCAqX19yZXN0cmljdCBfX3N2YWwpCisgICAgIF9fVEhST1c7CisKKworX19FTkRfREVDTFMKKworI2VuZGlmCS8qIHNlbWFwaG9yZS5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc2V0am1wLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc2V0am1wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxMDM3ZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zZXRqbXAuaApAQCAtMCwwICsxLDExNiBAQAorLyogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTksIDIwMDEsIDIwMDIsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qCisgKglJU08gQzk5IFN0YW5kYXJkOiA3LjEzIE5vbmxvY2FsIGp1bXBzCTxzZXRqbXAuaD4KKyAqLworCisjaWZuZGVmCV9TRVRKTVBfSAorI2RlZmluZQlfU0VUSk1QX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworX19CRUdJTl9ERUNMUworCisjaW5jbHVkZSA8Yml0cy9zZXRqbXAuaD4JCS8qIEdldCBgX19qbXBfYnVmJy4gICovCisjaW5jbHVkZSA8Yml0cy9zaWdzZXQuaD4JCS8qIEdldCBgX19zaWdzZXRfdCcuICAqLworCisKKy8qIENhbGxpbmcgZW52aXJvbm1lbnQsIHBsdXMgcG9zc2libHkgYSBzYXZlZCBzaWduYWwgbWFzay4gICovCitzdHJ1Y3QgX19qbXBfYnVmX3RhZworICB7CisgICAgLyogTk9URTogVGhlIG1hY2hpbmUtZGVwZW5kZW50IGRlZmluaXRpb25zIG9mIGBfX3NpZ3NldGptcCcKKyAgICAgICBhc3N1bWUgdGhhdCBhIGBqbXBfYnVmJyBiZWdpbnMgd2l0aCBhIGBfX2ptcF9idWYnIGFuZCB0aGF0CisgICAgICAgYF9fbWFza193YXNfc2F2ZWQnIGZvbGxvd3MgaXQuICBEbyBub3QgbW92ZSB0aGVzZSBtZW1iZXJzCisgICAgICAgb3IgYWRkIG90aGVycyBiZWZvcmUgaXQuICAqLworICAgIF9fam1wX2J1ZiBfX2ptcGJ1ZjsJCS8qIENhbGxpbmcgZW52aXJvbm1lbnQuICAqLworICAgIGludCBfX21hc2tfd2FzX3NhdmVkOwkvKiBTYXZlZCB0aGUgc2lnbmFsIG1hc2s/ICAqLworICAgIF9fc2lnc2V0X3QgX19zYXZlZF9tYXNrOwkvKiBTYXZlZCBzaWduYWwgbWFzay4gICovCisgIH07CisKKworX19CRUdJTl9OQU1FU1BBQ0VfU1RECisKK3R5cGVkZWYgc3RydWN0IF9fam1wX2J1Zl90YWcgam1wX2J1ZlsxXTsKKworLyogU3RvcmUgdGhlIGNhbGxpbmcgZW52aXJvbm1lbnQgaW4gRU5WLCBhbHNvIHNhdmluZyB0aGUgc2lnbmFsIG1hc2suCisgICBSZXR1cm4gMC4gICovCitleHRlcm4gaW50IHNldGptcCAoam1wX2J1ZiBfX2VudikgX19USFJPVzsKKworX19FTkRfTkFNRVNQQUNFX1NURAorCisvKiBTdG9yZSB0aGUgY2FsbGluZyBlbnZpcm9ubWVudCBpbiBFTlYsIGFsc28gc2F2aW5nIHRoZQorICAgc2lnbmFsIG1hc2sgaWYgU0FWRU1BU0sgaXMgbm9uemVyby4gIFJldHVybiAwLgorICAgVGhpcyBpcyB0aGUgaW50ZXJuYWwgbmFtZSBmb3IgYHNpZ3NldGptcCcuICAqLworZXh0ZXJuIGludCBfX3NpZ3NldGptcCAoc3RydWN0IF9fam1wX2J1Zl90YWcgX19lbnZbMV0sIGludCBfX3NhdmVtYXNrKSBfX1RIUk9XOworCisjaWZuZGVmCV9fRkFWT1JfQlNECisvKiBTdG9yZSB0aGUgY2FsbGluZyBlbnZpcm9ubWVudCBpbiBFTlYsIG5vdCBzYXZpbmcgdGhlIHNpZ25hbCBtYXNrLgorICAgUmV0dXJuIDAuICAqLworZXh0ZXJuIGludCBfc2V0am1wIChzdHJ1Y3QgX19qbXBfYnVmX3RhZyBfX2VudlsxXSkgX19USFJPVzsKKworLyogRG8gbm90IHNhdmUgdGhlIHNpZ25hbCBtYXNrLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBgX3NldGptcCcKKyAgIEJTRCBmdW5jdGlvbi4gICovCisjIGRlZmluZSBzZXRqbXAoZW52KQlfc2V0am1wIChlbnYpCisjZWxzZQorLyogV2UgYXJlIGluIDQuMyBCU0QtY29tcGF0aWJpbGl0eSBtb2RlIGluIHdoaWNoIGBzZXRqbXAnCisgICBzYXZlcyB0aGUgc2lnbmFsIG1hc2sgbGlrZSBgc2lnc2V0am1wIChFTlYsIDEpJy4gIFdlIGhhdmUgdG8KKyAgIGRlZmluZSBhIG1hY3JvIHNpbmNlIElTTyBDIHNheXMgYHNldGptcCcgaXMgb25lLiAgKi8KKyMgZGVmaW5lIHNldGptcChlbnYpCXNldGptcCAoZW52KQorI2VuZGlmIC8qIEZhdm9yIEJTRC4gICovCisKKworX19CRUdJTl9OQU1FU1BBQ0VfU1RECisKKy8qIEp1bXAgdG8gdGhlIGVudmlyb25tZW50IHNhdmVkIGluIEVOViwgbWFraW5nIHRoZQorICAgYHNldGptcCcgY2FsbCB0aGVyZSByZXR1cm4gVkFMLCBvciAxIGlmIFZBTCBpcyAwLiAgKi8KK2V4dGVybiB2b2lkIGxvbmdqbXAgKHN0cnVjdCBfX2ptcF9idWZfdGFnIF9fZW52WzFdLCBpbnQgX192YWwpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOworCitfX0VORF9OQU1FU1BBQ0VfU1RECisKKyNpZiBkZWZpbmVkIF9fVVNFX0JTRCB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOCisvKiBTYW1lLiAgVXN1YWxseSBgX2xvbmdqbXAnIGlzIHVzZWQgd2l0aCBgX3NldGptcCcsIHdoaWNoIGRvZXMgbm90IHNhdmUKKyAgIHRoZSBzaWduYWwgbWFzay4gIEJ1dCBpdCBpcyBob3cgRU5WIHdhcyBzYXZlZCB0aGF0IGRldGVybWluZXMgd2hldGhlcgorICAgYGxvbmdqbXAnIHJlc3RvcmVzIHRoZSBtYXNrOyBgX2xvbmdqbXAnIGlzIGp1c3QgYW4gYWxpYXMuICAqLworZXh0ZXJuIHZvaWQgX2xvbmdqbXAgKHN0cnVjdCBfX2ptcF9idWZfdGFnIF9fZW52WzFdLCBpbnQgX192YWwpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOworI2VuZGlmCisKKworI2lmZGVmCV9fVVNFX1BPU0lYCisvKiBVc2UgdGhlIHNhbWUgdHlwZSBmb3IgYGptcF9idWYnIGFuZCBgc2lnam1wX2J1ZicuCisgICBUaGUgYF9fbWFza193YXNfc2F2ZWQnIGZsYWcgZGV0ZXJtaW5lcyB3aGV0aGVyCisgICBvciBub3QgYGxvbmdqbXAnIHdpbGwgcmVzdG9yZSB0aGUgc2lnbmFsIG1hc2suICAqLwordHlwZWRlZiBzdHJ1Y3QgX19qbXBfYnVmX3RhZyBzaWdqbXBfYnVmWzFdOworCisvKiBTdG9yZSB0aGUgY2FsbGluZyBlbnZpcm9ubWVudCBpbiBFTlYsIGFsc28gc2F2aW5nIHRoZQorICAgc2lnbmFsIG1hc2sgaWYgU0FWRU1BU0sgaXMgbm9uemVyby4gIFJldHVybiAwLiAgKi8KKyMgZGVmaW5lIHNpZ3NldGptcChlbnYsIHNhdmVtYXNrKQlfX3NpZ3NldGptcCAoZW52LCBzYXZlbWFzaykKKworLyogSnVtcCB0byB0aGUgZW52aXJvbm1lbnQgc2F2ZWQgaW4gRU5WLCBtYWtpbmcgdGhlCisgICBzaWdzZXRqbXAgY2FsbCB0aGVyZSByZXR1cm4gVkFMLCBvciAxIGlmIFZBTCBpcyAwLgorICAgUmVzdG9yZSB0aGUgc2lnbmFsIG1hc2sgaWYgdGhhdCBzaWdzZXRqbXAgY2FsbCBzYXZlZCBpdC4KKyAgIFRoaXMgaXMganVzdCBhbiBhbGlhcyBgbG9uZ2ptcCcuICAqLworZXh0ZXJuIHZvaWQgc2lnbG9uZ2ptcCAoc2lnam1wX2J1ZiBfX2VudiwgaW50IF9fdmFsKQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKKyNlbmRpZiAvKiBVc2UgUE9TSVguICAqLworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogc2V0am1wLmggICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc2d0dHkuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zZ3R0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMmJjNDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc2d0dHkuaApAQCAtMCwwICsxLDQxIEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTYsIDE5OTgsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYJX1NHVFRZX0gKKyNkZWZpbmUJX1NHVFRZX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorCisvKiBPbiBzb21lIHN5c3RlbXMgdGhpcyB0eXBlIGlzIG5vdCBkZWZpbmVkIGJ5IDxiaXRzL2lvY3RsLXR5cGVzLmg+OworICAgaW4gdGhhdCBjYXNlLCB0aGUgZnVuY3Rpb25zIGFyZSBqdXN0IHN0dWJzIHRoYXQgcmV0dXJuIEVOT1NZUy4gICovCitzdHJ1Y3Qgc2d0dHliOworCitfX0JFR0lOX0RFQ0xTCisKKy8qIEZpbGwgaW4gKlBBUkFNUyB3aXRoIHRlcm1pbmFsIHBhcmFtZXRlcnMgYXNzb2NpYXRlZCB3aXRoIEZELiAgKi8KK2V4dGVybiBpbnQgZ3R0eSAoaW50IF9fZmQsIHN0cnVjdCBzZ3R0eWIgKl9fcGFyYW1zKSBfX1RIUk9XOworCisvKiBTZXQgdGhlIHRlcm1pbmFsIHBhcmFtZXRlcnMgYXNzb2NpYXRlZCB3aXRoIEZEIHRvICpQQVJBTVMuICAqLworZXh0ZXJuIGludCBzdHR5IChpbnQgX19mZCwgX19jb25zdCBzdHJ1Y3Qgc2d0dHliICpfX3BhcmFtcykgX19USFJPVzsKKworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogc2d0dHkuaCAgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zaGFkb3cuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zaGFkb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzhkZjUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3NoYWRvdy5oCkBAIC0wLDAgKzEsMTQ5IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qIERlY2xhcmF0aW9uIG9mIHR5cGVzIGFuZCBmdW5jdGlvbnMgZm9yIHNoYWRvdyBwYXNzd29yZCBzdWl0ZS4gICovCisKKyNpZm5kZWYgX1NIQURPV19ICisjZGVmaW5lIF9TSEFET1dfSAkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCisjaW5jbHVkZSA8cGF0aHMuaD4KKworI2RlZmluZQlfX25lZWRfRklMRQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIF9fbmVlZF9zaXplX3QKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogUGF0aHMgdG8gdGhlIHVzZXIgZGF0YWJhc2UgZmlsZXMuICAqLworI2RlZmluZQlTSEFET1cgX1BBVEhfU0hBRE9XCisKKworX19CRUdJTl9ERUNMUworCisvKiBTdHJ1Y3R1cmUgb2YgdGhlIHBhc3N3b3JkIGZpbGUuICAqLworc3RydWN0IHNwd2QKKyAgeworICAgIGNoYXIgKnNwX25hbXA7CQkvKiBMb2dpbiBuYW1lLiAgKi8KKyAgICBjaGFyICpzcF9wd2RwOwkJLyogRW5jcnlwdGVkIHBhc3N3b3JkLiAgKi8KKyAgICBsb25nIGludCBzcF9sc3RjaGc7CQkvKiBEYXRlIG9mIGxhc3QgY2hhbmdlLiAgKi8KKyAgICBsb25nIGludCBzcF9taW47CQkvKiBNaW5pbXVtIG51bWJlciBvZiBkYXlzIGJldHdlZW4gY2hhbmdlcy4gICovCisgICAgbG9uZyBpbnQgc3BfbWF4OwkJLyogTWF4aW11bSBudW1iZXIgb2YgZGF5cyBiZXR3ZWVuIGNoYW5nZXMuICAqLworICAgIGxvbmcgaW50IHNwX3dhcm47CQkvKiBOdW1iZXIgb2YgZGF5cyB0byB3YXJuIHVzZXIgdG8gY2hhbmdlCisJCQkJICAgdGhlIHBhc3N3b3JkLiAgKi8KKyAgICBsb25nIGludCBzcF9pbmFjdDsJCS8qIE51bWJlciBvZiBkYXlzIHRoZSBhY2NvdW50IG1heSBiZQorCQkJCSAgIGluYWN0aXZlLiAgKi8KKyAgICBsb25nIGludCBzcF9leHBpcmU7CQkvKiBOdW1iZXIgb2YgZGF5cyBzaW5jZSAxOTcwLTAxLTAxIHVudGlsCisJCQkJICAgYWNjb3VudCBleHBpcmVzLiAgKi8KKyAgICB1bnNpZ25lZCBsb25nIGludCBzcF9mbGFnOwkvKiBSZXNlcnZlZC4gICovCisgIH07CisKKworLyogT3BlbiBkYXRhYmFzZSBmb3IgcmVhZGluZy4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgcGFydCBvZiBQT1NJWCBhbmQgdGhlcmVmb3JlIG5vIG9mZmljaWFsCisgICBjYW5jZWxsYXRpb24gcG9pbnQuICBCdXQgZHVlIHRvIHNpbWlsYXJpdHkgd2l0aCBhbiBQT1NJWCBpbnRlcmZhY2UKKyAgIG9yIGR1ZSB0byB0aGUgaW1wbGVtZW50YXRpb24gaXQgaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kCisgICB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIHZvaWQgc2V0c3BlbnQgKHZvaWQpOworCisvKiBDbG9zZSBkYXRhYmFzZS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgcGFydCBvZiBQT1NJWCBhbmQgdGhlcmVmb3JlIG5vIG9mZmljaWFsCisgICBjYW5jZWxsYXRpb24gcG9pbnQuICBCdXQgZHVlIHRvIHNpbWlsYXJpdHkgd2l0aCBhbiBQT1NJWCBpbnRlcmZhY2UKKyAgIG9yIGR1ZSB0byB0aGUgaW1wbGVtZW50YXRpb24gaXQgaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kCisgICB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIHZvaWQgZW5kc3BlbnQgKHZvaWQpOworCisvKiBHZXQgbmV4dCBlbnRyeSBmcm9tIGRhdGFiYXNlLCBwZXJoYXBzIGFmdGVyIG9wZW5pbmcgdGhlIGZpbGUuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGl0IGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBzdHJ1Y3Qgc3B3ZCAqZ2V0c3BlbnQgKHZvaWQpOworCisvKiBHZXQgc2hhZG93IGVudHJ5IG1hdGNoaW5nIE5BTUUuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGl0IGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBzdHJ1Y3Qgc3B3ZCAqZ2V0c3BuYW0gKF9fY29uc3QgY2hhciAqX19uYW1lKTsKKworLyogUmVhZCBzaGFkb3cgZW50cnkgZnJvbSBTVFJJTkcuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGl0IGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBzdHJ1Y3Qgc3B3ZCAqc2dldHNwZW50IChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nKTsKKworLyogUmVhZCBuZXh0IHNoYWRvdyBlbnRyeSBmcm9tIFNUUkVBTS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgcGFydCBvZiBQT1NJWCBhbmQgdGhlcmVmb3JlIG5vIG9mZmljaWFsCisgICBjYW5jZWxsYXRpb24gcG9pbnQuICBCdXQgZHVlIHRvIHNpbWlsYXJpdHkgd2l0aCBhbiBQT1NJWCBpbnRlcmZhY2UKKyAgIG9yIGR1ZSB0byB0aGUgaW1wbGVtZW50YXRpb24gaXQgaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kCisgICB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIHN0cnVjdCBzcHdkICpmZ2V0c3BlbnQgKEZJTEUgKl9fc3RyZWFtKTsKKworLyogV3JpdGUgbGluZSBjb250YWluaW5nIHNoYWRvdyBwYXNzd29yZCBlbnRyeSB0byBzdHJlYW0uCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGl0IGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgcHV0c3BlbnQgKF9fY29uc3Qgc3RydWN0IHNwd2QgKl9fcCwgRklMRSAqX19zdHJlYW0pOworCisKKyNpZmRlZiBfX1VTRV9NSVNDCisvKiBSZWVudHJhbnQgdmVyc2lvbnMgb2Ygc29tZSBvZiB0aGUgZnVuY3Rpb25zIGFib3ZlLgorCisgICBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBwYXJ0IG9mIFBPU0lYIGFuZCB0aGVyZWZvcmUgbm8gb2ZmaWNpYWwKKyAgIGNhbmNlbGxhdGlvbiBwb2ludC4gIEJ1dCBkdWUgdG8gc2ltaWxhcml0eSB3aXRoIGFuIFBPU0lYIGludGVyZmFjZQorICAgb3IgZHVlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiB0aGV5IGFyZSBjYW5jZWxsYXRpb24gcG9pbnRzIGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgZ2V0c3BlbnRfciAoc3RydWN0IHNwd2QgKl9fcmVzdWx0X2J1ZiwgY2hhciAqX19idWZmZXIsCisJCSAgICAgICBzaXplX3QgX19idWZsZW4sIHN0cnVjdCBzcHdkICoqX19yZXN1bHQpOworCitleHRlcm4gaW50IGdldHNwbmFtX3IgKF9fY29uc3QgY2hhciAqX19uYW1lLCBzdHJ1Y3Qgc3B3ZCAqX19yZXN1bHRfYnVmLAorCQkgICAgICAgY2hhciAqX19idWZmZXIsIHNpemVfdCBfX2J1ZmxlbiwKKwkJICAgICAgIHN0cnVjdCBzcHdkICoqX19yZXN1bHQpOworCitleHRlcm4gaW50IHNnZXRzcGVudF9yIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzdHJ1Y3Qgc3B3ZCAqX19yZXN1bHRfYnVmLAorCQkJY2hhciAqX19idWZmZXIsIHNpemVfdCBfX2J1ZmxlbiwKKwkJCXN0cnVjdCBzcHdkICoqX19yZXN1bHQpOworCitleHRlcm4gaW50IGZnZXRzcGVudF9yIChGSUxFICpfX3N0cmVhbSwgc3RydWN0IHNwd2QgKl9fcmVzdWx0X2J1ZiwKKwkJCWNoYXIgKl9fYnVmZmVyLCBzaXplX3QgX19idWZsZW4sCisJCQlzdHJ1Y3Qgc3B3ZCAqKl9fcmVzdWx0KTsKKyNlbmRpZgkvKiBtaXNjICovCisKKworLyogVGhlIHNpbXBsZSBsb2NraW5nIGZ1bmN0aW9uYWxpdHkgcHJvdmlkZWQgaGVyZSBpcyBub3Qgc3VpdGFibGUgZm9yCisgICBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbnMuICAqLworCisvKiBQcm90ZWN0IHBhc3N3b3JkIGZpbGUgYWdhaW5zdCBtdWx0aSB3cml0ZXJzLiAgKi8KK2V4dGVybiBpbnQgbGNrcHdkZiAodm9pZCkgX19USFJPVzsKKworLyogVW5sb2NrIHBhc3N3b3JkIGZpbGUuICAqLworZXh0ZXJuIGludCB1bGNrcHdkZiAodm9pZCkgX19USFJPVzsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIHNoYWRvdy5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc2lnbmFsLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc2lnbmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEyMTAzNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zaWduYWwuaApAQCAtMCwwICsxLDQwNCBAQAorLyogQ29weXJpZ2h0IChDKSAxOTkxLTIwMDMsIDIwMDQsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qCisgKglJU08gQzk5IFN0YW5kYXJkOiA3LjE0IFNpZ25hbCBoYW5kbGluZyA8c2lnbmFsLmg+CisgKi8KKworI2lmbmRlZglfU0lHTkFMX0gKKworI2lmICFkZWZpbmVkIF9fbmVlZF9zaWdfYXRvbWljX3QgJiYgIWRlZmluZWQgX19uZWVkX3NpZ3NldF90CisjIGRlZmluZSBfU0lHTkFMX0gKKyNlbmRpZgorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworX19CRUdJTl9ERUNMUworCisjaW5jbHVkZSA8Yml0cy9zaWdzZXQuaD4JCS8qIF9fc2lnc2V0X3QsIF9fc2lnX2F0b21pY190LiAgKi8KKworLyogQW4gaW50ZWdyYWwgdHlwZSB0aGF0IGNhbiBiZSBtb2RpZmllZCBhdG9taWNhbGx5LCB3aXRob3V0IHRoZQorICAgcG9zc2liaWxpdHkgb2YgYSBzaWduYWwgYXJyaXZpbmcgaW4gdGhlIG1pZGRsZSBvZiB0aGUgb3BlcmF0aW9uLiAgKi8KKyNpZiBkZWZpbmVkIF9fbmVlZF9zaWdfYXRvbWljX3QgfHwgZGVmaW5lZCBfU0lHTkFMX0gKKyMgaWZuZGVmIF9fc2lnX2F0b21pY190X2RlZmluZWQKKyMgIGRlZmluZSBfX3NpZ19hdG9taWNfdF9kZWZpbmVkCitfX0JFR0lOX05BTUVTUEFDRV9TVEQKK3R5cGVkZWYgX19zaWdfYXRvbWljX3Qgc2lnX2F0b21pY190OworX19FTkRfTkFNRVNQQUNFX1NURAorIyBlbmRpZgorIyB1bmRlZiBfX25lZWRfc2lnX2F0b21pY190CisjZW5kaWYKKworI2lmIGRlZmluZWQgX19uZWVkX3NpZ3NldF90IHx8IChkZWZpbmVkIF9TSUdOQUxfSCAmJiBkZWZpbmVkIF9fVVNFX1BPU0lYKQorIyBpZm5kZWYgX19zaWdzZXRfdF9kZWZpbmVkCisjICBkZWZpbmUgX19zaWdzZXRfdF9kZWZpbmVkCit0eXBlZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CisjIGVuZGlmCisjIHVuZGVmIF9fbmVlZF9zaWdzZXRfdAorI2VuZGlmCisKKyNpZmRlZiBfU0lHTkFMX0gKKworI2luY2x1ZGUgPGJpdHMvdHlwZXMuaD4KKyNpbmNsdWRlIDxiaXRzL3NpZ251bS5oPgorCisjaWYgZGVmaW5lZCBfX1VTRV9YT1BFTiB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOMksKKyMgaWZuZGVmIF9fcGlkX3RfZGVmaW5lZAordHlwZWRlZiBfX3BpZF90IHBpZF90OworIyAgZGVmaW5lIF9fcGlkX3RfZGVmaW5lZAorI2VuZGlmCisjaWZkZWYgX19VU0VfWE9QRU4KKyMgZW5kaWYKKyMgaWZuZGVmIF9fdWlkX3RfZGVmaW5lZAordHlwZWRlZiBfX3VpZF90IHVpZF90OworIyAgZGVmaW5lIF9fdWlkX3RfZGVmaW5lZAorIyBlbmRpZgorI2VuZGlmCS8qIFVuaXg5OCAqLworCisKKy8qIFR5cGUgb2YgYSBzaWduYWwgaGFuZGxlci4gICovCit0eXBlZGVmIHZvaWQgKCpfX3NpZ2hhbmRsZXJfdCkgKGludCk7CisKKy8qIFRoZSBYL09wZW4gZGVmaW5pdGlvbiBvZiBgc2lnbmFsJyBzcGVjaWZpZXMgdGhlIFNWSUQgc2VtYW50aWMuICBVc2UKKyAgIHRoZSBhZGRpdGlvbmFsIGZ1bmN0aW9uIGBzeXN2X3NpZ25hbCcgd2hlbiBYL09wZW4gY29tcGF0aWJpbGl0eSBpcworICAgcmVxdWVzdGVkLiAgKi8KK2V4dGVybiBfX3NpZ2hhbmRsZXJfdCBfX3N5c3Zfc2lnbmFsIChpbnQgX19zaWcsIF9fc2lnaGFuZGxlcl90IF9faGFuZGxlcikKKyAgICAgX19USFJPVzsKKyNpZmRlZiBfX1VTRV9HTlUKK2V4dGVybiBfX3NpZ2hhbmRsZXJfdCBzeXN2X3NpZ25hbCAoaW50IF9fc2lnLCBfX3NpZ2hhbmRsZXJfdCBfX2hhbmRsZXIpCisgICAgIF9fVEhST1c7CisjZW5kaWYKKworLyogU2V0IHRoZSBoYW5kbGVyIGZvciB0aGUgc2lnbmFsIFNJRyB0byBIQU5ETEVSLCByZXR1cm5pbmcgdGhlIG9sZAorICAgaGFuZGxlciwgb3IgU0lHX0VSUiBvbiBlcnJvci4KKyAgIEJ5IGRlZmF1bHQgYHNpZ25hbCcgaGFzIHRoZSBCU0Qgc2VtYW50aWMuICAqLworX19CRUdJTl9OQU1FU1BBQ0VfU1RECisjaWZkZWYgX19VU0VfQlNECitleHRlcm4gX19zaWdoYW5kbGVyX3Qgc2lnbmFsIChpbnQgX19zaWcsIF9fc2lnaGFuZGxlcl90IF9faGFuZGxlcikKKyAgICAgX19USFJPVzsKKyNlbHNlCisvKiBNYWtlIHN1cmUgdGhlIHVzZWQgYHNpZ25hbCcgaW1wbGVtZW50YXRpb24gaXMgdGhlIFNWSUQgdmVyc2lvbi4gKi8KKyMgaWZkZWYgX19SRURJUkVDVF9OVEgKK2V4dGVybiBfX3NpZ2hhbmRsZXJfdCBfX1JFRElSRUNUX05USCAoc2lnbmFsLAorCQkJCSAgICAgIChpbnQgX19zaWcsIF9fc2lnaGFuZGxlcl90IF9faGFuZGxlciksCisJCQkJICAgICAgX19zeXN2X3NpZ25hbCk7CisjIGVsc2UKKyMgIGRlZmluZSBzaWduYWwgX19zeXN2X3NpZ25hbAorIyBlbmRpZgorI2VuZGlmCitfX0VORF9OQU1FU1BBQ0VfU1RECisKKyNpZmRlZiBfX1VTRV9YT1BFTgorLyogVGhlIFgvT3BlbiBkZWZpbml0aW9uIG9mIGBzaWduYWwnIGNvbmZsaWN0cyB3aXRoIHRoZSBCU0QgdmVyc2lvbi4KKyAgIFNvIHRoZXkgZGVmaW5lZCBhbm90aGVyIGZ1bmN0aW9uIGBic2Rfc2lnbmFsJy4gICovCitleHRlcm4gX19zaWdoYW5kbGVyX3QgYnNkX3NpZ25hbCAoaW50IF9fc2lnLCBfX3NpZ2hhbmRsZXJfdCBfX2hhbmRsZXIpCisgICAgIF9fVEhST1c7CisjZW5kaWYKKworLyogU2VuZCBzaWduYWwgU0lHIHRvIHByb2Nlc3MgbnVtYmVyIFBJRC4gIElmIFBJRCBpcyB6ZXJvLAorICAgc2VuZCBTSUcgdG8gYWxsIHByb2Nlc3NlcyBpbiB0aGUgY3VycmVudCBwcm9jZXNzJ3MgcHJvY2VzcyBncm91cC4KKyAgIElmIFBJRCBpcyA8IC0xLCBzZW5kIFNJRyB0byBhbGwgcHJvY2Vzc2VzIGluIHByb2Nlc3MgZ3JvdXAgLSBQSUQuICAqLworI2lmZGVmIF9fVVNFX1BPU0lYCitleHRlcm4gaW50IGtpbGwgKF9fcGlkX3QgX19waWQsIGludCBfX3NpZykgX19USFJPVzsKKyNlbmRpZiAvKiBVc2UgUE9TSVguICAqLworCisjaWYgZGVmaW5lZCBfX1VTRV9CU0QgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTl9FWFRFTkRFRAorLyogU2VuZCBTSUcgdG8gYWxsIHByb2Nlc3NlcyBpbiBwcm9jZXNzIGdyb3VwIFBHUlAuCisgICBJZiBQR1JQIGlzIHplcm8sIHNlbmQgU0lHIHRvIGFsbCBwcm9jZXNzZXMgaW4KKyAgIHRoZSBjdXJyZW50IHByb2Nlc3MncyBwcm9jZXNzIGdyb3VwLiAgKi8KK2V4dGVybiBpbnQga2lsbHBnIChfX3BpZF90IF9fcGdycCwgaW50IF9fc2lnKSBfX1RIUk9XOworI2VuZGlmIC8qIFVzZSBCU0QgfHwgWC9PcGVuIFVuaXguICAqLworCitfX0JFR0lOX05BTUVTUEFDRV9TVEQKKy8qIFJhaXNlIHNpZ25hbCBTSUcsIGkuZS4sIHNlbmQgU0lHIHRvIHlvdXJzZWxmLiAgKi8KK2V4dGVybiBpbnQgcmFpc2UgKGludCBfX3NpZykgX19USFJPVzsKK19fRU5EX05BTUVTUEFDRV9TVEQKKworI2lmZGVmIF9fVVNFX1NWSUQKKy8qIFNWSUQgbmFtZXMgZm9yIHRoZSBzYW1lIHRoaW5ncy4gICovCitleHRlcm4gX19zaWdoYW5kbGVyX3Qgc3NpZ25hbCAoaW50IF9fc2lnLCBfX3NpZ2hhbmRsZXJfdCBfX2hhbmRsZXIpCisgICAgIF9fVEhST1c7CitleHRlcm4gaW50IGdzaWduYWwgKGludCBfX3NpZykgX19USFJPVzsKKyNlbmRpZiAvKiBVc2UgU1ZJRC4gICovCisKKyNpZmRlZiBfX1VTRV9NSVNDCisvKiBQcmludCBhIG1lc3NhZ2UgZGVzY3JpYmluZyB0aGUgbWVhbmluZyBvZiB0aGUgZ2l2ZW4gc2lnbmFsIG51bWJlci4gICovCitleHRlcm4gdm9pZCBwc2lnbmFsIChpbnQgX19zaWcsIF9fY29uc3QgY2hhciAqX19zKTsKKyNlbmRpZiAvKiBVc2UgbWlzYy4gICovCisKKworLyogVGhlIGBzaWdwYXVzZScgZnVuY3Rpb24gaGFzIHR3byBkaWZmZXJlbnQgaW50ZXJmYWNlcy4gIFRoZSBvcmlnaW5hbAorICAgQlNEIGRlZmluaXRpb24gZGVmaW5lcyB0aGUgYXJndW1lbnQgYXMgYSBtYXNrIG9mIHRoZSBzaWduYWwsIHdoaWxlCisgICB0aGUgbW9yZSBtb2Rlcm4gaW50ZXJmYWNlIGluIFgvT3BlbiBkZWZpbmVzIGl0IGFzIHRoZSBzaWduYWwKKyAgIG51bWJlci4gIFdlIGdvIHdpdGggdGhlIEJTRCB2ZXJzaW9uIHVubGVzcyB0aGUgdXNlciBleHBsaWNpdGx5CisgICBzZWxlY3RzIHRoZSBYL09wZW4gdmVyc2lvbi4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aAorICAgX19USFJPVy4gICovCitleHRlcm4gaW50IF9fc2lncGF1c2UgKGludCBfX3NpZ19vcl9tYXNrLCBpbnQgX19pc19zaWcpOworCisjaWZkZWYgX19GQVZPUl9CU0QKKy8qIFNldCB0aGUgbWFzayBvZiBibG9ja2VkIHNpZ25hbHMgdG8gTUFTSywKKyAgIHdhaXQgZm9yIGEgc2lnbmFsIHRvIGFycml2ZSwgYW5kIHRoZW4gcmVzdG9yZSB0aGUgbWFzay4gICovCitleHRlcm4gaW50IHNpZ3BhdXNlIChpbnQgX19tYXNrKSBfX1RIUk9XIF9fYXR0cmlidXRlX2RlcHJlY2F0ZWRfXzsKKyNlbHNlCisjIGlmZGVmIF9fVVNFX1hPUEVOCisjICBpZmRlZiBfX0dOVUNfXworZXh0ZXJuIGludCBzaWdwYXVzZSAoaW50IF9fc2lnKSBfX2FzbV9fICgiX194cGdfc2lncGF1c2UiKTsKKyMgIGVsc2UKKy8qIFJlbW92ZSBhIHNpZ25hbCBmcm9tIHRoZSBzaWduYWwgbWFzayBhbmQgc3VzcGVuZCB0aGUgcHJvY2Vzcy4gICovCisjICAgZGVmaW5lIHNpZ3BhdXNlKHNpZykgX19zaWdwYXVzZSAoKHNpZyksIDEpCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKworI2lmZGVmIF9fVVNFX0JTRAorLyogTm9uZSBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBzaG91bGQgYmUgdXNlZCBhbnltb3JlLiAgVGhleSBhcmUgaGVyZQorICAgb25seSBmb3IgY29tcGF0aWJpbGl0eS4gIEEgc2luZ2xlIHdvcmQgKGBpbnQnKSBpcyBub3QgZ3VhcmFudGVlZCB0byBiZQorICAgZW5vdWdoIHRvIGhvbGQgYSBjb21wbGV0ZSBzaWduYWwgbWFzayBhbmQgdGhlcmVmb3JlIHRoZXNlIGZ1bmN0aW9ucworICAgc2ltcGx5IGRvIG5vdCB3b3JrIGluIG1hbnkgc2l0dWF0aW9ucy4gIFVzZSBgc2lncHJvY21hc2snIGluc3RlYWQuICAqLworCisvKiBDb21wdXRlIG1hc2sgZm9yIHNpZ25hbCBTSUcuICAqLworIyBkZWZpbmUgc2lnbWFzayhzaWcpCV9fc2lnbWFzayhzaWcpCisKKy8qIEJsb2NrIHNpZ25hbHMgaW4gTUFTSywgcmV0dXJuaW5nIHRoZSBvbGQgbWFzay4gICovCitleHRlcm4gaW50IHNpZ2Jsb2NrIChpbnQgX19tYXNrKSBfX1RIUk9XIF9fYXR0cmlidXRlX2RlcHJlY2F0ZWRfXzsKKworLyogU2V0IHRoZSBtYXNrIG9mIGJsb2NrZWQgc2lnbmFscyB0byBNQVNLLCByZXR1cm5pbmcgdGhlIG9sZCBtYXNrLiAgKi8KK2V4dGVybiBpbnQgc2lnc2V0bWFzayAoaW50IF9fbWFzaykgX19USFJPVyBfX2F0dHJpYnV0ZV9kZXByZWNhdGVkX187CisKKy8qIFJldHVybiBjdXJyZW50bHkgc2VsZWN0ZWQgc2lnbmFsIG1hc2suICAqLworZXh0ZXJuIGludCBzaWdnZXRtYXNrICh2b2lkKSBfX1RIUk9XIF9fYXR0cmlidXRlX2RlcHJlY2F0ZWRfXzsKKyNlbmRpZiAvKiBVc2UgQlNELiAgKi8KKworCisjaWZkZWYgX19VU0VfTUlTQworIyBkZWZpbmUgTlNJRwlfTlNJRworI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9HTlUKK3R5cGVkZWYgX19zaWdoYW5kbGVyX3Qgc2lnaGFuZGxlcl90OworI2VuZGlmCisKKy8qIDQuNCBCU0QgdXNlcyB0aGUgbmFtZSBgc2lnX3QnIGZvciB0aGlzLiAgKi8KKyNpZmRlZiBfX1VTRV9CU0QKK3R5cGVkZWYgX19zaWdoYW5kbGVyX3Qgc2lnX3Q7CisjZW5kaWYKKworI2lmZGVmIF9fVVNFX1BPU0lYCisKKyMgaWZkZWYgX19VU0VfUE9TSVgxOTkzMDkKKy8qIFdlIG5lZWQgYHN0cnVjdCB0aW1lc3BlYycgbGF0ZXIgb24uICAqLworIyAgZGVmaW5lIF9fbmVlZF90aW1lc3BlYworIyAgaW5jbHVkZSA8dGltZS5oPgorCisvKiBHZXQgdGhlIGBzaWdpbmZvX3QnIHR5cGUgcGx1cyB0aGUgbmVlZGVkIHN5bWJvbHMuICAqLworIyAgaW5jbHVkZSA8Yml0cy9zaWdpbmZvLmg+CisjIGVuZGlmCisKKy8qIENsZWFyIGFsbCBzaWduYWxzIGZyb20gU0VULiAgKi8KK2V4dGVybiBpbnQgc2lnZW1wdHlzZXQgKHNpZ3NldF90ICpfX3NldCkgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKy8qIFNldCBhbGwgc2lnbmFscyBpbiBTRVQuICAqLworZXh0ZXJuIGludCBzaWdmaWxsc2V0IChzaWdzZXRfdCAqX19zZXQpIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisvKiBBZGQgU0lHTk8gdG8gU0VULiAgKi8KK2V4dGVybiBpbnQgc2lnYWRkc2V0IChzaWdzZXRfdCAqX19zZXQsIGludCBfX3NpZ25vKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworLyogUmVtb3ZlIFNJR05PIGZyb20gU0VULiAgKi8KK2V4dGVybiBpbnQgc2lnZGVsc2V0IChzaWdzZXRfdCAqX19zZXQsIGludCBfX3NpZ25vKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworLyogUmV0dXJuIDEgaWYgU0lHTk8gaXMgaW4gU0VULCAwIGlmIG5vdC4gICovCitleHRlcm4gaW50IHNpZ2lzbWVtYmVyIChfX2NvbnN0IHNpZ3NldF90ICpfX3NldCwgaW50IF9fc2lnbm8pCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisjIGlmZGVmIF9fVVNFX0dOVQorLyogUmV0dXJuIG5vbi1lbXB0eSB2YWx1ZSBpcyBTRVQgaXMgbm90IGVtcHR5LiAgKi8KK2V4dGVybiBpbnQgc2lnaXNlbXB0eXNldCAoX19jb25zdCBzaWdzZXRfdCAqX19zZXQpIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisvKiBCdWlsZCBuZXcgc2lnbmFsIHNldCBieSBjb21iaW5pbmcgdGhlIHR3byBpbnB1dHMgc2V0IHVzaW5nIGxvZ2ljYWwgQU5ELiAgKi8KK2V4dGVybiBpbnQgc2lnYW5kc2V0IChzaWdzZXRfdCAqX19zZXQsIF9fY29uc3Qgc2lnc2V0X3QgKl9fbGVmdCwKKwkJICAgICAgX19jb25zdCBzaWdzZXRfdCAqX19yaWdodCkgX19USFJPVyBfX25vbm51bGwgKCgxLCAyLCAzKSk7CisKKy8qIEJ1aWxkIG5ldyBzaWduYWwgc2V0IGJ5IGNvbWJpbmluZyB0aGUgdHdvIGlucHV0cyBzZXQgdXNpbmcgbG9naWNhbCBPUi4gICovCitleHRlcm4gaW50IHNpZ29yc2V0IChzaWdzZXRfdCAqX19zZXQsIF9fY29uc3Qgc2lnc2V0X3QgKl9fbGVmdCwKKwkJICAgICBfX2NvbnN0IHNpZ3NldF90ICpfX3JpZ2h0KSBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDIsIDMpKTsKKyMgZW5kaWYgLyogR05VICovCisKKy8qIEdldCB0aGUgc3lzdGVtLXNwZWNpZmljIGRlZmluaXRpb25zIG9mIGBzdHJ1Y3Qgc2lnYWN0aW9uJworICAgYW5kIHRoZSBgU0FfKicgYW5kIGBTSUdfKicuIGNvbnN0YW50cy4gICovCisjIGluY2x1ZGUgPGJpdHMvc2lnYWN0aW9uLmg+CisKKy8qIEdldCBhbmQvb3IgY2hhbmdlIHRoZSBzZXQgb2YgYmxvY2tlZCBzaWduYWxzLiAgKi8KK2V4dGVybiBpbnQgc2lncHJvY21hc2sgKGludCBfX2hvdywgX19jb25zdCBzaWdzZXRfdCAqX19yZXN0cmljdCBfX3NldCwKKwkJCXNpZ3NldF90ICpfX3Jlc3RyaWN0IF9fb3NldCkgX19USFJPVzsKKworLyogQ2hhbmdlIHRoZSBzZXQgb2YgYmxvY2tlZCBzaWduYWxzIHRvIFNFVCwKKyAgIHdhaXQgdW50aWwgYSBzaWduYWwgYXJyaXZlcywgYW5kIHJlc3RvcmUgdGhlIHNldCBvZiBibG9ja2VkIHNpZ25hbHMuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGgKKyAgIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBzaWdzdXNwZW5kIChfX2NvbnN0IHNpZ3NldF90ICpfX3NldCkgX19ub25udWxsICgoMSkpOworCisvKiBHZXQgYW5kL29yIHNldCB0aGUgYWN0aW9uIGZvciBzaWduYWwgU0lHLiAgKi8KK2V4dGVybiBpbnQgc2lnYWN0aW9uIChpbnQgX19zaWcsIF9fY29uc3Qgc3RydWN0IHNpZ2FjdGlvbiAqX19yZXN0cmljdCBfX2FjdCwKKwkJICAgICAgc3RydWN0IHNpZ2FjdGlvbiAqX19yZXN0cmljdCBfX29hY3QpIF9fVEhST1c7CisKKy8qIFB1dCBpbiBTRVQgYWxsIHNpZ25hbHMgdGhhdCBhcmUgYmxvY2tlZCBhbmQgd2FpdGluZyB0byBiZSBkZWxpdmVyZWQuICAqLworZXh0ZXJuIGludCBzaWdwZW5kaW5nIChzaWdzZXRfdCAqX19zZXQpIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisKKy8qIFNlbGVjdCBhbnkgb2YgcGVuZGluZyBzaWduYWxzIGZyb20gU0VUIG9yIHdhaXQgZm9yIGFueSB0byBhcnJpdmUuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGgKKyAgIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBzaWd3YWl0IChfX2NvbnN0IHNpZ3NldF90ICpfX3Jlc3RyaWN0IF9fc2V0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWcpCisgICAgIF9fbm9ubnVsbCAoKDEsIDIpKTsKKworIyBpZmRlZiBfX1VTRV9QT1NJWDE5OTMwOQorLyogU2VsZWN0IGFueSBvZiBwZW5kaW5nIHNpZ25hbHMgZnJvbSBTRVQgYW5kIHBsYWNlIGluZm9ybWF0aW9uIGluIElORk8uCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGgKKyAgIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBzaWd3YWl0aW5mbyAoX19jb25zdCBzaWdzZXRfdCAqX19yZXN0cmljdCBfX3NldCwKKwkJCXNpZ2luZm9fdCAqX19yZXN0cmljdCBfX2luZm8pIF9fbm9ubnVsbCAoKDEpKTsKKworLyogU2VsZWN0IGFueSBvZiBwZW5kaW5nIHNpZ25hbHMgZnJvbSBTRVQgYW5kIHBsYWNlIGluZm9ybWF0aW9uIGluIElORk8uCisgICBXYWl0IHRoZSB0aW1lIHNwZWNpZmllZCBieSBUSU1FT1VUIGlmIG5vIHNpZ25hbCBpcyBwZW5kaW5nLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoCisgICBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgc2lndGltZWR3YWl0IChfX2NvbnN0IHNpZ3NldF90ICpfX3Jlc3RyaWN0IF9fc2V0LAorCQkJIHNpZ2luZm9fdCAqX19yZXN0cmljdCBfX2luZm8sCisJCQkgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QgX190aW1lb3V0KQorICAgICBfX25vbm51bGwgKCgxKSk7CisKKy8qIFNlbmQgc2lnbmFsIFNJRyB0byB0aGUgcHJvY2VzcyBQSUQuICBBc3NvY2lhdGUgZGF0YSBpbiBWQUwgd2l0aCB0aGUKKyAgIHNpZ25hbC4gICovCitleHRlcm4gaW50IHNpZ3F1ZXVlIChfX3BpZF90IF9fcGlkLCBpbnQgX19zaWcsIF9fY29uc3QgdW5pb24gc2lndmFsIF9fdmFsKQorICAgICBfX1RIUk9XOworIyBlbmRpZgkvKiBVc2UgUE9TSVggMTk5MzA2LiAgKi8KKworI2VuZGlmIC8qIFVzZSBQT1NJWC4gICovCisKKyNpZmRlZiBfX1VTRV9CU0QKKworLyogTmFtZXMgb2YgdGhlIHNpZ25hbHMuICBUaGlzIHZhcmlhYmxlIGV4aXN0cyBvbmx5IGZvciBjb21wYXRpYmlsaXR5LgorICAgVXNlIGBzdHJzaWduYWwnIGluc3RlYWQgKHNlZSA8c3RyaW5nLmg+KS4gICovCitleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IF9zeXNfc2lnbGlzdFtfTlNJR107CitleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19zaWdsaXN0W19OU0lHXTsKKworLyogU3RydWN0dXJlIHBhc3NlZCB0byBgc2lndmVjJy4gICovCitzdHJ1Y3Qgc2lndmVjCisgIHsKKyAgICBfX3NpZ2hhbmRsZXJfdCBzdl9oYW5kbGVyOwkvKiBTaWduYWwgaGFuZGxlci4gICovCisgICAgaW50IHN2X21hc2s7CQkvKiBNYXNrIG9mIHNpZ25hbHMgdG8gYmUgYmxvY2tlZC4gICovCisKKyAgICBpbnQgc3ZfZmxhZ3M7CQkvKiBGbGFncyAoc2VlIGJlbG93KS4gICovCisjIGRlZmluZSBzdl9vbnN0YWNrCXN2X2ZsYWdzIC8qIDQuMiBCU0QgY29tcGF0aWJpbGl0eS4gICovCisgIH07CisKKy8qIEJpdHMgaW4gYHN2X2ZsYWdzJy4gICovCisjIGRlZmluZSBTVl9PTlNUQUNLCSgxIDw8IDApLyogVGFrZSB0aGUgc2lnbmFsIG9uIHRoZSBzaWduYWwgc3RhY2suICAqLworIyBkZWZpbmUgU1ZfSU5URVJSVVBUCSgxIDw8IDEpLyogRG8gbm90IHJlc3RhcnQgc3lzdGVtIGNhbGxzLiAgKi8KKyMgZGVmaW5lIFNWX1JFU0VUSEFORAkoMSA8PCAyKS8qIFJlc2V0IGhhbmRsZXIgdG8gU0lHX0RGTCBvbiByZWNlaXB0LiAgKi8KKworCisvKiBJZiBWRUMgaXMgbm9uLU5VTEwsIHNldCB0aGUgaGFuZGxlciBmb3IgU0lHIHRvIHRoZSBgc3ZfaGFuZGxlcicgbWVtYmVyCisgICBvZiBWRUMuICBUaGUgc2lnbmFscyBpbiBgc3ZfbWFzaycgd2lsbCBiZSBibG9ja2VkIHdoaWxlIHRoZSBoYW5kbGVyIHJ1bnMuCisgICBJZiB0aGUgU1ZfUkVTRVRIQU5EIGJpdCBpcyBzZXQgaW4gYHN2X2ZsYWdzJywgdGhlIGhhbmRsZXIgZm9yIFNJRyB3aWxsIGJlCisgICByZXNldCB0byBTSUdfREZMIGJlZm9yZSBgc3ZfaGFuZGxlcicgaXMgZW50ZXJlZC4gIElmIE9WRUMgaXMgbm9uLU5VTEwsCisgICBpdCBpcyBmaWxsZWQgaW4gd2l0aCB0aGUgb2xkIGluZm9ybWF0aW9uIGZvciBTSUcuICAqLworZXh0ZXJuIGludCBzaWd2ZWMgKGludCBfX3NpZywgX19jb25zdCBzdHJ1Y3Qgc2lndmVjICpfX3ZlYywKKwkJICAgc3RydWN0IHNpZ3ZlYyAqX19vdmVjKSBfX1RIUk9XOworCisKKy8qIEdldCBtYWNoaW5lLWRlcGVuZGVudCBgc3RydWN0IHNpZ2NvbnRleHQnIGFuZCBzaWduYWwgc3ViY29kZXMuICAqLworIyBpbmNsdWRlIDxiaXRzL3NpZ2NvbnRleHQuaD4KKworLyogUmVzdG9yZSB0aGUgc3RhdGUgc2F2ZWQgaW4gU0NQLiAgKi8KK2V4dGVybiBpbnQgc2lncmV0dXJuIChzdHJ1Y3Qgc2lnY29udGV4dCAqX19zY3ApIF9fVEhST1c7CisKKyNlbmRpZiAvKiAgdXNlIEJTRC4gICovCisKKworI2lmIGRlZmluZWQgX19VU0VfQlNEIHx8IGRlZmluZWQgX19VU0VfWE9QRU5fRVhURU5ERUQKKyMgZGVmaW5lIF9fbmVlZF9zaXplX3QKKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8qIElmIElOVEVSUlVQVCBpcyBub256ZXJvLCBtYWtlIHNpZ25hbCBTSUcgaW50ZXJydXB0IHN5c3RlbSBjYWxscworICAgKGNhdXNpbmcgdGhlbSB0byBmYWlsIHdpdGggRUlOVFIpOyBpZiBJTlRFUlJVUFQgaXMgemVybywgbWFrZSBzeXN0ZW0KKyAgIGNhbGxzIGJlIHJlc3RhcnRlZCBhZnRlciBzaWduYWwgU0lHLiAgKi8KK2V4dGVybiBpbnQgc2lnaW50ZXJydXB0IChpbnQgX19zaWcsIGludCBfX2ludGVycnVwdCkgX19USFJPVzsKKworIyBpbmNsdWRlIDxiaXRzL3NpZ3N0YWNrLmg+CisjIGlmZGVmIF9fVVNFX1hPUEVOCisvKiBUaGlzIHdpbGwgZGVmaW5lIGB1Y29udGV4dF90JyBhbmQgYG1jb250ZXh0X3QnLiAgKi8KKyMgIGluY2x1ZGUgPHN5cy91Y29udGV4dC5oPgorIyBlbmRpZgorCisvKiBSdW4gc2lnbmFscyBoYW5kbGVycyBvbiB0aGUgc3RhY2sgc3BlY2lmaWVkIGJ5IFNTIChpZiBub3QgTlVMTCkuCisgICBJZiBPU1MgaXMgbm90IE5VTEwsIGl0IGlzIGZpbGxlZCBpbiB3aXRoIHRoZSBvbGQgc2lnbmFsIHN0YWNrIHN0YXR1cy4KKyAgIFRoaXMgaW50ZXJmYWNlIGlzIG9ic29sZXRlIGFuZCBvbiBtYW55IHBsYXRmb3JtIG5vdCBpbXBsZW1lbnRlZC4gICovCitleHRlcm4gaW50IHNpZ3N0YWNrIChzdHJ1Y3Qgc2lnc3RhY2sgKl9fc3MsIHN0cnVjdCBzaWdzdGFjayAqX19vc3MpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfZGVwcmVjYXRlZF9fOworCisvKiBBbHRlcm5hdGUgc2lnbmFsIGhhbmRsZXIgc3RhY2sgaW50ZXJmYWNlLgorICAgVGhpcyBpbnRlcmZhY2Ugc2hvdWxkIGFsd2F5cyBiZSBwcmVmZXJyZWQgb3ZlciBgc2lnc3RhY2snLiAgKi8KK2V4dGVybiBpbnQgc2lnYWx0c3RhY2sgKF9fY29uc3Qgc3RydWN0IHNpZ2FsdHN0YWNrICpfX3Jlc3RyaWN0IF9fc3MsCisJCQlzdHJ1Y3Qgc2lnYWx0c3RhY2sgKl9fcmVzdHJpY3QgX19vc3MpIF9fVEhST1c7CisKKyNlbmRpZiAvKiB1c2UgQlNEIG9yIFgvT3BlbiBVbml4LiAgKi8KKworI2lmZGVmIF9fVVNFX1hPUEVOX0VYVEVOREVECisvKiBTaW1wbGlmaWVkIGludGVyZmFjZSBmb3Igc2lnbmFsIG1hbmFnZW1lbnQuICAqLworCisvKiBBZGQgU0lHIHRvIHRoZSBjYWxsaW5nIHByb2Nlc3MnIHNpZ25hbCBtYXNrLiAgKi8KK2V4dGVybiBpbnQgc2lnaG9sZCAoaW50IF9fc2lnKSBfX1RIUk9XOworCisvKiBSZW1vdmUgU0lHIGZyb20gdGhlIGNhbGxpbmcgcHJvY2Vzcycgc2lnbmFsIG1hc2suICAqLworZXh0ZXJuIGludCBzaWdyZWxzZSAoaW50IF9fc2lnKSBfX1RIUk9XOworCisvKiBTZXQgdGhlIGRpc3Bvc2l0aW9uIG9mIFNJRyB0byBTSUdfSUdOLiAgKi8KK2V4dGVybiBpbnQgc2lnaWdub3JlIChpbnQgX19zaWcpIF9fVEhST1c7CisKKy8qIFNldCB0aGUgZGlzcG9zaXRpb24gb2YgU0lHLiAgKi8KK2V4dGVybiBfX3NpZ2hhbmRsZXJfdCBzaWdzZXQgKGludCBfX3NpZywgX19zaWdoYW5kbGVyX3QgX19kaXNwKSBfX1RIUk9XOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIF9fVVNFX1BPU0lYMTk5NTA2IHx8IGRlZmluZWQgX19VU0VfVU5JWDk4CisvKiBTb21lIG9mIHRoZSBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIHNpZ25hbHMgaW4gdGhyZWFkZWQgcHJvZ3JhbXMgbXVzdAorICAgYmUgZGVmaW5lZCBoZXJlLiAgKi8KKyMgaW5jbHVkZSA8Yml0cy9wdGhyZWFkdHlwZXMuaD4KKyMgaW5jbHVkZSA8Yml0cy9zaWd0aHJlYWQuaD4KKyNlbmRpZiAvKiB1c2UgVW5peDk4ICovCisKKy8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSB1c2VkIGludGVybmFsbHkgaW4gdGhlIEMgbGlicmFyeSBhbmQgaW4KKyAgIG90aGVyIGNvZGUgd2hpY2ggbmVlZCBkZWVwIGluc2lnaHRzLiAgKi8KKworLyogUmV0dXJuIG51bWJlciBvZiBhdmFpbGFibGUgcmVhbC10aW1lIHNpZ25hbCB3aXRoIGhpZ2hlc3QgcHJpb3JpdHkuICAqLworZXh0ZXJuIGludCBfX2xpYmNfY3VycmVudF9zaWdydG1pbiAodm9pZCkgX19USFJPVzsKKy8qIFJldHVybiBudW1iZXIgb2YgYXZhaWxhYmxlIHJlYWwtdGltZSBzaWduYWwgd2l0aCBsb3dlc3QgcHJpb3JpdHkuICAqLworZXh0ZXJuIGludCBfX2xpYmNfY3VycmVudF9zaWdydG1heCAodm9pZCkgX19USFJPVzsKKworI2VuZGlmIC8qIHNpZ25hbC5oICAqLworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogbm90IHNpZ25hbC5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc291bmQvYXNlcXVlbmNlci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3NvdW5kL2FzZXF1ZW5jZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmU0ZGE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3NvdW5kL2FzZXF1ZW5jZXIuaApAQCAtMCwwICsxLDYxNCBAQAorLyoKKyAqICBNYWluIGhlYWRlciBmaWxlIGZvciB0aGUgQUxTQSBzZXF1ZW5jZXIKKyAqICBDb3B5cmlnaHQgKGMpIDE5OTgtMTk5OSBieSBGcmFuayB2YW4gZGUgUG9sIDxmdmRwb2xAY29pbC5kZW1vbi5ubD4KKyAqICAgICAgICAgICAgKGMpIDE5OTgtMTk5OSBieSBKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHBlcmV4LmN6PgorICoKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisjaWZuZGVmIF9fU09VTkRfQVNFUVVFTkNFUl9ICisjZGVmaW5lIF9fU09VTkRfQVNFUVVFTkNFUl9ICisKKworLyoqIHZlcnNpb24gb2YgdGhlIHNlcXVlbmNlciAqLworI2RlZmluZSBTTkRSVl9TRVFfVkVSU0lPTiBTTkRSVl9QUk9UT0NPTF9WRVJTSU9OICgxLCAwLCAxKQorCisvKioKKyAqIGRlZmluaXRpb24gb2Ygc2VxdWVuY2VyIGV2ZW50IHR5cGVzCisgKi8KKworLyoqIHN5c3RlbSBtZXNzYWdlcworICogZXZlbnQgZGF0YSB0eXBlID0gI3NuZF9zZXFfcmVzdWx0CisgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1NZU1RFTQkJMAorI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfUkVTVUxUCQkxCisKKy8qKiBub3RlIG1lc3NhZ2VzIChjaGFubmVsIHNwZWNpZmljKQorICogZXZlbnQgZGF0YSB0eXBlID0gI3NuZF9zZXFfZXZfbm90ZQorICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9OT1RFCQk1CisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9OT1RFT04JCTYKKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX05PVEVPRkYJCTcKKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX0tFWVBSRVNTCTgKKwkKKy8qKiBjb250cm9sIG1lc3NhZ2VzIChjaGFubmVsIHNwZWNpZmljKQorICogZXZlbnQgZGF0YSB0eXBlID0gI3NuZF9zZXFfZXZfY3RybAorICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9DT05UUk9MTEVSCTEwCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9QR01DSEFOR0UJMTEKKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX0NIQU5QUkVTUwkxMgorI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfUElUQ0hCRU5ECTEzCS8qKjwgZnJvbSAtODE5MiB0byA4MTkxICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9DT05UUk9MMTQJMTQJLyoqPCAxNCBiaXQgY29udHJvbGxlciB2YWx1ZSAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfTk9OUkVHUEFSQU0JMTUJLyoqPCAxNCBiaXQgTlJQTiBhZGRyZXNzICsgMTQgYml0IHVuc2lnbmVkIHZhbHVlICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9SRUdQQVJBTQkxNgkvKio8IDE0IGJpdCBSUE4gYWRkcmVzcyArIDE0IGJpdCB1bnNpZ25lZCB2YWx1ZSAqLworCisvKiogc3luY2hyb25pc2F0aW9uIG1lc3NhZ2VzCisgKiBldmVudCBkYXRhIHR5cGUgPSAjc25kX3NlcV9ldl9jdHJsCisgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1NPTkdQT1MJCTIwCS8qIFNvbmcgUG9zaXRpb24gUG9pbnRlciB3aXRoIExTQiBhbmQgTVNCIHZhbHVlcyAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfU09OR1NFTAkJMjEJLyogU29uZyBTZWxlY3Qgd2l0aCBzb25nIElEIG51bWJlciAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfUUZSQU1FCQkyMgkvKiBtaWRpIHRpbWUgY29kZSBxdWFydGVyIGZyYW1lICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9USU1FU0lHTgkyMwkvKiBTTUYgVGltZSBTaWduYXR1cmUgZXZlbnQgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX0tFWVNJR04JCTI0CS8qIFNNRiBLZXkgU2lnbmF0dXJlIGV2ZW50ICovCisJICAgICAgICAKKy8qKiB0aW1lciBtZXNzYWdlcworICogZXZlbnQgZGF0YSB0eXBlID0gc25kX3NlcV9ldl9xdWV1ZV9jb250cm9sCisgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1NUQVJUCQkzMAkvKiBtaWRpIFJlYWwgVGltZSBTdGFydCBtZXNzYWdlICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9DT05USU5VRQkzMQkvKiBtaWRpIFJlYWwgVGltZSBDb250aW51ZSBtZXNzYWdlICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9TVE9QCQkzMgkvKiBtaWRpIFJlYWwgVGltZSBTdG9wIG1lc3NhZ2UgKi8JCisjZGVmaW5lCVNORFJWX1NFUV9FVkVOVF9TRVRQT1NfVElDSwkzMwkvKiBzZXQgdGljayBxdWV1ZSBwb3NpdGlvbiAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfU0VUUE9TX1RJTUUJMzQJLyogc2V0IHJlYWx0aW1lIHF1ZXVlIHBvc2l0aW9uICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9URU1QTwkJMzUJLyogKFNNRikgVGVtcG8gZXZlbnQgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX0NMT0NLCQkzNgkvKiBtaWRpIFJlYWwgVGltZSBDbG9jayBtZXNzYWdlICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9USUNLCQkzNwkvKiBtaWRpIFJlYWwgVGltZSBUaWNrIG1lc3NhZ2UgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1FVRVVFX1NLRVcJMzgJLyogc2tldyBxdWV1ZSB0ZW1wbyAqLworCisvKiogb3RoZXJzCisgKiBldmVudCBkYXRhIHR5cGUgPSBub25lCisgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1RVTkVfUkVRVUVTVAk0MAkvKiB0dW5lIHJlcXVlc3QgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1JFU0VUCQk0MQkvKiByZXNldCB0byBwb3dlci1vbiBzdGF0ZSAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfU0VOU0lORwkJNDIJLyogImFjdGl2ZSBzZW5zaW5nIiBldmVudCAqLworCisvKiogZWNobyBiYWNrLCBrZXJuZWwgcHJpdmF0ZSBtZXNzYWdlcworICogZXZlbnQgZGF0YSB0eXBlID0gYW55IHR5cGUKKyAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfRUNITwkJNTAJLyogZWNobyBldmVudCAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfT1NTCQk1MQkvKiBPU1MgcmF3IGV2ZW50ICovCisKKy8qKiBzeXN0ZW0gc3RhdHVzIG1lc3NhZ2VzIChicm9hZGNhc3QgZm9yIHN1YnNjcmliZXJzKQorICogZXZlbnQgZGF0YSB0eXBlID0gc25kX3NlcV9hZGRyCisgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX0NMSUVOVF9TVEFSVAk2MAkvKiBuZXcgY2xpZW50IGhhcyBjb25uZWN0ZWQgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX0NMSUVOVF9FWElUCTYxCS8qIGNsaWVudCBoYXMgbGVmdCB0aGUgc3lzdGVtICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9DTElFTlRfQ0hBTkdFCTYyCS8qIGNsaWVudCBzdGF0dXMvaW5mbyBoYXMgY2hhbmdlZCAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfUE9SVF9TVEFSVAk2MwkvKiBuZXcgcG9ydCB3YXMgY3JlYXRlZCAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfUE9SVF9FWElUCTY0CS8qIHBvcnQgd2FzIGRlbGV0ZWQgZnJvbSBzeXN0ZW0gKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1BPUlRfQ0hBTkdFCTY1CS8qIHBvcnQgc3RhdHVzL2luZm8gaGFzIGNoYW5nZWQgKi8KKworLyoqIHBvcnQgY29ubmVjdGlvbiBjaGFuZ2VzCisgKiBldmVudCBkYXRhIHR5cGUgPSBzbmRfc2VxX2Nvbm5lY3QKKyAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfUE9SVF9TVUJTQ1JJQkVECTY2CS8qIHBvcnRzIGNvbm5lY3RlZCAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfUE9SVF9VTlNVQlNDUklCRUQgNjcJLyogcG9ydHMgZGlzY29ubmVjdGVkICovCisKKy8qIDcwLTg5OiAgc3ludGhlc2l6ZXIgZXZlbnRzIC0gb2Jzb2xldGVkICovCisKKy8qKiB1c2VyLWRlZmluZWQgZXZlbnRzIHdpdGggZml4ZWQgbGVuZ3RoCisgKiBldmVudCBkYXRhIHR5cGUgPSBhbnkKKyAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfVVNSMAkJOTAKKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1VTUjEJCTkxCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9VU1IyCQk5MgorI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfVVNSMwkJOTMKKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1VTUjQJCTk0CisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9VU1I1CQk5NQorI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfVVNSNgkJOTYKKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1VTUjcJCTk3CisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9VU1I4CQk5OAorI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfVVNSOQkJOTkKKworLyogMTAwLTExODogaW5zdHJ1bWVudCBsYXllciAtIG9ic29sZXRlZCAqLworLyogMTE5LTEyOTogcmVzZXJ2ZWQgKi8KKworLyogMTMwLTEzOTogdmFyaWFibGUgbGVuZ3RoIGV2ZW50cworICogZXZlbnQgZGF0YSB0eXBlID0gc25kX3NlcV9ldl9leHQKKyAqIChTTkRSVl9TRVFfRVZFTlRfTEVOR1RIX1ZBUklBQkxFIG11c3QgYmUgc2V0KQorICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9TWVNFWAkJMTMwCS8qIHN5c3RlbSBleGNsdXNpdmUgZGF0YSAodmFyaWFibGUgbGVuZ3RoKSAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfQk9VTkNFCQkxMzEJLyogZXJyb3IgZXZlbnQgKi8KKy8qIDEzMi0xMzQ6IHJlc2VydmVkICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9VU1JfVkFSMAkxMzUKKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1VTUl9WQVIxCTEzNgorI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfVVNSX1ZBUjIJMTM3CisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9VU1JfVkFSMwkxMzgKKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX1VTUl9WQVI0CTEzOQorCisvKiAxNTAtMTUxOiBrZXJuZWwgZXZlbnRzIHdpdGggcXVvdGUgLSBETyBOT1QgdXNlIGluIHVzZXIgY2xpZW50cyAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfS0VSTkVMX0VSUk9SCTE1MAorI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfS0VSTkVMX1FVT1RFCTE1MQkvKiBvYnNvbGV0ZSAqLworCisvKiAxNTItMTkxOiByZXNlcnZlZCAqLworCisvKiAxOTItMjU0OiBoYXJkd2FyZSBzcGVjaWZpYyBldmVudHMgKi8KKworLyogMjU1OiBzcGVjaWFsIGV2ZW50ICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9OT05FCQkyNTUKKworCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgc25kX3NlcV9ldmVudF90eXBlX3Q7CisKKy8qKiBldmVudCBhZGRyZXNzICovCitzdHJ1Y3Qgc25kX3NlcV9hZGRyIHsKKwl1bnNpZ25lZCBjaGFyIGNsaWVudDsJLyoqPCBDbGllbnQgbnVtYmVyOiAgICAgICAgIDAuLjI1NSwgMjU1ID0gYnJvYWRjYXN0IHRvIGFsbCBjbGllbnRzICovCisJdW5zaWduZWQgY2hhciBwb3J0OwkvKio8IFBvcnQgd2l0aGluIGNsaWVudDogICAgMC4uMjU1LCAyNTUgPSBicm9hZGNhc3QgdG8gYWxsIHBvcnRzICovCit9OworCisvKiogcG9ydCBjb25uZWN0aW9uICovCitzdHJ1Y3Qgc25kX3NlcV9jb25uZWN0IHsKKwlzdHJ1Y3Qgc25kX3NlcV9hZGRyIHNlbmRlcjsKKwlzdHJ1Y3Qgc25kX3NlcV9hZGRyIGRlc3Q7Cit9OworCisKKyNkZWZpbmUgU05EUlZfU0VRX0FERFJFU1NfVU5LTk9XTgkyNTMJLyogdW5rbm93biBzb3VyY2UgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0FERFJFU1NfU1VCU0NSSUJFUlMJMjU0CS8qIHNlbmQgZXZlbnQgdG8gYWxsIHN1YnNjcmliZWQgcG9ydHMgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0FERFJFU1NfQlJPQURDQVNUCTI1NQkvKiBzZW5kIGV2ZW50IHRvIGFsbCBxdWV1ZXMvY2xpZW50cy9wb3J0cy9jaGFubmVscyAqLworI2RlZmluZSBTTkRSVl9TRVFfUVVFVUVfRElSRUNUCQkyNTMJLyogZGlyZWN0IGRpc3BhdGNoICovCisKKwkvKiBldmVudCBtb2RlIGZsYWcgLSBOT1RFOiBvbmx5IDggYml0cyBhdmFpbGFibGUhICovCisjZGVmaW5lIFNORFJWX1NFUV9USU1FX1NUQU1QX1RJQ0sJKDA8PDApIC8qIHRpbWVzdGFtcCBpbiBjbG9jayB0aWNrcyAqLworI2RlZmluZSBTTkRSVl9TRVFfVElNRV9TVEFNUF9SRUFMCSgxPDwwKSAvKiB0aW1lc3RhbXAgaW4gcmVhbCB0aW1lICovCisjZGVmaW5lIFNORFJWX1NFUV9USU1FX1NUQU1QX01BU0sJKDE8PDApCisKKyNkZWZpbmUgU05EUlZfU0VRX1RJTUVfTU9ERV9BQlMJCSgwPDwxKQkvKiBhYnNvbHV0ZSB0aW1lc3RhbXAgKi8KKyNkZWZpbmUgU05EUlZfU0VRX1RJTUVfTU9ERV9SRUwJCSgxPDwxKQkvKiByZWxhdGl2ZSB0byBjdXJyZW50IHRpbWUgKi8KKyNkZWZpbmUgU05EUlZfU0VRX1RJTUVfTU9ERV9NQVNLCSgxPDwxKQorCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9MRU5HVEhfRklYRUQJKDA8PDIpCS8qIGZpeGVkIGV2ZW50IHNpemUgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0VWRU5UX0xFTkdUSF9WQVJJQUJMRQkoMTw8MikJLyogdmFyaWFibGUgZXZlbnQgc2l6ZSAqLworI2RlZmluZSBTTkRSVl9TRVFfRVZFTlRfTEVOR1RIX1ZBUlVTUgkoMjw8MikJLyogdmFyaWFibGUgZXZlbnQgc2l6ZSAtIHVzZXIgbWVtb3J5IHNwYWNlICovCisjZGVmaW5lIFNORFJWX1NFUV9FVkVOVF9MRU5HVEhfTUFTSwkoMzw8MikKKworI2RlZmluZSBTTkRSVl9TRVFfUFJJT1JJVFlfTk9STUFMCSgwPDw0KQkvKiBub3JtYWwgcHJpb3JpdHkgKi8KKyNkZWZpbmUgU05EUlZfU0VRX1BSSU9SSVRZX0hJR0gJCSgxPDw0KQkvKiBldmVudCBzaG91bGQgYmUgcHJvY2Vzc2VkIGJlZm9yZSBvdGhlcnMgKi8KKyNkZWZpbmUgU05EUlZfU0VRX1BSSU9SSVRZX01BU0sJCSgxPDw0KQorCisKKwkvKiBub3RlIGV2ZW50ICovCitzdHJ1Y3Qgc25kX3NlcV9ldl9ub3RlIHsKKwl1bnNpZ25lZCBjaGFyIGNoYW5uZWw7CisJdW5zaWduZWQgY2hhciBub3RlOworCXVuc2lnbmVkIGNoYXIgdmVsb2NpdHk7CisJdW5zaWduZWQgY2hhciBvZmZfdmVsb2NpdHk7CS8qIG9ubHkgZm9yIFNORFJWX1NFUV9FVkVOVF9OT1RFICovCisJdW5zaWduZWQgaW50IGR1cmF0aW9uOwkJLyogb25seSBmb3IgU05EUlZfU0VRX0VWRU5UX05PVEUgKi8KK307CisKKwkvKiBjb250cm9sbGVyIGV2ZW50ICovCitzdHJ1Y3Qgc25kX3NlcV9ldl9jdHJsIHsKKwl1bnNpZ25lZCBjaGFyIGNoYW5uZWw7CisJdW5zaWduZWQgY2hhciB1bnVzZWQxLCB1bnVzZWQyLCB1bnVzZWQzOwkvKiBwYWQgKi8KKwl1bnNpZ25lZCBpbnQgcGFyYW07CisJc2lnbmVkIGludCB2YWx1ZTsKK307CisKKwkvKiBnZW5lcmljIHNldCBvZiBieXRlcyAoMTJ4OCBiaXQpICovCitzdHJ1Y3Qgc25kX3NlcV9ldl9yYXc4IHsKKwl1bnNpZ25lZCBjaGFyIGRbMTJdOwkvKiA4IGJpdCB2YWx1ZSAqLworfTsKKworCS8qIGdlbmVyaWMgc2V0IG9mIGludGVnZXJzICgzeDMyIGJpdCkgKi8KK3N0cnVjdCBzbmRfc2VxX2V2X3JhdzMyIHsKKwl1bnNpZ25lZCBpbnQgZFszXTsJLyogMzIgYml0IHZhbHVlICovCit9OworCisJLyogZXh0ZXJuYWwgc3RvcmVkIGRhdGEgKi8KK3N0cnVjdCBzbmRfc2VxX2V2X2V4dCB7CisJdW5zaWduZWQgaW50IGxlbjsJLyogbGVuZ3RoIG9mIGRhdGEgKi8KKwl2b2lkICpwdHI7CQkvKiBwb2ludGVyIHRvIGRhdGEgKG5vdGU6IG1heWJlIDY0LWJpdCkgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBzbmRfc2VxX3Jlc3VsdCB7CisJaW50IGV2ZW50OwkJLyogcHJvY2Vzc2VkIGV2ZW50IHR5cGUgKi8KKwlpbnQgcmVzdWx0OworfTsKKworCitzdHJ1Y3Qgc25kX3NlcV9yZWFsX3RpbWUgeworCXVuc2lnbmVkIGludCB0dl9zZWM7CS8qIHNlY29uZHMgKi8KKwl1bnNpZ25lZCBpbnQgdHZfbnNlYzsJLyogbmFub3NlY29uZHMgKi8KK307CisKK3R5cGVkZWYgdW5zaWduZWQgaW50IHNuZF9zZXFfdGlja190aW1lX3Q7CS8qIG1pZGkgdGlja3MgKi8KKwordW5pb24gc25kX3NlcV90aW1lc3RhbXAgeworCXNuZF9zZXFfdGlja190aW1lX3QgdGljazsKKwlzdHJ1Y3Qgc25kX3NlcV9yZWFsX3RpbWUgdGltZTsKK307CisKK3N0cnVjdCBzbmRfc2VxX3F1ZXVlX3NrZXcgeworCXVuc2lnbmVkIGludCB2YWx1ZTsKKwl1bnNpZ25lZCBpbnQgYmFzZTsKK307CisKKwkvKiBxdWV1ZSB0aW1lciBjb250cm9sICovCitzdHJ1Y3Qgc25kX3NlcV9ldl9xdWV1ZV9jb250cm9sIHsKKwl1bnNpZ25lZCBjaGFyIHF1ZXVlOwkJCS8qIGFmZmVjdGVkIHF1ZXVlICovCisJdW5zaWduZWQgY2hhciBwYWRbM107CQkJLyogcmVzZXJ2ZWQgKi8KKwl1bmlvbiB7CisJCXNpZ25lZCBpbnQgdmFsdWU7CQkvKiBhZmZlY3RlZCB2YWx1ZSAoZS5nLiB0ZW1wbykgKi8KKwkJdW5pb24gc25kX3NlcV90aW1lc3RhbXAgdGltZTsJLyogdGltZSAqLworCQl1bnNpZ25lZCBpbnQgcG9zaXRpb247CQkvKiBzeW5jIHBvc2l0aW9uICovCisJCXN0cnVjdCBzbmRfc2VxX3F1ZXVlX3NrZXcgc2tldzsKKwkJdW5zaWduZWQgaW50IGQzMlsyXTsKKwkJdW5zaWduZWQgY2hhciBkOFs4XTsKKwl9IHBhcmFtOworfTsKKworCS8qIHF1b3RlZCBldmVudCAtIGluc2lkZSB0aGUga2VybmVsIG9ubHkgKi8KK3N0cnVjdCBzbmRfc2VxX2V2X3F1b3RlIHsKKwlzdHJ1Y3Qgc25kX3NlcV9hZGRyIG9yaWdpbjsJCS8qIG9yaWdpbmFsIHNlbmRlciAqLworCXVuc2lnbmVkIHNob3J0IHZhbHVlOwkJLyogb3B0aW9uYWwgZGF0YSAqLworCXN0cnVjdCBzbmRfc2VxX2V2ZW50ICpldmVudDsJCS8qIHF1b3RlZCBldmVudCAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisJLyogc2VxdWVuY2VyIGV2ZW50ICovCitzdHJ1Y3Qgc25kX3NlcV9ldmVudCB7CisJc25kX3NlcV9ldmVudF90eXBlX3QgdHlwZTsJLyogZXZlbnQgdHlwZSAqLworCXVuc2lnbmVkIGNoYXIgZmxhZ3M7CQkvKiBldmVudCBmbGFncyAqLworCWNoYXIgdGFnOworCQorCXVuc2lnbmVkIGNoYXIgcXVldWU7CQkvKiBzY2hlZHVsZSBxdWV1ZSAqLworCXVuaW9uIHNuZF9zZXFfdGltZXN0YW1wIHRpbWU7CS8qIHNjaGVkdWxlIHRpbWUgKi8KKworCisJc3RydWN0IHNuZF9zZXFfYWRkciBzb3VyY2U7CS8qIHNvdXJjZSBhZGRyZXNzICovCisJc3RydWN0IHNuZF9zZXFfYWRkciBkZXN0OwkvKiBkZXN0aW5hdGlvbiBhZGRyZXNzICovCisKKwl1bmlvbiB7CQkJCS8qIGV2ZW50IGRhdGEuLi4gKi8KKwkJc3RydWN0IHNuZF9zZXFfZXZfbm90ZSBub3RlOworCQlzdHJ1Y3Qgc25kX3NlcV9ldl9jdHJsIGNvbnRyb2w7CisJCXN0cnVjdCBzbmRfc2VxX2V2X3JhdzggcmF3ODsKKwkJc3RydWN0IHNuZF9zZXFfZXZfcmF3MzIgcmF3MzI7CisJCXN0cnVjdCBzbmRfc2VxX2V2X2V4dCBleHQ7CisJCXN0cnVjdCBzbmRfc2VxX2V2X3F1ZXVlX2NvbnRyb2wgcXVldWU7CisJCXVuaW9uIHNuZF9zZXFfdGltZXN0YW1wIHRpbWU7CisJCXN0cnVjdCBzbmRfc2VxX2FkZHIgYWRkcjsKKwkJc3RydWN0IHNuZF9zZXFfY29ubmVjdCBjb25uZWN0OworCQlzdHJ1Y3Qgc25kX3NlcV9yZXN1bHQgcmVzdWx0OworCQlzdHJ1Y3Qgc25kX3NlcV9ldl9xdW90ZSBxdW90ZTsKKwl9IGRhdGE7Cit9OworCisKKy8qCisgKiBib3VuY2UgZXZlbnQgLSBzdG9yZWQgYXMgdmFyaWFibGUgc2l6ZSBkYXRhCisgKi8KK3N0cnVjdCBzbmRfc2VxX2V2ZW50X2JvdW5jZSB7CisJaW50IGVycjsKKwlzdHJ1Y3Qgc25kX3NlcV9ldmVudCBldmVudDsKKwkvKiBleHRlcm5hbCBkYXRhIGZvbGxvd3MgaGVyZS4gKi8KK307CisKKworCS8qIHN5c3RlbSBpbmZvcm1hdGlvbiAqLworc3RydWN0IHNuZF9zZXFfc3lzdGVtX2luZm8geworCWludCBxdWV1ZXM7CQkJLyogbWF4aW11bSBxdWV1ZXMgY291bnQgKi8KKwlpbnQgY2xpZW50czsJCQkvKiBtYXhpbXVtIGNsaWVudHMgY291bnQgKi8KKwlpbnQgcG9ydHM7CQkJLyogbWF4aW11bSBwb3J0cyBwZXIgY2xpZW50ICovCisJaW50IGNoYW5uZWxzOwkJCS8qIG1heGltdW0gY2hhbm5lbHMgcGVyIHBvcnQgKi8KKwlpbnQgY3VyX2NsaWVudHM7CQkvKiBjdXJyZW50IGNsaWVudHMgKi8KKwlpbnQgY3VyX3F1ZXVlczsJCQkvKiBjdXJyZW50IHF1ZXVlcyAqLworCWNoYXIgcmVzZXJ2ZWRbMjRdOworfTsKKworCisJLyogc3lzdGVtIHJ1bm5pbmcgaW5mb3JtYXRpb24gKi8KK3N0cnVjdCBzbmRfc2VxX3J1bm5pbmdfaW5mbyB7CisJdW5zaWduZWQgY2hhciBjbGllbnQ7CQkvKiBjbGllbnQgaWQgKi8KKwl1bnNpZ25lZCBjaGFyIGJpZ19lbmRpYW47CS8qIDEgPSBiaWctZW5kaWFuICovCisJdW5zaWduZWQgY2hhciBjcHVfbW9kZTsJCS8qIDQgPSAzMmJpdCwgOCA9IDY0Yml0ICovCisJdW5zaWduZWQgY2hhciBwYWQ7CQkvKiByZXNlcnZlZCAqLworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbMTJdOworfTsKKworCisJLyoga25vd24gY2xpZW50IG51bWJlcnMgKi8KKyNkZWZpbmUgU05EUlZfU0VRX0NMSUVOVF9TWVNURU0JCTAKKwkvKiBpbnRlcm5hbCBjbGllbnQgbnVtYmVycyAqLworI2RlZmluZSBTTkRSVl9TRVFfQ0xJRU5UX0RVTU1ZCQkxNAkvKiBtaWRpIHRocm91Z2ggKi8KKyNkZWZpbmUgU05EUlZfU0VRX0NMSUVOVF9PU1MJCTE1CS8qIG9zcyBzZXF1ZW5jZXIgZW11bGF0b3IgKi8KKworCisJLyogY2xpZW50IHR5cGVzICovCit0eXBlZGVmIGludCBfX2JpdHdpc2Ugc25kX3NlcV9jbGllbnRfdHlwZV90OworI2RlZmluZQlOT19DTElFTlQJKChzbmRfc2VxX2NsaWVudF90eXBlX3QpIDApCisjZGVmaW5lCVVTRVJfQ0xJRU5UCSgoc25kX3NlcV9jbGllbnRfdHlwZV90KSAxKQorI2RlZmluZQlLRVJORUxfQ0xJRU5UCSgoc25kX3NlcV9jbGllbnRfdHlwZV90KSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgCisJLyogZXZlbnQgZmlsdGVyIGZsYWdzICovCisjZGVmaW5lIFNORFJWX1NFUV9GSUxURVJfQlJPQURDQVNUCSgxPDwwKQkvKiBhY2NlcHQgYnJvYWRjYXN0IG1lc3NhZ2VzICovCisjZGVmaW5lIFNORFJWX1NFUV9GSUxURVJfTVVMVElDQVNUCSgxPDwxKQkvKiBhY2NlcHQgbXVsdGljYXN0IG1lc3NhZ2VzICovCisjZGVmaW5lIFNORFJWX1NFUV9GSUxURVJfQk9VTkNFCQkoMTw8MikJLyogYWNjZXB0IGJvdW5jZSBldmVudCBpbiBlcnJvciAqLworI2RlZmluZSBTTkRSVl9TRVFfRklMVEVSX1VTRV9FVkVOVAkoMTw8MzEpCS8qIHVzZSBldmVudCBmaWx0ZXIgKi8KKworc3RydWN0IHNuZF9zZXFfY2xpZW50X2luZm8geworCWludCBjbGllbnQ7CQkJLyogY2xpZW50IG51bWJlciB0byBpbnF1aXJlICovCisJc25kX3NlcV9jbGllbnRfdHlwZV90IHR5cGU7CS8qIGNsaWVudCB0eXBlICovCisJY2hhciBuYW1lWzY0XTsJCQkvKiBjbGllbnQgbmFtZSAqLworCXVuc2lnbmVkIGludCBmaWx0ZXI7CQkvKiBmaWx0ZXIgZmxhZ3MgKi8KKwl1bnNpZ25lZCBjaGFyIG11bHRpY2FzdF9maWx0ZXJbOF07IC8qIG11bHRpY2FzdCBmaWx0ZXIgYml0bWFwICovCisJdW5zaWduZWQgY2hhciBldmVudF9maWx0ZXJbMzJdOwkvKiBldmVudCBmaWx0ZXIgYml0bWFwICovCisJaW50IG51bV9wb3J0czsJCQkvKiBSTzogbnVtYmVyIG9mIHBvcnRzICovCisJaW50IGV2ZW50X2xvc3Q7CQkJLyogbnVtYmVyIG9mIGxvc3QgZXZlbnRzICovCisJY2hhciByZXNlcnZlZFs2NF07CQkvKiBmb3IgZnV0dXJlIHVzZSAqLworfTsKKworCisvKiBjbGllbnQgcG9vbCBzaXplICovCitzdHJ1Y3Qgc25kX3NlcV9jbGllbnRfcG9vbCB7CisJaW50IGNsaWVudDsJCQkvKiBjbGllbnQgbnVtYmVyIHRvIGlucXVpcmUgKi8KKwlpbnQgb3V0cHV0X3Bvb2w7CQkvKiBvdXRnb2luZyAod3JpdGUpIHBvb2wgc2l6ZSAqLworCWludCBpbnB1dF9wb29sOwkJCS8qIGluY29taW5nIChyZWFkKSBwb29sIHNpemUgKi8KKwlpbnQgb3V0cHV0X3Jvb207CQkvKiBtaW5pbXVtIGZyZWUgcG9vbCBzaXplIGZvciBzZWxlY3QvYmxvY2tpbmcgbW9kZSAqLworCWludCBvdXRwdXRfZnJlZTsJCS8qIHVudXNlZCBzaXplICovCisJaW50IGlucHV0X2ZyZWU7CQkJLyogdW51c2VkIHNpemUgKi8KKwljaGFyIHJlc2VydmVkWzY0XTsKK307CisKKworLyogUmVtb3ZlIGV2ZW50cyBieSBzcGVjaWZpZWQgY3JpdGVyaWEgKi8KKworI2RlZmluZSBTTkRSVl9TRVFfUkVNT1ZFX0lOUFVUCQkoMTw8MCkJLyogRmx1c2ggaW5wdXQgcXVldWVzICovCisjZGVmaW5lIFNORFJWX1NFUV9SRU1PVkVfT1VUUFVUCQkoMTw8MSkJLyogRmx1c2ggb3V0cHV0IHF1ZXVlcyAqLworI2RlZmluZSBTTkRSVl9TRVFfUkVNT1ZFX0RFU1QJCSgxPDwyKQkvKiBSZXN0cmljdCBieSBkZXN0aW5hdGlvbiBxOmNsaWVudDpwb3J0ICovCisjZGVmaW5lIFNORFJWX1NFUV9SRU1PVkVfREVTVF9DSEFOTkVMCSgxPDwzKQkvKiBSZXN0cmljdCBieSBjaGFubmVsICovCisjZGVmaW5lIFNORFJWX1NFUV9SRU1PVkVfVElNRV9CRUZPUkUJKDE8PDQpCS8qIFJlc3RyaWN0IHRvIGJlZm9yZSB0aW1lICovCisjZGVmaW5lIFNORFJWX1NFUV9SRU1PVkVfVElNRV9BRlRFUgkoMTw8NSkJLyogUmVzdHJpY3QgdG8gdGltZSBvciBhZnRlciAqLworI2RlZmluZSBTTkRSVl9TRVFfUkVNT1ZFX1RJTUVfVElDSwkoMTw8NikJLyogVGltZSBpcyBpbiB0aWNrcyAqLworI2RlZmluZSBTTkRSVl9TRVFfUkVNT1ZFX0VWRU5UX1RZUEUJKDE8PDcpCS8qIFJlc3RyaWN0IHRvIGV2ZW50IHR5cGUgKi8KKyNkZWZpbmUgU05EUlZfU0VRX1JFTU9WRV9JR05PUkVfT0ZGIAkoMTw8OCkJLyogRG8gbm90IGZsdXNoIG9mZiBldmVudHMgKi8KKyNkZWZpbmUgU05EUlZfU0VRX1JFTU9WRV9UQUdfTUFUQ0ggCSgxPDw5KQkvKiBSZXN0cmljdCB0byBldmVudHMgd2l0aCBnaXZlbiB0YWcgKi8KKworc3RydWN0IHNuZF9zZXFfcmVtb3ZlX2V2ZW50cyB7CisJdW5zaWduZWQgaW50ICByZW1vdmVfbW9kZTsJLyogRmxhZ3MgdGhhdCBkZXRlcm1pbmUgd2hhdCBnZXRzIHJlbW92ZWQgKi8KKworCXVuaW9uIHNuZF9zZXFfdGltZXN0YW1wIHRpbWU7CisKKwl1bnNpZ25lZCBjaGFyIHF1ZXVlOwkvKiBRdWV1ZSBmb3IgUkVNT1ZFX0RFU1QgKi8KKwlzdHJ1Y3Qgc25kX3NlcV9hZGRyIGRlc3Q7CS8qIEFkZHJlc3MgZm9yIFJFTU9WRV9ERVNUICovCisJdW5zaWduZWQgY2hhciBjaGFubmVsOwkvKiBDaGFubmVsIGZvciBSRU1PVkVfREVTVCAqLworCisJaW50ICB0eXBlOwkvKiBGb3IgUkVNT1ZFX0VWRU5UX1RZUEUgKi8KKwljaGFyICB0YWc7CS8qIFRhZyBmb3IgUkVNT1ZFX1RBRyAqLworCisJaW50ICByZXNlcnZlZFsxMF07CS8qIFRvIGFsbG93IGZvciBmdXR1cmUgYmluYXJ5IGNvbXBhdGliaWxpdHkgKi8KKworfTsKKworCisJLyoga25vd24gcG9ydCBudW1iZXJzICovCisjZGVmaW5lIFNORFJWX1NFUV9QT1JUX1NZU1RFTV9USU1FUgkwCisjZGVmaW5lIFNORFJWX1NFUV9QT1JUX1NZU1RFTV9BTk5PVU5DRQkxCisKKwkvKiBwb3J0IGNhcGFiaWxpdGllcyAoMzIgYml0cykgKi8KKyNkZWZpbmUgU05EUlZfU0VRX1BPUlRfQ0FQX1JFQUQJCSgxPDwwKQkvKiByZWFkYWJsZSBmcm9tIHRoaXMgcG9ydCAqLworI2RlZmluZSBTTkRSVl9TRVFfUE9SVF9DQVBfV1JJVEUJKDE8PDEpCS8qIHdyaXRhYmxlIHRvIHRoaXMgcG9ydCAqLworCisjZGVmaW5lIFNORFJWX1NFUV9QT1JUX0NBUF9TWU5DX1JFQUQJKDE8PDIpCisjZGVmaW5lIFNORFJWX1NFUV9QT1JUX0NBUF9TWU5DX1dSSVRFCSgxPDwzKQorCisjZGVmaW5lIFNORFJWX1NFUV9QT1JUX0NBUF9EVVBMRVgJKDE8PDQpCisKKyNkZWZpbmUgU05EUlZfU0VRX1BPUlRfQ0FQX1NVQlNfUkVBRAkoMTw8NSkJLyogYWxsb3cgcmVhZCBzdWJzY3JpcHRpb24gKi8KKyNkZWZpbmUgU05EUlZfU0VRX1BPUlRfQ0FQX1NVQlNfV1JJVEUJKDE8PDYpCS8qIGFsbG93IHdyaXRlIHN1YnNjcmlwdGlvbiAqLworI2RlZmluZSBTTkRSVl9TRVFfUE9SVF9DQVBfTk9fRVhQT1JUCSgxPDw3KQkvKiByb3V0aW5nIG5vdCBhbGxvd2VkICovCisKKwkvKiBwb3J0IHR5cGUgKi8KKyNkZWZpbmUgU05EUlZfU0VRX1BPUlRfVFlQRV9TUEVDSUZJQwkoMTw8MCkJLyogaGFyZHdhcmUgc3BlY2lmaWMgKi8KKyNkZWZpbmUgU05EUlZfU0VRX1BPUlRfVFlQRV9NSURJX0dFTkVSSUMgKDE8PDEpCS8qIGdlbmVyaWMgTUlESSBkZXZpY2UgKi8KKyNkZWZpbmUgU05EUlZfU0VRX1BPUlRfVFlQRV9NSURJX0dNCSgxPDwyKQkvKiBHZW5lcmFsIE1JREkgY29tcGF0aWJsZSBkZXZpY2UgKi8KKyNkZWZpbmUgU05EUlZfU0VRX1BPUlRfVFlQRV9NSURJX0dTCSgxPDwzKQkvKiBHUyBjb21wYXRpYmxlIGRldmljZSAqLworI2RlZmluZSBTTkRSVl9TRVFfUE9SVF9UWVBFX01JRElfWEcJKDE8PDQpCS8qIFhHIGNvbXBhdGlibGUgZGV2aWNlICovCisjZGVmaW5lIFNORFJWX1NFUV9QT1JUX1RZUEVfTUlESV9NVDMyCSgxPDw1KQkvKiBNVC0zMiBjb21wYXRpYmxlIGRldmljZSAqLworI2RlZmluZSBTTkRSVl9TRVFfUE9SVF9UWVBFX01JRElfR00yCSgxPDw2KQkvKiBHZW5lcmFsIE1JREkgMiBjb21wYXRpYmxlIGRldmljZSAqLworCisvKiBvdGhlciBzdGFuZGFyZHMuLi4qLworI2RlZmluZSBTTkRSVl9TRVFfUE9SVF9UWVBFX1NZTlRICSgxPDwxMCkJLyogU3ludGggZGV2aWNlIChubyBNSURJIGNvbXBhdGlibGUgLSBkaXJlY3Qgd2F2ZXRhYmxlKSAqLworI2RlZmluZSBTTkRSVl9TRVFfUE9SVF9UWVBFX0RJUkVDVF9TQU1QTEUgKDE8PDExKQkvKiBTYW1wbGluZyBkZXZpY2UgKHN1cHBvcnQgc2FtcGxlIGRvd25sb2FkKSAqLworI2RlZmluZSBTTkRSVl9TRVFfUE9SVF9UWVBFX1NBTVBMRQkoMTw8MTIpCS8qIFNhbXBsaW5nIGRldmljZSAoc2FtcGxlIGNhbiBiZSBkb3dubG9hZGVkIGF0IGFueSB0aW1lKSAqLworLyouLi4qLworI2RlZmluZSBTTkRSVl9TRVFfUE9SVF9UWVBFX0hBUkRXQVJFCSgxPDwxNikJLyogZHJpdmVyIGZvciBhIGhhcmR3YXJlIGRldmljZSAqLworI2RlZmluZSBTTkRSVl9TRVFfUE9SVF9UWVBFX1NPRlRXQVJFCSgxPDwxNykJLyogaW1wbGVtZW50ZWQgaW4gc29mdHdhcmUgKi8KKyNkZWZpbmUgU05EUlZfU0VRX1BPUlRfVFlQRV9TWU5USEVTSVpFUgkoMTw8MTgpCS8qIGdlbmVyYXRlcyBzb3VuZCAqLworI2RlZmluZSBTTkRSVl9TRVFfUE9SVF9UWVBFX1BPUlQJKDE8PDE5KQkvKiBjb25uZWN0cyB0byBvdGhlciBkZXZpY2UocykgKi8KKyNkZWZpbmUgU05EUlZfU0VRX1BPUlRfVFlQRV9BUFBMSUNBVElPTgkoMTw8MjApCS8qIGFwcGxpY2F0aW9uIChzZXF1ZW5jZXIvZWRpdG9yKSAqLworCisvKiBtaXNjLiBjb25kaXRpb25pbmcgZmxhZ3MgKi8KKyNkZWZpbmUgU05EUlZfU0VRX1BPUlRfRkxHX0dJVkVOX1BPUlQJKDE8PDApCisjZGVmaW5lIFNORFJWX1NFUV9QT1JUX0ZMR19USU1FU1RBTVAJKDE8PDEpCisjZGVmaW5lIFNORFJWX1NFUV9QT1JUX0ZMR19USU1FX1JFQUwJKDE8PDIpCisKK3N0cnVjdCBzbmRfc2VxX3BvcnRfaW5mbyB7CisJc3RydWN0IHNuZF9zZXFfYWRkciBhZGRyOwkvKiBjbGllbnQvcG9ydCBudW1iZXJzICovCisJY2hhciBuYW1lWzY0XTsJCQkvKiBwb3J0IG5hbWUgKi8KKworCXVuc2lnbmVkIGludCBjYXBhYmlsaXR5OwkvKiBwb3J0IGNhcGFiaWxpdHkgYml0cyAqLworCXVuc2lnbmVkIGludCB0eXBlOwkJLyogcG9ydCB0eXBlIGJpdHMgKi8KKwlpbnQgbWlkaV9jaGFubmVsczsJCS8qIGNoYW5uZWxzIHBlciBNSURJIHBvcnQgKi8KKwlpbnQgbWlkaV92b2ljZXM7CQkvKiB2b2ljZXMgcGVyIE1JREkgcG9ydCAqLworCWludCBzeW50aF92b2ljZXM7CQkvKiB2b2ljZXMgcGVyIFNZTlRIIHBvcnQgKi8KKworCWludCByZWFkX3VzZTsJCQkvKiBSL086IHN1YnNjcmliZXJzIGZvciBvdXRwdXQgKGZyb20gdGhpcyBwb3J0KSAqLworCWludCB3cml0ZV91c2U7CQkJLyogUi9POiBzdWJzY3JpYmVycyBmb3IgaW5wdXQgKHRvIHRoaXMgcG9ydCkgKi8KKworCXZvaWQgKmtlcm5lbDsJCQkvKiByZXNlcnZlZCBmb3Iga2VybmVsIHVzZSAobXVzdCBiZSBOVUxMKSAqLworCXVuc2lnbmVkIGludCBmbGFnczsJCS8qIG1pc2MuIGNvbmRpdGlvbmluZyAqLworCXVuc2lnbmVkIGNoYXIgdGltZV9xdWV1ZTsJLyogcXVldWUgIyBmb3IgdGltZXN0YW1waW5nICovCisJY2hhciByZXNlcnZlZFs1OV07CQkvKiBmb3IgZnV0dXJlIHVzZSAqLworfTsKKworCisvKiBxdWV1ZSBmbGFncyAqLworI2RlZmluZSBTTkRSVl9TRVFfUVVFVUVfRkxHX1NZTkMJKDE8PDApCS8qIHN5bmMgZW5hYmxlZCAqLworCisvKiBxdWV1ZSBpbmZvcm1hdGlvbiAqLworc3RydWN0IHNuZF9zZXFfcXVldWVfaW5mbyB7CisJaW50IHF1ZXVlOwkJLyogcXVldWUgaWQgKi8KKworCS8qCisJICogIHNlY3VyaXR5IHNldHRpbmdzLCBvbmx5IG93bmVyIG9mIHRoaXMgcXVldWUgY2FuIHN0YXJ0L3N0b3AgdGltZXIKKwkgKiAgZXRjLiBpZiB0aGUgcXVldWUgaXMgbG9ja2VkIGZvciBvdGhlciBjbGllbnRzCisJICovCisJaW50IG93bmVyOwkJLyogY2xpZW50IGlkIGZvciBvd25lciBvZiB0aGUgcXVldWUgKi8KKwl1bnNpZ25lZCBsb2NrZWQ6MTsJLyogdGltaW5nIHF1ZXVlIGxvY2tlZCBmb3Igb3RoZXIgcXVldWVzICovCisJY2hhciBuYW1lWzY0XTsJCS8qIG5hbWUgb2YgdGhpcyBxdWV1ZSAqLworCXVuc2lnbmVkIGludCBmbGFnczsJLyogZmxhZ3MgKi8KKwljaGFyIHJlc2VydmVkWzYwXTsJLyogZm9yIGZ1dHVyZSB1c2UgKi8KKworfTsKKworLyogcXVldWUgaW5mby9zdGF0dXMgKi8KK3N0cnVjdCBzbmRfc2VxX3F1ZXVlX3N0YXR1cyB7CisJaW50IHF1ZXVlOwkJCS8qIHF1ZXVlIGlkICovCisJaW50IGV2ZW50czsJCQkvKiByZWFkLW9ubHkgLSBxdWV1ZSBzaXplICovCisJc25kX3NlcV90aWNrX3RpbWVfdCB0aWNrOwkvKiBjdXJyZW50IHRpY2sgKi8KKwlzdHJ1Y3Qgc25kX3NlcV9yZWFsX3RpbWUgdGltZTsJLyogY3VycmVudCB0aW1lICovCisJaW50IHJ1bm5pbmc7CQkJLyogcnVubmluZyBzdGF0ZSBvZiBxdWV1ZSAqLworCWludCBmbGFnczsJCQkvKiB2YXJpb3VzIGZsYWdzICovCisJY2hhciByZXNlcnZlZFs2NF07CQkvKiBmb3IgdGhlIGZ1dHVyZSAqLworfTsKKworCisvKiBxdWV1ZSB0ZW1wbyAqLworc3RydWN0IHNuZF9zZXFfcXVldWVfdGVtcG8geworCWludCBxdWV1ZTsJCQkvKiBzZXF1ZW5jZXIgcXVldWUgKi8KKwl1bnNpZ25lZCBpbnQgdGVtcG87CQkvKiBjdXJyZW50IHRlbXBvLCB1cy90aWNrICovCisJaW50IHBwcTsJCQkvKiB0aW1lIHJlc29sdXRpb24sIHRpY2tzL3F1YXJ0ZXIgKi8KKwl1bnNpZ25lZCBpbnQgc2tld192YWx1ZTsJLyogcXVldWUgc2tldyAqLworCXVuc2lnbmVkIGludCBza2V3X2Jhc2U7CQkvKiBxdWV1ZSBza2V3IGJhc2UgKi8KKwljaGFyIHJlc2VydmVkWzI0XTsJCS8qIGZvciB0aGUgZnV0dXJlICovCit9OworCisKKy8qIHNlcXVlbmNlciB0aW1lciBzb3VyY2VzICovCisjZGVmaW5lIFNORFJWX1NFUV9USU1FUl9BTFNBCQkwCS8qIEFMU0EgdGltZXIgKi8KKyNkZWZpbmUgU05EUlZfU0VRX1RJTUVSX01JRElfQ0xPQ0sJMQkvKiBNaWRpIENsb2NrIChDTE9DSyBldmVudCkgKi8KKyNkZWZpbmUgU05EUlZfU0VRX1RJTUVSX01JRElfVElDSwkyCS8qIE1pZGkgVGltZXIgVGljayAoVElDSyBldmVudCkgKi8KKworLyogcXVldWUgdGltZXIgaW5mbyAqLworc3RydWN0IHNuZF9zZXFfcXVldWVfdGltZXIgeworCWludCBxdWV1ZTsJCQkvKiBzZXF1ZW5jZXIgcXVldWUgKi8KKwlpbnQgdHlwZTsJCQkvKiBzb3VyY2UgdGltZXIgdHlwZSAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBzbmRfdGltZXJfaWQgaWQ7CS8qIEFMU0EncyB0aW1lciBJRCAqLworCQkJdW5zaWduZWQgaW50IHJlc29sdXRpb247CS8qIHJlc29sdXRpb24gaW4gSHogKi8KKwkJfSBhbHNhOworCX0gdTsKKwljaGFyIHJlc2VydmVkWzY0XTsJCS8qIGZvciB0aGUgZnV0dXJlIHVzZSAqLworfTsKKworCitzdHJ1Y3Qgc25kX3NlcV9xdWV1ZV9jbGllbnQgeworCWludCBxdWV1ZTsJCS8qIHNlcXVlbmNlciBxdWV1ZSAqLworCWludCBjbGllbnQ7CQkvKiBzZXF1ZW5jZXIgY2xpZW50ICovCisJaW50IHVzZWQ7CQkvKiBxdWV1ZSBpcyB1c2VkIHdpdGggdGhpcyBjbGllbnQKKwkJCQkgICAobXVzdCBiZSBzZXQgZm9yIGFjY2VwdGluZyBldmVudHMpICovCisJLyogcGVyIGNsaWVudCB3YXRlcm1hcmtzICovCisJY2hhciByZXNlcnZlZFs2NF07CS8qIGZvciBmdXR1cmUgdXNlICovCit9OworCisKKyNkZWZpbmUgU05EUlZfU0VRX1BPUlRfU1VCU19FWENMVVNJVkUJKDE8PDApCS8qIGV4Y2x1c2l2ZSBjb25uZWN0aW9uICovCisjZGVmaW5lIFNORFJWX1NFUV9QT1JUX1NVQlNfVElNRVNUQU1QCSgxPDwxKQorI2RlZmluZSBTTkRSVl9TRVFfUE9SVF9TVUJTX1RJTUVfUkVBTAkoMTw8MikKKworc3RydWN0IHNuZF9zZXFfcG9ydF9zdWJzY3JpYmUgeworCXN0cnVjdCBzbmRfc2VxX2FkZHIgc2VuZGVyOwkvKiBzZW5kZXIgYWRkcmVzcyAqLworCXN0cnVjdCBzbmRfc2VxX2FkZHIgZGVzdDsJLyogZGVzdGluYXRpb24gYWRkcmVzcyAqLworCXVuc2lnbmVkIGludCB2b2ljZXM7CQkvKiBudW1iZXIgb2Ygdm9pY2VzIHRvIGJlIGFsbG9jYXRlZCAoMCA9IGRvbid0IGNhcmUpICovCisJdW5zaWduZWQgaW50IGZsYWdzOwkJLyogbW9kZXMgKi8KKwl1bnNpZ25lZCBjaGFyIHF1ZXVlOwkJLyogaW5wdXQgdGltZS1zdGFtcCBxdWV1ZSAob3B0aW9uYWwpICovCisJdW5zaWduZWQgY2hhciBwYWRbM107CQkvKiByZXNlcnZlZCAqLworCWNoYXIgcmVzZXJ2ZWRbNjRdOworfTsKKworLyogdHlwZSBvZiBxdWVyeSBzdWJzY3JpcHRpb24gKi8KKyNkZWZpbmUgU05EUlZfU0VRX1FVRVJZX1NVQlNfUkVBRAkwCisjZGVmaW5lIFNORFJWX1NFUV9RVUVSWV9TVUJTX1dSSVRFCTEKKworc3RydWN0IHNuZF9zZXFfcXVlcnlfc3VicyB7CisJc3RydWN0IHNuZF9zZXFfYWRkciByb290OwkvKiBjbGllbnQvcG9ydCBpZCB0byBiZSBzZWFyY2hlZCAqLworCWludCB0eXBlOwkJLyogUkVBRCBvciBXUklURSAqLworCWludCBpbmRleDsJCS8qIDAuLk4tMSAqLworCWludCBudW1fc3ViczsJCS8qIFIvTzogbnVtYmVyIG9mIHN1YnNjcmlwdGlvbnMgb24gdGhpcyBwb3J0ICovCisJc3RydWN0IHNuZF9zZXFfYWRkciBhZGRyOwkvKiBSL086IHJlc3VsdCAqLworCXVuc2lnbmVkIGNoYXIgcXVldWU7CS8qIFIvTzogcmVzdWx0ICovCisJdW5zaWduZWQgaW50IGZsYWdzOwkvKiBSL086IHJlc3VsdCAqLworCWNoYXIgcmVzZXJ2ZWRbNjRdOwkvKiBmb3IgZnV0dXJlIHVzZSAqLworfTsKKworCisvKgorICogIElPQ1RMIGNvbW1hbmRzCisgKi8KKworI2RlZmluZSBTTkRSVl9TRVFfSU9DVExfUFZFUlNJT04JX0lPUiAoJ1MnLCAweDAwLCBpbnQpCisjZGVmaW5lIFNORFJWX1NFUV9JT0NUTF9DTElFTlRfSUQJX0lPUiAoJ1MnLCAweDAxLCBpbnQpCisjZGVmaW5lIFNORFJWX1NFUV9JT0NUTF9TWVNURU1fSU5GTwlfSU9XUignUycsIDB4MDIsIHN0cnVjdCBzbmRfc2VxX3N5c3RlbV9pbmZvKQorI2RlZmluZSBTTkRSVl9TRVFfSU9DVExfUlVOTklOR19NT0RFCV9JT1dSKCdTJywgMHgwMywgc3RydWN0IHNuZF9zZXFfcnVubmluZ19pbmZvKQorCisjZGVmaW5lIFNORFJWX1NFUV9JT0NUTF9HRVRfQ0xJRU5UX0lORk8JX0lPV1IoJ1MnLCAweDEwLCBzdHJ1Y3Qgc25kX3NlcV9jbGllbnRfaW5mbykKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX1NFVF9DTElFTlRfSU5GTwlfSU9XICgnUycsIDB4MTEsIHN0cnVjdCBzbmRfc2VxX2NsaWVudF9pbmZvKQorCisjZGVmaW5lIFNORFJWX1NFUV9JT0NUTF9DUkVBVEVfUE9SVAlfSU9XUignUycsIDB4MjAsIHN0cnVjdCBzbmRfc2VxX3BvcnRfaW5mbykKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX0RFTEVURV9QT1JUCV9JT1cgKCdTJywgMHgyMSwgc3RydWN0IHNuZF9zZXFfcG9ydF9pbmZvKQorI2RlZmluZSBTTkRSVl9TRVFfSU9DVExfR0VUX1BPUlRfSU5GTwlfSU9XUignUycsIDB4MjIsIHN0cnVjdCBzbmRfc2VxX3BvcnRfaW5mbykKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX1NFVF9QT1JUX0lORk8JX0lPVyAoJ1MnLCAweDIzLCBzdHJ1Y3Qgc25kX3NlcV9wb3J0X2luZm8pCisKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX1NVQlNDUklCRV9QT1JUCV9JT1cgKCdTJywgMHgzMCwgc3RydWN0IHNuZF9zZXFfcG9ydF9zdWJzY3JpYmUpCisjZGVmaW5lIFNORFJWX1NFUV9JT0NUTF9VTlNVQlNDUklCRV9QT1JUIF9JT1cgKCdTJywgMHgzMSwgc3RydWN0IHNuZF9zZXFfcG9ydF9zdWJzY3JpYmUpCisKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX0NSRUFURV9RVUVVRQlfSU9XUignUycsIDB4MzIsIHN0cnVjdCBzbmRfc2VxX3F1ZXVlX2luZm8pCisjZGVmaW5lIFNORFJWX1NFUV9JT0NUTF9ERUxFVEVfUVVFVUUJX0lPVyAoJ1MnLCAweDMzLCBzdHJ1Y3Qgc25kX3NlcV9xdWV1ZV9pbmZvKQorI2RlZmluZSBTTkRSVl9TRVFfSU9DVExfR0VUX1FVRVVFX0lORk8JX0lPV1IoJ1MnLCAweDM0LCBzdHJ1Y3Qgc25kX3NlcV9xdWV1ZV9pbmZvKQorI2RlZmluZSBTTkRSVl9TRVFfSU9DVExfU0VUX1FVRVVFX0lORk8JX0lPV1IoJ1MnLCAweDM1LCBzdHJ1Y3Qgc25kX3NlcV9xdWV1ZV9pbmZvKQorI2RlZmluZSBTTkRSVl9TRVFfSU9DVExfR0VUX05BTUVEX1FVRVVFCV9JT1dSKCdTJywgMHgzNiwgc3RydWN0IHNuZF9zZXFfcXVldWVfaW5mbykKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX0dFVF9RVUVVRV9TVEFUVVMgX0lPV1IoJ1MnLCAweDQwLCBzdHJ1Y3Qgc25kX3NlcV9xdWV1ZV9zdGF0dXMpCisjZGVmaW5lIFNORFJWX1NFUV9JT0NUTF9HRVRfUVVFVUVfVEVNUE8JX0lPV1IoJ1MnLCAweDQxLCBzdHJ1Y3Qgc25kX3NlcV9xdWV1ZV90ZW1wbykKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX1NFVF9RVUVVRV9URU1QTwlfSU9XICgnUycsIDB4NDIsIHN0cnVjdCBzbmRfc2VxX3F1ZXVlX3RlbXBvKQorI2RlZmluZSBTTkRSVl9TRVFfSU9DVExfR0VUX1FVRVVFX09XTkVSCV9JT1dSKCdTJywgMHg0Mywgc3RydWN0IHNuZF9zZXFfcXVldWVfb3duZXIpCisjZGVmaW5lIFNORFJWX1NFUV9JT0NUTF9TRVRfUVVFVUVfT1dORVIJX0lPVyAoJ1MnLCAweDQ0LCBzdHJ1Y3Qgc25kX3NlcV9xdWV1ZV9vd25lcikKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX0dFVF9RVUVVRV9USU1FUglfSU9XUignUycsIDB4NDUsIHN0cnVjdCBzbmRfc2VxX3F1ZXVlX3RpbWVyKQorI2RlZmluZSBTTkRSVl9TRVFfSU9DVExfU0VUX1FVRVVFX1RJTUVSCV9JT1cgKCdTJywgMHg0Niwgc3RydWN0IHNuZF9zZXFfcXVldWVfdGltZXIpCisvKiBYWFgKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX0dFVF9RVUVVRV9TWU5DCV9JT1dSKCdTJywgMHg1Mywgc3RydWN0IHNuZF9zZXFfcXVldWVfc3luYykKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX1NFVF9RVUVVRV9TWU5DCV9JT1cgKCdTJywgMHg1NCwgc3RydWN0IHNuZF9zZXFfcXVldWVfc3luYykKKyovCisjZGVmaW5lIFNORFJWX1NFUV9JT0NUTF9HRVRfUVVFVUVfQ0xJRU5UCV9JT1dSKCdTJywgMHg0OSwgc3RydWN0IHNuZF9zZXFfcXVldWVfY2xpZW50KQorI2RlZmluZSBTTkRSVl9TRVFfSU9DVExfU0VUX1FVRVVFX0NMSUVOVAlfSU9XICgnUycsIDB4NGEsIHN0cnVjdCBzbmRfc2VxX3F1ZXVlX2NsaWVudCkKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX0dFVF9DTElFTlRfUE9PTAlfSU9XUignUycsIDB4NGIsIHN0cnVjdCBzbmRfc2VxX2NsaWVudF9wb29sKQorI2RlZmluZSBTTkRSVl9TRVFfSU9DVExfU0VUX0NMSUVOVF9QT09MCV9JT1cgKCdTJywgMHg0Yywgc3RydWN0IHNuZF9zZXFfY2xpZW50X3Bvb2wpCisjZGVmaW5lIFNORFJWX1NFUV9JT0NUTF9SRU1PVkVfRVZFTlRTCV9JT1cgKCdTJywgMHg0ZSwgc3RydWN0IHNuZF9zZXFfcmVtb3ZlX2V2ZW50cykKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX1FVRVJZX1NVQlMJX0lPV1IoJ1MnLCAweDRmLCBzdHJ1Y3Qgc25kX3NlcV9xdWVyeV9zdWJzKQorI2RlZmluZSBTTkRSVl9TRVFfSU9DVExfR0VUX1NVQlNDUklQVElPTglfSU9XUignUycsIDB4NTAsIHN0cnVjdCBzbmRfc2VxX3BvcnRfc3Vic2NyaWJlKQorI2RlZmluZSBTTkRSVl9TRVFfSU9DVExfUVVFUllfTkVYVF9DTElFTlQJX0lPV1IoJ1MnLCAweDUxLCBzdHJ1Y3Qgc25kX3NlcV9jbGllbnRfaW5mbykKKyNkZWZpbmUgU05EUlZfU0VRX0lPQ1RMX1FVRVJZX05FWFRfUE9SVAlfSU9XUignUycsIDB4NTIsIHN0cnVjdCBzbmRfc2VxX3BvcnRfaW5mbykKKworI2VuZGlmIC8qIF9fU09VTkRfQVNFUVVFTkNFUl9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc291bmQvYXNvdW5kLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc291bmQvYXNvdW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJjZTNmOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zb3VuZC9hc291bmQuaApAQCAtMCwwICsxLDg5OSBAQAorLyoKKyAqICBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUgLSBBTFNBIC0gRHJpdmVyCisgKiAgQ29weXJpZ2h0IChjKSAxOTk0LTIwMDMgYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBwZXJleC5jej4sCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWJyYW1vIEJhZ25hcmEgPGFicmFtb0BhbHNhLXByb2plY3Qub3JnPgorICoKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19TT1VORF9BU09VTkRfSAorI2RlZmluZSBfX1NPVU5EX0FTT1VORF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisKKy8qCisgKiAgcHJvdG9jb2wgdmVyc2lvbgorICovCisKKyNkZWZpbmUgU05EUlZfUFJPVE9DT0xfVkVSU0lPTihtYWpvciwgbWlub3IsIHN1Ym1pbm9yKSAoKChtYWpvcik8PDE2KXwoKG1pbm9yKTw8OCl8KHN1Ym1pbm9yKSkKKyNkZWZpbmUgU05EUlZfUFJPVE9DT0xfTUFKT1IodmVyc2lvbikgKCgodmVyc2lvbik+PjE2KSYweGZmZmYpCisjZGVmaW5lIFNORFJWX1BST1RPQ09MX01JTk9SKHZlcnNpb24pICgoKHZlcnNpb24pPj44KSYweGZmKQorI2RlZmluZSBTTkRSVl9QUk9UT0NPTF9NSUNSTyh2ZXJzaW9uKSAoKHZlcnNpb24pJjB4ZmYpCisjZGVmaW5lIFNORFJWX1BST1RPQ09MX0lOQ09NUEFUSUJMRShrdmVyc2lvbiwgdXZlcnNpb24pIFwKKwkoU05EUlZfUFJPVE9DT0xfTUFKT1Ioa3ZlcnNpb24pICE9IFNORFJWX1BST1RPQ09MX01BSk9SKHV2ZXJzaW9uKSB8fCBcCisJIChTTkRSVl9QUk9UT0NPTF9NQUpPUihrdmVyc2lvbikgPT0gU05EUlZfUFJPVE9DT0xfTUFKT1IodXZlcnNpb24pICYmIFwKKwkgICBTTkRSVl9QUk9UT0NPTF9NSU5PUihrdmVyc2lvbikgIT0gU05EUlZfUFJPVE9DT0xfTUlOT1IodXZlcnNpb24pKSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgRGlnaXRhbCBhdWRpbyBpbnRlcmZhY2UJCQkJCSAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBzbmRfYWVzX2llYzk1OCB7CisJdW5zaWduZWQgY2hhciBzdGF0dXNbMjRdOwkvKiBBRVMvSUVDOTU4IGNoYW5uZWwgc3RhdHVzIGJpdHMgKi8KKwl1bnNpZ25lZCBjaGFyIHN1YmNvZGVbMTQ3XTsJLyogQUVTL0lFQzk1OCBzdWJjb2RlIGJpdHMgKi8KKwl1bnNpZ25lZCBjaGFyIHBhZDsJCS8qIG5vdGhpbmcgKi8KKwl1bnNpZ25lZCBjaGFyIGRpZ19zdWJmcmFtZVs0XTsJLyogQUVTL0lFQzk1OCBzdWJmcmFtZSBiaXRzICovCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgU2VjdGlvbiBmb3IgZHJpdmVyIGhhcmR3YXJlIGRlcGVuZGVudCBpbnRlcmZhY2UgLSAvZGV2L3NuZC9odz8gICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgU05EUlZfSFdERVBfVkVSU0lPTgkJU05EUlZfUFJPVE9DT0xfVkVSU0lPTigxLCAwLCAxKQorCitlbnVtIHsKKwlTTkRSVl9IV0RFUF9JRkFDRV9PUEwyID0gMCwKKwlTTkRSVl9IV0RFUF9JRkFDRV9PUEwzLAorCVNORFJWX0hXREVQX0lGQUNFX09QTDQsCisJU05EUlZfSFdERVBfSUZBQ0VfU0IxNkNTUCwJLyogQ3JlYXRpdmUgU2lnbmFsIFByb2Nlc3NvciAqLworCVNORFJWX0hXREVQX0lGQUNFX0VNVTEwSzEsCS8qIEZYODAxMCBwcm9jZXNzb3IgaW4gRU1VMTBLMSBjaGlwICovCisJU05EUlZfSFdERVBfSUZBQ0VfWVNTMjI1LAkvKiBZYW1haGEgRlggcHJvY2Vzc29yICovCisJU05EUlZfSFdERVBfSUZBQ0VfSUNTMjExNSwJLyogV2F2ZXRhYmxlIHN5bnRoICovCisJU05EUlZfSFdERVBfSUZBQ0VfU1NDQVBFLAkvKiBFbnNvbmlxIFNvdW5kU2NhcGUgSVNBIGNhcmQgKE1DNjhFQzAwMCkgKi8KKwlTTkRSVl9IV0RFUF9JRkFDRV9WWCwJCS8qIERpZ2lncmFtIFZYIGNhcmRzICovCisJU05EUlZfSFdERVBfSUZBQ0VfTUlYQVJULAkvKiBEaWdpZ3JhbSBtaVhhcnQgY2FyZHMgKi8KKwlTTkRSVl9IV0RFUF9JRkFDRV9VU1gyWSwJLyogVGFzY2FtIFVTMTIyLCBVUzIyNCAmIFVTNDI4IHVzYiAqLworCVNORFJWX0hXREVQX0lGQUNFX0VNVVhfV0FWRVRBQkxFLCAvKiBFbXVYIHdhdmV0YWJsZSAqLwkKKwlTTkRSVl9IV0RFUF9JRkFDRV9CTFVFVE9PVEgsCS8qIEJsdWV0b290aCBhdWRpbyAqLworCVNORFJWX0hXREVQX0lGQUNFX1VTWDJZX1BDTSwJLyogVGFzY2FtIFVTMTIyLCBVUzIyNCAmIFVTNDI4IHJhd3VzYiBwY20gKi8KKwlTTkRSVl9IV0RFUF9JRkFDRV9QQ1hIUiwJLyogRGlnaWdyYW0gUENYSFIgKi8KKwlTTkRSVl9IV0RFUF9JRkFDRV9TQl9SQywJLyogU0IgRXh0aWd5L0F1ZGlneTJOWCByZW1vdGUgY29udHJvbCAqLworCVNORFJWX0hXREVQX0lGQUNFX0hEQSwJCS8qIEhELWF1ZGlvICovCisJU05EUlZfSFdERVBfSUZBQ0VfVVNCX1NUUkVBTSwJLyogZGlyZWN0IGFjY2VzcyB0byB1c2Igc3RyZWFtICovCisKKwkvKiBEb24ndCBmb3JnZXQgdG8gY2hhbmdlIHRoZSBmb2xsb3dpbmc6ICovCisJU05EUlZfSFdERVBfSUZBQ0VfTEFTVCA9IFNORFJWX0hXREVQX0lGQUNFX1VTQl9TVFJFQU0KK307CisKK3N0cnVjdCBzbmRfaHdkZXBfaW5mbyB7CisJdW5zaWduZWQgaW50IGRldmljZTsJCS8qIFdSOiBkZXZpY2UgbnVtYmVyICovCisJaW50IGNhcmQ7CQkJLyogUjogY2FyZCBudW1iZXIgKi8KKwl1bnNpZ25lZCBjaGFyIGlkWzY0XTsJCS8qIElEICh1c2VyIHNlbGVjdGFibGUpICovCisJdW5zaWduZWQgY2hhciBuYW1lWzgwXTsJCS8qIGh3ZGVwIG5hbWUgKi8KKwlpbnQgaWZhY2U7CQkJLyogaHdkZXAgaW50ZXJmYWNlICovCisJdW5zaWduZWQgY2hhciByZXNlcnZlZFs2NF07CS8qIHJlc2VydmVkIGZvciBmdXR1cmUgKi8KK307CisKKy8qIGdlbmVyaWMgRFNQIGxvYWRlciAqLworc3RydWN0IHNuZF9od2RlcF9kc3Bfc3RhdHVzIHsKKwl1bnNpZ25lZCBpbnQgdmVyc2lvbjsJCS8qIFI6IGRyaXZlci1zcGVjaWZpYyB2ZXJzaW9uICovCisJdW5zaWduZWQgY2hhciBpZFszMl07CQkvKiBSOiBkcml2ZXItc3BlY2lmaWMgSUQgc3RyaW5nICovCisJdW5zaWduZWQgaW50IG51bV9kc3BzOwkJLyogUjogbnVtYmVyIG9mIERTUCBpbWFnZXMgdG8gdHJhbnNmZXIgKi8KKwl1bnNpZ25lZCBpbnQgZHNwX2xvYWRlZDsJLyogUjogYml0IGZsYWdzIGluZGljYXRpbmcgdGhlIGxvYWRlZCBEU1BzICovCisJdW5zaWduZWQgaW50IGNoaXBfcmVhZHk7CS8qIFI6IDEgPSBpbml0aWFsaXphdGlvbiBmaW5pc2hlZCAqLworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbMTZdOwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworfTsKKworc3RydWN0IHNuZF9od2RlcF9kc3BfaW1hZ2UgeworCXVuc2lnbmVkIGludCBpbmRleDsJCS8qIFc6IERTUCBpbmRleCAqLworCXVuc2lnbmVkIGNoYXIgbmFtZVs2NF07CQkvKiBXOiBJRCAoZS5nLiBmaWxlIG5hbWUpICovCisJdW5zaWduZWQgY2hhciAqaW1hZ2U7CS8qIFc6IGJpbmFyeSBpbWFnZSAqLworCXNpemVfdCBsZW5ndGg7CQkJLyogVzogc2l6ZSBvZiBpbWFnZSBpbiBieXRlcyAqLworCXVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGE7CS8qIFc6IGRyaXZlci1zcGVjaWZpYyBkYXRhICovCit9OworCisjZGVmaW5lIFNORFJWX0hXREVQX0lPQ1RMX1BWRVJTSU9OCV9JT1IgKCdIJywgMHgwMCwgaW50KQorI2RlZmluZSBTTkRSVl9IV0RFUF9JT0NUTF9JTkZPCQlfSU9SICgnSCcsIDB4MDEsIHN0cnVjdCBzbmRfaHdkZXBfaW5mbykKKyNkZWZpbmUgU05EUlZfSFdERVBfSU9DVExfRFNQX1NUQVRVUwlfSU9SKCdIJywgMHgwMiwgc3RydWN0IHNuZF9od2RlcF9kc3Bfc3RhdHVzKQorI2RlZmluZSBTTkRSVl9IV0RFUF9JT0NUTF9EU1BfTE9BRAlfSU9XKCdIJywgMHgwMywgc3RydWN0IHNuZF9od2RlcF9kc3BfaW1hZ2UpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICBEaWdpdGFsIEF1ZGlvIChQQ00pIGludGVyZmFjZSAtIC9kZXYvc25kL3BjbT8/ICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFNORFJWX1BDTV9WRVJTSU9OCQlTTkRSVl9QUk9UT0NPTF9WRVJTSU9OKDIsIDAsIDEwKQorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgc25kX3BjbV91ZnJhbWVzX3Q7Cit0eXBlZGVmIHNpZ25lZCBsb25nIHNuZF9wY21fc2ZyYW1lc190OworCitlbnVtIHsKKwlTTkRSVl9QQ01fQ0xBU1NfR0VORVJJQyA9IDAsCS8qIHN0YW5kYXJkIG1vbm8gb3Igc3RlcmVvIGRldmljZSAqLworCVNORFJWX1BDTV9DTEFTU19NVUxUSSwJCS8qIG11bHRpY2hhbm5lbCBkZXZpY2UgKi8KKwlTTkRSVl9QQ01fQ0xBU1NfTU9ERU0sCQkvKiBzb2Z0d2FyZSBtb2RlbSBjbGFzcyAqLworCVNORFJWX1BDTV9DTEFTU19ESUdJVElaRVIsCS8qIGRpZ2l0aXplciBjbGFzcyAqLworCS8qIERvbid0IGZvcmdldCB0byBjaGFuZ2UgdGhlIGZvbGxvd2luZzogKi8KKwlTTkRSVl9QQ01fQ0xBU1NfTEFTVCA9IFNORFJWX1BDTV9DTEFTU19ESUdJVElaRVIsCit9OworCitlbnVtIHsKKwlTTkRSVl9QQ01fU1VCQ0xBU1NfR0VORVJJQ19NSVggPSAwLCAvKiBtb25vIG9yIHN0ZXJlbyBzdWJkZXZpY2VzIGFyZSBtaXhlZCB0b2dldGhlciAqLworCVNORFJWX1BDTV9TVUJDTEFTU19NVUxUSV9NSVgsCS8qIG11bHRpY2hhbm5lbCBzdWJkZXZpY2VzIGFyZSBtaXhlZCB0b2dldGhlciAqLworCS8qIERvbid0IGZvcmdldCB0byBjaGFuZ2UgdGhlIGZvbGxvd2luZzogKi8KKwlTTkRSVl9QQ01fU1VCQ0xBU1NfTEFTVCA9IFNORFJWX1BDTV9TVUJDTEFTU19NVUxUSV9NSVgsCit9OworCitlbnVtIHsKKwlTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLID0gMCwKKwlTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsCisJU05EUlZfUENNX1NUUkVBTV9MQVNUID0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLAorfTsKKwordHlwZWRlZiBpbnQgX19iaXR3aXNlIHNuZF9wY21fYWNjZXNzX3Q7CisjZGVmaW5lCVNORFJWX1BDTV9BQ0NFU1NfTU1BUF9JTlRFUkxFQVZFRAkoKHNuZF9wY21fYWNjZXNzX3QpIDApIC8qIGludGVybGVhdmVkIG1tYXAgKi8KKyNkZWZpbmUJU05EUlZfUENNX0FDQ0VTU19NTUFQX05PTklOVEVSTEVBVkVECSgoc25kX3BjbV9hY2Nlc3NfdCkgMSkgLyogbm9uaW50ZXJsZWF2ZWQgbW1hcCAqLworI2RlZmluZQlTTkRSVl9QQ01fQUNDRVNTX01NQVBfQ09NUExFWAkJKChzbmRfcGNtX2FjY2Vzc190KSAyKSAvKiBjb21wbGV4IG1tYXAgKi8KKyNkZWZpbmUJU05EUlZfUENNX0FDQ0VTU19SV19JTlRFUkxFQVZFRAkJKChzbmRfcGNtX2FjY2Vzc190KSAzKSAvKiByZWFkaS93cml0ZWkgKi8KKyNkZWZpbmUJU05EUlZfUENNX0FDQ0VTU19SV19OT05JTlRFUkxFQVZFRAkoKHNuZF9wY21fYWNjZXNzX3QpIDQpIC8qIHJlYWRuL3dyaXRlbiAqLworI2RlZmluZQlTTkRSVl9QQ01fQUNDRVNTX0xBU1QJCVNORFJWX1BDTV9BQ0NFU1NfUldfTk9OSU5URVJMRUFWRUQKKwordHlwZWRlZiBpbnQgX19iaXR3aXNlIHNuZF9wY21fZm9ybWF0X3Q7CisjZGVmaW5lCVNORFJWX1BDTV9GT1JNQVRfUzgJKChzbmRfcGNtX2Zvcm1hdF90KSAwKQorI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX1U4CSgoc25kX3BjbV9mb3JtYXRfdCkgMSkKKyNkZWZpbmUJU05EUlZfUENNX0ZPUk1BVF9TMTZfTEUJKChzbmRfcGNtX2Zvcm1hdF90KSAyKQorI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX1MxNl9CRQkoKHNuZF9wY21fZm9ybWF0X3QpIDMpCisjZGVmaW5lCVNORFJWX1BDTV9GT1JNQVRfVTE2X0xFCSgoc25kX3BjbV9mb3JtYXRfdCkgNCkKKyNkZWZpbmUJU05EUlZfUENNX0ZPUk1BVF9VMTZfQkUJKChzbmRfcGNtX2Zvcm1hdF90KSA1KQorI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX1MyNF9MRQkoKHNuZF9wY21fZm9ybWF0X3QpIDYpIC8qIGxvdyB0aHJlZSBieXRlcyAqLworI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX1MyNF9CRQkoKHNuZF9wY21fZm9ybWF0X3QpIDcpIC8qIGxvdyB0aHJlZSBieXRlcyAqLworI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX1UyNF9MRQkoKHNuZF9wY21fZm9ybWF0X3QpIDgpIC8qIGxvdyB0aHJlZSBieXRlcyAqLworI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX1UyNF9CRQkoKHNuZF9wY21fZm9ybWF0X3QpIDkpIC8qIGxvdyB0aHJlZSBieXRlcyAqLworI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX1MzMl9MRQkoKHNuZF9wY21fZm9ybWF0X3QpIDEwKQorI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX1MzMl9CRQkoKHNuZF9wY21fZm9ybWF0X3QpIDExKQorI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX1UzMl9MRQkoKHNuZF9wY21fZm9ybWF0X3QpIDEyKQorI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX1UzMl9CRQkoKHNuZF9wY21fZm9ybWF0X3QpIDEzKQorI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX0ZMT0FUX0xFCSgoc25kX3BjbV9mb3JtYXRfdCkgMTQpIC8qIDQtYnl0ZSBmbG9hdCwgSUVFRS03NTQgMzItYml0LCByYW5nZSAtMS4wIHRvIDEuMCAqLworI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX0ZMT0FUX0JFCSgoc25kX3BjbV9mb3JtYXRfdCkgMTUpIC8qIDQtYnl0ZSBmbG9hdCwgSUVFRS03NTQgMzItYml0LCByYW5nZSAtMS4wIHRvIDEuMCAqLworI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX0ZMT0FUNjRfTEUJKChzbmRfcGNtX2Zvcm1hdF90KSAxNikgLyogOC1ieXRlIGZsb2F0LCBJRUVFLTc1NCA2NC1iaXQsIHJhbmdlIC0xLjAgdG8gMS4wICovCisjZGVmaW5lCVNORFJWX1BDTV9GT1JNQVRfRkxPQVQ2NF9CRQkoKHNuZF9wY21fZm9ybWF0X3QpIDE3KSAvKiA4LWJ5dGUgZmxvYXQsIElFRUUtNzU0IDY0LWJpdCwgcmFuZ2UgLTEuMCB0byAxLjAgKi8KKyNkZWZpbmUJU05EUlZfUENNX0ZPUk1BVF9JRUM5NThfU1VCRlJBTUVfTEUgKChzbmRfcGNtX2Zvcm1hdF90KSAxOCkgLyogSUVDLTk1OCBzdWJmcmFtZSwgTGl0dGxlIEVuZGlhbiAqLworI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX0lFQzk1OF9TVUJGUkFNRV9CRSAoKHNuZF9wY21fZm9ybWF0X3QpIDE5KSAvKiBJRUMtOTU4IHN1YmZyYW1lLCBCaWcgRW5kaWFuICovCisjZGVmaW5lCVNORFJWX1BDTV9GT1JNQVRfTVVfTEFXCQkoKHNuZF9wY21fZm9ybWF0X3QpIDIwKQorI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX0FfTEFXCQkoKHNuZF9wY21fZm9ybWF0X3QpIDIxKQorI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX0lNQV9BRFBDTQkoKHNuZF9wY21fZm9ybWF0X3QpIDIyKQorI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX01QRUcJCSgoc25kX3BjbV9mb3JtYXRfdCkgMjMpCisjZGVmaW5lCVNORFJWX1BDTV9GT1JNQVRfR1NNCQkoKHNuZF9wY21fZm9ybWF0X3QpIDI0KQorI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX1NQRUNJQUwJKChzbmRfcGNtX2Zvcm1hdF90KSAzMSkKKyNkZWZpbmUJU05EUlZfUENNX0ZPUk1BVF9TMjRfM0xFCSgoc25kX3BjbV9mb3JtYXRfdCkgMzIpCS8qIGluIHRocmVlIGJ5dGVzICovCisjZGVmaW5lCVNORFJWX1BDTV9GT1JNQVRfUzI0XzNCRQkoKHNuZF9wY21fZm9ybWF0X3QpIDMzKQkvKiBpbiB0aHJlZSBieXRlcyAqLworI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX1UyNF8zTEUJKChzbmRfcGNtX2Zvcm1hdF90KSAzNCkJLyogaW4gdGhyZWUgYnl0ZXMgKi8KKyNkZWZpbmUJU05EUlZfUENNX0ZPUk1BVF9VMjRfM0JFCSgoc25kX3BjbV9mb3JtYXRfdCkgMzUpCS8qIGluIHRocmVlIGJ5dGVzICovCisjZGVmaW5lCVNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRQkoKHNuZF9wY21fZm9ybWF0X3QpIDM2KQkvKiBpbiB0aHJlZSBieXRlcyAqLworI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX1MyMF8zQkUJKChzbmRfcGNtX2Zvcm1hdF90KSAzNykJLyogaW4gdGhyZWUgYnl0ZXMgKi8KKyNkZWZpbmUJU05EUlZfUENNX0ZPUk1BVF9VMjBfM0xFCSgoc25kX3BjbV9mb3JtYXRfdCkgMzgpCS8qIGluIHRocmVlIGJ5dGVzICovCisjZGVmaW5lCVNORFJWX1BDTV9GT1JNQVRfVTIwXzNCRQkoKHNuZF9wY21fZm9ybWF0X3QpIDM5KQkvKiBpbiB0aHJlZSBieXRlcyAqLworI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX1MxOF8zTEUJKChzbmRfcGNtX2Zvcm1hdF90KSA0MCkJLyogaW4gdGhyZWUgYnl0ZXMgKi8KKyNkZWZpbmUJU05EUlZfUENNX0ZPUk1BVF9TMThfM0JFCSgoc25kX3BjbV9mb3JtYXRfdCkgNDEpCS8qIGluIHRocmVlIGJ5dGVzICovCisjZGVmaW5lCVNORFJWX1BDTV9GT1JNQVRfVTE4XzNMRQkoKHNuZF9wY21fZm9ybWF0X3QpIDQyKQkvKiBpbiB0aHJlZSBieXRlcyAqLworI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX1UxOF8zQkUJKChzbmRfcGNtX2Zvcm1hdF90KSA0MykJLyogaW4gdGhyZWUgYnl0ZXMgKi8KKyNkZWZpbmUJU05EUlZfUENNX0ZPUk1BVF9HNzIzXzI0CSgoc25kX3BjbV9mb3JtYXRfdCkgNDQpIC8qIDggc2FtcGxlcyBpbiAzIGJ5dGVzICovCisjZGVmaW5lCVNORFJWX1BDTV9GT1JNQVRfRzcyM18yNF8xQgkoKHNuZF9wY21fZm9ybWF0X3QpIDQ1KSAvKiAxIHNhbXBsZSBpbiAxIGJ5dGUgKi8KKyNkZWZpbmUJU05EUlZfUENNX0ZPUk1BVF9HNzIzXzQwCSgoc25kX3BjbV9mb3JtYXRfdCkgNDYpIC8qIDggU2FtcGxlcyBpbiA1IGJ5dGVzICovCisjZGVmaW5lCVNORFJWX1BDTV9GT1JNQVRfRzcyM180MF8xQgkoKHNuZF9wY21fZm9ybWF0X3QpIDQ3KSAvKiAxIHNhbXBsZSBpbiAxIGJ5dGUgKi8KKyNkZWZpbmUJU05EUlZfUENNX0ZPUk1BVF9MQVNUCQlTTkRSVl9QQ01fRk9STUFUX0c3MjNfNDBfMUIKKworI2lmZGVmIFNORFJWX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUJU05EUlZfUENNX0ZPUk1BVF9TMTYJCVNORFJWX1BDTV9GT1JNQVRfUzE2X0xFCisjZGVmaW5lCVNORFJWX1BDTV9GT1JNQVRfVTE2CQlTTkRSVl9QQ01fRk9STUFUX1UxNl9MRQorI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX1MyNAkJU05EUlZfUENNX0ZPUk1BVF9TMjRfTEUKKyNkZWZpbmUJU05EUlZfUENNX0ZPUk1BVF9VMjQJCVNORFJWX1BDTV9GT1JNQVRfVTI0X0xFCisjZGVmaW5lCVNORFJWX1BDTV9GT1JNQVRfUzMyCQlTTkRSVl9QQ01fRk9STUFUX1MzMl9MRQorI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX1UzMgkJU05EUlZfUENNX0ZPUk1BVF9VMzJfTEUKKyNkZWZpbmUJU05EUlZfUENNX0ZPUk1BVF9GTE9BVAkJU05EUlZfUENNX0ZPUk1BVF9GTE9BVF9MRQorI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX0ZMT0FUNjQJU05EUlZfUENNX0ZPUk1BVF9GTE9BVDY0X0xFCisjZGVmaW5lCVNORFJWX1BDTV9GT1JNQVRfSUVDOTU4X1NVQkZSQU1FIFNORFJWX1BDTV9GT1JNQVRfSUVDOTU4X1NVQkZSQU1FX0xFCisjZW5kaWYKKyNpZmRlZiBTTkRSVl9CSUdfRU5ESUFOCisjZGVmaW5lCVNORFJWX1BDTV9GT1JNQVRfUzE2CQlTTkRSVl9QQ01fRk9STUFUX1MxNl9CRQorI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX1UxNgkJU05EUlZfUENNX0ZPUk1BVF9VMTZfQkUKKyNkZWZpbmUJU05EUlZfUENNX0ZPUk1BVF9TMjQJCVNORFJWX1BDTV9GT1JNQVRfUzI0X0JFCisjZGVmaW5lCVNORFJWX1BDTV9GT1JNQVRfVTI0CQlTTkRSVl9QQ01fRk9STUFUX1UyNF9CRQorI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX1MzMgkJU05EUlZfUENNX0ZPUk1BVF9TMzJfQkUKKyNkZWZpbmUJU05EUlZfUENNX0ZPUk1BVF9VMzIJCVNORFJWX1BDTV9GT1JNQVRfVTMyX0JFCisjZGVmaW5lCVNORFJWX1BDTV9GT1JNQVRfRkxPQVQJCVNORFJWX1BDTV9GT1JNQVRfRkxPQVRfQkUKKyNkZWZpbmUJU05EUlZfUENNX0ZPUk1BVF9GTE9BVDY0CVNORFJWX1BDTV9GT1JNQVRfRkxPQVQ2NF9CRQorI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX0lFQzk1OF9TVUJGUkFNRSBTTkRSVl9QQ01fRk9STUFUX0lFQzk1OF9TVUJGUkFNRV9CRQorI2VuZGlmCisKK3R5cGVkZWYgaW50IF9fYml0d2lzZSBzbmRfcGNtX3N1YmZvcm1hdF90OworI2RlZmluZQlTTkRSVl9QQ01fU1VCRk9STUFUX1NURAkJKChzbmRfcGNtX3N1YmZvcm1hdF90KSAwKQorI2RlZmluZQlTTkRSVl9QQ01fU1VCRk9STUFUX0xBU1QJU05EUlZfUENNX1NVQkZPUk1BVF9TVEQKKworI2RlZmluZSBTTkRSVl9QQ01fSU5GT19NTUFQCQkweDAwMDAwMDAxCS8qIGhhcmR3YXJlIHN1cHBvcnRzIG1tYXAgKi8KKyNkZWZpbmUgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRAkweDAwMDAwMDAyCS8qIHBlcmlvZCBkYXRhIGFyZSB2YWxpZCBkdXJpbmcgdHJhbnNmZXIgKi8KKyNkZWZpbmUgU05EUlZfUENNX0lORk9fRE9VQkxFCQkweDAwMDAwMDA0CS8qIERvdWJsZSBidWZmZXJpbmcgbmVlZGVkIGZvciBQQ00gc3RhcnQvc3RvcCAqLworI2RlZmluZSBTTkRSVl9QQ01fSU5GT19CQVRDSAkJMHgwMDAwMDAxMAkvKiBkb3VibGUgYnVmZmVyaW5nICovCisjZGVmaW5lIFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVECTB4MDAwMDAxMDAJLyogY2hhbm5lbHMgYXJlIGludGVybGVhdmVkICovCisjZGVmaW5lIFNORFJWX1BDTV9JTkZPX05PTklOVEVSTEVBVkVECTB4MDAwMDAyMDAJLyogY2hhbm5lbHMgYXJlIG5vdCBpbnRlcmxlYXZlZCAqLworI2RlZmluZSBTTkRSVl9QQ01fSU5GT19DT01QTEVYCQkweDAwMDAwNDAwCS8qIGNvbXBsZXggZnJhbWUgb3JnYW5pemF0aW9uIChtbWFwIG9ubHkpICovCisjZGVmaW5lIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSCTB4MDAwMTAwMDAJLyogaGFyZHdhcmUgdHJhbnNmZXIgYmxvY2sgb2Ygc2FtcGxlcyAqLworI2RlZmluZSBTTkRSVl9QQ01fSU5GT19PVkVSUkFOR0UJMHgwMDAyMDAwMAkvKiBoYXJkd2FyZSBzdXBwb3J0cyBBREMgKGNhcHR1cmUpIG92ZXJyYW5nZSBkZXRlY3Rpb24gKi8KKyNkZWZpbmUgU05EUlZfUENNX0lORk9fUkVTVU1FCQkweDAwMDQwMDAwCS8qIGhhcmR3YXJlIHN1cHBvcnRzIHN0cmVhbSByZXN1bWUgYWZ0ZXIgc3VzcGVuZCAqLworI2RlZmluZSBTTkRSVl9QQ01fSU5GT19QQVVTRQkJMHgwMDA4MDAwMAkvKiBwYXVzZSBpb2N0bCBpcyBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgU05EUlZfUENNX0lORk9fSEFMRl9EVVBMRVgJMHgwMDEwMDAwMAkvKiBvbmx5IGhhbGYgZHVwbGV4ICovCisjZGVmaW5lIFNORFJWX1BDTV9JTkZPX0pPSU5UX0RVUExFWAkweDAwMjAwMDAwCS8qIHBsYXliYWNrIGFuZCBjYXB0dXJlIHN0cmVhbSBhcmUgc29tZXdoYXQgY29ycmVsYXRlZCAqLworI2RlZmluZSBTTkRSVl9QQ01fSU5GT19TWU5DX1NUQVJUCTB4MDA0MDAwMDAJLyogcGNtIHN1cHBvcnQgc29tZSBraW5kIG9mIHN5bmMgZ28gKi8KKyNkZWZpbmUgU05EUlZfUENNX0lORk9fRklGT19JTl9GUkFNRVMJMHg4MDAwMDAwMAkvKiBpbnRlcm5hbCBrZXJuZWwgZmxhZyAtIEZJRk8gc2l6ZSBpcyBpbiBmcmFtZXMgKi8KKwordHlwZWRlZiBpbnQgX19iaXR3aXNlIHNuZF9wY21fc3RhdGVfdDsKKyNkZWZpbmUJU05EUlZfUENNX1NUQVRFX09QRU4JCSgoc25kX3BjbV9zdGF0ZV90KSAwKSAvKiBzdHJlYW0gaXMgb3BlbiAqLworI2RlZmluZQlTTkRSVl9QQ01fU1RBVEVfU0VUVVAJCSgoc25kX3BjbV9zdGF0ZV90KSAxKSAvKiBzdHJlYW0gaGFzIGEgc2V0dXAgKi8KKyNkZWZpbmUJU05EUlZfUENNX1NUQVRFX1BSRVBBUkVECSgoc25kX3BjbV9zdGF0ZV90KSAyKSAvKiBzdHJlYW0gaXMgcmVhZHkgdG8gc3RhcnQgKi8KKyNkZWZpbmUJU05EUlZfUENNX1NUQVRFX1JVTk5JTkcJCSgoc25kX3BjbV9zdGF0ZV90KSAzKSAvKiBzdHJlYW0gaXMgcnVubmluZyAqLworI2RlZmluZQlTTkRSVl9QQ01fU1RBVEVfWFJVTgkJKChzbmRfcGNtX3N0YXRlX3QpIDQpIC8qIHN0cmVhbSByZWFjaGVkIGFuIHhydW4gKi8KKyNkZWZpbmUJU05EUlZfUENNX1NUQVRFX0RSQUlOSU5HCSgoc25kX3BjbV9zdGF0ZV90KSA1KSAvKiBzdHJlYW0gaXMgZHJhaW5pbmcgKi8KKyNkZWZpbmUJU05EUlZfUENNX1NUQVRFX1BBVVNFRAkJKChzbmRfcGNtX3N0YXRlX3QpIDYpIC8qIHN0cmVhbSBpcyBwYXVzZWQgKi8KKyNkZWZpbmUJU05EUlZfUENNX1NUQVRFX1NVU1BFTkRFRAkoKHNuZF9wY21fc3RhdGVfdCkgNykgLyogaGFyZHdhcmUgaXMgc3VzcGVuZGVkICovCisjZGVmaW5lCVNORFJWX1BDTV9TVEFURV9ESVNDT05ORUNURUQJKChzbmRfcGNtX3N0YXRlX3QpIDgpIC8qIGhhcmR3YXJlIGlzIGRpc2Nvbm5lY3RlZCAqLworI2RlZmluZQlTTkRSVl9QQ01fU1RBVEVfTEFTVAkJU05EUlZfUENNX1NUQVRFX0RJU0NPTk5FQ1RFRAorCitlbnVtIHsKKwlTTkRSVl9QQ01fTU1BUF9PRkZTRVRfREFUQSA9IDB4MDAwMDAwMDAsCisJU05EUlZfUENNX01NQVBfT0ZGU0VUX1NUQVRVUyA9IDB4ODAwMDAwMDAsCisJU05EUlZfUENNX01NQVBfT0ZGU0VUX0NPTlRST0wgPSAweDgxMDAwMDAwLAorfTsKKwordW5pb24gc25kX3BjbV9zeW5jX2lkIHsKKwl1bnNpZ25lZCBjaGFyIGlkWzE2XTsKKwl1bnNpZ25lZCBzaG9ydCBpZDE2WzhdOworCXVuc2lnbmVkIGludCBpZDMyWzRdOworfTsKKworc3RydWN0IHNuZF9wY21faW5mbyB7CisJdW5zaWduZWQgaW50IGRldmljZTsJCS8qIFJPL1dSIChjb250cm9sKTogZGV2aWNlIG51bWJlciAqLworCXVuc2lnbmVkIGludCBzdWJkZXZpY2U7CQkvKiBSTy9XUiAoY29udHJvbCk6IHN1YmRldmljZSBudW1iZXIgKi8KKwlpbnQgc3RyZWFtOwkJCS8qIFJPL1dSIChjb250cm9sKTogc3RyZWFtIGRpcmVjdGlvbiAqLworCWludCBjYXJkOwkJCS8qIFI6IGNhcmQgbnVtYmVyICovCisJdW5zaWduZWQgY2hhciBpZFs2NF07CQkvKiBJRCAodXNlciBzZWxlY3RhYmxlKSAqLworCXVuc2lnbmVkIGNoYXIgbmFtZVs4MF07CQkvKiBuYW1lIG9mIHRoaXMgZGV2aWNlICovCisJdW5zaWduZWQgY2hhciBzdWJuYW1lWzMyXTsJLyogc3ViZGV2aWNlIG5hbWUgKi8KKwlpbnQgZGV2X2NsYXNzOwkJCS8qIFNORFJWX1BDTV9DTEFTU18qICovCisJaW50IGRldl9zdWJjbGFzczsJCS8qIFNORFJWX1BDTV9TVUJDTEFTU18qICovCisJdW5zaWduZWQgaW50IHN1YmRldmljZXNfY291bnQ7CisJdW5zaWduZWQgaW50IHN1YmRldmljZXNfYXZhaWw7CisJdW5pb24gc25kX3BjbV9zeW5jX2lkIHN5bmM7CS8qIGhhcmR3YXJlIHN5bmNocm9uaXphdGlvbiBJRCAqLworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNjRdOwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlLi4uICovCit9OworCit0eXBlZGVmIGludCBzbmRfcGNtX2h3X3BhcmFtX3Q7CisjZGVmaW5lCVNORFJWX1BDTV9IV19QQVJBTV9BQ0NFU1MJMAkvKiBBY2Nlc3MgdHlwZSAqLworI2RlZmluZQlTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFUCTEJLyogRm9ybWF0ICovCisjZGVmaW5lCVNORFJWX1BDTV9IV19QQVJBTV9TVUJGT1JNQVQJMgkvKiBTdWJmb3JtYXQgKi8KKyNkZWZpbmUJU05EUlZfUENNX0hXX1BBUkFNX0ZJUlNUX01BU0sJU05EUlZfUENNX0hXX1BBUkFNX0FDQ0VTUworI2RlZmluZQlTTkRSVl9QQ01fSFdfUEFSQU1fTEFTVF9NQVNLCVNORFJWX1BDTV9IV19QQVJBTV9TVUJGT1JNQVQKKworI2RlZmluZQlTTkRSVl9QQ01fSFdfUEFSQU1fU0FNUExFX0JJVFMJOAkvKiBCaXRzIHBlciBzYW1wbGUgKi8KKyNkZWZpbmUJU05EUlZfUENNX0hXX1BBUkFNX0ZSQU1FX0JJVFMJOQkvKiBCaXRzIHBlciBmcmFtZSAqLworI2RlZmluZQlTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMJMTAJLyogQ2hhbm5lbHMgKi8KKyNkZWZpbmUJU05EUlZfUENNX0hXX1BBUkFNX1JBVEUJCTExCS8qIEFwcHJveCByYXRlICovCisjZGVmaW5lCVNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RfVElNRQkxMgkvKiBBcHByb3ggZGlzdGFuY2UgYmV0d2VlbgorCQkJCQkJICogaW50ZXJydXB0cyBpbiB1cworCQkJCQkJICovCisjZGVmaW5lCVNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RfU0laRQkxMwkvKiBBcHByb3ggZnJhbWVzIGJldHdlZW4KKwkJCQkJCSAqIGludGVycnVwdHMKKwkJCQkJCSAqLworI2RlZmluZQlTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX0JZVEVTCTE0CS8qIEFwcHJveCBieXRlcyBiZXR3ZWVuCisJCQkJCQkgKiBpbnRlcnJ1cHRzCisJCQkJCQkgKi8KKyNkZWZpbmUJU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMJMTUJLyogQXBwcm94IGludGVycnVwdHMgcGVyCisJCQkJCQkgKiBidWZmZXIKKwkJCQkJCSAqLworI2RlZmluZQlTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX1RJTUUJMTYJLyogQXBwcm94IGR1cmF0aW9uIG9mIGJ1ZmZlcgorCQkJCQkJICogaW4gdXMKKwkJCQkJCSAqLworI2RlZmluZQlTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX1NJWkUJMTcJLyogU2l6ZSBvZiBidWZmZXIgaW4gZnJhbWVzICovCisjZGVmaW5lCVNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfQllURVMJMTgJLyogU2l6ZSBvZiBidWZmZXIgaW4gYnl0ZXMgKi8KKyNkZWZpbmUJU05EUlZfUENNX0hXX1BBUkFNX1RJQ0tfVElNRQkxOQkvKiBBcHByb3ggdGljayBkdXJhdGlvbiBpbiB1cyAqLworI2RlZmluZQlTTkRSVl9QQ01fSFdfUEFSQU1fRklSU1RfSU5URVJWQUwJU05EUlZfUENNX0hXX1BBUkFNX1NBTVBMRV9CSVRTCisjZGVmaW5lCVNORFJWX1BDTV9IV19QQVJBTV9MQVNUX0lOVEVSVkFMCVNORFJWX1BDTV9IV19QQVJBTV9USUNLX1RJTUUKKworI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1TX05PUkVTQU1QTEUJKDE8PDApCS8qIGF2b2lkIHJhdGUgcmVzYW1wbGluZyAqLworCitzdHJ1Y3Qgc25kX2ludGVydmFsIHsKKwl1bnNpZ25lZCBpbnQgbWluLCBtYXg7CisJdW5zaWduZWQgaW50IG9wZW5taW46MSwKKwkJICAgICBvcGVubWF4OjEsCisJCSAgICAgaW50ZWdlcjoxLAorCQkgICAgIGVtcHR5OjE7Cit9OworCisjZGVmaW5lIFNORFJWX01BU0tfTUFYCTI1NgorCitzdHJ1Y3Qgc25kX21hc2sgeworCV9fdTMyIGJpdHNbKFNORFJWX01BU0tfTUFYKzMxKS8zMl07Cit9OworCitzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgeworCXVuc2lnbmVkIGludCBmbGFnczsKKwlzdHJ1Y3Qgc25kX21hc2sgbWFza3NbU05EUlZfUENNX0hXX1BBUkFNX0xBU1RfTUFTSyAtIAorCQkJICAgICAgIFNORFJWX1BDTV9IV19QQVJBTV9GSVJTVF9NQVNLICsgMV07CisJc3RydWN0IHNuZF9tYXNrIG1yZXNbNV07CS8qIHJlc2VydmVkIG1hc2tzICovCisJc3RydWN0IHNuZF9pbnRlcnZhbCBpbnRlcnZhbHNbU05EUlZfUENNX0hXX1BBUkFNX0xBU1RfSU5URVJWQUwgLQorCQkJCSAgICAgICAgU05EUlZfUENNX0hXX1BBUkFNX0ZJUlNUX0lOVEVSVkFMICsgMV07CisJc3RydWN0IHNuZF9pbnRlcnZhbCBpcmVzWzldOwkvKiByZXNlcnZlZCBpbnRlcnZhbHMgKi8KKwl1bnNpZ25lZCBpbnQgcm1hc2s7CQkvKiBXOiByZXF1ZXN0ZWQgbWFza3MgKi8KKwl1bnNpZ25lZCBpbnQgY21hc2s7CQkvKiBSOiBjaGFuZ2VkIG1hc2tzICovCisJdW5zaWduZWQgaW50IGluZm87CQkvKiBSOiBJbmZvIGZsYWdzIGZvciByZXR1cm5lZCBzZXR1cCAqLworCXVuc2lnbmVkIGludCBtc2JpdHM7CQkvKiBSOiB1c2VkIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyAqLworCXVuc2lnbmVkIGludCByYXRlX251bTsJCS8qIFI6IHJhdGUgbnVtZXJhdG9yICovCisJdW5zaWduZWQgaW50IHJhdGVfZGVuOwkJLyogUjogcmF0ZSBkZW5vbWluYXRvciAqLworCXNuZF9wY21fdWZyYW1lc190IGZpZm9fc2l6ZTsJLyogUjogY2hpcCBGSUZPIHNpemUgaW4gZnJhbWVzICovCisJdW5zaWduZWQgY2hhciByZXNlcnZlZFs2NF07CS8qIHJlc2VydmVkIGZvciBmdXR1cmUgKi8KK307CisKK2VudW0geworCVNORFJWX1BDTV9UU1RBTVBfTk9ORSA9IDAsCisJU05EUlZfUENNX1RTVEFNUF9FTkFCTEUsCisJU05EUlZfUENNX1RTVEFNUF9MQVNUID0gU05EUlZfUENNX1RTVEFNUF9FTkFCTEUsCit9OworCitzdHJ1Y3Qgc25kX3BjbV9zd19wYXJhbXMgeworCWludCB0c3RhbXBfbW9kZTsJCQkvKiB0aW1lc3RhbXAgbW9kZSAqLworCXVuc2lnbmVkIGludCBwZXJpb2Rfc3RlcDsKKwl1bnNpZ25lZCBpbnQgc2xlZXBfbWluOwkJCS8qIG1pbiB0aWNrcyB0byBzbGVlcCAqLworCXNuZF9wY21fdWZyYW1lc190IGF2YWlsX21pbjsJCS8qIG1pbiBhdmFpbCBmcmFtZXMgZm9yIHdha2V1cCAqLworCXNuZF9wY21fdWZyYW1lc190IHhmZXJfYWxpZ247CQkvKiBvYnNvbGV0ZTogeGZlciBzaXplIG5lZWQgdG8gYmUgYSBtdWx0aXBsZSAqLworCXNuZF9wY21fdWZyYW1lc190IHN0YXJ0X3RocmVzaG9sZDsJLyogbWluIGh3X2F2YWlsIGZyYW1lcyBmb3IgYXV0b21hdGljIHN0YXJ0ICovCisJc25kX3BjbV91ZnJhbWVzX3Qgc3RvcF90aHJlc2hvbGQ7CS8qIG1pbiBhdmFpbCBmcmFtZXMgZm9yIGF1dG9tYXRpYyBzdG9wICovCisJc25kX3BjbV91ZnJhbWVzX3Qgc2lsZW5jZV90aHJlc2hvbGQ7CS8qIG1pbiBkaXN0YW5jZSBmcm9tIG5vaXNlIGZvciBzaWxlbmNlIGZpbGxpbmcgKi8KKwlzbmRfcGNtX3VmcmFtZXNfdCBzaWxlbmNlX3NpemU7CQkvKiBzaWxlbmNlIGJsb2NrIHNpemUgKi8KKwlzbmRfcGNtX3VmcmFtZXNfdCBib3VuZGFyeTsJCS8qIHBvaW50ZXJzIHdyYXAgcG9pbnQgKi8KKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzY0XTsJCS8qIHJlc2VydmVkIGZvciBmdXR1cmUgKi8KK307CisKK3N0cnVjdCBzbmRfcGNtX2NoYW5uZWxfaW5mbyB7CisJdW5zaWduZWQgaW50IGNoYW5uZWw7CisJX19rZXJuZWxfb2ZmX3Qgb2Zmc2V0OwkJLyogbW1hcCBvZmZzZXQgKi8KKwl1bnNpZ25lZCBpbnQgZmlyc3Q7CQkvKiBvZmZzZXQgdG8gZmlyc3Qgc2FtcGxlIGluIGJpdHMgKi8KKwl1bnNpZ25lZCBpbnQgc3RlcDsJCS8qIHNhbXBsZXMgZGlzdGFuY2UgaW4gYml0cyAqLworfTsKKworc3RydWN0IHNuZF9wY21fc3RhdHVzIHsKKwlzbmRfcGNtX3N0YXRlX3Qgc3RhdGU7CQkvKiBzdHJlYW0gc3RhdGUgKi8KKwlzdHJ1Y3QgdGltZXNwZWMgdHJpZ2dlcl90c3RhbXA7CS8qIHRpbWUgd2hlbiBzdHJlYW0gd2FzIHN0YXJ0ZWQvc3RvcHBlZC9wYXVzZWQgKi8KKwlzdHJ1Y3QgdGltZXNwZWMgdHN0YW1wOwkJLyogcmVmZXJlbmNlIHRpbWVzdGFtcCAqLworCXNuZF9wY21fdWZyYW1lc190IGFwcGxfcHRyOwkvKiBhcHBsIHB0ciAqLworCXNuZF9wY21fdWZyYW1lc190IGh3X3B0cjsJLyogaHcgcHRyICovCisJc25kX3BjbV9zZnJhbWVzX3QgZGVsYXk7CS8qIGN1cnJlbnQgZGVsYXkgaW4gZnJhbWVzICovCisJc25kX3BjbV91ZnJhbWVzX3QgYXZhaWw7CS8qIG51bWJlciBvZiBmcmFtZXMgYXZhaWxhYmxlICovCisJc25kX3BjbV91ZnJhbWVzX3QgYXZhaWxfbWF4OwkvKiBtYXggZnJhbWVzIGF2YWlsYWJsZSBvbiBodyBzaW5jZSBsYXN0IHN0YXR1cyAqLworCXNuZF9wY21fdWZyYW1lc190IG92ZXJyYW5nZTsJLyogY291bnQgb2YgQURDIChjYXB0dXJlKSBvdmVycmFuZ2UgZGV0ZWN0aW9ucyBmcm9tIGxhc3Qgc3RhdHVzICovCisJc25kX3BjbV9zdGF0ZV90IHN1c3BlbmRlZF9zdGF0ZTsgLyogc3VzcGVuZGVkIHN0cmVhbSBzdGF0ZSAqLworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNjBdOwkvKiBtdXN0IGJlIGZpbGxlZCB3aXRoIHplcm8gKi8KK307CisKK3N0cnVjdCBzbmRfcGNtX21tYXBfc3RhdHVzIHsKKwlzbmRfcGNtX3N0YXRlX3Qgc3RhdGU7CQkvKiBSTzogc3RhdGUgLSBTTkRSVl9QQ01fU1RBVEVfWFhYWCAqLworCWludCBwYWQxOwkJCS8qIE5lZWRlZCBmb3IgNjQgYml0IGFsaWdubWVudCAqLworCXNuZF9wY21fdWZyYW1lc190IGh3X3B0cjsJLyogUk86IGh3IHB0ciAoMC4uLmJvdW5kYXJ5LTEpICovCisJc3RydWN0IHRpbWVzcGVjIHRzdGFtcDsJCS8qIFRpbWVzdGFtcCAqLworCXNuZF9wY21fc3RhdGVfdCBzdXNwZW5kZWRfc3RhdGU7IC8qIFJPOiBzdXNwZW5kZWQgc3RyZWFtIHN0YXRlICovCit9OworCitzdHJ1Y3Qgc25kX3BjbV9tbWFwX2NvbnRyb2wgeworCXNuZF9wY21fdWZyYW1lc190IGFwcGxfcHRyOwkvKiBSVzogYXBwbCBwdHIgKDAuLi5ib3VuZGFyeS0xKSAqLworCXNuZF9wY21fdWZyYW1lc190IGF2YWlsX21pbjsJLyogUlc6IG1pbiBhdmFpbGFibGUgZnJhbWVzIGZvciB3YWtldXAgKi8KK307CisKKyNkZWZpbmUgU05EUlZfUENNX1NZTkNfUFRSX0hXU1lOQwkoMTw8MCkJLyogZXhlY3V0ZSBod3N5bmMgKi8KKyNkZWZpbmUgU05EUlZfUENNX1NZTkNfUFRSX0FQUEwJCSgxPDwxKQkvKiBnZXQgYXBwbF9wdHIgZnJvbSBkcml2ZXIgKHIvdyBvcCkgKi8KKyNkZWZpbmUgU05EUlZfUENNX1NZTkNfUFRSX0FWQUlMX01JTgkoMTw8MikJLyogZ2V0IGF2YWlsX21pbiBmcm9tIGRyaXZlciAqLworCitzdHJ1Y3Qgc25kX3BjbV9zeW5jX3B0ciB7CisJdW5zaWduZWQgaW50IGZsYWdzOworCXVuaW9uIHsKKwkJc3RydWN0IHNuZF9wY21fbW1hcF9zdGF0dXMgc3RhdHVzOworCQl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzY0XTsKKwl9IHM7CisJdW5pb24geworCQlzdHJ1Y3Qgc25kX3BjbV9tbWFwX2NvbnRyb2wgY29udHJvbDsKKwkJdW5zaWduZWQgY2hhciByZXNlcnZlZFs2NF07CisJfSBjOworfTsKKworc3RydWN0IHNuZF94ZmVyaSB7CisJc25kX3BjbV9zZnJhbWVzX3QgcmVzdWx0OworCXZvaWQgKmJ1ZjsKKwlzbmRfcGNtX3VmcmFtZXNfdCBmcmFtZXM7Cit9OworCitzdHJ1Y3Qgc25kX3hmZXJuIHsKKwlzbmRfcGNtX3NmcmFtZXNfdCByZXN1bHQ7CisJdm9pZCAqICpidWZzOworCXNuZF9wY21fdWZyYW1lc190IGZyYW1lczsKK307CisKK2VudW0geworCVNORFJWX1BDTV9UU1RBTVBfVFlQRV9HRVRUSU1FT0ZEQVkgPSAwLAkvKiBnZXR0aW1lb2ZkYXkgZXF1aXZhbGVudCAqLworCVNORFJWX1BDTV9UU1RBTVBfVFlQRV9NT05PVE9OSUMsCS8qIHBvc2l4X2Nsb2NrX21vbm90b25pYyBlcXVpdmFsZW50ICovCisJU05EUlZfUENNX1RTVEFNUF9UWVBFX0xBU1QgPSBTTkRSVl9QQ01fVFNUQU1QX1RZUEVfTU9OT1RPTklDLAorfTsKKworI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUFZFUlNJT04JX0lPUignQScsIDB4MDAsIGludCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0lORk8JCV9JT1IoJ0EnLCAweDAxLCBzdHJ1Y3Qgc25kX3BjbV9pbmZvKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfVFNUQU1QCQlfSU9XKCdBJywgMHgwMiwgaW50KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfVFRTVEFNUAkJX0lPVygnQScsIDB4MDMsIGludCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0hXX1JFRklORQlfSU9XUignQScsIDB4MTAsIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcykKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0hXX1BBUkFNUwlfSU9XUignQScsIDB4MTEsIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcykKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0hXX0ZSRUUJCV9JTygnQScsIDB4MTIpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9TV19QQVJBTVMJX0lPV1IoJ0EnLCAweDEzLCBzdHJ1Y3Qgc25kX3BjbV9zd19wYXJhbXMpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9TVEFUVVMJCV9JT1IoJ0EnLCAweDIwLCBzdHJ1Y3Qgc25kX3BjbV9zdGF0dXMpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9ERUxBWQkJX0lPUignQScsIDB4MjEsIHNuZF9wY21fc2ZyYW1lc190KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfSFdTWU5DCQlfSU8oJ0EnLCAweDIyKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfU1lOQ19QVFIJX0lPV1IoJ0EnLCAweDIzLCBzdHJ1Y3Qgc25kX3BjbV9zeW5jX3B0cikKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0NIQU5ORUxfSU5GTwlfSU9SKCdBJywgMHgzMiwgc3RydWN0IHNuZF9wY21fY2hhbm5lbF9pbmZvKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUFJFUEFSRQkJX0lPKCdBJywgMHg0MCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1JFU0VUCQlfSU8oJ0EnLCAweDQxKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfU1RBUlQJCV9JTygnQScsIDB4NDIpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9EUk9QCQlfSU8oJ0EnLCAweDQzKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfRFJBSU4JCV9JTygnQScsIDB4NDQpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9QQVVTRQkJX0lPVygnQScsIDB4NDUsIGludCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1JFV0lORAkJX0lPVygnQScsIDB4NDYsIHNuZF9wY21fdWZyYW1lc190KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUkVTVU1FCQlfSU8oJ0EnLCAweDQ3KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfWFJVTgkJX0lPKCdBJywgMHg0OCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0ZPUldBUkQJCV9JT1coJ0EnLCAweDQ5LCBzbmRfcGNtX3VmcmFtZXNfdCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1dSSVRFSV9GUkFNRVMJX0lPVygnQScsIDB4NTAsIHN0cnVjdCBzbmRfeGZlcmkpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9SRUFESV9GUkFNRVMJX0lPUignQScsIDB4NTEsIHN0cnVjdCBzbmRfeGZlcmkpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9XUklURU5fRlJBTUVTCV9JT1coJ0EnLCAweDUyLCBzdHJ1Y3Qgc25kX3hmZXJuKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUkVBRE5fRlJBTUVTCV9JT1IoJ0EnLCAweDUzLCBzdHJ1Y3Qgc25kX3hmZXJuKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfTElOSwkJX0lPVygnQScsIDB4NjAsIGludCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1VOTElOSwkJX0lPKCdBJywgMHg2MSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JREkgdjEuMCBpbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiAgUmF3IE1JREkgc2VjdGlvbiAtIC9kZXYvc25kL21pZGk/PworICovCisKKyNkZWZpbmUgU05EUlZfUkFXTUlESV9WRVJTSU9OCQlTTkRSVl9QUk9UT0NPTF9WRVJTSU9OKDIsIDAsIDApCisKK2VudW0geworCVNORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVCA9IDAsCisJU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQsCisJU05EUlZfUkFXTUlESV9TVFJFQU1fTEFTVCA9IFNORFJWX1JBV01JRElfU1RSRUFNX0lOUFVULAorfTsKKworI2RlZmluZSBTTkRSVl9SQVdNSURJX0lORk9fT1VUUFVUCQkweDAwMDAwMDAxCisjZGVmaW5lIFNORFJWX1JBV01JRElfSU5GT19JTlBVVAkJMHgwMDAwMDAwMgorI2RlZmluZSBTTkRSVl9SQVdNSURJX0lORk9fRFVQTEVYCQkweDAwMDAwMDA0CisKK3N0cnVjdCBzbmRfcmF3bWlkaV9pbmZvIHsKKwl1bnNpZ25lZCBpbnQgZGV2aWNlOwkJLyogUk8vV1IgKGNvbnRyb2wpOiBkZXZpY2UgbnVtYmVyICovCisJdW5zaWduZWQgaW50IHN1YmRldmljZTsJCS8qIFJPL1dSIChjb250cm9sKTogc3ViZGV2aWNlIG51bWJlciAqLworCWludCBzdHJlYW07CQkJLyogV1I6IHN0cmVhbSAqLworCWludCBjYXJkOwkJCS8qIFI6IGNhcmQgbnVtYmVyICovCisJdW5zaWduZWQgaW50IGZsYWdzOwkJLyogU05EUlZfUkFXTUlESV9JTkZPX1hYWFggKi8KKwl1bnNpZ25lZCBjaGFyIGlkWzY0XTsJCS8qIElEICh1c2VyIHNlbGVjdGFibGUpICovCisJdW5zaWduZWQgY2hhciBuYW1lWzgwXTsJCS8qIG5hbWUgb2YgZGV2aWNlICovCisJdW5zaWduZWQgY2hhciBzdWJuYW1lWzMyXTsJLyogbmFtZSBvZiBhY3RpdmUgb3Igc2VsZWN0ZWQgc3ViZGV2aWNlICovCisJdW5zaWduZWQgaW50IHN1YmRldmljZXNfY291bnQ7CisJdW5zaWduZWQgaW50IHN1YmRldmljZXNfYXZhaWw7CisJdW5zaWduZWQgY2hhciByZXNlcnZlZFs2NF07CS8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCit9OworCitzdHJ1Y3Qgc25kX3Jhd21pZGlfcGFyYW1zIHsKKwlpbnQgc3RyZWFtOworCXNpemVfdCBidWZmZXJfc2l6ZTsJCS8qIHF1ZXVlIHNpemUgaW4gYnl0ZXMgKi8KKwlzaXplX3QgYXZhaWxfbWluOwkJLyogbWluaW11bSBhdmFpbCBieXRlcyBmb3Igd2FrZXVwICovCisJdW5zaWduZWQgaW50IG5vX2FjdGl2ZV9zZW5zaW5nOiAxOyAvKiBkbyBub3Qgc2VuZCBhY3RpdmUgc2Vuc2luZyBieXRlIGluIGNsb3NlKCkgKi8KKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzE2XTsJLyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KK307CisKK3N0cnVjdCBzbmRfcmF3bWlkaV9zdGF0dXMgeworCWludCBzdHJlYW07CisJc3RydWN0IHRpbWVzcGVjIHRzdGFtcDsJCS8qIFRpbWVzdGFtcCAqLworCXNpemVfdCBhdmFpbDsJCQkvKiBhdmFpbGFibGUgYnl0ZXMgKi8KKwlzaXplX3QgeHJ1bnM7CQkJLyogY291bnQgb2Ygb3ZlcnJ1bnMgc2luY2UgbGFzdCBzdGF0dXMgKGluIGJ5dGVzKSAqLworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbMTZdOwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworfTsKKworI2RlZmluZSBTTkRSVl9SQVdNSURJX0lPQ1RMX1BWRVJTSU9OCV9JT1IoJ1cnLCAweDAwLCBpbnQpCisjZGVmaW5lIFNORFJWX1JBV01JRElfSU9DVExfSU5GTwlfSU9SKCdXJywgMHgwMSwgc3RydWN0IHNuZF9yYXdtaWRpX2luZm8pCisjZGVmaW5lIFNORFJWX1JBV01JRElfSU9DVExfUEFSQU1TCV9JT1dSKCdXJywgMHgxMCwgc3RydWN0IHNuZF9yYXdtaWRpX3BhcmFtcykKKyNkZWZpbmUgU05EUlZfUkFXTUlESV9JT0NUTF9TVEFUVVMJX0lPV1IoJ1cnLCAweDIwLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3RhdHVzKQorI2RlZmluZSBTTkRSVl9SQVdNSURJX0lPQ1RMX0RST1AJX0lPVygnVycsIDB4MzAsIGludCkKKyNkZWZpbmUgU05EUlZfUkFXTUlESV9JT0NUTF9EUkFJTglfSU9XKCdXJywgMHgzMSwgaW50KQorCisvKgorICogIFRpbWVyIHNlY3Rpb24gLSAvZGV2L3NuZC90aW1lcgorICovCisKKyNkZWZpbmUgU05EUlZfVElNRVJfVkVSU0lPTgkJU05EUlZfUFJPVE9DT0xfVkVSU0lPTigyLCAwLCA2KQorCitlbnVtIHsKKwlTTkRSVl9USU1FUl9DTEFTU19OT05FID0gLTEsCisJU05EUlZfVElNRVJfQ0xBU1NfU0xBVkUgPSAwLAorCVNORFJWX1RJTUVSX0NMQVNTX0dMT0JBTCwKKwlTTkRSVl9USU1FUl9DTEFTU19DQVJELAorCVNORFJWX1RJTUVSX0NMQVNTX1BDTSwKKwlTTkRSVl9USU1FUl9DTEFTU19MQVNUID0gU05EUlZfVElNRVJfQ0xBU1NfUENNLAorfTsKKworLyogc2xhdmUgdGltZXIgY2xhc3NlcyAqLworZW51bSB7CisJU05EUlZfVElNRVJfU0NMQVNTX05PTkUgPSAwLAorCVNORFJWX1RJTUVSX1NDTEFTU19BUFBMSUNBVElPTiwKKwlTTkRSVl9USU1FUl9TQ0xBU1NfU0VRVUVOQ0VSLAkJLyogYWxpYXMgKi8KKwlTTkRSVl9USU1FUl9TQ0xBU1NfT1NTX1NFUVVFTkNFUiwJLyogYWxpYXMgKi8KKwlTTkRSVl9USU1FUl9TQ0xBU1NfTEFTVCA9IFNORFJWX1RJTUVSX1NDTEFTU19PU1NfU0VRVUVOQ0VSLAorfTsKKworLyogZ2xvYmFsIHRpbWVycyAoZGV2aWNlIG1lbWJlcikgKi8KKyNkZWZpbmUgU05EUlZfVElNRVJfR0xPQkFMX1NZU1RFTQkwCisjZGVmaW5lIFNORFJWX1RJTUVSX0dMT0JBTF9SVEMJCTEKKyNkZWZpbmUgU05EUlZfVElNRVJfR0xPQkFMX0hQRVQJCTIKKyNkZWZpbmUgU05EUlZfVElNRVJfR0xPQkFMX0hSVElNRVIJMworCisvKiBpbmZvIGZsYWdzICovCisjZGVmaW5lIFNORFJWX1RJTUVSX0ZMR19TTEFWRQkJKDE8PDApCS8qIGNhbm5vdCBiZSBjb250cm9sbGVkICovCisKK3N0cnVjdCBzbmRfdGltZXJfaWQgeworCWludCBkZXZfY2xhc3M7CisJaW50IGRldl9zY2xhc3M7CisJaW50IGNhcmQ7CisJaW50IGRldmljZTsKKwlpbnQgc3ViZGV2aWNlOworfTsKKworc3RydWN0IHNuZF90aW1lcl9naW5mbyB7CisJc3RydWN0IHNuZF90aW1lcl9pZCB0aWQ7CS8qIHJlcXVlc3RlZCB0aW1lciBJRCAqLworCXVuc2lnbmVkIGludCBmbGFnczsJCS8qIHRpbWVyIGZsYWdzIC0gU05EUlZfVElNRVJfRkxHXyogKi8KKwlpbnQgY2FyZDsJCQkvKiBjYXJkIG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIgaWRbNjRdOwkJLyogdGltZXIgaWRlbnRpZmljYXRpb24gKi8KKwl1bnNpZ25lZCBjaGFyIG5hbWVbODBdOwkJLyogdGltZXIgbmFtZSAqLworCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQwOwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworCXVuc2lnbmVkIGxvbmcgcmVzb2x1dGlvbjsJLyogYXZlcmFnZSBwZXJpb2QgcmVzb2x1dGlvbiBpbiBucyAqLworCXVuc2lnbmVkIGxvbmcgcmVzb2x1dGlvbl9taW47CS8qIG1pbmltYWwgcGVyaW9kIHJlc29sdXRpb24gaW4gbnMgKi8KKwl1bnNpZ25lZCBsb25nIHJlc29sdXRpb25fbWF4OwkvKiBtYXhpbWFsIHBlcmlvZCByZXNvbHV0aW9uIGluIG5zICovCisJdW5zaWduZWQgaW50IGNsaWVudHM7CQkvKiBhY3RpdmUgdGltZXIgY2xpZW50cyAqLworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbMzJdOworfTsKKworc3RydWN0IHNuZF90aW1lcl9ncGFyYW1zIHsKKwlzdHJ1Y3Qgc25kX3RpbWVyX2lkIHRpZDsJLyogcmVxdWVzdGVkIHRpbWVyIElEICovCisJdW5zaWduZWQgbG9uZyBwZXJpb2RfbnVtOwkvKiByZXF1ZXN0ZWQgcHJlY2lzZSBwZXJpb2QgZHVyYXRpb24gKGluIHNlY29uZHMpIC0gbnVtZXJhdG9yICovCisJdW5zaWduZWQgbG9uZyBwZXJpb2RfZGVuOwkvKiByZXF1ZXN0ZWQgcHJlY2lzZSBwZXJpb2QgZHVyYXRpb24gKGluIHNlY29uZHMpIC0gZGVub21pbmF0b3IgKi8KKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzMyXTsKK307CisKK3N0cnVjdCBzbmRfdGltZXJfZ3N0YXR1cyB7CisJc3RydWN0IHNuZF90aW1lcl9pZCB0aWQ7CS8qIHJlcXVlc3RlZCB0aW1lciBJRCAqLworCXVuc2lnbmVkIGxvbmcgcmVzb2x1dGlvbjsJLyogY3VycmVudCBwZXJpb2QgcmVzb2x1dGlvbiBpbiBucyAqLworCXVuc2lnbmVkIGxvbmcgcmVzb2x1dGlvbl9udW07CS8qIHByZWNpc2UgY3VycmVudCBwZXJpb2QgcmVzb2x1dGlvbiAoaW4gc2Vjb25kcykgLSBudW1lcmF0b3IgKi8KKwl1bnNpZ25lZCBsb25nIHJlc29sdXRpb25fZGVuOwkvKiBwcmVjaXNlIGN1cnJlbnQgcGVyaW9kIHJlc29sdXRpb24gKGluIHNlY29uZHMpIC0gZGVub21pbmF0b3IgKi8KKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzMyXTsKK307CisKK3N0cnVjdCBzbmRfdGltZXJfc2VsZWN0IHsKKwlzdHJ1Y3Qgc25kX3RpbWVyX2lkIGlkOwkvKiBiaW5kIHRvIHRpbWVyIElEICovCisJdW5zaWduZWQgY2hhciByZXNlcnZlZFszMl07CS8qIHJlc2VydmVkICovCit9OworCitzdHJ1Y3Qgc25kX3RpbWVyX2luZm8geworCXVuc2lnbmVkIGludCBmbGFnczsJCS8qIHRpbWVyIGZsYWdzIC0gU05EUlZfVElNRVJfRkxHXyogKi8KKwlpbnQgY2FyZDsJCQkvKiBjYXJkIG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIgaWRbNjRdOwkJLyogdGltZXIgaWRlbnRpZmljYXRvciAqLworCXVuc2lnbmVkIGNoYXIgbmFtZVs4MF07CQkvKiB0aW1lciBuYW1lICovCisJdW5zaWduZWQgbG9uZyByZXNlcnZlZDA7CS8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCisJdW5zaWduZWQgbG9uZyByZXNvbHV0aW9uOwkvKiBhdmVyYWdlIHBlcmlvZCByZXNvbHV0aW9uIGluIG5zICovCisJdW5zaWduZWQgY2hhciByZXNlcnZlZFs2NF07CS8qIHJlc2VydmVkICovCit9OworCisjZGVmaW5lIFNORFJWX1RJTUVSX1BTRkxHX0FVVE8JCSgxPDwwKQkvKiBhdXRvIHN0YXJ0LCBvdGhlcndpc2Ugb25lLXNob3QgKi8KKyNkZWZpbmUgU05EUlZfVElNRVJfUFNGTEdfRVhDTFVTSVZFCSgxPDwxKQkvKiBleGNsdXNpdmUgdXNlLCBwcmVjaXNlIHN0YXJ0L3N0b3AvcGF1c2UvY29udGludWUgKi8KKyNkZWZpbmUgU05EUlZfVElNRVJfUFNGTEdfRUFSTFlfRVZFTlQJKDE8PDIpCS8qIHdyaXRlIGVhcmx5IGV2ZW50IHRvIHRoZSBwb2xsIHF1ZXVlICovCisKK3N0cnVjdCBzbmRfdGltZXJfcGFyYW1zIHsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CQkvKiBmbGFncyAtIFNORFJWX01JWEVSX1BTRkxHXyogKi8KKwl1bnNpZ25lZCBpbnQgdGlja3M7CQkvKiByZXF1ZXN0ZWQgcmVzb2x1dGlvbiBpbiB0aWNrcyAqLworCXVuc2lnbmVkIGludCBxdWV1ZV9zaXplOwkvKiB0b3RhbCBzaXplIG9mIHF1ZXVlICgzMi0xMDI0KSAqLworCXVuc2lnbmVkIGludCByZXNlcnZlZDA7CQkvKiByZXNlcnZlZCwgd2FzOiBmYWlsdXJlIGxvY2F0aW9ucyAqLworCXVuc2lnbmVkIGludCBmaWx0ZXI7CQkvKiBldmVudCBmaWx0ZXIgKGJpdG1hc2sgb2YgU05EUlZfVElNRVJfRVZFTlRfKikgKi8KKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzYwXTsJLyogcmVzZXJ2ZWQgKi8KK307CisKK3N0cnVjdCBzbmRfdGltZXJfc3RhdHVzIHsKKwlzdHJ1Y3QgdGltZXNwZWMgdHN0YW1wOwkJLyogVGltZXN0YW1wIC0gbGFzdCB1cGRhdGUgKi8KKwl1bnNpZ25lZCBpbnQgcmVzb2x1dGlvbjsJLyogY3VycmVudCBwZXJpb2QgcmVzb2x1dGlvbiBpbiBucyAqLworCXVuc2lnbmVkIGludCBsb3N0OwkJLyogY291bnRlciBvZiBtYXN0ZXIgdGljayBsb3N0ICovCisJdW5zaWduZWQgaW50IG92ZXJydW47CQkvKiBjb3VudCBvZiByZWFkIHF1ZXVlIG92ZXJydW5zICovCisJdW5zaWduZWQgaW50IHF1ZXVlOwkJLyogdXNlZCBxdWV1ZSBzaXplICovCisJdW5zaWduZWQgY2hhciByZXNlcnZlZFs2NF07CS8qIHJlc2VydmVkICovCit9OworCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1BWRVJTSU9OCV9JT1IoJ1QnLCAweDAwLCBpbnQpCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX05FWFRfREVWSUNFCV9JT1dSKCdUJywgMHgwMSwgc3RydWN0IHNuZF90aW1lcl9pZCkKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfVFJFQUQJCV9JT1coJ1QnLCAweDAyLCBpbnQpCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX0dJTkZPCQlfSU9XUignVCcsIDB4MDMsIHN0cnVjdCBzbmRfdGltZXJfZ2luZm8pCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX0dQQVJBTVMJX0lPVygnVCcsIDB4MDQsIHN0cnVjdCBzbmRfdGltZXJfZ3BhcmFtcykKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfR1NUQVRVUwlfSU9XUignVCcsIDB4MDUsIHN0cnVjdCBzbmRfdGltZXJfZ3N0YXR1cykKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfU0VMRUNUCV9JT1coJ1QnLCAweDEwLCBzdHJ1Y3Qgc25kX3RpbWVyX3NlbGVjdCkKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfSU5GTwkJX0lPUignVCcsIDB4MTEsIHN0cnVjdCBzbmRfdGltZXJfaW5mbykKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfUEFSQU1TCV9JT1coJ1QnLCAweDEyLCBzdHJ1Y3Qgc25kX3RpbWVyX3BhcmFtcykKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfU1RBVFVTCV9JT1IoJ1QnLCAweDE0LCBzdHJ1Y3Qgc25kX3RpbWVyX3N0YXR1cykKKy8qIFRoZSBmb2xsb3dpbmcgZm91ciBpb2N0bHMgYXJlIGNoYW5nZWQgc2luY2UgMS4wLjkgZHVlIHRvIGNvbmZsaWN0aW9uICovCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1NUQVJUCQlfSU8oJ1QnLCAweGEwKQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9TVE9QCQlfSU8oJ1QnLCAweGExKQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9DT05USU5VRQlfSU8oJ1QnLCAweGEyKQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9QQVVTRQkJX0lPKCdUJywgMHhhMykKKworc3RydWN0IHNuZF90aW1lcl9yZWFkIHsKKwl1bnNpZ25lZCBpbnQgcmVzb2x1dGlvbjsKKwl1bnNpZ25lZCBpbnQgdGlja3M7Cit9OworCitlbnVtIHsKKwlTTkRSVl9USU1FUl9FVkVOVF9SRVNPTFVUSU9OID0gMCwJLyogdmFsID0gcmVzb2x1dGlvbiBpbiBucyAqLworCVNORFJWX1RJTUVSX0VWRU5UX1RJQ0ssCQkJLyogdmFsID0gdGlja3MgKi8KKwlTTkRSVl9USU1FUl9FVkVOVF9TVEFSVCwJCS8qIHZhbCA9IHJlc29sdXRpb24gaW4gbnMgKi8KKwlTTkRSVl9USU1FUl9FVkVOVF9TVE9QLAkJCS8qIHZhbCA9IDAgKi8KKwlTTkRSVl9USU1FUl9FVkVOVF9DT05USU5VRSwJCS8qIHZhbCA9IHJlc29sdXRpb24gaW4gbnMgKi8KKwlTTkRSVl9USU1FUl9FVkVOVF9QQVVTRSwJCS8qIHZhbCA9IDAgKi8KKwlTTkRSVl9USU1FUl9FVkVOVF9FQVJMWSwJCS8qIHZhbCA9IDAsIGVhcmx5IGV2ZW50ICovCisJU05EUlZfVElNRVJfRVZFTlRfU1VTUEVORCwJCS8qIHZhbCA9IDAgKi8KKwlTTkRSVl9USU1FUl9FVkVOVF9SRVNVTUUsCQkvKiB2YWwgPSByZXNvbHV0aW9uIGluIG5zICovCisJLyogbWFzdGVyIHRpbWVyIGV2ZW50cyBmb3Igc2xhdmUgdGltZXIgaW5zdGFuY2VzICovCisJU05EUlZfVElNRVJfRVZFTlRfTVNUQVJUID0gU05EUlZfVElNRVJfRVZFTlRfU1RBUlQgKyAxMCwKKwlTTkRSVl9USU1FUl9FVkVOVF9NU1RPUCA9IFNORFJWX1RJTUVSX0VWRU5UX1NUT1AgKyAxMCwKKwlTTkRSVl9USU1FUl9FVkVOVF9NQ09OVElOVUUgPSBTTkRSVl9USU1FUl9FVkVOVF9DT05USU5VRSArIDEwLAorCVNORFJWX1RJTUVSX0VWRU5UX01QQVVTRSA9IFNORFJWX1RJTUVSX0VWRU5UX1BBVVNFICsgMTAsCisJU05EUlZfVElNRVJfRVZFTlRfTVNVU1BFTkQgPSBTTkRSVl9USU1FUl9FVkVOVF9TVVNQRU5EICsgMTAsCisJU05EUlZfVElNRVJfRVZFTlRfTVJFU1VNRSA9IFNORFJWX1RJTUVSX0VWRU5UX1JFU1VNRSArIDEwLAorfTsKKworc3RydWN0IHNuZF90aW1lcl90cmVhZCB7CisJaW50IGV2ZW50OworCXN0cnVjdCB0aW1lc3BlYyB0c3RhbXA7CisJdW5zaWduZWQgaW50IHZhbDsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgIFNlY3Rpb24gZm9yIGRyaXZlciBjb250cm9sIGludGVyZmFjZSAtIC9kZXYvc25kL2NvbnRyb2w/ICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBTTkRSVl9DVExfVkVSU0lPTgkJU05EUlZfUFJPVE9DT0xfVkVSU0lPTigyLCAwLCA2KQorCitzdHJ1Y3Qgc25kX2N0bF9jYXJkX2luZm8geworCWludCBjYXJkOwkJCS8qIGNhcmQgbnVtYmVyICovCisJaW50IHBhZDsJCQkvKiByZXNlcnZlZCBmb3IgZnV0dXJlICh3YXMgdHlwZSkgKi8KKwl1bnNpZ25lZCBjaGFyIGlkWzE2XTsJCS8qIElEIG9mIGNhcmQgKHVzZXIgc2VsZWN0YWJsZSkgKi8KKwl1bnNpZ25lZCBjaGFyIGRyaXZlclsxNl07CS8qIERyaXZlciBuYW1lICovCisJdW5zaWduZWQgY2hhciBuYW1lWzMyXTsJCS8qIFNob3J0IG5hbWUgb2Ygc291bmRjYXJkICovCisJdW5zaWduZWQgY2hhciBsb25nbmFtZVs4MF07CS8qIG5hbWUgKyBpbmZvIHRleHQgYWJvdXQgc291bmRjYXJkICovCisJdW5zaWduZWQgY2hhciByZXNlcnZlZF9bMTZdOwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlICh3YXMgSUQgb2YgbWl4ZXIpICovCisJdW5zaWduZWQgY2hhciBtaXhlcm5hbWVbODBdOwkvKiB2aXN1YWwgbWl4ZXIgaWRlbnRpZmljYXRpb24gKi8KKwl1bnNpZ25lZCBjaGFyIGNvbXBvbmVudHNbMTI4XTsJLyogY2FyZCBjb21wb25lbnRzIC8gZmluZSBpZGVudGlmaWNhdGlvbiwgZGVsaW1pdGVkIHdpdGggb25lIHNwYWNlIChBQzk3IGV0Yy4uKSAqLworfTsKKwordHlwZWRlZiBpbnQgX19iaXR3aXNlIHNuZF9jdGxfZWxlbV90eXBlX3Q7CisjZGVmaW5lCVNORFJWX0NUTF9FTEVNX1RZUEVfTk9ORQkoKHNuZF9jdGxfZWxlbV90eXBlX3QpIDApIC8qIGludmFsaWQgKi8KKyNkZWZpbmUJU05EUlZfQ1RMX0VMRU1fVFlQRV9CT09MRUFOCSgoc25kX2N0bF9lbGVtX3R5cGVfdCkgMSkgLyogYm9vbGVhbiB0eXBlICovCisjZGVmaW5lCVNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUgkoKHNuZF9jdGxfZWxlbV90eXBlX3QpIDIpIC8qIGludGVnZXIgdHlwZSAqLworI2RlZmluZQlTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQJKChzbmRfY3RsX2VsZW1fdHlwZV90KSAzKSAvKiBlbnVtZXJhdGVkIHR5cGUgKi8KKyNkZWZpbmUJU05EUlZfQ1RMX0VMRU1fVFlQRV9CWVRFUwkoKHNuZF9jdGxfZWxlbV90eXBlX3QpIDQpIC8qIGJ5dGUgYXJyYXkgKi8KKyNkZWZpbmUJU05EUlZfQ1RMX0VMRU1fVFlQRV9JRUM5NTgJKChzbmRfY3RsX2VsZW1fdHlwZV90KSA1KSAvKiBJRUM5NTggKFMvUERJRikgc2V0dXAgKi8KKyNkZWZpbmUJU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSNjQJKChzbmRfY3RsX2VsZW1fdHlwZV90KSA2KSAvKiA2NC1iaXQgaW50ZWdlciB0eXBlICovCisjZGVmaW5lCVNORFJWX0NUTF9FTEVNX1RZUEVfTEFTVAlTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI2NAorCit0eXBlZGVmIGludCBfX2JpdHdpc2Ugc25kX2N0bF9lbGVtX2lmYWNlX3Q7CisjZGVmaW5lCVNORFJWX0NUTF9FTEVNX0lGQUNFX0NBUkQJKChzbmRfY3RsX2VsZW1faWZhY2VfdCkgMCkgLyogZ2xvYmFsIGNvbnRyb2wgKi8KKyNkZWZpbmUJU05EUlZfQ1RMX0VMRU1fSUZBQ0VfSFdERVAJKChzbmRfY3RsX2VsZW1faWZhY2VfdCkgMSkgLyogaGFyZHdhcmUgZGVwZW5kZW50IGRldmljZSAqLworI2RlZmluZQlTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUgkoKHNuZF9jdGxfZWxlbV9pZmFjZV90KSAyKSAvKiB2aXJ0dWFsIG1peGVyIGRldmljZSAqLworI2RlZmluZQlTTkRSVl9DVExfRUxFTV9JRkFDRV9QQ00JKChzbmRfY3RsX2VsZW1faWZhY2VfdCkgMykgLyogUENNIGRldmljZSAqLworI2RlZmluZQlTTkRSVl9DVExfRUxFTV9JRkFDRV9SQVdNSURJCSgoc25kX2N0bF9lbGVtX2lmYWNlX3QpIDQpIC8qIFJhd01pZGkgZGV2aWNlICovCisjZGVmaW5lCVNORFJWX0NUTF9FTEVNX0lGQUNFX1RJTUVSCSgoc25kX2N0bF9lbGVtX2lmYWNlX3QpIDUpIC8qIHRpbWVyIGRldmljZSAqLworI2RlZmluZQlTTkRSVl9DVExfRUxFTV9JRkFDRV9TRVFVRU5DRVIJKChzbmRfY3RsX2VsZW1faWZhY2VfdCkgNikgLyogc2VxdWVuY2VyIGNsaWVudCAqLworI2RlZmluZQlTTkRSVl9DVExfRUxFTV9JRkFDRV9MQVNUCVNORFJWX0NUTF9FTEVNX0lGQUNFX1NFUVVFTkNFUgorCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFECQkoMTw8MCkKKyNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1dSSVRFCQkoMTw8MSkKKyNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURQkJKFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEfFNORFJWX0NUTF9FTEVNX0FDQ0VTU19XUklURSkKKyNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1ZPTEFUSUxFCQkoMTw8MikJLyogY29udHJvbCB2YWx1ZSBtYXkgYmUgY2hhbmdlZCB3aXRob3V0IGEgbm90aWZpY2F0aW9uICovCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19USU1FU1RBTVAJCSgxPDwzKQkvKiB3aGVuIHdhcyBjb250cm9sIGNoYW5nZWQgKi8KKyNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFECQkoMTw8NCkJLyogVExWIHJlYWQgaXMgcG9zc2libGUgKi8KKyNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9XUklURQkJKDE8PDUpCS8qIFRMViB3cml0ZSBpcyBwb3NzaWJsZSAqLworI2RlZmluZSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQURXUklURQkoU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEfFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfV1JJVEUpCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfQ09NTUFORAkoMTw8NikJLyogVExWIGNvbW1hbmQgaXMgcG9zc2libGUgKi8KKyNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX0lOQUNUSVZFCQkoMTw8OCkJLyogY29udHJvbCBkb2VzIGFjdHVhbGx5IG5vdGhpbmcsIGJ1dCBtYXkgYmUgdXBkYXRlZCAqLworI2RlZmluZSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfTE9DSwkJKDE8PDkpCS8qIHdyaXRlIGxvY2sgKi8KKyNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX09XTkVSCQkoMTw8MTApCS8qIHdyaXRlIGxvY2sgb3duZXIgKi8KKyNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9DQUxMQkFDSwkoMTw8MjgpCS8qIGtlcm5lbCB1c2UgYSBUTFYgY2FsbGJhY2sgKi8gCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19VU0VSCQkoMTw8MjkpIC8qIHVzZXIgc3BhY2UgZWxlbWVudCAqLworLyogYml0cyAzMCBhbmQgMzEgYXJlIG9ic29sZXRlZCAoZm9yIGluZGlyZWN0IGFjY2VzcykgKi8KKworLyogZm9yIGZ1cnRoZXIgZGV0YWlscyBzZWUgdGhlIEFDUEkgYW5kIFBDSSBwb3dlciBtYW5hZ2VtZW50IHNwZWNpZmljYXRpb24gKi8KKyNkZWZpbmUgU05EUlZfQ1RMX1BPV0VSX0QwCQkweDAwMDAJLyogZnVsbCBPbiAqLworI2RlZmluZSBTTkRSVl9DVExfUE9XRVJfRDEJCTB4MDEwMAkvKiBwYXJ0aWFsIE9uICovCisjZGVmaW5lIFNORFJWX0NUTF9QT1dFUl9EMgkJMHgwMjAwCS8qIHBhcnRpYWwgT24gKi8KKyNkZWZpbmUgU05EUlZfQ1RMX1BPV0VSX0QzCQkweDAzMDAJLyogT2ZmICovCisjZGVmaW5lIFNORFJWX0NUTF9QT1dFUl9EM2hvdAkJKFNORFJWX0NUTF9QT1dFUl9EM3wweDAwMDApCS8qIE9mZiwgd2l0aCBwb3dlciAqLworI2RlZmluZSBTTkRSVl9DVExfUE9XRVJfRDNjb2xkCQkoU05EUlZfQ1RMX1BPV0VSX0QzfDB4MDAwMSkJLyogT2ZmLCB3aXRob3V0IHBvd2VyICovCisKK3N0cnVjdCBzbmRfY3RsX2VsZW1faWQgeworCXVuc2lnbmVkIGludCBudW1pZDsJCS8qIG51bWVyaWMgaWRlbnRpZmllciwgemVybyA9IGludmFsaWQgKi8KKwlzbmRfY3RsX2VsZW1faWZhY2VfdCBpZmFjZTsJLyogaW50ZXJmYWNlIGlkZW50aWZpZXIgKi8KKwl1bnNpZ25lZCBpbnQgZGV2aWNlOwkJLyogZGV2aWNlL2NsaWVudCBudW1iZXIgKi8KKwl1bnNpZ25lZCBpbnQgc3ViZGV2aWNlOwkJLyogc3ViZGV2aWNlIChzdWJzdHJlYW0pIG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIgbmFtZVs0NF07CQkvKiBBU0NJSSBuYW1lIG9mIGl0ZW0gKi8KKwl1bnNpZ25lZCBpbnQgaW5kZXg7CQkvKiBpbmRleCBvZiBpdGVtICovCit9OworCitzdHJ1Y3Qgc25kX2N0bF9lbGVtX2xpc3QgeworCXVuc2lnbmVkIGludCBvZmZzZXQ7CQkvKiBXOiBmaXJzdCBlbGVtZW50IElEIHRvIGdldCAqLworCXVuc2lnbmVkIGludCBzcGFjZTsJCS8qIFc6IGNvdW50IG9mIGVsZW1lbnQgSURzIHRvIGdldCAqLworCXVuc2lnbmVkIGludCB1c2VkOwkJLyogUjogY291bnQgb2YgZWxlbWVudCBJRHMgc2V0ICovCisJdW5zaWduZWQgaW50IGNvdW50OwkJLyogUjogY291bnQgb2YgYWxsIGVsZW1lbnRzICovCisJc3RydWN0IHNuZF9jdGxfZWxlbV9pZCAqcGlkczsgLyogUjogSURzICovCisJdW5zaWduZWQgY2hhciByZXNlcnZlZFs1MF07Cit9OworCitzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8geworCXN0cnVjdCBzbmRfY3RsX2VsZW1faWQgaWQ7CS8qIFc6IGVsZW1lbnQgSUQgKi8KKwlzbmRfY3RsX2VsZW1fdHlwZV90IHR5cGU7CS8qIFI6IHZhbHVlIHR5cGUgLSBTTkRSVl9DVExfRUxFTV9UWVBFXyogKi8KKwl1bnNpZ25lZCBpbnQgYWNjZXNzOwkJLyogUjogdmFsdWUgYWNjZXNzIChiaXRtYXNrKSAtIFNORFJWX0NUTF9FTEVNX0FDQ0VTU18qICovCisJdW5zaWduZWQgaW50IGNvdW50OwkJLyogY291bnQgb2YgdmFsdWVzICovCisJX19rZXJuZWxfcGlkX3Qgb3duZXI7CQkvKiBvd25lcidzIFBJRCBvZiB0aGlzIGNvbnRyb2wgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlsb25nIG1pbjsJCS8qIFI6IG1pbmltdW0gdmFsdWUgKi8KKwkJCWxvbmcgbWF4OwkJLyogUjogbWF4aW11bSB2YWx1ZSAqLworCQkJbG9uZyBzdGVwOwkJLyogUjogc3RlcCAoMCB2YXJpYWJsZSkgKi8KKwkJfSBpbnRlZ2VyOworCQlzdHJ1Y3QgeworCQkJbG9uZyBsb25nIG1pbjsJCS8qIFI6IG1pbmltdW0gdmFsdWUgKi8KKwkJCWxvbmcgbG9uZyBtYXg7CQkvKiBSOiBtYXhpbXVtIHZhbHVlICovCisJCQlsb25nIGxvbmcgc3RlcDsJCS8qIFI6IHN0ZXAgKDAgdmFyaWFibGUpICovCisJCX0gaW50ZWdlcjY0OworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgaW50IGl0ZW1zOwkvKiBSOiBudW1iZXIgb2YgaXRlbXMgKi8KKwkJCXVuc2lnbmVkIGludCBpdGVtOwkvKiBXOiBpdGVtIG51bWJlciAqLworCQkJY2hhciBuYW1lWzY0XTsJCS8qIFI6IHZhbHVlIG5hbWUgKi8KKwkJfSBlbnVtZXJhdGVkOworCQl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzEyOF07CisJfSB2YWx1ZTsKKwl1bmlvbiB7CisJCXVuc2lnbmVkIHNob3J0IGRbNF07CQkvKiBkaW1lbnNpb25zICovCisJCXVuc2lnbmVkIHNob3J0ICpkX3B0cjsJCS8qIGluZGlyZWN0IC0gb2Jzb2xldGVkICovCisJfSBkaW1lbjsKKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzY0LTQqc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV07Cit9OworCitzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlIHsKKwlzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkIGlkOwkvKiBXOiBlbGVtZW50IElEICovCisJdW5zaWduZWQgaW50IGluZGlyZWN0OiAxOwkvKiBXOiBpbmRpcmVjdCBhY2Nlc3MgLSBvYnNvbGV0ZWQgKi8KKwl1bmlvbiB7CisJCXVuaW9uIHsKKwkJCWxvbmcgdmFsdWVbMTI4XTsKKwkJCWxvbmcgKnZhbHVlX3B0cjsJLyogb2Jzb2xldGVkICovCisJCX0gaW50ZWdlcjsKKwkJdW5pb24geworCQkJbG9uZyBsb25nIHZhbHVlWzY0XTsKKwkJCWxvbmcgbG9uZyAqdmFsdWVfcHRyOwkvKiBvYnNvbGV0ZWQgKi8KKwkJfSBpbnRlZ2VyNjQ7CisJCXVuaW9uIHsKKwkJCXVuc2lnbmVkIGludCBpdGVtWzEyOF07CisJCQl1bnNpZ25lZCBpbnQgKml0ZW1fcHRyOwkvKiBvYnNvbGV0ZWQgKi8KKwkJfSBlbnVtZXJhdGVkOworCQl1bmlvbiB7CisJCQl1bnNpZ25lZCBjaGFyIGRhdGFbNTEyXTsKKwkJCXVuc2lnbmVkIGNoYXIgKmRhdGFfcHRyOwkvKiBvYnNvbGV0ZWQgKi8KKwkJfSBieXRlczsKKwkJc3RydWN0IHNuZF9hZXNfaWVjOTU4IGllYzk1ODsKKwl9IHZhbHVlOwkJLyogUk8gKi8KKwlzdHJ1Y3QgdGltZXNwZWMgdHN0YW1wOworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbMTI4LXNpemVvZihzdHJ1Y3QgdGltZXNwZWMpXTsKK307CisKK3N0cnVjdCBzbmRfY3RsX3RsdiB7CisJdW5zaWduZWQgaW50IG51bWlkOwkvKiBjb250cm9sIGVsZW1lbnQgbnVtZXJpYyBpZGVudGlmaWNhdGlvbiAqLworCXVuc2lnbmVkIGludCBsZW5ndGg7CS8qIGluIGJ5dGVzIGFsaWduZWQgdG8gNCAqLworCXVuc2lnbmVkIGludCB0bHZbMF07CS8qIGZpcnN0IFRMViAqLworfTsKKworI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUFZFUlNJT04JX0lPUignVScsIDB4MDAsIGludCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0NBUkRfSU5GTwlfSU9SKCdVJywgMHgwMSwgc3RydWN0IHNuZF9jdGxfY2FyZF9pbmZvKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9MSVNUCV9JT1dSKCdVJywgMHgxMCwgc3RydWN0IHNuZF9jdGxfZWxlbV9saXN0KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9JTkZPCV9JT1dSKCdVJywgMHgxMSwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9SRUFECV9JT1dSKCdVJywgMHgxMiwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fV1JJVEUJX0lPV1IoJ1UnLCAweDEzLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9MT0NLCV9JT1coJ1UnLCAweDE0LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9VTkxPQ0sJX0lPVygnVScsIDB4MTUsIHN0cnVjdCBzbmRfY3RsX2VsZW1faWQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9TVUJTQ1JJQkVfRVZFTlRTIF9JT1dSKCdVJywgMHgxNiwgaW50KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9BREQJX0lPV1IoJ1UnLCAweDE3LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8pCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9FTEVNX1JFUExBQ0UJX0lPV1IoJ1UnLCAweDE4LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8pCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9FTEVNX1JFTU9WRQlfSU9XUignVScsIDB4MTksIHN0cnVjdCBzbmRfY3RsX2VsZW1faWQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9UTFZfUkVBRAlfSU9XUignVScsIDB4MWEsIHN0cnVjdCBzbmRfY3RsX3RsdikKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1RMVl9XUklURQlfSU9XUignVScsIDB4MWIsIHN0cnVjdCBzbmRfY3RsX3RsdikKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1RMVl9DT01NQU5ECV9JT1dSKCdVJywgMHgxYywgc3RydWN0IHNuZF9jdGxfdGx2KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfSFdERVBfTkVYVF9ERVZJQ0UgX0lPV1IoJ1UnLCAweDIwLCBpbnQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9IV0RFUF9JTkZPCV9JT1IoJ1UnLCAweDIxLCBzdHJ1Y3Qgc25kX2h3ZGVwX2luZm8pCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9QQ01fTkVYVF9ERVZJQ0UJX0lPUignVScsIDB4MzAsIGludCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1BDTV9JTkZPCV9JT1dSKCdVJywgMHgzMSwgc3RydWN0IHNuZF9wY21faW5mbykKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1BDTV9QUkVGRVJfU1VCREVWSUNFIF9JT1coJ1UnLCAweDMyLCBpbnQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9SQVdNSURJX05FWFRfREVWSUNFIF9JT1dSKCdVJywgMHg0MCwgaW50KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUkFXTUlESV9JTkZPCV9JT1dSKCdVJywgMHg0MSwgc3RydWN0IHNuZF9yYXdtaWRpX2luZm8pCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9SQVdNSURJX1BSRUZFUl9TVUJERVZJQ0UgX0lPVygnVScsIDB4NDIsIGludCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1BPV0VSCQlfSU9XUignVScsIDB4ZDAsIGludCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1BPV0VSX1NUQVRFCV9JT1IoJ1UnLCAweGQxLCBpbnQpCisKKy8qCisgKiAgUmVhZCBpbnRlcmZhY2UuCisgKi8KKworZW51bSBzbmRydl9jdGxfZXZlbnRfdHlwZSB7CisJU05EUlZfQ1RMX0VWRU5UX0VMRU0gPSAwLAorCVNORFJWX0NUTF9FVkVOVF9MQVNUID0gU05EUlZfQ1RMX0VWRU5UX0VMRU0sCit9OworCisjZGVmaW5lIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFCSgxPDwwKQkvKiBlbGVtZW50IHZhbHVlIHdhcyBjaGFuZ2VkICovCisjZGVmaW5lIFNORFJWX0NUTF9FVkVOVF9NQVNLX0lORk8JKDE8PDEpCS8qIGVsZW1lbnQgaW5mbyB3YXMgY2hhbmdlZCAqLworI2RlZmluZSBTTkRSVl9DVExfRVZFTlRfTUFTS19BREQJKDE8PDIpCS8qIGVsZW1lbnQgd2FzIGFkZGVkICovCisjZGVmaW5lIFNORFJWX0NUTF9FVkVOVF9NQVNLX1RMVgkoMTw8MykJLyogZWxlbWVudCBUTFYgdHJlZSB3YXMgY2hhbmdlZCAqLworI2RlZmluZSBTTkRSVl9DVExfRVZFTlRfTUFTS19SRU1PVkUJKH4wVSkJLyogZWxlbWVudCB3YXMgcmVtb3ZlZCAqLworCitzdHJ1Y3Qgc25kX2N0bF9ldmVudCB7CisJaW50IHR5cGU7CS8qIGV2ZW50IHR5cGUgLSBTTkRSVl9DVExfRVZFTlRfKiAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGludCBtYXNrOworCQkJc3RydWN0IHNuZF9jdGxfZWxlbV9pZCBpZDsKKwkJfSBlbGVtOworCQl1bnNpZ25lZCBjaGFyIGRhdGE4WzYwXTsKKwl9IGRhdGE7Cit9OworCisvKgorICogIENvbnRyb2wgbmFtZXMKKyAqLworCisjZGVmaW5lIFNORFJWX0NUTF9OQU1FX05PTkUJCQkJIiIKKyNkZWZpbmUgU05EUlZfQ1RMX05BTUVfUExBWUJBQ0sJCQkJIlBsYXliYWNrICIKKyNkZWZpbmUgU05EUlZfQ1RMX05BTUVfQ0FQVFVSRQkJCQkiQ2FwdHVyZSAiCisKKyNkZWZpbmUgU05EUlZfQ1RMX05BTUVfSUVDOTU4X05PTkUJCQkiIgorI2RlZmluZSBTTkRSVl9DVExfTkFNRV9JRUM5NThfU1dJVENICQkJIlN3aXRjaCIKKyNkZWZpbmUgU05EUlZfQ1RMX05BTUVfSUVDOTU4X1ZPTFVNRQkJCSJWb2x1bWUiCisjZGVmaW5lIFNORFJWX0NUTF9OQU1FX0lFQzk1OF9ERUZBVUxUCQkJIkRlZmF1bHQiCisjZGVmaW5lIFNORFJWX0NUTF9OQU1FX0lFQzk1OF9NQVNLCQkJIk1hc2siCisjZGVmaW5lIFNORFJWX0NUTF9OQU1FX0lFQzk1OF9DT05fTUFTSwkJCSJDb24gTWFzayIKKyNkZWZpbmUgU05EUlZfQ1RMX05BTUVfSUVDOTU4X1BST19NQVNLCQkJIlBybyBNYXNrIgorI2RlZmluZSBTTkRSVl9DVExfTkFNRV9JRUM5NThfUENNX1NUUkVBTQkJIlBDTSBTdHJlYW0iCisjZGVmaW5lIFNORFJWX0NUTF9OQU1FX0lFQzk1OChleHBsLGRpcmVjdGlvbix3aGF0KQkiSUVDOTU4ICIgZXhwbCBTTkRSVl9DVExfTkFNRV8jI2RpcmVjdGlvbiBTTkRSVl9DVExfTkFNRV9JRUM5NThfIyN3aGF0CisKKyNlbmRpZiAvKiBfX1NPVU5EX0FTT1VORF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc291bmQvYXNvdW5kX2ZtLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc291bmQvYXNvdW5kX2ZtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJhNGI5NgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zb3VuZC9hc291bmRfZm0uaApAQCAtMCwwICsxLDEzNCBAQAorI2lmbmRlZiBfX1NPVU5EX0FTT1VORF9GTV9ICisjZGVmaW5lIF9fU09VTkRfQVNPVU5EX0ZNX0gKKworLyoKKyAqICBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUgLSBBTFNBCisgKgorICogIEludGVyZmFjZSBmaWxlIGJldHdlZW4gQUxTQSBkcml2ZXIgJiB1c2VyIHNwYWNlCisgKiAgQ29weXJpZ2h0IChjKSAxOTk0LTk4IGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAcGVyZXguY3o+LAorICogICAgICAgICAgICAgICAgICAgICAgICAgICA0RnJvbnQgVGVjaG5vbG9naWVzCisgKgorICogIERpcmVjdCBGTSBjb250cm9sCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjZGVmaW5lIFNORFJWX0RNX0ZNX01PREVfT1BMMgkweDAwCisjZGVmaW5lIFNORFJWX0RNX0ZNX01PREVfT1BMMwkweDAxCisKK3N0cnVjdCBzbmRfZG1fZm1faW5mbyB7CisJdW5zaWduZWQgY2hhciBmbV9tb2RlOwkJLyogT1BMIG1vZGUsIHNlZSBTTkRSVl9ETV9GTV9NT0RFX1hYWCAqLworCXVuc2lnbmVkIGNoYXIgcmh5dGhtOwkJLyogcGVyY3Vzc2lvbiBtb2RlIGZsYWcgKi8KK307CisKKy8qCisgKiAgRGF0YSBzdHJ1Y3R1cmUgY29tcG9zaW5nIGFuIEZNICJub3RlIiBvciBzb3VuZCBldmVudC4KKyAqLworCitzdHJ1Y3Qgc25kX2RtX2ZtX3ZvaWNlIHsKKwl1bnNpZ25lZCBjaGFyIG9wOwkJLyogb3BlcmF0b3IgY2VsbCAoMCBvciAxKSAqLworCXVuc2lnbmVkIGNoYXIgdm9pY2U7CQkvKiBGTSB2b2ljZSAoMCB0byAxNykgKi8KKworCXVuc2lnbmVkIGNoYXIgYW07CQkvKiBhbXBsaXR1ZGUgbW9kdWxhdGlvbiAqLworCXVuc2lnbmVkIGNoYXIgdmlicmF0bzsJCS8qIHZpYnJhdG8gZWZmZWN0ICovCisJdW5zaWduZWQgY2hhciBkb19zdXN0YWluOwkvKiBzdXN0YWluIHBoYXNlICovCisJdW5zaWduZWQgY2hhciBrYmRfc2NhbGU7CS8qIGtleWJvYXJkIHNjYWxpbmcgKi8KKwl1bnNpZ25lZCBjaGFyIGhhcm1vbmljOwkJLyogNCBiaXRzOiBoYXJtb25pYyBhbmQgbXVsdGlwbGllciAqLworCXVuc2lnbmVkIGNoYXIgc2NhbGVfbGV2ZWw7CS8qIDIgYml0czogZGVjcmVhc2Ugb3V0cHV0IGZyZXEgcmlzZXMgKi8KKwl1bnNpZ25lZCBjaGFyIHZvbHVtZTsJCS8qIDYgYml0czogdm9sdW1lICovCisKKwl1bnNpZ25lZCBjaGFyIGF0dGFjazsJCS8qIDQgYml0czogYXR0YWNrIHJhdGUgKi8KKwl1bnNpZ25lZCBjaGFyIGRlY2F5OwkJLyogNCBiaXRzOiBkZWNheSByYXRlICovCisJdW5zaWduZWQgY2hhciBzdXN0YWluOwkJLyogNCBiaXRzOiBzdXN0YWluIGxldmVsICovCisJdW5zaWduZWQgY2hhciByZWxlYXNlOwkJLyogNCBiaXRzOiByZWxlYXNlIHJhdGUgKi8KKworCXVuc2lnbmVkIGNoYXIgZmVlZGJhY2s7CQkvKiAzIGJpdHM6IGZlZWRiYWNrIGZvciBvcDAgKi8KKwl1bnNpZ25lZCBjaGFyIGNvbm5lY3Rpb247CS8qIDAgZm9yIHNlcmlhbCwgMSBmb3IgcGFyYWxsZWwgKi8KKwl1bnNpZ25lZCBjaGFyIGxlZnQ7CQkvKiBzdGVyZW8gbGVmdCAqLworCXVuc2lnbmVkIGNoYXIgcmlnaHQ7CQkvKiBzdGVyZW8gcmlnaHQgKi8KKwl1bnNpZ25lZCBjaGFyIHdhdmVmb3JtOwkJLyogMyBiaXRzOiB3YXZlZm9ybSBzaGFwZSAqLworfTsKKworLyoKKyAqICBUaGlzIGRlc2NyaWJlcyBhbiBGTSBub3RlIGJ5IGl0cyB2b2ljZSwgb2N0YXZlLCBmcmVxdWVuY3kgbnVtYmVyICgxMGJpdCkKKyAqICBhbmQga2V5IG9uL29mZi4KKyAqLworCitzdHJ1Y3Qgc25kX2RtX2ZtX25vdGUgeworCXVuc2lnbmVkIGNoYXIgdm9pY2U7CS8qIDAtMTcgdm9pY2UgY2hhbm5lbCAqLworCXVuc2lnbmVkIGNoYXIgb2N0YXZlOwkvKiAzIGJpdHM6IHdoYXQgb2N0YXZlIHRvIHBsYXkgKi8KKwl1bnNpZ25lZCBpbnQgZm51bTsJLyogMTAgYml0czogZnJlcXVlbmN5IG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIga2V5X29uOwkvKiBzZXQgZm9yIGFjdGl2ZSwgY2xlYXIgZm9yIHNpbGVudCAqLworfTsKKworLyoKKyAqICBGTSBwYXJhbWV0ZXJzIHRoYXQgYXBwbHkgZ2xvYmFsbHkgdG8gYWxsIHZvaWNlcywgYW5kIHRodXMgYXJlIG5vdCAibm90ZXMiCisgKi8KKworc3RydWN0IHNuZF9kbV9mbV9wYXJhbXMgeworCXVuc2lnbmVkIGNoYXIgYW1fZGVwdGg7CQkvKiBhbXBsaXR1ZGUgbW9kdWxhdGlvbiBkZXB0aCAoMT1oaSkgKi8KKwl1bnNpZ25lZCBjaGFyIHZpYl9kZXB0aDsJLyogdmlicmF0byBkZXB0aCAoMT1oaSkgKi8KKwl1bnNpZ25lZCBjaGFyIGtiZF9zcGxpdDsJLyoga2V5Ym9hcmQgc3BsaXQgKi8KKwl1bnNpZ25lZCBjaGFyIHJoeXRobTsJCS8qIHBlcmN1c3Npb24gbW9kZSBzZWxlY3QgKi8KKworCS8qIFRoaXMgYmxvY2sgaXMgdGhlIHBlcmN1c3Npb24gaW5zdHJ1bWVudCBkYXRhICovCisJdW5zaWduZWQgY2hhciBiYXNzOworCXVuc2lnbmVkIGNoYXIgc25hcmU7CisJdW5zaWduZWQgY2hhciB0b210b207CisJdW5zaWduZWQgY2hhciBjeW1iYWw7CisJdW5zaWduZWQgY2hhciBoaWhhdDsKK307CisKKy8qCisgKiAgRk0gbW9kZSBpb2N0bCBzZXR0aW5ncworICovCisKKyNkZWZpbmUgU05EUlZfRE1fRk1fSU9DVExfSU5GTwkJX0lPUignSCcsIDB4MjAsIHN0cnVjdCBzbmRfZG1fZm1faW5mbykKKyNkZWZpbmUgU05EUlZfRE1fRk1fSU9DVExfUkVTRVQJCV9JTyAoJ0gnLCAweDIxKQorI2RlZmluZSBTTkRSVl9ETV9GTV9JT0NUTF9QTEFZX05PVEUJX0lPVygnSCcsIDB4MjIsIHN0cnVjdCBzbmRfZG1fZm1fbm90ZSkKKyNkZWZpbmUgU05EUlZfRE1fRk1fSU9DVExfU0VUX1ZPSUNFCV9JT1coJ0gnLCAweDIzLCBzdHJ1Y3Qgc25kX2RtX2ZtX3ZvaWNlKQorI2RlZmluZSBTTkRSVl9ETV9GTV9JT0NUTF9TRVRfUEFSQU1TCV9JT1coJ0gnLCAweDI0LCBzdHJ1Y3Qgc25kX2RtX2ZtX3BhcmFtcykKKyNkZWZpbmUgU05EUlZfRE1fRk1fSU9DVExfU0VUX01PREUJX0lPVygnSCcsIDB4MjUsIGludCkKKy8qIGZvciBPUEwzIG9ubHkgKi8KKyNkZWZpbmUgU05EUlZfRE1fRk1fSU9DVExfU0VUX0NPTk5FQ1RJT04JX0lPVygnSCcsIDB4MjYsIGludCkKKy8qIFNCSSBwYXRjaCBtYW5hZ2VtZW50ICovCisjZGVmaW5lIFNORFJWX0RNX0ZNX0lPQ1RMX0NMRUFSX1BBVENIRVMJX0lPICgnSCcsIDB4NDApCisKKyNkZWZpbmUgU05EUlZfRE1fRk1fT1NTX0lPQ1RMX1JFU0VUCQkweDIwCisjZGVmaW5lIFNORFJWX0RNX0ZNX09TU19JT0NUTF9QTEFZX05PVEUJCTB4MjEKKyNkZWZpbmUgU05EUlZfRE1fRk1fT1NTX0lPQ1RMX1NFVF9WT0lDRQkJMHgyMgorI2RlZmluZSBTTkRSVl9ETV9GTV9PU1NfSU9DVExfU0VUX1BBUkFNUwkweDIzCisjZGVmaW5lIFNORFJWX0RNX0ZNX09TU19JT0NUTF9TRVRfTU9ERQkJMHgyNAorI2RlZmluZSBTTkRSVl9ETV9GTV9PU1NfSU9DVExfU0VUX09QTAkJMHgyNQorCisvKgorICogUGF0Y2ggUmVjb3JkIC0gZml4ZWQgc2l6ZSBmb3Igd3JpdGUKKyAqLworCisjZGVmaW5lIEZNX0tFWV9TQkkJIlNCSVwwMzIiCisjZGVmaW5lIEZNX0tFWV8yT1AJIjJPUFwwMzIiCisjZGVmaW5lIEZNX0tFWV80T1AJIjRPUFwwMzIiCisKK3N0cnVjdCBzYmlfcGF0Y2ggeworCXVuc2lnbmVkIGNoYXIgcHJvZzsKKwl1bnNpZ25lZCBjaGFyIGJhbms7CisJY2hhciBrZXlbNF07CisJY2hhciBuYW1lWzI1XTsKKwljaGFyIGV4dGVuc2lvbls3XTsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbMzJdOworfTsKKworI2VuZGlmIC8qIF9fU09VTkRfQVNPVU5EX0ZNX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zb3VuZC9lbXUxMGsxLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc291bmQvZW11MTBrMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MjRhODQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc291bmQvZW11MTBrMS5oCkBAIC0wLDAgKzEsMzcxIEBACisjaWZuZGVmIF9fU09VTkRfRU1VMTBLMV9ICisjZGVmaW5lIF9fU09VTkRfRU1VMTBLMV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICogIENvcHlyaWdodCAoYykgYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBwZXJleC5jej4sCisgKgkJICAgICBDcmVhdGl2ZSBMYWJzLCBJbmMuCisgKiAgRGVmaW5pdGlvbnMgZm9yIEVNVTEwSzEgKFNCIExpdmUhKSBjaGlwcworICoKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKworLyoKKyAqIC0tLS0gRlg4MDEwIC0tLS0KKyAqLworCisjZGVmaW5lIEVNVTEwSzFfQ0FSRF9DUkVBVElWRQkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgRU1VMTBLMV9DQVJEX0VNVUFQUwkJCTB4MDAwMDAwMDEKKworI2RlZmluZSBFTVUxMEsxX0ZYODAxMF9QQ01fQ09VTlQJCTgKKworLyogaW5zdHJ1Y3Rpb24gc2V0ICovCisjZGVmaW5lIGlNQUMwCSAweDAwCS8qIFIgPSBBICsgKFggKiBZID4+IDMxKSAgIDsgc2F0dXJhdGlvbiAqLworI2RlZmluZSBpTUFDMQkgMHgwMQkvKiBSID0gQSArICgtWCAqIFkgPj4gMzEpICA7IHNhdHVyYXRpb24gKi8KKyNkZWZpbmUgaU1BQzIJIDB4MDIJLyogUiA9IEEgKyAoWCAqIFkgPj4gMzEpICAgOyB3cmFwYXJvdW5kICovCisjZGVmaW5lIGlNQUMzCSAweDAzCS8qIFIgPSBBICsgKC1YICogWSA+PiAzMSkgIDsgd3JhcGFyb3VuZCAqLworI2RlZmluZSBpTUFDSU5UMCAweDA0CS8qIFIgPSBBICsgWCAqIFkJICAgOyBzYXR1cmF0aW9uICovCisjZGVmaW5lIGlNQUNJTlQxIDB4MDUJLyogUiA9IEEgKyBYICogWQkgICA7IHdyYXBhcm91bmQgKDMxLWJpdCkgKi8KKyNkZWZpbmUgaUFDQzMJIDB4MDYJLyogUiA9IEEgKyBYICsgWQkgICA7IHNhdHVyYXRpb24gKi8KKyNkZWZpbmUgaU1BQ01WICAgMHgwNwkvKiBSID0gQSwgYWNjICs9IFggKiBZID4+IDMxICovCisjZGVmaW5lIGlBTkRYT1IgIDB4MDgJLyogUiA9IChBICYgWCkgXiBZICovCisjZGVmaW5lIGlUU1RORUcgIDB4MDkJLyogUiA9IChBID49IFkpID8gWCA6IH5YICovCisjZGVmaW5lIGlMSU1JVEdFIDB4MGEJLyogUiA9IChBID49IFkpID8gWCA6IFkgKi8KKyNkZWZpbmUgaUxJTUlUTFQgMHgwYgkvKiBSID0gKEEgPCBZKSA/IFggOiBZICovCisjZGVmaW5lIGlMT0cJIDB4MGMJLyogUiA9IGxpbmVhcl9kYXRhLCBBIChsb2dfZGF0YSksIFggKG1heF9leHApLCBZIChmb3JtYXRfd29yZCkgKi8KKyNkZWZpbmUgaUVYUAkgMHgwZAkvKiBSID0gbG9nX2RhdGEsIEEgKGxpbmVhcl9kYXRhKSwgWCAobWF4X2V4cCksIFkgKGZvcm1hdF93b3JkKSAqLworI2RlZmluZSBpSU5URVJQICAweDBlCS8qIFIgPSBBICsgKFggKiAoWSAtIEEpID4+IDMxKSAgOyBzYXR1cmF0aW9uICovCisjZGVmaW5lIGlTS0lQICAgIDB4MGYJLyogUiA9IEEgKGNjX3JlZyksIFggKGNvdW50KSwgWSAoY2NfdGVzdCkgKi8KKworLyogR1BScyAqLworI2RlZmluZSBGWEJVUyh4KQkoMHgwMCArICh4KSkJLyogeCA9IDB4MDAgLSAweDBmICovCisjZGVmaW5lIEVYVElOKHgpCSgweDEwICsgKHgpKQkvKiB4ID0gMHgwMCAtIDB4MGYgKi8KKyNkZWZpbmUgRVhUT1VUKHgpCSgweDIwICsgKHgpKQkvKiB4ID0gMHgwMCAtIDB4MGYgcGh5c2ljYWwgb3V0cyAtPiBGWFdDIGxvdyAxNiBiaXRzICovCisjZGVmaW5lIEZYQlVTMih4KQkoMHgzMCArICh4KSkJLyogeCA9IDB4MDAgLSAweDBmIGNvcGllcyBvZiBmeCBidXNlcyBmb3IgY2FwdHVyZSAtPiBGWFdDIGhpZ2ggMTYgYml0cyAqLworCQkJCQkvKiBOQjogMHgzMSBhbmQgMHgzMiBhcmUgc2hhcmVkIHdpdGggQ2VudGVyL0xGRSBvbiBTQiBsaXZlIDUuMSAqLworCisjZGVmaW5lIENfMDAwMDAwMDAJMHg0MAorI2RlZmluZSBDXzAwMDAwMDAxCTB4NDEKKyNkZWZpbmUgQ18wMDAwMDAwMgkweDQyCisjZGVmaW5lIENfMDAwMDAwMDMJMHg0MworI2RlZmluZSBDXzAwMDAwMDA0CTB4NDQKKyNkZWZpbmUgQ18wMDAwMDAwOAkweDQ1CisjZGVmaW5lIENfMDAwMDAwMTAJMHg0NgorI2RlZmluZSBDXzAwMDAwMDIwCTB4NDcKKyNkZWZpbmUgQ18wMDAwMDEwMAkweDQ4CisjZGVmaW5lIENfMDAwMTAwMDAJMHg0OQorI2RlZmluZSBDXzAwMDgwMDAwCTB4NGEKKyNkZWZpbmUgQ18xMDAwMDAwMAkweDRiCisjZGVmaW5lIENfMjAwMDAwMDAJMHg0YworI2RlZmluZSBDXzQwMDAwMDAwCTB4NGQKKyNkZWZpbmUgQ184MDAwMDAwMAkweDRlCisjZGVmaW5lIENfN2ZmZmZmZmYJMHg0ZgorI2RlZmluZSBDX2ZmZmZmZmZmCTB4NTAKKyNkZWZpbmUgQ19mZmZmZmZmZQkweDUxCisjZGVmaW5lIENfYzAwMDAwMDAJMHg1MgorI2RlZmluZSBDXzRmMWJiY2RjCTB4NTMKKyNkZWZpbmUgQ181YTdlZjlkYgkweDU0CisjZGVmaW5lIENfMDAxMDAwMDAJMHg1NQkJLyogPz8gKi8KKyNkZWZpbmUgR1BSX0FDQ1UJMHg1NgkJLyogQUNDVU0sIGFjY3VtdWxhdG9yICovCisjZGVmaW5lIEdQUl9DT05ECTB4NTcJCS8qIENDUiwgY29uZGl0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIEdQUl9OT0lTRTAJMHg1OAkJLyogbm9pc2Ugc291cmNlICovCisjZGVmaW5lIEdQUl9OT0lTRTEJMHg1OQkJLyogbm9pc2Ugc291cmNlICovCisjZGVmaW5lIEdQUl9JUlEJCTB4NWEJCS8qIElSUSByZWdpc3RlciAqLworI2RlZmluZSBHUFJfREJBQwkweDViCQkvKiBUUkFNIERlbGF5IEJhc2UgQWRkcmVzcyBDb3VudGVyICovCisjZGVmaW5lIEdQUih4KQkJKEZYR1BSRUdCQVNFICsgKHgpKSAvKiBmcmVlIEdQUnM6IHggPSAweDAwIC0gMHhmZiAqLworI2RlZmluZSBJVFJBTV9EQVRBKHgpCShUQU5LTUVNREFUQVJFR0JBU0UgKyAweDAwICsgKHgpKSAvKiB4ID0gMHgwMCAtIDB4N2YgKi8KKyNkZWZpbmUgRVRSQU1fREFUQSh4KQkoVEFOS01FTURBVEFSRUdCQVNFICsgMHg4MCArICh4KSkgLyogeCA9IDB4MDAgLSAweDFmICovCisjZGVmaW5lIElUUkFNX0FERFIoeCkJKFRBTktNRU1BRERSUkVHQkFTRSArIDB4MDAgKyAoeCkpIC8qIHggPSAweDAwIC0gMHg3ZiAqLworI2RlZmluZSBFVFJBTV9BRERSKHgpCShUQU5LTUVNQUREUlJFR0JBU0UgKyAweDgwICsgKHgpKSAvKiB4ID0gMHgwMCAtIDB4MWYgKi8KKworI2RlZmluZSBBX0lUUkFNX0RBVEEoeCkJKFRBTktNRU1EQVRBUkVHQkFTRSArIDB4MDAgKyAoeCkpIC8qIHggPSAweDAwIC0gMHhiZiAqLworI2RlZmluZSBBX0VUUkFNX0RBVEEoeCkJKFRBTktNRU1EQVRBUkVHQkFTRSArIDB4YzAgKyAoeCkpIC8qIHggPSAweDAwIC0gMHgzZiAqLworI2RlZmluZSBBX0lUUkFNX0FERFIoeCkJKFRBTktNRU1BRERSUkVHQkFTRSArIDB4MDAgKyAoeCkpIC8qIHggPSAweDAwIC0gMHhiZiAqLworI2RlZmluZSBBX0VUUkFNX0FERFIoeCkJKFRBTktNRU1BRERSUkVHQkFTRSArIDB4YzAgKyAoeCkpIC8qIHggPSAweDAwIC0gMHgzZiAqLworI2RlZmluZSBBX0lUUkFNX0NUTCh4KQkoQV9UQU5LTUVNQ1RMUkVHQkFTRSArIDB4MDAgKyAoeCkpIC8qIHggPSAweDAwIC0gMHhiZiAqLworI2RlZmluZSBBX0VUUkFNX0NUTCh4KQkoQV9UQU5LTUVNQ1RMUkVHQkFTRSArIDB4YzAgKyAoeCkpIC8qIHggPSAweDAwIC0gMHgzZiAqLworCisjZGVmaW5lIEFfRlhCVVMoeCkJKDB4MDAgKyAoeCkpCS8qIHggPSAweDAwIC0gMHgzZiBGWCBidXNlcyAqLworI2RlZmluZSBBX0VYVElOKHgpCSgweDQwICsgKHgpKQkvKiB4ID0gMHgwMCAtIDB4MGYgcGh5c2ljYWwgaW5zICovCisjZGVmaW5lIEFfUDE2VklOKHgpCSgweDUwICsgKHgpKQkvKiB4ID0gMHgwMCAtIDB4MGYgcDE2diBpbnMgKEEyIG9ubHkpICJFTVUzMiBpbnB1dHMiICovCisjZGVmaW5lIEFfRVhUT1VUKHgpCSgweDYwICsgKHgpKQkvKiB4ID0gMHgwMCAtIDB4MWYgcGh5c2ljYWwgb3V0cyAtPiBBX0ZYV0MxIDB4NzktN2YgdW5rbm93biAgICovCisjZGVmaW5lIEFfRlhCVVMyKHgpCSgweDgwICsgKHgpKQkvKiB4ID0gMHgwMCAtIDB4MWYgZXh0cmEgb3V0cyB1c2VkIGZvciBFRlggY2FwdHVyZSAtPiBBX0ZYV0MyICovCisjZGVmaW5lIEFfRU1VMzJPVVRIKHgpCSgweGEwICsgKHgpKQkvKiB4ID0gMHgwMCAtIDB4MGYgIkVNVTMyX09VVF8xMCAtIF8xRiIgLSA/Pz8gKi8KKyNkZWZpbmUgQV9FTVUzMk9VVEwoeCkJKDB4YjAgKyAoeCkpCS8qIHggPSAweDAwIC0gMHgwZiAiRU1VMzJfT1VUXzEgLSBfRiIgLSA/Pz8gKi8KKyNkZWZpbmUgQTNfRU1VMzJJTih4KQkoMHgxNjAgKyAoeCkpCS8qIHggPSAweDAwIC0gMHgzZiAiRU1VMzJfSU5fMDAgLSBfM0YiIC0gT25seSB3aGVuIC5kZXZpY2UgPSAweDAwMDggKi8KKyNkZWZpbmUgQTNfRU1VMzJPVVQoeCkJKDB4MUUwICsgKHgpKQkvKiB4ID0gMHgwMCAtIDB4MGYgIkVNVTMyX09VVF8wMCAtIF8zRiIgLSBPbmx5IHdoZW4gLmRldmljZSA9IDB4MDAwOCAqLworI2RlZmluZSBBX0dQUih4KQkoQV9GWEdQUkVHQkFTRSArICh4KSkKKworLyogY2NfcmVnIGNvbnN0YW50cyAqLworI2RlZmluZSBDQ19SRUdfTk9STUFMSVpFRCBDXzAwMDAwMDAxCisjZGVmaW5lIENDX1JFR19CT1JST1cJQ18wMDAwMDAwMgorI2RlZmluZSBDQ19SRUdfTUlOVVMJQ18wMDAwMDAwNAorI2RlZmluZSBDQ19SRUdfWkVSTwlDXzAwMDAwMDA4CisjZGVmaW5lIENDX1JFR19TQVRVUkFURQlDXzAwMDAwMDEwCisjZGVmaW5lIENDX1JFR19OT05aRVJPCUNfMDAwMDAxMDAKKworLyogRlggYnVzZXMgKi8KKyNkZWZpbmUgRlhCVVNfUENNX0xFRlQJCTB4MDAKKyNkZWZpbmUgRlhCVVNfUENNX1JJR0hUCQkweDAxCisjZGVmaW5lIEZYQlVTX1BDTV9MRUZUX1JFQVIJMHgwMgorI2RlZmluZSBGWEJVU19QQ01fUklHSFRfUkVBUgkweDAzCisjZGVmaW5lIEZYQlVTX01JRElfTEVGVAkJMHgwNAorI2RlZmluZSBGWEJVU19NSURJX1JJR0hUCTB4MDUKKyNkZWZpbmUgRlhCVVNfUENNX0NFTlRFUgkweDA2CisjZGVmaW5lIEZYQlVTX1BDTV9MRkUJCTB4MDcKKyNkZWZpbmUgRlhCVVNfUENNX0xFRlRfRlJPTlQJMHgwOAorI2RlZmluZSBGWEJVU19QQ01fUklHSFRfRlJPTlQJMHgwOQorI2RlZmluZSBGWEJVU19NSURJX1JFVkVSQgkweDBjCisjZGVmaW5lIEZYQlVTX01JRElfQ0hPUlVTCTB4MGQKKyNkZWZpbmUgRlhCVVNfUENNX0xFRlRfU0lERQkweDBlCisjZGVmaW5lIEZYQlVTX1BDTV9SSUdIVF9TSURFCTB4MGYKKyNkZWZpbmUgRlhCVVNfUFRfTEVGVAkJMHgxNAorI2RlZmluZSBGWEJVU19QVF9SSUdIVAkJMHgxNQorCisvKiBJbnB1dHMgKi8KKyNkZWZpbmUgRVhUSU5fQUM5N19MCSAgIDB4MDAJLyogQUMnOTcgY2FwdHVyZSBjaGFubmVsIC0gbGVmdCAqLworI2RlZmluZSBFWFRJTl9BQzk3X1IJICAgMHgwMQkvKiBBQyc5NyBjYXB0dXJlIGNoYW5uZWwgLSByaWdodCAqLworI2RlZmluZSBFWFRJTl9TUERJRl9DRF9MICAgMHgwMgkvKiBpbnRlcm5hbCBTL1BESUYgQ0QgLSBvbmJvYXJkIC0gbGVmdCAqLworI2RlZmluZSBFWFRJTl9TUERJRl9DRF9SICAgMHgwMwkvKiBpbnRlcm5hbCBTL1BESUYgQ0QgLSBvbmJvYXJkIC0gcmlnaHQgKi8KKyNkZWZpbmUgRVhUSU5fWk9PTV9MCSAgIDB4MDQJLyogWm9vbSBWaWRlbyBJMlMgLSBsZWZ0ICovCisjZGVmaW5lIEVYVElOX1pPT01fUgkgICAweDA1CS8qIFpvb20gVmlkZW8gSTJTIC0gcmlnaHQgKi8KKyNkZWZpbmUgRVhUSU5fVE9TTElOS19MCSAgIDB4MDYJLyogTGl2ZURyaXZlIC0gVE9TTGluayBPcHRpY2FsIC0gbGVmdCAqLworI2RlZmluZSBFWFRJTl9UT1NMSU5LX1IgICAgMHgwNwkvKiBMaXZlRHJpdmUgLSBUT1NMaW5rIE9wdGljYWwgLSByaWdodCAqLworI2RlZmluZSBFWFRJTl9MSU5FMV9MCSAgIDB4MDgJLyogTGl2ZURyaXZlIC0gTGluZS9NaWMgMSAtIGxlZnQgKi8KKyNkZWZpbmUgRVhUSU5fTElORTFfUgkgICAweDA5CS8qIExpdmVEcml2ZSAtIExpbmUvTWljIDEgLSByaWdodCAqLworI2RlZmluZSBFWFRJTl9DT0FYX1NQRElGX0wgMHgwYQkvKiBMaXZlRHJpdmUgLSBDb2F4aWFsIFMvUERJRiAtIGxlZnQgKi8KKyNkZWZpbmUgRVhUSU5fQ09BWF9TUERJRl9SIDB4MGIgLyogTGl2ZURyaXZlIC0gQ29heGlhbCBTL1BESUYgLSByaWdodCAqLworI2RlZmluZSBFWFRJTl9MSU5FMl9MCSAgIDB4MGMJLyogTGl2ZURyaXZlIC0gTGluZS9NaWMgMiAtIGxlZnQgKi8KKyNkZWZpbmUgRVhUSU5fTElORTJfUgkgICAweDBkCS8qIExpdmVEcml2ZSAtIExpbmUvTWljIDIgLSByaWdodCAqLworCisvKiBPdXRwdXRzICovCisjZGVmaW5lIEVYVE9VVF9BQzk3X0wJICAgMHgwMAkvKiBBQyc5NyBwbGF5YmFjayBjaGFubmVsIC0gbGVmdCAqLworI2RlZmluZSBFWFRPVVRfQUM5N19SCSAgIDB4MDEJLyogQUMnOTcgcGxheWJhY2sgY2hhbm5lbCAtIHJpZ2h0ICovCisjZGVmaW5lIEVYVE9VVF9UT1NMSU5LX0wgICAweDAyCS8qIExpdmVEcml2ZSAtIFRPU0xpbmsgT3B0aWNhbCAtIGxlZnQgKi8KKyNkZWZpbmUgRVhUT1VUX1RPU0xJTktfUiAgIDB4MDMJLyogTGl2ZURyaXZlIC0gVE9TTGluayBPcHRpY2FsIC0gcmlnaHQgKi8KKyNkZWZpbmUgRVhUT1VUX0FDOTdfQ0VOVEVSIDB4MDQJLyogU0IgTGl2ZSA1LjEgLSBjZW50ZXIgKi8KKyNkZWZpbmUgRVhUT1VUX0FDOTdfTEZFCSAgIDB4MDUgLyogU0IgTGl2ZSA1LjEgLSBMRkUgKi8KKyNkZWZpbmUgRVhUT1VUX0hFQURQSE9ORV9MIDB4MDYJLyogTGl2ZURyaXZlIC0gSGVhZHBob25lIC0gbGVmdCAqLworI2RlZmluZSBFWFRPVVRfSEVBRFBIT05FX1IgMHgwNwkvKiBMaXZlRHJpdmUgLSBIZWFkcGhvbmUgLSByaWdodCAqLworI2RlZmluZSBFWFRPVVRfUkVBUl9MCSAgIDB4MDgJLyogUmVhciBjaGFubmVsIC0gbGVmdCAqLworI2RlZmluZSBFWFRPVVRfUkVBUl9SCSAgIDB4MDkJLyogUmVhciBjaGFubmVsIC0gcmlnaHQgKi8KKyNkZWZpbmUgRVhUT1VUX0FEQ19DQVBfTCAgIDB4MGEJLyogQURDIENhcHR1cmUgYnVmZmVyIC0gbGVmdCAqLworI2RlZmluZSBFWFRPVVRfQURDX0NBUF9SICAgMHgwYgkvKiBBREMgQ2FwdHVyZSBidWZmZXIgLSByaWdodCAqLworI2RlZmluZSBFWFRPVVRfTUlDX0NBUAkgICAweDBjCS8qIE1JQyBDYXB0dXJlIGJ1ZmZlciAqLworI2RlZmluZSBFWFRPVVRfQUM5N19SRUFSX0wgMHgwZAkvKiBTQiBMaXZlIDUuMSAoYykgMjAwMyAtIFJlYXIgTGVmdCAqLworI2RlZmluZSBFWFRPVVRfQUM5N19SRUFSX1IgMHgwZQkvKiBTQiBMaXZlIDUuMSAoYykgMjAwMyAtIFJlYXIgUmlnaHQgKi8KKyNkZWZpbmUgRVhUT1VUX0FDRU5URVIJICAgMHgxMSAvKiBBbmFsb2cgQ2VudGVyICovCisjZGVmaW5lIEVYVE9VVF9BTEZFCSAgIDB4MTIgLyogQW5hbG9nIExGRSAqLworCisvKiBBdWRpZ3kgSW5wdXRzICovCisjZGVmaW5lIEFfRVhUSU5fQUM5N19MCQkweDAwCS8qIEFDJzk3IGNhcHR1cmUgY2hhbm5lbCAtIGxlZnQgKi8KKyNkZWZpbmUgQV9FWFRJTl9BQzk3X1IJCTB4MDEJLyogQUMnOTcgY2FwdHVyZSBjaGFubmVsIC0gcmlnaHQgKi8KKyNkZWZpbmUgQV9FWFRJTl9TUERJRl9DRF9MCTB4MDIJLyogZGlnaXRhbCBDRCBsZWZ0ICovCisjZGVmaW5lIEFfRVhUSU5fU1BESUZfQ0RfUgkweDAzCS8qIGRpZ2l0YWwgQ0QgbGVmdCAqLworI2RlZmluZSBBX0VYVElOX09QVF9TUERJRl9MICAgICAweDA0ICAgIC8qIGF1ZGlneSBkcml2ZSBPcHRpY2FsIFNQRElGIC0gbGVmdCAqLworI2RlZmluZSBBX0VYVElOX09QVF9TUERJRl9SICAgICAweDA1ICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgKi8gCisjZGVmaW5lIEFfRVhUSU5fTElORTJfTAkJMHgwOAkvKiBhdWRpZ3kgZHJpdmUgbGluZTIvbWljMiAtIGxlZnQgKi8KKyNkZWZpbmUgQV9FWFRJTl9MSU5FMl9SCQkweDA5CS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgKi8KKyNkZWZpbmUgQV9FWFRJTl9BRENfTAkJMHgwYSAgICAvKiBQaGlsaXBzIEFEQyAtIGxlZnQgKi8KKyNkZWZpbmUgQV9FWFRJTl9BRENfUgkJMHgwYiAgICAvKiAgICAgICAgICAgICAgIHJpZ2h0ICovCisjZGVmaW5lIEFfRVhUSU5fQVVYMl9MCQkweDBjCS8qIGF1ZGlneSBkcml2ZSBhdXgyIC0gbGVmdCAqLworI2RlZmluZSBBX0VYVElOX0FVWDJfUgkJMHgwZAkvKiAgICAgICAgICAgICAgICAgICAtIHJpZ2h0ICovCisKKy8qIEF1ZGlnaXkgT3V0cHV0cyAqLworI2RlZmluZSBBX0VYVE9VVF9GUk9OVF9MCTB4MDAJLyogZGlnaXRhbCBmcm9udCBsZWZ0ICovCisjZGVmaW5lIEFfRVhUT1VUX0ZST05UX1IJMHgwMQkvKiAgICAgICAgICAgICAgIHJpZ2h0ICovCisjZGVmaW5lIEFfRVhUT1VUX0NFTlRFUgkJMHgwMgkvKiBkaWdpdGFsIGZyb250IGNlbnRlciAqLworI2RlZmluZSBBX0VYVE9VVF9MRkUJCTB4MDMJLyogZGlnaXRhbCBmcm9udCBsZmUgKi8KKyNkZWZpbmUgQV9FWFRPVVRfSEVBRFBIT05FX0wJMHgwNAkvKiBoZWFkcGhvbmUgYXVkaWd5IGRyaXZlIGxlZnQgKi8KKyNkZWZpbmUgQV9FWFRPVVRfSEVBRFBIT05FX1IJMHgwNQkvKiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0ICovCisjZGVmaW5lIEFfRVhUT1VUX1JFQVJfTAkJMHgwNgkvKiBkaWdpdGFsIHJlYXIgbGVmdCAqLworI2RlZmluZSBBX0VYVE9VVF9SRUFSX1IJCTB4MDcJLyogICAgICAgICAgICAgIHJpZ2h0ICovCisjZGVmaW5lIEFfRVhUT1VUX0FGUk9OVF9MCTB4MDgJLyogYW5hbG9nIGZyb250IGxlZnQgKi8KKyNkZWZpbmUgQV9FWFRPVVRfQUZST05UX1IJMHgwOQkvKiAgICAgICAgICAgICAgcmlnaHQgKi8KKyNkZWZpbmUgQV9FWFRPVVRfQUNFTlRFUgkweDBhCS8qIGFuYWxvZyBjZW50ZXIgKi8KKyNkZWZpbmUgQV9FWFRPVVRfQUxGRQkJMHgwYgkvKiBhbmFsb2cgTEZFICovCisjZGVmaW5lIEFfRVhUT1VUX0FTSURFX0wJMHgwYwkvKiBhbmFsb2cgc2lkZSBsZWZ0ICAtIEF1ZGlneSAyIFpTICovCisjZGVmaW5lIEFfRVhUT1VUX0FTSURFX1IJMHgwZAkvKiAgICAgICAgICAgICByaWdodCAtIEF1ZGlneSAyIFpTICovCisjZGVmaW5lIEFfRVhUT1VUX0FSRUFSX0wJMHgwZQkvKiBhbmFsb2cgcmVhciBsZWZ0ICovCisjZGVmaW5lIEFfRVhUT1VUX0FSRUFSX1IJMHgwZgkvKiAgICAgICAgICAgICByaWdodCAqLworI2RlZmluZSBBX0VYVE9VVF9BQzk3X0wJCTB4MTAJLyogQUM5NyBsZWZ0IChmcm9udCkgKi8KKyNkZWZpbmUgQV9FWFRPVVRfQUM5N19SCQkweDExCS8qICAgICAgcmlnaHQgKi8KKyNkZWZpbmUgQV9FWFRPVVRfQURDX0NBUF9MCTB4MTYJLyogQURDIGNhcHR1cmUgYnVmZmVyIGxlZnQgKi8KKyNkZWZpbmUgQV9FWFRPVVRfQURDX0NBUF9SCTB4MTcJLyogICAgICAgICAgICAgICAgICAgIHJpZ2h0ICovCisjZGVmaW5lIEFfRVhUT1VUX01JQ19DQVAJMHgxOAkvKiBNaWMgY2FwdHVyZSBidWZmZXIgKi8KKworLyogQXVkaWd5IGNvbnN0YW50cyAqLworI2RlZmluZSBBX0NfMDAwMDAwMDAJMHhjMAorI2RlZmluZSBBX0NfMDAwMDAwMDEJMHhjMQorI2RlZmluZSBBX0NfMDAwMDAwMDIJMHhjMgorI2RlZmluZSBBX0NfMDAwMDAwMDMJMHhjMworI2RlZmluZSBBX0NfMDAwMDAwMDQJMHhjNAorI2RlZmluZSBBX0NfMDAwMDAwMDgJMHhjNQorI2RlZmluZSBBX0NfMDAwMDAwMTAJMHhjNgorI2RlZmluZSBBX0NfMDAwMDAwMjAJMHhjNworI2RlZmluZSBBX0NfMDAwMDAxMDAJMHhjOAorI2RlZmluZSBBX0NfMDAwMTAwMDAJMHhjOQorI2RlZmluZSBBX0NfMDAwMDA4MDAJMHhjYQorI2RlZmluZSBBX0NfMTAwMDAwMDAJMHhjYgorI2RlZmluZSBBX0NfMjAwMDAwMDAJMHhjYworI2RlZmluZSBBX0NfNDAwMDAwMDAJMHhjZAorI2RlZmluZSBBX0NfODAwMDAwMDAJMHhjZQorI2RlZmluZSBBX0NfN2ZmZmZmZmYJMHhjZgorI2RlZmluZSBBX0NfZmZmZmZmZmYJMHhkMAorI2RlZmluZSBBX0NfZmZmZmZmZmUJMHhkMQorI2RlZmluZSBBX0NfYzAwMDAwMDAJMHhkMgorI2RlZmluZSBBX0NfNGYxYmJjZGMJMHhkMworI2RlZmluZSBBX0NfNWE3ZWY5ZGIJMHhkNAorI2RlZmluZSBBX0NfMDAxMDAwMDAJMHhkNQorI2RlZmluZSBBX0dQUl9BQ0NVCTB4ZDYJCS8qIEFDQ1VNLCBhY2N1bXVsYXRvciAqLworI2RlZmluZSBBX0dQUl9DT05ECTB4ZDcJCS8qIENDUiwgY29uZGl0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIEFfR1BSX05PSVNFMAkweGQ4CQkvKiBub2lzZSBzb3VyY2UgKi8KKyNkZWZpbmUgQV9HUFJfTk9JU0UxCTB4ZDkJCS8qIG5vaXNlIHNvdXJjZSAqLworI2RlZmluZSBBX0dQUl9JUlEJMHhkYQkJLyogSVJRIHJlZ2lzdGVyICovCisjZGVmaW5lIEFfR1BSX0RCQUMJMHhkYgkJLyogVFJBTSBEZWxheSBCYXNlIEFkZHJlc3MgQ291bnRlciAtIGludGVybmFsICovCisjZGVmaW5lIEFfR1BSX0RCQUNFCTB4ZGUJCS8qIFRSQU0gRGVsYXkgQmFzZSBBZGRyZXNzIENvdW50ZXIgLSBleHRlcm5hbCAqLworCisvKiBkZWZpbml0aW9ucyBmb3IgZGVidWcgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRU1VMTBLMV9EQkdfWkMJCQkweDgwMDAwMDAwCS8qIHplcm8gdHJhbSBjb3VudGVyICovCisjZGVmaW5lIEVNVTEwSzFfREJHX1NBVFVSQVRJT05fT0NDVVJFRAkweDAyMDAwMDAwCS8qIHNhdHVyYXRpb24gY29udHJvbCAqLworI2RlZmluZSBFTVUxMEsxX0RCR19TQVRVUkFUSU9OX0FERFIJMHgwMWZmMDAwMAkvKiBzYXR1cmF0aW9uIGFkZHJlc3MgKi8KKyNkZWZpbmUgRU1VMTBLMV9EQkdfU0lOR0xFX1NURVAJCTB4MDAwMDgwMDAJLyogc2luZ2xlIHN0ZXAgbW9kZSAqLworI2RlZmluZSBFTVUxMEsxX0RCR19TVEVQCQkweDAwMDA0MDAwCS8qIHN0YXJ0IHNpbmdsZSBzdGVwICovCisjZGVmaW5lIEVNVTEwSzFfREJHX0NPTkRJVElPTl9DT0RFCTB4MDAwMDNlMDAJLyogY29uZGl0aW9uIGNvZGUgKi8KKyNkZWZpbmUgRU1VMTBLMV9EQkdfU0lOR0xFX1NURVBfQUREUgkweDAwMDAwMWZmCS8qIHNpbmdsZSBzdGVwIGFkZHJlc3MgKi8KKworLyogdGFuayBtZW1vcnkgYWRkcmVzcyBsaW5lICovCisjZGVmaW5lIFRBTktNRU1BRERSUkVHX0FERFJfTUFTSyAweDAwMGZmZmZmCS8qIDIwIGJpdCB0YW5rIGFkZHJlc3MgZmllbGQJCQkqLworI2RlZmluZSBUQU5LTUVNQUREUlJFR19DTEVBUgkgMHgwMDgwMDAwMAkvKiBDbGVhciB0YW5rIG1lbW9yeQkJCQkqLworI2RlZmluZSBUQU5LTUVNQUREUlJFR19BTElHTgkgMHgwMDQwMDAwMAkvKiBBbGlnbiByZWFkIG9yIHdyaXRlIHJlbGF0aXZlIHRvIHRhbmsgYWNjZXNzCSovCisjZGVmaW5lIFRBTktNRU1BRERSUkVHX1dSSVRFCSAweDAwMjAwMDAwCS8qIFdyaXRlIHRvIHRhbmsgbWVtb3J5CQkJCSovCisjZGVmaW5lIFRBTktNRU1BRERSUkVHX1JFQUQJIDB4MDAxMDAwMDAJLyogUmVhZCBmcm9tIHRhbmsgbWVtb3J5CQkJKi8KKworc3RydWN0IHNuZF9lbXUxMGsxX2Z4ODAxMF9pbmZvIHsKKwl1bnNpZ25lZCBpbnQgaW50ZXJuYWxfdHJhbV9zaXplOwkvKiBpbiBzYW1wbGVzICovCisJdW5zaWduZWQgaW50IGV4dGVybmFsX3RyYW1fc2l6ZTsJLyogaW4gc2FtcGxlcyAqLworCWNoYXIgZnhidXNfbmFtZXNbMTZdWzMyXTsJCS8qIG5hbWVzIG9mIEZYQlVTZXMgKi8KKwljaGFyIGV4dGluX25hbWVzWzE2XVszMl07CQkvKiBuYW1lcyBvZiBleHRlcm5hbCBpbnB1dHMgKi8KKwljaGFyIGV4dG91dF9uYW1lc1szMl1bMzJdOwkJLyogbmFtZXMgb2YgZXh0ZXJuYWwgb3V0cHV0cyAqLworCXVuc2lnbmVkIGludCBncHJfY29udHJvbHM7CQkvKiBjb3VudCBvZiBHUFIgY29udHJvbHMgKi8KK307CisKKyNkZWZpbmUgRU1VMTBLMV9HUFJfVFJBTlNMQVRJT05fTk9ORQkJMAorI2RlZmluZSBFTVUxMEsxX0dQUl9UUkFOU0xBVElPTl9UQUJMRTEwMAkxCisjZGVmaW5lIEVNVTEwSzFfR1BSX1RSQU5TTEFUSU9OX0JBU1MJCTIKKyNkZWZpbmUgRU1VMTBLMV9HUFJfVFJBTlNMQVRJT05fVFJFQkxFCQkzCisjZGVmaW5lIEVNVTEwSzFfR1BSX1RSQU5TTEFUSU9OX09OT0ZGCQk0CisKK3N0cnVjdCBzbmRfZW11MTBrMV9meDgwMTBfY29udHJvbF9ncHIgeworCXN0cnVjdCBzbmRfY3RsX2VsZW1faWQgaWQ7CQkvKiBmdWxsIGNvbnRyb2wgSUQgZGVmaW5pdGlvbiAqLworCXVuc2lnbmVkIGludCB2Y291bnQ7CQkvKiB2aXNpYmxlIGNvdW50ICovCisJdW5zaWduZWQgaW50IGNvdW50OwkJLyogY291bnQgb2YgR1BSICgxLi4xNikgKi8KKwl1bnNpZ25lZCBzaG9ydCBncHJbMzJdOwkJLyogR1BSIG51bWJlcihzKSAqLworCXVuc2lnbmVkIGludCB2YWx1ZVszMl07CQkvKiBpbml0aWFsIHZhbHVlcyAqLworCXVuc2lnbmVkIGludCBtaW47CQkvKiBtaW5pbXVtIHJhbmdlICovCisJdW5zaWduZWQgaW50IG1heDsJCS8qIG1heGltdW0gcmFuZ2UgKi8KKwl1bnNpZ25lZCBpbnQgdHJhbnNsYXRpb247CS8qIHRyYW5zbGF0aW9uIHR5cGUgKEVNVTEwSzFfR1BSX1RSQU5TTEFUSU9OKikgKi8KKwljb25zdCB1bnNpZ25lZCBpbnQgKnRsdjsKK307CisKKy8qIG9sZCBBQkkgd2l0aG91dCBUTFYgc3VwcG9ydCAqLworc3RydWN0IHNuZF9lbXUxMGsxX2Z4ODAxMF9jb250cm9sX29sZF9ncHIgeworCXN0cnVjdCBzbmRfY3RsX2VsZW1faWQgaWQ7CisJdW5zaWduZWQgaW50IHZjb3VudDsKKwl1bnNpZ25lZCBpbnQgY291bnQ7CisJdW5zaWduZWQgc2hvcnQgZ3ByWzMyXTsKKwl1bnNpZ25lZCBpbnQgdmFsdWVbMzJdOworCXVuc2lnbmVkIGludCBtaW47CisJdW5zaWduZWQgaW50IG1heDsKKwl1bnNpZ25lZCBpbnQgdHJhbnNsYXRpb247Cit9OworCitzdHJ1Y3Qgc25kX2VtdTEwazFfZng4MDEwX2NvZGUgeworCWNoYXIgbmFtZVsxMjhdOworCisJREVDTEFSRV9CSVRNQVAoZ3ByX3ZhbGlkLCAweDIwMCk7IC8qIGJpdG1hc2sgb2YgdmFsaWQgaW5pdGlhbGl6ZXJzICovCisJX191MzIgKmdwcl9tYXA7CQkvKiBpbml0aWFsaXplcnMgKi8KKworCXVuc2lnbmVkIGludCBncHJfYWRkX2NvbnRyb2xfY291bnQ7IC8qIGNvdW50IG9mIEdQUiBjb250cm9scyB0byBhZGQvcmVwbGFjZSAqLworCXN0cnVjdCBzbmRfZW11MTBrMV9meDgwMTBfY29udHJvbF9ncHIgKmdwcl9hZGRfY29udHJvbHM7IC8qIEdQUiBjb250cm9scyB0byBhZGQvcmVwbGFjZSAqLworCisJdW5zaWduZWQgaW50IGdwcl9kZWxfY29udHJvbF9jb3VudDsgLyogY291bnQgb2YgR1BSIGNvbnRyb2xzIHRvIHJlbW92ZSAqLworCXN0cnVjdCBzbmRfY3RsX2VsZW1faWQgKmdwcl9kZWxfY29udHJvbHM7IC8qIElEcyBvZiBHUFIgY29udHJvbHMgdG8gcmVtb3ZlICovCisKKwl1bnNpZ25lZCBpbnQgZ3ByX2xpc3RfY29udHJvbF9jb3VudDsgLyogY291bnQgb2YgR1BSIGNvbnRyb2xzIHRvIGxpc3QgKi8KKwl1bnNpZ25lZCBpbnQgZ3ByX2xpc3RfY29udHJvbF90b3RhbDsgLyogdG90YWwgY291bnQgb2YgR1BSIGNvbnRyb2xzICovCisJc3RydWN0IHNuZF9lbXUxMGsxX2Z4ODAxMF9jb250cm9sX2dwciAqZ3ByX2xpc3RfY29udHJvbHM7IC8qIGxpc3RlZCBHUFIgY29udHJvbHMgKi8KKworCURFQ0xBUkVfQklUTUFQKHRyYW1fdmFsaWQsIDB4MTAwKTsgLyogYml0bWFzayBvZiB2YWxpZCBpbml0aWFsaXplcnMgKi8KKwlfX3UzMiAqdHJhbV9kYXRhX21hcDsJICAvKiBkYXRhIGluaXRpYWxpemVycyAqLworCV9fdTMyICp0cmFtX2FkZHJfbWFwOwkgIC8qIG1hcCBpbml0aWFsaXplcnMgKi8KKworCURFQ0xBUkVfQklUTUFQKGNvZGVfdmFsaWQsIDEwMjQpOyAvKiBiaXRtYXNrIG9mIHZhbGlkIGluc3RydWN0aW9ucyAqLworCV9fdTMyICpjb2RlOwkJICAvKiBvbmUgaW5zdHJ1Y3Rpb24gLSA2NCBiaXRzICovCit9OworCitzdHJ1Y3Qgc25kX2VtdTEwazFfZng4MDEwX3RyYW0geworCXVuc2lnbmVkIGludCBhZGRyZXNzOwkJLyogMzEuYml0ID09IDEgLT4gZXh0ZXJuYWwgVFJBTSAqLworCXVuc2lnbmVkIGludCBzaXplOwkJLyogc2l6ZSBpbiBzYW1wbGVzICg0IGJ5dGVzKSAqLworCXVuc2lnbmVkIGludCAqc2FtcGxlczsJCS8qIHBvaW50ZXIgdG8gc2FtcGxlcyAoMjAtYml0KSAqLworCQkJCQkvKiBOVUxMLT5jbGVhciBtZW1vcnkgKi8KK307CisKK3N0cnVjdCBzbmRfZW11MTBrMV9meDgwMTBfcGNtX3JlYyB7CisJdW5zaWduZWQgaW50IHN1YnN0cmVhbTsJCS8qIHN1YnN0cmVhbSBudW1iZXIgKi8KKwl1bnNpZ25lZCBpbnQgcmVzMTsJCS8qIHJlc2VydmVkICovCisJdW5zaWduZWQgaW50IGNoYW5uZWxzOwkJLyogMTYtYml0IGNoYW5uZWxzIGNvdW50LCB6ZXJvID0gcmVtb3ZlIHRoaXMgc3Vic3RyZWFtICovCisJdW5zaWduZWQgaW50IHRyYW1fc3RhcnQ7CS8qIHJpbmcgYnVmZmVyIHBvc2l0aW9uIGluIFRSQU0gKGluIHNhbXBsZXMpICovCisJdW5zaWduZWQgaW50IGJ1ZmZlcl9zaXplOwkvKiBjb3VudCBvZiBidWZmZXJlZCBzYW1wbGVzICovCisJdW5zaWduZWQgc2hvcnQgZ3ByX3NpemU7CQkvKiBHUFIgY29udGFpbmluZyBzaXplIG9mIHJpbmdidWZmZXIgaW4gc2FtcGxlcyAoaG9zdCkgKi8KKwl1bnNpZ25lZCBzaG9ydCBncHJfcHRyOwkJLyogR1BSIGNvbnRhaW5pbmcgY3VycmVudCBwb2ludGVyIGluIHRoZSByaW5nIGJ1ZmZlciAoaG9zdCA9IHJlc2V0LCBGWDgwMTApICovCisJdW5zaWduZWQgc2hvcnQgZ3ByX2NvdW50OwkvKiBHUFIgY29udGFpbmluZyBjb3VudCBvZiBzYW1wbGVzIGJldHdlZW4gdHdvIGludGVycnVwdHMgKGhvc3QpICovCisJdW5zaWduZWQgc2hvcnQgZ3ByX3RtcGNvdW50OwkvKiBHUFIgY29udGFpbmluZyBjdXJyZW50IGNvdW50IG9mIHNhbXBsZXMgdG8gaW50ZXJydXB0IChob3N0ID0gc2V0LCBGWDgwMTApICovCisJdW5zaWduZWQgc2hvcnQgZ3ByX3RyaWdnZXI7CS8qIEdQUiBjb250YWluaW5nIHRyaWdnZXIgKGFjdGl2YXRlKSBpbmZvcm1hdGlvbiAoaG9zdCkgKi8KKwl1bnNpZ25lZCBzaG9ydCBncHJfcnVubmluZzsJLyogR1BSIGNvbnRhaW5pbmcgaW5mbyBpZiBQQ00gaXMgcnVubmluZyAoRlg4MDEwKSAqLworCXVuc2lnbmVkIGNoYXIgcGFkOwkJLyogcmVzZXJ2ZWQgKi8KKwl1bnNpZ25lZCBjaGFyIGV0cmFtWzMyXTsJLyogZXh0ZXJuYWwgVFJBTSBhZGRyZXNzICYgZGF0YSAob25lIHBlciBjaGFubmVsKSAqLworCXVuc2lnbmVkIGludCByZXMyOwkJLyogcmVzZXJ2ZWQgKi8KK307CisKKyNkZWZpbmUgU05EUlZfRU1VMTBLMV9WRVJTSU9OCQlTTkRSVl9QUk9UT0NPTF9WRVJTSU9OKDEsIDAsIDEpCisKKyNkZWZpbmUgU05EUlZfRU1VMTBLMV9JT0NUTF9JTkZPCV9JT1IgKCdIJywgMHgxMCwgc3RydWN0IHNuZF9lbXUxMGsxX2Z4ODAxMF9pbmZvKQorI2RlZmluZSBTTkRSVl9FTVUxMEsxX0lPQ1RMX0NPREVfUE9LRQlfSU9XICgnSCcsIDB4MTEsIHN0cnVjdCBzbmRfZW11MTBrMV9meDgwMTBfY29kZSkKKyNkZWZpbmUgU05EUlZfRU1VMTBLMV9JT0NUTF9DT0RFX1BFRUsJX0lPV1IoJ0gnLCAweDEyLCBzdHJ1Y3Qgc25kX2VtdTEwazFfZng4MDEwX2NvZGUpCisjZGVmaW5lIFNORFJWX0VNVTEwSzFfSU9DVExfVFJBTV9TRVRVUAlfSU9XICgnSCcsIDB4MjAsIGludCkKKyNkZWZpbmUgU05EUlZfRU1VMTBLMV9JT0NUTF9UUkFNX1BPS0UJX0lPVyAoJ0gnLCAweDIxLCBzdHJ1Y3Qgc25kX2VtdTEwazFfZng4MDEwX3RyYW0pCisjZGVmaW5lIFNORFJWX0VNVTEwSzFfSU9DVExfVFJBTV9QRUVLCV9JT1dSKCdIJywgMHgyMiwgc3RydWN0IHNuZF9lbXUxMGsxX2Z4ODAxMF90cmFtKQorI2RlZmluZSBTTkRSVl9FTVUxMEsxX0lPQ1RMX1BDTV9QT0tFCV9JT1cgKCdIJywgMHgzMCwgc3RydWN0IHNuZF9lbXUxMGsxX2Z4ODAxMF9wY21fcmVjKQorI2RlZmluZSBTTkRSVl9FTVUxMEsxX0lPQ1RMX1BDTV9QRUVLCV9JT1dSKCdIJywgMHgzMSwgc3RydWN0IHNuZF9lbXUxMGsxX2Z4ODAxMF9wY21fcmVjKQorI2RlZmluZSBTTkRSVl9FTVUxMEsxX0lPQ1RMX1BWRVJTSU9OCV9JT1IgKCdIJywgMHg0MCwgaW50KQorI2RlZmluZSBTTkRSVl9FTVUxMEsxX0lPQ1RMX1NUT1AJX0lPICAoJ0gnLCAweDgwKQorI2RlZmluZSBTTkRSVl9FTVUxMEsxX0lPQ1RMX0NPTlRJTlVFCV9JTyAgKCdIJywgMHg4MSkKKyNkZWZpbmUgU05EUlZfRU1VMTBLMV9JT0NUTF9aRVJPX1RSQU1fQ09VTlRFUiBfSU8gKCdIJywgMHg4MikKKyNkZWZpbmUgU05EUlZfRU1VMTBLMV9JT0NUTF9TSU5HTEVfU1RFUAlfSU9XICgnSCcsIDB4ODMsIGludCkKKyNkZWZpbmUgU05EUlZfRU1VMTBLMV9JT0NUTF9EQkdfUkVBRAlfSU9SICgnSCcsIDB4ODQsIGludCkKKworLyogdHlwZWRlZnMgZm9yIGNvbXBhdGliaWxpdHkgdG8gdXNlci1zcGFjZSAqLwordHlwZWRlZiBzdHJ1Y3Qgc25kX2VtdTEwazFfZng4MDEwX2luZm8gZW11MTBrMV9meDgwMTBfaW5mb190OwordHlwZWRlZiBzdHJ1Y3Qgc25kX2VtdTEwazFfZng4MDEwX2NvbnRyb2xfZ3ByIGVtdTEwazFfZng4MDEwX2NvbnRyb2xfZ3ByX3Q7Cit0eXBlZGVmIHN0cnVjdCBzbmRfZW11MTBrMV9meDgwMTBfY29kZSBlbXUxMGsxX2Z4ODAxMF9jb2RlX3Q7Cit0eXBlZGVmIHN0cnVjdCBzbmRfZW11MTBrMV9meDgwMTBfdHJhbSBlbXUxMGsxX2Z4ODAxMF90cmFtX3Q7Cit0eXBlZGVmIHN0cnVjdCBzbmRfZW11MTBrMV9meDgwMTBfcGNtX3JlYyBlbXUxMGsxX2Z4ODAxMF9wY21fdDsKKworI2VuZGlmCS8qIF9fU09VTkRfRU1VMTBLMV9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc291bmQvaGRzcC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3NvdW5kL2hkc3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzZmYTU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3NvdW5kL2hkc3AuaApAQCAtMCwwICsxLDEwOSBAQAorI2lmbmRlZiBfX1NPVU5EX0hEU1BfSAorI2RlZmluZSBfX1NPVU5EX0hEU1BfSAorCisvKgorICogICBDb3B5cmlnaHQgKEMpIDIwMDMgVGhvbWFzIENoYXJib25uZWwgKHRob21hc0B1bmRhdGEub3JnKQorICogICAgCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgSERTUF9NQVRSSVhfTUlYRVJfU0laRSAyMDQ4CisKK2VudW0gSERTUF9JT19UeXBlIHsKKwlEaWdpZmFjZSwKKwlNdWx0aWZhY2UsCisJSDk2NTIsCisJSDk2MzIsCisJVW5kZWZpbmVkLAorfTsKKworc3RydWN0IGhkc3BfcGVha19ybXMgeworCV9fdTMyIGlucHV0X3BlYWtzWzI2XTsKKwlfX3UzMiBwbGF5YmFja19wZWFrc1syNl07CisJX191MzIgb3V0cHV0X3BlYWtzWzI4XTsKKwlfX3U2NCBpbnB1dF9ybXNbMjZdOworCV9fdTY0IHBsYXliYWNrX3Jtc1syNl07CisJLyogVGhlc2UgYXJlIG9ubHkgdXNlZCBmb3IgSDk2eHggY2FyZHMgKi8KKwlfX3U2NCBvdXRwdXRfcm1zWzI2XTsKK307CisKKyNkZWZpbmUgU05EUlZfSERTUF9JT0NUTF9HRVRfUEVBS19STVMgX0lPUignSCcsIDB4NDAsIHN0cnVjdCBoZHNwX3BlYWtfcm1zKQorCitzdHJ1Y3QgaGRzcF9jb25maWdfaW5mbyB7CisJdW5zaWduZWQgY2hhciBwcmVmX3N5bmNfcmVmOworCXVuc2lnbmVkIGNoYXIgd29yZGNsb2NrX3N5bmNfY2hlY2s7CisJdW5zaWduZWQgY2hhciBzcGRpZl9zeW5jX2NoZWNrOworCXVuc2lnbmVkIGNoYXIgYWRhdHN5bmNfc3luY19jaGVjazsKKwl1bnNpZ25lZCBjaGFyIGFkYXRfc3luY19jaGVja1szXTsKKwl1bnNpZ25lZCBjaGFyIHNwZGlmX2luOworCXVuc2lnbmVkIGNoYXIgc3BkaWZfb3V0OworCXVuc2lnbmVkIGNoYXIgc3BkaWZfcHJvZmVzc2lvbmFsOworCXVuc2lnbmVkIGNoYXIgc3BkaWZfZW1waGFzaXM7CisJdW5zaWduZWQgY2hhciBzcGRpZl9ub25hdWRpbzsKKwl1bnNpZ25lZCBpbnQgc3BkaWZfc2FtcGxlX3JhdGU7CisJdW5zaWduZWQgaW50IHN5c3RlbV9zYW1wbGVfcmF0ZTsKKwl1bnNpZ25lZCBpbnQgYXV0b3N5bmNfc2FtcGxlX3JhdGU7CisJdW5zaWduZWQgY2hhciBzeXN0ZW1fY2xvY2tfbW9kZTsKKwl1bnNpZ25lZCBjaGFyIGNsb2NrX3NvdXJjZTsKKwl1bnNpZ25lZCBjaGFyIGF1dG9zeW5jX3JlZjsKKwl1bnNpZ25lZCBjaGFyIGxpbmVfb3V0OworCXVuc2lnbmVkIGNoYXIgcGFzc3RocnU7IAorCXVuc2lnbmVkIGNoYXIgZGFfZ2FpbjsKKwl1bnNpZ25lZCBjaGFyIGFkX2dhaW47CisJdW5zaWduZWQgY2hhciBwaG9uZV9nYWluOworCXVuc2lnbmVkIGNoYXIgeGxyX2JyZWFrb3V0X2NhYmxlOworCXVuc2lnbmVkIGNoYXIgYW5hbG9nX2V4dGVuc2lvbl9ib2FyZDsKK307CisKKyNkZWZpbmUgU05EUlZfSERTUF9JT0NUTF9HRVRfQ09ORklHX0lORk8gX0lPUignSCcsIDB4NDEsIHN0cnVjdCBoZHNwX2NvbmZpZ19pbmZvKQorCitzdHJ1Y3QgaGRzcF9maXJtd2FyZSB7CisJdm9pZCAqZmlybXdhcmVfZGF0YTsJLyogMjQ0MTMgeCA0IGJ5dGVzICovCit9OworCisjZGVmaW5lIFNORFJWX0hEU1BfSU9DVExfVVBMT0FEX0ZJUk1XQVJFIF9JT1coJ0gnLCAweDQyLCBzdHJ1Y3QgaGRzcF9maXJtd2FyZSkKKworc3RydWN0IGhkc3BfdmVyc2lvbiB7CisJZW51bSBIRFNQX0lPX1R5cGUgaW9fdHlwZTsKKwl1bnNpZ25lZCBzaG9ydCBmaXJtd2FyZV9yZXY7Cit9OworCisjZGVmaW5lIFNORFJWX0hEU1BfSU9DVExfR0VUX1ZFUlNJT04gX0lPUignSCcsIDB4NDMsIHN0cnVjdCBoZHNwX3ZlcnNpb24pCisKK3N0cnVjdCBoZHNwX21peGVyIHsKKwl1bnNpZ25lZCBzaG9ydCBtYXRyaXhbSERTUF9NQVRSSVhfTUlYRVJfU0laRV07Cit9OworCisjZGVmaW5lIFNORFJWX0hEU1BfSU9DVExfR0VUX01JWEVSIF9JT1IoJ0gnLCAweDQ0LCBzdHJ1Y3QgaGRzcF9taXhlcikKKworc3RydWN0IGhkc3BfOTYzMl9hZWIgeworCWludCBhZWJpOworCWludCBhZWJvOworfTsKKworI2RlZmluZSBTTkRSVl9IRFNQX0lPQ1RMX0dFVF85NjMyX0FFQiBfSU9SKCdIJywgMHg0NSwgc3RydWN0IGhkc3BfOTYzMl9hZWIpCisKKy8qIHR5cGVkZWZzIGZvciBjb21wYXRpYmlsaXR5IHRvIHVzZXItc3BhY2UgKi8KK3R5cGVkZWYgZW51bSBIRFNQX0lPX1R5cGUgSERTUF9JT19UeXBlOwordHlwZWRlZiBzdHJ1Y3QgaGRzcF9wZWFrX3JtcyBoZHNwX3BlYWtfcm1zX3Q7Cit0eXBlZGVmIHN0cnVjdCBoZHNwX2NvbmZpZ19pbmZvIGhkc3BfY29uZmlnX2luZm9fdDsKK3R5cGVkZWYgc3RydWN0IGhkc3BfZmlybXdhcmUgaGRzcF9maXJtd2FyZV90OwordHlwZWRlZiBzdHJ1Y3QgaGRzcF92ZXJzaW9uIGhkc3BfdmVyc2lvbl90OwordHlwZWRlZiBzdHJ1Y3QgaGRzcF9taXhlciBoZHNwX21peGVyX3Q7Cit0eXBlZGVmIHN0cnVjdCBoZHNwXzk2MzJfYWViIGhkc3BfOTYzMl9hZWJfdDsKKworI2VuZGlmIC8qIF9fU09VTkRfSERTUF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc291bmQvaGRzcG0uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zb3VuZC9oZHNwbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxOTkwYjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc291bmQvaGRzcG0uaApAQCAtMCwwICsxLDEzNCBAQAorI2lmbmRlZiBfX1NPVU5EX0hEU1BNX0gKKyNkZWZpbmUgX19TT1VORF9IRFNQTV9ICisvKgorICogICBDb3B5cmlnaHQgKEMpIDIwMDMgV2luZnJpZWQgUml0c2NoIChJRU0pCisgKiAgIGJhc2VkIG9uIGhkc3AuaCBmcm9tIFRob21hcyBDaGFyYm9ubmVsICh0aG9tYXNAdW5kYXRhLm9yZykKKyAqICAgICAgICAgICAgICAgICAgICAgIAorICogICAgCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyogTWF4aW11bSBjaGFubmVscyBpcyA2NCBldmVuIG9uIDU2TW9kZSB5b3UgaGF2ZSA2NHBsYXliYWNrcyB0byBtYXRyaXggKi8KKyNkZWZpbmUgSERTUE1fTUFYX0NIQU5ORUxTICAgICAgNjQKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gSU9DVEwgUGVhay9STVMgTWV0ZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIHBlYW0gcm1zIGxldmVsIHN0cnVjdHVyZSBsaWtlIHdlIGdldCBmcm9tIGhhcmR3YXJlIAorICAKKyAgIG1heWJlIGluIGZ1dHVyZSB3ZSBjYW4gbWVtb3J5IG1hcCBpdCBzbyBJIGp1c3QgY29weSBpdAorICAgdG8gdXNlciBvbiBpb2N0bCBjYWxsIG5vdyBhbiBkb250IGNoYW5nZSBhbnl0aGluZworICAgcm1zIGFyZSBtYWRlIG91dCBvZiBsb3cgYW5kIGhpZ2ggdmFsdWVzCisgICB3aGVyZSAobG9uZykgPz8/P19ybXMgPSAoPz8/P19ybXNfbCA+PiA4KSArICgoPz8/P19ybXNfaCAmIDB4RkZGRkZGMDApPDwyNCkKKyAgIChpIGFzdW1lIHNvIGZyb20gdGhlIGNvZGUpCisqLworCitzdHJ1Y3QgaGRzcG1fcGVha19ybXMgeworCisJdW5zaWduZWQgaW50IGxldmVsX29mZnNldFsxMDI0XTsKKworCXVuc2lnbmVkIGludCBpbnB1dF9wZWFrWzY0XTsKKwl1bnNpZ25lZCBpbnQgcGxheWJhY2tfcGVha1s2NF07CisJdW5zaWduZWQgaW50IG91dHB1dF9wZWFrWzY0XTsKKwl1bnNpZ25lZCBpbnQgeHh4X3BlYWtbNjRdOwkvKiBub3QgdXNlZCAqLworCisJdW5zaWduZWQgaW50IHJlc2VydmVkWzI1Nl07CS8qIG5vdCB1c2VkICovCisKKwl1bnNpZ25lZCBpbnQgaW5wdXRfcm1zX2xbNjRdOworCXVuc2lnbmVkIGludCBwbGF5YmFja19ybXNfbFs2NF07CisJdW5zaWduZWQgaW50IG91dHB1dF9ybXNfbFs2NF07CisJdW5zaWduZWQgaW50IHh4eF9ybXNfbFs2NF07CS8qIG5vdCB1c2VkICovCisKKwl1bnNpZ25lZCBpbnQgaW5wdXRfcm1zX2hbNjRdOworCXVuc2lnbmVkIGludCBwbGF5YmFja19ybXNfaFs2NF07CisJdW5zaWduZWQgaW50IG91dHB1dF9ybXNfaFs2NF07CisJdW5zaWduZWQgaW50IHh4eF9ybXNfaFs2NF07CS8qIG5vdCB1c2VkICovCit9OworCitzdHJ1Y3QgaGRzcG1fcGVha19ybXNfaW9jdGwgeworCXN0cnVjdCBoZHNwbV9wZWFrX3JtcyAqcGVhazsKK307CisKKy8qIHVzZSBpbmRpcmVjdCBhY2Nlc3MgZHVlIHRvIHRoZSBsaW1pdCBvZiBpb2N0bCBiaXQgc2l6ZSAqLworI2RlZmluZSBTTkRSVl9IRFNQTV9JT0NUTF9HRVRfUEVBS19STVMgXAorCV9JT1IoJ0gnLCAweDQwLCBzdHJ1Y3QgaGRzcG1fcGVha19ybXNfaW9jdGwpCisKKy8qIC0tLS0tLS0tLS0tLSBDT05GSUcgYmxvY2sgSU9DVEwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdHJ1Y3QgaGRzcG1fY29uZmlnX2luZm8geworCXVuc2lnbmVkIGNoYXIgcHJlZl9zeW5jX3JlZjsKKwl1bnNpZ25lZCBjaGFyIHdvcmRjbG9ja19zeW5jX2NoZWNrOworCXVuc2lnbmVkIGNoYXIgbWFkaV9zeW5jX2NoZWNrOworCXVuc2lnbmVkIGludCBzeXN0ZW1fc2FtcGxlX3JhdGU7CisJdW5zaWduZWQgaW50IGF1dG9zeW5jX3NhbXBsZV9yYXRlOworCXVuc2lnbmVkIGNoYXIgc3lzdGVtX2Nsb2NrX21vZGU7CisJdW5zaWduZWQgY2hhciBjbG9ja19zb3VyY2U7CisJdW5zaWduZWQgY2hhciBhdXRvc3luY19yZWY7CisJdW5zaWduZWQgY2hhciBsaW5lX291dDsKKwl1bnNpZ25lZCBpbnQgcGFzc3RocnU7CisJdW5zaWduZWQgaW50IGFuYWxvZ19vdXQ7Cit9OworCisjZGVmaW5lIFNORFJWX0hEU1BNX0lPQ1RMX0dFVF9DT05GSUdfSU5GTyBcCisJX0lPUignSCcsIDB4NDEsIHN0cnVjdCBoZHNwbV9jb25maWdfaW5mbykKKworCisvKiBnZXQgU291bmRjYXJkIFZlcnNpb24gKi8KKworc3RydWN0IGhkc3BtX3ZlcnNpb24geworCXVuc2lnbmVkIHNob3J0IGZpcm13YXJlX3JldjsKK307CisKKyNkZWZpbmUgU05EUlZfSERTUE1fSU9DVExfR0VUX1ZFUlNJT04gX0lPUignSCcsIDB4NDMsIHN0cnVjdCBoZHNwbV92ZXJzaW9uKQorCisKKy8qIC0tLS0tLS0tLS0tLS0gZ2V0IE1hdHJpeCBNaXhlciBJT0NUTCAtLS0tLS0tLS0tLS0tLS0gKi8KKworLyogTUFESSBtaXhlcjogNjRpbnB1dHMrNjRwbGF5YmFjayBpbiA2NG91dHB1dHMgPSA4MTkyID0+ICo0Qnl0ZSA9CisgKiAzMjc2OCBCeXRlcworICovCisKKy8qIG9yZ2FuaXNhdGlvbiBpcyA2NCBjaGFubmVsZmFkZXIgaW4gYSBjb250aW5vdXMgbWVtb3J5IGJsb2NrICovCisvKiBlcXVpdmFsZW50IHRvIGhhcmR3YXJlIGRlZmluaXRpb24sIG1heWJlIGZvciBmdXR1cmUgZmVhdHVyZSBvZiBtbWFwIG9mCisgKiB0aGVtCisgKi8KKy8qIGVhY2ggb2YgNjQgb3V0cHV0cyBoYXMgNjQgaW5mYWRlciBhbmQgNjQgb3V0ZmFkZXI6IAorICAgSW5zIHRvIE91dHMgbWl4ZXJbb3V0XS5pbltpbl0sIE91dHN0cmVhbXMgdG8gT3V0cyBtaXhlcltvdXRdLnBiW3BiXSAqLworCisjZGVmaW5lIEhEU1BNX01JWEVSX0NIQU5ORUxTIEhEU1BNX01BWF9DSEFOTkVMUworCitzdHJ1Y3QgaGRzcG1fY2hhbm5lbGZhZGVyIHsKKwl1bnNpZ25lZCBpbnQgaW5bSERTUE1fTUlYRVJfQ0hBTk5FTFNdOworCXVuc2lnbmVkIGludCBwYltIRFNQTV9NSVhFUl9DSEFOTkVMU107Cit9OworCitzdHJ1Y3QgaGRzcG1fbWl4ZXIgeworCXN0cnVjdCBoZHNwbV9jaGFubmVsZmFkZXIgY2hbSERTUE1fTUlYRVJfQ0hBTk5FTFNdOworfTsKKworc3RydWN0IGhkc3BtX21peGVyX2lvY3RsIHsKKwlzdHJ1Y3QgaGRzcG1fbWl4ZXIgKm1peGVyOworfTsKKworLyogdXNlIGluZGlyZWN0IGFjY2VzcyBkdWUgdG8gdGhlIGxpbWl0IG9mIGlvY3RsIGJpdCBzaXplICovCisjZGVmaW5lIFNORFJWX0hEU1BNX0lPQ1RMX0dFVF9NSVhFUiBfSU9SKCdIJywgMHg0NCwgc3RydWN0IGhkc3BtX21peGVyX2lvY3RsKQorCisvKiB0eXBlZGVmcyBmb3IgY29tcGF0aWJpbGl0eSB0byB1c2VyLXNwYWNlICovCit0eXBlZGVmIHN0cnVjdCBoZHNwbV9wZWFrX3JtcyBoZHNwbV9wZWFrX3Jtc190OwordHlwZWRlZiBzdHJ1Y3QgaGRzcG1fY29uZmlnX2luZm8gaGRzcG1fY29uZmlnX2luZm9fdDsKK3R5cGVkZWYgc3RydWN0IGhkc3BtX3ZlcnNpb24gaGRzcG1fdmVyc2lvbl90OwordHlwZWRlZiBzdHJ1Y3QgaGRzcG1fY2hhbm5lbGZhZGVyIHNuZF9oZHNwbV9jaGFubmVsZmFkZXJfdDsKK3R5cGVkZWYgc3RydWN0IGhkc3BtX21peGVyIGhkc3BtX21peGVyX3Q7CisKKyNlbmRpZgkJCQkvKiBfX1NPVU5EX0hEU1BNX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zb3VuZC9zYjE2X2NzcC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3NvdW5kL3NiMTZfY3NwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBhMzUxZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zb3VuZC9zYjE2X2NzcC5oCkBAIC0wLDAgKzEsMTE1IEBACisjaWZuZGVmIF9fU09VTkRfU0IxNl9DU1BfSAorI2RlZmluZSBfX1NPVU5EX1NCMTZfQ1NQX0gKKworLyoKKyAqICBDb3B5cmlnaHQgKGMpIDE5OTkgYnkgVXJvcyBCaXpqYWsgPHVyb3NAa3NzLWxva2Euc2k+CisgKiAgICAgICAgICAgICAgICAgICAgICAgIFRha2FzaGkgSXdhaSA8dGl3YWlAc3VzZS5kZT4KKyAqCisgKiAgU0IxNkFTUC9BV0UzMiBDU1AgY29udHJvbAorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgCisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKy8qIENTUCBtb2RlcyAqLworI2RlZmluZSBTTkRSVl9TQl9DU1BfTU9ERV9OT05FCQkweDAwCisjZGVmaW5lIFNORFJWX1NCX0NTUF9NT0RFX0RTUF9SRUFECTB4MDEJLyogUmVjb3JkIGZyb20gRFNQICovCisjZGVmaW5lIFNORFJWX1NCX0NTUF9NT0RFX0RTUF9XUklURQkweDAyCS8qIFBsYXkgdG8gRFNQICovCisjZGVmaW5lIFNORFJWX1NCX0NTUF9NT0RFX1FTT1VORAkJMHgwNAkvKiBRU291bmQgKi8KKworLyogQ1NQIGxvYWQgZmxhZ3MgKi8KKyNkZWZpbmUgU05EUlZfU0JfQ1NQX0xPQURfRlJPTVVTRVIJMHgwMQorI2RlZmluZSBTTkRSVl9TQl9DU1BfTE9BRF9JTklUQkxPQ0sJMHgwMgorCisvKiBDU1Agc2FtcGxlIHdpZHRoICovCisjZGVmaW5lIFNORFJWX1NCX0NTUF9TQU1QTEVfOEJJVAkJMHgwMQorI2RlZmluZSBTTkRSVl9TQl9DU1BfU0FNUExFXzE2QklUCQkweDAyCisKKy8qIENTUCBjaGFubmVscyAqLworI2RlZmluZSBTTkRSVl9TQl9DU1BfTU9OTwkJCTB4MDEKKyNkZWZpbmUgU05EUlZfU0JfQ1NQX1NURVJFTwkJMHgwMgorCisvKiBDU1AgcmF0ZXMgKi8KKyNkZWZpbmUgU05EUlZfU0JfQ1NQX1JBVEVfODAwMAkJMHgwMQorI2RlZmluZSBTTkRSVl9TQl9DU1BfUkFURV8xMTAyNQkJMHgwMgorI2RlZmluZSBTTkRSVl9TQl9DU1BfUkFURV8yMjA1MAkJMHgwNAorI2RlZmluZSBTTkRSVl9TQl9DU1BfUkFURV80NDEwMAkJMHgwOAorI2RlZmluZSBTTkRSVl9TQl9DU1BfUkFURV9BTEwJCTB4MGYKKworLyogQ1NQIHJ1bm5pbmcgc3RhdGUgKi8KKyNkZWZpbmUgU05EUlZfU0JfQ1NQX1NUX0lETEUJCTB4MDAKKyNkZWZpbmUgU05EUlZfU0JfQ1NQX1NUX0xPQURFRAkJMHgwMQorI2RlZmluZSBTTkRSVl9TQl9DU1BfU1RfUlVOTklORwkJMHgwMgorI2RlZmluZSBTTkRSVl9TQl9DU1BfU1RfUEFVU0VECQkweDA0CisjZGVmaW5lIFNORFJWX1NCX0NTUF9TVF9BVVRPCQkweDA4CisjZGVmaW5lIFNORFJWX1NCX0NTUF9TVF9RU09VTkQJCTB4MTAKKworLyogbWF4aW11bSBRU291bmQgdmFsdWUgKDE4MCBkZWdyZWVzIHJpZ2h0KSAqLworI2RlZmluZSBTTkRSVl9TQl9DU1BfUVNPVU5EX01BWF9SSUdIVAkweDIwCisKKy8qIG1heGltdW0gbWljcm9jb2RlIFJJRkYgZmlsZSBzaXplICovCisjZGVmaW5lIFNORFJWX1NCX0NTUF9NQVhfTUlDUk9DT0RFX0ZJTEVfU0laRQkweDMwMDAKKworLyogbWljcm9jb2RlIGhlYWRlciAqLworc3RydWN0IHNuZF9zYl9jc3BfbWNfaGVhZGVyIHsKKwljaGFyIGNvZGVjX25hbWVbMTZdOwkJLyogaWQgbmFtZSBvZiBjb2RlYyAqLworCXVuc2lnbmVkIHNob3J0IGZ1bmNfcmVxOwkvKiByZXF1ZXN0ZWQgZnVuY3Rpb24gKi8KK307CisKKy8qIG1pY3JvY29kZSB0byBiZSBsb2FkZWQgKi8KK3N0cnVjdCBzbmRfc2JfY3NwX21pY3JvY29kZSB7CisJc3RydWN0IHNuZF9zYl9jc3BfbWNfaGVhZGVyIGluZm87CisJdW5zaWduZWQgY2hhciBkYXRhW1NORFJWX1NCX0NTUF9NQVhfTUlDUk9DT0RFX0ZJTEVfU0laRV07Cit9OworCisvKiBzdGFydCBDU1Agd2l0aCBzYW1wbGVfd2lkdGggaW4gbW9uby9zdGVyZW8gKi8KK3N0cnVjdCBzbmRfc2JfY3NwX3N0YXJ0IHsKKwlpbnQgc2FtcGxlX3dpZHRoOwkvKiBzYW1wbGUgd2lkdGgsIGxvb2sgYWJvdmUgKi8KKwlpbnQgY2hhbm5lbHM7CQkvKiBjaGFubmVscywgbG9vayBhYm92ZSAqLworfTsKKworLyogQ1NQIGluZm9ybWF0aW9uICovCitzdHJ1Y3Qgc25kX3NiX2NzcF9pbmZvIHsKKwljaGFyIGNvZGVjX25hbWVbMTZdOwkJLyogaWQgbmFtZSBvZiBjb2RlYyAqLworCXVuc2lnbmVkIHNob3J0IGZ1bmNfbnI7CQkvKiBmdW5jdGlvbiBudW1iZXIgKi8KKwl1bnNpZ25lZCBpbnQgYWNjX2Zvcm1hdDsJLyogYWNjZXB0ZWQgUENNIGZvcm1hdHMgKi8KKwl1bnNpZ25lZCBzaG9ydCBhY2NfY2hhbm5lbHM7CS8qIGFjY2VwdGVkIGNoYW5uZWxzICovCisJdW5zaWduZWQgc2hvcnQgYWNjX3dpZHRoOwkvKiBhY2NlcHRlZCBzYW1wbGUgd2lkdGggKi8KKwl1bnNpZ25lZCBzaG9ydCBhY2NfcmF0ZXM7CS8qIGFjY2VwdGVkIHNhbXBsZSByYXRlcyAqLworCXVuc2lnbmVkIHNob3J0IGNzcF9tb2RlOwkvKiBDU1AgbW9kZSwgc2VlIGFib3ZlICovCisJdW5zaWduZWQgc2hvcnQgcnVuX2NoYW5uZWxzOwkvKiBjdXJyZW50IGNoYW5uZWxzICAqLworCXVuc2lnbmVkIHNob3J0IHJ1bl93aWR0aDsJLyogY3VycmVudCBzYW1wbGUgd2lkdGggKi8KKwl1bnNpZ25lZCBzaG9ydCB2ZXJzaW9uOwkJLyogdmVyc2lvbiBpZDogMHgxMCAtIDB4MWYgKi8KKwl1bnNpZ25lZCBzaG9ydCBzdGF0ZTsJCS8qIHN0YXRlIGJpdHMgKi8KK307CisKKy8qIEhXREVQIGNvbnRyb2xzICovCisvKiBnZXQgQ1NQIGluZm9ybWF0aW9uICovCisjZGVmaW5lIFNORFJWX1NCX0NTUF9JT0NUTF9JTkZPCQlfSU9SKCdIJywgMHgxMCwgc3RydWN0IHNuZF9zYl9jc3BfaW5mbykKKy8qIGxvYWQgbWljcm9jb2RlIHRvIENTUCAqLworI2RlZmluZSBTTkRSVl9TQl9DU1BfSU9DVExfTE9BRF9DT0RFCV9JT1coJ0gnLCAweDExLCBzdHJ1Y3Qgc25kX3NiX2NzcF9taWNyb2NvZGUpCisvKiB1bmxvYWQgbWljcm9jb2RlIGZyb20gQ1NQICovCisjZGVmaW5lIFNORFJWX1NCX0NTUF9JT0NUTF9VTkxPQURfQ09ERQlfSU8oJ0gnLCAweDEyKQorLyogc3RhcnQgQ1NQICovCisjZGVmaW5lIFNORFJWX1NCX0NTUF9JT0NUTF9TVEFSVAkJX0lPVygnSCcsIDB4MTMsIHN0cnVjdCBzbmRfc2JfY3NwX3N0YXJ0KQorLyogc3RvcCBDU1AgKi8KKyNkZWZpbmUgU05EUlZfU0JfQ1NQX0lPQ1RMX1NUT1AJCV9JTygnSCcsIDB4MTQpCisvKiBwYXVzZSBDU1AgYW5kIERNQSB0cmFuc2ZlciAqLworI2RlZmluZSBTTkRSVl9TQl9DU1BfSU9DVExfUEFVU0UJCV9JTygnSCcsIDB4MTUpCisvKiByZXN0YXJ0IENTUCBhbmQgRE1BIHRyYW5zZmVyICovCisjZGVmaW5lIFNORFJWX1NCX0NTUF9JT0NUTF9SRVNUQVJUCV9JTygnSCcsIDB4MTYpCisKKworI2VuZGlmIC8qIF9fU09VTkRfU0IxNl9DU1AgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zb3VuZC9zZm50X2luZm8uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zb3VuZC9zZm50X2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmNlN2ZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3NvdW5kL3NmbnRfaW5mby5oCkBAIC0wLDAgKzEsMjEyIEBACisjaWZuZGVmIF9fU09VTkRfU0ZOVF9JTkZPX0gKKyNkZWZpbmUgX19TT1VORF9TRk5UX0lORk9fSAorCisvKgorICogIFBhdGNoIHJlY29yZCBjb21wYXRpYmxlIHdpdGggQVdFIGRyaXZlciBvbiBPU1MKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgVGFrYXNoaSBJd2FpCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8c291bmQvYXNvdW5kLmg+CisKKy8qCisgKiBwYXRjaCBpbmZvcm1hdGlvbiByZWNvcmQKKyAqLworCisjaWZkZWYgU05EUlZfQklHX0VORElBTgorI2RlZmluZSBTTkRSVl9PU1NfUEFUQ0hLRVkoaWQpICgweGZkMDB8aWQpCisjZWxzZQorI2RlZmluZSBTTkRSVl9PU1NfUEFUQ0hLRVkoaWQpICgoaWQ8PDgpfDB4ZmQpCisjZW5kaWYKKworLyogcGF0Y2ggaW50ZXJmYWNlIGhlYWRlcjogMTYgYnl0ZXMgKi8KK3N0cnVjdCBzb3VuZGZvbnRfcGF0Y2hfaW5mbyB7CisJdW5zaWduZWQgc2hvcnQga2V5OwkJLyogdXNlIHRoZSBrZXkgYmVsb3cgKi8KKyNkZWZpbmUgU05EUlZfT1NTX1NPVU5ERk9OVF9QQVRDSAkJU05EUlZfT1NTX1BBVENIS0VZKDB4MDcpCisKKwlzaG9ydCBkZXZpY2Vfbm87CQkvKiBzeW50aGVzaXplciBudW1iZXIgKi8KKwl1bnNpZ25lZCBzaG9ydCBzZl9pZDsJCS8qIGZpbGUgaWQgKHNob3VsZCBiZSB6ZXJvKSAqLworCXNob3J0IG9wdGFyZzsJCQkvKiBvcHRpb25hbCBhcmd1bWVudCAqLworCWludCBsZW47CQkJLyogZGF0YSBsZW5ndGggKHdpdGhvdXQgdGhpcyBoZWFkZXIpICovCisKKwlzaG9ydCB0eXBlOwkJCS8qIHBhdGNoIG9wZXJhdGlvbiB0eXBlICovCisjZGVmaW5lIFNORFJWX1NGTlRfTE9BRF9JTkZPCQkwCS8qIGF3ZV92b2ljZV9yZWMgKi8KKyNkZWZpbmUgU05EUlZfU0ZOVF9MT0FEX0RBVEEJCTEJLyogYXdlX3NhbXBsZV9pbmZvICovCisjZGVmaW5lIFNORFJWX1NGTlRfT1BFTl9QQVRDSAkyCS8qIGF3ZV9vcGVuX3Bhcm0gKi8KKyNkZWZpbmUgU05EUlZfU0ZOVF9DTE9TRV9QQVRDSAkzCS8qIG5vbmUgKi8KKwkvKiA0IGlzIG9ic29sZXRlICovCisjZGVmaW5lIFNORFJWX1NGTlRfUkVQTEFDRV9EQVRBCTUJLyogYXdlX3NhbXBsZV9pbmZvIChvcHRhcmc9I2NoYW5uZWxzKSovCisjZGVmaW5lIFNORFJWX1NGTlRfTUFQX1BSRVNFVAk2CS8qIGF3ZV92b2ljZV9tYXAgKi8KKwkvKiA3IGlzIG5vdCB1c2VkICovCisjZGVmaW5lIFNORFJWX1NGTlRfUFJPQkVfREFUQQkJOAkvKiBvcHRhcmc9c2FtcGxlICovCisjZGVmaW5lIFNORFJWX1NGTlRfUkVNT1ZFX0lORk8JCTkJLyogb3B0YXJnPShiYW5rPDw4KXxpbnN0ciAqLworCisJc2hvcnQgcmVzZXJ2ZWQ7CQkJLyogd29yZCBhbGlnbm1lbnQgZGF0YSAqLworCisJLyogdGhlIGFjdHVhbCBwYXRjaCBkYXRhIGJlZ2lucyBhZnRlciB0aGlzICovCit9OworCisKKy8qCisgKiBvcGVuIHBhdGNoCisgKi8KKworI2RlZmluZSBTTkRSVl9TRk5UX1BBVENIX05BTUVfTEVOCTMyCisKK3N0cnVjdCBzb3VuZGZvbnRfb3Blbl9wYXJtIHsKKwl1bnNpZ25lZCBzaG9ydCB0eXBlOwkJLyogc2FtcGxlIHR5cGUgKi8KKyNkZWZpbmUgU05EUlZfU0ZOVF9QQVRfVFlQRV9NSVNDCTAKKyNkZWZpbmUgU05EUlZfU0ZOVF9QQVRfVFlQRV9HVVMJNgorI2RlZmluZSBTTkRSVl9TRk5UX1BBVF9UWVBFX01BUAk3CisjZGVmaW5lIFNORFJWX1NGTlRfUEFUX0xPQ0tFRAkweDEwMAkvKiBsb2NrIHRoZSBzYW1wbGVzICovCisjZGVmaW5lIFNORFJWX1NGTlRfUEFUX1NIQVJFRAkweDIwMAkvKiBzYW1wbGUgaXMgc2hhcmVkICovCisKKwlzaG9ydCByZXNlcnZlZDsKKwljaGFyIG5hbWVbU05EUlZfU0ZOVF9QQVRDSF9OQU1FX0xFTl07Cit9OworCisKKy8qCisgKiByYXcgdm9pY2UgaW5mb3JtYXRpb24gcmVjb3JkCisgKi8KKworLyogd2F2ZSB0YWJsZSBlbnZlbG9wZSAmIGVmZmVjdCBwYXJhbWV0ZXJzIHRvIGNvbnRyb2wgRU1VODAwMCAqLworc3RydWN0IHNvdW5kZm9udF92b2ljZV9wYXJtIHsKKwl1bnNpZ25lZCBzaG9ydCBtb2RkZWxheTsJLyogbW9kdWxhdGlvbiBkZWxheSAoMHg4MDAwKSAqLworCXVuc2lnbmVkIHNob3J0IG1vZGF0a2hsZDsJLyogbW9kdWxhdGlvbiBhdHRhY2sgJiBob2xkIHRpbWUgKDB4N2Y3ZikgKi8KKwl1bnNpZ25lZCBzaG9ydCBtb2RkY3lzdXM7CS8qIG1vZHVsYXRpb24gZGVjYXkgJiBzdXN0YWluICgweDdmN2YpICovCisJdW5zaWduZWQgc2hvcnQgbW9kcmVsZWFzZTsJLyogbW9kdWxhdGlvbiByZWxlYXNlIHRpbWUgKDB4ODA3ZikgKi8KKwlzaG9ydCBtb2RrZXlob2xkLCBtb2RrZXlkZWNheTsJLyogZW52ZWxvcGUgY2hhbmdlIHBlciBrZXkgKG5vdCB1c2VkKSAqLworCXVuc2lnbmVkIHNob3J0IHZvbGRlbGF5OwkvKiB2b2x1bWUgZGVsYXkgKDB4ODAwMCkgKi8KKwl1bnNpZ25lZCBzaG9ydCB2b2xhdGtobGQ7CS8qIHZvbHVtZSBhdHRhY2sgJiBob2xkIHRpbWUgKDB4N2Y3ZikgKi8KKwl1bnNpZ25lZCBzaG9ydCB2b2xkY3lzdXM7CS8qIHZvbHVtZSBkZWNheSAmIHN1c3RhaW4gKDB4N2Y3ZikgKi8KKwl1bnNpZ25lZCBzaG9ydCB2b2xyZWxlYXNlOwkvKiB2b2x1bWUgcmVsZWFzZSB0aW1lICgweDgwN2YpICovCisJc2hvcnQgdm9sa2V5aG9sZCwgdm9sa2V5ZGVjYXk7CS8qIGVudmVsb3BlIGNoYW5nZSBwZXIga2V5IChub3QgdXNlZCkgKi8KKwl1bnNpZ25lZCBzaG9ydCBsZm8xZGVsYXk7CS8qIExGTzEgZGVsYXkgKDB4ODAwMCkgKi8KKwl1bnNpZ25lZCBzaG9ydCBsZm8yZGVsYXk7CS8qIExGTzIgZGVsYXkgKDB4ODAwMCkgKi8KKwl1bnNpZ25lZCBzaG9ydCBwZWZlOwkJLyogbW9kdWxhdGlvbiBwaXRjaCAmIGN1dG9mZiAoMHgwMDAwKSAqLworCXVuc2lnbmVkIHNob3J0IGZtbW9kOwkJLyogTEZPMSBwaXRjaCAmIGN1dG9mZiAoMHgwMDAwKSAqLworCXVuc2lnbmVkIHNob3J0IHRyZW1mcnE7CQkvKiBMRk8xIHZvbHVtZSAmIGZyZXEgKDB4MDAwMCkgKi8KKwl1bnNpZ25lZCBzaG9ydCBmbTJmcnEyOwkJLyogTEZPMiBwaXRjaCAmIGZyZXEgKDB4MDAwMCkgKi8KKwl1bnNpZ25lZCBjaGFyIGN1dG9mZjsJCS8qIGluaXRpYWwgY3V0b2ZmICgweGZmKSAqLworCXVuc2lnbmVkIGNoYXIgZmlsdGVyUTsJCS8qIGluaXRpYWwgZmlsdGVyIFEgWzAtMTVdICgweDApICovCisJdW5zaWduZWQgY2hhciBjaG9ydXM7CQkvKiBjaG9ydXMgc2VuZCAoMHgwMCkgKi8KKwl1bnNpZ25lZCBjaGFyIHJldmVyYjsJCS8qIHJldmVyYiBzZW5kICgweDAwKSAqLworCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkWzRdOwkvKiBub3QgdXNlZCAqLworfTsKKworCisvKiB3YXZlIHRhYmxlIHBhcmFtZXRlcnM6IDkyIGJ5dGVzICovCitzdHJ1Y3Qgc291bmRmb250X3ZvaWNlX2luZm8geworCXVuc2lnbmVkIHNob3J0IHNmX2lkOwkJLyogZmlsZSBpZCAoc2hvdWxkIGJlIHplcm8pICovCisJdW5zaWduZWQgc2hvcnQgc2FtcGxlOwkJLyogc2FtcGxlIGlkICovCisJaW50IHN0YXJ0LCBlbmQ7CQkJLyogc2FtcGxlIG9mZnNldCBjb3JyZWN0aW9uICovCisJaW50IGxvb3BzdGFydCwgbG9vcGVuZDsJCS8qIGxvb3Agb2Zmc2V0IGNvcnJlY3Rpb24gKi8KKwlzaG9ydCByYXRlX29mZnNldDsJCS8qIHNhbXBsZSByYXRlIHBpdGNoIG9mZnNldCAqLworCXVuc2lnbmVkIHNob3J0IG1vZGU7CQkvKiBzYW1wbGUgbW9kZSAqLworI2RlZmluZSBTTkRSVl9TRk5UX01PREVfUk9NU09VTkQJCTB4ODAwMAorI2RlZmluZSBTTkRSVl9TRk5UX01PREVfU1RFUkVPCQkxCisjZGVmaW5lIFNORFJWX1NGTlRfTU9ERV9MT09QSU5HCQkyCisjZGVmaW5lIFNORFJWX1NGTlRfTU9ERV9OT1JFTEVBU0UJCTQJLyogb2Jzb2xldGUgKi8KKyNkZWZpbmUgU05EUlZfU0ZOVF9NT0RFX0lOSVRfUEFSTQkJOAorCisJc2hvcnQgcm9vdDsJCQkvKiBtaWRpIHJvb3Qga2V5ICovCisJc2hvcnQgdHVuZTsJCQkvKiBwaXRjaCB0dW5pbmcgKGluIGNlbnRzKSAqLworCXVuc2lnbmVkIGNoYXIgbG93LCBoaWdoOwkvKiBrZXkgbm90ZSByYW5nZSAqLworCXVuc2lnbmVkIGNoYXIgdmVsbG93LCB2ZWxoaWdoOwkvKiB2ZWxvY2l0eSByYW5nZSAqLworCXNpZ25lZCBjaGFyIGZpeGtleSwgZml4dmVsOwkvKiBmaXhlZCBrZXksIHZlbG9jaXR5ICovCisJc2lnbmVkIGNoYXIgcGFuLCBmaXhwYW47CS8qIHBhbm5pbmcsIGZpeGVkIHBhbm5pbmcgKi8KKwlzaG9ydCBleGNsdXNpdmVDbGFzczsJCS8qIGV4Y2x1c2l2ZSBjbGFzcyAoMCA9IG5vbmUpICovCisJdW5zaWduZWQgY2hhciBhbXBsaXR1ZGU7CS8qIHNhbXBsZSB2b2x1bWUgKDEyNyBtYXgpICovCisJdW5zaWduZWQgY2hhciBhdHRlbnVhdGlvbjsJLyogYXR0ZW51YXRpb24gKDAuMzc1ZEIpICovCisJc2hvcnQgc2NhbGVUdW5pbmc7CQkvKiBwaXRjaCBzY2FsZSB0dW5pbmcoJSksIG5vcm1hbGx5IDEwMCAqLworCXN0cnVjdCBzb3VuZGZvbnRfdm9pY2VfcGFybSBwYXJtOwkvKiB2b2ljZSBlbnZlbG9wZSBwYXJhbWV0ZXJzICovCisJdW5zaWduZWQgc2hvcnQgc2FtcGxlX21vZGU7CS8qIHNhbXBsZSBtb2RlX2ZsYWcgKHNldCBieSBkcml2ZXIpICovCit9OworCisKKy8qIGluc3RydW1lbnQgaW5mbyBoZWFkZXI6IDQgYnl0ZXMgKi8KK3N0cnVjdCBzb3VuZGZvbnRfdm9pY2VfcmVjX2hkciB7CisJdW5zaWduZWQgY2hhciBiYW5rOwkJLyogbWlkaSBiYW5rIG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIgaW5zdHI7CQkvKiBtaWRpIHByZXNldCBudW1iZXIgKi8KKwljaGFyIG52b2ljZXM7CQkJLyogbnVtYmVyIG9mIHZvaWNlcyAqLworCWNoYXIgd3JpdGVfbW9kZTsJCS8qIHdyaXRlIG1vZGU7IG5vcm1hbGx5IDAgKi8KKyNkZWZpbmUgU05EUlZfU0ZOVF9XUl9BUFBFTkQJCTAJLyogYXBwZW5kIGFueXdheSAqLworI2RlZmluZSBTTkRSVl9TRk5UX1dSX0VYQ0xVU0lWRQkJMQkvKiBza2lwIGlmIGFscmVhZHkgZXhpc3RzICovCisjZGVmaW5lIFNORFJWX1NGTlRfV1JfUkVQTEFDRQkJMgkvKiByZXBsYWNlIGlmIGFscmVhZHkgZXhpc3RzICovCit9OworCisKKy8qCisgKiBzYW1wbGUgd2F2ZSBpbmZvcm1hdGlvbgorICovCisKKy8qIHdhdmUgdGFibGUgc2FtcGxlIGhlYWRlcjogMzIgYnl0ZXMgKi8KK3N0cnVjdCBzb3VuZGZvbnRfc2FtcGxlX2luZm8geworCXVuc2lnbmVkIHNob3J0IHNmX2lkOwkJLyogZmlsZSBpZCAoc2hvdWxkIGJlIHplcm8pICovCisJdW5zaWduZWQgc2hvcnQgc2FtcGxlOwkJLyogc2FtcGxlIGlkICovCisJaW50IHN0YXJ0LCBlbmQ7CQkJLyogc3RhcnQgJiBlbmQgb2Zmc2V0ICovCisJaW50IGxvb3BzdGFydCwgbG9vcGVuZDsJCS8qIGxvb3Agc3RhcnQgJiBlbmQgb2Zmc2V0ICovCisJaW50IHNpemU7CQkJLyogc2l6ZSAoMCA9IFJPTSkgKi8KKwlzaG9ydCBkdW1teTsJCQkvKiBub3QgdXNlZCAqLworCXVuc2lnbmVkIHNob3J0IG1vZGVfZmxhZ3M7CS8qIG1vZGUgZmxhZ3MgKi8KKyNkZWZpbmUgU05EUlZfU0ZOVF9TQU1QTEVfOEJJVFMJCTEJLyogd2F2ZSBkYXRhIGlzIDhiaXRzICovCisjZGVmaW5lIFNORFJWX1NGTlRfU0FNUExFX1VOU0lHTkVECTIJLyogd2F2ZSBkYXRhIGlzIHVuc2lnbmVkICovCisjZGVmaW5lIFNORFJWX1NGTlRfU0FNUExFX05PX0JMQU5LCTQJLyogbm8gYmxhbmsgbG9vcCBpcyBhdHRhY2hlZCAqLworI2RlZmluZSBTTkRSVl9TRk5UX1NBTVBMRV9TSU5HTEVTSE9UCTgJLyogc2luZ2xlLXNob3Qgdy9vIGxvb3AgKi8KKyNkZWZpbmUgU05EUlZfU0ZOVF9TQU1QTEVfQklESVJfTE9PUAkxNgkvKiBiaWRpcmVjdGlvbmFsIGxvb3BpbmcgKi8KKyNkZWZpbmUgU05EUlZfU0ZOVF9TQU1QTEVfU1RFUkVPX0xFRlQJMzIJLyogc3RlcmVvIGxlZnQgc291bmQgKi8KKyNkZWZpbmUgU05EUlZfU0ZOVF9TQU1QTEVfU1RFUkVPX1JJR0hUCTY0CS8qIHN0ZXJlbyByaWdodCBzb3VuZCAqLworI2RlZmluZSBTTkRSVl9TRk5UX1NBTVBMRV9SRVZFUlNFX0xPT1AJMTI4CS8qIHJldmVyc2UgbG9vcGluZyAqLworCXVuc2lnbmVkIGludCB0cnVlc2l6ZTsJCS8qIHVzZWQgbWVtb3J5IHNpemUgKHNldCBieSBkcml2ZXIpICovCit9OworCisKKy8qCisgKiB2b2ljZSBwcmVzZXQgbWFwcGluZyAoYWxpYXNpbmcpCisgKi8KKworc3RydWN0IHNvdW5kZm9udF92b2ljZV9tYXAgeworCWludCBtYXBfYmFuaywgbWFwX2luc3RyLCBtYXBfa2V5OwkvKiBrZXkgPSAtMSBtZWFucyBhbGwga2V5cyAqLworCWludCBzcmNfYmFuaywgc3JjX2luc3RyLCBzcmNfa2V5OworfTsKKworCisvKgorICogaW9jdGxzIGZvciBod2RlcAorICovCisKKyNkZWZpbmUgU05EUlZfRU1VWF9IV0RFUF9OQU1FCSJFbXV4IFdhdmVUYWJsZSIKKworI2RlZmluZSBTTkRSVl9FTVVYX1ZFUlNJT04JKCgxIDw8IDE2KSB8ICgwIDw8IDgpIHwgMCkJLyogMS4wLjAgKi8KKworc3RydWN0IHNuZF9lbXV4X21pc2NfbW9kZSB7CisJaW50IHBvcnQ7CS8qIC0xID0gYWxsICovCisJaW50IG1vZGU7CisJaW50IHZhbHVlOworCWludCB2YWx1ZTI7CS8qIHJlc2VydmVkICovCit9OworCisjZGVmaW5lIFNORFJWX0VNVVhfSU9DVExfVkVSU0lPTglfSU9SKCdIJywgMHg4MCwgdW5zaWduZWQgaW50KQorI2RlZmluZSBTTkRSVl9FTVVYX0lPQ1RMX0xPQURfUEFUQ0gJX0lPV1IoJ0gnLCAweDgxLCBzdHJ1Y3Qgc291bmRmb250X3BhdGNoX2luZm8pCisjZGVmaW5lIFNORFJWX0VNVVhfSU9DVExfUkVTRVRfU0FNUExFUwlfSU8oJ0gnLCAweDgyKQorI2RlZmluZSBTTkRSVl9FTVVYX0lPQ1RMX1JFTU9WRV9MQVNUX1NBTVBMRVMgX0lPKCdIJywgMHg4MykKKyNkZWZpbmUgU05EUlZfRU1VWF9JT0NUTF9NRU1fQVZBSUwJX0lPVygnSCcsIDB4ODQsIGludCkKKyNkZWZpbmUgU05EUlZfRU1VWF9JT0NUTF9NSVNDX01PREUJX0lPV1IoJ0gnLCAweDg0LCBzdHJ1Y3Qgc25kX2VtdXhfbWlzY19tb2RlKQorCisjZW5kaWYgLyogX19TT1VORF9TRk5UX0lORk9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3NwYXduLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3Bhd24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjc3ZmNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3NwYXduLmgKQEAgLTAsMCArMSwxOTAgQEAKKy8qIERlZmluaXRpb25zIGZvciBQT1NJWCBzcGF3biBpbnRlcmZhY2UuCisgICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYJX1NQQVdOX0gKKyNkZWZpbmUJX1NQQVdOX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxzY2hlZC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisKKy8qIERhdGEgc3RydWN0dXJlIHRvIGNvbnRhaW4gYXR0cmlidXRlcyBmb3IgdGhyZWFkIGNyZWF0aW9uLiAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIHNob3J0IGludCBfX2ZsYWdzOworICBwaWRfdCBfX3BncnA7CisgIHNpZ3NldF90IF9fc2Q7CisgIHNpZ3NldF90IF9fc3M7CisgIHN0cnVjdCBzY2hlZF9wYXJhbSBfX3NwOworICBpbnQgX19wb2xpY3k7CisgIGludCBfX3BhZFsxNl07Cit9IHBvc2l4X3NwYXduYXR0cl90OworCisKKy8qIERhdGEgc3RydWN0dXJlIHRvIGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFjdGlvbnMgdG8gYmUKKyAgIHBlcmZvcm1lZCBpbiB0aGUgbmV3IHByb2Nlc3Mgd2l0aCByZXNwZWN0IHRvIGZpbGUgZGVzY3JpcHRvcnMuICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgaW50IF9fYWxsb2NhdGVkOworICBpbnQgX191c2VkOworICBzdHJ1Y3QgX19zcGF3bl9hY3Rpb24gKl9fYWN0aW9uczsKKyAgaW50IF9fcGFkWzE2XTsKK30gcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3Q7CisKKworLyogRmxhZ3MgdG8gYmUgc2V0IGluIHRoZSBgcG9zaXhfc3Bhd25hdHRyX3QnLiAgKi8KKyNkZWZpbmUgUE9TSVhfU1BBV05fUkVTRVRJRFMJCTB4MDEKKyNkZWZpbmUgUE9TSVhfU1BBV05fU0VUUEdST1VQCQkweDAyCisjZGVmaW5lIFBPU0lYX1NQQVdOX1NFVFNJR0RFRgkJMHgwNAorI2RlZmluZSBQT1NJWF9TUEFXTl9TRVRTSUdNQVNLCQkweDA4CisjZGVmaW5lIFBPU0lYX1NQQVdOX1NFVFNDSEVEUEFSQU0JMHgxMAorI2RlZmluZSBQT1NJWF9TUEFXTl9TRVRTQ0hFRFVMRVIJMHgyMAorI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgUE9TSVhfU1BBV05fVVNFVkZPUksJCTB4NDAKKyNlbmRpZgorCisKK19fQkVHSU5fREVDTFMKKworLyogU3Bhd24gYSBuZXcgcHJvY2VzcyBleGVjdXRpbmcgUEFUSCB3aXRoIHRoZSBhdHRyaWJ1dGVzIGRlc2NyaWJlcyBpbiAqQVRUUlAuCisgICBCZWZvcmUgcnVubmluZyB0aGUgcHJvY2VzcyBwZXJmb3JtIHRoZSBhY3Rpb25zIGRlc2NyaWJlZCBpbiBGSUxFLUFDVElPTlMuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnRzIGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAqLworZXh0ZXJuIGludCBwb3NpeF9zcGF3biAocGlkX3QgKl9fcmVzdHJpY3QgX19waWQsCisJCQlfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXRoLAorCQkJX19jb25zdCBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqX19yZXN0cmljdAorCQkJX19maWxlX2FjdGlvbnMsCisJCQlfX2NvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0cnAsCisJCQljaGFyICpfX2NvbnN0IGFyZ3ZbX19yZXN0cmljdF9hcnJdLAorCQkJY2hhciAqX19jb25zdCBlbnZwW19fcmVzdHJpY3RfYXJyXSk7CisKKy8qIFNpbWlsYXIgdG8gYHBvc2l4X3NwYXduJyBidXQgc2VhcmNoIGZvciBGSUxFIGluIHRoZSBQQVRILgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50cyBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gaW50IHBvc2l4X3NwYXducCAocGlkX3QgKl9fcGlkLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKKwkJCSBfX2NvbnN0IHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICpfX2ZpbGVfYWN0aW9ucywKKwkJCSBfX2NvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHJwLAorCQkJIGNoYXIgKl9fY29uc3QgYXJndltdLCBjaGFyICpfX2NvbnN0IGVudnBbXSk7CisKKworLyogSW5pdGlhbGl6ZSBkYXRhIHN0cnVjdHVyZSB3aXRoIGF0dHJpYnV0ZXMgZm9yIGBzcGF3bicgdG8gZGVmYXVsdCB2YWx1ZXMuICAqLworZXh0ZXJuIGludCBwb3NpeF9zcGF3bmF0dHJfaW5pdCAocG9zaXhfc3Bhd25hdHRyX3QgKl9fYXR0cikgX19USFJPVzsKKworLyogRnJlZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIEFUVFIuICAqLworZXh0ZXJuIGludCBwb3NpeF9zcGF3bmF0dHJfZGVzdHJveSAocG9zaXhfc3Bhd25hdHRyX3QgKl9fYXR0cikgX19USFJPVzsKKworLyogU3RvcmUgc2lnbmFsIG1hc2sgZm9yIHNpZ25hbHMgd2l0aCBkZWZhdWx0IGhhbmRsaW5nIGZyb20gQVRUUiBpbgorICAgU0lHREVGQVVMVC4gICovCitleHRlcm4gaW50IHBvc2l4X3NwYXduYXR0cl9nZXRzaWdkZWZhdWx0IChfX2NvbnN0IHBvc2l4X3NwYXduYXR0cl90ICoKKwkJCQkJICBfX3Jlc3RyaWN0IF9fYXR0ciwKKwkJCQkJICBzaWdzZXRfdCAqX19yZXN0cmljdCBfX3NpZ2RlZmF1bHQpCisgICAgIF9fVEhST1c7CisKKy8qIFNldCBzaWduYWwgbWFzayBmb3Igc2lnbmFscyB3aXRoIGRlZmF1bHQgaGFuZGxpbmcgaW4gQVRUUiB0byBTSUdERUZBVUxULiAgKi8KK2V4dGVybiBpbnQgcG9zaXhfc3Bhd25hdHRyX3NldHNpZ2RlZmF1bHQgKHBvc2l4X3NwYXduYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKKwkJCQkJICBfX2NvbnN0IHNpZ3NldF90ICpfX3Jlc3RyaWN0CisJCQkJCSAgX19zaWdkZWZhdWx0KQorICAgICBfX1RIUk9XOworCisvKiBTdG9yZSBzaWduYWwgbWFzayBmb3IgdGhlIG5ldyBwcm9jZXNzIGZyb20gQVRUUiBpbiBTSUdNQVNLLiAgKi8KK2V4dGVybiBpbnQgcG9zaXhfc3Bhd25hdHRyX2dldHNpZ21hc2sgKF9fY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9fcmVzdHJpY3QKKwkJCQkgICAgICAgX19hdHRyLAorCQkJCSAgICAgICBzaWdzZXRfdCAqX19yZXN0cmljdCBfX3NpZ21hc2spIF9fVEhST1c7CisKKy8qIFNldCBzaWduYWwgbWFzayBmb3IgdGhlIG5ldyBwcm9jZXNzIGluIEFUVFIgdG8gU0lHTUFTSy4gICovCitleHRlcm4gaW50IHBvc2l4X3NwYXduYXR0cl9zZXRzaWdtYXNrIChwb3NpeF9zcGF3bmF0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCisJCQkJICAgICAgIF9fY29uc3Qgc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19zaWdtYXNrKQorICAgICBfX1RIUk9XOworCisvKiBHZXQgZmxhZyB3b3JkIGZyb20gdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUuICAqLworZXh0ZXJuIGludCBwb3NpeF9zcGF3bmF0dHJfZ2V0ZmxhZ3MgKF9fY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKl9fcmVzdHJpY3QKKwkJCQkgICAgIF9fYXR0ciwKKwkJCQkgICAgIHNob3J0IGludCAqX19yZXN0cmljdCBfX2ZsYWdzKSBfX1RIUk9XOworCisvKiBTdG9yZSBmbGFncyBpbiB0aGUgYXR0cmlidXRlIHN0cnVjdHVyZS4gICovCitleHRlcm4gaW50IHBvc2l4X3NwYXduYXR0cl9zZXRmbGFncyAocG9zaXhfc3Bhd25hdHRyX3QgKl9hdHRyLAorCQkJCSAgICAgc2hvcnQgaW50IF9fZmxhZ3MpIF9fVEhST1c7CisKKy8qIEdldCBwcm9jZXNzIGdyb3VwIElEIGZyb20gdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUuICAqLworZXh0ZXJuIGludCBwb3NpeF9zcGF3bmF0dHJfZ2V0cGdyb3VwIChfX2NvbnN0IHBvc2l4X3NwYXduYXR0cl90ICpfX3Jlc3RyaWN0CisJCQkJICAgICAgX19hdHRyLCBwaWRfdCAqX19yZXN0cmljdCBfX3Bncm91cCkKKyAgICAgX19USFJPVzsKKworLyogU3RvcmUgcHJvY2VzcyBncm91cCBJRCBpbiB0aGUgYXR0cmlidXRlIHN0cnVjdHVyZS4gICovCitleHRlcm4gaW50IHBvc2l4X3NwYXduYXR0cl9zZXRwZ3JvdXAgKHBvc2l4X3NwYXduYXR0cl90ICpfX2F0dHIsCisJCQkJICAgICAgcGlkX3QgX19wZ3JvdXApIF9fVEhST1c7CisKKy8qIEdldCBzY2hlZHVsaW5nIHBvbGljeSBmcm9tIHRoZSBhdHRyaWJ1dGUgc3RydWN0dXJlLiAgKi8KK2V4dGVybiBpbnQgcG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcG9saWN5IChfX2NvbnN0IHBvc2l4X3NwYXduYXR0cl90ICoKKwkJCQkJICAgX19yZXN0cmljdCBfX2F0dHIsCisJCQkJCSAgIGludCAqX19yZXN0cmljdCBfX3NjaGVkcG9saWN5KQorICAgICBfX1RIUk9XOworCisvKiBTdG9yZSBzY2hlZHVsaW5nIHBvbGljeSBpbiB0aGUgYXR0cmlidXRlIHN0cnVjdHVyZS4gICovCitleHRlcm4gaW50IHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBvbGljeSAocG9zaXhfc3Bhd25hdHRyX3QgKl9fYXR0ciwKKwkJCQkJICAgaW50IF9fc2NoZWRwb2xpY3kpIF9fVEhST1c7CisKKy8qIEdldCBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgZnJvbSB0aGUgYXR0cmlidXRlIHN0cnVjdHVyZS4gICovCitleHRlcm4gaW50IHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBhcmFtIChfX2NvbnN0IHBvc2l4X3NwYXduYXR0cl90ICoKKwkJCQkJICBfX3Jlc3RyaWN0IF9fYXR0ciwKKwkJCQkJICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QKKwkJCQkJICBfX3NjaGVkcGFyYW0pIF9fVEhST1c7CisKKy8qIFN0b3JlIHNjaGVkdWxpbmcgcGFyYW1ldGVycyBpbiB0aGUgYXR0cmlidXRlIHN0cnVjdHVyZS4gICovCitleHRlcm4gaW50IHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBhcmFtIChwb3NpeF9zcGF3bmF0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCisJCQkJCSAgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICoKKwkJCQkJICBfX3Jlc3RyaWN0IF9fc2NoZWRwYXJhbSkgX19USFJPVzsKKworCisvKiBJbml0aWFsaXplIGRhdGEgc3RydWN0dXJlIGZvciBmaWxlIGF0dHJpYnV0ZSBmb3IgYHNwYXduJyBjYWxsLiAgKi8KK2V4dGVybiBpbnQgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2luaXQgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICoKKwkJCQkJICBfX2ZpbGVfYWN0aW9ucykgX19USFJPVzsKKworLyogRnJlZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIEZJTEUtQUNUSU9OUy4gICovCitleHRlcm4gaW50IHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19kZXN0cm95IChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqCisJCQkJCSAgICAgX19maWxlX2FjdGlvbnMpIF9fVEhST1c7CisKKy8qIEFkZCBhbiBhY3Rpb24gdG8gRklMRS1BQ1RJT05TIHdoaWNoIHRlbGxzIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBjYWxsCisgICBgb3BlbicgZm9yIHRoZSBnaXZlbiBmaWxlIGR1cmluZyB0aGUgYHNwYXduJyBjYWxsLiAgKi8KK2V4dGVybiBpbnQgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW4gKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICoKKwkJCQkJICAgICBfX3Jlc3RyaWN0IF9fZmlsZV9hY3Rpb25zLAorCQkJCQkgICAgIGludCBfX2ZkLAorCQkJCQkgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3BhdGgsCisJCQkJCSAgICAgaW50IF9fb2ZsYWcsIG1vZGVfdCBfX21vZGUpCisgICAgIF9fVEhST1c7CisKKy8qIEFkZCBhbiBhY3Rpb24gdG8gRklMRS1BQ1RJT05TIHdoaWNoIHRlbGxzIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBjYWxsCisgICBgY2xvc2UnIGZvciB0aGUgZ2l2ZW4gZmlsZSBkZXNjcmlwdG9yIGR1cmluZyB0aGUgYHNwYXduJyBjYWxsLiAgKi8KK2V4dGVybiBpbnQgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlIChwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqCisJCQkJCSAgICAgIF9fZmlsZV9hY3Rpb25zLCBpbnQgX19mZCkKKyAgICAgX19USFJPVzsKKworLyogQWRkIGFuIGFjdGlvbiB0byBGSUxFLUFDVElPTlMgd2hpY2ggdGVsbHMgdGhlIGltcGxlbWVudGF0aW9uIHRvIGNhbGwKKyAgIGBkdXAyJyBmb3IgdGhlIGdpdmVuIGZpbGUgZGVzY3JpcHRvcnMgZHVyaW5nIHRoZSBgc3Bhd24nIGNhbGwuICAqLworZXh0ZXJuIGludCBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkZHVwMiAocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKgorCQkJCQkgICAgIF9fZmlsZV9hY3Rpb25zLAorCQkJCQkgICAgIGludCBfX2ZkLCBpbnQgX19uZXdmZCkgX19USFJPVzsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIHNwYXduLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zdGFiLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3RhYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYzNjMzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3RhYi5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgX19HTlVfU1RBQl9fCisKKy8qIEluZGljYXRlIHRoZSBHTlUgc3RhYi5oIGlzIGluIHVzZS4gICovCisKKyNkZWZpbmUgX19HTlVfU1RBQl9fCisKKyNkZWZpbmUgX19kZWZpbmVfc3RhYihOQU1FLCBDT0RFLCBTVFJJTkcpIE5BTUU9Q09ERSwKKworZW51bSBfX3N0YWJfZGVidWdfY29kZQoreworI2luY2x1ZGUgPGJpdHMvc3RhYi5kZWY+CitMQVNUX1VOVVNFRF9TVEFCX0NPREUKK307CisKKyN1bmRlZiBfX2RlZmluZV9zdGFiCisKKyNlbmRpZiAvKiBfX0dOVV9TVEFCXyAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N0ZGludC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N0ZGludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNzI5YWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3RkaW50LmgKQEAgLTAsMCArMSwzMjAgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5NywxOTk4LDE5OTksMjAwMCwyMDAxLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qCisgKglJU08gQzk5OiA3LjE4IEludGVnZXIgdHlwZXMgPHN0ZGludC5oPgorICovCisKKyNpZm5kZWYgX1NURElOVF9ICisjZGVmaW5lIF9TVERJTlRfSAkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorI2luY2x1ZGUgPGJpdHMvd2NoYXIuaD4KKyNpbmNsdWRlIDxiaXRzL3dvcmRzaXplLmg+CisKKy8qIEV4YWN0IGludGVncmFsIHR5cGVzLiAgKi8KKworLyogU2lnbmVkLiAgKi8KKworLyogVGhlcmUgaXMgc29tZSBhbW91bnQgb2Ygb3ZlcmxhcCB3aXRoIDxzeXMvdHlwZXMuaD4gYXMga25vd24gYnkgaW5ldCBjb2RlICovCisjaWZuZGVmIF9faW50OF90X2RlZmluZWQKKyMgZGVmaW5lIF9faW50OF90X2RlZmluZWQKK3R5cGVkZWYgc2lnbmVkIGNoYXIJCWludDhfdDsKK3R5cGVkZWYgc2hvcnQgaW50CQlpbnQxNl90OwordHlwZWRlZiBpbnQJCQlpbnQzMl90OworIyBpZiBfX1dPUkRTSVpFID09IDY0Cit0eXBlZGVmIGxvbmcgaW50CQlpbnQ2NF90OworIyBlbHNlCitfX2V4dGVuc2lvbl9fCit0eXBlZGVmIGxvbmcgbG9uZyBpbnQJCWludDY0X3Q7CisjIGVuZGlmCisjZW5kaWYKKworLyogVW5zaWduZWQuICAqLwordHlwZWRlZiB1bnNpZ25lZCBjaGFyCQl1aW50OF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQJdWludDE2X3Q7CisjaWZuZGVmIF9fdWludDMyX3RfZGVmaW5lZAordHlwZWRlZiB1bnNpZ25lZCBpbnQJCXVpbnQzMl90OworIyBkZWZpbmUgX191aW50MzJfdF9kZWZpbmVkCisjZW5kaWYKKyNpZiBfX1dPUkRTSVpFID09IDY0Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50CXVpbnQ2NF90OworI2Vsc2UKK19fZXh0ZW5zaW9uX18KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludAl1aW50NjRfdDsKKyNlbmRpZgorCisKKy8qIFNtYWxsIHR5cGVzLiAgKi8KKworLyogU2lnbmVkLiAgKi8KK3R5cGVkZWYgc2lnbmVkIGNoYXIJCWludF9sZWFzdDhfdDsKK3R5cGVkZWYgc2hvcnQgaW50CQlpbnRfbGVhc3QxNl90OwordHlwZWRlZiBpbnQJCQlpbnRfbGVhc3QzMl90OworI2lmIF9fV09SRFNJWkUgPT0gNjQKK3R5cGVkZWYgbG9uZyBpbnQJCWludF9sZWFzdDY0X3Q7CisjZWxzZQorX19leHRlbnNpb25fXwordHlwZWRlZiBsb25nIGxvbmcgaW50CQlpbnRfbGVhc3Q2NF90OworI2VuZGlmCisKKy8qIFVuc2lnbmVkLiAgKi8KK3R5cGVkZWYgdW5zaWduZWQgY2hhcgkJdWludF9sZWFzdDhfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50CXVpbnRfbGVhc3QxNl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJCXVpbnRfbGVhc3QzMl90OworI2lmIF9fV09SRFNJWkUgPT0gNjQKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQJdWludF9sZWFzdDY0X3Q7CisjZWxzZQorX19leHRlbnNpb25fXwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50CXVpbnRfbGVhc3Q2NF90OworI2VuZGlmCisKKworLyogRmFzdCB0eXBlcy4gICovCisKKy8qIFNpZ25lZC4gICovCit0eXBlZGVmIHNpZ25lZCBjaGFyCQlpbnRfZmFzdDhfdDsKKyNpZiBfX1dPUkRTSVpFID09IDY0Cit0eXBlZGVmIGxvbmcgaW50CQlpbnRfZmFzdDE2X3Q7Cit0eXBlZGVmIGxvbmcgaW50CQlpbnRfZmFzdDMyX3Q7Cit0eXBlZGVmIGxvbmcgaW50CQlpbnRfZmFzdDY0X3Q7CisjZWxzZQordHlwZWRlZiBpbnQJCQlpbnRfZmFzdDE2X3Q7Cit0eXBlZGVmIGludAkJCWludF9mYXN0MzJfdDsKK19fZXh0ZW5zaW9uX18KK3R5cGVkZWYgbG9uZyBsb25nIGludAkJaW50X2Zhc3Q2NF90OworI2VuZGlmCisKKy8qIFVuc2lnbmVkLiAgKi8KK3R5cGVkZWYgdW5zaWduZWQgY2hhcgkJdWludF9mYXN0OF90OworI2lmIF9fV09SRFNJWkUgPT0gNjQKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQJdWludF9mYXN0MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQJdWludF9mYXN0MzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQJdWludF9mYXN0NjRfdDsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGludAkJdWludF9mYXN0MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CQl1aW50X2Zhc3QzMl90OworX19leHRlbnNpb25fXwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50CXVpbnRfZmFzdDY0X3Q7CisjZW5kaWYKKworCisvKiBUeXBlcyBmb3IgYHZvaWQgKicgcG9pbnRlcnMuICAqLworI2lmIF9fV09SRFNJWkUgPT0gNjQKKyMgaWZuZGVmIF9faW50cHRyX3RfZGVmaW5lZAordHlwZWRlZiBsb25nIGludAkJaW50cHRyX3Q7CisjICBkZWZpbmUgX19pbnRwdHJfdF9kZWZpbmVkCisjIGVuZGlmCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50CXVpbnRwdHJfdDsKKyNlbHNlCisjIGlmbmRlZiBfX2ludHB0cl90X2RlZmluZWQKK3R5cGVkZWYgaW50CQkJaW50cHRyX3Q7CisjICBkZWZpbmUgX19pbnRwdHJfdF9kZWZpbmVkCisjIGVuZGlmCit0eXBlZGVmIHVuc2lnbmVkIGludAkJdWludHB0cl90OworI2VuZGlmCisKKworLyogTGFyZ2VzdCBpbnRlZ3JhbCB0eXBlcy4gICovCisjaWYgX19XT1JEU0laRSA9PSA2NAordHlwZWRlZiBsb25nIGludAkJaW50bWF4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50CXVpbnRtYXhfdDsKKyNlbHNlCitfX2V4dGVuc2lvbl9fCit0eXBlZGVmIGxvbmcgbG9uZyBpbnQJCWludG1heF90OworX19leHRlbnNpb25fXwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50CXVpbnRtYXhfdDsKKyNlbmRpZgorCisKKy8qIFRoZSBJU08gQzk5IHN0YW5kYXJkIHNwZWNpZmllcyB0aGF0IGluIEMrKyBpbXBsZW1lbnRhdGlvbnMgdGhlc2UKKyAgIG1hY3JvcyBzaG91bGQgb25seSBiZSBkZWZpbmVkIGlmIGV4cGxpY2l0bHkgcmVxdWVzdGVkLiAgKi8KKyNpZiAhZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9fU1REQ19MSU1JVF9NQUNST1MKKworIyBpZiBfX1dPUkRTSVpFID09IDY0CisjICBkZWZpbmUgX19JTlQ2NF9DKGMpCWMgIyMgTAorIyAgZGVmaW5lIF9fVUlOVDY0X0MoYykJYyAjIyBVTAorIyBlbHNlCisjICBkZWZpbmUgX19JTlQ2NF9DKGMpCWMgIyMgTEwKKyMgIGRlZmluZSBfX1VJTlQ2NF9DKGMpCWMgIyMgVUxMCisjIGVuZGlmCisKKy8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gICovCisKKy8qIE1pbmltdW0gb2Ygc2lnbmVkIGludGVncmFsIHR5cGVzLiAgKi8KKyMgZGVmaW5lIElOVDhfTUlOCQkoLTEyOCkKKyMgZGVmaW5lIElOVDE2X01JTgkJKC0zMjc2Ny0xKQorIyBkZWZpbmUgSU5UMzJfTUlOCQkoLTIxNDc0ODM2NDctMSkKKyMgZGVmaW5lIElOVDY0X01JTgkJKC1fX0lOVDY0X0MoOTIyMzM3MjAzNjg1NDc3NTgwNyktMSkKKy8qIE1heGltdW0gb2Ygc2lnbmVkIGludGVncmFsIHR5cGVzLiAgKi8KKyMgZGVmaW5lIElOVDhfTUFYCQkoMTI3KQorIyBkZWZpbmUgSU5UMTZfTUFYCQkoMzI3NjcpCisjIGRlZmluZSBJTlQzMl9NQVgJCSgyMTQ3NDgzNjQ3KQorIyBkZWZpbmUgSU5UNjRfTUFYCQkoX19JTlQ2NF9DKDkyMjMzNzIwMzY4NTQ3NzU4MDcpKQorCisvKiBNYXhpbXVtIG9mIHVuc2lnbmVkIGludGVncmFsIHR5cGVzLiAgKi8KKyMgZGVmaW5lIFVJTlQ4X01BWAkJKDI1NSkKKyMgZGVmaW5lIFVJTlQxNl9NQVgJCSg2NTUzNSkKKyMgZGVmaW5lIFVJTlQzMl9NQVgJCSg0Mjk0OTY3Mjk1VSkKKyMgZGVmaW5lIFVJTlQ2NF9NQVgJCShfX1VJTlQ2NF9DKDE4NDQ2NzQ0MDczNzA5NTUxNjE1KSkKKworCisvKiBNaW5pbXVtIG9mIHNpZ25lZCBpbnRlZ3JhbCB0eXBlcyBoYXZpbmcgYSBtaW5pbXVtIHNpemUuICAqLworIyBkZWZpbmUgSU5UX0xFQVNUOF9NSU4JCSgtMTI4KQorIyBkZWZpbmUgSU5UX0xFQVNUMTZfTUlOCSgtMzI3NjctMSkKKyMgZGVmaW5lIElOVF9MRUFTVDMyX01JTgkoLTIxNDc0ODM2NDctMSkKKyMgZGVmaW5lIElOVF9MRUFTVDY0X01JTgkoLV9fSU5UNjRfQyg5MjIzMzcyMDM2ODU0Nzc1ODA3KS0xKQorLyogTWF4aW11bSBvZiBzaWduZWQgaW50ZWdyYWwgdHlwZXMgaGF2aW5nIGEgbWluaW11bSBzaXplLiAgKi8KKyMgZGVmaW5lIElOVF9MRUFTVDhfTUFYCQkoMTI3KQorIyBkZWZpbmUgSU5UX0xFQVNUMTZfTUFYCSgzMjc2NykKKyMgZGVmaW5lIElOVF9MRUFTVDMyX01BWAkoMjE0NzQ4MzY0NykKKyMgZGVmaW5lIElOVF9MRUFTVDY0X01BWAkoX19JTlQ2NF9DKDkyMjMzNzIwMzY4NTQ3NzU4MDcpKQorCisvKiBNYXhpbXVtIG9mIHVuc2lnbmVkIGludGVncmFsIHR5cGVzIGhhdmluZyBhIG1pbmltdW0gc2l6ZS4gICovCisjIGRlZmluZSBVSU5UX0xFQVNUOF9NQVgJKDI1NSkKKyMgZGVmaW5lIFVJTlRfTEVBU1QxNl9NQVgJKDY1NTM1KQorIyBkZWZpbmUgVUlOVF9MRUFTVDMyX01BWAkoNDI5NDk2NzI5NVUpCisjIGRlZmluZSBVSU5UX0xFQVNUNjRfTUFYCShfX1VJTlQ2NF9DKDE4NDQ2NzQ0MDczNzA5NTUxNjE1KSkKKworCisvKiBNaW5pbXVtIG9mIGZhc3Qgc2lnbmVkIGludGVncmFsIHR5cGVzIGhhdmluZyBhIG1pbmltdW0gc2l6ZS4gICovCisjIGRlZmluZSBJTlRfRkFTVDhfTUlOCQkoLTEyOCkKKyMgaWYgX19XT1JEU0laRSA9PSA2NAorIyAgZGVmaW5lIElOVF9GQVNUMTZfTUlOCSgtOTIyMzM3MjAzNjg1NDc3NTgwN0wtMSkKKyMgIGRlZmluZSBJTlRfRkFTVDMyX01JTgkoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMLTEpCisjIGVsc2UKKyMgIGRlZmluZSBJTlRfRkFTVDE2X01JTgkoLTIxNDc0ODM2NDctMSkKKyMgIGRlZmluZSBJTlRfRkFTVDMyX01JTgkoLTIxNDc0ODM2NDctMSkKKyMgZW5kaWYKKyMgZGVmaW5lIElOVF9GQVNUNjRfTUlOCQkoLV9fSU5UNjRfQyg5MjIzMzcyMDM2ODU0Nzc1ODA3KS0xKQorLyogTWF4aW11bSBvZiBmYXN0IHNpZ25lZCBpbnRlZ3JhbCB0eXBlcyBoYXZpbmcgYSBtaW5pbXVtIHNpemUuICAqLworIyBkZWZpbmUgSU5UX0ZBU1Q4X01BWAkJKDEyNykKKyMgaWYgX19XT1JEU0laRSA9PSA2NAorIyAgZGVmaW5lIElOVF9GQVNUMTZfTUFYCSg5MjIzMzcyMDM2ODU0Nzc1ODA3TCkKKyMgIGRlZmluZSBJTlRfRkFTVDMyX01BWAkoOTIyMzM3MjAzNjg1NDc3NTgwN0wpCisjIGVsc2UKKyMgIGRlZmluZSBJTlRfRkFTVDE2X01BWAkoMjE0NzQ4MzY0NykKKyMgIGRlZmluZSBJTlRfRkFTVDMyX01BWAkoMjE0NzQ4MzY0NykKKyMgZW5kaWYKKyMgZGVmaW5lIElOVF9GQVNUNjRfTUFYCQkoX19JTlQ2NF9DKDkyMjMzNzIwMzY4NTQ3NzU4MDcpKQorCisvKiBNYXhpbXVtIG9mIGZhc3QgdW5zaWduZWQgaW50ZWdyYWwgdHlwZXMgaGF2aW5nIGEgbWluaW11bSBzaXplLiAgKi8KKyMgZGVmaW5lIFVJTlRfRkFTVDhfTUFYCQkoMjU1KQorIyBpZiBfX1dPUkRTSVpFID09IDY0CisjICBkZWZpbmUgVUlOVF9GQVNUMTZfTUFYCSgxODQ0Njc0NDA3MzcwOTU1MTYxNVVMKQorIyAgZGVmaW5lIFVJTlRfRkFTVDMyX01BWAkoMTg0NDY3NDQwNzM3MDk1NTE2MTVVTCkKKyMgZWxzZQorIyAgZGVmaW5lIFVJTlRfRkFTVDE2X01BWAkoNDI5NDk2NzI5NVUpCisjICBkZWZpbmUgVUlOVF9GQVNUMzJfTUFYCSg0Mjk0OTY3Mjk1VSkKKyMgZW5kaWYKKyMgZGVmaW5lIFVJTlRfRkFTVDY0X01BWAkoX19VSU5UNjRfQygxODQ0Njc0NDA3MzcwOTU1MTYxNSkpCisKKworLyogVmFsdWVzIHRvIHRlc3QgZm9yIGludGVncmFsIHR5cGVzIGhvbGRpbmcgYHZvaWQgKicgcG9pbnRlci4gICovCisjIGlmIF9fV09SRFNJWkUgPT0gNjQKKyMgIGRlZmluZSBJTlRQVFJfTUlOCQkoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMLTEpCisjICBkZWZpbmUgSU5UUFRSX01BWAkJKDkyMjMzNzIwMzY4NTQ3NzU4MDdMKQorIyAgZGVmaW5lIFVJTlRQVFJfTUFYCQkoMTg0NDY3NDQwNzM3MDk1NTE2MTVVTCkKKyMgZWxzZQorIyAgZGVmaW5lIElOVFBUUl9NSU4JCSgtMjE0NzQ4MzY0Ny0xKQorIyAgZGVmaW5lIElOVFBUUl9NQVgJCSgyMTQ3NDgzNjQ3KQorIyAgZGVmaW5lIFVJTlRQVFJfTUFYCQkoNDI5NDk2NzI5NVUpCisjIGVuZGlmCisKKworLyogTWluaW11bSBmb3IgbGFyZ2VzdCBzaWduZWQgaW50ZWdyYWwgdHlwZS4gICovCisjIGRlZmluZSBJTlRNQVhfTUlOCQkoLV9fSU5UNjRfQyg5MjIzMzcyMDM2ODU0Nzc1ODA3KS0xKQorLyogTWF4aW11bSBmb3IgbGFyZ2VzdCBzaWduZWQgaW50ZWdyYWwgdHlwZS4gICovCisjIGRlZmluZSBJTlRNQVhfTUFYCQkoX19JTlQ2NF9DKDkyMjMzNzIwMzY4NTQ3NzU4MDcpKQorCisvKiBNYXhpbXVtIGZvciBsYXJnZXN0IHVuc2lnbmVkIGludGVncmFsIHR5cGUuICAqLworIyBkZWZpbmUgVUlOVE1BWF9NQVgJCShfX1VJTlQ2NF9DKDE4NDQ2NzQ0MDczNzA5NTUxNjE1KSkKKworCisvKiBMaW1pdHMgb2Ygb3RoZXIgaW50ZWdlciB0eXBlcy4gICovCisKKy8qIExpbWl0cyBvZiBgcHRyZGlmZl90JyB0eXBlLiAgKi8KKyMgaWYgX19XT1JEU0laRSA9PSA2NAorIyAgZGVmaW5lIFBUUkRJRkZfTUlOCQkoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMLTEpCisjICBkZWZpbmUgUFRSRElGRl9NQVgJCSg5MjIzMzcyMDM2ODU0Nzc1ODA3TCkKKyMgZWxzZQorIyAgZGVmaW5lIFBUUkRJRkZfTUlOCQkoLTIxNDc0ODM2NDctMSkKKyMgIGRlZmluZSBQVFJESUZGX01BWAkJKDIxNDc0ODM2NDcpCisjIGVuZGlmCisKKy8qIExpbWl0cyBvZiBgc2lnX2F0b21pY190Jy4gICovCisjIGRlZmluZSBTSUdfQVRPTUlDX01JTgkJKC0yMTQ3NDgzNjQ3LTEpCisjIGRlZmluZSBTSUdfQVRPTUlDX01BWAkJKDIxNDc0ODM2NDcpCisKKy8qIExpbWl0IG9mIGBzaXplX3QnIHR5cGUuICAqLworIyBpZiBfX1dPUkRTSVpFID09IDY0CisjICBkZWZpbmUgU0laRV9NQVgJCSgxODQ0Njc0NDA3MzcwOTU1MTYxNVVMKQorIyBlbHNlCisjICBkZWZpbmUgU0laRV9NQVgJCSg0Mjk0OTY3Mjk1VSkKKyMgZW5kaWYKKworLyogTGltaXRzIG9mIGB3Y2hhcl90Jy4gICovCisjIGlmbmRlZiBXQ0hBUl9NSU4KKy8qIFRoZXNlIGNvbnN0YW50cyBtaWdodCBhbHNvIGJlIGRlZmluZWQgaW4gPHdjaGFyLmg+LiAgKi8KKyMgIGRlZmluZSBXQ0hBUl9NSU4JCV9fV0NIQVJfTUlOCisjICBkZWZpbmUgV0NIQVJfTUFYCQlfX1dDSEFSX01BWAorIyBlbmRpZgorCisvKiBMaW1pdHMgb2YgYHdpbnRfdCcuICAqLworIyBkZWZpbmUgV0lOVF9NSU4JCSgwdSkKKyMgZGVmaW5lIFdJTlRfTUFYCQkoNDI5NDk2NzI5NXUpCisKKyNlbmRpZgkvKiBDKysgJiYgbGltaXQgbWFjcm9zICovCisKKworLyogVGhlIElTTyBDOTkgc3RhbmRhcmQgc3BlY2lmaWVzIHRoYXQgaW4gQysrIGltcGxlbWVudGF0aW9ucyB0aGVzZQorICAgc2hvdWxkIG9ubHkgYmUgZGVmaW5lZCBpZiBleHBsaWNpdGx5IHJlcXVlc3RlZC4gICovCisjaWYgIWRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfX1NURENfQ09OU1RBTlRfTUFDUk9TCisKKy8qIFNpZ25lZC4gICovCisjIGRlZmluZSBJTlQ4X0MoYykJYworIyBkZWZpbmUgSU5UMTZfQyhjKQljCisjIGRlZmluZSBJTlQzMl9DKGMpCWMKKyMgaWYgX19XT1JEU0laRSA9PSA2NAorIyAgZGVmaW5lIElOVDY0X0MoYykJYyAjIyBMCisjIGVsc2UKKyMgIGRlZmluZSBJTlQ2NF9DKGMpCWMgIyMgTEwKKyMgZW5kaWYKKworLyogVW5zaWduZWQuICAqLworIyBkZWZpbmUgVUlOVDhfQyhjKQljCisjIGRlZmluZSBVSU5UMTZfQyhjKQljCisjIGRlZmluZSBVSU5UMzJfQyhjKQljICMjIFUKKyMgaWYgX19XT1JEU0laRSA9PSA2NAorIyAgZGVmaW5lIFVJTlQ2NF9DKGMpCWMgIyMgVUwKKyMgZWxzZQorIyAgZGVmaW5lIFVJTlQ2NF9DKGMpCWMgIyMgVUxMCisjIGVuZGlmCisKKy8qIE1heGltYWwgdHlwZS4gICovCisjIGlmIF9fV09SRFNJWkUgPT0gNjQKKyMgIGRlZmluZSBJTlRNQVhfQyhjKQljICMjIEwKKyMgIGRlZmluZSBVSU5UTUFYX0MoYykJYyAjIyBVTAorIyBlbHNlCisjICBkZWZpbmUgSU5UTUFYX0MoYykJYyAjIyBMTAorIyAgZGVmaW5lIFVJTlRNQVhfQyhjKQljICMjIFVMTAorIyBlbmRpZgorCisjZW5kaWYJLyogQysrICYmIGNvbnN0YW50IG1hY3JvcyAqLworCisjZW5kaWYgLyogc3RkaW50LmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zdGRpby5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N0ZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRhY2JlMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zdGRpby5oCkBAIC0wLDAgKzEsOTE2IEBACisvKiBEZWZpbmUgSVNPIEMgc3RkaW8gb24gdG9wIG9mIEMrKyBpb3N0cmVhbXMuCisgICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTQtMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyoKKyAqCUlTTyBDOTkgU3RhbmRhcmQ6IDcuMTkgSW5wdXQvb3V0cHV0CTxzdGRpby5oPgorICovCisKKyNpZm5kZWYgX1NURElPX0gKKworI2lmICFkZWZpbmVkIF9fbmVlZF9GSUxFICYmICFkZWZpbmVkIF9fbmVlZF9fX0ZJTEUKKyMgZGVmaW5lIF9TVERJT19ICTEKKyMgaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworX19CRUdJTl9ERUNMUworCisjIGRlZmluZSBfX25lZWRfc2l6ZV90CisjIGRlZmluZSBfX25lZWRfTlVMTAorIyBpbmNsdWRlIDxzdGRkZWYuaD4KKworIyBpbmNsdWRlIDxiaXRzL3R5cGVzLmg+CisjIGRlZmluZSBfX25lZWRfRklMRQorIyBkZWZpbmUgX19uZWVkX19fRklMRQorI2VuZGlmIC8qIERvbid0IG5lZWQgRklMRS4gICovCisKKworI2lmICFkZWZpbmVkIF9fRklMRV9kZWZpbmVkICYmIGRlZmluZWQgX19uZWVkX0ZJTEUKKworLyogRGVmaW5lIG91dHNpZGUgb2YgbmFtZXNwYWNlIHNvIHRoZSBDKysgaXMgaGFwcHkuICAqLworc3RydWN0IF9JT19GSUxFOworCitfX0JFR0lOX05BTUVTUEFDRV9TVEQKKy8qIFRoZSBvcGFxdWUgdHlwZSBvZiBzdHJlYW1zLiAgVGhpcyBpcyB0aGUgZGVmaW5pdGlvbiB1c2VkIGVsc2V3aGVyZS4gICovCit0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOworX19FTkRfTkFNRVNQQUNFX1NURAorI2lmIGRlZmluZWQgX19VU0VfTEFSR0VGSUxFNjQgfHwgZGVmaW5lZCBfX1VTRV9TVklEIHx8IGRlZmluZWQgX19VU0VfUE9TSVggXAorICAgIHx8IGRlZmluZWQgX19VU0VfQlNEIHx8IGRlZmluZWQgX19VU0VfSVNPQzk5IHx8IGRlZmluZWQgX19VU0VfWE9QRU4gXAorICAgIHx8IGRlZmluZWQgX19VU0VfUE9TSVgyCitfX1VTSU5HX05BTUVTUEFDRV9TVEQoRklMRSkKKyNlbmRpZgorCisjIGRlZmluZSBfX0ZJTEVfZGVmaW5lZAkxCisjZW5kaWYgLyogRklMRSBub3QgZGVmaW5lZC4gICovCisjdW5kZWYJX19uZWVkX0ZJTEUKKworCisjaWYgIWRlZmluZWQgX19fX0ZJTEVfZGVmaW5lZCAmJiBkZWZpbmVkIF9fbmVlZF9fX0ZJTEUKKworLyogVGhlIG9wYXF1ZSB0eXBlIG9mIHN0cmVhbXMuICBUaGlzIGlzIHRoZSBkZWZpbml0aW9uIHVzZWQgZWxzZXdoZXJlLiAgKi8KK3R5cGVkZWYgc3RydWN0IF9JT19GSUxFIF9fRklMRTsKKworIyBkZWZpbmUgX19fX0ZJTEVfZGVmaW5lZAkxCisjZW5kaWYgLyogX19GSUxFIG5vdCBkZWZpbmVkLiAgKi8KKyN1bmRlZglfX25lZWRfX19GSUxFCisKKworI2lmZGVmCV9TVERJT19ICisjZGVmaW5lIF9TVERJT19VU0VTX0lPU1RSRUFNCisKKyNpbmNsdWRlIDxsaWJpby5oPgorCisjaWZkZWYgX19VU0VfWE9QRU4KKyMgaWZkZWYgX19HTlVDX18KKyMgIGlmbmRlZiBfVkFfTElTVF9ERUZJTkVECit0eXBlZGVmIF9HX3ZhX2xpc3QgdmFfbGlzdDsKKyMgICBkZWZpbmUgX1ZBX0xJU1RfREVGSU5FRAorIyAgZW5kaWYKKyMgZWxzZQorIyAgaW5jbHVkZSA8c3RkYXJnLmg+CisjIGVuZGlmCisjZW5kaWYKKworLyogVGhlIHR5cGUgb2YgdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZmdldHBvcycgYW5kIGBmc2V0cG9zJy4gICovCitfX0JFR0lOX05BTUVTUEFDRV9TVEQKKyNpZm5kZWYgX19VU0VfRklMRV9PRkZTRVQ2NAordHlwZWRlZiBfR19mcG9zX3QgZnBvc190OworI2Vsc2UKK3R5cGVkZWYgX0dfZnBvczY0X3QgZnBvc190OworI2VuZGlmCitfX0VORF9OQU1FU1BBQ0VfU1RECisjaWZkZWYgX19VU0VfTEFSR0VGSUxFNjQKK3R5cGVkZWYgX0dfZnBvczY0X3QgZnBvczY0X3Q7CisjZW5kaWYKKworLyogVGhlIHBvc3NpYmlsaXRpZXMgZm9yIHRoZSB0aGlyZCBhcmd1bWVudCB0byBgc2V0dmJ1ZicuICAqLworI2RlZmluZSBfSU9GQkYgMCAJCS8qIEZ1bGx5IGJ1ZmZlcmVkLiAgKi8KKyNkZWZpbmUgX0lPTEJGIDEJCS8qIExpbmUgYnVmZmVyZWQuICAqLworI2RlZmluZSBfSU9OQkYgMgkJLyogTm8gYnVmZmVyaW5nLiAgKi8KKworCisvKiBEZWZhdWx0IGJ1ZmZlciBzaXplLiAgKi8KKyNpZm5kZWYgQlVGU0laCisjIGRlZmluZSBCVUZTSVogX0lPX0JVRlNJWgorI2VuZGlmCisKKworLyogRW5kIG9mIGZpbGUgY2hhcmFjdGVyLgorICAgU29tZSB0aGluZ3MgdGhyb3VnaG91dCB0aGUgbGlicmFyeSByZWx5IG9uIHRoaXMgYmVpbmcgLTEuICAqLworI2lmbmRlZiBFT0YKKyMgZGVmaW5lIEVPRiAoLTEpCisjZW5kaWYKKworCisvKiBUaGUgcG9zc2liaWxpdGllcyBmb3IgdGhlIHRoaXJkIGFyZ3VtZW50IHRvIGBmc2VlaycuCisgICBUaGVzZSB2YWx1ZXMgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiAgKi8KKyNkZWZpbmUgU0VFS19TRVQJMAkvKiBTZWVrIGZyb20gYmVnaW5uaW5nIG9mIGZpbGUuICAqLworI2RlZmluZSBTRUVLX0NVUgkxCS8qIFNlZWsgZnJvbSBjdXJyZW50IHBvc2l0aW9uLiAgKi8KKyNkZWZpbmUgU0VFS19FTkQJMgkvKiBTZWVrIGZyb20gZW5kIG9mIGZpbGUuICAqLworCisKKyNpZiBkZWZpbmVkIF9fVVNFX1NWSUQgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTgorLyogRGVmYXVsdCBwYXRoIHByZWZpeCBmb3IgYHRlbXBuYW0nIGFuZCBgdG1wbmFtJy4gICovCisjIGRlZmluZSBQX3RtcGRpcgkiL3RtcCIKKyNlbmRpZgorCisKKy8qIEdldCB0aGUgdmFsdWVzOgorICAgTF90bXBuYW0JSG93IGxvbmcgYW4gYXJyYXkgb2YgY2hhcnMgbXVzdCBiZSB0byBiZSBwYXNzZWQgdG8gYHRtcG5hbScuCisgICBUTVBfTUFYCVRoZSBtaW5pbXVtIG51bWJlciBvZiB1bmlxdWUgZmlsZW5hbWVzIGdlbmVyYXRlZCBieSB0bXBuYW0KKyAgIAkJKGFuZCB0ZW1wbmFtIHdoZW4gaXQgdXNlcyB0bXBuYW0ncyBuYW1lIHNwYWNlKSwKKwkJb3IgdGVtcG5hbSAodGhlIHR3byBhcmUgc2VwYXJhdGUpLgorICAgTF9jdGVybWlkCUhvdyBsb25nIGFuIGFycmF5IHRvIHBhc3MgdG8gYGN0ZXJtaWQnLgorICAgTF9jdXNlcmlkCUhvdyBsb25nIGFuIGFycmF5IHRvIHBhc3MgdG8gYGN1c2VyaWQnLgorICAgRk9QRU5fTUFYCU1pbmltdW0gbnVtYmVyIG9mIGZpbGVzIHRoYXQgY2FuIGJlIG9wZW4gYXQgb25jZS4KKyAgIEZJTEVOQU1FX01BWAlNYXhpbXVtIGxlbmd0aCBvZiBhIGZpbGVuYW1lLiAgKi8KKyNpbmNsdWRlIDxiaXRzL3N0ZGlvX2xpbS5oPgorCisKKy8qIFN0YW5kYXJkIHN0cmVhbXMuICAqLworZXh0ZXJuIHN0cnVjdCBfSU9fRklMRSAqc3RkaW47CQkvKiBTdGFuZGFyZCBpbnB1dCBzdHJlYW0uICAqLworZXh0ZXJuIHN0cnVjdCBfSU9fRklMRSAqc3Rkb3V0OwkJLyogU3RhbmRhcmQgb3V0cHV0IHN0cmVhbS4gICovCitleHRlcm4gc3RydWN0IF9JT19GSUxFICpzdGRlcnI7CQkvKiBTdGFuZGFyZCBlcnJvciBvdXRwdXQgc3RyZWFtLiAgKi8KKy8qIEM4OS9DOTkgc2F5IHRoZXkncmUgbWFjcm9zLiAgTWFrZSB0aGVtIGhhcHB5LiAgKi8KKyNkZWZpbmUgc3RkaW4gc3RkaW4KKyNkZWZpbmUgc3Rkb3V0IHN0ZG91dAorI2RlZmluZSBzdGRlcnIgc3RkZXJyCisKK19fQkVHSU5fTkFNRVNQQUNFX1NURAorLyogUmVtb3ZlIGZpbGUgRklMRU5BTUUuICAqLworZXh0ZXJuIGludCByZW1vdmUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgX19USFJPVzsKKy8qIFJlbmFtZSBmaWxlIE9MRCB0byBORVcuICAqLworZXh0ZXJuIGludCByZW5hbWUgKF9fY29uc3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hhciAqX19uZXcpIF9fVEhST1c7CitfX0VORF9OQU1FU1BBQ0VfU1RECisKKyNpZmRlZiBfX1VTRV9BVEZJTEUKKy8qIFJlbmFtZSBmaWxlIE9MRCByZWxhdGl2ZSB0byBPTERGRCB0byBORVcgcmVsYXRpdmUgdG8gTkVXRkQuICAqLworZXh0ZXJuIGludCByZW5hbWVhdCAoaW50IF9fb2xkZmQsIF9fY29uc3QgY2hhciAqX19vbGQsIGludCBfX25ld2ZkLAorCQkgICAgIF9fY29uc3QgY2hhciAqX19uZXcpIF9fVEhST1c7CisjZW5kaWYKKworX19CRUdJTl9OQU1FU1BBQ0VfU1RECisvKiBDcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZSBhbmQgb3BlbiBpdCByZWFkL3dyaXRlLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50cyBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCisjaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKK2V4dGVybiBGSUxFICp0bXBmaWxlICh2b2lkKSBfX3d1cjsKKyNlbHNlCisjIGlmZGVmIF9fUkVESVJFQ1QKK2V4dGVybiBGSUxFICpfX1JFRElSRUNUICh0bXBmaWxlLCAodm9pZCksIHRtcGZpbGU2NCkgX193dXI7CisjIGVsc2UKKyMgIGRlZmluZSB0bXBmaWxlIHRtcGZpbGU2NAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAorZXh0ZXJuIEZJTEUgKnRtcGZpbGU2NCAodm9pZCkgX193dXI7CisjZW5kaWYKKworLyogR2VuZXJhdGUgYSB0ZW1wb3JhcnkgZmlsZW5hbWUuICAqLworZXh0ZXJuIGNoYXIgKnRtcG5hbSAoY2hhciAqX19zKSBfX1RIUk9XIF9fd3VyOworX19FTkRfTkFNRVNQQUNFX1NURAorCisjaWZkZWYgX19VU0VfTUlTQworLyogVGhpcyBpcyB0aGUgcmVlbnRyYW50IHZhcmlhbnQgb2YgYHRtcG5hbScuICBUaGUgb25seSBkaWZmZXJlbmNlIGlzCisgICB0aGF0IGl0IGRvZXMgbm90IGFsbG93IFMgdG8gYmUgTlVMTC4gICovCitleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykgX19USFJPVyBfX3d1cjsKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkIF9fVVNFX1NWSUQgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTgorLyogR2VuZXJhdGUgYSB1bmlxdWUgdGVtcG9yYXJ5IGZpbGVuYW1lIHVzaW5nIHVwIHRvIGZpdmUgY2hhcmFjdGVycyBvZiBQRlgKKyAgIGlmIGl0IGlzIG5vdCBOVUxMLiAgVGhlIGRpcmVjdG9yeSB0byBwdXQgdGhpcyBmaWxlIGluIGlzIHNlYXJjaGVkIGZvcgorICAgYXMgZm9sbG93czogRmlyc3QgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlICJUTVBESVIiIGlzIGNoZWNrZWQuCisgICBJZiBpdCBjb250YWlucyB0aGUgbmFtZSBvZiBhIHdyaXRhYmxlIGRpcmVjdG9yeSwgdGhhdCBkaXJlY3RvcnkgaXMgdXNlZC4KKyAgIElmIG5vdCBhbmQgaWYgRElSIGlzIG5vdCBOVUxMLCB0aGF0IHZhbHVlIGlzIGNoZWNrZWQuICBJZiB0aGF0IGZhaWxzLAorICAgUF90bXBkaXIgaXMgdHJpZWQgYW5kIGZpbmFsbHkgIi90bXAiLiAgVGhlIHN0b3JhZ2UgZm9yIHRoZSBmaWxlbmFtZQorICAgaXMgYWxsb2NhdGVkIGJ5IGBtYWxsb2MnLiAgKi8KK2V4dGVybiBjaGFyICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9fcGZ4KQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX21hbGxvY19fIF9fd3VyOworI2VuZGlmCisKKworX19CRUdJTl9OQU1FU1BBQ0VfU1RECisvKiBDbG9zZSBTVFJFQU0uCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9fc3RyZWFtKTsKKy8qIEZsdXNoIFNUUkVBTSwgb3IgYWxsIHN0cmVhbXMgaWYgU1RSRUFNIGlzIE5VTEwuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBmZmx1c2ggKEZJTEUgKl9fc3RyZWFtKTsKK19fRU5EX05BTUVTUEFDRV9TVEQKKworI2lmZGVmIF9fVVNFX01JU0MKKy8qIEZhc3RlciB2ZXJzaW9ucyB3aGVuIGxvY2tpbmcgaXMgbm90IHJlcXVpcmVkLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBwYXJ0IG9mIFBPU0lYIGFuZCB0aGVyZWZvcmUgbm8gb2ZmaWNpYWwKKyAgIGNhbmNlbGxhdGlvbiBwb2ludC4gIEJ1dCBkdWUgdG8gc2ltaWxhcml0eSB3aXRoIGFuIFBPU0lYIGludGVyZmFjZQorICAgb3IgZHVlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBpdCBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQKKyAgIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gaW50IGZmbHVzaF91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pOworI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIENsb3NlIGFsbCBzdHJlYW1zLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBwYXJ0IG9mIFBPU0lYIGFuZCB0aGVyZWZvcmUgbm8gb2ZmaWNpYWwKKyAgIGNhbmNlbGxhdGlvbiBwb2ludC4gIEJ1dCBkdWUgdG8gc2ltaWxhcml0eSB3aXRoIGFuIFBPU0lYIGludGVyZmFjZQorICAgb3IgZHVlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBpdCBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQKKyAgIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gaW50IGZjbG9zZWFsbCAodm9pZCk7CisjZW5kaWYKKworCitfX0JFR0lOX05BTUVTUEFDRV9TVEQKKyNpZm5kZWYgX19VU0VfRklMRV9PRkZTRVQ2NAorLyogT3BlbiBhIGZpbGUgYW5kIGNyZWF0ZSBhIG5ldyBzdHJlYW0gZm9yIGl0LgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBGSUxFICpmb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCisJCSAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgX193dXI7CisvKiBPcGVuIGEgZmlsZSwgcmVwbGFjaW5nIGFuIGV4aXN0aW5nIHN0cmVhbSB3aXRoIGl0LgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKKwkJICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCisJCSAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIF9fd3VyOworI2Vsc2UKKyMgaWZkZWYgX19SRURJUkVDVAorZXh0ZXJuIEZJTEUgKl9fUkVESVJFQ1QgKGZvcGVuLCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCisJCQkJIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzKSwgZm9wZW42NCkKKyAgX193dXI7CitleHRlcm4gRklMRSAqX19SRURJUkVDVCAoZnJlb3BlbiwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAorCQkJCSAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAorCQkJCSAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pLCBmcmVvcGVuNjQpCisgIF9fd3VyOworIyBlbHNlCisjICBkZWZpbmUgZm9wZW4gZm9wZW42NAorIyAgZGVmaW5lIGZyZW9wZW4gZnJlb3BlbjY0CisjIGVuZGlmCisjZW5kaWYKK19fRU5EX05BTUVTUEFDRV9TVEQKKyNpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAorZXh0ZXJuIEZJTEUgKmZvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAorCQkgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgX193dXI7CitleHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKKwkJCV9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAorCQkJRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgX193dXI7CisjZW5kaWYKKworI2lmZGVmCV9fVVNFX1BPU0lYCisvKiBDcmVhdGUgYSBuZXcgc3RyZWFtIHRoYXQgcmVmZXJzIHRvIGFuIGV4aXN0aW5nIHN5c3RlbSBmaWxlIGRlc2NyaXB0b3IuICAqLworZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgX19USFJPVyBfX3d1cjsKKyNlbmRpZgorCisjaWZkZWYJX19VU0VfR05VCisvKiBDcmVhdGUgYSBuZXcgc3RyZWFtIHRoYXQgcmVmZXJzIHRvIHRoZSBnaXZlbiBtYWdpYyBjb29raWUsCisgICBhbmQgdXNlcyB0aGUgZ2l2ZW4gZnVuY3Rpb25zIGZvciBpbnB1dCBhbmQgb3V0cHV0LiAgKi8KK2V4dGVybiBGSUxFICpmb3BlbmNvb2tpZSAodm9pZCAqX19yZXN0cmljdCBfX21hZ2ljX2Nvb2tpZSwKKwkJCSAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCisJCQkgIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5jcykgX19USFJPVyBfX3d1cjsKKworLyogQ3JlYXRlIGEgbmV3IHN0cmVhbSB0aGF0IHJlZmVycyB0byBhIG1lbW9yeSBidWZmZXIuICAqLworZXh0ZXJuIEZJTEUgKmZtZW1vcGVuICh2b2lkICpfX3MsIHNpemVfdCBfX2xlbiwgX19jb25zdCBjaGFyICpfX21vZGVzKQorICBfX1RIUk9XIF9fd3VyOworCisvKiBPcGVuIGEgc3RyZWFtIHRoYXQgd3JpdGVzIGludG8gYSBtYWxsb2MnZCBidWZmZXIgdGhhdCBpcyBleHBhbmRlZCBhcworICAgbmVjZXNzYXJ5LiAgKkJVRkxPQyBhbmQgKlNJWkVMT0MgYXJlIHVwZGF0ZWQgd2l0aCB0aGUgYnVmZmVyJ3MgbG9jYXRpb24KKyAgIGFuZCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiBvbiBmZmx1c2ggb3IgZmNsb3NlLiAgKi8KK2V4dGVybiBGSUxFICpvcGVuX21lbXN0cmVhbSAoY2hhciAqKl9fYnVmbG9jLCBzaXplX3QgKl9fc2l6ZWxvYykgX19USFJPVyBfX3d1cjsKKyNlbmRpZgorCisKK19fQkVHSU5fTkFNRVNQQUNFX1NURAorLyogSWYgQlVGIGlzIE5VTEwsIG1ha2UgU1RSRUFNIHVuYnVmZmVyZWQuCisgICBFbHNlIG1ha2UgaXQgdXNlIGJ1ZmZlciBCVUYsIG9mIHNpemUgQlVGU0laLiAgKi8KK2V4dGVybiB2b2lkIHNldGJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgX19USFJPVzsKKy8qIE1ha2UgU1RSRUFNIHVzZSBidWZmZXJpbmcgbW9kZSBNT0RFLgorICAgSWYgQlVGIGlzIG5vdCBOVUxMLCB1c2UgTiBieXRlcyBvZiBpdCBmb3IgYnVmZmVyaW5nOworICAgZWxzZSBhbGxvY2F0ZSBhbiBpbnRlcm5hbCBidWZmZXIgTiBieXRlcyBsb25nLiAgKi8KK2V4dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKKwkJICAgIGludCBfX21vZGVzLCBzaXplX3QgX19uKSBfX1RIUk9XOworX19FTkRfTkFNRVNQQUNFX1NURAorCisjaWZkZWYJX19VU0VfQlNECisvKiBJZiBCVUYgaXMgTlVMTCwgbWFrZSBTVFJFQU0gdW5idWZmZXJlZC4KKyAgIEVsc2UgbWFrZSBpdCB1c2UgU0laRSBieXRlcyBvZiBCVUYgZm9yIGJ1ZmZlcmluZy4gICovCitleHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCisJCSAgICAgICBzaXplX3QgX19zaXplKSBfX1RIUk9XOworCisvKiBNYWtlIFNUUkVBTSBsaW5lLWJ1ZmZlcmVkLiAgKi8KK2V4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSBfX1RIUk9XOworI2VuZGlmCisKKworX19CRUdJTl9OQU1FU1BBQ0VfU1RECisvKiBXcml0ZSBmb3JtYXR0ZWQgb3V0cHV0IHRvIFNUUkVBTS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gaW50IGZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCisJCSAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLik7CisvKiBXcml0ZSBmb3JtYXR0ZWQgb3V0cHV0IHRvIHN0ZG91dC4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gaW50IHByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pOworLyogV3JpdGUgZm9ybWF0dGVkIG91dHB1dCB0byBTLiAgKi8KK2V4dGVybiBpbnQgc3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsCisJCSAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgX19USFJPVzsKKworLyogV3JpdGUgZm9ybWF0dGVkIG91dHB1dCB0byBTIGZyb20gYXJndW1lbnQgbGlzdCBBUkcuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKKwkJICAgICBfR192YV9saXN0IF9fYXJnKTsKKy8qIFdyaXRlIGZvcm1hdHRlZCBvdXRwdXQgdG8gc3Rkb3V0IGZyb20gYXJndW1lbnQgbGlzdCBBUkcuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCB2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9HX3ZhX2xpc3QgX19hcmcpOworLyogV3JpdGUgZm9ybWF0dGVkIG91dHB1dCB0byBTIGZyb20gYXJndW1lbnQgbGlzdCBBUkcuICAqLworZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKKwkJICAgICBfR192YV9saXN0IF9fYXJnKSBfX1RIUk9XOworX19FTkRfTkFNRVNQQUNFX1NURAorCisjaWYgZGVmaW5lZCBfX1VTRV9CU0QgfHwgZGVmaW5lZCBfX1VTRV9JU09DOTkgfHwgZGVmaW5lZCBfX1VTRV9VTklYOTgKK19fQkVHSU5fTkFNRVNQQUNFX0M5OQorLyogTWF4aW11bSBjaGFycyBvZiBvdXRwdXQgdG8gd3JpdGUgaW4gTUFYTEVOLiAgKi8KK2V4dGVybiBpbnQgc25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCisJCSAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CisKK2V4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAorCQkgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9HX3ZhX2xpc3QgX19hcmcpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CitfX0VORF9OQU1FU1BBQ0VfQzk5CisjZW5kaWYKKworI2lmZGVmIF9fVVNFX0dOVQorLyogV3JpdGUgZm9ybWF0dGVkIG91dHB1dCB0byBhIHN0cmluZyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgd2l0aCBgbWFsbG9jJy4KKyAgIFN0b3JlIHRoZSBhZGRyZXNzIG9mIHRoZSBzdHJpbmcgaW4gKlBUUi4gICovCitleHRlcm4gaW50IHZhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2YsCisJCSAgICAgIF9HX3ZhX2xpc3QgX19hcmcpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSkgX193dXI7CitleHRlcm4gaW50IF9fYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAorCQkgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSkgX193dXI7CitleHRlcm4gaW50IGFzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKKwkJICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKSBfX3d1cjsKKworLyogV3JpdGUgZm9ybWF0dGVkIG91dHB1dCB0byBhIGZpbGUgZGVzY3JpcHRvci4KKworICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgcGFydCBvZiBQT1NJWCBhbmQgdGhlcmVmb3JlIG5vIG9mZmljaWFsCisgICBjYW5jZWxsYXRpb24gcG9pbnQuICBCdXQgZHVlIHRvIHNpbWlsYXJpdHkgd2l0aCBhbiBQT1NJWCBpbnRlcmZhY2UKKyAgIG9yIGR1ZSB0byB0aGUgaW1wbGVtZW50YXRpb24gdGhleSBhcmUgY2FuY2VsbGF0aW9uIHBvaW50cyBhbmQKKyAgIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LAorCQkgICAgIF9HX3ZhX2xpc3QgX19hcmcpCisgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOworZXh0ZXJuIGludCBkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCisgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOworI2VuZGlmCisKKworX19CRUdJTl9OQU1FU1BBQ0VfU1RECisvKiBSZWFkIGZvcm1hdHRlZCBpbnB1dCBmcm9tIFNUUkVBTS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gaW50IGZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKKwkJICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIF9fd3VyOworLyogUmVhZCBmb3JtYXR0ZWQgaW5wdXQgZnJvbSBzdGRpbi4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgX193dXI7CisvKiBSZWFkIGZvcm1hdHRlZCBpbnB1dCBmcm9tIFMuICAqLworZXh0ZXJuIGludCBzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCisJCSAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSBfX1RIUk9XOworCisjaWYgZGVmaW5lZCBfX1VTRV9JU09DOTkgJiYgIWRlZmluZWQgX19VU0VfR05VIFwKKyAgICAmJiAoIWRlZmluZWQgX19MREJMX0NPTVBBVCB8fCAhZGVmaW5lZCBfX1JFRElSRUNUKSBcCisgICAgJiYgKGRlZmluZWQgX19TVFJJQ1RfQU5TSV9fIHx8IGRlZmluZWQgX19VU0VfWE9QRU4ySykKKyMgaWZkZWYgX19SRURJUkVDVAorLyogRm9yIHN0cmljdCBJU08gQzk5IG9yIFBPU0lYIGNvbXBsaWFuY2UgZGlzYWxsb3cgJWFzLCAlYVMgYW5kICVhWworICAgR05VIGV4dGVuc2lvbiB3aGljaCBjb25mbGljdHMgd2l0aCB2YWxpZCAlYSBmb2xsb3dlZCBieSBsZXR0ZXIKKyAgIHMsIFMgb3IgWy4gICovCitleHRlcm4gaW50IF9fUkVESVJFQ1QgKGZzY2FuZiwgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCisJCQkJX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pLAorCQkgICAgICAgX19pc29jOTlfZnNjYW5mKSBfX3d1cjsKK2V4dGVybiBpbnQgX19SRURJUkVDVCAoc2NhbmYsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLiksCisJCSAgICAgICBfX2lzb2M5OV9zY2FuZikgX193dXI7CitleHRlcm4gaW50IF9fUkVESVJFQ1QgKHNzY2FuZiwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCisJCQkJX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pLAorCQkgICAgICAgX19pc29jOTlfc3NjYW5mKSBfX1RIUk9XOworIyBlbHNlCitleHRlcm4gaW50IF9faXNvYzk5X2ZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKKwkJCSAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgX193dXI7CitleHRlcm4gaW50IF9faXNvYzk5X3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgX193dXI7CitleHRlcm4gaW50IF9faXNvYzk5X3NzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKKwkJCSAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgX19USFJPVzsKKyMgIGRlZmluZSBmc2NhbmYgX19pc29jOTlfZnNjYW5mCisjICBkZWZpbmUgc2NhbmYgX19pc29jOTlfc2NhbmYKKyMgIGRlZmluZSBzc2NhbmYgX19pc29jOTlfc3NjYW5mCisjIGVuZGlmCisjZW5kaWYKKworX19FTkRfTkFNRVNQQUNFX1NURAorCisjaWZkZWYJX19VU0VfSVNPQzk5CitfX0JFR0lOX05BTUVTUEFDRV9DOTkKKy8qIFJlYWQgZm9ybWF0dGVkIGlucHV0IGZyb20gUyBpbnRvIGFyZ3VtZW50IGxpc3QgQVJHLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgdmZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKKwkJICAgIF9HX3ZhX2xpc3QgX19hcmcpCisgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSkgX193dXI7CisKKy8qIFJlYWQgZm9ybWF0dGVkIGlucHV0IGZyb20gc3RkaW4gaW50byBhcmd1bWVudCBsaXN0IEFSRy4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gaW50IHZzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfR192YV9saXN0IF9fYXJnKQorICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAxLCAwKSkpIF9fd3VyOworCisvKiBSZWFkIGZvcm1hdHRlZCBpbnB1dCBmcm9tIFMgaW50byBhcmd1bWVudCBsaXN0IEFSRy4gICovCitleHRlcm4gaW50IHZzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCisJCSAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9HX3ZhX2xpc3QgX19hcmcpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKKworIyBpZiAhZGVmaW5lZCBfX1VTRV9HTlUgXAorICAgICAmJiAoIWRlZmluZWQgX19MREJMX0NPTVBBVCB8fCAhZGVmaW5lZCBfX1JFRElSRUNUKSBcCisgICAgICYmIChkZWZpbmVkIF9fU1RSSUNUX0FOU0lfXyB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOMkspCisjICBpZmRlZiBfX1JFRElSRUNUCisvKiBGb3Igc3RyaWN0IElTTyBDOTkgb3IgUE9TSVggY29tcGxpYW5jZSBkaXNhbGxvdyAlYXMsICVhUyBhbmQgJWFbCisgICBHTlUgZXh0ZW5zaW9uIHdoaWNoIGNvbmZsaWN0cyB3aXRoIHZhbGlkICVhIGZvbGxvd2VkIGJ5IGxldHRlcgorICAgcywgUyBvciBbLiAgKi8KK2V4dGVybiBpbnQgX19SRURJUkVDVCAodmZzY2FuZiwKKwkJICAgICAgIChGSUxFICpfX3Jlc3RyaWN0IF9fcywKKwkJCV9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX0dfdmFfbGlzdCBfX2FyZyksCisJCSAgICAgICBfX2lzb2M5OV92ZnNjYW5mKQorICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpIF9fd3VyOworZXh0ZXJuIGludCBfX1JFRElSRUNUICh2c2NhbmYsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCisJCQkJX0dfdmFfbGlzdCBfX2FyZyksIF9faXNvYzk5X3ZzY2FuZikKKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMSwgMCkpKSBfX3d1cjsKK2V4dGVybiBpbnQgX19SRURJUkVDVCAodnNzY2FuZiwKKwkJICAgICAgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAorCQkJX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfR192YV9saXN0IF9fYXJnKSwKKwkJICAgICAgIF9faXNvYzk5X3Zzc2NhbmYpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKKyMgIGVsc2UKK2V4dGVybiBpbnQgX19pc29jOTlfdmZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3MsCisJCQkgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKKwkJCSAgICAgX0dfdmFfbGlzdCBfX2FyZykgX193dXI7CitleHRlcm4gaW50IF9faXNvYzk5X3ZzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAorCQkJICAgIF9HX3ZhX2xpc3QgX19hcmcpIF9fd3VyOworZXh0ZXJuIGludCBfX2lzb2M5OV92c3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAorCQkJICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCisJCQkgICAgIF9HX3ZhX2xpc3QgX19hcmcpIF9fVEhST1c7CisjICAgZGVmaW5lIHZmc2NhbmYgX19pc29jOTlfdmZzY2FuZgorIyAgIGRlZmluZSB2c2NhbmYgX19pc29jOTlfdnNjYW5mCisjICAgZGVmaW5lIHZzc2NhbmYgX19pc29jOTlfdnNzY2FuZgorIyAgZW5kaWYKKyMgZW5kaWYKKworX19FTkRfTkFNRVNQQUNFX0M5OQorI2VuZGlmIC8qIFVzZSBJU08gQzl4LiAgKi8KKworCitfX0JFR0lOX05BTUVTUEFDRV9TVEQKKy8qIFJlYWQgYSBjaGFyYWN0ZXIgZnJvbSBTVFJFQU0uCisKKyAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50cyBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gaW50IGZnZXRjIChGSUxFICpfX3N0cmVhbSk7CitleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKTsKKworLyogUmVhZCBhIGNoYXJhY3RlciBmcm9tIHN0ZGluLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgZ2V0Y2hhciAodm9pZCk7CitfX0VORF9OQU1FU1BBQ0VfU1RECisKKy8qIFRoZSBDIHN0YW5kYXJkIGV4cGxpY2l0bHkgc2F5cyB0aGlzIGlzIGEgbWFjcm8sIHNvIHdlIGFsd2F5cyBkbyB0aGUKKyAgIG9wdGltaXphdGlvbiBmb3IgaXQuICAqLworI2RlZmluZSBnZXRjKF9mcCkgX0lPX2dldGMgKF9mcCkKKworI2lmIGRlZmluZWQgX19VU0VfUE9TSVggfHwgZGVmaW5lZCBfX1VTRV9NSVNDCisvKiBUaGVzZSBhcmUgZGVmaW5lZCBpbiBQT1NJWC4xOjE5OTYuCisKKyAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50cyBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKTsKK2V4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCk7CisjZW5kaWYgLyogVXNlIFBPU0lYIG9yIE1JU0MuICAqLworCisjaWZkZWYgX19VU0VfTUlTQworLyogRmFzdGVyIHZlcnNpb24gd2hlbiBsb2NraW5nIGlzIG5vdCBuZWNlc3NhcnkuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGl0IGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKTsKKyNlbmRpZiAvKiBVc2UgTUlTQy4gICovCisKKworX19CRUdJTl9OQU1FU1BBQ0VfU1RECisvKiBXcml0ZSBhIGNoYXJhY3RlciB0byBTVFJFQU0uCisKKyAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50cyBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4KKworICAgVGhlc2UgZnVuY3Rpb25zIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgZnB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKTsKK2V4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pOworCisvKiBXcml0ZSBhIGNoYXJhY3RlciB0byBzdGRvdXQuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBwdXRjaGFyIChpbnQgX19jKTsKK19fRU5EX05BTUVTUEFDRV9TVEQKKworLyogVGhlIEMgc3RhbmRhcmQgZXhwbGljaXRseSBzYXlzIHRoaXMgY2FuIGJlIGEgbWFjcm8sCisgICBzbyB3ZSBhbHdheXMgZG8gdGhlIG9wdGltaXphdGlvbiBmb3IgaXQuICAqLworI2RlZmluZSBwdXRjKF9jaCwgX2ZwKSBfSU9fcHV0YyAoX2NoLCBfZnApCisKKyNpZmRlZiBfX1VTRV9NSVNDCisvKiBGYXN0ZXIgdmVyc2lvbiB3aGVuIGxvY2tpbmcgaXMgbm90IG5lY2Vzc2FyeS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgcGFydCBvZiBQT1NJWCBhbmQgdGhlcmVmb3JlIG5vIG9mZmljaWFsCisgICBjYW5jZWxsYXRpb24gcG9pbnQuICBCdXQgZHVlIHRvIHNpbWlsYXJpdHkgd2l0aCBhbiBQT1NJWCBpbnRlcmZhY2UKKyAgIG9yIGR1ZSB0byB0aGUgaW1wbGVtZW50YXRpb24gaXQgaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kCisgICB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pOworI2VuZGlmIC8qIFVzZSBNSVNDLiAgKi8KKworI2lmIGRlZmluZWQgX19VU0VfUE9TSVggfHwgZGVmaW5lZCBfX1VTRV9NSVNDCisvKiBUaGVzZSBhcmUgZGVmaW5lZCBpbiBQT1NJWC4xOjE5OTYuCisKKyAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50cyBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKTsKK2V4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYyk7CisjZW5kaWYgLyogVXNlIFBPU0lYIG9yIE1JU0MuICAqLworCisKKyNpZiBkZWZpbmVkIF9fVVNFX1NWSUQgfHwgZGVmaW5lZCBfX1VTRV9NSVNDIFwKKyAgICB8fCAoZGVmaW5lZCBfX1VTRV9YT1BFTiAmJiAhZGVmaW5lZCBfX1VTRV9YT1BFTjJLKQorLyogR2V0IGEgd29yZCAoaW50KSBmcm9tIFNUUkVBTS4gICovCitleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKTsKKworLyogV3JpdGUgYSB3b3JkIChpbnQpIHRvIFNUUkVBTS4gICovCitleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9fc3RyZWFtKTsKKyNlbmRpZgorCisKK19fQkVHSU5fTkFNRVNQQUNFX1NURAorLyogR2V0IGEgbmV3bGluZS10ZXJtaW5hdGVkIHN0cmluZyBvZiBmaW5pdGUgbGVuZ3RoIGZyb20gU1RSRUFNLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCisgICAgIF9fd3VyOworCisvKiBHZXQgYSBuZXdsaW5lLXRlcm1pbmF0ZWQgc3RyaW5nIGZyb20gc3RkaW4sIHJlbW92aW5nIHRoZSBuZXdsaW5lLgorICAgRE8gTk9UIFVTRSBUSElTIEZVTkNUSU9OISEgIFRoZXJlIGlzIG5vIGxpbWl0IG9uIGhvdyBtdWNoIGl0IHdpbGwgcmVhZC4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gY2hhciAqZ2V0cyAoY2hhciAqX19zKSBfX3d1cjsKK19fRU5EX05BTUVTUEFDRV9TVEQKKworI2lmZGVmIF9fVVNFX0dOVQorLyogVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBzYW1lIGFzIGBmZ2V0cycgYnV0IGRvZXMgbm90IGxvY2sgdGhlIHN0cmVhbS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgcGFydCBvZiBQT1NJWCBhbmQgdGhlcmVmb3JlIG5vIG9mZmljaWFsCisgICBjYW5jZWxsYXRpb24gcG9pbnQuICBCdXQgZHVlIHRvIHNpbWlsYXJpdHkgd2l0aCBhbiBQT1NJWCBpbnRlcmZhY2UKKyAgIG9yIGR1ZSB0byB0aGUgaW1wbGVtZW50YXRpb24gaXQgaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kCisgICB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGNoYXIgKmZnZXRzX3VubG9ja2VkIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwKKwkJCSAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgX193dXI7CisjZW5kaWYKKworCisjaWZkZWYJX19VU0VfR05VCisvKiBSZWFkIHVwIHRvIChhbmQgaW5jbHVkaW5nKSBhIERFTElNSVRFUiBmcm9tIFNUUkVBTSBpbnRvICpMSU5FUFRSCisgICAoYW5kIG51bGwtdGVybWluYXRlIGl0KS4gKkxJTkVQVFIgaXMgYSBwb2ludGVyIHJldHVybmVkIGZyb20gbWFsbG9jIChvcgorICAgTlVMTCksIHBvaW50aW5nIHRvICpOIGNoYXJhY3RlcnMgb2Ygc3BhY2UuICBJdCBpcyByZWFsbG9jJ2QgYXMKKyAgIG5lY2Vzc2FyeS4gIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgKG5vdCBpbmNsdWRpbmcgdGhlCisgICBudWxsIHRlcm1pbmF0b3IpLCBvciAtMSBvbiBlcnJvciBvciBFT0YuCisKKyAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIHRoZXkgYXJlIGNhbmNlbGxhdGlvbiBwb2ludHMgYW5kCisgICB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIF9JT19zc2l6ZV90IF9fZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKKwkJCSAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCisJCQkgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgX193dXI7CitleHRlcm4gX0lPX3NzaXplX3QgZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKKwkJCSAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAorCQkJICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSBfX3d1cjsKKworLyogTGlrZSBgZ2V0ZGVsaW0nLCBidXQgcmVhZHMgdXAgdG8gYSBuZXdsaW5lLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBwYXJ0IG9mIFBPU0lYIGFuZCB0aGVyZWZvcmUgbm8gb2ZmaWNpYWwKKyAgIGNhbmNlbGxhdGlvbiBwb2ludC4gIEJ1dCBkdWUgdG8gc2ltaWxhcml0eSB3aXRoIGFuIFBPU0lYIGludGVyZmFjZQorICAgb3IgZHVlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBpdCBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQKKyAgIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gX0lPX3NzaXplX3QgZ2V0bGluZSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAorCQkJICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sCisJCQkgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgX193dXI7CisjZW5kaWYKKworCitfX0JFR0lOX05BTUVTUEFDRV9TVEQKKy8qIFdyaXRlIGEgc3RyaW5nIHRvIFNUUkVBTS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludHMgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBmcHV0cyAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSk7CisKKy8qIFdyaXRlIGEgc3RyaW5nLCBmb2xsb3dlZCBieSBhIG5ld2xpbmUsIHRvIHN0ZG91dC4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludHMgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcyk7CisKKworLyogUHVzaCBhIGNoYXJhY3RlciBiYWNrIG9udG8gdGhlIGlucHV0IGJ1ZmZlciBvZiBTVFJFQU0uCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnRzIGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgdW5nZXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSk7CisKKworLyogUmVhZCBjaHVua3Mgb2YgZ2VuZXJpYyBkYXRhIGZyb20gU1RSRUFNLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50cyBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gc2l6ZV90IGZyZWFkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAorCQkgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIF9fd3VyOworLyogV3JpdGUgY2h1bmtzIG9mIGdlbmVyaWMgZGF0YSB0byBTVFJFQU0uCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnRzIGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBzaXplX3QgZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCisJCSAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zKSBfX3d1cjsKK19fRU5EX05BTUVTUEFDRV9TVEQKKworI2lmZGVmIF9fVVNFX0dOVQorLyogVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBzYW1lIGFzIGBmcHV0cycgYnV0IGRvZXMgbm90IGxvY2sgdGhlIHN0cmVhbS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgcGFydCBvZiBQT1NJWCBhbmQgdGhlcmVmb3JlIG5vIG9mZmljaWFsCisgICBjYW5jZWxsYXRpb24gcG9pbnQuICBCdXQgZHVlIHRvIHNpbWlsYXJpdHkgd2l0aCBhbiBQT1NJWCBpbnRlcmZhY2UKKyAgIG9yIGR1ZSB0byB0aGUgaW1wbGVtZW50YXRpb24gaXQgaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kCisgICB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBmcHV0c191bmxvY2tlZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKKwkJCSAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pOworI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9NSVNDCisvKiBGYXN0ZXIgdmVyc2lvbnMgd2hlbiBsb2NraW5nIGlzIG5vdCBuZWNlc3NhcnkuCisKKyAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIHRoZXkgYXJlIGNhbmNlbGxhdGlvbiBwb2ludHMgYW5kCisgICB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKKwkJCSAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIF9fd3VyOworZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2NrZWQgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKKwkJCSAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSBfX3d1cjsKKyNlbmRpZgorCisKK19fQkVHSU5fTkFNRVNQQUNFX1NURAorLyogU2VlayB0byBhIGNlcnRhaW4gcG9zaXRpb24gb24gU1RSRUFNLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwgaW50IF9fd2hlbmNlKTsKKy8qIFJldHVybiB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiBTVFJFQU0uCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsIChGSUxFICpfX3N0cmVhbSkgX193dXI7CisvKiBSZXdpbmQgdG8gdGhlIGJlZ2lubmluZyBvZiBTVFJFQU0uCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSk7CitfX0VORF9OQU1FU1BBQ0VfU1RECisKKy8qIFRoZSBTaW5nbGUgVW5peCBTcGVjaWZpY2F0aW9uLCBWZXJzaW9uIDIsIHNwZWNpZmllcyBhbiBhbHRlcm5hdGl2ZSwKKyAgIG1vcmUgYWRlcXVhdGUgaW50ZXJmYWNlIGZvciB0aGUgdHdvIGZ1bmN0aW9ucyBhYm92ZSB3aGljaCBkZWFsIHdpdGgKKyAgIGZpbGUgb2Zmc2V0LiAgYGxvbmcgaW50JyBpcyBub3QgdGhlIHJpZ2h0IHR5cGUuICBUaGVzZSBkZWZpbml0aW9ucworICAgYXJlIG9yaWdpbmFsbHkgZGVmaW5lZCBpbiB0aGUgTGFyZ2UgRmlsZSBTdXBwb3J0IEFQSS4gICovCisKKyNpZiBkZWZpbmVkIF9fVVNFX0xBUkdFRklMRSB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOMksKKyMgaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKKy8qIFNlZWsgdG8gYSBjZXJ0YWluIHBvc2l0aW9uIG9uIFNUUkVBTS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gaW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2ZmX3QgX19vZmYsIGludCBfX3doZW5jZSk7CisvKiBSZXR1cm4gdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgU1RSRUFNLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBfX29mZl90IGZ0ZWxsbyAoRklMRSAqX19zdHJlYW0pIF9fd3VyOworIyBlbHNlCisjICBpZmRlZiBfX1JFRElSRUNUCitleHRlcm4gaW50IF9fUkVESVJFQ1QgKGZzZWVrbywKKwkJICAgICAgIChGSUxFICpfX3N0cmVhbSwgX19vZmY2NF90IF9fb2ZmLCBpbnQgX193aGVuY2UpLAorCQkgICAgICAgZnNlZWtvNjQpOworZXh0ZXJuIF9fb2ZmNjRfdCBfX1JFRElSRUNUIChmdGVsbG8sIChGSUxFICpfX3N0cmVhbSksIGZ0ZWxsbzY0KTsKKyMgIGVsc2UKKyMgICBkZWZpbmUgZnNlZWtvIGZzZWVrbzY0CisjICAgZGVmaW5lIGZ0ZWxsbyBmdGVsbG82NAorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCitfX0JFR0lOX05BTUVTUEFDRV9TVEQKKyNpZm5kZWYgX19VU0VfRklMRV9PRkZTRVQ2NAorLyogR2V0IFNUUkVBTSdzIHBvc2l0aW9uLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgZmdldHBvcyAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKTsKKy8qIFNldCBTVFJFQU0ncyBwb3NpdGlvbi4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gaW50IGZzZXRwb3MgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3NfdCAqX19wb3MpOworI2Vsc2UKKyMgaWZkZWYgX19SRURJUkVDVAorZXh0ZXJuIGludCBfX1JFRElSRUNUIChmZ2V0cG9zLCAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKKwkJCQkgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKSwgZmdldHBvczY0KTsKK2V4dGVybiBpbnQgX19SRURJUkVDVCAoZnNldHBvcywKKwkJICAgICAgIChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSwgZnNldHBvczY0KTsKKyMgZWxzZQorIyAgZGVmaW5lIGZnZXRwb3MgZmdldHBvczY0CisjICBkZWZpbmUgZnNldHBvcyBmc2V0cG9zNjQKKyMgZW5kaWYKKyNlbmRpZgorX19FTkRfTkFNRVNQQUNFX1NURAorCisjaWZkZWYgX19VU0VfTEFSR0VGSUxFNjQKK2V4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUgKl9fc3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSk7CitleHRlcm4gX19vZmY2NF90IGZ0ZWxsbzY0IChGSUxFICpfX3N0cmVhbSkgX193dXI7CitleHRlcm4gaW50IGZnZXRwb3M2NCAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvczY0X3QgKl9fcmVzdHJpY3QgX19wb3MpOworZXh0ZXJuIGludCBmc2V0cG9zNjQgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3M2NF90ICpfX3Bvcyk7CisjZW5kaWYKKworX19CRUdJTl9OQU1FU1BBQ0VfU1RECisvKiBDbGVhciB0aGUgZXJyb3IgYW5kIEVPRiBpbmRpY2F0b3JzIGZvciBTVFJFQU0uICAqLworZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSBfX1RIUk9XOworLyogUmV0dXJuIHRoZSBFT0YgaW5kaWNhdG9yIGZvciBTVFJFQU0uICAqLworZXh0ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVhbSkgX19USFJPVyBfX3d1cjsKKy8qIFJldHVybiB0aGUgZXJyb3IgaW5kaWNhdG9yIGZvciBTVFJFQU0uICAqLworZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSBfX1RIUk9XIF9fd3VyOworX19FTkRfTkFNRVNQQUNFX1NURAorCisjaWZkZWYgX19VU0VfTUlTQworLyogRmFzdGVyIHZlcnNpb25zIHdoZW4gbG9ja2luZyBpcyBub3QgcmVxdWlyZWQuICAqLworZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSBfX1RIUk9XOworZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgX19USFJPVyBfX3d1cjsKK2V4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgX19USFJPVyBfX3d1cjsKKyNlbmRpZgorCisKK19fQkVHSU5fTkFNRVNQQUNFX1NURAorLyogUHJpbnQgYSBtZXNzYWdlIGRlc2NyaWJpbmcgdGhlIG1lYW5pbmcgb2YgdGhlIHZhbHVlIG9mIGVycm5vLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiB2b2lkIHBlcnJvciAoX19jb25zdCBjaGFyICpfX3MpOworX19FTkRfTkFNRVNQQUNFX1NURAorCisvKiBQcm92aWRlIHRoZSBkZWNsYXJhdGlvbnMgZm9yIGBzeXNfZXJybGlzdCcgYW5kIGBzeXNfbmVycicgaWYgdGhleQorICAgYXJlIGF2YWlsYWJsZSBvbiB0aGlzIHN5c3RlbS4gIEV2ZW4gaWYgYXZhaWxhYmxlLCB0aGVzZSB2YXJpYWJsZXMKKyAgIHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseS4gIFRoZSBgc3RyZXJyb3InIGZ1bmN0aW9uIHByb3ZpZGVzCisgICBhbGwgdGhlIG5lY2Vzc2FyeSBmdW5jdGlvbmFsaXR5LiAgKi8KKyNpbmNsdWRlIDxiaXRzL3N5c19lcnJsaXN0Lmg+CisKKworI2lmZGVmCV9fVVNFX1BPU0lYCisvKiBSZXR1cm4gdGhlIHN5c3RlbSBmaWxlIGRlc2NyaXB0b3IgZm9yIFNUUkVBTS4gICovCitleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIF9fVEhST1cgX193dXI7CisjZW5kaWYgLyogVXNlIFBPU0lYLiAgKi8KKworI2lmZGVmIF9fVVNFX01JU0MKKy8qIEZhc3RlciB2ZXJzaW9uIHdoZW4gbG9ja2luZyBpcyBub3QgcmVxdWlyZWQuICAqLworZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSBfX1RIUk9XIF9fd3VyOworI2VuZGlmCisKKworI2lmIChkZWZpbmVkIF9fVVNFX1BPU0lYMiB8fCBkZWZpbmVkIF9fVVNFX1NWSUQgIHx8IGRlZmluZWQgX19VU0VfQlNEIHx8IFwKKyAgICAgZGVmaW5lZCBfX1VTRV9NSVNDKQorLyogQ3JlYXRlIGEgbmV3IHN0cmVhbSBjb25uZWN0ZWQgdG8gYSBwaXBlIHJ1bm5pbmcgdGhlIGdpdmVuIGNvbW1hbmQuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSBfX3d1cjsKKworLyogQ2xvc2UgYSBzdHJlYW0gb3BlbmVkIGJ5IHBvcGVuIGFuZCByZXR1cm4gdGhlIHN0YXR1cyBvZiBpdHMgY2hpbGQuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBwY2xvc2UgKEZJTEUgKl9fc3RyZWFtKTsKKyNlbmRpZgorCisKKyNpZmRlZglfX1VTRV9QT1NJWAorLyogUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbC4gICovCitleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSBfX1RIUk9XOworI2VuZGlmIC8qIFVzZSBQT1NJWC4gICovCisKKworI2lmZGVmIF9fVVNFX1hPUEVOCisvKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgdXNlci4gICovCitleHRlcm4gY2hhciAqY3VzZXJpZCAoY2hhciAqX19zKTsKKyNlbmRpZiAvKiBVc2UgWC9PcGVuLCBidXQgbm90IGlzc3VlIDYuICAqLworCisKKyNpZmRlZglfX1VTRV9HTlUKK3N0cnVjdCBvYnN0YWNrOwkJCS8qIFNlZSA8b2JzdGFjay5oPi4gICovCisKKy8qIFdyaXRlIGZvcm1hdHRlZCBvdXRwdXQgdG8gYW4gb2JzdGFjay4gICovCitleHRlcm4gaW50IG9ic3RhY2tfcHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCisJCQkgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKK2V4dGVybiBpbnQgb2JzdGFja192cHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCisJCQkgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAorCQkJICAgIF9HX3ZhX2xpc3QgX19hcmdzKQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOworI2VuZGlmIC8qIFVzZSBHTlUuICAqLworCisKKyNpZiBkZWZpbmVkIF9fVVNFX1BPU0lYIHx8IGRlZmluZWQgX19VU0VfTUlTQworLyogVGhlc2UgYXJlIGRlZmluZWQgaW4gUE9TSVguMToxOTk2LiAgKi8KKworLyogQWNxdWlyZSBvd25lcnNoaXAgb2YgU1RSRUFNLiAgKi8KK2V4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIF9fVEhST1c7CisKKy8qIFRyeSB0byBhY3F1aXJlIG93bmVyc2hpcCBvZiBTVFJFQU0gYnV0IGRvIG5vdCBibG9jayBpZiBpdCBpcyBub3QKKyAgIHBvc3NpYmxlLiAgKi8KK2V4dGVybiBpbnQgZnRyeWxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgX19USFJPVyBfX3d1cjsKKworLyogUmVsaW5xdWlzaCB0aGUgb3duZXJzaGlwIGdyYW50ZWQgZm9yIFNUUkVBTS4gICovCitleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIF9fVEhST1c7CisjZW5kaWYgLyogUE9TSVggfHwgbWlzYyAqLworCisjaWYgZGVmaW5lZCBfX1VTRV9YT1BFTiAmJiAhZGVmaW5lZCBfX1VTRV9YT1BFTjJLICYmICFkZWZpbmVkIF9fVVNFX0dOVQorLyogVGhlIFgvT3BlbiBzdGFuZGFyZCByZXF1aXJlcyBzb21lIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIHRvIGJlCisgICBkZWNsYXJlZCBoZXJlIHdoaWNoIGRvIG5vdCBiZWxvbmcgaW50byB0aGlzIGhlYWRlci4gIEJ1dCB3ZSBoYXZlIHRvCisgICBmb2xsb3cuICBJbiBHTlUgbW9kZSB3ZSBkb24ndCBkbyB0aGlzIG5vbnNlbnNlLiAgKi8KKyMgZGVmaW5lIF9fbmVlZF9nZXRvcHQKKyMgaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZW5kaWYJLyogWC9PcGVuLCBidXQgbm90IGlzc3VlIDYgYW5kIG5vdCBmb3IgR05VLiAgKi8KKworLyogSWYgd2UgYXJlIGNvbXBpbGluZyB3aXRoIG9wdGltaXppbmcgcmVhZCB0aGlzIGZpbGUuICBJdCBjb250YWlucworICAgc2V2ZXJhbCBvcHRpbWl6aW5nIGlubGluZSBmdW5jdGlvbnMgYW5kIG1hY3Jvcy4gICovCisjaWZkZWYgX19VU0VfRVhURVJOX0lOTElORVMKKyMgaW5jbHVkZSA8Yml0cy9zdGRpby5oPgorI2VuZGlmCisjaWYgX19VU0VfRk9SVElGWV9MRVZFTCA+IDAgJiYgZGVmaW5lZCBfX2V4dGVybl9hbHdheXNfaW5saW5lCisjIGluY2x1ZGUgPGJpdHMvc3RkaW8yLmg+CisjZW5kaWYKKyNpZmRlZiBfX0xEQkxfQ09NUEFUCisjIGluY2x1ZGUgPGJpdHMvc3RkaW8tbGRibC5oPgorI2VuZGlmCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiA8c3RkaW8uaD4gaW5jbHVkZWQuICAqLworCisjZW5kaWYgLyogIV9TVERJT19IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3RkaW9fZXh0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3RkaW9fZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNkMTJlMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zdGRpb19leHQuaApAQCAtMCwwICsxLDg3IEBACisvKiBGdW5jdGlvbnMgdG8gYWNjZXNzIEZJTEUgc3RydWN0dXJlIGludGVybmFscy4KKyAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyogVGhpcyBoZWFkZXIgY29udGFpbnMgdGhlIHNhbWUgZGVmaW5pdGlvbnMgYXMgdGhlIGhlYWRlciBvZiB0aGUgc2FtZSBuYW1lCisgICBvbiBTdW4ncyBTb2xhcmlzIE9TLiAgKi8KKworI2lmbmRlZiBfU1RESU9fRVhUX0gKKyNkZWZpbmUgX1NURElPX0VYVF9ICTEKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2VudW0KK3sKKyAgLyogUXVlcnkgY3VycmVudCBzdGF0ZSBvZiB0aGUgbG9ja2luZyBzdGF0dXMuICAqLworICBGU0VUTE9DS0lOR19RVUVSWSA9IDAsCisjZGVmaW5lIEZTRVRMT0NLSU5HX1FVRVJZCUZTRVRMT0NLSU5HX1FVRVJZCisgIC8qIFRoZSBsaWJyYXJ5IHByb3RlY3RzIGFsbCB1c2VzIG9mIHRoZSBzdHJlYW0gZnVuY3Rpb25zLCBleGNlcHQgZm9yCisgICAgIHVzZXMgb2YgdGhlICpfdW5sb2NrZWQgZnVuY3Rpb25zLCBieSBjYWxscyBlcXVpdmFsZW50IHRvIGZsb2NrZmlsZSgpLiAgKi8KKyAgRlNFVExPQ0tJTkdfSU5URVJOQUwsCisjZGVmaW5lIEZTRVRMT0NLSU5HX0lOVEVSTkFMCUZTRVRMT0NLSU5HX0lOVEVSTkFMCisgIC8qIFRoZSB1c2VyIHdpbGwgdGFrZSBjYXJlIG9mIGxvY2tpbmcuICAqLworICBGU0VUTE9DS0lOR19CWUNBTExFUgorI2RlZmluZSBGU0VUTE9DS0lOR19CWUNBTExFUglGU0VUTE9DS0lOR19CWUNBTExFUgorfTsKKworCitfX0JFR0lOX0RFQ0xTCisKKy8qIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIG9mIEZQIGluIGJ5dGVzIGN1cnJlbnRseSBpbiB1c2UgYnkKKyAgIHRoZSBnaXZlbiBzdHJlYW0uICAqLworZXh0ZXJuIHNpemVfdCBfX2ZidWZzaXplIChGSUxFICpfX2ZwKSBfX1RIUk9XOworCisKKy8qIFJldHVybiBub24temVybyB2YWx1ZSBpZmYgdGhlIHN0cmVhbSBGUCBpcyBvcGVuZWQgcmVhZG9ubHksIG9yIGlmIHRoZQorICAgbGFzdCBvcGVyYXRpb24gb24gdGhlIHN0cmVhbSB3YXMgYSByZWFkIG9wZXJhdGlvbi4gICovCitleHRlcm4gaW50IF9fZnJlYWRpbmcgKEZJTEUgKl9fZnApIF9fVEhST1c7CisKKy8qIFJldHVybiBub24temVybyB2YWx1ZSBpZmYgdGhlIHN0cmVhbSBGUCBpcyBvcGVuZWQgd3JpdGUtb25seSBvcgorICAgYXBwZW5kLW9ubHksIG9yIGlmIHRoZSBsYXN0IG9wZXJhdGlvbiBvbiB0aGUgc3RyZWFtIHdhcyBhIHdyaXRlCisgICBvcGVyYXRpb24uICAqLworZXh0ZXJuIGludCBfX2Z3cml0aW5nIChGSUxFICpfX2ZwKSBfX1RIUk9XOworCisKKy8qIFJldHVybiBub24temVybyB2YWx1ZSBpZmYgc3RyZWFtIEZQIGlzIG5vdCBvcGVuZWQgd3JpdGUtb25seSBvcgorICAgYXBwZW5kLW9ubHkuICAqLworZXh0ZXJuIGludCBfX2ZyZWFkYWJsZSAoRklMRSAqX19mcCkgX19USFJPVzsKKworLyogUmV0dXJuIG5vbi16ZXJvIHZhbHVlIGlmZiBzdHJlYW0gRlAgaXMgbm90IG9wZW5lZCByZWFkLW9ubHkuICAqLworZXh0ZXJuIGludCBfX2Z3cml0YWJsZSAoRklMRSAqX19mcCkgX19USFJPVzsKKworCisvKiBSZXR1cm4gbm9uLXplcm8gdmFsdWUgaWZmIHRoZSBzdHJlYW0gRlAgaXMgbGluZS1idWZmZXJlZC4gICovCitleHRlcm4gaW50IF9fZmxiZiAoRklMRSAqX19mcCkgX19USFJPVzsKKworCisvKiBEaXNjYXJkIGFsbCBwZW5kaW5nIGJ1ZmZlcmVkIEkvTyBvbiB0aGUgc3RyZWFtIEZQLiAgKi8KK2V4dGVybiB2b2lkIF9fZnB1cmdlIChGSUxFICpfX2ZwKSBfX1RIUk9XOworCisvKiBSZXR1cm4gYW1vdW50IG9mIG91dHB1dCBpbiBieXRlcyBwZW5kaW5nIG9uIGEgc3RyZWFtIEZQLiAgKi8KK2V4dGVybiBzaXplX3QgX19mcGVuZGluZyAoRklMRSAqX19mcCkgX19USFJPVzsKKworLyogRmx1c2ggYWxsIGxpbmUtYnVmZmVyZWQgZmlsZXMuICAqLworZXh0ZXJuIHZvaWQgX2ZsdXNobGJmICh2b2lkKTsKKworCisvKiBTZXQgbG9ja2luZyBzdGF0dXMgb2Ygc3RyZWFtIEZQIHRvIFRZUEUuICAqLworZXh0ZXJuIGludCBfX2ZzZXRsb2NraW5nIChGSUxFICpfX2ZwLCBpbnQgX190eXBlKSBfX1RIUk9XOworCitfX0VORF9ERUNMUworCisjZW5kaWYJLyogc3RkaW9fZXh0LmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zdGRsaWIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zdGRsaWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzJlN2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N0ZGxpYi5oCkBAIC0wLDAgKzEsODkzIEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTEtMjAwMywyMDA0LDIwMDUsMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisvKgorICoJSVNPIEM5OSBTdGFuZGFyZDogNy4yMCBHZW5lcmFsIHV0aWxpdGllcwk8c3RkbGliLmg+CisgKi8KKworI2lmbmRlZglfU1RETElCX0gKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKy8qIEdldCBzaXplX3QsIHdjaGFyX3QgYW5kIE5VTEwgZnJvbSA8c3RkZGVmLmg+LiAgKi8KKyNkZWZpbmUJCV9fbmVlZF9zaXplX3QKKyNpZm5kZWYgX19uZWVkX21hbGxvY19hbmRfY2FsbG9jCisjIGRlZmluZQlfX25lZWRfd2NoYXJfdAorIyBkZWZpbmUJX19uZWVkX05VTEwKKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCitfX0JFR0lOX0RFQ0xTCisKKyNpZm5kZWYgX19uZWVkX21hbGxvY19hbmRfY2FsbG9jCisjZGVmaW5lCV9TVERMSUJfSAkxCisKKyNpZiBkZWZpbmVkIF9fVVNFX1hPUEVOICYmICFkZWZpbmVkIF9TWVNfV0FJVF9ICisvKiBYUEcgcmVxdWlyZXMgYSBmZXcgc3ltYm9scyBmcm9tIDxzeXMvd2FpdC5oPiBiZWluZyBkZWZpbmVkLiAgKi8KKyMgaW5jbHVkZSA8Yml0cy93YWl0ZmxhZ3MuaD4KKyMgaW5jbHVkZSA8Yml0cy93YWl0c3RhdHVzLmg+CisKKyMgaWZkZWYgX19VU0VfQlNECisKKy8qIExvdHMgb2YgaGFpciB0byBhbGxvdyB0cmFkaXRpb25hbCBCU0QgdXNlIG9mIGB1bmlvbiB3YWl0JworICAgYXMgd2VsbCBhcyBQT1NJWC4xIHVzZSBvZiBgaW50JyBmb3IgdGhlIHN0YXR1cyB3b3JkLiAgKi8KKworIyAgaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAhZGVmaW5lZCBfX2NwbHVzcGx1cworIyAgIGRlZmluZSBfX1dBSVRfSU5UKHN0YXR1cykJCQkJCQkgICAgICBcCisgIChfX2V4dGVuc2lvbl9fICh7IHVuaW9uIHsgX190eXBlb2Yoc3RhdHVzKSBfX2luOyBpbnQgX19pOyB9IF9fdTsJICAgICAgXAorCQkgICAgX191Ll9faW4gPSAoc3RhdHVzKTsgX191Ll9faTsgfSkpCisjICBlbHNlCisjICAgZGVmaW5lIF9fV0FJVF9JTlQoc3RhdHVzKQkoKihpbnQgKikgJihzdGF0dXMpKQorIyAgZW5kaWYKKworLyogVGhpcyBpcyB0aGUgdHlwZSBvZiB0aGUgYXJndW1lbnQgdG8gYHdhaXQnLiAgVGhlIGZ1bmt5IHVuaW9uCisgICBjYXVzZXMgcmVkZWNsYXJhdGlvbnMgd2l0aCBldGhlciBgaW50IConIG9yIGB1bmlvbiB3YWl0IConIHRvIGJlCisgICBhbGxvd2VkIHdpdGhvdXQgY29tcGxhaW50LiAgX19XQUlUX1NUQVRVU19ERUZOIGlzIHRoZSB0eXBlIHVzZWQgaW4KKyAgIHRoZSBhY3R1YWwgZnVuY3Rpb24gZGVmaW5pdGlvbnMuICAqLworCisjICBpZiAhZGVmaW5lZCBfX0dOVUNfXyB8fCBfX0dOVUNfXyA8IDIgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworIyAgIGRlZmluZSBfX1dBSVRfU1RBVFVTCXZvaWQgKgorIyAgIGRlZmluZSBfX1dBSVRfU1RBVFVTX0RFRk4Jdm9pZCAqCisjICBlbHNlCisvKiBUaGlzIHdvcmtzIGluIEdDQyAyLjYuMSBhbmQgbGF0ZXIuICAqLwordHlwZWRlZiB1bmlvbgorICB7CisgICAgdW5pb24gd2FpdCAqX191cHRyOworICAgIGludCAqX19pcHRyOworICB9IF9fV0FJVF9TVEFUVVMgX19hdHRyaWJ1dGVfXyAoKF9fdHJhbnNwYXJlbnRfdW5pb25fXykpOworIyAgIGRlZmluZSBfX1dBSVRfU1RBVFVTX0RFRk4JaW50ICoKKyMgIGVuZGlmCisKKyMgZWxzZSAvKiBEb24ndCB1c2UgQlNELiAgKi8KKworIyAgZGVmaW5lIF9fV0FJVF9JTlQoc3RhdHVzKQkoc3RhdHVzKQorIyAgZGVmaW5lIF9fV0FJVF9TVEFUVVMJCWludCAqCisjICBkZWZpbmUgX19XQUlUX1NUQVRVU19ERUZOCWludCAqCisKKyMgZW5kaWYgLyogVXNlIEJTRC4gICovCisKKy8qIERlZmluZSB0aGUgbWFjcm9zIDxzeXMvd2FpdC5oPiBhbHNvIHdvdWxkIGRlZmluZSB0aGlzIHdheS4gICovCisjIGRlZmluZSBXRVhJVFNUQVRVUyhzdGF0dXMpCV9fV0VYSVRTVEFUVVMoX19XQUlUX0lOVChzdGF0dXMpKQorIyBkZWZpbmUgV1RFUk1TSUcoc3RhdHVzKQlfX1dURVJNU0lHKF9fV0FJVF9JTlQoc3RhdHVzKSkKKyMgZGVmaW5lIFdTVE9QU0lHKHN0YXR1cykJX19XU1RPUFNJRyhfX1dBSVRfSU5UKHN0YXR1cykpCisjIGRlZmluZSBXSUZFWElURUQoc3RhdHVzKQlfX1dJRkVYSVRFRChfX1dBSVRfSU5UKHN0YXR1cykpCisjIGRlZmluZSBXSUZTSUdOQUxFRChzdGF0dXMpCV9fV0lGU0lHTkFMRUQoX19XQUlUX0lOVChzdGF0dXMpKQorIyBkZWZpbmUgV0lGU1RPUFBFRChzdGF0dXMpCV9fV0lGU1RPUFBFRChfX1dBSVRfSU5UKHN0YXR1cykpCisjIGlmZGVmIF9fV0lGQ09OVElOVUVECisjICBkZWZpbmUgV0lGQ09OVElOVUVEKHN0YXR1cykJX19XSUZDT05USU5VRUQoX19XQUlUX0lOVChzdGF0dXMpKQorIyBlbmRpZgorI2VuZGlmCS8qIFgvT3BlbiBhbmQgPHN5cy93YWl0Lmg+IG5vdCBpbmNsdWRlZC4gICovCisKK19fQkVHSU5fTkFNRVNQQUNFX1NURAorLyogUmV0dXJuZWQgYnkgYGRpdicuICAqLwordHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIGludCBxdW90OwkJCS8qIFF1b3RpZW50LiAgKi8KKyAgICBpbnQgcmVtOwkJCS8qIFJlbWFpbmRlci4gICovCisgIH0gZGl2X3Q7CisKKy8qIFJldHVybmVkIGJ5IGBsZGl2Jy4gICovCisjaWZuZGVmIF9fbGRpdl90X2RlZmluZWQKK3R5cGVkZWYgc3RydWN0CisgIHsKKyAgICBsb25nIGludCBxdW90OwkJLyogUXVvdGllbnQuICAqLworICAgIGxvbmcgaW50IHJlbTsJCS8qIFJlbWFpbmRlci4gICovCisgIH0gbGRpdl90OworIyBkZWZpbmUgX19sZGl2X3RfZGVmaW5lZAkxCisjZW5kaWYKK19fRU5EX05BTUVTUEFDRV9TVEQKKworI2lmIGRlZmluZWQgX19VU0VfSVNPQzk5ICYmICFkZWZpbmVkIF9fbGxkaXZfdF9kZWZpbmVkCitfX0JFR0lOX05BTUVTUEFDRV9DOTkKKy8qIFJldHVybmVkIGJ5IGBsbGRpdicuICAqLworX19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgbG9uZyBsb25nIGludCBxdW90OwkJLyogUXVvdGllbnQuICAqLworICAgIGxvbmcgbG9uZyBpbnQgcmVtOwkJLyogUmVtYWluZGVyLiAgKi8KKyAgfSBsbGRpdl90OworIyBkZWZpbmUgX19sbGRpdl90X2RlZmluZWQJMQorX19FTkRfTkFNRVNQQUNFX0M5OQorI2VuZGlmCisKKworLyogVGhlIGxhcmdlc3QgbnVtYmVyIHJhbmQgd2lsbCByZXR1cm4gKHNhbWUgYXMgSU5UX01BWCkuICAqLworI2RlZmluZQlSQU5EX01BWAkyMTQ3NDgzNjQ3CisKKworLyogV2UgZGVmaW5lIHRoZXNlIHRoZSBzYW1lIGZvciBhbGwgbWFjaGluZXMuCisgICBDaGFuZ2VzIGZyb20gdGhpcyB0byB0aGUgb3V0c2lkZSB3b3JsZCBzaG91bGQgYmUgZG9uZSBpbiBgX2V4aXQnLiAgKi8KKyNkZWZpbmUJRVhJVF9GQUlMVVJFCTEJLyogRmFpbGluZyBleGl0IHN0YXR1cy4gICovCisjZGVmaW5lCUVYSVRfU1VDQ0VTUwkwCS8qIFN1Y2Nlc3NmdWwgZXhpdCBzdGF0dXMuICAqLworCisKKy8qIE1heGltdW0gbGVuZ3RoIG9mIGEgbXVsdGlieXRlIGNoYXJhY3RlciBpbiB0aGUgY3VycmVudCBsb2NhbGUuICAqLworI2RlZmluZQlNQl9DVVJfTUFYCShfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICgpKQorZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lkKSBfX1RIUk9XIF9fd3VyOworCisKK19fQkVHSU5fTkFNRVNQQUNFX1NURAorLyogQ29udmVydCBhIHN0cmluZyB0byBhIGZsb2F0aW5nLXBvaW50IG51bWJlci4gICovCitleHRlcm4gZG91YmxlIGF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX3B1cmVfXyBfX25vbm51bGwgKCgxKSkgX193dXI7CisvKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGFuIGludGVnZXIuICAqLworZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9wdXJlX18gX19ub25udWxsICgoMSkpIF9fd3VyOworLyogQ29udmVydCBhIHN0cmluZyB0byBhIGxvbmcgaW50ZWdlci4gICovCitleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfcHVyZV9fIF9fbm9ubnVsbCAoKDEpKSBfX3d1cjsKK19fRU5EX05BTUVTUEFDRV9TVEQKKworI2lmIGRlZmluZWQgX19VU0VfSVNPQzk5IHx8IChkZWZpbmVkIF9fR0xJQkNfSEFWRV9MT05HX0xPTkcgJiYgZGVmaW5lZCBfX1VTRV9NSVNDKQorX19CRUdJTl9OQU1FU1BBQ0VfQzk5CisvKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgbG9uZyBsb25nIGludGVnZXIuICAqLworX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBhdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfcHVyZV9fIF9fbm9ubnVsbCAoKDEpKSBfX3d1cjsKK19fRU5EX05BTUVTUEFDRV9DOTkKKyNlbmRpZgorCitfX0JFR0lOX05BTUVTUEFDRV9TVEQKKy8qIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBmbG9hdGluZy1wb2ludCBudW1iZXIuICAqLworZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCisJCSAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKSBfX3d1cjsKK19fRU5EX05BTUVTUEFDRV9TVEQKKworI2lmZGVmCV9fVVNFX0lTT0M5OQorX19CRUdJTl9OQU1FU1BBQ0VfQzk5CisvKiBMaWtld2lzZSBmb3IgYGZsb2F0JyBhbmQgYGxvbmcgZG91YmxlJyBzaXplcyBvZiBmbG9hdGluZy1wb2ludCBudW1iZXJzLiAgKi8KK2V4dGVybiBmbG9hdCBzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCisJCSAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIF9fVEhST1cgX19ub25udWxsICgoMSkpIF9fd3VyOworCitleHRlcm4gbG9uZyBkb3VibGUgc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKKwkJCSAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSkgX193dXI7CitfX0VORF9OQU1FU1BBQ0VfQzk5CisjZW5kaWYKKworX19CRUdJTl9OQU1FU1BBQ0VfU1RECisvKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgbG9uZyBpbnRlZ2VyLiAgKi8KK2V4dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCisJCQljaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSkgX193dXI7CisvKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGFuIHVuc2lnbmVkIGxvbmcgaW50ZWdlci4gICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKKwkJCQkgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKSBfX3d1cjsKK19fRU5EX05BTUVTUEFDRV9TVEQKKworI2lmIGRlZmluZWQgX19HTElCQ19IQVZFX0xPTkdfTE9ORyAmJiBkZWZpbmVkIF9fVVNFX0JTRAorLyogQ29udmVydCBhIHN0cmluZyB0byBhIHF1YWR3b3JkIGludGVnZXIuICAqLworX19leHRlbnNpb25fXworZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAorCQkJICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSkgX193dXI7CisvKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGFuIHVuc2lnbmVkIHF1YWR3b3JkIGludGVnZXIuICAqLworX19leHRlbnNpb25fXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKKwkJCQkgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpIF9fd3VyOworI2VuZGlmIC8qIEdDQyBhbmQgdXNlIEJTRC4gICovCisKKyNpZiBkZWZpbmVkIF9fVVNFX0lTT0M5OSB8fCAoZGVmaW5lZCBfX0dMSUJDX0hBVkVfTE9OR19MT05HICYmIGRlZmluZWQgX19VU0VfTUlTQykKK19fQkVHSU5fTkFNRVNQQUNFX0M5OQorLyogQ29udmVydCBhIHN0cmluZyB0byBhIHF1YWR3b3JkIGludGVnZXIuICAqLworX19leHRlbnNpb25fXworZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKKwkJCSAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKSBfX3d1cjsKKy8qIENvbnZlcnQgYSBzdHJpbmcgdG8gYW4gdW5zaWduZWQgcXVhZHdvcmQgaW50ZWdlci4gICovCitfX2V4dGVuc2lvbl9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKKwkJCQkJY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpIF9fd3VyOworX19FTkRfTkFNRVNQQUNFX0M5OQorI2VuZGlmIC8qIElTTyBDOTkgb3IgR0NDIGFuZCB1c2UgTUlTQy4gICovCisKKworI2lmZGVmIF9fVVNFX0dOVQorLyogVGhlIGNvbmNlcHQgb2Ygb25lIHN0YXRpYyBsb2NhbGUgcGVyIGNhdGVnb3J5IGlzIG5vdCB2ZXJ5IHdlbGwKKyAgIHRob3VnaHQgb3V0LiAgTWFueSBhcHBsaWNhdGlvbnMgd2lsbCBuZWVkIHRvIHByb2Nlc3MgaXRzIGRhdGEgdXNpbmcKKyAgIGluZm9ybWF0aW9uIGZyb20gc2V2ZXJhbCBkaWZmZXJlbnQgbG9jYWxlcy4gIEFub3RoZXIgYXBwbGljYXRpb24gaXMKKyAgIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW50ZXJuYXRpb25hbGl6YXRpb24gaGFuZGxpbmcgaW4gdGhlCisgICB1cGNvbWluZyBJU08gQysrIHN0YW5kYXJkIGxpYnJhcnkuICBUbyBzdXBwb3J0IHRoaXMgYW5vdGhlciBzZXQgb2YKKyAgIHRoZSBmdW5jdGlvbnMgdXNpbmcgbG9jYWxlIGRhdGEgZXhpc3Qgd2hpY2ggaGF2ZSBhbiBhZGRpdGlvbmFsCisgICBhcmd1bWVudC4KKworICAgQXR0ZW50aW9uOiBhbGwgdGhlc2UgZnVuY3Rpb25zIGFyZSAqbm90KiBzdGFuZGFyZGl6ZWQgaW4gYW55IGZvcm0uCisgICBUaGlzIGlzIGEgcHJvb2Ytb2YtY29uY2VwdCBpbXBsZW1lbnRhdGlvbi4gICovCisKKy8qIFN0cnVjdHVyZSBmb3IgcmVlbnRyYW50IGxvY2FsZSB1c2luZyBmdW5jdGlvbnMuICBUaGlzIGlzIGFuCisgICAoYWxtb3N0KSBvcGFxdWUgdHlwZSBmb3IgdGhlIHVzZXIgbGV2ZWwgcHJvZ3JhbXMuICAqLworIyBpbmNsdWRlIDx4bG9jYWxlLmg+CisKKy8qIFNwZWNpYWwgdmVyc2lvbnMgb2YgdGhlIGZ1bmN0aW9ucyBhYm92ZSB3aGljaCB0YWtlIHRoZSBsb2NhbGUgdG8KKyAgIHVzZSBhcyBhbiBhZGRpdGlvbmFsIHBhcmFtZXRlci4gICovCitleHRlcm4gbG9uZyBpbnQgc3RydG9sX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCisJCQkgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAorCQkJICBfX2xvY2FsZV90IF9fbG9jKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDQpKSBfX3d1cjsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKKwkJCQkgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCisJCQkJICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSwgNCkpIF9fd3VyOworCitfX2V4dGVuc2lvbl9fCitleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCisJCQkJY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCisJCQkJX19sb2NhbGVfdCBfX2xvYykKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxLCA0KSkgX193dXI7CisKK19fZXh0ZW5zaW9uX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCisJCQkJCSAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCisJCQkJCSAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxLCA0KSkgX193dXI7CisKK2V4dGVybiBkb3VibGUgc3RydG9kX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCisJCQljaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxLCAzKSkgX193dXI7CisKK2V4dGVybiBmbG9hdCBzdHJ0b2ZfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKKwkJICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDMpKSBfX3d1cjsKKworZXh0ZXJuIGxvbmcgZG91YmxlIHN0cnRvbGRfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKKwkJCSAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAorCQkJICAgICAgX19sb2NhbGVfdCBfX2xvYykKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxLCAzKSkgX193dXI7CisjZW5kaWYgLyogR05VICovCisKKworI2lmZGVmIF9fVVNFX0VYVEVSTl9JTkxJTkVTCitfX0JFR0lOX05BTUVTUEFDRV9TVEQKK19fZXh0ZXJuX2lubGluZSBkb3VibGUKK19fTlRIIChhdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikpCit7CisgIHJldHVybiBzdHJ0b2QgKF9fbnB0ciwgKGNoYXIgKiopIE5VTEwpOworfQorX19leHRlcm5faW5saW5lIGludAorX19OVEggKGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSkKK3sKKyAgcmV0dXJuIChpbnQpIHN0cnRvbCAoX19ucHRyLCAoY2hhciAqKikgTlVMTCwgMTApOworfQorX19leHRlcm5faW5saW5lIGxvbmcgaW50CitfX05USCAoYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpKQoreworICByZXR1cm4gc3RydG9sIChfX25wdHIsIChjaGFyICoqKSBOVUxMLCAxMCk7Cit9CitfX0VORF9OQU1FU1BBQ0VfU1RECisKKyMgaWYgZGVmaW5lZCBfX1VTRV9NSVNDIHx8IGRlZmluZWQgX19VU0VfSVNPQzk5CitfX0JFR0lOX05BTUVTUEFDRV9DOTkKK19fZXh0ZW5zaW9uX18gX19leHRlcm5faW5saW5lIGxvbmcgbG9uZyBpbnQKK19fTlRIIChhdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpKQoreworICByZXR1cm4gc3RydG9sbCAoX19ucHRyLCAoY2hhciAqKikgTlVMTCwgMTApOworfQorX19FTkRfTkFNRVNQQUNFX0M5OQorIyBlbmRpZgorI2VuZGlmIC8qIE9wdGltaXppbmcgYW5kIElubGluaW5nLiAgKi8KKworCisjaWYgZGVmaW5lZCBfX1VTRV9TVklEIHx8IGRlZmluZWQgX19VU0VfWE9QRU5fRVhURU5ERUQKKy8qIENvbnZlcnQgTiB0byBiYXNlIDY0IHVzaW5nIHRoZSBkaWdpdHMgIi4vMC05QS1aYS16IiwgbGVhc3Qtc2lnbmlmaWNhbnQKKyAgIGRpZ2l0IGZpcnN0LiAgUmV0dXJucyBhIHBvaW50ZXIgdG8gc3RhdGljIHN0b3JhZ2Ugb3ZlcndyaXR0ZW4gYnkgdGhlCisgICBuZXh0IGNhbGwuICAqLworZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgX19USFJPVyBfX3d1cjsKKworLyogUmVhZCBhIG51bWJlciBmcm9tIGEgc3RyaW5nIFMgaW4gYmFzZSA2NCBhcyBhYm92ZS4gICovCitleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFyICpfX3MpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfcHVyZV9fIF9fbm9ubnVsbCAoKDEpKSBfX3d1cjsKKworI2VuZGlmCS8qIFVzZSBTVklEIHx8IGV4dGVuZGVkIFgvT3Blbi4gICovCisKKyNpZiBkZWZpbmVkIF9fVVNFX1NWSUQgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTl9FWFRFTkRFRCB8fCBkZWZpbmVkIF9fVVNFX0JTRAorIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4JLyogd2UgbmVlZCBpbnQzMl90Li4uICovCisKKy8qIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgYWN0dWFsbHkgZG8gdGhpbmdzLiAgVGhlIGByYW5kb20nLCBgc3JhbmRvbScsCisgICBgaW5pdHN0YXRlJyBhbmQgYHNldHN0YXRlJyBmdW5jdGlvbnMgYXJlIHRob3NlIGZyb20gQlNEIFVuaWNlcy4KKyAgIFRoZSBgcmFuZCcgYW5kIGBzcmFuZCcgZnVuY3Rpb25zIGFyZSByZXF1aXJlZCBieSB0aGUgQU5TSSBzdGFuZGFyZC4KKyAgIFdlIHByb3ZpZGUgYm90aCBpbnRlcmZhY2VzIHRvIHRoZSBzYW1lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLiAgKi8KKy8qIFJldHVybiBhIHJhbmRvbSBsb25nIGludGVnZXIgYmV0d2VlbiAwIGFuZCBSQU5EX01BWCBpbmNsdXNpdmUuICAqLworZXh0ZXJuIGxvbmcgaW50IHJhbmRvbSAodm9pZCkgX19USFJPVzsKKworLyogU2VlZCB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyLiAgKi8KK2V4dGVybiB2b2lkIHNyYW5kb20gKHVuc2lnbmVkIGludCBfX3NlZWQpIF9fVEhST1c7CisKKy8qIEluaXRpYWxpemUgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIHRvIHVzZSBzdGF0ZSBidWZmZXIgU1RBVEVCVUYsCisgICBvZiBsZW5ndGggU1RBVEVMRU4sIGFuZCBzZWVkIGl0IHdpdGggU0VFRC4gIE9wdGltYWwgbGVuZ3RocyBhcmUgOCwgMTYsCisgICAzMiwgNjQsIDEyOCBhbmQgMjU2LCB0aGUgYmlnZ2VyIHRoZSBiZXR0ZXI7IHZhbHVlcyBsZXNzIHRoYW4gOCB3aWxsCisgICBjYXVzZSBhbiBlcnJvciBhbmQgdmFsdWVzIGdyZWF0ZXIgdGhhbiAyNTYgd2lsbCBiZSByb3VuZGVkIGRvd24uICAqLworZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKKwkJCXNpemVfdCBfX3N0YXRlbGVuKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDIpKTsKKworLyogU3dpdGNoIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB0byBzdGF0ZSBidWZmZXIgU1RBVEVCVUYsCisgICB3aGljaCBzaG91bGQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgYnkgYGluaXRzdGF0ZScuICAqLworZXh0ZXJuIGNoYXIgKnNldHN0YXRlIChjaGFyICpfX3N0YXRlYnVmKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworCisjIGlmZGVmIF9fVVNFX01JU0MKKy8qIFJlZW50cmFudCB2ZXJzaW9ucyBvZiB0aGUgYHJhbmRvbScgZmFtaWx5IG9mIGZ1bmN0aW9ucy4KKyAgIFRoZXNlIGZ1bmN0aW9ucyBhbGwgdXNlIHRoZSBmb2xsb3dpbmcgZGF0YSBzdHJ1Y3R1cmUgdG8gY29udGFpbgorICAgc3RhdGUsIHJhdGhlciB0aGFuIGdsb2JhbCBzdGF0ZSB2YXJpYWJsZXMuICAqLworCitzdHJ1Y3QgcmFuZG9tX2RhdGEKKyAgeworICAgIGludDMyX3QgKmZwdHI7CQkvKiBGcm9udCBwb2ludGVyLiAgKi8KKyAgICBpbnQzMl90ICpycHRyOwkJLyogUmVhciBwb2ludGVyLiAgKi8KKyAgICBpbnQzMl90ICpzdGF0ZTsJCS8qIEFycmF5IG9mIHN0YXRlIHZhbHVlcy4gICovCisgICAgaW50IHJhbmRfdHlwZTsJCS8qIFR5cGUgb2YgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuICAqLworICAgIGludCByYW5kX2RlZzsJCS8qIERlZ3JlZSBvZiByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4gICovCisgICAgaW50IHJhbmRfc2VwOwkJLyogRGlzdGFuY2UgYmV0d2VlbiBmcm9udCBhbmQgcmVhci4gICovCisgICAgaW50MzJfdCAqZW5kX3B0cjsJCS8qIFBvaW50ZXIgYmVoaW5kIHN0YXRlIHRhYmxlLiAgKi8KKyAgfTsKKworZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmLAorCQkgICAgIGludDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1bHQpIF9fVEhST1cgX19ub25udWxsICgoMSwgMikpOworCitleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgyKSk7CisKK2V4dGVybiBpbnQgaW5pdHN0YXRlX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKKwkJCXNpemVfdCBfX3N0YXRlbGVuLAorCQkJc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDIsIDQpKTsKKworZXh0ZXJuIGludCBzZXRzdGF0ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCisJCSAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSwgMikpOworIyBlbmRpZgkvKiBVc2UgbWlzYy4gICovCisjZW5kaWYJLyogVXNlIFNWSUQgfHwgZXh0ZW5kZWQgWC9PcGVuIHx8IEJTRC4gKi8KKworCitfX0JFR0lOX05BTUVTUEFDRV9TVEQKKy8qIFJldHVybiBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgUkFORF9NQVggaW5jbHVzaXZlLiAgKi8KK2V4dGVybiBpbnQgcmFuZCAodm9pZCkgX19USFJPVzsKKy8qIFNlZWQgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIHdpdGggdGhlIGdpdmVuIG51bWJlci4gICovCitleHRlcm4gdm9pZCBzcmFuZCAodW5zaWduZWQgaW50IF9fc2VlZCkgX19USFJPVzsKK19fRU5EX05BTUVTUEFDRV9TVEQKKworI2lmZGVmIF9fVVNFX1BPU0lYCisvKiBSZWVudHJhbnQgaW50ZXJmYWNlIGFjY29yZGluZyB0byBQT1NJWC4xLiAgKi8KK2V4dGVybiBpbnQgcmFuZF9yICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkgX19USFJPVzsKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkIF9fVVNFX1NWSUQgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTgorLyogU3lzdGVtIFYgc3R5bGUgNDgtYml0IHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGZ1bmN0aW9ucy4gICovCisKKy8qIFJldHVybiBub24tbmVnYXRpdmUsIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgaW4gWzAuMCwxLjApLiAgKi8KK2V4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgX19USFJPVzsKK2V4dGVybiBkb3VibGUgZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisvKiBSZXR1cm4gbm9uLW5lZ2F0aXZlLCBsb25nIGludGVnZXIgaW4gWzAsMl4zMSkuICAqLworZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIF9fVEhST1c7CitleHRlcm4gbG9uZyBpbnQgbnJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisvKiBSZXR1cm4gc2lnbmVkLCBsb25nIGludGVnZXJzIGluIFstMl4zMSwyXjMxKS4gICovCitleHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAodm9pZCkgX19USFJPVzsKK2V4dGVybiBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKy8qIFNlZWQgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuICAqLworZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSBfX1RIUk9XOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKK2V4dGVybiB2b2lkIGxjb25nNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworIyBpZmRlZiBfX1VTRV9NSVNDCisvKiBEYXRhIHN0cnVjdHVyZSBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRocmVhZCBzYWZlIHZlcnNpb25zLiAgVGhpcworICAgdHlwZSBpcyB0byBiZSByZWdhcmRlZCBhcyBvcGFxdWUuICBJdCdzIG9ubHkgZXhwb3J0ZWQgYmVjYXVzZSB1c2VycworICAgaGF2ZSB0byBhbGxvY2F0ZSBvYmplY3RzIG9mIHRoaXMgdHlwZS4gICovCitzdHJ1Y3QgZHJhbmQ0OF9kYXRhCisgIHsKKyAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX194WzNdOwkvKiBDdXJyZW50IHN0YXRlLiAgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19vbGRfeFszXTsgLyogT2xkIHN0YXRlLiAgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19jOwkvKiBBZGRpdGl2ZSBjb25zdC4gaW4gY29uZ3J1ZW50aWFsIGZvcm11bGEuICAqLworICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2luaXQ7CS8qIEZsYWcgZm9yIGluaXRpYWxpemluZy4gICovCisgICAgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2E7CS8qIEZhY3RvciBpbiBjb25ncnVlbnRpYWwgZm9ybXVsYS4gICovCisgIH07CisKKy8qIFJldHVybiBub24tbmVnYXRpdmUsIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgaW4gWzAuMCwxLjApLiAgKi8KK2V4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAorCQkgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIF9fVEhST1cgX19ub25udWxsICgoMSwgMikpOworZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAorCQkgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAorCQkgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIF9fVEhST1cgX19ub25udWxsICgoMSwgMikpOworCisvKiBSZXR1cm4gbm9uLW5lZ2F0aXZlLCBsb25nIGludGVnZXIgaW4gWzAsMl4zMSkuICAqLworZXh0ZXJuIGludCBscmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCisJCSAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDIpKTsKK2V4dGVybiBpbnQgbnJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKKwkJICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKKwkJICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSwgMikpOworCisvKiBSZXR1cm4gc2lnbmVkLCBsb25nIGludGVnZXJzIGluIFstMl4zMSwyXjMxKS4gICovCitleHRlcm4gaW50IG1yYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKKwkJICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSwgMikpOworZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAorCQkgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAorCQkgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxLCAyKSk7CisKKy8qIFNlZWQgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuICAqLworZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMikpOworCitleHRlcm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAorCQkgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDIpKTsKKworZXh0ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddLAorCQkgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxLCAyKSk7CisjIGVuZGlmCS8qIFVzZSBtaXNjLiAgKi8KKyNlbmRpZgkvKiBVc2UgU1ZJRCBvciBYL09wZW4uICAqLworCisjZW5kaWYgLyogZG9uJ3QganVzdCBuZWVkIG1hbGxvYyBhbmQgY2FsbG9jICovCisKKyNpZm5kZWYgX19tYWxsb2NfYW5kX2NhbGxvY19kZWZpbmVkCisjIGRlZmluZSBfX21hbGxvY19hbmRfY2FsbG9jX2RlZmluZWQKK19fQkVHSU5fTkFNRVNQQUNFX1NURAorLyogQWxsb2NhdGUgU0laRSBieXRlcyBvZiBtZW1vcnkuICAqLworZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90IF9fc2l6ZSkgX19USFJPVyBfX2F0dHJpYnV0ZV9tYWxsb2NfXyBfX3d1cjsKKy8qIEFsbG9jYXRlIE5NRU1CIGVsZW1lbnRzIG9mIFNJWkUgYnl0ZXMgZWFjaCwgYWxsIGluaXRpYWxpemVkIHRvIDAuICAqLworZXh0ZXJuIHZvaWQgKmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfbWFsbG9jX18gX193dXI7CitfX0VORF9OQU1FU1BBQ0VfU1RECisjZW5kaWYKKworI2lmbmRlZiBfX25lZWRfbWFsbG9jX2FuZF9jYWxsb2MKK19fQkVHSU5fTkFNRVNQQUNFX1NURAorLyogUmUtYWxsb2NhdGUgdGhlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJsb2NrCisgICBpbiBQVFIsIG1ha2luZyB0aGUgbmV3IGJsb2NrIFNJWkUgYnl0ZXMgbG9uZy4gICovCisvKiBfX2F0dHJpYnV0ZV9tYWxsb2NfXyBpcyBub3QgdXNlZCwgYmVjYXVzZSBpZiByZWFsbG9jIHJldHVybnMKKyAgIHRoZSBzYW1lIHBvaW50ZXIgdGhhdCB3YXMgcGFzc2VkIHRvIGl0LCBhbGlhc2luZyBuZWVkcyB0byBiZSBhbGxvd2VkCisgICBiZXR3ZWVuIG9iamVjdHMgcG9pbnRlZCBieSB0aGUgb2xkIGFuZCBuZXcgcG9pbnRlcnMuICAqLworZXh0ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX3dhcm5fdW51c2VkX3Jlc3VsdF9fOworLyogRnJlZSBhIGJsb2NrIGFsbG9jYXRlZCBieSBgbWFsbG9jJywgYHJlYWxsb2MnIG9yIGBjYWxsb2MnLiAgKi8KK2V4dGVybiB2b2lkIGZyZWUgKHZvaWQgKl9fcHRyKSBfX1RIUk9XOworX19FTkRfTkFNRVNQQUNFX1NURAorCisjaWZkZWYJX19VU0VfTUlTQworLyogRnJlZSBhIGJsb2NrLiAgQW4gYWxpYXMgZm9yIGBmcmVlJy4JKFN1biBVbmljZXMpLiAgKi8KK2V4dGVybiB2b2lkIGNmcmVlICh2b2lkICpfX3B0cikgX19USFJPVzsKKyNlbmRpZiAvKiBVc2UgbWlzYy4gICovCisKKyNpZiBkZWZpbmVkIF9fVVNFX0dOVSB8fCBkZWZpbmVkIF9fVVNFX0JTRCB8fCBkZWZpbmVkIF9fVVNFX01JU0MKKyMgaW5jbHVkZSA8YWxsb2NhLmg+CisjZW5kaWYgLyogVXNlIEdOVSwgQlNELCBvciBtaXNjLiAgKi8KKworI2lmIGRlZmluZWQgX19VU0VfQlNEIHx8IGRlZmluZWQgX19VU0VfWE9QRU5fRVhURU5ERUQKKy8qIEFsbG9jYXRlIFNJWkUgYnl0ZXMgb24gYSBwYWdlIGJvdW5kYXJ5LiAgVGhlIHN0b3JhZ2UgY2Fubm90IGJlIGZyZWVkLiAgKi8KK2V4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3NpemUpIF9fVEhST1cgX19hdHRyaWJ1dGVfbWFsbG9jX18gX193dXI7CisjZW5kaWYKKworI2lmZGVmIF9fVVNFX1hPUEVOMksKKy8qIEFsbG9jYXRlIG1lbW9yeSBvZiBTSVpFIGJ5dGVzIHdpdGggYW4gYWxpZ25tZW50IG9mIEFMSUdOTUVOVC4gICovCitleHRlcm4gaW50IHBvc2l4X21lbWFsaWduICh2b2lkICoqX19tZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSkgX193dXI7CisjZW5kaWYKKworX19CRUdJTl9OQU1FU1BBQ0VfU1RECisvKiBBYm9ydCBleGVjdXRpb24gYW5kIGdlbmVyYXRlIGEgY29yZS1kdW1wLiAgKi8KK2V4dGVybiB2b2lkIGFib3J0ICh2b2lkKSBfX1RIUk9XIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKKworCisvKiBSZWdpc3RlciBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGBleGl0JyBpcyBjYWxsZWQuICAqLworZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CitfX0VORF9OQU1FU1BBQ0VfU1RECisKKyNpZmRlZglfX1VTRV9NSVNDCisvKiBSZWdpc3RlciBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aXRoIHRoZSBzdGF0dXMKKyAgIGdpdmVuIHRvIGBleGl0JyBhbmQgdGhlIGdpdmVuIGFyZ3VtZW50LiAgKi8KK2V4dGVybiBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisjZW5kaWYKKworX19CRUdJTl9OQU1FU1BBQ0VfU1RECisvKiBDYWxsIGFsbCBmdW5jdGlvbnMgcmVnaXN0ZXJlZCB3aXRoIGBhdGV4aXQnIGFuZCBgb25fZXhpdCcsCisgICBpbiB0aGUgcmV2ZXJzZSBvZiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlIHJlZ2lzdGVyZWQKKyAgIHBlcmZvcm0gc3RkaW8gY2xlYW51cCwgYW5kIHRlcm1pbmF0ZSBwcm9ncmFtIGV4ZWN1dGlvbiB3aXRoIFNUQVRVUy4gICovCitleHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0dXMpIF9fVEhST1cgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOworX19FTkRfTkFNRVNQQUNFX1NURAorCisjaWZkZWYgX19VU0VfSVNPQzk5CitfX0JFR0lOX05BTUVTUEFDRV9DOTkKKy8qIFRlcm1pbmF0ZSB0aGUgcHJvZ3JhbSB3aXRoIFNUQVRVUyB3aXRob3V0IGNhbGxpbmcgYW55IG9mIHRoZQorICAgZnVuY3Rpb25zIHJlZ2lzdGVyZWQgd2l0aCBgYXRleGl0JyBvciBgb25fZXhpdCcuICAqLworZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBfX3N0YXR1cykgX19USFJPVyBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CitfX0VORF9OQU1FU1BBQ0VfQzk5CisjZW5kaWYKKworCitfX0JFR0lOX05BTUVTUEFDRV9TVEQKKy8qIFJldHVybiB0aGUgdmFsdWUgb2YgZW52YXJpYWJsZSBOQU1FLCBvciBOVUxMIGlmIGl0IGRvZXNuJ3QgZXhpc3QuICAqLworZXh0ZXJuIGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIF9fVEhST1cgX19ub25udWxsICgoMSkpIF9fd3VyOworX19FTkRfTkFNRVNQQUNFX1NURAorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gdGhlIGFib3ZlIGJ1dCByZXR1cm5zIE5VTEwgaWYgdGhlCisgICBwcm9ncmFtcyBpcyBydW5uaW5nIHdpdGggU1VJRCBvciBTR0lEIGVuYWJsZWQuICAqLworZXh0ZXJuIGNoYXIgKl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpIF9fd3VyOworCisjaWYgZGVmaW5lZCBfX1VTRV9TVklEIHx8IGRlZmluZWQgX19VU0VfWE9QRU4KKy8qIFRoZSBTVklEIHNheXMgdGhpcyBpcyBpbiA8c3RkaW8uaD4sIGJ1dCB0aGlzIHNlZW1zIGEgYmV0dGVyIHBsYWNlLgkqLworLyogUHV0IFNUUklORywgd2hpY2ggaXMgb2YgdGhlIGZvcm0gIk5BTUU9VkFMVUUiLCBpbiB0aGUgZW52aXJvbm1lbnQuCisgICBJZiB0aGVyZSBpcyBubyBgPScsIHJlbW92ZSBOQU1FIGZyb20gdGhlIGVudmlyb25tZW50LiAgKi8KK2V4dGVybiBpbnQgcHV0ZW52IChjaGFyICpfX3N0cmluZykgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgX19VU0VfQlNEIHx8IGRlZmluZWQgX19VU0VfWE9QRU4ySworLyogU2V0IE5BTUUgdG8gVkFMVUUgaW4gdGhlIGVudmlyb25tZW50LgorICAgSWYgUkVQTEFDRSBpcyBub256ZXJvLCBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgdmFsdWUuICAqLworZXh0ZXJuIGludCBzZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIgKl9fdmFsdWUsIGludCBfX3JlcGxhY2UpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMikpOworCisvKiBSZW1vdmUgdGhlIHZhcmlhYmxlIE5BTUUgZnJvbSB0aGUgZW52aXJvbm1lbnQuICAqLworZXh0ZXJuIGludCB1bnNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIF9fVEhST1c7CisjZW5kaWYKKworI2lmZGVmCV9fVVNFX01JU0MKKy8qIFRoZSBgY2xlYXJlbnYnIHdhcyBwbGFubmVkIHRvIGJlIGFkZGVkIHRvIFBPU0lYLjEgYnV0IHByb2JhYmx5CisgICBuZXZlciBtYWRlIGl0LiAgTmV2ZXJ0aGVsZXNzIHRoZSBQT1NJWC45IHN0YW5kYXJkIChQT1NJWCBiaW5kaW5ncworICAgZm9yIEZvcnRyYW4gNzcpIHJlcXVpcmVzIHRoaXMgZnVuY3Rpb24uICAqLworZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgX19USFJPVzsKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkIF9fVVNFX01JU0MgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTl9FWFRFTkRFRAorLyogR2VuZXJhdGUgYSB1bmlxdWUgdGVtcG9yYXJ5IGZpbGUgbmFtZSBmcm9tIFRFTVBMQVRFLgorICAgVGhlIGxhc3Qgc2l4IGNoYXJhY3RlcnMgb2YgVEVNUExBVEUgbXVzdCBiZSAiWFhYWFhYIjsKKyAgIHRoZXkgYXJlIHJlcGxhY2VkIHdpdGggYSBzdHJpbmcgdGhhdCBtYWtlcyB0aGUgZmlsZSBuYW1lIHVuaXF1ZS4KKyAgIFJldHVybnMgVEVNUExBVEUsIG9yIGEgbnVsbCBwb2ludGVyIGlmIGl0IGNhbm5vdCBnZXQgYSB1bmlxdWUgZmlsZSBuYW1lLiAgKi8KK2V4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIF9fVEhST1cgX19ub25udWxsICgoMSkpIF9fd3VyOworCisvKiBHZW5lcmF0ZSBhIHVuaXF1ZSB0ZW1wb3JhcnkgZmlsZSBuYW1lIGZyb20gVEVNUExBVEUuCisgICBUaGUgbGFzdCBzaXggY2hhcmFjdGVycyBvZiBURU1QTEFURSBtdXN0IGJlICJYWFhYWFgiOworICAgdGhleSBhcmUgcmVwbGFjZWQgd2l0aCBhIHN0cmluZyB0aGF0IG1ha2VzIHRoZSBmaWxlbmFtZSB1bmlxdWUuCisgICBSZXR1cm5zIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gb24gdGhlIGZpbGUgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcsCisgICBvciAtMSBpZiBpdCBjYW5ub3QgY3JlYXRlIGEgdW5pcXVlbHktbmFtZWQgZmlsZS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludHMgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworIyBpZm5kZWYgX19VU0VfRklMRV9PRkZTRVQ2NAorZXh0ZXJuIGludCBta3N0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSBfX25vbm51bGwgKCgxKSkgX193dXI7CisjIGVsc2UKKyMgIGlmZGVmIF9fUkVESVJFQ1QKK2V4dGVybiBpbnQgX19SRURJUkVDVCAobWtzdGVtcCwgKGNoYXIgKl9fdGVtcGxhdGUpLCBta3N0ZW1wNjQpCisgICAgIF9fbm9ubnVsbCAoKDEpKSBfX3d1cjsKKyMgIGVsc2UKKyMgICBkZWZpbmUgbWtzdGVtcCBta3N0ZW1wNjQKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmZGVmIF9fVVNFX0xBUkdFRklMRTY0CitleHRlcm4gaW50IG1rc3RlbXA2NCAoY2hhciAqX190ZW1wbGF0ZSkgX19ub25udWxsICgoMSkpIF9fd3VyOworIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9CU0QKKy8qIENyZWF0ZSBhIHVuaXF1ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZyb20gVEVNUExBVEUuCisgICBUaGUgbGFzdCBzaXggY2hhcmFjdGVycyBvZiBURU1QTEFURSBtdXN0IGJlICJYWFhYWFgiOworICAgdGhleSBhcmUgcmVwbGFjZWQgd2l0aCBhIHN0cmluZyB0aGF0IG1ha2VzIHRoZSBkaXJlY3RvcnkgbmFtZSB1bmlxdWUuCisgICBSZXR1cm5zIFRFTVBMQVRFLCBvciBhIG51bGwgcG9pbnRlciBpZiBpdCBjYW5ub3QgZ2V0IGEgdW5pcXVlIG5hbWUuCisgICBUaGUgZGlyZWN0b3J5IGlzIGNyZWF0ZWQgbW9kZSA3MDAuICAqLworZXh0ZXJuIGNoYXIgKm1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIF9fVEhST1cgX19ub25udWxsICgoMSkpIF9fd3VyOworI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIEdlbmVyYXRlIGEgdW5pcXVlIHRlbXBvcmFyeSBmaWxlIG5hbWUgZnJvbSBURU1QTEFURSBzaW1pbGFyIHRvCisgICBta3N0ZW1wLiAgQnV0IGFsbG93IHRoZSBjYWxsZXIgdG8gcGFzcyBhZGRpdGlvbmFsIGZsYWdzIHdoaWNoIGFyZQorICAgdXNlZCBpbiB0aGUgb3BlbiBjYWxsIHRvIGNyZWF0ZSB0aGUgZmlsZS4uCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnRzIGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KKyMgaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKK2V4dGVybiBpbnQgbWtvc3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUsIGludCBfX2ZsYWdzKSBfX25vbm51bGwgKCgxKSkgX193dXI7CisjIGVsc2UKKyMgIGlmZGVmIF9fUkVESVJFQ1QKK2V4dGVybiBpbnQgX19SRURJUkVDVCAobWtvc3RlbXAsIChjaGFyICpfX3RlbXBsYXRlLCBpbnQgX19mbGFncyksIG1rb3N0ZW1wNjQpCisgICAgIF9fbm9ubnVsbCAoKDEpKSBfX3d1cjsKKyMgIGVsc2UKKyMgICBkZWZpbmUgbWtvc3RlbXAgbWtvc3RlbXA2NAorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgX19VU0VfTEFSR0VGSUxFNjQKK2V4dGVybiBpbnQgbWtvc3RlbXA2NCAoY2hhciAqX190ZW1wbGF0ZSwgaW50IF9fZmxhZ3MpIF9fbm9ubnVsbCAoKDEpKSBfX3d1cjsKKyMgZW5kaWYKKyNlbmRpZgorCisKK19fQkVHSU5fTkFNRVNQQUNFX1NURAorLyogRXhlY3V0ZSB0aGUgZ2l2ZW4gbGluZSBhcyBhIHNoZWxsIGNvbW1hbmQuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGgKKyAgIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBzeXN0ZW0gKF9fY29uc3QgY2hhciAqX19jb21tYW5kKSBfX3d1cjsKK19fRU5EX05BTUVTUEFDRV9TVEQKKworCisjaWZkZWYJX19VU0VfR05VCisvKiBSZXR1cm4gYSBtYWxsb2MnZCBzdHJpbmcgY29udGFpbmluZyB0aGUgY2Fub25pY2FsIGFic29sdXRlIG5hbWUgb2YgdGhlCisgICBleGlzdGluZyBuYW1lZCBmaWxlLiAgKi8KK2V4dGVybiBjaGFyICpjYW5vbmljYWxpemVfZmlsZV9uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSkgX193dXI7CisjZW5kaWYKKworI2lmIGRlZmluZWQgX19VU0VfQlNEIHx8IGRlZmluZWQgX19VU0VfWE9QRU5fRVhURU5ERUQKKy8qIFJldHVybiB0aGUgY2Fub25pY2FsIGFic29sdXRlIG5hbWUgb2YgZmlsZSBOQU1FLiAgSWYgUkVTT0xWRUQgaXMKKyAgIG51bGwsIHRoZSByZXN1bHQgaXMgbWFsbG9jJ2Q7IG90aGVyd2lzZSwgaWYgdGhlIGNhbm9uaWNhbCBuYW1lIGlzCisgICBQQVRIX01BWCBjaGFycyBvciBtb3JlLCByZXR1cm5zIG51bGwgd2l0aCBgZXJybm8nIHNldCB0bworICAgRU5BTUVUT09MT05HOyBpZiB0aGUgbmFtZSBmaXRzIGluIGZld2VyIHRoYW4gUEFUSF9NQVggY2hhcnMsCisgICByZXR1cm5zIHRoZSBuYW1lIGluIFJFU09MVkVELiAgKi8KK2V4dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKKwkJICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgX19USFJPVyBfX3d1cjsKKyNlbmRpZgorCisKKy8qIFNob3J0aGFuZCBmb3IgdHlwZSBvZiBjb21wYXJpc29uIGZ1bmN0aW9ucy4gICovCisjaWZuZGVmIF9fQ09NUEFSX0ZOX1QKKyMgZGVmaW5lIF9fQ09NUEFSX0ZOX1QKK3R5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CisKKyMgaWZkZWYJX19VU0VfR05VCit0eXBlZGVmIF9fY29tcGFyX2ZuX3QgY29tcGFyaXNvbl9mbl90OworIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgX19VU0VfR05VCit0eXBlZGVmIGludCAoKl9fY29tcGFyX2RfZm5fdCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKiwgdm9pZCAqKTsKKyNlbmRpZgorCitfX0JFR0lOX05BTUVTUEFDRV9TVEQKKy8qIERvIGEgYmluYXJ5IHNlYXJjaCBmb3IgS0VZIGluIEJBU0UsIHdoaWNoIGNvbnNpc3RzIG9mIE5NRU1CIGVsZW1lbnRzCisgICBvZiBTSVpFIGJ5dGVzIGVhY2gsIHVzaW5nIENPTVBBUiB0byBwZXJmb3JtIHRoZSBjb21wYXJpc29ucy4gICovCitleHRlcm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tleSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCisJCSAgICAgIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKQorICAgICBfX25vbm51bGwgKCgxLCAyLCA1KSkgX193dXI7CisKKy8qIFNvcnQgTk1FTUIgZWxlbWVudHMgb2YgQkFTRSwgb2YgU0laRSBieXRlcyBlYWNoLAorICAgdXNpbmcgQ09NUEFSIHRvIHBlcmZvcm0gdGhlIGNvbXBhcmlzb25zLiAgKi8KK2V4dGVybiB2b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAorCQkgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKSBfX25vbm51bGwgKCgxLCA0KSk7CisjaWZkZWYgX19VU0VfR05VCitleHRlcm4gdm9pZCBxc29ydF9yICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAorCQkgICAgIF9fY29tcGFyX2RfZm5fdCBfX2NvbXBhciwgdm9pZCAqX19hcmcpCisgIF9fbm9ubnVsbCAoKDEsIDQpKTsKKyNlbmRpZgorCisKKy8qIFJldHVybiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgWC4gICovCitleHRlcm4gaW50IGFicyAoaW50IF9feCkgX19USFJPVyBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSkgX193dXI7CitleHRlcm4gbG9uZyBpbnQgbGFicyAobG9uZyBpbnQgX194KSBfX1RIUk9XIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKSBfX3d1cjsKK19fRU5EX05BTUVTUEFDRV9TVEQKKworI2lmZGVmIF9fVVNFX0lTT0M5OQorX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBsbGFicyAobG9uZyBsb25nIGludCBfX3gpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpIF9fd3VyOworI2VuZGlmCisKKworX19CRUdJTl9OQU1FU1BBQ0VfU1RECisvKiBSZXR1cm4gdGhlIGBkaXZfdCcsIGBsZGl2X3QnIG9yIGBsbGRpdl90JyByZXByZXNlbnRhdGlvbgorICAgb2YgdGhlIHZhbHVlIG9mIE5VTUVSIG92ZXIgREVOT00uICovCisvKiBHQ0MgbWF5IGhhdmUgYnVpbHQtaW5zIGZvciB0aGVzZSBzb21lZGF5LiAgKi8KK2V4dGVybiBkaXZfdCBkaXYgKGludCBfX251bWVyLCBpbnQgX19kZW5vbSkKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSkgX193dXI7CitleHRlcm4gbGRpdl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpIF9fd3VyOworX19FTkRfTkFNRVNQQUNFX1NURAorCisjaWZkZWYgX19VU0VfSVNPQzk5CitfX0JFR0lOX05BTUVTUEFDRV9DOTkKK19fZXh0ZW5zaW9uX18gZXh0ZXJuIGxsZGl2X3QgbGxkaXYgKGxvbmcgbG9uZyBpbnQgX19udW1lciwKKwkJCQkgICAgbG9uZyBsb25nIGludCBfX2Rlbm9tKQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKSBfX3d1cjsKK19fRU5EX05BTUVTUEFDRV9DOTkKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkIF9fVVNFX1NWSUQgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTl9FWFRFTkRFRAorLyogQ29udmVydCBmbG9hdGluZyBwb2ludCBudW1iZXJzIHRvIHN0cmluZ3MuICBUaGUgcmV0dXJuZWQgdmFsdWVzIGFyZQorICAgdmFsaWQgb25seSB1bnRpbCBhbm90aGVyIGNhbGwgdG8gdGhlIHNhbWUgZnVuY3Rpb24uICAqLworCisvKiBDb252ZXJ0IFZBTFVFIHRvIGEgc3RyaW5nIHdpdGggTkRJR0lUIGRpZ2l0cyBhbmQgcmV0dXJuIGEgcG9pbnRlciB0bworICAgdGhpcy4gIFNldCAqREVDUFQgd2l0aCB0aGUgcG9zaXRpb24gb2YgdGhlIGRlY2ltYWwgY2hhcmFjdGVyIGFuZCAqU0lHTgorICAgd2l0aCB0aGUgc2lnbiBvZiB0aGUgbnVtYmVyLiAgKi8KK2V4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKKwkJICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgX19USFJPVyBfX25vbm51bGwgKCgzLCA0KSkgX193dXI7CisKKy8qIENvbnZlcnQgVkFMVUUgdG8gYSBzdHJpbmcgcm91bmRlZCB0byBORElHSVQgZGVjaW1hbCBkaWdpdHMuICBTZXQgKkRFQ1BUCisgICB3aXRoIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVjaW1hbCBjaGFyYWN0ZXIgYW5kICpTSUdOIHdpdGggdGhlIHNpZ24gb2YKKyAgIHRoZSBudW1iZXIuICAqLworZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAorCQkgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDMsIDQpKSBfX3d1cjsKKworLyogSWYgcG9zc2libGUgY29udmVydCBWQUxVRSB0byBhIHN0cmluZyB3aXRoIE5ESUdJVCBzaWduaWZpY2FudCBkaWdpdHMuCisgICBPdGhlcndpc2UgdXNlIGV4cG9uZW50aWFsIHJlcHJlc2VudGF0aW9uLiAgVGhlIHJlc3VsdGluZyBzdHJpbmcgd2lsbAorICAgYmUgd3JpdHRlbiB0byBCVUYuICAqLworZXh0ZXJuIGNoYXIgKmdjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDMpKSBfX3d1cjsKKworCisjIGlmZGVmIF9fVVNFX01JU0MKKy8qIExvbmcgZG91YmxlIHZlcnNpb25zIG9mIGFib3ZlIGZ1bmN0aW9ucy4gICovCitleHRlcm4gY2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKKwkJICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDMsIDQpKSBfX3d1cjsKK2V4dGVybiBjaGFyICpxZmN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAorCQkgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMywgNCkpIF9fd3VyOworZXh0ZXJuIGNoYXIgKnFnY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDMpKSBfX3d1cjsKKworCisvKiBSZWVudHJhbnQgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb25zIGFib3ZlIHdoaWNoIHByb3ZpZGUgdGhlaXIgb3duCisgICBidWZmZXJzLiAgKi8KK2V4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKKwkJICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKKwkJICAgc2l6ZV90IF9fbGVuKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDMsIDQsIDUpKTsKK2V4dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKKwkJICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKKwkJICAgc2l6ZV90IF9fbGVuKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDMsIDQsIDUpKTsKKworZXh0ZXJuIGludCBxZWN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCisJCSAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKKwkJICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgzLCA0LCA1KSk7CitleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKKwkJICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAorCQkgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDMsIDQsIDUpKTsKKyMgZW5kaWYJLyogbWlzYyAqLworI2VuZGlmCS8qIHVzZSBNSVNDIHx8IHVzZSBYL09wZW4gVW5peCAqLworCisKK19fQkVHSU5fTkFNRVNQQUNFX1NURAorLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIG11bHRpYnl0ZSBjaGFyYWN0ZXIKKyAgIGluIFMsIHdoaWNoIGlzIG5vIGxvbmdlciB0aGFuIE4uICAqLworZXh0ZXJuIGludCBtYmxlbiAoX19jb25zdCBjaGFyICpfX3MsIHNpemVfdCBfX24pIF9fVEhST1cgX193dXI7CisvKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgZ2l2ZW4gbXVsdGlieXRlIGNoYXJhY3RlciwKKyAgIHB1dHRpbmcgaXRzIGB3Y2hhcl90JyByZXByZXNlbnRhdGlvbiBpbiAqUFdDLiAgKi8KK2V4dGVybiBpbnQgbWJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAorCQkgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSBfX1RIUk9XIF9fd3VyOworLyogUHV0IHRoZSBtdWx0aWJ5dGUgY2hhcmFjdGVyIHJlcHJlc2VudGVkCisgICBieSBXQ0hBUiBpbiBTLCByZXR1cm5pbmcgaXRzIGxlbmd0aC4gICovCitleHRlcm4gaW50IHdjdG9tYiAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpIF9fVEhST1cgX193dXI7CisKKworLyogQ29udmVydCBhIG11bHRpYnl0ZSBzdHJpbmcgdG8gYSB3aWRlIGNoYXIgc3RyaW5nLiAgKi8KK2V4dGVybiBzaXplX3QgbWJzdG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgIF9fcHdjcywKKwkJCV9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIF9fVEhST1c7CisvKiBDb252ZXJ0IGEgd2lkZSBjaGFyIHN0cmluZyB0byBtdWx0aWJ5dGUgc3RyaW5nLiAgKi8KK2V4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAorCQkJX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90IF9fbikKKyAgICAgX19USFJPVzsKK19fRU5EX05BTUVTUEFDRV9TVEQKKworCisjaWZkZWYgX19VU0VfU1ZJRAorLyogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHN0cmluZyB2YWx1ZSBvZiBSRVNQT05TRSBtYXRjaGVzIHRoZSBhZmZpcm1hdGlvbgorICAgb3IgbmVnYXRpdmUgcmVzcG9uc2UgZXhwcmVzc2lvbiBhcyBzcGVjaWZpZWQgYnkgdGhlIExDX01FU1NBR0VTIGNhdGVnb3J5CisgICBpbiB0aGUgcHJvZ3JhbSdzIGN1cnJlbnQgbG9jYWxlLiAgUmV0dXJucyAxIGlmIGFmZmlybWF0aXZlLCAwIGlmCisgICBuZWdhdGl2ZSwgYW5kIC0xIGlmIG5vdCBtYXRjaGluZy4gICovCitleHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3QgY2hhciAqX19yZXNwb25zZSkgX19USFJPVyBfX25vbm51bGwgKCgxKSkgX193dXI7CisjZW5kaWYKKworCisjaWZkZWYgX19VU0VfWE9QRU5fRVhURU5ERUQKKy8qIFBhcnNlIGNvbW1hIHNlcGFyYXRlZCBzdWJvcHRpb24gZnJvbSAqT1BUSU9OUCBhbmQgbWF0Y2ggYWdhaW5zdAorICAgc3RyaW5ncyBpbiBUT0tFTlMuICBJZiBmb3VuZCByZXR1cm4gaW5kZXggYW5kIHNldCAqVkFMVUVQIHRvCisgICBvcHRpb25hbCB2YWx1ZSBpbnRyb2R1Y2VkIGJ5IGFuIGVxdWFsIHNpZ24uICBJZiB0aGUgc3Vib3B0aW9uIGlzCisgICBub3QgcGFydCBvZiBUT0tFTlMgcmV0dXJuIGluICpWQUxVRVAgYmVnaW5uaW5nIG9mIHVua25vd24KKyAgIHN1Ym9wdGlvbi4gIE9uIGV4aXQgKk9QVElPTlAgaXMgc2V0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQKKyAgIHRva2VuIG9yIGF0IHRoZSB0ZXJtaW5hdGluZyBOVUwgY2hhcmFjdGVyLiAgKi8KK2V4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoqX19yZXN0cmljdCBfX29wdGlvbnAsCisJCSAgICAgIGNoYXIgKl9fY29uc3QgKl9fcmVzdHJpY3QgX190b2tlbnMsCisJCSAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fdmFsdWVwKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDIsIDMpKSBfX3d1cjsKKyNlbmRpZgorCisKKyNpZmRlZiBfX1VTRV9YT1BFTgorLyogU2V0dXAgREVTIHRhYmxlcyBhY2NvcmRpbmcgS0VZLiAgKi8KK2V4dGVybiB2b2lkIHNldGtleSAoX19jb25zdCBjaGFyICpfX2tleSkgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisjZW5kaWYKKworCisvKiBYL09wZW4gcHNldWRvIHRlcm1pbmFsIGhhbmRsaW5nLiAgKi8KKworI2lmZGVmIF9fVVNFX1hPUEVOMksKKy8qIFJldHVybiBhIG1hc3RlciBwc2V1ZG8tdGVybWluYWwgaGFuZGxlLiAgKi8KK2V4dGVybiBpbnQgcG9zaXhfb3BlbnB0IChpbnQgX19vZmxhZykgX193dXI7CisjZW5kaWYKKworI2lmZGVmIF9fVVNFX1hPUEVOCisvKiBUaGUgbmV4dCBmb3VyIGZ1bmN0aW9ucyBhbGwgdGFrZSBhIG1hc3RlciBwc2V1ZG8tdHR5IGZkIGFuZAorICAgcGVyZm9ybSBhbiBvcGVyYXRpb24gb24gdGhlIGFzc29jaWF0ZWQgc2xhdmU6ICAqLworCisvKiBDaG93biB0aGUgc2xhdmUgdG8gdGhlIGNhbGxpbmcgdXNlci4gICovCitleHRlcm4gaW50IGdyYW50cHQgKGludCBfX2ZkKSBfX1RIUk9XOworCisvKiBSZWxlYXNlIGFuIGludGVybmFsIGxvY2sgc28gdGhlIHNsYXZlIGNhbiBiZSBvcGVuZWQuCisgICBDYWxsIGFmdGVyIGdyYW50cHQoKS4gICovCitleHRlcm4gaW50IHVubG9ja3B0IChpbnQgX19mZCkgX19USFJPVzsKKworLyogUmV0dXJuIHRoZSBwYXRobmFtZSBvZiB0aGUgcHNldWRvIHRlcm1pbmFsIHNsYXZlIGFzc29pY2F0ZWQgd2l0aAorICAgdGhlIG1hc3RlciBGRCBpcyBvcGVuIG9uLCBvciBOVUxMIG9uIGVycm9ycy4KKyAgIFRoZSByZXR1cm5lZCBzdG9yYWdlIGlzIGdvb2QgdW50aWwgdGhlIG5leHQgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLiAgKi8KK2V4dGVybiBjaGFyICpwdHNuYW1lIChpbnQgX19mZCkgX19USFJPVyBfX3d1cjsKKyNlbmRpZgorCisjaWZkZWYgX19VU0VfR05VCisvKiBTdG9yZSBhdCBtb3N0IEJVRkxFTiBjaGFyYWN0ZXJzIG9mIHRoZSBwYXRobmFtZSBvZiB0aGUgc2xhdmUgcHNldWRvCisgICB0ZXJtaW5hbCBhc3NvY2lhdGVkIHdpdGggdGhlIG1hc3RlciBGRCBpcyBvcGVuIG9uIGluIEJVRi4KKyAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBhbiBlcnJvciBudW1iZXIuICAqLworZXh0ZXJuIGludCBwdHNuYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDIpKTsKKworLyogT3BlbiBhIG1hc3RlciBwc2V1ZG8gdGVybWluYWwgYW5kIHJldHVybiBpdHMgZmlsZSBkZXNjcmlwdG9yLiAgKi8KK2V4dGVybiBpbnQgZ2V0cHQgKHZvaWQpOworI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9CU0QKKy8qIFB1dCB0aGUgMSBtaW51dGUsIDUgbWludXRlIGFuZCAxNSBtaW51dGUgbG9hZCBhdmVyYWdlcyBpbnRvIHRoZSBmaXJzdAorICAgTkVMRU0gZWxlbWVudHMgb2YgTE9BREFWRy4gIFJldHVybiB0aGUgbnVtYmVyIHdyaXR0ZW4gKG5ldmVyIG1vcmUgdGhhbgorICAgdGhyZWUsIGJ1dCBtYXkgYmUgbGVzcyB0aGFuIE5FTEVNKSwgb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQuICAqLworZXh0ZXJuIGludCBnZXRsb2FkYXZnIChkb3VibGUgX19sb2FkYXZnW10sIGludCBfX25lbGVtKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKyNlbmRpZgorCisKKy8qIERlZmluZSBzb21lIG1hY3JvcyBoZWxwaW5nIHRvIGNhdGNoIGJ1ZmZlciBvdmVyZmxvd3MuICAqLworI2lmIF9fVVNFX0ZPUlRJRllfTEVWRUwgPiAwICYmIGRlZmluZWQgX19leHRlcm5fYWx3YXlzX2lubGluZQorIyBpbmNsdWRlIDxiaXRzL3N0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgX19MREJMX0NPTVBBVAorIyBpbmNsdWRlIDxiaXRzL3N0ZGxpYi1sZGJsLmg+CisjZW5kaWYKKworI2VuZGlmIC8qIGRvbid0IGp1c3QgbmVlZCBtYWxsb2MgYW5kIGNhbGxvYyAqLworI3VuZGVmIF9fbmVlZF9tYWxsb2NfYW5kX2NhbGxvYworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogc3RkbGliLmggICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3RyaW5nLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBjOTJkNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zdHJpbmcuaApAQCAtMCwwICsxLDQzNCBAQAorLyogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTMsIDE5OTUtMjAwNCwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyoKKyAqCUlTTyBDOTkgU3RhbmRhcmQ6IDcuMjEgU3RyaW5nIGhhbmRsaW5nCTxzdHJpbmcuaD4KKyAqLworCisjaWZuZGVmCV9TVFJJTkdfSAorI2RlZmluZQlfU1RSSU5HX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworX19CRUdJTl9ERUNMUworCisvKiBHZXQgc2l6ZV90IGFuZCBOVUxMIGZyb20gPHN0ZGRlZi5oPi4gICovCisjZGVmaW5lCV9fbmVlZF9zaXplX3QKKyNkZWZpbmUJX19uZWVkX05VTEwKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworCitfX0JFR0lOX05BTUVTUEFDRV9TVEQKKy8qIENvcHkgTiBieXRlcyBvZiBTUkMgdG8gREVTVC4gICovCitleHRlcm4gdm9pZCAqbWVtY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKKwkJICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSwgMikpOworLyogQ29weSBOIGJ5dGVzIG9mIFNSQyB0byBERVNULCBndWFyYW50ZWVpbmcKKyAgIGNvcnJlY3QgYmVoYXZpb3IgZm9yIG92ZXJsYXBwaW5nIHN0cmluZ3MuICAqLworZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxLCAyKSk7CitfX0VORF9OQU1FU1BBQ0VfU1RECisKKy8qIENvcHkgbm8gbW9yZSB0aGFuIE4gYnl0ZXMgb2YgU1JDIHRvIERFU1QsIHN0b3BwaW5nIHdoZW4gQyBpcyBmb3VuZC4KKyAgIFJldHVybiB0aGUgcG9zaXRpb24gaW4gREVTVCBvbmUgYnl0ZSBwYXN0IHdoZXJlIEMgd2FzIGNvcGllZCwKKyAgIG9yIE5VTEwgaWYgQyB3YXMgbm90IGZvdW5kIGluIHRoZSBmaXJzdCBOIGJ5dGVzIG9mIFNSQy4gICovCisjaWYgZGVmaW5lZCBfX1VTRV9TVklEIHx8IGRlZmluZWQgX19VU0VfQlNEIHx8IGRlZmluZWQgX19VU0VfWE9QRU4KK2V4dGVybiB2b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLAorCQkgICAgICBpbnQgX19jLCBzaXplX3QgX19uKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDIpKTsKKyNlbmRpZiAvKiBTVklELiAgKi8KKworCitfX0JFR0lOX05BTUVTUEFDRV9TVEQKKy8qIFNldCBOIGJ5dGVzIG9mIFMgdG8gQy4gICovCitleHRlcm4gdm9pZCAqbWVtc2V0ICh2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisvKiBDb21wYXJlIE4gYnl0ZXMgb2YgUzEgYW5kIFMyLiAgKi8KK2V4dGVybiBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9wdXJlX18gX19ub25udWxsICgoMSwgMikpOworCisvKiBTZWFyY2ggTiBieXRlcyBvZiBTIGZvciBDLiAgKi8KK2V4dGVybiB2b2lkICptZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQorICAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9wdXJlX18gX19ub25udWxsICgoMSkpOworX19FTkRfTkFNRVNQQUNFX1NURAorCisjaWZkZWYgX19VU0VfR05VCisvKiBTZWFyY2ggaW4gUyBmb3IgQy4gIFRoaXMgaXMgc2ltaWxhciB0byBgbWVtY2hyJyBidXQgdGhlcmUgaXMgbm8KKyAgIGxlbmd0aCBsaW1pdC4gICovCitleHRlcm4gdm9pZCAqcmF3bWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYykKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9wdXJlX18gX19ub25udWxsICgoMSkpOworCisvKiBTZWFyY2ggTiBieXRlcyBvZiBTIGZvciB0aGUgZmluYWwgb2NjdXJyZW5jZSBvZiBDLiAgKi8KK2V4dGVybiB2b2lkICptZW1yY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKKyAgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfcHVyZV9fIF9fbm9ubnVsbCAoKDEpKTsKKyNlbmRpZgorCisKK19fQkVHSU5fTkFNRVNQQUNFX1NURAorLyogQ29weSBTUkMgdG8gREVTVC4gICovCitleHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDIpKTsKKy8qIENvcHkgbm8gbW9yZSB0aGFuIE4gY2hhcmFjdGVycyBvZiBTUkMgdG8gREVTVC4gICovCitleHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCisJCSAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxLCAyKSk7CisKKy8qIEFwcGVuZCBTUkMgb250byBERVNULiAgKi8KK2V4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSwgMikpOworLyogQXBwZW5kIG5vIG1vcmUgdGhhbiBOIGNoYXJhY3RlcnMgZnJvbSBTUkMgb250byBERVNULiAgKi8KK2V4dGVybiBjaGFyICpzdHJuY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLAorCQkgICAgICBzaXplX3QgX19uKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDIpKTsKKworLyogQ29tcGFyZSBTMSBhbmQgUzIuICAqLworZXh0ZXJuIGludCBzdHJjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX3B1cmVfXyBfX25vbm51bGwgKCgxLCAyKSk7CisvKiBDb21wYXJlIE4gY2hhcmFjdGVycyBvZiBTMSBhbmQgUzIuICAqLworZXh0ZXJuIGludCBzdHJuY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9wdXJlX18gX19ub25udWxsICgoMSwgMikpOworCisvKiBDb21wYXJlIHRoZSBjb2xsYXRlZCBmb3JtcyBvZiBTMSBhbmQgUzIuICAqLworZXh0ZXJuIGludCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9wdXJlX18gX19ub25udWxsICgoMSwgMikpOworLyogUHV0IGEgdHJhbnNmb3JtYXRpb24gb2YgU1JDIGludG8gbm8gbW9yZSB0aGFuIE4gYnl0ZXMgb2YgREVTVC4gICovCitleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAorCQkgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDIpKTsKK19fRU5EX05BTUVTUEFDRV9TVEQKKworI2lmZGVmIF9fVVNFX0dOVQorLyogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGVxdWl2YWxlbnQgdG8gdGhlIGJvdGggYWJvdmUgYnV0IHRoZXkKKyAgIHRha2UgdGhlIGxvY2FsZSB0aGV5IHVzZSBmb3IgdGhlIGNvbGxhdGlvbiBhcyBhbiBleHRyYSBhcmd1bWVudC4KKyAgIFRoaXMgaXMgbm90IHN0YW5kYXJkc2l6ZWQgYnV0IHNvbWV0aGluZyBsaWtlIHdpbGwgY29tZS4gICovCisjIGluY2x1ZGUgPHhsb2NhbGUuaD4KKworLyogQ29tcGFyZSB0aGUgY29sbGF0ZWQgZm9ybXMgb2YgUzEgYW5kIFMyIHVzaW5nIHJ1bGVzIGZyb20gTC4gICovCitleHRlcm4gaW50IHN0cmNvbGxfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIF9fbG9jYWxlX3QgX19sKQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX3B1cmVfXyBfX25vbm51bGwgKCgxLCAyLCAzKSk7CisvKiBQdXQgYSB0cmFuc2Zvcm1hdGlvbiBvZiBTUkMgaW50byBubyBtb3JlIHRoYW4gTiBieXRlcyBvZiBERVNULiAgKi8KK2V4dGVybiBzaXplX3Qgc3RyeGZybV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sCisJCQkgX19sb2NhbGVfdCBfX2wpIF9fVEhST1cgX19ub25udWxsICgoMiwgNCkpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIF9fVVNFX1NWSUQgfHwgZGVmaW5lZCBfX1VTRV9CU0QgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTl9FWFRFTkRFRAorLyogRHVwbGljYXRlIFMsIHJldHVybmluZyBhbiBpZGVudGljYWwgbWFsbG9jJ2Qgc3RyaW5nLiAgKi8KK2V4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX21hbGxvY19fIF9fbm9ubnVsbCAoKDEpKTsKKyNlbmRpZgorCisvKiBSZXR1cm4gYSBtYWxsb2MnZCBjb3B5IG9mIGF0IG1vc3QgTiBieXRlcyBvZiBTVFJJTkcuICBUaGUKKyAgIHJlc3VsdGFudCBzdHJpbmcgaXMgdGVybWluYXRlZCBldmVuIGlmIG5vIG51bGwgdGVybWluYXRvcgorICAgYXBwZWFycyBiZWZvcmUgU1RSSU5HW05dLiAgKi8KKyNpZiBkZWZpbmVkIF9fVVNFX0dOVQorZXh0ZXJuIGNoYXIgKnN0cm5kdXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX24pCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfbWFsbG9jX18gX19ub25udWxsICgoMSkpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIF9fVVNFX0dOVSAmJiBkZWZpbmVkIF9fR05VQ19fCisvKiBEdXBsaWNhdGUgUywgcmV0dXJuaW5nIGFuIGlkZW50aWNhbCBhbGxvY2EnZCBzdHJpbmcuICAqLworIyBkZWZpbmUgc3RyZHVwYShzKQkJCQkJCQkgICAgICBcCisgIChfX2V4dGVuc2lvbl9fCQkJCQkJCSAgICAgIFwKKyAgICAoewkJCQkJCQkJCSAgICAgIFwKKyAgICAgIF9fY29uc3QgY2hhciAqX19vbGQgPSAocyk7CQkJCQkgICAgICBcCisgICAgICBzaXplX3QgX19sZW4gPSBzdHJsZW4gKF9fb2xkKSArIDE7CQkJCSAgICAgIFwKKyAgICAgIGNoYXIgKl9fbmV3ID0gKGNoYXIgKikgX19idWlsdGluX2FsbG9jYSAoX19sZW4pOwkJCSAgICAgIFwKKyAgICAgIChjaGFyICopIG1lbWNweSAoX19uZXcsIF9fb2xkLCBfX2xlbik7CQkJCSAgICAgIFwKKyAgICB9KSkKKworLyogUmV0dXJuIGFuIGFsbG9jYSdkIGNvcHkgb2YgYXQgbW9zdCBOIGJ5dGVzIG9mIHN0cmluZy4gICovCisjIGRlZmluZSBzdHJuZHVwYShzLCBuKQkJCQkJCQkgICAgICBcCisgIChfX2V4dGVuc2lvbl9fCQkJCQkJCSAgICAgIFwKKyAgICAoewkJCQkJCQkJCSAgICAgIFwKKyAgICAgIF9fY29uc3QgY2hhciAqX19vbGQgPSAocyk7CQkJCQkgICAgICBcCisgICAgICBzaXplX3QgX19sZW4gPSBzdHJubGVuIChfX29sZCwgKG4pKTsJCQkJICAgICAgXAorICAgICAgY2hhciAqX19uZXcgPSAoY2hhciAqKSBfX2J1aWx0aW5fYWxsb2NhIChfX2xlbiArIDEpOwkJICAgICAgXAorICAgICAgX19uZXdbX19sZW5dID0gJ1wwJzsJCQkJCQkgICAgICBcCisgICAgICAoY2hhciAqKSBtZW1jcHkgKF9fbmV3LCBfX29sZCwgX19sZW4pOwkJCQkgICAgICBcCisgICAgfSkpCisjZW5kaWYKKworX19CRUdJTl9OQU1FU1BBQ0VfU1RECisvKiBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIEMgaW4gUy4gICovCitleHRlcm4gY2hhciAqc3RyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9wdXJlX18gX19ub25udWxsICgoMSkpOworLyogRmluZCB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIEMgaW4gUy4gICovCitleHRlcm4gY2hhciAqc3RycmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfcHVyZV9fIF9fbm9ubnVsbCAoKDEpKTsKK19fRU5EX05BTUVTUEFDRV9TVEQKKworI2lmZGVmIF9fVVNFX0dOVQorLyogVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIGBzdHJjaHInLiAgQnV0IGl0IHJldHVybnMgYSBwb2ludGVyIHRvCisgICB0aGUgY2xvc2luZyBOVUwgYnl0ZSBpbiBjYXNlIEMgaXMgbm90IGZvdW5kIGluIFMuICAqLworZXh0ZXJuIGNoYXIgKnN0cmNocm51bCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfcHVyZV9fIF9fbm9ubnVsbCAoKDEpKTsKKyNlbmRpZgorCitfX0JFR0lOX05BTUVTUEFDRV9TVEQKKy8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbml0aWFsIHNlZ21lbnQgb2YgUyB3aGljaAorICAgY29uc2lzdHMgZW50aXJlbHkgb2YgY2hhcmFjdGVycyBub3QgaW4gUkVKRUNULiAgKi8KK2V4dGVybiBzaXplX3Qgc3RyY3NwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19yZWplY3QpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfcHVyZV9fIF9fbm9ubnVsbCAoKDEsIDIpKTsKKy8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbml0aWFsIHNlZ21lbnQgb2YgUyB3aGljaAorICAgY29uc2lzdHMgZW50aXJlbHkgb2YgY2hhcmFjdGVycyBpbiBBQ0NFUFQuICAqLworZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX3B1cmVfXyBfX25vbm51bGwgKCgxLCAyKSk7CisvKiBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIGluIFMgb2YgYW55IGNoYXJhY3RlciBpbiBBQ0NFUFQuICAqLworZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX3B1cmVfXyBfX25vbm51bGwgKCgxLCAyKSk7CisvKiBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIE5FRURMRSBpbiBIQVlTVEFDSy4gICovCitleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfcHVyZV9fIF9fbm9ubnVsbCAoKDEsIDIpKTsKKworCisvKiBEaXZpZGUgUyBpbnRvIHRva2VucyBzZXBhcmF0ZWQgYnkgY2hhcmFjdGVycyBpbiBERUxJTS4gICovCitleHRlcm4gY2hhciAqc3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMikpOworX19FTkRfTkFNRVNQQUNFX1NURAorCisvKiBEaXZpZGUgUyBpbnRvIHRva2VucyBzZXBhcmF0ZWQgYnkgY2hhcmFjdGVycyBpbiBERUxJTS4gIEluZm9ybWF0aW9uCisgICBwYXNzZWQgYmV0d2VlbiBjYWxscyBhcmUgc3RvcmVkIGluIFNBVkVfUFRSLiAgKi8KK2V4dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKKwkJCSBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKKwkJCSBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDIsIDMpKTsKKyNpZiBkZWZpbmVkIF9fVVNFX1BPU0lYIHx8IGRlZmluZWQgX19VU0VfTUlTQworZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCisJCSAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDIsIDMpKTsKKyNlbmRpZgorCisjaWZkZWYgX19VU0VfR05VCisvKiBTaW1pbGFyIHRvIGBzdHJzdHInIGJ1dCB0aGlzIGZ1bmN0aW9uIGlnbm9yZXMgdGhlIGNhc2Ugb2YgYm90aCBzdHJpbmdzLiAgKi8KK2V4dGVybiBjaGFyICpzdHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfcHVyZV9fIF9fbm9ubnVsbCAoKDEsIDIpKTsKKyNlbmRpZgorCisjaWZkZWYgX19VU0VfR05VCisvKiBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIE5FRURMRSBpbiBIQVlTVEFDSy4KKyAgIE5FRURMRSBpcyBORUVETEVMRU4gYnl0ZXMgbG9uZzsKKyAgIEhBWVNUQUNLIGlzIEhBWVNUQUNLTEVOIGJ5dGVzIGxvbmcuICAqLworZXh0ZXJuIHZvaWQgKm1lbW1lbSAoX19jb25zdCB2b2lkICpfX2hheXN0YWNrLCBzaXplX3QgX19oYXlzdGFja2xlbiwKKwkJICAgICBfX2NvbnN0IHZvaWQgKl9fbmVlZGxlLCBzaXplX3QgX19uZWVkbGVsZW4pCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfcHVyZV9fIF9fbm9ubnVsbCAoKDEsIDMpKTsKKworLyogQ29weSBOIGJ5dGVzIG9mIFNSQyB0byBERVNULCByZXR1cm4gcG9pbnRlciB0byBieXRlcyBhZnRlciB0aGUKKyAgIGxhc3Qgd3JpdHRlbiBieXRlLiAgKi8KK2V4dGVybiB2b2lkICpfX21lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAorCQkJX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDIpKTsKK2V4dGVybiB2b2lkICptZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKKwkJICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDIpKTsKKyNlbmRpZgorCisKK19fQkVHSU5fTkFNRVNQQUNFX1NURAorLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgUy4gICovCitleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfcHVyZV9fIF9fbm9ubnVsbCAoKDEpKTsKK19fRU5EX05BTUVTUEFDRV9TVEQKKworI2lmZGVmCV9fVVNFX0dOVQorLyogRmluZCB0aGUgbGVuZ3RoIG9mIFNUUklORywgYnV0IHNjYW4gYXQgbW9zdCBNQVhMRU4gY2hhcmFjdGVycy4KKyAgIElmIG5vICdcMCcgdGVybWluYXRvciBpcyBmb3VuZCBpbiB0aGF0IG1hbnkgY2hhcmFjdGVycywgcmV0dXJuIE1BWExFTi4gICovCitleHRlcm4gc2l6ZV90IHN0cm5sZW4gKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX21heGxlbikKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9wdXJlX18gX19ub25udWxsICgoMSkpOworI2VuZGlmCisKKworX19CRUdJTl9OQU1FU1BBQ0VfU1RECisvKiBSZXR1cm4gYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgbWVhbmluZyBvZiB0aGUgYGVycm5vJyBjb2RlIGluIEVSUk5VTS4gICovCitleHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgX19USFJPVzsKK19fRU5EX05BTUVTUEFDRV9TVEQKKyNpZiBkZWZpbmVkIF9fVVNFX1hPUEVOMksgfHwgZGVmaW5lZCBfX1VTRV9NSVNDCisvKiBSZWVudHJhbnQgdmVyc2lvbiBvZiBgc3RyZXJyb3InLgorICAgVGhlcmUgYXJlIDIgZmxhdm9ycyBvZiBgc3RyZXJyb3JfcicsIEdOVSB3aGljaCByZXR1cm5zIHRoZSBzdHJpbmcKKyAgIGFuZCBtYXkgb3IgbWF5IG5vdCB1c2UgdGhlIHN1cHBsaWVkIHRlbXBvcmFyeSBidWZmZXIgYW5kIFBPU0lYIG9uZQorICAgd2hpY2ggZmlsbHMgdGhlIHN0cmluZyBpbnRvIHRoZSBidWZmZXIuCisgICBUbyB1c2UgdGhlIFBPU0lYIHZlcnNpb24sIC1EX1hPUEVOX1NPVVJDRT02MDAgb3IgLURfUE9TSVhfQ19TT1VSQ0U9MjAwMTEyTAorICAgd2l0aG91dCAtRF9HTlVfU09VUkNFIGlzIG5lZWRlZCwgb3RoZXJ3aXNlIHRoZSBHTlUgdmVyc2lvbiBpcworICAgcHJlZmVycmVkLiAgKi8KKyMgaWYgZGVmaW5lZCBfX1VTRV9YT1BFTjJLICYmICFkZWZpbmVkIF9fVVNFX0dOVQorLyogRmlsbCBCVUYgd2l0aCBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBtZWFuaW5nIG9mIHRoZSBgZXJybm8nIGNvZGUgaW4KKyAgIEVSUk5VTS4gICovCisjICBpZmRlZiBfX1JFRElSRUNUX05USAorZXh0ZXJuIGludCBfX1JFRElSRUNUX05USCAoc3RyZXJyb3JfciwKKwkJCSAgIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pLAorCQkJICAgX194cGdfc3RyZXJyb3JfcikgX19ub25udWxsICgoMikpOworIyAgZWxzZQorZXh0ZXJuIGludCBfX3hwZ19zdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMikpOworIyAgIGRlZmluZSBzdHJlcnJvcl9yIF9feHBnX3N0cmVycm9yX3IKKyMgIGVuZGlmCisjIGVsc2UKKy8qIElmIGEgdGVtcG9yYXJ5IGJ1ZmZlciBpcyByZXF1aXJlZCwgYXQgbW9zdCBCVUZMRU4gYnl0ZXMgb2YgQlVGIHdpbGwgYmUKKyAgIHVzZWQuICAqLworZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgyKSk7CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9fVVNFX0dOVQorLyogVHJhbnNsYXRlIGVycm9yIG51bWJlciB0byBzdHJpbmcgYWNjb3JkaW5nIHRvIHRoZSBsb2NhbGUgTC4gICovCitleHRlcm4gY2hhciAqc3RyZXJyb3JfbCAoaW50IF9fZXJybnVtLCBfX2xvY2FsZV90IF9fbCkgX19USFJPVzsKKyNlbmRpZgorCisKKy8qIFdlIGRlZmluZSB0aGlzIGZ1bmN0aW9uIGFsd2F5cyBzaW5jZSBgYnplcm8nIGlzIHNvbWV0aW1lcyBuZWVkZWQgd2hlbgorICAgdGhlIG5hbWVzcGFjZSBydWxlcyBkb2VzIG5vdCBhbGxvdyB0aGlzLiAgKi8KK2V4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKyNpZmRlZiBfX1VTRV9CU0QKKy8qIENvcHkgTiBieXRlcyBvZiBTUkMgdG8gREVTVCAobGlrZSBtZW1tb3ZlLCBidXQgYXJncyByZXZlcnNlZCkuICAqLworZXh0ZXJuIHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVzdCwgc2l6ZV90IF9fbikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxLCAyKSk7CisKKy8qIFNldCBOIGJ5dGVzIG9mIFMgdG8gMC4gICovCitleHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworLyogQ29tcGFyZSBOIGJ5dGVzIG9mIFMxIGFuZCBTMiAoc2FtZSBhcyBtZW1jbXApLiAgKi8KK2V4dGVybiBpbnQgYmNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfcHVyZV9fIF9fbm9ubnVsbCAoKDEsIDIpKTsKKworLyogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBDIGluIFMgKHNhbWUgYXMgc3RyY2hyKS4gICovCitleHRlcm4gY2hhciAqaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX3B1cmVfXyBfX25vbm51bGwgKCgxKSk7CisKKy8qIEZpbmQgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBDIGluIFMgKHNhbWUgYXMgc3RycmNocikuICAqLworZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfcHVyZV9fIF9fbm9ubnVsbCAoKDEpKTsKKworLyogUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgYml0IHNldCBpbiBJLCBvciAwIGlmIG5vbmUgYXJlIHNldC4KKyAgIFRoZSBsZWFzdC1zaWduaWZpY2FudCBiaXQgaXMgcG9zaXRpb24gMSwgdGhlIG1vc3Qtc2lnbmlmaWNhbnQgMzIuICAqLworZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIF9fVEhST1cgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOworCisvKiBUaGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnMgYXJlIG5vbi1zdGFuZGFyZCBidXQgbmVjZXNzYXJ5IGZvciBub24tMzIgYml0CisgICBwbGF0Zm9ybXMuICAqLworIyBpZmRlZglfX1VTRV9HTlUKK2V4dGVybiBpbnQgZmZzbCAobG9uZyBpbnQgX19sKSBfX1RIUk9XIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKKyMgIGlmZGVmIF9fR05VQ19fCitfX2V4dGVuc2lvbl9fIGV4dGVybiBpbnQgZmZzbGwgKGxvbmcgbG9uZyBpbnQgX19sbCkKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CisjICBlbmRpZgorIyBlbmRpZgorCisvKiBDb21wYXJlIFMxIGFuZCBTMiwgaWdub3JpbmcgY2FzZS4gICovCitleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX3B1cmVfXyBfX25vbm51bGwgKCgxLCAyKSk7CisKKy8qIENvbXBhcmUgbm8gbW9yZSB0aGFuIE4gY2hhcnMgb2YgUzEgYW5kIFMyLCBpZ25vcmluZyBjYXNlLiAgKi8KK2V4dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX3B1cmVfXyBfX25vbm51bGwgKCgxLCAyKSk7CisjZW5kaWYgLyogVXNlIEJTRC4gICovCisKKyNpZmRlZglfX1VTRV9HTlUKKy8qIEFnYWluIHZlcnNpb25zIG9mIGEgZmV3IGZ1bmN0aW9ucyB3aGljaCB1c2UgdGhlIGdpdmVuIGxvY2FsZSBpbnN0ZWFkCisgICBvZiB0aGUgZ2xvYmFsIG9uZS4gICovCitleHRlcm4gaW50IHN0cmNhc2VjbXBfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCisJCQkgX19sb2NhbGVfdCBfX2xvYykKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9wdXJlX18gX19ub25udWxsICgoMSwgMiwgMykpOworCitleHRlcm4gaW50IHN0cm5jYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAorCQkJICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX3B1cmVfXyBfX25vbm51bGwgKCgxLCAyLCA0KSk7CisjZW5kaWYKKworI2lmZGVmCV9fVVNFX0JTRAorLyogUmV0dXJuIHRoZSBuZXh0IERFTElNLWRlbGltaXRlZCB0b2tlbiBmcm9tICpTVFJJTkdQLAorICAgdGVybWluYXRpbmcgaXQgd2l0aCBhICdcMCcsIGFuZCB1cGRhdGUgKlNUUklOR1AgdG8gcG9pbnQgcGFzdCBpdC4gICovCitleHRlcm4gY2hhciAqc3Ryc2VwIChjaGFyICoqX19yZXN0cmljdCBfX3N0cmluZ3AsCisJCSAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSwgMikpOworI2VuZGlmCisKKyNpZmRlZglfX1VTRV9HTlUKKy8qIENvbXBhcmUgUzEgYW5kIFMyIGFzIHN0cmluZ3MgaG9sZGluZyBuYW1lICYgaW5kaWNlcy92ZXJzaW9uIG51bWJlcnMuICAqLworZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9wdXJlX18gX19ub25udWxsICgoMSwgMikpOworCisvKiBSZXR1cm4gYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgbWVhbmluZyBvZiB0aGUgc2lnbmFsIG51bWJlciBpbiBTSUcuICAqLworZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbCAoaW50IF9fc2lnKSBfX1RIUk9XOworCisvKiBDb3B5IFNSQyB0byBERVNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4gREVTVC4gICovCitleHRlcm4gY2hhciAqX19zdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSwgMikpOworZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxLCAyKSk7CisKKy8qIENvcHkgbm8gbW9yZSB0aGFuIE4gY2hhcmFjdGVycyBvZiBTUkMgdG8gREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mCisgICB0aGUgbGFzdCBjaGFyYWN0ZXIgd3JpdHRlbiBpbnRvIERFU1QuICAqLworZXh0ZXJuIGNoYXIgKl9fc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCisJCQlfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSwgMikpOworZXh0ZXJuIGNoYXIgKnN0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAorCQkgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSwgMikpOworCisvKiBTYXV0ZWUgU1RSSU5HIGJyaXNrbHkuICAqLworZXh0ZXJuIGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisvKiBGcm9ibmljYXRlIE4gYnl0ZXMgb2YgUy4gICovCitleHRlcm4gdm9pZCAqbWVtZnJvYiAodm9pZCAqX19zLCBzaXplX3QgX19uKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworIyBpZm5kZWYgYmFzZW5hbWUKKy8qIFJldHVybiB0aGUgZmlsZSBuYW1lIHdpdGhpbiBkaXJlY3Rvcnkgb2YgRklMRU5BTUUuICBXZSBkb24ndAorICAgZGVjbGFyZSB0aGUgZnVuY3Rpb24gaWYgdGhlIGBiYXNlbmFtZScgbWFjcm8gaXMgYXZhaWxhYmxlIChkZWZpbmVkCisgICBpbiA8bGliZ2VuLmg+KSB3aGljaCBtYWtlcyB0aGUgWFBHIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbgorICAgYXZhaWxhYmxlLiAgKi8KK2V4dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkIF9fR05VQ19fICYmIF9fR05VQ19fID49IDIKKyMgaWYgZGVmaW5lZCBfX09QVElNSVpFX18gJiYgIWRlZmluZWQgX19PUFRJTUlaRV9TSVpFX18gXAorICAgICAmJiAhZGVmaW5lZCBfX05PX0lOTElORV9fICYmICFkZWZpbmVkIF9fY3BsdXNwbHVzCisvKiBXaGVuIHVzaW5nIEdOVSBDQyB3ZSBwcm92aWRlIHNvbWUgb3B0aW1pemVkIHZlcnNpb25zIG9mIHNlbGVjdGVkCisgICBmdW5jdGlvbnMgZnJvbSB0aGlzIGhlYWRlci4gIFRoZXJlIGFyZSB0d28ga2luZHMgb2Ygb3B0aW1pemF0aW9uczoKKworICAgLSBtYWNoaW5lLWRlcGVuZGVudCBvcHRpbWl6YXRpb25zLCBtb3N0IHByb2JhYmx5IHVzaW5nIGlubGluZQorICAgICBhc3NlbWJsZXIgY29kZTsgdGhlc2UgbWlnaHQgYmUgcXVpdGUgZXhwZW5zaXZlIHNpbmNlIHRoZSBjb2RlCisgICAgIHNpemUgY2FuIGluY3JlYXNlIHNpZ25pZmljYW50bHkuCisgICAgIFRoZXNlIG9wdGltaXphdGlvbnMgYXJlIG5vdCB1c2VkIHVubGVzcyB0aGUgc3ltYm9sCisJX19VU0VfU1RSSU5HX0lOTElORVMKKyAgICAgaXMgZGVmaW5lZCBiZWZvcmUgaW5jbHVkaW5nIHRoaXMgaGVhZGVyLgorCisgICAtIG1hY2hpbmUtaW5kZXBlbmRlbnQgb3B0aW1pemF0aW9ucyB3aGljaCBkbyBub3QgaW5jcmVhc2UgdGhlCisgICAgIGNvZGUgc2l6ZSBzaWduaWZpY2FudGx5IGFuZCB3aGljaCBvcHRpbWl6ZSBtYWlubHkgc2l0dWF0aW9ucworICAgICB3aGVyZSBvbmUgb3IgbW9yZSBhcmd1bWVudHMgYXJlIGNvbXBpbGUtdGltZSBjb25zdGFudHMuCisgICAgIFRoZXNlIG9wdGltaXphdGlvbnMgYXJlIHVzZWQgYWx3YXlzIHdoZW4gdGhlIGNvbXBpbGVyIGlzCisgICAgIHRhdWdodCB0byBvcHRpbWl6ZS4KKworICAgT25lIGNhbiBpbmhpYml0IGFsbCBvcHRpbWl6YXRpb25zIGJ5IGRlZmluaW5nIF9fTk9fU1RSSU5HX0lOTElORVMuICAqLworCisvKiBHZXQgdGhlIG1hY2hpbmUtZGVwZW5kZW50IG9wdGltaXphdGlvbnMgKGlmIGFueSkuICAqLworIyAgaW5jbHVkZSA8Yml0cy9zdHJpbmcuaD4KKworLyogVGhlc2UgYXJlIGdlbmVyaWMgb3B0aW1pemF0aW9ucyB3aGljaCBkbyBub3QgYWRkIHRvbyBtdWNoIGlubGluZSBjb2RlLiAgKi8KKyMgIGluY2x1ZGUgPGJpdHMvc3RyaW5nMi5oPgorIyBlbmRpZgorCisjIGlmIF9fVVNFX0ZPUlRJRllfTEVWRUwgPiAwICYmIGRlZmluZWQgX19leHRlcm5fYWx3YXlzX2lubGluZQorLyogRnVuY3Rpb25zIHdpdGggc2VjdXJpdHkgY2hlY2tzLiAgKi8KKyMgIGluY2x1ZGUgPGJpdHMvc3RyaW5nMy5oPgorIyBlbmRpZgorI2VuZGlmCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBzdHJpbmcuaCAgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zdHJpbmdzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3RyaW5ncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYTJiMDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3RyaW5ncy5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5MSw5Miw5Niw5Nyw5OSwyMDAwLDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYJX1NUUklOR1NfSAorI2RlZmluZQlfU1RSSU5HU19ICTEKKworLyogV2UgZG9uJ3QgbmVlZCBhbmQgc2hvdWxkIG5vdCByZWFkIHRoaXMgZmlsZSBpZiA8c3RyaW5nLmg+IHdhcyBhbHJlYWR5CisgICByZWFkLiBUaGUgb25lIGV4Y2VwdGlvbiBiZWluZyB0aGF0IGlmIF9fVVNFX0JTRCBpc24ndCBkZWZpbmVkLCB0aGVuCisgICB0aGVzZSBhcmVuJ3QgZGVmaW5lZCBpbiBzdHJpbmcuaCwgc28gd2UgbmVlZCB0byBkZWZpbmUgdGhlbSBoZXJlLiAgKi8KKyNpZiAhZGVmaW5lZCBfU1RSSU5HX0ggfHwgIWRlZmluZWQgX19VU0VfQlNECisKKyMgaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyMgZGVmaW5lIF9fbmVlZF9zaXplX3QKKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisKK19fQkVHSU5fREVDTFMKKworLyogQ29tcGFyZSBOIGJ5dGVzIG9mIFMxIGFuZCBTMiAoc2FtZSBhcyBtZW1jbXApLiAgKi8KK2V4dGVybiBpbnQgYmNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfcHVyZV9fOworCisvKiBDb3B5IE4gYnl0ZXMgb2YgU1JDIHRvIERFU1QgKGxpa2UgbWVtbW92ZSwgYnV0IGFyZ3MgcmV2ZXJzZWQpLiAgKi8KK2V4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZvaWQgKl9fc3JjLCB2b2lkICpfX2Rlc3QsIHNpemVfdCBfX24pIF9fVEhST1c7CisKKy8qIFNldCBOIGJ5dGVzIG9mIFMgdG8gMC4gICovCitleHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSBfX1RIUk9XOworCisvKiBSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBiaXQgc2V0IGluIEksIG9yIDAgaWYgbm9uZSBhcmUgc2V0LgorICAgVGhlIGxlYXN0LXNpZ25pZmljYW50IGJpdCBpcyBwb3NpdGlvbiAxLCB0aGUgbW9zdC1zaWduaWZpY2FudCAzMi4gICovCitleHRlcm4gaW50IGZmcyAoaW50IF9faSkgX19USFJPVyBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKKworLyogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBDIGluIFMgKHNhbWUgYXMgc3RyY2hyKS4gICovCitleHRlcm4gY2hhciAqaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX1RIUk9XIF9fYXR0cmlidXRlX3B1cmVfXzsKKworLyogRmluZCB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIEMgaW4gUyAoc2FtZSBhcyBzdHJyY2hyKS4gICovCitleHRlcm4gY2hhciAqcmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19USFJPVyBfX2F0dHJpYnV0ZV9wdXJlX187CisKKy8qIENvbXBhcmUgUzEgYW5kIFMyLCBpZ25vcmluZyBjYXNlLiAgKi8KK2V4dGVybiBpbnQgc3RyY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfcHVyZV9fOworCisvKiBDb21wYXJlIG5vIG1vcmUgdGhhbiBOIGNoYXJzIG9mIFMxIGFuZCBTMiwgaWdub3JpbmcgY2FzZS4gICovCitleHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9wdXJlX187CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZgkvKiBzdHJpbmcuaCAgKi8KKworI2VuZGlmCS8qIHN0cmluZ3MuaCAgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zdHJvcHRzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3Ryb3B0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MmMwOWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3Ryb3B0cy5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfU1RST1BUU19ICisjZGVmaW5lIF9TVFJPUFRTX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxiaXRzL3R5cGVzLmg+CisjaW5jbHVkZSA8Yml0cy94dGl0eXBlcy5oPgorCisjaWZuZGVmIF9fZ2lkX3RfZGVmaW5lZAordHlwZWRlZiBfX2dpZF90IGdpZF90OworIyBkZWZpbmUgX19naWRfdF9kZWZpbmVkCisjZW5kaWYKKworI2lmbmRlZiBfX3VpZF90X2RlZmluZWQKK3R5cGVkZWYgX191aWRfdCB1aWRfdDsKKyMgZGVmaW5lIF9fdWlkX3RfZGVmaW5lZAorI2VuZGlmCisKK3R5cGVkZWYgX190X3VzY2FsYXJfdCB0X3VzY2FsYXJfdDsKKworLyogR2V0IHN5c3RlbSBzcGVjaWZpYyBjb250YW50cy4gICovCisjaW5jbHVkZSA8Yml0cy9zdHJvcHRzLmg+CisKKworX19CRUdJTl9ERUNMUworCisvKiBUZXN0IHdoZXRoZXIgRklMREVTIGlzIGFzc29jaWF0ZWQgd2l0aCBhIFNUUkVBTS1iYXNlZCBmaWxlLiAgKi8KK2V4dGVybiBpbnQgaXNhc3RyZWFtIChpbnQgX19maWxkZXMpIF9fVEhST1c7CisKKy8qIFJlY2VpdmUgbmV4dCBtZXNzYWdlIGZyb20gYSBTVFJFQU1TIGZpbGUuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGgKKyAgIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBnZXRtc2cgKGludCBfX2ZpbGRlcywgc3RydWN0IHN0cmJ1ZiAqX19yZXN0cmljdCBfX2N0bHB0ciwKKwkJICAgc3RydWN0IHN0cmJ1ZiAqX19yZXN0cmljdCBfX2RhdGFwdHIsCisJCSAgIGludCAqX19yZXN0cmljdCBfX2ZsYWdzcCk7CisKKy8qIFJlY2VpdmUgbmV4dCBtZXNzYWdlIGZyb20gYSBTVFJFQU1TIGZpbGUsIHdpdGggKkZMQUdTUCBhbGxvd2luZyB0bworICAgY29udHJvbCB3aGljaCBtZXNzYWdlLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoCisgICBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgZ2V0cG1zZyAoaW50IF9fZmlsZGVzLCBzdHJ1Y3Qgc3RyYnVmICpfX3Jlc3RyaWN0IF9fY3RscHRyLAorCQkgICAgc3RydWN0IHN0cmJ1ZiAqX19yZXN0cmljdCBfX2RhdGFwdHIsCisJCSAgICBpbnQgKl9fcmVzdHJpY3QgX19iYW5kcCwgaW50ICpfX3Jlc3RyaWN0IF9fZmxhZ3NwKTsKKworLyogUGVyZm9ybSB0aGUgSS9PIGNvbnRyb2wgb3BlcmF0aW9uIHNwZWNpZmllZCBieSBSRVFVRVNUIG9uIEZELgorICAgT25lIGFyZ3VtZW50IG1heSBmb2xsb3c7IGl0cyBwcmVzZW5jZSBhbmQgdHlwZSBkZXBlbmQgb24gUkVRVUVTVC4KKyAgIFJldHVybiB2YWx1ZSBkZXBlbmRzIG9uIFJFUVVFU1QuICBVc3VhbGx5IC0xIGluZGljYXRlcyBlcnJvci4gICovCitleHRlcm4gaW50IGlvY3RsIChpbnQgX19mZCwgdW5zaWduZWQgbG9uZyBpbnQgX19yZXF1ZXN0LCAuLi4pIF9fVEhST1c7CisKKy8qIFNlbmQgYSBtZXNzYWdlIG9uIGEgU1RSRUFNLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoCisgICBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgcHV0bXNnIChpbnQgX19maWxkZXMsIF9fY29uc3Qgc3RydWN0IHN0cmJ1ZiAqX19jdGxwdHIsCisJCSAgIF9fY29uc3Qgc3RydWN0IHN0cmJ1ZiAqX19kYXRhcHRyLCBpbnQgX19mbGFncyk7CisKKy8qIFNlbmQgYSBtZXNzYWdlIG9uIGEgU1RSRUFNIHRvIHRoZSBCQU5ELgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoCisgICBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgcHV0cG1zZyAoaW50IF9fZmlsZGVzLCBfX2NvbnN0IHN0cnVjdCBzdHJidWYgKl9fY3RscHRyLAorCQkgICAgX19jb25zdCBzdHJ1Y3Qgc3RyYnVmICpfX2RhdGFwdHIsIGludCBfX2JhbmQsIGludCBfX2ZsYWdzKTsKKworLyogQXR0YWNoIGEgU1RSRUFNUy1iYXNlZCBmaWxlIGRlc2NyaXB0b3IgRklMREVTIHRvIGEgZmlsZSBQQVRIIGluIHRoZQorICAgZmlsZSBzeXN0ZW0gbmFtZSBzcGFjZS4gICovCitleHRlcm4gaW50IGZhdHRhY2ggKGludCBfX2ZpbGRlcywgX19jb25zdCBjaGFyICpfX3BhdGgpIF9fVEhST1c7CisKKy8qIERldGFjaCBhIG5hbWUgUEFUSCBmcm9tIGEgU1RSRUFNUy1iYXNlZCBmaWxlIGRlc2NyaXB0b3IuICAqLworZXh0ZXJuIGludCBmZGV0YWNoIChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgX19USFJPVzsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIHN0cm9wdHMuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9hY2N0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL2FjY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2M2M2ViCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9hY2N0LmgKQEAgLTAsMCArMSwxMDkgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfU1lTX0FDQ1RfSAorI2RlZmluZSBfU1lTX0FDQ1RfSAkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCisjaW5jbHVkZSA8ZW5kaWFuLmg+CisjZGVmaW5lCV9fbmVlZF90aW1lX3QKKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK19fQkVHSU5fREVDTFMKKworI2RlZmluZSBBQ0NUX0NPTU0gMTYKKworLyoKKyAgY29tcF90IGlzIGEgMTYtYml0ICJmbG9hdGluZyIgcG9pbnQgbnVtYmVyIHdpdGggYSAzLWJpdCBiYXNlIDgKKyAgZXhwb25lbnQgYW5kIGEgMTMtYml0IGZyYWN0aW9uLiBTZWUgbGludXgva2VybmVsL2FjY3QuYyBmb3IgdGhlCisgIHNwZWNpZmljIGVuY29kaW5nIHN5c3RlbSB1c2VkLgorKi8KKwordHlwZWRlZiB1X2ludDE2X3QgY29tcF90OworCitzdHJ1Y3QgYWNjdAoreworICBjaGFyIGFjX2ZsYWc7CQkJLyogRmxhZ3MuICAqLworICB1X2ludDE2X3QgYWNfdWlkOwkJLyogUmVhbCB1c2VyIElELiAgKi8KKyAgdV9pbnQxNl90IGFjX2dpZDsJCS8qIFJlYWwgZ3JvdXAgSUQuICAqLworICB1X2ludDE2X3QgYWNfdHR5OwkJLyogQ29udHJvbGxpbmcgdGVybWluYWwuICAqLworICB1X2ludDMyX3QgYWNfYnRpbWU7CQkvKiBCZWdpbm5pbmcgdGltZS4gICovCisgIGNvbXBfdCBhY191dGltZTsJCS8qIFVzZXIgdGltZS4gICovCisgIGNvbXBfdCBhY19zdGltZTsJCS8qIFN5c3RlbSB0aW1lLiAgKi8KKyAgY29tcF90IGFjX2V0aW1lOwkJLyogRWxhcHNlZCB0aW1lLiAgKi8KKyAgY29tcF90IGFjX21lbTsJCS8qIEF2ZXJhZ2UgbWVtb3J5IHVzYWdlLiAgKi8KKyAgY29tcF90IGFjX2lvOwkJCS8qIENoYXJzIHRyYW5zZmVycmVkLiAgKi8KKyAgY29tcF90IGFjX3J3OwkJCS8qIEJsb2NrcyByZWFkIG9yIHdyaXR0ZW4uICAqLworICBjb21wX3QgYWNfbWluZmx0OwkJLyogTWlub3IgcGFnZWZhdWx0cy4gICovCisgIGNvbXBfdCBhY19tYWpmbHQ7CQkvKiBNYWpvciBwYWdlZmF1bHRzLiAgKi8KKyAgY29tcF90IGFjX3N3YXBzOwkJLyogTnVtYmVyIG9mIHN3YXBzLiAgKi8KKyAgdV9pbnQzMl90IGFjX2V4aXRjb2RlOwkvKiBQcm9jZXNzIGV4aXRjb2RlLiAgKi8KKyAgY2hhciBhY19jb21tW0FDQ1RfQ09NTSsxXTsJLyogQ29tbWFuZCBuYW1lLiAgKi8KKyAgY2hhciBhY19wYWRbMTBdOwkJLyogUGFkZGluZyBieXRlcy4gICovCit9OworCisKK3N0cnVjdCBhY2N0X3YzCit7CisgIGNoYXIgYWNfZmxhZzsJCQkvKiBGbGFncyAqLworICBjaGFyIGFjX3ZlcnNpb247CQkvKiBBbHdheXMgc2V0IHRvIEFDQ1RfVkVSU0lPTiAqLworICB1X2ludDE2X3QgYWNfdHR5OwkJLyogQ29udHJvbCBUZXJtaW5hbCAqLworICB1X2ludDMyX3QgYWNfZXhpdGNvZGU7CS8qIEV4aXRjb2RlICovCisgIHVfaW50MzJfdCBhY191aWQ7CQkvKiBSZWFsIFVzZXIgSUQgKi8KKyAgdV9pbnQzMl90IGFjX2dpZDsJCS8qIFJlYWwgR3JvdXAgSUQgKi8KKyAgdV9pbnQzMl90IGFjX3BpZDsJCS8qIFByb2Nlc3MgSUQgKi8KKyAgdV9pbnQzMl90IGFjX3BwaWQ7CQkvKiBQYXJlbnQgUHJvY2VzcyBJRCAqLworICB1X2ludDMyX3QgYWNfYnRpbWU7CQkvKiBQcm9jZXNzIENyZWF0aW9uIFRpbWUgKi8KKyAgZmxvYXQgYWNfZXRpbWU7CQkvKiBFbGFwc2VkIFRpbWUgKi8KKyAgY29tcF90IGFjX3V0aW1lOwkJLyogVXNlciBUaW1lICovCisgIGNvbXBfdCBhY19zdGltZTsJCS8qIFN5c3RlbSBUaW1lICovCisgIGNvbXBfdCBhY19tZW07CQkvKiBBdmVyYWdlIE1lbW9yeSBVc2FnZSAqLworICBjb21wX3QgYWNfaW87CQkJLyogQ2hhcnMgVHJhbnNmZXJyZWQgKi8KKyAgY29tcF90IGFjX3J3OwkJCS8qIEJsb2NrcyBSZWFkIG9yIFdyaXR0ZW4gKi8KKyAgY29tcF90IGFjX21pbmZsdDsJCS8qIE1pbm9yIFBhZ2VmYXVsdHMgKi8KKyAgY29tcF90IGFjX21hamZsdDsJCS8qIE1ham9yIFBhZ2VmYXVsdHMgKi8KKyAgY29tcF90IGFjX3N3YXBzOwkJLyogTnVtYmVyIG9mIFN3YXBzICovCisgIGNoYXIgYWNfY29tbVtBQ0NUX0NPTU1dOwkvKiBDb21tYW5kIE5hbWUgKi8KK307CisKKworZW51bQorICB7CisgICAgQUZPUksgPSAweDAxLAkJLyogSGFzIGV4ZWN1dGVkIGZvcmssIGJ1dCBubyBleGVjLiAgKi8KKyAgICBBU1UgPSAweDAyLAkJCS8qIFVzZWQgc3VwZXItdXNlciBwcml2aWxlZ2VzLiAgKi8KKyAgICBBQ09SRSA9IDB4MDgsCQkvKiBEdW1wZWQgY29yZS4gICovCisgICAgQVhTSUcgPSAweDEwCQkvKiBLaWxsZWQgYnkgYSBzaWduYWwuICAqLworICB9OworCisjaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorIyBkZWZpbmUgQUNDVF9CWVRFT1JERVIgMHg4MAkvKiBBY2NvdW50aW5nIGZpbGUgaXMgYmlnIGVuZGlhbi4gICovCisjZWxzZQorIyBkZWZpbmUgQUNDVF9CWVRFT1JERVIgMHgwMAkvKiBBY2NvdW50aW5nIGZpbGUgaXMgbGl0dGxlIGVuZGlhbi4gICovCisjZW5kaWYKKworI2RlZmluZSBBSFogICAgIDEwMAorCisKKy8qIFN3aXRjaCBwcm9jZXNzIGFjY291bnRpbmcgb24gYW5kIG9mZi4gICovCitleHRlcm4gaW50IGFjY3QgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgX19USFJPVzsKKworX19FTkRfREVDTFMKKworI2VuZGlmCS8qIHN5cy9hY2N0LmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvYml0eXBlcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9iaXR5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E5ODYwZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvYml0eXBlcy5oCkBAIC0wLDAgKzEsMyBAQAorLyogVGhlIEdOVSA8c3lzL3R5cGVzLmg+IGRlZmluZXMgYWxsIHRoZSBuZWNlc3NhcnkgdHlwZXMuICAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL2NkZWZzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL2NkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZkYzRmOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaApAQCAtMCwwICsxLDM4MiBAQAorLyogQ29weXJpZ2h0IChDKSAxOTkyLTIwMDEsIDIwMDIsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmCV9TWVNfQ0RFRlNfSAorI2RlZmluZQlfU1lTX0NERUZTX0gJMQorCisvKiBXZSBhcmUgYWxtb3N0IGFsd2F5cyBpbmNsdWRlZCBmcm9tIGZlYXR1cmVzLmguICovCisjaWZuZGVmIF9GRUFUVVJFU19ICisjIGluY2x1ZGUgPGZlYXR1cmVzLmg+CisjZW5kaWYKKworLyogVGhlIEdOVSBsaWJjIGRvZXMgbm90IHN1cHBvcnQgYW55IEsmUiBjb21waWxlcnMgb3IgdGhlIHRyYWRpdGlvbmFsIG1vZGUKKyAgIG9mIElTTyBDIGNvbXBpbGVycyBhbnltb3JlLiAgQ2hlY2sgZm9yIHNvbWUgb2YgdGhlIGNvbWJpbmF0aW9ucyBub3QKKyAgIGFueW1vcmUgc3VwcG9ydGVkLiAgKi8KKyNpZiBkZWZpbmVkIF9fR05VQ19fICYmICFkZWZpbmVkIF9fU1REQ19fCisjIGVycm9yICJZb3UgbmVlZCBhIElTTyBDIGNvbmZvcm1pbmcgY29tcGlsZXIgdG8gdXNlIHRoZSBnbGliYyBoZWFkZXJzIgorI2VuZGlmCisKKy8qIFNvbWUgdXNlciBoZWFkZXIgZmlsZSBtaWdodCBoYXZlIGRlZmluZWQgdGhpcyBiZWZvcmUuICAqLworI3VuZGVmCV9fUAorI3VuZGVmCV9fUE1UCisKKyNpZmRlZiBfX0dOVUNfXworCisvKiBHQ0MgY2FuIGFsd2F5cyBncm9rIHByb3RvdHlwZXMuICBGb3IgQysrIHByb2dyYW1zIHdlIGFkZCB0aHJvdygpCisgICB0byBoZWxwIGl0IG9wdGltaXplIHRoZSBmdW5jdGlvbiBjYWxscy4gIEJ1dCB0aGlzIHdvcmtzIG9ubHkgd2l0aAorICAgZ2NjIDIuOC54IGFuZCBlZ2NzLiAgRm9yIGdjYyAzLjIgYW5kIHVwIHdlIGV2ZW4gbWFyayBDIGZ1bmN0aW9ucworICAgYXMgbm9uLXRocm93aW5nIHVzaW5nIGEgZnVuY3Rpb24gYXR0cmlidXRlIHNpbmNlIHByb2dyYW1zIGNhbiB1c2UKKyAgIHRoZSAtZmV4Y2VwdGlvbnMgb3B0aW9ucyBmb3IgQyBjb2RlIGFzIHdlbGwuICAqLworIyBpZiAhZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBfX0dOVUNfUFJFUkVRICgzLCAzKQorIyAgZGVmaW5lIF9fVEhST1cJX19hdHRyaWJ1dGVfXyAoKF9fbm90aHJvd19fKSkKKyMgIGRlZmluZSBfX05USChmY3QpCV9fYXR0cmlidXRlX18gKChfX25vdGhyb3dfXykpIGZjdAorIyBlbHNlCisjICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIF9fR05VQ19QUkVSRVEgKDIsOCkKKyMgICBkZWZpbmUgX19USFJPVwl0aHJvdyAoKQorIyAgIGRlZmluZSBfX05USChmY3QpCWZjdCB0aHJvdyAoKQorIyAgZWxzZQorIyAgIGRlZmluZSBfX1RIUk9XCisjICAgZGVmaW5lIF9fTlRIKGZjdCkJZmN0CisjICBlbmRpZgorIyBlbmRpZgorCisjZWxzZQkvKiBOb3QgR0NDLiAgKi8KKworIyBkZWZpbmUgX19pbmxpbmUJCS8qIE5vIGlubGluZSBmdW5jdGlvbnMuICAqLworCisjIGRlZmluZSBfX1RIUk9XCisjIGRlZmluZSBfX05USChmY3QpCWZjdAorCisjIGRlZmluZSBfX2NvbnN0CWNvbnN0CisjIGRlZmluZSBfX3NpZ25lZAlzaWduZWQKKyMgZGVmaW5lIF9fdm9sYXRpbGUJdm9sYXRpbGUKKworI2VuZGlmCS8qIEdDQy4gICovCisKKy8qIFRoZXNlIHR3byBtYWNyb3MgYXJlIG5vdCB1c2VkIGluIGdsaWJjIGFueW1vcmUuICBUaGV5IGFyZSBrZXB0IGhlcmUKKyAgIG9ubHkgYmVjYXVzZSBzb21lIG90aGVyIHByb2plY3RzIGV4cGVjdCB0aGUgbWFjcm9zIHRvIGJlIGRlZmluZWQuICAqLworI2RlZmluZSBfX1AoYXJncykJYXJncworI2RlZmluZSBfX1BNVChhcmdzKQlhcmdzCisKKy8qIEZvciB0aGVzZSB0aGluZ3MsIEdDQyBiZWhhdmVzIHRoZSBBTlNJIHdheSBub3JtYWxseSwKKyAgIGFuZCB0aGUgbm9uLUFOU0kgd2F5IHVuZGVyIC10cmFkaXRpb25hbC4gICovCisKKyNkZWZpbmUgX19DT05DQVQoeCx5KQl4ICMjIHkKKyNkZWZpbmUgX19TVFJJTkcoeCkJI3gKKworLyogVGhpcyBpcyBub3QgYSB0eXBlZGVmIHNvIGBjb25zdCBfX3B0cl90JyBkb2VzIHRoZSByaWdodCB0aGluZy4gICovCisjZGVmaW5lIF9fcHRyX3Qgdm9pZCAqCisjZGVmaW5lIF9fbG9uZ19kb3VibGVfdCAgbG9uZyBkb3VibGUKKworCisvKiBDKysgbmVlZHMgdG8ga25vdyB0aGF0IHR5cGVzIGFuZCBkZWNsYXJhdGlvbnMgYXJlIEMsIG5vdCBDKysuICAqLworI2lmZGVmCV9fY3BsdXNwbHVzCisjIGRlZmluZSBfX0JFR0lOX0RFQ0xTCWV4dGVybiAiQyIgeworIyBkZWZpbmUgX19FTkRfREVDTFMJfQorI2Vsc2UKKyMgZGVmaW5lIF9fQkVHSU5fREVDTFMKKyMgZGVmaW5lIF9fRU5EX0RFQ0xTCisjZW5kaWYKKworCisvKiBUaGUgc3RhbmRhcmQgbGlicmFyeSBuZWVkcyB0aGUgZnVuY3Rpb25zIGZyb20gdGhlIElTTyBDOTAgc3RhbmRhcmQKKyAgIGluIHRoZSBzdGQgbmFtZXNwYWNlLiAgQXQgdGhlIHNhbWUgdGltZSB3ZSB3YW50IHRvIGJlIHNhZmUgZm9yCisgICBmdXR1cmUgY2hhbmdlcyBhbmQgd2UgaW5jbHVkZSB0aGUgSVNPIEM5OSBjb2RlIGluIHRoZSBub24tc3RhbmRhcmQKKyAgIG5hbWVzcGFjZSBfX2M5OS4gIFRoZSBDKysgd3JhcHBlciBoZWFkZXIgdGFrZSBjYXNlIG9mIGFkZGluZyB0aGUKKyAgIGRlZmluaXRpb25zIHRvIHRoZSBnbG9iYWwgbmFtZXNwYWNlLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgX0dMSUJDUFBfVVNFX05BTUVTUEFDRVMKKyMgZGVmaW5lIF9fQkVHSU5fTkFNRVNQQUNFX1NURAluYW1lc3BhY2Ugc3RkIHsKKyMgZGVmaW5lIF9fRU5EX05BTUVTUEFDRV9TVEQJfQorIyBkZWZpbmUgX19VU0lOR19OQU1FU1BBQ0VfU1REKG5hbWUpIHVzaW5nIHN0ZDo6bmFtZTsKKyMgZGVmaW5lIF9fQkVHSU5fTkFNRVNQQUNFX0M5OQluYW1lc3BhY2UgX19jOTkgeworIyBkZWZpbmUgX19FTkRfTkFNRVNQQUNFX0M5OQl9CisjIGRlZmluZSBfX1VTSU5HX05BTUVTUEFDRV9DOTkobmFtZSkgdXNpbmcgX19jOTk6Om5hbWU7CisjZWxzZQorLyogRm9yIGNvbXBhdGliaWxpdHkgd2UgZG8gbm90IGFkZCB0aGUgZGVjbGFyYXRpb25zIGludG8gYW55CisgICBuYW1lc3BhY2UuICBUaGV5IHdpbGwgZW5kIHVwIGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlIHdoaWNoIGlzIHdoYXQKKyAgIG9sZCBjb2RlIGV4cGVjdHMuICAqLworIyBkZWZpbmUgX19CRUdJTl9OQU1FU1BBQ0VfU1RECisjIGRlZmluZSBfX0VORF9OQU1FU1BBQ0VfU1RECisjIGRlZmluZSBfX1VTSU5HX05BTUVTUEFDRV9TVEQobmFtZSkKKyMgZGVmaW5lIF9fQkVHSU5fTkFNRVNQQUNFX0M5OQorIyBkZWZpbmUgX19FTkRfTkFNRVNQQUNFX0M5OQorIyBkZWZpbmUgX19VU0lOR19OQU1FU1BBQ0VfQzk5KG5hbWUpCisjZW5kaWYKKworCisvKiBTdXBwb3J0IGZvciBib3VuZGVkIHBvaW50ZXJzLiAgKi8KKyNpZm5kZWYgX19CT1VOREVEX1BPSU5URVJTX18KKyMgZGVmaW5lIF9fYm91bmRlZAkvKiBub3RoaW5nICovCisjIGRlZmluZSBfX3VuYm91bmRlZAkvKiBub3RoaW5nICovCisjIGRlZmluZSBfX3B0cnZhbHVlCS8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCisKKy8qIEZvcnRpZnkgc3VwcG9ydC4gICovCisjZGVmaW5lIF9fYm9zKHB0cikgX19idWlsdGluX29iamVjdF9zaXplIChwdHIsIF9fVVNFX0ZPUlRJRllfTEVWRUwgPiAxKQorI2RlZmluZSBfX2JvczAocHRyKSBfX2J1aWx0aW5fb2JqZWN0X3NpemUgKHB0ciwgMCkKKworI2lmIF9fR05VQ19QUkVSRVEgKDQsMykKKyMgZGVmaW5lIF9fd2FybmRlY2wobmFtZSwgbXNnKSBcCisgIGV4dGVybiB2b2lkIG5hbWUgKHZvaWQpIF9fYXR0cmlidXRlX18oKF9fd2FybmluZ19fIChtc2cpKSkKKyMgZGVmaW5lIF9fd2FybmF0dHIobXNnKSBfX2F0dHJpYnV0ZV9fKChfX3dhcm5pbmdfXyAobXNnKSkpCisjIGRlZmluZSBfX2Vycm9yZGVjbChuYW1lLCBtc2cpIFwKKyAgZXh0ZXJuIHZvaWQgbmFtZSAodm9pZCkgX19hdHRyaWJ1dGVfXygoX19lcnJvcl9fIChtc2cpKSkKKyNlbHNlCisjIGRlZmluZSBfX3dhcm5kZWNsKG5hbWUsIG1zZykgZXh0ZXJuIHZvaWQgbmFtZSAodm9pZCkKKyMgZGVmaW5lIF9fd2FybmF0dHIobXNnKQorIyBkZWZpbmUgX19lcnJvcmRlY2wobmFtZSwgbXNnKSBleHRlcm4gdm9pZCBuYW1lICh2b2lkKQorI2VuZGlmCisKKy8qIFN1cHBvcnQgZm9yIGZsZXhpYmxlIGFycmF5cy4gICovCisjaWYgX19HTlVDX1BSRVJFUSAoMiw5NykKKy8qIEdDQyAyLjk3IHN1cHBvcnRzIEM5OSBmbGV4aWJsZSBhcnJheSBtZW1iZXJzLiAgKi8KKyMgZGVmaW5lIF9fZmxleGFycglbXQorI2Vsc2UKKyMgaWZkZWYgX19HTlVDX18KKyMgIGRlZmluZSBfX2ZsZXhhcnIJWzBdCisjIGVsc2UKKyMgIGlmIGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKyMgICBkZWZpbmUgX19mbGV4YXJyCVtdCisjICBlbHNlCisvKiBTb21lIG90aGVyIG5vbi1DOTkgY29tcGlsZXIuICBBcHByb3hpbWF0ZSB3aXRoIFsxXS4gICovCisjICAgZGVmaW5lIF9fZmxleGFycglbMV0KKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBfX2FzbV9fICgieHl6IikgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBoZWFkZXJzIHRvIHJlbmFtZSBmdW5jdGlvbnMKKyAgIGF0IHRoZSBhc3NlbWJseSBsYW5ndWFnZSBsZXZlbC4gIFRoaXMgaXMgd3JhcHBlZCBieSB0aGUgX19SRURJUkVDVAorICAgbWFjcm8sIGluIG9yZGVyIHRvIHN1cHBvcnQgY29tcGlsZXJzIHRoYXQgY2FuIGRvIHRoaXMgc29tZSBvdGhlcgorICAgd2F5LiAgV2hlbiBjb21waWxlcnMgZG9uJ3Qgc3VwcG9ydCBhc20tbmFtZXMgYXQgYWxsLCB3ZSBoYXZlIHRvIGRvCisgICBwcmVwcm9jZXNzb3IgdHJpY2tzIGluc3RlYWQgKHdoaWNoIGRvbid0IGhhdmUgZXhhY3RseSB0aGUgcmlnaHQKKyAgIHNlbWFudGljcywgYnV0IGl0J3MgdGhlIGJlc3Qgd2UgY2FuIGRvKS4KKworICAgRXhhbXBsZToKKyAgIGludCBfX1JFRElSRUNUKHNldHBncnAsIChfX3BpZF90IHBpZCwgX19waWRfdCBwZ3JwKSwgc2V0cGdpZCk7ICovCisKKyNpZiBkZWZpbmVkIF9fR05VQ19fICYmIF9fR05VQ19fID49IDIKKworIyBkZWZpbmUgX19SRURJUkVDVChuYW1lLCBwcm90bywgYWxpYXMpIG5hbWUgcHJvdG8gX19hc21fXyAoX19BU01OQU1FICgjYWxpYXMpKQorIyBpZmRlZiBfX2NwbHVzcGx1cworIyAgZGVmaW5lIF9fUkVESVJFQ1RfTlRIKG5hbWUsIHByb3RvLCBhbGlhcykgXAorICAgICBuYW1lIHByb3RvIF9fVEhST1cgX19hc21fXyAoX19BU01OQU1FICgjYWxpYXMpKQorIyBlbHNlCisjICBkZWZpbmUgX19SRURJUkVDVF9OVEgobmFtZSwgcHJvdG8sIGFsaWFzKSBcCisgICAgIG5hbWUgcHJvdG8gX19hc21fXyAoX19BU01OQU1FICgjYWxpYXMpKSBfX1RIUk9XCisjIGVuZGlmCisjIGRlZmluZSBfX0FTTU5BTUUoY25hbWUpICBfX0FTTU5BTUUyIChfX1VTRVJfTEFCRUxfUFJFRklYX18sIGNuYW1lKQorIyBkZWZpbmUgX19BU01OQU1FMihwcmVmaXgsIGNuYW1lKSBfX1NUUklORyAocHJlZml4KSBjbmFtZQorCisvKgorI2VsaWYgX19TT01FX09USEVSX0NPTVBJTEVSX18KKworIyBkZWZpbmUgX19SRURJUkVDVChuYW1lLCBwcm90bywgYWxpYXMpIG5hbWUgcHJvdG87IFwKKwlfUHJhZ21hKCJsZXQgIiAjbmFtZSAiID0gIiAjYWxpYXMpCisqLworI2VuZGlmCisKKy8qIEdDQyBoYXMgdmFyaW91cyB1c2VmdWwgZGVjbGFyYXRpb25zIHRoYXQgY2FuIGJlIG1hZGUgd2l0aCB0aGUKKyAgIGBfX2F0dHJpYnV0ZV9fJyBzeW50YXguICBBbGwgb2YgdGhlIHdheXMgd2UgdXNlIHRoaXMgZG8gZmluZSBpZgorICAgdGhleSBhcmUgb21pdHRlZCBmb3IgY29tcGlsZXJzIHRoYXQgZG9uJ3QgdW5kZXJzdGFuZCBpdC4gKi8KKyNpZiAhZGVmaW5lZCBfX0dOVUNfXyB8fCBfX0dOVUNfXyA8IDIKKyMgZGVmaW5lIF9fYXR0cmlidXRlX18oeHl6KQkvKiBJZ25vcmUgKi8KKyNlbmRpZgorCisvKiBBdCBzb21lIHBvaW50IGR1cmluZyB0aGUgZ2NjIDIuOTYgZGV2ZWxvcG1lbnQgdGhlIGBtYWxsb2MnIGF0dHJpYnV0ZQorICAgZm9yIGZ1bmN0aW9ucyB3YXMgaW50cm9kdWNlZC4gIFdlIGRvbid0IHdhbnQgdG8gdXNlIGl0IHVuY29uZGl0aW9uYWxseQorICAgKGFsdGhvdWdoIHRoaXMgd291bGQgYmUgcG9zc2libGUpIHNpbmNlIGl0IGdlbmVyYXRlcyB3YXJuaW5ncy4gICovCisjaWYgX19HTlVDX1BSRVJFUSAoMiw5NikKKyMgZGVmaW5lIF9fYXR0cmlidXRlX21hbGxvY19fIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSkKKyNlbHNlCisjIGRlZmluZSBfX2F0dHJpYnV0ZV9tYWxsb2NfXyAvKiBJZ25vcmUgKi8KKyNlbmRpZgorCisvKiBBdCBzb21lIHBvaW50IGR1cmluZyB0aGUgZ2NjIDIuOTYgZGV2ZWxvcG1lbnQgdGhlIGBwdXJlJyBhdHRyaWJ1dGUKKyAgIGZvciBmdW5jdGlvbnMgd2FzIGludHJvZHVjZWQuICBXZSBkb24ndCB3YW50IHRvIHVzZSBpdCB1bmNvbmRpdGlvbmFsbHkKKyAgIChhbHRob3VnaCB0aGlzIHdvdWxkIGJlIHBvc3NpYmxlKSBzaW5jZSBpdCBnZW5lcmF0ZXMgd2FybmluZ3MuICAqLworI2lmIF9fR05VQ19QUkVSRVEgKDIsOTYpCisjIGRlZmluZSBfX2F0dHJpYnV0ZV9wdXJlX18gX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSkKKyNlbHNlCisjIGRlZmluZSBfX2F0dHJpYnV0ZV9wdXJlX18gLyogSWdub3JlICovCisjZW5kaWYKKworLyogQXQgc29tZSBwb2ludCBkdXJpbmcgdGhlIGdjYyAzLjEgZGV2ZWxvcG1lbnQgdGhlIGB1c2VkJyBhdHRyaWJ1dGUKKyAgIGZvciBmdW5jdGlvbnMgd2FzIGludHJvZHVjZWQuICBXZSBkb24ndCB3YW50IHRvIHVzZSBpdCB1bmNvbmRpdGlvbmFsbHkKKyAgIChhbHRob3VnaCB0aGlzIHdvdWxkIGJlIHBvc3NpYmxlKSBzaW5jZSBpdCBnZW5lcmF0ZXMgd2FybmluZ3MuICAqLworI2lmIF9fR05VQ19QUkVSRVEgKDMsMSkKKyMgZGVmaW5lIF9fYXR0cmlidXRlX3VzZWRfXyBfX2F0dHJpYnV0ZV9fICgoX191c2VkX18pKQorIyBkZWZpbmUgX19hdHRyaWJ1dGVfbm9pbmxpbmVfXyBfX2F0dHJpYnV0ZV9fICgoX19ub2lubGluZV9fKSkKKyNlbHNlCisjIGRlZmluZSBfX2F0dHJpYnV0ZV91c2VkX18gX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQorIyBkZWZpbmUgX19hdHRyaWJ1dGVfbm9pbmxpbmVfXyAvKiBJZ25vcmUgKi8KKyNlbmRpZgorCisvKiBnY2MgYWxsb3dzIG1hcmtpbmcgZGVwcmVjYXRlZCBmdW5jdGlvbnMuICAqLworI2lmIF9fR05VQ19QUkVSRVEgKDMsMikKKyMgZGVmaW5lIF9fYXR0cmlidXRlX2RlcHJlY2F0ZWRfXyBfX2F0dHJpYnV0ZV9fICgoX19kZXByZWNhdGVkX18pKQorI2Vsc2UKKyMgZGVmaW5lIF9fYXR0cmlidXRlX2RlcHJlY2F0ZWRfXyAvKiBJZ25vcmUgKi8KKyNlbmRpZgorCisvKiBBdCBzb21lIHBvaW50IGR1cmluZyB0aGUgZ2NjIDIuOCBkZXZlbG9wbWVudCB0aGUgYGZvcm1hdF9hcmcnIGF0dHJpYnV0ZQorICAgZm9yIGZ1bmN0aW9ucyB3YXMgaW50cm9kdWNlZC4gIFdlIGRvbid0IHdhbnQgdG8gdXNlIGl0IHVuY29uZGl0aW9uYWxseQorICAgKGFsdGhvdWdoIHRoaXMgd291bGQgYmUgcG9zc2libGUpIHNpbmNlIGl0IGdlbmVyYXRlcyB3YXJuaW5ncy4KKyAgIElmIHNldmVyYWwgYGZvcm1hdF9hcmcnIGF0dHJpYnV0ZXMgYXJlIGdpdmVuIGZvciB0aGUgc2FtZSBmdW5jdGlvbiwgaW4KKyAgIGdjYy0zLjAgYW5kIG9sZGVyLCBhbGwgYnV0IHRoZSBsYXN0IG9uZSBhcmUgaWdub3JlZC4gIEluIG5ld2VyIGdjY3MsCisgICBhbGwgZGVzaWduYXRlZCBhcmd1bWVudHMgYXJlIGNvbnNpZGVyZWQuICAqLworI2lmIF9fR05VQ19QUkVSRVEgKDIsOCkKKyMgZGVmaW5lIF9fYXR0cmlidXRlX2Zvcm1hdF9hcmdfXyh4KSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKHgpKSkKKyNlbHNlCisjIGRlZmluZSBfX2F0dHJpYnV0ZV9mb3JtYXRfYXJnX18oeCkgLyogSWdub3JlICovCisjZW5kaWYKKworLyogQXQgc29tZSBwb2ludCBkdXJpbmcgdGhlIGdjYyAyLjk3IGRldmVsb3BtZW50IHRoZSBgc3RyZm1vbicgZm9ybWF0CisgICBhdHRyaWJ1dGUgZm9yIGZ1bmN0aW9ucyB3YXMgaW50cm9kdWNlZC4gIFdlIGRvbid0IHdhbnQgdG8gdXNlIGl0CisgICB1bmNvbmRpdGlvbmFsbHkgKGFsdGhvdWdoIHRoaXMgd291bGQgYmUgcG9zc2libGUpIHNpbmNlIGl0CisgICBnZW5lcmF0ZXMgd2FybmluZ3MuICAqLworI2lmIF9fR05VQ19QUkVSRVEgKDIsOTcpCisjIGRlZmluZSBfX2F0dHJpYnV0ZV9mb3JtYXRfc3RyZm1vbl9fKGEsYikgXAorICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zdHJmbW9uX18sIGEsIGIpKSkKKyNlbHNlCisjIGRlZmluZSBfX2F0dHJpYnV0ZV9mb3JtYXRfc3RyZm1vbl9fKGEsYikgLyogSWdub3JlICovCisjZW5kaWYKKworLyogVGhlIG5vbnVsbCBmdW5jdGlvbiBhdHRyaWJ1dGUgYWxsb3dzIHRvIG1hcmsgcG9pbnRlciBwYXJhbWV0ZXJzIHdoaWNoCisgICBtdXN0IG5vdCBiZSBOVUxMLiAgKi8KKyNpZiBfX0dOVUNfUFJFUkVRICgzLDMpCisjIGRlZmluZSBfX25vbm51bGwocGFyYW1zKSBfX2F0dHJpYnV0ZV9fICgoX19ub25udWxsX18gcGFyYW1zKSkKKyNlbHNlCisjIGRlZmluZSBfX25vbm51bGwocGFyYW1zKQorI2VuZGlmCisKKy8qIElmIGZvcnRpZmljYXRpb24gbW9kZSwgd2Ugd2FybiBhYm91dCB1bnVzZWQgcmVzdWx0cyBvZiBjZXJ0YWluCisgICBmdW5jdGlvbiBjYWxscyB3aGljaCBjYW4gbGVhZCB0byBwcm9ibGVtcy4gICovCisjaWYgX19HTlVDX1BSRVJFUSAoMyw0KQorIyBkZWZpbmUgX19hdHRyaWJ1dGVfd2Fybl91bnVzZWRfcmVzdWx0X18gXAorICAgX19hdHRyaWJ1dGVfXyAoKF9fd2Fybl91bnVzZWRfcmVzdWx0X18pKQorIyBpZiBfX1VTRV9GT1JUSUZZX0xFVkVMID4gMAorIyAgZGVmaW5lIF9fd3VyIF9fYXR0cmlidXRlX3dhcm5fdW51c2VkX3Jlc3VsdF9fCisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgX19hdHRyaWJ1dGVfd2Fybl91bnVzZWRfcmVzdWx0X18gLyogZW1wdHkgKi8KKyNlbmRpZgorI2lmbmRlZiBfX3d1cgorIyBkZWZpbmUgX193dXIgLyogSWdub3JlICovCisjZW5kaWYKKworLyogRm9yY2VzIGEgZnVuY3Rpb24gdG8gYmUgYWx3YXlzIGlubGluZWQuICAqLworI2lmIF9fR05VQ19QUkVSRVEgKDMsMikKKyMgZGVmaW5lIF9fYWx3YXlzX2lubGluZSBfX2lubGluZSBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQorI2Vsc2UKKyMgZGVmaW5lIF9fYWx3YXlzX2lubGluZSBfX2lubGluZQorI2VuZGlmCisKKy8qIEdDQyA0LjMgYW5kIGFib3ZlIHdpdGggLXN0ZD1jOTkgb3IgLXN0ZD1nbnU5OSBpbXBsZW1lbnRzIElTTyBDOTkKKyAgIGlubGluZSBzZW1hbnRpY3MsIHVubGVzcyAtZmdudTg5LWlubGluZSBpcyB1c2VkLiAgKi8KKyNpZiAhZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBfX0dOVUNfUFJFUkVRICg0LDMpCisjIGlmIGRlZmluZWQgX19HTlVDX1NURENfSU5MSU5FX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworIyAgZGVmaW5lIF9fZXh0ZXJuX2lubGluZSBleHRlcm4gX19pbmxpbmUgX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fKSkKKyMgIGlmIF9fR05VQ19QUkVSRVEgKDQsMykKKyMgICBkZWZpbmUgX19leHRlcm5fYWx3YXlzX2lubGluZSBcCisgIGV4dGVybiBfX2Fsd2F5c19pbmxpbmUgX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisjICBlbHNlCisjICAgZGVmaW5lIF9fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgXAorICBleHRlcm4gX19hbHdheXNfaW5saW5lIF9fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXykpCisjICBlbmRpZgorIyBlbHNlCisjICBkZWZpbmUgX19leHRlcm5faW5saW5lIGV4dGVybiBfX2lubGluZQorIyAgZGVmaW5lIF9fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgZXh0ZXJuIF9fYWx3YXlzX2lubGluZQorIyBlbmRpZgorI2VuZGlmCisKKy8qIEdDQyA0LjMgYW5kIGFib3ZlIGFsbG93IHBhc3NpbmcgYWxsIGFub255bW91cyBhcmd1bWVudHMgb2YgYW4KKyAgIF9fZXh0ZXJuX2Fsd2F5c19pbmxpbmUgZnVuY3Rpb24gdG8gc29tZSBvdGhlciB2YXJhcmcgZnVuY3Rpb24uICAqLworI2lmIF9fR05VQ19QUkVSRVEgKDQsMykKKyMgZGVmaW5lIF9fdmFfYXJnX3BhY2soKSBfX2J1aWx0aW5fdmFfYXJnX3BhY2sgKCkKKyMgZGVmaW5lIF9fdmFfYXJnX3BhY2tfbGVuKCkgX19idWlsdGluX3ZhX2FyZ19wYWNrX2xlbiAoKQorI2VuZGlmCisKKy8qIEl0IGlzIHBvc3NpYmxlIHRvIGNvbXBpbGUgY29udGFpbmluZyBHQ0MgZXh0ZW5zaW9ucyBldmVuIGlmIEdDQyBpcworICAgcnVuIGluIHBlZGFudGljIG1vZGUgaWYgdGhlIHVzZXMgYXJlIGNhcmVmdWxseSBtYXJrZWQgdXNpbmcgdGhlCisgICBgX19leHRlbnNpb25fXycga2V5d29yZC4gIEJ1dCB0aGlzIGlzIG5vdCBnZW5lcmFsbHkgYXZhaWxhYmxlIGJlZm9yZQorICAgdmVyc2lvbiAyLjguICAqLworI2lmICFfX0dOVUNfUFJFUkVRICgyLDgpCisjIGRlZmluZSBfX2V4dGVuc2lvbl9fCQkvKiBJZ25vcmUgKi8KKyNlbmRpZgorCisvKiBfX3Jlc3RyaWN0IGlzIGtub3duIGluIEVHQ1MgMS4yIGFuZCBhYm92ZS4gKi8KKyNpZiAhX19HTlVDX1BSRVJFUSAoMiw5MikKKyMgZGVmaW5lIF9fcmVzdHJpY3QJLyogSWdub3JlICovCisjZW5kaWYKKworLyogSVNPIEM5OSBhbHNvIGFsbG93cyB0byBkZWNsYXJlIGFycmF5cyBhcyBub24tb3ZlcmxhcHBpbmcuICBUaGUgc3ludGF4IGlzCisgICAgIGFycmF5X25hbWVbcmVzdHJpY3RdCisgICBHQ0MgMy4xIHN1cHBvcnRzIHRoaXMuICAqLworI2lmIF9fR05VQ19QUkVSRVEgKDMsMSkgJiYgIWRlZmluZWQgX19HTlVHX18KKyMgZGVmaW5lIF9fcmVzdHJpY3RfYXJyCV9fcmVzdHJpY3QKKyNlbHNlCisjIGlmZGVmIF9fR05VQ19fCisjICBkZWZpbmUgX19yZXN0cmljdF9hcnIJLyogTm90IHN1cHBvcnRlZCBpbiBvbGQgR0NDLiAgKi8KKyMgZWxzZQorIyAgaWYgZGVmaW5lZCBfX1NURENfVkVSU0lPTl9fICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorIyAgIGRlZmluZSBfX3Jlc3RyaWN0X2FycglyZXN0cmljdAorIyAgZWxzZQorLyogU29tZSBvdGhlciBub24tQzk5IGNvbXBpbGVyLiAgKi8KKyMgICBkZWZpbmUgX19yZXN0cmljdF9hcnIJLyogTm90IHN1cHBvcnRlZC4gICovCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDxiaXRzL3dvcmRzaXplLmg+CisKKyNpZiBkZWZpbmVkIF9fTE9OR19ET1VCTEVfTUFUSF9PUFRJT05BTCAmJiBkZWZpbmVkIF9fTk9fTE9OR19ET1VCTEVfTUFUSAorIyBkZWZpbmUgX19MREJMX0NPTVBBVCAxCisjIGlmZGVmIF9fUkVESVJFQ1QKKyMgIGRlZmluZSBfX0xEQkxfUkVESVIxKG5hbWUsIHByb3RvLCBhbGlhcykgX19SRURJUkVDVCAobmFtZSwgcHJvdG8sIGFsaWFzKQorIyAgZGVmaW5lIF9fTERCTF9SRURJUihuYW1lLCBwcm90bykgXAorICBfX0xEQkxfUkVESVIxIChuYW1lLCBwcm90bywgX19ubGRibF8jI25hbWUpCisjICBkZWZpbmUgX19MREJMX1JFRElSMV9OVEgobmFtZSwgcHJvdG8sIGFsaWFzKSBfX1JFRElSRUNUX05USCAobmFtZSwgcHJvdG8sIGFsaWFzKQorIyAgZGVmaW5lIF9fTERCTF9SRURJUl9OVEgobmFtZSwgcHJvdG8pIFwKKyAgX19MREJMX1JFRElSMV9OVEggKG5hbWUsIHByb3RvLCBfX25sZGJsXyMjbmFtZSkKKyMgIGRlZmluZSBfX0xEQkxfUkVESVIxX0RFQ0wobmFtZSwgYWxpYXMpIFwKKyAgZXh0ZXJuIF9fdHlwZW9mIChuYW1lKSBuYW1lIF9fYXNtIChfX0FTTU5BTUUgKCNhbGlhcykpOworIyAgZGVmaW5lIF9fTERCTF9SRURJUl9ERUNMKG5hbWUpIFwKKyAgZXh0ZXJuIF9fdHlwZW9mIChuYW1lKSBuYW1lIF9fYXNtIChfX0FTTU5BTUUgKCJfX25sZGJsXyIgI25hbWUpKTsKKyMgIGRlZmluZSBfX1JFRElSRUNUX0xEQkwobmFtZSwgcHJvdG8sIGFsaWFzKSBcCisgIF9fTERCTF9SRURJUjEgKG5hbWUsIHByb3RvLCBfX25sZGJsXyMjYWxpYXMpCisjICBkZWZpbmUgX19SRURJUkVDVF9OVEhfTERCTChuYW1lLCBwcm90bywgYWxpYXMpIFwKKyAgX19MREJMX1JFRElSMV9OVEggKG5hbWUsIHByb3RvLCBfX25sZGJsXyMjYWxpYXMpCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBfX0xEQkxfQ09NUEFUIHx8ICFkZWZpbmVkIF9fUkVESVJFQ1QKKyMgZGVmaW5lIF9fTERCTF9SRURJUjEobmFtZSwgcHJvdG8sIGFsaWFzKSBuYW1lIHByb3RvCisjIGRlZmluZSBfX0xEQkxfUkVESVIobmFtZSwgcHJvdG8pIG5hbWUgcHJvdG8KKyMgZGVmaW5lIF9fTERCTF9SRURJUjFfTlRIKG5hbWUsIHByb3RvLCBhbGlhcykgbmFtZSBwcm90byBfX1RIUk9XCisjIGRlZmluZSBfX0xEQkxfUkVESVJfTlRIKG5hbWUsIHByb3RvKSBuYW1lIHByb3RvIF9fVEhST1cKKyMgZGVmaW5lIF9fTERCTF9SRURJUl9ERUNMKG5hbWUpCisjIGlmZGVmIF9fUkVESVJFQ1QKKyMgIGRlZmluZSBfX1JFRElSRUNUX0xEQkwobmFtZSwgcHJvdG8sIGFsaWFzKSBfX1JFRElSRUNUIChuYW1lLCBwcm90bywgYWxpYXMpCisjICBkZWZpbmUgX19SRURJUkVDVF9OVEhfTERCTChuYW1lLCBwcm90bywgYWxpYXMpIFwKKyAgX19SRURJUkVDVF9OVEggKG5hbWUsIHByb3RvLCBhbGlhcykKKyMgZW5kaWYKKyNlbmRpZgorCisjZW5kaWYJIC8qIHN5cy9jZGVmcy5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL2Rpci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9kaXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjExZDZjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9kaXIuaApAQCAtMCwwICsxLDI4IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYJX1NZU19ESVJfSAorI2RlZmluZQlfU1lTX0RJUl9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKworI2RlZmluZQlkaXJlY3QJZGlyZW50CisKKyNlbmRpZgkvKiBzeXMvZGlyLmggICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL2VsZi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9lbGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWE3MzEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9lbGYuaApAQCAtMCwwICsxLDI2IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTksIDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1NZU19FTEZfSAorI2RlZmluZSBfU1lTX0VMRl9ICTEKKworI3dhcm5pbmcgIlRoaXMgaGVhZGVyIGlzIG9ic29sZXRlOyB1c2UgPHN5cy9wcm9jZnMuaD4gaW5zdGVhZC4iCisKKyNpbmNsdWRlIDxzeXMvcHJvY2ZzLmg+CisKKyNlbmRpZgkvKiBzeXMvZWxmLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvZXBvbGwuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvZXBvbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmRlMGJjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9lcG9sbC5oCkBAIC0wLDAgKzEsMTQ0IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZglfU1lTX0VQT0xMX0gKKyNkZWZpbmUJX1NZU19FUE9MTF9ICTEKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisvKiBHZXQgX19zaWdzZXRfdC4gICovCisjaW5jbHVkZSA8Yml0cy9zaWdzZXQuaD4KKworI2lmbmRlZiBfX3NpZ3NldF90X2RlZmluZWQKKyMgZGVmaW5lIF9fc2lnc2V0X3RfZGVmaW5lZAordHlwZWRlZiBfX3NpZ3NldF90IHNpZ3NldF90OworI2VuZGlmCisKKworLyogRmxhZ3MgdG8gYmUgcGFzc2VkIHRvIGVwb2xsX2NyZWF0ZTIuICAqLworZW51bQorICB7CisgICAgRVBPTExfQ0xPRVhFQyA9IDAyMDAwMDAwLAorI2RlZmluZSBFUE9MTF9DTE9FWEVDIEVQT0xMX0NMT0VYRUMKKyAgICBFUE9MTF9OT05CTE9DSyA9IDA0MDAwCisjZGVmaW5lIEVQT0xMX05PTkJMT0NLIEVQT0xMX05PTkJMT0NLCisgIH07CisKKworZW51bSBFUE9MTF9FVkVOVFMKKyAgeworICAgIEVQT0xMSU4gPSAweDAwMSwKKyNkZWZpbmUgRVBPTExJTiBFUE9MTElOCisgICAgRVBPTExQUkkgPSAweDAwMiwKKyNkZWZpbmUgRVBPTExQUkkgRVBPTExQUkkKKyAgICBFUE9MTE9VVCA9IDB4MDA0LAorI2RlZmluZSBFUE9MTE9VVCBFUE9MTE9VVAorICAgIEVQT0xMUkROT1JNID0gMHgwNDAsCisjZGVmaW5lIEVQT0xMUkROT1JNIEVQT0xMUkROT1JNCisgICAgRVBPTExSREJBTkQgPSAweDA4MCwKKyNkZWZpbmUgRVBPTExSREJBTkQgRVBPTExSREJBTkQKKyAgICBFUE9MTFdSTk9STSA9IDB4MTAwLAorI2RlZmluZSBFUE9MTFdSTk9STSBFUE9MTFdSTk9STQorICAgIEVQT0xMV1JCQU5EID0gMHgyMDAsCisjZGVmaW5lIEVQT0xMV1JCQU5EIEVQT0xMV1JCQU5ECisgICAgRVBPTExNU0cgPSAweDQwMCwKKyNkZWZpbmUgRVBPTExNU0cgRVBPTExNU0cKKyAgICBFUE9MTEVSUiA9IDB4MDA4LAorI2RlZmluZSBFUE9MTEVSUiBFUE9MTEVSUgorICAgIEVQT0xMSFVQID0gMHgwMTAsCisjZGVmaW5lIEVQT0xMSFVQIEVQT0xMSFVQCisgICAgRVBPTExSREhVUCA9IDB4MjAwMCwKKyNkZWZpbmUgRVBPTExSREhVUCBFUE9MTFJESFVQCisgICAgRVBPTExPTkVTSE9UID0gKDEgPDwgMzApLAorI2RlZmluZSBFUE9MTE9ORVNIT1QgRVBPTExPTkVTSE9UCisgICAgRVBPTExFVCA9ICgxIDw8IDMxKQorI2RlZmluZSBFUE9MTEVUIEVQT0xMRVQKKyAgfTsKKworCisvKiBWYWxpZCBvcGNvZGVzICggIm9wIiBwYXJhbWV0ZXIgKSB0byBpc3N1ZSB0byBlcG9sbF9jdGwoKS4gICovCisjZGVmaW5lIEVQT0xMX0NUTF9BREQgMQkvKiBBZGQgYSBmaWxlIGRlc2NyaXB0b3IgdG8gdGhlIGludGVyZmFjZS4gICovCisjZGVmaW5lIEVQT0xMX0NUTF9ERUwgMgkvKiBSZW1vdmUgYSBmaWxlIGRlc2NyaXB0b3IgZnJvbSB0aGUgaW50ZXJmYWNlLiAgKi8KKyNkZWZpbmUgRVBPTExfQ1RMX01PRCAzCS8qIENoYW5nZSBmaWxlIGRlc2NyaXB0b3IgZXBvbGxfZXZlbnQgc3RydWN0dXJlLiAgKi8KKworCit0eXBlZGVmIHVuaW9uIGVwb2xsX2RhdGEKK3sKKyAgdm9pZCAqcHRyOworICBpbnQgZmQ7CisgIHVpbnQzMl90IHUzMjsKKyAgdWludDY0X3QgdTY0OworfSBlcG9sbF9kYXRhX3Q7CisKK3N0cnVjdCBlcG9sbF9ldmVudAoreworICB1aW50MzJfdCBldmVudHM7CS8qIEVwb2xsIGV2ZW50cyAqLworICBlcG9sbF9kYXRhX3QgZGF0YTsJLyogVXNlciBkYXRhIHZhcmlhYmxlICovCit9OworCisKK19fQkVHSU5fREVDTFMKKworLyogQ3JlYXRlcyBhbiBlcG9sbCBpbnN0YW5jZS4gIFJldHVybnMgYW4gZmQgZm9yIHRoZSBuZXcgaW5zdGFuY2UuCisgICBUaGUgInNpemUiIHBhcmFtZXRlciBpcyBhIGhpbnQgc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIGZpbGUKKyAgIGRlc2NyaXB0b3JzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV3IGluc3RhbmNlLiAgVGhlIGZkCisgICByZXR1cm5lZCBieSBlcG9sbF9jcmVhdGUoKSBzaG91bGQgYmUgY2xvc2VkIHdpdGggY2xvc2UoKS4gICovCitleHRlcm4gaW50IGVwb2xsX2NyZWF0ZSAoaW50IF9fc2l6ZSkgX19USFJPVzsKKworLyogU2FtZSBhcyBlcG9sbF9jcmVhdGUgYnV0IHdpdGggYW4gRkxBR1MgcGFyYW1ldGVyLiAgVGhlIHVudXNlZCBTSVpFCisgICBwYXJhbWV0ZXIgaGFzIGJlZW4gZHJvcHBlZC4gICovCitleHRlcm4gaW50IGVwb2xsX2NyZWF0ZTEgKGludCBfX2ZsYWdzKSBfX1RIUk9XOworCisKKy8qIE1hbmlwdWxhdGUgYW4gZXBvbGwgaW5zdGFuY2UgImVwZmQiLiBSZXR1cm5zIDAgaW4gY2FzZSBvZiBzdWNjZXNzLAorICAgLTEgaW4gY2FzZSBvZiBlcnJvciAoIHRoZSAiZXJybm8iIHZhcmlhYmxlIHdpbGwgY29udGFpbiB0aGUKKyAgIHNwZWNpZmljIGVycm9yIGNvZGUgKSBUaGUgIm9wIiBwYXJhbWV0ZXIgaXMgb25lIG9mIHRoZSBFUE9MTF9DVExfKgorICAgY29uc3RhbnRzIGRlZmluZWQgYWJvdmUuIFRoZSAiZmQiIHBhcmFtZXRlciBpcyB0aGUgdGFyZ2V0IG9mIHRoZQorICAgb3BlcmF0aW9uLiBUaGUgImV2ZW50IiBwYXJhbWV0ZXIgZGVzY3JpYmVzIHdoaWNoIGV2ZW50cyB0aGUgY2FsbGVyCisgICBpcyBpbnRlcmVzdGVkIGluIGFuZCBhbnkgYXNzb2NpYXRlZCB1c2VyIGRhdGEuICAqLworZXh0ZXJuIGludCBlcG9sbF9jdGwgKGludCBfX2VwZmQsIGludCBfX29wLCBpbnQgX19mZCwKKwkJICAgICAgc3RydWN0IGVwb2xsX2V2ZW50ICpfX2V2ZW50KSBfX1RIUk9XOworCisKKy8qIFdhaXQgZm9yIGV2ZW50cyBvbiBhbiBlcG9sbCBpbnN0YW5jZSAiZXBmZCIuIFJldHVybnMgdGhlIG51bWJlciBvZgorICAgdHJpZ2dlcmVkIGV2ZW50cyByZXR1cm5lZCBpbiAiZXZlbnRzIiBidWZmZXIuIE9yIC0xIGluIGNhc2Ugb2YKKyAgIGVycm9yIHdpdGggdGhlICJlcnJubyIgdmFyaWFibGUgc2V0IHRvIHRoZSBzcGVjaWZpYyBlcnJvciBjb2RlLiBUaGUKKyAgICJldmVudHMiIHBhcmFtZXRlciBpcyBhIGJ1ZmZlciB0aGF0IHdpbGwgY29udGFpbiB0cmlnZ2VyZWQKKyAgIGV2ZW50cy4gVGhlICJtYXhldmVudHMiIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBldmVudHMgdG8gYmUKKyAgIHJldHVybmVkICggdXN1YWxseSBzaXplIG9mICJldmVudHMiICkuIFRoZSAidGltZW91dCIgcGFyYW1ldGVyCisgICBzcGVjaWZpZXMgdGhlIG1heGltdW0gd2FpdCB0aW1lIGluIG1pbGxpc2Vjb25kcyAoLTEgPT0gaW5maW5pdGUpLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoCisgICBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgZXBvbGxfd2FpdCAoaW50IF9fZXBmZCwgc3RydWN0IGVwb2xsX2V2ZW50ICpfX2V2ZW50cywKKwkJICAgICAgIGludCBfX21heGV2ZW50cywgaW50IF9fdGltZW91dCk7CisKKworLyogU2FtZSBhcyBlcG9sbF93YWl0LCBidXQgdGhlIHRocmVhZCdzIHNpZ25hbCBtYXNrIGlzIHRlbXBvcmFyaWx5CisgICBhbmQgYXRvbWljYWxseSByZXBsYWNlZCB3aXRoIHRoZSBvbmUgcHJvdmlkZWQgYXMgcGFyYW1ldGVyLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoCisgICBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgZXBvbGxfcHdhaXQgKGludCBfX2VwZmQsIHN0cnVjdCBlcG9sbF9ldmVudCAqX19ldmVudHMsCisJCQlpbnQgX19tYXhldmVudHMsIGludCBfX3RpbWVvdXQsCisJCQlfX2NvbnN0IF9fc2lnc2V0X3QgKl9fc3MpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogc3lzL2Vwb2xsLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvZXJybm8uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvZXJybm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzlmNGZjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9lcnJuby5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxlcnJuby5oPgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9ldmVudGZkLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL2V2ZW50ZmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDU4MjRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9ldmVudGZkLmgKQEAgLTAsMCArMSw1MiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmCV9TWVNfRVZFTlRGRF9ICisjZGVmaW5lCV9TWVNfRVZFTlRGRF9ICTEKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisKKy8qIFR5cGUgZm9yIGV2ZW50IGNvdW50ZXIuICAqLwordHlwZWRlZiB1aW50NjRfdCBldmVudGZkX3Q7CisKKy8qIEZsYWdzIGZvciBzaWduYWxmZC4gICovCitlbnVtCisgIHsKKyAgICBFRkRfQ0xPRVhFQyA9IDAyMDAwMDAwLAorI2RlZmluZSBFRkRfQ0xPRVhFQyBFRkRfQ0xPRVhFQworICAgIEVGRF9OT05CTE9DSyA9IDA0MDAwCisjZGVmaW5lIEVGRF9OT05CTE9DSyBFRkRfTk9OQkxPQ0sKKyAgfTsKKworCitfX0JFR0lOX0RFQ0xTCisKKy8qIFJldHVybiBmaWxlIGRlc2NyaXB0b3IgZm9yIGdlbmVyaWMgZXZlbnQgY2hhbm5lbC4gIFNldCBpbml0aWFsCisgICB2YWx1ZSB0byBDT1VOVC4gICovCitleHRlcm4gaW50IGV2ZW50ZmQgKGludCBfX2NvdW50LCBpbnQgX19mbGFncykgX19USFJPVzsKKworLyogUmVhZCBldmVudCBjb3VudGVyIGFuZCBwb3NzaWJseSB3YWl0IGZvciBldmVudHMuICAqLworZXh0ZXJuIGludCBldmVudGZkX3JlYWQgKGludCBfX2ZkLCBldmVudGZkX3QgKl9fdmFsdWUpOworCisvKiBJbmNyZW1lbnQgZXZlbnQgY291bnRlci4gICovCitleHRlcm4gaW50IGV2ZW50ZmRfd3JpdGUgKGludCBfX2ZkLCBldmVudGZkX3QgdmFsdWUpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogc3lzL2V2ZW50ZmQuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9mY250bC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9mY250bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMzA0NTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL2ZjbnRsLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGZjbnRsLmg+CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL2ZpbGUuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYjM2MzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL2ZpbGUuaApAQCAtMCwwICsxLDU2IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTEsIDkyLCA5NiwgOTcsIDk4LCA5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZglfU1lTX0ZJTEVfSAorI2RlZmluZQlfU1lTX0ZJTEVfSAkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCisjaWZuZGVmCV9GQ05UTF9ICisjIGluY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKworX19CRUdJTl9ERUNMUworCisKKy8qIEFsdGVybmF0ZSBuYW1lcyBmb3IgdmFsdWVzIGZvciB0aGUgV0hFTkNFIGFyZ3VtZW50IHRvIGBsc2VlaycuCisgICBUaGVzZSBhcmUgdGhlIHNhbWUgYXMgU0VFS19TRVQsIFNFRUtfQ1VSLCBhbmQgU0VFS19FTkQsIHJlc3BlY3RpdmVseS4gICovCisjaWZuZGVmIExfU0VUCisjIGRlZmluZSBMX1NFVAkwCS8qIFNlZWsgZnJvbSBiZWdpbm5pbmcgb2YgZmlsZS4gICovCisjIGRlZmluZSBMX0lOQ1IJMQkvKiBTZWVrIGZyb20gY3VycmVudCBwb3NpdGlvbi4gICovCisjIGRlZmluZSBMX1hUTkQJMgkvKiBTZWVrIGZyb20gZW5kIG9mIGZpbGUuICAqLworI2VuZGlmCisKKworLyogT3BlcmF0aW9ucyBmb3IgdGhlIGBmbG9jaycgY2FsbC4gICovCisjZGVmaW5lCUxPQ0tfU0gJMQkvKiBTaGFyZWQgbG9jay4gICovCisjZGVmaW5lCUxPQ0tfRVgJMiAJLyogRXhjbHVzaXZlIGxvY2suICAqLworI2RlZmluZQlMT0NLX1VOCTgJLyogVW5sb2NrLiAgKi8KKworLyogQ2FuIGJlIE9SJ2QgaW4gdG8gb25lIG9mIHRoZSBhYm92ZS4gICovCisjZGVmaW5lCUxPQ0tfTkIJNAkvKiBEb24ndCBibG9jayB3aGVuIGxvY2tpbmcuICAqLworCisKKy8qIEFwcGx5IG9yIHJlbW92ZSBhbiBhZHZpc29yeSBsb2NrLCBhY2NvcmRpbmcgdG8gT1BFUkFUSU9OLAorICAgb24gdGhlIGZpbGUgRkQgcmVmZXJzIHRvLiAgKi8KK2V4dGVybiBpbnQgZmxvY2sgKGludCBfX2ZkLCBpbnQgX19vcGVyYXRpb24pIF9fVEhST1c7CisKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIHN5cy9maWxlLmggICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL2ZzdWlkLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL2ZzdWlkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVjYjE5OQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvZnN1aWQuaApAQCAtMCwwICsxLDM2IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1NZU19GU1VJRF9ICisjZGVmaW5lIF9TWVNfRlNVSURfSAkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKKy8qIENoYW5nZSB1aWQgdXNlZCBmb3IgZmlsZSBhY2Nlc3MgY29udHJvbCB0byBVSUQsIHdpdGhvdXQgYWZmZWN0aW5nCisgICBvdGhlciBwcml2aWxlZ2VzIChzdWNoIGFzIHdobyBjYW4gc2VuZCBzaWduYWxzIGF0IHRoZSBwcm9jZXNzKS4gICovCitleHRlcm4gaW50IHNldGZzdWlkIChfX3VpZF90IF9fdWlkKSBfX1RIUk9XOworCisvKiBEaXR0byBmb3IgZ3JvdXAgaWQuICovCitleHRlcm4gaW50IHNldGZzZ2lkIChfX2dpZF90IF9fZ2lkKSBfX1RIUk9XOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogZnN1aWQuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9nbW9uLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL2dtb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDJmODMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9nbW9uLmgKQEAgLTAsMCArMSwyMDEgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTgyLCAxOTg2LCAxOTkyLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKWdtb24uaAk4LjIgKEJlcmtlbGV5KSAxLzQvOTQKKyAqLworCisjaWZuZGVmCV9TWVNfR01PTl9ICisjZGVmaW5lCV9TWVNfR01PTl9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworLyoKKyAqIFNlZSBnbW9uX291dC5oIGZvciBnbW9uLm91dCBmb3JtYXQuCisgKi8KKworLyogc3RydWN0dXJlIGVtaXR0ZWQgYnkgImdjYyAtYSIuICBUaGlzIG11c3QgbWF0Y2ggc3RydWN0IGJiIGluCisgICBnY2MvbGliZ2NjMi5jLiAgSXQgaXMgT0sgZm9yIGdjYyB0byBkZWNsYXJlIGEgbG9uZ2VyIHN0cnVjdHVyZSBhcworICAgbG9uZyBhcyB0aGUgbWVtYmVycyBiZWxvdyBhcmUgcHJlc2VudC4gICovCitzdHJ1Y3QgX19iYgoreworICBsb25nCQkJemVyb193b3JkOworICBjb25zdCBjaGFyCQkqZmlsZW5hbWU7CisgIGxvbmcJCQkqY291bnRzOworICBsb25nCQkJbmNvdW50czsKKyAgc3RydWN0IF9fYmIJCSpuZXh0OworICBjb25zdCB1bnNpZ25lZCBsb25nCSphZGRyZXNzZXM7Cit9OworCitleHRlcm4gc3RydWN0IF9fYmIgKl9fYmJfaGVhZDsKKworLyoKKyAqIGhpc3RvZ3JhbSBjb3VudGVycyBhcmUgdW5zaWduZWQgc2hvcnRzIChhY2NvcmRpbmcgdG8gdGhlIGtlcm5lbCkuCisgKi8KKyNkZWZpbmUJSElTVENPVU5URVIJdW5zaWduZWQgc2hvcnQKKworLyoKKyAqIGZyYWN0aW9uIG9mIHRleHQgc3BhY2UgdG8gYWxsb2NhdGUgZm9yIGhpc3RvZ3JhbSBjb3VudGVycyBoZXJlLCAxLzIKKyAqLworI2RlZmluZQlISVNURlJBQ1RJT04JMgorCisvKgorICogRnJhY3Rpb24gb2YgdGV4dCBzcGFjZSB0byBhbGxvY2F0ZSBmb3IgZnJvbSBoYXNoIGJ1Y2tldHMuCisgKiBUaGUgdmFsdWUgb2YgSEFTSEZSQUNUSU9OIGlzIGJhc2VkIG9uIHRoZSBtaW5pbXVtIG51bWJlciBvZiBieXRlcworICogb2Ygc2VwYXJhdGlvbiBiZXR3ZWVuIHR3byBzdWJyb3V0aW5lIGNhbGwgcG9pbnRzIGluIHRoZSBvYmplY3QgY29kZS4KKyAqIEdpdmVuIE1JTl9TVUJSX1NFUEFSQVRJT04gYnl0ZXMgb2Ygc2VwYXJhdGlvbiB0aGUgdmFsdWUgb2YKKyAqIEhBU0hGUkFDVElPTiBpcyBjYWxjdWxhdGVkIGFzOgorICoKKyAqCUhBU0hGUkFDVElPTiA9IE1JTl9TVUJSX1NFUEFSQVRJT04gLyAoMiAqIHNpemVvZihzaG9ydCkgLSAxKTsKKyAqCisgKiBGb3IgZXhhbXBsZSwgb24gdGhlIFZBWCwgdGhlIHNob3J0ZXN0IHR3byBjYWxsIHNlcXVlbmNlIGlzOgorICoKKyAqCWNhbGxzCSQwLChyMCkKKyAqCWNhbGxzCSQwLChyMCkKKyAqCisgKiB3aGljaCBpcyBzZXBhcmF0ZWQgYnkgb25seSB0aHJlZSBieXRlcywgdGh1cyBIQVNIRlJBQ1RJT04gaXMKKyAqIGNhbGN1bGF0ZWQgYXM6CisgKgorICoJSEFTSEZSQUNUSU9OID0gMyAvICgyICogMiAtIDEpID0gMQorICoKKyAqIE5vdGUgdGhhdCB0aGUgZGl2aXNpb24gYWJvdmUgcm91bmRzIGRvd24sIHRodXMgaWYgTUlOX1NVQlJfRlJBQ1RJT04KKyAqIGlzIGxlc3MgdGhhbiB0aHJlZSwgdGhpcyBhbGdvcml0aG0gd2lsbCBub3Qgd29yayEKKyAqCisgKiBJbiBwcmFjdGljZSwgaG93ZXZlciwgY2FsbCBpbnN0cnVjdGlvbnMgYXJlIHJhcmVseSBhdCBhIG1pbmltYWwKKyAqIGRpc3RhbmNlLiAgSGVuY2UsIHdlIHdpbGwgZGVmaW5lIEhBU0hGUkFDVElPTiB0byBiZSAyIGFjcm9zcyBhbGwKKyAqIGFyY2hpdGVjdHVyZXMuICBUaGlzIHNhdmVzIGEgcmVhc29uYWJsZSBhbW91bnQgb2Ygc3BhY2UgZm9yCisgKiBwcm9maWxpbmcgZGF0YSBzdHJ1Y3R1cmVzIHdpdGhvdXQgKGluIHByYWN0aWNlKSBzYWNyaWZpY2luZworICogYW55IGdyYW51bGFyaXR5LgorICovCisjZGVmaW5lCUhBU0hGUkFDVElPTgkyCisKKy8qCisgKiBQZXJjZW50IG9mIHRleHQgc3BhY2UgdG8gYWxsb2NhdGUgZm9yIHRvc3RydWN0cy4KKyAqIFRoaXMgaXMgYSBoZXVyaXN0aWM7IHdlIHdpbGwgZmFpbCB3aXRoIGEgd2FybmluZyB3aGVuIHByb2ZpbGluZyBwcm9ncmFtcworICogd2l0aCBhIHZlcnkgbGFyZ2UgbnVtYmVyIG9mIHZlcnkgc21hbGwgZnVuY3Rpb25zLCBidXQgdGhhdCdzCisgKiBub3JtYWxseSBPSy4KKyAqIDIgaXMgcHJvYmFibHkgc3RpbGwgYSBnb29kIHZhbHVlIGZvciBub3JtYWwgcHJvZ3JhbXMuCisgKiBQcm9maWxpbmcgYSB0ZXN0IGNhc2Ugd2l0aCA2NDAwMCBzbWFsbCBmdW5jdGlvbnMgd2lsbCB3b3JrIGlmCisgKiB5b3UgcmFpc2UgdGhpcyB2YWx1ZSB0byAzIGFuZCBsaW5rIHN0YXRpY2FsbHkgKHdoaWNoIGJsb2F0cyB0aGUKKyAqIHRleHQgc2l6ZSwgdGh1cyByYWlzaW5nIHRoZSBudW1iZXIgb2YgYXJjcyBleHBlY3RlZCBieSB0aGUgaGV1cmlzdGljKS4KKyAqLworI2RlZmluZSBBUkNERU5TSVRZCTMKKworLyoKKyAqIEFsd2F5cyBhbGxvY2F0ZSBhdCBsZWFzdCB0aGlzIG1hbnkgdG9zdHJ1Y3RzLiAgVGhpcworICogaGlkZXMgdGhlIGluYWRlcXVhY3kgb2YgdGhlIEFSQ0RFTlNJVFkgaGV1cmlzdGljLCBhdCBsZWFzdAorICogZm9yIHNtYWxsIHByb2dyYW1zLgorICovCisjZGVmaW5lIE1JTkFSQ1MJCTUwCisKKy8qCisgKiBUaGUgdHlwZSB1c2VkIHRvIHJlcHJlc2VudCBpbmRpY2VzIGludG8gZ21vbnBhcmFtLnRvc1tdLgorICovCisjZGVmaW5lCUFSQ0lOREVYCXVfbG9uZworCisvKiAKKyAqIE1heGltdW0gbnVtYmVyIG9mIGFyY3Mgd2Ugd2FudCB0byBhbGxvdy4KKyAqIFVzZWQgdG8gYmUgbWF4IHJlcHJlc2VudGFibGUgdmFsdWUgb2YgQVJDSU5ERVggbWludXMgMiwgYnV0IG5vdyAKKyAqIHRoYXQgQVJDSU5ERVggaXMgYSBsb25nLCB0aGF0J3MgdG9vIGxhcmdlOyB3ZSBkb24ndCByZWFsbHkgd2FudCAKKyAqIHRvIGFsbG93IGEgNDggZ2lnYWJ5dGUgdGFibGUuCisgKiBUaGUgb2xkIHZhbHVlIG9mIDE8PDE2IHdhc24ndCBoaWdoIGVub3VnaCBpbiBwcmFjdGljZSBmb3IgbGFyZ2UgQysrCisgKiBwcm9ncmFtczsgd2lsbCAxPDwyMCBiZSBhZGVxdWF0ZSBmb3IgbG9uZz8gIEZJWE1FCisgKi8KKyNkZWZpbmUgTUFYQVJDUwkJKDEgPDwgMjApCisKK3N0cnVjdCB0b3N0cnVjdCB7CisJdV9sb25nCQlzZWxmcGM7CisJbG9uZwkJY291bnQ7CisJQVJDSU5ERVgJbGluazsKK307CisKKy8qCisgKiBhIHJhdyBhcmMsIHdpdGggcG9pbnRlcnMgdG8gdGhlIGNhbGxpbmcgc2l0ZSBhbmQKKyAqIHRoZSBjYWxsZWQgc2l0ZSBhbmQgYSBjb3VudC4KKyAqLworc3RydWN0IHJhd2FyYyB7CisJdV9sb25nCXJhd19mcm9tcGM7CisJdV9sb25nCXJhd19zZWxmcGM7CisJbG9uZwlyYXdfY291bnQ7Cit9OworCisvKgorICogZ2VuZXJhbCByb3VuZGluZyBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUgUk9VTkRET1dOKHgseSkJKCgoeCkvKHkpKSooeSkpCisjZGVmaW5lIFJPVU5EVVAoeCx5KQkoKCgoeCkrKHkpLTEpLyh5KSkqKHkpKQorCisvKgorICogVGhlIHByb2ZpbGluZyBkYXRhIHN0cnVjdHVyZXMgYXJlIGhvdXNlZCBpbiB0aGlzIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IGdtb25wYXJhbSB7CisJbG9uZyBpbnQJc3RhdGU7CisJdV9zaG9ydAkJKmtjb3VudDsKKwl1X2xvbmcJCWtjb3VudHNpemU7CisJQVJDSU5ERVgJKmZyb21zOworCXVfbG9uZwkJZnJvbXNzaXplOworCXN0cnVjdCB0b3N0cnVjdAkqdG9zOworCXVfbG9uZwkJdG9zc2l6ZTsKKwlsb25nCQl0b2xpbWl0OworCXVfbG9uZwkJbG93cGM7CisJdV9sb25nCQloaWdocGM7CisJdV9sb25nCQl0ZXh0c2l6ZTsKKwl1X2xvbmcJCWhhc2hmcmFjdGlvbjsKKwlsb25nCQlsb2dfaGFzaGZyYWN0aW9uOworfTsKKworLyoKKyAqIFBvc3NpYmxlIHN0YXRlcyBvZiBwcm9maWxpbmcuCisgKi8KKyNkZWZpbmUJR01PTl9QUk9GX09OCTAKKyNkZWZpbmUJR01PTl9QUk9GX0JVU1kJMQorI2RlZmluZQlHTU9OX1BST0ZfRVJST1IJMgorI2RlZmluZQlHTU9OX1BST0ZfT0ZGCTMKKworLyoKKyAqIFN5c2N0bCBkZWZpbml0aW9ucyBmb3IgZXh0cmFjdGluZyBwcm9maWxpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUga2VybmVsLgorICovCisjZGVmaW5lCUdQUk9GX1NUQVRFCTAJLyogaW50OiBwcm9maWxpbmcgZW5hYmxpbmcgdmFyaWFibGUgKi8KKyNkZWZpbmUJR1BST0ZfQ09VTlQJMQkvKiBzdHJ1Y3Q6IHByb2ZpbGUgdGljayBjb3VudCBidWZmZXIgKi8KKyNkZWZpbmUJR1BST0ZfRlJPTVMJMgkvKiBzdHJ1Y3Q6IGZyb20gbG9jYXRpb24gaGFzaCBidWNrZXQgKi8KKyNkZWZpbmUJR1BST0ZfVE9TCTMJLyogc3RydWN0OiBkZXN0aW5hdGlvbi9jb3VudCBzdHJ1Y3R1cmUgKi8KKyNkZWZpbmUJR1BST0ZfR01PTlBBUkFNCTQJLyogc3RydWN0OiBwcm9maWxpbmcgcGFyYW1ldGVycyAoc2VlIGFib3ZlKSAqLworCitfX0JFR0lOX0RFQ0xTCisKKy8qIFNldCB1cCBkYXRhIHN0cnVjdHVyZXMgYW5kIHN0YXJ0IHByb2ZpbGluZy4gICovCitleHRlcm4gdm9pZCBfX21vbnN0YXJ0dXAgKHVfbG9uZyBfX2xvd3BjLCB1X2xvbmcgX19oaWdocGMpIF9fVEhST1c7CitleHRlcm4gdm9pZCBtb25zdGFydHVwICh1X2xvbmcgX19sb3dwYywgdV9sb25nIF9faGlnaHBjKSBfX1RIUk9XOworCisvKiBDbGVhbiB1cCBwcm9maWxpbmcgYW5kIHdyaXRlIG91dCBnbW9uLm91dC4gICovCitleHRlcm4gdm9pZCBfbWNsZWFudXAgKHZvaWQpIF9fVEhST1c7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBzeXMvZ21vbi5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL2dtb25fb3V0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL2dtb25fb3V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZhMDllOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvZ21vbl9vdXQuaApAQCAtMCwwICsxLDgwIEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIENvbnRyaWJ1dGVkIGJ5IERhdmlkIE1vc2JlcmdlciA8ZGF2aWRtQGNzLmFyaXpvbmEuZWR1Pi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qIFRoaXMgZmlsZSBzcGVjaWZpZXMgdGhlIGZvcm1hdCBvZiBnbW9uLm91dCBmaWxlcy4gIEl0IHNob3VsZCBoYXZlCisgICBhcyBmZXcgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIGFzIHBvc3NpYmxlIGFzIGl0IGlzIGdvaW5nIHRvIGJlIGluY2x1ZGVkCisgICBpbiBtYW55IGRpZmZlcmVudCBwcm9ncmFtcy4gIFRoYXQgaXMsIG1pbmltaXplIHRoZSBudW1iZXIgb2YgI2luY2x1ZGUncy4KKworICAgQSBnbW9uLm91dCBmaWxlIGNvbnNpc3RzIG9mIGEgaGVhZGVyIChkZWZpbmVkIGJ5IGdtb25faGRyKSBmb2xsb3dlZCBieQorICAgYSBzZXF1ZW5jZSBvZiByZWNvcmRzLiAgRWFjaCByZWNvcmQgc3RhcnRzIHdpdGggYSBvbmUtYnl0ZSB0YWcKKyAgIGlkZW50aWZ5aW5nIHRoZSB0eXBlIG9mIHJlY29yZHMsIGZvbGxvd2VkIGJ5IHJlY29yZHMgc3BlY2lmaWMgZGF0YS4gKi8KKworI2lmbmRlZiBfU1lTX0dNT05fT1VUX0gKKyNkZWZpbmUgX1NZU19HTU9OX09VVF9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKyNkZWZpbmUJR01PTl9NQUdJQwkiZ21vbiIJLyogbWFnaWMgY29va2llICovCisjZGVmaW5lIEdNT05fVkVSU0lPTgkxCS8qIHZlcnNpb24gbnVtYmVyICovCisKKy8qIEZvciBwcm9maWxpbmcgc2hhcmVkIG9iamVjdCB3ZSBuZWVkIGEgbmV3IGZvcm1hdC4gICovCisjZGVmaW5lIEdNT05fU0hPQkpfVkVSU0lPTgkweDFmZmZmCisKK19fQkVHSU5fREVDTFMKKworLyoKKyAqIFJhdyBoZWFkZXIgYXMgaXQgYXBwZWFycyBvbiBmaWxlICh3aXRob3V0IHBhZGRpbmcpLiAgVGhpcyBoZWFkZXIKKyAqIGFsd2F5cyBjb21lcyBmaXJzdCBpbiBnbW9uLm91dCBhbmQgaXMgdGhlbiBmb2xsb3dlZCBieSBhIHNlcmllcworICogcmVjb3JkcyBkZWZpbmVkIGJlbG93LgorICovCitzdHJ1Y3QgZ21vbl9oZHIKKyAgeworICAgIGNoYXIgY29va2llWzRdOworICAgIGNoYXIgdmVyc2lvbls0XTsKKyAgICBjaGFyIHNwYXJlWzMgKiA0XTsKKyAgfTsKKworLyogdHlwZXMgb2YgcmVjb3JkcyBpbiB0aGlzIGZpbGU6ICovCit0eXBlZGVmIGVudW0KKyAgeworICAgIEdNT05fVEFHX1RJTUVfSElTVCA9IDAsCisgICAgR01PTl9UQUdfQ0dfQVJDID0gMSwKKyAgICBHTU9OX1RBR19CQl9DT1VOVCA9IDIKKyAgfSBHTU9OX1JlY29yZF9UYWc7CisKK3N0cnVjdCBnbW9uX2hpc3RfaGRyCisgIHsKKyAgICBjaGFyIGxvd19wY1tzaXplb2YgKGNoYXIgKildOwkvKiBiYXNlIHBjIGFkZHJlc3Mgb2Ygc2FtcGxlIGJ1ZmZlciAqLworICAgIGNoYXIgaGlnaF9wY1tzaXplb2YgKGNoYXIgKildOwkvKiBtYXggcGMgYWRkcmVzcyBvZiBzYW1wbGVkIGJ1ZmZlciAqLworICAgIGNoYXIgaGlzdF9zaXplWzRdOwkJCS8qIHNpemUgb2Ygc2FtcGxlIGJ1ZmZlciAqLworICAgIGNoYXIgcHJvZl9yYXRlWzRdOwkJCS8qIHByb2ZpbGluZyBjbG9jayByYXRlICovCisgICAgY2hhciBkaW1lblsxNV07CQkJLyogcGh5cy4gZGltLiwgdXN1YWxseSAic2Vjb25kcyIgKi8KKyAgICBjaGFyIGRpbWVuX2FiYnJldjsJCQkvKiB1c3VhbGx5ICdzJyBmb3IgInNlY29uZHMiICovCisgIH07CisKK3N0cnVjdCBnbW9uX2NnX2FyY19yZWNvcmQKKyAgeworICAgIGNoYXIgZnJvbV9wY1tzaXplb2YgKGNoYXIgKildOwkvKiBhZGRyZXNzIHdpdGhpbiBjYWxsZXIncyBib2R5ICovCisgICAgY2hhciBzZWxmX3BjW3NpemVvZiAoY2hhciAqKV07CS8qIGFkZHJlc3Mgd2l0aGluIGNhbGxlZSdzIGJvZHkgKi8KKyAgICBjaGFyIGNvdW50WzRdOwkJCS8qIG51bWJlciBvZiBhcmMgdHJhdmVyc2FscyAqLworICB9OworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogc3lzL2dtb25fb3V0LmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvaW5vdGlmeS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9pbm90aWZ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFlMzFmYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvaW5vdGlmeS5oCkBAIC0wLDAgKzEsMTA1IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYJX1NZU19JTk9USUZZX0gKKyNkZWZpbmUJX1NZU19JTk9USUZZX0gJMQorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKworLyogRmxhZ3MgZm9yIHRoZSBwYXJhbWV0ZXIgb2YgaW5vdGlmeV9pbml0MS4gICovCitlbnVtCisgIHsKKyAgICBJTl9DTE9FWEVDID0gMDIwMDAwMDAsCisjZGVmaW5lIElOX0NMT0VYRUMgSU5fQ0xPRVhFQworICAgIElOX05PTkJMT0NLID0gMDQwMDAKKyNkZWZpbmUgSU5fTk9OQkxPQ0sgSU5fTk9OQkxPQ0sKKyAgfTsKKworCisvKiBTdHJ1Y3R1cmUgZGVzY3JpYmluZyBhbiBpbm90aWZ5IGV2ZW50LiAgKi8KK3N0cnVjdCBpbm90aWZ5X2V2ZW50Cit7CisgIGludCB3ZDsJCS8qIFdhdGNoIGRlc2NyaXB0b3IuICAqLworICB1aW50MzJfdCBtYXNrOwkvKiBXYXRjaCBtYXNrLiAgKi8KKyAgdWludDMyX3QgY29va2llOwkvKiBDb29raWUgdG8gc3luY2hyb25pemUgdHdvIGV2ZW50cy4gICovCisgIHVpbnQzMl90IGxlbjsJCS8qIExlbmd0aCAoaW5jbHVkaW5nIE5VTHMpIG9mIG5hbWUuICAqLworICBjaGFyIG5hbWUgX19mbGV4YXJyOwkvKiBOYW1lLiAgKi8KK307CisKKworLyogU3VwcG9ydGVkIGV2ZW50cyBzdWl0YWJsZSBmb3IgTUFTSyBwYXJhbWV0ZXIgb2YgSU5PVElGWV9BRERfV0FUQ0guICAqLworI2RlZmluZSBJTl9BQ0NFU1MJIDB4MDAwMDAwMDEJLyogRmlsZSB3YXMgYWNjZXNzZWQuICAqLworI2RlZmluZSBJTl9NT0RJRlkJIDB4MDAwMDAwMDIJLyogRmlsZSB3YXMgbW9kaWZpZWQuICAqLworI2RlZmluZSBJTl9BVFRSSUIJIDB4MDAwMDAwMDQJLyogTWV0YWRhdGEgY2hhbmdlZC4gICovCisjZGVmaW5lIElOX0NMT1NFX1dSSVRFCSAweDAwMDAwMDA4CS8qIFdyaXR0YWJsZSBmaWxlIHdhcyBjbG9zZWQuICAqLworI2RlZmluZSBJTl9DTE9TRV9OT1dSSVRFIDB4MDAwMDAwMTAJLyogVW53cml0dGFibGUgZmlsZSBjbG9zZWQuICAqLworI2RlZmluZSBJTl9DTE9TRQkgKElOX0NMT1NFX1dSSVRFIHwgSU5fQ0xPU0VfTk9XUklURSkgLyogQ2xvc2UuICAqLworI2RlZmluZSBJTl9PUEVOCQkgMHgwMDAwMDAyMAkvKiBGaWxlIHdhcyBvcGVuZWQuICAqLworI2RlZmluZSBJTl9NT1ZFRF9GUk9NCSAweDAwMDAwMDQwCS8qIEZpbGUgd2FzIG1vdmVkIGZyb20gWC4gICovCisjZGVmaW5lIElOX01PVkVEX1RPICAgICAgMHgwMDAwMDA4MAkvKiBGaWxlIHdhcyBtb3ZlZCB0byBZLiAgKi8KKyNkZWZpbmUgSU5fTU9WRQkJIChJTl9NT1ZFRF9GUk9NIHwgSU5fTU9WRURfVE8pIC8qIE1vdmVzLiAgKi8KKyNkZWZpbmUgSU5fQ1JFQVRFCSAweDAwMDAwMTAwCS8qIFN1YmZpbGUgd2FzIGNyZWF0ZWQuICAqLworI2RlZmluZSBJTl9ERUxFVEUJIDB4MDAwMDAyMDAJLyogU3ViZmlsZSB3YXMgZGVsZXRlZC4gICovCisjZGVmaW5lIElOX0RFTEVURV9TRUxGCSAweDAwMDAwNDAwCS8qIFNlbGYgd2FzIGRlbGV0ZWQuICAqLworI2RlZmluZSBJTl9NT1ZFX1NFTEYJIDB4MDAwMDA4MDAJLyogU2VsZiB3YXMgbW92ZWQuICAqLworCisvKiBFdmVudHMgc2VudCBieSB0aGUga2VybmVsLiAgKi8KKyNkZWZpbmUgSU5fVU5NT1VOVAkgMHgwMDAwMjAwMAkvKiBCYWNraW5nIGZzIHdhcyB1bm1vdW50ZWQuICAqLworI2RlZmluZSBJTl9RX09WRVJGTE9XCSAweDAwMDA0MDAwCS8qIEV2ZW50IHF1ZXVlZCBvdmVyZmxvd2VkLiAgKi8KKyNkZWZpbmUgSU5fSUdOT1JFRAkgMHgwMDAwODAwMAkvKiBGaWxlIHdhcyBpZ25vcmVkLiAgKi8KKworLyogSGVscGVyIGV2ZW50cy4gICovCisjZGVmaW5lIElOX0NMT1NFCSAoSU5fQ0xPU0VfV1JJVEUgfCBJTl9DTE9TRV9OT1dSSVRFKQkvKiBDbG9zZS4gICovCisjZGVmaW5lIElOX01PVkUJCSAoSU5fTU9WRURfRlJPTSB8IElOX01PVkVEX1RPKQkJLyogTW92ZXMuICAqLworCisvKiBTcGVjaWFsIGZsYWdzLiAgKi8KKyNkZWZpbmUgSU5fT05MWURJUgkgMHgwMTAwMDAwMAkvKiBPbmx5IHdhdGNoIHRoZSBwYXRoIGlmIGl0IGlzIGEKKwkJCQkJICAgZGlyZWN0b3J5LiAgKi8KKyNkZWZpbmUgSU5fRE9OVF9GT0xMT1cJIDB4MDIwMDAwMDAJLyogRG8gbm90IGZvbGxvdyBhIHN5bSBsaW5rLiAgKi8KKyNkZWZpbmUgSU5fTUFTS19BREQJIDB4MjAwMDAwMDAJLyogQWRkIHRvIHRoZSBtYXNrIG9mIGFuIGFscmVhZHkKKwkJCQkJICAgZXhpc3Rpbmcgd2F0Y2guICAqLworI2RlZmluZSBJTl9JU0RJUgkgMHg0MDAwMDAwMAkvKiBFdmVudCBvY2N1cnJlZCBhZ2FpbnN0IGRpci4gICovCisjZGVmaW5lIElOX09ORVNIT1QJIDB4ODAwMDAwMDAJLyogT25seSBzZW5kIGV2ZW50IG9uY2UuICAqLworCisvKiBBbGwgZXZlbnRzIHdoaWNoIGEgcHJvZ3JhbSBjYW4gd2FpdCBvbi4gICovCisjZGVmaW5lIElOX0FMTF9FVkVOVFMJIChJTl9BQ0NFU1MgfCBJTl9NT0RJRlkgfCBJTl9BVFRSSUIgfCBJTl9DTE9TRV9XUklURSAgXAorCQkJICB8IElOX0NMT1NFX05PV1JJVEUgfCBJTl9PUEVOIHwgSU5fTU9WRURfRlJPTQkgICAgICBcCisJCQkgIHwgSU5fTU9WRURfVE8gfCBJTl9DUkVBVEUgfCBJTl9ERUxFVEUJCSAgICAgIFwKKwkJCSAgfCBJTl9ERUxFVEVfU0VMRiB8IElOX01PVkVfU0VMRikKKworCitfX0JFR0lOX0RFQ0xTCisKKy8qIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBpbm90aWZ5IGluc3RhbmNlLiAgKi8KK2V4dGVybiBpbnQgaW5vdGlmeV9pbml0ICh2b2lkKSBfX1RIUk9XOworCisvKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgaW5vdGlmeSBpbnN0YW5jZS4gICovCitleHRlcm4gaW50IGlub3RpZnlfaW5pdDEgKGludCBfX2ZsYWdzKSBfX1RIUk9XOworCisvKiBBZGQgd2F0Y2ggb2Ygb2JqZWN0IE5BTUUgdG8gaW5vdGlmeSBpbnN0YW5jZSBGRC4gIE5vdGlmeSBhYm91dAorICAgZXZlbnRzIHNwZWNpZmllZCBieSBNQVNLLiAgKi8KK2V4dGVybiBpbnQgaW5vdGlmeV9hZGRfd2F0Y2ggKGludCBfX2ZkLCBjb25zdCBjaGFyICpfX25hbWUsIHVpbnQzMl90IF9fbWFzaykKKyAgX19USFJPVzsKKworLyogUmVtb3ZlIHRoZSB3YXRjaCBzcGVjaWZpZWQgYnkgV0QgZnJvbSB0aGUgaW5vdGlmeSBpbnN0YW5jZSBGRC4gICovCitleHRlcm4gaW50IGlub3RpZnlfcm1fd2F0Y2ggKGludCBfX2ZkLCB1aW50MzJfdCBfX3dkKSBfX1RIUk9XOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogc3lzL2lub3RpZnkuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9pby5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NjM5OTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL2lvLmgKQEAgLTAsMCArMSw0OCBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk4LCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmCV9TWVNfSU9fSAorCisjZGVmaW5lCV9TWVNfSU9fSAkxCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworX19CRUdJTl9ERUNMUworCisvKiBJZiBUVVJOX09OIGlzIFRSVUUsIHJlcXVlc3QgZm9yIHBlcm1pc3Npb24gdG8gZG8gZGlyZWN0IGkvbyBvbiB0aGUKKyAgIHBvcnQgbnVtYmVycyBpbiB0aGUgcmFuZ2UgW0ZST00sRlJPTStOVU0tMV0uICBPdGhlcndpc2UsIHR1cm4gSS9PCisgICBwZXJtaXNzaW9uIG9mZiBmb3IgdGhhdCByYW5nZS4gIFRoaXMgY2FsbCByZXF1aXJlcyByb290IHByaXZpbGVnZXMuICAqLworZXh0ZXJuIGludCBpb3Blcm0gKHVuc2lnbmVkIGxvbmcgaW50IF9fZnJvbSwgdW5zaWduZWQgbG9uZyBpbnQgX19udW0sCisJCSAgIGludCBfX3R1cm5fb24pIF9fVEhST1c7CisKKy8qIFNldCB0aGUgSS9PIHByaXZpbGVnZSBsZXZlbCB0byBMRVZFTC4gIElmIExFVkVMIGlzIG5vbnplcm8sCisgICBwZXJtaXNzaW9uIHRvIGFjY2VzcyBhbnkgSS9PIHBvcnQgaXMgZ3JhbnRlZC4gIFRoaXMgY2FsbCByZXF1aXJlcworICAgcm9vdCBwcml2aWxlZ2VzLiAqLworZXh0ZXJuIGludCBpb3BsIChpbnQgX19sZXZlbCkgX19USFJPVzsKKworLyogVGhlIGZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5IHBlcmZvcm0gcmVhZHMgYW5kIHdyaXRlcy4gICovCitleHRlcm4gdW5zaWduZWQgY2hhciBpbmIgKHVuc2lnbmVkIGxvbmcgaW50IHBvcnQpIF9fVEhST1c7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50IGludyAodW5zaWduZWQgbG9uZyBpbnQgcG9ydCkgX19USFJPVzsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGludCBpbmwgKHVuc2lnbmVkIGxvbmcgaW50IHBvcnQpIF9fVEhST1c7CisKK2V4dGVybiB2b2lkIG91dGIgKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgaW50IHBvcnQpIF9fVEhST1c7CitleHRlcm4gdm9pZCBvdXR3ICh1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBpbnQgcG9ydCkgX19USFJPVzsKK2V4dGVybiB2b2lkIG91dGwgKHVuc2lnbmVkIGxvbmcgdmFsdWUsIHVuc2lnbmVkIGxvbmcgaW50IHBvcnQpIF9fVEhST1c7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfU1lTX0lPX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvaW9jdGwuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDhhMGY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9pb2N0bC5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5MSwgOTIsIDkzLCA5NCwgOTYsIDk4LCA5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZglfU1lTX0lPQ1RMX0gKKyNkZWZpbmUJX1NZU19JT0NUTF9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKK19fQkVHSU5fREVDTFMKKworLyogR2V0IHRoZSBsaXN0IG9mIGBpb2N0bCcgcmVxdWVzdHMgYW5kIHJlbGF0ZWQgY29uc3RhbnRzLiAgKi8KKyNpbmNsdWRlIDxiaXRzL2lvY3Rscy5oPgorCisvKiBEZWZpbmUgc29tZSB0eXBlcyB1c2VkIGJ5IGBpb2N0bCcgcmVxdWVzdHMuICAqLworI2luY2x1ZGUgPGJpdHMvaW9jdGwtdHlwZXMuaD4KKworLyogT24gYSBVbml4IHN5c3RlbSwgdGhlIHN5c3RlbSA8c3lzL2lvY3RsLmg+IHByb2JhYmx5IGRlZmluZXMgc29tZSBvZgorICAgdGhlIHN5bWJvbHMgd2UgZGVmaW5lIGluIDxzeXMvdHR5ZGVmYXVsdHMuaD4gKHVzdWFsbHkgd2l0aCB0aGUgc2FtZQorICAgdmFsdWVzKS4gIFRoZSBjb2RlIHRvIGdlbmVyYXRlIDxiaXRzL2lvY3Rscy5oPiBoYXMgb21pdHRlZCB0aGVzZQorICAgc3ltYm9scyB0byBhdm9pZCB0aGUgY29uZmxpY3QsIGJ1dCBhIFVuaXggcHJvZ3JhbSBleHBlY3RzIDxzeXMvaW9jdGwuaD4KKyAgIHRvIGRlZmluZSB0aGVtLCBzbyB3ZSBtdXN0IGluY2x1ZGUgPHN5cy90dHlkZWZhdWx0cy5oPiBoZXJlLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHR5ZGVmYXVsdHMuaD4KKworLyogUGVyZm9ybSB0aGUgSS9PIGNvbnRyb2wgb3BlcmF0aW9uIHNwZWNpZmllZCBieSBSRVFVRVNUIG9uIEZELgorICAgT25lIGFyZ3VtZW50IG1heSBmb2xsb3c7IGl0cyBwcmVzZW5jZSBhbmQgdHlwZSBkZXBlbmQgb24gUkVRVUVTVC4KKyAgIFJldHVybiB2YWx1ZSBkZXBlbmRzIG9uIFJFUVVFU1QuICBVc3VhbGx5IC0xIGluZGljYXRlcyBlcnJvci4gICovCitleHRlcm4gaW50IGlvY3RsIChpbnQgX19mZCwgdW5zaWduZWQgbG9uZyBpbnQgX19yZXF1ZXN0LCAuLi4pIF9fVEhST1c7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBzeXMvaW9jdGwuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9pcGMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvaXBjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU4YzA5ZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvaXBjLmgKQEAgLTAsMCArMSw1OSBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk1LDE5OTYsMTk5NywxOTk5LDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1NZU19JUENfSAorI2RlZmluZSBfU1lTX0lQQ19ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKyNpZiAhZGVmaW5lZCBfX1VTRV9TVklEICYmICFkZWZpbmVkIF9fVVNFX1hPUEVOICYmIF9fR05VQ19fID49IDIKKyMgd2FybmluZyAiRmlsZXMgdXNpbmcgdGhpcyBoZWFkZXIgbXVzdCBiZSBjb21waWxlZCB3aXRoIF9TVklEX1NPVVJDRSBvciBfWE9QRU5fU09VUkNFIgorI2VuZGlmCisKKy8qIEdldCBzeXN0ZW0gZGVwZW5kZW50IGRlZmluaXRpb24gb2YgYHN0cnVjdCBpcGNfcGVybScgYW5kIG1vcmUuICAqLworI2luY2x1ZGUgPGJpdHMvaXBjdHlwZXMuaD4KKyNpbmNsdWRlIDxiaXRzL2lwYy5oPgorCisjaWZuZGVmIF9fdWlkX3RfZGVmaW5lZAordHlwZWRlZiBfX3VpZF90IHVpZF90OworIyBkZWZpbmUgX191aWRfdF9kZWZpbmVkCisjZW5kaWYKKworI2lmbmRlZiBfX2dpZF90X2RlZmluZWQKK3R5cGVkZWYgX19naWRfdCBnaWRfdDsKKyMgZGVmaW5lIF9fZ2lkX3RfZGVmaW5lZAorI2VuZGlmCisKKyNpZm5kZWYgX19tb2RlX3RfZGVmaW5lZAordHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CisjIGRlZmluZSBfX21vZGVfdF9kZWZpbmVkCisjZW5kaWYKKworI2lmbmRlZiBfX2tleV90X2RlZmluZWQKK3R5cGVkZWYgX19rZXlfdCBrZXlfdDsKKyMgZGVmaW5lIF9fa2V5X3RfZGVmaW5lZAorI2VuZGlmCisKK19fQkVHSU5fREVDTFMKKworLyogR2VuZXJhdGVzIGtleSBmb3IgU3lzdGVtIFYgc3R5bGUgSVBDLiAgKi8KK2V4dGVybiBrZXlfdCBmdG9rIChfX2NvbnN0IGNoYXIgKl9fcGF0aG5hbWUsIGludCBfX3Byb2pfaWQpIF9fVEhST1c7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBzeXMvaXBjLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMva2QuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMva2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDU5YzA3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9rZC5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfU1lTX0tEX0gKKyNkZWZpbmUgX1NZU19LRF9ICTEKKworLyogTWFrZSBzdXJlIHRoZSA8bGludXgvdHlwZXMuaD4gaGVhZGVyIGlzIG5vdCBsb2FkZWQuICAqLworI2lmbmRlZiBfTElOVVhfVFlQRVNfSAorIyBkZWZpbmUgX0xJTlVYX1RZUEVTX0gJCTEKKyMgZGVmaW5lIF9fdW5kZWZfTElOVVhfVFlQRVNfSAorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9rZC5oPgorCisjaWZkZWYgX191bmRlZl9MSU5VWF9UWVBFU19ICisjIHVuZGVmIF9MSU5VWF9UWVBFU19ICisjIHVuZGVmIF9fdW5kZWZfTElOVVhfVFlQRVNfSAorI2VuZGlmCisKKyNlbmRpZgkvKiBzeXMva2QuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9rZGFlbW9uLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL2tkYWVtb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTQ5MWY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9rZGFlbW9uLmgKQEAgLTAsMCArMSwzMyBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisvKiBJbnRlcmZhY2VzIHRvIGNvbnRyb2wgdGhlIHZhcmlvdXMga2VybmVsIGRhZW1vbnMuICAqLworCisjaWZuZGVmIF9TWVNfS0RBRU1PTl9ICisKKyNkZWZpbmUgX1NZU19LREFFTU9OX0gJMQorI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKK19fQkVHSU5fREVDTFMKKworLyogU3RhcnQsIGZsdXNoLCBvciB0dW5lIHRoZSBrZXJuZWwncyBidWZmZXIgZmx1c2hpbmcgZGFlbW9uLiAgKi8KK2V4dGVybiBpbnQgYmRmbHVzaCAoaW50IF9fZnVuYywgbG9uZyBpbnQgX19kYXRhKSBfX1RIUk9XOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19LREFFTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMva2xvZy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9rbG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVmNWZlNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMva2xvZy5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5NiwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZglfU1lTX0tMT0dfSAorCisjZGVmaW5lCV9TWVNfS0xPR19ICTEKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKKy8qIENvbnRyb2wgdGhlIGtlcm5lbCdzIGxvZ2dpbmcgZmFjaWxpdHkuICBUaGlzIGNvcnJlc3BvbmRzIGV4YWN0bHkgdG8KKyAgIHRoZSBrZXJuZWwncyBzeXNsb2cgc3lzdGVtIGNhbGwsIGJ1dCB0aGF0IG5hbWUgaXMgZWFzaWx5IGNvbmZ1c2VkCisgICB3aXRoIHRoZSB1c2VyLWxldmVsIHN5c2xvZyBmYWNpbGl0eSwgd2hpY2ggaXMgc29tZXRoaW5nIGNvbXBsZXRlbHkKKyAgIGRpZmZlcmVudC4gICovCitleHRlcm4gaW50IGtsb2djdGwgKGludCBfX3R5cGUsIGNoYXIgKl9fYnVmcCwgaW50IF9fbGVuKSBfX1RIUk9XOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19LTE9HX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvbW1hbi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9tbWFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNkOGEzZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvbW1hbi5oCkBAIC0wLDAgKzEsMTUyIEBACisvKiBEZWZpbml0aW9ucyBmb3IgQlNELXN0eWxlIG1lbW9yeSBtYW5hZ2VtZW50LgorICAgQ29weXJpZ2h0IChDKSAxOTk0LTIwMDAsIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYJX1NZU19NTUFOX0gKKyNkZWZpbmUJX1NZU19NTUFOX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxiaXRzL3R5cGVzLmg+CisjZGVmaW5lIF9fbmVlZF9zaXplX3QKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2lmbmRlZiBfX29mZl90X2RlZmluZWQKKyMgaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKK3R5cGVkZWYgX19vZmZfdCBvZmZfdDsKKyMgZWxzZQordHlwZWRlZiBfX29mZjY0X3Qgb2ZmX3Q7CisjIGVuZGlmCisjIGRlZmluZSBfX29mZl90X2RlZmluZWQKKyNlbmRpZgorCisjaWZuZGVmIF9fbW9kZV90X2RlZmluZWQKK3R5cGVkZWYgX19tb2RlX3QgbW9kZV90OworIyBkZWZpbmUgX19tb2RlX3RfZGVmaW5lZAorI2VuZGlmCisKKyNpbmNsdWRlIDxiaXRzL21tYW4uaD4KKworLyogUmV0dXJuIHZhbHVlIG9mIGBtbWFwJyBpbiBjYXNlIG9mIGFuIGVycm9yLiAgKi8KKyNkZWZpbmUgTUFQX0ZBSUxFRAkoKHZvaWQgKikgLTEpCisKK19fQkVHSU5fREVDTFMKKy8qIE1hcCBhZGRyZXNzZXMgc3RhcnRpbmcgbmVhciBBRERSIGFuZCBleHRlbmRpbmcgZm9yIExFTiBieXRlcy4gIGZyb20KKyAgIE9GRlNFVCBpbnRvIHRoZSBmaWxlIEZEIGRlc2NyaWJlcyBhY2NvcmRpbmcgdG8gUFJPVCBhbmQgRkxBR1MuICBJZiBBRERSCisgICBpcyBub256ZXJvLCBpdCBpcyB0aGUgZGVzaXJlZCBtYXBwaW5nIGFkZHJlc3MuICBJZiB0aGUgTUFQX0ZJWEVEIGJpdCBpcworICAgc2V0IGluIEZMQUdTLCB0aGUgbWFwcGluZyB3aWxsIGJlIGF0IEFERFIgZXhhY3RseSAod2hpY2ggbXVzdCBiZQorICAgcGFnZS1hbGlnbmVkKTsgb3RoZXJ3aXNlIHRoZSBzeXN0ZW0gY2hvb3NlcyBhIGNvbnZlbmllbnQgbmVhcmJ5IGFkZHJlc3MuCisgICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBhY3R1YWwgbWFwcGluZyBhZGRyZXNzIGNob3NlbiBvciBNQVBfRkFJTEVECisgICBmb3IgZXJyb3JzIChpbiB3aGljaCBjYXNlIGBlcnJubycgaXMgc2V0KS4gIEEgc3VjY2Vzc2Z1bCBgbW1hcCcgY2FsbAorICAgZGVhbGxvY2F0ZXMgYW55IHByZXZpb3VzIG1hcHBpbmcgZm9yIHRoZSBhZmZlY3RlZCByZWdpb24uICAqLworCisjaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKK2V4dGVybiB2b2lkICptbWFwICh2b2lkICpfX2FkZHIsIHNpemVfdCBfX2xlbiwgaW50IF9fcHJvdCwKKwkJICAgaW50IF9fZmxhZ3MsIGludCBfX2ZkLCBfX29mZl90IF9fb2Zmc2V0KSBfX1RIUk9XOworI2Vsc2UKKyMgaWZkZWYgX19SRURJUkVDVF9OVEgKK2V4dGVybiB2b2lkICogX19SRURJUkVDVF9OVEggKG1tYXAsCisJCQkgICAgICAodm9pZCAqX19hZGRyLCBzaXplX3QgX19sZW4sIGludCBfX3Byb3QsCisJCQkgICAgICAgaW50IF9fZmxhZ3MsIGludCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQpLAorCQkJICAgICAgbW1hcDY0KTsKKyMgZWxzZQorIyAgZGVmaW5lIG1tYXAgbW1hcDY0CisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAorZXh0ZXJuIHZvaWQgKm1tYXA2NCAodm9pZCAqX19hZGRyLCBzaXplX3QgX19sZW4sIGludCBfX3Byb3QsCisJCSAgICAgaW50IF9fZmxhZ3MsIGludCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQpIF9fVEhST1c7CisjZW5kaWYKKworLyogRGVhbGxvY2F0ZSBhbnkgbWFwcGluZyBmb3IgdGhlIHJlZ2lvbiBzdGFydGluZyBhdCBBRERSIGFuZCBleHRlbmRpbmcgTEVOCisgICBieXRlcy4gIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCAtMSBmb3IgZXJyb3JzIChhbmQgc2V0cyBlcnJubykuICAqLworZXh0ZXJuIGludCBtdW5tYXAgKHZvaWQgKl9fYWRkciwgc2l6ZV90IF9fbGVuKSBfX1RIUk9XOworCisvKiBDaGFuZ2UgdGhlIG1lbW9yeSBwcm90ZWN0aW9uIG9mIHRoZSByZWdpb24gc3RhcnRpbmcgYXQgQUREUiBhbmQKKyAgIGV4dGVuZGluZyBMRU4gYnl0ZXMgdG8gUFJPVC4gIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCAtMSBmb3IgZXJyb3JzCisgICAoYW5kIHNldHMgZXJybm8pLiAgKi8KK2V4dGVybiBpbnQgbXByb3RlY3QgKHZvaWQgKl9fYWRkciwgc2l6ZV90IF9fbGVuLCBpbnQgX19wcm90KSBfX1RIUk9XOworCisvKiBTeW5jaHJvbml6ZSB0aGUgcmVnaW9uIHN0YXJ0aW5nIGF0IEFERFIgYW5kIGV4dGVuZGluZyBMRU4gYnl0ZXMgd2l0aCB0aGUKKyAgIGZpbGUgaXQgbWFwcy4gIEZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBvbiBhIGZpbGUgYmVpbmcgbWFwcGVkIGFyZQorICAgdW5wcmVkaWN0YWJsZSBiZWZvcmUgdGhpcyBpcyBkb25lLiAgRmxhZ3MgYXJlIGZyb20gdGhlIE1TXyogc2V0LgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoCisgICBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgbXN5bmMgKHZvaWQgKl9fYWRkciwgc2l6ZV90IF9fbGVuLCBpbnQgX19mbGFncyk7CisKKyNpZmRlZiBfX1VTRV9CU0QKKy8qIEFkdmlzZSB0aGUgc3lzdGVtIGFib3V0IHBhcnRpY3VsYXIgdXNhZ2UgcGF0dGVybnMgdGhlIHByb2dyYW0gZm9sbG93cworICAgZm9yIHRoZSByZWdpb24gc3RhcnRpbmcgYXQgQUREUiBhbmQgZXh0ZW5kaW5nIExFTiBieXRlcy4gICovCitleHRlcm4gaW50IG1hZHZpc2UgKHZvaWQgKl9fYWRkciwgc2l6ZV90IF9fbGVuLCBpbnQgX19hZHZpY2UpIF9fVEhST1c7CisjZW5kaWYKKyNpZmRlZiBfX1VTRV9YT1BFTjJLCisvKiBUaGlzIGlzIHRoZSBQT1NJWCBuYW1lIGZvciB0aGlzIGZ1bmN0aW9uLiAgKi8KK2V4dGVybiBpbnQgcG9zaXhfbWFkdmlzZSAodm9pZCAqX19hZGRyLCBzaXplX3QgX19sZW4sIGludCBfX2FkdmljZSkgX19USFJPVzsKKyNlbmRpZgorCisvKiBHdWFyYW50ZWUgYWxsIHdob2xlIHBhZ2VzIG1hcHBlZCBieSB0aGUgcmFuZ2UgW0FERFIsQUREUitMRU4pIHRvCisgICBiZSBtZW1vcnkgcmVzaWRlbnQuICAqLworZXh0ZXJuIGludCBtbG9jayAoX19jb25zdCB2b2lkICpfX2FkZHIsIHNpemVfdCBfX2xlbikgX19USFJPVzsKKworLyogVW5sb2NrIHdob2xlIHBhZ2VzIHByZXZpb3VzbHkgbWFwcGVkIGJ5IHRoZSByYW5nZSBbQUREUixBRERSK0xFTikuICAqLworZXh0ZXJuIGludCBtdW5sb2NrIChfX2NvbnN0IHZvaWQgKl9fYWRkciwgc2l6ZV90IF9fbGVuKSBfX1RIUk9XOworCisvKiBDYXVzZSBhbGwgY3VycmVudGx5IG1hcHBlZCBwYWdlcyBvZiB0aGUgcHJvY2VzcyB0byBiZSBtZW1vcnkgcmVzaWRlbnQKKyAgIHVudGlsIHVubG9ja2VkIGJ5IGEgY2FsbCB0byB0aGUgYG11bmxvY2thbGwnLCB1bnRpbCB0aGUgcHJvY2VzcyBleGl0cywKKyAgIG9yIHVudGlsIHRoZSBwcm9jZXNzIGNhbGxzIGBleGVjdmUnLiAgKi8KK2V4dGVybiBpbnQgbWxvY2thbGwgKGludCBfX2ZsYWdzKSBfX1RIUk9XOworCisvKiBBbGwgY3VycmVudGx5IG1hcHBlZCBwYWdlcyBvZiB0aGUgcHJvY2VzcycgYWRkcmVzcyBzcGFjZSBiZWNvbWUKKyAgIHVubG9ja2VkLiAgKi8KK2V4dGVybiBpbnQgbXVubG9ja2FsbCAodm9pZCkgX19USFJPVzsKKworI2lmZGVmIF9fVVNFX01JU0MKKy8qIG1pbmNvcmUgcmV0dXJucyB0aGUgbWVtb3J5IHJlc2lkZW5jeSBzdGF0dXMgb2YgdGhlIHBhZ2VzIGluIHRoZQorICAgY3VycmVudCBwcm9jZXNzJ3MgYWRkcmVzcyBzcGFjZSBzcGVjaWZpZWQgYnkgW3N0YXJ0LCBzdGFydCArIGxlbikuCisgICBUaGUgc3RhdHVzIGlzIHJldHVybmVkIGluIGEgdmVjdG9yIG9mIGJ5dGVzLiAgVGhlIGxlYXN0IHNpZ25pZmljYW50CisgICBiaXQgb2YgZWFjaCBieXRlIGlzIDEgaWYgdGhlIHJlZmVyZW5jZWQgcGFnZSBpcyBpbiBtZW1vcnksIG90aGVyd2lzZQorICAgaXQgaXMgemVyby4gICovCitleHRlcm4gaW50IG1pbmNvcmUgKHZvaWQgKl9fc3RhcnQsIHNpemVfdCBfX2xlbiwgdW5zaWduZWQgY2hhciAqX192ZWMpCisgICAgIF9fVEhST1c7CisjZW5kaWYKKworI2lmZGVmIF9fVVNFX0dOVQorLyogUmVtYXAgcGFnZXMgbWFwcGVkIGJ5IHRoZSByYW5nZSBbQUREUixBRERSK09MRF9MRU4pIHRvIG5ldyBsZW5ndGgKKyAgIE5FV19MRU4uICBJZiBNUkVNQVBfTUFZTU9WRSBpcyBzZXQgaW4gRkxBR1MgdGhlIHJldHVybmVkIGFkZHJlc3MKKyAgIG1heSBkaWZmZXIgZnJvbSBBRERSLiAgSWYgTVJFTUFQX0ZJWEVEIGlzIHNldCBpbiBGTEFHUyB0aGUgZnVuY3Rpb24KKyAgIHRha2VzIGFub3RoZXIgcGFyYW10ZXIgd2hpY2ggaXMgYSBmaXhlZCBhZGRyZXNzIGF0IHdoaWNoIHRoZSBibG9jaworICAgcmVzaWRlcyBhZnRlciBhIHN1Y2Nlc3NmdWwgY2FsbC4gICovCitleHRlcm4gdm9pZCAqbXJlbWFwICh2b2lkICpfX2FkZHIsIHNpemVfdCBfX29sZF9sZW4sIHNpemVfdCBfX25ld19sZW4sCisJCSAgICAgaW50IF9fZmxhZ3MsIC4uLikgX19USFJPVzsKKworLyogUmVtYXAgYXJiaXRyYXJ5IHBhZ2VzIG9mIGEgc2hhcmVkIGJhY2tpbmcgc3RvcmUgd2l0aGluIGFuIGV4aXN0aW5nCisgICBWTUEuICAqLworZXh0ZXJuIGludCByZW1hcF9maWxlX3BhZ2VzICh2b2lkICpfX3N0YXJ0LCBzaXplX3QgX19zaXplLCBpbnQgX19wcm90LAorCQkJICAgICBzaXplX3QgX19wZ29mZiwgaW50IF9fZmxhZ3MpIF9fVEhST1c7CisjZW5kaWYKKworCisvKiBPcGVuIHNoYXJlZCBtZW1vcnkgc2VnbWVudC4gICovCitleHRlcm4gaW50IHNobV9vcGVuIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgaW50IF9fb2ZsYWcsIG1vZGVfdCBfX21vZGUpOworCisvKiBSZW1vdmUgc2hhcmVkIG1lbW9yeSBzZWdtZW50LiAgKi8KK2V4dGVybiBpbnQgc2htX3VubGluayAoX19jb25zdCBjaGFyICpfX25hbWUpOworCitfX0VORF9ERUNMUworCisjZW5kaWYJLyogc3lzL21tYW4uaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9tb3VudC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9tb3VudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMDU1NDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL21vdW50LmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qIEhlYWRlciBmaWxlIGZvciBtb3VudGluZy91bm1vdW50IExpbnV4IGZpbGVzeXN0ZW1zLgorICAgQ29weXJpZ2h0IChDKSAxOTk2LDE5OTcsMTk5OCwxOTk5LDIwMDAsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyogVGhpcyBpcyB0YWtlbiBmcm9tIC91c3IvaW5jbHVkZS9saW51eC9mcy5oLiAgKi8KKworI2lmbmRlZiBfU1lTX01PVU5UX0gKKyNkZWZpbmUgX1NZU19NT1VOVF9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisKKyNkZWZpbmUgQkxPQ0tfU0laRQkxMDI0CisjZGVmaW5lIEJMT0NLX1NJWkVfQklUUwkxMAorCisKKy8qIFRoZXNlIGFyZSB0aGUgZnMtaW5kZXBlbmRlbnQgbW91bnQtZmxhZ3M6IHVwIHRvIDE2IGZsYWdzIGFyZQorICAgc3VwcG9ydGVkICAqLworZW51bQoreworICBNU19SRE9OTFkgPSAxLAkJLyogTW91bnQgcmVhZC1vbmx5LiAgKi8KKyNkZWZpbmUgTVNfUkRPTkxZCU1TX1JET05MWQorICBNU19OT1NVSUQgPSAyLAkJLyogSWdub3JlIHN1aWQgYW5kIHNnaWQgYml0cy4gICovCisjZGVmaW5lIE1TX05PU1VJRAlNU19OT1NVSUQKKyAgTVNfTk9ERVYgPSA0LAkJCS8qIERpc2FsbG93IGFjY2VzcyB0byBkZXZpY2Ugc3BlY2lhbCBmaWxlcy4gICovCisjZGVmaW5lIE1TX05PREVWCU1TX05PREVWCisgIE1TX05PRVhFQyA9IDgsCQkvKiBEaXNhbGxvdyBwcm9ncmFtIGV4ZWN1dGlvbi4gICovCisjZGVmaW5lIE1TX05PRVhFQwlNU19OT0VYRUMKKyAgTVNfU1lOQ0hST05PVVMgPSAxNiwJCS8qIFdyaXRlcyBhcmUgc3luY2VkIGF0IG9uY2UuICAqLworI2RlZmluZSBNU19TWU5DSFJPTk9VUwlNU19TWU5DSFJPTk9VUworICBNU19SRU1PVU5UID0gMzIsCQkvKiBBbHRlciBmbGFncyBvZiBhIG1vdW50ZWQgRlMuICAqLworI2RlZmluZSBNU19SRU1PVU5UCU1TX1JFTU9VTlQKKyAgTVNfTUFORExPQ0sgPSA2NCwJCS8qIEFsbG93IG1hbmRhdG9yeSBsb2NrcyBvbiBhbiBGUy4gICovCisjZGVmaW5lIE1TX01BTkRMT0NLCU1TX01BTkRMT0NLCisgIFNfV1JJVEUgPSAxMjgsCQkvKiBXcml0ZSBvbiBmaWxlL2RpcmVjdG9yeS9zeW1saW5rLiAgKi8KKyNkZWZpbmUgU19XUklURQkJU19XUklURQorICBTX0FQUEVORCA9IDI1NiwJCS8qIEFwcGVuZC1vbmx5IGZpbGUuICAqLworI2RlZmluZSBTX0FQUEVORAlTX0FQUEVORAorICBTX0lNTVVUQUJMRSA9IDUxMiwJCS8qIEltbXV0YWJsZSBmaWxlLiAgKi8KKyNkZWZpbmUgU19JTU1VVEFCTEUJU19JTU1VVEFCTEUKKyAgTVNfTk9BVElNRSA9IDEwMjQsCQkvKiBEbyBub3QgdXBkYXRlIGFjY2VzcyB0aW1lcy4gICovCisjZGVmaW5lIE1TX05PQVRJTUUJTVNfTk9BVElNRQorICBNU19OT0RJUkFUSU1FID0gMjA0OCwJCS8qIERvIG5vdCB1cGRhdGUgZGlyZWN0b3J5IGFjY2VzcyB0aW1lcy4gICovCisjZGVmaW5lIE1TX05PRElSQVRJTUUJTVNfTk9ESVJBVElNRQorICBNU19CSU5EID0gNDA5NiwJCS8qIEJpbmQgZGlyZWN0b3J5IGF0IGRpZmZlcmVudCBwbGFjZS4gICovCisjZGVmaW5lIE1TX0JJTkQJCU1TX0JJTkQKK307CisKKy8qIEZsYWdzIHRoYXQgY2FuIGJlIGFsdGVyZWQgYnkgTVNfUkVNT1VOVCAgKi8KKyNkZWZpbmUgTVNfUk1UX01BU0sgKE1TX1JET05MWXxNU19TWU5DSFJPTk9VU3xNU19NQU5ETE9DS3xNU19OT0FUSU1FIFwKKwkJICAgICB8TVNfTk9ESVJBVElNRSkKKworCisvKiBNYWdpYyBtb3VudCBmbGFnIG51bWJlci4gSGFzIHRvIGJlIG9yLWVkIHRvIHRoZSBmbGFnIHZhbHVlcy4gICovCisKKyNkZWZpbmUgTVNfTUdDX1ZBTCAweGMwZWQwMDAwCS8qIE1hZ2ljIGZsYWcgbnVtYmVyIHRvIGluZGljYXRlICJuZXciIGZsYWdzICovCisjZGVmaW5lIE1TX01HQ19NU0sgMHhmZmZmMDAwMAkvKiBNYWdpYyBmbGFnIG51bWJlciBtYXNrICovCisKKworLyogVGhlIHJlYWQtb25seSBzdHVmZiBkb2Vzbid0IHJlYWxseSBiZWxvbmcgaGVyZSwgYnV0IGFueSBvdGhlciBwbGFjZQorICAgaXMgcHJvYmFibHkgYXMgYmFkIGFuZCBJIGRvbid0IHdhbnQgdG8gY3JlYXRlIHlldCBhbm90aGVyIGluY2x1ZGUKKyAgIGZpbGUuICAqLworCisjZGVmaW5lIEJMS1JPU0VUICAgX0lPKDB4MTIsIDkzKSAvKiBTZXQgZGV2aWNlIHJlYWQtb25seSAoMCA9IHJlYWQtd3JpdGUpLiAgKi8KKyNkZWZpbmUgQkxLUk9HRVQgICBfSU8oMHgxMiwgOTQpIC8qIEdldCByZWFkLW9ubHkgc3RhdHVzICgwID0gcmVhZF93cml0ZSkuICAqLworI2RlZmluZSBCTEtSUlBBUlQgIF9JTygweDEyLCA5NSkgLyogUmUtcmVhZCBwYXJ0aXRpb24gdGFibGUuICAqLworI2RlZmluZSBCTEtHRVRTSVpFIF9JTygweDEyLCA5NikgLyogUmV0dXJuIGRldmljZSBzaXplLiAgKi8KKyNkZWZpbmUgQkxLRkxTQlVGICBfSU8oMHgxMiwgOTcpIC8qIEZsdXNoIGJ1ZmZlciBjYWNoZS4gICovCisjZGVmaW5lIEJMS1JBU0VUICAgX0lPKDB4MTIsIDk4KSAvKiBTZXQgcmVhZCBhaGVhZCBmb3IgYmxvY2sgZGV2aWNlLiAgKi8KKyNkZWZpbmUgQkxLUkFHRVQgICBfSU8oMHgxMiwgOTkpIC8qIEdldCBjdXJyZW50IHJlYWQgYWhlYWQgc2V0dGluZy4gICovCisjZGVmaW5lIEJMS0ZSQVNFVCAgX0lPKDB4MTIsMTAwKSAvKiBTZXQgZmlsZXN5c3RlbSByZWFkLWFoZWFkLiAgKi8KKyNkZWZpbmUgQkxLRlJBR0VUICBfSU8oMHgxMiwxMDEpIC8qIEdldCBmaWxlc3lzdGVtIHJlYWQtYWhlYWQuICAqLworI2RlZmluZSBCTEtTRUNUU0VUIF9JTygweDEyLDEwMikgLyogU2V0IG1heCBzZWN0b3JzIHBlciByZXF1ZXN0LiAgKi8KKyNkZWZpbmUgQkxLU0VDVEdFVCBfSU8oMHgxMiwxMDMpIC8qIEdldCBtYXggc2VjdG9ycyBwZXIgcmVxdWVzdC4gICovCisjZGVmaW5lIEJMS1NTWkdFVCAgX0lPKDB4MTIsMTA0KSAvKiBHZXQgYmxvY2sgZGV2aWNlIHNlY3RvciBzaXplLiAgKi8KKyNkZWZpbmUgQkxLQlNaR0VUICBfSU9SKDB4MTIsMTEyLHNpemVfdCkKKyNkZWZpbmUgQkxLQlNaU0VUICBfSU9XKDB4MTIsMTEzLHNpemVfdCkKKyNkZWZpbmUgQkxLR0VUU0laRTY0IF9JT1IoMHgxMiwxMTQsc2l6ZV90KSAvKiByZXR1cm4gZGV2aWNlIHNpemUuICAqLworCisKKy8qIFBvc3NpYmxlIHZhbHVlIGZvciBGTEFHUyBwYXJhbWV0ZXIgb2YgYHVtb3VudDInLiAgKi8KK2VudW0KK3sKKyAgTU5UX0ZPUkNFID0gMQkJCS8qIEZvcmNlIHVubW91bnRpbmcuICAqLworI2RlZmluZSBNTlRfRk9SQ0UgTU5UX0ZPUkNFCit9OworCisKK19fQkVHSU5fREVDTFMKKworLyogTW91bnQgYSBmaWxlc3lzdGVtLiAgKi8KK2V4dGVybiBpbnQgbW91bnQgKF9fY29uc3QgY2hhciAqX19zcGVjaWFsX2ZpbGUsIF9fY29uc3QgY2hhciAqX19kaXIsCisJCSAgX19jb25zdCBjaGFyICpfX2ZzdHlwZSwgdW5zaWduZWQgbG9uZyBpbnQgX19yd2ZsYWcsCisJCSAgX19jb25zdCB2b2lkICpfX2RhdGEpIF9fVEhST1c7CisKKy8qIFVubW91bnQgYSBmaWxlc3lzdGVtLiAgKi8KK2V4dGVybiBpbnQgdW1vdW50IChfX2NvbnN0IGNoYXIgKl9fc3BlY2lhbF9maWxlKSBfX1RIUk9XOworCisvKiBVbm1vdW50IGEgZmlsZXN5c3RlbS4gIEZvcmNlIHVubW91bnRpbmcgaWYgRkxBR1MgaXMgc2V0IHRvIE1OVF9GT1JDRS4gICovCitleHRlcm4gaW50IHVtb3VudDIgKF9fY29uc3QgY2hhciAqX19zcGVjaWFsX2ZpbGUsIGludCBfX2ZsYWdzKSBfX1RIUk9XOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19NT1VOVF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL21zZy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9tc2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGM5NmJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9tc2cuaApAQCAtMCwwICsxLDg1IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NywxOTk5LDIwMDAsMjAwMywyMDA2LDIwMDcKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9TWVNfTVNHX0gKKyNkZWZpbmUgX1NZU19NU0dfSAorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworI2RlZmluZSBfX25lZWRfc2l6ZV90CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8qIEdldCBjb21tb24gZGVmaW5pdGlvbiBvZiBTeXN0ZW0gViBzdHlsZSBJUEMuICAqLworI2luY2x1ZGUgPHN5cy9pcGMuaD4KKworLyogR2V0IHN5c3RlbSBkZXBlbmRlbnQgZGVmaW5pdGlvbiBvZiBgc3RydWN0IG1zcWlkX2RzJyBhbmQgbW9yZS4gICovCisjaW5jbHVkZSA8Yml0cy9tc3EuaD4KKworLyogRGVmaW5lIHR5cGVzIHJlcXVpcmVkIGJ5IHRoZSBzdGFuZGFyZC4gICovCisjZGVmaW5lCV9fbmVlZF90aW1lX3QKKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpZm5kZWYgX19waWRfdF9kZWZpbmVkCit0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CisjIGRlZmluZSBfX3BpZF90X2RlZmluZWQKKyNlbmRpZgorCisjaWZuZGVmIF9fc3NpemVfdF9kZWZpbmVkCit0eXBlZGVmIF9fc3NpemVfdCBzc2l6ZV90OworIyBkZWZpbmUgX19zc2l6ZV90X2RlZmluZWQKKyNlbmRpZgorCisvKiBUaGUgZm9sbG93aW5nIFN5c3RlbSBWIHN0eWxlIElQQyBmdW5jdGlvbnMgaW1wbGVtZW50IGEgbWVzc2FnZSBxdWV1ZQorICAgc3lzdGVtLiAgVGhlIGRlZmluaXRpb24gaXMgZm91bmQgaW4gWFBHMi4gICovCisKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIFRlbXBsYXRlIGZvciBzdHJ1Y3QgdG8gYmUgdXNlZCBhcyBhcmd1bWVudCBmb3IgYG1zZ3NuZCcgYW5kIGBtc2dyY3YnLiAgKi8KK3N0cnVjdCBtc2didWYKKyAgeworICAgIGxvbmcgaW50IG10eXBlOwkJLyogdHlwZSBvZiByZWNlaXZlZC9zZW50IG1lc3NhZ2UgKi8KKyAgICBjaGFyIG10ZXh0WzFdOwkJLyogdGV4dCBvZiB0aGUgbWVzc2FnZSAqLworICB9OworI2VuZGlmCisKKworX19CRUdJTl9ERUNMUworCisvKiBNZXNzYWdlIHF1ZXVlIGNvbnRyb2wgb3BlcmF0aW9uLiAgKi8KK2V4dGVybiBpbnQgbXNnY3RsIChpbnQgX19tc3FpZCwgaW50IF9fY21kLCBzdHJ1Y3QgbXNxaWRfZHMgKl9fYnVmKSBfX1RIUk9XOworCisvKiBHZXQgbWVzc2FnZXMgcXVldWUuICAqLworZXh0ZXJuIGludCBtc2dnZXQgKGtleV90IF9fa2V5LCBpbnQgX19tc2dmbGcpIF9fVEhST1c7CisKKy8qIFJlY2VpdmUgbWVzc2FnZSBmcm9tIG1lc3NhZ2UgcXVldWUuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGgKKyAgIF9fVEhST1cuICAqLworZXh0ZXJuIHNzaXplX3QgbXNncmN2IChpbnQgX19tc3FpZCwgdm9pZCAqX19tc2dwLCBzaXplX3QgX19tc2dzeiwKKwkJICAgICAgIGxvbmcgaW50IF9fbXNndHlwLCBpbnQgX19tc2dmbGcpOworCisvKiBTZW5kIG1lc3NhZ2UgdG8gbWVzc2FnZSBxdWV1ZS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aAorICAgX19USFJPVy4gICovCitleHRlcm4gaW50IG1zZ3NuZCAoaW50IF9fbXNxaWQsIF9fY29uc3Qgdm9pZCAqX19tc2dwLCBzaXplX3QgX19tc2dzeiwKKwkJICAgaW50IF9fbXNnZmxnKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIHN5cy9tc2cuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9tdGlvLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL210aW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWZhNTUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9tdGlvLmgKQEAgLTAsMCArMSwyNzcgQEAKKy8qIFN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIGZvciBtYWduZXRpYyB0YXBlIEkvTyBjb250cm9sIGNvbW1hbmRzLgorICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisvKiBXcml0dGVuIGJ5IEguIEJlcmdtYW4gPGhlbm51c0BjeWJlcmNvbW0ubmw+LiAgKi8KKworI2lmbmRlZiBfU1lTX01USU9fSAorI2RlZmluZSBfU1lTX01USU9fSAkxCisKKy8qIEdldCBuZWNlc3NhcnkgZGVmaW5pdGlvbnMgZnJvbSBzeXN0ZW0gYW5kIGtlcm5lbCBoZWFkZXJzLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKworCisvKiBTdHJ1Y3R1cmUgZm9yIE1USU9DVE9QIC0gbWFnbmV0aWMgdGFwZSBvcGVyYXRpb24gY29tbWFuZC4gICovCitzdHJ1Y3QgbXRvcAorICB7CisgICAgc2hvcnQgaW50IG10X29wOwkJLyogT3BlcmF0aW9ucyBkZWZpbmVkIGJlbG93LiAgKi8KKyAgICBpbnQgbXRfY291bnQ7CQkvKiBIb3cgbWFueSBvZiB0aGVtLiAgKi8KKyAgfTsKKyNkZWZpbmUgX0lPVF9tdG9wIC8qIEh1cmQgaW9jdGwgdHlwZSBmaWVsZC4gICovIFwKKyAgX0lPVCAoX0lPVFMgKHNob3J0KSwgMSwgX0lPVFMgKGludCksIDEsIDAsIDApCisKKy8qIE1hZ25ldGljIFRhcGUgb3BlcmF0aW9ucyBbTm90IGFsbCBvcGVyYXRpb25zIHN1cHBvcnRlZCBieSBhbGwgZHJpdmVyc10uICAqLworI2RlZmluZSBNVFJFU0VUIDAJLyogK3Jlc2V0IGRyaXZlIGluIGNhc2Ugb2YgcHJvYmxlbXMuICAqLworI2RlZmluZSBNVEZTRgkxCS8qIEZvcndhcmQgc3BhY2Ugb3ZlciBGaWxlTWFyaywKKwkJCSAqIHBvc2l0aW9uIGF0IGZpcnN0IHJlY29yZCBvZiBuZXh0IGZpbGUuICAqLworI2RlZmluZSBNVEJTRgkyCS8qIEJhY2t3YXJkIHNwYWNlIEZpbGVNYXJrIChwb3NpdGlvbiBiZWZvcmUgRk0pLiAgKi8KKyNkZWZpbmUgTVRGU1IJMwkvKiBGb3J3YXJkIHNwYWNlIHJlY29yZC4gICovCisjZGVmaW5lIE1UQlNSCTQJLyogQmFja3dhcmQgc3BhY2UgcmVjb3JkLiAgKi8KKyNkZWZpbmUgTVRXRU9GCTUJLyogV3JpdGUgYW4gZW5kLW9mLWZpbGUgcmVjb3JkIChtYXJrKS4gICovCisjZGVmaW5lIE1UUkVXCTYJLyogUmV3aW5kLiAgKi8KKyNkZWZpbmUgTVRPRkZMCTcJLyogUmV3aW5kIGFuZCBwdXQgdGhlIGRyaXZlIG9mZmxpbmUgKGVqZWN0PykuICAqLworI2RlZmluZSBNVE5PUAk4CS8qIE5vIG9wLCBzZXQgc3RhdHVzIG9ubHkgKHJlYWQgd2l0aCBNVElPQ0dFVCkuICAqLworI2RlZmluZSBNVFJFVEVOIDkJLyogUmV0ZW5zaW9uIHRhcGUuICAqLworI2RlZmluZSBNVEJTRk0JMTAJLyogK2JhY2t3YXJkIHNwYWNlIEZpbGVNYXJrLCBwb3NpdGlvbiBhdCBGTS4gICovCisjZGVmaW5lIE1URlNGTSAgMTEJLyogK2ZvcndhcmQgc3BhY2UgRmlsZU1hcmssIHBvc2l0aW9uIGF0IEZNLiAgKi8KKyNkZWZpbmUgTVRFT00JMTIJLyogR290byBlbmQgb2YgcmVjb3JkZWQgbWVkaWEgKGZvciBhcHBlbmRpbmcgZmlsZXMpLgorCQkJICAgTVRFT00gcG9zaXRpb25zIGFmdGVyIHRoZSBsYXN0IEZNLCByZWFkeSBmb3IKKwkJCSAgIGFwcGVuZGluZyBhbm90aGVyIGZpbGUuICAqLworI2RlZmluZSBNVEVSQVNFIDEzCS8qIEVyYXNlIHRhcGUgLS0gYmUgY2FyZWZ1bCEgICovCisKKyNkZWZpbmUgTVRSQVMxICAxNAkvKiBSdW4gc2VsZiB0ZXN0IDEgKG5vbmRlc3RydWN0aXZlKS4gICovCisjZGVmaW5lIE1UUkFTMgkxNQkvKiBSdW4gc2VsZiB0ZXN0IDIgKGRlc3RydWN0aXZlKS4gICovCisjZGVmaW5lIE1UUkFTMyAgMTYJLyogUmVzZXJ2ZWQgZm9yIHNlbGYgdGVzdCAzLiAgKi8KKworI2RlZmluZSBNVFNFVEJMSyAyMAkvKiBTZXQgYmxvY2sgbGVuZ3RoIChTQ1NJKS4gICovCisjZGVmaW5lIE1UU0VUREVOU0lUWSAyMQkvKiBTZXQgdGFwZSBkZW5zaXR5IChTQ1NJKS4gICovCisjZGVmaW5lIE1UU0VFSwkyMgkvKiBTZWVrIHRvIGJsb2NrIChUYW5kYmVyZywgZXRjLikuICAqLworI2RlZmluZSBNVFRFTEwJMjMJLyogVGVsbCBibG9jayAoVGFuZGJlcmcsIGV0Yy4pLiAgKi8KKyNkZWZpbmUgTVRTRVREUlZCVUZGRVIgMjQgLyogU2V0IHRoZSBkcml2ZSBidWZmZXJpbmcgYWNjb3JkaW5nIHRvIFNDU0ktMi4KKwkJCSAgICAgT3JkaW5hcnkgYnVmZmVyZWQgb3BlcmF0aW9uIHdpdGggY29kZSAxLiAgKi8KKyNkZWZpbmUgTVRGU1MJMjUJLyogU3BhY2UgZm9yd2FyZCBvdmVyIHNldG1hcmtzLiAgKi8KKyNkZWZpbmUgTVRCU1MJMjYJLyogU3BhY2UgYmFja3dhcmQgb3ZlciBzZXRtYXJrcy4gICovCisjZGVmaW5lIE1UV1NNCTI3CS8qIFdyaXRlIHNldG1hcmtzLiAgKi8KKworI2RlZmluZSBNVExPQ0sgIDI4CS8qIExvY2sgdGhlIGRyaXZlIGRvb3IuICAqLworI2RlZmluZSBNVFVOTE9DSyAyOQkvKiBVbmxvY2sgdGhlIGRyaXZlIGRvb3IuICAqLworI2RlZmluZSBNVExPQUQgIDMwCS8qIEV4ZWN1dGUgdGhlIFNDU0kgbG9hZCBjb21tYW5kLiAgKi8KKyNkZWZpbmUgTVRVTkxPQUQgMzEJLyogRXhlY3V0ZSB0aGUgU0NTSSB1bmxvYWQgY29tbWFuZC4gICovCisjZGVmaW5lIE1UQ09NUFJFU1NJT04gMzIvKiBDb250cm9sIGNvbXByZXNzaW9uIHdpdGggU0NTSSBtb2RlIHBhZ2UgMTUuICAqLworI2RlZmluZSBNVFNFVFBBUlQgMzMJLyogQ2hhbmdlIHRoZSBhY3RpdmUgdGFwZSBwYXJ0aXRpb24uICAqLworI2RlZmluZSBNVE1LUEFSVCAgMzQJLyogRm9ybWF0IHRoZSB0YXBlIHdpdGggb25lIG9yIHR3byBwYXJ0aXRpb25zLiAgKi8KKworLyogc3RydWN0dXJlIGZvciBNVElPQ0dFVCAtIG1hZyB0YXBlIGdldCBzdGF0dXMgY29tbWFuZCAqLworCitzdHJ1Y3QgbXRnZXQKKyAgeworICAgIGxvbmcgaW50IG10X3R5cGU7CQkvKiBUeXBlIG9mIG1hZ3RhcGUgZGV2aWNlLiAgKi8KKyAgICBsb25nIGludCBtdF9yZXNpZDsJCS8qIFJlc2lkdWFsIGNvdW50OiAobm90IHN1cmUpCisJCQkJICAgbnVtYmVyIG9mIGJ5dGVzIGlnbm9yZWQsIG9yCisJCQkJICAgbnVtYmVyIG9mIGZpbGVzIG5vdCBza2lwcGVkLCBvcgorCQkJCSAgIG51bWJlciBvZiByZWNvcmRzIG5vdCBza2lwcGVkLiAgKi8KKyAgICAvKiBUaGUgZm9sbG93aW5nIHJlZ2lzdGVycyBhcmUgZGV2aWNlIGRlcGVuZGVudC4gICovCisgICAgbG9uZyBpbnQgbXRfZHNyZWc7CQkvKiBTdGF0dXMgcmVnaXN0ZXIuICAqLworICAgIGxvbmcgaW50IG10X2dzdGF0OwkJLyogR2VuZXJpYyAoZGV2aWNlIGluZGVwZW5kZW50KSBzdGF0dXMuICAqLworICAgIGxvbmcgaW50IG10X2VycmVnOwkJLyogRXJyb3IgcmVnaXN0ZXIuICAqLworICAgIC8qIFRoZSBuZXh0IHR3byBmaWVsZHMgYXJlIG5vdCBhbHdheXMgdXNlZC4gICovCisgICAgX19kYWRkcl90IG10X2ZpbGVubzsJLyogTnVtYmVyIG9mIGN1cnJlbnQgZmlsZSBvbiB0YXBlLiAgKi8KKyAgICBfX2RhZGRyX3QgbXRfYmxrbm87CQkvKiBDdXJyZW50IGJsb2NrIG51bWJlci4gICovCisgIH07CisjZGVmaW5lIF9JT1RfbXRnZXQgLyogSHVyZCBpb2N0bCB0eXBlIGZpZWxkLiAgKi8gXAorICBfSU9UIChfSU9UUyAobG9uZyksIDcsIDAsIDAsIDAsIDApCisKKworLyogQ29uc3RhbnRzIGZvciBtdF90eXBlLiBOb3QgYWxsIG9mIHRoZXNlIGFyZSBzdXBwb3J0ZWQsIGFuZAorICAgdGhlc2UgYXJlIG5vdCBhbGwgb2YgdGhlIG9uZXMgdGhhdCBhcmUgc3VwcG9ydGVkLiAgKi8KKyNkZWZpbmUgTVRfSVNVTktOT1dOCQkweDAxCisjZGVmaW5lIE1UX0lTUUlDMDIJCTB4MDIJLyogR2VuZXJpYyBRSUMtMDIgdGFwZSBzdHJlYW1lci4gICovCisjZGVmaW5lIE1UX0lTV1Q1MTUwCQkweDAzCS8qIFdhbmd0ZWsgNTE1MEVRLCBRSUMtMTUwLCBRSUMtMDIuICAqLworI2RlZmluZSBNVF9JU0FSQ0hJVkVfNTk0NUwyCTB4MDQJLyogQXJjaGl2ZSA1OTQ1TC0yLCBRSUMtMjQsIFFJQy0wMj8uICovCisjZGVmaW5lIE1UX0lTQ01TSjUwMAkJMHgwNQkvKiBDTVMgSnVtYm8gNTAwIChRSUMtMDI/KS4gICovCisjZGVmaW5lIE1UX0lTVERDMzYxMAkJMHgwNgkvKiBUYW5kYmVyZyA2MzEwLCBRSUMtMjQuICAqLworI2RlZmluZSBNVF9JU0FSQ0hJVkVfVlA2MEkJMHgwNwkvKiBBcmNoaXZlIFZQNjBpLCBRSUMtMDIuICAqLworI2RlZmluZSBNVF9JU0FSQ0hJVkVfMjE1MEwJMHgwOAkvKiBBcmNoaXZlIFZpcGVyIDIxNTBMLiAgKi8KKyNkZWZpbmUgTVRfSVNBUkNISVZFXzIwNjBMCTB4MDkJLyogQXJjaGl2ZSBWaXBlciAyMDYwTC4gICovCisjZGVmaW5lIE1UX0lTQVJDSElWRVNDNDk5CTB4MEEJLyogQXJjaGl2ZSBTQy00OTkgUUlDLTM2IGNvbnRyb2xsZXIuICovCisjZGVmaW5lIE1UX0lTUUlDMDJfQUxMX0ZFQVRVUkVTCTB4MEYJLyogR2VuZXJpYyBRSUMtMDIgd2l0aCBhbGwgZmVhdHVyZXMuICovCisjZGVmaW5lIE1UX0lTV1Q1MDk5RUVOMjQJMHgxMQkvKiBXYW5ndGVrIDUwOTktZWVuMjQsIDYwTUIsIFFJQy0yNC4gKi8KKyNkZWZpbmUgTVRfSVNURUFDX01UMlNUCQkweDEyCS8qIFRlYWMgTVQtMlNUIDE1NW1iIGRyaXZlLAorCQkJCQkgICBUZWFjIERDLTEgY2FyZCAoV2FuZ3RlayB0eXBlKS4gICovCisjZGVmaW5lIE1UX0lTRVZFUkVYX0ZUNDBBCTB4MzIJLyogRXZlcmV4IEZUNDBBIChRSUMtNDApLiAgKi8KKyNkZWZpbmUgTVRfSVNERFMxCQkweDUxCS8qIEREUyBkZXZpY2Ugd2l0aG91dCBwYXJ0aXRpb25zLiAgKi8KKyNkZWZpbmUgTVRfSVNERFMyCQkweDUyCS8qIEREUyBkZXZpY2Ugd2l0aCBwYXJ0aXRpb25zLiAgKi8KKyNkZWZpbmUgTVRfSVNTQ1NJMQkJMHg3MQkvKiBHZW5lcmljIEFOU0kgU0NTSS0xIHRhcGUgdW5pdC4gICovCisjZGVmaW5lIE1UX0lTU0NTSTIJCTB4NzIJLyogR2VuZXJpYyBBTlNJIFNDU0ktMiB0YXBlIHVuaXQuICAqLworCisvKiBRSUMtNDAvODAvMzAxMC8zMDIwIGZ0YXBlIHN1cHBvcnRlZCBkcml2ZXMuCisgICAyMGJpdCB2ZW5kb3IgSUQgKyAweDgwMDAwMCAoc2VlIHZlbmRvcnMuaCBpbiBmdGFwZSBkaXN0cmlidXRpb24pLiAgKi8KKyNkZWZpbmUgTVRfSVNGVEFQRV9VTktOT1dOCTB4ODAwMDAwIC8qIG9ic29sZXRlICovCisjZGVmaW5lIE1UX0lTRlRBUEVfRkxBRwkJMHg4MDAwMDAKKworc3RydWN0IG10X3RhcGVfaW5mbworICB7CisgICAgbG9uZyBpbnQgdF90eXBlOwkJLyogRGV2aWNlIHR5cGUgaWQgKG10X3R5cGUpLiAgKi8KKyAgICBjaGFyICp0X25hbWU7CQkvKiBEZXNjcmlwdGl2ZSBuYW1lLiAgKi8KKyAgfTsKKworI2RlZmluZSBNVF9UQVBFX0lORk8gXAorICB7CQkJCQkJCQkJICAgICAgXAorCXtNVF9JU1VOS05PV04sCQkiVW5rbm93biB0eXBlIG9mIHRhcGUgZGV2aWNlIn0sCQkgICAgICBcCisJe01UX0lTUUlDMDIsCQkiR2VuZXJpYyBRSUMtMDIgdGFwZSBzdHJlYW1lciJ9LAkgICAgICBcCisJe01UX0lTV1Q1MTUwLAkJIldhbmd0ZWsgNTE1MCwgUUlDLTE1MCJ9LAkJICAgICAgXAorCXtNVF9JU0FSQ0hJVkVfNTk0NUwyLAkiQXJjaGl2ZSA1OTQ1TC0yIn0sCQkJICAgICAgXAorCXtNVF9JU0NNU0o1MDAsCQkiQ01TIEp1bWJvIDUwMCJ9LAkJCSAgICAgIFwKKwl7TVRfSVNUREMzNjEwLAkJIlRhbmRiZXJnIFREQyAzNjEwLCBRSUMtMjQifSwJCSAgICAgIFwKKwl7TVRfSVNBUkNISVZFX1ZQNjBJLAkiQXJjaGl2ZSBWUDYwaSwgUUlDLTAyIn0sCQkgICAgICBcCisJe01UX0lTQVJDSElWRV8yMTUwTCwJIkFyY2hpdmUgVmlwZXIgMjE1MEwifSwJCQkgICAgICBcCisJe01UX0lTQVJDSElWRV8yMDYwTCwJIkFyY2hpdmUgVmlwZXIgMjA2MEwifSwJCQkgICAgICBcCisJe01UX0lTQVJDSElWRVNDNDk5LAkiQXJjaGl2ZSBTQy00OTkgUUlDLTM2IGNvbnRyb2xsZXIifSwJICAgICAgXAorCXtNVF9JU1FJQzAyX0FMTF9GRUFUVVJFUywgIkdlbmVyaWMgUUlDLTAyIHRhcGUsIGFsbCBmZWF0dXJlcyJ9LAkgICAgICBcCisJe01UX0lTV1Q1MDk5RUVOMjQsCSJXYW5ndGVrIDUwOTktZWVuMjQsIDYwTUIifSwJCSAgICAgIFwKKwl7TVRfSVNURUFDX01UMlNULAkiVGVhYyBNVC0yU1QgMTU1bWIgZGF0YSBjYXNzZXR0ZSBkcml2ZSJ9LCAgICAgXAorCXtNVF9JU0VWRVJFWF9GVDQwQSwJIkV2ZXJleCBGVDQwQSwgUUlDLTQwIn0sCQkgICAgICBcCisJe01UX0lTU0NTSTEsCQkiR2VuZXJpYyBTQ1NJLTEgdGFwZSJ9LAkJCSAgICAgIFwKKwl7TVRfSVNTQ1NJMiwJCSJHZW5lcmljIFNDU0ktMiB0YXBlIn0sCQkJICAgICAgXAorCXswLCBOVUxMfQkJCQkJCQkgICAgICBcCisgIH0KKworCisvKiBTdHJ1Y3R1cmUgZm9yIE1USU9DUE9TIC0gbWFnIHRhcGUgZ2V0IHBvc2l0aW9uIGNvbW1hbmQuICAqLworCitzdHJ1Y3QgbXRwb3MKKyAgeworICAgIGxvbmcgaW50IG10X2Jsa25vOwkvKiBDdXJyZW50IGJsb2NrIG51bWJlci4gICovCisgIH07CisjZGVmaW5lIF9JT1RfbXRwb3MgLyogSHVyZCBpb2N0bCB0eXBlIGZpZWxkLiAgKi8gXAorICBfSU9UX1NJTVBMRSAobG9uZykKKworCisvKiBTdHJ1Y3R1cmUgZm9yIE1USU9DR0VUQ09ORklHL01USU9DU0VUQ09ORklHIHByaW1hcmlseSBpbnRlbmRlZAorICAgYXMgYW4gaW50ZXJpbSBzb2x1dGlvbiBmb3IgUUlDLTAyIHVudGlsIERESSBpcyBmdWxseSBpbXBsZW1lbnRlZC4gICovCitzdHJ1Y3QgbXRjb25maWdpbmZvCisgIHsKKyAgICBsb25nIGludCBtdF90eXBlOwkJLyogRHJpdmUgdHlwZS4gICovCisgICAgbG9uZyBpbnQgaWZjX3R5cGU7CQkvKiBJbnRlcmZhY2UgY2FyZCB0eXBlLiAgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCBpbnQgaXJxbnI7CS8qIElSUSBudW1iZXIgdG8gdXNlLiAgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCBpbnQgZG1hbnI7CS8qIERNQSBjaGFubmVsIHRvIHVzZS4gICovCisgICAgdW5zaWduZWQgc2hvcnQgaW50IHBvcnQ7CS8qIElPIHBvcnQgYmFzZSBhZGRyZXNzLiAgKi8KKworICAgIHVuc2lnbmVkIGxvbmcgaW50IGRlYnVnOwkvKiBEZWJ1Z2dpbmcgZmxhZ3MuICAqLworCisgICAgdW5zaWduZWQgaGF2ZV9kZW5zOjE7CisgICAgdW5zaWduZWQgaGF2ZV9ic2Y6MTsKKyAgICB1bnNpZ25lZCBoYXZlX2ZzcjoxOworICAgIHVuc2lnbmVkIGhhdmVfYnNyOjE7CisgICAgdW5zaWduZWQgaGF2ZV9lb2Q6MTsKKyAgICB1bnNpZ25lZCBoYXZlX3NlZWs6MTsKKyAgICB1bnNpZ25lZCBoYXZlX3RlbGw6MTsKKyAgICB1bnNpZ25lZCBoYXZlX3JhczE6MTsKKyAgICB1bnNpZ25lZCBoYXZlX3JhczI6MTsKKyAgICB1bnNpZ25lZCBoYXZlX3JhczM6MTsKKyAgICB1bnNpZ25lZCBoYXZlX3FmYToxOworCisgICAgdW5zaWduZWQgcGFkMTo1OworICAgIGNoYXIgcmVzZXJ2ZWRbMTBdOworICB9OworI2RlZmluZSBfSU9UX210Y29uZmlnaW5mbyAvKiBIdXJkIGlvY3RsIHR5cGUgZmllbGQuICAqLyBcCisgIF9JT1QgKF9JT1RTIChsb25nKSwgMiwgX0lPVFMgKHNob3J0KSwgMywgX0lPVFMgKGxvbmcpLCAxKSAvKiBYWFggd3JvbmcgKi8KKworCisvKiBNYWduZXRpYyB0YXBlIEkvTyBjb250cm9sIGNvbW1hbmRzLiAgKi8KKyNkZWZpbmUJTVRJT0NUT1AJX0lPVygnbScsIDEsIHN0cnVjdCBtdG9wKQkvKiBEbyBhIG1hZyB0YXBlIG9wLiAqLworI2RlZmluZQlNVElPQ0dFVAlfSU9SKCdtJywgMiwgc3RydWN0IG10Z2V0KQkvKiBHZXQgdGFwZSBzdGF0dXMuICAqLworI2RlZmluZQlNVElPQ1BPUwlfSU9SKCdtJywgMywgc3RydWN0IG10cG9zKQkvKiBHZXQgdGFwZSBwb3NpdGlvbi4qLworCisvKiBUaGUgbmV4dCB0d28gYXJlIHVzZWQgYnkgdGhlIFFJQy0wMiBkcml2ZXIgZm9yIHJ1bnRpbWUgcmVjb25maWd1cmF0aW9uLgorICAgU2VlIHRwcWljMDIuaCBmb3Igc3RydWN0IG10Y29uZmlnaW5mby4gICovCisjZGVmaW5lCU1USU9DR0VUQ09ORklHCV9JT1IoJ20nLCA0LCBzdHJ1Y3QgbXRjb25maWdpbmZvKSAvKiBHZXQgdGFwZSBjb25maWcuKi8KKyNkZWZpbmUJTVRJT0NTRVRDT05GSUcJX0lPVygnbScsIDUsIHN0cnVjdCBtdGNvbmZpZ2luZm8pIC8qIFNldCB0YXBlIGNvbmZpZy4qLworCisvKiBHZW5lcmljIE1hZyBUYXBlIChkZXZpY2UgaW5kZXBlbmRlbnQpIHN0YXR1cyBtYWNyb3MgZm9yIGV4YW1pbmluZworICAgbXRfZ3N0YXQgLS0gSFAtVVggY29tcGF0aWJsZS4KKyAgIFRoZXJlIGlzIHJvb20gZm9yIG1vcmUgZ2VuZXJpYyBzdGF0dXMgYml0cyBoZXJlLCBidXQgSSBkb24ndAorICAga25vdyB3aGljaCBvZiB0aGVtIGFyZSByZXNlcnZlZC4gQXQgbGVhc3QgdGhyZWUgb3Igc28gc2hvdWxkCisgICBiZSBhZGRlZCB0byBtYWtlIHRoaXMgcmVhbGx5IHVzZWZ1bC4gICovCisjZGVmaW5lIEdNVF9FT0YoeCkgICAgICAgICAgICAgICgoeCkgJiAweDgwMDAwMDAwKQorI2RlZmluZSBHTVRfQk9UKHgpICAgICAgICAgICAgICAoKHgpICYgMHg0MDAwMDAwMCkKKyNkZWZpbmUgR01UX0VPVCh4KSAgICAgICAgICAgICAgKCh4KSAmIDB4MjAwMDAwMDApCisjZGVmaW5lIEdNVF9TTSh4KSAgICAgICAgICAgICAgICgoeCkgJiAweDEwMDAwMDAwKSAgLyogRERTIHNldG1hcmsgKi8KKyNkZWZpbmUgR01UX0VPRCh4KSAgICAgICAgICAgICAgKCh4KSAmIDB4MDgwMDAwMDApICAvKiBERFMgRU9EICovCisjZGVmaW5lIEdNVF9XUl9QUk9UKHgpICAgICAgICAgICgoeCkgJiAweDA0MDAwMDAwKQorLyogI2RlZmluZSBHTVRfID8gCQkoKHgpICYgMHgwMjAwMDAwMCkgKi8KKyNkZWZpbmUgR01UX09OTElORSh4KSAgICAgICAgICAgKCh4KSAmIDB4MDEwMDAwMDApCisjZGVmaW5lIEdNVF9EXzYyNTAoeCkgICAgICAgICAgICgoeCkgJiAweDAwODAwMDAwKQorI2RlZmluZSBHTVRfRF8xNjAwKHgpICAgICAgICAgICAoKHgpICYgMHgwMDQwMDAwMCkKKyNkZWZpbmUgR01UX0RfODAwKHgpICAgICAgICAgICAgKCh4KSAmIDB4MDAyMDAwMDApCisvKiAjZGVmaW5lIEdNVF8gPyAJCSgoeCkgJiAweDAwMTAwMDAwKSAqLworLyogI2RlZmluZSBHTVRfID8gCQkoKHgpICYgMHgwMDA4MDAwMCkgKi8KKyNkZWZpbmUgR01UX0RSX09QRU4oeCkgICAgICAgICAgKCh4KSAmIDB4MDAwNDAwMDApICAvKiBEb29yIG9wZW4gKG5vIHRhcGUpLiAgKi8KKy8qICNkZWZpbmUgR01UXyA/IAkJKCh4KSAmIDB4MDAwMjAwMDApICovCisjZGVmaW5lIEdNVF9JTV9SRVBfRU4oeCkgICAgICAgICgoeCkgJiAweDAwMDEwMDAwKSAgLyogSW1tZWRpYXRlIHJlcG9ydCBtb2RlLiovCisvKiAxNiBnZW5lcmljIHN0YXR1cyBiaXRzIHVudXNlZC4gICovCisKKworLyogU0NTSS10YXBlIHNwZWNpZmljIGRlZmluaXRpb25zLiAgQml0ZmllbGQgc2hpZnRzIGluIHRoZSBzdGF0dXMgICovCisjZGVmaW5lIE1UX1NUX0JMS1NJWkVfU0hJRlQJMAorI2RlZmluZSBNVF9TVF9CTEtTSVpFX01BU0sJMHhmZmZmZmYKKyNkZWZpbmUgTVRfU1RfREVOU0lUWV9TSElGVAkyNAorI2RlZmluZSBNVF9TVF9ERU5TSVRZX01BU0sJMHhmZjAwMDAwMAorCisjZGVmaW5lIE1UX1NUX1NPRlRFUlJfU0hJRlQJMAorI2RlZmluZSBNVF9TVF9TT0ZURVJSX01BU0sJMHhmZmZmCisKKy8qIEJpdGZpZWxkcyBmb3IgdGhlIE1UU0VURFJWQlVGRkVSIGlvY3RsLiAgKi8KKyNkZWZpbmUgTVRfU1RfT1BUSU9OUwkJMHhmMDAwMDAwMAorI2RlZmluZSBNVF9TVF9CT09MRUFOUwkJMHgxMDAwMDAwMAorI2RlZmluZSBNVF9TVF9TRVRCT09MRUFOUwkweDMwMDAwMDAwCisjZGVmaW5lIE1UX1NUX0NMRUFSQk9PTEVBTlMJMHg0MDAwMDAwMAorI2RlZmluZSBNVF9TVF9XUklURV9USFJFU0hPTEQJMHgyMDAwMDAwMAorI2RlZmluZSBNVF9TVF9ERUZfQkxLU0laRQkweDUwMDAwMDAwCisjZGVmaW5lIE1UX1NUX0RFRl9PUFRJT05TCTB4NjAwMDAwMDAKKworI2RlZmluZSBNVF9TVF9CVUZGRVJfV1JJVEVTCTB4MQorI2RlZmluZSBNVF9TVF9BU1lOQ19XUklURVMJMHgyCisjZGVmaW5lIE1UX1NUX1JFQURfQUhFQUQJMHg0CisjZGVmaW5lIE1UX1NUX0RFQlVHR0lORwkJMHg4CisjZGVmaW5lIE1UX1NUX1RXT19GTQkJMHgxMAorI2RlZmluZSBNVF9TVF9GQVNUX01URU9NCTB4MjAKKyNkZWZpbmUgTVRfU1RfQVVUT19MT0NLCQkweDQwCisjZGVmaW5lIE1UX1NUX0RFRl9XUklURVMJMHg4MAorI2RlZmluZSBNVF9TVF9DQU5fQlNSCQkweDEwMAorI2RlZmluZSBNVF9TVF9OT19CTEtMSU1TCTB4MjAwCisjZGVmaW5lIE1UX1NUX0NBTl9QQVJUSVRJT05TICAgIDB4NDAwCisjZGVmaW5lIE1UX1NUX1NDU0kyTE9HSUNBTCAgICAgIDB4ODAwCisKKy8qIFRoZSBtb2RlIHBhcmFtZXRlcnMgdG8gYmUgY29udHJvbGxlZC4gUGFyYW1ldGVyIGNob3NlbiB3aXRoIGJpdHMgMjAtMjguICAqLworI2RlZmluZSBNVF9TVF9DTEVBUl9ERUZBVUxUCTB4ZmZmZmYKKyNkZWZpbmUgTVRfU1RfREVGX0RFTlNJVFkJKE1UX1NUX0RFRl9PUFRJT05TIHwgMHgxMDAwMDApCisjZGVmaW5lIE1UX1NUX0RFRl9DT01QUkVTU0lPTgkoTVRfU1RfREVGX09QVElPTlMgfCAweDIwMDAwMCkKKyNkZWZpbmUgTVRfU1RfREVGX0RSVkJVRkZFUgkoTVRfU1RfREVGX09QVElPTlMgfCAweDMwMDAwMCkKKworLyogVGhlIG9mZnNldCBmb3IgdGhlIGFyZ3VtZW50cyBmb3IgdGhlIHNwZWNpYWwgSFAgY2hhbmdlciBsb2FkIGNvbW1hbmQuICAqLworI2RlZmluZSBNVF9TVF9IUExPQURFUl9PRkZTRVQgMTAwMDAKKworCisvKiBTcGVjaWZ5IGRlZmF1bHQgdGFwZSBkZXZpY2UuICAqLworI2lmbmRlZiBERUZUQVBFCisjIGRlZmluZSBERUZUQVBFCSIvZGV2L3RhcGUiCisjZW5kaWYKKworI2VuZGlmIC8qIG10aW8uaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9wYXJhbS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YzExOWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3BhcmFtLmgKQEAgLTAsMCArMSw4MiBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcsMjAwMCwyMDAxLDIwMDMsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfU1lTX1BBUkFNX0gKKyNkZWZpbmUgX1NZU19QQVJBTV9ICTEKKworI2lmbmRlZiBBUkdfTUFYCisjIGRlZmluZSBfX3VuZGVmX0FSR19NQVgKKyNlbmRpZgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+CisjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KKworLyogVGhlIGtlcm5lbCBoZWFkZXJzIGRlZmluZXMgQVJHX01BWC4gIFRoZSB2YWx1ZSBpcyB3cm9uZywgdGhvdWdoLiAgKi8KKyNpZm5kZWYgX191bmRlZl9BUkdfTUFYCisjIHVuZGVmIEFSR19NQVgKKyMgdW5kZWYgX191bmRlZl9BUkdfTUFYCisjZW5kaWYKKworLyogQlNEIG5hbWVzIGZvciBzb21lIDxsaW1pdHMuaD4gdmFsdWVzLiAgKi8KKworI2RlZmluZQlOQkJZCQlDSEFSX0JJVAorI2lmbmRlZglOR1JPVVBTCisjIGRlZmluZSBOR1JPVVBTCU5HUk9VUFNfTUFYCisjZW5kaWYKKyNkZWZpbmUJTUFYU1lNTElOS1MJMjAKKyNkZWZpbmUJQ0FOQlNJWgkJTUFYX0NBTk9OCisjZGVmaW5lIE1BWFBBVEhMRU4JUEFUSF9NQVgKKy8qIFRoZSBmb2xsb3dpbmcgYXJlIG5vdCByZWFsbHkgY29ycmVjdCBidXQgaXQgaXMgYSB2YWx1ZSB3ZSB1c2VkIGZvciBhCisgICBsb25nIHRpbWUgYW5kIHdoaWNoIHNlZW1zIHRvIGJlIHVzYWJsZS4gIFBlb3BsZSBzaG91bGQgbm90IHVzZSBOT0ZJTEUKKyAgIGFuZCBOQ0FSR1MgYW55d2F5LiAgKi8KKyNkZWZpbmUgTk9GSUxFCQkyNTYKKyNkZWZpbmUJTkNBUkdTCQkxMzEwNzIKKworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8qIEJpdCBtYXAgcmVsYXRlZCBtYWNyb3MuICAqLworI2RlZmluZQlzZXRiaXQoYSxpKQkoKGEpWyhpKS9OQkJZXSB8PSAxPDwoKGkpJU5CQlkpKQorI2RlZmluZQljbHJiaXQoYSxpKQkoKGEpWyhpKS9OQkJZXSAmPSB+KDE8PCgoaSklTkJCWSkpKQorI2RlZmluZQlpc3NldChhLGkpCSgoYSlbKGkpL05CQlldICYgKDE8PCgoaSklTkJCWSkpKQorI2RlZmluZQlpc2NscihhLGkpCSgoKGEpWyhpKS9OQkJZXSAmICgxPDwoKGkpJU5CQlkpKSkgPT0gMCkKKworLyogTWFjcm9zIGZvciBjb3VudGluZyBhbmQgcm91bmRpbmcuICAqLworI2lmbmRlZiBob3dtYW55CisjIGRlZmluZSBob3dtYW55KHgsIHkpCSgoKHgpICsgKCh5KSAtIDEpKSAvICh5KSkKKyNlbmRpZgorI2lmZGVmIF9fR05VQ19fCisjIGRlZmluZSByb3VuZHVwKHgsIHkpCShfX2J1aWx0aW5fY29uc3RhbnRfcCAoeSkgJiYgcG93ZXJvZjIgKHkpCSAgICAgIFwKKwkJCSA/ICgoKHgpICsgKHkpIC0gMSkgJiB+KCh5KSAtIDEpKQkJICAgICAgXAorCQkJIDogKCgoKHgpICsgKCh5KSAtIDEpKSAvICh5KSkgKiAoeSkpKQorI2Vsc2UKKyMgZGVmaW5lIHJvdW5kdXAoeCwgeSkJKCgoKHgpICsgKCh5KSAtIDEpKSAvICh5KSkgKiAoeSkpCisjZW5kaWYKKyNkZWZpbmUgcG93ZXJvZjIoeCkJKCgoKHgpIC0gMSkgJiAoeCkpID09IDApCisKKy8qIE1hY3JvcyBmb3IgbWluL21heC4gICovCisjZGVmaW5lCU1JTihhLGIpICgoKGEpPChiKSk/KGEpOihiKSkKKyNkZWZpbmUJTUFYKGEsYikgKCgoYSk+KGIpKT8oYSk6KGIpKQorCisKKy8qIFVuaXQgb2YgYHN0X2Jsb2NrcycuICAqLworI2RlZmluZSBERVZfQlNJWkUgICAgICAgNTEyCisKKworI2VuZGlmCS8qIHN5cy9wYXJhbS5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3BjaS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjI2MjY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9wY2kuaApAQCAtMCwwICsxLDI1IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1NZU19QQ0lfSAorI2RlZmluZSBfU1lTX1BDSV9ICTEKKworLyogV2UgdXNlIHRoZSBjb25zdGFudHMgZnJvbSB0aGUga2VybmVsLiAgKi8KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2VuZGlmIC8qIHN5cy9wY2kuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9wZXJzb25hbGl0eS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9wZXJzb25hbGl0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmN2M2MWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3BlcnNvbmFsaXR5LmgKQEAgLTAsMCArMSw3NiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisvKiBUYWtlbiB2ZXJiYXRpbSBmcm9tIExpbnV4IDIuNiAoaW5jbHVkZS9saW51eC9wZXJzb25hbGl0eS5oKS4gICovCisKKyNpZm5kZWYgX1NZU19QRVJTT05BTElUWV9ICisjZGVmaW5lIF9TWVNfUEVSU09OQUxJVFlfSCAxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCisvKiBGbGFncyBmb3IgYnVnIGVtdWxhdGlvbi4KKyAgIFRoZXNlIG9jY3VweSB0aGUgdG9wIHRocmVlIGJ5dGVzLiAgKi8KK2VudW0KKyAgeworICAgIEFERFJfTk9fUkFORE9NSVpFID0gMHgwMDQwMDAwLAorICAgIE1NQVBfUEFHRV9aRVJPID0gMHgwMTAwMDAwLAorICAgIEFERFJfTElNSVRfMzJCSVQgPSAweDA4MDAwMDAsCisgICAgU0hPUlRfSU5PREUgPSAweDEwMDAwMDAsCisgICAgV0hPTEVfU0VDT05EUyA9IDB4MjAwMDAwMCwKKyAgICBTVElDS1lfVElNRU9VVFMgPSAweDQwMDAwMDAsCisgICAgQUREUl9MSU1JVF8zR0IgPSAJMHg4MDAwMDAwCisgIH07CisKKy8qIFBlcnNvbmFsaXR5IHR5cGVzLgorCisgICBUaGVzZSBnbyBpbiB0aGUgbG93IGJ5dGUuICBBdm9pZCB1c2luZyB0aGUgdG9wIGJpdCwgaXQgd2lsbAorICAgY29uZmxpY3Qgd2l0aCBlcnJvciByZXR1cm5zLiAgKi8KK2VudW0gCisgIHsKKyAgICBQRVJfTElOVVggPSAweDAwMDAsCisgICAgUEVSX0xJTlVYXzMyQklUID0gMHgwMDAwIHwgQUREUl9MSU1JVF8zMkJJVCwKKyAgICBQRVJfU1ZSNCA9IDB4MDAwMSB8IFNUSUNLWV9USU1FT1VUUyB8IE1NQVBfUEFHRV9aRVJPLAorICAgIFBFUl9TVlIzID0gMHgwMDAyIHwgU1RJQ0tZX1RJTUVPVVRTIHwgU0hPUlRfSU5PREUsCisgICAgUEVSX1NDT1NWUjMgPSAweDAwMDMgfCBTVElDS1lfVElNRU9VVFMgfCBXSE9MRV9TRUNPTkRTIHwgU0hPUlRfSU5PREUsCisgICAgUEVSX09TUjUgPSAweDAwMDMgfCBTVElDS1lfVElNRU9VVFMgfCBXSE9MRV9TRUNPTkRTLAorICAgIFBFUl9XWVNFVjM4NiA9IDB4MDAwNCB8IFNUSUNLWV9USU1FT1VUUyB8IFNIT1JUX0lOT0RFLAorICAgIFBFUl9JU0NSNCA9IDB4MDAwNSB8IFNUSUNLWV9USU1FT1VUUywKKyAgICBQRVJfQlNEID0gMHgwMDA2LAorICAgIFBFUl9TVU5PUyA9IDB4MDAwNiB8IFNUSUNLWV9USU1FT1VUUywKKyAgICBQRVJfWEVOSVggPSAweDAwMDcgfCBTVElDS1lfVElNRU9VVFMgfCBTSE9SVF9JTk9ERSwKKyAgICBQRVJfTElOVVgzMiA9IDB4MDAwOCwKKyAgICBQRVJfTElOVVgzMl8zR0IgPSAweDAwMDggfCBBRERSX0xJTUlUXzNHQiwKKyAgICBQRVJfSVJJWDMyID0gMHgwMDA5IHwgU1RJQ0tZX1RJTUVPVVRTLAkvKiBJUklYNSAzMi1iaXQgKi8KKyAgICBQRVJfSVJJWE4zMiA9IDB4MDAwYSB8IFNUSUNLWV9USU1FT1VUUywJLyogSVJJWDYgbmV3IDMyLWJpdCAqLworICAgIFBFUl9JUklYNjQgPSAweDAwMGIgfCBTVElDS1lfVElNRU9VVFMsCS8qIElSSVg2IDY0LWJpdCAqLworICAgIFBFUl9SSVNDT1MgPSAweDAwMGMsCisgICAgUEVSX1NPTEFSSVMgPSAweDAwMGQgfCBTVElDS1lfVElNRU9VVFMsCisgICAgUEVSX1VXNyA9IDB4MDAwZSB8IFNUSUNLWV9USU1FT1VUUyB8IE1NQVBfUEFHRV9aRVJPLAorICAgIFBFUl9PU0Y0ID0gMHgwMDBmLAorICAgIFBFUl9IUFVYID0gMHgwMDEwLAorICAgIFBFUl9NQVNLID0gMHgwMGZmLAorICB9OworCitfX0JFR0lOX0RFQ0xTCisKKy8qIFNldCBkaWZmZXJlbnQgQUJJcyAocGVyc29uYWxpdGllcykuICAqLworZXh0ZXJuIGludCBwZXJzb25hbGl0eSAodW5zaWduZWQgbG9uZyBpbnQgX19wZXJzb25hKSBfX1RIUk9XOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogc3lzL3BlcnNvbmFsaXR5LmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvcG9sbC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9wb2xsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA4NWI3OAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvcG9sbC5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qIENvbXBhdGliaWxpdHkgZGVmaW5pdGlvbnMgZm9yIFN5c3RlbSBWIGBwb2xsJyBpbnRlcmZhY2UuCisgICBDb3B5cmlnaHQgKEMpIDE5OTQsMTk5Ni0yMDAxLDIwMDQsMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmCV9TWVNfUE9MTF9ICisjZGVmaW5lCV9TWVNfUE9MTF9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKy8qIEdldCB0aGUgcGxhdGZvcm0gZGVwZW5kZW50IGJpdHMgb2YgYHBvbGwnLiAgKi8KKyNpbmNsdWRlIDxiaXRzL3BvbGwuaD4KKyNpZmRlZiBfX1VTRV9HTlUKKy8qIEdldCB0aGUgX19zaWdzZXRfdCBkZWZpbml0aW9uLiAgKi8KKyMgaW5jbHVkZSA8Yml0cy9zaWdzZXQuaD4KKy8qIEdldCB0aGUgdGltZXNwZWMgZGVmaW5pdGlvbi4gICovCisjIGRlZmluZSBfX25lZWRfdGltZXNwZWMKKyMgaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisKKworLyogVHlwZSB1c2VkIGZvciB0aGUgbnVtYmVyIG9mIGZpbGUgZGVzY3JpcHRvcnMuICAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBuZmRzX3Q7CisKKy8qIERhdGEgc3RydWN0dXJlIGRlc2NyaWJpbmcgYSBwb2xsaW5nIHJlcXVlc3QuICAqLworc3RydWN0IHBvbGxmZAorICB7CisgICAgaW50IGZkOwkJCS8qIEZpbGUgZGVzY3JpcHRvciB0byBwb2xsLiAgKi8KKyAgICBzaG9ydCBpbnQgZXZlbnRzOwkJLyogVHlwZXMgb2YgZXZlbnRzIHBvbGxlciBjYXJlcyBhYm91dC4gICovCisgICAgc2hvcnQgaW50IHJldmVudHM7CQkvKiBUeXBlcyBvZiBldmVudHMgdGhhdCBhY3R1YWxseSBvY2N1cnJlZC4gICovCisgIH07CisKKworX19CRUdJTl9ERUNMUworCisvKiBQb2xsIHRoZSBmaWxlIGRlc2NyaXB0b3JzIGRlc2NyaWJlZCBieSB0aGUgTkZEUyBzdHJ1Y3R1cmVzIHN0YXJ0aW5nIGF0CisgICBGRFMuICBJZiBUSU1FT1VUIGlzIG5vbnplcm8gYW5kIG5vdCAtMSwgYWxsb3cgVElNRU9VVCBtaWxsaXNlY29uZHMgZm9yCisgICBhbiBldmVudCB0byBvY2N1cjsgaWYgVElNRU9VVCBpcyAtMSwgYmxvY2sgdW50aWwgYW4gZXZlbnQgb2NjdXJzLgorICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGZpbGUgZGVzY3JpcHRvcnMgd2l0aCBldmVudHMsIHplcm8gaWYgdGltZWQgb3V0LAorICAgb3IgLTEgZm9yIGVycm9ycy4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aAorICAgX19USFJPVy4gICovCitleHRlcm4gaW50IHBvbGwgKHN0cnVjdCBwb2xsZmQgKl9fZmRzLCBuZmRzX3QgX19uZmRzLCBpbnQgX190aW1lb3V0KTsKKworI2lmZGVmIF9fVVNFX0dOVQorLyogTGlrZSBwb2xsLCBidXQgYmVmb3JlIHdhaXRpbmcgdGhlIHRocmVhZHMgc2lnbmFsIG1hc2sgaXMgcmVwbGFjZWQKKyAgIHdpdGggdGhhdCBzcGVjaWZpZWQgaW4gdGhlIGZvdXJ0aCBwYXJhbWV0ZXIuICBGb3IgYmV0dGVyIHVzYWJpbGl0eSwKKyAgIHRoZSB0aW1lb3V0IHZhbHVlIGlzIHNwZWNpZmllZCB1c2luZyBhIFRJTUVTUEVDIG9iamVjdC4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aAorICAgX19USFJPVy4gICovCitleHRlcm4gaW50IHBwb2xsIChzdHJ1Y3QgcG9sbGZkICpfX2ZkcywgbmZkc190IF9fbmZkcywKKwkJICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX190aW1lb3V0LAorCQkgIF9fY29uc3QgX19zaWdzZXRfdCAqX19zcyk7CisjZW5kaWYKKworX19FTkRfREVDTFMKKworI2VuZGlmCS8qIHN5cy9wb2xsLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvcHJjdGwuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvcHJjdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTliNzJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9wcmN0bC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5NywgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfU1lTX1BSQ1RMX0gKKyNkZWZpbmUgX1NZU19QUkNUTF9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bGludXgvcHJjdGwuaD4gIC8qICBUaGUgbWFnaWMgdmFsdWVzIGNvbWUgZnJvbSBoZXJlICAqLworCitfX0JFR0lOX0RFQ0xTCisKKy8qIENvbnRyb2wgcHJvY2VzcyBleGVjdXRpb24uICAqLworZXh0ZXJuIGludCBwcmN0bCAoaW50IF9fb3B0aW9uLCAuLi4pIF9fVEhST1c7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAgLyogc3lzL3ByY3RsLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvcHJvY2ZzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3Byb2Nmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMzczNjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3Byb2Nmcy5oCkBAIC0wLDAgKzEsMTIzIEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTksIDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1NZU19QUk9DRlNfSAorI2RlZmluZSBfU1lTX1BST0NGU19ICTEKKworLyogVGhpcyBpcyBzb21ld2hhdCBtb2RlbGxlZCBhZnRlciB0aGUgZmlsZSBvZiB0aGUgc2FtZSBuYW1lIG9uIFNWUjQKKyAgIHN5c3RlbXMuICBJdCBwcm92aWRlcyBhIGRlZmluaXRpb24gb2YgdGhlIGNvcmUgZmlsZSBmb3JtYXQgZm9yIEVMRgorICAgdXNlZCBvbiBMaW51eC4gIEl0IGRvZXNuJ3QgaGF2ZSBhbnl0aGluZyB0byBkbyB3aXRoIHRoZSAvcHJvYyBmaWxlCisgICBzeXN0ZW0sIGV2ZW4gdGhvdWdoIExpbnV4IGhhcyBvbmUuCisKKyAgIEFueXdheSwgdGhlIHdob2xlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIGZvciBHREIgYW5kIEdEQiBvbmx5LgorICAgRG9uJ3QgcmVhZCB0b28gbXVjaCBpbnRvIGl0LiAgRG9uJ3QgdXNlIGl0IGZvciBhbnl0aGluZyBvdGhlciB0aGFuCisgICBHREIgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4gICovCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3VzZXIuaD4KKworX19CRUdJTl9ERUNMUworCisvKiBUeXBlIGZvciBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3Rlci4gICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZWxmX2dyZWdfdDsKKworLyogQW5kIHRoZSB3aG9sZSBidW5jaCBvZiB0aGVtLiAgV2UgY291bGQgaGF2ZSB1c2VkIGBzdHJ1Y3QKKyAgIHVzZXJfcmVncycgZGlyZWN0bHkgaW4gdGhlIHR5cGVkZWYsIGJ1dCB0cmFkaXRpb24gc2F5cyB0aGF0CisgICB0aGUgcmVnaXN0ZXIgc2V0IGlzIGFuIGFycmF5LCB3aGljaCBkb2VzIGhhdmUgc29tZSBwZWN1bGlhcgorICAgc2VtYW50aWNzLCBzbyBsZWF2ZSBpdCB0aGF0IHdheS4gICovCisjZGVmaW5lIEVMRl9OR1JFRyAoc2l6ZW9mIChzdHJ1Y3QgdXNlcl9yZWdzKSAvIHNpemVvZihlbGZfZ3JlZ190KSkKK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisKKy8qIFJlZ2lzdGVyIHNldCBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycy4gICovCit0eXBlZGVmIHN0cnVjdCB1c2VyX2ZwcmVncyBlbGZfZnByZWdzZXRfdDsKKworLyogU2lnbmFsIGluZm8uICAqLworc3RydWN0IGVsZl9zaWdpbmZvCisgIHsKKyAgICBpbnQgc2lfc2lnbm87CQkJLyogU2lnbmFsIG51bWJlci4gICovCisgICAgaW50IHNpX2NvZGU7CQkJLyogRXh0cmEgY29kZS4gICovCisgICAgaW50IHNpX2Vycm5vOwkJCS8qIEVycm5vLiAgKi8KKyAgfTsKKworLyogRGVmaW5pdGlvbnMgdG8gZ2VuZXJhdGUgSW50ZWwgU1ZSNC1saWtlIGNvcmUgZmlsZXMuICBUaGVzZSBtb3N0bHkKKyAgIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgdGhlIFNWUjQgdHlwZXMgd2l0aCAiZWxmXyIgdGFja2VkIG9uIHRoZQorICAgZnJvbnQgdG8gcHJldmVudCBjbGFzaGVzIHdpdGggTGludXggZGVmaW5pdGlvbnMsIGFuZCB0aGUgdHlwZWRlZgorICAgZm9ybXMgaGF2ZSBiZWVuIGF2b2lkZWQuICBUaGlzIGlzIG1vc3RseSBsaWtlIHRoZSBTVlI0IHN0cnVjdHVyZSwKKyAgIGJ1dCBtb3JlIExpbnV4eSwgd2l0aCB0aGluZ3MgdGhhdCBMaW51eCBkb2VzIG5vdCBzdXBwb3J0IGFuZCB3aGljaAorICAgR0RCIGRvZXNuJ3QgcmVhbGx5IHVzZSBleGNsdWRlZC4gICovCisKK3N0cnVjdCBlbGZfcHJzdGF0dXMKKyAgeworICAgIHN0cnVjdCBlbGZfc2lnaW5mbyBwcl9pbmZvOwkJLyogSW5mbyBhc3NvY2lhdGVkIHdpdGggc2lnbmFsLiAgKi8KKyAgICBzaG9ydCBpbnQgcHJfY3Vyc2lnOwkJLyogQ3VycmVudCBzaWduYWwuICAqLworICAgIHVuc2lnbmVkIGxvbmcgaW50IHByX3NpZ3BlbmQ7CS8qIFNldCBvZiBwZW5kaW5nIHNpZ25hbHMuICAqLworICAgIHVuc2lnbmVkIGxvbmcgaW50IHByX3NpZ2hvbGQ7CS8qIFNldCBvZiBoZWxkIHNpZ25hbHMuICAqLworICAgIF9fcGlkX3QgcHJfcGlkOworICAgIF9fcGlkX3QgcHJfcHBpZDsKKyAgICBfX3BpZF90IHByX3BncnA7CisgICAgX19waWRfdCBwcl9zaWQ7CisgICAgc3RydWN0IHRpbWV2YWwgcHJfdXRpbWU7CQkvKiBVc2VyIHRpbWUuICAqLworICAgIHN0cnVjdCB0aW1ldmFsIHByX3N0aW1lOwkJLyogU3lzdGVtIHRpbWUuICAqLworICAgIHN0cnVjdCB0aW1ldmFsIHByX2N1dGltZTsJCS8qIEN1bXVsYXRpdmUgdXNlciB0aW1lLiAgKi8KKyAgICBzdHJ1Y3QgdGltZXZhbCBwcl9jc3RpbWU7CQkvKiBDdW11bGF0aXZlIHN5c3RlbSB0aW1lLiAgKi8KKyAgICBlbGZfZ3JlZ3NldF90IHByX3JlZzsJCS8qIEdQIHJlZ2lzdGVycy4gICovCisgICAgaW50IHByX2ZwdmFsaWQ7CQkJLyogVHJ1ZSBpZiBtYXRoIGNvcHJvIGJlaW5nIHVzZWQuICAqLworICB9OworCisKKyNkZWZpbmUgRUxGX1BSQVJHU1ogICAgICg4MCkgICAgLyogTnVtYmVyIG9mIGNoYXJzIGZvciBhcmdzLiAgKi8KKworc3RydWN0IGVsZl9wcnBzaW5mbworICB7CisgICAgY2hhciBwcl9zdGF0ZTsJCQkvKiBOdW1lcmljIHByb2Nlc3Mgc3RhdGUuICAqLworICAgIGNoYXIgcHJfc25hbWU7CQkJLyogQ2hhciBmb3IgcHJfc3RhdGUuICAqLworICAgIGNoYXIgcHJfem9tYjsJCQkvKiBab21iaWUuICAqLworICAgIGNoYXIgcHJfbmljZTsJCQkvKiBOaWNlIHZhbC4gICovCisgICAgdW5zaWduZWQgbG9uZyBpbnQgcHJfZmxhZzsJCS8qIEZsYWdzLiAgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCBpbnQgcHJfdWlkOworICAgIHVuc2lnbmVkIHNob3J0IGludCBwcl9naWQ7CisgICAgaW50IHByX3BpZCwgcHJfcHBpZCwgcHJfcGdycCwgcHJfc2lkOworICAgIC8qIExvdHMgbWlzc2luZyAqLworICAgIGNoYXIgcHJfZm5hbWVbMTZdOwkJCS8qIEZpbGVuYW1lIG9mIGV4ZWN1dGFibGUuICAqLworICAgIGNoYXIgcHJfcHNhcmdzW0VMRl9QUkFSR1NaXTsJLyogSW5pdGlhbCBwYXJ0IG9mIGFyZyBsaXN0LiAgKi8KKyAgfTsKKworLyogVGhlIHJlc3Qgb2YgdGhpcyBmaWxlIHByb3ZpZGVzIHRoZSB0eXBlcyBmb3IgZW11bGF0aW9uIG9mIHRoZQorICAgU29sYXJpcyA8cHJvY19zZXJ2aWNlLmg+IGludGVyZmFjZXMgdGhhdCBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkKKyAgIHVzZXJzIG9mIGxpYnRocmVhZF9kYi4gICovCisKKy8qIEFkZHJlc3Nlcy4gICovCit0eXBlZGVmIHZvaWQgKnBzYWRkcl90OworCisvKiBSZWdpc3RlciBzZXRzLiAgTGludXggaGFzIGRpZmZlcmVudCBuYW1lcy4gICovCit0eXBlZGVmIGVsZl9ncmVnc2V0X3QgcHJncmVnc2V0X3Q7Cit0eXBlZGVmIGVsZl9mcHJlZ3NldF90IHByZnByZWdzZXRfdDsKKworLyogV2UgZG9uJ3QgaGF2ZSBhbnkgZGlmZmVyZW5jZXMgYmV0d2VlbiBwcm9jZXNzZXMgYW5kIHRocmVhZHMsCisgICB0aGVyZWZvcmUgaGF2ZSBvbmx5IG9uZSBQSUQgdHlwZS4gICovCit0eXBlZGVmIF9fcGlkX3QgbHdwaWRfdDsKKworLyogUHJvY2VzcyBzdGF0dXMgYW5kIGluZm8uICBJbiB0aGUgZW5kIHdlIGRvIHByb3ZpZGUgdHlwZWRlZnMgZm9yIHRoZW0uICAqLwordHlwZWRlZiBzdHJ1Y3QgZWxmX3Byc3RhdHVzIHByc3RhdHVzX3Q7Cit0eXBlZGVmIHN0cnVjdCBlbGZfcHJwc2luZm8gcHJwc2luZm9fdDsKKworX19FTkRfREVDTFMKKworI2VuZGlmCS8qIHN5cy9wcm9jZnMuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9wcm9maWwuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvcHJvZmlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU0OGVjNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvcHJvZmlsLmgKQEAgLTAsMCArMSw2MSBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9QUk9GSUxfSAorI2RlZmluZSBfUFJPRklMX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8qIFRoaXMgaW50ZXJmYWNlIGlzIGludGVuZGVkIHRvIGZvbGxvdyB0aGUgc3Byb2ZpbCgpIHN5c3RlbSBjYWxscyBhcworICAgZGVzY3JpYmVkIGJ5IHRoZSBzcHJvZmlsKDIpIG1hbiBwYWdlIG9mIElyaXggdjYuNSwgZXhjZXB0IHRoYXQ6CisKKwktIHRoZXJlIGlzIG5vIGEgcHJpb3JpIGxpbWl0IG9uIG51bWJlciBvZiB0ZXh0IHNlY3Rpb25zCisJLSBwcl9zY2FsZSBpcyBkZWNsYXJlZCBhcyB1bnNpZ25lZCBsb25nIChpbnN0ZWFkIG9mICJ1bnNpZ25lZCBpbnQiKQorCS0gcHJfc2l6ZSBpcyBkZWNsYXJlZCBhcyBzaXplX3QgKGluc3RlYWQgb2YgInVuc2lnbmVkIGludCIpCisJLSBwcl9vZmYgaXMgZGVjbGFyZWQgYXMgdm9pZCAqIChpbnN0ZWFkIG9mICJfX3BzdW5zaWduZWRfdCIpCisJLSB0aGUgb3ZlcmZsb3cgYmluIChwcl9iYXNlPT0wLCBwcl9zY2FsZT09MikgY2FuIGFwcGVhciBhbnl3aGVyZQorCSAgaW4gdGhlIHByb2ZwIGFycmF5CisJLSBQUk9GX0ZBU1QgaGFzIG5vIGVmZmVjdCAgKi8KKworc3RydWN0IHByb2YKKyAgeworICAgIHZvaWQgKnByX2Jhc2U7CQkvKiBidWZmZXIgYmFzZSAqLworICAgIHNpemVfdCBwcl9zaXplOwkJLyogYnVmZmVyIHNpemUgKi8KKyAgICBzaXplX3QgcHJfb2ZmOwkJLyogcGMgb2Zmc2V0ICovCisgICAgdW5zaWduZWQgbG9uZyBpbnQgcHJfc2NhbGU7CS8qIHBjIHNjYWxpbmcgKGZpeGVkLXBvaW50IG51bWJlcikgKi8KKyAgfTsKKworZW51bQorICB7CisgICAgUFJPRl9VU0hPUlQJPSAwLAkJLyogdXNlIDE2LWJpdCBjb3VudGVycyAoZGVmYXVsdCkgKi8KKyAgICBQUk9GX1VJTlQJPSAxIDw8IDAsCS8qIHVzZSAzMi1iaXQgY291bnRlcnMgKi8KKyAgICBQUk9GX0ZBU1QgICA9IDEgPDwgMQkvKiBwcm9maWxlIGZhc3RlciB0aGFuIHVzdWFsICovCisgIH07CisKKworX19CRUdJTl9ERUNMUworCitleHRlcm4gaW50IHNwcm9maWwgKHN0cnVjdCBwcm9mICpfX3Byb2ZwLCBpbnQgX19wcm9mY250LAorCQkgICAgc3RydWN0IHRpbWV2YWwgKl9fdHZwLCB1bnNpZ25lZCBpbnQgX19mbGFncykgX19USFJPVzsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIHByb2ZpbC5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3B0cmFjZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9wdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODY1OGY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9wdHJhY2UuaApAQCAtMCwwICsxLDE2OCBAQAorLyogYHB0cmFjZScgZGVidWdnZXIgc3VwcG9ydCBpbnRlcmZhY2UuICBMaW51eCB2ZXJzaW9uLgorICAgQ29weXJpZ2h0IChDKSAxOTk2LTE5OTksMjAwMCwyMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1NZU19QVFJBQ0VfSAorI2RlZmluZSBfU1lTX1BUUkFDRV9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKK19fQkVHSU5fREVDTFMKKworLyogVHlwZSBvZiB0aGUgUkVRVUVTVCBhcmd1bWVudCB0byBgcHRyYWNlLicgICovCitlbnVtIF9fcHRyYWNlX3JlcXVlc3QKK3sKKyAgLyogSW5kaWNhdGUgdGhhdCB0aGUgcHJvY2VzcyBtYWtpbmcgdGhpcyByZXF1ZXN0IHNob3VsZCBiZSB0cmFjZWQuCisgICAgIEFsbCBzaWduYWxzIHJlY2VpdmVkIGJ5IHRoaXMgcHJvY2VzcyBjYW4gYmUgaW50ZXJjZXB0ZWQgYnkgaXRzCisgICAgIHBhcmVudCwgYW5kIGl0cyBwYXJlbnQgY2FuIHVzZSB0aGUgb3RoZXIgYHB0cmFjZScgcmVxdWVzdHMuICAqLworICBQVFJBQ0VfVFJBQ0VNRSA9IDAsCisjZGVmaW5lIFBUX1RSQUNFX01FIFBUUkFDRV9UUkFDRU1FCisKKyAgLyogUmV0dXJuIHRoZSB3b3JkIGluIHRoZSBwcm9jZXNzJ3MgdGV4dCBzcGFjZSBhdCBhZGRyZXNzIEFERFIuICAqLworICBQVFJBQ0VfUEVFS1RFWFQgPSAxLAorI2RlZmluZSBQVF9SRUFEX0kgUFRSQUNFX1BFRUtURVhUCisKKyAgLyogUmV0dXJuIHRoZSB3b3JkIGluIHRoZSBwcm9jZXNzJ3MgZGF0YSBzcGFjZSBhdCBhZGRyZXNzIEFERFIuICAqLworICBQVFJBQ0VfUEVFS0RBVEEgPSAyLAorI2RlZmluZSBQVF9SRUFEX0QgUFRSQUNFX1BFRUtEQVRBCisKKyAgLyogUmV0dXJuIHRoZSB3b3JkIGluIHRoZSBwcm9jZXNzJ3MgdXNlciBhcmVhIGF0IG9mZnNldCBBRERSLiAgKi8KKyAgUFRSQUNFX1BFRUtVU0VSID0gMywKKyNkZWZpbmUgUFRfUkVBRF9VIFBUUkFDRV9QRUVLVVNFUgorCisgIC8qIFdyaXRlIHRoZSB3b3JkIERBVEEgaW50byB0aGUgcHJvY2VzcydzIHRleHQgc3BhY2UgYXQgYWRkcmVzcyBBRERSLiAgKi8KKyAgUFRSQUNFX1BPS0VURVhUID0gNCwKKyNkZWZpbmUgUFRfV1JJVEVfSSBQVFJBQ0VfUE9LRVRFWFQKKworICAvKiBXcml0ZSB0aGUgd29yZCBEQVRBIGludG8gdGhlIHByb2Nlc3MncyBkYXRhIHNwYWNlIGF0IGFkZHJlc3MgQUREUi4gICovCisgIFBUUkFDRV9QT0tFREFUQSA9IDUsCisjZGVmaW5lIFBUX1dSSVRFX0QgUFRSQUNFX1BPS0VEQVRBCisKKyAgLyogV3JpdGUgdGhlIHdvcmQgREFUQSBpbnRvIHRoZSBwcm9jZXNzJ3MgdXNlciBhcmVhIGF0IG9mZnNldCBBRERSLiAgKi8KKyAgUFRSQUNFX1BPS0VVU0VSID0gNiwKKyNkZWZpbmUgUFRfV1JJVEVfVSBQVFJBQ0VfUE9LRVVTRVIKKworICAvKiBDb250aW51ZSB0aGUgcHJvY2Vzcy4gICovCisgIFBUUkFDRV9DT05UID0gNywKKyNkZWZpbmUgUFRfQ09OVElOVUUgUFRSQUNFX0NPTlQKKworICAvKiBLaWxsIHRoZSBwcm9jZXNzLiAgKi8KKyAgUFRSQUNFX0tJTEwgPSA4LAorI2RlZmluZSBQVF9LSUxMIFBUUkFDRV9LSUxMCisKKyAgLyogU2luZ2xlIHN0ZXAgdGhlIHByb2Nlc3MuCisgICAgIFRoaXMgaXMgbm90IHN1cHBvcnRlZCBvbiBhbGwgbWFjaGluZXMuICAqLworICBQVFJBQ0VfU0lOR0xFU1RFUCA9IDksCisjZGVmaW5lIFBUX1NURVAgUFRSQUNFX1NJTkdMRVNURVAKKworICAvKiBHZXQgYWxsIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgdXNlZCBieSBhIHByb2Nlc3Nlcy4KKyAgICAgVGhpcyBpcyBub3Qgc3VwcG9ydGVkIG9uIGFsbCBtYWNoaW5lcy4gICovCisgICBQVFJBQ0VfR0VUUkVHUyA9IDEyLAorI2RlZmluZSBQVF9HRVRSRUdTIFBUUkFDRV9HRVRSRUdTCisKKyAgLyogU2V0IGFsbCBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzIHVzZWQgYnkgYSBwcm9jZXNzZXMuCisgICAgIFRoaXMgaXMgbm90IHN1cHBvcnRlZCBvbiBhbGwgbWFjaGluZXMuICAqLworICAgUFRSQUNFX1NFVFJFR1MgPSAxMywKKyNkZWZpbmUgUFRfU0VUUkVHUyBQVFJBQ0VfU0VUUkVHUworCisgIC8qIEdldCBhbGwgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIHVzZWQgYnkgYSBwcm9jZXNzZXMuCisgICAgIFRoaXMgaXMgbm90IHN1cHBvcnRlZCBvbiBhbGwgbWFjaGluZXMuICAqLworICAgUFRSQUNFX0dFVEZQUkVHUyA9IDE0LAorI2RlZmluZSBQVF9HRVRGUFJFR1MgUFRSQUNFX0dFVEZQUkVHUworCisgIC8qIFNldCBhbGwgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIHVzZWQgYnkgYSBwcm9jZXNzZXMuCisgICAgIFRoaXMgaXMgbm90IHN1cHBvcnRlZCBvbiBhbGwgbWFjaGluZXMuICAqLworICAgUFRSQUNFX1NFVEZQUkVHUyA9IDE1LAorI2RlZmluZSBQVF9TRVRGUFJFR1MgUFRSQUNFX1NFVEZQUkVHUworCisgIC8qIEF0dGFjaCB0byBhIHByb2Nlc3MgdGhhdCBpcyBhbHJlYWR5IHJ1bm5pbmcuICovCisgIFBUUkFDRV9BVFRBQ0ggPSAxNiwKKyNkZWZpbmUgUFRfQVRUQUNIIFBUUkFDRV9BVFRBQ0gKKworICAvKiBEZXRhY2ggZnJvbSBhIHByb2Nlc3MgYXR0YWNoZWQgdG8gd2l0aCBQVFJBQ0VfQVRUQUNILiAgKi8KKyAgUFRSQUNFX0RFVEFDSCA9IDE3LAorI2RlZmluZSBQVF9ERVRBQ0ggUFRSQUNFX0RFVEFDSAorCisgIC8qIEdldCBhbGwgZXh0ZW5kZWQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIHVzZWQgYnkgYSBwcm9jZXNzZXMuCisgICAgIFRoaXMgaXMgbm90IHN1cHBvcnRlZCBvbiBhbGwgbWFjaGluZXMuICAqLworICAgUFRSQUNFX0dFVEZQWFJFR1MgPSAxOCwKKyNkZWZpbmUgUFRfR0VURlBYUkVHUyBQVFJBQ0VfR0VURlBYUkVHUworCisgIC8qIFNldCBhbGwgZXh0ZW5kZWQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIHVzZWQgYnkgYSBwcm9jZXNzZXMuCisgICAgIFRoaXMgaXMgbm90IHN1cHBvcnRlZCBvbiBhbGwgbWFjaGluZXMuICAqLworICAgUFRSQUNFX1NFVEZQWFJFR1MgPSAxOSwKKyNkZWZpbmUgUFRfU0VURlBYUkVHUyBQVFJBQ0VfU0VURlBYUkVHUworCisgIC8qIENvbnRpbnVlIGFuZCBzdG9wIGF0IHRoZSBuZXh0IChyZXR1cm4gZnJvbSkgc3lzY2FsbC4gICovCisgIFBUUkFDRV9TWVNDQUxMID0gMjQsCisjZGVmaW5lIFBUX1NZU0NBTEwgUFRSQUNFX1NZU0NBTEwKKworICAvKiBTZXQgcHRyYWNlIGZpbHRlciBvcHRpb25zLiAgKi8KKyAgUFRSQUNFX1NFVE9QVElPTlMgPSAweDQyMDAsCisjZGVmaW5lIFBUX1NFVE9QVElPTlMgUFRSQUNFX1NFVE9QVElPTlMKKworICAvKiBHZXQgbGFzdCBwdHJhY2UgbWVzc2FnZS4gICovCisgIFBUUkFDRV9HRVRFVkVOVE1TRyA9IDB4NDIwMSwKKyNkZWZpbmUgUFRfR0VURVZFTlRNU0cgUFRSQUNFX0dFVEVWRU5UTVNHCisKKyAgLyogR2V0IHNpZ2luZm8gZm9yIHByb2Nlc3MuICAqLworICBQVFJBQ0VfR0VUU0lHSU5GTyA9IDB4NDIwMiwKKyNkZWZpbmUgUFRfR0VUU0lHSU5GTyBQVFJBQ0VfR0VUU0lHSU5GTworCisgIC8qIFNldCBuZXcgc2lnaW5mbyBmb3IgcHJvY2Vzcy4gICovCisgIFBUUkFDRV9TRVRTSUdJTkZPID0gMHg0MjAzCisjZGVmaW5lIFBUX1NFVFNJR0lORk8gUFRSQUNFX1NFVFNJR0lORk8KK307CisKKworLyogT3B0aW9ucyBzZXQgdXNpbmcgUFRSQUNFX1NFVE9QVElPTlMuICAqLworZW51bSBfX3B0cmFjZV9zZXRvcHRpb25zIHsKKyAgUFRSQUNFX09fVFJBQ0VTWVNHT09ECT0gMHgwMDAwMDAwMSwKKyAgUFRSQUNFX09fVFJBQ0VGT1JLCT0gMHgwMDAwMDAwMiwKKyAgUFRSQUNFX09fVFJBQ0VWRk9SSyAgID0gMHgwMDAwMDAwNCwKKyAgUFRSQUNFX09fVFJBQ0VDTE9ORQk9IDB4MDAwMDAwMDgsCisgIFBUUkFDRV9PX1RSQUNFRVhFQwk9IDB4MDAwMDAwMTAsCisgIFBUUkFDRV9PX1RSQUNFVkZPUktET05FID0gMHgwMDAwMDAyMCwKKyAgUFRSQUNFX09fVFJBQ0VFWElUCT0gMHgwMDAwMDA0MCwKKyAgUFRSQUNFX09fTUFTSwkJPSAweDAwMDAwMDdmCit9OworCisvKiBXYWl0IGV4dGVuZGVkIHJlc3VsdCBjb2RlcyBmb3IgdGhlIGFib3ZlIHRyYWNlIG9wdGlvbnMuICAqLworZW51bSBfX3B0cmFjZV9ldmVudGNvZGVzIHsKKyAgUFRSQUNFX0VWRU5UX0ZPUksJPSAxLAorICBQVFJBQ0VfRVZFTlRfVkZPUksJPSAyLAorICBQVFJBQ0VfRVZFTlRfQ0xPTkUJPSAzLAorICBQVFJBQ0VfRVZFTlRfRVhFQwk9IDQsCisgIFBUUkFDRV9FVkVOVF9WRk9SS19ET05FID0gNSwKKyAgUFRSQUNFX0VWRU5UX0VYSVQJPSA2Cit9OworCisvKiBQZXJmb3JtIHByb2Nlc3MgdHJhY2luZyBmdW5jdGlvbnMuICBSRVFVRVNUIGlzIG9uZSBvZiB0aGUgdmFsdWVzCisgICBhYm92ZSwgYW5kIGRldGVybWluZXMgdGhlIGFjdGlvbiB0byBiZSB0YWtlbi4KKyAgIEZvciBhbGwgcmVxdWVzdHMgZXhjZXB0IFBUUkFDRV9UUkFDRU1FLCBQSUQgc3BlY2lmaWVzIHRoZSBwcm9jZXNzIHRvIGJlCisgICB0cmFjZWQuCisKKyAgIFBJRCBhbmQgdGhlIG90aGVyIGFyZ3VtZW50cyBkZXNjcmliZWQgYWJvdmUgZm9yIHRoZSB2YXJpb3VzIHJlcXVlc3RzIHNob3VsZAorICAgYXBwZWFyICh0aG9zZSB0aGF0IGFyZSB1c2VkIGZvciB0aGUgcGFydGljdWxhciByZXF1ZXN0KSBhczoKKyAgICAgcGlkX3QgUElELCB2b2lkICpBRERSLCBpbnQgREFUQSwgdm9pZCAqQUREUjIKKyAgIGFmdGVyIFJFUVVFU1QuICAqLworZXh0ZXJuIGxvbmcgaW50IHB0cmFjZSAoZW51bSBfX3B0cmFjZV9yZXF1ZXN0IF9fcmVxdWVzdCwgLi4uKSBfX1RIUk9XOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19QVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9xdWV1ZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9xdWV1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNjc4YmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3F1ZXVlLmgKQEAgLTAsMCArMSw2MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTEsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpcXVldWUuaAk4LjUgKEJlcmtlbGV5KSA4LzIwLzk0CisgKi8KKworI2lmbmRlZglfU1lTX1FVRVVFX0hfCisjZGVmaW5lCV9TWVNfUVVFVUVfSF8KKworLyoKKyAqIFRoaXMgZmlsZSBkZWZpbmVzIGZpdmUgdHlwZXMgb2YgZGF0YSBzdHJ1Y3R1cmVzOiBzaW5nbHktbGlua2VkIGxpc3RzLAorICogbGlzdHMsIHNpbXBsZSBxdWV1ZXMsIHRhaWwgcXVldWVzLCBhbmQgY2lyY3VsYXIgcXVldWVzLgorICoKKyAqIEEgc2luZ2x5LWxpbmtlZCBsaXN0IGlzIGhlYWRlZCBieSBhIHNpbmdsZSBmb3J3YXJkIHBvaW50ZXIuIFRoZQorICogZWxlbWVudHMgYXJlIHNpbmdseSBsaW5rZWQgZm9yIG1pbmltdW0gc3BhY2UgYW5kIHBvaW50ZXIgbWFuaXB1bGF0aW9uCisgKiBvdmVyaGVhZCBhdCB0aGUgZXhwZW5zZSBvZiBPKG4pIHJlbW92YWwgZm9yIGFyYml0cmFyeSBlbGVtZW50cy4gTmV3CisgKiBlbGVtZW50cyBjYW4gYmUgYWRkZWQgdG8gdGhlIGxpc3QgYWZ0ZXIgYW4gZXhpc3RpbmcgZWxlbWVudCBvciBhdCB0aGUKKyAqIGhlYWQgb2YgdGhlIGxpc3QuICBFbGVtZW50cyBiZWluZyByZW1vdmVkIGZyb20gdGhlIGhlYWQgb2YgdGhlIGxpc3QKKyAqIHNob3VsZCB1c2UgdGhlIGV4cGxpY2l0IG1hY3JvIGZvciB0aGlzIHB1cnBvc2UgZm9yIG9wdGltdW0KKyAqIGVmZmljaWVuY3kuIEEgc2luZ2x5LWxpbmtlZCBsaXN0IG1heSBvbmx5IGJlIHRyYXZlcnNlZCBpbiB0aGUgZm9yd2FyZAorICogZGlyZWN0aW9uLiAgU2luZ2x5LWxpbmtlZCBsaXN0cyBhcmUgaWRlYWwgZm9yIGFwcGxpY2F0aW9ucyB3aXRoIGxhcmdlCisgKiBkYXRhc2V0cyBhbmQgZmV3IG9yIG5vIHJlbW92YWxzIG9yIGZvciBpbXBsZW1lbnRpbmcgYSBMSUZPIHF1ZXVlLgorICoKKyAqIEEgbGlzdCBpcyBoZWFkZWQgYnkgYSBzaW5nbGUgZm9yd2FyZCBwb2ludGVyIChvciBhbiBhcnJheSBvZiBmb3J3YXJkCisgKiBwb2ludGVycyBmb3IgYSBoYXNoIHRhYmxlIGhlYWRlcikuIFRoZSBlbGVtZW50cyBhcmUgZG91Ymx5IGxpbmtlZAorICogc28gdGhhdCBhbiBhcmJpdHJhcnkgZWxlbWVudCBjYW4gYmUgcmVtb3ZlZCB3aXRob3V0IGEgbmVlZCB0bworICogdHJhdmVyc2UgdGhlIGxpc3QuIE5ldyBlbGVtZW50cyBjYW4gYmUgYWRkZWQgdG8gdGhlIGxpc3QgYmVmb3JlCisgKiBvciBhZnRlciBhbiBleGlzdGluZyBlbGVtZW50IG9yIGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0LiBBIGxpc3QKKyAqIG1heSBvbmx5IGJlIHRyYXZlcnNlZCBpbiB0aGUgZm9yd2FyZCBkaXJlY3Rpb24uCisgKgorICogQSBzaW1wbGUgcXVldWUgaXMgaGVhZGVkIGJ5IGEgcGFpciBvZiBwb2ludGVycywgb25lIHRoZSBoZWFkIG9mIHRoZQorICogbGlzdCBhbmQgdGhlIG90aGVyIHRvIHRoZSB0YWlsIG9mIHRoZSBsaXN0LiBUaGUgZWxlbWVudHMgYXJlIHNpbmdseQorICogbGlua2VkIHRvIHNhdmUgc3BhY2UsIHNvIGVsZW1lbnRzIGNhbiBvbmx5IGJlIHJlbW92ZWQgZnJvbSB0aGUKKyAqIGhlYWQgb2YgdGhlIGxpc3QuIE5ldyBlbGVtZW50cyBjYW4gYmUgYWRkZWQgdG8gdGhlIGxpc3QgYWZ0ZXIKKyAqIGFuIGV4aXN0aW5nIGVsZW1lbnQsIGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0LCBvciBhdCB0aGUgZW5kIG9mIHRoZQorICogbGlzdC4gQSBzaW1wbGUgcXVldWUgbWF5IG9ubHkgYmUgdHJhdmVyc2VkIGluIHRoZSBmb3J3YXJkIGRpcmVjdGlvbi4KKyAqCisgKiBBIHRhaWwgcXVldWUgaXMgaGVhZGVkIGJ5IGEgcGFpciBvZiBwb2ludGVycywgb25lIHRvIHRoZSBoZWFkIG9mIHRoZQorICogbGlzdCBhbmQgdGhlIG90aGVyIHRvIHRoZSB0YWlsIG9mIHRoZSBsaXN0LiBUaGUgZWxlbWVudHMgYXJlIGRvdWJseQorICogbGlua2VkIHNvIHRoYXQgYW4gYXJiaXRyYXJ5IGVsZW1lbnQgY2FuIGJlIHJlbW92ZWQgd2l0aG91dCBhIG5lZWQgdG8KKyAqIHRyYXZlcnNlIHRoZSBsaXN0LiBOZXcgZWxlbWVudHMgY2FuIGJlIGFkZGVkIHRvIHRoZSBsaXN0IGJlZm9yZSBvcgorICogYWZ0ZXIgYW4gZXhpc3RpbmcgZWxlbWVudCwgYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QsIG9yIGF0IHRoZSBlbmQgb2YKKyAqIHRoZSBsaXN0LiBBIHRhaWwgcXVldWUgbWF5IGJlIHRyYXZlcnNlZCBpbiBlaXRoZXIgZGlyZWN0aW9uLgorICoKKyAqIEEgY2lyY2xlIHF1ZXVlIGlzIGhlYWRlZCBieSBhIHBhaXIgb2YgcG9pbnRlcnMsIG9uZSB0byB0aGUgaGVhZCBvZiB0aGUKKyAqIGxpc3QgYW5kIHRoZSBvdGhlciB0byB0aGUgdGFpbCBvZiB0aGUgbGlzdC4gVGhlIGVsZW1lbnRzIGFyZSBkb3VibHkKKyAqIGxpbmtlZCBzbyB0aGF0IGFuIGFyYml0cmFyeSBlbGVtZW50IGNhbiBiZSByZW1vdmVkIHdpdGhvdXQgYSBuZWVkIHRvCisgKiB0cmF2ZXJzZSB0aGUgbGlzdC4gTmV3IGVsZW1lbnRzIGNhbiBiZSBhZGRlZCB0byB0aGUgbGlzdCBiZWZvcmUgb3IgYWZ0ZXIKKyAqIGFuIGV4aXN0aW5nIGVsZW1lbnQsIGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0LCBvciBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LgorICogQSBjaXJjbGUgcXVldWUgbWF5IGJlIHRyYXZlcnNlZCBpbiBlaXRoZXIgZGlyZWN0aW9uLCBidXQgaGFzIGEgbW9yZQorICogY29tcGxleCBlbmQgb2YgbGlzdCBkZXRlY3Rpb24uCisgKgorICogRm9yIGRldGFpbHMgb24gdGhlIHVzZSBvZiB0aGVzZSBtYWNyb3MsIHNlZSB0aGUgcXVldWUoMykgbWFudWFsIHBhZ2UuCisgKi8KKworLyoKKyAqIExpc3QgZGVmaW5pdGlvbnMuCisgKi8KKyNkZWZpbmUJTElTVF9IRUFEKG5hbWUsIHR5cGUpCQkJCQkJXAorc3RydWN0IG5hbWUgewkJCQkJCQkJXAorCXN0cnVjdCB0eXBlICpsaF9maXJzdDsJLyogZmlyc3QgZWxlbWVudCAqLwkJCVwKK30KKworI2RlZmluZQlMSVNUX0hFQURfSU5JVElBTElaRVIoaGVhZCkJCQkJCVwKKwl7IE5VTEwgfQorCisjZGVmaW5lCUxJU1RfRU5UUlkodHlwZSkJCQkJCQlcCitzdHJ1Y3QgewkJCQkJCQkJXAorCXN0cnVjdCB0eXBlICpsZV9uZXh0OwkvKiBuZXh0IGVsZW1lbnQgKi8JCQlcCisJc3RydWN0IHR5cGUgKipsZV9wcmV2OwkvKiBhZGRyZXNzIG9mIHByZXZpb3VzIG5leHQgZWxlbWVudCAqLwlcCit9CisKKy8qCisgKiBMaXN0IGZ1bmN0aW9ucy4KKyAqLworI2RlZmluZQlMSVNUX0lOSVQoaGVhZCkgZG8gewkJCQkJCVwKKwkoaGVhZCktPmxoX2ZpcnN0ID0gTlVMTDsJCQkJCVwKK30gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisjZGVmaW5lCUxJU1RfSU5TRVJUX0FGVEVSKGxpc3RlbG0sIGVsbSwgZmllbGQpIGRvIHsJCQlcCisJaWYgKCgoZWxtKS0+ZmllbGQubGVfbmV4dCA9IChsaXN0ZWxtKS0+ZmllbGQubGVfbmV4dCkgIT0gTlVMTCkJXAorCQkobGlzdGVsbSktPmZpZWxkLmxlX25leHQtPmZpZWxkLmxlX3ByZXYgPQkJXAorCQkgICAgJihlbG0pLT5maWVsZC5sZV9uZXh0OwkJCQlcCisJKGxpc3RlbG0pLT5maWVsZC5sZV9uZXh0ID0gKGVsbSk7CQkJCVwKKwkoZWxtKS0+ZmllbGQubGVfcHJldiA9ICYobGlzdGVsbSktPmZpZWxkLmxlX25leHQ7CQlcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZQlMSVNUX0lOU0VSVF9CRUZPUkUobGlzdGVsbSwgZWxtLCBmaWVsZCkgZG8gewkJCVwKKwkoZWxtKS0+ZmllbGQubGVfcHJldiA9IChsaXN0ZWxtKS0+ZmllbGQubGVfcHJldjsJCVwKKwkoZWxtKS0+ZmllbGQubGVfbmV4dCA9IChsaXN0ZWxtKTsJCQkJXAorCSoobGlzdGVsbSktPmZpZWxkLmxlX3ByZXYgPSAoZWxtKTsJCQkJXAorCShsaXN0ZWxtKS0+ZmllbGQubGVfcHJldiA9ICYoZWxtKS0+ZmllbGQubGVfbmV4dDsJCVwKK30gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisjZGVmaW5lCUxJU1RfSU5TRVJUX0hFQUQoaGVhZCwgZWxtLCBmaWVsZCkgZG8gewkJCQlcCisJaWYgKCgoZWxtKS0+ZmllbGQubGVfbmV4dCA9IChoZWFkKS0+bGhfZmlyc3QpICE9IE5VTEwpCQlcCisJCShoZWFkKS0+bGhfZmlyc3QtPmZpZWxkLmxlX3ByZXYgPSAmKGVsbSktPmZpZWxkLmxlX25leHQ7XAorCShoZWFkKS0+bGhfZmlyc3QgPSAoZWxtKTsJCQkJCVwKKwkoZWxtKS0+ZmllbGQubGVfcHJldiA9ICYoaGVhZCktPmxoX2ZpcnN0OwkJCVwKK30gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisjZGVmaW5lCUxJU1RfUkVNT1ZFKGVsbSwgZmllbGQpIGRvIHsJCQkJCVwKKwlpZiAoKGVsbSktPmZpZWxkLmxlX25leHQgIT0gTlVMTCkJCQkJXAorCQkoZWxtKS0+ZmllbGQubGVfbmV4dC0+ZmllbGQubGVfcHJldiA9IAkJCVwKKwkJICAgIChlbG0pLT5maWVsZC5sZV9wcmV2OwkJCQlcCisJKihlbG0pLT5maWVsZC5sZV9wcmV2ID0gKGVsbSktPmZpZWxkLmxlX25leHQ7CQkJXAorfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUJTElTVF9GT1JFQUNIKHZhciwgaGVhZCwgZmllbGQpCQkJCQlcCisJZm9yICgodmFyKSA9ICgoaGVhZCktPmxoX2ZpcnN0KTsJCQkJXAorCQkodmFyKTsJCQkJCQkJXAorCQkodmFyKSA9ICgodmFyKS0+ZmllbGQubGVfbmV4dCkpCisKKyNkZWZpbmUJTElTVF9GT1JFQUNIX1NBRkUodmFyLCBoZWFkLCBmaWVsZCwgdHZhcikJCQlcCisJZm9yICgodmFyKSA9IExJU1RfRklSU1QoKGhlYWQpKTsJCQkJXAorCSAgICAodmFyKSAmJiAoKHR2YXIpID0gTElTVF9ORVhUKCh2YXIpLCBmaWVsZCksIDEpOwkJXAorCSAgICAodmFyKSA9ICh0dmFyKSkKKworLyoKKyAqIExpc3QgYWNjZXNzIG1ldGhvZHMuCisgKi8KKyNkZWZpbmUJTElTVF9FTVBUWShoZWFkKQkJKChoZWFkKS0+bGhfZmlyc3QgPT0gTlVMTCkKKyNkZWZpbmUJTElTVF9GSVJTVChoZWFkKQkJKChoZWFkKS0+bGhfZmlyc3QpCisjZGVmaW5lCUxJU1RfTkVYVChlbG0sIGZpZWxkKQkJKChlbG0pLT5maWVsZC5sZV9uZXh0KQorCisKKy8qCisgKiBTaW5nbHktbGlua2VkIExpc3QgZGVmaW5pdGlvbnMuCisgKi8KKyNkZWZpbmUJU0xJU1RfSEVBRChuYW1lLCB0eXBlKQkJCQkJCVwKK3N0cnVjdCBuYW1lIHsJCQkJCQkJCVwKKwlzdHJ1Y3QgdHlwZSAqc2xoX2ZpcnN0OwkvKiBmaXJzdCBlbGVtZW50ICovCQkJXAorfQorCisjZGVmaW5lCVNMSVNUX0hFQURfSU5JVElBTElaRVIoaGVhZCkJCQkJCVwKKwl7IE5VTEwgfQorCisjZGVmaW5lCVNMSVNUX0VOVFJZKHR5cGUpCQkJCQkJXAorc3RydWN0IHsJCQkJCQkJCVwKKwlzdHJ1Y3QgdHlwZSAqc2xlX25leHQ7CS8qIG5leHQgZWxlbWVudCAqLwkJCVwKK30KKworLyoKKyAqIFNpbmdseS1saW5rZWQgTGlzdCBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUJU0xJU1RfSU5JVChoZWFkKSBkbyB7CQkJCQkJXAorCShoZWFkKS0+c2xoX2ZpcnN0ID0gTlVMTDsJCQkJCVwKK30gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisjZGVmaW5lCVNMSVNUX0lOU0VSVF9BRlRFUihzbGlzdGVsbSwgZWxtLCBmaWVsZCkgZG8gewkJCVwKKwkoZWxtKS0+ZmllbGQuc2xlX25leHQgPSAoc2xpc3RlbG0pLT5maWVsZC5zbGVfbmV4dDsJCVwKKwkoc2xpc3RlbG0pLT5maWVsZC5zbGVfbmV4dCA9IChlbG0pOwkJCQlcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZQlTTElTVF9JTlNFUlRfSEVBRChoZWFkLCBlbG0sIGZpZWxkKSBkbyB7CQkJXAorCShlbG0pLT5maWVsZC5zbGVfbmV4dCA9IChoZWFkKS0+c2xoX2ZpcnN0OwkJCVwKKwkoaGVhZCktPnNsaF9maXJzdCA9IChlbG0pOwkJCQkJXAorfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUJU0xJU1RfUkVNT1ZFX0hFQUQoaGVhZCwgZmllbGQpIGRvIHsJCQkJXAorCShoZWFkKS0+c2xoX2ZpcnN0ID0gKGhlYWQpLT5zbGhfZmlyc3QtPmZpZWxkLnNsZV9uZXh0OwkJXAorfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUJU0xJU1RfUkVNT1ZFKGhlYWQsIGVsbSwgdHlwZSwgZmllbGQpIGRvIHsJCQlcCisJaWYgKChoZWFkKS0+c2xoX2ZpcnN0ID09IChlbG0pKSB7CQkJCVwKKwkJU0xJU1RfUkVNT1ZFX0hFQUQoKGhlYWQpLCBmaWVsZCk7CQkJXAorCX0JCQkJCQkJCVwKKwllbHNlIHsJCQkJCQkJCVwKKwkJc3RydWN0IHR5cGUgKmN1cmVsbSA9IChoZWFkKS0+c2xoX2ZpcnN0OwkJXAorCQl3aGlsZShjdXJlbG0tPmZpZWxkLnNsZV9uZXh0ICE9IChlbG0pKQkJCVwKKwkJCWN1cmVsbSA9IGN1cmVsbS0+ZmllbGQuc2xlX25leHQ7CQlcCisJCWN1cmVsbS0+ZmllbGQuc2xlX25leHQgPQkJCQlcCisJCSAgICBjdXJlbG0tPmZpZWxkLnNsZV9uZXh0LT5maWVsZC5zbGVfbmV4dDsJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZQlTTElTVF9GT1JFQUNIKHZhciwgaGVhZCwgZmllbGQpCQkJCQlcCisJZm9yKCh2YXIpID0gKGhlYWQpLT5zbGhfZmlyc3Q7ICh2YXIpOyAodmFyKSA9ICh2YXIpLT5maWVsZC5zbGVfbmV4dCkKKworI2RlZmluZQlTTElTVF9GT1JFQUNIX1NBRkUodmFyLCBoZWFkLCBmaWVsZCwgdHZhcikJCQlcCisJZm9yICgodmFyKSA9IFNMSVNUX0ZJUlNUKChoZWFkKSk7CQkJCVwKKwkgICAgKHZhcikgJiYgKCh0dmFyKSA9IFNMSVNUX05FWFQoKHZhciksIGZpZWxkKSwgMSk7CQlcCisJICAgICh2YXIpID0gKHR2YXIpKQorCisjZGVmaW5lCVNMSVNUX0ZPUkVBQ0hfUFJFVlBUUih2YXIsIHZhcnAsIGhlYWQsIGZpZWxkKQkJCVwKKwlmb3IgKCh2YXJwKSA9ICZTTElTVF9GSVJTVCgoaGVhZCkpOwkJCQlcCisJICAgICgodmFyKSA9ICoodmFycCkpICE9IE5VTEw7CQkJCQlcCisJICAgICh2YXJwKSA9ICZTTElTVF9ORVhUKCh2YXIpLCBmaWVsZCkpCisKKy8qCisgKiBTaW5nbHktbGlua2VkIExpc3QgYWNjZXNzIG1ldGhvZHMuCisgKi8KKyNkZWZpbmUJU0xJU1RfRU1QVFkoaGVhZCkJKChoZWFkKS0+c2xoX2ZpcnN0ID09IE5VTEwpCisjZGVmaW5lCVNMSVNUX0ZJUlNUKGhlYWQpCSgoaGVhZCktPnNsaF9maXJzdCkKKyNkZWZpbmUJU0xJU1RfTkVYVChlbG0sIGZpZWxkKQkoKGVsbSktPmZpZWxkLnNsZV9uZXh0KQorCisKKy8qCisgKiBTaW5nbHktbGlua2VkIFRhaWwgcXVldWUgZGVjbGFyYXRpb25zLgorICovCisjZGVmaW5lCVNUQUlMUV9IRUFEKG5hbWUsIHR5cGUpCQkJCQlcCitzdHJ1Y3QgbmFtZSB7CQkJCQkJCQlcCisJc3RydWN0IHR5cGUgKnN0cWhfZmlyc3Q7CS8qIGZpcnN0IGVsZW1lbnQgKi8JCQlcCisJc3RydWN0IHR5cGUgKipzdHFoX2xhc3Q7CS8qIGFkZHIgb2YgbGFzdCBuZXh0IGVsZW1lbnQgKi8JCVwKK30KKworI2RlZmluZQlTVEFJTFFfSEVBRF9JTklUSUFMSVpFUihoZWFkKQkJCQkJXAorCXsgTlVMTCwgJihoZWFkKS5zdHFoX2ZpcnN0IH0KKworI2RlZmluZQlTVEFJTFFfRU5UUlkodHlwZSkJCQkJCQlcCitzdHJ1Y3QgewkJCQkJCQkJXAorCXN0cnVjdCB0eXBlICpzdHFlX25leHQ7CS8qIG5leHQgZWxlbWVudCAqLwkJCVwKK30KKworLyoKKyAqIFNpbmdseS1saW5rZWQgVGFpbCBxdWV1ZSBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUJU1RBSUxRX0lOSVQoaGVhZCkgZG8gewkJCQkJCVwKKwkoaGVhZCktPnN0cWhfZmlyc3QgPSBOVUxMOwkJCQkJXAorCShoZWFkKS0+c3RxaF9sYXN0ID0gJihoZWFkKS0+c3RxaF9maXJzdDsJCQkJXAorfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUJU1RBSUxRX0lOU0VSVF9IRUFEKGhlYWQsIGVsbSwgZmllbGQpIGRvIHsJCQlcCisJaWYgKCgoZWxtKS0+ZmllbGQuc3RxZV9uZXh0ID0gKGhlYWQpLT5zdHFoX2ZpcnN0KSA9PSBOVUxMKQlcCisJCShoZWFkKS0+c3RxaF9sYXN0ID0gJihlbG0pLT5maWVsZC5zdHFlX25leHQ7CQlcCisJKGhlYWQpLT5zdHFoX2ZpcnN0ID0gKGVsbSk7CQkJCQlcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZQlTVEFJTFFfSU5TRVJUX1RBSUwoaGVhZCwgZWxtLCBmaWVsZCkgZG8gewkJCVwKKwkoZWxtKS0+ZmllbGQuc3RxZV9uZXh0ID0gTlVMTDsJCQkJCVwKKwkqKGhlYWQpLT5zdHFoX2xhc3QgPSAoZWxtKTsJCQkJCVwKKwkoaGVhZCktPnN0cWhfbGFzdCA9ICYoZWxtKS0+ZmllbGQuc3RxZV9uZXh0OwkJCVwKK30gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisjZGVmaW5lCVNUQUlMUV9MQVNUKGhlYWQsIHR5cGUsIGZpZWxkKQkJCQkJXAorCShTVEFJTFFfRU1QVFkoKGhlYWQpKSA/CQkJCQkJXAorCQlOVUxMIDoJCQkJCQkJXAorCSAgICAgICAgKChzdHJ1Y3QgdHlwZSAqKSh2b2lkICopCQkJCVwKKwkJKChjaGFyICopKChoZWFkKS0+c3RxaF9sYXN0KSAtIF9fb2Zmc2V0b2Yoc3RydWN0IHR5cGUsIGZpZWxkKSkpKQorCisjZGVmaW5lCVNUQUlMUV9JTlNFUlRfQUZURVIoaGVhZCwgbGlzdGVsbSwgZWxtLCBmaWVsZCkgZG8gewkJXAorCWlmICgoKGVsbSktPmZpZWxkLnN0cWVfbmV4dCA9IChsaXN0ZWxtKS0+ZmllbGQuc3RxZV9uZXh0KSA9PSBOVUxMKVwKKwkJKGhlYWQpLT5zdHFoX2xhc3QgPSAmKGVsbSktPmZpZWxkLnN0cWVfbmV4dDsJCVwKKwkobGlzdGVsbSktPmZpZWxkLnN0cWVfbmV4dCA9IChlbG0pOwkJCQlcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZQlTVEFJTFFfUkVNT1ZFX0hFQUQoaGVhZCwgZmllbGQpIGRvIHsJCQkJXAorCWlmICgoKGhlYWQpLT5zdHFoX2ZpcnN0ID0gKGhlYWQpLT5zdHFoX2ZpcnN0LT5maWVsZC5zdHFlX25leHQpID09IE5VTEwpIFwKKwkJKGhlYWQpLT5zdHFoX2xhc3QgPSAmKGhlYWQpLT5zdHFoX2ZpcnN0OwkJCVwKK30gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisjZGVmaW5lCVNUQUlMUV9SRU1PVkUoaGVhZCwgZWxtLCB0eXBlLCBmaWVsZCkgZG8gewkJCVwKKwlpZiAoKGhlYWQpLT5zdHFoX2ZpcnN0ID09IChlbG0pKSB7CQkJCVwKKwkJU1RBSUxRX1JFTU9WRV9IRUFEKChoZWFkKSwgZmllbGQpOwkJCVwKKwl9IGVsc2UgewkJCQkJCQlcCisJCXN0cnVjdCB0eXBlICpjdXJlbG0gPSAoaGVhZCktPnN0cWhfZmlyc3Q7CQlcCisJCXdoaWxlIChjdXJlbG0tPmZpZWxkLnN0cWVfbmV4dCAhPSAoZWxtKSkJCQlcCisJCQljdXJlbG0gPSBjdXJlbG0tPmZpZWxkLnN0cWVfbmV4dDsJCVwKKwkJaWYgKChjdXJlbG0tPmZpZWxkLnN0cWVfbmV4dCA9CQkJCVwKKwkJCWN1cmVsbS0+ZmllbGQuc3RxZV9uZXh0LT5maWVsZC5zdHFlX25leHQpID09IE5VTEwpIFwKKwkJCSAgICAoaGVhZCktPnN0cWhfbGFzdCA9ICYoY3VyZWxtKS0+ZmllbGQuc3RxZV9uZXh0OyBcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUJU1RBSUxRX0ZPUkVBQ0godmFyLCBoZWFkLCBmaWVsZCkJCQkJXAorCWZvciAoKHZhcikgPSAoKGhlYWQpLT5zdHFoX2ZpcnN0KTsJCQkJXAorCQkodmFyKTsJCQkJCQkJXAorCQkodmFyKSA9ICgodmFyKS0+ZmllbGQuc3RxZV9uZXh0KSkKKworI2RlZmluZQlTVEFJTFFfQ09OQ0FUKGhlYWQxLCBoZWFkMikgZG8gewkJCQlcCisJaWYgKCFTVEFJTFFfRU1QVFkoKGhlYWQyKSkpIHsJCQkJCVwKKwkJKihoZWFkMSktPnN0cWhfbGFzdCA9IChoZWFkMiktPnN0cWhfZmlyc3Q7CQlcCisJCShoZWFkMSktPnN0cWhfbGFzdCA9IChoZWFkMiktPnN0cWhfbGFzdDsJCVwKKwkJU1RBSUxRX0lOSVQoKGhlYWQyKSk7CQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKy8qCisgKiBTaW5nbHktbGlua2VkIFRhaWwgcXVldWUgYWNjZXNzIG1ldGhvZHMuCisgKi8KKyNkZWZpbmUJU1RBSUxRX0VNUFRZKGhlYWQpCSgoaGVhZCktPnN0cWhfZmlyc3QgPT0gTlVMTCkKKyNkZWZpbmUJU1RBSUxRX0ZJUlNUKGhlYWQpCSgoaGVhZCktPnN0cWhfZmlyc3QpCisjZGVmaW5lCVNUQUlMUV9ORVhUKGVsbSwgZmllbGQpCSgoZWxtKS0+ZmllbGQuc3RxZV9uZXh0KQorCisjZGVmaW5lCVNUQUlMUV9GT1JFQUNIX1NBRkUodmFyLCBoZWFkLCBmaWVsZCwgdHZhcikJCQlcCisJZm9yICgodmFyKSA9IFNUQUlMUV9GSVJTVCgoaGVhZCkpOwkJCQlcCisJICAgICh2YXIpICYmICgodHZhcikgPSBTVEFJTFFfTkVYVCgodmFyKSwgZmllbGQpLCAxKTsJCVwKKwkgICAgKHZhcikgPSAodHZhcikpCisKKworLyoKKyAqIFNpbXBsZSBxdWV1ZSBkZWZpbml0aW9ucy4KKyAqLworI2RlZmluZQlTSU1QTEVRX0hFQUQobmFtZSwgdHlwZSkJCQkJCVwKK3N0cnVjdCBuYW1lIHsJCQkJCQkJCVwKKwlzdHJ1Y3QgdHlwZSAqc3FoX2ZpcnN0OwkvKiBmaXJzdCBlbGVtZW50ICovCQkJXAorCXN0cnVjdCB0eXBlICoqc3FoX2xhc3Q7CS8qIGFkZHIgb2YgbGFzdCBuZXh0IGVsZW1lbnQgKi8JCVwKK30KKworI2RlZmluZQlTSU1QTEVRX0hFQURfSU5JVElBTElaRVIoaGVhZCkJCQkJCVwKKwl7IE5VTEwsICYoaGVhZCkuc3FoX2ZpcnN0IH0KKworI2RlZmluZQlTSU1QTEVRX0VOVFJZKHR5cGUpCQkJCQkJXAorc3RydWN0IHsJCQkJCQkJCVwKKwlzdHJ1Y3QgdHlwZSAqc3FlX25leHQ7CS8qIG5leHQgZWxlbWVudCAqLwkJCVwKK30KKworLyoKKyAqIFNpbXBsZSBxdWV1ZSBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUJU0lNUExFUV9JTklUKGhlYWQpIGRvIHsJCQkJCQlcCisJKGhlYWQpLT5zcWhfZmlyc3QgPSBOVUxMOwkJCQkJXAorCShoZWFkKS0+c3FoX2xhc3QgPSAmKGhlYWQpLT5zcWhfZmlyc3Q7CQkJCVwKK30gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisjZGVmaW5lCVNJTVBMRVFfSU5TRVJUX0hFQUQoaGVhZCwgZWxtLCBmaWVsZCkgZG8gewkJCVwKKwlpZiAoKChlbG0pLT5maWVsZC5zcWVfbmV4dCA9IChoZWFkKS0+c3FoX2ZpcnN0KSA9PSBOVUxMKQlcCisJCShoZWFkKS0+c3FoX2xhc3QgPSAmKGVsbSktPmZpZWxkLnNxZV9uZXh0OwkJXAorCShoZWFkKS0+c3FoX2ZpcnN0ID0gKGVsbSk7CQkJCQlcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZQlTSU1QTEVRX0lOU0VSVF9UQUlMKGhlYWQsIGVsbSwgZmllbGQpIGRvIHsJCQlcCisJKGVsbSktPmZpZWxkLnNxZV9uZXh0ID0gTlVMTDsJCQkJCVwKKwkqKGhlYWQpLT5zcWhfbGFzdCA9IChlbG0pOwkJCQkJXAorCShoZWFkKS0+c3FoX2xhc3QgPSAmKGVsbSktPmZpZWxkLnNxZV9uZXh0OwkJCVwKK30gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisjZGVmaW5lCVNJTVBMRVFfSU5TRVJUX0FGVEVSKGhlYWQsIGxpc3RlbG0sIGVsbSwgZmllbGQpIGRvIHsJCVwKKwlpZiAoKChlbG0pLT5maWVsZC5zcWVfbmV4dCA9IChsaXN0ZWxtKS0+ZmllbGQuc3FlX25leHQpID09IE5VTEwpXAorCQkoaGVhZCktPnNxaF9sYXN0ID0gJihlbG0pLT5maWVsZC5zcWVfbmV4dDsJCVwKKwkobGlzdGVsbSktPmZpZWxkLnNxZV9uZXh0ID0gKGVsbSk7CQkJCVwKK30gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisjZGVmaW5lCVNJTVBMRVFfUkVNT1ZFX0hFQUQoaGVhZCwgZmllbGQpIGRvIHsJCQkJXAorCWlmICgoKGhlYWQpLT5zcWhfZmlyc3QgPSAoaGVhZCktPnNxaF9maXJzdC0+ZmllbGQuc3FlX25leHQpID09IE5VTEwpIFwKKwkJKGhlYWQpLT5zcWhfbGFzdCA9ICYoaGVhZCktPnNxaF9maXJzdDsJCQlcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZQlTSU1QTEVRX1JFTU9WRShoZWFkLCBlbG0sIHR5cGUsIGZpZWxkKSBkbyB7CQkJXAorCWlmICgoaGVhZCktPnNxaF9maXJzdCA9PSAoZWxtKSkgewkJCQlcCisJCVNJTVBMRVFfUkVNT1ZFX0hFQUQoKGhlYWQpLCBmaWVsZCk7CQkJXAorCX0gZWxzZSB7CQkJCQkJCVwKKwkJc3RydWN0IHR5cGUgKmN1cmVsbSA9IChoZWFkKS0+c3FoX2ZpcnN0OwkJXAorCQl3aGlsZSAoY3VyZWxtLT5maWVsZC5zcWVfbmV4dCAhPSAoZWxtKSkJCQlcCisJCQljdXJlbG0gPSBjdXJlbG0tPmZpZWxkLnNxZV9uZXh0OwkJXAorCQlpZiAoKGN1cmVsbS0+ZmllbGQuc3FlX25leHQgPQkJCQlcCisJCQljdXJlbG0tPmZpZWxkLnNxZV9uZXh0LT5maWVsZC5zcWVfbmV4dCkgPT0gTlVMTCkgXAorCQkJICAgIChoZWFkKS0+c3FoX2xhc3QgPSAmKGN1cmVsbSktPmZpZWxkLnNxZV9uZXh0OyBcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUJU0lNUExFUV9GT1JFQUNIKHZhciwgaGVhZCwgZmllbGQpCQkJCVwKKwlmb3IgKCh2YXIpID0gKChoZWFkKS0+c3FoX2ZpcnN0KTsJCQkJXAorCQkodmFyKTsJCQkJCQkJXAorCQkodmFyKSA9ICgodmFyKS0+ZmllbGQuc3FlX25leHQpKQorCisvKgorICogU2ltcGxlIHF1ZXVlIGFjY2VzcyBtZXRob2RzLgorICovCisjZGVmaW5lCVNJTVBMRVFfRU1QVFkoaGVhZCkJCSgoaGVhZCktPnNxaF9maXJzdCA9PSBOVUxMKQorI2RlZmluZQlTSU1QTEVRX0ZJUlNUKGhlYWQpCQkoKGhlYWQpLT5zcWhfZmlyc3QpCisjZGVmaW5lCVNJTVBMRVFfTkVYVChlbG0sIGZpZWxkKQkoKGVsbSktPmZpZWxkLnNxZV9uZXh0KQorCisKKy8qCisgKiBUYWlsIHF1ZXVlIGRlZmluaXRpb25zLgorICovCisjZGVmaW5lCV9UQUlMUV9IRUFEKG5hbWUsIHR5cGUsIHF1YWwpCQkJCQlcCitzdHJ1Y3QgbmFtZSB7CQkJCQkJCQlcCisJcXVhbCB0eXBlICp0cWhfZmlyc3Q7CQkvKiBmaXJzdCBlbGVtZW50ICovCQlcCisJcXVhbCB0eXBlICpxdWFsICp0cWhfbGFzdDsJLyogYWRkciBvZiBsYXN0IG5leHQgZWxlbWVudCAqLwlcCit9CisjZGVmaW5lIFRBSUxRX0hFQUQobmFtZSwgdHlwZSkJX1RBSUxRX0hFQUQobmFtZSwgc3RydWN0IHR5cGUsKQorCisjZGVmaW5lCVRBSUxRX0hFQURfSU5JVElBTElaRVIoaGVhZCkJCQkJCVwKKwl7IE5VTEwsICYoaGVhZCkudHFoX2ZpcnN0IH0KKworI2RlZmluZQlfVEFJTFFfRU5UUlkodHlwZSwgcXVhbCkJCQkJCVwKK3N0cnVjdCB7CQkJCQkJCQlcCisJcXVhbCB0eXBlICp0cWVfbmV4dDsJCS8qIG5leHQgZWxlbWVudCAqLwkJXAorCXF1YWwgdHlwZSAqcXVhbCAqdHFlX3ByZXY7CS8qIGFkZHJlc3Mgb2YgcHJldmlvdXMgbmV4dCBlbGVtZW50ICovXAorfQorI2RlZmluZSBUQUlMUV9FTlRSWSh0eXBlKQlfVEFJTFFfRU5UUlkoc3RydWN0IHR5cGUsKQorCisvKgorICogVGFpbCBxdWV1ZSBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUJVEFJTFFfSU5JVChoZWFkKSBkbyB7CQkJCQkJXAorCShoZWFkKS0+dHFoX2ZpcnN0ID0gTlVMTDsJCQkJCVwKKwkoaGVhZCktPnRxaF9sYXN0ID0gJihoZWFkKS0+dHFoX2ZpcnN0OwkJCQlcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZQlUQUlMUV9JTlNFUlRfSEVBRChoZWFkLCBlbG0sIGZpZWxkKSBkbyB7CQkJXAorCWlmICgoKGVsbSktPmZpZWxkLnRxZV9uZXh0ID0gKGhlYWQpLT50cWhfZmlyc3QpICE9IE5VTEwpCVwKKwkJKGhlYWQpLT50cWhfZmlyc3QtPmZpZWxkLnRxZV9wcmV2ID0JCQlcCisJCSAgICAmKGVsbSktPmZpZWxkLnRxZV9uZXh0OwkJCQlcCisJZWxzZQkJCQkJCQkJXAorCQkoaGVhZCktPnRxaF9sYXN0ID0gJihlbG0pLT5maWVsZC50cWVfbmV4dDsJCVwKKwkoaGVhZCktPnRxaF9maXJzdCA9IChlbG0pOwkJCQkJXAorCShlbG0pLT5maWVsZC50cWVfcHJldiA9ICYoaGVhZCktPnRxaF9maXJzdDsJCQlcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZQlUQUlMUV9JTlNFUlRfVEFJTChoZWFkLCBlbG0sIGZpZWxkKSBkbyB7CQkJXAorCShlbG0pLT5maWVsZC50cWVfbmV4dCA9IE5VTEw7CQkJCQlcCisJKGVsbSktPmZpZWxkLnRxZV9wcmV2ID0gKGhlYWQpLT50cWhfbGFzdDsJCQlcCisJKihoZWFkKS0+dHFoX2xhc3QgPSAoZWxtKTsJCQkJCVwKKwkoaGVhZCktPnRxaF9sYXN0ID0gJihlbG0pLT5maWVsZC50cWVfbmV4dDsJCQlcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZQlUQUlMUV9JTlNFUlRfQUZURVIoaGVhZCwgbGlzdGVsbSwgZWxtLCBmaWVsZCkgZG8gewkJXAorCWlmICgoKGVsbSktPmZpZWxkLnRxZV9uZXh0ID0gKGxpc3RlbG0pLT5maWVsZC50cWVfbmV4dCkgIT0gTlVMTClcCisJCShlbG0pLT5maWVsZC50cWVfbmV4dC0+ZmllbGQudHFlX3ByZXYgPSAJCVwKKwkJICAgICYoZWxtKS0+ZmllbGQudHFlX25leHQ7CQkJCVwKKwllbHNlCQkJCQkJCQlcCisJCShoZWFkKS0+dHFoX2xhc3QgPSAmKGVsbSktPmZpZWxkLnRxZV9uZXh0OwkJXAorCShsaXN0ZWxtKS0+ZmllbGQudHFlX25leHQgPSAoZWxtKTsJCQkJXAorCShlbG0pLT5maWVsZC50cWVfcHJldiA9ICYobGlzdGVsbSktPmZpZWxkLnRxZV9uZXh0OwkJXAorfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUJVEFJTFFfSU5TRVJUX0JFRk9SRShsaXN0ZWxtLCBlbG0sIGZpZWxkKSBkbyB7CQkJXAorCShlbG0pLT5maWVsZC50cWVfcHJldiA9IChsaXN0ZWxtKS0+ZmllbGQudHFlX3ByZXY7CQlcCisJKGVsbSktPmZpZWxkLnRxZV9uZXh0ID0gKGxpc3RlbG0pOwkJCQlcCisJKihsaXN0ZWxtKS0+ZmllbGQudHFlX3ByZXYgPSAoZWxtKTsJCQkJXAorCShsaXN0ZWxtKS0+ZmllbGQudHFlX3ByZXYgPSAmKGVsbSktPmZpZWxkLnRxZV9uZXh0OwkJXAorfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUJVEFJTFFfUkVNT1ZFKGhlYWQsIGVsbSwgZmllbGQpIGRvIHsJCQkJXAorCWlmICgoKGVsbSktPmZpZWxkLnRxZV9uZXh0KSAhPSBOVUxMKQkJCQlcCisJCShlbG0pLT5maWVsZC50cWVfbmV4dC0+ZmllbGQudHFlX3ByZXYgPSAJCVwKKwkJICAgIChlbG0pLT5maWVsZC50cWVfcHJldjsJCQkJXAorCWVsc2UJCQkJCQkJCVwKKwkJKGhlYWQpLT50cWhfbGFzdCA9IChlbG0pLT5maWVsZC50cWVfcHJldjsJCVwKKwkqKGVsbSktPmZpZWxkLnRxZV9wcmV2ID0gKGVsbSktPmZpZWxkLnRxZV9uZXh0OwkJCVwKK30gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisjZGVmaW5lCVRBSUxRX0ZPUkVBQ0godmFyLCBoZWFkLCBmaWVsZCkJCQkJCVwKKwlmb3IgKCh2YXIpID0gKChoZWFkKS0+dHFoX2ZpcnN0KTsJCQkJXAorCQkodmFyKTsJCQkJCQkJXAorCQkodmFyKSA9ICgodmFyKS0+ZmllbGQudHFlX25leHQpKQorCisjZGVmaW5lCVRBSUxRX0ZPUkVBQ0hfU0FGRSh2YXIsIGhlYWQsIGZpZWxkLCB0dmFyKQkJCVwKKwlmb3IgKCh2YXIpID0gVEFJTFFfRklSU1QoKGhlYWQpKTsJCQkJXAorCSAgICAodmFyKSAmJiAoKHR2YXIpID0gVEFJTFFfTkVYVCgodmFyKSwgZmllbGQpLCAxKTsJCVwKKwkgICAgKHZhcikgPSAodHZhcikpCisKKyNkZWZpbmUJVEFJTFFfRk9SRUFDSF9SRVZFUlNFKHZhciwgaGVhZCwgaGVhZG5hbWUsIGZpZWxkKQkJXAorCWZvciAoKHZhcikgPSAoKigoKHN0cnVjdCBoZWFkbmFtZSAqKSgoaGVhZCktPnRxaF9sYXN0KSktPnRxaF9sYXN0KSk7CVwKKwkJKHZhcik7CQkJCQkJCVwKKwkJKHZhcikgPSAoKigoKHN0cnVjdCBoZWFkbmFtZSAqKSgodmFyKS0+ZmllbGQudHFlX3ByZXYpKS0+dHFoX2xhc3QpKSkKKworI2RlZmluZQlUQUlMUV9GT1JFQUNIX1JFVkVSU0VfU0FGRSh2YXIsIGhlYWQsIGhlYWRuYW1lLCBmaWVsZCwgdHZhcikJXAorCWZvciAoKHZhcikgPSBUQUlMUV9MQVNUKChoZWFkKSwgaGVhZG5hbWUpOwkJCVwKKwkgICAgKHZhcikgJiYgKCh0dmFyKSA9IFRBSUxRX1BSRVYoKHZhciksIGhlYWRuYW1lLCBmaWVsZCksIDEpOwlcCisJICAgICh2YXIpID0gKHR2YXIpKQorCisKKyNkZWZpbmUJVEFJTFFfQ09OQ0FUKGhlYWQxLCBoZWFkMiwgZmllbGQpIGRvIHsJCQkJXAorCWlmICghVEFJTFFfRU1QVFkoaGVhZDIpKSB7CQkJCQlcCisJCSooaGVhZDEpLT50cWhfbGFzdCA9IChoZWFkMiktPnRxaF9maXJzdDsJCVwKKwkJKGhlYWQyKS0+dHFoX2ZpcnN0LT5maWVsZC50cWVfcHJldiA9IChoZWFkMSktPnRxaF9sYXN0OwlcCisJCShoZWFkMSktPnRxaF9sYXN0ID0gKGhlYWQyKS0+dHFoX2xhc3Q7CQkJXAorCQlUQUlMUV9JTklUKChoZWFkMikpOwkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisvKgorICogVGFpbCBxdWV1ZSBhY2Nlc3MgbWV0aG9kcy4KKyAqLworI2RlZmluZQlUQUlMUV9FTVBUWShoZWFkKQkJKChoZWFkKS0+dHFoX2ZpcnN0ID09IE5VTEwpCisjZGVmaW5lCVRBSUxRX0ZJUlNUKGhlYWQpCQkoKGhlYWQpLT50cWhfZmlyc3QpCisjZGVmaW5lCVRBSUxRX05FWFQoZWxtLCBmaWVsZCkJCSgoZWxtKS0+ZmllbGQudHFlX25leHQpCisKKyNkZWZpbmUJVEFJTFFfTEFTVChoZWFkLCBoZWFkbmFtZSkgXAorCSgqKCgoc3RydWN0IGhlYWRuYW1lICopKChoZWFkKS0+dHFoX2xhc3QpKS0+dHFoX2xhc3QpKQorI2RlZmluZQlUQUlMUV9QUkVWKGVsbSwgaGVhZG5hbWUsIGZpZWxkKSBcCisJKCooKChzdHJ1Y3QgaGVhZG5hbWUgKikoKGVsbSktPmZpZWxkLnRxZV9wcmV2KSktPnRxaF9sYXN0KSkKKworCisvKgorICogQ2lyY3VsYXIgcXVldWUgZGVmaW5pdGlvbnMuCisgKi8KKyNkZWZpbmUJQ0lSQ0xFUV9IRUFEKG5hbWUsIHR5cGUpCQkJCQlcCitzdHJ1Y3QgbmFtZSB7CQkJCQkJCQlcCisJc3RydWN0IHR5cGUgKmNxaF9maXJzdDsJCS8qIGZpcnN0IGVsZW1lbnQgKi8JCVwKKwlzdHJ1Y3QgdHlwZSAqY3FoX2xhc3Q7CQkvKiBsYXN0IGVsZW1lbnQgKi8JCVwKK30KKworI2RlZmluZQlDSVJDTEVRX0hFQURfSU5JVElBTElaRVIoaGVhZCkJCQkJCVwKKwl7ICh2b2lkICopJmhlYWQsICh2b2lkICopJmhlYWQgfQorCisjZGVmaW5lCUNJUkNMRVFfRU5UUlkodHlwZSkJCQkJCQlcCitzdHJ1Y3QgewkJCQkJCQkJXAorCXN0cnVjdCB0eXBlICpjcWVfbmV4dDsJCS8qIG5leHQgZWxlbWVudCAqLwkJXAorCXN0cnVjdCB0eXBlICpjcWVfcHJldjsJCS8qIHByZXZpb3VzIGVsZW1lbnQgKi8JCVwKK30KKworLyoKKyAqIENpcmN1bGFyIHF1ZXVlIGZ1bmN0aW9ucy4KKyAqLworI2RlZmluZQlDSVJDTEVRX0lOSVQoaGVhZCkgZG8gewkJCQkJCVwKKwkoaGVhZCktPmNxaF9maXJzdCA9ICh2b2lkICopKGhlYWQpOwkJCQlcCisJKGhlYWQpLT5jcWhfbGFzdCA9ICh2b2lkICopKGhlYWQpOwkJCQlcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZQlDSVJDTEVRX0lOU0VSVF9BRlRFUihoZWFkLCBsaXN0ZWxtLCBlbG0sIGZpZWxkKSBkbyB7CQlcCisJKGVsbSktPmZpZWxkLmNxZV9uZXh0ID0gKGxpc3RlbG0pLT5maWVsZC5jcWVfbmV4dDsJCVwKKwkoZWxtKS0+ZmllbGQuY3FlX3ByZXYgPSAobGlzdGVsbSk7CQkJCVwKKwlpZiAoKGxpc3RlbG0pLT5maWVsZC5jcWVfbmV4dCA9PSAodm9pZCAqKShoZWFkKSkJCVwKKwkJKGhlYWQpLT5jcWhfbGFzdCA9IChlbG0pOwkJCQlcCisJZWxzZQkJCQkJCQkJXAorCQkobGlzdGVsbSktPmZpZWxkLmNxZV9uZXh0LT5maWVsZC5jcWVfcHJldiA9IChlbG0pOwlcCisJKGxpc3RlbG0pLT5maWVsZC5jcWVfbmV4dCA9IChlbG0pOwkJCQlcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZQlDSVJDTEVRX0lOU0VSVF9CRUZPUkUoaGVhZCwgbGlzdGVsbSwgZWxtLCBmaWVsZCkgZG8gewkJXAorCShlbG0pLT5maWVsZC5jcWVfbmV4dCA9IChsaXN0ZWxtKTsJCQkJXAorCShlbG0pLT5maWVsZC5jcWVfcHJldiA9IChsaXN0ZWxtKS0+ZmllbGQuY3FlX3ByZXY7CQlcCisJaWYgKChsaXN0ZWxtKS0+ZmllbGQuY3FlX3ByZXYgPT0gKHZvaWQgKikoaGVhZCkpCQlcCisJCShoZWFkKS0+Y3FoX2ZpcnN0ID0gKGVsbSk7CQkJCVwKKwllbHNlCQkJCQkJCQlcCisJCShsaXN0ZWxtKS0+ZmllbGQuY3FlX3ByZXYtPmZpZWxkLmNxZV9uZXh0ID0gKGVsbSk7CVwKKwkobGlzdGVsbSktPmZpZWxkLmNxZV9wcmV2ID0gKGVsbSk7CQkJCVwKK30gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisjZGVmaW5lCUNJUkNMRVFfSU5TRVJUX0hFQUQoaGVhZCwgZWxtLCBmaWVsZCkgZG8gewkJCVwKKwkoZWxtKS0+ZmllbGQuY3FlX25leHQgPSAoaGVhZCktPmNxaF9maXJzdDsJCQlcCisJKGVsbSktPmZpZWxkLmNxZV9wcmV2ID0gKHZvaWQgKikoaGVhZCk7CQkJCVwKKwlpZiAoKGhlYWQpLT5jcWhfbGFzdCA9PSAodm9pZCAqKShoZWFkKSkJCQkJXAorCQkoaGVhZCktPmNxaF9sYXN0ID0gKGVsbSk7CQkJCVwKKwllbHNlCQkJCQkJCQlcCisJCShoZWFkKS0+Y3FoX2ZpcnN0LT5maWVsZC5jcWVfcHJldiA9IChlbG0pOwkJXAorCShoZWFkKS0+Y3FoX2ZpcnN0ID0gKGVsbSk7CQkJCQlcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZQlDSVJDTEVRX0lOU0VSVF9UQUlMKGhlYWQsIGVsbSwgZmllbGQpIGRvIHsJCQlcCisJKGVsbSktPmZpZWxkLmNxZV9uZXh0ID0gKHZvaWQgKikoaGVhZCk7CQkJCVwKKwkoZWxtKS0+ZmllbGQuY3FlX3ByZXYgPSAoaGVhZCktPmNxaF9sYXN0OwkJCVwKKwlpZiAoKGhlYWQpLT5jcWhfZmlyc3QgPT0gKHZvaWQgKikoaGVhZCkpCQkJXAorCQkoaGVhZCktPmNxaF9maXJzdCA9IChlbG0pOwkJCQlcCisJZWxzZQkJCQkJCQkJXAorCQkoaGVhZCktPmNxaF9sYXN0LT5maWVsZC5jcWVfbmV4dCA9IChlbG0pOwkJXAorCShoZWFkKS0+Y3FoX2xhc3QgPSAoZWxtKTsJCQkJCVwKK30gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisjZGVmaW5lCUNJUkNMRVFfUkVNT1ZFKGhlYWQsIGVsbSwgZmllbGQpIGRvIHsJCQkJXAorCWlmICgoZWxtKS0+ZmllbGQuY3FlX25leHQgPT0gKHZvaWQgKikoaGVhZCkpCQkJXAorCQkoaGVhZCktPmNxaF9sYXN0ID0gKGVsbSktPmZpZWxkLmNxZV9wcmV2OwkJXAorCWVsc2UJCQkJCQkJCVwKKwkJKGVsbSktPmZpZWxkLmNxZV9uZXh0LT5maWVsZC5jcWVfcHJldiA9CQkJXAorCQkgICAgKGVsbSktPmZpZWxkLmNxZV9wcmV2OwkJCQlcCisJaWYgKChlbG0pLT5maWVsZC5jcWVfcHJldiA9PSAodm9pZCAqKShoZWFkKSkJCQlcCisJCShoZWFkKS0+Y3FoX2ZpcnN0ID0gKGVsbSktPmZpZWxkLmNxZV9uZXh0OwkJXAorCWVsc2UJCQkJCQkJCVwKKwkJKGVsbSktPmZpZWxkLmNxZV9wcmV2LT5maWVsZC5jcWVfbmV4dCA9CQkJXAorCQkgICAgKGVsbSktPmZpZWxkLmNxZV9uZXh0OwkJCQlcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZQlDSVJDTEVRX0ZPUkVBQ0godmFyLCBoZWFkLCBmaWVsZCkJCQkJXAorCWZvciAoKHZhcikgPSAoKGhlYWQpLT5jcWhfZmlyc3QpOwkJCQlcCisJCSh2YXIpICE9IChjb25zdCB2b2lkICopKGhlYWQpOwkJCQlcCisJCSh2YXIpID0gKCh2YXIpLT5maWVsZC5jcWVfbmV4dCkpCisKKyNkZWZpbmUJQ0lSQ0xFUV9GT1JFQUNIX1JFVkVSU0UodmFyLCBoZWFkLCBmaWVsZCkJCQlcCisJZm9yICgodmFyKSA9ICgoaGVhZCktPmNxaF9sYXN0KTsJCQkJXAorCQkodmFyKSAhPSAoY29uc3Qgdm9pZCAqKShoZWFkKTsJCQkJXAorCQkodmFyKSA9ICgodmFyKS0+ZmllbGQuY3FlX3ByZXYpKQorCisvKgorICogQ2lyY3VsYXIgcXVldWUgYWNjZXNzIG1ldGhvZHMuCisgKi8KKyNkZWZpbmUJQ0lSQ0xFUV9FTVBUWShoZWFkKQkJKChoZWFkKS0+Y3FoX2ZpcnN0ID09ICh2b2lkICopKGhlYWQpKQorI2RlZmluZQlDSVJDTEVRX0ZJUlNUKGhlYWQpCQkoKGhlYWQpLT5jcWhfZmlyc3QpCisjZGVmaW5lCUNJUkNMRVFfTEFTVChoZWFkKQkJKChoZWFkKS0+Y3FoX2xhc3QpCisjZGVmaW5lCUNJUkNMRVFfTkVYVChlbG0sIGZpZWxkKQkoKGVsbSktPmZpZWxkLmNxZV9uZXh0KQorI2RlZmluZQlDSVJDTEVRX1BSRVYoZWxtLCBmaWVsZCkJKChlbG0pLT5maWVsZC5jcWVfcHJldikKKworI2RlZmluZSBDSVJDTEVRX0xPT1BfTkVYVChoZWFkLCBlbG0sIGZpZWxkKQkJCQlcCisJKCgoZWxtKS0+ZmllbGQuY3FlX25leHQgPT0gKHZvaWQgKikoaGVhZCkpCQkJXAorCSAgICA/ICgoaGVhZCktPmNxaF9maXJzdCkJCQkJCVwKKwkgICAgOiAoZWxtLT5maWVsZC5jcWVfbmV4dCkpCisjZGVmaW5lIENJUkNMRVFfTE9PUF9QUkVWKGhlYWQsIGVsbSwgZmllbGQpCQkJCVwKKwkoKChlbG0pLT5maWVsZC5jcWVfcHJldiA9PSAodm9pZCAqKShoZWFkKSkJCQlcCisJICAgID8gKChoZWFkKS0+Y3FoX2xhc3QpCQkJCQlcCisJICAgIDogKGVsbS0+ZmllbGQuY3FlX3ByZXYpKQorCisjZW5kaWYJLyogc3lzL3F1ZXVlLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvcXVvdGEuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvcXVvdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWEwZWMwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9xdW90YS5oCkBAIC0wLDAgKzEsMjI1IEBACisvKiBUaGlzIGp1c3QgcmVwcmVzZW50cyB0aGUgbm9uLWtlcm5lbCBwYXJ0cyBvZiA8bGludXgvcXVvdGEuaD4uCisgKgorICogaGVyZSdzIHRoZSBjb3JyZXNwb25kaW5nIGNvcHlyaWdodDoKKyAqIENvcHlyaWdodCAoYykgMTk4MiwgMTk4NiBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIFJvYmVydCBFbHogYXQgVGhlIFVuaXZlcnNpdHkgb2YgTWVsYm91cm5lLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9TWVNfUVVPVEFfSAorI2RlZmluZSBfU1lTX1FVT1RBX0ggMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworLyoKKyAqIFNlbGVjdCBiZXR3ZWVuIGRpZmZlcmVudCBpbmNvbXBhdGlibGUgcXVvdGEgdmVyc2lvbnMuCisgKiBEZWZhdWx0IHRvIHRoZSB2ZXJzaW9uIHVzZWQgYnkgTGludXgga2VybmVsIHZlcnNpb24gMi40LjIyCisgKiBvciBsYXRlci4gICovCisjaWZuZGVmIF9MSU5VWF9RVU9UQV9WRVJTSU9OCisjIGRlZmluZSBfTElOVVhfUVVPVEFfVkVSU0lPTiAyCisjZW5kaWYKKworLyoKKyAqIENvbnZlcnQgZGlza2Jsb2NrcyB0byBibG9ja3MgYW5kIHRoZSBvdGhlciB3YXkgYXJvdW5kLgorICogY3VycmVudGx5IG9ubHkgdG8gZm9vbCB0aGUgQlNEIHNvdXJjZS4gOi0pCisgKi8KKyNkZWZpbmUgZGJ0b2IobnVtKSAoKG51bSkgPDwgMTApCisjZGVmaW5lIGJ0b2RiKG51bSkgKChudW0pID4+IDEwKQorCisvKgorICogQ29udmVydCBjb3VudCBvZiBmaWxlc3lzdGVtIGJsb2NrcyB0byBkaXNrcXVvdGEgYmxvY2tzLCBtZWFudAorICogZm9yIGZpbGVzeXN0ZW1zIHdoZXJlIGlfYmxrc2l6ZSAhPSBCTE9DS19TSVpFCisgKi8KKyNkZWZpbmUgZnNfdG9fZHFfYmxvY2tzKG51bSwgYmxrc2l6ZSkgKCgobnVtKSAqIChibGtzaXplKSkgLyBCTE9DS19TSVpFKQorCisvKgorICogRGVmaW5pdGlvbnMgZm9yIGRpc2sgcXVvdGFzIGltcG9zZWQgb24gdGhlIGF2ZXJhZ2UgdXNlcgorICogKGJpZyBicm90aGVyIGZpbmFsbHkgaGl0cyBMaW51eCkuCisgKgorICogVGhlIGZvbGxvd2luZyBjb25zdGFudHMgZGVmaW5lIHRoZSBhbW91bnQgb2YgdGltZSBnaXZlbiBhIHVzZXIKKyAqIGJlZm9yZSB0aGUgc29mdCBsaW1pdHMgYXJlIHRyZWF0ZWQgYXMgaGFyZCBsaW1pdHMgKHVzdWFsbHkgcmVzdWx0aW5nCisgKiBpbiBhbiBhbGxvY2F0aW9uIGZhaWx1cmUpLiBUaGUgdGltZXIgaXMgc3RhcnRlZCB3aGVuIHRoZSB1c2VyIGNyb3NzZXMKKyAqIHRoZWlyIHNvZnQgbGltaXQsIGl0IGlzIHJlc2V0IHdoZW4gdGhleSBnbyBiZWxvdyB0aGVpciBzb2Z0IGxpbWl0LgorICovCisjZGVmaW5lIE1BWF9JUV9USU1FICA2MDQ4MDAJLyogKDcqMjQqNjAqNjApIDEgd2VlayAqLworI2RlZmluZSBNQVhfRFFfVElNRSAgNjA0ODAwCS8qICg3KjI0KjYwKjYwKSAxIHdlZWsgKi8KKworI2RlZmluZSBNQVhRVU9UQVMgMgorI2RlZmluZSBVU1JRVU9UQSAgMAkJLyogZWxlbWVudCB1c2VkIGZvciB1c2VyIHF1b3RhcyAqLworI2RlZmluZSBHUlBRVU9UQSAgMQkJLyogZWxlbWVudCB1c2VkIGZvciBncm91cCBxdW90YXMgKi8KKworLyoKKyAqIERlZmluaXRpb25zIGZvciB0aGUgZGVmYXVsdCBuYW1lcyBvZiB0aGUgcXVvdGFzIGZpbGVzLgorICovCisjZGVmaW5lIElOSVRRRk5BTUVTIHsgXAorICAgInVzZXIiLCAgICAgIC8qIFVTUlFVT1RBICovIFwKKyAgICJncm91cCIsICAgLyogR1JQUVVPVEEgKi8gXAorICAgInVuZGVmaW5lZCIsIFwKK307CisKKyNkZWZpbmUgUVVPVEFGSUxFTkFNRSAicXVvdGEiCisjZGVmaW5lIFFVT1RBR1JPVVAgInN0YWZmIgorCisjZGVmaW5lIE5SX0RRSEFTSCA0MyAgICAgICAgICAvKiBKdXN0IGFuIGFyYml0cmFyeSBudW1iZXIgYW55IHN1Z2dlc3Rpb25zID8gKi8KKyNkZWZpbmUgTlJfRFFVT1RTIDI1NiAgICAgICAgIC8qIE51bWJlciBvZiBxdW90YXMgYWN0aXZlIGF0IG9uZSB0aW1lICovCisKKy8qCisgKiBDb21tYW5kIGRlZmluaXRpb25zIGZvciB0aGUgJ3F1b3RhY3RsJyBzeXN0ZW0gY2FsbC4KKyAqIFRoZSBjb21tYW5kcyBhcmUgYnJva2VuIGludG8gYSBtYWluIGNvbW1hbmQgZGVmaW5lZCBiZWxvdworICogYW5kIGEgc3ViY29tbWFuZCB0aGF0IGlzIHVzZWQgdG8gY29udmV5IHRoZSB0eXBlIG9mCisgKiBxdW90YSB0aGF0IGlzIGJlaW5nIG1hbmlwdWxhdGVkIChzZWUgYWJvdmUpLgorICovCisjZGVmaW5lIFNVQkNNRE1BU0sgIDB4MDBmZgorI2RlZmluZSBTVUJDTURTSElGVCA4CisjZGVmaW5lIFFDTUQoY21kLCB0eXBlKSAgKCgoY21kKSA8PCBTVUJDTURTSElGVCkgfCAoKHR5cGUpICYgU1VCQ01ETUFTSykpCisKKyNpZiBfTElOVVhfUVVPVEFfVkVSU0lPTiA8IDIKKyMgZGVmaW5lIFFfUVVPVEFPTiAgMHgwMTAwCS8qIGVuYWJsZSBxdW90YXMgKi8KKyMgZGVmaW5lIFFfUVVPVEFPRkYgMHgwMjAwCS8qIGRpc2FibGUgcXVvdGFzICovCisjIGRlZmluZSBRX0dFVFFVT1RBIDB4MDMwMAkvKiBnZXQgbGltaXRzIGFuZCB1c2FnZSAqLworIyBkZWZpbmUgUV9TRVRRVU9UQSAweDA0MDAJLyogc2V0IGxpbWl0cyBhbmQgdXNhZ2UgKi8KKyMgZGVmaW5lIFFfU0VUVVNFICAgMHgwNTAwCS8qIHNldCB1c2FnZSAqLworIyBkZWZpbmUgUV9TWU5DICAgICAweDA2MDAJLyogc3luYyBkaXNrIGNvcHkgb2YgYSBmaWxlc3lzdGVtcyBxdW90YXMgKi8KKyMgZGVmaW5lIFFfU0VUUUxJTSAgMHgwNzAwCS8qIHNldCBsaW1pdHMgKi8KKyMgZGVmaW5lIFFfR0VUU1RBVFMgMHgwODAwCS8qIGdldCBjb2xsZWN0ZWQgc3RhdHMgKi8KKyMgZGVmaW5lIFFfUlNRVUFTSCAgMHgxMDAwCS8qIHNldCByb290X3NxdWFzaCBvcHRpb24gKi8KKyNlbHNlCisjIGRlZmluZSBRX1NZTkMgICAgIDB4ODAwMDAxCS8qIHN5bmMgZGlzayBjb3B5IG9mIGEgZmlsZXN5c3RlbXMgcXVvdGFzICovCisjIGRlZmluZSBRX1FVT1RBT04gIDB4ODAwMDAyCS8qIHR1cm4gcXVvdGFzIG9uICovCisjIGRlZmluZSBRX1FVT1RBT0ZGIDB4ODAwMDAzCS8qIHR1cm4gcXVvdGFzIG9mZiAqLworIyBkZWZpbmUgUV9HRVRGTVQgICAweDgwMDAwNAkvKiBnZXQgcXVvdGEgZm9ybWF0IHVzZWQgb24gZ2l2ZW4gZmlsZXN5c3RlbSAqLworIyBkZWZpbmUgUV9HRVRJTkZPICAweDgwMDAwNQkvKiBnZXQgaW5mb3JtYXRpb24gYWJvdXQgcXVvdGEgZmlsZXMgKi8KKyMgZGVmaW5lIFFfU0VUSU5GTyAgMHg4MDAwMDYJLyogc2V0IGluZm9ybWF0aW9uIGFib3V0IHF1b3RhIGZpbGVzICovCisjIGRlZmluZSBRX0dFVFFVT1RBIDB4ODAwMDA3CS8qIGdldCB1c2VyIHF1b3RhIHN0cnVjdHVyZSAqLworIyBkZWZpbmUgUV9TRVRRVU9UQSAweDgwMDAwOAkvKiBzZXQgdXNlciBxdW90YSBzdHJ1Y3R1cmUgKi8KKyNlbmRpZgorCisvKgorICogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgZGVmaW5lcyB0aGUgZm9ybWF0IG9mIHRoZSBkaXNrIHF1b3RhIGZpbGUKKyAqIChhcyBpdCBhcHBlYXJzIG9uIGRpc2spIC0gdGhlIGZpbGUgaXMgYW4gYXJyYXkgb2YgdGhlc2Ugc3RydWN0dXJlcworICogaW5kZXhlZCBieSB1c2VyIG9yIGdyb3VwIG51bWJlci4KKyAqLworI2lmIF9MSU5VWF9RVU9UQV9WRVJTSU9OIDwgMgorc3RydWN0IGRxYmxrCisgIHsKKyAgICB1X2ludDMyX3QgZHFiX2JoYXJkbGltaXQ7CS8qIGFic29sdXRlIGxpbWl0IG9uIGRpc2sgYmxrcyBhbGxvYyAqLworICAgIHVfaW50MzJfdCBkcWJfYnNvZnRsaW1pdDsJLyogcHJlZmVycmVkIGxpbWl0IG9uIGRpc2sgYmxrcyAqLworICAgIHVfaW50MzJfdCBkcWJfY3VyYmxvY2tzOwkvKiBjdXJyZW50IGJsb2NrIGNvdW50ICovCisgICAgdV9pbnQzMl90IGRxYl9paGFyZGxpbWl0OwkvKiBtYXhpbXVtICMgYWxsb2NhdGVkIGlub2RlcyAqLworICAgIHVfaW50MzJfdCBkcWJfaXNvZnRsaW1pdDsJLyogcHJlZmVycmVkIGlub2RlIGxpbWl0ICovCisgICAgdV9pbnQzMl90IGRxYl9jdXJpbm9kZXM7CS8qIGN1cnJlbnQgIyBhbGxvY2F0ZWQgaW5vZGVzICovCisgICAgdGltZV90IGRxYl9idGltZTsJCS8qIHRpbWUgbGltaXQgZm9yIGV4Y2Vzc2l2ZSBkaXNrIHVzZSAqLworICAgIHRpbWVfdCBkcWJfaXRpbWU7CQkvKiB0aW1lIGxpbWl0IGZvciBleGNlc3NpdmUgZmlsZXMgKi8KKyAgfTsKKyNlbHNlCisKKy8qIEZsYWdzIHRoYXQgaW5kaWNhdGUgd2hpY2ggZmllbGRzIGluIGRxYmxrIHN0cnVjdHVyZSBhcmUgdmFsaWQuICAqLworI2RlZmluZSBRSUZfQkxJTUlUUwkxCisjZGVmaW5lIFFJRl9TUEFDRQkyCisjZGVmaW5lIFFJRl9JTElNSVRTCTQKKyNkZWZpbmUgUUlGX0lOT0RFUwk4CisjZGVmaW5lIFFJRl9CVElNRQkxNgorI2RlZmluZSBRSUZfSVRJTUUJMzIKKyNkZWZpbmUgUUlGX0xJTUlUUwkoUUlGX0JMSU1JVFMgfCBRSUZfSUxJTUlUUykKKyNkZWZpbmUgUUlGX1VTQUdFCShRSUZfU1BBQ0UgfCBRSUZfSU5PREVTKQorI2RlZmluZSBRSUZfVElNRVMJKFFJRl9CVElNRSB8IFFJRl9JVElNRSkKKyNkZWZpbmUgUUlGX0FMTAkJKFFJRl9MSU1JVFMgfCBRSUZfVVNBR0UgfCBRSUZfVElNRVMpCisKK3N0cnVjdCBkcWJsaworICB7CisgICAgdV9pbnQ2NF90IGRxYl9iaGFyZGxpbWl0OwkvKiBhYnNvbHV0ZSBsaW1pdCBvbiBkaXNrIHF1b3RhIGJsb2NrcyBhbGxvYyAqLworICAgIHVfaW50NjRfdCBkcWJfYnNvZnRsaW1pdDsJLyogcHJlZmVycmVkIGxpbWl0IG9uIGRpc2sgcXVvdGEgYmxvY2tzICovCisgICAgdV9pbnQ2NF90IGRxYl9jdXJzcGFjZTsJLyogY3VycmVudCBxdW90YSBibG9jayBjb3VudCAqLworICAgIHVfaW50NjRfdCBkcWJfaWhhcmRsaW1pdDsJLyogbWF4aW11bSAjIGFsbG9jYXRlZCBpbm9kZXMgKi8KKyAgICB1X2ludDY0X3QgZHFiX2lzb2Z0bGltaXQ7CS8qIHByZWZlcnJlZCBpbm9kZSBsaW1pdCAqLworICAgIHVfaW50NjRfdCBkcWJfY3VyaW5vZGVzOwkvKiBjdXJyZW50ICMgYWxsb2NhdGVkIGlub2RlcyAqLworICAgIHVfaW50NjRfdCBkcWJfYnRpbWU7CS8qIHRpbWUgbGltaXQgZm9yIGV4Y2Vzc2l2ZSBkaXNrIHVzZSAqLworICAgIHVfaW50NjRfdCBkcWJfaXRpbWU7CS8qIHRpbWUgbGltaXQgZm9yIGV4Y2Vzc2l2ZSBmaWxlcyAqLworICAgIHVfaW50MzJfdCBkcWJfdmFsaWQ7CS8qIGJpdG1hc2sgb2YgUUlGXyogY29uc3RhbnRzICovCisgIH07CisjZW5kaWYKKworLyoKKyAqIFNob3J0aGFuZCBub3RhdGlvbi4KKyAqLworI2RlZmluZQlkcV9iaGFyZGxpbWl0CWRxX2RxYi5kcWJfYmhhcmRsaW1pdAorI2RlZmluZQlkcV9ic29mdGxpbWl0CWRxX2RxYi5kcWJfYnNvZnRsaW1pdAorI2lmIF9MSU5VWF9RVU9UQV9WRVJTSU9OIDwgMgorIyBkZWZpbmUgZHFfY3VyYmxvY2tzCWRxX2RxYi5kcWJfY3VyYmxvY2tzCisjZWxzZQorIyBkZWZpbmUgZHFfY3Vyc3BhY2UJZHFfZHFiLmRxYl9jdXJzcGFjZQorIyBkZWZpbmUgZHFfdmFsaWQJZHFfZHFiLmRxYl92YWxpZAorI2VuZGlmCisjZGVmaW5lCWRxX2loYXJkbGltaXQJZHFfZHFiLmRxYl9paGFyZGxpbWl0CisjZGVmaW5lCWRxX2lzb2Z0bGltaXQJZHFfZHFiLmRxYl9pc29mdGxpbWl0CisjZGVmaW5lCWRxX2N1cmlub2RlcwlkcV9kcWIuZHFiX2N1cmlub2RlcworI2RlZmluZQlkcV9idGltZQlkcV9kcWIuZHFiX2J0aW1lCisjZGVmaW5lCWRxX2l0aW1lCWRxX2RxYi5kcWJfaXRpbWUKKworI2RlZmluZSBkcW9mZihVSUQpICAgICAgKChsb2ZmX3QpKChVSUQpICogc2l6ZW9mIChzdHJ1Y3QgZHFibGspKSkKKworI2lmIF9MSU5VWF9RVU9UQV9WRVJTSU9OIDwgMgorc3RydWN0IGRxc3RhdHMKKyAgeworICAgIHVfaW50MzJfdCBsb29rdXBzOworICAgIHVfaW50MzJfdCBkcm9wczsKKyAgICB1X2ludDMyX3QgcmVhZHM7CisgICAgdV9pbnQzMl90IHdyaXRlczsKKyAgICB1X2ludDMyX3QgY2FjaGVfaGl0czsKKyAgICB1X2ludDMyX3QgcGFnZXNfYWxsb2NhdGVkOworICAgIHVfaW50MzJfdCBhbGxvY2F0ZWRfZHF1b3RzOworICAgIHVfaW50MzJfdCBmcmVlX2RxdW90czsKKyAgICB1X2ludDMyX3Qgc3luY3M7CisgIH07CisjZWxzZQorCisvKiBGbGFncyB0aGF0IGluZGljYXRlIHdoaWNoIGZpZWxkcyBpbiBkcWluZm8gc3RydWN0dXJlIGFyZSB2YWxpZC4gICovCisjIGRlZmluZSBJSUZfQkdSQUNFCTEKKyMgZGVmaW5lIElJRl9JR1JBQ0UJMgorIyBkZWZpbmUgSUlGX0ZMQUdTCTQKKyMgZGVmaW5lIElJRl9BTEwJKElJRl9CR1JBQ0UgfCBJSUZfSUdSQUNFIHwgSUlGX0ZMQUdTKQorCitzdHJ1Y3QgZHFpbmZvCisgIHsKKyAgICB1X2ludDY0X3QgZHFpX2JncmFjZTsKKyAgICB1X2ludDY0X3QgZHFpX2lncmFjZTsKKyAgICB1X2ludDMyX3QgZHFpX2ZsYWdzOworICAgIHVfaW50MzJfdCBkcWlfdmFsaWQ7CisgIH07CisjZW5kaWYKKworX19CRUdJTl9ERUNMUworCitleHRlcm4gaW50IHF1b3RhY3RsIChpbnQgX19jbWQsIGNvbnN0IGNoYXIgKl9fc3BlY2lhbCwgaW50IF9faWQsCisJCSAgICAgY2FkZHJfdCBfX2FkZHIpIF9fVEhST1c7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBzeXMvcXVvdGEuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9yYXcuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvcmF3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQyZjc4YwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvcmF3LmgKQEAgLTAsMCArMSwzOSBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9TWVNfUkFXX0gKKyNkZWZpbmUgX1NZU19SQVdfSAkxCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKworLyogVGhlIG1ham9yIGRldmljZSBudW1iZXIgZm9yIHJhdyBkZXZpY2VzLiAgKi8KKyNkZWZpbmUgUkFXX01BSk9SCTE2MgorCisvKiBgaW9jdGwnIGNvbW1hbmRzIGZvciByYXcgZGV2aWNlcy4gICovCisjZGVmaW5lIFJBV19TRVRCSU5EICAgICBfSU8oMHhhYywgMCkKKyNkZWZpbmUgUkFXX0dFVEJJTkQgICAgIF9JTygweGFjLCAxKQorCitzdHJ1Y3QgcmF3X2NvbmZpZ19yZXF1ZXN0Cit7CisgIGludCByYXdfbWlub3I7CisgIHVpbnQ2NF90IGJsb2NrX21ham9yOworICB1aW50NjRfdCBibG9ja19taW5vcjsKK307CisKKyNlbmRpZiAvKiBzeXMvcmF3LmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvcmVib290LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3JlYm9vdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNzE5YzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3JlYm9vdC5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyogVGhpcyBmaWxlIHNob3VsZCBkZWZpbmUgUkJfKiBtYWNyb3MgdG8gYmUgdXNlZCBhcyBmbGFnCisgICBiaXRzIGluIHRoZSBhcmd1bWVudCB0byB0aGUgYHJlYm9vdCcgc3lzdGVtIGNhbGwuICAqLworCisjaWZuZGVmIF9TWVNfUkVCT09UX0gKKyNkZWZpbmUgX1NZU19SRUJPT1RfSAkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCisvKiBQZXJmb3JtIGEgaGFyZCByZXNldCBub3cuICAqLworI2RlZmluZSBSQl9BVVRPQk9PVAkweDAxMjM0NTY3CisKKy8qIEhhbHQgdGhlIHN5c3RlbS4gICovCisjZGVmaW5lIFJCX0hBTFRfU1lTVEVNCTB4Y2RlZjAxMjMKKworLyogRW5hYmxlIHJlYm9vdCB1c2luZyBDdHJsLUFsdC1EZWxldGUga2V5c3Ryb2tlLiAgKi8KKyNkZWZpbmUgUkJfRU5BQkxFX0NBRAkweDg5YWJjZGVmCisKKy8qIERpc2FibGUgcmVib290IHVzaW5nIEN0cmwtQWx0LURlbGV0ZSBrZXlzdHJva2UuICAqLworI2RlZmluZSBSQl9ESVNBQkxFX0NBRAkwCisKKy8qIFN0b3Agc3lzdGVtIGFuZCBzd2l0Y2ggcG93ZXIgb2ZmIGlmIHBvc3NpYmxlLiAgKi8KKyNkZWZpbmUgUkJfUE9XRVJfT0ZGCTB4NDMyMWZlZGMKKworX19CRUdJTl9ERUNMUworCisvKiBSZWJvb3Qgb3IgaGFsdCB0aGUgc3lzdGVtLiAgKi8KK2V4dGVybiBpbnQgcmVib290IChpbnQgX19ob3d0bykgX19USFJPVzsKKworX19FTkRfREVDTFMKKworI2VuZGlmCS8qIF9TWVNfUkVCT09UX0ggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTEyNzQxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oCkBAIC0wLDAgKzEsMTAzIEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTIsOTQsMTk5Ni0yMDAwLDIwMDIsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZglfU1lTX1JFU09VUkNFX0gKKyNkZWZpbmUJX1NZU19SRVNPVVJDRV9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKy8qIEdldCB0aGUgc3lzdGVtLWRlcGVuZGVudCBkZWZpbml0aW9ucyBvZiBzdHJ1Y3R1cmVzIGFuZCBiaXQgdmFsdWVzLiAgKi8KKyNpbmNsdWRlIDxiaXRzL3Jlc291cmNlLmg+CisKKyNpZm5kZWYgX19pZF90X2RlZmluZWQKK3R5cGVkZWYgX19pZF90IGlkX3Q7CisjIGRlZmluZSBfX2lkX3RfZGVmaW5lZAorI2VuZGlmCisKK19fQkVHSU5fREVDTFMKKworLyogVGhlIFgvT3BlbiBzdGFuZGFyZCBkZWZpbmVzIHRoYXQgYWxsIHRoZSBmdW5jdGlvbnMgYmVsb3cgbXVzdCB1c2UKKyAgIGBpbnQnIGFzIHRoZSB0eXBlIGZvciB0aGUgZmlyc3QgYXJndW1lbnQuICBXaGVuIHdlIGFyZSBjb21waWxpbmcgd2l0aAorICAgR05VIGV4dGVuc2lvbnMgd2UgY2hhbmdlIHRoaXMgc2xpZ2h0bHkgdG8gcHJvdmlkZSBiZXR0ZXIgZXJyb3IKKyAgIGNoZWNraW5nLiAgKi8KKyNpZiBkZWZpbmVkIF9fVVNFX0dOVSAmJiAhZGVmaW5lZCBfX2NwbHVzcGx1cwordHlwZWRlZiBlbnVtIF9fcmxpbWl0X3Jlc291cmNlIF9fcmxpbWl0X3Jlc291cmNlX3Q7Cit0eXBlZGVmIGVudW0gX19ydXNhZ2Vfd2hvIF9fcnVzYWdlX3dob190OwordHlwZWRlZiBlbnVtIF9fcHJpb3JpdHlfd2hpY2ggX19wcmlvcml0eV93aGljaF90OworI2Vsc2UKK3R5cGVkZWYgaW50IF9fcmxpbWl0X3Jlc291cmNlX3Q7Cit0eXBlZGVmIGludCBfX3J1c2FnZV93aG9fdDsKK3R5cGVkZWYgaW50IF9fcHJpb3JpdHlfd2hpY2hfdDsKKyNlbmRpZgorCisvKiBQdXQgdGhlIHNvZnQgYW5kIGhhcmQgbGltaXRzIGZvciBSRVNPVVJDRSBpbiAqUkxJTUlUUy4KKyAgIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCAtMSBpZiBub3QgKGFuZCBzZXRzIGVycm5vKS4gICovCisjaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKK2V4dGVybiBpbnQgZ2V0cmxpbWl0IChfX3JsaW1pdF9yZXNvdXJjZV90IF9fcmVzb3VyY2UsCisJCSAgICAgIHN0cnVjdCBybGltaXQgKl9fcmxpbWl0cykgX19USFJPVzsKKyNlbHNlCisjIGlmZGVmIF9fUkVESVJFQ1RfTlRICitleHRlcm4gaW50IF9fUkVESVJFQ1RfTlRIIChnZXRybGltaXQsIChfX3JsaW1pdF9yZXNvdXJjZV90IF9fcmVzb3VyY2UsCisJCQkJICAgICAgIHN0cnVjdCBybGltaXQgKl9fcmxpbWl0cyksIGdldHJsaW1pdDY0KTsKKyMgZWxzZQorIyAgZGVmaW5lIGdldHJsaW1pdCBnZXRybGltaXQ2NAorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgX19VU0VfTEFSR0VGSUxFNjQKK2V4dGVybiBpbnQgZ2V0cmxpbWl0NjQgKF9fcmxpbWl0X3Jlc291cmNlX3QgX19yZXNvdXJjZSwKKwkJCXN0cnVjdCBybGltaXQ2NCAqX19ybGltaXRzKSBfX1RIUk9XOworI2VuZGlmCisKKy8qIFNldCB0aGUgc29mdCBhbmQgaGFyZCBsaW1pdHMgZm9yIFJFU09VUkNFIHRvICpSTElNSVRTLgorICAgT25seSB0aGUgc3VwZXItdXNlciBjYW4gaW5jcmVhc2UgaGFyZCBsaW1pdHMuCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCAtMSBpZiBub3QgKGFuZCBzZXRzIGVycm5vKS4gICovCisjaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKK2V4dGVybiBpbnQgc2V0cmxpbWl0IChfX3JsaW1pdF9yZXNvdXJjZV90IF9fcmVzb3VyY2UsCisJCSAgICAgIF9fY29uc3Qgc3RydWN0IHJsaW1pdCAqX19ybGltaXRzKSBfX1RIUk9XOworI2Vsc2UKKyMgaWZkZWYgX19SRURJUkVDVF9OVEgKK2V4dGVybiBpbnQgX19SRURJUkVDVF9OVEggKHNldHJsaW1pdCwgKF9fcmxpbWl0X3Jlc291cmNlX3QgX19yZXNvdXJjZSwKKwkJCQkgICAgICAgX19jb25zdCBzdHJ1Y3QgcmxpbWl0ICpfX3JsaW1pdHMpLAorCQkJICAgc2V0cmxpbWl0NjQpOworIyBlbHNlCisjICBkZWZpbmUgc2V0cmxpbWl0IHNldHJsaW1pdDY0CisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAorZXh0ZXJuIGludCBzZXRybGltaXQ2NCAoX19ybGltaXRfcmVzb3VyY2VfdCBfX3Jlc291cmNlLAorCQkJX19jb25zdCBzdHJ1Y3QgcmxpbWl0NjQgKl9fcmxpbWl0cykgX19USFJPVzsKKyNlbmRpZgorCisvKiBSZXR1cm4gcmVzb3VyY2UgdXNhZ2UgaW5mb3JtYXRpb24gb24gcHJvY2VzcyBpbmRpY2F0ZWQgYnkgV0hPCisgICBhbmQgcHV0IGl0IGluICpVU0FHRS4gIFJldHVybnMgMCBmb3Igc3VjY2VzcywgLTEgZm9yIGZhaWx1cmUuICAqLworZXh0ZXJuIGludCBnZXRydXNhZ2UgKF9fcnVzYWdlX3dob190IF9fd2hvLCBzdHJ1Y3QgcnVzYWdlICpfX3VzYWdlKSBfX1RIUk9XOworCisvKiBSZXR1cm4gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgb2YgYW55IHByb2Nlc3Mgc3BlY2lmaWVkIGJ5IFdISUNIIGFuZCBXSE8KKyAgIChzZWUgYWJvdmUpOyBpZiBXSE8gaXMgemVybywgdGhlIGN1cnJlbnQgcHJvY2VzcywgcHJvY2VzcyBncm91cCwgb3IgdXNlcgorICAgKGFzIHNwZWNpZmllZCBieSBXSE8pIGlzIHVzZWQuICBBIGxvd2VyIHByaW9yaXR5IG51bWJlciBtZWFucyBoaWdoZXIKKyAgIHByaW9yaXR5LiAgUHJpb3JpdGllcyByYW5nZSBmcm9tIFBSSU9fTUlOIHRvIFBSSU9fTUFYIChhYm92ZSkuICAqLworZXh0ZXJuIGludCBnZXRwcmlvcml0eSAoX19wcmlvcml0eV93aGljaF90IF9fd2hpY2gsIGlkX3QgX193aG8pIF9fVEhST1c7CisKKy8qIFNldCB0aGUgcHJpb3JpdHkgb2YgYWxsIHByb2Nlc3NlcyBzcGVjaWZpZWQgYnkgV0hJQ0ggYW5kIFdITyAoc2VlIGFib3ZlKQorICAgdG8gUFJJTy4gIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvcnMuICAqLworZXh0ZXJuIGludCBzZXRwcmlvcml0eSAoX19wcmlvcml0eV93aGljaF90IF9fd2hpY2gsIGlkX3QgX193aG8sIGludCBfX3ByaW8pCisgICAgIF9fVEhST1c7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZgkvKiBzeXMvcmVzb3VyY2UuaCAgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNDA4NDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oCkBAIC0wLDAgKzEsMTMwIEBACisvKiBgZmRfc2V0JyB0eXBlIGFuZCByZWxhdGVkIG1hY3JvcywgYW5kIGBzZWxlY3QnL2Bwc2VsZWN0JyBkZWNsYXJhdGlvbnMuCisgICBDb3B5cmlnaHQgKEMpIDE5OTYsOTcsOTgsOTksMjAwMCwwMSwwMiwyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisvKglQT1NJWCAxMDAzLjFnOiA2LjIgU2VsZWN0IGZyb20gRmlsZSBEZXNjcmlwdG9yIFNldHMgPHN5cy9zZWxlY3QuaD4gICovCisKKyNpZm5kZWYgX1NZU19TRUxFQ1RfSAorI2RlZmluZSBfU1lTX1NFTEVDVF9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKy8qIEdldCBkZWZpbml0aW9uIG9mIG5lZWRlZCBiYXNpYyB0eXBlcy4gICovCisjaW5jbHVkZSA8Yml0cy90eXBlcy5oPgorCisvKiBHZXQgX19GRF8qIGRlZmluaXRpb25zLiAgKi8KKyNpbmNsdWRlIDxiaXRzL3NlbGVjdC5oPgorCisvKiBHZXQgX19zaWdzZXRfdC4gICovCisjaW5jbHVkZSA8Yml0cy9zaWdzZXQuaD4KKworI2lmbmRlZiBfX3NpZ3NldF90X2RlZmluZWQKKyMgZGVmaW5lIF9fc2lnc2V0X3RfZGVmaW5lZAordHlwZWRlZiBfX3NpZ3NldF90IHNpZ3NldF90OworI2VuZGlmCisKKy8qIEdldCBkZWZpbml0aW9uIG9mIHRpbWVyIHNwZWNpZmljYXRpb24gc3RydWN0dXJlcy4gICovCisjZGVmaW5lIF9fbmVlZF90aW1lX3QKKyNkZWZpbmUgX19uZWVkX3RpbWVzcGVjCisjaW5jbHVkZSA8dGltZS5oPgorI2RlZmluZSBfX25lZWRfdGltZXZhbAorI2luY2x1ZGUgPGJpdHMvdGltZS5oPgorCisjaWZuZGVmIF9fc3VzZWNvbmRzX3RfZGVmaW5lZAordHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OworIyBkZWZpbmUgX19zdXNlY29uZHNfdF9kZWZpbmVkCisjZW5kaWYKKworCisvKiBUaGUgZmRfc2V0IG1lbWJlciBpcyByZXF1aXJlZCB0byBiZSBhbiBhcnJheSBvZiBsb25ncy4gICovCit0eXBlZGVmIGxvbmcgaW50IF9fZmRfbWFzazsKKworLyogU29tZSB2ZXJzaW9ucyBvZiA8bGludXgvcG9zaXhfdHlwZXMuaD4gZGVmaW5lIHRoZXNlIG1hY3Jvcy4gICovCisjdW5kZWYJX19ORkRCSVRTCisjdW5kZWYJX19GREVMVAorI3VuZGVmCV9fRkRNQVNLCisvKiBJdCdzIGVhc2llciB0byBhc3N1bWUgOC1iaXQgYnl0ZXMgdGhhbiB0byBnZXQgQ0hBUl9CSVQuICAqLworI2RlZmluZSBfX05GREJJVFMJKDggKiBzaXplb2YgKF9fZmRfbWFzaykpCisjZGVmaW5lCV9fRkRFTFQoZCkJKChkKSAvIF9fTkZEQklUUykKKyNkZWZpbmUJX19GRE1BU0soZCkJKChfX2ZkX21hc2spIDEgPDwgKChkKSAlIF9fTkZEQklUUykpCisKKy8qIGZkX3NldCBmb3Igc2VsZWN0IGFuZCBwc2VsZWN0LiAgKi8KK3R5cGVkZWYgc3RydWN0CisgIHsKKyAgICAvKiBYUEc0LjIgcmVxdWlyZXMgdGhpcyBtZW1iZXIgbmFtZS4gIE90aGVyd2lzZSBhdm9pZCB0aGUgbmFtZQorICAgICAgIGZyb20gdGhlIGdsb2JhbCBuYW1lc3BhY2UuICAqLworI2lmZGVmIF9fVVNFX1hPUEVOCisgICAgX19mZF9tYXNrIGZkc19iaXRzW19fRkRfU0VUU0laRSAvIF9fTkZEQklUU107CisjIGRlZmluZSBfX0ZEU19CSVRTKHNldCkgKChzZXQpLT5mZHNfYml0cykKKyNlbHNlCisgICAgX19mZF9tYXNrIF9fZmRzX2JpdHNbX19GRF9TRVRTSVpFIC8gX19ORkRCSVRTXTsKKyMgZGVmaW5lIF9fRkRTX0JJVFMoc2V0KSAoKHNldCktPl9fZmRzX2JpdHMpCisjZW5kaWYKKyAgfSBmZF9zZXQ7CisKKy8qIE1heGltdW0gbnVtYmVyIG9mIGZpbGUgZGVzY3JpcHRvcnMgaW4gYGZkX3NldCcuICAqLworI2RlZmluZQlGRF9TRVRTSVpFCQlfX0ZEX1NFVFNJWkUKKworI2lmZGVmIF9fVVNFX01JU0MKKy8qIFNvbWV0aW1lcyB0aGUgZmRfc2V0IG1lbWJlciBpcyBhc3N1bWVkIHRvIGhhdmUgdGhpcyB0eXBlLiAgKi8KK3R5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CisKKy8qIE51bWJlciBvZiBiaXRzIHBlciB3b3JkIG9mIGBmZF9zZXQnIChzb21lIGNvZGUgYXNzdW1lcyB0aGlzIGlzIDMyKS4gICovCisjIGRlZmluZSBORkRCSVRTCQlfX05GREJJVFMKKyNlbmRpZgorCisKKy8qIEFjY2VzcyBtYWNyb3MgZm9yIGBmZF9zZXQnLiAgKi8KKyNkZWZpbmUJRkRfU0VUKGZkLCBmZHNldHApCV9fRkRfU0VUIChmZCwgZmRzZXRwKQorI2RlZmluZQlGRF9DTFIoZmQsIGZkc2V0cCkJX19GRF9DTFIgKGZkLCBmZHNldHApCisjZGVmaW5lCUZEX0lTU0VUKGZkLCBmZHNldHApCV9fRkRfSVNTRVQgKGZkLCBmZHNldHApCisjZGVmaW5lCUZEX1pFUk8oZmRzZXRwKQkJX19GRF9aRVJPIChmZHNldHApCisKKworX19CRUdJTl9ERUNMUworCisvKiBDaGVjayB0aGUgZmlyc3QgTkZEUyBkZXNjcmlwdG9ycyBlYWNoIGluIFJFQURGRFMgKGlmIG5vdCBOVUxMKSBmb3IgcmVhZAorICAgcmVhZGluZXNzLCBpbiBXUklURUZEUyAoaWYgbm90IE5VTEwpIGZvciB3cml0ZSByZWFkaW5lc3MsIGFuZCBpbiBFWENFUFRGRFMKKyAgIChpZiBub3QgTlVMTCkgZm9yIGV4Y2VwdGlvbmFsIGNvbmRpdGlvbnMuICBJZiBUSU1FT1VUIGlzIG5vdCBOVUxMLCB0aW1lIG91dAorICAgYWZ0ZXIgd2FpdGluZyB0aGUgaW50ZXJ2YWwgc3BlY2lmaWVkIHRoZXJlaW4uICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVhZHkKKyAgIGRlc2NyaXB0b3JzLCBvciAtMSBmb3IgZXJyb3JzLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoCisgICBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAorCQkgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywKKwkJICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAorCQkgICBzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCBfX3RpbWVvdXQpOworCisjaWZkZWYgX19VU0VfWE9QRU4ySworLyogU2FtZSBhcyBhYm92ZSBvbmx5IHRoYXQgdGhlIFRJTUVPVVQgdmFsdWUgaXMgZ2l2ZW4gd2l0aCBoaWdoZXIKKyAgIHJlc29sdXRpb24gYW5kIGEgc2lnbWFzayB3aGljaCBpcyBiZWVuIHNldCB0ZW1wb3JhcmlseS4gIFRoaXMgdmVyc2lvbgorICAgc2hvdWxkIGJlIHVzZWQuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGgKKyAgIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBwc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAorCQkgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCisJCSAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRmZHMsCisJCSAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QgX190aW1lb3V0LAorCQkgICAgY29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmljdCBfX3NpZ21hc2spOworI2VuZGlmCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBzeXMvc2VsZWN0LmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvc2VtLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3NlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YTU3ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3NlbS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAwLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9TWVNfU0VNX0gKKyNkZWZpbmUgX1NZU19TRU1fSAkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCisjZGVmaW5lIF9fbmVlZF9zaXplX3QKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogR2V0IGNvbW1vbiBkZWZpbml0aW9uIG9mIFN5c3RlbSBWIHN0eWxlIElQQy4gICovCisjaW5jbHVkZSA8c3lzL2lwYy5oPgorCisvKiBHZXQgc3lzdGVtIGRlcGVuZGVudCBkZWZpbml0aW9uIG9mIGBzdHJ1Y3Qgc2VtaWRfZHMnIGFuZCBtb3JlLiAgKi8KKyNpbmNsdWRlIDxiaXRzL3NlbS5oPgorCisjaWZkZWYgX19VU0VfR05VCisjIGRlZmluZSBfX25lZWRfdGltZXNwZWMKKyMgaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisKKy8qIFRoZSBmb2xsb3dpbmcgU3lzdGVtIFYgc3R5bGUgSVBDIGZ1bmN0aW9ucyBpbXBsZW1lbnQgYSBzZW1hcGhvcmUKKyAgIGhhbmRsaW5nLiAgVGhlIGRlZmluaXRpb24gaXMgZm91bmQgaW4gWFBHMi4gICovCisKKy8qIFN0cnVjdHVyZSB1c2VkIGZvciBhcmd1bWVudCB0byBgc2Vtb3AnIHRvIGRlc2NyaWJlIG9wZXJhdGlvbnMuICAqLworc3RydWN0IHNlbWJ1ZgoreworICB1bnNpZ25lZCBzaG9ydCBpbnQgc2VtX251bTsJLyogc2VtYXBob3JlIG51bWJlciAqLworICBzaG9ydCBpbnQgc2VtX29wOwkJLyogc2VtYXBob3JlIG9wZXJhdGlvbiAqLworICBzaG9ydCBpbnQgc2VtX2ZsZzsJCS8qIG9wZXJhdGlvbiBmbGFnICovCit9OworCisKK19fQkVHSU5fREVDTFMKKworLyogU2VtYXBob3JlIGNvbnRyb2wgb3BlcmF0aW9uLiAgKi8KK2V4dGVybiBpbnQgc2VtY3RsIChpbnQgX19zZW1pZCwgaW50IF9fc2VtbnVtLCBpbnQgX19jbWQsIC4uLikgX19USFJPVzsKKworLyogR2V0IHNlbWFwaG9yZS4gICovCitleHRlcm4gaW50IHNlbWdldCAoa2V5X3QgX19rZXksIGludCBfX25zZW1zLCBpbnQgX19zZW1mbGcpIF9fVEhST1c7CisKKy8qIE9wZXJhdGUgb24gc2VtYXBob3JlLiAgKi8KK2V4dGVybiBpbnQgc2Vtb3AgKGludCBfX3NlbWlkLCBzdHJ1Y3Qgc2VtYnVmICpfX3NvcHMsIHNpemVfdCBfX25zb3BzKSBfX1RIUk9XOworCisjaWZkZWYgX19VU0VfR05VCisvKiBPcGVyYXRlIG9uIHNlbWFwaG9yZSB3aXRoIHRpbWVvdXQuICAqLworZXh0ZXJuIGludCBzZW10aW1lZG9wIChpbnQgX19zZW1pZCwgc3RydWN0IHNlbWJ1ZiAqX19zb3BzLCBzaXplX3QgX19uc29wcywKKwkJICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RpbWVvdXQpIF9fVEhST1c7CisjZW5kaWYKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIHN5cy9zZW0uaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9zZW5kZmlsZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9zZW5kZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMTM2N2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3NlbmRmaWxlLmgKQEAgLTAsMCArMSw1MiBAQAorLyogc2VuZGZpbGUgLS0gY29weSBkYXRhIGRpcmVjdGx5IGZyb20gb25lIGZpbGUgZGVzY3JpcHRvciB0byBhbm90aGVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTgsOTksMDEsMjAwMiwyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9TWVNfU0VOREZJTEVfSAorI2RlZmluZSBfU1lTX1NFTkRGSUxFX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworX19CRUdJTl9ERUNMUworCisvKiBTZW5kIHVwIHRvIENPVU5UIGJ5dGVzIGZyb20gZmlsZSBhc3NvY2lhdGVkIHdpdGggSU5fRkQgc3RhcnRpbmcgYXQKKyAgICpPRkZTRVQgdG8gZGVzY3JpcHRvciBPVVRfRkQuICBTZXQgKk9GRlNFVCB0byB0aGUgSU5fRkQncyBmaWxlIHBvc2l0aW9uCisgICBmb2xsb3dpbmcgdGhlIHJlYWQgYnl0ZXMuICBJZiBPRkZTRVQgaXMgYSBudWxsIHBvaW50ZXIsIHVzZSB0aGUgbm9ybWFsCisgICBmaWxlIHBvc2l0aW9uIGluc3RlYWQuICBSZXR1cm4gdGhlIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzLCBvciAtMSBpbgorICAgY2FzZSBvZiBlcnJvci4gICovCisjaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKK2V4dGVybiBzc2l6ZV90IHNlbmRmaWxlIChpbnQgX19vdXRfZmQsIGludCBfX2luX2ZkLCBvZmZfdCAqX19vZmZzZXQsCisJCQkgc2l6ZV90IF9fY291bnQpIF9fVEhST1c7CisjZWxzZQorIyBpZmRlZiBfX1JFRElSRUNUX05USAorZXh0ZXJuIHNzaXplX3QgX19SRURJUkVDVF9OVEggKHNlbmRmaWxlLAorCQkJICAgICAgIChpbnQgX19vdXRfZmQsIGludCBfX2luX2ZkLCBfX29mZjY0X3QgKl9fb2Zmc2V0LAorCQkJCXNpemVfdCBfX2NvdW50KSwgc2VuZGZpbGU2NCk7CisjIGVsc2UKKyMgIGRlZmluZSBzZW5kZmlsZSBzZW5kZmlsZTY0CisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAorZXh0ZXJuIHNzaXplX3Qgc2VuZGZpbGU2NCAoaW50IF9fb3V0X2ZkLCBpbnQgX19pbl9mZCwgX19vZmY2NF90ICpfX29mZnNldCwKKwkJCSAgIHNpemVfdCBfX2NvdW50KSBfX1RIUk9XOworI2VuZGlmCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZgkvKiBzeXMvc2VuZGZpbGUuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9zaG0uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvc2htLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg2Y2U3NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvc2htLmgKQEAgLTAsMCArMSw2NSBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDAsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1NZU19TSE1fSAorI2RlZmluZSBfU1lTX1NITV9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKyNkZWZpbmUgX19uZWVkX3NpemVfdAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisvKiBHZXQgY29tbW9uIGRlZmluaXRpb24gb2YgU3lzdGVtIFYgc3R5bGUgSVBDLiAgKi8KKyNpbmNsdWRlIDxzeXMvaXBjLmg+CisKKy8qIEdldCBzeXN0ZW0gZGVwZW5kZW50IGRlZmluaXRpb24gb2YgYHN0cnVjdCBzaG1pZF9kcycgYW5kIG1vcmUuICAqLworI2luY2x1ZGUgPGJpdHMvc2htLmg+CisKKy8qIERlZmluZSB0eXBlcyByZXF1aXJlZCBieSB0aGUgc3RhbmRhcmQuICAqLworI2RlZmluZSBfX25lZWRfdGltZV90CisjaW5jbHVkZSA8dGltZS5oPgorCisjaWZkZWYgX19VU0VfWE9QRU4KKyMgaWZuZGVmIF9fcGlkX3RfZGVmaW5lZAordHlwZWRlZiBfX3BpZF90IHBpZF90OworIyAgZGVmaW5lIF9fcGlkX3RfZGVmaW5lZAorIyBlbmRpZgorI2VuZGlmCS8qIFgvT3BlbiAqLworCisKK19fQkVHSU5fREVDTFMKKworLyogVGhlIGZvbGxvd2luZyBTeXN0ZW0gViBzdHlsZSBJUEMgZnVuY3Rpb25zIGltcGxlbWVudCBhIHNoYXJlZCBtZW1vcnkKKyAgIGZhY2lsaXR5LiAgVGhlIGRlZmluaXRpb24gaXMgZm91bmQgaW4gWFBHNC4yLiAgKi8KKworLyogU2hhcmVkIG1lbW9yeSBjb250cm9sIG9wZXJhdGlvbi4gICovCitleHRlcm4gaW50IHNobWN0bCAoaW50IF9fc2htaWQsIGludCBfX2NtZCwgc3RydWN0IHNobWlkX2RzICpfX2J1ZikgX19USFJPVzsKKworLyogR2V0IHNoYXJlZCBtZW1vcnkgc2VnbWVudC4gICovCitleHRlcm4gaW50IHNobWdldCAoa2V5X3QgX19rZXksIHNpemVfdCBfX3NpemUsIGludCBfX3NobWZsZykgX19USFJPVzsKKworLyogQXR0YWNoIHNoYXJlZCBtZW1vcnkgc2VnbWVudC4gICovCitleHRlcm4gdm9pZCAqc2htYXQgKGludCBfX3NobWlkLCBfX2NvbnN0IHZvaWQgKl9fc2htYWRkciwgaW50IF9fc2htZmxnKQorICAgICBfX1RIUk9XOworCisvKiBEZXRhY2ggc2hhcmVkIG1lbW9yeSBzZWdtZW50LiAgKi8KK2V4dGVybiBpbnQgc2htZHQgKF9fY29uc3Qgdm9pZCAqX19zaG1hZGRyKSBfX1RIUk9XOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogc3lzL3NobS5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3NpZ25hbC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9zaWduYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTYwMmRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9zaWduYWwuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8c2lnbmFsLmg+CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3NpZ25hbGZkLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3NpZ25hbGZkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWViMjdlZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvc2lnbmFsZmQuaApAQCAtMCwwICsxLDY2IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYJX1NZU19TSUdOQUxGRF9ICisjZGVmaW5lCV9TWVNfU0lHTkFMRkRfSAkxCisKKyNkZWZpbmUgX19uZWVkX3NpZ3NldF90CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKworc3RydWN0IHNpZ25hbGZkX3NpZ2luZm8KK3sKKyAgdWludDMyX3Qgc3NpX3NpZ25vOworICBpbnQzMl90IHNzaV9lcnJubzsKKyAgaW50MzJfdCBzc2lfY29kZTsKKyAgdWludDMyX3Qgc3NpX3BpZDsKKyAgdWludDMyX3Qgc3NpX3VpZDsKKyAgaW50MzJfdCBzc2lfZmQ7CisgIHVpbnQzMl90IHNzaV90aWQ7CisgIHVpbnQzMl90IHNzaV9iYW5kOworICB1aW50MzJfdCBzc2lfb3ZlcnJ1bjsKKyAgdWludDMyX3Qgc3NpX3RyYXBubzsKKyAgaW50MzJfdCBzc2lfc3RhdHVzOworICBpbnQzMl90IHNzaV9pbnQ7CisgIHVpbnQ2NF90IHNzaV9wdHI7CisgIHVpbnQ2NF90IHNzaV91dGltZTsKKyAgdWludDY0X3Qgc3NpX3N0aW1lOworICB1aW50NjRfdCBzc2lfYWRkcjsKKyAgdWludDhfdCBfX3BhZFs0OF07Cit9OworCisvKiBGbGFncyBmb3Igc2lnbmFsZmQuICAqLworZW51bQorICB7CisgICAgU0ZEX0NMT0VYRUMgPSAwMjAwMDAwMCwKKyNkZWZpbmUgU0ZEX0NMT0VYRUMgU0ZEX0NMT0VYRUMKKyAgICBTRkRfTk9OQkxPQ0sgPSAwNDAwMAorI2RlZmluZSBTRkRfTk9OQkxPQ0sgU0ZEX05PTkJMT0NLCisgIH07CisKK19fQkVHSU5fREVDTFMKKworLyogUmVxdWVzdCBub3RpZmljYXRpb24gZm9yIGRlbGl2ZXJ5IG9mIHNpZ25hbHMgaW4gTUFTSyB0byBiZQorICAgcGVyZm9ybWVkIHVzaW5nIGRlc2NyaXB0b3IgRkQuKi8KK2V4dGVybiBpbnQgc2lnbmFsZmQgKGludCBfX2ZkLCBjb25zdCBzaWdzZXRfdCAqX19tYXNrLCBpbnQgX19mbGFncykKKyAgX19USFJPVyBfX25vbm51bGwgKCgyKSk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBzeXMvc2lnbmFsZmQuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9zb2NrZXQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBhNmE1MgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgKQEAgLTAsMCArMSwyNDcgQEAKKy8qIERlY2xhcmF0aW9ucyBvZiBzb2NrZXQgY29uc3RhbnRzLCB0eXBlcywgYW5kIGZ1bmN0aW9ucy4KKyAgIENvcHlyaWdodCAoQykgMTk5MSw5MiwxOTk0LTIwMDEsMjAwMywyMDA1LDIwMDcsMjAwOAorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYJX1NZU19TT0NLRVRfSAorI2RlZmluZQlfU1lTX1NPQ0tFVF9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKK19fQkVHSU5fREVDTFMKKworI2luY2x1ZGUgPHN5cy91aW8uaD4KKyNkZWZpbmUJX19uZWVkX3NpemVfdAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2lmZGVmIF9fVVNFX0dOVQorLyogR2V0IHRoZSBfX3NpZ3NldF90IGRlZmluaXRpb24uICAqLworIyBpbmNsdWRlIDxiaXRzL3NpZ3NldC5oPgorI2VuZGlmCisKKworLyogVGhpcyBvcGVyYXRpbmcgc3lzdGVtLXNwZWNpZmljIGhlYWRlciBmaWxlIGRlZmluZXMgdGhlIFNPQ0tfKiwgUEZfKiwKKyAgIEFGXyosIE1TR18qLCBTT0xfKiwgYW5kIFNPXyogY29uc3RhbnRzLCBhbmQgdGhlIGBzdHJ1Y3Qgc29ja2FkZHInLAorICAgYHN0cnVjdCBtc2doZHInLCBhbmQgYHN0cnVjdCBsaW5nZXInIHR5cGVzLiAgKi8KKyNpbmNsdWRlIDxiaXRzL3NvY2tldC5oPgorCisjaWZkZWYgX19VU0VfQlNECisvKiBUaGlzIGlzIHRoZSA0LjMgQlNEIGBzdHJ1Y3Qgc29ja2FkZHInIGZvcm1hdCwgd2hpY2ggaXMgdXNlZCBhcyB3aXJlCisgICBmb3JtYXQgaW4gdGhlIGdyb3R0eSBvbGQgNC4zIGB0YWxrJyBwcm90b2NvbC4gICovCitzdHJ1Y3Qgb3NvY2thZGRyCisgIHsKKyAgICB1bnNpZ25lZCBzaG9ydCBpbnQgc2FfZmFtaWx5OworICAgIHVuc2lnbmVkIGNoYXIgc2FfZGF0YVsxNF07CisgIH07CisjZW5kaWYKKworLyogVGhlIGZvbGxvd2luZyBjb25zdGFudHMgc2hvdWxkIGJlIHVzZWQgZm9yIHRoZSBzZWNvbmQgcGFyYW1ldGVyIG9mCisgICBgc2h1dGRvd24nLiAgKi8KK2VudW0KK3sKKyAgU0hVVF9SRCA9IDAsCQkvKiBObyBtb3JlIHJlY2VwdGlvbnMuICAqLworI2RlZmluZSBTSFVUX1JECQlTSFVUX1JECisgIFNIVVRfV1IsCQkvKiBObyBtb3JlIHRyYW5zbWlzc2lvbnMuICAqLworI2RlZmluZSBTSFVUX1dSCQlTSFVUX1dSCisgIFNIVVRfUkRXUgkJLyogTm8gbW9yZSByZWNlcHRpb25zIG9yIHRyYW5zbWlzc2lvbnMuICAqLworI2RlZmluZSBTSFVUX1JEV1IJU0hVVF9SRFdSCit9OworCisvKiBUaGlzIGlzIHRoZSB0eXBlIHdlIHVzZSBmb3IgZ2VuZXJpYyBzb2NrZXQgYWRkcmVzcyBhcmd1bWVudHMuCisKKyAgIFdpdGggR0NDIDIuNyBhbmQgbGF0ZXIsIHRoZSBmdW5reSB1bmlvbiBjYXVzZXMgcmVkZWNsYXJhdGlvbnMgb3IKKyAgIHVzZXMgd2l0aCBhbnkgb2YgdGhlIGxpc3RlZCB0eXBlcyB0byBiZSBhbGxvd2VkIHdpdGhvdXQgY29tcGxhaW50LgorICAgRysrIDIuNyBkb2VzIG5vdCBzdXBwb3J0IHRyYW5zcGFyZW50IHVuaW9ucyBzbyB0aGVyZSB3ZSB3YW50IHRoZQorICAgb2xkLXN0eWxlIGRlY2xhcmF0aW9uLCB0b28uICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgfHwgIV9fR05VQ19QUkVSRVEgKDIsIDcpIHx8ICFkZWZpbmVkIF9fVVNFX0dOVQorIyBkZWZpbmUgX19TT0NLQUREUl9BUkcJCXN0cnVjdCBzb2NrYWRkciAqX19yZXN0cmljdAorIyBkZWZpbmUgX19DT05TVF9TT0NLQUREUl9BUkcJX19jb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKgorI2Vsc2UKKy8qIEFkZCBtb3JlIGBzdHJ1Y3Qgc29ja2FkZHJfQUYnIHR5cGVzIGhlcmUgYXMgbmVjZXNzYXJ5LgorICAgVGhlc2UgYXJlIGFsbCB0aGUgb25lcyBJIGZvdW5kIG9uIE5ldEJTRCBhbmQgTGludXguICAqLworIyBkZWZpbmUgX19TT0NLQUREUl9BTExUWVBFUyBcCisgIF9fU09DS0FERFJfT05FVFlQRSAoc29ja2FkZHIpIFwKKyAgX19TT0NLQUREUl9PTkVUWVBFIChzb2NrYWRkcl9hdCkgXAorICBfX1NPQ0tBRERSX09ORVRZUEUgKHNvY2thZGRyX2F4MjUpIFwKKyAgX19TT0NLQUREUl9PTkVUWVBFIChzb2NrYWRkcl9kbCkgXAorICBfX1NPQ0tBRERSX09ORVRZUEUgKHNvY2thZGRyX2VvbikgXAorICBfX1NPQ0tBRERSX09ORVRZUEUgKHNvY2thZGRyX2luKSBcCisgIF9fU09DS0FERFJfT05FVFlQRSAoc29ja2FkZHJfaW42KSBcCisgIF9fU09DS0FERFJfT05FVFlQRSAoc29ja2FkZHJfaW5hcnApIFwKKyAgX19TT0NLQUREUl9PTkVUWVBFIChzb2NrYWRkcl9pcHgpIFwKKyAgX19TT0NLQUREUl9PTkVUWVBFIChzb2NrYWRkcl9pc28pIFwKKyAgX19TT0NLQUREUl9PTkVUWVBFIChzb2NrYWRkcl9ucykgXAorICBfX1NPQ0tBRERSX09ORVRZUEUgKHNvY2thZGRyX3VuKSBcCisgIF9fU09DS0FERFJfT05FVFlQRSAoc29ja2FkZHJfeDI1KQorCisjIGRlZmluZSBfX1NPQ0tBRERSX09ORVRZUEUodHlwZSkgc3RydWN0IHR5cGUgKl9fcmVzdHJpY3QgX18jI3R5cGUjI19fOwordHlwZWRlZiB1bmlvbiB7IF9fU09DS0FERFJfQUxMVFlQRVMKKwkgICAgICB9IF9fU09DS0FERFJfQVJHIF9fYXR0cmlidXRlX18gKChfX3RyYW5zcGFyZW50X3VuaW9uX18pKTsKKyMgdW5kZWYgX19TT0NLQUREUl9PTkVUWVBFCisjIGRlZmluZSBfX1NPQ0tBRERSX09ORVRZUEUodHlwZSkgX19jb25zdCBzdHJ1Y3QgdHlwZSAqX19yZXN0cmljdCBfXyMjdHlwZSMjX187Cit0eXBlZGVmIHVuaW9uIHsgX19TT0NLQUREUl9BTExUWVBFUworCSAgICAgIH0gX19DT05TVF9TT0NLQUREUl9BUkcgX19hdHRyaWJ1dGVfXyAoKF9fdHJhbnNwYXJlbnRfdW5pb25fXykpOworIyB1bmRlZiBfX1NPQ0tBRERSX09ORVRZUEUKKyNlbmRpZgorCisKKy8qIENyZWF0ZSBhIG5ldyBzb2NrZXQgb2YgdHlwZSBUWVBFIGluIGRvbWFpbiBET01BSU4sIHVzaW5nCisgICBwcm90b2NvbCBQUk9UT0NPTC4gIElmIFBST1RPQ09MIGlzIHplcm8sIG9uZSBpcyBjaG9zZW4gYXV0b21hdGljYWxseS4KKyAgIFJldHVybnMgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIHRoZSBuZXcgc29ja2V0LCBvciAtMSBmb3IgZXJyb3JzLiAgKi8KK2V4dGVybiBpbnQgc29ja2V0IChpbnQgX19kb21haW4sIGludCBfX3R5cGUsIGludCBfX3Byb3RvY29sKSBfX1RIUk9XOworCisvKiBDcmVhdGUgdHdvIG5ldyBzb2NrZXRzLCBvZiB0eXBlIFRZUEUgaW4gZG9tYWluIERPTUFJTiBhbmQgdXNpbmcKKyAgIHByb3RvY29sIFBST1RPQ09MLCB3aGljaCBhcmUgY29ubmVjdGVkIHRvIGVhY2ggb3RoZXIsIGFuZCBwdXQgZmlsZQorICAgZGVzY3JpcHRvcnMgZm9yIHRoZW0gaW4gRkRTWzBdIGFuZCBGRFNbMV0uICBJZiBQUk9UT0NPTCBpcyB6ZXJvLAorICAgb25lIHdpbGwgYmUgY2hvc2VuIGF1dG9tYXRpY2FsbHkuICBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgZm9yIGVycm9ycy4gICovCitleHRlcm4gaW50IHNvY2tldHBhaXIgKGludCBfX2RvbWFpbiwgaW50IF9fdHlwZSwgaW50IF9fcHJvdG9jb2wsCisJCSAgICAgICBpbnQgX19mZHNbMl0pIF9fVEhST1c7CisKKy8qIEdpdmUgdGhlIHNvY2tldCBGRCB0aGUgbG9jYWwgYWRkcmVzcyBBRERSICh3aGljaCBpcyBMRU4gYnl0ZXMgbG9uZykuICAqLworZXh0ZXJuIGludCBiaW5kIChpbnQgX19mZCwgX19DT05TVF9TT0NLQUREUl9BUkcgX19hZGRyLCBzb2NrbGVuX3QgX19sZW4pCisgICAgIF9fVEhST1c7CisKKy8qIFB1dCB0aGUgbG9jYWwgYWRkcmVzcyBvZiBGRCBpbnRvICpBRERSIGFuZCBpdHMgbGVuZ3RoIGluICpMRU4uICAqLworZXh0ZXJuIGludCBnZXRzb2NrbmFtZSAoaW50IF9fZmQsIF9fU09DS0FERFJfQVJHIF9fYWRkciwKKwkJCXNvY2tsZW5fdCAqX19yZXN0cmljdCBfX2xlbikgX19USFJPVzsKKworLyogT3BlbiBhIGNvbm5lY3Rpb24gb24gc29ja2V0IEZEIHRvIHBlZXIgYXQgQUREUiAod2hpY2ggTEVOIGJ5dGVzIGxvbmcpLgorICAgRm9yIGNvbm5lY3Rpb25sZXNzIHNvY2tldCB0eXBlcywganVzdCBzZXQgdGhlIGRlZmF1bHQgYWRkcmVzcyB0byBzZW5kIHRvCisgICBhbmQgdGhlIG9ubHkgYWRkcmVzcyBmcm9tIHdoaWNoIHRvIGFjY2VwdCB0cmFuc21pc3Npb25zLgorICAgUmV0dXJuIDAgb24gc3VjY2VzcywgLTEgZm9yIGVycm9ycy4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aAorICAgX19USFJPVy4gICovCitleHRlcm4gaW50IGNvbm5lY3QgKGludCBfX2ZkLCBfX0NPTlNUX1NPQ0tBRERSX0FSRyBfX2FkZHIsIHNvY2tsZW5fdCBfX2xlbik7CisKKy8qIFB1dCB0aGUgYWRkcmVzcyBvZiB0aGUgcGVlciBjb25uZWN0ZWQgdG8gc29ja2V0IEZEIGludG8gKkFERFIKKyAgICh3aGljaCBpcyAqTEVOIGJ5dGVzIGxvbmcpLCBhbmQgaXRzIGFjdHVhbCBsZW5ndGggaW50byAqTEVOLiAgKi8KK2V4dGVybiBpbnQgZ2V0cGVlcm5hbWUgKGludCBfX2ZkLCBfX1NPQ0tBRERSX0FSRyBfX2FkZHIsCisJCQlzb2NrbGVuX3QgKl9fcmVzdHJpY3QgX19sZW4pIF9fVEhST1c7CisKKworLyogU2VuZCBOIGJ5dGVzIG9mIEJVRiB0byBzb2NrZXQgRkQuICBSZXR1cm5zIHRoZSBudW1iZXIgc2VudCBvciAtMS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aAorICAgX19USFJPVy4gICovCitleHRlcm4gc3NpemVfdCBzZW5kIChpbnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwgaW50IF9fZmxhZ3MpOworCisvKiBSZWFkIE4gYnl0ZXMgaW50byBCVUYgZnJvbSBzb2NrZXQgRkQuCisgICBSZXR1cm5zIHRoZSBudW1iZXIgcmVhZCBvciAtMSBmb3IgZXJyb3JzLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoCisgICBfX1RIUk9XLiAgKi8KK2V4dGVybiBzc2l6ZV90IHJlY3YgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwgaW50IF9fZmxhZ3MpOworCisvKiBTZW5kIE4gYnl0ZXMgb2YgQlVGIG9uIHNvY2tldCBGRCB0byBwZWVyIGF0IGFkZHJlc3MgQUREUiAod2hpY2ggaXMKKyAgIEFERFJfTEVOIGJ5dGVzIGxvbmcpLiAgUmV0dXJucyB0aGUgbnVtYmVyIHNlbnQsIG9yIC0xIGZvciBlcnJvcnMuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGgKKyAgIF9fVEhST1cuICAqLworZXh0ZXJuIHNzaXplX3Qgc2VuZHRvIChpbnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwKKwkJICAgICAgIGludCBfX2ZsYWdzLCBfX0NPTlNUX1NPQ0tBRERSX0FSRyBfX2FkZHIsCisJCSAgICAgICBzb2NrbGVuX3QgX19hZGRyX2xlbik7CisKKy8qIFJlYWQgTiBieXRlcyBpbnRvIEJVRiB0aHJvdWdoIHNvY2tldCBGRC4KKyAgIElmIEFERFIgaXMgbm90IE5VTEwsIGZpbGwgaW4gKkFERFJfTEVOIGJ5dGVzIG9mIGl0IHdpdGggdGhhIGFkZHJlc3Mgb2YKKyAgIHRoZSBzZW5kZXIsIGFuZCBzdG9yZSB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGFkZHJlc3MgaW4gKkFERFJfTEVOLgorICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgb3IgLTEgZm9yIGVycm9ycy4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aAorICAgX19USFJPVy4gICovCitleHRlcm4gc3NpemVfdCByZWN2ZnJvbSAoaW50IF9fZmQsIHZvaWQgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX24sCisJCQkgaW50IF9fZmxhZ3MsIF9fU09DS0FERFJfQVJHIF9fYWRkciwKKwkJCSBzb2NrbGVuX3QgKl9fcmVzdHJpY3QgX19hZGRyX2xlbik7CisKKworLyogU2VuZCBhIG1lc3NhZ2UgZGVzY3JpYmVkIE1FU1NBR0Ugb24gc29ja2V0IEZELgorICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQsIG9yIC0xIGZvciBlcnJvcnMuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGgKKyAgIF9fVEhST1cuICAqLworZXh0ZXJuIHNzaXplX3Qgc2VuZG1zZyAoaW50IF9fZmQsIF9fY29uc3Qgc3RydWN0IG1zZ2hkciAqX19tZXNzYWdlLAorCQkJaW50IF9fZmxhZ3MpOworCisvKiBSZWNlaXZlIGEgbWVzc2FnZSBhcyBkZXNjcmliZWQgYnkgTUVTU0FHRSBmcm9tIHNvY2tldCBGRC4KKyAgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkIG9yIC0xIGZvciBlcnJvcnMuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGgKKyAgIF9fVEhST1cuICAqLworZXh0ZXJuIHNzaXplX3QgcmVjdm1zZyAoaW50IF9fZmQsIHN0cnVjdCBtc2doZHIgKl9fbWVzc2FnZSwgaW50IF9fZmxhZ3MpOworCisKKy8qIFB1dCB0aGUgY3VycmVudCB2YWx1ZSBmb3Igc29ja2V0IEZEJ3Mgb3B0aW9uIE9QVE5BTUUgYXQgcHJvdG9jb2wgbGV2ZWwgTEVWRUwKKyAgIGludG8gT1BUVkFMICh3aGljaCBpcyAqT1BUTEVOIGJ5dGVzIGxvbmcpLCBhbmQgc2V0ICpPUFRMRU4gdG8gdGhlIHZhbHVlJ3MKKyAgIGFjdHVhbCBsZW5ndGguICBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgZm9yIGVycm9ycy4gICovCitleHRlcm4gaW50IGdldHNvY2tvcHQgKGludCBfX2ZkLCBpbnQgX19sZXZlbCwgaW50IF9fb3B0bmFtZSwKKwkJICAgICAgIHZvaWQgKl9fcmVzdHJpY3QgX19vcHR2YWwsCisJCSAgICAgICBzb2NrbGVuX3QgKl9fcmVzdHJpY3QgX19vcHRsZW4pIF9fVEhST1c7CisKKy8qIFNldCBzb2NrZXQgRkQncyBvcHRpb24gT1BUTkFNRSBhdCBwcm90b2NvbCBsZXZlbCBMRVZFTAorICAgdG8gKk9QVFZBTCAod2hpY2ggaXMgT1BUTEVOIGJ5dGVzIGxvbmcpLgorICAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIGZvciBlcnJvcnMuICAqLworZXh0ZXJuIGludCBzZXRzb2Nrb3B0IChpbnQgX19mZCwgaW50IF9fbGV2ZWwsIGludCBfX29wdG5hbWUsCisJCSAgICAgICBfX2NvbnN0IHZvaWQgKl9fb3B0dmFsLCBzb2NrbGVuX3QgX19vcHRsZW4pIF9fVEhST1c7CisKKworLyogUHJlcGFyZSB0byBhY2NlcHQgY29ubmVjdGlvbnMgb24gc29ja2V0IEZELgorICAgTiBjb25uZWN0aW9uIHJlcXVlc3RzIHdpbGwgYmUgcXVldWVkIGJlZm9yZSBmdXJ0aGVyIHJlcXVlc3RzIGFyZSByZWZ1c2VkLgorICAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIGZvciBlcnJvcnMuICAqLworZXh0ZXJuIGludCBsaXN0ZW4gKGludCBfX2ZkLCBpbnQgX19uKSBfX1RIUk9XOworCisvKiBBd2FpdCBhIGNvbm5lY3Rpb24gb24gc29ja2V0IEZELgorICAgV2hlbiBhIGNvbm5lY3Rpb24gYXJyaXZlcywgb3BlbiBhIG5ldyBzb2NrZXQgdG8gY29tbXVuaWNhdGUgd2l0aCBpdCwKKyAgIHNldCAqQUREUiAod2hpY2ggaXMgKkFERFJfTEVOIGJ5dGVzIGxvbmcpIHRvIHRoZSBhZGRyZXNzIG9mIHRoZSBjb25uZWN0aW5nCisgICBwZWVyIGFuZCAqQUREUl9MRU4gdG8gdGhlIGFkZHJlc3MncyBhY3R1YWwgbGVuZ3RoLCBhbmQgcmV0dXJuIHRoZQorICAgbmV3IHNvY2tldCdzIGRlc2NyaXB0b3IsIG9yIC0xIGZvciBlcnJvcnMuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGgKKyAgIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBhY2NlcHQgKGludCBfX2ZkLCBfX1NPQ0tBRERSX0FSRyBfX2FkZHIsCisJCSAgIHNvY2tsZW5fdCAqX19yZXN0cmljdCBfX2FkZHJfbGVuKTsKKworLyogU2h1dCBkb3duIGFsbCBvciBwYXJ0IG9mIHRoZSBjb25uZWN0aW9uIG9wZW4gb24gc29ja2V0IEZELgorICAgSE9XIGRldGVybWluZXMgd2hhdCB0byBzaHV0IGRvd246CisgICAgIFNIVVRfUkQgICA9IE5vIG1vcmUgcmVjZXB0aW9uczsKKyAgICAgU0hVVF9XUiAgID0gTm8gbW9yZSB0cmFuc21pc3Npb25zOworICAgICBTSFVUX1JEV1IgPSBObyBtb3JlIHJlY2VwdGlvbnMgb3IgdHJhbnNtaXNzaW9ucy4KKyAgIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBmb3IgZXJyb3JzLiAgKi8KK2V4dGVybiBpbnQgc2h1dGRvd24gKGludCBfX2ZkLCBpbnQgX19ob3cpIF9fVEhST1c7CisKKworI2lmZGVmIF9fVVNFX1hPUEVOMksKKy8qIERldGVybWluZSB3aGV0ZXIgc29ja2V0IGlzIGF0IGEgb3V0LW9mLWJhbmQgbWFyay4gICovCitleHRlcm4gaW50IHNvY2thdG1hcmsgKGludCBfX2ZkKSBfX1RIUk9XOworI2VuZGlmCisKKworI2lmZGVmIF9fVVNFX01JU0MKKy8qIEZEVFlQRSBpcyBTX0lGU09DSyBvciBhbm90aGVyIFNfSUYqIG1hY3JvIGRlZmluZWQgaW4gPHN5cy9zdGF0Lmg+OworICAgcmV0dXJucyAxIGlmIEZEIGlzIG9wZW4gb24gYW4gb2JqZWN0IG9mIHRoZSBpbmRpY2F0ZWQgdHlwZSwgMCBpZiBub3QsCisgICBvciAtMSBmb3IgZXJyb3JzIChzZXR0aW5nIGVycm5vKS4gICovCitleHRlcm4gaW50IGlzZmR0eXBlIChpbnQgX19mZCwgaW50IF9fZmR0eXBlKSBfX1RIUk9XOworI2VuZGlmCisKKworLyogRGVmaW5lIHNvbWUgbWFjcm9zIGhlbHBpbmcgdG8gY2F0Y2ggYnVmZmVyIG92ZXJmbG93cy4gICovCisjaWYgX19VU0VfRk9SVElGWV9MRVZFTCA+IDAgJiYgZGVmaW5lZCBfX2V4dGVybl9hbHdheXNfaW5saW5lCisjIGluY2x1ZGUgPGJpdHMvc29ja2V0Mi5oPgorI2VuZGlmCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBzeXMvc29ja2V0LmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvc29ja2V0dmFyLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3NvY2tldHZhci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNzcxNTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3NvY2tldHZhci5oCkBAIC0wLDAgKzEsMyBAQAorLyogVGhpcyBoZWFkZXIgaXMgdXNlZCBvbiBtYW55IHN5c3RlbXMgYnV0IGZvciBHTlUgd2UgaGF2ZSBldmVyeXRoaW5nCisgICBhbHJlYWR5IGRlZmluZWQgaW4gdGhlIHN0YW5kYXJkIGhlYWRlci4gICovCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9zb3VuZGNhcmQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvc291bmRjYXJkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFkZTk4NgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvc291bmRjYXJkLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGxpbnV4L3NvdW5kY2FyZC5oPgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9zdGF0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjRjNDNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgKQEAgLTAsMCArMSw1MzUgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5NS0yMDA0LCAyMDA1LCAyMDA2LCAyMDA3CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyoKKyAqCVBPU0lYIFN0YW5kYXJkOiA1LjYgRmlsZSBDaGFyYWN0ZXJpc3RpY3MJPHN5cy9zdGF0Lmg+CisgKi8KKworI2lmbmRlZglfU1lTX1NUQVRfSAorI2RlZmluZQlfU1lTX1NUQVRfSAkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCisjaW5jbHVkZSA8Yml0cy90eXBlcy5oPgkJLyogRm9yIF9fbW9kZV90IGFuZCBfX2Rldl90LiAgKi8KKworI2lmIGRlZmluZWQgX19VU0VfWE9QRU4gfHwgZGVmaW5lZCBfX1VTRV9YT1BFTjJLIHx8IGRlZmluZWQgX19VU0VfTUlTQyBcCisgICAgICAgICB8fCBkZWZpbmVkIF9fVVNFX0FURklMRQorIyBpZiBkZWZpbmVkIF9fVVNFX1hPUEVOIHx8IGRlZmluZWQgX19VU0VfWE9QRU4ySworIyAgZGVmaW5lIF9fbmVlZF90aW1lX3QKKyMgZW5kaWYKKyMgaWYgZGVmaW5lZCBfX1VTRV9NSVNDIHx8IGRlZmluZWQgX19VU0VfQVRGSUxFCisjICBkZWZpbmUgX19uZWVkX3RpbWVzcGVjCisjIGVuZGlmCisjIGluY2x1ZGUgPHRpbWUuaD4JCS8qIEZvciB0aW1lX3QgcmVzcC4gdGltZXNwZWMuICAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkIF9fVVNFX1hPUEVOIHx8IGRlZmluZWQgX19VU0VfWE9QRU4ySworLyogVGhlIFNpbmdsZSBVbml4IHNwZWNpZmljYXRpb24gc2F5cyB0aGF0IHNvbWUgbW9yZSB0eXBlcyBhcmUKKyAgIGF2YWlsYWJsZSBoZXJlLiAgKi8KKyMgaWZuZGVmIF9fZGV2X3RfZGVmaW5lZAordHlwZWRlZiBfX2Rldl90IGRldl90OworIyAgZGVmaW5lIF9fZGV2X3RfZGVmaW5lZAorIyBlbmRpZgorCisjIGlmbmRlZiBfX2dpZF90X2RlZmluZWQKK3R5cGVkZWYgX19naWRfdCBnaWRfdDsKKyMgIGRlZmluZSBfX2dpZF90X2RlZmluZWQKKyMgZW5kaWYKKworIyBpZm5kZWYgX19pbm9fdF9kZWZpbmVkCisjICBpZm5kZWYgX19VU0VfRklMRV9PRkZTRVQ2NAordHlwZWRlZiBfX2lub190IGlub190OworIyAgZWxzZQordHlwZWRlZiBfX2lubzY0X3QgaW5vX3Q7CisjICBlbmRpZgorIyAgZGVmaW5lIF9faW5vX3RfZGVmaW5lZAorIyBlbmRpZgorCisjIGlmbmRlZiBfX21vZGVfdF9kZWZpbmVkCit0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKKyMgIGRlZmluZSBfX21vZGVfdF9kZWZpbmVkCisjIGVuZGlmCisKKyMgaWZuZGVmIF9fbmxpbmtfdF9kZWZpbmVkCit0eXBlZGVmIF9fbmxpbmtfdCBubGlua190OworIyAgZGVmaW5lIF9fbmxpbmtfdF9kZWZpbmVkCisjIGVuZGlmCisKKyMgaWZuZGVmIF9fb2ZmX3RfZGVmaW5lZAorIyAgaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKK3R5cGVkZWYgX19vZmZfdCBvZmZfdDsKKyMgIGVsc2UKK3R5cGVkZWYgX19vZmY2NF90IG9mZl90OworIyAgZW5kaWYKKyMgIGRlZmluZSBfX29mZl90X2RlZmluZWQKKyMgZW5kaWYKKworIyBpZm5kZWYgX191aWRfdF9kZWZpbmVkCit0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CisjICBkZWZpbmUgX191aWRfdF9kZWZpbmVkCisjIGVuZGlmCisjZW5kaWYJLyogWC9PcGVuICovCisKKyNpZmRlZiBfX1VTRV9VTklYOTgKKyMgaWZuZGVmIF9fYmxrY250X3RfZGVmaW5lZAorIyAgaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKK3R5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKKyMgIGVsc2UKK3R5cGVkZWYgX19ibGtjbnQ2NF90IGJsa2NudF90OworIyAgZW5kaWYKKyMgIGRlZmluZSBfX2Jsa2NudF90X2RlZmluZWQKKyMgZW5kaWYKKworIyBpZm5kZWYgX19ibGtzaXplX3RfZGVmaW5lZAordHlwZWRlZiBfX2Jsa3NpemVfdCBibGtzaXplX3Q7CisjICBkZWZpbmUgX19ibGtzaXplX3RfZGVmaW5lZAorIyBlbmRpZgorI2VuZGlmCS8qIFVuaXg5OCAqLworCitfX0JFR0lOX0RFQ0xTCisKKyNpbmNsdWRlIDxiaXRzL3N0YXQuaD4KKworI2lmIGRlZmluZWQgX19VU0VfQlNEIHx8IGRlZmluZWQgX19VU0VfTUlTQyB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOCisjIGRlZmluZSBTX0lGTVQJCV9fU19JRk1UCisjIGRlZmluZSBTX0lGRElSCV9fU19JRkRJUgorIyBkZWZpbmUgU19JRkNIUglfX1NfSUZDSFIKKyMgZGVmaW5lIFNfSUZCTEsJX19TX0lGQkxLCisjIGRlZmluZSBTX0lGUkVHCV9fU19JRlJFRworIyBpZmRlZiBfX1NfSUZJRk8KKyMgIGRlZmluZSBTX0lGSUZPCV9fU19JRklGTworIyBlbmRpZgorIyBpZmRlZiBfX1NfSUZMTksKKyMgIGRlZmluZSBTX0lGTE5LCV9fU19JRkxOSworIyBlbmRpZgorIyBpZiAoZGVmaW5lZCBfX1VTRV9CU0QgfHwgZGVmaW5lZCBfX1VTRV9NSVNDIHx8IGRlZmluZWQgX19VU0VfVU5JWDk4KSBcCisgICAgICYmIGRlZmluZWQgX19TX0lGU09DSworIyAgZGVmaW5lIFNfSUZTT0NLCV9fU19JRlNPQ0sKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBUZXN0IG1hY3JvcyBmb3IgZmlsZSB0eXBlcy4JKi8KKworI2RlZmluZQlfX1NfSVNUWVBFKG1vZGUsIG1hc2spCSgoKG1vZGUpICYgX19TX0lGTVQpID09IChtYXNrKSkKKworI2RlZmluZQlTX0lTRElSKG1vZGUpCSBfX1NfSVNUWVBFKChtb2RlKSwgX19TX0lGRElSKQorI2RlZmluZQlTX0lTQ0hSKG1vZGUpCSBfX1NfSVNUWVBFKChtb2RlKSwgX19TX0lGQ0hSKQorI2RlZmluZQlTX0lTQkxLKG1vZGUpCSBfX1NfSVNUWVBFKChtb2RlKSwgX19TX0lGQkxLKQorI2RlZmluZQlTX0lTUkVHKG1vZGUpCSBfX1NfSVNUWVBFKChtb2RlKSwgX19TX0lGUkVHKQorI2lmZGVmIF9fU19JRklGTworIyBkZWZpbmUgU19JU0ZJRk8obW9kZSkJIF9fU19JU1RZUEUoKG1vZGUpLCBfX1NfSUZJRk8pCisjZW5kaWYKKyNpZmRlZiBfX1NfSUZMTksKKyMgZGVmaW5lIFNfSVNMTksobW9kZSkJIF9fU19JU1RZUEUoKG1vZGUpLCBfX1NfSUZMTkspCisjZW5kaWYKKworI2lmIGRlZmluZWQgX19VU0VfQlNEICYmICFkZWZpbmVkIF9fU19JRkxOSworIyBkZWZpbmUgU19JU0xOSyhtb2RlKSAgMAorI2VuZGlmCisKKyNpZiAoZGVmaW5lZCBfX1VTRV9CU0QgfHwgZGVmaW5lZCBfX1VTRV9VTklYOTgpIFwKKyAgICAmJiBkZWZpbmVkIF9fU19JRlNPQ0sKKyMgZGVmaW5lIFNfSVNTT0NLKG1vZGUpIF9fU19JU1RZUEUoKG1vZGUpLCBfX1NfSUZTT0NLKQorI2VuZGlmCisKKy8qIFRoZXNlIGFyZSBmcm9tIFBPU0lYLjFiLiAgSWYgdGhlIG9iamVjdHMgYXJlIG5vdCBpbXBsZW1lbnRlZCB1c2luZyBzZXBhcmF0ZQorICAgZGlzdGluY3QgZmlsZSB0eXBlcywgdGhlIG1hY3JvcyBhbHdheXMgd2lsbCBldmFsdWF0ZSB0byB6ZXJvLiAgVW5saWtlIHRoZQorICAgb3RoZXIgU18qIG1hY3JvcyB0aGUgZm9sbG93aW5nIHRocmVlIHRha2UgYSBwb2ludGVyIHRvIGEgYHN0cnVjdCBzdGF0JworICAgb2JqZWN0IGFzIHRoZSBhcmd1bWVudC4gICovCisjaWZkZWYJX19VU0VfUE9TSVgxOTkzMDkKKyMgZGVmaW5lIFNfVFlQRUlTTVEoYnVmKSBfX1NfVFlQRUlTTVEoYnVmKQorIyBkZWZpbmUgU19UWVBFSVNTRU0oYnVmKSBfX1NfVFlQRUlTU0VNKGJ1ZikKKyMgZGVmaW5lIFNfVFlQRUlTU0hNKGJ1ZikgX19TX1RZUEVJU1NITShidWYpCisjZW5kaWYKKworCisvKiBQcm90ZWN0aW9uIGJpdHMuICAqLworCisjZGVmaW5lCVNfSVNVSUQgX19TX0lTVUlECS8qIFNldCB1c2VyIElEIG9uIGV4ZWN1dGlvbi4gICovCisjZGVmaW5lCVNfSVNHSUQJX19TX0lTR0lECS8qIFNldCBncm91cCBJRCBvbiBleGVjdXRpb24uICAqLworCisjaWYgZGVmaW5lZCBfX1VTRV9CU0QgfHwgZGVmaW5lZCBfX1VTRV9NSVNDIHx8IGRlZmluZWQgX19VU0VfWE9QRU4KKy8qIFNhdmUgc3dhcHBlZCB0ZXh0IGFmdGVyIHVzZSAoc3RpY2t5IGJpdCkuICBUaGlzIGlzIHByZXR0eSB3ZWxsIG9ic29sZXRlLiAgKi8KKyMgZGVmaW5lIFNfSVNWVFgJX19TX0lTVlRYCisjZW5kaWYKKworI2RlZmluZQlTX0lSVVNSCV9fU19JUkVBRAkvKiBSZWFkIGJ5IG93bmVyLiAgKi8KKyNkZWZpbmUJU19JV1VTUglfX1NfSVdSSVRFCS8qIFdyaXRlIGJ5IG93bmVyLiAgKi8KKyNkZWZpbmUJU19JWFVTUglfX1NfSUVYRUMJLyogRXhlY3V0ZSBieSBvd25lci4gICovCisvKiBSZWFkLCB3cml0ZSwgYW5kIGV4ZWN1dGUgYnkgb3duZXIuICAqLworI2RlZmluZQlTX0lSV1hVCShfX1NfSVJFQUR8X19TX0lXUklURXxfX1NfSUVYRUMpCisKKyNpZiBkZWZpbmVkIF9fVVNFX01JU0MgJiYgZGVmaW5lZCBfX1VTRV9CU0QKKyMgZGVmaW5lIFNfSVJFQUQJU19JUlVTUgorIyBkZWZpbmUgU19JV1JJVEUJU19JV1VTUgorIyBkZWZpbmUgU19JRVhFQwlTX0lYVVNSCisjZW5kaWYKKworI2RlZmluZQlTX0lSR1JQCShTX0lSVVNSID4+IDMpCS8qIFJlYWQgYnkgZ3JvdXAuICAqLworI2RlZmluZQlTX0lXR1JQCShTX0lXVVNSID4+IDMpCS8qIFdyaXRlIGJ5IGdyb3VwLiAgKi8KKyNkZWZpbmUJU19JWEdSUAkoU19JWFVTUiA+PiAzKQkvKiBFeGVjdXRlIGJ5IGdyb3VwLiAgKi8KKy8qIFJlYWQsIHdyaXRlLCBhbmQgZXhlY3V0ZSBieSBncm91cC4gICovCisjZGVmaW5lCVNfSVJXWEcJKFNfSVJXWFUgPj4gMykKKworI2RlZmluZQlTX0lST1RICShTX0lSR1JQID4+IDMpCS8qIFJlYWQgYnkgb3RoZXJzLiAgKi8KKyNkZWZpbmUJU19JV09USAkoU19JV0dSUCA+PiAzKQkvKiBXcml0ZSBieSBvdGhlcnMuICAqLworI2RlZmluZQlTX0lYT1RICShTX0lYR1JQID4+IDMpCS8qIEV4ZWN1dGUgYnkgb3RoZXJzLiAgKi8KKy8qIFJlYWQsIHdyaXRlLCBhbmQgZXhlY3V0ZSBieSBvdGhlcnMuICAqLworI2RlZmluZQlTX0lSV1hPCShTX0lSV1hHID4+IDMpCisKKworI2lmZGVmCV9fVVNFX0JTRAorLyogTWFjcm9zIGZvciBjb21tb24gbW9kZSBiaXQgbWFza3MuICAqLworIyBkZWZpbmUgQUNDRVNTUEVSTVMgKFNfSVJXWFV8U19JUldYR3xTX0lSV1hPKSAvKiAwNzc3ICovCisjIGRlZmluZSBBTExQRVJNUyAoU19JU1VJRHxTX0lTR0lEfFNfSVNWVFh8U19JUldYVXxTX0lSV1hHfFNfSVJXWE8pLyogMDc3NzcgKi8KKyMgZGVmaW5lIERFRkZJTEVNT0RFIChTX0lSVVNSfFNfSVdVU1J8U19JUkdSUHxTX0lXR1JQfFNfSVJPVEh8U19JV09USCkvKiAwNjY2Ki8KKworIyBkZWZpbmUgU19CTEtTSVpFCTUxMgkvKiBCbG9jayBzaXplIGZvciBgc3RfYmxvY2tzJy4gICovCisjZW5kaWYKKworCisjaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKKy8qIEdldCBmaWxlIGF0dHJpYnV0ZXMgZm9yIEZJTEUgYW5kIHB1dCB0aGVtIGluIEJVRi4gICovCitleHRlcm4gaW50IHN0YXQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGUsCisJCSBzdHJ1Y3Qgc3RhdCAqX19yZXN0cmljdCBfX2J1ZikgX19USFJPVyBfX25vbm51bGwgKCgxLCAyKSk7CisKKy8qIEdldCBmaWxlIGF0dHJpYnV0ZXMgZm9yIHRoZSBmaWxlLCBkZXZpY2UsIHBpcGUsIG9yIHNvY2tldAorICAgdGhhdCBmaWxlIGRlc2NyaXB0b3IgRkQgaXMgb3BlbiBvbiBhbmQgcHV0IHRoZW0gaW4gQlVGLiAgKi8KK2V4dGVybiBpbnQgZnN0YXQgKGludCBfX2ZkLCBzdHJ1Y3Qgc3RhdCAqX19idWYpIF9fVEhST1cgX19ub25udWxsICgoMikpOworI2Vsc2UKKyMgaWZkZWYgX19SRURJUkVDVF9OVEgKK2V4dGVybiBpbnQgX19SRURJUkVDVF9OVEggKHN0YXQsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlLAorCQkJCSAgc3RydWN0IHN0YXQgKl9fcmVzdHJpY3QgX19idWYpLCBzdGF0NjQpCisgICAgIF9fbm9ubnVsbCAoKDEsIDIpKTsKK2V4dGVybiBpbnQgX19SRURJUkVDVF9OVEggKGZzdGF0LCAoaW50IF9fZmQsIHN0cnVjdCBzdGF0ICpfX2J1ZiksIGZzdGF0NjQpCisgICAgIF9fbm9ubnVsbCAoKDIpKTsKKyMgZWxzZQorIyAgZGVmaW5lIHN0YXQgc3RhdDY0CisjICBkZWZpbmUgZnN0YXQgZnN0YXQ2NAorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgX19VU0VfTEFSR0VGSUxFNjQKK2V4dGVybiBpbnQgc3RhdDY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlLAorCQkgICBzdHJ1Y3Qgc3RhdDY0ICpfX3Jlc3RyaWN0IF9fYnVmKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDIpKTsKK2V4dGVybiBpbnQgZnN0YXQ2NCAoaW50IF9fZmQsIHN0cnVjdCBzdGF0NjQgKl9fYnVmKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDIpKTsKKyNlbmRpZgorCisjaWZkZWYgX19VU0VfQVRGSUxFCisvKiBTaW1pbGFyIHRvIHN0YXQsIGdldCB0aGUgYXR0cmlidXRlcyBmb3IgRklMRSBhbmQgcHV0IHRoZW0gaW4gQlVGLgorICAgUmVsYXRpdmUgcGF0aCBuYW1lcyBhcmUgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gRkQgdW5sZXNzIEZEIGlzCisgICBBVF9GRENXRC4gICovCisjIGlmbmRlZiBfX1VTRV9GSUxFX09GRlNFVDY0CitleHRlcm4gaW50IGZzdGF0YXQgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlLAorCQkgICAgc3RydWN0IHN0YXQgKl9fcmVzdHJpY3QgX19idWYsIGludCBfX2ZsYWcpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMiwgMykpOworIyBlbHNlCisjICBpZmRlZiBfX1JFRElSRUNUX05USAorZXh0ZXJuIGludCBfX1JFRElSRUNUX05USCAoZnN0YXRhdCwgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlLAorCQkJCSAgICAgc3RydWN0IHN0YXQgKl9fcmVzdHJpY3QgX19idWYsCisJCQkJICAgICBpbnQgX19mbGFnKSwKKwkJCSAgIGZzdGF0YXQ2NCkgX19ub25udWxsICgoMiwgMykpOworIyAgZWxzZQorIyAgIGRlZmluZSBmc3RhdGF0IGZzdGF0YXQ2NAorIyAgZW5kaWYKKyMgZW5kaWYKKworZXh0ZXJuIGludCBmc3RhdGF0NjQgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlLAorCQkgICAgICBzdHJ1Y3Qgc3RhdDY0ICpfX3Jlc3RyaWN0IF9fYnVmLCBpbnQgX19mbGFnKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDIsIDMpKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfX1VTRV9CU0QgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTl9FWFRFTkRFRAorIyBpZm5kZWYgX19VU0VfRklMRV9PRkZTRVQ2NAorLyogR2V0IGZpbGUgYXR0cmlidXRlcyBhYm91dCBGSUxFIGFuZCBwdXQgdGhlbSBpbiBCVUYuCisgICBJZiBGSUxFIGlzIGEgc3ltYm9saWMgbGluaywgZG8gbm90IGZvbGxvdyBpdC4gICovCitleHRlcm4gaW50IGxzdGF0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlLAorCQkgIHN0cnVjdCBzdGF0ICpfX3Jlc3RyaWN0IF9fYnVmKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDIpKTsKKyMgZWxzZQorIyAgaWZkZWYgX19SRURJUkVDVF9OVEgKK2V4dGVybiBpbnQgX19SRURJUkVDVF9OVEggKGxzdGF0LAorCQkJICAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGUsCisJCQkgICAgc3RydWN0IHN0YXQgKl9fcmVzdHJpY3QgX19idWYpLCBsc3RhdDY0KQorICAgICBfX25vbm51bGwgKCgxLCAyKSk7CisjICBlbHNlCisjICAgZGVmaW5lIGxzdGF0IGxzdGF0NjQKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmZGVmIF9fVVNFX0xBUkdFRklMRTY0CitleHRlcm4gaW50IGxzdGF0NjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGUsCisJCSAgICBzdHJ1Y3Qgc3RhdDY0ICpfX3Jlc3RyaWN0IF9fYnVmKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDIpKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBTZXQgZmlsZSBhY2Nlc3MgcGVybWlzc2lvbnMgZm9yIEZJTEUgdG8gTU9ERS4KKyAgIElmIEZJTEUgaXMgYSBzeW1ib2xpYyBsaW5rLCB0aGlzIGFmZmVjdHMgaXRzIHRhcmdldCBpbnN0ZWFkLiAgKi8KK2V4dGVybiBpbnQgY2htb2QgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX21vZGVfdCBfX21vZGUpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisjaWZkZWYgX19VU0VfQlNECisvKiBTZXQgZmlsZSBhY2Nlc3MgcGVybWlzc2lvbnMgZm9yIEZJTEUgdG8gTU9ERS4KKyAgIElmIEZJTEUgaXMgYSBzeW1ib2xpYyBsaW5rLCB0aGlzIGFmZmVjdHMgdGhlIGxpbmsgaXRzZWxmCisgICByYXRoZXIgdGhhbiBpdHMgdGFyZ2V0LiAgKi8KK2V4dGVybiBpbnQgbGNobW9kIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19tb2RlX3QgX19tb2RlKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKyNlbmRpZgorCisvKiBTZXQgZmlsZSBhY2Nlc3MgcGVybWlzc2lvbnMgb2YgdGhlIGZpbGUgRkQgaXMgb3BlbiBvbiB0byBNT0RFLiAgKi8KKyNpZiBkZWZpbmVkIF9fVVNFX0JTRCB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOX0VYVEVOREVECitleHRlcm4gaW50IGZjaG1vZCAoaW50IF9fZmQsIF9fbW9kZV90IF9fbW9kZSkgX19USFJPVzsKKyNlbmRpZgorCisjaWZkZWYgX19VU0VfQVRGSUxFCisvKiBTZXQgZmlsZSBhY2Nlc3MgcGVybWlzc2lvbnMgb2YgRklMRSByZWxhdGl2ZSB0bworICAgdGhlIGRpcmVjdG9yeSBGRCBpcyBvcGVuIG9uLiAgKi8KK2V4dGVybiBpbnQgZmNobW9kYXQgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19tb2RlX3QgbW9kZSwgaW50IF9fZmxhZykKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgyKSkgX193dXI7CisjZW5kaWYgLyogVXNlIEFURklMRS4gICovCisKKworCisvKiBTZXQgdGhlIGZpbGUgY3JlYXRpb24gbWFzayBvZiB0aGUgY3VycmVudCBwcm9jZXNzIHRvIE1BU0ssCisgICBhbmQgcmV0dXJuIHRoZSBvbGQgY3JlYXRpb24gbWFzay4gICovCitleHRlcm4gX19tb2RlX3QgdW1hc2sgKF9fbW9kZV90IF9fbWFzaykgX19USFJPVzsKKworI2lmZGVmCV9fVVNFX0dOVQorLyogR2V0IHRoZSBjdXJyZW50IGB1bWFzaycgdmFsdWUgd2l0aG91dCBjaGFuZ2luZyBpdC4KKyAgIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhdmFpbGFibGUgdW5kZXIgdGhlIEdOVSBIdXJkLiAgKi8KK2V4dGVybiBfX21vZGVfdCBnZXR1bWFzayAodm9pZCkgX19USFJPVzsKKyNlbmRpZgorCisvKiBDcmVhdGUgYSBuZXcgZGlyZWN0b3J5IG5hbWVkIFBBVEgsIHdpdGggcGVybWlzc2lvbiBiaXRzIE1PREUuICAqLworZXh0ZXJuIGludCBta2RpciAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fbW9kZV90IF9fbW9kZSkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKyNpZmRlZiBfX1VTRV9BVEZJTEUKKy8qIExpa2UgbWtkaXIsIGNyZWF0ZSBhIG5ldyBkaXJlY3Rvcnkgd2l0aCBwZXJtaXNzaW9uIGJpdHMgTU9ERS4gIEJ1dAorICAgaW50ZXJwcmV0IHJlbGF0aXZlIFBBVEggbmFtZXMgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBhc3NvY2lhdGVkCisgICB3aXRoIEZELiAgKi8KK2V4dGVybiBpbnQgbWtkaXJhdCAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19wYXRoLCBfX21vZGVfdCBfX21vZGUpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMikpOworI2VuZGlmCisKKy8qIENyZWF0ZSBhIGRldmljZSBmaWxlIG5hbWVkIFBBVEgsIHdpdGggcGVybWlzc2lvbiBhbmQgc3BlY2lhbCBiaXRzIE1PREUKKyAgIGFuZCBkZXZpY2UgbnVtYmVyIERFViAod2hpY2ggY2FuIGJlIGNvbnN0cnVjdGVkIGZyb20gbWFqb3IgYW5kIG1pbm9yCisgICBkZXZpY2UgbnVtYmVycyB3aXRoIHRoZSBgbWFrZWRldicgbWFjcm8gYWJvdmUpLiAgKi8KKyNpZiBkZWZpbmVkIF9fVVNFX01JU0MgfHwgZGVmaW5lZCBfX1VTRV9CU0QgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTl9FWFRFTkRFRAorZXh0ZXJuIGludCBta25vZCAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fbW9kZV90IF9fbW9kZSwgX19kZXZfdCBfX2RldikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisjZW5kaWYKKworI2lmZGVmIF9fVVNFX0FURklMRQorLyogTGlrZSBta25vZCwgY3JlYXRlIGEgbmV3IGRldmljZSBmaWxlIHdpdGggcGVybWlzc2lvbiBiaXRzIE1PREUgYW5kCisgICBkZXZpY2UgbnVtYmVyIERFVi4gIEJ1dCBpbnRlcnByZXQgcmVsYXRpdmUgUEFUSCBuYW1lcyByZWxhdGl2ZSB0bworICAgdGhlIGRpcmVjdG9yeSBhc3NvY2lhdGVkIHdpdGggRkQuICAqLworZXh0ZXJuIGludCBta25vZGF0IChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3BhdGgsIF9fbW9kZV90IF9fbW9kZSwKKwkJICAgIF9fZGV2X3QgX19kZXYpIF9fVEhST1cgX19ub25udWxsICgoMikpOworI2VuZGlmCisKKworLyogQ3JlYXRlIGEgbmV3IEZJRk8gbmFtZWQgUEFUSCwgd2l0aCBwZXJtaXNzaW9uIGJpdHMgTU9ERS4gICovCitleHRlcm4gaW50IG1rZmlmbyAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fbW9kZV90IF9fbW9kZSkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKyNpZmRlZiBfX1VTRV9BVEZJTEUKKy8qIExpa2UgbWtmaWZvLCBjcmVhdGUgYSBuZXcgRklGTyB3aXRoIHBlcm1pc3Npb24gYml0cyBNT0RFLiAgQnV0CisgICBpbnRlcnByZXQgcmVsYXRpdmUgUEFUSCBuYW1lcyByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IGFzc29jaWF0ZWQKKyAgIHdpdGggRkQuICAqLworZXh0ZXJuIGludCBta2ZpZm9hdCAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19wYXRoLCBfX21vZGVfdCBfX21vZGUpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMikpOworI2VuZGlmCisMCisjaWZkZWYgX19VU0VfQVRGSUxFCisvKiBTZXQgZmlsZSBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcyByZWxhdGl2ZSB0byBkaXJlY3RvcnkgZmlsZQorICAgZGVzY3JpcHRvci4gICovCitleHRlcm4gaW50IHV0aW1lbnNhdCAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19wYXRoLAorCQkgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyBfX3RpbWVzWzJdLAorCQkgICAgICBpbnQgX19mbGFncykKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgyKSk7CisjZW5kaWYKKworI2lmZGVmIF9fVVNFX0dOVQorLyogWFhYIFRoaXMgd2lsbCBjaGFuZ2UgdG8gdGhlIG1hY3JvIGZvciB0aGUgbmV4dCAyMDA4IFBPU0lYIHJldmlzaW9uLiAgKi8KKy8qIFNldCBmaWxlIGFjY2VzcyBhbmQgbW9kaWZpY2F0aW9uIHRpbWVzIG9mIHRoZSBmaWxlIGFzc29jaWF0ZWQgd2l0aCBGRC4gICovCitleHRlcm4gaW50IGZ1dGltZW5zIChpbnQgX19mZCwgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgX190aW1lc1syXSkgX19USFJPVzsKKyNlbmRpZgorDAorLyogVG8gYWxsb3cgdGhlIGBzdHJ1Y3Qgc3RhdCcgc3RydWN0dXJlIGFuZCB0aGUgZmlsZSB0eXBlIGBtb2RlX3QnCisgICBiaXRzIHRvIHZhcnkgd2l0aG91dCBjaGFuZ2luZyBzaGFyZWQgbGlicmFyeSBtYWpvciB2ZXJzaW9uIG51bWJlciwKKyAgIHRoZSBgc3RhdCcgZmFtaWx5IG9mIGZ1bmN0aW9ucyBhbmQgYG1rbm9kJyBhcmUgaW4gZmFjdCBpbmxpbmUKKyAgIHdyYXBwZXJzIGFyb3VuZCBjYWxscyB0byBgeHN0YXQnLCBgZnhzdGF0JywgYGx4c3RhdCcsIGFuZCBgeG1rbm9kJywKKyAgIHdoaWNoIGFsbCB0YWtlIGEgbGVhZGluZyB2ZXJzaW9uLW51bWJlciBhcmd1bWVudCBkZXNpZ25hdGluZyB0aGUKKyAgIGRhdGEgc3RydWN0dXJlIGFuZCBiaXRzIHVzZWQuICA8Yml0cy9zdGF0Lmg+IGRlZmluZXMgX1NUQVRfVkVSIHdpdGgKKyAgIHRoZSB2ZXJzaW9uIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIGBzdHJ1Y3Qgc3RhdCcgYXMgZGVmaW5lZCBpbgorICAgdGhhdCBmaWxlOyBhbmQgX01LTk9EX1ZFUiB3aXRoIHRoZSB2ZXJzaW9uIG51bWJlciBjb3JyZXNwb25kaW5nIHRvCisgICB0aGUgU19JRiogbWFjcm9zIGRlZmluZWQgdGhlcmVpbi4gIEl0IGlzIGFycmFuZ2VkIHRoYXQgd2hlbiBub3QKKyAgIGlubGluZWQgdGhlc2UgZnVuY3Rpb24gYXJlIGFsd2F5cyBzdGF0aWNhbGx5IGxpbmtlZDsgdGhhdCB3YXkgYQorICAgZHluYW1pY2FsbHktbGlua2VkIGV4ZWN1dGFibGUgYWx3YXlzIGVuY29kZXMgdGhlIHZlcnNpb24gbnVtYmVyCisgICBjb3JyZXNwb25kaW5nIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgdXNlcywgc28gdGhlIGB4JyBmdW5jdGlvbnMKKyAgIGluIHRoZSBzaGFyZWQgbGlicmFyeSBjYW4gYWRhcHQgd2l0aG91dCBuZWVkaW5nIHRvIHJlY29tcGlsZSBhbGwKKyAgIGNhbGxlcnMuICAqLworCisjaWZuZGVmIF9TVEFUX1ZFUgorIyBkZWZpbmUgX1NUQVRfVkVSCTAKKyNlbmRpZgorI2lmbmRlZiBfTUtOT0RfVkVSCisjIGRlZmluZSBfTUtOT0RfVkVSCTAKKyNlbmRpZgorCisvKiBXcmFwcGVycyBmb3Igc3RhdCBhbmQgbWtub2Qgc3lzdGVtIGNhbGxzLiAgKi8KKyNpZm5kZWYgX19VU0VfRklMRV9PRkZTRVQ2NAorZXh0ZXJuIGludCBfX2Z4c3RhdCAoaW50IF9fdmVyLCBpbnQgX19maWxkZXMsIHN0cnVjdCBzdGF0ICpfX3N0YXRfYnVmKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDMpKTsKK2V4dGVybiBpbnQgX194c3RhdCAoaW50IF9fdmVyLCBfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUsCisJCSAgICBzdHJ1Y3Qgc3RhdCAqX19zdGF0X2J1ZikgX19USFJPVyBfX25vbm51bGwgKCgyLCAzKSk7CitleHRlcm4gaW50IF9fbHhzdGF0IChpbnQgX192ZXIsIF9fY29uc3QgY2hhciAqX19maWxlbmFtZSwKKwkJICAgICBzdHJ1Y3Qgc3RhdCAqX19zdGF0X2J1ZikgX19USFJPVyBfX25vbm51bGwgKCgyLCAzKSk7CitleHRlcm4gaW50IF9fZnhzdGF0YXQgKGludCBfX3ZlciwgaW50IF9fZmlsZGVzLCBfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUsCisJCSAgICAgICBzdHJ1Y3Qgc3RhdCAqX19zdGF0X2J1ZiwgaW50IF9fZmxhZykKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgzLCA0KSk7CisjZWxzZQorIyBpZmRlZiBfX1JFRElSRUNUX05USAorZXh0ZXJuIGludCBfX1JFRElSRUNUX05USCAoX19meHN0YXQsIChpbnQgX192ZXIsIGludCBfX2ZpbGRlcywKKwkJCQkgICAgICBzdHJ1Y3Qgc3RhdCAqX19zdGF0X2J1ZiksIF9fZnhzdGF0NjQpCisgICAgIF9fbm9ubnVsbCAoKDMpKTsKK2V4dGVybiBpbnQgX19SRURJUkVDVF9OVEggKF9feHN0YXQsIChpbnQgX192ZXIsIF9fY29uc3QgY2hhciAqX19maWxlbmFtZSwKKwkJCQkgICAgIHN0cnVjdCBzdGF0ICpfX3N0YXRfYnVmKSwgX194c3RhdDY0KQorICAgICBfX25vbm51bGwgKCgyLCAzKSk7CitleHRlcm4gaW50IF9fUkVESVJFQ1RfTlRIIChfX2x4c3RhdCwgKGludCBfX3ZlciwgX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lLAorCQkJCSAgICAgIHN0cnVjdCBzdGF0ICpfX3N0YXRfYnVmKSwgX19seHN0YXQ2NCkKKyAgICAgX19ub25udWxsICgoMiwgMykpOworZXh0ZXJuIGludCBfX1JFRElSRUNUX05USCAoX19meHN0YXRhdCwgKGludCBfX3ZlciwgaW50IF9fZmlsZGVzLAorCQkJCQlfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUsCisJCQkJCXN0cnVjdCBzdGF0ICpfX3N0YXRfYnVmLCBpbnQgX19mbGFnKSwKKwkJCSAgIF9fZnhzdGF0YXQ2NCkgX19ub25udWxsICgoMywgNCkpOworCisjIGVsc2UKKyMgIGRlZmluZSBfX2Z4c3RhdCBfX2Z4c3RhdDY0CisjICBkZWZpbmUgX194c3RhdCBfX3hzdGF0NjQKKyMgIGRlZmluZSBfX2x4c3RhdCBfX2x4c3RhdDY0CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9fVVNFX0xBUkdFRklMRTY0CitleHRlcm4gaW50IF9fZnhzdGF0NjQgKGludCBfX3ZlciwgaW50IF9fZmlsZGVzLCBzdHJ1Y3Qgc3RhdDY0ICpfX3N0YXRfYnVmKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDMpKTsKK2V4dGVybiBpbnQgX194c3RhdDY0IChpbnQgX192ZXIsIF9fY29uc3QgY2hhciAqX19maWxlbmFtZSwKKwkJICAgICAgc3RydWN0IHN0YXQ2NCAqX19zdGF0X2J1ZikgX19USFJPVyBfX25vbm51bGwgKCgyLCAzKSk7CitleHRlcm4gaW50IF9fbHhzdGF0NjQgKGludCBfX3ZlciwgX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lLAorCQkgICAgICAgc3RydWN0IHN0YXQ2NCAqX19zdGF0X2J1ZikgX19USFJPVyBfX25vbm51bGwgKCgyLCAzKSk7CitleHRlcm4gaW50IF9fZnhzdGF0YXQ2NCAoaW50IF9fdmVyLCBpbnQgX19maWxkZXMsIF9fY29uc3QgY2hhciAqX19maWxlbmFtZSwKKwkJCSBzdHJ1Y3Qgc3RhdDY0ICpfX3N0YXRfYnVmLCBpbnQgX19mbGFnKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDMsIDQpKTsKKyNlbmRpZgorZXh0ZXJuIGludCBfX3hta25vZCAoaW50IF9fdmVyLCBfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19tb2RlX3QgX19tb2RlLAorCQkgICAgIF9fZGV2X3QgKl9fZGV2KSBfX1RIUk9XIF9fbm9ubnVsbCAoKDIsIDQpKTsKKworZXh0ZXJuIGludCBfX3hta25vZGF0IChpbnQgX192ZXIsIGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcGF0aCwKKwkJICAgICAgIF9fbW9kZV90IF9fbW9kZSwgX19kZXZfdCAqX19kZXYpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMywgNSkpOworCisjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiBfX0dOVUNfXyA+PSAyICYmIGRlZmluZWQgX19VU0VfRVhURVJOX0lOTElORVMKKy8qIElubGluZWQgdmVyc2lvbnMgb2YgdGhlIHJlYWwgc3RhdCBhbmQgbWtub2QgZnVuY3Rpb25zLiAgKi8KKworX19leHRlcm5faW5saW5lIGludAorX19OVEggKHN0YXQgKF9fY29uc3QgY2hhciAqX19wYXRoLCBzdHJ1Y3Qgc3RhdCAqX19zdGF0YnVmKSkKK3sKKyAgcmV0dXJuIF9feHN0YXQgKF9TVEFUX1ZFUiwgX19wYXRoLCBfX3N0YXRidWYpOworfQorCisjIGlmIGRlZmluZWQgX19VU0VfQlNEIHx8IGRlZmluZWQgX19VU0VfWE9QRU5fRVhURU5ERUQKK19fZXh0ZXJuX2lubGluZSBpbnQKK19fTlRIIChsc3RhdCAoX19jb25zdCBjaGFyICpfX3BhdGgsIHN0cnVjdCBzdGF0ICpfX3N0YXRidWYpKQoreworICByZXR1cm4gX19seHN0YXQgKF9TVEFUX1ZFUiwgX19wYXRoLCBfX3N0YXRidWYpOworfQorIyBlbmRpZgorCitfX2V4dGVybl9pbmxpbmUgaW50CitfX05USCAoZnN0YXQgKGludCBfX2ZkLCBzdHJ1Y3Qgc3RhdCAqX19zdGF0YnVmKSkKK3sKKyAgcmV0dXJuIF9fZnhzdGF0IChfU1RBVF9WRVIsIF9fZmQsIF9fc3RhdGJ1Zik7Cit9CisKKyMgaWZkZWYgX19VU0VfQVRGSUxFCitfX2V4dGVybl9pbmxpbmUgaW50CitfX05USCAoZnN0YXRhdCAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19maWxlbmFtZSwgc3RydWN0IHN0YXQgKl9fc3RhdGJ1ZiwKKwkJaW50IF9fZmxhZykpCit7CisgIHJldHVybiBfX2Z4c3RhdGF0IChfU1RBVF9WRVIsIF9fZmQsIF9fZmlsZW5hbWUsIF9fc3RhdGJ1ZiwgX19mbGFnKTsKK30KKyMgZW5kaWYKKworIyBpZiBkZWZpbmVkIF9fVVNFX01JU0MgfHwgZGVmaW5lZCBfX1VTRV9CU0QKK19fZXh0ZXJuX2lubGluZSBpbnQKK19fTlRIIChta25vZCAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fbW9kZV90IF9fbW9kZSwgX19kZXZfdCBfX2RldikpCit7CisgIHJldHVybiBfX3hta25vZCAoX01LTk9EX1ZFUiwgX19wYXRoLCBfX21vZGUsICZfX2Rldik7Cit9CisjIGVuZGlmCisKKyMgaWZkZWYgX19VU0VfQVRGSUxFCitfX2V4dGVybl9pbmxpbmUgaW50CitfX05USCAobWtub2RhdCAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19wYXRoLCBfX21vZGVfdCBfX21vZGUsCisJCV9fZGV2X3QgX19kZXYpKQoreworICByZXR1cm4gX194bWtub2RhdCAoX01LTk9EX1ZFUiwgX19mZCwgX19wYXRoLCBfX21vZGUsICZfX2Rldik7Cit9CisjIGVuZGlmCisKKyMgaWYgZGVmaW5lZCBfX1VTRV9MQVJHRUZJTEU2NCBcCisgICYmICghIGRlZmluZWQgX19VU0VfRklMRV9PRkZTRVQ2NCBcCisgICAgICB8fCAoZGVmaW5lZCBfX1JFRElSRUNUX05USCAmJiBkZWZpbmVkIF9fT1BUSU1JWkVfXykpCitfX2V4dGVybl9pbmxpbmUgaW50CitfX05USCAoc3RhdDY0IChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgc3RydWN0IHN0YXQ2NCAqX19zdGF0YnVmKSkKK3sKKyAgcmV0dXJuIF9feHN0YXQ2NCAoX1NUQVRfVkVSLCBfX3BhdGgsIF9fc3RhdGJ1Zik7Cit9CisKKyMgIGlmIGRlZmluZWQgX19VU0VfQlNEIHx8IGRlZmluZWQgX19VU0VfWE9QRU5fRVhURU5ERUQKK19fZXh0ZXJuX2lubGluZSBpbnQKK19fTlRIIChsc3RhdDY0IChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgc3RydWN0IHN0YXQ2NCAqX19zdGF0YnVmKSkKK3sKKyAgcmV0dXJuIF9fbHhzdGF0NjQgKF9TVEFUX1ZFUiwgX19wYXRoLCBfX3N0YXRidWYpOworfQorIyAgZW5kaWYKKworX19leHRlcm5faW5saW5lIGludAorX19OVEggKGZzdGF0NjQgKGludCBfX2ZkLCBzdHJ1Y3Qgc3RhdDY0ICpfX3N0YXRidWYpKQoreworICByZXR1cm4gX19meHN0YXQ2NCAoX1NUQVRfVkVSLCBfX2ZkLCBfX3N0YXRidWYpOworfQorCisjICBpZmRlZiBfX1VTRV9HTlUKK19fZXh0ZXJuX2lubGluZSBpbnQKK19fTlRIIChmc3RhdGF0NjQgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUsIHN0cnVjdCBzdGF0NjQgKl9fc3RhdGJ1ZiwKKwkJICBpbnQgX19mbGFnKSkKK3sKKyAgcmV0dXJuIF9fZnhzdGF0YXQ2NCAoX1NUQVRfVkVSLCBfX2ZkLCBfX2ZpbGVuYW1lLCBfX3N0YXRidWYsIF9fZmxhZyk7Cit9CisjICBlbmRpZgorCisjIGVuZGlmCisKKyNlbmRpZgorCitfX0VORF9ERUNMUworCisKKyNlbmRpZiAvKiBzeXMvc3RhdC5oICAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9zdGF0ZnMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvc3RhdGZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IyMjI2YgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvc3RhdGZzLmgKQEAgLTAsMCArMSw2OCBAQAorLyogRGVmaW5pdGlvbnMgZm9yIGdldHRpbmcgaW5mb3JtYXRpb24gYWJvdXQgYSBmaWxlc3lzdGVtLgorICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmCV9TWVNfU1RBVEZTX0gKKyNkZWZpbmUJX1NZU19TVEFURlNfSAkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCisvKiBHZXQgdGhlIHN5c3RlbS1zcGVjaWZpYyBkZWZpbml0aW9uIG9mIGBzdHJ1Y3Qgc3RhdGZzJy4gICovCisjaW5jbHVkZSA8Yml0cy9zdGF0ZnMuaD4KKworX19CRUdJTl9ERUNMUworCisvKiBSZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZpbGVzeXN0ZW0gb24gd2hpY2ggRklMRSByZXNpZGVzLiAgKi8KKyNpZm5kZWYgX19VU0VfRklMRV9PRkZTRVQ2NAorZXh0ZXJuIGludCBzdGF0ZnMgKF9fY29uc3QgY2hhciAqX19maWxlLCBzdHJ1Y3Qgc3RhdGZzICpfX2J1ZikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxLCAyKSk7CisjZWxzZQorIyBpZmRlZiBfX1JFRElSRUNUX05USAorZXh0ZXJuIGludCBfX1JFRElSRUNUX05USCAoc3RhdGZzLAorCQkJICAgKF9fY29uc3QgY2hhciAqX19maWxlLCBzdHJ1Y3Qgc3RhdGZzICpfX2J1ZiksCisJCQkgICBzdGF0ZnM2NCkgX19ub25udWxsICgoMSwgMikpOworIyBlbHNlCisjICBkZWZpbmUgc3RhdGZzIHN0YXRmczY0CisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAorZXh0ZXJuIGludCBzdGF0ZnM2NCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIHN0cnVjdCBzdGF0ZnM2NCAqX19idWYpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSwgMikpOworI2VuZGlmCisKKy8qIFJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmlsZXN5c3RlbSBjb250YWluaW5nIHRoZSBmaWxlIEZJTERFUworICAgcmVmZXJzIHRvLiAgKi8KKyNpZm5kZWYgX19VU0VfRklMRV9PRkZTRVQ2NAorZXh0ZXJuIGludCBmc3RhdGZzIChpbnQgX19maWxkZXMsIHN0cnVjdCBzdGF0ZnMgKl9fYnVmKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDIpKTsKKyNlbHNlCisjIGlmZGVmIF9fUkVESVJFQ1RfTlRICitleHRlcm4gaW50IF9fUkVESVJFQ1RfTlRIIChmc3RhdGZzLCAoaW50IF9fZmlsZGVzLCBzdHJ1Y3Qgc3RhdGZzICpfX2J1ZiksCisJCQkgICBmc3RhdGZzNjQpIF9fbm9ubnVsbCAoKDIpKTsKKyMgZWxzZQorIyAgZGVmaW5lIGZzdGF0ZnMgZnN0YXRmczY0CisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAorZXh0ZXJuIGludCBmc3RhdGZzNjQgKGludCBfX2ZpbGRlcywgc3RydWN0IHN0YXRmczY0ICpfX2J1ZikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgyKSk7CisjZW5kaWYKKworX19FTkRfREVDTFMKKworI2VuZGlmCS8qIHN5cy9zdGF0ZnMuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9zdGF0dmZzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3N0YXR2ZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDk2NjJiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9zdGF0dmZzLmgKQEAgLTAsMCArMSw5MSBAQAorLyogRGVmaW5pdGlvbnMgZm9yIGdldHRpbmcgaW5mb3JtYXRpb24gYWJvdXQgYSBmaWxlc3lzdGVtLgorICAgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmCV9TWVNfU1RBVFZGU19ICisjZGVmaW5lCV9TWVNfU1RBVFZGU19ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKy8qIEdldCB0aGUgc3lzdGVtLXNwZWNpZmljIGRlZmluaXRpb24gb2YgYHN0cnVjdCBzdGF0ZnMnLiAgKi8KKyNpbmNsdWRlIDxiaXRzL3N0YXR2ZnMuaD4KKworI2lmbmRlZiBfX1VTRV9GSUxFX09GRlNFVDY0CisjIGlmbmRlZiBfX2ZzYmxrY250X3RfZGVmaW5lZAordHlwZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsgLyogVHlwZSB0byBjb3VudCBmaWxlIHN5c3RlbSBibG9ja3MuICAqLworIyAgZGVmaW5lIF9fZnNibGtjbnRfdF9kZWZpbmVkCisjIGVuZGlmCisjIGlmbmRlZiBfX2ZzZmlsY250X3RfZGVmaW5lZAordHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsgLyogVHlwZSB0byBjb3VudCBmaWxlIHN5c3RlbSBpbm9kZXMuICAqLworIyAgZGVmaW5lIF9fZnNmaWxjbnRfdF9kZWZpbmVkCisjIGVuZGlmCisjZWxzZQorIyBpZm5kZWYgX19mc2Jsa2NudF90X2RlZmluZWQKK3R5cGVkZWYgX19mc2Jsa2NudDY0X3QgZnNibGtjbnRfdDsgLyogVHlwZSB0byBjb3VudCBmaWxlIHN5c3RlbSBibG9ja3MuICAqLworIyAgZGVmaW5lIF9fZnNibGtjbnRfdF9kZWZpbmVkCisjIGVuZGlmCisjIGlmbmRlZiBfX2ZzZmlsY250X3RfZGVmaW5lZAordHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudF90OyAvKiBUeXBlIHRvIGNvdW50IGZpbGUgc3lzdGVtIGlub2Rlcy4gICovCisjICBkZWZpbmUgX19mc2ZpbGNudF90X2RlZmluZWQKKyMgZW5kaWYKKyNlbmRpZgorCitfX0JFR0lOX0RFQ0xTCisKKy8qIFJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmlsZXN5c3RlbSBvbiB3aGljaCBGSUxFIHJlc2lkZXMuICAqLworI2lmbmRlZiBfX1VTRV9GSUxFX09GRlNFVDY0CitleHRlcm4gaW50IHN0YXR2ZnMgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGUsCisJCSAgICBzdHJ1Y3Qgc3RhdHZmcyAqX19yZXN0cmljdCBfX2J1ZikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxLCAyKSk7CisjZWxzZQorIyBpZmRlZiBfX1JFRElSRUNUX05USAorZXh0ZXJuIGludCBfX1JFRElSRUNUX05USCAoc3RhdHZmcywKKwkJCSAgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlLAorCQkJICAgIHN0cnVjdCBzdGF0dmZzICpfX3Jlc3RyaWN0IF9fYnVmKSwgc3RhdHZmczY0KQorICAgICBfX25vbm51bGwgKCgxLCAyKSk7CisjIGVsc2UKKyMgIGRlZmluZSBzdGF0dmZzIHN0YXR2ZnM2NAorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgX19VU0VfTEFSR0VGSUxFNjQKK2V4dGVybiBpbnQgc3RhdHZmczY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlLAorCQkgICAgICBzdHJ1Y3Qgc3RhdHZmczY0ICpfX3Jlc3RyaWN0IF9fYnVmKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDIpKTsKKyNlbmRpZgorCisvKiBSZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZpbGVzeXN0ZW0gY29udGFpbmluZyB0aGUgZmlsZSBGSUxERVMKKyAgIHJlZmVycyB0by4gICovCisjaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKK2V4dGVybiBpbnQgZnN0YXR2ZnMgKGludCBfX2ZpbGRlcywgc3RydWN0IHN0YXR2ZnMgKl9fYnVmKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDIpKTsKKyNlbHNlCisjIGlmZGVmIF9fUkVESVJFQ1RfTlRICitleHRlcm4gaW50IF9fUkVESVJFQ1RfTlRIIChmc3RhdHZmcywgKGludCBfX2ZpbGRlcywgc3RydWN0IHN0YXR2ZnMgKl9fYnVmKSwKKwkJCSAgIGZzdGF0dmZzNjQpIF9fbm9ubnVsbCAoKDIpKTsKKyMgZWxzZQorIyAgZGVmaW5lIGZzdGF0dmZzIGZzdGF0dmZzNjQKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIF9fVVNFX0xBUkdFRklMRTY0CitleHRlcm4gaW50IGZzdGF0dmZzNjQgKGludCBfX2ZpbGRlcywgc3RydWN0IHN0YXR2ZnM2NCAqX19idWYpCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMikpOworI2VuZGlmCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZgkvKiBzeXMvc3RhdHZmcy5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3N0cm9wdHMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvc3Ryb3B0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNWJjMDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3N0cm9wdHMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8c3Ryb3B0cy5oPgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9zd2FwLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3N3YXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmU3YmVmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9zd2FwLmgKQEAgLTAsMCArMSw0MyBAQAorLyogQ2FsbHMgdG8gZW5hYmxlIGFuZCBkaXNhYmxlIHN3YXBwaW5nIG9uIHNwZWNpZmllZCBsb2NhdGlvbnMuICBMaW51eCB2ZXJzaW9uLgorICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk4LCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9TWVNfU1dBUF9ICisKKyNkZWZpbmUgX1NZU19TV0FQX0gJMQorI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKy8qIFRoZSBzd2FwIHByaW9yaXR5IGlzIGVuY29kZWQgYXM6CisgICAocHJpbyA8PCBTV0FQX0ZMQUdfUFJJT19TSElGVCkgJiBTV0FQX0ZMQUdfUFJJT19NQVNLCisqLworI2RlZmluZQlTV0FQX0ZMQUdfUFJFRkVSCTB4ODAwMAkvKiBTZXQgaWYgc3dhcCBwcmlvcml0eSBpcyBzcGVjaWZpZWQuICovCisjZGVmaW5lCVNXQVBfRkxBR19QUklPX01BU0sJMHg3ZmZmCisjZGVmaW5lCVNXQVBfRkxBR19QUklPX1NISUZUCTAKKworX19CRUdJTl9ERUNMUworCisvKiBNYWtlIHRoZSBibG9jayBzcGVjaWFsIGRldmljZSBQQVRIIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtIGZvciBzd2FwcGluZy4KKyAgIFRoaXMgY2FsbCBpcyByZXN0cmljdGVkIHRvIHRoZSBzdXBlci11c2VyLiAgKi8KK2V4dGVybiBpbnQgc3dhcG9uIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgaW50IF9fZmxhZ3MpIF9fVEhST1c7CisKKy8qIFN0b3AgdXNpbmcgYmxvY2sgc3BlY2lhbCBkZXZpY2UgUEFUSCBmb3Igc3dhcHBpbmcuICAqLworZXh0ZXJuIGludCBzd2Fwb2ZmIChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgX19USFJPVzsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TWVNfU1dBUF9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3N5c2NhbGwuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvc3lzY2FsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NWNhMzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3N5c2NhbGwuaApAQCAtMCwwICsxLDM1IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1NZU0NBTExfSAorI2RlZmluZSBfU1lTQ0FMTF9ICTEKKworLyogVGhpcyBmaWxlIHNob3VsZCBsaXN0IHRoZSBudW1iZXJzIG9mIHRoZSBzeXN0ZW0gdGhlIHN5c3RlbSBrbm93cy4KKyAgIEJ1dCBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIHRoaXMgd2UgdXNlIHRoZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKyAgIGZyb20gdGhlIGtlcm5lbCBzb3VyY2VzLiAgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisKKyNpZm5kZWYgX0xJQkMKKy8qIFRoZSBMaW51eCBrZXJuZWwgaGVhZGVyIGZpbGUgZGVmaW5lcyBtYWNyb3MgYF9fTlJfPG5hbWU+JywgYnV0IHNvbWUKKyAgIHByb2dyYW1zIGV4cGVjdCB0aGUgdHJhZGl0aW9uYWwgZm9ybSBgU1lTXzxuYW1lPicuICBTbyBpbiBidWlsZGluZyBsaWJjCisgICB3ZSBzY2FuIHRoZSBrZXJuZWwncyBsaXN0IGFuZCBwcm9kdWNlIDxiaXRzL3N5c2NhbGwuaD4gd2l0aCBtYWNyb3MgZm9yCisgICBhbGwgdGhlIGBTWVNfJyBuYW1lcy4gICovCisjIGluY2x1ZGUgPGJpdHMvc3lzY2FsbC5oPgorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9zeXNjdGwuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvc3lzY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEwZWZhYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvc3lzY3RsLmgKQEAgLTAsMCArMSw3MiBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk5LCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmCV9TWVNfU1lTQ1RMX0gKKyNkZWZpbmUJX1NZU19TWVNDVExfSAkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorI2RlZmluZSBfX25lZWRfc2l6ZV90CisjaW5jbHVkZSA8c3RkZGVmLmg+CisvKiBQcmV2ZW50IG1vcmUga2VybmVsIGhlYWRlcnMgdGhhbiBuZWNlc3NhcnkgdG8gYmUgaW5jbHVkZWQuICAqLworI2lmbmRlZiBfTElOVVhfS0VSTkVMX0gKKyMgZGVmaW5lIF9MSU5VWF9LRVJORUxfSAkxCisjIGRlZmluZSBfX3VuZGVmX0xJTlVYX0tFUk5FTF9ICisjZW5kaWYKKyNpZm5kZWYgX0xJTlVYX1RZUEVTX0gKKyMgZGVmaW5lIF9MSU5VWF9UWVBFU19ICQkxCisjIGRlZmluZSBfX3VuZGVmX0xJTlVYX1RZUEVTX0gKKyNlbmRpZgorI2lmbmRlZiBfTElOVVhfTElTVF9ICisjIGRlZmluZSBfTElOVVhfTElTVF9ICQkxCisjIGRlZmluZSBfX3VuZGVmX0xJTlVYX0xJU1RfSAorI2VuZGlmCisjaWZuZGVmIF9fTElOVVhfQ09NUElMRVJfSAorIyBkZWZpbmUgX19MSU5VWF9DT01QSUxFUl9ICTEKKyMgZGVmaW5lIF9fdXNlcgorIyBkZWZpbmUgX191bmRlZl9fTElOVVhfQ09NUElMRVJfSAorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKworI2lmZGVmIF9fdW5kZWZfTElOVVhfS0VSTkVMX0gKKyMgdW5kZWYgX0xJTlVYX0tFUk5FTF9ICisjIHVuZGVmIF9fdW5kZWZfTElOVVhfS0VSTkVMX0gKKyNlbmRpZgorI2lmZGVmIF9fdW5kZWZfTElOVVhfVFlQRVNfSAorIyB1bmRlZiBfTElOVVhfVFlQRVNfSAorIyB1bmRlZiBfX3VuZGVmX0xJTlVYX1RZUEVTX0gKKyNlbmRpZgorI2lmZGVmIF9fdW5kZWZfTElOVVhfTElTVF9ICisjIHVuZGVmIF9MSU5VWF9MSVNUX0gKKyMgdW5kZWYgX191bmRlZl9MSU5VWF9MSVNUX0gKKyNlbmRpZgorI2lmZGVmIF9fdW5kZWZfX0xJTlVYX0NPTVBJTEVSX0gKKyMgdW5kZWYgX19MSU5VWF9DT01QSUxFUl9ICisjIHVuZGVmIF9fdXNlcgorIyB1bmRlZiBfX3VuZGVmX19MSU5VWF9DT01QSUxFUl9ICisjZW5kaWYKKworX19CRUdJTl9ERUNMUworCisvKiBSZWFkIG9yIHdyaXRlIHN5c3RlbSBwYXJhbWV0ZXJzLiAgKi8KK2V4dGVybiBpbnQgc3lzY3RsIChpbnQgKl9fbmFtZSwgaW50IF9fbmxlbiwgdm9pZCAqX19vbGR2YWwsCisJCSAgIHNpemVfdCAqX19vbGRsZW5wLCB2b2lkICpfX25ld3ZhbCwgc2l6ZV90IF9fbmV3bGVuKSBfX1RIUk9XOworCitfX0VORF9ERUNMUworCisjZW5kaWYJLyogX1NZU19TWVNDVExfSCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9zeXNpbmZvLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3N5c2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjcyN2IyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy9zeXNpbmZvLmgKQEAgLTAsMCArMSw0OCBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk5LCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9TWVNfU1lTSU5GT19ICisjZGVmaW5lIF9TWVNfU1lTSU5GT19ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKy8qIEdldCBzeXNpbmZvIHN0cnVjdHVyZSBmcm9tIGtlcm5lbCBoZWFkZXIuICAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCitfX0JFR0lOX0RFQ0xTCisKKy8qIFJldHVybnMgaW5mb3JtYXRpb24gb24gb3ZlcmFsbCBzeXN0ZW0gc3RhdGlzdGljcy4gICovCitleHRlcm4gaW50IHN5c2luZm8gKHN0cnVjdCBzeXNpbmZvICpfX2luZm8pIF9fVEhST1c7CisKKworLyogUmV0dXJuIG51bWJlciBvZiBjb25maWd1cmVkIHByb2Nlc3NvcnMuICAqLworZXh0ZXJuIGludCBnZXRfbnByb2NzX2NvbmYgKHZvaWQpIF9fVEhST1c7CisKKy8qIFJldHVybiBudW1iZXIgb2YgYXZhaWxhYmxlIHByb2Nlc3NvcnMuICAqLworZXh0ZXJuIGludCBnZXRfbnByb2NzICh2b2lkKSBfX1RIUk9XOworCisKKy8qIFJldHVybiBudW1iZXIgb2YgcGh5c2ljYWwgcGFnZXMgb2YgbWVtb3J5IGluIHRoZSBzeXN0ZW0uICAqLworZXh0ZXJuIGxvbmcgaW50IGdldF9waHlzX3BhZ2VzICh2b2lkKSBfX1RIUk9XOworCisvKiBSZXR1cm4gbnVtYmVyIG9mIGF2YWlsYWJsZSBwaHlzaWNhbCBwYWdlcyBvZiBtZW1vcnkgaW4gdGhlIHN5c3RlbS4gICovCitleHRlcm4gbG9uZyBpbnQgZ2V0X2F2cGh5c19wYWdlcyAodm9pZCkgX19USFJPVzsKKworX19FTkRfREVDTFMKKworI2VuZGlmCS8qIHN5cy9zeXNpbmZvLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvc3lzbG9nLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3N5c2xvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZGExY2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3N5c2xvZy5oCkBAIC0wLDAgKzEsMjE1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTgyLCAxOTg2LCAxOTg4LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKXN5c2xvZy5oCTguMSAoQmVya2VsZXkpIDYvMi85MworICovCisKKyNpZm5kZWYgX1NZU19TWVNMT0dfSAorI2RlZmluZSBfU1lTX1NZU0xPR19IIDEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjZGVmaW5lIF9fbmVlZF9fX3ZhX2xpc3QKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworLyogVGhpcyBmaWxlIGRlZmluZXMgX1BBVEhfTE9HLiAgKi8KKyNpbmNsdWRlIDxiaXRzL3N5c2xvZy1wYXRoLmg+CisKKy8qCisgKiBwcmlvcml0aWVzL2ZhY2lsaXRpZXMgYXJlIGVuY29kZWQgaW50byBhIHNpbmdsZSAzMi1iaXQgcXVhbnRpdHksIHdoZXJlIHRoZQorICogYm90dG9tIDMgYml0cyBhcmUgdGhlIHByaW9yaXR5ICgwLTcpIGFuZCB0aGUgdG9wIDI4IGJpdHMgYXJlIHRoZSBmYWNpbGl0eQorICogKDAtYmlnIG51bWJlcikuICBCb3RoIHRoZSBwcmlvcml0aWVzIGFuZCB0aGUgZmFjaWxpdGllcyBtYXAgcm91Z2hseQorICogb25lLXRvLW9uZSB0byBzdHJpbmdzIGluIHRoZSBzeXNsb2dkKDgpIHNvdXJjZSBjb2RlLiAgVGhpcyBtYXBwaW5nIGlzCisgKiBpbmNsdWRlZCBpbiB0aGlzIGZpbGUuCisgKgorICogcHJpb3JpdGllcyAodGhlc2UgYXJlIG9yZGVyZWQpCisgKi8KKyNkZWZpbmUJTE9HX0VNRVJHCTAJLyogc3lzdGVtIGlzIHVudXNhYmxlICovCisjZGVmaW5lCUxPR19BTEVSVAkxCS8qIGFjdGlvbiBtdXN0IGJlIHRha2VuIGltbWVkaWF0ZWx5ICovCisjZGVmaW5lCUxPR19DUklUCTIJLyogY3JpdGljYWwgY29uZGl0aW9ucyAqLworI2RlZmluZQlMT0dfRVJSCQkzCS8qIGVycm9yIGNvbmRpdGlvbnMgKi8KKyNkZWZpbmUJTE9HX1dBUk5JTkcJNAkvKiB3YXJuaW5nIGNvbmRpdGlvbnMgKi8KKyNkZWZpbmUJTE9HX05PVElDRQk1CS8qIG5vcm1hbCBidXQgc2lnbmlmaWNhbnQgY29uZGl0aW9uICovCisjZGVmaW5lCUxPR19JTkZPCTYJLyogaW5mb3JtYXRpb25hbCAqLworI2RlZmluZQlMT0dfREVCVUcJNwkvKiBkZWJ1Zy1sZXZlbCBtZXNzYWdlcyAqLworCisjZGVmaW5lCUxPR19QUklNQVNLCTB4MDcJLyogbWFzayB0byBleHRyYWN0IHByaW9yaXR5IHBhcnQgKGludGVybmFsKSAqLworCQkJCS8qIGV4dHJhY3QgcHJpb3JpdHkgKi8KKyNkZWZpbmUJTE9HX1BSSShwKQkoKHApICYgTE9HX1BSSU1BU0spCisjZGVmaW5lCUxPR19NQUtFUFJJKGZhYywgcHJpKQkoKChmYWMpIDw8IDMpIHwgKHByaSkpCisKKyNpZmRlZiBTWVNMT0dfTkFNRVMKKyNkZWZpbmUJSU5URVJOQUxfTk9QUkkJMHgxMAkvKiB0aGUgIm5vIHByaW9yaXR5IiBwcmlvcml0eSAqLworCQkJCS8qIG1hcmsgImZhY2lsaXR5IiAqLworI2RlZmluZQlJTlRFUk5BTF9NQVJLCUxPR19NQUtFUFJJKExPR19ORkFDSUxJVElFUywgMCkKK3R5cGVkZWYgc3RydWN0IF9jb2RlIHsKKwljaGFyCSpjX25hbWU7CisJaW50CWNfdmFsOworfSBDT0RFOworCitDT0RFIHByaW9yaXR5bmFtZXNbXSA9CisgIHsKKyAgICB7ICJhbGVydCIsIExPR19BTEVSVCB9LAorICAgIHsgImNyaXQiLCBMT0dfQ1JJVCB9LAorICAgIHsgImRlYnVnIiwgTE9HX0RFQlVHIH0sCisgICAgeyAiZW1lcmciLCBMT0dfRU1FUkcgfSwKKyAgICB7ICJlcnIiLCBMT0dfRVJSIH0sCisgICAgeyAiZXJyb3IiLCBMT0dfRVJSIH0sCQkvKiBERVBSRUNBVEVEICovCisgICAgeyAiaW5mbyIsIExPR19JTkZPIH0sCisgICAgeyAibm9uZSIsIElOVEVSTkFMX05PUFJJIH0sCQkvKiBJTlRFUk5BTCAqLworICAgIHsgIm5vdGljZSIsIExPR19OT1RJQ0UgfSwKKyAgICB7ICJwYW5pYyIsIExPR19FTUVSRyB9LAkJLyogREVQUkVDQVRFRCAqLworICAgIHsgIndhcm4iLCBMT0dfV0FSTklORyB9LAkJLyogREVQUkVDQVRFRCAqLworICAgIHsgIndhcm5pbmciLCBMT0dfV0FSTklORyB9LAorICAgIHsgTlVMTCwgLTEgfQorICB9OworI2VuZGlmCisKKy8qIGZhY2lsaXR5IGNvZGVzICovCisjZGVmaW5lCUxPR19LRVJOCSgwPDwzKQkvKiBrZXJuZWwgbWVzc2FnZXMgKi8KKyNkZWZpbmUJTE9HX1VTRVIJKDE8PDMpCS8qIHJhbmRvbSB1c2VyLWxldmVsIG1lc3NhZ2VzICovCisjZGVmaW5lCUxPR19NQUlMCSgyPDwzKQkvKiBtYWlsIHN5c3RlbSAqLworI2RlZmluZQlMT0dfREFFTU9OCSgzPDwzKQkvKiBzeXN0ZW0gZGFlbW9ucyAqLworI2RlZmluZQlMT0dfQVVUSAkoNDw8MykJLyogc2VjdXJpdHkvYXV0aG9yaXphdGlvbiBtZXNzYWdlcyAqLworI2RlZmluZQlMT0dfU1lTTE9HCSg1PDwzKQkvKiBtZXNzYWdlcyBnZW5lcmF0ZWQgaW50ZXJuYWxseSBieSBzeXNsb2dkICovCisjZGVmaW5lCUxPR19MUFIJCSg2PDwzKQkvKiBsaW5lIHByaW50ZXIgc3Vic3lzdGVtICovCisjZGVmaW5lCUxPR19ORVdTCSg3PDwzKQkvKiBuZXR3b3JrIG5ld3Mgc3Vic3lzdGVtICovCisjZGVmaW5lCUxPR19VVUNQCSg4PDwzKQkvKiBVVUNQIHN1YnN5c3RlbSAqLworI2RlZmluZQlMT0dfQ1JPTgkoOTw8MykJLyogY2xvY2sgZGFlbW9uICovCisjZGVmaW5lCUxPR19BVVRIUFJJVgkoMTA8PDMpCS8qIHNlY3VyaXR5L2F1dGhvcml6YXRpb24gbWVzc2FnZXMgKHByaXZhdGUpICovCisjZGVmaW5lCUxPR19GVFAJCSgxMTw8MykJLyogZnRwIGRhZW1vbiAqLworCisJLyogb3RoZXIgY29kZXMgdGhyb3VnaCAxNSByZXNlcnZlZCBmb3Igc3lzdGVtIHVzZSAqLworI2RlZmluZQlMT0dfTE9DQUwwCSgxNjw8MykJLyogcmVzZXJ2ZWQgZm9yIGxvY2FsIHVzZSAqLworI2RlZmluZQlMT0dfTE9DQUwxCSgxNzw8MykJLyogcmVzZXJ2ZWQgZm9yIGxvY2FsIHVzZSAqLworI2RlZmluZQlMT0dfTE9DQUwyCSgxODw8MykJLyogcmVzZXJ2ZWQgZm9yIGxvY2FsIHVzZSAqLworI2RlZmluZQlMT0dfTE9DQUwzCSgxOTw8MykJLyogcmVzZXJ2ZWQgZm9yIGxvY2FsIHVzZSAqLworI2RlZmluZQlMT0dfTE9DQUw0CSgyMDw8MykJLyogcmVzZXJ2ZWQgZm9yIGxvY2FsIHVzZSAqLworI2RlZmluZQlMT0dfTE9DQUw1CSgyMTw8MykJLyogcmVzZXJ2ZWQgZm9yIGxvY2FsIHVzZSAqLworI2RlZmluZQlMT0dfTE9DQUw2CSgyMjw8MykJLyogcmVzZXJ2ZWQgZm9yIGxvY2FsIHVzZSAqLworI2RlZmluZQlMT0dfTE9DQUw3CSgyMzw8MykJLyogcmVzZXJ2ZWQgZm9yIGxvY2FsIHVzZSAqLworCisjZGVmaW5lCUxPR19ORkFDSUxJVElFUwkyNAkvKiBjdXJyZW50IG51bWJlciBvZiBmYWNpbGl0aWVzICovCisjZGVmaW5lCUxPR19GQUNNQVNLCTB4MDNmOAkvKiBtYXNrIHRvIGV4dHJhY3QgZmFjaWxpdHkgcGFydCAqLworCQkJCS8qIGZhY2lsaXR5IG9mIHByaSAqLworI2RlZmluZQlMT0dfRkFDKHApCSgoKHApICYgTE9HX0ZBQ01BU0spID4+IDMpCisKKyNpZmRlZiBTWVNMT0dfTkFNRVMKK0NPREUgZmFjaWxpdHluYW1lc1tdID0KKyAgeworICAgIHsgImF1dGgiLCBMT0dfQVVUSCB9LAorICAgIHsgImF1dGhwcml2IiwgTE9HX0FVVEhQUklWIH0sCisgICAgeyAiY3JvbiIsIExPR19DUk9OIH0sCisgICAgeyAiZGFlbW9uIiwgTE9HX0RBRU1PTiB9LAorICAgIHsgImZ0cCIsIExPR19GVFAgfSwKKyAgICB7ICJrZXJuIiwgTE9HX0tFUk4gfSwKKyAgICB7ICJscHIiLCBMT0dfTFBSIH0sCisgICAgeyAibWFpbCIsIExPR19NQUlMIH0sCisgICAgeyAibWFyayIsIElOVEVSTkFMX01BUksgfSwJCS8qIElOVEVSTkFMICovCisgICAgeyAibmV3cyIsIExPR19ORVdTIH0sCisgICAgeyAic2VjdXJpdHkiLCBMT0dfQVVUSCB9LAkJLyogREVQUkVDQVRFRCAqLworICAgIHsgInN5c2xvZyIsIExPR19TWVNMT0cgfSwKKyAgICB7ICJ1c2VyIiwgTE9HX1VTRVIgfSwKKyAgICB7ICJ1dWNwIiwgTE9HX1VVQ1AgfSwKKyAgICB7ICJsb2NhbDAiLCBMT0dfTE9DQUwwIH0sCisgICAgeyAibG9jYWwxIiwgTE9HX0xPQ0FMMSB9LAorICAgIHsgImxvY2FsMiIsIExPR19MT0NBTDIgfSwKKyAgICB7ICJsb2NhbDMiLCBMT0dfTE9DQUwzIH0sCisgICAgeyAibG9jYWw0IiwgTE9HX0xPQ0FMNCB9LAorICAgIHsgImxvY2FsNSIsIExPR19MT0NBTDUgfSwKKyAgICB7ICJsb2NhbDYiLCBMT0dfTE9DQUw2IH0sCisgICAgeyAibG9jYWw3IiwgTE9HX0xPQ0FMNyB9LAorICAgIHsgTlVMTCwgLTEgfQorICB9OworI2VuZGlmCisKKy8qCisgKiBhcmd1bWVudHMgdG8gc2V0bG9nbWFzay4KKyAqLworI2RlZmluZQlMT0dfTUFTSyhwcmkpCSgxIDw8IChwcmkpKQkJLyogbWFzayBmb3Igb25lIHByaW9yaXR5ICovCisjZGVmaW5lCUxPR19VUFRPKHByaSkJKCgxIDw8ICgocHJpKSsxKSkgLSAxKQkvKiBhbGwgcHJpb3JpdGllcyB0aHJvdWdoIHByaSAqLworCisvKgorICogT3B0aW9uIGZsYWdzIGZvciBvcGVubG9nLgorICoKKyAqIExPR19PREVMQVkgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuCisgKiBMT0dfTkRFTEFZIGlzIHRoZSBpbnZlcnNlIG9mIHdoYXQgaXQgdXNlZCB0byBiZS4KKyAqLworI2RlZmluZQlMT0dfUElECQkweDAxCS8qIGxvZyB0aGUgcGlkIHdpdGggZWFjaCBtZXNzYWdlICovCisjZGVmaW5lCUxPR19DT05TCTB4MDIJLyogbG9nIG9uIHRoZSBjb25zb2xlIGlmIGVycm9ycyBpbiBzZW5kaW5nICovCisjZGVmaW5lCUxPR19PREVMQVkJMHgwNAkvKiBkZWxheSBvcGVuIHVudGlsIGZpcnN0IHN5c2xvZygpIChkZWZhdWx0KSAqLworI2RlZmluZQlMT0dfTkRFTEFZCTB4MDgJLyogZG9uJ3QgZGVsYXkgb3BlbiAqLworI2RlZmluZQlMT0dfTk9XQUlUCTB4MTAJLyogZG9uJ3Qgd2FpdCBmb3IgY29uc29sZSBmb3JrczogREVQUkVDQVRFRCAqLworI2RlZmluZQlMT0dfUEVSUk9SCTB4MjAJLyogbG9nIHRvIHN0ZGVyciBhcyB3ZWxsICovCisKK19fQkVHSU5fREVDTFMKKworLyogQ2xvc2UgZGVzY3JpcHRvciB1c2VkIHRvIHdyaXRlIHRvIHN5c3RlbSBsb2dnZXIuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIHZvaWQgY2xvc2Vsb2cgKHZvaWQpOworCisvKiBPcGVuIGNvbm5lY3Rpb24gdG8gc3lzdGVtIGxvZ2dlci4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gdm9pZCBvcGVubG9nIChfX2NvbnN0IGNoYXIgKl9faWRlbnQsIGludCBfX29wdGlvbiwgaW50IF9fZmFjaWxpdHkpOworCisvKiBTZXQgdGhlIGxvZyBtYXNrIGxldmVsLiAgKi8KK2V4dGVybiBpbnQgc2V0bG9nbWFzayAoaW50IF9fbWFzaykgX19USFJPVzsKKworLyogR2VuZXJhdGUgYSBsb2cgbWVzc2FnZSB1c2luZyBGTVQgc3RyaW5nIGFuZCBvcHRpb24gYXJndW1lbnRzLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiB2b2lkIHN5c2xvZyAoaW50IF9fcHJpLCBfX2NvbnN0IGNoYXIgKl9fZm10LCAuLi4pCisgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOworCisjaWZkZWYgX19VU0VfQlNECisvKiBHZW5lcmF0ZSBhIGxvZyBtZXNzYWdlIHVzaW5nIEZNVCBhbmQgdXNpbmcgYXJndW1lbnRzIHBvaW50ZWQgdG8gYnkgQVAuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGl0IGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiB2b2lkIHZzeXNsb2cgKGludCBfX3ByaSwgX19jb25zdCBjaGFyICpfX2ZtdCwgX19nbnVjX3ZhX2xpc3QgX19hcCkKKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CisjZW5kaWYKKworCisvKiBEZWZpbmUgc29tZSBtYWNyb3MgaGVscGluZyB0byBjYXRjaCBidWZmZXIgb3ZlcmZsb3dzLiAgKi8KKyNpZiBfX1VTRV9GT1JUSUZZX0xFVkVMID4gMCAmJiBkZWZpbmVkIF9fZXh0ZXJuX2Fsd2F5c19pbmxpbmUKKyMgaW5jbHVkZSA8Yml0cy9zeXNsb2cuaD4KKyNlbmRpZgorI2lmZGVmIF9fTERCTF9DT01QQVQKKyMgaW5jbHVkZSA8Yml0cy9zeXNsb2ctbGRibC5oPgorI2VuZGlmCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBzeXMvc3lzbG9nLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYjNhMTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qIERlZmluaXRpb25zIG9mIG1hY3JvcyB0byBhY2Nlc3MgYGRldl90JyB2YWx1ZXMuCisgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTksIDIwMDMsIDIwMDQsIDIwMDcKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9TWVNfU1lTTUFDUk9TX0gKKyNkZWZpbmUgX1NZU19TWVNNQUNST1NfSAkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCisvKiBJZiB0aGUgY29tcGlsZXIgZG9lcyBub3Qga25vdyBsb25nIGxvbmcgaXQgaXMgb3V0IG9mIGx1Y2suICBXZSBhcmUKKyAgIG5vdCBnb2luZyB0byBoYWNrIHdlaXJkIGhhY2tzIHRvIHN1cHBvcnQgdGhlIGRldl90IHJlcHJlc2VudGF0aW9uCisgICB0aGV5IG5lZWQuICAqLworI2lmZGVmIF9fR0xJQkNfSEFWRV9MT05HX0xPTkcKK19fZXh0ZW5zaW9uX18KK2V4dGVybiB1bnNpZ25lZCBpbnQgZ251X2Rldl9tYWpvciAodW5zaWduZWQgbG9uZyBsb25nIGludCBfX2RldikKKyAgICAgX19USFJPVzsKK19fZXh0ZW5zaW9uX18KK2V4dGVybiB1bnNpZ25lZCBpbnQgZ251X2Rldl9taW5vciAodW5zaWduZWQgbG9uZyBsb25nIGludCBfX2RldikKKyAgICAgX19USFJPVzsKK19fZXh0ZW5zaW9uX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IGdudV9kZXZfbWFrZWRldiAodW5zaWduZWQgaW50IF9fbWFqb3IsCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgX19taW5vcikKKyAgICAgX19USFJPVzsKKworIyBpZiBkZWZpbmVkIF9fR05VQ19fICYmIF9fR05VQ19fID49IDIgJiYgZGVmaW5lZCBfX1VTRV9FWFRFUk5fSU5MSU5FUworX19leHRlbnNpb25fXyBfX2V4dGVybl9pbmxpbmUgdW5zaWduZWQgaW50CitfX05USCAoZ251X2Rldl9tYWpvciAodW5zaWduZWQgbG9uZyBsb25nIGludCBfX2RldikpCit7CisgIHJldHVybiAoKF9fZGV2ID4+IDgpICYgMHhmZmYpIHwgKCh1bnNpZ25lZCBpbnQpIChfX2RldiA+PiAzMikgJiB+MHhmZmYpOworfQorCitfX2V4dGVuc2lvbl9fIF9fZXh0ZXJuX2lubGluZSB1bnNpZ25lZCBpbnQKK19fTlRIIChnbnVfZGV2X21pbm9yICh1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fZGV2KSkKK3sKKyAgcmV0dXJuIChfX2RldiAmIDB4ZmYpIHwgKCh1bnNpZ25lZCBpbnQpIChfX2RldiA+PiAxMikgJiB+MHhmZik7Cit9CisKK19fZXh0ZW5zaW9uX18gX19leHRlcm5faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKK19fTlRIIChnbnVfZGV2X21ha2VkZXYgKHVuc2lnbmVkIGludCBfX21ham9yLCB1bnNpZ25lZCBpbnQgX19taW5vcikpCit7CisgIHJldHVybiAoKF9fbWlub3IgJiAweGZmKSB8ICgoX19tYWpvciAmIDB4ZmZmKSA8PCA4KQorCSAgfCAoKCh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSAoX19taW5vciAmIH4weGZmKSkgPDwgMTIpCisJICB8ICgoKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpIChfX21ham9yICYgfjB4ZmZmKSkgPDwgMzIpKTsKK30KKyMgZW5kaWYKKworCisvKiBBY2Nlc3MgdGhlIGZ1bmN0aW9ucyB3aXRoIHRoZWlyIHRyYWRpdGlvbmFsIG5hbWVzLiAgKi8KKyMgZGVmaW5lIG1ham9yKGRldikgZ251X2Rldl9tYWpvciAoZGV2KQorIyBkZWZpbmUgbWlub3IoZGV2KSBnbnVfZGV2X21pbm9yIChkZXYpCisjIGRlZmluZSBtYWtlZGV2KG1haiwgbWluKSBnbnVfZGV2X21ha2VkZXYgKG1haiwgbWluKQorI2VuZGlmCisKKyNlbmRpZiAvKiBzeXMvc3lzbWFjcm9zLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvdGVybWlvcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy90ZXJtaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UxODgwNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvdGVybWlvcy5oCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBfU1lTX1RFUk1JT1NfSAorI2RlZmluZSBfU1lTX1RFUk1JT1NfSAorI2luY2x1ZGUgPHRlcm1pb3MuaD4KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy90aW1lLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzc2OTZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy90aW1lLmgKQEAgLTAsMCArMSwxOTMgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5MS0xOTk0LDE5OTYtMjAwMiwyMDAzLDIwMDUsMjAwNgorCUZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9TWVNfVElNRV9ICisjZGVmaW5lIF9TWVNfVElNRV9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKyNpbmNsdWRlIDxiaXRzL3R5cGVzLmg+CisjZGVmaW5lIF9fbmVlZF90aW1lX3QKKyNpbmNsdWRlIDx0aW1lLmg+CisjZGVmaW5lIF9fbmVlZF90aW1ldmFsCisjaW5jbHVkZSA8Yml0cy90aW1lLmg+CisKKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisKKyNpZm5kZWYgX19zdXNlY29uZHNfdF9kZWZpbmVkCit0eXBlZGVmIF9fc3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7CisjIGRlZmluZSBfX3N1c2Vjb25kc190X2RlZmluZWQKKyNlbmRpZgorCisKK19fQkVHSU5fREVDTFMKKworI2lmZGVmIF9fVVNFX0dOVQorLyogTWFjcm9zIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gYHN0cnVjdCB0aW1ldmFsJyBhbmQgYHN0cnVjdCB0aW1lc3BlYycuICAqLworIyBkZWZpbmUgVElNRVZBTF9UT19USU1FU1BFQyh0diwgdHMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKHRzKS0+dHZfc2VjID0gKHR2KS0+dHZfc2VjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKHRzKS0+dHZfbnNlYyA9ICh0diktPnR2X3VzZWMgKiAxMDAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKyMgZGVmaW5lIFRJTUVTUEVDX1RPX1RJTUVWQUwodHYsIHRzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICh0diktPnR2X3NlYyA9ICh0cyktPnR2X3NlYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICh0diktPnR2X3VzZWMgPSAodHMpLT50dl9uc2VjIC8gMTAwMDsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisjZW5kaWYKKworCisjaWZkZWYgX19VU0VfQlNECisvKiBTdHJ1Y3R1cmUgY3J1ZGVseSByZXByZXNlbnRpbmcgYSB0aW1lem9uZS4KKyAgIFRoaXMgaXMgb2Jzb2xldGUgYW5kIHNob3VsZCBuZXZlciBiZSB1c2VkLiAgKi8KK3N0cnVjdCB0aW1lem9uZQorICB7CisgICAgaW50IHR6X21pbnV0ZXN3ZXN0OwkJLyogTWludXRlcyB3ZXN0IG9mIEdNVC4gICovCisgICAgaW50IHR6X2RzdHRpbWU7CQkvKiBOb256ZXJvIGlmIERTVCBpcyBldmVyIGluIGVmZmVjdC4gICovCisgIH07CisKK3R5cGVkZWYgc3RydWN0IHRpbWV6b25lICpfX3Jlc3RyaWN0IF9fdGltZXpvbmVfcHRyX3Q7CisjZWxzZQordHlwZWRlZiB2b2lkICpfX3Jlc3RyaWN0IF9fdGltZXpvbmVfcHRyX3Q7CisjZW5kaWYKKworLyogR2V0IHRoZSBjdXJyZW50IHRpbWUgb2YgZGF5IGFuZCB0aW1lem9uZSBpbmZvcm1hdGlvbiwKKyAgIHB1dHRpbmcgaXQgaW50byAqVFYgYW5kICpUWi4gIElmIFRaIGlzIE5VTEwsICpUWiBpcyBub3QgZmlsbGVkLgorICAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9ycy4KKyAgIE5PVEU6IFRoaXMgZm9ybSBvZiB0aW1lem9uZSBpbmZvcm1hdGlvbiBpcyBvYnNvbGV0ZS4KKyAgIFVzZSB0aGUgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgZGVjbGFyZWQgaW4gPHRpbWUuaD4gaW5zdGVhZC4gICovCitleHRlcm4gaW50IGdldHRpbWVvZmRheSAoc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190diwKKwkJCSBfX3RpbWV6b25lX3B0cl90IF9fdHopIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisjaWZkZWYgX19VU0VfQlNECisvKiBTZXQgdGhlIGN1cnJlbnQgdGltZSBvZiBkYXkgYW5kIHRpbWV6b25lIGluZm9ybWF0aW9uLgorICAgVGhpcyBjYWxsIGlzIHJlc3RyaWN0ZWQgdG8gdGhlIHN1cGVyLXVzZXIuICAqLworZXh0ZXJuIGludCBzZXR0aW1lb2ZkYXkgKF9fY29uc3Qgc3RydWN0IHRpbWV2YWwgKl9fdHYsCisJCQkgX19jb25zdCBzdHJ1Y3QgdGltZXpvbmUgKl9fdHopCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisvKiBBZGp1c3QgdGhlIGN1cnJlbnQgdGltZSBvZiBkYXkgYnkgdGhlIGFtb3VudCBpbiBERUxUQS4KKyAgIElmIE9MRERFTFRBIGlzIG5vdCBOVUxMLCBpdCBpcyBmaWxsZWQgaW4gd2l0aCB0aGUgYW1vdW50CisgICBvZiB0aW1lIGFkanVzdG1lbnQgcmVtYWluaW5nIHRvIGJlIGRvbmUgZnJvbSB0aGUgbGFzdCBgYWRqdGltZScgY2FsbC4KKyAgIFRoaXMgY2FsbCBpcyByZXN0cmljdGVkIHRvIHRoZSBzdXBlci11c2VyLiAgKi8KK2V4dGVybiBpbnQgYWRqdGltZSAoX19jb25zdCBzdHJ1Y3QgdGltZXZhbCAqX19kZWx0YSwKKwkJICAgIHN0cnVjdCB0aW1ldmFsICpfX29sZGRlbHRhKSBfX1RIUk9XOworI2VuZGlmCisKKworLyogVmFsdWVzIGZvciB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYGdldGl0aW1lcicgYW5kIGBzZXRpdGltZXInLiAgKi8KK2VudW0gX19pdGltZXJfd2hpY2gKKyAgeworICAgIC8qIFRpbWVycyBydW4gaW4gcmVhbCB0aW1lLiAgKi8KKyAgICBJVElNRVJfUkVBTCA9IDAsCisjZGVmaW5lIElUSU1FUl9SRUFMIElUSU1FUl9SRUFMCisgICAgLyogVGltZXJzIHJ1biBvbmx5IHdoZW4gdGhlIHByb2Nlc3MgaXMgZXhlY3V0aW5nLiAgKi8KKyAgICBJVElNRVJfVklSVFVBTCA9IDEsCisjZGVmaW5lIElUSU1FUl9WSVJUVUFMIElUSU1FUl9WSVJUVUFMCisgICAgLyogVGltZXJzIHJ1biB3aGVuIHRoZSBwcm9jZXNzIGlzIGV4ZWN1dGluZyBhbmQgd2hlbgorICAgICAgIHRoZSBzeXN0ZW0gaXMgZXhlY3V0aW5nIG9uIGJlaGFsZiBvZiB0aGUgcHJvY2Vzcy4gICovCisgICAgSVRJTUVSX1BST0YgPSAyCisjZGVmaW5lIElUSU1FUl9QUk9GIElUSU1FUl9QUk9GCisgIH07CisKKy8qIFR5cGUgb2YgdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZ2V0aXRpbWVyJyBhbmQKKyAgIHRoZSBzZWNvbmQgYW5kIHRoaXJkIGFyZ3VtZW50cyBgc2V0aXRpbWVyJy4gICovCitzdHJ1Y3QgaXRpbWVydmFsCisgIHsKKyAgICAvKiBWYWx1ZSB0byBwdXQgaW50byBgaXRfdmFsdWUnIHdoZW4gdGhlIHRpbWVyIGV4cGlyZXMuICAqLworICAgIHN0cnVjdCB0aW1ldmFsIGl0X2ludGVydmFsOworICAgIC8qIFRpbWUgdG8gdGhlIG5leHQgdGltZXIgZXhwaXJhdGlvbi4gICovCisgICAgc3RydWN0IHRpbWV2YWwgaXRfdmFsdWU7CisgIH07CisKKyNpZiBkZWZpbmVkIF9fVVNFX0dOVSAmJiAhZGVmaW5lZCBfX2NwbHVzcGx1cworLyogVXNlIHRoZSBuaWNlciBwYXJhbWV0ZXIgdHlwZSBvbmx5IGluIEdOVSBtb2RlIGFuZCBub3QgZm9yIEMrKyBzaW5jZSB0aGUKKyAgIHN0cmljdCBDKysgcnVsZXMgcHJldmVudCB0aGUgYXV0b21hdGljIHByb21vdGlvbi4gICovCit0eXBlZGVmIGVudW0gX19pdGltZXJfd2hpY2ggX19pdGltZXJfd2hpY2hfdDsKKyNlbHNlCit0eXBlZGVmIGludCBfX2l0aW1lcl93aGljaF90OworI2VuZGlmCisKKy8qIFNldCAqVkFMVUUgdG8gdGhlIGN1cnJlbnQgc2V0dGluZyBvZiB0aW1lciBXSElDSC4KKyAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9ycy4gICovCitleHRlcm4gaW50IGdldGl0aW1lciAoX19pdGltZXJfd2hpY2hfdCBfX3doaWNoLAorCQkgICAgICBzdHJ1Y3QgaXRpbWVydmFsICpfX3ZhbHVlKSBfX1RIUk9XOworCisvKiBTZXQgdGhlIHRpbWVyIFdISUNIIHRvICpORVcuICBJZiBPTEQgaXMgbm90IE5VTEwsCisgICBzZXQgKk9MRCB0byB0aGUgb2xkIHZhbHVlIG9mIHRpbWVyIFdISUNILgorICAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9ycy4gICovCitleHRlcm4gaW50IHNldGl0aW1lciAoX19pdGltZXJfd2hpY2hfdCBfX3doaWNoLAorCQkgICAgICBfX2NvbnN0IHN0cnVjdCBpdGltZXJ2YWwgKl9fcmVzdHJpY3QgX19uZXcsCisJCSAgICAgIHN0cnVjdCBpdGltZXJ2YWwgKl9fcmVzdHJpY3QgX19vbGQpIF9fVEhST1c7CisKKy8qIENoYW5nZSB0aGUgYWNjZXNzIHRpbWUgb2YgRklMRSB0byBUVlBbMF0gYW5kIHRoZSBtb2RpZmljYXRpb24gdGltZSBvZgorICAgRklMRSB0byBUVlBbMV0uICBJZiBUVlAgaXMgYSBudWxsIHBvaW50ZXIsIHVzZSB0aGUgY3VycmVudCB0aW1lIGluc3RlYWQuCisgICBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3JzLiAgKi8KK2V4dGVybiBpbnQgdXRpbWVzIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19jb25zdCBzdHJ1Y3QgdGltZXZhbCBfX3R2cFsyXSkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKyNpZmRlZiBfX1VTRV9CU0QKKy8qIFNhbWUgYXMgYHV0aW1lcycsIGJ1dCBkb2VzIG5vdCBmb2xsb3cgc3ltYm9saWMgbGlua3MuICAqLworZXh0ZXJuIGludCBsdXRpbWVzIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19jb25zdCBzdHJ1Y3QgdGltZXZhbCBfX3R2cFsyXSkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKy8qIFNhbWUgYXMgYHV0aW1lcycsIGJ1dCB0YWtlcyBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvciBpbnN0ZWFkIG9mIGEgbmFtZS4gICovCitleHRlcm4gaW50IGZ1dGltZXMgKGludCBfX2ZkLCBfX2NvbnN0IHN0cnVjdCB0aW1ldmFsIF9fdHZwWzJdKSBfX1RIUk9XOworI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9BVEZJTEUKKy8qIENoYW5nZSB0aGUgYWNjZXNzIHRpbWUgb2YgRklMRSByZWxhdGl2ZSB0byBGRCB0byBUVlBbMF0gYW5kIHRoZQorICAgbW9kaWZpY2F0aW9uIHRpbWUgb2YgRklMRSB0byBUVlBbMV0uICBJZiBUVlAgaXMgYSBudWxsIHBvaW50ZXIsIHVzZQorICAgdGhlIGN1cnJlbnQgdGltZSBpbnN0ZWFkLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9ycy4gICovCitleHRlcm4gaW50IGZ1dGltZXNhdCAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19maWxlLAorCQkgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1ldmFsIF9fdHZwWzJdKSBfX1RIUk9XOworI2VuZGlmCisKKworI2lmZGVmIF9fVVNFX0JTRAorLyogQ29udmVuaWVuY2UgbWFjcm9zIGZvciBvcGVyYXRpb25zIG9uIHRpbWV2YWxzLgorICAgTk9URTogYHRpbWVyY21wJyBkb2VzIG5vdCB3b3JrIGZvciA+PSBvciA8PS4gICovCisjIGRlZmluZSB0aW1lcmlzc2V0KHR2cCkJKCh0dnApLT50dl9zZWMgfHwgKHR2cCktPnR2X3VzZWMpCisjIGRlZmluZSB0aW1lcmNsZWFyKHR2cCkJKCh0dnApLT50dl9zZWMgPSAodHZwKS0+dHZfdXNlYyA9IDApCisjIGRlZmluZSB0aW1lcmNtcChhLCBiLCBDTVApIAkJCQkJCSAgICAgIFwKKyAgKCgoYSktPnR2X3NlYyA9PSAoYiktPnR2X3NlYykgPyAJCQkJCSAgICAgIFwKKyAgICgoYSktPnR2X3VzZWMgQ01QIChiKS0+dHZfdXNlYykgOiAJCQkJCSAgICAgIFwKKyAgICgoYSktPnR2X3NlYyBDTVAgKGIpLT50dl9zZWMpKQorIyBkZWZpbmUgdGltZXJhZGQoYSwgYiwgcmVzdWx0KQkJCQkJCSAgICAgIFwKKyAgZG8gewkJCQkJCQkJCSAgICAgIFwKKyAgICAocmVzdWx0KS0+dHZfc2VjID0gKGEpLT50dl9zZWMgKyAoYiktPnR2X3NlYzsJCQkgICAgICBcCisgICAgKHJlc3VsdCktPnR2X3VzZWMgPSAoYSktPnR2X3VzZWMgKyAoYiktPnR2X3VzZWM7CQkJICAgICAgXAorICAgIGlmICgocmVzdWx0KS0+dHZfdXNlYyA+PSAxMDAwMDAwKQkJCQkJICAgICAgXAorICAgICAgewkJCQkJCQkJCSAgICAgIFwKKwkrKyhyZXN1bHQpLT50dl9zZWM7CQkJCQkJICAgICAgXAorCShyZXN1bHQpLT50dl91c2VjIC09IDEwMDAwMDA7CQkJCQkgICAgICBcCisgICAgICB9CQkJCQkJCQkJICAgICAgXAorICB9IHdoaWxlICgwKQorIyBkZWZpbmUgdGltZXJzdWIoYSwgYiwgcmVzdWx0KQkJCQkJCSAgICAgIFwKKyAgZG8gewkJCQkJCQkJCSAgICAgIFwKKyAgICAocmVzdWx0KS0+dHZfc2VjID0gKGEpLT50dl9zZWMgLSAoYiktPnR2X3NlYzsJCQkgICAgICBcCisgICAgKHJlc3VsdCktPnR2X3VzZWMgPSAoYSktPnR2X3VzZWMgLSAoYiktPnR2X3VzZWM7CQkJICAgICAgXAorICAgIGlmICgocmVzdWx0KS0+dHZfdXNlYyA8IDApIHsJCQkJCSAgICAgIFwKKyAgICAgIC0tKHJlc3VsdCktPnR2X3NlYzsJCQkJCQkgICAgICBcCisgICAgICAocmVzdWx0KS0+dHZfdXNlYyArPSAxMDAwMDAwOwkJCQkJICAgICAgXAorICAgIH0JCQkJCQkJCQkgICAgICBcCisgIH0gd2hpbGUgKDApCisjZW5kaWYJLyogQlNEICovCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBzeXMvdGltZS5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3RpbWViLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3RpbWViLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJkYmY0NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvdGltZWIuaApAQCAtMCwwICsxLDQ2IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1NZU19USU1FQl9ICisjZGVmaW5lIF9TWVNfVElNRUJfSAkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCisjZGVmaW5lIF9fbmVlZF90aW1lX3QKKyNpbmNsdWRlIDx0aW1lLmg+CisKKworX19CRUdJTl9ERUNMUworCisvKiBTdHJ1Y3R1cmUgcmV0dXJuZWQgYnkgdGhlIGBmdGltZScgZnVuY3Rpb24uICAqLworCitzdHJ1Y3QgdGltZWIKKyAgeworICAgIHRpbWVfdCB0aW1lOwkJLyogU2Vjb25kcyBzaW5jZSBlcG9jaCwgYXMgZnJvbSBgdGltZScuICAqLworICAgIHVuc2lnbmVkIHNob3J0IGludCBtaWxsaXRtOwkvKiBBZGRpdGlvbmFsIG1pbGxpc2Vjb25kcy4gICovCisgICAgc2hvcnQgaW50IHRpbWV6b25lOwkJLyogTWludXRlcyB3ZXN0IG9mIEdNVC4gICovCisgICAgc2hvcnQgaW50IGRzdGZsYWc7CQkvKiBOb256ZXJvIGlmIERheWxpZ2h0IFNhdmluZ3MgVGltZSB1c2VkLiAgKi8KKyAgfTsKKworLyogRmlsbCBpbiBUSU1FQlVGIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgdGltZS4gICovCisKK2V4dGVybiBpbnQgZnRpbWUgKHN0cnVjdCB0aW1lYiAqX190aW1lYnVmKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmCS8qIHN5cy90aW1lYi5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3RpbWVyZmQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvdGltZXJmZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYmIwNmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3RpbWVyZmQuaApAQCAtMCwwICsxLDYwIEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYJX1NZU19USU1FUkZEX0gKKyNkZWZpbmUJX1NZU19USU1FUkZEX0gJMQorCisjaW5jbHVkZSA8dGltZS5oPgorCisKKy8qIEJpdHMgdG8gYmUgc2V0IGluIHRoZSBGTEFHUyBwYXJhbWV0ZXIgb2YgYHRpbWVyZmRfY3JlYXRlJy4gICovCitlbnVtCisgIHsKKyAgICBURkRfQ0xPRVhFQyA9IDAyMDAwMDAwLAorI2RlZmluZSBURkRfQ0xPRVhFQyBURkRfQ0xPRVhFQworICAgIFRGRF9OT05CTE9DSyA9IDA0MDAwCisjZGVmaW5lIFRGRF9OT05CTE9DSyBURkRfTk9OQkxPQ0sKKyAgfTsKKworCisvKiBCaXRzIHRvIGJlIHNldCBpbiB0aGUgRkxBR1MgcGFyYW1ldGVyIG9mIGB0aW1lcmZkX3NldHRpbWUnLiAgKi8KK2VudW0KKyAgeworICAgIFRGRF9USU1FUl9BQlNUSU1FID0gMSA8PCAwCisjZGVmaW5lIFRGRF9USU1FUl9BQlNUSU1FIFRGRF9USU1FUl9BQlNUSU1FCisgIH07CisKKworX19CRUdJTl9ERUNMUworCisvKiBSZXR1cm4gZmlsZSBkZXNjcmlwdG9yIGZvciBuZXcgaW50ZXJ2YWwgdGltZXIgc291cmNlLiAgKi8KK2V4dGVybiBpbnQgdGltZXJmZF9jcmVhdGUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBpbnQgX19mbGFncykgX19USFJPVzsKKworLyogU2V0IG5leHQgZXhwaXJhdGlvbiB0aW1lIG9mIGludGVydmFsIHRpbWVyIHNvdXJjZSBVRkQgdG8gVVRNUi4gIElmCisgICBGTEFHUyBoYXMgdGhlIFRGRF9USU1FUl9BQlNUSU1FIGZsYWcgc2V0IHRoZSB0aW1lb3V0IHZhbHVlIGlzCisgICBhYnNvbHV0ZS4gIE9wdGlvbmFsbHkgcmV0dXJuIHRoZSBvbGQgZXhwaXJhdGlvbiB0aW1lIGluIE9UTVIuICAqLworZXh0ZXJuIGludCB0aW1lcmZkX3NldHRpbWUgKGludCBfX3VmZCwgaW50IF9fZmxhZ3MsCisJCQkgICAgX19jb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyAqX191dG1yLAorCQkJICAgIHN0cnVjdCBpdGltZXJzcGVjICpfX290bXIpIF9fVEhST1c7CisKKy8qIFJldHVybiB0aGUgbmV4dCBleHBpcmF0aW9uIHRpbWUgb2YgVUZELiAgKi8KK2V4dGVybiBpbnQgdGltZXJmZF9nZXR0aW1lIChpbnQgX191ZmQsIHN0cnVjdCBpdGltZXJzcGVjICpfX290bXIpIF9fVEhST1c7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBzeXMvdGltZXJmZC5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3RpbWVzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3RpbWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAyMmYyZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvdGltZXMuaApAQCAtMCwwICsxLDUzIEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTYsIDE5OTgsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qCisgKglQT1NJWCBTdGFuZGFyZDogNC41LjIgUHJvY2VzcyBUaW1lcwk8c3lzL3RpbWVzLmg+CisgKi8KKworI2lmbmRlZglfU1lTX1RJTUVTX0gKKyNkZWZpbmUJX1NZU19USU1FU19ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKyNkZWZpbmUJX19uZWVkX2Nsb2NrX3QKKyNpbmNsdWRlIDx0aW1lLmg+CisKKworX19CRUdJTl9ERUNMUworCisvKiBTdHJ1Y3R1cmUgZGVzY3JpYmluZyBDUFUgdGltZSB1c2VkIGJ5IGEgcHJvY2VzcyBhbmQgaXRzIGNoaWxkcmVuLiAgKi8KK3N0cnVjdCB0bXMKKyAgeworICAgIGNsb2NrX3QgdG1zX3V0aW1lOwkJLyogVXNlciBDUFUgdGltZS4gICovCisgICAgY2xvY2tfdCB0bXNfc3RpbWU7CQkvKiBTeXN0ZW0gQ1BVIHRpbWUuICAqLworCisgICAgY2xvY2tfdCB0bXNfY3V0aW1lOwkJLyogVXNlciBDUFUgdGltZSBvZiBkZWFkIGNoaWxkcmVuLiAgKi8KKyAgICBjbG9ja190IHRtc19jc3RpbWU7CQkvKiBTeXN0ZW0gQ1BVIHRpbWUgb2YgZGVhZCBjaGlsZHJlbi4gICovCisgIH07CisKKworLyogU3RvcmUgdGhlIENQVSB0aW1lIHVzZWQgYnkgdGhpcyBwcm9jZXNzIGFuZCBhbGwgaXRzCisgICBkZWFkIGNoaWxkcmVuIChhbmQgdGhlaXIgZGVhZCBjaGlsZHJlbikgaW4gQlVGRkVSLgorICAgUmV0dXJuIHRoZSBlbGFwc2VkIHJlYWwgdGltZSwgb3IgKGNsb2NrX3QpIC0xIGZvciBlcnJvcnMuCisgICBBbGwgdGltZXMgYXJlIGluIENMS19UQ0t0aHMgb2YgYSBzZWNvbmQuICAqLworZXh0ZXJuIGNsb2NrX3QgdGltZXMgKHN0cnVjdCB0bXMgKl9fYnVmZmVyKSBfX1RIUk9XOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogc3lzL3RpbWVzLmgJKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvdGltZXguaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2JkNmU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy90aW1leC5oCkBAIC0wLDAgKzEsMTI4IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTksIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYJX1NZU19USU1FWF9ICisjZGVmaW5lCV9TWVNfVElNRVhfSAkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKKy8qIFRoZXNlIGRlZmluaXRpb25zIGZyb20gbGludXgvdGltZXguaCBhcyBvZiAyLjIuMC4gICovCisKK3N0cnVjdCBudHB0aW1ldmFsCit7CisgIHN0cnVjdCB0aW1ldmFsIHRpbWU7CS8qIGN1cnJlbnQgdGltZSAocm8pICovCisgIGxvbmcgaW50IG1heGVycm9yOwkvKiBtYXhpbXVtIGVycm9yICh1cykgKHJvKSAqLworICBsb25nIGludCBlc3RlcnJvcjsJLyogZXN0aW1hdGVkIGVycm9yICh1cykgKHJvKSAqLworfTsKKworc3RydWN0IHRpbWV4Cit7CisgIHVuc2lnbmVkIGludCBtb2RlczsJLyogbW9kZSBzZWxlY3RvciAqLworICBsb25nIGludCBvZmZzZXQ7CS8qIHRpbWUgb2Zmc2V0ICh1c2VjKSAqLworICBsb25nIGludCBmcmVxOwkvKiBmcmVxdWVuY3kgb2Zmc2V0IChzY2FsZWQgcHBtKSAqLworICBsb25nIGludCBtYXhlcnJvcjsJLyogbWF4aW11bSBlcnJvciAodXNlYykgKi8KKyAgbG9uZyBpbnQgZXN0ZXJyb3I7CS8qIGVzdGltYXRlZCBlcnJvciAodXNlYykgKi8KKyAgaW50IHN0YXR1czsJCS8qIGNsb2NrIGNvbW1hbmQvc3RhdHVzICovCisgIGxvbmcgaW50IGNvbnN0YW50OwkvKiBwbGwgdGltZSBjb25zdGFudCAqLworICBsb25nIGludCBwcmVjaXNpb247CS8qIGNsb2NrIHByZWNpc2lvbiAodXNlYykgKHJlYWQgb25seSkgKi8KKyAgbG9uZyBpbnQgdG9sZXJhbmNlOwkvKiBjbG9jayBmcmVxdWVuY3kgdG9sZXJhbmNlIChwcG0pIChyZWFkIG9ubHkpICovCisgIHN0cnVjdCB0aW1ldmFsIHRpbWU7CS8qIChyZWFkIG9ubHkpICovCisgIGxvbmcgaW50IHRpY2s7CS8qIChtb2RpZmllZCkgdXNlY3MgYmV0d2VlbiBjbG9jayB0aWNrcyAqLworCisgIGxvbmcgaW50IHBwc2ZyZXE7CS8qIHBwcyBmcmVxdWVuY3kgKHNjYWxlZCBwcG0pIChybykgKi8KKyAgbG9uZyBpbnQgaml0dGVyOwkvKiBwcHMgaml0dGVyICh1cykgKHJvKSAqLworICBpbnQgc2hpZnQ7CQkvKiBpbnRlcnZhbCBkdXJhdGlvbiAocykgKHNoaWZ0KSAocm8pICovCisgIGxvbmcgaW50IHN0YWJpbDsJLyogcHBzIHN0YWJpbGl0eSAoc2NhbGVkIHBwbSkgKHJvKSAqLworICBsb25nIGludCBqaXRjbnQ7CS8qIGppdHRlciBsaW1pdCBleGNlZWRlZCAocm8pICovCisgIGxvbmcgaW50IGNhbGNudDsJLyogY2FsaWJyYXRpb24gaW50ZXJ2YWxzIChybykgKi8KKyAgbG9uZyBpbnQgZXJyY250OwkvKiBjYWxpYnJhdGlvbiBlcnJvcnMgKHJvKSAqLworICBsb25nIGludCBzdGJjbnQ7CS8qIHN0YWJpbGl0eSBsaW1pdCBleGNlZWRlZCAocm8pICovCisKKyAgLyogPz8/ICovCisgIGludCAgOjMyOyBpbnQgIDozMjsgaW50ICA6MzI7IGludCAgOjMyOworICBpbnQgIDozMjsgaW50ICA6MzI7IGludCAgOjMyOyBpbnQgIDozMjsKKyAgaW50ICA6MzI7IGludCAgOjMyOyBpbnQgIDozMjsgaW50ICA6MzI7Cit9OworCisvKiBNb2RlIGNvZGVzICh0aW1leC5tb2RlKSAqLworI2RlZmluZSBBREpfT0ZGU0VUCQkweDAwMDEJLyogdGltZSBvZmZzZXQgKi8KKyNkZWZpbmUgQURKX0ZSRVFVRU5DWQkJMHgwMDAyCS8qIGZyZXF1ZW5jeSBvZmZzZXQgKi8KKyNkZWZpbmUgQURKX01BWEVSUk9SCQkweDAwMDQJLyogbWF4aW11bSB0aW1lIGVycm9yICovCisjZGVmaW5lIEFESl9FU1RFUlJPUgkJMHgwMDA4CS8qIGVzdGltYXRlZCB0aW1lIGVycm9yICovCisjZGVmaW5lIEFESl9TVEFUVVMJCTB4MDAxMAkvKiBjbG9jayBzdGF0dXMgKi8KKyNkZWZpbmUgQURKX1RJTUVDT05TVAkJMHgwMDIwCS8qIHBsbCB0aW1lIGNvbnN0YW50ICovCisjZGVmaW5lIEFESl9USUNLCQkweDQwMDAJLyogdGljayB2YWx1ZSAqLworI2RlZmluZSBBREpfT0ZGU0VUX1NJTkdMRVNIT1QJMHg4MDAxCS8qIG9sZC1mYXNoaW9uZWQgYWRqdGltZSAqLworI2RlZmluZSBBREpfT0ZGU0VUX1NTX1JFQUQJMHhhMDAxCS8qIHJlYWQtb25seSBhZGp0aW1lICovCisKKy8qIHhudHAgMy40IGNvbXBhdGliaWxpdHkgbmFtZXMgKi8KKyNkZWZpbmUgTU9EX09GRlNFVAlBREpfT0ZGU0VUCisjZGVmaW5lIE1PRF9GUkVRVUVOQ1kJQURKX0ZSRVFVRU5DWQorI2RlZmluZSBNT0RfTUFYRVJST1IJQURKX01BWEVSUk9SCisjZGVmaW5lIE1PRF9FU1RFUlJPUglBREpfRVNURVJST1IKKyNkZWZpbmUgTU9EX1NUQVRVUwlBREpfU1RBVFVTCisjZGVmaW5lIE1PRF9USU1FQ09OU1QJQURKX1RJTUVDT05TVAorI2RlZmluZSBNT0RfQ0xLQglBREpfVElDSworI2RlZmluZSBNT0RfQ0xLQQlBREpfT0ZGU0VUX1NJTkdMRVNIT1QgLyogMHg4MDAwIGluIG9yaWdpbmFsICovCisKKworLyogU3RhdHVzIGNvZGVzICh0aW1leC5zdGF0dXMpICovCisjZGVmaW5lIFNUQV9QTEwJCTB4MDAwMQkvKiBlbmFibGUgUExMIHVwZGF0ZXMgKHJ3KSAqLworI2RlZmluZSBTVEFfUFBTRlJFUQkweDAwMDIJLyogZW5hYmxlIFBQUyBmcmVxIGRpc2NpcGxpbmUgKHJ3KSAqLworI2RlZmluZSBTVEFfUFBTVElNRQkweDAwMDQJLyogZW5hYmxlIFBQUyB0aW1lIGRpc2NpcGxpbmUgKHJ3KSAqLworI2RlZmluZSBTVEFfRkxMCQkweDAwMDgJLyogc2VsZWN0IGZyZXF1ZW5jeS1sb2NrIG1vZGUgKHJ3KSAqLworCisjZGVmaW5lIFNUQV9JTlMJCTB4MDAxMAkvKiBpbnNlcnQgbGVhcCAocncpICovCisjZGVmaW5lIFNUQV9ERUwJCTB4MDAyMAkvKiBkZWxldGUgbGVhcCAocncpICovCisjZGVmaW5lIFNUQV9VTlNZTkMJMHgwMDQwCS8qIGNsb2NrIHVuc3luY2hyb25pemVkIChydykgKi8KKyNkZWZpbmUgU1RBX0ZSRVFIT0xECTB4MDA4MAkvKiBob2xkIGZyZXF1ZW5jeSAocncpICovCisKKyNkZWZpbmUgU1RBX1BQU1NJR05BTAkweDAxMDAJLyogUFBTIHNpZ25hbCBwcmVzZW50IChybykgKi8KKyNkZWZpbmUgU1RBX1BQU0pJVFRFUgkweDAyMDAJLyogUFBTIHNpZ25hbCBqaXR0ZXIgZXhjZWVkZWQgKHJvKSAqLworI2RlZmluZSBTVEFfUFBTV0FOREVSCTB4MDQwMAkvKiBQUFMgc2lnbmFsIHdhbmRlciBleGNlZWRlZCAocm8pICovCisjZGVmaW5lIFNUQV9QUFNFUlJPUgkweDA4MDAJLyogUFBTIHNpZ25hbCBjYWxpYnJhdGlvbiBlcnJvciAocm8pICovCisKKyNkZWZpbmUgU1RBX0NMT0NLRVJSCTB4MTAwMAkvKiBjbG9jayBoYXJkd2FyZSBmYXVsdCAocm8pICovCisKKyNkZWZpbmUgU1RBX1JPTkxZIChTVEFfUFBTU0lHTkFMIHwgU1RBX1BQU0pJVFRFUiB8IFNUQV9QUFNXQU5ERVIgfCBcCisgICAgU1RBX1BQU0VSUk9SIHwgU1RBX0NMT0NLRVJSKSAvKiByZWFkLW9ubHkgYml0cyAqLworCisvKiBDbG9jayBzdGF0ZXMgKHRpbWVfc3RhdGUpICovCisjZGVmaW5lIFRJTUVfT0sJCTAJLyogY2xvY2sgc3luY2hyb25pemVkLCBubyBsZWFwIHNlY29uZCAqLworI2RlZmluZSBUSU1FX0lOUwkxCS8qIGluc2VydCBsZWFwIHNlY29uZCAqLworI2RlZmluZSBUSU1FX0RFTAkyCS8qIGRlbGV0ZSBsZWFwIHNlY29uZCAqLworI2RlZmluZSBUSU1FX09PUAkzCS8qIGxlYXAgc2Vjb25kIGluIHByb2dyZXNzICovCisjZGVmaW5lIFRJTUVfV0FJVAk0CS8qIGxlYXAgc2Vjb25kIGhhcyBvY2N1cnJlZCAqLworI2RlZmluZSBUSU1FX0VSUk9SCTUJLyogY2xvY2sgbm90IHN5bmNocm9uaXplZCAqLworI2RlZmluZSBUSU1FX0JBRAlUSU1FX0VSUk9SIC8qIGJ3IGNvbXBhdCAqLworCisvKiBNYXhpbXVtIHRpbWUgY29uc3RhbnQgb2YgdGhlIFBMTC4gICovCisjZGVmaW5lIE1BWFRDCQk2CisKK19fQkVHSU5fREVDTFMKKworZXh0ZXJuIGludCBfX2FkanRpbWV4IChzdHJ1Y3QgdGltZXggKl9fbnR4KSBfX1RIUk9XOworZXh0ZXJuIGludCBhZGp0aW1leCAoc3RydWN0IHRpbWV4ICpfX250eCkgX19USFJPVzsKKworZXh0ZXJuIGludCBudHBfZ2V0dGltZSAoc3RydWN0IG50cHRpbWV2YWwgKl9fbnR2KSBfX1RIUk9XOworZXh0ZXJuIGludCBudHBfYWRqdGltZSAoc3RydWN0IHRpbWV4ICpfX3RudHgpIF9fVEhST1c7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBzeXMvdGltZXguaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy90dHljaGFycy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy90dHljaGFycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNDNmNjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3R0eWNoYXJzLmgKQEAgLTAsMCArMSw2MSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5ODIsIDE5ODYsIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpdHR5Y2hhcnMuaAk4LjIgKEJlcmtlbGV5KSAxLzQvOTQKKyAqLworCisvKgorICogNC4zIENPTVBBVElCSUxJVFkgRklMRQorICoKKyAqIFVzZXIgdmlzaWJsZSBzdHJ1Y3R1cmVzIGFuZCBjb25zdGFudHMgcmVsYXRlZCB0byB0ZXJtaW5hbCBoYW5kbGluZy4KKyAqLworI2lmbmRlZiBfU1lTX1RUWUNIQVJTX0gKKyNkZWZpbmUJX1NZU19UVFlDSEFSU19IIDEKKworc3RydWN0IHR0eWNoYXJzIHsKKwljaGFyCXRjX2VyYXNlOwkvKiBlcmFzZSBsYXN0IGNoYXJhY3RlciAqLworCWNoYXIJdGNfa2lsbDsJLyogZXJhc2UgZW50aXJlIGxpbmUgKi8KKwljaGFyCXRjX2ludHJjOwkvKiBpbnRlcnJ1cHQgKi8KKwljaGFyCXRjX3F1aXRjOwkvKiBxdWl0ICovCisJY2hhcgl0Y19zdGFydGM7CS8qIHN0YXJ0IG91dHB1dCAqLworCWNoYXIJdGNfc3RvcGM7CS8qIHN0b3Agb3V0cHV0ICovCisJY2hhcgl0Y19lb2ZjOwkvKiBlbmQtb2YtZmlsZSAqLworCWNoYXIJdGNfYnJrYzsJLyogaW5wdXQgZGVsaW1pdGVyIChsaWtlIG5sKSAqLworCWNoYXIJdGNfc3VzcGM7CS8qIHN0b3AgcHJvY2VzcyBzaWduYWwgKi8KKwljaGFyCXRjX2RzdXNwYzsJLyogZGVsYXllZCBzdG9wIHByb2Nlc3Mgc2lnbmFsICovCisJY2hhcgl0Y19ycHJudGM7CS8qIHJlcHJpbnQgbGluZSAqLworCWNoYXIJdGNfZmx1c2hjOwkvKiBmbHVzaCBvdXRwdXQgKHRvZ2dsZXMpICovCisJY2hhcgl0Y193ZXJhc2M7CS8qIHdvcmQgZXJhc2UgKi8KKwljaGFyCXRjX2xuZXh0YzsJLyogbGl0ZXJhbCBuZXh0IGNoYXJhY3RlciAqLworfTsKKworI2lmZGVmIF9fVVNFX09MRF9UVFkKKyNpbmNsdWRlIDxzeXMvdHR5ZGVmYXVsdHMuaD4JLyogdG8gcGljayB1cCBjaGFyYWN0ZXIgZGVmYXVsdHMgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogc3lzL3R0eWNoYXJzLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvdHR5ZGVmYXVsdHMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvdHR5ZGVmYXVsdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmUxNjhiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy90dHlkZWZhdWx0cy5oCkBAIC0wLDAgKzEsMTAwIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk4MiwgMTk4NiwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAoYykgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCisgKiBBbGwgb3Igc29tZSBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSBtYXRlcmlhbCBsaWNlbnNlZAorICogdG8gdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSBieSBBbWVyaWNhbiBUZWxlcGhvbmUgYW5kIFRlbGVncmFwaAorICogQ28uIG9yIFVuaXggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLiBhbmQgYXJlIHJlcHJvZHVjZWQgaGVyZWluIHdpdGgKKyAqIHRoZSBwZXJtaXNzaW9uIG9mIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpdHR5ZGVmYXVsdHMuaAk4LjQgKEJlcmtlbGV5KSAxLzIxLzk0CisgKi8KKworLyoKKyAqIFN5c3RlbSB3aWRlIGRlZmF1bHRzIGZvciB0ZXJtaW5hbCBzdGF0ZS4gIExpbnV4IHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX1NZU19UVFlERUZBVUxUU19IXworI2RlZmluZQlfU1lTX1RUWURFRkFVTFRTX0hfCisKKy8qCisgKiBEZWZhdWx0cyBvbiAiZmlyc3QiIG9wZW4uCisgKi8KKyNkZWZpbmUJVFRZREVGX0lGTEFHCShCUktJTlQgfCBJU1RSSVAgfCBJQ1JOTCB8IElNQVhCRUwgfCBJWE9OIHwgSVhBTlkpCisjZGVmaW5lIFRUWURFRl9PRkxBRwkoT1BPU1QgfCBPTkxDUiB8IFhUQUJTKQorI2RlZmluZSBUVFlERUZfTEZMQUcJKEVDSE8gfCBJQ0FOT04gfCBJU0lHIHwgSUVYVEVOIHwgRUNIT0V8RUNIT0tFfEVDSE9DVEwpCisjZGVmaW5lIFRUWURFRl9DRkxBRwkoQ1JFQUQgfCBDUzcgfCBQQVJFTkIgfCBIVVBDTCkKKyNkZWZpbmUgVFRZREVGX1NQRUVECShCOTYwMCkKKworLyoKKyAqIENvbnRyb2wgQ2hhcmFjdGVyIERlZmF1bHRzCisgKi8KKyNkZWZpbmUgQ1RSTCh4KQkoeCYwMzcpCisjZGVmaW5lCUNFT0YJCUNUUkwoJ2QnKQorI2lmZGVmIF9QT1NJWF9WRElTQUJMRQorIyBkZWZpbmUgQ0VPTAkJX1BPU0lYX1ZESVNBQkxFCisjZWxzZQorIyBkZWZpbmUgQ0VPTAkJJ1wwJwkJLyogWFhYIGF2b2lkIF9QT1NJWF9WRElTQUJMRSAqLworI2VuZGlmCisjZGVmaW5lCUNFUkFTRQkJMDE3NworI2RlZmluZQlDSU5UUgkJQ1RSTCgnYycpCisjaWZkZWYgX1BPU0lYX1ZESVNBQkxFCisjIGRlZmluZSBDU1RBVFVTCV9QT1NJWF9WRElTQUJMRQorI2Vsc2UKKyMgZGVmaW5lIENTVEFUVVMJJ1wwJwkJLyogWFhYIGF2b2lkIF9QT1NJWF9WRElTQUJMRSAqLworI2VuZGlmCisjZGVmaW5lCUNLSUxMCQlDVFJMKCd1JykKKyNkZWZpbmUJQ01JTgkJMQorI2RlZmluZQlDUVVJVAkJMDM0CQkvKiBGUywgXlwgKi8KKyNkZWZpbmUJQ1NVU1AJCUNUUkwoJ3onKQorI2RlZmluZQlDVElNRQkJMAorI2RlZmluZQlDRFNVU1AJCUNUUkwoJ3knKQorI2RlZmluZQlDU1RBUlQJCUNUUkwoJ3EnKQorI2RlZmluZQlDU1RPUAkJQ1RSTCgncycpCisjZGVmaW5lCUNMTkVYVAkJQ1RSTCgndicpCisjZGVmaW5lCUNESVNDQVJEIAlDVFJMKCdvJykKKyNkZWZpbmUJQ1dFUkFTRSAJQ1RSTCgndycpCisjZGVmaW5lCUNSRVBSSU5UIAlDVFJMKCdyJykKKyNkZWZpbmUJQ0VPVAkJQ0VPRgorLyogY29tcGF0ICovCisjZGVmaW5lCUNCUksJCUNFT0wKKyNkZWZpbmUgQ1JQUk5UCQlDUkVQUklOVAorI2RlZmluZQlDRkxVU0gJCUNESVNDQVJECisKKy8qIFBST1RFQ1RFRCBJTkNMVVNJT04gRU5EUyBIRVJFICovCisjZW5kaWYgLyogIV9TWVNfVFRZREVGQVVMVFNfSF8gKi8KKworLyoKKyAqICNkZWZpbmUgVFRZREVGQ0hBUlMgdG8gaW5jbHVkZSBhbiBhcnJheSBvZiBkZWZhdWx0IGNvbnRyb2wgY2hhcmFjdGVycy4KKyAqLworI2lmZGVmIFRUWURFRkNIQVJTCitjY190CXR0eWRlZmNoYXJzW05DQ1NdID0geworCUNFT0YsCUNFT0wsCUNFT0wsCUNFUkFTRSwgQ1dFUkFTRSwgQ0tJTEwsIENSRVBSSU5ULAorCV9QT1NJWF9WRElTQUJMRSwgQ0lOVFIsCUNRVUlULAlDU1VTUCwJQ0RTVVNQLAlDU1RBUlQsCUNTVE9QLAlDTE5FWFQsCisJQ0RJU0NBUkQsIENNSU4sCUNUSU1FLCAgQ1NUQVRVUywgX1BPU0lYX1ZESVNBQkxFCit9OworI3VuZGVmIFRUWURFRkNIQVJTCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTA1ZmMwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oCkBAIC0wLDAgKzEsMjc4IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTEsMTk5MiwxOTk0LDE5OTUsMTk5NiwxOTk3LDE5OTgsMTk5OSwyMDAwLDIwMDEsMjAwMiwyMDA2CisgICAJRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qCisgKglQT1NJWCBTdGFuZGFyZDogMi42IFByaW1pdGl2ZSBTeXN0ZW0gRGF0YSBUeXBlcwk8c3lzL3R5cGVzLmg+CisgKi8KKworI2lmbmRlZglfU1lTX1RZUEVTX0gKKyNkZWZpbmUJX1NZU19UWVBFU19ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKK19fQkVHSU5fREVDTFMKKworI2luY2x1ZGUgPGJpdHMvdHlwZXMuaD4KKworI2lmZGVmCV9fVVNFX0JTRAorIyBpZm5kZWYgX191X2NoYXJfZGVmaW5lZAordHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7Cit0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0OwordHlwZWRlZiBfX3VfaW50IHVfaW50OwordHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7Cit0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKK3R5cGVkZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKK3R5cGVkZWYgX19mc2lkX3QgZnNpZF90OworIyAgZGVmaW5lIF9fdV9jaGFyX2RlZmluZWQKKyMgZW5kaWYKKyNlbmRpZgorCit0eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsKKworI2lmbmRlZiBfX2lub190X2RlZmluZWQKKyMgaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKK3R5cGVkZWYgX19pbm9fdCBpbm9fdDsKKyMgZWxzZQordHlwZWRlZiBfX2lubzY0X3QgaW5vX3Q7CisjIGVuZGlmCisjIGRlZmluZSBfX2lub190X2RlZmluZWQKKyNlbmRpZgorI2lmIGRlZmluZWQgX19VU0VfTEFSR0VGSUxFNjQgJiYgIWRlZmluZWQgX19pbm82NF90X2RlZmluZWQKK3R5cGVkZWYgX19pbm82NF90IGlubzY0X3Q7CisjIGRlZmluZSBfX2lubzY0X3RfZGVmaW5lZAorI2VuZGlmCisKKyNpZm5kZWYgX19kZXZfdF9kZWZpbmVkCit0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CisjIGRlZmluZSBfX2Rldl90X2RlZmluZWQKKyNlbmRpZgorCisjaWZuZGVmIF9fZ2lkX3RfZGVmaW5lZAordHlwZWRlZiBfX2dpZF90IGdpZF90OworIyBkZWZpbmUgX19naWRfdF9kZWZpbmVkCisjZW5kaWYKKworI2lmbmRlZiBfX21vZGVfdF9kZWZpbmVkCit0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKKyMgZGVmaW5lIF9fbW9kZV90X2RlZmluZWQKKyNlbmRpZgorCisjaWZuZGVmIF9fbmxpbmtfdF9kZWZpbmVkCit0eXBlZGVmIF9fbmxpbmtfdCBubGlua190OworIyBkZWZpbmUgX19ubGlua190X2RlZmluZWQKKyNlbmRpZgorCisjaWZuZGVmIF9fdWlkX3RfZGVmaW5lZAordHlwZWRlZiBfX3VpZF90IHVpZF90OworIyBkZWZpbmUgX191aWRfdF9kZWZpbmVkCisjZW5kaWYKKworI2lmbmRlZiBfX29mZl90X2RlZmluZWQKKyMgaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKK3R5cGVkZWYgX19vZmZfdCBvZmZfdDsKKyMgZWxzZQordHlwZWRlZiBfX29mZjY0X3Qgb2ZmX3Q7CisjIGVuZGlmCisjIGRlZmluZSBfX29mZl90X2RlZmluZWQKKyNlbmRpZgorI2lmIGRlZmluZWQgX19VU0VfTEFSR0VGSUxFNjQgJiYgIWRlZmluZWQgX19vZmY2NF90X2RlZmluZWQKK3R5cGVkZWYgX19vZmY2NF90IG9mZjY0X3Q7CisjIGRlZmluZSBfX29mZjY0X3RfZGVmaW5lZAorI2VuZGlmCisKKyNpZm5kZWYgX19waWRfdF9kZWZpbmVkCit0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CisjIGRlZmluZSBfX3BpZF90X2RlZmluZWQKKyNlbmRpZgorCisjaWYgKGRlZmluZWQgX19VU0VfU1ZJRCB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOKSAmJiAhZGVmaW5lZCBfX2lkX3RfZGVmaW5lZAordHlwZWRlZiBfX2lkX3QgaWRfdDsKKyMgZGVmaW5lIF9faWRfdF9kZWZpbmVkCisjZW5kaWYKKworI2lmbmRlZiBfX3NzaXplX3RfZGVmaW5lZAordHlwZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsKKyMgZGVmaW5lIF9fc3NpemVfdF9kZWZpbmVkCisjZW5kaWYKKworI2lmZGVmCV9fVVNFX0JTRAorIyBpZm5kZWYgX19kYWRkcl90X2RlZmluZWQKK3R5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CisjICBpZiAhIGRlZmluZWQoY2FkZHJfdCkgJiYgISBkZWZpbmVkKF9fY2FkZHJfdF9kZWZpbmVkKQordHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsKKyMgICBkZWZpbmUgX19jYWRkcl90X2RlZmluZWQKKyMgIGVuZGlmCisjICBkZWZpbmUgX19kYWRkcl90X2RlZmluZWQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgKGRlZmluZWQgX19VU0VfU1ZJRCB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOKSAmJiAhZGVmaW5lZCBfX2tleV90X2RlZmluZWQKK3R5cGVkZWYgX19rZXlfdCBrZXlfdDsKKyMgZGVmaW5lIF9fa2V5X3RfZGVmaW5lZAorI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9YT1BFTgorIyBkZWZpbmUgX19uZWVkX2Nsb2NrX3QKKyNlbmRpZgorI2RlZmluZQlfX25lZWRfdGltZV90CisjZGVmaW5lIF9fbmVlZF90aW1lcl90CisjZGVmaW5lIF9fbmVlZF9jbG9ja2lkX3QKKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpZmRlZiBfX1VTRV9YT1BFTgorIyBpZm5kZWYgX191c2Vjb25kc190X2RlZmluZWQKK3R5cGVkZWYgX191c2Vjb25kc190IHVzZWNvbmRzX3Q7CisjICBkZWZpbmUgX191c2Vjb25kc190X2RlZmluZWQKKyMgZW5kaWYKKyMgaWZuZGVmIF9fc3VzZWNvbmRzX3RfZGVmaW5lZAordHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OworIyAgZGVmaW5lIF9fc3VzZWNvbmRzX3RfZGVmaW5lZAorIyBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUJX19uZWVkX3NpemVfdAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaWZkZWYgX19VU0VfTUlTQworLyogT2xkIGNvbXBhdGliaWxpdHkgbmFtZXMgZm9yIEMgdHlwZXMuICAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1bG9uZzsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CisjZW5kaWYKKworLyogVGhlc2Ugc2l6ZS1zcGVjaWZpYyBuYW1lcyBhcmUgdXNlZCBieSBzb21lIG9mIHRoZSBpbmV0IGNvZGUuICAqLworCisjaWYgIV9fR05VQ19QUkVSRVEgKDIsIDcpCisKKy8qIFRoZXNlIHR5cGVzIGFyZSBkZWZpbmVkIGJ5IHRoZSBJU08gQzk5IGhlYWRlciA8aW50dHlwZXMuaD4uICovCisjIGlmbmRlZiBfX2ludDhfdF9kZWZpbmVkCisjICBkZWZpbmUgX19pbnQ4X3RfZGVmaW5lZAordHlwZWRlZgljaGFyIGludDhfdDsKK3R5cGVkZWYJc2hvcnQgaW50IGludDE2X3Q7Cit0eXBlZGVmCWludCBpbnQzMl90OworIyAgaWYgX19XT1JEU0laRSA9PSA2NAordHlwZWRlZiBsb25nIGludCBpbnQ2NF90OworIyAgZWxpZiBfX0dMSUJDX0hBVkVfTE9OR19MT05HCitfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBpbnQ2NF90OworIyAgZW5kaWYKKyMgZW5kaWYKKworLyogQnV0IHRoZXNlIHdlcmUgZGVmaW5lZCBieSBJU08gQyB3aXRob3V0IHRoZSBmaXJzdCBgXycuICAqLwordHlwZWRlZgl1bnNpZ25lZCBjaGFyIHVfaW50OF90OwordHlwZWRlZgl1bnNpZ25lZCBzaG9ydCBpbnQgdV9pbnQxNl90OwordHlwZWRlZgl1bnNpZ25lZCBpbnQgdV9pbnQzMl90OworIyBpZiBfX1dPUkRTSVpFID09IDY0Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVfaW50NjRfdDsKKyMgZWxpZiBfX0dMSUJDX0hBVkVfTE9OR19MT05HCitfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1X2ludDY0X3Q7CisjIGVuZGlmCisKK3R5cGVkZWYgaW50IHJlZ2lzdGVyX3Q7CisKKyNlbHNlCisKKy8qIEZvciBHQ0MgMi43IGFuZCBsYXRlciwgd2UgY2FuIHVzZSBzcGVjaWZpYyB0eXBlLXNpemUgYXR0cmlidXRlcy4gICovCisjIGRlZmluZSBfX2ludE5fdChOLCBNT0RFKSBcCisgIHR5cGVkZWYgaW50IGludCMjTiMjX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChNT0RFKSkpCisjIGRlZmluZSBfX3VfaW50Tl90KE4sIE1PREUpIFwKKyAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQjI04jI190IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoTU9ERSkpKQorCisjIGlmbmRlZiBfX2ludDhfdF9kZWZpbmVkCisjICBkZWZpbmUgX19pbnQ4X3RfZGVmaW5lZAorX19pbnROX3QgKDgsIF9fUUlfXyk7CitfX2ludE5fdCAoMTYsIF9fSElfXyk7CitfX2ludE5fdCAoMzIsIF9fU0lfXyk7CitfX2ludE5fdCAoNjQsIF9fRElfXyk7CisjIGVuZGlmCisKK19fdV9pbnROX3QgKDgsIF9fUUlfXyk7CitfX3VfaW50Tl90ICgxNiwgX19ISV9fKTsKK19fdV9pbnROX3QgKDMyLCBfX1NJX18pOworX191X2ludE5fdCAoNjQsIF9fRElfXyk7CisKK3R5cGVkZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX3dvcmRfXykpKTsKKworCisvKiBTb21lIGNvZGUgZnJvbSBCSU5EIHRlc3RzIHRoaXMgbWFjcm8gdG8gc2VlIGlmIHRoZSB0eXBlcyBhYm92ZSBhcmUKKyAgIGRlZmluZWQuICAqLworI2VuZGlmCisjZGVmaW5lIF9fQklUX1RZUEVTX0RFRklORURfXwkxCisKKworI2lmZGVmCV9fVVNFX0JTRAorLyogSW4gQlNEIDxzeXMvdHlwZXMuaD4gaXMgZXhwZWN0ZWQgdG8gZGVmaW5lIEJZVEVfT1JERVIuICAqLworIyBpbmNsdWRlIDxlbmRpYW4uaD4KKworLyogSXQgYWxzbyBkZWZpbmVzIGBmZF9zZXQnIGFuZCB0aGUgRkRfKiBtYWNyb3MgZm9yIGBzZWxlY3QnLiAgKi8KKyMgaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorCisvKiBCU0QgZGVmaW5lcyB0aGVzZSBzeW1ib2xzLCBzbyB3ZSBmb2xsb3cuICAqLworIyBpbmNsdWRlIDxzeXMvc3lzbWFjcm9zLmg+CisjZW5kaWYgLyogVXNlIEJTRC4gICovCisKKworI2lmIGRlZmluZWQgX19VU0VfVU5JWDk4ICYmICFkZWZpbmVkIF9fYmxrc2l6ZV90X2RlZmluZWQKK3R5cGVkZWYgX19ibGtzaXplX3QgYmxrc2l6ZV90OworIyBkZWZpbmUgX19ibGtzaXplX3RfZGVmaW5lZAorI2VuZGlmCisKKy8qIFR5cGVzIGZyb20gdGhlIExhcmdlIEZpbGUgU3VwcG9ydCBpbnRlcmZhY2UuICAqLworI2lmbmRlZiBfX1VTRV9GSUxFX09GRlNFVDY0CisjIGlmbmRlZiBfX2Jsa2NudF90X2RlZmluZWQKK3R5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsJIC8qIFR5cGUgdG8gY291bnQgbnVtYmVyIG9mIGRpc2sgYmxvY2tzLiAgKi8KKyMgIGRlZmluZSBfX2Jsa2NudF90X2RlZmluZWQKKyMgZW5kaWYKKyMgaWZuZGVmIF9fZnNibGtjbnRfdF9kZWZpbmVkCit0eXBlZGVmIF9fZnNibGtjbnRfdCBmc2Jsa2NudF90OyAvKiBUeXBlIHRvIGNvdW50IGZpbGUgc3lzdGVtIGJsb2Nrcy4gICovCisjICBkZWZpbmUgX19mc2Jsa2NudF90X2RlZmluZWQKKyMgZW5kaWYKKyMgaWZuZGVmIF9fZnNmaWxjbnRfdF9kZWZpbmVkCit0eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNudF90OyAvKiBUeXBlIHRvIGNvdW50IGZpbGUgc3lzdGVtIGlub2Rlcy4gICovCisjICBkZWZpbmUgX19mc2ZpbGNudF90X2RlZmluZWQKKyMgZW5kaWYKKyNlbHNlCisjIGlmbmRlZiBfX2Jsa2NudF90X2RlZmluZWQKK3R5cGVkZWYgX19ibGtjbnQ2NF90IGJsa2NudF90OwkgICAvKiBUeXBlIHRvIGNvdW50IG51bWJlciBvZiBkaXNrIGJsb2Nrcy4gICovCisjICBkZWZpbmUgX19ibGtjbnRfdF9kZWZpbmVkCisjIGVuZGlmCisjIGlmbmRlZiBfX2ZzYmxrY250X3RfZGVmaW5lZAordHlwZWRlZiBfX2ZzYmxrY250NjRfdCBmc2Jsa2NudF90OyAvKiBUeXBlIHRvIGNvdW50IGZpbGUgc3lzdGVtIGJsb2Nrcy4gICovCisjICBkZWZpbmUgX19mc2Jsa2NudF90X2RlZmluZWQKKyMgZW5kaWYKKyMgaWZuZGVmIF9fZnNmaWxjbnRfdF9kZWZpbmVkCit0eXBlZGVmIF9fZnNmaWxjbnQ2NF90IGZzZmlsY250X3Q7IC8qIFR5cGUgdG8gY291bnQgZmlsZSBzeXN0ZW0gaW5vZGVzLiAgKi8KKyMgIGRlZmluZSBfX2ZzZmlsY250X3RfZGVmaW5lZAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAordHlwZWRlZiBfX2Jsa2NudDY0X3QgYmxrY250NjRfdDsgICAgIC8qIFR5cGUgdG8gY291bnQgbnVtYmVyIG9mIGRpc2sgYmxvY2tzLiAqLwordHlwZWRlZiBfX2ZzYmxrY250NjRfdCBmc2Jsa2NudDY0X3Q7IC8qIFR5cGUgdG8gY291bnQgZmlsZSBzeXN0ZW0gYmxvY2tzLiAgKi8KK3R5cGVkZWYgX19mc2ZpbGNudDY0X3QgZnNmaWxjbnQ2NF90OyAvKiBUeXBlIHRvIGNvdW50IGZpbGUgc3lzdGVtIGlub2Rlcy4gICovCisjZW5kaWYKKworCisvKiBOb3cgYWRkIHRoZSB0aHJlYWQgdHlwZXMuICAqLworI2lmIGRlZmluZWQgX19VU0VfUE9TSVgxOTk1MDYgfHwgZGVmaW5lZCBfX1VTRV9VTklYOTgKKyMgaW5jbHVkZSA8Yml0cy9wdGhyZWFkdHlwZXMuaD4KKyNlbmRpZgorCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogc3lzL3R5cGVzLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvdWNvbnRleHQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvdWNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWNmZjdiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy91Y29udGV4dC5oCkBAIC0wLDAgKzEsOTcgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyogU3lzdGVtIFYvQVJNIEFCSSBjb21wbGlhbnQgY29udGV4dCBzd2l0Y2hpbmcgc3VwcG9ydC4gICovCisKKyNpZm5kZWYgX1NZU19VQ09OVEVYVF9ICisjZGVmaW5lIF9TWVNfVUNPTlRFWFRfSAkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN5cy9wcm9jZnMuaD4KKworLyogV2UgbmVlZCB0aGUgc2lnbmFsIGNvbnRleHQgZGVmaW5pdGlvbnMgZXZlbiBpZiB0aGV5IGFyZSBub3QgdXNlZAorICAgaW5jbHVkZWQgaW4gPHNpZ25hbC5oPi4gICovCisjaW5jbHVkZSA8Yml0cy9zaWdjb250ZXh0Lmg+CisKK3R5cGVkZWYgaW50IGdyZWdfdDsKKworLyogTnVtYmVyIG9mIGdlbmVyYWwgcmVnaXN0ZXJzLiAgKi8KKyNkZWZpbmUgTkdSRUcJMTgKKworLyogQ29udGFpbmVyIGZvciBhbGwgZ2VuZXJhbCByZWdpc3RlcnMuICAqLwordHlwZWRlZiBlbGZfZ3JlZ3NldF90IGdyZWdzZXRfdDsKKworLyogTnVtYmVyIG9mIGVhY2ggcmVnaXN0ZXIgaXMgdGhlIGBncmVnc2V0X3QnIGFycmF5LiAgKi8KK2VudW0KK3sKKyAgUjAgPSAwLAorI2RlZmluZSBSMAlSMAorICBSMSA9IDEsCisjZGVmaW5lIFIxCVIxCisgIFIyID0gMiwKKyNkZWZpbmUgUjIJUjIKKyAgUjMgPSAzLAorI2RlZmluZSBSMwlSMworICBSNCA9IDQsCisjZGVmaW5lIFI0CVI0CisgIFI1ID0gNSwKKyNkZWZpbmUgUjUJUjUKKyAgUjYgPSA2LAorI2RlZmluZSBSNglSNgorICBSNyA9IDcsCisjZGVmaW5lIFI3CVI3CisgIFI4ID0gOCwKKyNkZWZpbmUgUjgJUjgKKyAgUjkgPSA5LAorI2RlZmluZSBSOQlSOQorICBSMTAgPSAxMCwKKyNkZWZpbmUgUjEwCVIxMAorICBSMTEgPSAxMSwKKyNkZWZpbmUgUjExCVIxMQorICBSMTIgPSAxMiwKKyNkZWZpbmUgUjEyCVIxMgorICBSMTMgPSAxMywKKyNkZWZpbmUgUjEzCVIxMworICBSMTQgPSAxNCwKKyNkZWZpbmUgUjE0CVIxNAorICBSMTUgPSAxNQorI2RlZmluZSBSMTUJUjE1Cit9OworCisvKiBTdHJ1Y3R1cmUgdG8gZGVzY3JpYmUgRlBVIHJlZ2lzdGVycy4gICovCit0eXBlZGVmIGVsZl9mcHJlZ3NldF90CWZwcmVnc2V0X3Q7CisKKy8qIENvbnRleHQgdG8gZGVzY3JpYmUgd2hvbGUgcHJvY2Vzc29yIHN0YXRlLiAgVGhpcyBvbmx5IGRlc2NyaWJlcworICAgdGhlIGNvcmUgcmVnaXN0ZXJzOyBjb3Byb2Nlc3NvciByZWdpc3RlcnMgZ2V0IHNhdmVkIGVsc2V3aGVyZQorICAgKGUuZy4gaW4gdWNfcmVnc3BhY2UsIG9yIHNvbWV3aGVyZSB1bnNwZWNpZmllZCBvbiB0aGUgc3RhY2sKKyAgIGR1cmluZyBub24tUlQgc2lnbmFsIGhhbmRsZXJzKS4gICovCit0eXBlZGVmIHN0cnVjdCBzaWdjb250ZXh0IG1jb250ZXh0X3Q7CisKKy8qIFVzZXJsZXZlbCBjb250ZXh0LiAgKi8KK3R5cGVkZWYgc3RydWN0IHVjb250ZXh0CisgIHsKKyAgICB1bnNpZ25lZCBsb25nIHVjX2ZsYWdzOworICAgIHN0cnVjdCB1Y29udGV4dCAqdWNfbGluazsKKyAgICBzdGFja190IHVjX3N0YWNrOworICAgIG1jb250ZXh0X3QgdWNfbWNvbnRleHQ7CisgICAgX19zaWdzZXRfdCB1Y19zaWdtYXNrOworICAgIHVuc2lnbmVkIGxvbmcgdWNfcmVnc3BhY2VbMTI4XSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg4KSkpOworICB9IHVjb250ZXh0X3Q7CisKKyNlbmRpZiAvKiBzeXMvdWNvbnRleHQuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy91aW8uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvdWlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIyMDNmNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvdWlvLmgKQEAgLTAsMCArMSw1NCBAQAorLyogQ29weXJpZ2h0IChDKSAxOTkxLCA5MiwgOTYsIDk3LCA5OCwgOTksIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1NZU19VSU9fSAorI2RlZmluZSBfU1lTX1VJT19ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworX19CRUdJTl9ERUNMUworCisvKiBUaGlzIGZpbGUgZGVmaW5lcyBgc3RydWN0IGlvdmVjJy4gICovCisjaW5jbHVkZSA8Yml0cy91aW8uaD4KKworCisvKiBSZWFkIGRhdGEgZnJvbSBmaWxlIGRlc2NyaXB0b3IgRkQsIGFuZCBwdXQgdGhlIHJlc3VsdCBpbiB0aGUKKyAgIGJ1ZmZlcnMgZGVzY3JpYmVkIGJ5IElPVkVDLCB3aGljaCBpcyBhIHZlY3RvciBvZiBDT1VOVCBgc3RydWN0IGlvdmVjJ3MuCisgICBUaGUgYnVmZmVycyBhcmUgZmlsbGVkIGluIHRoZSBvcmRlciBzcGVjaWZpZWQuCisgICBPcGVyYXRlcyBqdXN0IGxpa2UgYHJlYWQnIChzZWUgPHVuaXN0ZC5oPikgZXhjZXB0IHRoYXQgZGF0YSBhcmUKKyAgIHB1dCBpbiBJT1ZFQyBpbnN0ZWFkIG9mIGEgY29udGlndW91cyBidWZmZXIuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGgKKyAgIF9fVEhST1cuICAqLworZXh0ZXJuIHNzaXplX3QgcmVhZHYgKGludCBfX2ZkLCBfX2NvbnN0IHN0cnVjdCBpb3ZlYyAqX19pb3ZlYywgaW50IF9fY291bnQpOworCisvKiBXcml0ZSBkYXRhIHBvaW50ZWQgYnkgdGhlIGJ1ZmZlcnMgZGVzY3JpYmVkIGJ5IElPVkVDLCB3aGljaAorICAgaXMgYSB2ZWN0b3Igb2YgQ09VTlQgYHN0cnVjdCBpb3ZlYydzLCB0byBmaWxlIGRlc2NyaXB0b3IgRkQuCisgICBUaGUgZGF0YSBpcyB3cml0dGVuIGluIHRoZSBvcmRlciBzcGVjaWZpZWQuCisgICBPcGVyYXRlcyBqdXN0IGxpa2UgYHdyaXRlJyAoc2VlIDx1bmlzdGQuaD4pIGV4Y2VwdCB0aGF0IHRoZSBkYXRhCisgICBhcmUgdGFrZW4gZnJvbSBJT1ZFQyBpbnN0ZWFkIG9mIGEgY29udGlndW91cyBidWZmZXIuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGgKKyAgIF9fVEhST1cuICAqLworZXh0ZXJuIHNzaXplX3Qgd3JpdGV2IChpbnQgX19mZCwgX19jb25zdCBzdHJ1Y3QgaW92ZWMgKl9faW92ZWMsIGludCBfX2NvdW50KTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIHN5cy91aW8uaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy91bHRyYXNvdW5kLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3VsdHJhc291bmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjVjMzg1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy91bHRyYXNvdW5kLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGxpbnV4L3VsdHJhc291bmQuaD4KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvdW4uaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvdW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmExMGU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy91bi5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5MSwgMTk5NSwgMTk5NiwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZglfU1lTX1VOX0gKKyNkZWZpbmUJX1NZU19VTl9ICTEKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisvKiBHZXQgdGhlIGRlZmluaXRpb24gb2YgdGhlIG1hY3JvIHRvIGRlZmluZSB0aGUgY29tbW9uIHNvY2thZGRyIG1lbWJlcnMuICAqLworI2luY2x1ZGUgPGJpdHMvc29ja2FkZHIuaD4KKworX19CRUdJTl9ERUNMUworCisvKiBTdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgYWRkcmVzcyBvZiBhbiBBRl9MT0NBTCAoYWthIEFGX1VOSVgpIHNvY2tldC4gICovCitzdHJ1Y3Qgc29ja2FkZHJfdW4KKyAgeworICAgIF9fU09DS0FERFJfQ09NTU9OIChzdW5fKTsKKyAgICBjaGFyIHN1bl9wYXRoWzEwOF07CQkvKiBQYXRoIG5hbWUuICAqLworICB9OworCisKKyNpZmRlZiBfX1VTRV9NSVNDCisjIGluY2x1ZGUgPHN0cmluZy5oPgkJLyogRm9yIHByb3RvdHlwZSBvZiBgc3RybGVuJy4gICovCisKKy8qIEV2YWx1YXRlIHRvIGFjdHVhbCBsZW5ndGggb2YgdGhlIGBzb2NrYWRkcl91bicgc3RydWN0dXJlLiAgKi8KKyMgZGVmaW5lIFNVTl9MRU4ocHRyKSAoKHNpemVfdCkgKCgoc3RydWN0IHNvY2thZGRyX3VuICopIDApLT5zdW5fcGF0aCkJICAgICAgXAorCQkgICAgICArIHN0cmxlbiAoKHB0ciktPnN1bl9wYXRoKSkKKyNlbmRpZgorCitfX0VORF9ERUNMUworCisjZW5kaWYJLyogc3lzL3VuLmggICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy91bmlzdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTgyM2ZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy91bmlzdGQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8dW5pc3RkLmg+CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3VzZXIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvdXNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYWU0M2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3VzZXIuaApAQCAtMCwwICsxLDcyIEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1NZU19VU0VSX0gKKyNkZWZpbmUgX1NZU19VU0VSX0gJMQorCisvKiBUaGUgd2hvbGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgZm9yIEdEQiBhbmQgR0RCIG9ubHkuICBEb24ndCByZWFkCisgICB0b28gbXVjaCBpbnRvIGl0LiAgRG9uJ3QgdXNlIGl0IGZvciBhbnl0aGluZyBvdGhlciB0aGFuIEdEQiB1bmxlc3MKKyAgIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4gICovCisKK3N0cnVjdCB1c2VyX2ZwcmVncworeworICBzdHJ1Y3QgZnBfcmVnCisgIHsKKyAgICB1bnNpZ25lZCBpbnQgc2lnbjE6MTsKKyAgICB1bnNpZ25lZCBpbnQgdW51c2VkOjE1OworICAgIHVuc2lnbmVkIGludCBzaWduMjoxOworICAgIHVuc2lnbmVkIGludCBleHBvbmVudDoxNDsKKyAgICB1bnNpZ25lZCBpbnQgajoxOworICAgIHVuc2lnbmVkIGludCBtYW50aXNzYTE6MzE7CisgICAgdW5zaWduZWQgaW50IG1hbnRpc3NhMDozMjsKKyAgfSBmcHJlZ3NbOF07CisgIHVuc2lnbmVkIGludCBmcHNyOjMyOworICB1bnNpZ25lZCBpbnQgZnBjcjozMjsKKyAgdW5zaWduZWQgY2hhciBmdHlwZVs4XTsKKyAgdW5zaWduZWQgaW50IGluaXRfZmxhZzsKK307CisKK3N0cnVjdCB1c2VyX3JlZ3MKK3sKKyAgdW5zaWduZWQgbG9uZyBpbnQgdXJlZ3NbMThdOworfTsKKworc3RydWN0IHVzZXIKK3sKKyAgc3RydWN0IHVzZXJfcmVncyByZWdzOwkvKiBHZW5lcmFsIHJlZ2lzdGVycyAqLworICBpbnQgdV9mcHZhbGlkOwkJLyogVHJ1ZSBpZiBtYXRoIGNvLXByb2Nlc3NvciBiZWluZyB1c2VkLiAqLworCisgIHVuc2lnbmVkIGxvbmcgaW50IHVfdHNpemU7CS8qIFRleHQgc2VnbWVudCBzaXplIChwYWdlcykuICovCisgIHVuc2lnbmVkIGxvbmcgaW50IHVfZHNpemU7CS8qIERhdGEgc2VnbWVudCBzaXplIChwYWdlcykuICovCisgIHVuc2lnbmVkIGxvbmcgaW50IHVfc3NpemU7CS8qIFN0YWNrIHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLworCisgIHVuc2lnbmVkIGxvbmcgc3RhcnRfY29kZTsJLyogU3RhcnRpbmcgdmlydHVhbCBhZGRyZXNzIG9mIHRleHQuICovCisgIHVuc2lnbmVkIGxvbmcgc3RhcnRfc3RhY2s7CS8qIFN0YXJ0aW5nIHZpcnR1YWwgYWRkcmVzcyBvZiBzdGFjay4gKi8KKworICBsb25nIGludCBzaWduYWw7ICAgICAJCS8qIFNpZ25hbCB0aGF0IGNhdXNlZCB0aGUgY29yZSBkdW1wLiAqLworICBpbnQgcmVzZXJ2ZWQ7CQkJLyogTm8gbG9uZ2VyIHVzZWQgKi8KKyAgc3RydWN0IHVzZXJfcmVncyAqdV9hcjA7CS8qIGhlbHAgZ2RiIHRvIGZpbmQgdGhlIGdlbmVyYWwgcmVnaXN0ZXJzLiAqLworCisgIHVuc2lnbmVkIGxvbmcgbWFnaWM7CQkvKiB1bmlxdWVseSBpZGVudGlmeSBhIGNvcmUgZmlsZSAqLworICBjaGFyIHVfY29tbVszMl07CQkvKiBVc2VyIGNvbW1hbmQgdGhhdCB3YXMgcmVzcG9uc2libGUgKi8KKyAgaW50IHVfZGVidWdyZWdbOF07CisgIHN0cnVjdCB1c2VyX2ZwcmVncyB1X2ZwOwkvKiBGbG9hdGluZyBwb2ludCByZWdpc3RlcnMgKi8KKyAgc3RydWN0IHVzZXJfZnByZWdzICp1X2ZwMDsJLyogaGVscCBnZGIgdG8gZmluZCB0aGUgRlAgcmVnaXN0ZXJzLiAqLworfTsKKworI2VuZGlmICAvKiBzeXMvdXNlci5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3VzdGF0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3VzdGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E5Y2RhYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvdXN0YXQuaApAQCAtMCwwICsxLDM4IEBACisvKiBIZWFkZXIgZGVzY3JpYmluZyBvYnNvbGV0ZSBgdXN0YXQnIGludGVyZmFjZS4KKyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5OCwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyoKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIG9ic29sZXRlLiAgVXNlIDxzeXMvc3RhdGZzLmg+IGluc3RlYWQuCisgKi8KKworI2lmbmRlZiBfU1lTX1VTVEFUX0gKKyNkZWZpbmUJX1NZU19VU1RBVF9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxiaXRzL3VzdGF0Lmg+CisKK19fQkVHSU5fREVDTFMKKworZXh0ZXJuIGludCB1c3RhdCAoX19kZXZfdCBfX2Rldiwgc3RydWN0IHVzdGF0ICpfX3VidWYpIF9fVEhST1c7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBzeXMvdXN0YXQuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy91dHNuYW1lLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3V0c25hbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDNhYWI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy91dHNuYW1lLmgKQEAgLTAsMCArMSw4NyBAQAorLyogQ29weXJpZ2h0IChDKSAxOTkxLDkyLDk0LDk2LDk3LDk5LDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qCisgKglQT1NJWCBTdGFuZGFyZDogNC40IFN5c3RlbSBJZGVudGlmaWNhdGlvbgk8c3lzL3V0c25hbWUuaD4KKyAqLworCisjaWZuZGVmCV9TWVNfVVRTTkFNRV9ICisjZGVmaW5lCV9TWVNfVVRTTkFNRV9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKK19fQkVHSU5fREVDTFMKKworI2luY2x1ZGUgPGJpdHMvdXRzbmFtZS5oPgorCisjaWZuZGVmIF9VVFNOQU1FX1NZU05BTUVfTEVOR1RICisjIGRlZmluZSBfVVRTTkFNRV9TWVNOQU1FX0xFTkdUSCBfVVRTTkFNRV9MRU5HVEgKKyNlbmRpZgorI2lmbmRlZiBfVVRTTkFNRV9OT0RFTkFNRV9MRU5HVEgKKyMgZGVmaW5lIF9VVFNOQU1FX05PREVOQU1FX0xFTkdUSCBfVVRTTkFNRV9MRU5HVEgKKyNlbmRpZgorI2lmbmRlZiBfVVRTTkFNRV9SRUxFQVNFX0xFTkdUSAorIyBkZWZpbmUgX1VUU05BTUVfUkVMRUFTRV9MRU5HVEggX1VUU05BTUVfTEVOR1RICisjZW5kaWYKKyNpZm5kZWYgX1VUU05BTUVfVkVSU0lPTl9MRU5HVEgKKyMgZGVmaW5lIF9VVFNOQU1FX1ZFUlNJT05fTEVOR1RIIF9VVFNOQU1FX0xFTkdUSAorI2VuZGlmCisjaWZuZGVmIF9VVFNOQU1FX01BQ0hJTkVfTEVOR1RICisjIGRlZmluZSBfVVRTTkFNRV9NQUNISU5FX0xFTkdUSCBfVVRTTkFNRV9MRU5HVEgKKyNlbmRpZgorCisvKiBTdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgc3lzdGVtIGFuZCBtYWNoaW5lLiAgKi8KK3N0cnVjdCB1dHNuYW1lCisgIHsKKyAgICAvKiBOYW1lIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gICovCisgICAgY2hhciBzeXNuYW1lW19VVFNOQU1FX1NZU05BTUVfTEVOR1RIXTsKKworICAgIC8qIE5hbWUgb2YgdGhpcyBub2RlIG9uIHRoZSBuZXR3b3JrLiAgKi8KKyAgICBjaGFyIG5vZGVuYW1lW19VVFNOQU1FX05PREVOQU1FX0xFTkdUSF07CisKKyAgICAvKiBDdXJyZW50IHJlbGVhc2UgbGV2ZWwgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbi4gICovCisgICAgY2hhciByZWxlYXNlW19VVFNOQU1FX1JFTEVBU0VfTEVOR1RIXTsKKyAgICAvKiBDdXJyZW50IHZlcnNpb24gbGV2ZWwgb2YgdGhpcyByZWxlYXNlLiAgKi8KKyAgICBjaGFyIHZlcnNpb25bX1VUU05BTUVfVkVSU0lPTl9MRU5HVEhdOworCisgICAgLyogTmFtZSBvZiB0aGUgaGFyZHdhcmUgdHlwZSB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcgb24uICAqLworICAgIGNoYXIgbWFjaGluZVtfVVRTTkFNRV9NQUNISU5FX0xFTkdUSF07CisKKyNpZiBfVVRTTkFNRV9ET01BSU5fTEVOR1RIIC0gMAorICAgIC8qIE5hbWUgb2YgdGhlIGRvbWFpbiBvZiB0aGlzIG5vZGUgb24gdGhlIG5ldHdvcmsuICAqLworIyBpZmRlZiBfX1VTRV9HTlUKKyAgICBjaGFyIGRvbWFpbm5hbWVbX1VUU05BTUVfRE9NQUlOX0xFTkdUSF07CisjIGVsc2UKKyAgICBjaGFyIF9fZG9tYWlubmFtZVtfVVRTTkFNRV9ET01BSU5fTEVOR1RIXTsKKyMgZW5kaWYKKyNlbmRpZgorICB9OworCisjaWZkZWYgX19VU0VfU1ZJRAorLyogTm90ZSB0aGF0IFNWSUQgYXNzdW1lcyBhbGwgbWVtYmVycyBoYXZlIHRoZSBzYW1lIHNpemUuICAqLworIyBkZWZpbmUgU1lTX05NTE4gIF9VVFNOQU1FX0xFTkdUSAorI2VuZGlmCisKKworLyogUHV0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBzeXN0ZW0gaW4gTkFNRS4gICovCitleHRlcm4gaW50IHVuYW1lIChzdHJ1Y3QgdXRzbmFtZSAqX19uYW1lKSBfX1RIUk9XOworCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBzeXMvdXRzbmFtZS5oICAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy92ZnMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvdmZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEyMmQzMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvdmZzLmgKQEAgLTAsMCArMSw0IEBACisvKiBPdGhlciBzeXN0ZW1zIGRlY2xhcmUgYHN0cnVjdCBzdGF0ZnMnIGV0IGFsIGluIDxzeXMvdmZzLmg+LAorICAgc28gd2UgaGF2ZSB0aGlzIGZpbGUgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHByb2dyYW1zIGV4cGVjdGluZyBpdC4gICovCisKKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3ZsaW1pdC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy92bGltaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjdhMDlhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy92bGltaXQuaApAQCAtMCwwICsxLDY4IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTYsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1NZU19WTElNSVRfSAorI2RlZmluZSBfU1lTX1ZMSU1JVF9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKK19fQkVHSU5fREVDTFMKKworLyogVGhpcyBpbnRlcmZhY2UgaXMgb2Jzb2xldGUsIGFuZCBpcyBzdXBlcnNlZGVkIGJ5IDxzeXMvcmVzb3VyY2UuaD4uICAqLworCisvKiBLaW5kcyBvZiByZXNvdXJjZSBsaW1pdC4gICovCitlbnVtIF9fdmxpbWl0X3Jlc291cmNlCit7CisgIC8qIFNldHRpbmcgdGhpcyBub24temVybyBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIHJhaXNlIGxpbWl0cy4KKyAgICAgT25seSB0aGUgc3VwZXItdXNlIGNhbiBzZXQgaXQgdG8gemVyby4KKworICAgICBUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiByZWNlbnQgdmVyc2lvbnMgb2YgQlNELCBub3IgYnkKKyAgICAgdGhlIEdOVSBDIGxpYnJhcnkuICAqLworICBMSU1fTk9SQUlTRSwKKworICAvKiBDUFUgdGltZSBhdmFpbGFibGUgZm9yIGVhY2ggcHJvY2VzcyAoc2Vjb25kcykuICAqLworICBMSU1fQ1BVLAorCisgIC8qIExhcmdlc3QgZmlsZSB3aGljaCBjYW4gYmUgY3JlYXRlZCAoYnl0ZXMpLiAgKi8KKyAgTElNX0ZTSVpFLAorCisgIC8qIE1heGltdW0gc2l6ZSBvZiB0aGUgZGF0YSBzZWdtZW50IChieXRlcykuICAqLworICBMSU1fREFUQSwKKworICAvKiBNYXhpbXVtIHNpemUgb2YgdGhlIHN0YWNrIHNlZ21lbnQgKGJ5dGVzKS4gICovCisgIExJTV9TVEFDSywKKworICAvKiBMYXJnZXN0IGNvcmUgZmlsZSB0aGF0IHdpbGwgYmUgY3JlYXRlZCAoYnl0ZXMpLiAgKi8KKyAgTElNX0NPUkUsCisKKyAgLyogUmVzaWRlbnQgc2V0IHNpemUgKGJ5dGVzKS4gICovCisgIExJTV9NQVhSU1MKK307CisKKy8qIFRoaXMgbWVhbnMgbm8gbGltaXQuICAqLworI2RlZmluZSBJTkZJTklUWSAweDdmZmZmZmZmCisKKworLyogU2V0IHRoZSBzb2Z0IGxpbWl0IGZvciBSRVNPVVJDRSB0byBiZSBWQUxVRS4KKyAgIFJldHVybnMgMCBmb3Igc3VjY2VzcywgLTEgZm9yIGZhaWx1cmUuICAqLworZXh0ZXJuIGludCB2bGltaXQgKGVudW0gX192bGltaXRfcmVzb3VyY2UgX19yZXNvdXJjZSwgaW50IF9fdmFsdWUpIF9fVEhST1c7CisKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIHN5cy92bGltaXQuaCAgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvdnQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvdnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzRhYmZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy92dC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxsaW51eC92dC5oPgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy92dGltZXMuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvdnRpbWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU3ZjNhNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvdnRpbWVzLmgKQEAgLTAsMCArMSw2OSBAQAorLyogQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTk2LCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9TWVNfVlRJTUVTX0gKKyNkZWZpbmUgX1NZU19WVElNRVNfSAkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKKy8qIFRoaXMgaW50ZXJmYWNlIGlzIG9ic29sZXRlOyB1c2UgYGdldHJ1c2FnZScgaW5zdGVhZC4gICovCisKKy8qIEdyYW51bGFyaXR5IG9mIHRoZSBgdm1fdXRpbWUnIGFuZCBgdm1fc3RpbWUnIGZpZWxkcyBvZiBhIGBzdHJ1Y3QgdnRpbWVzJy4KKyAgIChUaGlzIGlzIHRoZSBmcmVxdWVuY3kgb2YgdGhlIG1hY2hpbmUncyBwb3dlciBzdXBwbHksIGluIEh6LikgICovCisjZGVmaW5lCVZUSU1FU19VTklUU19QRVJfU0VDT05ECTYwCisKK3N0cnVjdCB2dGltZXMKK3sKKyAgLyogVXNlciB0aW1lIHVzZWQgaW4gdW5pdHMgb2YgMS9WVElNRVNfVU5JVFNfUEVSX1NFQ09ORCBzZWNvbmRzLiAgKi8KKyAgaW50IHZtX3V0aW1lOworICAvKiBTeXN0ZW0gdGltZSB1c2VkIGluIHVuaXRzIG9mIDEvVlRJTUVTX1VOSVRTX1BFUl9TRUNPTkQgc2Vjb25kcy4gICovCisgIGludCB2bV9zdGltZTsKKworICAvKiBBbW91bnQgb2YgZGF0YSBhbmQgc3RhY2sgbWVtb3J5IHVzZWQgKGtpbG9ieXRlLXNlY29uZHMpLiAgKi8KKyAgdW5zaWduZWQgaW50IHZtX2lkc3JzczsKKyAgLyogQW1vdW50IG9mIHRleHQgbWVtb3J5IHVzZWQgKGtpbG9ieXRlLXNlY29uZHMpLiAgKi8KKyAgdW5zaWduZWQgaW50IHZtX2l4cnNzOworICAvKiBNYXhpbXVtIHJlc2lkZW50IHNldCBzaXplICh0ZXh0LCBkYXRhLCBhbmQgc3RhY2spIChraWxvYnl0ZXMpLiAgKi8KKyAgaW50IHZtX21heHJzczsKKworICAvKiBOdW1iZXIgb2YgaGFyZCBwYWdlIGZhdWx0cyAoaS5lLiB0aG9zZSB0aGF0IHJlcXVpcmVkIEkvTykuICAqLworICBpbnQgdm1fbWFqZmx0OworICAvKiBOdW1iZXIgb2Ygc29mdCBwYWdlIGZhdWx0cyAoaS5lLiB0aG9zZSBzZXJ2aWNlZCBieSByZWNsYWltaW5nCisgICAgIGEgcGFnZSBmcm9tIHRoZSBsaXN0IG9mIHBhZ2VzIGF3YWl0aW5nIHJlYWxsb2NhdGlvbi4gICovCisgIGludCB2bV9taW5mbHQ7CisKKyAgLyogTnVtYmVyIG9mIHRpbWVzIGEgcHJvY2VzcyB3YXMgc3dhcHBlZCBvdXQgb2YgcGh5c2ljYWwgbWVtb3J5LiAgKi8KKyAgaW50IHZtX25zd2FwOworCisgIC8qIE51bWJlciBvZiBpbnB1dCBvcGVyYXRpb25zIHZpYSB0aGUgZmlsZSBzeXN0ZW0uICBOb3RlOiBUaGlzCisgICAgIGFuZCBgcnVfb3VibG9jaycgZG8gbm90IGluY2x1ZGUgb3BlcmF0aW9ucyB3aXRoIHRoZSBjYWNoZS4gICovCisgIGludCB2bV9pbmJsazsKKyAgLyogTnVtYmVyIG9mIG91dHB1dCBvcGVyYXRpb25zIHZpYSB0aGUgZmlsZSBzeXN0ZW0uICAqLworICBpbnQgdm1fb3VibGs7Cit9OworCisvKiBJZiBDVVJSRU5UIGlzIG5vdCBOVUxMLCB3cml0ZSBzdGF0aXN0aWNzIGZvciB0aGUgY3VycmVudCBwcm9jZXNzIGludG8KKyAgICpDVVJSRU5ULiAgSWYgQ0hJTEQgaXMgbm90IE5VTEwsIHdyaXRlIHN0YXRpc3RpY3MgZm9yIGFsbCB0ZXJtaW5hdGVkIGNoaWxkCisgICBwcm9jZXNzZXMgaW50byAqQ0hJTEQuICBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIC0xIGZvciBmYWlsdXJlLiAgKi8KK2V4dGVybiBpbnQgdnRpbWVzIChzdHJ1Y3QgdnRpbWVzICogX19jdXJyZW50LCBzdHJ1Y3QgdnRpbWVzICogX19jaGlsZCkgX19USFJPVzsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIHN5cy92dGltZXMuaCAgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5cy93YWl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUxMDM1NwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMvd2FpdC5oCkBAIC0wLDAgKzEsMTgyIEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NCwxOTk2LTIwMDEsMjAwMywyMDA0LDIwMDUsMjAwNworCUZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisvKgorICoJUE9TSVggU3RhbmRhcmQ6IDMuMi4xIFdhaXQgZm9yIFByb2Nlc3MgVGVybWluYXRpb24JPHN5cy93YWl0Lmg+CisgKi8KKworI2lmbmRlZglfU1lTX1dBSVRfSAorI2RlZmluZQlfU1lTX1dBSVRfSAkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKworLyogVGhlc2UgbWFjcm9zIGNvdWxkIGFsc28gYmUgZGVmaW5lZCBpbiA8c3RkbGliLmg+LiAgKi8KKyNpZiAhZGVmaW5lZCBfU1RETElCX0ggfHwgIWRlZmluZWQgX19VU0VfWE9QRU4KKy8qIFRoaXMgd2lsbCBkZWZpbmUgdGhlIGBXKicgbWFjcm9zIGZvciB0aGUgZmxhZworICAgYml0cyB0byBgd2FpdHBpZCcsIGB3YWl0MycsIGFuZCBgd2FpdDQnLiAgKi8KKyMgaW5jbHVkZSA8Yml0cy93YWl0ZmxhZ3MuaD4KKworIyBpZmRlZglfX1VTRV9CU0QKKworLyogTG90cyBvZiBoYWlyIHRvIGFsbG93IHRyYWRpdGlvbmFsIEJTRCB1c2Ugb2YgYHVuaW9uIHdhaXQnCisgICBhcyB3ZWxsIGFzIFBPU0lYLjEgdXNlIG9mIGBpbnQnIGZvciB0aGUgc3RhdHVzIHdvcmQuICAqLworCisjICBpZiBkZWZpbmVkIF9fR05VQ19fICYmICFkZWZpbmVkIF9fY3BsdXNwbHVzCisjICAgZGVmaW5lIF9fV0FJVF9JTlQoc3RhdHVzKSBcCisgIChfX2V4dGVuc2lvbl9fICgoKHVuaW9uIHsgX190eXBlb2Yoc3RhdHVzKSBfX2luOyBpbnQgX19pOyB9KSBcCisgICAgICAgICAgICAgICAgICAgeyAuX19pbiA9IChzdGF0dXMpIH0pLl9faSkpCisjICBlbHNlCisjICAgZGVmaW5lIF9fV0FJVF9JTlQoc3RhdHVzKQkoKihfX2NvbnN0IGludCAqKSAmKHN0YXR1cykpCisjICBlbmRpZgorCisvKiBUaGlzIGlzIHRoZSB0eXBlIG9mIHRoZSBhcmd1bWVudCB0byBgd2FpdCcuICBUaGUgZnVua3kgdW5pb24KKyAgIGNhdXNlcyByZWRlY2xhcmF0aW9ucyB3aXRoIGV0aGVyIGBpbnQgKicgb3IgYHVuaW9uIHdhaXQgKicgdG8gYmUKKyAgIGFsbG93ZWQgd2l0aG91dCBjb21wbGFpbnQuICBfX1dBSVRfU1RBVFVTX0RFRk4gaXMgdGhlIHR5cGUgdXNlZCBpbgorICAgdGhlIGFjdHVhbCBmdW5jdGlvbiBkZWZpbml0aW9ucy4gICovCisKKyMgIGlmICFkZWZpbmVkIF9fR05VQ19fIHx8IF9fR05VQ19fIDwgMiB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCisjICAgZGVmaW5lIF9fV0FJVF9TVEFUVVMJdm9pZCAqCisjICAgZGVmaW5lIF9fV0FJVF9TVEFUVVNfREVGTgl2b2lkICoKKyMgIGVsc2UKKy8qIFRoaXMgd29ya3MgaW4gR0NDIDIuNi4xIGFuZCBsYXRlci4gICovCit0eXBlZGVmIHVuaW9uCisgIHsKKyAgICB1bmlvbiB3YWl0ICpfX3VwdHI7CisgICAgaW50ICpfX2lwdHI7CisgIH0gX19XQUlUX1NUQVRVUyBfX2F0dHJpYnV0ZV9fICgoX190cmFuc3BhcmVudF91bmlvbl9fKSk7CisjICAgZGVmaW5lIF9fV0FJVF9TVEFUVVNfREVGTglpbnQgKgorIyAgZW5kaWYKKworIyBlbHNlIC8qIERvbid0IHVzZSBCU0QuICAqLworCisjICBkZWZpbmUgX19XQUlUX0lOVChzdGF0dXMpCShzdGF0dXMpCisjICBkZWZpbmUgX19XQUlUX1NUQVRVUwkJaW50ICoKKyMgIGRlZmluZSBfX1dBSVRfU1RBVFVTX0RFRk4JaW50ICoKKworIyBlbmRpZiAvKiBVc2UgQlNELiAgKi8KKworLyogVGhpcyB3aWxsIGRlZmluZSBhbGwgdGhlIGBfX1cqJyBtYWNyb3MuICAqLworIyBpbmNsdWRlIDxiaXRzL3dhaXRzdGF0dXMuaD4KKworIyBkZWZpbmUgV0VYSVRTVEFUVVMoc3RhdHVzKQlfX1dFWElUU1RBVFVTKF9fV0FJVF9JTlQoc3RhdHVzKSkKKyMgZGVmaW5lIFdURVJNU0lHKHN0YXR1cykJX19XVEVSTVNJRyhfX1dBSVRfSU5UKHN0YXR1cykpCisjIGRlZmluZSBXU1RPUFNJRyhzdGF0dXMpCV9fV1NUT1BTSUcoX19XQUlUX0lOVChzdGF0dXMpKQorIyBkZWZpbmUgV0lGRVhJVEVEKHN0YXR1cykJX19XSUZFWElURUQoX19XQUlUX0lOVChzdGF0dXMpKQorIyBkZWZpbmUgV0lGU0lHTkFMRUQoc3RhdHVzKQlfX1dJRlNJR05BTEVEKF9fV0FJVF9JTlQoc3RhdHVzKSkKKyMgZGVmaW5lIFdJRlNUT1BQRUQoc3RhdHVzKQlfX1dJRlNUT1BQRUQoX19XQUlUX0lOVChzdGF0dXMpKQorIyBpZmRlZiBfX1dJRkNPTlRJTlVFRAorIyAgZGVmaW5lIFdJRkNPTlRJTlVFRChzdGF0dXMpCV9fV0lGQ09OVElOVUVEKF9fV0FJVF9JTlQoc3RhdHVzKSkKKyMgZW5kaWYKKyNlbmRpZgkvKiA8c3RkbGliLmg+IG5vdCBpbmNsdWRlZC4gICovCisKKyNpZmRlZglfX1VTRV9CU0QKKyMgZGVmaW5lIFdDT1JFRkxBRwkJX19XQ09SRUZMQUcKKyMgZGVmaW5lIFdDT1JFRFVNUChzdGF0dXMpCV9fV0NPUkVEVU1QKF9fV0FJVF9JTlQoc3RhdHVzKSkKKyMgZGVmaW5lIFdfRVhJVENPREUocmV0LCBzaWcpCV9fV19FWElUQ09ERShyZXQsIHNpZykKKyMgZGVmaW5lIFdfU1RPUENPREUoc2lnKQlfX1dfU1RPUENPREUoc2lnKQorI2VuZGlmCisKKy8qIFRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSB1c2VkIGJ5IHRoZSBgd2FpdGlkJyBmdW5jdGlvbi4gICovCisjaWYgZGVmaW5lZCBfX1VTRV9TVklEIHx8IGRlZmluZWQgX19VU0VfWE9QRU4KK3R5cGVkZWYgZW51bQoreworICBQX0FMTCwJCS8qIFdhaXQgZm9yIGFueSBjaGlsZC4gICovCisgIFBfUElELAkJLyogV2FpdCBmb3Igc3BlY2lmaWVkIHByb2Nlc3MuICAqLworICBQX1BHSUQJCS8qIFdhaXQgZm9yIG1lbWJlcnMgb2YgcHJvY2VzcyBncm91cC4gICovCit9IGlkdHlwZV90OworI2VuZGlmCisKKworLyogV2FpdCBmb3IgYSBjaGlsZCB0byBkaWUuICBXaGVuIG9uZSBkb2VzLCBwdXQgaXRzIHN0YXR1cyBpbiAqU1RBVF9MT0MKKyAgIGFuZCByZXR1cm4gaXRzIHByb2Nlc3MgSUQuICBGb3IgZXJyb3JzLCByZXR1cm4gKHBpZF90KSAtMS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aAorICAgX19USFJPVy4gICovCitleHRlcm4gX19waWRfdCB3YWl0IChfX1dBSVRfU1RBVFVTIF9fc3RhdF9sb2MpOworCisjaWZkZWYJX19VU0VfQlNECisvKiBTcGVjaWFsIHZhbHVlcyBmb3IgdGhlIFBJRCBhcmd1bWVudCB0byBgd2FpdHBpZCcgYW5kIGB3YWl0NCcuICAqLworIyBkZWZpbmUgV0FJVF9BTlkJKC0xKQkvKiBBbnkgcHJvY2Vzcy4gICovCisjIGRlZmluZSBXQUlUX01ZUEdSUAkwCS8qIEFueSBwcm9jZXNzIGluIG15IHByb2Nlc3MgZ3JvdXAuICAqLworI2VuZGlmCisKKy8qIFdhaXQgZm9yIGEgY2hpbGQgbWF0Y2hpbmcgUElEIHRvIGRpZS4KKyAgIElmIFBJRCBpcyBncmVhdGVyIHRoYW4gMCwgbWF0Y2ggYW55IHByb2Nlc3Mgd2hvc2UgcHJvY2VzcyBJRCBpcyBQSUQuCisgICBJZiBQSUQgaXMgKHBpZF90KSAtMSwgbWF0Y2ggYW55IHByb2Nlc3MuCisgICBJZiBQSUQgaXMgKHBpZF90KSAwLCBtYXRjaCBhbnkgcHJvY2VzcyB3aXRoIHRoZQorICAgc2FtZSBwcm9jZXNzIGdyb3VwIGFzIHRoZSBjdXJyZW50IHByb2Nlc3MuCisgICBJZiBQSUQgaXMgbGVzcyB0aGFuIC0xLCBtYXRjaCBhbnkgcHJvY2VzcyB3aG9zZQorICAgcHJvY2VzcyBncm91cCBpcyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgUElELgorICAgSWYgdGhlIFdOT0hBTkcgYml0IGlzIHNldCBpbiBPUFRJT05TLCBhbmQgdGhhdCBjaGlsZAorICAgaXMgbm90IGFscmVhZHkgZGVhZCwgcmV0dXJuIChwaWRfdCkgMC4gIElmIHN1Y2Nlc3NmdWwsCisgICByZXR1cm4gUElEIGFuZCBzdG9yZSB0aGUgZGVhZCBjaGlsZCdzIHN0YXR1cyBpbiBTVEFUX0xPQy4KKyAgIFJldHVybiAocGlkX3QpIC0xIGZvciBlcnJvcnMuICBJZiB0aGUgV1VOVFJBQ0VEIGJpdCBpcworICAgc2V0IGluIE9QVElPTlMsIHJldHVybiBzdGF0dXMgZm9yIHN0b3BwZWQgY2hpbGRyZW47IG90aGVyd2lzZSBkb24ndC4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aAorICAgX19USFJPVy4gICovCitleHRlcm4gX19waWRfdCB3YWl0cGlkIChfX3BpZF90IF9fcGlkLCBpbnQgKl9fc3RhdF9sb2MsIGludCBfX29wdGlvbnMpOworCisjaWYgZGVmaW5lZCBfX1VTRV9TVklEIHx8IGRlZmluZWQgX19VU0VfWE9QRU4KKyMgZGVmaW5lIF9fbmVlZF9zaWdpbmZvX3QKKyMgaW5jbHVkZSA8Yml0cy9zaWdpbmZvLmg+CisvKiBXYWl0IGZvciBhIGNoaWxkaW5nIG1hdGNoaW5nIElEVFlQRSBhbmQgSUQgdG8gY2hhbmdlIHRoZSBzdGF0dXMgYW5kCisgICBwbGFjZSBhcHByb3ByaWF0ZSBpbmZvcm1hdGlvbiBpbiAqSU5GT1AuCisgICBJZiBJRFRZUEUgaXMgUF9QSUQsIG1hdGNoIGFueSBwcm9jZXNzIHdob3NlIHByb2Nlc3MgSUQgaXMgSUQuCisgICBJZiBJRFRZUEUgaXMgUF9QR0lELCBtYXRjaCBhbnkgcHJvY2VzcyB3aG9zZSBwcm9jZXNzIGdyb3VwIGlzIElELgorICAgSWYgSURUWVBFIGlzIFBfQUxMLCBtYXRjaCBhbnkgcHJvY2Vzcy4KKyAgIElmIHRoZSBXTk9IQU5HIGJpdCBpcyBzZXQgaW4gT1BUSU9OUywgYW5kIHRoYXQgY2hpbGQKKyAgIGlzIG5vdCBhbHJlYWR5IGRlYWQsIGNsZWFyICpJTkZPUCBhbmQgcmV0dXJuIDAuICBJZiBzdWNjZXNzZnVsLCBzdG9yZQorICAgZXhpdCBjb2RlIGFuZCBzdGF0dXMgaW4gKklORk9QLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoCisgICBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgd2FpdGlkIChpZHR5cGVfdCBfX2lkdHlwZSwgX19pZF90IF9faWQsIHNpZ2luZm9fdCAqX19pbmZvcCwKKwkJICAgaW50IF9fb3B0aW9ucyk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgX19VU0VfQlNEIHx8IGRlZmluZWQgX19VU0VfWE9QRU5fRVhURU5ERUQKKy8qIFRoaXMgYmVpbmcgaGVyZSBtYWtlcyB0aGUgcHJvdG90eXBlcyB2YWxpZCB3aGV0aGVyIG9yIG5vdAorICAgd2UgaGF2ZSBhbHJlYWR5IGluY2x1ZGVkIDxzeXMvcmVzb3VyY2UuaD4gdG8gZGVmaW5lIGBzdHJ1Y3QgcnVzYWdlJy4gICovCitzdHJ1Y3QgcnVzYWdlOworCisvKiBXYWl0IGZvciBhIGNoaWxkIHRvIGV4aXQuICBXaGVuIG9uZSBkb2VzLCBwdXQgaXRzIHN0YXR1cyBpbiAqU1RBVF9MT0MgYW5kCisgICByZXR1cm4gaXRzIHByb2Nlc3MgSUQuICBGb3IgZXJyb3JzIHJldHVybiAocGlkX3QpIC0xLiAgSWYgVVNBR0UgaXMgbm90CisgICBuaWwsIHN0b3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjaGlsZCdzIHJlc291cmNlIHVzYWdlIHRoZXJlLiAgSWYgdGhlCisgICBXVU5UUkFDRUQgYml0IGlzIHNldCBpbiBPUFRJT05TLCByZXR1cm4gc3RhdHVzIGZvciBzdG9wcGVkIGNoaWxkcmVuOworICAgb3RoZXJ3aXNlIGRvbid0LiAgKi8KK2V4dGVybiBfX3BpZF90IHdhaXQzIChfX1dBSVRfU1RBVFVTIF9fc3RhdF9sb2MsIGludCBfX29wdGlvbnMsCisJCSAgICAgIHN0cnVjdCBydXNhZ2UgKiBfX3VzYWdlKSBfX1RIUk9XOworI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9CU0QKKy8qIFBJRCBpcyBsaWtlIHdhaXRwaWQuICBPdGhlciBhcmdzIGFyZSBsaWtlIHdhaXQzLiAgKi8KK2V4dGVybiBfX3BpZF90IHdhaXQ0IChfX3BpZF90IF9fcGlkLCBfX1dBSVRfU1RBVFVTIF9fc3RhdF9sb2MsIGludCBfX29wdGlvbnMsCisJCSAgICAgIHN0cnVjdCBydXNhZ2UgKl9fdXNhZ2UpIF9fVEhST1c7CisjZW5kaWYgLyogVXNlIEJTRC4gICovCisKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIHN5cy93YWl0LmggICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3hhdHRyLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzL3hhdHRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjczN2Y5MAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXMveGF0dHIuaApAQCAtMCwwICsxLDEwNCBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9TWVNfWEFUVFJfSAorI2RlZmluZSBfU1lTX1hBVFRSX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworCitfX0JFR0lOX0RFQ0xTCisKKy8qIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIHNob3VsZCBiZSB1c2VkIGZvciB0aGUgZmlmdGggcGFyYW1ldGVyIG9mCisgICBgKnNldHhhdHRyJy4gICovCitlbnVtCit7CisgIFhBVFRSX0NSRUFURSA9IDEsCS8qIHNldCB2YWx1ZSwgZmFpbCBpZiBhdHRyIGFscmVhZHkgZXhpc3RzLiAgKi8KKyNkZWZpbmUgWEFUVFJfQ1JFQVRFCVhBVFRSX0NSRUFURQorICBYQVRUUl9SRVBMQUNFID0gMgkvKiBzZXQgdmFsdWUsIGZhaWwgaWYgYXR0ciBkb2VzIG5vdCBleGlzdC4gICovCisjZGVmaW5lIFhBVFRSX1JFUExBQ0UJWEFUVFJfUkVQTEFDRQorfTsKKworLyogU2V0IHRoZSBhdHRyaWJ1dGUgTkFNRSBvZiB0aGUgZmlsZSBwb2ludGVkIHRvIGJ5IFBBVEggdG8gVkFMVUUgKHdoaWNoCisgICBpcyBTSVpFIGJ5dGVzIGxvbmcpLiAgUmV0dXJuIDAgb24gc3VjY2VzcywgLTEgZm9yIGVycm9ycy4gICovCitleHRlcm4gaW50IHNldHhhdHRyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19jb25zdCBjaGFyICpfX25hbWUsCisJCSAgICAgX19jb25zdCB2b2lkICpfX3ZhbHVlLCBzaXplX3QgX19zaXplLCBpbnQgX19mbGFncykKKwlfX1RIUk9XOworCisvKiBTZXQgdGhlIGF0dHJpYnV0ZSBOQU1FIG9mIHRoZSBmaWxlIHBvaW50ZWQgdG8gYnkgUEFUSCB0byBWQUxVRSAod2hpY2ggaXMKKyAgIFNJWkUgYnl0ZXMgbG9uZyksIG5vdCBmb2xsb3dpbmcgc3ltbGlua3MgZm9yIHRoZSBsYXN0IHBhdGhuYW1lIGNvbXBvbmVudC4KKyAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIGZvciBlcnJvcnMuICAqLworZXh0ZXJuIGludCBsc2V0eGF0dHIgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2NvbnN0IGNoYXIgKl9fbmFtZSwKKwkJICAgICAgX19jb25zdCB2b2lkICpfX3ZhbHVlLCBzaXplX3QgX19zaXplLCBpbnQgX19mbGFncykKKwlfX1RIUk9XOworCisvKiBTZXQgdGhlIGF0dHJpYnV0ZSBOQU1FIG9mIHRoZSBmaWxlIGRlc2NyaXB0b3IgRkQgdG8gVkFMVUUgKHdoaWNoIGlzIFNJWkUKKyAgIGJ5dGVzIGxvbmcpLiAgUmV0dXJuIDAgb24gc3VjY2VzcywgLTEgZm9yIGVycm9ycy4gICovCitleHRlcm4gaW50IGZzZXR4YXR0ciAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IHZvaWQgKl9fdmFsdWUsCisJCSAgICAgIHNpemVfdCBfX3NpemUsIGludCBfX2ZsYWdzKSBfX1RIUk9XOworCisvKiBHZXQgdGhlIGF0dHJpYnV0ZSBOQU1FIG9mIHRoZSBmaWxlIHBvaW50ZWQgdG8gYnkgUEFUSCB0byBWQUxVRSAod2hpY2ggaXMKKyAgIFNJWkUgYnl0ZXMgbG9uZykuICBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBmb3IgZXJyb3JzLiAgKi8KK2V4dGVybiBzc2l6ZV90IGdldHhhdHRyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19jb25zdCBjaGFyICpfX25hbWUsCisJCQkgdm9pZCAqX192YWx1ZSwgc2l6ZV90IF9fc2l6ZSkgX19USFJPVzsKKworLyogR2V0IHRoZSBhdHRyaWJ1dGUgTkFNRSBvZiB0aGUgZmlsZSBwb2ludGVkIHRvIGJ5IFBBVEggdG8gVkFMVUUgKHdoaWNoIGlzCisgICBTSVpFIGJ5dGVzIGxvbmcpLCBub3QgZm9sbG93aW5nIHN5bWxpbmtzIGZvciB0aGUgbGFzdCBwYXRobmFtZSBjb21wb25lbnQuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBmb3IgZXJyb3JzLiAgKi8KK2V4dGVybiBzc2l6ZV90IGxnZXR4YXR0ciAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fY29uc3QgY2hhciAqX19uYW1lLAorCQkJICB2b2lkICpfX3ZhbHVlLCBzaXplX3QgX19zaXplKSBfX1RIUk9XOworCisvKiBHZXQgdGhlIGF0dHJpYnV0ZSBOQU1FIG9mIHRoZSBmaWxlIGRlc2NyaXB0b3IgRkQgdG8gVkFMVUUgKHdoaWNoIGlzIFNJWkUKKyAgIGJ5dGVzIGxvbmcpLiAgUmV0dXJuIDAgb24gc3VjY2VzcywgLTEgZm9yIGVycm9ycy4gICovCitleHRlcm4gc3NpemVfdCBmZ2V0eGF0dHIgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fbmFtZSwgdm9pZCAqX192YWx1ZSwKKwkJCSAgc2l6ZV90IF9fc2l6ZSkgX19USFJPVzsKKworLyogTGlzdCBhdHRyaWJ1dGVzIG9mIHRoZSBmaWxlIHBvaW50ZWQgdG8gYnkgUEFUSCBpbnRvIHRoZSB1c2VyLXN1cHBsaWVkCisgICBidWZmZXIgTElTVCAod2hpY2ggaXMgU0laRSBieXRlcyBiaWcpLiAgUmV0dXJuIDAgb24gc3VjY2VzcywgLTEgZm9yCisgICBlcnJvcnMuICAqLworZXh0ZXJuIHNzaXplX3QgbGlzdHhhdHRyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqX19saXN0LCBzaXplX3QgX19zaXplKQorCV9fVEhST1c7CisKKy8qIExpc3QgYXR0cmlidXRlcyBvZiB0aGUgZmlsZSBwb2ludGVkIHRvIGJ5IFBBVEggaW50byB0aGUgdXNlci1zdXBwbGllZAorICAgYnVmZmVyIExJU1QgKHdoaWNoIGlzIFNJWkUgYnl0ZXMgYmlnKSwgbm90IGZvbGxvd2luZyBzeW1saW5rcyBmb3IgdGhlCisgICBsYXN0IHBhdGhuYW1lIGNvbXBvbmVudC4gIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIGZvciBlcnJvcnMuICAqLworZXh0ZXJuIHNzaXplX3QgbGxpc3R4YXR0ciAoX19jb25zdCBjaGFyICpfX3BhdGgsIGNoYXIgKl9fbGlzdCwgc2l6ZV90IF9fc2l6ZSkKKwlfX1RIUk9XOworCisvKiBMaXN0IGF0dHJpYnV0ZXMgb2YgdGhlIGZpbGUgZGVzY3JpcHRvciBGRCBpbnRvIHRoZSB1c2VyLXN1cHBsaWVkIGJ1ZmZlcgorICAgTElTVCAod2hpY2ggaXMgU0laRSBieXRlcyBiaWcpLiAgUmV0dXJuIDAgb24gc3VjY2VzcywgLTEgZm9yIGVycm9ycy4gICovCitleHRlcm4gc3NpemVfdCBmbGlzdHhhdHRyIChpbnQgX19mZCwgY2hhciAqX19saXN0LCBzaXplX3QgX19zaXplKQorCV9fVEhST1c7CisKKy8qIFJlbW92ZSB0aGUgYXR0cmlidXRlIE5BTUUgZnJvbSB0aGUgZmlsZSBwb2ludGVkIHRvIGJ5IFBBVEguICBSZXR1cm4gMAorICAgb24gc3VjY2VzcywgLTEgZm9yIGVycm9ycy4gICovCitleHRlcm4gaW50IHJlbW92ZXhhdHRyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19jb25zdCBjaGFyICpfX25hbWUpIF9fVEhST1c7CisKKy8qIFJlbW92ZSB0aGUgYXR0cmlidXRlIE5BTUUgZnJvbSB0aGUgZmlsZSBwb2ludGVkIHRvIGJ5IFBBVEgsIG5vdAorICAgZm9sbG93aW5nIHN5bWxpbmtzIGZvciB0aGUgbGFzdCBwYXRobmFtZSBjb21wb25lbnQuICBSZXR1cm4gMCBvbgorICAgc3VjY2VzcywgLTEgZm9yIGVycm9ycy4gICovCitleHRlcm4gaW50IGxyZW1vdmV4YXR0ciAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fY29uc3QgY2hhciAqX19uYW1lKSBfX1RIUk9XOworCisvKiBSZW1vdmUgdGhlIGF0dHJpYnV0ZSBOQU1FIGZyb20gdGhlIGZpbGUgZGVzY3JpcHRvciBGRC4gIFJldHVybiAwIG9uCisgICBzdWNjZXNzLCAtMSBmb3IgZXJyb3JzLiAgKi8KK2V4dGVybiBpbnQgZnJlbW92ZXhhdHRyIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX25hbWUpIF9fVEhST1c7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZgkvKiBzeXMveGF0dHIuaCAgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXNjYWxsLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzY2FsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMzA1NzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzY2FsbC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5c2V4aXRzLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvc3lzZXhpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzI0NmI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5c2V4aXRzLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODcsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpc3lzZXhpdHMuaAk4LjEgKEJlcmtlbGV5KSA2LzIvOTMKKyAqLworCisjaWZuZGVmCV9TWVNFWElUU19ICisjZGVmaW5lCV9TWVNFWElUU19IIDEKKworLyoKKyAqICBTWVNFWElUUy5IIC0tIEV4aXQgc3RhdHVzIGNvZGVzIGZvciBzeXN0ZW0gcHJvZ3JhbXMuCisgKgorICoJVGhpcyBpbmNsdWRlIGZpbGUgYXR0ZW1wdHMgdG8gY2F0ZWdvcml6ZSBwb3NzaWJsZSBlcnJvcgorICoJZXhpdCBzdGF0dXNlcyBmb3Igc3lzdGVtIHByb2dyYW1zLCBub3RhYmx5IGRlbGl2ZXJtYWlsCisgKglhbmQgdGhlIEJlcmtlbGV5IG5ldHdvcmsuCisgKgorICoJRXJyb3IgbnVtYmVycyBiZWdpbiBhdCBFWF9fQkFTRSB0byByZWR1Y2UgdGhlIHBvc3NpYmlsaXR5IG9mCisgKgljbGFzaGluZyB3aXRoIG90aGVyIGV4aXQgc3RhdHVzZXMgdGhhdCByYW5kb20gcHJvZ3JhbXMgbWF5CisgKglhbHJlYWR5IHJldHVybi4gIFRoZSBtZWFuaW5nIG9mIHRoZSBjb2RlcyBpcyBhcHByb3hpbWF0ZWx5CisgKglhcyBmb2xsb3dzOgorICoKKyAqCUVYX1VTQUdFIC0tIFRoZSBjb21tYW5kIHdhcyB1c2VkIGluY29ycmVjdGx5LCBlLmcuLCB3aXRoCisgKgkJdGhlIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGEgYmFkIGZsYWcsIGEgYmFkCisgKgkJc3ludGF4IGluIGEgcGFyYW1ldGVyLCBvciB3aGF0ZXZlci4KKyAqCUVYX0RBVEFFUlIgLS0gVGhlIGlucHV0IGRhdGEgd2FzIGluY29ycmVjdCBpbiBzb21lIHdheS4KKyAqCQlUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHVzZXIncyBkYXRhICYgbm90CisgKgkJc3lzdGVtIGZpbGVzLgorICoJRVhfTk9JTlBVVCAtLSBBbiBpbnB1dCBmaWxlIChub3QgYSBzeXN0ZW0gZmlsZSkgZGlkIG5vdAorICoJCWV4aXN0IG9yIHdhcyBub3QgcmVhZGFibGUuICBUaGlzIGNvdWxkIGFsc28gaW5jbHVkZQorICoJCWVycm9ycyBsaWtlICJObyBtZXNzYWdlIiB0byBhIG1haWxlciAoaWYgaXQgY2FyZWQKKyAqCQl0byBjYXRjaCBpdCkuCisgKglFWF9OT1VTRVIgLS0gVGhlIHVzZXIgc3BlY2lmaWVkIGRpZCBub3QgZXhpc3QuICBUaGlzIG1pZ2h0CisgKgkJYmUgdXNlZCBmb3IgbWFpbCBhZGRyZXNzZXMgb3IgcmVtb3RlIGxvZ2lucy4KKyAqCUVYX05PSE9TVCAtLSBUaGUgaG9zdCBzcGVjaWZpZWQgZGlkIG5vdCBleGlzdC4gIFRoaXMgaXMgdXNlZAorICoJCWluIG1haWwgYWRkcmVzc2VzIG9yIG5ldHdvcmsgcmVxdWVzdHMuCisgKglFWF9VTkFWQUlMQUJMRSAtLSBBIHNlcnZpY2UgaXMgdW5hdmFpbGFibGUuICBUaGlzIGNhbiBvY2N1cgorICoJCWlmIGEgc3VwcG9ydCBwcm9ncmFtIG9yIGZpbGUgZG9lcyBub3QgZXhpc3QuICBUaGlzCisgKgkJY2FuIGFsc28gYmUgdXNlZCBhcyBhIGNhdGNoYWxsIG1lc3NhZ2Ugd2hlbiBzb21ldGhpbmcKKyAqCQl5b3Ugd2FudGVkIHRvIGRvIGRvZXNuJ3Qgd29yaywgYnV0IHlvdSBkb24ndCBrbm93CisgKgkJd2h5LgorICoJRVhfU09GVFdBUkUgLS0gQW4gaW50ZXJuYWwgc29mdHdhcmUgZXJyb3IgaGFzIGJlZW4gZGV0ZWN0ZWQuCisgKgkJVGhpcyBzaG91bGQgYmUgbGltaXRlZCB0byBub24tb3BlcmF0aW5nIHN5c3RlbSByZWxhdGVkCisgKgkJZXJyb3JzIGFzIHBvc3NpYmxlLgorICoJRVhfT1NFUlIgLS0gQW4gb3BlcmF0aW5nIHN5c3RlbSBlcnJvciBoYXMgYmVlbiBkZXRlY3RlZC4KKyAqCQlUaGlzIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgZm9yIHN1Y2ggdGhpbmdzIGFzICJjYW5ub3QKKyAqCQlmb3JrIiwgImNhbm5vdCBjcmVhdGUgcGlwZSIsIG9yIHRoZSBsaWtlLiAgSXQgaW5jbHVkZXMKKyAqCQl0aGluZ3MgbGlrZSBnZXR1aWQgcmV0dXJuaW5nIGEgdXNlciB0aGF0IGRvZXMgbm90CisgKgkJZXhpc3QgaW4gdGhlIHBhc3N3ZCBmaWxlLgorICoJRVhfT1NGSUxFIC0tIFNvbWUgc3lzdGVtIGZpbGUgKGUuZy4sIC9ldGMvcGFzc3dkLCAvZXRjL3V0bXAsCisgKgkJZXRjLikgZG9lcyBub3QgZXhpc3QsIGNhbm5vdCBiZSBvcGVuZWQsIG9yIGhhcyBzb21lCisgKgkJc29ydCBvZiBlcnJvciAoZS5nLiwgc3ludGF4IGVycm9yKS4KKyAqCUVYX0NBTlRDUkVBVCAtLSBBICh1c2VyIHNwZWNpZmllZCkgb3V0cHV0IGZpbGUgY2Fubm90IGJlCisgKgkJY3JlYXRlZC4KKyAqCUVYX0lPRVJSIC0tIEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGRvaW5nIEkvTyBvbiBzb21lIGZpbGUuCisgKglFWF9URU1QRkFJTCAtLSB0ZW1wb3JhcnkgZmFpbHVyZSwgaW5kaWNhdGluZyBzb21ldGhpbmcgdGhhdAorICoJCWlzIG5vdCByZWFsbHkgYW4gZXJyb3IuICBJbiBzZW5kbWFpbCwgdGhpcyBtZWFucworICoJCXRoYXQgYSBtYWlsZXIgKGUuZy4pIGNvdWxkIG5vdCBjcmVhdGUgYSBjb25uZWN0aW9uLAorICoJCWFuZCB0aGUgcmVxdWVzdCBzaG91bGQgYmUgcmVhdHRlbXB0ZWQgbGF0ZXIuCisgKglFWF9QUk9UT0NPTCAtLSB0aGUgcmVtb3RlIHN5c3RlbSByZXR1cm5lZCBzb21ldGhpbmcgdGhhdAorICoJCXdhcyAibm90IHBvc3NpYmxlIiBkdXJpbmcgYSBwcm90b2NvbCBleGNoYW5nZS4KKyAqCUVYX05PUEVSTSAtLSBZb3UgZGlkIG5vdCBoYXZlIHN1ZmZpY2llbnQgcGVybWlzc2lvbiB0bworICoJCXBlcmZvcm0gdGhlIG9wZXJhdGlvbi4gIFRoaXMgaXMgbm90IGludGVuZGVkIGZvcgorICoJCWZpbGUgc3lzdGVtIHByb2JsZW1zLCB3aGljaCBzaG91bGQgdXNlIE5PSU5QVVQgb3IKKyAqCQlDQU5UQ1JFQVQsIGJ1dCByYXRoZXIgZm9yIGhpZ2hlciBsZXZlbCBwZXJtaXNzaW9ucy4KKyAqLworCisjZGVmaW5lIEVYX09LCQkwCS8qIHN1Y2Nlc3NmdWwgdGVybWluYXRpb24gKi8KKworI2RlZmluZSBFWF9fQkFTRQk2NAkvKiBiYXNlIHZhbHVlIGZvciBlcnJvciBtZXNzYWdlcyAqLworCisjZGVmaW5lIEVYX1VTQUdFCTY0CS8qIGNvbW1hbmQgbGluZSB1c2FnZSBlcnJvciAqLworI2RlZmluZSBFWF9EQVRBRVJSCTY1CS8qIGRhdGEgZm9ybWF0IGVycm9yICovCisjZGVmaW5lIEVYX05PSU5QVVQJNjYJLyogY2Fubm90IG9wZW4gaW5wdXQgKi8KKyNkZWZpbmUgRVhfTk9VU0VSCTY3CS8qIGFkZHJlc3NlZSB1bmtub3duICovCisjZGVmaW5lIEVYX05PSE9TVAk2OAkvKiBob3N0IG5hbWUgdW5rbm93biAqLworI2RlZmluZSBFWF9VTkFWQUlMQUJMRQk2OQkvKiBzZXJ2aWNlIHVuYXZhaWxhYmxlICovCisjZGVmaW5lIEVYX1NPRlRXQVJFCTcwCS8qIGludGVybmFsIHNvZnR3YXJlIGVycm9yICovCisjZGVmaW5lIEVYX09TRVJSCTcxCS8qIHN5c3RlbSBlcnJvciAoZS5nLiwgY2FuJ3QgZm9yaykgKi8KKyNkZWZpbmUgRVhfT1NGSUxFCTcyCS8qIGNyaXRpY2FsIE9TIGZpbGUgbWlzc2luZyAqLworI2RlZmluZSBFWF9DQU5UQ1JFQVQJNzMJLyogY2FuJ3QgY3JlYXRlICh1c2VyKSBvdXRwdXQgZmlsZSAqLworI2RlZmluZSBFWF9JT0VSUgk3NAkvKiBpbnB1dC9vdXRwdXQgZXJyb3IgKi8KKyNkZWZpbmUgRVhfVEVNUEZBSUwJNzUJLyogdGVtcCBmYWlsdXJlOyB1c2VyIGlzIGludml0ZWQgdG8gcmV0cnkgKi8KKyNkZWZpbmUgRVhfUFJPVE9DT0wJNzYJLyogcmVtb3RlIGVycm9yIGluIHByb3RvY29sICovCisjZGVmaW5lIEVYX05PUEVSTQk3NwkvKiBwZXJtaXNzaW9uIGRlbmllZCAqLworI2RlZmluZSBFWF9DT05GSUcJNzgJLyogY29uZmlndXJhdGlvbiBlcnJvciAqLworCisjZGVmaW5lIEVYX19NQVgJNzgJLyogbWF4aW11bSBsaXN0ZWQgdmFsdWUgKi8KKworI2VuZGlmIC8qIHN5c2V4aXRzLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXNsb2cuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS9zeXNsb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzBiNDkyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3N5c2xvZy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxzeXMvc3lzbG9nLmg+CmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvdGFyLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvdGFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRmZWY3NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS90YXIuaApAQCAtMCwwICsxLDEwOCBAQAorLyogRXh0ZW5kZWQgdGFyIGZvcm1hdCBmcm9tIFBPU0lYLjEuCisgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIFdyaXR0ZW4gYnkgRGF2aWQgSi4gTWFjS2VuemllLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZglfVEFSX0gKKyNkZWZpbmUJX1RBUl9ICTEKKworLyogQSB0YXIgYXJjaGl2ZSBjb25zaXN0cyBvZiA1MTItYnl0ZSBibG9ja3MuCisgICBFYWNoIGZpbGUgaW4gdGhlIGFyY2hpdmUgaGFzIGEgaGVhZGVyIGJsb2NrIGZvbGxvd2VkIGJ5IDArIGRhdGEgYmxvY2tzLgorICAgVHdvIGJsb2NrcyBvZiBOVUwgYnl0ZXMgaW5kaWNhdGUgdGhlIGVuZCBvZiB0aGUgYXJjaGl2ZS4gICovCisKKy8qIFRoZSBmaWVsZHMgb2YgaGVhZGVyIGJsb2NrczoKKyAgIEFsbCBzdHJpbmdzIGFyZSBzdG9yZWQgYXMgSVNPIDY0NiAoYXBwcm94aW1hdGVseSBBU0NJSSkgc3RyaW5ncy4KKworICAgRmllbGRzIGFyZSBudW1lcmljIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQgYmVsb3c7IG51bWJlcnMgYXJlIElTTyA2NDYKKyAgIHJlcHJlc2VudGF0aW9ucyBvZiBvY3RhbCBudW1iZXJzLCB3aXRoIGxlYWRpbmcgemVyb3MgYXMgbmVlZGVkLgorCisgICBsaW5rbmFtZSBpcyBvbmx5IHZhbGlkIHdoZW4gdHlwZWZsYWc9PUxOS1RZUEUuICBJdCBkb2Vzbid0IHVzZSBwcmVmaXg7CisgICBmaWxlcyB0aGF0IGFyZSBsaW5rcyB0byBwYXRobmFtZXMgPjEwMCBjaGFycyBsb25nIGNhbiBub3QgYmUgc3RvcmVkCisgICBpbiBhIHRhciBhcmNoaXZlLgorCisgICBJZiB0eXBlZmxhZz09e0xOS1RZUEUsU1lNVFlQRSxESVJUWVBFfSB0aGVuIHNpemUgbXVzdCBiZSAwLgorCisgICBkZXZtYWpvciBhbmQgZGV2bWlub3IgYXJlIG9ubHkgdmFsaWQgZm9yIHR5cGVmbGFnPT17QkxLVFlQRSxDSFJUWVBFfS4KKworICAgY2hrc3VtIGNvbnRhaW5zIHRoZSBzdW0gb2YgYWxsIDUxMiBieXRlcyBpbiB0aGUgaGVhZGVyIGJsb2NrLAorICAgdHJlYXRpbmcgZWFjaCBieXRlIGFzIGFuIDgtYml0IHVuc2lnbmVkIHZhbHVlIGFuZCB0cmVhdGluZyB0aGUKKyAgIDggYnl0ZXMgb2YgY2hrc3VtIGFzIGJsYW5rIGNoYXJhY3RlcnMuCisKKyAgIHVuYW1lIGFuZCBnbmFtZSBhcmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIHVpZCBhbmQgZ2lkLCBpZiB0aG9zZQorICAgbmFtZXMgZXhpc3QgbG9jYWxseS4KKworICAgRmllbGQgTmFtZQlCeXRlIE9mZnNldAlMZW5ndGggaW4gQnl0ZXMJRmllbGQgVHlwZQorICAgbmFtZQkJMAkJMTAwCQlOVUwtdGVybWluYXRlZCBpZiBOVUwgZml0cworICAgbW9kZQkJMTAwCQk4CisgICB1aWQJCTEwOAkJOAorICAgZ2lkCQkxMTYJCTgKKyAgIHNpemUJCTEyNAkJMTIKKyAgIG10aW1lCTEzNgkJMTIKKyAgIGNoa3N1bQkxNDgJCTgKKyAgIHR5cGVmbGFnCTE1NgkJMQkJc2VlIGJlbG93CisgICBsaW5rbmFtZQkxNTcJCTEwMAkJTlVMLXRlcm1pbmF0ZWQgaWYgTlVMIGZpdHMKKyAgIG1hZ2ljCTI1NwkJNgkJbXVzdCBiZSBUTUFHSUMgKE5VTCB0ZXJtLikKKyAgIHZlcnNpb24JMjYzCQkyCQltdXN0IGJlIFRWRVJTSU9OCisgICB1bmFtZQkyNjUJCTMyCQlOVUwtdGVybWluYXRlZAorICAgZ25hbWUJMjk3CQkzMgkJTlVMLXRlcm1pbmF0ZWQKKyAgIGRldm1ham9yCTMyOQkJOAorICAgZGV2bWlub3IJMzM3CQk4CisgICBwcmVmaXgJMzQ1CQkxNTUJCU5VTC10ZXJtaW5hdGVkIGlmIE5VTCBmaXRzCisKKyAgIElmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgcHJlZml4IGlzICdcMCcsIHRoZSBmaWxlIG5hbWUgaXMgbmFtZTsKKyAgIG90aGVyd2lzZSwgaXQgaXMgcHJlZml4L25hbWUuICBGaWxlcyB3aG9zZSBwYXRobmFtZXMgZG9uJ3QgZml0IGluIHRoYXQKKyAgIGxlbmd0aCBjYW4gbm90IGJlIHN0b3JlZCBpbiBhIHRhciBhcmNoaXZlLiAgKi8KKworLyogVGhlIGJpdHMgaW4gbW9kZTogKi8KKyNkZWZpbmUgVFNVSUQJMDQwMDAKKyNkZWZpbmUgVFNHSUQJMDIwMDAKKyNkZWZpbmUgVFNWVFgJMDEwMDAKKyNkZWZpbmUgVFVSRUFECTAwNDAwCisjZGVmaW5lIFRVV1JJVEUJMDAyMDAKKyNkZWZpbmUgVFVFWEVDCTAwMTAwCisjZGVmaW5lIFRHUkVBRAkwMDA0MAorI2RlZmluZSBUR1dSSVRFCTAwMDIwCisjZGVmaW5lIFRHRVhFQwkwMDAxMAorI2RlZmluZSBUT1JFQUQJMDAwMDQKKyNkZWZpbmUgVE9XUklURQkwMDAwMgorI2RlZmluZSBUT0VYRUMJMDAwMDEKKworLyogVGhlIHZhbHVlcyBmb3IgdHlwZWZsYWc6CisgICBWYWx1ZXMgJ0EnLSdaJyBhcmUgcmVzZXJ2ZWQgZm9yIGN1c3RvbSBpbXBsZW1lbnRhdGlvbnMuCisgICBBbGwgb3RoZXIgdmFsdWVzIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIFBPU0lYLjEgcmV2aXNpb25zLiAgKi8KKworI2RlZmluZSBSRUdUWVBFCQknMCcJLyogUmVndWxhciBmaWxlIChwcmVmZXJyZWQgY29kZSkuICAqLworI2RlZmluZSBBUkVHVFlQRQknXDAnCS8qIFJlZ3VsYXIgZmlsZSAoYWx0ZXJuYXRlIGNvZGUpLiAgKi8KKyNkZWZpbmUgTE5LVFlQRQkJJzEnCS8qIEhhcmQgbGluay4gICovCisjZGVmaW5lIFNZTVRZUEUJCScyJwkvKiBTeW1ib2xpYyBsaW5rIChoYXJkIGlmIG5vdCBzdXBwb3J0ZWQpLiAgKi8KKyNkZWZpbmUgQ0hSVFlQRQkJJzMnCS8qIENoYXJhY3RlciBzcGVjaWFsLiAgKi8KKyNkZWZpbmUgQkxLVFlQRQkJJzQnCS8qIEJsb2NrIHNwZWNpYWwuICAqLworI2RlZmluZSBESVJUWVBFCQknNScJLyogRGlyZWN0b3J5LiAgKi8KKyNkZWZpbmUgRklGT1RZUEUJJzYnCS8qIE5hbWVkIHBpcGUuICAqLworI2RlZmluZSBDT05UVFlQRQknNycJLyogQ29udGlndW91cyBmaWxlICovCisgLyogKHJlZ3VsYXIgZmlsZSBpZiBub3Qgc3VwcG9ydGVkKS4gICovCisKKy8qIENvbnRlbnRzIG9mIG1hZ2ljIGZpZWxkIGFuZCBpdHMgbGVuZ3RoLiAgKi8KKyNkZWZpbmUgVE1BR0lDCSJ1c3RhciIKKyNkZWZpbmUgVE1BR0xFTgk2CisKKy8qIENvbnRlbnRzIG9mIHRoZSB2ZXJzaW9uIGZpZWxkIGFuZCBpdHMgbGVuZ3RoLiAgKi8KKyNkZWZpbmUgVFZFUlNJT04JIjAwIgorI2RlZmluZSBUVkVSU0xFTgkyCisKKyNlbmRpZiAvKiB0YXIuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3Rlcm1pby5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3Rlcm1pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNjEwZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvdGVybWlvLmgKQEAgLTAsMCArMSw2IEBACisvKiBDb21wYXRpYmxlIDx0ZXJtaW8uaD4gZm9yIG9sZCBgc3RydWN0IHRlcm1pbycgaW9jdGwgaW50ZXJmYWNlLgorICAgVGhpcyBpcyBvYnNvbGV0ZTsgdXNlIHRoZSBQT1NJWC4xIGBzdHJ1Y3QgdGVybWlvcycgaW50ZXJmYWNlCisgICBkZWZpbmVkIGluIDx0ZXJtaW9zLmg+IGluc3RlYWQuICAqLworCisjaW5jbHVkZSA8dGVybWlvcy5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3Rlcm1pb3MuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS90ZXJtaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY5OGIxZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS90ZXJtaW9zLmgKQEAgLTAsMCArMSwxMTAgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5MSw5Miw5Myw5NCw5Niw5Nyw5OCw5OSwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyoKKyAqCVBPU0lYIFN0YW5kYXJkOiA3LjEtMiBHZW5lcmFsIFRlcm1pbmFsIEludGVyZmFjZQk8dGVybWlvcy5oPgorICovCisKKyNpZm5kZWYJX1RFUk1JT1NfSAorI2RlZmluZQlfVEVSTUlPU19ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaWZkZWYgX19VU0VfVU5JWDk4CisvKiBXZSBuZWVkIGBwaWRfdCcuICAqLworIyBpbmNsdWRlIDxiaXRzL3R5cGVzLmg+CisjIGlmbmRlZiBfX3BpZF90X2RlZmluZWQKK3R5cGVkZWYgX19waWRfdCBwaWRfdDsKKyMgIGRlZmluZSBfX3BpZF90X2RlZmluZWQKKyMgZW5kaWYKKyNlbmRpZgorCitfX0JFR0lOX0RFQ0xTCisKKy8qIEdldCB0aGUgc3lzdGVtLWRlcGVuZGVudCBkZWZpbml0aW9ucyBvZiBgc3RydWN0IHRlcm1pb3MnLCBgdGNmbGFnX3QnLAorICAgYGNjX3QnLCBgc3BlZWRfdCcsIGFuZCBhbGwgdGhlIG1hY3JvcyBzcGVjaWZ5aW5nIHRoZSBmbGFnIGJpdHMuICAqLworI2luY2x1ZGUgPGJpdHMvdGVybWlvcy5oPgorCisjaWZkZWYgX19VU0VfQlNECisvKiBDb21wYXJlIGEgY2hhcmFjdGVyIEMgdG8gYSB2YWx1ZSBWQUwgZnJvbSB0aGUgYGNfY2MnIGFycmF5IGluIGEKKyAgIGBzdHJ1Y3QgdGVybWlvcycuICBJZiBWQUwgaXMgX1BPU0lYX1ZESVNBQkxFLCBubyBjaGFyYWN0ZXIgY2FuIG1hdGNoIGl0LiAgKi8KKyMgZGVmaW5lIENDRVEodmFsLCBjKQkoKGMpID09ICh2YWwpICYmICh2YWwpICE9IF9QT1NJWF9WRElTQUJMRSkKKyNlbmRpZgorCisvKiBSZXR1cm4gdGhlIG91dHB1dCBiYXVkIHJhdGUgc3RvcmVkIGluICpURVJNSU9TX1AuICAqLworZXh0ZXJuIHNwZWVkX3QgY2ZnZXRvc3BlZWQgKF9fY29uc3Qgc3RydWN0IHRlcm1pb3MgKl9fdGVybWlvc19wKSBfX1RIUk9XOworCisvKiBSZXR1cm4gdGhlIGlucHV0IGJhdWQgcmF0ZSBzdG9yZWQgaW4gKlRFUk1JT1NfUC4gICovCitleHRlcm4gc3BlZWRfdCBjZmdldGlzcGVlZCAoX19jb25zdCBzdHJ1Y3QgdGVybWlvcyAqX190ZXJtaW9zX3ApIF9fVEhST1c7CisKKy8qIFNldCB0aGUgb3V0cHV0IGJhdWQgcmF0ZSBzdG9yZWQgaW4gKlRFUk1JT1NfUCB0byBTUEVFRC4gICovCitleHRlcm4gaW50IGNmc2V0b3NwZWVkIChzdHJ1Y3QgdGVybWlvcyAqX190ZXJtaW9zX3AsIHNwZWVkX3QgX19zcGVlZCkgX19USFJPVzsKKworLyogU2V0IHRoZSBpbnB1dCBiYXVkIHJhdGUgc3RvcmVkIGluICpURVJNSU9TX1AgdG8gU1BFRUQuICAqLworZXh0ZXJuIGludCBjZnNldGlzcGVlZCAoc3RydWN0IHRlcm1pb3MgKl9fdGVybWlvc19wLCBzcGVlZF90IF9fc3BlZWQpIF9fVEhST1c7CisKKyNpZmRlZglfX1VTRV9CU0QKKy8qIFNldCBib3RoIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGJhdWQgcmF0ZXMgaW4gKlRFUk1JT1NfT1AgdG8gU1BFRUQuICAqLworZXh0ZXJuIGludCBjZnNldHNwZWVkIChzdHJ1Y3QgdGVybWlvcyAqX190ZXJtaW9zX3AsIHNwZWVkX3QgX19zcGVlZCkgX19USFJPVzsKKyNlbmRpZgorCisKKy8qIFB1dCB0aGUgc3RhdGUgb2YgRkQgaW50byAqVEVSTUlPU19QLiAgKi8KK2V4dGVybiBpbnQgdGNnZXRhdHRyIChpbnQgX19mZCwgc3RydWN0IHRlcm1pb3MgKl9fdGVybWlvc19wKSBfX1RIUk9XOworCisvKiBTZXQgdGhlIHN0YXRlIG9mIEZEIHRvICpURVJNSU9TX1AuCisgICBWYWx1ZXMgZm9yIE9QVElPTkFMX0FDVElPTlMgKFRDU0EqKSBhcmUgaW4gPGJpdHMvdGVybWlvcy5oPi4gICovCitleHRlcm4gaW50IHRjc2V0YXR0ciAoaW50IF9fZmQsIGludCBfX29wdGlvbmFsX2FjdGlvbnMsCisJCSAgICAgIF9fY29uc3Qgc3RydWN0IHRlcm1pb3MgKl9fdGVybWlvc19wKSBfX1RIUk9XOworCisKKyNpZmRlZglfX1VTRV9CU0QKKy8qIFNldCAqVEVSTUlPU19QIHRvIGluZGljYXRlIHJhdyBtb2RlLiAgKi8KK2V4dGVybiB2b2lkIGNmbWFrZXJhdyAoc3RydWN0IHRlcm1pb3MgKl9fdGVybWlvc19wKSBfX1RIUk9XOworI2VuZGlmCisKKy8qIFNlbmQgemVybyBiaXRzIG9uIEZELiAgKi8KK2V4dGVybiBpbnQgdGNzZW5kYnJlYWsgKGludCBfX2ZkLCBpbnQgX19kdXJhdGlvbikgX19USFJPVzsKKworLyogV2FpdCBmb3IgcGVuZGluZyBvdXRwdXQgdG8gYmUgd3JpdHRlbiBvbiBGRC4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aAorICAgX19USFJPVy4gICovCitleHRlcm4gaW50IHRjZHJhaW4gKGludCBfX2ZkKTsKKworLyogRmx1c2ggcGVuZGluZyBkYXRhIG9uIEZELgorICAgVmFsdWVzIGZvciBRVUVVRV9TRUxFQ1RPUiAoVEN7SSxPLElPfUZMVVNIKSBhcmUgaW4gPGJpdHMvdGVybWlvcy5oPi4gICovCitleHRlcm4gaW50IHRjZmx1c2ggKGludCBfX2ZkLCBpbnQgX19xdWV1ZV9zZWxlY3RvcikgX19USFJPVzsKKworLyogU3VzcGVuZCBvciByZXN0YXJ0IHRyYW5zbWlzc2lvbiBvbiBGRC4KKyAgIFZhbHVlcyBmb3IgQUNUSU9OIChUQ1tJT117T0ZGLE9OfSkgYXJlIGluIDxiaXRzL3Rlcm1pb3MuaD4uICAqLworZXh0ZXJuIGludCB0Y2Zsb3cgKGludCBfX2ZkLCBpbnQgX19hY3Rpb24pIF9fVEhST1c7CisKKworI2lmZGVmIF9fVVNFX1VOSVg5OAorLyogR2V0IHByb2Nlc3MgZ3JvdXAgSUQgZm9yIHNlc3Npb24gbGVhZGVyIGZvciBjb250cm9sbGluZyB0ZXJtaW5hbCBGRC4gICovCitleHRlcm4gX19waWRfdCB0Y2dldHNpZCAoaW50IF9fZmQpIF9fVEhST1c7CisjZW5kaWYKKworCisjaWZkZWYgX19VU0VfQlNECisjIGluY2x1ZGUgPHN5cy90dHlkZWZhdWx0cy5oPgorI2VuZGlmCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiB0ZXJtaW9zLmggICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvdGdtYXRoLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvdGdtYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVmZGQyNgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS90Z21hdGguaApAQCAtMCwwICsxLDQ1NiBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA3CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyoKKyAqCUlTTyBDOTkgU3RhbmRhcmQ6IDcuMjIgVHlwZS1nZW5lcmljIG1hdGgJPHRnbWF0aC5oPgorICovCisKKyNpZm5kZWYgX1RHTUFUSF9ICisjZGVmaW5lIF9UR01BVEhfSAkxCisKKy8qIEluY2x1ZGUgdGhlIG5lZWRlZCBoZWFkZXJzLiAgKi8KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8Y29tcGxleC5oPgorCisKKy8qIFNpbmNlIGBjb21wbGV4JyBpcyBjdXJyZW50bHkgbm90IHJlYWxseSBpbXBsZW1lbnRlZCBpbiBtb3N0IEMgY29tcGlsZXJzCisgICBhbmQgaWYgaXQgaXMgaW1wbGVtZW50ZWQsIHRoZSBpbXBsZW1lbnRhdGlvbnMgZGlmZmVyLiAgVGhpcyBtYWtlcyBpdAorICAgcXVpdGUgZGlmZmljdWx0IHRvIHdyaXRlIGEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGhlYWRlci4gIFdlCisgICBkbyBub3QgdHJ5IHRoaXMgZm9yIG5vdyBhbmQgaW5zdGVhZCBjb25jZW50cmF0ZSBvbmx5IG9uIEdOVSBDQy4gIE9uY2UKKyAgIHdlIGhhdmUgbW9yZSBpbmZvcm1hdGlvbiBzdXBwb3J0IGZvciBvdGhlciBjb21waWxlcnMgbWlnaHQgZm9sbG93LiAgKi8KKworI2lmIF9fR05VQ19QUkVSRVEgKDIsIDcpCisKKyMgaWZkZWYgX19OT19MT05HX0RPVUJMRV9NQVRICisjICBkZWZpbmUgX190Z21sKGZjdCkgZmN0CisjIGVsc2UKKyMgIGRlZmluZSBfX3RnbWwoZmN0KSBmY3QgIyMgbAorIyBlbmRpZgorCisvKiBUaGlzIGlzIHVnbHkgYnV0IHVubGVzcyBnY2MgZ2V0cyBhcHByb3ByaWF0ZSBidWlsdGlucyB3ZSBoYXZlIHRvIGRvCisgICBzb21ldGhpbmcgbGlrZSB0aGlzLiAgRG9uJ3QgYXNrIGhvdyBpdCB3b3Jrcy4gICovCisKKy8qIDEgaWYgJ3R5cGUnIGlzIGEgZmxvYXRpbmcgdHlwZSwgMCBpZiAndHlwZScgaXMgYW4gaW50ZWdlciB0eXBlLgorICAgQWxsb3dzIGZvciBfQm9vbC4gIEV4cGFuZHMgdG8gYW4gaW50ZWdlciBjb25zdGFudCBleHByZXNzaW9uLiAgKi8KKyMgaWYgX19HTlVDX1BSRVJFUSAoMywgMSkKKyMgIGRlZmluZSBfX2Zsb2F0aW5nX3R5cGUodHlwZSkgXAorICAoX19idWlsdGluX2NsYXNzaWZ5X3R5cGUgKCh0eXBlKSAwKSA9PSA4IFwKKyAgIHx8IChfX2J1aWx0aW5fY2xhc3NpZnlfdHlwZSAoKHR5cGUpIDApID09IDkgXAorICAgICAgICYmIF9fYnVpbHRpbl9jbGFzc2lmeV90eXBlIChfX3JlYWxfXyAoKHR5cGUpIDApKSA9PSA4KSkKKyMgZWxzZQorIyAgZGVmaW5lIF9fZmxvYXRpbmdfdHlwZSh0eXBlKSAoKCh0eXBlKSAwLjI1KSAmJiAoKHR5cGUpIDAuMjUgLSAxKSkKKyMgZW5kaWYKKworLyogVGhlIHRnbWF0aCByZWFsIHR5cGUgZm9yIFQsIHdoZXJlIEUgaXMgMCBpZiBUIGlzIGFuIGludGVnZXIgdHlwZSBhbmQKKyAgIDEgZm9yIGEgZmxvYXRpbmcgdHlwZS4gICovCisjIGRlZmluZSBfX3RnbWF0aF9yZWFsX3R5cGVfc3ViKFQsIEUpIFwKKyAgX190eXBlb2ZfXyAoKigwID8gKF9fdHlwZW9mX18gKDAgPyAoZG91YmxlICopIDAgOiAodm9pZCAqKSAoRSkpKSAwCSAgICAgIFwKKwkJICA6IChfX3R5cGVvZl9fICgwID8gKFQgKikgMCA6ICh2b2lkICopICghKEUpKSkpIDApKQorCisvKiBUaGUgdGdtYXRoIHJlYWwgdHlwZSBvZiBFWFBSLiAgKi8KKyMgZGVmaW5lIF9fdGdtYXRoX3JlYWxfdHlwZShleHByKSBcCisgIF9fdGdtYXRoX3JlYWxfdHlwZV9zdWIgKF9fdHlwZW9mX18gKChfX3R5cGVvZl9fIChleHByKSkgMCksCQkgICAgICBcCisJCQkgIF9fZmxvYXRpbmdfdHlwZSAoX190eXBlb2ZfXyAoZXhwcikpKQorCisKKy8qIFdlIGhhdmUgdHdvIGtpbmRzIG9mIGdlbmVyaWMgbWFjcm9zOiB0byBzdXBwb3J0IGZ1bmN0aW9ucyB3aGljaCBhcmUKKyAgIG9ubHkgZGVmaW5lZCBvbiByZWFsIHZhbHVlZCBwYXJhbWV0ZXJzIGFuZCB0aG9zZSB3aGljaCBhcmUgZGVmaW5lZAorICAgZm9yIGNvbXBsZXggZnVuY3Rpb25zIGFzIHdlbGwuICAqLworIyBkZWZpbmUgX19UR01BVEhfVU5BUllfUkVBTF9PTkxZKFZhbCwgRmN0KSBcCisgICAgIChfX2V4dGVuc2lvbl9fICgoc2l6ZW9mIChWYWwpID09IHNpemVvZiAoZG91YmxlKQkJCSAgICAgIFwKKwkJICAgICAgfHwgX19idWlsdGluX2NsYXNzaWZ5X3R5cGUgKFZhbCkgIT0gOCkJCSAgICAgIFwKKwkJICAgICA/IChfX3RnbWF0aF9yZWFsX3R5cGUgKFZhbCkpIEZjdCAoVmFsKQkJICAgICAgXAorCQkgICAgIDogKHNpemVvZiAoVmFsKSA9PSBzaXplb2YgKGZsb2F0KSkJCQkgICAgICBcCisJCSAgICAgPyAoX190Z21hdGhfcmVhbF90eXBlIChWYWwpKSBGY3QjI2YgKFZhbCkJCSAgICAgIFwKKwkJICAgICA6IChfX3RnbWF0aF9yZWFsX3R5cGUgKFZhbCkpIF9fdGdtbChGY3QpIChWYWwpKSkKKworIyBkZWZpbmUgX19UR01BVEhfVU5BUllfUkVBTF9SRVRfT05MWShWYWwsIFJldFR5cGUsIEZjdCkgXAorICAgICAoX19leHRlbnNpb25fXyAoKHNpemVvZiAoVmFsKSA9PSBzaXplb2YgKGRvdWJsZSkJCQkgICAgICBcCisJCSAgICAgIHx8IF9fYnVpbHRpbl9jbGFzc2lmeV90eXBlIChWYWwpICE9IDgpCQkgICAgICBcCisJCSAgICAgPyAoUmV0VHlwZSkgRmN0IChWYWwpCQkJCSAgICAgIFwKKwkJICAgICA6IChzaXplb2YgKFZhbCkgPT0gc2l6ZW9mIChmbG9hdCkpCQkJICAgICAgXAorCQkgICAgID8gKFJldFR5cGUpIEZjdCMjZiAoVmFsKQkJCQkgICAgICBcCisJCSAgICAgOiAoUmV0VHlwZSkgX190Z21sKEZjdCkgKFZhbCkpKQorCisjIGRlZmluZSBfX1RHTUFUSF9CSU5BUllfRklSU1RfUkVBTF9PTkxZKFZhbDEsIFZhbDIsIEZjdCkgXAorICAgICAoX19leHRlbnNpb25fXyAoKHNpemVvZiAoVmFsMSkgPT0gc2l6ZW9mIChkb3VibGUpCQkJICAgICAgXAorCQkgICAgICB8fCBfX2J1aWx0aW5fY2xhc3NpZnlfdHlwZSAoVmFsMSkgIT0gOCkJCSAgICAgIFwKKwkJICAgICA/IChfX3RnbWF0aF9yZWFsX3R5cGUgKFZhbDEpKSBGY3QgKFZhbDEsIFZhbDIpCSAgICAgIFwKKwkJICAgICA6IChzaXplb2YgKFZhbDEpID09IHNpemVvZiAoZmxvYXQpKQkJICAgICAgXAorCQkgICAgID8gKF9fdGdtYXRoX3JlYWxfdHlwZSAoVmFsMSkpIEZjdCMjZiAoVmFsMSwgVmFsMikJICAgICAgXAorCQkgICAgIDogKF9fdGdtYXRoX3JlYWxfdHlwZSAoVmFsMSkpIF9fdGdtbChGY3QpIChWYWwxLCBWYWwyKSkpCisKKyMgZGVmaW5lIF9fVEdNQVRIX0JJTkFSWV9SRUFMX09OTFkoVmFsMSwgVmFsMiwgRmN0KSBcCisgICAgIChfX2V4dGVuc2lvbl9fICgoKHNpemVvZiAoVmFsMSkgPiBzaXplb2YgKGRvdWJsZSkJCQkgICAgICBcCisJCSAgICAgICB8fCBzaXplb2YgKFZhbDIpID4gc2l6ZW9mIChkb3VibGUpKQkJICAgICAgXAorCQkgICAgICAmJiBfX2J1aWx0aW5fY2xhc3NpZnlfdHlwZSAoKFZhbDEpICsgKFZhbDIpKSA9PSA4KSAgICAgIFwKKwkJICAgICA/IChfX3R5cGVvZiAoKF9fdGdtYXRoX3JlYWxfdHlwZSAoVmFsMSkpIDAJCSAgICAgIFwKKwkJCQkgICArIChfX3RnbWF0aF9yZWFsX3R5cGUgKFZhbDIpKSAwKSkJICAgICAgXAorCQkgICAgICAgX190Z21sKEZjdCkgKFZhbDEsIFZhbDIpCQkJCSAgICAgIFwKKwkJICAgICA6IChzaXplb2YgKFZhbDEpID09IHNpemVvZiAoZG91YmxlKQkJICAgICAgXAorCQkJfHwgc2l6ZW9mIChWYWwyKSA9PSBzaXplb2YgKGRvdWJsZSkJCSAgICAgIFwKKwkJCXx8IF9fYnVpbHRpbl9jbGFzc2lmeV90eXBlIChWYWwxKSAhPSA4CQkgICAgICBcCisJCQl8fCBfX2J1aWx0aW5fY2xhc3NpZnlfdHlwZSAoVmFsMikgIT0gOCkJCSAgICAgIFwKKwkJICAgICA/IChfX3R5cGVvZiAoKF9fdGdtYXRoX3JlYWxfdHlwZSAoVmFsMSkpIDAJCSAgICAgIFwKKwkJCQkgICArIChfX3RnbWF0aF9yZWFsX3R5cGUgKFZhbDIpKSAwKSkJICAgICAgXAorCQkgICAgICAgRmN0IChWYWwxLCBWYWwyKQkJCQkJICAgICAgXAorCQkgICAgIDogKF9fdHlwZW9mICgoX190Z21hdGhfcmVhbF90eXBlIChWYWwxKSkgMAkJICAgICAgXAorCQkJCSAgICsgKF9fdGdtYXRoX3JlYWxfdHlwZSAoVmFsMikpIDApKQkgICAgICBcCisJCSAgICAgICBGY3QjI2YgKFZhbDEsIFZhbDIpKSkKKworIyBkZWZpbmUgX19UR01BVEhfVEVSTkFSWV9GSVJTVF9TRUNPTkRfUkVBTF9PTkxZKFZhbDEsIFZhbDIsIFZhbDMsIEZjdCkgXAorICAgICAoX19leHRlbnNpb25fXyAoKChzaXplb2YgKFZhbDEpID4gc2l6ZW9mIChkb3VibGUpCQkJICAgICAgXAorCQkgICAgICAgfHwgc2l6ZW9mIChWYWwyKSA+IHNpemVvZiAoZG91YmxlKSkJCSAgICAgIFwKKwkJICAgICAgJiYgX19idWlsdGluX2NsYXNzaWZ5X3R5cGUgKChWYWwxKSArIChWYWwyKSkgPT0gOCkgICAgICBcCisJCSAgICAgPyAoX190eXBlb2YgKChfX3RnbWF0aF9yZWFsX3R5cGUgKFZhbDEpKSAwCQkgICAgICBcCisJCQkJICAgKyAoX190Z21hdGhfcmVhbF90eXBlIChWYWwyKSkgMCkpCSAgICAgIFwKKwkJICAgICAgIF9fdGdtbChGY3QpIChWYWwxLCBWYWwyLCBWYWwzKQkJCSAgICAgIFwKKwkJICAgICA6IChzaXplb2YgKFZhbDEpID09IHNpemVvZiAoZG91YmxlKQkJICAgICAgXAorCQkJfHwgc2l6ZW9mIChWYWwyKSA9PSBzaXplb2YgKGRvdWJsZSkJCSAgICAgIFwKKwkJCXx8IF9fYnVpbHRpbl9jbGFzc2lmeV90eXBlIChWYWwxKSAhPSA4CQkgICAgICBcCisJCQl8fCBfX2J1aWx0aW5fY2xhc3NpZnlfdHlwZSAoVmFsMikgIT0gOCkJCSAgICAgIFwKKwkJICAgICA/IChfX3R5cGVvZiAoKF9fdGdtYXRoX3JlYWxfdHlwZSAoVmFsMSkpIDAJCSAgICAgIFwKKwkJCQkgICArIChfX3RnbWF0aF9yZWFsX3R5cGUgKFZhbDIpKSAwKSkJICAgICAgXAorCQkgICAgICAgRmN0IChWYWwxLCBWYWwyLCBWYWwzKQkJCQkgICAgICBcCisJCSAgICAgOiAoX190eXBlb2YgKChfX3RnbWF0aF9yZWFsX3R5cGUgKFZhbDEpKSAwCQkgICAgICBcCisJCQkJICAgKyAoX190Z21hdGhfcmVhbF90eXBlIChWYWwyKSkgMCkpCSAgICAgIFwKKwkJICAgICAgIEZjdCMjZiAoVmFsMSwgVmFsMiwgVmFsMykpKQorCisjIGRlZmluZSBfX1RHTUFUSF9URVJOQVJZX1JFQUxfT05MWShWYWwxLCBWYWwyLCBWYWwzLCBGY3QpIFwKKyAgICAgKF9fZXh0ZW5zaW9uX18gKCgoc2l6ZW9mIChWYWwxKSA+IHNpemVvZiAoZG91YmxlKQkJCSAgICAgIFwKKwkJICAgICAgIHx8IHNpemVvZiAoVmFsMikgPiBzaXplb2YgKGRvdWJsZSkJCSAgICAgIFwKKwkJICAgICAgIHx8IHNpemVvZiAoVmFsMykgPiBzaXplb2YgKGRvdWJsZSkpCQkgICAgICBcCisJCSAgICAgICYmIF9fYnVpbHRpbl9jbGFzc2lmeV90eXBlICgoVmFsMSkgKyAoVmFsMikgKyAoVmFsMykpICAgXAorCQkJID09IDgpCQkJCQkJICAgICAgXAorCQkgICAgID8gKF9fdHlwZW9mICgoX190Z21hdGhfcmVhbF90eXBlIChWYWwxKSkgMAkJICAgICAgXAorCQkJCSAgICsgKF9fdGdtYXRoX3JlYWxfdHlwZSAoVmFsMikpIDAJICAgICAgXAorCQkJCSAgICsgKF9fdGdtYXRoX3JlYWxfdHlwZSAoVmFsMykpIDApKQkgICAgICBcCisJCSAgICAgICBfX3RnbWwoRmN0KSAoVmFsMSwgVmFsMiwgVmFsMykJCQkgICAgICBcCisJCSAgICAgOiAoc2l6ZW9mIChWYWwxKSA9PSBzaXplb2YgKGRvdWJsZSkJCSAgICAgIFwKKwkJCXx8IHNpemVvZiAoVmFsMikgPT0gc2l6ZW9mIChkb3VibGUpCQkgICAgICBcCisJCQl8fCBzaXplb2YgKFZhbDMpID09IHNpemVvZiAoZG91YmxlKQkJICAgICAgXAorCQkJfHwgX19idWlsdGluX2NsYXNzaWZ5X3R5cGUgKFZhbDEpICE9IDgJCSAgICAgIFwKKwkJCXx8IF9fYnVpbHRpbl9jbGFzc2lmeV90eXBlIChWYWwyKSAhPSA4CQkgICAgICBcCisJCQl8fCBfX2J1aWx0aW5fY2xhc3NpZnlfdHlwZSAoVmFsMykgIT0gOCkJCSAgICAgIFwKKwkJICAgICA/IChfX3R5cGVvZiAoKF9fdGdtYXRoX3JlYWxfdHlwZSAoVmFsMSkpIDAJCSAgICAgIFwKKwkJCQkgICArIChfX3RnbWF0aF9yZWFsX3R5cGUgKFZhbDIpKSAwCSAgICAgIFwKKwkJCQkgICArIChfX3RnbWF0aF9yZWFsX3R5cGUgKFZhbDMpKSAwKSkJICAgICAgXAorCQkgICAgICAgRmN0IChWYWwxLCBWYWwyLCBWYWwzKQkJCQkgICAgICBcCisJCSAgICAgOiAoX190eXBlb2YgKChfX3RnbWF0aF9yZWFsX3R5cGUgKFZhbDEpKSAwCQkgICAgICBcCisJCQkJICAgKyAoX190Z21hdGhfcmVhbF90eXBlIChWYWwyKSkgMAkgICAgICBcCisJCQkJICAgKyAoX190Z21hdGhfcmVhbF90eXBlIChWYWwzKSkgMCkpCSAgICAgIFwKKwkJICAgICAgIEZjdCMjZiAoVmFsMSwgVmFsMiwgVmFsMykpKQorCisvKiBYWFggVGhpcyBkZWZpbml0aW9uIGhhcyB0byBiZSBjaGFuZ2VkIGFzIHNvb24gYXMgdGhlIGNvbXBpbGVyIHVuZGVyc3RhbmRzCisgICB0aGUgaW1hZ2luYXJ5IGtleXdvcmQuICAqLworIyBkZWZpbmUgX19UR01BVEhfVU5BUllfUkVBTF9JTUFHKFZhbCwgRmN0LCBDZmN0KSBcCisgICAgIChfX2V4dGVuc2lvbl9fICgoc2l6ZW9mIChfX3JlYWxfXyAoVmFsKSkgPT0gc2l6ZW9mIChkb3VibGUpCSAgICAgIFwKKwkJICAgICAgfHwgX19idWlsdGluX2NsYXNzaWZ5X3R5cGUgKF9fcmVhbF9fIChWYWwpKSAhPSA4KQkgICAgICBcCisJCSAgICAgPyAoKHNpemVvZiAoX19yZWFsX18gKFZhbCkpID09IHNpemVvZiAoVmFsKSkJICAgICAgXAorCQkJPyAoX190Z21hdGhfcmVhbF90eXBlIChWYWwpKSBGY3QgKFZhbCkJCSAgICAgIFwKKwkJCTogKF9fdGdtYXRoX3JlYWxfdHlwZSAoVmFsKSkgQ2ZjdCAoVmFsKSkJICAgICAgXAorCQkgICAgIDogKHNpemVvZiAoX19yZWFsX18gKFZhbCkpID09IHNpemVvZiAoZmxvYXQpKQkgICAgICBcCisJCSAgICAgPyAoKHNpemVvZiAoX19yZWFsX18gKFZhbCkpID09IHNpemVvZiAoVmFsKSkJICAgICAgXAorCQkJPyAoX190Z21hdGhfcmVhbF90eXBlIChWYWwpKSBGY3QjI2YgKFZhbCkJICAgICAgXAorCQkJOiAoX190Z21hdGhfcmVhbF90eXBlIChWYWwpKSBDZmN0IyNmIChWYWwpKQkgICAgICBcCisJCSAgICAgOiAoKHNpemVvZiAoX19yZWFsX18gKFZhbCkpID09IHNpemVvZiAoVmFsKSkJICAgICAgXAorCQkJPyAoX190Z21hdGhfcmVhbF90eXBlIChWYWwpKSBfX3RnbWwoRmN0KSAoVmFsKQkgICAgICBcCisJCQk6IChfX3RnbWF0aF9yZWFsX3R5cGUgKFZhbCkpIF9fdGdtbChDZmN0KSAoVmFsKSkpKQorCisjIGRlZmluZSBfX1RHTUFUSF9VTkFSWV9JTUFHKFZhbCwgQ2ZjdCkgXAorICAgICAoX19leHRlbnNpb25fXyAoKHNpemVvZiAoX19yZWFsX18gKFZhbCkpID09IHNpemVvZiAoZG91YmxlKQkgICAgICBcCisJCSAgICAgIHx8IF9fYnVpbHRpbl9jbGFzc2lmeV90eXBlIChfX3JlYWxfXyAoVmFsKSkgIT0gOCkJICAgICAgXAorCQkgICAgID8gKF9fdHlwZW9mX18gKChfX3RnbWF0aF9yZWFsX3R5cGUgKFZhbCkpIDAJICAgICAgXAorCQkJCSAgICArIF9Db21wbGV4X0kpKSBDZmN0IChWYWwpCQkgICAgICBcCisJCSAgICAgOiAoc2l6ZW9mIChfX3JlYWxfXyAoVmFsKSkgPT0gc2l6ZW9mIChmbG9hdCkpCSAgICAgIFwKKwkJICAgICA/IChfX3R5cGVvZl9fICgoX190Z21hdGhfcmVhbF90eXBlIChWYWwpKSAwCSAgICAgIFwKKwkJCQkgICAgKyBfQ29tcGxleF9JKSkgQ2ZjdCMjZiAoVmFsKQkgICAgICBcCisJCSAgICAgOiAoX190eXBlb2ZfXyAoKF9fdGdtYXRoX3JlYWxfdHlwZSAoVmFsKSkgMAkgICAgICBcCisJCQkJICAgICsgX0NvbXBsZXhfSSkpIF9fdGdtbChDZmN0KSAoVmFsKSkpCisKKy8qIFhYWCBUaGlzIGRlZmluaXRpb24gaGFzIHRvIGJlIGNoYW5nZWQgYXMgc29vbiBhcyB0aGUgY29tcGlsZXIgdW5kZXJzdGFuZHMKKyAgIHRoZSBpbWFnaW5hcnkga2V5d29yZC4gICovCisjIGRlZmluZSBfX1RHTUFUSF9VTkFSWV9SRUFMX0lNQUdfUkVUX1JFQUwoVmFsLCBGY3QsIENmY3QpIFwKKyAgICAgKF9fZXh0ZW5zaW9uX18gKChzaXplb2YgKF9fcmVhbF9fIChWYWwpKSA9PSBzaXplb2YgKGRvdWJsZSkJICAgICAgXAorCQkgICAgICB8fCBfX2J1aWx0aW5fY2xhc3NpZnlfdHlwZSAoX19yZWFsX18gKFZhbCkpICE9IDgpCSAgICAgIFwKKwkJICAgICA/ICgoc2l6ZW9mIChfX3JlYWxfXyAoVmFsKSkgPT0gc2l6ZW9mIChWYWwpKQkgICAgICBcCisJCQk/IChfX3R5cGVvZl9fIChfX3JlYWxfXyAoX190Z21hdGhfcmVhbF90eXBlIChWYWwpKSAwKSlcCisJCQkgIEZjdCAoVmFsKQkJCQkJICAgICAgXAorCQkJOiAoX190eXBlb2ZfXyAoX19yZWFsX18gKF9fdGdtYXRoX3JlYWxfdHlwZSAoVmFsKSkgMCkpXAorCQkJICBDZmN0IChWYWwpKQkJCQkJICAgICAgXAorCQkgICAgIDogKHNpemVvZiAoX19yZWFsX18gKFZhbCkpID09IHNpemVvZiAoZmxvYXQpKQkgICAgICBcCisJCSAgICAgPyAoKHNpemVvZiAoX19yZWFsX18gKFZhbCkpID09IHNpemVvZiAoVmFsKSkJICAgICAgXAorCQkJPyAoX190eXBlb2ZfXyAoX19yZWFsX18gKF9fdGdtYXRoX3JlYWxfdHlwZSAoVmFsKSkgMCkpXAorCQkJICBGY3QjI2YgKFZhbCkJCQkJCSAgICAgIFwKKwkJCTogKF9fdHlwZW9mX18gKF9fcmVhbF9fIChfX3RnbWF0aF9yZWFsX3R5cGUgKFZhbCkpIDApKVwKKwkJCSAgQ2ZjdCMjZiAoVmFsKSkJCQkJICAgICAgXAorCQkgICAgIDogKChzaXplb2YgKF9fcmVhbF9fIChWYWwpKSA9PSBzaXplb2YgKFZhbCkpCSAgICAgIFwKKwkJCT8gKF9fdHlwZW9mX18gKF9fcmVhbF9fIChfX3RnbWF0aF9yZWFsX3R5cGUgKFZhbCkpIDApKVwKKwkJCSAgX190Z21sKEZjdCkgKFZhbCkJCQkJICAgICAgXAorCQkJOiAoX190eXBlb2ZfXyAoX19yZWFsX18gKF9fdGdtYXRoX3JlYWxfdHlwZSAoVmFsKSkgMCkpXAorCQkJICBfX3RnbWwoQ2ZjdCkgKFZhbCkpKSkKKworLyogWFhYIFRoaXMgZGVmaW5pdGlvbiBoYXMgdG8gYmUgY2hhbmdlZCBhcyBzb29uIGFzIHRoZSBjb21waWxlciB1bmRlcnN0YW5kcworICAgdGhlIGltYWdpbmFyeSBrZXl3b3JkLiAgKi8KKyMgZGVmaW5lIF9fVEdNQVRIX0JJTkFSWV9SRUFMX0lNQUcoVmFsMSwgVmFsMiwgRmN0LCBDZmN0KSBcCisgICAgIChfX2V4dGVuc2lvbl9fICgoKHNpemVvZiAoX19yZWFsX18gKFZhbDEpKSA+IHNpemVvZiAoZG91YmxlKQkgICAgICBcCisJCSAgICAgICB8fCBzaXplb2YgKF9fcmVhbF9fIChWYWwyKSkgPiBzaXplb2YgKGRvdWJsZSkpCSAgICAgIFwKKwkJICAgICAgJiYgX19idWlsdGluX2NsYXNzaWZ5X3R5cGUgKF9fcmVhbF9fIChWYWwxKQkgICAgICBcCisJCQkJCQkgICsgX19yZWFsX18gKFZhbDIpKSA9PSA4KSAgICBcCisJCSAgICAgPyAoKHNpemVvZiAoX19yZWFsX18gKFZhbDEpKSA9PSBzaXplb2YgKFZhbDEpCSAgICAgIFwKKwkJCSAmJiBzaXplb2YgKF9fcmVhbF9fIChWYWwyKSkgPT0gc2l6ZW9mIChWYWwyKSkJICAgICAgXAorCQkJPyAoX190eXBlb2YgKChfX3RnbWF0aF9yZWFsX3R5cGUgKFZhbDEpKSAwCSAgICAgIFwKKwkJCQkgICArIChfX3RnbWF0aF9yZWFsX3R5cGUgKFZhbDIpKSAwKSkJICAgICAgXAorCQkJICBfX3RnbWwoRmN0KSAoVmFsMSwgVmFsMikJCQkgICAgICBcCisJCQk6IChfX3R5cGVvZiAoKF9fdGdtYXRoX3JlYWxfdHlwZSAoVmFsMSkpIDAJICAgICAgXAorCQkJCSAgICsgKF9fdGdtYXRoX3JlYWxfdHlwZSAoVmFsMikpIDApKQkgICAgICBcCisJCQkgIF9fdGdtbChDZmN0KSAoVmFsMSwgVmFsMikpCQkJICAgICAgXAorCQkgICAgIDogKHNpemVvZiAoX19yZWFsX18gKFZhbDEpKSA9PSBzaXplb2YgKGRvdWJsZSkJICAgICAgXAorCQkJfHwgc2l6ZW9mIChfX3JlYWxfXyAoVmFsMikpID09IHNpemVvZiAoZG91YmxlKQkgICAgICBcCisJCQl8fCBfX2J1aWx0aW5fY2xhc3NpZnlfdHlwZSAoX19yZWFsX18gKFZhbDEpKSAhPSA4ICAgICBcCisJCQl8fCBfX2J1aWx0aW5fY2xhc3NpZnlfdHlwZSAoX19yZWFsX18gKFZhbDIpKSAhPSA4KSAgICBcCisJCSAgICAgPyAoKHNpemVvZiAoX19yZWFsX18gKFZhbDEpKSA9PSBzaXplb2YgKFZhbDEpCSAgICAgIFwKKwkJCSAmJiBzaXplb2YgKF9fcmVhbF9fIChWYWwyKSkgPT0gc2l6ZW9mIChWYWwyKSkJICAgICAgXAorCQkJPyAoX190eXBlb2YgKChfX3RnbWF0aF9yZWFsX3R5cGUgKFZhbDEpKSAwCSAgICAgIFwKKwkJCQkgICArIChfX3RnbWF0aF9yZWFsX3R5cGUgKFZhbDIpKSAwKSkJICAgICAgXAorCQkJICBGY3QgKFZhbDEsIFZhbDIpCQkJCSAgICAgIFwKKwkJCTogKF9fdHlwZW9mICgoX190Z21hdGhfcmVhbF90eXBlIChWYWwxKSkgMAkgICAgICBcCisJCQkJICAgKyAoX190Z21hdGhfcmVhbF90eXBlIChWYWwyKSkgMCkpCSAgICAgIFwKKwkJCSAgQ2ZjdCAoVmFsMSwgVmFsMikpCQkJCSAgICAgIFwKKwkJICAgICA6ICgoc2l6ZW9mIChfX3JlYWxfXyAoVmFsMSkpID09IHNpemVvZiAoVmFsMSkJICAgICAgXAorCQkJICYmIHNpemVvZiAoX19yZWFsX18gKFZhbDIpKSA9PSBzaXplb2YgKFZhbDIpKQkgICAgICBcCisJCQk/IChfX3R5cGVvZiAoKF9fdGdtYXRoX3JlYWxfdHlwZSAoVmFsMSkpIDAJICAgICAgXAorCQkJCSAgICsgKF9fdGdtYXRoX3JlYWxfdHlwZSAoVmFsMikpIDApKQkgICAgICBcCisJCQkgIEZjdCMjZiAoVmFsMSwgVmFsMikJCQkJICAgICAgXAorCQkJOiAoX190eXBlb2YgKChfX3RnbWF0aF9yZWFsX3R5cGUgKFZhbDEpKSAwCSAgICAgIFwKKwkJCQkgICArIChfX3RnbWF0aF9yZWFsX3R5cGUgKFZhbDIpKSAwKSkJICAgICAgXAorCQkJICBDZmN0IyNmIChWYWwxLCBWYWwyKSkpKQorI2Vsc2UKKyMgZXJyb3IgIlVuc3VwcG9ydGVkIGNvbXBpbGVyOyB5b3UgY2Fubm90IHVzZSA8dGdtYXRoLmg+IgorI2VuZGlmCisKKworLyogVW5hcnkgZnVuY3Rpb25zIGRlZmluZWQgZm9yIHJlYWwgYW5kIGNvbXBsZXggdmFsdWVzLiAgKi8KKworCisvKiBUcmlnb25vbWV0cmljIGZ1bmN0aW9ucy4gICovCisKKy8qIEFyYyBjb3NpbmUgb2YgWC4gICovCisjZGVmaW5lIGFjb3MoVmFsKSBfX1RHTUFUSF9VTkFSWV9SRUFMX0lNQUcgKFZhbCwgYWNvcywgY2Fjb3MpCisvKiBBcmMgc2luZSBvZiBYLiAgKi8KKyNkZWZpbmUgYXNpbihWYWwpIF9fVEdNQVRIX1VOQVJZX1JFQUxfSU1BRyAoVmFsLCBhc2luLCBjYXNpbikKKy8qIEFyYyB0YW5nZW50IG9mIFguICAqLworI2RlZmluZSBhdGFuKFZhbCkgX19UR01BVEhfVU5BUllfUkVBTF9JTUFHIChWYWwsIGF0YW4sIGNhdGFuKQorLyogQXJjIHRhbmdlbnQgb2YgWS9YLiAgKi8KKyNkZWZpbmUgYXRhbjIoVmFsMSwgVmFsMikgX19UR01BVEhfQklOQVJZX1JFQUxfT05MWSAoVmFsMSwgVmFsMiwgYXRhbjIpCisKKy8qIENvc2luZSBvZiBYLiAgKi8KKyNkZWZpbmUgY29zKFZhbCkgX19UR01BVEhfVU5BUllfUkVBTF9JTUFHIChWYWwsIGNvcywgY2NvcykKKy8qIFNpbmUgb2YgWC4gICovCisjZGVmaW5lIHNpbihWYWwpIF9fVEdNQVRIX1VOQVJZX1JFQUxfSU1BRyAoVmFsLCBzaW4sIGNzaW4pCisvKiBUYW5nZW50IG9mIFguICAqLworI2RlZmluZSB0YW4oVmFsKSBfX1RHTUFUSF9VTkFSWV9SRUFMX0lNQUcgKFZhbCwgdGFuLCBjdGFuKQorCisKKy8qIEh5cGVyYm9saWMgZnVuY3Rpb25zLiAgKi8KKworLyogSHlwZXJib2xpYyBhcmMgY29zaW5lIG9mIFguICAqLworI2RlZmluZSBhY29zaChWYWwpIF9fVEdNQVRIX1VOQVJZX1JFQUxfSU1BRyAoVmFsLCBhY29zaCwgY2Fjb3NoKQorLyogSHlwZXJib2xpYyBhcmMgc2luZSBvZiBYLiAgKi8KKyNkZWZpbmUgYXNpbmgoVmFsKSBfX1RHTUFUSF9VTkFSWV9SRUFMX0lNQUcgKFZhbCwgYXNpbmgsIGNhc2luaCkKKy8qIEh5cGVyYm9saWMgYXJjIHRhbmdlbnQgb2YgWC4gICovCisjZGVmaW5lIGF0YW5oKFZhbCkgX19UR01BVEhfVU5BUllfUkVBTF9JTUFHIChWYWwsIGF0YW5oLCBjYXRhbmgpCisKKy8qIEh5cGVyYm9saWMgY29zaW5lIG9mIFguICAqLworI2RlZmluZSBjb3NoKFZhbCkgX19UR01BVEhfVU5BUllfUkVBTF9JTUFHIChWYWwsIGNvc2gsIGNjb3NoKQorLyogSHlwZXJib2xpYyBzaW5lIG9mIFguICAqLworI2RlZmluZSBzaW5oKFZhbCkgX19UR01BVEhfVU5BUllfUkVBTF9JTUFHIChWYWwsIHNpbmgsIGNzaW5oKQorLyogSHlwZXJib2xpYyB0YW5nZW50IG9mIFguICAqLworI2RlZmluZSB0YW5oKFZhbCkgX19UR01BVEhfVU5BUllfUkVBTF9JTUFHIChWYWwsIHRhbmgsIGN0YW5oKQorCisKKy8qIEV4cG9uZW50aWFsIGFuZCBsb2dhcml0aG1pYyBmdW5jdGlvbnMuICAqLworCisvKiBFeHBvbmVudGlhbCBmdW5jdGlvbiBvZiBYLiAgKi8KKyNkZWZpbmUgZXhwKFZhbCkgX19UR01BVEhfVU5BUllfUkVBTF9JTUFHIChWYWwsIGV4cCwgY2V4cCkKKworLyogQnJlYWsgVkFMVUUgaW50byBhIG5vcm1hbGl6ZWQgZnJhY3Rpb24gYW5kIGFuIGludGVncmFsIHBvd2VyIG9mIDIuICAqLworI2RlZmluZSBmcmV4cChWYWwxLCBWYWwyKSBfX1RHTUFUSF9CSU5BUllfRklSU1RfUkVBTF9PTkxZIChWYWwxLCBWYWwyLCBmcmV4cCkKKworLyogWCB0aW1lcyAodHdvIHRvIHRoZSBFWFAgcG93ZXIpLiAgKi8KKyNkZWZpbmUgbGRleHAoVmFsMSwgVmFsMikgX19UR01BVEhfQklOQVJZX0ZJUlNUX1JFQUxfT05MWSAoVmFsMSwgVmFsMiwgbGRleHApCisKKy8qIE5hdHVyYWwgbG9nYXJpdGhtIG9mIFguICAqLworI2RlZmluZSBsb2coVmFsKSBfX1RHTUFUSF9VTkFSWV9SRUFMX0lNQUcgKFZhbCwgbG9nLCBjbG9nKQorCisvKiBCYXNlLXRlbiBsb2dhcml0aG0gb2YgWC4gICovCisjaWZkZWYgX19VU0VfR05VCisjIGRlZmluZSBsb2cxMChWYWwpIF9fVEdNQVRIX1VOQVJZX1JFQUxfSU1BRyAoVmFsLCBsb2cxMCwgX19jbG9nMTApCisjZWxzZQorIyBkZWZpbmUgbG9nMTAoVmFsKSBfX1RHTUFUSF9VTkFSWV9SRUFMX09OTFkgKFZhbCwgbG9nMTApCisjZW5kaWYKKworLyogUmV0dXJuIGV4cChYKSAtIDEuICAqLworI2RlZmluZSBleHBtMShWYWwpIF9fVEdNQVRIX1VOQVJZX1JFQUxfT05MWSAoVmFsLCBleHBtMSkKKworLyogUmV0dXJuIGxvZygxICsgWCkuICAqLworI2RlZmluZSBsb2cxcChWYWwpIF9fVEdNQVRIX1VOQVJZX1JFQUxfT05MWSAoVmFsLCBsb2cxcCkKKworLyogUmV0dXJuIHRoZSBiYXNlIDIgc2lnbmVkIGludGVncmFsIGV4cG9uZW50IG9mIFguICAqLworI2RlZmluZSBsb2diKFZhbCkgX19UR01BVEhfVU5BUllfUkVBTF9PTkxZIChWYWwsIGxvZ2IpCisKKy8qIENvbXB1dGUgYmFzZS0yIGV4cG9uZW50aWFsIG9mIFguICAqLworI2RlZmluZSBleHAyKFZhbCkgX19UR01BVEhfVU5BUllfUkVBTF9PTkxZIChWYWwsIGV4cDIpCisKKy8qIENvbXB1dGUgYmFzZS0yIGxvZ2FyaXRobSBvZiBYLiAgKi8KKyNkZWZpbmUgbG9nMihWYWwpIF9fVEdNQVRIX1VOQVJZX1JFQUxfT05MWSAoVmFsLCBsb2cyKQorCisKKy8qIFBvd2VyIGZ1bmN0aW9ucy4gICovCisKKy8qIFJldHVybiBYIHRvIHRoZSBZIHBvd2VyLiAgKi8KKyNkZWZpbmUgcG93KFZhbDEsIFZhbDIpIF9fVEdNQVRIX0JJTkFSWV9SRUFMX0lNQUcgKFZhbDEsIFZhbDIsIHBvdywgY3BvdykKKworLyogUmV0dXJuIHRoZSBzcXVhcmUgcm9vdCBvZiBYLiAgKi8KKyNkZWZpbmUgc3FydChWYWwpIF9fVEdNQVRIX1VOQVJZX1JFQUxfSU1BRyAoVmFsLCBzcXJ0LCBjc3FydCkKKworLyogUmV0dXJuIGBzcXJ0KFgqWCArIFkqWSknLiAgKi8KKyNkZWZpbmUgaHlwb3QoVmFsMSwgVmFsMikgX19UR01BVEhfQklOQVJZX1JFQUxfT05MWSAoVmFsMSwgVmFsMiwgaHlwb3QpCisKKy8qIFJldHVybiB0aGUgY3ViZSByb290IG9mIFguICAqLworI2RlZmluZSBjYnJ0KFZhbCkgX19UR01BVEhfVU5BUllfUkVBTF9PTkxZIChWYWwsIGNicnQpCisKKworLyogTmVhcmVzdCBpbnRlZ2VyLCBhYnNvbHV0ZSB2YWx1ZSwgYW5kIHJlbWFpbmRlciBmdW5jdGlvbnMuICAqLworCisvKiBTbWFsbGVzdCBpbnRlZ3JhbCB2YWx1ZSBub3QgbGVzcyB0aGFuIFguICAqLworI2RlZmluZSBjZWlsKFZhbCkgX19UR01BVEhfVU5BUllfUkVBTF9PTkxZIChWYWwsIGNlaWwpCisKKy8qIEFic29sdXRlIHZhbHVlIG9mIFguICAqLworI2RlZmluZSBmYWJzKFZhbCkgX19UR01BVEhfVU5BUllfUkVBTF9JTUFHX1JFVF9SRUFMIChWYWwsIGZhYnMsIGNhYnMpCisKKy8qIExhcmdlc3QgaW50ZWdlciBub3QgZ3JlYXRlciB0aGFuIFguICAqLworI2RlZmluZSBmbG9vcihWYWwpIF9fVEdNQVRIX1VOQVJZX1JFQUxfT05MWSAoVmFsLCBmbG9vcikKKworLyogRmxvYXRpbmctcG9pbnQgbW9kdWxvIHJlbWFpbmRlciBvZiBYL1kuICAqLworI2RlZmluZSBmbW9kKFZhbDEsIFZhbDIpIF9fVEdNQVRIX0JJTkFSWV9SRUFMX09OTFkgKFZhbDEsIFZhbDIsIGZtb2QpCisKKy8qIFJvdW5kIFggdG8gaW50ZWdyYWwgdmFsdWVpbiBmbG9hdGluZy1wb2ludCBmb3JtYXQgdXNpbmcgY3VycmVudAorICAgcm91bmRpbmcgZGlyZWN0aW9uLCBidXQgZG8gbm90IHJhaXNlIGluZXhhY3QgZXhjZXB0aW9uLiAgKi8KKyNkZWZpbmUgbmVhcmJ5aW50KFZhbCkgX19UR01BVEhfVU5BUllfUkVBTF9PTkxZIChWYWwsIG5lYXJieWludCkKKworLyogUm91bmQgWCB0byBuZWFyZXN0IGludGVncmFsIHZhbHVlLCByb3VuZGluZyBoYWxmd2F5IGNhc2VzIGF3YXkgZnJvbQorICAgemVyby4gICovCisjZGVmaW5lIHJvdW5kKFZhbCkgX19UR01BVEhfVU5BUllfUkVBTF9PTkxZIChWYWwsIHJvdW5kKQorCisvKiBSb3VuZCBYIHRvIHRoZSBpbnRlZ3JhbCB2YWx1ZSBpbiBmbG9hdGluZy1wb2ludCBmb3JtYXQgbmVhcmVzdCBidXQKKyAgIG5vdCBsYXJnZXIgaW4gbWFnbml0dWRlLiAgKi8KKyNkZWZpbmUgdHJ1bmMoVmFsKSBfX1RHTUFUSF9VTkFSWV9SRUFMX09OTFkgKFZhbCwgdHJ1bmMpCisKKy8qIENvbXB1dGUgcmVtYWluZGVyIG9mIFggYW5kIFkgYW5kIHB1dCBpbiAqUVVPIGEgdmFsdWUgd2l0aCBzaWduIG9mIHgveQorICAgYW5kIG1hZ25pdHVkZSBjb25ncnVlbnQgYG1vZCAyXm4nIHRvIHRoZSBtYWduaXR1ZGUgb2YgdGhlIGludGVncmFsCisgICBxdW90aWVudCB4L3ksIHdpdGggbiA+PSAzLiAgKi8KKyNkZWZpbmUgcmVtcXVvKFZhbDEsIFZhbDIsIFZhbDMpIFwKKyAgICAgX19UR01BVEhfVEVSTkFSWV9GSVJTVF9TRUNPTkRfUkVBTF9PTkxZIChWYWwxLCBWYWwyLCBWYWwzLCByZW1xdW8pCisKKy8qIFJvdW5kIFggdG8gbmVhcmVzdCBpbnRlZ3JhbCB2YWx1ZSBhY2NvcmRpbmcgdG8gY3VycmVudCByb3VuZGluZworICAgZGlyZWN0aW9uLiAgKi8KKyNkZWZpbmUgbHJpbnQoVmFsKSBfX1RHTUFUSF9VTkFSWV9SRUFMX1JFVF9PTkxZIChWYWwsIGxvbmcgaW50LCBscmludCkKKyNkZWZpbmUgbGxyaW50KFZhbCkgX19UR01BVEhfVU5BUllfUkVBTF9SRVRfT05MWSAoVmFsLCBsb25nIGxvbmcgaW50LCBsbHJpbnQpCisKKy8qIFJvdW5kIFggdG8gbmVhcmVzdCBpbnRlZ3JhbCB2YWx1ZSwgcm91bmRpbmcgaGFsZndheSBjYXNlcyBhd2F5IGZyb20KKyAgIHplcm8uICAqLworI2RlZmluZSBscm91bmQoVmFsKSBfX1RHTUFUSF9VTkFSWV9SRUFMX1JFVF9PTkxZIChWYWwsIGxvbmcgaW50LCBscm91bmQpCisjZGVmaW5lIGxscm91bmQoVmFsKSBfX1RHTUFUSF9VTkFSWV9SRUFMX1JFVF9PTkxZIChWYWwsIGxvbmcgbG9uZyBpbnQsIGxscm91bmQpCisKKworLyogUmV0dXJuIFggd2l0aCBpdHMgc2lnbmVkIGNoYW5nZWQgdG8gWSdzLiAgKi8KKyNkZWZpbmUgY29weXNpZ24oVmFsMSwgVmFsMikgX19UR01BVEhfQklOQVJZX1JFQUxfT05MWSAoVmFsMSwgVmFsMiwgY29weXNpZ24pCisKKy8qIEVycm9yIGFuZCBnYW1tYSBmdW5jdGlvbnMuICAqLworI2RlZmluZSBlcmYoVmFsKSBfX1RHTUFUSF9VTkFSWV9SRUFMX09OTFkgKFZhbCwgZXJmKQorI2RlZmluZSBlcmZjKFZhbCkgX19UR01BVEhfVU5BUllfUkVBTF9PTkxZIChWYWwsIGVyZmMpCisjZGVmaW5lIHRnYW1tYShWYWwpIF9fVEdNQVRIX1VOQVJZX1JFQUxfT05MWSAoVmFsLCB0Z2FtbWEpCisjZGVmaW5lIGxnYW1tYShWYWwpIF9fVEdNQVRIX1VOQVJZX1JFQUxfT05MWSAoVmFsLCBsZ2FtbWEpCisKKworLyogUmV0dXJuIHRoZSBpbnRlZ2VyIG5lYXJlc3QgWCBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZQorICAgcHJldmFpbGluZyByb3VuZGluZyBtb2RlLiAgKi8KKyNkZWZpbmUgcmludChWYWwpIF9fVEdNQVRIX1VOQVJZX1JFQUxfT05MWSAoVmFsLCByaW50KQorCisvKiBSZXR1cm4gWCArIGVwc2lsb24gaWYgWCA8IFksIFggLSBlcHNpbG9uIGlmIFggPiBZLiAgKi8KKyNkZWZpbmUgbmV4dGFmdGVyKFZhbDEsIFZhbDIpIF9fVEdNQVRIX0JJTkFSWV9SRUFMX09OTFkgKFZhbDEsIFZhbDIsIG5leHRhZnRlcikKKyNkZWZpbmUgbmV4dHRvd2FyZChWYWwxLCBWYWwyKSBcCisgICAgIF9fVEdNQVRIX0JJTkFSWV9GSVJTVF9SRUFMX09OTFkgKFZhbDEsIFZhbDIsIG5leHR0b3dhcmQpCisKKy8qIFJldHVybiB0aGUgcmVtYWluZGVyIG9mIGludGVnZXIgZGl2aXNvbiBYIC8gWSB3aXRoIGluZmluaXRlIHByZWNpc2lvbi4gICovCisjZGVmaW5lIHJlbWFpbmRlcihWYWwxLCBWYWwyKSBfX1RHTUFUSF9CSU5BUllfUkVBTF9PTkxZIChWYWwxLCBWYWwyLCByZW1haW5kZXIpCisKKy8qIFJldHVybiBYIHRpbWVzICgyIHRvIHRoZSBOdGggcG93ZXIpLiAgKi8KKyNpZiBkZWZpbmVkIF9fVVNFX01JU0MgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTl9FWFRFTkRFRAorIyBkZWZpbmUgc2NhbGIoVmFsMSwgVmFsMikgX19UR01BVEhfQklOQVJZX1JFQUxfT05MWSAoVmFsMSwgVmFsMiwgc2NhbGIpCisjZW5kaWYKKworLyogUmV0dXJuIFggdGltZXMgKDIgdG8gdGhlIE50aCBwb3dlcikuICAqLworI2RlZmluZSBzY2FsYm4oVmFsMSwgVmFsMikgX19UR01BVEhfQklOQVJZX0ZJUlNUX1JFQUxfT05MWSAoVmFsMSwgVmFsMiwgc2NhbGJuKQorCisvKiBSZXR1cm4gWCB0aW1lcyAoMiB0byB0aGUgTnRoIHBvd2VyKS4gICovCisjZGVmaW5lIHNjYWxibG4oVmFsMSwgVmFsMikgXAorICAgICBfX1RHTUFUSF9CSU5BUllfRklSU1RfUkVBTF9PTkxZIChWYWwxLCBWYWwyLCBzY2FsYmxuKQorCisvKiBSZXR1cm4gdGhlIGJpbmFyeSBleHBvbmVudCBvZiBYLCB3aGljaCBtdXN0IGJlIG5vbnplcm8uICAqLworI2RlZmluZSBpbG9nYihWYWwpIF9fVEdNQVRIX1VOQVJZX1JFQUxfUkVUX09OTFkgKFZhbCwgaW50LCBpbG9nYikKKworCisvKiBSZXR1cm4gcG9zaXRpdmUgZGlmZmVyZW5jZSBiZXR3ZWVuIFggYW5kIFkuICAqLworI2RlZmluZSBmZGltKFZhbDEsIFZhbDIpIF9fVEdNQVRIX0JJTkFSWV9SRUFMX09OTFkgKFZhbDEsIFZhbDIsIGZkaW0pCisKKy8qIFJldHVybiBtYXhpbXVtIG51bWVyaWMgdmFsdWUgZnJvbSBYIGFuZCBZLiAgKi8KKyNkZWZpbmUgZm1heChWYWwxLCBWYWwyKSBfX1RHTUFUSF9CSU5BUllfUkVBTF9PTkxZIChWYWwxLCBWYWwyLCBmbWF4KQorCisvKiBSZXR1cm4gbWluaW11bSBudW1lcmljIHZhbHVlIGZyb20gWCBhbmQgWS4gICovCisjZGVmaW5lIGZtaW4oVmFsMSwgVmFsMikgX19UR01BVEhfQklOQVJZX1JFQUxfT05MWSAoVmFsMSwgVmFsMiwgZm1pbikKKworCisvKiBNdWx0aXBseS1hZGQgZnVuY3Rpb24gY29tcHV0ZWQgYXMgYSB0ZXJuYXJ5IG9wZXJhdGlvbi4gICovCisjZGVmaW5lIGZtYShWYWwxLCBWYWwyLCBWYWwzKSBcCisgICAgIF9fVEdNQVRIX1RFUk5BUllfUkVBTF9PTkxZIChWYWwxLCBWYWwyLCBWYWwzLCBmbWEpCisKKworLyogQWJzb2x1dGUgdmFsdWUsIGNvbmp1Z2F0ZXMsIGFuZCBwcm9qZWN0aW9uLiAgKi8KKworLyogQXJndW1lbnQgdmFsdWUgb2YgWi4gICovCisjZGVmaW5lIGNhcmcoVmFsKSBfX1RHTUFUSF9VTkFSWV9SRUFMX0lNQUdfUkVUX1JFQUwgKFZhbCwgY2FyZywgY2FyZykKKworLyogQ29tcGxleCBjb25qdWdhdGUgb2YgWi4gICovCisjZGVmaW5lIGNvbmooVmFsKSBfX1RHTUFUSF9VTkFSWV9JTUFHIChWYWwsIGNvbmopCisKKy8qIFByb2plY3Rpb24gb2YgWiBvbnRvIHRoZSBSaWVtYW5uIHNwaGVyZS4gICovCisjZGVmaW5lIGNwcm9qKFZhbCkgX19UR01BVEhfVU5BUllfSU1BRyAoVmFsLCBjcHJvaikKKworCisvKiBEZWNvbXBvc2luZyBjb21wbGV4IHZhbHVlcy4gICovCisKKy8qIEltYWdpbmFyeSBwYXJ0IG9mIFouICAqLworI2RlZmluZSBjaW1hZyhWYWwpIF9fVEdNQVRIX1VOQVJZX1JFQUxfSU1BR19SRVRfUkVBTCAoVmFsLCBjaW1hZywgY2ltYWcpCisKKy8qIFJlYWwgcGFydCBvZiBaLiAgKi8KKyNkZWZpbmUgY3JlYWwoVmFsKSBfX1RHTUFUSF9VTkFSWV9SRUFMX0lNQUdfUkVUX1JFQUwgKFZhbCwgY3JlYWwsIGNyZWFsKQorCisjZW5kaWYgLyogdGdtYXRoLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS90aHJlYWRfZGIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS90aHJlYWRfZGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzNiNTRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3RocmVhZF9kYi5oCkBAIC0wLDAgKzEsNDU5IEBACisvKiB0aHJlYWRfZGIuaCAtLSBpbnRlcmZhY2UgdG8gbGlidGhyZWFkX2RiLnNvIGxpYnJhcnkgZm9yIGRlYnVnZ2luZyAtbHB0aHJlYWQKKyAgIENvcHlyaWdodCAoQykgMTk5OSwyMDAxLDIwMDIsMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfVEhSRUFEX0RCX0gKKyNkZWZpbmUgX1RIUkVBRF9EQl9ICTEKKworLyogVGhpcyBpcyB0aGUgZGVidWdnZXIgaW50ZXJmYWNlIGZvciB0aGUgTlBUTCBsaWJyYXJ5LiAgSXQgaXMKKyAgIG1vZGVsbGVkIGNsb3NlbHkgYWZ0ZXIgdGhlIGludGVyZmFjZSB3aXRoIHNhbWUgbmFtZXMgaW4gU29sYXJpcworICAgd2l0aCB0aGUgZ29hbCB0byBzaGFyZSB0aGUgc2FtZSBjb2RlIGluIHRoZSBkZWJ1Z2dlci4gICovCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wcm9jZnMuaD4KKworCisvKiBFcnJvciBjb2RlcyBvZiB0aGUgbGlicmFyeS4gICovCit0eXBlZGVmIGVudW0KK3sKKyAgVERfT0ssCSAgLyogTm8gZXJyb3IuICAqLworICBURF9FUlIsCSAgLyogTm8gZnVydGhlciBzcGVjaWZpZWQgZXJyb3IuICAqLworICBURF9OT1RIUiwJICAvKiBObyBtYXRjaGluZyB0aHJlYWQgZm91bmQuICAqLworICBURF9OT1NWLAkgIC8qIE5vIG1hdGNoaW5nIHN5bmNocm9uaXphdGlvbiBoYW5kbGUgZm91bmQuICAqLworICBURF9OT0xXUCwJICAvKiBObyBtYXRjaGluZyBsaWdodC13ZWlnaHRlZCBwcm9jZXNzIGZvdW5kLiAgKi8KKyAgVERfQkFEUEgsCSAgLyogSW52YWxpZCBwcm9jZXNzIGhhbmRsZS4gICovCisgIFREX0JBRFRILAkgIC8qIEludmFsaWQgdGhyZWFkIGhhbmRsZS4gICovCisgIFREX0JBRFNILAkgIC8qIEludmFsaWQgc3luY2hyb25pemF0aW9uIGhhbmRsZS4gICovCisgIFREX0JBRFRBLAkgIC8qIEludmFsaWQgdGhyZWFkIGFnZW50LiAgKi8KKyAgVERfQkFES0VZLAkgIC8qIEludmFsaWQga2V5LiAgKi8KKyAgVERfTk9NU0csCSAgLyogTm8gZXZlbnQgYXZhaWxhYmxlLiAgKi8KKyAgVERfTk9GUFJFR1MsCSAgLyogTm8gZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgY29udGVudCBhdmFpbGFibGUuICAqLworICBURF9OT0xJQlRIUkVBRCwgLyogQXBwbGljYXRpb24gbm90IGxpbmtlZCB3aXRoIHRocmVhZCBsaWJyYXJ5LiAgKi8KKyAgVERfTk9FVkVOVCwJICAvKiBSZXF1ZXN0ZWQgZXZlbnQgaXMgbm90IHN1cHBvcnRlZC4gICovCisgIFREX05PQ0FQQUIsCSAgLyogQ2FwYWJpbGl0eSBub3QgYXZhaWxhYmxlLiAgKi8KKyAgVERfREJFUlIsCSAgLyogSW50ZXJuYWwgZGVidWcgbGlicmFyeSBlcnJvci4gICovCisgIFREX05PQVBMSUMsCSAgLyogT3BlcmF0aW9uIGlzIG5vdCBhcHBsaWNhYmxlLiAgKi8KKyAgVERfTk9UU0QsCSAgLyogTm8gdGhyZWFkLXNwZWNpZmljIGRhdGEgYXZhaWxhYmxlLiAgKi8KKyAgVERfTUFMTE9DLAkgIC8qIE91dCBvZiBtZW1vcnkuICAqLworICBURF9QQVJUSUFMUkVHLCAgLyogTm90IGVudGlyZSByZWdpc3RlciBzZXQgd2FzIHJlYWQgb3Igd3JpdHRlbi4gICovCisgIFREX05PWFJFR1MsCSAgLyogWCByZWdpc3RlciBzZXQgbm90IGF2YWlsYWJsZSBmb3IgZ2l2ZW4gdGhyZWFkLiAgKi8KKyAgVERfVExTREVGRVIsCSAgLyogVGhyZWFkIGhhcyBub3QgeWV0IGFsbG9jYXRlZCBUTFMgZm9yIGdpdmVuIG1vZHVsZS4gICovCisgIFREX05PVEFMTE9DID0gVERfVExTREVGRVIsCisgIFREX1ZFUlNJT04sCSAgLyogVmVyc2lvbiBpZiBsaWJwdGhyZWFkIGFuZCBsaWJ0aHJlYWRfZGIgZG8gbm90IG1hdGNoLiAgKi8KKyAgVERfTk9UTFMJICAvKiBUaGVyZSBpcyBubyBUTFMgc2VnbWVudCBpbiB0aGUgZ2l2ZW4gbW9kdWxlLiAgKi8KK30gdGRfZXJyX2U7CisKKworLyogUG9zc2libGUgdGhyZWFkIHN0YXRlcy4gIFREX1RIUl9BTllfU1RBVEUgaXMgYSBwc2V1ZG8tc3RhdGUgdXNlZCB0bworICAgc2VsZWN0IHRocmVhZHMgcmVnYXJkbGVzcyBvZiBzdGF0ZSBpbiB0ZF90YV90aHJfaXRlcigpLiAgKi8KK3R5cGVkZWYgZW51bQoreworICBURF9USFJfQU5ZX1NUQVRFLAorICBURF9USFJfVU5LTk9XTiwKKyAgVERfVEhSX1NUT1BQRUQsCisgIFREX1RIUl9SVU4sCisgIFREX1RIUl9BQ1RJVkUsCisgIFREX1RIUl9aT01CSUUsCisgIFREX1RIUl9TTEVFUCwKKyAgVERfVEhSX1NUT1BQRURfQVNMRUVQCit9IHRkX3Rocl9zdGF0ZV9lOworCisvKiBUaHJlYWQgdHlwZTogdXNlciBvciBzeXN0ZW0uICBURF9USFJfQU5ZX1RZUEUgaXMgYSBwc2V1ZG8tdHlwZSB1c2VkCisgICB0byBzZWxlY3QgdGhyZWFkcyByZWdhcmRsZXNzIG9mIHR5cGUgaW4gdGRfdGFfdGhyX2l0ZXIoKS4gICovCit0eXBlZGVmIGVudW0KK3sKKyAgVERfVEhSX0FOWV9UWVBFLAorICBURF9USFJfVVNFUiwKKyAgVERfVEhSX1NZU1RFTQorfSB0ZF90aHJfdHlwZV9lOworCisKKy8qIFR5cGVzIG9mIHRoZSBkZWJ1Z2dpbmcgbGlicmFyeS4gICovCisKKy8qIEhhbmRsZSBmb3IgYSBwcm9jZXNzLiAgVGhpcyB0eXBlIGlzIG9wYXF1ZS4gICovCit0eXBlZGVmIHN0cnVjdCB0ZF90aHJhZ2VudCB0ZF90aHJhZ2VudF90OworCisvKiBUaGUgYWN0dWFsIHRocmVhZCBoYW5kbGUgdHlwZS4gIFRoaXMgaXMgYWxzbyBvcGFxdWUuICAqLwordHlwZWRlZiBzdHJ1Y3QgdGRfdGhyaGFuZGxlCit7CisgIHRkX3RocmFnZW50X3QgKnRoX3RhX3A7CisgIHBzYWRkcl90IHRoX3VuaXF1ZTsKK30gdGRfdGhyaGFuZGxlX3Q7CisKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBhIHR5cGUgZGVmaW5lZCBieSBhbmQgZm9yIHRoZSBkeW5hbWljIGxpbmtlci4gICovCitzdHJ1Y3QgbGlua19tYXA7CisKKworLyogRmxhZ3MgZm9yIGB0ZF90YV90aHJfaXRlcicuICAqLworI2RlZmluZSBURF9USFJfQU5ZX1VTRVJfRkxBR1MJMHhmZmZmZmZmZgorI2RlZmluZSBURF9USFJfTE9XRVNUX1BSSU9SSVRZCS0yMAorI2RlZmluZSBURF9TSUdOT19NQVNLCQlOVUxMCisKKworI2RlZmluZSBURF9FVkVOVFNJWkUJMgorI2RlZmluZSBCVF9VSVNISUZUCTUgLyogbG9nIGJhc2UgMiBvZiBCVF9OQklQVUksIHRvIGV4dHJhY3Qgd29yZCBpbmRleCAqLworI2RlZmluZSBCVF9OQklQVUkJKDEgPDwgQlRfVUlTSElGVCkgICAgICAgLyogbiBiaXRzIHBlciB1aW50ICovCisjZGVmaW5lIEJUX1VJTUFTSwkoQlRfTkJJUFVJIC0gMSkgICAgICAgICAvKiB0byBleHRyYWN0IGJpdCBpbmRleCAqLworCisvKiBCaXRtYXNrIG9mIGVuYWJsZWQgZXZlbnRzLiAqLwordHlwZWRlZiBzdHJ1Y3QgdGRfdGhyX2V2ZW50cworeworICB1aW50MzJfdCBldmVudF9iaXRzW1REX0VWRU5UU0laRV07Cit9IHRkX3Rocl9ldmVudHNfdDsKKworLyogRXZlbnQgc2V0IG1hbmlwdWxhdGlvbiBtYWNyb3MuICovCisjZGVmaW5lIF9fdGRfZXZlbnRtYXNrKG4pIFwKKyAgKFVJTlQzMl9DICgxKSA8PCAoKChuKSAtIDEpICYgQlRfVUlNQVNLKSkKKyNkZWZpbmUgX190ZF9ldmVudHdvcmQobikgXAorICAoKFVJTlQzMl9DICgobikgLSAxKSkgPj4gQlRfVUlTSElGVCkKKworI2RlZmluZSB0ZF9ldmVudF9lbXB0eXNldChzZXRwKSBcCisgIGRvIHsJCQkJCQkJCQkgICAgICBcCisgICAgaW50IF9faTsJCQkJCQkJCSAgICAgIFwKKyAgICBmb3IgKF9faSA9IFREX0VWRU5UU0laRTsgX19pID4gMDsgLS1fX2kpCQkJCSAgICAgIFwKKyAgICAgIChzZXRwKS0+ZXZlbnRfYml0c1tfX2kgLSAxXSA9IDA7CQkJCQkgICAgICBcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgdGRfZXZlbnRfZmlsbHNldChzZXRwKSBcCisgIGRvIHsJCQkJCQkJCQkgICAgICBcCisgICAgaW50IF9faTsJCQkJCQkJCSAgICAgIFwKKyAgICBmb3IgKF9faSA9IFREX0VWRU5UU0laRTsgX19pID4gMDsgLS1fX2kpCQkJCSAgICAgIFwKKyAgICAgIChzZXRwKS0+ZXZlbnRfYml0c1tfX2kgLSAxXSA9IFVJTlQzMl9DICgweGZmZmZmZmZmKTsJCSAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSB0ZF9ldmVudF9hZGRzZXQoc2V0cCwgbikgXAorICAoKChzZXRwKS0+ZXZlbnRfYml0c1tfX3RkX2V2ZW50d29yZCAobildKSB8PSBfX3RkX2V2ZW50bWFzayAobikpCisjZGVmaW5lIHRkX2V2ZW50X2RlbHNldChzZXRwLCBuKSBcCisgICgoKHNldHApLT5ldmVudF9iaXRzW19fdGRfZXZlbnR3b3JkIChuKV0pICY9IH5fX3RkX2V2ZW50bWFzayAobikpCisjZGVmaW5lIHRkX2V2ZW50aXNtZW1iZXIoc2V0cCwgbikgXAorICAoX190ZF9ldmVudG1hc2sgKG4pICYgKChzZXRwKS0+ZXZlbnRfYml0c1tfX3RkX2V2ZW50d29yZCAobildKSkKKyNpZiBURF9FVkVOVFNJWkUgPT0gMgorIyBkZWZpbmUgdGRfZXZlbnRpc2VtcHR5KHNldHApIFwKKyAgKCEoKHNldHApLT5ldmVudF9iaXRzWzBdKSAmJiAhKChzZXRwKS0+ZXZlbnRfYml0c1sxXSkpCisjZWxzZQorIyBlcnJvciAidGRfZXZlbnRpc2VtcHR5IG11c3QgYmUgY2hhbmdlZCB0byBtYXRjaCBURF9FVkVOVFNJWkUiCisjZW5kaWYKKworLyogRXZlbnRzIHJlcG9ydGFibGUgYnkgdGhlIHRocmVhZCBpbXBsZW1lbnRhdGlvbi4gICovCit0eXBlZGVmIGVudW0KK3sKKyAgVERfQUxMX0VWRU5UUywJCSAvKiBQc2V1ZG8tZXZlbnQgbnVtYmVyLiAgKi8KKyAgVERfRVZFTlRfTk9ORSA9IFREX0FMTF9FVkVOVFMsIC8qIERlcGVuZHMgb24gY29udGV4dC4gICovCisgIFREX1JFQURZLAkJCSAvKiBJcyBleGVjdXRhYmxlIG5vdy4gKi8KKyAgVERfU0xFRVAsCQkJIC8qIEJsb2NrZWQgaW4gYSBzeW5jaHJvbml6YXRpb24gb2JqLiAgKi8KKyAgVERfU1dJVENIVE8sCQkJIC8qIE5vdyBhc3NpZ25lZCB0byBhIHByb2Nlc3MuICAqLworICBURF9TV0lUQ0hGUk9NLAkJIC8qIE5vdCBhbnltb3JlIGFzc2lnbmVkIHRvIGEgcHJvY2Vzcy4gICovCisgIFREX0xPQ0tfVFJZLAkJCSAvKiBUcnlpbmcgdG8gZ2V0IGFuIHVuYXZhaWxhYmxlIGxvY2suICAqLworICBURF9DQVRDSFNJRywJCQkgLyogU2lnbmFsIHBvc3RlZCB0byB0aGUgdGhyZWFkLiAgKi8KKyAgVERfSURMRSwJCQkgLyogUHJvY2VzcyBnZXR0aW5nIGlkbGUuICAqLworICBURF9DUkVBVEUsCQkJIC8qIE5ldyB0aHJlYWQgY3JlYXRlZC4gICovCisgIFREX0RFQVRILAkJCSAvKiBUaHJlYWQgdGVybWluYXRlZC4gICovCisgIFREX1BSRUVNUFQsCQkJIC8qIFByZWVtcHRlZC4gICovCisgIFREX1BSSV9JTkhFUklULAkJIC8qIEluaGVyaXRlZCBlbGV2YXRlZCBwcmlvcml0eS4gICovCisgIFREX1JFQVAsCQkJIC8qIFJlYXBlZC4gICovCisgIFREX0NPTkNVUlJFTkNZLAkJIC8qIE51bWJlciBvZiBwcm9jZXNzZXMgY2hhbmdpbmcuICAqLworICBURF9USU1FT1VULAkJCSAvKiBDb25kaXRpb25hbCB2YXJpYWJsZSB3YWl0IHRpbWVkIG91dC4gICovCisgIFREX01JTl9FVkVOVF9OVU0gPSBURF9SRUFEWSwKKyAgVERfTUFYX0VWRU5UX05VTSA9IFREX1RJTUVPVVQsCisgIFREX0VWRU5UU19FTkFCTEUgPSAzMQkJLyogRXZlbnQgcmVwb3J0aW5nIGVuYWJsZWQuICAqLworfSB0ZF9ldmVudF9lOworCisvKiBWYWx1ZXMgcmVwcmVzZW50aW5nIHRoZSBkaWZmZXJlbnQgd2F5cyBldmVudHMgYXJlIHJlcG9ydGVkLiAgKi8KK3R5cGVkZWYgZW51bQoreworICBOT1RJRllfQlBULAkJCS8qIFVzZXIgbXVzdCBpbnNlcnQgYnJlYWtwb2ludCBhdCB1LmJwdGFkZHIuICovCisgIE5PVElGWV9BVVRPQlBULAkJLyogQnJlYWtwb2ludCBhdCB1LmJwdGFkZHIgaXMgYXV0b21hdGljYWxseQorCQkJCSAgIGluc2VydGVkLiAgKi8KKyAgTk9USUZZX1NZU0NBTEwJCS8qIFN5c3RlbSBjYWxsIHUuc3lzY2FsbG5vIHdpbGwgYmUgaW52b2tlZC4gICovCit9IHRkX25vdGlmeV9lOworCisvKiBEZXNjcmlwdGlvbiBob3cgZXZlbnQgdHlwZSBpcyByZXBvcnRlZC4gICovCit0eXBlZGVmIHN0cnVjdCB0ZF9ub3RpZnkKK3sKKyAgdGRfbm90aWZ5X2UgdHlwZTsJCS8qIFdheSB0aGUgZXZlbnQgaXMgcmVwb3J0ZWQuICAqLworICB1bmlvbgorICB7CisgICAgcHNhZGRyX3QgYnB0YWRkcjsJCS8qIEFkZHJlc3Mgb2YgYnJlYWtwb2ludC4gICovCisgICAgaW50IHN5c2NhbGxubzsJCS8qIE51bWJlciBvZiBzeXN0ZW0gY2FsbCB1c2VkLiAgKi8KKyAgfSB1OworfSB0ZF9ub3RpZnlfdDsKKworLyogU3RydWN0dXJlIHVzZWQgdG8gcmVwb3J0IGV2ZW50LiAgKi8KK3R5cGVkZWYgc3RydWN0IHRkX2V2ZW50X21zZworeworICB0ZF9ldmVudF9lIGV2ZW50OwkJLyogRXZlbnQgdHlwZSBiZWluZyByZXBvcnRlZC4gICovCisgIGNvbnN0IHRkX3RocmhhbmRsZV90ICp0aF9wOwkvKiBUaHJlYWQgcmVwb3J0aW5nIHRoZSBldmVudC4gICovCisgIHVuaW9uCisgIHsKKyMgaWYgMAorICAgIHRkX3N5bmNoYW5kbGVfdCAqc2g7CS8qIEhhbmRsZSBvZiBzeW5jaHJvbml6YXRpb24gb2JqZWN0LiAgKi8KKyNlbmRpZgorICAgIHVpbnRwdHJfdCBkYXRhOwkJLyogRXZlbnQgc3BlY2lmaWMgZGF0YS4gICovCisgIH0gbXNnOworfSB0ZF9ldmVudF9tc2dfdDsKKworLyogU3RydWN0dXJlIGNvbnRhaW5pbmcgZXZlbnQgZGF0YSBhdmFpbGFibGUgaW4gZWFjaCB0aHJlYWQgc3RydWN0dXJlLiAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIHRkX3Rocl9ldmVudHNfdCBldmVudG1hc2s7CS8qIE1hc2sgb2YgZW5hYmxlZCBldmVudHMuICAqLworICB0ZF9ldmVudF9lIGV2ZW50bnVtOwkJLyogTnVtYmVyIG9mIGxhc3QgZXZlbnQuICAqLworICB2b2lkICpldmVudGRhdGE7CQkvKiBEYXRhIGFzc29jaWF0ZWQgd2l0aCBldmVudC4gICovCit9IHRkX2V2ZW50YnVmX3Q7CisKKworLyogR2F0aGVyZWQgc3RhdGlzdGljcyBhYm91dCB0aGUgcHJvY2Vzcy4gICovCit0eXBlZGVmIHN0cnVjdCB0ZF90YV9zdGF0cworeworICBpbnQgbnRocmVhZHM7ICAgICAgIAkJLyogVG90YWwgbnVtYmVyIG9mIHRocmVhZHMgaW4gdXNlLiAgKi8KKyAgaW50IHJfY29uY3VycmVuY3k7CQkvKiBDb25jdXJyZW5jeSBsZXZlbCByZXF1ZXN0ZWQgYnkgdXNlci4gICovCisgIGludCBucnVubmFibGVfbnVtOwkJLyogQXZlcmFnZSBydW5uYWJsZSB0aHJlYWRzLCBudW1lcmF0b3IuICAqLworICBpbnQgbnJ1bm5hYmxlX2RlbjsJCS8qIEF2ZXJhZ2UgcnVubmFibGUgdGhyZWFkcywgZGVub21pbmF0b3IuICAqLworICBpbnQgYV9jb25jdXJyZW5jeV9udW07CS8qIEFjaGlldmVkIGNvbmN1cnJlbmN5IGxldmVsLCBudW1lcmF0b3IuICAqLworICBpbnQgYV9jb25jdXJyZW5jeV9kZW47CS8qIEFjaGlldmVkIGNvbmN1cnJlbmN5IGxldmVsLCBkZW5vbWluYXRvci4gICovCisgIGludCBubHdwc19udW07CQkvKiBBdmVyYWdlIG51bWJlciBvZiBwcm9jZXNzZXMgaW4gdXNlLAorCQkJCSAgIG51bWVyYXRvci4gICovCisgIGludCBubHdwc19kZW47CQkvKiBBdmVyYWdlIG51bWJlciBvZiBwcm9jZXNzZXMgaW4gdXNlLAorCQkJCSAgIGRlbm9taW5hdG9yLiAgKi8KKyAgaW50IG5pZGxlX251bTsJCS8qIEF2ZXJhZ2UgbnVtYmVyIG9mIGlkbGluZyBwcm9jZXNzZXMsCisJCQkJICAgbnVtZXJhdG9yLiAgKi8KKyAgaW50IG5pZGxlX2RlbjsJCS8qIEF2ZXJhZ2UgbnVtYmVyIG9mIGlkbGluZyBwcm9jZXNzZXMsCisJCQkJICAgZGVub21pbmF0b3IuICAqLworfSB0ZF90YV9zdGF0c190OworCisKKy8qIFNpbmNlIFN1bidzIGxpYnJhcnkgaXMgYmFzZWQgb24gU29sYXJpcyB0aHJlYWRzIHdlIGhhdmUgdG8gZGVmaW5lIGEgZmV3CisgICB0eXBlcyB0byBtYXAgdGhlbSB0byBQT1NJWCB0aHJlYWRzLiAgKi8KK3R5cGVkZWYgcHRocmVhZF90IHRocmVhZF90OwordHlwZWRlZiBwdGhyZWFkX2tleV90IHRocmVhZF9rZXlfdDsKKworCisvKiBDYWxsYmFjayBmb3IgaXRlcmF0aW9uIG92ZXIgdGhyZWFkcy4gICovCit0eXBlZGVmIGludCB0ZF90aHJfaXRlcl9mIChjb25zdCB0ZF90aHJoYW5kbGVfdCAqLCB2b2lkICopOworCisvKiBDYWxsYmFjayBmb3IgaXRlcmF0aW9uIG92ZXIgdGhyZWFkIGxvY2FsIGRhdGEuICAqLwordHlwZWRlZiBpbnQgdGRfa2V5X2l0ZXJfZiAodGhyZWFkX2tleV90LCB2b2lkICgqKSAodm9pZCAqKSwgdm9pZCAqKTsKKworCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24uICBUaGlzIGhhcyB0byBiZSBkZWZpbmVkIGJ5IHRoZSB1c2VyLiAgKi8KK3N0cnVjdCBwc19wcm9jaGFuZGxlOworCisKKy8qIEluZm9ybWF0aW9uIGFib3V0IHRoZSB0aHJlYWQuICAqLwordHlwZWRlZiBzdHJ1Y3QgdGRfdGhyaW5mbworeworICB0ZF90aHJhZ2VudF90ICp0aV90YV9wOwkJLyogUHJvY2VzcyBoYW5kbGUuICAqLworICB1bnNpZ25lZCBpbnQgdGlfdXNlcl9mbGFnczsJCS8qIFVudXNlZC4gICovCisgIHRocmVhZF90IHRpX3RpZDsJCQkvKiBUaHJlYWQgSUQgcmV0dXJuZWQgYnkKKwkJCQkJICAgcHRocmVhZF9jcmVhdGUoKS4gICovCisgIGNoYXIgKnRpX3RsczsJCQkJLyogUG9pbnRlciB0byB0aHJlYWQtbG9jYWwgZGF0YS4gICovCisgIHBzYWRkcl90IHRpX3N0YXJ0ZnVuYzsJCS8qIFN0YXJ0IGZ1bmN0aW9uIHBhc3NlZCB0bworCQkJCQkgICBwdGhyZWFkX2NyZWF0ZSgpLiAgKi8KKyAgcHNhZGRyX3QgdGlfc3RrYmFzZTsJCQkvKiBCYXNlIG9mIHRocmVhZCdzIHN0YWNrLiAgKi8KKyAgbG9uZyBpbnQgdGlfc3Rrc2l6ZTsJCQkvKiBTaXplIG9mIHRocmVhZCdzIHN0YWNrLiAgKi8KKyAgcHNhZGRyX3QgdGlfcm9fYXJlYTsJCQkvKiBVbnVzZWQuICAqLworICBpbnQgdGlfcm9fc2l6ZTsJCQkvKiBVbnVzZWQuICAqLworICB0ZF90aHJfc3RhdGVfZSB0aV9zdGF0ZTsJCS8qIFRocmVhZCBzdGF0ZS4gICovCisgIHVuc2lnbmVkIGNoYXIgdGlfZGJfc3VzcGVuZGVkOwkvKiBOb256ZXJvIGlmIHN1c3BlbmRlZCBieSBkZWJ1Z2dlci4gKi8KKyAgdGRfdGhyX3R5cGVfZSB0aV90eXBlOwkJLyogVHlwZSBvZiB0aGUgdGhyZWFkIChzeXN0ZW0gdnMKKwkJCQkJICAgdXNlciB0aHJlYWQpLiAgKi8KKyAgaW50cHRyX3QgdGlfcGM7CQkJLyogVW51c2VkLiAgKi8KKyAgaW50cHRyX3QgdGlfc3A7CQkJLyogVW51c2VkLiAgKi8KKyAgc2hvcnQgaW50IHRpX2ZsYWdzOwkJCS8qIFVudXNlZC4gICovCisgIGludCB0aV9wcmk7CQkJCS8qIFRocmVhZCBwcmlvcml0eS4gICovCisgIGx3cGlkX3QgdGlfbGlkOwkJCS8qIEtlcm5lbCBQSUQgZm9yIHRoaXMgdGhyZWFkLiAgKi8KKyAgc2lnc2V0X3QgdGlfc2lnbWFzazsJCQkvKiBTaWduYWwgbWFzay4gICovCisgIHVuc2lnbmVkIGNoYXIgdGlfdHJhY2VtZTsJCS8qIE5vbnplcm8gaWYgZXZlbnQgcmVwb3J0aW5nCisJCQkJCSAgIGVuYWJsZWQuICAqLworICB1bnNpZ25lZCBjaGFyIHRpX3ByZWVtcHRmbGFnOwkJLyogVW51c2VkLiAgKi8KKyAgdW5zaWduZWQgY2hhciB0aV9waXJlY2ZsYWc7CQkvKiBVbnVzZWQuICAqLworICBzaWdzZXRfdCB0aV9wZW5kaW5nOwkJCS8qIFNldCBvZiBwZW5kaW5nIHNpZ25hbHMuICAqLworICB0ZF90aHJfZXZlbnRzX3QgdGlfZXZlbnRzOwkJLyogU2V0IG9mIGVuYWJsZWQgZXZlbnRzLiAgKi8KK30gdGRfdGhyaW5mb190OworCisKKworLyogUHJvdG90eXBlcyBmb3IgZXhwb3J0ZWQgbGlicmFyeSBmdW5jdGlvbnMuICAqLworCisvKiBJbml0aWFsaXplIHRoZSB0aHJlYWQgZGVidWcgc3VwcG9ydCBsaWJyYXJ5LiAgKi8KK2V4dGVybiB0ZF9lcnJfZSB0ZF9pbml0ICh2b2lkKTsKKworLyogSGlzdG9yaWNhbCByZWxpY3QuICBTaG91bGQgbm90IGJlIHVzZWQgYW55bW9yZS4gICovCitleHRlcm4gdGRfZXJyX2UgdGRfbG9nICh2b2lkKTsKKworLyogUmV0dXJuIGxpc3Qgb2Ygc3ltYm9scyB0aGUgbGlicmFyeSBjYW4gcmVxdWVzdC4gICovCitleHRlcm4gY29uc3QgY2hhciAqKnRkX3N5bWJvbF9saXN0ICh2b2lkKTsKKworLyogR2VuZXJhdGUgbmV3IHRocmVhZCBkZWJ1ZyBsaWJyYXJ5IGhhbmRsZSBmb3IgcHJvY2VzcyBQUy4gICovCitleHRlcm4gdGRfZXJyX2UgdGRfdGFfbmV3IChzdHJ1Y3QgcHNfcHJvY2hhbmRsZSAqX19wcywgdGRfdGhyYWdlbnRfdCAqKl9fdGEpOworCisvKiBGcmVlIHJlc291cmNlcyBhbGxvY2F0ZWQgZm9yIFRBLiAgKi8KK2V4dGVybiB0ZF9lcnJfZSB0ZF90YV9kZWxldGUgKHRkX3RocmFnZW50X3QgKl9fdGEpOworCisvKiBHZXQgbnVtYmVyIG9mIGN1cnJlbnRseSBydW5uaW5nIHRocmVhZHMgaW4gcHJvY2VzcyBhc3NvY2lhdGVkIHdpdGggVEEuICAqLworZXh0ZXJuIHRkX2Vycl9lIHRkX3RhX2dldF9udGhyZWFkcyAoY29uc3QgdGRfdGhyYWdlbnRfdCAqX190YSwgaW50ICpfX25wKTsKKworLyogUmV0dXJuIHByb2Nlc3MgaGFuZGxlIHBhc3NlZCBpbiBgdGRfdGFfbmV3JyBmb3IgcHJvY2VzcyBhc3NvY2lhdGVkIHdpdGgKKyAgIFRBLiAgKi8KK2V4dGVybiB0ZF9lcnJfZSB0ZF90YV9nZXRfcGggKGNvbnN0IHRkX3RocmFnZW50X3QgKl9fdGEsCisJCQkgICAgICBzdHJ1Y3QgcHNfcHJvY2hhbmRsZSAqKl9fcGgpOworCisvKiBNYXAgdGhyZWFkIGxpYnJhcnkgaGFuZGxlIFBUIHRvIHRocmVhZCBkZWJ1ZyBsaWJyYXJ5IGhhbmRsZSBmb3IgcHJvY2VzcworICAgYXNzb2NpYXRlZCB3aXRoIFRBIGFuZCBzdG9yZSByZXN1bHQgaW4gKlRILiAgKi8KK2V4dGVybiB0ZF9lcnJfZSB0ZF90YV9tYXBfaWQydGhyIChjb25zdCB0ZF90aHJhZ2VudF90ICpfX3RhLCBwdGhyZWFkX3QgX19wdCwKKwkJCQkgIHRkX3RocmhhbmRsZV90ICpfX3RoKTsKKworLyogTWFwIHByb2Nlc3MgSUQgTFdQSUQgdG8gdGhyZWFkIGRlYnVnIGxpYnJhcnkgaGFuZGxlIGZvciBwcm9jZXNzCisgICBhc3NvY2lhdGVkIHdpdGggVEEgYW5kIHN0b3JlIHJlc3VsdCBpbiAqVEguICAqLworZXh0ZXJuIHRkX2Vycl9lIHRkX3RhX21hcF9sd3AydGhyIChjb25zdCB0ZF90aHJhZ2VudF90ICpfX3RhLCBsd3BpZF90IF9fbHdwaWQsCisJCQkJICAgdGRfdGhyaGFuZGxlX3QgKl9fdGgpOworCisKKy8qIENhbGwgZm9yIGVhY2ggdGhyZWFkIGluIGEgcHJvY2VzcyBhc3NvY2lhdGVkIHdpdGggVEEgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uCisgICBDQUxMQkFDSy4gICovCitleHRlcm4gdGRfZXJyX2UgdGRfdGFfdGhyX2l0ZXIgKGNvbnN0IHRkX3RocmFnZW50X3QgKl9fdGEsCisJCQkJdGRfdGhyX2l0ZXJfZiAqX19jYWxsYmFjaywgdm9pZCAqX19jYmRhdGFfcCwKKwkJCQl0ZF90aHJfc3RhdGVfZSBfX3N0YXRlLCBpbnQgX190aV9wcmksCisJCQkJc2lnc2V0X3QgKl9fdGlfc2lnbWFza19wLAorCQkJCXVuc2lnbmVkIGludCBfX3RpX3VzZXJfZmxhZ3MpOworCisvKiBDYWxsIGZvciBlYWNoIGRlZmluZWQgdGhyZWFkIGxvY2FsIGRhdGEgZW50cnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIEtJLiAgKi8KK2V4dGVybiB0ZF9lcnJfZSB0ZF90YV90c2RfaXRlciAoY29uc3QgdGRfdGhyYWdlbnRfdCAqX190YSwgdGRfa2V5X2l0ZXJfZiAqX19raSwKKwkJCQl2b2lkICpfX3ApOworCisKKy8qIEdldCBldmVudCBhZGRyZXNzIGZvciBFVkVOVC4gICovCitleHRlcm4gdGRfZXJyX2UgdGRfdGFfZXZlbnRfYWRkciAoY29uc3QgdGRfdGhyYWdlbnRfdCAqX190YSwKKwkJCQkgIHRkX2V2ZW50X2UgX19ldmVudCwgdGRfbm90aWZ5X3QgKl9fcHRyKTsKKworLyogRW5hYmxlIEVWRU5UIGluIGdsb2JhbCBtYXNrLiAgKi8KK2V4dGVybiB0ZF9lcnJfZSB0ZF90YV9zZXRfZXZlbnQgKGNvbnN0IHRkX3RocmFnZW50X3QgKl9fdGEsCisJCQkJIHRkX3Rocl9ldmVudHNfdCAqX19ldmVudCk7CisKKy8qIERpc2FibGUgRVZFTlQgaW4gZ2xvYmFsIG1hc2suICAqLworZXh0ZXJuIHRkX2Vycl9lIHRkX3RhX2NsZWFyX2V2ZW50IChjb25zdCB0ZF90aHJhZ2VudF90ICpfX3RhLAorCQkJCSAgIHRkX3Rocl9ldmVudHNfdCAqX19ldmVudCk7CisKKy8qIFJldHVybiBpbmZvcm1hdGlvbiBhYm91dCBsYXN0IGV2ZW50LiAgKi8KK2V4dGVybiB0ZF9lcnJfZSB0ZF90YV9ldmVudF9nZXRtc2cgKGNvbnN0IHRkX3RocmFnZW50X3QgKl9fdGEsCisJCQkJICAgIHRkX2V2ZW50X21zZ190ICpfX21zZyk7CisKKworLyogU2V0IHN1Z2dlc3RlZCBjb25jdXJyZW5jeSBsZXZlbCBmb3IgcHJvY2VzcyBhc3NvY2lhdGVkIHdpdGggVEEuICAqLworZXh0ZXJuIHRkX2Vycl9lIHRkX3RhX3NldGNvbmN1cnJlbmN5IChjb25zdCB0ZF90aHJhZ2VudF90ICpfX3RhLCBpbnQgX19sZXZlbCk7CisKKworLyogRW5hYmxlIGNvbGxlY3Rpbmcgc3RhdGlzdGljcyBmb3IgcHJvY2VzcyBhc3NvY2lhdGVkIHdpdGggVEEuICAqLworZXh0ZXJuIHRkX2Vycl9lIHRkX3RhX2VuYWJsZV9zdGF0cyAoY29uc3QgdGRfdGhyYWdlbnRfdCAqX190YSwgaW50IF9fZW5hYmxlKTsKKworLyogUmVzZXQgc3RhdGlzdGljcy4gICovCitleHRlcm4gdGRfZXJyX2UgdGRfdGFfcmVzZXRfc3RhdHMgKGNvbnN0IHRkX3RocmFnZW50X3QgKl9fdGEpOworCisvKiBSZXRyaWV2ZSBzdGF0aXN0aWNzIGZyb20gcHJvY2VzcyBhc3NvY2lhdGVkIHdpdGggVEEuICAqLworZXh0ZXJuIHRkX2Vycl9lIHRkX3RhX2dldF9zdGF0cyAoY29uc3QgdGRfdGhyYWdlbnRfdCAqX190YSwKKwkJCQkgdGRfdGFfc3RhdHNfdCAqX19zdGF0c3ApOworCisKKy8qIFZhbGlkYXRlIHRoYXQgVEggaXMgYSB0aHJlYWQgaGFuZGxlLiAgKi8KK2V4dGVybiB0ZF9lcnJfZSB0ZF90aHJfdmFsaWRhdGUgKGNvbnN0IHRkX3RocmhhbmRsZV90ICpfX3RoKTsKKworLyogUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRocmVhZCBUSC4gICovCitleHRlcm4gdGRfZXJyX2UgdGRfdGhyX2dldF9pbmZvIChjb25zdCB0ZF90aHJoYW5kbGVfdCAqX190aCwKKwkJCQkgdGRfdGhyaW5mb190ICpfX2luZm9wKTsKKworLyogUmV0cmlldmUgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgY29udGVudHMgb2YgcHJvY2VzcyBydW5uaW5nIHRocmVhZCBUSC4gICovCitleHRlcm4gdGRfZXJyX2UgdGRfdGhyX2dldGZwcmVncyAoY29uc3QgdGRfdGhyaGFuZGxlX3QgKl9fdGgsCisJCQkJICBwcmZwcmVnc2V0X3QgKl9fcmVnc2V0KTsKKworLyogUmV0cmlldmUgZ2VuZXJhbCByZWdpc3RlciBjb250ZW50cyBvZiBwcm9jZXNzIHJ1bm5pbmcgdGhyZWFkIFRILiAgKi8KK2V4dGVybiB0ZF9lcnJfZSB0ZF90aHJfZ2V0Z3JlZ3MgKGNvbnN0IHRkX3RocmhhbmRsZV90ICpfX3RoLAorCQkJCSBwcmdyZWdzZXRfdCBfX2dyZWdzKTsKKworLyogUmV0cmlldmUgZXh0ZW5kZWQgcmVnaXN0ZXIgY29udGVudHMgb2YgcHJvY2VzcyBydW5uaW5nIHRocmVhZCBUSC4gICovCitleHRlcm4gdGRfZXJyX2UgdGRfdGhyX2dldHhyZWdzIChjb25zdCB0ZF90aHJoYW5kbGVfdCAqX190aCwgdm9pZCAqX194cmVncyk7CisKKy8qIEdldCBzaXplIG9mIGV4dGVuZGVkIHJlZ2lzdGVyIHNldCBvZiBwcm9jZXNzIHJ1bm5pbmcgdGhyZWFkIFRILiAgKi8KK2V4dGVybiB0ZF9lcnJfZSB0ZF90aHJfZ2V0eHJlZ3NpemUgKGNvbnN0IHRkX3RocmhhbmRsZV90ICpfX3RoLCBpbnQgKl9fc2l6ZXApOworCisvKiBTZXQgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgY29udGVudHMgb2YgcHJvY2VzcyBydW5uaW5nIHRocmVhZCBUSC4gICovCitleHRlcm4gdGRfZXJyX2UgdGRfdGhyX3NldGZwcmVncyAoY29uc3QgdGRfdGhyaGFuZGxlX3QgKl9fdGgsCisJCQkJICBjb25zdCBwcmZwcmVnc2V0X3QgKl9fZnByZWdzKTsKKworLyogU2V0IGdlbmVyYWwgcmVnaXN0ZXIgY29udGVudHMgb2YgcHJvY2VzcyBydW5uaW5nIHRocmVhZCBUSC4gICovCitleHRlcm4gdGRfZXJyX2UgdGRfdGhyX3NldGdyZWdzIChjb25zdCB0ZF90aHJoYW5kbGVfdCAqX190aCwKKwkJCQkgcHJncmVnc2V0X3QgX19ncmVncyk7CisKKy8qIFNldCBleHRlbmRlZCByZWdpc3RlciBjb250ZW50cyBvZiBwcm9jZXNzIHJ1bm5pbmcgdGhyZWFkIFRILiAgKi8KK2V4dGVybiB0ZF9lcnJfZSB0ZF90aHJfc2V0eHJlZ3MgKGNvbnN0IHRkX3RocmhhbmRsZV90ICpfX3RoLAorCQkJCSBjb25zdCB2b2lkICpfX2FkZHIpOworCisKKy8qIEdldCBhZGRyZXNzIG9mIHRoZSBnaXZlbiBtb2R1bGUncyBUTFMgc3RvcmFnZSBhcmVhIGZvciB0aGUgZ2l2ZW4gdGhyZWFkLiAgKi8KK2V4dGVybiB0ZF9lcnJfZSB0ZF90aHJfdGxzYmFzZSAoY29uc3QgdGRfdGhyaGFuZGxlX3QgKl9fdGgsCisJCQkJdW5zaWduZWQgbG9uZyBpbnQgX19tb2RpZCwKKwkJCQlwc2FkZHJfdCAqX19iYXNlKTsKKworLyogR2V0IGFkZHJlc3Mgb2YgdGhyZWFkIGxvY2FsIHZhcmlhYmxlLiAgKi8KK2V4dGVybiB0ZF9lcnJfZSB0ZF90aHJfdGxzX2dldF9hZGRyIChjb25zdCB0ZF90aHJoYW5kbGVfdCAqX190aCwKKwkJCQkgICAgIHBzYWRkcl90IF9fbWFwX2FkZHJlc3MsIHNpemVfdCBfX29mZnNldCwKKwkJCQkgICAgIHBzYWRkcl90ICpfX2FkZHJlc3MpOworCisKKy8qIEVuYWJsZSByZXBvcnRpbmcgZm9yIEVWRU5UIGZvciB0aHJlYWQgVEguICAqLworZXh0ZXJuIHRkX2Vycl9lIHRkX3Rocl9ldmVudF9lbmFibGUgKGNvbnN0IHRkX3RocmhhbmRsZV90ICpfX3RoLCBpbnQgX19ldmVudCk7CisKKy8qIEVuYWJsZSBFVkVOVCBmb3IgdGhyZWFkIFRILiAgKi8KK2V4dGVybiB0ZF9lcnJfZSB0ZF90aHJfc2V0X2V2ZW50IChjb25zdCB0ZF90aHJoYW5kbGVfdCAqX190aCwKKwkJCQkgIHRkX3Rocl9ldmVudHNfdCAqX19ldmVudCk7CisKKy8qIERpc2FibGUgRVZFTlQgZm9yIHRocmVhZCBUSC4gICovCitleHRlcm4gdGRfZXJyX2UgdGRfdGhyX2NsZWFyX2V2ZW50IChjb25zdCB0ZF90aHJoYW5kbGVfdCAqX190aCwKKwkJCQkgICAgdGRfdGhyX2V2ZW50c190ICpfX2V2ZW50KTsKKworLyogR2V0IGV2ZW50IG1lc3NhZ2UgZm9yIHRocmVhZCBUSC4gICovCitleHRlcm4gdGRfZXJyX2UgdGRfdGhyX2V2ZW50X2dldG1zZyAoY29uc3QgdGRfdGhyaGFuZGxlX3QgKl9fdGgsCisJCQkJICAgICB0ZF9ldmVudF9tc2dfdCAqX19tc2cpOworCisKKy8qIFNldCBwcmlvcml0eSBvZiB0aHJlYWQgVEguICAqLworZXh0ZXJuIHRkX2Vycl9lIHRkX3Rocl9zZXRwcmlvIChjb25zdCB0ZF90aHJoYW5kbGVfdCAqX190aCwgaW50IF9fcHJpbyk7CisKKworLyogU2V0IHBlbmRpbmcgc2lnbmFscyBmb3IgdGhyZWFkIFRILiAgKi8KK2V4dGVybiB0ZF9lcnJfZSB0ZF90aHJfc2V0c2lncGVuZGluZyAoY29uc3QgdGRfdGhyaGFuZGxlX3QgKl9fdGgsCisJCQkJICAgICAgdW5zaWduZWQgY2hhciBfX24sIGNvbnN0IHNpZ3NldF90ICpfX3NzKTsKKworLyogU2V0IHNpZ25hbCBtYXNrIGZvciB0aHJlYWQgVEguICAqLworZXh0ZXJuIHRkX2Vycl9lIHRkX3Rocl9zaWdzZXRtYXNrIChjb25zdCB0ZF90aHJoYW5kbGVfdCAqX190aCwKKwkJCQkgICBjb25zdCBzaWdzZXRfdCAqX19zcyk7CisKKworLyogUmV0dXJuIHRocmVhZCBsb2NhbCBkYXRhIGFzc29jaWF0ZWQgd2l0aCBrZXkgVEsgaW4gdGhyZWFkIFRILiAgKi8KK2V4dGVybiB0ZF9lcnJfZSB0ZF90aHJfdHNkIChjb25zdCB0ZF90aHJoYW5kbGVfdCAqX190aCwKKwkJCSAgICBjb25zdCB0aHJlYWRfa2V5X3QgX190aywgdm9pZCAqKl9fZGF0YSk7CisKKworLyogU3VzcGVuZCBleGVjdXRpb24gb2YgdGhyZWFkIFRILiAgKi8KK2V4dGVybiB0ZF9lcnJfZSB0ZF90aHJfZGJzdXNwZW5kIChjb25zdCB0ZF90aHJoYW5kbGVfdCAqX190aCk7CisKKy8qIFJlc3VtZSBleGVjdXRpb24gb2YgdGhyZWFkIFRILiAgKi8KK2V4dGVybiB0ZF9lcnJfZSB0ZF90aHJfZGJyZXN1bWUgKGNvbnN0IHRkX3RocmhhbmRsZV90ICpfX3RoKTsKKworI2VuZGlmCS8qIHRocmVhZF9kYi5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvdGltZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3RpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzhmNzlkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3RpbWUuaApAQCAtMCwwICsxLDQyMCBAQAorLyogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTksMjAwMCwyMDAxLDIwMDIsMjAwMywyMDA2CisJRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qCisgKglJU08gQzk5IFN0YW5kYXJkOiA3LjIzIERhdGUgYW5kIHRpbWUJPHRpbWUuaD4KKyAqLworCisjaWZuZGVmCV9USU1FX0gKKworI2lmICghIGRlZmluZWQgX19uZWVkX3RpbWVfdCAmJiAhZGVmaW5lZCBfX25lZWRfY2xvY2tfdCAmJiBcCisgICAgICEgZGVmaW5lZCBfX25lZWRfdGltZXNwZWMpCisjIGRlZmluZSBfVElNRV9ICTEKKyMgaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworX19CRUdJTl9ERUNMUworCisjZW5kaWYKKworI2lmZGVmCV9USU1FX0gKKy8qIEdldCBzaXplX3QgYW5kIE5VTEwgZnJvbSA8c3RkZGVmLmg+LiAgKi8KKyMgZGVmaW5lIF9fbmVlZF9zaXplX3QKKyMgZGVmaW5lIF9fbmVlZF9OVUxMCisjIGluY2x1ZGUgPHN0ZGRlZi5oPgorCisvKiBUaGlzIGRlZmluZXMgQ0xPQ0tTX1BFUl9TRUMsIHdoaWNoIGlzIHRoZSBudW1iZXIgb2YgcHJvY2Vzc29yIGNsb2NrCisgICB0aWNrcyBwZXIgc2Vjb25kLiAgKi8KKyMgaW5jbHVkZSA8Yml0cy90aW1lLmg+CisKKy8qIFRoaXMgaXMgdGhlIG9ic29sZXRlIFBPU0lYLjEtMTk4OCBuYW1lIGZvciB0aGUgc2FtZSBjb25zdGFudC4gICovCisjIGlmICFkZWZpbmVkIF9fU1RSSUNUX0FOU0lfXyAmJiAhZGVmaW5lZCBfX1VTRV9YT1BFTjJLCisjICBpZm5kZWYgQ0xLX1RDSworIyAgIGRlZmluZSBDTEtfVENLCUNMT0NLU19QRVJfU0VDCisjICBlbmRpZgorIyBlbmRpZgorCisjZW5kaWYgLyogPHRpbWUuaD4gaW5jbHVkZWQuICAqLworCisjaWYgIWRlZmluZWQgX19jbG9ja190X2RlZmluZWQgJiYgKGRlZmluZWQgX1RJTUVfSCB8fCBkZWZpbmVkIF9fbmVlZF9jbG9ja190KQorIyBkZWZpbmUgX19jbG9ja190X2RlZmluZWQJMQorCisjIGluY2x1ZGUgPGJpdHMvdHlwZXMuaD4KKworX19CRUdJTl9OQU1FU1BBQ0VfU1RECisvKiBSZXR1cm5lZCBieSBgY2xvY2snLiAgKi8KK3R5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CitfX0VORF9OQU1FU1BBQ0VfU1RECisjaWYgZGVmaW5lZCBfX1VTRV9YT1BFTiB8fCBkZWZpbmVkIF9fVVNFX1BPU0lYIHx8IGRlZmluZWQgX19VU0VfTUlTQworX19VU0lOR19OQU1FU1BBQ0VfU1REKGNsb2NrX3QpCisjZW5kaWYKKworI2VuZGlmIC8qIGNsb2NrX3Qgbm90IGRlZmluZWQgYW5kIDx0aW1lLmg+IG9yIG5lZWQgY2xvY2tfdC4gICovCisjdW5kZWYJX19uZWVkX2Nsb2NrX3QKKworI2lmICFkZWZpbmVkIF9fdGltZV90X2RlZmluZWQgJiYgKGRlZmluZWQgX1RJTUVfSCB8fCBkZWZpbmVkIF9fbmVlZF90aW1lX3QpCisjIGRlZmluZSBfX3RpbWVfdF9kZWZpbmVkCTEKKworIyBpbmNsdWRlIDxiaXRzL3R5cGVzLmg+CisKK19fQkVHSU5fTkFNRVNQQUNFX1NURAorLyogUmV0dXJuZWQgYnkgYHRpbWUnLiAgKi8KK3R5cGVkZWYgX190aW1lX3QgdGltZV90OworX19FTkRfTkFNRVNQQUNFX1NURAorI2lmIGRlZmluZWQgX19VU0VfUE9TSVggfHwgZGVmaW5lZCBfX1VTRV9NSVNDIHx8IGRlZmluZWQgX19VU0VfU1ZJRAorX19VU0lOR19OQU1FU1BBQ0VfU1REKHRpbWVfdCkKKyNlbmRpZgorCisjZW5kaWYgLyogdGltZV90IG5vdCBkZWZpbmVkIGFuZCA8dGltZS5oPiBvciBuZWVkIHRpbWVfdC4gICovCisjdW5kZWYJX19uZWVkX3RpbWVfdAorCisjaWYgIWRlZmluZWQgX19jbG9ja2lkX3RfZGVmaW5lZCAmJiBcCisgICAoKGRlZmluZWQgX1RJTUVfSCAmJiBkZWZpbmVkIF9fVVNFX1BPU0lYMTk5MzA5KSB8fCBkZWZpbmVkIF9fbmVlZF9jbG9ja2lkX3QpCisjIGRlZmluZSBfX2Nsb2NraWRfdF9kZWZpbmVkCTEKKworIyBpbmNsdWRlIDxiaXRzL3R5cGVzLmg+CisKKy8qIENsb2NrIElEIHVzZWQgaW4gY2xvY2sgYW5kIHRpbWVyIGZ1bmN0aW9ucy4gICovCit0eXBlZGVmIF9fY2xvY2tpZF90IGNsb2NraWRfdDsKKworI2VuZGlmIC8qIGNsb2NraWRfdCBub3QgZGVmaW5lZCBhbmQgPHRpbWUuaD4gb3IgbmVlZCBjbG9ja2lkX3QuICAqLworI3VuZGVmCV9fY2xvY2tpZF90aW1lX3QKKworI2lmICFkZWZpbmVkIF9fdGltZXJfdF9kZWZpbmVkICYmIFwKKyAgICAoKGRlZmluZWQgX1RJTUVfSCAmJiBkZWZpbmVkIF9fVVNFX1BPU0lYMTk5MzA5KSB8fCBkZWZpbmVkIF9fbmVlZF90aW1lcl90KQorIyBkZWZpbmUgX190aW1lcl90X2RlZmluZWQJMQorCisjIGluY2x1ZGUgPGJpdHMvdHlwZXMuaD4KKworLyogVGltZXIgSUQgcmV0dXJuZWQgYnkgYHRpbWVyX2NyZWF0ZScuICAqLwordHlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKKworI2VuZGlmIC8qIHRpbWVyX3Qgbm90IGRlZmluZWQgYW5kIDx0aW1lLmg+IG9yIG5lZWQgdGltZXJfdC4gICovCisjdW5kZWYJX19uZWVkX3RpbWVyX3QKKworCisjaWYgIWRlZmluZWQgX190aW1lc3BlY19kZWZpbmVkICYmCQkJCVwKKyAgICAoKGRlZmluZWQgX1RJTUVfSCAmJgkJCQkJXAorICAgICAgKGRlZmluZWQgX19VU0VfUE9TSVgxOTkzMDkgfHwgZGVmaW5lZCBfX1VTRV9NSVNDKSkgfHwJXAorICAgICAgZGVmaW5lZCBfX25lZWRfdGltZXNwZWMpCisjIGRlZmluZSBfX3RpbWVzcGVjX2RlZmluZWQJMQorCisjIGluY2x1ZGUgPGJpdHMvdHlwZXMuaD4JLyogVGhpcyBkZWZpbmVzIF9fdGltZV90IGZvciB1cy4gICovCisKKy8qIFBPU0lYLjFiIHN0cnVjdHVyZSBmb3IgYSB0aW1lIHZhbHVlLiAgVGhpcyBpcyBsaWtlIGEgYHN0cnVjdCB0aW1ldmFsJyBidXQKKyAgIGhhcyBuYW5vc2Vjb25kcyBpbnN0ZWFkIG9mIG1pY3Jvc2Vjb25kcy4gICovCitzdHJ1Y3QgdGltZXNwZWMKKyAgeworICAgIF9fdGltZV90IHR2X3NlYzsJCS8qIFNlY29uZHMuICAqLworICAgIGxvbmcgaW50IHR2X25zZWM7CQkvKiBOYW5vc2Vjb25kcy4gICovCisgIH07CisKKyNlbmRpZiAvKiB0aW1lc3BlYyBub3QgZGVmaW5lZCBhbmQgPHRpbWUuaD4gb3IgbmVlZCB0aW1lc3BlYy4gICovCisjdW5kZWYJX19uZWVkX3RpbWVzcGVjCisKKworI2lmZGVmCV9USU1FX0gKK19fQkVHSU5fTkFNRVNQQUNFX1NURAorLyogVXNlZCBieSBvdGhlciB0aW1lIGZ1bmN0aW9ucy4gICovCitzdHJ1Y3QgdG0KK3sKKyAgaW50IHRtX3NlYzsJCQkvKiBTZWNvbmRzLglbMC02MF0gKDEgbGVhcCBzZWNvbmQpICovCisgIGludCB0bV9taW47CQkJLyogTWludXRlcy4JWzAtNTldICovCisgIGludCB0bV9ob3VyOwkJCS8qIEhvdXJzLglbMC0yM10gKi8KKyAgaW50IHRtX21kYXk7CQkJLyogRGF5LgkJWzEtMzFdICovCisgIGludCB0bV9tb247CQkJLyogTW9udGguCVswLTExXSAqLworICBpbnQgdG1feWVhcjsJCQkvKiBZZWFyCS0gMTkwMC4gICovCisgIGludCB0bV93ZGF5OwkJCS8qIERheSBvZiB3ZWVrLglbMC02XSAqLworICBpbnQgdG1feWRheTsJCQkvKiBEYXlzIGluIHllYXIuWzAtMzY1XQkqLworICBpbnQgdG1faXNkc3Q7CQkJLyogRFNULgkJWy0xLzAvMV0qLworCisjaWZkZWYJX19VU0VfQlNECisgIGxvbmcgaW50IHRtX2dtdG9mZjsJCS8qIFNlY29uZHMgZWFzdCBvZiBVVEMuICAqLworICBfX2NvbnN0IGNoYXIgKnRtX3pvbmU7CS8qIFRpbWV6b25lIGFiYnJldmlhdGlvbi4gICovCisjZWxzZQorICBsb25nIGludCBfX3RtX2dtdG9mZjsJCS8qIFNlY29uZHMgZWFzdCBvZiBVVEMuICAqLworICBfX2NvbnN0IGNoYXIgKl9fdG1fem9uZTsJLyogVGltZXpvbmUgYWJicmV2aWF0aW9uLiAgKi8KKyNlbmRpZgorfTsKK19fRU5EX05BTUVTUEFDRV9TVEQKKyNpZiBkZWZpbmVkIF9fVVNFX1hPUEVOIHx8IGRlZmluZWQgX19VU0VfUE9TSVggfHwgZGVmaW5lZCBfX1VTRV9NSVNDCitfX1VTSU5HX05BTUVTUEFDRV9TVEQodG0pCisjZW5kaWYKKworCisjaWZkZWYgX19VU0VfUE9TSVgxOTkzMDkKKy8qIFBPU0lYLjFiIHN0cnVjdHVyZSBmb3IgdGltZXIgc3RhcnQgdmFsdWVzIGFuZCBpbnRlcnZhbHMuICAqLworc3RydWN0IGl0aW1lcnNwZWMKKyAgeworICAgIHN0cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKKyAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7CisgIH07CisKKy8qIFdlIGNhbiB1c2UgYSBzaW1wbGUgZm9yd2FyZCBkZWNsYXJhdGlvbi4gICovCitzdHJ1Y3Qgc2lnZXZlbnQ7CisKKyNlbmRpZgkvKiBQT1NJWC4xYiAqLworCisjaWZkZWYgX19VU0VfWE9QRU4ySworIyBpZm5kZWYgX19waWRfdF9kZWZpbmVkCit0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CisjICBkZWZpbmUgX19waWRfdF9kZWZpbmVkCisjIGVuZGlmCisjZW5kaWYKKworCitfX0JFR0lOX05BTUVTUEFDRV9TVEQKKy8qIFRpbWUgdXNlZCBieSB0aGUgcHJvZ3JhbSBzbyBmYXIgKHVzZXIgdGltZSArIHN5c3RlbSB0aW1lKS4KKyAgIFRoZSByZXN1bHQgLyBDTE9DS1NfUEVSX1NFQ09ORCBpcyBwcm9ncmFtIHRpbWUgaW4gc2Vjb25kcy4gICovCitleHRlcm4gY2xvY2tfdCBjbG9jayAodm9pZCkgX19USFJPVzsKKworLyogUmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgYW5kIHB1dCBpdCBpbiAqVElNRVIgaWYgVElNRVIgaXMgbm90IE5VTEwuICAqLworZXh0ZXJuIHRpbWVfdCB0aW1lICh0aW1lX3QgKl9fdGltZXIpIF9fVEhST1c7CisKKy8qIFJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFRJTUUxIGFuZCBUSU1FMC4gICovCitleHRlcm4gZG91YmxlIGRpZmZ0aW1lICh0aW1lX3QgX190aW1lMSwgdGltZV90IF9fdGltZTApCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOworCisvKiBSZXR1cm4gdGhlIGB0aW1lX3QnIHJlcHJlc2VudGF0aW9uIG9mIFRQIGFuZCBub3JtYWxpemUgVFAuICAqLworZXh0ZXJuIHRpbWVfdCBta3RpbWUgKHN0cnVjdCB0bSAqX190cCkgX19USFJPVzsKKworCisvKiBGb3JtYXQgVFAgaW50byBTIGFjY29yZGluZyB0byBGT1JNQVQuCisgICBXcml0ZSBubyBtb3JlIHRoYW4gTUFYU0laRSBjaGFyYWN0ZXJzIGFuZCByZXR1cm4gdGhlIG51bWJlcgorICAgb2YgY2hhcmFjdGVycyB3cml0dGVuLCBvciAwIGlmIGl0IHdvdWxkIGV4Y2VlZCBNQVhTSVpFLiAgKi8KK2V4dGVybiBzaXplX3Qgc3RyZnRpbWUgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAorCQkJX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAorCQkJX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgX19USFJPVzsKK19fRU5EX05BTUVTUEFDRV9TVEQKKworIyBpZmRlZiBfX1VTRV9YT1BFTgorLyogUGFyc2UgUyBhY2NvcmRpbmcgdG8gRk9STUFUIGFuZCBzdG9yZSBiaW5hcnkgdGltZSBpbmZvcm1hdGlvbiBpbiBUUC4KKyAgIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBwb2ludGVyIHRvIHRoZSBmaXJzdCB1bnBhcnNlZCBjaGFyYWN0ZXIgaW4gUy4gICovCitleHRlcm4gY2hhciAqc3RycHRpbWUgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCisJCSAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIHN0cnVjdCB0bSAqX190cCkKKyAgICAgX19USFJPVzsKKyMgZW5kaWYKKworIyBpZmRlZiBfX1VTRV9HTlUKKy8qIFNpbWlsYXIgdG8gdGhlIHR3byBmdW5jdGlvbnMgYWJvdmUgYnV0IHRha2UgdGhlIGluZm9ybWF0aW9uIGZyb20KKyAgIHRoZSBwcm92aWRlZCBsb2NhbGUgYW5kIG5vdCB0aGUgZ2xvYmFsIGxvY2FsZS4gICovCisjIGluY2x1ZGUgPHhsb2NhbGUuaD4KKworZXh0ZXJuIHNpemVfdCBzdHJmdGltZV9sIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKKwkJCSAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAorCQkJICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAorCQkJICBfX2xvY2FsZV90IF9fbG9jKSBfX1RIUk9XOworCitleHRlcm4gY2hhciAqc3RycHRpbWVfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKKwkJCSBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIHN0cnVjdCB0bSAqX190cCwKKwkJCSBfX2xvY2FsZV90IF9fbG9jKSBfX1RIUk9XOworIyBlbmRpZgorCisKK19fQkVHSU5fTkFNRVNQQUNFX1NURAorLyogUmV0dXJuIHRoZSBgc3RydWN0IHRtJyByZXByZXNlbnRhdGlvbiBvZiAqVElNRVIKKyAgIGluIFVuaXZlcnNhbCBDb29yZGluYXRlZCBUaW1lIChha2EgR3JlZW53aWNoIE1lYW4gVGltZSkuICAqLworZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgX19USFJPVzsKKworLyogUmV0dXJuIHRoZSBgc3RydWN0IHRtJyByZXByZXNlbnRhdGlvbgorICAgb2YgKlRJTUVSIGluIHRoZSBsb2NhbCB0aW1lem9uZS4gICovCitleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSBfX1RIUk9XOworX19FTkRfTkFNRVNQQUNFX1NURAorCisjIGlmIGRlZmluZWQgX19VU0VfUE9TSVggfHwgZGVmaW5lZCBfX1VTRV9NSVNDCisvKiBSZXR1cm4gdGhlIGBzdHJ1Y3QgdG0nIHJlcHJlc2VudGF0aW9uIG9mICpUSU1FUiBpbiBVVEMsCisgICB1c2luZyAqVFAgdG8gc3RvcmUgdGhlIHJlc3VsdC4gICovCitleHRlcm4gc3RydWN0IHRtICpnbXRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKKwkJCSAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgX19USFJPVzsKKworLyogUmV0dXJuIHRoZSBgc3RydWN0IHRtJyByZXByZXNlbnRhdGlvbiBvZiAqVElNRVIgaW4gbG9jYWwgdGltZSwKKyAgIHVzaW5nICpUUCB0byBzdG9yZSB0aGUgcmVzdWx0LiAgKi8KK2V4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAorCQkJICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSBfX1RIUk9XOworIyBlbmRpZgkvKiBQT1NJWCBvciBtaXNjICovCisKK19fQkVHSU5fTkFNRVNQQUNFX1NURAorLyogUmV0dXJuIGEgc3RyaW5nIG9mIHRoZSBmb3JtICJEYXkgTW9uIGRkIGhoOm1tOnNzIHl5eXlcbiIKKyAgIHRoYXQgaXMgdGhlIHJlcHJlc2VudGF0aW9uIG9mIFRQIGluIHRoaXMgZm9ybWF0LiAgKi8KK2V4dGVybiBjaGFyICphc2N0aW1lIChfX2NvbnN0IHN0cnVjdCB0bSAqX190cCkgX19USFJPVzsKKworLyogRXF1aXZhbGVudCB0byBgYXNjdGltZSAobG9jYWx0aW1lICh0aW1lcikpJy4gICovCitleHRlcm4gY2hhciAqY3RpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSBfX1RIUk9XOworX19FTkRfTkFNRVNQQUNFX1NURAorCisjIGlmIGRlZmluZWQgX19VU0VfUE9TSVggfHwgZGVmaW5lZCBfX1VTRV9NSVNDCisvKiBSZWVudHJhbnQgdmVyc2lvbnMgb2YgdGhlIGFib3ZlIGZ1bmN0aW9ucy4gICovCisKKy8qIFJldHVybiBpbiBCVUYgYSBzdHJpbmcgb2YgdGhlIGZvcm0gIkRheSBNb24gZGQgaGg6bW06c3MgeXl5eVxuIgorICAgdGhhdCBpcyB0aGUgcmVwcmVzZW50YXRpb24gb2YgVFAgaW4gdGhpcyBmb3JtYXQuICAqLworZXh0ZXJuIGNoYXIgKmFzY3RpbWVfciAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCwKKwkJCWNoYXIgKl9fcmVzdHJpY3QgX19idWYpIF9fVEhST1c7CisKKy8qIEVxdWl2YWxlbnQgdG8gYGFzY3RpbWVfciAobG9jYWx0aW1lX3IgKHRpbWVyLCAqVE1QKiksIGJ1ZiknLiAgKi8KK2V4dGVybiBjaGFyICpjdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAorCQkgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSBfX1RIUk9XOworIyBlbmRpZgkvKiBQT1NJWCBvciBtaXNjICovCisKKworLyogRGVmaW5lZCBpbiBsb2NhbHRpbWUuYy4gICovCitleHRlcm4gY2hhciAqX190em5hbWVbMl07CS8qIEN1cnJlbnQgdGltZXpvbmUgbmFtZXMuICAqLworZXh0ZXJuIGludCBfX2RheWxpZ2h0OwkJLyogSWYgZGF5bGlnaHQtc2F2aW5nIHRpbWUgaXMgZXZlciBpbiB1c2UuICAqLworZXh0ZXJuIGxvbmcgaW50IF9fdGltZXpvbmU7CS8qIFNlY29uZHMgd2VzdCBvZiBVVEMuICAqLworCisKKyMgaWZkZWYJX19VU0VfUE9TSVgKKy8qIFNhbWUgYXMgYWJvdmUuICAqLworZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKKworLyogU2V0IHRpbWUgY29udmVyc2lvbiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBUWiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgIElmIFRaIGlzIG5vdCBkZWZpbmVkLCBhIGxvY2FsZS1kZXBlbmRlbnQgZGVmYXVsdCBpcyB1c2VkLiAgKi8KK2V4dGVybiB2b2lkIHR6c2V0ICh2b2lkKSBfX1RIUk9XOworIyBlbmRpZgorCisjIGlmIGRlZmluZWQgX19VU0VfU1ZJRCB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOCitleHRlcm4gaW50IGRheWxpZ2h0OworZXh0ZXJuIGxvbmcgaW50IHRpbWV6b25lOworIyBlbmRpZgorCisjIGlmZGVmIF9fVVNFX1NWSUQKKy8qIFNldCB0aGUgc3lzdGVtIHRpbWUgdG8gKldIRU4uCisgICBUaGlzIGNhbGwgaXMgcmVzdHJpY3RlZCB0byB0aGUgc3VwZXJ1c2VyLiAgKi8KK2V4dGVybiBpbnQgc3RpbWUgKF9fY29uc3QgdGltZV90ICpfX3doZW4pIF9fVEhST1c7CisjIGVuZGlmCisKKworLyogTm9uemVybyBpZiBZRUFSIGlzIGEgbGVhcCB5ZWFyIChldmVyeSA0IHllYXJzLAorICAgZXhjZXB0IGV2ZXJ5IDEwMHRoIGlzbid0LCBhbmQgZXZlcnkgNDAwdGggaXMpLiAgKi8KKyMgZGVmaW5lIF9faXNsZWFwKHllYXIpCVwKKyAgKCh5ZWFyKSAlIDQgPT0gMCAmJiAoKHllYXIpICUgMTAwICE9IDAgfHwgKHllYXIpICUgNDAwID09IDApKQorCisKKyMgaWZkZWYgX19VU0VfTUlTQworLyogTWlzY2VsbGFuZW91cyBmdW5jdGlvbnMgbWFueSBVbmljZXMgaW5oZXJpdGVkIGZyb20gdGhlIHB1YmxpYyBkb21haW4KKyAgIGxvY2FsdGltZSBwYWNrYWdlLiAgVGhlc2UgYXJlIGluY2x1ZGVkIG9ubHkgZm9yIGNvbXBhdGliaWxpdHkuICAqLworCisvKiBMaWtlIGBta3RpbWUnLCBidXQgZm9yIFRQIHJlcHJlc2VudHMgVW5pdmVyc2FsIFRpbWUsIG5vdCBsb2NhbCB0aW1lLiAgKi8KK2V4dGVybiB0aW1lX3QgdGltZWdtIChzdHJ1Y3QgdG0gKl9fdHApIF9fVEhST1c7CisKKy8qIEFub3RoZXIgbmFtZSBmb3IgYG1rdGltZScuICAqLworZXh0ZXJuIHRpbWVfdCB0aW1lbG9jYWwgKHN0cnVjdCB0bSAqX190cCkgX19USFJPVzsKKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgZGF5cyBpbiBZRUFSLiAgKi8KK2V4dGVybiBpbnQgZHlzaXplIChpbnQgX195ZWFyKSBfX1RIUk9XICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CisjIGVuZGlmCisKKworIyBpZmRlZiBfX1VTRV9QT1NJWDE5OTMwOQorLyogUGF1c2UgZXhlY3V0aW9uIGZvciBhIG51bWJlciBvZiBuYW5vc2Vjb25kcy4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aAorICAgX19USFJPVy4gICovCitleHRlcm4gaW50IG5hbm9zbGVlcCAoX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3RpbWUsCisJCSAgICAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW1haW5pbmcpOworCisKKy8qIEdldCByZXNvbHV0aW9uIG9mIGNsb2NrIENMT0NLX0lELiAgKi8KK2V4dGVybiBpbnQgY2xvY2tfZ2V0cmVzIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3JlcykgX19USFJPVzsKKworLyogR2V0IGN1cnJlbnQgdmFsdWUgb2YgY2xvY2sgQ0xPQ0tfSUQgYW5kIHN0b3JlIGl0IGluIFRQLiAgKi8KK2V4dGVybiBpbnQgY2xvY2tfZ2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIHN0cnVjdCB0aW1lc3BlYyAqX190cCkgX19USFJPVzsKKworLyogU2V0IGNsb2NrIENMT0NLX0lEIHRvIHZhbHVlIFRQLiAgKi8KK2V4dGVybiBpbnQgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RwKQorICAgICBfX1RIUk9XOworCisjICBpZmRlZiBfX1VTRV9YT1BFTjJLCisvKiBIaWdoLXJlc29sdXRpb24gc2xlZXAgd2l0aCB0aGUgc3BlY2lmaWVkIGNsb2NrLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoCisgICBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgY2xvY2tfbmFub3NsZWVwIChjbG9ja2lkX3QgX19jbG9ja19pZCwgaW50IF9fZmxhZ3MsCisJCQkgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxLAorCQkJICAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW0pOworCisvKiBSZXR1cm4gY2xvY2sgSUQgZm9yIENQVS10aW1lIGNsb2NrLiAgKi8KK2V4dGVybiBpbnQgY2xvY2tfZ2V0Y3B1Y2xvY2tpZCAocGlkX3QgX19waWQsIGNsb2NraWRfdCAqX19jbG9ja19pZCkgX19USFJPVzsKKyMgIGVuZGlmCisKKworLyogQ3JlYXRlIG5ldyBwZXItcHJvY2VzcyB0aW1lciB1c2luZyBDTE9DS19JRC4gICovCitleHRlcm4gaW50IHRpbWVyX2NyZWF0ZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsCisJCQkgc3RydWN0IHNpZ2V2ZW50ICpfX3Jlc3RyaWN0IF9fZXZwLAorCQkJIHRpbWVyX3QgKl9fcmVzdHJpY3QgX190aW1lcmlkKSBfX1RIUk9XOworCisvKiBEZWxldGUgdGltZXIgVElNRVJJRC4gICovCitleHRlcm4gaW50IHRpbWVyX2RlbGV0ZSAodGltZXJfdCBfX3RpbWVyaWQpIF9fVEhST1c7CisKKy8qIFNldCB0aW1lciBUSU1FUklEIHRvIFZBTFVFLCByZXR1cm5pbmcgb2xkIHZhbHVlIGluIE9WTEFVRS4gICovCitleHRlcm4gaW50IHRpbWVyX3NldHRpbWUgKHRpbWVyX3QgX190aW1lcmlkLCBpbnQgX19mbGFncywKKwkJCSAgX19jb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX3ZhbHVlLAorCQkJICBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX292YWx1ZSkgX19USFJPVzsKKworLyogR2V0IGN1cnJlbnQgdmFsdWUgb2YgdGltZXIgVElNRVJJRCBhbmQgc3RvcmUgaXQgaW4gVkxBVUUuICAqLworZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwgc3RydWN0IGl0aW1lcnNwZWMgKl9fdmFsdWUpCisgICAgIF9fVEhST1c7CisKKy8qIEdldCBleHBpcmF0aW9uIG92ZXJydW4gZm9yIHRpbWVyIFRJTUVSSUQuICAqLworZXh0ZXJuIGludCB0aW1lcl9nZXRvdmVycnVuICh0aW1lcl90IF9fdGltZXJpZCkgX19USFJPVzsKKyMgZW5kaWYKKworCisjIGlmZGVmIF9fVVNFX1hPUEVOX0VYVEVOREVECisvKiBTZXQgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzIHRvIGluZGljYXRlIGFuIGVycm9yLgorICAgICAxICB0aGUgREFURU1TSyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBudWxsIG9yIHVuZGVmaW5lZCwKKyAgICAgMiAgdGhlIHRlbXBsYXRlIGZpbGUgY2Fubm90IGJlIG9wZW5lZCBmb3IgcmVhZGluZywKKyAgICAgMyAgZmFpbGVkIHRvIGdldCBmaWxlIHN0YXR1cyBpbmZvcm1hdGlvbiwKKyAgICAgNCAgdGhlIHRlbXBsYXRlIGZpbGUgaXMgbm90IGEgcmVndWxhciBmaWxlLAorICAgICA1ICBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZCB3aGlsZSByZWFkaW5nIHRoZSB0ZW1wbGF0ZSBmaWxlLAorICAgICA2ICBtZW1vcnkgYWxsaWNhdGlvbiBmYWlsZWQgKG5vdCBlbm91Z2ggbWVtb3J5IGF2YWlsYWJsZSksCisgICAgIDcgIHRoZXJlIGlzIG5vIGxpbmUgaW4gdGhlIHRlbXBsYXRlIHRoYXQgbWF0Y2hlcyB0aGUgaW5wdXQsCisgICAgIDggIGludmFsaWQgaW5wdXQgc3BlY2lmaWNhdGlvbiBFeGFtcGxlOiBGZWJydWFyeSAzMSBvciBhIHRpbWUgaXMKKyAgICAgICAgc3BlY2lmaWVkIHRoYXQgY2FuIG5vdCBiZSByZXByZXNlbnRlZCBpbiBhIHRpbWVfdCAocmVwcmVzZW50aW5nCisJdGhlIHRpbWUgaW4gc2Vjb25kcyBzaW5jZSAwMDowMDowMCBVVEMsIEphbnVhcnkgMSwgMTk3MCkgKi8KK2V4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7CisKKy8qIFBhcnNlIHRoZSBnaXZlbiBzdHJpbmcgYXMgYSBkYXRlIHNwZWNpZmljYXRpb24gYW5kIHJldHVybiBhIHZhbHVlCisgICByZXByZXNlbnRpbmcgdGhlIHZhbHVlLiAgVGhlIHRlbXBsYXRlcyBmcm9tIHRoZSBmaWxlIGlkZW50aWZpZWQgYnkKKyAgIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBEQVRFTVNLIGFyZSB1c2VkLiAgSW4gY2FzZSBvZiBhbiBlcnJvcgorICAgYGdldGRhdGVfZXJyJyBpcyBzZXQuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnRzIGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBzdHJ1Y3QgdG0gKmdldGRhdGUgKF9fY29uc3QgY2hhciAqX19zdHJpbmcpOworIyBlbmRpZgorCisjIGlmZGVmIF9fVVNFX0dOVQorLyogU2luY2UgYGdldGRhdGUnIGlzIG5vdCByZWVudHJhbnQgYmVjYXVzZSBvZiB0aGUgdXNlIG9mIGBnZXRkYXRlX2VycicKKyAgIGFuZCB0aGUgc3RhdGljIGJ1ZmZlciB0byByZXR1cm4gdGhlIHJlc3VsdCBpbiwgd2UgcHJvdmlkZSBhIHRocmVhZC1zYWZlCisgICB2YXJpYW50LiAgVGhlIGZ1bmN0aW9uYWxpdHkgaXMgdGhlIHNhbWUuICBUaGUgcmVzdWx0IGlzIHJldHVybmVkIGluCisgICB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgUkVTQlVGUCBhbmQgaW4gY2FzZSBvZiBhbiBlcnJvciB0aGUgcmV0dXJuCisgICB2YWx1ZSBpcyAhPSAwIHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIGdpdmVuIGFib3ZlIGZvciBgZ2V0ZGF0ZV9lcnInLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBwYXJ0IG9mIFBPU0lYIGFuZCB0aGVyZWZvcmUgbm8gb2ZmaWNpYWwKKyAgIGNhbmNlbGxhdGlvbiBwb2ludC4gIEJ1dCBkdWUgdG8gc2ltaWxhcml0eSB3aXRoIGFuIFBPU0lYIGludGVyZmFjZQorICAgb3IgZHVlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBpdCBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQKKyAgIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gaW50IGdldGRhdGVfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RyaW5nLAorCQkgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX19yZXNidWZwKTsKKyMgZW5kaWYKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIDx0aW1lLmg+IGluY2x1ZGVkLiAgKi8KKworI2VuZGlmIC8qIDx0aW1lLmg+IG5vdCBhbHJlYWR5IGluY2x1ZGVkLiAgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS90dHllbnQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS90dHllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjIyMWJjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3R0eWVudC5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODksIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpdHR5ZW50LmgJOC4xIChCZXJrZWxleSkgNi8yLzkzCisgKi8KKworI2lmbmRlZglfVFRZRU5UX0gKKyNkZWZpbmUJX1RUWUVOVF9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKyNkZWZpbmUJX1BBVEhfVFRZUwkiL2V0Yy90dHlzIgorCisjZGVmaW5lCV9UVFlTX09GRgkib2ZmIgorI2RlZmluZQlfVFRZU19PTgkib24iCisjZGVmaW5lCV9UVFlTX1NFQ1VSRQkic2VjdXJlIgorI2RlZmluZQlfVFRZU19XSU5ET1cJIndpbmRvdyIKKworc3RydWN0IHR0eWVudCB7CisJY2hhcgkqdHlfbmFtZTsJLyogdGVybWluYWwgZGV2aWNlIG5hbWUgKi8KKwljaGFyCSp0eV9nZXR0eTsJLyogY29tbWFuZCB0byBleGVjdXRlLCB1c3VhbGx5IGdldHR5ICovCisJY2hhcgkqdHlfdHlwZTsJLyogdGVybWluYWwgdHlwZSBmb3IgdGVybWNhcCAqLworI2RlZmluZQlUVFlfT04JCTB4MDEJLyogZW5hYmxlIGxvZ2lucyAoc3RhcnQgdHlfZ2V0dHkgcHJvZ3JhbSkgKi8KKyNkZWZpbmUJVFRZX1NFQ1VSRQkweDAyCS8qIGFsbG93IHVpZCBvZiAwIHRvIGxvZ2luICovCisJaW50CXR5X3N0YXR1czsJLyogc3RhdHVzIGZsYWdzICovCisJY2hhciAJKnR5X3dpbmRvdzsJLyogY29tbWFuZCB0byBzdGFydCB1cCB3aW5kb3cgbWFuYWdlciAqLworCWNoYXIJKnR5X2NvbW1lbnQ7CS8qIGNvbW1lbnQgZmllbGQgKi8KK307CisKKworX19CRUdJTl9ERUNMUworCitleHRlcm4gc3RydWN0IHR0eWVudCAqZ2V0dHR5ZW50ICh2b2lkKSBfX1RIUk9XOworZXh0ZXJuIHN0cnVjdCB0dHllbnQgKmdldHR0eW5hbSAoX19jb25zdCBjaGFyICpfX3R0eSkgX19USFJPVzsKK2V4dGVybiBpbnQgc2V0dHR5ZW50ICh2b2lkKSBfX1RIUk9XOworZXh0ZXJuIGludCBlbmR0dHllbnQgKHZvaWQpIF9fVEhST1c7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiB0dHllbnQuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3Vjb250ZXh0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvdWNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTZmNTk0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3Vjb250ZXh0LmgKQEAgLTAsMCArMSw1MyBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisvKiBTeXN0ZW0gViBBQkkgY29tcGxpYW50IHVzZXItbGV2ZWwgY29udGV4dCBzd2l0Y2hpbmcgc3VwcG9ydC4gICovCisKKyNpZm5kZWYgX1VDT05URVhUX0gKKyNkZWZpbmUgX1VDT05URVhUX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworLyogR2V0IG1hY2hpbmUgZGVwZW5kZW50IGRlZmluaXRpb24gb2YgZGF0YSBzdHJ1Y3R1cmVzLiAgKi8KKyNpbmNsdWRlIDxzeXMvdWNvbnRleHQuaD4KKworX19CRUdJTl9ERUNMUworCisvKiBHZXQgdXNlciBjb250ZXh0IGFuZCBzdG9yZSBpdCBpbiB2YXJpYWJsZSBwb2ludGVkIHRvIGJ5IFVDUC4gICovCitleHRlcm4gaW50IGdldGNvbnRleHQgKHVjb250ZXh0X3QgKl9fdWNwKSBfX1RIUk9XOworCisvKiBTZXQgdXNlciBjb250ZXh0IGZyb20gaW5mb3JtYXRpb24gb2YgdmFyaWFibGUgcG9pbnRlZCB0byBieSBVQ1AuICAqLworZXh0ZXJuIGludCBzZXRjb250ZXh0IChfX2NvbnN0IHVjb250ZXh0X3QgKl9fdWNwKSBfX1RIUk9XOworCisvKiBTYXZlIGN1cnJlbnQgY29udGV4dCBpbiBjb250ZXh0IHZhcmlhYmxlIHBvaW50ZWQgdG8gYnkgT1VDUCBhbmQgc2V0CisgICBjb250ZXh0IGZyb20gdmFyaWFibGUgcG9pbnRlZCB0byBieSBVQ1AuICAqLworZXh0ZXJuIGludCBzd2FwY29udGV4dCAodWNvbnRleHRfdCAqX19yZXN0cmljdCBfX291Y3AsCisJCQlfX2NvbnN0IHVjb250ZXh0X3QgKl9fcmVzdHJpY3QgX191Y3ApIF9fVEhST1c7CisKKy8qIE1hbmlwdWxhdGUgdXNlciBjb250ZXh0IFVDUCB0byBjb250aW51ZSB3aXRoIGNhbGxpbmcgZnVuY3Rpb25zIEZVTkMKKyAgIGFuZCB0aGUgQVJHQy0xIHBhcmFtZXRlcnMgZm9sbG93aW5nIEFSR0Mgd2hlbiB0aGUgY29udGV4dCBpcyB1c2VkCisgICB0aGUgbmV4dCB0aW1lIGluIGBzZXRjb250ZXh0JyBvciBgc3dhcGNvbnRleHQnLgorCisgICBXZSBjYW5ub3Qgc2F5IGFueXRoaW5nIGFib3V0IHRoZSBwYXJhbWV0ZXJzIEZVTkMgdGFrZXM7IGB2b2lkJworICAgaXMgYXMgZ29vZCBhcyBhbnkgb3RoZXIgY2hvaWNlLiAgKi8KK2V4dGVybiB2b2lkIG1ha2Vjb250ZXh0ICh1Y29udGV4dF90ICpfX3VjcCwgdm9pZCAoKl9fZnVuYykgKHZvaWQpLAorCQkJIGludCBfX2FyZ2MsIC4uLikgX19USFJPVzsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIHVjb250ZXh0LmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS91bGltaXQuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS91bGltaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2I1ZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3VsaW1pdC5oCkBAIC0wLDAgKzEsNDggQEAKKy8qIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworI2lmbmRlZiBfVUxJTUlUX0gKKyNkZWZpbmUgX1VMSU1JVF9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKy8qIENvbnN0YW50cyB1c2VkIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgZm9yIGB1bGltaXQnLiAgVGhleSBkZW5vdGUgbGltaXRzCisgICB3aGljaCBjYW4gYmUgc2V0IG9yIHJldHJpZXZlZCB1c2luZyB0aGlzIGZ1bmN0aW9uLiAgKi8KK2VudW0KK3sKKyAgVUxfR0VURlNJWkUgPSAxLAkJCS8qIFJldHVybiBsaW1pdCBvbiB0aGUgc2l6ZSBvZiBhIGZpbGUsCisJCQkJCSAgIGluIHVuaXRzIG9mIDUxMiBieXRlcy4gICovCisjZGVmaW5lIFVMX0dFVEZTSVpFCVVMX0dFVEZTSVpFCisgIFVMX1NFVEZTSVpFLAkJCQkvKiBTZXQgbGltaXQgb24gdGhlIHNpemUgb2YgYSBmaWxlIHRvCisJCQkJCSAgIHNlY29uZCBhcmd1bWVudC4gICovCisjZGVmaW5lIFVMX1NFVEZTSVpFCVVMX1NFVEZTSVpFCisgIF9fVUxfR0VUTUFYQlJLLAkJCS8qIFJldHVybiB0aGUgbWF4aW11bSBwb3NzaWJsZSBhZGRyZXNzCisJCQkJCSAgIG9mIHRoZSBkYXRhIHNlZ21lbnQuICAqLworICBfX1VMX0dFVE9QRU5NQVgJCQkvKiBSZXR1cm4gdGhlIG1heGltdW0gbnVtYmVyIG9mIGZpbGVzCisJCQkJCSAgIHRoYXQgdGhlIGNhbGxpbmcgcHJvY2VzcyBjYW4gb3Blbi4qLworfTsKKworCitfX0JFR0lOX0RFQ0xTCisKKy8qIENvbnRyb2wgcHJvY2VzcyBsaW1pdHMgYWNjb3JkaW5nIHRvIENNRC4gICovCitleHRlcm4gbG9uZyBpbnQgdWxpbWl0IChpbnQgX19jbWQsIC4uLikgX19USFJPVzsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIHVsaW1pdC5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvdW5pc3RkLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvdW5pc3RkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZiYjAyZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS91bmlzdGQuaApAQCAtMCwwICsxLDExMTcgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5MS0yMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisvKgorICoJUE9TSVggU3RhbmRhcmQ6IDIuMTAgU3ltYm9saWMgQ29uc3RhbnRzCQk8dW5pc3RkLmg+CisgKi8KKworI2lmbmRlZglfVU5JU1REX0gKKyNkZWZpbmUJX1VOSVNURF9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKK19fQkVHSU5fREVDTFMKKworLyogVGhlc2UgbWF5IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoYXQgZmFjaWxpdGllcyBhcmUgcHJlc2VudCBhdCBjb21waWxlIHRpbWUuCisgICBUaGVpciB2YWx1ZXMgY2FuIGJlIG9idGFpbmVkIGF0IHJ1biB0aW1lIGZyb20gYHN5c2NvbmYnLiAgKi8KKworLyogUE9TSVggU3RhbmRhcmQgYXBwcm92ZWQgYXMgSVNPL0lFQyA5OTQ1LTEgYXMgb2YgRGVjZW1iZXIgMjAwMS4gICovCisjZGVmaW5lCV9QT1NJWF9WRVJTSU9OCTIwMDExMkwKKworLyogVGhlc2UgYXJlIG5vdCAjaWZkZWYgX19VU0VfUE9TSVgyIGJlY2F1c2UgdGhleSBhcmUKKyAgIGluIHRoZSB0aGVvcmV0aWNhbGx5IGFwcGxpY2F0aW9uLW93bmVkIG5hbWVzcGFjZS4gICovCisKKy8qIFRoZSB1dGlsaXRpZXMgb24gR05VIHN5c3RlbXMgYWxzbyBjb3JyZXNwb25kIHRvIHRoaXMgdmVyc2lvbi4gICovCisjZGVmaW5lIF9QT1NJWDJfVkVSU0lPTgkyMDAxMTJMCisKKy8qIElmIGRlZmluZWQsIHRoZSBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyB0aGUKKyAgIEMgTGFuZ3VhZ2UgQmluZGluZ3MgT3B0aW9uLiAgKi8KKyNkZWZpbmUJX1BPU0lYMl9DX0JJTkQJMjAwMTEyTAorCisvKiBJZiBkZWZpbmVkLCB0aGUgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgdGhlCisgICBDIExhbmd1YWdlIERldmVsb3BtZW50IFV0aWxpdGllcyBPcHRpb24uICAqLworI2RlZmluZQlfUE9TSVgyX0NfREVWCTIwMDExMkwKKworLyogSWYgZGVmaW5lZCwgdGhlIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIHRoZQorICAgU29mdHdhcmUgRGV2ZWxvcG1lbnQgVXRpbGl0aWVzIE9wdGlvbi4gICovCisjZGVmaW5lCV9QT1NJWDJfU1dfREVWCTIwMDExMkwKKworLyogSWYgZGVmaW5lZCwgdGhlIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIHRoZQorICAgY3JlYXRpb24gb2YgbG9jYWxlcyB3aXRoIHRoZSBsb2NhbGVkZWYgdXRpbGl0eS4gICovCisjZGVmaW5lIF9QT1NJWDJfTE9DQUxFREVGICAgICAgIDIwMDExMkwKKworLyogWC9PcGVuIHZlcnNpb24gbnVtYmVyIHRvIHdoaWNoIHRoZSBsaWJyYXJ5IGNvbmZvcm1zLiAgSXQgaXMgc2VsZWN0YWJsZS4gICovCisjaWZkZWYgX19VU0VfWE9QRU4ySworIyBkZWZpbmUgX1hPUEVOX1ZFUlNJT04JNjAwCisjZWxpZiBkZWZpbmVkIF9fVVNFX1VOSVg5OAorIyBkZWZpbmUgX1hPUEVOX1ZFUlNJT04JNTAwCisjZWxzZQorIyBkZWZpbmUgX1hPUEVOX1ZFUlNJT04JNAorI2VuZGlmCisKKy8qIENvbW1hbmRzIGFuZCB1dGlsaXRpZXMgZnJvbSBYUEc0IGFyZSBhdmFpbGFibGUuICAqLworI2RlZmluZSBfWE9QRU5fWENVX1ZFUlNJT04JNAorCisvKiBXZSBhcmUgY29tcGF0aWJsZSB3aXRoIHRoZSBvbGQgcHVibGlzaGVkIHN0YW5kYXJkcyBhcyB3ZWxsLiAgKi8KKyNkZWZpbmUgX1hPUEVOX1hQRzIJMQorI2RlZmluZSBfWE9QRU5fWFBHMwkxCisjZGVmaW5lIF9YT1BFTl9YUEc0CTEKKworLyogVGhlIFgvT3BlbiBVbml4IGV4dGVuc2lvbnMgYXJlIGF2YWlsYWJsZS4gICovCisjZGVmaW5lIF9YT1BFTl9VTklYCTEKKworLyogRW5jcnlwdGlvbiBpcyBwcmVzZW50LiAgKi8KKyNkZWZpbmUJX1hPUEVOX0NSWVBUCTEKKworLyogVGhlIGVuaGFuY2VkIGludGVybmF0aW9uYWxpemF0aW9uIGNhcGFiaWxpdGllcyBhY2NvcmRpbmcgdG8gWFBHNC4yCisgICBhcmUgcHJlc2VudC4gICovCisjZGVmaW5lCV9YT1BFTl9FTkhfSTE4TgkxCisKKy8qIFRoZSBsZWdhY3kgaW50ZXJmYWNlcyBhcmUgYWxzbyBhdmFpbGFibGUuICAqLworI2RlZmluZSBfWE9QRU5fTEVHQUNZCTEKKworCisvKiBHZXQgdmFsdWVzIG9mIFBPU0lYIG9wdGlvbnM6CisKKyAgIElmIHRoZXNlIHN5bWJvbHMgYXJlIGRlZmluZWQsIHRoZSBjb3JyZXNwb25kaW5nIGZlYXR1cmVzIGFyZQorICAgYWx3YXlzIGF2YWlsYWJsZS4gIElmIG5vdCwgdGhleSBtYXkgYmUgYXZhaWxhYmxlIHNvbWV0aW1lcy4KKyAgIFRoZSBjdXJyZW50IHZhbHVlcyBjYW4gYmUgb2J0YWluZWQgd2l0aCBgc3lzY29uZicuCisKKyAgIF9QT1NJWF9KT0JfQ09OVFJPTAkJSm9iIGNvbnRyb2wgaXMgc3VwcG9ydGVkLgorICAgX1BPU0lYX1NBVkVEX0lEUwkJUHJvY2Vzc2VzIGhhdmUgYSBzYXZlZCBzZXQtdXNlci1JRAorCQkJCWFuZCBhIHNhdmVkIHNldC1ncm91cC1JRC4KKyAgIF9QT1NJWF9SRUFMVElNRV9TSUdOQUxTCVJlYWwtdGltZSwgcXVldWVkIHNpZ25hbHMgYXJlIHN1cHBvcnRlZC4KKyAgIF9QT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HCVByaW9yaXR5IHNjaGVkdWxpbmcgaXMgc3VwcG9ydGVkLgorICAgX1BPU0lYX1RJTUVSUwkJUE9TSVguNCBjbG9ja3MgYW5kIHRpbWVycyBhcmUgc3VwcG9ydGVkLgorICAgX1BPU0lYX0FTWU5DSFJPTk9VU19JTwlBc3luY2hyb25vdXMgSS9PIGlzIHN1cHBvcnRlZC4KKyAgIF9QT1NJWF9QUklPUklUSVpFRF9JTwlQcmlvcml0aXplZCBhc3luY2hyb25vdXMgSS9PIGlzIHN1cHBvcnRlZC4KKyAgIF9QT1NJWF9TWU5DSFJPTklaRURfSU8JU3luY2hyb25pemluZyBmaWxlIGRhdGEgaXMgc3VwcG9ydGVkLgorICAgX1BPU0lYX0ZTWU5DCQkJVGhlIGZzeW5jIGZ1bmN0aW9uIGlzIHByZXNlbnQuCisgICBfUE9TSVhfTUFQUEVEX0ZJTEVTCQlNYXBwaW5nIG9mIGZpbGVzIHRvIG1lbW9yeSBpcyBzdXBwb3J0ZWQuCisgICBfUE9TSVhfTUVNTE9DSwkJTG9ja2luZyBvZiBhbGwgbWVtb3J5IGlzIHN1cHBvcnRlZC4KKyAgIF9QT1NJWF9NRU1MT0NLX1JBTkdFCQlMb2NraW5nIG9mIHJhbmdlcyBvZiBtZW1vcnkgaXMgc3VwcG9ydGVkLgorICAgX1BPU0lYX01FTU9SWV9QUk9URUNUSU9OCVNldHRpbmcgb2YgbWVtb3J5IHByb3RlY3Rpb25zIGlzIHN1cHBvcnRlZC4KKyAgIF9QT1NJWF9NRVNTQUdFX1BBU1NJTkcJUE9TSVguNCBtZXNzYWdlIHF1ZXVlcyBhcmUgc3VwcG9ydGVkLgorICAgX1BPU0lYX1NFTUFQSE9SRVMJCVBPU0lYLjQgY291bnRpbmcgc2VtYXBob3JlcyBhcmUgc3VwcG9ydGVkLgorICAgX1BPU0lYX1NIQVJFRF9NRU1PUllfT0JKRUNUUwlQT1NJWC40IHNoYXJlZCBtZW1vcnkgb2JqZWN0cyBhcmUgc3VwcG9ydGVkLgorICAgX1BPU0lYX1RIUkVBRFMJCVBPU0lYLjFjIHB0aHJlYWRzIGFyZSBzdXBwb3J0ZWQuCisgICBfUE9TSVhfVEhSRUFEX0FUVFJfU1RBQ0tBRERSCVRocmVhZCBzdGFjayBhZGRyZXNzIGF0dHJpYnV0ZSBvcHRpb24gc3VwcG9ydGVkLgorICAgX1BPU0lYX1RIUkVBRF9BVFRSX1NUQUNLU0laRQlUaHJlYWQgc3RhY2sgc2l6ZSBhdHRyaWJ1dGUgb3B0aW9uIHN1cHBvcnRlZC4KKyAgIF9QT1NJWF9USFJFQURfU0FGRV9GVU5DVElPTlMJVGhyZWFkLXNhZmUgZnVuY3Rpb25zIGFyZSBzdXBwb3J0ZWQuCisgICBfUE9TSVhfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcKKwkJCQlQT1NJWC4xYyB0aHJlYWQgZXhlY3V0aW9uIHNjaGVkdWxpbmcgc3VwcG9ydGVkLgorICAgX1BPU0lYX1RIUkVBRF9QUklPX0lOSEVSSVQJVGhyZWFkIHByaW9yaXR5IGluaGVyaXRhbmNlIG9wdGlvbiBzdXBwb3J0ZWQuCisgICBfUE9TSVhfVEhSRUFEX1BSSU9fUFJPVEVDVAlUaHJlYWQgcHJpb3JpdHkgcHJvdGVjdGlvbiBvcHRpb24gc3VwcG9ydGVkLgorICAgX1BPU0lYX1RIUkVBRF9QUk9DRVNTX1NIQVJFRAlQcm9jZXNzLXNoYXJlZCBzeW5jaHJvbml6YXRpb24gc3VwcG9ydGVkLgorICAgX1BPU0lYX1BJSQkJCVByb3RvY29sLWluZGVwZW5kZW50IGludGVyZmFjZXMgYXJlIHN1cHBvcnRlZC4KKyAgIF9QT1NJWF9QSUlfWFRJCQlYVEkgcHJvdG9jb2wtaW5kZXAuIGludGVyZmFjZXMgYXJlIHN1cHBvcnRlZC4KKyAgIF9QT1NJWF9QSUlfU09DS0VUCQlTb2NrZXQgcHJvdG9jb2wtaW5kZXAuIGludGVyZmFjZXMgYXJlIHN1cHBvcnRlZC4KKyAgIF9QT1NJWF9QSUlfSU5URVJORVQJCUludGVybmV0IGZhbWlseSBvZiBwcm90b2NvbHMgc3VwcG9ydGVkLgorICAgX1BPU0lYX1BJSV9JTlRFUk5FVF9TVFJFQU0JQ29ubmVjdGlvbi1tb2RlIEludGVybmV0IHByb3RvY29sIHN1cHBvcnRlZC4KKyAgIF9QT1NJWF9QSUlfSU5URVJORVRfREdSQU0JQ29ubmVjdGlvbmxlc3MgSW50ZXJuZXQgcHJvdG9jb2wgc3VwcG9ydGVkLgorICAgX1BPU0lYX1BJSV9PU0kJCUlTTy9PU0kgZmFtaWx5IG9mIHByb3RvY29scyBzdXBwb3J0ZWQuCisgICBfUE9TSVhfUElJX09TSV9DT1RTCQlDb25uZWN0aW9uLW1vZGUgSVNPL09TSSBzZXJ2aWNlIHN1cHBvcnRlZC4KKyAgIF9QT1NJWF9QSUlfT1NJX0NMVFMJCUNvbm5lY3Rpb25sZXNzIElTTy9PU0kgc2VydmljZSBzdXBwb3J0ZWQuCisgICBfUE9TSVhfUE9MTAkJCUltcGxlbWVudGF0aW9uIHN1cHBvcnRzIGBwb2xsJyBmdW5jdGlvbi4KKyAgIF9QT1NJWF9TRUxFQ1QJCUltcGxlbWVudGF0aW9uIHN1cHBvcnRzIGBzZWxlY3QnIGFuZCBgcHNlbGVjdCcuCisKKyAgIF9YT1BFTl9SRUFMVElNRQkJWC9PcGVuIHJlYWx0aW1lIHN1cHBvcnQgaXMgYXZhaWxhYmxlLgorICAgX1hPUEVOX1JFQUxUSU1FX1RIUkVBRFMJWC9PcGVuIHJlYWx0aW1lIHRocmVhZCBzdXBwb3J0IGlzIGF2YWlsYWJsZS4KKyAgIF9YT1BFTl9TSE0JCQlTaGFyZWQgbWVtb3J5IGludGVyZmFjZSBhY2NvcmRpbmcgdG8gWFBHNC4yLgorCisgICBfWEJTNV9JTFAzMl9PRkYzMgkJSW1wbGVtZW50YXRpb24gcHJvdmlkZXMgZW52aXJvbm1lbnQgd2l0aCAzMi1iaXQKKwkJCQlpbnQsIGxvbmcsIHBvaW50ZXIsIGFuZCBvZmZfdCB0eXBlcy4KKyAgIF9YQlM1X0lMUDMyX09GRkJJRwkJSW1wbGVtZW50YXRpb24gcHJvdmlkZXMgZW52aXJvbm1lbnQgd2l0aCAzMi1iaXQKKwkJCQlpbnQsIGxvbmcsIGFuZCBwb2ludGVyIGFuZCBvZmZfdCB3aXRoIGF0IGxlYXN0CisJCQkJNjQgYml0cy4KKyAgIF9YQlM1X0xQNjRfT0ZGNjQJCUltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGVudmlyb25tZW50IHdpdGggMzItYml0CisJCQkJaW50LCBhbmQgNjQtYml0IGxvbmcsIHBvaW50ZXIsIGFuZCBvZmZfdCB0eXBlcy4KKyAgIF9YQlM1X0xQQklHX09GRkJJRwkJSW1wbGVtZW50YXRpb24gcHJvdmlkZXMgZW52aXJvbm1lbnQgd2l0aCBhdAorCQkJCWxlYXN0IDMyIGJpdHMgaW50IGFuZCBsb25nLCBwb2ludGVyLCBhbmQgb2ZmX3QKKwkJCQl3aXRoIGF0IGxlYXN0IDY0IGJpdHMuCisKKyAgIElmIGFueSBvZiB0aGVzZSBzeW1ib2xzIGlzIGRlZmluZWQgYXMgLTEsIHRoZSBjb3JyZXNwb25kaW5nIG9wdGlvbiBpcyBub3QKKyAgIHRydWUgZm9yIGFueSBmaWxlLiAgSWYgYW55IGlzIGRlZmluZWQgYXMgb3RoZXIgdGhhbiAtMSwgdGhlIGNvcnJlc3BvbmRpbmcKKyAgIG9wdGlvbiBpcyB0cnVlIGZvciBhbGwgZmlsZXMuICBJZiBhIHN5bWJvbCBpcyBub3QgZGVmaW5lZCBhdCBhbGwsIHRoZSB2YWx1ZQorICAgZm9yIGEgc3BlY2lmaWMgZmlsZSBjYW4gYmUgb2J0YWluZWQgZnJvbSBgcGF0aGNvbmYnIGFuZCBgZnBhdGhjb25mJy4KKworICAgX1BPU0lYX0NIT1dOX1JFU1RSSUNURUQJT25seSB0aGUgc3VwZXIgdXNlciBjYW4gdXNlIGBjaG93bicgdG8gY2hhbmdlCisJCQkJdGhlIG93bmVyIG9mIGEgZmlsZS4gIGBjaG93bicgY2FuIG9ubHkgYmUgdXNlZAorCQkJCXRvIGNoYW5nZSB0aGUgZ3JvdXAgSUQgb2YgYSBmaWxlIHRvIGEgZ3JvdXAgb2YKKwkJCQl3aGljaCB0aGUgY2FsbGluZyBwcm9jZXNzIGlzIGEgbWVtYmVyLgorICAgX1BPU0lYX05PX1RSVU5DCQlQYXRobmFtZSBjb21wb25lbnRzIGxvbmdlciB0aGFuCisJCQkJTkFNRV9NQVggZ2VuZXJhdGUgYW4gZXJyb3IuCisgICBfUE9TSVhfVkRJU0FCTEUJCUlmIGRlZmluZWQsIGlmIHRoZSB2YWx1ZSBvZiBhbiBlbGVtZW50IG9mIHRoZQorCQkJCWBjX2NjJyBtZW1iZXIgb2YgYHN0cnVjdCB0ZXJtaW9zJyBpcworCQkJCV9QT1NJWF9WRElTQUJMRSwgbm8gY2hhcmFjdGVyIHdpbGwgaGF2ZSB0aGUKKwkJCQllZmZlY3QgYXNzb2NpYXRlZCB3aXRoIHRoYXQgZWxlbWVudC4KKyAgIF9QT1NJWF9TWU5DX0lPCQlTeW5jaHJvbm91cyBJL08gbWF5IGJlIHBlcmZvcm1lZC4KKyAgIF9QT1NJWF9BU1lOQ19JTwkJQXN5bmNocm9ub3VzIEkvTyBtYXkgYmUgcGVyZm9ybWVkLgorICAgX1BPU0lYX1BSSU9fSU8JCVByaW9yaXRpemVkIEFzeW5jaHJvbm91cyBJL08gbWF5IGJlIHBlcmZvcm1lZC4KKworICAgU3VwcG9ydCBmb3IgdGhlIExhcmdlIEZpbGUgU3VwcG9ydCBpbnRlcmZhY2UgaXMgbm90IGdlbmVyYWxseSBhdmFpbGFibGUuCisgICBJZiBpdCBpcyBhdmFpbGFibGUgdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIGRlZmluZWQgdG8gb25lLgorICAgX0xGUzY0X0xBUkdFRklMRQkJTG93LWxldmVsIEkvTyBzdXBwb3J0cyBsYXJnZSBmaWxlcy4KKyAgIF9MRlM2NF9TVERJTwkJCVN0YW5kYXJkIEkvTyBzdXBwb3J0cyBsYXJnZSBmaWxlcy4KKyAgICovCisKKyNpbmNsdWRlIDxiaXRzL3Bvc2l4X29wdC5oPgorCisvKiBHZXQgdGhlIGVudmlyb25tZW50IGRlZmluaXRpb25zIGZyb20gVW5peDk4LiAgKi8KKyNpZmRlZiBfX1VTRV9VTklYOTgKKyMgaW5jbHVkZSA8Yml0cy9lbnZpcm9ubWVudHMuaD4KKyNlbmRpZgorCisvKiBTdGFuZGFyZCBmaWxlIGRlc2NyaXB0b3JzLiAgKi8KKyNkZWZpbmUJU1RESU5fRklMRU5PCTAJLyogU3RhbmRhcmQgaW5wdXQuICAqLworI2RlZmluZQlTVERPVVRfRklMRU5PCTEJLyogU3RhbmRhcmQgb3V0cHV0LiAgKi8KKyNkZWZpbmUJU1RERVJSX0ZJTEVOTwkyCS8qIFN0YW5kYXJkIGVycm9yIG91dHB1dC4gICovCisKKworLyogQWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgZGVjbGFyZWQgYW55d2hlcmUgZWxzZS4gICovCisKKyNpbmNsdWRlIDxiaXRzL3R5cGVzLmg+CisKKyNpZm5kZWYJX19zc2l6ZV90X2RlZmluZWQKK3R5cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7CisjIGRlZmluZSBfX3NzaXplX3RfZGVmaW5lZAorI2VuZGlmCisKKyNkZWZpbmUJX19uZWVkX3NpemVfdAorI2RlZmluZSBfX25lZWRfTlVMTAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaWYgZGVmaW5lZCBfX1VTRV9YT1BFTiB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOMksKKy8qIFRoZSBTaW5nbGUgVW5peCBzcGVjaWZpY2F0aW9uIHNheXMgdGhhdCBzb21lIG1vcmUgdHlwZXMgYXJlCisgICBhdmFpbGFibGUgaGVyZS4gICovCisjIGlmbmRlZiBfX2dpZF90X2RlZmluZWQKK3R5cGVkZWYgX19naWRfdCBnaWRfdDsKKyMgIGRlZmluZSBfX2dpZF90X2RlZmluZWQKKyMgZW5kaWYKKworIyBpZm5kZWYgX191aWRfdF9kZWZpbmVkCit0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CisjICBkZWZpbmUgX191aWRfdF9kZWZpbmVkCisjIGVuZGlmCisKKyMgaWZuZGVmIF9fb2ZmX3RfZGVmaW5lZAorIyAgaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKK3R5cGVkZWYgX19vZmZfdCBvZmZfdDsKKyMgIGVsc2UKK3R5cGVkZWYgX19vZmY2NF90IG9mZl90OworIyAgZW5kaWYKKyMgIGRlZmluZSBfX29mZl90X2RlZmluZWQKKyMgZW5kaWYKKyMgaWYgZGVmaW5lZCBfX1VTRV9MQVJHRUZJTEU2NCAmJiAhZGVmaW5lZCBfX29mZjY0X3RfZGVmaW5lZAordHlwZWRlZiBfX29mZjY0X3Qgb2ZmNjRfdDsKKyMgIGRlZmluZSBfX29mZjY0X3RfZGVmaW5lZAorIyBlbmRpZgorCisjIGlmbmRlZiBfX3VzZWNvbmRzX3RfZGVmaW5lZAordHlwZWRlZiBfX3VzZWNvbmRzX3QgdXNlY29uZHNfdDsKKyMgIGRlZmluZSBfX3VzZWNvbmRzX3RfZGVmaW5lZAorIyBlbmRpZgorCisjIGlmbmRlZiBfX3BpZF90X2RlZmluZWQKK3R5cGVkZWYgX19waWRfdCBwaWRfdDsKKyMgIGRlZmluZSBfX3BpZF90X2RlZmluZWQKKyMgZW5kaWYKKyNlbmRpZgkvKiBYL09wZW4gKi8KKworI2lmIGRlZmluZWQgX19VU0VfTUlTQyB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOX0VYVEVOREVECisjIGlmbmRlZiBfX2ludHB0cl90X2RlZmluZWQKK3R5cGVkZWYgX19pbnRwdHJfdCBpbnRwdHJfdDsKKyMgIGRlZmluZSBfX2ludHB0cl90X2RlZmluZWQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfX1VTRV9CU0QgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTgorIyBpZm5kZWYgX19zb2NrbGVuX3RfZGVmaW5lZAordHlwZWRlZiBfX3NvY2tsZW5fdCBzb2NrbGVuX3Q7CisjICBkZWZpbmUgX19zb2NrbGVuX3RfZGVmaW5lZAorIyBlbmRpZgorI2VuZGlmCisKKy8qIFZhbHVlcyBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCB0byBhY2Nlc3MuCisgICBUaGVzZSBtYXkgYmUgT1InZCB0b2dldGhlci4gICovCisjZGVmaW5lCVJfT0sJNAkJLyogVGVzdCBmb3IgcmVhZCBwZXJtaXNzaW9uLiAgKi8KKyNkZWZpbmUJV19PSwkyCQkvKiBUZXN0IGZvciB3cml0ZSBwZXJtaXNzaW9uLiAgKi8KKyNkZWZpbmUJWF9PSwkxCQkvKiBUZXN0IGZvciBleGVjdXRlIHBlcm1pc3Npb24uICAqLworI2RlZmluZQlGX09LCTAJCS8qIFRlc3QgZm9yIGV4aXN0ZW5jZS4gICovCisKKy8qIFRlc3QgZm9yIGFjY2VzcyB0byBOQU1FIHVzaW5nIHRoZSByZWFsIFVJRCBhbmQgcmVhbCBHSUQuICAqLworZXh0ZXJuIGludCBhY2Nlc3MgKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX190eXBlKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworI2lmZGVmIF9fVVNFX0dOVQorLyogVGVzdCBmb3IgYWNjZXNzIHRvIE5BTUUgdXNpbmcgdGhlIGVmZmVjdGl2ZSBVSUQgYW5kIEdJRAorICAgKGFzIG5vcm1hbCBmaWxlIG9wZXJhdGlvbnMgdXNlKS4gICovCitleHRlcm4gaW50IGV1aWRhY2Nlc3MgKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX190eXBlKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworLyogQW4gYWxpYXMgZm9yIGBldWlkYWNjZXNzJywgdXNlZCBieSBzb21lIG90aGVyIHN5c3RlbXMuICAqLworZXh0ZXJuIGludCBlYWNjZXNzIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgaW50IF9fdHlwZSkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisjZW5kaWYKKworI2lmZGVmIF9fVVNFX0FURklMRQorLyogVGVzdCBmb3IgYWNjZXNzIHRvIEZJTEUgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBGRCBpcyBvcGVuIG9uLgorICAgSWYgQVRfRUFDQ0VTUyBpcyBzZXQgaW4gRkxBRywgdGhlbiB1c2UgZWZmZWN0aXZlIElEcyBsaWtlIGBlYWNjZXNzJywKKyAgIG90aGVyd2lzZSB1c2UgcmVhbCBJRHMgbGlrZSBgYWNjZXNzJy4gICovCitleHRlcm4gaW50IGZhY2Nlc3NhdCAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19maWxlLCBpbnQgX190eXBlLCBpbnQgX19mbGFnKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDIpKSBfX3d1cjsKKyNlbmRpZiAvKiBVc2UgR05VLiAgKi8KKworCisvKiBWYWx1ZXMgZm9yIHRoZSBXSEVOQ0UgYXJndW1lbnQgdG8gbHNlZWsuICAqLworI2lmbmRlZglfU1RESU9fSAkJLyogPHN0ZGlvLmg+IGhhcyB0aGUgc2FtZSBkZWZpbml0aW9ucy4gICovCisjIGRlZmluZSBTRUVLX1NFVAkwCS8qIFNlZWsgZnJvbSBiZWdpbm5pbmcgb2YgZmlsZS4gICovCisjIGRlZmluZSBTRUVLX0NVUgkxCS8qIFNlZWsgZnJvbSBjdXJyZW50IHBvc2l0aW9uLiAgKi8KKyMgZGVmaW5lIFNFRUtfRU5ECTIJLyogU2VlayBmcm9tIGVuZCBvZiBmaWxlLiAgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfX1VTRV9CU0QgJiYgIWRlZmluZWQgTF9TRVQKKy8qIE9sZCBCU0QgbmFtZXMgZm9yIHRoZSBzYW1lIGNvbnN0YW50czsganVzdCBmb3IgY29tcGF0aWJpbGl0eS4gICovCisjIGRlZmluZSBMX1NFVAkJU0VFS19TRVQKKyMgZGVmaW5lIExfSU5DUgkJU0VFS19DVVIKKyMgZGVmaW5lIExfWFRORAkJU0VFS19FTkQKKyNlbmRpZgorCisKKy8qIE1vdmUgRkQncyBmaWxlIHBvc2l0aW9uIHRvIE9GRlNFVCBieXRlcyBmcm9tIHRoZQorICAgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIChpZiBXSEVOQ0UgaXMgU0VFS19TRVQpLAorICAgdGhlIGN1cnJlbnQgcG9zaXRpb24gKGlmIFdIRU5DRSBpcyBTRUVLX0NVUiksCisgICBvciB0aGUgZW5kIG9mIHRoZSBmaWxlIChpZiBXSEVOQ0UgaXMgU0VFS19FTkQpLgorICAgUmV0dXJuIHRoZSBuZXcgZmlsZSBwb3NpdGlvbi4gICovCisjaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKK2V4dGVybiBfX29mZl90IGxzZWVrIChpbnQgX19mZCwgX19vZmZfdCBfX29mZnNldCwgaW50IF9fd2hlbmNlKSBfX1RIUk9XOworI2Vsc2UKKyMgaWZkZWYgX19SRURJUkVDVF9OVEgKK2V4dGVybiBfX29mZjY0X3QgX19SRURJUkVDVF9OVEggKGxzZWVrLAorCQkJCSAoaW50IF9fZmQsIF9fb2ZmNjRfdCBfX29mZnNldCwgaW50IF9fd2hlbmNlKSwKKwkJCQkgbHNlZWs2NCk7CisjIGVsc2UKKyMgIGRlZmluZSBsc2VlayBsc2VlazY0CisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAorZXh0ZXJuIF9fb2ZmNjRfdCBsc2VlazY0IChpbnQgX19mZCwgX19vZmY2NF90IF9fb2Zmc2V0LCBpbnQgX193aGVuY2UpCisgICAgIF9fVEhST1c7CisjZW5kaWYKKworLyogQ2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBGRC4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aAorICAgX19USFJPVy4gICovCitleHRlcm4gaW50IGNsb3NlIChpbnQgX19mZCk7CisKKy8qIFJlYWQgTkJZVEVTIGludG8gQlVGIGZyb20gRkQuICBSZXR1cm4gdGhlCisgICBudW1iZXIgcmVhZCwgLTEgZm9yIGVycm9ycyBvciAwIGZvciBFT0YuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGgKKyAgIF9fVEhST1cuICAqLworZXh0ZXJuIHNzaXplX3QgcmVhZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpIF9fd3VyOworCisvKiBXcml0ZSBOIGJ5dGVzIG9mIEJVRiB0byBGRC4gIFJldHVybiB0aGUgbnVtYmVyIHdyaXR0ZW4sIG9yIC0xLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoCisgICBfX1RIUk9XLiAgKi8KK2V4dGVybiBzc2l6ZV90IHdyaXRlIChpbnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbikgX193dXI7CisKKyNpZmRlZiBfX1VTRV9VTklYOTgKKyMgaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKKy8qIFJlYWQgTkJZVEVTIGludG8gQlVGIGZyb20gRkQgYXQgdGhlIGdpdmVuIHBvc2l0aW9uIE9GRlNFVCB3aXRob3V0CisgICBjaGFuZ2luZyB0aGUgZmlsZSBwb2ludGVyLiAgUmV0dXJuIHRoZSBudW1iZXIgcmVhZCwgLTEgZm9yIGVycm9ycworICAgb3IgMCBmb3IgRU9GLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoCisgICBfX1RIUk9XLiAgKi8KK2V4dGVybiBzc2l6ZV90IHByZWFkIChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywKKwkJICAgICAgX19vZmZfdCBfX29mZnNldCkgX193dXI7CisKKy8qIFdyaXRlIE4gYnl0ZXMgb2YgQlVGIHRvIEZEIGF0IHRoZSBnaXZlbiBwb3NpdGlvbiBPRkZTRVQgd2l0aG91dAorICAgY2hhbmdpbmcgdGhlIGZpbGUgcG9pbnRlci4gIFJldHVybiB0aGUgbnVtYmVyIHdyaXR0ZW4sIG9yIC0xLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoCisgICBfX1RIUk9XLiAgKi8KK2V4dGVybiBzc2l6ZV90IHB3cml0ZSAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24sCisJCSAgICAgICBfX29mZl90IF9fb2Zmc2V0KSBfX3d1cjsKKyMgZWxzZQorIyAgaWZkZWYgX19SRURJUkVDVAorZXh0ZXJuIHNzaXplX3QgX19SRURJUkVDVCAocHJlYWQsIChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywKKwkJCQkgICBfX29mZjY0X3QgX19vZmZzZXQpLAorCQkJICAgcHJlYWQ2NCkgX193dXI7CitleHRlcm4gc3NpemVfdCBfX1JFRElSRUNUIChwd3JpdGUsIChpbnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1ZiwKKwkJCQkgICAgc2l6ZV90IF9fbmJ5dGVzLCBfX29mZjY0X3QgX19vZmZzZXQpLAorCQkJICAgcHdyaXRlNjQpIF9fd3VyOworIyAgZWxzZQorIyAgIGRlZmluZSBwcmVhZCBwcmVhZDY0CisjICAgZGVmaW5lIHB3cml0ZSBwd3JpdGU2NAorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAorLyogUmVhZCBOQllURVMgaW50byBCVUYgZnJvbSBGRCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24gT0ZGU0VUIHdpdGhvdXQKKyAgIGNoYW5naW5nIHRoZSBmaWxlIHBvaW50ZXIuICBSZXR1cm4gdGhlIG51bWJlciByZWFkLCAtMSBmb3IgZXJyb3JzCisgICBvciAwIGZvciBFT0YuICAqLworZXh0ZXJuIHNzaXplX3QgcHJlYWQ2NCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsCisJCQlfX29mZjY0X3QgX19vZmZzZXQpIF9fd3VyOworLyogV3JpdGUgTiBieXRlcyBvZiBCVUYgdG8gRkQgYXQgdGhlIGdpdmVuIHBvc2l0aW9uIE9GRlNFVCB3aXRob3V0CisgICBjaGFuZ2luZyB0aGUgZmlsZSBwb2ludGVyLiAgUmV0dXJuIHRoZSBudW1iZXIgd3JpdHRlbiwgb3IgLTEuICAqLworZXh0ZXJuIHNzaXplX3QgcHdyaXRlNjQgKGludCBfX2ZkLCBfX2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLAorCQkJIF9fb2ZmNjRfdCBfX29mZnNldCkgX193dXI7CisjIGVuZGlmCisjZW5kaWYKKworLyogQ3JlYXRlIGEgb25lLXdheSBjb21tdW5pY2F0aW9uIGNoYW5uZWwgKHBpcGUpLgorICAgSWYgc3VjY2Vzc2Z1bCwgdHdvIGZpbGUgZGVzY3JpcHRvcnMgYXJlIHN0b3JlZCBpbiBQSVBFREVTOworICAgYnl0ZXMgd3JpdHRlbiBvbiBQSVBFREVTWzFdIGNhbiBiZSByZWFkIGZyb20gUElQRURFU1swXS4KKyAgIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCAtMSBpZiBub3QuICAqLworZXh0ZXJuIGludCBwaXBlIChpbnQgX19waXBlZGVzWzJdKSBfX1RIUk9XIF9fd3VyOworCisjaWZkZWYgX19VU0VfR05VCisvKiBTYW1lIGFzIHBpcGUgYnV0IGFwcGx5IGZsYWdzIHBhc3NlZCBpbiBGTEFHUyB0byB0aGUgbmV3IGZpbGUKKyAgIGRlc2NyaXB0b3JzLiAgKi8KK2V4dGVybiBpbnQgcGlwZTIgKGludCBfX3BpcGVkZXNbMl0sIGludCBfX2ZsYWdzKSBfX1RIUk9XIF9fd3VyOworI2VuZGlmCisKKy8qIFNjaGVkdWxlIGFuIGFsYXJtLiAgSW4gU0VDT05EUyBzZWNvbmRzLCB0aGUgcHJvY2VzcyB3aWxsIGdldCBhIFNJR0FMUk0uCisgICBJZiBTRUNPTkRTIGlzIHplcm8sIGFueSBjdXJyZW50bHkgc2NoZWR1bGVkIGFsYXJtIHdpbGwgYmUgY2FuY2VsbGVkLgorICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHJlbWFpbmluZyB1bnRpbCB0aGUgbGFzdAorICAgYWxhcm0gc2NoZWR1bGVkIHdvdWxkIGhhdmUgc2lnbmFsZWQsIG9yIHplcm8gaWYgdGhlcmUgd2Fzbid0IG9uZS4KKyAgIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSB0byBpbmRpY2F0ZSBhbiBlcnJvciwgYnV0IHlvdSBjYW4gc2V0IGBlcnJubycKKyAgIHRvIDAgYW5kIGNoZWNrIGl0cyB2YWx1ZSBhZnRlciBjYWxsaW5nIGBhbGFybScsIGFuZCB0aGlzIG1pZ2h0IHRlbGwgeW91LgorICAgVGhlIHNpZ25hbCBtYXkgY29tZSBsYXRlIGR1ZSB0byBwcm9jZXNzb3Igc2NoZWR1bGluZy4gICovCitleHRlcm4gdW5zaWduZWQgaW50IGFsYXJtICh1bnNpZ25lZCBpbnQgX19zZWNvbmRzKSBfX1RIUk9XOworCisvKiBNYWtlIHRoZSBwcm9jZXNzIHNsZWVwIGZvciBTRUNPTkRTIHNlY29uZHMsIG9yIHVudGlsIGEgc2lnbmFsIGFycml2ZXMKKyAgIGFuZCBpcyBub3QgaWdub3JlZC4gIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBsZXNzCisgICB0aGFuIFNFQ09ORFMgd2hpY2ggaXQgYWN0dWFsbHkgc2xlcHQgKHRodXMgemVybyBpZiBpdCBzbGVwdCB0aGUgZnVsbCB0aW1lKS4KKyAgIElmIGEgc2lnbmFsIGhhbmRsZXIgZG9lcyBhIGBsb25nam1wJyBvciBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlCisgICBTSUdBTFJNIHNpZ25hbCB3aGlsZSBpbnNpZGUgYHNsZWVwJyBjYWxsLCB0aGUgaGFuZGxpbmcgb2YgdGhlIFNJR0FMUk0KKyAgIHNpZ25hbCBhZnRlcndhcmRzIGlzIHVuZGVmaW5lZC4gIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSB0byBpbmRpY2F0ZQorICAgZXJyb3IsIGJ1dCBpZiBgc2xlZXAnIHJldHVybnMgU0VDT05EUywgaXQgcHJvYmFibHkgZGlkbid0IHdvcmsuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGgKKyAgIF9fVEhST1cuICAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBzbGVlcCAodW5zaWduZWQgaW50IF9fc2Vjb25kcyk7CisKKyNpZiBkZWZpbmVkIF9fVVNFX0JTRCB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOX0VYVEVOREVECisvKiBTZXQgYW4gYWxhcm0gdG8gZ28gb2ZmIChnZW5lcmF0aW5nIGEgU0lHQUxSTSBzaWduYWwpIGluIFZBTFVFCisgICBtaWNyb3NlY29uZHMuICBJZiBJTlRFUlZBTCBpcyBub256ZXJvLCB3aGVuIHRoZSBhbGFybSBnb2VzIG9mZiwgdGhlCisgICB0aW1lciBpcyByZXNldCB0byBnbyBvZmYgZXZlcnkgSU5URVJWQUwgbWljcm9zZWNvbmRzIHRoZXJlYWZ0ZXIuCisgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbWljcm9zZWNvbmRzIHJlbWFpbmluZyBiZWZvcmUgdGhlIGFsYXJtLiAgKi8KK2V4dGVybiBfX3VzZWNvbmRzX3QgdWFsYXJtIChfX3VzZWNvbmRzX3QgX192YWx1ZSwgX191c2Vjb25kc190IF9faW50ZXJ2YWwpCisgICAgIF9fVEhST1c7CisKKy8qIFNsZWVwIFVTRUNPTkRTIG1pY3Jvc2Vjb25kcywgb3IgdW50aWwgYSBzaWduYWwgYXJyaXZlcyB0aGF0IGlzIG5vdCBibG9ja2VkCisgICBvciBpZ25vcmVkLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoCisgICBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgdXNsZWVwIChfX3VzZWNvbmRzX3QgX191c2Vjb25kcyk7CisjZW5kaWYKKworCisvKiBTdXNwZW5kIHRoZSBwcm9jZXNzIHVudGlsIGEgc2lnbmFsIGFycml2ZXMuCisgICBUaGlzIGFsd2F5cyByZXR1cm5zIC0xIGFuZCBzZXRzIGBlcnJubycgdG8gRUlOVFIuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGgKKyAgIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBwYXVzZSAodm9pZCk7CisKKworLyogQ2hhbmdlIHRoZSBvd25lciBhbmQgZ3JvdXAgb2YgRklMRS4gICovCitleHRlcm4gaW50IGNob3duIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9fZ3JvdXApCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpIF9fd3VyOworCisjaWYgZGVmaW5lZCBfX1VTRV9CU0QgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTl9FWFRFTkRFRAorLyogQ2hhbmdlIHRoZSBvd25lciBhbmQgZ3JvdXAgb2YgdGhlIGZpbGUgdGhhdCBGRCBpcyBvcGVuIG9uLiAgKi8KK2V4dGVybiBpbnQgZmNob3duIChpbnQgX19mZCwgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9fZ3JvdXApIF9fVEhST1cgX193dXI7CisKKworLyogQ2hhbmdlIG93bmVyIGFuZCBncm91cCBvZiBGSUxFLCBpZiBpdCBpcyBhIHN5bWJvbGljCisgICBsaW5rIHRoZSBvd25lcnNoaXAgb2YgdGhlIHN5bWJvbGljIGxpbmsgaXMgY2hhbmdlZC4gICovCitleHRlcm4gaW50IGxjaG93biAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKSBfX3d1cjsKKworI2VuZGlmIC8qIFVzZSBCU0QgfHwgWC9PcGVuIFVuaXguICAqLworCisjaWZkZWYgX19VU0VfQVRGSUxFCisvKiBDaGFuZ2UgdGhlIG93bmVyIGFuZCBncm91cCBvZiBGSUxFIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3RvcnkgRkQgaXMgb3BlbgorICAgb24uICAqLworZXh0ZXJuIGludCBmY2hvd25hdCAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19maWxlLCBfX3VpZF90IF9fb3duZXIsCisJCSAgICAgX19naWRfdCBfX2dyb3VwLCBpbnQgX19mbGFnKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDIpKSBfX3d1cjsKKyNlbmRpZiAvKiBVc2UgR05VLiAgKi8KKworLyogQ2hhbmdlIHRoZSBwcm9jZXNzJ3Mgd29ya2luZyBkaXJlY3RvcnkgdG8gUEFUSC4gICovCitleHRlcm4gaW50IGNoZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgX19USFJPVyBfX25vbm51bGwgKCgxKSkgX193dXI7CisKKyNpZiBkZWZpbmVkIF9fVVNFX0JTRCB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOX0VYVEVOREVECisvKiBDaGFuZ2UgdGhlIHByb2Nlc3MncyB3b3JraW5nIGRpcmVjdG9yeSB0byB0aGUgb25lIEZEIGlzIG9wZW4gb24uICAqLworZXh0ZXJuIGludCBmY2hkaXIgKGludCBfX2ZkKSBfX1RIUk9XIF9fd3VyOworI2VuZGlmCisKKy8qIEdldCB0aGUgcGF0aG5hbWUgb2YgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksCisgICBhbmQgcHV0IGl0IGluIFNJWkUgYnl0ZXMgb2YgQlVGLiAgUmV0dXJucyBOVUxMIGlmIHRoZQorICAgZGlyZWN0b3J5IGNvdWxkbid0IGJlIGRldGVybWluZWQgb3IgU0laRSB3YXMgdG9vIHNtYWxsLgorICAgSWYgc3VjY2Vzc2Z1bCwgcmV0dXJucyBCVUYuICBJbiBHTlUsIGlmIEJVRiBpcyBOVUxMLAorICAgYW4gYXJyYXkgaXMgYWxsb2NhdGVkIHdpdGggYG1hbGxvYyc7IHRoZSBhcnJheSBpcyBTSVpFCisgICBieXRlcyBsb25nLCB1bmxlc3MgU0laRSA9PSAwLCBpbiB3aGljaCBjYXNlIGl0IGlzIGFzCisgICBiaWcgYXMgbmVjZXNzYXJ5LiAgKi8KK2V4dGVybiBjaGFyICpnZXRjd2QgKGNoYXIgKl9fYnVmLCBzaXplX3QgX19zaXplKSBfX1RIUk9XIF9fd3VyOworCisjaWZkZWYJX19VU0VfR05VCisvKiBSZXR1cm4gYSBtYWxsb2MnZCBzdHJpbmcgY29udGFpbmluZyB0aGUgY3VycmVudCBkaXJlY3RvcnkgbmFtZS4KKyAgIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgUFdEJyBpcyBzZXQsIGFuZCBpdHMgdmFsdWUgaXMgY29ycmVjdCwKKyAgIHRoYXQgdmFsdWUgaXMgdXNlZC4gICovCitleHRlcm4gY2hhciAqZ2V0X2N1cnJlbnRfZGlyX25hbWUgKHZvaWQpIF9fVEhST1c7CisjZW5kaWYKKworI2lmIGRlZmluZWQgX19VU0VfQlNEIHx8IGRlZmluZWQgX19VU0VfWE9QRU5fRVhURU5ERUQKKy8qIFB1dCB0aGUgYWJzb2x1dGUgcGF0aG5hbWUgb2YgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaW4gQlVGLgorICAgSWYgc3VjY2Vzc2Z1bCwgcmV0dXJuIEJVRi4gIElmIG5vdCwgcHV0IGFuIGVycm9yIG1lc3NhZ2UgaW4KKyAgIEJVRiBhbmQgcmV0dXJuIE5VTEwuICBCVUYgc2hvdWxkIGJlIGF0IGxlYXN0IFBBVEhfTUFYIGJ5dGVzIGxvbmcuICAqLworZXh0ZXJuIGNoYXIgKmdldHdkIChjaGFyICpfX2J1ZikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSkgX19hdHRyaWJ1dGVfZGVwcmVjYXRlZF9fIF9fd3VyOworI2VuZGlmCisKKworLyogRHVwbGljYXRlIEZELCByZXR1cm5pbmcgYSBuZXcgZmlsZSBkZXNjcmlwdG9yIG9uIHRoZSBzYW1lIGZpbGUuICAqLworZXh0ZXJuIGludCBkdXAgKGludCBfX2ZkKSBfX1RIUk9XIF9fd3VyOworCisvKiBEdXBsaWNhdGUgRkQgdG8gRkQyLCBjbG9zaW5nIEZEMiBhbmQgbWFraW5nIGl0IG9wZW4gb24gdGhlIHNhbWUgZmlsZS4gICovCitleHRlcm4gaW50IGR1cDIgKGludCBfX2ZkLCBpbnQgX19mZDIpIF9fVEhST1c7CisKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIER1cGxpY2F0ZSBGRCB0byBGRDIsIGNsb3NpbmcgRkQyIGFuZCBtYWtpbmcgaXQgb3BlbiBvbiB0aGUgc2FtZQorICAgZmlsZSB3aGlsZSBzZXR0aW5nIGZsYWdzIGFjY29yZGluZyB0byBGTEFHUy4gICovCitleHRlcm4gaW50IGR1cDMgKGludCBfX2ZkLCBpbnQgX19mZDIsIGludCBfX2ZsYWdzKSBfX1RIUk9XOworI2VuZGlmCisKKy8qIE5VTEwtdGVybWluYXRlZCBhcnJheSBvZiAiTkFNRT1WQUxVRSIgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgKi8KK2V4dGVybiBjaGFyICoqX19lbnZpcm9uOworI2lmZGVmIF9fVVNFX0dOVQorZXh0ZXJuIGNoYXIgKiplbnZpcm9uOworI2VuZGlmCisKKworLyogUmVwbGFjZSB0aGUgY3VycmVudCBwcm9jZXNzLCBleGVjdXRpbmcgUEFUSCB3aXRoIGFyZ3VtZW50cyBBUkdWIGFuZAorICAgZW52aXJvbm1lbnQgRU5WUC4gIEFSR1YgYW5kIEVOVlAgYXJlIHRlcm1pbmF0ZWQgYnkgTlVMTCBwb2ludGVycy4gICovCitleHRlcm4gaW50IGV4ZWN2ZSAoX19jb25zdCBjaGFyICpfX3BhdGgsIGNoYXIgKl9fY29uc3QgX19hcmd2W10sCisJCSAgIGNoYXIgKl9fY29uc3QgX19lbnZwW10pIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisjaWZkZWYgX19VU0VfR05VCisvKiBFeGVjdXRlIHRoZSBmaWxlIEZEIHJlZmVycyB0bywgb3ZlcmxheWluZyB0aGUgcnVubmluZyBwcm9ncmFtIGltYWdlLgorICAgQVJHViBhbmQgRU5WUCBhcmUgcGFzc2VkIHRvIHRoZSBuZXcgcHJvZ3JhbSwgYXMgZm9yIGBleGVjdmUnLiAgKi8KK2V4dGVybiBpbnQgZmV4ZWN2ZSAoaW50IF9fZmQsIGNoYXIgKl9fY29uc3QgX19hcmd2W10sIGNoYXIgKl9fY29uc3QgX19lbnZwW10pCisgICAgIF9fVEhST1c7CisjZW5kaWYKKworCisvKiBFeGVjdXRlIFBBVEggd2l0aCBhcmd1bWVudHMgQVJHViBhbmQgZW52aXJvbm1lbnQgZnJvbSBgZW52aXJvbicuICAqLworZXh0ZXJuIGludCBleGVjdiAoX19jb25zdCBjaGFyICpfX3BhdGgsIGNoYXIgKl9fY29uc3QgX19hcmd2W10pCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisvKiBFeGVjdXRlIFBBVEggd2l0aCBhbGwgYXJndW1lbnRzIGFmdGVyIFBBVEggdW50aWwgYSBOVUxMIHBvaW50ZXIsCisgICBhbmQgdGhlIGFyZ3VtZW50IGFmdGVyIHRoYXQgZm9yIGVudmlyb25tZW50LiAgKi8KK2V4dGVybiBpbnQgZXhlY2xlIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19jb25zdCBjaGFyICpfX2FyZywgLi4uKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworLyogRXhlY3V0ZSBQQVRIIHdpdGggYWxsIGFyZ3VtZW50cyBhZnRlciBQQVRIIHVudGlsCisgICBhIE5VTEwgcG9pbnRlciBhbmQgZW52aXJvbm1lbnQgZnJvbSBgZW52aXJvbicuICAqLworZXh0ZXJuIGludCBleGVjbCAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKy8qIEV4ZWN1dGUgRklMRSwgc2VhcmNoaW5nIGluIHRoZSBgUEFUSCcgZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgaXQgY29udGFpbnMKKyAgIG5vIHNsYXNoZXMsIHdpdGggYXJndW1lbnRzIEFSR1YgYW5kIGVudmlyb25tZW50IGZyb20gYGVudmlyb24nLiAgKi8KK2V4dGVybiBpbnQgZXhlY3ZwIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKy8qIEV4ZWN1dGUgRklMRSwgc2VhcmNoaW5nIGluIHRoZSBgUEFUSCcgZW52aXJvbm1lbnQgdmFyaWFibGUgaWYKKyAgIGl0IGNvbnRhaW5zIG5vIHNsYXNoZXMsIHdpdGggYWxsIGFyZ3VtZW50cyBhZnRlciBGSUxFIHVudGlsIGEKKyAgIE5VTEwgcG9pbnRlciBhbmQgZW52aXJvbm1lbnQgZnJvbSBgZW52aXJvbicuICAqLworZXh0ZXJuIGludCBleGVjbHAgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAuLi4pCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpOworCisKKyNpZiBkZWZpbmVkIF9fVVNFX01JU0MgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTgorLyogQWRkIElOQyB0byBwcmlvcml0eSBvZiB0aGUgY3VycmVudCBwcm9jZXNzLiAgKi8KK2V4dGVybiBpbnQgbmljZSAoaW50IF9faW5jKSBfX1RIUk9XIF9fd3VyOworI2VuZGlmCisKKworLyogVGVybWluYXRlIHByb2dyYW0gZXhlY3V0aW9uIHdpdGggdGhlIGxvdy1vcmRlciA4IGJpdHMgb2YgU1RBVFVTLiAgKi8KK2V4dGVybiB2b2lkIF9leGl0IChpbnQgX19zdGF0dXMpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKKworCisvKiBHZXQgdGhlIGBfUENfKicgc3ltYm9scyBmb3IgdGhlIE5BTUUgYXJndW1lbnQgdG8gYHBhdGhjb25mJyBhbmQgYGZwYXRoY29uZic7CisgICB0aGUgYF9TQ18qJyBzeW1ib2xzIGZvciB0aGUgTkFNRSBhcmd1bWVudCB0byBgc3lzY29uZic7CisgICBhbmQgdGhlIGBfQ1NfKicgc3ltYm9scyBmb3IgdGhlIE5BTUUgYXJndW1lbnQgdG8gYGNvbmZzdHInLiAgKi8KKyNpbmNsdWRlIDxiaXRzL2NvbmZuYW1lLmg+CisKKy8qIEdldCBmaWxlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYWJvdXQgUEFUSC4gICovCitleHRlcm4gbG9uZyBpbnQgcGF0aGNvbmYgKF9fY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19uYW1lKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKTsKKworLyogR2V0IGZpbGUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBhYm91dCBkZXNjcmlwdG9yIEZELiAgKi8KK2V4dGVybiBsb25nIGludCBmcGF0aGNvbmYgKGludCBfX2ZkLCBpbnQgX19uYW1lKSBfX1RIUk9XOworCisvKiBHZXQgdGhlIHZhbHVlIG9mIHRoZSBzeXN0ZW0gdmFyaWFibGUgTkFNRS4gICovCitleHRlcm4gbG9uZyBpbnQgc3lzY29uZiAoaW50IF9fbmFtZSkgX19USFJPVzsKKworI2lmZGVmCV9fVVNFX1BPU0lYMgorLyogR2V0IHRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nLXZhbHVlZCBzeXN0ZW0gdmFyaWFibGUgTkFNRS4gICovCitleHRlcm4gc2l6ZV90IGNvbmZzdHIgKGludCBfX25hbWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19sZW4pIF9fVEhST1c7CisjZW5kaWYKKworCisvKiBHZXQgdGhlIHByb2Nlc3MgSUQgb2YgdGhlIGNhbGxpbmcgcHJvY2Vzcy4gICovCitleHRlcm4gX19waWRfdCBnZXRwaWQgKHZvaWQpIF9fVEhST1c7CisKKy8qIEdldCB0aGUgcHJvY2VzcyBJRCBvZiB0aGUgY2FsbGluZyBwcm9jZXNzJ3MgcGFyZW50LiAgKi8KK2V4dGVybiBfX3BpZF90IGdldHBwaWQgKHZvaWQpIF9fVEhST1c7CisKKy8qIEdldCB0aGUgcHJvY2VzcyBncm91cCBJRCBvZiB0aGUgY2FsbGluZyBwcm9jZXNzLgorICAgVGhpcyBmdW5jdGlvbiBpcyBkaWZmZXJlbnQgb24gb2xkIEJTRC4gKi8KKyNpZm5kZWYgX19GQVZPUl9CU0QKK2V4dGVybiBfX3BpZF90IGdldHBncnAgKHZvaWQpIF9fVEhST1c7CisjZWxzZQorIyBpZmRlZiBfX1JFRElSRUNUX05USAorZXh0ZXJuIF9fcGlkX3QgX19SRURJUkVDVF9OVEggKGdldHBncnAsIChfX3BpZF90IF9fcGlkKSwgX19nZXRwZ2lkKTsKKyMgZWxzZQorIyAgZGVmaW5lIGdldHBncnAgX19nZXRwZ2lkCisjIGVuZGlmCisjZW5kaWYKKworLyogR2V0IHRoZSBwcm9jZXNzIGdyb3VwIElEIG9mIHByb2Nlc3MgUElELiAgKi8KK2V4dGVybiBfX3BpZF90IF9fZ2V0cGdpZCAoX19waWRfdCBfX3BpZCkgX19USFJPVzsKKyNpZmRlZiBfX1VTRV9YT1BFTl9FWFRFTkRFRAorZXh0ZXJuIF9fcGlkX3QgZ2V0cGdpZCAoX19waWRfdCBfX3BpZCkgX19USFJPVzsKKyNlbmRpZgorCisKKy8qIFNldCB0aGUgcHJvY2VzcyBncm91cCBJRCBvZiB0aGUgcHJvY2VzcyBtYXRjaGluZyBQSUQgdG8gUEdJRC4KKyAgIElmIFBJRCBpcyB6ZXJvLCB0aGUgY3VycmVudCBwcm9jZXNzJ3MgcHJvY2VzcyBncm91cCBJRCBpcyBzZXQuCisgICBJZiBQR0lEIGlzIHplcm8sIHRoZSBwcm9jZXNzIElEIG9mIHRoZSBwcm9jZXNzIGlzIHVzZWQuICAqLworZXh0ZXJuIGludCBzZXRwZ2lkIChfX3BpZF90IF9fcGlkLCBfX3BpZF90IF9fcGdpZCkgX19USFJPVzsKKworI2lmIGRlZmluZWQgX19VU0VfU1ZJRCB8fCBkZWZpbmVkIF9fVVNFX0JTRCB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOX0VYVEVOREVECisvKiBCb3RoIFN5c3RlbSBWIGFuZCBCU0QgaGF2ZSBgc2V0cGdycCcgZnVuY3Rpb25zLCBidXQgd2l0aCBkaWZmZXJlbnQKKyAgIGNhbGxpbmcgY29udmVudGlvbnMuICBUaGUgQlNEIGZ1bmN0aW9uIGlzIHRoZSBzYW1lIGFzIFBPU0lYLjEgYHNldHBnaWQnCisgICAoYWJvdmUpLiAgVGhlIFN5c3RlbSBWIGZ1bmN0aW9uIHRha2VzIG5vIGFyZ3VtZW50cyBhbmQgcHV0cyB0aGUgY2FsbGluZworICAgcHJvY2VzcyBpbiBpdHMgb24gZ3JvdXAgbGlrZSBgc2V0cGdpZCAoMCwgMCknLgorCisgICBOZXcgcHJvZ3JhbXMgc2hvdWxkIGFsd2F5cyB1c2UgYHNldHBnaWQnIGluc3RlYWQuCisKKyAgIFRoZSBkZWZhdWx0IGluIEdOVSBpcyB0byBwcm92aWRlIHRoZSBTeXN0ZW0gViBmdW5jdGlvbi4gIFRoZSBCU0QKKyAgIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSB1bmRlciAtRF9CU0RfU09VUkNFLiAgKi8KKworIyBpZm5kZWYgX19GQVZPUl9CU0QKKworLyogU2V0IHRoZSBwcm9jZXNzIGdyb3VwIElEIG9mIHRoZSBjYWxsaW5nIHByb2Nlc3MgdG8gaXRzIG93biBQSUQuCisgICBUaGlzIGlzIGV4YWN0bHkgdGhlIHNhbWUgYXMgYHNldHBnaWQgKDAsIDApJy4gICovCitleHRlcm4gaW50IHNldHBncnAgKHZvaWQpIF9fVEhST1c7CisKKyMgZWxzZQorCisvKiBBbm90aGVyIG5hbWUgZm9yIGBzZXRwZ2lkJyAoYWJvdmUpLiAgKi8KKyMgIGlmZGVmIF9fUkVESVJFQ1RfTlRICitleHRlcm4gaW50IF9fUkVESVJFQ1RfTlRIIChzZXRwZ3JwLCAoX19waWRfdCBfX3BpZCwgX19waWRfdCBfX3BncnApLCBzZXRwZ2lkKTsKKyMgIGVsc2UKKyMgICBkZWZpbmUgc2V0cGdycCBzZXRwZ2lkCisjICBlbmRpZgorCisjIGVuZGlmCS8qIEZhdm9yIEJTRC4gICovCisjZW5kaWYJLyogVXNlIFNWSUQgb3IgQlNELiAgKi8KKworLyogQ3JlYXRlIGEgbmV3IHNlc3Npb24gd2l0aCB0aGUgY2FsbGluZyBwcm9jZXNzIGFzIGl0cyBsZWFkZXIuCisgICBUaGUgcHJvY2VzcyBncm91cCBJRHMgb2YgdGhlIHNlc3Npb24gYW5kIHRoZSBjYWxsaW5nIHByb2Nlc3MKKyAgIGFyZSBzZXQgdG8gdGhlIHByb2Nlc3MgSUQgb2YgdGhlIGNhbGxpbmcgcHJvY2Vzcywgd2hpY2ggaXMgcmV0dXJuZWQuICAqLworZXh0ZXJuIF9fcGlkX3Qgc2V0c2lkICh2b2lkKSBfX1RIUk9XOworCisjaWZkZWYgX19VU0VfWE9QRU5fRVhURU5ERUQKKy8qIFJldHVybiB0aGUgc2Vzc2lvbiBJRCBvZiB0aGUgZ2l2ZW4gcHJvY2Vzcy4gICovCitleHRlcm4gX19waWRfdCBnZXRzaWQgKF9fcGlkX3QgX19waWQpIF9fVEhST1c7CisjZW5kaWYKKworLyogR2V0IHRoZSByZWFsIHVzZXIgSUQgb2YgdGhlIGNhbGxpbmcgcHJvY2Vzcy4gICovCitleHRlcm4gX191aWRfdCBnZXR1aWQgKHZvaWQpIF9fVEhST1c7CisKKy8qIEdldCB0aGUgZWZmZWN0aXZlIHVzZXIgSUQgb2YgdGhlIGNhbGxpbmcgcHJvY2Vzcy4gICovCitleHRlcm4gX191aWRfdCBnZXRldWlkICh2b2lkKSBfX1RIUk9XOworCisvKiBHZXQgdGhlIHJlYWwgZ3JvdXAgSUQgb2YgdGhlIGNhbGxpbmcgcHJvY2Vzcy4gICovCitleHRlcm4gX19naWRfdCBnZXRnaWQgKHZvaWQpIF9fVEhST1c7CisKKy8qIEdldCB0aGUgZWZmZWN0aXZlIGdyb3VwIElEIG9mIHRoZSBjYWxsaW5nIHByb2Nlc3MuICAqLworZXh0ZXJuIF9fZ2lkX3QgZ2V0ZWdpZCAodm9pZCkgX19USFJPVzsKKworLyogSWYgU0laRSBpcyB6ZXJvLCByZXR1cm4gdGhlIG51bWJlciBvZiBzdXBwbGVtZW50YXJ5IGdyb3VwcworICAgdGhlIGNhbGxpbmcgcHJvY2VzcyBpcyBpbi4gIE90aGVyd2lzZSwgZmlsbCBpbiB0aGUgZ3JvdXAgSURzCisgICBvZiBpdHMgc3VwcGxlbWVudGFyeSBncm91cHMgaW4gTElTVCBhbmQgcmV0dXJuIHRoZSBudW1iZXIgd3JpdHRlbi4gICovCitleHRlcm4gaW50IGdldGdyb3VwcyAoaW50IF9fc2l6ZSwgX19naWRfdCBfX2xpc3RbXSkgX19USFJPVyBfX3d1cjsKKworI2lmZGVmCV9fVVNFX0dOVQorLyogUmV0dXJuIG5vbnplcm8gaWZmIHRoZSBjYWxsaW5nIHByb2Nlc3MgaXMgaW4gZ3JvdXAgR0lELiAgKi8KK2V4dGVybiBpbnQgZ3JvdXBfbWVtYmVyIChfX2dpZF90IF9fZ2lkKSBfX1RIUk9XOworI2VuZGlmCisKKy8qIFNldCB0aGUgdXNlciBJRCBvZiB0aGUgY2FsbGluZyBwcm9jZXNzIHRvIFVJRC4KKyAgIElmIHRoZSBjYWxsaW5nIHByb2Nlc3MgaXMgdGhlIHN1cGVyLXVzZXIsIHNldCB0aGUgcmVhbAorICAgYW5kIGVmZmVjdGl2ZSB1c2VyIElEcywgYW5kIHRoZSBzYXZlZCBzZXQtdXNlci1JRCB0byBVSUQ7CisgICBpZiBub3QsIHRoZSBlZmZlY3RpdmUgdXNlciBJRCBpcyBzZXQgdG8gVUlELiAgKi8KK2V4dGVybiBpbnQgc2V0dWlkIChfX3VpZF90IF9fdWlkKSBfX1RIUk9XOworCisjaWYgZGVmaW5lZCBfX1VTRV9CU0QgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTl9FWFRFTkRFRAorLyogU2V0IHRoZSByZWFsIHVzZXIgSUQgb2YgdGhlIGNhbGxpbmcgcHJvY2VzcyB0byBSVUlELAorICAgYW5kIHRoZSBlZmZlY3RpdmUgdXNlciBJRCBvZiB0aGUgY2FsbGluZyBwcm9jZXNzIHRvIEVVSUQuICAqLworZXh0ZXJuIGludCBzZXRyZXVpZCAoX191aWRfdCBfX3J1aWQsIF9fdWlkX3QgX19ldWlkKSBfX1RIUk9XOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIF9fVVNFX0JTRCB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOMksKKy8qIFNldCB0aGUgZWZmZWN0aXZlIHVzZXIgSUQgb2YgdGhlIGNhbGxpbmcgcHJvY2VzcyB0byBVSUQuICAqLworZXh0ZXJuIGludCBzZXRldWlkIChfX3VpZF90IF9fdWlkKSBfX1RIUk9XOworI2VuZGlmIC8qIFVzZSBCU0QuICAqLworCisvKiBTZXQgdGhlIGdyb3VwIElEIG9mIHRoZSBjYWxsaW5nIHByb2Nlc3MgdG8gR0lELgorICAgSWYgdGhlIGNhbGxpbmcgcHJvY2VzcyBpcyB0aGUgc3VwZXItdXNlciwgc2V0IHRoZSByZWFsCisgICBhbmQgZWZmZWN0aXZlIGdyb3VwIElEcywgYW5kIHRoZSBzYXZlZCBzZXQtZ3JvdXAtSUQgdG8gR0lEOworICAgaWYgbm90LCB0aGUgZWZmZWN0aXZlIGdyb3VwIElEIGlzIHNldCB0byBHSUQuICAqLworZXh0ZXJuIGludCBzZXRnaWQgKF9fZ2lkX3QgX19naWQpIF9fVEhST1c7CisKKyNpZiBkZWZpbmVkIF9fVVNFX0JTRCB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOX0VYVEVOREVECisvKiBTZXQgdGhlIHJlYWwgZ3JvdXAgSUQgb2YgdGhlIGNhbGxpbmcgcHJvY2VzcyB0byBSR0lELAorICAgYW5kIHRoZSBlZmZlY3RpdmUgZ3JvdXAgSUQgb2YgdGhlIGNhbGxpbmcgcHJvY2VzcyB0byBFR0lELiAgKi8KK2V4dGVybiBpbnQgc2V0cmVnaWQgKF9fZ2lkX3QgX19yZ2lkLCBfX2dpZF90IF9fZWdpZCkgX19USFJPVzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfX1VTRV9CU0QgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTjJLCisvKiBTZXQgdGhlIGVmZmVjdGl2ZSBncm91cCBJRCBvZiB0aGUgY2FsbGluZyBwcm9jZXNzIHRvIEdJRC4gICovCitleHRlcm4gaW50IHNldGVnaWQgKF9fZ2lkX3QgX19naWQpIF9fVEhST1c7CisjZW5kaWYgLyogVXNlIEJTRC4gICovCisKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIEZldGNoIHRoZSByZWFsIHVzZXIgSUQsIGVmZmVjdGl2ZSB1c2VyIElELCBhbmQgc2F2ZWQtc2V0IHVzZXIgSUQsCisgICBvZiB0aGUgY2FsbGluZyBwcm9jZXNzLiAgKi8KK2V4dGVybiBpbnQgZ2V0cmVzdWlkIChfX3VpZF90ICpfX3J1aWQsIF9fdWlkX3QgKl9fZXVpZCwgX191aWRfdCAqX19zdWlkKQorICAgICBfX1RIUk9XOworCisvKiBGZXRjaCB0aGUgcmVhbCBncm91cCBJRCwgZWZmZWN0aXZlIGdyb3VwIElELCBhbmQgc2F2ZWQtc2V0IGdyb3VwIElELAorICAgb2YgdGhlIGNhbGxpbmcgcHJvY2Vzcy4gICovCitleHRlcm4gaW50IGdldHJlc2dpZCAoX19naWRfdCAqX19yZ2lkLCBfX2dpZF90ICpfX2VnaWQsIF9fZ2lkX3QgKl9fc2dpZCkKKyAgICAgX19USFJPVzsKKworLyogU2V0IHRoZSByZWFsIHVzZXIgSUQsIGVmZmVjdGl2ZSB1c2VyIElELCBhbmQgc2F2ZWQtc2V0IHVzZXIgSUQsCisgICBvZiB0aGUgY2FsbGluZyBwcm9jZXNzIHRvIFJVSUQsIEVVSUQsIGFuZCBTVUlELCByZXNwZWN0aXZlbHkuICAqLworZXh0ZXJuIGludCBzZXRyZXN1aWQgKF9fdWlkX3QgX19ydWlkLCBfX3VpZF90IF9fZXVpZCwgX191aWRfdCBfX3N1aWQpCisgICAgIF9fVEhST1c7CisKKy8qIFNldCB0aGUgcmVhbCBncm91cCBJRCwgZWZmZWN0aXZlIGdyb3VwIElELCBhbmQgc2F2ZWQtc2V0IGdyb3VwIElELAorICAgb2YgdGhlIGNhbGxpbmcgcHJvY2VzcyB0byBSR0lELCBFR0lELCBhbmQgU0dJRCwgcmVzcGVjdGl2ZWx5LiAgKi8KK2V4dGVybiBpbnQgc2V0cmVzZ2lkIChfX2dpZF90IF9fcmdpZCwgX19naWRfdCBfX2VnaWQsIF9fZ2lkX3QgX19zZ2lkKQorICAgICBfX1RIUk9XOworI2VuZGlmCisKKworLyogQ2xvbmUgdGhlIGNhbGxpbmcgcHJvY2VzcywgY3JlYXRpbmcgYW4gZXhhY3QgY29weS4KKyAgIFJldHVybiAtMSBmb3IgZXJyb3JzLCAwIHRvIHRoZSBuZXcgcHJvY2VzcywKKyAgIGFuZCB0aGUgcHJvY2VzcyBJRCBvZiB0aGUgbmV3IHByb2Nlc3MgdG8gdGhlIG9sZCBwcm9jZXNzLiAgKi8KK2V4dGVybiBfX3BpZF90IGZvcmsgKHZvaWQpIF9fVEhST1c7CisKKyNpZiBkZWZpbmVkIF9fVVNFX0JTRCB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOX0VYVEVOREVECisvKiBDbG9uZSB0aGUgY2FsbGluZyBwcm9jZXNzLCBidXQgd2l0aG91dCBjb3B5aW5nIHRoZSB3aG9sZSBhZGRyZXNzIHNwYWNlLgorICAgVGhlIGNhbGxpbmcgcHJvY2VzcyBpcyBzdXNwZW5kZWQgdW50aWwgdGhlIG5ldyBwcm9jZXNzIGV4aXRzIG9yIGlzCisgICByZXBsYWNlZCBieSBhIGNhbGwgdG8gYGV4ZWN2ZScuICBSZXR1cm4gLTEgZm9yIGVycm9ycywgMCB0byB0aGUgbmV3IHByb2Nlc3MsCisgICBhbmQgdGhlIHByb2Nlc3MgSUQgb2YgdGhlIG5ldyBwcm9jZXNzIHRvIHRoZSBvbGQgcHJvY2Vzcy4gICovCitleHRlcm4gX19waWRfdCB2Zm9yayAodm9pZCkgX19USFJPVzsKKyNlbmRpZiAvKiBVc2UgQlNELiAqLworCisKKy8qIFJldHVybiB0aGUgcGF0aG5hbWUgb2YgdGhlIHRlcm1pbmFsIEZEIGlzIG9wZW4gb24sIG9yIE5VTEwgb24gZXJyb3JzLgorICAgVGhlIHJldHVybmVkIHN0b3JhZ2UgaXMgZ29vZCBvbmx5IHVudGlsIHRoZSBuZXh0IGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4gICovCitleHRlcm4gY2hhciAqdHR5bmFtZSAoaW50IF9fZmQpIF9fVEhST1c7CisKKy8qIFN0b3JlIGF0IG1vc3QgQlVGTEVOIGNoYXJhY3RlcnMgb2YgdGhlIHBhdGhuYW1lIG9mIHRoZSB0ZXJtaW5hbCBGRCBpcworICAgb3BlbiBvbiBpbiBCVUYuICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgYW4gZXJyb3IgbnVtYmVyLiAgKi8KK2V4dGVybiBpbnQgdHR5bmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgyKSkgX193dXI7CisKKy8qIFJldHVybiAxIGlmIEZEIGlzIGEgdmFsaWQgZGVzY3JpcHRvciBhc3NvY2lhdGVkCisgICB3aXRoIGEgdGVybWluYWwsIHplcm8gaWYgbm90LiAgKi8KK2V4dGVybiBpbnQgaXNhdHR5IChpbnQgX19mZCkgX19USFJPVzsKKworI2lmIGRlZmluZWQgX19VU0VfQlNEIFwKKyAgICB8fCAoZGVmaW5lZCBfX1VTRV9YT1BFTl9FWFRFTkRFRCAmJiAhZGVmaW5lZCBfX1VTRV9VTklYOTgpCisvKiBSZXR1cm4gdGhlIGluZGV4IGludG8gdGhlIGFjdGl2ZS1sb2dpbnMgZmlsZSAodXRtcCkgZm9yCisgICB0aGUgY29udHJvbGxpbmcgdGVybWluYWwuICAqLworZXh0ZXJuIGludCB0dHlzbG90ICh2b2lkKSBfX1RIUk9XOworI2VuZGlmCisKKworLyogTWFrZSBhIGxpbmsgdG8gRlJPTSBuYW1lZCBUTy4gICovCitleHRlcm4gaW50IGxpbmsgKF9fY29uc3QgY2hhciAqX19mcm9tLCBfX2NvbnN0IGNoYXIgKl9fdG8pCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSwgMikpIF9fd3VyOworCisjaWZkZWYgX19VU0VfQVRGSUxFCisvKiBMaWtlIGxpbmsgYnV0IHJlbGF0aXZlIHBhdGhzIGluIFRPIGFuZCBGUk9NIGFyZSBpbnRlcnByZXRlZCByZWxhdGl2ZQorICAgdG8gRlJPTUZEIGFuZCBUT0ZEIHJlc3BlY3RpdmVseS4gICovCitleHRlcm4gaW50IGxpbmthdCAoaW50IF9fZnJvbWZkLCBfX2NvbnN0IGNoYXIgKl9fZnJvbSwgaW50IF9fdG9mZCwKKwkJICAgX19jb25zdCBjaGFyICpfX3RvLCBpbnQgX19mbGFncykKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgyLCA0KSkgX193dXI7CisjZW5kaWYKKworI2lmIGRlZmluZWQgX19VU0VfQlNEIHx8IGRlZmluZWQgX19VU0VfWE9QRU5fRVhURU5ERUQgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTjJLCisvKiBNYWtlIGEgc3ltYm9saWMgbGluayB0byBGUk9NIG5hbWVkIFRPLiAgKi8KK2V4dGVybiBpbnQgc3ltbGluayAoX19jb25zdCBjaGFyICpfX2Zyb20sIF9fY29uc3QgY2hhciAqX190bykKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxLCAyKSkgX193dXI7CisKKy8qIFJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBzeW1ib2xpYyBsaW5rIFBBVEggaW50byBubyBtb3JlIHRoYW4KKyAgIExFTiBieXRlcyBvZiBCVUYuICBUaGUgY29udGVudHMgYXJlIG5vdCBudWxsLXRlcm1pbmF0ZWQuCisgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLCBvciAtMSBmb3IgZXJyb3JzLiAgKi8KK2V4dGVybiBzc2l6ZV90IHJlYWRsaW5rIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXRoLAorCQkJIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxLCAyKSkgX193dXI7CisjZW5kaWYgLyogVXNlIEJTRC4gICovCisKKyNpZmRlZiBfX1VTRV9BVEZJTEUKKy8qIExpa2Ugc3ltbGluayBidXQgYSByZWxhdGl2ZSBwYXRoIGluIFRPIGlzIGludGVycHJldGVkIHJlbGF0aXZlIHRvIFRPRkQuICAqLworZXh0ZXJuIGludCBzeW1saW5rYXQgKF9fY29uc3QgY2hhciAqX19mcm9tLCBpbnQgX190b2ZkLAorCQkgICAgICBfX2NvbnN0IGNoYXIgKl9fdG8pIF9fVEhST1cgX19ub25udWxsICgoMSwgMykpIF9fd3VyOworCisvKiBMaWtlIHJlYWRsaW5rIGJ1dCBhIHJlbGF0aXZlIFBBVEggaXMgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gRkQuICAqLworZXh0ZXJuIHNzaXplX3QgcmVhZGxpbmthdCAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3BhdGgsCisJCQkgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMiwgMykpIF9fd3VyOworI2VuZGlmCisKKy8qIFJlbW92ZSB0aGUgbGluayBOQU1FLiAgKi8KK2V4dGVybiBpbnQgdW5saW5rIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKyNpZmRlZiBfX1VTRV9BVEZJTEUKKy8qIFJlbW92ZSB0aGUgbGluayBOQU1FIHJlbGF0aXZlIHRvIEZELiAgKi8KK2V4dGVybiBpbnQgdW5saW5rYXQgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fbmFtZSwgaW50IF9fZmxhZykKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgyKSk7CisjZW5kaWYKKworLyogUmVtb3ZlIHRoZSBkaXJlY3RvcnkgUEFUSC4gICovCitleHRlcm4gaW50IHJtZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKworLyogUmV0dXJuIHRoZSBmb3JlZ3JvdW5kIHByb2Nlc3MgZ3JvdXAgSUQgb2YgRkQuICAqLworZXh0ZXJuIF9fcGlkX3QgdGNnZXRwZ3JwIChpbnQgX19mZCkgX19USFJPVzsKKworLyogU2V0IHRoZSBmb3JlZ3JvdW5kIHByb2Nlc3MgZ3JvdXAgSUQgb2YgRkQgc2V0IFBHUlBfSUQuICAqLworZXh0ZXJuIGludCB0Y3NldHBncnAgKGludCBfX2ZkLCBfX3BpZF90IF9fcGdycF9pZCkgX19USFJPVzsKKworCisvKiBSZXR1cm4gdGhlIGxvZ2luIG5hbWUgb2YgdGhlIHVzZXIuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnRzIGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBjaGFyICpnZXRsb2dpbiAodm9pZCk7CisjaWYgZGVmaW5lZCBfX1VTRV9SRUVOVFJBTlQgfHwgZGVmaW5lZCBfX1VTRV9QT1NJWDE5OTUwNgorLyogUmV0dXJuIGF0IG1vc3QgTkFNRV9MRU4gY2hhcmFjdGVycyBvZiB0aGUgbG9naW4gbmFtZSBvZiB0aGUgdXNlciBpbiBOQU1FLgorICAgSWYgaXQgY2Fubm90IGJlIGRldGVybWluZWQgb3Igc29tZSBvdGhlciBlcnJvciBvY2N1cnJlZCwgcmV0dXJuIHRoZSBlcnJvcgorICAgY29kZS4gIE90aGVyd2lzZSByZXR1cm4gMC4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludHMgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBnZXRsb2dpbl9yIChjaGFyICpfX25hbWUsIHNpemVfdCBfX25hbWVfbGVuKSBfX25vbm51bGwgKCgxKSk7CisjZW5kaWYKKworI2lmZGVmCV9fVVNFX0JTRAorLyogU2V0IHRoZSBsb2dpbiBuYW1lIHJldHVybmVkIGJ5IGBnZXRsb2dpbicuICAqLworZXh0ZXJuIGludCBzZXRsb2dpbiAoX19jb25zdCBjaGFyICpfX25hbWUpIF9fVEhST1cgX19ub25udWxsICgoMSkpOworI2VuZGlmCisKKworI2lmZGVmCV9fVVNFX1BPU0lYMgorLyogR2V0IGRlZmluaXRpb25zIGFuZCBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgdG8gcHJvY2VzcyB0aGUKKyAgIGFyZ3VtZW50cyBpbiBBUkdWIChBUkdDIG9mIHRoZW0sIG1pbnVzIHRoZSBwcm9ncmFtIG5hbWUpIGZvcgorICAgb3B0aW9ucyBnaXZlbiBpbiBPUFRTLiAgKi8KKyMgZGVmaW5lIF9fbmVlZF9nZXRvcHQKKyMgaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZW5kaWYKKworCisjaWYgZGVmaW5lZCBfX1VTRV9CU0QgfHwgZGVmaW5lZCBfX1VTRV9VTklYOTgKKy8qIFB1dCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBob3N0IGluIG5vIG1vcmUgdGhhbiBMRU4gYnl0ZXMgb2YgTkFNRS4KKyAgIFRoZSByZXN1bHQgaXMgbnVsbC10ZXJtaW5hdGVkIGlmIExFTiBpcyBsYXJnZSBlbm91Z2ggZm9yIHRoZSBmdWxsCisgICBuYW1lIGFuZCB0aGUgdGVybWluYXRvci4gICovCitleHRlcm4gaW50IGdldGhvc3RuYW1lIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisjZW5kaWYKKworCisjaWYgZGVmaW5lZCBfX1VTRV9CU0QgfHwgKGRlZmluZWQgX19VU0VfWE9QRU4gJiYgIWRlZmluZWQgX19VU0VfVU5JWDk4KQorLyogU2V0IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGhvc3QgdG8gTkFNRSwgd2hpY2ggaXMgTEVOIGJ5dGVzIGxvbmcuCisgICBUaGlzIGNhbGwgaXMgcmVzdHJpY3RlZCB0byB0aGUgc3VwZXItdXNlci4gICovCitleHRlcm4gaW50IHNldGhvc3RuYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKSBfX3d1cjsKKworLyogU2V0IHRoZSBjdXJyZW50IG1hY2hpbmUncyBJbnRlcm5ldCBudW1iZXIgdG8gSUQuCisgICBUaGlzIGNhbGwgaXMgcmVzdHJpY3RlZCB0byB0aGUgc3VwZXItdXNlci4gICovCitleHRlcm4gaW50IHNldGhvc3RpZCAobG9uZyBpbnQgX19pZCkgX19USFJPVyBfX3d1cjsKKworCisvKiBHZXQgYW5kIHNldCB0aGUgTklTIChha2EgWVApIGRvbWFpbiBuYW1lLCBpZiBhbnkuCisgICBDYWxsZWQganVzdCBsaWtlIGBnZXRob3N0bmFtZScgYW5kIGBzZXRob3N0bmFtZScuCisgICBUaGUgTklTIGRvbWFpbiBuYW1lIGlzIHVzdWFsbHkgdGhlIGVtcHR5IHN0cmluZyB3aGVuIG5vdCB1c2luZyBOSVMuICAqLworZXh0ZXJuIGludCBnZXRkb21haW5uYW1lIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSkgX193dXI7CitleHRlcm4gaW50IHNldGRvbWFpbm5hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pCisgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpIF9fd3VyOworCisKKy8qIFJldm9rZSBhY2Nlc3MgcGVybWlzc2lvbnMgdG8gYWxsIHByb2Nlc3NlcyBjdXJyZW50bHkgY29tbXVuaWNhdGluZworICAgd2l0aCB0aGUgY29udHJvbCB0ZXJtaW5hbCwgYW5kIHRoZW4gc2VuZCBhIFNJR0hVUCBzaWduYWwgdG8gdGhlIHByb2Nlc3MKKyAgIGdyb3VwIG9mIHRoZSBjb250cm9sIHRlcm1pbmFsLiAgKi8KK2V4dGVybiBpbnQgdmhhbmd1cCAodm9pZCkgX19USFJPVzsKKworLyogUmV2b2tlIHRoZSBhY2Nlc3Mgb2YgYWxsIGRlc2NyaXB0b3JzIGN1cnJlbnRseSBvcGVuIG9uIEZJTEUuICAqLworZXh0ZXJuIGludCByZXZva2UgKF9fY29uc3QgY2hhciAqX19maWxlKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKSBfX3d1cjsKKworCisvKiBFbmFibGUgc3RhdGlzdGljYWwgcHJvZmlsaW5nLCB3cml0aW5nIHNhbXBsZXMgb2YgdGhlIFBDIGludG8gYXQgbW9zdAorICAgU0laRSBieXRlcyBvZiBTQU1QTEVfQlVGRkVSOyBldmVyeSBwcm9jZXNzb3IgY2xvY2sgdGljayB3aGlsZSBwcm9maWxpbmcKKyAgIGlzIGVuYWJsZWQsIHRoZSBzeXN0ZW0gZXhhbWluZXMgdGhlIHVzZXIgUEMgYW5kIGluY3JlbWVudHMKKyAgIFNBTVBMRV9CVUZGRVJbKChQQyAtIE9GRlNFVCkgLyAyKSAqIFNDQUxFIC8gNjU1MzZdLiAgSWYgU0NBTEUgaXMgemVybywKKyAgIGRpc2FibGUgcHJvZmlsaW5nLiAgUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLiAgKi8KK2V4dGVybiBpbnQgcHJvZmlsICh1bnNpZ25lZCBzaG9ydCBpbnQgKl9fc2FtcGxlX2J1ZmZlciwgc2l6ZV90IF9fc2l6ZSwKKwkJICAgc2l6ZV90IF9fb2Zmc2V0LCB1bnNpZ25lZCBpbnQgX19zY2FsZSkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKworLyogVHVybiBhY2NvdW50aW5nIG9uIGlmIE5BTUUgaXMgYW4gZXhpc3RpbmcgZmlsZS4gIFRoZSBzeXN0ZW0gd2lsbCB0aGVuIHdyaXRlCisgICBhIHJlY29yZCBmb3IgZWFjaCBwcm9jZXNzIGFzIGl0IHRlcm1pbmF0ZXMsIHRvIHRoaXMgZmlsZS4gIElmIE5BTUUgaXMgTlVMTCwKKyAgIHR1cm4gYWNjb3VudGluZyBvZmYuICBUaGlzIGNhbGwgaXMgcmVzdHJpY3RlZCB0byB0aGUgc3VwZXItdXNlci4gICovCitleHRlcm4gaW50IGFjY3QgKF9fY29uc3QgY2hhciAqX19uYW1lKSBfX1RIUk9XOworCisKKy8qIFN1Y2Nlc3NpdmUgY2FsbHMgcmV0dXJuIHRoZSBzaGVsbHMgbGlzdGVkIGluIGAvZXRjL3NoZWxscycuICAqLworZXh0ZXJuIGNoYXIgKmdldHVzZXJzaGVsbCAodm9pZCkgX19USFJPVzsKK2V4dGVybiB2b2lkIGVuZHVzZXJzaGVsbCAodm9pZCkgX19USFJPVzsgLyogRGlzY2FyZCBjYWNoZWQgaW5mby4gICovCitleHRlcm4gdm9pZCBzZXR1c2Vyc2hlbGwgKHZvaWQpIF9fVEhST1c7IC8qIFJld2luZCBhbmQgcmUtcmVhZCB0aGUgZmlsZS4gICovCisKKworLyogUHV0IHRoZSBwcm9ncmFtIGluIHRoZSBiYWNrZ3JvdW5kLCBhbmQgZGlzc29jaWF0ZSBmcm9tIHRoZSBjb250cm9sbGluZworICAgdGVybWluYWwuICBJZiBOT0NIRElSIGlzIHplcm8sIGRvIGBjaGRpciAoIi8iKScuICBJZiBOT0NMT1NFIGlzIHplcm8sCisgICByZWRpcmVjdHMgc3RkaW4sIHN0ZG91dCwgYW5kIHN0ZGVyciB0byAvZGV2L251bGwuICAqLworZXh0ZXJuIGludCBkYWVtb24gKGludCBfX25vY2hkaXIsIGludCBfX25vY2xvc2UpIF9fVEhST1cgX193dXI7CisjZW5kaWYgLyogVXNlIEJTRCB8fCBYL09wZW4uICAqLworCisKKyNpZiBkZWZpbmVkIF9fVVNFX0JTRCB8fCAoZGVmaW5lZCBfX1VTRV9YT1BFTiAmJiAhZGVmaW5lZCBfX1VTRV9YT1BFTjJLKQorLyogTWFrZSBQQVRIIGJlIHRoZSByb290IGRpcmVjdG9yeSAodGhlIHN0YXJ0aW5nIHBvaW50IGZvciBhYnNvbHV0ZSBwYXRocykuCisgICBUaGlzIGNhbGwgaXMgcmVzdHJpY3RlZCB0byB0aGUgc3VwZXItdXNlci4gICovCitleHRlcm4gaW50IGNocm9vdCAoX19jb25zdCBjaGFyICpfX3BhdGgpIF9fVEhST1cgX19ub25udWxsICgoMSkpIF9fd3VyOworCisvKiBQcm9tcHQgd2l0aCBQUk9NUFQgYW5kIHJlYWQgYSBzdHJpbmcgZnJvbSB0aGUgdGVybWluYWwgd2l0aG91dCBlY2hvaW5nLgorICAgVXNlcyAvZGV2L3R0eSBpZiBwb3NzaWJsZTsgb3RoZXJ3aXNlIHN0ZGVyciBhbmQgc3RkaW4uICAqLworZXh0ZXJuIGNoYXIgKmdldHBhc3MgKF9fY29uc3QgY2hhciAqX19wcm9tcHQpIF9fbm9ubnVsbCAoKDEpKTsKKyNlbmRpZiAvKiBVc2UgQlNEIHx8IFgvT3Blbi4gICovCisKKworI2lmIGRlZmluZWQgX19VU0VfQlNEIHx8IGRlZmluZWQgX19VU0VfWE9QRU4gfHwgZGVmaW5lZCBfX1VTRV9YT1BFTjJLCisvKiBNYWtlIGFsbCBjaGFuZ2VzIGRvbmUgdG8gRkQgYWN0dWFsbHkgYXBwZWFyIG9uIGRpc2suCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGgKKyAgIF9fVEhST1cuICAqLworZXh0ZXJuIGludCBmc3luYyAoaW50IF9fZmQpOworI2VuZGlmIC8qIFVzZSBCU0QgfHwgWC9PcGVuIHx8IFVuaXg5OC4gICovCisKKworI2lmIGRlZmluZWQgX19VU0VfQlNEIHx8IGRlZmluZWQgX19VU0VfWE9QRU5fRVhURU5ERUQKKworLyogUmV0dXJuIGlkZW50aWZpZXIgZm9yIHRoZSBjdXJyZW50IGhvc3QuICAqLworZXh0ZXJuIGxvbmcgaW50IGdldGhvc3RpZCAodm9pZCk7CisKKy8qIE1ha2UgYWxsIGNoYW5nZXMgZG9uZSB0byBhbGwgZmlsZXMgYWN0dWFsbHkgYXBwZWFyIG9uIGRpc2suICAqLworZXh0ZXJuIHZvaWQgc3luYyAodm9pZCkgX19USFJPVzsKKworCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBpbiBhIHBhZ2UuICBUaGlzIGlzIHRoZSBzeXN0ZW0ncyBwYWdlIHNpemUsCisgICB3aGljaCBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgdGhlIGhhcmR3YXJlIHBhZ2Ugc2l6ZS4gICovCitleHRlcm4gaW50IGdldHBhZ2VzaXplICh2b2lkKSAgX19USFJPVyBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CisKKworLyogUmV0dXJuIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmaWxlIGRlc2NyaXB0b3JzCisgICB0aGUgY3VycmVudCBwcm9jZXNzIGNvdWxkIHBvc3NpYmx5IGhhdmUuICAqLworZXh0ZXJuIGludCBnZXRkdGFibGVzaXplICh2b2lkKSBfX1RIUk9XOworCisKKy8qIFRydW5jYXRlIEZJTEUgdG8gTEVOR1RIIGJ5dGVzLiAgKi8KKyMgaWZuZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKK2V4dGVybiBpbnQgdHJ1bmNhdGUgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX29mZl90IF9fbGVuZ3RoKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKSBfX3d1cjsKKyMgZWxzZQorIyAgaWZkZWYgX19SRURJUkVDVF9OVEgKK2V4dGVybiBpbnQgX19SRURJUkVDVF9OVEggKHRydW5jYXRlLAorCQkJICAgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX29mZjY0X3QgX19sZW5ndGgpLAorCQkJICAgdHJ1bmNhdGU2NCkgX19ub25udWxsICgoMSkpIF9fd3VyOworIyAgZWxzZQorIyAgIGRlZmluZSB0cnVuY2F0ZSB0cnVuY2F0ZTY0CisjICBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAorZXh0ZXJuIGludCB0cnVuY2F0ZTY0IChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19vZmY2NF90IF9fbGVuZ3RoKQorICAgICBfX1RIUk9XIF9fbm9ubnVsbCAoKDEpKSBfX3d1cjsKKyMgZW5kaWYKKworI2VuZGlmIC8qIFVzZSBCU0QgfHwgWC9PcGVuIFVuaXguICAqLworCisjaWYgZGVmaW5lZCBfX1VTRV9CU0QgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTl9FWFRFTkRFRCB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOMksKKworLyogVHJ1bmNhdGUgdGhlIGZpbGUgRkQgaXMgb3BlbiBvbiB0byBMRU5HVEggYnl0ZXMuICAqLworIyBpZm5kZWYgX19VU0VfRklMRV9PRkZTRVQ2NAorZXh0ZXJuIGludCBmdHJ1bmNhdGUgKGludCBfX2ZkLCBfX29mZl90IF9fbGVuZ3RoKSBfX1RIUk9XIF9fd3VyOworIyBlbHNlCisjICBpZmRlZiBfX1JFRElSRUNUX05USAorZXh0ZXJuIGludCBfX1JFRElSRUNUX05USCAoZnRydW5jYXRlLCAoaW50IF9fZmQsIF9fb2ZmNjRfdCBfX2xlbmd0aCksCisJCQkgICBmdHJ1bmNhdGU2NCkgX193dXI7CisjICBlbHNlCisjICAgZGVmaW5lIGZ0cnVuY2F0ZSBmdHJ1bmNhdGU2NAorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgX19VU0VfTEFSR0VGSUxFNjQKK2V4dGVybiBpbnQgZnRydW5jYXRlNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19sZW5ndGgpIF9fVEhST1cgX193dXI7CisjIGVuZGlmCisKKyNlbmRpZiAvKiBVc2UgQlNEIHx8IFgvT3BlbiBVbml4IHx8IFBPU0lYIDIwMDMuICAqLworCisKKyNpZiBkZWZpbmVkIF9fVVNFX01JU0MgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTl9FWFRFTkRFRAorCisvKiBTZXQgdGhlIGVuZCBvZiBhY2Nlc3NpYmxlIGRhdGEgc3BhY2UgKGFrYSAidGhlIGJyZWFrIikgdG8gQUREUi4KKyAgIFJldHVybnMgemVybyBvbiBzdWNjZXNzIGFuZCAtMSBmb3IgZXJyb3JzICh3aXRoIGVycm5vIHNldCkuICAqLworZXh0ZXJuIGludCBicmsgKHZvaWQgKl9fYWRkcikgX19USFJPVyBfX3d1cjsKKworLyogSW5jcmVhc2Ugb3IgZGVjcmVhc2UgdGhlIGVuZCBvZiBhY2Nlc3NpYmxlIGRhdGEgc3BhY2UgYnkgREVMVEEgYnl0ZXMuCisgICBJZiBzdWNjZXNzZnVsLCByZXR1cm5zIHRoZSBhZGRyZXNzIHRoZSBwcmV2aW91cyBlbmQgb2YgZGF0YSBzcGFjZQorICAgKGkuZS4gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IHNwYWNlLCBpZiBERUxUQSA+IDApOworICAgcmV0dXJucyAodm9pZCAqKSAtMSBmb3IgZXJyb3JzICh3aXRoIGVycm5vIHNldCkuICAqLworZXh0ZXJuIHZvaWQgKnNicmsgKGludHB0cl90IF9fZGVsdGEpIF9fVEhST1c7CisjZW5kaWYKKworCisjaWZkZWYgX19VU0VfTUlTQworLyogSW52b2tlIGBzeXN0ZW0gY2FsbCcgbnVtYmVyIFNZU05PLCBwYXNzaW5nIGl0IHRoZSByZW1haW5pbmcgYXJndW1lbnRzLgorICAgVGhpcyBpcyBjb21wbGV0ZWx5IHN5c3RlbS1kZXBlbmRlbnQsIGFuZCBub3Qgb2Z0ZW4gdXNlZnVsLgorCisgICBJbiBVbml4LCBgc3lzY2FsbCcgc2V0cyBgZXJybm8nIGZvciBhbGwgZXJyb3JzIGFuZCBtb3N0IGNhbGxzIHJldHVybiAtMQorICAgZm9yIGVycm9yczsgaW4gbWFueSBzeXN0ZW1zIHlvdSBjYW5ub3QgcGFzcyBhcmd1bWVudHMgb3IgZ2V0IHJldHVybgorICAgdmFsdWVzIGZvciBhbGwgc3lzdGVtIGNhbGxzIChgcGlwZScsIGBmb3JrJywgYW5kIGBnZXRwcGlkJyB0eXBpY2FsbHkKKyAgIGFtb25nIHRoZW0pLgorCisgICBJbiBNYWNoLCBhbGwgc3lzdGVtIGNhbGxzIHRha2Ugbm9ybWFsIGFyZ3VtZW50cyBhbmQgYWx3YXlzIHJldHVybiBhbgorICAgZXJyb3IgY29kZSAoemVybyBmb3Igc3VjY2VzcykuICAqLworZXh0ZXJuIGxvbmcgaW50IHN5c2NhbGwgKGxvbmcgaW50IF9fc3lzbm8sIC4uLikgX19USFJPVzsKKworI2VuZGlmCS8qIFVzZSBtaXNjLiAgKi8KKworCisjaWYgKGRlZmluZWQgX19VU0VfTUlTQyB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOX0VYVEVOREVEKSAmJiAhZGVmaW5lZCBGX0xPQ0sKKy8qIE5PVEU6IFRoZXNlIGRlY2xhcmF0aW9ucyBhbHNvIGFwcGVhciBpbiA8ZmNudGwuaD47IGJlIHN1cmUgdG8ga2VlcCBib3RoCisgICBmaWxlcyBjb25zaXN0ZW50LiAgU29tZSBzeXN0ZW1zIGhhdmUgdGhlbSB0aGVyZSBhbmQgc29tZSBoZXJlLCBhbmQgc29tZQorICAgc29mdHdhcmUgZGVwZW5kcyBvbiB0aGUgbWFjcm9zIGJlaW5nIGRlZmluZWQgd2l0aG91dCBpbmNsdWRpbmcgYm90aC4gICovCisKKy8qIGBsb2NrZicgaXMgYSBzaW1wbGVyIGludGVyZmFjZSB0byB0aGUgbG9ja2luZyBmYWNpbGl0aWVzIG9mIGBmY250bCcuCisgICBMRU4gaXMgYWx3YXlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24uCisgICBUaGUgQ01EIGFyZ3VtZW50IGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoCisgICBfX1RIUk9XLiAgKi8KKworIyBkZWZpbmUgRl9VTE9DSyAwCS8qIFVubG9jayBhIHByZXZpb3VzbHkgbG9ja2VkIHJlZ2lvbi4gICovCisjIGRlZmluZSBGX0xPQ0sgIDEJLyogTG9jayBhIHJlZ2lvbiBmb3IgZXhjbHVzaXZlIHVzZS4gICovCisjIGRlZmluZSBGX1RMT0NLIDIJLyogVGVzdCBhbmQgbG9jayBhIHJlZ2lvbiBmb3IgZXhjbHVzaXZlIHVzZS4gICovCisjIGRlZmluZSBGX1RFU1QgIDMJLyogVGVzdCBhIHJlZ2lvbiBmb3Igb3RoZXIgcHJvY2Vzc2VzIGxvY2tzLiAgKi8KKworIyBpZm5kZWYgX19VU0VfRklMRV9PRkZTRVQ2NAorZXh0ZXJuIGludCBsb2NrZiAoaW50IF9fZmQsIGludCBfX2NtZCwgX19vZmZfdCBfX2xlbikgX193dXI7CisjIGVsc2UKKyMgIGlmZGVmIF9fUkVESVJFQ1QKK2V4dGVybiBpbnQgX19SRURJUkVDVCAobG9ja2YsIChpbnQgX19mZCwgaW50IF9fY21kLCBfX29mZjY0X3QgX19sZW4pLAorCQkgICAgICAgbG9ja2Y2NCkgX193dXI7CisjICBlbHNlCisjICAgZGVmaW5lIGxvY2tmIGxvY2tmNjQKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmZGVmIF9fVVNFX0xBUkdFRklMRTY0CitleHRlcm4gaW50IGxvY2tmNjQgKGludCBfX2ZkLCBpbnQgX19jbWQsIF9fb2ZmNjRfdCBfX2xlbikgX193dXI7CisjIGVuZGlmCisjZW5kaWYgLyogVXNlIG1pc2MgYW5kIEZfTE9DSyBub3QgYWxyZWFkeSBkZWZpbmVkLiAgKi8KKworCisjaWZkZWYgX19VU0VfR05VCisKKy8qIEV2YWx1YXRlIEVYUFJFU1NJT04sIGFuZCByZXBlYXQgYXMgbG9uZyBhcyBpdCByZXR1cm5zIC0xIHdpdGggYGVycm5vJworICAgc2V0IHRvIEVJTlRSLiAgKi8KKworIyBkZWZpbmUgVEVNUF9GQUlMVVJFX1JFVFJZKGV4cHJlc3Npb24pIFwKKyAgKF9fZXh0ZW5zaW9uX18JCQkJCQkJICAgICAgXAorICAgICh7IGxvbmcgaW50IF9fcmVzdWx0OwkJCQkJCSAgICAgIFwKKyAgICAgICBkbyBfX3Jlc3VsdCA9IChsb25nIGludCkgKGV4cHJlc3Npb24pOwkJCQkgICAgICBcCisgICAgICAgd2hpbGUgKF9fcmVzdWx0ID09IC0xTCAmJiBlcnJubyA9PSBFSU5UUik7CQkJICAgICAgXAorICAgICAgIF9fcmVzdWx0OyB9KSkKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfX1VTRV9QT1NJWDE5OTMwOSB8fCBkZWZpbmVkIF9fVVNFX1VOSVg5OAorLyogU3luY2hyb25pemUgYXQgbGVhc3QgdGhlIGRhdGEgcGFydCBvZiBhIGZpbGUgd2l0aCB0aGUgdW5kZXJseWluZworICAgbWVkaWEuICAqLworZXh0ZXJuIGludCBmZGF0YXN5bmMgKGludCBfX2ZpbGRlcyk7CisjZW5kaWYgLyogVXNlIFBPU0lYMTk5MzA5ICovCisKKworLyogWFBHNC4yIHNwZWNpZmllcyB0aGF0IHByb3RvdHlwZXMgZm9yIHRoZSBlbmNyeXB0aW9uIGZ1bmN0aW9ucyBtdXN0CisgICBiZSBkZWZpbmVkIGhlcmUuICAqLworI2lmZGVmCV9fVVNFX1hPUEVOCisvKiBFbmNyeXB0IGF0IG1vc3QgOCBjaGFyYWN0ZXJzIGZyb20gS0VZIHVzaW5nIHNhbHQgdG8gcGVydHVyYiBERVMuICAqLworZXh0ZXJuIGNoYXIgKmNyeXB0IChfX2NvbnN0IGNoYXIgKl9fa2V5LCBfX2NvbnN0IGNoYXIgKl9fc2FsdCkKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxLCAyKSk7CisKKy8qIEVuY3J5cHQgZGF0YSBpbiBCTE9DSyBpbiBwbGFjZSBpZiBFREZMQUcgaXMgemVybzsgb3RoZXJ3aXNlIGRlY3J5cHQKKyAgIGJsb2NrIGluIHBsYWNlLiAgKi8KK2V4dGVybiB2b2lkIGVuY3J5cHQgKGNoYXIgKl9fYmxvY2ssIGludCBfX2VkZmxhZykgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKKworLyogU3dhYiBwYWlycyBieXRlcyBpbiB0aGUgZmlyc3QgTiBieXRlcyBvZiB0aGUgYXJlYSBwb2ludGVkIHRvIGJ5CisgICBGUk9NIGFuZCBjb3B5IHRoZSByZXN1bHQgdG8gVE8uICBUaGUgdmFsdWUgb2YgVE8gbXVzdCBub3QgYmUgaW4gdGhlCisgICByYW5nZSBbRlJPTSAtIE4gKyAxLCBGUk9NIC0gMV0uICBJZiBOIGlzIG9kZCB0aGUgZmlyc3QgYnl0ZSBpbiBGUk9NCisgICBpcyB3aXRob3V0IHBhcnRuZXIuICAqLworZXh0ZXJuIHZvaWQgc3dhYiAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fZnJvbSwgdm9pZCAqX19yZXN0cmljdCBfX3RvLAorCQkgIHNzaXplX3QgX19uKSBfX1RIUk9XIF9fbm9ubnVsbCAoKDEsIDIpKTsKKyNlbmRpZgorCisKKy8qIFRoZSBTaW5nbGUgVW5peCBzcGVjaWZpY2F0aW9uIGRlbWFuZHMgdGhpcyBwcm90b3R5cGUgdG8gYmUgaGVyZS4KKyAgIEl0IGlzIGFsc28gZm91bmQgaW4gPHN0ZGlvLmg+LiAgKi8KKyNpZmRlZiBfX1VTRV9YT1BFTgorLyogUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbC4gICovCitleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSBfX1RIUk9XOworI2VuZGlmCisKKworLyogRGVmaW5lIHNvbWUgbWFjcm9zIGhlbHBpbmcgdG8gY2F0Y2ggYnVmZmVyIG92ZXJmbG93cy4gICovCisjaWYgX19VU0VfRk9SVElGWV9MRVZFTCA+IDAgJiYgZGVmaW5lZCBfX2V4dGVybl9hbHdheXNfaW5saW5lCisjIGluY2x1ZGUgPGJpdHMvdW5pc3RkLmg+CisjZW5kaWYKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIHVuaXN0ZC5oICAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3VzdGF0LmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvdXN0YXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmExNTBlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3VzdGF0LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPHN5cy91c3RhdC5oPgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3V0aW1lLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvdXRpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDVkMjY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3V0aW1lLmgKQEAgLTAsMCArMSw1MiBAQAorLyogQ29weXJpZ2h0IChDKSAxOTkxLCA5MiwgOTYsIDk3LCA5OCwgOTksIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qCisgKglQT1NJWCBTdGFuZGFyZDogNS42LjYgU2V0IEZpbGUgQWNjZXNzIGFuZCBNb2RpZmljYXRpb24gVGltZXMgIDx1dGltZS5oPgorICovCisKKyNpZm5kZWYJX1VUSU1FX0gKKyNkZWZpbmUJX1VUSU1FX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworX19CRUdJTl9ERUNMUworCisjaW5jbHVkZSA8Yml0cy90eXBlcy5oPgorCisjaWYgZGVmaW5lZCBfX1VTRV9YT1BFTiB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOMksKKyMgZGVmaW5lIF9fbmVlZF90aW1lX3QKKyMgaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisKKy8qIFN0cnVjdHVyZSBkZXNjcmliaW5nIGZpbGUgdGltZXMuICAqLworc3RydWN0IHV0aW1idWYKKyAgeworICAgIF9fdGltZV90IGFjdGltZTsJCS8qIEFjY2VzcyB0aW1lLiAgKi8KKyAgICBfX3RpbWVfdCBtb2R0aW1lOwkJLyogTW9kaWZpY2F0aW9uIHRpbWUuICAqLworICB9OworCisvKiBTZXQgdGhlIGFjY2VzcyBhbmQgbW9kaWZpY2F0aW9uIHRpbWVzIG9mIEZJTEUgdG8gdGhvc2UgZ2l2ZW4gaW4KKyAgICpGSUxFX1RJTUVTLiAgSWYgRklMRV9USU1FUyBpcyBOVUxMLCBzZXQgdGhlbSB0byB0aGUgY3VycmVudCB0aW1lLiAgKi8KK2V4dGVybiBpbnQgdXRpbWUgKF9fY29uc3QgY2hhciAqX19maWxlLAorCQkgIF9fY29uc3Qgc3RydWN0IHV0aW1idWYgKl9fZmlsZV90aW1lcykKKyAgICAgX19USFJPVyBfX25vbm51bGwgKCgxKSk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiB1dGltZS5oICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvdXRtcC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3V0bXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGIxMDg4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3V0bXAuaApAQCAtMCwwICsxLDk3IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYJX1VUTVBfSAorI2RlZmluZQlfVVRNUF9ICTEKKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworCitfX0JFR0lOX0RFQ0xTCisKKy8qIEdldCBzeXN0ZW0gZGVwZW5kZW50IHZhbHVlcyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLiAgKi8KKyNpbmNsdWRlIDxiaXRzL3V0bXAuaD4KKworLyogQ29tcGF0aWJpbGl0eSBuYW1lcyBmb3IgdGhlIHN0cmluZ3Mgb2YgdGhlIGNhbm9uaWNhbCBmaWxlIG5hbWVzLiAgKi8KKyNkZWZpbmUgVVRNUF9GSUxFCV9QQVRIX1VUTVAKKyNkZWZpbmUgVVRNUF9GSUxFTkFNRQlfUEFUSF9VVE1QCisjZGVmaW5lIFdUTVBfRklMRQlfUEFUSF9XVE1QCisjZGVmaW5lIFdUTVBfRklMRU5BTUUJX1BBVEhfV1RNUAorCisKKworLyogTWFrZSBGRCBiZSB0aGUgY29udHJvbGxpbmcgdGVybWluYWwsIHN0ZGluLCBzdGRvdXQsIGFuZCBzdGRlcnI7CisgICB0aGVuIGNsb3NlIEZELiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5vbnplcm8gb24gZXJyb3IuICAqLworZXh0ZXJuIGludCBsb2dpbl90dHkgKGludCBfX2ZkKSBfX1RIUk9XOworCisKKy8qIFdyaXRlIHRoZSBnaXZlbiBlbnRyeSBpbnRvIHV0bXAgYW5kIHd0bXAuICAqLworZXh0ZXJuIHZvaWQgbG9naW4gKF9fY29uc3Qgc3RydWN0IHV0bXAgKl9fZW50cnkpIF9fVEhST1c7CisKKy8qIFdyaXRlIHRoZSB1dG1wIGVudHJ5IHRvIHNheSB0aGUgdXNlciBvbiBVVF9MSU5FIGhhcyBsb2dnZWQgb3V0LiAgKi8KK2V4dGVybiBpbnQgbG9nb3V0IChfX2NvbnN0IGNoYXIgKl9fdXRfbGluZSkgX19USFJPVzsKKworLyogQXBwZW5kIHRvIHd0bXAgYW4gZW50cnkgZm9yIHRoZSBjdXJyZW50IHRpbWUgYW5kIHRoZSBnaXZlbiBpbmZvLiAgKi8KK2V4dGVybiB2b2lkIGxvZ3d0bXAgKF9fY29uc3QgY2hhciAqX191dF9saW5lLCBfX2NvbnN0IGNoYXIgKl9fdXRfbmFtZSwKKwkJICAgICBfX2NvbnN0IGNoYXIgKl9fdXRfaG9zdCkgX19USFJPVzsKKworLyogQXBwZW5kIGVudHJ5IFVUTVAgdG8gdGhlIHd0bXAtbGlrZSBmaWxlIFdUTVBfRklMRS4gICovCitleHRlcm4gdm9pZCB1cGR3dG1wIChfX2NvbnN0IGNoYXIgKl9fd3RtcF9maWxlLCBfX2NvbnN0IHN0cnVjdCB1dG1wICpfX3V0bXApCisgICAgIF9fVEhST1c7CisKKy8qIENoYW5nZSBuYW1lIG9mIHRoZSB1dG1wIGZpbGUgdG8gYmUgZXhhbWluZWQuICAqLworZXh0ZXJuIGludCB1dG1wbmFtZSAoX19jb25zdCBjaGFyICpfX2ZpbGUpIF9fVEhST1c7CisKKy8qIFJlYWQgbmV4dCBlbnRyeSBmcm9tIGEgdXRtcC1saWtlIGZpbGUuICAqLworZXh0ZXJuIHN0cnVjdCB1dG1wICpnZXR1dGVudCAodm9pZCkgX19USFJPVzsKKworLyogUmVzZXQgdGhlIGlucHV0IHN0cmVhbSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLiAgKi8KK2V4dGVybiB2b2lkIHNldHV0ZW50ICh2b2lkKSBfX1RIUk9XOworCisvKiBDbG9zZSB0aGUgY3VycmVudCBvcGVuIGZpbGUuICAqLworZXh0ZXJuIHZvaWQgZW5kdXRlbnQgKHZvaWQpIF9fVEhST1c7CisKKy8qIFNlYXJjaCBmb3J3YXJkIGZyb20gdGhlIGN1cnJlbnQgcG9pbnQgaW4gdGhlIHV0bXAgZmlsZSB1bnRpbCB0aGUKKyAgIG5leHQgZW50cnkgd2l0aCBhIHV0X3R5cGUgbWF0Y2hpbmcgSUQtPnV0X3R5cGUuICAqLworZXh0ZXJuIHN0cnVjdCB1dG1wICpnZXR1dGlkIChfX2NvbnN0IHN0cnVjdCB1dG1wICpfX2lkKSBfX1RIUk9XOworCisvKiBTZWFyY2ggZm9yd2FyZCBmcm9tIHRoZSBjdXJyZW50IHBvaW50IGluIHRoZSB1dG1wIGZpbGUgdW50aWwgdGhlCisgICBuZXh0IGVudHJ5IHdpdGggYSB1dF9saW5lIG1hdGNoaW5nIExJTkUtPnV0X2xpbmUuICAqLworZXh0ZXJuIHN0cnVjdCB1dG1wICpnZXR1dGxpbmUgKF9fY29uc3Qgc3RydWN0IHV0bXAgKl9fbGluZSkgX19USFJPVzsKKworLyogV3JpdGUgb3V0IGVudHJ5IHBvaW50ZWQgdG8gYnkgVVRNUF9QVFIgaW50byB0aGUgdXRtcCBmaWxlLiAgKi8KK2V4dGVybiBzdHJ1Y3QgdXRtcCAqcHV0dXRsaW5lIChfX2NvbnN0IHN0cnVjdCB1dG1wICpfX3V0bXBfcHRyKSBfX1RIUk9XOworCisKKyNpZmRlZglfX1VTRV9NSVNDCisvKiBSZWVudHJhbnQgdmVyc2lvbnMgb2YgdGhlIGZpbGUgZm9yIGhhbmRsaW5nIHV0bXAgZmlsZXMuICAqLworZXh0ZXJuIGludCBnZXR1dGVudF9yIChzdHJ1Y3QgdXRtcCAqX19idWZmZXIsIHN0cnVjdCB1dG1wICoqX19yZXN1bHQpIF9fVEhST1c7CisKK2V4dGVybiBpbnQgZ2V0dXRpZF9yIChfX2NvbnN0IHN0cnVjdCB1dG1wICpfX2lkLCBzdHJ1Y3QgdXRtcCAqX19idWZmZXIsCisJCSAgICAgIHN0cnVjdCB1dG1wICoqX19yZXN1bHQpIF9fVEhST1c7CisKK2V4dGVybiBpbnQgZ2V0dXRsaW5lX3IgKF9fY29uc3Qgc3RydWN0IHV0bXAgKl9fbGluZSwKKwkJCXN0cnVjdCB1dG1wICpfX2J1ZmZlciwgc3RydWN0IHV0bXAgKipfX3Jlc3VsdCkgX19USFJPVzsKKworI2VuZGlmCS8qIFVzZSBtaXNjLiAgKi8KKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIHV0bXAuaCAgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS91dG1weC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3V0bXB4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYyMjkxNgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS91dG1weC5oCkBAIC0wLDAgKzEsMTI3IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYJX1VUTVBYX0gKKyNkZWZpbmUJX1VUTVBYX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisvKiBSZXF1aXJlZCBhY2NvcmRpbmcgdG8gVW5peDk4LiAgKi8KKyNpZm5kZWYgX19waWRfdF9kZWZpbmVkCit0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CisjIGRlZmluZSBfX3BpZF90X2RlZmluZWQKKyNlbmRpZgorCisvKiBHZXQgc3lzdGVtIGRlcGVuZGVudCB2YWx1ZXMgYW5kIGRhdGEgc3RydWN0dXJlcy4gICovCisjaW5jbHVkZSA8Yml0cy91dG1weC5oPgorCisjaWZkZWYgX19VU0VfR05VCisvKiBDb21wYXRpYmlsaXR5IG5hbWVzIGZvciB0aGUgc3RyaW5ncyBvZiB0aGUgY2Fub25pY2FsIGZpbGUgbmFtZXMuICAqLworIyBkZWZpbmUgVVRNUFhfRklMRQlfUEFUSF9VVE1QWAorIyBkZWZpbmUgVVRNUFhfRklMRU5BTUUJX1BBVEhfVVRNUFgKKyMgZGVmaW5lIFdUTVBYX0ZJTEUJX1BBVEhfV1RNUFgKKyMgZGVmaW5lIFdUTVBYX0ZJTEVOQU1FCV9QQVRIX1dUTVBYCisjZW5kaWYKKworLyogRm9yIHRoZSBnZXR1dG1weyx4fSBmdW5jdGlvbnMgd2UgbmVlZCB0aGUgYHN0cnVjdCB1dG1wJy4gICovCisjaWZkZWYgX19VU0VfR05VCitzdHJ1Y3QgdXRtcDsKKyNlbmRpZgorCisKK19fQkVHSU5fREVDTFMKKworLyogT3BlbiB1c2VyIGFjY291bnRpbmcgZGF0YWJhc2UuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIHZvaWQgc2V0dXR4ZW50ICh2b2lkKTsKKworLyogQ2xvc2UgdXNlciBhY2NvdW50aW5nIGRhdGFiYXNlLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiB2b2lkIGVuZHV0eGVudCAodm9pZCk7CisKKy8qIEdldCB0aGUgbmV4dCBlbnRyeSBmcm9tIHRoZSB1c2VyIGFjY291bnRpbmcgZGF0YWJhc2UuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIHN0cnVjdCB1dG1weCAqZ2V0dXR4ZW50ICh2b2lkKTsKKworLyogR2V0IHRoZSB1c2VyIGFjY291bnRpbmcgZGF0YWJhc2UgZW50cnkgY29ycmVzcG9uZGluZyB0byBJRC4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gc3RydWN0IHV0bXB4ICpnZXR1dHhpZCAoX19jb25zdCBzdHJ1Y3QgdXRtcHggKl9faWQpOworCisvKiBHZXQgdGhlIHVzZXIgYWNjb3VudGluZyBkYXRhYmFzZSBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIExJTkUuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIHN0cnVjdCB1dG1weCAqZ2V0dXR4bGluZSAoX19jb25zdCBzdHJ1Y3QgdXRtcHggKl9fbGluZSk7CisKKy8qIFdyaXRlIHRoZSBlbnRyeSBVVE1QWCBpbnRvIHRoZSB1c2VyIGFjY291bnRpbmcgZGF0YWJhc2UuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIHN0cnVjdCB1dG1weCAqcHV0dXR4bGluZSAoX19jb25zdCBzdHJ1Y3QgdXRtcHggKl9fdXRtcHgpOworCisKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIENoYW5nZSBuYW1lIG9mIHRoZSB1dG1weCBmaWxlIHRvIGJlIGV4YW1pbmVkLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBwYXJ0IG9mIFBPU0lYIGFuZCB0aGVyZWZvcmUgbm8gb2ZmaWNpYWwKKyAgIGNhbmNlbGxhdGlvbiBwb2ludC4gIEJ1dCBkdWUgdG8gc2ltaWxhcml0eSB3aXRoIGFuIFBPU0lYIGludGVyZmFjZQorICAgb3IgZHVlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBpdCBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQKKyAgIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gaW50IHV0bXB4bmFtZSAoX19jb25zdCBjaGFyICpfX2ZpbGUpOworCisvKiBBcHBlbmQgZW50cnkgVVRNUCB0byB0aGUgd3RtcHgtbGlrZSBmaWxlIFdUTVBYX0ZJTEUuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGl0IGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiB2b2lkIHVwZHd0bXB4IChfX2NvbnN0IGNoYXIgKl9fd3RtcHhfZmlsZSwKKwkJICAgICAgX19jb25zdCBzdHJ1Y3QgdXRtcHggKl9fdXRtcHgpOworCisKKy8qIENvcHkgdGhlIGluZm9ybWF0aW9uIGluIFVUTVBYIHRvIFVUTVAuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGl0IGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiB2b2lkIGdldHV0bXAgKF9fY29uc3Qgc3RydWN0IHV0bXB4ICpfX3V0bXB4LAorCQkgICAgIHN0cnVjdCB1dG1wICpfX3V0bXApOworCisvKiBDb3B5IHRoZSBpbmZvcm1hdGlvbiBpbiBVVE1QIHRvIFVUTVBYLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBwYXJ0IG9mIFBPU0lYIGFuZCB0aGVyZWZvcmUgbm8gb2ZmaWNpYWwKKyAgIGNhbmNlbGxhdGlvbiBwb2ludC4gIEJ1dCBkdWUgdG8gc2ltaWxhcml0eSB3aXRoIGFuIFBPU0lYIGludGVyZmFjZQorICAgb3IgZHVlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBpdCBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQKKyAgIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gdm9pZCBnZXR1dG1weCAoX19jb25zdCBzdHJ1Y3QgdXRtcCAqX191dG1wLAorCQkgICAgICBzdHJ1Y3QgdXRtcHggKl9fdXRtcHgpOworI2VuZGlmCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiB1dG1weC5oICAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3ZhbHVlcy5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3ZhbHVlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YjM3NmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvdmFsdWVzLmgKQEAgLTAsMCArMSw2OSBAQAorLyogT2xkIGNvbXBhdGliaWxpdHkgbmFtZXMgZm9yIDxsaW1pdHMuaD4gYW5kIDxmbG9hdC5oPiBjb25zdGFudHMuCisgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKy8qIFRoaXMgaW50ZXJmYWNlIGlzIG9ic29sZXRlLiAgTmV3IHByb2dyYW1zIHNob3VsZCB1c2UKKyAgIDxsaW1pdHMuaD4gYW5kL29yIDxmbG9hdC5oPiBpbnN0ZWFkIG9mIDx2YWx1ZXMuaD4uICAqLworCisjaWZuZGVmCV9WQUxVRVNfSAorI2RlZmluZQlfVkFMVUVTX0gJMQorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgPGxpbWl0cy5oPgorCisjZGVmaW5lIF9UWVBFQklUUyh0eXBlKQkoc2l6ZW9mICh0eXBlKSAqIENIQVJfQklUKQorCisjZGVmaW5lIENIQVJCSVRTCV9UWVBFQklUUyAoY2hhcikKKyNkZWZpbmUgU0hPUlRCSVRTCV9UWVBFQklUUyAoc2hvcnQgaW50KQorI2RlZmluZSBJTlRCSVRTCQlfVFlQRUJJVFMgKGludCkKKyNkZWZpbmUgTE9OR0JJVFMJX1RZUEVCSVRTIChsb25nIGludCkKKyNkZWZpbmUgUFRSQklUUwkJX1RZUEVCSVRTIChjaGFyICopCisjZGVmaW5lIERPVUJMRUJJVFMJX1RZUEVCSVRTIChkb3VibGUpCisjZGVmaW5lIEZMT0FUQklUUwlfVFlQRUJJVFMgKGZsb2F0KQorCisjZGVmaW5lIE1JTlNIT1JUCVNIUlRfTUlOCisjZGVmaW5lCU1JTklOVAkJSU5UX01JTgorI2RlZmluZQlNSU5MT05HCQlMT05HX01JTgorCisjZGVmaW5lCU1BWFNIT1JUCVNIUlRfTUFYCisjZGVmaW5lCU1BWElOVAkJSU5UX01BWAorI2RlZmluZQlNQVhMT05HCQlMT05HX01BWAorCisjZGVmaW5lIEhJQklUUwkJTUlOU0hPUlQKKyNkZWZpbmUgSElCSVRMCQlNSU5MT05HCisKKworI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNkZWZpbmUJTUFYRE9VQkxFCURCTF9NQVgKKyNkZWZpbmUJTUFYRkxPQVQJRkxUX01BWAorI2RlZmluZQlNSU5ET1VCTEUJREJMX01JTgorI2RlZmluZQlNSU5GTE9BVAlGTFRfTUlOCisjZGVmaW5lCURNSU5FWFAJCURCTF9NSU5fRVhQCisjZGVmaW5lCUZNSU5FWFAJCUZMVF9NSU5fRVhQCisjZGVmaW5lCURNQVhFWFAJCURCTF9NQVhfRVhQCisjZGVmaW5lCUZNQVhFWFAJCUZMVF9NQVhfRVhQCisKKworI2lmZGVmIF9fVVNFX01JU0MKKy8qIFNvbWUgc3lzdGVtcyBkZWZpbmUgdGhpcyBuYW1lIGluc3RlYWQgb2YgQ0hBUl9CSVQgb3IgQ0hBUkJJVFMuICAqLworIyBkZWZpbmUgQklUU1BFUkJZVEUJQ0hBUl9CSVQKKyNlbmRpZgorCisjZW5kaWYJLyogdmFsdWVzLmggKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS92aWRlby9lZGlkLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvdmlkZW8vZWRpZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxOTExYTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvdmlkZW8vZWRpZC5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgX19saW51eF92aWRlb19lZGlkX2hfXworI2RlZmluZSBfX2xpbnV4X3ZpZGVvX2VkaWRfaF9fCisKKworc3RydWN0IGVkaWRfaW5mbyB7CisJdW5zaWduZWQgY2hhciBkdW1teVsxMjhdOworfTsKKworCisKKyNlbmRpZiAvKiBfX2xpbnV4X3ZpZGVvX2VkaWRfaF9fICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvdmlkZW8vc2lzZmIuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS92aWRlby9zaXNmYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMDFmMGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvdmlkZW8vc2lzZmIuaApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIHNpc2ZiLmggLSBkZWZpbml0aW9ucyBmb3IgdGhlIFNpUyBmcmFtZWJ1ZmZlciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNSBieSBUaG9tYXMgV2luaXNjaGhvZmVyLCBWaWVubmEsIEF1c3RyaWEuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBuYW1lZCBMaWNlbnNlLAorICogb3IgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgKi8KKworI2lmbmRlZiBfTElOVVhfU0lTRkJfSF8KKyNkZWZpbmUgX0xJTlVYX1NJU0ZCX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgIFBVQkxJQyAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHZiZmxhZ3MsIHB1YmxpYyAob3RoZXJzIGluIHNpcy5oKSAqLworI2RlZmluZSBDUlQyX0RFRkFVTFQJCTB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JUMl9MQ0QJCTB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JUMl9UVgkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgQ1JUMl9WR0EJCTB4MDAwMDAwMDgKKyNkZWZpbmUgVFZfTlRTQwkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgVFZfUEFMCQkJMHgwMDAwMDAyMAorI2RlZmluZSBUVl9ISVZJU0lPTgkJMHgwMDAwMDA0MAorI2RlZmluZSBUVl9ZUEJQUgkJMHgwMDAwMDA4MAorI2RlZmluZSBUVl9BVklERU8JCTB4MDAwMDAxMDAKKyNkZWZpbmUgVFZfU1ZJREVPCQkweDAwMDAwMjAwCisjZGVmaW5lIFRWX1NDQVJUCQkweDAwMDAwNDAwCisjZGVmaW5lIFRWX1BBTE0JCQkweDAwMDAxMDAwCisjZGVmaW5lIFRWX1BBTE4JCQkweDAwMDAyMDAwCisjZGVmaW5lIFRWX05UU0NKCQkweDAwMDAxMDAwCisjZGVmaW5lIFRWX0NIU0NBUlQJCTB4MDAwMDgwMDAKKyNkZWZpbmUgVFZfQ0hZUEJQUjUyNUkJCTB4MDAwMTAwMDAKKyNkZWZpbmUgQ1JUMV9WR0EJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ1JUMV9MQ0RBCQkweDAwMDIwMDAwCisjZGVmaW5lIFZHQTJfQ09OTkVDVEVEICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgVkJfRElTUFRZUEVfQ1JUMQkweDAwMDgwMDAwCS8qIENSVDEgY29ubmVjdGVkIGFuZCB1c2VkICovCisjZGVmaW5lIFZCX1NJTkdMRV9NT0RFCQkweDIwMDAwMDAwCS8qIENSVDEgb3IgQ1JUMjsgZGV0ZXJtaW5lZCBieSBESVNQVFlQRV9DUlR4ICovCisjZGVmaW5lIFZCX01JUlJPUl9NT0RFCQkweDQwMDAwMDAwCS8qIENSVDEgKyBDUlQyIGlkZW50aWNhbCAobWlycm9yIG1vZGUpICovCisjZGVmaW5lIFZCX0RVQUxWSUVXX01PREUJMHg4MDAwMDAwMAkvKiBDUlQxICsgQ1JUMiBpbmRlcGVuZGVudCAoZHVhbCBoZWFkIG1vZGUpICovCisKKy8qIEFsaWFzZXM6ICovCisjZGVmaW5lIENSVDJfRU5BQkxFCQkoQ1JUMl9MQ0QgfCBDUlQyX1RWIHwgQ1JUMl9WR0EpCisjZGVmaW5lIFRWX1NUQU5EQVJECQkoVFZfTlRTQyB8IFRWX1BBTCB8IFRWX1BBTE0gfCBUVl9QQUxOIHwgVFZfTlRTQ0opCisjZGVmaW5lIFRWX0lOVEVSRkFDRQkJKFRWX0FWSURFT3xUVl9TVklERU98VFZfU0NBUlR8VFZfSElWSVNJT058VFZfWVBCUFJ8VFZfQ0hTQ0FSVHxUVl9DSFlQQlBSNTI1SSkKKworLyogT25seSBpZiBUVl9ZUEJQUiBpcyBzZXQ6ICovCisjZGVmaW5lIFRWX1lQQlBSNTI1SQkJVFZfTlRTQworI2RlZmluZSBUVl9ZUEJQUjUyNVAJCVRWX1BBTAorI2RlZmluZSBUVl9ZUEJQUjc1MFAJCVRWX1BBTE0KKyNkZWZpbmUgVFZfWVBCUFIxMDgwSQkJVFZfUEFMTgorI2RlZmluZSBUVl9ZUEJQUkFMTCAJCShUVl9ZUEJQUjUyNUkgfCBUVl9ZUEJQUjUyNVAgfCBUVl9ZUEJQUjc1MFAgfCBUVl9ZUEJQUjEwODBJKQorCisjZGVmaW5lIFZCX0RJU1BUWVBFX0RJU1AyCUNSVDJfRU5BQkxFCisjZGVmaW5lIFZCX0RJU1BUWVBFX0NSVDIJQ1JUMl9FTkFCTEUKKyNkZWZpbmUgVkJfRElTUFRZUEVfRElTUDEJVkJfRElTUFRZUEVfQ1JUMQorI2RlZmluZSBWQl9ESVNQTU9ERV9TSU5HTEUJVkJfU0lOR0xFX01PREUKKyNkZWZpbmUgVkJfRElTUE1PREVfTUlSUk9SCVZCX01JUlJPUl9NT0RFCisjZGVmaW5lIFZCX0RJU1BNT0RFX0RVQUwJVkJfRFVBTFZJRVdfTU9ERQorI2RlZmluZSBWQl9ESVNQTEFZX01PREUJCShTSU5HTEVfTU9ERSB8IE1JUlJPUl9NT0RFIHwgRFVBTFZJRVdfTU9ERSkKKworLyogU3RydWN0dXJlIGFyZ3VtZW50IGZvciBTSVNGQl9HRVRfSU5GTyBpb2N0bCAgKi8KK3N0cnVjdCBzaXNmYl9pbmZvIHsKKwlfX3UzMglzaXNmYl9pZDsJCS8qIGZvciBpZGVudGlmeWluZyBzaXNmYiAqLworI2lmbmRlZiBTSVNGQl9JRAorI2RlZmluZSBTSVNGQl9JRAkgIDB4NTM0OTUzNDYgICAgLyogSWRlbnRpZnkgbXlzZWxmIHdpdGggJ1NJU0YnICovCisjZW5kaWYKKwlfX3UzMiAgIGNoaXBfaWQ7CQkvKiBQQ0ktSUQgb2YgZGV0ZWN0ZWQgY2hpcCAqLworCV9fdTMyICAgbWVtb3J5OwkJCS8qIHRvdGFsIHZpZGVvIG1lbW9yeSBpbiBLQiAqLworCV9fdTMyICAgaGVhcHN0YXJ0OwkJLyogaGVhcCBzdGFydCBvZmZzZXQgaW4gS0IgKi8KKwlfX3U4ICAgIGZidmlkbW9kZTsJCS8qIGN1cnJlbnQgc2lzZmIgbW9kZSAqLworCisJX191OAlzaXNmYl92ZXJzaW9uOworCV9fdTgJc2lzZmJfcmV2aXNpb247CisJX191OAlzaXNmYl9wYXRjaGxldmVsOworCisJX191OAlzaXNmYl9jYXBzOwkJLyogc2lzZmIgY2FwYWJpbGl0aWVzICovCisKKwlfX3UzMglzaXNmYl90cWxlbjsJCS8qIHR1cmJvIHF1ZXVlIGxlbmd0aCAoaW4gS0IpICovCisKKwlfX3UzMglzaXNmYl9wY2lidXM7CQkvKiBUaGUgY2FyZCdzIFBDSSBJRCAqLworCV9fdTMyCXNpc2ZiX3BjaXNsb3Q7CisJX191MzIJc2lzZmJfcGNpZnVuYzsKKworCV9fdTgJc2lzZmJfbGNkcGRjOwkJLyogUGFuZWxEZWxheUNvbXBlbnNhdGlvbiAqLworCisJX191OAlzaXNmYl9sY2RhOwkJLyogRGV0ZWN0ZWQgc3RhdHVzIG9mIExDREEgZm9yIGxvdyByZXMvdGV4dCBtb2RlcyAqLworCisJX191MzIJc2lzZmJfdmJmbGFnczsKKwlfX3UzMglzaXNmYl9jdXJyZW50dmJmbGFnczsKKworCV9fdTMyCXNpc2ZiX3NjYWxlbGNkOworCV9fdTMyCXNpc2ZiX3NwZWNpYWx0aW1pbmc7CisKKwlfX3U4CXNpc2ZiX2hhdmVlbWk7CisJX191OAlzaXNmYl9lbWkzMCxzaXNmYl9lbWkzMSxzaXNmYl9lbWkzMixzaXNmYl9lbWkzMzsKKwlfX3U4CXNpc2ZiX2hhdmVlbWlsY2Q7CisKKwlfX3U4CXNpc2ZiX2xjZHBkY2E7CQkvKiBQYW5lbERlbGF5Q29tcGVuc2F0aW9uIGZvciBMQ0QtdmlhLUNSVDEgKi8KKworCV9fdTE2CXNpc2ZiX3R2eHBvcywgc2lzZmJfdHZ5cG9zOwkvKiBXYXJuaW5nOiBWYWx1ZXMgKyAzMiAhICovCisKKwlfX3UzMglzaXNmYl9oZWFwc2l6ZTsJCS8qIGhlYXAgc2l6ZSAoaW4gS0IpICovCisJX191MzIJc2lzZmJfdmlkZW9vZmZzZXQ7CS8qIE9mZnNldCBvZiB2aWV3cG9ydCBpbiB2aWRlbyBtZW1vcnkgKGluIGJ5dGVzKSAqLworCisJX191MzIJc2lzZmJfY3VyZnN0bjsJCS8qIGN1cnJlbnRseSBydW5uaW5nIEZTVE4vRFNUTiBtb2RlICovCisJX191MzIJc2lzZmJfY3VyZHN0bjsKKworCV9fdTE2CXNpc2ZiX3BjaV92ZW5kb3I7CS8qIFBDSSB2ZW5kb3IgKFNpUyBvciBYR0kpICovCisKKwlfX3UzMglzaXNmYl92YmZsYWdzMjsJCS8qIGl2aWRlby0+dmJmbGFnczIgKi8KKworCV9fdTgJc2lzZmJfY2FuX3Bvc3Q7CQkvKiBzaXNmYiBjYW4gUE9TVCB0aGlzIGNhcmQgKi8KKwlfX3U4CXNpc2ZiX2NhcmRfcG9zdGVkOwkvKiBjYXJkIGlzIFBPU1RFRCAqLworCV9fdTgJc2lzZmJfd2FzX2Jvb3RfZGV2aWNlOwkvKiBUaGlzIGNhcmQgd2FzIHRoZSBib290IHZpZGVvIGRldmljZSAoaWUgaXMgcHJpbWFyeSkgKi8KKworCV9fdTgJcmVzZXJ2ZWRbMTgzXTsJCS8qIGZvciBmdXR1cmUgdXNlICovCit9OworCisjZGVmaW5lIFNJU0ZCX0NNRF9HRVRWQkZMQUdTCTB4NTVBQTAwMDEJLyogbm8gYXJnOyByZXN1bHRbMV0gPSB2YmZsYWdzICovCisjZGVmaW5lIFNJU0ZCX0NNRF9TV0lUQ0hDUlQxCTB4NTVBQTAwMTAJLyogYXJnWzBdOiA5OSA9IHF1ZXJ5LCAwID0gb2ZmLCAxID0gb24gKi8KKy8qIG1vcmUgdG8gY29tZSAqLworCisjZGVmaW5lIFNJU0ZCX0NNRF9FUlJfT0sJMHg4MDAwMDAwMAkvKiBjb21tYW5kIHN1Y2NlZWRlZCAqLworI2RlZmluZSBTSVNGQl9DTURfRVJSX0xPQ0tFRAkweDgwMDAwMDAxCS8qIHNpc2ZiIGlzIGxvY2tlZCAqLworI2RlZmluZSBTSVNGQl9DTURfRVJSX0VBUkxZCTB4ODAwMDAwMDIJLyogcmVxdWVzdCBiZWZvcmUgc2lzZmIgdG9vayBvdmVyIGdmeCBzeXN0ZW0gKi8KKyNkZWZpbmUgU0lTRkJfQ01EX0VSUl9OT1ZCCTB4ODAwMDAwMDMJLyogTm8gdmlkZW8gYnJpZGdlICovCisjZGVmaW5lIFNJU0ZCX0NNRF9FUlJfTk9DUlQyCTB4ODAwMDAwMDQJLyogY2FuJ3QgY2hhbmdlIENSVDEgc3RhdHVzLCBDUlQyIGRpc2FibGVkICovCisvKiBtb3JlIHRvIGNvbWUgKi8KKyNkZWZpbmUgU0lTRkJfQ01EX0VSUl9VTktOT1dOICAgMHg4MDAwZmZmZgkvKiBVbmtub3duIGNvbW1hbmQgKi8KKyNkZWZpbmUgU0lTRkJfQ01EX0VSUl9PVEhFUgkweDgwMDEwMDAwCS8qIE90aGVyIGVycm9yICovCisKKy8qIEFyZ3VtZW50IGZvciBTSVNGQl9DTUQgaW9jdGwgKi8KK3N0cnVjdCBzaXNmYl9jbWQgeworCV9fdTMyICBzaXNmYl9jbWQ7CisJX191MzIgIHNpc2ZiX2FyZ1sxNl07CisJX191MzIgIHNpc2ZiX3Jlc3VsdFs0XTsKK307CisKKy8qIEFkZHRpb25hbCBJT0NUTHMgZm9yIGNvbW11bmljYXRpb24gc2lzZmIgPD4gWCBkcml2ZXIgICAgICAgICAgICAgICAgKi8KKy8qIElmIGNoYW5naW5nIHRoaXMsIHZnYXR5cGVzLmggbXVzdCBhbHNvIGJlIGNoYW5nZWQgKGZvciBYIGRyaXZlcikgICAgKi8KKworLyogaW9jdGwgZm9yIGlkZW50aWZ5aW5nIGFuZCBnaXZpbmcgc29tZSBpbmZvIChlc3AuIG1lbW9yeSBoZWFwIHN0YXJ0KSAqLworI2RlZmluZSBTSVNGQl9HRVRfSU5GT19TSVpFCV9JT1IoMHhGMywweDAwLF9fdTMyKQorI2RlZmluZSBTSVNGQl9HRVRfSU5GTwkJX0lPUigweEYzLDB4MDEsc3RydWN0IHNpc2ZiX2luZm8pCisKKy8qIGlvY3RybCB0byBnZXQgY3VycmVudCB2ZXJ0aWNhbCByZXRyYWNlIHN0YXR1cyAqLworI2RlZmluZSBTSVNGQl9HRVRfVkJSU1RBVFVTCV9JT1IoMHhGMywweDAyLF9fdTMyKQorCisvKiBpb2N0bCB0byBlbmFibGUvZGlzYWJsZSBwYW5uaW5nIGF1dG8tbWF4aW1pemUgKGxpa2Ugbm9tYXggcGFyYW1ldGVyKSAqLworI2RlZmluZSBTSVNGQl9HRVRfQVVUT01BWElNSVpFCV9JT1IoMHhGMywweDAzLF9fdTMyKQorI2RlZmluZSBTSVNGQl9TRVRfQVVUT01BWElNSVpFCV9JT1coMHhGMywweDAzLF9fdTMyKQorCisvKiBpb2N0bHMgdG8gcmVsb2NhdGUgVFYgb3V0cHV0ICh4PURbMzE6MTZdLCB5PURbMTU6MF0sICsgMzIpKi8KKyNkZWZpbmUgU0lTRkJfR0VUX1RWUE9TT0ZGU0VUCV9JT1IoMHhGMywweDA0LF9fdTMyKQorI2RlZmluZSBTSVNGQl9TRVRfVFZQT1NPRkZTRVQJX0lPVygweEYzLDB4MDQsX191MzIpCisKKy8qIGlvY3RsIGZvciBpbnRlcm5hbCBzaXNmYiBjb21tYW5kcyAoc2lzZmJjdHJsKSAqLworI2RlZmluZSBTSVNGQl9DT01NQU5ECQlfSU9XUigweEYzLDB4MDUsc3RydWN0IHNpc2ZiX2NtZCkKKworLyogaW9jdGwgZm9yIGxvY2tpbmcgc2lzZmIgKG5vIHJlZ2lzdGVyIGFjY2VzcyBkdXJpbmcgbG9jaykgKi8KKy8qIEFzIG9mIG5vdywgb25seSB1c2VkIHRvIGF2b2lkIHJlZ2lzdGVyIGFjY2VzcyBkdXJpbmcKKyAqIHRoZSBpb2N0bHMgbGlzdGVkIGFib3ZlLgorICovCisjZGVmaW5lIFNJU0ZCX1NFVF9MT0NLCQlfSU9XKDB4RjMsMHgwNixfX3UzMikKKworLyogaW9jdGxzIDB4RjMgdXAgdG8gMHgzRiByZXNlcnZlZCBmb3Igc2lzZmIgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBUaGUgZm9sbG93aW5nIGFyZSBkZXByZWNhdGVkIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYW55bW9yZTogKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogaW9jdGwgZm9yIGlkZW50aWZ5aW5nIGFuZCBnaXZpbmcgc29tZSBpbmZvIChlc3AuIG1lbW9yeSBoZWFwIHN0YXJ0KSAqLworI2RlZmluZSBTSVNGQl9HRVRfSU5GT19PTEQJICAgX0lPUignbicsMHhGOCxfX3UzMikKKy8qIGlvY3RybCB0byBnZXQgY3VycmVudCB2ZXJ0aWNhbCByZXRyYWNlIHN0YXR1cyAqLworI2RlZmluZSBTSVNGQl9HRVRfVkJSU1RBVFVTX09MRAkgICBfSU9SKCduJywweEY5LF9fdTMyKQorLyogaW9jdGwgdG8gZW5hYmxlL2Rpc2FibGUgcGFubmluZyBhdXRvLW1heGltaXplIChsaWtlIG5vbWF4IHBhcmFtZXRlcikgKi8KKyNkZWZpbmUgU0lTRkJfR0VUX0FVVE9NQVhJTUlaRV9PTEQgX0lPUignbicsMHhGQSxfX3UzMikKKyNkZWZpbmUgU0lTRkJfU0VUX0FVVE9NQVhJTUlaRV9PTEQgX0lPVygnbicsMHhGQSxfX3UzMikKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICBFbmQgb2YgZGVwcmVjYXRlZCBpb2N0bCBudW1iZXJzICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogRm9yIGZiIG1lbW9yeSBtYW5hZ2VyIChGQklPX0FMTE9DLCBGQklPX0ZSRUUpICovCitzdHJ1Y3Qgc2lzX21lbXJlcSB7CisJX191MzIJb2Zmc2V0OworCV9fdTMyCXNpemU7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgUFJJVkFURSAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAoZm9yIElOLUtFUk5FTCB1c2FnZSBvbmx5KSAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS92aWRlby91dmVzYWZiLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvdmlkZW8vdXZlc2FmYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZTI4MWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvdmlkZW8vdXZlc2FmYi5oCkBAIC0wLDAgKzEsNjAgQEAKKyNpZm5kZWYgX1VWRVNBRkJfSAorI2RlZmluZSBfVVZFU0FGQl9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3Qgdjg2X3JlZ3MgeworCV9fdTMyIGVieDsKKwlfX3UzMiBlY3g7CisJX191MzIgZWR4OworCV9fdTMyIGVzaTsKKwlfX3UzMiBlZGk7CisJX191MzIgZWJwOworCV9fdTMyIGVheDsKKwlfX3UzMiBlaXA7CisJX191MzIgZWZsYWdzOworCV9fdTMyIGVzcDsKKwlfX3UxNiBjczsKKwlfX3UxNiBzczsKKwlfX3UxNiBlczsKKwlfX3UxNiBkczsKKwlfX3UxNiBmczsKKwlfX3UxNiBnczsKK307CisKKy8qIFRhc2sgZmxhZ3MgKi8KKyNkZWZpbmUgVEZfVkJFSUIJMHgwMQorI2RlZmluZSBURl9CVUZfRVNESQkweDAyCisjZGVmaW5lIFRGX0JVRl9FU0JYCTB4MDQKKyNkZWZpbmUgVEZfQlVGX1JFVAkweDA4CisjZGVmaW5lIFRGX0VYSVQJCTB4MTAKKworc3RydWN0IHV2ZXNhZmJfdGFzayB7CisJX191OCBmbGFnczsKKwlpbnQgYnVmX2xlbjsKKwlzdHJ1Y3Qgdjg2X3JlZ3MgcmVnczsKK307CisKKy8qIENvbnN0YW50cyBmb3IgdGhlIGNhcGFiaWxpdGllcyBmaWVsZAorICogaW4gdmJlX2liICovCisjZGVmaW5lIFZCRV9DQVBfQ0FOX1NXSVRDSF9EQUMJMHgwMQorI2RlZmluZSBWQkVfQ0FQX1ZHQUNPTVBBVAkweDAyCisKKy8qIFRoZSBWQkUgSW5mbyBCbG9jayAqLworc3RydWN0IHZiZV9pYiB7CisJY2hhciAgdmJlX3NpZ25hdHVyZVs0XTsKKwlfX3UxNiB2YmVfdmVyc2lvbjsKKwlfX3UzMiBvZW1fc3RyaW5nX3B0cjsKKwlfX3UzMiBjYXBhYmlsaXRpZXM7CisJX191MzIgbW9kZV9saXN0X3B0cjsKKwlfX3UxNiB0b3RhbF9tZW1vcnk7CisJX191MTYgb2VtX3NvZnR3YXJlX3JldjsKKwlfX3UzMiBvZW1fdmVuZG9yX25hbWVfcHRyOworCV9fdTMyIG9lbV9wcm9kdWN0X25hbWVfcHRyOworCV9fdTMyIG9lbV9wcm9kdWN0X3Jldl9wdHI7CisJX191OCAgcmVzZXJ2ZWRbMjIyXTsKKwljaGFyICBvZW1fZGF0YVsyNTZdOworCWNoYXIgIG1pc2NfZGF0YVs1MTJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNlbmRpZiAvKiBfVVZFU0FGQl9IICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUvd2FpdC5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3dhaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDFiODExCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3dhaXQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS93Y2hhci5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3djaGFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZkOWUzNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS93Y2hhci5oCkBAIC0wLDAgKzEsODQ3IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNCwyMDA1LDIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyoKKyAqICAgICAgSVNPIEM5OSBTdGFuZGFyZDogNy4yNAorICoJRXh0ZW5kZWQgbXVsdGlieXRlIGFuZCB3aWRlIGNoYXJhY3RlciB1dGlsaXRpZXMJPHdjaGFyLmg+CisgKi8KKworI2lmbmRlZiBfV0NIQVJfSAorCisjaWYgIWRlZmluZWQgX19uZWVkX21ic3RhdGVfdCAmJiAhZGVmaW5lZCBfX25lZWRfd2ludF90CisjIGRlZmluZSBfV0NIQVJfSCAxCisjIGluY2x1ZGUgPGZlYXR1cmVzLmg+CisjZW5kaWYKKworI2lmZGVmIF9XQ0hBUl9ICisvKiBHZXQgRklMRSBkZWZpbml0aW9uLiAgKi8KKyMgZGVmaW5lIF9fbmVlZF9fX0ZJTEUKKyMgaWYgZGVmaW5lZCBfX1VTRV9VTklYOTggfHwgZGVmaW5lZCBfX1VTRV9YT1BFTjJLCisjICBkZWZpbmUgX19uZWVkX0ZJTEUKKyMgZW5kaWYKKyMgaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEdldCB2YV9saXN0IGRlZmluaXRpb24uICAqLworIyBkZWZpbmUgX19uZWVkX19fdmFfbGlzdAorIyBpbmNsdWRlIDxzdGRhcmcuaD4KKworIyBpbmNsdWRlIDxiaXRzL3djaGFyLmg+CisKKy8qIEdldCBzaXplX3QsIHdjaGFyX3QsIHdpbnRfdCBhbmQgTlVMTCBmcm9tIDxzdGRkZWYuaD4uICAqLworIyBkZWZpbmUgX19uZWVkX3NpemVfdAorIyBkZWZpbmUgX19uZWVkX3djaGFyX3QKKyMgZGVmaW5lIF9fbmVlZF9OVUxMCisjZW5kaWYKKyNpZiBkZWZpbmVkIF9XQ0hBUl9IIHx8IGRlZmluZWQgX19uZWVkX3dpbnRfdCB8fCAhZGVmaW5lZCBfX1dJTlRfVFlQRV9fCisjIHVuZGVmIF9fbmVlZF93aW50X3QKKyMgZGVmaW5lIF9fbmVlZF93aW50X3QKKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8qIFdlIHRyeSB0byBnZXQgd2ludF90IGZyb20gPHN0ZGRlZi5oPiwgYnV0IG5vdCBhbGwgR0NDIHZlcnNpb25zIGRlZmluZSBpdAorICAgdGhlcmUuICBTbyBkZWZpbmUgaXQgb3Vyc2VsdmVzIGlmIGl0IHJlbWFpbnMgdW5kZWZpbmVkLiAgKi8KKyMgaWZuZGVmIF9XSU5UX1QKKy8qIEludGVncmFsIHR5cGUgdW5jaGFuZ2VkIGJ5IGRlZmF1bHQgYXJndW1lbnQgcHJvbW90aW9ucyB0aGF0IGNhbgorICAgaG9sZCBhbnkgdmFsdWUgY29ycmVzcG9uZGluZyB0byBtZW1iZXJzIG9mIHRoZSBleHRlbmRlZCBjaGFyYWN0ZXIKKyAgIHNldCwgYXMgd2VsbCBhcyBhdCBsZWFzdCBvbmUgdmFsdWUgdGhhdCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFueQorICAgbWVtYmVyIG9mIHRoZSBleHRlbmRlZCBjaGFyYWN0ZXIgc2V0LiAgKi8KKyMgIGRlZmluZSBfV0lOVF9UCit0eXBlZGVmIHVuc2lnbmVkIGludCB3aW50X3Q7CisjIGVsc2UKKy8qIFdvcmsgYXJvdW5kIHByb2JsZW1zIHdpdGggdGhlIDxzdGRkZWYuaD4gZmlsZSB3aGljaCBkb2Vzbid0IHB1dAorICAgd2ludF90IGluIHRoZSBzdGQgbmFtZXNwYWNlLiAgKi8KKyMgIGlmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBfR0xJQkNQUF9VU0VfTkFNRVNQQUNFUyBcCisgICAgICAmJiBkZWZpbmVkIF9fV0lOVF9UWVBFX18KK19fQkVHSU5fTkFNRVNQQUNFX1NURAordHlwZWRlZiBfX1dJTlRfVFlQRV9fIHdpbnRfdDsKK19fRU5EX05BTUVTUEFDRV9TVEQKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworI2lmIChkZWZpbmVkIF9XQ0hBUl9IIHx8IGRlZmluZWQgX19uZWVkX21ic3RhdGVfdCkgJiYgIWRlZmluZWQgX19tYnN0YXRlX3RfZGVmaW5lZAorIyBkZWZpbmUgX19tYnN0YXRlX3RfZGVmaW5lZAkxCisvKiBDb252ZXJzaW9uIHN0YXRlIGluZm9ybWF0aW9uLiAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIGludCBfX2NvdW50OworICB1bmlvbgorICB7CisjIGlmZGVmIF9fV0lOVF9UWVBFX18KKyAgICBfX1dJTlRfVFlQRV9fIF9fd2NoOworIyBlbHNlCisgICAgd2ludF90IF9fd2NoOworIyBlbmRpZgorICAgIGNoYXIgX193Y2hiWzRdOworICB9IF9fdmFsdWU7CQkvKiBWYWx1ZSBzbyBmYXIuICAqLworfSBfX21ic3RhdGVfdDsKKyNlbmRpZgorI3VuZGVmIF9fbmVlZF9tYnN0YXRlX3QKKworCisvKiBUaGUgcmVzdCBvZiB0aGUgZmlsZSBpcyBvbmx5IHVzZWQgaWYgdXNlZCBpZiBfX25lZWRfbWJzdGF0ZV90IGlzIG5vdAorICAgZGVmaW5lZC4gICovCisjaWZkZWYgX1dDSEFSX0gKKworX19CRUdJTl9OQU1FU1BBQ0VfQzk5CisvKiBQdWJsaWMgdHlwZS4gICovCit0eXBlZGVmIF9fbWJzdGF0ZV90IG1ic3RhdGVfdDsKK19fRU5EX05BTUVTUEFDRV9DOTkKKyNpZmRlZiBfX1VTRV9HTlUKK19fVVNJTkdfTkFNRVNQQUNFX0M5OShtYnN0YXRlX3QpCisjZW5kaWYKKworI2lmbmRlZiBXQ0hBUl9NSU4KKy8qIFRoZXNlIGNvbnN0YW50cyBtaWdodCBhbHNvIGJlIGRlZmluZWQgaW4gPGludHR5cGVzLmg+LiAgKi8KKyMgZGVmaW5lIFdDSEFSX01JTiBfX1dDSEFSX01JTgorIyBkZWZpbmUgV0NIQVJfTUFYIF9fV0NIQVJfTUFYCisjZW5kaWYKKworI2lmbmRlZiBXRU9GCisjIGRlZmluZSBXRU9GICgweGZmZmZmZmZmdSkKKyNlbmRpZgorCisvKiBGb3IgWFBHNCBjb21wbGlhbmNlIHdlIGhhdmUgdG8gZGVmaW5lIHRoZSBzdHVmZiBmcm9tIDx3Y3R5cGUuaD4gaGVyZQorICAgYXMgd2VsbC4gICovCisjaWYgZGVmaW5lZCBfX1VTRV9YT1BFTiAmJiAhZGVmaW5lZCBfX1VTRV9VTklYOTgKKyMgaW5jbHVkZSA8d2N0eXBlLmg+CisjZW5kaWYKKworCitfX0JFR0lOX0RFQ0xTCisKK19fQkVHSU5fTkFNRVNQQUNFX1NURAorLyogVGhpcyBpbmNvbXBsZXRlIHR5cGUgaXMgZGVmaW5lZCBpbiA8dGltZS5oPiBidXQgbmVlZGVkIGhlcmUgYmVjYXVzZQorICAgb2YgYHdjc2Z0aW1lJy4gICovCitzdHJ1Y3QgdG07CitfX0VORF9OQU1FU1BBQ0VfU1RECisvKiBYWFggV2UgaGF2ZSB0byBjbGVhbiB0aGlzIHVwIGF0IHNvbWUgcG9pbnQuICBTaW5jZSB0bSBpcyBpbiB0aGUgc3RkCisgICBuYW1lc3BhY2UgYnV0IHdjc2Z0aW1lIGlzIGluIF9fYzk5IHRoZSB0eXBlIHdvdWxkbid0IGJlIGZvdW5kCisgICB3aXRob3V0IGluc2VydGluZyBpdCBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZS4gICovCitfX1VTSU5HX05BTUVTUEFDRV9TVEQodG0pCisKKworX19CRUdJTl9OQU1FU1BBQ0VfU1RECisvKiBDb3B5IFNSQyB0byBERVNULiAgKi8KK2V4dGVybiB3Y2hhcl90ICp3Y3NjcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAorCQkJX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjKSBfX1RIUk9XOworLyogQ29weSBubyBtb3JlIHRoYW4gTiB3aWRlLWNoYXJhY3RlcnMgb2YgU1JDIHRvIERFU1QuICAqLworZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAorCQkJIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikKKyAgICAgX19USFJPVzsKKworLyogQXBwZW5kIFNSQyBvbnRvIERFU1QuICAqLworZXh0ZXJuIHdjaGFyX3QgKndjc2NhdCAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCisJCQlfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIF9fVEhST1c7CisvKiBBcHBlbmQgbm8gbW9yZSB0aGFuIE4gd2lkZS1jaGFyYWN0ZXJzIG9mIFNSQyBvbnRvIERFU1QuICAqLworZXh0ZXJuIHdjaGFyX3QgKndjc25jYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAorCQkJIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikKKyAgICAgX19USFJPVzsKKworLyogQ29tcGFyZSBTMSBhbmQgUzIuICAqLworZXh0ZXJuIGludCB3Y3NjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX3B1cmVfXzsKKy8qIENvbXBhcmUgTiB3aWRlLWNoYXJhY3RlcnMgb2YgUzEgYW5kIFMyLiAgKi8KK2V4dGVybiBpbnQgd2NzbmNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfcHVyZV9fOworX19FTkRfTkFNRVNQQUNFX1NURAorCisjaWZkZWYgX19VU0VfR05VCisvKiBDb21wYXJlIFMxIGFuZCBTMiwgaWdub3JpbmcgY2FzZS4gICovCitleHRlcm4gaW50IHdjc2Nhc2VjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKSBfX1RIUk9XOworCisvKiBDb21wYXJlIG5vIG1vcmUgdGhhbiBOIGNoYXJzIG9mIFMxIGFuZCBTMiwgaWdub3JpbmcgY2FzZS4gICovCitleHRlcm4gaW50IHdjc25jYXNlY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKKwkJCXNpemVfdCBfX24pIF9fVEhST1c7CisKKy8qIFNpbWlsYXIgdG8gdGhlIHR3byBmdW5jdGlvbnMgYWJvdmUgYnV0IHRha2UgdGhlIGluZm9ybWF0aW9uIGZyb20KKyAgIHRoZSBwcm92aWRlZCBsb2NhbGUgYW5kIG5vdCB0aGUgZ2xvYmFsIGxvY2FsZS4gICovCisjIGluY2x1ZGUgPHhsb2NhbGUuaD4KKworZXh0ZXJuIGludCB3Y3NjYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAorCQkJIF9fbG9jYWxlX3QgX19sb2MpIF9fVEhST1c7CisKK2V4dGVybiBpbnQgd2NzbmNhc2VjbXBfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCisJCQkgIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpIF9fVEhST1c7CisjZW5kaWYKKworX19CRUdJTl9OQU1FU1BBQ0VfU1RECisvKiBDb21wYXJlIFMxIGFuZCBTMiwgYm90aCBpbnRlcnByZXRlZCBhcyBhcHByb3ByaWF0ZSB0byB0aGUKKyAgIExDX0NPTExBVEUgY2F0ZWdvcnkgb2YgdGhlIGN1cnJlbnQgbG9jYWxlLiAgKi8KK2V4dGVybiBpbnQgd2NzY29sbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIF9fVEhST1c7CisvKiBUcmFuc2Zvcm0gUzIgaW50byBhcnJheSBwb2ludGVkIHRvIGJ5IFMxIHN1Y2ggdGhhdCBpZiB3Y3NjbXAgaXMKKyAgIGFwcGxpZWQgdG8gdHdvIHRyYW5zZm9ybWVkIHN0cmluZ3MgdGhlIHJlc3VsdCBpcyB0aGUgYXMgYXBwbHlpbmcKKyAgIGB3Y3Njb2xsJyB0byB0aGUgb3JpZ2luYWwgc3RyaW5ncy4gICovCitleHRlcm4gc2l6ZV90IHdjc3hmcm0gKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKKwkJICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSBfX1RIUk9XOworX19FTkRfTkFNRVNQQUNFX1NURAorCisjaWZkZWYgX19VU0VfR05VCisvKiBTaW1pbGFyIHRvIHRoZSB0d28gZnVuY3Rpb25zIGFib3ZlIGJ1dCB0YWtlIHRoZSBpbmZvcm1hdGlvbiBmcm9tCisgICB0aGUgcHJvdmlkZWQgbG9jYWxlIGFuZCBub3QgdGhlIGdsb2JhbCBsb2NhbGUuICAqLworCisvKiBDb21wYXJlIFMxIGFuZCBTMiwgYm90aCBpbnRlcnByZXRlZCBhcyBhcHByb3ByaWF0ZSB0byB0aGUKKyAgIExDX0NPTExBVEUgY2F0ZWdvcnkgb2YgdGhlIGdpdmVuIGxvY2FsZS4gICovCitleHRlcm4gaW50IHdjc2NvbGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCisJCSAgICAgIF9fbG9jYWxlX3QgX19sb2MpIF9fVEhST1c7CisKKy8qIFRyYW5zZm9ybSBTMiBpbnRvIGFycmF5IHBvaW50ZWQgdG8gYnkgUzEgc3VjaCB0aGF0IGlmIHdjc2NtcCBpcworICAgYXBwbGllZCB0byB0d28gdHJhbnNmb3JtZWQgc3RyaW5ncyB0aGUgcmVzdWx0IGlzIHRoZSBhcyBhcHBseWluZworICAgYHdjc2NvbGwnIHRvIHRoZSBvcmlnaW5hbCBzdHJpbmdzLiAgKi8KK2V4dGVybiBzaXplX3Qgd2NzeGZybV9sICh3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCisJCQkgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykgX19USFJPVzsKKworLyogRHVwbGljYXRlIFMsIHJldHVybmluZyBhbiBpZGVudGljYWwgbWFsbG9jJ2Qgc3RyaW5nLiAgKi8KK2V4dGVybiB3Y2hhcl90ICp3Y3NkdXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zKSBfX1RIUk9XIF9fYXR0cmlidXRlX21hbGxvY19fOworI2VuZGlmCisKK19fQkVHSU5fTkFNRVNQQUNFX1NURAorLyogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBXQyBpbiBXQ1MuICAqLworZXh0ZXJuIHdjaGFyX3QgKndjc2NociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgd2NoYXJfdCBfX3djKQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX3B1cmVfXzsKKy8qIEZpbmQgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBXQyBpbiBXQ1MuICAqLworZXh0ZXJuIHdjaGFyX3QgKndjc3JjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9wdXJlX187CitfX0VORF9OQU1FU1BBQ0VfU1RECisKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIFRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0byBgd2NzY2hyJy4gIEJ1dCBpdCByZXR1cm5zIGEgcG9pbnRlciB0bworICAgdGhlIGNsb3NpbmcgTlVMIHdpZGUgY2hhcmFjdGVyIGluIGNhc2UgQyBpcyBub3QgZm91bmQgaW4gUy4gICovCitleHRlcm4gd2NoYXJfdCAqd2NzY2hybnVsIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX3djKQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX3B1cmVfXzsKKyNlbmRpZgorCitfX0JFR0lOX05BTUVTUEFDRV9TVEQKKy8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbml0aWFsIHNlZ21ldCBvZiBXQ1Mgd2hpY2gKKyAgIGNvbnNpc3RzIGVudGlyZWx5IG9mIHdpZGUgY2hhcmFjdGVycyBub3QgaW4gUkVKRUNULiAgKi8KK2V4dGVybiBzaXplX3Qgd2NzY3NwbiAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpfX3JlamVjdCkKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9wdXJlX187CisvKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgaW5pdGlhbCBzZWdtZXQgb2YgV0NTIHdoaWNoCisgICBjb25zaXN0cyBlbnRpcmVseSBvZiB3aWRlIGNoYXJhY3RlcnMgaW4gIEFDQ0VQVC4gICovCitleHRlcm4gc2l6ZV90IHdjc3NwbiAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpfX2FjY2VwdCkKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9wdXJlX187CisvKiBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIGluIFdDUyBvZiBhbnkgY2hhcmFjdGVyIGluIEFDQ0VQVC4gICovCitleHRlcm4gd2NoYXJfdCAqd2NzcGJyayAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpfX2FjY2VwdCkKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9wdXJlX187CisvKiBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIE5FRURMRSBpbiBIQVlTVEFDSy4gICovCitleHRlcm4gd2NoYXJfdCAqd2Nzc3RyIChfX2NvbnN0IHdjaGFyX3QgKl9faGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVkbGUpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfcHVyZV9fOworCisvKiBEaXZpZGUgV0NTIGludG8gdG9rZW5zIHNlcGFyYXRlZCBieSBjaGFyYWN0ZXJzIGluIERFTElNLiAgKi8KK2V4dGVybiB3Y2hhcl90ICp3Y3N0b2sgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLAorCQkJX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVsaW0sCisJCQl3Y2hhcl90ICoqX19yZXN0cmljdCBfX3B0cikgX19USFJPVzsKKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2Ygd2lkZSBjaGFyYWN0ZXJzIGluIFMuICAqLworZXh0ZXJuIHNpemVfdCB3Y3NsZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zKSBfX1RIUk9XIF9fYXR0cmlidXRlX3B1cmVfXzsKK19fRU5EX05BTUVTUEFDRV9TVEQKKworI2lmZGVmIF9fVVNFX1hPUEVOCisvKiBBbm90aGVyIG5hbWUgZm9yIGB3Y3NzdHInIGZyb20gWFBHNC4gICovCitleHRlcm4gd2NoYXJfdCAqd2Nzd2NzIChfX2NvbnN0IHdjaGFyX3QgKl9faGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVkbGUpCisgICAgIF9fVEhST1cgX19hdHRyaWJ1dGVfcHVyZV9fOworI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIHdpZGUgY2hhcmFjdGVycyBpbiBTLCBidXQgYXQgbW9zdCBNQVhMRU4uICAqLworZXh0ZXJuIHNpemVfdCB3Y3NubGVuIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90IF9fbWF4bGVuKQorICAgICBfX1RIUk9XIF9fYXR0cmlidXRlX3B1cmVfXzsKKyNlbmRpZgorCisKK19fQkVHSU5fTkFNRVNQQUNFX1NURAorLyogU2VhcmNoIE4gd2lkZSBjaGFyYWN0ZXJzIG9mIFMgZm9yIEMuICAqLworZXh0ZXJuIHdjaGFyX3QgKndtZW1jaHIgKF9fY29uc3Qgd2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9wdXJlX187CisKKy8qIENvbXBhcmUgTiB3aWRlIGNoYXJhY3RlcnMgb2YgUzEgYW5kIFMyLiAgKi8KK2V4dGVybiBpbnQgd21lbWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCisJCSAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikKKyAgICAgX19USFJPVyBfX2F0dHJpYnV0ZV9wdXJlX187CisKKy8qIENvcHkgTiB3aWRlIGNoYXJhY3RlcnMgb2YgU1JDIHRvIERFU1QuICAqLworZXh0ZXJuIHdjaGFyX3QgKndtZW1jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKKwkJCSBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikgX19USFJPVzsKKworLyogQ29weSBOIHdpZGUgY2hhcmFjdGVycyBvZiBTUkMgdG8gREVTVCwgZ3VhcmFudGVlaW5nCisgICBjb3JyZWN0IGJlaGF2aW9yIGZvciBvdmVybGFwcGluZyBzdHJpbmdzLiAgKi8KK2V4dGVybiB3Y2hhcl90ICp3bWVtbW92ZSAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uKQorICAgICBfX1RIUk9XOworCisvKiBTZXQgTiB3aWRlIGNoYXJhY3RlcnMgb2YgUyB0byBDLiAgKi8KK2V4dGVybiB3Y2hhcl90ICp3bWVtc2V0ICh3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKSBfX1RIUk9XOworX19FTkRfTkFNRVNQQUNFX1NURAorCisjaWZkZWYgX19VU0VfR05VCisvKiBDb3B5IE4gd2lkZSBjaGFyYWN0ZXJzIG9mIFNSQyB0byBERVNUIGFuZCByZXR1cm4gcG9pbnRlciB0byBmb2xsb3dpbmcKKyAgIHdpZGUgY2hhcmFjdGVyLiAgKi8KK2V4dGVybiB3Y2hhcl90ICp3bWVtcGNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAorCQkJICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikKKyAgICAgX19USFJPVzsKKyNlbmRpZgorCisKK19fQkVHSU5fTkFNRVNQQUNFX1NURAorLyogRGV0ZXJtaW5lIHdoZXRoZXIgQyBjb25zdGl0dXRlcyBhIHZhbGlkIChvbmUtYnl0ZSkgbXVsdGlieXRlCisgICBjaGFyYWN0ZXIuICAqLworZXh0ZXJuIHdpbnRfdCBidG93YyAoaW50IF9fYykgX19USFJPVzsKKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgQyBjb3JyZXNwb25kcyB0byBhIG1lbWJlciBvZiB0aGUgZXh0ZW5kZWQKKyAgIGNoYXJhY3RlciBzZXQgd2hvc2UgbXVsdGlieXRlIHJlcHJlc2VudGF0aW9uIGlzIGEgc2luZ2xlIGJ5dGUuICAqLworZXh0ZXJuIGludCB3Y3RvYiAod2ludF90IF9fYykgX19USFJPVzsKKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgUFMgcG9pbnRzIHRvIGFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGluaXRpYWwKKyAgIHN0YXRlLiAgKi8KK2V4dGVybiBpbnQgbWJzaW5pdCAoX19jb25zdCBtYnN0YXRlX3QgKl9fcHMpIF9fVEhST1cgX19hdHRyaWJ1dGVfcHVyZV9fOworCisvKiBXcml0ZSB3aWRlIGNoYXJhY3RlciByZXByZXNlbnRhdGlvbiBvZiBtdWx0aWJ5dGUgY2hhcmFjdGVyIHBvaW50ZWQKKyAgIHRvIGJ5IFMgdG8gUFdDLiAgKi8KK2V4dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywKKwkJICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCisJCSAgICAgICBtYnN0YXRlX3QgKl9fcCkgX19USFJPVzsKKworLyogV3JpdGUgbXVsdGlieXRlIHJlcHJlc2VudGF0aW9uIG9mIHdpZGUgY2hhcmFjdGVyIFdDIHRvIFMuICAqLworZXh0ZXJuIHNpemVfdCB3Y3J0b21iIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgd2NoYXJfdCBfX3djLAorCQkgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIF9fVEhST1c7CisKKy8qIFJldHVybiBudW1iZXIgb2YgYnl0ZXMgaW4gbXVsdGlieXRlIGNoYXJhY3RlciBwb2ludGVkIHRvIGJ5IFMuICAqLworZXh0ZXJuIHNpemVfdCBfX21icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKKwkJCW1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSBfX1RIUk9XOworZXh0ZXJuIHNpemVfdCBtYnJsZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCisJCSAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSBfX1RIUk9XOworX19FTkRfTkFNRVNQQUNFX1NURAorCisjaWZkZWYgX19VU0VfRVhURVJOX0lOTElORVMKKy8qIERlZmluZSBpbmxpbmUgZnVuY3Rpb24gYXMgb3B0aW1pemF0aW9uLiAgKi8KKworLyogV2UgY2FuIHVzZSB0aGUgQlRPV0MgYW5kIFdDVE9CIG9wdGltaXphdGlvbnMgc2luY2Ugd2Uga25vdyB0aGF0IGFsbAorICAgbG9jYWxlcyBtdXN0IHVzZSBBU0NJSSBlbmNvZGluZyBmb3IgdGhlIHZhbHVlcyBpbiB0aGUgQVNDSUkgcmFuZ2UKKyAgIGFuZCBiZWNhdXNlIHRoZSB3Y2hhcl90IGVuY29kaW5nIGlzIGFsd2F5cyBJU08gMTA2NDYuICAqLworZXh0ZXJuIHdpbnRfdCBfX2J0b3djX2FsaWFzIChpbnQgX19jKSBfX2FzbSAoImJ0b3djIik7CitfX2V4dGVybl9pbmxpbmUgd2ludF90CitfX05USCAoYnRvd2MgKGludCBfX2MpKQoreyByZXR1cm4gKF9fYnVpbHRpbl9jb25zdGFudF9wIChfX2MpICYmIF9fYyA+PSAnXDAnICYmIF9fYyA8PSAnXHg3ZicKKwkgID8gKHdpbnRfdCkgX19jIDogX19idG93Y19hbGlhcyAoX19jKSk7IH0KKworZXh0ZXJuIGludCBfX3djdG9iX2FsaWFzICh3aW50X3QgX19jKSBfX2FzbSAoIndjdG9iIik7CitfX2V4dGVybl9pbmxpbmUgaW50CitfX05USCAod2N0b2IgKHdpbnRfdCBfX3djKSkKK3sgcmV0dXJuIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX193YykgJiYgX193YyA+PSBMJ1wwJyAmJiBfX3djIDw9IEwnXHg3ZicKKwkgID8gKGludCkgX193YyA6IF9fd2N0b2JfYWxpYXMgKF9fd2MpKTsgfQorCitfX2V4dGVybl9pbmxpbmUgc2l6ZV90CitfX05USCAobWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAorCSAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykpCit7IHJldHVybiAoX19wcyAhPSBOVUxMCisJICA/IG1icnRvd2MgKE5VTEwsIF9fcywgX19uLCBfX3BzKSA6IF9fbWJybGVuIChfX3MsIF9fbiwgTlVMTCkpOyB9CisjZW5kaWYKKworX19CRUdJTl9OQU1FU1BBQ0VfU1RECisvKiBXcml0ZSB3aWRlIGNoYXJhY3RlciByZXByZXNlbnRhdGlvbiBvZiBtdWx0aWJ5dGUgY2hhcmFjdGVyIHN0cmluZworICAgU1JDIHRvIERTVC4gICovCitleHRlcm4gc2l6ZV90IG1ic3J0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX2RzdCwKKwkJCSBfX2NvbnN0IGNoYXIgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19sZW4sCisJCQkgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIF9fVEhST1c7CisKKy8qIFdyaXRlIG11bHRpYnl0ZSBjaGFyYWN0ZXIgcmVwcmVzZW50YXRpb24gb2Ygd2lkZSBjaGFyYWN0ZXIgc3RyaW5nCisgICBTUkMgdG8gRFNULiAgKi8KK2V4dGVybiBzaXplX3Qgd2NzcnRvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LAorCQkJIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwKKwkJCSBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgX19USFJPVzsKK19fRU5EX05BTUVTUEFDRV9TVEQKKworCisjaWZkZWYJX19VU0VfR05VCisvKiBXcml0ZSB3aWRlIGNoYXJhY3RlciByZXByZXNlbnRhdGlvbiBvZiBhdCBtb3N0IE5NQyBieXRlcyBvZiB0aGUKKyAgIG11bHRpYnl0ZSBjaGFyYWN0ZXIgc3RyaW5nIFNSQyB0byBEU1QuICAqLworZXh0ZXJuIHNpemVfdCBtYnNucnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAorCQkJICBfX2NvbnN0IGNoYXIgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19ubWMsCisJCQkgIHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIF9fVEhST1c7CisKKy8qIFdyaXRlIG11bHRpYnl0ZSBjaGFyYWN0ZXIgcmVwcmVzZW50YXRpb24gb2YgYXQgbW9zdCBOV0MgY2hhcmFjdGVycworICAgZnJvbSB0aGUgd2lkZSBjaGFyYWN0ZXIgc3RyaW5nIFNSQyB0byBEU1QuICAqLworZXh0ZXJuIHNpemVfdCB3Y3NucnRvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LAorCQkJICBfX2NvbnN0IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fc3JjLAorCQkJICBzaXplX3QgX19ud2MsIHNpemVfdCBfX2xlbiwKKwkJCSAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIF9fVEhST1c7CisjZW5kaWYJLyogdXNlIEdOVSAqLworCisKKy8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBleHRlbnNpb25zIGZvdW5kIGluIFgvT3BlbiBDQUUuICAqLworI2lmZGVmIF9fVVNFX1hPUEVOCisvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIGNvbHVtbiBwb3NpdGlvbnMgcmVxdWlyZWQgZm9yIEMuICAqLworZXh0ZXJuIGludCB3Y3dpZHRoICh3Y2hhcl90IF9fYykgX19USFJPVzsKKworLyogRGV0ZXJtaW5lIG51bWJlciBvZiBjb2x1bW4gcG9zaXRpb25zIHJlcXVpcmVkIGZvciBmaXJzdCBOIHdpZGUKKyAgIGNoYXJhY3RlcnMgKG9yIGZld2VyIGlmIFMgZW5kcyBiZWZvcmUgdGhpcykgaW4gUy4gICovCitleHRlcm4gaW50IHdjc3dpZHRoIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90IF9fbikgX19USFJPVzsKKyNlbmRpZgkvKiBVc2UgWC9PcGVuLiAgKi8KKworCitfX0JFR0lOX05BTUVTUEFDRV9TVEQKKy8qIENvbnZlcnQgaW5pdGlhbCBwb3J0aW9uIG9mIHRoZSB3aWRlIHN0cmluZyBOUFRSIHRvIGBkb3VibGUnCisgICByZXByZXNlbnRhdGlvbi4gICovCitleHRlcm4gZG91YmxlIHdjc3RvZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKKwkJICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIF9fVEhST1c7CitfX0VORF9OQU1FU1BBQ0VfU1RECisKKyNpZmRlZiBfX1VTRV9JU09DOTkKK19fQkVHSU5fTkFNRVNQQUNFX0M5OQorLyogTGlrZXdpc2UgZm9yIGBmbG9hdCcgYW5kIGBsb25nIGRvdWJsZScgc2l6ZXMgb2YgZmxvYXRpbmctcG9pbnQgbnVtYmVycy4gICovCitleHRlcm4gZmxvYXQgd2NzdG9mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAorCQkgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSBfX1RIUk9XOworZXh0ZXJuIGxvbmcgZG91YmxlIHdjc3RvbGQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCisJCQkgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIF9fVEhST1c7CitfX0VORF9OQU1FU1BBQ0VfQzk5CisjZW5kaWYgLyogQzk5ICovCisKKworX19CRUdJTl9OQU1FU1BBQ0VfU1RECisvKiBDb252ZXJ0IGluaXRpYWwgcG9ydGlvbiBvZiB3aWRlIHN0cmluZyBOUFRSIHRvIGBsb25nIGludCcKKyAgIHJlcHJlc2VudGF0aW9uLiAgKi8KK2V4dGVybiBsb25nIGludCB3Y3N0b2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCisJCQl3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgX19USFJPVzsKKworLyogQ29udmVydCBpbml0aWFsIHBvcnRpb24gb2Ygd2lkZSBzdHJpbmcgTlBUUiB0byBgdW5zaWduZWQgbG9uZyBpbnQnCisgICByZXByZXNlbnRhdGlvbi4gICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgd2NzdG91bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKKwkJCQkgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQorICAgICBfX1RIUk9XOworX19FTkRfTkFNRVNQQUNFX1NURAorCisjaWYgZGVmaW5lZCBfX1VTRV9JU09DOTkgfHwgKGRlZmluZWQgX19HTlVDX18gJiYgZGVmaW5lZCBfX1VTRV9HTlUpCitfX0JFR0lOX05BTUVTUEFDRV9DOTkKKy8qIENvbnZlcnQgaW5pdGlhbCBwb3J0aW9uIG9mIHdpZGUgc3RyaW5nIE5QVFIgdG8gYGxvbmcgbG9uZyBpbnQnCisgICByZXByZXNlbnRhdGlvbi4gICovCitfX2V4dGVuc2lvbl9fCitleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b2xsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAorCQkJICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCisgICAgIF9fVEhST1c7CisKKy8qIENvbnZlcnQgaW5pdGlhbCBwb3J0aW9uIG9mIHdpZGUgc3RyaW5nIE5QVFIgdG8gYHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQnCisgICByZXByZXNlbnRhdGlvbi4gICovCitfX2V4dGVuc2lvbl9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCB3Y3N0b3VsbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKKwkJCQkJd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCisJCQkJCWludCBfX2Jhc2UpIF9fVEhST1c7CitfX0VORF9OQU1FU1BBQ0VfQzk5CisjZW5kaWYgLyogSVNPIEM5OSBvciBHQ0MgYW5kIEdOVS4gICovCisKKyNpZiBkZWZpbmVkIF9fR05VQ19fICYmIGRlZmluZWQgX19VU0VfR05VCisvKiBDb252ZXJ0IGluaXRpYWwgcG9ydGlvbiBvZiB3aWRlIHN0cmluZyBOUFRSIHRvIGBsb25nIGxvbmcgaW50JworICAgcmVwcmVzZW50YXRpb24uICAqLworX19leHRlbnNpb25fXworZXh0ZXJuIGxvbmcgbG9uZyBpbnQgd2NzdG9xIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAorCQkJICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKKyAgICAgX19USFJPVzsKKworLyogQ29udmVydCBpbml0aWFsIHBvcnRpb24gb2Ygd2lkZSBzdHJpbmcgTlBUUiB0byBgdW5zaWduZWQgbG9uZyBsb25nIGludCcKKyAgIHJlcHJlc2VudGF0aW9uLiAgKi8KK19fZXh0ZW5zaW9uX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHdjc3RvdXEgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCisJCQkJICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAorCQkJCSAgICAgICBpbnQgX19iYXNlKSBfX1RIUk9XOworI2VuZGlmIC8qIEdDQyBhbmQgdXNlIEdOVS4gICovCisKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIFRoZSBjb25jZXB0IG9mIG9uZSBzdGF0aWMgbG9jYWxlIHBlciBjYXRlZ29yeSBpcyBub3QgdmVyeSB3ZWxsCisgICB0aG91Z2h0IG91dC4gIE1hbnkgYXBwbGljYXRpb25zIHdpbGwgbmVlZCB0byBwcm9jZXNzIGl0cyBkYXRhIHVzaW5nCisgICBpbmZvcm1hdGlvbiBmcm9tIHNldmVyYWwgZGlmZmVyZW50IGxvY2FsZXMuICBBbm90aGVyIGFwcGxpY2F0aW9uIGlzCisgICB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGludGVybmF0aW9uYWxpemF0aW9uIGhhbmRsaW5nIGluIHRoZQorICAgdXBjb21pbmcgSVNPIEMrKyBzdGFuZGFyZCBsaWJyYXJ5LiAgVG8gc3VwcG9ydCB0aGlzIGFub3RoZXIgc2V0IG9mCisgICB0aGUgZnVuY3Rpb25zIHVzaW5nIGxvY2FsZSBkYXRhIGV4aXN0IHdoaWNoIGhhdmUgYW4gYWRkaXRpb25hbAorICAgYXJndW1lbnQuCisKKyAgIEF0dGVudGlvbjogYWxsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgKm5vdCogc3RhbmRhcmRpemVkIGluIGFueSBmb3JtLgorICAgVGhpcyBpcyBhIHByb29mLW9mLWNvbmNlcHQgaW1wbGVtZW50YXRpb24uICAqLworCisvKiBTdHJ1Y3R1cmUgZm9yIHJlZW50cmFudCBsb2NhbGUgdXNpbmcgZnVuY3Rpb25zLiAgVGhpcyBpcyBhbgorICAgKGFsbW9zdCkgb3BhcXVlIHR5cGUgZm9yIHRoZSB1c2VyIGxldmVsIHByb2dyYW1zLiAgKi8KKyMgaW5jbHVkZSA8eGxvY2FsZS5oPgorCisvKiBTcGVjaWFsIHZlcnNpb25zIG9mIHRoZSBmdW5jdGlvbnMgYWJvdmUgd2hpY2ggdGFrZSB0aGUgbG9jYWxlIHRvCisgICB1c2UgYXMgYW4gYWRkaXRpb25hbCBwYXJhbWV0ZXIuICAqLworZXh0ZXJuIGxvbmcgaW50IHdjc3RvbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAorCQkJICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKKwkJCSAgX19sb2NhbGVfdCBfX2xvYykgX19USFJPVzsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHdjc3RvdWxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKKwkJCQkgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCisJCQkJICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIF9fVEhST1c7CisKK19fZXh0ZW5zaW9uX18KK2V4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvbGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKKwkJCQl3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKKwkJCQlpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSBfX1RIUk9XOworCitfX2V4dGVuc2lvbl9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCB3Y3N0b3VsbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAorCQkJCQkgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAorCQkJCQkgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCisgICAgIF9fVEhST1c7CisKK2V4dGVybiBkb3VibGUgd2NzdG9kX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCisJCQl3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKKyAgICAgX19USFJPVzsKKworZXh0ZXJuIGZsb2F0IHdjc3RvZl9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAorCQkgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCisgICAgIF9fVEhST1c7CisKK2V4dGVybiBsb25nIGRvdWJsZSB3Y3N0b2xkX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCisJCQkgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKKwkJCSAgICAgIF9fbG9jYWxlX3QgX19sb2MpIF9fVEhST1c7CisjZW5kaWYgLyogR05VICovCisKKworI2lmZGVmCV9fVVNFX0dOVQorLyogQ29weSBTUkMgdG8gREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyBMJ1wwJyBpbgorICAgREVTVC4gICovCitleHRlcm4gd2NoYXJfdCAqd2NwY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMpIF9fVEhST1c7CisKKy8qIENvcHkgbm8gbW9yZSB0aGFuIE4gY2hhcmFjdGVycyBvZiBTUkMgdG8gREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mCisgICB0aGUgbGFzdCBjaGFyYWN0ZXIgd3JpdHRlbiBpbnRvIERFU1QuICAqLworZXh0ZXJuIHdjaGFyX3QgKndjcG5jcHkgKHdjaGFyX3QgKl9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3NyYywgc2l6ZV90IF9fbikKKyAgICAgX19USFJPVzsKKyNlbmRpZgkvKiB1c2UgR05VICovCisKKworLyogV2lkZSBjaGFyYWN0ZXIgSS9PIGZ1bmN0aW9ucy4gICovCisKKyNpZmRlZglfX1VTRV9HTlUKKy8qIExpa2UgT1BFTl9NRU1TVFJFQU0sIGJ1dCB0aGUgc3RyZWFtIGlzIHdpZGUgb3JpZW50ZWQgYW5kIHByb2R1Y2VzCisgICBhIHdpZGUgY2hhcmFjdGVyIHN0cmluZy4gICovCitleHRlcm4gX19GSUxFICpvcGVuX3dtZW1zdHJlYW0gKHdjaGFyX3QgKipfX2J1ZmxvYywgc2l6ZV90ICpfX3NpemVsb2MpIF9fVEhST1c7CisjZW5kaWYKKworI2lmIGRlZmluZWQgX19VU0VfSVNPQzk1IHx8IGRlZmluZWQgX19VU0VfVU5JWDk4CitfX0JFR0lOX05BTUVTUEFDRV9TVEQKKworLyogU2VsZWN0IG9yaWVudGF0aW9uIGZvciBzdHJlYW0uICAqLworZXh0ZXJuIGludCBmd2lkZSAoX19GSUxFICpfX2ZwLCBpbnQgX19tb2RlKSBfX1RIUk9XOworCisKKy8qIFdyaXRlIGZvcm1hdHRlZCBvdXRwdXQgdG8gU1RSRUFNLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgZndwcmludGYgKF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKKwkJICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKKyAgICAgLyogX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fd3ByaW50Zl9fLCAyLCAzKSkpICovOworLyogV3JpdGUgZm9ybWF0dGVkIG91dHB1dCB0byBzdGRvdXQuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCB3cHJpbnRmIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKKyAgICAgLyogX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fd3ByaW50Zl9fLCAxLCAyKSkpICovOworLyogV3JpdGUgZm9ybWF0dGVkIG91dHB1dCBvZiBhdCBtb3N0IE4gY2hhcmFjdGVycyB0byBTLiAgKi8KK2V4dGVybiBpbnQgc3dwcmludGYgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAorCQkgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQorICAgICBfX1RIUk9XIC8qIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3dwcmludGZfXywgMywgNCkpKSAqLzsKKworLyogV3JpdGUgZm9ybWF0dGVkIG91dHB1dCB0byBTIGZyb20gYXJndW1lbnQgbGlzdCBBUkcuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCB2ZndwcmludGYgKF9fRklMRSAqX19yZXN0cmljdCBfX3MsCisJCSAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKKwkJICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCisgICAgIC8qIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3dwcmludGZfXywgMiwgMCkpKSAqLzsKKy8qIFdyaXRlIGZvcm1hdHRlZCBvdXRwdXQgdG8gc3Rkb3V0IGZyb20gYXJndW1lbnQgbGlzdCBBUkcuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCB2d3ByaW50ZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAorCQkgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQorICAgICAvKiBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX193cHJpbnRmX18sIDEsIDApKSkgKi87CisvKiBXcml0ZSBmb3JtYXR0ZWQgb3V0cHV0IG9mIGF0IG1vc3QgTiBjaGFyYWN0ZXIgdG8gUyBmcm9tIGFyZ3VtZW50CisgICBsaXN0IEFSRy4gICovCitleHRlcm4gaW50IHZzd3ByaW50ZiAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCisJCSAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKKwkJICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCisgICAgIF9fVEhST1cgLyogX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fd3ByaW50Zl9fLCAzLCAwKSkpICovOworCisKKy8qIFJlYWQgZm9ybWF0dGVkIGlucHV0IGZyb20gU1RSRUFNLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50IGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAorCQkgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCisgICAgIC8qIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3dzY2FuZl9fLCAyLCAzKSkpICovOworLyogUmVhZCBmb3JtYXR0ZWQgaW5wdXQgZnJvbSBzdGRpbi4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gaW50IHdzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCisgICAgIC8qIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3dzY2FuZl9fLCAxLCAyKSkpICovOworLyogUmVhZCBmb3JtYXR0ZWQgaW5wdXQgZnJvbSBTLiAgKi8KK2V4dGVybiBpbnQgc3dzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywKKwkJICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQorICAgICBfX1RIUk9XIC8qIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3dzY2FuZl9fLCAyLCAzKSkpICovOworCisjIGlmIGRlZmluZWQgX19VU0VfSVNPQzk5ICYmICFkZWZpbmVkIF9fVVNFX0dOVSBcCisgICAgICYmICghZGVmaW5lZCBfX0xEQkxfQ09NUEFUIHx8ICFkZWZpbmVkIF9fUkVESVJFQ1QpIFwKKyAgICAgJiYgKGRlZmluZWQgX19TVFJJQ1RfQU5TSV9fIHx8IGRlZmluZWQgX19VU0VfWE9QRU4ySykKKyMgIGlmZGVmIF9fUkVESVJFQ1QKKy8qIEZvciBzdHJpY3QgSVNPIEM5OSBvciBQT1NJWCBjb21wbGlhbmNlIGRpc2FsbG93ICVhcywgJWFTIGFuZCAlYVsKKyAgIEdOVSBleHRlbnNpb24gd2hpY2ggY29uZmxpY3RzIHdpdGggdmFsaWQgJWEgZm9sbG93ZWQgYnkgbGV0dGVyCisgICBzLCBTIG9yIFsuICAqLworZXh0ZXJuIGludCBfX1JFRElSRUNUIChmd3NjYW5mLCAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAorCQkJCSBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLiksCisJCSAgICAgICBfX2lzb2M5OV9md3NjYW5mKQorICAgICAvKiBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX193c2NhbmZfXywgMiwgMykpKSAqLzsKK2V4dGVybiBpbnQgX19SRURJUkVDVCAod3NjYW5mLCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pLAorCQkgICAgICAgX19pc29jOTlfd3NjYW5mKQorICAgICAvKiBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX193c2NhbmZfXywgMSwgMikpKSAqLzsKK2V4dGVybiBpbnQgX19SRURJUkVDVCAoc3dzY2FuZiwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCisJCQkJIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSwKKwkJICAgICAgIF9faXNvYzk5X3N3c2NhbmYpCisgICAgIF9fVEhST1cgLyogX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fd3NjYW5mX18sIDIsIDMpKSkgKi87CisjICBlbHNlCitleHRlcm4gaW50IF9faXNvYzk5X2Z3c2NhbmYgKF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKKwkJCSAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pOworZXh0ZXJuIGludCBfX2lzb2M5OV93c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKTsKK2V4dGVybiBpbnQgX19pc29jOTlfc3dzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywKKwkJCSAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCisgICAgIF9fVEhST1c7CisjICAgZGVmaW5lIGZ3c2NhbmYgX19pc29jOTlfZndzY2FuZgorIyAgIGRlZmluZSB3c2NhbmYgX19pc29jOTlfd3NjYW5mCisjICAgZGVmaW5lIHN3c2NhbmYgX19pc29jOTlfc3dzY2FuZgorIyAgZW5kaWYKKyMgZW5kaWYKKworX19FTkRfTkFNRVNQQUNFX1NURAorI2VuZGlmIC8qIFVzZSBJU08gQzk1LCBDOTkgYW5kIFVuaXg5OC4gKi8KKworI2lmZGVmIF9fVVNFX0lTT0M5OQorX19CRUdJTl9OQU1FU1BBQ0VfQzk5CisvKiBSZWFkIGZvcm1hdHRlZCBpbnB1dCBmcm9tIFMgaW50byBhcmd1bWVudCBsaXN0IEFSRy4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gaW50IHZmd3NjYW5mIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zLAorCQkgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKKwkJICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKKyAgICAgLyogX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fd3NjYW5mX18sIDIsIDApKSkgKi87CisvKiBSZWFkIGZvcm1hdHRlZCBpbnB1dCBmcm9tIHN0ZGluIGludG8gYXJndW1lbnQgbGlzdCBBUkcuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIGludCB2d3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCisJCSAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKKyAgICAgLyogX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fd3NjYW5mX18sIDEsIDApKSkgKi87CisvKiBSZWFkIGZvcm1hdHRlZCBpbnB1dCBmcm9tIFMgaW50byBhcmd1bWVudCBsaXN0IEFSRy4gICovCitleHRlcm4gaW50IHZzd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLAorCQkgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKKwkJICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKKyAgICAgX19USFJPVyAvKiBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX193c2NhbmZfXywgMiwgMCkpKSAqLzsKKworIyBpZiAhZGVmaW5lZCBfX1VTRV9HTlUgXAorICAgICAmJiAoIWRlZmluZWQgX19MREJMX0NPTVBBVCB8fCAhZGVmaW5lZCBfX1JFRElSRUNUKSBcCisgICAgICYmIChkZWZpbmVkIF9fU1RSSUNUX0FOU0lfXyB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOMkspCisjICBpZmRlZiBfX1JFRElSRUNUCitleHRlcm4gaW50IF9fUkVESVJFQ1QgKHZmd3NjYW5mLCAoX19GSUxFICpfX3Jlc3RyaWN0IF9fcywKKwkJCQkgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKKwkJCQkgIF9fZ251Y192YV9saXN0IF9fYXJnKSwgX19pc29jOTlfdmZ3c2NhbmYpCisgICAgIC8qIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3dzY2FuZl9fLCAyLCAwKSkpICovOworZXh0ZXJuIGludCBfX1JFRElSRUNUICh2d3NjYW5mLCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAorCQkJCSBfX2dudWNfdmFfbGlzdCBfX2FyZyksIF9faXNvYzk5X3Z3c2NhbmYpCisgICAgIC8qIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3dzY2FuZl9fLCAxLCAwKSkpICovOworZXh0ZXJuIGludCBfX1JFRElSRUNUICh2c3dzY2FuZiwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCisJCQkJICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCisJCQkJICBfX2dudWNfdmFfbGlzdCBfX2FyZyksIF9faXNvYzk5X3Zzd3NjYW5mKQorICAgICBfX1RIUk9XIC8qIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3dzY2FuZl9fLCAyLCAwKSkpICovOworIyAgZWxzZQorZXh0ZXJuIGludCBfX2lzb2M5OV92ZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fcywKKwkJCSAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKKwkJCSAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKTsKK2V4dGVybiBpbnQgX19pc29jOTlfdndzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAorCQkJICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZyk7CitleHRlcm4gaW50IF9faXNvYzk5X3Zzd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLAorCQkJICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAorCQkJICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIF9fVEhST1c7CisjICAgZGVmaW5lIHZmd3NjYW5mIF9faXNvYzk5X3Zmd3NjYW5mCisjICAgZGVmaW5lIHZ3c2NhbmYgX19pc29jOTlfdndzY2FuZgorIyAgIGRlZmluZSB2c3dzY2FuZiBfX2lzb2M5OV92c3dzY2FuZgorIyAgZW5kaWYKKyMgZW5kaWYKKworX19FTkRfTkFNRVNQQUNFX0M5OQorI2VuZGlmIC8qIFVzZSBJU08gQzk5LiAqLworCisKK19fQkVHSU5fTkFNRVNQQUNFX1NURAorLyogUmVhZCBhIGNoYXJhY3RlciBmcm9tIFNUUkVBTS4KKworICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnRzIGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiB3aW50X3QgZmdldHdjIChfX0ZJTEUgKl9fc3RyZWFtKTsKK2V4dGVybiB3aW50X3QgZ2V0d2MgKF9fRklMRSAqX19zdHJlYW0pOworCisvKiBSZWFkIGEgY2hhcmFjdGVyIGZyb20gc3RkaW4uCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnQgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIHdpbnRfdCBnZXR3Y2hhciAodm9pZCk7CisKKworLyogV3JpdGUgYSBjaGFyYWN0ZXIgdG8gU1RSRUFNLgorCisgICBUaGVzZSBmdW5jdGlvbnMgYXJlIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludHMgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIHdpbnRfdCBmcHV0d2MgKHdjaGFyX3QgX193YywgX19GSUxFICpfX3N0cmVhbSk7CitleHRlcm4gd2ludF90IHB1dHdjICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pOworCisvKiBXcml0ZSBhIGNoYXJhY3RlciB0byBzdGRvdXQuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnRzIGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiB3aW50X3QgcHV0d2NoYXIgKHdjaGFyX3QgX193Yyk7CisKKworLyogR2V0IGEgbmV3bGluZS10ZXJtaW5hdGVkIHdpZGUgY2hhcmFjdGVyIHN0cmluZyBvZiBmaW5pdGUgbGVuZ3RoCisgICBmcm9tIFNUUkVBTS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIHBvc3NpYmxlIGNhbmNlbGxhdGlvbiBwb2ludHMgYW5kIHRoZXJlZm9yZSBub3QKKyAgIG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIHdjaGFyX3QgKmZnZXR3cyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBpbnQgX19uLAorCQkJX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKTsKKworLyogV3JpdGUgYSBzdHJpbmcgdG8gU1RSRUFNLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgcG9zc2libGUgY2FuY2VsbGF0aW9uIHBvaW50cyBhbmQgdGhlcmVmb3JlIG5vdAorICAgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gaW50IGZwdXR3cyAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsCisJCSAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSk7CisKKworLyogUHVzaCBhIGNoYXJhY3RlciBiYWNrIG9udG8gdGhlIGlucHV0IGJ1ZmZlciBvZiBTVFJFQU0uCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBwb3NzaWJsZSBjYW5jZWxsYXRpb24gcG9pbnRzIGFuZCB0aGVyZWZvcmUgbm90CisgICBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiB3aW50X3QgdW5nZXR3YyAod2ludF90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pOworX19FTkRfTkFNRVNQQUNFX1NURAorCisKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIFRoZXNlIGFyZSBkZWZpbmVkIHRvIGJlIGVxdWl2YWxlbnQgdG8gdGhlIGBjaGFyJyBmdW5jdGlvbnMgZGVmaW5lZAorICAgaW4gUE9TSVguMToxOTk2LgorCisgICBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBwYXJ0IG9mIFBPU0lYIGFuZCB0aGVyZWZvcmUgbm8gb2ZmaWNpYWwKKyAgIGNhbmNlbGxhdGlvbiBwb2ludC4gIEJ1dCBkdWUgdG8gc2ltaWxhcml0eSB3aXRoIGFuIFBPU0lYIGludGVyZmFjZQorICAgb3IgZHVlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiB0aGV5IGFyZSBjYW5jZWxsYXRpb24gcG9pbnRzIGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiB3aW50X3QgZ2V0d2NfdW5sb2NrZWQgKF9fRklMRSAqX19zdHJlYW0pOworZXh0ZXJuIHdpbnRfdCBnZXR3Y2hhcl91bmxvY2tlZCAodm9pZCk7CisKKy8qIFRoaXMgaXMgdGhlIHdpZGUgY2hhcmFjdGVyIHZlcnNpb24gb2YgYSBHTlUgZXh0ZW5zaW9uLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBwYXJ0IG9mIFBPU0lYIGFuZCB0aGVyZWZvcmUgbm8gb2ZmaWNpYWwKKyAgIGNhbmNlbGxhdGlvbiBwb2ludC4gIEJ1dCBkdWUgdG8gc2ltaWxhcml0eSB3aXRoIGFuIFBPU0lYIGludGVyZmFjZQorICAgb3IgZHVlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBpdCBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQKKyAgIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gd2ludF90IGZnZXR3Y191bmxvY2tlZCAoX19GSUxFICpfX3N0cmVhbSk7CisKKy8qIEZhc3RlciB2ZXJzaW9uIHdoZW4gbG9ja2luZyBpcyBub3QgbmVjZXNzYXJ5LgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBwYXJ0IG9mIFBPU0lYIGFuZCB0aGVyZWZvcmUgbm8gb2ZmaWNpYWwKKyAgIGNhbmNlbGxhdGlvbiBwb2ludC4gIEJ1dCBkdWUgdG8gc2ltaWxhcml0eSB3aXRoIGFuIFBPU0lYIGludGVyZmFjZQorICAgb3IgZHVlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBpdCBpcyBhIGNhbmNlbGxhdGlvbiBwb2ludCBhbmQKKyAgIHRoZXJlZm9yZSBub3QgbWFya2VkIHdpdGggX19USFJPVy4gICovCitleHRlcm4gd2ludF90IGZwdXR3Y191bmxvY2tlZCAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKTsKKworLyogVGhlc2UgYXJlIGRlZmluZWQgdG8gYmUgZXF1aXZhbGVudCB0byB0aGUgYGNoYXInIGZ1bmN0aW9ucyBkZWZpbmVkCisgICBpbiBQT1NJWC4xOjE5OTYuCisKKyAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIHRoZXkgYXJlIGNhbmNlbGxhdGlvbiBwb2ludHMgYW5kCisgICB0aGVyZWZvcmUgbm90IG1hcmtlZCB3aXRoIF9fVEhST1cuICAqLworZXh0ZXJuIHdpbnRfdCBwdXR3Y191bmxvY2tlZCAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKTsKK2V4dGVybiB3aW50X3QgcHV0d2NoYXJfdW5sb2NrZWQgKHdjaGFyX3QgX193Yyk7CisKKworLyogVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBzYW1lIGFzIGBmZ2V0d3MnIGJ1dCBkb2VzIG5vdCBsb2NrIHRoZSBzdHJlYW0uCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGl0IGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiB3Y2hhcl90ICpmZ2V0d3NfdW5sb2NrZWQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywgaW50IF9fbiwKKwkJCQkgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKTsKKworLyogVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBzYW1lIGFzIGBmcHV0d3MnIGJ1dCBkb2VzIG5vdCBsb2NrIHRoZSBzdHJlYW0uCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHBhcnQgb2YgUE9TSVggYW5kIHRoZXJlZm9yZSBubyBvZmZpY2lhbAorICAgY2FuY2VsbGF0aW9uIHBvaW50LiAgQnV0IGR1ZSB0byBzaW1pbGFyaXR5IHdpdGggYW4gUE9TSVggaW50ZXJmYWNlCisgICBvciBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGl0IGlzIGEgY2FuY2VsbGF0aW9uIHBvaW50IGFuZAorICAgdGhlcmVmb3JlIG5vdCBtYXJrZWQgd2l0aCBfX1RIUk9XLiAgKi8KK2V4dGVybiBpbnQgZnB1dHdzX3VubG9ja2VkIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywKKwkJCSAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pOworI2VuZGlmCisKKworX19CRUdJTl9OQU1FU1BBQ0VfQzk5CisvKiBGb3JtYXQgVFAgaW50byBTIGFjY29yZGluZyB0byBGT1JNQVQuCisgICBXcml0ZSBubyBtb3JlIHRoYW4gTUFYU0laRSB3aWRlIGNoYXJhY3RlcnMgYW5kIHJldHVybiB0aGUgbnVtYmVyCisgICBvZiB3aWRlIGNoYXJhY3RlcnMgd3JpdHRlbiwgb3IgMCBpZiBpdCB3b3VsZCBleGNlZWQgTUFYU0laRS4gICovCitleHRlcm4gc2l6ZV90IHdjc2Z0aW1lICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKKwkJCV9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKKwkJCV9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIF9fVEhST1c7CitfX0VORF9OQU1FU1BBQ0VfQzk5CisKKyMgaWZkZWYgX19VU0VfR05VCisjIGluY2x1ZGUgPHhsb2NhbGUuaD4KKworLyogU2ltaWxhciB0byBgd2NzZnRpbWUnIGJ1dCB0YWtlcyB0aGUgaW5mb3JtYXRpb24gZnJvbQorICAgdGhlIHByb3ZpZGVkIGxvY2FsZSBhbmQgbm90IHRoZSBnbG9iYWwgbG9jYWxlLiAgKi8KK2V4dGVybiBzaXplX3Qgd2NzZnRpbWVfbCAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNpemUsCisJCQkgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKKwkJCSAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCwKKwkJCSAgX19sb2NhbGVfdCBfX2xvYykgX19USFJPVzsKKyMgZW5kaWYKKworLyogVGhlIFgvT3BlbiBzdGFuZGFyZCBkZW1hbmRzIHRoYXQgbW9zdCBvZiB0aGUgZnVuY3Rpb25zIGRlZmluZWQgaW4KKyAgIHRoZSA8d2N0eXBlLmg+IGhlYWRlciBtdXN0IGFsc28gYXBwZWFyIGhlcmUuICBUaGlzIGlzIHByb2JhYmx5CisgICBiZWNhdXNlIHNvbWUgWC9PcGVuIG1lbWJlcnMgd3JvdGUgdGhlaXIgaW1wbGVtZW50YXRpb24gYmVmb3JlIHRoZQorICAgSVNPIEMgc3RhbmRhcmQgd2FzIHB1Ymxpc2hlZCBhbmQgaW50cm9kdWNlZCB0aGUgYmV0dGVyIHNvbHV0aW9uLgorICAgV2UgaGF2ZSB0byBwcm92aWRlIHRoZXNlIGRlZmluaXRpb25zIGZvciBjb21wbGlhbmNlIHJlYXNvbnMgYnV0IHdlCisgICBkbyB0aGlzIG5vbnNlbnNlIG9ubHkgaWYgcmVhbGx5IG5lY2Vzc2FyeS4gICovCisjaWYgZGVmaW5lZCBfX1VTRV9VTklYOTggJiYgIWRlZmluZWQgX19VU0VfR05VCisjIGRlZmluZSBfX25lZWRfaXN3eHh4CisjIGluY2x1ZGUgPHdjdHlwZS5oPgorI2VuZGlmCisKKy8qIERlZmluZSBzb21lIG1hY3JvcyBoZWxwaW5nIHRvIGNhdGNoIGJ1ZmZlciBvdmVyZmxvd3MuICAqLworI2lmIF9fVVNFX0ZPUlRJRllfTEVWRUwgPiAwICYmIGRlZmluZWQgX19leHRlcm5fYWx3YXlzX2lubGluZQorIyBpbmNsdWRlIDxiaXRzL3djaGFyMi5oPgorI2VuZGlmCisKKyNpZmRlZiBfX0xEQkxfQ09NUEFUCisjIGluY2x1ZGUgPGJpdHMvd2NoYXItbGRibC5oPgorI2VuZGlmCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZgkvKiBfV0NIQVJfSCBkZWZpbmVkICovCisKKy8qIFVuZGVmaW5lZCBhbGwgX19uZWVkXyogY29uc3RhbnRzIGluIGNhc2Ugd2UgYXJlIGluY2x1ZGVkIHRvIGdldCB0aG9zZQorICAgY29uc3RhbnRzIGJ1dCB0aGUgd2hvbGUgZmlsZSB3YXMgYWxyZWFkeSByZWFkLiAgKi8KKyN1bmRlZiBfX25lZWRfbWJzdGF0ZV90CisjdW5kZWYgX19uZWVkX3dpbnRfdAorCisjZW5kaWYgLyogd2NoYXIuaCAgKi8KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS93Y3R5cGUuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS93Y3R5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDMyNTU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3djdHlwZS5oCkBAIC0wLDAgKzEsMzE5IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMiwgMjAwNSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKworLyoKKyAqCUlTTyBDOTkgU3RhbmRhcmQ6IDcuMjUKKyAqCVdpZGUgY2hhcmFjdGVyIGNsYXNzaWZpY2F0aW9uIGFuZCBtYXBwaW5nIHV0aWxpdGllcyAgPHdjdHlwZS5oPgorICovCisKKyNpZm5kZWYgX1dDVFlQRV9ICisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorI2luY2x1ZGUgPGJpdHMvdHlwZXMuaD4KKworI2lmbmRlZiBfX25lZWRfaXN3eHh4CisjIGRlZmluZSBfV0NUWVBFX0gJMQorCisvKiBHZXQgd2ludF90IGZyb20gPHdjaGFyLmg+LiAgKi8KKyMgZGVmaW5lIF9fbmVlZF93aW50X3QKKyMgaW5jbHVkZSA8d2NoYXIuaD4KKworLyogQ29uc3RhbnQgZXhwcmVzc2lvbiBvZiB0eXBlIGB3aW50X3QnIHdob3NlIHZhbHVlIGRvZXMgbm90IGNvcnJlc3BvbmQKKyAgIHRvIGFueSBtZW1iZXIgb2YgdGhlIGV4dGVuZGVkIGNoYXJhY3RlciBzZXQuICAqLworIyBpZm5kZWYgV0VPRgorIyAgZGVmaW5lIFdFT0YgKDB4ZmZmZmZmZmZ1KQorIyBlbmRpZgorI2VuZGlmCisjdW5kZWYgX19uZWVkX2lzd3h4eAorCisKKy8qIFRoZSBmb2xsb3dpbmcgcGFydCBpcyBhbHNvIHVzZWQgaW4gdGhlIDx3Y3NtYnMuaD4gaGVhZGVyIHdoZW4gY29tcGlsZWQKKyAgIGluIHRoZSBVbml4OTggY29tcGF0aWJpbGl0eSBtb2RlLiAgKi8KKyNpZm5kZWYgX19pc3d4eHhfZGVmaW5lZAorIyBkZWZpbmUgX19pc3d4eHhfZGVmaW5lZAkxCisKK19fQkVHSU5fTkFNRVNQQUNFX0M5OQorLyogU2NhbGFyIHR5cGUgdGhhdCBjYW4gaG9sZCB2YWx1ZXMgd2hpY2ggcmVwcmVzZW50IGxvY2FsZS1zcGVjaWZpYworICAgY2hhcmFjdGVyIGNsYXNzaWZpY2F0aW9ucy4gICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHdjdHlwZV90OworX19FTkRfTkFNRVNQQUNFX0M5OQorCisjIGlmbmRlZiBfSVN3Yml0CisvKiBUaGUgY2hhcmFjdGVyaXN0aWNzIGFyZSBzdG9yZWQgYWx3YXlzIGluIG5ldHdvcmsgYnl0ZSBvcmRlciAoYmlnCisgICBlbmRpYW4pLiAgV2UgZGVmaW5lIHRoZSBiaXQgdmFsdWUgaW50ZXJwcmV0YXRpb25zIGhlcmUgZGVwZW5kZW50IG9uIHRoZQorICAgbWFjaGluZSdzIGJ5dGUgb3JkZXIuICAqLworCisjICBpbmNsdWRlIDxlbmRpYW4uaD4KKyMgIGlmIF9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4KKyMgICBkZWZpbmUgX0lTd2JpdChiaXQpCSgxIDw8IChiaXQpKQorIyAgZWxzZSAvKiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOICovCisjICAgZGVmaW5lIF9JU3diaXQoYml0KQlcCisJKChiaXQpIDwgOCA/IChpbnQpICgoMVVMIDw8IChiaXQpKSA8PCAyNCkJCQkgICAgICBcCisJIDogKChiaXQpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoYml0KSkgPDwgOCkJCQkgICAgICBcCisJICAgIDogKChiaXQpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoYml0KSkgPj4gOCkJCQkgICAgICBcCisJICAgICAgIDogKGludCkgKCgxVUwgPDwgKGJpdCkpID4+IDI0KSkpKQorIyAgZW5kaWYKKworZW51bQoreworICBfX0lTd3VwcGVyID0gMCwJCQkvKiBVUFBFUkNBU0UuICAqLworICBfX0lTd2xvd2VyID0gMSwJCQkvKiBsb3dlcmNhc2UuICAqLworICBfX0lTd2FscGhhID0gMiwJCQkvKiBBbHBoYWJldGljLiAgKi8KKyAgX19JU3dkaWdpdCA9IDMsCQkJLyogTnVtZXJpYy4gICovCisgIF9fSVN3eGRpZ2l0ID0gNCwJCQkvKiBIZXhhZGVjaW1hbCBudW1lcmljLiAgKi8KKyAgX19JU3dzcGFjZSA9IDUsCQkJLyogV2hpdGVzcGFjZS4gICovCisgIF9fSVN3cHJpbnQgPSA2LAkJCS8qIFByaW50aW5nLiAgKi8KKyAgX19JU3dncmFwaCA9IDcsCQkJLyogR3JhcGhpY2FsLiAgKi8KKyAgX19JU3dibGFuayA9IDgsCQkJLyogQmxhbmsgKHVzdWFsbHkgU1BDIGFuZCBUQUIpLiAgKi8KKyAgX19JU3djbnRybCA9IDksCQkJLyogQ29udHJvbCBjaGFyYWN0ZXIuICAqLworICBfX0lTd3B1bmN0ID0gMTAsCQkJLyogUHVuY3R1YXRpb24uICAqLworICBfX0lTd2FsbnVtID0gMTEsCQkJLyogQWxwaGFudW1lcmljLiAgKi8KKworICBfSVN3dXBwZXIgPSBfSVN3Yml0IChfX0lTd3VwcGVyKSwJLyogVVBQRVJDQVNFLiAgKi8KKyAgX0lTd2xvd2VyID0gX0lTd2JpdCAoX19JU3dsb3dlciksCS8qIGxvd2VyY2FzZS4gICovCisgIF9JU3dhbHBoYSA9IF9JU3diaXQgKF9fSVN3YWxwaGEpLAkvKiBBbHBoYWJldGljLiAgKi8KKyAgX0lTd2RpZ2l0ID0gX0lTd2JpdCAoX19JU3dkaWdpdCksCS8qIE51bWVyaWMuICAqLworICBfSVN3eGRpZ2l0ID0gX0lTd2JpdCAoX19JU3d4ZGlnaXQpLAkvKiBIZXhhZGVjaW1hbCBudW1lcmljLiAgKi8KKyAgX0lTd3NwYWNlID0gX0lTd2JpdCAoX19JU3dzcGFjZSksCS8qIFdoaXRlc3BhY2UuICAqLworICBfSVN3cHJpbnQgPSBfSVN3Yml0IChfX0lTd3ByaW50KSwJLyogUHJpbnRpbmcuICAqLworICBfSVN3Z3JhcGggPSBfSVN3Yml0IChfX0lTd2dyYXBoKSwJLyogR3JhcGhpY2FsLiAgKi8KKyAgX0lTd2JsYW5rID0gX0lTd2JpdCAoX19JU3dibGFuayksCS8qIEJsYW5rICh1c3VhbGx5IFNQQyBhbmQgVEFCKS4gICovCisgIF9JU3djbnRybCA9IF9JU3diaXQgKF9fSVN3Y250cmwpLAkvKiBDb250cm9sIGNoYXJhY3Rlci4gICovCisgIF9JU3dwdW5jdCA9IF9JU3diaXQgKF9fSVN3cHVuY3QpLAkvKiBQdW5jdHVhdGlvbi4gICovCisgIF9JU3dhbG51bSA9IF9JU3diaXQgKF9fSVN3YWxudW0pCS8qIEFscGhhbnVtZXJpYy4gICovCit9OworIyBlbmRpZiAvKiBOb3QgX0lTd2JpdCAgKi8KKworCitfX0JFR0lOX0RFQ0xTCisKK19fQkVHSU5fTkFNRVNQQUNFX0M5OQorLyoKKyAqIFdpZGUtY2hhcmFjdGVyIGNsYXNzaWZpY2F0aW9uIGZ1bmN0aW9uczogNy4xNS4yLjEuCisgKi8KKworLyogVGVzdCBmb3IgYW55IHdpZGUgY2hhcmFjdGVyIGZvciB3aGljaCBgaXN3YWxwaGEnIG9yIGBpc3dkaWdpdCcgaXMKKyAgIHRydWUuICAqLworZXh0ZXJuIGludCBpc3dhbG51bSAod2ludF90IF9fd2MpIF9fVEhST1c7CisKKy8qIFRlc3QgZm9yIGFueSB3aWRlIGNoYXJhY3RlciBmb3Igd2hpY2ggYGlzd3VwcGVyJyBvciAnaXN3bG93ZXInIGlzCisgICB0cnVlLCBvciBhbnkgd2lkZSBjaGFyYWN0ZXIgdGhhdCBpcyBvbmUgb2YgYSBsb2NhbGUtc3BlY2lmaWMgc2V0IG9mCisgICB3aWRlLWNoYXJhY3RlcnMgZm9yIHdoaWNoIG5vbmUgb2YgYGlzd2NudHJsJywgYGlzd2RpZ2l0JywKKyAgIGBpc3dwdW5jdCcsIG9yIGBpc3dzcGFjZScgaXMgdHJ1ZS4gICovCitleHRlcm4gaW50IGlzd2FscGhhICh3aW50X3QgX193YykgX19USFJPVzsKKworLyogVGVzdCBmb3IgYW55IGNvbnRyb2wgd2lkZSBjaGFyYWN0ZXIuICAqLworZXh0ZXJuIGludCBpc3djbnRybCAod2ludF90IF9fd2MpIF9fVEhST1c7CisKKy8qIFRlc3QgZm9yIGFueSB3aWRlIGNoYXJhY3RlciB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgZGVjaW1hbC1kaWdpdAorICAgY2hhcmFjdGVyLiAgKi8KK2V4dGVybiBpbnQgaXN3ZGlnaXQgKHdpbnRfdCBfX3djKSBfX1RIUk9XOworCisvKiBUZXN0IGZvciBhbnkgd2lkZSBjaGFyYWN0ZXIgZm9yIHdoaWNoIGBpc3dwcmludCcgaXMgdHJ1ZSBhbmQKKyAgIGBpc3dzcGFjZScgaXMgZmFsc2UuICAqLworZXh0ZXJuIGludCBpc3dncmFwaCAod2ludF90IF9fd2MpIF9fVEhST1c7CisKKy8qIFRlc3QgZm9yIGFueSB3aWRlIGNoYXJhY3RlciB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgbG93ZXJjYXNlIGxldHRlcgorICAgb3IgaXMgb25lIG9mIGEgbG9jYWxlLXNwZWNpZmljIHNldCBvZiB3aWRlIGNoYXJhY3RlcnMgZm9yIHdoaWNoCisgICBub25lIG9mIGBpc3djbnRybCcsIGBpc3dkaWdpdCcsIGBpc3dwdW5jdCcsIG9yIGBpc3dzcGFjZScgaXMgdHJ1ZS4gICovCitleHRlcm4gaW50IGlzd2xvd2VyICh3aW50X3QgX193YykgX19USFJPVzsKKworLyogVGVzdCBmb3IgYW55IHByaW50aW5nIHdpZGUgY2hhcmFjdGVyLiAgKi8KK2V4dGVybiBpbnQgaXN3cHJpbnQgKHdpbnRfdCBfX3djKSBfX1RIUk9XOworCisvKiBUZXN0IGZvciBhbnkgcHJpbnRpbmcgd2lkZSBjaGFyYWN0ZXIgdGhhdCBpcyBvbmUgb2YgYQorICAgbG9jYWxlLXNwZWNpZmljIGV0IG9mIHdpZGUgY2hhcmFjdGVycyBmb3Igd2hpY2ggbmVpdGhlciBgaXN3c3BhY2UnCisgICBub3IgYGlzd2FsbnVtJyBpcyB0cnVlLiAgKi8KK2V4dGVybiBpbnQgaXN3cHVuY3QgKHdpbnRfdCBfX3djKSBfX1RIUk9XOworCisvKiBUZXN0IGZvciBhbnkgd2lkZSBjaGFyYWN0ZXIgdGhhdCBjb3JyZXNwb25kcyB0byBhIGxvY2FsZS1zcGVjaWZpYworICAgc2V0IG9mIHdpZGUgY2hhcmFjdGVycyBmb3Igd2hpY2ggbm9uZSBvZiBgaXN3YWxudW0nLCBgaXN3Z3JhcGgnLCBvcgorICAgYGlzd3B1bmN0JyBpcyB0cnVlLiAgKi8KK2V4dGVybiBpbnQgaXN3c3BhY2UgKHdpbnRfdCBfX3djKSBfX1RIUk9XOworCisvKiBUZXN0IGZvciBhbnkgd2lkZSBjaGFyYWN0ZXIgdGhhdCBjb3JyZXNwb25kcyB0byBhbiB1cHBlcmNhc2UgbGV0dGVyCisgICBvciBpcyBvbmUgb2YgYSBsb2NhbGUtc3BlY2lmaWMgc2V0IG9mIHdpZGUgY2hhcmFjdGVyIGZvciB3aGljaCBub25lCisgICBvZiBgaXN3Y250cmwnLCBgaXN3ZGlnaXQnLCBgaXN3cHVuY3QnLCBvciBgaXN3c3BhY2UnIGlzIHRydWUuICAqLworZXh0ZXJuIGludCBpc3d1cHBlciAod2ludF90IF9fd2MpIF9fVEhST1c7CisKKy8qIFRlc3QgZm9yIGFueSB3aWRlIGNoYXJhY3RlciB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgaGV4YWRlY2ltYWwtZGlnaXQKKyAgIGNoYXJhY3RlciBlcXVpdmFsZW50IHRvIHRoYXQgcGVyZm9ybWVkIGJlIHRoZSBmdW5jdGlvbnMgZGVzY3JpYmVkCisgICBpbiB0aGUgcHJldmlvdXMgc3ViY2xhdXNlLiAgKi8KK2V4dGVybiBpbnQgaXN3eGRpZ2l0ICh3aW50X3QgX193YykgX19USFJPVzsKKworLyogVGVzdCBmb3IgYW55IHdpZGUgY2hhcmFjdGVyIHRoYXQgY29ycmVzcG9uZHMgdG8gYSBzdGFuZGFyZCBibGFuaworICAgd2lkZSBjaGFyYWN0ZXIgb3IgYSBsb2NhbGUtc3BlY2lmaWMgc2V0IG9mIHdpZGUgY2hhcmFjdGVycyBmb3IKKyAgIHdoaWNoIGBpc3dhbG51bScgaXMgZmFsc2UuICAqLworIyBpZmRlZiBfX1VTRV9JU09DOTkKK2V4dGVybiBpbnQgaXN3YmxhbmsgKHdpbnRfdCBfX3djKSBfX1RIUk9XOworIyBlbmRpZgorCisvKgorICogRXh0ZW5zaWJsZSB3aWRlLWNoYXJhY3RlciBjbGFzc2lmaWNhdGlvbiBmdW5jdGlvbnM6IDcuMTUuMi4yLgorICovCisKKy8qIENvbnN0cnVjdCB2YWx1ZSB0aGF0IGRlc2NyaWJlcyBhIGNsYXNzIG9mIHdpZGUgY2hhcmFjdGVycyBpZGVudGlmaWVkCisgICBieSB0aGUgc3RyaW5nIGFyZ3VtZW50IFBST1BFUlRZLiAgKi8KK2V4dGVybiB3Y3R5cGVfdCB3Y3R5cGUgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSkgX19USFJPVzsKKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHdpZGUtY2hhcmFjdGVyIFdDIGhhcyB0aGUgcHJvcGVydHkgZGVzY3JpYmVkIGJ5CisgICBERVNDLiAgKi8KK2V4dGVybiBpbnQgaXN3Y3R5cGUgKHdpbnRfdCBfX3djLCB3Y3R5cGVfdCBfX2Rlc2MpIF9fVEhST1c7CitfX0VORF9OQU1FU1BBQ0VfQzk5CisKKworLyoKKyAqIFdpZGUtY2hhcmFjdGVyIGNhc2UtbWFwcGluZyBmdW5jdGlvbnM6IDcuMTUuMy4xLgorICovCisKK19fQkVHSU5fTkFNRVNQQUNFX0M5OQorLyogU2NhbGFyIHR5cGUgdGhhdCBjYW4gaG9sZCB2YWx1ZXMgd2hpY2ggcmVwcmVzZW50IGxvY2FsZS1zcGVjaWZpYworICAgY2hhcmFjdGVyIG1hcHBpbmdzLiAgKi8KK3R5cGVkZWYgX19jb25zdCBfX2ludDMyX3QgKndjdHJhbnNfdDsKK19fRU5EX05BTUVTUEFDRV9DOTkKKyNpZmRlZiBfX1VTRV9HTlUKK19fVVNJTkdfTkFNRVNQQUNFX0M5OSh3Y3RyYW5zX3QpCisjZW5kaWYKKworX19CRUdJTl9OQU1FU1BBQ0VfQzk5CisvKiBDb252ZXJ0cyBhbiB1cHBlcmNhc2UgbGV0dGVyIHRvIHRoZSBjb3JyZXNwb25kaW5nIGxvd2VyY2FzZSBsZXR0ZXIuICAqLworZXh0ZXJuIHdpbnRfdCB0b3dsb3dlciAod2ludF90IF9fd2MpIF9fVEhST1c7CisKKy8qIENvbnZlcnRzIGFuIGxvd2VyY2FzZSBsZXR0ZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdXBwZXJjYXNlIGxldHRlci4gICovCitleHRlcm4gd2ludF90IHRvd3VwcGVyICh3aW50X3QgX193YykgX19USFJPVzsKK19fRU5EX05BTUVTUEFDRV9DOTkKKworX19FTkRfREVDTFMKKworI2VuZGlmCS8qIG5lZWQgaXN3eHh4LiAgKi8KKworCisvKiBUaGUgcmVtYWluaW5nIGRlZmluaXRpb25zIGFuZCBkZWNsYXJhdGlvbnMgbXVzdCBub3QgYXBwZWFyIGluIHRoZQorICAgPHdjc21icy5oPiBoZWFkZXIuICAqLworI2lmZGVmIF9XQ1RZUEVfSAorCisvKgorICogRXh0ZW5zaWJsZSB3aWRlLWNoYXJhY3RlciBtYXBwaW5nIGZ1bmN0aW9uczogNy4xNS4zLjIuCisgKi8KKworX19CRUdJTl9ERUNMUworCitfX0JFR0lOX05BTUVTUEFDRV9DOTkKKy8qIENvbnN0cnVjdCB2YWx1ZSB0aGF0IGRlc2NyaWJlcyBhIG1hcHBpbmcgYmV0d2VlbiB3aWRlIGNoYXJhY3RlcnMKKyAgIGlkZW50aWZpZWQgYnkgdGhlIHN0cmluZyBhcmd1bWVudCBQUk9QRVJUWS4gICovCitleHRlcm4gd2N0cmFuc190IHdjdHJhbnMgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSkgX19USFJPVzsKKworLyogTWFwIHRoZSB3aWRlIGNoYXJhY3RlciBXQyB1c2luZyB0aGUgbWFwcGluZyBkZXNjcmliZWQgYnkgREVTQy4gICovCitleHRlcm4gd2ludF90IHRvd2N0cmFucyAod2ludF90IF9fd2MsIHdjdHJhbnNfdCBfX2Rlc2MpIF9fVEhST1c7CitfX0VORF9OQU1FU1BBQ0VfQzk5CisKKyMgaWZkZWYgX19VU0VfR05VCisvKiBEZWNsYXJlIHRoZSBpbnRlcmZhY2UgdG8gZXh0ZW5kZWQgbG9jYWxlIG1vZGVsLiAgKi8KKyMgIGluY2x1ZGUgPHhsb2NhbGUuaD4KKworLyogVGVzdCBmb3IgYW55IHdpZGUgY2hhcmFjdGVyIGZvciB3aGljaCBgaXN3YWxwaGEnIG9yIGBpc3dkaWdpdCcgaXMKKyAgIHRydWUuICAqLworZXh0ZXJuIGludCBpc3dhbG51bV9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgX19USFJPVzsKKworLyogVGVzdCBmb3IgYW55IHdpZGUgY2hhcmFjdGVyIGZvciB3aGljaCBgaXN3dXBwZXInIG9yICdpc3dsb3dlcicgaXMKKyAgIHRydWUsIG9yIGFueSB3aWRlIGNoYXJhY3RlciB0aGF0IGlzIG9uZSBvZiBhIGxvY2FsZS1zcGVjaWZpYyBzZXQgb2YKKyAgIHdpZGUtY2hhcmFjdGVycyBmb3Igd2hpY2ggbm9uZSBvZiBgaXN3Y250cmwnLCBgaXN3ZGlnaXQnLAorICAgYGlzd3B1bmN0Jywgb3IgYGlzd3NwYWNlJyBpcyB0cnVlLiAgKi8KK2V4dGVybiBpbnQgaXN3YWxwaGFfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIF9fVEhST1c7CisKKy8qIFRlc3QgZm9yIGFueSBjb250cm9sIHdpZGUgY2hhcmFjdGVyLiAgKi8KK2V4dGVybiBpbnQgaXN3Y250cmxfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIF9fVEhST1c7CisKKy8qIFRlc3QgZm9yIGFueSB3aWRlIGNoYXJhY3RlciB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgZGVjaW1hbC1kaWdpdAorICAgY2hhcmFjdGVyLiAgKi8KK2V4dGVybiBpbnQgaXN3ZGlnaXRfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIF9fVEhST1c7CisKKy8qIFRlc3QgZm9yIGFueSB3aWRlIGNoYXJhY3RlciBmb3Igd2hpY2ggYGlzd3ByaW50JyBpcyB0cnVlIGFuZAorICAgYGlzd3NwYWNlJyBpcyBmYWxzZS4gICovCitleHRlcm4gaW50IGlzd2dyYXBoX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSBfX1RIUk9XOworCisvKiBUZXN0IGZvciBhbnkgd2lkZSBjaGFyYWN0ZXIgdGhhdCBjb3JyZXNwb25kcyB0byBhIGxvd2VyY2FzZSBsZXR0ZXIKKyAgIG9yIGlzIG9uZSBvZiBhIGxvY2FsZS1zcGVjaWZpYyBzZXQgb2Ygd2lkZSBjaGFyYWN0ZXJzIGZvciB3aGljaAorICAgbm9uZSBvZiBgaXN3Y250cmwnLCBgaXN3ZGlnaXQnLCBgaXN3cHVuY3QnLCBvciBgaXN3c3BhY2UnIGlzIHRydWUuICAqLworZXh0ZXJuIGludCBpc3dsb3dlcl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgX19USFJPVzsKKworLyogVGVzdCBmb3IgYW55IHByaW50aW5nIHdpZGUgY2hhcmFjdGVyLiAgKi8KK2V4dGVybiBpbnQgaXN3cHJpbnRfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIF9fVEhST1c7CisKKy8qIFRlc3QgZm9yIGFueSBwcmludGluZyB3aWRlIGNoYXJhY3RlciB0aGF0IGlzIG9uZSBvZiBhCisgICBsb2NhbGUtc3BlY2lmaWMgZXQgb2Ygd2lkZSBjaGFyYWN0ZXJzIGZvciB3aGljaCBuZWl0aGVyIGBpc3dzcGFjZScKKyAgIG5vciBgaXN3YWxudW0nIGlzIHRydWUuICAqLworZXh0ZXJuIGludCBpc3dwdW5jdF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgX19USFJPVzsKKworLyogVGVzdCBmb3IgYW55IHdpZGUgY2hhcmFjdGVyIHRoYXQgY29ycmVzcG9uZHMgdG8gYSBsb2NhbGUtc3BlY2lmaWMKKyAgIHNldCBvZiB3aWRlIGNoYXJhY3RlcnMgZm9yIHdoaWNoIG5vbmUgb2YgYGlzd2FsbnVtJywgYGlzd2dyYXBoJywgb3IKKyAgIGBpc3dwdW5jdCcgaXMgdHJ1ZS4gICovCitleHRlcm4gaW50IGlzd3NwYWNlX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSBfX1RIUk9XOworCisvKiBUZXN0IGZvciBhbnkgd2lkZSBjaGFyYWN0ZXIgdGhhdCBjb3JyZXNwb25kcyB0byBhbiB1cHBlcmNhc2UgbGV0dGVyCisgICBvciBpcyBvbmUgb2YgYSBsb2NhbGUtc3BlY2lmaWMgc2V0IG9mIHdpZGUgY2hhcmFjdGVyIGZvciB3aGljaCBub25lCisgICBvZiBgaXN3Y250cmwnLCBgaXN3ZGlnaXQnLCBgaXN3cHVuY3QnLCBvciBgaXN3c3BhY2UnIGlzIHRydWUuICAqLworZXh0ZXJuIGludCBpc3d1cHBlcl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgX19USFJPVzsKKworLyogVGVzdCBmb3IgYW55IHdpZGUgY2hhcmFjdGVyIHRoYXQgY29ycmVzcG9uZHMgdG8gYSBoZXhhZGVjaW1hbC1kaWdpdAorICAgY2hhcmFjdGVyIGVxdWl2YWxlbnQgdG8gdGhhdCBwZXJmb3JtZWQgYmUgdGhlIGZ1bmN0aW9ucyBkZXNjcmliZWQKKyAgIGluIHRoZSBwcmV2aW91cyBzdWJjbGF1c2UuICAqLworZXh0ZXJuIGludCBpc3d4ZGlnaXRfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIF9fVEhST1c7CisKKy8qIFRlc3QgZm9yIGFueSB3aWRlIGNoYXJhY3RlciB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgc3RhbmRhcmQgYmxhbmsKKyAgIHdpZGUgY2hhcmFjdGVyIG9yIGEgbG9jYWxlLXNwZWNpZmljIHNldCBvZiB3aWRlIGNoYXJhY3RlcnMgZm9yCisgICB3aGljaCBgaXN3YWxudW0nIGlzIGZhbHNlLiAgKi8KK2V4dGVybiBpbnQgaXN3YmxhbmtfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIF9fVEhST1c7CisKKy8qIENvbnN0cnVjdCB2YWx1ZSB0aGF0IGRlc2NyaWJlcyBhIGNsYXNzIG9mIHdpZGUgY2hhcmFjdGVycyBpZGVudGlmaWVkCisgICBieSB0aGUgc3RyaW5nIGFyZ3VtZW50IFBST1BFUlRZLiAgKi8KK2V4dGVybiB3Y3R5cGVfdCB3Y3R5cGVfbCAoX19jb25zdCBjaGFyICpfX3Byb3BlcnR5LCBfX2xvY2FsZV90IF9fbG9jYWxlKQorICAgICBfX1RIUk9XOworCisvKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgd2lkZS1jaGFyYWN0ZXIgV0MgaGFzIHRoZSBwcm9wZXJ0eSBkZXNjcmliZWQgYnkKKyAgIERFU0MuICAqLworZXh0ZXJuIGludCBpc3djdHlwZV9sICh3aW50X3QgX193Yywgd2N0eXBlX3QgX19kZXNjLCBfX2xvY2FsZV90IF9fbG9jYWxlKQorICAgICBfX1RIUk9XOworCisKKy8qCisgKiBXaWRlLWNoYXJhY3RlciBjYXNlLW1hcHBpbmcgZnVuY3Rpb25zLgorICovCisKKy8qIENvbnZlcnRzIGFuIHVwcGVyY2FzZSBsZXR0ZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbG93ZXJjYXNlIGxldHRlci4gICovCitleHRlcm4gd2ludF90IHRvd2xvd2VyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSBfX1RIUk9XOworCisvKiBDb252ZXJ0cyBhbiBsb3dlcmNhc2UgbGV0dGVyIHRvIHRoZSBjb3JyZXNwb25kaW5nIHVwcGVyY2FzZSBsZXR0ZXIuICAqLworZXh0ZXJuIHdpbnRfdCB0b3d1cHBlcl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgX19USFJPVzsKKworLyogQ29uc3RydWN0IHZhbHVlIHRoYXQgZGVzY3JpYmVzIGEgbWFwcGluZyBiZXR3ZWVuIHdpZGUgY2hhcmFjdGVycworICAgaWRlbnRpZmllZCBieSB0aGUgc3RyaW5nIGFyZ3VtZW50IFBST1BFUlRZLiAgKi8KK2V4dGVybiB3Y3RyYW5zX3Qgd2N0cmFuc19sIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHksIF9fbG9jYWxlX3QgX19sb2NhbGUpCisgICAgIF9fVEhST1c7CisKKy8qIE1hcCB0aGUgd2lkZSBjaGFyYWN0ZXIgV0MgdXNpbmcgdGhlIG1hcHBpbmcgZGVzY3JpYmVkIGJ5IERFU0MuICAqLworZXh0ZXJuIHdpbnRfdCB0b3djdHJhbnNfbCAod2ludF90IF9fd2MsIHdjdHJhbnNfdCBfX2Rlc2MsCisJCQkgICBfX2xvY2FsZV90IF9fbG9jYWxlKSBfX1RIUk9XOworCisjIGVuZGlmIC8qIFVzZSBHTlUuICAqLworCitfX0VORF9ERUNMUworCisjZW5kaWYJLyogX19XQ1RZUEVfSCBkZWZpbmVkLiAgKi8KKworI2VuZGlmIC8qIHdjdHlwZS5oICAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3dvcmRleHAuaCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS93b3JkZXhwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM0MGU2MQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvaW5jbHVkZS93b3JkZXhwLmgKQEAgLTAsMCArMSw3MSBAQAorLyogQ29weXJpZ2h0IChDKSAxOTkxLCA5MiwgMTk5Ni0xOTk5LCAyMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmCV9XT1JERVhQX0gKKyNkZWZpbmUJX1dPUkRFWFBfSAkxCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorI2RlZmluZSBfX25lZWRfc2l6ZV90CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKK19fQkVHSU5fREVDTFMKKworLyogQml0cyBzZXQgaW4gdGhlIEZMQUdTIGFyZ3VtZW50IHRvIGB3b3JkZXhwJy4gICovCitlbnVtCisgIHsKKyAgICBXUkRFX0RPT0ZGUyA9ICgxIDw8IDApLAkvKiBJbnNlcnQgUFdPUkRFWFAtPndlX29mZnMgTlVMTHMuICAqLworICAgIFdSREVfQVBQRU5EID0gKDEgPDwgMSksCS8qIEFwcGVuZCB0byByZXN1bHRzIG9mIGEgcHJldmlvdXMgY2FsbC4gICovCisgICAgV1JERV9OT0NNRCA9ICgxIDw8IDIpLAkvKiBEb24ndCBkbyBjb21tYW5kIHN1YnN0aXR1dGlvbi4gICovCisgICAgV1JERV9SRVVTRSA9ICgxIDw8IDMpLAkvKiBSZXVzZSBzdG9yYWdlIGluIFBXT1JERVhQLiAgKi8KKyAgICBXUkRFX1NIT1dFUlIgPSAoMSA8PCA0KSwJLyogRG9uJ3QgcmVkaXJlY3Qgc3RkZXJyIHRvIC9kZXYvbnVsbC4gICovCisgICAgV1JERV9VTkRFRiA9ICgxIDw8IDUpLAkvKiBFcnJvciBmb3IgZXhwYW5kaW5nIHVuZGVmaW5lZCB2YXJpYWJsZXMuICAqLworICAgIF9fV1JERV9GTEFHUyA9IChXUkRFX0RPT0ZGUyB8IFdSREVfQVBQRU5EIHwgV1JERV9OT0NNRCB8CisJCSAgICBXUkRFX1JFVVNFIHwgV1JERV9TSE9XRVJSIHwgV1JERV9VTkRFRikKKyAgfTsKKworLyogU3RydWN0dXJlIGRlc2NyaWJpbmcgYSB3b3JkLWV4cGFuc2lvbiBydW4uICAqLwordHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHNpemVfdCB3ZV93b3JkYzsJCS8qIENvdW50IG9mIHdvcmRzIG1hdGNoZWQuICAqLworICAgIGNoYXIgKip3ZV93b3JkdjsJCS8qIExpc3Qgb2YgZXhwYW5kZWQgd29yZHMuICAqLworICAgIHNpemVfdCB3ZV9vZmZzOwkJLyogU2xvdHMgdG8gcmVzZXJ2ZSBpbiBgd2Vfd29yZHYnLiAgKi8KKyAgfSB3b3JkZXhwX3Q7CisKKy8qIFBvc3NpYmxlIG5vbnplcm8gcmV0dXJuIHZhbHVlcyBmcm9tIGB3b3JkZXhwJy4gICovCitlbnVtCisgIHsKKyNpZmRlZiBfX1VTRV9YT1BFTgorICAgIFdSREVfTk9TWVMgPSAtMSwJCS8qIE5ldmVyIHVzZWQgc2luY2Ugd2Ugc3VwcG9ydCBgd29yZGV4cCcuICAqLworI2VuZGlmCisgICAgV1JERV9OT1NQQUNFID0gMSwJCS8qIFJhbiBvdXQgb2YgbWVtb3J5LiAgKi8KKyAgICBXUkRFX0JBRENIQVIsCQkvKiBBIG1ldGFjaGFyIGFwcGVhcnMgaW4gdGhlIHdyb25nIHBsYWNlLiAgKi8KKyAgICBXUkRFX0JBRFZBTCwJCS8qIFVuZGVmaW5lZCB2YXIgcmVmZXJlbmNlIHdpdGggV1JERV9VTkRFRi4gICovCisgICAgV1JERV9DTURTVUIsCQkvKiBDb21tYW5kIHN1YnN0aXR1dGlvbiB3aXRoIFdSREVfTk9DTUQuICAqLworICAgIFdSREVfU1lOVEFYCQkJLyogU2hlbGwgc3ludGF4IGVycm9yLiAgKi8KKyAgfTsKKworLyogRG8gd29yZCBleHBhbnNpb24gb2YgV09SRFMgaW50byBQV09SREVYUC4gICovCitleHRlcm4gaW50IHdvcmRleHAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3dvcmRzLAorCQkgICAgd29yZGV4cF90ICpfX3Jlc3RyaWN0IF9fcHdvcmRleHAsIGludCBfX2ZsYWdzKTsKKworLyogRnJlZSB0aGUgc3RvcmFnZSBhbGxvY2F0ZWQgYnkgYSBgd29yZGV4cCcgY2FsbC4gICovCitleHRlcm4gdm9pZCB3b3JkZnJlZSAod29yZGV4cF90ICpfX3dvcmRleHApIF9fVEhST1c7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiB3b3JkZXhwLmggICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUveGVuL2V2dGNobi5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3hlbi9ldnRjaG4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGU4MzNlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3hlbi9ldnRjaG4uaApAQCAtMCwwICsxLDg4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBldnRjaG4uaAorICoKKyAqIEludGVyZmFjZSB0byAvZGV2L3hlbi9ldnRjaG4uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDUsIEsgQSBGcmFzZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBvciwgd2hlbiBkaXN0cmlidXRlZAorICogc2VwYXJhdGVseSBmcm9tIHRoZSBMaW51eCBrZXJuZWwgb3IgaW5jb3Jwb3JhdGVkIGludG8gb3RoZXIKKyAqIHNvZnR3YXJlIHBhY2thZ2VzLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvdXJjZSBmaWxlICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksCisgKiBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKKyAqIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX19MSU5VWF9QVUJMSUNfRVZUQ0hOX0hfXworI2RlZmluZSBfX0xJTlVYX1BVQkxJQ19FVlRDSE5fSF9fCisKKy8qCisgKiBCaW5kIGEgZnJlc2ggcG9ydCB0byBWSVJRIEB2aXJxLgorICogUmV0dXJuIGFsbG9jYXRlZCBwb3J0LgorICovCisjZGVmaW5lIElPQ1RMX0VWVENITl9CSU5EX1ZJUlEJCQkJXAorCV9JT0MoX0lPQ19OT05FLCAnRScsIDAsIHNpemVvZihzdHJ1Y3QgaW9jdGxfZXZ0Y2huX2JpbmRfdmlycSkpCitzdHJ1Y3QgaW9jdGxfZXZ0Y2huX2JpbmRfdmlycSB7CisJdW5zaWduZWQgaW50IHZpcnE7Cit9OworCisvKgorICogQmluZCBhIGZyZXNoIHBvcnQgdG8gcmVtb3RlIDxAcmVtb3RlX2RvbWFpbiwgQHJlbW90ZV9wb3J0Pi4KKyAqIFJldHVybiBhbGxvY2F0ZWQgcG9ydC4KKyAqLworI2RlZmluZSBJT0NUTF9FVlRDSE5fQklORF9JTlRFUkRPTUFJTgkJCVwKKwlfSU9DKF9JT0NfTk9ORSwgJ0UnLCAxLCBzaXplb2Yoc3RydWN0IGlvY3RsX2V2dGNobl9iaW5kX2ludGVyZG9tYWluKSkKK3N0cnVjdCBpb2N0bF9ldnRjaG5fYmluZF9pbnRlcmRvbWFpbiB7CisJdW5zaWduZWQgaW50IHJlbW90ZV9kb21haW4sIHJlbW90ZV9wb3J0OworfTsKKworLyoKKyAqIEFsbG9jYXRlIGEgZnJlc2ggcG9ydCBmb3IgYmluZGluZyB0byBAcmVtb3RlX2RvbWFpbi4KKyAqIFJldHVybiBhbGxvY2F0ZWQgcG9ydC4KKyAqLworI2RlZmluZSBJT0NUTF9FVlRDSE5fQklORF9VTkJPVU5EX1BPUlQJCQlcCisJX0lPQyhfSU9DX05PTkUsICdFJywgMiwgc2l6ZW9mKHN0cnVjdCBpb2N0bF9ldnRjaG5fYmluZF91bmJvdW5kX3BvcnQpKQorc3RydWN0IGlvY3RsX2V2dGNobl9iaW5kX3VuYm91bmRfcG9ydCB7CisJdW5zaWduZWQgaW50IHJlbW90ZV9kb21haW47Cit9OworCisvKgorICogVW5iaW5kIHByZXZpb3VzbHkgYWxsb2NhdGVkIEBwb3J0LgorICovCisjZGVmaW5lIElPQ1RMX0VWVENITl9VTkJJTkQJCQkJXAorCV9JT0MoX0lPQ19OT05FLCAnRScsIDMsIHNpemVvZihzdHJ1Y3QgaW9jdGxfZXZ0Y2huX3VuYmluZCkpCitzdHJ1Y3QgaW9jdGxfZXZ0Y2huX3VuYmluZCB7CisJdW5zaWduZWQgaW50IHBvcnQ7Cit9OworCisvKgorICogVW5iaW5kIHByZXZpb3VzbHkgYWxsb2NhdGVkIEBwb3J0LgorICovCisjZGVmaW5lIElPQ1RMX0VWVENITl9OT1RJRlkJCQkJXAorCV9JT0MoX0lPQ19OT05FLCAnRScsIDQsIHNpemVvZihzdHJ1Y3QgaW9jdGxfZXZ0Y2huX25vdGlmeSkpCitzdHJ1Y3QgaW9jdGxfZXZ0Y2huX25vdGlmeSB7CisJdW5zaWduZWQgaW50IHBvcnQ7Cit9OworCisvKiBDbGVhciBhbmQgcmVpbml0aWFsaXNlIHRoZSBldmVudCBidWZmZXIuIENsZWFyIGVycm9yIGNvbmRpdGlvbi4gKi8KKyNkZWZpbmUgSU9DVExfRVZUQ0hOX1JFU0VUCQkJCVwKKwlfSU9DKF9JT0NfTk9ORSwgJ0UnLCA1LCAwKQorCisjZW5kaWYgLyogX19MSU5VWF9QVUJMSUNfRVZUQ0hOX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3hlbi9wcml2Y21kLmggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUveGVuL3ByaXZjbWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmIwM2M1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3hlbi9wcml2Y21kLmgKQEAgLTAsMCArMSw3NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcHJpdmNtZC5oCisgKgorICogSW50ZXJmYWNlIHRvIC9wcm9jL3hlbi9wcml2Y21kLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA1LCBLIEEgRnJhc2VyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgb3IsIHdoZW4gZGlzdHJpYnV0ZWQKKyAqIHNlcGFyYXRlbHkgZnJvbSB0aGUgTGludXgga2VybmVsIG9yIGluY29ycG9yYXRlZCBpbnRvIG90aGVyCisgKiBzb2Z0d2FyZSBwYWNrYWdlcywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb3VyY2UgZmlsZSAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LAorICogbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsCisgKiBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfUFVCTElDX1BSSVZDTURfSF9fCisjZGVmaW5lIF9fTElOVVhfUFVCTElDX1BSSVZDTURfSF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyB4ZW5fcGZuX3Q7CisKK3N0cnVjdCBwcml2Y21kX2h5cGVyY2FsbCB7CisJX191NjQgb3A7CisJX191NjQgYXJnWzVdOworfTsKKworc3RydWN0IHByaXZjbWRfbW1hcF9lbnRyeSB7CisJX191NjQgdmE7CisJX191NjQgbWZuOworCV9fdTY0IG5wYWdlczsKK307CisKK3N0cnVjdCBwcml2Y21kX21tYXAgeworCWludCBudW07CisJZG9taWRfdCBkb207IC8qIHRhcmdldCBkb21haW4gKi8KKwlzdHJ1Y3QgcHJpdmNtZF9tbWFwX2VudHJ5ICplbnRyeTsKK307CisKK3N0cnVjdCBwcml2Y21kX21tYXBiYXRjaCB7CisJaW50IG51bTsgICAgIC8qIG51bWJlciBvZiBwYWdlcyB0byBwb3B1bGF0ZSAqLworCWRvbWlkX3QgZG9tOyAvKiB0YXJnZXQgZG9tYWluICovCisJX191NjQgYWRkcjsgIC8qIHZpcnR1YWwgYWRkcmVzcyAqLworCXhlbl9wZm5fdCAqYXJyOyAvKiBhcnJheSBvZiBtZm5zIC0gdG9wIG5pYmJsZSBzZXQgb24gZXJyICovCit9OworCisvKgorICogQGNtZDogSU9DVExfUFJJVkNNRF9IWVBFUkNBTEwKKyAqIEBhcmc6ICZwcml2Y21kX2h5cGVyY2FsbF90CisgKiBSZXR1cm46IFZhbHVlIHJldHVybmVkIGZyb20gZXhlY3V0aW9uIG9mIHRoZSBzcGVjaWZpZWQgaHlwZXJjYWxsLgorICovCisjZGVmaW5lIElPQ1RMX1BSSVZDTURfSFlQRVJDQUxMCQkJCQlcCisJX0lPQyhfSU9DX05PTkUsICdQJywgMCwgc2l6ZW9mKHN0cnVjdCBwcml2Y21kX2h5cGVyY2FsbCkpCisjZGVmaW5lIElPQ1RMX1BSSVZDTURfTU1BUAkJCQkJXAorCV9JT0MoX0lPQ19OT05FLCAnUCcsIDIsIHNpemVvZihzdHJ1Y3QgcHJpdmNtZF9tbWFwKSkKKyNkZWZpbmUgSU9DVExfUFJJVkNNRF9NTUFQQkFUQ0gJCQkJCVwKKwlfSU9DKF9JT0NfTk9ORSwgJ1AnLCAzLCBzaXplb2Yoc3RydWN0IHByaXZjbWRfbW1hcGJhdGNoKSkKKworI2VuZGlmIC8qIF9fTElOVVhfUFVCTElDX1BSSVZDTURfSF9fICovCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2luY2x1ZGUveGxvY2FsZS5oIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3hsb2NhbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjE3ZDY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL3hsb2NhbGUuaApAQCAtMCwwICsxLDQyIEBACisvKiBEZWZpbml0aW9uIG9mIGxvY2FsZSBkYXRhdHlwZS4KKyAgIENvcHlyaWdodCAoQykgMTk5NywyMDAwLDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisgICBDb250cmlidXRlZCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5Ny4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1hMT0NBTEVfSAorI2RlZmluZSBfWExPQ0FMRV9ICTEKKworLyogU3RydWN0dXJlIGZvciByZWVudHJhbnQgbG9jYWxlIHVzaW5nIGZ1bmN0aW9ucy4gIFRoaXMgaXMgYW4KKyAgIChhbG1vc3QpIG9wYXF1ZSB0eXBlIGZvciB0aGUgdXNlciBsZXZlbCBwcm9ncmFtcy4gIFRoZSBmaWxlIGFuZAorICAgdGhpcyBkYXRhIHN0cnVjdHVyZSBpcyBub3Qgc3RhbmRhcmRpemVkLiAgRG9uJ3QgcmVseSBvbiBpdC4gIEl0IGNhbgorICAgZ28gYXdheSB3aXRob3V0IHdhcm5pbmcuICAqLwordHlwZWRlZiBzdHJ1Y3QgX19sb2NhbGVfc3RydWN0Cit7CisgIC8qIE5vdGU6IExDX0FMTCBpcyBub3QgYSB2YWxpZCBpbmRleCBpbnRvIHRoaXMgYXJyYXkuICAqLworICBzdHJ1Y3QgbG9jYWxlX2RhdGEgKl9fbG9jYWxlc1sxM107IC8qIDEzID0gX19MQ19MQVNULiAqLworCisgIC8qIFRvIGluY3JlYXNlIHRoZSBzcGVlZCBvZiB0aGlzIHNvbHV0aW9uIHdlIGFkZCBzb21lIHNwZWNpYWwgbWVtYmVycy4gICovCisgIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOworICBjb25zdCBpbnQgKl9fY3R5cGVfdG9sb3dlcjsKKyAgY29uc3QgaW50ICpfX2N0eXBlX3RvdXBwZXI7CisKKyAgLyogTm90ZTogTENfQUxMIGlzIG5vdCBhIHZhbGlkIGluZGV4IGludG8gdGhpcyBhcnJheS4gICovCisgIGNvbnN0IGNoYXIgKl9fbmFtZXNbMTNdOworfSAqX19sb2NhbGVfdDsKKworI2VuZGlmIC8qIHhsb2NhbGUuaCAqLwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvTWNydDEubyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL01jcnQxLm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEyM2QwYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL01jcnQxLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvU2NydDEubyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL1NjcnQxLm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZiZGIwMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL1NjcnQxLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvY3J0MS5vIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvY3J0MS5vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YmRiMDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9jcnQxLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvY3J0aS5vIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvY3J0aS5vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYzM3MzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9jcnRpLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvY3J0bi5vIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvY3J0bi5vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmM2IxOTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9jcnRuLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQU5TSV9YMy4xMTAuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9BTlNJX1gzLjExMC5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYTMyNDM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQU5TSV9YMy4xMTAuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQVJNU0NJSS04LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQVJNU0NJSS04LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg5ZmNlYWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9BUk1TQ0lJLTguc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQVNNT180NDkuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9BU01PXzQ0OS5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNjY3MTY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQVNNT180NDkuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQklHNS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0JJRzUuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDZmODBhZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0JJRzUuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQklHNUhLU0NTLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQklHNUhLU0NTLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdmM2Y4MzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9CSUc1SEtTQ1Muc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQlJGLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQlJGLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMzZDk2MDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9CUkYuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1AxMDAwNy5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0NQMTAwMDcuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWU0MDI3MQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0NQMTAwMDcuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1AxMTI1LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1AxMTI1LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg5N2I3OTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9DUDExMjUuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1AxMjUwLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1AxMjUwLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk2MGQ1Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9DUDEyNTAuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1AxMjUxLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1AxMjUxLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEzMDU2OTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9DUDEyNTEuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1AxMjUyLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1AxMjUyLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYzMGM3NmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9DUDEyNTIuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1AxMjUzLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1AxMjUzLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE2MjYxZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9DUDEyNTMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1AxMjU0LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1AxMjU0LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFjNTJkZDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9DUDEyNTQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1AxMjU1LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1AxMjU1LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUxYWY3ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9DUDEyNTUuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1AxMjU2LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1AxMjU2LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZiOWQ1YTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9DUDEyNTYuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1AxMjU3LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1AxMjU3LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkyNjljMWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9DUDEyNTcuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1AxMjU4LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1AxMjU4LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjViYjA5ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9DUDEyNTguc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1A3Mzcuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9DUDczNy5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYWI0OTA3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1A3Mzcuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1A3NzUuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9DUDc3NS5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMTJkODdiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1A3NzUuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1A5MzIuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9DUDkzMi5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYTA0M2NlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1A5MzIuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1NOXzM2OTEwMy5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0NTTl8zNjkxMDMuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjU1NDZkMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0NTTl8zNjkxMDMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1dJLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvQ1dJLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhiMWU2YTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9DV0kuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvREVDLU1DUy5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0RFQy1NQ1Muc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGEzMDllYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0RFQy1NQ1Muc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLUFULURFLUEuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9FQkNESUMtQVQtREUtQS5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNmUzZjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLUFULURFLUEuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLUFULURFLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLUFULURFLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBmZmMzNjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9FQkNESUMtQVQtREUuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLUNBLUZSLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLUNBLUZSLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM3NTE5NjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9FQkNESUMtQ0EtRlIuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLURLLU5PLUEuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9FQkNESUMtREstTk8tQS5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45OWJhNGU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLURLLU5PLUEuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLURLLU5PLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLURLLU5PLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkzOTdmMjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9FQkNESUMtREstTk8uc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLUVTLUEuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9FQkNESUMtRVMtQS5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNGRiZDQxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLUVTLUEuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLUVTLVMuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9FQkNESUMtRVMtUy5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYTE4MWU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLUVTLVMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLUVTLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLUVTLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM3MjgyNjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9FQkNESUMtRVMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLUZJLVNFLUEuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9FQkNESUMtRkktU0UtQS5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNTA1MjZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLUZJLVNFLUEuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLUZJLVNFLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLUZJLVNFLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU2ODRjMmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9FQkNESUMtRkktU0Uuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLUZSLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLUZSLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU3NzY5MzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9FQkNESUMtRlIuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLUlTLUZSSVNTLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLUlTLUZSSVNTLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUwOWRlNDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9FQkNESUMtSVMtRlJJU1Muc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLUlULnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLUlULnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI1ZjRiODgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9FQkNESUMtSVQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLVBULnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLVBULnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFiZTY5MzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9FQkNESUMtUFQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLVVLLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLVVLLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU3N2NkOGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9FQkNESUMtVUsuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLVVTLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUJDRElDLVVTLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjcxNGQzM2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9FQkNESUMtVVMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRUNNQS1DWVJJTExJQy5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0VDTUEtQ1lSSUxMSUMuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjg1MWE3YQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0VDTUEtQ1lSSUxMSUMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRVVDLUNOLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRVVDLUNOLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZiMmNkYmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9FVUMtQ04uc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRVVDLUpJU1gwMjEzLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRVVDLUpJU1gwMjEzLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIxNTcwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9FVUMtSklTWDAyMTMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRVVDLUpQLU1TLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRVVDLUpQLU1TLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE1N2ZlYzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9FVUMtSlAtTVMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRVVDLUpQLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRVVDLUpQLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYxOWY1Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9FVUMtSlAuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRVVDLUtSLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRVVDLUtSLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQzYWNhMDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9FVUMtS1Iuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRVVDLVRXLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvRVVDLVRXLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUxY2RmODcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9FVUMtVFcuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvR0IxODAzMC5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0dCMTgwMzAuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDU3ZWM5NwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0dCMTgwMzAuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvR0JCSUc1LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvR0JCSUc1LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUwZDQ4YzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9HQkJJRzUuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvR0JHQksuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9HQkdCSy5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43YTVjODgyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvR0JHQksuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvR0JLLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvR0JLLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJkZTA5MDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9HQksuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvR0VPUkdJQU4tQUNBREVNWS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0dFT1JHSUFOLUFDQURFTVkuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2EwNjA4MQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0dFT1JHSUFOLUFDQURFTVkuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvR0VPUkdJQU4tUFMuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9HRU9SR0lBTi1QUy5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZDYxMmE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvR0VPUkdJQU4tUFMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvR09TVF8xOTc2OC03NC5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0dPU1RfMTk3NjgtNzQuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2M5MDRkOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0dPU1RfMTk3NjgtNzQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvR1JFRUstQ0NJVFQuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9HUkVFSy1DQ0lUVC5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NzE3YjM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvR1JFRUstQ0NJVFQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvR1JFRUs3LU9MRC5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0dSRUVLNy1PTEQuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjNhYTQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0dSRUVLNy1PTEQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvR1JFRUs3LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvR1JFRUs3LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA1YzMzMDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9HUkVFSzcuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSFAtR1JFRUs4LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSFAtR1JFRUs4LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ2MzU5N2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9IUC1HUkVFSzguc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSFAtUk9NQU44LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSFAtUk9NQU44LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI3N2EzZDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9IUC1ST01BTjguc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSFAtUk9NQU45LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSFAtUk9NQU45LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEzNjcyNmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9IUC1ST01BTjkuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSFAtVEhBSTguc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9IUC1USEFJOC5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYWYxZjBlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSFAtVEhBSTguc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSFAtVFVSS0lTSDguc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9IUC1UVVJLSVNIOC5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNDg0YmJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSFAtVFVSS0lTSDguc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMDM3LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMDM3LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk3ZmM4YWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk0wMzcuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMDM4LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMDM4LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZmZjk0YjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk0wMzguc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTAwNC5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTEwMDQuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjUyODlhMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTEwMDQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTAwOC5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTEwMDguc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTgzZDczNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTEwMDguc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTAwOF80MjAuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk0xMDA4XzQyMC5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ODBjNWY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTAwOF80MjAuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTAyNS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTEwMjUuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTM2MGViZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTEwMjUuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTAyNi5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTEwMjYuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzExMDUwMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTEwMjYuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTA0Ni5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTEwNDYuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWVmMjIyOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTEwNDYuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTA0Ny5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTEwNDcuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDI2ZDZkZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTEwNDcuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTA5Ny5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTEwOTcuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTM3Zjk5NAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTEwOTcuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTExMi5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExMTIuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWU5YzA4MwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExMTIuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTEyMi5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExMjIuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzg2YjE5NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExMjIuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTEyMy5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExMjMuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTc1NjMwYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExMjMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTEyNC5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExMjQuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzlkYmNmNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExMjQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTEyOS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExMjkuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTg0NmE5MAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExMjkuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTEzMC5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExMzAuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDU3ODIzMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExMzAuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTEzMi5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExMzIuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjFiM2ViNgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExMzIuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTEzMy5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExMzMuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWI0ODUyZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExMzMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTEzNy5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExMzcuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzkzNTFmMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExMzcuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTE0MC5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNDAuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTllMTkzZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNDAuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTE0MS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNDEuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDdiNWE3NgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNDEuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTE0Mi5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNDIuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZThiNTlmMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNDIuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTE0My5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNDMuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjQzZTQwYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNDMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTE0NC5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNDQuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmIxNWFjYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNDQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTE0NS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNDUuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDJiNTliNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNDUuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTE0Ni5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNDYuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjE4NTczMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNDYuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTE0Ny5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNDcuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmNlOTdjOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNDcuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTE0OC5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNDguc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjlkYmEzYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNDguc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTE0OS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNDkuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTllNmE4NAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNDkuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTE1My5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNTMuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjJlNWIwMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNTMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTE1NC5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNTQuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjA5MTEyNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNTQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTE1NS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNTUuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTk5ZGJiOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNTUuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTE1Ni5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNTYuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzZhNmVkYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNTYuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTE1Ny5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNTcuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmNhYjM5NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNTcuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTE1OC5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNTguc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzI0ZWI0OQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNTguc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTE2MC5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNjAuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzg3MWFiNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNjAuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTE2MS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNjEuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjNlN2EwYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNjEuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTE2Mi5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNjIuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTZmNDgyMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNjIuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTE2My5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNjMuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWY2YjY2MQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNjMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTE2NC5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNjQuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTQ5ZWJhNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNjQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTE2Ni5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNjYuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDZmMzllMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNjYuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTE2Ny5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNjcuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTc2NjdhOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTExNjcuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTI3MTIuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk0xMjcxMi5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZDgzMmUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTI3MTIuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTM2NC5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTEzNjQuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTAwN2Q1MQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTEzNjQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTM3MS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTEzNzEuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTc1MzJiOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTEzNzEuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTM4OC5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTEzODguc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTQ3MTg4YwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTEzODguc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTM5MC5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTEzOTAuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzY5YzhjNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTEzOTAuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTM5OS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTEzOTkuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTM4YjUyYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTEzOTkuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTY4MDQuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk0xNjgwNC5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZmZjMzgyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMTY4MDQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMjU2LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMjU2LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI5NDBjNDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk0yNTYuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMjczLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMjczLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkwZjc2NDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk0yNzMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMjc0LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMjc0LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhlYmJmNzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk0yNzQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMjc1LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMjc1LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU0NDgzZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk0yNzUuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMjc3LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMjc3LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI2YzM0ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk0yNzcuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMjc4LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMjc4LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNmN2JiMzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk0yNzguc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMjgwLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMjgwLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFiNzgxMTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk0yODAuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMjgxLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMjgxLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc5NmJmMGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk0yODEuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMjg0LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMjg0LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVkMDNjMDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk0yODQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMjg1LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMjg1LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVmZmViNDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk0yODUuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMjkwLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMjkwLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE2MDgyYTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk0yOTAuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMjk3LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNMjk3LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAyZWVkOGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk0yOTcuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNNDIwLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNNDIwLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM0Yzk1YjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk00MjAuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNNDIzLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNNDIzLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVhOGFiNTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk00MjMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNNDI0LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNNDI0LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMwZTZhMzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk00MjQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNNDM3LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNNDM3LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlkMDEzZTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk00Mzcuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNNDUxNy5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTQ1MTcuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTcyM2U5ZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTQ1MTcuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNNDg5OS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTQ4OTkuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGY4YjFiMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTQ4OTkuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNNDkwOS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTQ5MDkuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDc2YmM4NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTQ5MDkuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNNDk3MS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTQ5NzEuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTE5M2E1NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTQ5NzEuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNNTAwLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNNTAwLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ0MWIzOTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk01MDAuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNNTM0Ny5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTUzNDcuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjBkYTQ5NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTUzNDcuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODAzLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODAzLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU3YTFlMTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk04MDMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODUwLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODUwLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhlMzQ3ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk04NTAuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODUxLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODUxLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM0N2JlOTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk04NTEuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODUyLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODUyLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAyYWI5YTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk04NTIuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODU1LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODU1LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJmNTQxNTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk04NTUuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODU2LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODU2LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjcyZWYyNjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk04NTYuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODU3LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODU3LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNhMTQ3ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk04NTcuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODYwLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODYwLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBhM2VjMjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk04NjAuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODYxLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODYxLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVjNmMzMDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk04NjEuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODYyLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODYyLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUzN2U5ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk04NjIuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODYzLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODYzLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJjNzdkZDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk04NjMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODY0LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODY0LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY5MTRkZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk04NjQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODY1LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODY1LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBmMTIzNGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk04NjUuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODY2LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODY2LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ2ZmVmMDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk04NjYuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODY2TkFWLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODY2TkFWLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI1OWU4ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk04NjZOQVYuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODY4LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODY4LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE2MjY5MTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk04Njguc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODY5LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODY5LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM0MWY2MGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk04Njkuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODcwLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODcwLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFlNzY1MjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk04NzAuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODcxLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODcxLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEyN2UwOWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk04NzEuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODc0LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODc0LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk0MzE2OGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk04NzQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODc1LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODc1LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE3YWI3M2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk04NzUuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODgwLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODgwLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY2YjA1NmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk04ODAuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODkxLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNODkxLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlkNjZiMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk04OTEuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTAxLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTAxLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVhNmZkYzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk05MDEuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTAyLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTAyLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJhNjZkNGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk05MDIuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTAzLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTAzLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIyMzEzYTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk05MDMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTAzMC5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTkwMzAuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjU1OTQxNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTkwMzAuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTA0LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTA0LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI1YWU4MGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk05MDQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTA1LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTA1LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIxYWUwOTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk05MDUuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTA2Ni5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTkwNjYuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjNhYTM3YgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTkwNjYuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTE4LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTE4LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA1ZjFhOTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk05MTguc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTIxLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTIxLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAwY2FkYmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk05MjEuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTIyLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTIyLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE1NzRlZDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk05MjIuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTMwLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTMwLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ1MDJlZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk05MzAuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTMyLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTMyLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUxNDZlZDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk05MzIuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTMzLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTMzLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNjODMyMzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk05MzMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTM1LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTM1LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc2YmMzMmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk05MzUuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTM3LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTM3LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJlZjI4YjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk05Mzcuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTM5LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTM5LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM1ZTI5ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk05Mzkuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTQzLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTQzLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI1Yzg2ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JQk05NDMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUJNOTQ0OC5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTk0NDguc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTZjY2E1YQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lCTTk0NDguc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUVDX1AyNy0xLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSUVDX1AyNy0xLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ2ZWY0NWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JRUNfUDI3LTEuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSU5JUy04LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSU5JUy04LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc5YjI1ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JTklTLTguc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSU5JUy1DWVJJTExJQy5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lOSVMtQ1lSSUxMSUMuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGMxNmE2NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lOSVMtQ1lSSUxMSUMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSU5JUy5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lOSVMuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDI3MmY5NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lOSVMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNJUkktMzM0Mi5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTSVJJLTMzNDIuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzI1ZmVkZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTSVJJLTMzNDIuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPLTIwMjItQ04tRVhULnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPLTIwMjItQ04tRVhULnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY4MDU0ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JU08tMjAyMi1DTi1FWFQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPLTIwMjItQ04uc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JU08tMjAyMi1DTi5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43OTQ3MzYwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPLTIwMjItQ04uc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPLTIwMjItSlAtMy5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTTy0yMDIyLUpQLTMuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGJlNmMxNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTTy0yMDIyLUpQLTMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPLTIwMjItSlAuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JU08tMjAyMi1KUC5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41Y2QxMmYxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPLTIwMjItSlAuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPLTIwMjItS1Iuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JU08tMjAyMi1LUi5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZDY3MWIzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPLTIwMjItS1Iuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPLUlSLTE5Ny5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTTy1JUi0xOTcuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWUzMTVjNgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTTy1JUi0xOTcuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPLUlSLTIwOS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTTy1JUi0yMDkuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmQ2NTVhZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTTy1JUi0yMDkuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPNjQ2LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPNjQ2LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg4MmQ0NDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JU082NDYuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPODg1OS0xLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPODg1OS0xLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgwZDhmM2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JU084ODU5LTEuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPODg1OS0xMC5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTTzg4NTktMTAuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzJmNjY5OAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTTzg4NTktMTAuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPODg1OS0xMS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTTzg4NTktMTEuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGI0MWNmNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTTzg4NTktMTEuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPODg1OS0xMy5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTTzg4NTktMTMuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2ZlY2ZjYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTTzg4NTktMTMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPODg1OS0xNC5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTTzg4NTktMTQuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODUyZjk2MAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTTzg4NTktMTQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPODg1OS0xNS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTTzg4NTktMTUuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDhiMTBjMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTTzg4NTktMTUuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPODg1OS0xNi5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTTzg4NTktMTYuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjQ2NmVjMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTTzg4NTktMTYuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPODg1OS0yLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPODg1OS0yLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJhMThhODEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JU084ODU5LTIuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPODg1OS0zLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPODg1OS0zLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMzN2YxODMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JU084ODU5LTMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPODg1OS00LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPODg1OS00LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUzYjUyMjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JU084ODU5LTQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPODg1OS01LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPODg1OS01LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYzOWY3YTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JU084ODU5LTUuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPODg1OS02LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPODg1OS02LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBjNGUxNzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JU084ODU5LTYuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPODg1OS03LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPODg1OS03LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM0ZmFhODQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JU084ODU5LTcuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPODg1OS04LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPODg1OS04LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI5NTE4ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JU084ODU5LTguc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPODg1OS05LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPODg1OS05LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ1NmZmNGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JU084ODU5LTkuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPODg1OS05RS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTTzg4NTktOUUuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjgwYmE5MwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTTzg4NTktOUUuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPXzEwMzY3LUJPWC5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTT18xMDM2Ny1CT1guc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjc0NjNlYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTT18xMDM2Ny1CT1guc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPXzExNTQ4LTEuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JU09fMTE1NDgtMS5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNjk4Y2UxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPXzExNTQ4LTEuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPXzIwMzMuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JU09fMjAzMy5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZGI5NjEzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPXzIwMzMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPXzU0MjctRVhULnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPXzU0MjctRVhULnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk2MjM2YmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JU09fNTQyNy1FWFQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPXzU0Mjcuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JU09fNTQyNy5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZDViOTNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPXzU0Mjcuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPXzU0Mjguc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JU09fNTQyOC5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYTJiMDM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPXzU0Mjguc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPXzY5MzctMi5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTT182OTM3LTIuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzhmMGY3MwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0lTT182OTM3LTIuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPXzY5Mzcuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9JU09fNjkzNy5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYWEzYjZjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSVNPXzY5Mzcuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSk9IQUIuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9KT0hBQi5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMzEzNTJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvSk9IQUIuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvS09JLTguc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9LT0ktOC5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNGI5YjBjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvS09JLTguc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvS09JOC1SLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvS09JOC1SLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI3NjA3NTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9LT0k4LVIuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvS09JOC1SVS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0tPSTgtUlUuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmI2NTBiOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0tPSTgtUlUuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvS09JOC1ULnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvS09JOC1ULnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY3MzJhMmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9LT0k4LVQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvS09JOC1VLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvS09JOC1VLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYyNDZlNjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9LT0k4LVUuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvTEFUSU4tR1JFRUstMS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0xBVElOLUdSRUVLLTEuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjU3ZDc5YQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L0xBVElOLUdSRUVLLTEuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvTEFUSU4tR1JFRUsuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9MQVRJTi1HUkVFSy5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNDU4ZDcyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvTEFUSU4tR1JFRUsuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvTUFDLUNFTlRSQUxFVVJPUEUuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9NQUMtQ0VOVFJBTEVVUk9QRS5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YjlmYTg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvTUFDLUNFTlRSQUxFVVJPUEUuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvTUFDLUlTLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvTUFDLUlTLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJkMjZlN2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9NQUMtSVMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvTUFDLVNBTUkuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9NQUMtU0FNSS5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMDliMDA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvTUFDLVNBTUkuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvTUFDLVVLLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvTUFDLVVLLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFkM2Q1OWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9NQUMtVUsuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvTUFDSU5UT1NILnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvTUFDSU5UT1NILnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBhYzMzZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9NQUNJTlRPU0guc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvTUlLLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvTUlLLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI0YmMxODEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9NSUsuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvTkFUUy1EQU5PLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvTkFUUy1EQU5PLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA2ZTRlMGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9OQVRTLURBTk8uc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvTkFUUy1TRUZJLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvTkFUUy1TRUZJLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc4NDU1ODIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9OQVRTLVNFRkkuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvUFQxNTQuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9QVDE1NC5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ODZiMzdmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvUFQxNTQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvUksxMDQ4LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvUksxMDQ4LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg4ODFkNTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9SSzEwNDguc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvU0FNSS1XUzIuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9TQU1JLVdTMi5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZGU2Yzg2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvU0FNSS1XUzIuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvU0hJRlRfSklTWDAyMTMuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9TSElGVF9KSVNYMDIxMy5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYzNhOTdiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvU0hJRlRfSklTWDAyMTMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvU0pJUy5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L1NKSVMuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODMzNzAyOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L1NKSVMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvVC42MS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L1QuNjEuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjhjZjRlNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L1QuNjEuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvVENWTjU3MTItMS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L1RDVk41NzEyLTEuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDhjMmFlMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L1RDVk41NzEyLTEuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvVElTLTYyMC5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L1RJUy02MjAuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzhmMGQzOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L1RJUy02MjAuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvVFNDSUkuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9UU0NJSS5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMDFjMmUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvVFNDSUkuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvVUhDLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvVUhDLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYxNGM0ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9VSEMuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvVU5JQ09ERS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L1VOSUNPREUuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWJjNWIzNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L1VOSUNPREUuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvVVRGLTE2LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvVVRGLTE2LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkxNTlhZGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9VVEYtMTYuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvVVRGLTMyLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvVVRGLTMyLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZkN2E4OGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9VVEYtMzIuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvVVRGLTcuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9VVEYtNy5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZDdiODBiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvVVRGLTcuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvVklTQ0lJLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvVklTQ0lJLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJlNmM5Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9WSVNDSUkuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NvbnYvZ2NvbnYtbW9kdWxlcyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L2djb252LW1vZHVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcwNDMyZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L2djb252LW1vZHVsZXMKQEAgLTAsMCArMSwxOTU2IEBACisjIEdOVSBsaWJjIGljb252IGNvbmZpZ3VyYXRpb24uCisjIENvcHlyaWdodCAoQykgMTk5Ny0yMDA0LCAyMDA1LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworIyBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorIyAwMjExMS0xMzA3IFVTQS4KKworIyBBbGwgbGluZXMgY29udGFpbiB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorCisjIElmIHRoZSBsaW5lcyBzdGFydCB3aXRoIGBtb2R1bGUnCisjICBmcm9tc2V0OgllaXRoZXIgYSBuYW1lIHRyaXBsZSBvciBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0cmlwbGUuCisjICB0b3NldDoJYSBuYW1lIHRyaXBsZSBvciBhbiBleHByZXNzaW9uIHdpdGggXE4gdG8gZ2V0IHJlZ3VsYXIKKyMJCWV4cHJlc3Npb24gbWF0Y2hpbmcgcmVzdWx0cy4KKyMgIGZpbGVuYW1lOglmaWxlbmFtZSBvZiB0aGUgbW9kdWxlIGltcGxlbWVudGluZyB0aGUgdHJhbnNmb3JtYXRpb24uCisjCQlJZiBpdCBpcyBub3QgYWJzb2x1dGUgdGhlIHBhdGggaXMgbWFkZSBhYnNvbHV0ZSBieSBwcmVwZW5kaW5nCisjCQl0aGUgZGlyZWN0b3J5IHRoZSBjb25maWd1cmF0aW9uIGZpbGUgaXMgZm91bmQgaW4uCisjICBjb3N0OglvcHRpb25hbCBjb3N0IG9mIHRoZSB0cmFuc2Zvcm1hdGlvbi4gIERlZmF1bHQgaXMgMS4KKworIyBJZiB0aGUgbGluZXMgc3RhcnQgd2l0aCBgYWxpYXMnCisjICBhbGlhczoJYWxpYXMgbmFtZSB3aGljaCBpcyBub3QgcmVhbGx5IHJlY29nbml6ZWQuCisjICBuYW1lOgl0aGUgcmVhbCBuYW1lIG9mIHRoZSBjaGFyYWN0ZXIgc2V0CisKK2FsaWFzCUlTTy1JUi00Ly8JCUJTXzQ3MzAvLworYWxpYXMJSVNPNjQ2LUdCLy8JCUJTXzQ3MzAvLworYWxpYXMJR0IvLwkJCUJTXzQ3MzAvLworYWxpYXMJVUsvLwkJCUJTXzQ3MzAvLworYWxpYXMJQ1NJU080VU5JVEVES0lOR0RPTS8vCUJTXzQ3MzAvLworbW9kdWxlCUJTXzQ3MzAvLwkJSU5URVJOQUwJCUlTTzY0NgkJMgorbW9kdWxlCUlOVEVSTkFMCQlCU180NzMwLy8JCUlTTzY0NgkJMgorCithbGlhcwlJU08tSVItMTIxLy8JCUNTQV9aMjQzLjQtMTk4NS0xLy8KK2FsaWFzCUlTTzY0Ni1DQS8vCQlDU0FfWjI0My40LTE5ODUtMS8vCithbGlhcwlDU0E3LTEvLwkJQ1NBX1oyNDMuNC0xOTg1LTEvLworYWxpYXMJQ0EvLwkJCUNTQV9aMjQzLjQtMTk4NS0xLy8KK2FsaWFzCUNTSVNPMTIxQ0FOQURJQU4xLy8JQ1NBX1oyNDMuNC0xOTg1LTEvLworYWxpYXMJQ1NBX1oyNDMuNDE5ODUxLy8JQ1NBX1oyNDMuNC0xOTg1LTEvLworbW9kdWxlCUNTQV9aMjQzLjQtMTk4NS0xLy8JSU5URVJOQUwJCUlTTzY0NgkJMgorbW9kdWxlCUlOVEVSTkFMCQlDU0FfWjI0My40LTE5ODUtMS8vCUlTTzY0NgkJMgorCithbGlhcwlJU08tSVItMTIyLy8JCUNTQV9aMjQzLjQtMTk4NS0yLy8KK2FsaWFzCUlTTzY0Ni1DQTIvLwkJQ1NBX1oyNDMuNC0xOTg1LTIvLworYWxpYXMJQ1NBNy0yLy8JCUNTQV9aMjQzLjQtMTk4NS0yLy8KK2FsaWFzCUNTSVNPMTIyQ0FOQURJQU4yLy8JQ1NBX1oyNDMuNC0xOTg1LTIvLworYWxpYXMJQ1NBX1oyNDMuNDE5ODUyLy8JQ1NBX1oyNDMuNC0xOTg1LTIvLworbW9kdWxlCUNTQV9aMjQzLjQtMTk4NS0yLy8JSU5URVJOQUwJCUlTTzY0NgkJMgorbW9kdWxlCUlOVEVSTkFMCQlDU0FfWjI0My40LTE5ODUtMi8vCUlTTzY0NgkJMgorCithbGlhcwlJU08tSVItMjEvLwkJRElOXzY2MDAzLy8KK2FsaWFzCURFLy8JCQlESU5fNjYwMDMvLworYWxpYXMJSVNPNjQ2LURFLy8JCURJTl82NjAwMy8vCithbGlhcwlDU0lTTzIxR0VSTUFOLy8JCURJTl82NjAwMy8vCittb2R1bGUJRElOXzY2MDAzLy8JCUlOVEVSTkFMCQlJU082NDYJCTIKK21vZHVsZQlJTlRFUk5BTAkJRElOXzY2MDAzLy8JCUlTTzY0NgkJMgorCithbGlhcwlEUzIwODkvLwkJRFNfMjA4OS8vCithbGlhcwlJU082NDYtREsvLwkJRFNfMjA4OS8vCithbGlhcwlESy8vCQkJRFNfMjA4OS8vCithbGlhcwlDU0lTTzY0NkRBTklTSC8vCURTXzIwODkvLworbW9kdWxlCURTXzIwODkvLwkJSU5URVJOQUwJCUlTTzY0NgkJMgorbW9kdWxlCUlOVEVSTkFMCQlEU18yMDg5Ly8JCUlTTzY0NgkJMgorCithbGlhcwlJU08tSVItMTcvLwkJRVMvLworYWxpYXMJSVNPNjQ2LUVTLy8JCUVTLy8KK2FsaWFzCUNTSVNPMTdTUEFOSVNILy8JRVMvLworbW9kdWxlCUVTLy8JCQlJTlRFUk5BTAkJSVNPNjQ2CQkyCittb2R1bGUJSU5URVJOQUwJCUVTLy8JCQlJU082NDYJCTIKKworYWxpYXMJSVNPLUlSLTg1Ly8JCUVTMi8vCithbGlhcwlJU082NDYtRVMyLy8JCUVTMi8vCithbGlhcwlDU0lTTzg1U1BBTklTSDIvLwlFUzIvLworbW9kdWxlCUVTMi8vCQkJSU5URVJOQUwJCUlTTzY0NgkJMgorbW9kdWxlCUlOVEVSTkFMCQlFUzIvLwkJCUlTTzY0NgkJMgorCithbGlhcwlJU08tSVItNTcvLwkJR0JfMTk4OC04MC8vCithbGlhcwlDTi8vCQkJR0JfMTk4OC04MC8vCithbGlhcwlJU082NDYtQ04vLwkJR0JfMTk4OC04MC8vCithbGlhcwlDU0lTTzU4R0IxOTg4Ly8JCUdCXzE5ODgtODAvLworYWxpYXMJR0JfMTk4ODgwLy8JCUdCXzE5ODgtODAvLworbW9kdWxlCUdCXzE5ODgtODAvLwkJSU5URVJOQUwJCUlTTzY0NgkJMgorbW9kdWxlCUlOVEVSTkFMCQlHQl8xOTg4LTgwLy8JCUlTTzY0NgkJMgorCithbGlhcwlJU08tSVItMTUvLwkJSVQvLworYWxpYXMJSVNPNjQ2LUlULy8JCUlULy8KK2FsaWFzCUNTSVNPMTVJVEFMSUFOLy8JSVQvLworbW9kdWxlCUlULy8JCQlJTlRFUk5BTAkJSVNPNjQ2CQkyCittb2R1bGUJSU5URVJOQUwJCUlULy8JCQlJU082NDYJCTIKKworYWxpYXMJSVNPLUlSLTE0Ly8JCUpJU19DNjIyMC0xOTY5LVJPLy8KK2FsaWFzCUpQLy8JCQlKSVNfQzYyMjAtMTk2OS1STy8vCithbGlhcwlJU082NDYtSlAvLwkJSklTX0M2MjIwLTE5NjktUk8vLworYWxpYXMJQ1NJU08xNEpJU0M2MjIwUk8vLwlKSVNfQzYyMjAtMTk2OS1STy8vCithbGlhcwlKSVNfQzYyMjAxOTY5Uk8vLwlKSVNfQzYyMjAtMTk2OS1STy8vCittb2R1bGUJSklTX0M2MjIwLTE5NjktUk8vLwlJTlRFUk5BTAkJSVNPNjQ2CQkyCittb2R1bGUJSU5URVJOQUwJCUpJU19DNjIyMC0xOTY5LVJPLy8JSVNPNjQ2CQkyCisKK2FsaWFzCUlTTy1JUi05Mi8vCQlKSVNfQzYyMjktMTk4NC1CLy8KK2FsaWFzCUlTTzY0Ni1KUC1PQ1ItQi8vCUpJU19DNjIyOS0xOTg0LUIvLworYWxpYXMJSlAtT0NSLUIvLwkJSklTX0M2MjI5LTE5ODQtQi8vCithbGlhcwlDU0lTTzkySklTQzYyOTkxOTg0Qi8vCUpJU19DNjIyOS0xOTg0LUIvLworYWxpYXMJSklTX0M2MjI5MTk4NEIvLwlKSVNfQzYyMjktMTk4NC1CLy8KK21vZHVsZQlKSVNfQzYyMjktMTk4NC1CLy8JSU5URVJOQUwJCUlTTzY0NgkJMgorbW9kdWxlCUlOVEVSTkFMCQlKSVNfQzYyMjktMTk4NC1CLy8JSVNPNjQ2CQkyCisKK2FsaWFzCUlTTy1JUi0xNDEvLwkJSlVTX0kuQjEuMDAyLy8KK2FsaWFzCUlTTzY0Ni1ZVS8vCQlKVVNfSS5CMS4wMDIvLworYWxpYXMJSlMvLwkJCUpVU19JLkIxLjAwMi8vCithbGlhcwlZVS8vCQkJSlVTX0kuQjEuMDAyLy8KK2FsaWFzCUNTSVNPMTQxSlVTSUIxMDAyLy8JSlVTX0kuQjEuMDAyLy8KK21vZHVsZQlKVVNfSS5CMS4wMDIvLwkJSU5URVJOQUwJCUlTTzY0NgkJMgorbW9kdWxlCUlOVEVSTkFMCQlKVVNfSS5CMS4wMDIvLwkJSVNPNjQ2CQkyCisKK2FsaWFzCUlTTzY0Ni1LUi8vCQlLU0M1NjM2Ly8KK2FsaWFzCUNTS1NDNTYzNi8vCQlLU0M1NjM2Ly8KK21vZHVsZQlLU0M1NjM2Ly8JCUlOVEVSTkFMCQlJU082NDYJCTIKK21vZHVsZQlJTlRFUk5BTAkJS1NDNTYzNi8vCQlJU082NDYJCTIKKworYWxpYXMJSVNPLUlSLTg2Ly8JCU1TWl83Nzk1LjMvLworYWxpYXMJSVNPNjQ2LUhVLy8JCU1TWl83Nzk1LjMvLworYWxpYXMJSFUvLwkJCU1TWl83Nzk1LjMvLworYWxpYXMJQ1NJU084NkhVTkdBUklBTi8vCU1TWl83Nzk1LjMvLworbW9kdWxlCU1TWl83Nzk1LjMvLwkJSU5URVJOQUwJCUlTTzY0NgkJMgorbW9kdWxlCUlOVEVSTkFMCQlNU1pfNzc5NS4zLy8JCUlTTzY0NgkJMgorCithbGlhcwlDVUJBLy8JCQlOQ19OQzAwLTEwLy8KK2FsaWFzCU5DX05DMDAtMTA6ODEvLwkJTkNfTkMwMC0xMC8vCithbGlhcwlJU08tSVItMTUxLy8JCU5DX05DMDAtMTAvLworYWxpYXMJSVNPNjQ2LUNVLy8JCU5DX05DMDAtMTAvLworYWxpYXMJQ1NJU08xNTFDVUJBLy8JCU5DX05DMDAtMTAvLworYWxpYXMJTkNfTkMwMDEwLy8JCU5DX05DMDAtMTAvLworbW9kdWxlCU5DX05DMDAtMTAvLwkJSU5URVJOQUwJCUlTTzY0NgkJMgorbW9kdWxlCUlOVEVSTkFMCQlOQ19OQzAwLTEwLy8JCUlTTzY0NgkJMgorCithbGlhcwlJU08tSVItNjkvLwkJTkZfWl82Mi0wMTAvLworYWxpYXMJSVNPNjQ2LUZSLy8JCU5GX1pfNjItMDEwLy8KK2FsaWFzCUZSLy8JCQlORl9aXzYyLTAxMC8vCithbGlhcwlDU0lTTzY5RlJFTkNILy8JCU5GX1pfNjItMDEwLy8KK2FsaWFzCU5GX1pfNjIwMTAvLwkJTkZfWl82Mi0wMTAvLworbW9kdWxlCU5GX1pfNjItMDEwLy8JCUlOVEVSTkFMCQlJU082NDYJCTIKK21vZHVsZQlJTlRFUk5BTAkJTkZfWl82Mi0wMTAvLwkJSVNPNjQ2CQkyCisKK2FsaWFzCUlTTy1JUi0yNS8vCQlORl9aXzYyLTAxMF8xOTczLy8KK2FsaWFzCUlTTzY0Ni1GUjEvLwkJTkZfWl82Mi0wMTBfMTk3My8vCithbGlhcwlORl9aXzYyLTAxMF8oMTk3MykvLwlORl9aXzYyLTAxMF8xOTczLy8KK2FsaWFzCUNTSVNPMjVGUkVOQ0gvLwkJTkZfWl82Mi0wMTBfMTk3My8vCithbGlhcwlORl9aXzYyMDEwXzE5NzMvLwlORl9aXzYyLTAxMF8xOTczLy8KK21vZHVsZQlORl9aXzYyLTAxMF8xOTczLy8JSU5URVJOQUwJCUlTTzY0NgkJMgorbW9kdWxlCUlOVEVSTkFMCQlORl9aXzYyLTAxMF8xOTczLy8JSVNPNjQ2CQkyCisKK2FsaWFzCUlTTy1JUi02MC8vCQlOU180NTUxLTEvLworYWxpYXMJSVNPNjQ2LU5PLy8JCU5TXzQ1NTEtMS8vCithbGlhcwlOTy8vCQkJTlNfNDU1MS0xLy8KK2FsaWFzCUNTSVNPNjBEQU5JU0hOT1JXRUdJQU4vLyBOU180NTUxLTEvLworYWxpYXMJQ1NJU082ME5PUldFR0lBTjEvLwlOU180NTUxLTEvLworYWxpYXMJTlNfNDU1MTEvLwkJTlNfNDU1MS0xLy8KK21vZHVsZQlOU180NTUxLTEvLwkJSU5URVJOQUwJCUlTTzY0NgkJMgorbW9kdWxlCUlOVEVSTkFMCQlOU180NTUxLTEvLwkJSVNPNjQ2CQkyCisKK2FsaWFzCUlTTzY0Ni1OTzIvLwkJTlNfNDU1MS0yLy8KK2FsaWFzCUlTTy1JUi02MS8vCQlOU180NTUxLTIvLworYWxpYXMJTk8yLy8JCQlOU180NTUxLTIvLworYWxpYXMJQ1NJU082MU5PUldFR0lBTjIvLwlOU180NTUxLTIvLworYWxpYXMJTlNfNDU1MTIvLwkJTlNfNDU1MS0yLy8KK21vZHVsZQlOU180NTUxLTIvLwkJSU5URVJOQUwJCUlTTzY0NgkJMgorbW9kdWxlCUlOVEVSTkFMCQlOU180NTUxLTIvLwkJSVNPNjQ2CQkyCisKK2FsaWFzCUlTTy1JUi0xNi8vCQlQVC8vCithbGlhcwlJU082NDYtUFQvLwkJUFQvLworYWxpYXMJQ1NJU08xNlBPUlRVR0VTRS8vCVBULy8KK21vZHVsZQlQVC8vCQkJSU5URVJOQUwJCUlTTzY0NgkJMgorbW9kdWxlCUlOVEVSTkFMCQlQVC8vCQkJSVNPNjQ2CQkyCisKK2FsaWFzCUlTTy1JUi04NC8vCQlQVDIvLworYWxpYXMJSVNPNjQ2LVBUMi8vCQlQVDIvLworYWxpYXMJQ1NJU084NFBPUlRVR1VFU0UyLy8JUFQyLy8KK21vZHVsZQlQVDIvLwkJCUlOVEVSTkFMCQlJU082NDYJCTIKK21vZHVsZQlJTlRFUk5BTAkJUFQyLy8JCQlJU082NDYJCTIKKworYWxpYXMJSVNPLUlSLTEwLy8JCVNFTl84NTAyMDBfQi8vCithbGlhcwlGSS8vCQkJU0VOXzg1MDIwMF9CLy8KK2FsaWFzCUlTTzY0Ni1GSS8vCQlTRU5fODUwMjAwX0IvLworYWxpYXMJSVNPNjQ2LVNFLy8JCVNFTl84NTAyMDBfQi8vCithbGlhcwlTRS8vCQkJU0VOXzg1MDIwMF9CLy8KK2FsaWFzCUNTSVNPMTBTV0VESVNILy8JU0VOXzg1MDIwMF9CLy8KK2FsaWFzCVNTNjM2MTI3Ly8JCVNFTl84NTAyMDBfQi8vCittb2R1bGUJU0VOXzg1MDIwMF9CLy8JCUlOVEVSTkFMCQlJU082NDYJCTIKK21vZHVsZQlJTlRFUk5BTAkJU0VOXzg1MDIwMF9CLy8JCUlTTzY0NgkJMgorCithbGlhcwlJU08tSVItMTEvLwkJU0VOXzg1MDIwMF9DLy8KK2FsaWFzCUlTTzY0Ni1TRTIvLwkJU0VOXzg1MDIwMF9DLy8KK2FsaWFzCVNFMi8vCQkJU0VOXzg1MDIwMF9DLy8KK2FsaWFzCUNTSVNPMTFTV0VESVNIRk9STkFNRVMvLyBTRU5fODUwMjAwX0MvLworbW9kdWxlCVNFTl84NTAyMDBfQy8vCQlJTlRFUk5BTAkJSVNPNjQ2CQkyCittb2R1bGUJSU5URVJOQUwJCVNFTl84NTAyMDBfQy8vCQlJU082NDYJCTIKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlTTy1JUi0xMDAvLwkJSVNPLTg4NTktMS8vCithbGlhcwlJU09fODg1OS0xOjE5ODcvLwlJU08tODg1OS0xLy8KK2FsaWFzCUlTT184ODU5LTEvLwkJSVNPLTg4NTktMS8vCithbGlhcwlJU084ODU5LTEvLwkJSVNPLTg4NTktMS8vCithbGlhcwlJU084ODU5MS8vCQlJU08tODg1OS0xLy8KK2FsaWFzCUxBVElOMS8vCQlJU08tODg1OS0xLy8KK2FsaWFzCUwxLy8JCQlJU08tODg1OS0xLy8KK2FsaWFzCUlCTTgxOS8vCQlJU08tODg1OS0xLy8KK2FsaWFzCUNQODE5Ly8JCQlJU08tODg1OS0xLy8KK2FsaWFzCUNTSVNPTEFUSU4xLy8JCUlTTy04ODU5LTEvLworYWxpYXMJODg1OV8xLy8JCUlTTy04ODU5LTEvLworYWxpYXMJT1NGMDAwMTAwMDEvLwkJSVNPLTg4NTktMS8vCittb2R1bGUJSVNPLTg4NTktMS8vCQlJTlRFUk5BTAkJSVNPODg1OS0xCTEKK21vZHVsZQlJTlRFUk5BTAkJSVNPLTg4NTktMS8vCQlJU084ODU5LTEJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSVNPLUlSLTEwMS8vCQlJU08tODg1OS0yLy8KK2FsaWFzCUlTT184ODU5LTI6MTk4Ny8vCUlTTy04ODU5LTIvLworYWxpYXMJSVNPXzg4NTktMi8vCQlJU08tODg1OS0yLy8KK2FsaWFzCUlTTzg4NTktMi8vCQlJU08tODg1OS0yLy8KK2FsaWFzCUlTTzg4NTkyLy8JCUlTTy04ODU5LTIvLworYWxpYXMJTEFUSU4yLy8JCUlTTy04ODU5LTIvLworYWxpYXMJTDIvLwkJCUlTTy04ODU5LTIvLworYWxpYXMJQ1NJU09MQVRJTjIvLwkJSVNPLTg4NTktMi8vCithbGlhcwk4ODU5XzIvLwkJSVNPLTg4NTktMi8vCithbGlhcwlPU0YwMDAxMDAwMi8vCQlJU08tODg1OS0yLy8KK2FsaWFzCUlCTTkxMi8vCQlJU08tODg1OS0yLy8KK2FsaWFzCUNQOTEyLy8JCQlJU08tODg1OS0yLy8KK21vZHVsZQlJU08tODg1OS0yLy8JCUlOVEVSTkFMCQlJU084ODU5LTIJMQorbW9kdWxlCUlOVEVSTkFMCQlJU08tODg1OS0yLy8JCUlTTzg4NTktMgkxCisKKyMJZnJvbQkJCXRvCQkJIG1vZHVsZQkJY29zdAorYWxpYXMJSVNPLUlSLTEwOS8vCQlJU08tODg1OS0zLy8KK2FsaWFzCUlTT184ODU5LTM6MTk4OC8vCUlTTy04ODU5LTMvLworYWxpYXMJSVNPXzg4NTktMy8vCQlJU08tODg1OS0zLy8KK2FsaWFzCUlTTzg4NTktMy8vCQlJU08tODg1OS0zLy8KK2FsaWFzCUlTTzg4NTkzLy8JCUlTTy04ODU5LTMvLworYWxpYXMJTEFUSU4zLy8JCUlTTy04ODU5LTMvLworYWxpYXMJTDMvLwkJCUlTTy04ODU5LTMvLworYWxpYXMJQ1NJU09MQVRJTjMvLwkJSVNPLTg4NTktMy8vCithbGlhcwk4ODU5XzMvLwkJSVNPLTg4NTktMy8vCithbGlhcwlPU0YwMDAxMDAwMy8vCQlJU08tODg1OS0zLy8KK21vZHVsZQlJU08tODg1OS0zLy8JCUlOVEVSTkFMCQlJU084ODU5LTMJMQorbW9kdWxlCUlOVEVSTkFMCQlJU08tODg1OS0zLy8JCUlTTzg4NTktMwkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJU08tSVItMTEwLy8JCUlTTy04ODU5LTQvLworYWxpYXMJSVNPXzg4NTktNDoxOTg4Ly8JSVNPLTg4NTktNC8vCithbGlhcwlJU09fODg1OS00Ly8JCUlTTy04ODU5LTQvLworYWxpYXMJSVNPODg1OS00Ly8JCUlTTy04ODU5LTQvLworYWxpYXMJSVNPODg1OTQvLwkJSVNPLTg4NTktNC8vCithbGlhcwlMQVRJTjQvLwkJSVNPLTg4NTktNC8vCithbGlhcwlMNC8vCQkJSVNPLTg4NTktNC8vCithbGlhcwlDU0lTT0xBVElONC8vCQlJU08tODg1OS00Ly8KK2FsaWFzCTg4NTlfNC8vCQlJU08tODg1OS00Ly8KK2FsaWFzCU9TRjAwMDEwMDA0Ly8JCUlTTy04ODU5LTQvLworbW9kdWxlCUlTTy04ODU5LTQvLwkJSU5URVJOQUwJCUlTTzg4NTktNAkxCittb2R1bGUJSU5URVJOQUwJCUlTTy04ODU5LTQvLwkJSVNPODg1OS00CTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlTTy1JUi0xNDQvLwkJSVNPLTg4NTktNS8vCithbGlhcwlJU09fODg1OS01OjE5ODgvLwlJU08tODg1OS01Ly8KK2FsaWFzCUlTT184ODU5LTUvLwkJSVNPLTg4NTktNS8vCithbGlhcwlJU084ODU5LTUvLwkJSVNPLTg4NTktNS8vCithbGlhcwlJU084ODU5NS8vCQlJU08tODg1OS01Ly8KK2FsaWFzCUNZUklMTElDLy8JCUlTTy04ODU5LTUvLworYWxpYXMJQ1NJU09MQVRJTkNZUklMTElDLy8JSVNPLTg4NTktNS8vCithbGlhcwk4ODU5XzUvLwkJSVNPLTg4NTktNS8vCithbGlhcwlPU0YwMDAxMDAwNS8vCQlJU08tODg1OS01Ly8KK2FsaWFzCUlCTTkxNS8vCQlJU08tODg1OS01Ly8KK2FsaWFzCUNQOTE1Ly8JCQlJU08tODg1OS01Ly8KK21vZHVsZQlJU08tODg1OS01Ly8JCUlOVEVSTkFMCQlJU084ODU5LTUJMQorbW9kdWxlCUlOVEVSTkFMCQlJU08tODg1OS01Ly8JCUlTTzg4NTktNQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJU08tSVItMTI3Ly8JCUlTTy04ODU5LTYvLworYWxpYXMJSVNPXzg4NTktNjoxOTg3Ly8JSVNPLTg4NTktNi8vCithbGlhcwlJU09fODg1OS02Ly8JCUlTTy04ODU5LTYvLworYWxpYXMJSVNPODg1OS02Ly8JCUlTTy04ODU5LTYvLworYWxpYXMJSVNPODg1OTYvLwkJSVNPLTg4NTktNi8vCithbGlhcwlFQ01BLTExNC8vCQlJU08tODg1OS02Ly8KK2FsaWFzCUFTTU8tNzA4Ly8JCUlTTy04ODU5LTYvLworYWxpYXMJQVJBQklDLy8JCUlTTy04ODU5LTYvLworYWxpYXMJQ1NJU09MQVRJTkFSQUJJQy8vCUlTTy04ODU5LTYvLworYWxpYXMJODg1OV82Ly8JCUlTTy04ODU5LTYvLworYWxpYXMJT1NGMDAwMTAwMDYvLwkJSVNPLTg4NTktNi8vCithbGlhcwlJQk0xMDg5Ly8JCUlTTy04ODU5LTYvLworYWxpYXMJQ1AxMDg5Ly8JCUlTTy04ODU5LTYvLworbW9kdWxlCUlTTy04ODU5LTYvLwkJSU5URVJOQUwJCUlTTzg4NTktNgkxCittb2R1bGUJSU5URVJOQUwJCUlTTy04ODU5LTYvLwkJSVNPODg1OS02CTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlTTy1JUi0xMjYvLwkJSVNPLTg4NTktNy8vCithbGlhcwlJU09fODg1OS03OjIwMDMvLwlJU08tODg1OS03Ly8KK2FsaWFzCUlTT184ODU5LTc6MTk4Ny8vCUlTTy04ODU5LTcvLworYWxpYXMJSVNPXzg4NTktNy8vCQlJU08tODg1OS03Ly8KK2FsaWFzCUlTTzg4NTktNy8vCQlJU08tODg1OS03Ly8KK2FsaWFzCUlTTzg4NTk3Ly8JCUlTTy04ODU5LTcvLworYWxpYXMJRUxPVF85MjgvLwkJSVNPLTg4NTktNy8vCithbGlhcwlFQ01BLTExOC8vCQlJU08tODg1OS03Ly8KK2FsaWFzCUdSRUVLLy8JCQlJU08tODg1OS03Ly8KK2FsaWFzCUdSRUVLOC8vCQlJU08tODg1OS03Ly8KK2FsaWFzCUNTSVNPTEFUSU5HUkVFSy8vCUlTTy04ODU5LTcvLworYWxpYXMJODg1OV83Ly8JCUlTTy04ODU5LTcvLworYWxpYXMJT1NGMDAwMTAwMDcvLwkJSVNPLTg4NTktNy8vCithbGlhcwlJQk04MTMvLwkJSVNPLTg4NTktNy8vCithbGlhcwlDUDgxMy8vCQkJSVNPLTg4NTktNy8vCittb2R1bGUJSVNPLTg4NTktNy8vCQlJTlRFUk5BTAkJSVNPODg1OS03CTEKK21vZHVsZQlJTlRFUk5BTAkJSVNPLTg4NTktNy8vCQlJU084ODU5LTcJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSVNPLUlSLTEzOC8vCQlJU08tODg1OS04Ly8KK2FsaWFzCUlTT184ODU5LTg6MTk4OC8vCUlTTy04ODU5LTgvLworYWxpYXMJSVNPXzg4NTktOC8vCQlJU08tODg1OS04Ly8KK2FsaWFzCUlTTzg4NTktOC8vCQlJU08tODg1OS04Ly8KK2FsaWFzCUlTTzg4NTk4Ly8JCUlTTy04ODU5LTgvLworYWxpYXMJSEVCUkVXLy8JCUlTTy04ODU5LTgvLworYWxpYXMJQ1NJU09MQVRJTkhFQlJFVy8vCUlTTy04ODU5LTgvLworYWxpYXMJODg1OV84Ly8JCUlTTy04ODU5LTgvLworYWxpYXMJT1NGMDAwMTAwMDgvLwkJSVNPLTg4NTktOC8vCithbGlhcwlJQk05MTYvLwkJSVNPLTg4NTktOC8vCithbGlhcwlDUDkxNi8vCQkJSVNPLTg4NTktOC8vCittb2R1bGUJSVNPLTg4NTktOC8vCQlJTlRFUk5BTAkJSVNPODg1OS04CTEKK21vZHVsZQlJTlRFUk5BTAkJSVNPLTg4NTktOC8vCQlJU084ODU5LTgJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSVNPLUlSLTE0OC8vCQlJU08tODg1OS05Ly8KK2FsaWFzCUlTT184ODU5LTk6MTk4OS8vCUlTTy04ODU5LTkvLworYWxpYXMJSVNPXzg4NTktOS8vCQlJU08tODg1OS05Ly8KK2FsaWFzCUlTTzg4NTktOS8vCQlJU08tODg1OS05Ly8KK2FsaWFzCUlTTzg4NTk5Ly8JCUlTTy04ODU5LTkvLworYWxpYXMJTEFUSU41Ly8JCUlTTy04ODU5LTkvLworYWxpYXMJTDUvLwkJCUlTTy04ODU5LTkvLworYWxpYXMJQ1NJU09MQVRJTjUvLwkJSVNPLTg4NTktOS8vCithbGlhcwk4ODU5XzkvLwkJSVNPLTg4NTktOS8vCithbGlhcwlPU0YwMDAxMDAwOS8vCQlJU08tODg1OS05Ly8KK2FsaWFzCUlCTTkyMC8vCQlJU08tODg1OS05Ly8KK2FsaWFzCUNQOTIwLy8JCQlJU08tODg1OS05Ly8KK2FsaWFzCVRTLTU4ODEvLwkJSVNPLTg4NTktOS8vCithbGlhcwlFQ01BLTEyOC8vCQlJU08tODg1OS05Ly8KK21vZHVsZQlJU08tODg1OS05Ly8JCUlOVEVSTkFMCQlJU084ODU5LTkJMQorbW9kdWxlCUlOVEVSTkFMCQlJU08tODg1OS05Ly8JCUlTTzg4NTktOQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJU08tSVItMTU3Ly8JCUlTTy04ODU5LTEwLy8KK2FsaWFzCUlTT184ODU5LTEwOjE5OTIvLwlJU08tODg1OS0xMC8vCithbGlhcwlJU09fODg1OS0xMC8vCQlJU08tODg1OS0xMC8vCithbGlhcwlJU084ODU5LTEwLy8JCUlTTy04ODU5LTEwLy8KK2FsaWFzCUlTTzg4NTkxMC8vCQlJU08tODg1OS0xMC8vCithbGlhcwlMQVRJTjYvLwkJSVNPLTg4NTktMTAvLworYWxpYXMJTDYvLwkJCUlTTy04ODU5LTEwLy8KK2FsaWFzCUNTSVNPTEFUSU42Ly8JCUlTTy04ODU5LTEwLy8KK2FsaWFzCU9TRjAwMDEwMDBBLy8JCUlTTy04ODU5LTEwLy8KK21vZHVsZQlJU08tODg1OS0xMC8vCQlJTlRFUk5BTAkJSVNPODg1OS0xMAkxCittb2R1bGUJSU5URVJOQUwJCUlTTy04ODU5LTEwLy8JCUlTTzg4NTktMTAJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSVNPODg1OS0xMS8vCQlJU08tODg1OS0xMS8vCithbGlhcwlJU084ODU5MTEvLwkJSVNPLTg4NTktMTEvLworbW9kdWxlCUlTTy04ODU5LTExLy8JCUlOVEVSTkFMCQlJU084ODU5LTExCTEKK21vZHVsZQlJTlRFUk5BTAkJSVNPLTg4NTktMTEvLwkJSVNPODg1OS0xMQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJU084ODU5LTEzLy8JCUlTTy04ODU5LTEzLy8KK2FsaWFzCUlTTzg4NTkxMy8vCQlJU08tODg1OS0xMy8vCithbGlhcwlJU08tSVItMTc5Ly8JCUlTTy04ODU5LTEzLy8KK2FsaWFzCUxBVElONy8vCQlJU08tODg1OS0xMy8vCithbGlhcwlMNy8vCQkJSVNPLTg4NTktMTMvLworYWxpYXMJQkFMVElDLy8JCUlTTy04ODU5LTEzLy8KK21vZHVsZQlJU08tODg1OS0xMy8vCQlJTlRFUk5BTAkJSVNPODg1OS0xMwkxCittb2R1bGUJSU5URVJOQUwJCUlTTy04ODU5LTEzLy8JCUlTTzg4NTktMTMJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSVNPODg1OS0xNC8vCQlJU08tODg1OS0xNC8vCithbGlhcwlJU084ODU5MTQvLwkJSVNPLTg4NTktMTQvLworYWxpYXMJSVNPLUlSLTE5OS8vCQlJU08tODg1OS0xNC8vCithbGlhcwlMQVRJTjgvLwkJSVNPLTg4NTktMTQvLworYWxpYXMJTDgvLwkJCUlTTy04ODU5LTE0Ly8KK2FsaWFzCUlTT184ODU5LTE0OjE5OTgvLwlJU08tODg1OS0xNC8vCithbGlhcwlJU09fODg1OS0xNC8vCQlJU08tODg1OS0xNC8vCithbGlhcwlJU08tQ0VMVElDLy8JCUlTTy04ODU5LTE0Ly8KK21vZHVsZQlJU08tODg1OS0xNC8vCQlJTlRFUk5BTAkJSVNPODg1OS0xNAkxCittb2R1bGUJSU5URVJOQUwJCUlTTy04ODU5LTE0Ly8JCUlTTzg4NTktMTQJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSVNPODg1OS0xNS8vCQlJU08tODg1OS0xNS8vCithbGlhcwlJU084ODU5MTUvLwkJSVNPLTg4NTktMTUvLworYWxpYXMJSVNPLUlSLTIwMy8vCQlJU08tODg1OS0xNS8vCithbGlhcwlJU09fODg1OS0xNS8vCQlJU08tODg1OS0xNS8vCithbGlhcwlMQVRJTi05Ly8JCUlTTy04ODU5LTE1Ly8KK2FsaWFzCUxBVElOOS8vCQlJU08tODg1OS0xNS8vCithbGlhcwlJU09fODg1OS0xNToxOTk4Ly8JSVNPLTg4NTktMTUvLworbW9kdWxlCUlTTy04ODU5LTE1Ly8JCUlOVEVSTkFMCQlJU084ODU5LTE1CTEKK21vZHVsZQlJTlRFUk5BTAkJSVNPLTg4NTktMTUvLwkJSVNPODg1OS0xNQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJU084ODU5LTE2Ly8JCUlTTy04ODU5LTE2Ly8KK2FsaWFzCUlTTzg4NTkxNi8vCQlJU08tODg1OS0xNi8vCithbGlhcwlJU08tSVItMjI2Ly8JCUlTTy04ODU5LTE2Ly8KK2FsaWFzCUxBVElOMTAvLwkJSVNPLTg4NTktMTYvLworYWxpYXMJTDEwLy8JCQlJU08tODg1OS0xNi8vCithbGlhcwlJU09fODg1OS0xNjoyMDAxLy8JSVNPLTg4NTktMTYvLworYWxpYXMJSVNPXzg4NTktMTYvLwkJSVNPLTg4NTktMTYvLworbW9kdWxlCUlTTy04ODU5LTE2Ly8JCUlOVEVSTkFMCQlJU084ODU5LTE2CTEKK21vZHVsZQlJTlRFUk5BTAkJSVNPLTg4NTktMTYvLwkJSVNPODg1OS0xNgkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlULjYxLy8JCQlULjYxLThCSVQvLworYWxpYXMJSVNPLUlSLTEwMy8vCQlULjYxLThCSVQvLworYWxpYXMJQ1NJU08xMDNUNjE4QklULy8JVC42MS04QklULy8KK2FsaWFzCVQuNjE4QklULy8JCVQuNjEtOEJJVC8vCittb2R1bGUJVC42MS04QklULy8JCUlOVEVSTkFMCQlULjYxCQkxCittb2R1bGUJSU5URVJOQUwJCVQuNjEtOEJJVC8vCQlULjYxCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJU08tSVItMTU2Ly8JCUlTT182OTM3Ly8KK2FsaWFzCUlTT182OTM3OjE5OTIvLwkJSVNPXzY5MzcvLworYWxpYXMJSVNPNjkzNy8vCQlJU09fNjkzNy8vCittb2R1bGUJSVNPXzY5MzcvLwkJSU5URVJOQUwJCUlTT182OTM3CTEKK21vZHVsZQlJTlRFUk5BTAkJSVNPXzY5MzcvLwkJSVNPXzY5MzcJMQorCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJU08tSVItOTAvLwkJSVNPXzY5MzctMi8vCithbGlhcwlJU09fNjkzNy0yOjE5ODMvLwlJU09fNjkzNy0yLy8KK2FsaWFzCUNTSVNPOTAvLwkJSVNPXzY5MzctMi8vCithbGlhcwlJU09fNjkzNzIvLwkJSVNPXzY5MzctMi8vCittb2R1bGUJSVNPXzY5MzctMi8vCQlJTlRFUk5BTAkJSVNPXzY5MzctMgkxCittb2R1bGUJSU5URVJOQUwJCUlTT182OTM3LTIvLwkJSVNPXzY5MzctMgkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlTSElGVC1KSVMvLwkJU0pJUy8vCithbGlhcwlTSElGVF9KSVMvLwkJU0pJUy8vCithbGlhcwlNU19LQU5KSS8vCQlTSklTLy8KK2FsaWFzCUNTU0hJRlRKSVMvLwkJU0pJUy8vCittb2R1bGUJU0pJUy8vCQkJSU5URVJOQUwJCVNKSVMJCTEKK21vZHVsZQlJTlRFUk5BTAkJU0pJUy8vCQkJU0pJUwkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJV0lORE9XUy0zMUovLwkJQ1A5MzIvLworYWxpYXMJTVM5MzIvLwkJCUNQOTMyLy8KK2FsaWFzCVNKSVMtT1BFTi8vCQlDUDkzMi8vCithbGlhcwlTSklTLVdJTi8vCQlDUDkzMi8vCithbGlhcwlDU1dJTkRPV1MzMUovLwkJQ1A5MzIvLworbW9kdWxlCUNQOTMyLy8JCQlJTlRFUk5BTAkJQ1A5MzIJCTEKK21vZHVsZQlJTlRFUk5BTAkJQ1A5MzIvLwkJCUNQOTMyCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlLT0k4Ly8JCQlLT0ktOC8vCittb2R1bGUJS09JLTgvLwkJCUlOVEVSTkFMCQlLT0ktOAkJMQorbW9kdWxlCUlOVEVSTkFMCQlLT0ktOC8vCQkJS09JLTgJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUNTS09JOFIvLwkJS09JOC1SLy8KK2FsaWFzCUtPSThSLy8JCQlLT0k4LVIvLworbW9kdWxlCUtPSTgtUi8vCQlJTlRFUk5BTAkJS09JOC1SCQkxCittb2R1bGUJSU5URVJOQUwJCUtPSTgtUi8vCQlLT0k4LVIJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlTTy1JUi0xOS8vCQlMQVRJTi1HUkVFSy8vCithbGlhcwlDU0lTTzE5TEFUSU5HUkVFSy8vCUxBVElOLUdSRUVLLy8KK2FsaWFzCUxBVElOR1JFRUsvLwkJTEFUSU4tR1JFRUsvLworbW9kdWxlCUxBVElOLUdSRUVLLy8JCUlOVEVSTkFMCQlMQVRJTi1HUkVFSwkxCittb2R1bGUJSU5URVJOQUwJCUxBVElOLUdSRUVLLy8JCUxBVElOLUdSRUVLCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlTTy1JUi0yNy8vCQlMQVRJTi1HUkVFSy0xLy8KK2FsaWFzCUNTSVNPMjdMQVRJTkdSRUVLMS8vCUxBVElOLUdSRUVLLTEvLworYWxpYXMJTEFUSU5HUkVFSzEvLwkJTEFUSU4tR1JFRUstMS8vCittb2R1bGUJTEFUSU4tR1JFRUstMS8vCQlJTlRFUk5BTAkJTEFUSU4tR1JFRUstMQkxCittb2R1bGUJSU5URVJOQUwJCUxBVElOLUdSRUVLLTEvLwkJTEFUSU4tR1JFRUstMQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlST01BTjgvLwkJSFAtUk9NQU44Ly8KK2FsaWFzCVI4Ly8JCQlIUC1ST01BTjgvLworYWxpYXMJQ1NIUFJPTUFOOC8vCQlIUC1ST01BTjgvLworYWxpYXMJT1NGMTAwMTAwMDEvLwkJSFAtUk9NQU44Ly8KK2FsaWFzCUhQUk9NQU44Ly8JCUhQLVJPTUFOOC8vCittb2R1bGUJSFAtUk9NQU44Ly8JCUlOVEVSTkFMCQlIUC1ST01BTjgJMQorbW9kdWxlCUlOVEVSTkFMCQlIUC1ST01BTjgvLwkJSFAtUk9NQU44CTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUNTRUJDRElDQVRERS8vCQlFQkNESUMtQVQtREUvLworYWxpYXMJRUJDRElDQVRERS8vCQlFQkNESUMtQVQtREUvLworbW9kdWxlCUVCQ0RJQy1BVC1ERS8vCQlJTlRFUk5BTAkJRUJDRElDLUFULURFCTEKK21vZHVsZQlJTlRFUk5BTAkJRUJDRElDLUFULURFLy8JCUVCQ0RJQy1BVC1ERQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlDU0VCQ0RJQ0FUREVBLy8JCUVCQ0RJQy1BVC1ERS1BLy8KK2FsaWFzCUVCQ0RJQ0FUREVBLy8JCUVCQ0RJQy1BVC1ERS1BLy8KK21vZHVsZQlFQkNESUMtQVQtREUtQS8vCUlOVEVSTkFMCQlFQkNESUMtQVQtREUtQQkxCittb2R1bGUJSU5URVJOQUwJCUVCQ0RJQy1BVC1ERS1BLy8JRUJDRElDLUFULURFLUEJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJQ1NFQkNESUNDQUZSLy8JCUVCQ0RJQy1DQS1GUi8vCithbGlhcwlFQkNESUNDQUZSLy8JCUVCQ0RJQy1DQS1GUi8vCittb2R1bGUJRUJDRElDLUNBLUZSLy8JCUlOVEVSTkFMCQlFQkNESUMtQ0EtRlIJMQorbW9kdWxlCUlOVEVSTkFMCQlFQkNESUMtQ0EtRlIvLwkJRUJDRElDLUNBLUZSCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUNTRUJDRElDREtOTy8vCQlFQkNESUMtREstTk8vLworYWxpYXMJRUJDRElDREtOTy8vCQlFQkNESUMtREstTk8vLworbW9kdWxlCUVCQ0RJQy1ESy1OTy8vCQlJTlRFUk5BTAkJRUJDRElDLURLLU5PCTEKK21vZHVsZQlJTlRFUk5BTAkJRUJDRElDLURLLU5PLy8JCUVCQ0RJQy1ESy1OTwkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlDU0VCQ0RJQ0RLTk9BLy8JCUVCQ0RJQy1ESy1OTy1BLy8KK2FsaWFzCUVCQ0RJQ0RLTk9BLy8JCUVCQ0RJQy1ESy1OTy1BLy8KK21vZHVsZQlFQkNESUMtREstTk8tQS8vCUlOVEVSTkFMCQlFQkNESUMtREstTk8tQQkxCittb2R1bGUJSU5URVJOQUwJCUVCQ0RJQy1ESy1OTy1BLy8JRUJDRElDLURLLU5PLUEJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJQ1NFQkNESUNFUy8vCQlFQkNESUMtRVMvLworYWxpYXMJRUJDRElDRVMvLwkJRUJDRElDLUVTLy8KK21vZHVsZQlFQkNESUMtRVMvLwkJSU5URVJOQUwJCUVCQ0RJQy1FUwkxCittb2R1bGUJSU5URVJOQUwJCUVCQ0RJQy1FUy8vCQlFQkNESUMtRVMJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJQ1NFQkNESUNFU0EvLwkJRUJDRElDLUVTLUEvLworYWxpYXMJRUJDRElDRVNBLy8JCUVCQ0RJQy1FUy1BLy8KK21vZHVsZQlFQkNESUMtRVMtQS8vCQlJTlRFUk5BTAkJRUJDRElDLUVTLUEJMQorbW9kdWxlCUlOVEVSTkFMCQlFQkNESUMtRVMtQS8vCQlFQkNESUMtRVMtQQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlDU0VCQ0RJQ0VTUy8vCQlFQkNESUMtRVMtUy8vCithbGlhcwlFQkNESUNFU1MvLwkJRUJDRElDLUVTLVMvLworbW9kdWxlCUVCQ0RJQy1FUy1TLy8JCUlOVEVSTkFMCQlFQkNESUMtRVMtUwkxCittb2R1bGUJSU5URVJOQUwJCUVCQ0RJQy1FUy1TLy8JCUVCQ0RJQy1FUy1TCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUNTRUJDRElDRklTRS8vCQlFQkNESUMtRkktU0UvLworYWxpYXMJRUJDRElDRklTRS8vCQlFQkNESUMtRkktU0UvLworbW9kdWxlCUVCQ0RJQy1GSS1TRS8vCQlJTlRFUk5BTAkJRUJDRElDLUZJLVNFCTEKK21vZHVsZQlJTlRFUk5BTAkJRUJDRElDLUZJLVNFLy8JCUVCQ0RJQy1GSS1TRQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlDU0VCQ0RJQ0ZJU0VBLy8JCUVCQ0RJQy1GSS1TRS1BLy8KK2FsaWFzCUVCQ0RJQ0ZJU0VBLy8JCUVCQ0RJQy1GSS1TRS1BLy8KK21vZHVsZQlFQkNESUMtRkktU0UtQS8vCUlOVEVSTkFMCQlFQkNESUMtRkktU0UtQQkxCittb2R1bGUJSU5URVJOQUwJCUVCQ0RJQy1GSS1TRS1BLy8JRUJDRElDLUZJLVNFLUEJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJQ1NFQkNESUNGUi8vCQlFQkNESUMtRlIvLworYWxpYXMJRUJDRElDRlIvLwkJRUJDRElDLUZSLy8KK21vZHVsZQlFQkNESUMtRlIvLwkJSU5URVJOQUwJCUVCQ0RJQy1GUgkxCittb2R1bGUJSU5URVJOQUwJCUVCQ0RJQy1GUi8vCQlFQkNESUMtRlIJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJRUJDRElDSVNGUklTUy8vCQlFQkNESUMtSVMtRlJJU1MvLworbW9kdWxlCUVCQ0RJQy1JUy1GUklTUy8vCUlOVEVSTkFMCQlFQkNESUMtSVMtRlJJU1MJMQorbW9kdWxlCUlOVEVSTkFMCQlFQkNESUMtSVMtRlJJU1MvLwlFQkNESUMtSVMtRlJJU1MJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJQ1NFQkNESUNJVC8vCQlFQkNESUMtSVQvLworYWxpYXMJRUJDRElDSVQvLwkJRUJDRElDLUlULy8KK21vZHVsZQlFQkNESUMtSVQvLwkJSU5URVJOQUwJCUVCQ0RJQy1JVAkxCittb2R1bGUJSU5URVJOQUwJCUVCQ0RJQy1JVC8vCQlFQkNESUMtSVQJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJQ1NFQkNESUNQVC8vCQlFQkNESUMtUFQvLworYWxpYXMJRUJDRElDUFQvLwkJRUJDRElDLVBULy8KK21vZHVsZQlFQkNESUMtUFQvLwkJSU5URVJOQUwJCUVCQ0RJQy1QVAkxCittb2R1bGUJSU5URVJOQUwJCUVCQ0RJQy1QVC8vCQlFQkNESUMtUFQJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJQ1NFQkNESUNVSy8vCQlFQkNESUMtVUsvLworYWxpYXMJRUJDRElDVUsvLwkJRUJDRElDLVVLLy8KK21vZHVsZQlFQkNESUMtVUsvLwkJSU5URVJOQUwJCUVCQ0RJQy1VSwkxCittb2R1bGUJSU5URVJOQUwJCUVCQ0RJQy1VSy8vCQlFQkNESUMtVUsJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJQ1NFQkNESUNVUy8vCQlFQkNESUMtVVMvLworYWxpYXMJRUJDRElDVVMvLwkJRUJDRElDLVVTLy8KK21vZHVsZQlFQkNESUMtVVMvLwkJSU5URVJOQUwJCUVCQ0RJQy1VUwkxCittb2R1bGUJSU5URVJOQUwJCUVCQ0RJQy1VUy8vCQlFQkNESUMtVVMJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJQ1AwMzcvLwkJCUlCTTAzNy8vCithbGlhcwlFQkNESUMtQ1AtVVMvLwkJSUJNMDM3Ly8KK2FsaWFzCUVCQ0RJQy1DUC1DQS8vCQlJQk0wMzcvLworYWxpYXMJRUJDRElDLUNQLVdULy8JCUlCTTAzNy8vCithbGlhcwlFQkNESUMtQ1AtTkwvLwkJSUJNMDM3Ly8KK2FsaWFzCUNTSUJNMDM3Ly8JCUlCTTAzNy8vCithbGlhcwlPU0YxMDAyMDAyNS8vCQlJQk0wMzcvLworYWxpYXMJQ1AxMDcwLy8JCUlCTTAzNy8vCithbGlhcwlDUDI4Mi8vCQkJSUJNMDM3Ly8KK21vZHVsZQlJQk0wMzcvLwkJSU5URVJOQUwJCUlCTTAzNwkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk0wMzcvLwkJSUJNMDM3CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlFQkNESUMtSU5ULy8JCUlCTTAzOC8vCithbGlhcwlDUDAzOC8vCQkJSUJNMDM4Ly8KK2FsaWFzCUNTSUJNMDM4Ly8JCUlCTTAzOC8vCittb2R1bGUJSUJNMDM4Ly8JCUlOVEVSTkFMCQlJQk0wMzgJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNMDM4Ly8JCUlCTTAzOAkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJRUJDRElDLUlOVDEvLwkJSUJNMjU2Ly8KK21vZHVsZQlJQk0yNTYvLwkJSU5URVJOQUwJCUlCTTI1NgkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk0yNTYvLwkJSUJNMjU2CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlDUDI3My8vCQkJSUJNMjczLy8KK2FsaWFzCUNTSUJNMjczLy8JCUlCTTI3My8vCithbGlhcwlPU0YxMDAyMDExMS8vCQlJQk0yNzMvLworbW9kdWxlCUlCTTI3My8vCQlJTlRFUk5BTAkJSUJNMjczCQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTI3My8vCQlJQk0yNzMJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUVCQ0RJQy1CRS8vCQlJQk0yNzQvLworYWxpYXMJQ1AyNzQvLwkJCUlCTTI3NC8vCithbGlhcwlDU0lCTTI3NC8vCQlJQk0yNzQvLworbW9kdWxlCUlCTTI3NC8vCQlJTlRFUk5BTAkJSUJNMjc0CQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTI3NC8vCQlJQk0yNzQJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUVCQ0RJQy1CUi8vCQlJQk0yNzUvLworYWxpYXMJQ1AyNzUvLwkJCUlCTTI3NS8vCithbGlhcwlDU0lCTTI3NS8vCQlJQk0yNzUvLworbW9kdWxlCUlCTTI3NS8vCQlJTlRFUk5BTAkJSUJNMjc1CQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTI3NS8vCQlJQk0yNzUJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUVCQ0RJQy1DUC1ESy8vCQlJQk0yNzcvLworYWxpYXMJRUJDRElDLUNQLU5PLy8JCUlCTTI3Ny8vCithbGlhcwlDU0lCTTI3Ny8vCQlJQk0yNzcvLworYWxpYXMJT1NGMTAwMjAxMTUvLwkJSUJNMjc3Ly8KK21vZHVsZQlJQk0yNzcvLwkJSU5URVJOQUwJCUlCTTI3NwkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk0yNzcvLwkJSUJNMjc3CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlDUDI3OC8vCQkJSUJNMjc4Ly8KK2FsaWFzCUVCQ0RJQy1DUC1GSS8vCQlJQk0yNzgvLworYWxpYXMJRUJDRElDLUNQLVNFLy8JCUlCTTI3OC8vCithbGlhcwlDU0lCTTI3OC8vCQlJQk0yNzgvLworYWxpYXMJT1NGMTAwMjAxMTYvLwkJSUJNMjc4Ly8KK21vZHVsZQlJQk0yNzgvLwkJSU5URVJOQUwJCUlCTTI3OAkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk0yNzgvLwkJSUJNMjc4CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlDUDI4MC8vCQkJSUJNMjgwLy8KK2FsaWFzCUVCQ0RJQy1DUC1JVC8vCQlJQk0yODAvLworYWxpYXMJQ1NJQk0yODAvLwkJSUJNMjgwLy8KK2FsaWFzCU9TRjEwMDIwMTE4Ly8JCUlCTTI4MC8vCittb2R1bGUJSUJNMjgwLy8JCUlOVEVSTkFMCQlJQk0yODAJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNMjgwLy8JCUlCTTI4MAkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJRUJDRElDLUpQLUUvLwkJSUJNMjgxLy8KK2FsaWFzCUNQMjgxLy8JCQlJQk0yODEvLworYWxpYXMJQ1NJQk0yODEvLwkJSUJNMjgxLy8KK21vZHVsZQlJQk0yODEvLwkJSU5URVJOQUwJCUlCTTI4MQkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk0yODEvLwkJSUJNMjgxCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlDUDI4NC8vCQkJSUJNMjg0Ly8KK2FsaWFzCUVCQ0RJQy1DUC1FUy8vCQlJQk0yODQvLworYWxpYXMJQ1NJQk0yODQvLwkJSUJNMjg0Ly8KK2FsaWFzCU9TRjEwMDIwMTFDLy8JCUlCTTI4NC8vCithbGlhcwlDUDEwNzkvLwkJSUJNMjg0Ly8KK21vZHVsZQlJQk0yODQvLwkJSU5URVJOQUwJCUlCTTI4NAkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk0yODQvLwkJSUJNMjg0CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlDUDI4NS8vCQkJSUJNMjg1Ly8KK2FsaWFzCUVCQ0RJQy1DUC1HQi8vCQlJQk0yODUvLworYWxpYXMJQ1NJQk0yODUvLwkJSUJNMjg1Ly8KK2FsaWFzCU9TRjEwMDIwMTFELy8JCUlCTTI4NS8vCittb2R1bGUJSUJNMjg1Ly8JCUlOVEVSTkFMCQlJQk0yODUJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNMjg1Ly8JCUlCTTI4NQkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJQ1AyOTAvLwkJCUlCTTI5MC8vCithbGlhcwlFQkNESUMtSlAtS0FOQS8vCUlCTTI5MC8vCithbGlhcwlDU0lCTTI5MC8vCQlJQk0yOTAvLworYWxpYXMJT1NGMTAwMjAxMjIvLwkJSUJNMjkwLy8KK21vZHVsZQlJQk0yOTAvLwkJSU5URVJOQUwJCUlCTTI5MAkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk0yOTAvLwkJSUJNMjkwCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlDUDI5Ny8vCQkJSUJNMjk3Ly8KK2FsaWFzCUVCQ0RJQy1DUC1GUi8vCQlJQk0yOTcvLworYWxpYXMJQ1NJQk0yOTcvLwkJSUJNMjk3Ly8KK2FsaWFzCU9TRjEwMDIwMTI5Ly8JCUlCTTI5Ny8vCithbGlhcwlDUDEwODEvLwkJSUJNMjk3Ly8KK21vZHVsZQlJQk0yOTcvLwkJSU5URVJOQUwJCUlCTTI5NwkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk0yOTcvLwkJSUJNMjk3CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlDUDQyMC8vCQkJSUJNNDIwLy8KK2FsaWFzCUVCQ0RJQy1DUC1BUjEvLwkJSUJNNDIwLy8KK2FsaWFzCUNTSUJNNDIwLy8JCUlCTTQyMC8vCithbGlhcwlPU0YxMDAyMDFBNC8vCQlJQk00MjAvLworbW9kdWxlCUlCTTQyMC8vCQlJTlRFUk5BTAkJSUJNNDIwCQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTQyMC8vCQlJQk00MjAJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUNQNDIzLy8JCQlJQk00MjMvLworYWxpYXMJRUJDRElDLUNQLUdSLy8JCUlCTTQyMy8vCithbGlhcwlDU0lCTTQyMy8vCQlJQk00MjMvLworbW9kdWxlCUlCTTQyMy8vCQlJTlRFUk5BTAkJSUJNNDIzCQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTQyMy8vCQlJQk00MjMJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUNQNDI0Ly8JCQlJQk00MjQvLworYWxpYXMJRUJDRElDLUNQLUhFLy8JCUlCTTQyNC8vCithbGlhcwlDU0lCTTQyNC8vCQlJQk00MjQvLworYWxpYXMJT1NGMTAwMjAxQTgvLwkJSUJNNDI0Ly8KK21vZHVsZQlJQk00MjQvLwkJSU5URVJOQUwJCUlCTTQyNAkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk00MjQvLwkJSUJNNDI0CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlDUDQzNy8vCQkJSUJNNDM3Ly8KK2FsaWFzCTQzNy8vCQkJSUJNNDM3Ly8KK2FsaWFzCUNTUEM4Q09ERVBBR0U0MzcvLwlJQk00MzcvLworYWxpYXMJT1NGMTAwMjAxQjUvLwkJSUJNNDM3Ly8KK21vZHVsZQlJQk00MzcvLwkJSU5URVJOQUwJCUlCTTQzNwkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk00MzcvLwkJSUJNNDM3CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlDUDUwMC8vCQkJSUJNNTAwLy8KK2FsaWFzCTUwMC8vCQkJSUJNNTAwLy8KK2FsaWFzCTUwMFYxLy8JCQlJQk01MDAvLworYWxpYXMJRUJDRElDLUNQLUJFLy8JCUlCTTUwMC8vCithbGlhcwlFQkNESUMtQ1AtQ0gvLwkJSUJNNTAwLy8KK2FsaWFzCUNTSUJNNTAwLy8JCUlCTTUwMC8vCithbGlhcwlPU0YxMDAyMDFGNC8vCQlJQk01MDAvLworYWxpYXMJQ1AxMDg0Ly8JCUlCTTUwMC8vCittb2R1bGUJSUJNNTAwLy8JCUlOVEVSTkFMCQlJQk01MDAJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNNTAwLy8JCUlCTTUwMAkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJQ1A4NTAvLwkJCUlCTTg1MC8vCithbGlhcwk4NTAvLwkJCUlCTTg1MC8vCithbGlhcwlDU1BDODUwTVVMVElMSU5HVUFMLy8JSUJNODUwLy8KK2FsaWFzCU9TRjEwMDIwMzUyLy8JCUlCTTg1MC8vCittb2R1bGUJSUJNODUwLy8JCUlOVEVSTkFMCQlJQk04NTAJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNODUwLy8JCUlCTTg1MAkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJQ1A4NTEvLwkJCUlCTTg1MS8vCithbGlhcwk4NTEvLwkJCUlCTTg1MS8vCithbGlhcwlDU0lCTTg1MS8vCQlJQk04NTEvLworbW9kdWxlCUlCTTg1MS8vCQlJTlRFUk5BTAkJSUJNODUxCQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTg1MS8vCQlJQk04NTEJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUNQODUyLy8JCQlJQk04NTIvLworYWxpYXMJODUyLy8JCQlJQk04NTIvLworYWxpYXMJQ1NQQ1A4NTIvLwkJSUJNODUyLy8KK2FsaWFzCU9TRjEwMDIwMzU0Ly8JCUlCTTg1Mi8vCittb2R1bGUJSUJNODUyLy8JCUlOVEVSTkFMCQlJQk04NTIJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNODUyLy8JCUlCTTg1MgkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJQ1A4NTUvLwkJCUlCTTg1NS8vCithbGlhcwk4NTUvLwkJCUlCTTg1NS8vCithbGlhcwlDU0lCTTg1NS8vCQlJQk04NTUvLworYWxpYXMJT1NGMTAwMjAzNTcvLwkJSUJNODU1Ly8KK21vZHVsZQlJQk04NTUvLwkJSU5URVJOQUwJCUlCTTg1NQkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk04NTUvLwkJSUJNODU1CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJQk0tODU2Ly8JCUlCTTg1Ni8vCithbGlhcwlDUDg1Ni8vCQkJSUJNODU2Ly8KK2FsaWFzCTg1Ni8vCQkJSUJNODU2Ly8KK2FsaWFzCUNTSUJNODU2Ly8JCUlCTTg1Ni8vCittb2R1bGUJSUJNODU2Ly8JCUlOVEVSTkFMCQlJQk04NTYJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNODU2Ly8JCUlCTTg1NgkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJQ1A4NTcvLwkJCUlCTTg1Ny8vCithbGlhcwk4NTcvLwkJCUlCTTg1Ny8vCithbGlhcwlDU0lCTTg1Ny8vCQlJQk04NTcvLworYWxpYXMJT1NGMTAwMjAzNTkvLwkJSUJNODU3Ly8KK21vZHVsZQlJQk04NTcvLwkJSU5URVJOQUwJCUlCTTg1NwkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk04NTcvLwkJSUJNODU3CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlDUDg2MC8vCQkJSUJNODYwLy8KK2FsaWFzCTg2MC8vCQkJSUJNODYwLy8KK2FsaWFzCUNTSUJNODYwLy8JCUlCTTg2MC8vCittb2R1bGUJSUJNODYwLy8JCUlOVEVSTkFMCQlJQk04NjAJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNODYwLy8JCUlCTTg2MAkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJQ1A4NjEvLwkJCUlCTTg2MS8vCithbGlhcwk4NjEvLwkJCUlCTTg2MS8vCithbGlhcwlDUElCTTg2MS8vCQlJQk04NjEvLworYWxpYXMJT1NGMTAwMjAzNUQvLwkJSUJNODYxLy8KK21vZHVsZQlJQk04NjEvLwkJSU5URVJOQUwJCUlCTTg2MQkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk04NjEvLwkJSUJNODYxCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlDUDg2Mi8vCQkJSUJNODYyLy8KK2FsaWFzCTg2Mi8vCQkJSUJNODYyLy8KK2FsaWFzCUNTUEM4NjJMQVRJTkhFQlJFVy8vCUlCTTg2Mi8vCithbGlhcwlPU0YxMDAyMDM1RS8vCQlJQk04NjIvLworbW9kdWxlCUlCTTg2Mi8vCQlJTlRFUk5BTAkJSUJNODYyCQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTg2Mi8vCQlJQk04NjIJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUNQODYzLy8JCQlJQk04NjMvLworYWxpYXMJODYzLy8JCQlJQk04NjMvLworYWxpYXMJQ1NJQk04NjMvLwkJSUJNODYzLy8KK2FsaWFzCU9TRjEwMDIwMzVGLy8JCUlCTTg2My8vCittb2R1bGUJSUJNODYzLy8JCUlOVEVSTkFMCQlJQk04NjMJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNODYzLy8JCUlCTTg2MwkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJQ1A4NjQvLwkJCUlCTTg2NC8vCithbGlhcwk4NjQvLwkJCUlCTTg2NC8vCithbGlhcwlDU0lCTTg2NC8vCQlJQk04NjQvLworYWxpYXMJT1NGMTAwMjAzNjAvLwkJSUJNODY0Ly8KK21vZHVsZQlJQk04NjQvLwkJSU5URVJOQUwJCUlCTTg2NAkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk04NjQvLwkJSUJNODY0CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlDUDg2NS8vCQkJSUJNODY1Ly8KK2FsaWFzCTg2NS8vCQkJSUJNODY1Ly8KK2FsaWFzCUNTSUJNODY1Ly8JCUlCTTg2NS8vCittb2R1bGUJSUJNODY1Ly8JCUlOVEVSTkFMCQlJQk04NjUJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNODY1Ly8JCUlCTTg2NQkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJQ1A4NjYvLwkJCUlCTTg2Ni8vCithbGlhcwk4NjYvLwkJCUlCTTg2Ni8vCithbGlhcwlDU0lCTTg2Ni8vCQlJQk04NjYvLworbW9kdWxlCUlCTTg2Ni8vCQlJTlRFUk5BTAkJSUJNODY2CQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTg2Ni8vCQlJQk04NjYJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUNQODY2TkFWLy8JCUlCTTg2Nk5BVi8vCithbGlhcwk4NjZOQVYvLwkJSUJNODY2TkFWLy8KK21vZHVsZQlJQk04NjZOQVYvLwkJSU5URVJOQUwJCUlCTTg2Nk5BVgkxCittb2R1bGUJSU5URVJOQUwJCUlCTTg2Nk5BVi8vCQlJQk04NjZOQVYJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJQ1A4NjgvLwkJCUlCTTg2OC8vCithbGlhcwlDUC1BUi8vCQkJSUJNODY4Ly8KK2FsaWFzCUNTSUJNODY4Ly8JCUlCTTg2OC8vCithbGlhcwlPU0YxMDAyMDM2NC8vCQlJQk04NjgvLworbW9kdWxlCUlCTTg2OC8vCQlJTlRFUk5BTAkJSUJNODY4CQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTg2OC8vCQlJQk04NjgJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUNQODY5Ly8JCQlJQk04NjkvLworYWxpYXMJODY5Ly8JCQlJQk04NjkvLworYWxpYXMJQ1AtR1IvLwkJCUlCTTg2OS8vCithbGlhcwlDU0lCTTg2OS8vCQlJQk04NjkvLworYWxpYXMJT1NGMTAwMjAzNjUvLwkJSUJNODY5Ly8KK21vZHVsZQlJQk04NjkvLwkJSU5URVJOQUwJCUlCTTg2OQkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk04NjkvLwkJSUJNODY5CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlDUDg3MC8vCQkJSUJNODcwLy8KK2FsaWFzCUVCQ0RJQy1DUC1ST0VDRS8vCUlCTTg3MC8vCithbGlhcwlFQkNESUMtQ1AtWVUvLwkJSUJNODcwLy8KK2FsaWFzCUNTSUJNODcwLy8JCUlCTTg3MC8vCithbGlhcwlPU0YxMDAyMDM2Ni8vCQlJQk04NzAvLworbW9kdWxlCUlCTTg3MC8vCQlJTlRFUk5BTAkJSUJNODcwCQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTg3MC8vCQlJQk04NzAJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUNQODcxLy8JCQlJQk04NzEvLworYWxpYXMJRUJDRElDLUNQLUlTLy8JCUlCTTg3MS8vCithbGlhcwlDU0lCTTg3MS8vCQlJQk04NzEvLworYWxpYXMJT1NGMTAwMjAzNjcvLwkJSUJNODcxLy8KK21vZHVsZQlJQk04NzEvLwkJSU5URVJOQUwJCUlCTTg3MQkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk04NzEvLwkJSUJNODcxCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlDUDg3NS8vCQkJSUJNODc1Ly8KK2FsaWFzCUVCQ0RJQy1HUkVFSy8vCQlJQk04NzUvLworYWxpYXMJT1NGMTAwMjAzNkIvLwkJSUJNODc1Ly8KK21vZHVsZQlJQk04NzUvLwkJSU5URVJOQUwJCUlCTTg3NQkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk04NzUvLwkJSUJNODc1CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlDUDg4MC8vCQkJSUJNODgwLy8KK2FsaWFzCUVCQ0RJQy1DWVJJTExJQy8vCUlCTTg4MC8vCithbGlhcwlDU0lCTTg4MC8vCQlJQk04ODAvLworYWxpYXMJT1NGMTAwMjAzNzAvLwkJSUJNODgwLy8KK21vZHVsZQlJQk04ODAvLwkJSU5URVJOQUwJCUlCTTg4MAkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk04ODAvLwkJSUJNODgwCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlDUDg5MS8vCQkJSUJNODkxLy8KK2FsaWFzCUNTSUJNODkxLy8JCUlCTTg5MS8vCithbGlhcwlPU0YxMDAyMDM3Qi8vCQlJQk04OTEvLworbW9kdWxlCUlCTTg5MS8vCQlJTlRFUk5BTAkJSUJNODkxCQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTg5MS8vCQlJQk04OTEJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUNQOTAzLy8JCQlJQk05MDMvLworYWxpYXMJQ1NJQk05MDMvLwkJSUJNOTAzLy8KK2FsaWFzCU9TRjEwMDIwMzg3Ly8JCUlCTTkwMy8vCittb2R1bGUJSUJNOTAzLy8JCUlOVEVSTkFMCQlJQk05MDMJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNOTAzLy8JCUlCTTkwMwkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJQ1A5MDQvLwkJCUlCTTkwNC8vCithbGlhcwk5MDQvLwkJCUlCTTkwNC8vCithbGlhcwlDU0lCTTkwNC8vCQlJQk05MDQvLworYWxpYXMJT1NGMTAwMjAzODgvLwkJSUJNOTA0Ly8KK21vZHVsZQlJQk05MDQvLwkJSU5URVJOQUwJCUlCTTkwNAkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk05MDQvLwkJSUJNOTA0CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlDUDkwNS8vCQkJSUJNOTA1Ly8KK2FsaWFzCUVCQ0RJQy1DUC1UUi8vCQlJQk05MDUvLworYWxpYXMJQ1NJQk05MDUvLwkJSUJNOTA1Ly8KK21vZHVsZQlJQk05MDUvLwkJSU5URVJOQUwJCUlCTTkwNQkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk05MDUvLwkJSUJNOTA1CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlDUDkxOC8vCQkJSUJNOTE4Ly8KK2FsaWFzCUVCQ0RJQy1DUC1BUjIvLwkJSUJNOTE4Ly8KK2FsaWFzCUNTSUJNOTE4Ly8JCUlCTTkxOC8vCithbGlhcwlPU0YxMDAyMDM5Ni8vCQlJQk05MTgvLworbW9kdWxlCUlCTTkxOC8vCQlJTlRFUk5BTAkJSUJNOTE4CQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTkxOC8vCQlJQk05MTgJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlCTS05MjIvLwkJSUJNOTIyLy8KK2FsaWFzCUNQOTIyLy8JCQlJQk05MjIvLworYWxpYXMJQ1NJQk05MjIvLwkJSUJNOTIyLy8KK21vZHVsZQlJQk05MjIvLwkJSU5URVJOQUwJCUlCTTkyMgkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk05MjIvLwkJSUJNOTIyCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJQk0tOTMwLy8JCUlCTTkzMC8vCithbGlhcwlDUDkzMC8vCQkJSUJNOTMwLy8KK2FsaWFzCUVCQ0RJQy1DUC1BUjIvLwkJSUJNOTMwLy8KK2FsaWFzCUNTSUJNOTMwLy8JCUlCTTkzMC8vCittb2R1bGUJSUJNOTMwLy8JCUlOVEVSTkFMCQlJQk05MzAJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNOTMwLy8JCUlCTTkzMAkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSUJNLTkzMi8vCQlJQk05MzIvLworYWxpYXMJQ1NJQk05MzIvLwkJSUJNOTMyLy8KK21vZHVsZQlJQk05MzIvLwkJSU5URVJOQUwJCUlCTTkzMgkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk05MzIvLwkJSUJNOTMyCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJQk0tOTMzLy8JCUlCTTkzMy8vCithbGlhcwlDUDkzMy8vCQkJSUJNOTMzLy8KK2FsaWFzCUVCQ0RJQy1DUC1BUjIvLwkJSUJNOTMzLy8KK2FsaWFzCUNTSUJNOTMzLy8JCUlCTTkzMy8vCittb2R1bGUJSUJNOTMzLy8JCUlOVEVSTkFMCQlJQk05MzMJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNOTMzLy8JCUlCTTkzMwkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSUJNLTkzNS8vCQlJQk05MzUvLworYWxpYXMJQ1A5MzUvLwkJCUlCTTkzNS8vCithbGlhcwlFQkNESUMtQ1AtQVIyLy8JCUlCTTkzNS8vCithbGlhcwlDU0lCTTkzNS8vCQlJQk05MzUvLworbW9kdWxlCUlCTTkzNS8vCQlJTlRFUk5BTAkJSUJNOTM1CQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTkzNS8vCQlJQk05MzUJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlCTS05MzcvLwkJSUJNOTM3Ly8KK2FsaWFzCUNQOTM3Ly8JCQlJQk05MzcvLworYWxpYXMJRUJDRElDLUNQLUFSMi8vCQlJQk05MzcvLworYWxpYXMJQ1NJQk05MzcvLwkJSUJNOTM3Ly8KK21vZHVsZQlJQk05MzcvLwkJSU5URVJOQUwJCUlCTTkzNwkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk05MzcvLwkJSUJNOTM3CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJQk0tOTM5Ly8JCUlCTTkzOS8vCithbGlhcwlDUDkzOS8vCQkJSUJNOTM5Ly8KK2FsaWFzCUVCQ0RJQy1DUC1BUjIvLwkJSUJNOTM5Ly8KK2FsaWFzCUNTSUJNOTM5Ly8JCUlCTTkzOS8vCittb2R1bGUJSUJNOTM5Ly8JCUlOVEVSTkFMCQlJQk05MzkJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNOTM5Ly8JCUlCTTkzOQkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSUJNLTk0My8vCQlJQk05NDMvLworYWxpYXMJQ1NJQk05NDMvLwkJSUJNOTQzLy8KK21vZHVsZQlJQk05NDMvLwkJSU5URVJOQUwJCUlCTTk0MwkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk05NDMvLwkJSUJNOTQzCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlDUDEwMDQvLwkJSUJNMTAwNC8vCithbGlhcwlPUzJMQVRJTjEvLwkJSUJNMTAwNC8vCittb2R1bGUJSUJNMTAwNC8vCQlJTlRFUk5BTAkJSUJNMTAwNAkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk0xMDA0Ly8JCUlCTTEwMDQJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUNQMTAyNi8vCQlJQk0xMDI2Ly8KK2FsaWFzCTEwMjYvLwkJCUlCTTEwMjYvLworYWxpYXMJQ1NJQk0xMDI2Ly8JCUlCTTEwMjYvLworYWxpYXMJT1NGMTAwMjA0MDIvLwkJSUJNMTAyNi8vCittb2R1bGUJSUJNMTAyNi8vCQlJTlRFUk5BTAkJSUJNMTAyNgkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk0xMDI2Ly8JCUlCTTEwMjYJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlCTS0xMDQ2Ly8JCUlCTTEwNDYvLworYWxpYXMJQ1AxMDQ2Ly8JCUlCTTEwNDYvLworYWxpYXMJMTA0Ni8vCQkJSUJNMTA0Ni8vCittb2R1bGUJSUJNMTA0Ni8vCQlJTlRFUk5BTAkJSUJNMTA0NgkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk0xMDQ2Ly8JCUlCTTEwNDYJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlCTS0xMDQ3Ly8JCUlCTTEwNDcvLworYWxpYXMJQ1AxMDQ3Ly8JCUlCTTEwNDcvLworYWxpYXMJMTA0Ny8vCQkJSUJNMTA0Ny8vCithbGlhcwlPU0YxMDAyMDQxNy8vCQlJQk0xMDQ3Ly8KK21vZHVsZQlJQk0xMDQ3Ly8JCUlOVEVSTkFMCQlJQk0xMDQ3CQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTEwNDcvLwkJSUJNMTA0NwkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSUJNLTExMjQvLwkJSUJNMTEyNC8vCithbGlhcwlDUDExMjQvLwkJSUJNMTEyNC8vCithbGlhcwlDU0lCTTExMjQvLwkJSUJNMTEyNC8vCittb2R1bGUJSUJNMTEyNC8vCQlJTlRFUk5BTAkJSUJNMTEyNAkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk0xMTI0Ly8JCUlCTTExMjQJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlCTS0xMTI5Ly8JCUlCTTExMjkvLworYWxpYXMJQ1AxMTI5Ly8JCUlCTTExMjkvLworYWxpYXMJQ1NJQk0xMTI5Ly8JCUlCTTExMjkvLworbW9kdWxlCUlCTTExMjkvLwkJSU5URVJOQUwJCUlCTTExMjkJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNMTEyOS8vCQlJQk0xMTI5CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJQk0tMTE2MC8vCQlJQk0xMTYwLy8KK2FsaWFzCUNQMTE2MC8vCQlJQk0xMTYwLy8KK2FsaWFzCUNTSUJNMTE2MC8vCQlJQk0xMTYwLy8KK21vZHVsZQlJQk0xMTYwLy8JCUlOVEVSTkFMCQlJQk0xMTYwCQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTExNjAvLwkJSUJNMTE2MAkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSUJNLTExNjEvLwkJSUJNMTE2MS8vCithbGlhcwlDUDExNjEvLwkJSUJNMTE2MS8vCithbGlhcwlDU0lCTTExNjEvLwkJSUJNMTE2MS8vCittb2R1bGUJSUJNMTE2MS8vCQlJTlRFUk5BTAkJSUJNMTE2MQkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk0xMTYxLy8JCUlCTTExNjEJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlCTS0xMTMyLy8JCUlCTTExMzIvLworYWxpYXMJQ1AxMTMyLy8JCUlCTTExMzIvLworYWxpYXMJQ1NJQk0xMTMyLy8JCUlCTTExMzIvLworbW9kdWxlCUlCTTExMzIvLwkJSU5URVJOQUwJCUlCTTExMzIJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNMTEzMi8vCQlJQk0xMTMyCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJQk0tMTEzMy8vCQlJQk0xMTMzLy8KK2FsaWFzCUNQMTEzMy8vCQlJQk0xMTMzLy8KK2FsaWFzCUNTSUJNMTEzMy8vCQlJQk0xMTMzLy8KK21vZHVsZQlJQk0xMTMzLy8JCUlOVEVSTkFMCQlJQk0xMTMzCQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTExMzMvLwkJSUJNMTEzMwkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSUJNLTExNjIvLwkJSUJNMTE2Mi8vCithbGlhcwlDUDExNjIvLwkJSUJNMTE2Mi8vCithbGlhcwlDU0lCTTExNjIxMTYyLy8JCUlCTTExNjIvLworbW9kdWxlCUlCTTExNjIvLwkJSU5URVJOQUwJCUlCTTExNjIJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNMTE2Mi8vCQlJQk0xMTYyCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJQk0tMTE2My8vCQlJQk0xMTYzLy8KK2FsaWFzCUNQMTE2My8vCQlJQk0xMTYzLy8KK2FsaWFzCUNTSUJNMTE2My8vCQlJQk0xMTYzLy8KK21vZHVsZQlJQk0xMTYzLy8JCUlOVEVSTkFMCQlJQk0xMTYzCQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTExNjMvLwkJSUJNMTE2MwkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSUJNLTExNjQvLwkJSUJNMTE2NC8vCithbGlhcwlDUDExNjQvLwkJSUJNMTE2NC8vCithbGlhcwlDU0lCTTExNjQvLwkJSUJNMTE2NC8vCittb2R1bGUJSUJNMTE2NC8vCQlJTlRFUk5BTAkJSUJNMTE2NAkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk0xMTY0Ly8JCUlCTTExNjQJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUVVQ0tSLy8JCQlFVUMtS1IvLworYWxpYXMJQ1NFVUNLUi8vCQlFVUMtS1IvLworYWxpYXMJT1NGMDAwNDAwMGEvLwkJRVVDLUtSLy8KK21vZHVsZQlFVUMtS1IvLwkJSU5URVJOQUwJCUVVQy1LUgkJMQorbW9kdWxlCUlOVEVSTkFMCQlFVUMtS1IvLwkJRVVDLUtSCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlNU0NQOTQ5Ly8JCVVIQy8vCithbGlhcwlDUDk0OS8vCQkJVUhDLy8KK2FsaWFzCU9TRjEwMDIwM0I1Ly8JCVVIQy8vCittb2R1bGUJVUhDLy8JCQlJTlRFUk5BTAkJVUhDCQkxCittb2R1bGUJSU5URVJOQUwJCVVIQy8vCQkJVUhDCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlNU0NQMTM2MS8vCQlKT0hBQi8vCithbGlhcwlDUDEzNjEvLwkJSk9IQUIvLworbW9kdWxlCUpPSEFCLy8JCQlJTlRFUk5BTAkJSk9IQUIJCTEKK21vZHVsZQlJTlRFUk5BTAkJSk9IQUIvLwkJCUpPSEFCCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlCSUctRklWRS8vCQlCSUc1Ly8KK2FsaWFzCUJJR0ZJVkUvLwkJQklHNS8vCithbGlhcwlCSUctNS8vCQkJQklHNS8vCithbGlhcwlDTi1CSUc1Ly8JCUJJRzUvLworYWxpYXMJQ1A5NTAvLwkJCUJJRzUvLworbW9kdWxlCUJJRzUvLwkJCUlOVEVSTkFMCQlCSUc1CQkxCittb2R1bGUJSU5URVJOQUwJCUJJRzUvLwkJCUJJRzUJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUJJRzUtSEtTQ1MvLwkJQklHNUhLU0NTLy8KK21vZHVsZQlCSUc1SEtTQ1MvLwkJSU5URVJOQUwJCUJJRzVIS1NDUwkxCittb2R1bGUJSU5URVJOQUwJCUJJRzVIS1NDUy8vCQlCSUc1SEtTQ1MJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJRVVDSlAtTVMvLwkJRVVDLUpQLU1TLy8KK2FsaWFzCUVVQ0pQLU9QRU4vLwkJRVVDLUpQLU1TLy8KK2FsaWFzCUVVQ0pQLVdJTi8vCQlFVUMtSlAtTVMvLworbW9kdWxlCUVVQy1KUC1NUy8vCQlJTlRFUk5BTAkJRVVDLUpQLU1TCTEKK21vZHVsZQlJTlRFUk5BTAkJRVVDLUpQLU1TLy8JCUVVQy1KUC1NUwkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlFVUNKUC8vCQkJRVVDLUpQLy8KK2FsaWFzCUNTRVVDUEtERk1USkFQQU5FU0UvLwlFVUMtSlAvLworYWxpYXMJT1NGMDAwMzAwMTAvLwkJRVVDLUpQLy8KK2FsaWFzCVVKSVMvLwkJCUVVQy1KUC8vCittb2R1bGUJRVVDLUpQLy8JCUlOVEVSTkFMCQlFVUMtSlAJCTEKK21vZHVsZQlJTlRFUk5BTAkJRVVDLUpQLy8JCUVVQy1KUAkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJRVVDQ04vLwkJCUVVQy1DTi8vCithbGlhcwlHQjIzMTIvLwkJRVVDLUNOLy8KK2FsaWFzCWNzR0IyMzEyLy8JCUVVQy1DTi8vCithbGlhcwlDTi1HQi8vCQkJRVVDLUNOLy8KK21vZHVsZQlFVUMtQ04vLwkJSU5URVJOQUwJCUVVQy1DTgkJMQorbW9kdWxlCUlOVEVSTkFMCQlFVUMtQ04vLwkJRVVDLUNOCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0Cittb2R1bGUJRVVDLUNOLy8JCUJJRzUvLwkJCUdCQklHNQkJMQorbW9kdWxlCUJJRzUvLwkJCUVVQy1DTi8vCQlHQkJJRzUJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUdCMTMwMDAvLwkJR0JLLy8KK2FsaWFzCUNQOTM2Ly8JCQlHQksvLworYWxpYXMJTVM5MzYvLwkJCUdCSy8vCithbGlhcwlXSU5ET1dTLTkzNi8vCQlHQksvLworbW9kdWxlCUdCSy8vCQkJSU5URVJOQUwJCUdCSwkJMQorbW9kdWxlCUlOVEVSTkFMCQlHQksvLwkJCUdCSwkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorbW9kdWxlCUdCSy8vCQkJRVVDLUNOLy8JCUdCR0JLCQkxCittb2R1bGUJRVVDLUNOLy8JCUdCSy8vCQkJR0JHQksJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUVVQ1RXLy8JCQlFVUMtVFcvLworYWxpYXMJT1NGMDAwNTAwMGEvLwkJRVVDLVRXLy8KK21vZHVsZQlFVUMtVFcvLwkJSU5URVJOQUwJCUVVQy1UVwkJMQorbW9kdWxlCUlOVEVSTkFMCQlFVUMtVFcvLwkJRVVDLVRXCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlSVVNDSUkvLwkJQ1AxMTI1Ly8KK2FsaWFzCUlCTTg0OC8vCQlDUDExMjUvLworbW9kdWxlCUNQMTEyNS8vCQlJTlRFUk5BTAkJQ1AxMTI1CQkxCittb2R1bGUJSU5URVJOQUwJCUNQMTEyNS8vCQlDUDExMjUJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCU1TLUVFLy8JCQlDUDEyNTAvLworYWxpYXMJV0lORE9XUy0xMjUwLy8JCUNQMTI1MC8vCittb2R1bGUJQ1AxMjUwLy8JCUlOVEVSTkFMCQlDUDEyNTAJCTEKK21vZHVsZQlJTlRFUk5BTAkJQ1AxMjUwLy8JCUNQMTI1MAkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJTVMtQ1lSTC8vCQlDUDEyNTEvLworYWxpYXMJV0lORE9XUy0xMjUxLy8JCUNQMTI1MS8vCittb2R1bGUJQ1AxMjUxLy8JCUlOVEVSTkFMCQlDUDEyNTEJCTEKK21vZHVsZQlJTlRFUk5BTAkJQ1AxMjUxLy8JCUNQMTI1MQkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJTVMtQU5TSS8vCQlDUDEyNTIvLworYWxpYXMJV0lORE9XUy0xMjUyLy8JCUNQMTI1Mi8vCittb2R1bGUJQ1AxMjUyLy8JCUlOVEVSTkFMCQlDUDEyNTIJCTEKK21vZHVsZQlJTlRFUk5BTAkJQ1AxMjUyLy8JCUNQMTI1MgkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJTVMtR1JFRUsvLwkJQ1AxMjUzLy8KK2FsaWFzCVdJTkRPV1MtMTI1My8vCQlDUDEyNTMvLworbW9kdWxlCUNQMTI1My8vCQlJTlRFUk5BTAkJQ1AxMjUzCQkxCittb2R1bGUJSU5URVJOQUwJCUNQMTI1My8vCQlDUDEyNTMJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCU1TLVRVUksvLwkJQ1AxMjU0Ly8KK2FsaWFzCVdJTkRPV1MtMTI1NC8vCQlDUDEyNTQvLworbW9kdWxlCUNQMTI1NC8vCQlJTlRFUk5BTAkJQ1AxMjU0CQkxCittb2R1bGUJSU5URVJOQUwJCUNQMTI1NC8vCQlDUDEyNTQJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCU1TLUhFQlIvLwkJQ1AxMjU1Ly8KK2FsaWFzCVdJTkRPV1MtMTI1NS8vCQlDUDEyNTUvLworbW9kdWxlCUNQMTI1NS8vCQlJTlRFUk5BTAkJQ1AxMjU1CQkxCittb2R1bGUJSU5URVJOQUwJCUNQMTI1NS8vCQlDUDEyNTUJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCU1TLUFSQUIvLwkJQ1AxMjU2Ly8KK2FsaWFzCVdJTkRPV1MtMTI1Ni8vCQlDUDEyNTYvLworbW9kdWxlCUNQMTI1Ni8vCQlJTlRFUk5BTAkJQ1AxMjU2CQkxCittb2R1bGUJSU5URVJOQUwJCUNQMTI1Ni8vCQlDUDEyNTYJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCVdJTkJBTFRSSU0vLwkJQ1AxMjU3Ly8KK2FsaWFzCVdJTkRPV1MtMTI1Ny8vCQlDUDEyNTcvLworbW9kdWxlCUNQMTI1Ny8vCQlJTlRFUk5BTAkJQ1AxMjU3CQkxCittb2R1bGUJSU5URVJOQUwJCUNQMTI1Ny8vCQlDUDEyNTcJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCVdJTkRPV1MtMTI1OC8vCQlDUDEyNTgvLworbW9kdWxlCUNQMTI1OC8vCQlJTlRFUk5BTAkJQ1AxMjU4CQkxCittb2R1bGUJSU5URVJOQUwJCUNQMTI1OC8vCQlDUDEyNTgJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCTg3NC8vCQkJSUJNODc0Ly8KK2FsaWFzCUNQODc0Ly8JCQlJQk04NzQvLworYWxpYXMJV0lORE9XUy04NzQvLwkJSUJNODc0Ly8KK21vZHVsZQlJQk04NzQvLwkJSU5URVJOQUwJCUlCTTg3NAkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk04NzQvLwkJSUJNODc0CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0Cittb2R1bGUJQ1A3MzcvLwkJCUlOVEVSTkFMCQlDUDczNwkJMQorbW9kdWxlCUlOVEVSTkFMCQlDUDczNy8vCQkJQ1A3MzcJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlCTTc3NS8vCQlDUDc3NS8vCithbGlhcwlDU1BDNzc1QkFMVElDLy8JCUNQNzc1Ly8KK21vZHVsZQlDUDc3NS8vCQkJSU5URVJOQUwJCUNQNzc1CQkxCittb2R1bGUJSU5URVJOQUwJCUNQNzc1Ly8JCQlDUDc3NQkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJQ1NJU08yMDIySlAvLwkJSVNPLTIwMjItSlAvLworYWxpYXMJSVNPMjAyMkpQLy8JCUlTTy0yMDIyLUpQLy8KK21vZHVsZQlJU08tMjAyMi1KUC8vCQlJTlRFUk5BTAkJSVNPLTIwMjItSlAJMQorbW9kdWxlCUlOVEVSTkFMCQlJU08tMjAyMi1KUC8vCQlJU08tMjAyMi1KUAkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlDU0lTTzIwMjJKUDIvLwkJSVNPLTIwMjItSlAtMi8vCithbGlhcwlJU08yMDIySlAyLy8JCUlTTy0yMDIyLUpQLTIvLworbW9kdWxlCUlTTy0yMDIyLUpQLTIvLwkJSU5URVJOQUwJCUlTTy0yMDIyLUpQCTEKK21vZHVsZQlJTlRFUk5BTAkJSVNPLTIwMjItSlAtMi8vCQlJU08tMjAyMi1KUAkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0Cittb2R1bGUJSVNPLTIwMjItSlAtMy8vCQlJTlRFUk5BTAkJSVNPLTIwMjItSlAtMwkxCittb2R1bGUJSU5URVJOQUwJCUlTTy0yMDIyLUpQLTMvLwkJSVNPLTIwMjItSlAtMwkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlDU0lTTzIwMjJLUi8vCQlJU08tMjAyMi1LUi8vCithbGlhcwlJU08yMDIyS1IvLwkJSVNPLTIwMjItS1IvLworbW9kdWxlCUlTTy0yMDIyLUtSLy8JCUlOVEVSTkFMCQlJU08tMjAyMi1LUgkxCittb2R1bGUJSU5URVJOQUwJCUlTTy0yMDIyLUtSLy8JCUlTTy0yMDIyLUtSCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUNTSVNPMjAyMkNOLy8JCUlTTy0yMDIyLUNOLy8KK2FsaWFzCUlTTzIwMjJDTi8vCQlJU08tMjAyMi1DTi8vCittb2R1bGUJSVNPLTIwMjItQ04vLwkJSU5URVJOQUwJCUlTTy0yMDIyLUNOCTEKK21vZHVsZQlJTlRFUk5BTAkJSVNPLTIwMjItQ04vLwkJSVNPLTIwMjItQ04JMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSVNPMjAyMkNORVhULy8JCUlTTy0yMDIyLUNOLUVYVC8vCittb2R1bGUJSVNPLTIwMjItQ04tRVhULy8JSU5URVJOQUwJCUlTTy0yMDIyLUNOLUVYVAkxCittb2R1bGUJSU5URVJOQUwJCUlTTy0yMDIyLUNOLUVYVC8vCUlTTy0yMDIyLUNOLUVYVAkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlNQUMvLwkJCU1BQ0lOVE9TSC8vCithbGlhcwlDU01BQ0lOVE9TSC8vCQlNQUNJTlRPU0gvLworbW9kdWxlCU1BQ0lOVE9TSC8vCQlJTlRFUk5BTAkJTUFDSU5UT1NICTEKK21vZHVsZQlJTlRFUk5BTAkJTUFDSU5UT1NILy8JCU1BQ0lOVE9TSAkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJU08tSVItMTQzLy8JCUlFQ19QMjctMS8vCithbGlhcwlDU0lTTzE0M0lFQ1AyNzEvLwlJRUNfUDI3LTEvLworYWxpYXMJSUVDX1AyNzEvLwkJSUVDX1AyNy0xLy8KK21vZHVsZQlJRUNfUDI3LTEvLwkJSU5URVJOQUwJCUlFQ19QMjctMQkxCittb2R1bGUJSU5URVJOQUwJCUlFQ19QMjctMS8vCQlJRUNfUDI3LTEJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSVNPXzkwMzYvLwkJQVNNT180NDkvLworYWxpYXMJQVJBQklDNy8vCQlBU01PXzQ0OS8vCithbGlhcwlJU08tSVItODkvLwkJQVNNT180NDkvLworYWxpYXMJQ1NJU084OUFTTU80NDkvLwlBU01PXzQ0OS8vCittb2R1bGUJQVNNT180NDkvLwkJSU5URVJOQUwJCUFTTU9fNDQ5CTEKK21vZHVsZQlJTlRFUk5BTAkJQVNNT180NDkvLwkJQVNNT180NDkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJQU5TSV9YMy4xMTAtMTk4My8vCUFOU0lfWDMuMTEwLy8KK2FsaWFzCUlTTy1JUi05OS8vCQlBTlNJX1gzLjExMC8vCithbGlhcwlDU0FfVDUwMC0xOTgzLy8JCUFOU0lfWDMuMTEwLy8KK2FsaWFzCUNTQV9UNTAwLy8JCUFOU0lfWDMuMTEwLy8KK2FsaWFzCU5BUExQUy8vCQlBTlNJX1gzLjExMC8vCithbGlhcwlDU0lTTzk5TkFQTFBTLy8JCUFOU0lfWDMuMTEwLy8KK21vZHVsZQlBTlNJX1gzLjExMC8vCQlJTlRFUk5BTAkJQU5TSV9YMy4xMTAJMQorbW9kdWxlCUlOVEVSTkFMCQlBTlNJX1gzLjExMC8vCQlBTlNJX1gzLjExMAkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJU08tSVItMTM5Ly8JCUNTTl8zNjkxMDMvLworYWxpYXMJQ1NJU08xMzlDU04zNjkxMDMvLwlDU05fMzY5MTAzLy8KK21vZHVsZQlDU05fMzY5MTAzLy8JCUlOVEVSTkFMCQlDU05fMzY5MTAzCTEKK21vZHVsZQlJTlRFUk5BTAkJQ1NOXzM2OTEwMy8vCQlDU05fMzY5MTAzCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUNXSS0yLy8JCQlDV0kvLworYWxpYXMJQ1AtSFUvLwkJCUNXSS8vCittb2R1bGUJQ1dJLy8JCQlJTlRFUk5BTAkJQ1dJCQkxCittb2R1bGUJSU5URVJOQUwJCUNXSS8vCQkJQ1dJCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlERUMvLwkJCURFQy1NQ1MvLworYWxpYXMJQ1NERUNNQ1MvLwkJREVDLU1DUy8vCithbGlhcwlERUNNQ1MvLwkJREVDLU1DUy8vCittb2R1bGUJREVDLU1DUy8vCQlJTlRFUk5BTAkJREVDLU1DUwkJMQorbW9kdWxlCUlOVEVSTkFMCQlERUMtTUNTLy8JCURFQy1NQ1MJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlTTy1JUi0xMTEvLwkJRUNNQS1DWVJJTExJQy8vCithbGlhcwlDU0lTTzExMUVDTUFDWVJJTExJQy8vCUVDTUEtQ1lSSUxMSUMvLworYWxpYXMJRUNNQUNZUklMTElDLy8JCUVDTUEtQ1lSSUxMSUMvLworbW9kdWxlCUVDTUEtQ1lSSUxMSUMvLwkJSU5URVJOQUwJCUVDTUEtQ1lSSUxMSUMJMQorbW9kdWxlCUlOVEVSTkFMCQlFQ01BLUNZUklMTElDLy8JCUVDTUEtQ1lSSUxMSUMJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJU1RfU0VWXzM1OC04OC8vCQlHT1NUXzE5NzY4LTc0Ly8KK2FsaWFzCUdPU1RfMTk3NjgvLwkJR09TVF8xOTc2OC03NC8vCithbGlhcwlJU08tSVItMTUzLy8JCUdPU1RfMTk3NjgtNzQvLworYWxpYXMJQ1NJU08xNTNHT1NUMTk3Njg3NC8vCUdPU1RfMTk3NjgtNzQvLworYWxpYXMJR09TVF8xOTc2ODc0Ly8JCUdPU1RfMTk3NjgtNzQvLworbW9kdWxlCUdPU1RfMTk3NjgtNzQvLwkJSU5URVJOQUwJCUdPU1RfMTk3NjgtNzQJMQorbW9kdWxlCUlOVEVSTkFMCQlHT1NUXzE5NzY4LTc0Ly8JCUdPU1RfMTk3NjgtNzQJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSVNPLUlSLTE1MC8vCQlHUkVFSy1DQ0lUVC8vCithbGlhcwlDU0lTTzE1MC8vCQlHUkVFSy1DQ0lUVC8vCithbGlhcwlDU0lTTzE1MEdSRUVLQ0NJVFQvLwlHUkVFSy1DQ0lUVC8vCithbGlhcwlHUkVFS0NDSVRULy8JCUdSRUVLLUNDSVRULy8KK21vZHVsZQlHUkVFSy1DQ0lUVC8vCQlJTlRFUk5BTAkJR1JFRUstQ0NJVFQJMQorbW9kdWxlCUlOVEVSTkFMCQlHUkVFSy1DQ0lUVC8vCQlHUkVFSy1DQ0lUVAkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJU08tSVItODgvLwkJR1JFRUs3Ly8KK2FsaWFzCUNTSVNPODhHUkVFSzcvLwkJR1JFRUs3Ly8KK21vZHVsZQlHUkVFSzcvLwkJSU5URVJOQUwJCUdSRUVLNwkJMQorbW9kdWxlCUlOVEVSTkFMCQlHUkVFSzcvLwkJR1JFRUs3CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJU08tSVItMTgvLwkJR1JFRUs3LU9MRC8vCithbGlhcwlDU0lTTzE4R1JFRUs3T0xELy8JR1JFRUs3LU9MRC8vCithbGlhcwlHUkVFSzdPTEQvLwkJR1JFRUs3LU9MRC8vCittb2R1bGUJR1JFRUs3LU9MRC8vCQlJTlRFUk5BTAkJR1JFRUs3LU9MRAkxCittb2R1bGUJSU5URVJOQUwJCUdSRUVLNy1PTEQvLwkJR1JFRUs3LU9MRAkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJU08tSVItNDkvLwkJSU5JUy8vCithbGlhcwlDU0lTTzQ5SU5JUy8vCQlJTklTLy8KK21vZHVsZQlJTklTLy8JCQlJTlRFUk5BTAkJSU5JUwkJMQorbW9kdWxlCUlOVEVSTkFMCQlJTklTLy8JCQlJTklTCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJU08tSVItNTAvLwkJSU5JUy04Ly8KK2FsaWFzCUNTSVNPNTBJTklTOC8vCQlJTklTLTgvLworYWxpYXMJSU5JUzgvLwkJCUlOSVMtOC8vCittb2R1bGUJSU5JUy04Ly8JCUlOVEVSTkFMCQlJTklTLTgJCTEKK21vZHVsZQlJTlRFUk5BTAkJSU5JUy04Ly8JCUlOSVMtOAkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSVNPLUlSLTUxLy8JCUlOSVMtQ1lSSUxMSUMvLworYWxpYXMJQ1NJU081MUlOSVNDWVJJTExJQy8vCUlOSVMtQ1lSSUxMSUMvLworYWxpYXMJSU5JU0NZUklMTElDLy8JCUlOSVMtQ1lSSUxMSUMvLworbW9kdWxlCUlOSVMtQ1lSSUxMSUMvLwkJSU5URVJOQUwJCUlOSVMtQ1lSSUxMSUMJMQorbW9kdWxlCUlOVEVSTkFMCQlJTklTLUNZUklMTElDLy8JCUlOSVMtQ1lSSUxMSUMJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSVNPLUlSLTk4Ly8JCUlTT18yMDMzLy8KK2FsaWFzCUlTT18yMDMzLTE5ODMvLwkJSVNPXzIwMzMvLworYWxpYXMJRTEzQi8vCQkJSVNPXzIwMzMvLworYWxpYXMJQ1NJU08yMDMzLy8JCUlTT18yMDMzLy8KK21vZHVsZQlJU09fMjAzMy8vCQlJTlRFUk5BTAkJSVNPXzIwMzMJMQorbW9kdWxlCUlOVEVSTkFMCQlJU09fMjAzMy8vCQlJU09fMjAzMwkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJU08tSVItMzcvLwkJSVNPXzU0MjcvLworYWxpYXMJS09JLTcvLwkJCUlTT181NDI3Ly8KK2FsaWFzCUNTSVNPNTQyN0NZUklMTElDLy8JSVNPXzU0MjcvLworbW9kdWxlCUlTT181NDI3Ly8JCUlOVEVSTkFMCQlJU09fNTQyNwkxCittb2R1bGUJSU5URVJOQUwJCUlTT181NDI3Ly8JCUlTT181NDI3CTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlTTy1JUi01NC8vCQlJU09fNTQyNy1FWFQvLworYWxpYXMJSVNPXzU0Mjc6MTk4MS8vCQlJU09fNTQyNy1FWFQvLworYWxpYXMJQ1NJU081NDI3Q1lSSUxMSUMxOTgxLy8JSVNPXzU0MjctRVhULy8KK2FsaWFzCUlTT181NDI3RVhULy8JCUlTT181NDI3LUVYVC8vCittb2R1bGUJSVNPXzU0MjctRVhULy8JCUlOVEVSTkFMCQlJU09fNTQyNy1FWFQJMQorbW9kdWxlCUlOVEVSTkFMCQlJU09fNTQyNy1FWFQvLwkJSVNPXzU0MjctRVhUCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlTTy1JUi01NS8vCQlJU09fNTQyOC8vCithbGlhcwlJU09fNTQyODoxOTgwLy8JCUlTT181NDI4Ly8KK2FsaWFzCUNTSVNPNTQyOEdSRUVLLy8JSVNPXzU0MjgvLworbW9kdWxlCUlTT181NDI4Ly8JCUlOVEVSTkFMCQlJU09fNTQyOAkxCittb2R1bGUJSU5URVJOQUwJCUlTT181NDI4Ly8JCUlTT181NDI4CTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlTTy1JUi0xNTUvLwkJSVNPXzEwMzY3LUJPWC8vCithbGlhcwlDU0lTTzEwMzY3Qk9YLy8JCUlTT18xMDM2Ny1CT1gvLworYWxpYXMJSVNPXzEwMzY3Qk9YLy8JCUlTT18xMDM2Ny1CT1gvLworbW9kdWxlCUlTT18xMDM2Ny1CT1gvLwkJSU5URVJOQUwJCUlTT18xMDM2Ny1CT1gJMQorbW9kdWxlCUlOVEVSTkFMCQlJU09fMTAzNjctQk9YLy8JCUlTT18xMDM2Ny1CT1gJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJTUFDSVMvLwkJCU1BQy1JUy8vCittb2R1bGUJTUFDLUlTLy8JCUlOVEVSTkFMCQlNQUMtSVMJCTEKK21vZHVsZQlJTlRFUk5BTAkJTUFDLUlTLy8JCU1BQy1JUwkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJTUFDVUsvLwkJCU1BQy1VSy8vCithbGlhcwlNQUNVS1JBSU5JQU4vLwkJTUFDLVVLLy8KK2FsaWFzCU1BQy1DWVJJTExJQy8vCQlNQUMtVUsvLworYWxpYXMJTUFDQ1lSSUxMSUMvLwkJTUFDLVVLLy8KK21vZHVsZQlNQUMtVUsvLwkJSU5URVJOQUwJCU1BQy1VSwkJMQorbW9kdWxlCUlOVEVSTkFMCQlNQUMtVUsvLwkJTUFDLVVLCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlNUy1NQUMtQ1lSSUxMSUMvLwlDUDEwMDA3Ly8KK2FsaWFzCU1TTUFDQ1lSSUxMSUMvLwkJQ1AxMDAwNy8vCittb2R1bGUJQ1AxMDAwNy8vCQlJTlRFUk5BTAkJQ1AxMDAwNwkJMQorbW9kdWxlCUlOVEVSTkFMCQlDUDEwMDA3Ly8JCUNQMTAwMDcJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlTTy1JUi05LTEvLwkJTkFUUy1EQU5PLy8KK2FsaWFzCUNTTkFUU0RBTk8vLwkJTkFUUy1EQU5PLy8KK2FsaWFzCU5BVFNEQU5PLy8JCU5BVFMtREFOTy8vCittb2R1bGUJTkFUUy1EQU5PLy8JCUlOVEVSTkFMCQlOQVRTLURBTk8JMQorbW9kdWxlCUlOVEVSTkFMCQlOQVRTLURBTk8vLwkJTkFUUy1EQU5PCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlTTy1JUi04LTEvLwkJTkFUUy1TRUZJLy8KK2FsaWFzCUNTTkFUU1NFRkkvLwkJTkFUUy1TRUZJLy8KK2FsaWFzCU5BVFNTRUZJLy8JCU5BVFMtU0VGSS8vCittb2R1bGUJTkFUUy1TRUZJLy8JCUlOVEVSTkFMCQlOQVRTLVNFRkkJMQorbW9kdWxlCUlOVEVSTkFMCQlOQVRTLVNFRkkvLwkJTkFUUy1TRUZJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCVdTMi8vCQkJV0lOLVNBTUktMi8vCithbGlhcwlXSU5TQU1JMi8vCQlXSU4tU0FNSS0yLy8KK21vZHVsZQlXSU4tU0FNSS0yLy8JCUlOVEVSTkFMCQlTQU1JLVdTMgkxCittb2R1bGUJSU5URVJOQUwJCVdJTi1TQU1JLTIvLwkJU0FNSS1XUzIJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorbW9kdWxlCUlTTy1JUi0xOTcvLwkJSU5URVJOQUwJCUlTTy1JUi0xOTcJMQorbW9kdWxlCUlOVEVSTkFMCQlJU08tSVItMTk3Ly8JCUlTTy1JUi0xOTcJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJVElTNjIwLy8JCVRJUy02MjAvLworYWxpYXMJVElTNjIwLTAvLwkJVElTLTYyMC8vCithbGlhcwlUSVM2MjAuMjUyOS0xLy8JCVRJUy02MjAvLworYWxpYXMJVElTNjIwLjI1MzMtMC8vCQlUSVMtNjIwLy8KK2FsaWFzCUlTTy1JUi0xNjYvLwkJVElTLTYyMC8vCittb2R1bGUJVElTLTYyMC8vCQlJTlRFUk5BTAkJVElTLTYyMAkJMQorbW9kdWxlCUlOVEVSTkFMCQlUSVMtNjIwLy8JCVRJUy02MjAJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUtPSThVLy8JCQlLT0k4LVUvLworbW9kdWxlCUtPSTgtVS8vCQlJTlRFUk5BTAkJS09JOC1VCQkxCittb2R1bGUJSU5URVJOQUwJCUtPSTgtVS8vCQlLT0k4LVUJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlTSVJJMzM0Mi8vCQlJU0lSSS0zMzQyLy8KK21vZHVsZQlJU0lSSS0zMzQyLy8JCUlOVEVSTkFMCQlJU0lSSS0zMzQyCTEKK21vZHVsZQlJTlRFUk5BTAkJSVNJUkktMzM0Mi8vCQlJU0lSSS0zMzQyCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCVVURjE2Ly8JCQlVVEYtMTYvLworbW9kdWxlCVVURi0xNi8vCQlJTlRFUk5BTAkJVVRGLTE2CQkxCittb2R1bGUJSU5URVJOQUwJCVVURi0xNi8vCQlVVEYtMTYJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCVVURjE2TEUvLwkJVVRGLTE2TEUvLworbW9kdWxlCVVURi0xNkxFLy8JCUlOVEVSTkFMCQlVVEYtMTYJCTEKK21vZHVsZQlJTlRFUk5BTAkJVVRGLTE2TEUvLwkJVVRGLTE2CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlVVEYxNkJFLy8JCVVURi0xNkJFLy8KK21vZHVsZQlVVEYtMTZCRS8vCQlJTlRFUk5BTAkJVVRGLTE2CQkxCittb2R1bGUJSU5URVJOQUwJCVVURi0xNkJFLy8JCVVURi0xNgkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJQ1NVTklDT0RFLy8JCVVOSUNPREUvLworbW9kdWxlCVVOSUNPREUvLwkJSU5URVJOQUwJCVVOSUNPREUJCTEKK21vZHVsZQlJTlRFUk5BTAkJVU5JQ09ERS8vCQlVTklDT0RFCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlVVEYzMi8vCQkJVVRGLTMyLy8KK21vZHVsZQlVVEYtMzIvLwkJSU5URVJOQUwJCVVURi0zMgkJMQorbW9kdWxlCUlOVEVSTkFMCQlVVEYtMzIvLwkJVVRGLTMyCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlVVEYzMkxFLy8JCVVURi0zMkxFLy8KK21vZHVsZQlVVEYtMzJMRS8vCQlJTlRFUk5BTAkJVVRGLTMyCQkxCittb2R1bGUJSU5URVJOQUwJCVVURi0zMkxFLy8JCVVURi0zMgkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJVVRGMzJCRS8vCQlVVEYtMzJCRS8vCittb2R1bGUJVVRGLTMyQkUvLwkJSU5URVJOQUwJCVVURi0zMgkJMQorbW9kdWxlCUlOVEVSTkFMCQlVVEYtMzJCRS8vCQlVVEYtMzIJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCVVURjcvLwkJCVVURi03Ly8KK21vZHVsZQlVVEYtNy8vCQkJSU5URVJOQUwJCVVURi03CQkxCittb2R1bGUJSU5URVJOQUwJCVVURi03Ly8JCQlVVEYtNwkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorbW9kdWxlCUdCMTgwMzAvLwkJSU5URVJOQUwJCUdCMTgwMzAJCTEKK21vZHVsZQlJTlRFUk5BTAkJR0IxODAzMC8vCQlHQjE4MDMwCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0Cittb2R1bGUJVklTQ0lJLy8JCUlOVEVSTkFMCQlWSVNDSUkJCTEKK21vZHVsZQlJTlRFUk5BTAkJVklTQ0lJLy8JCVZJU0NJSQkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorbW9kdWxlCUtPSTgtVC8vCQlJTlRFUk5BTAkJS09JOC1UCQkxCittb2R1bGUJSU5URVJOQUwJCUtPSTgtVC8vCQlLT0k4LVQJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK21vZHVsZQlHRU9SR0lBTi1QUy8vCQlJTlRFUk5BTAkJR0VPUkdJQU4tUFMJMQorbW9kdWxlCUlOVEVSTkFMCQlHRU9SR0lBTi1QUy8vCQlHRU9SR0lBTi1QUwkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0Cittb2R1bGUJR0VPUkdJQU4tQUNBREVNWS8vCUlOVEVSTkFMCQlHRU9SR0lBTi1BQ0FERU1ZIDEKK21vZHVsZQlJTlRFUk5BTAkJR0VPUkdJQU4tQUNBREVNWS8vCUdFT1JHSUFOLUFDQURFTVkgMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorbW9kdWxlCUlTTy1JUi0yMDkvLwkJSU5URVJOQUwJCUlTTy1JUi0yMDkJMQorbW9kdWxlCUlOVEVSTkFMCQlJU08tSVItMjA5Ly8JCUlTTy1JUi0yMDkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorbW9kdWxlCU1BQy1TQU1JLy8JCUlOVEVSTkFMCQlNQUMtU0FNSQkxCittb2R1bGUJSU5URVJOQUwJCU1BQy1TQU1JLy8JCU1BQy1TQU1JCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK21vZHVsZQlBUk1TQ0lJLTgvLwkJSU5URVJOQUwJCUFSTVNDSUktOAkxCittb2R1bGUJSU5URVJOQUwJCUFSTVNDSUktOC8vCQlBUk1TQ0lJLTgJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJVENWTi8vCQkJVENWTjU3MTItMS8vCithbGlhcwlUQ1ZOLTU3MTIvLwkJVENWTjU3MTItMS8vCithbGlhcwlUQ1ZONTcxMi0xOjE5OTMvLwlUQ1ZONTcxMi0xLy8KK21vZHVsZQlUQ1ZONTcxMi0xLy8JCUlOVEVSTkFMCQlUQ1ZONTcxMi0xCTEKK21vZHVsZQlJTlRFUk5BTAkJVENWTjU3MTItMS8vCQlUQ1ZONTcxMi0xCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK21vZHVsZQlFVUMtSklTWDAyMTMvLwkJSU5URVJOQUwJCUVVQy1KSVNYMDIxMwkxCittb2R1bGUJSU5URVJOQUwJCUVVQy1KSVNYMDIxMy8vCQlFVUMtSklTWDAyMTMJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorbW9kdWxlCVNoaWZ0X0pJU1gwMjEzLy8JSU5URVJOQUwJCVNISUZUX0pJU1gwMjEzCTEKK21vZHVsZQlJTlRFUk5BTAkJU2hpZnRfSklTWDAyMTMvLwlTSElGVF9KSVNYMDIxMwkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0Cittb2R1bGUJVFNDSUkvLwkJCUlOVEVSTkFMCQlUU0NJSQkJMQorbW9kdWxlCUlOVEVSTkFMCQlUU0NJSS8vCQkJVFNDSUkJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK21vZHVsZQlQVDE1NC8vCQkJSU5URVJOQUwJCVBUMTU0CQkxCittb2R1bGUJSU5URVJOQUwJCVBUMTU0Ly8JCQlQVDE1NAkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJU1RSSzEwNDgtMjAwMi8vCQlSSzEwNDgvLworbW9kdWxlCVJLMTA0OC8vCQlJTlRFUk5BTAkJUksxMDQ4CQkxCittb2R1bGUJSU5URVJOQUwJCVJLMTA0OC8vCQlSSzEwNDgJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlCTS0xMDI1Ly8JCUlCTTEwMjUvLworYWxpYXMJQ1AxMDI1Ly8JCUlCTTEwMjUvLworYWxpYXMJQ1NJQk0xMDI1Ly8JCUlCTTEwMjUvLworbW9kdWxlCUlCTTEwMjUvLwkJSU5URVJOQUwJCUlCTTEwMjUJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNMTAyNS8vCQlJQk0xMDI1CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJQk0tMTEyMi8vCQlJQk0xMTIyLy8KK2FsaWFzCUNQMTEyMi8vCQlJQk0xMTIyLy8KK2FsaWFzCUNTSUJNMTEyMi8vCQlJQk0xMTIyLy8KK21vZHVsZQlJQk0xMTIyLy8JCUlOVEVSTkFMCQlJQk0xMTIyCQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTExMjIvLwkJSUJNMTEyMgkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSUJNLTExMzcvLwkJSUJNMTEzNy8vCithbGlhcwlDUDExMzcvLwkJSUJNMTEzNy8vCithbGlhcwlDU0lCTTExMzcvLwkJSUJNMTEzNy8vCittb2R1bGUJSUJNMTEzNy8vCQlJTlRFUk5BTAkJSUJNMTEzNwkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk0xMTM3Ly8JCUlCTTExMzcJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlCTS0xMTUzLy8JCUlCTTExNTMvLworYWxpYXMJQ1AxMTUzLy8JCUlCTTExNTMvLworYWxpYXMJQ1NJQk0xMTUzLy8JCUlCTTExNTMvLworbW9kdWxlCUlCTTExNTMvLwkJSU5URVJOQUwJCUlCTTExNTMJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNMTE1My8vCQlJQk0xMTUzCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJQk0tMTE1NC8vCQlJQk0xMTU0Ly8KK2FsaWFzCUNQMTE1NC8vCQlJQk0xMTU0Ly8KK2FsaWFzCUNTSUJNMTE1NC8vCQlJQk0xMTU0Ly8KK21vZHVsZQlJQk0xMTU0Ly8JCUlOVEVSTkFMCQlJQk0xMTU0CQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTExNTQvLwkJSUJNMTE1NAkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSUJNLTExNTUvLwkJSUJNMTE1NS8vCithbGlhcwlDUDExNTUvLwkJSUJNMTE1NS8vCithbGlhcwlDU0lCTTExNTUvLwkJSUJNMTE1NS8vCittb2R1bGUJSUJNMTE1NS8vCQlJTlRFUk5BTAkJSUJNMTE1NQkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk0xMTU1Ly8JCUlCTTExNTUJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlCTS0xMTU1Ly8JCUlCTTExNTUvLworYWxpYXMJQ1AxMTU1Ly8JCUlCTTExNTUvLworYWxpYXMJQ1NJQk0xMTU1Ly8JCUlCTTExNTUvLworbW9kdWxlCUlCTTExNTUvLwkJSU5URVJOQUwJCUlCTTExNTUJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNMTE1NS8vCQlJQk0xMTU1CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJQk0tMTE1Ni8vCQlJQk0xMTU2Ly8KK2FsaWFzCUNQMTE1Ni8vCQlJQk0xMTU2Ly8KK2FsaWFzCUNTSUJNMTE1Ni8vCQlJQk0xMTU2Ly8KK21vZHVsZQlJQk0xMTU2Ly8JCUlOVEVSTkFMCQlJQk0xMTU2CQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTExNTYvLwkJSUJNMTE1NgkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSUJNLTExNTcvLwkJSUJNMTE1Ny8vCithbGlhcwlDUDExNTcvLwkJSUJNMTE1Ny8vCithbGlhcwlDU0lCTTExNTcvLwkJSUJNMTE1Ny8vCittb2R1bGUJSUJNMTE1Ny8vCQlJTlRFUk5BTAkJSUJNMTE1NwkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk0xMTU3Ly8JCUlCTTExNTcJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlCTS0xMTU4Ly8JCUlCTTExNTgvLworYWxpYXMJQ1AxMTU4Ly8JCUlCTTExNTgvLworYWxpYXMJQ1NJQk0xMTU4Ly8JCUlCTTExNTgvLworbW9kdWxlCUlCTTExNTgvLwkJSU5URVJOQUwJCUlCTTExNTgJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNMTE1OC8vCQlJQk0xMTU4CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJQk0tODAzLy8JCUlCTTgwMy8vCithbGlhcwlDUDgwMy8vCQlJQk04MDMvLworYWxpYXMJQ1NJQk04MDMvLwkJSUJNODAzLy8KK21vZHVsZQlJQk04MDMvLwkJSU5URVJOQUwJCUlCTTgwMwkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk04MDMvLwkJSUJNODAzCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJQk0tOTAxLy8JCUlCTTkwMS8vCithbGlhcwlDUDkwMS8vCQlJQk05MDEvLworYWxpYXMJQ1NJQk05MDEvLwkJSUJNOTAxLy8KK21vZHVsZQlJQk05MDEvLwkJSU5URVJOQUwJCUlCTTkwMQkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk05MDEvLwkJSUJNOTAxCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJQk0tOTAyLy8JCUlCTTkwMi8vCithbGlhcwlDUDkwMi8vCQlJQk05MDIvLworYWxpYXMJQ1NJQk05MDIvLwkJSUJNOTAyLy8KK21vZHVsZQlJQk05MDIvLwkJSU5URVJOQUwJCUlCTTkwMgkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk05MDIvLwkJSUJNOTAyCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJQk0tOTIxLy8JCUlCTTkyMS8vCithbGlhcwlDUDkyMS8vCQlJQk05MjEvLworYWxpYXMJQ1NJQk05MjEvLwkJSUJNOTIxLy8KK21vZHVsZQlJQk05MjEvLwkJSU5URVJOQUwJCUlCTTkyMQkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk05MjEvLwkJSUJNOTIxCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJQk0tMTAwOC8vCQlJQk0xMDA4Ly8KK2FsaWFzCUNQMTAwOC8vCQlJQk0xMDA4Ly8KK2FsaWFzCUNTSUJNMTAwOC8vCQlJQk0xMDA4Ly8KK21vZHVsZQlJQk0xMDA4Ly8JCUlOVEVSTkFMCQlJQk0xMDA4CQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTEwMDgvLwkJSUJNMTAwOAkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorbW9kdWxlCUlCTTEwMDgvLwkJSUJNNDIwLy8JCUlCTTEwMDhfNDIwCTEKK21vZHVsZQlJQk00MjAvLwkJSUJNMTAwOC8vCQlJQk0xMDA4XzQyMAkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJQk0tMTA5Ny8vCQlJQk0xMDk3Ly8KK2FsaWFzCUNQMTA5Ny8vCQlJQk0xMDk3Ly8KK2FsaWFzCUNTSUJNMTA5Ny8vCQlJQk0xMDk3Ly8KK21vZHVsZQlJQk0xMDk3Ly8JCUlOVEVSTkFMCQlJQk0xMDk3CQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTEwOTcvLwkJSUJNMTA5NwkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSUJNLTExMTIvLwkJSUJNMTExMi8vCithbGlhcwlDUDExMTIvLwkJSUJNMTExMi8vCithbGlhcwlDU0lCTTExMTIvLwkJSUJNMTExMi8vCittb2R1bGUJSUJNMTExMi8vCQlJTlRFUk5BTAkJSUJNMTExMgkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk0xMTEyLy8JCUlCTTExMTIJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlCTS0xMTIzLy8JCUlCTTExMjMvLworYWxpYXMJQ1AxMTIzLy8JCUlCTTExMjMvLworYWxpYXMJQ1NJQk0xMTIzLy8JCUlCTTExMjMvLworbW9kdWxlCUlCTTExMjMvLwkJSU5URVJOQUwJCUlCTTExMjMJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNMTEyMy8vCQlJQk0xMTIzCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJQk0tMTEzMC8vCQlJQk0xMTMwLy8KK2FsaWFzCUNQMTEzMC8vCQlJQk0xMTMwLy8KK2FsaWFzCUNTSUJNMTEzMC8vCQlJQk0xMTMwLy8KK21vZHVsZQlJQk0xMTMwLy8JCUlOVEVSTkFMCQlJQk0xMTMwCQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTExMzAvLwkJSUJNMTEzMAkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSUJNLTExNDAvLwkJSUJNMTE0MC8vCithbGlhcwlDUDExNDAvLwkJSUJNMTE0MC8vCithbGlhcwlDU0lCTTExNDAvLwkJSUJNMTE0MC8vCittb2R1bGUJSUJNMTE0MC8vCQlJTlRFUk5BTAkJSUJNMTE0MAkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk0xMTQwLy8JCUlCTTExNDAJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlCTS0xMTQxLy8JCUlCTTExNDEvLworYWxpYXMJQ1AxMTQxLy8JCUlCTTExNDEvLworYWxpYXMJQ1NJQk0xMTQxLy8JCUlCTTExNDEvLworbW9kdWxlCUlCTTExNDEvLwkJSU5URVJOQUwJCUlCTTExNDEJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNMTE0MS8vCQlJQk0xMTQxCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJQk0tMTE0Mi8vCQlJQk0xMTQyLy8KK2FsaWFzCUNQMTE0Mi8vCQlJQk0xMTQyLy8KK2FsaWFzCUNTSUJNMTE0Mi8vCQlJQk0xMTQyLy8KK21vZHVsZQlJQk0xMTQyLy8JCUlOVEVSTkFMCQlJQk0xMTQyCQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTExNDIvLwkJSUJNMTE0MgkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSUJNLTExNDMvLwkJSUJNMTE0My8vCithbGlhcwlDUDExNDMvLwkJSUJNMTE0My8vCithbGlhcwlDU0lCTTExNDMvLwkJSUJNMTE0My8vCittb2R1bGUJSUJNMTE0My8vCQlJTlRFUk5BTAkJSUJNMTE0MwkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk0xMTQzLy8JCUlCTTExNDMJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlCTS0xMTQ0Ly8JCUlCTTExNDQvLworYWxpYXMJQ1AxMTQ0Ly8JCUlCTTExNDQvLworYWxpYXMJQ1NJQk0xMTQ0Ly8JCUlCTTExNDQvLworbW9kdWxlCUlCTTExNDQvLwkJSU5URVJOQUwJCUlCTTExNDQJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNMTE0NC8vCQlJQk0xMTQ0CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJQk0tMTE0NS8vCQlJQk0xMTQ1Ly8KK2FsaWFzCUNQMTE0NS8vCQlJQk0xMTQ1Ly8KK2FsaWFzCUNTSUJNMTE0NS8vCQlJQk0xMTQ1Ly8KK21vZHVsZQlJQk0xMTQ1Ly8JCUlOVEVSTkFMCQlJQk0xMTQ1CQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTExNDUvLwkJSUJNMTE0NQkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSUJNLTExNDYvLwkJSUJNMTE0Ni8vCithbGlhcwlDUDExNDYvLwkJSUJNMTE0Ni8vCithbGlhcwlDU0lCTTExNDYvLwkJSUJNMTE0Ni8vCittb2R1bGUJSUJNMTE0Ni8vCQlJTlRFUk5BTAkJSUJNMTE0NgkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk0xMTQ2Ly8JCUlCTTExNDYJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlCTS0xMTQ3Ly8JCUlCTTExNDcvLworYWxpYXMJQ1AxMTQ3Ly8JCUlCTTExNDcvLworYWxpYXMJQ1NJQk0xMTQ3Ly8JCUlCTTExNDcvLworbW9kdWxlCUlCTTExNDcvLwkJSU5URVJOQUwJCUlCTTExNDcJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNMTE0Ny8vCQlJQk0xMTQ3CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJQk0tMTE0OC8vCQlJQk0xMTQ4Ly8KK2FsaWFzCUNQMTE0OC8vCQlJQk0xMTQ4Ly8KK2FsaWFzCUNTSUJNMTE0OC8vCQlJQk0xMTQ4Ly8KK21vZHVsZQlJQk0xMTQ4Ly8JCUlOVEVSTkFMCQlJQk0xMTQ4CQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTExNDgvLwkJSUJNMTE0OAkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSUJNLTExNDkvLwkJSUJNMTE0OS8vCithbGlhcwlDUDExNDkvLwkJSUJNMTE0OS8vCithbGlhcwlDU0lCTTExNDkvLwkJSUJNMTE0OS8vCittb2R1bGUJSUJNMTE0OS8vCQlJTlRFUk5BTAkJSUJNMTE0OQkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk0xMTQ5Ly8JCUlCTTExNDkJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlCTS0xMTY2Ly8JCUlCTTExNjYvLworYWxpYXMJQ1AxMTY2Ly8JCUlCTTExNjYvLworYWxpYXMJQ1NJQk0xMTY2Ly8JCUlCTTExNjYvLworbW9kdWxlCUlCTTExNjYvLwkJSU5URVJOQUwJCUlCTTExNjYJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNMTE2Ni8vCQlJQk0xMTY2CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJQk0tMTE2Ny8vCQlJQk0xMTY3Ly8KK2FsaWFzCUNQMTE2Ny8vCQlJQk0xMTY3Ly8KK2FsaWFzCUNTSUJNMTE2Ny8vCQlJQk0xMTY3Ly8KK21vZHVsZQlJQk0xMTY3Ly8JCUlOVEVSTkFMCQlJQk0xMTY3CQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTExNjcvLwkJSUJNMTE2NwkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSUJNLTQ1MTcvLwkJSUJNNDUxNy8vCithbGlhcwlDUDQ1MTcvLwkJSUJNNDUxNy8vCithbGlhcwlDU0lCTTQ1MTcvLwkJSUJNNDUxNy8vCittb2R1bGUJSUJNNDUxNy8vCQlJTlRFUk5BTAkJSUJNNDUxNwkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk00NTE3Ly8JCUlCTTQ1MTcJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlCTS00ODk5Ly8JCUlCTTQ4OTkvLworYWxpYXMJQ1A0ODk5Ly8JCUlCTTQ4OTkvLworYWxpYXMJQ1NJQk00ODk5Ly8JCUlCTTQ4OTkvLworbW9kdWxlCUlCTTQ4OTkvLwkJSU5URVJOQUwJCUlCTTQ4OTkJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNNDg5OS8vCQlJQk00ODk5CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJQk0tNDkwOS8vCQlJQk00OTA5Ly8KK2FsaWFzCUNQNDkwOS8vCQlJQk00OTA5Ly8KK2FsaWFzCUNTSUJNNDkwOS8vCQlJQk00OTA5Ly8KK21vZHVsZQlJQk00OTA5Ly8JCUlOVEVSTkFMCQlJQk00OTA5CQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTQ5MDkvLwkJSUJNNDkwOQkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSUJNLTQ5NzEvLwkJSUJNNDk3MS8vCithbGlhcwlDUDQ5NzEvLwkJSUJNNDk3MS8vCithbGlhcwlDU0lCTTQ5NzEvLwkJSUJNNDk3MS8vCittb2R1bGUJSUJNNDk3MS8vCQlJTlRFUk5BTAkJSUJNNDk3MQkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk00OTcxLy8JCUlCTTQ5NzEJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlCTS01MzQ3Ly8JCUlCTTUzNDcvLworYWxpYXMJQ1A1MzQ3Ly8JCUlCTTUzNDcvLworYWxpYXMJQ1NJQk01MzQ3Ly8JCUlCTTUzNDcvLworbW9kdWxlCUlCTTUzNDcvLwkJSU5URVJOQUwJCUlCTTUzNDcJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNNTM0Ny8vCQlJQk01MzQ3CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJQk0tOTAzMC8vCQlJQk05MDMwLy8KK2FsaWFzCUNQOTAzMC8vCQlJQk05MDMwLy8KK2FsaWFzCUNTSUJNOTAzMC8vCQlJQk05MDMwLy8KK21vZHVsZQlJQk05MDMwLy8JCUlOVEVSTkFMCQlJQk05MDMwCQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTkwMzAvLwkJSUJNOTAzMAkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSUJNLTkwNjYvLwkJSUJNOTA2Ni8vCithbGlhcwlDUDkwNjYvLwkJSUJNOTA2Ni8vCithbGlhcwlDU0lCTTkwNjYvLwkJSUJNOTA2Ni8vCittb2R1bGUJSUJNOTA2Ni8vCQlJTlRFUk5BTAkJSUJNOTA2NgkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk05MDY2Ly8JCUlCTTkwNjYJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlCTS05NDQ4Ly8JCUlCTTk0NDgvLworYWxpYXMJQ1A5NDQ4Ly8JCUlCTTk0NDgvLworYWxpYXMJQ1NJQk05NDQ4Ly8JCUlCTTk0NDgvLworbW9kdWxlCUlCTTk0NDgvLwkJSU5URVJOQUwJCUlCTTk0NDgJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNOTQ0OC8vCQlJQk05NDQ4CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJQk0tMTI3MTIvLwkJSUJNMTI3MTIvLworYWxpYXMJQ1AxMjcxMi8vCQlJQk0xMjcxMi8vCithbGlhcwlDU0lCTTEyNzEyLy8JCUlCTTEyNzEyLy8KK21vZHVsZQlJQk0xMjcxMi8vCQlJTlRFUk5BTAkJSUJNMTI3MTIJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNMTI3MTIvLwkJSUJNMTI3MTIJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlCTS0xNjgwNC8vCQlJQk0xNjgwNC8vCithbGlhcwlDUDE2ODA0Ly8JCUlCTTE2ODA0Ly8KK2FsaWFzCUNTSUJNMTY4MDQvLwkJSUJNMTY4MDQvLworbW9kdWxlCUlCTTE2ODA0Ly8JCUlOVEVSTkFMCQlJQk0xNjgwNAkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk0xNjgwNC8vCQlJQk0xNjgwNAkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSUJNLTEzNjQvLwkJSUJNMTM2NC8vCithbGlhcwlDUDEzNjQvLwkJSUJNMTM2NC8vCithbGlhcwlDU0lCTTEzNjQvLwkJSUJNMTM2NC8vCittb2R1bGUJSUJNMTM2NC8vCQlJTlRFUk5BTAkJSUJNMTM2NAkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk0xMzY0Ly8JCUlCTTEzNjQJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlCTS0xMzcxLy8JCUlCTTEzNzEvLworYWxpYXMJQ1AxMzcxLy8JCUlCTTEzNzEvLworYWxpYXMJQ1NJQk0xMzcxLy8JCUlCTTEzNzEvLworbW9kdWxlCUlCTTEzNzEvLwkJSU5URVJOQUwJCUlCTTEzNzEJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNMTM3MS8vCQlJQk0xMzcxCQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJQk0tMTM4OC8vCQlJQk0xMzg4Ly8KK2FsaWFzCUNQMTM4OC8vCQlJQk0xMzg4Ly8KK2FsaWFzCUNTSUJNMTM4OC8vCQlJQk0xMzg4Ly8KK21vZHVsZQlJQk0xMzg4Ly8JCUlOVEVSTkFMCQlJQk0xMzg4CQkxCittb2R1bGUJSU5URVJOQUwJCUlCTTEzODgvLwkJSUJNMTM4OAkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSUJNLTEzOTAvLwkJSUJNMTM5MC8vCithbGlhcwlDUDEzOTAvLwkJSUJNMTM5MC8vCithbGlhcwlDU0lCTTEzOTAvLwkJSUJNMTM5MC8vCittb2R1bGUJSUJNMTM5MC8vCQlJTlRFUk5BTAkJSUJNMTM5MAkJMQorbW9kdWxlCUlOVEVSTkFMCQlJQk0xMzkwLy8JCUlCTTEzOTAJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUlCTS0xMzk5Ly8JCUlCTTEzOTkvLworYWxpYXMJQ1AxMzk5Ly8JCUlCTTEzOTkvLworYWxpYXMJQ1NJQk0xMzk5Ly8JCUlCTTEzOTkvLworbW9kdWxlCUlCTTEzOTkvLwkJSU5URVJOQUwJCUlCTTEzOTkJCTEKK21vZHVsZQlJTlRFUk5BTAkJSUJNMTM5OS8vCQlJQk0xMzk5CQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlJU08vVFJfMTE1NDgtMS8JCUlTT18xMTU0OC0xLy8KK2FsaWFzCUlTTzExNTQ4LTEvLwkJSVNPXzExNTQ4LTEvLworbW9kdWxlCUlTT18xMTU0OC0xLy8JCUlOVEVSTkFMCQlJU09fMTE1NDgtMQkxCittb2R1bGUJSU5URVJOQUwJCUlTT18xMTU0OC0xLy8JCUlTT18xMTU0OC0xCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK21vZHVsZQlNSUsvLwkJCUlOVEVSTkFMCQlNSUsJCTEKK21vZHVsZQlJTlRFUk5BTAkJTUlLLy8JCQlNSUsJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK21vZHVsZQlCUkYvLwkJCUlOVEVSTkFMCQlCUkYJCTEKK21vZHVsZQlJTlRFUk5BTAkJQlJGLy8JCQlCUkYJCTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUNQMTI4Mi8vCQlNQUMtQ0VOVFJBTEVVUk9QRS8vCittb2R1bGUJTUFDLUNFTlRSQUxFVVJPUEUvLwlJTlRFUk5BTAkJTUFDLUNFTlRSQUxFVVJPUEUgMQorbW9kdWxlCUlOVEVSTkFMCQlNQUMtQ0VOVFJBTEVVUk9QRS8vCU1BQy1DRU5UUkFMRVVST1BFIDEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK21vZHVsZQlLT0k4LVJVLy8JCUlOVEVSTkFMCQlLT0k4LVJVCQkxCittb2R1bGUJSU5URVJOQUwJCUtPSTgtUlUvLwkJS09JOC1SVQkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJSVNPXzg4NTktOUUvLwkJSVNPLTg4NTktOUUvLworYWxpYXMJSVNPODg1OS05RS8vCQlJU08tODg1OS05RS8vCithbGlhcwlJU084ODU5OUUvLwkJSVNPLTg4NTktOUUvLworbW9kdWxlCUlTTy04ODU5LTlFLy8JCUlOVEVSTkFMCQlJU084ODU5LTlFCTEKK21vZHVsZQlJTlRFUk5BTAkJSVNPLTg4NTktOUUvLwkJSVNPODg1OS05RQkxCisKKyMJZnJvbQkJCXRvCQkJbW9kdWxlCQljb3N0CithbGlhcwlST01BTjkvLwkJSFAtUk9NQU45Ly8KK2FsaWFzCVI5Ly8JCQlIUC1ST01BTjkvLworYWxpYXMJSFBST01BTjkvLwkJSFAtUk9NQU45Ly8KK21vZHVsZQlIUC1ST01BTjkvLwkJSU5URVJOQUwJCUhQLVJPTUFOOQkxCittb2R1bGUJSU5URVJOQUwJCUhQLVJPTUFOOS8vCQlIUC1ST01BTjkJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJVFVSS0lTSDgvLwkJSFAtVFVSS0lTSDgvLworYWxpYXMJSFBUVVJLSVNIOC8vCQlIUC1UVVJLSVNIOC8vCithbGlhcwlPU0YxMDAxMDAwNi8vCQlIUC1UVVJLSVNIOC8vCittb2R1bGUJSFAtVFVSS0lTSDgvLwkJSU5URVJOQUwJCUhQLVRVUktJU0g4CTEKK21vZHVsZQlJTlRFUk5BTAkJSFAtVFVSS0lTSDgvLwkJSFAtVFVSS0lTSDgJMQorCisjCWZyb20JCQl0bwkJCW1vZHVsZQkJY29zdAorYWxpYXMJVEhBSTgvLwkJCUhQLVRIQUk4Ly8KK2FsaWFzCUhQVEhBSTgvLwkJSFAtVEhBSTgvLworbW9kdWxlCUhQLVRIQUk4Ly8JCUlOVEVSTkFMCQlIUC1USEFJOAkxCittb2R1bGUJSU5URVJOQUwJCUhQLVRIQUk4Ly8JCUhQLVRIQUk4CTEKKworIwlmcm9tCQkJdG8JCQltb2R1bGUJCWNvc3QKK2FsaWFzCUhQR1JFRUs4Ly8JCUhQLUdSRUVLOC8vCithbGlhcwlPU0YxMDAxMDAwNC8vCQlIUC1HUkVFSzgvLworbW9kdWxlCUhQLUdSRUVLOC8vCQlJTlRFUk5BTAkJSFAtR1JFRUs4CTEKK21vZHVsZQlJTlRFUk5BTAkJSFAtR1JFRUs4Ly8JCUhQLUdSRUVLOAkxCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9saWJDTlMuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9saWJDTlMuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzgwNTFkOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L2xpYkNOUy5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9saWJHQi5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L2xpYkdCLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU2MmYxMTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9saWJHQi5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9saWJJU09JUjE2NS5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L2xpYklTT0lSMTY1LnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA3YTBiNzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9saWJJU09JUjE2NS5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9saWJKSVMuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9saWJKSVMuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmYxNWFkZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L2xpYkpJUy5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9saWJKSVNYMDIxMy5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L2xpYkpJU1gwMjEzLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE2ZTMxMTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9saWJKSVNYMDIxMy5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9saWJLU0Muc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY29udi9saWJLU0Muc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTg5NGRkNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2djb252L2xpYktTQy5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9nY3J0MS5vIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NydDEubwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzE3MmQwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvZ2NydDEubwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWIgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWIKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uNzk1MTQwNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYgpAQCAtMCwwICsxIEBACitsaWIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJCcm9rZW5Mb2NhbGUuYSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYkJyb2tlbkxvY2FsZS5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYmRhMWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJCcm9rZW5Mb2NhbGUuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJCcm9rZW5Mb2NhbGUuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJCcm9rZW5Mb2NhbGUuc28KbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uMzk0NmIxNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYkJyb2tlbkxvY2FsZS5zbwpAQCAtMCwwICsxIEBACisuLi8uLi9saWIvbGliQnJva2VuTG9jYWxlLnNvLjEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJhbmwuYSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYmFubC5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmODg2NzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJhbmwuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJhbmwuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJhbmwuc28KbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uMWFhNzNhNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYmFubC5zbwpAQCAtMCwwICsxIEBACisuLi8uLi9saWIvbGliYW5sLnNvLjEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJic2QtY29tcGF0LmEgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJic2QtY29tcGF0LmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM5YWJjMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYmJzZC1jb21wYXQuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJjLmEgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJjLmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA4ZWExZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYmMuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJjLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGliYy5zbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzliMjlhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGliYy5zbwpAQCAtMCwwICsxLDUgQEAKKy8qIEdOVSBsZCBzY3JpcHQKKyAgIFVzZSB0aGUgc2hhcmVkIGxpYnJhcnksIGJ1dCBzb21lIGZ1bmN0aW9ucyBhcmUgb25seSBpbgorICAgdGhlIHN0YXRpYyBsaWJyYXJ5LCBzbyB0cnkgdGhhdCBzZWNvbmRhcmlseS4gICovCitPVVRQVVRfRk9STUFUKGVsZjMyLWxpdHRsZWFybSkKK0dST1VQICggL2xpYi9saWJjLnNvLjYgL3Vzci9saWIvbGliY19ub25zaGFyZWQuYSAgQVNfTkVFREVEICggL2xpYi9sZC1saW51eC5zby4zICkgKQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGliY19ub25zaGFyZWQuYSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYmNfbm9uc2hhcmVkLmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRiODExMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYmNfbm9uc2hhcmVkLmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGliY3J5cHQuYSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYmNyeXB0LmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJkMWYxYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYmNyeXB0LmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGliY3J5cHQuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJjcnlwdC5zbwpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5mMmM0YzgwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGliY3J5cHQuc28KQEAgLTAsMCArMSBAQAorLi4vLi4vbGliL2xpYmNyeXB0LnNvLjEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJkbC5hIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGliZGwuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWRhMzQxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGliZGwuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJkbC5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYmRsLnNvCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjdhZmE5NWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJkbC5zbwpAQCAtMCwwICsxIEBACisuLi8uLi9saWIvbGliZGwuc28uMgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYmcuYSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYmcuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzlhYmMyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGliZy5hCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYmllZWUuYSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYmllZWUuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDhkY2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGliaWVlZS5hCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYm0uYSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYm0uYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmJkNDVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGlibS5hCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYm0uc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJtLnNvCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjUyNDQxYzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJtLnNvCkBAIC0wLDAgKzEgQEAKKy4uLy4uL2xpYi9saWJtLnNvLjYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJtY2hlY2suYSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYm1jaGVjay5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ODczNTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJtY2hlY2suYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJuc2wuYSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYm5zbC5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYzIyMjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJuc2wuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJuc2wuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJuc2wuc28KbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uMzdiNTdlNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYm5zbC5zbwpAQCAtMCwwICsxIEBACisuLi8uLi9saWIvbGlibnNsLnNvLjEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJuc3NfY29tcGF0LnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGlibnNzX2NvbXBhdC5zbwpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi44OGZiMDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGlibnNzX2NvbXBhdC5zbwpAQCAtMCwwICsxIEBACisuLi8uLi9saWIvbGlibnNzX2NvbXBhdC5zby4yClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGlibnNzX2Rucy5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYm5zc19kbnMuc28KbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uMzUwMDIxYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYm5zc19kbnMuc28KQEAgLTAsMCArMSBAQAorLi4vLi4vbGliL2xpYm5zc19kbnMuc28uMgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYm5zc19maWxlcy5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYm5zc19maWxlcy5zbwpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi4wZDVkMjE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGlibnNzX2ZpbGVzLnNvCkBAIC0wLDAgKzEgQEAKKy4uLy4uL2xpYi9saWJuc3NfZmlsZXMuc28uMgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYm5zc19oZXNpb2Quc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJuc3NfaGVzaW9kLnNvCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLmZiYmRlOTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJuc3NfaGVzaW9kLnNvCkBAIC0wLDAgKzEgQEAKKy4uLy4uL2xpYi9saWJuc3NfaGVzaW9kLnNvLjIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJuc3NfbmlzLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGlibnNzX25pcy5zbwpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi4zOTA0OWVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGlibnNzX25pcy5zbwpAQCAtMCwwICsxIEBACisuLi8uLi9saWIvbGlibnNzX25pcy5zby4yClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGlibnNzX25pc3BsdXMuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJuc3NfbmlzcGx1cy5zbwpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5iNTQxYWVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGlibnNzX25pc3BsdXMuc28KQEAgLTAsMCArMSBAQAorLi4vLi4vbGliL2xpYm5zc19uaXNwbHVzLnNvLjIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJwdGhyZWFkLmEgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJwdGhyZWFkLmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NkOTc2MwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYnB0aHJlYWQuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJwdGhyZWFkLnNvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGlicHRocmVhZC5zbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmZmYzI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGlicHRocmVhZC5zbwpAQCAtMCwwICsxLDUgQEAKKy8qIEdOVSBsZCBzY3JpcHQKKyAgIFVzZSB0aGUgc2hhcmVkIGxpYnJhcnksIGJ1dCBzb21lIGZ1bmN0aW9ucyBhcmUgb25seSBpbgorICAgdGhlIHN0YXRpYyBsaWJyYXJ5LCBzbyB0cnkgdGhhdCBzZWNvbmRhcmlseS4gICovCitPVVRQVVRfRk9STUFUKGVsZjMyLWxpdHRsZWFybSkKK0dST1VQICggL2xpYi9saWJwdGhyZWFkLnNvLjAgL3Vzci9saWIvbGlicHRocmVhZF9ub25zaGFyZWQuYSApCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJwdGhyZWFkX25vbnNoYXJlZC5hIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGlicHRocmVhZF9ub25zaGFyZWQuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjJlOTQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGlicHRocmVhZF9ub25zaGFyZWQuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJyZXNvbHYuYSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYnJlc29sdi5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZjNiMDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJyZXNvbHYuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJyZXNvbHYuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJyZXNvbHYuc28KbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uYzE5NTlmOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYnJlc29sdi5zbwpAQCAtMCwwICsxIEBACisuLi8uLi9saWIvbGlicmVzb2x2LnNvLjIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJydC5hIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGlicnQuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDBkMzBlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGlicnQuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJydC5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYnJ0LnNvCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjc1ZDM3ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJydC5zbwpAQCAtMCwwICsxIEBACisuLi8uLi9saWIvbGlicnQuc28uMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYnRocmVhZF9kYi5zbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYnRocmVhZF9kYi5zbwpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5lMDVmNjhmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGlidGhyZWFkX2RiLnNvCkBAIC0wLDAgKzEgQEAKKy4uLy4uL2xpYi9saWJ0aHJlYWRfZGIuc28uMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYnV0aWwuYSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYnV0aWwuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTZlODU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIvbGlidXRpbC5hCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliL2xpYnV0aWwuc28gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJ1dGlsLnNvCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjJkNDUwYjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYi9saWJ1dGlsLnNvCkBAIC0wLDAgKzEgQEAKKy4uLy4uL2xpYi9saWJ1dGlsLnNvLjEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYjMyIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIzMgpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi43OTUxNDA1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWIzMgpAQCAtMCwwICsxIEBACitsaWIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYjY0IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWI2NApuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi43OTUxNDA1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9saWI2NApAQCAtMCwwICsxIEBACitsaWIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYmV4ZWMvcHRfY2hvd24gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL2xpYmV4ZWMvcHRfY2hvd24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RiOTlhNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3IvbGliZXhlYy9wdF9jaG93bgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NiaW4vaWNvbnZjb25maWcgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NiaW4vaWNvbnZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzgxZjI5MgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2Jpbi9pY29udmNvbmZpZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NiaW4vbnNjZCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2Jpbi9uc2NkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI2NjYxOTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NiaW4vbnNjZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NiaW4vcnBjaW5mbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2Jpbi9ycGNpbmZvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJiNmMxODMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NiaW4vcnBjaW5mbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQU5TSV9YMy4xMTAtMTk4My5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9BTlNJX1gzLjExMC0xOTgzLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMDk2NjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQU5TSV9YMy4xMTAtMTk4My5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQU5TSV9YMy40LTE5NjguZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQU5TSV9YMy40LTE5NjguZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE5ZThkOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9BTlNJX1gzLjQtMTk2OC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQVJNU0NJSS04Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0FSTVNDSUktOC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGVjNzUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0FSTVNDSUktOC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQVNNT180NDkuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQVNNT180NDkuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQzYTJmNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9BU01PXzQ0OS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQklHNS1IS1NDUy5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9CSUc1LUhLU0NTLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZjRlY2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQklHNS1IS1NDUy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQklHNS5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9CSUc1Lmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MjZjZDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQklHNS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQlJGLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0JSRi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzZmMTYwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0JSRi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQlNfNDczMC5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9CU180NzMwLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0OGU3YzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQlNfNDczMC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQlNfVklFV0RBVEEuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQlNfVklFV0RBVEEuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk4YzJjNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9CU19WSUVXREFUQS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1AxMDAwNy5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9DUDEwMDA3Lmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNmUxNmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1AxMDAwNy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1AxMTI1Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0NQMTEyNS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yzg0Njc1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0NQMTEyNS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1AxMjUwLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0NQMTI1MC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWQ0OWI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0NQMTI1MC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1AxMjUxLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0NQMTI1MS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjgzMGY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0NQMTI1MS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1AxMjUyLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0NQMTI1Mi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDAwNDEzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0NQMTI1Mi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1AxMjUzLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0NQMTI1My5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjVkMjVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0NQMTI1My5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1AxMjU0Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0NQMTI1NC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDNjNGY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0NQMTI1NC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1AxMjU1Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0NQMTI1NS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2IyNjM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0NQMTI1NS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1AxMjU2Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0NQMTI1Ni5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2E4NjliCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0NQMTI1Ni5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1AxMjU3Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0NQMTI1Ny5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGY4MTU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0NQMTI1Ny5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1AxMjU4Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0NQMTI1OC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTllYzM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0NQMTI1OC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1A3MzcuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1A3MzcuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM5NDI3YQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9DUDczNy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1A3NzUuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1A3NzUuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc5NWU5ZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9DUDc3NS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1A5NDkuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1A5NDkuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE2NWNiMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9DUDk0OS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1NBX1oyNDMuNC0xOTg1LTEuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1NBX1oyNDMuNC0xOTg1LTEuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY3OTM5ZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9DU0FfWjI0My40LTE5ODUtMS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1NBX1oyNDMuNC0xOTg1LTIuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1NBX1oyNDMuNC0xOTg1LTIuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE0MzQ5YQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9DU0FfWjI0My40LTE5ODUtMi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1NBX1oyNDMuNC0xOTg1LUdSLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0NTQV9aMjQzLjQtMTk4NS1HUi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzk0N2ZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0NTQV9aMjQzLjQtMTk4NS1HUi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1NOXzM2OTEwMy5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9DU05fMzY5MTAzLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZjVmMmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1NOXzM2OTEwMy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvQ1dJLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0NXSS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjkxOGM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0NXSS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvREVDLU1DUy5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9ERUMtTUNTLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmODczZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvREVDLU1DUy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRElOXzY2MDAzLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0RJTl82NjAwMy5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDkxOWNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0RJTl82NjAwMy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRFNfMjA4OS5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9EU18yMDg5Lmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZmJhYjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRFNfMjA4OS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRUJDRElDLUFULURFLUEuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRUJDRElDLUFULURFLUEuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYwZGZhMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9FQkNESUMtQVQtREUtQS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRUJDRElDLUFULURFLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VCQ0RJQy1BVC1ERS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjJiNzdkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VCQ0RJQy1BVC1ERS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRUJDRElDLUNBLUZSLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VCQ0RJQy1DQS1GUi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmYxMzM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VCQ0RJQy1DQS1GUi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRUJDRElDLURLLU5PLUEuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRUJDRElDLURLLU5PLUEuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UxY2RiYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9FQkNESUMtREstTk8tQS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRUJDRElDLURLLU5PLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VCQ0RJQy1ESy1OTy5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjNiMDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VCQ0RJQy1ESy1OTy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRUJDRElDLUVTLUEuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRUJDRElDLUVTLUEuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWViYjFkNgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9FQkNESUMtRVMtQS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRUJDRElDLUVTLVMuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRUJDRElDLUVTLVMuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JjN2QwZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9FQkNESUMtRVMtUy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRUJDRElDLUVTLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VCQ0RJQy1FUy5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2YyOTY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VCQ0RJQy1FUy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRUJDRElDLUZJLVNFLUEuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRUJDRElDLUZJLVNFLUEuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWViODFjYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9FQkNESUMtRkktU0UtQS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRUJDRElDLUZJLVNFLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VCQ0RJQy1GSS1TRS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWZjOThiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VCQ0RJQy1GSS1TRS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRUJDRElDLUZSLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VCQ0RJQy1GUi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmU0ZGJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VCQ0RJQy1GUi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRUJDRElDLUlTLUZSSVNTLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VCQ0RJQy1JUy1GUklTUy5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Zjc0OTgwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VCQ0RJQy1JUy1GUklTUy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRUJDRElDLUlULmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VCQ0RJQy1JVC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjFjMGUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VCQ0RJQy1JVC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRUJDRElDLVBULmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VCQ0RJQy1QVC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2MwNzc5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VCQ0RJQy1QVC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRUJDRElDLVVLLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VCQ0RJQy1VSy5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjE1Nzg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VCQ0RJQy1VSy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRUJDRElDLVVTLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VCQ0RJQy1VUy5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjFiMDJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VCQ0RJQy1VUy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRUNNQS1DWVJJTExJQy5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9FQ01BLUNZUklMTElDLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmODU3NWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRUNNQS1DWVJJTExJQy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRVMuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRVMuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIzZTlhZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9FUy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRVMyLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VTMi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTYxNDY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VTMi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRVVDLUpJU1gwMjEzLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VVQy1KSVNYMDIxMy5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTBkODUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VVQy1KSVNYMDIxMy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRVVDLUpQLU1TLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VVQy1KUC1NUy5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTE1NGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VVQy1KUC1NUy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRVVDLUpQLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VVQy1KUC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDI5OWU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VVQy1KUC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRVVDLUtSLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VVQy1LUi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWI0N2NmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VVQy1LUi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvRVVDLVRXLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VVQy1UVy5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDg3ZDFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0VVQy1UVy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvR0IxODAzMC5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9HQjE4MDMwLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMDRmZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvR0IxODAzMC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvR0IyMzEyLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0dCMjMxMi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjJhMWYxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0dCMjMxMi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvR0JLLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0dCSy5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTFmMzdkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0dCSy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvR0JfMTk4OC04MC5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9HQl8xOTg4LTgwLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMWE1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvR0JfMTk4OC04MC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvR0VPUkdJQU4tQUNBREVNWS5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9HRU9SR0lBTi1BQ0FERU1ZLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZmNiYjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvR0VPUkdJQU4tQUNBREVNWS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvR0VPUkdJQU4tUFMuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvR0VPUkdJQU4tUFMuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlkMDMyOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9HRU9SR0lBTi1QUy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvR09TVF8xOTc2OC03NC5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9HT1NUXzE5NzY4LTc0Lmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5M2E5NWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvR09TVF8xOTc2OC03NC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvR1JFRUstQ0NJVFQuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvR1JFRUstQ0NJVFQuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFiMjMxYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9HUkVFSy1DQ0lUVC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvR1JFRUs3LU9MRC5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9HUkVFSzctT0xELmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MjY4YWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvR1JFRUs3LU9MRC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvR1JFRUs3Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0dSRUVLNy5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2FlZmE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0dSRUVLNy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSFAtR1JFRUs4Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0hQLUdSRUVLOC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmQ5ZWU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0hQLUdSRUVLOC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSFAtUk9NQU44Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0hQLVJPTUFOOC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTAwYzRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0hQLVJPTUFOOC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSFAtUk9NQU45Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0hQLVJPTUFOOS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDkxZjExCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0hQLVJPTUFOOS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSFAtVEhBSTguZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSFAtVEhBSTguZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZkOThhNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9IUC1USEFJOC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSFAtVFVSS0lTSDguZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSFAtVFVSS0lTSDguZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQzNDBhMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9IUC1UVVJLSVNIOC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMDM3Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTAzNy5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTA0OWU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTAzNy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMDM4Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTAzOC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWYwZGUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTAzOC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMTAwNC5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JQk0xMDA0Lmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YWFmMjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMTAwNC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMTAyNi5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JQk0xMDI2Lmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYzdlZGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMTAyNi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMTA0Ny5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JQk0xMDQ3Lmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NTkyY2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMTA0Ny5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMTEyNC5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JQk0xMTI0Lmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1OGU5Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMTEyNC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMTEyOS5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JQk0xMTI5Lmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZmE2MGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMTEyOS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMTEzMi5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JQk0xMTMyLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YTY0OWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMTEzMi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMTEzMy5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JQk0xMTMzLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1Nzk4MmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMTEzMy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMTE2MC5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JQk0xMTYwLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NDEwMmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMTE2MC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMTE2MS5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JQk0xMTYxLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZDY0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMTE2MS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMTE2Mi5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JQk0xMTYyLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZWMxM2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMTE2Mi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMTE2My5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JQk0xMTYzLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiODNjMmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMTE2My5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMTE2NC5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JQk0xMTY0Lmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2OWY0ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMTE2NC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMjU2Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTI1Ni5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODc1NzI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTI1Ni5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMjczLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTI3My5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTcwMGUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTI3My5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMjc0Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTI3NC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTlkYmYzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTI3NC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMjc1Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTI3NS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzZmYzUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTI3NS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMjc3Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTI3Ny5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzMzMzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTI3Ny5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMjc4Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTI3OC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTk0MDYzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTI3OC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMjgwLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTI4MC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjI3ZTEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTI4MC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMjgxLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTI4MS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTBhNmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTI4MS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMjg0Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTI4NC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2E1NGE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTI4NC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMjg1Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTI4NS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmU0NjczCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTI4NS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMjkwLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTI5MC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTY1NDEzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTI5MC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNMjk3Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTI5Ny5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjNhNDg3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTI5Ny5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNNDIwLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTQyMC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDE3MTZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTQyMC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNNDIzLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTQyMy5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjUzNGI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTQyMy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNNDI0Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTQyNC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTJkMDM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTQyNC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNNDM3Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTQzNy5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWFkMGVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTQzNy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNNTAwLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTUwMC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2QxNDMyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTUwMC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNODUwLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg1MC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTA0Y2JjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg1MC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNODUxLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg1MS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjBlZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg1MS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNODUyLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg1Mi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTMwMGU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg1Mi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNODU1Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg1NS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTJmOGUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg1NS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNODU2Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg1Ni5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzA5OTJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg1Ni5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNODU3Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg1Ny5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWFkNmFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg1Ny5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNODYwLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg2MC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWU0MTFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg2MC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNODYxLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg2MS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDQ4MjJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg2MS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNODYyLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg2Mi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTdmMDI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg2Mi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNODYzLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg2My5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWFjZTRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg2My5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNODY0Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg2NC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTJlMzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg2NC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNODY1Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg2NS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDNlOWY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg2NS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNODY2Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg2Ni5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGMxYWY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg2Ni5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNODY2TkFWLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg2Nk5BVi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmRhZTg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg2Nk5BVi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNODY4Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg2OC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTJmZjc4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg2OC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNODY5Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg2OS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTAxMDllCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg2OS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNODcwLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg3MC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmZjODdmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg3MC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNODcxLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg3MS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzI2NzRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg3MS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNODc0Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg3NC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmQzZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg3NC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNODc1Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg3NS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjRhYzVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg3NS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNODgwLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg4MC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjBkYWM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg4MC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNODkxLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg5MS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjE5NTQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTg5MS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNOTAzLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTkwMy5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTVhZWUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTkwMy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNOTA0Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTkwNC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWFhNDg1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTkwNC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNOTA1Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTkwNS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjExZDNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTkwNS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNOTE4Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTkxOC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGQwMGNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTkxOC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUJNOTIyLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTkyMi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjVjMWExCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lCTTkyMi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSUVDX1AyNy0xLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lFQ19QMjctMS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzNmZTVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lFQ19QMjctMS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSU5JUy04Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lOSVMtOC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDVlZDFmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lOSVMtOC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSU5JUy1DWVJJTExJQy5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JTklTLUNZUklMTElDLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMTdmYTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSU5JUy1DWVJJTExJQy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSU5JUy5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JTklTLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxM2I3MGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSU5JUy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSU5WQVJJQU5ULmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lOVkFSSUFOVC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGZiNjkyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lOVkFSSUFOVC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNJUkktMzM0Mi5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU0lSSS0zMzQyLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZTAzMjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNJUkktMzM0Mi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktMS5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU08tODg1OS0xLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNTM2NTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktMS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktMTAuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktMTAuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIyZTQwMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU08tODg1OS0xMC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktMTEuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktMTEuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VmZjUyMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU08tODg1OS0xMS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktMTMuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktMTMuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NkNmE2MQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU08tODg1OS0xMy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktMTQuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktMTQuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJlNGM1MQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU08tODg1OS0xNC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktMTUuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktMTUuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNlMTVjZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU08tODg1OS0xNS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktMTYuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktMTYuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ4Y2Q5YgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU08tODg1OS0xNi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktMi5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU08tODg1OS0yLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NzlmNzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktMi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktMy5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU08tODg1OS0zLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0Yzg4Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktMy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktNC5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU08tODg1OS00Lmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNjk4ODQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktNC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktNS5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU08tODg1OS01Lmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMzcwNjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktNS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktNi5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU08tODg1OS02Lmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZWJmMzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktNi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktNy5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU08tODg1OS03Lmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NmM5MDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktNy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktOC5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU08tODg1OS04Lmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZjQzZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktOC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktOS5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU08tODg1OS05Lmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NWYxMGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktOS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktOUUuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLTg4NTktOUUuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFkNjVkYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU08tODg1OS05RS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLUlSLTE5Ny5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU08tSVItMTk3Lmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZGU5ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLUlSLTE5Ny5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLUlSLTIwOS5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU08tSVItMjA5Lmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZTRhZmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLUlSLTIwOS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPLUlSLTkwLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lTTy1JUi05MC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzMxYzY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lTTy1JUi05MC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzEwMzY3LUJPWC5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU09fMTAzNjctQk9YLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NjRhNTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzEwMzY3LUJPWC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzEwNjQ2Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lTT18xMDY0Ni5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTkzYjcxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lTT18xMDY0Ni5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzExNTQ4LTEuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzExNTQ4LTEuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiNGQzNgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU09fMTE1NDgtMS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzIwMzMtMTk4My5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU09fMjAzMy0xOTgzLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYWRlOTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzIwMzMtMTk4My5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzU0MjctRVhULmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lTT181NDI3LUVYVC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGNhMDY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0lTT181NDI3LUVYVC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzU0MjcuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzU0MjcuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRhMjdlNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU09fNTQyNy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzU0MjguZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzU0MjguZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFlNzAyMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU09fNTQyOC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzY0Ni5CQVNJQy5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU09fNjQ2LkJBU0lDLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNGJjMjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzY0Ni5CQVNJQy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzY0Ni5JUlYuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzY0Ni5JUlYuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBkZGUzZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU09fNjQ2LklSVi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzY5MzctMi0yNS5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU09fNjkzNy0yLTI1Lmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MDdlNzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzY5MzctMi0yNS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzY5MzctMi1BREQuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzY5MzctMi1BREQuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdlMGI2NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU09fNjkzNy0yLUFERC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzY5MzcuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzY5MzcuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QxYmFmZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU09fNjkzNy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzg4NTktMSxHTC5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU09fODg1OS0xLEdMLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NjE1OTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzg4NTktMSxHTC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzg4NTktU1VQUC5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JU09fODg1OS1TVVBQLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMDRlZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVNPXzg4NTktU1VQUC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVQuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSVQuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg1MjdjMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9JVC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSklTX0M2MjIwLTE5NjktSlAuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSklTX0M2MjIwLTE5NjktSlAuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQzODk4NgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9KSVNfQzYyMjAtMTk2OS1KUC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSklTX0M2MjIwLTE5NjktUk8uZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSklTX0M2MjIwLTE5NjktUk8uZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdiMTU0MQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9KSVNfQzYyMjAtMTk2OS1STy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSklTX0M2MjI5LTE5ODQtQS5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9KSVNfQzYyMjktMTk4NC1BLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MGUwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSklTX0M2MjI5LTE5ODQtQS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSklTX0M2MjI5LTE5ODQtQi1BREQuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSklTX0M2MjI5LTE5ODQtQi1BREQuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ3M2I1OAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9KSVNfQzYyMjktMTk4NC1CLUFERC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSklTX0M2MjI5LTE5ODQtQi5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9KSVNfQzYyMjktMTk4NC1CLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiOTUyNGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSklTX0M2MjI5LTE5ODQtQi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSklTX0M2MjI5LTE5ODQtSEFORC1BREQuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSklTX0M2MjI5LTE5ODQtSEFORC1BREQuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQyY2UwNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9KSVNfQzYyMjktMTk4NC1IQU5ELUFERC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSklTX0M2MjI5LTE5ODQtSEFORC5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9KSVNfQzYyMjktMTk4NC1IQU5ELmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMzdhNjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSklTX0M2MjI5LTE5ODQtSEFORC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSklTX0M2MjI5LTE5ODQtS0FOQS5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9KSVNfQzYyMjktMTk4NC1LQU5BLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NGJlOTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSklTX0M2MjI5LTE5ODQtS0FOQS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSklTX1gwMjAxLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0pJU19YMDIwMS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTlmNDhjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0pJU19YMDIwMS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSk9IQUIuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSk9IQUIuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxODQ0ZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9KT0hBQi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSlVTX0kuQjEuMDAyLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0pVU19JLkIxLjAwMi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjhjNDcwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0pVU19JLkIxLjAwMi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSlVTX0kuQjEuMDAzLU1BQy5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9KVVNfSS5CMS4wMDMtTUFDLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MjQ3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSlVTX0kuQjEuMDAzLU1BQy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSlVTX0kuQjEuMDAzLVNFUkIuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvSlVTX0kuQjEuMDAzLVNFUkIuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEyOTUyYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9KVVNfSS5CMS4wMDMtU0VSQi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvS09JLTguZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvS09JLTguZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM2ZTJmOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9LT0ktOC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvS09JOC1SLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0tPSTgtUi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODA1ZTU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0tPSTgtUi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvS09JOC1SVS5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9LT0k4LVJVLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkOTg5ODQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvS09JOC1SVS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvS09JOC1ULmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0tPSTgtVC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWNhNDVmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0tPSTgtVC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvS09JOC1VLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0tPSTgtVS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjEwYmU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL0tPSTgtVS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvS1NDNTYzNi5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9LU0M1NjM2Lmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNGVhMjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvS1NDNTYzNi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTEFUSU4tR1JFRUstMS5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9MQVRJTi1HUkVFSy0xLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlY2M3YmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTEFUSU4tR1JFRUstMS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTEFUSU4tR1JFRUsuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTEFUSU4tR1JFRUsuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ3ZWEzOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9MQVRJTi1HUkVFSy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTUFDLUNFTlRSQUxFVVJPUEUuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTUFDLUNFTlRSQUxFVVJPUEUuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQxNzhlMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9NQUMtQ0VOVFJBTEVVUk9QRS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTUFDLUNZUklMTElDLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL01BQy1DWVJJTExJQy5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWNlZjk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL01BQy1DWVJJTExJQy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTUFDLUlTLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL01BQy1JUy5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWRhYjE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL01BQy1JUy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTUFDLVNBTUkuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTUFDLVNBTUkuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YzODMyZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9NQUMtU0FNSS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTUFDLVVLLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL01BQy1VSy5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTYzOWJmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL01BQy1VSy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTUFDSU5UT1NILmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL01BQ0lOVE9TSC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDY2ZjcwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL01BQ0lOVE9TSC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTUlLLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL01JSy5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTQwZmZjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL01JSy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTVNaXzc3OTUuMy5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9NU1pfNzc5NS4zLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ODM1NzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTVNaXzc3OTUuMy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTkFUUy1EQU5PLUFERC5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9OQVRTLURBTk8tQURELmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMzE5OGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTkFUUy1EQU5PLUFERC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTkFUUy1EQU5PLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL05BVFMtREFOTy5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODQ5ZGI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL05BVFMtREFOTy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTkFUUy1TRUZJLUFERC5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9OQVRTLVNFRkktQURELmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMzliM2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTkFUUy1TRUZJLUFERC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTkFUUy1TRUZJLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL05BVFMtU0VGSS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzMxZGMyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL05BVFMtU0VGSS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTkNfTkMwMC0xMC5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9OQ19OQzAwLTEwLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNWQyZDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTkNfTkMwMC0xMC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTkVYVFNURVAuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTkVYVFNURVAuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJjYTVkMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9ORVhUU1RFUC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTkZfWl82Mi0wMTAuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTkZfWl82Mi0wMTAuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg5ZjgzMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9ORl9aXzYyLTAxMC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTkZfWl82Mi0wMTBfMTk3My5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9ORl9aXzYyLTAxMF8xOTczLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYmRhYWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTkZfWl82Mi0wMTBfMTk3My5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTlNfNDU1MS0xLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL05TXzQ1NTEtMS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDNjOWFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL05TXzQ1NTEtMS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvTlNfNDU1MS0yLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL05TXzQ1NTEtMi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTBkZTg4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL05TXzQ1NTEtMi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvUFQuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvUFQuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkwYTZhYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9QVC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvUFQxNTQuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvUFQxNTQuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY4MTQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9QVDE1NC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvUFQyLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL1BUMi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzY0ODM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL1BUMi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvUksxMDQ4Lmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL1JLMTA0OC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzE5OGI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL1JLMTA0OC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvU0FNSS1XUzIuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvU0FNSS1XUzIuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIzYTAzMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9TQU1JLVdTMi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvU0FNSS5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9TQU1JLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMjI1MjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvU0FNSS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvU0VOXzg1MDIwMF9CLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL1NFTl84NTAyMDBfQi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2YyMmUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL1NFTl84NTAyMDBfQi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvU0VOXzg1MDIwMF9DLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL1NFTl84NTAyMDBfQy5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTBkYzBiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL1NFTl84NTAyMDBfQy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvU0hJRlRfSklTLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL1NISUZUX0pJUy5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTMwZmU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL1NISUZUX0pJUy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvU0hJRlRfSklTWDAyMTMuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvU0hJRlRfSklTWDAyMTMuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU3YWY4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9TSElGVF9KSVNYMDIxMy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvVC4xMDEtRzIuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvVC4xMDEtRzIuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY2NThiOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9ULjEwMS1HMi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvVC42MS03QklULmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL1QuNjEtN0JJVC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjMzNjJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL1QuNjEtN0JJVC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvVC42MS04QklULmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL1QuNjEtOEJJVC5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjVlODAwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL1QuNjEtOEJJVC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvVENWTjU3MTItMS5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9UQ1ZONTcxMi0xLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNjc1MjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvVENWTjU3MTItMS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvVElTLTYyMC5neiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9USVMtNjIwLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZTc2MTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvVElTLTYyMC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvVFNDSUkuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvVFNDSUkuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRhYjEyMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9UU0NJSS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvVVRGLTguZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvVVRGLTguZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZkYmMwZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9VVEYtOC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvVklERU9URVgtU1VQUEwuZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvVklERU9URVgtU1VQUEwuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRjN2Q4MAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9WSURFT1RFWC1TVVBQTC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvVklTQ0lJLmd6IGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL1ZJU0NJSS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzkzNDhiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzL1ZJU0NJSS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvV0lORE9XUy0zMUouZ3ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vY2hhcm1hcHMvV0lORE9XUy0zMUouZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA1MDQ0MgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9jaGFybWFwcy9XSU5ET1dTLTMxSi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9QT1NJWCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL1BPU0lYCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYzViNGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9QT1NJWApAQCAtMCwwICsxLDMzMSBAQAorIyBQT1NJWCBTdGFuZGFyZCBMb2NhbGUKKyMKKyMgQXMgcGVyIElTTy9JRUMgOTk0NS0yOjE5OTMgc3BlY2lmaWNhdGlvbnMKKyMgZXhjZXB0IGZvciB0aGVzZSBhZGRpdGlvbmFsIGlkZW50aWZ5aW5nIGNvbW1lbnRzCisjCisjIFNvdXJjZTogSVNPL0lFQyBKVEMxL1NDMjIvV0cxNQorIyBBZGRyZXNzOiBDL08gREtVVUcsIEZydWViamVyZ3ZlaiAzCisjICAgIERLLTIxMDAgQ29wZW5oYWdlbiBPLCBEZW5tYXJrCisjIENvbnRhY3Q6IEtlbGQgU2ltb25zZW4KKyMgRW1haWw6IEtlbGQuU2ltb25zZW5AZGt1dWcuZGsKKyMgVGVsOiArNDUgLSAzOTE3OTk0NAorIyBGYXg6ICs0NSAtIDMxMjA4OTQ4CisjIExhbmd1YWdlOiBQT1NJWAorIyBUZXJyaXRvcnk6CisjIFJldmlzaW9uOiAxLjEKKyMgRGF0ZTogMTk5Ny0wMy0xNQorIyBBcHBsaWNhdGlvbjogZ2VuZXJhbAorIyBVc2VyczogZ2VuZXJhbAorIyBSZXBlcnRvaXJlbWFwOiBQT1NJWAorIyBDaGFyc2V0OiBJU082NDY6MTk5MworIyBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvIGZvcgorIyBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19DVFlQRQorIyBUaGUgZm9sbG93aW5nIGlzIHRoZSBQT1NJWCBMb2NhbGUgTENfQ1RZUEUuCisjICJhbHBoYSIgaXMgYnkgZGVmYXVsdCAidXBwZXIiIGFuZCAibG93ZXIiCisjICJhbG51bSIgaXMgYnkgZGVmaW5pdG9uICJhbHBoYSIgYW5kICJkaWdpdCIKKyMgInByaW50IiBpcyBieSBkZWZhdWx0ICJhbG51bSIsICJwdW5jdCIgYW5kIHRoZSA8VTAwMjA+IGNoYXJhY3RlcgorIyAiZ3JhcGgiIGlzIGJ5IGRlZmF1bHQgImFsbnVtIiBhbmQgInB1bmN0IgorIwordXBwZXIgICA8VTAwNDE+OzxVMDA0Mj47PFUwMDQzPjs8VTAwNDQ+OzxVMDA0NT47PFUwMDQ2Pjs8VTAwNDc+OzxVMDA0OD47XAorICAgICAgICA8VTAwNDk+OzxVMDA0QT47PFUwMDRCPjs8VTAwNEM+OzxVMDA0RD47PFUwMDRFPjs8VTAwNEY+OzxVMDA1MD47XAorICAgICAgICA8VTAwNTE+OzxVMDA1Mj47PFUwMDUzPjs8VTAwNTQ+OzxVMDA1NT47PFUwMDU2Pjs8VTAwNTc+OzxVMDA1OD47XAorICAgICAgICA8VTAwNTk+OzxVMDA1QT4KKyMKK2xvd2VyICAgPFUwMDYxPjs8VTAwNjI+OzxVMDA2Mz47PFUwMDY0Pjs8VTAwNjU+OzxVMDA2Nj47PFUwMDY3Pjs8VTAwNjg+O1wKKyAgICAgICAgPFUwMDY5Pjs8VTAwNkE+OzxVMDA2Qj47PFUwMDZDPjs8VTAwNkQ+OzxVMDA2RT47PFUwMDZGPjs8VTAwNzA+O1wKKyAgICAgICAgPFUwMDcxPjs8VTAwNzI+OzxVMDA3Mz47PFUwMDc0Pjs8VTAwNzU+OzxVMDA3Nj47PFUwMDc3Pjs8VTAwNzg+O1wKKyAgICAgICAgPFUwMDc5Pjs8VTAwN0E+CisjCitkaWdpdCAgIDxVMDAzMD47PFUwMDMxPjs8VTAwMzI+OzxVMDAzMz47PFUwMDM0PjtcCisgICAgICAgIDxVMDAzNT47PFUwMDM2Pjs8VTAwMzc+OzxVMDAzOD47PFUwMDM5PgorIworc3BhY2UgICA8VTAwMDk+OzxVMDAwQT47PFUwMDBCPjs8VTAwMEM+O1wKKyAgICAgICAgPFUwMDBEPjs8VTAwMjA+CisjCitjbnRybCAgIDxVMDAwNz47PFUwMDA4Pjs8VTAwMDk+OzxVMDAwQT47PFUwMDBCPjtcCisgICAgICAgIDxVMDAwQz47PFUwMDBEPjtcCisgICAgICAgIDxVMDAwMD47PFUwMDAxPjs8VTAwMDI+OzxVMDAwMz47PFUwMDA0Pjs8VTAwMDU+OzxVMDAwNj47PFUwMDBFPjtcCisgICAgICAgIDxVMDAwRj47PFUwMDEwPjs8VTAwMTE+OzxVMDAxMj47PFUwMDEzPjs8VTAwMTQ+OzxVMDAxNT47PFUwMDE2PjtcCisgICAgICAgIDxVMDAxNz47PFUwMDE4Pjs8VTAwMTk+OzxVMDAxQT47PFUwMDFCPjs8VTAwMUM+OzxVMDAxRD47PFUwMDFFPjtcCisgICAgICAgIDxVMDAxRj47PFUwMDdGPgorIworcHVuY3QgICA8VTAwMjE+OzxVMDAyMj47PFUwMDIzPjtcCisgICAgICAgIDxVMDAyND47PFUwMDI1Pjs8VTAwMjY+OzxVMDAyNz47XAorICAgICAgICA8VTAwMjg+OzxVMDAyOT47PFUwMDJBPjtcCisgICAgICAgIDxVMDAyQj47PFUwMDJDPjs8VTAwMkQ+OzxVMDAyRT47PFUwMDJGPjtcCisgICAgICAgIDxVMDAzQT47PFUwMDNCPjs8VTAwM0M+OzxVMDAzRD47XAorICAgICAgICA8VTAwM0U+OzxVMDAzRj47PFUwMDQwPjtcCisgICAgICAgIDxVMDA1Qj47PFUwMDVDPjs8VTAwNUQ+O1wKKyAgICAgICAgPFUwMDVFPjs8VTAwNUY+OzxVMDA2MD47XAorICAgICAgICA8VTAwN0I+OzxVMDA3Qz47PFUwMDdEPjs8VTAwN0U+CisjCit4ZGlnaXQgIDxVMDAzMD47PFUwMDMxPjs8VTAwMzI+OzxVMDAzMz47PFUwMDM0Pjs8VTAwMzU+OzxVMDAzNj47PFUwMDM3PjtcCisgICAgICAgIDxVMDAzOD47PFUwMDM5Pjs8VTAwNDE+OzxVMDA0Mj47PFUwMDQzPjs8VTAwNDQ+OzxVMDA0NT47PFUwMDQ2PjtcCisgICAgICAgIDxVMDA2MT47PFUwMDYyPjs8VTAwNjM+OzxVMDA2ND47PFUwMDY1Pjs8VTAwNjY+CisjCitibGFuayAgIDxVMDAyMD47PFUwMDA5PgorIwordG9sb3dlciAoPFUwMDQxPiw8VTAwNjE+KTsoPFUwMDQyPiw8VTAwNjI+KTsoPFUwMDQzPiw8VTAwNjM+KTtcCisgICAgICAgICg8VTAwNDQ+LDxVMDA2ND4pOyg8VTAwNDU+LDxVMDA2NT4pOyg8VTAwNDY+LDxVMDA2Nj4pO1wKKyAgICAgICAgKDxVMDA0Nz4sPFUwMDY3Pik7KDxVMDA0OD4sPFUwMDY4Pik7KDxVMDA0OT4sPFUwMDY5Pik7XAorICAgICAgICAoPFUwMDRBPiw8VTAwNkE+KTsoPFUwMDRCPiw8VTAwNkI+KTsoPFUwMDRDPiw8VTAwNkM+KTtcCisgICAgICAgICg8VTAwNEQ+LDxVMDA2RD4pOyg8VTAwNEU+LDxVMDA2RT4pOyg8VTAwNEY+LDxVMDA2Rj4pO1wKKyAgICAgICAgKDxVMDA1MD4sPFUwMDcwPik7KDxVMDA1MT4sPFUwMDcxPik7KDxVMDA1Mj4sPFUwMDcyPik7XAorICAgICAgICAoPFUwMDUzPiw8VTAwNzM+KTsoPFUwMDU0Piw8VTAwNzQ+KTsoPFUwMDU1Piw8VTAwNzU+KTtcCisgICAgICAgICg8VTAwNTY+LDxVMDA3Nj4pOyg8VTAwNTc+LDxVMDA3Nz4pOyg8VTAwNTg+LDxVMDA3OD4pO1wKKyAgICAgICAgKDxVMDA1OT4sPFUwMDc5Pik7KDxVMDA1QT4sPFUwMDdBPikKKyMKK3RvdXBwZXIgKDxVMDA2MT4sPFUwMDQxPik7KDxVMDA2Mj4sPFUwMDQyPik7KDxVMDA2Mz4sPFUwMDQzPik7XAorICAgICAgICAoPFUwMDY0Piw8VTAwNDQ+KTsoPFUwMDY1Piw8VTAwNDU+KTsoPFUwMDY2Piw8VTAwNDY+KTtcCisgICAgICAgICg8VTAwNjc+LDxVMDA0Nz4pOyg8VTAwNjg+LDxVMDA0OD4pOyg8VTAwNjk+LDxVMDA0OT4pO1wKKyAgICAgICAgKDxVMDA2QT4sPFUwMDRBPik7KDxVMDA2Qj4sPFUwMDRCPik7KDxVMDA2Qz4sPFUwMDRDPik7XAorICAgICAgICAoPFUwMDZEPiw8VTAwNEQ+KTsoPFUwMDZFPiw8VTAwNEU+KTsoPFUwMDZGPiw8VTAwNEY+KTtcCisgICAgICAgICg8VTAwNzA+LDxVMDA1MD4pOyg8VTAwNzE+LDxVMDA1MT4pOyg8VTAwNzI+LDxVMDA1Mj4pO1wKKyAgICAgICAgKDxVMDA3Mz4sPFUwMDUzPik7KDxVMDA3ND4sPFUwMDU0Pik7KDxVMDA3NT4sPFUwMDU1Pik7XAorICAgICAgICAoPFUwMDc2Piw8VTAwNTY+KTsoPFUwMDc3Piw8VTAwNTc+KTsoPFUwMDc4Piw8VTAwNTg+KTtcCisgICAgICAgICg8VTAwNzk+LDxVMDA1OT4pOyg8VTAwN0E+LDxVMDA1QT4pCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorIyBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX0NPTExBVEUgY2F0ZWdvcnkuCisjIFRoZSBvcmRlciBpcyB0aGUgc2FtZSBhcyBpbiB0aGUgQVNDSUkgY29kZSBzZXQuCitvcmRlcl9zdGFydCBmb3J3YXJkCis8VTAwMDA+Cis8VTAwMDE+Cis8VTAwMDI+Cis8VTAwMDM+Cis8VTAwMDQ+Cis8VTAwMDU+Cis8VTAwMDY+Cis8VTAwMDc+Cis8VTAwMDg+Cis8VTAwMDk+Cis8VTAwMEE+Cis8VTAwMEI+Cis8VTAwMEM+Cis8VTAwMEQ+Cis8VTAwMEU+Cis8VTAwMEY+Cis8VTAwMTA+Cis8VTAwMTE+Cis8VTAwMTI+Cis8VTAwMTM+Cis8VTAwMTQ+Cis8VTAwMTU+Cis8VTAwMTY+Cis8VTAwMTc+Cis8VTAwMTg+Cis8VTAwMTk+Cis8VTAwMUE+Cis8VTAwMUI+Cis8VTAwMUM+Cis8VTAwMUQ+Cis8VTAwMUU+Cis8VTAwMUY+Cis8VTAwMjA+Cis8VTAwMjE+Cis8VTAwMjI+Cis8VTAwMjM+Cis8VTAwMjQ+Cis8VTAwMjU+Cis8VTAwMjY+Cis8VTAwMjc+Cis8VTAwMjg+Cis8VTAwMjk+Cis8VTAwMkE+Cis8VTAwMkI+Cis8VTAwMkM+Cis8VTAwMkQ+Cis8VTAwMkU+Cis8VTAwMkY+Cis8VTAwMzA+Cis8VTAwMzE+Cis8VTAwMzI+Cis8VTAwMzM+Cis8VTAwMzQ+Cis8VTAwMzU+Cis8VTAwMzY+Cis8VTAwMzc+Cis8VTAwMzg+Cis8VTAwMzk+Cis8VTAwM0E+Cis8VTAwM0I+Cis8VTAwM0M+Cis8VTAwM0Q+Cis8VTAwM0U+Cis8VTAwM0Y+Cis8VTAwNDA+Cis8VTAwNDE+Cis8VTAwNDI+Cis8VTAwNDM+Cis8VTAwNDQ+Cis8VTAwNDU+Cis8VTAwNDY+Cis8VTAwNDc+Cis8VTAwNDg+Cis8VTAwNDk+Cis8VTAwNEE+Cis8VTAwNEI+Cis8VTAwNEM+Cis8VTAwNEQ+Cis8VTAwNEU+Cis8VTAwNEY+Cis8VTAwNTA+Cis8VTAwNTE+Cis8VTAwNTI+Cis8VTAwNTM+Cis8VTAwNTQ+Cis8VTAwNTU+Cis8VTAwNTY+Cis8VTAwNTc+Cis8VTAwNTg+Cis8VTAwNTk+Cis8VTAwNUE+Cis8VTAwNUI+Cis8VTAwNUM+Cis8VTAwNUQ+Cis8VTAwNUU+Cis8VTAwNUY+Cis8VTAwNjA+Cis8VTAwNjE+Cis8VTAwNjI+Cis8VTAwNjM+Cis8VTAwNjQ+Cis8VTAwNjU+Cis8VTAwNjY+Cis8VTAwNjc+Cis8VTAwNjg+Cis8VTAwNjk+Cis8VTAwNkE+Cis8VTAwNkI+Cis8VTAwNkM+Cis8VTAwNkQ+Cis8VTAwNkU+Cis8VTAwNkY+Cis8VTAwNzA+Cis8VTAwNzE+Cis8VTAwNzI+Cis8VTAwNzM+Cis8VTAwNzQ+Cis8VTAwNzU+Cis8VTAwNzY+Cis8VTAwNzc+Cis8VTAwNzg+Cis8VTAwNzk+Cis8VTAwN0E+Cis8VTAwN0I+Cis8VTAwN0M+Cis8VTAwN0Q+Cis8VTAwN0U+Cis8VTAwN0Y+CitVTkRFRklORUQKK29yZGVyX2VuZAorIworRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKKyMgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yCisjIHRoZSBMQ19NT05FVEFSWSBjYXRlZ29yeS4KKyMKK2ludF9jdXJyX3N5bWJvbCAgICAgIiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgIiIKK21vbl9kZWNpbWFsX3BvaW50ICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICIiCittb25fZ3JvdXBpbmcgICAgICAgIC0xCitwb3NpdGl2ZV9zaWduICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICIiCitpbnRfZnJhY19kaWdpdHMgICAgIC0xCitmcmFjX2RpZ2l0cyAgICAgICAgIC0xCitwX2NzX3ByZWNlZGVzICAgICAgIC0xCitwX3NlcF9ieV9zcGFjZSAgICAgIC0xCituX2NzX3ByZWNlZGVzICAgICAgIC0xCituX3NlcF9ieV9zcGFjZSAgICAgIC0xCitwX3NpZ25fcG9zbiAgICAgICAgIC0xCituX3NpZ25fcG9zbiAgICAgICAgIC0xCisjCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworIyBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IKKyMgdGhlIExDX05VTUVSSUMgY2F0ZWdvcnkuCisjCitkZWNpbWFsX3BvaW50ICAgIjxVMDAyRT4iCit0aG91c2FuZHNfc2VwICAgIiIKK2dyb3VwaW5nICAgICAgICAtMQorIworRU5EIExDX05VTUVSSUMKKworTENfVElNRQorIyBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IKKyMgdGhlIExDX1RJTUUgY2F0ZWdvcnkuCisjCisjIEFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZXMgKCVzKQorYWJkYXkgICAiPFUwMDUzPjxVMDA3NT48VTAwNkU+IjsiPFUwMDREPjxVMDA2Rj48VTAwNkU+IjtcCisgICAgICAgICI8VTAwNTQ+PFUwMDc1PjxVMDA2NT4iOyI8VTAwNTc+PFUwMDY1PjxVMDA2ND4iO1wKKyAgICAgICAgIjxVMDA1ND48VTAwNjg+PFUwMDc1PiI7IjxVMDA0Nj48VTAwNzI+PFUwMDY5PiI7XAorICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNzQ+IgorIworIyBGdWxsIHdlZWtkYXkgbmFtZXMgKCVBKQorZGF5ICAgICAiPFUwMDUzPjxVMDA3NT48VTAwNkU+PFUwMDY0PjxVMDA2MT48VTAwNzk+IjtcCisgICAgICAgICI8VTAwNEQ+PFUwMDZGPjxVMDA2RT48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iO1wKKyAgICAgICAgIjxVMDA1ND48VTAwNzU+PFUwMDY1PjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iO1wKKyAgICAgICAgIjxVMDA1Nz48VTAwNjU+PFUwMDY0PjxVMDA2RT48VTAwNjU+PFUwMDczPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7XAorICAgICAgICAiPFUwMDU0PjxVMDA2OD48VTAwNzU+PFUwMDcyPjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iO1wKKyAgICAgICAgIjxVMDA0Nj48VTAwNzI+PFUwMDY5PjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7XAorICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNzQ+PFUwMDc1PjxVMDA3Mj48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iCisjCisjIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzICglYikKK2FibW9uICAgIjxVMDA0QT48VTAwNjE+PFUwMDZFPiI7IjxVMDA0Nj48VTAwNjU+PFUwMDYyPiI7XAorICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzI+IjsiPFUwMDQxPjxVMDA3MD48VTAwNzI+IjtcCisgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3OT4iOyI8VTAwNEE+PFUwMDc1PjxVMDA2RT4iO1wKKyAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZDPiI7IjxVMDA0MT48VTAwNzU+PFUwMDY3PiI7XAorICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNzA+IjsiPFUwMDRGPjxVMDA2Mz48VTAwNzQ+IjtcCisgICAgICAgICI8VTAwNEU+PFUwMDZGPjxVMDA3Nj4iOyI8VTAwNDQ+PFUwMDY1PjxVMDA2Mz4iCisjCisjIEZ1bGwgbW9udGggbmFtZXMgKCVCKQorbW9uICAgICAiPFUwMDRBPjxVMDA2MT48VTAwNkU+PFUwMDc1PjxVMDA2MT48VTAwNzI+PFUwMDc5PiI7XAorICAgICAgICAiPFUwMDQ2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA3NT48VTAwNjE+PFUwMDcyPjxVMDA3OT4iO1wKKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPjxVMDA2Mz48VTAwNjg+IjtcCisgICAgICAgICI8VTAwNDE+PFUwMDcwPjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7XAorICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+IjtcCisgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2RT48VTAwNjU+IjtcCisgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2Qz48VTAwNzk+IjtcCisgICAgICAgICI8VTAwNDE+PFUwMDc1PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND4iO1wKKyAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7XAorICAgICAgICAiPFUwMDRGPjxVMDA2Mz48VTAwNzQ+PFUwMDZGPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7XAorICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iO1wKKyAgICAgICAgIjxVMDA0ND48VTAwNjU+PFUwMDYzPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IgorIworIyBFcXVpdmFsZW50IG9mIEFNL1BNICglcCkgICAgICAiQU0iLyJQTSIKK2FtX3BtICAgIjxVMDA0MT48VTAwNEQ+IjsiPFUwMDUwPjxVMDA0RD4iCisjCisjIEFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24gKCVjKQorIyAgICAgICAiJWEgJWIgJWUgJUg6JU06JVMgJVkiCitkX3RfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1PlwKKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPlwKKzxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKKyMKKyMgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbiAoJXgpICAgIiVtLyVkLyV5IgorZF9mbXQgICAiPFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA3OT4iCisjCisjIEFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24gKCVYKSAgICIlSDolTTolUyIKK3RfZm10ICAgIjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+IgorIworIyBBcHByb3ByaWF0ZSAxMiBoIHRpbWUgcmVwcmVzZW50YXRpb24gKCVyKSAgICIlSTolTTolUyAlcCIKK3RfZm10X2FtcG0gIjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+XAorPFUwMDIwPjxVMDAyNT48VTAwNzA+IgorIworIyBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uIChkYXRlKDEpKSAgICIlYSAlYiAlZSAlSDolTTolUyAlWiAlWSIKK2RhdGVfZm10CSI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCisjIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvcgorIyB0aGUgTENfTlVNRVJJQyBjYXRlZ29yeS4KKyMKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDc5PjxVMDA1OT48VTAwNUQ+IgorIworbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD4iCitFTkQgTENfTUVTU0FHRVMKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FhX0RKIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYWFfREoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg0YjhjNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FhX0RKCkBAIC0wLDAgKzEsMjc3IEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSBBZmFyIGxhbmd1YWdlIGxvY2FsZSBmb3IgRGppYm91dGkgKENhZHUvTGFhcW8gRGlhbGVjdHMpLgorJQorJSBDaGFyc2V0OiBJU08tODg1OS0xCislCislIEFmYXIgdGVybXMgcHJvdmlkZWQgYnkgTW9oYW1lZCBPYmFrYXIgPGxvdWJha0A2c2Vucy5jb20+IG9mIHRoZQorJSBBZmFyIENpdmlsaXphdGlvbiBSZXNlYXJjaGVyLCBNZWxrYSBXZXJlciBSZXNlYXJjaCBDZW50ZXIuCislIFByZXBhcmVkIGFuZCBjb250cmlidXRlZCB0byBnbGliYyBieSBEYW5pZWwgWWFjb2IgPGxvY2FsZXNAZ2Vlei5vcmc+LgorJQorJSBUaGlzIGxvY2FsZSBkYXRhIGhhcyBiZWVuIGRldmVsb3BlZCB1bmRlciB0aGUgWWVoYSBQcm9qZWN0OgorJSAgICAgIGh0dHA6Ly95ZWhhLnNvdXJjZWZvcmdlLm5ldC8KKyUKKyUgYnVpbGQgd2l0aDogbG9jYWxlZGVmIC1mIElTTy04ODU5LTEgLWkgYWFfREogYWFfREoKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKKworTENfSURFTlRJRklDQVRJT04KKyUKK3RpdGxlICAgICAgIkFmYXIgbGFuZ3VhZ2UgbG9jYWxlIGZvciBEamlib3V0aSAoQ2FkdS9MYWFxbyBEaWFsZWN0cykuIgorc291cmNlICAgICAiR2UnZXogRnJvbnRpZXIgRm91bmRhdGlvbiIKK2FkZHJlc3MgICAgIjc4MDIgU29sb21vbiBTZWFsIERyLiwgU3ByaW5nZmllbGQsIFZBIDIyMTUyLCBVU0EiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJsb2NhbGVzQGdlZXoub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiYWEiCit0ZXJyaXRvcnkgICJESiIKK3JldmlzaW9uICAgIjAuMjAiCitkYXRlICAgICAgICIyMDAzLTA3LTA1IgorJQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTUVBU1VSRU1FTlQKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJwb3NpeDoxOTkzIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19URUxFUEhPTkUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfVElNRQorJQorRU5EIExDX0lERU5USUZJQ0FUSU9OCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIExhdGluIENoYXJhY3RlciBTZXQgU3BlY2lmYyBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAiaTE4biIKKwordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIERqaWJvdXRpIFNwZWNpZmMgYW5kIFNoYXJlZCBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfTUVBU1VSRU1FTlQKKyUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTUVBU1VSRU1FTlQgY2F0ZWdvcnkuCislCittZWFzdXJlbWVudCAxCislCitFTkQgTENfTUVBU1VSRU1FTlQKKworCitMQ19NT05FVEFSWQorJQoraW50X2N1cnJfc3ltYm9sICAgICAgICI8VTAwNDQ+PFUwMDRBPjxVMDA0Nj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICI8VTAwMjQ+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICI8VTAwMjA+IgorbW9uX2dyb3VwaW5nICAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgMAorbl9jc19wcmVjZWRlcyAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAwCitwX3NpZ25fcG9zbiAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgIDEKKyUKK0VORCBMQ19NT05FVEFSWQorCisKK0xDX05VTUVSSUMKKyUKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OVU1FUklDIGNhdGVnb3J5LgorJQorZGVjaW1hbF9wb2ludCAgICAgICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgIiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgMDswCislCitFTkQgTENfTlVNRVJJQworCisKK0xDX1BBUEVSCislCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX1BBUEVSIGNhdGVnb3J5LgorJQoraGVpZ2h0ICAgICAgMjk3Cit3aWR0aCAgICAgICAyMTAKKyUKK0VORCBMQ19QQVBFUgorCisKK0xDX1RFTEVQSE9ORQorJQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19URUxFUEhPTkUgY2F0ZWdvcnkuCislCit0ZWxfZG9tX2ZtdCAgICAiPFUwMDI1PjxVMDA2MT48VTAwMkQ+PFUwMDI1PjxVMDA2Qz4iCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzMj48VTAwMzU+PFUwMDMzPiIKK2ludF9zZWxlY3QgICAgICI8VTAwMzA+PFUwMDMwPiIKKyUKK0VORCBMQ19URUxFUEhPTkUKKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSAgQWZhci9ESiBTcGVjaWZpYyBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfQUREUkVTUworJQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19BRERSRVNTIGNhdGVnb3J5LgorJQorcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3Mj4iCitjb3VudHJ5X25hbWUgICI8VTAwNTk+PFUwMDYxPjxVMDA2Mj48VTAwNzU+PFUwMDc1PjxVMDA3ND48VTAwNjk+IgorY291bnRyeV9wb3N0ICAiPFUwMDQ0PjxVMDA0QT48VTAwNDk+IgorY291bnRyeV9hYjIgICAiPFUwMDQ0PjxVMDA0QT4iCitjb3VudHJ5X2FiMyAgICI8VTAwNDQ+PFUwMDRBPjxVMDA0OT4iCitjb3VudHJ5X251bSAgIDI2MgorJSBjb3VudHJ5X2NhciAgIHVua25vd24KKyUgY291bnRyeV9pc2JuICB1bmtub3duLCBOZWVkIElTTyAyMTA4CitsYW5nX25hbWUgICAgICI8VTAwNTE+PFUwMDYxPjxVMDA2Nj48VTAwNjE+PFUwMDcyPiIKK2xhbmdfYWIgICAgICAgIjxVMDA2MT48VTAwNjE+IgorbGFuZ190ZXJtICAgICAiPFUwMDYxPjxVMDA2MT48VTAwNzI+IgorbGFuZ19saWIgICAgICAiPFUwMDYxPjxVMDA2MT48VTAwNzI+IgorJQorRU5EIExDX0FERFJFU1MKKworCitMQ19NRVNTQUdFUworJQoreWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNkY+PFUwMDRGPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkQ+PFUwMDZFPjxVMDA0RD48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorJQorRU5EIExDX01FU1NBR0VTCisKKworTENfTkFNRQorJQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OQU1FIGNhdGVnb3J5LgorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorbmFtZV9nZW4gICAgIiIKK25hbWVfbXIgICAgICI8VTAwNTQ+PFUwMDZGPjxVMDA2Rj48VTAwNjI+PFUwMDZGPjxVMDA2Qj48VTAwNkY+PFUwMDc5PjxVMDA3ND48VTAwNjE+IgorbmFtZV9tcnMgICAgIjxVMDA0Nz48VTAwNjk+PFUwMDczPjxVMDA3ND48VTAwNjk+IgorbmFtZV9taXNzICAgIjxVMDA0RD48VTAwNjE+PFUwMDcxPjxVMDA2MT48VTAwNkU+PFUwMDc4PjxVMDA2MT4iCituYW1lX21zICAgICAiIgorJQorRU5EIExDX05BTUUKKworCitMQ19USU1FCislCislIEFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZXMgKCVhKQorJQorYWJkYXkgICAgIjxVMDA2MT48VTAwNjM+PFUwMDYxPiI7LworICAgICAgICAgIjxVMDA2NT48VTAwNzQ+PFUwMDZDPiI7LworICAgICAgICAgIjxVMDA3ND48VTAwNjE+PFUwMDZDPiI7LworICAgICAgICAgIjxVMDA2MT48VTAwNzI+PFUwMDYyPiI7LworICAgICAgICAgIjxVMDA2Qj48VTAwNjE+PFUwMDZEPiI7LworICAgICAgICAgIjxVMDA2Nz48VTAwNzU+PFUwMDZEPiI7LworICAgICAgICAgIjxVMDA3Mz48VTAwNjE+PFUwMDYyPiIKKyUKKyUgRnVsbCB3ZWVrZGF5IG5hbWVzICglQSkKKyUKK2RheSAgICAgICI8VTAwNDE+PFUwMDYzPjxVMDA2MT48VTAwNjE+PFUwMDY0PjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNDU+PFUwMDc0PjxVMDA2Qz48VTAwNjU+PFUwMDY1PjxVMDA2RT48VTAwNjk+IjsvCisgICAgICAgICAiPFUwMDU0PjxVMDA2MT48VTAwNkM+PFUwMDYxPjxVMDA2MT48VTAwNzQ+PFUwMDYxPiI7LworICAgICAgICAgIjxVMDA0MT48VTAwNzI+PFUwMDYyPjxVMDA2MT48VTAwNzE+PFUwMDYxPiI7LworICAgICAgICAgIjxVMDA0Qj48VTAwNjE+PFUwMDZEPjxVMDA2OT48VTAwNjk+PFUwMDczPjxVMDA2OT4iOy8KKyAgICAgICAgICI8VTAwNDc+PFUwMDc1PjxVMDA2RD48VTAwNzE+PFUwMDYxPjxVMDA3ND48VTAwNjE+IjsvCisgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNjI+PFUwMDc0PjxVMDA2OT4iCislCislIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzICglYikKKyUKK2FibW9uICAgICI8VTAwNzE+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgICI8VTAwNkU+PFUwMDYxPjxVMDA2OD4iOy8KKyAgICAgICAgICI8VTAwNjM+PFUwMDY5PjxVMDA2Nz4iOy8KKyAgICAgICAgICI8VTAwNjE+PFUwMDY3PjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNjM+PFUwMDYxPjxVMDA3OD4iOy8KKyAgICAgICAgICI8VTAwNzE+PFUwMDYxPjxVMDA3Mz4iOy8KKyAgICAgICAgICI8VTAwNzE+PFUwMDYxPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNkM+PFUwMDY1PjxVMDA3MT4iOy8KKyAgICAgICAgICI8VTAwNzc+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICI8VTAwNjQ+PFUwMDY5PjxVMDA3ND4iOy8KKyAgICAgICAgICI8VTAwNzg+PFUwMDY5PjxVMDA2RD4iOy8KKyAgICAgICAgICI8VTAwNkI+PFUwMDYxPjxVMDA3OD4iCislCislIEZ1bGwgbW9udGggbmFtZXMgKCVCKQorJQorbW9uICAgICAgIjxVMDA1MT48VTAwNzU+PFUwMDZFPjxVMDA3OD48VTAwNjE+PFUwMDIwPjxVMDA0Nz48VTAwNjE+PFUwMDcyPjxVMDA2MT48VTAwNjI+PFUwMDZDPjxVMDA3NT4iOy8KKyAgICAgICAgICI8VTAwNEI+PFUwMDc1PjxVMDA2ND48VTAwNkY+IjsvCisgICAgICAgICAiPFUwMDQzPjxVMDA2OT48VTAwNjc+PFUwMDY3PjxVMDA2OT48VTAwNkM+PFUwMDc0PjxVMDA2MT48VTAwMjA+PFUwMDRCPjxVMDA3NT48VTAwNjQ+PFUwMDZGPiI7LworICAgICAgICAgIjxVMDA0MT48VTAwNjc+PFUwMDY0PjxVMDA2MT48VTAwMjA+PFUwMDQyPjxVMDA2MT48VTAwNzg+PFUwMDY5PjxVMDA3Mz48VTAwNzM+PFUwMDZGPiI7LworICAgICAgICAgIjxVMDA0Mz48VTAwNjE+PFUwMDc4PjxVMDA2MT48VTAwNjg+PFUwMDIwPjxVMDA0MT48VTAwNkM+PFUwMDczPjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNTE+PFUwMDYxPjxVMDA3Mz48VTAwNjE+PFUwMDIwPjxVMDA0ND48VTAwNjk+PFUwMDcyPjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICAiPFUwMDUxPjxVMDA2MT48VTAwNjQ+PFUwMDZGPjxVMDAyMD48VTAwNDQ+PFUwMDY5PjxVMDA3Mj48VTAwNzI+PFUwMDY5PiI7LworICAgICAgICAgIjxVMDA0Qz48VTAwNjk+PFUwMDY5PjxVMDA3MT48VTAwNjU+PFUwMDZFPiI7LworICAgICAgICAgIjxVMDA1Nz48VTAwNjE+PFUwMDc5PjxVMDA3Mz48VTAwNzU+IjsvCisgICAgICAgICAiPFUwMDQ0PjxVMDA2OT48VTAwNzQ+PFUwMDY1PjxVMDA2Qz48VTAwNjk+IjsvCisgICAgICAgICAiPFUwMDU4PjxVMDA2OT48VTAwNkQ+PFUwMDZGPjxVMDA2Qz48VTAwNjk+IjsvCisgICAgICAgICAiPFUwMDRCPjxVMDA2MT48VTAwNzg+PFUwMDc4PjxVMDA2MT48VTAwMjA+PFUwMDQ3PjxVMDA2MT48VTAwNzI+PFUwMDYxPjxVMDA2Mj48VTAwNkM+PFUwMDc1PiIKKyUKKyUgRXF1aXZhbGVudCBvZiBBTSBQTQorJQorYW1fcG0gICAgIjxVMDA3Mz48VTAwNjE+PFUwMDYxPjxVMDA2Qj48VTAwNzU+IjsvCisgICAgICAgICAiPFUwMDYzPjxVMDA2MT48VTAwNzI+PFUwMDcyPjxVMDA2MT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKCV4KQorJQkiJWQuJW0uJVkiCislCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjU+PFUwMDZEPjxVMDAyRT48VTAwMjU+PFUwMDU5PiIKKyUKKyUgQXBwcm9wcmlhdGUgdGltZSByZXByZXNlbnRhdGlvbiAoJVgpCislCSIlSDolTTolUyIKKyUKK3RfZm10ICI8VTAwMjU+PFUwMDZDPjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPiIKKyUKKyUgQXBwcm9wcmlhdGUgQU0vUE0gdGltZSByZXByZXNlbnRhdGlvbiAoJXIpCislCSIlWCAlcCIKKyUKK3RfZm10X2FtcG0gIjxVMDAyNT48VTAwNTg+PFUwMDIwPjxVMDAyNT48VTAwNzA+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uICglYykKKyUJIiVhICVkICViICVZICVyICVaCislCitkX3RfZm10ICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPi8KKzxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbiAoZGF0ZSgxKSkKKyUJIiVhICViICVlICVyICVaICVZIgorJQorZGF0ZV9mbXQgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDIwPjxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorJQorRU5EIExDX1RJTUUKKyUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FhX0VSIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYWFfRVIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYzNjlhMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FhX0VSCkBAIC0wLDAgKzEsMjI3IEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSBBZmFyIGxhbmd1YWdlIGxvY2FsZSBmb3IgRXJpdHJlYSAoQ2FkdS9MYWFxbyBEaWFsZWN0cykuCislCislIENoYXJzZXQ6IFVURi04CislCislIEFmYXIgdGVybXMgcHJvdmlkZWQgYnkgTW9oYW1lZCBPYmFrYXIgPGxvdWJha0A2c2Vucy5jb20+IG9mIHRoZQorJSBBZmFyIENpdmlsaXphdGlvbiBSZXNlYXJjaGVyLCBNZWxrYSBXZXJlciBSZXNlYXJjaCBDZW50ZXIuCislIFByZXBhcmVkIGFuZCBjb250cmlidXRlZCB0byBnbGliYyBieSBEYW5pZWwgWWFjb2IgPGxvY2FsZXNAZ2Vlei5vcmc+LgorJQorJSBUaGlzIGxvY2FsZSBkYXRhIGhhcyBiZWVuIGRldmVsb3BlZCB1bmRlciB0aGUgWWVoYSBQcm9qZWN0OgorJSAgICAgIGh0dHA6Ly95ZWhhLnNvdXJjZWZvcmdlLm5ldC8KKyUKKyUgYnVpbGQgd2l0aDogbG9jYWxlZGVmIC1mIFVURi04IC1pIGFhX0VSIGFhX0VSCislCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCisKK0xDX0lERU5USUZJQ0FUSU9OCislCit0aXRsZSAgICAgICJBZmFyIGxhbmd1YWdlIGxvY2FsZSBmb3IgRXJpdHJlYSAoQ2FkdS9MYWFxbyBEaWFsZWN0cykuIgorc291cmNlICAgICAiR2UnZXogRnJvbnRpZXIgRm91bmRhdGlvbiIKK2FkZHJlc3MgICAgIjc4MDIgU29sb21vbiBTZWFsIERyLiwgU3ByaW5nZmllbGQsIFZBIDIyMTUyLCBVU0EiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJsb2NhbGVzQGdlZXoub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiYWEiCit0ZXJyaXRvcnkgICJFUiIKK3JldmlzaW9uICAgIjAuMjAiCitkYXRlICAgICAgICIyMDAzLTA3LTA1IgorJQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTUVBU1VSRU1FTlQKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJwb3NpeDoxOTkzIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19URUxFUEhPTkUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfVElNRQorJQorRU5EIExDX0lERU5USUZJQ0FUSU9OCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIEV0aGlvcGljIFNwZWNpZmMgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX0NPTExBVEUKK2NvcHkgInRpX0VSIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgInRpX0VSIgorRU5EIExDX0NUWVBFCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIEVyaXRyZWEgU3BlY2lmYyBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgInRpX0VSIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX01PTkVUQVJZCitjb3B5ICJ0aV9FUiIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJ0aV9FUiIKK0VORCBMQ19OVU1FUklDCisKK0xDX1BBUEVSCitjb3B5ICJ0aV9FUiIKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK2NvcHkgInRpX0VSIgorRU5EIExDX1RFTEVQSE9ORQorCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislICBBZmFyL0VSIFNwZWNpZmljIERhdGE6CislCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCitMQ19BRERSRVNTCislCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX0FERFJFU1MgY2F0ZWdvcnkuCislCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDdBPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDczPi8KKzxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA2NT48VTAwMjU+PFUwMDcyPiIKK2NvdW50cnlfbmFtZSAgIjxVMDA0NT48VTAwNzI+PFUwMDY1PjxVMDA3ND48VTAwNzI+PFUwMDY5PjxVMDA2MT4iCitjb3VudHJ5X3Bvc3QgICI8VTAwNDU+PFUwMDUyPjxVMDA0OT4iCitjb3VudHJ5X2FiMiAgICI8VTAwNDU+PFUwMDUyPiIKK2NvdW50cnlfYWIzICAgIjxVMDA0NT48VTAwNTI+PFUwMDQ5PiIKK2NvdW50cnlfbnVtICAgMjMyCislIGNvdW50cnlfY2FyICAgdW5rbm93bgorJSBjb3VudHJ5X2lzYm4gIHVua25vd24sIE5lZWQgSVNPIDIxMDgKK2xhbmdfbmFtZSAgICAgIjxVMDA1MT48VTAwNjE+PFUwMDY2PjxVMDA2MT48VTAwNzI+IgorbGFuZ19hYiAgICAgICAiPFUwMDYxPjxVMDA2MT4iCitsYW5nX3Rlcm0gICAgICI8VTAwNjE+PFUwMDYxPjxVMDA3Mj4iCitsYW5nX2xpYiAgICAgICI8VTAwNjE+PFUwMDYxPjxVMDA3Mj4iCislCitFTkQgTENfQUREUkVTUworCisKK0xDX01FU1NBR0VTCitjb3B5ICJhYV9FVCIKK0VORCBMQ19NRVNTQUdFUworCisKK0xDX05BTUUKKyUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTkFNRSBjYXRlZ29yeS4KKyUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK25hbWVfZ2VuICAgICIiCituYW1lX21yICAgICAiPFUwMDU0PjxVMDA2Rj48VTAwNkY+PFUwMDYyPjxVMDA2Rj48VTAwNkI+PFUwMDZGPjxVMDA3OT48VTAwNzQ+PFUwMDYxPiIKK25hbWVfbXJzICAgICI8VTAwNDc+PFUwMDY5PjxVMDA3Mz48VTAwNzQ+PFUwMDY5PiIKK25hbWVfbWlzcyAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3MT48VTAwNjE+PFUwMDZFPjxVMDA3OD48VTAwNjE+IgorbmFtZV9tcyAgICAgIiIKKyUKK0VORCBMQ19OQU1FCisKKworTENfVElNRQorJQorJSBBYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWVzICglYSkKKyUKK2FiZGF5ICAgICI8VTAwNDE+PFUwMDYzPjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNDU+PFUwMDc0PjxVMDA2Qz4iOy8KKyAgICAgICAgICI8VTAwNTQ+PFUwMDYxPjxVMDA2Qz4iOy8KKyAgICAgICAgICI8VTAwNDE+PFUwMDcyPjxVMDA2Mj4iOy8KKyAgICAgICAgICI8VTAwNEI+PFUwMDYxPjxVMDA2RD4iOy8KKyAgICAgICAgICI8VTAwNDc+PFUwMDc1PjxVMDA2RD4iOy8KKyAgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA2Mj4iCislCislIEZ1bGwgd2Vla2RheSBuYW1lcyAoJUEpCislCitkYXkgICAgICAiPFUwMDQxPjxVMDA2Mz48VTAwNjE+PFUwMDYxPjxVMDA2ND48VTAwNjE+IjsvCisgICAgICAgICAiPFUwMDQ1PjxVMDA3ND48VTAwNkM+PFUwMDY1PjxVMDA2NT48VTAwNkU+PFUwMDY5PiI7LworICAgICAgICAgIjxVMDA1ND48VTAwNjE+PFUwMDZDPjxVMDA2MT48VTAwNjE+PFUwMDc0PjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNDE+PFUwMDcyPjxVMDA2Mj48VTAwNjE+PFUwMDcxPjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNEI+PFUwMDYxPjxVMDA2RD48VTAwNjk+PFUwMDY5PjxVMDA3Mz48VTAwNjk+IjsvCisgICAgICAgICAiPFUwMDQ3PjxVMDA3NT48VTAwNkQ+PFUwMDcxPjxVMDA2MT48VTAwNzQ+PFUwMDYxPiI7LworICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDYyPjxVMDA3ND48VTAwNjk+IgorJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCislCithYm1vbiAgICAiPFUwMDUxPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICAiPFUwMDRFPjxVMDA2MT48VTAwNjg+IjsvCisgICAgICAgICAiPFUwMDQzPjxVMDA2OT48VTAwNjc+IjsvCisgICAgICAgICAiPFUwMDQxPjxVMDA2Nz48VTAwNjQ+IjsvCisgICAgICAgICAiPFUwMDQzPjxVMDA2MT48VTAwNzg+IjsvCisgICAgICAgICAiPFUwMDUxPjxVMDA2MT48VTAwNzM+IjsvCisgICAgICAgICAiPFUwMDUxPjxVMDA2MT48VTAwNjQ+IjsvCisgICAgICAgICAiPFUwMDRDPjxVMDA2NT48VTAwNzE+IjsvCisgICAgICAgICAiPFUwMDU3PjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICAiPFUwMDQ0PjxVMDA2OT48VTAwNzQ+IjsvCisgICAgICAgICAiPFUwMDU4PjxVMDA2OT48VTAwNkQ+IjsvCisgICAgICAgICAiPFUwMDRCPjxVMDA2MT48VTAwNzg+IgorJQorJSBGdWxsIG1vbnRoIG5hbWVzICglQikKKyUKK21vbiAgICAgICI8VTAwNTE+PFUwMDc1PjxVMDA2RT48VTAwNzg+PFUwMDYxPjxVMDAyMD48VTAwNDc+PFUwMDYxPjxVMDA3Mj48VTAwNjE+PFUwMDYyPjxVMDA2Qz48VTAwNzU+IjsvCisgICAgICAgICAiPFUwMDRFPjxVMDA2MT48VTAwNjg+PFUwMDYxPjxVMDA3Mj48VTAwNzM+PFUwMDY5PjxVMDAyMD48VTAwNEI+PFUwMDc1PjxVMDA2ND48VTAwNkY+IjsvCisgICAgICAgICAiPFUwMDQzPjxVMDA2OT48VTAwNjc+PFUwMDY3PjxVMDA2OT48VTAwNkM+PFUwMDc0PjxVMDA2MT48VTAwMjA+PFUwMDRCPjxVMDA3NT48VTAwNjQ+PFUwMDZGPiI7LworICAgICAgICAgIjxVMDA0MT48VTAwNjc+PFUwMDY0PjxVMDA2MT48VTAwMjA+PFUwMDQyPjxVMDA2MT48VTAwNzg+PFUwMDY5PjxVMDA3Mz48VTAwNzM+PFUwMDZGPiI7LworICAgICAgICAgIjxVMDA0Mz48VTAwNjE+PFUwMDc4PjxVMDA2MT48VTAwNjg+PFUwMDIwPjxVMDA0MT48VTAwNkM+PFUwMDczPjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNTE+PFUwMDYxPjxVMDA3Mz48VTAwNjE+PFUwMDIwPjxVMDA0ND48VTAwNjk+PFUwMDcyPjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICAiPFUwMDUxPjxVMDA2MT48VTAwNjQ+PFUwMDZGPjxVMDAyMD48VTAwNDQ+PFUwMDY5PjxVMDA3Mj48VTAwNzI+PFUwMDY5PiI7LworICAgICAgICAgIjxVMDA0Qz48VTAwNjU+PFUwMDcxPjxVMDA2NT48VTAwNjU+PFUwMDZFPjxVMDA2OT4iOy8KKyAgICAgICAgICI8VTAwNTc+PFUwMDYxPjxVMDA3OT48VTAwNzM+PFUwMDc1PiI7LworICAgICAgICAgIjxVMDA0ND48VTAwNjk+PFUwMDc0PjxVMDA2NT48VTAwNkM+PFUwMDY5PiI7LworICAgICAgICAgIjxVMDA1OD48VTAwNjk+PFUwMDZEPjxVMDA2Rj48VTAwNkM+PFUwMDY5PiI7LworICAgICAgICAgIjxVMDA0Qj48VTAwNjE+PFUwMDc4PjxVMDA3OD48VTAwNjE+PFUwMDIwPjxVMDA0Nz48VTAwNjE+PFUwMDcyPjxVMDA2MT48VTAwNjI+PFUwMDZDPjxVMDA3NT4iCislCislIEVxdWl2YWxlbnQgb2YgQU0gUE0KKyUKK2FtX3BtICAgICI8VTAwNzM+PFUwMDYxPjxVMDA2MT48VTAwNkI+PFUwMDc1PiI7LworICAgICAgICAgIjxVMDA2Mz48VTAwNjE+PFUwMDcyPjxVMDA3Mj48VTAwNjE+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uICgleCkKKyUJIiVkLyVtLyVZIgorJQorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA1OT4iCislCislIEFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24gKCVYKQorJQkiJWw6JU06JVMiCislCit0X2ZtdCAiPFUwMDI1PjxVMDA2Qz48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4iCislCislIEFwcHJvcHJpYXRlIEFNL1BNIHRpbWUgcmVwcmVzZW50YXRpb24gKCVyKQorJQkiJVggJXAiCislCit0X2ZtdF9hbXBtICI8VTAwMjU+PFUwMDU4PjxVMDAyMD48VTAwMjU+PFUwMDcwPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbiAoJWMpCislCSIlQSwgJUIgJWUsICVZICVyICVaCislCitkX3RfZm10ICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMkM+LworPFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uIChkYXRlKDEpKQorJQkiJUEsICViICVlLCAlciAlWiAlWSIKKyUKK2RhdGVfZm10ICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMkM+LworPFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDIwPjxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorJQorRU5EIExDX1RJTUUKKyUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FhX0VSQHNhYWhvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYWFfRVJAc2FhaG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkyOTk2NwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FhX0VSQHNhYWhvCkBAIC0wLDAgKzEsMjExIEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSBBZmFyIGxhbmd1YWdlIGxvY2FsZSBmb3IgRXJpdHJlYSAoU2FhaG8gRGlhbGVjdCkuCislCislIENoYXJzZXQ6IFVURi04CislCislIEFmYXIgdGVybXMgcHJvdmlkZWQgYnkgTW9oYW1lZCBPYmFrYXIgPGxvdWJha0A2c2Vucy5jb20+IG9mIHRoZQorJSBBZmFyIENpdmlsaXphdGlvbiBSZXNlYXJjaGVyLCBNZWxrYSBXZXJlciBSZXNlYXJjaCBDZW50ZXIuCislIFByZXBhcmVkIGFuZCBjb250cmlidXRlZCB0byBnbGliYyBieSBEYW5pZWwgWWFjb2IgPGxvY2FsZXNAZ2Vlei5vcmc+LgorJQorJSBUaGlzIGxvY2FsZSBkYXRhIGhhcyBiZWVuIGRldmVsb3BlZCB1bmRlciB0aGUgWWVoYSBQcm9qZWN0OgorJSAgICAgIGh0dHA6Ly95ZWhhLnNvdXJjZWZvcmdlLm5ldC8KKyUKKyUgYnVpbGQgd2l0aDogbG9jYWxlZGVmIC1mIFVURi04IC1pIGFhX0VSLVNhYWhvIGFhX0VSLVNhYWhvCislCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCisKK0xDX0lERU5USUZJQ0FUSU9OCislCit0aXRsZSAgICAgICJBZmFyIGxhbmd1YWdlIGxvY2FsZSBmb3IgRXJpdHJlYSAoU2FhaG8gRGlhbGVjdCkuIgorc291cmNlICAgICAiR2UnZXogRnJvbnRpZXIgRm91bmRhdGlvbiIKK2FkZHJlc3MgICAgIjc4MDIgU29sb21vbiBTZWFsIERyLiwgU3ByaW5nZmllbGQsIFZBIDIyMTUyLCBVU0EiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJsb2NhbGVzQGdlZXoub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiYWEiCit0ZXJyaXRvcnkgICJFUiIKK3JldmlzaW9uICAgIjAuMjAiCitkYXRlICAgICAgICIyMDAzLTA3LTA1IgorJQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTUVBU1VSRU1FTlQKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJwb3NpeDoxOTkzIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19URUxFUEhPTkUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfVElNRQorJQorRU5EIExDX0lERU5USUZJQ0FUSU9OCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIEV0aGlvcGljIFNwZWNpZmMgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX0NPTExBVEUKK2NvcHkgImFhX0VSIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImFhX0VSIgorRU5EIExDX0NUWVBFCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIEVyaXRyZWEgU3BlY2lmYyBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgImFhX0VSIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX01PTkVUQVJZCitjb3B5ICJhYV9FUiIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJhYV9FUiIKK0VORCBMQ19OVU1FUklDCisKK0xDX1BBUEVSCitjb3B5ICJhYV9FUiIKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK2NvcHkgImFhX0VSIgorRU5EIExDX1RFTEVQSE9ORQorCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislICBBZmFyLVNhYWhvL0VSIFNwZWNpZmljIERhdGE6CislCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCitMQ19BRERSRVNTCitjb3B5ICJhYV9FUiIKK0VORCBMQ19BRERSRVNTCisKKworTENfTUVTU0FHRVMKK2NvcHkgImFhX0VUIgorRU5EIExDX01FU1NBR0VTCisKKworTENfTkFNRQorJQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OQU1FIGNhdGVnb3J5LgorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorbmFtZV9nZW4gICAgIiIKK25hbWVfbXIgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA3MT48VTAwNjE+PFUwMDZDPiIKK25hbWVfbXJzICAgICI8VTAwNEU+PFUwMDc1PjxVMDA2RD48VTAwNjE+IgorbmFtZV9taXNzICAgIjxVMDA1MT48VTAwNzU+PFUwMDZFPjxVMDA3OD48VTAwNjE+PFUwMDIwPjxVMDA0MT48VTAwNzc+PFUwMDZCPjxVMDA2MT4iCituYW1lX21zICAgICAiIgorJQorRU5EIExDX05BTUUKKworCitMQ19USU1FCislCislIEFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZXMgKCVhKQorJQorYWJkYXkgICAgIjxVMDA0RT48VTAwNjE+PFUwMDYyPiI7LworICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDZFPiI7LworICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDZDPiI7LworICAgICAgICAgIjxVMDA1Mj48VTAwNjE+PFUwMDYyPiI7LworICAgICAgICAgIjxVMDA0Mz48VTAwNjE+PFUwMDZEPiI7LworICAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZEPiI7LworICAgICAgICAgIjxVMDA1MT48VTAwNzU+PFUwMDZFPiIKKyUKKyUgRnVsbCB3ZWVrZGF5IG5hbWVzICglQSkKKyUKK2RheSAgICAgICI8VTAwNEU+PFUwMDYxPjxVMDA2Mj48VTAwNjE+PFUwMDIwPjxVMDA1Mz48VTAwNjE+PFUwMDZEPjxVMDA2Mj48VTAwNjE+PFUwMDc0PiI7LworICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDZFPjxVMDA2OT4iOy8KKyAgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA2Qz48VTAwNzU+PFUwMDczPiI7LworICAgICAgICAgIjxVMDA1Mj48VTAwNjE+PFUwMDYyPjxVMDA3NT48VTAwNzE+IjsvCisgICAgICAgICAiPFUwMDQzPjxVMDA2MT48VTAwNkQ+PFUwMDc1PjxVMDA3Mz4iOy8KKyAgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2RD48VTAwNzE+PFUwMDYxPjxVMDA3ND48VTAwNjE+IjsvCisgICAgICAgICAiPFUwMDUxPjxVMDA3NT48VTAwNkU+PFUwMDc4PjxVMDA2MT48VTAwMjA+PFUwMDUzPjxVMDA2MT48VTAwNkQ+PFUwMDYyPjxVMDA2MT48VTAwNzQ+IgorJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCislCithYm1vbiAgICAiPFUwMDUxPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICAiPFUwMDRFPjxVMDA2MT48VTAwNjg+IjsvCisgICAgICAgICAiPFUwMDQzPjxVMDA2OT48VTAwNjc+IjsvCisgICAgICAgICAiPFUwMDQxPjxVMDA2Nz48VTAwNjQ+IjsvCisgICAgICAgICAiPFUwMDQzPjxVMDA2MT48VTAwNzg+IjsvCisgICAgICAgICAiPFUwMDUxPjxVMDA2MT48VTAwNzM+IjsvCisgICAgICAgICAiPFUwMDUxPjxVMDA2MT48VTAwNjQ+IjsvCisgICAgICAgICAiPFUwMDRDPjxVMDA2NT48VTAwNzE+IjsvCisgICAgICAgICAiPFUwMDU3PjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICAiPFUwMDQ0PjxVMDA2OT48VTAwNzQ+IjsvCisgICAgICAgICAiPFUwMDU4PjxVMDA2OT48VTAwNkQ+IjsvCisgICAgICAgICAiPFUwMDRCPjxVMDA2MT48VTAwNzg+IgorJQorJSBGdWxsIG1vbnRoIG5hbWVzICglQikKKyUKK21vbiAgICAgICI8VTAwNTE+PFUwMDc1PjxVMDA2RT48VTAwNzg+PFUwMDYxPjxVMDAyMD48VTAwNDc+PFUwMDYxPjxVMDA3Mj48VTAwNjE+PFUwMDYyPjxVMDA2Qz48VTAwNzU+IjsvCisgICAgICAgICAiPFUwMDRFPjxVMDA2MT48VTAwNjg+PFUwMDYxPjxVMDA3Mj48VTAwNzM+PFUwMDY5PjxVMDAyMD48VTAwNEI+PFUwMDc1PjxVMDA2ND48VTAwNkY+IjsvCisgICAgICAgICAiPFUwMDQzPjxVMDA2OT48VTAwNjc+PFUwMDY3PjxVMDA2OT48VTAwNkM+PFUwMDc0PjxVMDA2MT48VTAwMjA+PFUwMDRCPjxVMDA3NT48VTAwNjQ+PFUwMDZGPiI7LworICAgICAgICAgIjxVMDA0MT48VTAwNjc+PFUwMDY0PjxVMDA2MT48VTAwMjA+PFUwMDQyPjxVMDA2MT48VTAwNzg+PFUwMDY5PjxVMDA3Mz48VTAwNzM+PFUwMDZGPiI7LworICAgICAgICAgIjxVMDA0Mz48VTAwNjE+PFUwMDc4PjxVMDA2MT48VTAwNjg+PFUwMDIwPjxVMDA0MT48VTAwNkM+PFUwMDczPjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNTE+PFUwMDYxPjxVMDA3Mz48VTAwNjE+PFUwMDIwPjxVMDA0ND48VTAwNjk+PFUwMDcyPjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICAiPFUwMDUxPjxVMDA2MT48VTAwNjQ+PFUwMDZGPjxVMDAyMD48VTAwNDQ+PFUwMDY5PjxVMDA3Mj48VTAwNzI+PFUwMDY5PiI7LworICAgICAgICAgIjxVMDA0Qz48VTAwNjU+PFUwMDcxPjxVMDA2NT48VTAwNjU+PFUwMDZFPjxVMDA2OT4iOy8KKyAgICAgICAgICI8VTAwNTc+PFUwMDYxPjxVMDA3OT48VTAwNzM+PFUwMDc1PiI7LworICAgICAgICAgIjxVMDA0ND48VTAwNjk+PFUwMDc0PjxVMDA2NT48VTAwNkM+PFUwMDY5PiI7LworICAgICAgICAgIjxVMDA1OD48VTAwNjk+PFUwMDZEPjxVMDA2Rj48VTAwNkM+PFUwMDY5PiI7LworICAgICAgICAgIjxVMDA0Qj48VTAwNjE+PFUwMDc4PjxVMDA3OD48VTAwNjE+PFUwMDIwPjxVMDA0Nz48VTAwNjE+PFUwMDcyPjxVMDA2MT48VTAwNjI+PFUwMDZDPjxVMDA3NT4iCislCislIEVxdWl2YWxlbnQgb2YgQU0gUE0KKyUKK2FtX3BtICAgICI8VTAwNzM+PFUwMDYxPjxVMDA2MT48VTAwNkI+PFUwMDc1PiI7LworICAgICAgICAgIjxVMDA2Mz48VTAwNjE+PFUwMDcyPjxVMDA3Mj48VTAwNjE+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uICgleCkKKyUJIiVkLyVtLyVZIgorJQorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA1OT4iCislCislIEFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24gKCVYKQorJQkiJWw6JU06JVMiCislCit0X2ZtdCAiPFUwMDI1PjxVMDA2Qz48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4iCislCislIEFwcHJvcHJpYXRlIEFNL1BNIHRpbWUgcmVwcmVzZW50YXRpb24gKCVyKQorJQkiJVggJXAiCislCit0X2ZtdF9hbXBtICI8VTAwMjU+PFUwMDU4PjxVMDAyMD48VTAwMjU+PFUwMDcwPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbiAoJWMpCislCSIlQSwgJUIgJWUsICVZICVyICVaCislCitkX3RfZm10ICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMkM+LworPFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uIChkYXRlKDEpKQorJQkiJUEsICViICVlLCAlciAlWiAlWSIKKyUKK2RhdGVfZm10ICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMkM+LworPFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDIwPjxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorJQorRU5EIExDX1RJTUUKKyUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FhX0VUIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYWFfRVQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBhMWQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FhX0VUCkBAIC0wLDAgKzEsMjMwIEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSBBZmFyIGxhbmd1YWdlIGxvY2FsZSBmb3IgRXRoaW9waWEgKENhZHUvQ2FycmEgRGlhbGVjdHMpLgorJQorJSBDaGFyc2V0OiBVVEYtOAorJQorJSBBZmFyIHRlcm1zIHByb3ZpZGVkIGJ5IE1vaGFtZWQgT2Jha2FyIDxsb3ViYWtANnNlbnMuY29tPiBvZiB0aGUKKyUgQWZhciBDaXZpbGl6YXRpb24gUmVzZWFyY2hlciwgTWVsa2EgV2VyZXIgUmVzZWFyY2ggQ2VudGVyLgorJSBQcmVwYXJlZCBhbmQgY29udHJpYnV0ZWQgdG8gZ2xpYmMgYnkgRGFuaWVsIFlhY29iIDxsb2NhbGVzQGdlZXoub3JnPi4KKyUKKyUgVGhpcyBsb2NhbGUgZGF0YSBoYXMgYmVlbiBkZXZlbG9wZWQgdW5kZXIgdGhlIFllaGEgUHJvamVjdDoKKyUgICAgICBodHRwOi8veWVoYS5zb3VyY2Vmb3JnZS5uZXQvCislCislIGJ1aWxkIHdpdGg6IGxvY2FsZWRlZiAtZiBVVEYtOCAtaSBhYV9FVCBhYV9FVAorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworCitMQ19JREVOVElGSUNBVElPTgorJQordGl0bGUgICAgICAiQWZhciBsYW5ndWFnZSBsb2NhbGUgZm9yIEV0aGlvcGlhIChDYWR1L0NhcnJhIERpYWxlY3RzKS4iCitzb3VyY2UgICAgICJHZSdleiBGcm9udGllciBGb3VuZGF0aW9uIgorYWRkcmVzcyAgICAiNzgwMiBTb2xvbW9uIFNlYWwgRHIuLCBTcHJpbmdmaWVsZCwgVkEgMjIxNTIsIFVTQSIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImxvY2FsZXNAZ2Vlei5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJhYSIKK3RlcnJpdG9yeSAgIkVUIgorcmV2aXNpb24gICAiMC4yMCIKK2RhdGUgICAgICAgIjIwMDMtMDctMDUiCislCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NRUFTVVJFTUVOVAorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgInBvc2l4OjE5OTMiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX1RFTEVQSE9ORQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19USU1FCislCitFTkQgTENfSURFTlRJRklDQVRJT04KKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSAgRXRoaW9waWMgU3BlY2lmYyBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfQ09MTEFURQorY29weSAiYW1fRVQiCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAidGlfRVQiCitFTkQgTENfQ1RZUEUKKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSAgRXRoaW9waWEgU3BlY2lmYyBhbmQgU2hhcmVkIERhdGE6CislCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCitMQ19NRUFTVVJFTUVOVAorY29weSAidGlfRVQiCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTU9ORVRBUlkKK2NvcHkgInRpX0VUIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgInRpX0VUIgorRU5EIExDX05VTUVSSUMKKworTENfUEFQRVIKK2NvcHkgInRpX0VUIgorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQorY29weSAidGlfRVQiCitFTkQgTENfVEVMRVBIT05FCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIEFmYXIvRVQgU3BlY2lmaWMgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX0FERFJFU1MKKyUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfQUREUkVTUyBjYXRlZ29yeS4KKyUKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwN0E+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDU0PjxVMDAyNT48VTAwNzM+LworPFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDY1PjxVMDAyNT48VTAwNzI+IgorY291bnRyeV9uYW1lICAiPFUwMDRGPjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA2Mj48VTAwNjk+PFUwMDYxPiIKK2NvdW50cnlfcG9zdCAgIjxVMDA0NT48VTAwNTQ+PFUwMDQ4PiIKK2NvdW50cnlfYWIyICAgIjxVMDA0NT48VTAwNTQ+IgorY291bnRyeV9hYjMgICAiPFUwMDQ1PjxVMDA1ND48VTAwNDg+IgorY291bnRyeV9udW0gICAyMzEgICAlIDIxMCBmb3VuZCBpbiBhdCBsZWFzdCBvbmUgSVNPIDMxNjYgZG9jCislIGNvdW50cnlfY2FyICAgdW5rbm93bgorJSBjb3VudHJ5X2lzYm4gIHVua25vd24sIE5lZWQgSVNPIDIxMDgKK2xhbmdfbmFtZSAgICAgIjxVMDA1MT48VTAwNjE+PFUwMDY2PjxVMDA2MT48VTAwNzI+IgorbGFuZ19hYiAgICAgICAiPFUwMDYxPjxVMDA2MT4iCitsYW5nX3Rlcm0gICAgICI8VTAwNjE+PFUwMDYxPjxVMDA3Mj4iCitsYW5nX2xpYiAgICAgICI8VTAwNjE+PFUwMDYxPjxVMDA3Mj4iCislCitFTkQgTENfQUREUkVTUworCisKK0xDX01FU1NBR0VTCislCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkQ+PFUwMDZFPjxVMDA0RD48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorJQorRU5EIExDX01FU1NBR0VTCisKKworTENfTkFNRQorJQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OQU1FIGNhdGVnb3J5LgorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorbmFtZV9nZW4gICAgIiIKK25hbWVfbXIgICAgICI8VTAwNTQ+PFUwMDZGPjxVMDA2Rj48VTAwNjI+PFUwMDZGPjxVMDA2Qj48VTAwNkY+PFUwMDc5PjxVMDA3ND48VTAwNjE+IgorbmFtZV9tcnMgICAgIjxVMDA0Nz48VTAwNjk+PFUwMDczPjxVMDA3ND48VTAwNjk+IgorbmFtZV9taXNzICAgIjxVMDA0RD48VTAwNjE+PFUwMDcxPjxVMDA2MT48VTAwNkU+PFUwMDc4PjxVMDA2MT4iCituYW1lX21zICAgICAiIgorJQorRU5EIExDX05BTUUKKworCitMQ19USU1FCislCislIEFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZXMgKCVhKQorJQorYWJkYXkgICAgIjxVMDA0MT48VTAwNjM+PFUwMDYxPiI7LworICAgICAgICAgIjxVMDA0NT48VTAwNzQ+PFUwMDZDPiI7LworICAgICAgICAgIjxVMDA1ND48VTAwNjE+PFUwMDZDPiI7LworICAgICAgICAgIjxVMDA0MT48VTAwNzI+PFUwMDYyPiI7LworICAgICAgICAgIjxVMDA0Qj48VTAwNjE+PFUwMDZEPiI7LworICAgICAgICAgIjxVMDA0Nz48VTAwNzU+PFUwMDZEPiI7LworICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDYyPiIKKyUKKyUgRnVsbCB3ZWVrZGF5IG5hbWVzICglQSkKKyUKK2RheSAgICAgICI8VTAwNDE+PFUwMDYzPjxVMDA2MT48VTAwNjE+PFUwMDY0PjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNDU+PFUwMDc0PjxVMDA2Qz48VTAwNjU+PFUwMDY1PjxVMDA2RT48VTAwNjk+IjsvCisgICAgICAgICAiPFUwMDU0PjxVMDA2MT48VTAwNkM+PFUwMDYxPjxVMDA2MT48VTAwNzQ+PFUwMDYxPiI7LworICAgICAgICAgIjxVMDA0MT48VTAwNzI+PFUwMDYyPjxVMDA2MT48VTAwNzE+PFUwMDYxPiI7LworICAgICAgICAgIjxVMDA0Qj48VTAwNjE+PFUwMDZEPjxVMDA2OT48VTAwNjk+PFUwMDczPjxVMDA2OT4iOy8KKyAgICAgICAgICI8VTAwNDc+PFUwMDc1PjxVMDA2RD48VTAwNzE+PFUwMDYxPjxVMDA3ND48VTAwNjE+IjsvCisgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNjI+PFUwMDc0PjxVMDA2OT4iCislCislIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzICglYikKKyUKK2FibW9uICAgICI8VTAwNTE+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgICI8VTAwNEI+PFUwMDc1PjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNDM+PFUwMDY5PjxVMDA2Nz4iOy8KKyAgICAgICAgICI8VTAwNDE+PFUwMDY3PjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNDM+PFUwMDYxPjxVMDA3OD4iOy8KKyAgICAgICAgICI8VTAwNTE+PFUwMDYxPjxVMDA3Mz4iOy8KKyAgICAgICAgICI8VTAwNTE+PFUwMDYxPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNEM+PFUwMDY1PjxVMDA3MT4iOy8KKyAgICAgICAgICI8VTAwNTc+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICI8VTAwNDQ+PFUwMDY5PjxVMDA3ND4iOy8KKyAgICAgICAgICI8VTAwNTg+PFUwMDY5PjxVMDA2RD4iOy8KKyAgICAgICAgICI8VTAwNEI+PFUwMDYxPjxVMDA3OD4iCislCislIEZ1bGwgbW9udGggbmFtZXMgKCVCKQorJQorbW9uICAgICAgIjxVMDA1MT48VTAwNzU+PFUwMDZFPjxVMDA3OD48VTAwNjE+PFUwMDIwPjxVMDA0Nz48VTAwNjE+PFUwMDcyPjxVMDA2MT48VTAwNjI+PFUwMDZDPjxVMDA3NT4iOy8KKyAgICAgICAgICI8VTAwNEI+PFUwMDc1PjxVMDA2ND48VTAwNkY+IjsvCisgICAgICAgICAiPFUwMDQzPjxVMDA2OT48VTAwNjc+PFUwMDY3PjxVMDA2OT48VTAwNkM+PFUwMDc0PjxVMDA2MT48VTAwMjA+PFUwMDRCPjxVMDA3NT48VTAwNjQ+PFUwMDZGPiI7LworICAgICAgICAgIjxVMDA0MT48VTAwNjc+PFUwMDY0PjxVMDA2MT48VTAwMjA+PFUwMDQyPjxVMDA2MT48VTAwNzg+PFUwMDY5PjxVMDA3Mz48VTAwNzM+PFUwMDZGPiI7LworICAgICAgICAgIjxVMDA0Mz48VTAwNjE+PFUwMDc4PjxVMDA2MT48VTAwNjg+PFUwMDIwPjxVMDA0MT48VTAwNkM+PFUwMDczPjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNTE+PFUwMDYxPjxVMDA3Mz48VTAwNjE+PFUwMDIwPjxVMDA0ND48VTAwNjk+PFUwMDcyPjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICAiPFUwMDUxPjxVMDA2MT48VTAwNjQ+PFUwMDZGPjxVMDAyMD48VTAwNDQ+PFUwMDY5PjxVMDA3Mj48VTAwNzI+PFUwMDY5PiI7LworICAgICAgICAgIjxVMDA0Qz48VTAwNjk+PFUwMDY5PjxVMDA3MT48VTAwNjU+PFUwMDZFPiI7LworICAgICAgICAgIjxVMDA1Nz48VTAwNjE+PFUwMDc5PjxVMDA3Mz48VTAwNzU+IjsvCisgICAgICAgICAiPFUwMDQ0PjxVMDA2OT48VTAwNzQ+PFUwMDY1PjxVMDA2Qz48VTAwNjk+IjsvCisgICAgICAgICAiPFUwMDU4PjxVMDA2OT48VTAwNkQ+PFUwMDZGPjxVMDA2Qz48VTAwNjk+IjsvCisgICAgICAgICAiPFUwMDRCPjxVMDA2MT48VTAwNzg+PFUwMDc4PjxVMDA2MT48VTAwMjA+PFUwMDQ3PjxVMDA2MT48VTAwNzI+PFUwMDYxPjxVMDA2Mj48VTAwNkM+PFUwMDc1PiIKKyUKKyUgRXF1aXZhbGVudCBvZiBBTSBQTQorJQorYW1fcG0gICAgIjxVMDA3Mz48VTAwNjE+PFUwMDYxPjxVMDA2Qj48VTAwNzU+IjsvCisgICAgICAgICAiPFUwMDYzPjxVMDA2MT48VTAwNzI+PFUwMDcyPjxVMDA2MT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKCV4KQorJQkiJWQvJW0vJVkiCislCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDU5PiIKKyUKKyUgQXBwcm9wcmlhdGUgdGltZSByZXByZXNlbnRhdGlvbiAoJVgpCislCSIlbDolTTolUyIKKyUKK3RfZm10ICI8VTAwMjU+PFUwMDZDPjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPiIKKyUKKyUgQXBwcm9wcmlhdGUgQU0vUE0gdGltZSByZXByZXNlbnRhdGlvbiAoJXIpCislCSIlWCAlcCIKKyUKK3RfZm10X2FtcG0gIjxVMDAyNT48VTAwNTg+PFUwMDIwPjxVMDAyNT48VTAwNzA+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uICglYykKKyUJIiVBLCAlQiAlZSwgJVkgJXIgJVoKKyUKK2RfdF9mbXQgICAgIjxVMDAyNT48VTAwNDE+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDQyPjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyQz4vCis8VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKGRhdGUoMSkpCislCSIlQSwgJWIgJWUsICVyICVaICVZIgorJQorZGF0ZV9mbXQgICAgIjxVMDAyNT48VTAwNDE+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDQyPjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyQz4vCis8VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjA+PFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCislCitFTkQgTENfVElNRQorJQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYWZfWkEgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9hZl9aQQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzU4ODYwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYWZfWkEKQEAgLTAsMCArMSwyOTMgQEAKK2VzY2FwZV9jaGFyICAvCitjb21tZW50X2NoYXIgICUKKworJSBDaGFyc2V0OiBJU08tODg1OS0xCisKKyUgQ2hhbmdlTG9nCislIDEuMi4xICgyMDA1LTEwLTEzKToKKyUgICAgICAyMDA1LTEwLTEyIER3YXluZSBCYWlsZXkgPGR3YXluZUB0cmFuc2xhdGUub3JnLnphPgorJSAgICAgICAgLSBBZGRlZCAnQ2hhcnNldDogSVNPLTg4NTktMScgaW5mb3JtYXRpb24KKyUgICAgICAgIC0gVXBkYXRlZCBjb250YWN0IGluZm9ybWF0aW9uCislIDEuMiAoMjAwNC0xMC0yOCk6CislICAgICAgMjAwNC0xMC0yOCBEd2F5bmUgQmFpbGV5IDxkd2F5bmVAdHJhbnNsYXRlLm9yZy56YT4KKyUgICAgICAgIC0gQ29ycmVjdGVkIGNvdW50cnlfbmFtZSBzaG91bGQgYmUgIlN1aWQtQWZyaWthIgorJSAgICAgIDIwMDQtMTAtMjcgRHdheW5lIEJhaWxleSA8ZHdheW5lQHRyYW5zbGF0ZS5vcmcuemE+CislICAgICAgICAtIENoYW5nZSBkZWNpbWFsIGFuZCB0aG91c2FuZCBzZXBhcmF0b3IgdG8gbWF0Y2ggY29tbW9uIGNvbnZlbnRpb24gb2YKKyUgICAgICAgICAgW2NvbW1hXT09dGhvdXNhbmQsIFtwb2ludF09PWRlY2ltYWwuICBUaHVzIGNvcHkgZW5fWkEKKyUgICAgICAgIC0gQWRkIGNvdW50cnlfcG9zdCwgbGFuZ19saWIKKyUgICAgICAgIC0gYWJtb24gTWFyY2g6IE1hciAtPiBNcnQKKyUgICAgICAgIC0gbmFtZV8qIGNvcnJlY3RlZCBhbGwgY2FwaXRhbGlzYXRpb24KKyUgICAgICAgIC0gQWRkIFRyYW5zbGF0ZS5vcmcuemEgdG8gY2xhcmlmeSAic291cmNlIgorJSAgICAgICAgLSBVcGRhdGUgYWxsIGNvbnRhY3QgZGV0YWlscworJSAgICAgICAgLSBDaGFuZ2UgeWVzZXhwciB0byBhbHNvIGFjY2VwdCB5WQorJSAgICAgICAgLSBVcGRhdGUgeWVzL25vZXhwciB0byByZW1vdmUgLioKKyUgICAgICAyMDA0LTAzLTMwIER3YXluZSBCYWlsZXkgPGR3YXluZUB0cmFuc2xhdGUub3JnLnphPgorJSAgICAgICAgLSBBZGRlZCBuYW1lX21pc3MKKyUgMS4xICgyMDAzLTA0LTIzKToKKyUgICAgICAyMDAzLTA0LTIzIER3YXluZSBCYWlsZXkgPGR3YXluZUB0cmFuc2xhdGUub3JnLnphPgorJSAgICAgICAgLSBBZGRlZCBMQ19NRUFTVVJFTUVOVCB0byBMQ19JREVOVElGSUNBVElPTgorJSAgICAgICAgLSBQQVBFUiwgVEVMRVBIT05FIGFuZCBNRUFTVVJFTUVOVCBjb3B5IGVuX1pBCislICAgICAgICAtIEFkZGVkICJeIiB0byB5ZXNleHByIGFuZCBub2V4cHIgaWUgIl5bbk5dLioiCislICAgICAgICAtIENoYW5nZSBtYWludGFpbmVyIHRvIFp1emEgU29mdHdhcmUgRm91bmRhdGlvbgorJSAgICAgICAgLSBBZGQgYWxsIG1pc3NpbmcgaXRlbXMgaW4gTENfQUREUkVTUworJSAgICAgICAgLSBBZGQgYWxsIG5hbWVfKiB0byBMQ19OQU1FCislICAgICAgICAtIEFkZCB2YXJpb3VzIGNvbW1lbnRzIGV4cGxhaW5pbmcgaXRlbXMKKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkFmcmlrYWFucyBsb2NhbGUgZm9yIFNvdXRoIEFmcmljYSIKK3NvdXJjZSAgICAgIlp1emEgU29mdHdhcmUgRm91bmRhdGlvbiAoVHJhbnNsYXRlLm9yZy56YSkiCithZGRyZXNzICAgICJCb3ggMjgzNjQsIFN1bm55c2lkZSwgMDEzMiwgU291dGggQWZyaWNhIgorY29udGFjdCAgICAiRHdheW5lIEJhaWxleSIKK2VtYWlsICAgICAgImR3YXluZUB0cmFuc2xhdGUub3JnLnphIgordGVsICAgICAgICAiKzI3IDEyIDQ2MCAxMDk1IgorZmF4ICAgICAgICAiKzI3IDEyIDQ2MCAxMDk1IgorbGFuZ3VhZ2UgICAiQWZyaWthYW5zIgordGVycml0b3J5ICAiU291dGggQWZyaWNhIgorcmV2aXNpb24gICAiMS4yLjEiCitkYXRlICAgICAgICIyMDA1LTEwLTEzIgorJQorY2F0ZWdvcnkgICJhZl9aQToyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJhZl9aQToyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJhZl9aQToyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImFmX1pBOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiYWZfWkE6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJhZl9aQToyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJhZl9aQToyMDAzIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJhZl9aQToyMDAzIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJhZl9aQToyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImFmX1pBOjIwMDMiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiYWZfWkE6MjAwMyI7TENfVEVMRVBIT05FCitjYXRlZ29yeSAgImFmX1pBOjIwMDMiO0xDX01FQVNVUkVNRU5UCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiaTE4biIKKwordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKK2NvcHkgImVuX1pBIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgImVuX1pBIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorJSBhYmRheSAtIFRoZSBhYmJyZXZpYXRpb25zIGZvciB0aGUgd2VlayBkYXlzOgorJSAtIFNvLCBNYSwgRGksIFdvLCBEbywgVnIsIFNhCithYmRheSAgICAgICAiPFUwMDUzPjxVMDA2Rj4iOyI8VTAwNEQ+PFUwMDYxPiI7LworICAgICAgICAgICAgIjxVMDA0ND48VTAwNjk+IjsiPFUwMDU3PjxVMDA2Rj4iOy8KKyAgICAgICAgICAgICI8VTAwNDQ+PFUwMDZGPiI7IjxVMDA1Nj48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2MT4iCisKKyUgZGF5IC0gVGhlIGZ1bGwgbmFtZXMgb2YgdGhlIHdlZWsgZGF5czoKKyUgU29uZGFnLCBNYWFuZGFnLCBEaW5zZGFnLCBXb2Vuc2RhZywgRG9uZGVyZGFnLCBWcnlkYWcsIFNhdGVyZGFnCitkYXkgICAgICAgICAiPFUwMDUzPjxVMDA2Rj48VTAwNkU+PFUwMDY0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNjE+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAgICAgIjxVMDA0ND48VTAwNjk+PFUwMDZFPjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA2Nz4iOy8KKyAgICAgICAgICAgICI8VTAwNTc+PFUwMDZGPjxVMDA2NT48VTAwNkU+PFUwMDczPjxVMDA2ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAgICAgIjxVMDA0ND48VTAwNkY+PFUwMDZFPjxVMDA2ND48VTAwNjU+PFUwMDcyPjxVMDA2ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAgICAgIjxVMDA1Nj48VTAwNzI+PFUwMDc5PjxVMDA2ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDc0PjxVMDA2NT48VTAwNzI+PFUwMDY0PjxVMDA2MT48VTAwNjc+IgorCislIGFibW9uIC0gVGhlIGFiYnJldmlhdGlvbnMgZm9yIHRoZSBtb250aHMKKyUgLSBKYW4sIEZlYiwgTXJ0LCBBcHIsIE1laSwgSnVuLCBKdWwsIEF1ZywgU2VwLCBPa3QsIE5vdiwgRGVzCithYm1vbiAgICAgICAiPFUwMDRBPjxVMDA2MT48VTAwNkU+IjsiPFUwMDQ2PjxVMDA2NT48VTAwNjI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA3Mj48VTAwNzQ+IjsiPFUwMDQxPjxVMDA3MD48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2NT48VTAwNjk+IjsiPFUwMDRBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkM+IjsiPFUwMDQxPjxVMDA3NT48VTAwNjc+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNzA+IjsiPFUwMDRGPjxVMDA2Qj48VTAwNzQ+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDQ0PjxVMDA2NT48VTAwNzM+IgorCislIG1vbiAtIFRoZSBmdWxsIG5hbWVzIG9mIHRoZSBtb250aHMgLQorJSBKYW51YXJpZSwgRmVicnVhcmllLCBNYWFydCwgQXByaWwsIE1laSwgSnVuaWUKKyUgSnVsaWUsIEF1Z3VzdHVzLCBTZXB0ZW1iZXIsIE9rdG9iZXIsIE5vdmVtYmVyLCBEZXNlbWJlcgorbW9uICAgICAgICAgIjxVMDA0QT48VTAwNjE+PFUwMDZFPjxVMDA3NT48VTAwNjE+PFUwMDcyPjxVMDA2OT48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDQ2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA3NT48VTAwNjE+PFUwMDcyPjxVMDA2OT48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNjE+PFUwMDcyPjxVMDA3ND4iOy8KKyAgICAgICAgICAgICI8VTAwNDE+PFUwMDcwPjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjU+PFUwMDY5PiI7LworICAgICAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZFPjxVMDA2OT48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkM+PFUwMDY5PjxVMDA2NT4iOy8KKyAgICAgICAgICAgICI8VTAwNDE+PFUwMDc1PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND48VTAwNzU+PFUwMDczPiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA0Rj48VTAwNkI+PFUwMDc0PjxVMDA2Rj48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNEU+PFUwMDZGPjxVMDA3Nj48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA0ND48VTAwNjU+PFUwMDczPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IgorCislIEFiYnJldmlhdGVkIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24gdG8gYmUgcmVmZXJlbmNlZCBieSB0aGUgIiVjIiBmaWVsZCBkZXNjcmlwdG9yIC0KKyUKKyUgIiVhIiAoc2hvcnQgd2Vla2RheSBuYW1lKSwKKyUgIiVkIiAoZGF5IG9mIG1vbnRoIGFzIGEgZGVjaW1hbCBudW1iZXIpLAorJSAiJWIiIChzaG9ydCBtb250aCBuYW1lKSwKKyUgIiVZIiAoeWVhciB3aXRoIGNlbnR1cnkgYXMgYSBkZWNpbWFsIG51bWJlciksCislICIlVCIgKDI0LWhvdXIgY2xvY2sgdGltZSBpbiBmb3JtYXQgSEg6TU06U1MpLAorJSAiJVoiIChUaW1lIHpvbmUgbmFtZSkKK2RfdF9mbXQgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKworJSBEYXRlIHJlcHJlc2VudGF0aW9uIHRvIGJlIHJlZmVyZW5jZWQgYnkgdGhlICIleCIgZmllbGQgZGVzY3JpcHRvciAtCislICIlZC8lbS8lWSIsIGRheS9tb250aC95ZWFyIGFzIGRlY2ltYWwgbnVtYmVycyAoMDEvMDEvMjAwMCkuCitkX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA1OT4iCisKKyUgVGltZSByZXByZXNlbnRhdGlvbiB0byBiZSByZWZlcmVuY2VkIGJ5IHRoZSAiJVgiIGZpZWxkIGRlc2NyaXB0b3IgLQorJSAiJVQiICgyNC1ob3VyIGNsb2NrIHRpbWUgaW4gZm9ybWF0IEhIOk1NOlNTKQordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNTQ+IgorCislIERlZmluZSByZXByZXNlbnRhdGlvbiBvZiBhbnRlIG1lcmlkaWFuIGFuZCBwb3N0IG1hcml0aW1lIHN0cmluZ3MgLQorJSBUaGUgIiIgbWVhbiAnZGVmYXVsdCB0byAiQU0iIGFuZCAiUE0iLgorYW1fcG0gICAgICAgIjxVMDA1Nj48VTAwNEQ+IjsiPFUwMDRFPjxVMDA0RD4iCisKKyUgRGVmaW5lIHRpbWUgcmVwcmVzZW50YXRpb24gaW4gMTItaG91ciBmb3JtYXQgd2l0aCAiYW1fcG0iLCB0byBiZSByZWZlcmVuY2VkIGJ5IHRoZSAiJXIiCislIFRoZSAiIiBtZWFucyB0aGF0IHRoaXMgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuCit0X2ZtdF9hbXBtICAiIgorCislIERhdGUgcmVwcmVzZW50YXRpb24gbm90IGRlc2NyaWJlZCBpbiBJU08vSUVDIDE0NjUyLiBDb21lcyBvdXQgYXMgLQorJSAiJWEgJWIgJWUgJUg6JU06JVMgJVogJVkiIHdoaWNoIGlzIGRlZmF1bHQgImRhdGUiIGNvbW1hbmQgb3V0cHV0CislCislICVhIC0gYWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lLAorJSAlYiAtIGFiYnJldmlhdGVkIG1vbnRoIG5hbWUsCislICVlIC0gZGF5IG9mIG1vbnRoIGFzIGEgZGVjaW1hbCBudW1iZXIgd2l0aCBsZWFkaW5nIHNwYWNlICgxIHRvIDMxKSwKKyUgJUggLSBob3VyICgyNC1ob3VyIGNsb2NrKSBhcyBhIGRlY2ltYWwgbnVtYmVyICgwMCB0byAyMyksCislICVNIC0gbWludXRlIGFzIGEgZGVjaW1hbCBudW1iZXIgKDAwIHRvIDU5KSwKKyUgJVMgLSBzZWNvbmRzIGFzIGEgZGVjaW1hbCBudW1iZXIgKDAwIHRvIDU5KSwKKyUgJVogLSB0aW1lLXpvbmUgbmFtZSwKKyUgJVkgLSB5ZWFyIHdpdGggY2VudHVyeSBhcyBhIGRlY2ltYWwgbnVtYmVyLGUuZy4gMjAwMS4KK2RhdGVfZm10CSI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCislIFRoZSBhZmZpcm1hdGl2ZSByZXNwb25zZSAtCislICJeW2pKeVldIgoreWVzZXhwciAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDZBPjxVMDA0QT48VTAwNzk+PFUwMDU5PjxVMDA1RD4iCisKKyUgVGhlIG5lZ2F0aXZlIHJlc3BvbnNlIC0KKyUgIl5bbk5dIgorbm9leHByICAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCitjb3B5ICJlbl9aQSIKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK2NvcHkgImVuX1pBIgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorY29weSAiZW5fWkEiCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorJSBGb3JtYXQgZm9yIGFkZHJlc3NpbmcgYSBwZXJzb24uCislICIlZCV0JWcldCVtJXQlZiIKKyUKKyUgIlNhbHV0YXRpb24iLAorJSAiRW1wdHkgc3RyaW5nLCBvciA8U3BhY2U+IiwKKyUgIkZpcnN0IGdpdmVuIG5hbWUiLAorJSAiRW1wdHkgc3RyaW5nLCBvciA8U3BhY2U+IiwKKyUgIk1pZGRsZSBuYW1lcyIsCislICJFbXB0eSBzdHJpbmcsIG9yIDxTcGFjZT4iLAorJSAiQ2xhbiBuYW1lcyIKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKKworJSBHZW5lcmFsIHNhbHV0YXRpb24gZm9yIGFueSBzZXgKKyUgKG5vIHRlcm0pCituYW1lX2dlbiAgICAiIgorCislIFNhbHV0YXRpb24gZm9yIHVubWFycmllZCBmZW1hbGVzCislICJtZWoiCituYW1lX21pc3MgICAiPFUwMDZEPjxVMDA2NT48VTAwNkE+IgorCislIFNhbHV0YXRpb24gZm9yIG1hbGVzCislICJtbnIiCituYW1lX21yICAgICAiPFUwMDZEPjxVMDA2RT48VTAwNzI+IgorCislIFNhbHV0YXRpb24gZm9yIG1hcnJpZWQgZmVtYWxlcworJSAibWV2IgorbmFtZV9tcnMgICAgIjxVMDA2RD48VTAwNjU+PFUwMDc2PiIKKworJSBTYWx1dGF0aW9uIHZhbGlkIGZvciBhbGwgZmVtYWxlcworJSAibWUiCituYW1lX21zICAgICAiPFUwMDZEPjxVMDA2NT4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCislIFJlcHJlc2VudGF0aW9uIG9mIHBvc3RhbCBhZGRyZXNzZXMgKG1pbnVzIHRoZSBhZGRyZXNzZWUncyBuYW1lKSBpbiBTb3V0aAorJSBBZnJpY2EuIChJZ25vcmVkIGZvciBub3cpCislICIlZiVOJWElTiVkJU4lYiVOJXMgJWggJWUgJXIlTiV6ICVUJU4lYyVOIiwgd2hpY2ggZ2l2ZXMgLQorJQorJSAiZmlybSBuYW1lIiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgIkMvTyBhZGRyZXNzIiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgImRlcGFydG1lbnQgbmFtZSIsCislICJCdWlsZGluZyBuYW1lIiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgInN0cmVldCBvciBibG9jayBuYW1lIiwKKyUgInNwYWNlIiwKKyUgImhvdXNlIG51bWJlciBvciBkZXNpZ25hdGlvbiIsCislICJzcGFjZSIsCislICJmbG9vciBudW1iZXIiLAorJSAic3BhY2UiLAorJSAicm9vbSBudW1iZXIsIGRvb3IgZGVzaWduYXRpb24iLAorJSAiZW5kIG9mIGxpbmUiLAorJSAicG9zdGFsIGNvZGUiLAorJSAic3BhY2UiLAorJSAidG93biwgY2l0eSIsCislICJlbmQgb2YgbGluZSIsCislICJjb3VudHJ5IGRlc2lnbmF0aW9uIGZvciB0aGUgPGNvdW50cnlfcG9zdD4ga2V5d29yZCIsCislICJlbmQgb2YgbGluZQorcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKKworJSBDb3VudHJ5IG5hbWUgaW4gQWZyaWthYW5zIC0gIlN1aWQtQWZyaWthIgorY291bnRyeV9uYW1lICAiPFUwMDUzPjxVMDA3NT48VTAwNjk+PFUwMDY0PjxVMDAyRD4vCis8VTAwNDE+PFUwMDY2PjxVMDA3Mj48VTAwNjk+PFUwMDZCPjxVMDA2MT4iCisKKyUgTGFuZ3VhZ2UgbmFtZSBpbiBBZnJpa2FhbnMgLSAiQWZyaWthYW5zIgorbGFuZ19uYW1lICAgICAiPFUwMDQxPjxVMDA2Nj48VTAwNzI+PFUwMDY5PjxVMDA2Qj48VTAwNjE+PFUwMDYxPjxVMDA2RT48VTAwNzM+IgorCislIENFUFQgTUFJTENPREVTIGFyZSBzdWdnZXN0ZWQKKyUgQWx0ZXJuYXRpdmVseSB1c2UgdGhlIGNvZGUgZm91bmQgb24geW91ciBjb3VudHJpZXMgcG9zdGFsIGl0ZW0gdHJhY2tpbmcgbnVtYmVyCislICJaQSIKK2NvdW50cnlfcG9zdCAgICI8VTAwNUE+PFUwMDQxPiIKKworJSBVTiBHZW5ldmUgMTk0OTo2OCBEaXN0aW5ndWlzaGluZyBzaWducyBvZiB2ZWhpY2xlcyBpbiBpbnRlcm5hdGlvbmFsIHRyYWZmaWMKKyUgaHR0cDovL3d3dy51bmVjZS5vcmcvdHJhbnMvY29udmVudG4vZGlzdGluZy1zaWducy01LTIwMDEucGRmCislICJaQSIKK2NvdW50cnlfY2FyICAgIjxVMDA1QT48VTAwNDE+IgorCislIElTTyAyMTA4CislIGh0dHA6Ly93d3cuaXNibi1pbnRlcm5hdGlvbmFsLm9yZy9odG1sL3ByZWZpeC9wcmVmYS5odG0KK2NvdW50cnlfaXNibiAgMAorCislIElTTyA2MzkgbGFuZ3VhZ2UgYWJicmV2aWF0aW9uczoKKyUgNjM5LTEgMiBsZXR0ZXIsIDYzOS0yIDMgbGV0dGVyIHRlcm1pbm9sb2d5CislIGh0dHA6Ly93d3cubG9jLmdvdi9zdGFuZGFyZHMvaXNvNjM5LTIvZW5nbGFuZ24uaHRtbAorJSAiYWYiLCAiYWZyIiwgImFmciIKK2xhbmdfYWIgICAgICAgIjxVMDA2MT48VTAwNjY+IgorbGFuZ190ZXJtICAgICAiPFUwMDYxPjxVMDA2Nj48VTAwNzI+IgorbGFuZ19saWIgICAgICAiPFUwMDYxPjxVMDA2Nj48VTAwNzI+IgorCislIElTTyAzMTY2IGNvdW50cnkgbnVtYmVyIGFuZCAyIGFuZCAzIGxldHRlciBhYmJyZXZpYXRpb25zCislIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvb25saW5lZGF0L2NvdW50cmllcy5odG1sCislICJaQSIsICJaQUYiCitjb3VudHJ5X2FiMiAgICI8VTAwNUE+PFUwMDQxPiIKK2NvdW50cnlfYWIzICAgIjxVMDA1QT48VTAwNDE+PFUwMDQ2PiIKK2NvdW50cnlfbnVtICAgNzEwCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYW1fRVQgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9hbV9FVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWEyY2ExCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYW1fRVQKQEAgLTAsMCArMSwxNTY4IEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSBBbWhhcmljIGxhbmd1YWdlIGxvY2FsZSBmb3IgRXRoaW9waWEuCislCislIENoYXJzZXQ6IFVURi04CislCislIFByZXBhcmVkIGFuZCBjb250cmlidXRlZCB0byBnbGliYyBieSBEYW5pZWwgWWFjb2IgPGxvY2FsZXNAZ2Vlei5vcmc+LgorJQorJSBUaGlzIGxvY2FsZSBkYXRhIGhhcyBiZWVuIGRldmVsb3BlZCB1bmRlciB0aGUgWWVoYSBQcm9qZWN0OgorJSAgICAgIGh0dHA6Ly95ZWhhLnNvdXJjZWZvcmdlLm5ldC8KKyUKKyUgYnVpbGQgd2l0aDogbG9jYWxlZGVmIC1mIFVURi04IC1pIGFtX0VUIGFtX0VUCislCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCisKK0xDX0lERU5USUZJQ0FUSU9OCislCit0aXRsZSAgICAgICJBbWhhcmljIGxhbmd1YWdlIGxvY2FsZSBmb3IgRXRoaW9waWEuIgorc291cmNlICAgICAiR2UnZXogRnJvbnRpZXIgRm91bmRhdGlvbiIKK2FkZHJlc3MgICAgIjc4MDIgU29sb21vbiBTZWFsIERyLiwgU3ByaW5nZmllbGQsIFZBIDIyMTUyLCBVU0EiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJsb2NhbGVzQGdlZXoub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiYW0iCit0ZXJyaXRvcnkgICJFVCIKK3JldmlzaW9uICAgIjAuMjAiCitkYXRlICAgICAgICIyMDAzLTA3LTA1IgorJQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTUVBU1VSRU1FTlQKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJwb3NpeDoxOTkzIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19URUxFUEhPTkUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfVElNRQorJQorRU5EIExDX0lERU5USUZJQ0FUSU9OCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIEV0aGlvcGljIFNwZWNpZmMgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX0NPTExBVEUKKyUKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxCislCitjb3B5ICJpc28xNDY1MV90MSIKKyUKKyUgIFRoZSBFVEhJT1BJQyBzY3JpcHQgZGVjbGFyYXRpb24gbXVzdCBjb21lIGZpcnN0LgorJQorc2NyaXB0IDxFVEhJT1BJQz4KKyUKKyUgIENvcnJlY3RpbmcgVW5pY29kZSdzIGxpbmd1aXN0aWMgb3JkZXJpbmcgdG8gdGhlIHRyYWRpdGlvbmFsLgorJQorY29sbGF0aW5nLXN5bWJvbCA8SE9ZPgorY29sbGF0aW5nLXN5bWJvbCA8TEFXST4KK2NvbGxhdGluZy1zeW1ib2wgPEhBV1Q+Citjb2xsYXRpbmctc3ltYm9sIDxNQVk+Citjb2xsYXRpbmctc3ltYm9sIDxTRVdUPgorY29sbGF0aW5nLXN5bWJvbCA8UklTPgorY29sbGF0aW5nLXN5bWJvbCA8U0FUPgorY29sbGF0aW5nLXN5bWJvbCA8U0hBLVNBVD4KK2NvbGxhdGluZy1zeW1ib2wgPFFBRj4KK2NvbGxhdGluZy1zeW1ib2wgPFFIQS1RQUY+Citjb2xsYXRpbmctc3ltYm9sIDxCRVQ+Citjb2xsYXRpbmctc3ltYm9sIDxWRS1CRVQ+Citjb2xsYXRpbmctc3ltYm9sIDxUQVc+Citjb2xsYXRpbmctc3ltYm9sIDxDSEEtVEFXPgorY29sbGF0aW5nLXN5bWJvbCA8SEFSTT4KK2NvbGxhdGluZy1zeW1ib2wgPE5FSEFTPgorY29sbGF0aW5nLXN5bWJvbCA8TllFLU5FSEFTPgorY29sbGF0aW5nLXN5bWJvbCA8QUxFRj4KK2NvbGxhdGluZy1zeW1ib2wgPEtBRj4KK2NvbGxhdGluZy1zeW1ib2wgPEtIQS1LQUY+Citjb2xsYXRpbmctc3ltYm9sIDxXRVdFPgorY29sbGF0aW5nLXN5bWJvbCA8QVlJTj4KK2NvbGxhdGluZy1zeW1ib2wgPFpFWT4KK2NvbGxhdGluZy1zeW1ib2wgPFpIRS1aRVk+Citjb2xsYXRpbmctc3ltYm9sIDxZRU1FTj4KK2NvbGxhdGluZy1zeW1ib2wgPERJTlQ+Citjb2xsYXRpbmctc3ltYm9sIDxESEktRElOVD4KK2NvbGxhdGluZy1zeW1ib2wgPEpJLURJTlQ+Citjb2xsYXRpbmctc3ltYm9sIDxHRU1FTD4KK2NvbGxhdGluZy1zeW1ib2wgPE5HRS1HRU1FTD4KK2NvbGxhdGluZy1zeW1ib2wgPFRFWVQ+Citjb2xsYXRpbmctc3ltYm9sIDxDSEUtVEVZVD4KK2NvbGxhdGluZy1zeW1ib2wgPFBFWVQ+Citjb2xsYXRpbmctc3ltYm9sIDxTRURFWT4KK2NvbGxhdGluZy1zeW1ib2wgPFNFUEE+Citjb2xsYXRpbmctc3ltYm9sIDxBRj4KK2NvbGxhdGluZy1zeW1ib2wgPFBTQT4KKworY29sbGF0aW5nLXN5bWJvbCA8R0UnRVo+Citjb2xsYXRpbmctc3ltYm9sIDxLQSdJQj4KK2NvbGxhdGluZy1zeW1ib2wgPFNBTElTPgorY29sbGF0aW5nLXN5bWJvbCA8UkFCST4KK2NvbGxhdGluZy1zeW1ib2wgPEhBTUlTPgorY29sbGF0aW5nLXN5bWJvbCA8U0FESVM+Citjb2xsYXRpbmctc3ltYm9sIDxTQUJJPgorY29sbGF0aW5nLXN5bWJvbCA8WUE+CisKK2NvbGxhdGluZy1zeW1ib2wgPFFFTEFMPgorY29sbGF0aW5nLXN5bWJvbCA8WkVNRURFPgorCitjb2xsYXRpbmctc3ltYm9sIDxOVU1FUkFMUz4KK2NvbGxhdGluZy1zeW1ib2wgPEFIQURVPgorY29sbGF0aW5nLXN5bWJvbCA8S0lMRUlUVT4KK2NvbGxhdGluZy1zeW1ib2wgPFNFTEVTVFU+Citjb2xsYXRpbmctc3ltYm9sIDxBUkJBSVRVPgorY29sbGF0aW5nLXN5bWJvbCA8SEFNSVNUVT4KK2NvbGxhdGluZy1zeW1ib2wgPFNJRElTVFU+Citjb2xsYXRpbmctc3ltYm9sIDxTRUJBVFU+Citjb2xsYXRpbmctc3ltYm9sIDxTRU1FTlRVPgorY29sbGF0aW5nLXN5bWJvbCA8VEVTQVRVPgorY29sbGF0aW5nLXN5bWJvbCA8QVNFUlRVPgorY29sbGF0aW5nLXN5bWJvbCA8SVNSQT4KK2NvbGxhdGluZy1zeW1ib2wgPFNFTEFTQT4KK2NvbGxhdGluZy1zeW1ib2wgPEFSQkE+Citjb2xsYXRpbmctc3ltYm9sIDxIQU1TQT4KK2NvbGxhdGluZy1zeW1ib2wgPFNJU0E+Citjb2xsYXRpbmctc3ltYm9sIDxTRUJBPgorY29sbGF0aW5nLXN5bWJvbCA8U0VNQU5ZQT4KK2NvbGxhdGluZy1zeW1ib2wgPFRFU0E+Citjb2xsYXRpbmctc3ltYm9sIDxNRUVUPgorY29sbGF0aW5nLXN5bWJvbCA8SUxGPgorCitjb2xsYXRpbmctc3ltYm9sIDxQVU5DVFVBVElPTj4KK2NvbGxhdGluZy1zeW1ib2wgPE5FVVMtTkVURUI+Citjb2xsYXRpbmctc3ltYm9sIDxFQklZLU5FVEVCPgorY29sbGF0aW5nLXN5bWJvbCA8TkVURUxBLVNFUkVaPgorY29sbGF0aW5nLXN5bWJvbCA8TkVVUy1TRVJFWj4KK2NvbGxhdGluZy1zeW1ib2wgPEFTVEVBTVJPPgorY29sbGF0aW5nLXN5bWJvbCA8RUJJWS1TRVJFWj4KK2NvbGxhdGluZy1zeW1ib2wgPFNFTEVTVEUtTkVURUI+Citjb2xsYXRpbmctc3ltYm9sIDxTRUJBVEUtTkVURUI+CisKKzxIT1k+Cis8TEFXST4KKzxIQVdUPgorPE1BWT4KKzxTRVdUPgorPFJJUz4KKzxTQVQ+Cis8U0hBLVNBVD4KKzxRQUY+Cis8UUhBLVFBRj4KKzxCRVQ+Cis8VkUtQkVUPgorPFRBVz4KKzxDSEEtVEFXPgorPEhBUk0+Cis8TkVIQVM+Cis8TllFLU5FSEFTPgorPEFMRUY+Cis8S0FGPgorPEtIQS1LQUY+Cis8V0VXRT4KKzxBWUlOPgorPFpFWT4KKzxaSEUtWkVZPgorPFlFTUVOPgorPERJTlQ+Cis8REhJLURJTlQ+Cis8SkktRElOVD4KKzxHRU1FTD4KKzxOR0UtR0VNRUw+Cis8VEVZVD4KKzxDSEUtVEVZVD4KKzxQRVlUPgorPFNFREVZPgorPFNFUEE+Cis8QUY+Cis8UFNBPgorCis8R0UnRVo+Cis8S0EnSUI+Cis8U0FMSVM+Cis8UkFCST4KKzxIQU1JUz4KKzxTQURJUz4KKzxTQUJJPgorCis8UUVMQUw+Cis8WkVNRURFPgorPFlBPgorCis8TlVNRVJBTFM+Cis8UFVOQ1RVQVRJT04+CisKKzxBSEFEVT4KKzxLSUxFSVRVPgorPFNFTEVTVFU+Cis8QVJCQUlUVT4KKzxIQU1JU1RVPgorPFNJRElTVFU+Cis8U0VCQVRVPgorPFNFTUVOVFU+Cis8VEVTQVRVPgorPEFTRVJUVT4KKzxJU1JBPgorPFNFTEFTQT4KKzxBUkJBPgorPEhBTVNBPgorPFNJU0E+Cis8U0VCQT4KKzxTRU1BTllBPgorPFRFU0E+Cis8TUVFVD4KKzxJTEY+CisKKzxORVVTLU5FVEVCPgorPE5FVEVMQS1TRVJFWj4KKzxORVVTLVNFUkVaPgorPEVCSVktU0VSRVo+Cis8QVNURUFNUk8+Cis8RUJJWS1ORVRFQj4KKzxTRUxFU1RFLU5FVEVCPgorPFNFQkFURS1ORVRFQj4KKworb3JkZXJfc3RhcnQgPEVUSElPUElDPjtmb3J3YXJkO2ZvcndhcmQ7Zm9yd2FyZDtmb3J3YXJkLHBvc2l0aW9uCis8VTEyMDA+IDxIT1k+OzxRRUxBTD47PEdFJ0VaPjtJR05PUkUKKzxVMTIwMT4gPEhPWT47PFFFTEFMPjs8S0EnSUI+O0lHTk9SRQorPFUxMjAyPiA8SE9ZPjs8UUVMQUw+OzxTQUxJUz47SUdOT1JFCis8VTEyMDM+IDxIT1k+OzxRRUxBTD47PFJBQkk+O0lHTk9SRQorPFUxMjA0PiA8SE9ZPjs8UUVMQUw+OzxIQU1JUz47SUdOT1JFCis8VTEyMDU+IDxIT1k+OzxRRUxBTD47PFNBRElTPjtJR05PUkUKKzxVMTIwNj4gPEhPWT47PFFFTEFMPjs8U0FCST47SUdOT1JFCis8VTEyMDg+IDxMQVdJPjs8UUVMQUw+OzxHRSdFWj47SUdOT1JFCis8VTEyMDk+IDxMQVdJPjs8UUVMQUw+OzxLQSdJQj47SUdOT1JFCis8VTEyMEE+IDxMQVdJPjs8UUVMQUw+OzxTQUxJUz47SUdOT1JFCis8VTEyMEI+IDxMQVdJPjs8UUVMQUw+OzxSQUJJPjtJR05PUkUKKzxVMTIwQz4gPExBV0k+OzxRRUxBTD47PEhBTUlTPjtJR05PUkUKKzxVMTIwRD4gPExBV0k+OzxRRUxBTD47PFNBRElTPjtJR05PUkUKKzxVMTIwRT4gPExBV0k+OzxRRUxBTD47PFNBQkk+O0lHTk9SRQorPFUxMjBGPiA8TEFXST47PFpFTUVERT47PFJBQkk+O0lHTk9SRQorPFUxMjEwPiA8SEFXVD47PFFFTEFMPjs8R0UnRVo+O0lHTk9SRQorPFUxMjExPiA8SEFXVD47PFFFTEFMPjs8S0EnSUI+O0lHTk9SRQorPFUxMjEyPiA8SEFXVD47PFFFTEFMPjs8U0FMSVM+O0lHTk9SRQorPFUxMjEzPiA8SEFXVD47PFFFTEFMPjs8UkFCST47SUdOT1JFCis8VTEyMTQ+IDxIQVdUPjs8UUVMQUw+OzxIQU1JUz47SUdOT1JFCis8VTEyMTU+IDxIQVdUPjs8UUVMQUw+OzxTQURJUz47SUdOT1JFCis8VTEyMTY+IDxIQVdUPjs8UUVMQUw+OzxTQUJJPjtJR05PUkUKKzxVMTIxNz4gPEhBV1Q+OzxaRU1FREU+OzxSQUJJPjtJR05PUkUKKzxVMTIxOD4gPE1BWT47PFFFTEFMPjs8R0UnRVo+O0lHTk9SRQorPFUxMjE5PiA8TUFZPjs8UUVMQUw+OzxLQSdJQj47SUdOT1JFCis8VTEyMUE+IDxNQVk+OzxRRUxBTD47PFNBTElTPjtJR05PUkUKKzxVMTIxQj4gPE1BWT47PFFFTEFMPjs8UkFCST47SUdOT1JFCis8VTEyMUM+IDxNQVk+OzxRRUxBTD47PEhBTUlTPjtJR05PUkUKKzxVMTIxRD4gPE1BWT47PFFFTEFMPjs8U0FESVM+O0lHTk9SRQorPFUxMjFFPiA8TUFZPjs8UUVMQUw+OzxTQUJJPjtJR05PUkUKKzxVMTIxRj4gPE1BWT47PFpFTUVERT47PFJBQkk+O0lHTk9SRQorPFUxMjIwPiA8U0VXVD47PFFFTEFMPjs8R0UnRVo+O0lHTk9SRQorPFUxMjIxPiA8U0VXVD47PFFFTEFMPjs8S0EnSUI+O0lHTk9SRQorPFUxMjIyPiA8U0VXVD47PFFFTEFMPjs8U0FMSVM+O0lHTk9SRQorPFUxMjIzPiA8U0VXVD47PFFFTEFMPjs8UkFCST47SUdOT1JFCis8VTEyMjQ+IDxTRVdUPjs8UUVMQUw+OzxIQU1JUz47SUdOT1JFCis8VTEyMjU+IDxTRVdUPjs8UUVMQUw+OzxTQURJUz47SUdOT1JFCis8VTEyMjY+IDxTRVdUPjs8UUVMQUw+OzxTQUJJPjtJR05PUkUKKzxVMTIyNz4gPFNFV1Q+OzxaRU1FREU+OzxSQUJJPjtJR05PUkUKKzxVMTIyOD4gPFJJUz47PFFFTEFMPjs8R0UnRVo+O0lHTk9SRQorPFUxMjI5PiA8UklTPjs8UUVMQUw+OzxLQSdJQj47SUdOT1JFCis8VTEyMkE+IDxSSVM+OzxRRUxBTD47PFNBTElTPjtJR05PUkUKKzxVMTIyQj4gPFJJUz47PFFFTEFMPjs8UkFCST47SUdOT1JFCis8VTEyMkM+IDxSSVM+OzxRRUxBTD47PEhBTUlTPjtJR05PUkUKKzxVMTIyRD4gPFJJUz47PFFFTEFMPjs8U0FESVM+O0lHTk9SRQorPFUxMjJFPiA8UklTPjs8UUVMQUw+OzxTQUJJPjtJR05PUkUKKzxVMTIyRj4gPFJJUz47PFpFTUVERT47PFJBQkk+O0lHTk9SRQorPFUxMjMwPiA8U0FUPjs8UUVMQUw+OzxHRSdFWj47SUdOT1JFCis8VTEyMzE+IDxTQVQ+OzxRRUxBTD47PEtBJ0lCPjtJR05PUkUKKzxVMTIzMj4gPFNBVD47PFFFTEFMPjs8U0FMSVM+O0lHTk9SRQorPFUxMjMzPiA8U0FUPjs8UUVMQUw+OzxSQUJJPjtJR05PUkUKKzxVMTIzND4gPFNBVD47PFFFTEFMPjs8SEFNSVM+O0lHTk9SRQorPFUxMjM1PiA8U0FUPjs8UUVMQUw+OzxTQURJUz47SUdOT1JFCis8VTEyMzY+IDxTQVQ+OzxRRUxBTD47PFNBQkk+O0lHTk9SRQorPFUxMjM3PiA8U0FUPjs8WkVNRURFPjs8UkFCST47SUdOT1JFCis8VTEyMzg+IDxTSEEtU0FUPjs8UUVMQUw+OzxHRSdFWj47SUdOT1JFCis8VTEyMzk+IDxTSEEtU0FUPjs8UUVMQUw+OzxLQSdJQj47SUdOT1JFCis8VTEyM0E+IDxTSEEtU0FUPjs8UUVMQUw+OzxTQUxJUz47SUdOT1JFCis8VTEyM0I+IDxTSEEtU0FUPjs8UUVMQUw+OzxSQUJJPjtJR05PUkUKKzxVMTIzQz4gPFNIQS1TQVQ+OzxRRUxBTD47PEhBTUlTPjtJR05PUkUKKzxVMTIzRD4gPFNIQS1TQVQ+OzxRRUxBTD47PFNBRElTPjtJR05PUkUKKzxVMTIzRT4gPFNIQS1TQVQ+OzxRRUxBTD47PFNBQkk+O0lHTk9SRQorPFUxMjNGPiA8U0hBLVNBVD47PFpFTUVERT47PFJBQkk+O0lHTk9SRQorPFUxMjQwPiA8UUFGPjs8UUVMQUw+OzxHRSdFWj47SUdOT1JFCis8VTEyNDE+IDxRQUY+OzxRRUxBTD47PEtBJ0lCPjtJR05PUkUKKzxVMTI0Mj4gPFFBRj47PFFFTEFMPjs8U0FMSVM+O0lHTk9SRQorPFUxMjQzPiA8UUFGPjs8UUVMQUw+OzxSQUJJPjtJR05PUkUKKzxVMTI0ND4gPFFBRj47PFFFTEFMPjs8SEFNSVM+O0lHTk9SRQorPFUxMjQ1PiA8UUFGPjs8UUVMQUw+OzxTQURJUz47SUdOT1JFCis8VTEyNDY+IDxRQUY+OzxRRUxBTD47PFNBQkk+O0lHTk9SRQorPFUxMjQ4PiA8UUFGPjs8WkVNRURFPjs8R0UnRVo+O0lHTk9SRQorPFUxMjRBPiA8UUFGPjs8WkVNRURFPjs8U0FMSVM+O0lHTk9SRQorPFUxMjRCPiA8UUFGPjs8WkVNRURFPjs8UkFCST47SUdOT1JFCis8VTEyNEM+IDxRQUY+OzxaRU1FREU+OzxIQU1JUz47SUdOT1JFCis8VTEyNEQ+IDxRQUY+OzxaRU1FREU+OzxLQSdJQj47SUdOT1JFCis8VTEyNTA+IDxRSEEtUUFGPjs8UUVMQUw+OzxHRSdFWj47SUdOT1JFCis8VTEyNTE+IDxRSEEtUUFGPjs8UUVMQUw+OzxLQSdJQj47SUdOT1JFCis8VTEyNTI+IDxRSEEtUUFGPjs8UUVMQUw+OzxTQUxJUz47SUdOT1JFCis8VTEyNTM+IDxRSEEtUUFGPjs8UUVMQUw+OzxSQUJJPjtJR05PUkUKKzxVMTI1ND4gPFFIQS1RQUY+OzxRRUxBTD47PEhBTUlTPjtJR05PUkUKKzxVMTI1NT4gPFFIQS1RQUY+OzxRRUxBTD47PFNBRElTPjtJR05PUkUKKzxVMTI1Nj4gPFFIQS1RQUY+OzxRRUxBTD47PFNBQkk+O0lHTk9SRQorPFUxMjU4PiA8UUhBLVFBRj47PFpFTUVERT47PEdFJ0VaPjtJR05PUkUKKzxVMTI1QT4gPFFIQS1RQUY+OzxaRU1FREU+OzxTQUxJUz47SUdOT1JFCis8VTEyNUI+IDxRSEEtUUFGPjs8WkVNRURFPjs8UkFCST47SUdOT1JFCis8VTEyNUM+IDxRSEEtUUFGPjs8WkVNRURFPjs8SEFNSVM+O0lHTk9SRQorPFUxMjVEPiA8UUhBLVFBRj47PFpFTUVERT47PEtBJ0lCPjtJR05PUkUKKzxVMTI2MD4gPEJFVD47PFFFTEFMPjs8R0UnRVo+O0lHTk9SRQorPFUxMjYxPiA8QkVUPjs8UUVMQUw+OzxLQSdJQj47SUdOT1JFCis8VTEyNjI+IDxCRVQ+OzxRRUxBTD47PFNBTElTPjtJR05PUkUKKzxVMTI2Mz4gPEJFVD47PFFFTEFMPjs8UkFCST47SUdOT1JFCis8VTEyNjQ+IDxCRVQ+OzxRRUxBTD47PEhBTUlTPjtJR05PUkUKKzxVMTI2NT4gPEJFVD47PFFFTEFMPjs8U0FESVM+O0lHTk9SRQorPFUxMjY2PiA8QkVUPjs8UUVMQUw+OzxTQUJJPjtJR05PUkUKKzxVMTI2Nz4gPEJFVD47PFpFTUVERT47PFJBQkk+O0lHTk9SRQorPFUxMjY4PiA8VkUtQkVUPjs8UUVMQUw+OzxHRSdFWj47SUdOT1JFCis8VTEyNjk+IDxWRS1CRVQ+OzxRRUxBTD47PEtBJ0lCPjtJR05PUkUKKzxVMTI2QT4gPFZFLUJFVD47PFFFTEFMPjs8U0FMSVM+O0lHTk9SRQorPFUxMjZCPiA8VkUtQkVUPjs8UUVMQUw+OzxSQUJJPjtJR05PUkUKKzxVMTI2Qz4gPFZFLUJFVD47PFFFTEFMPjs8SEFNSVM+O0lHTk9SRQorPFUxMjZEPiA8VkUtQkVUPjs8UUVMQUw+OzxTQURJUz47SUdOT1JFCis8VTEyNkU+IDxWRS1CRVQ+OzxRRUxBTD47PFNBQkk+O0lHTk9SRQorPFUxMjZGPiA8VkUtQkVUPjs8WkVNRURFPjs8UkFCST47SUdOT1JFCis8VTEyNzA+IDxUQVc+OzxRRUxBTD47PEdFJ0VaPjtJR05PUkUKKzxVMTI3MT4gPFRBVz47PFFFTEFMPjs8S0EnSUI+O0lHTk9SRQorPFUxMjcyPiA8VEFXPjs8UUVMQUw+OzxTQUxJUz47SUdOT1JFCis8VTEyNzM+IDxUQVc+OzxRRUxBTD47PFJBQkk+O0lHTk9SRQorPFUxMjc0PiA8VEFXPjs8UUVMQUw+OzxIQU1JUz47SUdOT1JFCis8VTEyNzU+IDxUQVc+OzxRRUxBTD47PFNBRElTPjtJR05PUkUKKzxVMTI3Nj4gPFRBVz47PFFFTEFMPjs8U0FCST47SUdOT1JFCis8VTEyNzc+IDxUQVc+OzxaRU1FREU+OzxSQUJJPjtJR05PUkUKKzxVMTI3OD4gPENIQS1UQVc+OzxRRUxBTD47PEdFJ0VaPjtJR05PUkUKKzxVMTI3OT4gPENIQS1UQVc+OzxRRUxBTD47PEtBJ0lCPjtJR05PUkUKKzxVMTI3QT4gPENIQS1UQVc+OzxRRUxBTD47PFNBTElTPjtJR05PUkUKKzxVMTI3Qj4gPENIQS1UQVc+OzxRRUxBTD47PFJBQkk+O0lHTk9SRQorPFUxMjdDPiA8Q0hBLVRBVz47PFFFTEFMPjs8SEFNSVM+O0lHTk9SRQorPFUxMjdEPiA8Q0hBLVRBVz47PFFFTEFMPjs8U0FESVM+O0lHTk9SRQorPFUxMjdFPiA8Q0hBLVRBVz47PFFFTEFMPjs8U0FCST47SUdOT1JFCis8VTEyN0Y+IDxDSEEtVEFXPjs8UUVMQUw+OzxUQVc+O0lHTk9SRQorPFUxMjgwPiA8SEFSTT47PFFFTEFMPjs8R0UnRVo+O0lHTk9SRQorPFUxMjgxPiA8SEFSTT47PFFFTEFMPjs8S0EnSUI+O0lHTk9SRQorPFUxMjgyPiA8SEFSTT47PFFFTEFMPjs8U0FMSVM+O0lHTk9SRQorPFUxMjgzPiA8SEFSTT47PFFFTEFMPjs8UkFCST47SUdOT1JFCis8VTEyODQ+IDxIQVJNPjs8UUVMQUw+OzxIQU1JUz47SUdOT1JFCis8VTEyODU+IDxIQVJNPjs8UUVMQUw+OzxTQURJUz47SUdOT1JFCis8VTEyODY+IDxIQVJNPjs8UUVMQUw+OzxTQUJJPjtJR05PUkUKKzxVMTI4OD4gPEhBUk0+OzxaRU1FREU+OzxHRSdFWj47SUdOT1JFCis8VTEyOEE+IDxIQVJNPjs8WkVNRURFPjs8U0FMSVM+O0lHTk9SRQorPFUxMjhCPiA8SEFSTT47PFpFTUVERT47PFJBQkk+O0lHTk9SRQorPFUxMjhDPiA8SEFSTT47PFpFTUVERT47PEhBTUlTPjtJR05PUkUKKzxVMTI4RD4gPEhBUk0+OzxaRU1FREU+OzxLQSdJQj47SUdOT1JFCis8VTEyOTA+IDxORUhBUz47PFFFTEFMPjs8R0UnRVo+O0lHTk9SRQorPFUxMjkxPiA8TkVIQVM+OzxRRUxBTD47PEtBJ0lCPjtJR05PUkUKKzxVMTI5Mj4gPE5FSEFTPjs8UUVMQUw+OzxTQUxJUz47SUdOT1JFCis8VTEyOTM+IDxORUhBUz47PFFFTEFMPjs8UkFCST47SUdOT1JFCis8VTEyOTQ+IDxORUhBUz47PFFFTEFMPjs8SEFNSVM+O0lHTk9SRQorPFUxMjk1PiA8TkVIQVM+OzxRRUxBTD47PFNBRElTPjtJR05PUkUKKzxVMTI5Nj4gPE5FSEFTPjs8UUVMQUw+OzxTQUJJPjtJR05PUkUKKzxVMTI5Nz4gPE5FSEFTPjs8WkVNRURFPjs8UkFCST47SUdOT1JFCis8VTEyOTg+IDxOWUUtTkVIQVM+OzxRRUxBTD47PEdFJ0VaPjtJR05PUkUKKzxVMTI5OT4gPE5ZRS1ORUhBUz47PFFFTEFMPjs8S0EnSUI+O0lHTk9SRQorPFUxMjlBPiA8TllFLU5FSEFTPjs8UUVMQUw+OzxTQUxJUz47SUdOT1JFCis8VTEyOUI+IDxOWUUtTkVIQVM+OzxRRUxBTD47PFJBQkk+O0lHTk9SRQorPFUxMjlDPiA8TllFLU5FSEFTPjs8UUVMQUw+OzxIQU1JUz47SUdOT1JFCis8VTEyOUQ+IDxOWUUtTkVIQVM+OzxRRUxBTD47PFNBRElTPjtJR05PUkUKKzxVMTI5RT4gPE5ZRS1ORUhBUz47PFFFTEFMPjs8U0FCST47SUdOT1JFCis8VTEyOUY+IDxOWUUtTkVIQVM+OzxaRU1FREU+OzxSQUJJPjtJR05PUkUKKzxVMTJBMD4gPEFMRUY+OzxRRUxBTD47PEdFJ0VaPjtJR05PUkUKKzxVMTJBMT4gPEFMRUY+OzxRRUxBTD47PEtBJ0lCPjtJR05PUkUKKzxVMTJBMj4gPEFMRUY+OzxRRUxBTD47PFNBTElTPjtJR05PUkUKKzxVMTJBMz4gPEFMRUY+OzxRRUxBTD47PFJBQkk+O0lHTk9SRQorPFUxMkE0PiA8QUxFRj47PFFFTEFMPjs8SEFNSVM+O0lHTk9SRQorPFUxMkE1PiA8QUxFRj47PFFFTEFMPjs8U0FESVM+O0lHTk9SRQorPFUxMkE2PiA8QUxFRj47PFFFTEFMPjs8U0FCST47SUdOT1JFCis8VTEyQTc+IDxBTEVGPjs8WkVNRURFPjs8R0UnRVo+O0lHTk9SRQorPFUxMkE4PiA8S0FGPjs8UUVMQUw+OzxHRSdFWj47SUdOT1JFCis8VTEyQTk+IDxLQUY+OzxRRUxBTD47PEtBJ0lCPjtJR05PUkUKKzxVMTJBQT4gPEtBRj47PFFFTEFMPjs8U0FMSVM+O0lHTk9SRQorPFUxMkFCPiA8S0FGPjs8UUVMQUw+OzxSQUJJPjtJR05PUkUKKzxVMTJBQz4gPEtBRj47PFFFTEFMPjs8SEFNSVM+O0lHTk9SRQorPFUxMkFEPiA8S0FGPjs8UUVMQUw+OzxTQURJUz47SUdOT1JFCis8VTEyQUU+IDxLQUY+OzxRRUxBTD47PFNBQkk+O0lHTk9SRQorPFUxMkIwPiA8S0FGPjs8WkVNRURFPjs8R0UnRVo+O0lHTk9SRQorPFUxMkIyPiA8S0FGPjs8WkVNRURFPjs8U0FMSVM+O0lHTk9SRQorPFUxMkIzPiA8S0FGPjs8WkVNRURFPjs8UkFCST47SUdOT1JFCis8VTEyQjQ+IDxLQUY+OzxaRU1FREU+OzxIQU1JUz47SUdOT1JFCis8VTEyQjU+IDxLQUY+OzxaRU1FREU+OzxLQSdJQj47SUdOT1JFCis8VTEyQjg+IDxLSEEtS0FGPjs8UUVMQUw+OzxHRSdFWj47SUdOT1JFCis8VTEyQjk+IDxLSEEtS0FGPjs8UUVMQUw+OzxLQSdJQj47SUdOT1JFCis8VTEyQkE+IDxLSEEtS0FGPjs8UUVMQUw+OzxTQUxJUz47SUdOT1JFCis8VTEyQkI+IDxLSEEtS0FGPjs8UUVMQUw+OzxSQUJJPjtJR05PUkUKKzxVMTJCQz4gPEtIQS1LQUY+OzxRRUxBTD47PEhBTUlTPjtJR05PUkUKKzxVMTJCRD4gPEtIQS1LQUY+OzxRRUxBTD47PFNBRElTPjtJR05PUkUKKzxVMTJCRT4gPEtIQS1LQUY+OzxRRUxBTD47PFNBQkk+O0lHTk9SRQorPFUxMkMwPiA8S0hBLUtBRj47PFpFTUVERT47PEdFJ0VaPjtJR05PUkUKKzxVMTJDMj4gPEtIQS1LQUY+OzxaRU1FREU+OzxTQUxJUz47SUdOT1JFCis8VTEyQzM+IDxLSEEtS0FGPjs8WkVNRURFPjs8UkFCST47SUdOT1JFCis8VTEyQzQ+IDxLSEEtS0FGPjs8WkVNRURFPjs8SEFNSVM+O0lHTk9SRQorPFUxMkM1PiA8S0hBLUtBRj47PFpFTUVERT47PEtBJ0lCPjtJR05PUkUKKzxVMTJDOD4gPFdFV0U+OzxRRUxBTD47PEdFJ0VaPjtJR05PUkUKKzxVMTJDOT4gPFdFV0U+OzxRRUxBTD47PEtBJ0lCPjtJR05PUkUKKzxVMTJDQT4gPFdFV0U+OzxRRUxBTD47PFNBTElTPjtJR05PUkUKKzxVMTJDQj4gPFdFV0U+OzxRRUxBTD47PFJBQkk+O0lHTk9SRQorPFUxMkNDPiA8V0VXRT47PFFFTEFMPjs8SEFNSVM+O0lHTk9SRQorPFUxMkNEPiA8V0VXRT47PFFFTEFMPjs8U0FESVM+O0lHTk9SRQorPFUxMkNFPiA8V0VXRT47PFFFTEFMPjs8U0FCST47SUdOT1JFCis8VTEyRDA+IDxBWUlOPjs8UUVMQUw+OzxHRSdFWj47SUdOT1JFCis8VTEyRDE+IDxBWUlOPjs8UUVMQUw+OzxLQSdJQj47SUdOT1JFCis8VTEyRDI+IDxBWUlOPjs8UUVMQUw+OzxTQUxJUz47SUdOT1JFCis8VTEyRDM+IDxBWUlOPjs8UUVMQUw+OzxSQUJJPjtJR05PUkUKKzxVMTJEND4gPEFZSU4+OzxRRUxBTD47PEhBTUlTPjtJR05PUkUKKzxVMTJENT4gPEFZSU4+OzxRRUxBTD47PFNBRElTPjtJR05PUkUKKzxVMTJENj4gPEFZSU4+OzxRRUxBTD47PFNBQkk+O0lHTk9SRQorPFUxMkQ4PiA8WkVZPjs8UUVMQUw+OzxHRSdFWj47SUdOT1JFCis8VTEyRDk+IDxaRVk+OzxRRUxBTD47PEtBJ0lCPjtJR05PUkUKKzxVMTJEQT4gPFpFWT47PFFFTEFMPjs8U0FMSVM+O0lHTk9SRQorPFUxMkRCPiA8WkVZPjs8UUVMQUw+OzxSQUJJPjtJR05PUkUKKzxVMTJEQz4gPFpFWT47PFFFTEFMPjs8SEFNSVM+O0lHTk9SRQorPFUxMkREPiA8WkVZPjs8UUVMQUw+OzxTQURJUz47SUdOT1JFCis8VTEyREU+IDxaRVk+OzxRRUxBTD47PFNBQkk+O0lHTk9SRQorPFUxMkRGPiA8WkVZPjs8WkVNRURFPjs8UkFCST47SUdOT1JFCis8VTEyRTA+IDxaSEUtWkVZPjs8UUVMQUw+OzxHRSdFWj47SUdOT1JFCis8VTEyRTE+IDxaSEUtWkVZPjs8UUVMQUw+OzxLQSdJQj47SUdOT1JFCis8VTEyRTI+IDxaSEUtWkVZPjs8UUVMQUw+OzxTQUxJUz47SUdOT1JFCis8VTEyRTM+IDxaSEUtWkVZPjs8UUVMQUw+OzxSQUJJPjtJR05PUkUKKzxVMTJFND4gPFpIRS1aRVk+OzxRRUxBTD47PEhBTUlTPjtJR05PUkUKKzxVMTJFNT4gPFpIRS1aRVk+OzxRRUxBTD47PFNBRElTPjtJR05PUkUKKzxVMTJFNj4gPFpIRS1aRVk+OzxRRUxBTD47PFNBQkk+O0lHTk9SRQorPFUxMkU3PiA8WkhFLVpFWT47PFpFTUVERT47PFJBQkk+O0lHTk9SRQorPFUxMkU4PiA8WUVNRU4+OzxRRUxBTD47PEdFJ0VaPjtJR05PUkUKKzxVMTJFOT4gPFlFTUVOPjs8UUVMQUw+OzxLQSdJQj47SUdOT1JFCis8VTEyRUE+IDxZRU1FTj47PFFFTEFMPjs8U0FMSVM+O0lHTk9SRQorPFUxMkVCPiA8WUVNRU4+OzxRRUxBTD47PFJBQkk+O0lHTk9SRQorPFUxMkVDPiA8WUVNRU4+OzxRRUxBTD47PEhBTUlTPjtJR05PUkUKKzxVMTJFRD4gPFlFTUVOPjs8UUVMQUw+OzxTQURJUz47SUdOT1JFCis8VTEyRUU+IDxZRU1FTj47PFFFTEFMPjs8U0FCST47SUdOT1JFCis8VTEyRjA+IDxESU5UPjs8UUVMQUw+OzxHRSdFWj47SUdOT1JFCis8VTEyRjE+IDxESU5UPjs8UUVMQUw+OzxLQSdJQj47SUdOT1JFCis8VTEyRjI+IDxESU5UPjs8UUVMQUw+OzxTQUxJUz47SUdOT1JFCis8VTEyRjM+IDxESU5UPjs8UUVMQUw+OzxSQUJJPjtJR05PUkUKKzxVMTJGND4gPERJTlQ+OzxRRUxBTD47PEhBTUlTPjtJR05PUkUKKzxVMTJGNT4gPERJTlQ+OzxRRUxBTD47PFNBRElTPjtJR05PUkUKKzxVMTJGNj4gPERJTlQ+OzxRRUxBTD47PFNBQkk+O0lHTk9SRQorPFUxMkY3PiA8RElOVD47PFpFTUVERT47PFJBQkk+O0lHTk9SRQorPFUxMkY4PiA8REhJLURJTlQ+OzxRRUxBTD47PEdFJ0VaPjtJR05PUkUKKzxVMTJGOT4gPERISS1ESU5UPjs8UUVMQUw+OzxLQSdJQj47SUdOT1JFCis8VTEyRkE+IDxESEktRElOVD47PFFFTEFMPjs8U0FMSVM+O0lHTk9SRQorPFUxMkZCPiA8REhJLURJTlQ+OzxRRUxBTD47PFJBQkk+O0lHTk9SRQorPFUxMkZDPiA8REhJLURJTlQ+OzxRRUxBTD47PEhBTUlTPjtJR05PUkUKKzxVMTJGRD4gPERISS1ESU5UPjs8UUVMQUw+OzxTQURJUz47SUdOT1JFCis8VTEyRkU+IDxESEktRElOVD47PFFFTEFMPjs8U0FCST47SUdOT1JFCis8VTEyRkY+IDxESEktRElOVD47PFpFTUVERT47PFJBQkk+O0lHTk9SRQorPFUxMzAwPiA8SkktRElOVD47PFFFTEFMPjs8R0UnRVo+O0lHTk9SRQorPFUxMzAxPiA8SkktRElOVD47PFFFTEFMPjs8S0EnSUI+O0lHTk9SRQorPFUxMzAyPiA8SkktRElOVD47PFFFTEFMPjs8U0FMSVM+O0lHTk9SRQorPFUxMzAzPiA8SkktRElOVD47PFFFTEFMPjs8UkFCST47SUdOT1JFCis8VTEzMDQ+IDxKSS1ESU5UPjs8UUVMQUw+OzxIQU1JUz47SUdOT1JFCis8VTEzMDU+IDxKSS1ESU5UPjs8UUVMQUw+OzxTQURJUz47SUdOT1JFCis8VTEzMDY+IDxKSS1ESU5UPjs8UUVMQUw+OzxTQUJJPjtJR05PUkUKKzxVMTMwNz4gPEpJLURJTlQ+OzxaRU1FREU+OzxSQUJJPjtJR05PUkUKKzxVMTMwOD4gPEdFTUVMPjs8UUVMQUw+OzxHRSdFWj47SUdOT1JFCis8VTEzMDk+IDxHRU1FTD47PFFFTEFMPjs8S0EnSUI+O0lHTk9SRQorPFUxMzBBPiA8R0VNRUw+OzxRRUxBTD47PFNBTElTPjtJR05PUkUKKzxVMTMwQj4gPEdFTUVMPjs8UUVMQUw+OzxSQUJJPjtJR05PUkUKKzxVMTMwQz4gPEdFTUVMPjs8UUVMQUw+OzxIQU1JUz47SUdOT1JFCis8VTEzMEQ+IDxHRU1FTD47PFFFTEFMPjs8U0FESVM+O0lHTk9SRQorPFUxMzBFPiA8R0VNRUw+OzxRRUxBTD47PFNBQkk+O0lHTk9SRQorPFUxMzEwPiA8R0VNRUw+OzxaRU1FREU+OzxHRSdFWj47SUdOT1JFCis8VTEzMTI+IDxHRU1FTD47PFpFTUVERT47PFNBTElTPjtJR05PUkUKKzxVMTMxMz4gPEdFTUVMPjs8WkVNRURFPjs8UkFCST47SUdOT1JFCis8VTEzMTQ+IDxHRU1FTD47PFpFTUVERT47PEhBTUlTPjtJR05PUkUKKzxVMTMxNT4gPEdFTUVMPjs8WkVNRURFPjs8S0EnSUI+O0lHTk9SRQorPFUxMzE4PiA8TkdFLUdFTUVMPjs8UUVMQUw+OzxHRSdFWj47SUdOT1JFCis8VTEzMTk+IDxOR0UtR0VNRUw+OzxRRUxBTD47PEtBJ0lCPjtJR05PUkUKKzxVMTMxQT4gPE5HRS1HRU1FTD47PFFFTEFMPjs8U0FMSVM+O0lHTk9SRQorPFUxMzFCPiA8TkdFLUdFTUVMPjs8UUVMQUw+OzxSQUJJPjtJR05PUkUKKzxVMTMxQz4gPE5HRS1HRU1FTD47PFFFTEFMPjs8SEFNSVM+O0lHTk9SRQorPFUxMzFEPiA8TkdFLUdFTUVMPjs8UUVMQUw+OzxTQURJUz47SUdOT1JFCis8VTEzMUU+IDxOR0UtR0VNRUw+OzxRRUxBTD47PFNBQkk+O0lHTk9SRQorPFUxMzIwPiA8VEVZVD47PFFFTEFMPjs8R0UnRVo+O0lHTk9SRQorPFUxMzIxPiA8VEVZVD47PFFFTEFMPjs8S0EnSUI+O0lHTk9SRQorPFUxMzIyPiA8VEVZVD47PFFFTEFMPjs8U0FMSVM+O0lHTk9SRQorPFUxMzIzPiA8VEVZVD47PFFFTEFMPjs8UkFCST47SUdOT1JFCis8VTEzMjQ+IDxURVlUPjs8UUVMQUw+OzxIQU1JUz47SUdOT1JFCis8VTEzMjU+IDxURVlUPjs8UUVMQUw+OzxTQURJUz47SUdOT1JFCis8VTEzMjY+IDxURVlUPjs8UUVMQUw+OzxTQUJJPjtJR05PUkUKKzxVMTMyNz4gPFRFWVQ+OzxaRU1FREU+OzxSQUJJPjtJR05PUkUKKzxVMTMyOD4gPENIRS1URVlUPjs8UUVMQUw+OzxHRSdFWj47SUdOT1JFCis8VTEzMjk+IDxDSEUtVEVZVD47PFFFTEFMPjs8S0EnSUI+O0lHTk9SRQorPFUxMzJBPiA8Q0hFLVRFWVQ+OzxRRUxBTD47PFNBTElTPjtJR05PUkUKKzxVMTMyQj4gPENIRS1URVlUPjs8UUVMQUw+OzxSQUJJPjtJR05PUkUKKzxVMTMyQz4gPENIRS1URVlUPjs8UUVMQUw+OzxIQU1JUz47SUdOT1JFCis8VTEzMkQ+IDxDSEUtVEVZVD47PFFFTEFMPjs8U0FESVM+O0lHTk9SRQorPFUxMzJFPiA8Q0hFLVRFWVQ+OzxRRUxBTD47PFNBQkk+O0lHTk9SRQorPFUxMzJGPiA8Q0hFLVRFWVQ+OzxaRU1FREU+OzxSQUJJPjtJR05PUkUKKzxVMTMzMD4gPFBFWVQ+OzxRRUxBTD47PEdFJ0VaPjtJR05PUkUKKzxVMTMzMT4gPFBFWVQ+OzxRRUxBTD47PEtBJ0lCPjtJR05PUkUKKzxVMTMzMj4gPFBFWVQ+OzxRRUxBTD47PFNBTElTPjtJR05PUkUKKzxVMTMzMz4gPFBFWVQ+OzxRRUxBTD47PFJBQkk+O0lHTk9SRQorPFUxMzM0PiA8UEVZVD47PFFFTEFMPjs8SEFNSVM+O0lHTk9SRQorPFUxMzM1PiA8UEVZVD47PFFFTEFMPjs8U0FESVM+O0lHTk9SRQorPFUxMzM2PiA8UEVZVD47PFFFTEFMPjs8U0FCST47SUdOT1JFCis8VTEzMzc+IDxQRVlUPjs8WkVNRURFPjs8UkFCST47SUdOT1JFCis8VTEzMzg+IDxTRURFWT47PFFFTEFMPjs8R0UnRVo+O0lHTk9SRQorPFUxMzM5PiA8U0VERVk+OzxRRUxBTD47PEtBJ0lCPjtJR05PUkUKKzxVMTMzQT4gPFNFREVZPjs8UUVMQUw+OzxTQUxJUz47SUdOT1JFCis8VTEzM0I+IDxTRURFWT47PFFFTEFMPjs8UkFCST47SUdOT1JFCis8VTEzM0M+IDxTRURFWT47PFFFTEFMPjs8SEFNSVM+O0lHTk9SRQorPFUxMzNEPiA8U0VERVk+OzxRRUxBTD47PFNBRElTPjtJR05PUkUKKzxVMTMzRT4gPFNFREVZPjs8UUVMQUw+OzxTQUJJPjtJR05PUkUKKzxVMTMzRj4gPFNFREVZPjs8WkVNRURFPjs8UkFCST47SUdOT1JFCis8VTEzNDA+IDxTRVBBPjs8UUVMQUw+OzxHRSdFWj47SUdOT1JFCis8VTEzNDE+IDxTRVBBPjs8UUVMQUw+OzxLQSdJQj47SUdOT1JFCis8VTEzNDI+IDxTRVBBPjs8UUVMQUw+OzxTQUxJUz47SUdOT1JFCis8VTEzNDM+IDxTRVBBPjs8UUVMQUw+OzxSQUJJPjtJR05PUkUKKzxVMTM0ND4gPFNFUEE+OzxRRUxBTD47PEhBTUlTPjtJR05PUkUKKzxVMTM0NT4gPFNFUEE+OzxRRUxBTD47PFNBRElTPjtJR05PUkUKKzxVMTM0Nj4gPFNFUEE+OzxRRUxBTD47PFNBQkk+O0lHTk9SRQorPFUxMzQ4PiA8QUY+OzxRRUxBTD47PEdFJ0VaPjtJR05PUkUKKzxVMTM0OT4gPEFGPjs8UUVMQUw+OzxLQSdJQj47SUdOT1JFCis8VTEzNEE+IDxBRj47PFFFTEFMPjs8U0FMSVM+O0lHTk9SRQorPFUxMzRCPiA8QUY+OzxRRUxBTD47PFJBQkk+O0lHTk9SRQorPFUxMzRDPiA8QUY+OzxRRUxBTD47PEhBTUlTPjtJR05PUkUKKzxVMTM0RD4gPEFGPjs8UUVMQUw+OzxTQURJUz47SUdOT1JFCis8VTEzNEU+IDxBRj47PFFFTEFMPjs8U0FCST47SUdOT1JFCis8VTEzNEY+IDxBRj47PFpFTUVERT47PFJBQkk+O0lHTk9SRQorPFUxMzUwPiA8UFNBPjs8UUVMQUw+OzxHRSdFWj47SUdOT1JFCis8VTEzNTE+IDxQU0E+OzxRRUxBTD47PEtBJ0lCPjtJR05PUkUKKzxVMTM1Mj4gPFBTQT47PFFFTEFMPjs8U0FMSVM+O0lHTk9SRQorPFUxMzUzPiA8UFNBPjs8UUVMQUw+OzxSQUJJPjtJR05PUkUKKzxVMTM1ND4gPFBTQT47PFFFTEFMPjs8SEFNSVM+O0lHTk9SRQorPFUxMzU1PiA8UFNBPjs8UUVMQUw+OzxTQURJUz47SUdOT1JFCis8VTEzNTY+IDxQU0E+OzxRRUxBTD47PFNBQkk+O0lHTk9SRQorPFUxMzU3PiA8UFNBPjs8WkVNRURFPjs8UkFCST47SUdOT1JFCis8VTEzNTg+IDxSSVM+OzxaRU1FREU+OzxZQT47SUdOT1JFCis8VTEzNTk+IDxNQVk+OzxaRU1FREU+OzxZQT47SUdOT1JFCis8VTEzNUE+IDxBRj47PFpFTUVERT47PFlBPjtJR05PUkUKKworPFUxMzYxPgk8TkVVUy1ORVRFQj47PFBVTkNUVUFUSU9OPjtJR05PUkU7SUdOT1JFCis8VTEzNjI+CTxFQklZLU5FVEVCPjs8UFVOQ1RVQVRJT04+O0lHTk9SRTtJR05PUkUKKzxVMTM2Mz4JPE5FVEVMQS1TRVJFWj47PFBVTkNUVUFUSU9OPjtJR05PUkU7SUdOT1JFCis8VTEzNjQ+CTxFQklZLVNFUkVaPjs8UFVOQ1RVQVRJT04+O0lHTk9SRTtJR05PUkUKKzxVMTM2NT4JPE5FVVMtU0VSRVo+OzxQVU5DVFVBVElPTj47SUdOT1JFO0lHTk9SRQorPFUxMzY2Pgk8QVNURUFNUk8+OzxQVU5DVFVBVElPTj47SUdOT1JFO0lHTk9SRQorPFUxMzY3Pgk8U0VMRVNURS1ORVRFQj47PFBVTkNUVUFUSU9OPjtJR05PUkU7SUdOT1JFCis8VTEzNjg+CTxTRUJBVEUtTkVURUI+OzxQVU5DVFVBVElPTj47SUdOT1JFO0lHTk9SRQorCis8VTEzNjk+CTxBSEFEVT47PE5VTUVSQUxTPjtJR05PUkU7SUdOT1JFCis8VTEzNkE+CTxLSUxFSVRVPjs8TlVNRVJBTFM+O0lHTk9SRTtJR05PUkUKKzxVMTM2Qj4JPFNFTEVTVFU+OzxOVU1FUkFMUz47SUdOT1JFO0lHTk9SRQorPFUxMzZDPgk8QVJCQUlUVT47PE5VTUVSQUxTPjtJR05PUkU7SUdOT1JFCis8VTEzNkQ+CTxIQU1JU1RVPjs8TlVNRVJBTFM+O0lHTk9SRTtJR05PUkUKKzxVMTM2RT4JPFNJRElTVFU+OzxOVU1FUkFMUz47SUdOT1JFO0lHTk9SRQorPFUxMzZGPgk8U0VCQVRVPjs8TlVNRVJBTFM+O0lHTk9SRTtJR05PUkUKKzxVMTM3MD4JPFNFTUVOVFU+OzxOVU1FUkFMUz47SUdOT1JFO0lHTk9SRQorPFUxMzcxPgk8VEVTQVRVPjs8TlVNRVJBTFM+O0lHTk9SRTtJR05PUkUKKzxVMTM3Mj4JPEFTRVJUVT47PE5VTUVSQUxTPjtJR05PUkU7SUdOT1JFCis8VTEzNzM+CTxJU1JBPjs8TlVNRVJBTFM+O0lHTk9SRTtJR05PUkUKKzxVMTM3ND4JPFNFTEFTQT47PE5VTUVSQUxTPjtJR05PUkU7SUdOT1JFCis8VTEzNzU+CTxBUkJBPjs8TlVNRVJBTFM+O0lHTk9SRTtJR05PUkUKKzxVMTM3Nj4JPEhBTVNBPjs8TlVNRVJBTFM+O0lHTk9SRTtJR05PUkUKKzxVMTM3Nz4JPFNJU0E+OzxOVU1FUkFMUz47SUdOT1JFO0lHTk9SRQorPFUxMzc4Pgk8U0VCQT47PE5VTUVSQUxTPjtJR05PUkU7SUdOT1JFCis8VTEzNzk+CTxTRU1BTllBPjs8TlVNRVJBTFM+O0lHTk9SRTtJR05PUkUKKzxVMTM3QT4JPFRFU0E+OzxOVU1FUkFMUz47SUdOT1JFO0lHTk9SRQorPFUxMzdCPgk8TUVFVD47PE5VTUVSQUxTPjtJR05PUkU7SUdOT1JFCis8VTEzN0M+CTxJTEY+OzxOVU1FUkFMUz47SUdOT1JFO0lHTk9SRQorb3JkZXJfZW5kCislCityZW9yZGVyLXNlY3Rpb25zLWFmdGVyIDxMQVRJTj4KKzxFVEhJT1BJQz4KK3Jlb3JkZXItc2VjdGlvbnMtZW5kCislCitFTkQgTENfQ09MTEFURQorCisKK0xDX0NUWVBFCislCitjb3B5ICJpMThuIgorc3BhY2UgPFUxMzYxPgordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKKworJSBob3ktc2FkaXMgZm9sbG93ZWQgYnkgYSB2b3dlbAorPFUxMjA1PjxVMTJBMD4gICAgPFUwMDY4PjxVMDAyNz48VTAwNjU+Cis8VTEyMDU+PFUxMkExPiAgICA8VTAwNjg+PFUwMDI3PjxVMDA3NT4KKzxVMTIwNT48VTEyQTI+ICAgIDxVMDA2OD48VTAwMjc+PFUwMDY5PgorPFUxMjA1PjxVMTJBMD4gICAgPFUwMDY4PjxVMDAyNz48VTAwNjE+Cis8VTEyMDU+PFUxMkE0PiAgICA8VTAwNjg+PFUwMDI3PjxVMDA0NT4KKzxVMTIwNT48VTEyQTY+ICAgIDxVMDA2OD48VTAwMjc+PFUwMDZGPgorPFUxMjA1PjxVMTJBNz4gICAgPFUwMDY4PjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCislIGxhd2ktc2FkaXMgZm9sbG93ZWQgYnkgYSB2b3dlbAorPFUxMjBEPjxVMTJBMD4gICAgPFUwMDZDPjxVMDAyNz48VTAwNjU+Cis8VTEyMEQ+PFUxMkExPiAgICA8VTAwNkM+PFUwMDI3PjxVMDA3NT4KKzxVMTIwRD48VTEyQTI+ICAgIDxVMDA2Qz48VTAwMjc+PFUwMDY5PgorPFUxMjBEPjxVMTJBMD4gICAgPFUwMDZDPjxVMDAyNz48VTAwNjE+Cis8VTEyMEQ+PFUxMkE0PiAgICA8VTAwNkM+PFUwMDI3PjxVMDA0NT4KKzxVMTIwRD48VTEyQTY+ICAgIDxVMDA2Qz48VTAwMjc+PFUwMDZGPgorPFUxMjBEPjxVMTJBNz4gICAgPFUwMDZDPjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCislIGhhd3Qtc2FkaXMgZm9sbG93ZWQgYnkgYSB2b3dlbAorPFUxMjE1PjxVMTJBMD4gICAgPFUwMDQ4PjxVMDAyNz48VTAwNjU+Cis8VTEyMTU+PFUxMkExPiAgICA8VTAwNDg+PFUwMDI3PjxVMDA3NT4KKzxVMTIxNT48VTEyQTI+ICAgIDxVMDA0OD48VTAwMjc+PFUwMDY5PgorPFUxMjE1PjxVMTJBMD4gICAgPFUwMDQ4PjxVMDAyNz48VTAwNjE+Cis8VTEyMTU+PFUxMkE0PiAgICA8VTAwNDg+PFUwMDI3PjxVMDA0NT4KKzxVMTIxNT48VTEyQTY+ICAgIDxVMDA0OD48VTAwMjc+PFUwMDZGPgorPFUxMjE1PjxVMTJBNz4gICAgPFUwMDQ4PjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCislIG1heS1zYWRpcyBmb2xsb3dlZCBieSBhIHZvd2VsCis8VTEyMUQ+PFUxMkEwPiAgICA8VTAwNkQ+PFUwMDI3PjxVMDA2NT4KKzxVMTIxRD48VTEyQTE+ICAgIDxVMDA2RD48VTAwMjc+PFUwMDc1PgorPFUxMjFEPjxVMTJBMj4gICAgPFUwMDZEPjxVMDAyNz48VTAwNjk+Cis8VTEyMUQ+PFUxMkEwPiAgICA8VTAwNkQ+PFUwMDI3PjxVMDA2MT4KKzxVMTIxRD48VTEyQTQ+ICAgIDxVMDA2RD48VTAwMjc+PFUwMDQ1PgorPFUxMjFEPjxVMTJBNj4gICAgPFUwMDZEPjxVMDAyNz48VTAwNkY+Cis8VTEyMUQ+PFUxMkE3PiAgICA8VTAwNkQ+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKyUgc2V3dC1zYWRpcyBmb2xsb3dlZCBieSBhIHZvd2VsCis8VTEyMjU+PFUxMkEwPiAgICA8VTAwNjA+PFUwMDczPjxVMDAyNz48VTAwNjU+Cis8VTEyMjU+PFUxMkExPiAgICA8VTAwNjA+PFUwMDczPjxVMDAyNz48VTAwNzU+Cis8VTEyMjU+PFUxMkEyPiAgICA8VTAwNjA+PFUwMDczPjxVMDAyNz48VTAwNjk+Cis8VTEyMjU+PFUxMkEwPiAgICA8VTAwNjA+PFUwMDczPjxVMDAyNz48VTAwNjE+Cis8VTEyMjU+PFUxMkE0PiAgICA8VTAwNjA+PFUwMDczPjxVMDAyNz48VTAwNDU+Cis8VTEyMjU+PFUxMkE2PiAgICA8VTAwNjA+PFUwMDczPjxVMDAyNz48VTAwNkY+Cis8VTEyMjU+PFUxMkE3PiAgICA8VTAwNjA+PFUwMDczPjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCislIHJpcy1zYWRpcyBmb2xsb3dlZCBieSBhIHZvd2VsCis8VTEyMkQ+PFUxMkEwPiAgICA8VTAwNzI+PFUwMDI3PjxVMDA2NT4KKzxVMTIyRD48VTEyQTE+ICAgIDxVMDA3Mj48VTAwMjc+PFUwMDc1PgorPFUxMjJEPjxVMTJBMj4gICAgPFUwMDcyPjxVMDAyNz48VTAwNjk+Cis8VTEyMkQ+PFUxMkEwPiAgICA8VTAwNzI+PFUwMDI3PjxVMDA2MT4KKzxVMTIyRD48VTEyQTQ+ICAgIDxVMDA3Mj48VTAwMjc+PFUwMDQ1PgorPFUxMjJEPjxVMTJBNj4gICAgPFUwMDcyPjxVMDAyNz48VTAwNkY+Cis8VTEyMkQ+PFUxMkE3PiAgICA8VTAwNzI+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKyUgc2F0LXNhZGlzIGZvbGxvd2VkIGJ5IGEgdm93ZWwKKzxVMTIzNT48VTEyQTA+ICAgIDxVMDA3Mz48VTAwMjc+PFUwMDY1PgorPFUxMjM1PjxVMTJBMT4gICAgPFUwMDczPjxVMDAyNz48VTAwNzU+Cis8VTEyMzU+PFUxMkEyPiAgICA8VTAwNzM+PFUwMDI3PjxVMDA2OT4KKzxVMTIzNT48VTEyQTA+ICAgIDxVMDA3Mz48VTAwMjc+PFUwMDYxPgorPFUxMjM1PjxVMTJBND4gICAgPFUwMDczPjxVMDAyNz48VTAwNDU+Cis8VTEyMzU+PFUxMkE2PiAgICA8VTAwNzM+PFUwMDI3PjxVMDA2Rj4KKzxVMTIzNT48VTEyQTc+ICAgIDxVMDA3Mz48VTAwMjc+PFUwMDY1PjxVMDA2MT4KKworJSBzaGEtc2F0LXNhZGlzIGZvbGxvd2VkIGJ5IGEgdm93ZWwKKzxVMTIzRD48VTEyQTA+ICAgIDxVMDA3OD48VTAwMjc+PFUwMDY1PgorPFUxMjNEPjxVMTJBMT4gICAgPFUwMDc4PjxVMDAyNz48VTAwNzU+Cis8VTEyM0Q+PFUxMkEyPiAgICA8VTAwNzg+PFUwMDI3PjxVMDA2OT4KKzxVMTIzRD48VTEyQTA+ICAgIDxVMDA3OD48VTAwMjc+PFUwMDYxPgorPFUxMjNEPjxVMTJBND4gICAgPFUwMDc4PjxVMDAyNz48VTAwNDU+Cis8VTEyM0Q+PFUxMkE2PiAgICA8VTAwNzg+PFUwMDI3PjxVMDA2Rj4KKzxVMTIzRD48VTEyQTc+ICAgIDxVMDA3OD48VTAwMjc+PFUwMDY1PjxVMDA2MT4KKworJSBxYWYtc2FkaXMgZm9sbG93ZWQgYnkgYSB2b3dlbAorPFUxMjQ1PjxVMTJBMD4gICAgPFUwMDcxPjxVMDAyNz48VTAwNjU+Cis8VTEyNDU+PFUxMkExPiAgICA8VTAwNzE+PFUwMDI3PjxVMDA3NT4KKzxVMTI0NT48VTEyQTI+ICAgIDxVMDA3MT48VTAwMjc+PFUwMDY5PgorPFUxMjQ1PjxVMTJBMD4gICAgPFUwMDcxPjxVMDAyNz48VTAwNjE+Cis8VTEyNDU+PFUxMkE0PiAgICA8VTAwNzE+PFUwMDI3PjxVMDA0NT4KKzxVMTI0NT48VTEyQTY+ICAgIDxVMDA3MT48VTAwMjc+PFUwMDZGPgorPFUxMjQ1PjxVMTJBNz4gICAgPFUwMDcxPjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCis8VTEyNEQ+PFUxMkEwPiAgICA8VTAwNzE+PFUwMDU3PjxVMDAyNz48VTAwNjU+Cis8VTEyNEQ+PFUxMkExPiAgICA8VTAwNzE+PFUwMDU3PjxVMDAyNz48VTAwNzU+Cis8VTEyNEQ+PFUxMkEyPiAgICA8VTAwNzE+PFUwMDU3PjxVMDAyNz48VTAwNjk+Cis8VTEyNEQ+PFUxMkEwPiAgICA8VTAwNzE+PFUwMDU3PjxVMDAyNz48VTAwNjE+Cis8VTEyNEQ+PFUxMkE0PiAgICA8VTAwNzE+PFUwMDU3PjxVMDAyNz48VTAwNDU+Cis8VTEyNEQ+PFUxMkE2PiAgICA8VTAwNzE+PFUwMDU3PjxVMDAyNz48VTAwNkY+Cis8VTEyNEQ+PFUxMkE3PiAgICA8VTAwNzE+PFUwMDU3PjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCislIHFoYS1xYWYtc2FkaXMgZm9sbG93ZWQgYnkgYSB2b3dlbAorPFUxMjU1PjxVMTJBMD4gICAgPFUwMDUxPjxVMDAyNz48VTAwNjU+Cis8VTEyNTU+PFUxMkExPiAgICA8VTAwNTE+PFUwMDI3PjxVMDA3NT4KKzxVMTI1NT48VTEyQTI+ICAgIDxVMDA1MT48VTAwMjc+PFUwMDY5PgorPFUxMjU1PjxVMTJBMD4gICAgPFUwMDUxPjxVMDAyNz48VTAwNjE+Cis8VTEyNTU+PFUxMkE0PiAgICA8VTAwNTE+PFUwMDI3PjxVMDA0NT4KKzxVMTI1NT48VTEyQTY+ICAgIDxVMDA1MT48VTAwMjc+PFUwMDZGPgorPFUxMjU1PjxVMTJBNz4gICAgPFUwMDUxPjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCis8VTEyNUQ+PFUxMkEwPiAgICA8VTAwNTE+PFUwMDU3PjxVMDAyNz48VTAwNjU+Cis8VTEyNUQ+PFUxMkExPiAgICA8VTAwNTE+PFUwMDU3PjxVMDAyNz48VTAwNzU+Cis8VTEyNUQ+PFUxMkEyPiAgICA8VTAwNTE+PFUwMDU3PjxVMDAyNz48VTAwNjk+Cis8VTEyNUQ+PFUxMkEwPiAgICA8VTAwNTE+PFUwMDU3PjxVMDAyNz48VTAwNjE+Cis8VTEyNUQ+PFUxMkE0PiAgICA8VTAwNTE+PFUwMDU3PjxVMDAyNz48VTAwNDU+Cis8VTEyNUQ+PFUxMkE2PiAgICA8VTAwNTE+PFUwMDU3PjxVMDAyNz48VTAwNkY+Cis8VTEyNUQ+PFUxMkE3PiAgICA8VTAwNTE+PFUwMDU3PjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCislIGJldC1zYWRpcyBmb2xsb3dlZCBieSBhIHZvd2VsCis8VTEyNjU+PFUxMkEwPiAgICA8VTAwNjI+PFUwMDI3PjxVMDA2NT4KKzxVMTI2NT48VTEyQTE+ICAgIDxVMDA2Mj48VTAwMjc+PFUwMDc1PgorPFUxMjY1PjxVMTJBMj4gICAgPFUwMDYyPjxVMDAyNz48VTAwNjk+Cis8VTEyNjU+PFUxMkEwPiAgICA8VTAwNjI+PFUwMDI3PjxVMDA2MT4KKzxVMTI2NT48VTEyQTQ+ICAgIDxVMDA2Mj48VTAwMjc+PFUwMDQ1PgorPFUxMjY1PjxVMTJBNj4gICAgPFUwMDYyPjxVMDAyNz48VTAwNkY+Cis8VTEyNjU+PFUxMkE3PiAgICA8VTAwNjI+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKyUgdmUtYmV0LXNhZGlzIGZvbGxvd2VkIGJ5IGEgdm93ZWwKKzxVMTI2RD48VTEyQTA+ICAgIDxVMDA3Nj48VTAwMjc+PFUwMDY1PgorPFUxMjZEPjxVMTJBMT4gICAgPFUwMDc2PjxVMDAyNz48VTAwNzU+Cis8VTEyNkQ+PFUxMkEyPiAgICA8VTAwNzY+PFUwMDI3PjxVMDA2OT4KKzxVMTI2RD48VTEyQTA+ICAgIDxVMDA3Nj48VTAwMjc+PFUwMDYxPgorPFUxMjZEPjxVMTJBND4gICAgPFUwMDc2PjxVMDAyNz48VTAwNDU+Cis8VTEyNkQ+PFUxMkE2PiAgICA8VTAwNzY+PFUwMDI3PjxVMDA2Rj4KKzxVMTI2RD48VTEyQTc+ICAgIDxVMDA3Nj48VTAwMjc+PFUwMDY1PjxVMDA2MT4KKworJSB0YXctc2FkaXMgZm9sbG93ZWQgYnkgYSB2b3dlbAorPFUxMjc1PjxVMTJBMD4gICAgPFUwMDc0PjxVMDAyNz48VTAwNjU+Cis8VTEyNzU+PFUxMkExPiAgICA8VTAwNzQ+PFUwMDI3PjxVMDA3NT4KKzxVMTI3NT48VTEyQTI+ICAgIDxVMDA3ND48VTAwMjc+PFUwMDY5PgorPFUxMjc1PjxVMTJBMD4gICAgPFUwMDc0PjxVMDAyNz48VTAwNjE+Cis8VTEyNzU+PFUxMkE0PiAgICA8VTAwNzQ+PFUwMDI3PjxVMDA0NT4KKzxVMTI3NT48VTEyQTY+ICAgIDxVMDA3ND48VTAwMjc+PFUwMDZGPgorPFUxMjc1PjxVMTJBNz4gICAgPFUwMDc0PjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCislIGNoYS10YXctc2FkaXMgZm9sbG93ZWQgYnkgYSB2b3dlbAorPFUxMjdEPjxVMTJBMD4gICAgPFUwMDYzPjxVMDAyNz48VTAwNjU+Cis8VTEyN0Q+PFUxMkExPiAgICA8VTAwNjM+PFUwMDI3PjxVMDA3NT4KKzxVMTI3RD48VTEyQTI+ICAgIDxVMDA2Mz48VTAwMjc+PFUwMDY5PgorPFUxMjdEPjxVMTJBMD4gICAgPFUwMDYzPjxVMDAyNz48VTAwNjE+Cis8VTEyN0Q+PFUxMkE0PiAgICA8VTAwNjM+PFUwMDI3PjxVMDA0NT4KKzxVMTI3RD48VTEyQTY+ICAgIDxVMDA2Mz48VTAwMjc+PFUwMDZGPgorPFUxMjdEPjxVMTJBNz4gICAgPFUwMDYzPjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCislIGhhcm0tc2FkaXMgZm9sbG93ZWQgYnkgYSB2b3dlbAorPFUxMjg1PjxVMTJBMD4gICAgPFUwMDYwPjxVMDA2OD48VTAwMjc+PFUwMDY1PgorPFUxMjg1PjxVMTJBMT4gICAgPFUwMDYwPjxVMDA2OD48VTAwMjc+PFUwMDc1PgorPFUxMjg1PjxVMTJBMj4gICAgPFUwMDYwPjxVMDA2OD48VTAwMjc+PFUwMDY5PgorPFUxMjg1PjxVMTJBMD4gICAgPFUwMDYwPjxVMDA2OD48VTAwMjc+PFUwMDYxPgorPFUxMjg1PjxVMTJBND4gICAgPFUwMDYwPjxVMDA2OD48VTAwMjc+PFUwMDQ1PgorPFUxMjg1PjxVMTJBNj4gICAgPFUwMDYwPjxVMDA2OD48VTAwMjc+PFUwMDZGPgorPFUxMjg1PjxVMTJBNz4gICAgPFUwMDYwPjxVMDA2OD48VTAwMjc+PFUwMDY1PjxVMDA2MT4KKworPFUxMjhEPjxVMTJBMD4gICAgPFUwMDY4PjxVMDA1Nz48VTAwMjc+PFUwMDY1PgorPFUxMjhEPjxVMTJBMT4gICAgPFUwMDY4PjxVMDA1Nz48VTAwMjc+PFUwMDc1PgorPFUxMjhEPjxVMTJBMj4gICAgPFUwMDY4PjxVMDA1Nz48VTAwMjc+PFUwMDY5PgorPFUxMjhEPjxVMTJBMD4gICAgPFUwMDY4PjxVMDA1Nz48VTAwMjc+PFUwMDYxPgorPFUxMjhEPjxVMTJBND4gICAgPFUwMDY4PjxVMDA1Nz48VTAwMjc+PFUwMDQ1PgorPFUxMjhEPjxVMTJBNj4gICAgPFUwMDY4PjxVMDA1Nz48VTAwMjc+PFUwMDZGPgorPFUxMjhEPjxVMTJBNz4gICAgPFUwMDY4PjxVMDA1Nz48VTAwMjc+PFUwMDY1PjxVMDA2MT4KKworJSBuZWhhcy1zYWRpcyBmb2xsb3dlZCBieSBhIHZvd2VsCis8VTEyOTU+PFUxMkEwPiAgICA8VTAwNkU+PFUwMDI3PjxVMDA2NT4KKzxVMTI5NT48VTEyQTE+ICAgIDxVMDA2RT48VTAwMjc+PFUwMDc1PgorPFUxMjk1PjxVMTJBMj4gICAgPFUwMDZFPjxVMDAyNz48VTAwNjk+Cis8VTEyOTU+PFUxMkEwPiAgICA8VTAwNkU+PFUwMDI3PjxVMDA2MT4KKzxVMTI5NT48VTEyQTQ+ICAgIDxVMDA2RT48VTAwMjc+PFUwMDQ1PgorPFUxMjk1PjxVMTJBNj4gICAgPFUwMDZFPjxVMDAyNz48VTAwNkY+Cis8VTEyOTU+PFUxMkE3PiAgICA8VTAwNkU+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKyUgbnllLW5laGFzLXNhZGlzIGZvbGxvd2VkIGJ5IGEgdm93ZWwKKzxVMTI5RD48VTEyQTA+ICAgIDxVMDA0RT48VTAwMjc+PFUwMDY1PgorPFUxMjlEPjxVMTJBMT4gICAgPFUwMDRFPjxVMDAyNz48VTAwNzU+Cis8VTEyOUQ+PFUxMkEyPiAgICA8VTAwNEU+PFUwMDI3PjxVMDA2OT4KKzxVMTI5RD48VTEyQTA+ICAgIDxVMDA0RT48VTAwMjc+PFUwMDYxPgorPFUxMjlEPjxVMTJBND4gICAgPFUwMDRFPjxVMDAyNz48VTAwNDU+Cis8VTEyOUQ+PFUxMkE2PiAgICA8VTAwNEU+PFUwMDI3PjxVMDA2Rj4KKzxVMTI5RD48VTEyQTc+ICAgIDxVMDA0RT48VTAwMjc+PFUwMDY1PjxVMDA2MT4KKworJSBrYWYtc2FkaXMgZm9sbG93ZWQgYnkgYSB2b3dlbAorPFUxMkFEPjxVMTJBMD4gICAgPFUwMDZCPjxVMDAyNz48VTAwNjU+Cis8VTEyQUQ+PFUxMkExPiAgICA8VTAwNkI+PFUwMDI3PjxVMDA3NT4KKzxVMTJBRD48VTEyQTI+ICAgIDxVMDA2Qj48VTAwMjc+PFUwMDY5PgorPFUxMkFEPjxVMTJBMD4gICAgPFUwMDZCPjxVMDAyNz48VTAwNjE+Cis8VTEyQUQ+PFUxMkE0PiAgICA8VTAwNkI+PFUwMDI3PjxVMDA0NT4KKzxVMTJBRD48VTEyQTY+ICAgIDxVMDA2Qj48VTAwMjc+PFUwMDZGPgorPFUxMkFEPjxVMTJBNz4gICAgPFUwMDZCPjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCis8VTEyQjU+PFUxMkEwPiAgICA8VTAwNkI+PFUwMDU3PjxVMDAyNz48VTAwNjU+Cis8VTEyQjU+PFUxMkExPiAgICA8VTAwNkI+PFUwMDU3PjxVMDAyNz48VTAwNzU+Cis8VTEyQjU+PFUxMkEyPiAgICA8VTAwNkI+PFUwMDU3PjxVMDAyNz48VTAwNjk+Cis8VTEyQjU+PFUxMkEwPiAgICA8VTAwNkI+PFUwMDU3PjxVMDAyNz48VTAwNjE+Cis8VTEyQjU+PFUxMkE0PiAgICA8VTAwNkI+PFUwMDU3PjxVMDAyNz48VTAwNDU+Cis8VTEyQjU+PFUxMkE2PiAgICA8VTAwNkI+PFUwMDU3PjxVMDAyNz48VTAwNkY+Cis8VTEyQjU+PFUxMkE3PiAgICA8VTAwNkI+PFUwMDU3PjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCislIGtoYS1rYWYtc2FkaXMgZm9sbG93ZWQgYnkgYSB2b3dlbAorPFUxMkJEPjxVMTJBMD4gICAgPFUwMDRCPjxVMDAyNz48VTAwNjU+Cis8VTEyQkQ+PFUxMkExPiAgICA8VTAwNEI+PFUwMDI3PjxVMDA3NT4KKzxVMTJCRD48VTEyQTI+ICAgIDxVMDA0Qj48VTAwMjc+PFUwMDY5PgorPFUxMkJEPjxVMTJBMD4gICAgPFUwMDRCPjxVMDAyNz48VTAwNjE+Cis8VTEyQkQ+PFUxMkE0PiAgICA8VTAwNEI+PFUwMDI3PjxVMDA0NT4KKzxVMTJCRD48VTEyQTY+ICAgIDxVMDA0Qj48VTAwMjc+PFUwMDZGPgorPFUxMkJEPjxVMTJBNz4gICAgPFUwMDRCPjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCis8VTEyQzU+PFUxMkEwPiAgICA8VTAwNEI+PFUwMDU3PjxVMDAyNz48VTAwNjU+Cis8VTEyQzU+PFUxMkExPiAgICA8VTAwNEI+PFUwMDU3PjxVMDAyNz48VTAwNzU+Cis8VTEyQzU+PFUxMkEyPiAgICA8VTAwNEI+PFUwMDU3PjxVMDAyNz48VTAwNjk+Cis8VTEyQzU+PFUxMkEwPiAgICA8VTAwNEI+PFUwMDU3PjxVMDAyNz48VTAwNjE+Cis8VTEyQzU+PFUxMkE0PiAgICA8VTAwNEI+PFUwMDU3PjxVMDAyNz48VTAwNDU+Cis8VTEyQzU+PFUxMkE2PiAgICA8VTAwNEI+PFUwMDU3PjxVMDAyNz48VTAwNkY+Cis8VTEyQzU+PFUxMkE3PiAgICA8VTAwNEI+PFUwMDU3PjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCislIHdld2Utc2FkaXMgZm9sbG93ZWQgYnkgYSB2b3dlbAorPFUxMkNEPjxVMTJBMD4gICAgPFUwMDc3PjxVMDAyNz48VTAwNjU+Cis8VTEyQ0Q+PFUxMkExPiAgICA8VTAwNzc+PFUwMDI3PjxVMDA3NT4KKzxVMTJDRD48VTEyQTI+ICAgIDxVMDA3Nz48VTAwMjc+PFUwMDY5PgorPFUxMkNEPjxVMTJBMD4gICAgPFUwMDc3PjxVMDAyNz48VTAwNjE+Cis8VTEyQ0Q+PFUxMkE0PiAgICA8VTAwNzc+PFUwMDI3PjxVMDA0NT4KKzxVMTJDRD48VTEyQTY+ICAgIDxVMDA3Nz48VTAwMjc+PFUwMDZGPgorPFUxMkNEPjxVMTJBNz4gICAgPFUwMDc3PjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCislIHpleS1zYWRpcyBmb2xsb3plZCBieSBhIHZvd2VsCis8VTEyREQ+PFUxMkEwPiAgICA8VTAwN0E+PFUwMDI3PjxVMDA2NT4KKzxVMTJERD48VTEyQTE+ICAgIDxVMDA3QT48VTAwMjc+PFUwMDc1PgorPFUxMkREPjxVMTJBMj4gICAgPFUwMDdBPjxVMDAyNz48VTAwNjk+Cis8VTEyREQ+PFUxMkEwPiAgICA8VTAwN0E+PFUwMDI3PjxVMDA2MT4KKzxVMTJERD48VTEyQTQ+ICAgIDxVMDA3QT48VTAwMjc+PFUwMDQ1PgorPFUxMkREPjxVMTJBNj4gICAgPFUwMDdBPjxVMDAyNz48VTAwNkY+Cis8VTEyREQ+PFUxMkE3PiAgICA8VTAwN0E+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKyUgemhlLXpleS1zYWRpcyBmb2xsb3dlZCBieSBhIHZvd2VsCis8VTEyRTU+PFUxMkEwPiAgICA8VTAwNUE+PFUwMDI3PjxVMDA2NT4KKzxVMTJFNT48VTEyQTE+ICAgIDxVMDA1QT48VTAwMjc+PFUwMDc1PgorPFUxMkU1PjxVMTJBMj4gICAgPFUwMDVBPjxVMDAyNz48VTAwNjk+Cis8VTEyRTU+PFUxMkEwPiAgICA8VTAwNUE+PFUwMDI3PjxVMDA2MT4KKzxVMTJFNT48VTEyQTQ+ICAgIDxVMDA1QT48VTAwMjc+PFUwMDQ1PgorPFUxMkU1PjxVMTJBNj4gICAgPFUwMDVBPjxVMDAyNz48VTAwNkY+Cis8VTEyRTU+PFUxMkE3PiAgICA8VTAwNUE+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKyUgeWVtZW4tc2FkaXMgZm9sbG95ZWQgYnkgYSB2b3dlbAorPFUxMkVEPjxVMTJBMD4gICAgPFUwMDc5PjxVMDAyNz48VTAwNjU+Cis8VTEyRUQ+PFUxMkExPiAgICA8VTAwNzk+PFUwMDI3PjxVMDA3NT4KKzxVMTJFRD48VTEyQTI+ICAgIDxVMDA3OT48VTAwMjc+PFUwMDY5PgorPFUxMkVEPjxVMTJBMD4gICAgPFUwMDc5PjxVMDAyNz48VTAwNjE+Cis8VTEyRUQ+PFUxMkE0PiAgICA8VTAwNzk+PFUwMDI3PjxVMDA0NT4KKzxVMTJFRD48VTEyQTY+ICAgIDxVMDA3OT48VTAwMjc+PFUwMDZGPgorPFUxMkVEPjxVMTJBNz4gICAgPFUwMDc5PjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCislIGRpbnQtc2FkaXMgZm9sbG93ZWQgYnkgYSB2b3dlbAorPFUxMkY1PjxVMTJBMD4gICAgPFUwMDY0PjxVMDAyNz48VTAwNjU+Cis8VTEyRjU+PFUxMkExPiAgICA8VTAwNjQ+PFUwMDI3PjxVMDA3NT4KKzxVMTJGNT48VTEyQTI+ICAgIDxVMDA2ND48VTAwMjc+PFUwMDY5PgorPFUxMkY1PjxVMTJBMD4gICAgPFUwMDY0PjxVMDAyNz48VTAwNjE+Cis8VTEyRjU+PFUxMkE0PiAgICA8VTAwNjQ+PFUwMDI3PjxVMDA0NT4KKzxVMTJGNT48VTEyQTY+ICAgIDxVMDA2ND48VTAwMjc+PFUwMDZGPgorPFUxMkY1PjxVMTJBNz4gICAgPFUwMDY0PjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCislIGRoaS1kaW50LXNhZGlzIGZvbGxvd2VkIGJ5IGEgdm93ZWwKKzxVMTJGRD48VTEyQTA+ICAgIDxVMDA0ND48VTAwMjc+PFUwMDY1PgorPFUxMkZEPjxVMTJBMT4gICAgPFUwMDQ0PjxVMDAyNz48VTAwNzU+Cis8VTEyRkQ+PFUxMkEyPiAgICA8VTAwNDQ+PFUwMDI3PjxVMDA2OT4KKzxVMTJGRD48VTEyQTA+ICAgIDxVMDA0ND48VTAwMjc+PFUwMDYxPgorPFUxMkZEPjxVMTJBND4gICAgPFUwMDQ0PjxVMDAyNz48VTAwNDU+Cis8VTEyRkQ+PFUxMkE2PiAgICA8VTAwNDQ+PFUwMDI3PjxVMDA2Rj4KKzxVMTJGRD48VTEyQTc+ICAgIDxVMDA0ND48VTAwMjc+PFUwMDY1PjxVMDA2MT4KKworJSBqaS1kaW50LXNhZGlzIGZvbGxvd2VkIGJ5IGEgdm93ZWwKKzxVMTMwNT48VTEyQTA+ICAgIDxVMDA2QT48VTAwMjc+PFUwMDY1PgorPFUxMzA1PjxVMTJBMT4gICAgPFUwMDZBPjxVMDAyNz48VTAwNzU+Cis8VTEzMDU+PFUxMkEyPiAgICA8VTAwNkE+PFUwMDI3PjxVMDA2OT4KKzxVMTMwNT48VTEyQTA+ICAgIDxVMDA2QT48VTAwMjc+PFUwMDYxPgorPFUxMzA1PjxVMTJBND4gICAgPFUwMDZBPjxVMDAyNz48VTAwNDU+Cis8VTEzMDU+PFUxMkE2PiAgICA8VTAwNkE+PFUwMDI3PjxVMDA2Rj4KKzxVMTMwNT48VTEyQTc+ICAgIDxVMDA2QT48VTAwMjc+PFUwMDY1PjxVMDA2MT4KKworJSBnZW1lbC1zYWRpcyBmb2xsb3dlZCBieSBhIHZvd2VsCis8VTEzMEQ+PFUxMkEwPiAgICA8VTAwNjc+PFUwMDI3PjxVMDA2NT4KKzxVMTMwRD48VTEyQTE+ICAgIDxVMDA2Nz48VTAwMjc+PFUwMDc1PgorPFUxMzBEPjxVMTJBMj4gICAgPFUwMDY3PjxVMDAyNz48VTAwNjk+Cis8VTEzMEQ+PFUxMkEwPiAgICA8VTAwNjc+PFUwMDI3PjxVMDA2MT4KKzxVMTMwRD48VTEyQTQ+ICAgIDxVMDA2Nz48VTAwMjc+PFUwMDQ1PgorPFUxMzBEPjxVMTJBNj4gICAgPFUwMDY3PjxVMDAyNz48VTAwNkY+Cis8VTEzMEQ+PFUxMkE3PiAgICA8VTAwNjc+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKzxVMTMxNT48VTEyQTA+ICAgIDxVMDA2Nz48VTAwNTc+PFUwMDI3PjxVMDA2NT4KKzxVMTMxNT48VTEyQTE+ICAgIDxVMDA2Nz48VTAwNTc+PFUwMDI3PjxVMDA3NT4KKzxVMTMxNT48VTEyQTI+ICAgIDxVMDA2Nz48VTAwNTc+PFUwMDI3PjxVMDA2OT4KKzxVMTMxNT48VTEyQTA+ICAgIDxVMDA2Nz48VTAwNTc+PFUwMDI3PjxVMDA2MT4KKzxVMTMxNT48VTEyQTQ+ICAgIDxVMDA2Nz48VTAwNTc+PFUwMDI3PjxVMDA0NT4KKzxVMTMxNT48VTEyQTY+ICAgIDxVMDA2Nz48VTAwNTc+PFUwMDI3PjxVMDA2Rj4KKzxVMTMxNT48VTEyQTc+ICAgIDxVMDA2Nz48VTAwNTc+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKyUgbmdlLWdlbWVsLXNhZGlzIGZvbGxvd2VkIGJ5IGEgdm93ZWwKKzxVMTMxRD48VTEyQTA+ICAgIDxVMDA0Nz48VTAwMjc+PFUwMDY1PgorPFUxMzFEPjxVMTJBMT4gICAgPFUwMDQ3PjxVMDAyNz48VTAwNzU+Cis8VTEzMUQ+PFUxMkEyPiAgICA8VTAwNDc+PFUwMDI3PjxVMDA2OT4KKzxVMTMxRD48VTEyQTA+ICAgIDxVMDA0Nz48VTAwMjc+PFUwMDYxPgorPFUxMzFEPjxVMTJBND4gICAgPFUwMDQ3PjxVMDAyNz48VTAwNDU+Cis8VTEzMUQ+PFUxMkE2PiAgICA8VTAwNDc+PFUwMDI3PjxVMDA2Rj4KKzxVMTMxRD48VTEyQTc+ICAgIDxVMDA0Nz48VTAwMjc+PFUwMDY1PjxVMDA2MT4KKworJSB0ZXl0LXNhZGlzIGZvbGxvd2VkIGJ5IGEgdm93ZWwKKzxVMTMyNT48VTEyQTA+ICAgIDxVMDA1ND48VTAwMjc+PFUwMDY1PgorPFUxMzI1PjxVMTJBMT4gICAgPFUwMDU0PjxVMDAyNz48VTAwNzU+Cis8VTEzMjU+PFUxMkEyPiAgICA8VTAwNTQ+PFUwMDI3PjxVMDA2OT4KKzxVMTMyNT48VTEyQTA+ICAgIDxVMDA1ND48VTAwMjc+PFUwMDYxPgorPFUxMzI1PjxVMTJBND4gICAgPFUwMDU0PjxVMDAyNz48VTAwNDU+Cis8VTEzMjU+PFUxMkE2PiAgICA8VTAwNTQ+PFUwMDI3PjxVMDA2Rj4KKzxVMTMyNT48VTEyQTc+ICAgIDxVMDA1ND48VTAwMjc+PFUwMDY1PjxVMDA2MT4KKworJSBjaGUtdGV5dC1zYWRpcyBmb2xsb3dlZCBieSBhIHZvd2VsCis8VTEzMkQ+PFUxMkEwPiAgICA8VTAwNDM+PFUwMDI3PjxVMDA2NT4KKzxVMTMyRD48VTEyQTE+ICAgIDxVMDA0Mz48VTAwMjc+PFUwMDc1PgorPFUxMzJEPjxVMTJBMj4gICAgPFUwMDQzPjxVMDAyNz48VTAwNjk+Cis8VTEzMkQ+PFUxMkEwPiAgICA8VTAwNDM+PFUwMDI3PjxVMDA2MT4KKzxVMTMyRD48VTEyQTQ+ICAgIDxVMDA0Mz48VTAwMjc+PFUwMDQ1PgorPFUxMzJEPjxVMTJBNj4gICAgPFUwMDQzPjxVMDAyNz48VTAwNkY+Cis8VTEzMkQ+PFUxMkE3PiAgICA8VTAwNDM+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKyUgcGV5dC1zYWRpcyBmb2xsb3dlZCBieSBhIHZvd2VsCis8VTEzMzU+PFUxMkEwPiAgICA8VTAwNTA+PFUwMDI3PjxVMDA2NT4KKzxVMTMzNT48VTEyQTE+ICAgIDxVMDA1MD48VTAwMjc+PFUwMDc1PgorPFUxMzM1PjxVMTJBMj4gICAgPFUwMDUwPjxVMDAyNz48VTAwNjk+Cis8VTEzMzU+PFUxMkEwPiAgICA8VTAwNTA+PFUwMDI3PjxVMDA2MT4KKzxVMTMzNT48VTEyQTQ+ICAgIDxVMDA1MD48VTAwMjc+PFUwMDQ1PgorPFUxMzM1PjxVMTJBNj4gICAgPFUwMDUwPjxVMDAyNz48VTAwNkY+Cis8VTEzMzU+PFUxMkE3PiAgICA8VTAwNTA+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKyUgc2VkZXktc2FkaXMgZm9sbG93ZWQgYnkgYSB2b3dlbAorPFUxMzNEPjxVMTJBMD4gICAgPFUwMDUzPjxVMDAyNz48VTAwNjU+Cis8VTEzM0Q+PFUxMkExPiAgICA8VTAwNTM+PFUwMDI3PjxVMDA3NT4KKzxVMTMzRD48VTEyQTI+ICAgIDxVMDA1Mz48VTAwMjc+PFUwMDY5PgorPFUxMzNEPjxVMTJBMD4gICAgPFUwMDUzPjxVMDAyNz48VTAwNjE+Cis8VTEzM0Q+PFUxMkE0PiAgICA8VTAwNTM+PFUwMDI3PjxVMDA0NT4KKzxVMTMzRD48VTEyQTY+ICAgIDxVMDA1Mz48VTAwMjc+PFUwMDZGPgorPFUxMzNEPjxVMTJBNz4gICAgPFUwMDUzPjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCislIHNlcGEtc2FkaXMgZm9sbG93ZWQgYnkgYSB2b3dlbAorPFUxMzQ1PjxVMTJBMD4gICAgPFUwMDYwPjxVMDA1Mz48VTAwMjc+PFUwMDY1PgorPFUxMzQ1PjxVMTJBMT4gICAgPFUwMDYwPjxVMDA1Mz48VTAwMjc+PFUwMDc1PgorPFUxMzQ1PjxVMTJBMj4gICAgPFUwMDYwPjxVMDA1Mz48VTAwMjc+PFUwMDY5PgorPFUxMzQ1PjxVMTJBMD4gICAgPFUwMDYwPjxVMDA1Mz48VTAwMjc+PFUwMDYxPgorPFUxMzQ1PjxVMTJBND4gICAgPFUwMDYwPjxVMDA1Mz48VTAwMjc+PFUwMDQ1PgorPFUxMzQ1PjxVMTJBNj4gICAgPFUwMDYwPjxVMDA1Mz48VTAwMjc+PFUwMDZGPgorPFUxMzQ1PjxVMTJBNz4gICAgPFUwMDYwPjxVMDA1Mz48VTAwMjc+PFUwMDY1PjxVMDA2MT4KKworJSBhZi1zYWRpcyBmb2xsb3dlZCBieSBhIHZvd2VsCis8VTEzNEQ+PFUxMkEwPiAgICA8VTAwNjY+PFUwMDI3PjxVMDA2NT4KKzxVMTM0RD48VTEyQTE+ICAgIDxVMDA2Nj48VTAwMjc+PFUwMDc1PgorPFUxMzREPjxVMTJBMj4gICAgPFUwMDY2PjxVMDAyNz48VTAwNjk+Cis8VTEzNEQ+PFUxMkEwPiAgICA8VTAwNjY+PFUwMDI3PjxVMDA2MT4KKzxVMTM0RD48VTEyQTQ+ICAgIDxVMDA2Nj48VTAwMjc+PFUwMDQ1PgorPFUxMzREPjxVMTJBNj4gICAgPFUwMDY2PjxVMDAyNz48VTAwNkY+Cis8VTEzNEQ+PFUxMkE3PiAgICA8VTAwNjY+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKyUgcHNhLXNhZGlzIHBvbGxvd2VkIGJ5IGEgdm93ZWwKKzxVMTM1NT48VTEyQTA+ICAgIDxVMDA3MD48VTAwMjc+PFUwMDY1PgorPFUxMzU1PjxVMTJBMT4gICAgPFUwMDcwPjxVMDAyNz48VTAwNzU+Cis8VTEzNTU+PFUxMkEyPiAgICA8VTAwNzA+PFUwMDI3PjxVMDA2OT4KKzxVMTM1NT48VTEyQTA+ICAgIDxVMDA3MD48VTAwMjc+PFUwMDYxPgorPFUxMzU1PjxVMTJBND4gICAgPFUwMDcwPjxVMDAyNz48VTAwNDU+Cis8VTEzNTU+PFUxMkE2PiAgICA8VTAwNzA+PFUwMDI3PjxVMDA2Rj4KKzxVMTM1NT48VTEyQTc+ICAgIDxVMDA3MD48VTAwMjc+PFUwMDY1PjxVMDA2MT4KKworJSBob3kKKzxVMTIwMD4gICAgPFUwMDY4PjxVMDA2NT4KKzxVMTIwMT4gICAgPFUwMDY4PjxVMDA3NT4KKzxVMTIwMj4gICAgPFUwMDY4PjxVMDA2OT4KKzxVMTIwMz4gICAgPFUwMDY4PjxVMDA2MT4KKzxVMTIwND4gICAgPFUwMDY4PjxVMDA0NT4KKzxVMTIwNT4gICAgPFUwMDY4PgorPFUxMjA2PiAgICA8VTAwNjg+PFUwMDZGPgorCislIGxhd2kKKzxVMTIwOD4gICAgPFUwMDZDPjxVMDA2NT4KKzxVMTIwOT4gICAgPFUwMDZDPjxVMDA3NT4KKzxVMTIwQT4gICAgPFUwMDZDPjxVMDA2OT4KKzxVMTIwQj4gICAgPFUwMDZDPjxVMDA2MT4KKzxVMTIwQz4gICAgPFUwMDZDPjxVMDA0NT4KKzxVMTIwRD4gICAgPFUwMDZDPgorPFUxMjBFPiAgICA8VTAwNkM+PFUwMDZGPgorPFUxMjBGPiAgICA8VTAwNkM+PFUwMDU3PjxVMDA2MT4KKworJSBoYXd0Cis8VTEyMTA+ICAgIDxVMDA0OD48VTAwNjU+Cis8VTEyMTE+ICAgIDxVMDA0OD48VTAwNzU+Cis8VTEyMTI+ICAgIDxVMDA0OD48VTAwNjk+Cis8VTEyMTM+ICAgIDxVMDA0OD48VTAwNjE+Cis8VTEyMTQ+ICAgIDxVMDA0OD48VTAwNDU+Cis8VTEyMTU+ICAgIDxVMDA0OD4KKzxVMTIxNj4gICAgPFUwMDQ4PjxVMDA2Rj4KKzxVMTIxNz4gICAgPFUwMDQ4PjxVMDA1Nz48VTAwNjE+CisKKyUgbWF5Cis8VTEyMTg+ICAgIDxVMDA2RD48VTAwNjU+Cis8VTEyMTk+ICAgIDxVMDA2RD48VTAwNzU+Cis8VTEyMUE+ICAgIDxVMDA2RD48VTAwNjk+Cis8VTEyMUI+ICAgIDxVMDA2RD48VTAwNjE+Cis8VTEyMUM+ICAgIDxVMDA2RD48VTAwNDU+Cis8VTEyMUQ+ICAgIDxVMDA2RD4KKzxVMTIxRT4gICAgPFUwMDZEPjxVMDA2Rj4KKzxVMTIxRj4gICAgPFUwMDZEPjxVMDA1Nz48VTAwNjE+CisKKyUgc2V3dAorPFUxMjIwPiAgICA8VTAwNjA+PFUwMDczPjxVMDA2NT4KKzxVMTIyMT4gICAgPFUwMDYwPjxVMDA3Mz48VTAwNzU+Cis8VTEyMjI+ICAgIDxVMDA2MD48VTAwNzM+PFUwMDY5PgorPFUxMjIzPiAgICA8VTAwNjA+PFUwMDczPjxVMDA2MT4KKzxVMTIyND4gICAgPFUwMDYwPjxVMDA3Mz48VTAwNDU+Cis8VTEyMjU+ICAgIDxVMDA2MD48VTAwNzM+Cis8VTEyMjY+ICAgIDxVMDA2MD48VTAwNzM+PFUwMDZGPgorPFUxMjI3PiAgICA8VTAwNjA+PFUwMDczPjxVMDA1Nz48VTAwNjE+CisKKyUgcmlzCis8VTEyMjg+ICAgIDxVMDA3Mj48VTAwNjU+Cis8VTEyMjk+ICAgIDxVMDA3Mj48VTAwNzU+Cis8VTEyMkE+ICAgIDxVMDA3Mj48VTAwNjk+Cis8VTEyMkI+ICAgIDxVMDA3Mj48VTAwNjE+Cis8VTEyMkM+ICAgIDxVMDA3Mj48VTAwNDU+Cis8VTEyMkQ+ICAgIDxVMDA3Mj4KKzxVMTIyRT4gICAgPFUwMDcyPjxVMDA2Rj4KKzxVMTIyOD48VTEyQ0I+ICAgIDxVMDA3Mj48VTAwNTc+PFUwMDYxPgorCislIHNhdAorPFUxMjMwPiAgICA8VTAwNzM+PFUwMDY1PgorPFUxMjMxPiAgICA8VTAwNzM+PFUwMDc1PgorPFUxMjMyPiAgICA8VTAwNzM+PFUwMDY5PgorPFUxMjMzPiAgICA8VTAwNzM+PFUwMDYxPgorPFUxMjM0PiAgICA8VTAwNzM+PFUwMDQ1PgorPFUxMjM1PiAgICA8VTAwNzM+Cis8VTEyMzY+ICAgIDxVMDA3Mz48VTAwNkY+Cis8VTEyMzc+ICAgIDxVMDA3Mz48VTAwNTc+PFUwMDYxPgorCislIHNoYS1zYXQKKzxVMTIzOD4gICAgPFUwMDc4PjxVMDA2NT4KKzxVMTIzOT4gICAgPFUwMDc4PjxVMDA3NT4KKzxVMTIzQT4gICAgPFUwMDc4PjxVMDA2OT4KKzxVMTIzQj4gICAgPFUwMDc4PjxVMDA2MT4KKzxVMTIzQz4gICAgPFUwMDc4PjxVMDA0NT4KKzxVMTIzRD4gICAgPFUwMDc4PgorPFUxMjNFPiAgICA8VTAwNzg+PFUwMDZGPgorPFUxMjNGPiAgICA8VTAwNzg+PFUwMDU3PjxVMDA2MT4KKworJSBxYWYKKzxVMTI0MD4gICAgPFUwMDcxPjxVMDA2NT4KKzxVMTI0MT4gICAgPFUwMDcxPjxVMDA3NT4KKzxVMTI0Mj4gICAgPFUwMDcxPjxVMDA2OT4KKzxVMTI0Mz4gICAgPFUwMDcxPjxVMDA2MT4KKzxVMTI0ND4gICAgPFUwMDcxPjxVMDA0NT4KKzxVMTI0NT4gICAgPFUwMDcxPgorPFUxMjQ2PiAgICA8VTAwNzE+PFUwMDZGPgorCis8VTEyNDg+ICAgIDxVMDA3MT48VTAwNTc+PFUwMDY1PgorPFUxMjRBPiAgICA8VTAwNzE+PFUwMDU3PjxVMDA2OT4KKzxVMTI0Qj4gICAgPFUwMDcxPjxVMDA1Nz48VTAwNjE+Cis8VTEyNEM+ICAgIDxVMDA3MT48VTAwNTc+PFUwMDQ1PgorPFUxMjREPiAgICA8VTAwNzE+PFUwMDU3PgorCislIHFoYS1xYWYKKzxVMTI1MD4gICAgPFUwMDUxPjxVMDA2NT4KKzxVMTI1MT4gICAgPFUwMDUxPjxVMDA3NT4KKzxVMTI1Mj4gICAgPFUwMDUxPjxVMDA2OT4KKzxVMTI1Mz4gICAgPFUwMDUxPjxVMDA2MT4KKzxVMTI1ND4gICAgPFUwMDUxPjxVMDA0NT4KKzxVMTI1NT4gICAgPFUwMDUxPgorPFUxMjU2PiAgICA8VTAwNTE+PFUwMDZGPgorCis8VTEyNTg+ICAgIDxVMDA1MT48VTAwNTc+PFUwMDY1PgorPFUxMjVBPiAgICA8VTAwNTE+PFUwMDU3PjxVMDA2OT4KKzxVMTI1Qj4gICAgPFUwMDUxPjxVMDA1Nz48VTAwNjE+Cis8VTEyNUM+ICAgIDxVMDA1MT48VTAwNTc+PFUwMDQ1PgorPFUxMjVEPiAgICA8VTAwNTE+PFUwMDU3PgorCislIGJldAorPFUxMjYwPiAgICA8VTAwNjI+PFUwMDY1PgorPFUxMjYxPiAgICA8VTAwNjI+PFUwMDc1PgorPFUxMjYyPiAgICA8VTAwNjI+PFUwMDY5PgorPFUxMjYzPiAgICA8VTAwNjI+PFUwMDYxPgorPFUxMjY0PiAgICA8VTAwNjI+PFUwMDQ1PgorPFUxMjY1PiAgICA8VTAwNjI+Cis8VTEyNjY+ICAgIDxVMDA2Mj48VTAwNkY+Cis8VTEyNjc+ICAgIDxVMDA2Mj48VTAwNTc+PFUwMDYxPgorCislIHZlLWJldAorPFUxMjY4PiAgICA8VTAwNzY+PFUwMDY1PgorPFUxMjY5PiAgICA8VTAwNzY+PFUwMDc1PgorPFUxMjZBPiAgICA8VTAwNzY+PFUwMDY5PgorPFUxMjZCPiAgICA8VTAwNzY+PFUwMDYxPgorPFUxMjZDPiAgICA8VTAwNzY+PFUwMDQ1PgorPFUxMjZEPiAgICA8VTAwNzY+Cis8VTEyNkU+ICAgIDxVMDA3Nj48VTAwNkY+Cis8VTEyNkY+ICAgIDxVMDA3Nj48VTAwNTc+PFUwMDYxPgorCislIHRhdworPFUxMjcwPiAgICA8VTAwNzQ+PFUwMDY1PgorPFUxMjcxPiAgICA8VTAwNzQ+PFUwMDc1PgorPFUxMjcyPiAgICA8VTAwNzQ+PFUwMDY5PgorPFUxMjczPiAgICA8VTAwNzQ+PFUwMDYxPgorPFUxMjc0PiAgICA8VTAwNzQ+PFUwMDQ1PgorPFUxMjc1PiAgICA8VTAwNzQ+Cis8VTEyNzY+ICAgIDxVMDA3ND48VTAwNkY+Cis8VTEyNzc+ICAgIDxVMDA3ND48VTAwNTc+PFUwMDYxPgorCislIGNoYS10YXcKKzxVMTI3OD4gICAgPFUwMDYzPjxVMDA2NT4KKzxVMTI3OT4gICAgPFUwMDYzPjxVMDA3NT4KKzxVMTI3QT4gICAgPFUwMDYzPjxVMDA2OT4KKzxVMTI3Qj4gICAgPFUwMDYzPjxVMDA2MT4KKzxVMTI3Qz4gICAgPFUwMDYzPjxVMDA0NT4KKzxVMTI3RD4gICAgPFUwMDYzPgorPFUxMjdFPiAgICA8VTAwNjM+PFUwMDZGPgorPFUxMjdGPiAgICA8VTAwNjM+PFUwMDU3PjxVMDA2MT4KKworJSBoYXJtCis8VTEyODA+ICAgIDxVMDA2MD48VTAwNjg+PFUwMDY1PgorPFUxMjgxPiAgICA8VTAwNjA+PFUwMDY4PjxVMDA3NT4KKzxVMTI4Mj4gICAgPFUwMDYwPjxVMDA2OD48VTAwNjk+Cis8VTEyODM+ICAgIDxVMDA2MD48VTAwNjg+PFUwMDYxPgorPFUxMjg0PiAgICA8VTAwNjA+PFUwMDY4PjxVMDA0NT4KKzxVMTI4NT4gICAgPFUwMDYwPjxVMDA2OD4KKzxVMTI4Nj4gICAgPFUwMDYwPjxVMDA2OD48VTAwNkY+CisKKzxVMTI4OD4gICAgPFUwMDYwPjxVMDA2OD48VTAwNTc+PFUwMDY1PgorPFUxMjhBPiAgICA8VTAwNjA+PFUwMDY4PjxVMDA1Nz48VTAwNjk+Cis8VTEyOEI+ICAgIDxVMDA2MD48VTAwNjg+PFUwMDU3PjxVMDA2MT4KKzxVMTI4Qz4gICAgPFUwMDYwPjxVMDA2OD48VTAwNTc+PFUwMDQ1PgorPFUxMjhEPiAgICA8VTAwNjA+PFUwMDY4PjxVMDA1Nz4KKworJSBuZWhhcworPFUxMjkwPiAgICA8VTAwNkU+PFUwMDY1PgorPFUxMjkxPiAgICA8VTAwNkU+PFUwMDc1PgorPFUxMjkyPiAgICA8VTAwNkU+PFUwMDY5PgorPFUxMjkzPiAgICA8VTAwNkU+PFUwMDYxPgorPFUxMjk0PiAgICA8VTAwNkU+PFUwMDQ1PgorPFUxMjk1PiAgICA8VTAwNkU+Cis8VTEyOTY+ICAgIDxVMDA2RT48VTAwNkY+Cis8VTEyOTc+ICAgIDxVMDA2RT48VTAwNTc+PFUwMDYxPgorCislIG55ZS1uZWhhcworPFUxMjk4PiAgICA8VTAwNEU+PFUwMDY1PgorPFUxMjk5PiAgICA8VTAwNEU+PFUwMDc1PgorPFUxMjlBPiAgICA8VTAwNEU+PFUwMDY5PgorPFUxMjlCPiAgICA8VTAwNEU+PFUwMDYxPgorPFUxMjlDPiAgICA8VTAwNEU+PFUwMDQ1PgorPFUxMjlEPiAgICA8VTAwNEU+Cis8VTEyOUU+ICAgIDxVMDA0RT48VTAwNkY+Cis8VTEyOUY+ICAgIDxVMDA0RT48VTAwNTc+PFUwMDYxPgorCislIGFsZWYKKzxVMTJBMD4gICAgPFUwMDYxPgorPFUxMkExPiAgICA8VTAwNzU+Cis8VTEyQTI+ICAgIDxVMDA2OT4KKzxVMTJBMz4gICAgPFUwMDQxPgorPFUxMkE0PiAgICA8VTAwNDU+Cis8VTEyQTU+ICAgIDxVMDA0OT4KKzxVMTJBNj4gICAgPFUwMDZGPgorPFUxMkE3PiAgICA8VTAwNjU+PFUwMDYxPgorCislIGthZgorPFUxMkE4PiAgICA8VTAwNkI+PFUwMDY1PgorPFUxMkE5PiAgICA8VTAwNkI+PFUwMDc1PgorPFUxMkFBPiAgICA8VTAwNkI+PFUwMDY5PgorPFUxMkFCPiAgICA8VTAwNkI+PFUwMDYxPgorPFUxMkFDPiAgICA8VTAwNkI+PFUwMDQ1PgorPFUxMkFEPiAgICA8VTAwNkI+Cis8VTEyQUU+ICAgIDxVMDA2Qj48VTAwNkY+CisKKzxVMTJCMD4gICAgPFUwMDZCPjxVMDA1Nz48VTAwNjU+Cis8VTEyQjI+ICAgIDxVMDA2Qj48VTAwNTc+PFUwMDY5PgorPFUxMkIzPiAgICA8VTAwNkI+PFUwMDU3PjxVMDA2MT4KKzxVMTJCND4gICAgPFUwMDZCPjxVMDA1Nz48VTAwNDU+Cis8VTEyQjU+ICAgIDxVMDA2Qj48VTAwNTc+CisKKyUga2hhLWthZgorPFUxMkI4PiAgICA8VTAwNEI+PFUwMDY1PgorPFUxMkI5PiAgICA8VTAwNEI+PFUwMDc1PgorPFUxMkJBPiAgICA8VTAwNEI+PFUwMDY5PgorPFUxMkJCPiAgICA8VTAwNEI+PFUwMDYxPgorPFUxMkJDPiAgICA8VTAwNEI+PFUwMDQ1PgorPFUxMkJEPiAgICA8VTAwNEI+Cis8VTEyQkU+ICAgIDxVMDA0Qj48VTAwNkY+CisKKzxVMTJDMD4gICAgPFUwMDRCPjxVMDA1Nz48VTAwNjU+Cis8VTEyQzI+ICAgIDxVMDA0Qj48VTAwNTc+PFUwMDY5PgorPFUxMkMzPiAgICA8VTAwNEI+PFUwMDU3PjxVMDA2MT4KKzxVMTJDND4gICAgPFUwMDRCPjxVMDA1Nz48VTAwNDU+Cis8VTEyQzU+ICAgIDxVMDA0Qj48VTAwNTc+CisKKyUgd2V3ZQorPFUxMkM4PiAgICA8VTAwNzc+PFUwMDY1PgorPFUxMkM5PiAgICA8VTAwNzc+PFUwMDc1PgorPFUxMkNBPiAgICA8VTAwNzc+PFUwMDY5PgorPFUxMkNCPiAgICA8VTAwNzc+PFUwMDYxPgorPFUxMkNDPiAgICA8VTAwNzc+PFUwMDQ1PgorPFUxMkNEPiAgICA8VTAwNzc+Cis8VTEyQ0U+ICAgIDxVMDA3Nz48VTAwNkY+Cis8VTEyQzg+PFUxMkNCPiAgICA8VTAwNzc+PFUwMDU3PjxVMDA2MT4KKworJSBheWluCis8VTEyRDA+ICAgIDxVMDA2MD48VTAwNjU+Cis8VTEyRDE+ICAgIDxVMDA2MD48VTAwNzU+Cis8VTEyRDI+ICAgIDxVMDA2MD48VTAwNjk+Cis8VTEyRDM+ICAgIDxVMDA2MD48VTAwNjE+Cis8VTEyRDQ+ICAgIDxVMDA2MD48VTAwNDU+Cis8VTEyRDU+ICAgIDxVMDA2MD48VTAwNDk+Cis8VTEyRDY+ICAgIDxVMDA2MD48VTAwNkY+CisKKyUgemV5Cis8VTEyRDg+ICAgIDxVMDA3QT48VTAwNjU+Cis8VTEyRDk+ICAgIDxVMDA3QT48VTAwNzU+Cis8VTEyREE+ICAgIDxVMDA3QT48VTAwNjk+Cis8VTEyREI+ICAgIDxVMDA3QT48VTAwNjE+Cis8VTEyREM+ICAgIDxVMDA3QT48VTAwNDU+Cis8VTEyREQ+ICAgIDxVMDA3QT4KKzxVMTJERT4gICAgPFUwMDdBPjxVMDA2Rj4KKzxVMTJERj4gICAgPFUwMDdBPjxVMDA1Nz48VTAwNjE+CisKKyUgemhlLXpleQorPFUxMkUwPiAgICA8VTAwNUE+PFUwMDY1PgorPFUxMkUxPiAgICA8VTAwNUE+PFUwMDc1PgorPFUxMkUyPiAgICA8VTAwNUE+PFUwMDY5PgorPFUxMkUzPiAgICA8VTAwNUE+PFUwMDYxPgorPFUxMkU0PiAgICA8VTAwNUE+PFUwMDQ1PgorPFUxMkU1PiAgICA8VTAwNUE+Cis8VTEyRTY+ICAgIDxVMDA1QT48VTAwNkY+Cis8VTEyRTc+ICAgIDxVMDA1QT48VTAwNTc+PFUwMDYxPgorCislIHllbWVuCis8VTEyRTg+ICAgIDxVMDA3OT48VTAwNjU+Cis8VTEyRTk+ICAgIDxVMDA3OT48VTAwNzU+Cis8VTEyRUE+ICAgIDxVMDA3OT48VTAwNjk+Cis8VTEyRUI+ICAgIDxVMDA3OT48VTAwNjE+Cis8VTEyRUM+ICAgIDxVMDA3OT48VTAwNDU+Cis8VTEyRUQ+ICAgIDxVMDA3OT4KKzxVMTJFRT4gICAgPFUwMDc5PjxVMDA2Rj4KKworJSBkaW50Cis8VTEyRjA+ICAgIDxVMDA2ND48VTAwNjU+Cis8VTEyRjE+ICAgIDxVMDA2ND48VTAwNzU+Cis8VTEyRjI+ICAgIDxVMDA2ND48VTAwNjk+Cis8VTEyRjM+ICAgIDxVMDA2ND48VTAwNjE+Cis8VTEyRjQ+ICAgIDxVMDA2ND48VTAwNDU+Cis8VTEyRjU+ICAgIDxVMDA2ND4KKzxVMTJGNj4gICAgPFUwMDY0PjxVMDA2Rj4KKzxVMTJGNz4gICAgPFUwMDY0PjxVMDA1Nz48VTAwNjE+CisKKyUgZGhpLWRpbnQKKzxVMTJGOD4gICAgPFUwMDQ0PjxVMDA2NT4KKzxVMTJGOT4gICAgPFUwMDQ0PjxVMDA3NT4KKzxVMTJGQT4gICAgPFUwMDQ0PjxVMDA2OT4KKzxVMTJGQj4gICAgPFUwMDQ0PjxVMDA2MT4KKzxVMTJGQz4gICAgPFUwMDQ0PjxVMDA0NT4KKzxVMTJGRD4gICAgPFUwMDQ0PgorPFUxMkZFPiAgICA8VTAwNDQ+PFUwMDZGPgorPFUxMkZGPiAgICA8VTAwNDQ+PFUwMDU3PjxVMDA2MT4KKworJSBqaS1kaW50Cis8VTEzMDA+ICAgIDxVMDA2QT48VTAwNjU+Cis8VTEzMDE+ICAgIDxVMDA2QT48VTAwNzU+Cis8VTEzMDI+ICAgIDxVMDA2QT48VTAwNjk+Cis8VTEzMDM+ICAgIDxVMDA2QT48VTAwNjE+Cis8VTEzMDQ+ICAgIDxVMDA2QT48VTAwNDU+Cis8VTEzMDU+ICAgIDxVMDA2QT4KKzxVMTMwNj4gICAgPFUwMDZBPjxVMDA2Rj4KKzxVMTMwNz4gICAgPFUwMDZBPjxVMDA1Nz48VTAwNjE+CisKKyUgZ2VtZWwKKzxVMTMwOD4gICAgPFUwMDY3PjxVMDA2NT4KKzxVMTMwOT4gICAgPFUwMDY3PjxVMDA3NT4KKzxVMTMwQT4gICAgPFUwMDY3PjxVMDA2OT4KKzxVMTMwQj4gICAgPFUwMDY3PjxVMDA2MT4KKzxVMTMwQz4gICAgPFUwMDY3PjxVMDA0NT4KKzxVMTMwRD4gICAgPFUwMDY3PgorPFUxMzBFPiAgICA8VTAwNjc+PFUwMDZGPgorCis8VTEzMTA+ICAgIDxVMDA2Nz48VTAwNTc+PFUwMDY1PgorPFUxMzEyPiAgICA8VTAwNjc+PFUwMDU3PjxVMDA2OT4KKzxVMTMxMz4gICAgPFUwMDY3PjxVMDA1Nz48VTAwNjE+Cis8VTEzMTQ+ICAgIDxVMDA2Nz48VTAwNTc+PFUwMDQ1PgorPFUxMzE1PiAgICA8VTAwNjc+PFUwMDU3PgorCislIG5nZS1nZW1lbAorPFUxMzE4PiAgICA8VTAwNDc+PFUwMDY1PgorPFUxMzE5PiAgICA8VTAwNDc+PFUwMDc1PgorPFUxMzFBPiAgICA8VTAwNDc+PFUwMDY5PgorPFUxMzFCPiAgICA8VTAwNDc+PFUwMDYxPgorPFUxMzFDPiAgICA8VTAwNDc+PFUwMDQ1PgorPFUxMzFEPiAgICA8VTAwNDc+Cis8VTEzMUU+ICAgIDxVMDA0Nz48VTAwNkY+Cis8VTEzMUY+ICAgIDxVMDA0Nz48VTAwNTc+PFUwMDYxPgorCislIHRleXQKKzxVMTMyMD4gICAgPFUwMDU0PjxVMDA2NT4KKzxVMTMyMT4gICAgPFUwMDU0PjxVMDA3NT4KKzxVMTMyMj4gICAgPFUwMDU0PjxVMDA2OT4KKzxVMTMyMz4gICAgPFUwMDU0PjxVMDA2MT4KKzxVMTMyND4gICAgPFUwMDU0PjxVMDA0NT4KKzxVMTMyNT4gICAgPFUwMDU0PgorPFUxMzI2PiAgICA8VTAwNTQ+PFUwMDZGPgorPFUxMzI3PiAgICA8VTAwNTQ+PFUwMDU3PjxVMDA2MT4KKworJSBjaGUtdGV5dAorPFUxMzI4PiAgICA8VTAwNDM+PFUwMDY1PgorPFUxMzI5PiAgICA8VTAwNDM+PFUwMDc1PgorPFUxMzJBPiAgICA8VTAwNDM+PFUwMDY5PgorPFUxMzJCPiAgICA8VTAwNDM+PFUwMDYxPgorPFUxMzJDPiAgICA8VTAwNDM+PFUwMDQ1PgorPFUxMzJEPiAgICA8VTAwNDM+Cis8VTEzMkU+ICAgIDxVMDA0Mz48VTAwNkY+Cis8VTEzMkY+ICAgIDxVMDA0Mz48VTAwNTc+PFUwMDYxPgorCislIHBleXQKKzxVMTMzMD4gICAgPFUwMDUwPjxVMDA2NT4KKzxVMTMzMT4gICAgPFUwMDUwPjxVMDA3NT4KKzxVMTMzMj4gICAgPFUwMDUwPjxVMDA2OT4KKzxVMTMzMz4gICAgPFUwMDUwPjxVMDA2MT4KKzxVMTMzND4gICAgPFUwMDUwPjxVMDA0NT4KKzxVMTMzNT4gICAgPFUwMDUwPgorPFUxMzM2PiAgICA8VTAwNTA+PFUwMDZGPgorPFUxMzM3PiAgICA8VTAwNTA+PFUwMDU3PjxVMDA2MT4KKworJSBzZWRleQorPFUxMzM4PiAgICA8VTAwNTM+PFUwMDY1PgorPFUxMzM5PiAgICA8VTAwNTM+PFUwMDc1PgorPFUxMzNBPiAgICA8VTAwNTM+PFUwMDY5PgorPFUxMzNCPiAgICA8VTAwNTM+PFUwMDYxPgorPFUxMzNDPiAgICA8VTAwNTM+PFUwMDQ1PgorPFUxMzNEPiAgICA8VTAwNTM+Cis8VTEzM0U+ICAgIDxVMDA1Mz48VTAwNkY+Cis8VTEzM0Y+ICAgIDxVMDA1Mz48VTAwNTc+PFUwMDYxPgorCislIHNlcGEKKzxVMTM0MD4gICAgPFUwMDYwPjxVMDA1Mz48VTAwNjU+Cis8VTEzNDE+ICAgIDxVMDA2MD48VTAwNTM+PFUwMDc1PgorPFUxMzQyPiAgICA8VTAwNjA+PFUwMDUzPjxVMDA2OT4KKzxVMTM0Mz4gICAgPFUwMDYwPjxVMDA1Mz48VTAwNjE+Cis8VTEzNDQ+ICAgIDxVMDA2MD48VTAwNTM+PFUwMDQ1PgorPFUxMzQ1PiAgICA8VTAwNjA+PFUwMDUzPgorPFUxMzQ2PiAgICA8VTAwNjA+PFUwMDUzPjxVMDA2Rj4KKzxVMTMzRj4gICAgPFUwMDYwPjxVMDA1Mz48VTAwNTc+PFUwMDYxPgorCislIGFmCis8VTEzNDg+ICAgIDxVMDA2Nj48VTAwNjU+Cis8VTEzNDk+ICAgIDxVMDA2Nj48VTAwNzU+Cis8VTEzNEE+ICAgIDxVMDA2Nj48VTAwNjk+Cis8VTEzNEI+ICAgIDxVMDA2Nj48VTAwNjE+Cis8VTEzNEM+ICAgIDxVMDA2Nj48VTAwNDU+Cis8VTEzNEQ+ICAgIDxVMDA2Nj4KKzxVMTM0RT4gICAgPFUwMDY2PjxVMDA2Rj4KKzxVMTM0Rj4gICAgPFUwMDY2PjxVMDA1Nz48VTAwNjE+CisKKyUgcHNhCis8VTEzNTA+ICAgIDxVMDA3MD48VTAwNjU+Cis8VTEzNTE+ICAgIDxVMDA3MD48VTAwNzU+Cis8VTEzNTI+ICAgIDxVMDA3MD48VTAwNjk+Cis8VTEzNTM+ICAgIDxVMDA3MD48VTAwNjE+Cis8VTEzNTQ+ICAgIDxVMDA3MD48VTAwNDU+Cis8VTEzNTU+ICAgIDxVMDA3MD4KKzxVMTM1Nj4gICAgPFUwMDcwPjxVMDA2Rj4KKzxVMTM1Nz4gICAgPFUwMDcwPjxVMDA1Nz48VTAwNjE+CisKKyUgTGlnYXR1cmVzCis8VTEzNTg+ICAgIDxVMDA2RD48VTAwNTk+PFUwMDYxPgorPFUxMzU5PiAgICA8VTAwNzI+PFUwMDU5PjxVMDA2MT4KKzxVMTM1QT4gICAgPFUwMDY2PjxVMDA1OT48VTAwNjE+CisKKyUgUHVuY3R1YXRpb24KKzxVMTM2MT4gICAgPFUwMDNBPgorPFUxMzYyPiAgICA8VTAwM0E+PFUwMDNBPgorPFUxMzYzPiAgICA8VTAwMkM+Cis8VTEzNjQ+ICAgIDxVMDAzQj4KKzxVMTM2Nj4gICAgPFUwMDNBPjxVMDAyRD4KKzxVMTM2NT4gICAgPFUwMDJEPjxVMDAzQT4KKzxVMTM2Nz4gICAgPFUwMDYwPjxVMDAzRj4KKzxVMTM2OD4gICAgPFUwMDNBPjxVMDA3Qz48VTAwM0E+CisKKyUgTnVtZXJhbHMKKzxVMTM2OT4gICAgPFUwMDYwPjxVMDAzMT4KKzxVMTM2QT4gICAgPFUwMDYwPjxVMDAzMj4KKzxVMTM2Qj4gICAgPFUwMDYwPjxVMDAzMz4KKzxVMTM2Qz4gICAgPFUwMDYwPjxVMDAzND4KKzxVMTM2RD4gICAgPFUwMDYwPjxVMDAzNT4KKzxVMTM2RT4gICAgPFUwMDYwPjxVMDAzNj4KKzxVMTM2Rj4gICAgPFUwMDYwPjxVMDAzNz4KKzxVMTM3MD4gICAgPFUwMDYwPjxVMDAzOD4KKzxVMTM3MT4gICAgPFUwMDYwPjxVMDAzOT4KKzxVMTM3Mj4gICAgPFUwMDYwPjxVMDAzMT48VTAwMzA+Cis8VTEzNzM+ICAgIDxVMDA2MD48VTAwMzI+PFUwMDMwPgorPFUxMzc0PiAgICA8VTAwNjA+PFUwMDMzPjxVMDAzMD4KKzxVMTM3NT4gICAgPFUwMDYwPjxVMDAzND48VTAwMzA+Cis8VTEzNzY+ICAgIDxVMDA2MD48VTAwMzU+PFUwMDMwPgorPFUxMzc3PiAgICA8VTAwNjA+PFUwMDM2PjxVMDAzMD4KKzxVMTM3OD4gICAgPFUwMDYwPjxVMDAzNz48VTAwMzA+Cis8VTEzNzk+ICAgIDxVMDA2MD48VTAwMzg+PFUwMDMwPgorPFUxMzdBPiAgICA8VTAwNjA+PFUwMDM5PjxVMDAzMD4KKzxVMTM3Qj4gICAgPFUwMDYwPjxVMDAzMT48VTAwMzA+PFUwMDMwPgorPFUxMzdDPiAgICA8VTAwNjA+PFUwMDMxPjxVMDAzMD48VTAwMzA+PFUwMDMwPjxVMDAzMD4KK3RyYW5zbGl0X2VuZAorJQorRU5EIExDX0NUWVBFCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIEV0aGlvcGlhIFNwZWNpZmMgYW5kIFNoYXJlZCBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgInRpX0VUIgorRU5EIExDX01FQVNVUkVNRU5UCisKKworTENfTU9ORVRBUlkKK2NvcHkgInRpX0VUIgorRU5EIExDX01PTkVUQVJZCisKKworTENfTlVNRVJJQworY29weSAidGlfRVQiCitFTkQgTENfTlVNRVJJQworCisKK0xDX1BBUEVSCitjb3B5ICJ0aV9FVCIKK0VORCBMQ19QQVBFUgorCisKK0xDX1RFTEVQSE9ORQorY29weSAidGlfRVQiCitFTkQgTENfVEVMRVBIT05FCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIEFtaGFyaWMgU3BlY2lmYyBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfQUREUkVTUworJQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19BRERSRVNTIGNhdGVnb3J5LgorJQorcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3Mj4iCitjb3VudHJ5X25hbWUgICI8VTEyQTI+PFUxMjc1PjxVMTJFRT48VTEzMzU+PFUxMkVCPiIKK2NvdW50cnlfcG9zdCAgIjxVMDA0NT48VTAwNTQ+PFUwMDQ4PiIKK2NvdW50cnlfYWIyICAgIjxVMDA0NT48VTAwNTQ+IgorY291bnRyeV9hYjMgICAiPFUwMDQ1PjxVMDA1ND48VTAwNDg+IgorY291bnRyeV9udW0gICAyMzEgICAlIDIxMCBmb3VuZCBpbiBhdCBsZWFzdCBvbmUgSVNPIDMxNjYgZG9jCislIGNvdW50cnlfY2FyICAgdW5rbm93bgorJSBjb3VudHJ5X2lzYm4gIHVua25vd24sIE5lZWQgSVNPIDIxMDgKK2xhbmdfbmFtZSAgICAgIjxVMTJBMD48VTEyMUI+PFUxMjJEPjxVMTI5Qj4iCitsYW5nX2FiICAgICAgICI8VTAwNjE+PFUwMDZEPiIKK2xhbmdfdGVybSAgICAgIjxVMDA2MT48VTAwNkQ+PFUwMDY4PiIKK2xhbmdfbGliICAgICAgIjxVMDA2MT48VTAwNkQ+PFUwMDY4PiIKKyUKK0VORCBMQ19BRERSRVNTCisKKworTENfTUVTU0FHRVMKKyUKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorJQorRU5EIExDX01FU1NBR0VTCisKKworTENfTkFNRQorJQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OQU1FIGNhdGVnb3J5LgorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorbmFtZV9nZW4gICAgIiIKK25hbWVfbXIgICAgICI8VTEyQTA+PFUxMjc2PiIKK25hbWVfbXJzICAgICI8VTEyQzg+PFUwMDJGPjxVMTIyRT4iCituYW1lX21pc3MgICAiPFUxMkM4PjxVMDAyRj48VTEyMkE+PFUxMjc1PiIKK25hbWVfbXMgICAgICI8VTEyQzg+PFUwMDJGPjxVMTIyQT48VTEyNzU+IgorJQorRU5EIExDX05BTUUKKworCitMQ19USU1FCislCislIEFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZXMgKCVhKQorJQorYWJkYXkgICAgIjxVMTJBNT48VTEyMTE+PFUxMkY1PiI7LworICAgICAgICAgIjxVMTIzMD48VTEyOUU+PFUwMDIwPiI7LworICAgICAgICAgIjxVMTIxQj48VTEyQUQ+PFUxMjMwPiI7LworICAgICAgICAgIjxVMTIyOD48VTEyNjE+PFUxMkQ1PiI7LworICAgICAgICAgIjxVMTIxMD48VTEyMTk+PFUxMjM1PiI7LworICAgICAgICAgIjxVMTJEMz48VTEyMkQ+PFUxMjY1PiI7LworICAgICAgICAgIjxVMTI0NT48VTEyRjM+PFUxMjFDPiIKKyUKKyUgRnVsbCB3ZWVrZGF5IG5hbWVzICglQSkKKyUKK2RheSAgICAgICI8VTEyQTU+PFUxMjExPjxVMTJGNT4iOy8KKyAgICAgICAgICI8VTEyMzA+PFUxMjlFPiI7LworICAgICAgICAgIjxVMTIxQj48VTEyQUQ+PFUxMjMwPjxVMTI5RT4iOy8KKyAgICAgICAgICI8VTEyMjg+PFUxMjYxPjxVMTJENT4iOy8KKyAgICAgICAgICI8VTEyMTA+PFUxMjE5PjxVMTIzNT4iOy8KKyAgICAgICAgICI8VTEyRDM+PFUxMjJEPjxVMTI2NT4iOy8KKyAgICAgICAgICI8VTEyNDU+PFUxMkYzPjxVMTIxQz4iCislCislIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzICglYikKKyUKK2FibW9uICAgICI8VTEzMDM+PFUxMjk1PjxVMTJFOT4iOy8KKyAgICAgICAgICI8VTEzNEM+PFUxMjY1PjxVMTIyOT4iOy8KKyAgICAgICAgICI8VTEyMUI+PFUxMjJEPjxVMTI3RD4iOy8KKyAgICAgICAgICI8VTEyQTQ+PFUxMzU1PjxVMTIyOD4iOy8KKyAgICAgICAgICI8VTEyMUM+PFUxMkVEPjxVMDAyMD4iOy8KKyAgICAgICAgICI8VTEzMDE+PFUxMjk1PjxVMDAyMD4iOy8KKyAgICAgICAgICI8VTEzMDE+PFUxMjBCPjxVMTJFRD4iOy8KKyAgICAgICAgICI8VTEyQTY+PFUxMzA4PjxVMTIzNT4iOy8KKyAgICAgICAgICI8VTEyMzQ+PFUxMzU1PjxVMTI3ND4iOy8KKyAgICAgICAgICI8VTEyQTY+PFUxMkFEPjxVMTI3MD4iOy8KKyAgICAgICAgICI8VTEyOTY+PFUxMjZDPjxVMTIxRD4iOy8KKyAgICAgICAgICI8VTEyRjI+PFUxMjM0PjxVMTIxRD4iCislCislIEZ1bGwgbW9udGggbmFtZXMgKCVCKQorJQorbW9uICAgICAgIjxVMTMwMz48VTEyOTU+PFUxMkU5PjxVMTJDOD48VTEyMkE+IjsvCisgICAgICAgICAiPFUxMzRDPjxVMTI2NT48VTEyMjk+PFUxMkM4PjxVMTIyQT4iOy8KKyAgICAgICAgICI8VTEyMUI+PFUxMjJEPjxVMTI3RD4iOy8KKyAgICAgICAgICI8VTEyQTQ+PFUxMzU1PjxVMTIyOD48VTEyMEQ+IjsvCisgICAgICAgICAiPFUxMjFDPjxVMTJFRD4iOy8KKyAgICAgICAgICI8VTEzMDE+PFUxMjk1PiI7LworICAgICAgICAgIjxVMTMwMT48VTEyMEI+PFUxMkVEPiI7LworICAgICAgICAgIjxVMTJBNj48VTEzMDg+PFUxMjM1PjxVMTI3NT4iOy8KKyAgICAgICAgICI8VTEyMzQ+PFUxMzU1PjxVMTI3ND48VTEyMUQ+PFUxMjYwPjxVMTIyRD4iOy8KKyAgICAgICAgICI8VTEyQTY+PFUxMkFEPjxVMTI3MD48VTEyQ0Q+PFUxMjYwPjxVMTIyRD4iOy8KKyAgICAgICAgICI8VTEyOTY+PFUxMjZDPjxVMTIxRD48VTEyNjA+PFUxMjJEPiI7LworICAgICAgICAgIjxVMTJGMj48VTEyMzQ+PFUxMjFEPjxVMTI2MD48VTEyMkQ+IgorJQorJSBFcXVpdmFsZW50IG9mIEFNIFBNCislCithbV9wbSAgICAiPFUxMzIxPjxVMTJDQj48VTEyNzU+IjsvCisgICAgICAgICAiPFUxMkE4PjxVMTIzMD48VTEyRDM+PFUxMjc1PiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbiAoJXgpCislCSIlZC8lbS8lWSIKKyUKK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNTk+IgorJQorJSBBcHByb3ByaWF0ZSB0aW1lIHJlcHJlc2VudGF0aW9uICglWCkKKyUJIiVsOiVNOiVTIgorJQordF9mbXQgIjxVMDAyNT48VTAwNkM+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+IgorJQorJSBBcHByb3ByaWF0ZSBBTS9QTSB0aW1lIHJlcHJlc2VudGF0aW9uICglcikKKyUJIiVYICVwIgorJQordF9mbXRfYW1wbSAiPFUwMDI1PjxVMDA1OD48VTAwMjA+PFUwMDI1PjxVMDA3MD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24gKCVjKQorJQkiJUHhjaMgJUIgJWUg4YmA4YqVICVZICVyICVaCislCitkX3RfZm10ICAgICI8VTAwMjU+PFUwMDQxPjxVMTM2Mz48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUxMjQwPjxVMTI5NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKGRhdGUoMSkpCislCSIlQeGNoyAlQiAlZSDhiYDhipUgJXIgJVogJVkg4YuTL+GInQorJQorZGF0ZV9mbXQgICAgIjxVMDAyNT48VTAwNDE+PFUxMzYzPjxVMDAyMD48VTAwMjU+PFUwMDQyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTEyNDA+PFUxMjk1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyMD48VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5Pi8KKzxVMDAyMD48VTEyRDM+PFUwMDJGPjxVMTIxRD4iCislCitFTkQgTENfVElNRQorJQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYW5fRVMgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9hbl9FUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTcyMmM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYW5fRVMKQEAgLTAsMCArMSwxMjYgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBBcmFnb25lc2UgTGFuZ3VhZ2UgTG9jYWxlIGZvciBTcGFpbgorJSBTb3VyY2U6CislIEFkZHJlc3M6CislIENvbnRhY3Q6IEpvcmRpIE1hbGxhY2ggUOlyZXoKKyUgRW1haWw6IGpvcmRpQGdudS5vcmcKKyUgTGFuZ3VhZ2U6IGFuCislIFRlcnJpdG9yeTogRVMKKyUgUmV2aXNpb246IDEuMAorJSBEYXRlOiAyMDAzLTA1LTIyCislIEFwcGxpY2F0aW9uOiBnZW5lcmFsCislIFVzZXJzOiBnZW5lcmFsCislIENoYXJzZXQ6IElTTy04ODU5LTE1CislCislIFRoaXMgZmlsZSBpcyB1bmRlciB0aGUKKyUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCislIEJhc2VkIGluIHRoZSBnbF9FUyBMb2NhbGUKKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkFyYWdvbmVzZSBsb2NhbGUgZm9yIFNwYWluIgorc291cmNlICAgICAiIgorYWRkcmVzcyAgICAiIgorY29udGFjdCAgICAiSm9yZGkgTWFsbGFjaCBQ6XJleiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJBcmFnb25lc2UiCit0ZXJyaXRvcnkgICJTcGFpbiIKK3JldmlzaW9uICAgIjEuMSIKK2RhdGUgICAgICAgIjIwMDMtMDgtMjUiCislCitjYXRlZ29yeSAgImkxOG46MTk5OSI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiaTE4bjoxOTk5IjtMQ19DVFlQRQorY2F0ZWdvcnkgICJpMThuOjE5OTkiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiaTE4bjoxOTk5IjtMQ19USU1FCitjYXRlZ29yeSAgInBvc2l4OjE5OTMiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiaTE4bjoxOTk5IjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJpMThuOjE5OTkiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImkxOG46MTk5OSI7TENfUEFQRVIKK2NhdGVnb3J5ICAiaTE4bjoxOTk5IjtMQ19OQU1FCitjYXRlZ29yeSAgImkxOG46MTk5OSI7TENfQUREUkVTUworY2F0ZWdvcnkgICJpMThuOjE5OTkiO0xDX1RFTEVQSE9ORQorRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKK2NvcHkgImVzX0VTIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImVzX0VTIgorRU5EIExDX0NUWVBFCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA3Mz48VTAwNTM+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitjb3B5ICJlc19FUyIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJlc19FUyIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPiI7IjxVMDA2Qz48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsiPFUwMDZEPjxVMDA2OT48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNjM+PFUwMDY4PjxVMDA3NT4iOyI8VTAwNjI+PFUwMDY5PjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjE+PFUwMDYyPiIKK2RheSAgICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPjxVMDA2OT48VTAwNkU+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwNzU+PFUwMDZFPjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3ND48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2OT48VTAwNjU+PFUwMDYzPjxVMDA2Rj48VTAwNmM+PFUwMDczPiI7LworICAgICAgICAiPFUwMDYzPjxVMDA2OD48VTAwNzU+PFUwMDY1PjxVMDA2Mj48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDYyPjxVMDA2OT48VTAwNjU+PFUwMDcyPjxVMDA2RT48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDczPjxVMDA2MT48VTAwNjI+PFUwMDYxPjxVMDA2ND48VTAwNkY+IgorYWJtb24gICAiPFUwMDYzPjxVMDA2OD48VTAwNjk+IjsiPFUwMDY2PjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNjE+PFUwMDYyPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDc5PiI7IjxVMDA2Mz48VTAwNjg+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDYzPjxVMDA2OD48VTAwNkM+IjsiPFUwMDYxPjxVMDA2Nz48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3ND4iOyI8VTAwNmY+PFUwMDYzPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDYyPiI7IjxVMDA2MT48VTAwNjI+PFUwMDY5PiIKK21vbiAgICAgIjxVMDA2Mz48VTAwNjg+PFUwMDY5PjxVMDA2RT48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Nj48VTAwNzI+PFUwMDY1PjxVMDA2Mj48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3QT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDYyPjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDYzPjxVMDA2OD48VTAwNzU+PFUwMDZFPjxVMDA2OT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjM+PFUwMDY4PjxVMDA3NT48VTAwNkM+PFUwMDY5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNjc+PFUwMDZGPjxVMDA3Mz48VTAwNzQ+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNzQ+PFUwMDY5PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkY+PFUwMDYzPjxVMDA3ND48VTAwNzU+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA2Mj48VTAwNjk+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNjI+PFUwMDY5PjxVMDA2NT48VTAwNkU+PFUwMDc0PjxVMDA2Rj4iCitkX3RfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNzk+IgordF9mbXQgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICIiOyIiCit0X2ZtdF9hbXBtICIiCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorY29weSAiZXNfRVMiCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCitjb3B5ICJlc19FUyIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgImVzX0VTIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK2NvcHkgImVzX0VTIgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworY29weSAiZXNfRVMiCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYXJfQUUgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9hcl9BRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjRmYzQwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYXJfQUUKQEAgLTAsMCArMSwyMDIgQEAKK2NvbW1lbnRfY2hhciAgICAlCitlc2NhcGVfY2hhciAgICAgLworJSBBcmFiaWMgbGFuZ3VhZ2UgbG9jYWxlIGZvciBVbml0ZWQgQXJhYiBFbWlyYXRlcy4KKyUgQ29udHJpYnV0ZWQgYnkgS2VudGFyb2ggTm9qaSA8a25vamlAanAuaWJtLmNvbT4gYW5kCislIFRldHN1amkgT3JpdGEgPG9yaXRhQGpwLmlibS5jb20+LgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiQXJhYmljIGxhbmd1YWdlIGxvY2FsZSBmb3IgVW5pdGVkIEFyYWIgRW1pcmF0ZXMiCitzb3VyY2UgICAgICJJQk0gR2xvYmFsaXphdGlvbiBDZW50ZXIgb2YgQ29tcGV0ZW5jeSwgWWFtYXRvIFNvZnR3YXJlIExhYm9yYXRvcnkiCithZGRyZXNzICAgICIxNjIzLTE0LCBTaGltb3RzdXJ1bWEsIFlhbWF0by1zaGksIEthbmFnYXdhLWtlbiwgMjQyLTg1MDIsIEphcGFuIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkFyYWJpYyIKK3RlcnJpdG9yeSAgIlVuaXRlZCBBcmFiIEVtaXJhdGVzIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNy0yMCIKKyUKK2NhdGVnb3J5ICAiYXJfQUU6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiYXJfQUU6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiYXJfQUU6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJhcl9BRToyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImFyX0FFOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiYXJfQUU6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiYXJfQUU6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiYXJfQUU6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiYXJfQUU6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJhcl9BRToyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImFyX0FFOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImFyX0VHIgorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKKworJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEKK2NvcHkgImlzbzE0NjUxX3QxIgorCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiB0aGUgTENfTU9ORVRBUlkgY2F0ZWdvcnkuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRpZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUvSmF2YQorJQoraW50X2N1cnJfc3ltYm9sICAgICAgICI8VTAwNDE+PFUwMDQ1PjxVMDA0ND48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICI8VTA2MkY+PFUwMDJFPjxVMDYyNT48VTAwMkU+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgIDMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgIDMKK2ZyYWNfZGlnaXRzICAgICAgICAgICAzCitwX2NzX3ByZWNlZGVzICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAyCislCitFTkQgTENfTU9ORVRBUlkKKworCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAiPFUwMDJDPiIKK2dyb3VwaW5nICAgICAgMworRU5EIExDX05VTUVSSUMKKworCitMQ19USU1FCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfVElNRSBjYXRlZ29yeS4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS9KYXZhCislCislIEFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZXMgKCVhKQorYWJkYXkgICAgICAgIjxVMDYyRD4iOyI8VTA2NDY+IjsvCisgICAgICAgICAgICAiPFUwNjJCPiI7IjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2MkU+IjsiPFUwNjJDPiI7LworICAgICAgICAgICAgIjxVMDYzMz4iCislCislIEZ1bGwgd2Vla2RheSBuYW1lcyAoJUEpCitkYXkgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MjM+PFUwNjJEPjxVMDYyRj4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyNz48VTA2MkI+PFUwNjQ2PjxVMDY0QT48VTA2NDY+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MkI+PFUwNjQ0PjxVMDYyNz48VTA2MkI+PFUwNjI3PjxVMDYyMT4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyMz48VTA2MzE+PFUwNjI4PjxVMDYzOT48VTA2Mjc+PFUwNjIxPiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjJFPjxVMDY0NT48VTA2NEE+PFUwNjMzPiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjJDPjxVMDY0NT48VTA2Mzk+PFUwNjI5PiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjMzPjxVMDYyOD48VTA2MkE+PFUwMDIwPiIKKyUKKyUgQWJicmV2aWF0ZWQgbW9udGggbmFtZXMgKCViKQorYWJtb24gICAgICAgIjxVMDY0QT48VTA2NDY+PFUwNjI3PiI7IjxVMDY0MT48VTA2Mjg+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0NT48VTA2Mjc+PFUwNjMxPiI7IjxVMDYyMz48VTA2Mjg+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0NT48VTA2Mjc+PFUwNjRBPiI7IjxVMDY0QT48VTA2NDg+PFUwNjQ2PiI7LworICAgICAgICAgICAgIjxVMDY0QT48VTA2NDg+PFUwNjQ0PiI7IjxVMDYyMz48VTA2M0E+PFUwNjMzPiI7LworICAgICAgICAgICAgIjxVMDYzMz48VTA2Mjg+PFUwNjJBPiI7IjxVMDYyMz48VTA2NDM+PFUwNjJBPiI7LworICAgICAgICAgICAgIjxVMDY0Nj48VTA2NDg+PFUwNjQxPiI7IjxVMDYyRj48VTA2NEE+PFUwNjMzPiIKKyUKKyUgRnVsbCBtb250aCBuYW1lcyAoJUIpCittb24gICAgICAgICAiPFUwNjRBPjxVMDY0Nj48VTA2Mjc+PFUwNjRBPjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2NDE+PFUwNjI4PjxVMDYzMT48VTA2Mjc+PFUwNjRBPjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2NDU+PFUwNjI3PjxVMDYzMT48VTA2MzM+IjsvCisgICAgICAgICAgICAiPFUwNjIzPjxVMDYyOD48VTA2MzE+PFUwNjRBPjxVMDY0ND4iOy8KKyAgICAgICAgICAgICI8VTA2NDU+PFUwNjI3PjxVMDY0QT48VTA2NDg+IjsvCisgICAgICAgICAgICAiPFUwNjRBPjxVMDY0OD48VTA2NDY+PFUwNjRBPjxVMDY0OD4iOy8KKyAgICAgICAgICAgICI8VTA2NEE+PFUwNjQ4PjxVMDY0ND48VTA2NEE+PFUwNjQ4PiI7LworICAgICAgICAgICAgIjxVMDYyMz48VTA2M0E+PFUwNjMzPjxVMDYzNz48VTA2MzM+IjsvCisgICAgICAgICAgICAiPFUwNjMzPjxVMDYyOD48VTA2MkE+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjIzPjxVMDY0Mz48VTA2MkE+PFUwNjQ4PjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjQ2PjxVMDY0OD48VTA2NDE+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjJGPjxVMDY0QT48VTA2MzM+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IgorJQorJSBFcXVpdmFsZW50IG9mIEFNIFBNCithbV9wbSAgICAgICAiPFUwNjM1PiI7IjxVMDY0NT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJWQgJWIsICVZJVogJUk6JU06JVMKK2RfdF9mbXQgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyQz48VTAwMjA+PFUwMDI1Pi8KKzxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD4vCis8VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24KKyUgJWQgJWIsICVZCitkX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorJQorJSBBcHByb3ByaWF0ZSB0aW1lIHJlcHJlc2VudGF0aW9uCislICVaICVJOiVNOiVTCit0X2ZtdCAgICAgICAiPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RC8KKz48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+IgorJQorJSBBcHByb3ByaWF0ZSAxMiBoIHRpbWUgcmVwcmVzZW50YXRpb24gKCVyKQordF9mbXRfYW1wbSAgIjxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+LworPFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNzA+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uIChkYXRlKDEpKSAgICIlYSAlYiAlZSAlSDolTTolUyAlWiAlWSIKK2RhdGVfZm10CSI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKKworTENfTUVTU0FHRVMKK2NvcHkgImFyX0VHIgorRU5EIExDX01FU1NBR0VTCisKKworTENfUEFQRVIKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUgTENfUEFQRVIgY2F0ZWdvcnkKK2hlaWdodCAgICAgIDI5Nword2lkdGggICAgICAgMjEwCisKK0VORCBMQ19QQVBFUgorCisKK0xDX05BTUUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUgTENfTkFNRSBjYXRlZ29yeS4KKyUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDcwPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNjc+IgorbmFtZV9nZW4gICAgIjxVMDAyRD48VTAwNzM+PFUwMDYxPjxVMDA2RT4iCituYW1lX21yICAgICAiPFUwMDREPjxVMDA3Mj48VTAwMkU+IgorbmFtZV9tcnMgICAgIjxVMDA0RD48VTAwNzI+PFUwMDczPjxVMDAyRT4iCituYW1lX21pc3MgICAiPFUwMDREPjxVMDA2OT48VTAwNzM+PFUwMDczPjxVMDAyRT4iCituYW1lX21zICAgICAiPFUwMDREPjxVMDA3Mz48VTAwMkU+IgorCitFTkQgTENfTkFNRQorCisKK0xDX0FERFJFU1MKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUgTENfQUREUkVTUworcG9zdGFsX2ZtdCAgIjxVMDAyNT48VTAwN0E+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDU0PjxVMDAyNT48VTAwNzM+LworPFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDY1PjxVMDAyNT48VTAwNzI+IgorY291bnRyeV9hYjIgIjxVMDA0MT48VTAwNDU+IgorY291bnRyeV9hYjMgIjxVMDA0MT48VTAwNTI+PFUwMDQ1PiIKK2NvdW50cnlfbnVtIDc4NAorRU5EIExDX0FERFJFU1MKKworCitMQ19URUxFUEhPTkUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUKK3RlbF9pbnRfZm10ICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDNCPjxVMDAyNT48VTAwNjE+PFUwMDIwPi8KKzxVMDAzQj48VTAwMjU+PFUwMDZDPiIKK2ludF9wcmVmaXggICI8VTAwMzk+PFUwMDM3PjxVMDAzMT4iCisKK0VORCBMQ19URUxFUEhPTkUKKworCitMQ19NRUFTVVJFTUVOVAorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJQorbWVhc3VyZW1lbnQgMQorCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FyX0JIIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYXJfQkgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ3YzQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FyX0JICkBAIC0wLDAgKzEsMjA4IEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKyUgQXJhYmljIGxhbmd1YWdlIGxvY2FsZSBmb3IgQmFocmFpbi4KKyUgQ29udHJpYnV0ZWQgYnkgS2VudGFyb2ggTm9qaSA8a25vamlAanAuaWJtLmNvbT4gYW5kCislIFRldHN1amkgT3JpdGEgPG9yaXRhQGpwLmlibS5jb20+LgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiQXJhYmljIGxhbmd1YWdlIGxvY2FsZSBmb3IgQmFocmFpbiIKK3NvdXJjZSAgICAgIklCTSBHbG9iYWxpemF0aW9uIENlbnRlciBvZiBDb21wZXRlbmN5LCBZYW1hdG8gU29mdHdhcmUgTGFib3JhdG9yeSIKK2FkZHJlc3MgICAgIjE2MjMtMTQsIFNoaW1vdHN1cnVtYSwgWWFtYXRvLXNoaSwgS2FuYWdhd2Eta2VuLCAyNDItODUwMiwgSmFwYW4iCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiQXJhYmljIgordGVycml0b3J5ICAiQmFocmFpbiIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDctMjAiCislCitjYXRlZ29yeSAgImFyX0JIOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImFyX0JIOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImFyX0JIOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiYXJfQkg6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJhcl9CSDoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImFyX0JIOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImFyX0JIOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImFyX0JIOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImFyX0JIOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiYXJfQkg6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJhcl9CSDoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKKworTENfQ1RZUEUKK2NvcHkgImFyX0VHIgorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKKworJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEKK2NvcHkgImlzbzE0NjUxX3QxIgorCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiB0aGUgTENfTU9ORVRBUlkgY2F0ZWdvcnkuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRpZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUvSmF2YQorJQoraW50X2N1cnJfc3ltYm9sICAgICAgICI8VTAwNDI+PFUwMDQ4PjxVMDA0ND48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICI8VTA2MkY+PFUwMDJFPjxVMDYyOD48VTAwMkU+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgIDMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgIDMKK2ZyYWNfZGlnaXRzICAgICAgICAgICAzCitwX2NzX3ByZWNlZGVzICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAyCislCitFTkQgTENfTU9ORVRBUlkKKworCitMQ19OVU1FUklDCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTlVNRVJJQyAgY2F0ZWdvcnkuCislCitkZWNpbWFsX3BvaW50ICAgICAgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAiPFUwMDJDPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgMworJQorRU5EIExDX05VTUVSSUMKKworCitMQ19USU1FCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfVElNRSBjYXRlZ29yeS4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS9KYXZhCislCislIEFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZXMgKCVhKQorYWJkYXkgICAgICAgIjxVMDYyRD4iOyI8VTA2NDY+IjsvCisgICAgICAgICAgICAiPFUwNjJCPiI7IjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2MkU+IjsiPFUwNjJDPiI7LworICAgICAgICAgICAgIjxVMDYzMz4iCislCislIEZ1bGwgd2Vla2RheSBuYW1lcyAoJUEpCitkYXkgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MjM+PFUwNjJEPjxVMDYyRj4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyNz48VTA2MkI+PFUwNjQ2PjxVMDY0QT48VTA2NDY+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MkI+PFUwNjQ0PjxVMDYyNz48VTA2MkI+PFUwNjI3PjxVMDYyMT4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyMz48VTA2MzE+PFUwNjI4PjxVMDYzOT48VTA2Mjc+PFUwNjIxPiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjJFPjxVMDY0NT48VTA2NEE+PFUwNjMzPiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjJDPjxVMDY0NT48VTA2Mzk+PFUwNjI5PiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjMzPjxVMDYyOD48VTA2MkE+IgorJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCithYm1vbiAgICAgICAiPFUwNjRBPjxVMDY0Nj48VTA2Mjc+IjsiPFUwNjQxPjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjQ1PjxVMDYyNz48VTA2MzE+IjsiPFUwNjIzPjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjQ1PjxVMDYyNz48VTA2NEE+IjsiPFUwNjRBPjxVMDY0OD48VTA2NDY+IjsvCisgICAgICAgICAgICAiPFUwNjRBPjxVMDY0OD48VTA2NDQ+IjsiPFUwNjIzPjxVMDYzQT48VTA2MzM+IjsvCisgICAgICAgICAgICAiPFUwNjMzPjxVMDYyOD48VTA2MkE+IjsiPFUwNjIzPjxVMDY0Mz48VTA2MkE+IjsvCisgICAgICAgICAgICAiPFUwNjQ2PjxVMDY0OD48VTA2NDE+IjsiPFUwNjJGPjxVMDY0QT48VTA2MzM+IgorJQorJSBGdWxsIG1vbnRoIG5hbWVzICglQikKK21vbiAgICAgICAgICI8VTA2NEE+PFUwNjQ2PjxVMDYyNz48VTA2NEE+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0MT48VTA2Mjg+PFUwNjMxPjxVMDYyNz48VTA2NEE+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0NT48VTA2Mjc+PFUwNjMxPjxVMDYzMz4iOy8KKyAgICAgICAgICAgICI8VTA2MjM+PFUwNjI4PjxVMDYzMT48VTA2NEE+PFUwNjQ0PiI7LworICAgICAgICAgICAgIjxVMDY0NT48VTA2Mjc+PFUwNjRBPjxVMDY0OD4iOy8KKyAgICAgICAgICAgICI8VTA2NEE+PFUwNjQ4PjxVMDY0Nj48VTA2NEE+PFUwNjQ4PiI7LworICAgICAgICAgICAgIjxVMDY0QT48VTA2NDg+PFUwNjQ0PjxVMDY0QT48VTA2NDg+IjsvCisgICAgICAgICAgICAiPFUwNjIzPjxVMDYzQT48VTA2MzM+PFUwNjM3PjxVMDYzMz4iOy8KKyAgICAgICAgICAgICI8VTA2MzM+PFUwNjI4PjxVMDYyQT48VTA2NDU+PFUwNjI4PjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2MjM+PFUwNjQzPjxVMDYyQT48VTA2NDg+PFUwNjI4PjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2NDY+PFUwNjQ4PjxVMDY0MT48VTA2NDU+PFUwNjI4PjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2MkY+PFUwNjRBPjxVMDYzMz48VTA2NDU+PFUwNjI4PjxVMDYzMT4iCislCislIEVxdWl2YWxlbnQgb2YgQU0gUE0KK2FtX3BtICAgICAgICI8VTA2MzU+IjsiPFUwNjQ1PiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbgorJSAlZCAlYiwgJVklWiAlSTolTTolUworZF90X2ZtdCAgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDJDPjxVMDAyMD48VTAwMjU+LworPFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPi8KKzxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbgorJSAlZCAlYiwgJVkKK2RfZm10ICAgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCislCislIEFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJVogJUk6JU06JVMKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPi8KKzxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4iCislCislIEFwcHJvcHJpYXRlIDEyIGggdGltZSByZXByZXNlbnRhdGlvbiAoJXIpCit0X2ZtdF9hbXBtICAiPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD4vCis8VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKGRhdGUoMSkpICAgIiVhICViICVlICVIOiVNOiVTICVaICVZIgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworCitMQ19NRVNTQUdFUworY29weSAiYXJfRUciCitFTkQgTENfTUVTU0FHRVMKKworCitMQ19QQVBFUgorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19QQVBFUiBjYXRlZ29yeQoraGVpZ2h0ICAgICAgMjk3Cit3aWR0aCAgICAgICAyMTAKKworRU5EIExDX1BBUEVSCisKKworTENfTkFNRQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19OQU1FIGNhdGVnb3J5LgorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNzA+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2Nz4iCituYW1lX2dlbiAgICAiPFUwMDJEPjxVMDA3Mz48VTAwNjE+PFUwMDZFPiIKK25hbWVfbXIgICAgICI8VTAwNEQ+PFUwMDcyPjxVMDAyRT4iCituYW1lX21ycyAgICAiPFUwMDREPjxVMDA3Mj48VTAwNzM+PFUwMDJFPiIKK25hbWVfbWlzcyAgICI8VTAwNEQ+PFUwMDY5PjxVMDA3Mz48VTAwNzM+PFUwMDJFPiIKK25hbWVfbXMgICAgICI8VTAwNEQ+PFUwMDczPjxVMDAyRT4iCisKK0VORCBMQ19OQU1FCisKKworTENfQUREUkVTUworJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19BRERSRVNTCitwb3N0YWxfZm10ICAiPFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3Mj4iCitjb3VudHJ5X2FiMiAiPFUwMDQyPjxVMDA0OD4iCitjb3VudHJ5X2FiMyAiPFUwMDQyPjxVMDA0OD48VTAwNTI+IgorY291bnRyeV9udW0gMDQ4CisKK0VORCBMQ19BRERSRVNTCisKKworTENfVEVMRVBIT05FCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislCit0ZWxfaW50X2ZtdCAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAzQj48VTAwMjU+PFUwMDYxPjxVMDAyMD4vCis8VTAwM0I+PFUwMDI1PjxVMDA2Qz4iCitpbnRfcHJlZml4ICAiPFUwMDM5PjxVMDAzNz48VTAwMzM+IgoraW50X3NlbGVjdCAgIjxVMDAzMD4iCisKK0VORCBMQ19URUxFUEhPTkUKKworCitMQ19NRUFTVVJFTUVOVAorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJQorbWVhc3VyZW1lbnQgMQorCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FyX0RaIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYXJfRFoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q3ZjAzOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FyX0RaCkBAIC0wLDAgKzEsMjA3IEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKyUgQXJhYmljIGxhbmd1YWdlIGxvY2FsZSBmb3IgQWxnZXJpYS4KKyUgQ29udHJpYnV0ZWQgYnkgS2VudGFyb2ggTm9qaSA8a25vamlAanAuaWJtLmNvbT4gYW5kCislIFRldHN1amkgT3JpdGEgPG9yaXRhQGpwLmlibS5jb20+LgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiQXJhYmljIGxhbmd1YWdlIGxvY2FsZSBmb3IgQWxnZXJpYSIKK3NvdXJjZSAgICAgIklCTSBHbG9iYWxpemF0aW9uIENlbnRlciBvZiBDb21wZXRlbmN5LCBZYW1hdG8gU29mdHdhcmUgTGFib3JhdG9yeSIKK2FkZHJlc3MgICAgIjE2MjMtMTQsIFNoaW1vdHN1cnVtYSwgWWFtYXRvLXNoaSwgS2FuYWdhd2Eta2VuLCAyNDItODUwMiwgSmFwYW4iCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiQXJhYmljIgordGVycml0b3J5ICAiQWxnZXJpYSIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDctMjAiCislCitjYXRlZ29yeSAgImFyX0RaOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImFyX0RaOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImFyX0RaOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiYXJfRFo6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJhcl9EWjoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImFyX0RaOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImFyX0RaOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImFyX0RaOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImFyX0RaOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiYXJfRFo6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJhcl9EWjoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJhcl9FRyIKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCisKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxCitjb3B5ICJpc28xNDY1MV90MSIKKworRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gdGhlIExDX01PTkVUQVJZIGNhdGVnb3J5LgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkaWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlL0phdmEKKyUKK2ludF9jdXJyX3N5bWJvbCAgICAgICAiPFUwMDQ0PjxVMDA1QT48VTAwNDQ+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAiPFUwNjJGPjxVMDAyRT48VTA2MkM+PFUwMDJFPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgICAzCitwb3NpdGl2ZV9zaWduICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAzCitmcmFjX2RpZ2l0cyAgICAgICAgICAgMworcF9jc19wcmVjZWRlcyAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgMgorJQorRU5EIExDX01PTkVUQVJZCisKKworTENfTlVNRVJJQworJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX05VTUVSSUMgIGNhdGVnb3J5LgorJQorZGVjaW1hbF9wb2ludCAgICAgICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgIjxVMDAyQz4iCitncm91cGluZyAgICAgICAgICAgICAgIDMKKyUKK0VORCBMQ19OVU1FUklDCisKKworTENfVElNRQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX1RJTUUgY2F0ZWdvcnkuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRpZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUvSmF2YQorJQorJSBBYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWVzICglYSkKK2FiZGF5ICAgICAgICI8VTA2MkQ+IjsiPFUwNjQ2PiI7LworICAgICAgICAgICAgIjxVMDYyQj4iOyI8VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjJFPiI7IjxVMDYyQz4iOy8KKyAgICAgICAgICAgICI8VTA2MzM+IgorJQorJSBGdWxsIHdlZWtkYXkgbmFtZXMgKCVBKQorZGF5ICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjIzPjxVMDYyRD48VTA2MkY+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2Mjc+PFUwNjJCPjxVMDY0Nj48VTA2NEE+PFUwNjQ2PiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjJCPjxVMDY0ND48VTA2Mjc+PFUwNjJCPjxVMDYyNz48VTA2MjE+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MjM+PFUwNjMxPjxVMDYyOD48VTA2Mzk+PFUwNjI3PjxVMDYyMT4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyRT48VTA2NDU+PFUwNjRBPjxVMDYzMz4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyQz48VTA2NDU+PFUwNjM5PjxVMDYyOT4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYzMz48VTA2Mjg+PFUwNjJBPiIKKyUKKyUgQWJicmV2aWF0ZWQgbW9udGggbmFtZXMgKCViKQorYWJtb24gICAgICAgIjxVMDY0QT48VTA2NDY+PFUwNjI3PiI7IjxVMDY0MT48VTA2Mjg+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0NT48VTA2Mjc+PFUwNjMxPiI7IjxVMDYyMz48VTA2Mjg+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0NT48VTA2Mjc+PFUwNjRBPiI7IjxVMDY0QT48VTA2NDg+PFUwNjQ2PiI7LworICAgICAgICAgICAgIjxVMDY0QT48VTA2NDg+PFUwNjQ0PiI7IjxVMDYyMz48VTA2M0E+PFUwNjMzPiI7LworICAgICAgICAgICAgIjxVMDYzMz48VTA2Mjg+PFUwNjJBPiI7IjxVMDYyMz48VTA2NDM+PFUwNjJBPiI7LworICAgICAgICAgICAgIjxVMDY0Nj48VTA2NDg+PFUwNjQxPiI7IjxVMDYyRj48VTA2NEE+PFUwNjMzPiIKKyUKKyUgRnVsbCBtb250aCBuYW1lcyAoJUIpCittb24gICAgICAgICAiPFUwNjRBPjxVMDY0Nj48VTA2Mjc+PFUwNjRBPjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2NDE+PFUwNjI4PjxVMDYzMT48VTA2Mjc+PFUwNjRBPjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2NDU+PFUwNjI3PjxVMDYzMT48VTA2MzM+IjsvCisgICAgICAgICAgICAiPFUwNjIzPjxVMDYyOD48VTA2MzE+PFUwNjRBPjxVMDY0ND4iOy8KKyAgICAgICAgICAgICI8VTA2NDU+PFUwNjI3PjxVMDY0QT48VTA2NDg+IjsvCisgICAgICAgICAgICAiPFUwNjRBPjxVMDY0OD48VTA2NDY+PFUwNjRBPjxVMDY0OD4iOy8KKyAgICAgICAgICAgICI8VTA2NEE+PFUwNjQ4PjxVMDY0ND48VTA2NEE+PFUwNjQ4PiI7LworICAgICAgICAgICAgIjxVMDYyMz48VTA2M0E+PFUwNjMzPjxVMDYzNz48VTA2MzM+IjsvCisgICAgICAgICAgICAiPFUwNjMzPjxVMDYyOD48VTA2MkE+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjIzPjxVMDY0Mz48VTA2MkE+PFUwNjQ4PjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjQ2PjxVMDY0OD48VTA2NDE+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjJGPjxVMDY0QT48VTA2MzM+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IgorJQorJSBFcXVpdmFsZW50IG9mIEFNIFBNCithbV9wbSAgICAgICAiPFUwNjM1PiI7IjxVMDY0NT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJWQgJWIsICVZJVogJUk6JU06JVMKK2RfdF9mbXQgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyQz48VTAwMjA+PFUwMDI1Pi8KKzxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD4vCis8VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24KKyUgJWQgJWIsICVZCitkX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorJQorJSBBcHByb3ByaWF0ZSB0aW1lIHJlcHJlc2VudGF0aW9uCislICVaICVJOiVNOiVTCit0X2ZtdCAgICAgICAiPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD4vCis8VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+IgorJQorJSBBcHByb3ByaWF0ZSAxMiBoIHRpbWUgcmVwcmVzZW50YXRpb24gKCVyKQordF9mbXRfYW1wbSAgIjxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+LworPFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNzA+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uIChkYXRlKDEpKSAgICIlYSAlYiAlZSAlSDolTTolUyAlWiAlWSIKK2RhdGVfZm10CSI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKKworTENfTUVTU0FHRVMKK2NvcHkgImFyX0VHIgorRU5EIExDX01FU1NBR0VTCisKKworTENfUEFQRVIKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUgTENfUEFQRVIgY2F0ZWdvcnkKK2hlaWdodCAgICAgIDI5Nword2lkdGggICAgICAgMjEwCisKK0VORCBMQ19QQVBFUgorCisKK0xDX05BTUUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUgTENfTkFNRSBjYXRlZ29yeS4KKyUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDcwPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNjc+IgorbmFtZV9nZW4gICAgIjxVMDAyRD48VTAwNzM+PFUwMDYxPjxVMDA2RT4iCituYW1lX21yICAgICAiPFUwMDREPjxVMDA3Mj48VTAwMkU+IgorbmFtZV9tcnMgICAgIjxVMDA0RD48VTAwNzI+PFUwMDczPjxVMDAyRT4iCituYW1lX21pc3MgICAiPFUwMDREPjxVMDA2OT48VTAwNzM+PFUwMDczPjxVMDAyRT4iCituYW1lX21zICAgICAiPFUwMDREPjxVMDA3Mz48VTAwMkU+IgorCitFTkQgTENfTkFNRQorCisKK0xDX0FERFJFU1MKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUgTENfQUREUkVTUworcG9zdGFsX2ZtdCAgIjxVMDAyNT48VTAwN0E+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDU0PjxVMDAyNT48VTAwNzM+LworPFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDY1PjxVMDAyNT48VTAwNzI+IgorY291bnRyeV9hYjIgIjxVMDA0ND48VTAwNUE+IgorY291bnRyeV9hYjMgIjxVMDA0ND48VTAwNUE+PFUwMDQxPiIKK2NvdW50cnlfbnVtIDAxMgorCitFTkQgTENfQUREUkVTUworCisKK0xDX1RFTEVQSE9ORQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJQordGVsX2ludF9mbXQgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwM0I+PFUwMDI1PjxVMDA2MT48VTAwMjA+LworPFUwMDNCPjxVMDAyNT48VTAwNkM+IgoraW50X3ByZWZpeCAgIjxVMDAzMj48VTAwMzE+PFUwMDMzPiIKK2ludF9zZWxlY3QgICI8VTAwMzA+PFUwMDMwPiIKKworRU5EIExDX1RFTEVQSE9ORQorCisKK0xDX01FQVNVUkVNRU5UCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislCittZWFzdXJlbWVudCAxCisKK0VORCBMQ19NRUFTVVJFTUVOVApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYXJfRUcgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9hcl9FRwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjZkNDM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYXJfRUcKQEAgLTAsMCArMSwyMTQgQEAKK2NvbW1lbnRfY2hhciAgICAlCitlc2NhcGVfY2hhciAgICAgLworJSBBcmFiaWMgbGFuZ3VhZ2UgbG9jYWxlIGZvciBFZ3lwdC4KKyUgQ29udHJpYnV0ZWQgYnkgS2VudGFyb2ggTm9qaSA8a25vamlAanAuaWJtLmNvbT4gYW5kCislIFRldHN1amkgT3JpdGEgPG9yaXRhQGpwLmlibS5jb20+LgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiQXJhYmljIGxhbmd1YWdlIGxvY2FsZSBmb3IgRWd5cHQiCitzb3VyY2UgICAgICJJQk0gR2xvYmFsaXphdGlvbiBDZW50ZXIgb2YgQ29tcGV0ZW5jeSwgWWFtYXRvIFNvZnR3YXJlIExhYm9yYXRvcnkiCithZGRyZXNzICAgICIxNjIzLTE0LCBTaGltb3RzdXJ1bWEsIFlhbWF0by1zaGksIEthbmFnYXdhLWtlbiwgMjQyLTg1MDIsIEphcGFuIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkFyYWJpYyIKK3RlcnJpdG9yeSAgIkVneXB0IgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNy0yMCIKKyUKK2NhdGVnb3J5ICAiYXJfRUc6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiYXJfRUc6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiYXJfRUc6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJhcl9FRzoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImFyX0VHOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiYXJfRUc6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiYXJfRUc6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiYXJfRUc6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiYXJfRUc6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJhcl9FRzoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImFyX0VHOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCisKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxCitjb3B5ICJpc28xNDY1MV90MSIKKworRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gdGhlIExDX01PTkVUQVJZIGNhdGVnb3J5LgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkaWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlL0phdmEKKyUKK2ludF9jdXJyX3N5bWJvbCAgICAgICAiPFUwMDQ1PjxVMDA0Nz48VTAwNTA+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAiPFUwNjJDPjxVMDAyRT48VTA2NDU+PFUwMDJFPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgICAzCitwb3NpdGl2ZV9zaWduICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAzCitmcmFjX2RpZ2l0cyAgICAgICAgICAgMworcF9jc19wcmVjZWRlcyAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgMgorJQorRU5EIExDX01PTkVUQVJZCisKKworTENfTlVNRVJJQworJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX05VTUVSSUMgIGNhdGVnb3J5LgorJQorZGVjaW1hbF9wb2ludCAgICAgICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgIjxVMDAyQz4iCitncm91cGluZyAgICAgICAgICAgICAgIDMKKyUKK0VORCBMQ19OVU1FUklDCisKKworTENfVElNRQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX1RJTUUgY2F0ZWdvcnkuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRpZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUvSmF2YQorJQorJSBBYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWVzICglYSkKK2FiZGF5ICAgICAgICI8VTA2MkQ+IjsiPFUwNjQ2PiI7LworICAgICAgICAgICAgIjxVMDYyQj4iOyI8VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjJFPiI7IjxVMDYyQz4iOy8KKyAgICAgICAgICAgICI8VTA2MzM+IgorJQorJSBGdWxsIHdlZWtkYXkgbmFtZXMgKCVBKQorZGF5ICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjIzPjxVMDYyRD48VTA2MkY+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2Mjc+PFUwNjJCPjxVMDY0Nj48VTA2NEE+PFUwNjQ2PiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjJCPjxVMDY0ND48VTA2Mjc+PFUwNjJCPjxVMDYyNz48VTA2MjE+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MjM+PFUwNjMxPjxVMDYyOD48VTA2Mzk+PFUwNjI3PjxVMDYyMT4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyRT48VTA2NDU+PFUwNjRBPjxVMDYzMz4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyQz48VTA2NDU+PFUwNjM5PjxVMDYyOT4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYzMz48VTA2Mjg+PFUwNjJBPiIKKyUKKyUgQWJicmV2aWF0ZWQgbW9udGggbmFtZXMgKCViKQorYWJtb24gICAgICAgIjxVMDY0QT48VTA2NDY+PFUwNjI3PiI7IjxVMDY0MT48VTA2Mjg+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0NT48VTA2Mjc+PFUwNjMxPiI7IjxVMDYyMz48VTA2Mjg+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0NT48VTA2Mjc+PFUwNjRBPiI7IjxVMDY0QT48VTA2NDg+PFUwNjQ2PiI7LworICAgICAgICAgICAgIjxVMDY0QT48VTA2NDg+PFUwNjQ0PiI7IjxVMDYyMz48VTA2M0E+PFUwNjMzPiI7LworICAgICAgICAgICAgIjxVMDYzMz48VTA2Mjg+PFUwNjJBPiI7IjxVMDYyMz48VTA2NDM+PFUwNjJBPiI7LworICAgICAgICAgICAgIjxVMDY0Nj48VTA2NDg+PFUwNjQxPiI7IjxVMDYyRj48VTA2NEE+PFUwNjMzPiIKKyUKKyUgRnVsbCBtb250aCBuYW1lcyAoJUIpCittb24gICAgICAgICAiPFUwNjRBPjxVMDY0Nj48VTA2Mjc+PFUwNjRBPjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2NDE+PFUwNjI4PjxVMDYzMT48VTA2Mjc+PFUwNjRBPjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2NDU+PFUwNjI3PjxVMDYzMT48VTA2MzM+IjsvCisgICAgICAgICAgICAiPFUwNjIzPjxVMDYyOD48VTA2MzE+PFUwNjRBPjxVMDY0ND4iOy8KKyAgICAgICAgICAgICI8VTA2NDU+PFUwNjI3PjxVMDY0QT48VTA2NDg+IjsvCisgICAgICAgICAgICAiPFUwNjRBPjxVMDY0OD48VTA2NDY+PFUwNjRBPjxVMDY0OD4iOy8KKyAgICAgICAgICAgICI8VTA2NEE+PFUwNjQ4PjxVMDY0ND48VTA2NEE+PFUwNjQ4PiI7LworICAgICAgICAgICAgIjxVMDYyMz48VTA2M0E+PFUwNjMzPjxVMDYzNz48VTA2MzM+IjsvCisgICAgICAgICAgICAiPFUwNjMzPjxVMDYyOD48VTA2MkE+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjIzPjxVMDY0Mz48VTA2MkE+PFUwNjQ4PjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjQ2PjxVMDY0OD48VTA2NDE+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjJGPjxVMDY0QT48VTA2MzM+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IgorJQorJSBFcXVpdmFsZW50IG9mIEFNIFBNCithbV9wbSAgICAgICAiPFUwNjM1PiI7IjxVMDY0NT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJWQgJWIsICVZJVogJUk6JU06JVMKK2RfdF9mbXQgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyQz48VTAwMjA+PFUwMDI1Pi8KKzxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD4vCis8VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24KKyUgJWQgJWIsICVZCitkX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorJQorJSBBcHByb3ByaWF0ZSB0aW1lIHJlcHJlc2VudGF0aW9uCislICVaICVJOiVNOiVTCit0X2ZtdCAgICAgICAiPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD4vCis8VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+IgorJQorJSBBcHByb3ByaWF0ZSAxMiBoIHRpbWUgcmVwcmVzZW50YXRpb24gKCVyKQordF9mbXRfYW1wbSAgIjxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+LworPFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNzA+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uIChkYXRlKDEpKSAgICIlYSAlYiAlZSAlSDolTTolUyAlWiAlWSIKK2RhdGVfZm10CSI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKKworTENfTUVTU0FHRVMKK3llc2V4cHIgICAgICI8VTAwNUU+PFUwMDVCPjxVMDY0Nj48VTAwNzk+PFUwMDU5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgICAgICI8VTAwNUU+PFUwMDVCPjxVMDY0ND48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKKworeWVzc3RyICAgICAgIjxVMDY0Nj48VTA2Mzk+PFUwNjQ1PiIKK25vc3RyICAgICAgICI8VTA2NDQ+PFUwNjI3PiIKK0VORCBMQ19NRVNTQUdFUworCisKK0xDX1BBUEVSCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislIExDX1BBUEVSIGNhdGVnb3J5CitoZWlnaHQgICAgICAyOTcKK3dpZHRoICAgICAgIDIxMAorCitFTkQgTENfUEFQRVIKKworCitMQ19OQU1FCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislIExDX05BTUUgY2F0ZWdvcnkuCislCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA3MD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDY3PiIKK25hbWVfZ2VuICAgICI8VTAwMkQ+PFUwMDczPjxVMDA2MT48VTAwNkU+IgorbmFtZV9tciAgICAgIjxVMDA0RD48VTAwNzI+PFUwMDJFPiIKK25hbWVfbXJzICAgICI8VTAwNEQ+PFUwMDcyPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9taXNzICAgIjxVMDA0RD48VTAwNjk+PFUwMDczPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9tcyAgICAgIjxVMDA0RD48VTAwNzM+PFUwMDJFPiIKKworRU5EIExDX05BTUUKKworCitMQ19BRERSRVNTCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislIExDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICI8VTAwMjU+PFUwMDdBPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDczPi8KKzxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA2NT48VTAwMjU+PFUwMDcyPiIKK2NvdW50cnlfYWIyICI8VTAwNDU+PFUwMDQ3PiIKK2NvdW50cnlfYWIzICI8VTAwNDU+PFUwMDQ3PjxVMDA1OT4iCitjb3VudHJ5X251bSA4MTgKKworRU5EIExDX0FERFJFU1MKKworCitMQ19URUxFUEhPTkUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUKK3RlbF9pbnRfZm10ICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDNCPjxVMDAyNT48VTAwNjE+PFUwMDIwPi8KKzxVMDAzQj48VTAwMjU+PFUwMDZDPiIKK2ludF9wcmVmaXggICI8VTAwMzI+PFUwMDMwPiIKK2ludF9zZWxlY3QgICI8VTAwMzA+PFUwMDMwPiIKK0VORCBMQ19URUxFUEhPTkUKKworCitMQ19NRUFTVVJFTUVOVAorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJQorbWVhc3VyZW1lbnQgMQorCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FyX0lOIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYXJfSU4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIwY2Q2ZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FyX0lOCkBAIC0wLDAgKzEsMTc2IEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKyUgQ29udHJpYnV0ZWQgYnkgS2VudGFybyBOb2ppICAgKGtub2ppQGpwLmlibS5jb20pCislIFRldHN1amkgT3JpYXRhIChPcmlhdGFAanAuaWJtLmNvbSkgYW5kIE90aGVycywgMjAwMAorCitMQ19JREVOVElGSUNBVElPTgorCit0aXRsZSAgICAgICAiQXJhYmljIGxhbmd1YWdlIGxvY2FsZSBmb3IgSW5kaWEiCitzb3VyY2UgICAgICJJQk0gR2xvYmFsaXphdGlvbiBDZW50ZXIgb2YgQ29tcGV0ZW5jeSwgWWFtYXRvIFNvZnR3YXJlIExhYm9yYXRvcnkiCithZGRyZXNzICAgICIxNjIzLTE0LCBTaGltb3RzdXJ1bWEsIFlhbWF0by1zaGksIEthbmFnYXdhLWtlbiwgMjQyLTg1MDIsIEphcGFuIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgICIiCitmYXggICAgICAgICAiIgorbGFuZ3VhZ2UgICAgIkFyYWJpYyIKK3RlcnJpdG9yeSAgICJJbmRpYSIKK3JldmlzaW9uICAgICIxLjAiCitkYXRlICAgICAgICAiMjAwMCxPY3RvYmVyLDI3IChYTUwgc291cmNlOjIwMDAsSnVseSwyMCkiCislCitjYXRlZ29yeSAgImFyX0lOOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImFyX0lOOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImFyX0lOOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiYXJfSU46MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJhcl9JTjoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImFyX0lOOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImFyX0lOOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImFyX0lOOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImFyX0lOOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiYXJfSU46MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJhcl9JTjoyMDAwIjtMQ19URUxFUEhPTkUKKworCitFTkQgTENfSURFTlRJRklDQVRJT04KKworCitMQ19DVFlQRQorY29weSAiYXJfRUciCitFTkQgTENfQ1RZUEUKKworCitMQ19DT0xMQVRFCislIENvcHkgdGhlIHRlbXBsYXRlIGZyb20gSVNPL0lFQyAxNDY1MQorY29weSAiaXNvMTQ2NTFfdDEiCisKK0VORCBMQ19DT0xMQVRFCisKKworTENfTU9ORVRBUlkKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gdGhlIExDX01PTkVUQVJZIGNhdGVnb3J5CislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRlZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUuCislCitpbnRfY3Vycl9zeW1ib2wgICAgICAgIjxVMDA0OT48VTAwNEU+PFUwMDUyPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgIjxVMjBBOD4iCittb25fZGVjaW1hbF9wb2ludCAgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAgMzsyCitwb3NpdGl2ZV9zaWduICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgMQorJQorRU5EIExDX01PTkVUQVJZCisKKworTENfTlVNRVJJQworY29weSAiaGlfSU4iCitFTkQgTENfTlVNRVJJQworCisKK0xDX1RJTUUKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19USU1FIGNhdGVnb3J5CislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRlZmluaXRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlLgorJQorJSBBYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWVzICglYSkKK2FiZGF5ICAgICAgICI8VTA2MkQ+IjsiPFUwNjQ2PiI7LworICAgICAgICAgICAgIjxVMDYyQj4iOyI8VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjJFPiI7IjxVMDYyQz4iOy8KKyAgICAgICAgICAgICI8VTA2MzM+IgorJQorJSBGdWxsIHdlZWtkYXkgbmFtZXMgKCVBKQorZGF5ICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjIzPjxVMDYyRD48VTA2MkY+IjsiPFUwNjI3PjxVMDY0ND48VTA2Mjc+PFUwNjJCPjxVMDY0Nj48VTA2NEE+PFUwNjQ2PiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjJCPjxVMDY0ND48VTA2Mjc+PFUwNjJCPjxVMDYyNz48VTA2MjE+IjsiPFUwNjI3PjxVMDY0ND48VTA2MjM+PFUwNjMxPjxVMDYyOD48VTA2Mzk+PFUwNjI3PjxVMDYyMT4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyRT48VTA2NDU+PFUwNjRBPjxVMDYzMz4iOyI8VTA2Mjc+PFUwNjQ0PjxVMDYyQz48VTA2NDU+PFUwNjM5PjxVMDYyOT4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYzMz48VTA2Mjg+PFUwNjJBPiIKKyUKKyUgQWJicmV2aWF0ZWQgbW9udGggbmFtZXMgKCViKQorYWJtb24gICAgICAgIjxVMDY0QT48VTA2NDY+PFUwNjI3PiI7IjxVMDY0MT48VTA2Mjg+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0NT48VTA2Mjc+PFUwNjMxPiI7IjxVMDYyMz48VTA2Mjg+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0NT48VTA2Mjc+PFUwNjRBPiI7IjxVMDY0QT48VTA2NDg+PFUwNjQ2PiI7LworICAgICAgICAgICAgIjxVMDY0QT48VTA2NDg+PFUwNjQ0PiI7IjxVMDYyMz48VTA2M0E+PFUwNjMzPiI7LworICAgICAgICAgICAgIjxVMDYzMz48VTA2Mjg+PFUwNjJBPiI7IjxVMDYyMz48VTA2NDM+PFUwNjJBPiI7LworICAgICAgICAgICAgIjxVMDY0Nj48VTA2NDg+PFUwNjQxPiI7IjxVMDYyRj48VTA2NEE+PFUwNjMzPiIKKyUKKyUgRnVsbCBtb250aCBuYW1lcyAoJUIpCittb24gICAgICAgICAiPFUwNjRBPjxVMDY0Nj48VTA2Mjc+PFUwNjRBPjxVMDYzMT4iOyI8VTA2NDE+PFUwNjI4PjxVMDYzMT48VTA2Mjc+PFUwNjRBPjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2NDU+PFUwNjI3PjxVMDYzMT48VTA2MzM+IjsiPFUwNjIzPjxVMDYyOD48VTA2MzE+PFUwNjRBPjxVMDY0ND4iOy8KKyAgICAgICAgICAgICI8VTA2NDU+PFUwNjI3PjxVMDY0QT48VTA2NDg+IjsiPFUwNjRBPjxVMDY0OD48VTA2NDY+PFUwNjRBPjxVMDY0OD4iOy8KKyAgICAgICAgICAgICI8VTA2NEE+PFUwNjQ4PjxVMDY0ND48VTA2NEE+PFUwNjQ4PiI7IjxVMDYyMz48VTA2M0E+PFUwNjMzPjxVMDYzNz48VTA2MzM+IjsvCisgICAgICAgICAgICAiPFUwNjMzPjxVMDYyOD48VTA2MkE+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IjsiPFUwNjIzPjxVMDY0Mz48VTA2MkE+PFUwNjQ4PjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjQ2PjxVMDY0OD48VTA2NDE+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IjsiPFUwNjJGPjxVMDY0QT48VTA2MzM+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IgorJQorJSBFcXVpdmFsZW50IG9mIEFNIFBNCithbV9wbSAgICAgICAiPFUwNjM1PiI7IjxVMDY0NT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJUEgJWQgJUIgJVkgJUk6JU06JVMgICVaCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA0MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24KKyUgJUEgJWQgJUIgJVkKK2RfZm10ICAgICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDQyPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKKyUKKyUgQXBwcm9wcmlhdGUgdGltZSByZXByZXNlbnRhdGlvbgorJSAlSTolTTolUyAgJVoKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIDEyIGggdGltZSByZXByZXNlbnRhdGlvbiAoJXIpCit0X2ZtdF9hbXBtICAiPFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCitFTkQgTENfVElNRQorCisKK0xDX01FU1NBR0VTCitjb3B5ICJhcl9FRyIKK0VORCBMQ19NRVNTQUdFUworCisKK0xDX1BBUEVSCitjb3B5ICJoaV9JTiIKK0VORCBMQ19QQVBFUgorCisKK0xDX05BTUUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTkFNRSBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorJQorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNzA+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz4iCituYW1lX2dlbiAgICAiIgorbmFtZV9tciAgICAgIjxVMDA0RD48VTAwNzI+PFUwMDJFPiIKK25hbWVfbXJzICAgICI8VTAwNEQ+PFUwMDcyPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9taXNzICAgIjxVMDA0RD48VTAwNjk+PFUwMDczPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9tcyAgICAgIjxVMDA0RD48VTAwNzM+PFUwMDJFPiIKKworRU5EIExDX05BTUUKKworCitMQ19BRERSRVNTCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX0FERFJFU1MgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KK3Bvc3RhbF9mbXQgICI8VTAwMjU+PFUwMDdBPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDczPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA2NT48VTAwMjU+PFUwMDcyPiIKK2NvdW50cnlfYWIyICI8VTAwNDk+PFUwMDRFPiIKK2NvdW50cnlfYWIzICI8VTAwNDk+PFUwMDRFPjxVMDA0ND4iCitjb3VudHJ5X251bSAzNTYKKworRU5EIExDX0FERFJFU1MKKworCitMQ19URUxFUEhPTkUKK2NvcHkgImhpX0lOIgorRU5EIExDX1RFTEVQSE9ORQorCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJoaV9JTiIKK0VORCBMQ19NRUFTVVJFTUVOVApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYXJfSVEgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9hcl9JUQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTQ1OGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYXJfSVEKQEAgLTAsMCArMSwyMDYgQEAKK2NvbW1lbnRfY2hhciAgICAlCitlc2NhcGVfY2hhciAgICAgLworJSBBcmFiaWMgbGFuZ3VhZ2UgbG9jYWxlIGZvciBJcmFxLgorJSBDb250cmlidXRlZCBieSBLZW50YXJvaCBOb2ppIDxrbm9qaUBqcC5pYm0uY29tPiBhbmQKKyUgVGV0c3VqaSBPcml0YSA8b3JpdGFAanAuaWJtLmNvbT4uCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJBcmFiaWMgbGFuZ3VhZ2UgbG9jYWxlIGZvciBJcmFxIgorc291cmNlICAgICAiSUJNIEdsb2JhbGl6YXRpb24gQ2VudGVyIG9mIENvbXBldGVuY3ksIFlhbWF0byBTb2Z0d2FyZSBMYWJvcmF0b3J5IgorYWRkcmVzcyAgICAiMTYyMy0xNCwgU2hpbW90c3VydW1hLCBZYW1hdG8tc2hpLCBLYW5hZ2F3YS1rZW4sIDI0Mi04NTAyLCBKYXBhbiIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJBcmFiaWMiCit0ZXJyaXRvcnkgICJJcmFxIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNy0yMCIKKyUKK2NhdGVnb3J5ICAiYXJfSVE6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiYXJfSVE6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiYXJfSVE6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJhcl9JUToyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImFyX0lROjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiYXJfSVE6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiYXJfSVE6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiYXJfSVE6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiYXJfSVE6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJhcl9JUToyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImFyX0lROjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImFyX0VHIgorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKKworJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEKK2NvcHkgImlzbzE0NjUxX3QxIgorCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiB0aGUgTENfTU9ORVRBUlkgY2F0ZWdvcnkuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRpZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUvSmF2YQorJQoraW50X2N1cnJfc3ltYm9sICAgICAgICI8VTAwNDk+PFUwMDUxPjxVMDA0ND48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICI8VTA2MkY+PFUwMDJFPjxVMDYzOT48VTAwMkU+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgIDMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgIDMKK2ZyYWNfZGlnaXRzICAgICAgICAgICAzCitwX2NzX3ByZWNlZGVzICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAyCislCitFTkQgTENfTU9ORVRBUlkKKworCitMQ19OVU1FUklDCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTlVNRVJJQyAgY2F0ZWdvcnkuCislCitkZWNpbWFsX3BvaW50ICAgICAgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAiPFUwMDJDPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgMworJQorRU5EIExDX05VTUVSSUMKKworCitMQ19USU1FCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfVElNRSBjYXRlZ29yeS4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS9KYXZhCislCislIEFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZXMgKCVhKQorYWJkYXkgICAgICAgIjxVMDYyRD4iOyI8VTA2NDY+IjsvCisgICAgICAgICAgICAiPFUwNjJCPiI7IjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2MkU+IjsiPFUwNjJDPiI7LworICAgICAgICAgICAgIjxVMDYzMz4iCislCislIEZ1bGwgd2Vla2RheSBuYW1lcyAoJUEpCitkYXkgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MjM+PFUwNjJEPjxVMDYyRj4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyNz48VTA2MkI+PFUwNjQ2PjxVMDY0QT48VTA2NDY+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MkI+PFUwNjQ0PjxVMDYyNz48VTA2MkI+PFUwNjI3PjxVMDYyMT4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyMz48VTA2MzE+PFUwNjI4PjxVMDYzOT48VTA2Mjc+PFUwNjIxPiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjJFPjxVMDY0NT48VTA2NEE+PFUwNjMzPiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjJDPjxVMDY0NT48VTA2Mzk+PFUwNjI5PiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjMzPjxVMDYyOD48VTA2MkE+IgorJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCithYm1vbiAgICAgICAiPFUwNjRBPjxVMDY0Nj48VTA2Mjc+IjsiPFUwNjQxPjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjQ1PjxVMDYyNz48VTA2MzE+IjsiPFUwNjIzPjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjQ1PjxVMDYyNz48VTA2NEE+IjsiPFUwNjRBPjxVMDY0OD48VTA2NDY+IjsvCisgICAgICAgICAgICAiPFUwNjRBPjxVMDY0OD48VTA2NDQ+IjsiPFUwNjIzPjxVMDYzQT48VTA2MzM+IjsvCisgICAgICAgICAgICAiPFUwNjMzPjxVMDYyOD48VTA2MkE+IjsiPFUwNjIzPjxVMDY0Mz48VTA2MkE+IjsvCisgICAgICAgICAgICAiPFUwNjQ2PjxVMDY0OD48VTA2NDE+IjsiPFUwNjJGPjxVMDY0QT48VTA2MzM+IgorJQorJSBGdWxsIG1vbnRoIG5hbWVzICglQikKK21vbiAgICAgICAgICI8VTA2NEE+PFUwNjQ2PjxVMDYyNz48VTA2NEE+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0MT48VTA2Mjg+PFUwNjMxPjxVMDYyNz48VTA2NEE+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0NT48VTA2Mjc+PFUwNjMxPjxVMDYzMz4iOy8KKyAgICAgICAgICAgICI8VTA2MjM+PFUwNjI4PjxVMDYzMT48VTA2NEE+PFUwNjQ0PiI7LworICAgICAgICAgICAgIjxVMDY0NT48VTA2Mjc+PFUwNjRBPjxVMDY0OD4iOy8KKyAgICAgICAgICAgICI8VTA2NEE+PFUwNjQ4PjxVMDY0Nj48VTA2NEE+PFUwNjQ4PiI7LworICAgICAgICAgICAgIjxVMDY0QT48VTA2NDg+PFUwNjQ0PjxVMDY0QT48VTA2NDg+IjsvCisgICAgICAgICAgICAiPFUwNjIzPjxVMDYzQT48VTA2MzM+PFUwNjM3PjxVMDYzMz4iOy8KKyAgICAgICAgICAgICI8VTA2MzM+PFUwNjI4PjxVMDYyQT48VTA2NDU+PFUwNjI4PjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2MjM+PFUwNjQzPjxVMDYyQT48VTA2NDg+PFUwNjI4PjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2NDY+PFUwNjQ4PjxVMDY0MT48VTA2NDU+PFUwNjI4PjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2MkY+PFUwNjRBPjxVMDYzMz48VTA2NDU+PFUwNjI4PjxVMDYzMT4iCislCislIEVxdWl2YWxlbnQgb2YgQU0gUE0KK2FtX3BtICAgICAgICI8VTA2MzU+IjsiPFUwNjQ1PiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbgorJSAlZCAlYiwgJVklWiAlSTolTTolUworZF90X2ZtdCAgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDJDPjxVMDAyMD48VTAwMjU+LworPFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPi8KKzxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbgorJSAlZCAlYiwgJVkKK2RfZm10ICAgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCislCislIEFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJVogJUk6JU06JVMKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPi8KKzxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4iCislCislIEFwcHJvcHJpYXRlIDEyIGggdGltZSByZXByZXNlbnRhdGlvbiAoJXIpCit0X2ZtdF9hbXBtICAiPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD4vCis8VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKGRhdGUoMSkpICAgIiVhICViICVlICVIOiVNOiVTICVaICVZIgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworCitMQ19NRVNTQUdFUworY29weSAiYXJfRUciCitFTkQgTENfTUVTU0FHRVMKKworCitMQ19QQVBFUgorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19QQVBFUiBjYXRlZ29yeQoraGVpZ2h0ICAgICAgMjk3Cit3aWR0aCAgICAgICAyMTAKKworRU5EIExDX1BBUEVSCisKKworTENfTkFNRQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19OQU1FIGNhdGVnb3J5LgorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNzA+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2Nz4iCituYW1lX2dlbiAgICAiPFUwMDJEPjxVMDA3Mz48VTAwNjE+PFUwMDZFPiIKK25hbWVfbXIgICAgICI8VTAwNEQ+PFUwMDcyPjxVMDAyRT4iCituYW1lX21ycyAgICAiPFUwMDREPjxVMDA3Mj48VTAwNzM+PFUwMDJFPiIKK25hbWVfbWlzcyAgICI8VTAwNEQ+PFUwMDY5PjxVMDA3Mz48VTAwNzM+PFUwMDJFPiIKK25hbWVfbXMgICAgICI8VTAwNEQ+PFUwMDczPjxVMDAyRT4iCisKK0VORCBMQ19OQU1FCisKKworTENfQUREUkVTUworJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19BRERSRVNTCitwb3N0YWxfZm10ICAiPFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3Mj4iCitjb3VudHJ5X2FiMiAiPFUwMDQ5PjxVMDA1MT4iCitjb3VudHJ5X2FiMyAiPFUwMDQ5PjxVMDA1Mj48VTAwNTE+IgorY291bnRyeV9udW0gMzY4CisKK0VORCBMQ19BRERSRVNTCisKKworTENfVEVMRVBIT05FCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislCit0ZWxfaW50X2ZtdCAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAzQj48VTAwMjU+PFUwMDYxPjxVMDAyMD4vCis8VTAwM0I+PFUwMDI1PjxVMDA2Qz4iCitpbnRfcHJlZml4ICAiPFUwMDM5PjxVMDAzNj48VTAwMzQ+IgorCitFTkQgTENfVEVMRVBIT05FCisKKworTENfTUVBU1VSRU1FTlQKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUKK21lYXN1cmVtZW50IDEKKworRU5EIExDX01FQVNVUkVNRU5UCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9hcl9KTyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FyX0pPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNmMyY2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9hcl9KTwpAQCAtMCwwICsxLDIyNCBAQAorY29tbWVudF9jaGFyICAgICUKK2VzY2FwZV9jaGFyICAgICAvCislIEFyYWJpYyBsYW5ndWFnZSBsb2NhbGUgZm9yIEpvcmRhbi4KKyUgQ29udHJpYnV0ZWQgYnkgS2VudGFyb2ggTm9qaSA8a25vamlAanAuaWJtLmNvbT4gYW5kCislIFRldHN1amkgT3JpdGEgPG9yaXRhQGpwLmlibS5jb20+LgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiQXJhYmljIGxhbmd1YWdlIGxvY2FsZSBmb3IgSm9yZGFuIgorc291cmNlICAgICAiSUJNIEdsb2JhbGl6YXRpb24gQ2VudGVyIG9mIENvbXBldGVuY3ksIFlhbWF0byBTb2Z0d2FyZSBMYWJvcmF0b3J5IgorYWRkcmVzcyAgICAiMTYyMy0xNCwgU2hpbW90c3VydW1hLCBZYW1hdG8tc2hpLCBLYW5hZ2F3YS1rZW4sIDI0Mi04NTAyLCBKYXBhbiIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJBcmFiaWMiCit0ZXJyaXRvcnkgICJKb3JkYW4iCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA3LTIwIgorJQorY2F0ZWdvcnkgICJhcl9KTzoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJhcl9KTzoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJhcl9KTzoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImFyX0pPOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiYXJfSk86MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJhcl9KTzoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJhcl9KTzoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJhcl9KTzoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJhcl9KTzoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImFyX0pPOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiYXJfSk86MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCisKK0xDX0NUWVBFCitjb3B5ICJhcl9FRyIKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCisKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxCitjb3B5ICJpc28xNDY1MV90MSIKKworRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gdGhlIExDX01PTkVUQVJZIGNhdGVnb3J5LgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkaWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlL0phdmEKKyUKK2ludF9jdXJyX3N5bWJvbCAgICAgICAiPFUwMDRBPjxVMDA0Rj48VTAwNDQ+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAiPFUwNjJGPjxVMDAyRT48VTA2MjM+PFUwMDJFPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgICAzCitwb3NpdGl2ZV9zaWduICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAzCitmcmFjX2RpZ2l0cyAgICAgICAgICAgMworcF9jc19wcmVjZWRlcyAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgMgorJQorRU5EIExDX01PTkVUQVJZCisKKworTENfTlVNRVJJQworJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX05VTUVSSUMgY2F0ZWdvcnkuCislCitkZWNpbWFsX3BvaW50ICAgICAgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAiPFUwMDJDPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgMworJQorRU5EIExDX05VTUVSSUMKKworCitMQ19USU1FCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfVElNRSBjYXRlZ29yeS4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS9KYXZhCislCislIEFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZXMgKCVhKQorYWJkYXkgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjIzPjxVMDYyRD48VTA2MkY+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2Mjc+PFUwNjJCPjxVMDY0Nj48VTA2NEE+PFUwNjQ2PiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjJCPjxVMDY0ND48VTA2Mjc+PFUwNjJCPjxVMDYyNz48VTA2MjE+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MjM+PFUwNjMxPjxVMDYyOD48VTA2Mzk+PFUwNjI3PjxVMDYyMT4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyRT48VTA2NDU+PFUwNjRBPjxVMDYzMz4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyQz48VTA2NDU+PFUwNjM5PjxVMDYyOT4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYzMz48VTA2Mjg+PFUwNjJBPiIKKyUKKyUgRnVsbCB3ZWVrZGF5IG5hbWVzICglQSkKK2RheSAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyMz48VTA2MkQ+PFUwNjJGPiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjI3PjxVMDYyQj48VTA2NDY+PFUwNjRBPjxVMDY0Nj4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyQj48VTA2NDQ+PFUwNjI3PjxVMDYyQj48VTA2Mjc+PFUwNjIxPiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjIzPjxVMDYzMT48VTA2Mjg+PFUwNjM5PjxVMDYyNz48VTA2MjE+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MkU+PFUwNjQ1PjxVMDY0QT48VTA2MzM+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MkM+PFUwNjQ1PjxVMDYzOT48VTA2Mjk+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MzM+PFUwNjI4PjxVMDYyQT4iCislCislIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzICglYikKK2FibW9uICAgICAgICI8VTA2NDM+PFUwNjI3PjxVMDY0Nj48VTA2NDg+PFUwNjQ2PjxVMDAyMD48VTA2Mjc+PFUwNjQ0Pi8KKzxVMDYyQj48VTA2Mjc+PFUwNjQ2PjxVMDY0QT4iOy8KKyAgICAgICAgICAgICI8VTA2MzQ+PFUwNjI4PjxVMDYyNz48VTA2Mzc+IjsvCisgICAgICAgICAgICAiPFUwNjIyPjxVMDYzMD48VTA2Mjc+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0Nj48VTA2NEE+PFUwNjMzPjxVMDYyNz48VTA2NDY+IjsvCisgICAgICAgICAgICAiPFUwNjQ2PjxVMDY0OD48VTA2Mjc+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDYyRD48VTA2MzI+PFUwNjRBPjxVMDYzMT48VTA2Mjc+PFUwNjQ2PiI7LworICAgICAgICAgICAgIjxVMDYyQT48VTA2NDU+PFUwNjQ4PjxVMDYzMj4iOy8KKyAgICAgICAgICAgICI8VTA2MjI+PFUwNjI4PiI7LworICAgICAgICAgICAgIjxVMDYyMz48VTA2NEE+PFUwNjQ0PjxVMDY0OD48VTA2NDQ+IjsvCisgICAgICAgICAgICAiPFUwNjJBPjxVMDYzND48VTA2MzE+PFUwNjRBPjxVMDY0Nj48VTAwMjA+PFUwNjI3PjxVMDY0ND4vCis8VTA2MjM+PFUwNjQ4PjxVMDY0ND4iOy8KKyAgICAgICAgICAgICI8VTA2MkE+PFUwNjM0PjxVMDYzMT48VTA2NEE+PFUwNjQ2PjxVMDAyMD48VTA2Mjc+PFUwNjQ0Pi8KKzxVMDYyQj48VTA2Mjc+PFUwNjQ2PjxVMDY0QT4iOy8KKyAgICAgICAgICAgICI8VTA2NDM+PFUwNjI3PjxVMDY0Nj48VTA2NDg+PFUwNjQ2PjxVMDAyMD48VTA2Mjc+PFUwNjQ0Pi8KKzxVMDYyMz48VTA2NDg+PFUwNjQ0PiIKKyUKKyUgRnVsbCBtb250aCBuYW1lcyAoJUIpCittb24gICAgICAgICAiPFUwNjQzPjxVMDYyNz48VTA2NDY+PFUwNjQ4PjxVMDY0Nj48VTAwMjA+PFUwNjI3PjxVMDY0ND4vCis8VTA2MkI+PFUwNjI3PjxVMDY0Nj48VTA2NEE+IjsvCisgICAgICAgICAgICAiPFUwNjM0PjxVMDYyOD48VTA2Mjc+PFUwNjM3PiI7LworICAgICAgICAgICAgIjxVMDYyMj48VTA2MzA+PFUwNjI3PjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2NDY+PFUwNjRBPjxVMDYzMz48VTA2Mjc+PFUwNjQ2PiI7LworICAgICAgICAgICAgIjxVMDY0Nj48VTA2NDg+PFUwNjI3PjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2MkQ+PFUwNjMyPjxVMDY0QT48VTA2MzE+PFUwNjI3PjxVMDY0Nj4iOy8KKyAgICAgICAgICAgICI8VTA2MkE+PFUwNjQ1PjxVMDY0OD48VTA2MzI+IjsvCisgICAgICAgICAgICAiPFUwNjIyPjxVMDYyOD4iOy8KKyAgICAgICAgICAgICI8VTA2MjM+PFUwNjRBPjxVMDY0ND48VTA2NDg+PFUwNjQ0PiI7LworICAgICAgICAgICAgIjxVMDYyQT48VTA2MzQ+PFUwNjMxPjxVMDY0QT48VTA2NDY+PFUwMDIwPjxVMDYyNz48VTA2NDQ+LworPFUwNjIzPjxVMDY0OD48VTA2NDQ+IjsvCisgICAgICAgICAgICAiPFUwNjJBPjxVMDYzND48VTA2MzE+PFUwNjRBPjxVMDY0Nj48VTAwMjA+PFUwNjI3PjxVMDY0ND4vCis8VTA2MkI+PFUwNjI3PjxVMDY0Nj48VTA2NEE+IjsvCisgICAgICAgICAgICAiPFUwNjQzPjxVMDYyNz48VTA2NDY+PFUwNjQ4PjxVMDY0Nj48VTAwMjA+PFUwNjI3PjxVMDY0ND4vCis8VTA2MjM+PFUwNjQ4PjxVMDY0ND4iCislCislIEVxdWl2YWxlbnQgb2YgQU0gUE0KK2FtX3BtICAgICAgICI8VTA2MzU+IjsiPFUwNjQ1PiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbgorJSAlZCAlYiwgJVklWiAlSTolTTolUworZF90X2ZtdCAgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDJDPjxVMDAyMD48VTAwMjU+LworPFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPi8KKzxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbgorJSAlZCAlYiwgJVkKK2RfZm10ICAgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCislCislIEFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJVogJUk6JU06JVMKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPi8KKzxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4iCislCislIEFwcHJvcHJpYXRlIDEyIGggdGltZSByZXByZXNlbnRhdGlvbiAoJXIpCit0X2ZtdF9hbXBtICAiPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD4vCis8VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKGRhdGUoMSkpICAgIiVhICViICVlICVIOiVNOiVTICVaICVZIgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworCitMQ19NRVNTQUdFUworY29weSAiYXJfRUciCitFTkQgTENfTUVTU0FHRVMKKworCitMQ19QQVBFUgorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19QQVBFUiBjYXRlZ29yeQoraGVpZ2h0ICAgICAgMjk3Cit3aWR0aCAgICAgICAyMTAKKworRU5EIExDX1BBUEVSCisKKworTENfTkFNRQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19OQU1FIGNhdGVnb3J5LgorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNzA+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2Nz4iCituYW1lX2dlbiAgICAiPFUwMDJEPjxVMDA3Mz48VTAwNjE+PFUwMDZFPiIKK25hbWVfbXIgICAgICI8VTAwNEQ+PFUwMDcyPjxVMDAyRT4iCituYW1lX21ycyAgICAiPFUwMDREPjxVMDA3Mj48VTAwNzM+PFUwMDJFPiIKK25hbWVfbWlzcyAgICI8VTAwNEQ+PFUwMDY5PjxVMDA3Mz48VTAwNzM+PFUwMDJFPiIKK25hbWVfbXMgICAgICI8VTAwNEQ+PFUwMDczPjxVMDAyRT4iCisKK0VORCBMQ19OQU1FCisKKworTENfQUREUkVTUworJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19BRERSRVNTCitwb3N0YWxfZm10ICAiPFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3Mj4iCitjb3VudHJ5X2FiMiAiPFUwMDRBPjxVMDA0Rj4iCitjb3VudHJ5X2FiMyAiPFUwMDRBPjxVMDA0Rj48VTAwNTI+IgorY291bnRyeV9udW0gNDAwCisKK0VORCBMQ19BRERSRVNTCisKKworTENfVEVMRVBIT05FCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislCit0ZWxfaW50X2ZtdCAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAzQj48VTAwMjU+PFUwMDYxPjxVMDAyMD4vCis8VTAwM0I+PFUwMDI1PjxVMDA2Qz4iCitpbnRfcHJlZml4ICAiPFUwMDM5PjxVMDAzNj48VTAwMzI+IgorCitFTkQgTENfVEVMRVBIT05FCisKKworTENfTUVBU1VSRU1FTlQKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUKK21lYXN1cmVtZW50IDEKKworRU5EIExDX01FQVNVUkVNRU5UCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9hcl9LVyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FyX0tXCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZmE2MDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9hcl9LVwpAQCAtMCwwICsxLDIwNiBAQAorY29tbWVudF9jaGFyICAgICUKK2VzY2FwZV9jaGFyICAgICAvCislIEFyYWJpYyBsYW5ndWFnZSBsb2NhbGUgZm9yIEt1d2FpdC4KKyUgQ29udHJpYnV0ZWQgYnkgS2VudGFyb2ggTm9qaSA8a25vamlAanAuaWJtLmNvbT4gYW5kCislIFRldHN1amkgT3JpdGEgPG9yaXRhQGpwLmlibS5jb20+LgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiQXJhYmljIGxhbmd1YWdlIGxvY2FsZSBmb3IgS3V3YWl0Igorc291cmNlICAgICAiSUJNIEdsb2JhbGl6YXRpb24gQ2VudGVyIG9mIENvbXBldGVuY3ksIFlhbWF0byBTb2Z0d2FyZSBMYWJvcmF0b3J5IgorYWRkcmVzcyAgICAiMTYyMy0xNCwgU2hpbW90c3VydW1hLCBZYW1hdG8tc2hpLCBLYW5hZ2F3YS1rZW4sIDI0Mi04NTAyLCBKYXBhbiIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJBcmFiaWMiCit0ZXJyaXRvcnkgICJLdXdhaXQiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA3LTIwIgorJQorY2F0ZWdvcnkgICJhcl9LVzoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJhcl9LVzoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJhcl9LVzoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImFyX0tXOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiYXJfS1c6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJhcl9LVzoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJhcl9LVzoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJhcl9LVzoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJhcl9LVzoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImFyX0tXOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiYXJfS1c6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiYXJfRUciCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorCislIENvcHkgdGhlIHRlbXBsYXRlIGZyb20gSVNPL0lFQyAxNDY1MQorY29weSAiaXNvMTQ2NTFfdDEiCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIHRoZSBMQ19NT05FVEFSWSBjYXRlZ29yeS4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS9KYXZhCislCitpbnRfY3Vycl9zeW1ib2wgICAgICAgIjxVMDA0Qj48VTAwNTc+PFUwMDQ0PjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgIjxVMDYyRj48VTAwMkU+PFUwNjQzPjxVMDAyRT4iCittb25fZGVjaW1hbF9wb2ludCAgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAgMworcG9zaXRpdmVfc2lnbiAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgMworZnJhY19kaWdpdHMgICAgICAgICAgIDMKK3BfY3NfcHJlY2VkZXMgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgIDIKKyUKK0VORCBMQ19NT05FVEFSWQorCisKK0xDX05VTUVSSUMKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OVU1FUklDICBjYXRlZ29yeS4KKyUKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgIjxVMDAyRT4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICI8VTAwMkM+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAzCislCitFTkQgTENfTlVNRVJJQworCisKK0xDX1RJTUUKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19USU1FIGNhdGVnb3J5LgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkaWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlL0phdmEKKyUKKyUgQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyAoJWEpCithYmRheSAgICAgICAiPFUwNjJEPiI7IjxVMDY0Nj4iOy8KKyAgICAgICAgICAgICI8VTA2MkI+IjsiPFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDYyRT4iOyI8VTA2MkM+IjsvCisgICAgICAgICAgICAiPFUwNjMzPiIKKyUKKyUgRnVsbCB3ZWVrZGF5IG5hbWVzICglQSkKK2RheSAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyMz48VTA2MkQ+PFUwNjJGPiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjI3PjxVMDYyQj48VTA2NDY+PFUwNjRBPjxVMDY0Nj4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyQj48VTA2NDQ+PFUwNjI3PjxVMDYyQj48VTA2Mjc+PFUwNjIxPiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjIzPjxVMDYzMT48VTA2Mjg+PFUwNjM5PjxVMDYyNz48VTA2MjE+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MkU+PFUwNjQ1PjxVMDY0QT48VTA2MzM+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MkM+PFUwNjQ1PjxVMDYzOT48VTA2Mjk+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MzM+PFUwNjI4PjxVMDYyQT4iCislCislIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzICglYikKK2FibW9uICAgICAgICI8VTA2NEE+PFUwNjQ2PjxVMDYyNz4iOyI8VTA2NDE+PFUwNjI4PjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2NDU+PFUwNjI3PjxVMDYzMT4iOyI8VTA2MjM+PFUwNjI4PjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2NDU+PFUwNjI3PjxVMDY0QT4iOyI8VTA2NEE+PFUwNjQ4PjxVMDY0Nj4iOy8KKyAgICAgICAgICAgICI8VTA2NEE+PFUwNjQ4PjxVMDY0ND4iOyI8VTA2MjM+PFUwNjNBPjxVMDYzMz4iOy8KKyAgICAgICAgICAgICI8VTA2MzM+PFUwNjI4PjxVMDYyQT4iOyI8VTA2MjM+PFUwNjQzPjxVMDYyQT4iOy8KKyAgICAgICAgICAgICI8VTA2NDY+PFUwNjQ4PjxVMDY0MT4iOyI8VTA2MkY+PFUwNjRBPjxVMDYzMz4iCislCislIEZ1bGwgbW9udGggbmFtZXMgKCVCKQorbW9uICAgICAgICAgIjxVMDY0QT48VTA2NDY+PFUwNjI3PjxVMDY0QT48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjQxPjxVMDYyOD48VTA2MzE+PFUwNjI3PjxVMDY0QT48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjQ1PjxVMDYyNz48VTA2MzE+PFUwNjMzPiI7LworICAgICAgICAgICAgIjxVMDYyMz48VTA2Mjg+PFUwNjMxPjxVMDY0QT48VTA2NDQ+IjsvCisgICAgICAgICAgICAiPFUwNjQ1PjxVMDYyNz48VTA2NEE+PFUwNjQ4PiI7LworICAgICAgICAgICAgIjxVMDY0QT48VTA2NDg+PFUwNjQ2PjxVMDY0QT48VTA2NDg+IjsvCisgICAgICAgICAgICAiPFUwNjRBPjxVMDY0OD48VTA2NDQ+PFUwNjRBPjxVMDY0OD4iOy8KKyAgICAgICAgICAgICI8VTA2MjM+PFUwNjNBPjxVMDYzMz48VTA2Mzc+PFUwNjMzPiI7LworICAgICAgICAgICAgIjxVMDYzMz48VTA2Mjg+PFUwNjJBPjxVMDY0NT48VTA2Mjg+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDYyMz48VTA2NDM+PFUwNjJBPjxVMDY0OD48VTA2Mjg+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0Nj48VTA2NDg+PFUwNjQxPjxVMDY0NT48VTA2Mjg+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDYyRj48VTA2NEE+PFUwNjMzPjxVMDY0NT48VTA2Mjg+PFUwNjMxPiIKKyUKKyUgRXF1aXZhbGVudCBvZiBBTSBQTQorYW1fcG0gICAgICAgIjxVMDYzNT4iOyI8VTA2NDU+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uCislICVkICViLCAlWSVaICVJOiVNOiVTCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMkM+PFUwMDIwPjxVMDAyNT4vCis8VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+LworPFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNzA+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uCislICVkICViLCAlWQorZF9mbXQgICAgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKKyUKKyUgQXBwcm9wcmlhdGUgdGltZSByZXByZXNlbnRhdGlvbgorJSAlWiAlSTolTTolUwordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+LworPFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPiIKKyUKKyUgQXBwcm9wcmlhdGUgMTIgaCB0aW1lIHJlcHJlc2VudGF0aW9uICglcikKK3RfZm10X2FtcG0gICI8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPi8KKzxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbiAoZGF0ZSgxKSkgICAiJWEgJWIgJWUgJUg6JU06JVMgJVogJVkiCitkYXRlX2ZtdAkiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCisKK0xDX01FU1NBR0VTCitjb3B5ICJhcl9FRyIKK0VORCBMQ19NRVNTQUdFUworCisKK0xDX1BBUEVSCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislIExDX1BBUEVSIGNhdGVnb3J5CitoZWlnaHQgICAgICAyOTcKK3dpZHRoICAgICAgIDIxMAorCitFTkQgTENfUEFQRVIKKworCitMQ19OQU1FCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislIExDX05BTUUgY2F0ZWdvcnkuCislCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA3MD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDY3PiIKK25hbWVfZ2VuICAgICI8VTAwMkQ+PFUwMDczPjxVMDA2MT48VTAwNkU+IgorbmFtZV9tciAgICAgIjxVMDA0RD48VTAwNzI+PFUwMDJFPiIKK25hbWVfbXJzICAgICI8VTAwNEQ+PFUwMDcyPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9taXNzICAgIjxVMDA0RD48VTAwNjk+PFUwMDczPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9tcyAgICAgIjxVMDA0RD48VTAwNzM+PFUwMDJFPiIKKworRU5EIExDX05BTUUKKworCitMQ19BRERSRVNTCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislIExDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICI8VTAwMjU+PFUwMDdBPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDczPi8KKzxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA2NT48VTAwMjU+PFUwMDcyPiIKK2NvdW50cnlfYWIyICI8VTAwNEI+PFUwMDU3PiIKK2NvdW50cnlfYWIzICI8VTAwNEI+PFUwMDU3PjxVMDA1ND4iCitjb3VudHJ5X251bSA0MTQKKworRU5EIExDX0FERFJFU1MKKworCitMQ19URUxFUEhPTkUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUKK3RlbF9pbnRfZm10ICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDNCPjxVMDAyNT48VTAwNjE+PFUwMDIwPi8KKzxVMDAzQj48VTAwMjU+PFUwMDZDPiIKK2ludF9wcmVmaXggICI8VTAwMzk+PFUwMDM2PjxVMDAzNT4iCisKK0VORCBMQ19URUxFUEhPTkUKKworCitMQ19NRUFTVVJFTUVOVAorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJQorbWVhc3VyZW1lbnQgMQorCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FyX0xCIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYXJfTEIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhmZGFmYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FyX0xCCkBAIC0wLDAgKzEsMjIzIEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKyUgQXJhYmljIGxhbmd1YWdlIGxvY2FsZSBmb3IgTGViYW5vbi4KKyUgQ29udHJpYnV0ZWQgYnkgS2VudGFyb2ggTm9qaSA8a25vamlAanAuaWJtLmNvbT4gYW5kCislIFRldHN1amkgT3JpdGEgPG9yaXRhQGpwLmlibS5jb20+LgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiQXJhYmljIGxhbmd1YWdlIGxvY2FsZSBmb3IgTGViYW5vbiIKK3NvdXJjZSAgICAgIklCTSBHbG9iYWxpemF0aW9uIENlbnRlciBvZiBDb21wZXRlbmN5LCBZYW1hdG8gU29mdHdhcmUgTGFib3JhdG9yeSIKK2FkZHJlc3MgICAgIjE2MjMtMTQsIFNoaW1vdHN1cnVtYSwgWWFtYXRvLXNoaSwgS2FuYWdhd2Eta2VuLCAyNDItODUwMiwgSmFwYW4iCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiQXJhYmljIgordGVycml0b3J5ICAiTGViYW5vbiIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDctMjAiCislCitjYXRlZ29yeSAgImFyX0xCOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImFyX0xCOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImFyX0xCOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiYXJfTEI6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJhcl9MQjoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImFyX0xCOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImFyX0xCOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImFyX0xCOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImFyX0xCOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiYXJfTEI6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJhcl9MQjoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJhcl9FRyIKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCisKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxCitjb3B5ICJpc28xNDY1MV90MSIKKworRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gdGhlIExDX01PTkVUQVJZIGNhdGVnb3J5LgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkaWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlL0phdmEKKyUKK2ludF9jdXJyX3N5bWJvbCAgICAgICAiPFUwMDRDPjxVMDA0Mj48VTAwNTA+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAiPFUwNjQ0PjxVMDAyRT48VTA2NDQ+PFUwMDJFPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgICAzCitwb3NpdGl2ZV9zaWduICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAzCitmcmFjX2RpZ2l0cyAgICAgICAgICAgMworcF9jc19wcmVjZWRlcyAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgMgorJQorRU5EIExDX01PTkVUQVJZCisKKworTENfTlVNRVJJQworJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX05VTUVSSUMgY2F0ZWdvcnkuCislCitkZWNpbWFsX3BvaW50ICAgICAgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAiPFUwMDJDPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgMworJQorRU5EIExDX05VTUVSSUMKKworCitMQ19USU1FCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfVElNRSBjYXRlZ29yeS4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS9KYXZhCislCislIEFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZXMgKCVhKQorYWJkYXkgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjIzPjxVMDYyRD48VTA2MkY+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2Mjc+PFUwNjJCPjxVMDY0Nj48VTA2NEE+PFUwNjQ2PiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjJCPjxVMDY0ND48VTA2Mjc+PFUwNjJCPjxVMDYyNz48VTA2MjE+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MjM+PFUwNjMxPjxVMDYyOD48VTA2Mzk+PFUwNjI3PjxVMDYyMT4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyRT48VTA2NDU+PFUwNjRBPjxVMDYzMz4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyQz48VTA2NDU+PFUwNjM5PjxVMDYyOT4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYzMz48VTA2Mjg+PFUwNjJBPiIKKyUKKyUgRnVsbCB3ZWVrZGF5IG5hbWVzICglQSkKK2RheSAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyMz48VTA2MkQ+PFUwNjJGPiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjI3PjxVMDYyQj48VTA2NDY+PFUwNjRBPjxVMDY0Nj4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyQj48VTA2NDQ+PFUwNjI3PjxVMDYyQj48VTA2Mjc+PFUwNjIxPiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjIzPjxVMDYzMT48VTA2Mjg+PFUwNjM5PjxVMDYyNz48VTA2MjE+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MkU+PFUwNjQ1PjxVMDY0QT48VTA2MzM+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MkM+PFUwNjQ1PjxVMDYzOT48VTA2Mjk+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MzM+PFUwNjI4PjxVMDYyQT4iCislCislIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzICglYikKK2FibW9uICAgICAgICI8VTA2NDM+PFUwNjI3PjxVMDY0Nj48VTA2NDg+PFUwNjQ2PjxVMDAyMD48VTA2Mjc+PFUwNjQ0Pi8KKzxVMDYyQj48VTA2Mjc+PFUwNjQ2PjxVMDY0QT4iOy8KKyAgICAgICAgICAgICI8VTA2MzQ+PFUwNjI4PjxVMDYyNz48VTA2Mzc+IjsvCisgICAgICAgICAgICAiPFUwNjIyPjxVMDYzMD48VTA2Mjc+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0Nj48VTA2NEE+PFUwNjMzPjxVMDYyNz48VTA2NDY+IjsvCisgICAgICAgICAgICAiPFUwNjQ2PjxVMDY0OD48VTA2Mjc+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDYyRD48VTA2MzI+PFUwNjRBPjxVMDYzMT48VTA2Mjc+PFUwNjQ2PiI7LworICAgICAgICAgICAgIjxVMDYyQT48VTA2NDU+PFUwNjQ4PjxVMDYzMj4iOy8KKyAgICAgICAgICAgICI8VTA2MjI+PFUwNjI4PiI7LworICAgICAgICAgICAgIjxVMDYyMz48VTA2NEE+PFUwNjQ0PjxVMDY0OD48VTA2NDQ+IjsvCisgICAgICAgICAgICAiPFUwNjJBPjxVMDYzND48VTA2MzE+PFUwNjRBPjxVMDY0Nj48VTAwMjA+PFUwNjI3PjxVMDY0ND4vCis8VTA2MjM+PFUwNjQ4PjxVMDY0ND4iOy8KKyAgICAgICAgICAgICI8VTA2MkE+PFUwNjM0PjxVMDYzMT48VTA2NEE+PFUwNjQ2PjxVMDAyMD48VTA2Mjc+PFUwNjQ0Pi8KKzxVMDYyQj48VTA2Mjc+PFUwNjQ2PjxVMDY0QT4iOy8KKyAgICAgICAgICAgICI8VTA2NDM+PFUwNjI3PjxVMDY0Nj48VTA2NDg+PFUwNjQ2PjxVMDAyMD48VTA2Mjc+PFUwNjQ0Pi8KKzxVMDYyMz48VTA2NDg+PFUwNjQ0PiIKKyUKKyUgRnVsbCBtb250aCBuYW1lcyAoJUIpCittb24gICAgICAgICAiPFUwNjQzPjxVMDYyNz48VTA2NDY+PFUwNjQ4PjxVMDY0Nj48VTAwMjA+PFUwNjI3PjxVMDY0ND4vCis8VTA2MkI+PFUwNjI3PjxVMDY0Nj48VTA2NEE+IjsvCisgICAgICAgICAgICAiPFUwNjM0PjxVMDYyOD48VTA2Mjc+PFUwNjM3PiI7LworICAgICAgICAgICAgIjxVMDYyMj48VTA2MzA+PFUwNjI3PjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2NDY+PFUwNjRBPjxVMDYzMz48VTA2Mjc+PFUwNjQ2PiI7LworICAgICAgICAgICAgIjxVMDY0Nj48VTA2NDg+PFUwNjI3PjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2MkQ+PFUwNjMyPjxVMDY0QT48VTA2MzE+PFUwNjI3PjxVMDY0Nj4iOy8KKyAgICAgICAgICAgICI8VTA2MkE+PFUwNjQ1PjxVMDY0OD48VTA2MzI+IjsvCisgICAgICAgICAgICAiPFUwNjIyPjxVMDYyOD4iOy8KKyAgICAgICAgICAgICI8VTA2MjM+PFUwNjRBPjxVMDY0ND48VTA2NDg+PFUwNjQ0PiI7LworICAgICAgICAgICAgIjxVMDYyQT48VTA2MzQ+PFUwNjMxPjxVMDY0QT48VTA2NDY+PFUwMDIwPjxVMDYyNz48VTA2NDQ+LworPFUwNjIzPjxVMDY0OD48VTA2NDQ+IjsvCisgICAgICAgICAgICAiPFUwNjJBPjxVMDYzND48VTA2MzE+PFUwNjRBPjxVMDY0Nj48VTAwMjA+PFUwNjI3PjxVMDY0ND4vCis8VTA2MkI+PFUwNjI3PjxVMDY0Nj48VTA2NEE+IjsvCisgICAgICAgICAgICAiPFUwNjQzPjxVMDYyNz48VTA2NDY+PFUwNjQ4PjxVMDY0Nj48VTAwMjA+PFUwNjI3PjxVMDY0ND4vCis8VTA2MjM+PFUwNjQ4PjxVMDY0ND4iCislCislIEVxdWl2YWxlbnQgb2YgQU0gUE0KK2FtX3BtICAgICAgICI8VTA2MzU+IjsiPFUwNjQ1PiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbgorJSAlZCAlYiwgJVklWiAlSTolTTolUworZF90X2ZtdCAgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDJDPjxVMDAyMD48VTAwMjU+LworPFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPi8KKzxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbgorJSAlZCAlYiwgJVkKK2RfZm10ICAgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCislCislIEFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJVogJUk6JU06JVMKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPi8KKzxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4iCislCislIEFwcHJvcHJpYXRlIDEyIGggdGltZSByZXByZXNlbnRhdGlvbiAoJXIpCit0X2ZtdF9hbXBtICAiPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD4vCis8VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKGRhdGUoMSkpICAgIiVhICViICVlICVIOiVNOiVTICVaICVZIgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworCitMQ19NRVNTQUdFUworY29weSAiYXJfRUciCitFTkQgTENfTUVTU0FHRVMKKworCitMQ19QQVBFUgorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19QQVBFUiBjYXRlZ29yeQoraGVpZ2h0ICAgICAgMjk3Cit3aWR0aCAgICAgICAyMTAKKworRU5EIExDX1BBUEVSCisKKworTENfTkFNRQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19OQU1FIGNhdGVnb3J5LgorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNzA+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2Nz4iCituYW1lX2dlbiAgICAiPFUwMDJEPjxVMDA3Mz48VTAwNjE+PFUwMDZFPiIKK25hbWVfbXIgICAgICI8VTAwNEQ+PFUwMDcyPjxVMDAyRT4iCituYW1lX21ycyAgICAiPFUwMDREPjxVMDA3Mj48VTAwNzM+PFUwMDJFPiIKK25hbWVfbWlzcyAgICI8VTAwNEQ+PFUwMDY5PjxVMDA3Mz48VTAwNzM+PFUwMDJFPiIKK25hbWVfbXMgICAgICI8VTAwNEQ+PFUwMDczPjxVMDAyRT4iCisKK0VORCBMQ19OQU1FCisKKworTENfQUREUkVTUworJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19BRERSRVNTCitwb3N0YWxfZm10ICAiPFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3Mj4iCitjb3VudHJ5X2FiMiAiPFUwMDRDPjxVMDA0Mj4iCitjb3VudHJ5X2FiMyAiPFUwMDRDPjxVMDA0Mj48VTAwNEU+IgorY291bnRyeV9udW0gNDIyCisKK0VORCBMQ19BRERSRVNTCisKKworTENfVEVMRVBIT05FCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislCit0ZWxfaW50X2ZtdCAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAzQj48VTAwMjU+PFUwMDYxPjxVMDAyMD4vCis8VTAwM0I+PFUwMDI1PjxVMDA2Qz4iCitpbnRfcHJlZml4ICAiPFUwMDM5PjxVMDAzNj48VTAwMzE+IgorCitFTkQgTENfVEVMRVBIT05FCisKKworTENfTUVBU1VSRU1FTlQKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUKK21lYXN1cmVtZW50IDEKKworRU5EIExDX01FQVNVUkVNRU5UCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9hcl9MWSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FyX0xZCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYTNmMDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9hcl9MWQpAQCAtMCwwICsxLDIwNiBAQAorY29tbWVudF9jaGFyICAgICUKK2VzY2FwZV9jaGFyICAgICAvCislIEFyYWJpYyBsYW5ndWFnZSBsb2NhbGUgZm9yIExpYnlhbiBBcmFiIEphbWFoaXJpeWEuCislIENvbnRyaWJ1dGVkIGJ5IEtlbnRhcm9oIE5vamkgPGtub2ppQGpwLmlibS5jb20+IGFuZAorJSBUZXRzdWppIE9yaXRhIDxvcml0YUBqcC5pYm0uY29tPi4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkFyYWJpYyBsYW5ndWFnZSBsb2NhbGUgZm9yIExpYnlhbiBBcmFiIEphbWFoaXJpeWEiCitzb3VyY2UgICAgICJJQk0gR2xvYmFsaXphdGlvbiBDZW50ZXIgb2YgQ29tcGV0ZW5jeSwgWWFtYXRvIFNvZnR3YXJlIExhYm9yYXRvcnkiCithZGRyZXNzICAgICIxNjIzLTE0LCBTaGltb3RzdXJ1bWEsIFlhbWF0by1zaGksIEthbmFnYXdhLWtlbiwgMjQyLTg1MDIsIEphcGFuIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkFyYWJpYyIKK3RlcnJpdG9yeSAgIkxpYnlhbiBBcmFiIEphbWFoaXJpeWEiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA3LTIwIgorJQorY2F0ZWdvcnkgICJhcl9MWToyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJhcl9MWToyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJhcl9MWToyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImFyX0xZOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiYXJfTFk6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJhcl9MWToyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJhcl9MWToyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJhcl9MWToyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJhcl9MWToyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImFyX0xZOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiYXJfTFk6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiYXJfRUciCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorCislIENvcHkgdGhlIHRlbXBsYXRlIGZyb20gSVNPL0lFQyAxNDY1MQorY29weSAiaXNvMTQ2NTFfdDEiCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIHRoZSBMQ19NT05FVEFSWSBjYXRlZ29yeS4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS9KYXZhCislCitpbnRfY3Vycl9zeW1ib2wgICAgICAgIjxVMDA0Qz48VTAwNTk+PFUwMDQ0PjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgIjxVMDYyRj48VTAwMkU+PFUwNjQ0PjxVMDAyRT4iCittb25fZGVjaW1hbF9wb2ludCAgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAgMworcG9zaXRpdmVfc2lnbiAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgMworZnJhY19kaWdpdHMgICAgICAgICAgIDMKK3BfY3NfcHJlY2VkZXMgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgIDIKKyUKK0VORCBMQ19NT05FVEFSWQorCisKK0xDX05VTUVSSUMKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OVU1FUklDICBjYXRlZ29yeS4KKyUKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgIjxVMDAyRT4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICI8VTAwMkM+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAzCislCitFTkQgTENfTlVNRVJJQworCisKK0xDX1RJTUUKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19USU1FIGNhdGVnb3J5LgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkaWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlL0phdmEKKyUKKyUgQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyAoJWEpCithYmRheSAgICAgICAiPFUwNjJEPiI7IjxVMDY0Nj4iOy8KKyAgICAgICAgICAgICI8VTA2MkI+IjsiPFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDYyRT4iOyI8VTA2MkM+IjsvCisgICAgICAgICAgICAiPFUwNjMzPiIKKyUKKyUgRnVsbCB3ZWVrZGF5IG5hbWVzICglQSkKK2RheSAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyMz48VTA2MkQ+PFUwNjJGPiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjI3PjxVMDYyQj48VTA2NDY+PFUwNjRBPjxVMDY0Nj4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyQj48VTA2NDQ+PFUwNjI3PjxVMDYyQj48VTA2Mjc+PFUwNjIxPiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjIzPjxVMDYzMT48VTA2Mjg+PFUwNjM5PjxVMDYyNz48VTA2MjE+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MkU+PFUwNjQ1PjxVMDY0QT48VTA2MzM+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MkM+PFUwNjQ1PjxVMDYzOT48VTA2Mjk+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MzM+PFUwNjI4PjxVMDYyQT4iCislCislIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzICglYikKK2FibW9uICAgICAgICI8VTA2NEE+PFUwNjQ2PjxVMDYyNz4iOyI8VTA2NDE+PFUwNjI4PjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2NDU+PFUwNjI3PjxVMDYzMT4iOyI8VTA2MjM+PFUwNjI4PjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2NDU+PFUwNjI3PjxVMDY0QT4iOyI8VTA2NEE+PFUwNjQ4PjxVMDY0Nj4iOy8KKyAgICAgICAgICAgICI8VTA2NEE+PFUwNjQ4PjxVMDY0ND4iOyI8VTA2MjM+PFUwNjNBPjxVMDYzMz4iOy8KKyAgICAgICAgICAgICI8VTA2MzM+PFUwNjI4PjxVMDYyQT4iOyI8VTA2MjM+PFUwNjQzPjxVMDYyQT4iOy8KKyAgICAgICAgICAgICI8VTA2NDY+PFUwNjQ4PjxVMDY0MT4iOyI8VTA2MkY+PFUwNjRBPjxVMDYzMz4iCislCislIEZ1bGwgbW9udGggbmFtZXMgKCVCKQorbW9uICAgICAgICAgIjxVMDY0QT48VTA2NDY+PFUwNjI3PjxVMDY0QT48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjQxPjxVMDYyOD48VTA2MzE+PFUwNjI3PjxVMDY0QT48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjQ1PjxVMDYyNz48VTA2MzE+PFUwNjMzPiI7LworICAgICAgICAgICAgIjxVMDYyMz48VTA2Mjg+PFUwNjMxPjxVMDY0QT48VTA2NDQ+IjsvCisgICAgICAgICAgICAiPFUwNjQ1PjxVMDYyNz48VTA2NEE+PFUwNjQ4PiI7LworICAgICAgICAgICAgIjxVMDY0QT48VTA2NDg+PFUwNjQ2PjxVMDY0QT48VTA2NDg+IjsvCisgICAgICAgICAgICAiPFUwNjRBPjxVMDY0OD48VTA2NDQ+PFUwNjRBPjxVMDY0OD4iOy8KKyAgICAgICAgICAgICI8VTA2MjM+PFUwNjNBPjxVMDYzMz48VTA2Mzc+PFUwNjMzPiI7LworICAgICAgICAgICAgIjxVMDYzMz48VTA2Mjg+PFUwNjJBPjxVMDY0NT48VTA2Mjg+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDYyMz48VTA2NDM+PFUwNjJBPjxVMDY0OD48VTA2Mjg+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0Nj48VTA2NDg+PFUwNjQxPjxVMDY0NT48VTA2Mjg+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDYyRj48VTA2NEE+PFUwNjMzPjxVMDY0NT48VTA2Mjg+PFUwNjMxPiIKKyUKKyUgRXF1aXZhbGVudCBvZiBBTSBQTQorYW1fcG0gICAgICAgIjxVMDYzNT4iOyI8VTA2NDU+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uCislICVkICViLCAlWSVaICVJOiVNOiVTCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMkM+PFUwMDIwPjxVMDAyNT4vCis8VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+LworPFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNzA+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uCislICVkICViLCAlWQorZF9mbXQgICAgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKKyUKKyUgQXBwcm9wcmlhdGUgdGltZSByZXByZXNlbnRhdGlvbgorJSAlWiAlSTolTTolUwordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+LworPFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPiIKKyUKKyUgQXBwcm9wcmlhdGUgMTIgaCB0aW1lIHJlcHJlc2VudGF0aW9uICglcikKK3RfZm10X2FtcG0gICI8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPi8KKzxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbiAoZGF0ZSgxKSkgICAiJWEgJWIgJWUgJUg6JU06JVMgJVogJVkiCitkYXRlX2ZtdAkiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCisKK0xDX01FU1NBR0VTCitjb3B5ICJhcl9FRyIKK0VORCBMQ19NRVNTQUdFUworCisKK0xDX1BBUEVSCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislIExDX1BBUEVSIGNhdGVnb3J5CitoZWlnaHQgICAgICAyOTcKK3dpZHRoICAgICAgIDIxMAorCitFTkQgTENfUEFQRVIKKworCitMQ19OQU1FCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislIExDX05BTUUgY2F0ZWdvcnkuCislCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA3MD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDY3PiIKK25hbWVfZ2VuICAgICI8VTAwMkQ+PFUwMDczPjxVMDA2MT48VTAwNkU+IgorbmFtZV9tciAgICAgIjxVMDA0RD48VTAwNzI+PFUwMDJFPiIKK25hbWVfbXJzICAgICI8VTAwNEQ+PFUwMDcyPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9taXNzICAgIjxVMDA0RD48VTAwNjk+PFUwMDczPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9tcyAgICAgIjxVMDA0RD48VTAwNzM+PFUwMDJFPiIKKworRU5EIExDX05BTUUKKworCitMQ19BRERSRVNTCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislIExDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICI8VTAwMjU+PFUwMDdBPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDczPi8KKzxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA2NT48VTAwMjU+PFUwMDcyPiIKK2NvdW50cnlfYWIyICI8VTAwNEM+PFUwMDU5PiIKK2NvdW50cnlfYWIzICI8VTAwNEM+PFUwMDQyPjxVMDA1OT4iCitjb3VudHJ5X251bSA0MzQKKworRU5EIExDX0FERFJFU1MKKworCitMQ19URUxFUEhPTkUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUKK3RlbF9pbnRfZm10ICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDNCPjxVMDAyNT48VTAwNjE+PFUwMDIwPi8KKzxVMDAzQj48VTAwMjU+PFUwMDZDPiIKK2ludF9wcmVmaXggICI8VTAwMzI+PFUwMDMxPjxVMDAzOD4iCisKK0VORCBMQ19URUxFUEhPTkUKKworCitMQ19NRUFTVVJFTUVOVAorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJQorbWVhc3VyZW1lbnQgMQorCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FyX01BIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYXJfTUEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAzYzExOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FyX01BCkBAIC0wLDAgKzEsMjA2IEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKyUgQXJhYmljIGxhbmd1YWdlIGxvY2FsZSBmb3IgTW9yb2Njby4KKyUgQ29udHJpYnV0ZWQgYnkgS2VudGFyb2ggTm9qaSA8a25vamlAanAuaWJtLmNvbT4gYW5kCislIFRldHN1amkgT3JpdGEgPG9yaXRhQGpwLmlibS5jb20+LgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiQXJhYmljIGxhbmd1YWdlIGxvY2FsZSBmb3IgTW9yb2NjbyIKK3NvdXJjZSAgICAgIklCTSBHbG9iYWxpemF0aW9uIENlbnRlciBvZiBDb21wZXRlbmN5LCBZYW1hdG8gU29mdHdhcmUgTGFib3JhdG9yeSIKK2FkZHJlc3MgICAgIjE2MjMtMTQsIFNoaW1vdHN1cnVtYSwgWWFtYXRvLXNoaSwgS2FuYWdhd2Eta2VuLCAyNDItODUwMiwgSmFwYW4iCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiQXJhYmljIgordGVycml0b3J5ICAiTW9yb2NjbyIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDctMjAiCislCitjYXRlZ29yeSAgImFyX01BOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImFyX01BOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImFyX01BOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiYXJfTUE6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJhcl9NQToyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImFyX01BOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImFyX01BOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImFyX01BOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImFyX01BOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiYXJfTUE6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJhcl9NQToyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJhcl9FRyIKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCisKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxCitjb3B5ICJpc28xNDY1MV90MSIKKworRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gdGhlIExDX01PTkVUQVJZIGNhdGVnb3J5LgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkaWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlL0phdmEKKyUKK2ludF9jdXJyX3N5bWJvbCAgICAgICAiPFUwMDREPjxVMDA0MT48VTAwNDQ+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAiPFUwNjJGPjxVMDAyRT48VTA2NDU+PFUwMDJFPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgICAzCitwb3NpdGl2ZV9zaWduICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAzCitmcmFjX2RpZ2l0cyAgICAgICAgICAgMworcF9jc19wcmVjZWRlcyAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgMgorJQorRU5EIExDX01PTkVUQVJZCisKKworTENfTlVNRVJJQworJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX05VTUVSSUMgIGNhdGVnb3J5LgorJQorZGVjaW1hbF9wb2ludCAgICAgICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgIjxVMDAyQz4iCitncm91cGluZyAgICAgICAgICAgICAgIDMKKyUKK0VORCBMQ19OVU1FUklDCisKKworTENfVElNRQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX1RJTUUgY2F0ZWdvcnkuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRpZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUvSmF2YQorJQorJSBBYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWVzICglYSkKK2FiZGF5ICAgICAgICI8VTA2MkQ+IjsiPFUwNjQ2PiI7LworICAgICAgICAgICAgIjxVMDYyQj4iOyI8VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjJFPiI7IjxVMDYyQz4iOy8KKyAgICAgICAgICAgICI8VTA2MzM+IgorJQorJSBGdWxsIHdlZWtkYXkgbmFtZXMgKCVBKQorZGF5ICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjIzPjxVMDYyRD48VTA2MkY+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2Mjc+PFUwNjJCPjxVMDY0Nj48VTA2NEE+PFUwNjQ2PiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjJCPjxVMDY0ND48VTA2Mjc+PFUwNjJCPjxVMDYyNz48VTA2MjE+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MjM+PFUwNjMxPjxVMDYyOD48VTA2Mzk+PFUwNjI3PjxVMDYyMT4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyRT48VTA2NDU+PFUwNjRBPjxVMDYzMz4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyQz48VTA2NDU+PFUwNjM5PjxVMDYyOT4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYzMz48VTA2Mjg+PFUwNjJBPiIKKyUKKyUgQWJicmV2aWF0ZWQgbW9udGggbmFtZXMgKCViKQorYWJtb24gICAgICAgIjxVMDY0QT48VTA2NDY+PFUwNjI3PiI7IjxVMDY0MT48VTA2Mjg+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0NT48VTA2Mjc+PFUwNjMxPiI7IjxVMDYyMz48VTA2Mjg+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0NT48VTA2Mjc+PFUwNjRBPiI7IjxVMDY0QT48VTA2NDg+PFUwNjQ2PiI7LworICAgICAgICAgICAgIjxVMDY0QT48VTA2NDg+PFUwNjQ0PiI7IjxVMDYyMz48VTA2M0E+PFUwNjMzPiI7LworICAgICAgICAgICAgIjxVMDYzMz48VTA2Mjg+PFUwNjJBPiI7IjxVMDYyMz48VTA2NDM+PFUwNjJBPiI7LworICAgICAgICAgICAgIjxVMDY0Nj48VTA2NDg+PFUwNjQxPiI7IjxVMDYyRj48VTA2NEE+PFUwNjMzPiIKKyUKKyUgRnVsbCBtb250aCBuYW1lcyAoJUIpCittb24gICAgICAgICAiPFUwNjRBPjxVMDY0Nj48VTA2Mjc+PFUwNjRBPjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2NDE+PFUwNjI4PjxVMDYzMT48VTA2Mjc+PFUwNjRBPjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2NDU+PFUwNjI3PjxVMDYzMT48VTA2MzM+IjsvCisgICAgICAgICAgICAiPFUwNjIzPjxVMDYyOD48VTA2MzE+PFUwNjRBPjxVMDY0ND4iOy8KKyAgICAgICAgICAgICI8VTA2NDU+PFUwNjI3PjxVMDY0QT48VTA2NDg+IjsvCisgICAgICAgICAgICAiPFUwNjRBPjxVMDY0OD48VTA2NDY+PFUwNjRBPjxVMDY0OD4iOy8KKyAgICAgICAgICAgICI8VTA2NEE+PFUwNjQ4PjxVMDY0ND48VTA2NEE+PFUwNjQ4PiI7LworICAgICAgICAgICAgIjxVMDYyMz48VTA2M0E+PFUwNjMzPjxVMDYzNz48VTA2MzM+IjsvCisgICAgICAgICAgICAiPFUwNjMzPjxVMDYyOD48VTA2MkE+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjIzPjxVMDY0Mz48VTA2MkE+PFUwNjQ4PjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjQ2PjxVMDY0OD48VTA2NDE+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjJGPjxVMDY0QT48VTA2MzM+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IgorJQorJSBFcXVpdmFsZW50IG9mIEFNIFBNCithbV9wbSAgICAgICAiPFUwNjM1PiI7IjxVMDY0NT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJWQgJWIsICVZJVogJUk6JU06JVMKK2RfdF9mbXQgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyQz48VTAwMjA+PFUwMDI1Pi8KKzxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD4vCis8VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24KKyUgJWQgJWIsICVZCitkX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorJQorJSBBcHByb3ByaWF0ZSB0aW1lIHJlcHJlc2VudGF0aW9uCislICVaICVJOiVNOiVTCit0X2ZtdCAgICAgICAiPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD4vCis8VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+IgorJQorJSBBcHByb3ByaWF0ZSAxMiBoIHRpbWUgcmVwcmVzZW50YXRpb24gKCVyKQordF9mbXRfYW1wbSAgIjxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+LworPFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNzA+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uIChkYXRlKDEpKSAgICIlYSAlYiAlZSAlSDolTTolUyAlWiAlWSIKK2RhdGVfZm10CSI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKKworTENfTUVTU0FHRVMKK2NvcHkgImFyX0VHIgorRU5EIExDX01FU1NBR0VTCisKKworTENfUEFQRVIKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUgTENfUEFQRVIgY2F0ZWdvcnkKK2hlaWdodCAgICAgIDI5Nword2lkdGggICAgICAgMjEwCisKK0VORCBMQ19QQVBFUgorCisKK0xDX05BTUUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUgTENfTkFNRSBjYXRlZ29yeS4KKyUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDcwPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNjc+IgorbmFtZV9nZW4gICAgIjxVMDAyRD48VTAwNzM+PFUwMDYxPjxVMDA2RT4iCituYW1lX21yICAgICAiPFUwMDREPjxVMDA3Mj48VTAwMkU+IgorbmFtZV9tcnMgICAgIjxVMDA0RD48VTAwNzI+PFUwMDczPjxVMDAyRT4iCituYW1lX21pc3MgICAiPFUwMDREPjxVMDA2OT48VTAwNzM+PFUwMDczPjxVMDAyRT4iCituYW1lX21zICAgICAiPFUwMDREPjxVMDA3Mz48VTAwMkU+IgorCitFTkQgTENfTkFNRQorCisKK0xDX0FERFJFU1MKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUgTENfQUREUkVTUworcG9zdGFsX2ZtdCAgIjxVMDAyNT48VTAwN0E+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDU0PjxVMDAyNT48VTAwNzM+LworPFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDY1PjxVMDAyNT48VTAwNzI+IgorY291bnRyeV9hYjIgIjxVMDA0RD48VTAwNDE+IgorY291bnRyeV9hYjMgIjxVMDA0RD48VTAwNDE+PFUwMDUyPiIKK2NvdW50cnlfbnVtIDUwNAorCitFTkQgTENfQUREUkVTUworCisKK0xDX1RFTEVQSE9ORQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJQordGVsX2ludF9mbXQgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwM0I+PFUwMDI1PjxVMDA2MT48VTAwMjA+LworPFUwMDNCPjxVMDAyNT48VTAwNkM+IgoraW50X3ByZWZpeCAgIjxVMDAzMj48VTAwMzE+PFUwMDMyPiIKKworRU5EIExDX1RFTEVQSE9ORQorCisKK0xDX01FQVNVUkVNRU5UCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislCittZWFzdXJlbWVudCAxCisKK0VORCBMQ19NRUFTVVJFTUVOVApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYXJfT00gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9hcl9PTQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTY2ZDE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYXJfT00KQEAgLTAsMCArMSwyMDYgQEAKK2NvbW1lbnRfY2hhciAgICAlCitlc2NhcGVfY2hhciAgICAgLworJSBBcmFiaWMgbGFuZ3VhZ2UgbG9jYWxlIGZvciBPbWFuLgorJSBDb250cmlidXRlZCBieSBLZW50YXJvaCBOb2ppIDxrbm9qaUBqcC5pYm0uY29tPiBhbmQKKyUgVGV0c3VqaSBPcml0YSA8b3JpdGFAanAuaWJtLmNvbT4uCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJBcmFiaWMgbGFuZ3VhZ2UgbG9jYWxlIGZvciBPbWFuIgorc291cmNlICAgICAiSUJNIEdsb2JhbGl6YXRpb24gQ2VudGVyIG9mIENvbXBldGVuY3ksIFlhbWF0byBTb2Z0d2FyZSBMYWJvcmF0b3J5IgorYWRkcmVzcyAgICAiMTYyMy0xNCwgU2hpbW90c3VydW1hLCBZYW1hdG8tc2hpLCBLYW5hZ2F3YS1rZW4sIDI0Mi04NTAyLCBKYXBhbiIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJBcmFiaWMiCit0ZXJyaXRvcnkgICJPbWFuIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNy0yMCIKKyUKK2NhdGVnb3J5ICAiYXJfT006MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiYXJfT006MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiYXJfT006MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJhcl9PTToyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImFyX09NOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiYXJfT006MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiYXJfT006MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiYXJfT006MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiYXJfT006MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJhcl9PTToyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImFyX09NOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImFyX0VHIgorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKKworJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEKK2NvcHkgImlzbzE0NjUxX3QxIgorCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiB0aGUgTENfTU9ORVRBUlkgY2F0ZWdvcnkuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRpZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUvSmF2YQorJQoraW50X2N1cnJfc3ltYm9sICAgICAgICI8VTAwNEY+PFUwMDREPjxVMDA1Mj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICI8VTA2MzE+PFUwMDJFPjxVMDYzOT48VTAwMkU+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgIDMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgIDMKK2ZyYWNfZGlnaXRzICAgICAgICAgICAzCitwX2NzX3ByZWNlZGVzICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAyCislCitFTkQgTENfTU9ORVRBUlkKKworCitMQ19OVU1FUklDCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTlVNRVJJQyAgY2F0ZWdvcnkuCislCitkZWNpbWFsX3BvaW50ICAgICAgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAiPFUwMDJDPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgMworJQorRU5EIExDX05VTUVSSUMKKworCitMQ19USU1FCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfVElNRSBjYXRlZ29yeS4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS9KYXZhCislCislIEFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZXMgKCVhKQorYWJkYXkgICAgICAgIjxVMDYyRD4iOyI8VTA2NDY+IjsvCisgICAgICAgICAgICAiPFUwNjJCPiI7IjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2MkU+IjsiPFUwNjJDPiI7LworICAgICAgICAgICAgIjxVMDYzMz4iCislCislIEZ1bGwgd2Vla2RheSBuYW1lcyAoJUEpCitkYXkgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MjM+PFUwNjJEPjxVMDYyRj4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyNz48VTA2MkI+PFUwNjQ2PjxVMDY0QT48VTA2NDY+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MkI+PFUwNjQ0PjxVMDYyNz48VTA2MkI+PFUwNjI3PjxVMDYyMT4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyMz48VTA2MzE+PFUwNjI4PjxVMDYzOT48VTA2Mjc+PFUwNjIxPiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjJFPjxVMDY0NT48VTA2NEE+PFUwNjMzPiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjJDPjxVMDY0NT48VTA2Mzk+PFUwNjI5PiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjMzPjxVMDYyOD48VTA2MkE+IgorJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCithYm1vbiAgICAgICAiPFUwNjRBPjxVMDY0Nj48VTA2Mjc+IjsiPFUwNjQxPjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjQ1PjxVMDYyNz48VTA2MzE+IjsiPFUwNjIzPjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjQ1PjxVMDYyNz48VTA2NEE+IjsiPFUwNjRBPjxVMDY0OD48VTA2NDY+IjsvCisgICAgICAgICAgICAiPFUwNjRBPjxVMDY0OD48VTA2NDQ+IjsiPFUwNjIzPjxVMDYzQT48VTA2MzM+IjsvCisgICAgICAgICAgICAiPFUwNjMzPjxVMDYyOD48VTA2MkE+IjsiPFUwNjIzPjxVMDY0Mz48VTA2MkE+IjsvCisgICAgICAgICAgICAiPFUwNjQ2PjxVMDY0OD48VTA2NDE+IjsiPFUwNjJGPjxVMDY0QT48VTA2MzM+IgorJQorJSBGdWxsIG1vbnRoIG5hbWVzICglQikKK21vbiAgICAgICAgICI8VTA2NEE+PFUwNjQ2PjxVMDYyNz48VTA2NEE+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0MT48VTA2Mjg+PFUwNjMxPjxVMDYyNz48VTA2NEE+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0NT48VTA2Mjc+PFUwNjMxPjxVMDYzMz4iOy8KKyAgICAgICAgICAgICI8VTA2MjM+PFUwNjI4PjxVMDYzMT48VTA2NEE+PFUwNjQ0PiI7LworICAgICAgICAgICAgIjxVMDY0NT48VTA2Mjc+PFUwNjRBPjxVMDY0OD4iOy8KKyAgICAgICAgICAgICI8VTA2NEE+PFUwNjQ4PjxVMDY0Nj48VTA2NEE+PFUwNjQ4PiI7LworICAgICAgICAgICAgIjxVMDY0QT48VTA2NDg+PFUwNjQ0PjxVMDY0QT48VTA2NDg+IjsvCisgICAgICAgICAgICAiPFUwNjIzPjxVMDYzQT48VTA2MzM+PFUwNjM3PjxVMDYzMz4iOy8KKyAgICAgICAgICAgICI8VTA2MzM+PFUwNjI4PjxVMDYyQT48VTA2NDU+PFUwNjI4PjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2MjM+PFUwNjQzPjxVMDYyQT48VTA2NDg+PFUwNjI4PjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2NDY+PFUwNjQ4PjxVMDY0MT48VTA2NDU+PFUwNjI4PjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2MkY+PFUwNjRBPjxVMDYzMz48VTA2NDU+PFUwNjI4PjxVMDYzMT4iCislCislIEVxdWl2YWxlbnQgb2YgQU0gUE0KK2FtX3BtICAgICAgICI8VTA2MzU+IjsiPFUwNjQ1PiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbgorJSAlZCAlYiwgJVklWiAlSTolTTolUworZF90X2ZtdCAgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDJDPjxVMDAyMD48VTAwMjU+LworPFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPi8KKzxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbgorJSAlZCAlYiwgJVkKK2RfZm10ICAgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCislCislIEFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJVogJUk6JU06JVMKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPi8KKzxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4iCislCislIEFwcHJvcHJpYXRlIDEyIGggdGltZSByZXByZXNlbnRhdGlvbiAoJXIpCit0X2ZtdF9hbXBtICAiPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD4vCis8VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKGRhdGUoMSkpICAgIiVhICViICVlICVIOiVNOiVTICVaICVZIgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworCitMQ19NRVNTQUdFUworY29weSAiYXJfRUciCitFTkQgTENfTUVTU0FHRVMKKworCitMQ19QQVBFUgorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19QQVBFUiBjYXRlZ29yeQoraGVpZ2h0ICAgICAgMjk3Cit3aWR0aCAgICAgICAyMTAKKworRU5EIExDX1BBUEVSCisKKworTENfTkFNRQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19OQU1FIGNhdGVnb3J5LgorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNzA+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2Nz4iCituYW1lX2dlbiAgICAiPFUwMDJEPjxVMDA3Mz48VTAwNjE+PFUwMDZFPiIKK25hbWVfbXIgICAgICI8VTAwNEQ+PFUwMDcyPjxVMDAyRT4iCituYW1lX21ycyAgICAiPFUwMDREPjxVMDA3Mj48VTAwNzM+PFUwMDJFPiIKK25hbWVfbWlzcyAgICI8VTAwNEQ+PFUwMDY5PjxVMDA3Mz48VTAwNzM+PFUwMDJFPiIKK25hbWVfbXMgICAgICI8VTAwNEQ+PFUwMDczPjxVMDAyRT4iCisKK0VORCBMQ19OQU1FCisKKworTENfQUREUkVTUworJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19BRERSRVNTCitwb3N0YWxfZm10ICAiPFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3Mj4iCitjb3VudHJ5X2FiMiAiPFUwMDRGPjxVMDA0RD4iCitjb3VudHJ5X2FiMyAiPFUwMDRGPjxVMDA0RD48VTAwNEU+IgorY291bnRyeV9udW0gNTEyCisKK0VORCBMQ19BRERSRVNTCisKKworTENfVEVMRVBIT05FCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislCit0ZWxfaW50X2ZtdCAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAzQj48VTAwMjU+PFUwMDYxPjxVMDAyMD4vCis8VTAwM0I+PFUwMDI1PjxVMDA2Qz4iCitpbnRfcHJlZml4ICAiPFUwMDM5PjxVMDAzNj48VTAwMzg+IgorCitFTkQgTENfVEVMRVBIT05FCisKKworTENfTUVBU1VSRU1FTlQKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUKK21lYXN1cmVtZW50IDEKKworRU5EIExDX01FQVNVUkVNRU5UCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9hcl9RQSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FyX1FBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MDNiNmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9hcl9RQQpAQCAtMCwwICsxLDIwNiBAQAorY29tbWVudF9jaGFyICAgICUKK2VzY2FwZV9jaGFyICAgICAvCislIEFyYWJpYyBsYW5ndWFnZSBsb2NhbGUgZm9yIFFhdGFyLgorJSBDb250cmlidXRlZCBieSBLZW50YXJvaCBOb2ppIDxrbm9qaUBqcC5pYm0uY29tPiBhbmQKKyUgVGV0c3VqaSBPcml0YSA8b3JpdGFAanAuaWJtLmNvbT4uCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJBcmFiaWMgbGFuZ3VhZ2UgbG9jYWxlIGZvciBRYXRhciIKK3NvdXJjZSAgICAgIklCTSBHbG9iYWxpemF0aW9uIENlbnRlciBvZiBDb21wZXRlbmN5LCBZYW1hdG8gU29mdHdhcmUgTGFib3JhdG9yeSIKK2FkZHJlc3MgICAgIjE2MjMtMTQsIFNoaW1vdHN1cnVtYSwgWWFtYXRvLXNoaSwgS2FuYWdhd2Eta2VuLCAyNDItODUwMiwgSmFwYW4iCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiQXJhYmljIgordGVycml0b3J5ICAiUWF0YXIiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA3LTIwIgorJQorY2F0ZWdvcnkgICJhcl9RQToyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJhcl9RQToyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJhcl9RQToyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImFyX1FBOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiYXJfUUE6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJhcl9RQToyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJhcl9RQToyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJhcl9RQToyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJhcl9RQToyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImFyX1FBOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiYXJfUUE6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiYXJfRUciCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorCislIENvcHkgdGhlIHRlbXBsYXRlIGZyb20gSVNPL0lFQyAxNDY1MQorY29weSAiaXNvMTQ2NTFfdDEiCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIHRoZSBMQ19NT05FVEFSWSBjYXRlZ29yeS4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS9KYXZhCislCitpbnRfY3Vycl9zeW1ib2wgICAgICAgIjxVMDA1MT48VTAwNDE+PFUwMDUyPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgIjxVMDYzMT48VTAwMkU+PFUwNjQyPjxVMDAyRT4iCittb25fZGVjaW1hbF9wb2ludCAgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAgMworcG9zaXRpdmVfc2lnbiAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgMworZnJhY19kaWdpdHMgICAgICAgICAgIDMKK3BfY3NfcHJlY2VkZXMgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgIDIKKyUKK0VORCBMQ19NT05FVEFSWQorCisKK0xDX05VTUVSSUMKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OVU1FUklDICBjYXRlZ29yeS4KKyUKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgIjxVMDAyRT4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICI8VTAwMkM+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAzCislCitFTkQgTENfTlVNRVJJQworCisKK0xDX1RJTUUKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19USU1FIGNhdGVnb3J5LgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkaWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlL0phdmEKKyUKKyUgQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyAoJWEpCithYmRheSAgICAgICAiPFUwNjJEPiI7IjxVMDY0Nj4iOy8KKyAgICAgICAgICAgICI8VTA2MkI+IjsiPFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDYyRT4iOyI8VTA2MkM+IjsvCisgICAgICAgICAgICAiPFUwNjMzPiIKKyUKKyUgRnVsbCB3ZWVrZGF5IG5hbWVzICglQSkKK2RheSAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyMz48VTA2MkQ+PFUwNjJGPiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjI3PjxVMDYyQj48VTA2NDY+PFUwNjRBPjxVMDY0Nj4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyQj48VTA2NDQ+PFUwNjI3PjxVMDYyQj48VTA2Mjc+PFUwNjIxPiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjIzPjxVMDYzMT48VTA2Mjg+PFUwNjM5PjxVMDYyNz48VTA2MjE+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MkU+PFUwNjQ1PjxVMDY0QT48VTA2MzM+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MkM+PFUwNjQ1PjxVMDYzOT48VTA2Mjk+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MzM+PFUwNjI4PjxVMDYyQT4iCislCislIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzICglYikKK2FibW9uICAgICAgICI8VTA2NEE+PFUwNjQ2PjxVMDYyNz4iOyI8VTA2NDE+PFUwNjI4PjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2NDU+PFUwNjI3PjxVMDYzMT4iOyI8VTA2MjM+PFUwNjI4PjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2NDU+PFUwNjI3PjxVMDY0QT4iOyI8VTA2NEE+PFUwNjQ4PjxVMDY0Nj4iOy8KKyAgICAgICAgICAgICI8VTA2NEE+PFUwNjQ4PjxVMDY0ND4iOyI8VTA2MjM+PFUwNjNBPjxVMDYzMz4iOy8KKyAgICAgICAgICAgICI8VTA2MzM+PFUwNjI4PjxVMDYyQT4iOyI8VTA2MjM+PFUwNjQzPjxVMDYyQT4iOy8KKyAgICAgICAgICAgICI8VTA2NDY+PFUwNjQ4PjxVMDY0MT4iOyI8VTA2MkY+PFUwNjRBPjxVMDYzMz4iCislCislIEZ1bGwgbW9udGggbmFtZXMgKCVCKQorbW9uICAgICAgICAgIjxVMDY0QT48VTA2NDY+PFUwNjI3PjxVMDY0QT48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjQxPjxVMDYyOD48VTA2MzE+PFUwNjI3PjxVMDY0QT48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjQ1PjxVMDYyNz48VTA2MzE+PFUwNjMzPiI7LworICAgICAgICAgICAgIjxVMDYyMz48VTA2Mjg+PFUwNjMxPjxVMDY0QT48VTA2NDQ+IjsvCisgICAgICAgICAgICAiPFUwNjQ1PjxVMDYyNz48VTA2NEE+PFUwNjQ4PiI7LworICAgICAgICAgICAgIjxVMDY0QT48VTA2NDg+PFUwNjQ2PjxVMDY0QT48VTA2NDg+IjsvCisgICAgICAgICAgICAiPFUwNjRBPjxVMDY0OD48VTA2NDQ+PFUwNjRBPjxVMDY0OD4iOy8KKyAgICAgICAgICAgICI8VTA2MjM+PFUwNjNBPjxVMDYzMz48VTA2Mzc+PFUwNjMzPiI7LworICAgICAgICAgICAgIjxVMDYzMz48VTA2Mjg+PFUwNjJBPjxVMDY0NT48VTA2Mjg+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDYyMz48VTA2NDM+PFUwNjJBPjxVMDY0OD48VTA2Mjg+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0Nj48VTA2NDg+PFUwNjQxPjxVMDY0NT48VTA2Mjg+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDYyRj48VTA2NEE+PFUwNjMzPjxVMDY0NT48VTA2Mjg+PFUwNjMxPiIKKyUKKyUgRXF1aXZhbGVudCBvZiBBTSBQTQorYW1fcG0gICAgICAgIjxVMDYzNT4iOyI8VTA2NDU+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uCislICVkICViLCAlWSVaICVJOiVNOiVTCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMkM+PFUwMDIwPjxVMDAyNT4vCis8VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+LworPFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNzA+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uCislICVkICViLCAlWQorZF9mbXQgICAgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKKyUKKyUgQXBwcm9wcmlhdGUgdGltZSByZXByZXNlbnRhdGlvbgorJSAlWiAlSTolTTolUwordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+LworPFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPiIKKyUKKyUgQXBwcm9wcmlhdGUgMTIgaCB0aW1lIHJlcHJlc2VudGF0aW9uICglcikKK3RfZm10X2FtcG0gICI8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPi8KKzxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbiAoZGF0ZSgxKSkgICAiJWEgJWIgJWUgJUg6JU06JVMgJVogJVkiCitkYXRlX2ZtdAkiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCisKK0xDX01FU1NBR0VTCitjb3B5ICJhcl9FRyIKK0VORCBMQ19NRVNTQUdFUworCisKK0xDX1BBUEVSCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislIExDX1BBUEVSIGNhdGVnb3J5CitoZWlnaHQgICAgICAyOTcKK3dpZHRoICAgICAgIDIxMAorCitFTkQgTENfUEFQRVIKKworCitMQ19OQU1FCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislIExDX05BTUUgY2F0ZWdvcnkuCislCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA3MD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDY3PiIKK25hbWVfZ2VuICAgICI8VTAwMkQ+PFUwMDczPjxVMDA2MT48VTAwNkU+IgorbmFtZV9tciAgICAgIjxVMDA0RD48VTAwNzI+PFUwMDJFPiIKK25hbWVfbXJzICAgICI8VTAwNEQ+PFUwMDcyPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9taXNzICAgIjxVMDA0RD48VTAwNjk+PFUwMDczPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9tcyAgICAgIjxVMDA0RD48VTAwNzM+PFUwMDJFPiIKKworRU5EIExDX05BTUUKKworCitMQ19BRERSRVNTCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislIExDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICI8VTAwMjU+PFUwMDdBPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDczPi8KKzxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA2NT48VTAwMjU+PFUwMDcyPiIKK2NvdW50cnlfYWIyICI8VTAwNTE+PFUwMDQxPiIKK2NvdW50cnlfYWIzICI8VTAwNTE+PFUwMDQxPjxVMDA1ND4iCitjb3VudHJ5X251bSA2MzQKKworRU5EIExDX0FERFJFU1MKKworCitMQ19URUxFUEhPTkUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUKK3RlbF9pbnRfZm10ICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDNCPjxVMDAyNT48VTAwNjE+PFUwMDIwPi8KKzxVMDAzQj48VTAwMjU+PFUwMDZDPiIKK2ludF9wcmVmaXggICI8VTAwMzk+PFUwMDM3PjxVMDAzND4iCisKK0VORCBMQ19URUxFUEhPTkUKKworCitMQ19NRUFTVVJFTUVOVAorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJQorbWVhc3VyZW1lbnQgMQorCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FyX1NBIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYXJfU0EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlhM2FhNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FyX1NBCkBAIC0wLDAgKzEsMzg5IEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKworJSBBcmFiaWMgTG9jYWxlCislIENoYXJzZXQ6IElTTy04ODU5LTYKKyUgQnk6IFNhbHZhZG9yIFNhYmFuYWwsIExpbnV4TGFiLCBTQVAgQUcgPHNhbHZhZG9yLnNhYmFuYWxAc2FwLmNvbT4KKyUgRGF0ZTogT2N0LiAxOCwgMTk5OQorJSBBZGp1c3RlZCB0byBnbGliYyBtbmVtb25pY3MgLS1kcmVwcGVyIDIwMDAtMDItMTIKKyUgQWRqdXN0ZWQgdG8gZ2xpYmMgbW5lbW9uaWNzIC0tc3RyYXNzYnVyZ2VyIDIwMDAtMDktMjgKKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkFyYWJpYyBsb2NhbGUgZm9yIFNhdWRpIEFyYWJpYSIKK3NvdXJjZSAgICAgIiIKK2FkZHJlc3MgICAgIiIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJBcmFiaWMiCit0ZXJyaXRvcnkgICJTYXVkaSBBcmFiaWEiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA2LTI5IgorJQorY2F0ZWdvcnkgICJhcl9TQToyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJhcl9TQToyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJhcl9TQToyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImFyX1NBOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiYXJfU0E6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJhcl9TQToyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJhcl9TQToyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJhcl9TQToyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJhcl9TQToyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImFyX1NBOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiYXJfU0E6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiYXJfRUciCitFTkQgTENfQ1RZUEUKKworCislIFNldCB1cCB0aGUgTENfQ09MTEFURSBjYXRlZ29yeQorCitMQ19DT0xMQVRFCisKKworb3JkZXJfc3RhcnQJCWZvcndhcmQ7IGZvcndhcmQKKzxVMDAyMD4JPFUwMDIwPgorPFUwMDMwPgk8VTAwMzA+Cis8VTAwMzE+CTxVMDAzMT4KKzxVMDAzMj4JPFUwMDMyPgorPFUwMDMzPgk8VTAwMzM+Cis8VTAwMzQ+CTxVMDAzND4KKzxVMDAzNT4JPFUwMDM1PgorPFUwMDM2Pgk8VTAwMzY+Cis8VTAwMzc+CTxVMDAzNz4KKzxVMDAzOD4JPFUwMDM4PgorPFUwMDM5Pgk8VTAwMzk+Cis8VTAwNDE+CTxVMDA0MT47PFUwMDQxPgorPFUwMDYxPgk8VTAwNDE+OzxVMDA2MT4KKzxVMDA0Mj4JPFUwMDQyPjs8VTAwNDI+Cis8VTAwNjI+CTxVMDA0Mj47PFUwMDYyPgorPFUwMDQzPgk8VTAwNDM+OzxVMDA0Mz4KKzxVMDA2Mz4JPFUwMDQzPjs8VTAwNjM+Cis8VTAwNDQ+CTxVMDA0ND47PFUwMDQ0PgorPFUwMDY0Pgk8VTAwNDQ+OzxVMDA2ND4KKzxVMDA0NT4JPFUwMDQ1Pjs8VTAwNDU+Cis8VTAwNjU+CTxVMDA0NT47PFUwMDY1PgorPFUwMDQ2Pgk8VTAwNDY+OzxVMDA0Nj4KKzxVMDA2Nj4JPFUwMDQ2Pjs8VTAwNjY+Cis8VTAwNDc+CTxVMDA0Nz47PFUwMDQ3PgorPFUwMDY3Pgk8VTAwNDc+OzxVMDA2Nz4KKzxVMDA0OD4JPFUwMDQ4Pjs8VTAwNDg+Cis8VTAwNjg+CTxVMDA0OD47PFUwMDY4PgorPFUwMDQ5Pgk8VTAwNDk+OzxVMDA0OT4KKzxVMDA2OT4JPFUwMDQ5Pjs8VTAwNjk+Cis8VTAwNEE+CTxVMDA0QT47PFUwMDRBPgorPFUwMDZBPgk8VTAwNEE+OzxVMDA2QT4KKzxVMDA0Qj4JPFUwMDRCPjs8VTAwNEI+Cis8VTAwNkI+CTxVMDA0Qj47PFUwMDZCPgorPFUwMDRDPgk8VTAwNEM+OzxVMDA0Qz4KKzxVMDA2Qz4JPFUwMDRDPjs8VTAwNkM+Cis8VTAwNEQ+CTxVMDA0RD47PFUwMDREPgorPFUwMDZEPgk8VTAwNEQ+OzxVMDA2RD4KKzxVMDA0RT4JPFUwMDRFPjs8VTAwNEU+Cis8VTAwNkU+CTxVMDA0RT47PFUwMDZFPgorPFUwMDRGPgk8VTAwNEY+OzxVMDA0Rj4KKzxVMDA2Rj4JPFUwMDRGPjs8VTAwNkY+Cis8VTAwNTA+CTxVMDA1MD47PFUwMDUwPgorPFUwMDcwPgk8VTAwNTA+OzxVMDA3MD4KKzxVMDA1MT4JPFUwMDUxPjs8VTAwNTE+Cis8VTAwNzE+CTxVMDA1MT47PFUwMDcxPgorPFUwMDUyPgk8VTAwNTI+OzxVMDA1Mj4KKzxVMDA3Mj4JPFUwMDUyPjs8VTAwNzI+Cis8VTAwNTM+CTxVMDA1Mz47PFUwMDUzPgorPFUwMDczPgk8VTAwNTM+OzxVMDA3Mz4KKzxVMDA1ND4JPFUwMDU0Pjs8VTAwNTQ+Cis8VTAwNzQ+CTxVMDA1ND47PFUwMDc0PgorPFUwMDU1Pgk8VTAwNTU+OzxVMDA1NT4KKzxVMDA3NT4JPFUwMDU1Pjs8VTAwNzU+Cis8VTAwNTY+CTxVMDA1Nj47PFUwMDU2PgorPFUwMDc2Pgk8VTAwNTY+OzxVMDA3Nj4KKzxVMDA1Nz4JPFUwMDU3Pjs8VTAwNTc+Cis8VTAwNzc+CTxVMDA1Nz47PFUwMDc3PgorPFUwMDU4Pgk8VTAwNTg+OzxVMDA1OD4KKzxVMDA3OD4JPFUwMDU4Pjs8VTAwNzg+Cis8VTAwNTk+CTxVMDA1OT47PFUwMDU5PgorPFUwMDc5Pgk8VTAwNTk+OzxVMDA3OT4KKzxVMDA1QT4JPFUwMDVBPjs8VTAwNUE+Cis8VTAwN0E+CTxVMDA1QT47PFUwMDdBPgorPFUwMDIxPgk8VTAwMjE+Cis8VTAwMjI+CTxVMDAyMj4KKzxVMDAyMz4JPFUwMDIzPgorPFUwMDI0Pgk8VTAwMjQ+Cis8VTAwMjU+CTxVMDAyNT4KKzxVMDAyNj4JPFUwMDI2PgorPFUwMDI3Pgk8VTAwMjc+Cis8VTAwMjg+CTxVMDAyOD4KKzxVMDAyOT4JPFUwMDI5PgorPFUwMDJBPgk8VTAwMkE+Cis8VTAwMkI+CTxVMDAyQj4KKzxVMDAyQz4JPFUwMDJDPgorPFUwMDJEPgk8VTAwMkQ+Cis8VTAwMkU+CTxVMDAyRT4KKzxVMDAyRj4JPFUwMDJGPgorPFUwMDNBPgk8VTAwM0E+Cis8VTAwM0I+CTxVMDAzQj4KKzxVMDAzQz4JPFUwMDNDPgorPFUwMDNEPgk8VTAwM0Q+Cis8VTAwM0U+CTxVMDAzRT4KKzxVMDAzRj4JPFUwMDNGPgorPFUwMDQwPgk8VTAwNDA+Cis8VTAwNUI+CTxVMDA1Qj4KKzxVMDA1Qz4JPFUwMDVDPgorPFUwMDVEPgk8VTAwNUQ+Cis8VTAwNUU+CTxVMDA1RT4KKzxVMDA1Rj4JPFUwMDVGPgorPFUwMDYwPgk8VTAwNjA+Cis8VTAwN0I+CTxVMDA3Qj4KKzxVMDA3Qz4JPFUwMDdDPgorPFUwMDdEPgk8VTAwN0Q+Cis8VTAwN0U+CTxVMDA3RT4KKzxVMDBBMD4JPFUwMEEwPgorPFUwNjIxPgk8VTA2MjE+Cis8VTA2MjI+CTxVMDYyMj4KKzxVMDYyMz4JPFUwNjIzPgorPFUwNjI0Pgk8VTA2MjQ+Cis8VTA2MjU+CTxVMDYyNT4KKzxVMDYyNj4JPFUwNjI2PgorPFUwNjI3Pgk8VTA2Mjc+Cis8VTA2Mjg+CTxVMDYyOD4KKzxVMDYyOT4JPFUwNjI5PgorPFUwNjJBPgk8VTA2MkE+Cis8VTA2MkI+CTxVMDYyQj4KKzxVMDYyQz4JPFUwNjJDPgorPFUwNjJEPgk8VTA2MkQ+Cis8VTA2MkU+CTxVMDYyRT4KKzxVMDYyRj4JPFUwNjJGPgorPFUwNjMwPgk8VTA2MzA+Cis8VTA2MzE+CTxVMDYzMT4KKzxVMDYzMj4JPFUwNjMyPgorPFUwNjMzPgk8VTA2MzM+Cis8VTA2MzQ+CTxVMDYzND4KKzxVMDYzNT4JPFUwNjM1PgorPFUwNjM2Pgk8VTA2MzY+Cis8VTA2Mzc+CTxVMDYzNz4KKzxVMDYzOD4JPFUwNjM4PgorPFUwNjM5Pgk8VTA2Mzk+Cis8VTA2M0E+CTxVMDYzQT4KKzxVMDY0MT4JPFUwNjQxPgorPFUwNjQyPgk8VTA2NDI+Cis8VTA2NDM+CTxVMDY0Mz4KKzxVMDY0ND4JPFUwNjQ0PgorPFUwNjQ1Pgk8VTA2NDU+Cis8VTA2NDY+CTxVMDY0Nj4KKzxVMDY0Nz4JPFUwNjQ3PgorPFUwNjQ4Pgk8VTA2NDg+Cis8VTA2NDk+CTxVMDY0OT4KKzxVMDY0QT4JPFUwNjRBPgorPFUwMEE0Pgk8VTAwQTQ+Cis8VTA2MEM+CTxVMDYwQz4KKzxVMDBBRD4JPFUwMEFEPgorPFUwNjFCPgk8VTA2MUI+Cis8VTA2MUY+CTxVMDYxRj4KKzxVMDAwMD4JPFUwMDAwPgorPFUwMDAxPgk8VTAwMDE+Cis8VTAwMDI+CTxVMDAwMj4KKzxVMDAwMz4JPFUwMDAzPgorPFUwMDA0Pgk8VTAwMDQ+Cis8VTAwMDU+CTxVMDAwNT4KKzxVMDAwNj4JPFUwMDA2PgorPFUwMDA3Pgk8VTAwMDc+Cis8VTAwMDg+CTxVMDAwOD4KKzxVMDAwOT4JPFUwMDA5PgorPFUwMDBBPgk8VTAwMEE+Cis8VTAwMEI+CTxVMDAwQj4KKzxVMDAwQz4JPFUwMDBDPgorPFUwMDBEPgk8VTAwMEQ+Cis8VTAwMEU+CTxVMDAwRT4KKzxVMDAwRj4JPFUwMDBGPgorPFUwMDEwPgk8VTAwMTA+Cis8VTAwMTE+CTxVMDAxMT4KKzxVMDAxMj4JPFUwMDEyPgorPFUwMDEzPgk8VTAwMTM+Cis8VTAwMTQ+CTxVMDAxND4KKzxVMDAxNT4JPFUwMDE1PgorPFUwMDE2Pgk8VTAwMTY+Cis8VTAwMTc+CTxVMDAxNz4KKzxVMDAxOD4JPFUwMDE4PgorPFUwMDE5Pgk8VTAwMTk+Cis8VTAwMUE+CTxVMDAxQT4KKzxVMDAxQj4JPFUwMDFCPgorPFUwMDFDPgk8VTAwMUM+Cis8VTAwMUQ+CTxVMDAxRD4KKzxVMDAxRT4JPFUwMDFFPgorPFUwMDFGPgk8VTAwMUY+Cis8VTAwODA+CTxVMDA4MD4KKzxVMDA4MT4JPFUwMDgxPgorPFUwMDgyPgk8VTAwODI+Cis8VTAwODM+CTxVMDA4Mz4KKzxVMDA4ND4JPFUwMDg0PgorPFUwMDg1Pgk8VTAwODU+Cis8VTAwODY+CTxVMDA4Nj4KKzxVMDA4Nz4JPFUwMDg3PgorPFUwMDg4Pgk8VTAwODg+Cis8VTAwODk+CTxVMDA4OT4KKzxVMDA4QT4JPFUwMDhBPgorPFUwMDhCPgk8VTAwOEI+Cis8VTAwOEM+CTxVMDA4Qz4KKzxVMDA4RD4JPFUwMDhEPgorPFUwMDhFPgk8VTAwOEU+Cis8VTAwOEY+CTxVMDA4Rj4KKzxVMDA5MD4JPFUwMDkwPgorPFUwMDkxPgk8VTAwOTE+Cis8VTAwOTI+CTxVMDA5Mj4KKzxVMDA5Mz4JPFUwMDkzPgorPFUwMDk0Pgk8VTAwOTQ+Cis8VTAwOTU+CTxVMDA5NT4KKzxVMDA5Nj4JPFUwMDk2PgorPFUwMDk3Pgk8VTAwOTc+Cis8VTAwOTg+CTxVMDA5OD4KKzxVMDA5OT4JPFUwMDk5PgorPFUwMDlBPgk8VTAwOUE+Cis8VTAwOUI+CTxVMDA5Qj4KKzxVMDA5Qz4JPFUwMDlDPgorPFUwMDlEPgk8VTAwOUQ+Cis8VTAwOUU+CTxVMDA5RT4KKzxVMDA5Rj4JPFUwMDlGPgorPFUwMDdGPgk8VTAwN0Y+Cis8VTA2NDA+CUlHTk9SRQorPFUwNjRCPglJR05PUkUKKzxVMDY0Qz4JSUdOT1JFCis8VTA2NEQ+CUlHTk9SRQorPFUwNjRFPglJR05PUkUKKzxVMDY0Rj4JSUdOT1JFCis8VTA2NTA+CUlHTk9SRQorPFUwNjUxPglJR05PUkUKKzxVMDY1Mj4JSUdOT1JFCitvcmRlcl9lbmQKKworCitFTkQgTENfQ09MTEFURQorCisKKyUgU2V0IHVwIHRoZSBMQ19NT05FVEFSWSBjYXRlZ29yeQorCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sCSI8VTAwNTM+PFUwMDQxPjxVMDA1Mj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sCSI8VTA2MzE+PFUwNjRBPjxVMDYyNz48VTA2NDQ+IgorbW9uX2RlY2ltYWxfcG9pbnQJIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcAkiIgorbW9uX2dyb3VwaW5nCS0xCitwb3NpdGl2ZV9zaWduCSIiCituZWdhdGl2ZV9zaWduCSI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzCTIKK2ZyYWNfZGlnaXRzCTIKK3BfY3NfcHJlY2VkZXMJMAorcF9zZXBfYnlfc3BhY2UJMQorbl9jc19wcmVjZWRlcwkwCituX3NlcF9ieV9zcGFjZQkxCitwX3NpZ25fcG9zbgkxCituX3NpZ25fcG9zbgkxCitFTkQgTENfTU9ORVRBUlkKKworCislIFNldCB1cCB0aGUgTENfTlVNRVJJQyBjYXRlZ29yeQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50CSI8VTAwMkU+IgordGhvdXNhbmRzX3NlcAkiIgorZ3JvdXBpbmcJLTEKK0VORCBMQ19OVU1FUklDCisKKworJSBTZXQgdXAgdGhlIExDX1RJTUUgY2F0ZWdvcnkKKyUgZF90X2ZtdAkiJUEgJWUgJUIgJVkgICVrOiVNOiVTIgorJSBkX2ZtdAkiJUEgJWUgJUIgJVkiCislIHRfZm10CSIlazolTTolUyIKKyUgdF9mbXRfYW1wbQkiJWs6JU06JVMiCisKK0xDX1RJTUUKK2RfdF9mbXQJIjxVMDAyNT48VTAwNDE+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNDI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyMD48VTAwMjU+PFUwMDZCPjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPiIKK2RfZm10CSI8VTAwMjU+PFUwMDQxPjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDQyPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK3RfZm10CSI8VTAwMjU+PFUwMDZCPjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPiIKK3RfZm10X2FtcG0JIjxVMDAyNT48VTAwNkI+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+IgorZGF5CSI8VTA2Mjc+PFUwNjQ0PjxVMDYyMz48VTA2MkQ+PFUwNjJGPiI7IC8KKwkiPFUwNjI3PjxVMDY0ND48VTA2MjU+PFUwNjJCPjxVMDY0Nj48VTA2NEE+PFUwNjQ2PiI7IC8KKwkiPFUwNjI3PjxVMDY0ND48VTA2MkI+PFUwNjQ0PjxVMDYyNz48VTA2MkI+PFUwNjI3PjxVMDYyMT4iOyAvCisJIjxVMDYyNz48VTA2NDQ+PFUwNjIzPjxVMDYzMT48VTA2Mjg+PFUwNjM5PjxVMDYyNz48VTA2MjE+IjsgLworCSI8VTA2Mjc+PFUwNjQ0PjxVMDYyRT48VTA2NDU+PFUwNjRBPjxVMDYzMz4iOyAvCisJIjxVMDYyNz48VTA2NDQ+PFUwNjJDPjxVMDY0NT48VTA2Mzk+PFUwNjQwPjxVMDYyOT4iOyAvCisJIjxVMDYyNz48VTA2NDQ+PFUwNjMzPjxVMDYyOD48VTA2MkE+IgorYWJkYXkJIjxVMDA1Mz48VTAwNzU+PFUwMDZFPiI7IC8KKwkiPFUwMDREPjxVMDA2Rj48VTAwNkU+IjsgLworCSI8VTAwNTQ+PFUwMDc1PjxVMDA2NT4iOyAvCisJIjxVMDA1Nz48VTAwNjU+PFUwMDY0PiI7IC8KKwkiPFUwMDU0PjxVMDA2OD48VTAwNzU+IjsgLworCSI8VTAwNDY+PFUwMDcyPjxVMDA2OT4iOyAvCisJIjxVMDA1Mz48VTAwNjE+PFUwMDc0PiIKK21vbgkiPFUwNjQzPjxVMDYyNz48VTA2NDY+PFUwNjQ4PjxVMDY0Nj48VTAwMjA+PFUwNjI3PjxVMDY0ND48VTA2MkI+PFUwNjI3PjxVMDY0Nj48VTA2NEE+IjsgLworCSI8VTA2MzQ+PFUwNjI4PjxVMDYyNz48VTA2Mzc+IjsgLworCSI8VTA2MjI+PFUwNjMwPjxVMDYyNz48VTA2MzE+IjsgLworCSI8VTA2NDY+PFUwNjRBPjxVMDYzMz48VTA2NDA+PFUwNjI3PjxVMDY0Nj4iOyAvCisJIjxVMDYyMz48VTA2NEE+PFUwNjI3PjxVMDYzMT4iOyAvCisJIjxVMDYyRD48VTA2MzI+PFUwNjRBPjxVMDYzMT48VTA2Mjc+PFUwNjQ2PiI7IC8KKwkiPFUwNjJBPjxVMDY0MD48VTA2NDU+PFUwNjQwPjxVMDY0OD48VTA2MzI+IjsgLworCSI8VTA2MjI+PFUwNjI4PiI7IC8KKwkiPFUwNjIzPjxVMDY0QT48VTA2NDQ+PFUwNjQ4PjxVMDY0ND4iOyAvCisJIjxVMDYyQT48VTA2MzQ+PFUwNjMxPjxVMDY0QT48VTA2NDY+PFUwMDIwPjxVMDYyNz48VTA2NDQ+PFUwNjIzPjxVMDY0OD48VTA2NDQ+IjsgLworCSI8VTA2MkE+PFUwNjM0PjxVMDYzMT48VTA2NEE+PFUwNjQ2PjxVMDAyMD48VTA2Mjc+PFUwNjQ0PjxVMDYyQj48VTA2Mjc+PFUwNjQ2PjxVMDY0QT4iOyAvCisJIjxVMDY0Mz48VTA2Mjc+PFUwNjQ2PjxVMDY0OD48VTA2NDY+PFUwMDIwPjxVMDYyNz48VTA2NDQ+PFUwNjIzPjxVMDY0OD48VTA2NDQ+IgorYWJtb24JIjxVMDA0QT48VTAwNjE+PFUwMDZFPiI7IC8KKwkiPFUwMDQ2PjxVMDA2NT48VTAwNjI+IjsgLworCSI8VTAwNEQ+PFUwMDYxPjxVMDA3Mj4iOyAvCisJIjxVMDA0MT48VTAwNzA+PFUwMDcyPiI7IC8KKwkiPFUwMDREPjxVMDA2MT48VTAwNzk+IjsgLworCSI8VTAwNEE+PFUwMDc1PjxVMDA2RT4iOyAvCisJIjxVMDA0QT48VTAwNzU+PFUwMDZDPiI7IC8KKwkiPFUwMDQxPjxVMDA3NT48VTAwNjc+IjsgLworCSI8VTAwNTM+PFUwMDY1PjxVMDA3MD4iOyAvCisJIjxVMDA0Rj48VTAwNjM+PFUwMDc0PiI7IC8KKwkiPFUwMDRFPjxVMDA2Rj48VTAwNzY+IjsgLworCSI8VTAwNDQ+PFUwMDY1PjxVMDA2Mz4iCithbV9wbQkiIjsiIgorZXJhX2RfZm10CSIiCitkYXRlX2ZtdAkiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCisKK0xDX01FU1NBR0VTCitjb3B5ICJhcl9FRyIKK0VORCBMQ19NRVNTQUdFUworCitMQ19QQVBFUgorJSBGSVhNRQoraGVpZ2h0ICAgMjk3CislIEZJWE1FCit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDM5PjxVMDAzNj48VTAwMzY+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorJSBGSVhNRQorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAiPFUwMDUzPjxVMDA0MT4iCitjb3VudHJ5X2FiMyAiPFUwMDUzPjxVMDA0MT48VTAwNTU+IgorY291bnRyeV9udW0gNjgyCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYXJfU0QgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9hcl9TRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzc3ODU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYXJfU0QKQEAgLTAsMCArMSwyMDYgQEAKK2NvbW1lbnRfY2hhciAgICAlCitlc2NhcGVfY2hhciAgICAgLworJSBBcmFiaWMgbGFuZ3VhZ2UgbG9jYWxlIGZvciBTdWRhbi4KKyUgQ29udHJpYnV0ZWQgYnkgS2VudGFyb2ggTm9qaSA8a25vamlAanAuaWJtLmNvbT4gYW5kCislIFRldHN1amkgT3JpdGEgPG9yaXRhQGpwLmlibS5jb20+LgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiQXJhYmljIGxhbmd1YWdlIGxvY2FsZSBmb3IgU3VkYW4iCitzb3VyY2UgICAgICJJQk0gR2xvYmFsaXphdGlvbiBDZW50ZXIgb2YgQ29tcGV0ZW5jeSwgWWFtYXRvIFNvZnR3YXJlIExhYm9yYXRvcnkiCithZGRyZXNzICAgICIxNjIzLTE0LCBTaGltb3RzdXJ1bWEsIFlhbWF0by1zaGksIEthbmFnYXdhLWtlbiwgMjQyLTg1MDIsIEphcGFuIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkFyYWJpYyIKK3RlcnJpdG9yeSAgIlN1ZGFuIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNy0yMCIKKyUKK2NhdGVnb3J5ICAiYXJfU0Q6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiYXJfU0Q6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiYXJfU0Q6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJhcl9TRDoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImFyX1NEOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiYXJfU0Q6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiYXJfU0Q6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiYXJfU0Q6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiYXJfU0Q6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJhcl9TRDoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImFyX1NEOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImFyX0VHIgorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKKworJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEKK2NvcHkgImlzbzE0NjUxX3QxIgorCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiB0aGUgTENfTU9ORVRBUlkgY2F0ZWdvcnkuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRpZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUvSmF2YQorJQoraW50X2N1cnJfc3ltYm9sICAgICAgICI8VTAwNTM+PFUwMDQ0PjxVMDA0ND48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICI8VTA2MkM+PFUwMDJFPjxVMDYzMz48VTAwMkU+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgIDMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgIDMKK2ZyYWNfZGlnaXRzICAgICAgICAgICAzCitwX2NzX3ByZWNlZGVzICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAyCislCitFTkQgTENfTU9ORVRBUlkKKworCitMQ19OVU1FUklDCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTlVNRVJJQyAgY2F0ZWdvcnkuCislCitkZWNpbWFsX3BvaW50ICAgICAgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAiPFUwMDJDPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgMworJQorRU5EIExDX05VTUVSSUMKKworCitMQ19USU1FCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfVElNRSBjYXRlZ29yeS4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS9KYXZhCislCislIEFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZXMgKCVhKQorYWJkYXkgICAgICAgIjxVMDYyRD4iOyI8VTA2NDY+IjsvCisgICAgICAgICAgICAiPFUwNjJCPiI7IjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2MkU+IjsiPFUwNjJDPiI7LworICAgICAgICAgICAgIjxVMDYzMz4iCislCislIEZ1bGwgd2Vla2RheSBuYW1lcyAoJUEpCitkYXkgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MjM+PFUwNjJEPjxVMDYyRj4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyNz48VTA2MkI+PFUwNjQ2PjxVMDY0QT48VTA2NDY+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MkI+PFUwNjQ0PjxVMDYyNz48VTA2MkI+PFUwNjI3PjxVMDYyMT4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyMz48VTA2MzE+PFUwNjI4PjxVMDYzOT48VTA2Mjc+PFUwNjIxPiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjJFPjxVMDY0NT48VTA2NEE+PFUwNjMzPiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjJDPjxVMDY0NT48VTA2Mzk+PFUwNjI5PiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjMzPjxVMDYyOD48VTA2MkE+IgorJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCithYm1vbiAgICAgICAiPFUwNjRBPjxVMDY0Nj48VTA2Mjc+IjsiPFUwNjQxPjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjQ1PjxVMDYyNz48VTA2MzE+IjsiPFUwNjIzPjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjQ1PjxVMDYyNz48VTA2NEE+IjsiPFUwNjRBPjxVMDY0OD48VTA2NDY+IjsvCisgICAgICAgICAgICAiPFUwNjRBPjxVMDY0OD48VTA2NDQ+IjsiPFUwNjIzPjxVMDYzQT48VTA2MzM+IjsvCisgICAgICAgICAgICAiPFUwNjMzPjxVMDYyOD48VTA2MkE+IjsiPFUwNjIzPjxVMDY0Mz48VTA2MkE+IjsvCisgICAgICAgICAgICAiPFUwNjQ2PjxVMDY0OD48VTA2NDE+IjsiPFUwNjJGPjxVMDY0QT48VTA2MzM+IgorJQorJSBGdWxsIG1vbnRoIG5hbWVzICglQikKK21vbiAgICAgICAgICI8VTA2NEE+PFUwNjQ2PjxVMDYyNz48VTA2NEE+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0MT48VTA2Mjg+PFUwNjMxPjxVMDYyNz48VTA2NEE+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0NT48VTA2Mjc+PFUwNjMxPjxVMDYzMz4iOy8KKyAgICAgICAgICAgICI8VTA2MjM+PFUwNjI4PjxVMDYzMT48VTA2NEE+PFUwNjQ0PiI7LworICAgICAgICAgICAgIjxVMDY0NT48VTA2Mjc+PFUwNjRBPjxVMDY0OD4iOy8KKyAgICAgICAgICAgICI8VTA2NEE+PFUwNjQ4PjxVMDY0Nj48VTA2NEE+PFUwNjQ4PiI7LworICAgICAgICAgICAgIjxVMDY0QT48VTA2NDg+PFUwNjQ0PjxVMDY0QT48VTA2NDg+IjsvCisgICAgICAgICAgICAiPFUwNjIzPjxVMDYzQT48VTA2MzM+PFUwNjM3PjxVMDYzMz4iOy8KKyAgICAgICAgICAgICI8VTA2MzM+PFUwNjI4PjxVMDYyQT48VTA2NDU+PFUwNjI4PjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2MjM+PFUwNjQzPjxVMDYyQT48VTA2NDg+PFUwNjI4PjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2NDY+PFUwNjQ4PjxVMDY0MT48VTA2NDU+PFUwNjI4PjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2MkY+PFUwNjRBPjxVMDYzMz48VTA2NDU+PFUwNjI4PjxVMDYzMT4iCislCislIEVxdWl2YWxlbnQgb2YgQU0gUE0KK2FtX3BtICAgICAgICI8VTA2MzU+IjsiPFUwNjQ1PiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbgorJSAlZCAlYiwgJVklWiAlSTolTTolUworZF90X2ZtdCAgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDJDPjxVMDAyMD48VTAwMjU+LworPFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPi8KKzxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbgorJSAlZCAlYiwgJVkKK2RfZm10ICAgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCislCislIEFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJVogJUk6JU06JVMKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPi8KKzxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4iCislCislIEFwcHJvcHJpYXRlIDEyIGggdGltZSByZXByZXNlbnRhdGlvbiAoJXIpCit0X2ZtdF9hbXBtICAiPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD4vCis8VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKGRhdGUoMSkpICAgIiVhICViICVlICVIOiVNOiVTICVaICVZIgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworCitMQ19NRVNTQUdFUworY29weSAiYXJfRUciCitFTkQgTENfTUVTU0FHRVMKKworCitMQ19QQVBFUgorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19QQVBFUiBjYXRlZ29yeQoraGVpZ2h0ICAgICAgMjk3Cit3aWR0aCAgICAgICAyMTAKKworRU5EIExDX1BBUEVSCisKKworTENfTkFNRQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19OQU1FIGNhdGVnb3J5LgorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNzA+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2Nz4iCituYW1lX2dlbiAgICAiPFUwMDJEPjxVMDA3Mz48VTAwNjE+PFUwMDZFPiIKK25hbWVfbXIgICAgICI8VTAwNEQ+PFUwMDcyPjxVMDAyRT4iCituYW1lX21ycyAgICAiPFUwMDREPjxVMDA3Mj48VTAwNzM+PFUwMDJFPiIKK25hbWVfbWlzcyAgICI8VTAwNEQ+PFUwMDY5PjxVMDA3Mz48VTAwNzM+PFUwMDJFPiIKK25hbWVfbXMgICAgICI8VTAwNEQ+PFUwMDczPjxVMDAyRT4iCisKK0VORCBMQ19OQU1FCisKKworTENfQUREUkVTUworJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19BRERSRVNTCitwb3N0YWxfZm10ICAiPFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3Mj4iCitjb3VudHJ5X2FiMiAiPFUwMDUzPjxVMDA0ND4iCitjb3VudHJ5X2FiMyAiPFUwMDUzPjxVMDA0ND48VTAwNEU+IgorY291bnRyeV9udW0gNzM2CisKK0VORCBMQ19BRERSRVNTCisKKworTENfVEVMRVBIT05FCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislCit0ZWxfaW50X2ZtdCAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAzQj48VTAwMjU+PFUwMDYxPjxVMDAyMD4vCis8VTAwM0I+PFUwMDI1PjxVMDA2Qz4iCitpbnRfcHJlZml4ICAiPFUwMDMyPjxVMDAzND48VTAwMzk+IgorCitFTkQgTENfVEVMRVBIT05FCisKKworTENfTUVBU1VSRU1FTlQKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUKK21lYXN1cmVtZW50IDEKKworRU5EIExDX01FQVNVUkVNRU5UCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9hcl9TWSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FyX1NZCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MzYyNTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9hcl9TWQpAQCAtMCwwICsxLDIyMyBAQAorY29tbWVudF9jaGFyICAgICUKK2VzY2FwZV9jaGFyICAgICAvCislIEFyYWJpYyBsYW5ndWFnZSBsb2NhbGUgZm9yIFN5cmlhbiBBcmFiIFJlcHVibGljLgorJSBDb250cmlidXRlZCBieSBLZW50YXJvaCBOb2ppIDxrbm9qaUBqcC5pYm0uY29tPiBhbmQKKyUgVGV0c3VqaSBPcml0YSA8b3JpdGFAanAuaWJtLmNvbT4uCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJBcmFiaWMgbGFuZ3VhZ2UgbG9jYWxlIGZvciBTeXJpYW4gQXJhYiBSZXB1YmxpYyIKK3NvdXJjZSAgICAgIklCTSBHbG9iYWxpemF0aW9uIENlbnRlciBvZiBDb21wZXRlbmN5LCBZYW1hdG8gU29mdHdhcmUgTGFib3JhdG9yeSIKK2FkZHJlc3MgICAgIjE2MjMtMTQsIFNoaW1vdHN1cnVtYSwgWWFtYXRvLXNoaSwgS2FuYWdhd2Eta2VuLCAyNDItODUwMiwgSmFwYW4iCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiQXJhYmljIgordGVycml0b3J5ICAiU3lyaWFuIEFyYWIgUmVwdWJsaWMiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA3LTIwIgorJQorY2F0ZWdvcnkgICJhcl9TWToyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJhcl9TWToyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJhcl9TWToyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImFyX1NZOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiYXJfU1k6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJhcl9TWToyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJhcl9TWToyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJhcl9TWToyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJhcl9TWToyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImFyX1NZOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiYXJfU1k6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiYXJfRUciCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorCislIENvcHkgdGhlIHRlbXBsYXRlIGZyb20gSVNPL0lFQyAxNDY1MQorY29weSAiaXNvMTQ2NTFfdDEiCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIHRoZSBMQ19NT05FVEFSWSBjYXRlZ29yeS4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS9KYXZhCislCitpbnRfY3Vycl9zeW1ib2wgICAgICAgIjxVMDA1Mz48VTAwNTk+PFUwMDUwPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgIjxVMDY0ND48VTAwMkU+PFUwNjMzPjxVMDAyRT4iCittb25fZGVjaW1hbF9wb2ludCAgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAgMworcG9zaXRpdmVfc2lnbiAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgMworZnJhY19kaWdpdHMgICAgICAgICAgIDMKK3BfY3NfcHJlY2VkZXMgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgIDIKKyUKK0VORCBMQ19NT05FVEFSWQorCisKK0xDX05VTUVSSUMKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OVU1FUklDICBjYXRlZ29yeS4KKyUKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgIjxVMDAyRT4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICI8VTAwMkM+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAzCislCitFTkQgTENfTlVNRVJJQworCisKK0xDX1RJTUUKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19USU1FIGNhdGVnb3J5LgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkaWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlL0phdmEKKyUKKyUgQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyAoJWEpCithYmRheSAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MjM+PFUwNjJEPjxVMDYyRj4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyNz48VTA2MkI+PFUwNjQ2PjxVMDY0QT48VTA2NDY+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MkI+PFUwNjQ0PjxVMDYyNz48VTA2MkI+PFUwNjI3PjxVMDYyMT4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyMz48VTA2MzE+PFUwNjI4PjxVMDYzOT48VTA2Mjc+PFUwNjIxPiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjJFPjxVMDY0NT48VTA2NEE+PFUwNjMzPiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjJDPjxVMDY0NT48VTA2Mzk+PFUwNjI5PiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjMzPjxVMDYyOD48VTA2MkE+IgorJQorJSBGdWxsIHdlZWtkYXkgbmFtZXMgKCVBKQorZGF5ICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjIzPjxVMDYyRD48VTA2MkY+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2Mjc+PFUwNjJCPjxVMDY0Nj48VTA2NEE+PFUwNjQ2PiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjJCPjxVMDY0ND48VTA2Mjc+PFUwNjJCPjxVMDYyNz48VTA2MjE+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MjM+PFUwNjMxPjxVMDYyOD48VTA2Mzk+PFUwNjI3PjxVMDYyMT4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyRT48VTA2NDU+PFUwNjRBPjxVMDYzMz4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyQz48VTA2NDU+PFUwNjM5PjxVMDYyOT4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYzMz48VTA2Mjg+PFUwNjJBPiIKKyUKKyUgQWJicmV2aWF0ZWQgbW9udGggbmFtZXMgKCViKQorYWJtb24gICAgICAgIjxVMDY0Mz48VTA2Mjc+PFUwNjQ2PjxVMDY0OD48VTA2NDY+PFUwMDIwPjxVMDYyNz48VTA2NDQ+LworPFUwNjJCPjxVMDYyNz48VTA2NDY+PFUwNjRBPiI7LworICAgICAgICAgICAgIjxVMDYzND48VTA2Mjg+PFUwNjI3PjxVMDYzNz4iOy8KKyAgICAgICAgICAgICI8VTA2MjI+PFUwNjMwPjxVMDYyNz48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjQ2PjxVMDY0QT48VTA2MzM+PFUwNjI3PjxVMDY0Nj4iOy8KKyAgICAgICAgICAgICI8VTA2NDY+PFUwNjQ4PjxVMDYyNz48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjJEPjxVMDYzMj48VTA2NEE+PFUwNjMxPjxVMDYyNz48VTA2NDY+IjsvCisgICAgICAgICAgICAiPFUwNjJBPjxVMDY0NT48VTA2NDg+PFUwNjMyPiI7LworICAgICAgICAgICAgIjxVMDYyMj48VTA2Mjg+IjsvCisgICAgICAgICAgICAiPFUwNjIzPjxVMDY0QT48VTA2NDQ+PFUwNjQ4PjxVMDY0ND4iOy8KKyAgICAgICAgICAgICI8VTA2MkE+PFUwNjM0PjxVMDYzMT48VTA2NEE+PFUwNjQ2PjxVMDAyMD48VTA2Mjc+PFUwNjQ0Pi8KKzxVMDYyMz48VTA2NDg+PFUwNjQ0PiI7LworICAgICAgICAgICAgIjxVMDYyQT48VTA2MzQ+PFUwNjMxPjxVMDY0QT48VTA2NDY+PFUwMDIwPjxVMDYyNz48VTA2NDQ+LworPFUwNjJCPjxVMDYyNz48VTA2NDY+PFUwNjRBPiI7LworICAgICAgICAgICAgIjxVMDY0Mz48VTA2Mjc+PFUwNjQ2PjxVMDY0OD48VTA2NDY+PFUwMDIwPjxVMDYyNz48VTA2NDQ+LworPFUwNjIzPjxVMDY0OD48VTA2NDQ+IgorJQorJSBGdWxsIG1vbnRoIG5hbWVzICglQikKK21vbiAgICAgICAgICI8VTA2NDM+PFUwNjI3PjxVMDY0Nj48VTA2NDg+PFUwNjQ2PjxVMDAyMD48VTA2Mjc+PFUwNjQ0Pi8KKzxVMDYyQj48VTA2Mjc+PFUwNjQ2PjxVMDY0QT4iOy8KKyAgICAgICAgICAgICI8VTA2MzQ+PFUwNjI4PjxVMDYyNz48VTA2Mzc+IjsvCisgICAgICAgICAgICAiPFUwNjIyPjxVMDYzMD48VTA2Mjc+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0Nj48VTA2NEE+PFUwNjMzPjxVMDYyNz48VTA2NDY+IjsvCisgICAgICAgICAgICAiPFUwNjQ2PjxVMDY0OD48VTA2Mjc+PFUwNjMxPjxVMDYyNz48VTA2NDY+IjsvCisgICAgICAgICAgICAiPFUwNjJEPjxVMDYzMj48VTA2NEE+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDYyQT48VTA2NDU+PFUwNjQ4PjxVMDYzMj4iOy8KKyAgICAgICAgICAgICI8VTA2MjI+PFUwNjI4PiI7LworICAgICAgICAgICAgIjxVMDYyMz48VTA2NEE+PFUwNjQ0PjxVMDY0OD48VTA2NDQ+IjsvCisgICAgICAgICAgICAiPFUwNjJBPjxVMDYzND48VTA2MzE+PFUwNjRBPjxVMDY0Nj48VTAwMjA+PFUwNjI3PjxVMDY0ND4vCis8VTA2MjM+PFUwNjQ4PjxVMDY0ND4iOy8KKyAgICAgICAgICAgICI8VTA2MkE+PFUwNjM0PjxVMDYzMT48VTA2NEE+PFUwNjQ2PjxVMDAyMD48VTA2Mjc+PFUwNjQ0Pi8KKzxVMDYyQj48VTA2Mjc+PFUwNjQ2PjxVMDY0QT4iOy8KKyAgICAgICAgICAgICI8VTA2NDM+PFUwNjI3PjxVMDY0Nj48VTA2NDg+PFUwNjQ2PjxVMDAyMD48VTA2Mjc+PFUwNjQ0Pi8KKzxVMDYyMz48VTA2NDg+PFUwNjQ0PiIKKyUKKyUgRXF1aXZhbGVudCBvZiBBTSBQTQorYW1fcG0gICAgICAgIjxVMDYzNT4iOyI8VTA2NDU+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uCislICVkICViLCAlWSVaICVJOiVNOiVTCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMkM+PFUwMDIwPjxVMDAyNT4vCis8VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+LworPFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNzA+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uCislICVkICViLCAlWQorZF9mbXQgICAgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKKyUKKyUgQXBwcm9wcmlhdGUgdGltZSByZXByZXNlbnRhdGlvbgorJSAlWiAlSTolTTolUwordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+LworPFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPiIKKyUKKyUgQXBwcm9wcmlhdGUgMTIgaCB0aW1lIHJlcHJlc2VudGF0aW9uICglcikKK3RfZm10X2FtcG0gICI8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPi8KKzxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbiAoZGF0ZSgxKSkgICAiJWEgJWIgJWUgJUg6JU06JVMgJVogJVkiCitkYXRlX2ZtdAkiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCisKK0xDX01FU1NBR0VTCitjb3B5ICJhcl9FRyIKK0VORCBMQ19NRVNTQUdFUworCisKK0xDX1BBUEVSCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislIExDX1BBUEVSIGNhdGVnb3J5CitoZWlnaHQgICAgICAyOTcKK3dpZHRoICAgICAgIDIxMAorCitFTkQgTENfUEFQRVIKKworCitMQ19OQU1FCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislIExDX05BTUUgY2F0ZWdvcnkuCislCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA3MD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDY3PiIKK25hbWVfZ2VuICAgICI8VTAwMkQ+PFUwMDczPjxVMDA2MT48VTAwNkU+IgorbmFtZV9tciAgICAgIjxVMDA0RD48VTAwNzI+PFUwMDJFPiIKK25hbWVfbXJzICAgICI8VTAwNEQ+PFUwMDcyPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9taXNzICAgIjxVMDA0RD48VTAwNjk+PFUwMDczPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9tcyAgICAgIjxVMDA0RD48VTAwNzM+PFUwMDJFPiIKKworRU5EIExDX05BTUUKKworCitMQ19BRERSRVNTCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislIExDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICI8VTAwMjU+PFUwMDdBPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDczPi8KKzxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA2NT48VTAwMjU+PFUwMDcyPiIKK2NvdW50cnlfYWIyICI8VTAwNTM+PFUwMDU5PiIKK2NvdW50cnlfYWIzICI8VTAwNTM+PFUwMDU5PjxVMDA1Mj4iCitjb3VudHJ5X251bSA3NjAKKworRU5EIExDX0FERFJFU1MKKworCitMQ19URUxFUEhPTkUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUKK3RlbF9pbnRfZm10ICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDNCPjxVMDAyNT48VTAwNjE+PFUwMDIwPi8KKzxVMDAzQj48VTAwMjU+PFUwMDZDPiIKK2ludF9wcmVmaXggICI8VTAwMzk+PFUwMDM2PjxVMDAzMz4iCisKK0VORCBMQ19URUxFUEhPTkUKKworCitMQ19NRUFTVVJFTUVOVAorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJQorbWVhc3VyZW1lbnQgMQorCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FyX1ROIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYXJfVE4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg5NWY3YwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FyX1ROCkBAIC0wLDAgKzEsMjA2IEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKyUgQXJhYmljIGxhbmd1YWdlIGxvY2FsZSBmb3IgVHVuaXNpYS4KKyUgQ29udHJpYnV0ZWQgYnkgS2VudGFyb2ggTm9qaSA8a25vamlAanAuaWJtLmNvbT4gYW5kCislIFRldHN1amkgT3JpdGEgPG9yaXRhQGpwLmlibS5jb20+LgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiQXJhYmljIGxhbmd1YWdlIGxvY2FsZSBmb3IgVHVuaXNpYSIKK3NvdXJjZSAgICAgIklCTSBHbG9iYWxpemF0aW9uIENlbnRlciBvZiBDb21wZXRlbmN5LCBZYW1hdG8gU29mdHdhcmUgTGFib3JhdG9yeSIKK2FkZHJlc3MgICAgIjE2MjMtMTQsIFNoaW1vdHN1cnVtYSwgWWFtYXRvLXNoaSwgS2FuYWdhd2Eta2VuLCAyNDItODUwMiwgSmFwYW4iCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiQXJhYmljIgordGVycml0b3J5ICAiVHVuaXNpYSIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDctMjAiCislCitjYXRlZ29yeSAgImFyX1ROOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImFyX1ROOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImFyX1ROOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiYXJfVE46MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJhcl9UTjoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImFyX1ROOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImFyX1ROOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImFyX1ROOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImFyX1ROOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiYXJfVE46MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJhcl9UTjoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJhcl9FRyIKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCisKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxCitjb3B5ICJpc28xNDY1MV90MSIKKworRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gdGhlIExDX01PTkVUQVJZIGNhdGVnb3J5LgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkaWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlL0phdmEKKyUKK2ludF9jdXJyX3N5bWJvbCAgICAgICAiPFUwMDU0PjxVMDA0RT48VTAwNDQ+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAiPFUwNjJGPjxVMDAyRT48VTA2MkE+PFUwMDJFPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgICAzCitwb3NpdGl2ZV9zaWduICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAzCitmcmFjX2RpZ2l0cyAgICAgICAgICAgMworcF9jc19wcmVjZWRlcyAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgMgorJQorRU5EIExDX01PTkVUQVJZCisKKworTENfTlVNRVJJQworJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX05VTUVSSUMgIGNhdGVnb3J5LgorJQorZGVjaW1hbF9wb2ludCAgICAgICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgIjxVMDAyQz4iCitncm91cGluZyAgICAgICAgICAgICAgIDMKKyUKK0VORCBMQ19OVU1FUklDCisKKworTENfVElNRQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX1RJTUUgY2F0ZWdvcnkuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRpZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUvSmF2YQorJQorJSBBYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWVzICglYSkKK2FiZGF5ICAgICAgICI8VTA2MkQ+IjsiPFUwNjQ2PiI7LworICAgICAgICAgICAgIjxVMDYyQj4iOyI8VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjJFPiI7IjxVMDYyQz4iOy8KKyAgICAgICAgICAgICI8VTA2MzM+IgorJQorJSBGdWxsIHdlZWtkYXkgbmFtZXMgKCVBKQorZGF5ICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjIzPjxVMDYyRD48VTA2MkY+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2Mjc+PFUwNjJCPjxVMDY0Nj48VTA2NEE+PFUwNjQ2PiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjJCPjxVMDY0ND48VTA2Mjc+PFUwNjJCPjxVMDYyNz48VTA2MjE+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MjM+PFUwNjMxPjxVMDYyOD48VTA2Mzk+PFUwNjI3PjxVMDYyMT4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyRT48VTA2NDU+PFUwNjRBPjxVMDYzMz4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyQz48VTA2NDU+PFUwNjM5PjxVMDYyOT4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYzMz48VTA2Mjg+PFUwNjJBPiIKKyUKKyUgQWJicmV2aWF0ZWQgbW9udGggbmFtZXMgKCViKQorYWJtb24gICAgICAgIjxVMDY0QT48VTA2NDY+PFUwNjI3PiI7IjxVMDY0MT48VTA2Mjg+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0NT48VTA2Mjc+PFUwNjMxPiI7IjxVMDYyMz48VTA2Mjg+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0NT48VTA2Mjc+PFUwNjRBPiI7IjxVMDY0QT48VTA2NDg+PFUwNjQ2PiI7LworICAgICAgICAgICAgIjxVMDY0QT48VTA2NDg+PFUwNjQ0PiI7IjxVMDYyMz48VTA2M0E+PFUwNjMzPiI7LworICAgICAgICAgICAgIjxVMDYzMz48VTA2Mjg+PFUwNjJBPiI7IjxVMDYyMz48VTA2NDM+PFUwNjJBPiI7LworICAgICAgICAgICAgIjxVMDY0Nj48VTA2NDg+PFUwNjQxPiI7IjxVMDYyRj48VTA2NEE+PFUwNjMzPiIKKyUKKyUgRnVsbCBtb250aCBuYW1lcyAoJUIpCittb24gICAgICAgICAiPFUwNjRBPjxVMDY0Nj48VTA2Mjc+PFUwNjRBPjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2NDE+PFUwNjI4PjxVMDYzMT48VTA2Mjc+PFUwNjRBPjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2NDU+PFUwNjI3PjxVMDYzMT48VTA2MzM+IjsvCisgICAgICAgICAgICAiPFUwNjIzPjxVMDYyOD48VTA2MzE+PFUwNjRBPjxVMDY0ND4iOy8KKyAgICAgICAgICAgICI8VTA2NDU+PFUwNjI3PjxVMDY0QT48VTA2NDg+IjsvCisgICAgICAgICAgICAiPFUwNjRBPjxVMDY0OD48VTA2NDY+PFUwNjRBPjxVMDY0OD4iOy8KKyAgICAgICAgICAgICI8VTA2NEE+PFUwNjQ4PjxVMDY0ND48VTA2NEE+PFUwNjQ4PiI7LworICAgICAgICAgICAgIjxVMDYyMz48VTA2M0E+PFUwNjMzPjxVMDYzNz48VTA2MzM+IjsvCisgICAgICAgICAgICAiPFUwNjMzPjxVMDYyOD48VTA2MkE+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjIzPjxVMDY0Mz48VTA2MkE+PFUwNjQ4PjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjQ2PjxVMDY0OD48VTA2NDE+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjJGPjxVMDY0QT48VTA2MzM+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IgorJQorJSBFcXVpdmFsZW50IG9mIEFNIFBNCithbV9wbSAgICAgICAiPFUwNjM1PiI7IjxVMDY0NT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJWQgJWIsICVZJVogJUk6JU06JVMKK2RfdF9mbXQgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyQz48VTAwMjA+PFUwMDI1Pi8KKzxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD4vCis8VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24KKyUgJWQgJWIsICVZCitkX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorJQorJSBBcHByb3ByaWF0ZSB0aW1lIHJlcHJlc2VudGF0aW9uCislICVaICVJOiVNOiVTCit0X2ZtdCAgICAgICAiPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD4vCis8VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+IgorJQorJSBBcHByb3ByaWF0ZSAxMiBoIHRpbWUgcmVwcmVzZW50YXRpb24gKCVyKQordF9mbXRfYW1wbSAgIjxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+LworPFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNzA+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uIChkYXRlKDEpKSAgICIlYSAlYiAlZSAlSDolTTolUyAlWiAlWSIKK2RhdGVfZm10CSI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKKworTENfTUVTU0FHRVMKK2NvcHkgImFyX0VHIgorRU5EIExDX01FU1NBR0VTCisKKworTENfUEFQRVIKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUgTENfUEFQRVIgY2F0ZWdvcnkKK2hlaWdodCAgICAgIDI5Nword2lkdGggICAgICAgMjEwCisKK0VORCBMQ19QQVBFUgorCisKK0xDX05BTUUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUgTENfTkFNRSBjYXRlZ29yeS4KKyUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDcwPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNjc+IgorbmFtZV9nZW4gICAgIjxVMDAyRD48VTAwNzM+PFUwMDYxPjxVMDA2RT4iCituYW1lX21yICAgICAiPFUwMDREPjxVMDA3Mj48VTAwMkU+IgorbmFtZV9tcnMgICAgIjxVMDA0RD48VTAwNzI+PFUwMDczPjxVMDAyRT4iCituYW1lX21pc3MgICAiPFUwMDREPjxVMDA2OT48VTAwNzM+PFUwMDczPjxVMDAyRT4iCituYW1lX21zICAgICAiPFUwMDREPjxVMDA3Mz48VTAwMkU+IgorCitFTkQgTENfTkFNRQorCisKK0xDX0FERFJFU1MKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUgTENfQUREUkVTUworcG9zdGFsX2ZtdCAgIjxVMDAyNT48VTAwN0E+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDU0PjxVMDAyNT48VTAwNzM+LworPFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDY1PjxVMDAyNT48VTAwNzI+IgorY291bnRyeV9hYjIgIjxVMDA1ND48VTAwNEU+IgorY291bnRyeV9hYjMgIjxVMDA1ND48VTAwNTU+PFUwMDRFPiIKK2NvdW50cnlfbnVtIDc4OAorCitFTkQgTENfQUREUkVTUworCisKK0xDX1RFTEVQSE9ORQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJQordGVsX2ludF9mbXQgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwM0I+PFUwMDI1PjxVMDA2MT48VTAwMjA+LworPFUwMDNCPjxVMDAyNT48VTAwNkM+IgoraW50X3ByZWZpeCAgIjxVMDAzMj48VTAwMzE+PFUwMDM2PiIKKworRU5EIExDX1RFTEVQSE9ORQorCisKK0xDX01FQVNVUkVNRU5UCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislCittZWFzdXJlbWVudCAxCisKK0VORCBMQ19NRUFTVVJFTUVOVApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYXJfWUUgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9hcl9ZRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzRhMmE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYXJfWUUKQEAgLTAsMCArMSwyMDYgQEAKK2NvbW1lbnRfY2hhciAgICAlCitlc2NhcGVfY2hhciAgICAgLworJSBBcmFiaWMgbGFuZ3VhZ2UgbG9jYWxlIGZvciBZZW1lbi4KKyUgQ29udHJpYnV0ZWQgYnkgS2VudGFyb2ggTm9qaSA8a25vamlAanAuaWJtLmNvbT4gYW5kCislIFRldHN1amkgT3JpdGEgPG9yaXRhQGpwLmlibS5jb20+LgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiQXJhYmljIGxhbmd1YWdlIGxvY2FsZSBmb3IgWWVtZW4iCitzb3VyY2UgICAgICJJQk0gR2xvYmFsaXphdGlvbiBDZW50ZXIgb2YgQ29tcGV0ZW5jeSwgWWFtYXRvIFNvZnR3YXJlIExhYm9yYXRvcnkiCithZGRyZXNzICAgICIxNjIzLTE0LCBTaGltb3RzdXJ1bWEsIFlhbWF0by1zaGksIEthbmFnYXdhLWtlbiwgMjQyLTg1MDIsIEphcGFuIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkFyYWJpYyIKK3RlcnJpdG9yeSAgIlllbWVuIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNy0yMCIKKyUKK2NhdGVnb3J5ICAiYXJfWUU6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiYXJfWUU6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiYXJfWUU6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJhcl9ZRToyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImFyX1lFOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiYXJfWUU6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiYXJfWUU6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiYXJfWUU6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiYXJfWUU6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJhcl9ZRToyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImFyX1lFOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImFyX0VHIgorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKKworJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEKK2NvcHkgImlzbzE0NjUxX3QxIgorCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiB0aGUgTENfTU9ORVRBUlkgY2F0ZWdvcnkuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRpZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUvSmF2YQorJQoraW50X2N1cnJfc3ltYm9sICAgICAgICI8VTAwNTk+PFUwMDQ1PjxVMDA1Mj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICI8VTA2MzE+PFUwMDJFPjxVMDY0QT48VTAwMkU+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgIDMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgIDMKK2ZyYWNfZGlnaXRzICAgICAgICAgICAzCitwX2NzX3ByZWNlZGVzICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAyCislCitFTkQgTENfTU9ORVRBUlkKKworCitMQ19OVU1FUklDCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTlVNRVJJQyAgY2F0ZWdvcnkuCislCitkZWNpbWFsX3BvaW50ICAgICAgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAiPFUwMDJDPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgMworJQorRU5EIExDX05VTUVSSUMKKworCitMQ19USU1FCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfVElNRSBjYXRlZ29yeS4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS9KYXZhCislCislIEFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZXMgKCVhKQorYWJkYXkgICAgICAgIjxVMDYyRD4iOyI8VTA2NDY+IjsvCisgICAgICAgICAgICAiPFUwNjJCPiI7IjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2MkU+IjsiPFUwNjJDPiI7LworICAgICAgICAgICAgIjxVMDYzMz4iCislCislIEZ1bGwgd2Vla2RheSBuYW1lcyAoJUEpCitkYXkgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MjM+PFUwNjJEPjxVMDYyRj4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyNz48VTA2MkI+PFUwNjQ2PjxVMDY0QT48VTA2NDY+IjsvCisgICAgICAgICAgICAiPFUwNjI3PjxVMDY0ND48VTA2MkI+PFUwNjQ0PjxVMDYyNz48VTA2MkI+PFUwNjI3PjxVMDYyMT4iOy8KKyAgICAgICAgICAgICI8VTA2Mjc+PFUwNjQ0PjxVMDYyMz48VTA2MzE+PFUwNjI4PjxVMDYzOT48VTA2Mjc+PFUwNjIxPiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjJFPjxVMDY0NT48VTA2NEE+PFUwNjMzPiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjJDPjxVMDY0NT48VTA2Mzk+PFUwNjI5PiI7LworICAgICAgICAgICAgIjxVMDYyNz48VTA2NDQ+PFUwNjMzPjxVMDYyOD48VTA2MkE+IgorJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCithYm1vbiAgICAgICAiPFUwNjRBPjxVMDY0Nj48VTA2Mjc+IjsiPFUwNjQxPjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjQ1PjxVMDYyNz48VTA2MzE+IjsiPFUwNjIzPjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICAgICAiPFUwNjQ1PjxVMDYyNz48VTA2NEE+IjsiPFUwNjRBPjxVMDY0OD48VTA2NDY+IjsvCisgICAgICAgICAgICAiPFUwNjRBPjxVMDY0OD48VTA2NDQ+IjsiPFUwNjIzPjxVMDYzQT48VTA2MzM+IjsvCisgICAgICAgICAgICAiPFUwNjMzPjxVMDYyOD48VTA2MkE+IjsiPFUwNjIzPjxVMDY0Mz48VTA2MkE+IjsvCisgICAgICAgICAgICAiPFUwNjQ2PjxVMDY0OD48VTA2NDE+IjsiPFUwNjJGPjxVMDY0QT48VTA2MzM+IgorJQorJSBGdWxsIG1vbnRoIG5hbWVzICglQikKK21vbiAgICAgICAgICI8VTA2NEE+PFUwNjQ2PjxVMDYyNz48VTA2NEE+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0MT48VTA2Mjg+PFUwNjMxPjxVMDYyNz48VTA2NEE+PFUwNjMxPiI7LworICAgICAgICAgICAgIjxVMDY0NT48VTA2Mjc+PFUwNjMxPjxVMDYzMz4iOy8KKyAgICAgICAgICAgICI8VTA2MjM+PFUwNjI4PjxVMDYzMT48VTA2NEE+PFUwNjQ0PiI7LworICAgICAgICAgICAgIjxVMDY0NT48VTA2Mjc+PFUwNjRBPjxVMDY0OD4iOy8KKyAgICAgICAgICAgICI8VTA2NEE+PFUwNjQ4PjxVMDY0Nj48VTA2NEE+PFUwNjQ4PiI7LworICAgICAgICAgICAgIjxVMDY0QT48VTA2NDg+PFUwNjQ0PjxVMDY0QT48VTA2NDg+IjsvCisgICAgICAgICAgICAiPFUwNjIzPjxVMDYzQT48VTA2MzM+PFUwNjM3PjxVMDYzMz4iOy8KKyAgICAgICAgICAgICI8VTA2MzM+PFUwNjI4PjxVMDYyQT48VTA2NDU+PFUwNjI4PjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2MjM+PFUwNjQzPjxVMDYyQT48VTA2NDg+PFUwNjI4PjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2NDY+PFUwNjQ4PjxVMDY0MT48VTA2NDU+PFUwNjI4PjxVMDYzMT4iOy8KKyAgICAgICAgICAgICI8VTA2MkY+PFUwNjRBPjxVMDYzMz48VTA2NDU+PFUwNjI4PjxVMDYzMT4iCislCislIEVxdWl2YWxlbnQgb2YgQU0gUE0KK2FtX3BtICAgICAgICI8VTA2MzU+IjsiPFUwNjQ1PiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbgorJSAlZCAlYiwgJVklWiAlSTolTTolUworZF90X2ZtdCAgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDJDPjxVMDAyMD48VTAwMjU+LworPFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPi8KKzxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbgorJSAlZCAlYiwgJVkKK2RfZm10ICAgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCislCislIEFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJVogJUk6JU06JVMKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPi8KKzxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4iCislCislIEFwcHJvcHJpYXRlIDEyIGggdGltZSByZXByZXNlbnRhdGlvbiAoJXIpCit0X2ZtdF9hbXBtICAiPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD4vCis8VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKGRhdGUoMSkpICAgIiVhICViICVlICVIOiVNOiVTICVaICVZIgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworCitMQ19NRVNTQUdFUworY29weSAiYXJfRUciCitFTkQgTENfTUVTU0FHRVMKKworCitMQ19QQVBFUgorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19QQVBFUiBjYXRlZ29yeQoraGVpZ2h0ICAgICAgMjk3Cit3aWR0aCAgICAgICAyMTAKKworRU5EIExDX1BBUEVSCisKKworTENfTkFNRQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19OQU1FIGNhdGVnb3J5LgorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNzA+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2Nz4iCituYW1lX2dlbiAgICAiPFUwMDJEPjxVMDA3Mz48VTAwNjE+PFUwMDZFPiIKK25hbWVfbXIgICAgICI8VTAwNEQ+PFUwMDcyPjxVMDAyRT4iCituYW1lX21ycyAgICAiPFUwMDREPjxVMDA3Mj48VTAwNzM+PFUwMDJFPiIKK25hbWVfbWlzcyAgICI8VTAwNEQ+PFUwMDY5PjxVMDA3Mz48VTAwNzM+PFUwMDJFPiIKK25hbWVfbXMgICAgICI8VTAwNEQ+PFUwMDczPjxVMDAyRT4iCisKK0VORCBMQ19OQU1FCisKKworTENfQUREUkVTUworJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19BRERSRVNTCitwb3N0YWxfZm10ICAiPFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3Mj4iCitjb3VudHJ5X2FiMiAiPFUwMDU5PjxVMDA0NT4iCitjb3VudHJ5X2FiMyAiPFUwMDU5PjxVMDA0NT48VTAwNEQ+IgorY291bnRyeV9udW0gODg3CisKK0VORCBMQ19BRERSRVNTCisKKworTENfVEVMRVBIT05FCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislCit0ZWxfaW50X2ZtdCAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAzQj48VTAwMjU+PFUwMDYxPjxVMDAyMD4vCis8VTAwM0I+PFUwMDI1PjxVMDA2Qz4iCitpbnRfcHJlZml4ICAiPFUwMDM5PjxVMDAzNj48VTAwMzc+IgorCitFTkQgTENfVEVMRVBIT05FCisKKworTENfTUVBU1VSRU1FTlQKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUKK21lYXN1cmVtZW50IDEKKworRU5EIExDX01FQVNVUkVNRU5UCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9hc19JTiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FzX0lOCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxOTE3ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9hc19JTgpAQCAtMCwwICsxLDczMSBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyIC8KKworJSBBc3NhbWVzZSBsb2NhbGUgZm9yIEluZGlhLgorCislJSUlJSUlJSUlJSUlCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAgIkFzc2FtZXNlIGxhbmd1YWdlIGxvY2FsZSBmb3IgSW5kaWEiCitzb3VyY2UgICAgICAiQW1pdGFraHlhIFBodWthbiwgUmVkIEhhdCIKK2FkZHJlc3MgICAgICIiCitjb250YWN0ICAgICAiIgorZW1haWwgICAgICAgImJ1Zy1nbGliY0BnbnUub3JnIgordGVsICAgICAgICAgIiIKK2ZheCAgICAgICAgICIiCitsYW5ndWFnZSAgICAiQXNzYW1lc2UiCit0ZXJyaXRvcnkgICAiSW5kaWEiCityZXZpc2lvbiAgICAiMS4wIgorZGF0ZSAgICAgICAgIjIwMDYtMDUtMjUiCislCitjYXRlZ29yeSAgImFzX0lOOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImFzX0lOOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImFzX0lOOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiYXNfSU46MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJhc19JTjoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImFzX0lOOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImFzX0lOOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImFzX0lOOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImFzX0lOOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiYXNfSU46MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJhc19JTjoyMDAwIjtMQ19URUxFUEhPTkUKK0VORCBMQ19JREVOVElGSUNBVElPTgorCislJSUlJSUlJSUlJSUlCitMQ19DVFlQRQorY29weSAiaTE4biIKKwordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKKyUlJSUlJSUlJSUlJSUKK0xDX0NPTExBVEUKKworJSBEZWZpbmUgY29sbGF0aW9uIHdlaWdodHMgYXMgc3ltYm9scworY29sbGF0aW5nLXN5bWJvbCA8WDAwMDE+Citjb2xsYXRpbmctc3ltYm9sIDxYMDAwNT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMDBEPgorY29sbGF0aW5nLXN5bWJvbCA8WDAwMUQ+Citjb2xsYXRpbmctc3ltYm9sIDxYMDAzMT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMDQxPgorY29sbGF0aW5nLXN5bWJvbCA8WDAwODY+Citjb2xsYXRpbmctc3ltYm9sIDxYMDA4Nz4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMDhGPgorY29sbGF0aW5nLXN5bWJvbCA8WDAwQzA+Citjb2xsYXRpbmctc3ltYm9sIDxYMDBENz4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMEQ4PgorY29sbGF0aW5nLXN5bWJvbCA8WDAwRTE+Citjb2xsYXRpbmctc3ltYm9sIDxYMDBFOT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMEY5PgorY29sbGF0aW5nLXN5bWJvbCA8WDA1MDc+Citjb2xsYXRpbmctc3ltYm9sIDxYMDUwOT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwNTBCPgorY29sbGF0aW5nLXN5bWJvbCA8WDA1MEQ+Citjb2xsYXRpbmctc3ltYm9sIDxYMDUwRj4KK2NvbGxhdGluZy1zeW1ib2wgPFgwNjAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDA3NjQ+Citjb2xsYXRpbmctc3ltYm9sIDxYMDc2QT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwNzgyPgorY29sbGF0aW5nLXN5bWJvbCA8WDA3OEU+Citjb2xsYXRpbmctc3ltYm9sIDxYMDdBQT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwN0MwPgorY29sbGF0aW5nLXN5bWJvbCA8WDA3QzY+Citjb2xsYXRpbmctc3ltYm9sIDxYMDdFRT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwN0Y2PgorY29sbGF0aW5nLXN5bWJvbCA8WDA4MEI+Citjb2xsYXRpbmctc3ltYm9sIDxYMDgzRj4KK2NvbGxhdGluZy1zeW1ib2wgPFgwODREPgorY29sbGF0aW5nLXN5bWJvbCA8WDA4NjE+Citjb2xsYXRpbmctc3ltYm9sIDxYMDg2Mz4KK2NvbGxhdGluZy1zeW1ib2wgPFgwODY1PgorY29sbGF0aW5nLXN5bWJvbCA8WDA4Njc+Citjb2xsYXRpbmctc3ltYm9sIDxYMDg2OT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwODZCPgorY29sbGF0aW5nLXN5bWJvbCA8WDA4REY+Citjb2xsYXRpbmctc3ltYm9sIDxYMDhFMT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwOEU5PgorY29sbGF0aW5nLXN5bWJvbCA8WDA4RUQ+Citjb2xsYXRpbmctc3ltYm9sIDxYMDhFRj4KK2NvbGxhdGluZy1zeW1ib2wgPFgwOEY1PgorY29sbGF0aW5nLXN5bWJvbCA8WDA4Rjc+Citjb2xsYXRpbmctc3ltYm9sIDxYMDlGNz4KK2NvbGxhdGluZy1zeW1ib2wgPFgwQkIzPgorY29sbGF0aW5nLXN5bWJvbCA8WDBCQkI+Citjb2xsYXRpbmctc3ltYm9sIDxYMEJCRD4KK2NvbGxhdGluZy1zeW1ib2wgPFgwQkJGPgorY29sbGF0aW5nLXN5bWJvbCA8WDBCQzM+Citjb2xsYXRpbmctc3ltYm9sIDxYMEJDOT4KK2NvbGxhdGluZy1zeW1ib2wgPFgxRkI1PgorY29sbGF0aW5nLXN5bWJvbCA8WDFGQjc+Citjb2xsYXRpbmctc3ltYm9sIDxYMjMzQz4KK2NvbGxhdGluZy1zeW1ib2wgPFgyMzQyPgorY29sbGF0aW5nLXN5bWJvbCA8WDIzNDQ+Citjb2xsYXRpbmctc3ltYm9sIDxYMjM3MD4KK2NvbGxhdGluZy1zeW1ib2wgPFgyMzcyPgorY29sbGF0aW5nLXN5bWJvbCA8WDIzNzQ+Citjb2xsYXRpbmctc3ltYm9sIDxYMjM3Nj4KK2NvbGxhdGluZy1zeW1ib2wgPFgyMzc4PgorY29sbGF0aW5nLXN5bWJvbCA8WDIzN0E+Citjb2xsYXRpbmctc3ltYm9sIDxYMjM3Qz4KK2NvbGxhdGluZy1zeW1ib2wgPFgyMzdFPgorY29sbGF0aW5nLXN5bWJvbCA8WDIzODA+Citjb2xsYXRpbmctc3ltYm9sIDxYMjM4Mj4KK2NvbGxhdGluZy1zeW1ib2wgPFgyNjAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDI4MDA+Citjb2xsYXRpbmctc3ltYm9sIDxYMkEwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFgyQzAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDJFMDA+Citjb2xsYXRpbmctc3ltYm9sIDxYMzAwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFgzMjAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDM0MDA+Citjb2xsYXRpbmctc3ltYm9sIDxYMzYwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFgzODAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDNBMDA+Citjb2xsYXRpbmctc3ltYm9sIDxYM0MwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFgzRTAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDQwMDA+Citjb2xsYXRpbmctc3ltYm9sIDxYNDIwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFg0NDAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDQ2MDA+Citjb2xsYXRpbmctc3ltYm9sIDxYNDgwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFg0QTAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDRDMDA+Citjb2xsYXRpbmctc3ltYm9sIDxYNEUwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFg1MDAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDUyMDA+Citjb2xsYXRpbmctc3ltYm9sIDxYNTQwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFg1NjAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDU4MDA+Citjb2xsYXRpbmctc3ltYm9sIDxYNjgyMD4KK2NvbGxhdGluZy1zeW1ib2wgPFg2ODIyPgorY29sbGF0aW5nLXN5bWJvbCA8WDY4MjQ+Citjb2xsYXRpbmctc3ltYm9sIDxYNjgyNj4KK2NvbGxhdGluZy1zeW1ib2wgPFg2ODI4PgorY29sbGF0aW5nLXN5bWJvbCA8WDY4MkE+Citjb2xsYXRpbmctc3ltYm9sIDxYNjgyQz4KK2NvbGxhdGluZy1zeW1ib2wgPFg2ODJFPgorY29sbGF0aW5nLXN5bWJvbCA8WDY4MzA+Citjb2xsYXRpbmctc3ltYm9sIDxYNjgzMj4KK2NvbGxhdGluZy1zeW1ib2wgPFg2ODM0PgorY29sbGF0aW5nLXN5bWJvbCA8WDY4MzY+Citjb2xsYXRpbmctc3ltYm9sIDxYNjgzOD4KK2NvbGxhdGluZy1zeW1ib2wgPFg2ODNBPgorY29sbGF0aW5nLXN5bWJvbCA8WDY4M0M+Citjb2xsYXRpbmctc3ltYm9sIDxYNjgzRT4KK2NvbGxhdGluZy1zeW1ib2wgPFg2ODQwPgorY29sbGF0aW5nLXN5bWJvbCA8WDY4NDI+Citjb2xsYXRpbmctc3ltYm9sIDxYNjg0ND4KK2NvbGxhdGluZy1zeW1ib2wgPFg2ODQ2PgorY29sbGF0aW5nLXN5bWJvbCA8WDY4NDg+Citjb2xsYXRpbmctc3ltYm9sIDxYNjg0QT4KK2NvbGxhdGluZy1zeW1ib2wgPFg2ODRDPgorY29sbGF0aW5nLXN5bWJvbCA8WDY4NEU+Citjb2xsYXRpbmctc3ltYm9sIDxYNjg1MD4KK2NvbGxhdGluZy1zeW1ib2wgPFg2ODUyPgorY29sbGF0aW5nLXN5bWJvbCA8WDY4NTQ+Citjb2xsYXRpbmctc3ltYm9sIDxYNjg1Nj4KK2NvbGxhdGluZy1zeW1ib2wgPFg2ODU4PgorY29sbGF0aW5nLXN5bWJvbCA8WDY4NUE+Citjb2xsYXRpbmctc3ltYm9sIDxYNjg1Qz4KK2NvbGxhdGluZy1zeW1ib2wgPFg2ODVFPgorY29sbGF0aW5nLXN5bWJvbCA8WDY4NjA+Citjb2xsYXRpbmctc3ltYm9sIDxYNjg2Mj4KK2NvbGxhdGluZy1zeW1ib2wgPFg2ODY0PgorY29sbGF0aW5nLXN5bWJvbCA8WDY4NjY+Citjb2xsYXRpbmctc3ltYm9sIDxYNjg2OD4KK2NvbGxhdGluZy1zeW1ib2wgPFg2ODZBPgorY29sbGF0aW5nLXN5bWJvbCA8WDY4NkM+Citjb2xsYXRpbmctc3ltYm9sIDxYNjg2RT4KK2NvbGxhdGluZy1zeW1ib2wgPFg2ODcwPgorY29sbGF0aW5nLXN5bWJvbCA8WDY4NzI+Citjb2xsYXRpbmctc3ltYm9sIDxYNjg3ND4KK2NvbGxhdGluZy1zeW1ib2wgPFg2ODc2PgorY29sbGF0aW5nLXN5bWJvbCA8WDY4Nzg+Citjb2xsYXRpbmctc3ltYm9sIDxYNjg3QT4KK2NvbGxhdGluZy1zeW1ib2wgPFg2ODdDPgorY29sbGF0aW5nLXN5bWJvbCA8WDY4N0U+Citjb2xsYXRpbmctc3ltYm9sIDxYNjg4MD4KK2NvbGxhdGluZy1zeW1ib2wgPFg2ODgyPgorY29sbGF0aW5nLXN5bWJvbCA8WDY4ODQ+Citjb2xsYXRpbmctc3ltYm9sIDxYNjg4Nj4KK2NvbGxhdGluZy1zeW1ib2wgPFg2ODg4PgorY29sbGF0aW5nLXN5bWJvbCA8WDY4OEE+Citjb2xsYXRpbmctc3ltYm9sIDxYNjg4Qz4KK2NvbGxhdGluZy1zeW1ib2wgPFg2ODhFPgorY29sbGF0aW5nLXN5bWJvbCA8WDY4OTA+Citjb2xsYXRpbmctc3ltYm9sIDxYNjg5Mj4KK2NvbGxhdGluZy1zeW1ib2wgPFg2ODk0PgorY29sbGF0aW5nLXN5bWJvbCA8WDY4OTY+Citjb2xsYXRpbmctc3ltYm9sIDxYNjg5OD4KK2NvbGxhdGluZy1zeW1ib2wgPFg2ODlBPgorY29sbGF0aW5nLXN5bWJvbCA8WDY4OUM+Citjb2xsYXRpbmctc3ltYm9sIDxYNjg5RT4KK2NvbGxhdGluZy1zeW1ib2wgPFg2QjIwPgorY29sbGF0aW5nLXN5bWJvbCA8WEUyRTk+CisKK29yZGVyX3N0YXJ0IGZvcndhcmQ7Zm9yd2FyZDtmb3J3YXJkO2ZvcndhcmQKKworCislIGNvbGxhdGlvbiB3ZWlnaHRzIGluIG9yZGVyCisKKzxYMDAwMT4KKzxYMDAwNT4KKzxYMDAwRD4KKzxYMDAxRD4KKzxYMDAzMT4KKzxYMDA0MT4KKzxYMDA4Nj4KKzxYMDA4Nz4KKzxYMDA4Rj4KKzxYMDBDMD4KKzxYMDBENz4KKzxYMDBEOD4KKzxYMDBFMT4KKzxYMDBFOT4KKzxYMDBGOT4KKzxYMDUwNz4KKzxYMDUwOT4KKzxYMDUwQj4KKzxYMDUwRD4KKzxYMDUwRj4KKzxYMDYwMD4KKzxYMDc2ND4KKzxYMDc2QT4KKzxYMDc4Mj4KKzxYMDc4RT4KKzxYMDdBQT4KKzxYMDdDMD4KKzxYMDdDNj4KKzxYMDdFRT4KKzxYMDdGNj4KKzxYMDgwQj4KKzxYMDgzRj4KKzxYMDg0RD4KKzxYMDg2MT4KKzxYMDg2Mz4KKzxYMDg2NT4KKzxYMDg2Nz4KKzxYMDg2OT4KKzxYMDg2Qj4KKzxYMDhERj4KKzxYMDhFMT4KKzxYMDhFOT4KKzxYMDhFRD4KKzxYMDhFRj4KKzxYMDhGNT4KKzxYMDhGNz4KKzxYMDlGNz4KKzxYMEJCMz4KKzxYMEJCQj4KKzxYMEJCRD4KKzxYMEJCRj4KKzxYMEJDMz4KKzxYMEJDOT4KKzxYMUZCNT4KKzxYMUZCNz4KKzxYMjMzQz4KKzxYMjM0Mj4KKzxYMjM0ND4KKzxYMjM3MD4KKzxYMjM3Mj4KKzxYMjM3ND4KKzxYMjM3Nj4KKzxYMjM3OD4KKzxYMjM3QT4KKzxYMjM3Qz4KKzxYMjM3RT4KKzxYMjM4MD4KKzxYMjM4Mj4KKzxYMjYwMD4KKzxYMjgwMD4KKzxYMkEwMD4KKzxYMkMwMD4KKzxYMkUwMD4KKzxYMzAwMD4KKzxYMzIwMD4KKzxYMzQwMD4KKzxYMzYwMD4KKzxYMzgwMD4KKzxYM0EwMD4KKzxYM0MwMD4KKzxYM0UwMD4KKzxYNDAwMD4KKzxYNDIwMD4KKzxYNDQwMD4KKzxYNDYwMD4KKzxYNDgwMD4KKzxYNEEwMD4KKzxYNEMwMD4KKzxYNEUwMD4KKzxYNTAwMD4KKzxYNTIwMD4KKzxYNTQwMD4KKzxYNTYwMD4KKzxYNTgwMD4KKzxYNjgyMD4KKzxYNjgyMj4KKzxYNjgyND4KKzxYNjgyNj4KKzxYNjgyOD4KKzxYNjgyQT4KKzxYNjgyQz4KKzxYNjgyRT4KKzxYNjgzMD4KKzxYNjgzMj4KKzxYNjgzND4KKzxYNjgzNj4KKzxYNjgzOD4KKzxYNjgzQT4KKzxYNjgzQz4KKzxYNjgzRT4KKzxYNjg0MD4KKzxYNjg0Mj4KKzxYNjg0ND4KKzxYNjg0Nj4KKzxYNjg0OD4KKzxYNjg0QT4KKzxYNjg0Qz4KKzxYNjg0RT4KKzxYNjg1MD4KKzxYNjg1Mj4KKzxYNjg1ND4KKzxYNjg1Nj4KKzxYNjg1OD4KKzxYNjg1QT4KKzxYNjg1Qz4KKzxYNjg1RT4KKzxYNjg2MD4KKzxYNjg2Mj4KKzxYNjg2ND4KKzxYNjg2Nj4KKzxYNjg2OD4KKzxYNjg2QT4KKzxYNjg2Qz4KKzxYNjg2RT4KKzxYNjg3MD4KKzxYNjg3Mj4KKzxYNjg3ND4KKzxYNjg3Nj4KKzxYNjg3OD4KKzxYNjg3QT4KKzxYNjg3Qz4KKzxYNjg3RT4KKzxYNjg4MD4KKzxYNjg4Mj4KKzxYNjg4ND4KKzxYNjg4Nj4KKzxYNjg4OD4KKzxYNjg4QT4KKzxYNjg4Qz4KKzxYNjg4RT4KKzxYNjg5MD4KKzxYNjg5Mj4KKzxYNjg5ND4KKzxYNjg5Nj4KKzxYNjg5OD4KKzxYNjg5QT4KKzxYNjg5Qz4KKzxYNjg5RT4KKzxYNkIyMD4KKzxYRTJFOT4KKworJSBhc3NpZ25tZW50IG9mIGNoYXJhY3RlcnMgdG8gd2VpZ2h0cworCis8VTAwMEY+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwRj4KKzxVMDAxRT4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFFPgorPFUwMDA4PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDg+Cis8VTAwMTc+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxNz4KKzxVMDAxRj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFGPgorPFUwMDEwPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTA+Cis8VTAwMDc+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwNz4KKzxVMDAxNj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE2PgorPFUyMDBEPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMEQ+Cis8VTAwMTU+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxNT4KKzxVMDAwNj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA2PgorPFUwMDAxPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDE+Cis8VTAwMUQ+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxRD4KKzxVMDAwRT4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBFPgorPFUwMDE4PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTg+Cis8VTIwMEM+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwQz4KKzxVMDAwND4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA0PgorPFUwMDEzPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTM+Cis8VTAwMUE+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxQT4KKzxVMDA3Rj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDdGPgorPFUwMDEyPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTI+Cis8VTAwMDM+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwMz4KKzxVMDAxQj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFCPgorPFUwMDExPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTE+Cis8VTAwMDI+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwMj4KKzxVMDAxQz4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFDPgorPFUwMDE0PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTQ+Cis8VTAwMTk+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxOT4KKzxVMDAwNT4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA1PgorPFUwMDAwPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDA+Cis8VTA5QkM+IElHTk9SRTsiPFgwMEQ3PjxYMDBFOT4iOyI8WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTA5ODE+IElHTk9SRTsiPFgwMEQ3PjxYMDBGOT4iOyI8WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTA5ODI+IElHTk9SRTsiPFgwMEQ4PjxYMDAwRD4iOyI8WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTA5ODM+IElHTk9SRTsiPFgwMEQ4PjxYMDAxRD4iOyI8WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTAwMDk+IDxYMDUwNz47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDBBPiA8WDA1MDk+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAwQj4gPFgwNTBCPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwMEM+IDxYMDUwRD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDBEPiA8WDA1MEY+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAyMD4gPFgwNjAwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNjA+IDxYMDc2ND47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDVFPiA8WDA3NkE+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA1Rj4gPFgwNzgyPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwMkQ+IDxYMDc4RT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDJDPiA8WDA3QUE+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAzQj4gPFgwN0MwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwM0E+IDxYMDdDNj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDIxPiA8WDA3RUU+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAzRj4gPFgwN0Y2Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwMkU+IDxYMDgwQj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDI3PiA8WDA4M0Y+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAyMj4gPFgwODREPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwMjg+IDxYMDg2MT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDI5PiA8WDA4NjM+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA1Qj4gPFgwODY1Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNUQ+IDxYMDg2Nz47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDdCPiA8WDA4Njk+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA3RD4gPFgwODZCPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNDA+IDxYMDhERj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDJBPiA8WDA4RTE+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAyRj4gPFgwOEU5Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNUM+IDxYMDhFRD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDI2PiA8WDA4RUY+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAyMz4gPFgwOEY1Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwMjU+IDxYMDhGNz47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwOUZBPiA8WDA5Rjc+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAyQj4gPFgwQkIzPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwM0M+IDxYMEJCQj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDNEPiA8WDBCQkQ+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAzRT4gPFgwQkJGPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwN0M+IDxYMEJDMz47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDdFPiA8WDBCQzk+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDlGOD4gPFgxRkI1Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5Rjk+IDxYMUZCNz47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDI0PiA8WDIzM0M+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDlGMj4gPFgyMzQyPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5RjM+IDxYMjM0ND47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDMwPiA8WDIzNzA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDlFNj4gPFgyMzcwPjsiPFgwMDA1PjxYMDBFMT48WDAwMzE+IjsiPFgwMDA1PjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMDAzMT4gPFgyMzcyPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5RTc+IDxYMjM3Mj47IjxYMDAwNT48WDAwRTE+PFgwMDMxPiI7IjxYMDAwNT48WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTA5RjQ+IDxYMjM3Mj47IjxYMDAwNT48WDAwRTE+PFgwMDQxPiI7IjxYMDAwNT48WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTAwMzI+IDxYMjM3ND47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwOUU4PiA8WDIzNzQ+OyI8WDAwMDU+PFgwMEUxPjxYMDAzMT4iOyI8WDAwMDU+PFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPFUwOUY1PiA8WDIzNzQ+OyI8WDAwMDU+PFgwMEUxPjxYMDA0MT4iOyI8WDAwMDU+PFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPFUwMDMzPiA8WDIzNzY+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDlFOT4gPFgyMzc2PjsiPFgwMDA1PjxYMDBFMT48WDAwMzE+IjsiPFgwMDA1PjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMDlGNj4gPFgyMzc2PjsiPFgwMDA1PjxYMDBFMT48WDAwNDE+IjsiPFgwMDA1PjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMDAzND4gPFgyMzc4Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5RUE+IDxYMjM3OD47IjxYMDAwNT48WDAwRTE+PFgwMDMxPiI7IjxYMDAwNT48WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTA5Rjc+IDxYMjM3OD47IjxYMDAwNT48WDAwRTE+PFgwMDQxPiI7IjxYMDAwNT48WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTAwMzU+IDxYMjM3QT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwOUVCPiA8WDIzN0E+OyI8WDAwMDU+PFgwMEUxPjxYMDAzMT4iOyI8WDAwMDU+PFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPFUwMDM2PiA8WDIzN0M+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDlFQz4gPFgyMzdDPjsiPFgwMDA1PjxYMDBFMT48WDAwMzE+IjsiPFgwMDA1PjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMDAzNz4gPFgyMzdFPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5RUQ+IDxYMjM3RT47IjxYMDAwNT48WDAwRTE+PFgwMDMxPiI7IjxYMDAwNT48WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTAwMzg+IDxYMjM4MD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwOUVFPiA8WDIzODA+OyI8WDAwMDU+PFgwMEUxPjxYMDAzMT4iOyI8WDAwMDU+PFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPFUwMDM5PiA8WDIzODI+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDlFRj4gPFgyMzgyPjsiPFgwMDA1PjxYMDBFMT48WDAwMzE+IjsiPFgwMDA1PjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMDA2MT4gPFgyNjAwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNDE+IDxYMjYwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMEU2PiAiPFgyNjAwPjxYMkUwMD4iOyI8WDAwODc+PFgwMDA1PiI7IjxYMDAwNT48WDAwMDU+IjtJR05PUkUKKzxVMDBDNj4gIjxYMjYwMD48WDJFMDA+IjsiPFgwMDg3PjxYMDAwNT4iOyI8WDAwODY+PFgwMDA1PiI7SUdOT1JFCis8VTAwNjI+IDxYMjgwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDQyPiA8WDI4MDA+OzxYMDAwNT47PFgwMDhGPjtJR05PUkUKKzxVMDA2Mz4gPFgyQTAwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNDM+IDxYMkEwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDY0PiA8WDJDMDA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA0ND4gPFgyQzAwPjs8WDAwMDU+OzxYMDA4Rj47SUdOT1JFCis8VTAwNjU+IDxYMkUwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDQ1PiA8WDJFMDA+OzxYMDAwNT47PFgwMDhGPjtJR05PUkUKKzxVMDA2Nj4gPFgzMDAwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNDY+IDxYMzAwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDY3PiA8WDMyMDA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA0Nz4gPFgzMjAwPjs8WDAwMDU+OzxYMDA4Rj47SUdOT1JFCis8VTAwNjg+IDxYMzQwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDQ4PiA8WDM0MDA+OzxYMDAwNT47PFgwMDhGPjtJR05PUkUKKzxVMDA2OT4gPFgzNjAwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNDk+IDxYMzYwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDZBPiA8WDM4MDA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA0QT4gPFgzODAwPjs8WDAwMDU+OzxYMDA4Rj47SUdOT1JFCis8VTAwNkI+IDxYM0EwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDRCPiA8WDNBMDA+OzxYMDAwNT47PFgwMDhGPjtJR05PUkUKKzxVMDA2Qz4gPFgzQzAwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNEM+IDxYM0MwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDZEPiA8WDNFMDA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA0RD4gPFgzRTAwPjs8WDAwMDU+OzxYMDA4Rj47SUdOT1JFCis8VTAwNkU+IDxYNDAwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDRFPiA8WDQwMDA+OzxYMDAwNT47PFgwMDhGPjtJR05PUkUKKzxVMDA2Rj4gPFg0MjAwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNEY+IDxYNDIwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDcwPiA8WDQ0MDA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA1MD4gPFg0NDAwPjs8WDAwMDU+OzxYMDA4Rj47SUdOT1JFCis8VTAwNzE+IDxYNDYwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDUxPiA8WDQ2MDA+OzxYMDAwNT47PFgwMDhGPjtJR05PUkUKKzxVMDA3Mj4gPFg0ODAwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNTI+IDxYNDgwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDczPiA8WDRBMDA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA1Mz4gPFg0QTAwPjs8WDAwMDU+OzxYMDA4Rj47SUdOT1JFCis8VTAwNzQ+IDxYNEMwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDU0PiA8WDRDMDA+OzxYMDAwNT47PFgwMDhGPjtJR05PUkUKKzxVMDA3NT4gPFg0RTAwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNTU+IDxYNEUwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDc2PiA8WDUwMDA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA1Nj4gPFg1MDAwPjs8WDAwMDU+OzxYMDA4Rj47SUdOT1JFCis8VTAwNzc+IDxYNTIwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDU3PiA8WDUyMDA+OzxYMDAwNT47PFgwMDhGPjtJR05PUkUKKzxVMDA3OD4gPFg1NDAwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNTg+IDxYNTQwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDc5PiA8WDU2MDA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA1OT4gPFg1NjAwPjs8WDAwMDU+OzxYMDA4Rj47SUdOT1JFCis8VTAwN0E+IDxYNTgwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDVBPiA8WDU4MDA+OzxYMDAwNT47PFgwMDhGPjtJR05PUkUKKzxVMDk4NT4gPFg2ODIwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5ODY+IDxYNjgyMj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwOTg3PiA8WDY4MjQ+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDk4OD4gPFg2ODI2Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5ODk+IDxYNjgyOD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwOThBPiA8WDY4MkE+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDk4Qj4gPFg2ODJDPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5RTA+IDxYNjgyRT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwOThDPiA8WDY4MzA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDlFMT4gPFg2ODMyPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5OEY+IDxYNjgzND47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwOTkwPiA8WDY4MzY+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDk5Mz4gPFg2ODM4Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5OTQ+IDxYNjgzQT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwOTk1PiA8WDY4M0M+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDk5Nj4gPFg2ODNFPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5OTc+IDxYNjg0MD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwOTk4PiA8WDY4NDI+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDk5OT4gPFg2ODQ0Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5OUE+IDxYNjg0Nj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwOTlCPiA8WDY4NDg+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDk5Qz4gPFg2ODRBPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5OUQ+IDxYNjg0Qz47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwOTlFPiA8WDY4NEU+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDk5Rj4gPFg2ODUwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5QTA+IDxYNjg1Mj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwOUExPiA8WDY4NTQ+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDlEQz4gPFg2ODU0PjsiPFgwMDA1PjxYMDBENz48WDAwRTk+IjsiPFgwMDA1PjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMDlBMj4gPFg2ODU2Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5REQ+IDxYNjg1Nj47IjxYMDAwNT48WDAwRDc+PFgwMEU5PiI7IjxYMDAwNT48WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTA5QTM+IDxYNjg1OD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwOUE0PiA8WDY4NUE+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDlBNT4gPFg2ODVDPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5QTY+IDxYNjg1RT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwOUE3PiA8WDY4NjA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDlBOD4gPFg2ODYyPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5QUE+IDxYNjg2ND47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwOUFCPiA8WDY4NjY+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDlBQz4gPFg2ODY4Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5QUQ+IDxYNjg2QT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwOUFFPiA8WDY4NkM+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDlBRj4gPFg2ODZFPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5REY+IDxYNjg2RT47IjxYMDAwNT48WDAwRDc+PFgwMEU5PiI7IjxYMDAwNT48WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTA5QjA+IDxYNjg3MD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwOUYwPiA8WDY4NzI+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDlCMj4gPFg2ODc0Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5RjE+IDxYNjg3Nj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwOUI2PiA8WDY4Nzg+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDlCNz4gPFg2ODdBPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5Qjg+IDxYNjg3Qz47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwOUI5PiA8WDY4N0U+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKyUgRklYTUUgPFUwOUJEPiA8WDY4ODA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKyUgICAgIDxVMDlCRD4gKEJlbmdhbGkgc2lnbiBhdmFncmFoYSkgaXMgZGVmaW5lZCBmcm9tIFVuaWNvZGU0LjAKKzxVMDlCRT4gPFg2ODgyPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5QkY+IDxYNjg4ND47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwOUMwPiA8WDY4ODY+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDlDMT4gPFg2ODg4Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5QzI+IDxYNjg4QT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwOUMzPiA8WDY4OEM+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDlDND4gPFg2ODhFPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5RTI+IDxYNjg5MD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwOUUzPiA8WDY4OTI+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDlDNz4gPFg2ODk0Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5Qzg+IDxYNjg5Nj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwOUNCPiA8WDY4OTg+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDlDQz4gPFg2ODlBPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTA5Q0Q+IDxYNjg5Qz47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwOUQ3PiA8WDY4OUU+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDlDRT4gIjxYRTJFOT48WDZCMjA+Ijs8WDAwMDU+OyI8WDAwMDU+PFgwMEMwPiI7SUdOT1JFCitVTkRFRklORUQgSUdOT1JFO0lHTk9SRTtJR05PUkU7JS4uLgorCitvcmRlcl9lbmQKK0VORCBMQ19DT0xMQVRFCisKKyUlJSUlJSUlJSUlJSUKK0xDX05VTUVSSUMKK2NvcHkgImVuX0lOIgorRU5EIExDX05VTUVSSUMKKworJSUlJSUlJSUlJSUlJQorTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgICAiPFUwMDQ5PjxVMDA0RT48VTAwNTI+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAiPFUwOTlGPjxVMDk5NT48VTA5QkU+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgIDM7MgorcG9zaXRpdmVfc2lnbiAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgIDEKK2ludF9wX2NzX3ByZWNlZGVzICAgICAxCitpbnRfcF9zZXBfYnlfc3BhY2UgICAgMQoraW50X25fY3NfcHJlY2VkZXMgICAgIDEKK2ludF9uX3NlcF9ieV9zcGFjZSAgICAxCitpbnRfcF9zaWduX3Bvc24gICAgICAgMQoraW50X25fc2lnbl9wb3NuICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCislJSUlJSUlJSUlJSUlCitMQ19USU1FCithYmRheSAgICI8VTA5QTY+PFUwOUM3PjxVMDk5Mz4iOy8KKyAgICAgICAgIjxVMDlCOD48VTA5Q0I+PFUwOUFFPiI7LworICAgICAgICAiPFUwOUFFPjxVMDk5OT48VTA5Q0Q+PFUwOTk3PjxVMDlCMj4iOy8KKyAgICAgICAgIjxVMDlBQz48VTA5QzE+PFUwOUE3PiI7LworICAgICAgICAiPFUwOUFDPjxVMDlDMz48VTA5Qjk+PFUwOUI3PjxVMDlDRD48VTA5QUE+PFUwOUE0PjxVMDlCRj4iOy8KKyAgICAgICAgIjxVMDlCNj48VTA5QzE+PFUwOTk1PjxVMDlDRD48VTA5RjA+IjsvCisgICAgICAgICI8VTA5QjY+PFUwOUE4PjxVMDlCRj4iCitkYXkgICAgICI8VTA5QTY+PFUwOUM3PjxVMDk5Mz48VTA5QUM+PFUwOUJFPjxVMDlGMD4iOy8KKyAgICAgICAgIjxVMDlCOD48VTA5Q0I+PFUwOUFFPjxVMDlBQz48VTA5QkU+PFUwOUYwPiI7LworICAgICAgICAiPFUwOUFFPjxVMDk5OT48VTA5Q0Q+PFUwOTk3PjxVMDlCMj48VTA5QUM+PFUwOUJFPjxVMDlGMD4iOy8KKyAgICAgICAgIjxVMDlBQz48VTA5QzE+PFUwOUE3PjxVMDlBQz48VTA5QkU+PFUwOUYwPiI7LworICAgICAgICAiPFUwOUFDPjxVMDlDMz48VTA5Qjk+PFUwOUI3PjxVMDlDRD48VTA5QUE+PFUwOUE0PjxVMDlCRj48VTA5QUM+PFUwOUJFPjxVMDlGMD4iOy8KKyAgICAgICAgIjxVMDlCNj48VTA5QzE+PFUwOTk1PjxVMDlDRD48VTA5RjA+PFUwOUFDPjxVMDlCRT48VTA5RjA+IjsvCisgICAgICAgICI8VTA5QjY+PFUwOUE4PjxVMDlCRj48VTA5QUM+PFUwOUJFPjxVMDlGMD4iCithYm1vbiAgICI8VTA5OUM+PFUwOUJFPjxVMDlBOD48VTA5QzE+PFUwOUYxPjxVMDlCRT48VTA5RjA+PFUwOUMwPiI7LworICAgICAgICAiPFUwOUFCPjxVMDlDNz48VTA5QUM+PFUwOUNEPjxVMDlGMD48VTA5QzE+PFUwOUYxPjxVMDlCRT48VTA5RjA+PFUwOUMwPiI7LworICAgICAgICAiPFUwOUFFPjxVMDlCRT48VTA5RjA+PFUwOUNEPjxVMDk5QT4iOy8KKyAgICAgICAgIjxVMDk4Rj48VTA5QUE+PFUwOUNEPjxVMDlGMD48VTA5QkY+PFUwOUIyPiI7LworICAgICAgICAiPFUwOUFFPjxVMDlDNz4iOy8KKyAgICAgICAgIjxVMDk5Qz48VTA5QzE+PFUwOUE4PiI7LworICAgICAgICAiPFUwOTlDPjxVMDlDMT48VTA5QjI+PFUwOUJFPjxVMDk4Nz4iOy8KKyAgICAgICAgIjxVMDk4Nj48VTA5OTc+IjsvCisgICAgICAgICI8VTA5OUE+PFUwOUM3PjxVMDlBQT48VTA5Q0Q+PFUwOUE0PjxVMDlDNz48VTA5QUU+PFUwOUNEPjxVMDlBQz48VTA5RjA+IjsvCisgICAgICAgICI8VTA5ODU+PFUwOTk1PjxVMDlDRD48VTA5OUY+PFUwOUNCPjxVMDlBQz48VTA5RjA+IjsvCisgICAgICAgICI8VTA5QTg+PFUwOUFEPjxVMDlDNz48VTA5QUU+PFUwOUNEPjxVMDlBQz48VTA5RjA+IjsvCisgICAgICAgICI8VTA5QTE+PFUwOUJGPjxVMDk5QT48VTA5Qzc+PFUwOUFFPjxVMDlDRD48VTA5QUM+PFUwOUYwPiIKK21vbiAgICAgIjxVMDk5Qz48VTA5QkU+PFUwOUE4PjxVMDlDMT48VTA5RjE+PFUwOUJFPjxVMDlGMD48VTA5QzA+IjsvCisgICAgICAgICI8VTA5QUI+PFUwOUM3PjxVMDlBQz48VTA5Q0Q+PFUwOUYwPjxVMDlDMT48VTA5RjE+PFUwOUJFPjxVMDlGMD48VTA5QzA+IjsvCisgICAgICAgICI8VTA5QUU+PFUwOUJFPjxVMDlGMD48VTA5Q0Q+PFUwOTlBPiI7LworICAgICAgICAiPFUwOThGPjxVMDlBQT48VTA5Q0Q+PFUwOUYwPjxVMDlCRj48VTA5QjI+IjsvCisgICAgICAgICI8VTA5QUU+PFUwOUM3PiI7LworICAgICAgICAiPFUwOTlDPjxVMDlDMT48VTA5QTg+IjsvCisgICAgICAgICI8VTA5OUM+PFUwOUMxPjxVMDlCMj48VTA5QkU+PFUwOTg3PiI7LworICAgICAgICAiPFUwOTg2PjxVMDk5Nz48VTA5Qjc+PFUwOUNEPjxVMDk5Rj4iOy8KKyAgICAgICAgIjxVMDk5QT48VTA5Qzc+PFUwOUFBPjxVMDlDRD48VTA5QTQ+PFUwOUM3PjxVMDlBRT48VTA5Q0Q+PFUwOUFDPjxVMDlGMD4iOy8KKyAgICAgICAgIjxVMDk4NT48VTA5OTU+PFUwOUNEPjxVMDk5Rj48VTA5Q0I+PFUwOUFDPjxVMDlGMD4iOy8KKyAgICAgICAgIjxVMDlBOD48VTA5QUQ+PFUwOUM3PjxVMDlBRT48VTA5Q0Q+PFUwOUFDPjxVMDlGMD4iOy8KKyAgICAgICAgIjxVMDlBMT48VTA5QkY+PFUwOTlBPjxVMDlDNz48VTA5QUU+PFUwOUNEPjxVMDlBQz48VTA5RjA+IgorJSBkX2ZtdCAgIiVlLSVtLSVZIgorZF9mbXQgICAgIjxVMDAyNT48VTAwNjU+PFUwMDJEPjxVMDAyNT48VTAwNkQ+PFUwMDJEPjxVMDAyNT48VTAwNTk+IgorJSB0X2ZtdCAgIiVJLiVNLiVTICVwIgordF9mbXQgICAgIjxVMDAyNT48VTAwNDk+PFUwMDJFPjxVMDAyNT48VTAwNEQ+PFUwMDJFPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNzA+IgorJSBkX3RfZm10IiVlICVCLCAlWSAlSS4lTS4lUyAlcCAlWiIKK2RfdF9mbXQgICI8VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDQyPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwMkU+PFUwMDI1PjxVMDA0RD48VTAwMkU+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCithbV9wbSAgICAiPFUwOUFBPjxVMDlDMj48VTA5RjA+PFUwOUNEPjxVMDlBQz48VTA5Q0Q+PFUwOUFDPjxVMDlCRT48VTA5Qjk+PFUwOUNEPjxVMDlBOD4iOyI8VTA5ODU+PFUwOUFBPjxVMDlGMD48VTA5QkU+PFUwOUI5PjxVMDlDRD48VTA5QTg+IgorJSB0X2ZtdF9hbXBtICAiJUkuJU0uJVMgJXAiCit0X2ZtdF9hbXBtICAiPFUwMDI1PjxVMDA0OT48VTAwMkU+PFUwMDI1PjxVMDA0RD48VTAwMkU+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD4iCitFTkQgTENfVElNRQorCislJSUlJSUlJSUlJSUlCitMQ19NRVNTQUdFUworeWVzc3RyICAgIjxVMDlCOT48VTA5REY+Igorbm9zdHIgICAgIjxVMDlBOD48VTA5Qjk+PFUwOURGPiIKK3llc2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA3OT48VTAwNTk+PFUwOUI5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwOUE4PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCislJSUlJSUlJSUlJSUlCitMQ19QQVBFUgorY29weSAiaGlfSU4iCitFTkQgTENfUEFQRVIKKworJSUlJSUlJSUlJSUlJQorTENfTkFNRQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19OQU1FIGNhdGVnb3J5LgorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNzA+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2Nz4iCituYW1lX2dlbiAgICAiIgorbmFtZV9tciAgICAgIjxVMDlCNj48VTA5Q0Q+PFUwOUYwPjxVMDlDMD4iCituYW1lX21ycyAgICAiPFUwOUI2PjxVMDlDRD48VTA5RjA+PFUwOUMwPjxVMDlBRT48VTA5QTQ+PFUwOUMwPiIKK25hbWVfbWlzcyAgICI8VTA5OTU+PFUwOUMxPjxVMDlBRT48VTA5QkU+PFUwOUYwPjxVMDlDMD4iCituYW1lX21zICAgICAiPFUwOTk1PjxVMDlDMT48VTA5QUU+PFUwOUJFPjxVMDlGMD48VTA5QzA+IgorRU5EIExDX05BTUUKKworJSUlJSUlJSUlJSUlJQorTENfQUREUkVTUworJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19BRERSRVNTCitwb3N0YWxfZm10ICAiPFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3Mj4iCitFTkQgTENfQUREUkVTUworCislJSUlJSUlJSUlJSUlCitMQ19URUxFUEhPTkUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKK3RlbF9pbnRfZm10ICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDNCPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAzQj48VTAwMjU+PFUwMDZDPiIKK2ludF9wcmVmaXggICI8VTAwMzk+PFUwMDMxPiIKK2ludF9zZWxlY3QgICI8VTAwMzA+PFUwMDMwPiIKK0VORCBMQ19URUxFUEhPTkUKKworJSUlJSUlJSUlJSUlJQorTENfTUVBU1VSRU1FTlQKK2NvcHkgImhpX0lOIgorRU5EIExDX01FQVNVUkVNRU5UCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9hc3RfRVMgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9hc3RfRVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ5NTcxYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2FzdF9FUwpAQCAtMCwwICsxLDEzMiBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIEFzdHVyaWFuIExhbmd1YWdlIExvY2FsZSBmb3IgU3BhaW4KKyUgU291cmNlOgorJSBBZGRyZXNzOgorJSBDb250YWN0OiBKb3JkaSBNYWxsYWNoCislIEVtYWlsOiBqb3JkaUBnbnUub3JnCislIExhbmd1YWdlOiBhc3QKKyUgVGVycml0b3J5OiBFUworJSBSZXZpc2lvbjogMS4wCislIERhdGU6IDIwMDUtMDgtMjYKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUKKyUgVGhpcyBmaWxlIGlzIHVuZGVyIHRoZQorJSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyUgQmFzZWQgaW4gdGhlIGFuX0VTIExvY2FsZQorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiQXN0dXJpYW4gbG9jYWxlIGZvciBTcGFpbiIKK3NvdXJjZSAgICAgIiIKK2FkZHJlc3MgICAgIiIKK2NvbnRhY3QgICAgIkpvcmRpIE1hbGxhY2giCitlbWFpbCAgICAgICJqb3JkaUBnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiQXN0dXJpYW4iCit0ZXJyaXRvcnkgICJTcGFpbiIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDUtMDgtMjYiCislCitjYXRlZ29yeSAgImFzdF9FUzoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJhc3RfRVM6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiYXN0X0VTOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiYXN0X0VTOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiYXN0X0VTOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiYXN0X0VTOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImFzdF9FUzoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJhc3RfRVM6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiYXN0X0VTOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiYXN0X0VTOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiYXN0X0VTOjIwMDAiO0xDX1RFTEVQSE9ORQorRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKK2NvcHkgImVzX0VTIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImVzX0VTIgorRU5EIExDX0NUWVBFCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA3Mz48VTAwNTM+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitjb3B5ICJlc19FUyIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJlc19FUyIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKKyUgRGF5cyBvZiB3ZWVrIGluIEFzdHVyaWFuCislIGxsdW5lcywgbWFydGVzLCBtacOpcmNvbGVzLCB4dWV2ZXMsIHZpZW5yZXMsIHPDoWJhZHUsIGRvbWluZ3UKKyUgbGx1LCBtYXIsIG1pw6ksIHh1ZSwgdmllLCBzw6FiLCBkb20KK2FiZGF5ICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPiI7IjxVMDA2Qz48VTAwNkM+PFUwMDc1PiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsiPFUwMDZEPjxVMDA2OT48VTAwRTk+IjsvCisgICAgICAgICI8VTAwNzg+PFUwMDc1PjxVMDA2NT4iOyI8VTAwNzY+PFUwMDY5PjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwRTE+PFUwMDYyPiIKK2RheSAgICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPjxVMDA2OT48VTAwNkU+PFUwMDY3PjxVMDA3NT4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwNkM+PFUwMDc1PjxVMDA2RT48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMDc0PjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDY5PjxVMDBFOT48VTAwNzI+PFUwMDYzPjxVMDA2Rj48VTAwNkM+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA3OD48VTAwNzU+PFUwMDY1PjxVMDA3Nj48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDc2PjxVMDA2OT48VTAwNjU+PFUwMDZFPjxVMDA3Mj48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDczPjxVMDBFMT48VTAwNjI+PFUwMDYxPjxVMDA2ND48VTAwNzU+IgorJSBNb250aCBuYW1lcyBpbiBBc3R1cmlhbgorJSB4aW5lcnUsIGZlYnJlcnUsIG1hcnp1LCBhYnJpbCwgbWF5dSwgeHVudSwgeHVuZXR1LCBhZ29zdHUsIHNldGllbWJyZSwKKyUgb2Nob2JyZSwgcGF5YXJlcywgYXZpZW50dQorJSBBYmJyZXZpYXRlZCBmb3JtIG9mIHh1bmV0dSBpcyAieG50IgorYWJtb24gICAiPFUwMDc4PjxVMDA2OT48VTAwNkU+IjsiPFUwMDY2PjxVMDA2NT48VTAwNjI+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNjE+PFUwMDYyPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDc5PiI7IjxVMDA3OD48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDc4PjxVMDA2RT48VTAwNzQ+IjsiPFUwMDYxPjxVMDA2Nz48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3ND4iOyI8VTAwNkY+PFUwMDYzPjxVMDA2OD4iOy8KKyAgICAgICAgIjxVMDA3MD48VTAwNjE+PFUwMDc5PiI7IjxVMDA2MT48VTAwNzY+PFUwMDY5PiIKK21vbiAgICAgIjxVMDA3OD48VTAwNjk+PFUwMDZFPjxVMDA2NT48VTAwNzI+PFUwMDc1PiI7LworICAgICAgICAiPFUwMDY2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA2NT48VTAwNzI+PFUwMDc1PiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMDdBPjxVMDA3NT4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNjI+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3OT48VTAwNzU+IjsvCisgICAgICAgICI8VTAwNzg+PFUwMDc1PjxVMDA2RT48VTAwNzU+IjsvCisgICAgICAgICI8VTAwNzg+PFUwMDc1PjxVMDA2RT48VTAwNjU+PFUwMDc0PjxVMDA3NT4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNjc+PFUwMDZGPjxVMDA3Mz48VTAwNzQ+PFUwMDc1PiI7LworICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNzQ+PFUwMDY5PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkY+PFUwMDYzPjxVMDA2OD48VTAwNkY+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNzA+PFUwMDYxPjxVMDA3OT48VTAwNjE+PFUwMDcyPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDc2PjxVMDA2OT48VTAwNjU+PFUwMDZFPjxVMDA3ND48VTAwNzU+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAiIjsiIgordF9mbXRfYW1wbSAiIgorZGF0ZV9mbXQgICAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworTENfUEFQRVIKK2NvcHkgImVzX0VTIgorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQorY29weSAiZXNfRVMiCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJlc19FUyIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCitjb3B5ICJlc19FUyIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK2NvcHkgImVzX0VTIgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2F6X0FaIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYXpfQVoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRlMzc3OQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2F6X0FaCkBAIC0wLDAgKzEsMzA2IEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgQXplcmkgTGFuZ3VhZ2UgTG9jYWxlIGZvciBBemVyYmFpamFuIChsYXRpbikKKyUgU291cmNlOgorJSBDb250YWN0OiBQYWJsbyBTYXJhdHhhZ2EKKyUgRW1haWw6IDxwYWJsb0BtYW5kcmFrZXNvZnQuY29tPgorJSBMYW5ndWFnZTogYXoKKyUgVGVycml0b3J5OiBBWgorJSBSZXZpc2lvbjogMC42CislIERhdGU6IDIwMDMtMTItMDYKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogVVRGLTgKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICJBemVyaSBsYW5ndWFnZSBsb2NhbGUgZm9yIEF6ZXJiYWlqYW4gKGxhdGluKSIKK3NvdXJjZSAiIgorYWRkcmVzcyAiIgorY29udGFjdCAiUGFibG8gU2FyYXR4YWdhIgorZW1haWwgInBhYmxvQG1hbmRyYWtlc29mdC5jb20iCit0ZWwgIiIKK2ZheCAiIgorbGFuZ3VhZ2UgIkF6ZXJpIgordGVycml0b3J5ICJBemVyYmFpamFuIgorcmV2aXNpb24gIjAuNCIKK2RhdGUgIjIwMDEtMDEtMjYiCisKK2NhdGVnb3J5IGF6X0FaOjIwMDA7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5IGF6X0FaOjIwMDA7TENfQ1RZUEUKK2NhdGVnb3J5IGF6X0FaOjIwMDA7TENfQ09MTEFURQorY2F0ZWdvcnkgYXpfQVo6MjAwMDtMQ19USU1FCitjYXRlZ29yeSBhel9BWjoyMDAwO0xDX05VTUVSSUMKK2NhdGVnb3J5IGF6X0FaOjIwMDA7TENfUEFQRVIKK2NhdGVnb3J5IGF6X0FaOjIwMDA7TENfVEVMRVBIT05FCitjYXRlZ29yeSBhel9BWjoyMDAwO0xDX01FQVNVUkVNRU5UCitjYXRlZ29yeSBhel9BWjoyMDAwO0xDX0FERFJFU1MKK2NhdGVnb3J5IGF6X0FaOjIwMDA7TENfTU9ORVRBUlkKK2NhdGVnb3J5IGF6X0FaOjIwMDA7TENfTUVTU0FHRVMKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKKyUKKyUgVE9ETzogY2hlY2sgTENfQ09MTEFURQorJSBUT0RPOiBmaXggTENfTU9ORVRBUlkKKworTENfQ09MTEFURQorJSBUaGUgbmV3ICgxOTkxKSBsYXRpbiBhemVyaSBhbHBoYWJldCBpczoKKyUgPGE+LCA8Yj4sIDxjPiwgPGMsPiwgPGQ+LCA8ZT4sIDxzdz4sIDxmPiwgPGc+LCA8Zyg+LCA8aD4sIDx4PiwKKyUgPGk+IChkb3RsZXNzIGkpLCA8aS4+IChpIHdpdGggZG90KSwgPGo+LCA8az4sIDxxPiwgPGw+LCA8bT4sIDxuPiwgPG8+LAorJSA8bzo+LCA8cD4sIDxyPiwgPHM+LCA8cyw+LCA8dD4sIDx1PiwgPHU6PiwgPHY+LCA8eT4sIDx6PgorJQorJSBjeXJpbGxpYyBhbHBoYWJldDoKKyUgPGE9PiwgPGI9PiwgPGc9PiwgPGctPT4sIDxkPT4sIDxlPT4sIDxzdz0+LCA8eiU+LCA8ej0+LCA8aT0+LCA8eT0+LAorJSA8aiU+LCA8az0+LCA8ay8vPT4sIDxsPT4sIDxtPT4sIDxuPT4sIDxvPT4sIDxvLT0+LCA8cD0+LCA8cj0+LCA8cz0+LAorJSA8dD0+LCA8dT0+LCA8dSc9PiwgPGY9PiwgPGg9PiwgPGgnPT4sIDxjJT4sIDxjJS8vPT4sIDxzJT4KKworY29weSAiaXNvMTQ2NTFfdDEiCisKK2NvbGxhdGluZy1zeW1ib2wgPGMsPgorY29sbGF0aW5nLXN5bWJvbCA8c3c+Citjb2xsYXRpbmctc3ltYm9sIDxnKD4KK2NvbGxhdGluZy1zeW1ib2wgPGkuPgorY29sbGF0aW5nLXN5bWJvbCA8bzo+Citjb2xsYXRpbmctc3ltYm9sIDxzLD4KK2NvbGxhdGluZy1zeW1ib2wgPHU6PgorCitjb2xsYXRpbmctc3ltYm9sIDxnLT0+Citjb2xsYXRpbmctc3ltYm9sIDxzdz0+Citjb2xsYXRpbmctc3ltYm9sIDxrLy89PgorY29sbGF0aW5nLXN5bWJvbCA8by09PgorY29sbGF0aW5nLXN5bWJvbCA8dSc9PgorY29sbGF0aW5nLXN5bWJvbCA8aCc9PgorY29sbGF0aW5nLXN5bWJvbCA8YyUvLz0+CisKK3Jlb3JkZXItYWZ0ZXIgPGM+Cis8Yyw+CityZW9yZGVyLWFmdGVyIDxlPgorPHN3PgorcmVvcmRlci1hZnRlciA8Zz4KKzxnKD4KK3Jlb3JkZXItYWZ0ZXIgPGg+Cis8eD4KKzxpPgorPGkuPgorPGo+Cis8az4KKzxxPgorcmVvcmRlci1hZnRlciA8bz4KKzxvOj4KK3Jlb3JkZXItYWZ0ZXIgPHM+Cis8cyw+CityZW9yZGVyLWFmdGVyIDx1PgorPHU6PgorCityZW9yZGVyLWFmdGVyIDxDWVItR0hFPgorPGctPT4KK3Jlb3JkZXItYWZ0ZXIgPENZUi1JRT4KKzxzdz0+CityZW9yZGVyLWFmdGVyIDxDWVItS0E+Cis8ay8vPT4KK3Jlb3JkZXItYWZ0ZXIgPENZUi1PPgorPG8tPT4KK3Jlb3JkZXItYWZ0ZXIgPENZUi1PVUJSRT4KKzx1Jz0+CityZW9yZGVyLWFmdGVyIDxDWVItSEE+Cis8aCc9PgorcmVvcmRlci1hZnRlciA8Q1lSLUNIRT4KKzxjJS8vPT4KKworcmVvcmRlci1hZnRlciA8VTAwNjM+Cis8VTAwRTc+IDxjLD47PENEST47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0Mz4KKzxVMDBDNz4gPGMsPjs8Q0RJPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNjU+Cis8VTAyNTk+IDxzdz47PFBDTD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0NT4KKzxVMDE4Rj4gPHN3Pjs8UENMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNjc+Cis8VTAxMUY+IDxnKD47PEJSRT47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0Nz4KKzxVMDExRT4gPGcoPjs8QlJFPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNjg+Cis8VTAxMzE+IDxpPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDA2OT4gPGkuPjs8UENUPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDQ4PgorPFUwMDQ5PiA8aT47PEJBUz47PENBUD47SUdOT1JFCis8VTAxMzA+IDxpLj47PFBDVD47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDZGPgorPFUwMEY2PiA8bzo+OzxSRVU+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNEY+Cis8VTAwRDY+IDxvOj47PFJFVT47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDczPgorPFUwMTVGPiA8cyw+OzxDREk+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNTM+Cis8VTAxNUU+IDxzLD47PENEST47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDc1PgorPFUwMEZDPiA8dTo+OzxSRVU+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNTU+Cis8VTAwREM+IDx1Oj47PFJFVT47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwNDMzPgorPFUwNDkzPiA8Zy09Pjs8UENMPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwNDEzPgorPFUwNDkyPiA8Zy09Pjs8UENMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTA0MzU+Cis8VTA0RDk+IDxzdz0+OzxQQ0w+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTA0MTU+Cis8VTA0RDg+IDxzdz0+OzxQQ0w+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDQzQT4KKzxVMDQ5RD4gPGsvLz0+OzxQQ0w+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTA0MUE+Cis8VTA0OUM+IDxrLy89Pjs8UENMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTA0M0U+Cis8VTA0RTk+IDxvLT0+OzxQQ0w+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTA0MUU+Cis8VTA0RTg+IDxvLT0+OzxQQ0w+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDQ0Mz4KKzxVMDRBRj4gPHUnPT47PFBDTD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDQyMz4KKzxVMDRBRT4gPHUnPT47PFBDTD47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwNDQ1PgorPFUwNEJCPiA8aCc9Pjs8UENMPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwNDI1PgorPFUwNEJBPiA8aCc9Pjs8UENMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTA0NDc+Cis8VTA0Qjk+IDxjJS8vPT47PFBDTD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDQyNz4KKzxVMDRCOD4gPGMlLy89Pjs8UENMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1lbmQKKworRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgInRyX1RSIgordHJhbnNsaXRfc3RhcnQKKworJSBzY2h3YSAtPiBhOgorPFUwMjU5PiAiPFUwMEU0PiIKKzxVMDE4Rj4gIjxVMDBDND4iCisKK3RyYW5zbGl0X2VuZAorCitFTkQgTENfQ1RZUEUKKworTENfTUVTU0FHRVMKKyUgRklYTUU6IE5vIGlzICJ5b3giOyB0aGF0IGNvbmZsaWN0cyB3aXRoIEVuZ2xpc2ggInllcyIuLi4gd2hhdCB0byBkbyAuCit5ZXNzdHIgICI8VTAwNjI+PFUwMjU5PjxVMDA2Qz48VTAwNjk+Igorbm9zdHIgICAiPFUwMDc5PjxVMDA2Rj48VTAwNzg+IgoreWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNDI+PFUwMDYyPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDU5PjxVMDA3OT48VTAwNEU+PFUwMDZFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgICAgICAiPFUwMDQxPjxVMDA1QT48VTAwNEQ+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDZFPjxVMDAyRT4iCittb25fZGVjaW1hbF9wb2ludCAgICAgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgICAiPFUwMDIwPiIKK21vbl9ncm91cGluZyAgICAgICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAgICAgMAorcF9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDAKK25fc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAgICAgICI8VTAwMkM+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAgICAiPFUwMDJFPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgICAgMzszCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCitkYXkgICAgICI8VTAwNjI+PFUwMDYxPjxVMDA3QT48VTAwNjE+PFUwMDcyPjxVMDAyMD48VTAwNjc+PFUwMEZDPjxVMDA2RT48VTAwRkM+IjsvCisgICAgICAgICI8VTAwNjI+PFUwMDYxPjxVMDA3QT48VTAwNjE+PFUwMDcyPjxVMDAyMD48VTAwNjU+PFUwMDcyPjxVMDA3ND48VTAyNTk+PFUwMDczPjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDBFNz48VTAyNTk+PFUwMDcyPjxVMDE1Rj48VTAyNTk+PFUwMDZFPjxVMDA2Mj48VTAyNTk+PFUwMDIwPjxVMDA2MT48VTAwNzg+PFUwMTVGPjxVMDA2MT48VTAwNkQ+PFUwMTMxPiI7LworICAgICAgICAiPFUwMEU3PjxVMDI1OT48VTAwNzI+PFUwMTVGPjxVMDI1OT48VTAwNkU+PFUwMDYyPjxVMDI1OT4iOy8KKyAgICAgICAgIjxVMDA2Mz48VTAwRkM+PFUwMDZEPjxVMDI1OT48VTAwMjA+PFUwMDYxPjxVMDA3OD48VTAxNUY+PFUwMDYxPjxVMDA2RD48VTAxMzE+IjsvCisgICAgICAgICI8VTAwNjM+PFUwMEZDPjxVMDA2RD48VTAyNTk+IjsvCisgICAgICAgICI8VTAxNUY+PFUwMjU5PjxVMDA2RT48VTAwNjI+PFUwMjU5PiIKK2FiZGF5ICAgIjxVMDA2Mj48VTAwNjE+PFUwMDdBPiI7LworICAgICAgICAiPFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwRTc+PFUwMDYxPjxVMDA3OD4iOy8KKyAgICAgICAgIjxVMDBFNz48VTAyNTk+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDYzPjxVMDA2MT48VTAwNzg+IjsvCisgICAgICAgICI8VTAwNjM+PFUwMEZDPjxVMDA2RD4iOy8KKyAgICAgICAgIjxVMDE1Rj48VTAwNkU+PFUwMDYyPiIKK21vbiAgICAgIjxVMDA3OT48VTAwNjE+PFUwMDZFPjxVMDA3Nj48VTAwNjE+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDY2PjxVMDA2NT48VTAwNzY+PFUwMDcyPjxVMDA2MT48VTAwNkM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDcwPjxVMDA3Mj48VTAwNjU+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICI8VTAwNjk+PFUwMDc5PjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNjk+PFUwMDc5PjxVMDA3NT48VTAwNkM+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDc2PjxVMDA3MT48VTAwNzU+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDZFPjxVMDA3ND48VTAwNzk+PFUwMDYxPjxVMDA2Mj48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNkY+PFUwMDZCPjxVMDA3ND48VTAwNzk+PFUwMDYxPjxVMDA2Mj48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA3OT48VTAwNjE+PFUwMDYyPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwNjU+PFUwMDZCPjxVMDA2MT48VTAwNjI+PFUwMDcyPiIKK2FibW9uICAgIjxVMDA1OT48VTAwNjE+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDQ2PjxVMDA2NT48VTAwNzY+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0MT48VTAwNzA+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICI8VTAxMzA+PFUwMDc5PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDEzMD48VTAwNzk+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDQxPjxVMDA3Nj48VTAwNzE+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA0Rj48VTAwNkI+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzk+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDY1PjxVMDA2Qj4iCitkX3RfZm10ICI8VTAwMjU+PFUwMDQxPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND4iCitkX2ZtdCAgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJFPjxVMDAyNT48VTAwNkQ+PFUwMDJFPjxVMDAyNT48VTAwNTk+IgordF9mbXQgICAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgICAiIjsiIgordF9mbXRfYW1wbSAiIgorRU5EIExDX1RJTUUKKworTENfUEFQRVIKK2hlaWdodCAgICAgIDI5Nword2lkdGggICAgICAgMjEwCitFTkQgTENfUEFQRVIKKworTENfTUVBU1VSRU1FTlQKK21lYXN1cmVtZW50IDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19BRERSRVNTCislIEZJWE1FCitwb3N0YWxfZm10ICI/Pz8iCitjb3VudHJ5X2FiMiAiPFUwMDQxPjxVMDA1QT4iCitjb3VudHJ5X2FiMyAiPFUwMDQxPjxVMDA1QT48VTAwNDU+IgorY291bnRyeV9udW0gMDMxCitFTkQgTENfQUREUkVTUworCitMQ19URUxFUEhPTkUKKyUgRklYTUUKK3RlbF9pbnRfZm10ICI/Pz8iCitpbnRfcHJlZml4ICI8VTAwMzk+PFUwMDM5PjxVMDAzND4iCitpbnRfc2VsZWN0ICI8VTAwMzg+PFUwMDdFPjxVMDAzMT48VTAwMzA+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19OQU1FCislIEZJWE1FCituYW1lX2ZtdCAiPz8/IgorRU5EIExDX05BTUUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2JlX0JZIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYmVfQlkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTExYjNiMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2JlX0JZCkBAIC0wLDAgKzEsMTgzIEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgQmVsYXJ1c2lhbiBMYW5ndWFnZSBMb2NhbGUgZm9yIEJlbGFydXMKKyUgQ29udGFjdDogQWxleGFuZGVyIE1pa2hhaWxpYW4KKyUgRW1haWw6IG1pa2hhaWxpYW5AYWx0ZXJuLm9yZworJSBMYW5ndWFnZTogYmUKKyUgVGVycml0b3J5OiBCWQorJSBSZXZpc2lvbjogMC40CislIERhdGU6IDIwMDItMDQtMDYKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMuZHMKKyUgQ2hhcnNldDogQ1AxMjUxCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJCZWxhcnVzaWFuIGxvY2FsZSBmb3IgQmVsYXJ1cyIKK3NvdXJjZSAgICAgIiIKK2FkZHJlc3MgICAgIiIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJCZWxhcnVzaWFuIgordGVycml0b3J5ICAiQmVsYXJ1cyIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjkiCislCitjYXRlZ29yeSAgImJlX0JZOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImJlX0JZOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImJlX0JZOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiYmVfQlk6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJiZV9CWToyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImJlX0JZOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImJlX0JZOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImJlX0JZOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImJlX0JZOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiYmVfQlk6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJiZV9CWToyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorCislIGlzbzE0NjUxX3QxIGlzIG1pc3NpbmcgVWtyYWluaWFuIGdoZQorY29sbGF0aW5nLXN5bWJvbCA8VUtSLUdIRT4KKworcmVvcmRlci1hZnRlciA8Q1lSLUdaSEU+Cis8VUtSLUdIRT4KKworcmVvcmRlci1hZnRlciA8VTA0NTM+Cis8VTA0OTE+IDxVS1ItR0hFPjs8QkFTPjs8TUlOPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTA0MDM+Cis8VTA0OTA+IDxVS1ItR0hFPjs8QkFTPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1lbmQKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworTENfTUVTU0FHRVMKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwNDIyPjxVMDQ0Mj48VTAwNTk+PFUwMDc5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwNDFEPjxVMDQzRD48VTAwNEU+PFUwMDZFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgICAgICAiPFUwMDQyPjxVMDA1OT48VTAwNTI+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICAgIjxVMDQ0MD48VTA0NDM+PFUwNDMxPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgICAgICI8VTAwMjA+IgorbW9uX2dyb3VwaW5nICAgICAgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgICAgICAwCitwX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAgICAgMAorbl9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAgICAgMQorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgICAgIjxVMDAyQz4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICAgICI8VTAwMkU+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAgICAzOzMKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2RheSAgICAgIjxVMDQxRD48VTA0NEY+PFUwNDM0PjxVMDQzNz48VTA0MzU+PFUwNDNCPjxVMDQ0Rj4iOy8KKyAgICAgICAgIjxVMDQxRj48VTA0MzA+PFUwNDNEPjxVMDQ0Rj48VTA0MzQ+PFUwNDM3PjxVMDQzNT48VTA0M0I+PFUwNDMwPjxVMDQzQT4iOy8KKyAgICAgICAgIjxVMDQxMD48VTA0NUU+PFUwNDQyPjxVMDQzRT48VTA0NDA+PFUwNDMwPjxVMDQzQT4iOy8KKyAgICAgICAgIjxVMDQyMT48VTA0MzU+PFUwNDQwPjxVMDQzMD48VTA0MzQ+PFUwNDMwPiI7LworICAgICAgICAiPFUwNDI3PjxVMDQzMD48VTA0NDY+PFUwNDMyPjxVMDQzNT48VTA0NDA+IjsvCisgICAgICAgICI8VTA0MUY+PFUwNDRGPjxVMDQ0Mj48VTA0M0Q+PFUwNDU2PjxVMDQ0Nj48VTA0MzA+IjsvCisgICAgICAgICI8VTA0MjE+PFUwNDQzPjxVMDQzMT48VTA0M0U+PFUwNDQyPjxVMDQzMD4iCithYmRheSAgICI8VTA0MUQ+PFUwNDRGPjxVMDQzND4iOy8KKyAgICAgICAgIjxVMDQxRj48VTA0MzA+PFUwNDNEPiI7LworICAgICAgICAiPFUwNDEwPjxVMDQ1RT48VTA0NDI+IjsvCisgICAgICAgICI8VTA0MjE+PFUwNDQwPjxVMDQzND4iOy8KKyAgICAgICAgIjxVMDQyNz48VTA0NDY+PFUwNDMyPiI7LworICAgICAgICAiPFUwNDFGPjxVMDQ0Rj48VTA0NDI+IjsvCisgICAgICAgICI8VTA0MjE+PFUwNDQzPjxVMDQzMT4iCittb24gICAgICI8VTA0MjE+PFUwNDQyPjxVMDQ0Mz48VTA0MzQ+PFUwNDM3PjxVMDQzNT48VTA0M0Q+PFUwNDRDPiI7LworICAgICAgICAiPFUwNDFCPjxVMDQ0RT48VTA0NDI+PFUwNDRCPiI7LworICAgICAgICAiPFUwNDIxPjxVMDQzMD48VTA0M0E+PFUwNDMwPjxVMDQzMj48VTA0NTY+PFUwNDNBPiI7LworICAgICAgICAiPFUwNDFBPjxVMDQ0MD48VTA0MzA+PFUwNDQxPjxVMDQzMD48VTA0MzI+PFUwNDU2PjxVMDQzQT4iOy8KKyAgICAgICAgIjxVMDQyMj48VTA0NDA+PFUwNDMwPjxVMDQzMj48VTA0MzU+PFUwNDNEPjxVMDQ0Qz4iOy8KKyAgICAgICAgIjxVMDQyNz48VTA0NEQ+PFUwNDQwPjxVMDQzMj48VTA0MzU+PFUwNDNEPjxVMDQ0Qz4iOy8KKyAgICAgICAgIjxVMDQxQj48VTA0NTY+PFUwNDNGPjxVMDQzNT48VTA0M0Q+PFUwNDRDPiI7LworICAgICAgICAiPFUwNDE2PjxVMDQzRD48VTA0NTY+PFUwNDMyPjxVMDQzNT48VTA0M0Q+PFUwNDRDPiI7LworICAgICAgICAiPFUwNDEyPjxVMDQzNT48VTA0NDA+PFUwNDMwPjxVMDQ0MT48VTA0MzU+PFUwNDNEPjxVMDQ0Qz4iOy8KKyAgICAgICAgIjxVMDQxQT48VTA0MzA+PFUwNDQxPjxVMDQ0Mj48VTA0NDA+PFUwNDRCPjxVMDQ0Nz48VTA0M0Q+PFUwNDU2PjxVMDQzQT4iOy8KKyAgICAgICAgIjxVMDQxQj48VTA0NTY+PFUwNDQxPjxVMDQ0Mj48VTA0MzA+PFUwNDNGPjxVMDQzMD48VTA0MzQ+IjsvCisgICAgICAgICI8VTA0MjE+PFUwNDNEPjxVMDQzNT48VTA0MzY+PFUwNDMwPjxVMDQzRD48VTA0NEM+IgorYWJtb24gICAiPFUwNDIxPjxVMDQ0Mj48VTA0MzQ+IjsvCisgICAgICAgICI8VTA0MUI+PFUwNDRFPjxVMDQ0Mj4iOy8KKyAgICAgICAgIjxVMDQyMT48VTA0MzA+PFUwNDNBPiI7LworICAgICAgICAiPFUwNDFBPjxVMDQ0MD48VTA0NDE+IjsvCisgICAgICAgICI8VTA0MjI+PFUwNDQwPjxVMDQzMD4iOy8KKyAgICAgICAgIjxVMDQyNz48VTA0NEQ+PFUwNDQwPiI7LworICAgICAgICAiPFUwNDFCPjxVMDQ1Nj48VTA0M0Y+IjsvCisgICAgICAgICI8VTA0MTY+PFUwNDNEPjxVMDQzMj4iOy8KKyAgICAgICAgIjxVMDQxMj48VTA0NDA+PFUwNDQxPiI7LworICAgICAgICAiPFUwNDFBPjxVMDQ0MT48VTA0NDI+IjsvCisgICAgICAgICI8VTA0MUI+PFUwNDU2PjxVMDQ0MT4iOy8KKyAgICAgICAgIjxVMDQyMT48VTA0M0Q+PFUwNDM2PiIKK2RfdF9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+LworPFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+IgorZF9mbXQgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjU+PFUwMDZEPjxVMDAyRT48VTAwMjU+PFUwMDU5PiIKK3RfZm10ICAgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICAgIiI7IiIKK3RfZm10X2FtcG0gIiIKK2RhdGVfZm10CSI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCislIEZJWE1FCitoZWlnaHQgICAyOTcKKyUgRklYTUUKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzM+PFUwMDM3PjxVMDAzNT4iCitpbnRfc2VsZWN0ICAgICAiPFUwMDM4PjxVMDA3RT48VTAwMzE+PFUwMDMwPiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKKyUgRklYTUUKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgIjxVMDA0Mj48VTAwNTk+IgorY291bnRyeV9hYjMgIjxVMDA0Mj48VTAwNEM+PFUwMDUyPiIKK2NvdW50cnlfbnVtIDExMgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2JlX0JZQGxhdGluIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYmVfQllAbGF0aW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRiYmZhZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2JlX0JZQGxhdGluCkBAIC0wLDAgKzEsMTQ3IEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgQmVsYXJ1c2lhbiBMYW5ndWFnZSBMYXRpbi1TY3JpcHQgTG9jYWxlIGZvciBCZWxhcnVzCislIENvbnRhY3Q6IEloYXIgSHJhY2h5c2hrYQorJSBFbWFpbDogYm9veC5zdmFib2RhMjAwNkBnbWFpbC5jb20KKyUgTGFuZ3VhZ2U6IGJlCislIFRlcnJpdG9yeTogQlkKKyUgUmV2aXNpb246IDEuMAorJSBEYXRlOiAyMDA1LTA5LTI0CislIEFwcGxpY2F0aW9uOiBnZW5lcmFsCislIFVzZXJzOiBnZW5lcmFsCislIFJlcGVydG9pcmVtYXA6IG1uZW1vbmljLmRzCislIENoYXJzZXQ6IFVURi04CislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJCZWxhcnVzaWFuIExhdGluLVNjcmlwdCBsb2NhbGUgZm9yIEJlbGFydXMiCitzb3VyY2UgICAgICIiCithZGRyZXNzICAgICIiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiQmVsYXJ1c2lhbiIKK3RlcnJpdG9yeSAgIkJlbGFydXMiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDA1LTA5LTE1IgorJQorY2F0ZWdvcnkgICJiZV9CWUBsYXRpbjoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJiZV9CWUBsYXRpbjoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJiZV9CWUBsYXRpbjoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImJlX0JZQGxhdGluOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiYmVfQllAbGF0aW46MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJiZV9CWUBsYXRpbjoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJiZV9CWUBsYXRpbjoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJiZV9CWUBsYXRpbjoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJiZV9CWUBsYXRpbjoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImJlX0JZQGxhdGluOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiYmVfQllAbGF0aW46MjAwMCI7TENfVEVMRVBIT05FCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCitFTkQgTENfQ1RZUEUKKworTENfTlVNRVJJQworY29weSAiYmVfQlkiCitFTkQgTENfTlVNRVJJQworCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNTQ+PFUwMDc0PjxVMDA1OT48VTAwNzk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNEU+PFUwMDZFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19USU1FCithYmRheSAgICI8VTAwNEU+PFUwMDY5PjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA1MD48VTAwNjE+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDQxPjxVMDE2RD48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDY5PjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDEwQz48VTAwNjE+PFUwMTA3PiI7LworICAgICAgICAiPFUwMDUwPjxVMDA2OT48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDc1PjxVMDA2Mj4iCitkYXkgICAgICI8VTAwNEU+PFUwMDY5PjxVMDA2MT48VTAwNjQ+PFUwMDdBPjxVMDA2OT48VTAwNjU+PFUwMDZDPjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA1MD48VTAwNjE+PFUwMDZFPjxVMDA2OT48VTAwNjE+PFUwMDY0PjxVMDA3QT48VTAwNjk+PFUwMDY1PjxVMDE0Mj48VTAwNjE+PFUwMDZCPiI7LworCSI8VTAwNDE+PFUwMTZEPjxVMDA3ND48VTAwNkY+PFUwMDcyPjxVMDA2MT48VTAwNkI+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDY5PjxVMDA2NT48VTAwNzI+PFUwMDYxPjxVMDA2ND48VTAwNjE+IjsvCisgICAgICAgICI8VTAxMEM+PFUwMDYxPjxVMDEwNz48VTAwNzY+PFUwMDY5PjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNTA+PFUwMDY5PjxVMDA2MT48VTAwNzQ+PFUwMDZFPjxVMDA2OT48VTAwNjM+PFUwMDYxPiI7LworICAgICAgICAiPFUwMDUzPjxVMDA3NT48VTAwNjI+PFUwMDZGPjxVMDA3ND48VTAwNjE+IgorYWJtb24JIjxVMDA1Mz48VTAwNzQ+PFUwMDc1PiI7LworCSI8VTAwNEM+PFUwMDc1PjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDZCPiI7LworICAgICAgICAiPFUwMDRCPjxVMDA3Mj48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNTQ+PFUwMDcyPjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDEwQz48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDRDPjxVMDA2OT48VTAwNzA+IjsvCisgICAgICAgICI8VTAxN0Q+PFUwMDZFPjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA1Nj48VTAwNjk+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDRCPjxVMDA2MT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNEM+PFUwMDY5PjxVMDA3Mz4iOy8KKwkiPFUwMTVBPjxVMDA2RT48VTAwNjk+IgorbW9uICAgICAiPFUwMDUzPjxVMDA3ND48VTAwNzU+PFUwMDY0PjxVMDA3QT48VTAwNjk+PFUwMDY1PjxVMDE0ND4iOy8KKwkiPFUwMDRDPjxVMDA3NT48VTAwNzQ+PFUwMDc5PiI7LworCSI8VTAwNTM+PFUwMDYxPjxVMDA2Qj48VTAwNjE+PFUwMDc2PjxVMDA2OT48VTAwNkI+IjsvCisJIjxVMDA0Qj48VTAwNzI+PFUwMDYxPjxVMDA3Mz48VTAwNjE+PFUwMDc2PjxVMDA2OT48VTAwNkI+IjsvCisJIjxVMDA1ND48VTAwNzI+PFUwMDYxPjxVMDA3Nj48VTAwNjk+PFUwMDY1PjxVMDE0ND4iOy8KKwkiPFUwMTBDPjxVMDA2NT48VTAwNzI+PFUwMDc2PjxVMDA2OT48VTAwNjU+PFUwMTQ0PiI7LworCSI8VTAwNEM+PFUwMDY5PjxVMDA3MD48VTAwNjk+PFUwMDY1PjxVMDE0ND4iOy8KKwkiPFUwMTdEPjxVMDA2RT48VTAwNjk+PFUwMDc2PjxVMDA2OT48VTAwNjU+PFUwMTQ0PiI7LworCSI8VTAwNTY+PFUwMDY5PjxVMDA2NT48VTAwNzI+PFUwMDYxPjxVMDA3Mz48VTAwNjk+PFUwMDY1PjxVMDE0ND4iOy8KKwkiPFUwMDRCPjxVMDA2MT48VTAwNzM+PFUwMDc0PjxVMDA3Mj48VTAwNzk+PFUwMTBEPjxVMDA2RT48VTAwNjk+PFUwMDZCPiI7LworCSI8VTAwNEM+PFUwMDY5PjxVMDA3Mz48VTAwNzQ+PFUwMDYxPjxVMDA3MD48VTAwNjE+PFUwMDY0PiI7LworCSI8VTAxNUE+PFUwMDZFPjxVMDA2OT48VTAwNjU+PFUwMTdFPjxVMDA2MT48VTAxNDQ+IgorYW1fcG0gICAgICIiOyIiCitkX3RfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPi8KKzxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PiIKK2RfZm10ICAgICAiPFUwMDI1PjxVMDA2ND48VTAwMkU+PFUwMDI1PjxVMDA2RD48VTAwMkU+PFUwMDI1PjxVMDA1OT4iCit0X2ZtdCAgICAgIjxVMDAyNT48VTAwNTQ+IgordF9mbXRfYW1wbSAiIgorZGF0ZV9mbXQgICAgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgICAgICAgIjxVMDA0Mj48VTAwNTk+PFUwMDUyPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgICAgICI8VTAwNTI+PFUwMDc1PjxVMDA2Mj4iCittb25fZGVjaW1hbF9wb2ludCAgICAgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgICAiPFUwMDIwPiIKK21vbl9ncm91cGluZyAgICAgICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAgICAgMAorcF9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDAKK25fc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19QQVBFUgorY29weSAiYmVfQlkiCitFTkQgTENfUEFQRVIKKworTENfTkFNRQorY29weSAiYmVfQlkiCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitjb3B5ICJiZV9CWSIKK0VORCBMQ19BRERSRVNTCisKK0xDX1RFTEVQSE9ORQorY29weSAiYmVfQlkiCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJiZV9CWSIKK0VORCBMQ19NRUFTVVJFTUVOVApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYmVyX0RaIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYmVyX0RaCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNTRhMDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9iZXJfRFoKQEAgLTAsMCArMSwzMTEgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBBbWF6aWdoIExhbmd1YWdlIExvY2FsZSBmb3IgQWxnZXJpYSAobGF0aW4pCislIFNvdXJjZTogCislIENvbnRhY3Q6IFBhYmxvIFNhcmF0eGFnYQorJSBFbWFpbDogPHBhYmxvQG1hbmRyYWtlc29mdC5jb20+CislIExhbmd1YWdlOiBiZXIKKyUgVGVycml0b3J5OiBEWgorJSBSZXZpc2lvbjogMC4xCislIERhdGU6IDIwMDItMDQtMTYKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogVVRGLTgKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICJBbWF6aWdoIGxhbmd1YWdlIGxvY2FsZSBmb3IgQWxnZXJpYSAobGF0aW4pIgorc291cmNlICIiCithZGRyZXNzICIiCitjb250YWN0ICJQYWJsbyBTYXJhdHhhZ2EiCitlbWFpbCAicGFibG9AbWFuZHJha2Vzb2Z0LmNvbSIKK3RlbCAiIgorZmF4ICIiCitsYW5ndWFnZSAiQW1hemlnaCIKK3RlcnJpdG9yeSAiQWxnZXJpYSIKK3JldmlzaW9uICIwLjEiCitkYXRlICIyMDAyLTA0LTE2IgorCitjYXRlZ29yeSBiZXJfRFo6MjAwMDtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgYmVyX0RaOjIwMDA7TENfQ1RZUEUKK2NhdGVnb3J5IGJlcl9EWjoyMDAwO0xDX0NPTExBVEUKK2NhdGVnb3J5IGJlcl9EWjoyMDAwO0xDX1RJTUUKK2NhdGVnb3J5IGJlcl9EWjoyMDAwO0xDX05VTUVSSUMKK2NhdGVnb3J5IGJlcl9EWjoyMDAwO0xDX1BBUEVSCitjYXRlZ29yeSBiZXJfRFo6MjAwMDtMQ19URUxFUEhPTkUKK2NhdGVnb3J5IGJlcl9EWjoyMDAwO0xDX01FQVNVUkVNRU5UCitjYXRlZ29yeSBiZXJfRFo6MjAwMDtMQ19BRERSRVNTCitjYXRlZ29yeSBiZXJfRFo6MjAwMDtMQ19NT05FVEFSWQorY2F0ZWdvcnkgYmVyX0RaOjIwMDA7TENfTUVTU0FHRVMKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKKyUKKyUgVE9ETzogY2hlY2sgTENfQ09MTEFURQorJSBUT0RPOiBmaXggTENfVElNRSwgTENfTU9ORVRBUlksIExDX01FU1NBR0VTLCBMQ19OQU1FLCBMQ19BRERSRVNTCisKK0xDX0NPTExBVEUKKyUgVGhlIGxhdGluIGFtYXppZ2ggYWxwaGFiZXQgaXM6ICAgICAgIAorJSA8YT4sIDxlcHM+LCA8Yj4sIDxiKj4sIDxjPiwgPGM8PiwgPGQ+LCA8ZC0uPiwgPGU+LCA8Zj4sIDxnPiwgPGcqPiwgPGcoPiwgCislIDxoPiwgPGgtLj4sIDxpPiwgPGo+LCA8az4sIDxrKj4sIDxsPiwgPG0+LCA8bj4sIDxxPiwgPHEqPiwgPGdhbT4sIDxnYW0qPiwKKyUgPHI+LCA8ci0uPiwgPHM+LCA8cy0uPiwgPHQ+LCA8dC0uPiwgPHU+LCA8dz4sIDx4PiwgPHgqPiwgPHk+LCA8ej4sIDx6LS4+CislCislIGFyYWJpYyBhbHBoYWJldDoKKworY29weSAiaXNvMTQ2NTFfdDEiCisKK2NvbGxhdGluZy1zeW1ib2wgPGVwcz4KKyVjb2xsYXRpbmctc3ltYm9sIDxiKj4KK2NvbGxhdGluZy1zeW1ib2wgPGM8PgorY29sbGF0aW5nLXN5bWJvbCA8ZC0uPgorJWNvbGxhdGluZy1zeW1ib2wgPGcqPgorY29sbGF0aW5nLXN5bWJvbCA8Zyg+Citjb2xsYXRpbmctc3ltYm9sIDxoLS4+CislY29sbGF0aW5nLXN5bWJvbCA8ayo+CislY29sbGF0aW5nLXN5bWJvbCA8cSo+Citjb2xsYXRpbmctc3ltYm9sIDxnYW0+CislY29sbGF0aW5nLXN5bWJvbCA8Z2FtKj4KK2NvbGxhdGluZy1zeW1ib2wgPHItLj4KK2NvbGxhdGluZy1zeW1ib2wgPHMtLj4KK2NvbGxhdGluZy1zeW1ib2wgPHQtLj4KKyVjb2xsYXRpbmctc3ltYm9sIDx4Kj4KK2NvbGxhdGluZy1zeW1ib2wgPHotLj4KKworcmVvcmRlci1hZnRlciA8YT4KKzxlcHM+CislcmVvcmRlci1hZnRlciA8Yj4KKyU8Yio+CityZW9yZGVyLWFmdGVyIDxjPgorPGM8PgorcmVvcmRlci1hZnRlciA8ZD4KKzxkLS4+CityZW9yZGVyLWFmdGVyIDxnPgorJTxnKj4KKzxnKD4KK3Jlb3JkZXItYWZ0ZXIgPGg+Cis8aC0uPgorJXJlb3JkZXItYWZ0ZXIgPGs+CislPGsqPgorcmVvcmRlci1hZnRlciA8cT4KKyU8cSo+Cis8Z2FtPgorJTxnYW0qPgorcmVvcmRlci1hZnRlciA8cj4KKzxyLS4+CityZW9yZGVyLWFmdGVyIDxzPgorPHMtLj4KK3Jlb3JkZXItYWZ0ZXIgPHQ+Cis8dC0uPgorJXJlb3JkZXItYWZ0ZXIgPHg+CislPHgqPgorcmVvcmRlci1hZnRlciA8ej4KKzx6LS4+CisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDYxPgorPFUwMjVCPiA8ZXBzPjs8UENMPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDQxPgorPFUwMTkwPiA8ZXBzPjs8UENMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNjM+Cis8VTAxMEQ+IDxjPD47PENBUj47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0Mz4KKzxVMDEwQz4gPGM8Pjs8Q0FSPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNjQ+Cis8VTFFMEQ+IDxkLS4+OzxQQ1Q+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNDQ+Cis8VTFFMEM+IDxkLS4+OzxQQ1Q+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA2Nz4KKzxVMDExRj4gPGcoPjs8QlJFPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDQ3PgorPFUwMTFFPiA8Zyg+OzxCUkU+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA2OD4KKzxVMUUyNT4gPGgtLj47PFBDVD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0OD4KKzxVMUUyND4gPGgtLj47PFBDVD47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDcxPgorPFUwMjYzPiA8Z2FtPjs8UENMPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDUxPgorPFUwMTk0PiA8Z2FtPjs8UENMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNzI+Cis8VTFFNUI+IDxyLS4+OzxQQ1Q+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNTI+Cis8VTFFNUE+IDxyLS4+OzxQQ1Q+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA3Mz4KKzxVMUU2Mz4gPHMtLj47PFBDVD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA1Mz4KKzxVMUU2Mj4gPHMtLj47PFBDVD47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDc0PgorPFUxRTZEPiA8dC0uPjs8UENUPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDU0PgorPFUxRTZDPiA8dC0uPjs8UENUPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwN0E+Cis8VTFFOTM+IDx6LS4+OzxQQ1Q+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNUE+Cis8VTFFOTI+IDx6LS4+OzxQQ1Q+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWVuZAorCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAiaTE4biIKKwordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKK0xDX01FU1NBR0VTCislIEZJWE1FOiB5ZXMvbm8KK3llc3N0ciAgIjxVMDA2Mj48VTAyNTk+PFUwMDZDPjxVMDA2OT4iCitub3N0ciAgICI8VTAwNzk+PFUwMDZGPjxVMDA3OD4iCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA0Mj48VTAwNjI+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNTk+PFUwMDc5PjxVMDA0RT48VTAwNkU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIHRoZSBMQ19NT05FVEFSWSBjYXRlZ29yeS4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS9KYXZhCislCitpbnRfY3Vycl9zeW1ib2wgICAgICAgIjxVMDA0ND48VTAwNUE+PFUwMDQ0PjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgIjxVMDYyRj48VTAwMkU+PFUwNjJDPjxVMDAyRT4iCittb25fZGVjaW1hbF9wb2ludCAgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAgMworcG9zaXRpdmVfc2lnbiAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgMworZnJhY19kaWdpdHMgICAgICAgICAgIDMKK3BfY3NfcHJlY2VkZXMgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgIDIKKyUKK0VORCBMQ19NT05FVEFSWQorCisKK0xDX05VTUVSSUMKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OVU1FUklDICBjYXRlZ29yeS4KKyUKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgIjxVMDAyRT4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICI8VTAwMkM+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAzCislCitFTkQgTENfTlVNRVJJQworCislIEZJWE1FCitMQ19USU1FCitkYXkgICAgICI8VTAwNjI+PFUwMDYxPjxVMDA3QT48VTAwNjE+PFUwMDcyPjxVMDAyMD48VTAwNjc+PFUwMEZDPjxVMDA2RT48VTAwRkM+IjsvCisgICAgICAgICI8VTAwNjI+PFUwMDY5PjxVMDA3Mj48VTAwNjk+PFUwMDZFPjxVMDA2Mz48VTAwNjk+PFUwMDIwPjxVMDA2Nz48VTAwRkM+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDY5PjxVMDA2Qj48VTAwNjk+PFUwMDZFPjxVMDA2Mz48VTAwNjk+PFUwMDIwPjxVMDA2Nz48VTAwRkM+PFUwMDZFPiI7LworICAgICAgICAiPFUwMEZDPjxVMDBFNz48VTAwRkM+PFUwMDZFPjxVMDA2Mz48VTAwRkM+PFUwMDIwPjxVMDA2Nz48VTAwRkM+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDY0PjxVMDBGNj48VTAwNzI+PFUwMDY0PjxVMDBGQz48VTAwNkU+PFUwMDYzPjxVMDBGQz48VTAwMjA+PFUwMDY3PjxVMDBGQz48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNjI+PFUwMDY1PjxVMDE1Rj48VTAwNjk+PFUwMDZFPjxVMDA2Mz48VTAwNjk+PFUwMDIwPjxVMDA2Nz48VTAwRkM+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA2Qz48VTAwNzQ+PFUwMTMxPjxVMDA2RT48VTAwNjM+PFUwMTMxPjxVMDAyMD48VTAwNjc+PFUwMEZDPjxVMDA2RT4iCithYmRheSAgICI8VTAwNjI+PFUwMDYxPjxVMDA3QT4iOy8KKyAgICAgICAgIjxVMDA2Mj48VTAwNjk+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDY5PjxVMDA2Qj48VTAwNjk+IjsvCisgICAgICAgICI8VTAwRkM+PFUwMEU3PjxVMDBGQz4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwRjY+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDYyPjxVMDA2NT48VTAxNUY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDZDPjxVMDA3ND4iCittb24gICAgICI8VTAwNzk+PFUwMDYxPjxVMDA2RT48VTAwNzY+PFUwMDYxPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2Nj48VTAwNjU+PFUwMDc2PjxVMDA3Mj48VTAwNjE+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDYxPjxVMDA3MD48VTAwNzI+PFUwMDY1PjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAiPFUwMDY5PjxVMDA3OT48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDY5PjxVMDA3OT48VTAwNzU+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA3Nj48VTAwNzE+PFUwMDc1PjxVMDA3Mz48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA2RT48VTAwNzQ+PFUwMDc5PjxVMDA2MT48VTAwNjI+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZGPjxVMDA2Qj48VTAwNzQ+PFUwMDc5PjxVMDA2MT48VTAwNjI+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzk+PFUwMDYxPjxVMDA2Mj48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNjQ+PFUwMDY1PjxVMDA2Qj48VTAwNjE+PFUwMDYyPjxVMDA3Mj4iCithYm1vbiAgICI8VTAwNTk+PFUwMDYxPjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA0Nj48VTAwNjU+PFUwMDc2PiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNDE+PFUwMDcwPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAiPFUwMTMwPjxVMDA3OT48VTAwNkU+IjsvCisgICAgICAgICI8VTAxMzA+PFUwMDc5PjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA0MT48VTAwNzY+PFUwMDcxPiI7LworICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNEY+PFUwMDZCPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDc5PiI7LworICAgICAgICAiPFUwMDQ0PjxVMDA2NT48VTAwNkI+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA0MT48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNDI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+IgorZF9mbXQgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjU+PFUwMDZEPjxVMDAyRT48VTAwMjU+PFUwMDU5PiIKK3RfZm10ICAgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICAgIiI7IiIKK3RfZm10X2FtcG0gIiIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCitoZWlnaHQgICAgICAyOTcKK3dpZHRoICAgICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX01FQVNVUkVNRU5UCittZWFzdXJlbWVudCAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19OQU1FIGNhdGVnb3J5LgorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNzA+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2Nz4iCituYW1lX2dlbiAgICAiPFUwMDJEPjxVMDA3Mz48VTAwNjE+PFUwMDZFPiIKK25hbWVfbXIgICAgICI8VTAwNEQ+PFUwMDcyPjxVMDAyRT4iCituYW1lX21ycyAgICAiPFUwMDREPjxVMDA3Mj48VTAwNzM+PFUwMDJFPiIKK25hbWVfbWlzcyAgICI8VTAwNEQ+PFUwMDY5PjxVMDA3Mz48VTAwNzM+PFUwMDJFPiIKK25hbWVfbXMgICAgICI8VTAwNEQ+PFUwMDczPjxVMDAyRT4iCisKK0VORCBMQ19OQU1FCisKKworTENfQUREUkVTUworJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19BRERSRVNTCitwb3N0YWxfZm10ICAiPFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3Mj4iCisKKyVjb3VudHJ5X25hbWUgIiIKKyVjb3VudHJ5X3Bvc3QgIiIKK2NvdW50cnlfYWIyICI8VTAwNDQ+PFUwMDVBPiIKK2NvdW50cnlfYWIzICI8VTAwNDQ+PFUwMDVBPjxVMDA0MT4iCitjb3VudHJ5X251bSAxMgorJWNvdW50cnlfaXNibiAiIgorJWNvdW50cnlfY2FyICIiCitsYW5nX25hbWUgIjxVMDA3ND48VTAwNjE+PFUwMDZEPjxVMDA2MT48VTAwN0E+PFUwMDY5PjxVMDA2Nz48VTAwNjg+PFUwMDc0PiIKKyVsYW5nX2FiIAorbGFuZ190ZXJtICI8VTAwNjI+PFUwMDY1PjxVMDA3Mj4iCitsYW5nX2xpYiAiPFUwMDYyPjxVMDA2NT48VTAwNzI+IgorCisKK0VORCBMQ19BRERSRVNTCisKKworTENfVEVMRVBIT05FCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislCit0ZWxfaW50X2ZtdCAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAzQj48VTAwMjU+PFUwMDYxPjxVMDAyMD4vCis8VTAwM0I+PFUwMDI1PjxVMDA2Qz4iCitpbnRfcHJlZml4ICAiPFUwMDMyPjxVMDAzMT48VTAwMzM+IgorCitFTkQgTENfVEVMRVBIT05FCisKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYmVyX01BIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYmVyX01BCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxY2UwNjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9iZXJfTUEKQEAgLTAsMCArMSwyMjkgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBBbWF6aWdoIExhbmd1YWdlIExvY2FsZSBmb3IgTW9yb2NjbyAodGlmaW5hZ2gpCislIFNvdXJjZToKKyUgQ29udGFjdDogUGFibG8gU2FyYXR4YWdhCislIEVtYWlsOiA8cGFibG9AbWFuZHJha2Vzb2Z0LmNvbT4KKyUgTGFuZ3VhZ2U6IGJlcgorJSBUZXJyaXRvcnk6IE1BCislIFJldmlzaW9uOiAwLjEKKyUgRGF0ZTogMjAwNC0wNi0yNgorJSBBcHBsaWNhdGlvbjogZ2VuZXJhbAorJSBVc2VyczogZ2VuZXJhbAorJSBDaGFyc2V0OiBVVEYtOAorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgIkFtYXppZ2ggbGFuZ3VhZ2UgbG9jYWxlIGZvciBNb3JvY2NvICh0aWZpbmFnaCkiCitzb3VyY2UgIiIKK2FkZHJlc3MgIiIKK2NvbnRhY3QgIlBhYmxvIFNhcmF0eGFnYSIKK2VtYWlsICJwYWJsb0BtYW5kcmFrZXNvZnQuY29tIgordGVsICIiCitmYXggIiIKK2xhbmd1YWdlICJBbWF6aWdoIgordGVycml0b3J5ICJNb3JvY2NvIgorcmV2aXNpb24gIjAuMSIKK2RhdGUgIjIwMDItMDYtMjYiCisKK2NhdGVnb3J5IGJlcl9NQToyMDAwO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSBiZXJfTUE6MjAwMDtMQ19DVFlQRQorY2F0ZWdvcnkgYmVyX01BOjIwMDA7TENfQ09MTEFURQorY2F0ZWdvcnkgYmVyX01BOjIwMDA7TENfVElNRQorY2F0ZWdvcnkgYmVyX01BOjIwMDA7TENfTlVNRVJJQworY2F0ZWdvcnkgYmVyX01BOjIwMDA7TENfUEFQRVIKK2NhdGVnb3J5IGJlcl9NQToyMDAwO0xDX1RFTEVQSE9ORQorY2F0ZWdvcnkgYmVyX01BOjIwMDA7TENfTUVBU1VSRU1FTlQKK2NhdGVnb3J5IGJlcl9NQToyMDAwO0xDX0FERFJFU1MKK2NhdGVnb3J5IGJlcl9NQToyMDAwO0xDX01PTkVUQVJZCitjYXRlZ29yeSBiZXJfTUE6MjAwMDtMQ19NRVNTQUdFUworCitFTkQgTENfSURFTlRJRklDQVRJT04KKworJQorJSBUT0RPOiBmaXggTENfVElNRSwgTENfTU9ORVRBUlksIExDX01FU1NBR0VTLCBMQ19OQU1FLCBMQ19BRERSRVNTCisKK0xDX0NPTExBVEUKKworY29weSAiaXNvMTQ2NTFfdDEiCisKK2NvbGxhdGluZy1zeW1ib2wgPFRJRi1HVz4KK2NvbGxhdGluZy1zeW1ib2wgPFRJRi1LVz4KKworY29sbGF0aW5nLWVsZW1lbnQgPFRJRi1HLVc+IGZyb20gIjxVMkQzMz48VTJENkY+IgorY29sbGF0aW5nLWVsZW1lbnQgPFRJRi1LLVc+IGZyb20gIjxVMkQzRD48VTJENkY+IgorCityZW9yZGVyLWFmdGVyIDxUSUYtRz4KKzxUSUYtR1c+CityZW9yZGVyLWFmdGVyIDxUSUYtSz4KKzxUSUYtS1c+CityZW9yZGVyLWFmdGVyIDxVMkQzMz4KKzxUSUYtRy1XPiA8VElGLUdXPjs8UENUPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUyRDM3PgorPFUyRDM1PiAiPFRJRi1EPjxUSUYtSj4iOyI8TElHPjxQQ0w+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTJEMzY+ICI8VElGLUQ+PFRJRi1KPiI7IjxMSUc+PExJRz4iOyI8TUlOPjxNSU4+IjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUyRDNEPgorPFRJRi1LLVc+IDxUSUYtS1c+OzxQQ1Q+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTJENUM+Cis8VTJENUU+ICI8VElGLVQ+PFRJRi1DPiI7IjxMSUc+PExJRz4iOyI8TUlOPjxNSU4+IjtJR05PUkUKK3Jlb3JkZXItZW5kCisKKyUgTW9yb2NjYW4gc29ydGluZyBzdGFuZGFyZCByZXF1aXJlcyB0aWZpbmFnaCB0byBjb21lCislIGJlZm9yZSBsYXRpbiBzY3JpcHQKK3Jlb3JkZXItc2VjdGlvbnMtYWZ0ZXIgPFNQRUNJQUw+Cis8VElGSU5BR0g+CityZW9yZGVyLXNlY3Rpb25zLWVuZAorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19NRVNTQUdFUworJSBGSVhNRTogeWVzL25vCit5ZXNzdHIgICI8VTAwNjI+PFUwMjU5PjxVMDA2Qz48VTAwNjk+Igorbm9zdHIgICAiPFUwMDc5PjxVMDA2Rj48VTAwNzg+IgoreWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNDI+PFUwMDYyPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDU5PjxVMDA3OT48VTAwNEU+PFUwMDZFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiB0aGUgTENfTU9ORVRBUlkgY2F0ZWdvcnkuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRpZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUvSmF2YQorJQoraW50X2N1cnJfc3ltYm9sICAgICAgICI8VTAwNEQ+PFUwMDQxPjxVMDA0ND48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICI8VTJEMzc+PFUwMDJFPjxVMkQ0RT48VTAwMkU+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgIDMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgIDMKK2ZyYWNfZGlnaXRzICAgICAgICAgICAzCitwX2NzX3ByZWNlZGVzICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAyCislCitFTkQgTENfTU9ORVRBUlkKKworCitMQ19OVU1FUklDCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTlVNRVJJQyAgY2F0ZWdvcnkuCislCitkZWNpbWFsX3BvaW50ICAgICAgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAiPFUwMDJDPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgMworJQorRU5EIExDX05VTUVSSUMKKworJSBGSVhNRQorTENfVElNRQorZGF5ICAgICAiPFUwMDYyPjxVMDA2MT48VTAwN0E+PFUwMDYxPjxVMDA3Mj48VTAwMjA+PFUwMDY3PjxVMDBGQz48VTAwNkU+PFUwMEZDPiI7LworICAgICAgICAiPFUwMDYyPjxVMDA2OT48VTAwNzI+PFUwMDY5PjxVMDA2RT48VTAwNjM+PFUwMDY5PjxVMDAyMD48VTAwNjc+PFUwMEZDPjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA2OT48VTAwNkI+PFUwMDY5PjxVMDA2RT48VTAwNjM+PFUwMDY5PjxVMDAyMD48VTAwNjc+PFUwMEZDPjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDBGQz48VTAwRTc+PFUwMEZDPjxVMDA2RT48VTAwNjM+PFUwMEZDPjxVMDAyMD48VTAwNjc+PFUwMEZDPjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwRjY+PFUwMDcyPjxVMDA2ND48VTAwRkM+PFUwMDZFPjxVMDA2Mz48VTAwRkM+PFUwMDIwPjxVMDA2Nz48VTAwRkM+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDYyPjxVMDA2NT48VTAxNUY+PFUwMDY5PjxVMDA2RT48VTAwNjM+PFUwMDY5PjxVMDAyMD48VTAwNjc+PFUwMEZDPjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNkM+PFUwMDc0PjxVMDEzMT48VTAwNkU+PFUwMDYzPjxVMDEzMT48VTAwMjA+PFUwMDY3PjxVMDBGQz48VTAwNkU+IgorYWJkYXkgICAiPFUwMDYyPjxVMDA2MT48VTAwN0E+IjsvCisgICAgICAgICI8VTAwNjI+PFUwMDY5PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2OT48VTAwNkI+PFUwMDY5PiI7LworICAgICAgICAiPFUwMEZDPjxVMDBFNz48VTAwRkM+IjsvCisgICAgICAgICI8VTAwNjQ+PFUwMEY2PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2Mj48VTAwNjU+PFUwMTVGPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA2Qz48VTAwNzQ+IgorbW9uICAgICAiPFUwMDc5PjxVMDA2MT48VTAwNkU+PFUwMDc2PjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNjY+PFUwMDY1PjxVMDA3Nj48VTAwNzI+PFUwMDYxPjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNzA+PFUwMDcyPjxVMDA2NT48VTAwNkM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgIjxVMDA2OT48VTAwNzk+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA2OT48VTAwNzk+PFUwMDc1PjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNzY+PFUwMDcxPjxVMDA3NT48VTAwNzM+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNkU+PFUwMDc0PjxVMDA3OT48VTAwNjE+PFUwMDYyPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2Rj48VTAwNkI+PFUwMDc0PjxVMDA3OT48VTAwNjE+PFUwMDYyPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc5PjxVMDA2MT48VTAwNjI+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDY0PjxVMDA2NT48VTAwNkI+PFUwMDYxPjxVMDA2Mj48VTAwNzI+IgorYWJtb24gICAiPFUwMDU5PjxVMDA2MT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNDY+PFUwMDY1PjxVMDA3Nj4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDQxPjxVMDA3MD48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgIjxVMDEzMD48VTAwNzk+PFUwMDZFPiI7LworICAgICAgICAiPFUwMTMwPjxVMDA3OT48VTAwNkM+IjsvCisgICAgICAgICI8VTAwNDE+PFUwMDc2PjxVMDA3MT4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDRGPjxVMDA2Qj48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNEU+PFUwMDZGPjxVMDA3OT4iOy8KKyAgICAgICAgIjxVMDA0ND48VTAwNjU+PFUwMDZCPiIKK2RfdF9mbXQgIjxVMDAyNT48VTAwNDE+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDQyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PiIKK2RfZm10ICAgICAiPFUwMDI1PjxVMDA2ND48VTAwMkU+PFUwMDI1PjxVMDA2RD48VTAwMkU+PFUwMDI1PjxVMDA1OT4iCit0X2ZtdCAgICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAgICIiOyIiCit0X2ZtdF9hbXBtICIiCitFTkQgTENfVElNRQorCitMQ19QQVBFUgoraGVpZ2h0ICAgICAgMjk3Cit3aWR0aCAgICAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19NRUFTVVJFTUVOVAorbWVhc3VyZW1lbnQgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUgTENfTkFNRSBjYXRlZ29yeS4KKyUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDcwPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNjc+IgorbmFtZV9nZW4gICAgIjxVMDAyRD48VTAwNzM+PFUwMDYxPjxVMDA2RT4iCituYW1lX21yICAgICAiPFUwMDREPjxVMDA3Mj48VTAwMkU+IgorbmFtZV9tcnMgICAgIjxVMDA0RD48VTAwNzI+PFUwMDczPjxVMDAyRT4iCituYW1lX21pc3MgICAiPFUwMDREPjxVMDA2OT48VTAwNzM+PFUwMDczPjxVMDAyRT4iCituYW1lX21zICAgICAiPFUwMDREPjxVMDA3Mz48VTAwMkU+IgorCitFTkQgTENfTkFNRQorCisKK0xDX0FERFJFU1MKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUgTENfQUREUkVTUworcG9zdGFsX2ZtdCAgIjxVMDAyNT48VTAwN0E+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDU0PjxVMDAyNT48VTAwNzM+LworPFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDY1PjxVMDAyNT48VTAwNzI+IgorCislY291bnRyeV9uYW1lICIiCislY291bnRyeV9wb3N0ICIiCitjb3VudHJ5X2FiMiAiPFUwMDREPjxVMDA0MT4iCitjb3VudHJ5X2FiMyAiPFUwMDREPjxVMDA0MT48VTAwNTI+IgorY291bnRyeV9udW0gNTA0CislY291bnRyeV9pc2JuICIiCislY291bnRyeV9jYXIgIiIKK2xhbmdfbmFtZSAiPFUyRDVDPjxVMkQzMD48VTJENEU+PFUyRDMwPjxVMkQ0OT48VTJENTY+PFUyRDVDPiIKKyUgbGFuZ19hYgorbGFuZ190ZXJtICI8VTAwNjI+PFUwMDY1PjxVMDA3Mj4iCitsYW5nX2xpYiAiPFUwMDYyPjxVMDA2NT48VTAwNzI+IgorCisKK0VORCBMQ19BRERSRVNTCisKKworTENfVEVMRVBIT05FCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislCit0ZWxfaW50X2ZtdCAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAzQj48VTAwMjU+PFUwMDYxPjxVMDAyMD4vCis8VTAwM0I+PFUwMDI1PjxVMDA2Qz4iCitpbnRfcHJlZml4ICAiPFUwMDMyPjxVMDAzMT48VTAwMzI+IgorCitFTkQgTENfVEVMRVBIT05FCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9iZ19CRyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2JnX0JHCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZThmYjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9iZ19CRwpAQCAtMCwwICsxLDI4MyBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCisKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSBOb3RlOiBiZ19CRyBpcyBhIGJhc2UgbG9jYWxlLiBTaW5jZSB0aGVyZSBhcmUgZGlmZmVyZW50IGNoYXJhY3RlcgorJSBzZXRzIHVzZWQgd2l0aCBDeXJpbGxpYywgaXQncyBoaWdobHkgcmVjb21tZW5kZWQgdG8gZ2VuZXJhdGUgc3lzdGVtCislIGxvY2FsZXMgaW4gbW9zdCBvZiB0aGUgdXNlZCB2YXJpYW50cy4gV2hlbiBjb21waWxpbmcgc3lzdGVtIGxvY2FsZXMKKyUgZnJvbSB0aGlzIG9uZSwgcGxlYXNlIGNvbnNpZGVyIHVzaW5nIGEgY29tbW9uIG5hbWluZyBzY2hlbWUsIGxpa2UKKyUgdGhpczogYmdfQkcuQ1AxMjUxIChDUDEyNTEgaXMgZm9yIGNvcmVzcG9uZGluZyBjaGFyc2V0KSwgYmdfQkcuS09JOFIsCislIGJnX0JHLklTTzg4NTk1IGFuZCBiZ19CRy5VVEY4LgorJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiQnVsZ2FyaWFuIGxvY2FsZSBmb3IgQnVsZ2FyaWEiCitzb3VyY2UgICAgICJMaW51eCBTb2NpZXR5IEJ1bGdhcmlhIgorYWRkcmVzcyAgICAiZGV2ZWxvcEBsaW51eC56b25lYmcuY29tIgorY29udGFjdCAgICAiRGVseWFuIFRvc2hldiIKK2VtYWlsICAgICAgImRlbHlhbnRAeWFob28uY29tIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiQnVsZ2FyaWFuIgordGVycml0b3J5ICAiQnVsZ2FyaWEiCityZXZpc2lvbiAgICIyLjAuMSIKK2RhdGUgICAgICAgIjIwMDItMDktMTAiCisKK2NhdGVnb3J5ICAiYmdfQkc6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiYmdfQkc6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiYmdfQkc6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJiZ19CRzoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImJnX0JHOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiYmdfQkc6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiYmdfQkc6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiYmdfQkc6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiYmdfQkc6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJiZ19CRzoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImJnX0JHOjIwMDAiO0xDX1RFTEVQSE9ORQorRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorCislIFdlIGhhdmUgbWFkZSB0aGUgZm9sbG93aW5nIGNoYW5nZXMgdG8gdGhlIGJhc2ljIGNvbGxhdGlvbiBzY2hlbWUgaW4KKyUgdGhlIGZpbGUgaXNvMTQ2NTFfdDE6CislICAgMS4gVGhlIEN5cmlsbGljIHNjcmlwdCBpcyBmaXJzdCBpbiB0aGUgb3JkZXIuCislICAgMi4gVGhlIG5vbi1CdWxnYXJpYW4gQ3lyaWxsaWMgbGV0dGVycyBhcmUgc29ydGVkIGFjY29yZGluZyB0bworJSAgICAgIHRoZWlyIHRyYW5zbGl0ZXJhdGlvbiB3aXRoIEJ1bGdhcmlhbiBDeXJpbGxpYyBsZXR0ZXJzLgorCitjb3B5ICJpc28xNDY1MV90MSIKK3Jlb3JkZXItYWZ0ZXIgPDk+Cis8Q1lSLUE+Cis8Q1lSLUJFPgorPENZUi1WRT4KKzxDWVItR0hFPgorPENZUi1ERT4KKzxDWVItR1pIRT4KKzxDWVItREpFPgorPENZUi1JRT4KKzxVS1ItSUU+Cis8Q1lSLUlPPgorPENZUi1aSEU+Cis8Q1lSLVpFPgorPENZUi1EWkU+Cis8Q1lSLUk+Cis8VUtSLUk+Cis8VUtSLVlJPgorPENZUi1JQlJFPgorPENZUi1KRT4KKzxDWVItS0E+Cis8Q1lSLUVMPgorPENZUi1MSkU+Cis8Q1lSLUVNPgorPENZUi1FTj4KKzxDWVItTkpFPgorPENZUi1PPgorPENZUi1QRT4KKzxDWVItRVI+Cis8Q1lSLUVTPgorPENZUi1URT4KKzxDWVItS0pFPgorPENZUi1UU0hFPgorPENZUi1PVT4KKzxDWVItT1VCUkU+Cis8Q1lSLUVGPgorPENZUi1IQT4KKzxDWVItVFNFPgorPENZUi1DSEU+Cis8Q1lSLURDSEU+Cis8Q1lSLVNIQT4KKzxDWVItU0hUU0hBPgorPENZUi1TSUdEVVI+Cis8Q1lSLVlFUk9VPgorPENZUi1TSUdNT1VJTD4KKzxDWVItRT4KKzxDWVItWU9VPgorPENZUi1ZQT4KK3Jlb3JkZXItYWZ0ZXIgPFUwNDMzPgorPFUwNDUzPiA8Q1lSLUdIRT47PENZUi1HWkhFPjs8TUlOPjtJR05PUkUgJSBNYWMuIGdqZQorcmVvcmRlci1hZnRlciA8VTA0MzQ+Cis8VTA0NTI+ICI8Q1lSLURFPjxDWVItWkhFPiI7IjxMSUc+PExJRz4iOyI8TUlOPjxNSU4+IjtJR05PUkUgJSBDWVItREpFCis8VTA0NUY+ICI8Q1lSLURFPjxDWVItWkhFPiI7IjxDWVItRENIRT48TElHPiI7IjxNSU4+PE1JTj4iO0lHTk9SRSAlIENZUi1EQ0hFCis8VTA0NTU+ICI8Q1lSLURFPjxDWVItWkU+IjsiPExJRz48TElHPiI7IjxNSU4+PE1JTj4iO0lHTk9SRSAlIENZUi1EWkUKK3Jlb3JkZXItYWZ0ZXIgPFUwNDM1PgorPFUwNDU0PiA8Q1lSLUlFPjs8VUtSLUlFPjs8TUlOPjtJR05PUkUKKzxVMDQ1MT4gPENZUi1JRT47PENZUi1JTz47PE1JTj47SUdOT1JFCis8VTA0NEQ+IDxDWVItSUU+OzxDWVItRT47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDQzOD4KKzxVMDQwNj4gPENZUi1JPjs8VUtSLUk+OzxNSU4+O0lHTk9SRQorPFUwNDU3PiA8Q1lSLUk+OzxVS1ItWUk+OzxNSU4+O0lHTk9SRQorPFUwNDRCPiA8Q1lSLUk+OzxDWVItWUVST1U+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTA0M0E+Cis8VTA0NUM+IDxDWVItS0E+OzxDWVItS0pFPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwNDNCPgorPFUwNDU5PiAiPENZUi1FTD48Q1lSLVNJR01PVUlMPiI7IjxMSUc+PExJRz4iOyI8TUlOPjxNSU4+IjtJR05PUkUgJSBDWVItTEpFCityZW9yZGVyLWFmdGVyIDxVMDQzRD4KKzxVMDQ1QT4gIjxDWVItRU4+PENZUi1TSUdNT1VJTD4iOyI8TElHPjxMSUc+IjsiPE1JTj48TUlOPiI7SUdOT1JFICUgQ1lSLU5KRQorcmVvcmRlci1hZnRlciA8VTA0NDM+Cis8VTA0NUU+IDxDWVItT1U+OzxDWVItT1VCUkU+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTA0NDc+Cis8VTA0NUI+IDxDWVItQ0hFPjs8Q1lSLVRTSEU+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTA0MTM+Cis8VTA0MDM+IDxDWVItR0hFPjs8Q1lSLUdaSEU+OzxDQVA+O0lHTk9SRSAlIE1hYy4gZ2plCityZW9yZGVyLWFmdGVyIDxVMDQxND4KKzxVMDQwMj4gIjxDWVItREU+PENZUi1aSEU+IjsiPExJRz48TElHPiI7IjxDQVA+PENBUD4iO0lHTk9SRSAlIENZUi1ESkUKKzxVMDQwRj4gIjxDWVItREU+PENZUi1aSEU+IjsiPENZUi1EQ0hFPjxMSUc+IjsiPENBUD48Q0FQPiI7SUdOT1JFICUgQ1lSLURDSEUKKzxVMDQwNT4gIjxDWVItREU+PENZUi1aRT4iOyI8TElHPjxMSUc+IjsiPENBUD48Q0FQPiI7SUdOT1JFICUgQ1lSLURaRQorcmVvcmRlci1hZnRlciA8VTA0MTU+Cis8VTA0MDQ+IDxDWVItSUU+OzxVS1ItSUU+OzxDQVA+O0lHTk9SRQorPFUwNDAxPiA8Q1lSLUlFPjs8Q1lSLUlPPjs8Q0FQPjtJR05PUkUKKzxVMDQyRD4gPENZUi1JRT47PENZUi1FPjs8Q0FQPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwNDE4PgorPFUwNDU2PiA8Q1lSLUk+OzxVS1ItST47PENBUD47SUdOT1JFCis8VTA0MDc+IDxDWVItST47PFVLUi1ZST47PENBUD47SUdOT1JFCis8VTA0MkI+IDxDWVItST47PENZUi1ZRVJPVT47PENBUD47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDQxOT4KKzxVMDQwOD4gPENZUi1JQlJFPjs8Q1lSLUpFPjs8Q0FQPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwNDFBPgorPFUwNDBDPiA8Q1lSLUtBPjs8Q1lSLUtKRT47PENBUD47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDQxQj4KKzxVMDQwOT4gIjxDWVItRUw+PENZUi1TSUdNT1VJTD4iOyI8TElHPjxMSUc+IjsiPENBUD48Q0FQPiI7SUdOT1JFICUgQ1lSLUxKRQorcmVvcmRlci1hZnRlciA8VTA0MUQ+Cis8VTA0MEE+ICI8Q1lSLUVOPjxDWVItU0lHTU9VSUw+IjsiPExJRz48TElHPiI7IjxDQVA+PENBUD4iO0lHTk9SRSAlIENZUi1OSkUKK3Jlb3JkZXItYWZ0ZXIgPFUwNDIzPgorPFUwNDBFPiA8Q1lSLU9VPjs8Q1lSLU9VQlJFPjs8Q0FQPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwNDI3PgorPFUwNDBCPiA8Q1lSLUNIRT47PENZUi1UU0hFPjs8Q0FQPjtJR05PUkUKK3Jlb3JkZXItZW5kCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgICAgICAiPFUwMDQyPjxVMDA0Nz48VTAwNEU+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICAgIjxVMDQzQj48VTA0MzI+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICAgICAiPFUwMDJDPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAgICAgIjxVMDBBMD4iCittb25fZ3JvdXBpbmcgICAgICAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDAKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgICAgICAwCituX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgICAgICAxCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludCAgICAgICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgICAgIiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgICAgMzszCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCitkX3RfZm10ICAgICI8VTAwMjU+PFUwMDc4PjxVMDAyMD48VTAwMjg+PFUwMDI1PjxVMDA2MT48VTAwMjk+PFUwMDIwPi8KKzxVMDAyNT48VTAwNTg+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAgICAiPFUwMDI1PjxVMDA2NT48VTAwMkU+PFUwMDI1PjxVMDA2RD48VTAwMkU+PFUwMDI1PjxVMDA1OT4iCit0X2ZtdCAgICAgICI8VTAwMjU+PFUwMDZCPjxVMDAyQz48VTAwMjU+PFUwMDREPjxVMDAyQz48VTAwMjU+PFUwMDUzPiIKK2FtX3BtICAgICAgIiI7IiIKK3RfZm10X2FtcG0gIjxVMDAyNT48VTAwNkM+PFUwMDJDPjxVMDAyNT48VTAwNEQ+PFUwMDJDPjxVMDAyNT48VTAwNTM+IgorZGF0ZV9mbXQgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCislCitmaXJzdF93ZWVrZGF5IDIKK2ZpcnN0X3dvcmtkYXkgMgorYWJkYXkgIjxVMDQzRD48VTA0MzQ+IjsvCisgICAgICAiPFUwNDNGPjxVMDQzRD4iOy8KKyAgICAgICI8VTA0MzI+PFUwNDQyPiI7LworICAgICAgIjxVMDQ0MT48VTA0NDA+IjsvCisgICAgICAiPFUwNDQ3PjxVMDQ0Mj4iOy8KKyAgICAgICI8VTA0M0Y+PFUwNDQyPiI7LworICAgICAgIjxVMDQ0MT48VTA0MzE+IgorZGF5ICI8VTA0M0Q+PFUwNDM1PjxVMDQzND48VTA0MzU+PFUwNDNCPjxVMDQ0Rj4iOy8KKyAgICAiPFUwNDNGPjxVMDQzRT48VTA0M0Q+PFUwNDM1PjxVMDQzND48VTA0MzU+PFUwNDNCPjxVMDQzRD48VTA0Mzg+PFUwNDNBPiI7LworICAgICI8VTA0MzI+PFUwNDQyPjxVMDQzRT48VTA0NDA+PFUwNDNEPjxVMDQzOD48VTA0M0E+IjsvCisgICAgIjxVMDQ0MT48VTA0NDA+PFUwNDRGPjxVMDQzND48VTA0MzA+IjsvCisgICAgIjxVMDQ0Nz48VTA0MzU+PFUwNDQyPjxVMDQzMj48VTA0NEE+PFUwNDQwPjxVMDQ0Mj48VTA0NEE+PFUwNDNBPiI7LworICAgICI8VTA0M0Y+PFUwNDM1PjxVMDQ0Mj48VTA0NEE+PFUwNDNBPiI7LworICAgICI8VTA0NDE+PFUwNDRBPjxVMDQzMT48VTA0M0U+PFUwNDQyPjxVMDQzMD4iCithYm1vbiAiPFUwNDRGPjxVMDQzRD48VTA0NDM+IjsvCisgICAgICAiPFUwNDQ0PjxVMDQzNT48VTA0MzI+IjsvCisgICAgICAiPFUwNDNDPjxVMDQzMD48VTA0NDA+IjsvCisgICAgICAiPFUwNDMwPjxVMDQzRj48VTA0NDA+IjsvCisgICAgICAiPFUwNDNDPjxVMDQzMD48VTA0Mzk+IjsvCisgICAgICAiPFUwNDRFPjxVMDQzRD48VTA0Mzg+IjsvCisgICAgICAiPFUwNDRFPjxVMDQzQj48VTA0Mzg+IjsvCisgICAgICAiPFUwNDMwPjxVMDQzMj48VTA0MzM+IjsvCisgICAgICAiPFUwNDQxPjxVMDQzNT48VTA0M0Y+IjsvCisgICAgICAiPFUwNDNFPjxVMDQzQT48VTA0NDI+IjsvCisgICAgICAiPFUwNDNEPjxVMDQzRT48VTA0MzU+IjsvCisgICAgICAiPFUwNDM0PjxVMDQzNT48VTA0M0E+IgorbW9uICI8VTA0NEY+PFUwNDNEPjxVMDQ0Mz48VTA0MzA+PFUwNDQwPjxVMDQzOD4iOy8KKyAgICAiPFUwNDQ0PjxVMDQzNT48VTA0MzI+PFUwNDQwPjxVMDQ0Mz48VTA0MzA+PFUwNDQwPjxVMDQzOD4iOy8KKyAgICAiPFUwNDNDPjxVMDQzMD48VTA0NDA+PFUwNDQyPiI7LworICAgICI8VTA0MzA+PFUwNDNGPjxVMDQ0MD48VTA0Mzg+PFUwNDNCPiI7LworICAgICI8VTA0M0M+PFUwNDMwPjxVMDQzOT4iOy8KKyAgICAiPFUwNDRFPjxVMDQzRD48VTA0Mzg+IjsvCisgICAgIjxVMDQ0RT48VTA0M0I+PFUwNDM4PiI7LworICAgICI8VTA0MzA+PFUwNDMyPjxVMDQzMz48VTA0NDM+PFUwNDQxPjxVMDQ0Mj4iOy8KKyAgICAiPFUwNDQxPjxVMDQzNT48VTA0M0Y+PFUwNDQyPjxVMDQzNT48VTA0M0M+PFUwNDMyPjxVMDQ0MD48VTA0Mzg+IjsvCisgICAgIjxVMDQzRT48VTA0M0E+PFUwNDQyPjxVMDQzRT48VTA0M0M+PFUwNDMyPjxVMDQ0MD48VTA0Mzg+IjsvCisgICAgIjxVMDQzRD48VTA0M0U+PFUwNDM1PjxVMDQzQz48VTA0MzI+PFUwNDQwPjxVMDQzOD4iOy8KKyAgICAiPFUwNDM0PjxVMDQzNT48VTA0M0E+PFUwNDM1PjxVMDQzQz48VTA0MzI+PFUwNDQwPjxVMDQzOD4iCisKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDAyQj48VTAwMzE+PFUwNDE0PjxVMDQzND48VTAwNDQ+PFUwMDY0PjxVMDA1OT48VTAwNzk+PFUwMDRGPjxVMDA2Rj48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDAyRD48VTAwMzA+PFUwNDFEPjxVMDQzRD48VTAwNEU+PFUwMDZFPjxVMDA0Qj48VTAwNkI+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCitoZWlnaHQgICAyOTcKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX05BTUUKK25hbWVfZm10ICAiPFUwMDI1PjxVMDA3Mz48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCituYW1lX21yICAgIjxVMDQzMz48VTAwMkQ+PFUwNDM0PjxVMDQzOD48VTA0M0Q+IgorbmFtZV9tcyAgICI8VTA0MzM+PFUwMDJEPjxVMDQzNj48VTA0MzA+IgorbmFtZV9tcnMgICI8VTA0MzM+PFUwMDJEPjxVMDQzNj48VTA0MzA+IgorbmFtZV9taXNzICI8VTA0MzM+PFUwMDJEPjxVMDQzNj48VTA0Mzg+PFUwNDQ2PjxVMDQzMD4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwNEU+PFUwMDI1PjxVMDA2OD48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X25hbWUgIjxVMDA0Mj48VTAwNzU+PFUwMDZDPjxVMDA2Nz48VTAwNjE+PFUwMDcyPjxVMDA2OT48VTAwNjE+IgorY291bnRyeV9wb3N0ICI8VTAwNDI+PFUwMDQ3PiIKK2NvdW50cnlfYWIyICAiPFUwMDQyPjxVMDA0Nz4iCitjb3VudHJ5X2FiMyAgIjxVMDA0Mj48VTAwNDc+PFUwMDUyPiIKK2NvdW50cnlfbnVtICAgMTAwCitjb3VudHJ5X2NhciAgIjxVMDA0Mj48VTAwNDc+IgorY291bnRyeV9pc2JuICA5NTQKK2xhbmdfbmFtZSAgICAiPFUwMDQyPjxVMDA3NT48VTAwNkM+PFUwMDY3PjxVMDA2MT48VTAwNzI+PFUwMDY5PjxVMDA2MT48VTAwNkU+IgorbGFuZ19hYiAgICAgICI8VTAwNjI+PFUwMDY3PiIKK2xhbmdfdGVybSAgICAiPFUwMDYyPjxVMDA3NT48VTAwNkM+IgorRU5EIExDX0FERFJFU1MKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAiPFUwMDI4PjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyOT48VTAwMjA+PFUwMDI1PjxVMDA2Qz4iCit0ZWxfZG9tX2ZtdCAiPFUwMDI4PjxVMDAzMD48VTAwMjU+PFUwMDYxPjxVMDAyOT48VTAwMjA+PFUwMDI1PjxVMDA2Qz4iCitpbnRfcHJlZml4ICAiPFUwMDMzPjxVMDAzNT48VTAwMzk+IgoraW50X3NlbGVjdCAgIjxVMDAzMD48VTAwMzA+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ibl9CRCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2JuX0JECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYmU0N2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ibl9CRApAQCAtMCwwICsxLDE3NyBAQAorZXNjYXBlX2NoYXIgLworY29tbWVudF9jaGFyICUKKworJQlUaGlzIGlzIHRoZSBsb2NhbGUgZGVmaW5hdGlvbiBmaWxlIGZvciBCYW5nbGFkZXNoaSBCZW5nYWxpCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJCZW5nYWxpL0JhbmdsYSBsYW5ndWFnZSBsb2NhbGUgZm9yIEJhbmdsYWRlc2giCitzb3VyY2UgICAgICJBbmt1ciBHcm91cCwgaHR0cDovL3d3dy5hbmt1cmJhbmdsYS5vcmcsIGh0dHA6Ly93d3cuYmVuZ2FsaW51eC5vcmciCithZGRyZXNzICAgICJEaGFrYSwgQmFuZ2xhZGVzaCIKK2NvbnRhY3QgICAgIlRhbmVlbSBBaG1lZCwgSmFtaWwgQWhtZWQiCitlbWFpbCAgICAgICJ0YW5lZW1AYmVuZ2FsaW51eC5vcmcsIGphbWlsQGJlbmdhbGludXgub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiQmVuZ2FsaS9CYW5nbGEiCit0ZXJyaXRvcnkgICJCYW5nbGFkZXNoIgorcmV2aXNpb24gICAiMC41IgorZGF0ZSAgICAgICAiMjAwNy0wMS0xMCIKKworY2F0ZWdvcnkgImJuX0JEOjIwMDEiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAiYm5fQkQ6MjAwMSI7TENfQ09MTEFURQorY2F0ZWdvcnkgImJuX0JEOjIwMDEiO0xDX0NUWVBFCitjYXRlZ29yeSAiYm5fQkQ6MjAwMSI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICJibl9CRDoyMDAxIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgImJuX0JEOjIwMDEiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICJibl9CRDoyMDAxIjtMQ19USU1FCitjYXRlZ29yeSAiYm5fQkQ6MjAwMSI7TENfUEFQRVIKK2NhdGVnb3J5ICJibl9CRDoyMDAxIjtMQ19NRUFTVVJFTUVOVAorY2F0ZWdvcnkgImJuX0JEOjIwMDEiO0xDX1RFTEVQSE9ORQorY2F0ZWdvcnkgImJuX0JEOjIwMDEiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICJibl9CRDoyMDAxIjtMQ19OQU1FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DT0xMQVRFCislIFRPRE86IEJlbmdhbGkgc29ydGluZyBzaG91bGQgYmUgYWRkZWQKK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19NT05FVEFSWQorJXRoaXMgaXMgdGhlIHRha2Egc2lnbgorY3VycmVuY3lfc3ltYm9sICAgICAgIjxVMDlGMz4iCitpbnRfY3Vycl9zeW1ib2wgICAgICAiPFUwMDQyPjxVMDA0ND48VTAwNTQ+PFUwMDIwPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAzOzIKK3Bvc2l0aXZlX3NpZ24gICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgICAgIjxVMDAyQz4iCitncm91cGluZyAgICAgICAgICAgICAzOzIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgICAgICI8VTA5QjA+PFUwOUFDPjxVMDlCRj4iOyAvCisgICAgICAgICAgICAiPFUwOUI4PjxVMDlDQj48VTA5QUU+IjsvCisgICAgICAgICAgICAiPFUwOUFFPjxVMDk5OT48VTA5Q0Q+PFUwOTk3PjxVMDlCMj4iOy8KKyAgICAgICAgICAgICI8VTA5QUM+PFUwOUMxPjxVMDlBNz4iOy8KKyAgICAgICAgICAgICI8VTA5QUM+PFUwOUMzPjxVMDlCOT48VTA5ODM+IjsvCisgICAgICAgICAgICAiPFUwOUI2PjxVMDlDMT48VTA5OTU+PFUwOUNEPjxVMDlCMD4iOy8KKyAgICAgICAgICAgICI8VTA5QjY+PFUwOUE4PjxVMDlCRj4iCisKK2RheSAgICAgICAgICI8VTA5QjA+PFUwOUFDPjxVMDlCRj48VTA5QUM+PFUwOUJFPjxVMDlCMD4iOy8KKyAgICAgICAgICAgICI8VTA5Qjg+PFUwOUNCPjxVMDlBRT48VTA5QUM+PFUwOUJFPjxVMDlCMD4iOy8KKyAgICAgICAgICAgICI8VTA5QUU+PFUwOTk5PjxVMDlDRD48VTA5OTc+PFUwOUIyPjxVMDlBQz48VTA5QkU+PFUwOUIwPiI7LworICAgICAgICAgICAgIjxVMDlBQz48VTA5QzE+PFUwOUE3PjxVMDlBQz48VTA5QkU+PFUwOUIwPiI7LworICAgICAgICAgICAgIjxVMDlBQz48VTA5QzM+PFUwOUI5PjxVMDlCOD48VTA5Q0Q+PFUwOUFBPjxVMDlBND48VTA5QkY+PFUwOUFDPjxVMDlCRT48VTA5QjA+IjsvCisgICAgICAgICAgICAiPFUwOUI2PjxVMDlDMT48VTA5OTU+PFUwOUNEPjxVMDlCMD48VTA5QUM+PFUwOUJFPjxVMDlCMD4iOy8KKyAgICAgICAgICAgICI8VTA5QjY+PFUwOUE4PjxVMDlCRj48VTA5QUM+PFUwOUJFPjxVMDlCMD4iCisKKyVqYW51IGZlYnJ1IG1hcmNoIGFwcmkgbWF5IGp1biBqdWwgYXVnIHNlcHRlIG9jdG8gbm92ZSBkZWNlCithYm1vbiAgICAgICAiPFUwOTlDPjxVMDlCRT48VTA5QTg+PFUwOUMxPiI7LworICAgICAgICAgICAgIjxVMDlBQj48VTA5Qzc+PFUwOUFDPjxVMDlDRD48VTA5QjA+PFUwOUMxPiI7LworICAgICAgICAgICAgIjxVMDlBRT48VTA5QkU+PFUwOUIwPjxVMDlDRD48VTA5OUE+IjsvCisgICAgICAgICAgICAiPFUwOThGPjxVMDlBQT48VTA5Q0Q+PFUwOUIwPjxVMDlCRj4iOy8KKyAgICAgICAgICAgICI8VTA5QUU+PFUwOUM3PiI7LworICAgICAgICAgICAgIjxVMDk5Qz48VTA5QzE+PFUwOUE4PiI7LworICAgICAgICAgICAgIjxVMDk5Qz48VTA5QzE+PFUwOUIyPiI7LworICAgICAgICAgICAgIjxVMDk4Nj48VTA5OTc+IjsvCisgICAgICAgICAgICAiPFUwOUI4PjxVMDlDNz48VTA5QUE+PFUwOUNEPjxVMDk5Rj48VTA5Qzc+IjsvCisgICAgICAgICAgICAiPFUwOTg1PjxVMDk5NT48VTA5Q0Q+PFUwOTlGPjxVMDlDQj4iOy8KKyAgICAgICAgICAgICI8VTA5QTg+PFUwOUFEPjxVMDlDNz4iOy8KKyAgICAgICAgICAgICI8VTA5QTE+PFUwOUJGPjxVMDlCOD48VTA5Qzc+IgorCittb24gICAgICAgICAiPFUwOTlDPjxVMDlCRT48VTA5QTg+PFUwOUMxPjxVMDlERj48VTA5QkU+PFUwOUIwPjxVMDlCRj4iOy8KKyAgICAgICAgICAgICI8VTA5QUI+PFUwOUM3PjxVMDlBQz48VTA5Q0Q+PFUwOUIwPjxVMDlDMT48VTA5REY+PFUwOUJFPjxVMDlCMD48VTA5QkY+IjsvCisgICAgICAgICAgICAiPFUwOUFFPjxVMDlCRT48VTA5QjA+PFUwOUNEPjxVMDk5QT4iOy8KKyAgICAgICAgICAgICI8VTA5OEY+PFUwOUFBPjxVMDlDRD48VTA5QjA+PFUwOUJGPjxVMDlCMj4iOy8KKyAgICAgICAgICAgICI8VTA5QUU+PFUwOUM3PiI7LworICAgICAgICAgICAgIjxVMDk5Qz48VTA5QzE+PFUwOUE4PiI7LworICAgICAgICAgICAgIjxVMDk5Qz48VTA5QzE+PFUwOUIyPjxVMDlCRT48VTA5ODc+IjsvCisgICAgICAgICAgICAiPFUwOTg2PjxVMDk5Nz48VTA5Qjg+PFUwOUNEPjxVMDk5Rj4iOy8KKyAgICAgICAgICAgICI8VTA5Qjg+PFUwOUM3PjxVMDlBQT48VTA5Q0Q+PFUwOTlGPjxVMDlDNz48VTA5QUU+PFUwOUNEPjxVMDlBQz48VTA5QjA+IjsvCisgICAgICAgICAgICAiPFUwOTg1PjxVMDk5NT48VTA5Q0Q+PFUwOTlGPjxVMDlDQj48VTA5QUM+PFUwOUIwPiI7LworICAgICAgICAgICAgIjxVMDlBOD48VTA5QUQ+PFUwOUM3PjxVMDlBRT48VTA5Q0Q+PFUwOUFDPjxVMDlCMD4iOy8KKyAgICAgICAgICAgICI8VTA5QTE+PFUwOUJGPjxVMDlCOD48VTA5Qzc+PFUwOUFFPjxVMDlDRD48VTA5QUM+PFUwOUIwPiIKKworYW1fcG0gICAgICAgIjxVMDlBQT48VTA5QzI+PFUwOUIwPjxVMDlDRD48VTA5QUM+PFUwOUJFPjxVMDlCOT48VTA5Q0Q+PFUwOUEzPiI7IjxVMDk4NT48VTA5QUE+PFUwOUIwPjxVMDlCRT48VTA5Qjk+PFUwOUNEPjxVMDlBMz4iCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA0MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA0MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCit0X2ZtdCAgICAgICAiPFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgordF9mbXRfYW1wbSAgIjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNzA+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorRU5EIExDX1RJTUUKKworTENfTUVTU0FHRVMKK3llc2V4cHIgICAgICI8VTAwNUU+PFUwMDVCPjxVMDlCOT48VTA5Q0Q+PFUwOUFGPjxVMDlCRT48VTA5ODE+PFUwMDc5PjxVMDA1OT48VTAwNUQ+Igorbm9leHByICAgICAgIjxVMDA1RT48VTAwNUI+PFUwOUE4PjxVMDlCRT48VTAwNkU+PFUwMDRFPjxVMDA1RD4iCit5ZXNzdHIgICAgICAiPFUwOUI5PjxVMDlDRD48VTA5QUY+PFUwOUJFPjxVMDk4MT4iCitub3N0ciAgICAgICAiPFUwOUE4PjxVMDlCRT4iCitFTkQgTENfTUVTU0FHRVMKKworJSBNZXRyaWMgTWVhc3VyZW1lbnQgc3lzdGVtIChJU08gMTAwMCkKK0xDX01FQVNVUkVNRU5UCittZWFzdXJlbWVudCAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworJSBEZWZhdWx0IHBhcGVyOiBBNAorTENfUEFQRVIKK2hlaWdodCAyOTcKK3dpZHRoIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNkM+IgordGVsX2RvbV9mbXQgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Qz4iCitpbnRfc2VsZWN0ICAgICI8VTAwMzA+PFUwMDMwPiIKK2ludF9wcmVmaXggICAgIjxVMDAzOD48VTAwMzg+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19OQU1FCislICAgICAgICAgICBbcHJvZmVzc2lvbl0gR2l2ZW5fTmFtZSBbbWlkZGxlX25hbWVdIEZhbWlseV9OYW1lCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA3MD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz4iCituYW1lX2dlbiAgICAiIgorJWpvbmFiCituYW1lX21yICAgICAiPFUwOTljPjxVMDlhOD48VTA5YmU+PFUwOWFjPiIKKyViZWdvbQorbmFtZV9tcnMgICAgIjxVMDlBQz48VTA5Qzc+PFUwOTk3PjxVMDlBRT4iCituYW1lX21zICAgICAiPFUwOUFDPjxVMDlDNz48VTA5OTc+PFUwOUFFPiIKK25hbWVfbWlzcyAgICI8VTA5QUM+PFUwOUM3PjxVMDk5Nz48VTA5QUU+IgorRU5EIExDX05BTUUKKworCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDczPjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X25hbWUgICAgIjxVMDlBQz48VTA5QkU+PFUwOTgyPjxVMDlCMj48VTA5QkU+PFUwOUE2PjxVMDlDNz48VTA5QjY+IgorY291bnRyeV9hYjIgICAgICI8VTAwNDI+PFUwMDQ0PiIKK2NvdW50cnlfYWIzICAgICAiPFUwMDQyPjxVMDA0Nz48VTAwNDQ+IgorbGFuZ19hYiAgICAgICAgICI8VTAwNjI+PFUwMDZFPiIKKyVsYW5nX2FiM190ZXJtICAgImJlbiIKK2xhbmdfbmFtZSAgICAgICAiPFUwOWFjPjxVMDliZT48VTA5ODI+PFUwOWIyPjxVMDliZT4iCislIHRvZG8KKyVjb3VudHJ5X3Bvc3QgICAiIgorY291bnRyeV9udW0gICAgIDA1MAorJWNvdW50cnlfY2FyICAgICIiCislY291bnRyeV9pc2JuICAgIiIKKyVsYW5nX3Rlcm0gICAgICAiIgorJWxhbmdfbGliICAgICAgICIiCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYm5fSU4gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ibl9JTgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTc5MmFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYm5fSU4KQEAgLTAsMCArMSwxOTUgQEAKK2NvbW1lbnRfY2hhciAgICAlCitlc2NhcGVfY2hhciAgICAgLworCislIExhc3QgVXBkYXRlIGJ5IFJ1bmEgQmhhdHRhY2hhcmplZSA8cnVuYWJAcmVkaGF0LmNvbT4KKworTENfSURFTlRJRklDQVRJT04KKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfSURFTlRJRklDQVRJT04KKyUgY2F0ZWdvcnkgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KKyUKK3RpdGxlICAgICAgICJCZW5nYWxpIGxhbmd1YWdlIGxvY2FsZSBmb3IgSW5kaWEiCitzb3VyY2UgICAgICJJQk0gR2xvYmFsaXphdGlvbiBDZW50ZXIgb2YgQ29tcGV0ZW5jeSwgWWFtYXRvIFNvZnR3YXJlIExhYm9yYXRvcnkiCithZGRyZXNzICAgICIxNjIzLTE0LCBTaGltb3RzdXJ1bWEsIFlhbWF0by1zaGksIEthbmFnYXdhLWtlbiwgMjQyLTg1MDIsIEphcGFuIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgICIiCitmYXggICAgICAgICAiIgorbGFuZ3VhZ2UgICAgIkJlbmdhbGkiCit0ZXJyaXRvcnkgICAiSW5kaWEiCityZXZpc2lvbiAgICAiMS4wIgorZGF0ZSAgICAgICAgIjIwMDYtMDUtMjkiCislCitjYXRlZ29yeSAgImJuX0lOOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImJuX0lOOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImJuX0lOOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiYm5fSU46MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJibl9JTjoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImJuX0lOOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImJuX0lOOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImJuX0lOOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImJuX0lOOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiYm5fSU46MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJibl9JTjoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKKworTENfQ1RZUEUKK2NvcHkgImJuX0JEIgorRU5EIExDX0NUWVBFCisKKworTENfQ09MTEFURQorJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEKK2NvcHkgImlzbzE0NjUxX3QxIgorCislCitFTkQgTENfQ09MTEFURQorCisKK0xDX01PTkVUQVJZCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIHRoZSBMQ19NT05FVEFSWSBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkZWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlLgorJQoraW50X2N1cnJfc3ltYm9sICAgICAgICI8VTAwNDk+PFUwMDRFPjxVMDA1Mj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICI8VTA5OUY+PFUwOUJFPjxVMDk5NT48VTA5QkU+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgIDI7MworcG9zaXRpdmVfc2lnbiAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgIDEKKyUKK0VORCBMQ19NT05FVEFSWQorCisKK0xDX05VTUVSSUMKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OVU1FUklDICBjYXRlZ29yeS4KKyUKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgIjxVMDAyRT4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICI8VTAwMkM+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAzOzIKKyUKK0VORCBMQ19OVU1FUklDCisKKworTENfVElNRQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX1RJTUUgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS4KKyUKKyUgQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyAoJWEpCithYmRheSAgICAgICAiPFUwOUIwPjxVMDlBQz48VTA5QkY+IjsiPFUwOUI4PjxVMDlDQj48VTA5QUU+IjsvCisgICAgICAgICAgICAiPFUwOUFFPjxVMDk5OT48VTA5Q0Q+PFUwOTk3PjxVMDlCMj4iOyI8VTA5QUM+PFUwOUMxPjxVMDlBNz4iOy8KKyAgICAgICAgICAgICI8VTA5QUM+PFUwOUMzPjxVMDlCOT48VTA5Qjg+PFUwOUNEPjxVMDlBQT48VTA5QTQ+PFUwOUJGPiI7IjxVMDlCNj48VTA5QzE+PFUwOTk1PjxVMDlDRD48VTA5QjA+IjsvCisgICAgICAgICAgICAiPFUwOUI2PjxVMDlBOD48VTA5QkY+IgorCislCislIEZ1bGwgd2Vla2RheSBuYW1lcyAoJUEpCitkYXkgICAgICAgICAiPFUwOUIwPjxVMDlBQz48VTA5QkY+PFUwOUFDPjxVMDlCRT48VTA5QjA+IjsiPFUwOUI4PjxVMDlDQj48VTA5QUU+PFUwOUFDPjxVMDlCRT48VTA5QjA+IjsvCisgICAgICAgICAgICAiPFUwOUFFPjxVMDk5OT48VTA5Q0Q+PFUwOTk3PjxVMDlCMj48VTA5QUM+PFUwOUJFPjxVMDlCMD4iOyI8VTA5QUM+PFUwOUMxPjxVMDlBNz48VTA5QUM+PFUwOUJFPjxVMDlCMD4iOy8KKyAgICAgICAgICAgICI8VTA5QUM+PFUwOUMzPjxVMDlCOT48VTA5Qjg+PFUwOUNEPjxVMDlBQT48VTA5QTQ+PFUwOUJGPjxVMDlBQz48VTA5QkU+PFUwOUIwPiI7LworICAgICAgICAgICAgIjxVMDlCNj48VTA5QzE+PFUwOTk1PjxVMDlDRD48VTA5QjA+PFUwOUFDPjxVMDlCRT48VTA5QjA+IjsiPFUwOUI2PjxVMDlBOD48VTA5QkY+PFUwOUFDPjxVMDlCRT48VTA5QjA+IgorCislCislIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzICglYikKK2FibW9uICAgICAgICI8VTA5OUM+PFUwOUJFPjxVMDlBOD48VTA5QzE+PFUwOURGPjxVMDlCRT48VTA5QjA+PFUwOUJGPiI7LworICAgICAgICAgICAgIjxVMDlBQj48VTA5Qzc+PFUwOUFDPjxVMDlDRD48VTA5QjA+PFUwOUMxPjxVMDlERj48VTA5QkU+PFUwOUIwPjxVMDlCRj4iOy8KKyAgICAgICAgICAgICI8VTA5QUU+PFUwOUJFPjxVMDlCMD48VTA5Q0Q+PFUwOTlBPiI7IjxVMDk4Rj48VTA5QUE+PFUwOUNEPjxVMDlCMD48VTA5QkY+PFUwOUIyPiI7LworICAgICAgICAgICAgIjxVMDlBRT48VTA5Qzc+IjsiPFUwOTlDPjxVMDlDMT48VTA5QTg+IjsvCisgICAgICAgICAgICAiPFUwOTlDPjxVMDlDMT48VTA5QjI+PFUwOUJFPjxVMDk4Nz4iOyI8VTA5ODY+PFUwOTk3PjxVMDlCOD48VTA5Q0Q+PFUwOTlGPiI7LworICAgICAgICAgICAgIjxVMDlCOD48VTA5Qzc+PFUwOUFBPjxVMDlDRD48VTA5OUY+PFUwOUM3PjxVMDlBRT48VTA5Q0Q+PFUwOUFDPjxVMDlCMD4iOy8KKyAgICAgICAgICAgICI8VTA5ODU+PFUwOTk1PjxVMDlDRD48VTA5OUY+PFUwOUNCPjxVMDlBQz48VTA5QjA+IjsvCisgICAgICAgICAgICAiPFUwOUE4PjxVMDlBRD48VTA5Qzc+PFUwOUFFPjxVMDlDRD48VTA5QUM+PFUwOUIwPiI7LworICAgICAgICAgICAgIjxVMDlBMT48VTA5QkY+PFUwOUI4PjxVMDlDNz48VTA5QUU+PFUwOUNEPjxVMDlBQz48VTA5QjA+IgorCislCislIEZ1bGwgbW9udGggbmFtZXMgKCVCKQorbW9uICAgICAgICAgIjxVMDk5Qz48VTA5QkU+PFUwOUE4PjxVMDlDMT48VTA5REY+PFUwOUJFPjxVMDlCMD48VTA5QkY+IjsvCisgICAgICAgICAgICAiPFUwOUFCPjxVMDlDNz48VTA5QUM+PFUwOUNEPjxVMDlCMD48VTA5QzE+PFUwOURGPjxVMDlCRT48VTA5QjA+PFUwOUJGPiI7LworICAgICAgICAgICAgIjxVMDlBRT48VTA5QkU+PFUwOUIwPjxVMDlDRD48VTA5OUE+IjsiPFUwOThGPjxVMDlBQT48VTA5Q0Q+PFUwOUIwPjxVMDlCRj48VTA5QjI+IjsvCisgICAgICAgICAgICAiPFUwOUFFPjxVMDlDNz4iOyI8VTA5OUM+PFUwOUMxPjxVMDlBOD4iOy8KKyAgICAgICAgICAgICI8VTA5OUM+PFUwOUMxPjxVMDlCMj48VTA5QkU+PFUwOTg3PiI7IjxVMDk4Nj48VTA5OTc+PFUwOUI4PjxVMDlDRD48VTA5OUY+IjsvCisgICAgICAgICAgICAiPFUwOUI4PjxVMDlDNz48VTA5QUE+PFUwOUNEPjxVMDk5Rj48VTA5Qzc+PFUwOUFFPjxVMDlDRD48VTA5QUM+PFUwOUIwPiI7LworICAgICAgICAgICAgIjxVMDk4NT48VTA5OTU+PFUwOUNEPjxVMDk5Rj48VTA5Q0I+PFUwOUFDPjxVMDlCMD4iOy8KKyAgICAgICAgICAgICI8VTA5QTg+PFUwOUFEPjxVMDlDNz48VTA5QUU+PFUwOUNEPjxVMDlBQz48VTA5QjA+IjsvCisgICAgICAgICAgICAiPFUwOUExPjxVMDlCRj48VTA5Qjg+PFUwOUM3PjxVMDlBRT48VTA5Q0Q+PFUwOUFDPjxVMDlCMD4iCisKKyUKKyUgRXF1aXZhbGVudCBvZiBBTSBQTQorYW1fcG0gICAgICAgIjxVMDlBQT48VTA5QzI+PFUwOUIwPjxVMDlDRD48VTA5QUM+PFUwOUJFPjxVMDlCOT48VTA5Q0Q+PFUwOUEzPiI7LworICAgICAgICAgICAgIjxVMDk4NT48VTA5QUE+PFUwOUIwPjxVMDlCRT48VTA5Qjk+PFUwOUNEPjxVMDlBMz4iCisKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbgorJSAlQSAlZCAlYiAlWSAlSTolTTolUyAgJVoKK2RfdF9mbXQgICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbgorJSAlQSAlZCAlYiAlWQorZF9mbXQgICAgICAgIjxVMDAyNT48VTAwNDE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorJQorJSBBcHByb3ByaWF0ZSB0aW1lIHJlcHJlc2VudGF0aW9uCislICVJOiVNOiVTICAlWgordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKKyUgQXBwcm9wcmlhdGUgMTIgaCB0aW1lIHJlcHJlc2VudGF0aW9uICglcikKK3RfZm10X2FtcG0gICI8VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKK0VORCBMQ19USU1FCisKKworTENfTUVTU0FHRVMKK2NvcHkgImJuX0JEIgorRU5EIExDX01FU1NBR0VTCisKKworJSBEZWZhdWx0IHBhcGVyOiBBNAorTENfUEFQRVIKK2NvcHkgImhpX0lOIgorRU5EIExDX1BBUEVSCisKKworTENfTkFNRQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OQU1FIGNhdGVnb3J5CislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCislCislCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA3MD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PiIKK25hbWVfZ2VuICAgICIiCituYW1lX21yICAgICAiPFUwOUI2PjxVMDlDRD48VTA5QjA+PFUwOUMwPiIKK25hbWVfbXJzICAgICI8VTA5QjY+PFUwOUNEPjxVMDlCMD48VTA5QzA+PFUwOUFFPjxVMDlBND48VTA5QzA+IgorbmFtZV9taXNzICAgIjxVMDk5NT48VTA5QzE+PFUwOUFFPjxVMDlCRT48VTA5QjA+PFUwOUMwPiIKK25hbWVfbXMgICAgICI8VTA5QjY+PFUwOUNEPjxVMDlCMD48VTA5QzA+PFUwOUFFPjxVMDlBND48VTA5QzA+IgorCitFTkQgTENfTkFNRQorCisKK0xDX0FERFJFU1MKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfQUREUkVTUyBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorcG9zdGFsX2ZtdCAgIjxVMDAyNT48VTAwN0E+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDU0PjxVMDAyNT48VTAwNzM+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDY1PjxVMDAyNT48VTAwNzI+IgorY291bnRyeV9hYjIgIjxVMDA0OT48VTAwNEU+IgorY291bnRyeV9hYjMgIjxVMDA0OT48VTAwNEU+PFUwMDQ0PiIKK2NvdW50cnlfbnVtIDM1NgorCitFTkQgTENfQUREUkVTUworCisKK0xDX1RFTEVQSE9ORQorY29weSAiaGlfSU4iCitFTkQgTENfVEVMRVBIT05FCisKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgImhpX0lOIgorRU5EIExDX01FQVNVUkVNRU5UCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ib19DTiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2JvX0NOCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NDA1MDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ib19DTgpAQCAtMCwwICsxLDE3MCBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCisKKyUgVGliZXRhbiBsYW5ndWFnZSBsb2NhbGUgZm9yIFAuUi4gb2YgQ2hpbmEKKyUKKyUgQmFzZWQgb24gZHpfQlQgYnkgUGVtYSBHZXlsZWcKKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlRpYmV0YW4gbGFuZ3VhZ2UgbG9jYWxlIGZvciBQLlIuIG9mIENoaW5hIgorc291cmNlICAgICAiIgorYWRkcmVzcyAgICAiIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJUaWJldGFuIgordGVycml0b3J5ICAiUC5SLiBvZiBDaGluYSIKK3JldmlzaW9uICAgIjAuMSIKK2RhdGUgICAgICAgIjIwMDctMTEtMDYiCislCitjYXRlZ29yeSAgImJvX0NOOjIwMDciO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImJvX0NOOjIwMDciO0xDX0NUWVBFCitjYXRlZ29yeSAgImJvX0NOOjIwMDciO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiYm9fQ046MjAwNyI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJib19DTjoyMDA3IjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJib19DTjoyMDA3IjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJib19DTjoyMDA3IjtMQ19QQVBFUgorY2F0ZWdvcnkgICJib19DTjoyMDA3IjtMQ19OQU1FCitjYXRlZ29yeSAgImJvX0NOOjIwMDciO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiYm9fQ046MjAwNyI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiaTE4biIKKwordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKK2NvcHkgImR6X0JUIgorRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKK2NvcHkgInpoX0NOIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgInpoX0NOIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorYWJkYXkgICAiPFUwRjQ5PjxVMEY3Mj48VTBGMEI+IjsvCisgICAgICAgICI8VTBGNUY+PFUwRkIzPjxVMEYwQj4iOy8KKyAgICAgICAgIjxVMEY1OD48VTBGNzI+PFUwRjYyPjxVMEYwQj4iOy8KKyAgICAgICAgIjxVMEY2Mz48VTBGQjc+PFUwRjQyPjxVMEYwQj4iOy8KKyAgICAgICAgIjxVMEY1ND48VTBGNzQ+PFUwRjYyPjxVMEYwQj4iOy8KKyAgICAgICAgIjxVMEY2Nj48VTBGNDQ+PFUwRjY2PjxVMEYwQj4iOy8KKyAgICAgICAgIjxVMEY2Nj48VTBGQTQ+PFUwRjdBPjxVMEY1Mz48VTBGMEI+IgorCitkYXkgICAgICI8VTBGNDI+PFUwRjVGPjxVMEY2MD48VTBGMEI+PFUwRjQ5PjxVMEY3Mj48VTBGMEI+PFUwRjU4PjxVMEYwQj4iOy8KKyAgICAgICAgIjxVMEY0Mj48VTBGNUY+PFUwRjYwPjxVMEYwQj48VTBGNUY+PFUwRkIzPjxVMEYwQj48VTBGNTY+PFUwRjBCPiI7LworICAgICAgICAiPFUwRjQyPjxVMEY1Rj48VTBGNjA+PFUwRjBCPjxVMEY1OD48VTBGNzI+PFUwRjQyPjxVMEYwQj48VTBGNTE+PFUwRjU4PjxVMEY2Mj48VTBGMEI+IjsvCisgICAgICAgICI8VTBGNDI+PFUwRjVGPjxVMEY2MD48VTBGMEI+PFUwRjYzPjxVMEZCNz48VTBGNDI+PFUwRjBCPjxVMEY1NT48VTBGMEI+IjsvCisgICAgICAgICI8VTBGNDI+PFUwRjVGPjxVMEY2MD48VTBGMEI+PFUwRjU0PjxVMEY3ND48VTBGNjI+PFUwRjBCPjxVMEY1Nj48VTBGNzQ+PFUwRjBCPiI7LworICAgICAgICAiPFUwRjQyPjxVMEY1Rj48VTBGNjA+PFUwRjBCPjxVMEY1ND48VTBGMEI+PFUwRjY2PjxVMEY0ND48VTBGNjY+PFUwRjBCPiI7LworICAgICAgICAiPFUwRjQyPjxVMEY1Rj48VTBGNjA+PFUwRjBCPjxVMEY2Nj48VTBGQTQ+PFUwRjdBPjxVMEY1Mz48VTBGMEI+PFUwRjU1PjxVMEYwQj4iCisKK2FibW9uICAgIjxVMEY1Rj48VTBGQjM+PFUwRjBCPjxVMEYyMT4iOy8KKwkiPFUwRjVGPjxVMEZCMz48VTBGMEI+PFUwRjIyPiI7LworCSI8VTBGNUY+PFUwRkIzPjxVMEYwQj48VTBGMjM+IjsvCisJIjxVMEY1Rj48VTBGQjM+PFUwRjBCPjxVMEYyND4iOy8KKwkiPFUwRjVGPjxVMEZCMz48VTBGMEI+PFUwRjI1PiI7LworCSI8VTBGNUY+PFUwRkIzPjxVMEYwQj48VTBGMjY+IjsvCisJIjxVMEY1Rj48VTBGQjM+PFUwRjBCPjxVMEYyNz4iOy8KKwkiPFUwRjVGPjxVMEZCMz48VTBGMEI+PFUwRjI4PiI7LworCSI8VTBGNUY+PFUwRkIzPjxVMEYwQj48VTBGMjk+IjsvCisJIjxVMEY1Rj48VTBGQjM+PFUwRjBCPjxVMEYyMT48VTBGMjA+IjsvCisJIjxVMEY1Rj48VTBGQjM+PFUwRjBCPjxVMEYyMT48VTBGMjE+IjsvCisJIjxVMEY1Rj48VTBGQjM+PFUwRjBCPjxVMEYyMT48VTBGMjI+IgorCittb24gICAgICAiPFUwRjVGPjxVMEZCMz48VTBGMEI+PFUwRjU2PjxVMEYwQj48VTBGNTE+PFUwRjQ0PjxVMEYwQj48VTBGNTQ+PFUwRjBCPiI7LworICAgICAgICAgIjxVMEY1Rj48VTBGQjM+PFUwRjBCPjxVMEY1Nj48VTBGMEI+PFUwRjQyPjxVMEY0OT48VTBGNzI+PFUwRjY2PjxVMEYwQj48VTBGNTQ+PFUwRjBCPiI7LworICAgICAgICAgIjxVMEY1Rj48VTBGQjM+PFUwRjBCPjxVMEY1Nj48VTBGMEI+PFUwRjQyPjxVMEY2Nj48VTBGNzQ+PFUwRjU4PjxVMEYwQj48VTBGNTQ+PFUwRjBCPiI7LworICAgICAgICAgIjxVMEY1Rj48VTBGQjM+PFUwRjBCPjxVMEY1Nj48VTBGMEI+PFUwRjU2PjxVMEY1RT48VTBGNzI+PFUwRjBCPjxVMEY1ND48VTBGMEI+IjsvCisgICAgICAgICAiPFUwRjVGPjxVMEZCMz48VTBGMEI+PFUwRjU2PjxVMEYwQj48VTBGNjM+PFUwRjk0PjxVMEYwQj48VTBGNTU+PFUwRjBCPiI7LworICAgICAgICAgIjxVMEY1Rj48VTBGQjM+PFUwRjBCPjxVMEY1Nj48VTBGMEI+PFUwRjUxPjxVMEZCMj48VTBGNzQ+PFUwRjQyPjxVMEYwQj48VTBGNTQ+PFUwRjBCPiI7LworICAgICAgICAgIjxVMEY1Rj48VTBGQjM+PFUwRjBCPjxVMEY1Nj48VTBGMEI+PFUwRjU2PjxVMEY1MT48VTBGNzQ+PFUwRjUzPjxVMEY1ND48VTBGMEI+IjsvCisgICAgIjxVMEY1Rj48VTBGQjM+PFUwRjBCPjxVMEY1Nj48VTBGMEI+PFUwRjU2PjxVMEY2Mj48VTBGOTI+PFUwRkIxPjxVMEY1MT48VTBGMEI+PFUwRjU0PjxVMEYwQj4iOy8KKyAgICAgICAgICI8VTBGNUY+PFUwRkIzPjxVMEYwQj48VTBGNTY+PFUwRjBCPjxVMEY1MT48VTBGNDI+PFUwRjc0PjxVMEYwQj48VTBGNTQ+PFUwRjBCPiI7LworICAgICAgICAgIjxVMEY1Rj48VTBGQjM+PFUwRjBCPjxVMEY1Nj48VTBGMEI+PFUwRjU2PjxVMEY0NT48VTBGNzQ+PFUwRjBCPjxVMEY1ND48VTBGMEI+IjsvCisiPFUwRjVGPjxVMEZCMz48VTBGMEI+PFUwRjU2PjxVMEYwQj48VTBGNTY+PFUwRjQ1PjxVMEY3ND48VTBGMEI+PFUwRjQyPjxVMEY0NT48VTBGNzI+PFUwRjQyPjxVMEYwQj48VTBGNTQ+PFUwRjBCPiI7LworIjxVMEY1Rj48VTBGQjM+PFUwRjBCPjxVMEY1Nj48VTBGMEI+PFUwRjU2PjxVMEY0NT48VTBGNzQ+PFUwRjBCPjxVMEY0Mj48VTBGNDk+PFUwRjcyPjxVMEY2Nj48VTBGMEI+PFUwRjU0PjxVMEYwQj4iCisKKworCisKKyUgQXBwcm9wcmlhdGUgZGF0ZSAmIHRpbWUgcmVwcmVzZW50YXRpb24KK2RfdF9mbXQgICAgICAiPFUwRjU0PjxVMEY2Nj48VTBGQjE+PFUwRjcyPjxVMEYwQj48VTBGNjM+PFUwRjdDPjxVMDAyNT48VTAwNzk+PFUwRjVGPjxVMEY2Mz48VTAwMjU+PFUwMDZEPjxVMEY1QT48VTBGN0E+PFUwRjY2Pi8KKzxVMDAyNT48VTAwNjQ+PFUwRjQ2PjxVMEY3ND48VTBGMEI+PFUwRjVBPjxVMEY3Qz48VTBGNTE+PFUwMDI1PjxVMDA0OD48VTBGNDA+PFUwRjY2PjxVMEY2Mj48VTBGMEI+PFUwRjU4Pi8KKzxVMDAyNT48VTAwNEQ+PFUwRjQwPjxVMEY2Nj48VTBGNjI+PFUwRjBCPjxVMEY0Nj48VTAwMjU+PFUwMDUzPiIKKworJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uCitkX2ZtdCAgICAgICAgIjxVMEY1ND48VTBGNjY+PFUwRkIxPjxVMEY3Mj48VTBGMEI+PFUwRjYzPjxVMEY3Qz48VTAwMjU+PFUwMDc5Pi8KKzxVMEY1Rj48VTBGNjM+PFUwMDI1PjxVMDA2RD48VTBGNUE+PFUwRjdBPjxVMEY2Nj48VTAwMjU+PFUwMDY0PiIKKworJSBBcHByb3ByaWF0ZSB0aW1lIHJlcHJlc2VudGF0aW9uICAiJUg6JU06JVMiCit0X2ZtdCAgICAgICAgIjxVMEY0Nj48VTBGNzQ+PFUwRjBCPjxVMEY1QT48VTBGN0M+PFUwRjUxPi8KKzxVMDAyNT48VTAwNDg+PFUwRjQwPjxVMEY2Nj48VTBGNjI+PFUwRjBCPjxVMEY1OD4vCis8VTAwMjU+PFUwMDREPjxVMEY0MD48VTBGNjY+PFUwRjYyPjxVMEYwQj48VTBGNDY+PFUwMDI1PjxVMDA1Mz4iCisKKyUgQU0vUE0gc2lnbnMKK2FtX3BtICAgIjxVMEY0ND48VTBGNjY+PFUwRjBCPjxVMEY0Nj4iOyI8VTBGNTU+PFUwRkIxPjxVMEY3Mj48VTBGMEI+PFUwRjQ2PiIKKworJSBBcHByb3ByaWF0ZSAxMi1ob3VyIGNsb2NrIHJlcHJlc2VudGF0aW9uICAiJUk6JU06JVMgJXAiCit0X2ZtdF9hbXBtICAgICAgICAiPFUwRjQ2PjxVMEY3ND48VTBGMEI+PFUwRjVBPjxVMEY3Qz48VTBGNTE+LworPFUwMDI1PjxVMDA0OT48VTBGNDA+PFUwRjY2PjxVMEY2Mj48VTBGMEI+PFUwRjU4Pi8KKzxVMDAyNT48VTAwNEQ+PFUwRjQwPjxVMEY2Nj48VTBGNjI+PFUwRjBCPjxVMEY0Nj48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDcwPiIKKworCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworeWVzc3RyICAiPFUwRjY4PjxVMEY3Mj48VTBGNTM+Igorbm9zdHIgICAiPFUwRjU4PjxVMEY3QT48VTBGNTM+IgoreWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTBGNjg+PFUwMDU5PjxVMDA3OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMEY1OD48VTAwNEU+PFUwMDZFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19URUxFUEhPTkUKK2NvcHkgInpoX0NOIgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19QQVBFUgorY29weSAiemhfQ04iCitFTkQgTENfUEFQRVIKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgInpoX0NOIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKKyUgRklYTUUKK25hbWVfZm10CSJGSVhNRSIKK25hbWVfZ2VuCSJGSVhNRSIKK25hbWVfbWlzcwkiRklYTUUiCituYW1lX21yCQkiRklYTUUiCituYW1lX21ycwkiRklYTUUiCituYW1lX21zCQkiRklYTUUiCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCislIEZJWE1FCitwb3N0YWxfZm10CSJGSVhNRSIKK2NvdW50cnlfbmFtZQkiRklYTUUiCisKK2NvdW50cnlfYWIyCSI8VTAwNDM+PFUwMDRFPiIKK2NvdW50cnlfYWIzCSI8VTAwNDM+PFUwMDQ4PjxVMDA0RT4iCitjb3VudHJ5X251bQkxNTYKKyVjb3VudHJ5X2NhcgkiRklYTUUiCitjb3VudHJ5X2lzYm4JIjxVMDAzNz4iCisKK2xhbmdfbmFtZSAgICAgIjxVMEY1ND48VTBGN0M+PFUwRjUxPjxVMEYwQj48VTBGNjY+PFUwRjkwPjxVMEY1MT48VTBGMEI+IgorbGFuZ19hYiAgICAgICAiPFUwMDYyPjxVMDA2Rj4iCitsYW5nX3Rlcm0gICAgICI8VTAwNjI+PFUwMDZGPjxVMDA2ND4iCitsYW5nX2xpYiAgICAgICI8VTAwNzQ+PFUwMDY5PjxVMDA2Mj4iCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYm9fSU4gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ib19JTgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjRlMjg2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYm9fSU4KQEAgLTAsMCArMSw5NCBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCisKKyUgVGliZXRhbiBsYW5ndWFnZSBsb2NhbGUgZm9yIEluZGlhCislCislIEJhc2VkIG9uIGR6X0JUIGJ5IFBlbWEgR2V5bGVnCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJUaWJldGFuIGxhbmd1YWdlIGxvY2FsZSBmb3IgSW5kaWEiCitzb3VyY2UgICAgICIiCithZGRyZXNzICAgICIiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIlRpYmV0YW4iCit0ZXJyaXRvcnkgICJJbmRpYSIKK3JldmlzaW9uICAgIjAuMSIKK2RhdGUgICAgICAgIjIwMDctMTEtMDYiCislCitjYXRlZ29yeSAgImJvX0lOOjIwMDciO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImJvX0lOOjIwMDciO0xDX0NUWVBFCitjYXRlZ29yeSAgImJvX0lOOjIwMDciO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiYm9fSU46MjAwNyI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJib19JTjoyMDA3IjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJib19JTjoyMDA3IjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJib19JTjoyMDA3IjtMQ19QQVBFUgorY2F0ZWdvcnkgICJib19JTjoyMDA3IjtMQ19OQU1FCitjYXRlZ29yeSAgImJvX0lOOjIwMDciO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiYm9fSU46MjAwNyI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiYm9fQ04iCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorY29weSAiYm9fQ04iCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQorY29weSAiaGlfSU4iCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworJSBGSVhNRTogY2hlY2sgdGhhdCBncm91cGluZyBldGMgaXMgY29ycmVjdAorY29weSAiYm9fQ04iCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCitjb3B5ICJib19DTiIKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCitjb3B5ICJib19DTiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19URUxFUEhPTkUKK2NvcHkgImhpX0lOIgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19QQVBFUgorY29weSAiaGlfSU4iCitFTkQgTENfUEFQRVIKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgImhpX0lOIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKKyUgRklYTUUKK25hbWVfZm10CSJGSVhNRSIKK25hbWVfZ2VuCSJGSVhNRSIKK25hbWVfbWlzcwkiRklYTUUiCituYW1lX21yCQkiRklYTUUiCituYW1lX21ycwkiRklYTUUiCituYW1lX21zCQkiRklYTUUiCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCislIEZJWE1FCitwb3N0YWxfZm10CSJGSVhNRSIKK2NvdW50cnlfbmFtZQkiRklYTUUiCisKK2NvdW50cnlfYWIyICI8VTAwNDk+PFUwMDRFPiIKK2NvdW50cnlfYWIzICI8VTAwNDk+PFUwMDRFPjxVMDA0ND4iCitjb3VudHJ5X251bSAzNTYKKworbGFuZ19uYW1lICAgICAiPFUwRjU0PjxVMEY3Qz48VTBGNTE+PFUwRjBCPjxVMEY2Nj48VTBGOTA+PFUwRjUxPjxVMEYwQj4iCitsYW5nX2FiICAgICAgICI8VTAwNjI+PFUwMDZGPiIKK2xhbmdfdGVybSAgICAgIjxVMDA2Mj48VTAwNkY+PFUwMDY0PiIKK2xhbmdfbGliICAgICAgIjxVMDA3ND48VTAwNjk+PFUwMDYyPiIKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9icl9GUiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2JyX0ZSCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYTQ3Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9icl9GUgpAQCAtMCwwICsxLDE2NiBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIEJyZXRvbiBMYW5ndWFnZSBMb2NhbGUgZm9yIEZyYW5jZQorJSBTb3VyY2U6IHRoYW5rcyB0byBEZW5pc2UuUGVkZW5AZW5zdC1icmV0YWduZS5mciAoRGVuaXNlIERlcnJpZW4tUGVkZW4pCislIEFkZHJlc3M6CislIENvbnRhY3Q6IFBhYmxvIFNhcmF0eGFnYQorJSBFbWFpbDogc3J0eGdAY2hhbmFlLmFscGhhbmV0LmNoCislIFRlbDoKKyUgRmF4OgorJSBMYW5ndWFnZTogYnIKKyUgVGVycml0b3J5OiBGUgorJSBSZXZpc2lvbjogMC41CislIERhdGU6IDIwMDEtMDEtMjgKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgIkJyZXRvbiBsYW5ndWFnZSBsb2NhbGUgZm9yIEZyYW5jZSIKK3NvdXJjZSAiRGVuaXNlLlBlZGVuQGVuc3QtYnJldGFnbmUuZnIgKERlbmlzZSBEZXJyaWVuLVBlZGVuKSIKK2FkZHJlc3MgIiIKK2NvbnRhY3QgIlBhYmxvIFNhcmF0eGFnYSIKK2VtYWlsICJwYWJsb0BtYW5kcmFrZXNvZnQuY29tIgordGVsICIiCitmYXggIiIKK2xhbmd1YWdlICJCcmV0b24iCit0ZXJyaXRvcnkgIkZyYW5jZSIKK3JldmlzaW9uICIwLjU0IgorZGF0ZSAiMjAwMS0wMS0yOCIKKworY2F0ZWdvcnkgYnJfRlI6MjAwMDtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgYnJfRlI6MjAwMDtMQ19DVFlQRQorY2F0ZWdvcnkgYnJfRlI6MjAwMDtMQ19DT0xMQVRFCitjYXRlZ29yeSBicl9GUjoyMDAwO0xDX1RJTUUKK2NhdGVnb3J5IGJyX0ZSOjIwMDA7TENfTlVNRVJJQworY2F0ZWdvcnkgYnJfRlI6MjAwMDtMQ19QQVBFUgorY2F0ZWdvcnkgYnJfRlI6MjAwMDtMQ19URUxFUEhPTkUKK2NhdGVnb3J5IGJyX0ZSOjIwMDA7TENfTUVBU1VSRU1FTlQKK2NhdGVnb3J5IGJyX0ZSOjIwMDA7TENfQUREUkVTUworY2F0ZWdvcnkgYnJfRlI6MjAwMDtMQ19NT05FVEFSWQorY2F0ZWdvcnkgYnJfRlI6MjAwMDtMQ19NRVNTQUdFUworCitFTkQgTENfSURFTlRJRklDQVRJT04KKworCitMQ19DT0xMQVRFCitjb3B5ICJpc28xNDY1MV90MSIKKworJSUgYSBiIGMgY2ggYydoIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgegorY29sbGF0aW5nLXN5bWJvbCAgPGMtaC1icj4KK2NvbGxhdGluZy1lbGVtZW50IDxDLUg+IGZyb20gIjxVMDA0Mz48VTAwNDg+IgorY29sbGF0aW5nLWVsZW1lbnQgPGMtaD4gZnJvbSAiPFUwMDYzPjxVMDA2OD4iCitjb2xsYXRpbmctZWxlbWVudCA8Qy1oPiBmcm9tICI8VTAwNDM+PFUwMDY4PiIKK2NvbGxhdGluZy1lbGVtZW50IDxjLUg+IGZyb20gIjxVMDA2Mz48VTAwNDg+IgorY29sbGF0aW5nLXN5bWJvbCAgPGMtJy1oLWJyPgorY29sbGF0aW5nLWVsZW1lbnQgPEMnSD4gZnJvbSAiPFUwMDQzPjxVMDAyNz48VTAwNDg+IgorY29sbGF0aW5nLWVsZW1lbnQgPGMnaD4gZnJvbSAiPFUwMDYzPjxVMDAyNz48VTAwNjg+IgorY29sbGF0aW5nLWVsZW1lbnQgPEMnaD4gZnJvbSAiPFUwMDQzPjxVMDAyNz48VTAwNjg+IgorY29sbGF0aW5nLWVsZW1lbnQgPGMnSD4gZnJvbSAiPFUwMDYzPjxVMDAyNz48VTAwNDg+IgorCitjb2xsYXRpbmctc3ltYm9sIDxDQVAtTUlOPgorY29sbGF0aW5nLXN5bWJvbCA8TUlOLUNBUD4KKworcmVvcmRlci1hZnRlciA8TUlOPgorPE1JTi1DQVA+CisKK3Jlb3JkZXItYWZ0ZXIgPENBUD4KKzxDQVAtTUlOPgorCityZW9yZGVyLWFmdGVyIDxjPgorPGMtaC1icj4KKzxjLSctaC1icj4KKworcmVvcmRlci1hZnRlciA8VTAwNjM+Cis8Yy1oPgk8Yy1oLWJyPjs8UENUPjs8TUlOPjtJR05PUkUKKzxjLUg+CTxjLWgtYnI+OzxQQ1Q+OzxNSU4tQ0FQPjtJR05PUkUKKzxjJ2g+CTxjLSctaC1icj47PFBDVD47PE1JTj47SUdOT1JFCis8YydIPgk8Yy0nLWgtYnI+OzxQQ1Q+OzxNSU4tQ0FQPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDQzPgorPEMtSD4JPGMtaC1icj47PFBDVD47PENBUD47SUdOT1JFCis8Qy1oPgk8Yy1oLWJyPjs8UENUPjs8Q0FQLU1JTj47SUdOT1JFCis8QydIPgk8Yy0nLWgtYnI+OzxQQ1Q+OzxDQVA+O0lHTk9SRQorPEMnaD4JPGMtJy1oLWJyPjs8UENUPjs8Q0FQLU1JTj47SUdOT1JFCisKK3Jlb3JkZXItZW5kCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJlbl9ESyIKK0VORCBMQ19DVFlQRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNkY+PFUwMDRGPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQorY29weSAiZnJfRlIiCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworY29weSAiZnJfRlIiCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICI8VTAwNzM+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNkM+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjU+PFUwMDc1PiI7IjxVMDA2RD48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDc5PjxVMDA2MT48VTAwNkY+IjsiPFUwMDY3PjxVMDA3Nz48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDYxPjxVMDA2ND4iCitkYXkgICAgICI8VTAwNzM+PFUwMDc1PjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2NT48VTAwNzU+PFUwMDcyPjxVMDA3QT48VTAwNjg+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDY1PjxVMDA3Mj48VTAwNjM+PFUwMDI3PjxVMDA2OD48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDc5PjxVMDA2MT48VTAwNkY+PFUwMDc1PiI7LworICAgICAgICAiPFUwMDY3PjxVMDA3Nz48VTAwNjU+PFUwMDZFPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDYxPjxVMDA2ND48VTAwNkY+PFUwMDcyPjxVMDA2RT4iCithYm1vbiAgICI8VTAwNDc+PFUwMDY1PjxVMDA2RT48VTAwMjA+IjsiPFUwMDQzPjxVMDAyNz48VTAwNjg+PFUwMDc3PiI7LworICAgICAgICAiPFUwMDREPjxVMDA2NT48VTAwNzU+PFUwMDIwPiI7IjxVMDA0NT48VTAwNjI+PFUwMDcyPjxVMDAyMD4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDY1PjxVMDAyMD4iOyI8VTAwNDU+PFUwMDc2PjxVMDA2NT48VTAwMjA+IjsvCisgICAgICAgICI8VTAwNDc+PFUwMDZGPjxVMDA3NT48VTAwMjA+IjsiPFUwMDQ1PjxVMDA2Rj48VTAwNzM+PFUwMDIwPiI7LworICAgICAgICAiPFUwMDQ3PjxVMDA3Nz48VTAwNjU+PFUwMDIwPiI7IjxVMDA0OD48VTAwNjU+PFUwMDcyPjxVMDAyMD4iOy8KKyAgICAgICAgIjxVMDA0ND48VTAwNzU+PFUwMDIwPjxVMDAyMD4iOyI8VTAwNEI+PFUwMDY1PjxVMDA3Mj48VTAwMjA+IgorbW9uICAgICAiPFUwMDQ3PjxVMDA2NT48VTAwNkU+PFUwMDc2PjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNDM+PFUwMDI3PjxVMDA2OD48VTAwNzc+PFUwMDY1PjxVMDA3Nj48VTAwNzI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjU+PFUwMDc1PjxVMDA3Mj48VTAwN0E+PFUwMDY4PiI7LworICAgICAgICAiPFUwMDQ1PjxVMDA2Mj48VTAwNzI+PFUwMDY1PjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDREPjxVMDA2NT48VTAwN0E+PFUwMDY4PjxVMDA2NT48VTAwNzY+PFUwMDY1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA0Nz48VTAwNkY+PFUwMDc1PjxVMDA2NT48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDQ1PjxVMDA2Rj48VTAwNzM+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDQ3PjxVMDA3Nz48VTAwNjU+PFUwMDZFPjxVMDA2Nz48VTAwNkY+PFUwMDZDPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA0OD48VTAwNjU+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA0ND48VTAwNzU+IjsvCisgICAgICAgICI8VTAwNEI+PFUwMDY1PjxVMDA3Mj48VTAwN0E+PFUwMDc1PiIKK2RfdF9mbXQgIjxVMDA0ND48VTAwMjc+PFUwMDYxPjxVMDA3Mj48VTAwMjA+PFUwMDI1PjxVMDA0MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDYxPjxVMDAyMD48VTAwNzY+PFUwMDY5PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCislIDxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkU+PFUwMDI1PjxVMDA2RD48VTAwMkU+PFUwMDI1PjxVMDA1OT4iCit0X2ZtdCAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgIjxVMDAyMD4iOyI8VTAwMjA+IgordF9mbXRfYW1wbSAiPFUwMDI1PjxVMDA0OT48VTAwNjU+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD4iCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorY29weSAiZnJfRlIiCitFTkQgTENfUEFQRVIKKworTENfTUVBU1VSRU1FTlQKK21lYXN1cmVtZW50IDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCislIEZJWE1FCitjb3B5ICJmcl9GUiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKKyUgRklYTUUKK2NvcHkgImZyX0ZSIgorRU5EIExDX0FERFJFU1MKKworTENfVEVMRVBIT05FCitjb3B5ICJmcl9GUiIKK0VORCBMQ19URUxFUEhPTkUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2JyX0ZSQGV1cm8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9icl9GUkBldXJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYjFkYTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9icl9GUkBldXJvCkBAIC0wLDAgKzEsODMgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBCcmV0b24gTGFuZ3VhZ2UgTG9jYWxlIGZvciBGcmFuY2Ugd2l0aCBFdXJvCislIExhbmd1YWdlOiBicgorJSBUZXJyaXRvcnk6IEZSCislIE9wdGlvbjogZXVybworJSBEYXRlOiAyMDAwLTA4LTIwCislIFVzZXJzOiBnZW5lcmFsCislIENoYXJzZXQ6IElTTy04ODU5LTE1CislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJCcmV0b24gbG9jYWxlIGZvciBGcmFuY2Ugd2l0aCBFdXJvIgorc291cmNlICAgICAiRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIgorYWRkcmVzcyAgICAiNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQSIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJCcmV0b24iCit0ZXJyaXRvcnkgICJGcmFuY2UiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAyLTAyLTI4IgorJQorY2F0ZWdvcnkgICJicl9GUkBldXJvOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImJyX0ZSQGV1cm86MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiYnJfRlJAZXVybzoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImJyX0ZSQGV1cm86MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJicl9GUkBldXJvOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiYnJfRlJAZXVybzoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJicl9GUkBldXJvOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImJyX0ZSQGV1cm86MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiYnJfRlJAZXVybzoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImJyX0ZSQGV1cm86MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJicl9GUkBldXJvOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImJyX0ZSIgorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxCitjb3B5ICJpc28xNDY1MV90MSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01FU1NBR0VTCitjb3B5ICJicl9GUiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQorY29weSAiYnJfRlIiCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworY29weSAiYnJfRlIiCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCitjb3B5ICJicl9GUiIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCitjb3B5ICJicl9GUiIKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK2NvcHkgImJyX0ZSIgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorY29weSAiYnJfRlIiCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorY29weSAiYnJfRlIiCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitjb3B5ICJicl9GUiIKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ic19CQSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2JzX0JBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNTg3N2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ic19CQQpAQCAtMCwwICsxLDI0NSBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIEJvc25pYW4gTGFuZ3VhZ2UgTG9jYWxlIGZvciBCb3NuaWEKKyUgU291cmNlOiBhZGFwdGVkIGZyb20gQ3JvYXRpYW4gbG9jYWxlCislIENvbnRhY3Q6IFRvbWlzbGF2IFZ1amVjCislIEVtYWlsOiB0dnVqZWNAY2FybmV0LmhyCislIExhbmd1YWdlOiBicworJSBUZXJyaXRvcnk6IEJBCislIFJldmlzaW9uOiAwLjQKKyUgRGF0ZTogMjAwNC0wMS0wOQorJSBBcHBsaWNhdGlvbjogZ2VuZXJhbAorJSBVc2VyczogZ2VuZXJhbAorJSBDaGFyc2V0OiBJU08tODg1OS0yCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCislCislIFJldmlzaW9uczoKKyUgMjAwNC0wMS0wOSBwYWJsb0BtYW5kcmFrZXNvZnQuY29tOiBmaXhlZCBMQ19DT0xMQVRFCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAiQm9zbmlhbiBsYW5ndWFnZSBsb2NhbGUgZm9yIEJvc25pYSBhbmQgSGVyemVnb3dpbmEiCitzb3VyY2UgImFkYXB0ZWQgZnJvbSBDcm9hdGlhbiBsb2NhbGUiCithZGRyZXNzICIiCitjb250YWN0ICJUb21pc2xhdiBWdWplYyIKK2VtYWlsICJ0dnVqZWNAY2FybmV0LmhyIgordGVsICIiCitmYXggIiIKK2xhbmd1YWdlICJCb3NuaWFuIgordGVycml0b3J5ICJCb3NuaWEgYW5kIEhlcnplZ293aW5hIgorcmV2aXNpb24gIjAuNCIKK2RhdGUgIjIwMDQtMDEtMDkiCisKK2NhdGVnb3J5IGJzX0JBOjIwMDA7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5IGJzX0JBOjIwMDA7TENfQ1RZUEUKK2NhdGVnb3J5IGJzX0JBOjIwMDA7TENfQ09MTEFURQorY2F0ZWdvcnkgYnNfQkE6MjAwMDtMQ19USU1FCitjYXRlZ29yeSBic19CQToyMDAwO0xDX05VTUVSSUMKK2NhdGVnb3J5IGJzX0JBOjIwMDA7TENfUEFQRVIKK2NhdGVnb3J5IGJzX0JBOjIwMDA7TENfVEVMRVBIT05FCitjYXRlZ29yeSBic19CQToyMDAwO0xDX01FQVNVUkVNRU5UCitjYXRlZ29yeSBic19CQToyMDAwO0xDX0FERFJFU1MKK2NhdGVnb3J5IGJzX0JBOjIwMDA7TENfTU9ORVRBUlkKK2NhdGVnb3J5IGJzX0JBOjIwMDA7TENfTUVTU0FHRVMKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorCislIGEgYiBjIGMnIGM8IGQgZHo8IGQvLyBlIGYgZyBoIGkgaiBrIGwgbGogbSBuIG5qIG8gcAorJSBxIHIgcyBzPCB0IHUgdiB3IHggeSB6IHo8CisKK2NvbGxhdGluZy1zeW1ib2wgIDxkLXotc2g+Citjb2xsYXRpbmctZWxlbWVudCA8RC1aPD4gZnJvbSAiPFUwMDQ0PjxVMDE3RD4iCitjb2xsYXRpbmctZWxlbWVudCA8RC16PD4gZnJvbSAiPFUwMDQ0PjxVMDE3RT4iCitjb2xsYXRpbmctZWxlbWVudCA8ZC1aPD4gZnJvbSAiPFUwMDY0PjxVMDE3RD4iCitjb2xsYXRpbmctZWxlbWVudCA8ZC16PD4gZnJvbSAiPFUwMDY0PjxVMDE3RT4iCitjb2xsYXRpbmctc3ltYm9sICA8bC1qLXNoPgorY29sbGF0aW5nLWVsZW1lbnQgPEwtSj4gZnJvbSAiPFUwMDRDPjxVMDA0QT4iCitjb2xsYXRpbmctZWxlbWVudCA8TC1qPiBmcm9tICI8VTAwNEM+PFUwMDZBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxsLUo+IGZyb20gIjxVMDA2Qz48VTAwNEE+IgorY29sbGF0aW5nLWVsZW1lbnQgPGwtaj4gZnJvbSAiPFUwMDZDPjxVMDA2QT4iCitjb2xsYXRpbmctc3ltYm9sICA8bi1qLXNoPgorY29sbGF0aW5nLWVsZW1lbnQgPE4tSj4gZnJvbSAiPFUwMDRFPjxVMDA0QT4iCitjb2xsYXRpbmctZWxlbWVudCA8Ti1qPiBmcm9tICI8VTAwNEU+PFUwMDZBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxuLUo+IGZyb20gIjxVMDA2RT48VTAwNEE+IgorY29sbGF0aW5nLWVsZW1lbnQgPG4taj4gZnJvbSAiPFUwMDZFPjxVMDA2QT4iCitjb2xsYXRpbmctc3ltYm9sIDxjYWN1dGU+Citjb2xsYXRpbmctc3ltYm9sIDxjY2Fyb24+Citjb2xsYXRpbmctc3ltYm9sIDxkLy8+Citjb2xsYXRpbmctc3ltYm9sIDxzY2Fyb24+Citjb2xsYXRpbmctc3ltYm9sIDx6Y2Fyb24+CisKK2NvbGxhdGluZy1zeW1ib2wgPENBUC1NSU4+Citjb2xsYXRpbmctc3ltYm9sIDxNSU4tQ0FQPgorCityZW9yZGVyLWFmdGVyIDxNSU4+Cis8TUlOLUNBUD4KK3Jlb3JkZXItYWZ0ZXIgPENBUD4KKzxDQVAtTUlOPgorCityZW9yZGVyLWFmdGVyIDxjPgorPGNhY3V0ZT4KKzxjY2Fyb24+Cis8ZD4KKzxkLXotc2g+Cis8ZC8vPgorcmVvcmRlci1hZnRlciA8bD4KKzxsLWotc2g+CityZW9yZGVyLWFmdGVyIDxuPgorPG4tai1zaD4KK3Jlb3JkZXItYWZ0ZXIgPHM+Cis8c2Nhcm9uPgorcmVvcmRlci1hZnRlciA8ej4KKzx6Y2Fyb24+CisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDYzPgorPFUwMTA3Pgk8Y2FjdXRlPjs8UENUPjs8TUlOPjtJR05PUkUKKzxVMDEwRD4JPGNjYXJvbj47PFBDVD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0Mz4KKzxVMDEwNj4JPGNhY3V0ZT47PFBDVD47PENBUD47SUdOT1JFCis8VTAxMEM+CTxjY2Fyb24+OzxQQ1Q+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA2ND4KKzxkLXo8Pgk8ZC16LXNoPjs8UENUPjs8TUlOPjtJR05PUkUKKzxkLVo8Pgk8ZC16LXNoPjs8UENUPjs8TUlOLUNBUD47SUdOT1JFCis8VTAxMTE+CTxkLy8+OzxQQ1Q+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNDQ+Cis8RC1aPD4JPGQtei1zaD47PFBDVD47PENBUD47SUdOT1JFCis8RC16PD4JPGQtei1zaD47PFBDVD47PENBUC1NSU4+O0lHTk9SRQorPFUwMTEwPgk8ZC8vPjs8UENUPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNkM+Cis8bC1qPgk8bC1qLXNoPjs8UENUPjs8TUlOPjtJR05PUkUKKzxsLUo+CTxsLWotc2g+OzxQQ1Q+OzxNSU4tQ0FQPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDRDPgorPEwtSj4JPGwtai1zaD47PFBDVD47PENBUD47SUdOT1JFCis8TC1qPgk8bC1qLXNoPjs8UENUPjs8Q0FQLU1JTj47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDZFPgorPG4taj4JPG4tai1zaD47PFBDVD47PE1JTj47SUdOT1JFCis8bi1KPgk8bi1qLXNoPjs8UENUPjs8TUlOLUNBUD47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0RT4KKzxOLUo+CTxuLWotc2g+OzxQQ1Q+OzxDQVA+O0lHTk9SRQorPE4taj4JPG4tai1zaD47PFBDVD47PENBUC1NSU4+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA3Mz4KKzxVMDE2MT4JPHNjYXJvbj47PFBDVD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA1Mz4KKzxVMDE2MD4JPHNjYXJvbj47PFBDVD47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDdBPgorPFUwMTdFPgk8emNhcm9uPjs8UENUPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDVBPgorPFUwMTdEPgk8emNhcm9uPjs8UENUPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1lbmQKKworRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImVuX0RLIgorRU5EIExDX0NUWVBFCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA2ND48VTAwNDQ+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJBPjxVMDAyRT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyQT48VTAwMkU+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAgICI8VTAwNDI+PFUwMDQxPjxVMDA0RD48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICAgICAiPFUwMDRCPjxVMDA0RD4iCittb25fZGVjaW1hbF9wb2ludCAgICAgICAgICI8VTAwMkM+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgICAiPFUwMDIwPiIKK21vbl9ncm91cGluZyAgICAgICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAgICAgICI8VTAwMkM+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAgICAiIgorZ3JvdXBpbmcgICAgICAgICAgICAgICAgICAwOzAKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKKworYWJkYXkgICAiPFUwMDRFPjxVMDA2NT48VTAwNjQ+IjsiPFUwMDUwPjxVMDA2Rj48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNTU+PFUwMDc0PjxVMDA2Rj4iOyI8VTAwNTM+PFUwMDcyPjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDEwQz48VTAwNjU+PFUwMDc0PiI7IjxVMDA1MD48VTAwNjU+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDUzPjxVMDA3NT48VTAwNjI+IgorZGF5ICAgICAiPFUwMDRFPjxVMDA2NT48VTAwNjQ+PFUwMDZBPjxVMDA2NT48VTAwNkM+PFUwMDZBPjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA1MD48VTAwNkY+PFUwMDZFPjxVMDA2NT48VTAwNjQ+PFUwMDZBPjxVMDA2NT48VTAwNkM+PFUwMDZBPjxVMDA2MT48VTAwNkI+IjsvCisgICAgICAgICI8VTAwNTU+PFUwMDc0PjxVMDA2Rj48VTAwNzI+PFUwMDYxPjxVMDA2Qj4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNzI+PFUwMDY5PjxVMDA2QT48VTAwNjU+PFUwMDY0PjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDEwQz48VTAwNjU+PFUwMDc0PjxVMDA3Nj48VTAwNzI+PFUwMDc0PjxVMDA2MT48VTAwNkI+IjsvCisgICAgICAgICI8VTAwNTA+PFUwMDY1PjxVMDA3ND48VTAwNjE+PFUwMDZCPiI7LworICAgICAgICAiPFUwMDUzPjxVMDA3NT48VTAwNjI+PFUwMDZGPjxVMDA3ND48VTAwNjE+IgorYWJtb24gICAiPFUwMDRBPjxVMDA2MT48VTAwNkU+IjsiPFUwMDQ2PjxVMDA2NT48VTAwNjI+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNDE+PFUwMDcwPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDZBPiI7IjxVMDA0QT48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkM+IjsiPFUwMDQxPjxVMDA3NT48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA3MD4iOyI8VTAwNEY+PFUwMDZCPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDc2PiI7IjxVMDA0ND48VTAwNjU+PFUwMDYzPiIKK21vbiAgICAgIjxVMDA0QT48VTAwNjE+PFUwMDZFPjxVMDA3NT48VTAwNjE+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDQ2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA3NT48VTAwNjE+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzI+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDQxPjxVMDA3MD48VTAwNzI+PFUwMDY5PjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDZBPiI7LworICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkU+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkM+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDQxPjxVMDA3NT48VTAwNjc+PFUwMDc1PjxVMDA3Mz48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDYxPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0Rj48VTAwNkI+PFUwMDc0PjxVMDA2Rj48VTAwNjI+PFUwMDYxPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDc2PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDY1PjxVMDA2Mz48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjE+PFUwMDcyPiIKK2RfdF9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+IgorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkU+PFUwMDI1PjxVMDA2RD48VTAwMkU+PFUwMDI1PjxVMDA1OT4iCit0X2ZtdCAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgIiI7IiIKK3RfZm10X2FtcG0gIiIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCitoZWlnaHQgICAgICAyOTcKK3dpZHRoICAgICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX01FQVNVUkVNRU5UCittZWFzdXJlbWVudCAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorJSBGSVhNRQorY29weSAiZW5fREsiCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCislIEZJWE1FCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2OD4vCis8VTAwMjA+PFUwMDI1PjxVMDA3Mz48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwN0E+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgIjxVMDA0Mj48VTAwNDE+IgorY291bnRyeV9hYjMgIjxVMDA0Mj48VTAwNDk+PFUwMDQ4PiIKK2NvdW50cnlfbnVtIDA3MAorRU5EIExDX0FERFJFU1MKKworTENfVEVMRVBIT05FCislIEZJWE1FICh0ZWxfaW50LWZtdCBjb3BpZWQgZnJvbSBlbl9ESykKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICI8VTAwMzM+PFUwMDM4PjxVMDAzNz4iCitpbnRfc2VsZWN0ICI8VTAwMzA+PFUwMDMwPiIKK0VORCBMQ19URUxFUEhPTkUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2J5bl9FUiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2J5bl9FUgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDQwZmJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvYnluX0VSCkBAIC0wLDAgKzEsMjIyIEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSBCbGluIGxhbmd1YWdlIGxvY2FsZSBmb3IgRXJpdHJlYS4KKyUKKyUgQ2hhcnNldDogVVRGLTgKKyUKKyUgQmxpbiB0ZXJtcyBhcmUgcHJvdmlkZWQgYnkgVGVraWUgQWxpYmVraXQgd2l0aCBjb29yZGluYXRpb24gb2YgdGhlCislIEJsaW4gTGFuZ3VhZ2UgYW5kIEN1bHR1cmUgQXNzb2NpYXRpb24gaW4gTm9yd2F5LiAgUHJlcGFyZWQgYW5kIGNvbnRyaWJ1dGVkCislIHRvIGdsaWJjIGJ5IERhbmllbCBZYWNvYiA8bG9jYWxlc0BnZWV6Lm9yZz4KKyUKKyUgYnVpbGQgd2l0aDogbG9jYWxlZGVmIC1mIFVURi04IC1pIGJ5bl9FUiBieW5fRVIKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkJsaW4gbGFuZ3VhZ2UgbG9jYWxlIGZvciBFcml0cmVhIgorc291cmNlICAgICAiR2UnZXogRnJvbnRpZXIgRm91bmRhdGlvbiIKK2FkZHJlc3MgICAgIjc4MDIgU29sb21vbiBTZWFsIERyLiwgU3ByaW5nZmllbGQsIFZBIDIyMTUyLCBVU0EiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJsb2NhbGVzQGdlZXoub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiYnluIgordGVycml0b3J5ICAiRVIiCityZXZpc2lvbiAgICIwLjIxIgorZGF0ZSAgICAgICAiMjAwMy0xMS0wMSIKKyUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX01FQVNVUkVNRU5UCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAicG9zaXg6MTk5MyI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfVEVMRVBIT05FCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX1RJTUUKKyUKK0VORCBMQ19JREVOVElGSUNBVElPTgorCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislICBFdGhpb3BpYyBTcGVjaWZjIERhdGE6CislCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCitMQ19DT0xMQVRFCitjb3B5ICJ0aV9FUiIKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJ0aV9FUiIKK0VORCBMQ19DVFlQRQorCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislICBFcml0cmVhIFNwZWNpZmMgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJ0aV9FUiIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19NT05FVEFSWQorY29weSAidGlfRVIiCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworY29weSAidGlfRVIiCitFTkQgTENfTlVNRVJJQworCitMQ19QQVBFUgorY29weSAidGlfRVIiCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCitjb3B5ICJ0aV9FUiIKK0VORCBMQ19URUxFUEhPTkUKKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSAgQmxpbiBTcGVjaWZpYyBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfTUVTU0FHRVMKK2NvcHkgInRpX0VSIgorRU5EIExDX01FU1NBR0VTCisKK0xDX05BTUUKK2NvcHkgInRpX0VSIgorRU5EIExDX05BTUUKKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSAgQmxpbi9FUiBTcGVjaWZpYyBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfQUREUkVTUworJQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19BRERSRVNTIGNhdGVnb3J5LgorJQorcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3Mj4iCitjb3VudHJ5X25hbWUgICI8VTEyQTQ+PFUxMjJEPjxVMTI3NT48VTEyMkI+IgorY291bnRyeV9wb3N0ICAiPFUwMDQ1PjxVMDA1Mj48VTAwNDk+IgorY291bnRyeV9hYjIgICAiPFUwMDQ1PjxVMDA1Mj4iCitjb3VudHJ5X2FiMyAgICI8VTAwNDU+PFUwMDUyPjxVMDA0OT4iCitjb3VudHJ5X251bSAgIDIzMgorJSBjb3VudHJ5X2NhciAgIHVua25vd24KKyUgY291bnRyeV9pc2JuICB1bmtub3duLCBOZWVkIElTTyAyMTA4CitsYW5nX25hbWUgICAgICI8VTEyNjU+PFUxMjBBPjxVMTI5NT4iCitsYW5nX2FiICAgICAgICIiCitsYW5nX3Rlcm0gICAgICI8VTAwNjI+PFUwMDc5PjxVMDA2RT4iCitsYW5nX2xpYiAgICAgICI8VTAwNjI+PFUwMDc5PjxVMDA2RT4iCislCitFTkQgTENfQUREUkVTUworCisKK0xDX1RJTUUKKyUKKyUgQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyAoJWEpCislCithYmRheSAgICAiPFUxMjMwPjxVMDAyRj48VTEyNDU+IjsvCisgICAgICAgICAiPFUxMjMwPjxVMTI5MT4iOy8KKyAgICAgICAgICI8VTEyMzA+PFUxMjBBPjxVMTMxRD4iOy8KKyAgICAgICAgICI8VTEyMDg+PFUxMzEzPiI7LworICAgICAgICAgIjxVMTJBMz48VTEyMUQ+PFUxMkY1PiI7LworICAgICAgICAgIjxVMTJBMz48VTEyMkQ+PFUxMjY1PiI7LworICAgICAgICAgIjxVMTIzMD48VTAwMkY+PFUxMjNEPiIKKyUKKyUgRnVsbCB3ZWVrZGF5IG5hbWVzICglQSkKKyUKK2RheSAgICAgICI8VTEyMzA+PFUxMjk1PjxVMTI2MD48VTEyMkQ+PFUwMDIwPjxVMTI0NT48VTEyRjM+PFUxMkM1PiI7LworICAgICAgICAgIjxVMTIzMD48VTEyOTE+IjsvCisgICAgICAgICAiPFUxMjMwPjxVMTIwQT48VTEzMUQ+IjsvCisgICAgICAgICAiPFUxMjA4PjxVMTMxMz48VTAwMjA+PFUxMkM4PjxVMTIyQT48VTAwMjA+PFUxMjA4PjxVMTI2NT48VTEyQ0I+IjsvCisgICAgICAgICAiPFUxMkEzPjxVMTIxRD48VTEyRjU+IjsvCisgICAgICAgICAiPFUxMkEzPjxVMTIyRD48VTEyNjU+IjsvCisgICAgICAgICAiPFUxMjMwPjxVMTI5NT48VTEyNjA+PFUxMjJEPjxVMDAyMD48VTEyM0Q+PFUxMzEzPjxVMTJDNT4iCislCislIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzICglYikKKyUKK2FibW9uICAgICI8VTEyMEQ+PFUxMkYwPjxVMTI3NT4iOy8KKyAgICAgICAgICI8VTEyQUI+PFUxMjY1PjxVMTJCRD4iOy8KKyAgICAgICAgICI8VTEyQUQ+PFUxMjY1PjxVMTIwQj4iOy8KKyAgICAgICAgICI8VTEzNEI+PFUxMzA1PjxVMTJCQT4iOy8KKyAgICAgICAgICI8VTEyQUQ+PFUxMjYyPjxVMTI0NT4iOy8KKyAgICAgICAgICI8VTEyMUQ+PFUwMDJGPjxVMTI3NT4iOy8KKyAgICAgICAgICI8VTEyQjA+PFUxMjJEPiI7LworICAgICAgICAgIjxVMTIxQj48VTEyMkQ+PFUxMkVCPiI7LworICAgICAgICAgIjxVMTJFQj48VTEyQjg+PFUxMjkyPiI7LworICAgICAgICAgIjxVMTIxOD48VTEyNzA+PFUxMjA5PiI7LworICAgICAgICAgIjxVMTIxRD48VTAwMkY+PFUxMjFEPiI7LworICAgICAgICAgIjxVMTI3MD48VTEyMTU+PFUxMjMzPiIKKyUKKyUgRnVsbCBtb250aCBuYW1lcyAoJUIpCislCittb24gICAgICAiPFUxMjBEPjxVMTJGMD48VTEyNzU+PFUxMjJBPiI7LworICAgICAgICAgIjxVMTJBQj48VTEyNjU+PFUxMkJEPjxVMTI2NT48VTEyNzI+IjsvCisgICAgICAgICAiPFUxMkFEPjxVMTI2NT48VTEyMEI+IjsvCisgICAgICAgICAiPFUxMzRCPjxVMTMwNT48VTEyQkE+PFUxMjJBPiI7LworICAgICAgICAgIjxVMTJBRD48VTEyNjI+PFUxMjQ1PjxVMTIyQT4iOy8KKyAgICAgICAgICI8VTEyMUQ+PFUxMkFBPjxVMTJBND48VTEyMEQ+PFUwMDIwPjxVMTI3NT48VTEzMTM+PFUwMzA1PjxVMTI5Mj48VTEyMkE+IjsvCisgICAgICAgICAiPFUxMkIwPjxVMTIyRD48VTEyQTk+IjsvCisgICAgICAgICAiPFUxMjFCPjxVMTIyRD48VTEyRUI+PFUxMjFEPjxVMDAyMD48VTEyNzU+PFUxMjJBPiI7LworICAgICAgICAgIjxVMTJFQj48VTEyQjg+PFUxMjkyPjxVMDAyMD48VTEyMTg+PFUxMjMzPjxVMTI0NT48VTEyMDg+PFUxMjJBPiI7LworICAgICAgICAgIjxVMTIxOD48VTEyNzA+PFUxMjA5PiI7LworICAgICAgICAgIjxVMTIxRD48VTEyQUE+PFUxMkE0PjxVMTIwRD48VTAwMjA+PFUxMjE4PjxVMTIzRD48VTEyQzg+PFUxMjJBPiI7LworICAgICAgICAgIjxVMTI3MD48VTEyMTU+PFUxMjMzPjxVMTIzNT48VTEyMkE+IgorJQorJQorJSBFcXVpdmFsZW50IG9mIEFNIFBNCislCithbV9wbSAgICAiPFUxMzRCPjxVMTJGMT48VTEyMzU+PFUwMDIwPjxVMTMwMz48VTEyNjU+IjsvCisgICAgICAgICAiPFUxMzRCPjxVMTJGMT48VTEyMzU+PFUwMDIwPjxVMTJGMD48VTEyMUQ+PFUxMjYyPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbiAoJXgpCislCSIlZC8lbS8lWSIKKyUKK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNTk+IgorJQorJSBBcHByb3ByaWF0ZSB0aW1lIHJlcHJlc2VudGF0aW9uICglWCkKKyUJIiVsOiVNOiVTIgorJQordF9mbXQgIjxVMDAyNT48VTAwNkM+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+IgorJQorJSBBcHByb3ByaWF0ZSBBTS9QTSB0aW1lIHJlcHJlc2VudGF0aW9uICglcikKKyUJIiVYICVwIgorJQordF9mbXRfYW1wbSAiPFUwMDI1PjxVMDA1OD48VTAwMjA+PFUwMDI1PjxVMDA3MD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24gKCVjKQorJQkiJUHhjaEgJUIgJWUg4Yuu4YidICVZICVyICVaCislCitkX3RfZm10ICAgICI8VTAwMjU+PFUwMDQxPjxVMTM2MT48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUxMzBEPjxVMTIyRD48VTEzMEI+LworPFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uIChkYXRlKDEpKQorJQkiJUHhjaEgJUIgJWUg4Yuu4YidICVyICVaICVZIOGLky/hiJ0KKyUKK2RhdGVfZm10ICAgICI8VTAwMjU+PFUwMDQxPjxVMTM2MT48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUxMzBEPjxVMTIyRD48VTEzMEI+LworPFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDIwPjxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+LworPFUwMDIwPjxVMTJBMz48VTEyRjU+IgorJQorRU5EIExDX1RJTUUKKyUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2NhX0FEIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvY2FfQUQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFlZWJiYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2NhX0FECkBAIC0wLDAgKzEsOTQgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBDYXRhbGFuIExhbmd1YWdlIExvY2FsZSBmb3IgQW5kb3JyYQorJSBMYW5ndWFnZTogY2EKKyUgVGVycml0b3J5OiBBRAorJSBPcHRpb246IGV1cm8KKyUgUmV2aXNpb246IDEuMAorJSBEYXRlOiAyMDA2LTAxLTE2CislIEFwcGxpY2F0aW9uOiBnZW5lcmFsCislIFVzZXJzOiBnZW5lcmFsCislIENoYXJzZXQ6IElTTy04ODU5LTE1CislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJDYXRhbGFuIGxvY2FsZSBmb3IgQW5kb3JyYSAiCitzb3VyY2UgICAgICJSb2JlcnQgTWlsbGFuIgorYWRkcmVzcyAgICAiIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiQ2F0YWxhbiIKK3RlcnJpdG9yeSAgIkFuZG9ycmEiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDA2LTAxLTE2IgorJQorY2F0ZWdvcnkgICJjYV9BRDoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJjYV9BRDoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJjYV9BRDoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImNhX0FEOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiY2FfQUQ6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJjYV9BRDoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJjYV9BRDoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJjYV9BRDoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJjYV9BRDoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImNhX0FEOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiY2FfQUQ6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DT0xMQVRFCitjb3B5ICJjYV9FUyIKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJjYV9FUyIKK0VORCBMQ19DVFlQRQorCitMQ19NRVNTQUdFUworY29weSAiY2FfRVMiCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2NvcHkgImNhX0VTIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgImNhX0VTIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorY29weSAiY2FfRVMiCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorY29weSAiY2FfRVMiCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzMz48VTAwMzc+PFUwMDM2PiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgImNhX0VTIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK2NvcHkgImNhX0VTIgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICI8VTAwNDE+PFUwMDQ0PiIKK2NvdW50cnlfYWIzICI8VTAwNDE+PFUwMDRFPjxVMDA0ND4iCitjb3VudHJ5X251bSAyMAorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2NhX0VTIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvY2FfRVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4M2JjYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2NhX0VTCkBAIC0wLDAgKzEsMTc1IEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgQ2F0YWxhbiBMYW5ndWFnZSBMb2NhbGUgZm9yIFNwYWluCislIFNvdXJjZTogUkFQCislIENvbnRhY3Q6IEpvYW4gQ2FybGVzIFNvbGVyCislIEVtYWlsOiBKb2FuLlNvbGVyQHV2LmVzCislIFRlbDoKKyUgRmF4OgorJSBMYW5ndWFnZTogY2EKKyUgVGVycml0b3J5OiBFUworJSBSZXZpc2lvbjogMC4xCislIERhdGU6IDE5OTktMDgtMTEKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMsZHMKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiQ2F0YWxhbiBsb2NhbGUgZm9yIFNwYWluIgorc291cmNlICAgICAiUkFQIgorYWRkcmVzcyAgICAiIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkNhdGFsYW4iCit0ZXJyaXRvcnkgICJTcGFpbiIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjkiCislCitjYXRlZ29yeSAgImNhX0VTOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImNhX0VTOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImNhX0VTOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiY2FfRVM6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJjYV9FUzoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImNhX0VTOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImNhX0VTOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImNhX0VTOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImNhX0VTOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiY2FfRVM6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJjYV9FUzoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorCitjb2xsYXRpbmctc3ltYm9sIDxudGlsZGU+CisKK3Jlb3JkZXItYWZ0ZXIgPG4+Cis8bnRpbGRlPgorCityZW9yZGVyLWFmdGVyIDxVMDA2RT4KKzxVMDBGMT4gPG50aWxkZT47PEJBUz47PE1JTj47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDRFPgorPFUwMEQxPiA8bnRpbGRlPjs8QkFTPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1lbmQKKworRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNzM+PFUwMDUzPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgIjxVMDA0NT48VTAwNTU+PFUwMDUyPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAiPFUyMEFDPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICI8VTAwMkM+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgIjxVMDAyRT4iCittb25fZ3JvdXBpbmcgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICIiCitncm91cGluZyAgICAgICAgICAgICAwOzAKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA2ND48VTAwNjc+IjsiPFUwMDY0PjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwNzQ+IjsiPFUwMDY0PjxVMDA2Mz4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwNkE+IjsiPFUwMDY0PjxVMDA3Nj4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwNzM+IgorZGF5ICAgICAiPFUwMDY0PjxVMDA2OT48VTAwNzU+PFUwMDZEPjxVMDA2NT48VTAwNkU+PFUwMDY3PjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwNjk+PFUwMDZDPjxVMDA2Qz48VTAwNzU+PFUwMDZFPjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwNjk+PFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMDc0PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwNjk+PFUwMDZEPjxVMDA2NT48VTAwNjM+PFUwMDcyPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNjQ+PFUwMDY5PjxVMDA2QT48VTAwNkY+PFUwMDc1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwNjk+PFUwMDc2PjxVMDA2NT48VTAwNkU+PFUwMDY0PjxVMDA3Mj48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDY0PjxVMDA2OT48VTAwNzM+PFUwMDczPjxVMDA2MT48VTAwNjI+PFUwMDc0PjxVMDA2NT4iCithYm1vbiAgICI8VTAwNjc+PFUwMDY1PjxVMDA2RT4iOyI8VTAwNjY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2MT48VTAwNjI+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNjk+IjsiPFUwMDZBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNjE+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDc0PiI7IjxVMDA2Rj48VTAwNjM+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDY0PjxVMDA2NT48VTAwNzM+IgorbW9uICAgICAiPFUwMDY3PjxVMDA2NT48VTAwNkU+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2Nj48VTAwNjU+PFUwMDYyPjxVMDA3Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMEU3PiI7LworICAgICAgICAiPFUwMDYxPjxVMDA2Mj48VTAwNzI+PFUwMDY5PjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDY5PjxVMDA2Nz4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZFPjxVMDA3OT4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPjxVMDA2OT48VTAwNkY+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA2Nz48VTAwNkY+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDc0PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkY+PFUwMDYzPjxVMDA3ND48VTAwNzU+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA3Nj48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDY0PjxVMDA2NT48VTAwNzM+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iCitkX3RfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNzk+IgordF9mbXQgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICIiOyIiCit0X2ZtdF9hbXBtICIiCitkYXRlX2ZtdAkiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorJSBGSVhNRQoraGVpZ2h0ICAgMjk3CislIEZJWE1FCit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDMzPjxVMDAzND4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCislIEZJWE1FCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICI8VTAwNDU+PFUwMDUzPiIKK2NvdW50cnlfYWIzICI8VTAwNDU+PFUwMDUzPjxVMDA1MD4iCitjb3VudHJ5X251bSA3MjQKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9jYV9FU0BldXJvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvY2FfRVNAZXVybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDYwOWRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvY2FfRVNAZXVybwpAQCAtMCwwICsxLDg1IEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgQ2F0YWxhbiBMYW5ndWFnZSBMb2NhbGUgZm9yIFNwYWluIHdpdGggRXVybworJSBMYW5ndWFnZTogY2EKKyUgVGVycml0b3J5OiBFUworJSBPcHRpb246IGV1cm8KKyUgUmV2aXNpb246IDAuMQorJSBEYXRlOiAyMDAwLTA4LTIwCislIEFwcGxpY2F0aW9uOiBnZW5lcmFsCislIFVzZXJzOiBnZW5lcmFsCislIENoYXJzZXQ6IElTTy04ODU5LTE1CislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJDYXRhbGFuIGxvY2FsZSBmb3IgQ2F0YWxvbmlhIHdpdGggRXVybyIKK3NvdXJjZSAgICAgIkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiIKK2FkZHJlc3MgICAgIjU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiQ2F0YWxhbiIKK3RlcnJpdG9yeSAgIlNwYWluIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wOC0yMCIKKyUKK2NhdGVnb3J5ICAiY2FfRVNAZXVybzoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJjYV9FU0BldXJvOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImNhX0VTQGV1cm86MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJjYV9FU0BldXJvOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiY2FfRVNAZXVybzoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImNhX0VTQGV1cm86MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiY2FfRVNAZXVybzoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJjYV9FU0BldXJvOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImNhX0VTQGV1cm86MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJjYV9FU0BldXJvOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiY2FfRVNAZXVybzoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKK2NvcHkgImNhX0VTIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImNhX0VTIgorRU5EIExDX0NUWVBFCisKK0xDX01FU1NBR0VTCitjb3B5ICJjYV9FUyIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQorY29weSAiY2FfRVMiCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworY29weSAiY2FfRVMiCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCitjb3B5ICJjYV9FUyIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCitjb3B5ICJjYV9FUyIKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK2NvcHkgImNhX0VTIgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorY29weSAiY2FfRVMiCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorY29weSAiY2FfRVMiCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitjb3B5ICJjYV9FUyIKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9jYV9FU0B2YWxlbmNpYSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2NhX0VTQHZhbGVuY2lhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMTA0MGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9jYV9FU0B2YWxlbmNpYQpAQCAtMCwwICsxLDk2IEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgVmFsZW5jaWFuIChzb3V0aGVybiBDYXRhbGFuKSBsb2NhbGUgZm9yIFNwYWluIHdpdGggRXVybworJQorJSBOb3RlIHRoYXQgdGhpcyBsb2NhbGUgaXMgYWxtb3N0IHRoZSBzYW1lIGFzIGNhX0VTQGV1cm8uICBUaGUgcG9pbnQgb2YgaGF2aW5nCislIGEgc2VwYXJhdGUgbG9jYWxlIGlzIG9ubHkgZm9yIFBPIHRyYW5zbGF0aW9ucywgd2hpY2ggaGF2ZSBhIGxvdCBvZiBzb2NpYWwKKyUgc3VwcG9ydCBhbmQgYXJlIHZlcnkgYXBwcmVjaWF0ZWQgYnkgdGhlIFZhbGVuY2lhbi1zcGVha2luZyBjb21tdW5pdHkuCislCislIENvbnRhY3Q6IEpvcmRpIE1hbGxhY2gKKyUgRW1haWw6IGpvcmRpQGdudS5vcmcKKyUgVGVsOgorJSBGYXg6CislIExhbmd1YWdlOiBjYQorJSBUZXJyaXRvcnk6IEVTCislIE9wdGlvbjogZXVybworJSBSZXZpc2lvbjogMS4wCislIERhdGU6IDIwMDYtMDQtMDYKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMsZHMKKyUgQ2hhcnNldDogSVNPLTg4NTktMTUKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlZhbGVuY2lhbiAoc291dGhlcm4gQ2F0YWxhbikgbG9jYWxlIGZvciBTcGFpbiB3aXRoIEV1cm8iCitzb3VyY2UgICAgICIiCithZGRyZXNzICAgICIiCitjb250YWN0ICAgICJKb3JkaSBNYWxsYWNoIgorZW1haWwgICAgICAiam9yZGlAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkNhdGFsYW4iCit0ZXJyaXRvcnkgICJTcGFpbiIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDYtMDQtMDYiCislCitjYXRlZ29yeSAgImNhX0VTQHZhbGVuY2lhOjIwMDYiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImNhX0VTQHZhbGVuY2lhOjIwMDYiO0xDX0NUWVBFCitjYXRlZ29yeSAgImNhX0VTQHZhbGVuY2lhOjIwMDYiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiY2FfRVNAdmFsZW5jaWE6MjAwNiI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiY2FfRVNAdmFsZW5jaWE6MjAwNiI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJjYV9FU0B2YWxlbmNpYToyMDA2IjtMQ19USU1FCitjYXRlZ29yeSAgImNhX0VTQHZhbGVuY2lhOjIwMDYiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImNhX0VTQHZhbGVuY2lhOjIwMDYiO0xDX1BBUEVSCitjYXRlZ29yeSAgImNhX0VTQHZhbGVuY2lhOjIwMDYiO0xDX05BTUUKK2NhdGVnb3J5ICAiY2FfRVNAdmFsZW5jaWE6MjAwNiI7TENfQUREUkVTUworY2F0ZWdvcnkgICJjYV9FU0B2YWxlbmNpYToyMDA2IjtMQ19URUxFUEhPTkUKK2NhdGVnb3J5ICAiY2FfRVNAdmFsZW5jaWE6MjAwNiI7TENfTUVBU1VSRU1FTlQKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKK2NvcHkgImNhX0VTIgorRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKK2NvcHkgImNhX0VTIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgImNhX0VTIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorY29weSAiY2FfRVMiCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworY29weSAiY2FfRVMiCitFTkQgTENfTUVTU0FHRVMKKworTENfUEFQRVIKK2NvcHkgImNhX0VTIgorRU5EIExDX1BBUEVSCisKK0xDX05BTUUKK2NvcHkgImNhX0VTIgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworY29weSAiY2FfRVMiCitFTkQgTENfQUREUkVTUworCitMQ19URUxFUEhPTkUKK2NvcHkgImNhX0VTIgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorY29weSAiY2FfRVMiCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2NhX0ZSIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvY2FfRlIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJhZWU5NgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2NhX0ZSCkBAIC0wLDAgKzEsODUgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBDYXRhbGFuIExhbmd1YWdlIExvY2FsZSBmb3IgRnJhbmNlCislIExhbmd1YWdlOiBjYQorJSBUZXJyaXRvcnk6IEZSCislIE9wdGlvbjogZXVybworJSBSZXZpc2lvbjogMS4wCislIERhdGU6IDIwMDYtMDEtMTYKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogSVNPLTg4NTktMTUKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkNhdGFsYW4gbG9jYWxlIGZvciBGcmFuY2UgIgorc291cmNlICAgICAiUm9iZXJ0IE1pbGxhbiIKK2FkZHJlc3MgICAgIiIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgIiIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkNhdGFsYW4iCit0ZXJyaXRvcnkgICJGcmFuY2UiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDA2LTAxLTE2IgorJQorY2F0ZWdvcnkgICJjYV9GUjoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJjYV9GUjoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJjYV9GUjoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImNhX0ZSOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiY2FfRlI6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJjYV9GUjoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJjYV9GUjoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJjYV9GUjoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJjYV9GUjoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImNhX0ZSOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiY2FfRlI6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DT0xMQVRFCitjb3B5ICJjYV9FUyIKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJjYV9FUyIKK0VORCBMQ19DVFlQRQorCitMQ19NRVNTQUdFUworY29weSAiY2FfRVMiCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2NvcHkgImNhX0VTIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgImNhX0VTIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorY29weSAiY2FfRVMiCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorY29weSAiZnJfRlIiCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCitjb3B5ICJmcl9GUiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgImZyX0ZSIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK2NvcHkgImNhX0VTIgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworY29weSAiZnJfRlIiCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvY2FfSVQgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9jYV9JVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjU3ZjgyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvY2FfSVQKQEAgLTAsMCArMSw4NSBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIENhdGFsYW4gTGFuZ3VhZ2UgTG9jYWxlIGZvciBJdGFseSAoTCdBbGd1ZXIpCislIExhbmd1YWdlOiBjYQorJSBUZXJyaXRvcnk6IElUCislIE9wdGlvbjogZXVybworJSBSZXZpc2lvbjogMS4wCislIERhdGU6IDIwMDYtMDEtMTYKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogSVNPLTg4NTktMTUKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkNhdGFsYW4gbG9jYWxlIGZvciBJdGFseSAoTCdBbGd1ZXIpICIKK3NvdXJjZSAgICAgIlJvYmVydCBNaWxsYW4iCithZGRyZXNzICAgICIiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICIiCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJDYXRhbGFuIgordGVycml0b3J5ICAiSXRhbHkgKEwnQWxndWVyKSIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDYtMDEtMTYiCislCitjYXRlZ29yeSAgImNhX0lUOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImNhX0lUOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImNhX0lUOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiY2FfSVQ6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJjYV9JVDoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImNhX0lUOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImNhX0lUOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImNhX0lUOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImNhX0lUOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiY2FfSVQ6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJjYV9JVDoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKK2NvcHkgImNhX0VTIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImNhX0VTIgorRU5EIExDX0NUWVBFCisKK0xDX01FU1NBR0VTCitjb3B5ICJjYV9FUyIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQorY29weSAiY2FfRVMiCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworY29weSAiY2FfRVMiCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCitjb3B5ICJjYV9FUyIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCitjb3B5ICJpdF9JVCIKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK2NvcHkgIml0X0lUIgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorY29weSAiaXRfSVQiCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorY29weSAiY2FfRVMiCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitjb3B5ICJpdF9JVCIKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9jcmhfVUEgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9jcmhfVUEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRmYWIyNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2NyaF9VQQpAQCAtMCwwICsxLDIzOCBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIENyaW1lYW4gVGF0YXIgTGFuZ3VhZ2UgTG9jYWxlIGZvciBVa3JhaW5lIChsYXRpbikKKyUgU291cmNlOglSZXNoYXQgU2FiaXEgKFJlPFUwMTVGPmF0KQorJSBDb250YWN0OglSZXNoYXQgU2FiaXEgKFJlPFUwMTVGPmF0KQorJSBFbWFpbDoJPHRhdGFyLmlxdGVsaWYuaTE4bkBnbWFpbC5jb20+CislIExhbmd1YWdlOgljcmgKKyUgVGVycml0b3J5OglVQQorJSBSZXZpc2lvbjoJMC4zCislIERhdGU6CQkyMDA2LTEwLTA5CislIEFwcGxpY2F0aW9uOglnZW5lcmFsCislIFVzZXJzOglnZW5lcmFsCislIENoYXJzZXQ6CVVURi04IAorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUJCSJDcmltZWFuIFRhdGFyIGxhbmd1YWdlIGxvY2FsZSBmb3IgVWtyYWluZSIKK3NvdXJjZQkJIiIKK2FkZHJlc3MJCSIiCitjb250YWN0CQkiUmVzaGF0IFNhYmlxIChSZTxVMDE1Rj5hdCkiCitlbWFpbAkJInRhdGFyLmlxdGVsaWYuaTE4bkBnbWFpbC5jb20iCit0ZWwJCSIiCitmYXgJCSIiCitsYW5ndWFnZQkiQ3JpbWVhbiBUYXRhciIKK3RlcnJpdG9yeQkiVWtyYWluZSIKK3JldmlzaW9uCSIwLjMiCitkYXRlCQkiMjAwNi0xMC0wOSIKKworY2F0ZWdvcnkgY3JoX1VBOjIwMDA7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5IGNyaF9VQToyMDAwO0xDX0NUWVBFCitjYXRlZ29yeSBjcmhfVUE6MjAwMDtMQ19DT0xMQVRFCitjYXRlZ29yeSBjcmhfVUE6MjAwMDtMQ19USU1FCitjYXRlZ29yeSBjcmhfVUE6MjAwMDtMQ19OVU1FUklDCitjYXRlZ29yeSBjcmhfVUE6MjAwMDtMQ19QQVBFUgorY2F0ZWdvcnkgY3JoX1VBOjIwMDA7TENfVEVMRVBIT05FCitjYXRlZ29yeSBjcmhfVUE6MjAwMDtMQ19NRUFTVVJFTUVOVAorY2F0ZWdvcnkgY3JoX1VBOjIwMDA7TENfQUREUkVTUworY2F0ZWdvcnkgY3JoX1VBOjIwMDA7TENfTU9ORVRBUlkKK2NhdGVnb3J5IGNyaF9VQToyMDAwO0xDX01FU1NBR0VTCitjYXRlZ29yeSBjcmhfVUE6MjAwMDtMQ19OQU1FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCislCislIFRPRE86IGNoZWNrIGFuZCB0ZXN0IExDX0NPTExBVEUKKworTENfQ09MTEFURQorJSBUaGUgbmV3IENyaW1lYW4gVGF0YXIgYWxwaGFiZXQgKExhdGluKSBpczoKKyUgPGE+LCA8Yj4sIDxjPiwgPGMsPiwgPGQ+LCA8ZT4sIDxmPiwgPGc+LCA8Zyg+LCA8aD4sIAorJSA8aT4gKGRvdGxlc3MgaSksIDxpLj4gKGkgd2l0aCBkb3QpLCA8aj4sIDxrPiwgPGw+LCA8bT4sIDxuPiwgPG4/PiwgPG8+LAorJSA8bzo+LCA8cD4sIDxxPiwgPHI+LCA8cz4sIDxzLD4sIDx0PiwgPHU+LCA8dTo+LCA8dj4sIDx5PiwgPHo+CisKK2NvcHkgImlzbzE0NjUxX3QxIgorCitjb2xsYXRpbmctc3ltYm9sIDxjLD4KK2NvbGxhdGluZy1zeW1ib2wgPGcoPgorY29sbGF0aW5nLXN5bWJvbCA8aS4+Citjb2xsYXRpbmctc3ltYm9sIDxuPz4KK2NvbGxhdGluZy1zeW1ib2wgPG86PgorY29sbGF0aW5nLXN5bWJvbCA8cyw+Citjb2xsYXRpbmctc3ltYm9sIDx1Oj4KKworcmVvcmRlci1hZnRlciA8Yz4KKzxjLD4KK3Jlb3JkZXItYWZ0ZXIgPGc+Cis8Zyg+CityZW9yZGVyLWFmdGVyIDxoPgorPGk+Cis8aS4+CityZW9yZGVyLWFmdGVyIDxuPgorPG4/PgorcmVvcmRlci1hZnRlciA8bz4KKzxvOj4KK3Jlb3JkZXItYWZ0ZXIgPHM+Cis8cyw+CityZW9yZGVyLWFmdGVyIDx1PgorPHU6PgorCityZW9yZGVyLWFmdGVyIDxVMDA2Mz4KKzxVMDBFNz4gPGMsPjs8Q0RJPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDQzPgorPFUwMEM3PiA8Yyw+OzxDREk+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA2Nz4KKzxVMDExRj4gPGcoPjs8QlJFPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDQ3PgorPFUwMTFFPiA8Zyg+OzxCUkU+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA2OD4KKzxVMDEzMT4gPGk+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwMDY5PiA8aS4+OzxQQ1Q+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNDg+Cis8VTAwNDk+IDxpPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDEzMD4gPGkuPjs8UENUPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNkU+Cis8VTAwRjE+IDxuPz47PFRJTD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0RT4KKzxVMDBEMT4gPG4/Pjs8VElMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNkY+Cis8VTAwRjY+IDxvOj47PFJFVT47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0Rj4KKzxVMDBENj4gPG86Pjs8UkVVPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNzM+Cis8VTAxNUY+IDxzLD47PENEST47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA1Mz4KKzxVMDE1RT4gPHMsPjs8Q0RJPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNzU+Cis8VTAwRkM+IDx1Oj47PFJFVT47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA1NT4KKzxVMDBEQz4gPHU6Pjs8UkVVPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1lbmQKKworRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgInRyX1RSIgorRU5EIExDX0NUWVBFCisKK0xDX01FU1NBR0VTCislIFRPRE86IE5vIGlzICJ5b3EiOyBpcyBpdCBPSyB0aGF0IGl0IGNvcnJlc3BvbmRzIHdpdGggRW5nbGlzaCAieWVzIj8KK3llc3N0ciAgIjxVMDA2NT48VTAwNjI+PFUwMDY1PjxVMDA3ND4iCitub3N0ciAgICI8VTAwNzk+PFUwMDZGPjxVMDA3MT4iCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA0NT48VTAwNjU+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNTk+PFUwMDc5PjxVMDA0RT48VTAwNkU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAgICI8VTAwNTU+PFUwMDQxPjxVMDA0OD48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICAgICAiPFUwMDY3PjxVMDA3Mj4iCittb25fZGVjaW1hbF9wb2ludCAgICAgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgICAiPFUwMDIwPiIKK21vbl9ncm91cGluZyAgICAgICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAgICAgMAorcF9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDAKK25fc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAgICAgICI8VTAwMkM+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAgICAiPFUwMDJFPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgICAgMzszCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCitkYXkgICAgICI8VTAwNDI+PFUwMDYxPjxVMDA3QT48VTAwNjE+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDQyPjxVMDA2MT48VTAwN0E+PFUwMDYxPjxVMDA3Mj48VTAwMjA+PFUwMDY1PjxVMDA3Mj48VTAwNzQ+PFUwMDY1PjxVMDA3Mz48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA2Qz48VTAxMzE+IjsvCisgICAgICAgICI8VTAwQzc+PFUwMDYxPjxVMDA3Mj48VTAxNUY+PFUwMDY1PjxVMDA2RT48VTAwNjI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDQzPjxVMDA3NT48VTAwNkQ+PFUwMDYxPjxVMDA2MT48VTAwNzE+PFUwMTVGPjxVMDA2MT48VTAwNkQ+PFUwMTMxPiI7LworICAgICAgICAiPFUwMDQzPjxVMDA3NT48VTAwNkQ+PFUwMDYxPiI7LworICAgICAgICAiPFUwMDQzPjxVMDA3NT48VTAwNkQ+PFUwMDYxPjxVMDA2NT48VTAwNzI+PFUwMDc0PjxVMDA2NT48VTAwNzM+PFUwMDY5PiIKK2FiZGF5ICAgIjxVMDA0Mj48VTAwNjE+PFUwMDdBPiI7LworICAgICAgICAiPFUwMDQyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDBDNz48VTAwNjE+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDQzPjxVMDA2MT48VTAwNzE+IjsvCisgICAgICAgICI8VTAwNDM+PFUwMDc1PjxVMDA2RD4iOy8KKyAgICAgICAgIjxVMDA0Mz48VTAwNjU+PFUwMDcyPiIKK21vbiAgICAgIjxVMDA1OT48VTAwNjE+PFUwMDZFPjxVMDA3Nj48VTAwNjE+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDQ2PjxVMDA2NT48VTAwNzY+PFUwMDcyPjxVMDA2MT48VTAwNkM+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Mj48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNDE+PFUwMDcwPjxVMDA3Mj48VTAwNjU+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+PFUwMTMxPjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDEzMD48VTAwNzk+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDEzMD48VTAwNzk+PFUwMDc1PjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA0MT48VTAwNzY+PFUwMDY3PjxVMDA3NT48VTAwNzM+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNkU+PFUwMDc0PjxVMDBFMj48VTAwNjI+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDRGPjxVMDA2Qj48VTAwNzQ+PFUwMEUyPjxVMDA2Mj48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNEU+PFUwMDZGPjxVMDA3OT48VTAwNjE+PFUwMDYyPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0ND48VTAwNjU+PFUwMDZCPjxVMDA2MT48VTAwNjI+PFUwMDcyPiIKK2FibW9uICAgIjxVMDA1OT48VTAwNjE+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDQ2PjxVMDA2NT48VTAwNzY+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0MT48VTAwNzA+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICI8VTAxMzA+PFUwMDc5PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDEzMD48VTAwNzk+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDQxPjxVMDA3Nj48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA0Rj48VTAwNkI+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzk+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDY1PjxVMDA2Qj4iCitkX3RfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPi8KKzxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PiIKK2RfZm10ICAgICAiPFUwMDI1PjxVMDA2ND48VTAwMkU+PFUwMDI1PjxVMDA2RD48VTAwMkU+PFUwMDI1PjxVMDA1OT4iCit0X2ZtdCAgICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAgICI8VTAwRDY+PFUwMDQxPiI7IjxVMDBENj48VTAwNTM+IgordF9mbXRfYW1wbSAiPFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA3MD4iCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19QQVBFUgoraGVpZ2h0ICAgICAgMjk3Cit3aWR0aCAgICAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19NRUFTVVJFTUVOVAorbWVhc3VyZW1lbnQgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAiPFUwMDU1PjxVMDA0MT4iCitjb3VudHJ5X2FiMyAiPFUwMDU1PjxVMDA0Qj48VTAwNTI+IgorY291bnRyeV9udW0gODA0CitFTkQgTENfQUREUkVTUworCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDMzPjxVMDAzOD48VTAwMzA+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvY3NfQ1ogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9jc19DWgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDBjOGY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvY3NfQ1oKQEAgLTAsMCArMSwyNTA3IEBACitlc2NhcGVfY2hhciAvCitjb21tZW50X2NoYXIgJQorJQorJSBDemVjaCBMYW5ndWFnZSBMb2NhbGUgZm9yIEN6ZWNoCislIFNvdXJjZToKKyUgQWRkcmVzczogCVUguWtvbHkgMjkyCQlXaXRob3V0IGRpYWN0aXRpY2FsIGNoYXJzOglVIHNrb2x5IDI5MgorJQkJNzgzIDcyIFZlbGv9IFT9bmVjCQkJCQk3ODIgNzIgVmVsa3kgVHluZWMKKyUgQ29udGFjdDogVmxhZGltaXIgTWljaGwKKyUgRW1haWw6IFZsYWRpbWlyLk1pY2hsQHVwb2wuY3oKKyUgVGVsOiArNDIwLzY4LzUzOTE1NDUKKyUgRmF4OgorJSBMYW5ndWFnZTogY3MKKyUgVGVycml0b3J5OiBDWgorJSBSZXZpc2lvbjogMS4yMAorJSBEYXRlOiAxOTk5LTAyLTA3CislIEFwcGxpY2F0aW9uOiBnZW5lcmFsCislIFVzZXJzOiBnZW5lcmFsCislIFJlcGVydG9pcmVtYXA6IG1uZW1vbmljLmRzCislIENoYXJzZXQ6IElTT184ODU5LTI6MTk4NworJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCislICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKyUgU291Ym9yIGNzX0NaIGplIHByaW3hcm7tbSBzb3Vib3JlbSwgY3NfQ1pALWNoIGplIHZ5dHZv+GVuIHogbuxqIG9kZWJy4W7tbQorJSBkZWZpbmljIGNoIGEgamVobyD4YXplbu0uCislCislIEZpbGUgY3NfQ1ogaXMgcHJpbWFyeSBmaWxlLiBGaWxlIGNzX0NaQC1jaCBpcyBjcmVhdGVkIGZyb20gY3NfQ1ogYnkgc2NyaXB0LgorJSBGaWxlIGNzX0NaQC1jaCBpcyB3aXRob3V0IGRlZmluaXRpb24gb2YgY2hhcmFjdGVyIENoIGFuZCBpdHMgY29sbGF0aW9uLgorJSAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisKKyVDaGFuZ2VzOgorJSAyMDAwLTA2LTI4OiBKYWt1YiBKZWxpbmVrIDxqYWt1YkByZWRoYXQuY29tPgorJQlBZGFwdGVkIHRvIG5ldyBnbGliYyAyLjIgc3R5bGUgbG9jYWxlIGZvcm1hdAorJSAxOTk3LTA4LTIwOiBNaWNoYWVsIE1y4WthIDxtaWNoYWVsQGZpLm11bmkuY3o+CislCVpt7G55IHplam3pbmEgdiBzZWtjaSBMQ19USU1FLiAoQ2hhbmdlcyBlc3BlY2lhbGx5IGluIExDX1RJTUUgc2VjdGlvbi4pCislIDE5OTctMTAtMTY6IE1pY2hhZWwgTXLha2EgPG1pY2hhZWxAZmkubXVuaS5jej4KKyUJWm3sbnkgdiBhYmVjZWRu7W0g+GF6ZW7tIChzZWtjZSBMQ19DT0xMQVRFKS4KKyUJKEFscGhhYmV0aWNhbCBvcmRlciBjaGFuZ2VzIChMQ19MQ19DT0xMQVRFIHNlY3Rpb24pLikKKyUgeHg6IERvcGxu7G5vIG5hIHVuaWNvZGUuIFNuYWhhIG8gY28gbmVqdux0ue0gc291bGFkIHMgyFNOIDk3IDYwMzAKKyUJQWRkZWQgVW5pY29kZS4gQ3plY2ggY29sbGF0aW9uIGFjb3JkaW5nIHRvIGN6ZWNoIHN0YW5kYXJkIENTTiA5NyA2MDMwLgorJSAxOTk5LTAyLTA3OiBWbGFkaW1pciBNaWNobAorJQlDaGFuZ2VkIGFiYnJldmlhdGlvbnMgb2YgbW9udGhzCislCUNoYW5nZWQgY29sbGF0aW9uIG9mIGNoYXJhY3RlcnMKKworJSBaZHJvamUgaW5mb3JtYWPtOgorJQnIU04gOTcgNjAzMAorJQlO4WR2b3Ju7WsgYSBrb2wuOiBQcmF2aWRsYSBqbWVu6WhvIGthdGFsb2d1ICjobC4gMjAxIC0gMjEwKQorCislIE9kbGm5bm9zdGkgb2Qgbm9ybXk6CislIDMuMToKKyUgUG9yb3Zu4XZhbukgdv1yYXp5IGpzb3UgcG9yb3Zu4W55IGNlbOksIGpha28gamVkZW4gY2VsZWsuIFD4aSBwb3Jvdm7hduFu7QorJSBqc291IHZ5bmVjaOFueSB2uWVjaG55IHNwZWNp4Wxu7SB6bmFreSwga3RlcukgbmVqc291IHDtc21lbmEsIG5lYm8g6O1zbGljZQorJSAoa3JvbewgbmVyb3pk7GxpdGVsbukgbWV6ZXJ5KS4KKyUgSyB07G10byB6bmFr+W0gc2UgcPhpaGztvu0gcG91emUgcPhpIGppbmFrIHpjZWxhIHNob2Ru/WNoIHb9cmF6ZWNoLgorJSBWIGNzX0NaIGplIHNwb2plbu0gcO1zbWVuIGMgYSBoIG7hc2xlZHVq7WPtY2ggcG8gc29i7CBqZSB2vmR5IHBvdmG+b3bhbm8KKyUgamFrbyBw7XNtZW5vIGNoLgorJSBWIGNzX0NaQC1jaCBqZSBzcG9qZW7tIHDtc21lbiBjIGEgaCBwb3Zhvm924W5vIGpha28gZHbsIHDtc21lbmEgYyBhIGgsIHRqLgorJSBw7XNtZW5vIGNoIGplIHph+GF6ZW5vIHBvZCBw7XNtZW5vIGMuCislIDMuMjoKKyUgTWV6ZXJhIHNlIPhhZO0gcPhlZCBwcnZu7SBw7XNtZW5vIGFiZWNlZHksIGFsZSBrYb5k/SB6bmFrIG1lemVyeSBqZQorJSB1dmG+b3bhbiBzYW1vc3RhdG7sLiBUb3RvIHByYXZpZGxvIGplIHVwbGF0buxubyBuYSBoZXNsYSwga3RlcuEganNvdSBzaQorJSBqaW5hayByb3ZuYSAodiBwcnZu7WNoIHT4ZWNoIHBy+WNob2RlY2gpLgorJSAzLjY6CislIE5lbu0gZG9kcr5lbiBjZWz9LgorJSAzLjc6CislIFBva3VkIGpzb3UgaGVzbGEgc3Rlam7hIHD4aSBwcmlt4XJu7W0g+GF6ZW7tIChwb2RsZSBzdGQuIOhlcy4gYWJlY2VkeSkKKyUgYSB64XJvdmXyIHN0ZWpu4SBpIHD4aSBzZWt1bmThcm7tbSD4YXplbu0gKHBvcm92buF24W7tIGRpYWtyaXRpY2v9Y2gKKyUgem5hbeluZWspLCBwYWsgbWFq7SB2ZWxr4SBw7XNtZW5hIHD4ZWRub3N0IHD4ZWQgbWFs/W1pLgorJSAzLjg6CislIFRlbnRvIGJvZCBqZSBkb2RyvmVuIHBvdXplIHBybyBu7GtvbGlrIHDtc21lbiAobuxtZWNr6SBvc3Ry6SBCZXRhIChzcykpCislIFpkZSBw+GVkcG9rbOFk4W0gc3Bsbuxu7SBwb2Rt7W5layBib2R1IDMuOSAodGouIHD4aSB27HS57W0gdv1za3l0dQorJSBw7XNtZW4geiBjaWPtY2ggYWJlY2VkIGplIHBvdm9sZW5vIGplIG5lcm96ZXBpc292YXQgYSD4YWRpdCBhviB6YSBsYXQuCislIGFiZWNlZHUgYSDo7XNsaWNlKQorJSAzLjEwOgorJSDI7XNsYSBuZWpzb3Ug+GF6ZW5hIHBvZGxlIOjtc2VsbukgaG9kbm90eSwgYWxlIHBvZGxlIGhvZG5vdHkgamVkbm90bGl2/WNoCislIOjtc2xpYy4KKyUgMy4xMjoKKyUgUG9rdWQganNvdSBoZXNsYSBzaG9kbuEgdiBwcnZu7WNoIHT4ZWNoIHBy+WNob2RlY2gsIHBhayBqc291IHNyb3Zu4W5hIHRhaworJSBqYWsganNvdSwgaSBzIG5lcO1zbWVu/W1pIGEgbmXo7XNlbG79bWkgem5h6GthbWkuIEFsZ29yaXRtdXMgamFr/W0gamUKKyUgc2X4YXplbiBw+O1rbGFkIHV2ZWRlbv0gdiBub3Jt7CBtaSBuZW7tIHpjZWxhIGphc279IGEgcG9kbGUgbewgb2Rwb3J1amUKKyUgZPjtdmUgcG9wc2Fu/W0gcHJhdmlkbPltIPhhemVu7S4KKyUgUPjta2xhZCBzZfhhemVu7ToKKyUgICBEbGUgbm9ybXkJCQlEbGUgbekgZGVmaW5pY2UKKyUJYQkJCQlhCislCWEtCQkJCWEtCislCWEtYgkJCQnhCislCWEtYi0JCQkJ4gorJQlhLWMJCQkJYS1iCislCeEJCQkJYS1iLQorJQniCQkJCWEtYworJSAzLjEzOgorJSBUZW50byBib2QganNlbSBzZSBzbmG+aWwgZG9kcr5ldCwgYm9odb5lbCBzZfhhZGl0IHpuYW3pbmthIGplIGRvc3QgbuFyb+hu6S4KKworJSB6cHJhY2924W7tIChjb21waWxhdGlvbik6CislJSAgICBsb2NhbGVkZWYgLWkgY3NfQ1ogLWYgIklTTy04ODU5LTIiICdjc19DWi5JU08tODg1OS0yJworJSBvcgorJSUgICAgbG9jYWxlZGVmIC1pIGNzX0NaQC1jaCAtZiAiSVNPLTg4NTktMiIgJ2NzX0NaLklTTy04ODU5LTInCisKKyUlIHBybyD6c3DsuW7pIHD4ZWxvvmVu7SBqZSB0+GViYSBt7XQga29sZWtjaSBu4XJvZG7tY2ggcHJvc3T4ZWTtIFdHMTVjb2xsZWN0aW9uCislJSBuZWJvIG5haW5zdGFsb3bhbnUga25paG92bnUgZ2xpYmMtMi4qIHMgbG9rYWxpemHobu1taSBzb3Vib3J5LgorJSUgVHl0byBzb3Vib3J5IG11c+0gYv10IHYgYWRyZXPh+GkgL3Vzci9zaGFyZS9pMThuL2xvY2FsZXMgYQorJSUgL3Vzci9zaGFyZS9pMThuL2NoYXJtYXBzLgorJSUgRGVmaW5pY2UgbuFyb2Ru7WNoIHByb3N0+GVk7SBzZSBwYWsgYnVkb3UgdHZv+Gl0IHYgYWRyZXPh+GkgL3Vzci9zaGFyZS9sb2NhbGUKKworJSUgViBzb3Vib3J1IC91c3Ivc2hhcmUvbG9jYWxlL2xvY2FsZS5hbGlhcyBqZSB0+GViYSBt7XQg+OFkZWsKKyUlIGN6ZWNoIGNzX0NaLklTTzg4NTkyCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJDemVjaCBsb2NhbGUgZm9yIHRoZSBDemVjaCBSZXB1YmxpYyIKK3NvdXJjZSAgICAgIkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiIKK2FkZHJlc3MgICAgIjU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiQ3plY2giCit0ZXJyaXRvcnkgICJDemVjaCBSZXB1YmxpYyIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjgiCislCitjYXRlZ29yeSAgImNzX0NaOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImNzX0NaOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImNzX0NaOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiY3NfQ1o6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJjc19DWjoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImNzX0NaOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImNzX0NaOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImNzX0NaOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImNzX0NaOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiY3NfQ1o6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJjc19DWjoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKKyUlIFBv+GFk7SB6bmFr+QorJSUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitMQ19DT0xMQVRFCisKKyUgQmFzZSBjb2xsYXRpb24gc2NoZW1lOiAxOTk0LTAzLTIyCisKKyUgT3JkZXJpbmcgYWxnb3JpdGhtOgorJSAgMS4gU3BhY2VzIGFuZCBoeXBoZW4gKGJ1dCBub3Qgc29mdAorJSAgICAgaHlwaGVuKSBiZWZvcmUgcHVuY3R1YXRpb24KKyUgICAgIGNoYXJhY3RlcnMsIHB1bmN0dWF0aW9uIGNoYXJhY3RlcnMKKyUgICAgIGJlZm9yZSBsZXR0ZXJzLAorJSAgICAgbnVtYmVycyBhZnRlciBsZXR0ZXJzLgorJSAgMi4gTGV0dGVycyB3aXRoIGRpYWNyaXRpY2FsIG1hcmtzIGFyZQorJSAgICAgbWVtYmVycyBvZiBlcXVpdmFsZW5jZSBjbGFzc2VzCislICAzLiBBIGRpc3RpbmN0aW9uIGlzIG1hZGUgd2l0aCByZWdhcmRzCislICAgICB0byBjYXNlIGFzIG5vdGVkIGJlbG93LgorJSAgNC4gU3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSBpZ25vcmVkCislICAgICB3aGVuIGNvbXBhcmluZyBsZXR0ZXJzLCBidXQgdGhlbgorJSAgICAgdGhleSBhcmUgY29uc2lkZXJlZAorJSAgNS4gVGhlIGFscGhhYmV0cyBhcmUgc29ydGVkIGluIG9yZGVyCislICAgICBvZiBmaXJzdCBhcHBlYXJhbmNlIGluIElTTyAxMDY0NjoKKyUgICAgIExhdGluLCBHcmVlaywgQ3lyaWxsaWMsIGV0Yy4KKyUKKyUgQWNjb3JkaW5nIHRvIEdyZWVrIHNwZWNpZmljYXRpb25zLAorJSB0aGUgc3RlcHMgMi4gYW5kIDMuIGFib3ZlIGFyZSByZXZlcnNlZAorJSBmb3IgdGhlIEdyZWVrIHNjcmlwdAorCislIGNvbGxhdGluZyBzeW1ib2xzCisKKyUgVGhlIGNvbGxhdGluZyBzeW1ib2wgbmFtaW5nIGlzCislIG1vc3RseSB0YWtlbiBmcm9tIElTTyAxMDY0Ni0xLAorJSBmb3IgZXhhbXBsZSB0aGUgY2FzZSBhbmQgYWNjZW50CislIG5hbWVzIGFyZSBmcm9tIHRoaXMgc3RhbmRhcmQuCisKK2NvbGxhdGluZy1zeW1ib2wgPENBUElUQUw+Citjb2xsYXRpbmctc3ltYm9sIDxDQVBJVEFMLVNNQUxMPgorY29sbGF0aW5nLXN5bWJvbCA8U01BTEwtQ0FQSVRBTD4KK2NvbGxhdGluZy1zeW1ib2wgPFNNQUxMPgorCislIDxDQVBJVEFMLVNNQUxMPiBhbmQgPFNNQUxMLUNBUElUQUw+CislIGFyZSBmb3IgY2FzZXMgbGlrZSBEYW5pc2ggPFUwMDQxPjxVMDA2MT4KKyUgYW5kIFNwYW5pc2ggPFUwMDQzPjxVMDA2OD4gYmVpbmcgdHJlYXRlZAorJSBhcyBvbmUgbGV0dGVyLgorCislIFRoZSA8YTg+IC4uLi4uLiA8ejg+IGNvbGxhdGluZworJSBzeW1ib2xzIGhhdmUgZGVmaW5lZCB3ZWlnaHRzIGFzCislIHRoZSBsYXN0IGNoYXJhY3RlciBpbiBhIGdyb3VwIG9mCislIExhdGluIGxldHRlcnMuIFRoZXkgYXJlIHVzZWQKKyUgdG8gc3BlY2lmeSBkZWx0YXMgYnkgbG9jYWxlcyB1c2luZworJSBhIGxvY2FsZSBhcyB0aGUgZGVmYXVsdCBvcmRlcmluZworJSBhbmQgYnkgInJlcGxhY2UtYWZ0ZXIiIHN0YXRlbWVudHMKKyUgc3BlY2lmeWluZyB0aGUgY2hhbmdlZCBwbGFjZW1lbnQKKyUgaW4gYW4gb3JkZXJpbmcgb2YgYSBjaGFyYWN0ZXIuCisKK2NvbGxhdGluZy1zeW1ib2wgPGE4PgorY29sbGF0aW5nLXN5bWJvbCA8Yjg+Citjb2xsYXRpbmctc3ltYm9sIDxjOD4KK2NvbGxhdGluZy1zeW1ib2wgPGQ4PgorY29sbGF0aW5nLXN5bWJvbCA8ZTg+Citjb2xsYXRpbmctc3ltYm9sIDxmOD4KK2NvbGxhdGluZy1zeW1ib2wgPGc4PgorY29sbGF0aW5nLXN5bWJvbCA8aDg+Citjb2xsYXRpbmctc3ltYm9sIDxpOD4KK2NvbGxhdGluZy1zeW1ib2wgPGo4PgorY29sbGF0aW5nLXN5bWJvbCA8azg+Citjb2xsYXRpbmctc3ltYm9sIDxsOD4KK2NvbGxhdGluZy1zeW1ib2wgPG04PgorY29sbGF0aW5nLXN5bWJvbCA8bjg+Citjb2xsYXRpbmctc3ltYm9sIDxvOD4KK2NvbGxhdGluZy1zeW1ib2wgPHA4PgorY29sbGF0aW5nLXN5bWJvbCA8cTg+Citjb2xsYXRpbmctc3ltYm9sIDxyOD4KK2NvbGxhdGluZy1zeW1ib2wgPHM4PgorY29sbGF0aW5nLXN5bWJvbCA8dDg+Citjb2xsYXRpbmctc3ltYm9sIDx1OD4KK2NvbGxhdGluZy1zeW1ib2wgPHY4PgorY29sbGF0aW5nLXN5bWJvbCA8dzg+Citjb2xsYXRpbmctc3ltYm9sIDx4OD4KK2NvbGxhdGluZy1zeW1ib2wgPHk4PgorY29sbGF0aW5nLXN5bWJvbCA8ejg+CisKK2NvbGxhdGluZy1zeW1ib2wgPE5PTkU+Citjb2xsYXRpbmctc3ltYm9sIDxBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPEFDVVRFK0RPVD4KK2NvbGxhdGluZy1zeW1ib2wgPEdSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8RE9VQkxFLUdSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkU+Citjb2xsYXRpbmctc3ltYm9sIDxCUkVWRStBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFK0dSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkUrTUFDUk9OPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkUrSE9PSz4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFK1RJTERFPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkUrRE9ULUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkUtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxJTlZFUlRFRC1CUkVWRT4KK2NvbGxhdGluZy1zeW1ib2wgPENJUkNVTUZMRVg+Citjb2xsYXRpbmctc3ltYm9sIDxDSVJDVU1GTEVYK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8Q0lSQ1VNRkxFWCtHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPENJUkNVTUZMRVgrSE9PSz4KK2NvbGxhdGluZy1zeW1ib2wgPENJUkNVTUZMRVgrVElMREU+Citjb2xsYXRpbmctc3ltYm9sIDxDSVJDVU1GTEVYK0RPVC1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPENBUk9OPgorY29sbGF0aW5nLXN5bWJvbCA8Q0FST04rRElBRVJFU0lTPgorY29sbGF0aW5nLXN5bWJvbCA8Q0FST04rRE9UPgorY29sbGF0aW5nLXN5bWJvbCA8UklORz4KK2NvbGxhdGluZy1zeW1ib2wgPFJJTkcrQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxSSU5HLUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8RElBRVJFU0lTPgorY29sbGF0aW5nLXN5bWJvbCA8RElBRVJFU0lTK01BQ1JPTj4KK2NvbGxhdGluZy1zeW1ib2wgPERJQUVSRVNJUytBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPERJQUVSRVNJUytHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPERJQUVSRVNJUytDQVJPTj4KK2NvbGxhdGluZy1zeW1ib2wgPERPVUJMRS1BQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPEhPT0s+Citjb2xsYXRpbmctc3ltYm9sIDxUSUxERT4KK2NvbGxhdGluZy1zeW1ib2wgPFRJTERFK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8VElMREUrRElBRVJFU0lTPgorY29sbGF0aW5nLXN5bWJvbCA8VElMREUtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxET1Q+Citjb2xsYXRpbmctc3ltYm9sIDxET1QtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxET1QrRE9ULUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8U1RST0tFPgorY29sbGF0aW5nLXN5bWJvbCA8U1RST0tFK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8Q0VESUxMQT4KK2NvbGxhdGluZy1zeW1ib2wgPENFRElMTEErQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxDRURJTExBK0dSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8Q0VESUxMQStCUkVWRT4KK2NvbGxhdGluZy1zeW1ib2wgPE9HT05FSz4KK2NvbGxhdGluZy1zeW1ib2wgPE9HT05FSytNQUNST04+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04rQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04rR1JBVkU+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04rRElBRVJFU0lTPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0RJQUVSRVNJUy1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPE1BQ1JPTitET1Q+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04rRE9ULUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0NJUkNVTUZMRVg+Citjb2xsYXRpbmctc3ltYm9sIDxMSU5FLUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8SE9STj4KK2NvbGxhdGluZy1zeW1ib2wgPEhPUk4rQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxIT1JOK0dSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8SE9STitIT09LPgorY29sbGF0aW5nLXN5bWJvbCA8SE9STitUSUxERT4KK2NvbGxhdGluZy1zeW1ib2wgPEhPUk4rRE9ULUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8UFJFQ0VERUQtQlktQVBPU1RST1BIRT4KK2NvbGxhdGluZy1zeW1ib2wgPEdSRUVLPgorY29sbGF0aW5nLXN5bWJvbCA8VE9OT1M+Citjb2xsYXRpbmctc3ltYm9sIDxESUFMWVRJQ0E+Citjb2xsYXRpbmctc3ltYm9sIDxESUFMWVRJQ0ErVE9OT1M+Citjb2xsYXRpbmctc3ltYm9sIDxDWVJJTExJQz4KK2NvbGxhdGluZy1zeW1ib2wgPEhJUkFHQU5BPgorY29sbGF0aW5nLXN5bWJvbCA8S0FUQUtBTkE+Citjb2xsYXRpbmctc3ltYm9sIDxTUEVDSUFMPgorCisKKyUgRGVmaW5pY2UgcO1zbWVuZSBjaAorCitjb2xsYXRpbmctZWxlbWVudCA8Yy1oPiBmcm9tICI8VTAwNjM+PFUwMDY4PiIKK2NvbGxhdGluZy1lbGVtZW50IDxDLWg+IGZyb20gIjxVMDA0Mz48VTAwNjg+IgorY29sbGF0aW5nLWVsZW1lbnQgPEMtSD4gZnJvbSAiPFUwMDQzPjxVMDA0OD4iCisKKworJSBsZXR0ZXI7YWNjZW50O2Nhc2U7c3BlY2lhbHMKKworJW9yZGVyX3N0YXJ0IGZvcndhcmQ7Zm9yd2FyZDtmb3J3YXJkO2ZvcndhcmQKK29yZGVyX3N0YXJ0IGZvcndhcmQ7Zm9yd2FyZDtmb3J3YXJkO2ZvcndhcmQKKworJSA8Q0FQSVRBTD4gb3IgPFNNQUxMPiBsZXR0ZXJzIGZpcnN0OgorCis8U01BTEwtQ0FQSVRBTD4KKzxTTUFMTD4KKzxDQVBJVEFMPgorPENBUElUQUwtU01BTEw+CisKKyUgQWNjZW50czoKKyUgUG/4YWTtIGFrY2VudPk6IG5haG/4ZSwgZG9sZSwgdnphZHUsIHZw+GVkdSwgdXZuaXT4IG5lYm8gcPhlcyBw7XNtZW5vCislIHBva3VkIHRvdG8gbmVyb3pob2RuZSB64Wxlvu0gbmEgcG/odHUgYSB0dmFydQorCis8Tk9ORT4KKyUgbmFob/hlCis8RE9UPgkJJSBUZehrYQorPE1BQ1JPTj4JJSBWb2Rvcm92buEg6OFya2EgbmFob/hlCis8QUNVVEU+CQklIMjhcmthICcgKG5hcPg6IOEpCis8R1JBVkU+CQklIFpw7HRu4SDo4XJrYSBgCis8Q0lSQ1VNRkxFWD4JJSBTdPjtuWthIF4gKG5hcPg6IOIpCis8Q0FST04+CQklIEjh6GVrCis8VElMREU+CQklIFRpbGRhICh+KQorPEJSRVZFPgkJJSBEb2xu7SBw+Wxrcm91vmVrICh2eXBhZOEgamFrbyBzamVkbm9jZW7tKQorPElOVkVSVEVELUJSRVZFPiUgSG9ybu0gcPlsa3Jvdb5layAodnlwYWThIGpha28gcHL5bmlrKQorPFJJTkc+CQklIEtyb3W+ZWsKKzxIT09LPgkJJSBuZXR1ue1tIGpha+kgZGlha3JpdGlja+kgem5hbelua28gdG8gamUsIHD4ZWRwb2ts4WThbSBqZSBuYWhv+GUKKzxIT1JOPgkJJSBuZXR1ue1tIGpha+kgZGlha3JpdGlja+kgem5hbelua28gdG8gamUsIHD4ZWRwb2ts4WThbSBqZSBuYWhv+GUKKworPERJQUVSRVNJUz4JJSBEduwgdGXoa3kKKzxBQ1VURStET1Q+Cis8RE9VQkxFLUFDVVRFPgklIER27CDo4XJreQorPERPVUJMRS1HUkFWRT4JJSBEduwgenDsdG7pIOjhcmt5Cis8VElMREUrQUNVVEU+Cis8QlJFVkUrTUFDUk9OPgorPEJSRVZFK0FDVVRFPgorPEJSRVZFK0dSQVZFPgorPEJSRVZFK1RJTERFPgorPEJSRVZFK0hPT0s+Cis8Q0lSQ1VNRkxFWCtBQ1VURT4KKzxDSVJDVU1GTEVYK0dSQVZFPgorPENJUkNVTUZMRVgrVElMREU+Cis8Q0lSQ1VNRkxFWCtIT09LPgorPENBUk9OK0RPVD4KKzxSSU5HK0FDVVRFPgorPE1BQ1JPTitET1Q+Cis8TUFDUk9OK0FDVVRFPgorPE1BQ1JPTitHUkFWRT4KKzxNQUNST04rQ0lSQ1VNRkxFWD4KKzxIT1JOK0FDVVRFPgorPEhPUk4rR1JBVkU+Cis8SE9STitUSUxERT4KKzxIT1JOK0hPT0s+Cis8RElBRVJFU0lTK01BQ1JPTj4KKzxESUFFUkVTSVMrQUNVVEU+Cis8RElBRVJFU0lTK0dSQVZFPgorPERJQUVSRVNJUytDQVJPTj4KKzxNQUNST04rRElBRVJFU0lTPgorPFRJTERFK0RJQUVSRVNJUz4KKzxDQVJPTitESUFFUkVTSVM+CisKKyUgbmFob/hlIGEgZG9sZQorPERPVCtET1QtQkVMT1c+CQklIFpkZSBzaSBuZWpzZW0gamlzdCBqYWsgamUgdG8gbe1u7G5vLCB6ZGEgb2LsIHBvZAorPE1BQ1JPTitET1QtQkVMT1c+CSUgbmVibyBwb3V6ZSB0byBkcnVo6QorPEJSRVZFK0RPVC1CRUxPVz4KKzxDSVJDVU1GTEVYK0RPVC1CRUxPVz4KKzxDRURJTExBK0FDVVRFPgorPENFRElMTEErR1JBVkU+Cis8Q0VESUxMQStCUkVWRT4KKzxPR09ORUsrTUFDUk9OPgorPEhPUk4rRE9ULUJFTE9XPgorPE1BQ1JPTitESUFFUkVTSVMtQkVMT1c+CislIG5haG/4ZSBhIHVwcm9zdPhlZAorPFNUUk9LRStBQ1VURT4KKworJSBkb2xlCis8RE9ULUJFTE9XPgorPExJTkUtQkVMT1c+Cis8VElMREUtQkVMT1c+Cis8QlJFVkUtQkVMT1c+Cis8Q0VESUxMQT4JJSBab2Lh6GVrIHBvZCBw7XNtZW5lbSB2eXBhZOEgc2tvcm8gamFrbyBzICi6KQorPE9HT05FSz4JJSBab2Lh6GVrIHBvZCBw7XNtZW5lbSBvYnLhY2Vu/SBrIHD4ZWRjaG967W11IChqYWtvIGMpKOopCis8UklORy1CRUxPVz4KKyUgemEKKyUgcPhlZAorPFBSRUNFREVELUJZLUFQT1NUUk9QSEU+CislIHVwcm9zdPhlZAorPFNUUk9LRT4JJSCpa3J0bnV07SBw7XNtZW5lIHYgcHJvc3T4ZWRrdSAocG9sc2vpILMpCisKKzxHUkVFSz4KKzxUT05PUz4KKzxESUFMWVRJQ0E+Cis8RElBTFlUSUNBK1RPTk9TPgorPENZUklMTElDPgorPEhJUkFHQU5BPgorPEtBVEFLQU5BPgorPFNQRUNJQUw+CisKKzxVMDBBMD4JPFUwMEEwPjs8VTAwQTA+OzxVMDBBMD47PFUwMEEwPgorPFUwMDIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjA+Cis8VTIwMDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwMj4KKzxVMjAwMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDAzPgorPFUyMDA0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMDQ+Cis8VTIwMDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwNT4KKzxVMjAwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDA2PgorPFUyMDA5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMDk+Cis8VTIwMEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwQT4KKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJSBaZGUganNvdSB2uWVjaG5hIGxhdGluc2vhIHDtc21lbmEgcyBkaWFrcml0aWtvdQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCis8VTAwNDE+CTxVMDA0MT47PE5PTkU+OzxDQVBJVEFMPjs8VTAwNDE+Cis8VTAwNjE+CTxVMDA0MT47PE5PTkU+OzxTTUFMTD47PFUwMDQxPgorPFUwMEFBPgk8VTAwNDE+OzxOT05FPjs8VTAwQUE+OzxVMDA0MT4KKzxVMDBDMT4JPFUwMDQxPjs8QUNVVEU+OzxDQVBJVEFMPjs8VTAwNDE+Cis8VTAwRTE+CTxVMDA0MT47PEFDVVRFPjs8U01BTEw+OzxVMDA0MT4KKzxVMDBDMD4JPFUwMDQxPjs8R1JBVkU+OzxDQVBJVEFMPjs8VTAwNDE+Cis8VTAwRTA+CTxVMDA0MT47PEdSQVZFPjs8U01BTEw+OzxVMDA0MT4KKzxVMDIwMD4JPFUwMDQxPjs8RE9VQkxFLUdSQVZFPjs8Q0FQSVRBTD47PFUwMDQxPgorPFUwMjAxPgk8VTAwNDE+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47PFUwMDQxPgorPFUwMTAyPgk8VTAwNDE+OzxCUkVWRT47PENBUElUQUw+OzxVMDA0MT4KKzxVMDEwMz4JPFUwMDQxPjs8QlJFVkU+OzxTTUFMTD47PFUwMDQxPgorPFUxRUFFPgk8VTAwNDE+OzxCUkVWRStBQ1VURT47PENBUElUQUw+OzxVMDA0MT4KKzxVMUVBRj4JPFUwMDQxPjs8QlJFVkUrQUNVVEU+OzxTTUFMTD47PFUwMDQxPgorPFUxRUIwPgk8VTAwNDE+OzxCUkVWRStHUkFWRT47PENBUElUQUw+OzxVMDA0MT4KKzxVMUVCMT4JPFUwMDQxPjs8QlJFVkUrR1JBVkU+OzxTTUFMTD47PFUwMDQxPgorPFUxRUIyPgk8VTAwNDE+OzxCUkVWRStIT09LPjs8Q0FQSVRBTD47PFUwMDQxPgorPFUxRUIzPgk8VTAwNDE+OzxCUkVWRStIT09LPjs8U01BTEw+OzxVMDA0MT4KKzxVMUVCND4JPFUwMDQxPjs8QlJFVkUrVElMREU+OzxDQVBJVEFMPjs8VTAwNDE+Cis8VTFFQjU+CTxVMDA0MT47PEJSRVZFK1RJTERFPjs8U01BTEw+OzxVMDA0MT4KKzxVMUVCNj4JPFUwMDQxPjs8QlJFVkUrRE9ULUJFTE9XPjs8Q0FQSVRBTD47PFUwMDQxPgorPFUxRUI3Pgk8VTAwNDE+OzxCUkVWRStET1QtQkVMT1c+OzxTTUFMTD47PFUwMDQxPgorPFUwMjAyPgk8VTAwNDE+OzxJTlZFUlRFRC1CUkVWRT47PENBUElUQUw+OzxVMDA0MT4KKzxVMDIwMz4JPFUwMDQxPjs8SU5WRVJURUQtQlJFVkU+OzxTTUFMTD47PFUwMDQxPgorPFUwMEMyPgk8VTAwNDE+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47PFUwMDQxPgorPFUwMEUyPgk8VTAwNDE+OzxDSVJDVU1GTEVYPjs8U01BTEw+OzxVMDA0MT4KKzxVMUVBND4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtBQ1VURT47PENBUElUQUw+OzxVMDA0MT4KKzxVMUVBNT4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtBQ1VURT47PFNNQUxMPjs8VTAwNDE+Cis8VTFFQTY+CTxVMDA0MT47PENJUkNVTUZMRVgrR1JBVkU+OzxDQVBJVEFMPjs8VTAwNDE+Cis8VTFFQTc+CTxVMDA0MT47PENJUkNVTUZMRVgrR1JBVkU+OzxTTUFMTD47PFUwMDQxPgorPFUxRUE4Pgk8VTAwNDE+OzxDSVJDVU1GTEVYK0hPT0s+OzxDQVBJVEFMPjs8VTAwNDE+Cis8VTFFQTk+CTxVMDA0MT47PENJUkNVTUZMRVgrSE9PSz47PFNNQUxMPjs8VTAwNDE+Cis8VTFFQUE+CTxVMDA0MT47PENJUkNVTUZMRVgrVElMREU+OzxDQVBJVEFMPjs8VTAwNDE+Cis8VTFFQUI+CTxVMDA0MT47PENJUkNVTUZMRVgrVElMREU+OzxTTUFMTD47PFUwMDQxPgorPFUxRUFDPgk8VTAwNDE+OzxDSVJDVU1GTEVYK0RPVC1CRUxPVz47PENBUElUQUw+OzxVMDA0MT4KKzxVMUVBRD4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtET1QtQkVMT1c+OzxTTUFMTD47PFUwMDQxPgorPFUwMUNEPgk8VTAwNDE+OzxDQVJPTj47PENBUElUQUw+OzxVMDA0MT4KKzxVMDFDRT4JPFUwMDQxPjs8Q0FST04+OzxTTUFMTD47PFUwMDQxPgorPFUwMEM1Pgk8VTAwNDE+OzxSSU5HPjs8Q0FQSVRBTD47PFUwMDQxPgorPFUwMEU1Pgk8VTAwNDE+OzxSSU5HPjs8U01BTEw+OzxVMDA0MT4KKzxVMDFGQT4JPFUwMDQxPjs8UklORytBQ1VURT47PENBUElUQUw+OzxVMDA0MT4KKzxVMDFGQj4JPFUwMDQxPjs8UklORytBQ1VURT47PFNNQUxMPjs8VTAwNDE+Cis8VTFFMDA+CTxVMDA0MT47PFJJTkctQkVMT1c+OzxDQVBJVEFMPjs8VTAwNDE+Cis8VTFFMDE+CTxVMDA0MT47PFJJTkctQkVMT1c+OzxTTUFMTD47PFUwMDQxPgorPFUwMEM0Pgk8VTAwNDE+OzxESUFFUkVTSVM+OzxDQVBJVEFMPjs8VTAwNDE+Cis8VTAwRTQ+CTxVMDA0MT47PERJQUVSRVNJUz47PFNNQUxMPjs8VTAwNDE+Cis8VTAxREU+CTxVMDA0MT47PERJQUVSRVNJUytNQUNST04+OzxDQVBJVEFMPjs8VTAwNDE+Cis8VTAxREY+CTxVMDA0MT47PERJQUVSRVNJUytNQUNST04+OzxTTUFMTD47PFUwMDQxPgorPFUxRUEyPgk8VTAwNDE+OzxIT09LPjs8Q0FQSVRBTD47PFUwMDQxPgorPFUxRUEzPgk8VTAwNDE+OzxIT09LPjs8U01BTEw+OzxVMDA0MT4KKzxVMDBDMz4JPFUwMDQxPjs8VElMREU+OzxDQVBJVEFMPjs8VTAwNDE+Cis8VTAwRTM+CTxVMDA0MT47PFRJTERFPjs8U01BTEw+OzxVMDA0MT4KKzxVMUVBMD4JPFUwMDQxPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47PFUwMDQxPgorPFUxRUExPgk8VTAwNDE+OzxET1QtQkVMT1c+OzxTTUFMTD47PFUwMDQxPgorPFUwMTA0Pgk8VTAwNDE+OzxPR09ORUs+OzxDQVBJVEFMPjs8VTAwNDE+Cis8VTAxMDU+CTxVMDA0MT47PE9HT05FSz47PFNNQUxMPjs8VTAwNDE+Cis8VTAxMDA+CTxVMDA0MT47PE1BQ1JPTj47PENBUElUQUw+OzxVMDA0MT4KKzxVMDEwMT4JPFUwMDQxPjs8TUFDUk9OPjs8U01BTEw+OzxVMDA0MT4KKzxVMDFFMD4JPFUwMDQxPjs8TUFDUk9OK0RPVD47PENBUElUQUw+OzxVMDA0MT4KKzxVMDFFMT4JPFUwMDQxPjs8TUFDUk9OK0RPVD47PFNNQUxMPjs8VTAwNDE+Cis8YTg+CisKKzxVMDBDNj4JIjxVMDA0MT48VTAwNDU+IjsiPFUwMEM2PjxVMDBDNj4iOyI8Q0FQSVRBTD48Q0FQSVRBTD4iOyI8VTAwNDE+PFUwMDQ1PiIKKzxVMDBFNj4JIjxVMDA0MT48VTAwNDU+IjsiPFUwMEM2PjxVMDBDNj4iOyI8U01BTEw+PFNNQUxMPiI7IjxVMDA0MT48VTAwNDU+IgorPFUwMUZDPgkiPFUwMDQxPjxVMDA0NT4iOyI8VTAxRkM+PFUwMUZDPiI7IjxDQVBJVEFMPjxDQVBJVEFMPiI7IjxVMDA0MT48VTAwNDU+IgorPFUwMUZEPgkiPFUwMDQxPjxVMDA0NT4iOyI8VTAxRkM+PFUwMUZDPiI7IjxTTUFMTD48U01BTEw+IjsiPFUwMDQxPjxVMDA0NT4iCis8VTAxRTI+CSI8VTAwNDE+PFUwMDQ1PiI7IjxVMDFFMj48VTAxRTI+IjsiPENBUElUQUw+PENBUElUQUw+IjsiPFUwMDQxPjxVMDA0NT4iCis8VTAxRTM+CSI8VTAwNDE+PFUwMDQ1PiI7IjxVMDFFMj48VTAxRTI+IjsiPFNNQUxMPjxTTUFMTD4iOyI8VTAwNDE+PFUwMDQ1PiIKKworPFUwMDQyPgk8VTAwNDI+OzxOT05FPjs8Q0FQSVRBTD47PFUwMDQyPgorPFUwMDYyPgk8VTAwNDI+OzxOT05FPjs8U01BTEw+OzxVMDA0Mj4KKzxVMUUwMj4JPFUwMDQyPjs8RE9UPjs8Q0FQSVRBTD47PFUwMDQyPgorPFUxRTAzPgk8VTAwNDI+OzxET1Q+OzxTTUFMTD47PFUwMDQyPgorPFUxRTA0Pgk8VTAwNDI+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjs8VTAwNDI+Cis8VTFFMDU+CTxVMDA0Mj47PERPVC1CRUxPVz47PFNNQUxMPjs8VTAwNDI+Cis8VTFFMDY+CTxVMDA0Mj47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjs8VTAwNDI+Cis8VTFFMDc+CTxVMDA0Mj47PExJTkUtQkVMT1c+OzxTTUFMTD47PFUwMDQyPgorPGI4PgorCis8VTAwNDM+CTxVMDA0Mz47PE5PTkU+OzxDQVBJVEFMPjs8VTAwNDM+Cis8VTAwNjM+CTxVMDA0Mz47PE5PTkU+OzxTTUFMTD47PFUwMDQzPgorPFUwMTA2Pgk8VTAwNDM+OzxBQ1VURT47PENBUElUQUw+OzxVMDA0Mz4KKzxVMDEwNz4JPFUwMDQzPjs8QUNVVEU+OzxTTUFMTD47PFUwMDQzPgorPFUwMTA4Pgk8VTAwNDM+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47PFUwMDQzPgorPFUwMTA5Pgk8VTAwNDM+OzxDSVJDVU1GTEVYPjs8U01BTEw+OzxVMDA0Mz4KKzxVMDE4Nz4JPFUwMDQzPjs8SE9PSz47PENBUElUQUw+OzxVMDA0Mz4KKzxVMDE4OD4JPFUwMDQzPjs8SE9PSz47PFNNQUxMPjs8VTAwNDM+Cis8VTAxMEE+CTxVMDA0Mz47PERPVD47PENBUElUQUw+OzxVMDA0Mz4KKzxVMDEwQj4JPFUwMDQzPjs8RE9UPjs8U01BTEw+OzxVMDA0Mz4KKzxVMDBDNz4JPFUwMDQzPjs8Q0VESUxMQT47PENBUElUQUw+OzxVMDA0Mz4KKzxVMDBFNz4JPFUwMDQzPjs8Q0VESUxMQT47PFNNQUxMPjs8VTAwNDM+Cis8VTFFMDg+CTxVMDA0Mz47PENFRElMTEErQUNVVEU+OzxDQVBJVEFMPjs8VTAwNDM+Cis8VTFFMDk+CTxVMDA0Mz47PENFRElMTEErQUNVVEU+OzxTTUFMTD47PFUwMDQzPgorCis8VTAxMEM+CTxVMDEwQz47PENBUk9OPjs8Q0FQSVRBTD47PFUwMTBDPgorPFUwMTBEPgk8VTAxMEM+OzxDQVJPTj47PFNNQUxMPjs8VTAxMEM+CisKKzxjOD4KKworPFUwMDQ0Pgk8VTAwNDQ+OzxOT05FPjs8Q0FQSVRBTD47PFUwMDQ0PgorPFUwMDY0Pgk8VTAwNDQ+OzxOT05FPjs8U01BTEw+OzxVMDA0ND4KKzxVMDEwRT4JPFUwMDQ0Pjs8Q0FST04+OzxDQVBJVEFMPjs8VTAwNDQ+Cis8VTAxMEY+CTxVMDA0ND47PENBUk9OPjs8U01BTEw+OzxVMDA0ND4KKzxVMUUwQT4JPFUwMDQ0Pjs8RE9UPjs8Q0FQSVRBTD47PFUwMDQ0PgorPFUxRTBCPgk8VTAwNDQ+OzxET1Q+OzxTTUFMTD47PFUwMDQ0PgorPFUxRTBDPgk8VTAwNDQ+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjs8VTAwNDQ+Cis8VTFFMEQ+CTxVMDA0ND47PERPVC1CRUxPVz47PFNNQUxMPjs8VTAwNDQ+Cis8VTAxMTA+CTxVMDA0ND47PFNUUk9LRT47PENBUElUQUw+OzxVMDA0ND4KKzxVMDExMT4JPFUwMDQ0Pjs8U1RST0tFPjs8U01BTEw+OzxVMDA0ND4KKzxVMUUxMD4JPFUwMDQ0Pjs8Q0VESUxMQT47PENBUElUQUw+OzxVMDA0ND4KKzxVMUUxMT4JPFUwMDQ0Pjs8Q0VESUxMQT47PFNNQUxMPjs8VTAwNDQ+Cis8VTFFMTI+CTxVMDA0ND47PE1BQ1JPTitDSVJDVU1GTEVYPjs8Q0FQSVRBTD47PFUwMDQ0PgorPFUxRTEzPgk8VTAwNDQ+OzxNQUNST04rQ0lSQ1VNRkxFWD47PFNNQUxMPjs8VTAwNDQ+Cis8VTFFMEU+CTxVMDA0ND47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjs8VTAwNDQ+Cis8VTFFMEY+CTxVMDA0ND47PExJTkUtQkVMT1c+OzxTTUFMTD47PFUwMDQ0PgorPGQ4PgorCis8VTAwNDU+CTxVMDA0NT47PE5PTkU+OzxDQVBJVEFMPjs8VTAwNDU+Cis8VTAwNjU+CTxVMDA0NT47PE5PTkU+OzxTTUFMTD47PFUwMDQ1PgorPFUwMEM5Pgk8VTAwNDU+OzxBQ1VURT47PENBUElUQUw+OzxVMDA0NT4KKzxVMDBFOT4JPFUwMDQ1Pjs8QUNVVEU+OzxTTUFMTD47PFUwMDQ1PgorPFUwMEM4Pgk8VTAwNDU+OzxHUkFWRT47PENBUElUQUw+OzxVMDA0NT4KKzxVMDBFOD4JPFUwMDQ1Pjs8R1JBVkU+OzxTTUFMTD47PFUwMDQ1PgorPFUwMjA0Pgk8VTAwNDU+OzxET1VCTEUtR1JBVkU+OzxDQVBJVEFMPjs8VTAwNDU+Cis8VTAyMDU+CTxVMDA0NT47PERPVUJMRS1HUkFWRT47PFNNQUxMPjs8VTAwNDU+Cis8VTAxMTQ+CTxVMDA0NT47PEJSRVZFPjs8Q0FQSVRBTD47PFUwMDQ1PgorPFUwMTE1Pgk8VTAwNDU+OzxCUkVWRT47PFNNQUxMPjs8VTAwNDU+Cis8VTAyMDY+CTxVMDA0NT47PElOVkVSVEVELUJSRVZFPjs8Q0FQSVRBTD47PFUwMDQ1PgorPFUwMjA3Pgk8VTAwNDU+OzxJTlZFUlRFRC1CUkVWRT47PFNNQUxMPjs8VTAwNDU+Cis8VTAwQ0E+CTxVMDA0NT47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjs8VTAwNDU+Cis8VTAwRUE+CTxVMDA0NT47PENJUkNVTUZMRVg+OzxTTUFMTD47PFUwMDQ1PgorPFUxRUJFPgk8VTAwNDU+OzxDSVJDVU1GTEVYK0FDVVRFPjs8Q0FQSVRBTD47PFUwMDQ1PgorPFUxRUJGPgk8VTAwNDU+OzxDSVJDVU1GTEVYK0FDVVRFPjs8U01BTEw+OzxVMDA0NT4KKzxVMUVDMD4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtHUkFWRT47PENBUElUQUw+OzxVMDA0NT4KKzxVMUVDMT4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtHUkFWRT47PFNNQUxMPjs8VTAwNDU+Cis8VTFFQzI+CTxVMDA0NT47PENJUkNVTUZMRVgrSE9PSz47PENBUElUQUw+OzxVMDA0NT4KKzxVMUVDMz4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtIT09LPjs8U01BTEw+OzxVMDA0NT4KKzxVMUVDND4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtUSUxERT47PENBUElUQUw+OzxVMDA0NT4KKzxVMUVDNT4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtUSUxERT47PFNNQUxMPjs8VTAwNDU+Cis8VTFFQzY+CTxVMDA0NT47PENJUkNVTUZMRVgrRE9ULUJFTE9XPjs8Q0FQSVRBTD47PFUwMDQ1PgorPFUxRUM3Pgk8VTAwNDU+OzxDSVJDVU1GTEVYK0RPVC1CRUxPVz47PFNNQUxMPjs8VTAwNDU+Cis8VTAxMUE+CTxVMDA0NT47PENBUk9OPjs8Q0FQSVRBTD47PFUwMDQ1PgorPFUwMTFCPgk8VTAwNDU+OzxDQVJPTj47PFNNQUxMPjs8VTAwNDU+Cis8VTAwQ0I+CTxVMDA0NT47PERJQUVSRVNJUz47PENBUElUQUw+OzxVMDA0NT4KKzxVMDBFQj4JPFUwMDQ1Pjs8RElBRVJFU0lTPjs8U01BTEw+OzxVMDA0NT4KKzxVMUVCQT4JPFUwMDQ1Pjs8SE9PSz47PENBUElUQUw+OzxVMDA0NT4KKzxVMUVCQj4JPFUwMDQ1Pjs8SE9PSz47PFNNQUxMPjs8VTAwNDU+Cis8VTFFQkM+CTxVMDA0NT47PFRJTERFPjs8Q0FQSVRBTD47PFUwMDQ1PgorPFUxRUJEPgk8VTAwNDU+OzxUSUxERT47PFNNQUxMPjs8VTAwNDU+Cis8VTFFMUE+CTxVMDA0NT47PFRJTERFLUJFTE9XPjs8Q0FQSVRBTD47PFUwMDQ1PgorPFUxRTFCPgk8VTAwNDU+OzxUSUxERS1CRUxPVz47PFNNQUxMPjs8VTAwNDU+Cis8VTAxMTY+CTxVMDA0NT47PERPVD47PENBUElUQUw+OzxVMDA0NT4KKzxVMDExNz4JPFUwMDQ1Pjs8RE9UPjs8U01BTEw+OzxVMDA0NT4KKzxVMUVCOD4JPFUwMDQ1Pjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47PFUwMDQ1PgorPFUxRUI5Pgk8VTAwNDU+OzxET1QtQkVMT1c+OzxTTUFMTD47PFUwMDQ1PgorPFUxRTFDPgk8VTAwNDU+OzxDRURJTExBK0JSRVZFPjs8Q0FQSVRBTD47PFUwMDQ1PgorPFUxRTFEPgk8VTAwNDU+OzxDRURJTExBK0JSRVZFPjs8U01BTEw+OzxVMDA0NT4KKzxVMDExOD4JPFUwMDQ1Pjs8T0dPTkVLPjs8Q0FQSVRBTD47PFUwMDQ1PgorPFUwMTE5Pgk8VTAwNDU+OzxPR09ORUs+OzxTTUFMTD47PFUwMDQ1PgorPFUwMTEyPgk8VTAwNDU+OzxNQUNST04+OzxDQVBJVEFMPjs8VTAwNDU+Cis8VTAxMTM+CTxVMDA0NT47PE1BQ1JPTj47PFNNQUxMPjs8VTAwNDU+Cis8VTFFMTY+CTxVMDA0NT47PE1BQ1JPTitBQ1VURT47PENBUElUQUw+OzxVMDA0NT4KKzxVMUUxNz4JPFUwMDQ1Pjs8TUFDUk9OK0FDVVRFPjs8U01BTEw+OzxVMDA0NT4KKzxVMUUxND4JPFUwMDQ1Pjs8TUFDUk9OK0dSQVZFPjs8Q0FQSVRBTD47PFUwMDQ1PgorPFUxRTE1Pgk8VTAwNDU+OzxNQUNST04rR1JBVkU+OzxTTUFMTD47PFUwMDQ1PgorPFUxRTE4Pgk8VTAwNDU+OzxNQUNST04rQ0lSQ1VNRkxFWD47PENBUElUQUw+OzxVMDA0NT4KKzxVMUUxOT4JPFUwMDQ1Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxTTUFMTD47PFUwMDQ1PgorPGU4PgorCis8VTAwNDY+CTxVMDA0Nj47PE5PTkU+OzxDQVBJVEFMPjs8VTAwNDY+Cis8VTAwNjY+CTxVMDA0Nj47PE5PTkU+OzxTTUFMTD47PFUwMDQ2PgorPFUwMTkxPgk8VTAwNDY+OzxIT09LPjs8Q0FQSVRBTD47PFUwMDQ2PgorPFUwMTkyPgk8VTAwNDY+OzxIT09LPjs8U01BTEw+OzxVMDA0Nj4KKzxVMUUxRT4JPFUwMDQ2Pjs8RE9UPjs8Q0FQSVRBTD47PFUwMDQ2PgorPFUxRTFGPgk8VTAwNDY+OzxET1Q+OzxTTUFMTD47PFUwMDQ2PgorPGY4PgorCis8VUZCMDA+CSI8VTAwNDY+PFUwMDQ2PiI7IjxOT05FPjxOT05FPiI7IjxVRkIwMD48VUZCMDA+IjsiPFUwMDQ2PjxVMDA0Nj4iCis8VUZCMDE+CSI8VTAwNDY+PFUwMDQ5PiI7IjxOT05FPjxOT05FPiI7IjxVRkIwMT48VUZCMDE+IjsiPFUwMDQ2PjxVMDA0OT4iCis8VUZCMDI+CSI8VTAwNDY+PFUwMDRDPiI7IjxOT05FPjxOT05FPiI7IjxVRkIwMj48VUZCMDI+IjsiPFUwMDQ2PjxVMDA0Qz4iCis8VUZCMDM+CSI8VTAwNDY+PFUwMDQ2PjxVMDA0OT4iOyI8Tk9ORT48Tk9ORT48Tk9ORT4iOyI8VUZCMDM+PFVGQjAzPjxVRkIwMz4iOyI8VTAwNDY+PFUwMDQ2PjxVMDA0OT4iCis8VUZCMDQ+CSI8VTAwNDY+PFUwMDQ2PjxVMDA0Qz4iOyI8Tk9ORT48Tk9ORT48Tk9ORT4iOyI8VUZCMDQ+PFVGQjA0PjxVRkIwND4iOyI8VTAwNDY+PFUwMDQ2PjxVMDA0Qz4iCisKKzxVMDA0Nz4JPFUwMDQ3Pjs8Tk9ORT47PENBUElUQUw+OzxVMDA0Nz4KKzxVMDA2Nz4JPFUwMDQ3Pjs8Tk9ORT47PFNNQUxMPjs8VTAwNDc+Cis8VTAxRjQ+CTxVMDA0Nz47PEFDVVRFPjs8Q0FQSVRBTD47PFUwMDQ3PgorPFUwMUY1Pgk8VTAwNDc+OzxBQ1VURT47PFNNQUxMPjs8VTAwNDc+Cis8VTAxMUU+CTxVMDA0Nz47PEJSRVZFPjs8Q0FQSVRBTD47PFUwMDQ3PgorPFUwMTFGPgk8VTAwNDc+OzxCUkVWRT47PFNNQUxMPjs8VTAwNDc+Cis8VTAxMUM+CTxVMDA0Nz47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjs8VTAwNDc+Cis8VTAxMUQ+CTxVMDA0Nz47PENJUkNVTUZMRVg+OzxTTUFMTD47PFUwMDQ3PgorPFUwMUU2Pgk8VTAwNDc+OzxDQVJPTj47PENBUElUQUw+OzxVMDA0Nz4KKzxVMDFFNz4JPFUwMDQ3Pjs8Q0FST04+OzxTTUFMTD47PFUwMDQ3PgorPFUwMTIwPgk8VTAwNDc+OzxET1Q+OzxDQVBJVEFMPjs8VTAwNDc+Cis8VTAxMjE+CTxVMDA0Nz47PERPVD47PFNNQUxMPjs8VTAwNDc+Cis8VTAxRTQ+CTxVMDA0Nz47PFNUUk9LRT47PENBUElUQUw+OzxVMDA0Nz4KKzxVMDFFNT4JPFUwMDQ3Pjs8U1RST0tFPjs8U01BTEw+OzxVMDA0Nz4KKzxVMDEyMj4JPFUwMDQ3Pjs8Q0VESUxMQT47PENBUElUQUw+OzxVMDA0Nz4KKzxVMDEyMz4JPFUwMDQ3Pjs8Q0VESUxMQT47PFNNQUxMPjs8VTAwNDc+Cis8VTFFMjA+CTxVMDA0Nz47PE1BQ1JPTj47PENBUElUQUw+OzxVMDA0Nz4KKzxVMUUyMT4JPFUwMDQ3Pjs8TUFDUk9OPjs8U01BTEw+OzxVMDA0Nz4KKzxnOD4KKworPFUwMDQ4Pgk8VTAwNDg+OzxOT05FPjs8Q0FQSVRBTD47PFUwMDQ4PgorPFUwMDY4Pgk8VTAwNDg+OzxOT05FPjs8U01BTEw+OzxVMDA0OD4KKzxVMUUyQT4JPFUwMDQ4Pjs8QlJFVkUtQkVMT1c+OzxDQVBJVEFMPjs8VTAwNDg+Cis8VTFFMkI+CTxVMDA0OD47PEJSRVZFLUJFTE9XPjs8U01BTEw+OzxVMDA0OD4KKzxVMDEyND4JPFUwMDQ4Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+OzxVMDA0OD4KKzxVMDEyNT4JPFUwMDQ4Pjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjs8VTAwNDg+Cis8VTFFMjY+CTxVMDA0OD47PERJQUVSRVNJUz47PENBUElUQUw+OzxVMDA0OD4KKzxVMUUyNz4JPFUwMDQ4Pjs8RElBRVJFU0lTPjs8U01BTEw+OzxVMDA0OD4KKzxVMUUyMj4JPFUwMDQ4Pjs8RE9UPjs8Q0FQSVRBTD47PFUwMDQ4PgorPFUxRTIzPgk8VTAwNDg+OzxET1Q+OzxTTUFMTD47PFUwMDQ4PgorPFUxRTI0Pgk8VTAwNDg+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjs8VTAwNDg+Cis8VTFFMjU+CTxVMDA0OD47PERPVC1CRUxPVz47PFNNQUxMPjs8VTAwNDg+Cis8VTAxMjY+CTxVMDA0OD47PFNUUk9LRT47PENBUElUQUw+OzxVMDA0OD4KKzxVMDEyNz4JPFUwMDQ4Pjs8U1RST0tFPjs8U01BTEw+OzxVMDA0OD4KKzxVMUUyOD4JPFUwMDQ4Pjs8Q0VESUxMQT47PENBUElUQUw+OzxVMDA0OD4KKzxVMUUyOT4JPFUwMDQ4Pjs8Q0VESUxMQT47PFNNQUxMPjs8VTAwNDg+Cis8aDg+CisKKzxDLUg+CTxDLUg+OzxOT05FPjs8Q0FQSVRBTD47PEMtSD4KKzxDLWg+CTxDLUg+OzxOT05FPjs8Q0FQSVRBTC1TTUFMTD47PEMtSD4KKzxjLWg+CTxDLUg+OzxOT05FPjs8U01BTEw+OzxDLUg+CisKKzxVMDA0OT4JPFUwMDQ5Pjs8Tk9ORT47PENBUElUQUw+OzxVMDA0OT4KKzxVMDA2OT4JPFUwMDQ5Pjs8Tk9ORT47PFNNQUxMPjs8VTAwNDk+Cis8VTAwQ0Q+CTxVMDA0OT47PEFDVVRFPjs8Q0FQSVRBTD47PFUwMDQ5PgorPFUwMEVEPgk8VTAwNDk+OzxBQ1VURT47PFNNQUxMPjs8VTAwNDk+Cis8VTAwQ0M+CTxVMDA0OT47PEdSQVZFPjs8Q0FQSVRBTD47PFUwMDQ5PgorPFUwMEVDPgk8VTAwNDk+OzxHUkFWRT47PFNNQUxMPjs8VTAwNDk+Cis8VTAyMDg+CTxVMDA0OT47PERPVUJMRS1HUkFWRT47PENBUElUQUw+OzxVMDA0OT4KKzxVMDIwOT4JPFUwMDQ5Pjs8RE9VQkxFLUdSQVZFPjs8U01BTEw+OzxVMDA0OT4KKzxVMDEyQz4JPFUwMDQ5Pjs8QlJFVkU+OzxDQVBJVEFMPjs8VTAwNDk+Cis8VTAxMkQ+CTxVMDA0OT47PEJSRVZFPjs8U01BTEw+OzxVMDA0OT4KKzxVMDIwQT4JPFUwMDQ5Pjs8SU5WRVJURUQtQlJFVkU+OzxDQVBJVEFMPjs8VTAwNDk+Cis8VTAyMEI+CTxVMDA0OT47PElOVkVSVEVELUJSRVZFPjs8U01BTEw+OzxVMDA0OT4KKzxVMDBDRT4JPFUwMDQ5Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+OzxVMDA0OT4KKzxVMDBFRT4JPFUwMDQ5Pjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjs8VTAwNDk+Cis8VTAxQ0Y+CTxVMDA0OT47PENBUk9OPjs8Q0FQSVRBTD47PFUwMDQ5PgorPFUwMUQwPgk8VTAwNDk+OzxDQVJPTj47PFNNQUxMPjs8VTAwNDk+Cis8VTAwQ0Y+CTxVMDA0OT47PERJQUVSRVNJUz47PENBUElUQUw+OzxVMDA0OT4KKzxVMDBFRj4JPFUwMDQ5Pjs8RElBRVJFU0lTPjs8U01BTEw+OzxVMDA0OT4KKzxVMUUyRT4JPFUwMDQ5Pjs8RElBRVJFU0lTK0FDVVRFPjs8Q0FQSVRBTD47PFUwMDQ5PgorPFUxRTJGPgk8VTAwNDk+OzxESUFFUkVTSVMrQUNVVEU+OzxTTUFMTD47PFUwMDQ5PgorPFUxRUM4Pgk8VTAwNDk+OzxIT09LPjs8Q0FQSVRBTD47PFUwMDQ5PgorPFUxRUM5Pgk8VTAwNDk+OzxIT09LPjs8U01BTEw+OzxVMDA0OT4KKzxVMDEyOD4JPFUwMDQ5Pjs8VElMREU+OzxDQVBJVEFMPjs8VTAwNDk+Cis8VTAxMjk+CTxVMDA0OT47PFRJTERFPjs8U01BTEw+OzxVMDA0OT4KKzxVMUUyQz4JPFUwMDQ5Pjs8VElMREUtQkVMT1c+OzxDQVBJVEFMPjs8VTAwNDk+Cis8VTFFMkQ+CTxVMDA0OT47PFRJTERFLUJFTE9XPjs8U01BTEw+OzxVMDA0OT4KKzxVMDEzMD4JPFUwMDQ5Pjs8RE9UPjs8Q0FQSVRBTD47PFUwMDQ5PgorPFUwMTMxPgk8VTAwNDk+OzxET1Q+OzxTTUFMTD47PFUwMDQ5PgorPFUxRUNBPgk8VTAwNDk+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjs8VTAwNDk+Cis8VTFFQ0I+CTxVMDA0OT47PERPVC1CRUxPVz47PFNNQUxMPjs8VTAwNDk+Cis8VTAxMkU+CTxVMDA0OT47PE9HT05FSz47PENBUElUQUw+OzxVMDA0OT4KKzxVMDEyRj4JPFUwMDQ5Pjs8T0dPTkVLPjs8U01BTEw+OzxVMDA0OT4KKzxVMDEyQT4JPFUwMDQ5Pjs8TUFDUk9OPjs8Q0FQSVRBTD47PFUwMDQ5PgorPFUwMTJCPgk8VTAwNDk+OzxNQUNST04+OzxTTUFMTD47PFUwMDQ5PgorPGk4PgorCis8VTAxMzI+CSI8VTAwNDk+PFUwMDRBPiI7IjxVMDEzMj48VTAxMzI+IjsiPENBUElUQUw+PENBUElUQUw+IjsiPFUwMDQ5PjxVMDA0QT4iCis8VTAxMzM+CSI8VTAwNDk+PFUwMDRBPiI7IjxVMDEzMj48VTAxMzI+IjsiPFNNQUxMPjxTTUFMTD4iOyI8VTAwNDk+PFUwMDRBPiIKKworPFUwMDRBPgk8VTAwNEE+OzxOT05FPjs8Q0FQSVRBTD47PFUwMDRBPgorPFUwMDZBPgk8VTAwNEE+OzxOT05FPjs8U01BTEw+OzxVMDA0QT4KKzxVMDEzND4JPFUwMDRBPjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+OzxVMDA0QT4KKzxVMDEzNT4JPFUwMDRBPjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjs8VTAwNEE+Cis8ajg+CisKKzxVMDA0Qj4JPFUwMDRCPjs8Tk9ORT47PENBUElUQUw+OzxVMDA0Qj4KKzxVMDA2Qj4JPFUwMDRCPjs8Tk9ORT47PFNNQUxMPjs8VTAwNEI+Cis8VTFFMzA+CTxVMDA0Qj47PEFDVVRFPjs8Q0FQSVRBTD47PFUwMDRCPgorPFUxRTMxPgk8VTAwNEI+OzxBQ1VURT47PFNNQUxMPjs8VTAwNEI+Cis8VTAxRTg+CTxVMDA0Qj47PENBUk9OPjs8Q0FQSVRBTD47PFUwMDRCPgorPFUwMUU5Pgk8VTAwNEI+OzxDQVJPTj47PFNNQUxMPjs8VTAwNEI+Cis8VTAxOTg+CTxVMDA0Qj47PEhPT0s+OzxDQVBJVEFMPjs8VTAwNEI+Cis8VTAxOTk+CTxVMDA0Qj47PEhPT0s+OzxTTUFMTD47PFUwMDRCPgorPFUxRTMyPgk8VTAwNEI+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjs8VTAwNEI+Cis8VTFFMzM+CTxVMDA0Qj47PERPVC1CRUxPVz47PFNNQUxMPjs8VTAwNEI+Cis8VTAxMzY+CTxVMDA0Qj47PENFRElMTEE+OzxDQVBJVEFMPjs8VTAwNEI+Cis8VTAxMzc+CTxVMDA0Qj47PENFRElMTEE+OzxTTUFMTD47PFUwMDRCPgorPFUxRTM0Pgk8VTAwNEI+OzxMSU5FLUJFTE9XPjs8Q0FQSVRBTD47PFUwMDRCPgorPFUxRTM1Pgk8VTAwNEI+OzxMSU5FLUJFTE9XPjs8U01BTEw+OzxVMDA0Qj4KKzxrOD4KKzxVMDEzOD4JPFUwMDRCPjs8VTAxMzg+OzxTTUFMTD47PFUwMDRCPgorCis8VTAwNEM+CTxVMDA0Qz47PE5PTkU+OzxDQVBJVEFMPjs8VTAwNEM+Cis8VTAwNkM+CTxVMDA0Qz47PE5PTkU+OzxTTUFMTD47PFUwMDRDPgorPFUwMTM5Pgk8VTAwNEM+OzxBQ1VURT47PENBUElUQUw+OzxVMDA0Qz4KKzxVMDEzQT4JPFUwMDRDPjs8QUNVVEU+OzxTTUFMTD47PFUwMDRDPgorPFUwMTNEPgk8VTAwNEM+OzxDQVJPTj47PENBUElUQUw+OzxVMDA0Qz4KKzxVMDEzRT4JPFUwMDRDPjs8Q0FST04+OzxTTUFMTD47PFUwMDRDPgorPFUwMTNGPgk8VTAwNEM+OzxET1Q+OzxDQVBJVEFMPjs8VTAwNEM+Cis8VTAxNDA+CTxVMDA0Qz47PERPVD47PFNNQUxMPjs8VTAwNEM+Cis8VTFFMzY+CTxVMDA0Qz47PERPVC1CRUxPVz47PENBUElUQUw+OzxVMDA0Qz4KKzxVMUUzNz4JPFUwMDRDPjs8RE9ULUJFTE9XPjs8U01BTEw+OzxVMDA0Qz4KKzxVMDE0MT4JPFUwMDRDPjs8U1RST0tFPjs8Q0FQSVRBTD47PFUwMDRDPgorPFUwMTQyPgk8VTAwNEM+OzxTVFJPS0U+OzxTTUFMTD47PFUwMDRDPgorPFUwMTNCPgk8VTAwNEM+OzxDRURJTExBPjs8Q0FQSVRBTD47PFUwMDRDPgorPFUwMTNDPgk8VTAwNEM+OzxDRURJTExBPjs8U01BTEw+OzxVMDA0Qz4KKzxVMUUzOD4JPFUwMDRDPjs8TUFDUk9OK0RPVC1CRUxPVz47PENBUElUQUw+OzxVMDA0Qz4KKzxVMUUzOT4JPFUwMDRDPjs8TUFDUk9OK0RPVC1CRUxPVz47PFNNQUxMPjs8VTAwNEM+Cis8VTFFM0M+CTxVMDA0Qz47PE1BQ1JPTitDSVJDVU1GTEVYPjs8Q0FQSVRBTD47PFUwMDRDPgorPFUxRTNEPgk8VTAwNEM+OzxNQUNST04rQ0lSQ1VNRkxFWD47PFNNQUxMPjs8VTAwNEM+Cis8VTFFM0E+CTxVMDA0Qz47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjs8VTAwNEM+Cis8VTFFM0I+CTxVMDA0Qz47PExJTkUtQkVMT1c+OzxTTUFMTD47PFUwMDRDPgorPGw4PgorCis8VTAwNEQ+CTxVMDA0RD47PE5PTkU+OzxDQVBJVEFMPjs8VTAwNEQ+Cis8VTAwNkQ+CTxVMDA0RD47PE5PTkU+OzxTTUFMTD47PFUwMDREPgorPFUxRTNFPgk8VTAwNEQ+OzxBQ1VURT47PENBUElUQUw+OzxVMDA0RD4KKzxVMUUzRj4JPFUwMDREPjs8QUNVVEU+OzxTTUFMTD47PFUwMDREPgorPFUxRTQwPgk8VTAwNEQ+OzxET1Q+OzxDQVBJVEFMPjs8VTAwNEQ+Cis8VTFFNDE+CTxVMDA0RD47PERPVD47PFNNQUxMPjs8VTAwNEQ+Cis8VTFFNDI+CTxVMDA0RD47PERPVC1CRUxPVz47PENBUElUQUw+OzxVMDA0RD4KKzxVMUU0Mz4JPFUwMDREPjs8RE9ULUJFTE9XPjs8U01BTEw+OzxVMDA0RD4KKzxtOD4KKworPFUwMDRFPgk8VTAwNEU+OzxOT05FPjs8Q0FQSVRBTD47PFUwMDRFPgorPFUwMDZFPgk8VTAwNEU+OzxOT05FPjs8U01BTEw+OzxVMDA0RT4KKzxVMDE0Mz4JPFUwMDRFPjs8QUNVVEU+OzxDQVBJVEFMPjs8VTAwNEU+Cis8VTAxNDQ+CTxVMDA0RT47PEFDVVRFPjs8U01BTEw+OzxVMDA0RT4KKzxVMDE0Nz4JPFUwMDRFPjs8Q0FST04+OzxDQVBJVEFMPjs8VTAwNEU+Cis8VTAxNDg+CTxVMDA0RT47PENBUk9OPjs8U01BTEw+OzxVMDA0RT4KKzxVMDBEMT4JPFUwMDRFPjs8VElMREU+OzxDQVBJVEFMPjs8VTAwNEU+Cis8VTAwRjE+CTxVMDA0RT47PFRJTERFPjs8U01BTEw+OzxVMDA0RT4KKzxVMUU0ND4JPFUwMDRFPjs8RE9UPjs8Q0FQSVRBTD47PFUwMDRFPgorPFUxRTQ1Pgk8VTAwNEU+OzxET1Q+OzxTTUFMTD47PFUwMDRFPgorPFUxRTQ2Pgk8VTAwNEU+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjs8VTAwNEU+Cis8VTFFNDc+CTxVMDA0RT47PERPVC1CRUxPVz47PFNNQUxMPjs8VTAwNEU+Cis8VTAxNDU+CTxVMDA0RT47PENFRElMTEE+OzxDQVBJVEFMPjs8VTAwNEU+Cis8VTAxNDY+CTxVMDA0RT47PENFRElMTEE+OzxTTUFMTD47PFUwMDRFPgorPFUxRTRBPgk8VTAwNEU+OzxNQUNST04rQ0lSQ1VNRkxFWD47PENBUElUQUw+OzxVMDA0RT4KKzxVMUU0Qj4JPFUwMDRFPjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxTTUFMTD47PFUwMDRFPgorPFUxRTQ4Pgk8VTAwNEU+OzxMSU5FLUJFTE9XPjs8Q0FQSVRBTD47PFUwMDRFPgorPFUxRTQ5Pgk8VTAwNEU+OzxMSU5FLUJFTE9XPjs8U01BTEw+OzxVMDA0RT4KKzxVMDE0OT4JPFUwMDRFPjs8UFJFQ0VERUQtQlktQVBPU1RST1BIRT47PFNNQUxMPjs8VTAwNEU+Cis8bjg+CisKKzxVMDE0QT4JIjxVMDA0RT48VTAwNDc+IjsiPFUwMTRBPjxVMDE0QT4iOyI8Q0FQSVRBTD48Q0FQSVRBTD4iOyI8VTAwNEU+PFUwMDQ3PiIKKzxVMDE0Qj4JIjxVMDA0RT48VTAwNDc+IjsiPFUwMTRBPjxVMDE0QT4iOyI8U01BTEw+PFNNQUxMPiI7IjxVMDA0RT48VTAwNDc+IgorCis8VTAwNEY+CTxVMDA0Rj47PE5PTkU+OzxDQVBJVEFMPjs8VTAwNEY+Cis8VTAwNkY+CTxVMDA0Rj47PE5PTkU+OzxTTUFMTD47PFUwMDRGPgorPFUwMEJBPgk8VTAwNEY+OzxOT05FPjs8VTAwQkE+OzxVMDA0Rj4KKzxVMDBEMz4JPFUwMDRGPjs8QUNVVEU+OzxDQVBJVEFMPjs8VTAwNEY+Cis8VTAwRjM+CTxVMDA0Rj47PEFDVVRFPjs8U01BTEw+OzxVMDA0Rj4KKzxVMDBEMj4JPFUwMDRGPjs8R1JBVkU+OzxDQVBJVEFMPjs8VTAwNEY+Cis8VTAwRjI+CTxVMDA0Rj47PEdSQVZFPjs8U01BTEw+OzxVMDA0Rj4KKzxVMDIwQz4JPFUwMDRGPjs8RE9VQkxFLUdSQVZFPjs8Q0FQSVRBTD47PFUwMDRGPgorPFUwMjBEPgk8VTAwNEY+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47PFUwMDRGPgorPFUwMTRFPgk8VTAwNEY+OzxCUkVWRT47PENBUElUQUw+OzxVMDA0Rj4KKzxVMDE0Rj4JPFUwMDRGPjs8QlJFVkU+OzxTTUFMTD47PFUwMDRGPgorPFUwMjBFPgk8VTAwNEY+OzxJTlZFUlRFRC1CUkVWRT47PENBUElUQUw+OzxVMDA0Rj4KKzxVMDIwRj4JPFUwMDRGPjs8SU5WRVJURUQtQlJFVkU+OzxTTUFMTD47PFUwMDRGPgorPFUwMEQ0Pgk8VTAwNEY+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47PFUwMDRGPgorPFUwMEY0Pgk8VTAwNEY+OzxDSVJDVU1GTEVYPjs8U01BTEw+OzxVMDA0Rj4KKzxVMUVEMD4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtBQ1VURT47PENBUElUQUw+OzxVMDA0Rj4KKzxVMUVEMT4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtBQ1VURT47PFNNQUxMPjs8VTAwNEY+Cis8VTFFRDI+CTxVMDA0Rj47PENJUkNVTUZMRVgrR1JBVkU+OzxDQVBJVEFMPjs8VTAwNEY+Cis8VTFFRDM+CTxVMDA0Rj47PENJUkNVTUZMRVgrR1JBVkU+OzxTTUFMTD47PFUwMDRGPgorPFUxRUQ0Pgk8VTAwNEY+OzxDSVJDVU1GTEVYK0hPT0s+OzxDQVBJVEFMPjs8VTAwNEY+Cis8VTFFRDU+CTxVMDA0Rj47PENJUkNVTUZMRVgrSE9PSz47PFNNQUxMPjs8VTAwNEY+Cis8VTFFRDY+CTxVMDA0Rj47PENJUkNVTUZMRVgrVElMREU+OzxDQVBJVEFMPjs8VTAwNEY+Cis8VTFFRDc+CTxVMDA0Rj47PENJUkNVTUZMRVgrVElMREU+OzxTTUFMTD47PFUwMDRGPgorPFUxRUQ4Pgk8VTAwNEY+OzxDSVJDVU1GTEVYK0RPVC1CRUxPVz47PENBUElUQUw+OzxVMDA0Rj4KKzxVMUVEOT4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtET1QtQkVMT1c+OzxTTUFMTD47PFUwMDRGPgorPFUwMUQxPgk8VTAwNEY+OzxDQVJPTj47PENBUElUQUw+OzxVMDA0Rj4KKzxVMDFEMj4JPFUwMDRGPjs8Q0FST04+OzxTTUFMTD47PFUwMDRGPgorPFUwMEQ2Pgk8VTAwNEY+OzxESUFFUkVTSVM+OzxDQVBJVEFMPjs8VTAwNEY+Cis8VTAwRjY+CTxVMDA0Rj47PERJQUVSRVNJUz47PFNNQUxMPjs8VTAwNEY+Cis8VTAxNTA+CTxVMDA0Rj47PERPVUJMRS1BQ1VURT47PENBUElUQUw+OzxVMDA0Rj4KKzxVMDE1MT4JPFUwMDRGPjs8RE9VQkxFLUFDVVRFPjs8U01BTEw+OzxVMDA0Rj4KKzxVMUVDRT4JPFUwMDRGPjs8SE9PSz47PENBUElUQUw+OzxVMDA0Rj4KKzxVMUVDRj4JPFUwMDRGPjs8SE9PSz47PFNNQUxMPjs8VTAwNEY+Cis8VTAwRDU+CTxVMDA0Rj47PFRJTERFPjs8Q0FQSVRBTD47PFUwMDRGPgorPFUwMEY1Pgk8VTAwNEY+OzxUSUxERT47PFNNQUxMPjs8VTAwNEY+Cis8VTFFNEM+CTxVMDA0Rj47PFRJTERFK0FDVVRFPjs8Q0FQSVRBTD47PFUwMDRGPgorPFUxRTREPgk8VTAwNEY+OzxUSUxERStBQ1VURT47PFNNQUxMPjs8VTAwNEY+Cis8VTFFNEU+CTxVMDA0Rj47PFRJTERFK0RJQUVSRVNJUz47PENBUElUQUw+OzxVMDA0Rj4KKzxVMUU0Rj4JPFUwMDRGPjs8VElMREUrRElBRVJFU0lTPjs8U01BTEw+OzxVMDA0Rj4KKzxVMUVDQz4JPFUwMDRGPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47PFUwMDRGPgorPFUxRUNEPgk8VTAwNEY+OzxET1QtQkVMT1c+OzxTTUFMTD47PFUwMDRGPgorPFUwMEQ4Pgk8VTAwNEY+OzxTVFJPS0U+OzxDQVBJVEFMPjs8VTAwNEY+Cis8VTAwRjg+CTxVMDA0Rj47PFNUUk9LRT47PFNNQUxMPjs8VTAwNEY+Cis8VTAxRkU+CTxVMDA0Rj47PFNUUk9LRStBQ1VURT47PENBUElUQUw+OzxVMDA0Rj4KKzxVMDFGRj4JPFUwMDRGPjs8U1RST0tFK0FDVVRFPjs8U01BTEw+OzxVMDA0Rj4KKzxVMDFFQT4JPFUwMDRGPjs8T0dPTkVLPjs8Q0FQSVRBTD47PFUwMDRGPgorPFUwMUVCPgk8VTAwNEY+OzxPR09ORUs+OzxTTUFMTD47PFUwMDRGPgorPFUwMUVDPgk8VTAwNEY+OzxPR09ORUsrTUFDUk9OPjs8Q0FQSVRBTD47PFUwMDRGPgorPFUwMUVEPgk8VTAwNEY+OzxPR09ORUsrTUFDUk9OPjs8U01BTEw+OzxVMDA0Rj4KKzxVMDE0Qz4JPFUwMDRGPjs8TUFDUk9OPjs8Q0FQSVRBTD47PFUwMDRGPgorPFUwMTREPgk8VTAwNEY+OzxNQUNST04+OzxTTUFMTD47PFUwMDRGPgorPFUxRTUyPgk8VTAwNEY+OzxNQUNST04rQUNVVEU+OzxDQVBJVEFMPjs8VTAwNEY+Cis8VTFFNTM+CTxVMDA0Rj47PE1BQ1JPTitBQ1VURT47PFNNQUxMPjs8VTAwNEY+Cis8VTFFNTA+CTxVMDA0Rj47PE1BQ1JPTitHUkFWRT47PENBUElUQUw+OzxVMDA0Rj4KKzxVMUU1MT4JPFUwMDRGPjs8TUFDUk9OK0dSQVZFPjs8U01BTEw+OzxVMDA0Rj4KKzxVMDFBMD4JPFUwMDRGPjs8SE9STj47PENBUElUQUw+OzxVMDA0Rj4KKzxVMDFBMT4JPFUwMDRGPjs8SE9STj47PFNNQUxMPjs8VTAwNEY+Cis8VTFFREE+CTxVMDA0Rj47PEhPUk4rQUNVVEU+OzxDQVBJVEFMPjs8VTAwNEY+Cis8VTFFREI+CTxVMDA0Rj47PEhPUk4rQUNVVEU+OzxTTUFMTD47PFUwMDRGPgorPFUxRURDPgk8VTAwNEY+OzxIT1JOK0dSQVZFPjs8Q0FQSVRBTD47PFUwMDRGPgorPFUxRUREPgk8VTAwNEY+OzxIT1JOK0dSQVZFPjs8U01BTEw+OzxVMDA0Rj4KKzxVMUVERT4JPFUwMDRGPjs8SE9STitIT09LPjs8Q0FQSVRBTD47PFUwMDRGPgorPFUxRURGPgk8VTAwNEY+OzxIT1JOK0hPT0s+OzxTTUFMTD47PFUwMDRGPgorPFUxRUUwPgk8VTAwNEY+OzxIT1JOK1RJTERFPjs8Q0FQSVRBTD47PFUwMDRGPgorPFUxRUUxPgk8VTAwNEY+OzxIT1JOK1RJTERFPjs8U01BTEw+OzxVMDA0Rj4KKzxVMUVFMj4JPFUwMDRGPjs8SE9STitET1QtQkVMT1c+OzxDQVBJVEFMPjs8VTAwNEY+Cis8VTFFRTM+CTxVMDA0Rj47PEhPUk4rRE9ULUJFTE9XPjs8U01BTEw+OzxVMDA0Rj4KKzxvOD4KKworPFUwMTUyPgkiPFUwMDRGPjxVMDA0NT4iOyI8VTAxNTI+PFUwMTUyPiI7IjxDQVBJVEFMPjxDQVBJVEFMPiI7IjxVMDA0Rj48VTAwNDU+IgorPFUwMTUzPgkiPFUwMDRGPjxVMDA0NT4iOyI8VTAxNTI+PFUwMTUyPiI7IjxTTUFMTD48U01BTEw+IjsiPFUwMDRGPjxVMDA0NT4iCisKKzxVMDA1MD4JPFUwMDUwPjs8Tk9ORT47PENBUElUQUw+OzxVMDA1MD4KKzxVMDA3MD4JPFUwMDUwPjs8Tk9ORT47PFNNQUxMPjs8VTAwNTA+Cis8VTFFNTQ+CTxVMDA1MD47PEFDVVRFPjs8Q0FQSVRBTD47PFUwMDUwPgorPFUxRTU1Pgk8VTAwNTA+OzxBQ1VURT47PFNNQUxMPjs8VTAwNTA+Cis8VTFFNTY+CTxVMDA1MD47PERPVD47PENBUElUQUw+OzxVMDA1MD4KKzxVMUU1Nz4JPFUwMDUwPjs8RE9UPjs8U01BTEw+OzxVMDA1MD4KKzxwOD4KKworPFUwMDUxPgk8VTAwNTE+OzxOT05FPjs8Q0FQSVRBTD47PFUwMDUxPgorPFUwMDcxPgk8VTAwNTE+OzxOT05FPjs8U01BTEw+OzxVMDA1MT4KKzxxOD4KKworPFUwMDUyPgk8VTAwNTI+OzxOT05FPjs8Q0FQSVRBTD47PFUwMDUyPgorPFUwMDcyPgk8VTAwNTI+OzxOT05FPjs8U01BTEw+OzxVMDA1Mj4KKzxVMDE1ND4JPFUwMDUyPjs8QUNVVEU+OzxDQVBJVEFMPjs8VTAwNTI+Cis8VTAxNTU+CTxVMDA1Mj47PEFDVVRFPjs8U01BTEw+OzxVMDA1Mj4KKzxVMDIxMD4JPFUwMDUyPjs8RE9VQkxFLUdSQVZFPjs8Q0FQSVRBTD47PFUwMDUyPgorPFUwMjExPgk8VTAwNTI+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47PFUwMDUyPgorPFUwMjEyPgk8VTAwNTI+OzxJTlZFUlRFRC1CUkVWRT47PENBUElUQUw+OzxVMDA1Mj4KKzxVMDIxMz4JPFUwMDUyPjs8SU5WRVJURUQtQlJFVkU+OzxTTUFMTD47PFUwMDUyPgorPFUxRTU4Pgk8VTAwNTI+OzxET1Q+OzxDQVBJVEFMPjs8VTAwNTI+Cis8VTFFNTk+CTxVMDA1Mj47PERPVD47PFNNQUxMPjs8VTAwNTI+Cis8VTFFNUE+CTxVMDA1Mj47PERPVC1CRUxPVz47PENBUElUQUw+OzxVMDA1Mj4KKzxVMUU1Qj4JPFUwMDUyPjs8RE9ULUJFTE9XPjs8U01BTEw+OzxVMDA1Mj4KKzxVMDE1Nj4JPFUwMDUyPjs8Q0VESUxMQT47PENBUElUQUw+OzxVMDA1Mj4KKzxVMDE1Nz4JPFUwMDUyPjs8Q0VESUxMQT47PFNNQUxMPjs8VTAwNTI+Cis8VTFFNUM+CTxVMDA1Mj47PE1BQ1JPTitET1QtQkVMT1c+OzxDQVBJVEFMPjs8VTAwNTI+Cis8VTFFNUQ+CTxVMDA1Mj47PE1BQ1JPTitET1QtQkVMT1c+OzxTTUFMTD47PFUwMDUyPgorPFUxRTVFPgk8VTAwNTI+OzxMSU5FLUJFTE9XPjs8Q0FQSVRBTD47PFUwMDUyPgorPFUxRTVGPgk8VTAwNTI+OzxMSU5FLUJFTE9XPjs8U01BTEw+OzxVMDA1Mj4KKworPFUwMTU4Pgk8VTAxNTg+OzxDQVJPTj47PENBUElUQUw+OzxVMDE1OD4KKzxVMDE1OT4JPFUwMTU4Pjs8Q0FST04+OzxTTUFMTD47PFUwMTU4PgorPHI4PgorCis8VTAwNTM+CTxVMDA1Mz47PE5PTkU+OzxDQVBJVEFMPjs8VTAwNTM+Cis8VTAwNzM+CTxVMDA1Mz47PE5PTkU+OzxTTUFMTD47PFUwMDUzPgorPFVGQjA2PgkiPFUwMDUzPjxVMDA1ND4iOyI8Tk9ORT48Tk9ORT4iOyI8VUZCMDY+PFVGQjA2PiI7IjxVMDA1Mz48VTAwNTQ+IgorPFUwMTVBPgk8VTAwNTM+OzxBQ1VURT47PENBUElUQUw+OzxVMDA1Mz4KKzxVMDE1Qj4JPFUwMDUzPjs8QUNVVEU+OzxTTUFMTD47PFUwMDUzPgorPFUxRTY0Pgk8VTAwNTM+OzxBQ1VURStET1Q+OzxDQVBJVEFMPjs8VTAwNTM+Cis8VTFFNjU+CTxVMDA1Mz47PEFDVVRFK0RPVD47PFNNQUxMPjs8VTAwNTM+Cis8VTAxNUM+CTxVMDA1Mz47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjs8VTAwNTM+Cis8VTAxNUQ+CTxVMDA1Mz47PENJUkNVTUZMRVg+OzxTTUFMTD47PFUwMDUzPgorPFUxRTYwPgk8VTAwNTM+OzxET1Q+OzxDQVBJVEFMPjs8VTAwNTM+Cis8VTFFNjE+CTxVMDA1Mz47PERPVD47PFNNQUxMPjs8VTAwNTM+Cis8VTFFNjI+CTxVMDA1Mz47PERPVC1CRUxPVz47PENBUElUQUw+OzxVMDA1Mz4KKzxVMUU2Mz4JPFUwMDUzPjs8RE9ULUJFTE9XPjs8U01BTEw+OzxVMDA1Mz4KKzxVMUU2OD4JPFUwMDUzPjs8RE9UK0RPVC1CRUxPVz47PENBUElUQUw+OzxVMDA1Mz4KKzxVMUU2OT4JPFUwMDUzPjs8RE9UK0RPVC1CRUxPVz47PFNNQUxMPjs8VTAwNTM+Cis8VTAxNUU+CTxVMDA1Mz47PENFRElMTEE+OzxDQVBJVEFMPjs8VTAwNTM+Cis8VTAxNUY+CTxVMDA1Mz47PENFRElMTEE+OzxTTUFMTD47PFUwMDUzPgorCis8VTAxNjA+CTxVMDE2MD47PENBUk9OPjs8Q0FQSVRBTD47PFUwMTYwPgorPFUwMTYxPgk8VTAxNjA+OzxDQVJPTj47PFNNQUxMPjs8VTAxNjA+Cis8VTFFNjY+CTxVMDE2MD47PENBUk9OK0RPVD47PENBUElUQUw+OzxVMDE2MD4KKzxVMUU2Nz4JPFUwMTYwPjs8Q0FST04rRE9UPjs8U01BTEw+OzxVMDE2MD4KKzxzOD4KKworPFUwMTdGPgk8VTAwNTM+OzxVMDE3Rj47PFNNQUxMPjs8VTAwNTM+Cis8VTAwREY+CSI8VTAwNTM+PFUwMDUzPiI7IjxOT05FPjxOT05FPiI7IjxTTUFMTD48VTAwREY+IjsiPFUwMDUzPjxVMDA1Mz4iCis8VUZCMDU+CSI8VTAwNTM+PFUwMDU0PiI7IjxOT05FPjxOT05FPiI7IjxVRkIwNT48VUZCMDU+IjtJR05PUkUKKworPFUwMDU0Pgk8VTAwNTQ+OzxOT05FPjs8Q0FQSVRBTD47PFUwMDU0PgorPFUwMDc0Pgk8VTAwNTQ+OzxOT05FPjs8U01BTEw+OzxVMDA1ND4KKzxVMDE2ND4JPFUwMDU0Pjs8Q0FST04+OzxDQVBJVEFMPjs8VTAwNTQ+Cis8VTAxNjU+CTxVMDA1ND47PENBUk9OPjs8U01BTEw+OzxVMDA1ND4KKzxVMUU2QT4JPFUwMDU0Pjs8RE9UPjs8Q0FQSVRBTD47PFUwMDU0PgorPFUxRTZCPgk8VTAwNTQ+OzxET1Q+OzxTTUFMTD47PFUwMDU0PgorPFUxRTZDPgk8VTAwNTQ+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjs8VTAwNTQ+Cis8VTFFNkQ+CTxVMDA1ND47PERPVC1CRUxPVz47PFNNQUxMPjs8VTAwNTQ+Cis8VTAxNjY+CTxVMDA1ND47PFNUUk9LRT47PENBUElUQUw+OzxVMDA1ND4KKzxVMDE2Nz4JPFUwMDU0Pjs8U1RST0tFPjs8U01BTEw+OzxVMDA1ND4KKzxVMDE2Mj4JPFUwMDU0Pjs8Q0VESUxMQT47PENBUElUQUw+OzxVMDA1ND4KKzxVMDE2Mz4JPFUwMDU0Pjs8Q0VESUxMQT47PFNNQUxMPjs8VTAwNTQ+Cis8VTFFNzA+CTxVMDA1ND47PE1BQ1JPTitDSVJDVU1GTEVYPjs8Q0FQSVRBTD47PFUwMDU0PgorPFUxRTcxPgk8VTAwNTQ+OzxNQUNST04rQ0lSQ1VNRkxFWD47PFNNQUxMPjs8VTAwNTQ+Cis8VTFFNkU+CTxVMDA1ND47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjs8VTAwNTQ+Cis8VTFFNkY+CTxVMDA1ND47PExJTkUtQkVMT1c+OzxTTUFMTD47PFUwMDU0PgorPHQ4PgorCis8VTAwREU+CSI8VTAwNTQ+PFUwMDQ4PiI7IjxVMDBERT48VTAwREU+IjsiPENBUElUQUw+PENBUElUQUw+IjsiPFUwMDU0PjxVMDA0OD4iCis8VTAwRkU+CSI8VTAwNTQ+PFUwMDQ4PiI7IjxVMDBERT48VTAwREU+IjsiPFNNQUxMPjxTTUFMTD4iOyI8VTAwNTQ+PFUwMDQ4PiIKKworPFUwMDU1Pgk8VTAwNTU+OzxOT05FPjs8Q0FQSVRBTD47PFUwMDU1PgorPFUwMDc1Pgk8VTAwNTU+OzxOT05FPjs8U01BTEw+OzxVMDA1NT4KKzxVMDBEQT4JPFUwMDU1Pjs8QUNVVEU+OzxDQVBJVEFMPjs8VTAwNTU+Cis8VTAwRkE+CTxVMDA1NT47PEFDVVRFPjs8U01BTEw+OzxVMDA1NT4KKzxVMDBEOT4JPFUwMDU1Pjs8R1JBVkU+OzxDQVBJVEFMPjs8VTAwNTU+Cis8VTAwRjk+CTxVMDA1NT47PEdSQVZFPjs8U01BTEw+OzxVMDA1NT4KKzxVMDIxND4JPFUwMDU1Pjs8RE9VQkxFLUdSQVZFPjs8Q0FQSVRBTD47PFUwMDU1PgorPFUwMjE1Pgk8VTAwNTU+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47PFUwMDU1PgorPFUwMTZDPgk8VTAwNTU+OzxCUkVWRT47PENBUElUQUw+OzxVMDA1NT4KKzxVMDE2RD4JPFUwMDU1Pjs8QlJFVkU+OzxTTUFMTD47PFUwMDU1PgorPFUwMjE2Pgk8VTAwNTU+OzxJTlZFUlRFRC1CUkVWRT47PENBUElUQUw+OzxVMDA1NT4KKzxVMDIxNz4JPFUwMDU1Pjs8SU5WRVJURUQtQlJFVkU+OzxTTUFMTD47PFUwMDU1PgorPFUwMERCPgk8VTAwNTU+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47PFUwMDU1PgorPFUwMEZCPgk8VTAwNTU+OzxDSVJDVU1GTEVYPjs8U01BTEw+OzxVMDA1NT4KKzxVMDFEMz4JPFUwMDU1Pjs8Q0FST04+OzxDQVBJVEFMPjs8VTAwNTU+Cis8VTAxRDQ+CTxVMDA1NT47PENBUk9OPjs8U01BTEw+OzxVMDA1NT4KKzxVMDE2RT4JPFUwMDU1Pjs8UklORz47PENBUElUQUw+OzxVMDA1NT4KKzxVMDE2Rj4JPFUwMDU1Pjs8UklORz47PFNNQUxMPjs8VTAwNTU+Cis8VTAwREM+CTxVMDA1NT47PERJQUVSRVNJUz47PENBUElUQUw+OzxVMDA1NT4KKzxVMDBGQz4JPFUwMDU1Pjs8RElBRVJFU0lTPjs8U01BTEw+OzxVMDA1NT4KKzxVMDFENT4JPFUwMDU1Pjs8RElBRVJFU0lTK01BQ1JPTj47PENBUElUQUw+OzxVMDA1NT4KKzxVMDFENj4JPFUwMDU1Pjs8RElBRVJFU0lTK01BQ1JPTj47PFNNQUxMPjs8VTAwNTU+Cis8VTAxRDc+CTxVMDA1NT47PERJQUVSRVNJUytBQ1VURT47PENBUElUQUw+OzxVMDA1NT4KKzxVMDFEOD4JPFUwMDU1Pjs8RElBRVJFU0lTK0FDVVRFPjs8U01BTEw+OzxVMDA1NT4KKzxVMDFEQj4JPFUwMDU1Pjs8RElBRVJFU0lTK0dSQVZFPjs8Q0FQSVRBTD47PFUwMDU1PgorPFUwMURDPgk8VTAwNTU+OzxESUFFUkVTSVMrR1JBVkU+OzxTTUFMTD47PFUwMDU1PgorPFUwMUQ5Pgk8VTAwNTU+OzxESUFFUkVTSVMrQ0FST04+OzxDQVBJVEFMPjs8VTAwNTU+Cis8VTAxREE+CTxVMDA1NT47PERJQUVSRVNJUytDQVJPTj47PFNNQUxMPjs8VTAwNTU+Cis8VTAxNzA+CTxVMDA1NT47PERPVUJMRS1BQ1VURT47PENBUElUQUw+OzxVMDA1NT4KKzxVMDE3MT4JPFUwMDU1Pjs8RE9VQkxFLUFDVVRFPjs8U01BTEw+OzxVMDA1NT4KKzxVMUVFNj4JPFUwMDU1Pjs8SE9PSz47PENBUElUQUw+OzxVMDA1NT4KKzxVMUVFNz4JPFUwMDU1Pjs8SE9PSz47PFNNQUxMPjs8VTAwNTU+Cis8VTAxNjg+CTxVMDA1NT47PFRJTERFPjs8Q0FQSVRBTD47PFUwMDU1PgorPFUwMTY5Pgk8VTAwNTU+OzxUSUxERT47PFNNQUxMPjs8VTAwNTU+Cis8VTFFNzg+CTxVMDA1NT47PFRJTERFK0FDVVRFPjs8Q0FQSVRBTD47PFUwMDU1PgorPFUxRTc5Pgk8VTAwNTU+OzxUSUxERStBQ1VURT47PFNNQUxMPjs8VTAwNTU+Cis8VTFFNzQ+CTxVMDA1NT47PFRJTERFLUJFTE9XPjs8Q0FQSVRBTD47PFUwMDU1PgorPFUxRTc1Pgk8VTAwNTU+OzxUSUxERS1CRUxPVz47PFNNQUxMPjs8VTAwNTU+Cis8VTFFRTQ+CTxVMDA1NT47PERPVC1CRUxPVz47PENBUElUQUw+OzxVMDA1NT4KKzxVMUVFNT4JPFUwMDU1Pjs8RE9ULUJFTE9XPjs8U01BTEw+OzxVMDA1NT4KKzxVMDE3Mj4JPFUwMDU1Pjs8T0dPTkVLPjs8Q0FQSVRBTD47PFUwMDU1PgorPFUwMTczPgk8VTAwNTU+OzxPR09ORUs+OzxTTUFMTD47PFUwMDU1PgorPFUwMTZBPgk8VTAwNTU+OzxNQUNST04+OzxDQVBJVEFMPjs8VTAwNTU+Cis8VTAxNkI+CTxVMDA1NT47PE1BQ1JPTj47PFNNQUxMPjs8VTAwNTU+Cis8VTFFN0E+CTxVMDA1NT47PE1BQ1JPTitESUFFUkVTSVM+OzxDQVBJVEFMPjs8VTAwNTU+Cis8VTFFN0I+CTxVMDA1NT47PE1BQ1JPTitESUFFUkVTSVM+OzxTTUFMTD47PFUwMDU1PgorPFUxRTcyPgk8VTAwNTU+OzxNQUNST04rRElBRVJFU0lTLUJFTE9XPjs8Q0FQSVRBTD47PFUwMDU1PgorPFUxRTczPgk8VTAwNTU+OzxNQUNST04rRElBRVJFU0lTLUJFTE9XPjs8U01BTEw+OzxVMDA1NT4KKzxVMUU3Nj4JPFUwMDU1Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxDQVBJVEFMPjs8VTAwNTU+Cis8VTFFNzc+CTxVMDA1NT47PE1BQ1JPTitDSVJDVU1GTEVYPjs8U01BTEw+OzxVMDA1NT4KKzxVMDFBRj4JPFUwMDU1Pjs8SE9STj47PENBUElUQUw+OzxVMDA1NT4KKzxVMDFCMD4JPFUwMDU1Pjs8SE9STj47PFNNQUxMPjs8VTAwNTU+Cis8VTFFRTg+CTxVMDA1NT47PEhPUk4rQUNVVEU+OzxDQVBJVEFMPjs8VTAwNTU+Cis8VTFFRTk+CTxVMDA1NT47PEhPUk4rQUNVVEU+OzxTTUFMTD47PFUwMDU1PgorPFUxRUVBPgk8VTAwNTU+OzxIT1JOK0dSQVZFPjs8Q0FQSVRBTD47PFUwMDU1PgorPFUxRUVCPgk8VTAwNTU+OzxIT1JOK0dSQVZFPjs8U01BTEw+OzxVMDA1NT4KKzxVMUVFQz4JPFUwMDU1Pjs8SE9STitIT09LPjs8Q0FQSVRBTD47PFUwMDU1PgorPFUxRUVEPgk8VTAwNTU+OzxIT1JOK0hPT0s+OzxTTUFMTD47PFUwMDU1PgorPFUxRUVFPgk8VTAwNTU+OzxIT1JOK1RJTERFPjs8Q0FQSVRBTD47PFUwMDU1PgorPFUxRUVGPgk8VTAwNTU+OzxIT1JOK1RJTERFPjs8U01BTEw+OzxVMDA1NT4KKzxVMUVGMD4JPFUwMDU1Pjs8SE9STitET1QtQkVMT1c+OzxDQVBJVEFMPjs8VTAwNTU+Cis8VTFFRjE+CTxVMDA1NT47PEhPUk4rRE9ULUJFTE9XPjs8U01BTEw+OzxVMDA1NT4KKzx1OD4KKworPFUwMDU2Pgk8VTAwNTY+OzxOT05FPjs8Q0FQSVRBTD47PFUwMDU2PgorPFUwMDc2Pgk8VTAwNTY+OzxOT05FPjs8U01BTEw+OzxVMDA1Nj4KKzxVMUU3Qz4JPFUwMDU2Pjs8VElMREU+OzxDQVBJVEFMPjs8VTAwNTY+Cis8VTFFN0Q+CTxVMDA1Nj47PFRJTERFPjs8U01BTEw+OzxVMDA1Nj4KKzxVMUU3RT4JPFUwMDU2Pjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47PFUwMDU2PgorPFUxRTdGPgk8VTAwNTY+OzxET1QtQkVMT1c+OzxTTUFMTD47PFUwMDU2PgorPHY4PgorCis8VTAwNTc+CTxVMDA1Nz47PE5PTkU+OzxDQVBJVEFMPjs8VTAwNTc+Cis8VTAwNzc+CTxVMDA1Nz47PE5PTkU+OzxTTUFMTD47PFUwMDU3PgorPFUxRTgyPgk8VTAwNTc+OzxBQ1VURT47PENBUElUQUw+OzxVMDA1Nz4KKzxVMUU4Mz4JPFUwMDU3Pjs8QUNVVEU+OzxTTUFMTD47PFUwMDU3PgorPFUxRTgwPgk8VTAwNTc+OzxHUkFWRT47PENBUElUQUw+OzxVMDA1Nz4KKzxVMUU4MT4JPFUwMDU3Pjs8R1JBVkU+OzxTTUFMTD47PFUwMDU3PgorPFUwMTc0Pgk8VTAwNTc+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47PFUwMDU3PgorPFUwMTc1Pgk8VTAwNTc+OzxDSVJDVU1GTEVYPjs8U01BTEw+OzxVMDA1Nz4KKzxVMUU4ND4JPFUwMDU3Pjs8RElBRVJFU0lTPjs8Q0FQSVRBTD47PFUwMDU3PgorPFUxRTg1Pgk8VTAwNTc+OzxESUFFUkVTSVM+OzxTTUFMTD47PFUwMDU3PgorPFUxRTg2Pgk8VTAwNTc+OzxET1Q+OzxDQVBJVEFMPjs8VTAwNTc+Cis8VTFFODc+CTxVMDA1Nz47PERPVD47PFNNQUxMPjs8VTAwNTc+Cis8VTFFODg+CTxVMDA1Nz47PERPVC1CRUxPVz47PENBUElUQUw+OzxVMDA1Nz4KKzxVMUU4OT4JPFUwMDU3Pjs8RE9ULUJFTE9XPjs8U01BTEw+OzxVMDA1Nz4KKzx3OD4KKworPFUwMDU4Pgk8VTAwNTg+OzxOT05FPjs8Q0FQSVRBTD47PFUwMDU4PgorPFUwMDc4Pgk8VTAwNTg+OzxOT05FPjs8U01BTEw+OzxVMDA1OD4KKzxVMUU4Qz4JPFUwMDU4Pjs8RElBRVJFU0lTPjs8Q0FQSVRBTD47PFUwMDU4PgorPFUxRThEPgk8VTAwNTg+OzxESUFFUkVTSVM+OzxTTUFMTD47PFUwMDU4PgorPFUxRThBPgk8VTAwNTg+OzxET1Q+OzxDQVBJVEFMPjs8VTAwNTg+Cis8VTFFOEI+CTxVMDA1OD47PERPVD47PFNNQUxMPjs8VTAwNTg+Cis8eDg+CisKKzxVMDA1OT4JPFUwMDU5Pjs8Tk9ORT47PENBUElUQUw+OzxVMDA1OT4KKzxVMDA3OT4JPFUwMDU5Pjs8Tk9ORT47PFNNQUxMPjs8VTAwNTk+Cis8VTAwREQ+CTxVMDA1OT47PEFDVVRFPjs8Q0FQSVRBTD47PFUwMDU5PgorPFUwMEZEPgk8VTAwNTk+OzxBQ1VURT47PFNNQUxMPjs8VTAwNTk+Cis8VTFFRjI+CTxVMDA1OT47PEdSQVZFPjs8Q0FQSVRBTD47PFUwMDU5PgorPFUxRUYzPgk8VTAwNTk+OzxHUkFWRT47PFNNQUxMPjs8VTAwNTk+Cis8VTAxNzY+CTxVMDA1OT47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjs8VTAwNTk+Cis8VTAxNzc+CTxVMDA1OT47PENJUkNVTUZMRVg+OzxTTUFMTD47PFUwMDU5PgorPFUwMTc4Pgk8VTAwNTk+OzxESUFFUkVTSVM+OzxDQVBJVEFMPjs8VTAwNTk+Cis8VTAwRkY+CTxVMDA1OT47PERJQUVSRVNJUz47PFNNQUxMPjs8VTAwNTk+Cis8VTFFRjY+CTxVMDA1OT47PEhPT0s+OzxDQVBJVEFMPjs8VTAwNTk+Cis8VTFFRjc+CTxVMDA1OT47PEhPT0s+OzxTTUFMTD47PFUwMDU5PgorPFUxRUY4Pgk8VTAwNTk+OzxUSUxERT47PENBUElUQUw+OzxVMDA1OT4KKzxVMUVGOT4JPFUwMDU5Pjs8VElMREU+OzxTTUFMTD47PFUwMDU5PgorPFUxRThFPgk8VTAwNTk+OzxET1Q+OzxDQVBJVEFMPjs8VTAwNTk+Cis8VTFFOEY+CTxVMDA1OT47PERPVD47PFNNQUxMPjs8VTAwNTk+Cis8VTFFRjQ+CTxVMDA1OT47PERPVC1CRUxPVz47PENBUElUQUw+OzxVMDA1OT4KKzxVMUVGNT4JPFUwMDU5Pjs8RE9ULUJFTE9XPjs8U01BTEw+OzxVMDA1OT4KKzx5OD4KKworPFUwMDVBPgk8VTAwNUE+OzxOT05FPjs8Q0FQSVRBTD47PFUwMDVBPgorPFUwMDdBPgk8VTAwNUE+OzxOT05FPjs8U01BTEw+OzxVMDA1QT4KKzxVMDE3OT4JPFUwMDVBPjs8QUNVVEU+OzxDQVBJVEFMPjs8VTAwNUE+Cis8VTAxN0E+CTxVMDA1QT47PEFDVVRFPjs8U01BTEw+OzxVMDA1QT4KKzxVMUU5MD4JPFUwMDVBPjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+OzxVMDA1QT4KKzxVMUU5MT4JPFUwMDVBPjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjs8VTAwNUE+Cis8VTAxN0I+CTxVMDA1QT47PERPVD47PENBUElUQUw+OzxVMDA1QT4KKzxVMDE3Qz4JPFUwMDVBPjs8RE9UPjs8U01BTEw+OzxVMDA1QT4KKzxVMUU5Mj4JPFUwMDVBPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47PFUwMDVBPgorPFUxRTkzPgk8VTAwNUE+OzxET1QtQkVMT1c+OzxTTUFMTD47PFUwMDVBPgorPFUwMUI1Pgk8VTAwNUE+OzxTVFJPS0U+OzxDQVBJVEFMPjs8VTAwNUE+Cis8VTAxQjY+CTxVMDA1QT47PFNUUk9LRT47PFNNQUxMPjs8VTAwNUE+Cis8VTFFOTQ+CTxVMDA1QT47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjs8VTAwNUE+Cis8VTFFOTU+CTxVMDA1QT47PExJTkUtQkVMT1c+OzxTTUFMTD47PFUwMDVBPgorPHo4PgorCis8VTAxN0Q+CTxVMDE3RD47PENBUk9OPjs8Q0FQSVRBTD47PFUwMTdEPgorPFUwMTdFPgk8VTAxN0Q+OzxDQVJPTj47PFNNQUxMPjs8VTAxN0Q+CisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJSDI7XNsaWNlCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKKzxVMDAzMD4JPFUwMDMwPjs8VTAwMzA+O0lHTk9SRTs8VTAwMzA+Cis8VTIwNzA+CTxVMDAzMD47PFUyMDcwPjtJR05PUkU7PFUwMDMwPgorPFUyMTVCPgk8VTAwMzA+OzxVMjE1Qj47SUdOT1JFOzxVMDAzMD4KKzxVMDBCQz4JPFUwMDMwPjs8VTAwQkM+O0lHTk9SRTs8VTAwMzA+Cis8VTIxNUM+CTxVMDAzMD47PFUyMTVDPjtJR05PUkU7PFUwMDMwPgorPFUwMEJEPgk8VTAwMzA+OzxVMDBCRD47SUdOT1JFOzxVMDAzMD4KKzxVMjE1RD4JPFUwMDMwPjs8VTIxNUQ+O0lHTk9SRTs8VTAwMzA+Cis8VTAwQkU+CTxVMDAzMD47PFUwMEJFPjtJR05PUkU7PFUwMDMwPgorPFUyMTVFPgk8VTAwMzA+OzxVMjE1RT47SUdOT1JFOzxVMDAzMD4KKzxVMDAzMT4JPFUwMDMxPjs8VTAwMzE+O0lHTk9SRTs8VTAwMzE+Cis8VTAwMzI+CTxVMDAzMj47PFUwMDMyPjtJR05PUkU7PFUwMDMyPgorPFUwMDMzPgk8VTAwMzM+OzxVMDAzMz47SUdOT1JFOzxVMDAzMz4KKzxVMDAzND4JPFUwMDM0Pjs8VTAwMzQ+O0lHTk9SRTs8VTAwMzQ+Cis8VTAwMzU+CTxVMDAzNT47PFUwMDM1PjtJR05PUkU7PFUwMDM1PgorPFUwMDM2Pgk8VTAwMzY+OzxVMDAzNj47SUdOT1JFOzxVMDAzNj4KKzxVMDAzNz4JPFUwMDM3Pjs8VTAwMzc+O0lHTk9SRTs8VTAwMzc+Cis8VTAwMzg+CTxVMDAzOD47PFUwMDM4PjtJR05PUkU7PFUwMDM4PgorPFUwMDM5Pgk8VTAwMzk+OzxVMDAzOT47SUdOT1JFOzxVMDAzOT4KKzxVMDBCOT4JPFUwMDMxPjs8VTAwQjk+O0lHTk9SRTs8VTAwMzE+Cis8VTAwQjI+CTxVMDAzMj47PFUwMEIyPjtJR05PUkU7PFUwMDMyPgorPFUwMEIzPgk8VTAwMzM+OzxVMDBCMz47SUdOT1JFOzxVMDAzMz4KKzxVMjA3ND4JPFUwMDM0Pjs8VTIwNzQ+O0lHTk9SRTs8VTAwMzQ+Cis8VTIwNzU+CTxVMDAzNT47PFUyMDc1PjtJR05PUkU7PFUwMDM1PgorPFUyMDc2Pgk8VTAwMzY+OzxVMjA3Nj47SUdOT1JFOzxVMDAzNj4KKzxVMjA3Nz4JPFUwMDM3Pjs8VTIwNzc+O0lHTk9SRTs8VTAwMzc+Cis8VTIwNzg+CTxVMDAzOD47PFUyMDc4PjtJR05PUkU7PFUwMDM4PgorPFUyMDc5Pgk8VTAwMzk+OzxVMjA3OT47SUdOT1JFOzxVMDAzOT4KKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJSBWuWVjaG55IHNwZWNp4Wxu7SB6bmFreSAoc25hvmlsIGpzZW0gc2UgdG8gc2X4YWRpdCBwb2RsZSBub3JteSwgYWxlIG1vYyBzZQorJSBtaSBuZWRh+GlsbykKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworPFUwMDA5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDk+Cis8VTAwMEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwQj4KKzxVMDAwRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBEPgorPFUwMDBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMEE+Cis8VTAwMEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwQz4KKworJSB6bmFt6W5rYQorPFUwMDJFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMkU+Cis8VTAwMkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyQz4KKzxVMDAzQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDNCPgorPFUwMDNGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwM0Y+Cis8VTAwQkY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCRj4KKzxVMDAyMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDIxPgorPFUwMEExPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTE+Cis8VTAwM0E+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAzQT4KKyUgVXZvem92a3kKKzxVMDAyMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDIyPgorPFUwMDI3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjc+Cis8VTAwNjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA2MD4KKzxVMjAxQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDFBPgorPFUyMDFFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMUU+Cis8VTIwMUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxRj4KKzxVMjAxQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDFDPgorPFUyMDFEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMUQ+Cis8VTIwMUI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxQj4KKzxVMjAxOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDE4PgorPFUyMDE5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTk+CisKKzxVMDAyRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDJEPgorPFUyMDdCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwN0I+Cis8VTAwQUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBRD4KKzxVMjAxMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDEwPgorPFUyMjEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMTI+Cis8VTIwMTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxMz4KKzxVMjAxND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDE0PgorPFUyMDE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTU+Cis8VTAwQTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBNj4KKzxVMDA3Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDdDPgorPFUwMDJGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMkY+Cis8VTAwNUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA1Qz4KKzxVMDAyOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDI4PgorPFUyMDdEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwN0Q+Cis8VTAwMjk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyOT4KKzxVMjA3RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDdFPgorPFUwMDVCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNUI+Cis8VTAwNUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA1RD4KKzxVMDAzQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDNDPgorPFUyMDM5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwM0M+Cis8VTAwM0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAzRT4KKzxVMjAzQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDNFPgorPFUwMDdCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwN0I+Cis8VTAwN0Q+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA3RD4KKworJSB1c3ThbGVu6SB6bmHoa3kKKzxVMDAyNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDI2PgorPFUwMEEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTM+Cis8VTAwQTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBNz4KKzxVMDAyNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDI1PgorPFUwMDI0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjQ+Cis8VTAwQUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBRT4KKzxVMDBBOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEE5PgorPFUwMEI2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjY+Cis8VTAwNDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA0MD4KKzxVMDBBMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEEyPgorPFUwMEE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTU+Cis8VTAwQjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCNT4KKzxVMjBBMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMEEzPgorPFUyMEE0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwQTQ+Cis8VTIwQTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjBBNz4KKzxVMjBBOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMEE5PgorPFUyMTE2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMTY+Cis8VTIxMTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjExNz4KKzxVMjEyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTIwPgorPFUyMTIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMjI+Cis8VTIxMjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjEyNj4KKzxVMjEyQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTJCPgorCislIGdyYWZpY2vpIHpuYehreSBhIG9icmF6Y2UgbGluZeFybu0KKzxVMDA1Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDVGPgorPFUwMDNEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwM0Q+Cis8VTAwNUU+ICBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNUU+Cis8VTIzMTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMxMD4KKzxVMDBBQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEFDPgorPFUyMDE2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTY+Cis8VTIwMTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxNz4KKzxVMjI2MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjYxPgorPFUwMEFCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQUI+Cis8VTAwQkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCQj4KKzxVMDBGNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEY3PgorPFUyMjFBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMUE+Cis8VTAwMkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyQj4KKzxVMjA3QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDdBPgorPFUwMEQ3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwRDc+Cis8VTAwMkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyQT4KKzxVMjIxNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjE3PgorPFUwMEIxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjE+Cis8VTIyNjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2MD4KKzxVMjI2ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjY0PgorPFUyMjY1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNjU+Cis8VTAwMjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyMz4KKzxVMDA3RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDdFPgorPFUwMkRDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAyREM+Cis8VUUwMDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwNT4KKzxVMjI0Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjRDPgorPFUyMjNDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyM0M+Cis8VTIyNDM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI0Mz4KKzxVMjI0NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjQ1PgorPFUyMjQ4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNDg+CisKKyUgZ3JhZmlja+kgem5h6Gt5IGEgb2JyYXpjZSBwbG+5bukKKzxVMDBCMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEIwPgorPFUyMTAzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMDM+Cis8VTIxMDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjEwOT4KKzxVMDBBND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEE0PgorCislIEFrY2VudHksIG5ldu1tIGthbSBqZSB6YfhhZGl0IChu7Gt0ZXLpIGpzb3UgYnLhbnkgamFrbyB1dm96b3ZreSkKKzxVMDJEOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkQ5PgorPFUwMEFGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwM0U+Cis8VTIwM0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzRT4KKzxVMDBCND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEI0PgorJTxVMDA2MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDYwPiAlIHD4ZW3tc3TsbiBkbyB1dm96b3ZlaworJTxVMDA1RT4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDVFPiAlIHD4ZW3tc3TsbiBkbyBvYnJhemP5IGxpbmXhcm7tY2gKKzxVMDJDNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkM3PgorJSB0aWxkYQorPFUwMkQ4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAyRDg+Cis8VTAwQjg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCOD4KKzxVMDJEQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkRCPgorPFUwMkRBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAyREE+Cis8VTAwQTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBOD4KKzxVMDJERD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkREPgorPFUwMEI3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjc+CisKKyUgTmVzZfhhemVubworPFUwMzc0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzNzQ+Cis8VTAzNzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDM3NT4KKzxVMDM3QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzdBPgorPFUwMzdFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzN0U+Cis8VTAzODQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDM4ND4KKzxVMDM4NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzg1PgorPFUwMzg3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzODc+Cis8VTAzRDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDNEMD4KKzxVMUZCRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkJGPgorPFUxRkMwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGQzA+Cis8VTFGQzE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZDMT4KKzxVMUZDRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkNEPgorPFUxRkNFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGQ0U+Cis8VTFGQ0Y+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZDRj4KKzxVMUZERD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkREPgorPFUxRkRFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGREU+Cis8VTFGREY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZERj4KKzxVMUZFRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkVEPgorPFUxRkVGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGRUY+Cis8VTFGRkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZGRT4KKzxVMjAwRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDBFPgorPFUyMDBGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMEY+Cis8VTIwMjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAyMD4KKzxVMjAyMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDIxPgorPFUyMjE5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMTk+Cis8VTIwMjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAyNT4KKzxVMjAyNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDI2PgorPFUyMDMwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzA+Cis8VTIwMzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzMj4KKzxVMjAzMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDMzPgorPFUyMDM0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzQ+Cis8VTIwMzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzNT4KKzxVMjAzNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDM2PgorPFUyMDM3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzc+Cis8VTIwMzg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzOD4KKzxVMjAzQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDNCPgorPFUyMDNDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwM0M+Cis8VTIwN0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA3Qz4KKzxVMjA4MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDgwPgorPFUyMDgxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODE+Cis8VTIwODI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4Mj4KKzxVMjA4Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDgzPgorPFUyMDg0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODQ+Cis8VTIwODU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4NT4KKzxVMjA4Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDg2PgorPFUyMDg3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODc+Cis8VTIwODg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4OD4KKzxVMjA4OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDg5PgorPFUyMDhBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwOEE+Cis8VTIwOEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4Qj4KKzxVMjA4Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDhDPgorPFUyMDhEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwOEQ+Cis8VTIwOEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4RT4KKzxVMjEwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTA1PgorPFUyMTFFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMUU+Cis8VTIxNTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1Mz4KKzxVMjE1ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTU0PgorPFUyMTU1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTU+Cis8VTIxNTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1Nj4KKzxVMjE1Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTU3PgorPFUyMTU4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTg+Cis8VTIxNTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1OT4KKzxVMjE1QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTVBPgorPFUyMTYwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjA+Cis8VTIxNjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2MT4KKzxVMjE2Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTYyPgorPFUyMTYzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjM+Cis8VTIxNjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2ND4KKzxVMjE2NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTY1PgorPFUyMTY2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjY+Cis8VTIxNjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2Nz4KKzxVMjE2OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTY4PgorPFUyMTY5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjk+Cis8VTIxNkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2QT4KKzxVMjE2Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTZCPgorPFUyMTZDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNkM+Cis8VTIxNkQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2RD4KKzxVMjE2RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTZFPgorPFUyMTZGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNkY+Cis8VTIxNzA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3MD4KKzxVMjE3MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTcxPgorPFUyMTcyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzI+Cis8VTIxNzM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3Mz4KKzxVMjE3ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTc0PgorPFUyMTc1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzU+Cis8VTIxNzY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3Nj4KKzxVMjE3Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTc3PgorPFUyMTc4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzg+Cis8VTIxNzk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3OT4KKzxVMjE3QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTdBPgorPFUyMTdCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxN0I+Cis8VTIxN0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3Qz4KKzxVMjE3RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTdEPgorPFUyMTdFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxN0U+Cis8VTIxN0Y+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3Rj4KKzxVMjE4MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTgwPgorPFUyMTgxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxODE+Cis8VTIxODI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE4Mj4KKzxVMjE5MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTkxPgorPFUyMTkzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxOTM+Cis8VTIxOTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5ND4KKzxVMjE5NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTk1PgorPFUyMTk2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxOTY+Cis8VTIxOTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5Nz4KKzxVMjE5OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTk4PgorPFUyMTk5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxOTk+Cis8VTIxQTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjFBOD4KKzxVMjFDMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMUMwPgorPFUyMUQwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxRDA+Cis8VTIxRDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjFEMj4KKzxVMjFEND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMUQ0PgorPFUyMjAwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMDA+Cis8VTIyMDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwMj4KKzxVMjIwMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjAzPgorPFUyMjA1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMDU+Cis8VTIyMDY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwNj4KKzxVMjIwNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjA3PgorPFUyMjA4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMDg+Cis8VTIyMEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwQj4KKzxVMjIwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjBGPgorPFUyMjExPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMTE+Cis8VTIyMTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxMz4KKzxVMjIxND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjE0PgorPFUyMDQ0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwNDQ+Cis8VTIyMTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxOD4KKzxVMjAyMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDIyPgorPFUyMjFEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMUQ+Cis8VTIyMUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxRT4KKzxVMjIxRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjFGPgorPFUyMjIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMjA+Cis8VTIyMjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyNT4KKzxVMjIyNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjI3PgorPFUyMjI4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMjg+Cis8VTIyMjk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyOT4KKzxVMjIyQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjJBPgorPFUyMjJCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMkI+Cis8VTIyMkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyQz4KKzxVMjIyRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjJFPgorPFUyMjM0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMzQ+Cis8VTIyMzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIzNT4KKzxVMjIzNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjM2PgorPFUyMjM3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMzc+Cis8VTIyM0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIzRT4KKzxVMjI1Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjUzPgorPFUyMjZBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNkE+Cis8VTIyNkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2Qj4KKzxVMjI2RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjZFPgorPFUyMjZGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNkY+Cis8VTIyODI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI4Mj4KKzxVMjI4Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjgzPgorPFUyMjg2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyODY+Cis8VTIyODc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI4Nz4KKzxVMjI5OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjk5PgorPFUyMjlBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyOUE+Cis8VTIyQTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjJBNT4KKzxVMjJDNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMkM1PgorPFUyMkVFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyRUU+Cis8VTIzMDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMwMj4KKzxVMjMwOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzA4PgorPFUyMzA5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMDk+Cis8VTIzMEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMwQT4KKzxVMjMwQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzBCPgorPFUyMzEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMTI+Cis8VTIzMTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMxNT4KKzxVMjMyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzIwPgorPFUyMzIxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMjE+Cis8VTI0MjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQyMz4KKzxVMjQ0MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQwPgorPFUyNDQxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDE+Cis8VTI0NDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ0Mj4KKzxVMjQ0Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQzPgorPFUyNDQ2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDY+Cis8VTI0NDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ0Nz4KKzxVMjQ0OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQ4PgorPFUyNDQ5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDk+Cis8VTI0NjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2MD4KKzxVMjQ2MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDYxPgorPFUyNDYyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NjI+Cis8VTI0NjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Mz4KKzxVMjQ2ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDY0PgorPFUyNDY1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NjU+Cis8VTI0NjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Nj4KKzxVMjQ2Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDY3PgorPFUyNDY4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0Njg+Cis8VTI0Njk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2OT4KKzxVMjQ2QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDZBPgorPFUyNDZCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NkI+Cis8VTI0NkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Qz4KKzxVMjQ2RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDZEPgorPFUyNDZFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NkU+Cis8VTI0NkY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Rj4KKzxVMjQ3MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDcwPgorPFUyNDcxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NzE+Cis8VTI0NzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3Mj4KKzxVMjQ3Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDczPgorPFUyNDc0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NzQ+Cis8VTI0NzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3NT4KKzxVMjQ3Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDc2PgorPFUyNDc3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0Nzc+Cis8VTI0Nzg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3OD4KKzxVMjQ3OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDc5PgorPFUyNDdBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0N0E+Cis8VTI0N0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3Qj4KKzxVMjQ3Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDdDPgorPFUyNDdEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0N0Q+Cis8VTI0N0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3RT4KKzxVMjQ3Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDdGPgorPFUyNDgwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODA+Cis8VTI0ODE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4MT4KKzxVMjQ4Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDgyPgorPFUyNDgzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODM+Cis8VTI0ODQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4ND4KKzxVMjQ4NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDg1PgorPFUyNDg2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODY+Cis8VTI0ODc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4Nz4KKzxVMjQ4OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDg4PgorPFUyNDg5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODk+Cis8VTI0OEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4QT4KKzxVMjQ4Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDhCPgorPFUyNDhDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OEM+Cis8VTI0OEQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4RD4KKzxVMjQ4RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDhFPgorPFUyNDhGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OEY+Cis8VTI0OTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5MD4KKzxVMjQ5MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDkxPgorPFUyNDkyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTI+Cis8VTI0OTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5Mz4KKzxVMjQ5ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDk0PgorPFUyNDk1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTU+Cis8VTI0OTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5Nj4KKzxVMjQ5Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDk3PgorPFUyNDk4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTg+Cis8VTI0OTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5OT4KKzxVMjQ5QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDlBPgorPFUyNDlCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OUI+Cis8VTI0RUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjRFQT4KKzxVMjUwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTAwPgorPFUyNTUwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTA+Cis8VTI1MDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwMj4KKzxVMjU1MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTUxPgorPFUyNTA0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MDQ+Cis8VTI1MDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwNT4KKzxVMjUwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTA2PgorPFUyNTA3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MDc+Cis8VTI1MDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwOD4KKzxVMjUwOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTA5PgorPFUyNTBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MEE+Cis8VTI1MEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwQj4KKzxVMjUwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTBDPgorPFUyNTUyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTI+Cis8VTI1NTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Mz4KKzxVMjU1ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTU0PgorPFUyNTEwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MTA+Cis8VTI1NTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1NT4KKzxVMjU1Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTU2PgorPFUyNTU3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTc+Cis8VTI1MTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUxND4KKzxVMjU1OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTU4PgorPFUyNTU5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTk+Cis8VTI1NUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1QT4KKzxVMjUxOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTE4PgorPFUyNTVCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NUI+Cis8VTI1NUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Qz4KKzxVMjU1RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTVEPgorPFUyNTFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MUM+Cis8VTI1NUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1RT4KKzxVMjUxRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTFFPgorPFUyNTFGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MUY+Cis8VTI1NUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Rj4KKzxVMjUyMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTIxPgorPFUyNTIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MjI+Cis8VTI1NjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2MD4KKzxVMjUyND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTI0PgorPFUyNTYxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjE+Cis8VTI1MjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyNj4KKzxVMjUyNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTI3PgorPFUyNTYyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjI+Cis8VTI1Mjk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyOT4KKzxVMjUyQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTJBPgorPFUyNTYzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjM+Cis8VTI1MkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyQz4KKzxVMjUyRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTJEPgorPFUyNTJFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MkU+Cis8VTI1NjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2ND4KKzxVMjU2NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTY1PgorPFUyNTMxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MzE+Cis8VTI1MzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzMj4KKzxVMjU2Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTY2PgorPFUyNTM0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MzQ+Cis8VTI1MzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzNT4KKzxVMjUzNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTM2PgorPFUyNTY3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Njc+Cis8VTI1Njg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2OD4KKzxVMjUzOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTM5PgorPFUyNTNBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1M0E+Cis8VTI1Njk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2OT4KKzxVMjUzQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTNDPgorPFUyNTNEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1M0Q+Cis8VTI1M0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzRT4KKzxVMjU2QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTZBPgorPFUyNTQwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDA+Cis8VTI1NDE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0MT4KKzxVMjU2Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTZCPgorPFUyNTQzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDM+Cis8VTI1NDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0ND4KKzxVMjU0NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTQ1PgorPFUyNTQ2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDY+Cis8VTI1NDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0Nz4KKzxVMjU0OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTQ4PgorPFUyNTQ5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDk+Cis8VTI1NEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0QT4KKzxVMjU2Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTZDPgorPFUyNTcxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NzE+Cis8VTI1NzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU3Mj4KKzxVMjU4MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTgwPgorPFUyNTg0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1ODQ+Cis8VTI1ODg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU4OD4KKzxVMjU4Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNThDPgorPFUyNTkwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1OTA+Cis8VTI1OTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU5MT4KKzxVMjU5Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTkyPgorPFUyNTkzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1OTM+Cis8VTI1QTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBMD4KKzxVMjVBMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUExPgorPFUyNUEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTI+Cis8VTI1QTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBMz4KKzxVMjVBND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUE0PgorPFUyNUE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTU+Cis8VTI1QTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBNj4KKzxVMjVBNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUE3PgorPFUyNUE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTg+Cis8VTI1QTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBOT4KKzxVMjVBQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUFBPgorPFUyNUFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QUM+Cis8VTI1QUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBRD4KKzxVMjVCMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUIyPgorPFUyNUIzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QjM+Cis8VTI1Qjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVCNz4KKzxVMjVCQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUJBPgorPFUyNUJDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QkM+Cis8VTI1QkQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVCRD4KKzxVMjVDMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUMxPgorPFUyNUM0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QzQ+Cis8VTI1QzY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVDNj4KKzxVMjVDNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUM3PgorPFUyNUNBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Q0E+Cis8VTI1Q0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVDQj4KKzxVMjVDRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUNFPgorPFUyNUNGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Q0Y+Cis8VTI1RDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVEMD4KKzxVMjVEMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUQxPgorPFUyNUQ4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1RDg+Cis8VTI1RDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVEOT4KKzxVMjVFMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUUyPgorPFUyNUUzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1RTM+Cis8VTI1RUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVFRj4KKzxVMjYwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjA1PgorPFUyNjA2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2MDY+Cis8VTI2MEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYwRT4KKzxVMjYwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjBGPgorPFUyNjFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2MUM+Cis8VTI2MUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYxRT4KKzxVMjYzQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjNBPgorPFUyNjNCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2M0I+Cis8VTI2M0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYzQz4KKzxVMjY0MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjQwPgorPFUyNjQyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NDI+Cis8VTI2NjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2MD4KKzxVMjY2MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjYxPgorPFUyNjYyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NjI+Cis8VTI2NjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2Mz4KKzxVMjY2ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjY0PgorPFUyNjY1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NjU+Cis8VTI2NjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2Nj4KKzxVMjY2Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjY3PgorPFUyNjY5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2Njk+Cis8VTI2NkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2QT4KKzxVMjY2Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjZCPgorPFUyNjZDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NkM+Cis8VTI2NkQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2RD4KKzxVMjY2RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjZFPgorPFUyNjZGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NkY+Cis8VTI3MTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjcxMz4KKzxVMjcxNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNzE3PgorPFUyNzIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI3MjA+Cis8VTMwMDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwMD4KKzxVMzAwMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDAxPgorPFUzMDAyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMDI+Cis8VTMwMDM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwMz4KKzxVMzAwND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDA0PgorPFUzMDA1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMDU+Cis8VTMwMDY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwNj4KKzxVMzAwNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDA3PgorPFUzMDBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMEE+Cis8VTMwMEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwQj4KKzxVMzAwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDBDPgorPFUzMDBEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMEQ+Cis8VTMwMEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwRT4KKzxVMzAwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDBGPgorPFUzMDEwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTA+Cis8VTMwMTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxMT4KKzxVMzAxMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDEyPgorPFUzMDEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTM+Cis8VTMwMTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxND4KKzxVMzAxNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDE1PgorPFUzMDE2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTY+Cis8VTMwMTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxNz4KKzxVMzAxQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDFDPgorPFUzMDIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMjA+Cis8VTMwOUI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzA5Qj4KKzxVMzA5Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDlDPgorPFUzMDlEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwOUQ+Cis8VTMwOUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzA5RT4KKzxVMzBGQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMEZCPgorPFUzMEZDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwRkM+Cis8VTMwRkQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzBGRD4KKzxVMzBGRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMEZFPgorPFUzMjFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMUM+Cis8VTMyMjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyMD4KKzxVMzIyMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjIxPgorPFUzMjIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjI+Cis8VTMyMjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyMz4KKzxVMzIyND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjI0PgorPFUzMjI1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjU+Cis8VTMyMjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyNj4KKzxVMzIyNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjI3PgorPFUzMjI4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjg+Cis8VTMyMjk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyOT4KKzxVMzI3Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjdGPgorPFUzM0MyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMzQzI+Cis8VTMzRDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzNEOD4KKzxVMDAwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDAwPgorPFUwMDAxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDE+Cis8VTAwMDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwMj4KKzxVMDAwMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDAzPgorPFUwMDA0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDQ+Cis8VTAwMDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwNT4KKzxVMDAwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA2PgorPFUwMDA3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDc+Cis8VTAwMDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwOD4KKzxVMDAwRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBFPgorPFUwMDBGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMEY+Cis8VTAwMTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxMD4KKzxVMDAxMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDExPgorPFUwMDEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTI+Cis8VTAwMTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxMz4KKzxVMDAxND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE0PgorPFUwMDE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTU+Cis8VTAwMTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxNj4KKzxVMDAxNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE3PgorPFUwMDE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTg+Cis8VTAwMTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxOT4KKzxVMDAxQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFBPgorPFUwMDFCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMUI+Cis8VTAwMUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxQz4KKzxVMDAxRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFEPgorPFUwMDFFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMUU+Cis8VTAwMUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxRj4KKzxVMDA3Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDdGPgorPFUwMDgwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODA+Cis8VTAwODE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4MT4KKzxVMDA4Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDgyPgorPFUwMDgzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODM+Cis8VTAwODQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4ND4KKzxVMDA4NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDg1PgorPFUwMDg2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODY+Cis8VTAwODc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4Nz4KKzxVMDA4OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDg4PgorPFUwMDg5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODk+Cis8VTAwOEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4QT4KKzxVMDA4Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDhCPgorPFUwMDhDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOEM+Cis8VTAwOEQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4RD4KKzxVMDA4RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDhFPgorPFUwMDhGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOEY+Cis8VTAwOTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5MD4KKzxVMDA5MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDkxPgorPFUwMDkyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTI+Cis8VTAwOTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Mz4KKzxVMDA5ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDk0PgorPFUwMDk1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTU+Cis8VTAwOTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Nj4KKzxVMDA5Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDk3PgorPFUwMDk4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTg+Cis8VTAwOTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5OT4KKzxVMDA5QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDlBPgorPFUwMDlCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOUI+Cis8VTAwOUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Qz4KKzxVMDA5RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDlEPgorPFUwMDlFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOUU+Cis8VTAwOUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Rj4KKzxVRTAwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDAwPgorPFVFMDAxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDE+Cis8VUUwMDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwMj4KKzxVMDMwMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzAxPgorPFVFMDA0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDQ+Cis8VUUwMDY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwNj4KKzxVRTAwNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDA3PgorPFVFMDA4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDg+Cis8VUUwMDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwOT4KKzxVRTAwQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDBBPgorPFVFMDBCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMEI+Cis8VUUwMEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwQz4KKzxVRTAwRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDBEPgorPFVFMDBFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMEU+Cis8VUUwMEY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwRj4KKzxVRTAxMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDEwPgorPFVFMDExPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMTE+Cis8VUUwMTI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxMj4KKzxVRTAxMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDEzPgorPFVFMDE0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMTQ+Cis8VUUwMTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxNT4KKzxVRTAxNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDE3PgorPFVFMDE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMTg+Cis8VUUwMTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxOT4KK1VOREVGSU5FRAlJR05PUkU7SUdOT1JFO0lHTk9SRTtJR05PUkUKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJSBaYnl0ZWsgduxj7SB6IHVuaWtvZHUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworPFUwMzkxPgk8VTAzOTE+OzxDQVBJVEFMPjs8R1JFRUs+OzxVMDM5MT4KKzxVMDM4Nj4JPFUwMzkxPjs8Q0FQSVRBTD47PFRPTk9TPjs8VTAzOTE+Cis8VTAzQjE+CTxVMDM5MT47PFNNQUxMPjs8R1JFRUs+OzxVMDM5MT4KKzxVMDNBQz4JPFUwMzkxPjs8U01BTEw+OzxUT05PUz47PFUwMzkxPgorPFUwMzkyPgk8VTAzOTI+OzxDQVBJVEFMPjs8R1JFRUs+OzxVMDM5Mj4KKzxVMDNCMj4JPFUwMzkyPjs8U01BTEw+OzxHUkVFSz47PFUwMzkyPgorPFUwMzkzPgk8VTAzOTM+OzxDQVBJVEFMPjs8R1JFRUs+OzxVMDM5Mz4KKzxVMDNCMz4JPFUwMzkzPjs8U01BTEw+OzxHUkVFSz47PFUwMzkzPgorPFUwMzk0Pgk8VTAzOTQ+OzxDQVBJVEFMPjs8R1JFRUs+OzxVMDM5ND4KKzxVMDNCND4JPFUwMzk0Pjs8U01BTEw+OzxHUkVFSz47PFUwMzk0PgorPFUwMzk1Pgk8VTAzOTU+OzxDQVBJVEFMPjs8R1JFRUs+OzxVMDM5NT4KKzxVMDM4OD4JPFUwMzk1Pjs8Q0FQSVRBTD47PFRPTk9TPjs8VTAzOTU+Cis8VTAzQjU+CTxVMDM5NT47PFNNQUxMPjs8R1JFRUs+OzxVMDM5NT4KKzxVMDNBRD4JPFUwMzk1Pjs8U01BTEw+OzxUT05PUz47PFUwMzk1PgorPFUwMzk2Pgk8VTAzOTY+OzxDQVBJVEFMPjs8R1JFRUs+OzxVMDM5Nj4KKzxVMDNCNj4JPFUwMzk2Pjs8U01BTEw+OzxHUkVFSz47PFUwMzk2PgorPFUwMzk3Pgk8VTAzOTc+OzxDQVBJVEFMPjs8R1JFRUs+OzxVMDM5Nz4KKzxVMDM4OT4JPFUwMzk3Pjs8Q0FQSVRBTD47PFRPTk9TPjs8VTAzOTc+Cis8VTAzQjc+CTxVMDM5Nz47PFNNQUxMPjs8R1JFRUs+OzxVMDM5Nz4KKzxVMDNBRT4JPFUwMzk3Pjs8U01BTEw+OzxUT05PUz47PFUwMzk3PgorPFUwMzk4Pgk8VTAzOTg+OzxDQVBJVEFMPjs8R1JFRUs+OzxVMDM5OD4KKzxVMDNCOD4JPFUwMzk4Pjs8U01BTEw+OzxHUkVFSz47PFUwMzk4PgorPFUwMzk5Pgk8VTAzOTk+OzxDQVBJVEFMPjs8R1JFRUs+OzxVMDM5OT4KKzxVMDM4QT4JPFUwMzk5Pjs8Q0FQSVRBTD47PFRPTk9TPjs8VTAzOTk+Cis8VTAzQUE+CTxVMDM5OT47PENBUElUQUw+OzxESUFMWVRJQ0E+OzxVMDM5OT4KKzxVMDNCOT4JPFUwMzk5Pjs8U01BTEw+OzxHUkVFSz47PFUwMzk5PgorPFUwM0FGPgk8VTAzOTk+OzxTTUFMTD47PFRPTk9TPjs8VTAzOTk+Cis8VTAzQ0E+CTxVMDM5OT47PFNNQUxMPjs8RElBTFlUSUNBPjs8VTAzOTk+Cis8VTAzOTA+CTxVMDM5OT47PFNNQUxMPjs8RElBTFlUSUNBK1RPTk9TPjs8VTAzOTk+Cis8VTAzOUE+CTxVMDM5QT47PENBUElUQUw+OzxHUkVFSz47PFUwMzlBPgorPFUwM0JBPgk8VTAzOUE+OzxTTUFMTD47PEdSRUVLPjs8VTAzOUE+Cis8VTAzOUI+CTxVMDM5Qj47PENBUElUQUw+OzxHUkVFSz47PFUwMzlCPgorPFUwM0JCPgk8VTAzOUI+OzxTTUFMTD47PEdSRUVLPjs8VTAzOUI+Cis8VTAzOUM+CTxVMDM5Qz47PENBUElUQUw+OzxHUkVFSz47PFUwMzlDPgorPFUwM0JDPgk8VTAzOUM+OzxTTUFMTD47PEdSRUVLPjs8VTAzOUM+Cis8VTAzOUQ+CTxVMDM5RD47PENBUElUQUw+OzxHUkVFSz47PFUwMzlEPgorPFUwM0JEPgk8VTAzOUQ+OzxTTUFMTD47PEdSRUVLPjs8VTAzOUQ+Cis8VTAzOUU+CTxVMDM5RT47PENBUElUQUw+OzxHUkVFSz47PFUwMzlFPgorPFUwM0JFPgk8VTAzOUU+OzxTTUFMTD47PEdSRUVLPjs8VTAzOUU+Cis8VTAzOUY+CTxVMDM5Rj47PENBUElUQUw+OzxHUkVFSz47PFUwMzlGPgorPFUwMzhDPgk8VTAzOUY+OzxDQVBJVEFMPjs8VE9OT1M+OzxVMDM5Rj4KKzxVMDNCRj4JPFUwMzlGPjs8U01BTEw+OzxHUkVFSz47PFUwMzlGPgorPFUwM0NDPgk8VTAzOUY+OzxTTUFMTD47PFRPTk9TPjs8VTAzOUY+Cis8VTAzQTA+CTxVMDNBMD47PENBUElUQUw+OzxHUkVFSz47PFUwM0EwPgorPFUwM0MwPgk8VTAzQTA+OzxTTUFMTD47PEdSRUVLPjs8VTAzQTA+Cis8VTAzQTE+CTxVMDNBMT47PENBUElUQUw+OzxHUkVFSz47PFUwM0ExPgorPFUwM0MxPgk8VTAzQTE+OzxTTUFMTD47PEdSRUVLPjs8VTAzQTE+Cis8VTAzQTM+CTxVMDNBMz47PENBUElUQUw+OzxHUkVFSz47PFUwM0EzPgorPFUwM0MzPgk8VTAzQTM+OzxTTUFMTD47PEdSRUVLPjs8VTAzQTM+Cis8VTAzQzI+CTxVMDNBMz47PFNNQUxMPjs8VTAzQzI+OzxVMDNBMz4KKzxVMDNBND4JPFUwM0E0Pjs8Q0FQSVRBTD47PEdSRUVLPjs8VTAzQTQ+Cis8VTAzQzQ+CTxVMDNBND47PFNNQUxMPjs8R1JFRUs+OzxVMDNBND4KKzxVMDNBNT4JPFUwM0E1Pjs8Q0FQSVRBTD47PEdSRUVLPjs8VTAzQTU+Cis8VTAzOEU+CTxVMDNBNT47PENBUElUQUw+OzxUT05PUz47PFUwM0E1PgorPFUwM0FCPgk8VTAzQTU+OzxDQVBJVEFMPjs8RElBTFlUSUNBPjs8VTAzQTU+Cis8VTAzQzU+CTxVMDNBNT47PFNNQUxMPjs8R1JFRUs+OzxVMDNBNT4KKzxVMDNDRD4JPFUwM0E1Pjs8U01BTEw+OzxUT05PUz47PFUwM0E1PgorPFUwM0NCPgk8VTAzQTU+OzxTTUFMTD47PERJQUxZVElDQT47PFUwM0E1PgorPFUwM0IwPgk8VTAzQTU+OzxTTUFMTD47PERJQUxZVElDQStUT05PUz47PFUwM0E1PgorPFUwM0E2Pgk8VTAzQTY+OzxDQVBJVEFMPjs8R1JFRUs+OzxVMDNBNj4KKzxVMDNDNj4JPFUwM0E2Pjs8U01BTEw+OzxHUkVFSz47PFUwM0E2PgorPFUwM0E3Pgk8VTAzQTc+OzxDQVBJVEFMPjs8R1JFRUs+OzxVMDNBNz4KKzxVMDNDNz4JPFUwM0E3Pjs8U01BTEw+OzxHUkVFSz47PFUwM0E3PgorPFUwM0E4Pgk8VTAzQTg+OzxDQVBJVEFMPjs8R1JFRUs+OzxVMDNBOD4KKzxVMDNDOD4JPFUwM0E4Pjs8U01BTEw+OzxHUkVFSz47PFUwM0E4PgorPFUwM0E5Pgk8VTAzQTk+OzxDQVBJVEFMPjs8R1JFRUs+OzxVMDNBOT4KKzxVMDM4Rj4JPFUwM0E5Pjs8Q0FQSVRBTD47PFRPTk9TPjs8VTAzQTk+Cis8VTAzQzk+CTxVMDNBOT47PFNNQUxMPjs8R1JFRUs+OzxVMDNBOT4KKzxVMDNDRT4JPFUwM0E5Pjs8U01BTEw+OzxUT05PUz47PFUwM0E5PgorPFUwNDEwPgk8VTA0MTA+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQxMD4KKzxVMDQzMD4JPFUwNDEwPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDEwPgorPFUwNDExPgk8VTA0MTE+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQxMT4KKzxVMDQzMT4JPFUwNDExPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDExPgorPFUwNDEyPgk8VTA0MTI+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQxMj4KKzxVMDQzMj4JPFUwNDEyPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDEyPgorPFUwNDEzPgk8VTA0MTM+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQxMz4KKzxVMDQzMz4JPFUwNDEzPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDEzPgorPFUwNDAzPgk8VTA0MDM+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQwMz4KKzxVMDQ1Mz4JPFUwNDAzPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDAzPgorPFUwNDkwPgk8VTA0OTA+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQ5MD4KKzxVMDQ5MT4JPFUwNDkwPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDkwPgorPFUwNDE0Pgk8VTA0MTQ+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQxND4KKzxVMDQzND4JPFUwNDE0Pjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDE0PgorPFUwNDAyPgk8VTA0MDI+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQwMj4KKzxVMDQ1Mj4JPFUwNDAyPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDAyPgorPFUwNDE1Pgk8VTA0MTU+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQxNT4KKzxVMDQzNT4JPFUwNDE1Pjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDE1PgorPFUwNDAxPgk8VTA0MDE+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQwMT4KKzxVMDQ1MT4JPFUwNDAxPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDAxPgorPFUwNDA0Pgk8VTA0MDQ+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQwND4KKzxVMDQ1ND4JPFUwNDA0Pjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDA0PgorPFUwNDE2Pgk8VTA0MTY+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQxNj4KKzxVMDQzNj4JPFUwNDE2Pjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDE2PgorPFUwNDE3Pgk8VTA0MTc+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQxNz4KKzxVMDQzNz4JPFUwNDE3Pjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDE3PgorPFUwNDE4Pgk8VTA0MTg+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQxOD4KKzxVMDQzOD4JPFUwNDE4Pjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDE4PgorPFUwNDA2Pgk8VTA0MDY+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQwNj4KKzxVMDQ1Nj4JPFUwNDA2Pjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDA2PgorPFUwNDA3Pgk8VTA0MDc+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQwNz4KKzxVMDQ1Nz4JPFUwNDA3Pjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDA3PgorPFUwNDA4Pgk8VTA0MDg+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQwOD4KKzxVMDQ1OD4JPFUwNDA4Pjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDA4PgorPFUwNDE5Pgk8VTA0MTk+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQxOT4KKzxVMDQzOT4JPFUwNDE5Pjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDE5PgorPFUwNDFBPgk8VTA0MUE+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQxQT4KKzxVMDQzQT4JPFUwNDFBPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDFBPgorPFUwNDBDPgk8VTA0MEM+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQwQz4KKzxVMDQ1Qz4JPFUwNDBDPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDBDPgorPFUwNDFCPgk8VTA0MUI+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQxQj4KKzxVMDQzQj4JPFUwNDFCPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDFCPgorPFUwNDA5Pgk8VTA0MDk+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQwOT4KKzxVMDQ1OT4JPFUwNDA5Pjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDA5PgorPFUwNDFDPgk8VTA0MUM+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQxQz4KKzxVMDQzQz4JPFUwNDFDPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDFDPgorPFUwNDFEPgk8VTA0MUQ+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQxRD4KKzxVMDQzRD4JPFUwNDFEPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDFEPgorPFUwNDBBPgk8VTA0MEE+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQwQT4KKzxVMDQ1QT4JPFUwNDBBPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDBBPgorPFUwNDFFPgk8VTA0MUU+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQxRT4KKzxVMDQzRT4JPFUwNDFFPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDFFPgorPFUwNDFGPgk8VTA0MUY+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQxRj4KKzxVMDQzRj4JPFUwNDFGPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDFGPgorPFUwNDIwPgk8VTA0MjA+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQyMD4KKzxVMDQ0MD4JPFUwNDIwPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDIwPgorPFUwNDIxPgk8VTA0MjE+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQyMT4KKzxVMDQ0MT4JPFUwNDIxPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDIxPgorPFUwNDIyPgk8VTA0MjI+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQyMj4KKzxVMDQ0Mj4JPFUwNDIyPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDIyPgorPFUwNDBCPgk8VTA0MEI+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQwQj4KKzxVMDQ1Qj4JPFUwNDBCPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDBCPgorPFUwNDIzPgk8VTA0MjM+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQyMz4KKzxVMDQ0Mz4JPFUwNDIzPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDIzPgorPFUwNDBFPgk8VTA0MEU+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQwRT4KKzxVMDQ1RT4JPFUwNDBFPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDBFPgorPFUwNDI0Pgk8VTA0MjQ+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQyND4KKzxVMDQ0ND4JPFUwNDI0Pjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDI0PgorPFUwNDI1Pgk8VTA0MjU+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQyNT4KKzxVMDQ0NT4JPFUwNDI1Pjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDI1PgorPFUwNDI2Pgk8VTA0MjY+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQyNj4KKzxVMDQ0Nj4JPFUwNDI2Pjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDI2PgorPFUwNDA1Pgk8VTA0MDU+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQwNT4KKzxVMDQ1NT4JPFUwNDA1Pjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDA1PgorPFUwNDI3Pgk8VTA0Mjc+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQyNz4KKzxVMDQ0Nz4JPFUwNDI3Pjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDI3PgorPFUwNDBGPgk8VTA0MEY+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQwRj4KKzxVMDQ1Rj4JPFUwNDBGPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDBGPgorPFUwNDI4Pgk8VTA0Mjg+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQyOD4KKzxVMDQ0OD4JPFUwNDI4Pjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDI4PgorPFUwNDI5Pgk8VTA0Mjk+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQyOT4KKzxVMDQ0OT4JPFUwNDI5Pjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDI5PgorPFUwNDRBPgk8VTA0NEE+OzxDWVJJTExJQz47PFNNQUxMPjs8VTA0NEE+Cis8VTA0MkE+CTxVMDQ0QT47PENZUklMTElDPjs8Q0FQSVRBTD47PFUwNDRBPgorPFUwNDJCPgk8VTA0MkI+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQyQj4KKzxVMDQ0Qj4JPFUwNDJCPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDJCPgorPFUwNDRDPgk8VTA0NEM+OzxDWVJJTExJQz47PFNNQUxMPjs8VTA0NEM+Cis8VTA0MkM+CTxVMDQ0Qz47PENZUklMTElDPjs8Q0FQSVRBTD47PFUwNDRDPgorPFUwNDJEPgk8VTA0MkQ+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQyRD4KKzxVMDQ0RD4JPFUwNDJEPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDJEPgorPFUwNDJFPgk8VTA0MkU+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQyRT4KKzxVMDQ0RT4JPFUwNDJFPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDJFPgorPFUwNDJGPgk8VTA0MkY+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQyRj4KKzxVMDQ0Rj4JPFUwNDJGPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDJGPgorPFUwNDYyPgk8VTA0NjI+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQ2Mj4KKzxVMDQ2Mz4JPFUwNDYyPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDYyPgorPFUwNDZBPgk8VTA0NkE+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQ2QT4KKzxVMDQ2Qj4JPFUwNDZBPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDZBPgorPFUwNDcyPgk8VTA0NzI+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQ3Mj4KKzxVMDQ3Mz4JPFUwNDcyPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDcyPgorPFUwNDc0Pgk8VTA0NzQ+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQ3ND4KKzxVMDQ3NT4JPFUwNDc0Pjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDc0PgorPFUwNDgwPgk8VTA0ODA+OzxDWVJJTExJQz47PENBUElUQUw+OzxVMDQ4MD4KKzxVMDQ4MT4JPFUwNDgwPjs8Q1lSSUxMSUM+OzxTTUFMTD47PFUwNDgwPgorPFUwNUQwPgk8VTA1RDA+O0lHTk9SRTtJR05PUkU7PFUwNUQwPgorPFUwNUQxPgk8VTA1RDE+O0lHTk9SRTtJR05PUkU7PFUwNUQxPgorPFUwNUQyPgk8VTA1RDI+O0lHTk9SRTtJR05PUkU7PFUwNUQyPgorPFUwNUQzPgk8VTA1RDM+O0lHTk9SRTtJR05PUkU7PFUwNUQzPgorPFUwNUQ0Pgk8VTA1RDQ+O0lHTk9SRTtJR05PUkU7PFUwNUQ0PgorPFUwNUQ1Pgk8VTA1RDU+O0lHTk9SRTtJR05PUkU7PFUwNUQ1PgorPFUwNUQ2Pgk8VTA1RDY+O0lHTk9SRTtJR05PUkU7PFUwNUQ2PgorPFUwNUQ3Pgk8VTA1RDc+O0lHTk9SRTtJR05PUkU7PFUwNUQ3PgorPFUwNUQ4Pgk8VTA1RDg+O0lHTk9SRTtJR05PUkU7PFUwNUQ4PgorPFUwNUQ5Pgk8VTA1RDk+O0lHTk9SRTtJR05PUkU7PFUwNUQ5PgorPFUwNURBPgk8VTA1REE+O0lHTk9SRTtJR05PUkU7PFUwNURBPgorPFUwNURCPgk8VTA1REI+O0lHTk9SRTtJR05PUkU7PFUwNURCPgorPFUwNURDPgk8VTA1REM+O0lHTk9SRTtJR05PUkU7PFUwNURDPgorPFUwNUREPgk8VTA1REQ+O0lHTk9SRTtJR05PUkU7PFUwNUREPgorPFUwNURFPgk8VTA1REU+O0lHTk9SRTtJR05PUkU7PFUwNURFPgorPFUwNURGPgk8VTA1REY+O0lHTk9SRTtJR05PUkU7PFUwNURGPgorPFUwNUUwPgk8VTA1RTA+O0lHTk9SRTtJR05PUkU7PFUwNUUwPgorPFUwNUUxPgk8VTA1RTE+O0lHTk9SRTtJR05PUkU7PFUwNUUxPgorPFUwNUUyPgk8VTA1RTI+O0lHTk9SRTtJR05PUkU7PFUwNUUyPgorPFUwNUUzPgk8VTA1RTM+O0lHTk9SRTtJR05PUkU7PFUwNUUzPgorPFUwNUU0Pgk8VTA1RTQ+O0lHTk9SRTtJR05PUkU7PFUwNUU0PgorPFUwNUU1Pgk8VTA1RTU+O0lHTk9SRTtJR05PUkU7PFUwNUU1PgorPFUwNUU2Pgk8VTA1RTY+O0lHTk9SRTtJR05PUkU7PFUwNUU2PgorPFUwNUU3Pgk8VTA1RTc+O0lHTk9SRTtJR05PUkU7PFUwNUU3PgorPFUwNUU4Pgk8VTA1RTg+O0lHTk9SRTtJR05PUkU7PFUwNUU4PgorPFUwNUU5Pgk8VTA1RTk+O0lHTk9SRTtJR05PUkU7PFUwNUU5PgorPFUwNUVBPgk8VTA1RUE+O0lHTk9SRTtJR05PUkU7PFUwNUVBPgorCislIEFyYWJpYyBjb2xsYXRpbmcKKworPFUwNjBDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA2MEM+Cis8VTA2MUI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDYxQj4KKzxVMDYxRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNjFGPgorPFUwNjQwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA2NDA+CisKKzxVMDYyMT4JPFUwNjIxPjs8VTA2MjE+O0lHTk9SRTs8VTA2MjE+Cis8VTA2MjI+CTxVMDYyMj47PFUwNjIyPjtJR05PUkU7PFUwNjIyPgorPFVGRTgyPgk8VTA2MjI+OzxVRkU4Mj47SUdOT1JFOzxVMDYyMj4KKzxVMDYyMz4JPFUwNjIxPjs8VTA2MjM+O0lHTk9SRTs8VTA2MjE+Cis8VUZFODQ+CTxVMDYyMT47PFVGRTg0PjtJR05PUkU7PFUwNjIxPgorPFUwNjI0Pgk8VTA2MjE+OzxVMDYyND47SUdOT1JFOzxVMDYyMT4KKzxVMDYyNT4JPFUwNjIxPjs8VTA2MjU+O0lHTk9SRTs8VTA2MjE+Cis8VUZFODg+CTxVMDYyMT47PFVGRTg4PjtJR05PUkU7PFUwNjIxPgorPFUwNjI2Pgk8VTA2MjE+OzxVMDYyNj47SUdOT1JFOzxVMDYyMT4KKzxVMDY3MD4JPFUwNjcwPjs8VTA2NzA+O0lHTk9SRTs8VTA2NzA+Cis8VTA2Mjc+CTxVMDYyNz47PFUwNjI3PjtJR05PUkU7PFUwNjI3PgorPFVGRThEPgk8VTA2Mjc+OzxVRkU4RD47SUdOT1JFOzxVMDYyNz4KKzxVRkU4RT4JPFUwNjI3Pjs8VUZFOEU+O0lHTk9SRTs8VTA2Mjc+Cis8VUUwMTY+CTxVMDYyNz47PFVFMDE2PjtJR05PUkU7PFUwNjI3PgorPFUwNjI4Pgk8VTA2Mjg+OzxVMDYyOD47SUdOT1JFOzxVMDYyOD4KKzxVRkU4Rj4JPFUwNjI4Pjs8VUZFOEY+O0lHTk9SRTs8VTA2Mjg+Cis8VUZFOTA+CTxVMDYyOD47PFVGRTkwPjtJR05PUkU7PFUwNjI4PgorPFVGRTkxPgk8VTA2Mjg+OzxVRkU5MT47SUdOT1JFOzxVMDYyOD4KKzxVRkU5Mj4JPFUwNjI4Pjs8VUZFOTI+O0lHTk9SRTs8VTA2Mjg+Cis8VTA2N0U+CTxVMDY3RT47PFUwNjdFPjtJR05PUkU7PFUwNjdFPgorPFUwNkE0Pgk8VTA2QTQ+OzxVMDZBND47SUdOT1JFOzxVMDZBND4KKzxVMDYyOT4JPFUwNjI5Pjs8VTA2Mjk+O0lHTk9SRTs8VTA2Mjk+Cis8VUZFOTM+CTxVMDYyOT47PFVGRTkzPjtJR05PUkU7PFUwNjI5PgorPFVGRTk0Pgk8VTA2Mjk+OzxVRkU5ND47SUdOT1JFOzxVMDYyOT4KKzxVMDYyQT4JPFUwNjI5Pjs8VTA2MkE+O0lHTk9SRTs8VTA2Mjk+Cis8VUZFOTU+CTxVMDYyOT47PFVGRTk1PjtJR05PUkU7PFUwNjI5PgorPFVGRTk2Pgk8VTA2Mjk+OzxVRkU5Nj47SUdOT1JFOzxVMDYyOT4KKzxVRkU5Nz4JPFUwNjI5Pjs8VUZFOTc+O0lHTk9SRTs8VTA2Mjk+Cis8VUZFOTg+CTxVMDYyOT47PFVGRTk4PjtJR05PUkU7PFUwNjI5PgorPFUwNjJCPgk8VTA2MkI+OzxVMDYyQj47SUdOT1JFOzxVMDYyQj4KKzxVRkU5OT4JPFUwNjJCPjs8VUZFOTk+O0lHTk9SRTs8VTA2MkI+Cis8VUZFOUE+CTxVMDYyQj47PFVGRTlBPjtJR05PUkU7PFUwNjJCPgorPFVGRTlCPgk8VTA2MkI+OzxVRkU5Qj47SUdOT1JFOzxVMDYyQj4KKzxVRkU5Qz4JPFUwNjJCPjs8VUZFOUM+O0lHTk9SRTs8VTA2MkI+Cis8VTA2MkM+CTxVMDYyQz47PFUwNjJDPjtJR05PUkU7PFUwNjJDPgorPFVGRTlEPgk8VTA2MkM+OzxVRkU5RD47SUdOT1JFOzxVMDYyQz4KKzxVRkU5RT4JPFUwNjJDPjs8VUZFOUU+O0lHTk9SRTs8VTA2MkM+Cis8VUZFOUY+CTxVMDYyQz47PFVGRTlGPjtJR05PUkU7PFUwNjJDPgorPFVGRUEwPgk8VTA2MkM+OzxVRkVBMD47SUdOT1JFOzxVMDYyQz4KKzxVMDYyRD4JPFUwNjJEPjs8VTA2MkQ+O0lHTk9SRTs8VTA2MkQ+Cis8VUZFQTE+CTxVMDYyRD47PFVGRUExPjtJR05PUkU7PFUwNjJEPgorPFVGRUEyPgk8VTA2MkQ+OzxVRkVBMj47SUdOT1JFOzxVMDYyRD4KKzxVRkVBMz4JPFUwNjJEPjs8VUZFQTM+O0lHTk9SRTs8VTA2MkQ+Cis8VUZFQTQ+CTxVMDYyRD47PFVGRUE0PjtJR05PUkU7PFUwNjJEPgorPFUwNjJFPgk8VTA2MkU+OzxVMDYyRT47SUdOT1JFOzxVMDYyRT4KKzxVRkVBNT4JPFUwNjJFPjs8VUZFQTU+O0lHTk9SRTs8VTA2MkU+Cis8VUZFQTY+CTxVMDYyRT47PFVGRUE2PjtJR05PUkU7PFUwNjJFPgorPFVGRUE3Pgk8VTA2MkU+OzxVRkVBNz47SUdOT1JFOzxVMDYyRT4KKzxVRkVBOD4JPFUwNjJFPjs8VUZFQTg+O0lHTk9SRTs8VTA2MkU+Cis8VTA2MkY+CTxVMDYyRj47PFUwNjJGPjtJR05PUkU7PFUwNjJGPgorPFVGRUE5Pgk8VTA2MkY+OzxVRkVBOT47SUdOT1JFOzxVMDYyRj4KKzxVRkVBQT4JPFUwNjJGPjs8VUZFQUE+O0lHTk9SRTs8VTA2MkY+Cis8VTA2MzA+CTxVMDYzMD47PFUwNjMwPjtJR05PUkU7PFUwNjMwPgorPFVGRUFCPgk8VTA2MzA+OzxVRkVBQj47SUdOT1JFOzxVMDYzMD4KKzxVRkVBQz4JPFUwNjMwPjs8VUZFQUM+O0lHTk9SRTs8VTA2MzA+Cis8VTA2MzE+CTxVMDYzMT47PFUwNjMxPjtJR05PUkU7PFUwNjMxPgorPFVGRUFEPgk8VTA2MzE+OzxVRkVBRD47SUdOT1JFOzxVMDYzMT4KKzxVRkVBRT4JPFUwNjMxPjs8VUZFQUU+O0lHTk9SRTs8VTA2MzE+Cis8VTA2MzI+CTxVMDYzMj47PFUwNjMyPjtJR05PUkU7PFUwNjMyPgorPFVGRUFGPgk8VTA2MzI+OzxVRkVBRj47SUdOT1JFOzxVMDYzMj4KKzxVRkVCMD4JPFUwNjMyPjs8VUZFQjA+O0lHTk9SRTs8VTA2MzI+Cis8VTA2MzM+CTxVMDYzMz47PFUwNjMzPjtJR05PUkU7PFUwNjMzPgorPFVGRUIxPgk8VTA2MzM+OzxVRkVCMT47SUdOT1JFOzxVMDYzMz4KKzxVRkVCMj4JPFUwNjMzPjs8VUZFQjI+O0lHTk9SRTs8VTA2MzM+Cis8VUZFQjM+CTxVMDYzMz47PFVGRUIzPjtJR05PUkU7PFUwNjMzPgorPFVGRUI0Pgk8VTA2MzM+OzxVRkVCND47SUdOT1JFOzxVMDYzMz4KKzxVMDYzND4JPFUwNjM0Pjs8VTA2MzQ+O0lHTk9SRTs8VTA2MzQ+Cis8VUZFQjU+CTxVMDYzND47PFVGRUI1PjtJR05PUkU7PFUwNjM0PgorPFVGRUI2Pgk8VTA2MzQ+OzxVRkVCNj47SUdOT1JFOzxVMDYzND4KKzxVRkVCNz4JPFUwNjM0Pjs8VUZFQjc+O0lHTk9SRTs8VTA2MzQ+Cis8VUZFQjg+CTxVMDYzND47PFVGRUI4PjtJR05PUkU7PFUwNjM0PgorPFUwNjM1Pgk8VTA2MzU+OzxVMDYzNT47SUdOT1JFOzxVMDYzNT4KKzxVRkVCOT4JPFUwNjM1Pjs8VUZFQjk+O0lHTk9SRTs8VTA2MzU+Cis8VUZFQkE+CTxVMDYzNT47PFVGRUJBPjtJR05PUkU7PFUwNjM1PgorPFVGRUJCPgk8VTA2MzU+OzxVRkVCQj47SUdOT1JFOzxVMDYzNT4KKzxVRkVCQz4JPFUwNjM1Pjs8VUZFQkM+O0lHTk9SRTs8VTA2MzU+Cis8VTA2MzY+CTxVMDYzNj47PFUwNjM2PjtJR05PUkU7PFUwNjM2PgorPFVGRUJEPgk8VTA2MzY+OzxVRkVCRD47SUdOT1JFOzxVMDYzNj4KKzxVRkVCRT4JPFUwNjM2Pjs8VUZFQkU+O0lHTk9SRTs8VTA2MzY+Cis8VUZFQkY+CTxVMDYzNj47PFVGRUJGPjtJR05PUkU7PFUwNjM2PgorPFVGRUMwPgk8VTA2MzY+OzxVRkVDMD47SUdOT1JFOzxVMDYzNj4KKzxVMDYzNz4JPFUwNjM3Pjs8VTA2Mzc+O0lHTk9SRTs8VTA2Mzc+Cis8VUZFQzE+CTxVMDYzNz47PFVGRUMxPjtJR05PUkU7PFUwNjM3PgorPFVGRUMyPgk8VTA2Mzc+OzxVRkVDMj47SUdOT1JFOzxVMDYzNz4KKzxVRkVDMz4JPFUwNjM3Pjs8VUZFQzM+O0lHTk9SRTs8VTA2Mzc+Cis8VUZFQzQ+CTxVMDYzNz47PFVGRUM0PjtJR05PUkU7PFUwNjM3PgorPFUwNjM4Pgk8VTA2Mzg+OzxVMDYzOD47SUdOT1JFOzxVMDYzOD4KKzxVRkVDNT4JPFUwNjM4Pjs8VUZFQzU+O0lHTk9SRTs8VTA2Mzg+Cis8VUZFQzY+CTxVMDYzOD47PFVGRUM2PjtJR05PUkU7PFUwNjM4PgorPFVGRUM3Pgk8VTA2Mzg+OzxVRkVDNz47SUdOT1JFOzxVMDYzOD4KKzxVRkVDOD4JPFUwNjM4Pjs8VUZFQzg+O0lHTk9SRTs8VTA2Mzg+Cis8VTA2Mzk+CTxVMDYzOT47PFUwNjM5PjtJR05PUkU7PFUwNjM5PgorPFVGRUM5Pgk8VTA2Mzk+OzxVRkVDOT47SUdOT1JFOzxVMDYzOT4KKzxVRkVDQT4JPFUwNjM5Pjs8VUZFQ0E+O0lHTk9SRTs8VTA2Mzk+Cis8VUZFQ0I+CTxVMDYzOT47PFVGRUNCPjtJR05PUkU7PFUwNjM5PgorPFVGRUNDPgk8VTA2Mzk+OzxVRkVDQz47SUdOT1JFOzxVMDYzOT4KKzxVMDYzQT4JPFUwNjNBPjs8VTA2M0E+O0lHTk9SRTs8VTA2M0E+Cis8VUZFQ0Q+CTxVMDYzQT47PFVGRUNEPjtJR05PUkU7PFUwNjNBPgorPFVGRUNFPgk8VTA2M0E+OzxVRkVDRT47SUdOT1JFOzxVMDYzQT4KKzxVRkVDRj4JPFUwNjNBPjs8VUZFQ0Y+O0lHTk9SRTs8VTA2M0E+Cis8VUZFRDA+CTxVMDYzQT47PFVGRUQwPjtJR05PUkU7PFUwNjNBPgorPFUwNjQxPgk8VTA2NDE+OzxVMDY0MT47SUdOT1JFOzxVMDY0MT4KKzxVRkVEMT4JPFUwNjQxPjs8VUZFRDE+O0lHTk9SRTs8VTA2NDE+Cis8VUZFRDI+CTxVMDY0MT47PFVGRUQyPjtJR05PUkU7PFUwNjQxPgorPFVGRUQzPgk8VTA2NDE+OzxVRkVEMz47SUdOT1JFOzxVMDY0MT4KKzxVRkVEND4JPFUwNjQxPjs8VUZFRDQ+O0lHTk9SRTs8VTA2NDE+Cis8VTA2NDI+CTxVMDY0Mj47PFUwNjQyPjtJR05PUkU7PFUwNjQyPgorPFVGRUQ1Pgk8VTA2NDI+OzxVRkVENT47SUdOT1JFOzxVMDY0Mj4KKzxVRkVENj4JPFUwNjQyPjs8VUZFRDY+O0lHTk9SRTs8VTA2NDI+Cis8VUZFRDc+CTxVMDY0Mj47PFVGRUQ3PjtJR05PUkU7PFUwNjQyPgorPFVGRUQ4Pgk8VTA2NDI+OzxVRkVEOD47SUdOT1JFOzxVMDY0Mj4KKzxVMDY0Mz4JPFUwNjQzPjs8VTA2NDM+O0lHTk9SRTs8VTA2NDM+Cis8VUZFRDk+CTxVMDY0Mz47PFVGRUQ5PjtJR05PUkU7PFUwNjQzPgorPFVGRURBPgk8VTA2NDM+OzxVRkVEQT47SUdOT1JFOzxVMDY0Mz4KKzxVRkVEQj4JPFUwNjQzPjs8VUZFREI+O0lHTk9SRTs8VTA2NDM+Cis8VUZFREM+CTxVMDY0Mz47PFVGRURDPjtJR05PUkU7PFUwNjQzPgorPFUwNjQ0Pgk8VTA2NDQ+OzxVMDY0ND47SUdOT1JFOzxVMDY0ND4KKzxVRkVERD4JPFUwNjQ0Pjs8VUZFREQ+O0lHTk9SRTs8VTA2NDQ+Cis8VUZFREU+CTxVMDY0ND47PFVGRURFPjtJR05PUkU7PFUwNjQ0PgorPFVGRURGPgk8VTA2NDQ+OzxVRkVERj47SUdOT1JFOzxVMDY0ND4KKzxVRkVFMD4JPFUwNjQ0Pjs8VUZFRTA+O0lHTk9SRTs8VTA2NDQ+Cis8VTA2NDU+CTxVMDY0NT47PFUwNjQ1PjtJR05PUkU7PFUwNjQ1PgorPFVGRUUxPgk8VTA2NDU+OzxVRkVFMT47SUdOT1JFOzxVMDY0NT4KKzxVRkVFMj4JPFUwNjQ1Pjs8VUZFRTI+O0lHTk9SRTs8VTA2NDU+Cis8VUZFRTM+CTxVMDY0NT47PFVGRUUzPjtJR05PUkU7PFUwNjQ1PgorPFVGRUU0Pgk8VTA2NDU+OzxVRkVFND47SUdOT1JFOzxVMDY0NT4KKzxVMDY0Nj4JPFUwNjQ2Pjs8VTA2NDY+O0lHTk9SRTs8VTA2NDY+Cis8VUZFRTU+CTxVMDY0Nj47PFVGRUU1PjtJR05PUkU7PFUwNjQ2PgorPFVGRUU2Pgk8VTA2NDY+OzxVRkVFNj47SUdOT1JFOzxVMDY0Nj4KKzxVRkVFNz4JPFUwNjQ2Pjs8VUZFRTc+O0lHTk9SRTs8VTA2NDY+Cis8VUZFRTg+CTxVMDY0Nj47PFVGRUU4PjtJR05PUkU7PFUwNjQ2PgorPFUwNjQ3Pgk8VTA2NDc+OzxVMDY0Nz47SUdOT1JFOzxVMDY0Nz4KKzxVRkVFOT4JPFUwNjQ3Pjs8VUZFRTk+O0lHTk9SRTs8VTA2NDc+Cis8VUZFRUE+CTxVMDY0Nz47PFVGRUVBPjtJR05PUkU7PFUwNjQ3PgorPFVGRUVCPgk8VTA2NDc+OzxVRkVFQj47SUdOT1JFOzxVMDY0Nz4KKzxVRkVFQz4JPFUwNjQ3Pjs8VUZFRUM+O0lHTk9SRTs8VTA2NDc+Cis8VTA2NDg+CTxVMDY0OD47PFUwNjQ4PjtJR05PUkU7PFUwNjQ4PgorPFVGRUVEPgk8VTA2NDg+OzxVRkVFRD47SUdOT1JFOzxVMDY0OD4KKzxVRkVFRT4JPFUwNjQ4Pjs8VUZFRUU+O0lHTk9SRTs8VTA2NDg+Cis8VTA2NDk+CTxVMDY0OT47PFUwNjQ5PjtJR05PUkU7PFUwNjQ5PgorPFVGRUVGPgk8VTA2NDk+OzxVRkVFRj47SUdOT1JFOzxVMDY0OT4KKzxVRkVGMD4JPFUwNjQ5Pjs8VUZFRjA+O0lHTk9SRTs8VTA2NDk+Cis8VTA2NEE+CTxVMDY0QT47PFUwNjRBPjtJR05PUkU7PFUwNjRBPgorPFVGRUYxPgk8VTA2NEE+OzxVRkVGMT47SUdOT1JFOzxVMDY0QT4KKzxVRkVGMj4JPFUwNjRBPjs8VUZFRjI+O0lHTk9SRTs8VTA2NEE+Cis8VUZFRjM+CTxVMDY0QT47PFVGRUYzPjtJR05PUkU7PFUwNjRBPgorPFVGRUY0Pgk8VTA2NEE+OzxVRkVGND47SUdOT1JFOzxVMDY0QT4KKworPFUwNjRCPglJR05PUkU7SUdOT1JFOzxVMDY0Qj47PFUwNjRCPgorPFUwNjRDPglJR05PUkU7SUdOT1JFOzxVMDY0Qz47PFUwNjRDPgorPFUwNjREPglJR05PUkU7SUdOT1JFOzxVMDY0RD47PFUwNjREPgorPFUwNjRFPglJR05PUkU7SUdOT1JFOzxVMDY0RT47PFUwNjRFPgorPFUwNjRGPglJR05PUkU7SUdOT1JFOzxVMDY0Rj47PFUwNjRGPgorPFUwNjUwPglJR05PUkU7SUdOT1JFOzxVMDY1MD47PFUwNjUwPgorPFUwNjUxPglJR05PUkU7SUdOT1JFOzxVMDY1MT47PFUwNjUxPgorPFVGRTdEPglJR05PUkU7SUdOT1JFOzxVRkU3RD47PFVGRTdEPgorPFUwNjUyPglJR05PUkU7SUdOT1JFOzxVMDY1Mj47PFUwNjUyPgorCis8VTA2NjA+CTxVMDAzMD47PFUwNjYwPjtJR05PUkU7PFUwMDMwPgorPFUwNjYxPgk8VTAwMzE+OzxVMDY2MT47SUdOT1JFOzxVMDAzMT4KKzxVMDY2Mj4JPFUwMDMyPjs8VTA2NjI+O0lHTk9SRTs8VTAwMzI+Cis8VTA2NjM+CTxVMDAzMz47PFUwNjYzPjtJR05PUkU7PFUwMDMzPgorPFUwNjY0Pgk8VTAwMzQ+OzxVMDY2ND47SUdOT1JFOzxVMDAzND4KKzxVMDY2NT4JPFUwMDM1Pjs8VTA2NjU+O0lHTk9SRTs8VTAwMzU+Cis8VTA2NjY+CTxVMDAzNj47PFUwNjY2PjtJR05PUkU7PFUwMDM2PgorPFUwNjY3Pgk8VTAwMzc+OzxVMDY2Nz47SUdOT1JFOzxVMDAzNz4KKzxVMDY2OD4JPFUwMDM4Pjs8VTA2Njg+O0lHTk9SRTs8VTAwMzg+Cis8VTA2Njk+CTxVMDAzOT47PFUwNjY5PjtJR05PUkU7PFUwMDM5PgorCis8VUZFRjU+CSI8VTA2NDQ+PFUwNjIyPiI7IjxVMDY0ND48VTA2MjI+IjsiPFVGRUY1PjxVRkVGNT4iOyI8VTA2NDQ+PFUwNjIyPiIKKzxVRkVGNj4JIjxVMDY0ND48VTA2MjI+IjsiPFUwNjQ0PjxVRkU4Mj4iOyI8VUZFRjY+PFVGRUY2PiI7IjxVMDY0ND48VTA2MjI+IgorPFVGRUY3PgkiPFUwNjQ0PjxVMDYyMz4iOyI8VTA2NDQ+PFUwNjIzPiI7IjxVRkVGNz48VUZFRjc+IjsiPFUwNjQ0PjxVMDYyMz4iCis8VUZFRjg+CSI8VTA2NDQ+PFUwNjIzPiI7IjxVMDY0ND48VUZFODQ+IjsiPFVGRUY4PjxVRkVGOD4iOyI8VTA2NDQ+PFUwNjIzPiIKKzxVRkVGOT4JIjxVMDY0ND48VTA2MjU+IjsiPFUwNjQ0PjxVMDYyNT4iOyI8VUZFRjk+PFVGRUY5PiI7IjxVMDY0ND48VTA2MjU+IgorPFVGRUZBPgkiPFUwNjQ0PjxVMDYyNT4iOyI8VTA2NDQ+PFVGRTg4PiI7IjxVRkVGQT48VUZFRkE+IjsiPFUwNjQ0PjxVMDYyNT4iCis8VUZFRkI+CSI8VTA2NDQ+PFUwNjI3PiI7IjxVMDY0ND48VUZFOEQ+IjsiPFVGRUZCPjxVRkVGQj4iOyI8VTA2NDQ+PFUwNjI3PiIKKzxVRkVGQz4JIjxVMDY0ND48VTA2Mjc+IjsiPFUwNjQ0PjxVRkU4RT4iOyI8VUZFRkM+PFVGRUZDPiI7IjxVMDY0ND48VTA2Mjc+IgorCislIGthdGFrYW5hL2hpcmFnYW5hIHNvcnRpbmcKKyUgYmFzZSBpcyBrYXRha2FuYSwgYXMgdGhpcyBpcyBwcmVzZW50IGluIG1vc3QgY2hhcnNldHMKKyUgbm9ybWFsIGJlZm9yZSB2b2ljZWQgYmVmb3JlIHNlbWktdm9pY2VkCislIHNtYWxsIHZvY2FscyBiZWZvcmUgbm9ybWFsIHZvY2FscworJSBrYXRha2FuYSBiZWZvcmUgaGlyYWdhbmEKKworPFUzMEExPgk8VTMwQTE+OzxVMzBBMT47SUdOT1JFOzxVMzBBMT4KKzxVMzA0MT4JPFUzMEExPjs8VTMwNDE+O0lHTk9SRTs8VTMwQTE+Cis8VTMwQTI+CTxVMzBBMT47PFUzMEEyPjtJR05PUkU7PFUzMEExPgorPFUzMDQyPgk8VTMwQTE+OzxVMzA0Mj47SUdOT1JFOzxVMzBBMT4KKzxVMzBBMz4JPFUzMEEzPjs8VTMwQTM+O0lHTk9SRTs8VTMwQTM+Cis8VTMwNDM+CTxVMzBBMz47PFUzMDQzPjtJR05PUkU7PFUzMEEzPgorPFUzMEE0Pgk8VTMwQTM+OzxVMzBBND47SUdOT1JFOzxVMzBBMz4KKzxVMzA0ND4JPFUzMEEzPjs8VTMwNDQ+O0lHTk9SRTs8VTMwQTM+Cis8VTMwQTU+CTxVMzBBNT47PFUzMEE1PjtJR05PUkU7PFUzMEE1PgorPFUzMDQ1Pgk8VTMwQTU+OzxVMzA0NT47SUdOT1JFOzxVMzBBNT4KKzxVMzBBNj4JPFUzMEE1Pjs8VTMwQTY+O0lHTk9SRTs8VTMwQTU+Cis8VTMwNDY+CTxVMzBBNT47PFUzMDQ2PjtJR05PUkU7PFUzMEE1PgorPFUzMEY0Pgk8VTMwQTU+OzxVMzBGND47SUdOT1JFOzxVMzBBNT4KKzxVMzBBNz4JPFUzMEE3Pjs8VTMwQTc+O0lHTk9SRTs8VTMwQTc+Cis8VTMwNDc+CTxVMzBBNz47PFUzMDQ3PjtJR05PUkU7PFUzMEE3PgorPFUzMEE4Pgk8VTMwQTc+OzxVMzBBOD47SUdOT1JFOzxVMzBBNz4KKzxVMzA0OD4JPFUzMEE3Pjs8VTMwNDg+O0lHTk9SRTs8VTMwQTc+Cis8VTMwQTk+CTxVMzBBOT47PFUzMEE5PjtJR05PUkU7PFUzMEE5PgorPFUzMDQ5Pgk8VTMwQTk+OzxVMzA0OT47SUdOT1JFOzxVMzBBOT4KKzxVMzBBQT4JPFUzMEE5Pjs8VTMwQUE+O0lHTk9SRTs8VTMwQTk+Cis8VTMwNEE+CTxVMzBBOT47PFUzMDRBPjtJR05PUkU7PFUzMEE5PgorPFUzMEY1Pgk8VTMwRjU+OzxVMzBGNT47SUdOT1JFOzxVMzBGNT4KKzxVMzBBQj4JPFUzMEY1Pjs8VTMwQUI+O0lHTk9SRTs8VTMwRjU+Cis8VTMwNEI+CTxVMzBGNT47PFUzMDRCPjtJR05PUkU7PFUzMEY1PgorPFUzMEFDPgk8VTMwRjU+OzxVMzBBQz47SUdOT1JFOzxVMzBGNT4KKzxVMzA0Qz4JPFUzMEY1Pjs8VTMwNEM+O0lHTk9SRTs8VTMwRjU+Cis8VTMwQUQ+CTxVMzBBRD47PFUzMEFEPjtJR05PUkU7PFUzMEFEPgorPFUzMDREPgk8VTMwQUQ+OzxVMzA0RD47SUdOT1JFOzxVMzBBRD4KKzxVMzBBRT4JPFUzMEFEPjs8VTMwQUU+O0lHTk9SRTs8VTMwQUQ+Cis8VTMwNEU+CTxVMzBBRD47PFUzMDRFPjtJR05PUkU7PFUzMEFEPgorPFUzMEFGPgk8VTMwQUY+OzxVMzBBRj47SUdOT1JFOzxVMzBBRj4KKzxVMzA0Rj4JPFUzMEFGPjs8VTMwNEY+O0lHTk9SRTs8VTMwQUY+Cis8VTMwQjA+CTxVMzBBRj47PFUzMEIwPjtJR05PUkU7PFUzMEFGPgorPFUzMDUwPgk8VTMwQUY+OzxVMzA1MD47SUdOT1JFOzxVMzBBRj4KKzxVMzBGNj4JPFUzMEY2Pjs8VTMwRjY+O0lHTk9SRTs8VTMwRjY+Cis8VTMwQjE+CTxVMzBGNj47PFUzMEIxPjtJR05PUkU7PFUzMEY2PgorPFUzMDUxPgk8VTMwRjY+OzxVMzA1MT47SUdOT1JFOzxVMzBGNj4KKzxVMzBCMj4JPFUzMEY2Pjs8VTMwQjI+O0lHTk9SRTs8VTMwRjY+Cis8VTMwNTI+CTxVMzBGNj47PFUzMDUyPjtJR05PUkU7PFUzMEY2PgorPFUzMEIzPgk8VTMwQjM+OzxVMzBCMz47SUdOT1JFOzxVMzBCMz4KKzxVMzA1Mz4JPFUzMEIzPjs8VTMwNTM+O0lHTk9SRTs8VTMwQjM+Cis8VTMwQjQ+CTxVMzBCMz47PFUzMEI0PjtJR05PUkU7PFUzMEIzPgorPFUzMDU0Pgk8VTMwQjM+OzxVMzA1ND47SUdOT1JFOzxVMzBCMz4KKzxVMzBCNT4JPFUzMEI1Pjs8VTMwQjU+O0lHTk9SRTs8VTMwQjU+Cis8VTMwNTU+CTxVMzBCNT47PFUzMDU1PjtJR05PUkU7PFUzMEI1PgorPFUzMEI2Pgk8VTMwQjU+OzxVMzBCNj47SUdOT1JFOzxVMzBCNT4KKzxVMzA1Nj4JPFUzMEI1Pjs8VTMwNTY+O0lHTk9SRTs8VTMwQjU+Cis8VTMwQjc+CTxVMzBCNz47PFUzMEI3PjtJR05PUkU7PFUzMEI3PgorPFUzMDU3Pgk8VTMwQjc+OzxVMzA1Nz47SUdOT1JFOzxVMzBCNz4KKzxVMzBCOD4JPFUzMEI3Pjs8VTMwQjg+O0lHTk9SRTs8VTMwQjc+Cis8VTMwNTg+CTxVMzBCNz47PFUzMDU4PjtJR05PUkU7PFUzMEI3PgorPFUzMEI5Pgk8VTMwQjk+OzxVMzBCOT47SUdOT1JFOzxVMzBCOT4KKzxVMzA1OT4JPFUzMEI5Pjs8VTMwNTk+O0lHTk9SRTs8VTMwQjk+Cis8VTMwQkE+CTxVMzBCOT47PFUzMEJBPjtJR05PUkU7PFUzMEI5PgorPFUzMDVBPgk8VTMwQjk+OzxVMzA1QT47SUdOT1JFOzxVMzBCOT4KKzxVMzBCQj4JPFUzMEJCPjs8VTMwQkI+O0lHTk9SRTs8VTMwQkI+Cis8VTMwNUI+CTxVMzBCQj47PFUzMDVCPjtJR05PUkU7PFUzMEJCPgorPFUzMEJDPgk8VTMwQkI+OzxVMzBCQz47SUdOT1JFOzxVMzBCQj4KKzxVMzA1Qz4JPFUzMEJCPjs8VTMwNUM+O0lHTk9SRTs8VTMwQkI+Cis8VTMwQkQ+CTxVMzBCRD47PFUzMEJEPjtJR05PUkU7PFUzMEJEPgorPFUzMDVEPgk8VTMwQkQ+OzxVMzA1RD47SUdOT1JFOzxVMzBCRD4KKzxVMzBCRT4JPFUzMEJEPjs8VTMwQkU+O0lHTk9SRTs8VTMwQkQ+Cis8VTMwNUU+CTxVMzBCRD47PFUzMDVFPjtJR05PUkU7PFUzMEJEPgorPFUzMEJGPgk8VTMwQkY+OzxVMzBCRj47SUdOT1JFOzxVMzBCRj4KKzxVMzA1Rj4JPFUzMEJGPjs8VTMwNUY+O0lHTk9SRTs8VTMwQkY+Cis8VTMwQzA+CTxVMzBCRj47PFUzMEMwPjtJR05PUkU7PFUzMEJGPgorPFUzMDYwPgk8VTMwQkY+OzxVMzA2MD47SUdOT1JFOzxVMzBCRj4KKzxVMzBDMT4JPFUzMEMxPjs8VTMwQzE+O0lHTk9SRTs8VTMwQzE+Cis8VTMwNjE+CTxVMzBDMT47PFUzMDYxPjtJR05PUkU7PFUzMEMxPgorPFUzMEMyPgk8VTMwQzE+OzxVMzBDMj47SUdOT1JFOzxVMzBDMT4KKzxVMzA2Mj4JPFUzMEMxPjs8VTMwNjI+O0lHTk9SRTs8VTMwQzE+Cis8VTMwQzM+CTxVMzBDMz47PFUzMEMzPjtJR05PUkU7PFUzMEMzPgorPFUzMDYzPgk8VTMwQzM+OzxVMzA2Mz47SUdOT1JFOzxVMzBDMz4KKzxVMzBDND4JPFUzMEMzPjs8VTMwQzQ+O0lHTk9SRTs8VTMwQzM+Cis8VTMwNjQ+CTxVMzBDMz47PFUzMDY0PjtJR05PUkU7PFUzMEMzPgorPFUzMEM1Pgk8VTMwQzM+OzxVMzBDNT47SUdOT1JFOzxVMzBDMz4KKzxVMzA2NT4JPFUzMEMzPjs8VTMwNjU+O0lHTk9SRTs8VTMwQzM+Cis8VTMwQzY+CTxVMzBDNj47PFUzMEM2PjtJR05PUkU7PFUzMEM2PgorPFUzMDY2Pgk8VTMwQzY+OzxVMzA2Nj47SUdOT1JFOzxVMzBDNj4KKzxVMzBDNz4JPFUzMEM2Pjs8VTMwQzc+O0lHTk9SRTs8VTMwQzY+Cis8VTMwNjc+CTxVMzBDNj47PFUzMDY3PjtJR05PUkU7PFUzMEM2PgorPFUzMEM4Pgk8VTMwQzg+OzxVMzBDOD47SUdOT1JFOzxVMzBDOD4KKzxVMzA2OD4JPFUzMEM4Pjs8VTMwNjg+O0lHTk9SRTs8VTMwQzg+Cis8VTMwQzk+CTxVMzBDOD47PFUzMEM5PjtJR05PUkU7PFUzMEM4PgorPFUzMDY5Pgk8VTMwQzg+OzxVMzA2OT47SUdOT1JFOzxVMzBDOD4KKzxVMzBDQT4JPFUzMENBPjs8VTMwQ0E+O0lHTk9SRTs8VTMwQ0E+Cis8VTMwNkE+CTxVMzBDQT47PFUzMDZBPjtJR05PUkU7PFUzMENBPgorPFUzMENCPgk8VTMwQ0I+OzxVMzBDQj47SUdOT1JFOzxVMzBDQj4KKzxVMzA2Qj4JPFUzMENCPjs8VTMwNkI+O0lHTk9SRTs8VTMwQ0I+Cis8VTMwQ0M+CTxVMzBDQz47PFUzMENDPjtJR05PUkU7PFUzMENDPgorPFUzMDZDPgk8VTMwQ0M+OzxVMzA2Qz47SUdOT1JFOzxVMzBDQz4KKzxVMzBDRD4JPFUzMENEPjs8VTMwQ0Q+O0lHTk9SRTs8VTMwQ0Q+Cis8VTMwNkQ+CTxVMzBDRD47PFUzMDZEPjtJR05PUkU7PFUzMENEPgorPFUzMENFPgk8VTMwQ0U+OzxVMzBDRT47SUdOT1JFOzxVMzBDRT4KKzxVMzA2RT4JPFUzMENFPjs8VTMwNkU+O0lHTk9SRTs8VTMwQ0U+Cis8VTMwQ0Y+CTxVMzBDRj47PFUzMENGPjtJR05PUkU7PFUzMENGPgorPFUzMDZGPgk8VTMwQ0Y+OzxVMzA2Rj47SUdOT1JFOzxVMzBDRj4KKzxVMzBEMD4JPFUzMENGPjs8VTMwRDA+O0lHTk9SRTs8VTMwQ0Y+Cis8VTMwNzA+CTxVMzBDRj47PFUzMDcwPjtJR05PUkU7PFUzMENGPgorPFUzMEQxPgk8VTMwQ0Y+OzxVMzBEMT47SUdOT1JFOzxVMzBDRj4KKzxVMzA3MT4JPFUzMENGPjs8VTMwNzE+O0lHTk9SRTs8VTMwQ0Y+Cis8VTMwRDI+CTxVMzBEMj47PFUzMEQyPjtJR05PUkU7PFUzMEQyPgorPFUzMDcyPgk8VTMwRDI+OzxVMzA3Mj47SUdOT1JFOzxVMzBEMj4KKzxVMzBEMz4JPFUzMEQyPjs8VTMwRDM+O0lHTk9SRTs8VTMwRDI+Cis8VTMwNzM+CTxVMzBEMj47PFUzMDczPjtJR05PUkU7PFUzMEQyPgorPFUzMEQ0Pgk8VTMwRDI+OzxVMzBEND47SUdOT1JFOzxVMzBEMj4KKzxVMzA3ND4JPFUzMEQyPjs8VTMwNzQ+O0lHTk9SRTs8VTMwRDI+Cis8VTMwRDU+CTxVMzBENT47PFUzMEQ1PjtJR05PUkU7PFUzMEQ1PgorPFUzMDc1Pgk8VTMwRDU+OzxVMzA3NT47SUdOT1JFOzxVMzBENT4KKzxVMzBENj4JPFUzMEQ1Pjs8VTMwRDY+O0lHTk9SRTs8VTMwRDU+Cis8VTMwNzY+CTxVMzBENT47PFUzMDc2PjtJR05PUkU7PFUzMEQ1PgorPFUzMEQ3Pgk8VTMwRDU+OzxVMzBENz47SUdOT1JFOzxVMzBENT4KKzxVMzA3Nz4JPFUzMEQ1Pjs8VTMwNzc+O0lHTk9SRTs8VTMwRDU+Cis8VTMwRDg+CTxVMzBEOD47PFUzMEQ4PjtJR05PUkU7PFUzMEQ4PgorPFUzMDc4Pgk8VTMwRDg+OzxVMzA3OD47SUdOT1JFOzxVMzBEOD4KKzxVMzBEOT4JPFUzMEQ4Pjs8VTMwRDk+O0lHTk9SRTs8VTMwRDg+Cis8VTMwNzk+CTxVMzBEOD47PFUzMDc5PjtJR05PUkU7PFUzMEQ4PgorPFUzMERBPgk8VTMwRDg+OzxVMzBEQT47SUdOT1JFOzxVMzBEOD4KKzxVMzA3QT4JPFUzMEQ4Pjs8VTMwN0E+O0lHTk9SRTs8VTMwRDg+Cis8VTMwREI+CTxVMzBEQj47PFUzMERCPjtJR05PUkU7PFUzMERCPgorPFUzMDdCPgk8VTMwREI+OzxVMzA3Qj47SUdOT1JFOzxVMzBEQj4KKzxVMzBEQz4JPFUzMERCPjs8VTMwREM+O0lHTk9SRTs8VTMwREI+Cis8VTMwN0M+CTxVMzBEQj47PFUzMDdDPjtJR05PUkU7PFUzMERCPgorPFUzMEREPgk8VTMwREI+OzxVMzBERD47SUdOT1JFOzxVMzBEQj4KKzxVMzA3RD4JPFUzMERCPjs8VTMwN0Q+O0lHTk9SRTs8VTMwREI+Cis8VTMwREU+CTxVMzBERT47PFUzMERFPjtJR05PUkU7PFUzMERFPgorPFUzMDdFPgk8VTMwREU+OzxVMzA3RT47SUdOT1JFOzxVMzBERT4KKzxVMzBERj4JPFUzMERGPjs8VTMwREY+O0lHTk9SRTs8VTMwREY+Cis8VTMwN0Y+CTxVMzBERj47PFUzMDdGPjtJR05PUkU7PFUzMERGPgorPFUzMEUwPgk8VTMwRTA+OzxVMzBFMD47SUdOT1JFOzxVMzBFMD4KKzxVMzA4MD4JPFUzMEUwPjs8VTMwODA+O0lHTk9SRTs8VTMwRTA+Cis8VTMwRTE+CTxVMzBFMT47PFUzMEUxPjtJR05PUkU7PFUzMEUxPgorPFUzMDgxPgk8VTMwRTE+OzxVMzA4MT47SUdOT1JFOzxVMzBFMT4KKzxVMzBFMj4JPFUzMEUyPjs8VTMwRTI+O0lHTk9SRTs8VTMwRTI+Cis8VTMwODI+CTxVMzBFMj47PFUzMDgyPjtJR05PUkU7PFUzMEUyPgorPFUzMEUzPgk8VTMwRTM+OzxVMzBFMz47SUdOT1JFOzxVMzBFMz4KKzxVMzA4Mz4JPFUzMEUzPjs8VTMwODM+O0lHTk9SRTs8VTMwRTM+Cis8VTMwRTQ+CTxVMzBFMz47PFUzMEU0PjtJR05PUkU7PFUzMEUzPgorPFUzMDg0Pgk8VTMwRTM+OzxVMzA4ND47SUdOT1JFOzxVMzBFMz4KKzxVMzBFNT4JPFUzMEU1Pjs8VTMwRTU+O0lHTk9SRTs8VTMwRTU+Cis8VTMwODU+CTxVMzBFNT47PFUzMDg1PjtJR05PUkU7PFUzMEU1PgorPFUzMEU2Pgk8VTMwRTU+OzxVMzBFNj47SUdOT1JFOzxVMzBFNT4KKzxVMzA4Nj4JPFUzMEU1Pjs8VTMwODY+O0lHTk9SRTs8VTMwRTU+Cis8VTMwRTc+CTxVMzBFNz47PFUzMEU3PjtJR05PUkU7PFUzMEU3PgorPFUzMDg3Pgk8VTMwRTc+OzxVMzA4Nz47SUdOT1JFOzxVMzBFNz4KKzxVMzBFOD4JPFUzMEU3Pjs8VTMwRTg+O0lHTk9SRTs8VTMwRTc+Cis8VTMwODg+CTxVMzBFNz47PFUzMDg4PjtJR05PUkU7PFUzMEU3PgorPFUzMEU5Pgk8VTMwRTk+OzxVMzBFOT47SUdOT1JFOzxVMzBFOT4KKzxVMzA4OT4JPFUzMEU5Pjs8VTMwODk+O0lHTk9SRTs8VTMwRTk+Cis8VTMwRUE+CTxVMzBFQT47PFUzMEVBPjtJR05PUkU7PFUzMEVBPgorPFUzMDhBPgk8VTMwRUE+OzxVMzA4QT47SUdOT1JFOzxVMzBFQT4KKzxVMzBFQj4JPFUzMEVCPjs8VTMwRUI+O0lHTk9SRTs8VTMwRUI+Cis8VTMwOEI+CTxVMzBFQj47PFUzMDhCPjtJR05PUkU7PFUzMEVCPgorPFUzMEVDPgk8VTMwRUM+OzxVMzBFQz47SUdOT1JFOzxVMzBFQz4KKzxVMzA4Qz4JPFUzMEVDPjs8VTMwOEM+O0lHTk9SRTs8VTMwRUM+Cis8VTMwRUQ+CTxVMzBFRD47PFUzMEVEPjtJR05PUkU7PFUzMEVEPgorPFUzMDhEPgk8VTMwRUQ+OzxVMzA4RD47SUdOT1JFOzxVMzBFRD4KKzxVMzBFRT4JPFUzMEVFPjs8VTMwRUU+O0lHTk9SRTs8VTMwRUU+Cis8VTMwOEU+CTxVMzBFRT47PFUzMDhFPjtJR05PUkU7PFUzMEVFPgorPFUzMEVGPgk8VTMwRUU+OzxVMzBFRj47SUdOT1JFOzxVMzBFRT4KKzxVMzA4Rj4JPFUzMEVFPjs8VTMwOEY+O0lHTk9SRTs8VTMwRUU+Cis8VTMwRjA+CTxVMzBGMD47PFUzMEYwPjtJR05PUkU7PFUzMEYwPgorPFUzMDkwPgk8VTMwRjA+OzxVMzA5MD47SUdOT1JFOzxVMzBGMD4KKzxVMzBGMT4JPFUzMEYxPjs8VTMwRjE+O0lHTk9SRTs8VTMwRjE+Cis8VTMwOTE+CTxVMzBGMT47PFUzMDkxPjtJR05PUkU7PFUzMEYxPgorPFUzMEYyPgk8VTMwRjI+OzxVMzBGMj47SUdOT1JFOzxVMzBGMj4KKzxVMzA5Mj4JPFUzMEYyPjs8VTMwOTI+O0lHTk9SRTs8VTMwRjI+Cis8VTMwRjM+CTxVMzBGMz47PFUzMEYzPjtJR05PUkU7PFUzMEYzPgorPFUzMDkzPgk8VTMwRjM+OzxVMzA5Mz47SUdOT1JFOzxVMzBGMz4KKworb3JkZXJfZW5kCisKK0VORCBMQ19DT0xMQVRFCisKKyUgRGVmaW5pY2UgdHlw+SB6bmFr+QorCitMQ19DVFlQRQorY29weSAiaTE4biIKKwordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKKyUlIExDX01FU1NBR0VTCislJSBla3ZpdmFsZW50eSB5ZXMvbm8KKyUlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTENfTUVTU0FHRVMKKworeWVzZXhwcgkJIjxVMDA1RT48VTAwNUI+PFUwMDYxPjxVMDA0MT48VTAwNzk+PFUwMDU5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgCSI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgoreWVzc3RyCQkiPFUwMDYxPjxVMDA2RT48VTAwNkY+Igorbm9zdHIJCSI8VTAwNkU+PFUwMDY1PiIKKworRU5EIExDX01FU1NBR0VTCisKKyUlIExDX01PTkVUQVJZIC0tIGpkZSBqZW4gbyBwZW7temUKKyUlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTENfTU9ORVRBUlkKKworaW50X2N1cnJfc3ltYm9sCQkiPFUwMDQzPjxVMDA1QT48VTAwNEI+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbAkJIjxVMDA0Qj48VTAxMEQ+IgorbW9uX2RlY2ltYWxfcG9pbnQJIjxVMDAyQz4iCittb25fdGhvdXNhbmRzX3NlcAkiPFUwMEEwPiIKK21vbl9ncm91cGluZyAgICAgIAkzOzMKK3Bvc2l0aXZlX3NpZ24JCSIiCituZWdhdGl2ZV9zaWduCQkiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cwkJMgorZnJhY19kaWdpdHMJCTIKK3BfY3NfcHJlY2VkZXMJCTAKK3Bfc2VwX2J5X3NwYWNlCQkxCituX2NzX3ByZWNlZGVzCQkwCituX3NlcF9ieV9zcGFjZQkJMQorcF9zaWduX3Bvc24JCTEKK25fc2lnbl9wb3NuCQkxCisKK0VORCBMQ19NT05FVEFSWQorCislJSBPIOjtc2xlY2gKKyUlIC0tLS0tLS0tLS0tLS0tCisKK0xDX05VTUVSSUMKKworZGVjaW1hbF9wb2ludAkJIjxVMDAyQz4iCit0aG91c2FuZHNfc2VwCQkiPFUwMEEwPiIKK2dyb3VwaW5nCQkzOzMKKworRU5EIExDX05VTUVSSUMKKworJSUgyGFzCisKK0xDX1RJTUUKKworYWJkYXkJCSI8VTAwNEU+PFUwMDY1PiI7LworCQkiPFUwMDUwPjxVMDA2Rj4iOy8KKwkJIjxVMDBEQT48VTAwNzQ+IjsvCisJCSI8VTAwNTM+PFUwMDc0PiI7LworCQkiPFUwMTBDPjxVMDA3ND4iOy8KKwkJIjxVMDA1MD48VTAwRTE+IjsvCisJCSI8VTAwNTM+PFUwMDZGPiIKKworZGF5CQkiPFUwMDRFPjxVMDA2NT48VTAwNjQ+PFUwMTFCPjxVMDA2Qz48VTAwNjU+IjsvCisJCSI8VTAwNTA+PFUwMDZGPjxVMDA2RT48VTAwNjQ+PFUwMTFCPjxVMDA2Qz48VTAwRUQ+IjsvCisJCSI8VTAwREE+PFUwMDc0PjxVMDA2NT48VTAwNzI+PFUwMEZEPiI7LworCQkiPFUwMDUzPjxVMDA3ND48VTAxNTk+PFUwMDY1PjxVMDA2ND48VTAwNjE+IjsvCisJCSI8VTAxMEM+PFUwMDc0PjxVMDA3Nj48VTAwNzI+PFUwMDc0PjxVMDA2NT48VTAwNkI+IjsvCisJCSI8VTAwNTA+PFUwMEUxPjxVMDA3ND48VTAwNjU+PFUwMDZCPiI7LworCQkiPFUwMDUzPjxVMDA2Rj48VTAwNjI+PFUwMDZGPjxVMDA3ND48VTAwNjE+IgorCittb24JCSI8VTAwNkM+PFUwMDY1PjxVMDA2ND48VTAwNjU+PFUwMDZFPiI7LworCQkiPFUwMEZBPjxVMDA2RT48VTAwNkY+PFUwMDcyPiI7LworCQkiPFUwMDYyPjxVMDE1OT48VTAwNjU+PFUwMDdBPjxVMDA2NT48VTAwNkU+IjsvCisJCSI8VTAwNjQ+PFUwMDc1PjxVMDA2Mj48VTAwNjU+PFUwMDZFPiI7LworCQkiPFUwMDZCPjxVMDA3Nj48VTAxMUI+PFUwMDc0PjxVMDA2NT48VTAwNkU+IjsvCisJCSI8VTAxMEQ+PFUwMDY1PjxVMDA3Mj48VTAwNzY+PFUwMDY1PjxVMDA2RT4iOy8KKwkJIjxVMDEwRD48VTAwNjU+PFUwMDcyPjxVMDA3Nj48VTAwNjU+PFUwMDZFPjxVMDA2NT48VTAwNjM+IjsvCisJCSI8VTAwNzM+PFUwMDcyPjxVMDA3MD48VTAwNjU+PFUwMDZFPiI7LworCQkiPFUwMDdBPjxVMDBFMT48VTAxNTk+PFUwMEVEPiI7LworCQkiPFUwMTU5PjxVMDBFRD48VTAwNkE+PFUwMDY1PjxVMDA2RT4iOy8KKwkJIjxVMDA2Qz48VTAwNjk+PFUwMDczPjxVMDA3ND48VTAwNkY+PFUwMDcwPjxVMDA2MT48VTAwNjQ+IjsvCisJCSI8VTAwNzA+PFUwMDcyPjxVMDA2Rj48VTAwNzM+PFUwMDY5PjxVMDA2RT48VTAwNjU+PFUwMDYzPiIKKworJSBPYuF24W0gc2UsIL5lIOhluXRpbmEgvuFkbukgemtyYXRreSBwcm8gbexz7WNlIG5lem7hIDotKQorJSBaa3JhdGt5IHZ5dHZv+GVu6SBwb2RsZSBwcmF2aWRlbCB6a3JhY2924W7tLCBkb2NlbGEgbmVvYnZ5a2zpCislYWJtb24JCSI8VTAwNkM+PFUwMDY1PjxVMDA2RT4iOy8KKyUJCSI8VTAwRkE+PFUwMDZGPjxVMDA3Mj4iOy8KKyUJCSI8VTAwNjI+PFUwMDY1PjxVMDA2RT4iOy8KKyUJCSI8VTAwNjQ+PFUwMDY1PjxVMDA2RT4iOy8KKyUJCSI8VTAwNkI+PFUwMDY1PjxVMDA2RT4iOy8KKyUJCSI8VTAxMEQ+PFUwMDY1PjxVMDA2RT4iOy8KKyUJCSI8VTAxMEQ+PFUwMDY1PjxVMDA2Mz4iOy8KKyUJCSI8VTAwNzM+PFUwMDY1PjxVMDA2RT4iOy8KKyUJCSI8VTAwN0E+PFUwMTU5PjxVMDBFRD4iOy8KKyUJCSI8VTAxNTk+PFUwMDY1PjxVMDA2RT4iOy8KKyUJCSI8VTAwNkM+PFUwMDYxPjxVMDA2ND4iOy8KKyUJCSI8VTAwNzA+PFUwMDY1PjxVMDA2Mz4iCisKKyUgQXNpIHRyb2NodSBzcm96dW1pdGVsbuxque0uIEFsZ29yaXRtdXMgamUgamVkbm9kdWNo/S4KKyUgdr5keSBwcnZu7SB0+GkgcO1zbWVuYSB6IG7henZ1IG3sc+1jZS4gVv1qaW1rYSDoZXJ2ZW4gYSDoZXJ2ZW5lYywga2R5CislIHNlIHZlem1vdSBwcnZu7SBkduwgcO1zbWVuYSBhIHBvc2xlZG7tIChuZWJvIHRha+kgcHJ2bu0gcO1zbWVubworJSBhIGR27CBrb25jb3bhKS4KK2FibW9uCQkiPFUwMDZDPjxVMDA2NT48VTAwNjQ+IjsvCisJCSI8VTAwRkE+PFUwMDZFPjxVMDA2Rj4iOy8KKwkJIjxVMDA2Mj48VTAxNTk+PFUwMDY1PiI7LworCQkiPFUwMDY0PjxVMDA3NT48VTAwNjI+IjsvCisJCSI8VTAwNkI+PFUwMDc2PjxVMDExQj4iOy8KKwkJIjxVMDEwRD48VTAwNjU+PFUwMDZFPiI7LworCQkiPFUwMTBEPjxVMDA2NT48VTAwNjM+IjsvCisJCSI8VTAwNzM+PFUwMDcyPjxVMDA3MD4iOy8KKwkJIjxVMDA3QT48VTAwRTE+PFUwMTU5PiI7LworCQkiPFUwMTU5PjxVMDBFRD48VTAwNkE+IjsvCisJCSI8VTAwNkM+PFUwMDY5PjxVMDA3Mz4iOy8KKwkJIjxVMDA3MD48VTAwNzI+PFUwMDZGPiIKKworJSBaZGUganNvdSB6a3JhdGt5IGRvcG9ydehlbukgcG9yYWRub3Ug2nN0YXZ1IHBybyBKYXp5ayDIZXNr/S4KKyUgQW5vLCB2aWTtdGUgc3By4XZu7CwganNvdSB0byBhbmdsaWNr6SB6a3JhdGt5LiBNeXNs7W0gc2ksIL5lIG5lanNvdQorJSBhviB0YWsgemG+aXTpLCBhYnkgc2UgcG91vu12YWx5LiBQb2t1ZCDobG927GsgbmV6buEgY2Vs6SBu4Xp2eSBt7HPtY/ksCislIHTsvmtvIHR5dG8gemtyYXRreSBvZHZvenVqZS4KKyVhYm1vbgkJIjxVMDA0QT48VTAwNjE+PFUwMDZFPiI7LworJQkJIjxVMDA0Nj48VTAwNjU+PFUwMDYyPiI7LworJQkJIjxVMDA0RD48VTAwNjE+PFUwMDcyPiI7LworJQkJIjxVMDA0MT48VTAwNzA+PFUwMDcyPiI7LworJQkJIjxVMDA0RD48VTAwNjE+PFUwMDc5PiI7LworJQkJIjxVMDA0QT48VTAwNzU+PFUwMDZFPiI7LworJQkJIjxVMDA0QT48VTAwNzU+PFUwMDZDPiI7LworJQkJIjxVMDA0MT48VTAwNzU+PFUwMDY3PiI7LworJQkJIjxVMDA1Mz48VTAwNjU+PFUwMDcwPiI7LworJQkJIjxVMDA0Rj48VTAwNjM+PFUwMDc0PiI7LworJQkJIjxVMDA0RT48VTAwNkY+PFUwMDc2PiI7LworJQkJIjxVMDA0ND48VTAwNjU+PFUwMDYzPiIKKword2VlawkJNzsxOTk3MTIwMTs0CitmaXJzdF93ZWVrZGF5CTEKK2ZpcnN0X3dvcmtkYXkJMQorCitkX3RfZm10CQkiPFUwMDI1PjxVMDA2MT48VTAwQTA+PFUwMDI1PjxVMDAyRD48VTAwNjQ+PFUwMDJFPjxVMDBBMD48VTAwMjU+PFUwMDQyPjxVMDBBMD48VTAwMjU+PFUwMDU5PjxVMDAyQz48VTAwQTA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwQTA+PFUwMDI1PjxVMDA1QT4iCisKK2RfZm10IAkJIjxVMDAyNT48VTAwMkQ+PFUwMDY0PjxVMDAyRT48VTAwMjU+PFUwMDJEPjxVMDA2RD48VTAwMkU+PFUwMDI1PjxVMDA1OT4iCisKK3RfZm10CQkiPFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4iCisKK3RfZm10X2FtcG0JIjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+IgorCithbV9wbSAgIAkiIjsiIgorCitkYXRlX2ZtdAkiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCisKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCitoZWlnaHQgICAyOTcKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK3RlbF9kb21fZm10ICAgICI8VTAwMjg+PFUwMDMwPjxVMDAyNT48VTAwNjE+PFUwMDI5PjxVMDAyMD48VTAwMjU+PFUwMDZDPiIKK2ludF9zZWxlY3QgICAgICI8VTAwMzA+PFUwMDMwPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzQ+PFUwMDMyPjxVMDAzMD4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorbmFtZV9taXNzICAgIjxVMDA1Mz48VTAwNkM+PFUwMDY1PjxVMDEwRD48VTAwNkU+PFUwMDYxPiIKK25hbWVfbXIgICAgICI8VTAwNTA+PFUwMDYxPjxVMDA2RT4iCituYW1lX21ycyAgICAiPFUwMDUwPjxVMDA2MT48VTAwNkU+PFUwMEVEPiIKK25hbWVfbXMgICAgICI8VTAwNTA+PFUwMDYxPjxVMDA2RT48VTAwRUQ+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfbmFtZSAgIjxVMDEwQz48VTAwNjU+PFUwMDczPjxVMDA2Qj48VTAwRTE+PFUwMDIwPjxVMDA3Mj48VTAwNjU+PFUwMDcwPjxVMDA3NT48VTAwNjI+PFUwMDZDPjxVMDA2OT48VTAwNkI+PFUwMDYxPiIKK2NvdW50cnlfcG9zdCAgIjxVMDA0Mz48VTAwNUE+IgorY291bnRyeV9hYjIgICAiPFUwMDQzPjxVMDA1QT4iCitjb3VudHJ5X2FiMyAgICI8VTAwNDM+PFUwMDVBPjxVMDA0NT4iCitjb3VudHJ5X251bSAgIDIwMworY291bnRyeV9jYXIgICAiPFUwMDQzPjxVMDA1QT4iCislY291bnRyeV9pc2JuICA/Pz8KK2xhbmdfbmFtZSAgICAgIjxVMDEwQz48VTAwNjU+PFUwMTYxPjxVMDA3ND48VTAwNjk+PFUwMDZFPjxVMDA2MT4iCitsYW5nX2FiICAgICAgICI8VTAwNjM+PFUwMDczPiIKK2xhbmdfdGVybSAgICAgIjxVMDA2Mz48VTAwNjU+PFUwMDczPiIKK2xhbmdfbGliICAgICAgIjxVMDA2Mz48VTAwN0E+PFUwMDY1PiIKK0VORCBMQ19BRERSRVNTCisKKyUlIEVORCBPRiBMT0NBTElaQVRJT04gRklMRSBmb3IgY3NfQ1ouSVNPLTg4NTktMgorJSUgS29uZWMgbG9rYWxpemHobu1obyBzb3Vib3J1IHBybyDoZXNr6SBwcm9zdPhlZO0KZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2NzYl9QTCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2NzYl9QTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjNmZDZjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvY3NiX1BMCkBAIC0wLDAgKzEsMjEwIEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgLworJQorJSBLYXNodWJpYW4gTGFuZ3VhZ2UgTG9jYWxlIGZvciBQb2xhbmQKKyUgU291cmNlOiBjc2JfUEwgbG9jYWxlCislIENvbnRhY3Q6IE1pY2hhbCBPc3Ryb3dza2kKKyUgRW1haWw6IG9zdHJvd3NraS5taWNoYWxAZ21haWwuY29tCislIFRlbDogKzQ4NTg2NzE3MjYyCislIEZheDogbm9uZQorJSBMYW5ndWFnZTogY3NiCislIFRlcnJpdG9yeTogUEwKKyUgUmV2aXNpb246IDEuMAorJSBEYXRlOiAyMDA2LTA3LTI1CislIEFwcGxpY2F0aW9uOiBnZW5lcmFsCislIFVzZXJzOiBnZW5lcmFsCislIENoYXJzZXQ6IFVURi04CislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJLYXNodWJpYW4gbG9jYWxlIGZvciBQb2xhbmQiCitzb3VyY2UgICAgICJjc2JfUEwgbG9jYWxlIgorYWRkcmVzcyAgICAiIgorY29udGFjdCAgICAiTWljaGFsIE9zdHJvd3NraSIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJLYXNodWJpYW4iCit0ZXJyaXRvcnkgICJQb2xhbmQiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDA2LTA3LTI1IgorYXVkaWVuY2UgICAiZ2VuZXJhbCIKK2FwcGxpY2F0aW9uICAgIkdOVSBsb2NhbGUiCithYmJyZXZpYXRpb24gICIiCislCitjYXRlZ29yeSAgImNzYl9QTDoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJjc2JfUEw6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiY3NiX1BMOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiY3NiX1BMOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiY3NiX1BMOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiY3NiX1BMOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImNzYl9QTDoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJjc2JfUEw6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiY3NiX1BMOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiY3NiX1BMOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiY3NiX1BMOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgInBsX1BMIgorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorCitjb2xsYXRpbmctc3ltYm9sIDxhb2dvbmVrPgorY29sbGF0aW5nLXN5bWJvbCA8YXRpbGRlPgorY29sbGF0aW5nLXN5bWJvbCA8ZWFjdXRlPgorY29sbGF0aW5nLXN5bWJvbCA8ZWRpYWVyZXNpcz4KK2NvbGxhdGluZy1zeW1ib2wgPGxzdHJva2U+Citjb2xsYXRpbmctc3ltYm9sIDxuYWN1dGU+Citjb2xsYXRpbmctc3ltYm9sIDxvZ3JhdmU+Citjb2xsYXRpbmctc3ltYm9sIDxvYWN1dGU+Citjb2xsYXRpbmctc3ltYm9sIDxvY2lyY3VtZmxleD4KK2NvbGxhdGluZy1zeW1ib2wgPHVncmF2ZT4KK2NvbGxhdGluZy1zeW1ib2wgPHpkb3Q+CisKK3Jlb3JkZXItYWZ0ZXIgPGE+Cis8YW9nb25laz4KKzxhdGlsZGU+CisKK3Jlb3JkZXItYWZ0ZXIgPGU+Cis8ZWFjdXRlPgorPGVkaWFlcmVzaXM+CisKK3Jlb3JkZXItYWZ0ZXIgPGw+Cis8bHN0cm9rZT4KKworcmVvcmRlci1hZnRlciA8bj4KKzxuYWN1dGU+CisKK3Jlb3JkZXItYWZ0ZXIgPG8+Cis8b2dyYXZlPgorPG9hY3V0ZT4KKzxvY2lyY3VtZmxleD4KKworcmVvcmRlci1hZnRlciA8dT4KKzx1Z3JhdmU+CisKK3Jlb3JkZXItYWZ0ZXIgPHo+Cis8emRvdD4KKworcmVvcmRlci1hZnRlciA8VTAwNjE+Cis8VTAxMDU+IDxhb2dvbmVrPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDEwND4gPGFvZ29uZWs+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwMEUzPiA8YXRpbGRlPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDBDMz4gPGF0aWxkZT47PEJBUz47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDY1PgorPFUwMEU5PiA8ZWFjdXRlPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDBDOT4gPGVhY3V0ZT47PEJBUz47PENBUD47SUdOT1JFCis8VTAwRUI+IDxlZGlhZXJlc2lzPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDBDQj4gPGVkaWFlcmVzaXM+OzxCQVM+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA2Qz4KKzxVMDE0Mj4gPGxzdHJva2U+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwMTQxPiA8bHN0cm9rZT47PEJBUz47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDZFPgorPFUwMTQ0PiA8bmFjdXRlPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDE0Mz4gPG5hY3V0ZT47PEJBUz47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDZGPgorPFUwMEYyPiA8b2dyYXZlPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDBEMj4gPG9ncmF2ZT47PEJBUz47PENBUD47SUdOT1JFCis8VTAwRjM+IDxvYWN1dGU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwMEQzPiA8b2FjdXRlPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDBGND4gPG9jaXJjdW1mbGV4Pjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDBEND4gPG9jaXJjdW1mbGV4Pjs8QkFTPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNzU+Cis8VTAwRjk+IDx1Z3JhdmU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwMEQ5PiA8dWdyYXZlPjs8QkFTPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwN0E+Cis8VTAxN0M+IDx6ZG90Pjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDE3Qj4gPHpkb3Q+OzxCQVM+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWVuZAorCitFTkQgTENfQ09MTEFURQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNEE+PFUwMDZBPjxVMDA1ND48VTAwNzQ+PFUwMDU5PjxVMDA3OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2NvcHkgInBsX1BMIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgInBsX1BMIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorYWJkYXkgICAiPFUwMDZFPjxVMDA2OT48VTAwNjU+IjsgIjxVMDA3MD48VTAwRjI+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDc3PjxVMDA3ND48VTAwRjM+IjsgIjxVMDA3Mz48VTAwNzQ+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDYzPjxVMDA3QT48VTAwNzc+IjsgIjxVMDA3MD48VTAwNjk+PFUwMTA1PiI7LworICAgICAgICAiPFUwMDczPjxVMDA2Rj48VTAwNjI+IgorCitkYXkgICAgIjxVMDA2RT48VTAwNjk+PFUwMDY1PjxVMDA2ND48VTAwN0E+PFUwMDY1PjxVMDA2Qz48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNzA+PFUwMEYyPjxVMDA2RT48VTAwNjk+PFUwMDY1PjxVMDA2ND48VTAwN0E+PFUwMEY0PjxVMDE0Mj48VTAwNkI+IjsvCisgICAgICAgICI8VTAwNzc+PFUwMDc0PjxVMDBGMz48VTAwNzI+PFUwMDZCPiI7LworICAgICAgICAiPFUwMDczPjxVMDA3ND48VTAwNzI+PFUwMDdBPjxVMDA2Rj48VTAwNjQ+PFUwMDYxPiI7LworICAgICAgICAiPFUwMDYzPjxVMDA3QT48VTAwNzc+PFUwMDY5PjxVMDBGND48VTAwNzI+PFUwMDc0PjxVMDA2Qj4iOy8KKyAgICAgICAgIjxVMDA3MD48VTAwNjk+PFUwMTA1PjxVMDA3ND48VTAwNkI+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDZGPjxVMDA2Mj48VTAwRjI+PFUwMDc0PjxVMDA2MT4iCithYm1vbiAgIjxVMDA3Mz48VTAwNzQ+PFUwMEVCPiI7ICI8VTAwNjc+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNzQ+PFUwMDZEPiI7ICI8VTAxNDI+PFUwMTdDPjxVMDBFQj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwRjQ+PFUwMDZBPiI7ICI8VTAwNjM+PFUwMDdBPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwRUI+PFUwMDcwPiI7ICI8VTAwN0E+PFUwMEU5PjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwRTk+PFUwMDc3PiI7ICI8VTAwNzI+PFUwMDc1PjxVMDA2QT4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwRUI+PFUwMDczPiI7ICI8VTAwNjc+PFUwMEYyPjxVMDA2ND4iCittb24gICAgIjxVMDA3Mz48VTAwNzQ+PFUwMEVCPjxVMDA2Mz48VTAwN0E+PFUwMDZFPjxVMDA2OT48VTAwNkI+IjsvCisgICAgICAgICI8VTAwNjc+PFUwMDcyPjxVMDA2Rj48VTAwNkQ+PFUwMDY5PjxVMDA2Mz48VTAwN0E+PFUwMDZFPjxVMDA2OT48VTAwNkI+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDc0PjxVMDA3Mj48VTAwNzU+PFUwMDZEPjxVMDA2OT48VTAwNjE+PFUwMDZFPjxVMDA2RT48VTAwNjk+PFUwMDZCPiI7LworICAgICAgICAiPFUwMTQyPjxVMDE3Qz48VTAwRUI+PFUwMDZCPjxVMDA3Nz48VTAwNjk+PFUwMEY0PjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwRjQ+PFUwMDZBPiI7LworICAgICAgICAiPFUwMDYzPjxVMDA3QT48VTAwNjU+PFUwMDcyPjxVMDA3Nz48VTAwNjk+PFUwMTQ0PjxVMDA2Mz4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwRUI+PFUwMDcwPjxVMDA2OT48VTAwNkU+PFUwMDYzPiI7LworICAgICAgICAiPFUwMDdBPjxVMDBFOT48VTAwNkM+PFUwMDZFPjxVMDA2OT48VTAwNkI+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMEU5PjxVMDA3Nz48VTAwNkU+PFUwMDY5PjxVMDA2Qj4iOy8KKyAgICAgICAgIjxVMDA3Mj48VTAwNzU+PFUwMDZBPjxVMDA2MT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkM+PFUwMEVCPjxVMDA3Mz48VTAwNzQ+PFUwMDZGPjxVMDA3MD48VTAwNjE+PFUwMDY0PjxVMDA2RT48VTAwNjk+PFUwMDZCPiI7LworICAgICAgICAiPFUwMDY3PjxVMDBGMj48VTAwNjQ+PFUwMDZFPjxVMDA2OT48VTAwNkI+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDU5PjxVMDAyRD48VTAwMjU+PFUwMDZEPjxVMDAyRD48VTAwMjU+PFUwMDY0PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAiIjsiIgordF9mbXRfYW1wbSAiIgorZGF0ZV9mbXQgICAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+Igord2VlayAgICA3OzE5OTcxMjAxOzQKK2ZpcnN0X3dlZWtkYXkgMgorZmlyc3Rfd29ya2RheSAyCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorY29weSAicGxfUEwiCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCitjb3B5ICJwbF9QTCIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgInBsX1BMIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK2NvcHkgInBsX1BMIgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworY29weSAicGxfUEwiCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvY3lfR0IgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9jeV9HQgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjE1YzNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvY3lfR0IKQEAgLTAsMCArMSwyNjUgQEAKK2VzY2FwZV9jaGFyICAvCitjb21tZW50X2NoYXIgICUKKyUgY2hhcnNldCAiSVNPLTg4NTktMTQiCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28gIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgIldlbHNoIGxhbmd1YWdlIGxvY2FsZSBmb3IgR3JlYXQgQnJpdGFpbiIKK3NvdXJjZSAidGhhbmtzIHRvIERhZnlkZCBUb21vcyAoZGFmeWRkQGltYWdpbmV0LmNvLnVrKSIKK2FkZHJlc3MgIiIKK2NvbnRhY3QgIlBhYmxvIFNhcmF0eGFnYSIKK2VtYWlsICJwYWJsb0BtYW5kcmFrZXNvZnQuY29tIgordGVsICIiCitmYXggIiIKK2xhbmd1YWdlICJXZWxzaCIKK3RlcnJpdG9yeSAiR3JlYXQgQnJpdGFpbiIKK3JldmlzaW9uICIwLjkiCitkYXRlICIyMDA0LTA5LTI3IgorCitjYXRlZ29yeSBjeV9HQjoyMDAwO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSBjeV9HQjoyMDAwO0xDX0NUWVBFCitjYXRlZ29yeSBjeV9HQjoyMDAwO0xDX0NPTExBVEUKK2NhdGVnb3J5IGN5X0dCOjIwMDA7TENfVElNRQorY2F0ZWdvcnkgY3lfR0I6MjAwMDtMQ19OVU1FUklDCitjYXRlZ29yeSBjeV9HQjoyMDAwO0xDX1BBUEVSCitjYXRlZ29yeSBjeV9HQjoyMDAwO0xDX1RFTEVQSE9ORQorY2F0ZWdvcnkgY3lfR0I6MjAwMDtMQ19NRUFTVVJFTUVOVAorY2F0ZWdvcnkgY3lfR0I6MjAwMDtMQ19BRERSRVNTCitjYXRlZ29yeSBjeV9HQjoyMDAwO0xDX01FU1NBR0VTCitjYXRlZ29yeSBjeV9HQjoyMDAwO0xDX01PTkVUQVJZCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA3Mz48VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDM1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNDM+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCislIGNvdW50cnkgbmFtZSBpcyAnV2FsZXMnIHJhdGhlciB0aGFuIFVuaXRlZCBLaW5nZG9tLiB2YWd1ZSBzcGVjLiA6LSkKK2NvdW50cnlfbmFtZSAiPFUwMDQzPjxVMDA3OT48VTAwNkQ+PFUwMDcyPjxVMDA3NT4iCislIEZJWE1FIGNvdW50cnlfcG9zdCBNQUlMX0NFUFRDT0RFIGZvciBjb3VudHJ5LiAnR0InID8KK2NvdW50cnlfYWIyICI8VTAwNDc+PFUwMDQyPiIKK2NvdW50cnlfYWIzICI8VTAwNDc+PFUwMDQyPjxVMDA1Mj4iCitjb3VudHJ5X251bSA4MjYKK2NvdW50cnlfaXNibiAwCitjb3VudHJ5X2NhciAiPFUwMDQ3PjxVMDA0Mj4iCitsYW5nX25hbWUgIjxVMDA0Mz48VTAwNzk+PFUwMDZEPjxVMDA3Mj48VTAwNjE+PFUwMDY1PjxVMDA2Nz4iCitsYW5nX2FiICI8VTAwNjM+PFUwMDc5PiIKK2xhbmdfdGVybSAiPFUwMDYzPjxVMDA3OT48VTAwNkQ+IgorbGFuZ19saWIgIjxVMDA3Nz48VTAwNjU+PFUwMDZDPiIKK0VORCBMQ19BRERSRVNTCisKK0xDX1BBUEVSCitjb3B5ICJlbl9HQiIKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK2NvcHkgImVuX0dCIgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorY29weSAiZW5fR0IiCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCisKKyUgV2Vsc2ggc29ydGluZyBvcmRlciBpczoKKyUgICBhIGIgYyBjaCBkIGRkIGUgZiBmZiBnIG5nIGggaSBsIGxsIG0gbiBvIHAgcGggciByaCBzIHQgdGggdSB3IHkKKworY29sbGF0aW5nLXN5bWJvbCAgPGMtaC1jeT4KK2NvbGxhdGluZy1lbGVtZW50IDxDLUg+IGZyb20gIjxVMDA0Mz48VTAwNDg+IgorY29sbGF0aW5nLWVsZW1lbnQgPGMtaD4gZnJvbSAiPFUwMDYzPjxVMDA2OD4iCitjb2xsYXRpbmctZWxlbWVudCA8Qy1oPiBmcm9tICI8VTAwNDM+PFUwMDY4PiIKK2NvbGxhdGluZy1lbGVtZW50IDxjLUg+IGZyb20gIjxVMDA2Mz48VTAwNDg+IgorCitjb2xsYXRpbmctc3ltYm9sICA8ZC1kLWN5PgorY29sbGF0aW5nLWVsZW1lbnQgPEQtRD4gZnJvbSAiPFUwMDQ0PjxVMDA0ND4iCitjb2xsYXRpbmctZWxlbWVudCA8ZC1kPiBmcm9tICI8VTAwNjQ+PFUwMDY0PiIKK2NvbGxhdGluZy1lbGVtZW50IDxELWQ+IGZyb20gIjxVMDA0ND48VTAwNjQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPGQtRD4gZnJvbSAiPFUwMDY0PjxVMDA0ND4iCisKK2NvbGxhdGluZy1zeW1ib2wgIDxmLWYtY3k+Citjb2xsYXRpbmctZWxlbWVudCA8Ri1GPiBmcm9tICI8VTAwNDY+PFUwMDQ2PiIKK2NvbGxhdGluZy1lbGVtZW50IDxmLWY+IGZyb20gIjxVMDA2Nj48VTAwNjY+IgorY29sbGF0aW5nLWVsZW1lbnQgPEYtZj4gZnJvbSAiPFUwMDQ2PjxVMDA2Nj4iCitjb2xsYXRpbmctZWxlbWVudCA8Zi1GPiBmcm9tICI8VTAwNjY+PFUwMDQ2PiIKKworY29sbGF0aW5nLXN5bWJvbCAgPG4tZy1jeT4KK2NvbGxhdGluZy1lbGVtZW50IDxOLUc+IGZyb20gIjxVMDA0RT48VTAwNDc+IgorY29sbGF0aW5nLWVsZW1lbnQgPG4tZz4gZnJvbSAiPFUwMDZFPjxVMDA2Nz4iCitjb2xsYXRpbmctZWxlbWVudCA8Ti1nPiBmcm9tICI8VTAwNEU+PFUwMDY3PiIKK2NvbGxhdGluZy1lbGVtZW50IDxuLUc+IGZyb20gIjxVMDA2RT48VTAwNDc+IgorCitjb2xsYXRpbmctc3ltYm9sICA8bC1sLWN5PgorY29sbGF0aW5nLWVsZW1lbnQgPEwtTD4gZnJvbSAiPFUwMDRDPjxVMDA0Qz4iCitjb2xsYXRpbmctZWxlbWVudCA8bC1sPiBmcm9tICI8VTAwNkM+PFUwMDZDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxMLWw+IGZyb20gIjxVMDA0Qz48VTAwNkM+IgorY29sbGF0aW5nLWVsZW1lbnQgPGwtTD4gZnJvbSAiPFUwMDZDPjxVMDA0Qz4iCisKK2NvbGxhdGluZy1zeW1ib2wgIDxwLWgtY3k+Citjb2xsYXRpbmctZWxlbWVudCA8UC1IPiBmcm9tICI8VTAwNTA+PFUwMDQ4PiIKK2NvbGxhdGluZy1lbGVtZW50IDxwLWg+IGZyb20gIjxVMDA3MD48VTAwNjg+IgorY29sbGF0aW5nLWVsZW1lbnQgPFAtaD4gZnJvbSAiPFUwMDUwPjxVMDA2OD4iCitjb2xsYXRpbmctZWxlbWVudCA8cC1IPiBmcm9tICI8VTAwNzA+PFUwMDQ4PiIKKworY29sbGF0aW5nLXN5bWJvbCAgPHItaC1jeT4KK2NvbGxhdGluZy1lbGVtZW50IDxSLUg+IGZyb20gIjxVMDA1Mj48VTAwNDg+IgorY29sbGF0aW5nLWVsZW1lbnQgPHItaD4gZnJvbSAiPFUwMDcyPjxVMDA2OD4iCitjb2xsYXRpbmctZWxlbWVudCA8Ui1oPiBmcm9tICI8VTAwNTI+PFUwMDY4PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyLUg+IGZyb20gIjxVMDA3Mj48VTAwNDg+IgorCitjb2xsYXRpbmctc3ltYm9sICA8dC1oLWN5PgorY29sbGF0aW5nLWVsZW1lbnQgPFQtSD4gZnJvbSAiPFUwMDU0PjxVMDA0OD4iCitjb2xsYXRpbmctZWxlbWVudCA8dC1oPiBmcm9tICI8VTAwNzQ+PFUwMDY4PiIKK2NvbGxhdGluZy1lbGVtZW50IDxULWg+IGZyb20gIjxVMDA1ND48VTAwNjg+IgorY29sbGF0aW5nLWVsZW1lbnQgPHQtSD4gZnJvbSAiPFUwMDc0PjxVMDA0OD4iCisKK2NvbGxhdGluZy1zeW1ib2wgPENBUC1NSU4+Citjb2xsYXRpbmctc3ltYm9sIDxNSU4tQ0FQPgorCityZW9yZGVyLWFmdGVyIDxNSU4+Cis8TUlOLUNBUD4KK3Jlb3JkZXItYWZ0ZXIgPENBUD4KKzxDQVAtTUlOPgorCityZW9yZGVyLWFmdGVyIDxjPgorPGMtaC1jeT4KKzxkPgorPGQtZC1jeT4KK3Jlb3JkZXItYWZ0ZXIgPGY+Cis8Zi1mLWN5PgorPGc+Cis8bi1nLWN5PgorcmVvcmRlci1hZnRlciA8bD4KKzxsLWwtY3k+CityZW9yZGVyLWFmdGVyIDxwPgorPHAtaC1jeT4KK3Jlb3JkZXItYWZ0ZXIgPHI+Cis8ci1oLWN5PgorcmVvcmRlci1hZnRlciA8dD4KKzx0LWgtY3k+CisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDYzPgorPGMtaD4JPGMtaC1jeT47PFBDVD47PE1JTj47SUdOT1JFCis8Yy1IPgk8Yy1oLWN5Pjs8UENUPjs8TUlOLUNBUD47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0Mz4KKzxDLUg+CTxjLWgtY3k+OzxQQ1Q+OzxDQVA+O0lHTk9SRQorPEMtaD4JPGMtaC1jeT47PFBDVD47PENBUC1NSU4+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA2ND4KKzxkLWQ+CTxkLWQtY3k+OzxQQ1Q+OzxNSU4+O0lHTk9SRQorPGQtRD4JPGQtZC1jeT47PFBDVD47PE1JTi1DQVA+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNDQ+Cis8RC1EPgk8ZC1kLWN5Pjs8UENUPjs8Q0FQPjtJR05PUkUKKzxELWQ+CTxkLWQtY3k+OzxQQ1Q+OzxDQVAtTUlOPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNjY+Cis8Zi1mPgk8Zi1mLWN5Pjs8UENUPjs8TUlOPjtJR05PUkUKKzxmLUY+CTxmLWYtY3k+OzxQQ1Q+OzxNSU4tQ0FQPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDQ2PgorPEYtRj4JPGYtZi1jeT47PFBDVD47PENBUD47SUdOT1JFCis8Ri1mPgk8Zi1mLWN5Pjs8UENUPjs8Q0FQLU1JTj47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDY3PgorPG4tZz4JPG4tZy1jeT47PFBDVD47PE1JTj47SUdOT1JFCis8bi1HPgk8bi1nLWN5Pjs8UENUPjs8TUlOLUNBUD47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0Nz4KKzxOLUc+CTxuLWctY3k+OzxQQ1Q+OzxDQVA+O0lHTk9SRQorPE4tZz4JPG4tZy1jeT47PFBDVD47PENBUC1NSU4+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA2Qz4KKzxsLWw+CTxsLWwtY3k+OzxQQ1Q+OzxNSU4+O0lHTk9SRQorPGwtTD4JPGwtbC1jeT47PFBDVD47PE1JTi1DQVA+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNEM+Cis8TC1MPgk8bC1sLWN5Pjs8UENUPjs8Q0FQPjtJR05PUkUKKzxMLWw+CTxsLWwtY3k+OzxQQ1Q+OzxDQVAtTUlOPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNzA+Cis8cC1oPgk8cC1oLWN5Pjs8UENUPjs8TUlOPjtJR05PUkUKKzxwLUg+CTxwLWgtY3k+OzxQQ1Q+OzxNSU4tQ0FQPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDUwPgorPFAtSD4JPHAtaC1jeT47PFBDVD47PENBUD47SUdOT1JFCis8UC1oPgk8cC1oLWN5Pjs8UENUPjs8Q0FQLU1JTj47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDcyPgorPHItaD4JPHItaC1jeT47PFBDVD47PE1JTj47SUdOT1JFCis8ci1IPgk8ci1oLWN5Pjs8UENUPjs8TUlOLUNBUD47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA1Mj4KKzxSLUg+CTxyLWgtY3k+OzxQQ1Q+OzxDQVA+O0lHTk9SRQorPFItaD4JPHItaC1jeT47PFBDVD47PENBUC1NSU4+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA3ND4KKzx0LWg+CTx0LWgtY3k+OzxQQ1Q+OzxNSU4+O0lHTk9SRQorPHQtSD4JPHQtaC1jeT47PFBDVD47PE1JTi1DQVA+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNTQ+Cis8VC1IPgk8dC1oLWN5Pjs8UENUPjs8Q0FQPjtJR05PUkUKKzxULWg+CTx0LWgtY3k+OzxQQ1Q+OzxDQVAtTUlOPjtJR05PUkUKKworcmVvcmRlci1lbmQKKworRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKK2NvcHkgImVuX0dCIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgImVuX0dCIgorRU5EIExDX05VTUVSSUMKKworCitMQ19USU1FCithYmRheSAgICAgICAiPFUwMDUzPjxVMDA3NT48VTAwNkM+IjsiPFUwMDRDPjxVMDA2Qz48VTAwNzU+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzc+IjsiPFUwMDREPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDQ5PjxVMDA2MT48VTAwNzU+IjsiPFUwMDQ3PjxVMDA3Nz48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNjQ+IgorZGF5ICAgICAgICAgIjxVMDA1Mz48VTAwNzU+PFUwMDZDPiI7LworICAgICAgICAgICAgIjxVMDA0Qz48VTAwNkM+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Nz48VTAwNzI+PFUwMDc0PjxVMDA2OD4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDY1PjxVMDA3Mj48VTAwNjM+PFUwMDY4PjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDQ5PjxVMDA2MT48VTAwNzU+IjsvCisgICAgICAgICAgICAiPFUwMDQ3PjxVMDA3Nz48VTAwNjU+PFUwMDZFPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNjQ+PFUwMDc3PjxVMDA3Mj48VTAwNkU+IgorYWJtb24gICAgICAgIjxVMDA0OT48VTAwNkY+PFUwMDZFPiI7IjxVMDA0Mz48VTAwNjg+PFUwMDc3PiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDc3PiI7IjxVMDA0NT48VTAwNjI+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDY5PiI7IjxVMDA0RD48VTAwNjU+PFUwMDY4PiI7LworICAgICAgICAgICAgIjxVMDA0Nz48VTAwNkY+PFUwMDcyPiI7IjxVMDA0MT48VTAwNzc+PFUwMDczPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjU+PFUwMDY0PiI7IjxVMDA0OD48VTAwNzk+PFUwMDY0PiI7LworICAgICAgICAgICAgIjxVMDA1ND48VTAwNjE+PFUwMDYzPjxVMDA2OD4iOyI8VTAwNTI+PFUwMDY4PjxVMDA2MT4iCittb24gICAgICAgICAiPFUwMDQ5PjxVMDA2Rj48VTAwNkU+PFUwMDYxPjxVMDA3Nz48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDQzPjxVMDA2OD48VTAwNzc+PFUwMDY1PjxVMDA2Nj48VTAwNzI+PFUwMDZGPjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Nz48VTAwNzI+PFUwMDc0PjxVMDA2OD4iOy8KKyAgICAgICAgICAgICI8VTAwNDU+PFUwMDYyPjxVMDA3Mj48VTAwNjk+PFUwMDZDPjxVMDA2Qz4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDY1PjxVMDA2OD48VTAwNjU+PFUwMDY2PjxVMDA2OT48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDQ3PjxVMDA2Rj48VTAwNzI+PFUwMDY2PjxVMDA2Nj48VTAwNjU+PFUwMDZFPjxVMDA2RT48VTAwNjE+PFUwMDY2PiI7LworICAgICAgICAgICAgIjxVMDA0MT48VTAwNzc+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDY1PjxVMDA2ND48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDQ4PjxVMDA3OT48VTAwNjQ+PFUwMDcyPjxVMDA2NT48VTAwNjY+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA2MT48VTAwNjM+PFUwMDY4PjxVMDA3Nz48VTAwNjU+PFUwMDY0PjxVMDA2ND4iOy8KKyAgICAgICAgICAgICI8VTAwNTI+PFUwMDY4PjxVMDA2MT48VTAwNjc+PFUwMDY2PjxVMDA3OT48VTAwNzI+IgorZF90X2ZtdCAgICAgIjxVMDA0ND48VTAwNzk+PFUwMDY0PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA0MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDZkPjxVMDA2OT48VTAwNzM+PFUwMDIwPjxVMDAyNT48VTAwNDI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJFPjxVMDAyNT48VTAwNkQ+PFUwMDJFPjxVMDAyNT48VTAwNzk+IgordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAgICAgIiI7IiIKK3RfZm10X2FtcG0gICIiCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDY5PjxVMDA0OT48VTAwNzQ+PFUwMDU0PjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCit5ZXNzdHIgICAgICAiPFUwMDY5PjxVMDA2NT4iCitub3N0ciAgICAgICAiPFUwMDZFPjxVMDA2MT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfTkFNRQorJSBGSVhNRQorY29weSAiZW5fR0IiCitFTkQgTENfTkFNRQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZGFfREsgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9kYV9ESwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzhhNDFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZGFfREsKQEAgLTAsMCArMSwyNTUgQEAKK2VzY2FwZV9jaGFyIC8KK2NvbW1lbnRfY2hhciAlCisKKyUgRGFuaXNoIGxhbmd1YWdlIGxvY2FsZSBmb3IgRGVubWFyaworJSBTb3VyY2U6IERhbmlzaCBTdGFuZGFyZHMgQXNzb2NpYXRpb24KKyUgQWRkcmVzczogS29sbGVnaWV2ZWogNgorJSAgIERLLTI5MjAgQ2hhcmxvdHRlbmx1bmQsIERhbm1hcmsKKyUgQ29udGFjdDogS2VsZCBTaW1vbnNlbgorJSBFbWFpbDogS2VsZC5TaW1vbnNlbkBka3V1Zy5kaworJSBUZWw6ICs0NSAtIDM5OTY2MTAxCislIEZheDogKzQ1IC0gMzk5NjYxMDIKKyUgTGFuZ3VhZ2U6IGRhCislIFRlcnJpdG9yeTogREsKKyUgUmV2aXNpb246IDQuMworJSBEYXRlOiAxOTk2LTEwLTE1CislIEFwcGxpY2F0aW9uOiBnZW5lcmFsCislIFVzZXJzOiBnZW5lcmFsCislIFJlcGVydG9pcmVtYXA6IG1uZW1vbmljLmRzCislIENoYXJzZXQ6IElTTy04ODU5LTEKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworJSBUaGUgb3JkZXJpbmcgYWxnb3JpdGhtIGlzIGluIGFjY29yZGFuY2UKKyUgd2l0aCBEYW5pc2ggU3RhbmRhcmQgRFMgMzc3ICgxOTgwKQorJSBhbmQgdGhlIERhbmlzaCBPcnRob2dyYXBoeSBEaWN0aW9uYXJ5CislIChSZXRza3Jpdm5pbmdzb3JkYm9nZW4sIDE5ODYpLgorJSBJdCBpcyBhbHNvIGluIGFjY29yZGFuY2Ugd2l0aAorJSBHcmVlbmxhbmRpYyBvcnRob2dyYXBoeS4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkRhbmlzaCBsb2NhbGUgZm9yIERlbm1hcmsiCitzb3VyY2UgICAgICJEYW5pc2ggU3RhbmRhcmRzIEFzc29jaWF0aW9uIgorYWRkcmVzcyAgICAiS29sbGVnaWV2ZWogNiwgREstMjkyMCBDaGFybG90dGVubHVuZCwgRGFubWFyayIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJEYW5pc2giCit0ZXJyaXRvcnkgICJEZW5tYXJrIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAiZGFfREs6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZGFfREs6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZGFfREs6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJkYV9ESzoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImRhX0RLOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZGFfREs6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZGFfREs6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZGFfREs6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZGFfREs6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJkYV9ESzoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImRhX0RLOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCisKK2NvbGxhdGluZy1lbGVtZW50IDxBLUE+IGZyb20gIjxVMDA0MT48VTAwNDE+IgorY29sbGF0aW5nLWVsZW1lbnQgPEEtYT4gZnJvbSAiPFUwMDQxPjxVMDA2MT4iCitjb2xsYXRpbmctZWxlbWVudCA8YS1BPiBmcm9tICI8VTAwNjE+PFUwMDQxPiIKK2NvbGxhdGluZy1lbGVtZW50IDxhLWE+IGZyb20gIjxVMDA2MT48VTAwNjE+IgorY29sbGF0aW5nLXN5bWJvbCA8Q0FQLU1JTj4KK2NvbGxhdGluZy1zeW1ib2wgPE1JTi1DQVA+Citjb2xsYXRpbmctc3ltYm9sIDxhZT4KK2NvbGxhdGluZy1zeW1ib2wgPG8tc3Ryb2tlPgorY29sbGF0aW5nLXN5bWJvbCA8YS1yaW5nPgorY29sbGF0aW5nLXN5bWJvbCA8RVRIPgorCityZW9yZGVyLWFmdGVyIDxSRVMtMT4KKzxDQVA+Cis8Q0FQLU1JTj4KKzxNSU4tQ0FQPgorCityZW9yZGVyLWFmdGVyIDx6PgorPGFlPgorPG8tc3Ryb2tlPgorPGEtcmluZz4KKworJSA8VTAwREM+IGFuZCA8VTAxNzA+IGFyZSB0cmVhdGVkIGFzIDxVMDA1OT4gaW4gRGFuaXNoCityZW9yZGVyLWFmdGVyIDxVMDE3OD4KKzxVMDBEQz4gPHk+OzxVMDBEQz47PENBUD47SUdOT1JFCis8VTAwRkM+IDx5Pjs8VTAwREM+OzxNSU4+O0lHTk9SRQorPFUwMTcwPiA8eT47PFUwMTcwPjs8Q0FQPjtJR05PUkUKKzxVMDE3MT4gPHk+OzxVMDE3MD47PE1JTj47SUdOT1JFCisKKyUgPFUwMEM2PiBpcyBhIHNlcGFyYXRlIGxldHRlciBpbiBEYW5pc2gKK3Jlb3JkZXItYWZ0ZXIgPFUwMTdCPgorPFUwMEM2PiA8YWU+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwMEU2PiA8YWU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwMUZDPiA8YWU+OzxBQ0E+OzxDQVA+O0lHTk9SRQorPFUwMUZEPiA8YWU+OzxBQ0E+OzxNSU4+O0lHTk9SRQorPFUwMEM0PiA8YWU+OzxSRVU+OzxDQVA+O0lHTk9SRQorPFUwMEU0PiA8YWU+OzxSRVU+OzxNSU4+O0lHTk9SRQorPFUwMUUyPiA8YWU+OzxNQUM+OzxDQVA+O0lHTk9SRQorPFUwMUUzPiA8YWU+OzxNQUM+OzxNSU4+O0lHTk9SRQorJSA8VTAwRDg+IGlzIGEgc2VwYXJhdGUgbGV0dGVyIGluIERhbmlzaAorPFUwMEQ4PiA8by1zdHJva2U+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwMEY4PiA8by1zdHJva2U+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwMUZFPiA8by1zdHJva2U+OzxBQ0E+OzxDQVA+O0lHTk9SRQorPFUwMUZGPiA8by1zdHJva2U+OzxBQ0E+OzxNSU4+O0lHTk9SRQorPFUwMEQ2PiA8by1zdHJva2U+OzxSRVU+OzxDQVA+O0lHTk9SRQorPFUwMEY2PiA8by1zdHJva2U+OzxSRVU+OzxNSU4+O0lHTk9SRQorPFUwMTUwPiA8by1zdHJva2U+OzxEQUM+OzxDQVA+O0lHTk9SRQorPFUwMTUxPiA8by1zdHJva2U+OzxEQUM+OzxNSU4+O0lHTk9SRQorJSA8VTAwQzU+IGlzIGEgc2VwYXJhdGUgbGV0dGVyIGluIERhbmlzaAorPFUwMEM1PiA8YS1yaW5nPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDBFNT4gPGEtcmluZz47PEJBUz47PE1JTj47SUdOT1JFCis8QS1BPiAgIDxhLXJpbmc+OzxBLUE+OzxDQVA+O0lHTk9SRQorPEEtYT4gICA8YS1yaW5nPjs8QS1BPjs8Q0FQLU1JTj47SUdOT1JFCis8YS1BPiAgIDxhLXJpbmc+OzxBLUE+OzxNSU4tQ0FQPjtJR05PUkUKKzxhLWE+ICAgPGEtcmluZz47PEEtQT47PE1JTj47SUdOT1JFCisKKyUgIFByZXNlbnQgaW4gaXNvMTQ2NTFfdDEsIGJ1dCB0aGVzZSBkZWZpbml0aW9ucyBzZWVtIHRvIGhhdmUgYmVlbgorJSAgcmVtb3ZlZCBmcm9tIGxhdGVzdCBpc28xNDY1MSB0YWJsZXMuCityZW9yZGVyLWFmdGVyIDxVMDE2Mj4KKzxVMDBERT4gIjx0PjxoPiI7IjxMSUc+PExJRz4iOyI8Q0FQPjxDQVA+IjtJR05PUkUKKzxVMDBGRT4gIjx0PjxoPiI7IjxMSUc+PExJRz4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8T0JMPgorPEVUSD4KKworcmVvcmRlci1hZnRlciA8VTAwNjQ+Cis8VTAxMTA+IDxkPjs8T0JMPjs8Q0FQPjtJR05PUkUKKzxVMDExMT4gPGQ+OzxPQkw+OzxNSU4+O0lHTk9SRQorPFUwMEQwPiA8ZD47PEVUSD47PENBUD47SUdOT1JFCis8VTAwRjA+IDxkPjs8RVRIPjs8TUlOPjtJR05PUkUKKworcmVvcmRlci1lbmQKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAorCitpbmNsdWRlICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCisKKyUgRGFuaXNoLgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRS4KKzxVMDBDNT4gIjxVMDA0MT48VTAzMEE+IjsiPFUwMDQxPjxVMDA0MT4iCislIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRS4KKzxVMDBFNT4gIjxVMDA2MT48VTAzMEE+IjsiPFUwMDYxPjxVMDA2MT4iCisKK3RyYW5zbGl0X2VuZAorCitFTkQgTENfQ1RZUEUKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgICAgICI8VTAwNDQ+PFUwMDRCPjxVMDA0Qj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICAgIjxVMDA2Qj48VTAwNzI+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICAgIjxVMDAyQz4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgICAiPFUwMDJFPiIKK21vbl9ncm91cGluZyAgICAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgICAgMgorbl9jc19wcmVjZWRlcyAgICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgICAgMgorcF9zaWduX3Bvc24gICAgICAgICAgICAgNAorbl9zaWduX3Bvc24gICAgICAgICAgICAgNAorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgICI8VTAwMkM+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAgIjxVMDAyRT4iCitncm91cGluZyAgICAgICAgICAgICAgICAzOzMKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgICAgICI8VTAwNzM+PFUwMEY4PjxVMDA2RT4iOyI8VTAwNkQ+PFUwMDYxPjxVMDA2RT4iOy8KKyAgICAgICAgICAgICI8VTAwNzQ+PFUwMDY5PjxVMDA3Mj4iOyI8VTAwNkY+PFUwMDZFPjxVMDA3Mz4iOy8KKyAgICAgICAgICAgICI8VTAwNzQ+PFUwMDZGPjxVMDA3Mj4iOyI8VTAwNjY+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgICAgICI8VTAwNkM+PFUwMEY4PjxVMDA3Mj4iCitkYXkgICAgICAgICAiPFUwMDczPjxVMDBGOD48VTAwNkU+PFUwMDY0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNkU+PFUwMDY0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICAgICAiPFUwMDc0PjxVMDA2OT48VTAwNzI+PFUwMDczPjxVMDA2ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAgICAgIjxVMDA2Rj48VTAwNkU+PFUwMDczPjxVMDA2ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAgICAgIjxVMDA3ND48VTAwNkY+PFUwMDcyPjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA2Nz4iOy8KKyAgICAgICAgICAgICI8VTAwNjY+PFUwMDcyPjxVMDA2NT48VTAwNjQ+PFUwMDYxPjxVMDA2Nz4iOy8KKyAgICAgICAgICAgICI8VTAwNkM+PFUwMEY4PjxVMDA3Mj48VTAwNjQ+PFUwMDYxPjxVMDA2Nz4iCithYm1vbiAgICAgICAiPFUwMDZBPjxVMDA2MT48VTAwNkU+IjsiPFUwMDY2PjxVMDA2NT48VTAwNjI+IjsvCisgICAgICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsiPFUwMDYxPjxVMDA3MD48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNkE+IjsiPFUwMDZBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkM+IjsiPFUwMDYxPjxVMDA3NT48VTAwNjc+IjsvCisgICAgICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNzA+IjsiPFUwMDZGPjxVMDA2Qj48VTAwNzQ+IjsvCisgICAgICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDY0PjxVMDA2NT48VTAwNjM+IgorbW9uICAgICAgICAgIjxVMDA2QT48VTAwNjE+PFUwMDZFPjxVMDA3NT48VTAwNjE+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA2Nj48VTAwNjU+PFUwMDYyPjxVMDA3Mj48VTAwNzU+PFUwMDYxPjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNzQ+PFUwMDczPiI7LworICAgICAgICAgICAgIjxVMDA2MT48VTAwNzA+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNkE+IjsvCisgICAgICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkU+PFUwMDY5PiI7LworICAgICAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNjE+PFUwMDc1PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNkY+PFUwMDZCPjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNjQ+PFUwMDY1PjxVMDA2Mz48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiIKK2RfdF9mbXQgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRD48VTAwMjU+PFUwMDZEPjxVMDAyRD48VTAwMjU+PFUwMDU5PiIKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgICAgICIiOyIiCit0X2ZtdF9hbXBtICAiIgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+Igord2VlayAgICA3OzE5OTcxMjAxOzQKK2ZpcnN0X3dlZWtkYXkgMQorZmlyc3Rfd29ya2RheSAxCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDMxPjxVMDA0QT48VTAwNkE+PFUwMDU5PjxVMDA3OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwMzA+PFUwMDRFPjxVMDA2RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfUEFQRVIKKyUgRklYTUUKK2hlaWdodCAgIDI5NworJSBGSVhNRQord2lkdGggICAgMjEwCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzND48VTAwMzU+IgoraW50X3NlbGVjdCAgICAgIjxVMDAzMD48VTAwMzA+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorJSBGSVhNRQorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAiPFUwMDQ0PjxVMDA0Qj4iCitjb3VudHJ5X2FiMyAiPFUwMDQ0PjxVMDA0RT48VTAwNEI+IgorY291bnRyeV9udW0gMjA4CitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZGVfQVQgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9kZV9BVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWM0MmY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZGVfQVQKQEAgLTAsMCArMSwxNTcgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworCislIEdlcm1hbiBMYW5ndWFnZSBMb2NhbGUgZm9yIEF1c3RyaWEKKyUgU291cmNlOiBPOnN0ZXJyZWljaGVzIE5vcm11bmdzaW5zdGl0dXQKKyUgQWRkcmVzczogUG9zdGZhY2ggMTMwLCBBLTEwMjEgV2llbgorJSBDb250YWN0OiBHZXJoYXJkIEJ1ZGluCislIEVtYWlsOiBub3QgYXZhaWxhYmxlCislIFRlbDogKzQzLTIyMi0yNSA3NSAzNSBleHQgMzEwCislIEZheDogKzQzLTIyMi0yMTYgMzIgNzIKKyUgTGFuZ3VhZ2U6IGRlCislIFRlcnJpdG9yeTogQVQKKyUgUmV2aXNpb246IDQuMworJSBEYXRlOiAxOTk2LTEwLTE1CislIFVzZXJzOiBnZW5lcmFsCislIENoYXJzZXQ6IElTTy04ODU5LTEKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkdlcm1hbiBsb2NhbGUgZm9yIEF1c3RyaWEiCitzb3VyY2UgICAgICJPOnN0ZXJyZWljaGVzIE5vcm11bmdzaW5zdGl0dXQiCithZGRyZXNzICAgICJQb3N0ZmFjaCAxMzAsIEEtMTAyMSBXaWVuIgorY29udGFjdCAgICAiR2VyaGFyZCBCdWRpbiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJHZXJtYW4iCit0ZXJyaXRvcnkgICJBdXN0cmlhIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOCIKKyUKK2NhdGVnb3J5ICAiZGVfQVQ6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZGVfQVQ6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZGVfQVQ6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJkZV9BVDoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImRlX0FUOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZGVfQVQ6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZGVfQVQ6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZGVfQVQ6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZGVfQVQ6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJkZV9BVDoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImRlX0FUOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImRlX0RFIgorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxCitjb3B5ICJpc28xNDY1MV90MSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA2QT48VTAwNEE+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAgICI8VTAwNDU+PFUwMDU1PjxVMDA1Mj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICAgICAiPFUyMEFDPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAgICAgIjxVMDAyQz4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgICAgICI8VTAwMjA+IgorbW9uX2dyb3VwaW5nICAgICAgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAgICAgMQorCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludCAgICAgICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgICAgIiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgICAgMDswCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICI8VTAwNTM+PFUwMDZGPjxVMDA2RT4iOyI8VTAwNEQ+PFUwMDZGPjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA0ND48VTAwNjk+PFUwMDY1PiI7IjxVMDA0RD48VTAwNjk+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDQ0PjxVMDA2Rj48VTAwNkU+IjsiPFUwMDQ2PjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA2RD4iCitkYXkgICAgICI8VTAwNTM+PFUwMDZGPjxVMDA2RT48VTAwNkU+PFUwMDc0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDZGPjxVMDA2RT48VTAwNzQ+PFUwMDYxPjxVMDA2Nz4iOy8KKyAgICAgICAgIjxVMDA0ND48VTAwNjk+PFUwMDY1PjxVMDA2RT48VTAwNzM+PFUwMDc0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDY5PjxVMDA3ND48VTAwNzQ+PFUwMDc3PjxVMDA2Rj48VTAwNjM+PFUwMDY4PiI7LworICAgICAgICAiPFUwMDQ0PjxVMDA2Rj48VTAwNkU+PFUwMDZFPjxVMDA2NT48VTAwNzI+PFUwMDczPjxVMDA3ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAiPFUwMDQ2PjxVMDA3Mj48VTAwNjU+PFUwMDY5PjxVMDA3ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNkQ+PFUwMDczPjxVMDA3ND48VTAwNjE+PFUwMDY3PiIKK2FibW9uICAgIjxVMDA0QT48VTAwRTQ+PFUwMDZFPiI7IjxVMDA0Nj48VTAwNjU+PFUwMDYyPiI7LworICAgICAgICAiPFUwMDREPjxVMDBFND48VTAwNzI+IjsiPFUwMDQxPjxVMDA3MD48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA2OT4iOyI8VTAwNEE+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZDPiI7IjxVMDA0MT48VTAwNzU+PFUwMDY3PiI7LworICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNzA+IjsiPFUwMDRGPjxVMDA2Qj48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNEU+PFUwMDZGPjxVMDA3Nj4iOyI8VTAwNDQ+PFUwMDY1PjxVMDA3QT4iCittb24gICAgICI8VTAwNEE+PFUwMEU0PjxVMDA2RT48VTAwNkU+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0Nj48VTAwNjU+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMEU0PjxVMDA3Mj48VTAwN0E+IjsvCisgICAgICAgICI8VTAwNDE+PFUwMDcwPjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2RT48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2Qz48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNDE+PFUwMDc1PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDRGPjxVMDA2Qj48VTAwNzQ+PFUwMDZGPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0ND48VTAwNjU+PFUwMDdBPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDU5PjxVMDAyRD48VTAwMjU+PFUwMDZEPjxVMDAyRD48VTAwMjU+PFUwMDY0PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAiIjsiIgordF9mbXRfYW1wbSAiIgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworTENfUEFQRVIKK2hlaWdodCAgIDI5Nword2lkdGggICAgMjEwCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgordGVsX2RvbV9mbXQgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzND48VTAwMzM+IgoraW50X3NlbGVjdCAgICAgIjxVMDAzMD48VTAwMzA+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAiPFUwMDQxPjxVMDA1ND4iCitjb3VudHJ5X2FiMyAiPFUwMDQxPjxVMDA1NT48VTAwNTQ+IgorY291bnRyeV9udW0gMDQwCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZGVfQVRAZXVybyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2RlX0FUQGV1cm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYwNGIyNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2RlX0FUQGV1cm8KQEAgLTAsMCArMSw5MCBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCisKKyUgR2VybWFuIExhbmd1YWdlIExvY2FsZSBmb3IgQXVzdHJpYSB3aXRoIEV1cm8KKyUgU291cmNlOiBPOnN0ZXJyZWljaGVzIE5vcm11bmdzaW5zdGl0dXQKKyUgQWRkcmVzczogUG9zdGZhY2ggMTMwLCBBLTEwMjEgV2llbgorJSBDb250YWN0OiBHZXJoYXJkIEJ1ZGluCislIEVtYWlsOiBub3QgYXZhaWxhYmxlCislIFRlbDogKzQzLTIyMi0yNSA3NSAzNSBleHQgMzEwCislIEZheDogKzQzLTIyMi0yMTYgMzIgNzIKKyUgTGFuZ3VhZ2U6IGRlCislIFRlcnJpdG9yeTogQVQKKyUgT3B0aW9uOiBldXJvCislIERhdGU6IDIwMDAtMDgtMjAKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogSVNPLTg4NTktMTUKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkdlcm1hbiBsb2NhbGUgZm9yIEF1c3RyaWEgd2l0aCBFdXJvIgorc291cmNlICAgICAiTzpzdGVycmVpY2hlcyBOb3JtdW5nc2luc3RpdHV0IgorYWRkcmVzcyAgICAiUG9zdGZhY2ggMTMwLCBBLTEwMjEgV2llbiIKK2NvbnRhY3QgICAgIkdlcmhhcmQgQnVkaW4iCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiR2VybWFuIgordGVycml0b3J5ICAiQXVzdHJpYSIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDgtMjAiCislCitjYXRlZ29yeSAgImRlX0FUQGV1cm86MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZGVfQVRAZXVybzoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJkZV9BVEBldXJvOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiZGVfQVRAZXVybzoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImRlX0FUQGV1cm86MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJkZV9BVEBldXJvOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImRlX0FUQGV1cm86MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZGVfQVRAZXVybzoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJkZV9BVEBldXJvOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiZGVfQVRAZXVybzoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImRlX0FUQGV1cm86MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiZGVfQVQiCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEKK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfTUVTU0FHRVMKK2NvcHkgImRlX0FUIgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitjb3B5ICJkZV9BVCIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJkZV9BVCIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2NvcHkgImRlX0FUIgorRU5EIExDX1RJTUUKKworTENfUEFQRVIKK2NvcHkgImRlX0FUIgorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQorY29weSAiZGVfQVQiCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJkZV9BVCIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCitjb3B5ICJkZV9BVCIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK2NvcHkgImRlX0FUIgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2RlX0JFIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZGVfQkUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U3ZjExZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2RlX0JFCkBAIC0wLDAgKzEsMTUwIEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgR2VybWFuIExhbmd1YWdlIExvY2FsZSBmb3IgQmVsZ2l1bQorJSBTb3VyY2U6IFJBUAorJSBBZGRyZXNzOiBTYW5rdCBKby8vcmdlbnMgQWxsZSA4CislICAgIERLLTE2MTUgS28vL2Jlbmhhdm4gViwgRGFubWFyaworJSBDb250YWN0OiBLZWxkIFNpbW9uc2VuCislIEVtYWlsOiBLZWxkLlNpbW9uc2VuQGRrdXVnLmRrCislIFRlbDogKzQ1IC0gMzEyMjY1NDMKKyUgRmF4OiArNDUgLSAzMzI1NjU0MworJSBMYW5ndWFnZTogZGUKKyUgVGVycml0b3J5OiBCRQorJSBSZXZpc2lvbjogNC4zCislIERhdGU6IDE5OTYtMTAtMTUKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMuZHMKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiR2VybWFuIGxvY2FsZSBmb3IgQmVsZ2l1bSIKK3NvdXJjZSAgICAgIlJBUCIKK2FkZHJlc3MgICAgIlNhbmt0IEo8VTAwRjg+cmdlbnMgQWxsZSA4LCBESy0xNjE1IEs8VTAwRjg+YmVuaGF2biBWLCBEYW5tYXJrIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkdlcm1hbiIKK3RlcnJpdG9yeSAgIkJlbGdpdW0iCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA2LTI5IgorJQorY2F0ZWdvcnkgICJkZV9CRToyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJkZV9CRToyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJkZV9CRToyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImRlX0JFOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiZGVfQkU6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJkZV9CRToyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJkZV9CRToyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJkZV9CRToyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJkZV9CRToyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImRlX0JFOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiZGVfQkU6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DT0xMQVRFCitjb3B5ICJpc28xNDY1MV90MSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJkZV9ERSIKK0VORCBMQ19DVFlQRQorCitMQ19NRVNTQUdFUworY29weSAiZGVfREUiCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgICAgICAgIjxVMDA0NT48VTAwNTU+PFUwMDUyPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgICAgICI8VTIwQUM+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICAgICAiPFUwMDJDPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAgICAgIjxVMDAyRT4iCittb25fZ3JvdXBpbmcgICAgICAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgICAgNAorbl9zaWduX3Bvc24gICAgICAgICAgICAgICA0CitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworY29weSAiZGVfREUiCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCislIGNvcHkgImRlX0RFIgorYWJkYXkgICAiPFUwMDUzPjxVMDA2Rj48VTAwNkU+IjsiPFUwMDREPjxVMDA2Rj48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDY5PjxVMDA2NT4iOyI8VTAwNEQ+PFUwMDY5PjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA0ND48VTAwNkY+PFUwMDZFPiI7IjxVMDA0Nj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNkQ+IgorZGF5ICAgICAiPFUwMDUzPjxVMDA2Rj48VTAwNkU+PFUwMDZFPjxVMDA3ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAiPFUwMDREPjxVMDA2Rj48VTAwNkU+PFUwMDc0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDY5PjxVMDA2NT48VTAwNkU+PFUwMDczPjxVMDA3ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAiPFUwMDREPjxVMDA2OT48VTAwNzQ+PFUwMDc0PjxVMDA3Nz48VTAwNkY+PFUwMDYzPjxVMDA2OD4iOy8KKyAgICAgICAgIjxVMDA0ND48VTAwNkY+PFUwMDZFPjxVMDA2RT48VTAwNjU+PFUwMDcyPjxVMDA3Mz48VTAwNzQ+PFUwMDYxPjxVMDA2Nz4iOy8KKyAgICAgICAgIjxVMDA0Nj48VTAwNzI+PFUwMDY1PjxVMDA2OT48VTAwNzQ+PFUwMDYxPjxVMDA2Nz4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDZEPjxVMDA3Mz48VTAwNzQ+PFUwMDYxPjxVMDA2Nz4iCithYm1vbiAgICI8VTAwNEE+PFUwMDYxPjxVMDA2RT4iOyI8VTAwNDY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwRTQ+PFUwMDcyPiI7IjxVMDA0MT48VTAwNzA+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNjk+IjsiPFUwMDRBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNDE+PFUwMDc1PjxVMDA2Nz4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA0Rj48VTAwNkI+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDQ0PjxVMDA2NT48VTAwN0E+IgorbW9uICAgICAiPFUwMDRBPjxVMDA2MT48VTAwNkU+PFUwMDc1PjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNDY+PFUwMDY1PjxVMDA2Mj48VTAwNzI+PFUwMDc1PjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMEU0PjxVMDA3Mj48VTAwN0E+IjsvCisgICAgICAgICI8VTAwNDE+PFUwMDcwPjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2RT48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2Qz48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNDE+PFUwMDc1PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDRGPjxVMDA2Qj48VTAwNzQ+PFUwMDZGPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0ND48VTAwNjU+PFUwMDdBPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDU5PjxVMDAyRD48VTAwMjU+PFUwMDZEPjxVMDAyRD48VTAwMjU+PFUwMDY0PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAiIjsiIgordF9mbXRfYW1wbSAiIgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworTENfUEFQRVIKK2NvcHkgImZyX0JFIgorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQorY29weSAiZnJfQkUiCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJmcl9CRSIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgIjxVMDA0Mj48VTAwNDU+IgorY291bnRyeV9hYjMgIjxVMDA0Mj48VTAwNDU+PFUwMDRDPiIKK2NvdW50cnlfbnVtIDA1NgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2RlX0JFQGV1cm8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9kZV9CRUBldXJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZjAyZGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9kZV9CRUBldXJvCkBAIC0wLDAgKzEsODMgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBHZXJtYW4gTGFuZ3VhZ2UgTG9jYWxlIGZvciBCZWxnaXVtIHdpdGggRXVybworJSBMYW5ndWFnZTogZGUKKyUgVGVycml0b3J5OiBCRQorJSBPcHRpb246IGV1cm8KKyUgRGF0ZTogMjAwMC0wOC0yMQorJSBVc2VyczogZ2VuZXJhbAorJSBDaGFyc2V0OiBJU08tODg1OS0xNQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiR2VybWFuIGxvY2FsZSBmb3IgQmVsZ2l1bSB3aXRoIEV1cm8iCitzb3VyY2UgICAgICJGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4iCithZGRyZXNzICAgICI1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkdlcm1hbiIKK3RlcnJpdG9yeSAgIkJlbGdpdW0iCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA4LTIxIgorJQorY2F0ZWdvcnkgICJkZV9CRUBldXJvOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImRlX0JFQGV1cm86MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZGVfQkVAZXVybzoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImRlX0JFQGV1cm86MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJkZV9CRUBldXJvOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZGVfQkVAZXVybzoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJkZV9CRUBldXJvOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImRlX0JFQGV1cm86MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZGVfQkVAZXVybzoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImRlX0JFQGV1cm86MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJkZV9CRUBldXJvOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAiZGVfQkUiCitFTkQgTENfQ1RZUEUKKworTENfTUVTU0FHRVMKK2NvcHkgImRlX0JFIgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitjb3B5ICJkZV9CRSIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJkZV9CRSIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2NvcHkgImRlX0JFIgorRU5EIExDX1RJTUUKKworTENfUEFQRVIKK2NvcHkgImRlX0JFIgorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQorY29weSAiZGVfQkUiCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJkZV9CRSIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCitjb3B5ICJkZV9CRSIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK2NvcHkgImRlX0JFIgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2RlX0NIIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZGVfQ0gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJhNjU4NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2RlX0NICkBAIC0wLDAgKzEsMTU3IEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgR2VybWFuIExhbmd1YWdlIExvY2FsZSBmb3IgU3dpdHplcmxhbmQKKyUgU291cmNlOiBSQVAKKyUgQWRkcmVzczogU2Fua3QgSm8vL3JnZW5zIEFsbGUgOAorJSAgICBESy0xNjE1IEtvLy9iZW5oYXZuIFYsIERhbm1hcmsKKyUgQ29udGFjdDogS2VsZCBTaW1vbnNlbgorJSBFbWFpbDogS2VsZC5TaW1vbnNlbkBka3V1Zy5kaworJSBUZWw6ICs0NSAtIDMxMjI2NTQzCislIEZheDogKzQ1IC0gMzMyNTY1NDMKKyUgTGFuZ3VhZ2U6IGRlCislIFRlcnJpdG9yeTogQ0gKKyUgUmV2aXNpb246IDQuMworJSBEYXRlOiAxOTk2LTEwLTE1CislIFVzZXJzOiBnZW5lcmFsCislIFJlcGVydG9pcmVtYXA6IG1uZW1vbmljLmRzCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJHZXJtYW4gbG9jYWxlIGZvciBTd2l0emVybGFuZCIKK3NvdXJjZSAgICAgIlJBUCIKK2FkZHJlc3MgICAgIlNhbmt0IEo8VTAwRjg+cmdlbnMgQWxsZSA4LCBESy0xNjE1IEs8VTAwRjg+YmVuaGF2biBWLCBEYW5tYXJrIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkdlcm1hbiIKK3RlcnJpdG9yeSAgIlN3aXR6ZXJsYW5kIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwNy0wOS0yMyIKKyUKK2NhdGVnb3J5ICAiZGVfQ0g6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZGVfQ0g6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZGVfQ0g6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJkZV9DSDoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImRlX0NIOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZGVfQ0g6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZGVfQ0g6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZGVfQ0g6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZGVfQ0g6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJkZV9DSDoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImRlX0NIOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAiZGVfREUiCitFTkQgTENfQ1RZUEUKKworTENfTUVTU0FHRVMKK2NvcHkgImRlX0RFIgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAgICI8VTAwNDM+PFUwMDQ4PjxVMDA0Nj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICAgICAiPFUwMDQ2PjxVMDA3Mj48VTAwMkU+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICAgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAgICAgIjxVMDAyNz4iCittb25fZ3JvdXBpbmcgICAgICAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgICAgNAorbl9zaWduX3Bvc24gICAgICAgICAgICAgICA0CitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludCAgICAgICAgICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgICAgIjxVMDAyNz4iCitncm91cGluZyAgICAgICAgICAgICAgICAgIDM7MworRU5EIExDX05VTUVSSUMKKworTENfVElNRQorJSBjb3B5ICJkZV9ERSIKK2FiZGF5ICAgIjxVMDA1Mz48VTAwNkY+PFUwMDZFPiI7IjxVMDA0RD48VTAwNkY+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDQ0PjxVMDA2OT48VTAwNjU+IjsiPFUwMDREPjxVMDA2OT48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDZGPjxVMDA2RT4iOyI8VTAwNDY+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDZEPiIKK2RheSAgICAgIjxVMDA1Mz48VTAwNkY+PFUwMDZFPjxVMDA2RT48VTAwNzQ+PFUwMDYxPjxVMDA2Nz4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNkY+PFUwMDZFPjxVMDA3ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAiPFUwMDQ0PjxVMDA2OT48VTAwNjU+PFUwMDZFPjxVMDA3Mz48VTAwNzQ+PFUwMDYxPjxVMDA2Nz4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjk+PFUwMDc0PjxVMDA3ND48VTAwNzc+PFUwMDZGPjxVMDA2Mz48VTAwNjg+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDZGPjxVMDA2RT48VTAwNkU+PFUwMDY1PjxVMDA3Mj48VTAwNzM+PFUwMDc0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNDY+PFUwMDcyPjxVMDA2NT48VTAwNjk+PFUwMDc0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA2RD48VTAwNzM+PFUwMDc0PjxVMDA2MT48VTAwNjc+IgorYWJtb24gICAiPFUwMDRBPjxVMDA2MT48VTAwNkU+IjsiPFUwMDQ2PjxVMDA2NT48VTAwNjI+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMEU0PjxVMDA3Mj4iOyI8VTAwNDE+PFUwMDcwPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDY5PiI7IjxVMDA0QT48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkM+IjsiPFUwMDQxPjxVMDA3NT48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA3MD4iOyI8VTAwNEY+PFUwMDZCPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDc2PiI7IjxVMDA0ND48VTAwNjU+PFUwMDdBPiIKK21vbiAgICAgIjxVMDA0QT48VTAwNjE+PFUwMDZFPjxVMDA3NT48VTAwNjE+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDQ2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA3NT48VTAwNjE+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDREPjxVMDBFND48VTAwNzI+PFUwMDdBPiI7LworICAgICAgICAiPFUwMDQxPjxVMDA3MD48VTAwNzI+PFUwMDY5PjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkU+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkM+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDQxPjxVMDA3NT48VTAwNjc+PFUwMDc1PjxVMDA3Mz48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0Rj48VTAwNkI+PFUwMDc0PjxVMDA2Rj48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDc2PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDY1PjxVMDA3QT48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiIKK2RfdF9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkU+PFUwMDI1PjxVMDA2RD48VTAwMkU+PFUwMDI1PjxVMDA1OT4iCit0X2ZtdCAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgIiI7IiIKK3RfZm10X2FtcG0gIiIKK2RhdGVfZm10CSI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCislIEZJWE1FCitoZWlnaHQgICAyOTcKKyUgRklYTUUKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzQ+PFUwMDMxPiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKKyUgRklYTUUKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgIjxVMDA0Mz48VTAwNDg+IgorY291bnRyeV9hYjMgIjxVMDA0Mz48VTAwNDg+PFUwMDQ1PiIKK2NvdW50cnlfbnVtIDc1NgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2RlX0RFIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZGVfREUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA0MDkyMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2RlX0RFCkBAIC0wLDAgKzEsMjEzIEBACitlc2NhcGVfY2hhciAvCitjb21tZW50X2NoYXIgJQorJSBMb2NhbGUgZm9yIEdlcm1hbiBsb2NhbGUgaW4gR2VybWFueQorJSBDb250cmlidXRlZCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMAorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiR2VybWFuIGxvY2FsZSBmb3IgR2VybWFueSIKK3NvdXJjZSAgICAgIkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiIKK2FkZHJlc3MgICAgIjU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiR2VybWFuIgordGVycml0b3J5ICAiR2VybWFueSIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjQiCislCitjYXRlZ29yeSAgImRlX0RFOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImRlX0RFOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImRlX0RFOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiZGVfREU6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJkZV9ERToyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImRlX0RFOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImRlX0RFOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImRlX0RFOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImRlX0RFOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiZGVfREU6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJkZV9ERToyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAorCitpbmNsdWRlICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCisKKyUgR2VybWFuIHVtbGF1dHMuCislIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMuCis8VTAwQzQ+ICI8VTAwNDE+PFUwMzA4PiI7IjxVMDA0MT48VTAwNDU+IgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTLgorPFUwMEQ2PiAiPFUwMDRGPjxVMDMwOD4iOyI8VTAwNEY+PFUwMDQ1PiIKKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUy4KKzxVMDBEQz4gIjxVMDA1NT48VTAzMDg+IjsiPFUwMDU1PjxVMDA0NT4iCislIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTLgorPFUwMEU0PiAiPFUwMDYxPjxVMDMwOD4iOyI8VTAwNjE+PFUwMDY1PiIKKyUgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVMuCis8VTAwRjY+ICI8VTAwNkY+PFUwMzA4PiI7IjxVMDA2Rj48VTAwNjU+IgorJSBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUy4KKzxVMDBGQz4gIjxVMDA3NT48VTAzMDg+IjsiPFUwMDc1PjxVMDA2NT4iCisKKyUgRGFuaXNoLgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRS4KKzxVMDBDNT4gIjxVMDA0MT48VTAzMEE+IjsiPFUwMDQxPjxVMDA0MT4iCislIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRS4KKzxVMDBFNT4gIjxVMDA2MT48VTAzMEE+IjsiPFUwMDYxPjxVMDA2MT4iCisKKyUgVGhlIGZvbGxvd2luZyBzdHJhbmdlIGZpcnN0LWxldmVsIHRyYW5zbGl0ZXJhdGlvbiBkZXJpdmUgZnJvbSB0aGUgdXNlCislIFUyMDFFIGFuZCBVMjAxQyBhcyAiY29ycmVjdCIgcXVvdGluZyBjaGFyYWN0ZXJzLiAgVGhlc2UgdHdvIGNoYXJhY3RlcnMKKyUgZG8gbm90IHJlYWxseSBiZWxvbmcgdG9nZXRoZXIuICBUaGUgcmVzdWx0IGlzIHRoYXQgc29tZWJvZHkgd2hvIHVzZXMKKyUgVTIwMUMgYW5kIFUyMDFEIHdpbGwgZ2V0IHRoZSBpbmNvcnJlY3QgVTAwQUIgLyBVMDBCQiBzZXF1ZW5jZXMuCislIExFRlQgRE9VQkxFIFFVT1RBVElPTiBNQVJLCis8VTIwMUM+IDxVMDBBQj47PFUwMDIyPgorJSBSSUdIVCBET1VCTEUgUVVPVEFUSU9OIE1BUksKKzxVMjAxRD4gPFUwMEJCPjs8VTAwMjI+CislIERPVUJMRSBMT1ctOSBRVU9UQVRJT04gTUFSSworPFUyMDFFPiA8VTAwQkI+OyI8VTAwMkM+PFUwMDJDPiIKKyUgRE9VQkxFIEhJR0gtUkVWRVJTRUQtOSBRVU9UQVRJT04gTUFSSworPFUyMDFGPiA8VTAwQUI+OzxVMDAyMj4KKwordHJhbnNsaXRfZW5kCisKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCisKK2RlZmluZSBESUFDUklUX0ZPUldBUkQKKworJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEKK2NvcHkgImlzbzE0NjUxX3QxIgorCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAiPFUwMDQ1PjxVMDA1NT48VTAwNTI+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgIjxVMjBBQz4iCittb25fZGVjaW1hbF9wb2ludCAgICI8VTAwMkM+IgorbW9uX3Rob3VzYW5kc19zZXAgICAiPFUwMDJFPiIKK21vbl9ncm91cGluZyAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgMAorcF9zZXBfYnlfc3BhY2UgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgIDAKK25fc2VwX2J5X3NwYWNlICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgIDEKKyUKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgIjxVMDAyQz4iCit0aG91c2FuZHNfc2VwICAgIjxVMDAyRT4iCitncm91cGluZyAgICAgICAgMzszCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheQkiPFUwMDUzPjxVMDA2Rj4iOyI8VTAwNEQ+PFUwMDZGPiI7LworCSI8VTAwNDQ+PFUwMDY5PiI7IjxVMDA0RD48VTAwNjk+IjsvCisJIjxVMDA0ND48VTAwNkY+IjsiPFUwMDQ2PjxVMDA3Mj4iOy8KKwkiPFUwMDUzPjxVMDA2MT4iCitkYXkJIjxVMDA1Mz48VTAwNkY+PFUwMDZFPjxVMDA2RT48VTAwNzQ+PFUwMDYxPjxVMDA2Nz4iOy8KKwkiPFUwMDREPjxVMDA2Rj48VTAwNkU+PFUwMDc0PjxVMDA2MT48VTAwNjc+IjsvCisJIjxVMDA0ND48VTAwNjk+PFUwMDY1PjxVMDA2RT48VTAwNzM+PFUwMDc0PjxVMDA2MT48VTAwNjc+IjsvCisJIjxVMDA0RD48VTAwNjk+PFUwMDc0PjxVMDA3ND48VTAwNzc+PFUwMDZGPjxVMDA2Mz48VTAwNjg+IjsvCisJIjxVMDA0ND48VTAwNkY+PFUwMDZFPjxVMDA2RT48VTAwNjU+PFUwMDcyPjxVMDA3Mz48VTAwNzQ+PFUwMDYxPjxVMDA2Nz4iOy8KKwkiPFUwMDQ2PjxVMDA3Mj48VTAwNjU+PFUwMDY5PjxVMDA3ND48VTAwNjE+PFUwMDY3PiI7LworCSI8VTAwNTM+PFUwMDYxPjxVMDA2RD48VTAwNzM+PFUwMDc0PjxVMDA2MT48VTAwNjc+IgorYWJtb24JIjxVMDA0QT48VTAwNjE+PFUwMDZFPiI7IjxVMDA0Nj48VTAwNjU+PFUwMDYyPiI7LworCSI8VTAwNEQ+PFUwMEU0PjxVMDA3Mj4iOyI8VTAwNDE+PFUwMDcwPjxVMDA3Mj4iOy8KKwkiPFUwMDREPjxVMDA2MT48VTAwNjk+IjsiPFUwMDRBPjxVMDA3NT48VTAwNkU+IjsvCisJIjxVMDA0QT48VTAwNzU+PFUwMDZDPiI7IjxVMDA0MT48VTAwNzU+PFUwMDY3PiI7LworCSI8VTAwNTM+PFUwMDY1PjxVMDA3MD4iOyI8VTAwNEY+PFUwMDZCPjxVMDA3ND4iOy8KKwkiPFUwMDRFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDQ0PjxVMDA2NT48VTAwN0E+IgorbW9uCSI8VTAwNEE+PFUwMDYxPjxVMDA2RT48VTAwNzU+PFUwMDYxPjxVMDA3Mj4iOy8KKwkiPFUwMDQ2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA3NT48VTAwNjE+PFUwMDcyPiI7LworCSI8VTAwNEQ+PFUwMEU0PjxVMDA3Mj48VTAwN0E+IjsvCisJIjxVMDA0MT48VTAwNzA+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisJIjxVMDA0RD48VTAwNjE+PFUwMDY5PiI7LworCSI8VTAwNEE+PFUwMDc1PjxVMDA2RT48VTAwNjk+IjsvCisJIjxVMDA0QT48VTAwNzU+PFUwMDZDPjxVMDA2OT4iOy8KKwkiPFUwMDQxPjxVMDA3NT48VTAwNjc+PFUwMDc1PjxVMDA3Mz48VTAwNzQ+IjsvCisJIjxVMDA1Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworCSI8VTAwNEY+PFUwMDZCPjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisJIjxVMDA0RT48VTAwNkY+PFUwMDc2PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisJIjxVMDA0ND48VTAwNjU+PFUwMDdBPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IgorYW1fcG0gICAiIjsiIgorJSBBcHByb3ByaWF0ZSBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uICglYykKKyUJIiVhICVkICViICVZICVUICVaIgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKCV4KQorJQkiJWQuJW0uJVkiCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjU+PFUwMDZEPjxVMDAyRT48VTAwMjU+PFUwMDU5PiIKKyUKKyUgQXBwcm9wcmlhdGUgdGltZSByZXByZXNlbnRhdGlvbiAoJVgpCislCSIlVCIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgordF9mbXRfYW1wbSAiIgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwMkQ+PFUwMDY0PjxVMDAyRT48VTAwMjA+LworPFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCisKK3dlZWsgICAgNzsxOTk3MTIwMTs0CitmaXJzdF93ZWVrZGF5IDEKK2ZpcnN0X3dvcmtkYXkgMQorRU5EIExDX1RJTUUKKworTENfTUVTU0FHRVMKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDZBPjxVMDA0QT48VTAwNzk+PFUwMDU5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfUEFQRVIKK2hlaWdodCAgIDI5Nword2lkdGggICAgMjEwCitFTkQgTENfUEFQRVIKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorbmFtZV9taXNzICAgIjxVMDA0Nj48VTAwNzI+PFUwMEU0PjxVMDA3NT48VTAwNkM+PFUwMDY1PjxVMDA2OT48VTAwNkU+IgorbmFtZV9tciAgICAgIjxVMDA0OD48VTAwNjU+PFUwMDcyPjxVMDA3Mj4iCituYW1lX21ycyAgICAiPFUwMDQ2PjxVMDA3Mj48VTAwNjE+PFUwMDc1PiIKK25hbWVfbXMgICAgICI8VTAwNDY+PFUwMDcyPjxVMDA2MT48VTAwNzU+IgorRU5EIExDX05BTUUKKworCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9uYW1lICAiPFUwMDQ0PjxVMDA2NT48VTAwNzU+PFUwMDc0PjxVMDA3Mz48VTAwNjM+PFUwMDY4PjxVMDA2Qz4vCis8VTAwNjE+PFUwMDZFPjxVMDA2ND4iCitjb3VudHJ5X3Bvc3QgICI8VTAwNDQ+IgorY291bnRyeV9hYjIgICAiPFUwMDQ0PjxVMDA0NT4iCitjb3VudHJ5X2FiMyAgICI8VTAwNDQ+PFUwMDQ1PjxVMDA1NT4iCitjb3VudHJ5X251bSAgIDI3NgorY291bnRyeV9jYXIgICAiPFUwMDQ0PiIKK2NvdW50cnlfaXNibiAgMworbGFuZ19uYW1lICAgICAiPFUwMDQ0PjxVMDA2NT48VTAwNzU+PFUwMDc0PjxVMDA3Mz48VTAwNjM+PFUwMDY4PiIKK2xhbmdfYWIgICAgICAgIjxVMDA2ND48VTAwNjU+IgorbGFuZ190ZXJtICAgICAiPFUwMDY0PjxVMDA2NT48VTAwNzU+IgorbGFuZ19saWIgICAgICAiPFUwMDY3PjxVMDA2NT48VTAwNzI+IgorRU5EIExDX0FERFJFU1MKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgordGVsX2RvbV9mbXQgICAgIjxVMDAyNT48VTAwNDE+PFUwMDIwPjxVMDAyNT48VTAwNkM+IgoraW50X3NlbGVjdCAgICAgIjxVMDAzMD48VTAwMzA+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzND48VTAwMzk+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9kZV9ERUBldXJvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZGVfREVAZXVybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjM5ZTNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZGVfREVAZXVybwpAQCAtMCwwICsxLDc5IEBACitlc2NhcGVfY2hhciAvCitjb21tZW50X2NoYXIgJQorJSBMb2NhbGUgZm9yIEdlcm1hbiBsb2NhbGUgaW4gR2VybWFueQorJSBDb250cmlidXRlZCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMAorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiR2VybWFuIGxvY2FsZSBmb3IgR2VybWFueSB3aXRoIEV1cm8iCitzb3VyY2UgICAgICJGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4iCithZGRyZXNzICAgICI1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkdlcm1hbiIKK3RlcnJpdG9yeSAgIkdlcm1hbnkiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA2LTI0IgorJQorY2F0ZWdvcnkgICJkZV9ERUBldXJvOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImRlX0RFQGV1cm86MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZGVfREVAZXVybzoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImRlX0RFQGV1cm86MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJkZV9ERUBldXJvOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZGVfREVAZXVybzoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJkZV9ERUBldXJvOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImRlX0RFQGV1cm86MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZGVfREVAZXVybzoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImRlX0RFQGV1cm86MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJkZV9ERUBldXJvOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImRlX0RFIgorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKKworJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEKK2NvcHkgImlzbzE0NjUxX3QxIgorCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQorY29weSAiZGVfREUiCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworY29weSAiZGVfREUiCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCitjb3B5ICJkZV9ERSIKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCitjb3B5ICJkZV9ERSIKK0VORCBMQ19NRVNTQUdFUworCitMQ19QQVBFUgorY29weSAiZGVfREUiCitFTkQgTENfUEFQRVIKKworTENfTkFNRQorY29weSAiZGVfREUiCitFTkQgTENfTkFNRQorCisKK0xDX0FERFJFU1MKK2NvcHkgImRlX0RFIgorRU5EIExDX0FERFJFU1MKKworTENfVEVMRVBIT05FCitjb3B5ICJkZV9ERSIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgImRlX0RFIgorRU5EIExDX01FQVNVUkVNRU5UCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9kZV9MVSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2RlX0xVCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YmFmM2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9kZV9MVQpAQCAtMCwwICsxLDE1NiBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIEdlcm1hbiBMYW5ndWFnZSBMb2NhbGUgZm9yIEx1eGVtYnVyZworJSBTb3VyY2U6IFJBUAorJSBBZGRyZXNzOiBTYW5rdCBKby8vcmdlbnMgQWxsZSA4CislICAgIERLLTE2MTUgS28vL2Jlbmhhdm4gViwgRGFubWFyaworJSBDb250YWN0OiBLZWxkIFNpbW9uc2VuCislIEVtYWlsOiBLZWxkLlNpbW9uc2VuQGRrdXVnLmRrCislIFRlbDogKzQ1IC0gMzEyMjY1NDMKKyUgRmF4OiArNDUgLSAzMzI1NjU0MworJSBMYW5ndWFnZTogZGUKKyUgVGVycml0b3J5OiBMVQorJSBSZXZpc2lvbjogNC4zCislIERhdGU6IDE5OTYtMTAtMTUKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMuZHMKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiR2VybWFuIGxvY2FsZSBmb3IgTHV4ZW1idXJnIgorc291cmNlICAgICAiUkFQIgorYWRkcmVzcyAgICAiU2Fua3QgSjxVMDBGOD5yZ2VucyBBbGxlIDgsIERLLTE2MTUgSzxVMDBGOD5iZW5oYXZuIFYsIERhbm1hcmsiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiR2VybWFuIgordGVycml0b3J5ICAiTHV4ZW1idXJnIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAiZGVfTFU6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZGVfTFU6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZGVfTFU6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJkZV9MVToyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImRlX0xVOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZGVfTFU6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZGVfTFU6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZGVfTFU6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZGVfTFU6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJkZV9MVToyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImRlX0xVOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAiZGVfREUiCitFTkQgTENfQ1RZUEUKKworTENfTUVTU0FHRVMKK2NvcHkgImRlX0RFIgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAgICI8VTAwNDU+PFUwMDU1PjxVMDA1Mj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICAgICAiPFUyMEFDPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAgICAgIjxVMDAyQz4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgICAgICI8VTAwMkU+IgorbW9uX2dyb3VwaW5nICAgICAgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDQKK25fc2lnbl9wb3NuICAgICAgICAgICAgICAgNAorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgImRlX0RFIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorJSBjb3B5ICJkZV9ERSIKK2FiZGF5ICAgIjxVMDA1Mz48VTAwNkY+PFUwMDZFPiI7IjxVMDA0RD48VTAwNkY+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDQ0PjxVMDA2OT48VTAwNjU+IjsiPFUwMDREPjxVMDA2OT48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDZGPjxVMDA2RT4iOyI8VTAwNDY+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDZEPiIKK2RheSAgICAgIjxVMDA1Mz48VTAwNkY+PFUwMDZFPjxVMDA2RT48VTAwNzQ+PFUwMDYxPjxVMDA2Nz4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNkY+PFUwMDZFPjxVMDA3ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAiPFUwMDQ0PjxVMDA2OT48VTAwNjU+PFUwMDZFPjxVMDA3Mz48VTAwNzQ+PFUwMDYxPjxVMDA2Nz4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjk+PFUwMDc0PjxVMDA3ND48VTAwNzc+PFUwMDZGPjxVMDA2Mz48VTAwNjg+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDZGPjxVMDA2RT48VTAwNkU+PFUwMDY1PjxVMDA3Mj48VTAwNzM+PFUwMDc0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNDY+PFUwMDcyPjxVMDA2NT48VTAwNjk+PFUwMDc0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA2RD48VTAwNzM+PFUwMDc0PjxVMDA2MT48VTAwNjc+IgorYWJtb24gICAiPFUwMDRBPjxVMDA2MT48VTAwNkU+IjsiPFUwMDQ2PjxVMDA2NT48VTAwNjI+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMEU0PjxVMDA3Mj4iOyI8VTAwNDE+PFUwMDcwPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDY5PiI7IjxVMDA0QT48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkM+IjsiPFUwMDQxPjxVMDA3NT48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA3MD4iOyI8VTAwNEY+PFUwMDZCPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDc2PiI7IjxVMDA0ND48VTAwNjU+PFUwMDdBPiIKK21vbiAgICAgIjxVMDA0QT48VTAwNjE+PFUwMDZFPjxVMDA3NT48VTAwNjE+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDQ2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA3NT48VTAwNjE+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDREPjxVMDBFND48VTAwNzI+PFUwMDdBPiI7LworICAgICAgICAiPFUwMDQxPjxVMDA3MD48VTAwNzI+PFUwMDY5PjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkU+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkM+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDQxPjxVMDA3NT48VTAwNjc+PFUwMDc1PjxVMDA3Mz48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0Rj48VTAwNkI+PFUwMDc0PjxVMDA2Rj48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDc2PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDY1PjxVMDA3QT48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiIKK2RfdF9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAiPFUwMDI1PjxVMDA1OT48VTAwMkQ+PFUwMDI1PjxVMDA2RD48VTAwMkQ+PFUwMDI1PjxVMDA2ND4iCit0X2ZtdCAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgIiI7IiIKK3RfZm10X2FtcG0gIiIKK2RhdGVfZm10CSI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCislIEZJWE1FCitoZWlnaHQgICAyOTcKKyUgRklYTUUKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzM+PFUwMDM1PjxVMDAzMj4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCislIEZJWE1FCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICI8VTAwNEM+PFUwMDU1PiIKK2NvdW50cnlfYWIzICI8VTAwNEM+PFUwMDU1PjxVMDA1OD4iCitjb3VudHJ5X251bSA0NDIKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9kZV9MVUBldXJvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZGVfTFVAZXVybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzQxZmZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZGVfTFVAZXVybwpAQCAtMCwwICsxLDgzIEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgR2VybWFuIExhbmd1YWdlIExvY2FsZSBmb3IgTHV4ZW1idXJnIHdpdGggRXVybworJSBMYW5ndWFnZTogZGUKKyUgVGVycml0b3J5OiBMVQorJSBPcHRpb246IGV1cm8KKyUgRGF0ZTogMjAwMC0wOC0yMAorJSBVc2VyczogZ2VuZXJhbAorJSBDaGFyc2V0OiBJU08tODg1OS0xNQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiR2VybWFuIGxvY2FsZSBmb3IgTHV4ZW1idXJnIHdpdGggRXVybyIKK3NvdXJjZSAgICAgIkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiIKK2FkZHJlc3MgICAgIjU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiR2VybWFuIgordGVycml0b3J5ICAiTHV4ZW1idXJnIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wOC0yMCIKKyUKK2NhdGVnb3J5ICAiZGVfTFU6MjAwMEBldXJvIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJkZV9MVToyMDAwQGV1cm8iO0xDX0NUWVBFCitjYXRlZ29yeSAgImRlX0xVOjIwMDBAZXVybyI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJkZV9MVToyMDAwQGV1cm8iO0xDX1RJTUUKK2NhdGVnb3J5ICAiZGVfTFU6MjAwMEBldXJvIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImRlX0xVOjIwMDBAZXVybyI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZGVfTFU6MjAwMEBldXJvIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJkZV9MVToyMDAwQGV1cm8iO0xDX1BBUEVSCitjYXRlZ29yeSAgImRlX0xVOjIwMDBAZXVybyI7TENfTkFNRQorY2F0ZWdvcnkgICJkZV9MVToyMDAwQGV1cm8iO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiZGVfTFU6MjAwMEBldXJvIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImRlX0xVIgorRU5EIExDX0NUWVBFCisKK0xDX01FU1NBR0VTCitjb3B5ICJkZV9ERSIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQorY29weSAiZGVfTFUiCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworY29weSAiZGVfREUiCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCitjb3B5ICJkZV9MVSIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCitjb3B5ICJkZV9MVSIKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK2NvcHkgImRlX0xVIgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorY29weSAiZGVfTFUiCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorY29weSAiZGVfTFUiCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitjb3B5ICJkZV9MVSIKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9kel9CVCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2R6X0JUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiM2ZlMWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9kel9CVApAQCAtMCwwICsxLDEzNjYgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworCislIEJodXRhbmVzZShCaHV0YW4pIGxvY2FsZQorJQorJSBOYW1lOiAgICAgIGR6X0JUCislIEF1dGhvcjogICAgUGVtYSBHZXlsZWcKKyUgQ29udGFjdDogICBTaGVydWJ0c2UgQ29sbGVnZSwgS2FuZ2x1bmcgQmh1dGFuOyBQYWJsbyBTYXJhdHhhZ2EKKyUgRS1tYWlsOiAgICBwZW1hX2dleWxlZ0BkcnVrbmV0LmJ0OyBwYWJsb0BtYW5kcmFrZXNvZnQuY29tCislIExhbmd1YWdlOiAgRHpvbmdraGEoZHopCislIFRlcnJpdG9yeTogQmh1dGFuKEJUKQorJSBDaGFyc2V0OiAgIFVURi04CislIFJldmlzaW9uOiAgMC4zCislIERhdGU6ICAgICAgMjAwNC0wOS0wMworJQorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiRHpvbmdraGEgbGFuZ3VhZ2UgbG9jYWxlIGZvciBCaHV0YW4iCitzb3VyY2UgICAgICJTaGVydWJ0c2UgQ29sbGVnZSIKK2FkZHJlc3MgICAgIkthbmdsdW5nLCBCaHV0YW4iCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkR6b25na2hhIgordGVycml0b3J5ICAiQmh1dGFuIgorcmV2aXNpb24gICAiMC4zIgorZGF0ZSAgICAgICAiMjAwNC0wOS0wMyIKKyUKK2NhdGVnb3J5ICAiZHpfQlQ6MjAwNCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZHpfQlQ6MjAwNCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZHpfQlQ6MjAwNCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJkel9CVDoyMDA0IjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImR6X0JUOjIwMDQiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImR6X0JUOjIwMDQiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImR6X0JUOjIwMDQiO0xDX1BBUEVSCitjYXRlZ29yeSAgImR6X0JUOjIwMDQiO0xDX05BTUUKK2NhdGVnb3J5ICAiZHpfQlQ6MjAwNCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJkel9CVDoyMDA0IjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKKyUlJSUlJSUlJSUlJSUlJSUKKyUgVE9ETzogY2hlY2sgTENfTU9ORVRBUlksIExDX05VTUVSSUMsIExDX01FU1NBR0VTLCBMQ19USU1FCislIAljaGVjayB0aW1lIGFuZCBkYXRlIGZvcm1hdHMKKyUlJSUlJSUlJSUlJSUlJSUKKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCitjb3B5ICJpc28xNDY1MV90MSIKKworc2NyaXB0IDxUSUJFVEFOPgorCislIDMwIGJhc2UgbGV0dGVycworY29sbGF0aW5nLXN5bWJvbCA8VElCLUtBPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLUtIQT4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1HQT4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1OR0E+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItQ0E+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItQ0hBPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLUpBPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLU5ZQT4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1UQT4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1USEE+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItREE+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItTkE+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItUEE+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItUEhBPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLUJBPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLU1BPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLVRTQT4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1UU0hBPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLURaQT4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1XQT4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1aSEE+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItWkE+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItLUE+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItWUE+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItUkE+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItTEE+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItU0hBPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLVNBPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLUhBPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLUE+CisKKyUgNCBleHBsaWNpdCB2b3dlbHMKK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1JPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLVU+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItRT4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1PPgorCislIHByZS1yYWRpY2FscworY29sbGF0aW5nLXN5bWJvbCA8Ul9HPgorY29sbGF0aW5nLXN5bWJvbCA8Ul9EPgorY29sbGF0aW5nLXN5bWJvbCA8Ul9CPgorY29sbGF0aW5nLXN5bWJvbCA8Ul9NPgorY29sbGF0aW5nLXN5bWJvbCA8Ul9BPgorY29sbGF0aW5nLXN5bWJvbCA8Ul9SPgorY29sbGF0aW5nLXN5bWJvbCA8Ul9MPgorY29sbGF0aW5nLXN5bWJvbCA8Ul9TPgorY29sbGF0aW5nLXN5bWJvbCA8Ul9CUj4KK2NvbGxhdGluZy1zeW1ib2wgPFJfQkw+Citjb2xsYXRpbmctc3ltYm9sIDxSX0JTPgorCislIG5vbWluYWwsIHN1YmpvaW5lZCBvciB2YXJpYW50IGZvcm1zCitjb2xsYXRpbmctc3ltYm9sIDxOT00+Citjb2xsYXRpbmctc3ltYm9sIDxTVUI+Citjb2xsYXRpbmctc3ltYm9sIDxWQVI+CisKKyUga2EtcmFkaWNhbHMKK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1LQS1SX0Q+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItS0EtUl9CPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLUtBLVJfUj4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1LQS1SX0w+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItS0EtUl9TPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLUtBLVJfQlI+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItS0EtUl9CUz4KK2NvbGxhdGluZy1lbGVtZW50IDxyYWQta2EtZD4gZnJvbSAiPFUwRjUxPjxVMEY0MD4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWthLWI+IGZyb20gIjxVMEY1Nj48VTBGNDA+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1rYS1yPiBmcm9tICI8VTBGNjI+PFUwRjkwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQta2EtbD4gZnJvbSAiPFUwRjYzPjxVMEY5MD4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWthLXM+IGZyb20gIjxVMEY2Nj48VTBGOTA+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1rYS1iLXI+IGZyb20gIjxVMEY1Nj48VTBGNjI+PFUwRjkwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQta2EtYi1zPiBmcm9tICI8VTBGNTY+PFUwRjY2PjxVMEY5MD4iCisKKyUga2hhLXJhZGljYWxzCitjb2xsYXRpbmctc3ltYm9sIDxUSUItS0hBLVJfTT4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1LSEEtUl9BPgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1raGEtbT4gZnJvbSAiPFUwRjU4PjxVMEY0MT4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWtoYS1hPiBmcm9tICI8VTBGNjA+PFUwRjQxPiIKKworJSBnYS1yYWRpY2FscworJSAJYXMgdGhlcmUgYXJlIGFtYmlndW91cywgdGhlIG5leHQgbGV0dGVyIGhhcyB0byBiZSBhZGRlZCB0b287CislCXNvIHRoZSA8cmFkLWdhLSo+IGFyZSBpbiBmYWN0IGRvdWJsZSBlbGVtZW50czogdGhlIGdhLXJhZGljYWwKKyUJaXRzZWxmLCBhbmQgdGhlIGZvbGxvd2luZyBsZXR0ZXIuCitjb2xsYXRpbmctc3ltYm9sIDxUSUItR0EtUl9EPiAlIGFtYmlndW91cworY29sbGF0aW5nLXN5bWJvbCA8VElCLUdBLVJfQj4gJSBhbWJpZ3VvdXMKK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1HQS1SX00+ICUgYW1iaWd1b3VzCitjb2xsYXRpbmctc3ltYm9sIDxUSUItR0EtUl9BPiAlIGFtYmlndW91cworY29sbGF0aW5nLXN5bWJvbCA8VElCLUdBLVJfUj4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1HQS1SX0w+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItR0EtUl9TPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLUdBLVJfQlI+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItR0EtUl9CUz4KK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZ2EtZC1nYT4gZnJvbSAiPFUwRjUxPjxVMEY0Mj48VTBGNDI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1nYS1kLW5nYT4gZnJvbSAiPFUwRjUxPjxVMEY0Mj48VTBGNDQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1nYS1kLWRhPiBmcm9tICI8VTBGNTE+PFUwRjQyPjxVMEY1MT4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWdhLWQtYmE+IGZyb20gIjxVMEY1MT48VTBGNDI+PFUwRjU2PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZ2EtZC13YT4gZnJvbSAiPFUwRjUxPjxVMEY0Mj48VTBGNUQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1nYS1kLS1hPiBmcm9tICI8VTBGNTE+PFUwRjQyPjxVMEY2MD4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWdhLWQtcmE+IGZyb20gIjxVMEY1MT48VTBGNDI+PFUwRjYyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZ2EtZC1sYT4gZnJvbSAiPFUwRjUxPjxVMEY0Mj48VTBGNjM+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1nYS1kLXNhPiBmcm9tICI8VTBGNTE+PFUwRjQyPjxVMEY2Nj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWdhLWQtdT4gZnJvbSAiPFUwRjUxPjxVMEY0Mj48VTBGNzQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1nYS1kLWU+IGZyb20gIjxVMEY1MT48VTBGNDI+PFUwRjdBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZ2EtZC1feWE+IGZyb20gIjxVMEY1MT48VTBGNDI+PFUwRkIxPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZ2EtZC1fcmE+IGZyb20gIjxVMEY1MT48VTBGNDI+PFUwRkIyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZ2EtYi1nYT4gZnJvbSAiPFUwRjU2PjxVMEY0Mj48VTBGNDI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1nYS1iLWRhPiBmcm9tICI8VTBGNTY+PFUwRjQyPjxVMEY1MT4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWdhLWItbWE+IGZyb20gIjxVMEY1Nj48VTBGNDI+PFUwRjU4PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZ2EtYi1tYTI+IGZyb20gIjxVMEY1Nj48VTBGNDI+PFUwRjdFPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZ2EtYi13YT4gZnJvbSAiPFUwRjU2PjxVMEY0Mj48VTBGNUQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1nYS1iLS1hPiBmcm9tICI8VTBGNTY+PFUwRjQyPjxVMEY2MD4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWdhLWItcmE+IGZyb20gIjxVMEY1Nj48VTBGNDI+PFUwRjYyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZ2EtYi1lPiBmcm9tICI8VTBGNTY+PFUwRjQyPjxVMEY3QT4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWdhLWItbz4gZnJvbSAiPFUwRjU2PjxVMEY0Mj48VTBGN0M+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1nYS1iLV95YT4gZnJvbSAiPFUwRjU2PjxVMEY0Mj48VTBGQjE+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1nYS1iLV9yYT4gZnJvbSAiPFUwRjU2PjxVMEY0Mj48VTBGQjI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1nYS1iLV9sYT4gZnJvbSAiPFUwRjU2PjxVMEY0Mj48VTBGQjM+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1nYS1tLXJhPiBmcm9tICI8VTBGNTg+PFUwRjQyPjxVMEY2Mj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWdhLW0tbGE+IGZyb20gIjxVMEY1OD48VTBGNDI+PFUwRjYzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZ2EtbS11PiBmcm9tICI8VTBGNTg+PFUwRjQyPjxVMEY3ND4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWdhLW0tZT4gZnJvbSAiPFUwRjU4PjxVMEY0Mj48VTBGN0E+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1nYS1tLW8+IGZyb20gIjxVMEY1OD48VTBGNDI+PFUwRjdDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZ2EtbS1feWE+IGZyb20gIjxVMEY1OD48VTBGNDI+PFUwRkIxPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZ2EtbS1fcmE+IGZyb20gIjxVMEY1OD48VTBGNDI+PFUwRkIyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZ2EtYS1nYT4gZnJvbSAiPFUwRjYwPjxVMEY0Mj48VTBGNDI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1nYS1hLW5nYT4gZnJvbSAiPFUwRjYwPjxVMEY0Mj48VTBGNDQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1nYS1hLWRhPiBmcm9tICI8VTBGNjA+PFUwRjQyPjxVMEY1MT4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWdhLWEtbmE+IGZyb20gIjxVMEY2MD48VTBGNDI+PFUwRjUzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZ2EtYS1iYT4gZnJvbSAiPFUwRjYwPjxVMEY0Mj48VTBGNTY+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1nYS1hLW1hPiBmcm9tICI8VTBGNjA+PFUwRjQyPjxVMEY1OD4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWdhLWEtbWEyPiBmcm9tICI8VTBGNjA+PFUwRjQyPjxVMEY3RT4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWdhLWEtLWE+IGZyb20gIjxVMEY2MD48VTBGNDI+PFUwRjYwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZ2EtYS1yYT4gZnJvbSAiPFUwRjYwPjxVMEY0Mj48VTBGNjI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1nYS1hLWxhPiBmcm9tICI8VTBGNjA+PFUwRjQyPjxVMEY2Mz4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWdhLWEtc2E+IGZyb20gIjxVMEY2MD48VTBGNDI+PFUwRjY2PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZ2EtYS1pPiBmcm9tICI8VTBGNjA+PFUwRjQyPjxVMEY3Mj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWdhLWEtdT4gZnJvbSAiPFUwRjYwPjxVMEY0Mj48VTBGNzQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1nYS1hLWU+IGZyb20gIjxVMEY2MD48VTBGNDI+PFUwRjdBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZ2EtYS1vPiBmcm9tICI8VTBGNjA+PFUwRjQyPjxVMEY3Qz4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWdhLWEtX3lhPiBmcm9tICI8VTBGNjA+PFUwRjQyPjxVMEZCMT4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWdhLWEtX3JhPiBmcm9tICI8VTBGNjA+PFUwRjQyPjxVMEZCMj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWdhLXI+IGZyb20gIjxVMEY2Mj48VTBGOTI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1nYS1sPiBmcm9tICI8VTBGNjM+PFUwRjkyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZ2Etcz4gZnJvbSAiPFUwRjY2PjxVMEY5Mj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWdhLWItcj4gZnJvbSAiPFUwRjU2PjxVMEY2Mj48VTBGOTI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1nYS1iLXM+IGZyb20gIjxVMEY1Nj48VTBGNjY+PFUwRjkyPiIKKworJSBuZ2EtcmFkaWNhbHMKKyUgCWFzIHRoZXJlIGFyZSBhbWJpZ3VvdXMsIHRoZSBuZXh0IGxldHRlciBoYXMgdG8gYmUgYWRkZWQgdG9vOworJQlzbyB0aGUgPHJhZC1uZ2EtKj4gYXJlIGluIGZhY3QgZG91YmxlIGVsZW1lbnRzOiB0aGUgbmdhLXJhZGljYWwKKyUJaXRzZWxmLCBhbmQgdGhlIGZvbGxvd2luZyBsZXR0ZXIuCitjb2xsYXRpbmctc3ltYm9sIDxUSUItTkdBLVJfRD4gJSBhbWJpZ3VvdXMKK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1OR0EtUl9NPiAlIGFtYmlndW91cworY29sbGF0aW5nLXN5bWJvbCA8VElCLU5HQS1SX1I+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItTkdBLVJfTD4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1OR0EtUl9TPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLU5HQS1SX0JSPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLU5HQS1SX0JTPgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1uZ2EtZC1nYT4gZnJvbSAiPFUwRjUxPjxVMEY0ND48VTBGNDI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1uZ2EtZC1uZ2E+IGZyb20gIjxVMEY1MT48VTBGNDQ+PFUwRjQ0PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtbmdhLWQtbmE+IGZyb20gIjxVMEY1MT48VTBGNDQ+PFUwRjUzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtbmdhLWQtcmE+IGZyb20gIjxVMEY1MT48VTBGNDQ+PFUwRjYyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtbmdhLWQtdT4gZnJvbSAiPFUwRjUxPjxVMEY0ND48VTBGNzQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1uZ2EtZC1vPiBmcm9tICI8VTBGNTE+PFUwRjQ0PjxVMEY3Qz4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLW5nYS1yPiBmcm9tICI8VTBGNjI+PFUwRjQ0PjxVMEY5ND4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLW5nYS1sPiBmcm9tICI8VTBGNjM+PFUwRjQ0PjxVMEY5ND4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLW5nYS1zPiBmcm9tICI8VTBGNjY+PFUwRjQ0PjxVMEY5ND4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLW5nYS1iLXI+IGZyb20gIjxVMEY1Nj48VTBGNjI+PFUwRjk0PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtbmdhLWItcz4gZnJvbSAiPFUwRjU2PjxVMEY2Nj48VTBGOTQ+IgorCislIGNhLXJhZGljYWxzCitjb2xsYXRpbmctc3ltYm9sIDxUSUItQ0EtUl9HPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLUNBLVJfQj4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1DQS1SX0w+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItQ0EtUl9CTD4KK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtY2EtZz4gZnJvbSAiPFUwRjQyPjxVMEY0NT4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWNhLWI+IGZyb20gIjxVMEY1Nj48VTBGNDU+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1jYS1sPiBmcm9tICI8VTBGNjM+PFUwRjk1PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtY2EtYi1sPiBmcm9tICI8VTBGNTY+PFUwRjYzPjxVMEY5NT4iCisKKyUgY2hhLXJhZGljYWxzCitjb2xsYXRpbmctc3ltYm9sIDxUSUItQ0hBLVJfTT4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1DSEEtUl9BPgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1jaGEtbT4gZnJvbSAiPFUwRjU4PjxVMEY0Nj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWNoYS1hPiBmcm9tICI8VTBGNjA+PFUwRjQ2PiIKKworJSBqYS1yYWRpY2FscworY29sbGF0aW5nLXN5bWJvbCA8VElCLUpBLVJfTT4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1KQS1SX0E+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItSkEtUl9SPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLUpBLVJfTD4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1KQS1SX0JSPgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1qYS1tPiBmcm9tICI8VTBGNTg+PFUwRjQ3PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtamEtYT4gZnJvbSAiPFUwRjYwPjxVMEY0Nz4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWphLXI+IGZyb20gIjxVMEY2Mj48VTBGOTc+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1qYS1sPiBmcm9tICI8VTBGNjM+PFUwRjk3PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtamEtYi1yPiBmcm9tICI8VTBGNTY+PFUwRjYyPjxVMEY5Nz4iCisKKyUgbnlhLXJhZGljYWxzCitjb2xsYXRpbmctc3ltYm9sIDxUSUItTllBLVJfRz4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1OWUEtUl9NPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLU5ZQS1SX1I+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItTllBLVJfUz4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1OWUEtUl9CUj4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1OWUEtUl9CUz4KK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtbnlhLWc+IGZyb20gIjxVMEY0Mj48VTBGNDk+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1ueWEtbT4gZnJvbSAiPFUwRjU4PjxVMEY0OT4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLW55YS1yPiBmcm9tICI8VTBGNjI+PFUwRjk5PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtbnlhLXM+IGZyb20gIjxVMEY2Nj48VTBGOTk+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1ueWEtYi1yPiBmcm9tICI8VTBGNTY+PFUwRjYyPjxVMEY5OT4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLW55YS1iLXM+IGZyb20gIjxVMEY1Nj48VTBGNjY+PFUwRjk5PiIKKworJSB0YS1yYWRpY2FscworY29sbGF0aW5nLXN5bWJvbCA8VElCLVRBLVJfRz4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1UQS1SX0I+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItVEEtUl9SPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLVRBLVJfTD4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1UQS1SX1M+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItVEEtUl9CUj4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1UQS1SX0JMPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLVRBLVJfQlM+Citjb2xsYXRpbmctZWxlbWVudCA8cmFkLXRhLWc+IGZyb20gIjxVMEY0Mj48VTBGNEY+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC10YS1iPiBmcm9tICI8VTBGNTY+PFUwRjRGPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtdGEtcj4gZnJvbSAiPFUwRjYyPjxVMEY5Rj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLXRhLWw+IGZyb20gIjxVMEY2Mz48VTBGOUY+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC10YS1zPiBmcm9tICI8VTBGNjY+PFUwRjlGPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtdGEtYi1yPiBmcm9tICI8VTBGNTY+PFUwRjYyPjxVMEY5Rj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLXRhLWItbD4gZnJvbSAiPFUwRjU2PjxVMEY2Mz48VTBGOUY+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC10YS1iLXM+IGZyb20gIjxVMEY1Nj48VTBGNjY+PFUwRjlGPiIKKworJSB0aGEtcmFkaWNhbHMKK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1USEEtUl9NPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLVRIQS1SX0E+Citjb2xsYXRpbmctZWxlbWVudCA8cmFkLXRoYS1tPiBmcm9tICI8VTBGNTg+PFUwRjUwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtdGhhLWE+IGZyb20gIjxVMEY2MD48VTBGNTA+IgorCislIGRhLXJhZGljYWxzCislIAlhcyB0aGVyZSBhcmUgYW1iaWd1b3VzLCB0aGUgbmV4dCBsZXR0ZXIgaGFzIHRvIGJlIGFkZGVkIHRvbzsKKyUJc28gdGhlIDxyYWQtZGEtKj4gYXJlIGluIGZhY3QgZG91YmxlIGVsZW1lbnRzOiB0aGUgZGEtcmFkaWNhbAorJQlpdHNlbGYsIGFuZCB0aGUgZm9sbG93aW5nIGxldHRlci4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1EQS1SX0c+ICUgYW1iaWd1b3VzCitjb2xsYXRpbmctc3ltYm9sIDxUSUItREEtUl9CPiAlIGFtYmlndW91cworY29sbGF0aW5nLXN5bWJvbCA8VElCLURBLVJfTT4gJSBhbWJpZ3VvdXMKK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1EQS1SX0E+ICUgYW1iaWd1b3VzCitjb2xsYXRpbmctc3ltYm9sIDxUSUItREEtUl9SPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLURBLVJfTD4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1EQS1SX1M+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItREEtUl9CUj4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1EQS1SX0JMPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLURBLVJfQlM+Citjb2xsYXRpbmctZWxlbWVudCA8cmFkLWRhLWctZ2E+IGZyb20gIjxVMEY0Mj48VTBGNTE+PFUwRjQyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZGEtZy1uZ2E+IGZyb20gIjxVMEY0Mj48VTBGNTE+PFUwRjQ0PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZGEtZy1uYT4gZnJvbSAiPFUwRjQyPjxVMEY1MT48VTBGNTM+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1kYS1nLWJhPiBmcm9tICI8VTBGNDI+PFUwRjUxPjxVMEY1Nj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWRhLWctbWE+IGZyb20gIjxVMEY0Mj48VTBGNTE+PFUwRjU4PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZGEtZy1tYTI+IGZyb20gIjxVMEY0Mj48VTBGNTE+PFUwRjdFPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZGEtZy0tYT4gZnJvbSAiPFUwRjQyPjxVMEY1MT48VTBGNjA+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1kYS1nLXJhPiBmcm9tICI8VTBGNDI+PFUwRjUxPjxVMEY2Mj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWRhLWctbGE+IGZyb20gIjxVMEY0Mj48VTBGNTE+PFUwRjYzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZGEtZy1zYT4gZnJvbSAiPFUwRjQyPjxVMEY1MT48VTBGNjY+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1kYS1nLWk+IGZyb20gIjxVMEY0Mj48VTBGNTE+PFUwRjcyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZGEtZy11PiBmcm9tICI8VTBGNDI+PFUwRjUxPjxVMEY3ND4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWRhLWctZT4gZnJvbSAiPFUwRjQyPjxVMEY1MT48VTBGN0E+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1kYS1nLW8+IGZyb20gIjxVMEY0Mj48VTBGNTE+PFUwRjdDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZGEtYi1nYT4gZnJvbSAiPFUwRjU2PjxVMEY1MT48VTBGNDI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1kYS1iLW1hPiBmcm9tICI8VTBGNTY+PFUwRjUxPjxVMEY1OD4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWRhLWItbWEyPiBmcm9tICI8VTBGNTY+PFUwRjUxPjxVMEY3RT4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWRhLWItLWE+IGZyb20gIjxVMEY1Nj48VTBGNTE+PFUwRjYwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZGEtYi1yYT4gZnJvbSAiPFUwRjU2PjxVMEY1MT48VTBGNjI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1kYS1iLWxhPiBmcm9tICI8VTBGNTY+PFUwRjUxPjxVMEY2Mz4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWRhLWItc2E+IGZyb20gIjxVMEY1Nj48VTBGNTE+PFUwRjY2PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZGEtYi11PiBmcm9tICI8VTBGNTY+PFUwRjUxPjxVMEY3ND4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWRhLWItZT4gZnJvbSAiPFUwRjU2PjxVMEY1MT48VTBGN0E+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1kYS1iLW8+IGZyb20gIjxVMEY1Nj48VTBGNTE+PFUwRjdDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZGEtbS1nYT4gZnJvbSAiPFUwRjU4PjxVMEY1MT48VTBGNDI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1kYS1tLW5nYT4gZnJvbSAiPFUwRjU4PjxVMEY1MT48VTBGNDQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1kYS1tLW5hPiBmcm9tICI8VTBGNTg+PFUwRjUxPjxVMEY1Mz4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWRhLW0tLWE+IGZyb20gIjxVMEY1OD48VTBGNTE+PFUwRjYwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZGEtbS1yYT4gZnJvbSAiPFUwRjU4PjxVMEY1MT48VTBGNjI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1kYS1tLXU+IGZyb20gIjxVMEY1OD48VTBGNTE+PFUwRjc0PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZGEtbS1lPiBmcm9tICI8VTBGNTg+PFUwRjUxPjxVMEY3QT4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWRhLW0tbz4gZnJvbSAiPFUwRjU4PjxVMEY1MT48VTBGN0M+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1kYS1hLWdhPiBmcm9tICI8VTBGNjA+PFUwRjUxPjxVMEY0Mj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWRhLWEtbmdhPiBmcm9tICI8VTBGNjA+PFUwRjUxPjxVMEY0ND4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWRhLWEtZGE+IGZyb20gIjxVMEY2MD48VTBGNTE+PFUwRjUxPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZGEtYS1uYT4gZnJvbSAiPFUwRjYwPjxVMEY1MT48VTBGNTM+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1kYS1hLWJhPiBmcm9tICI8VTBGNjA+PFUwRjUxPjxVMEY1Nj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWRhLWEtbWE+IGZyb20gIjxVMEY2MD48VTBGNTE+PFUwRjU4PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZGEtYS1tYTI+IGZyb20gIjxVMEY2MD48VTBGNTE+PFUwRjdFPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZGEtYS13YT4gZnJvbSAiPFUwRjYwPjxVMEY1MT48VTBGNUQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1kYS1hLS1hPiBmcm9tICI8VTBGNjA+PFUwRjUxPjxVMEY2MD4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWRhLWEtcmE+IGZyb20gIjxVMEY2MD48VTBGNTE+PFUwRjYyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZGEtYS1sYT4gZnJvbSAiPFUwRjYwPjxVMEY1MT48VTBGNjM+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1kYS1hLXNhPiBmcm9tICI8VTBGNjA+PFUwRjUxPjxVMEY2Nj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWRhLWEtdT4gZnJvbSAiPFUwRjYwPjxVMEY1MT48VTBGNzQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1kYS1hLWU+IGZyb20gIjxVMEY2MD48VTBGNTE+PFUwRjdBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZGEtYS1vPiBmcm9tICI8VTBGNjA+PFUwRjUxPjxVMEY3Qz4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWRhLWEtX3JhPiBmcm9tICI8VTBGNjA+PFUwRjUxPjxVMEZCMj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWRhLXI+IGZyb20gIjxVMEY2Mj48VTBGQTE+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1kYS1sPiBmcm9tICI8VTBGNjM+PFUwRkExPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZGEtcz4gZnJvbSAiPFUwRjY2PjxVMEZBMT4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWRhLWItcj4gZnJvbSAiPFUwRjU2PjxVMEY2Mj48VTBGQTE+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1kYS1iLWw+IGZyb20gIjxVMEY1Nj48VTBGNjM+PFUwRkExPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZGEtYi1zPiBmcm9tICI8VTBGNTY+PFUwRjY2PjxVMEZBMT4iCisKKyUgbmEtcmFkaWNhbHMKKyUgICAgICAgYXMgdGhlcmUgYXJlIGFtYmlndW91cywgdGhlIG5leHQgbGV0dGVyIGhhcyB0byBiZSBhZGRlZCB0b287CislICAgICAgIHNvIHRoZSA8cmFkLW5hLSo+IGFyZSBpbiBmYWN0IGRvdWJsZSBlbGVtZW50czogdGhlIG5hLXJhZGljYWwKKyUgICAgICAgaXRzZWxmLCBhbmQgdGhlIGZvbGxvd2luZyBsZXR0ZXIuCitjb2xsYXRpbmctc3ltYm9sIDxUSUItTkEtUl9HPiAlIGFtYmlndW91cworY29sbGF0aW5nLXN5bWJvbCA8VElCLU5BLVJfTT4gJSBhbWJpZ3VvdXMKK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1OQS1SX1I+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItTkEtUl9TPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLU5BLVJfQlI+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItTkEtUl9CUz4KK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtbmEtZy1nYT4gZnJvbSAiPFUwRjQyPjxVMEY1Mz48VTBGNDI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1uYS1nLW5nYT4gZnJvbSAiPFUwRjQyPjxVMEY1Mz48VTBGNDQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1uYS1nLWRhPiBmcm9tICI8VTBGNDI+PFUwRjUzPjxVMEY1MT4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLW5hLWctbmE+IGZyb20gIjxVMEY0Mj48VTBGNTM+PFUwRjUzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtbmEtZy1tYT4gZnJvbSAiPFUwRjQyPjxVMEY1Mz48VTBGNTg+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1uYS1nLW1hMj4gZnJvbSAiPFUwRjQyPjxVMEY1Mz48VTBGN0U+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1uYS1nLXdhPiBmcm9tICI8VTBGNDI+PFUwRjUzPjxVMEY1RD4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLW5hLWctLWE+IGZyb20gIjxVMEY0Mj48VTBGNTM+PFUwRjYwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtbmEtZy1zYT4gZnJvbSAiPFUwRjQyPjxVMEY1Mz48VTBGNjY+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1uYS1nLXU+IGZyb20gIjxVMEY0Mj48VTBGNTM+PFUwRjc0PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtbmEtZy1vPiBmcm9tICI8VTBGNDI+PFUwRjUzPjxVMEY3Qz4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLW5hLW0tZ2E+IGZyb20gIjxVMEY1OD48VTBGNTM+PFUwRjQyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtbmEtbS1uZ2E+IGZyb20gIjxVMEY1OD48VTBGNTM+PFUwRjQ0PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtbmEtbS1uYT4gZnJvbSAiPFUwRjU4PjxVMEY1Mz48VTBGNTM+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1uYS1tLWJhPiBmcm9tICI8VTBGNTg+PFUwRjUzPjxVMEY1Nj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLW5hLW0tbWE+IGZyb20gIjxVMEY1OD48VTBGNTM+PFUwRjU4PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtbmEtbS1tYTI+IGZyb20gIjxVMEY1OD48VTBGNTM+PFUwRjdFPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtbmEtbS0tYT4gZnJvbSAiPFUwRjU4PjxVMEY1Mz48VTBGNjA+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1uYS1tLXJhPiBmcm9tICI8VTBGNTg+PFUwRjUzPjxVMEY2Mj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLW5hLW0tbGE+IGZyb20gIjxVMEY1OD48VTBGNTM+PFUwRjYzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtbmEtbS11PiBmcm9tICI8VTBGNTg+PFUwRjUzPjxVMEY3ND4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLW5hLW0tZT4gZnJvbSAiPFUwRjU4PjxVMEY1Mz48VTBGN0E+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1uYS1tLW8+IGZyb20gIjxVMEY1OD48VTBGNTM+PFUwRjdDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtbmEtcj4gZnJvbSAiPFUwRjYyPjxVMEZBMz4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLW5hLXM+IGZyb20gIjxVMEY2Nj48VTBGQTM+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1uYS1iLXI+IGZyb20gIjxVMEY1Nj48VTBGNjI+PFUwRkEzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtbmEtYi1zPiBmcm9tICI8VTBGNTY+PFUwRjY2PjxVMEZBMz4iCisKKyUgcGEtcmFkaWNhbHMKKyUgICAgICAgYXMgdGhlcmUgYXJlIGFtYmlndW91cywgdGhlIG5leHQgbGV0dGVyIGhhcyB0byBiZSBhZGRlZCB0b287CislICAgICAgIHNvIHRoZSA8cmFkLXBhLSo+IGFyZSBpbiBmYWN0IGRvdWJsZSBlbGVtZW50czogdGhlIHBhLXJhZGljYWwKKyUgICAgICAgaXRzZWxmLCBhbmQgdGhlIGZvbGxvd2luZyBsZXR0ZXIuCitjb2xsYXRpbmctc3ltYm9sIDxUSUItUEEtUl9EPiAlIGFtYmlndW91cyBpbiBEem9uZ2toYQorY29sbGF0aW5nLXN5bWJvbCA8VElCLVBBLVJfTD4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1QQS1SX1M+Citjb2xsYXRpbmctZWxlbWVudCA8cmFkLXBhLWQtZ2E+IGZyb20gIjxVMEY1MT48VTBGNTQ+PFUwRjQyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtcGEtZC1uZ2E+IGZyb20gIjxVMEY1MT48VTBGNTQ+PFUwRjQ0PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtcGEtZC1kYT4gZnJvbSAiPFUwRjUxPjxVMEY1ND48VTBGNTE+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1wYS1kLS1hPiBmcm9tICI8VTBGNTE+PFUwRjU0PjxVMEY2MD4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLXBhLWQtcmE+IGZyb20gIjxVMEY1MT48VTBGNTQ+PFUwRjYyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtcGEtZC1sYT4gZnJvbSAiPFUwRjUxPjxVMEY1ND48VTBGNjM+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1wYS1kLXNhPiBmcm9tICI8VTBGNTE+PFUwRjU0PjxVMEY2Nj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLXBhLWQtdT4gZnJvbSAiPFUwRjUxPjxVMEY1ND48VTBGNzQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1wYS1kLWU+IGZyb20gIjxVMEY1MT48VTBGNTQ+PFUwRjdBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtcGEtZC1vLWdhPiBmcm9tICI8VTBGNTE+PFUwRjU0PjxVMEY3Qz48VTBGNDI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1wYS1kLW8tbmdhPiBmcm9tICI8VTBGNTE+PFUwRjU0PjxVMEY3Qz48VTBGNDQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1wYS1kLW8tZGE+IGZyb20gIjxVMEY1MT48VTBGNTQ+PFUwRjdDPjxVMEY1MT4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLXBhLWQtby1uYT4gZnJvbSAiPFUwRjUxPjxVMEY1ND48VTBGN0M+PFUwRjUzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtcGEtZC1vLXJhPiBmcm9tICI8VTBGNTE+PFUwRjU0PjxVMEY3Qz48VTBGNjI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1wYS1kLV95YT4gZnJvbSAiPFUwRjUxPjxVMEY1ND48VTBGQjE+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1wYS1kLV9yYT4gZnJvbSAiPFUwRjUxPjxVMEY1ND48VTBGQjI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1wYS1sPiBmcm9tICI8VTBGNjM+PFUwRkE0PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtcGEtcz4gZnJvbSAiPFUwRjY2PjxVMEZBND4iCisKKyUgcGhhLXJhZGljYWxzCitjb2xsYXRpbmctc3ltYm9sIDxUSUItUEhBLVJfQT4KK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtcGhhLWE+IGZyb20gIjxVMEY2MD48VTBGNTU+IgorCislIGJhLXJhZGljYWxzCislICAgICAgIGFzIHRoZXJlIGFyZSBhbWJpZ3VvdXMsIHRoZSBuZXh0IGxldHRlciBoYXMgdG8gYmUgYWRkZWQgdG9vOworJSAgICAgICBzbyB0aGUgPHJhZC1iYS0qPiBhcmUgaW4gZmFjdCBkb3VibGUgZWxlbWVudHM6IHRoZSBiYS1yYWRpY2FsCislICAgICAgIGl0c2VsZiwgYW5kIHRoZSBmb2xsb3dpbmcgbGV0dGVyLgorY29sbGF0aW5nLXN5bWJvbCA8VElCLUJBLVJfRD4gJSBhbWJpZ3VvdXMKK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1CQS1SX0E+ICUgYW1iaWd1b3VzCitjb2xsYXRpbmctc3ltYm9sIDxUSUItQkEtUl9SPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLUJBLVJfTD4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1CQS1SX1M+Citjb2xsYXRpbmctZWxlbWVudCA8cmFkLWJhLWQtZ2E+IGZyb20gIjxVMEY1MT48VTBGNTY+PFUwRjQyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtYmEtZC1uZ2E+IGZyb20gIjxVMEY1MT48VTBGNTY+PFUwRjQ0PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtYmEtZC1kYT4gZnJvbSAiPFUwRjUxPjxVMEY1Nj48VTBGNTE+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1iYS1kLW5hPiBmcm9tICI8VTBGNTE+PFUwRjU2PjxVMEY1Mz4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWJhLWQtYmE+IGZyb20gIjxVMEY1MT48VTBGNTY+PFUwRjU2PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtYmEtZC0tYT4gZnJvbSAiPFUwRjUxPjxVMEY1Nj48VTBGNjA+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1iYS1kLXJhPiBmcm9tICI8VTBGNTE+PFUwRjU2PjxVMEY2Mj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWJhLWQtbGE+IGZyb20gIjxVMEY1MT48VTBGNTY+PFUwRjYzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtYmEtZC1zYT4gZnJvbSAiPFUwRjUxPjxVMEY1Nj48VTBGNjY+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1iYS1kLXU+IGZyb20gIjxVMEY1MT48VTBGNTY+PFUwRjc0PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtYmEtZC1lPiBmcm9tICI8VTBGNTE+PFUwRjU2PjxVMEY3QT4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWJhLWQtbz4gZnJvbSAiPFUwRjUxPjxVMEY1Nj48VTBGN0M+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1iYS1kLV95YT4gZnJvbSAiPFUwRjUxPjxVMEY1Nj48VTBGQjE+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1iYS1kLV9yYT4gZnJvbSAiPFUwRjUxPjxVMEY1Nj48VTBGQjI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1iYS1hLWdhPiBmcm9tICI8VTBGNjA+PFUwRjU2PjxVMEY0Mj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWJhLWEtbmdhPiBmcm9tICI8VTBGNjA+PFUwRjU2PjxVMEY0ND4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWJhLWEtZGE+IGZyb20gIjxVMEY2MD48VTBGNTY+PFUwRjUxPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtYmEtYS1uYT4gZnJvbSAiPFUwRjYwPjxVMEY1Nj48VTBGNTM+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1iYS1hLWJhPiBmcm9tICI8VTBGNjA+PFUwRjU2PjxVMEY1Nj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWJhLWEtbWE+IGZyb20gIjxVMEY2MD48VTBGNTY+PFUwRjU4PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtYmEtYS1tYTI+IGZyb20gIjxVMEY2MD48VTBGNTY+PFUwRjdFPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtYmEtYS0tYT4gZnJvbSAiPFUwRjYwPjxVMEY1Nj48VTBGNjA+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1iYS1hLXJhPiBmcm9tICI8VTBGNjA+PFUwRjU2PjxVMEY2Mj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWJhLWEtbGE+IGZyb20gIjxVMEY2MD48VTBGNTY+PFUwRjYzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtYmEtYS1pPiBmcm9tICI8VTBGNjA+PFUwRjU2PjxVMEY3Mj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWJhLWEtdT4gZnJvbSAiPFUwRjYwPjxVMEY1Nj48VTBGNzQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1iYS1hLWU+IGZyb20gIjxVMEY2MD48VTBGNTY+PFUwRjdBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtYmEtYS1vPiBmcm9tICI8VTBGNjA+PFUwRjU2PjxVMEY3Qz4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWJhLWEtX3lhPiBmcm9tICI8VTBGNjA+PFUwRjU2PjxVMEZCMT4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWJhLWEtX3JhPiBmcm9tICI8VTBGNjA+PFUwRjU2PjxVMEZCMj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWJhLXI+IGZyb20gIjxVMEY2Mj48VTBGQTY+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1iYS1sPiBmcm9tICI8VTBGNjM+PFUwRkE2PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtYmEtcz4gZnJvbSAiPFUwRjY2PjxVMEZBNj4iCisKKyUgbWEtcmFkaWNhbHMKKyUgICAgICAgYXMgdGhlcmUgYXJlIGFtYmlndW91cywgdGhlIG5leHQgbGV0dGVyIGhhcyB0byBiZSBhZGRlZCB0b287CislICAgICAgIHNvIHRoZSA8cmFkLW1hLSo+IGFyZSBpbiBmYWN0IGRvdWJsZSBlbGVtZW50czogdGhlIG1hLXJhZGljYWwKKyUgICAgICAgaXRzZWxmLCBhbmQgdGhlIGZvbGxvd2luZyBsZXR0ZXIuCitjb2xsYXRpbmctc3ltYm9sIDxUSUItTUEtUl9EPiAlIGFtYmlndW91cworY29sbGF0aW5nLXN5bWJvbCA8VElCLU1BLVJfUj4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1NQS1SX1M+Citjb2xsYXRpbmctZWxlbWVudCA8cmFkLW1hLWQtZ2E+IGZyb20gIjxVMEY1MT48VTBGNTg+PFUwRjQyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtbWEtZC1uZ2E+IGZyb20gIjxVMEY1MT48VTBGNTg+PFUwRjQ0PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtbWEtZC1uYT4gZnJvbSAiPFUwRjUxPjxVMEY1OD48VTBGNTM+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1tYS1kLXdhPiBmcm9tICI8VTBGNTE+PFUwRjU4PjxVMEY1RD4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLW1hLWQtLWE+IGZyb20gIjxVMEY1MT48VTBGNTg+PFUwRjYwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtbWEtZC1yYT4gZnJvbSAiPFUwRjUxPjxVMEY1OD48VTBGNjI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1tYS1kLXNhPiBmcm9tICI8VTBGNTE+PFUwRjU4PjxVMEY2Nj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLW1hLWQtaT4gZnJvbSAiPFUwRjUxPjxVMEY1OD48VTBGNzI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1tYS1kLXU+IGZyb20gIjxVMEY1MT48VTBGNTg+PFUwRjc0PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtbWEtZC1lPiBmcm9tICI8VTBGNTE+PFUwRjU4PjxVMEY3QT4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLW1hLWQtby1kYT4gZnJvbSAiPFUwRjUxPjxVMEY1OD48VTBGN0M+PFUwRjUxPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtbWEtZC1feWE+IGZyb20gIjxVMEY1MT48VTBGNTg+PFUwRkIxPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtbWEtcj4gZnJvbSAiPFUwRjYyPjxVMEZBOD4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLW1hLXM+IGZyb20gIjxVMEY2Nj48VTBGQTg+IgorCislIHRzYS1yYWRpY2FscworY29sbGF0aW5nLXN5bWJvbCA8VElCLVRTQS1SX0c+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItVFNBLVJfQj4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1UU0EtUl9SPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLVRTQS1SX1M+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItVFNBLVJfQlI+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItVFNBLVJfQlM+Citjb2xsYXRpbmctZWxlbWVudCA8cmFkLXRzYS1nPiBmcm9tICI8VTBGNDI+PFUwRjU5PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtdHNhLWI+IGZyb20gIjxVMEY1Nj48VTBGNTk+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC10c2Etcj4gZnJvbSAiPFUwRjYyPjxVMEZBOT4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLXRzYS1zPiBmcm9tICI8VTBGNjY+PFUwRkE5PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtdHNhLWItcj4gZnJvbSAiPFUwRjU2PjxVMEY2Mj48VTBGQTk+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC10c2EtYi1zPiBmcm9tICI8VTBGNTY+PFUwRjY2PjxVMEZBOT4iCisKKyUgdHNoYS1yYWRpY2FscworY29sbGF0aW5nLXN5bWJvbCA8VElCLVRTSEEtUl9NPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLVRTSEEtUl9BPgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC10c2hhLW0+IGZyb20gIjxVMEY1OD48VTBGNUE+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC10c2hhLWE+IGZyb20gIjxVMEY2MD48VTBGNUE+IgorCislIGR6YS1yYWRpY2FscworY29sbGF0aW5nLXN5bWJvbCA8VElCLURaQS1SX00+Citjb2xsYXRpbmctc3ltYm9sIDxUSUItRFpBLVJfQT4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1EWkEtUl9SPgorY29sbGF0aW5nLXN5bWJvbCA8VElCLURaQS1SX0JSPgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1kemEtbT4gZnJvbSAiPFUwRjU4PjxVMEY1Qj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLWR6YS1hPiBmcm9tICI8VTBGNjA+PFUwRjVCPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtZHphLXI+IGZyb20gIjxVMEY2MD48VTBGQUI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1kemEtYi1yPiBmcm9tICI8VTBGNTY+PFUwRjYyPjxVMEZBQj4iCisKKyUgemhhLXJhZGljYWxzCitjb2xsYXRpbmctc3ltYm9sIDxUSUItWkhBLVJfRz4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1aSEEtUl9CPgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC16aGEtZz4gZnJvbSAiPFUwRjQyPjxVMEY1RT4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLXpoYS1iPiBmcm9tICI8VTBGNTY+PFUwRjVFPiIKKworJSB6YS1yYWRpY2FscworY29sbGF0aW5nLXN5bWJvbCA8VElCLVpBLVJfRz4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1aQS1SX0I+Citjb2xsYXRpbmctZWxlbWVudCA8cmFkLXphLWc+IGZyb20gIjxVMEY0Mj48VTBGNUY+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC16YS1iPiBmcm9tICI8VTBGNTY+PFUwRjVGPiIKKworJSB5YS1yYWRpY2FscworY29sbGF0aW5nLXN5bWJvbCA8VElCLVlBLVJfRz4KK2NvbGxhdGluZy1lbGVtZW50IDxyYWQteWEtZz4gZnJvbSAiPFUwRjQyPjxVMEY2MT4iCisKKyUgcmEtcmFkaWNhbHMKKyUgICAgICAgYXMgdGhlcmUgYXJlIGFtYmlndW91cywgdGhlIG5leHQgbGV0dGVyIGhhcyB0byBiZSBhZGRlZCB0b287CislICAgICAgIHNvIHRoZSA8cmFkLXJhLSo+IGFyZSBpbiBmYWN0IGRvdWJsZSBlbGVtZW50czogdGhlIHJhLXJhZGljYWwKKyUgICAgICAgaXRzZWxmLCBhbmQgdGhlIGZvbGxvd2luZyBsZXR0ZXIuCitjb2xsYXRpbmctc3ltYm9sIDxUSUItUkEtUl9CPiAlIGFtYmlndW91cworY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1yYS1iLWxhPiBmcm9tICI8VTBGNTY+PFUwRjYyPjxVMEZCMz4iCisKKyUgc2hhLXJhZGljYWxzCitjb2xsYXRpbmctc3ltYm9sIDxUSUItU0hBLVJfRz4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1TSEEtUl9CPgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1zaGEtZz4gZnJvbSAiPFUwRjQyPjxVMEY2ND4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLXNoYS1iPiBmcm9tICI8VTBGNTY+PFUwRjY0PiIKKworJSBzYS1yYWRpY2FscworJSAgICAgICBhcyB0aGVyZSBhcmUgYW1iaWd1b3VzLCB0aGUgbmV4dCBsZXR0ZXIgaGFzIHRvIGJlIGFkZGVkIHRvbzsKKyUgICAgICAgc28gdGhlIDxyYWQtc2EtKj4gYXJlIGluIGZhY3QgZG91YmxlIGVsZW1lbnRzOiB0aGUgc2EtcmFkaWNhbAorJSAgICAgICBpdHNlbGYsIGFuZCB0aGUgZm9sbG93aW5nIGxldHRlci4KK2NvbGxhdGluZy1zeW1ib2wgPFRJQi1TQS1SX0c+ICUgYW1iaWd1b3VzCitjb2xsYXRpbmctc3ltYm9sIDxUSUItU0EtUl9CPiAlIGFtYmlndW91cworY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1zYS1nLWdhPiBmcm9tICI8VTBGNDI+PFUwRjY2PjxVMEY0Mj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLXNhLWctbmdhPiBmcm9tICI8VTBGNDI+PFUwRjY2PjxVMEY0ND4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLXNhLWctZGE+IGZyb20gIjxVMEY0Mj48VTBGNjY+PFUwRjUxPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtc2EtZy1uYT4gZnJvbSAiPFUwRjQyPjxVMEY2Nj48VTBGNTM+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1zYS1nLWJhPiBmcm9tICI8VTBGNDI+PFUwRjY2PjxVMEY1Nj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLXNhLWctLWE+IGZyb20gIjxVMEY0Mj48VTBGNjY+PFUwRjYwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtc2EtZy1yYT4gZnJvbSAiPFUwRjQyPjxVMEY2Nj48VTBGNjI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1zYS1nLWxhPiBmcm9tICI8VTBGNDI+PFUwRjY2PjxVMEY2Mz4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLXNhLWctc2E+IGZyb20gIjxVMEY0Mj48VTBGNjY+PFUwRjY2PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtc2EtZy1pPiBmcm9tICI8VTBGNDI+PFUwRjY2PjxVMEY3Mj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLXNhLWctdT4gZnJvbSAiPFUwRjQyPjxVMEY2Nj48VTBGNzQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1zYS1nLWU+IGZyb20gIjxVMEY0Mj48VTBGNjY+PFUwRjdBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtc2EtZy1vPiBmcm9tICI8VTBGNDI+PFUwRjY2PjxVMEY3Qz4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLXNhLWItZ2E+IGZyb20gIjxVMEY1Nj48VTBGNjY+PFUwRjQyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtc2EtYi1uZ2E+IGZyb20gIjxVMEY1Nj48VTBGNjY+PFUwRjQ0PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtc2EtYi1kYT4gZnJvbSAiPFUwRjU2PjxVMEY2Nj48VTBGNTE+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1zYS1iLWJhPiBmcm9tICI8VTBGNTY+PFUwRjY2PjxVMEY1Nj4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLXNhLWItbWE+IGZyb20gIjxVMEY1Nj48VTBGNjY+PFUwRjU4PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtc2EtYi1tYTI+IGZyb20gIjxVMEY1Nj48VTBGNjY+PFUwRjdFPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtc2EtYi1yYT4gZnJvbSAiPFUwRjU2PjxVMEY2Nj48VTBGNjI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1zYS1iLWxhPiBmcm9tICI8VTBGNTY+PFUwRjY2PjxVMEY2Mz4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLXNhLWItaT4gZnJvbSAiPFUwRjU2PjxVMEY2Nj48VTBGNzI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1zYS1iLXU+IGZyb20gIjxVMEY1Nj48VTBGNjY+PFUwRjc0PiIKK2NvbGxhdGluZy1lbGVtZW50IDxyYWQtc2EtYi1lPiBmcm9tICI8VTBGNTY+PFUwRjY2PjxVMEY3QT4iCitjb2xsYXRpbmctZWxlbWVudCA8cmFkLXNhLWItbz4gZnJvbSAiPFUwRjU2PjxVMEY2Nj48VTBGN0M+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1zYS1iLV93YT4gZnJvbSAiPFUwRjU2PjxVMEY2Nj48VTBGQUQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1zYS1iLV9yYT4gZnJvbSAiPFUwRjU2PjxVMEY2Nj48VTBGQjI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1zYS1iLV9sYT4gZnJvbSAiPFUwRjU2PjxVMEY2Nj48VTBGQjM+IgorCislIGhhLXJhZGljYWxzCitjb2xsYXRpbmctc3ltYm9sIDxUSUItSEEtUl9MPgorY29sbGF0aW5nLWVsZW1lbnQgPHJhZC1oYS1sPiBmcm9tICI8VTBGNjM+PFUwRkI3PiIKKworJSBnZW5lcmljIGRlZmluaXRpb25zCityZW9yZGVyLWFmdGVyIDxBTUU+Cis8Tk9NPgorPFNVQj4KKworcmVvcmRlci1hZnRlciA8RFRUPgorPFBDVD4KKzxNQUM+Cis8VkFSPgorPFJfRz4KKzxSX0Q+Cis8Ul9CPgorPFJfTT4KKzxSX0E+Cis8Ul9SPgorPFJfTD4KKzxSX1M+Cis8Ul9CUj4KKzxSX0JMPgorPFJfQlM+CisKKyUgYSBiZXR0ZXIgcGxhY2UgdGhhbiBhZnRlciBjeXJpbGxpYyB5YSBzaG91bGQgYmUgZGVmaW5lZAorcmVvcmRlci1hZnRlciA8Q1lSLVlBPgorPFRJQi1LQT4KKzxUSUItS0EtUl9EPgorPFRJQi1LQS1SX0I+Cis8VElCLUtBLVJfUj4KKzxUSUItS0EtUl9MPgorPFRJQi1LQS1SX1M+Cis8VElCLUtBLVJfQlI+Cis8VElCLUtBLVJfQlM+Cis8VElCLUtIQT4KKzxUSUItS0hBLVJfTT4KKzxUSUItS0hBLVJfQT4KKzxUSUItR0E+Cis8VElCLUdBLVJfRD4KKzxUSUItR0EtUl9CPgorPFRJQi1HQS1SX00+Cis8VElCLUdBLVJfQT4KKzxUSUItR0EtUl9SPgorPFRJQi1HQS1SX0w+Cis8VElCLUdBLVJfUz4KKzxUSUItR0EtUl9CUj4KKzxUSUItR0EtUl9CUz4KKzxUSUItTkdBPgorPFRJQi1OR0EtUl9EPgorPFRJQi1OR0EtUl9NPgorPFRJQi1OR0EtUl9SPgorPFRJQi1OR0EtUl9MPgorPFRJQi1OR0EtUl9TPgorPFRJQi1OR0EtUl9CUj4KKzxUSUItTkdBLVJfQlM+Cis8VElCLUNBPgorPFRJQi1DQS1SX0c+Cis8VElCLUNBLVJfQj4KKzxUSUItQ0EtUl9MPgorPFRJQi1DQS1SX0JMPgorPFRJQi1DSEE+Cis8VElCLUNIQS1SX00+Cis8VElCLUNIQS1SX0E+Cis8VElCLUpBPgorPFRJQi1KQS1SX00+Cis8VElCLUpBLVJfQT4KKzxUSUItSkEtUl9SPgorPFRJQi1KQS1SX0w+Cis8VElCLUpBLVJfQlI+Cis8VElCLU5ZQT4KKzxUSUItTllBLVJfRz4KKzxUSUItTllBLVJfTT4KKzxUSUItTllBLVJfUj4KKzxUSUItTllBLVJfUz4KKzxUSUItTllBLVJfQlI+Cis8VElCLU5ZQS1SX0JTPgorPFRJQi1UQT4KKzxUSUItVEEtUl9HPgorPFRJQi1UQS1SX0I+Cis8VElCLVRBLVJfUj4KKzxUSUItVEEtUl9MPgorPFRJQi1UQS1SX1M+Cis8VElCLVRBLVJfQlI+Cis8VElCLVRBLVJfQkw+Cis8VElCLVRBLVJfQlM+Cis8VElCLVRIQT4KKzxUSUItVEhBLVJfTT4KKzxUSUItVEhBLVJfQT4KKzxUSUItREE+Cis8VElCLURBLVJfRz4KKzxUSUItREEtUl9CPgorPFRJQi1EQS1SX00+Cis8VElCLURBLVJfQT4KKzxUSUItREEtUl9SPgorPFRJQi1EQS1SX0w+Cis8VElCLURBLVJfUz4KKzxUSUItREEtUl9CUj4KKzxUSUItREEtUl9CTD4KKzxUSUItREEtUl9CUz4KKzxUSUItTkE+Cis8VElCLU5BLVJfRz4KKzxUSUItTkEtUl9NPgorPFRJQi1OQS1SX1I+Cis8VElCLU5BLVJfUz4KKzxUSUItTkEtUl9CUj4KKzxUSUItTkEtUl9CUz4KKzxUSUItUEE+Cis8VElCLVBBLVJfRD4KKzxUSUItUEEtUl9MPgorPFRJQi1QQS1SX1M+Cis8VElCLVBIQT4KKzxUSUItUEhBLVJfQT4KKzxUSUItQkE+Cis8VElCLUJBLVJfRD4KKzxUSUItQkEtUl9BPgorPFRJQi1CQS1SX1I+Cis8VElCLUJBLVJfTD4KKzxUSUItQkEtUl9TPgorPFRJQi1NQT4KKzxUSUItTUEtUl9EPgorPFRJQi1NQS1SX1I+Cis8VElCLU1BLVJfUz4KKzxUSUItVFNBPgorPFRJQi1UU0EtUl9HPgorPFRJQi1UU0EtUl9CPgorPFRJQi1UU0EtUl9SPgorPFRJQi1UU0EtUl9TPgorPFRJQi1UU0EtUl9CUj4KKzxUSUItVFNBLVJfQlM+Cis8VElCLVRTSEE+Cis8VElCLVRTSEEtUl9NPgorPFRJQi1UU0hBLVJfQT4KKzxUSUItRFpBPgorPFRJQi1EWkEtUl9NPgorPFRJQi1EWkEtUl9BPgorPFRJQi1EWkEtUl9SPgorPFRJQi1EWkEtUl9CUj4KKzxUSUItV0E+Cis8VElCLVpIQT4KKzxUSUItWkhBLVJfRz4KKzxUSUItWkhBLVJfQj4KKzxUSUItWkE+Cis8VElCLVpBLVJfRz4KKzxUSUItWkEtUl9CPgorPFRJQi0tQT4KKzxUSUItWUE+Cis8VElCLVlBLVJfRz4KKzxUSUItUkE+Cis8VElCLVJBLVJfQj4KKzxUSUItTEE+Cis8VElCLVNIQT4KKzxUSUItU0hBLVJfRz4KKzxUSUItU0hBLVJfQj4KKzxUSUItU0E+Cis8VElCLVNBLVJfRz4KKzxUSUItU0EtUl9CPgorPFRJQi1IQT4KKzxUSUItSEEtUl9MPgorPFRJQi1BPgorPFRJQi1JPgorPFRJQi1VPgorPFRJQi1FPgorPFRJQi1PPgorCislb3JkZXJfc3RhcnQgPFRJQkVUQU4+O2ZvcndhcmQ7Zm9yd2FyZDtmb3J3YXJkO2ZvcndhcmQscG9zaXRpb24KKworJSBzcGVjaWZpYyBkZWZpbml0aW9ucworcmVvcmRlci1hZnRlciA8VTA0MkY+CislIGRpZ2l0cworPFUwRjIwPiAgICAgIDwwPjs8QkFTPjtJR05PUkU7SUdOT1JFCis8VTBGMzM+ICAgICAgPDA+OzxWQVI+O0lHTk9SRTtJR05PUkUKKzxVMEYyMT4gICAgICA8MT47PEJBUz47SUdOT1JFO0lHTk9SRQorPFUwRjJBPiAgICAgIDwxPjs8VkFSPjtJR05PUkU7SUdOT1JFCis8VTBGMjI+ICAgICAgPDI+OzxCQVM+O0lHTk9SRTtJR05PUkUKKzxVMEYyQj4gICAgICA8Mj47PFZBUj47SUdOT1JFO0lHTk9SRQorPFUwRjIzPiAgICAgIDwzPjs8QkFTPjtJR05PUkU7SUdOT1JFCis8VTBGMkM+ICAgICAgPDM+OzxWQVI+O0lHTk9SRTtJR05PUkUKKzxVMEYyND4gICAgICA8ND47PEJBUz47SUdOT1JFO0lHTk9SRQorPFUwRjJEPiAgICAgIDw0Pjs8VkFSPjtJR05PUkU7SUdOT1JFCis8VTBGMjU+ICAgICAgPDU+OzxCQVM+O0lHTk9SRTtJR05PUkUKKzxVMEYyRT4gICAgICA8NT47PFZBUj47SUdOT1JFO0lHTk9SRQorPFUwRjI2PiAgICAgIDw2Pjs8QkFTPjtJR05PUkU7SUdOT1JFCis8VTBGMkY+ICAgICAgPDY+OzxWQVI+O0lHTk9SRTtJR05PUkUKKzxVMEYyNz4gICAgICA8Nz47PEJBUz47SUdOT1JFO0lHTk9SRQorPFUwRjMwPiAgICAgIDw3Pjs8VkFSPjtJR05PUkU7SUdOT1JFCis8VTBGMjg+ICAgICAgPDg+OzxCQVM+O0lHTk9SRTtJR05PUkUKKzxVMEYzMT4gICAgICA8OD47PFZBUj47SUdOT1JFO0lHTk9SRQorPFUwRjI5PiAgICAgIDw5Pjs8QkFTPjtJR05PUkU7SUdOT1JFCis8VTBGMzI+ICAgICAgPDk+OzxWQVI+O0lHTk9SRTtJR05PUkUKKworJSBsZXR0ZXJzCis8VTBGNDA+ICAgICAgICA8VElCLUtBPjs8QkFTPjs8Tk9NPjtJR05PUkUgJSBrYQorPFUwRjkwPiAgICAgICAgPFRJQi1LQT47PEJBUz47PFNVQj47SUdOT1JFCis8VTBGNjk+ICAgICAgICAiPFRJQi1LQT48VElCLVNIQT4iOyI8QkFTPjxWQVI+IjsiPE5PTT48U1VCPiI7SUdOT1JFICUga3NzYQorPFUwRkI5PiAgICAgICAgIjxUSUItS0E+PFRJQi1TSEE+IjsiPEJBUz48VkFSPiI7IjxTVUI+PFNVQj4iO0lHTk9SRQorPHJhZC1rYS1kPiAgICAgPFRJQi1LQS1SX0Q+OzxSX0Q+OzxOT00+O0lHTk9SRQorPHJhZC1rYS1iPiAgICAgPFRJQi1LQS1SX0I+OzxSX0I+OzxOT00+O0lHTk9SRQorPHJhZC1rYS1yPiAgICAgPFRJQi1LQS1SX1I+OzxSX1I+OzxTVUI+O0lHTk9SRQorPHJhZC1rYS1sPiAgICAgPFRJQi1LQS1SX0w+OzxSX0w+OzxTVUI+O0lHTk9SRQorPHJhZC1rYS1zPiAgICAgPFRJQi1LQS1SX1M+OzxSX1M+OzxTVUI+O0lHTk9SRQorPHJhZC1rYS1iLXI+ICAgPFRJQi1LQS1SX0JSPjs8Ul9CUj47PFNVQj47SUdOT1JFCis8cmFkLWthLWItcz4gICA8VElCLUtBLVJfQlM+OzxSX0JTPjs8U1VCPjtJR05PUkUKKzxVMEY0MT4gICAgICAgIDxUSUItS0hBPjs8QkFTPjs8Tk9NPjtJR05PUkUgJSBraGEKKzxVMEY5MT4gICAgICAgIDxUSUItS0hBPjs8QkFTPjs8U1VCPjtJR05PUkUKKzxyYWQta2hhLW0+ICAgIDxUSUItS0hBLVJfTT47PFJfTT47PE5PTT47SUdOT1JFCis8cmFkLWtoYS1hPiAgICA8VElCLUtIQS1SX0E+OzxSX0E+OzxOT00+O0lHTk9SRQorPFUwRjQyPiAgICAgICAgPFRJQi1HQT47PEJBUz47PE5PTT47SUdOT1JFICUgZ2EKKzxVMEY5Mj4gICAgICAgIDxUSUItR0E+OzxCQVM+OzxTVUI+O0lHTk9SRQorPFUwRjQzPiAgICAgICAgIjxUSUItR0E+PFRJQi1IQT4iOyI8QkFTPjxCQVM+IjsiPE5PTT48U1VCPiI7SUdOT1JFICUgZ2hhCis8VTBGOTM+ICAgICAgICAiPFRJQi1HQT48VElCLUhBPiI7IjxCQVM+PEJBUz4iOyI8U1VCPjxTVUI+IjtJR05PUkUKKzxyYWQtZ2EtZC1nYT4gICI8VElCLUdBLVJfRD48VElCLUdBPiI7IjxSX0Q+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtZ2EtZC1uZ2E+ICI8VElCLUdBLVJfRD48VElCLU5HQT4iOyI8Ul9EPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWdhLWQtZGE+ICAiPFRJQi1HQS1SX0Q+PFRJQi1EQT4iOyI8Ul9EPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWdhLWQtYmE+ICAiPFRJQi1HQS1SX0Q+PFRJQi1CQT4iOyI8Ul9EPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWdhLWQtLWE+ICAiPFRJQi1HQS1SX0Q+PFRJQi0tQT4iOyI8Ul9EPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWdhLWQtd2E+ICAiPFRJQi1HQS1SX0Q+PFRJQi1XQT4iOyI8Ul9EPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWdhLWQtcmE+ICAiPFRJQi1HQS1SX0Q+PFRJQi1SQT4iOyI8Ul9EPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWdhLWQtbGE+ICAiPFRJQi1HQS1SX0Q+PFRJQi1MQT4iOyI8Ul9EPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWdhLWQtc2E+ICAiPFRJQi1HQS1SX0Q+PFRJQi1TQT4iOyI8Ul9EPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWdhLWQtdT4gICAiPFRJQi1HQS1SX0Q+PFRJQi1VPiI7IjxSX0Q+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtZ2EtZC1lPiAgICI8VElCLUdBLVJfRD48VElCLUU+IjsiPFJfRD48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1nYS1kLV95YT4gIjxUSUItR0EtUl9EPjxUSUItWUE+IjsiPFJfRD48QkFTPiI7IjxOT00+PFNVQj4iO0lHTk9SRQorPHJhZC1nYS1kLV9yYT4gIjxUSUItR0EtUl9EPjxUSUItUkE+IjsiPFJfRD48QkFTPiI7IjxOT00+PFNVQj4iO0lHTk9SRQorPHJhZC1nYS1iLWdhPiAgIjxUSUItR0EtUl9CPjxUSUItR0E+IjsiPFJfQj48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1nYS1iLWRhPiAgIjxUSUItR0EtUl9CPjxUSUItREE+IjsiPFJfQj48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1nYS1iLW1hPiAgIjxUSUItR0EtUl9CPjxUSUItTUE+IjsiPFJfQj48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1nYS1iLW1hMj4gIjxUSUItR0EtUl9CPjxUSUItTUE+IjsiPFJfQj48VkFSPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1nYS1iLXdhPiAgIjxUSUItR0EtUl9CPjxUSUItV0E+IjsiPFJfQj48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1nYS1iLS1hPiAgIjxUSUItR0EtUl9CPjxUSUItLUE+IjsiPFJfQj48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1nYS1iLXJhPiAgIjxUSUItR0EtUl9CPjxUSUItUkE+IjsiPFJfQj48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1nYS1iLWU+ICAgIjxUSUItR0EtUl9CPjxUSUItRT4iOyI8Ul9CPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWdhLWItbz4gICAiPFRJQi1HQS1SX0I+PFRJQi1PPiI7IjxSX0I+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtZ2EtYi1feWE+ICI8VElCLUdBLVJfQj48VElCLVlBPiI7IjxSX0I+PEJBUz4iOyI8Tk9NPjxTVUI+IjtJR05PUkUKKzxyYWQtZ2EtYi1fcmE+ICI8VElCLUdBLVJfQj48VElCLVJBPiI7IjxSX0I+PEJBUz4iOyI8Tk9NPjxTVUI+IjtJR05PUkUKKzxyYWQtZ2EtYi1fbGE+ICI8VElCLUdBLVJfQj48VElCLUxBPiI7IjxSX0I+PEJBUz4iOyI8Tk9NPjxTVUI+IjtJR05PUkUKKzxyYWQtZ2EtbS1yYT4gICI8VElCLUdBLVJfTT48VElCLVJBPiI7IjxSX00+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtZ2EtbS1sYT4gICI8VElCLUdBLVJfTT48VElCLUxBPiI7IjxSX00+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtZ2EtbS11PiAgICI8VElCLUdBLVJfTT48VElCLVU+IjsiPFJfTT48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1nYS1tLWU+ICAgIjxUSUItR0EtUl9NPjxUSUItRT4iOyI8Ul9NPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWdhLW0tbz4gICAiPFRJQi1HQS1SX00+PFRJQi1PPiI7IjxSX00+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtZ2EtbS1feWE+ICI8VElCLUdBLVJfTT48VElCLVlBPiI7IjxSX00+PEJBUz4iOyI8Tk9NPjxTVUI+IjtJR05PUkUKKzxyYWQtZ2EtbS1fcmE+ICI8VElCLUdBLVJfTT48VElCLVJBPiI7IjxSX00+PEJBUz4iOyI8Tk9NPjxTVUI+IjtJR05PUkUKKzxyYWQtZ2EtYS1nYT4gICI8VElCLUdBLVJfQT48VElCLUdBPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtZ2EtYS1uZ2E+ICI8VElCLUdBLVJfQT48VElCLU5HQT4iOyI8Ul9BPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWdhLWEtZGE+ICAiPFRJQi1HQS1SX0E+PFRJQi1EQT4iOyI8Ul9BPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWdhLWEtbmE+ICAiPFRJQi1HQS1SX0E+PFRJQi1OQT4iOyI8Ul9BPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWdhLWEtYmE+ICAiPFRJQi1HQS1SX0E+PFRJQi1CQT4iOyI8Ul9BPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWdhLWEtbWE+ICAiPFRJQi1HQS1SX0E+PFRJQi1NQT4iOyI8Ul9BPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWdhLWEtbWEyPiAiPFRJQi1HQS1SX0E+PFRJQi1NQT4iOyI8Ul9BPjxWQVI+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWdhLWEtLWE+ICAiPFRJQi1HQS1SX0E+PFRJQi0tQT4iOyI8Ul9BPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWdhLWEtcmE+ICAiPFRJQi1HQS1SX0E+PFRJQi1SQT4iOyI8Ul9BPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWdhLWEtbGE+ICAiPFRJQi1HQS1SX0E+PFRJQi1MQT4iOyI8Ul9BPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWdhLWEtc2E+ICAiPFRJQi1HQS1SX0E+PFRJQi1TQT4iOyI8Ul9BPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWdhLWEtaT4gICAiPFRJQi1HQS1SX0E+PFRJQi1JPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtZ2EtYS11PiAgICI8VElCLUdBLVJfQT48VElCLVU+IjsiPFJfQT48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1nYS1hLWU+ICAgIjxUSUItR0EtUl9BPjxUSUItRT4iOyI8Ul9BPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWdhLWEtbz4gICAiPFRJQi1HQS1SX0E+PFRJQi1PPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtZ2EtYS1feWE+ICI8VElCLUdBLVJfQT48VElCLVlBPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxTVUI+IjtJR05PUkUKKzxyYWQtZ2EtYS1fcmE+ICI8VElCLUdBLVJfQT48VElCLVJBPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxTVUI+IjtJR05PUkUKKzxyYWQtZ2Etcj4gICAgIDxUSUItR0EtUl9SPjs8Ul9SPjs8U1VCPjtJR05PUkUKKzxyYWQtZ2EtbD4gICAgIDxUSUItR0EtUl9MPjs8Ul9MPjs8U1VCPjtJR05PUkUKKzxyYWQtZ2Etcz4gICAgIDxUSUItR0EtUl9TPjs8Ul9TPjs8U1VCPjtJR05PUkUKKzxyYWQtZ2EtYi1yPiAgIDxUSUItR0EtUl9CUj47PFJfQlI+OzxTVUI+O0lHTk9SRQorPHJhZC1nYS1iLXM+ICAgPFRJQi1HQS1SX0JTPjs8Ul9CUz47PFNVQj47SUdOT1JFCis8VTBGNDQ+ICAgICAgICA8VElCLU5HQT47PEJBUz47PE5PTT47SUdOT1JFICUgbmdhCis8VTBGOTQ+ICAgICAgICA8VElCLU5HQT47PEJBUz47PFNVQj47SUdOT1JFCis8cmFkLW5nYS1kLWdhPiAiPFRJQi1OR0EtUl9EPjxUSUItR0E+IjsiPFJfRD48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1uZ2EtZC1uZ2E+ICI8VElCLU5HQS1SX0Q+PFRJQi1OR0E+IjsiPFJfRD48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1uZ2EtZC1uYT4gIjxUSUItTkdBLVJfRD48VElCLU5BPiI7IjxSX0Q+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtbmdhLWQtcmE+ICI8VElCLU5HQS1SX0Q+PFRJQi1SQT4iOyI8Ul9EPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLW5nYS1kLXU+ICAiPFRJQi1OR0EtUl9EPjxUSUItVT4iOyI8Ul9EPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLW5nYS1kLW8+ICAiPFRJQi1OR0EtUl9EPjxUSUItTz4iOyI8Ul9EPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLW5nYS1tLWdhPiAiPFRJQi1OR0EtUl9NPjxUSUItR0E+IjsiPFJfTT48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1uZ2EtbS1uYT4gIjxUSUItTkdBLVJfTT48VElCLU5BPiI7IjxSX00+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtbmdhLW0tLWE+ICI8VElCLU5HQS1SX00+PFRJQi0tQT4iOyI8Ul9NPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLW5nYS1tLXJhPiAiPFRJQi1OR0EtUl9NPjxUSUItUkE+IjsiPFJfTT48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1uZ2EtbS1sYT4gIjxUSUItTkdBLVJfTT48VElCLUxBPiI7IjxSX00+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtbmdhLW0tbz4gICI8VElCLU5HQS1SX00+PFRJQi1PPiI7IjxSX00+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtbmdhLXI+ICAgICA8VElCLU5HQS1SX1I+OzxCQVM+OzxSX1I+O0lHTk9SRQorPHJhZC1uZ2EtbD4gICAgIDxUSUItTkdBLVJfTD47PEJBUz47PFJfTD47SUdOT1JFCis8cmFkLW5nYS1zPiAgICAgPFRJQi1OR0EtUl9TPjs8QkFTPjs8Ul9TPjtJR05PUkUKKzxyYWQtbmdhLWItcj4gICA8VElCLU5HQS1SX0JSPjs8QkFTPjs8Ul9CUj47SUdOT1JFCis8cmFkLW5nYS1iLXM+ICAgPFRJQi1OR0EtUl9CUz47PEJBUz47PFJfQlM+O0lHTk9SRQorPFUwRjQ1PiAgICAgICAgPFRJQi1DQT47PEJBUz47PE5PTT47SUdOT1JFICUgY2EKKzxVMEY5NT4gICAgICAgIDxUSUItQ0E+OzxCQVM+OzxTVUI+O0lHTk9SRQorPHJhZC1jYS1nPiAgICAgPFRJQi1DQT47PFJfRz47PE5PTT47SUdOT1JFCis8cmFkLWNhLWI+ICAgICA8VElCLUNBPjs8Ul9CPjs8Tk9NPjtJR05PUkUKKzxyYWQtY2EtbD4gICAgIDxUSUItQ0E+OzxSX0w+OzxTVUI+O0lHTk9SRQorPHJhZC1jYS1iLWw+ICAgPFRJQi1DQT47PFJfQkw+OzxTVUI+O0lHTk9SRQorPFUwRjQ2PiAgICAgICAgPFRJQi1DSEE+OzxCQVM+OzxOT00+O0lHTk9SRSAlIGNoYQorPFUwRjk2PiAgICAgICAgPFRJQi1DSEE+OzxCQVM+OzxTVUI+O0lHTk9SRQorPHJhZC1jaGEtbT4gICAgPFRJQi1DSEE+OzxSX00+OzxOT00+O0lHTk9SRQorPHJhZC1jaGEtYT4gICAgPFRJQi1DSEE+OzxSX0E+OzxOT00+O0lHTk9SRQorPFUwRjQ3PiAgICAgICAgPFRJQi1KQT47PEJBUz47PE5PTT47SUdOT1JFICUgamEKKzxVMEY5Nz4gICAgICAgIDxUSUItSkE+OzxCQVM+OzxTVUI+O0lHTk9SRQorPHJhZC1qYS1tPiAgICAgPFRJQi1KQS1SX00+OzxSX00+OzxOT00+O0lHTk9SRQorPHJhZC1qYS1hPiAgICAgPFRJQi1KQS1SX0E+OzxSX0E+OzxOT00+O0lHTk9SRQorPHJhZC1qYS1yPiAgICAgPFRJQi1KQS1SX1I+OzxSX1I+OzxTVUI+O0lHTk9SRQorPHJhZC1qYS1sPiAgICAgPFRJQi1KQS1SX0w+OzxSX0w+OzxTVUI+O0lHTk9SRQorPHJhZC1qYS1iLXI+ICAgPFRJQi1KQS1SX0JSPjs8Ul9CUj47PFNVQj47SUdOT1JFCis8VTBGNDk+ICAgICAgICA8VElCLU5ZQT47PEJBUz47PE5PTT47SUdOT1JFICUgbnlhCis8VTBGOTk+ICAgICAgICA8VElCLU5ZQT47PEJBUz47PFNVQj47SUdOT1JFCis8cmFkLW55YS1nPiAgICA8VElCLU5ZQS1SX0c+OzxSX0c+OzxOT00+O0lHTk9SRQorPHJhZC1ueWEtbT4gICAgPFRJQi1OWUEtUl9NPjs8Ul9NPjs8Tk9NPjtJR05PUkUKKzxyYWQtbnlhLXI+ICAgIDxUSUItTllBLVJfUj47PFJfUj47PFNVQj47SUdOT1JFCis8cmFkLW55YS1zPiAgICA8VElCLU5ZQS1SX1M+OzxSX1M+OzxTVUI+O0lHTk9SRQorPHJhZC1ueWEtYi1yPiAgPFRJQi1OWUEtUl9CUj47PFJfQlI+OzxTVUI+O0lHTk9SRQorPHJhZC1ueWEtYi1zPiAgPFRJQi1OWUEtUl9CUz47PFJfQlM+OzxTVUI+O0lHTk9SRQorPFUwRjRGPiAgICAgICAgPFRJQi1UQT47PEJBUz47PE5PTT47SUdOT1JFICUgdGEKKzxVMEY5Rj4gICAgICAgIDxUSUItVEE+OzxCQVM+OzxTVUI+O0lHTk9SRQorPFUwRjRBPiAgICAgICAgPFRJQi1UQT47PFZBUj47PE5PTT47SUdOT1JFICUgdHRhCis8VTBGOUE+ICAgICAgICA8VElCLVRBPjs8VkFSPjs8U1VCPjtJR05PUkUKKzxyYWQtdGEtZz4gICAgIDxUSUItVEEtUl9HPjs8Ul9HPjs8Tk9NPjtJR05PUkUKKzxyYWQtdGEtYj4gICAgIDxUSUItVEEtUl9CPjs8Ul9CPjs8Tk9NPjtJR05PUkUKKzxyYWQtdGEtcj4gICAgIDxUSUItVEEtUl9SPjs8Ul9SPjs8U1VCPjtJR05PUkUKKzxyYWQtdGEtbD4gICAgIDxUSUItVEEtUl9MPjs8Ul9MPjs8U1VCPjtJR05PUkUKKzxyYWQtdGEtcz4gICAgIDxUSUItVEEtUl9TPjs8Ul9TPjs8U1VCPjtJR05PUkUKKzxyYWQtdGEtYi1yPiAgIDxUSUItVEEtUl9CUj47PFJfQlI+OzxTVUI+O0lHTk9SRQorPHJhZC10YS1iLWw+ICAgPFRJQi1UQS1SX0JMPjs8Ul9CTD47PFNVQj47SUdOT1JFCis8cmFkLXRhLWItcz4gICA8VElCLVRBLVJfQlM+OzxSX0JTPjs8U1VCPjtJR05PUkUKKzxVMEY1MD4gICAgICAgIDxUSUItVEhBPjs8QkFTPjs8Tk9NPjtJR05PUkUgJSB0aGEKKzxVMEZBMD4gICAgICAgIDxUSUItVEhBPjs8QkFTPjs8U1VCPjtJR05PUkUKKzxVMEY0Qj4gICAgICAgIDxUSUItVEhBPjs8VkFSPjs8Tk9NPjtJR05PUkUgJSB0dGhhCis8VTBGOUI+ICAgICAgICA8VElCLVRIQT47PFZBUj47PFNVQj47SUdOT1JFCis8cmFkLXRoYS1tPiAgICA8VElCLVRIQS1SX00+OzxSX00+OzxOT00+O0lHTk9SRQorPHJhZC10aGEtYT4gICAgPFRJQi1USEEtUl9BPjs8Ul9BPjs8Tk9NPjtJR05PUkUKKzxVMEY1MT4gICAgICAgIDxUSUItREE+OzxCQVM+OzxOT00+O0lHTk9SRSAlIGRhCis8VTBGQTE+ICAgICAgICA8VElCLURBPjs8QkFTPjs8U1VCPjtJR05PUkUKKzxVMEY0Qz4gICAgICAgIDxUSUItREE+OzxWQVI+OzxOT00+O0lHTk9SRSAlIGRkYQorPFUwRjlDPiAgICAgICAgPFRJQi1EQT47PFZBUj47PFNVQj47SUdOT1JFCis8VTBGNTI+ICAgICAgICAiPFRJQi1EQT48VElCLUhBPiI7IjxCQVM+PEJBUz4iOyI8Tk9NPjxTVUI+IjtJR05PUkUgJSBkaGEKKzxVMEZBMj4gICAgICAgICI8VElCLURBPjxUSUItSEE+IjsiPEJBUz48QkFTPiI7IjxTVUI+PFNVQj4iO0lHTk9SRQorPFUwRjREPiAgICAgICAgIjxUSUItREE+PFRJQi1IQT4iOyI8VkFSPjxCQVM+IjsiPE5PTT48U1VCPiI7SUdOT1JFICUgZGRoYQorPFUwRjlEPiAgICAgICAgIjxUSUItREE+PFRJQi1IQT4iOyI8VkFSPjxCQVM+IjsiPFNVQj48U1VCPiI7SUdOT1JFCis8cmFkLWRhLWctZ2E+ICAiPFRJQi1EQS1SX0c+PFRJQi1HQT4iOyI8Ul9HPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWRhLWctbmdhPiAiPFRJQi1EQS1SX0c+PFRJQi1OR0E+IjsiPFJfRz48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1kYS1nLW5hPiAgIjxUSUItREEtUl9HPjxUSUItTkE+IjsiPFJfRz48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1kYS1nLWJhPiAgIjxUSUItREEtUl9HPjxUSUItQkE+IjsiPFJfRz48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1kYS1nLW1hPiAgIjxUSUItREEtUl9HPjxUSUItTUE+IjsiPFJfRz48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1kYS1nLW1hMj4gIjxUSUItREEtUl9HPjxUSUItTUE+IjsiPFJfRz48VkFSPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1kYS1nLS1hPiAgIjxUSUItREEtUl9HPjxUSUItLUE+IjsiPFJfRz48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1kYS1nLXJhPiAgIjxUSUItREEtUl9HPjxUSUItUkE+IjsiPFJfRz48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1kYS1nLWxhPiAgIjxUSUItREEtUl9HPjxUSUItTEE+IjsiPFJfRz48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1kYS1nLXNhPiAgIjxUSUItREEtUl9HPjxUSUItU0E+IjsiPFJfRz48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1kYS1nLWk+ICAgIjxUSUItREEtUl9HPjxUSUItST4iOyI8Ul9HPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWRhLWctdT4gICAiPFRJQi1EQS1SX0c+PFRJQi1VPiI7IjxSX0c+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtZGEtZy1lPiAgICI8VElCLURBLVJfRz48VElCLUU+IjsiPFJfRz48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1kYS1nLW8+ICAgIjxUSUItREEtUl9HPjxUSUItTz4iOyI8Ul9HPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWRhLWItZ2E+ICAiPFRJQi1EQS1SX0I+PFRJQi1HQT4iOyI8Ul9CPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWRhLWItbWE+ICAiPFRJQi1EQS1SX0I+PFRJQi1NQT4iOyI8Ul9CPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWRhLWItbWEyPiAiPFRJQi1EQS1SX0I+PFRJQi1NQT4iOyI8Ul9CPjxWQVI+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWRhLWItLWE+ICAiPFRJQi1EQS1SX0I+PFRJQi0tQT4iOyI8Ul9CPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWRhLWItcmE+ICAiPFRJQi1EQS1SX0I+PFRJQi1SQT4iOyI8Ul9CPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWRhLWItbGE+ICAiPFRJQi1EQS1SX0I+PFRJQi1MQT4iOyI8Ul9CPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWRhLWItc2E+ICAiPFRJQi1EQS1SX0I+PFRJQi1TQT4iOyI8Ul9CPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWRhLWItdT4gICAiPFRJQi1EQS1SX0I+PFRJQi1VPiI7IjxSX0I+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtZGEtYi1lPiAgICI8VElCLURBLVJfQj48VElCLUU+IjsiPFJfQj48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1kYS1iLW8+ICAgIjxUSUItREEtUl9CPjxUSUItTz4iOyI8Ul9CPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWRhLW0tZ2E+ICAiPFRJQi1EQS1SX00+PFRJQi1HQT4iOyI8Ul9NPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWRhLW0tbmdhPiAiPFRJQi1EQS1SX00+PFRJQi1OR0E+IjsiPFJfTT48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1kYS1tLW5hPiAgIjxUSUItREEtUl9NPjxUSUItTkE+IjsiPFJfTT48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1kYS1tLS1hPiAgIjxUSUItREEtUl9NPjxUSUItLUE+IjsiPFJfTT48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1kYS1tLXJhPiAgIjxUSUItREEtUl9NPjxUSUItUkE+IjsiPFJfTT48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1kYS1tLXU+ICAgIjxUSUItREEtUl9NPjxUSUItVT4iOyI8Ul9NPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWRhLW0tZT4gICAiPFRJQi1EQS1SX00+PFRJQi1FPiI7IjxSX00+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtZGEtbS1vPiAgICI8VElCLURBLVJfTT48VElCLU8+IjsiPFJfTT48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1kYS1hLWdhPiAgIjxUSUItREEtUl9BPjxUSUItR0E+IjsiPFJfQT48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1kYS1hLW5nYT4gIjxUSUItREEtUl9BPjxUSUItTkdBPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtZGEtYS1kYT4gICI8VElCLURBLVJfQT48VElCLURBPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtZGEtYS1uYT4gICI8VElCLURBLVJfQT48VElCLU5BPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtZGEtYS1iYT4gICI8VElCLURBLVJfQT48VElCLUJBPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtZGEtYS1tYT4gICI8VElCLURBLVJfQT48VElCLU1BPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtZGEtYS1tYTI+ICI8VElCLURBLVJfQT48VElCLU1BPiI7IjxSX0E+PFZBUj4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtZGEtYS13YT4gICI8VElCLURBLVJfQT48VElCLVdBPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtZGEtYS0tYT4gICI8VElCLURBLVJfQT48VElCLS1BPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtZGEtYS1yYT4gICI8VElCLURBLVJfQT48VElCLVJBPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtZGEtYS1sYT4gICI8VElCLURBLVJfQT48VElCLUxBPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtZGEtYS1zYT4gICI8VElCLURBLVJfQT48VElCLVNBPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtZGEtYS11PiAgICI8VElCLURBLVJfQT48VElCLVU+IjsiPFJfQT48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1kYS1hLWU+ICAgIjxUSUItREEtUl9BPjxUSUItRT4iOyI8Ul9BPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWRhLWEtbz4gICAiPFRJQi1EQS1SX0E+PFRJQi1PPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtZGEtYS1fcmE+ICI8VElCLURBLVJfQT48VElCLVJBPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtZGEtcj4gICAgIDxUSUItREEtUl9SPjs8Ul9SPjs8U1VCPjtJR05PUkUKKzxyYWQtZGEtbD4gICAgIDxUSUItREEtUl9MPjs8Ul9MPjs8U1VCPjtJR05PUkUKKzxyYWQtZGEtcz4gICAgIDxUSUItREEtUl9TPjs8Ul9TPjs8U1VCPjtJR05PUkUKKzxyYWQtZGEtYi1yPiAgIDxUSUItREEtUl9CUj47PFJfQlI+OzxTVUI+O0lHTk9SRQorPHJhZC1kYS1iLWw+ICAgPFRJQi1EQS1SX0JMPjs8Ul9CTD47PFNVQj47SUdOT1JFCis8cmFkLWRhLWItcz4gICA8VElCLURBLVJfQlM+OzxSX0JTPjs8U1VCPjtJR05PUkUKKzxVMEY1Mz4gICAgICAgIDxUSUItTkE+OzxCQVM+OzxOT00+O0lHTk9SRSAlIG5hCis8VTBGQTM+ICAgICAgICA8VElCLU5BPjs8QkFTPjs8U1VCPjtJR05PUkUKKzxVMEY0RT4gICAgICAgIDxUSUItTkE+OzxWQVI+OzxOT00+O0lHTk9SRSAlIG5uYQorPFUwRjlFPiAgICAgICAgPFRJQi1OQT47PFZBUj47PFNVQj47SUdOT1JFCis8cmFkLW5hLWctZ2E+ICAiPFRJQi1OQS1SX0c+PFRJQi1HQT4iOyI8Ul9HPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLW5hLWctbmdhPiAiPFRJQi1OQS1SX0c+PFRJQi1OR0E+IjsiPFJfRz48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1uYS1nLWRhPiAgIjxUSUItTkEtUl9HPjxUSUItREE+IjsiPFJfRz48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1uYS1nLW5hPiAgIjxUSUItTkEtUl9HPjxUSUItTkE+IjsiPFJfRz48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1uYS1nLW1hPiAgIjxUSUItTkEtUl9HPjxUSUItTUE+IjsiPFJfRz48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1uYS1nLW1hMj4gIjxUSUItTkEtUl9HPjxUSUItTUE+IjsiPFJfRz48VkFSPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1uYS1nLXdhPiAgIjxUSUItTkEtUl9HPjxUSUItV0E+IjsiPFJfRz48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1uYS1nLS1hPiAgIjxUSUItTkEtUl9HPjxUSUItLUE+IjsiPFJfRz48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1uYS1nLXNhPiAgIjxUSUItTkEtUl9HPjxUSUItU0E+IjsiPFJfRz48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1uYS1nLXU+ICAgIjxUSUItTkEtUl9HPjxUSUItVT4iOyI8Ul9HPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLW5hLWctbz4gICAiPFRJQi1OQS1SX0c+PFRJQi1PPiI7IjxSX0c+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtbmEtbS1nYT4gICI8VElCLU5BLVJfTT48VElCLUdBPiI7IjxSX00+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtbmEtbS1uZ2E+ICI8VElCLU5BLVJfTT48VElCLU5HQT4iOyI8Ul9NPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLW5hLW0tbmE+ICAiPFRJQi1OQS1SX00+PFRJQi1OQT4iOyI8Ul9NPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLW5hLW0tYmE+ICAiPFRJQi1OQS1SX00+PFRJQi1CQT4iOyI8Ul9NPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLW5hLW0tbWE+ICAiPFRJQi1OQS1SX00+PFRJQi1NQT4iOyI8Ul9NPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLW5hLW0tbWEyPiAgIjxUSUItTkEtUl9NPjxUSUItTUE+IjsiPFJfTT48VkFSPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1uYS1tLS1hPiAgIjxUSUItTkEtUl9NPjxUSUItLUE+IjsiPFJfTT48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1uYS1tLXJhPiAgIjxUSUItTkEtUl9NPjxUSUItUkE+IjsiPFJfTT48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1uYS1tLWxhPiAgIjxUSUItTkEtUl9NPjxUSUItTEE+IjsiPFJfTT48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1uYS1tLXU+ICAgIjxUSUItTkEtUl9NPjxUSUItVT4iOyI8Ul9NPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLW5hLW0tZT4gICAiPFRJQi1OQS1SX00+PFRJQi1FPiI7IjxSX00+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtbmEtbS1vPiAgICI8VElCLU5BLVJfTT48VElCLU8+IjsiPFJfTT48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1uYS1yPiAgICAgPFRJQi1OQS1SX1I+OzxSX1I+OzxTVUI+O0lHTk9SRQorPHJhZC1uYS1zPiAgICAgPFRJQi1OQS1SX1M+OzxSX1M+OzxTVUI+O0lHTk9SRQorPHJhZC1uYS1iLXI+ICAgPFRJQi1OQS1SX0JSPjs8Ul9CUj47PFNVQj47SUdOT1JFCis8cmFkLW5hLWItcz4gICA8VElCLU5BLVJfQlM+OzxSX0JTPjs8U1VCPjtJR05PUkUKKzxVMEY1ND4gICAgICAgIDxUSUItUEE+OzxCQVM+OzxOT00+O0lHTk9SRSAlIHBhCis8VTBGQTQ+ICAgICAgICA8VElCLVBBPjs8QkFTPjs8U1VCPjtJR05PUkUKKzxyYWQtcGEtZC1nYT4gICI8VElCLVBBLVJfRD48VElCLUdBPiI7IjxSX0Q+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtcGEtZC1uZ2E+ICI8VElCLVBBLVJfRD48VElCLU5HQT4iOyI8Ul9EPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLXBhLWQtZGE+ICAiPFRJQi1QQS1SX0Q+PFRJQi1EQT4iOyI8Ul9EPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLXBhLWQtLWE+ICAiPFRJQi1QQS1SX0Q+PFRJQi0tQT4iOyI8Ul9EPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLXBhLWQtcmE+ICAiPFRJQi1QQS1SX0Q+PFRJQi1SQT4iOyI8Ul9EPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLXBhLWQtbGE+ICAiPFRJQi1QQS1SX0Q+PFRJQi1MQT4iOyI8Ul9EPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLXBhLWQtc2E+ICAiPFRJQi1QQS1SX0Q+PFRJQi1TQT4iOyI8Ul9EPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLXBhLWQtdT4gICAiPFRJQi1QQS1SX0Q+PFRJQi1VPiI7IjxSX0Q+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtcGEtZC1lPiAgICI8VElCLVBBLVJfRD48VElCLUU+IjsiPFJfRD48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1wYS1kLW8tZ2E+ICAiPFRJQi1QQS1SX0Q+PFRJQi1PPjxUSUItR0E+IjsiPFJfRD48QkFTPjxCQVM+IjsiPE5PTT48Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtcGEtZC1vLW5nYT4gIjxUSUItUEEtUl9EPjxUSUItTz48VElCLU5HQT4iOyI8Ul9EPjxCQVM+PEJBUz4iOyI8Tk9NPjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1wYS1kLW8tZGE+ICAiPFRJQi1QQS1SX0Q+PFRJQi1PPjxUSUItREE+IjsiPFJfRD48QkFTPjxCQVM+IjsiPE5PTT48Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtcGEtZC1vLW5hPiAgIjxUSUItUEEtUl9EPjxUSUItTz48VElCLU5BPiI7IjxSX0Q+PEJBUz48QkFTPiI7IjxOT00+PE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLXBhLWQtby1yYT4gICI8VElCLVBBLVJfRD48VElCLU8+PFRJQi1SQT4iOyI8Ul9EPjxCQVM+PEJBUz4iOyI8Tk9NPjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1wYS1kLV95YT4gIjxUSUItUEEtUl9EPjxUSUItWUE+IjsiPFJfRD48VkFSPiI7IjxOT00+PFNVQj4iO0lHTk9SRQorPHJhZC1wYS1kLV9yYT4gIjxUSUItUEEtUl9EPjxUSUItUkE+IjsiPFJfRD48VkFSPiI7IjxOT00+PFNVQj4iO0lHTk9SRQorPHJhZC10YS1sPiAgICAgPFRJQi1QQS1SX0w+OzxSX0w+OzxTVUI+O0lHTk9SRQorPHJhZC10YS1zPiAgICAgPFRJQi1QQS1SX1M+OzxSX1M+OzxTVUI+O0lHTk9SRQorPFUwRjU1PiAgICAgICAgPFRJQi1QSEE+OzxCQVM+OzxOT00+O0lHTk9SRSAlIHBoYQorPFUwRkE1PiAgICAgICAgPFRJQi1QSEE+OzxCQVM+OzxTVUI+O0lHTk9SRQorPHJhZC1waGEtYT4gICAgPFRJQi1QSEEtUl9BPjs8Ul9BPjs8Tk9NPjtJR05PUkUKKzxVMEY1Nj4gICAgICAgIDxUSUItQkE+OzxCQVM+OzxOT00+O0lHTk9SRSAlIGJhCis8VTBGQTY+ICAgICAgICA8VElCLUJBPjs8QkFTPjs8U1VCPjtJR05PUkUKKzxVMEY1Nz4gICAgICAgICI8VElCLUJBPjxUSUItSEE+IjsiPEJBUz48QkFTPiI7IjxOT00+PFNVQj4iO0lHTk9SRSAlIGJoYQorPFUwRkE3PiAgICAgICAgIjxUSUItQkE+PFRJQi1IQT4iOyI8QkFTPjxCQVM+IjsiPFNVQj48U1VCPiI7SUdOT1JFCis8cmFkLWJhLWQtZ2E+ICAiPFRJQi1CQS1SX0Q+PFRJQi1HQT4iOyI8Ul9EPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWJhLWQtbmdhPiAiPFRJQi1CQS1SX0Q+PFRJQi1OR0E+IjsiPFJfRD48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1iYS1kLWRhPiAgIjxUSUItQkEtUl9EPjxUSUItREE+IjsiPFJfRD48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1iYS1kLW5hPiAgIjxUSUItQkEtUl9EPjxUSUItTkE+IjsiPFJfRD48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1iYS1kLWJhPiAgIjxUSUItQkEtUl9EPjxUSUItQkE+IjsiPFJfRD48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1iYS1kLS1hPiAgIjxUSUItQkEtUl9EPjxUSUItLUE+IjsiPFJfRD48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1iYS1kLXJhPiAgIjxUSUItQkEtUl9EPjxUSUItUkE+IjsiPFJfRD48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1iYS1kLWxhPiAgIjxUSUItQkEtUl9EPjxUSUItTEE+IjsiPFJfRD48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1iYS1kLXNhPiAgIjxUSUItQkEtUl9EPjxUSUItU0E+IjsiPFJfRD48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1iYS1kLXU+ICAgIjxUSUItQkEtUl9EPjxUSUItVT4iOyI8Ul9EPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWJhLWQtZT4gICAiPFRJQi1CQS1SX0Q+PFRJQi1FPiI7IjxSX0Q+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtYmEtZC1vPiAgICI8VElCLUJBLVJfRD48VElCLU8+IjsiPFJfRD48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1iYS1kLV95YT4gIjxUSUItQkEtUl9EPjxUSUItWUE+IjsiPFJfRD48QkFTPiI7IjxOT00+PFNVQj4iO0lHTk9SRQorPHJhZC1iYS1kLV9yYT4gIjxUSUItQkEtUl9EPjxUSUItUkE+IjsiPFJfRD48QkFTPiI7IjxOT00+PFNVQj4iO0lHTk9SRQorPHJhZC1iYS1hLWdhPiAgIjxUSUItQkEtUl9BPjxUSUItR0E+IjsiPFJfQT48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1iYS1hLW5nYT4gIjxUSUItQkEtUl9BPjxUSUItTkdBPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtYmEtYS1kYT4gICI8VElCLUJBLVJfQT48VElCLURBPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtYmEtYS1uYT4gICI8VElCLUJBLVJfQT48VElCLU5BPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtYmEtYS1iYT4gICI8VElCLUJBLVJfQT48VElCLUJBPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtYmEtYS1tYT4gICI8VElCLUJBLVJfQT48VElCLU1BPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtYmEtYS1tYTI+ICI8VElCLUJBLVJfQT48VElCLU1BPiI7IjxSX0E+PFZBUj4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtYmEtYS0tYT4gICI8VElCLUJBLVJfQT48VElCLS1BPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtYmEtYS1yYT4gICI8VElCLUJBLVJfQT48VElCLVJBPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtYmEtYS1sYT4gICI8VElCLUJBLVJfQT48VElCLUxBPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtYmEtYS1pPiAgICI8VElCLUJBLVJfQT48VElCLUk+IjsiPFJfQT48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1iYS1hLXU+ICAgIjxUSUItQkEtUl9BPjxUSUItVT4iOyI8Ul9BPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLWJhLWEtZT4gICAiPFRJQi1CQS1SX0E+PFRJQi1FPiI7IjxSX0E+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtYmEtYS1vPiAgICI8VElCLUJBLVJfQT48VElCLU8+IjsiPFJfQT48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1iYS1hLV95YT4gIjxUSUItQkEtUl9BPjxUSUItWUE+IjsiPFJfQT48QkFTPiI7IjxOT00+PFNVQj4iO0lHTk9SRQorPHJhZC1iYS1hLV9yYT4gIjxUSUItQkEtUl9BPjxUSUItUkE+IjsiPFJfQT48QkFTPiI7IjxOT00+PFNVQj4iO0lHTk9SRQorPHJhZC1iYS1yPiAgICAgPFRJQi1CQS1SX1I+OzxSX1I+OzxTVUI+O0lHTk9SRQorPHJhZC1iYS1sPiAgICAgPFRJQi1CQS1SX0w+OzxSX0w+OzxTVUI+O0lHTk9SRQorPHJhZC1iYS1zPiAgICAgPFRJQi1CQS1SX1M+OzxSX1M+OzxTVUI+O0lHTk9SRQorPFUwRjU4PiAgICAgICAgPFRJQi1NQT47PEJBUz47PE5PTT47SUdOT1JFICUgbWEKKzxVMEZBOD4gICAgICAgIDxUSUItTUE+OzxCQVM+OzxTVUI+O0lHTk9SRQorPFUwRjdFPiAgICAgICAgPFRJQi1NQT47PFZBUj47PE5PTT47SUdOT1JFICUKKzxVMEY4Mj4gICAgICAgIDxUSUItTUE+OzxWQVI+OzxTVUI+O0lHTk9SRSAlCis8VTBGODM+ICAgICAgICA8VElCLU1BPjs8VkFSPjs8VkFSPjtJR05PUkUgJQorPHJhZC1tYS1kLWdhPiAgIjxUSUItTUEtUl9EPjxUSUItR0E+IjsiPFJfRD48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1tYS1kLW5nYT4gIjxUSUItTUEtUl9EPjxUSUItTkdBPiI7IjxSX0Q+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtbWEtZC1uYT4gICI8VElCLU1BLVJfRD48VElCLU5BPiI7IjxSX0Q+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtbWEtZC13YT4gICI8VElCLU1BLVJfRD48VElCLVdBPiI7IjxSX0Q+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtbWEtZC0tYT4gICI8VElCLU1BLVJfRD48VElCLS1BPiI7IjxSX0Q+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtbWEtZC1yYT4gICI8VElCLU1BLVJfRD48VElCLVJBPiI7IjxSX0Q+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtbWEtZC1zYT4gICI8VElCLU1BLVJfRD48VElCLVNBPiI7IjxSX0Q+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtbWEtZC1pPiAgICI8VElCLU1BLVJfRD48VElCLUk+IjsiPFJfRD48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1tYS1kLXU+ICAgIjxUSUItTUEtUl9EPjxUSUItVT4iOyI8Ul9EPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLW1hLWQtZT4gICAiPFRJQi1NQS1SX0Q+PFRJQi1FPiI7IjxSX0Q+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtbWEtZC1vLWRhPiAiPFRJQi1NQS1SX0Q+PFRJQi1PPjxUSUItREE+IjsiPFJfRD48QkFTPjxCQVM+IjsiPE5PTT48Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtbWEtZC1feWE+ICI8VElCLU1BLVJfRD48VElCLVlBPiI7IjxSX0Q+PEJBUz4iOyI8Tk9NPjxTVUI+IjtJR05PUkUKKzxyYWQtbWEtcj4gICAgIDxUSUItTUEtUl9SPjs8Ul9SPjs8U1VCPjtJR05PUkUKKzxyYWQtbWEtcz4gICAgIDxUSUItTUEtUl9TPjs8Ul9TPjs8U1VCPjtJR05PUkUKKzxVMEY1OT4gICAgICAgIDxUSUItVFNBPjs8QkFTPjs8Tk9NPjtJR05PUkUgJSB0c2EKKzxVMEZBOT4gICAgICAgIDxUSUItVFNBPjs8QkFTPjs8U1VCPjtJR05PUkUKKzxyYWQtdHNhLWc+ICAgIDxUSUItVFNBLVJfRz47PFJfRz47PE5PTT47SUdOT1JFCis8cmFkLXRzYS1iPiAgICA8VElCLVRTQS1SX0I+OzxSX0I+OzxOT00+O0lHTk9SRQorPHJhZC10c2Etcj4gICAgPFRJQi1UU0EtUl9SPjs8Ul9SPjs8U1VCPjtJR05PUkUKKzxyYWQtdHNhLXM+ICAgIDxUSUItVFNBLVJfUz47PFJfUz47PFNVQj47SUdOT1JFCis8cmFkLXRzYS1iLXI+ICA8VElCLVRTQS1SX0JSPjs8Ul9CUj47PFNVQj47SUdOT1JFCis8cmFkLXRzYS1iLXM+ICA8VElCLVRTQS1SX0JTPjs8Ul9CUz47PFNVQj47SUdOT1JFCis8VTBGNUE+ICAgICAgICA8VElCLVRTSEE+OzxCQVM+OzxOT00+O0lHTk9SRSAlIHRzaGEKKzxVMEZBQT4gICAgICAgIDxUSUItVFNIQT47PEJBUz47PFNVQj47SUdOT1JFCis8cmFkLXRzaGEtbT4gICA8VElCLVRTSEEtUl9NPjs8Ul9NPjs8Tk9NPjtJR05PUkUKKzxyYWQtdHNoYS1hPiAgIDxUSUItVFNIQS1SX0E+OzxSX0E+OzxOT00+O0lHTk9SRQorPFUwRjVCPiAgICAgICAgPFRJQi1EWkE+OzxCQVM+OzxOT00+O0lHTk9SRSAlIGR6YQorPFUwRkFCPiAgICAgICAgPFRJQi1EWkE+OzxCQVM+OzxTVUI+O0lHTk9SRQorPFUwRjVDPiAgICAgICAgIjxUSUItRFpBPjxUSUItSEE+IjsiPEJBUz48QkFTPiI7IjxOT00+PFNVQj4iO0lHTk9SRSAlIGR6aGEKKzxVMEZBQz4gICAgICAgICI8VElCLURaQT48VElCLUhBPiI7IjxCQVM+PEJBUz4iOyI8U1VCPjxTVUI+IjtJR05PUkUKKzxyYWQtZHphLW0+ICAgIDxUSUItRFpBLVJfTT47PFJfTT47PE5PTT47SUdOT1JFCis8cmFkLWR6YS1hPiAgICA8VElCLURaQS1SX0E+OzxSX0E+OzxOT00+O0lHTk9SRQorPHJhZC1kemEtcj4gICAgPFRJQi1EWkEtUl9SPjs8Ul9SPjs8U1VCPjtJR05PUkUKKzxyYWQtZHphLWItcj4gIDxUSUItRFpBLVJfQlI+OzxSX0JSPjs8U1VCPjtJR05PUkUKKzxVMEY1RD4gICAgICAgIDxUSUItV0E+OzxCQVM+OzxOT00+O0lHTk9SRSAlIHdhCis8VTBGQUQ+ICAgICAgICA8VElCLVdBPjs8QkFTPjs8U1VCPjtJR05PUkUKKzxVMEZCQT4gICAgICAgIDxUSUItV0E+OzxWQVI+OzxTVUI+O0lHTk9SRSAlIGZpeGVkIHdhCis8VTBGNUU+ICAgICAgICA8VElCLVpIQT47PEJBUz47PE5PTT47SUdOT1JFICUgemhhCis8VTBGQUU+ICAgICAgICA8VElCLVpIQT47PEJBUz47PFNVQj47SUdOT1JFCis8cmFkLXpoYS1nPiAgICA8VElCLVpIQS1SX0c+OzxSX0c+OzxOT00+O0lHTk9SRQorPHJhZC16aGEtYj4gICAgPFRJQi1aSEEtUl9CPjs8Ul9CPjs8Tk9NPjtJR05PUkUKKzxVMEY1Rj4gICAgICAgIDxUSUItWkE+OzxCQVM+OzxOT00+O0lHTk9SRSAlIHphCis8VTBGQUY+ICAgICAgICA8VElCLVpBPjs8QkFTPjs8U1VCPjtJR05PUkUKKzxyYWQtemEtZz4gICAgIDxUSUItWkEtUl9HPjs8Ul9HPjs8Tk9NPjtJR05PUkUKKzxyYWQtemEtYj4gICAgIDxUSUItWkEtUl9CPjs8Ul9CPjs8Tk9NPjtJR05PUkUKKzxVMEY2MD4gICAgICAgIDxUSUItLUE+OzxCQVM+OzxOT00+O0lHTk9SRSAlIC1hCis8VTBGQjA+ICAgICAgICA8VElCLS1BPjs8QkFTPjs8U1VCPjtJR05PUkUKKzxVMEY2MT4gICAgICAgIDxUSUItWUE+OzxCQVM+OzxOT00+O0lHTk9SRSAlIHlhCis8VTBGQjE+ICAgICAgICA8VElCLVlBPjs8QkFTPjs8U1VCPjtJR05PUkUKKzxVMEZCQj4gICAgICAgIDxUSUItWUE+OzxWQVI+OzxTVUI+O0lHTk9SRSAlIGZpeGVkIHlhCis8cmFkLXlhLWc+ICAgICA8VElCLVlBLVJfRz47PFJfRz47PE5PTT47SUdOT1JFCis8VTBGNjI+ICAgICAgICA8VElCLVJBPjs8QkFTPjs8Tk9NPjtJR05PUkUgJSByYQorPFUwRkIyPiAgICAgICAgPFRJQi1SQT47PEJBUz47PFNVQj47SUdOT1JFCis8VTBGNkE+ICAgICAgICA8VElCLVJBPjs8VkFSPjs8Tk9NPjtJR05PUkUgJSBmaXhlZCByYQorPFUwRkJDPiAgICAgICAgPFRJQi1SQT47PFZBUj47PFNVQj47SUdOT1JFCis8VTBGNzY+ICAgICAgICA8VElCLVJBPjs8QkFTPjs8VkFSPjtJR05PUkUgJSB2b2NhbGljIHIKKyUgRklYTUU7IHdoaWNoIG9mIHRoZSB0d28/Cis8VTBGNzc+ICAgICAgICA8VElCLVJBPjs8TUFDPjs8Tk9NPjtJR05PUkUgJSB2b2NhbGljIHJyCislPFUwRjc3PiAgICAgICAgIjxUSUItUkE+PFRJQi1JPiI7IjxCQVM+PE1BQz47IjxTVUI+PFZBUj47SUdOT1JFICUgdm9jYWxpYyBycgorPHJhZC1yYS1iLWxhPiAgIjxUSUItUkEtUl9CPjxUSUItTEE+IjsiPFJfQj48QkFTPiI7IjxOT00+PFNVQj4iO0lHTk9SRQorPFUwRjYzPiAgICAgICAgPFRJQi1MQT47PEJBUz47PE5PTT47SUdOT1JFICUgbGEKKzxVMEZCMz4gICAgICAgIDxUSUItTEE+OzxCQVM+OzxTVUI+O0lHTk9SRQorPFUwRjc4PiAgICAgICAgPFRJQi1MQT47PEJBUz47PFZBUj47SUdOT1JFICUgdm9jYWxpYyBsCislIEZJWE1FOyB3aGljaCBvZiB0aGUgdHdvPworPFUwRjc5PiAgICAgICAgPFRJQi1MQT47PE1BQz47PE5PTT47SUdOT1JFICUgdm9jYWxpYyBsbAorJTxVMEY3OT4gICAgICAgICI8VElCLUxBPjxUSUItST4iOyI8QkFTPjxNQUM+OyI8U1VCPjxWQVI+O0lHTk9SRSAlIHZvY2FsaWMgbGwKKzxVMEY2ND4gICAgICAgIDxUSUItU0hBPjs8QkFTPjs8Tk9NPjtJR05PUkUgJSBzaGEKKzxVMEZCND4gICAgICAgIDxUSUItU0hBPjs8QkFTPjs8U1VCPjtJR05PUkUKKzxVMEY2NT4gICAgICAgIDxUSUItU0hBPjs8VkFSPjs8Tk9NPjtJR05PUkUgJSBzc2EKKzxVMEZCNT4gICAgICAgIDxUSUItU0hBPjs8VkFSPjs8U1VCPjtJR05PUkUKKzxyYWQtc2hhLWc+ICAgIDxUSUItU0hBLVJfRz47PFJfRz47PE5PTT47SUdOT1JFCis8cmFkLXNoYS1iPiAgICA8VElCLVNIQS1SX0I+OzxSX0I+OzxOT00+O0lHTk9SRQorPFUwRjY2PiAgICAgICAgPFRJQi1TQT47PEJBUz47PE5PTT47SUdOT1JFICUgc2EKKzxVMEZCNj4gICAgICAgIDxUSUItU0E+OzxCQVM+OzxTVUI+O0lHTk9SRQorPHJhZC1zYS1nLWdhPiAgIjxUSUItU0EtUl9HPjxUSUItR0E+IjsiPFJfRz48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1zYS1nLW5nYT4gIjxUSUItU0EtUl9HPjxUSUItTkdBPiI7IjxSX0c+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtc2EtZy1kYT4gICI8VElCLVNBLVJfRz48VElCLURBPiI7IjxSX0c+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtc2EtZy1uYT4gICI8VElCLVNBLVJfRz48VElCLU5BPiI7IjxSX0c+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtc2EtZy1iYT4gICI8VElCLVNBLVJfRz48VElCLUJBPiI7IjxSX0c+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtc2EtZy0tYT4gICI8VElCLVNBLVJfRz48VElCLS1BPiI7IjxSX0c+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtc2EtZy1yYT4gICI8VElCLVNBLVJfRz48VElCLVJBPiI7IjxSX0c+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtc2EtZy1sYT4gICI8VElCLVNBLVJfRz48VElCLUxBPiI7IjxSX0c+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtc2EtZy1zYT4gICI8VElCLVNBLVJfRz48VElCLVNBPiI7IjxSX0c+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtc2EtZy1pPiAgICI8VElCLVNBLVJfRz48VElCLUk+IjsiPFJfRz48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1zYS1nLXU+ICAgIjxUSUItU0EtUl9HPjxUSUItVT4iOyI8Ul9HPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLXNhLWctZT4gICAiPFRJQi1TQS1SX0c+PFRJQi1FPiI7IjxSX0c+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtc2EtZy1vPiAgICI8VElCLVNBLVJfRz48VElCLU8+IjsiPFJfRz48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1zYS1iLWdhPiAgIjxUSUItU0EtUl9CPjxUSUItR0E+IjsiPFJfQj48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1zYS1iLW5nYT4gIjxUSUItU0EtUl9CPjxUSUItTkdBPiI7IjxSX0I+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtc2EtYi1kYT4gICI8VElCLVNBLVJfQj48VElCLURBPiI7IjxSX0I+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtc2EtYi1iYT4gICI8VElCLVNBLVJfQj48VElCLUJBPiI7IjxSX0I+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtc2EtYi1tYT4gICI8VElCLVNBLVJfQj48VElCLU1BPiI7IjxSX0I+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtc2EtYi1tYTI+ICI8VElCLVNBLVJfQj48VElCLU1BPiI7IjxSX0I+PFZBUj4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtc2EtYi1yYT4gICI8VElCLVNBLVJfQj48VElCLVJBPiI7IjxSX0I+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtc2EtYi1sYT4gICI8VElCLVNBLVJfQj48VElCLUxBPiI7IjxSX0I+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtc2EtYi1pPiAgICI8VElCLVNBLVJfQj48VElCLUk+IjsiPFJfQj48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1zYS1iLXU+ICAgIjxUSUItU0EtUl9CPjxUSUItVT4iOyI8Ul9CPjxCQVM+IjsiPE5PTT48Tk9NPiI7SUdOT1JFCis8cmFkLXNhLWItZT4gICAiPFRJQi1TQS1SX0I+PFRJQi1FPiI7IjxSX0I+PEJBUz4iOyI8Tk9NPjxOT00+IjtJR05PUkUKKzxyYWQtc2EtYi1vPiAgICI8VElCLVNBLVJfQj48VElCLU8+IjsiPFJfQj48QkFTPiI7IjxOT00+PE5PTT4iO0lHTk9SRQorPHJhZC1zYS1iLV93YT4gIjxUSUItU0EtUl9CPjxUSUItV0E+IjsiPFJfQj48QkFTPiI7IjxOT00+PFNVQj4iO0lHTk9SRQorPHJhZC1zYS1iLV9yYT4gIjxUSUItU0EtUl9CPjxUSUItUkE+IjsiPFJfQj48QkFTPiI7IjxOT00+PFNVQj4iO0lHTk9SRQorPHJhZC1zYS1iLV9sYT4gIjxUSUItU0EtUl9CPjxUSUItTEE+IjsiPFJfQj48QkFTPiI7IjxOT00+PFNVQj4iO0lHTk9SRQorPFUwRjY3PiAgICAgICAgPFRJQi1IQT47PEJBUz47PE5PTT47SUdOT1JFICUgaGEKKzxVMEZCNz4gICAgICAgIDxUSUItSEE+OzxCQVM+OzxTVUI+O0lHTk9SRQorPHJhZC1oYS1sPiAgICAgPFRJQi1IQS1SX0w+OzxSX0w+OzxOT00+O0lHTk9SRQorPFUwRjY4PiAgICAgICAgPFRJQi1BPjs8QkFTPjs8Tk9NPjtJR05PUkUgJSBhCis8VTBGQjg+ICAgICAgICA8VElCLUE+OzxCQVM+OzxTVUI+O0lHTk9SRQorCislIGV4cGxpY2l0IHZvd2VscworPFUwRjcxPiBJR05PUkU7PE1BQz47SUdOT1JFO0lHTk9SRSAlIGxvbmcgdm93ZWwgbWFyayAlIEZJWE1FCis8VTBGNzI+IDxUSUItST47PEJBUz47PE5PTT47SUdOT1JFICUgaQorPFUwRjgwPiA8VElCLUk+OzxCQVM+OzxWQVI+O0lHTk9SRSAlIHJldmVyc2VkIGkKKzxVMEY3Mz4gPFRJQi1JPjs8TUFDPjs8Tk9NPjtJR05PUkUgJSBpaQorPFUwRjgxPiA8VElCLUk+OzxNQUM+OzxWQVI+O0lHTk9SRSAlIHJldmVyc2VkIGlpCis8VTBGNzQ+IDxUSUItVT47PEJBUz47PE5PTT47SUdOT1JFICUgdQorPFUwRjc1PiA8VElCLVU+OzxNQUM+OzxOT00+O0lHTk9SRSAlIHV1Cis8VTBGN0E+IDxUSUItRT47PEJBUz47PE5PTT47SUdOT1JFICUgZQorPFUwRjdCPiA8VElCLUU+OzxNQUM+OzxOT00+O0lHTk9SRSAlIGVlCis8VTBGN0M+IDxUSUItTz47PEJBUz47PE5PTT47SUdOT1JFICUgbworPFUwRjdEPiA8VElCLU8+OzxNQUM+OzxOT00+O0lHTk9SRSAlIG9vCisKKyUgRklYTUU6IDBGMzksIDBGN0YsIDBGODQsIDBGODUsIDBGODYsIDBGODcsCisKKyUgRklYTUU6IDBGODgsIFVGODksIFVGOEEsIDBGOEIKKzxVMEY4OD4gSUdOT1JFOzxQQ1Q+O0lHTk9SRTtJR05PUkUKKzxVMEY4OT4gSUdOT1JFOzxQQ1Q+O0lHTk9SRTtJR05PUkUKKzxVMEY4QT4gSUdOT1JFOzxQQ1Q+O0lHTk9SRTtJR05PUkUKKzxVMEY4Qj4gSUdOT1JFOzxQQ1Q+O0lHTk9SRTtJR05PUkUKKworcmVvcmRlci1lbmQKKworRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKKworaW50X2N1cnJfc3ltYm9sICAgICAgICAgIjxVMDA0Mj48VTAwNTQ+PFUwMDRFPiAiCitjdXJyZW5jeV9zeW1ib2wgICAgIjxVMEY1MT48VTBGNDQ+PFUwRjc0PjxVMEY2Mz48VTBGMEI+PFUwRjQwPjxVMEZCMj48VTBGNTg+PFUwRjBCPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAgICAzOzI7Citwb3NpdGl2ZV9zaWduICAgICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgICAzCitmcmFjX2RpZ2l0cyAgICAgICAgICAgICAzCitwX2NzX3ByZWNlZGVzICAgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgICA0CituX3NpZ25fcG9zbiAgICAgICAgICAgICA0CisKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCisKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAgIjxVMDAyQz4iCitncm91cGluZyAgICAgICAgICAgICAgICAzOzIKKworRU5EIExDX05VTUVSSUMKKworTENfVElNRQorYWJkYXkgICAiPFUwRjVGPjxVMEZCMz48VTBGMEI+IjsvCisgICAgICAgICI8VTBGNTg+PFUwRjcyPjxVMEY2Mj48VTBGMEI+IjsvCisgICAgICAgICI8VTBGNjM+PFUwRkI3PjxVMEY0Mj48VTBGMEI+IjsvCisgICAgICAgICI8VTBGNTQ+PFUwRjc0PjxVMEY2Mj48VTBGMEI+IjsvCisgICAgICAgICI8VTBGNjY+PFUwRjQ0PjxVMEY2Nj48VTBGMEI+IjsvCisgICAgICAgICI8VTBGNjY+PFUwRkE0PjxVMEY3QT48VTBGNTM+PFUwRjBCPiI7LworICAgICAgICAiPFUwRjQ5PjxVMEY3Mj48VTBGMEI+IgorCitkYXkgICAgICI8VTBGNDI+PFUwRjVGPjxVMEY2MD48VTBGMEI+PFUwRjVGPjxVMEZCMz48VTBGMEI+PFUwRjU2PjxVMEYwQj4iOy8KKyAgICAgICAgIjxVMEY0Mj48VTBGNUY+PFUwRjYwPjxVMEYwQj48VTBGNTg+PFUwRjcyPjxVMEY0Mj48VTBGMEI+PFUwRjUxPjxVMEY1OD48VTBGNjI+PFUwRjBCPiI7LworICAgICAgICAiPFUwRjQyPjxVMEY1Rj48VTBGNjA+PFUwRjBCPjxVMEY2Mz48VTBGQjc+PFUwRjQyPjxVMEYwQj48VTBGNTU+PFUwRjBCPiI7LworICAgICAgICAiPFUwRjQyPjxVMEY1Rj48VTBGNjA+PFUwRjBCPjxVMEY1ND48VTBGNzQ+PFUwRjYyPjxVMEYwQj48VTBGNTY+PFUwRjc0PjxVMEYwQj4iOy8KKyAgICAgICAgIjxVMEY0Mj48VTBGNUY+PFUwRjYwPjxVMEYwQj48VTBGNTQ+PFUwRjBCPjxVMEY2Nj48VTBGNDQ+PFUwRjY2PjxVMEYwQj4iOy8KKyAgICAgICAgIjxVMEY0Mj48VTBGNUY+PFUwRjYwPjxVMEYwQj48VTBGNjY+PFUwRkE0PjxVMEY3QT48VTBGNTM+PFUwRjBCPjxVMEY1NT48VTBGMEI+IjsvCisgICAgICAgICI8VTBGNDI+PFUwRjVGPjxVMEY2MD48VTBGMEI+PFUwRjQ5PjxVMEY3Mj48VTBGMEI+PFUwRjU4PjxVMEYwQj4iCisKKworYWJtb24gICAiPFUwRjVGPjxVMEZCMz48VTBGMEI+PFUwRjIxPiI7LworCSI8VTBGNUY+PFUwRkIzPjxVMEYwQj48VTBGMjI+IjsvCisJIjxVMEY1Rj48VTBGQjM+PFUwRjBCPjxVMEYyMz4iOy8KKwkiPFUwRjVGPjxVMEZCMz48VTBGMEI+PFUwRjI0PiI7LworCSI8VTBGNUY+PFUwRkIzPjxVMEYwQj48VTBGMjU+IjsvCisJIjxVMEY1Rj48VTBGQjM+PFUwRjBCPjxVMEYyNj4iOy8KKwkiPFUwRjVGPjxVMEZCMz48VTBGMEI+PFUwRjI3PiI7LworCSI8VTBGNUY+PFUwRkIzPjxVMEYwQj48VTBGMjg+IjsvCisJIjxVMEY1Rj48VTBGQjM+PFUwRjBCPjxVMEYyOT4iOy8KKwkiPFUwRjVGPjxVMEZCMz48VTBGMEI+PFUwRjIxPjxVMEYyMD4iOy8KKwkiPFUwRjVGPjxVMEZCMz48VTBGMEI+PFUwRjIxPjxVMEYyMT4iOy8KKwkiPFUwRjVGPjxVMEZCMz48VTBGMEI+PFUwRjIxPjxVMEYyMj4iCisKK21vbiAgICAgICI8VTBGNUY+PFUwRkIzPjxVMEYwQj48VTBGNTY+PFUwRjBCPjxVMEY1MT48VTBGNDQ+PFUwRjBCPjxVMEY1ND48VTBGMEI+IjsvCisgICAgICAgICAiPFUwRjVGPjxVMEZCMz48VTBGMEI+PFUwRjU2PjxVMEYwQj48VTBGNDI+PFUwRjQ5PjxVMEY3Mj48VTBGNjY+PFUwRjBCPjxVMEY1ND48VTBGMEI+IjsvCisgICAgICAgICAiPFUwRjVGPjxVMEZCMz48VTBGMEI+PFUwRjU2PjxVMEYwQj48VTBGNDI+PFUwRjY2PjxVMEY3ND48VTBGNTg+PFUwRjBCPjxVMEY1ND48VTBGMEI+IjsvCisgICAgICAgICAiPFUwRjVGPjxVMEZCMz48VTBGMEI+PFUwRjU2PjxVMEYwQj48VTBGNTY+PFUwRjVFPjxVMEY3Mj48VTBGMEI+PFUwRjU0PjxVMEYwQj4iOy8KKyAgICAgICAgICI8VTBGNUY+PFUwRkIzPjxVMEYwQj48VTBGNTY+PFUwRjBCPjxVMEY2Mz48VTBGOTQ+PFUwRjBCPjxVMEY1NT48VTBGMEI+IjsvCisgICAgICAgICAiPFUwRjVGPjxVMEZCMz48VTBGMEI+PFUwRjU2PjxVMEYwQj48VTBGNTE+PFUwRkIyPjxVMEY3ND48VTBGNDI+PFUwRjBCPjxVMEY1ND48VTBGMEI+IjsvCisgICAgICAgICAiPFUwRjVGPjxVMEZCMz48VTBGMEI+PFUwRjU2PjxVMEYwQj48VTBGNTY+PFUwRjUxPjxVMEY3ND48VTBGNTM+PFUwRjU0PjxVMEYwQj4iOy8KKyAgICAiPFUwRjVGPjxVMEZCMz48VTBGMEI+PFUwRjU2PjxVMEYwQj48VTBGNTY+PFUwRjYyPjxVMEY5Mj48VTBGQjE+PFUwRjUxPjxVMEYwQj48VTBGNTQ+PFUwRjBCPiI7LworICAgICAgICAgIjxVMEY1Rj48VTBGQjM+PFUwRjBCPjxVMEY1Nj48VTBGMEI+PFUwRjUxPjxVMEY0Mj48VTBGNzQ+PFUwRjBCPjxVMEY1ND48VTBGMEI+IjsvCisgICAgICAgICAiPFUwRjVGPjxVMEZCMz48VTBGMEI+PFUwRjU2PjxVMEYwQj48VTBGNTY+PFUwRjQ1PjxVMEY3ND48VTBGMEI+PFUwRjU0PjxVMEYwQj4iOy8KKyI8VTBGNUY+PFUwRkIzPjxVMEYwQj48VTBGNTY+PFUwRjBCPjxVMEY1Nj48VTBGNDU+PFUwRjc0PjxVMEYwQj48VTBGNDI+PFUwRjQ1PjxVMEY3Mj48VTBGNDI+PFUwRjBCPjxVMEY1ND48VTBGMEI+IjsvCisiPFUwRjVGPjxVMEZCMz48VTBGMEI+PFUwRjU2PjxVMEYwQj48VTBGNTY+PFUwRjQ1PjxVMEY3ND48VTBGMEI+PFUwRjQyPjxVMEY0OT48VTBGNzI+PFUwRjY2PjxVMEYwQj48VTBGNTQ+PFUwRjBCPiIKKworCisKKworJSBBcHByb3ByaWF0ZSBkYXRlICYgdGltZSByZXByZXNlbnRhdGlvbgorZF90X2ZtdCAgICAgICI8VTBGNTQ+PFUwRjY2PjxVMEZCMT48VTBGNzI+PFUwRjBCPjxVMEY2Mz48VTBGN0M+PFUwMDI1PjxVMDA3OT4vCis8VTBGNUY+PFUwRjYzPjxVMDAyNT48VTAwNkQ+PFUwRjVBPjxVMEY3QT48VTBGNjY+PFUwMDI1PjxVMDA2ND4vCis8VTBGNDY+PFUwRjc0PjxVMEYwQj48VTBGNUE+PFUwRjdDPjxVMEY1MT48VTAwMjU+PFUwMDQ4PjxVMEY0MD4vCis8VTBGNjY+PFUwRjYyPjxVMEYwQj48VTBGNTg+PFUwMDI1PjxVMDA0RD4vCis8VTBGNDA+PFUwRjY2PjxVMEY2Mj48VTBGMEI+PFUwRjQ2PjxVMDAyNT48VTAwNTM+IgorCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24KK2RfZm10ICAgICAgICAiPFUwRjU0PjxVMEY2Nj48VTBGQjE+PFUwRjcyPjxVMEYwQj48VTBGNjM+PFUwRjdDPjxVMDAyNT48VTAwNzk+LworPFUwRjVGPjxVMEY2Mz48VTAwMjU+PFUwMDZEPjxVMEY1QT48VTBGN0E+PFUwRjY2PjxVMDAyNT48VTAwNjQ+IgorCislIEFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24gICIlSDolTTolUyIKK3RfZm10ICAgICAgICAiPFUwRjQ2PjxVMEY3ND48VTBGMEI+PFUwRjVBPjxVMEY3Qz48VTBGNTE+LworPFUwMDI1PjxVMDA0OD48VTBGNDA+PFUwRjY2PjxVMEY2Mj48VTBGMEI+PFUwRjU4Pi8KKzxVMDAyNT48VTAwNEQ+PFUwRjQwPjxVMEY2Nj48VTBGNjI+PFUwRjBCPjxVMEY0Nj48VTAwMjU+PFUwMDUzPiIKKworJSBBTS9QTSBzaWducworYW1fcG0gICAiPFUwRjQ0PjxVMEY2Nj48VTBGMEI+PFUwRjQ2PiI7IjxVMEY1NT48VTBGQjE+PFUwRjcyPjxVMEYwQj48VTBGNDY+IgorCislIEFwcHJvcHJpYXRlIDEyLWhvdXIgY2xvY2sgcmVwcmVzZW50YXRpb24gICIlSTolTTolUyAlcCIKK3RfZm10X2FtcG0gICAgICAgICI8VTBGNDY+PFUwRjc0PjxVMEYwQj48VTBGNUE+PFUwRjdDPjxVMEY1MT4vCis8VTAwMjU+PFUwMDQ5PjxVMEY0MD48VTBGNjY+PFUwRjYyPjxVMEYwQj48VTBGNTg+PFUwMDI1PjxVMDA0RD4vCis8VTBGNDA+PFUwRjY2PjxVMEY2Mj48VTBGMEI+PFUwRjQ2PjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNzA+IgorCisKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCit5ZXNzdHIgICI8VTBGNjg+PFUwRjcyPjxVMEY1Mz4iCitub3N0ciAgICI8VTBGNTg+PFUwRjdBPjxVMEY1Mz4iCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMEY2OD48VTAwNTk+PFUwMDc5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwRjU4PjxVMDA0RT48VTAwNkU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX1RFTEVQSE9ORQorIHRlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Qz4iCislIHRlbF9kb21fZm10ICAgICI8VTAwMzA+PFUwMDJEPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA2Qz4iCislIGludF9zZWxlY3QgICAgICI8VTAwMzA+PFUwMDMwPjxVMDAzMT4iCislIGludF9wcmVmaXggICAgICI8VTAwMzY+PFUwMDM2PiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfUEFQRVIKK2hlaWdodCAgIDI5Nword2lkdGggICAgMjEwCitFTkQgTENfUEFQRVIKKworTENfTUVBU1VSRU1FTlQKKyUgRklYTUUKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA3MD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCituYW1lX2dlbiAgICAiIgorbmFtZV9taXNzICAgIjxVMEY1OD48VTBGN0M+IgorbmFtZV9tciAgICAgIjxVMEY1NT48VTBGN0M+IgorbmFtZV9tcnMgICAgIjxVMEY2OD48VTBGNTg+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworJSAgICAiJWYlTiVhJU4lZCVOJXIldCVlJXQlYiVOJWgldCVzJU4lVCVOJVMlTiV6JWMlTiIKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzI+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjg+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDczPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNTM+LworPFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X25hbWUgICI8VTAwNDI+PFUwMDQ4PjxVMDA1NT4iCislRklYTUUKKyVjb3VudHJ5X3Bvc3QgICIiCitjb3VudHJ5X2FiMiAgICI8VTAwNDI+PFUwMDU0PiIKK2NvdW50cnlfYWIzICAgIjxVMDA0Mj48VTAwNDg+PFUwMDU1PiIKKyVjb3VudHJ5X251bSAgICI8VTAwNDI+PFUwMDQ4PjxVMDA1NT4iCislRklYTUUKKyVjb3VudHJ5X2NhciAgICI8VTAwNDI+IgorJUZJWE1FCislY291bnRyeV9pc2JuICAiIgorbGFuZ19uYW1lICAgICAiPFUwRTQ0PjxVMEUxNz48VTBFMjI+IgorbGFuZ19hYiAgICAgICAiPFUwMDc0PjxVMDA2OD4iCitsYW5nX3Rlcm0gICAgICI8VTAwNzQ+PFUwMDY4PjxVMDA2MT4iCitsYW5nX2xpYiAgICAgICI8VTAwNzQ+PFUwMDY4PjxVMDA2MT4iCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZWxfQ1kgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lbF9DWQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmFjYjEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZWxfQ1kKQEAgLTAsMCArMSwxMDQgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBHcmVlayBMYW5ndWFnZSBMb2NhbGUgZm9yIEN5cHJ1cworJSBCYXNlZCBvbiBsb2NhbGUgZWxfR1IgYnkgS2VsZCBTaW1vbnNlbi4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkdyZWVrIGxvY2FsZSBmb3IgQ3lwcnVzIgorc291cmNlICAgICAiR3JlZWsgRGViaWFuIFRyYW5zbGF0aW9uIFRlYW0iCithZGRyZXNzICAgICJLb25zdGFudGlub3MgTWFyZ2FyaXRpcywgTS4gQXNpYXMgNTAsIE5hZnBsaW9uIDIxMTAwLCBHcmVlY2UiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkdyZWVrIgordGVycml0b3J5ICAiQ3lwcnVzIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwNC0xMC0yMCIKKyUKK2NhdGVnb3J5ICAiZWxfQ1k6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZWxfQ1k6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZWxfQ1k6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJlbF9DWToyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImVsX0NZOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZWxfQ1k6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZWxfQ1k6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZWxfQ1k6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZWxfQ1k6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJlbF9DWToyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImVsX0NZOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAiZWxfR1IiCitFTkQgTENfQ1RZUEUKKworTENfTUVTU0FHRVMKK2NvcHkgImVsX0dSIgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgIjxVMDA0Mz48VTAwNTk+PFUwMDUwPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgIjxVMDBBMz4iCittb25fZGVjaW1hbF9wb2ludCAgICAgIjxVMDAyQz4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgIjxVMDAyRT4iCittb25fZ3JvdXBpbmcgICAgICAgICAgMworcG9zaXRpdmVfc2lnbiAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgNAorZnJhY19kaWdpdHMgICAgICAgICAgIDQKK3BfY3NfcHJlY2VkZXMgICAgICAgICAwCitwX3NlcF9ieV9zcGFjZSAgICAgICAgMAorbl9jc19wcmVjZWRlcyAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAwCitwX3NpZ25fcG9zbiAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAgICAgICI8VTAwMkM+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAgICAiPFUwMDJFPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgICAgMDswCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCitjb3B5ICJlbF9HUiIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCitjb3B5ICJlbF9HUiIKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDMzPjxVMDAzNT48VTAwMzc+IgoraW50X3NlbGVjdCAgICAgIjxVMDAzMD48VTAwMzA+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorJSBGSVhNRQorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAiPFUwMDQzPjxVMDA1OT4iCitjb3VudHJ5X2FiMyAiPFUwMDQzPjxVMDA1OT48VTAwNTA+IgorY291bnRyeV9udW0gMTk2CitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZWxfR1IgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lbF9HUgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTYwOGE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZWxfR1IKQEAgLTAsMCArMSwxNzcgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBHcmVlayBMYW5ndWFnZSBMb2NhbGUgZm9yIEdyZWVjZQorJSBTb3VyY2U6IFJBUAorJSBBZGRyZXNzOiBTYW5rdCBKby8vcmdlbnMgQWxsZSA4CislICAgIERLLTE2MTUgS28vL2Jlbmhhdm4gViwgRGFubWFyaworJSBDb250YWN0OiBLZWxkIFNpbW9uc2VuCislIEVtYWlsOiBLZWxkLlNpbW9uc2VuQGRrdXVnLmRrCislIFRlbDogKzQ1IC0gMzEyMjY1NDMKKyUgRmF4OiArNDUgLSAzMzI1NjU0MworJSBMYW5ndWFnZTogZ3IKKyUgVGVycml0b3J5OiBHUgorJSBSZXZpc2lvbjogNC4zCislIERhdGU6IDE5OTYtMTAtMTUKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogSVNPLTg4NTktNworJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiR3JlZWsgbG9jYWxlIGZvciBHcmVlY2UiCitzb3VyY2UgICAgICJSQVAiCithZGRyZXNzICAgICJTYW5rdCBKb3JnZW5zIEFsbGUgOCwgREstMTYxNSBLb2Jlbmhhdm4gViwgRGFubWFyayIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJHcmVlayIKK3RlcnJpdG9yeSAgIkdyZWVjZSIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjkiCislCitjYXRlZ29yeSAgImVsX0dSOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImVsX0dSOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImVsX0dSOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiZWxfR1I6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJlbF9HUjoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImVsX0dSOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImVsX0dSOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImVsX0dSOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImVsX0dSOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiZWxfR1I6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJlbF9HUjoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAzQkQ+PFUwMzlEPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAzQkY+PFUwMzlGPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgIjxVMDA0NT48VTAwNTU+PFUwMDUyPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgIjxVMjBBQz4iCittb25fZGVjaW1hbF9wb2ludCAgICAgIjxVMDAyQz4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgIjxVMDAyRT4iCittb25fZ3JvdXBpbmcgICAgICAgICAgMworcG9zaXRpdmVfc2lnbiAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgNAorZnJhY19kaWdpdHMgICAgICAgICAgIDQKK3BfY3NfcHJlY2VkZXMgICAgICAgICAwCitwX3NlcF9ieV9zcGFjZSAgICAgICAgMAorbl9jc19wcmVjZWRlcyAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAwCitwX3NpZ25fcG9zbiAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAgICAgICI8VTAwMkM+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAgICAiPFUwMDJFPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgICAgMDswCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICI8VTAzOUE+PFUwM0M1PjxVMDNDMT4iOyI8VTAzOTQ+PFUwM0I1PjxVMDNDNT4iOy8KKyAgICAgICAgIjxVMDNBND48VTAzQzE+PFUwM0I5PiI7IjxVMDNBND48VTAzQjU+PFUwM0M0PiI7LworICAgICAgICAiPFUwM0EwPjxVMDNCNT48VTAzQkM+IjsiPFUwM0EwPjxVMDNCMT48VTAzQzE+IjsvCisgICAgICAgICI8VTAzQTM+PFUwM0IxPjxVMDNCMj4iCitkYXkgICAgICI8VTAzOUE+PFUwM0M1PjxVMDNDMT48VTAzQjk+PFUwM0IxPjxVMDNCQT48VTAzQUU+IjsvCisgICAgICAgICI8VTAzOTQ+PFUwM0I1PjxVMDNDNT48VTAzQzQ+PFUwM0FEPjxVMDNDMT48VTAzQjE+IjsvCisgICAgICAgICI8VTAzQTQ+PFUwM0MxPjxVMDNBRj48VTAzQzQ+PFUwM0I3PiI7LworICAgICAgICAiPFUwM0E0PjxVMDNCNT48VTAzQzQ+PFUwM0FDPjxVMDNDMT48VTAzQzQ+PFUwM0I3PiI7LworICAgICAgICAiPFUwM0EwPjxVMDNBRD48VTAzQkM+PFUwM0MwPjxVMDNDND48VTAzQjc+IjsvCisgICAgICAgICI8VTAzQTA+PFUwM0IxPjxVMDNDMT48VTAzQjE+PFUwM0MzPjxVMDNCQT48VTAzQjU+PFUwM0M1PjxVMDNBRT4iOy8KKyAgICAgICAgIjxVMDNBMz48VTAzQUM+PFUwM0IyPjxVMDNCMj48VTAzQjE+PFUwM0M0PjxVMDNCRj4iCithYm1vbiAgICI8VTAzOTk+PFUwM0IxPjxVMDNCRD4iOyI8VTAzQTY+PFUwM0I1PjxVMDNCMj4iOy8KKyAgICAgICAgIjxVMDM5Qz48VTAzQUM+PFUwM0MxPiI7IjxVMDM5MT48VTAzQzA+PFUwM0MxPiI7LworICAgICAgICAiPFUwMzlDPjxVMDNBQz48VTAzQjk+IjsiPFUwMzk5PjxVMDNCRj48VTAzQ0Q+PFUwM0JEPiI7LworICAgICAgICAiPFUwMzk5PjxVMDNCRj48VTAzQ0Q+PFUwM0JCPiI7IjxVMDM5MT48VTAzQ0Q+PFUwM0IzPiI7LworICAgICAgICAiPFUwM0EzPjxVMDNCNT48VTAzQzA+IjsiPFUwMzlGPjxVMDNCQT48VTAzQzQ+IjsvCisgICAgICAgICI8VTAzOUQ+PFUwM0JGPjxVMDNBRD4iOyI8VTAzOTQ+PFUwM0I1PjxVMDNCQT4iCittb24gICAgICI8VTAzOTk+PFUwM0IxPjxVMDNCRD48VTAzQkY+PFUwM0M1PjxVMDNBQz48VTAzQzE+PFUwM0I5PjxVMDNCRj48VTAzQzI+IjsvCisgICAgICAgICI8VTAzQTY+PFUwM0I1PjxVMDNCMj48VTAzQzE+PFUwM0JGPjxVMDNDNT48VTAzQUM+PFUwM0MxPjxVMDNCOT48VTAzQkY+PFUwM0MyPiI7LworICAgICAgICAiPFUwMzlDPjxVMDNBQz48VTAzQzE+PFUwM0M0PjxVMDNCOT48VTAzQkY+PFUwM0MyPiI7LworICAgICAgICAiPFUwMzkxPjxVMDNDMD48VTAzQzE+PFUwM0FGPjxVMDNCQj48VTAzQjk+PFUwM0JGPjxVMDNDMj4iOy8KKyAgICAgICAgIjxVMDM5Qz48VTAzQUM+PFUwM0I5PjxVMDNCRj48VTAzQzI+IjsvCisgICAgICAgICI8VTAzOTk+PFUwM0JGPjxVMDNDRD48VTAzQkQ+PFUwM0I5PjxVMDNCRj48VTAzQzI+IjsvCisgICAgICAgICI8VTAzOTk+PFUwM0JGPjxVMDNDRD48VTAzQkI+PFUwM0I5PjxVMDNCRj48VTAzQzI+IjsvCisgICAgICAgICI8VTAzOTE+PFUwM0NEPjxVMDNCMz48VTAzQkY+PFUwM0M1PjxVMDNDMz48VTAzQzQ+PFUwM0JGPjxVMDNDMj4iOy8KKyAgICAgICAgIjxVMDNBMz48VTAzQjU+PFUwM0MwPjxVMDNDND48VTAzQUQ+PFUwM0JDPjxVMDNCMj48VTAzQzE+PFUwM0I5PjxVMDNCRj48VTAzQzI+IjsvCisgICAgICAgICI8VTAzOUY+PFUwM0JBPjxVMDNDND48VTAzQ0U+PFUwM0IyPjxVMDNDMT48VTAzQjk+PFUwM0JGPjxVMDNDMj4iOy8KKyAgICAgICAgIjxVMDM5RD48VTAzQkY+PFUwM0FEPjxVMDNCQz48VTAzQjI+PFUwM0MxPjxVMDNCOT48VTAzQkY+PFUwM0MyPiI7LworICAgICAgICAiPFUwMzk0PjxVMDNCNT48VTAzQkE+PFUwM0FEPjxVMDNCQz48VTAzQjI+PFUwM0MxPjxVMDNCOT48VTAzQkY+PFUwM0MyPiIKKyUgR3JlZWNlIHVzZXMgMTJoIHRpbWU6IGh0dHA6Ly9wdWJsaWNhdGlvbnMuZXUuaW50L2NvZGUvZWwvZWwtNDEwMDgwMGVsLmh0bQorJSBBcHByb3ByaWF0ZSBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uICglYykKKyUgICAgICAgIiVhICVkICViICVZICVyICVaIgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKCV4KQorJSAgICAgICAiJWQvJW0vJVkiCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDU5PiIKKyUKKyUgQXBwcm9wcmlhdGUgdGltZSByZXByZXNlbnRhdGlvbiAoJVgpCislICAgICAgICIlciIKK3RfZm10ICAgIjxVMDAyNT48VTAwNzI+IgorJQorJSBTdHJpbmdzIGZvciBBTS9QTQorJQorYW1fcG0gICAiPFUwM2MwPjxVMDNiYz4iOyI8VTAzYmM+PFUwM2JjPiIKKyUKKyUgQXBwcm9wcmlhdGUgQU0vUE0gdGltZSByZXByZXNlbnRhdGlvbiAoJXIpCislICAgICAgICIlciIKK3RfZm10X2FtcG0gIjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNzA+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uIChkYXRlKDEpKSAgICIlYSAlZCAlYiAlWSAlciAlWiIKK2RhdGVfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCislIEZJWE1FCitoZWlnaHQgICAyOTcKKyUgRklYTUUKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzM+PFUwMDMwPiIKK2ludF9zZWxlY3QgICAgICI8VTAwMzA+PFUwMDMwPiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKKyUgRklYTUUKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgIjxVMDA0Nz48VTAwNTI+IgorY291bnRyeV9hYjMgIjxVMDA0Nz48VTAwNTI+PFUwMDQzPiIKK2NvdW50cnlfbnVtIDMwMAorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VsX0dSQGV1cm8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lbF9HUkBldXJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMWY2YmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lbF9HUkBldXJvCkBAIC0wLDAgKzEsNzcgQEAKK2VzY2FwZV9jaGFyIC8KK2NvbW1lbnRfY2hhciAlCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJHcmVlayBsb2NhbGUgZm9yIEdyZWVjZSB3aXRoIEV1cm8iCitzb3VyY2UgICAgICJGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4iCithZGRyZXNzICAgICI1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkdyZWVrIgordGVycml0b3J5ICAiR3JlZWNlIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yNCIKKyUKK2NhdGVnb3J5ICAiZWxfR1JAZXVybzoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJlbF9HUkBldXJvOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImVsX0dSQGV1cm86MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJlbF9HUkBldXJvOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiZWxfR1JAZXVybzoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImVsX0dSQGV1cm86MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZWxfR1JAZXVybzoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJlbF9HUkBldXJvOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImVsX0dSQGV1cm86MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJlbF9HUkBldXJvOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiZWxfR1JAZXVybzoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJlbF9HUiIKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCisKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxCitjb3B5ICJpc28xNDY1MV90MSIKKworRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKK2NvcHkgImVsX0dSIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgImVsX0dSIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorY29weSAiZWxfR1IiCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworY29weSAiZWxfR1IiCitFTkQgTENfTUVTU0FHRVMKKworTENfUEFQRVIKK2NvcHkgImVsX0dSIgorRU5EIExDX1BBUEVSCisKK0xDX05BTUUKK2NvcHkgImVsX0dSIgorRU5EIExDX05BTUUKKworCitMQ19BRERSRVNTCitjb3B5ICJlbF9HUiIKK0VORCBMQ19BRERSRVNTCisKK0xDX1RFTEVQSE9ORQorY29weSAiZWxfR1IiCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJlbF9HUiIKK0VORCBMQ19NRUFTVVJFTUVOVApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZW5fQUcgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lbl9BRwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzljNDEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZW5fQUcKQEAgLTAsMCArMSw5OSBAQAorZXNjYXBlX2NoYXIgLworY29tbWVudF9jaGFyICUKKyUgRW5nbGlzaCBsYW5ndWFnZSBsb2NhbGUgZm9yIEFudGlndWEgYW5kIEJhcmJ1ZGEuCislIENvbnRyaWJ1dGVkIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDA4CisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJFbmdsaXNoIGxhbmd1YWdlIGxvY2FsZSBmb3IgQW50aWd1YSBhbmQgQmFyYnVkYSIKK3NvdXJjZSAgICAgIkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiIKK2FkZHJlc3MgICAgIjU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiRW5nbGlzaCIKK3RlcnJpdG9yeSAgIkFudGlndWEgYW5kIEJhcmJ1ZGEiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDA4LTA5LTE2IgorJQorY2F0ZWdvcnkgICJlbl9BRzoyMDA4IjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJlbl9BRzoyMDA4IjtMQ19DVFlQRQorY2F0ZWdvcnkgICJlbl9BRzoyMDA4IjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImVuX0FHOjIwMDgiO0xDX1RJTUUKK2NhdGVnb3J5ICAiZW5fQUc6MjAwOCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJlbl9BRzoyMDA4IjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJlbl9BRzoyMDA4IjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJlbl9BRzoyMDA4IjtMQ19QQVBFUgorY2F0ZWdvcnkgICJlbl9BRzoyMDA4IjtMQ19OQU1FCitjYXRlZ29yeSAgImVuX0FHOjIwMDgiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiZW5fQUc6MjAwOCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiZW5fR0IiCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorY29weSAiZW5fR0IiCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAiPFUwMDU4PjxVMDA0Mz48VTAwNDQ+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgIjxVMDAyND4iCittb25fZGVjaW1hbF9wb2ludCAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAwCituX2NzX3ByZWNlZGVzICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgMAorcF9zaWduX3Bvc24gICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJlbl9HQiIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2NvcHkgImVuX0dCIgorRU5EIExDX1RJTUUKKworTENfTUVTU0FHRVMKK2NvcHkgImVuX0dCIgorRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCitjb3B5ICJlbl9VUyIKK0VORCBMQ19QQVBFUgorCitMQ19OQU1FCitjb3B5ICJlbl9HQiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgICAiPFUwMDQxPjxVMDA0Nz4iCitjb3VudHJ5X2FiMyAgICI8VTAwNDE+PFUwMDU0PjxVMDA0Nz4iCitjb3VudHJ5X251bSAgIDI4CitFTkQgTENfQUREUkVTUworCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDMxPiIKK2ludF9zZWxlY3QgICAgICI8VTAwMzA+PFUwMDMxPjxVMDAzMT4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJlbl9VUyIKK0VORCBMQ19NRUFTVVJFTUVOVApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZW5fQVUgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lbl9BVQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWFhN2UyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZW5fQVUKQEAgLTAsMCArMSwxNjAgQEAKK2VzY2FwZV9jaGFyICAvCitjb21tZW50X2NoYXIgICUKKworJSBFbmdsaXNoIGxhbmd1YWdlIGxvY2FsZSBmb3IgQXVzdHJhbGlhCislIFNvdXJjZTogUkFQCislIEFkZHJlc3M6IFNhbmt0IEpvLy9yZ2VucyBBbGxlIDgKKyUgICAgREstMTYxNSBLby8vYmVuaGF2biBWLCBEYW5tYXJrCislIENvbnRhY3Q6IEtlbGQgU2ltb25zZW4KKyUgRW1haWw6IEtlbGQuU2ltb25zZW5AZGt1dWcuZGsKKyUgVGVsOiArNDUgLSAzMTIyNjU0MworJSBGYXg6ICs0NSAtIDMzMjU2NTQzCislIExhbmd1YWdlOiBlbgorJSBUZXJyaXRvcnk6IEFVCislIFJldmlzaW9uOiA0LjMKKyUgRGF0ZTogMTk5Ny0xMS0wNQorJSBVc2VyczogZ2VuZXJhbAorJSBSZXBlcnRvaXJlbWFwOiBtbmVtb25pYy5kcworJSBDaGFyc2V0OiBJU08tODg1OS0xCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJFbmdsaXNoIGxvY2FsZSBmb3IgQXVzdHJhbGlhIgorc291cmNlICAgICAiUkFQIgorYWRkcmVzcyAgICAiU2Fua3QgSjxVMDBGOD5yZ2VucyBBbGxlIDgsIERLLTE2MTUgSzxVMDBGOD5iZW5oYXZuIFYsIERhbm1hcmsiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiRW5nbGlzaCIKK3RlcnJpdG9yeSAgIkF1c3RyYWxpYSIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjkiCislCitjYXRlZ29yeSAgImVuX0FVOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImVuX0FVOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImVuX0FVOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiZW5fQVU6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJlbl9BVToyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImVuX0FVOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImVuX0FVOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImVuX0FVOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImVuX0FVOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiZW5fQVU6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJlbl9BVToyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJlbl9HQiIKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCitjb3B5ICJpc28xNDY1MV90MSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAiPFUwMDQxPjxVMDA1NT48VTAwNDQ+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICI8VTAwMjQ+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgICAgMAorbl9jc19wcmVjZWRlcyAgICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgICAgMAorcF9zaWduX3Bvc24gICAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgICAgMQorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAgIjxVMDAyQz4iCitncm91cGluZyAgICAgICAgICAgICAgICAzOzMKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgICAgICI8VTAwNTM+PFUwMDc1PjxVMDA2RT4iOyI8VTAwNEQ+PFUwMDZGPjxVMDA2RT4iOy8KKyAgICAgICAgICAgICI8VTAwNTQ+PFUwMDc1PjxVMDA2NT4iOyI8VTAwNTc+PFUwMDY1PjxVMDA2ND4iOy8KKyAgICAgICAgICAgICI8VTAwNTQ+PFUwMDY4PjxVMDA3NT4iOyI8VTAwNDY+PFUwMDcyPjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA3ND4iCitkYXkgICAgICAgICAiPFUwMDUzPjxVMDA3NT48VTAwNkU+PFUwMDY0PjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2Rj48VTAwNkU+PFUwMDY0PjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA3NT48VTAwNjU+PFUwMDczPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA1Nz48VTAwNjU+PFUwMDY0PjxVMDA2RT48VTAwNjU+PFUwMDczPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA1ND48VTAwNjg+PFUwMDc1PjxVMDA3Mj48VTAwNzM+PFUwMDY0PjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICAgICAiPFUwMDQ2PjxVMDA3Mj48VTAwNjk+PFUwMDY0PjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNzQ+PFUwMDc1PjxVMDA3Mj48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iCithYm1vbiAgICAgICAiPFUwMDRBPjxVMDA2MT48VTAwNkU+IjsiPFUwMDQ2PjxVMDA2NT48VTAwNjI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzI+IjsiPFUwMDQxPjxVMDA3MD48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+IjsiPFUwMDRBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkM+IjsiPFUwMDQxPjxVMDA3NT48VTAwNjc+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNzA+IjsiPFUwMDRGPjxVMDA2Mz48VTAwNzQ+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDQ0PjxVMDA2NT48VTAwNjM+IgorbW9uICAgICAgICAgIjxVMDA0QT48VTAwNjE+PFUwMDZFPjxVMDA3NT48VTAwNjE+PFUwMDcyPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNDY+PFUwMDY1PjxVMDA2Mj48VTAwNzI+PFUwMDc1PjxVMDA2MT48VTAwNzI+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPjxVMDA2Mz48VTAwNjg+IjsvCisgICAgICAgICAgICAiPFUwMDQxPjxVMDA3MD48VTAwNzI+PFUwMDY5PjxVMDA2Qz4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2RT48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkM+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA0MT48VTAwNzU+PFUwMDY3PjxVMDA3NT48VTAwNzM+PFUwMDc0PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA0Rj48VTAwNjM+PFUwMDc0PjxVMDA2Rj48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNEU+PFUwMDZGPjxVMDA3Nj48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA0ND48VTAwNjU+PFUwMDYzPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IgorZF90X2ZtdCAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNzk+IgordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAgICAgIjxVMDA0MT48VTAwNEQ+IjsiPFUwMDUwPjxVMDA0RD4iCit0X2ZtdF9hbXBtICAiPFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA3MD4iCitkYXRlX2ZtdAkiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19QQVBFUgorJSBGSVhNRQoraGVpZ2h0ICAgMjk3CislIEZJWE1FCit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDM2PjxVMDAzMT4iCitpbnRfc2VsZWN0ICAgICAiPFUwMDMwPjxVMDAzMD48VTAwMzE+PFUwMDMxPiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKKyUgRklYTUUKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgIjxVMDA0MT48VTAwNTU+IgorY291bnRyeV9hYjMgIjxVMDA0MT48VTAwNTU+PFUwMDUzPiIKK2NvdW50cnlfbnVtIDAzNgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VuX0JXIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZW5fQlcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI4MTAyZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VuX0JXCkBAIC0wLDAgKzEsMTE3IEBACitlc2NhcGVfY2hhciAgLworY29tbWVudF9jaGFyICAlCisKKyUgRW5nbGlzaCBsYW5ndWFnZSBsb2NhbGUgZm9yIEJvdHN3YW5hCislIFNvdXJjZTogUkFQCislIEVtYWlsOiBTY2hhbGsgVy4gQ3JvbmplIDxzY2hhbGtjQG50YWJhLmNvLnphPgorJSBUZWw6ICsyNyA4MyAgMjc5NzA0NworJSBGYXg6ICsyNyA4MzggMjc5NzA0NworJSBMYW5ndWFnZTogZW4KKyUgVGVycml0b3J5OiBCVworJSBSZXZpc2lvbjogMS4wCislIERhdGU6IDE5OTktMTItMjMKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMsZHMKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiRW5nbGlzaCBsb2NhbGUgZm9yIEJvdHN3YW5hIgorc291cmNlICAgICAiUkFQIgorYWRkcmVzcyAgICAiIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkVuZ2xpc2giCit0ZXJyaXRvcnkgICJCb3Rzd2FuYSIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjkiCislCitjYXRlZ29yeSAgImVuX0JXOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImVuX0JXOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImVuX0JXOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiZW5fQlc6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJlbl9CVzoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImVuX0JXOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImVuX0JXOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImVuX0JXOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImVuX0JXOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiZW5fQlc6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJlbl9CVzoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJlbl9aQSIKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCitjb3B5ICJlbl9aQSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAiPFUwMDQyPjxVMDA1Nz48VTAwNTA+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICI8VTAwNTA+PFUwMDc1PiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgIDAKK25fY3NfcHJlY2VkZXMgICAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAgIDAKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJlbl9aQSIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2NvcHkgImVuX1pBIgorRU5EIExDX1RJTUUKKworTENfTUVTU0FHRVMKK2NvcHkgImVuX1pBIgorRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCislIEZJWE1FCitoZWlnaHQgICAyOTcKKyUgRklYTUUKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzI+PFUwMDM2PjxVMDAzNz4iCitpbnRfc2VsZWN0ICAgICAiPFUwMDMwPjxVMDAzMD4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCislIEZJWE1FCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICI8VTAwNDI+PFUwMDU3PiIKK2NvdW50cnlfYWIzICI8VTAwNDI+PFUwMDU3PjxVMDA0MT4iCitjb3VudHJ5X251bSAwNzIKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lbl9DQSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VuX0NBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMGVmMmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lbl9DQQpAQCAtMCwwICsxLDE3NyBAQAorZXNjYXBlX2NoYXIgIC8KK2NvbW1lbnRfY2hhciAgJQorCislIEVuZ2xpc2ggbGFuZ3VhZ2UgbG9jYWxlIGZvciBDYW5hZGEKKyUgc29ydGluZyBhY2NvcmRpbmcgdG8gQ0FOL0NTQS1aMjQzLjQuMS0xOTkyCislIFNvdXJjZTogUkFQCislIEFkZHJlc3M6IFNhbmt0IEo8VTAwRjg+cmdlbnMgQWxsZSA4CislICAgIERLLTE2MTUgSzxVMDBGOD5iZW5oYXZuIFYsIERhbm1hcmsKKyUgQ29udGFjdDogS2VsZCBTaW1vbnNlbgorJSBFbWFpbDogS2VsZC5TaW1vbnNlbkBka3V1Zy5kaworJSBUZWw6ICs0NSAtIDMxMjI2NTQzCislIEZheDogKzQ1IC0gMzMyNTY1NDMKKyUgTGFuZ3VhZ2U6IGVuCislIFRlcnJpdG9yeTogQ0EKKyUgUmV2aXNpb246IDQuMworJSBEYXRlOiAxOTk2LTEwLTE1CislIEFwcGxpY2F0aW9uOiBnZW5lcmFsCislIFVzZXJzOiBnZW5lcmFsCislIFJlcGVydG9pcmVtYXA6IG1uZW1vbmljLmRzCislIENoYXJzZXQ6IElTTy04ODU5LTEKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkVuZ2xpc2ggbG9jYWxlIGZvciBDYW5hZGEiCitzb3VyY2UgICAgICJSQVAiCithZGRyZXNzICAgICJTYW5rdCBKPFUwMEY4PnJnZW5zIEFsbGUgOCwgREstMTYxNSBLPFUwMEY4PmJlbmhhdm4gViwgRGFubWFyayIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJFbmdsaXNoIgordGVycml0b3J5ICAiQ2FuYWRhIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAiZW5fQ0E6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZW5fQ0E6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZW5fQ0E6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJlbl9DQToyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImVuX0NBOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZW5fQ0E6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZW5fQ0E6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZW5fQ0E6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZW5fQ0E6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJlbl9DQToyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImVuX0NBOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCisKK3Jlb3JkZXItYWZ0ZXIgPFJFUy0xPgorPENBUD4KKworJSAgUHJlc2VudCBpbiBpc28xNDY1MV90MSwgYnV0IHRoZXNlIGRlZmluaXRpb25zIHNlZW0gdG8gaGF2ZSBiZWVuCislICByZW1vdmVkIGZyb20gbGF0ZXN0IGlzbzE0NjUxIHRhYmxlcy4KK3Jlb3JkZXItYWZ0ZXIgPFUwMDQxPgorPFUwMEM2PiAiPGE+PGU+IjsiPExJRz48TElHPiI7IjxDQVA+PENBUD4iO0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA2MT4KKzxVMDBFNj4gIjxhPjxlPiI7IjxMSUc+PExJRz4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKworcmVvcmRlci1lbmQKKworRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImVuX0dCIgorRU5EIExDX0NUWVBFCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAiPFUwMDQzPjxVMDA0MT48VTAwNDQ+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICI8VTAwMjQ+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgICAgMAorbl9jc19wcmVjZWRlcyAgICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgICAgMAorcF9zaWduX3Bvc24gICAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgICAgMQorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAgIjxVMDAyQz4iCitncm91cGluZyAgICAgICAgICAgICAgICAzOzMKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgICAgICI8VTAwNTM+PFUwMDc1PjxVMDA2RT4iOyI8VTAwNEQ+PFUwMDZGPjxVMDA2RT4iOy8KKyAgICAgICAgICAgICI8VTAwNTQ+PFUwMDc1PjxVMDA2NT4iOyI8VTAwNTc+PFUwMDY1PjxVMDA2ND4iOy8KKyAgICAgICAgICAgICI8VTAwNTQ+PFUwMDY4PjxVMDA3NT4iOyI8VTAwNDY+PFUwMDcyPjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA3ND4iCitkYXkgICAgICAgICAiPFUwMDUzPjxVMDA3NT48VTAwNkU+PFUwMDY0PjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2Rj48VTAwNkU+PFUwMDY0PjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA3NT48VTAwNjU+PFUwMDczPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA1Nz48VTAwNjU+PFUwMDY0PjxVMDA2RT48VTAwNjU+PFUwMDczPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA1ND48VTAwNjg+PFUwMDc1PjxVMDA3Mj48VTAwNzM+PFUwMDY0PjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICAgICAiPFUwMDQ2PjxVMDA3Mj48VTAwNjk+PFUwMDY0PjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNzQ+PFUwMDc1PjxVMDA3Mj48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iCithYm1vbiAgICAgICAiPFUwMDRBPjxVMDA2MT48VTAwNkU+IjsiPFUwMDQ2PjxVMDA2NT48VTAwNjI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzI+IjsiPFUwMDQxPjxVMDA3MD48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+IjsiPFUwMDRBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkM+IjsiPFUwMDQxPjxVMDA3NT48VTAwNjc+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNzA+IjsiPFUwMDRGPjxVMDA2Mz48VTAwNzQ+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDQ0PjxVMDA2NT48VTAwNjM+IgorbW9uICAgICAgICAgIjxVMDA0QT48VTAwNjE+PFUwMDZFPjxVMDA3NT48VTAwNjE+PFUwMDcyPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNDY+PFUwMDY1PjxVMDA2Mj48VTAwNzI+PFUwMDc1PjxVMDA2MT48VTAwNzI+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPjxVMDA2Mz48VTAwNjg+IjsvCisgICAgICAgICAgICAiPFUwMDQxPjxVMDA3MD48VTAwNzI+PFUwMDY5PjxVMDA2Qz4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2RT48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkM+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA0MT48VTAwNzU+PFUwMDY3PjxVMDA3NT48VTAwNzM+PFUwMDc0PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA0Rj48VTAwNjM+PFUwMDc0PjxVMDA2Rj48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNEU+PFUwMDZGPjxVMDA3Nj48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA0ND48VTAwNjU+PFUwMDYzPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IgorZF90X2ZtdCAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNzk+IgordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNzI+IgorYW1fcG0gICAgICAgIjxVMDA0MT48VTAwNEQ+IjsiPFUwMDUwPjxVMDA0RD4iCit0X2ZtdF9hbXBtICAiPFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD4iCitkYXRlX2ZtdAkiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDc5PjxVMDA1OT48VTAwNkY+PFUwMDRGPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCitoZWlnaHQgICAyNzkKK3dpZHRoICAgIDIxNgorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzE+IgoraW50X3NlbGVjdCAgICAgIjxVMDAzMD48VTAwMzE+PFUwMDMxPiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKKyUgRklYTUUKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgIjxVMDA0Mz48VTAwNDE+IgorY291bnRyeV9hYjMgIjxVMDA0Mz48VTAwNDE+PFUwMDRFPiIKK2NvdW50cnlfbnVtIDEyNAorbGFuZ19uYW1lICAgICAiPFUwMDQ1PjxVMDA2RT48VTAwNjc+PFUwMDZDPjxVMDA2OT48VTAwNzM+PFUwMDY4PiIKK2xhbmdfYWIgICAgICAgIjxVMDA2NT48VTAwNkU+IgorbGFuZ190ZXJtICAgICAiPFUwMDY1PjxVMDA2RT48VTAwNjc+IgorbGFuZ19saWIgICAgICAiPFUwMDY1PjxVMDA2RT48VTAwNjc+IgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VuX0RLIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZW5fREsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE1ODc2MwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VuX0RLCkBAIC0wLDAgKzEsMTU4IEBACitlc2NhcGVfY2hhciAvCitjb21tZW50X2NoYXIgJQorCislIEVuZ2xpc2ggbGFuZ3VhZ2UgbG9jYWxlIGZvciBEZW5tYXJrCislCislIFdyaXR0ZW4gYWNjb3JkaW5nIHRvIFBPU0lYLjIKKyUgSVNPL0lFQyA5OTQ1LTI6MTk5MyBzcGVjaWZpY2F0aW9ucworJQorJSBTb3VyY2U6IERhbmlzaCBTdGFuZGFyZHMgQXNzb2NpYXRpb24KKyUgQWRkcmVzczogS29sbGVnaWV2ZWogNgorJSAgICBESy0yOTIwIENoYXJsb3R0ZW5sdW5kLCBEYW5tYXJrCislIENvbnRhY3Q6IEtlbGQgU2ltb25zZW4KKyUgRW1haWw6IEtlbGQuU2ltb25zZW5AZGt1dWcuZGsKKyUgVGVsOiArNDUgLSAzOTk2NjEwMQorJSBGYXg6ICs0NSAtIDM5OTY2MTAyCislIExhbmd1YWdlOiBlbgorJSBUZXJyaXRvcnk6IERLCislIFJldmlzaW9uOiA0LjIKKyUgRGF0ZTogMTk5Ni0wOS0xOAorJSBBcHBsaWNhdGlvbjogZ2VuZXJhbAorJSBVc2VyczogZ2VuZXJhbAorJSBSZXBlcnRvaXJlbWFwOiBtbmVtb25pYy5kcworJSBDaGFyc2V0OiBJU09fODg1OS0xOjE5ODcKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbyBmb3IKKyUgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkVuZ2xpc2ggbG9jYWxlIGZvciBEZW5tYXJrIgorc291cmNlICAgICAiRGFuaXNoIFN0YW5kYXJkcyBBc3NvY2lhdGlvbiIKK2FkZHJlc3MgICAgIktvbGxlZ2lldmVqIDYsIERLLTI5MjAgQ2hhcmxvdHRlbmx1bmQsIERhbm1hcmsiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiRW5nbGlzaCIKK3RlcnJpdG9yeSAgIkRlbm1hcmsiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA2LTI5IgorJQorY2F0ZWdvcnkgICJlbl9ESzoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJlbl9ESzoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJlbl9ESzoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImVuX0RLOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiZW5fREs6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJlbl9ESzoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJlbl9ESzoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJlbl9ESzoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJlbl9ESzoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImVuX0RLOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiZW5fREs6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DT0xMQVRFCitjb3B5ICJpc28xNDY1MV90MSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJlbl9HQiIKK0VORCBMQ19DVFlQRQorCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgIjxVMDA0ND48VTAwNEI+PFUwMDRCPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAiPFUwMEE0PiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICI8VTAwMkM+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgIjxVMDAyRT4iCittb25fZ3JvdXBpbmcgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgIDAKK25fY3NfcHJlY2VkZXMgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgIDAKK3Bfc2lnbl9wb3NuICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICI8VTAwMkU+IgorZ3JvdXBpbmcgICAgICAgICAgICAgMzszCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICAiPFUwMDUzPjxVMDA3NT48VTAwNkU+IjsiPFUwMDREPjxVMDA2Rj48VTAwNkU+IjsvCisgICAgICAgICAiPFUwMDU0PjxVMDA3NT48VTAwNjU+IjsiPFUwMDU3PjxVMDA2NT48VTAwNjQ+IjsvCisgICAgICAgICAiPFUwMDU0PjxVMDA2OD48VTAwNzU+IjsiPFUwMDQ2PjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNzQ+IgorZGF5ICAgICAgIjxVMDA1Mz48VTAwNzU+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgIjxVMDA0RD48VTAwNkY+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgIjxVMDA1ND48VTAwNzU+PFUwMDY1PjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICI8VTAwNTc+PFUwMDY1PjxVMDA2ND48VTAwNkU+PFUwMDY1PjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICI8VTAwNTQ+PFUwMDY4PjxVMDA3NT48VTAwNzI+PFUwMDczPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgIjxVMDA0Nj48VTAwNzI+PFUwMDY5PjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDc0PjxVMDA3NT48VTAwNzI+PFUwMDY0PjxVMDA2MT48VTAwNzk+IgorYWJtb24gICAgIjxVMDA0QT48VTAwNjE+PFUwMDZFPiI7IjxVMDA0Nj48VTAwNjU+PFUwMDYyPiI7LworICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA0MT48VTAwNzA+PFUwMDcyPiI7LworICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDc5PiI7IjxVMDA0QT48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZDPiI7IjxVMDA0MT48VTAwNzU+PFUwMDY3PiI7LworICAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA0Rj48VTAwNjM+PFUwMDc0PiI7LworICAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDc2PiI7IjxVMDA0ND48VTAwNjU+PFUwMDYzPiIKK21vbiAgICAgICI8VTAwNEE+PFUwMDYxPjxVMDA2RT48VTAwNzU+PFUwMDYxPjxVMDA3Mj48VTAwNzk+IjsvCisgICAgICAgICAiPFUwMDQ2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA3NT48VTAwNjE+PFUwMDcyPjxVMDA3OT4iOy8KKyAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Mj48VTAwNjM+PFUwMDY4PiI7LworICAgICAgICAgIjxVMDA0MT48VTAwNzA+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkU+PFUwMDY1PiI7LworICAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZDPjxVMDA3OT4iOy8KKyAgICAgICAgICI8VTAwNDE+PFUwMDc1PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgICI8VTAwNEY+PFUwMDYzPjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgICI8VTAwNDQ+PFUwMDY1PjxVMDA2Mz48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiIKKyUgZGF0ZSBmb3JtYXRzIGZvbGxvd2luZyBJU08gODYwMS0xOTg4CitkX3RfZm10ICAiPFUwMDI1PjxVMDA1OT48VTAwMkQ+PFUwMDI1PjxVMDA2RD48VTAwMkQ+PFUwMDI1PjxVMDA2ND48VTAwNTQ+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICAiPFUwMDI1PjxVMDA1OT48VTAwMkQ+PFUwMDI1PjxVMDA2RD48VTAwMkQ+PFUwMDI1PjxVMDA2ND4iCit0X2ZtdCAgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICAiIjsiIgordF9mbXRfYW1wbSAgIiIKK2RhdGVfZm10CSI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCit5ZXNleHByICAiPFUwMDVFPjxVMDA1Qj48VTAwMzE+PFUwMDRBPjxVMDA2QT48VTAwNzM+PFUwMDUzPjxVMDA3OT48VTAwNTk+PFUwMDZGPjxVMDA0Rj48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICAiPFUwMDVFPjxVMDA1Qj48VTAwMzA+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfUEFQRVIKK2NvcHkgImRhX0RLIgorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQorY29weSAiZGFfREsiCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJkYV9ESyIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgIjxVMDA0ND48VTAwNEI+IgorY291bnRyeV9hYjMgIjxVMDA0ND48VTAwNEU+PFUwMDRCPiIKK2NvdW50cnlfbnVtIDIwOAorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VuX0dCIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZW5fR0IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU1OGYxZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VuX0dCCkBAIC0wLDAgKzEsMTY0IEBACitlc2NhcGVfY2hhciAgLworY29tbWVudF9jaGFyICAlCisKKyUgRW5nbGlzaCBsYW5ndWFnZSBsb2NhbGUgZm9yIEJyaXRhaW4KKyUgU291cmNlOiBSQVAKKyUgQWRkcmVzczogU2Fua3QgSm8vL3JnZW5zIEFsbGUgOAorJSAgICBESy0xNjE1IEtvLy9iZW5oYXZuIFYsIERhbm1hcmsKKyUgQ29udGFjdDogS2VsZCBTaW1vbnNlbgorJSBFbWFpbDogS2VsZC5TaW1vbnNlbkBka3V1Zy5kaworJSBUZWw6ICs0NSAtIDMxMjI2NTQzCislIEZheDogKzQ1IC0gMzMyNTY1NDMKKyUgTGFuZ3VhZ2U6IGVuCislIFRlcnJpdG9yeTogR0IKKyUgUmV2aXNpb246IDQuMworJSBEYXRlOiAxOTk2LTEwLTE1CislIFVzZXJzOiBnZW5lcmFsCislIFJlcGVydG9pcmVtYXA6IG1uZW1vbmljLmRzCislIENoYXJzZXQ6IElTTy04ODU5LTEKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkVuZ2xpc2ggbG9jYWxlIGZvciBCcml0YWluIgorc291cmNlICAgICAiUkFQIgorYWRkcmVzcyAgICAiU2Fua3QgSjxVMDBGOD5yZ2VucyBBbGxlIDgsIERLLTE2MTUgSzxVMDBGOD5iZW5oYXZuIFYsIERhbm1hcmsiCitjb250YWN0ICAgICJLZWxkIFNpbW9uc2VuIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkVuZ2xpc2giCit0ZXJyaXRvcnkgICJHcmVhdCBCcml0YWluIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOCIKKyUKK2NhdGVnb3J5ICAiZW5fR0I6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZW5fR0I6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZW5fR0I6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJlbl9HQjoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImVuX0dCOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZW5fR0I6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZW5fR0I6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZW5fR0I6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZW5fR0I6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJlbl9HQjoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImVuX0dCOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCislIENvcHkgdGhlIHRlbXBsYXRlIGZyb20gSVNPL0lFQyAxNDY1MQorY29weSAiaXNvMTQ2NTFfdDEiCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgICAgIjxVMDA0Nz48VTAwNDI+PFUwMDUwPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgICAiPFUwMEEzPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgIDAKK25fY3NfcHJlY2VkZXMgICAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAgIDAKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgICI8VTAwMkM+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAgMzszCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICAgICAiPFUwMDUzPjxVMDA3NT48VTAwNkU+IjsiPFUwMDREPjxVMDA2Rj48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA3NT48VTAwNjU+IjsiPFUwMDU3PjxVMDA2NT48VTAwNjQ+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA2OD48VTAwNzU+IjsiPFUwMDQ2PjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNzQ+IgorZGF5ICAgICAgICAgIjxVMDA1Mz48VTAwNzU+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNkY+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA1ND48VTAwNzU+PFUwMDY1PjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNTc+PFUwMDY1PjxVMDA2ND48VTAwNkU+PFUwMDY1PjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNTQ+PFUwMDY4PjxVMDA3NT48VTAwNzI+PFUwMDczPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA0Nj48VTAwNzI+PFUwMDY5PjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDc0PjxVMDA3NT48VTAwNzI+PFUwMDY0PjxVMDA2MT48VTAwNzk+IgorYWJtb24gICAgICAgIjxVMDA0QT48VTAwNjE+PFUwMDZFPiI7IjxVMDA0Nj48VTAwNjU+PFUwMDYyPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA0MT48VTAwNzA+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDc5PiI7IjxVMDA0QT48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZDPiI7IjxVMDA0MT48VTAwNzU+PFUwMDY3PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA0Rj48VTAwNjM+PFUwMDc0PiI7LworICAgICAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDc2PiI7IjxVMDA0ND48VTAwNjU+PFUwMDYzPiIKK21vbiAgICAgICAgICI8VTAwNEE+PFUwMDYxPjxVMDA2RT48VTAwNzU+PFUwMDYxPjxVMDA3Mj48VTAwNzk+IjsvCisgICAgICAgICAgICAiPFUwMDQ2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA3NT48VTAwNjE+PFUwMDcyPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Mj48VTAwNjM+PFUwMDY4PiI7LworICAgICAgICAgICAgIjxVMDA0MT48VTAwNzA+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkU+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZDPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNDE+PFUwMDc1PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNEY+PFUwMDYzPjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNDQ+PFUwMDY1PjxVMDA2Mz48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiIKK2RfdF9mbXQgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgICAgICIiOyIiCit0X2ZtdF9hbXBtICAiIgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+Igord2VlayAgICA3OzE5OTcxMjAxOzQKK2ZpcnN0X3dlZWtkYXkgMgorZmlyc3Rfd29ya2RheSAyCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19QQVBFUgoraGVpZ2h0ICAgMjk3Cit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCit0ZWxfZG9tX2ZtdCAgICAiPFUwMDI1PjxVMDA0MT48VTAwMjA+PFUwMDI1PjxVMDA2Qz4iCitpbnRfc2VsZWN0ICAgICAiPFUwMDMwPjxVMDAzMD4iCitpbnRfcHJlZml4ICAgICAiPFUwMDM0PjxVMDAzND4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorY29weSAiZW5fVVMiCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgICAiPFUwMDQ3PjxVMDA0Mj4iCitjb3VudHJ5X2FiMyAgICI8VTAwNDc+PFUwMDQyPjxVMDA1Mj4iCitjb3VudHJ5X251bSAgIDgyNgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VuX0hLIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZW5fSEsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNjYmRmZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VuX0hLCkBAIC0wLDAgKzEsMjE1IEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKworJSBFbmdsaXNoIGxvY2FsZSBmb3IgSG9uZyBLb25nCislIENvbnRyaWJ1dGVkIGJ5IEtlbnRhcm9oIE5vamkgPGtub2ppQGpwLmlibS5jb20+IGFuZAorJSBUZXRzdWppIE9yaXRhIDxvcml0YUBqcC5pYm0uY29tPi4KKworTENfSURFTlRJRklDQVRJT04KKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfSURFTlRJRklDQVRJT04KKyUgY2F0ZWdvcnkgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KKyUKK3RpdGxlICAgICAgIkVuZ2xpc2ggbG9jYWxlIGZvciBIb25nIEtvbmciCitzb3VyY2UgICAgICJJQk0gR2xvYmFsaXphdGlvbiBDZW50ZXIgb2YgQ29tcGV0ZW5jeSwgWWFtYXRvIFNvZnR3YXJlIExhYm9yYXRvcnkiCithZGRyZXNzICAgICIxNjIzLTE0LCBTaGltb3RzdXJ1bWEsIFlhbWF0by1zaGksIEthbmFnYXdhLWtlbiwgMjQyLTg1MDIsIEphcGFuIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgICIiCitmYXggICAgICAgICAiIgorbGFuZ3VhZ2UgICAgIkVuZ2xpc2giCit0ZXJyaXRvcnkgICAiSG9uZyBLb25nIgorcmV2aXNpb24gICAgIjEuMCIKK2RhdGUgICAgICAgICIyMDAwLE9jdG9iZXIsMjcgKFhNTCBzb3VyY2U6MjAwMCxKdWx5LDIwKSIKKyUKK2NhdGVnb3J5ICAiZW5fSEs6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZW5fSEs6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZW5fSEs6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJlbl9ISzoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImVuX0hLOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZW5fSEs6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZW5fSEs6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZW5fSEs6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZW5fSEs6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJlbl9ISzoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImVuX0hLOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworCitMQ19DVFlQRQorY29weSAiZW5fR0IiCitFTkQgTENfQ1RZUEUKKworCitMQ19DT0xMQVRFCitjb3B5ICJpc28xNDY1MV90MSIKK0VORCBMQ19DT0xMQVRFCisKKworTENfTU9ORVRBUlkKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gdGhlIExDX01PTkVUQVJZIGNhdGVnb3J5CislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRlZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUuCislCitpbnRfY3Vycl9zeW1ib2wgICAgICAgIjxVMDA0OD48VTAwNEI+PFUwMDQ0PjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgIjxVMDA0OD48VTAwNEI+PFUwMDI0PiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgICAzCitwb3NpdGl2ZV9zaWduICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAwCituX2NzX3ByZWNlZGVzICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgIDAKK3Bfc2lnbl9wb3NuICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgMAorJQorRU5EIExDX01PTkVUQVJZCisKKworTENfTlVNRVJJQworJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX05VTUVSSUMgIGNhdGVnb3J5LgorJQorZGVjaW1hbF9wb2ludCAgICAgICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgIjxVMDAyQz4iCitncm91cGluZyAgICAgICAgICAgICAgIDMKKyUKK0VORCBMQ19OVU1FUklDCisKKworTENfVElNRQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX1RJTUUgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS4KKyUKKyUgQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyAoJWEpCithYmRheSAgICAgICAiPFUwMDUzPjxVMDA3NT48VTAwNkU+IjsiPFUwMDREPjxVMDA2Rj48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA3NT48VTAwNjU+IjsiPFUwMDU3PjxVMDA2NT48VTAwNjQ+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA2OD48VTAwNzU+IjsiPFUwMDQ2PjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNzQ+IgorJQorJSBGdWxsIHdlZWtkYXkgbmFtZXMgKCVBKQorZGF5ICAgICAgICAgIjxVMDA1Mz48VTAwNzU+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7IjxVMDA0RD48VTAwNkY+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA1ND48VTAwNzU+PFUwMDY1PjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOyI8VTAwNTc+PFUwMDY1PjxVMDA2ND48VTAwNkU+PFUwMDY1PjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNTQ+PFUwMDY4PjxVMDA3NT48VTAwNzI+PFUwMDczPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7IjxVMDA0Nj48VTAwNzI+PFUwMDY5PjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDc0PjxVMDA3NT48VTAwNzI+PFUwMDY0PjxVMDA2MT48VTAwNzk+IgorJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCithYm1vbiAgICAgICAiPFUwMDRBPjxVMDA2MT48VTAwNkU+IjsiPFUwMDQ2PjxVMDA2NT48VTAwNjI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzI+IjsiPFUwMDQxPjxVMDA3MD48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+IjsiPFUwMDRBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkM+IjsiPFUwMDQxPjxVMDA3NT48VTAwNjc+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNzA+IjsiPFUwMDRGPjxVMDA2Mz48VTAwNzQ+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDQ0PjxVMDA2NT48VTAwNjM+IgorJQorJSBGdWxsIG1vbnRoIG5hbWVzICglQikKK21vbiAgICAgICAgICI8VTAwNEE+PFUwMDYxPjxVMDA2RT48VTAwNzU+PFUwMDYxPjxVMDA3Mj48VTAwNzk+IjsiPFUwMDQ2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA3NT48VTAwNjE+PFUwMDcyPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Mj48VTAwNjM+PFUwMDY4PiI7IjxVMDA0MT48VTAwNzA+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+IjsiPFUwMDRBPjxVMDA3NT48VTAwNkU+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZDPjxVMDA3OT4iOyI8VTAwNDE+PFUwMDc1PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOyI8VTAwNEY+PFUwMDYzPjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOyI8VTAwNDQ+PFUwMDY1PjxVMDA2Mz48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiIKKyUKKyUgRXF1aXZhbGVudCBvZiBBTSBQTQorYW1fcG0gICAgICAgIjxVMDA0MT48VTAwNEQ+IjsiPFUwMDUwPjxVMDA0RD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJUEsICVCICVkLCAlWSAlSTolTTolUyAlWgorZF90X2ZtdCAgICAgIjxVMDAyNT48VTAwNDE+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDQyPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA3MD48VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbgorJSAlQSwgJUIgJWQsICVZCitkX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA0MT48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNDI+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKKyUKKyUgQXBwcm9wcmlhdGUgdGltZSByZXByZXNlbnRhdGlvbgorJSAlSTolTTolUyAlWgordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorJSBBcHByb3ByaWF0ZSAxMiBoIHRpbWUgcmVwcmVzZW50YXRpb24gKCVyKQordF9mbXRfYW1wbSAgIjxVMDAyNT48VTAwNzA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCitFTkQgTENfVElNRQorCisKK0xDX01FU1NBR0VTCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTUVTU0FHRVMgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS4KKyUKKyUgXlt5WV0KK3llc2V4cHIgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA3OT48VTAwNTk+PFUwMDVEPiIKKworJSBTeW50YXggb24gVW5pY29kZSBSZWd1bGFyIEV4cHJlc3Npb24gR3VpZGVsaW5lcyBUUiMxOAorJSB5ZXNleHByICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNzk+PFUwMDU5PjxVMDA1RD4iCisKKyUKKyUgXltuTl0KK25vZXhwciAgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPiIKKworJSBTeW50YXggb24gVW5pY29kZSBSZWd1bGFyIEV4cHJlc3Npb24gR3VpZGVsaW5lcyBUUiMxOAorJSBub2V4cHIgICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD4iCislCisKKyUgWWVzCit5ZXNzdHIgICAgICAiPFUwMDU5PjxVMDA2NT48VTAwNzM+IgorJQorJSBObworbm9zdHIgICAgICAgIjxVMDA0RT48VTAwNkY+IgorJQorRU5EIExDX01FU1NBR0VTCisKKworTENfUEFQRVIKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfUEFQRVIgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KK2hlaWdodCAgICAgIDI5Nword2lkdGggICAgICAgMjEwCisKK0VORCBMQ19QQVBFUgorCisKK0xDX05BTUUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTkFNRSBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorJQorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNzA+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorbmFtZV9nZW4gICAgIiIKK25hbWVfbXIgICAgICI8VTAwNEQ+PFUwMDcyPjxVMDAyRT4iCituYW1lX21ycyAgICAiPFUwMDREPjxVMDA3Mj48VTAwNzM+PFUwMDJFPiIKK25hbWVfbWlzcyAgICI8VTAwNEQ+PFUwMDczPjxVMDAyRT4iCituYW1lX21zICAgICAiIgorCitFTkQgTENfTkFNRQorCisKK0xDX0FERFJFU1MKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfQUREUkVTUyBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorcG9zdGFsX2ZtdCAgIjxVMDAyNT48VTAwN0E+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDU0PjxVMDAyNT48VTAwNzM+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDY1PjxVMDAyNT48VTAwNzI+IgorY291bnRyeV9hYjIgICAiPFUwMDQ4PjxVMDA0Qj4iCitjb3VudHJ5X2FiMyAgICI8VTAwNDg+PFUwMDRCPjxVMDA0Nz4iCitjb3VudHJ5X251bSAgIDM0NAorRU5EIExDX0FERFJFU1MKKworCitMQ19URUxFUEhPTkUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfVEVMRVBIT05FCislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCit0ZWxfaW50X2ZtdCAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAzQj48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwM0I+PFUwMDI1PjxVMDA2Qz4iCisKK0VORCBMQ19URUxFUEhPTkUKKworCitMQ19NRUFTVVJFTUVOVAorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19NRUFTVVJFTUVOVAorJSBjYXRlZ29yeSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorbWVhc3VyZW1lbnQgMQorCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VuX0lFIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZW5fSUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcxZTNiMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VuX0lFCkBAIC0wLDAgKzEsMTU2IEBACitlc2NhcGVfY2hhciAgLworY29tbWVudF9jaGFyICAlCisKKyUgRW5nbGlzaCBsYW5ndWFnZSBsb2NhbGUgZm9yIElyZWxhbmQKKyUgU291cmNlOiBSQVAKKyUgQWRkcmVzczogU2Fua3QgSm8vL3JnZW5zIEFsbGUgOAorJSAgICBESy0xNjE1IEtvLy9iZW5oYXZuIFYsIERhbm1hcmsKKyUgQ29udGFjdDogS2VsZCBTaW1vbnNlbgorJSBFbWFpbDogS2VsZC5TaW1vbnNlbkBka3V1Zy5kaworJSBUZWw6ICs0NSAtIDMxMjI2NTQzCislIEZheDogKzQ1IC0gMzMyNTY1NDMKKyUgTGFuZ3VhZ2U6IGVuCislIFRlcnJpdG9yeTogSUUKKyUgUmV2aXNpb246IDQuNAorJSBEYXRlOiAxOTk3LTExLTA1CislIFVzZXJzOiBnZW5lcmFsCislIFJlcGVydG9pcmVtYXA6IG1uZW1vbmljLmRzCislIENoYXJzZXQ6IElTTy04ODU5LTEKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkVuZ2xpc2ggbG9jYWxlIGZvciBJcmVsYW5kIgorc291cmNlICAgICAiUkFQIgorYWRkcmVzcyAgICAiU2Fua3QgSjxVMDBGOD5yZ2VucyBBbGxlIDgsIERLLTE2MTUgSzxVMDBGOD5iZW5oYXZuIFYsIERhbm1hcmsiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiRW5nbGlzaCIKK3RlcnJpdG9yeSAgIklyZWxhbmQiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA2LTI5IgorJQorY2F0ZWdvcnkgICJlbl9JRToyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJlbl9JRToyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJlbl9JRToyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImVuX0lFOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiZW5fSUU6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJlbl9JRToyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJlbl9JRToyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJlbl9JRToyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJlbl9JRToyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImVuX0lFOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiZW5fSUU6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiZW5fR0IiCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgICAgIjxVMDA0NT48VTAwNTU+PFUwMDUyPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgICAiPFUyMEFDPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgIDAKK25fY3NfcHJlY2VkZXMgICAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAgIDAKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJlbl9HQiIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKKyUgY29weSAiZW5fR0IiCithYmRheSAgICAgICAiPFUwMDUzPjxVMDA3NT48VTAwNkU+IjsiPFUwMDREPjxVMDA2Rj48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA3NT48VTAwNjU+IjsiPFUwMDU3PjxVMDA2NT48VTAwNjQ+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA2OD48VTAwNzU+IjsiPFUwMDQ2PjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNzQ+IgorZGF5ICAgICAgICAgIjxVMDA1Mz48VTAwNzU+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNkY+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA1ND48VTAwNzU+PFUwMDY1PjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNTc+PFUwMDY1PjxVMDA2ND48VTAwNkU+PFUwMDY1PjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNTQ+PFUwMDY4PjxVMDA3NT48VTAwNzI+PFUwMDczPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA0Nj48VTAwNzI+PFUwMDY5PjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDc0PjxVMDA3NT48VTAwNzI+PFUwMDY0PjxVMDA2MT48VTAwNzk+IgorYWJtb24gICAgICAgIjxVMDA0QT48VTAwNjE+PFUwMDZFPiI7IjxVMDA0Nj48VTAwNjU+PFUwMDYyPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA0MT48VTAwNzA+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDc5PiI7IjxVMDA0QT48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZDPiI7IjxVMDA0MT48VTAwNzU+PFUwMDY3PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA0Rj48VTAwNjM+PFUwMDc0PiI7LworICAgICAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDc2PiI7IjxVMDA0ND48VTAwNjU+PFUwMDYzPiIKK21vbiAgICAgICAgICI8VTAwNEE+PFUwMDYxPjxVMDA2RT48VTAwNzU+PFUwMDYxPjxVMDA3Mj48VTAwNzk+IjsvCisgICAgICAgICAgICAiPFUwMDQ2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA3NT48VTAwNjE+PFUwMDcyPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Mj48VTAwNjM+PFUwMDY4PiI7LworICAgICAgICAgICAgIjxVMDA0MT48VTAwNzA+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkU+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZDPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNDE+PFUwMDc1PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNEY+PFUwMDYzPjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNDQ+PFUwMDY1PjxVMDA2Mz48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiIKK2RfdF9mbXQgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgICAgICIiOyIiCit0X2ZtdF9hbXBtICAiIgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworTENfTUVTU0FHRVMKK2NvcHkgICAiZW5fR0IiCitFTkQgTENfTUVTU0FHRVMKKworTENfUEFQRVIKKyUgRklYTUUKK2hlaWdodCAgIDI5NworJSBGSVhNRQord2lkdGggICAgMjEwCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzMz48VTAwMzU+PFUwMDMzPiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKKyUgRklYTUUKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgICAiPFUwMDQ5PjxVMDA0NT4iCitjb3VudHJ5X2FiMyAgICI8VTAwNDk+PFUwMDUyPjxVMDA0Qz4iCitjb3VudHJ5X251bSAgIDM3MgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VuX0lFQGV1cm8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lbl9JRUBldXJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNDI5ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lbl9JRUBldXJvCkBAIC0wLDAgKzEsODMgQEAKK2VzY2FwZV9jaGFyICAvCitjb21tZW50X2NoYXIgICUKKworJSBFbmdsaXNoIGxhbmd1YWdlIGxvY2FsZSBmb3IgSXJlbGFuZCB3aXRoIEV1cm8KKyUgTGFuZ3VhZ2U6IGVuCislIFRlcnJpdG9yeTogSUUKKyUgT3B0aW9uOiBldXJvCislIERhdGU6IDIwMDAtMDgtMjAKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogSVNPLTg4NTktMTUKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkVuZ2xpc2ggbG9jYWxlIGZvciBJcmVsYW5kIHdpdGggRXVybyIKK3NvdXJjZSAgICAgIkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiIKK2FkZHJlc3MgICAgIjU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiRW5nbGlzaCIKK3RlcnJpdG9yeSAgIklyZWxhbmQiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA4LTIwIgorJQorY2F0ZWdvcnkgICJlbl9JRUBldXJvOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImVuX0lFQGV1cm86MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZW5fSUVAZXVybzoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImVuX0lFQGV1cm86MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJlbl9JRUBldXJvOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZW5fSUVAZXVybzoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJlbl9JRUBldXJvOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImVuX0lFQGV1cm86MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZW5fSUVAZXVybzoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImVuX0lFQGV1cm86MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJlbl9JRUBldXJvOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImVuX0lFIgorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKK2NvcHkgImVuX0lFIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgImVuX0dCIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorY29weSAiZW5fSUUiCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworY29weSAiZW5fSUUiCitFTkQgTENfTUVTU0FHRVMKKworTENfUEFQRVIKK2NvcHkgImVuX0lFIgorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQorY29weSAiZW5fSUUiCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJlbl9JRSIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCitjb3B5ICJlbl9JRSIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK2NvcHkgImVuX0lFIgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VuX0lOIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZW5fSU4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVjY2MwZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VuX0lOCkBAIC0wLDAgKzEsMjA0IEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKworJSBFbmdsaXNoIGxvY2FsZSBmb3IgSW5kaWEuCislIENvbnRyaWJ1dGVkIGJ5IEtlbnRhcm9oIE5vamkgPGtub2ppQGpwLmlibS5jb20+IGFuZAorJSBUZXRzdWppIE9yaXRhIDxvcml0YUBqcC5pYm0uY29tPi4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkVuZ2xpc2ggbGFuZ3VhZ2UgbG9jYWxlIGZvciBJbmRpYSIKK3NvdXJjZSAgICAgIklCTSBHbG9iYWxpemF0aW9uIENlbnRlciBvZiBDb21wZXRlbmN5LCBZYW1hdG8gU29mdHdhcmUgTGFib3JhdG9yeSIKK2FkZHJlc3MgICAgIjE2MjMtMTQsIFNoaW1vdHN1cnVtYSwgWWFtYXRvLXNoaSwgS2FuYWdhd2Eta2VuLCAyNDItODUwMiwgSmFwYW4iCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAgIiIKK2ZheCAgICAgICAgICIiCitsYW5ndWFnZSAgICAiRW5nbGlzaCIKK3RlcnJpdG9yeSAgICJJbmRpYSIKK3JldmlzaW9uICAgICIxLjAiCitkYXRlICAgICAgICAiMjAwMCxPY3RvYmVyLDI3IChYTUwgc291cmNlOjIwMDAsSnVseSwyMCkiCislCitjYXRlZ29yeSAgImVuX0lOOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImVuX0lOOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImVuX0lOOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiZW5fSU46MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJlbl9JTjoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImVuX0lOOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImVuX0lOOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImVuX0lOOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImVuX0lOOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiZW5fSU46MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJlbl9JTjoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKKworTENfQ1RZUEUKK2NvcHkgImVuX0dCIgorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKKworJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEKK2NvcHkgImlzbzE0NjUxX3QxIgorCitFTkQgTENfQ09MTEFURQorCisKK0xDX01PTkVUQVJZCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIHRoZSBMQ19NT05FVEFSWSBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkZWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlLgorJQoraW50X2N1cnJfc3ltYm9sICAgICAgICI8VTAwNDk+PFUwMDRFPjxVMDA1Mj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICI8VTIwQTg+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgIDM7MgorcG9zaXRpdmVfc2lnbiAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgIDEKKyUKK0VORCBMQ19NT05FVEFSWQorCisKK0xDX05VTUVSSUMKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OVU1FUklDICBjYXRlZ29yeS4KKyUKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgIjxVMDAyRT4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICI8VTAwMkM+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAzOzIKKyUKK0VORCBMQ19OVU1FUklDCisKKworTENfVElNRQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX1RJTUUgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS4KKyUKKyUgQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyAoJWEpCithYmRheSAgICAgICAiPFUwMDUzPjxVMDA3NT48VTAwNkU+IjsiPFUwMDREPjxVMDA2Rj48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA3NT48VTAwNjU+IjsiPFUwMDU3PjxVMDA2NT48VTAwNjQ+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA2OD48VTAwNzU+IjsiPFUwMDQ2PjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNzQ+IgorJQorJSBGdWxsIHdlZWtkYXkgbmFtZXMgKCVBKQorZGF5ICAgICAgICAgIjxVMDA1Mz48VTAwNzU+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7IjxVMDA0RD48VTAwNkY+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA1ND48VTAwNzU+PFUwMDY1PjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOyI8VTAwNTc+PFUwMDY1PjxVMDA2ND48VTAwNkU+PFUwMDY1PjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNTQ+PFUwMDY4PjxVMDA3NT48VTAwNzI+PFUwMDczPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7IjxVMDA0Nj48VTAwNzI+PFUwMDY5PjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDc0PjxVMDA3NT48VTAwNzI+PFUwMDY0PjxVMDA2MT48VTAwNzk+IgorJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCithYm1vbiAgICAgICAiPFUwMDRBPjxVMDA2MT48VTAwNkU+IjsiPFUwMDQ2PjxVMDA2NT48VTAwNjI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzI+IjsiPFUwMDQxPjxVMDA3MD48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+IjsiPFUwMDRBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkM+IjsiPFUwMDQxPjxVMDA3NT48VTAwNjc+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNzA+IjsiPFUwMDRGPjxVMDA2Mz48VTAwNzQ+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDQ0PjxVMDA2NT48VTAwNjM+IgorJQorJSBGdWxsIG1vbnRoIG5hbWVzICglQikKK21vbiAgICAgICAgICI8VTAwNEE+PFUwMDYxPjxVMDA2RT48VTAwNzU+PFUwMDYxPjxVMDA3Mj48VTAwNzk+IjsiPFUwMDQ2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA3NT48VTAwNjE+PFUwMDcyPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Mj48VTAwNjM+PFUwMDY4PiI7IjxVMDA0MT48VTAwNzA+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+IjsiPFUwMDRBPjxVMDA3NT48VTAwNkU+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZDPjxVMDA3OT4iOyI8VTAwNDE+PFUwMDc1PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOyI8VTAwNEY+PFUwMDYzPjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOyI8VTAwNDQ+PFUwMDY1PjxVMDA2Mz48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiIKKyUKKyUgRXF1aXZhbGVudCBvZiBBTSBQTQorYW1fcG0gICAgICAgIjxVMDA0MT48VTAwNEQ+IjsiPFUwMDUwPjxVMDA0RD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJUEgJWQgJUIgJVkgJUk6JU06JVMgICVaCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA0MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24KKyUgJUEgJWQgJUIgJVkKK2RfZm10ICAgICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDQyPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKKyUKKyUgQXBwcm9wcmlhdGUgdGltZSByZXByZXNlbnRhdGlvbgorJSAlSTolTTolUyAgJVoKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIDEyIGggdGltZSByZXByZXNlbnRhdGlvbiAoJXIpCit0X2ZtdF9hbXBtICAiPFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCitFTkQgTENfVElNRQorCisKK0xDX01FU1NBR0VTCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTUVTU0FHRVMgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS4KKyUKKyUgXlt5WV0KK3llc2V4cHIgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA3OT48VTAwNTk+PFUwMDVEPiIKKworJSBTeW50YXggb24gVW5pY29kZSBSZWd1bGFyIEV4cHJlc3Npb24gR3VpZGVsaW5lcyBUUiMxOAorJSB5ZXNleHByICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNzk+PFUwMDU5PjxVMDA1RD4iCisKKyUKKyUgXltuTl0KK25vZXhwciAgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPiIKKworJSBTeW50YXggb24gVW5pY29kZSBSZWd1bGFyIEV4cHJlc3Npb24gR3VpZGVsaW5lcyBUUiMxOAorJSBub2V4cHIgICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD4iCislCisKKyUgWWVzCit5ZXNzdHIgICAgICAiPFUwMDU5PjxVMDA2NT48VTAwNzM+IgorJQorJSBObworbm9zdHIgICAgICAgIjxVMDA0RT48VTAwNkY+IgorJQorRU5EIExDX01FU1NBR0VTCisKKworTENfUEFQRVIKK2NvcHkgImhpX0lOIgorRU5EIExDX1BBUEVSCisKKworTENfTkFNRQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OQU1FIGNhdGVnb3J5CislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCislCislCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA3MD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCituYW1lX2dlbiAgICAiIgorbmFtZV9tciAgICAgIjxVMDA0RD48VTAwNzI+PFUwMDJFPiIKK25hbWVfbXJzICAgICI8VTAwNEQ+PFUwMDcyPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9taXNzICAgIjxVMDA0RD48VTAwNzM+PFUwMDJFPiIKK25hbWVfbXMgICAgICIiCisKK0VORCBMQ19OQU1FCisKKworTENfQUREUkVTUworJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19BRERSRVNTIGNhdGVnb3J5CislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCitwb3N0YWxfZm10ICAiPFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3Mz48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3Mj4iCitjb3VudHJ5X2FiMiAgICI8VTAwNDk+PFUwMDRFPiIKK2NvdW50cnlfYWIzICAgIjxVMDA0OT48VTAwNEU+PFUwMDQ0PiIKK2NvdW50cnlfbnVtICAgMzU2CitFTkQgTENfQUREUkVTUworCisKK0xDX1RFTEVQSE9ORQorY29weSAiaGlfSU4iCitFTkQgTENfVEVMRVBIT05FCisKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgImhpX0lOIgorRU5EIExDX01FQVNVUkVNRU5UCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lbl9ORyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VuX05HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYmI0ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lbl9ORwpAQCAtMCwwICsxLDI4OSBAQAorZXNjYXBlX2NoYXIgIC8KK2NvbW1lbnRfY2hhciAgJQorCislIEVuZ2xpc2ggbGFuZ3VhZ2UgbG9jYWxlIGZvciBOaWdlcmlhCislIExhbmd1YWdlOiBlbgorJSBUZXJyaXRvcnk6IE5HCislIFJldmlzaW9uOiAwLjIKKyUgRGF0ZTogMjAwNi0wMi0wMQorJSBVc2VyczogZ2VuZXJhbAorJSBDaGFyc2V0OiBVVEYtOAorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorJQorJSBhZGFwdGVkIGZyb20gZW5fWkE7IHNob3VsZCBiZSBjaGVja2VkIGFuZCB2ZXJpZmllZAorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiRW5nbGlzaCBsb2NhbGUgZm9yIE5pZ2VyaWEiCitzb3VyY2UgICAgICIiCithZGRyZXNzICAgICIiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICIiCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJFbmdsaXNoIgordGVycml0b3J5ICAiTmlnZXJpYSIKK3JldmlzaW9uICAgIjAuMiIKK2RhdGUgICAgICAgIjIwMDYtMDItMDEiCislCitjYXRlZ29yeSAgImVuX05HOjIwMDMiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImVuX05HOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImVuX05HOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiZW5fTkc6MjAwMyI7TENfVElNRQorY2F0ZWdvcnkgICJlbl9ORzoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImVuX05HOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImVuX05HOjIwMDMiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImVuX05HOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImVuX05HOjIwMDAiO0xDX01FQVNVUkVNRU5UCitjYXRlZ29yeSAgImVuX05HOjIwMDMiO0xDX05BTUUKK2NhdGVnb3J5ICAiZW5fTkc6MjAwMyI7TENfQUREUkVTUworY2F0ZWdvcnkgICJlbl9ORzoyMDAzIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCitFTkQgTENfQ09MTEFURQorCislIEZJWE1FCitMQ19NT05FVEFSWQorJSAiTkdOICIKK2ludF9jdXJyX3N5bWJvbCAgICAgICAgICI8VTAwNEU+PFUwMDQ3PjxVMDA0RT48VTAwMjA+IgorJSAi4oKmIgorY3VycmVuY3lfc3ltYm9sICAgICAgICAgIjxVMjBBNj4iCislICIuIgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICAgIjxVMDAyRT4iCislICIsIgorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAgICIiCislICItIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgICAwCituX2NzX3ByZWNlZGVzICAgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgICAwCitwX3NpZ25fcG9zbiAgICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgICAxCitFTkQgTENfTU9ORVRBUlkKKworJSBGSVhNRQorTENfTlVNRVJJQworJSAiLiIKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgICI8VTAwMkU+IgorJSAiLCIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgICI8VTAwMkM+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAgMzszCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCislIGFiZGF5IC0gVGhlIGFiYnJldmlhdGlvbnMgZm9yIHRoZSB3ZWVrIGRheXM6CislIC0gU3VuLCBNb24sIFR1ZSwgV2VkLCBUaHUsIEZyaSwgU2F0CithYmRheSAgICAgICAiPFUwMDUzPjxVMDA3NT48VTAwNkU+IjsiPFUwMDREPjxVMDA2Rj48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA3NT48VTAwNjU+IjsiPFUwMDU3PjxVMDA2NT48VTAwNjQ+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA2OD48VTAwNzU+IjsiPFUwMDQ2PjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNzQ+IgorCislIGRheSAtIFRoZSBmdWxsIG5hbWVzIG9mIHRoZSB3ZWVrIGRheXM6CislIC0gU3VuZGF5LCBNb25kYXksIFR1ZXNkYXksIFdlZG5lc2RheSwgVGh1cnNkYXksIEZyaWRheSwgU2F0dXJkYXkKK2RheSAgICAgICAgICI8VTAwNTM+PFUwMDc1PjxVMDA2RT48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDZGPjxVMDA2RT48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNTQ+PFUwMDc1PjxVMDA2NT48VTAwNzM+PFUwMDY0PjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICAgICAiPFUwMDU3PjxVMDA2NT48VTAwNjQ+PFUwMDZFPjxVMDA2NT48VTAwNzM+PFUwMDY0PjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA2OD48VTAwNzU+PFUwMDcyPjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNDY+PFUwMDcyPjxVMDA2OT48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA3ND48VTAwNzU+PFUwMDcyPjxVMDA2ND48VTAwNjE+PFUwMDc5PiIKKworJSBhYm1vbiAtIFRoZSBhYmJyZXZpYXRpb25zIGZvciB0aGUgbW9udGhzIAorJSAtIEphbiwgRmViLCBNYXIsIEFwciwgTWF5LCBKdW4sIEp1bCwgQXVnLCBTZXAsIE9jdCwgTm92LCBEZWMKK2FibW9uICAgICAgICI8VTAwNEE+PFUwMDYxPjxVMDA2RT4iOyI8VTAwNDY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNDE+PFUwMDcwPjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3OT4iOyI8VTAwNEE+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNDE+PFUwMDc1PjxVMDA2Nz4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA3MD4iOyI8VTAwNEY+PFUwMDYzPjxVMDA3ND4iOy8KKyAgICAgICAgICAgICI8VTAwNEU+PFUwMDZGPjxVMDA3Nj4iOyI8VTAwNDQ+PFUwMDY1PjxVMDA2Mz4iCisKKyUgbW9uIC0gVGhlIGZ1bGwgbmFtZXMgb2YgdGhlIG1vbnRocyAtIAorJSAtIEphbnVhcnksIEZlYnJ1YXJ5LCBNYXJjaCwgQXByaWwsIE1heSwgSnVuZQorJSAgIEp1bHksIEF1Z3VzdCwgU2VwdGVtYmVyLCBPY3RvYmVyLCBOb3ZlbWJlciwgRGVjZW1iZXIKK21vbiAgICAgICAgICI8VTAwNEE+PFUwMDYxPjxVMDA2RT48VTAwNzU+PFUwMDYxPjxVMDA3Mj48VTAwNzk+IjsvCisgICAgICAgICAgICAiPFUwMDQ2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA3NT48VTAwNjE+PFUwMDcyPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Mj48VTAwNjM+PFUwMDY4PiI7LworICAgICAgICAgICAgIjxVMDA0MT48VTAwNzA+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkU+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZDPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNDE+PFUwMDc1PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNEY+PFUwMDYzPjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNDQ+PFUwMDY1PjxVMDA2Mz48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiIKKworJSBBYnJldmlhdGVkIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24gdG8gYmUgcmVmZXJlbmNlZCBieSB0aGUgIiVjIiBmaWVsZCBkZXNjcmlwdG9yIC0KKyUKKyUgIiVhIiAoc2hvcnQgd2Vla2RheSBuYW1lKSwKKyUgIiVkIiAoZGF5IG9mIG1vbnRoIGFzIGEgZGVjaW1hbCBudW1iZXIpLAorJSAiJWIiIChzaG9ydCBtb250aCBuYW1lKSwKKyUgIiVZIiAoeWVhciB3aXRoIGNlbnR1cnkgYXMgYSBkZWNpbWFsIG51bWJlciksCislICIlVCIgKDI0LWhvdXIgY2xvY2sgdGltZSBpbiBmb3JtYXQgSEg6TU06U1MpLAorJSAiJVoiIChUaW1lIHpvbmUgbmFtZSkKK2RfdF9mbXQgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKworJSBEYXRlIHJlcHJlc2VudGF0aW9uIHRvIGJlIHJlZmVyZW5jZWQgYnkgdGhlICIleCIgZmllbGQgZGVzY3JpcHRvciAtCislICIlZC8lbS8lWSIsIGRheS9tb250aC95ZWFyIGFzIGRlY2ltYWwgbnVtYmVycyAoMDEvMDEvMjAwMCkuCitkX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA1OT4iCisKKyUgVGltZSByZXByZXNlbnRhdGlvbiB0byBiZSByZWZlcmVuY2VkIGJ5IHRoZSAiJVgiIGZpZWxkIGRlc2NyaXB0b3IgLQorJSAiJVQiICgyNC1ob3VyIGNsb2NrIHRpbWUgaW4gZm9ybWF0IEhIOk1NOlNTKQordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNTQ+IgorCislIERlZmluZSByZXByZXNlbnRhdGlvbiBvZiBhbnRlIG1lcmlkaWVtIGFuZCBwb3N0IG1lcmlkaWVtIHN0cmluZ3MgLQorJSBUaGUgIiIgbWVhbiBkZWZhdWx0IHRvICJBTSIgYW5kICJQTSIuCithbV9wbSAgICAgICAiIjsiIgorCislIERlZmluZSB0aW1lIHJlcHJlc2VudGF0aW9uIGluIDEyLWhvdXIgZm9ybWF0IHdpdGggImFtX3BtIiwgdG8gYmUgcmVmZXJlbmNlZCBieSB0aGUgIiVyIgorJSBUaGUgIiIgbWVhbnMgdGhhdCB0aGlzIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLgordF9mbXRfYW1wbSAgIiIKKworJSBEYXRlIHJlcHJlc2VudGF0aW9uIG5vdCBkZXNjcmliZWQgaW4gSVNPL0lFQyAxNDY1Mi4gQ29tZXMgb3V0IGFzIC0KKyUgIiVhICViICVlICVIOiVNOiVTICVaICVZIiB3aGljaCBpcyBkZWZhdWx0ICJkYXRlIiBjb21tYW5kIG91dHB1dAorJQorJSAlYSAtIGFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZSwKKyUgJWIgLSBhYnJldmlhdGVkIG1vbnRoIG5hbWUsCislICVlIC0gZGF5IG9mIG1vbnRoIGFzIGEgZGVjaW1hbCBudW1iZXIgd2l0aCBsZWFkaW5nIHNwYWNlICgxIHRvIDMxKSwKKyUgJUggLSBob3VyICgyNC1ob3VyIGNsb2NrKSBhcyBhIGRlY2ltYWwgbnVtYmVyICgwMCB0byAyMyksCislICVNIC0gbWludXRlIGFzIGEgZGVjaW1hbCBudW1iZXIgKDAwIHRvIDU5KSwKKyUgJVMgLSBzZWNvbmRzIGFzIGEgZGVjaW1hbCBudW1iZXIgKDAwIHRvIDU5KSwKKyUgJVogLSB0aW1lLXpvbmUgbmFtZSwKKyUgJVkgLSB5ZWFyIHdpdGggY2VudHVyeSBhcyBhIGRlY2ltYWwgbnVtYmVyLGUuZy4gMjAwMS4KK2RhdGVfZm10CSI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCislIFRoZSBhZmZpcm1hdGl2ZSByZXNwb25zZSAtCislICJeW3lZXSIKK3llc2V4cHIgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA3OT48VTAwNTk+PFUwMDVEPiIKKworJSBUaGUgbmVnYXRpdmUgcmVzcG9uc2UgLQorJSAiXltuTl0iCitub2V4cHIgICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD4iCitFTkQgTENfTUVTU0FHRVMKKworTENfUEFQRVIKK2NvcHkgImVuX0RLIgorRU5EIExDX1BBUEVSCisKKyUgRklYTUUKK0xDX1RFTEVQSE9ORQorJSBSZXByZXNlbnRhdGlvbiBvZiB0ZWxlcGhvbmUgbnVtYmVyIGZvciBpbnRlcm5hdGlvbmFsIHVzZSAtCislICIrJWMgJWEgJWwiLCB3aGljaCBpcworJSAiKyVjIC0gY291bnRyeSBjb2RlIiwKKyUgIiVhIC0gYXJlYSBjb2RlIHdpdGhvdXQgdGhlIHByZWZpeCAob2Z0ZW4gMCkiLAorJSAiJWwgbG9jYWwgbnVtYmVyIi4KK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCisKKyUgUmVwcmVzbnRhdGlvbiBvZiB0ZWxlcGhvbmUgbnVtYmVyIGZvciBkb21lc3RpYyB1c2UgLQorJSAiKCVBKSAlbCIsIHdoaWNoIGlzCislICVBIC0gYXJlYSBjb2RlIHdpdGggbmF0aW9uYWwgcHJlZml4CislICVsIC0gbG9jYWwgbnVtYmVyIi4KK3RlbF9kb21fZm10ICAgICI8VTAwMjg+PFUwMDI1PjxVMDA0MT48VTAwMjk+PFUwMDIwPjxVMDAyNT48VTAwNkM+IgorCislIFByZWZpeCBmb3IgbWFraW5nIGludGVybmF0aW9uYWwgY2FsbHMKKyUgIjAwOSIKK2ludF9zZWxlY3QgICAgICI8VTAwMzA+PFUwMDMwPjxVMDAzOT4iCisKKyUgSW50ZXJuYXRpb25hbCBkaWFsaW5nIGNvZGUKKyUgIjIzNCIKK2ludF9wcmVmaXggICAgICI8VTAwMzI+PFUwMDMzPjxVMDAzND4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJlbl9ESyIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCitjb3B5ICJlbl9ESyIKK0VORCBMQ19OQU1FCisKKyUgRklYTUUKK0xDX0FERFJFU1MKKyUgUmVwcmVzZW50YXRpb24gb2YgcG9zdGFsIGFkZHJlc3NlcyAobWludXMgdGhlIGFkZHJlc3NlZSdzIG5hbWUpIGluIFNvdXRoCislIEFmcmljYS4gKElnbm9yZWQgZm9yIG5vdykKKyUgIiVmJU4lYSVOJWQlTiViJU4lcyAlaCAlZSAlciVOJXogJVQlTiVjJU4iLCB3aGljaCBnaXZlcyAtCislCislICJmaXJtIG5hbWUiLAorJSAiZW5kIG9mIGxpbmUiLAorJSAiQy9PIGFkZHJlc3MiLAorJSAiZW5kIG9mIGxpbmUiLAorJSAiZGVwYXJ0bWVudCBuYW1lIiwKKyUgIkJ1aWxkaW5nIG5hbWUiLAorJSAiZW5kIG9mIGxpbmUiLAorJSAic3RyZWV0IG9yIGJsb2NrIG5hbWUiLAorJSAic3BhY2UiLAorJSAiaG91c2UgbnVtYmVyIG9yIGRlc2lnbmF0aW9uIiwKKyUgInNwYWNlIiwKKyUgImZsb29yIG51bWJlciIsCislICJzcGFjZSIsCislICJyb29tIG51bWJlciwgZG9vciBkZXNpZ25hdGlvbiIsCislICJlbmQgb2YgbGluZSIsCislICJwb3N0YWwgY29kZSIsCislICJzcGFjZSIsCislICJ0b3duLCBjaXR5IiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgImNvdW50cnkgZGVzaWduYXRpb24gZm9yIHRoZSA8Y291bnRyeV9wb3N0PiBrZXl3b3JkIiwKKyUgImVuZCBvZiBsaW5lCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorCislIENvdW50cnkgbmFtZSBpbiBFbmdsaXNoIC0gIk5pZ2VyaWEiCitjb3VudHJ5X25hbWUgICI8VTAwNEU+PFUwMDY5PjxVMDA2Nz48VTAwNjU+PFUwMDcyPjxVMDA2OT48VTAwNjE+IgorCislIExhbmd1YWdlIG5hbWUgaW4gRW5nbGlzaCAtICJFbmdsaXNoIgorbGFuZ19uYW1lICAgICAiPFUwMDQ1PjxVMDA2RT48VTAwNjc+PFUwMDZDPjxVMDA2OT48VTAwNzM+PFUwMDY4PiIKKworJSBDRVBUIE1BSUxDT0RFUyBhcmUgc3VnZ2VzdGVkCislIEFsdGVybmF0aXZlbHkgdXNlIHRoZSBjb2RlIGZvdW5kIG9uIHlvdXIgY291bnRyaWVzIHBvc3RhbCBpdGVtIHRyYWNraW5nIG51bWJlcgorJSAiTkciPworJWNvdW50cnlfcG9zdCAgICI8VTAwNEU+PFUwMDQ3PiIKKworJSBVTiBHZW5ldmUgMTk0OTo2OCBEaXN0aW5ndWlzaGluZyBzaWducyBvZiB2ZWhpY2xlcyBpbiBpbnRlcm5hdGlvbmFsIHRyYWZmaWMKKyUgaHR0cDovL3d3dy51bmVjZS5vcmcvdHJhbnMvY29udmVudG4vRGlzdHNpZ25zX1NlcHQyMDAzLnBkZgorJSAiV0FOIgorY291bnRyeV9jYXIgICAiPFUwMDU3PjxVMDA0MT48VTAwNEU+IgorCislIElTTyAyMTA4CislIGh0dHA6Ly93d3cuaXNibi1pbnRlcm5hdGlvbmFsLm9yZy8KK2NvdW50cnlfaXNibiAgOTc4CisKKyUgSVNPIDYzOSBsYW5ndWFnZSBhYmJyZXZpYXRpb25zOgorJSA2MzktMSAyIGxldHRlciwgNjM5LTIgMyBsZXR0ZXIgdGVybWlub2xvZ3kKKyUgaHR0cDovL3d3dy5sb2MuZ292L3N0YW5kYXJkcy9pc282MzktMi9lbmdsYWduLmh0bWwKKyUgImVuIiwgImVuZyIKK2xhbmdfYWIgICAgICAgIjxVMDA2NT48VTAwNkU+IgorbGFuZ190ZXJtICAgICAiPFUwMDY1PjxVMDA2RT48VTAwNjc+IgorbGFuZ19saWIgICAgICAiPFUwMDY1PjxVMDA2RT48VTAwNjc+IgorCislIElTTyAzMTY2IGNvdW50cnkgbnVtYmVyIGFuZCAyIGFuZCAzIGxldHRlciBhYnJldmlhdGlvbnMKKyUgaHR0cDovL3d3dy51bmljb2RlLm9yZy9vbmxpbmVkYXQvY291bnRyaWVzLmh0bWwKKyUgIk5HIiwgIk5HQSIKK2NvdW50cnlfYWIyICAgIjxVMDA0RT48VTAwNDc+IgorY291bnRyeV9hYjMgICAiPFUwMDRFPjxVMDA0Nz48VTAwNDE+IgorY291bnRyeV9udW0gICA1NjYKKworRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VuX05aIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZW5fTloKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE1MTM0ZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VuX05aCkBAIC0wLDAgKzEsMTU5IEBACitlc2NhcGVfY2hhciAgLworY29tbWVudF9jaGFyICAlCisKKyUgRW5nbGlzaCBsYW5ndWFnZSBsb2NhbGUgZm9yIE5ldyBaZWFsYW5kCislIFNvdXJjZTogUkFQCislIEFkZHJlc3M6IFNhbmt0IEpvLy9yZ2VucyBBbGxlIDgKKyUgICAgREstMTYxNSBLby8vYmVuaGF2biBWLCBEYW5tYXJrCislIENvbnRhY3Q6IEtlbGQgU2ltb25zZW4KKyUgRW1haWw6IEtlbGQuU2ltb25zZW5AZGt1dWcuZGsKKyUgVGVsOiArNDUgLSAzMTIyNjU0MworJSBGYXg6ICs0NSAtIDMzMjU2NTQzCislIExhbmd1YWdlOiBlbgorJSBUZXJyaXRvcnk6IE5aCislIFJldmlzaW9uOiA0LjMKKyUgRGF0ZTogMTk5Ny0xMS0wNQorJSBVc2VyczogZ2VuZXJhbAorJSBSZXBlcnRvaXJlbWFwOiBtbmVtb25pYy5kcworJSBDaGFyc2V0OiBJU08tODg1OS0xCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJFbmdsaXNoIGxvY2FsZSBmb3IgTmV3IFplYWxhbmQiCitzb3VyY2UgICAgICJSQVAiCithZGRyZXNzICAgICJTYW5rdCBKPFUwMEY4PnJnZW5zIEFsbGUgOCwgREstMTYxNSBLPFUwMEY4PmJlbmhhdm4gViwgRGFubWFyayIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJFbmdsaXNoIgordGVycml0b3J5ICAiTmV3IFplYWxhbmQiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA2LTI5IgorJQorY2F0ZWdvcnkgICJlbl9OWjoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJlbl9OWjoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJlbl9OWjoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImVuX05aOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiZW5fTlo6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJlbl9OWjoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJlbl9OWjoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJlbl9OWjoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJlbl9OWjoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImVuX05aOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiZW5fTlo6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiZW5fR0IiCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgICAgIjxVMDA0RT48VTAwNUE+PFUwMDQ0PjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgICAiPFUwMDI0PiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgIDAKK25fY3NfcHJlY2VkZXMgICAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAgIDAKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgICI8VTAwMkM+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAgMzszCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICAgICAiPFUwMDUzPjxVMDA3NT48VTAwNkU+IjsiPFUwMDREPjxVMDA2Rj48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA3NT48VTAwNjU+IjsiPFUwMDU3PjxVMDA2NT48VTAwNjQ+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA2OD48VTAwNzU+IjsiPFUwMDQ2PjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNzQ+IgorZGF5ICAgICAgICAgIjxVMDA1Mz48VTAwNzU+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNkY+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA1ND48VTAwNzU+PFUwMDY1PjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNTc+PFUwMDY1PjxVMDA2ND48VTAwNkU+PFUwMDY1PjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNTQ+PFUwMDY4PjxVMDA3NT48VTAwNzI+PFUwMDczPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA0Nj48VTAwNzI+PFUwMDY5PjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDc0PjxVMDA3NT48VTAwNzI+PFUwMDY0PjxVMDA2MT48VTAwNzk+IgorYWJtb24gICAgICAgIjxVMDA0QT48VTAwNjE+PFUwMDZFPiI7IjxVMDA0Nj48VTAwNjU+PFUwMDYyPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA0MT48VTAwNzA+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDc5PiI7IjxVMDA0QT48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZDPiI7IjxVMDA0MT48VTAwNzU+PFUwMDY3PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA0Rj48VTAwNjM+PFUwMDc0PiI7LworICAgICAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDc2PiI7IjxVMDA0ND48VTAwNjU+PFUwMDYzPiIKK21vbiAgICAgICAgICI8VTAwNEE+PFUwMDYxPjxVMDA2RT48VTAwNzU+PFUwMDYxPjxVMDA3Mj48VTAwNzk+IjsvCisgICAgICAgICAgICAiPFUwMDQ2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA3NT48VTAwNjE+PFUwMDcyPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Mj48VTAwNjM+PFUwMDY4PiI7LworICAgICAgICAgICAgIjxVMDA0MT48VTAwNzA+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkU+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZDPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNDE+PFUwMDc1PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNEY+PFUwMDYzPjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNDQ+PFUwMDY1PjxVMDA2Mz48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiIKK2RfdF9mbXQgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgICAgICI8VTAwNDE+PFUwMDREPiI7IjxVMDA1MD48VTAwNEQ+IgordF9mbXRfYW1wbSAgIjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNzA+IgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworTENfTUVTU0FHRVMKK3llc2V4cHIgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfUEFQRVIKKyUgRklYTUUKK2hlaWdodCAgIDI5NworJSBGSVhNRQord2lkdGggICAgMjEwCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzNj48VTAwMzQ+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorJSBGSVhNRQorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAgICI8VTAwNEU+PFUwMDVBPiIKK2NvdW50cnlfYWIzICAgIjxVMDA0RT48VTAwNUE+PFUwMDRDPiIKK2NvdW50cnlfbnVtICAgNTU0CitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZW5fUEggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lbl9QSApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2RhMzUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZW5fUEgKQEAgLTAsMCArMSwyMTUgQEAKK2NvbW1lbnRfY2hhciAgICAlCitlc2NhcGVfY2hhciAgICAgLworJSBFbmdsaXNoIGxhbmd1YWdlIGxvY2FsZSBmb3IgUGhpbGlwcGluZXMuCislIENvbnRyaWJ1dGVkIGJ5IEtlbnRhcm9oIE5vamkgPGtub2ppQGpwLmlibS5jb20+IGFuZAorJSBUZXRzdWppIE9yaXRhIDxvcml0YUBqcC5pYm0uY29tPi4KKworTENfSURFTlRJRklDQVRJT04KKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfSURFTlRJRklDQVRJT04KKyUgY2F0ZWdvcnkgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KKyUKK3RpdGxlICAgICAgICJFbmdsaXNoIGxhbmd1YWdlIGxvY2FsZSBmb3IgUGhpbGlwcGluZXMiCitzb3VyY2UgICAgICJJQk0gR2xvYmFsaXphdGlvbiBDZW50ZXIgb2YgQ29tcGV0ZW5jeSwgWWFtYXRvIFNvZnR3YXJlIExhYm9yYXRvcnkiCithZGRyZXNzICAgICIxNjIzLTE0LCBTaGltb3RzdXJ1bWEsIFlhbWF0by1zaGksIEthbmFnYXdhLWtlbiwgMjQyLTg1MDIsIEphcGFuIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgICIiCitmYXggICAgICAgICAiIgorbGFuZ3VhZ2UgICAgIkVuZ2xpc2giCit0ZXJyaXRvcnkgICAiUGhpbGlwcGluZXMiCityZXZpc2lvbiAgICAiMS4wIgorZGF0ZSAgICAgICAgIjIwMDAsT2N0b2JlciwyNyAoWE1MIHNvdXJjZToyMDAwLEp1bHksMjApIgorJQorY2F0ZWdvcnkgICJlbl9QSDoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJlbl9QSDoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJlbl9QSDoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImVuX1BIOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiZW5fUEg6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJlbl9QSDoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJlbl9QSDoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJlbl9QSDoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJlbl9QSDoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImVuX1BIOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiZW5fUEg6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCisKK0xDX0NUWVBFCitjb3B5ICJlbl9HQiIKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCisKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxCitjb3B5ICJpc28xNDY1MV90MSIKKworRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gdGhlIExDX01PTkVUQVJZIGNhdGVnb3J5CislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRlZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUuCislCitpbnRfY3Vycl9zeW1ib2wgICAgICAgIjxVMDA1MD48VTAwNDg+PFUwMDUwPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgIjxVMDA1MD48VTAwNjg+PFUwMDcwPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgICAzCitwb3NpdGl2ZV9zaWduICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAwCituX2NzX3ByZWNlZGVzICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgIDAKK3Bfc2lnbl9wb3NuICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgMAorJQorRU5EIExDX01PTkVUQVJZCisKKworTENfTlVNRVJJQworJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX05VTUVSSUMgIGNhdGVnb3J5LgorJQorZGVjaW1hbF9wb2ludCAgICAgICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgIjxVMDAyQz4iCitncm91cGluZyAgICAgICAgICAgICAgIDMKKyUKK0VORCBMQ19OVU1FUklDCisKKworTENfVElNRQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX1RJTUUgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS4KKyUKKyUgQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyAoJWEpCithYmRheSAgICAgICAiPFUwMDUzPjxVMDA3NT48VTAwNkU+IjsiPFUwMDREPjxVMDA2Rj48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA3NT48VTAwNjU+IjsiPFUwMDU3PjxVMDA2NT48VTAwNjQ+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA2OD48VTAwNzU+IjsiPFUwMDQ2PjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNzQ+IgorJQorJSBGdWxsIHdlZWtkYXkgbmFtZXMgKCVBKQorZGF5ICAgICAgICAgIjxVMDA1Mz48VTAwNzU+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7IjxVMDA0RD48VTAwNkY+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA1ND48VTAwNzU+PFUwMDY1PjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOyI8VTAwNTc+PFUwMDY1PjxVMDA2ND48VTAwNkU+PFUwMDY1PjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNTQ+PFUwMDY4PjxVMDA3NT48VTAwNzI+PFUwMDczPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7IjxVMDA0Nj48VTAwNzI+PFUwMDY5PjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDc0PjxVMDA3NT48VTAwNzI+PFUwMDY0PjxVMDA2MT48VTAwNzk+IgorJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCithYm1vbiAgICAgICAiPFUwMDRBPjxVMDA2MT48VTAwNkU+IjsiPFUwMDQ2PjxVMDA2NT48VTAwNjI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzI+IjsiPFUwMDQxPjxVMDA3MD48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+IjsiPFUwMDRBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkM+IjsiPFUwMDQxPjxVMDA3NT48VTAwNjc+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNzA+IjsiPFUwMDRGPjxVMDA2Mz48VTAwNzQ+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDQ0PjxVMDA2NT48VTAwNjM+IgorJQorJSBGdWxsIG1vbnRoIG5hbWVzICglQikKK21vbiAgICAgICAgICI8VTAwNEE+PFUwMDYxPjxVMDA2RT48VTAwNzU+PFUwMDYxPjxVMDA3Mj48VTAwNzk+IjsiPFUwMDQ2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA3NT48VTAwNjE+PFUwMDcyPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Mj48VTAwNjM+PFUwMDY4PiI7IjxVMDA0MT48VTAwNzA+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+IjsiPFUwMDRBPjxVMDA3NT48VTAwNkU+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZDPjxVMDA3OT4iOyI8VTAwNDE+PFUwMDc1PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOyI8VTAwNEY+PFUwMDYzPjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOyI8VTAwNDQ+PFUwMDY1PjxVMDA2Mz48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiIKKyUKKyUgRXF1aXZhbGVudCBvZiBBTSBQTQorYW1fcG0gICAgICAgIjxVMDA0MT48VTAwNEQ+IjsiPFUwMDUwPjxVMDA0RD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJUEsICVkICVCLCAlWSAlSTolTTolUyAgJVoKK2RfdF9mbXQgICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNzA+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uCislICVBLCAlZCAlQiwgJVkKK2RfZm10ICAgICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorJQorJSBBcHByb3ByaWF0ZSB0aW1lIHJlcHJlc2VudGF0aW9uCislICVJOiVNOiVTICAlWgordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKKyUgQXBwcm9wcmlhdGUgMTIgaCB0aW1lIHJlcHJlc2VudGF0aW9uICglcikKK3RfZm10X2FtcG0gICI8VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKK0VORCBMQ19USU1FCisKKworTENfTUVTU0FHRVMKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19NRVNTQUdFUyBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkaWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlLgorJQorJSBeW3lZXQoreWVzZXhwciAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDc5PjxVMDA1OT48VTAwNUQ+IgorCislIFN5bnRheCBvbiBVbmljb2RlIFJlZ3VsYXIgRXhwcmVzc2lvbiBHdWlkZWxpbmVzIFRSIzE4CislIHllc2V4cHIgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA3OT48VTAwNTk+PFUwMDVEPiIKKworJQorJSBeW25OXQorbm9leHByICAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+IgorCislIFN5bnRheCBvbiBVbmljb2RlIFJlZ3VsYXIgRXhwcmVzc2lvbiBHdWlkZWxpbmVzIFRSIzE4CislIG5vZXhwciAgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPiIKKyUKKworJSBZZXMKK3llc3N0ciAgICAgICI8VTAwNTk+PFUwMDY1PjxVMDA3Mz4iCislCislIE5vCitub3N0ciAgICAgICAiPFUwMDRFPjxVMDA2Rj4iCislCitFTkQgTENfTUVTU0FHRVMKKworCitMQ19QQVBFUgorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19QQVBFUiBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgoraGVpZ2h0ICAgICAgMjk3Cit3aWR0aCAgICAgICAyMTAKKworRU5EIExDX1BBUEVSCisKKworTENfTkFNRQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OQU1FIGNhdGVnb3J5CislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCislCislCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA3MD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PiIKK25hbWVfZ2VuICAgICIiCituYW1lX21yICAgICAiPFUwMDREPjxVMDA3Mj48VTAwMkU+IgorbmFtZV9tcnMgICAgIjxVMDA0RD48VTAwNzI+PFUwMDczPjxVMDAyRT4iCituYW1lX21pc3MgICAiPFUwMDREPjxVMDA2OT48VTAwNzM+PFUwMDczPjxVMDAyRT4iCituYW1lX21zICAgICAiPFUwMDREPjxVMDA3Mz48VTAwMkU+IgorCitFTkQgTENfTkFNRQorCisKK0xDX0FERFJFU1MKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfQUREUkVTUyBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorcG9zdGFsX2ZtdCAgIjxVMDAyNT48VTAwN0E+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDU0PjxVMDAyNT48VTAwNzM+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDY1PjxVMDAyNT48VTAwNzI+IgorY291bnRyeV9hYjIgICAiPFUwMDQ5PjxVMDA0ND4iCitjb3VudHJ5X2FiMyAgICI8VTAwNDk+PFUwMDQ0PjxVMDA0RT4iCitjb3VudHJ5X251bSAgIDM2MAorRU5EIExDX0FERFJFU1MKKworCitMQ19URUxFUEhPTkUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfVEVMRVBIT05FCislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCit0ZWxfaW50X2ZtdCAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAzQj48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwM0I+PFUwMDI1PjxVMDA2Qz4iCisKK0VORCBMQ19URUxFUEhPTkUKKworCitMQ19NRUFTVVJFTUVOVAorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19NRUFTVVJFTUVOVAorJSBjYXRlZ29yeSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorbWVhc3VyZW1lbnQgMQorCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VuX1NHIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZW5fU0cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE0NzlmYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VuX1NHCkBAIC0wLDAgKzEsMjEzIEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKworJSBFbmdsaXNoIGxhbmd1YWdlIGxvY2FsZSBmb3IgU2luZ2Fwb3JlLgorJSBDb250cmlidXRlZCBieSBLZW50YXJvaCBOb2ppIDxrbm9qaUBqcC5pYm0uY29tPiBhbmQKKyUgVGV0c3VqaSBPcml0YSA8b3JpdGFAanAuaWJtLmNvbT4uCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJFbmdsaXNoIGxhbmd1YWdlIGxvY2FsZSBmb3IgU2luZ2Fwb3JlIgorc291cmNlICAgICAiSUJNIEdsb2JhbGl6YXRpb24gQ2VudGVyIG9mIENvbXBldGVuY3ksIFlhbWF0byBTb2Z0d2FyZSBMYWJvcmF0b3J5IgorYWRkcmVzcyAgICAiMTYyMy0xNCwgU2hpbW90c3VydW1hLCBZYW1hdG8tc2hpLCBLYW5hZ2F3YS1rZW4sIDI0Mi04NTAyLCBKYXBhbiIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICAiIgorZmF4ICAgICAgICAgIiIKK2xhbmd1YWdlICAgICJFbmdsaXNoIgordGVycml0b3J5ICAgIlNpbmdhcG9yZSIKK3JldmlzaW9uICAgICIxLjAiCitkYXRlICAgICAgICAiMjAwMCxPY3RvYmVyLDI3IChYTUwgc291cmNlOjIwMDAsSnVseSwyMCkiCislCitjYXRlZ29yeSAgImVuX1NHOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImVuX1NHOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImVuX1NHOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiZW5fU0c6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJlbl9TRzoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImVuX1NHOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImVuX1NHOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImVuX1NHOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImVuX1NHOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiZW5fU0c6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJlbl9TRzoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJlbl9HQiIKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCisKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxCitjb3B5ICJpc28xNDY1MV90MSIKKworRU5EIExDX0NPTExBVEUKKworCitMQ19NT05FVEFSWQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiB0aGUgTENfTU9ORVRBUlkgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGVmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS4KKyUKK2ludF9jdXJyX3N5bWJvbCAgICAgICAiPFUwMDUzPjxVMDA0Nz48VTAwNDQ+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAiPFUwMDI0PiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgICAzCitwb3NpdGl2ZV9zaWduICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAwCituX2NzX3ByZWNlZGVzICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgIDAKK3Bfc2lnbl9wb3NuICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgMAorJQorRU5EIExDX01PTkVUQVJZCisKKworTENfTlVNRVJJQworJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX05VTUVSSUMgIGNhdGVnb3J5LgorJQorZGVjaW1hbF9wb2ludCAgICAgICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgIjxVMDAyQz4iCitncm91cGluZyAgICAgICAgICAgICAgIDMKKyUKK0VORCBMQ19OVU1FUklDCisKKworTENfVElNRQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX1RJTUUgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS4KKyUKKyUgQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyAoJWEpCithYmRheSAgICAgICAiPFUwMDUzPjxVMDA3NT48VTAwNkU+IjsiPFUwMDREPjxVMDA2Rj48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA3NT48VTAwNjU+IjsiPFUwMDU3PjxVMDA2NT48VTAwNjQ+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA2OD48VTAwNzU+IjsiPFUwMDQ2PjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNzQ+IgorJQorJSBGdWxsIHdlZWtkYXkgbmFtZXMgKCVBKQorZGF5ICAgICAgICAgIjxVMDA1Mz48VTAwNzU+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7IjxVMDA0RD48VTAwNkY+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA1ND48VTAwNzU+PFUwMDY1PjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOyI8VTAwNTc+PFUwMDY1PjxVMDA2ND48VTAwNkU+PFUwMDY1PjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNTQ+PFUwMDY4PjxVMDA3NT48VTAwNzI+PFUwMDczPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7IjxVMDA0Nj48VTAwNzI+PFUwMDY5PjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDc0PjxVMDA3NT48VTAwNzI+PFUwMDY0PjxVMDA2MT48VTAwNzk+IgorJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCithYm1vbiAgICAgICAiPFUwMDRBPjxVMDA2MT48VTAwNkU+IjsiPFUwMDQ2PjxVMDA2NT48VTAwNjI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzI+IjsiPFUwMDQxPjxVMDA3MD48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+IjsiPFUwMDRBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkM+IjsiPFUwMDQxPjxVMDA3NT48VTAwNjc+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNzA+IjsiPFUwMDRGPjxVMDA2Mz48VTAwNzQ+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDQ0PjxVMDA2NT48VTAwNjM+IgorJQorJSBGdWxsIG1vbnRoIG5hbWVzICglQikKK21vbiAgICAgICAgICI8VTAwNEE+PFUwMDYxPjxVMDA2RT48VTAwNzU+PFUwMDYxPjxVMDA3Mj48VTAwNzk+IjsiPFUwMDQ2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA3NT48VTAwNjE+PFUwMDcyPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Mj48VTAwNjM+PFUwMDY4PiI7IjxVMDA0MT48VTAwNzA+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+IjsiPFUwMDRBPjxVMDA3NT48VTAwNkU+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZDPjxVMDA3OT4iOyI8VTAwNDE+PFUwMDc1PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOyI8VTAwNEY+PFUwMDYzPjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOyI8VTAwNDQ+PFUwMDY1PjxVMDA2Mz48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiIKKyUKKyUgRXF1aXZhbGVudCBvZiBBTSBQTQorYW1fcG0gICAgICAgIjxVMDA0MT48VTAwNEQ+IjsiPFUwMDUwPjxVMDA0RD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJUEgJWQsJUIsJVkgJUk6JU06JVMgICVaCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA0MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMkM+PFUwMDI1PjxVMDA0Mj48VTAwMkM+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24KKyUgJUEgJWQsJUIsJVkKK2RfZm10ICAgICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyQz48VTAwMjU+PFUwMDQyPjxVMDAyQz48VTAwMjU+PFUwMDU5PiIKKyUKKyUgQXBwcm9wcmlhdGUgdGltZSByZXByZXNlbnRhdGlvbgorJSAlSTolTTolUyAgJVoKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIDEyIGggdGltZSByZXByZXNlbnRhdGlvbiAoJXIpCit0X2ZtdF9hbXBtICAiPFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCitFTkQgTENfVElNRQorCisKK0xDX01FU1NBR0VTCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTUVTU0FHRVMgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS4KKyUKKyUgXlt5WV0KK3llc2V4cHIgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA3OT48VTAwNTk+PFUwMDVEPiIKKworJSBTeW50YXggb24gVW5pY29kZSBSZWd1bGFyIEV4cHJlc3Npb24gR3VpZGVsaW5lcyBUUiMxOAorJSB5ZXNleHByICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNzk+PFUwMDU5PjxVMDA1RD4iCisKKyUKKyUgXltuTl0KK25vZXhwciAgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPiIKKworJSBTeW50YXggb24gVW5pY29kZSBSZWd1bGFyIEV4cHJlc3Npb24gR3VpZGVsaW5lcyBUUiMxOAorJSBub2V4cHIgICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD4iCislCisKKyUgWWVzCit5ZXNzdHIgICAgICAiPFUwMDU5PjxVMDA2NT48VTAwNzM+IgorJQorJSBObworbm9zdHIgICAgICAgIjxVMDA0RT48VTAwNkY+IgorJQorRU5EIExDX01FU1NBR0VTCisKKworTENfUEFQRVIKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfUEFQRVIgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KK2hlaWdodCAgICAgIDI5Nword2lkdGggICAgICAgMjEwCisKK0VORCBMQ19QQVBFUgorCisKK0xDX05BTUUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTkFNRSBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorJQorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNzA+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz4iCituYW1lX2dlbiAgICAiIgorbmFtZV9tciAgICAgIjxVMDA0RD48VTAwNzI+PFUwMDJFPiIKK25hbWVfbXJzICAgICI8VTAwNEQ+PFUwMDcyPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9taXNzICAgIjxVMDA0RD48VTAwNjk+PFUwMDczPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9tcyAgICAgIjxVMDA0RD48VTAwNzM+PFUwMDJFPiIKKworRU5EIExDX05BTUUKKworCitMQ19BRERSRVNTCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX0FERFJFU1MgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KK3Bvc3RhbF9mbXQgICI8VTAwMjU+PFUwMDdBPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDczPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA2NT48VTAwMjU+PFUwMDcyPiIKK2NvdW50cnlfYWIyICAgIjxVMDA1Mz48VTAwNDc+IgorY291bnRyeV9hYjMgICAiPFUwMDUzPjxVMDA0Nz48VTAwNTA+IgorY291bnRyeV9udW0gICA3MDIKK0VORCBMQ19BRERSRVNTCisKKworTENfVEVMRVBIT05FCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX1RFTEVQSE9ORQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgordGVsX2ludF9mbXQgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwM0I+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDNCPjxVMDAyNT48VTAwNkM+IgorCitFTkQgTENfVEVMRVBIT05FCisKKworTENfTUVBU1VSRU1FTlQKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTUVBU1VSRU1FTlQKKyUgY2F0ZWdvcnkgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KK21lYXN1cmVtZW50IDEKKworRU5EIExDX01FQVNVUkVNRU5UCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lbl9VUyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VuX1VTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NDI1ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lbl9VUwpAQCAtMCwwICsxLDE4MSBAQAorZXNjYXBlX2NoYXIgLworY29tbWVudF9jaGFyICUKKyUgTG9jYWxlIGZvciBFbmdsaXNoIGxvY2FsZSBpbiB0aGUgVVNBCislIENvbnRyaWJ1dGVkIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJFbmdsaXNoIGxvY2FsZSBmb3IgdGhlIFVTQSIKK3NvdXJjZSAgICAgIkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiIKK2FkZHJlc3MgICAgIjU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiRW5nbGlzaCIKK3RlcnJpdG9yeSAgIlVTQSIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjQiCislCitjYXRlZ29yeSAgImVuX1VTOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImVuX1VTOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImVuX1VTOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiZW5fVVM6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJlbl9VUzoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImVuX1VTOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImVuX1VTOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImVuX1VTOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImVuX1VTOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiZW5fVVM6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJlbl9VUzoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJlbl9HQiIKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCisKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxCitjb3B5ICJpc28xNDY1MV90MSIKKworRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgIjxVMDA1NT48VTAwNTM+PFUwMDQ0PjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICI8VTAwMjQ+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgIDEKK2ludF9wX3NlcF9ieV9zcGFjZSAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAwCituX2NzX3ByZWNlZGVzICAgICAgIDEKK2ludF9uX3NlcF9ieV9zcGFjZSAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAwCitwX3NpZ25fcG9zbiAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgMQorJQorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAiPFUwMDJDPiIKK2dyb3VwaW5nICAgICAgICAzOzMKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5CSI8VTAwNTM+PFUwMDc1PjxVMDA2RT4iOyI8VTAwNEQ+PFUwMDZGPjxVMDA2RT4iOy8KKwkiPFUwMDU0PjxVMDA3NT48VTAwNjU+IjsiPFUwMDU3PjxVMDA2NT48VTAwNjQ+IjsvCisJIjxVMDA1ND48VTAwNjg+PFUwMDc1PiI7IjxVMDA0Nj48VTAwNzI+PFUwMDY5PiI7LworCSI8VTAwNTM+PFUwMDYxPjxVMDA3ND4iCitkYXkJIjxVMDA1Mz48VTAwNzU+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworCSI8VTAwNEQ+PFUwMDZGPjxVMDA2RT48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOy8KKwkiPFUwMDU0PjxVMDA3NT48VTAwNjU+PFUwMDczPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworCSI8VTAwNTc+PFUwMDY1PjxVMDA2ND48VTAwNkU+PFUwMDY1PjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOy8KKwkiPFUwMDU0PjxVMDA2OD48VTAwNzU+PFUwMDcyPjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOy8KKwkiPFUwMDQ2PjxVMDA3Mj48VTAwNjk+PFUwMDY0PjxVMDA2MT48VTAwNzk+IjsvCisJIjxVMDA1Mz48VTAwNjE+PFUwMDc0PjxVMDA3NT48VTAwNzI+PFUwMDY0PjxVMDA2MT48VTAwNzk+IgorCit3ZWVrICAgIDc7MTk5NzExMzA7NworZmlyc3Rfd2Vla2RheQkxCitmaXJzdF93b3JrZGF5CTIKK2FibW9uCSI8VTAwNEE+PFUwMDYxPjxVMDA2RT4iOyI8VTAwNDY+PFUwMDY1PjxVMDA2Mj4iOy8KKwkiPFUwMDREPjxVMDA2MT48VTAwNzI+IjsiPFUwMDQxPjxVMDA3MD48VTAwNzI+IjsvCisJIjxVMDA0RD48VTAwNjE+PFUwMDc5PiI7IjxVMDA0QT48VTAwNzU+PFUwMDZFPiI7LworCSI8VTAwNEE+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNDE+PFUwMDc1PjxVMDA2Nz4iOy8KKwkiPFUwMDUzPjxVMDA2NT48VTAwNzA+IjsiPFUwMDRGPjxVMDA2Mz48VTAwNzQ+IjsvCisJIjxVMDA0RT48VTAwNkY+PFUwMDc2PiI7IjxVMDA0ND48VTAwNjU+PFUwMDYzPiIKK21vbgkiPFUwMDRBPjxVMDA2MT48VTAwNkU+PFUwMDc1PjxVMDA2MT48VTAwNzI+PFUwMDc5PiI7LworCSI8VTAwNDY+PFUwMDY1PjxVMDA2Mj48VTAwNzI+PFUwMDc1PjxVMDA2MT48VTAwNzI+PFUwMDc5PiI7LworCSI8VTAwNEQ+PFUwMDYxPjxVMDA3Mj48VTAwNjM+PFUwMDY4PiI7LworCSI8VTAwNDE+PFUwMDcwPjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworCSI8VTAwNEQ+PFUwMDYxPjxVMDA3OT4iOy8KKwkiPFUwMDRBPjxVMDA3NT48VTAwNkU+PFUwMDY1PiI7LworCSI8VTAwNEE+PFUwMDc1PjxVMDA2Qz48VTAwNzk+IjsvCisJIjxVMDA0MT48VTAwNzU+PFUwMDY3PjxVMDA3NT48VTAwNzM+PFUwMDc0PiI7LworCSI8VTAwNTM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKwkiPFUwMDRGPjxVMDA2Mz48VTAwNzQ+PFUwMDZGPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworCSI8VTAwNEU+PFUwMDZGPjxVMDA3Nj48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworCSI8VTAwNDQ+PFUwMDY1PjxVMDA2Mz48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiIKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbiAoJWMpCislCSIlYSAlZCAlYiAlWSAlciAlWiIKK2RfdF9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uICgleCkKKyUJIiVtLyVkLyVZIgorZF9mbXQgICAiPFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA1OT4iCislCislIEFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24gKCVYKQorJQkiJXIiCit0X2ZtdCAgICI8VTAwMjU+PFUwMDcyPiIKKyUKKyUgQXBwcm9wcmlhdGUgQU0vUE0gdGltZSByZXByZXNlbnRhdGlvbiAoJXIpCislCSIlSTolTTolUyAlcCIKK3RfZm10X2FtcG0gIjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNzA+IgorJQorJSBTdHJpbmdzIGZvciBBTS9QTQorJQorYW1fcG0JIjxVMDA0MT48VTAwNEQ+IjsiPFUwMDUwPjxVMDA0RD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKGRhdGUoMSkpICAgIiVhICViICVlICVIOiVNOiVTICVaICVZIgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworTENfTUVTU0FHRVMKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCitoZWlnaHQgICAyNzkKK3dpZHRoICAgIDIxNgorRU5EIExDX1BBUEVSCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK25hbWVfbWlzcyAgICI8VTAwNEQ+PFUwMDY5PjxVMDA3Mz48VTAwNzM+PFUwMDJFPiIKK25hbWVfbXIgICAgICI8VTAwNEQ+PFUwMDcyPjxVMDAyRT4iCituYW1lX21ycyAgICAiPFUwMDREPjxVMDA3Mj48VTAwNzM+PFUwMDJFPiIKK25hbWVfbXMgICAgICI8VTAwNEQ+PFUwMDczPjxVMDAyRT4iCitFTkQgTENfTkFNRQorCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDY4Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDczPjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA1ND48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwN0E+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9uYW1lICAiPFUwMDU1PjxVMDA1Mz48VTAwNDE+IgorY291bnRyeV9wb3N0ICAiPFUwMDU1PjxVMDA1Mz48VTAwNDE+IgorY291bnRyeV9hYjIgICAiPFUwMDU1PjxVMDA1Mz4iCitjb3VudHJ5X2FiMyAgICI8VTAwNTU+PFUwMDUzPjxVMDA0MT4iCitjb3VudHJ5X251bSAgIDg0MAorY291bnRyeV9jYXIgICAiPFUwMDU1PjxVMDA1Mz48VTAwNDE+IgorY291bnRyeV9pc2JuICAwCitsYW5nX25hbWUgICAgICI8VTAwNDU+PFUwMDZFPjxVMDA2Nz48VTAwNkM+PFUwMDY5PjxVMDA3Mz48VTAwNjg+IgorbGFuZ19hYiAgICAgICAiPFUwMDY1PjxVMDA2RT4iCitsYW5nX3Rlcm0gICAgICI8VTAwNjU+PFUwMDZFPjxVMDA2Nz4iCitsYW5nX2xpYiAgICAgICI8VTAwNjU+PFUwMDZFPjxVMDA2Nz4iCitFTkQgTENfQUREUkVTUworCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI4PjxVMDAyNT48VTAwNjE+PFUwMDI5Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDZDPiIKK3RlbF9kb21fZm10ICAgICI8VTAwMjg+PFUwMDI1PjxVMDA2MT48VTAwMjk+PFUwMDIwPjxVMDAyNT48VTAwNkM+IgoraW50X3NlbGVjdCAgICAgIjxVMDAzMT48VTAwMzE+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzMT4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCittZWFzdXJlbWVudCAgICAyCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VuX1pBIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZW5fWkEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYyMDE3MQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VuX1pBCkBAIC0wLDAgKzEsMzU3IEBACitlc2NhcGVfY2hhciAgLworY29tbWVudF9jaGFyICAlCisKKyUgRW5nbGlzaCBsYW5ndWFnZSBsb2NhbGUgZm9yIFNvdXRoIEFmcmljYQorJSBTb3VyY2U6IFp1emEgU29mdHdhcmUgRm91bmRhdGlvbiAoVHJhbnNsYXRlLm9yZy56YSkKKyUgRW1haWw6IGR3YXluZUB0cmFuc2xhdGUub3JnLnphCislIFRlbDogKzI3IDEyIDM0MzAzODkKKyUgRmF4OiArMjcgMTIgMzQzMDM4OQorJSBMYW5ndWFnZTogZW4KKyUgVGVycml0b3J5OiBaQQorJSBSZXZpc2lvbjogMS4zCislIERhdGU6IDIwMDctMDQtMTkKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMsZHMKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorJQorJSBDaGFuZ2Vsb2cKKyUgMS4zICgyMDA3LTA0LTE5KToKKyUgICAgIDIwMDctMDQtMTkgRHdheW5lIEJhaWxleSA8ZHdheW5lQHRyYW5zbGF0ZS5vcmcuemE+CislICAgICAgIC0gQ2hhbmdlIGludF9zZWxlY3QgZnJvbSAwOSB0byAwMAorJSAxLjIuMSAoMjAwNS0xMC0xMyk6CislICAgICAyMDA1LTEwLTEyIER3YXluZSBCYWlsZXkgPGR3YXluZUB0cmFuc2xhdGUub3JnLnphPgorJSAgICAgICAtIFVwZGF0ZSBjb250YWN0IGluZm9ybWF0aW9uCislIDEuMiAoMjAwNC0xMC0yNyk6CislICAgICAyMDA0LTEwLTI3IER3YXluZSBCYWlsZXkgPGR3YXluZUB0cmFuc2xhdGUub3JnLnphPgorJSAgICAgICAtIFJlbW92ZSAuKiBmcm9tIExDX01FU1NBR0VTIHllcy9ub2V4cHIKKyUgICAgICAgLSBDaGFuZ2UgY29udGFjdCBkZXRhaWxzIGFuZCBhZGQgVHJhbnNsYXRlLm9yZy56YQorJSAgICAgICAgIHRvIHByb2plY3QgbmFtZQorJSAgICAgMjAwNC0wMy0zMCBEd2F5bmUgQmFpbGV5IDxkd2F5bmVAdHJhbnNsYXRlLm9yZy56YT4KKyUgICAgICAgLSBBZGRlZCBjb3VudHJ5X3Bvc3QKKyUgICAgICAgLSBBZGRlZCBhYmJyZXZpYXRpb24gdG8gTENfSURFTlRJRklDQVRJT04KKyUgICAgIDIwMDMtMDUtMTcgRHdheW5lIEJhaWxleSA8ZHdheW5lQHRyYW5zbGF0ZS5vcmcuemE+CislICAgICAgIC0gQWRkIGxhbmdfYWIsIGxhbmdfdGVybQorJSAgICAgICAtIEFkZCB2YXJpb3VzIGNvbW1lbnRzIGZvciByZWZlcmVuY2UgZG9jdW1lbnRzCislICAgICAgIC0gQWRkIGNvdW50cnlfaXNibiwgY291bnRyeV9jYXIsIGNvdW50cnlfYWIyLAorJSAgICAgICAgIGNvdW50cnlfYWIzLCBjb3VudHJ5X251bQorJSAgICAgICAtIEFkZCBuYW1lXyogZm9yIGFsbCBzYWx1dGF0aW9ucworJSAxLjEgKDIwMDMtMDMtMTQpOgorJSAgIC0gVXBkYXRlZCBtYWludGFpbmVyIHRvIFp1emEgU29mdHdhcmUgRm91bmRhdGlvbgorJSAgIC0gQ2hhbmdlZCAleCBmb3IgTENfVElNRSB0byB1c2UgZGQvbW0vY2N5eQorJSAgIC0gQWRkZWQgXiB0byBMQ19NRVNTQUdFUyByZWdleCAiXlt5WV0uKiIKKyUgICAtIENvbmZpcm1lZCBMQ19QQVBFUiBhbmQgTENfTUVBU1VSRU1FTlQgc2V0dGluZ3MKKyUgICAtIEFkZGVkIGNvdW50cnkgYW5kIGxhbmd1YWdlIG5hbWVzIHRvIExDX0FERFJFU1MKKyUgICAtIEFkZGVkIG1pc3NpbmcgaW5mbyBmb3IgTENfVEVMRVBIT05FCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJFbmdsaXNoIGxvY2FsZSBmb3IgU291dGggQWZyaWNhIgorc291cmNlICAgICAiWnV6YSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChUcmFuc2xhdGUub3JnLnphKSIKK2FkZHJlc3MgICAgIkJveCAyODM2NCwgU3VubnlzaWRlLCAwMTMyLCBTb3V0aCBBZnJpY2EiCitjb250YWN0ICAgICJEd2F5bmUgQmFpbGV5IgorZW1haWwgICAgICAiZHdheW5lQHRyYW5zbGF0ZS5vcmcuemEiCit0ZWwgICAgICAgICIrMjcgMTIgNDYwIDEwOTUiCitmYXggICAgICAgICIrMjcgMTIgNDYwIDEwOTUiCitsYW5ndWFnZSAgICJFbmdsaXNoIgordGVycml0b3J5ICAiU291dGggQWZyaWNhIgorJSBhdWRpZW5jZSAgICAgIiIKKyUgYXBwbGljYXRpb24gICIiCithYmJyZXZpYXRpb24gIlRyYW5zbGF0ZS5vcmcuemEiCityZXZpc2lvbiAgICIxLjMiCitkYXRlICAgICAgICIyMDA3LTA0LTE5IgorJQorY2F0ZWdvcnkgICJlbl9aQToyMDAzIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJlbl9aQToyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJlbl9aQToyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImVuX1pBOjIwMDMiO0xDX1RJTUUKK2NhdGVnb3J5ICAiZW5fWkE6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJlbl9aQToyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJlbl9aQToyMDAzIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJlbl9aQToyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJlbl9aQToyMDAwIjtMQ19NRUFTVVJFTUVOVAorY2F0ZWdvcnkgICJlbl9aQToyMDAzIjtMQ19OQU1FCitjYXRlZ29yeSAgImVuX1pBOjIwMDMiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiZW5fWkE6MjAwMyI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiZW5fR0IiCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQorJSBJU08gNDIxNyBDdXJyZW5jeSBhbmQgZnVuZCBjb2RlcworJSBodHRwOi8vd3d3LmJzaS1nbG9iYWwuY29tL1RlY2huaWNhbCtJbmZvcm1hdGlvbi9QdWJsaWNhdGlvbnMvX1B1YmxpY2F0aW9ucy90aWc5MC54YWx0ZXIKKyUgIlpBUiAiCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAiPFUwMDVBPjxVMDA0MT48VTAwNTI+PFUwMDIwPiIKKworJSAiUiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICI8VTAwNTI+IgorCislICIuIgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICAgIjxVMDAyRT4iCisKKyUgIiwiCittb25fdGhvdXNhbmRzX3NlcCAgICAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgICAgIiIKKworJSAiLSIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgICAgMAorbl9jc19wcmVjZWRlcyAgICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgICAgMAorcF9zaWduX3Bvc24gICAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgICAgMQorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKKyUgIi4iCitkZWNpbWFsX3BvaW50ICAgICAgICAgICAiPFUwMDJFPiIKKworJSAiLCIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgICI8VTAwMkM+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAgMzszCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCislIGFiZGF5IC0gVGhlIGFiYnJldmlhdGlvbnMgZm9yIHRoZSB3ZWVrIGRheXM6CislIC0gU3VuLCBNb24sIFR1ZSwgV2VkLCBUaHUsIEZyaSwgU2F0CithYmRheSAgICAgICAiPFUwMDUzPjxVMDA3NT48VTAwNkU+IjsiPFUwMDREPjxVMDA2Rj48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA3NT48VTAwNjU+IjsiPFUwMDU3PjxVMDA2NT48VTAwNjQ+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA2OD48VTAwNzU+IjsiPFUwMDQ2PjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNzQ+IgorCislIGRheSAtIFRoZSBmdWxsIG5hbWVzIG9mIHRoZSB3ZWVrIGRheXM6CislIC0gU3VuZGF5LCBNb25kYXksIFR1ZXNkYXksIFdlZG5lc2RheSwgVGh1cnNkYXksIEZyaWRheSwgU2F0dXJkYXkKK2RheSAgICAgICAgICI8VTAwNTM+PFUwMDc1PjxVMDA2RT48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDZGPjxVMDA2RT48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNTQ+PFUwMDc1PjxVMDA2NT48VTAwNzM+PFUwMDY0PjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICAgICAiPFUwMDU3PjxVMDA2NT48VTAwNjQ+PFUwMDZFPjxVMDA2NT48VTAwNzM+PFUwMDY0PjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA2OD48VTAwNzU+PFUwMDcyPjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNDY+PFUwMDcyPjxVMDA2OT48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA3ND48VTAwNzU+PFUwMDcyPjxVMDA2ND48VTAwNjE+PFUwMDc5PiIKKworJSBhYm1vbiAtIFRoZSBhYmJyZXZpYXRpb25zIGZvciB0aGUgbW9udGhzCislIC0gSmFuLCBGZWIsIE1hciwgQXByLCBNYXksIEp1biwgSnVsLCBBdWcsIFNlcCwgT2N0LCBOb3YsIERlYworYWJtb24gICAgICAgIjxVMDA0QT48VTAwNjE+PFUwMDZFPiI7IjxVMDA0Nj48VTAwNjU+PFUwMDYyPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA0MT48VTAwNzA+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDc5PiI7IjxVMDA0QT48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZDPiI7IjxVMDA0MT48VTAwNzU+PFUwMDY3PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA0Rj48VTAwNjM+PFUwMDc0PiI7LworICAgICAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDc2PiI7IjxVMDA0ND48VTAwNjU+PFUwMDYzPiIKKworJSBtb24gLSBUaGUgZnVsbCBuYW1lcyBvZiB0aGUgbW9udGhzIC0KKyUgLSBKYW51YXJ5LCBGZWJydWFyeSwgTWFyY2gsIEFwcmlsLCBNYXksIEp1bmUKKyUgICBKdWx5LCBBdWd1c3QsIFNlcHRlbWJlciwgT2N0b2JlciwgTm92ZW1iZXIsIERlY2VtYmVyCittb24gICAgICAgICAiPFUwMDRBPjxVMDA2MT48VTAwNkU+PFUwMDc1PjxVMDA2MT48VTAwNzI+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA0Nj48VTAwNjU+PFUwMDYyPjxVMDA3Mj48VTAwNzU+PFUwMDYxPjxVMDA3Mj48VTAwNzk+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzI+PFUwMDYzPjxVMDA2OD4iOy8KKyAgICAgICAgICAgICI8VTAwNDE+PFUwMDcwPjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZFPjxVMDA2NT4iOy8KKyAgICAgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2Qz48VTAwNzk+IjsvCisgICAgICAgICAgICAiPFUwMDQxPjxVMDA3NT48VTAwNjc+PFUwMDc1PjxVMDA3Mz48VTAwNzQ+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNzA+PFUwMDc0PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDRGPjxVMDA2Mz48VTAwNzQ+PFUwMDZGPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDc2PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDQ0PjxVMDA2NT48VTAwNjM+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iCisKKyUgQWJyZXZpYXRlZCBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uIHRvIGJlIHJlZmVyZW5jZWQgYnkgdGhlICIlYyIgZmllbGQgZGVzY3JpcHRvciAtCislCislICIlYSIgKHNob3J0IHdlZWtkYXkgbmFtZSksCislICIlZCIgKGRheSBvZiBtb250aCBhcyBhIGRlY2ltYWwgbnVtYmVyKSwKKyUgIiViIiAoc2hvcnQgbW9udGggbmFtZSksCislICIlWSIgKHllYXIgd2l0aCBjZW50dXJ5IGFzIGEgZGVjaW1hbCBudW1iZXIpLAorJSAiJVQiICgyNC1ob3VyIGNsb2NrIHRpbWUgaW4gZm9ybWF0IEhIOk1NOlNTKSwKKyUgIiVaIiAoVGltZSB6b25lIG5hbWUpCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCisKKyUgRGF0ZSByZXByZXNlbnRhdGlvbiB0byBiZSByZWZlcmVuY2VkIGJ5IHRoZSAiJXgiIGZpZWxkIGRlc2NyaXB0b3IgLQorJSAiJWQvJW0vJVkiLCBkYXkvbW9udGgveWVhciBhcyBkZWNpbWFsIG51bWJlcnMgKDAxLzAxLzIwMDApLgorZF9mbXQgICAgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNTk+IgorCislIFRpbWUgcmVwcmVzZW50YXRpb24gdG8gYmUgcmVmZXJlbmNlZCBieSB0aGUgIiVYIiBmaWVsZCBkZXNjcmlwdG9yIC0KKyUgIiVUIiAoMjQtaG91ciBjbG9jayB0aW1lIGluIGZvcm1hdCBISDpNTTpTUykKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDU0PiIKKworJSBEZWZpbmUgcmVwcmVzZW50YXRpb24gb2YgYW50ZSBtZXJpZGllbSBhbmQgcG9zdCBtZXJpZGllbSBzdHJpbmdzIC0KKyUgVGhlICIiIG1lYW4gZGVmYXVsdCB0byAiQU0iIGFuZCAiUE0iLgorYW1fcG0gICAgICAgIiI7IiIKKworJSBEZWZpbmUgdGltZSByZXByZXNlbnRhdGlvbiBpbiAxMi1ob3VyIGZvcm1hdCB3aXRoICJhbV9wbSIsIHRvIGJlIHJlZmVyZW5jZWQgYnkgdGhlICIlciIKKyUgVGhlICIiIG1lYW5zIHRoYXQgdGhpcyBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZC4KK3RfZm10X2FtcG0gICIiCisKKyUgRGF0ZSByZXByZXNlbnRhdGlvbiBub3QgZGVzY3JpYmVkIGluIElTTy9JRUMgMTQ2NTIuIENvbWVzIG91dCBhcyAtCislICIlYSAlYiAlZSAlSDolTTolUyAlWiAlWSIgd2hpY2ggaXMgZGVmYXVsdCAiZGF0ZSIgY29tbWFuZCBvdXRwdXQKKyUKKyUgJWEgLSBhYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWUsCislICViIC0gYWJyZXZpYXRlZCBtb250aCBuYW1lLAorJSAlZSAtIGRheSBvZiBtb250aCBhcyBhIGRlY2ltYWwgbnVtYmVyIHdpdGggbGVhZGluZyBzcGFjZSAoMSB0byAzMSksCislICVIIC0gaG91ciAoMjQtaG91ciBjbG9jaykgYXMgYSBkZWNpbWFsIG51bWJlciAoMDAgdG8gMjMpLAorJSAlTSAtIG1pbnV0ZSBhcyBhIGRlY2ltYWwgbnVtYmVyICgwMCB0byA1OSksCislICVTIC0gc2Vjb25kcyBhcyBhIGRlY2ltYWwgbnVtYmVyICgwMCB0byA1OSksCislICVaIC0gdGltZS16b25lIG5hbWUsCislICVZIC0geWVhciB3aXRoIGNlbnR1cnkgYXMgYSBkZWNpbWFsIG51bWJlcixlLmcuIDIwMDEuCitkYXRlX2ZtdAkiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworJSBUaGUgYWZmaXJtYXRpdmUgcmVzcG9uc2UgLQorJSAiXlt5WV0iCit5ZXNleHByICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNzk+PFUwMDU5PjxVMDA1RD4iCisKKyUgVGhlIG5lZ2F0aXZlIHJlc3BvbnNlIC0KKyUgIl5bbk5dIgorbm9leHByICAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCitoZWlnaHQgICAyOTcKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQorJSBSZXByZXNlbnRhdGlvbiBvZiB0ZWxlcGhvbmUgbnVtYmVyIGZvciBpbnRlcm5hdGlvbmFsIHVzZSAtCislICIrJWMgJWEgJWwiLCB3aGljaCBpcworJSAiKyVjIC0gY291bnRyeSBjb2RlIiwKKyUgIiVhIC0gYXJlYSBjb2RlIHdpdGhvdXQgdGhlIHByZWZpeCAob2Z0ZW4gMCkiLAorJSAiJWwgbG9jYWwgbnVtYmVyIi4KK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCisKKyUgUmVwcmVzbnRhdGlvbiBvZiB0ZWxlcGhvbmUgbnVtYmVyIGZvciBkb21lc3RpYyB1c2UgLQorJSAiKCVBKSAlbCIsIHdoaWNoIGlzCislICVBIC0gYXJlYSBjb2RlIHdpdGggbmF0aW9uYWwgcHJlZml4CislICVsIC0gbG9jYWwgbnVtYmVyIi4KK3RlbF9kb21fZm10ICAgICI8VTAwMjg+PFUwMDI1PjxVMDA0MT48VTAwMjk+PFUwMDIwPjxVMDAyNT48VTAwNkM+IgorCislIFByZWZpeCBmb3IgbWFraW5nIGludGVybmF0aW9uYWwgY2FsbHMKKyUgIjAwIgoraW50X3NlbGVjdCAgICAgIjxVMDAzMD48VTAwMzA+IgorCislIEludGVybmF0aW9uYWwgZGlhbGluZyBjb2RlCislICIyNyIKK2ludF9wcmVmaXggICAgICI8VTAwMzI+PFUwMDM3PiIKKworRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKKyUgRm9ybWF0IGZvciBhZGRyZXNzaW5nIGEgcGVyc29uLgorJSAiJWQldCVnJXQlbSV0JWYiCislCislICJTYWx1dGF0aW9uIiwKKyUgIkVtcHR5IHN0cmluZywgb3IgPFNwYWNlPiIsCislICJGaXJzdCBnaXZlbiBuYW1lIiwKKyUgIkVtcHR5IHN0cmluZywgb3IgPFNwYWNlPiIsCislICJNaWRkbGUgbmFtZXMiLAorJSAiRW1wdHkgc3RyaW5nLCBvciA8U3BhY2U+IiwKKyUgIkNsYW4gbmFtZXMiCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCisKKyUgR2VuZXJhbCBzYWx1dGF0aW9uIGZvciBhbnkgc2V4CislIChubyB0ZXJtKQorbmFtZV9nZW4gICAgIiIKKworJSBTYWx1dGF0aW9uIGZvciB1bm1hcnJpZWQgZmVtYWxlcworJSAiTWlzcyIKK25hbWVfbWlzcyAgICI8VTAwNEQ+PFUwMDY5PjxVMDA3Mz48VTAwNzM+IgorCislIFNhbHV0YXRpb24gZm9yIG1hbGVzCislICJNciIKK25hbWVfbXIgICAgICI8VTAwNEQ+PFUwMDcyPiIKKworJSBTYWx1dGF0aW9uIGZvciBtYXJyaWVkIGZlbWFsZXMKKyUgIk1ycyIKK25hbWVfbXJzICAgICI8VTAwNEQ+PFUwMDcyPjxVMDA3Mz4iCisKKyUgU2FsdXRhdGlvbiB2YWxpZCBmb3IgYWxsIGZlbWFsZXMKKyUgIk1zIgorbmFtZV9tcyAgICAgIjxVMDA0RD48VTAwNzM+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworJSBSZXByZXNlbnRhdGlvbiBvZiBwb3N0YWwgYWRkcmVzc2VzIChtaW51cyB0aGUgYWRkcmVzc2VlJ3MgbmFtZSkgaW4gU291dGgKKyUgQWZyaWNhLiAoSWdub3JlZCBmb3Igbm93KQorJSAiJWYlTiVhJU4lZCVOJWIlTiVzICVoICVlICVyJU4leiAlVCVOJWMlTiIsIHdoaWNoIGdpdmVzIC0KKyUKKyUgImZpcm0gbmFtZSIsCislICJlbmQgb2YgbGluZSIsCislICJDL08gYWRkcmVzcyIsCislICJlbmQgb2YgbGluZSIsCislICJkZXBhcnRtZW50IG5hbWUiLAorJSAiQnVpbGRpbmcgbmFtZSIsCislICJlbmQgb2YgbGluZSIsCislICJzdHJlZXQgb3IgYmxvY2sgbmFtZSIsCislICJzcGFjZSIsCislICJob3VzZSBudW1iZXIgb3IgZGVzaWduYXRpb24iLAorJSAic3BhY2UiLAorJSAiZmxvb3IgbnVtYmVyIiwKKyUgInNwYWNlIiwKKyUgInJvb20gbnVtYmVyLCBkb29yIGRlc2lnbmF0aW9uIiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgInBvc3RhbCBjb2RlIiwKKyUgInNwYWNlIiwKKyUgInRvd24sIGNpdHkiLAorJSAiZW5kIG9mIGxpbmUiLAorJSAiY291bnRyeSBkZXNpZ25hdGlvbiBmb3IgdGhlIDxjb3VudHJ5X3Bvc3Q+IGtleXdvcmQiLAorJSAiZW5kIG9mIGxpbmUKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCisKKyUgQ291bnRyeSBuYW1lIGluIEVuZ2xpc2ggLSAiU291dGggQWZyaWNhIgorY291bnRyeV9uYW1lICAiPFUwMDUzPjxVMDA2Rj48VTAwNzU+PFUwMDc0PjxVMDA2OD48VTAwMjA+LworPFUwMDQxPjxVMDA2Nj48VTAwNzI+PFUwMDY5PjxVMDA2Mz48VTAwNjE+IgorCislIExhbmd1YWdlIG5hbWUgaW4gRW5nbGlzaCAtICJFbmdsaXNoIgorbGFuZ19uYW1lICAgICAiPFUwMDQ1PjxVMDA2RT48VTAwNjc+PFUwMDZDPjxVMDA2OT48VTAwNzM+PFUwMDY4PiIKKworJSBDRVBUIE1BSUxDT0RFUyBhcmUgc3VnZ2VzdGVkCislIEFsdGVybmF0aXZlbHkgdXNlIHRoZSBjb2RlIGZvdW5kIG9uIHlvdXIgY291bnRyaWVzIHBvc3RhbCBpdGVtIHRyYWNraW5nIG51bWJlcgorJSAiWkEiCitjb3VudHJ5X3Bvc3QgICAiPFUwMDVBPjxVMDA0MT4iCisKKyUgVU4gR2VuZXZlIDE5NDk6NjggRGlzdGluZ3Vpc2hpbmcgc2lnbnMgb2YgdmVoaWNsZXMgaW4gaW50ZXJuYXRpb25hbCB0cmFmZmljCislIGh0dHA6Ly93d3cudW5lY2Uub3JnL3RyYW5zL2NvbnZlbnRuL2Rpc3Rpbmctc2lnbnMtNS0yMDAxLnBkZgorJSAiWkEiCitjb3VudHJ5X2NhciAgICI8VTAwNUE+PFUwMDQxPiIKKworJSBJU08gMjEwOAorJSBodHRwOi8vd3d3LmlzYm4taW50ZXJuYXRpb25hbC5vcmcvaHRtbC9wcmVmaXgvcHJlZmEuaHRtCitjb3VudHJ5X2lzYm4gIDAKKworJSBJU08gNjM5IGxhbmd1YWdlIGFiYnJldmlhdGlvbnM6CislIDYzOS0xIDIgbGV0dGVyLCA2MzktMiAzIGxldHRlciB0ZXJtaW5vbG9neQorJSBodHRwOi8vd3d3LmxvYy5nb3Yvc3RhbmRhcmRzL2lzbzYzOS0yL2VuZ2xhZ24uaHRtbAorJSAiZW4iLCAiZW5nIgorbGFuZ19hYiAgICAgICAiPFUwMDY1PjxVMDA2RT4iCitsYW5nX3Rlcm0gICAgICI8VTAwNjU+PFUwMDZFPjxVMDA2Nz4iCitsYW5nX2xpYiAgICAgICI8VTAwNjU+PFUwMDZFPjxVMDA2Nz4iCisKKyUgSVNPIDMxNjYgY291bnRyeSBudW1iZXIgYW5kIDIgYW5kIDMgbGV0dGVyIGFicmV2aWF0aW9ucworJSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL29ubGluZWRhdC9jb3VudHJpZXMuaHRtbAorJSAiWkEiLCAiWkFGIgorY291bnRyeV9hYjIgICAiPFUwMDVBPjxVMDA0MT4iCitjb3VudHJ5X2FiMyAgICI8VTAwNUE+PFUwMDQxPjxVMDA0Nj4iCitjb3VudHJ5X251bSAgIDcxMAorCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZW5fWlcgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lbl9aVwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTBjNDJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZW5fWlcKQEAgLTAsMCArMSwxMTYgQEAKK2VzY2FwZV9jaGFyICAvCitjb21tZW50X2NoYXIgICUKKworJSBFbmdsaXNoIGxhbmd1YWdlIGxvY2FsZSBmb3IgWmltYmFid2UKKyUgU291cmNlOiBSQVAKKyUgRW1haWw6IFNjaGFsayBXLiBDcm9uamUgPHNjaGFsa2NAbnRhYmEuY28uemE+CislIFRlbDogKzI3IDgzICAyNzk3MDQ3CislIEZheDogKzI3IDgzOCAyNzk3MDQ3CislIExhbmd1YWdlOiBlbgorJSBUZXJyaXRvcnk6IFpXCislIFJldmlzaW9uOiAxLjAKKyUgRGF0ZTogMTk5OS0xMi0yMworJSBVc2VyczogZ2VuZXJhbAorJSBSZXBlcnRvaXJlbWFwOiBtbmVtb25pYyxkcworJSBDaGFyc2V0OiBJU08tODg1OS0xCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJFbmdsaXNoIGxvY2FsZSBmb3IgWmltYmFid2UiCitzb3VyY2UgICAgICJSQVAiCithZGRyZXNzICAgICIiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiRW5nbGlzaCIKK3RlcnJpdG9yeSAgIlppbWJhYndlIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAiZW5fWlc6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZW5fWlc6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZW5fWlc6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJlbl9aVzoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImVuX1pXOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZW5fWlc6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZW5fWlc6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZW5fWlc6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZW5fWlc6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJlbl9aVzoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImVuX1pXOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImVuX1pBIgorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKK2NvcHkgImVuX1pBIgorRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgICAgICI8VTAwNUE+PFUwMDU3PjxVMDA0ND48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICAgIjxVMDA1QT48VTAwMjQ+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgICAgMAorbl9jc19wcmVjZWRlcyAgICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgICAgMAorcF9zaWduX3Bvc24gICAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgICAgMQorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgImVuX1pBIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorY29weSAiZW5fWkEiCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworY29weSAiZW5fWkEiCitFTkQgTENfTUVTU0FHRVMKKworTENfUEFQRVIKKyUgRklYTUUKK2hlaWdodCAgIDI5NworJSBGSVhNRQord2lkdGggICAgMjEwCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzMj48VTAwMzY+PFUwMDMzPiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKKyUgRklYTUUKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgICAiPFUwMDVBPjxVMDA1Nz4iCitjb3VudHJ5X2FiMyAgICI8VTAwNUE+PFUwMDU3PjxVMDA0NT4iCitjb3VudHJ5X251bSAgIDcxNgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VzX0FSIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZXNfQVIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc1NzYzOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VzX0FSCkBAIC0wLDAgKzEsMTYwIEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgU3BhbmlzaCBsYW5ndWFnZSBsb2NhbGUgZm9yIEFyZ2VudGluYQorJSBTb3VyY2U6IFJBUAorJSBBZGRyZXNzOiBTYW5rdCBKby8vcmdlbnMgQWxsZSA4CislICAgIERLLTE2MTUgS28vL2Jlbmhhdm4gViwgRGFubWFyaworJSBDb250YWN0OiBLZWxkIFNpbW9uc2VuCislIEVtYWlsOiBLZWxkLlNpbW9uc2VuQGRrdXVnLmRrCislIFRlbDogKzQ1IC0gMzEyMjY1NDMKKyUgRmF4OiArNDUgLSAzMzI1NjU0MworJSBMYW5ndWFnZTogZXMKKyUgVGVycml0b3J5OiBBUgorJSBSZXZpc2lvbjogNC40CislIERhdGU6IDE5OTctMTEtMDUKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMuZHMKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiU3BhbmlzaCBsb2NhbGUgZm9yIEFyZ2VudGluYSIKK3NvdXJjZSAgICAgIlJBUCIKK2FkZHJlc3MgICAgIlNhbmt0IEo8VTAwRjg+cmdlbnMgQWxsZSA4LCBESy0xNjE1IEs8VTAwRjg+YmVuaGF2biBWLCBEYW5tYXJrIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIlNwYW5pc2giCit0ZXJyaXRvcnkgICJBcmdlbnRpbmEiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA2LTI5IgorJQorY2F0ZWdvcnkgICJlc19BUjoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJlc19BUjoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJlc19BUjoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImVzX0FSOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiZXNfQVI6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJlc19BUjoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJlc19BUjoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJlc19BUjoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJlc19BUjoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImVzX0FSOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiZXNfQVI6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DT0xMQVRFCitjb3B5ICJlc19FUyIKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJlc19FUyIKK0VORCBMQ19DVFlQRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNzM+PFUwMDUzPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgIjxVMDA0MT48VTAwNTI+PFUwMDUzPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAiPFUwMDI0PiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICI8VTAwMkM+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgIjxVMDAyRT4iCittb25fZ3JvdXBpbmcgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICI8VTAwMkU+IgorZ3JvdXBpbmcgICAgICAgICAgICAgMzszCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICI8VTAwNjQ+PFUwMDZGPjxVMDA2RD4iOyI8VTAwNkM+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2RD48VTAwNjk+PFUwMEU5PiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNjU+IjsiPFUwMDc2PjxVMDA2OT48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMEUxPjxVMDA2Mj4iCitkYXkgICAgICI8VTAwNjQ+PFUwMDZGPjxVMDA2RD48VTAwNjk+PFUwMDZFPjxVMDA2Nz48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNkM+PFUwMDc1PjxVMDA2RT48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMDc0PjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDY5PjxVMDBFOT48VTAwNzI+PFUwMDYzPjxVMDA2Rj48VTAwNkM+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDY1PjxVMDA3Nj48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDc2PjxVMDA2OT48VTAwNjU+PFUwMDcyPjxVMDA2RT48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDczPjxVMDBFMT48VTAwNjI+PFUwMDYxPjxVMDA2ND48VTAwNkY+IgorYWJtb24gICAiPFUwMDY1PjxVMDA2RT48VTAwNjU+IjsiPFUwMDY2PjxVMDA2NT48VTAwNjI+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNjE+PFUwMDYyPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDc5PiI7IjxVMDA2QT48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkM+IjsiPFUwMDYxPjxVMDA2Nz48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD4iOyI8VTAwNkY+PFUwMDYzPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PiI7IjxVMDA2ND48VTAwNjk+PFUwMDYzPiIKK21vbiAgICAgIjxVMDA2NT48VTAwNkU+PFUwMDY1PjxVMDA3Mj48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjY+PFUwMDY1PjxVMDA2Mj48VTAwNzI+PFUwMDY1PjxVMDA3Mj48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwN0E+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA2Mj48VTAwNzI+PFUwMDY5PjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDc5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZFPjxVMDA2OT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Qz48VTAwNjk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA2Nz48VTAwNkY+PFUwMDczPjxVMDA3ND48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY5PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkY+PFUwMDYzPjxVMDA3ND48VTAwNzU+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA3Nj48VTAwNjk+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwNjk+PFUwMDYzPjxVMDA2OT48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiIKK2RfdF9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA3OT4iCit0X2ZtdCAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgIiI7IiIKK3RfZm10X2FtcG0gIiIKK2RhdGVfZm10CSI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCislIEZJWE1FCitoZWlnaHQgICAyOTcKKyUgRklYTUUKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzU+PFUwMDM0PiIKK2ludF9zZWxlY3QgICAgICI8VTAwMzA+PFUwMDMwPiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKKyUgRklYTUUKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgICAiPFUwMDQxPjxVMDA1Mj4iCitjb3VudHJ5X2FiMyAgICI8VTAwNDE+PFUwMDUyPjxVMDA0Nz4iCitjb3VudHJ5X251bSAgIDAzMgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VzX0JPIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZXNfQk8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc3YmIxZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VzX0JPCkBAIC0wLDAgKzEsMTYwIEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgU3BhbmlzaCBsYW5ndWFnZSBsb2NhbGUgZm9yIEJvbGl2aWEKKyUgU291cmNlOiBSQVAKKyUgQWRkcmVzczogU2Fua3QgSm8vL3JnZW5zIEFsbGUgOAorJSAgICBESy0xNjE1IEtvLy9iZW5oYXZuIFYsIERhbm1hcmsKKyUgQ29udGFjdDogS2VsZCBTaW1vbnNlbgorJSBFbWFpbDogS2VsZC5TaW1vbnNlbkBka3V1Zy5kaworJSBUZWw6ICs0NSAtIDMxMjI2NTQzCislIEZheDogKzQ1IC0gMzMyNTY1NDMKKyUgTGFuZ3VhZ2U6IGVzCislIFRlcnJpdG9yeTogQk8KKyUgUmV2aXNpb246IDQuNAorJSBEYXRlOiAxOTk3LTExLTA1CislIEFwcGxpY2F0aW9uOiBnZW5lcmFsCislIFVzZXJzOiBnZW5lcmFsCislIFJlcGVydG9pcmVtYXA6IG1uZW1vbmljLmRzCislIENoYXJzZXQ6IElTTy04ODU5LTEKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlNwYW5pc2ggbG9jYWxlIGZvciBCb2xpdmlhIgorc291cmNlICAgICAiUkFQIgorYWRkcmVzcyAgICAiU2Fua3QgSjxVMDBGOD5yZ2VucyBBbGxlIDgsIERLLTE2MTUgSzxVMDBGOD5iZW5oYXZuIFYsIERhbm1hcmsiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiU3BhbmlzaCIKK3RlcnJpdG9yeSAgIkJvbGl2aWEiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA2LTI5IgorJQorY2F0ZWdvcnkgICJlc19CTzoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJlc19CTzoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJlc19CTzoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImVzX0JPOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiZXNfQk86MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJlc19CTzoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJlc19CTzoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJlc19CTzoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJlc19CTzoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImVzX0JPOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiZXNfQk86MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DT0xMQVRFCitjb3B5ICJlc19FUyIKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJlc19FUyIKK0VORCBMQ19DVFlQRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNzM+PFUwMDUzPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgIjxVMDA0Mj48VTAwNEY+PFUwMDQyPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAiPFUwMDI0PjxVMDA2Mj4iCittb25fZGVjaW1hbF9wb2ludCAgICAiPFUwMDJDPiIKK21vbl90aG91c2FuZHNfc2VwICAgICI8VTAwMkU+IgorbW9uX2dyb3VwaW5nICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAxCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludCAgICAgICAgIjxVMDAyQz4iCit0aG91c2FuZHNfc2VwICAgICAgICAiIgorZ3JvdXBpbmcgICAgICAgICAgICAgMDswCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICI8VTAwNjQ+PFUwMDZGPjxVMDA2RD4iOyI8VTAwNkM+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2RD48VTAwNjk+PFUwMEU5PiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNjU+IjsiPFUwMDc2PjxVMDA2OT48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMEUxPjxVMDA2Mj4iCitkYXkgICAgICI8VTAwNjQ+PFUwMDZGPjxVMDA2RD48VTAwNjk+PFUwMDZFPjxVMDA2Nz48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNkM+PFUwMDc1PjxVMDA2RT48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMDc0PjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDY5PjxVMDBFOT48VTAwNzI+PFUwMDYzPjxVMDA2Rj48VTAwNkM+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDY1PjxVMDA3Nj48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDc2PjxVMDA2OT48VTAwNjU+PFUwMDcyPjxVMDA2RT48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDczPjxVMDBFMT48VTAwNjI+PFUwMDYxPjxVMDA2ND48VTAwNkY+IgorYWJtb24gICAiPFUwMDY1PjxVMDA2RT48VTAwNjU+IjsiPFUwMDY2PjxVMDA2NT48VTAwNjI+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNjE+PFUwMDYyPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDc5PiI7IjxVMDA2QT48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkM+IjsiPFUwMDYxPjxVMDA2Nz48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD4iOyI8VTAwNkY+PFUwMDYzPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PiI7IjxVMDA2ND48VTAwNjk+PFUwMDYzPiIKK21vbiAgICAgIjxVMDA2NT48VTAwNkU+PFUwMDY1PjxVMDA3Mj48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjY+PFUwMDY1PjxVMDA2Mj48VTAwNzI+PFUwMDY1PjxVMDA3Mj48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwN0E+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA2Mj48VTAwNzI+PFUwMDY5PjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDc5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZFPjxVMDA2OT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Qz48VTAwNjk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA2Nz48VTAwNkY+PFUwMDczPjxVMDA3ND48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY5PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkY+PFUwMDYzPjxVMDA3ND48VTAwNzU+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA3Nj48VTAwNjk+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwNjk+PFUwMDYzPjxVMDA2OT48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiIKK2RfdF9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA3OT4iCit0X2ZtdCAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgIiI7IiIKK3RfZm10X2FtcG0gIiIKK2RhdGVfZm10CSI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCislIEZJWE1FCitoZWlnaHQgICAyOTcKKyUgRklYTUUKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzU+PFUwMDM5PjxVMDAzMT4iCitpbnRfc2VsZWN0ICAgICAiPFUwMDMwPjxVMDAzMD4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCislIEZJWE1FCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICAgIjxVMDA0Mj48VTAwNEY+IgorY291bnRyeV9hYjMgICAiPFUwMDQyPjxVMDA0Rj48VTAwNEM+IgorY291bnRyeV9udW0gICAwNjgKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lc19DTCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VzX0NMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNDQ4NDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lc19DTApAQCAtMCwwICsxLDE2MCBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIFNwYW5pc2ggbGFuZ3VhZ2UgbG9jYWxlIGZvciBDaGlsZQorJSBTb3VyY2U6IFJBUAorJSBBZGRyZXNzOiBTYW5rdCBKby8vcmdlbnMgQWxsZSA4CislICAgIERLLTE2MTUgS28vL2Jlbmhhdm4gViwgRGFubWFyaworJSBDb250YWN0OiBLZWxkIFNpbW9uc2VuCislIEVtYWlsOiBLZWxkLlNpbW9uc2VuQGRrdXVnLmRrCislIFRlbDogKzQ1IC0gMzEyMjY1NDMKKyUgRmF4OiArNDUgLSAzMzI1NjU0MworJSBMYW5ndWFnZTogZXMKKyUgVGVycml0b3J5OiBDTAorJSBSZXZpc2lvbjogNC40CislIERhdGU6IDE5OTctMTEtMDUKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMuZHMKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiU3BhbmlzaCBsb2NhbGUgZm9yIENoaWxlIgorc291cmNlICAgICAiUkFQIgorYWRkcmVzcyAgICAiU2Fua3QgSjxVMDBGOD5yZ2VucyBBbGxlIDgsIERLLTE2MTUgSzxVMDBGOD5iZW5oYXZuIFYsIERhbm1hcmsiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiU3BhbmlzaCIKK3RlcnJpdG9yeSAgIkNoaWxlIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAiZXNfQ0w6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZXNfQ0w6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZXNfQ0w6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJlc19DTDoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImVzX0NMOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZXNfQ0w6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZXNfQ0w6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZXNfQ0w6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZXNfQ0w6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJlc19DTDoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImVzX0NMOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ09MTEFURQorY29weSAiZXNfRVMiCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAiZXNfRVMiCitFTkQgTENfQ1RZUEUKKworTENfTUVTU0FHRVMKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDczPjxVMDA1Mz48VTAwNzk+PFUwMDU5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgICI8VTAwNDM+PFUwMDRDPjxVMDA1MD48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgIjxVMDAyND4iCittb25fZGVjaW1hbF9wb2ludCAgICAiPFUwMDJDPiIKK21vbl90aG91c2FuZHNfc2VwICAgICI8VTAwMkU+IgorbW9uX2dyb3VwaW5nICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAxCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludCAgICAgICAgIjxVMDAyQz4iCit0aG91c2FuZHNfc2VwICAgICAgICAiIgorZ3JvdXBpbmcgICAgICAgICAgICAgMDswCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICI8VTAwNjQ+PFUwMDZGPjxVMDA2RD4iOyI8VTAwNkM+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2RD48VTAwNjk+PFUwMEU5PiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNjU+IjsiPFUwMDc2PjxVMDA2OT48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMEUxPjxVMDA2Mj4iCitkYXkgICAgICI8VTAwNjQ+PFUwMDZGPjxVMDA2RD48VTAwNjk+PFUwMDZFPjxVMDA2Nz48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNkM+PFUwMDc1PjxVMDA2RT48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMDc0PjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDY5PjxVMDBFOT48VTAwNzI+PFUwMDYzPjxVMDA2Rj48VTAwNkM+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDY1PjxVMDA3Nj48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDc2PjxVMDA2OT48VTAwNjU+PFUwMDcyPjxVMDA2RT48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDczPjxVMDBFMT48VTAwNjI+PFUwMDYxPjxVMDA2ND48VTAwNkY+IgorYWJtb24gICAiPFUwMDY1PjxVMDA2RT48VTAwNjU+IjsiPFUwMDY2PjxVMDA2NT48VTAwNjI+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNjE+PFUwMDYyPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDc5PiI7IjxVMDA2QT48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkM+IjsiPFUwMDYxPjxVMDA2Nz48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD4iOyI8VTAwNkY+PFUwMDYzPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PiI7IjxVMDA2ND48VTAwNjk+PFUwMDYzPiIKK21vbiAgICAgIjxVMDA2NT48VTAwNkU+PFUwMDY1PjxVMDA3Mj48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjY+PFUwMDY1PjxVMDA2Mj48VTAwNzI+PFUwMDY1PjxVMDA3Mj48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwN0E+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA2Mj48VTAwNzI+PFUwMDY5PjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDc5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZFPjxVMDA2OT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Qz48VTAwNjk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA2Nz48VTAwNkY+PFUwMDczPjxVMDA3ND48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY5PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkY+PFUwMDYzPjxVMDA3ND48VTAwNzU+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA3Nj48VTAwNjk+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwNjk+PFUwMDYzPjxVMDA2OT48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiIKK2RfdF9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA3OT4iCit0X2ZtdCAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgIiI7IiIKK3RfZm10X2FtcG0gIiIKK2RhdGVfZm10CSI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCislIEZJWE1FCitoZWlnaHQgICAyOTcKKyUgRklYTUUKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzU+PFUwMDM2PiIKK2ludF9zZWxlY3QgICAgICI8VTAwMzA+PFUwMDMwPiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKKyUgRklYTUUKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgICAiPFUwMDQzPjxVMDA0Qz4iCitjb3VudHJ5X2FiMyAgICI8VTAwNDM+PFUwMDQ4PjxVMDA0Qz4iCitjb3VudHJ5X251bSAgIDE1MgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VzX0NPIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZXNfQ08KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMwZWU3NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VzX0NPCkBAIC0wLDAgKzEsMTYwIEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgU3BhbmlzaCBsYW5ndWFnZSBsb2NhbGUgZm9yIENvbG9tYmlhCislIFNvdXJjZTogUkFQCislIEFkZHJlc3M6IFNhbmt0IEpvLy9yZ2VucyBBbGxlIDgKKyUgICAgREstMTYxNSBLby8vYmVuaGF2biBWLCBEYW5tYXJrCislIENvbnRhY3Q6IEtlbGQgU2ltb25zZW4KKyUgRW1haWw6IEtlbGQuU2ltb25zZW5AZGt1dWcuZGsKKyUgVGVsOiArNDUgLSAzMTIyNjU0MworJSBGYXg6ICs0NSAtIDMzMjU2NTQzCislIExhbmd1YWdlOiBlcworJSBUZXJyaXRvcnk6IENPCislIFJldmlzaW9uOiA0LjQKKyUgRGF0ZTogMTk5Ny0xMS0wNQorJSBBcHBsaWNhdGlvbjogZ2VuZXJhbAorJSBVc2VyczogZ2VuZXJhbAorJSBSZXBlcnRvaXJlbWFwOiBtbmVtb25pYy5kcworJSBDaGFyc2V0OiBJU08tODg1OS0xCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJTcGFuaXNoIGxvY2FsZSBmb3IgQ29sb21iaWEiCitzb3VyY2UgICAgICJSQVAiCithZGRyZXNzICAgICJTYW5rdCBKPFUwMEY4PnJnZW5zIEFsbGUgOCwgREstMTYxNSBLPFUwMEY4PmJlbmhhdm4gViwgRGFubWFyayIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJTcGFuaXNoIgordGVycml0b3J5ICAiQ29sb21iaWEiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA2LTI5IgorJQorY2F0ZWdvcnkgICJlc19DTzoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJlc19DTzoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJlc19DTzoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImVzX0NPOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiZXNfQ086MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJlc19DTzoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJlc19DTzoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJlc19DTzoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJlc19DTzoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImVzX0NPOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiZXNfQ086MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DT0xMQVRFCitjb3B5ICJlc19FUyIKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJlc19FUyIKK0VORCBMQ19DVFlQRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNzM+PFUwMDUzPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgIjxVMDA0Mz48VTAwNEY+PFUwMDUwPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAiPFUwMDI0PiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICI8VTAwMkM+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgIjxVMDAyRT4iCittb25fZ3JvdXBpbmcgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICIiCitncm91cGluZyAgICAgICAgICAgICAwOzAKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPiI7IjxVMDA2Qz48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsiPFUwMDZEPjxVMDA2OT48VTAwRTk+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2NT4iOyI8VTAwNzY+PFUwMDY5PjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwRTE+PFUwMDYyPiIKK2RheSAgICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPjxVMDA2OT48VTAwNkU+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwNzU+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNzQ+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjk+PFUwMEU5PjxVMDA3Mj48VTAwNjM+PFUwMDZGPjxVMDA2Qz48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNjU+PFUwMDc2PjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNzY+PFUwMDY5PjxVMDA2NT48VTAwNzI+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMEUxPjxVMDA2Mj48VTAwNjE+PFUwMDY0PjxVMDA2Rj4iCithYm1vbiAgICI8VTAwNjU+PFUwMDZFPjxVMDA2NT4iOyI8VTAwNjY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2MT48VTAwNjI+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+IjsiPFUwMDZBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNjE+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA2Rj48VTAwNjM+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDY0PjxVMDA2OT48VTAwNjM+IgorbW9uICAgICAiPFUwMDY1PjxVMDA2RT48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Nj48VTAwNjU+PFUwMDYyPjxVMDA3Mj48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3QT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDYyPjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkU+PFUwMDY5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPjxVMDA2OT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDY3PjxVMDA2Rj48VTAwNzM+PFUwMDc0PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjk+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2Rj48VTAwNjM+PFUwMDc0PjxVMDA3NT48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PjxVMDA2OT48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDY0PjxVMDA2OT48VTAwNjM+PFUwMDY5PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAiIjsiIgordF9mbXRfYW1wbSAiIgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworTENfUEFQRVIKKyUgRklYTUUKK2hlaWdodCAgIDI5NworJSBGSVhNRQord2lkdGggICAgMjEwCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzNT48VTAwMzc+IgoraW50X3NlbGVjdCAgICAgIjxVMDAzMD48VTAwMzA+PFUwMDM5PiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKKyUgRklYTUUKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgICAiPFUwMDQzPjxVMDA0Rj4iCitjb3VudHJ5X2FiMyAgICI8VTAwNDM+PFUwMDRGPjxVMDA0Qz4iCitjb3VudHJ5X251bSAgIDE3MAorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VzX0NSIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZXNfQ1IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM4NTE3OQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VzX0NSCkBAIC0wLDAgKzEsMTUzIEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgU3BhbmlzaCBsYW5ndWFnZSBsb2NhbGUgZm9yIENvc3RhIFJpY2EKKyUgTGFuZ3VhZ2U6IGVzCislIFRlcnJpdG9yeTogQ1IKKyUgRGF0ZTogMjAwMC0wOC0yMQorJSBBcHBsaWNhdGlvbjogZ2VuZXJhbAorJSBVc2VyczogZ2VuZXJhbAorJSBDaGFyc2V0OiBJU08tODg1OS0xCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJTcGFuaXNoIGxvY2FsZSBmb3IgQ29zdGEgUmljYSIKK3NvdXJjZSAgICAgIkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiIKK2FkZHJlc3MgICAgIjU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiU3BhbmlzaCIKK3RlcnJpdG9yeSAgIkNvc3RhIFJpY2EiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA4LTIxIgorJQorY2F0ZWdvcnkgICJlc19DUjoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJlc19DUjoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJlc19DUjoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImVzX0NSOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiZXNfQ1I6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJlc19DUjoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJlc19DUjoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJlc19DUjoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJlc19DUjoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImVzX0NSOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiZXNfQ1I6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DT0xMQVRFCitjb3B5ICJlc19FUyIKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJlc19FUyIKK0VORCBMQ19DVFlQRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNzM+PFUwMDUzPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgIjxVMDA0Mz48VTAwNTI+PFUwMDQzPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAiPFUwMDQzPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICIiCitncm91cGluZyAgICAgICAgICAgICAwOzAKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPiI7IjxVMDA2Qz48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsiPFUwMDZEPjxVMDA2OT48VTAwRTk+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2NT4iOyI8VTAwNzY+PFUwMDY5PjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwRTE+PFUwMDYyPiIKK2RheSAgICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPjxVMDA2OT48VTAwNkU+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwNzU+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNzQ+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjk+PFUwMEU5PjxVMDA3Mj48VTAwNjM+PFUwMDZGPjxVMDA2Qz48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNjU+PFUwMDc2PjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNzY+PFUwMDY5PjxVMDA2NT48VTAwNzI+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMEUxPjxVMDA2Mj48VTAwNjE+PFUwMDY0PjxVMDA2Rj4iCithYm1vbiAgICI8VTAwNjU+PFUwMDZFPjxVMDA2NT4iOyI8VTAwNjY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2MT48VTAwNjI+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+IjsiPFUwMDZBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNjE+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA2Rj48VTAwNjM+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDY0PjxVMDA2OT48VTAwNjM+IgorbW9uICAgICAiPFUwMDY1PjxVMDA2RT48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Nj48VTAwNjU+PFUwMDYyPjxVMDA3Mj48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3QT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDYyPjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkU+PFUwMDY5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPjxVMDA2OT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDY3PjxVMDA2Rj48VTAwNzM+PFUwMDc0PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjk+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2Rj48VTAwNjM+PFUwMDc0PjxVMDA3NT48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PjxVMDA2OT48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDY0PjxVMDA2OT48VTAwNjM+PFUwMDY5PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAiPFUwMDYxPjxVMDAyRT48VTAwNkQ+PFUwMDJFPiI7IjxVMDA3MD48VTAwMkU+PFUwMDZEPjxVMDAyRT4iCit0X2ZtdF9hbXBtICI8VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPiIKK2RhdGVfZm10CSI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK2ZpcnN0X3dlZWtkYXkgMQorZmlyc3Rfd29ya2RheSAyCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorJSBGSVhNRQoraGVpZ2h0ICAgMjk3CislIEZJWE1FCit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDM1PjxVMDAzMD48VTAwMzY+IgoraW50X3NlbGVjdCAgICAgIjxVMDAzMD48VTAwMzA+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorJSBGSVhNRQorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAgICI8VTAwNDM+PFUwMDUyPiIKK2NvdW50cnlfYWIzICAgIjxVMDA0Mz48VTAwNTI+PFUwMDQ5PiIKK2NvdW50cnlfbnVtICAgMTg4CitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZXNfRE8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lc19ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2QwZjllCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZXNfRE8KQEAgLTAsMCArMSwxNjAgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBTcGFuaXNoIGxhbmd1YWdlIGxvY2FsZSBmb3IgRG9taW5pY2FuIFJlcHVibGljCislIFNvdXJjZTogUkFQCislIEFkZHJlc3M6IFNhbmt0IEpvLy9yZ2VucyBBbGxlIDgKKyUgICAgREstMTYxNSBLby8vYmVuaGF2biBWLCBEYW5tYXJrCislIENvbnRhY3Q6IEtlbGQgU2ltb25zZW4KKyUgRW1haWw6IEtlbGQuU2ltb25zZW5AZGt1dWcuZGsKKyUgVGVsOiArNDUgLSAzMTIyNjU0MworJSBGYXg6ICs0NSAtIDMzMjU2NTQzCislIExhbmd1YWdlOiBlcworJSBUZXJyaXRvcnk6IERPCislIFJldmlzaW9uOiA0LjQKKyUgRGF0ZTogMTk5Ny0xMS0wNQorJSBBcHBsaWNhdGlvbjogZ2VuZXJhbAorJSBVc2VyczogZ2VuZXJhbAorJSBSZXBlcnRvaXJlbWFwOiBtbmVtb25pYy5kcworJSBDaGFyc2V0OiBJU08tODg1OS0xCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJTcGFuaXNoIGxvY2FsZSBmb3IgRG9taW5pY2FuIFJlcHVibGljIgorc291cmNlICAgICAiUkFQIgorYWRkcmVzcyAgICAiU2Fua3QgSjxVMDBGOD5yZ2VucyBBbGxlIDgsIERLLTE2MTUgSzxVMDBGOD5iZW5oYXZuIFYsIERhbm1hcmsiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiU3BhbmlzaCIKK3RlcnJpdG9yeSAgIkRvbWluaWNhbiBSZXB1YmxpYyIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjkiCislCitjYXRlZ29yeSAgImVzX0RPOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImVzX0RPOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImVzX0RPOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiZXNfRE86MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJlc19ETzoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImVzX0RPOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImVzX0RPOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImVzX0RPOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImVzX0RPOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiZXNfRE86MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJlc19ETzoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKK2NvcHkgImVzX0VTIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImVzX0VTIgorRU5EIExDX0NUWVBFCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA3Mz48VTAwNTM+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAiPFUwMDQ0PjxVMDA0Rj48VTAwNTA+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICI8VTAwMjQ+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgMQorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgICAgIiIKK2dyb3VwaW5nICAgICAgICAgICAgIDA7MAorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorYWJkYXkgICAiPFUwMDY0PjxVMDA2Rj48VTAwNkQ+IjsiPFUwMDZDPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNkQ+PFUwMDY5PjxVMDBFOT4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDY1PiI7IjxVMDA3Nj48VTAwNjk+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDczPjxVMDBFMT48VTAwNjI+IgorZGF5ICAgICAiPFUwMDY0PjxVMDA2Rj48VTAwNkQ+PFUwMDY5PjxVMDA2RT48VTAwNjc+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDZDPjxVMDA3NT48VTAwNkU+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3ND48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2OT48VTAwRTk+PFUwMDcyPjxVMDA2Mz48VTAwNkY+PFUwMDZDPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2NT48VTAwNzY+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA3Nj48VTAwNjk+PFUwMDY1PjxVMDA3Mj48VTAwNkU+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwRTE+PFUwMDYyPjxVMDA2MT48VTAwNjQ+PFUwMDZGPiIKK2FibW9uICAgIjxVMDA2NT48VTAwNkU+PFUwMDY1PiI7IjxVMDA2Nj48VTAwNjU+PFUwMDYyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsiPFUwMDYxPjxVMDA2Mj48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3OT4iOyI8VTAwNkE+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPiI7IjxVMDA2MT48VTAwNjc+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNzA+IjsiPFUwMDZGPjxVMDA2Mz48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA3Nj4iOyI8VTAwNjQ+PFUwMDY5PjxVMDA2Mz4iCittb24gICAgICI8VTAwNjU+PFUwMDZFPjxVMDA2NT48VTAwNzI+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDY2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA2NT48VTAwNzI+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMDdBPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNjI+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3OT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2RT48VTAwNjk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkM+PFUwMDY5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNjc+PFUwMDZGPjxVMDA3Mz48VTAwNzQ+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNzA+PFUwMDc0PjxVMDA2OT48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDZGPjxVMDA2Mz48VTAwNzQ+PFUwMDc1PjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+PFUwMDY5PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNjQ+PFUwMDY5PjxVMDA2Mz48VTAwNjk+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iCitkX3RfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNzk+IgordF9mbXQgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICIiOyIiCit0X2ZtdF9hbXBtICIiCitkYXRlX2ZtdAkiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorJSBGSVhNRQoraGVpZ2h0ICAgMjk3CislIEZJWE1FCit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDMxPjxVMDAzOD48VTAwMzA+PFUwMDM5PiIKK2ludF9zZWxlY3QgICAgICI8VTAwMzA+PFUwMDMxPjxVMDAzMT4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCislIEZJWE1FCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICAgIjxVMDA0ND48VTAwNEY+IgorY291bnRyeV9hYjMgICAiPFUwMDQ0PjxVMDA0Rj48VTAwNEQ+IgorY291bnRyeV9udW0gICAyMTQKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lc19FQyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VzX0VDCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZDRjOGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lc19FQwpAQCAtMCwwICsxLDE2MCBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIFNwYW5pc2ggTGFuZ3VhZ2UgTG9jYWxlIGZvciBFY3VhZG9yCislIFNvdXJjZTogUkFQCislIEFkZHJlc3M6IFNhbmt0IEpvLy9yZ2VucyBBbGxlIDgKKyUgICAgREstMTYxNSBLby8vYmVuaGF2biBWLCBEYW5tYXJrCislIENvbnRhY3Q6IEtlbGQgU2ltb25zZW4KKyUgRW1haWw6IEtlbGQuU2ltb25zZW5AZGt1dWcuZGsKKyUgVGVsOiArNDUgLSAzMTIyNjU0MworJSBGYXg6ICs0NSAtIDMzMjU2NTQzCislIExhbmd1YWdlOiBlcworJSBUZXJyaXRvcnk6IEVDCislIFJldmlzaW9uOiA0LjQKKyUgRGF0ZTogMTk5Ny0wMy0xOAorJSBBcHBsaWNhdGlvbjogZ2VuZXJhbAorJSBVc2VyczogZ2VuZXJhbAorJSBSZXBlcnRvaXJlbWFwOiBtbmVtb25pYy5kcworJSBDaGFyc2V0OiBJU08tODg1OS0xCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJTcGFuaXNoIGxvY2FsZSBmb3IgRWN1YWRvciIKK3NvdXJjZSAgICAgIlJBUCIKK2FkZHJlc3MgICAgIlNhbmt0IEo8VTAwRjg+cmdlbnMgQWxsZSA4LCBESy0xNjE1IEs8VTAwRjg+YmVuaGF2biBWLCBEYW5tYXJrIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIlNwYW5pc2giCit0ZXJyaXRvcnkgICJFY3VhZG9yIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAiZXNfRUM6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZXNfRUM6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZXNfRUM6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJlc19FQzoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImVzX0VDOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZXNfRUM6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZXNfRUM6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZXNfRUM6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZXNfRUM6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJlc19FQzoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImVzX0VDOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ09MTEFURQorY29weSAiZXNfVVMiCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAiZXNfRVMiCitFTkQgTENfQ1RZUEUKKworTENfTUVTU0FHRVMKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDczPjxVMDA1Mz48VTAwNzk+PFUwMDU5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgICI8VTAwNTU+PFUwMDUzPjxVMDA0ND48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgIjxVMDAyND4iCittb25fZGVjaW1hbF9wb2ludCAgICAiPFUwMDJDPiIKK21vbl90aG91c2FuZHNfc2VwICAgICI8VTAwMkU+IgorbW9uX2dyb3VwaW5nICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAxCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludCAgICAgICAgIjxVMDAyQz4iCit0aG91c2FuZHNfc2VwICAgICAgICAiIgorZ3JvdXBpbmcgICAgICAgICAgICAgMDswCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICI8VTAwNjQ+PFUwMDZGPjxVMDA2RD4iOyI8VTAwNkM+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2RD48VTAwNjk+PFUwMEU5PiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNjU+IjsiPFUwMDc2PjxVMDA2OT48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMEUxPjxVMDA2Mj4iCitkYXkgICAgICI8VTAwNjQ+PFUwMDZGPjxVMDA2RD48VTAwNjk+PFUwMDZFPjxVMDA2Nz48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNkM+PFUwMDc1PjxVMDA2RT48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMDc0PjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDY5PjxVMDBFOT48VTAwNzI+PFUwMDYzPjxVMDA2Rj48VTAwNkM+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDY1PjxVMDA3Nj48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDc2PjxVMDA2OT48VTAwNjU+PFUwMDcyPjxVMDA2RT48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDczPjxVMDBFMT48VTAwNjI+PFUwMDYxPjxVMDA2ND48VTAwNkY+IgorYWJtb24gICAiPFUwMDY1PjxVMDA2RT48VTAwNjU+IjsiPFUwMDY2PjxVMDA2NT48VTAwNjI+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNjE+PFUwMDYyPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDc5PiI7IjxVMDA2QT48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkM+IjsiPFUwMDYxPjxVMDA2Nz48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD4iOyI8VTAwNkY+PFUwMDYzPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PiI7IjxVMDA2ND48VTAwNjk+PFUwMDYzPiIKK21vbiAgICAgIjxVMDA2NT48VTAwNkU+PFUwMDY1PjxVMDA3Mj48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjY+PFUwMDY1PjxVMDA2Mj48VTAwNzI+PFUwMDY1PjxVMDA3Mj48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwN0E+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA2Mj48VTAwNzI+PFUwMDY5PjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDc5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZFPjxVMDA2OT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Qz48VTAwNjk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA2Nz48VTAwNkY+PFUwMDczPjxVMDA3ND48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY5PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkY+PFUwMDYzPjxVMDA3ND48VTAwNzU+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA3Nj48VTAwNjk+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwNjk+PFUwMDYzPjxVMDA2OT48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiIKK2RfdF9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA3OT4iCit0X2ZtdCAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgIiI7IiIKK3RfZm10X2FtcG0gIiIKK2RhdGVfZm10CSI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCislIEZJWE1FCitoZWlnaHQgICAyOTcKKyUgRklYTUUKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzU+PFUwMDM5PjxVMDAzMz4iCitpbnRfc2VsZWN0ICAgICAiPFUwMDMwPjxVMDAzMD4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCislIEZJWE1FCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICAgIjxVMDA0NT48VTAwNDM+IgorY291bnRyeV9hYjMgICAiPFUwMDQ1PjxVMDA0Mz48VTAwNTU+IgorY291bnRyeV9udW0gICAyMTgKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lc19FUyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VzX0VTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYTQxMjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lc19FUwpAQCAtMCwwICsxLDE2NSBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIFNwYW5pc2ggTGFuZ3VhZ2UgTG9jYWxlIGZvciBTcGFpbgorJSBTb3VyY2U6IFJBUAorJSBBZGRyZXNzOiBTYW5rdCBKby8vcmdlbnMgQWxsZSA4CislICAgIERLLTE2MTUgS28vL2Jlbmhhdm4gViwgRGFubWFyaworJSBDb250YWN0OiBLZWxkIFNpbW9uc2VuCislIEVtYWlsOiBLZWxkLlNpbW9uc2VuQGRrdXVnLmRrCislIFRlbDogKzQ1IC0gMzEyMjY1NDMKKyUgRmF4OiArNDUgLSAzMzI1NjU0MworJSBMYW5ndWFnZTogZXMKKyUgVGVycml0b3J5OiBFUworJSBSZXZpc2lvbjogNC40CislIERhdGU6IDE5OTctMDMtMTgKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMuZHMKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiU3BhbmlzaCBsb2NhbGUgZm9yIFNwYWluIgorc291cmNlICAgICAiUkFQIgorYWRkcmVzcyAgICAiU2Fua3QgSjxVMDBGOD5yZ2VucyBBbGxlIDgsIERLLTE2MTUgSzxVMDBGOD5iZW5oYXZuIFYsIERhbm1hcmsiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiU3BhbmlzaCIKK3RlcnJpdG9yeSAgIlNwYWluIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAiZXNfRVM6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZXNfRVM6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZXNfRVM6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJlc19FUzoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImVzX0VTOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZXNfRVM6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZXNfRVM6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZXNfRVM6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZXNfRVM6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJlc19FUzoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImVzX0VTOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ09MTEFURQorJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEKK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNzM+PFUwMDUzPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgIjxVMDA0NT48VTAwNTU+PFUwMDUyPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAiPFUyMEFDPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICI8VTAwMkM+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgIjxVMDAyRT4iCittb25fZ3JvdXBpbmcgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgIDAKK3Bfc2VwX2J5X3NwYWNlICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgIDAKK25fc2VwX2J5X3NwYWNlICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICIiCitncm91cGluZyAgICAgICAgICAgICAwOzAKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPiI7IjxVMDA2Qz48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsiPFUwMDZEPjxVMDA2OT48VTAwRTk+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2NT4iOyI8VTAwNzY+PFUwMDY5PjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwRTE+PFUwMDYyPiIKK2RheSAgICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPjxVMDA2OT48VTAwNkU+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwNzU+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNzQ+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjk+PFUwMEU5PjxVMDA3Mj48VTAwNjM+PFUwMDZGPjxVMDA2Qz48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNjU+PFUwMDc2PjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNzY+PFUwMDY5PjxVMDA2NT48VTAwNzI+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMEUxPjxVMDA2Mj48VTAwNjE+PFUwMDY0PjxVMDA2Rj4iCithYm1vbiAgICI8VTAwNjU+PFUwMDZFPjxVMDA2NT4iOyI8VTAwNjY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2MT48VTAwNjI+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+IjsiPFUwMDZBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNjE+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA2Rj48VTAwNjM+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDY0PjxVMDA2OT48VTAwNjM+IgorbW9uICAgICAiPFUwMDY1PjxVMDA2RT48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Nj48VTAwNjU+PFUwMDYyPjxVMDA3Mj48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3QT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDYyPjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkU+PFUwMDY5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPjxVMDA2OT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDY3PjxVMDA2Rj48VTAwNzM+PFUwMDc0PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjk+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2Rj48VTAwNjM+PFUwMDc0PjxVMDA3NT48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PjxVMDA2OT48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDY0PjxVMDA2OT48VTAwNjM+PFUwMDY5PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAiIjsiIgordF9mbXRfYW1wbSAiIgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+Igord2VlayAgICA3OzE5OTcxMTMwOzUKK2ZpcnN0X3dlZWtkYXkgICAyCitmaXJzdF93b3JrZGF5ICAgMgorRU5EIExDX1RJTUUKKworTENfUEFQRVIKK2hlaWdodCAgIDI5Nword2lkdGggICAgMjEwCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzMz48VTAwMzQ+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorJSBGSVhNRQorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAgICI8VTAwNDU+PFUwMDUzPiIKK2NvdW50cnlfYWIzICAgIjxVMDA0NT48VTAwNTM+PFUwMDUwPiIKK2NvdW50cnlfbnVtICAgNzI0CitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZXNfRVNAZXVybyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VzX0VTQGV1cm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ4MWU4MwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VzX0VTQGV1cm8KQEAgLTAsMCArMSw4MyBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIFNwYW5pc2ggTGFuZ3VhZ2UgTG9jYWxlIGZvciBTcGFpbiB3aXRoIEV1cm8KKyUgTGFuZ3VhZ2U6IGVzCislIFRlcnJpdG9yeTogRVMKKyUgT3B0aW9uOiBldXJvCislIERhdGU6IDIwMDAtMDgtMjAKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogSVNPLTg4NTktMTUKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlNwYW5pc2ggbG9jYWxlIGZvciBTcGFpbiB3aXRoIEV1cm8iCitzb3VyY2UgICAgICJGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4iCithZGRyZXNzICAgICI1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIlNwYW5pc2giCit0ZXJyaXRvcnkgICJTcGFpbiIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjkiCislCitjYXRlZ29yeSAgImVzX0VTQGV1cm86MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZXNfRVNAZXVybzoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJlc19FU0BldXJvOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiZXNfRVNAZXVybzoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImVzX0VTQGV1cm86MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJlc19FU0BldXJvOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImVzX0VTQGV1cm86MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZXNfRVNAZXVybzoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJlc19FU0BldXJvOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiZXNfRVNAZXVybzoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImVzX0VTQGV1cm86MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DT0xMQVRFCitjb3B5ICJlc19FUyIKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJlc19FUyIKK0VORCBMQ19DVFlQRQorCitMQ19NRVNTQUdFUworY29weSAiZXNfRVMiCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2NvcHkgImVzX0VTIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgImVzX0VTIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorY29weSAiZXNfRVMiCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorY29weSAiZXNfRVMiCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCitjb3B5ICJlc19FUyIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgImVzX0VTIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK2NvcHkgImVzX0VTIgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworY29weSAiZXNfRVMiCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZXNfR1QgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lc19HVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDA2ZmE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZXNfR1QKQEAgLTAsMCArMSwxNjAgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBTcGFuaXNoIGxhbmd1YWdlIGxvY2FsZSBmb3IgR3VhdGVtYWxhCislIFNvdXJjZTogUkFQCislIEFkZHJlc3M6IFNhbmt0IEpvLy9yZ2VucyBBbGxlIDgKKyUgICAgREstMTYxNSBLby8vYmVuaGF2biBWLCBEYW5tYXJrCislIENvbnRhY3Q6IEtlbGQgU2ltb25zZW4KKyUgRW1haWw6IEtlbGQuU2ltb25zZW5AZGt1dWcuZGsKKyUgVGVsOiArNDUgLSAzMTIyNjU0MworJSBGYXg6ICs0NSAtIDMzMjU2NTQzCislIExhbmd1YWdlOiBlcworJSBUZXJyaXRvcnk6IEdUCislIFJldmlzaW9uOiA0LjQKKyUgRGF0ZTogMTk5Ny0xMS0wNQorJSBBcHBsaWNhdGlvbjogZ2VuZXJhbAorJSBVc2VyczogZ2VuZXJhbAorJSBSZXBlcnRvaXJlbWFwOiBtbmVtb25pYy5kcworJSBDaGFyc2V0OiBJU08tODg1OS0xCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJTcGFuaXNoIGxvY2FsZSBmb3IgR3VhdGVtYWxhIgorc291cmNlICAgICAiUkFQIgorYWRkcmVzcyAgICAiU2Fua3QgSjxVMDBGOD5yZ2VucyBBbGxlIDgsIERLLTE2MTUgSzxVMDBGOD5iZW5oYXZuIFYsIERhbm1hcmsiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiU3BhbmlzaCIKK3RlcnJpdG9yeSAgIkd1YXRlbWFsYSIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjkiCislCitjYXRlZ29yeSAgImVzX0dUOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImVzX0dUOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImVzX0dUOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiZXNfR1Q6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJlc19HVDoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImVzX0dUOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImVzX0dUOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImVzX0dUOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImVzX0dUOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiZXNfR1Q6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJlc19HVDoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKK2NvcHkgImVzX0VTIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImVzX0VTIgorRU5EIExDX0NUWVBFCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA3Mz48VTAwNTM+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAiPFUwMDQ3PjxVMDA1ND48VTAwNTE+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICI8VTAwNTE+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgMQorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgICAgIiIKK2dyb3VwaW5nICAgICAgICAgICAgIDA7MAorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorYWJkYXkgICAiPFUwMDY0PjxVMDA2Rj48VTAwNkQ+IjsiPFUwMDZDPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNkQ+PFUwMDY5PjxVMDBFOT4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDY1PiI7IjxVMDA3Nj48VTAwNjk+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDczPjxVMDBFMT48VTAwNjI+IgorZGF5ICAgICAiPFUwMDY0PjxVMDA2Rj48VTAwNkQ+PFUwMDY5PjxVMDA2RT48VTAwNjc+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDZDPjxVMDA3NT48VTAwNkU+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3ND48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2OT48VTAwRTk+PFUwMDcyPjxVMDA2Mz48VTAwNkY+PFUwMDZDPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2NT48VTAwNzY+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA3Nj48VTAwNjk+PFUwMDY1PjxVMDA3Mj48VTAwNkU+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwRTE+PFUwMDYyPjxVMDA2MT48VTAwNjQ+PFUwMDZGPiIKK2FibW9uICAgIjxVMDA2NT48VTAwNkU+PFUwMDY1PiI7IjxVMDA2Nj48VTAwNjU+PFUwMDYyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsiPFUwMDYxPjxVMDA2Mj48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3OT4iOyI8VTAwNkE+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPiI7IjxVMDA2MT48VTAwNjc+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNzA+IjsiPFUwMDZGPjxVMDA2Mz48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA3Nj4iOyI8VTAwNjQ+PFUwMDY5PjxVMDA2Mz4iCittb24gICAgICI8VTAwNjU+PFUwMDZFPjxVMDA2NT48VTAwNzI+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDY2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA2NT48VTAwNzI+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMDdBPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNjI+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3OT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2RT48VTAwNjk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkM+PFUwMDY5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNjc+PFUwMDZGPjxVMDA3Mz48VTAwNzQ+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNzA+PFUwMDc0PjxVMDA2OT48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDZGPjxVMDA2Mz48VTAwNzQ+PFUwMDc1PjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+PFUwMDY5PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNjQ+PFUwMDY5PjxVMDA2Mz48VTAwNjk+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iCitkX3RfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNzk+IgordF9mbXQgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICIiOyIiCit0X2ZtdF9hbXBtICIiCitkYXRlX2ZtdAkiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorJSBGSVhNRQoraGVpZ2h0ICAgMjk3CislIEZJWE1FCit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDM1PjxVMDAzMD48VTAwMzI+IgoraW50X3NlbGVjdCAgICAgIjxVMDAzMD48VTAwMzA+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorJSBGSVhNRQorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAgICI8VTAwNDc+PFUwMDU0PiIKK2NvdW50cnlfYWIzICAgIjxVMDA0Nz48VTAwNTQ+PFUwMDREPiIKK2NvdW50cnlfbnVtICAgMzIwCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZXNfSE4gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lc19ITgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mzg5MmI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZXNfSE4KQEAgLTAsMCArMSwxNjAgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBTcGFuaXNoIGxhbmd1YWdlIGxvY2FsZSBmb3IgSG9uZHVyYXMKKyUgU291cmNlOiBSQVAKKyUgQWRkcmVzczogU2Fua3QgSm8vL3JnZW5zIEFsbGUgOAorJSAgICBESy0xNjE1IEtvLy9iZW5oYXZuIFYsIERhbm1hcmsKKyUgQ29udGFjdDogS2VsZCBTaW1vbnNlbgorJSBFbWFpbDogS2VsZC5TaW1vbnNlbkBka3V1Zy5kaworJSBUZWw6ICs0NSAtIDMxMjI2NTQzCislIEZheDogKzQ1IC0gMzMyNTY1NDMKKyUgTGFuZ3VhZ2U6IGVzCislIFRlcnJpdG9yeTogSE4KKyUgUmV2aXNpb246IDQuNAorJSBEYXRlOiAxOTk3LTExLTA1CislIEFwcGxpY2F0aW9uOiBnZW5lcmFsCislIFVzZXJzOiBnZW5lcmFsCislIFJlcGVydG9pcmVtYXA6IG1uZW1vbmljLGRzCislIENoYXJzZXQ6IElTTy04ODU5LTEKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlNwYW5pc2ggbG9jYWxlIGZvciBIb25kdXJhcyIKK3NvdXJjZSAgICAgIlJBUCIKK2FkZHJlc3MgICAgIlNhbmt0IEo8VTAwRjg+cmdlbnMgQWxsZSA4LCBESy0xNjE1IEs8VTAwRjg+YmVuaGF2biBWLCBEYW5tYXJrIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIlNwYW5pc2giCit0ZXJyaXRvcnkgICJIb25kdXJhcyIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjkiCislCitjYXRlZ29yeSAgImVzX0hOOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImVzX0hOOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImVzX0hOOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiZXNfSE46MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJlc19ITjoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImVzX0hOOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImVzX0hOOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImVzX0hOOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImVzX0hOOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiZXNfSE46MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJlc19ITjoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKK2NvcHkgImVzX0VTIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImVzX0VTIgorRU5EIExDX0NUWVBFCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA3Mz48VTAwNTM+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAiPFUwMDQ4PjxVMDA0RT48VTAwNEM+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICI8VTAwNEM+PFUwMDJFPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICIiCitncm91cGluZyAgICAgICAgICAgICAwOzAKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPiI7IjxVMDA2Qz48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsiPFUwMDZEPjxVMDA2OT48VTAwRTk+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2NT4iOyI8VTAwNzY+PFUwMDY5PjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwRTE+PFUwMDYyPiIKK2RheSAgICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPjxVMDA2OT48VTAwNkU+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwNzU+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNzQ+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjk+PFUwMEU5PjxVMDA3Mj48VTAwNjM+PFUwMDZGPjxVMDA2Qz48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNjU+PFUwMDc2PjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNzY+PFUwMDY5PjxVMDA2NT48VTAwNzI+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMEUxPjxVMDA2Mj48VTAwNjE+PFUwMDY0PjxVMDA2Rj4iCithYm1vbiAgICI8VTAwNjU+PFUwMDZFPjxVMDA2NT4iOyI8VTAwNjY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2MT48VTAwNjI+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+IjsiPFUwMDZBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNjE+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA2Rj48VTAwNjM+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDY0PjxVMDA2OT48VTAwNjM+IgorbW9uICAgICAiPFUwMDY1PjxVMDA2RT48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Nj48VTAwNjU+PFUwMDYyPjxVMDA3Mj48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3QT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDYyPjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkU+PFUwMDY5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPjxVMDA2OT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDY3PjxVMDA2Rj48VTAwNzM+PFUwMDc0PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjk+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2Rj48VTAwNjM+PFUwMDc0PjxVMDA3NT48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PjxVMDA2OT48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDY0PjxVMDA2OT48VTAwNjM+PFUwMDY5PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAiIjsiIgordF9mbXRfYW1wbSAiIgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworTENfUEFQRVIKKyUgRklYTUUKK2hlaWdodCAgIDI5NworJSBGSVhNRQord2lkdGggICAgMjEwCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzNT48VTAwMzA+PFUwMDM0PiIKK2ludF9zZWxlY3QgICAgICI8VTAwMzA+PFUwMDMwPiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKKyUgRklYTUUKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgICAiPFUwMDQ4PjxVMDA0RT4iCitjb3VudHJ5X2FiMyAgICI8VTAwNDg+PFUwMDRFPjxVMDA0ND4iCitjb3VudHJ5X251bSAgIDM0MAorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VzX01YIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZXNfTVgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE0OTg2NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VzX01YCkBAIC0wLDAgKzEsMTU5IEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgU3BhbmlzaCBsYW5ndWFnZSBsb2NhbGUgZm9yIE1leGljbworJSBTb3VyY2U6IFJBUAorJSBBZGRyZXNzOiBTYW5rdCBKby8vcmdlbnMgQWxsZSA4CislICAgIERLLTE2MTUgS28vL2Jlbmhhdm4gViwgRGFubWFyaworJSBDb250YWN0OiBLZWxkIFNpbW9uc2VuCislIEVtYWlsOiBLZWxkLlNpbW9uc2VuQGRrdXVnLmRrCislIFRlbDogKzQ1IC0gMzEyMjY1NDMKKyUgRmF4OiArNDUgLSAzMzI1NjU0MworJSBMYW5ndWFnZTogZXMKKyUgVGVycml0b3J5OiBNWAorJSBSZXZpc2lvbjogNC40CislIERhdGU6IDE5OTctMTEtMDUKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMuZHMKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiU3BhbmlzaCBsb2NhbGUgZm9yIE1leGljbyIKK3NvdXJjZSAgICAgIlJBUCIKK2FkZHJlc3MgICAgIlNhbmt0IEo8VTAwRjg+cmdlbnMgQWxsZSA4LCBESy0xNjE1IEs8VTAwRjg+YmVuaGF2biBWLCBEYW5tYXJrIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIlNwYW5pc2giCit0ZXJyaXRvcnkgICJNZXhpY28iCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA2LTI5IgorJQorY2F0ZWdvcnkgICJlc19NWDoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJlc19NWDoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJlc19NWDoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImVzX01YOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiZXNfTVg6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJlc19NWDoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJlc19NWDoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJlc19NWDoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJlc19NWDoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImVzX01YOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiZXNfTVg6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DT0xMQVRFCitjb3B5ICJlc19FUyIKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJlc19FUyIKK0VORCBMQ19DVFlQRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNzM+PFUwMDUzPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgIjxVMDA0RD48VTAwNTg+PFUwMDRFPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAiPFUwMDI0PiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICIiCitncm91cGluZyAgICAgICAgICAgICAwOzAKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPiI7IjxVMDA2Qz48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsiPFUwMDZEPjxVMDA2OT48VTAwRTk+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2NT4iOyI8VTAwNzY+PFUwMDY5PjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwRTE+PFUwMDYyPiIKK2RheSAgICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPjxVMDA2OT48VTAwNkU+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwNzU+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNzQ+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjk+PFUwMEU5PjxVMDA3Mj48VTAwNjM+PFUwMDZGPjxVMDA2Qz48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNjU+PFUwMDc2PjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNzY+PFUwMDY5PjxVMDA2NT48VTAwNzI+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMEUxPjxVMDA2Mj48VTAwNjE+PFUwMDY0PjxVMDA2Rj4iCithYm1vbiAgICI8VTAwNjU+PFUwMDZFPjxVMDA2NT4iOyI8VTAwNjY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2MT48VTAwNjI+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+IjsiPFUwMDZBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNjE+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA2Rj48VTAwNjM+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDY0PjxVMDA2OT48VTAwNjM+IgorbW9uICAgICAiPFUwMDY1PjxVMDA2RT48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Nj48VTAwNjU+PFUwMDYyPjxVMDA3Mj48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3QT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDYyPjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkU+PFUwMDY5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPjxVMDA2OT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDY3PjxVMDA2Rj48VTAwNzM+PFUwMDc0PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjk+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2Rj48VTAwNjM+PFUwMDc0PjxVMDA3NT48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PjxVMDA2OT48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDY0PjxVMDA2OT48VTAwNjM+PFUwMDY5PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAiIjsiIgordF9mbXRfYW1wbSAiIgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworTENfUEFQRVIKKyUgRklYTUUKK2hlaWdodCAgIDI5NworJSBGSVhNRQord2lkdGggICAgMjEwCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzNT48VTAwMzI+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorJSBGSVhNRQorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAgICI8VTAwNEQ+PFUwMDU4PiIKK2NvdW50cnlfYWIzICAgIjxVMDA0RD48VTAwNDU+PFUwMDU4PiIKK2NvdW50cnlfbnVtICAgNDg0CitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZXNfTkkgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lc19OSQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzk4NGE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZXNfTkkKQEAgLTAsMCArMSwxNTEgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBTcGFuaXNoIGxhbmd1YWdlIGxvY2FsZSBmb3IgTmljYXJhZ3VhCislIExhbmd1YWdlOiBlcworJSBUZXJyaXRvcnk6IE5JCislIERhdGU6IDIwMDAtMDgtMjEKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiU3BhbmlzaCBsb2NhbGUgZm9yIE5pY2FyYWd1YSIKK3NvdXJjZSAgICAgIkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiIKK2FkZHJlc3MgICAgIjU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiU3BhbmlzaCIKK3RlcnJpdG9yeSAgIk5pY2FyYWd1YSIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDgtMjEiCislCitjYXRlZ29yeSAgImVzX05JOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImVzX05JOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImVzX05JOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiZXNfTkk6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJlc19OSToyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImVzX05JOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImVzX05JOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImVzX05JOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImVzX05JOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiZXNfTkk6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJlc19OSToyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKK2NvcHkgImVzX0VTIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImVzX0VTIgorRU5EIExDX0NUWVBFCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA3Mz48VTAwNTM+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAiPFUwMDRFPjxVMDA0OT48VTAwNEY+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICI8VTAwMjQ+PFUwMDQzPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICIiCitncm91cGluZyAgICAgICAgICAgICAwOzAKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPiI7IjxVMDA2Qz48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsiPFUwMDZEPjxVMDA2OT48VTAwRTk+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2NT4iOyI8VTAwNzY+PFUwMDY5PjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwRTE+PFUwMDYyPiIKK2RheSAgICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPjxVMDA2OT48VTAwNkU+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwNzU+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNzQ+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjk+PFUwMEU5PjxVMDA3Mj48VTAwNjM+PFUwMDZGPjxVMDA2Qz48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNjU+PFUwMDc2PjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNzY+PFUwMDY5PjxVMDA2NT48VTAwNzI+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMEUxPjxVMDA2Mj48VTAwNjE+PFUwMDY0PjxVMDA2Rj4iCithYm1vbiAgICI8VTAwNjU+PFUwMDZFPjxVMDA2NT4iOyI8VTAwNjY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2MT48VTAwNjI+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+IjsiPFUwMDZBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNjE+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA2Rj48VTAwNjM+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDY0PjxVMDA2OT48VTAwNjM+IgorbW9uICAgICAiPFUwMDY1PjxVMDA2RT48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Nj48VTAwNjU+PFUwMDYyPjxVMDA3Mj48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3QT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDYyPjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkU+PFUwMDY5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPjxVMDA2OT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDY3PjxVMDA2Rj48VTAwNzM+PFUwMDc0PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjk+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2Rj48VTAwNjM+PFUwMDc0PjxVMDA3NT48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PjxVMDA2OT48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDY0PjxVMDA2OT48VTAwNjM+PFUwMDY5PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgordF9mbXRfYW1wbSAiPFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA3MD4iCithbV9wbQkiPFUwMDQxPjxVMDA0RD4iOyI8VTAwNTA+PFUwMDREPiIKK2RhdGVfZm10CSI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCislIEZJWE1FCitoZWlnaHQgICAyOTcKKyUgRklYTUUKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzU+PFUwMDMwPjxVMDAzNT4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCislIEZJWE1FCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICAgIjxVMDA0RT48VTAwNDk+IgorY291bnRyeV9hYjMgICAiPFUwMDRFPjxVMDA0OT48VTAwNDM+IgorY291bnRyeV9udW0gICA1NTgKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lc19QQSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VzX1BBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOTY5YTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lc19QQQpAQCAtMCwwICsxLDE1OSBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIFNwYW5pc2ggbGFuZ3VhZ2UgbG9jYWxlIGZvciBQYW5hbWEKKyUgU291cmNlOiBSQVAKKyUgQWRkcmVzczogU2Fua3QgSm8vL3JnZW5zIEFsbGUgOAorJSAgICBESy0xNjE1IEtvLy9iZW5oYXZuIFYsIERhbm1hcmsKKyUgQ29udGFjdDogS2VsZCBTaW1vbnNlbgorJSBFbWFpbDogS2VsZC5TaW1vbnNlbkBka3V1Zy5kaworJSBUZWw6ICs0NSAtIDMxMjI2NTQzCislIEZheDogKzQ1IC0gMzMyNTY1NDMKKyUgTGFuZ3VhZ2U6IGVzCislIFRlcnJpdG9yeTogUEEKKyUgUmV2aXNpb246IDQuNAorJSBEYXRlOiAxOTk3LTExLTA1CislIEFwcGxpY2F0aW9uOiBnZW5lcmFsCislIFVzZXJzOiBnZW5lcmFsCislIFJlcGVydG9pcmVtYXA6IG1uZW1vbmljLmRzCislIENoYXJzZXQ6IElTTy04ODU5LTEKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlNwYW5pc2ggbG9jYWxlIGZvciBQYW5hbWEiCitzb3VyY2UgICAgICJSQVAiCithZGRyZXNzICAgICJTYW5rdCBKPFUwMEY4PnJnZW5zIEFsbGUgOCwgREstMTYxNSBLPFUwMEY4PmJlbmhhdm4gViwgRGFubWFyayIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJTcGFuaXNoIgordGVycml0b3J5ICAiUGFuYW1hIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAiZXNfUEE6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZXNfUEE6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZXNfUEE6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJlc19QQToyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImVzX1BBOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZXNfUEE6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZXNfUEE6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZXNfUEE6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZXNfUEE6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJlc19QQToyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImVzX1BBOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ09MTEFURQorY29weSAiZXNfRVMiCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAiZXNfRVMiCitFTkQgTENfQ1RZUEUKKworTENfTUVTU0FHRVMKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDczPjxVMDA1Mz48VTAwNzk+PFUwMDU5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgICI8VTAwNTA+PFUwMDQxPjxVMDA0Mj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgIjxVMDA0Mj48VTAwMkY+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgMQorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgICAgIiIKK2dyb3VwaW5nICAgICAgICAgICAgIDA7MAorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorYWJkYXkgICAiPFUwMDY0PjxVMDA2Rj48VTAwNkQ+IjsiPFUwMDZDPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNkQ+PFUwMDY5PjxVMDBFOT4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDY1PiI7IjxVMDA3Nj48VTAwNjk+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDczPjxVMDBFMT48VTAwNjI+IgorZGF5ICAgICAiPFUwMDY0PjxVMDA2Rj48VTAwNkQ+PFUwMDY5PjxVMDA2RT48VTAwNjc+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDZDPjxVMDA3NT48VTAwNkU+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3ND48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2OT48VTAwRTk+PFUwMDcyPjxVMDA2Mz48VTAwNkY+PFUwMDZDPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2NT48VTAwNzY+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA3Nj48VTAwNjk+PFUwMDY1PjxVMDA3Mj48VTAwNkU+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwRTE+PFUwMDYyPjxVMDA2MT48VTAwNjQ+PFUwMDZGPiIKK2FibW9uICAgIjxVMDA2NT48VTAwNkU+PFUwMDY1PiI7IjxVMDA2Nj48VTAwNjU+PFUwMDYyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsiPFUwMDYxPjxVMDA2Mj48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3OT4iOyI8VTAwNkE+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPiI7IjxVMDA2MT48VTAwNjc+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNzA+IjsiPFUwMDZGPjxVMDA2Mz48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA3Nj4iOyI8VTAwNjQ+PFUwMDY5PjxVMDA2Mz4iCittb24gICAgICI8VTAwNjU+PFUwMDZFPjxVMDA2NT48VTAwNzI+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDY2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA2NT48VTAwNzI+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMDdBPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNjI+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3OT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2RT48VTAwNjk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkM+PFUwMDY5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNjc+PFUwMDZGPjxVMDA3Mz48VTAwNzQ+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNzA+PFUwMDc0PjxVMDA2OT48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDZGPjxVMDA2Mz48VTAwNzQ+PFUwMDc1PjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+PFUwMDY5PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNjQ+PFUwMDY5PjxVMDA2Mz48VTAwNjk+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iCitkX3RfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNzk+IgordF9mbXQgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICIiOyIiCit0X2ZtdF9hbXBtICIiCitkYXRlX2ZtdAkiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorJSBGSVhNRQoraGVpZ2h0ICAgMjk3CislIEZJWE1FCit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDM1PjxVMDAzMD48VTAwMzI+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorJSBGSVhNRQorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAgICI8VTAwNTA+PFUwMDQxPiIKK2NvdW50cnlfYWIzICAgIjxVMDA1MD48VTAwNDE+PFUwMDRFPiIKK2NvdW50cnlfbnVtICAgNTkxCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZXNfUEUgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lc19QRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzRjOTI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZXNfUEUKQEAgLTAsMCArMSwxNjAgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBTcGFuaXNoIGxhbmd1YWdlIGxvY2FsZSBmb3IgUGVydQorJSBTb3VyY2U6IFJBUAorJSBBZGRyZXNzOiBTYW5rdCBKby8vcmdlbnMgQWxsZSA4CislICAgIERLLTE2MTUgS28vL2Jlbmhhdm4gViwgRGFubWFyaworJSBDb250YWN0OiBLZWxkIFNpbW9uc2VuCislIEVtYWlsOiBLZWxkLlNpbW9uc2VuQGRrdXVnLmRrCislIFRlbDogKzQ1IC0gMzEyMjY1NDMKKyUgRmF4OiArNDUgLSAzMzI1NjU0MworJSBMYW5ndWFnZTogZXMKKyUgVGVycml0b3J5OiBQRQorJSBSZXZpc2lvbjogNC40CislIERhdGU6IDE5OTctMTEtMDUKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMuZHMKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiU3BhbmlzaCBsb2NhbGUgZm9yIFBlcnUiCitzb3VyY2UgICAgICJSQVAiCithZGRyZXNzICAgICJTYW5rdCBKPFUwMEY4PnJnZW5zIEFsbGUgOCwgREstMTYxNSBLPFUwMEY4PmJlbmhhdm4gViwgRGFubWFyayIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJTcGFuaXNoIgordGVycml0b3J5ICAiUGVydSIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjkiCislCitjYXRlZ29yeSAgImVzX1BFOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImVzX1BFOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImVzX1BFOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiZXNfUEU6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJlc19QRToyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImVzX1BFOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImVzX1BFOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImVzX1BFOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImVzX1BFOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiZXNfUEU6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJlc19QRToyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKK2NvcHkgImVzX0VTIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImVzX0VTIgorRU5EIExDX0NUWVBFCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA3Mz48VTAwNTM+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAiPFUwMDUwPjxVMDA0NT48VTAwNEU+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICI8VTAwNTM+PFUwMDJGPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICIiCitncm91cGluZyAgICAgICAgICAgICAwOzAKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPiI7IjxVMDA2Qz48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsiPFUwMDZEPjxVMDA2OT48VTAwRTk+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2NT4iOyI8VTAwNzY+PFUwMDY5PjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwRTE+PFUwMDYyPiIKK2RheSAgICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPjxVMDA2OT48VTAwNkU+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwNzU+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNzQ+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjk+PFUwMEU5PjxVMDA3Mj48VTAwNjM+PFUwMDZGPjxVMDA2Qz48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNjU+PFUwMDc2PjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNzY+PFUwMDY5PjxVMDA2NT48VTAwNzI+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMEUxPjxVMDA2Mj48VTAwNjE+PFUwMDY0PjxVMDA2Rj4iCithYm1vbiAgICI8VTAwNjU+PFUwMDZFPjxVMDA2NT4iOyI8VTAwNjY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2MT48VTAwNjI+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+IjsiPFUwMDZBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNjE+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA2Rj48VTAwNjM+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDY0PjxVMDA2OT48VTAwNjM+IgorbW9uICAgICAiPFUwMDY1PjxVMDA2RT48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Nj48VTAwNjU+PFUwMDYyPjxVMDA3Mj48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3QT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDYyPjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkU+PFUwMDY5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPjxVMDA2OT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDY3PjxVMDA2Rj48VTAwNzM+PFUwMDc0PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjk+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2Rj48VTAwNjM+PFUwMDc0PjxVMDA3NT48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PjxVMDA2OT48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDY0PjxVMDA2OT48VTAwNjM+PFUwMDY5PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgordF9mbXRfYW1wbSAiPFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA3MD4iCithbV9wbQkiPFUwMDQxPjxVMDA0RD4iOyI8VTAwNTA+PFUwMDREPiIKK2RhdGVfZm10CSI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCislIEZJWE1FCitoZWlnaHQgICAyOTcKKyUgRklYTUUKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzU+PFUwMDMxPiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKKyUgRklYTUUKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgICAiPFUwMDUwPjxVMDA0NT4iCitjb3VudHJ5X2FiMyAgICI8VTAwNTA+PFUwMDQ1PjxVMDA1Mj4iCitjb3VudHJ5X251bSAgIDYwNAorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VzX1BSIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZXNfUFIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ2YjZjMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VzX1BSCkBAIC0wLDAgKzEsMTQ3IEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgU3BhbmlzaCBsYW5ndWFnZSBsb2NhbGUgZm9yIFB1ZXJ0byBSaWNvCislIExhbmd1YWdlOiBlcworJSBUZXJyaXRvcnk6IFBSCislIERhdGU6IDIwMDAtMDgtMjEKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiU3BhbmlzaCBsb2NhbGUgZm9yIFB1ZXJ0byBSaWNvIgorc291cmNlICAgICAiRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIgorYWRkcmVzcyAgICAiNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQSIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJTcGFuaXNoIgordGVycml0b3J5ICAiUHVlcnRvIFJpY28iCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA4LTIxIgorJQorY2F0ZWdvcnkgICJlc19QUjoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJlc19QUjoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJlc19QUjoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImVzX1BSOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiZXNfUFI6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJlc19QUjoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJlc19QUjoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJlc19QUjoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJlc19QUjoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImVzX1BSOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiZXNfUFI6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DT0xMQVRFCitjb3B5ICJlc19FUyIKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJlc19FUyIKK0VORCBMQ19DVFlQRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNzM+PFUwMDUzPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgIjxVMDA1NT48VTAwNTM+PFUwMDQ0PjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAiPFUwMDI0PiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICIiCitncm91cGluZyAgICAgICAgICAgICAwOzAKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPiI7IjxVMDA2Qz48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsiPFUwMDZEPjxVMDA2OT48VTAwRTk+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2NT4iOyI8VTAwNzY+PFUwMDY5PjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwRTE+PFUwMDYyPiIKK2RheSAgICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPjxVMDA2OT48VTAwNkU+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwNzU+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNzQ+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjk+PFUwMEU5PjxVMDA3Mj48VTAwNjM+PFUwMDZGPjxVMDA2Qz48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNjU+PFUwMDc2PjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNzY+PFUwMDY5PjxVMDA2NT48VTAwNzI+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMEUxPjxVMDA2Mj48VTAwNjE+PFUwMDY0PjxVMDA2Rj4iCithYm1vbiAgICI8VTAwNjU+PFUwMDZFPjxVMDA2NT4iOyI8VTAwNjY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2MT48VTAwNjI+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+IjsiPFUwMDZBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNjE+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA2Rj48VTAwNjM+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDY0PjxVMDA2OT48VTAwNjM+IgorbW9uICAgICAiPFUwMDY1PjxVMDA2RT48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Nj48VTAwNjU+PFUwMDYyPjxVMDA3Mj48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3QT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDYyPjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkU+PFUwMDY5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPjxVMDA2OT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDY3PjxVMDA2Rj48VTAwNzM+PFUwMDc0PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjk+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2Rj48VTAwNjM+PFUwMDc0PjxVMDA3NT48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PjxVMDA2OT48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDY0PjxVMDA2OT48VTAwNjM+PFUwMDY5PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAiIjsiIgordF9mbXRfYW1wbSAiIgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworTENfUEFQRVIKK2hlaWdodCAgIDI3OQord2lkdGggICAgMjE2CitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzMT48VTAwMzc+PFUwMDM4PjxVMDAzNz4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCittZWFzdXJlbWVudCAgICAyCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICAgIjxVMDA1MD48VTAwNTI+IgorY291bnRyeV9hYjMgICAiPFUwMDUwPjxVMDA1Mj48VTAwNDk+IgorY291bnRyeV9udW0gICA2MzAKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lc19QWSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VzX1BZCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMzFiMmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lc19QWQpAQCAtMCwwICsxLDE1OSBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIFNwYW5pc2ggbGFuZ3VhZ2UgbG9jYWxlIGZvciBQYXJhZ3VheQorJSBTb3VyY2U6IFJBUAorJSBBZGRyZXNzOiBTYW5rdCBKby8vcmdlbnMgQWxsZSA4CislICAgIERLLTE2MTUgS28vL2Jlbmhhdm4gViwgRGFubWFyaworJSBDb250YWN0OiBLZWxkIFNpbW9uc2VuCislIEVtYWlsOiBLZWxkLlNpbW9uc2VuQGRrdXVnLmRrCislIFRlbDogKzQ1IC0gMzEyMjY1NDMKKyUgRmF4OiArNDUgLSAzMzI1NjU0MworJSBMYW5ndWFnZTogZXMKKyUgVGVycml0b3J5OiBQWQorJSBSZXZpc2lvbjogNC40CislIERhdGU6IDE5OTctMTEtMDUKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMuZHMKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiU3BhbmlzaCBsb2NhbGUgZm9yIFBhcmFndWF5Igorc291cmNlICAgICAiUkFQIgorYWRkcmVzcyAgICAiU2Fua3QgSjxVMDBGOD5yZ2VucyBBbGxlIDgsIERLLTE2MTUgSzxVMDBGOD5iZW5oYXZuIFYsIERhbm1hcmsiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiU3BhbmlzaCIKK3RlcnJpdG9yeSAgIlBhcmFndWF5IgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAiZXNfUFk6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZXNfUFk6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZXNfUFk6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJlc19QWToyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImVzX1BZOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZXNfUFk6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZXNfUFk6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZXNfUFk6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZXNfUFk6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJlc19QWToyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImVzX1BZOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ09MTEFURQorY29weSAiZXNfRVMiCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAiZXNfRVMiCitFTkQgTENfQ1RZUEUKKworTENfTUVTU0FHRVMKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDczPjxVMDA1Mz48VTAwNzk+PFUwMDU5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgICI8VTAwNTA+PFUwMDU5PjxVMDA0Nz48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgIjxVMDA0Nz48VTAwNzM+PFUwMDJFPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICI8VTAwMkM+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgIjxVMDAyRT4iCittb25fZ3JvdXBpbmcgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICIiCitncm91cGluZyAgICAgICAgICAgICAwOzAKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPiI7IjxVMDA2Qz48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsiPFUwMDZEPjxVMDA2OT48VTAwRTk+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2NT4iOyI8VTAwNzY+PFUwMDY5PjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwRTE+PFUwMDYyPiIKK2RheSAgICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPjxVMDA2OT48VTAwNkU+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwNzU+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNzQ+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjk+PFUwMEU5PjxVMDA3Mj48VTAwNjM+PFUwMDZGPjxVMDA2Qz48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNjU+PFUwMDc2PjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNzY+PFUwMDY5PjxVMDA2NT48VTAwNzI+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMEUxPjxVMDA2Mj48VTAwNjE+PFUwMDY0PjxVMDA2Rj4iCithYm1vbiAgICI8VTAwNjU+PFUwMDZFPjxVMDA2NT4iOyI8VTAwNjY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2MT48VTAwNjI+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+IjsiPFUwMDZBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNjE+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA2Rj48VTAwNjM+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDY0PjxVMDA2OT48VTAwNjM+IgorbW9uICAgICAiPFUwMDY1PjxVMDA2RT48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Nj48VTAwNjU+PFUwMDYyPjxVMDA3Mj48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3QT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDYyPjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkU+PFUwMDY5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPjxVMDA2OT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDY3PjxVMDA2Rj48VTAwNzM+PFUwMDc0PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjk+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2Rj48VTAwNjM+PFUwMDc0PjxVMDA3NT48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PjxVMDA2OT48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDY0PjxVMDA2OT48VTAwNjM+PFUwMDY5PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAiIjsiIgordF9mbXRfYW1wbSAiIgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworTENfUEFQRVIKKyUgRklYTUUKK2hlaWdodCAgIDI5NworJSBGSVhNRQord2lkdGggICAgMjEwCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzNT48VTAwMzk+PFUwMDM1PiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKKyUgRklYTUUKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgICAiPFUwMDUwPjxVMDA1OT4iCitjb3VudHJ5X2FiMyAgICI8VTAwNTA+PFUwMDUyPjxVMDA1OT4iCitjb3VudHJ5X251bSAgIDYwMAorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VzX1NWIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZXNfU1YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxNzMwNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VzX1NWCkBAIC0wLDAgKzEsMTYwIEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgU3BhbmlzaCBsYW5ndWFnZSBsb2NhbGUgZm9yIEVsIFNhbHZhZG9yCislIFNvdXJjZTogUkFQCislIEFkZHJlc3M6IFNhbmt0IEpvLy9yZ2VucyBBbGxlIDgKKyUgICAgREstMTYxNSBLby8vYmVuaGF2biBWLCBEYW5tYXJrCislIENvbnRhY3Q6IEtlbGQgU2ltb25zZW4KKyUgRW1haWw6IEtlbGQuU2ltb25zZW5AZGt1dWcuZGsKKyUgVGVsOiArNDUgLSAzMTIyNjU0MworJSBGYXg6ICs0NSAtIDMzMjU2NTQzCislIExhbmd1YWdlOiBlcworJSBUZXJyaXRvcnk6IFNWCislIFJldmlzaW9uOiA0LjQKKyUgRGF0ZTogMTk5Ny0xMS0wNQorJSBBcHBsaWNhdGlvbjogZ2VuZXJhbAorJSBVc2VyczogZ2VuZXJhbAorJSBSZXBlcnRvaXJlbWFwOiBtbmVtb25pYy5kcworJSBDaGFyc2V0OiBJU08tODg1OS0xCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJTcGFuaXNoIGxvY2FsZSBmb3IgRWwgU2FsdmFkb3IiCitzb3VyY2UgICAgICJSQVAiCithZGRyZXNzICAgICJTYW5rdCBKPFUwMEY4PnJnZW5zIEFsbGUgOCwgREstMTYxNSBLPFUwMEY4PmJlbmhhdm4gViwgRGFubWFyayIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJTcGFuaXNoIgordGVycml0b3J5ICAiRWwgU2FsdmFkb3IiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA2LTI5IgorJQorY2F0ZWdvcnkgICJlc19TVjoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJlc19TVjoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJlc19TVjoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImVzX1NWOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiZXNfU1Y6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJlc19TVjoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJlc19TVjoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJlc19TVjoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJlc19TVjoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImVzX1NWOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiZXNfU1Y6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DT0xMQVRFCitjb3B5ICJlc19FUyIKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJlc19FUyIKK0VORCBMQ19DVFlQRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNzM+PFUwMDUzPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgIjxVMDA1Mz48VTAwNTY+PFUwMDQzPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAiPFUwMEEyPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICIiCitncm91cGluZyAgICAgICAgICAgICAwOzAKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPiI7IjxVMDA2Qz48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsiPFUwMDZEPjxVMDA2OT48VTAwRTk+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2NT4iOyI8VTAwNzY+PFUwMDY5PjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwRTE+PFUwMDYyPiIKK2RheSAgICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPjxVMDA2OT48VTAwNkU+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwNzU+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNzQ+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjk+PFUwMEU5PjxVMDA3Mj48VTAwNjM+PFUwMDZGPjxVMDA2Qz48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNjU+PFUwMDc2PjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNzY+PFUwMDY5PjxVMDA2NT48VTAwNzI+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMEUxPjxVMDA2Mj48VTAwNjE+PFUwMDY0PjxVMDA2Rj4iCithYm1vbiAgICI8VTAwNjU+PFUwMDZFPjxVMDA2NT4iOyI8VTAwNjY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2MT48VTAwNjI+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+IjsiPFUwMDZBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNjE+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA2Rj48VTAwNjM+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDY0PjxVMDA2OT48VTAwNjM+IgorbW9uICAgICAiPFUwMDY1PjxVMDA2RT48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Nj48VTAwNjU+PFUwMDYyPjxVMDA3Mj48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3QT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDYyPjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkU+PFUwMDY5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPjxVMDA2OT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDY3PjxVMDA2Rj48VTAwNzM+PFUwMDc0PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjk+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2Rj48VTAwNjM+PFUwMDc0PjxVMDA3NT48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PjxVMDA2OT48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDY0PjxVMDA2OT48VTAwNjM+PFUwMDY5PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAiIjsiIgordF9mbXRfYW1wbSAiIgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworTENfUEFQRVIKKyUgRklYTUUKK2hlaWdodCAgIDI5NworJSBGSVhNRQord2lkdGggICAgMjEwCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzNT48VTAwMzA+PFUwMDMzPiIKK2ludF9zZWxlY3QgICAgICI8VTAwMzA+PFUwMDMwPiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKKyUgRklYTUUKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgICAiPFUwMDUzPjxVMDA1Nj4iCitjb3VudHJ5X2FiMyAgICI8VTAwNTM+PFUwMDRDPjxVMDA1Nj4iCitjb3VudHJ5X251bSAgIDIyMgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VzX1VTIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZXNfVVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMxNDgzOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VzX1VTCkBAIC0wLDAgKzEsMjEyIEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgU3BhbmlzaCBMYW5ndWFnZSBMb2NhbGUgZm9yIFUuUy5BLgorJSBTb3VyY2U6IFJBUAorJSBBZGRyZXNzOiBTYW5rdCBKby8vcmdlbnMgQWxsZSA4CislICAgIERLLTE2MTUgS28vL2Jlbmhhdm4gViwgRGFubWFyaworJSBDb250YWN0OiBLZWxkIFNpbW9uc2VuCislIEVtYWlsOiBLZWxkLlNpbW9uc2VuQGRrdXVnLmRrCislIFRlbDogKzQ1IC0gMzEyMjY1NDMKKyUgRmF4OiArNDUgLSAzMzI1NjU0MworJSBMYW5ndWFnZTogZXMKKyUgVGVycml0b3J5OiBVUworJSBSZXZpc2lvbjogNC40CislIERhdGU6IDE5OTctMDMtMTgKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMuZHMKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiU3BhbmlzaCBsb2NhbGUgZm9yIHRoZSBVU0EiCitzb3VyY2UgICAgICJSQVAiCithZGRyZXNzICAgICJTYW5rdCBKPFUwMEY4PnJnZW5zIEFsbGUgOCwgREstMTYxNSBLPFUwMEY4PmJlbmhhdm4gViwgRGFubWFyayIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJTcGFuaXNoIgordGVycml0b3J5ICAiVVNBIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAiZXNfVVM6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZXNfVVM6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZXNfVVM6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJlc19VUzoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImVzX1VTOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZXNfVVM6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZXNfVVM6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZXNfVVM6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZXNfVVM6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJlc19VUzoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImVzX1VTOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCisKK2NvbGxhdGluZy1lbGVtZW50IDxDLUg+IGZyb20gIjxVMDA0Mz48VTAwNDg+IgorY29sbGF0aW5nLWVsZW1lbnQgPGMtaD4gZnJvbSAiPFUwMDYzPjxVMDA2OD4iCitjb2xsYXRpbmctZWxlbWVudCA8Qy1oPiBmcm9tICI8VTAwNDM+PFUwMDY4PiIKK2NvbGxhdGluZy1lbGVtZW50IDxjLUg+IGZyb20gIjxVMDA2Mz48VTAwNDg+IgorY29sbGF0aW5nLWVsZW1lbnQgPEwtTD4gZnJvbSAiPFUwMDRDPjxVMDA0Qz4iCitjb2xsYXRpbmctZWxlbWVudCA8bC1sPiBmcm9tICI8VTAwNkM+PFUwMDZDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxMLWw+IGZyb20gIjxVMDA0Qz48VTAwNkM+IgorY29sbGF0aW5nLWVsZW1lbnQgPGwtTD4gZnJvbSAiPFUwMDZDPjxVMDA0Qz4iCisKK2NvbGxhdGluZy1zeW1ib2wgPGNoPgorY29sbGF0aW5nLXN5bWJvbCA8bGw+Citjb2xsYXRpbmctc3ltYm9sIDxudGlsZGU+CisKK2NvbGxhdGluZy1zeW1ib2wgPENBUC1NSU4+Citjb2xsYXRpbmctc3ltYm9sIDxNSU4tQ0FQPgorCityZW9yZGVyLWFmdGVyIDxNSU4+Cis8TUlOLUNBUD4KKzxDQVAtTUlOPgorCityZW9yZGVyLWFmdGVyIDxuPgorPG50aWxkZT4KKworcmVvcmRlci1hZnRlciA8VTAwNkU+Cis8VTAwRjE+IDxudGlsZGU+OzxCQVM+OzxNSU4+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA0RT4KKzxVMDBEMT4gPG50aWxkZT47PEJBUz47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPGM+Cis8Y2g+CisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDYzPgorPGMtSD4JPGNoPjs8QkFTPjs8TUlOLUNBUD47SUdOT1JFCis8Yy1oPgk8Y2g+OzxCQVM+OzxNSU4+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA0Mz4gCis8Qy1IPgk8Y2g+OzxCQVM+OzxDQVA+O0lHTk9SRQorPEMtaD4JPGNoPjs8QkFTPjs8Q0FQLU1JTj47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPGw+Cis8bGw+CisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDZDPgorPGwtTD4JPGxsPjs8QkFTPjs8TUlOLUNBUD47SUdOT1JFCis8bC1sPgk8bGw+OzxCQVM+OzxNSU4+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA0Qz4gCis8TC1MPgk8bGw+OzxCQVM+OzxDQVA+O0lHTk9SRQorPEwtbD4JPGxsPjs8QkFTPjs8Q0FQLU1JTj47SUdOT1JFCisKK3Jlb3JkZXItZW5kCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJlc19FUyIKK0VORCBMQ19DVFlQRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNzM+PFUwMDUzPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgICAgIjxVMDA1NT48VTAwNTM+PFUwMDQ0PjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgICAiPFUwMDI0PiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgIDAKK25fY3NfcHJlY2VkZXMgICAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAgIDAKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJlbl9VUyIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPiI7IjxVMDA2Qz48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsiPFUwMDZEPjxVMDA2OT48VTAwRTk+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2NT4iOyI8VTAwNzY+PFUwMDY5PjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwRTE+PFUwMDYyPiIKK2RheSAgICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPjxVMDA2OT48VTAwNkU+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwNzU+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNzQ+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjk+PFUwMEU5PjxVMDA3Mj48VTAwNjM+PFUwMDZGPjxVMDA2Qz48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNjU+PFUwMDc2PjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNzY+PFUwMDY5PjxVMDA2NT48VTAwNzI+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMEUxPjxVMDA2Mj48VTAwNjE+PFUwMDY0PjxVMDA2Rj4iCithYm1vbiAgICI8VTAwNjU+PFUwMDZFPjxVMDA2NT4iOyI8VTAwNjY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2MT48VTAwNjI+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+IjsiPFUwMDZBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNjE+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA2Rj48VTAwNjM+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDY0PjxVMDA2OT48VTAwNjM+IgorbW9uICAgICAiPFUwMDY1PjxVMDA2RT48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Nj48VTAwNjU+PFUwMDYyPjxVMDA3Mj48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3QT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDYyPjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkU+PFUwMDY5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPjxVMDA2OT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDY3PjxVMDA2Rj48VTAwNzM+PFUwMDc0PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjk+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2Rj48VTAwNjM+PFUwMDc0PjxVMDA3NT48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PjxVMDA2OT48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDY0PjxVMDA2OT48VTAwNjM+PFUwMDY5PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAiIjsiIgordF9mbXRfYW1wbSAiIgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworTENfUEFQRVIKK2hlaWdodCAgIDI3OQord2lkdGggICAgMjE2CitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzMT4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCittZWFzdXJlbWVudCAgICAyCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjg+LworPFUwMDIwPjxVMDAyNT48VTAwNzM+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDU0PjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3QT48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X25hbWUgICI8VTAwNTU+PFUwMDUzPjxVMDA0MT4iCitjb3VudHJ5X3Bvc3QgICI8VTAwNTU+PFUwMDUzPjxVMDA0MT4iCitjb3VudHJ5X2FiMiAgICI8VTAwNTU+PFUwMDUzPiIKK2NvdW50cnlfYWIzICAgIjxVMDA1NT48VTAwNTM+PFUwMDQxPiIKK2NvdW50cnlfbnVtICAgODQwCitjb3VudHJ5X2NhciAgICI8VTAwNTU+PFUwMDUzPjxVMDA0MT4iCitjb3VudHJ5X2lzYm4gIDAKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lc19VWSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VzX1VZCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiN2VkMGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lc19VWQpAQCAtMCwwICsxLDE1OSBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIFNwYW5pc2ggbGFuZ3VhZ2UgbG9jYWxlIGZvciBVcnVndWF5CislIFNvdXJjZTogUkFQCislIEFkZHJlc3M6IFNhbmt0IEpvLy9yZ2VucyBBbGxlIDgKKyUgICAgREstMTYxNSBLby8vYmVuaGF2biBWLCBEYW5tYXJrCislIENvbnRhY3Q6IEtlbGQgU2ltb25zZW4KKyUgRW1haWw6IEtlbGQuU2ltb25zZW5AZGt1dWcuZGsKKyUgVGVsOiArNDUgLSAzMTIyNjU0MworJSBGYXg6ICs0NSAtIDMzMjU2NTQzCislIExhbmd1YWdlOiBlcworJSBUZXJyaXRvcnk6IFVZCislIFJldmlzaW9uOiA0LjQKKyUgRGF0ZTogMTk5Ny0xMS0wNQorJSBBcHBsaWNhdGlvbjogZ2VuZXJhbAorJSBVc2VyczogZ2VuZXJhbAorJSBSZXBlcnRvaXJlbWFwOiBtbmVtb25pYy5kcworJSBDaGFyc2V0OiBJU08tODg1OS0xCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJTcGFuaXNoIGxvY2FsZSBmb3IgVXJ1Z3VheSIKK3NvdXJjZSAgICAgIlJBUCIKK2FkZHJlc3MgICAgIlNhbmt0IEo8VTAwRjg+cmdlbnMgQWxsZSA4LCBESy0xNjE1IEs8VTAwRjg+YmVuaGF2biBWLCBEYW5tYXJrIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIlNwYW5pc2giCit0ZXJyaXRvcnkgICJVcnVndWF5IgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAiZXNfVVk6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZXNfVVk6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZXNfVVk6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJlc19VWToyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImVzX1VZOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZXNfVVk6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZXNfVVk6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZXNfVVk6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZXNfVVk6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJlc19VWToyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImVzX1VZOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ09MTEFURQorY29weSAiZXNfRVMiCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAiZXNfRVMiCitFTkQgTENfQ1RZUEUKKworTENfTUVTU0FHRVMKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDczPjxVMDA1Mz48VTAwNzk+PFUwMDU5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgICI8VTAwNTU+PFUwMDU5PjxVMDA1NT48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgIjxVMDAyND4iCittb25fZGVjaW1hbF9wb2ludCAgICAiPFUwMDJDPiIKK21vbl90aG91c2FuZHNfc2VwICAgICI8VTAwMkU+IgorbW9uX2dyb3VwaW5nICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAxCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludCAgICAgICAgIjxVMDAyQz4iCit0aG91c2FuZHNfc2VwICAgICAgICAiIgorZ3JvdXBpbmcgICAgICAgICAgICAgMDswCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICI8VTAwNjQ+PFUwMDZGPjxVMDA2RD4iOyI8VTAwNkM+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2RD48VTAwNjk+PFUwMEU5PiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNjU+IjsiPFUwMDc2PjxVMDA2OT48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMEUxPjxVMDA2Mj4iCitkYXkgICAgICI8VTAwNjQ+PFUwMDZGPjxVMDA2RD48VTAwNjk+PFUwMDZFPjxVMDA2Nz48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNkM+PFUwMDc1PjxVMDA2RT48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMDc0PjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDY5PjxVMDBFOT48VTAwNzI+PFUwMDYzPjxVMDA2Rj48VTAwNkM+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDY1PjxVMDA3Nj48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDc2PjxVMDA2OT48VTAwNjU+PFUwMDcyPjxVMDA2RT48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDczPjxVMDBFMT48VTAwNjI+PFUwMDYxPjxVMDA2ND48VTAwNkY+IgorYWJtb24gICAiPFUwMDY1PjxVMDA2RT48VTAwNjU+IjsiPFUwMDY2PjxVMDA2NT48VTAwNjI+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNjE+PFUwMDYyPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDc5PiI7IjxVMDA2QT48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkM+IjsiPFUwMDYxPjxVMDA2Nz48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD4iOyI8VTAwNkY+PFUwMDYzPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PiI7IjxVMDA2ND48VTAwNjk+PFUwMDYzPiIKK21vbiAgICAgIjxVMDA2NT48VTAwNkU+PFUwMDY1PjxVMDA3Mj48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjY+PFUwMDY1PjxVMDA2Mj48VTAwNzI+PFUwMDY1PjxVMDA3Mj48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwN0E+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA2Mj48VTAwNzI+PFUwMDY5PjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDc5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZFPjxVMDA2OT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Qz48VTAwNjk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA2Nz48VTAwNkY+PFUwMDczPjxVMDA3ND48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY5PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkY+PFUwMDYzPjxVMDA3ND48VTAwNzU+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA3Nj48VTAwNjk+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwNjk+PFUwMDYzPjxVMDA2OT48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiIKK2RfdF9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA3OT4iCit0X2ZtdCAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgIiI7IiIKK3RfZm10X2FtcG0gIiIKK2RhdGVfZm10CSI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCislIEZJWE1FCitoZWlnaHQgICAyOTcKKyUgRklYTUUKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzU+PFUwMDM5PjxVMDAzOD4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCislIEZJWE1FCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICAgIjxVMDA1NT48VTAwNTk+IgorY291bnRyeV9hYjMgICAiPFUwMDU1PjxVMDA1Mj48VTAwNTk+IgorY291bnRyeV9udW0gICA4NTgKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lc19WRSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2VzX1ZFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZTkxNmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9lc19WRQpAQCAtMCwwICsxLDE2MCBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIFNwYW5pc2ggbGFuZ3VhZ2UgbG9jYWxlIGZvciBWZW5lenVlbGEKKyUgU291cmNlOiBSQVAKKyUgQWRkcmVzczogU2Fua3QgSm8vL3JnZW5zIEFsbGUgOAorJSAgICBESy0xNjE1IEtvLy9iZW5oYXZuIFYsIERhbm1hcmsKKyUgQ29udGFjdDogS2VsZCBTaW1vbnNlbgorJSBFbWFpbDogS2VsZC5TaW1vbnNlbkBka3V1Zy5kaworJSBUZWw6ICs0NSAtIDMxMjI2NTQzCislIEZheDogKzQ1IC0gMzMyNTY1NDMKKyUgTGFuZ3VhZ2U6IGVzCislIFRlcnJpdG9yeTogVkUKKyUgUmV2aXNpb246IDQuNAorJSBEYXRlOiAxOTk3LTExLTA1CislIEFwcGxpY2F0aW9uOiBnZW5lcmFsCislIFVzZXJzOiBnZW5lcmFsCislIFJlcGVydG9pcmVtYXA6IG1uZW1vbmljLmRzCislIENoYXJzZXQ6IElTTy04ODU5LTEKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlNwYW5pc2ggbG9jYWxlIGZvciBWZW5lenVlbGEiCitzb3VyY2UgICAgICJSQVAiCithZGRyZXNzICAgICJTYW5rdCBKPFUwMEY4PnJnZW5zIEFsbGUgOCwgREstMTYxNSBLPFUwMEY4PmJlbmhhdm4gViwgRGFubWFyayIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJTcGFuaXNoIgordGVycml0b3J5ICAiVmVuZXp1ZWxhIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAiZXNfVkU6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZXNfVkU6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZXNfVkU6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJlc19WRToyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImVzX1ZFOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZXNfVkU6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZXNfVkU6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZXNfVkU6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZXNfVkU6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJlc19WRToyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImVzX1ZFOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ09MTEFURQorY29weSAiZXNfRVMiCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAiZXNfRVMiCitFTkQgTENfQ1RZUEUKKworTENfTUVTU0FHRVMKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDczPjxVMDA1Mz48VTAwNzk+PFUwMDU5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgICI8VTAwNTY+PFUwMDQ1PjxVMDA0Mj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgIjxVMDA0Mj48VTAwNzM+PFUwMDJFPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICI8VTAwMkM+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgIjxVMDAyRT4iCittb25fZ3JvdXBpbmcgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICIiCitncm91cGluZyAgICAgICAgICAgICAwOzAKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPiI7IjxVMDA2Qz48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsiPFUwMDZEPjxVMDA2OT48VTAwRTk+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2NT4iOyI8VTAwNzY+PFUwMDY5PjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwRTE+PFUwMDYyPiIKK2RheSAgICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPjxVMDA2OT48VTAwNkU+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwNzU+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNzQ+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjk+PFUwMEU5PjxVMDA3Mj48VTAwNjM+PFUwMDZGPjxVMDA2Qz48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNjU+PFUwMDc2PjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNzY+PFUwMDY5PjxVMDA2NT48VTAwNzI+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMEUxPjxVMDA2Mj48VTAwNjE+PFUwMDY0PjxVMDA2Rj4iCithYm1vbiAgICI8VTAwNjU+PFUwMDZFPjxVMDA2NT4iOyI8VTAwNjY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2MT48VTAwNjI+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+IjsiPFUwMDZBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNjE+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA2Rj48VTAwNjM+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDY0PjxVMDA2OT48VTAwNjM+IgorbW9uICAgICAiPFUwMDY1PjxVMDA2RT48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Nj48VTAwNjU+PFUwMDYyPjxVMDA3Mj48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3QT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDYyPjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkU+PFUwMDY5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPjxVMDA2OT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDY3PjxVMDA2Rj48VTAwNzM+PFUwMDc0PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjk+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2Rj48VTAwNjM+PFUwMDc0PjxVMDA3NT48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PjxVMDA2OT48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDY0PjxVMDA2OT48VTAwNjM+PFUwMDY5PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAiPFUwMDYxPjxVMDA2RD4iOyI8VTAwNzA+PFUwMDZEPiIKK3RfZm10X2FtcG0gIjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNzA+IgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworTENfUEFQRVIKKyUgRklYTUUKK2hlaWdodCAgIDI5NworJSBGSVhNRQord2lkdGggICAgMjEwCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzNT48VTAwMzg+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorJSBGSVhNRQorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAgICI8VTAwNTY+PFUwMDQ1PiIKK2NvdW50cnlfYWIzICAgIjxVMDA1Nj48VTAwNDU+PFUwMDRFPiIKK2NvdW50cnlfbnVtICAgODYyCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZXRfRUUgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ldF9FRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGJmY2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZXRfRUUKQEAgLTAsMCArMSwyMjUyIEBACitlc2NhcGVfY2hhciAgLworY29tbWVudF9jaGFyICUKKworJSBFc3RvbmlhbiBsYW5ndWFnZSBsb2NhbGUgZm9yIEVzdG9uaWEKKyUgYWNjb3JkaW5nIHRvIEVWUyA4OjE5OTMKKyUgU291cmNlOiBFc3RvbmlhbiBJbmZvcm1hdGljcyBGdW5kCislIEFkZHJlc3M6IFRvLW5pc21hOmdpIDgsIFRhbGxpbm4KKyUgICAgIEVFMDEwMCBFc3RvbmlhCislIFRlbDogKzM3MiAtIDIgLSA2ODEwMTIKKyUgRmF4OiArMzcyIC0gMiAtIDY4MTAxMgorJSBDb250YWN0OiBUaWl0IFRhbW1pc3RlCislIEVtYWlsOiB0aWl0QGVpZi5lZQorJSBMYW5ndWFnZTogZXQKKyUgdGVycml0b3J5OiBFRQorJSBSZXZpc2lvbjogNC4zCislIERhdGU6IDE5OTYtMTAtMTUKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMuZHMKKyUgQ2hhcnNldDogSVNPLTg4NTktMTUKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworJSB0aGVyZSBhcmUgICBzIGFuZCBzPCBkaWZmZXJlbnQgYWxwaGE7CislIHogYW5kIHogd2l0aCBkaWFjcml0aWNzIGFmdGVyIHMKKyUgaW4gRXN0b25pYW4KKyUgdGhlcmUgYXJlIHY9dyBhbmQKKyUgbz8sIGE6LCBvOiwgdTogYWZ0ZXIgdyBpbiBFc3RvbmlhbgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiRXN0b25pYW4gbG9jYWxlIGZvciBFc3RvbmlhIgorc291cmNlICAgICAiRXN0b25pYW4gSW5mb3JtYXRpY3MgRnVuZCIKK2FkZHJlc3MgICAgIlRvLW5pc21hOmdpIDgsIFRhbGxpbm4sIEVFMDEwMCBFc3RvbmlhIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkVzdG9uaWFuIgordGVycml0b3J5ICAiRXN0b25pYSIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjkiCislCitjYXRlZ29yeSAgImV0X0VFOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImV0X0VFOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImV0X0VFOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiZXRfRUU6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJldF9FRToyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImV0X0VFOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImV0X0VFOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImV0X0VFOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImV0X0VFOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiZXRfRUU6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJldF9FRToyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKKworJSBCYXNlIGNvbGxhdGlvbiBzY2hlbWU6IDE5OTQtMDMtMjIKKworJSBPcmRlcmluZyBhbGdvcml0aG06CislICAxLiBTcGFjZXMgYW5kIGh5cGhlbiAoYnV0IG5vdCBzb2Z0CislICAgICBoeXBoZW4pIGJlZm9yZSBwdW5jdHVhdGlvbgorJSAgICAgY2hhcmFjdGVycywgcHVuY3R1YXRpb24gY2hhcmFjdGVycworJSAgICAgYmVmb3JlIG51bWJlcnMsCislICAgICBudW1iZXJzIGJlZm9yZSBsZXR0ZXJzLgorJSAgMi4gTGV0dGVycyB3aXRoIGRpYWNyaXRpY2FsIG1hcmtzIGFyZQorJSAgICAgbWVtYmVycyBvZiBlcXVpdmFsZW5jZSBjbGFzc2VzCislICAzLiBBIGRpc3RpbmN0aW9uIGlzIG1hZGUgd2l0aCByZWdhcmRzCislICAgICB0byBjYXNlIGFzIG5vdGVkIGJlbG93LgorJSAgNC4gU3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSBpZ25vcmVkCislICAgICB3aGVuIGNvbXBhcmluZyBsZXR0ZXJzLCBidXQgdGhlbgorJSAgICAgdGhleSBhcmUgY29uc2lkZXJlZAorJSAgNS4gVGhlIGFscGhhYmV0cyBhcmUgc29ydGVkIGluIG9yZGVyCislICAgICBvZiBmaXJzdCBhcHBlYXJhbmNlIGluIElTTyAxMDY0NjoKKyUgICAgIExhdGluLCBHcmVlaywgQ3lyaWxsaWMsIGV0Yy4KKyUKKyUgQWNjb3JkaW5nIHRvIEdyZWVrIHNwZWNpZmljYXRpb25zLAorJSB0aGUgc3RlcHMgMi4gYW5kIDMuIGFib3ZlIGFyZSByZXZlcnNlZAorJSBmb3IgdGhlIEdyZWVrIHNjcmlwdAorCislIGNvbGxhdGluZyBzeW1ib2xzCisKKyUgVGhlIGNvbGxhdGluZyBzeW1ib2wgbmFtaW5nIGlzCislIG1vc3RseSB0YWtlbiBmcm9tIElTTyAxMDY0Ni0xLAorJSBmb3IgZXhhbXBsZSB0aGUgY2FzZSBhbmQgYWNjZW50CislIG5hbWVzIGFyZSBmcm9tIHRoaXMgc3RhbmRhcmQuCisKK2NvbGxhdGluZy1zeW1ib2wgPENBUElUQUw+Citjb2xsYXRpbmctc3ltYm9sIDxDQVBJVEFMLVNNQUxMPgorY29sbGF0aW5nLXN5bWJvbCA8U01BTEwtQ0FQSVRBTD4KK2NvbGxhdGluZy1zeW1ib2wgPFNNQUxMPgorCislIDxDQVBJVEFMLVNNQUxMPiBhbmQgPFNNQUxMLUNBUElUQUw+CislIGFyZSBmb3IgY2FzZXMgbGlrZSBEYW5pc2ggPFUwMDQxPjxVMDA2MT4KKyUgYW5kIFNwYW5pc2ggPFUwMDQzPjxVMDA2OD4gYmVpbmcgdHJlYXRlZAorJSBhcyBvbmUgbGV0dGVyLgorCislIFRoZSA8YTg+IC4uLi4uLiA8ejg+IGNvbGxhdGluZworJSBzeW1ib2xzIGhhdmUgZGVmaW5lZCB3ZWlnaHRzIGFzCislIHRoZSBsYXN0IGNoYXJhY3RlciBpbiBhIGdyb3VwIG9mCislIExhdGluIGxldHRlcnMuIFRoZXkgYXJlIHVzZWQKKyUgdG8gc3BlY2lmeSBkZWx0YXMgYnkgbG9jYWxlcyB1c2luZworJSBhIGxvY2FsZSBhcyB0aGUgZGVmYXVsdCBvcmRlcmluZworJSBhbmQgYnkgInJlcGxhY2UtYWZ0ZXIiIHN0YXRlbWVudHMKKyUgc3BlY2lmeWluZyB0aGUgY2hhbmdlZCBwbGFjZW1lbnQKKyUgaW4gYW4gb3JkZXJpbmcgb2YgYSBjaGFyYWN0ZXIuCisKK2NvbGxhdGluZy1zeW1ib2wgPGE4PgorY29sbGF0aW5nLXN5bWJvbCA8Yjg+Citjb2xsYXRpbmctc3ltYm9sIDxjOD4KK2NvbGxhdGluZy1zeW1ib2wgPGQ4PgorY29sbGF0aW5nLXN5bWJvbCA8ZTg+Citjb2xsYXRpbmctc3ltYm9sIDxmOD4KK2NvbGxhdGluZy1zeW1ib2wgPGc4PgorY29sbGF0aW5nLXN5bWJvbCA8aDg+Citjb2xsYXRpbmctc3ltYm9sIDxpOD4KK2NvbGxhdGluZy1zeW1ib2wgPGo4PgorY29sbGF0aW5nLXN5bWJvbCA8azg+Citjb2xsYXRpbmctc3ltYm9sIDxsOD4KK2NvbGxhdGluZy1zeW1ib2wgPG04PgorY29sbGF0aW5nLXN5bWJvbCA8bjg+Citjb2xsYXRpbmctc3ltYm9sIDxvOD4KK2NvbGxhdGluZy1zeW1ib2wgPHA4PgorY29sbGF0aW5nLXN5bWJvbCA8cTg+Citjb2xsYXRpbmctc3ltYm9sIDxyOD4KK2NvbGxhdGluZy1zeW1ib2wgPHM4PgorY29sbGF0aW5nLXN5bWJvbCA8dDg+Citjb2xsYXRpbmctc3ltYm9sIDx1OD4KK2NvbGxhdGluZy1zeW1ib2wgPHY4PgorY29sbGF0aW5nLXN5bWJvbCA8dzg+Citjb2xsYXRpbmctc3ltYm9sIDx4OD4KK2NvbGxhdGluZy1zeW1ib2wgPHk4PgorY29sbGF0aW5nLXN5bWJvbCA8ejg+CisKK2NvbGxhdGluZy1zeW1ib2wgPE5PTkU+Citjb2xsYXRpbmctc3ltYm9sIDxBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPEFDVVRFK0RPVD4KK2NvbGxhdGluZy1zeW1ib2wgPEdSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8RE9VQkxFLUdSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkU+Citjb2xsYXRpbmctc3ltYm9sIDxCUkVWRStBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFK0dSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkUrTUFDUk9OPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkUrSE9PSz4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFK1RJTERFPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkUrRE9ULUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkUtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxJTlZFUlRFRC1CUkVWRT4KK2NvbGxhdGluZy1zeW1ib2wgPENJUkNVTUZMRVg+Citjb2xsYXRpbmctc3ltYm9sIDxDSVJDVU1GTEVYK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8Q0lSQ1VNRkxFWCtHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPENJUkNVTUZMRVgrSE9PSz4KK2NvbGxhdGluZy1zeW1ib2wgPENJUkNVTUZMRVgrVElMREU+Citjb2xsYXRpbmctc3ltYm9sIDxDSVJDVU1GTEVYK0RPVC1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPENBUk9OPgorY29sbGF0aW5nLXN5bWJvbCA8Q0FST04rRElBRVJFU0lTPgorY29sbGF0aW5nLXN5bWJvbCA8Q0FST04rRE9UPgorY29sbGF0aW5nLXN5bWJvbCA8UklORz4KK2NvbGxhdGluZy1zeW1ib2wgPFJJTkcrQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxSSU5HLUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8RElBRVJFU0lTPgorY29sbGF0aW5nLXN5bWJvbCA8RElBRVJFU0lTK01BQ1JPTj4KK2NvbGxhdGluZy1zeW1ib2wgPERJQUVSRVNJUytBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPERJQUVSRVNJUytHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPERJQUVSRVNJUytDQVJPTj4KK2NvbGxhdGluZy1zeW1ib2wgPERPVUJMRS1BQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPEhPT0s+Citjb2xsYXRpbmctc3ltYm9sIDxUSUxERT4KK2NvbGxhdGluZy1zeW1ib2wgPFRJTERFK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8VElMREUrRElBRVJFU0lTPgorY29sbGF0aW5nLXN5bWJvbCA8VElMREUtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxET1Q+Citjb2xsYXRpbmctc3ltYm9sIDxET1QtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxET1QrRE9ULUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8U1RST0tFPgorY29sbGF0aW5nLXN5bWJvbCA8U1RST0tFK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8Q0VESUxMQT4KK2NvbGxhdGluZy1zeW1ib2wgPENFRElMTEErQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxDRURJTExBK0dSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8Q0VESUxMQStCUkVWRT4KK2NvbGxhdGluZy1zeW1ib2wgPE9HT05FSz4KK2NvbGxhdGluZy1zeW1ib2wgPE9HT05FSytNQUNST04+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04rQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04rR1JBVkU+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04rRElBRVJFU0lTPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0RJQUVSRVNJUy1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPE1BQ1JPTitET1Q+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04rRE9ULUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0NJUkNVTUZMRVg+Citjb2xsYXRpbmctc3ltYm9sIDxMSU5FLUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8SE9STj4KK2NvbGxhdGluZy1zeW1ib2wgPEhPUk4rQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxIT1JOK0dSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8SE9STitIT09LPgorY29sbGF0aW5nLXN5bWJvbCA8SE9STitUSUxERT4KK2NvbGxhdGluZy1zeW1ib2wgPEhPUk4rRE9ULUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8UFJFQ0VERUQtQlktQVBPU1RST1BIRT4KK2NvbGxhdGluZy1zeW1ib2wgPEdSRUVLPgorY29sbGF0aW5nLXN5bWJvbCA8VE9OT1M+Citjb2xsYXRpbmctc3ltYm9sIDxESUFMWVRJQ0E+Citjb2xsYXRpbmctc3ltYm9sIDxESUFMWVRJQ0ErVE9OT1M+Citjb2xsYXRpbmctc3ltYm9sIDxDWVJJTExJQz4KK2NvbGxhdGluZy1zeW1ib2wgPEhJUkFHQU5BPgorY29sbGF0aW5nLXN5bWJvbCA8S0FUQUtBTkE+Citjb2xsYXRpbmctc3ltYm9sIDxTUEVDSUFMPgorCislIGxldHRlcjthY2NlbnQ7Y2FzZTtzcGVjaWFscworCitvcmRlcl9zdGFydCBmb3J3YXJkO2JhY2t3YXJkLworICAgICAgICAgICAgO2ZvcndhcmQ7cG9zaXRpb24KKworJSA8Q0FQSVRBTD4gb3IgPFNNQUxMPiBsZXR0ZXJzIGZpcnN0OgorCis8Q0FQSVRBTD4KKzxDQVBJVEFMLVNNQUxMPgorPFNNQUxMLUNBUElUQUw+Cis8U01BTEw+CisKKyUgQWNjZW50czoKKworPE5PTkU+Cis8QUNVVEU+Cis8QUNVVEUrRE9UPgorPEdSQVZFPgorPERPVUJMRS1HUkFWRT4KKzxCUkVWRT4KKzxCUkVWRStBQ1VURT4KKzxCUkVWRStHUkFWRT4KKzxCUkVWRStNQUNST04+Cis8QlJFVkUrSE9PSz4KKzxCUkVWRStUSUxERT4KKzxCUkVWRStET1QtQkVMT1c+Cis8QlJFVkUtQkVMT1c+Cis8SU5WRVJURUQtQlJFVkU+Cis8Q0lSQ1VNRkxFWD4KKzxDSVJDVU1GTEVYK0FDVVRFPgorPENJUkNVTUZMRVgrR1JBVkU+Cis8Q0lSQ1VNRkxFWCtIT09LPgorPENJUkNVTUZMRVgrVElMREU+Cis8Q0lSQ1VNRkxFWCtET1QtQkVMT1c+Cis8Q0FST04+Cis8Q0FST04rRElBRVJFU0lTPgorPENBUk9OK0RPVD4KKzxSSU5HPgorPFJJTkcrQUNVVEU+Cis8UklORy1CRUxPVz4KKzxESUFFUkVTSVM+Cis8RElBRVJFU0lTK01BQ1JPTj4KKzxESUFFUkVTSVMrQUNVVEU+Cis8RElBRVJFU0lTK0dSQVZFPgorPERJQUVSRVNJUytDQVJPTj4KKzxET1VCTEUtQUNVVEU+Cis8SE9PSz4KKzxUSUxERT4KKzxUSUxERStBQ1VURT4KKzxUSUxERStESUFFUkVTSVM+Cis8VElMREUtQkVMT1c+Cis8RE9UPgorPERPVC1CRUxPVz4KKzxET1QrRE9ULUJFTE9XPgorPFNUUk9LRT4KKzxTVFJPS0UrQUNVVEU+Cis8Q0VESUxMQT4KKzxDRURJTExBK0FDVVRFPgorPENFRElMTEErR1JBVkU+Cis8Q0VESUxMQStCUkVWRT4KKzxPR09ORUs+Cis8T0dPTkVLK01BQ1JPTj4KKzxNQUNST04+Cis8TUFDUk9OK0FDVVRFPgorPE1BQ1JPTitHUkFWRT4KKzxNQUNST04rRElBRVJFU0lTPgorPE1BQ1JPTitESUFFUkVTSVMtQkVMT1c+Cis8TUFDUk9OK0RPVD4KKzxNQUNST04rRE9ULUJFTE9XPgorPE1BQ1JPTitDSVJDVU1GTEVYPgorPExJTkUtQkVMT1c+Cis8SE9STj4KKzxIT1JOK0FDVVRFPgorPEhPUk4rR1JBVkU+Cis8SE9STitIT09LPgorPEhPUk4rVElMREU+Cis8SE9STitET1QtQkVMT1c+Cis8UFJFQ0VERUQtQlktQVBPU1RST1BIRT4KKzxHUkVFSz4KKzxUT05PUz4KKzxESUFMWVRJQ0E+Cis8RElBTFlUSUNBK1RPTk9TPgorPENZUklMTElDPgorPEhJUkFHQU5BPgorPEtBVEFLQU5BPgorPFNQRUNJQUw+CisKKzxVMDBBMD4JPFUwMEEwPjs8VTAwQTA+OzxVMDBBMD47SUdOT1JFCis8VTAwMjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyMD4KKzxVMDAwOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA5PgorPFUwMDBCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMEI+Cis8VTAwMEQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwRD4KKzxVMDAwQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBBPgorPFUwMDBDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMEM+Cis8VTAwNUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA1Rj4KKzxVMDBBRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEFGPgorPFUwMEFEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQUQ+Cis8VTAwMkQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyRD4KKzxVMDAyQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDJDPgorPFUwMDNCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwM0I+Cis8VTAwM0E+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAzQT4KKzxVMDAyMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDIxPgorPFUwMEExPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTE+Cis8VTAwM0Y+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAzRj4KKzxVMDBCRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEJGPgorPFUwMDJGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMkY+Cis8VTAwMkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyRT4KKzxVMDBCND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEI0PgorPFUwMDYwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNjA+Cis8VTAwNUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA1RT4KKzxVMDBBOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEE4PgorPFUwMDdFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwN0U+Cis8VTAwQjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCNz4KKzxVMDBCOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEI4PgorPFUwMDI3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjc+Cis8VTIwMTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxOD4KKzxVMjAxOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDE5PgorPFUwMDIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjI+Cis8VTIwMUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxQz4KKzxVMjAxRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDFEPgorPFUwMEFCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQUI+Cis8VTAwQkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCQj4KKzxVMDAyOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDI4PgorPFUyMDdEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwN0Q+Cis8VTAwMjk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyOT4KKzxVMjA3RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDdFPgorPFUwMDVCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNUI+Cis8VTAwNUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA1RD4KKzxVMDA3Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDdCPgorPFUwMDdEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwN0Q+Cis8VTAwQTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBNz4KKzxVMDBCNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEI2PgorPFUwMEE5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTk+Cis8VTAwQUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBRT4KKzxVMDA0MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDQwPgorPFUwMEE0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTQ+Cis8VTAwQTI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBMj4KKzxVMDAyND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDI0PgorPFUwMEEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTM+Cis8VTAwQTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBNT4KKzxVMDAyQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDJBPgorPFUwMDVDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNUM+Cis8VTAwMjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyNj4KKzxVMDAyMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDIzPgorPFUwMDI1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjU+Cis8VTIwN0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA3Qj4KKzxVMDAyQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDJCPgorPFUyMDdBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwN0E+Cis8VTAwQjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCMT4KKzxVMDBGNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEY3PgorPFUwMEQ3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwRDc+Cis8VTIyNjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2MD4KKzxVMDAzQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDNDPgorPFUyMjY0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNjQ+Cis8VTAwM0Q+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAzRD4KKzxVMjI2NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjY1PgorPFUwMDNFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwM0U+Cis8VTAwQUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBQz4KKzxVMDA3Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDdDPgorPFUwMEE2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTY+Cis8VTAwQjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCMD4KKzxVMDBCNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEI1PgorPFUwMkM3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAyQzc+Cis8VTAyRDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDJEOD4KKzxVMDJEOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkQ5PgorPFUwMkRBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAyREE+Cis8VTAyREI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDJEQj4KKzxVMDJEQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkRDPgorPFUwMkREPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAyREQ+Cis8VTAzNzQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDM3ND4KKzxVMDM3NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzc1PgorPFUwMzdBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzN0E+Cis8VTAzN0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDM3RT4KKzxVMDM4ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzg0PgorPFUwMzg1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzODU+Cis8VTAzODc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDM4Nz4KKzxVMDNEMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwM0QwPgorPFUxRkJGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGQkY+Cis8VTFGQzA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZDMD4KKzxVMUZDMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkMxPgorPFUxRkNEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGQ0Q+Cis8VTFGQ0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZDRT4KKzxVMUZDRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkNGPgorPFUxRkREPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGREQ+Cis8VTFGREU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZERT4KKzxVMUZERj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkRGPgorPFUxRkVEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGRUQ+Cis8VTFGRUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZFRj4KKzxVMUZGRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkZFPgorPFUyMDAyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMDI+Cis8VTIwMDM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwMz4KKzxVMjAwND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDA0PgorPFUyMDA1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMDU+Cis8VTIwMDY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwNj4KKzxVMjAwRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDBFPgorPFUyMDBGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMEY+Cis8VTIwMDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwOT4KKzxVMjAwQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDBBPgorPFUyMDEwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTA+Cis8VTIwMTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxMz4KKzxVMjAxND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDE0PgorPFUyMDE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTU+Cis8VTIwMTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxNj4KKzxVMjAxNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDE3PgorPFUyMDFBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMUE+Cis8VTIwMUI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxQj4KKzxVMjAxRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDFFPgorPFUyMDFGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMUY+Cis8VTIwMjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAyMD4KKzxVMjAyMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDIxPgorPFUyMjE5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMTk+Cis8VTIwMjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAyNT4KKzxVMjAyNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDI2PgorPFUyMDMwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzA+Cis8VTIwMzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzMj4KKzxVMjAzMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDMzPgorPFUyMDM0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzQ+Cis8VTIwMzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzNT4KKzxVMjAzNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDM2PgorPFUyMDM3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzc+Cis8VTIwMzg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzOD4KKzxVMjAzOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDM5PgorPFUyMDNBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwM0E+Cis8VTIwM0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzQj4KKzxVMjAzQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDNDPgorPFUyMDNFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwM0U+Cis8VTIwN0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA3Qz4KKzxVMjA4MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDgwPgorPFUyMDgxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODE+Cis8VTIwODI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4Mj4KKzxVMjA4Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDgzPgorPFUyMDg0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODQ+Cis8VTIwODU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4NT4KKzxVMjA4Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDg2PgorPFUyMDg3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODc+Cis8VTIwODg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4OD4KKzxVMjA4OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDg5PgorPFUyMDhBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwOEE+Cis8VTIwOEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4Qj4KKzxVMjA4Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDhDPgorPFUyMDhEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwOEQ+Cis8VTIwOEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4RT4KKzxVMjBBMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMEEzPgorPFUyMEE0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwQTQ+Cis8VTIwQTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjBBNz4KKzxVMjBBOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMEE5PgorPFUyMTAzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMDM+Cis8VTIxMDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjEwNT4KKzxVMjEwOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTA5PgorPFUyMTE2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMTY+Cis8VTIxMTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjExNz4KKzxVMjExRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTFFPgorPFUyMTIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMjA+Cis8VTIxMjI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjEyMj4KKzxVMjEyNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTI2PgorPFUyMTJCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMkI+Cis8VTIxNTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1Mz4KKzxVMjE1ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTU0PgorPFUyMTU1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTU+Cis8VTIxNTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1Nj4KKzxVMjE1Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTU3PgorPFUyMTU4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTg+Cis8VTIxNTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1OT4KKzxVMjE1QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTVBPgorPFUyMTYwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjA+Cis8VTIxNjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2MT4KKzxVMjE2Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTYyPgorPFUyMTYzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjM+Cis8VTIxNjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2ND4KKzxVMjE2NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTY1PgorPFUyMTY2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjY+Cis8VTIxNjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2Nz4KKzxVMjE2OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTY4PgorPFUyMTY5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjk+Cis8VTIxNkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2QT4KKzxVMjE2Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTZCPgorPFUyMTZDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNkM+Cis8VTIxNkQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2RD4KKzxVMjE2RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTZFPgorPFUyMTZGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNkY+Cis8VTIxNzA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3MD4KKzxVMjE3MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTcxPgorPFUyMTcyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzI+Cis8VTIxNzM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3Mz4KKzxVMjE3ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTc0PgorPFUyMTc1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzU+Cis8VTIxNzY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3Nj4KKzxVMjE3Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTc3PgorPFUyMTc4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzg+Cis8VTIxNzk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3OT4KKzxVMjE3QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTdBPgorPFUyMTdCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxN0I+Cis8VTIxN0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3Qz4KKzxVMjE3RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTdEPgorPFUyMTdFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxN0U+Cis8VTIxN0Y+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3Rj4KKzxVMjE4MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTgwPgorPFUyMTgxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxODE+Cis8VTIxODI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE4Mj4KKzxVMjE5MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTkxPgorPFUyMTkzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxOTM+Cis8VTIxOTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5ND4KKzxVMjE5NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTk1PgorPFUyMTk2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxOTY+Cis8VTIxOTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5Nz4KKzxVMjE5OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTk4PgorPFUyMTk5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxOTk+Cis8VTIxQTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjFBOD4KKzxVMjFDMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMUMwPgorPFUyMUQwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxRDA+Cis8VTIxRDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjFEMj4KKzxVMjFEND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMUQ0PgorPFUyMjAwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMDA+Cis8VTIyMDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwMj4KKzxVMjIwMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjAzPgorPFUyMjA1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMDU+Cis8VTIyMDY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwNj4KKzxVMjIwNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjA3PgorPFUyMjA4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMDg+Cis8VTIyMEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwQj4KKzxVMjIwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjBGPgorPFUyMjExPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMTE+Cis8VTIyMTI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxMj4KKzxVMjIxMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjEzPgorPFUyMjE0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMTQ+Cis8VTIwNDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA0ND4KKzxVMjIxNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjE3PgorPFUyMjE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMTg+Cis8VTIwMjI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAyMj4KKzxVMjIxQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjFBPgorPFUyMjFEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMUQ+Cis8VTIyMUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxRT4KKzxVMjIxRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjFGPgorPFUyMjIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMjA+Cis8VTIyMjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyNT4KKzxVMjIyNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjI3PgorPFUyMjI4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMjg+Cis8VTIyMjk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyOT4KKzxVMjIyQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjJBPgorPFUyMjJCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMkI+Cis8VTIyMkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyQz4KKzxVMjIyRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjJFPgorPFUyMjM0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMzQ+Cis8VTIyMzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIzNT4KKzxVMjIzNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjM2PgorPFUyMjM3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMzc+Cis8VTIyM0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIzQz4KKzxVMjIzRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjNFPgorPFUyMjQzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNDM+Cis8VTIyNDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI0NT4KKzxVMjI0OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjQ4PgorPFUyMjRDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNEM+Cis8VTIyNTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI1Mz4KKzxVMjI2MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjYxPgorPFUyMjZBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNkE+Cis8VTIyNkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2Qj4KKzxVMjI2RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjZFPgorPFUyMjZGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNkY+Cis8VTIyODI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI4Mj4KKzxVMjI4Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjgzPgorPFUyMjg2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyODY+Cis8VTIyODc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI4Nz4KKzxVMjI5OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjk5PgorPFUyMjlBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyOUE+Cis8VTIyQTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjJBNT4KKzxVMjJDNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMkM1PgorPFUyMkVFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyRUU+Cis8VTIzMDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMwMj4KKzxVMjMwOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzA4PgorPFUyMzA5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMDk+Cis8VTIzMEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMwQT4KKzxVMjMwQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzBCPgorPFUyMzEwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMTA+Cis8VTIzMTI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMxMj4KKzxVMjMxNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzE1PgorPFUyMzIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMjA+Cis8VTIzMjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMyMT4KKzxVMjQyMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDIzPgorPFUyNDQwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDA+Cis8VTI0NDE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ0MT4KKzxVMjQ0Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQyPgorPFUyNDQzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDM+Cis8VTI0NDY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ0Nj4KKzxVMjQ0Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQ3PgorPFUyNDQ4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDg+Cis8VTI0NDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ0OT4KKzxVMjQ2MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDYwPgorPFUyNDYxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NjE+Cis8VTI0NjI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Mj4KKzxVMjQ2Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDYzPgorPFUyNDY0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NjQ+Cis8VTI0NjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2NT4KKzxVMjQ2Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDY2PgorPFUyNDY3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0Njc+Cis8VTI0Njg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2OD4KKzxVMjQ2OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDY5PgorPFUyNDZBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NkE+Cis8VTI0NkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Qj4KKzxVMjQ2Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDZDPgorPFUyNDZEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NkQ+Cis8VTI0NkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2RT4KKzxVMjQ2Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDZGPgorPFUyNDcwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NzA+Cis8VTI0NzE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3MT4KKzxVMjQ3Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDcyPgorPFUyNDczPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NzM+Cis8VTI0NzQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3ND4KKzxVMjQ3NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDc1PgorPFUyNDc2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NzY+Cis8VTI0Nzc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3Nz4KKzxVMjQ3OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDc4PgorPFUyNDc5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0Nzk+Cis8VTI0N0E+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3QT4KKzxVMjQ3Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDdCPgorPFUyNDdDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0N0M+Cis8VTI0N0Q+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3RD4KKzxVMjQ3RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDdFPgorPFUyNDdGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0N0Y+Cis8VTI0ODA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4MD4KKzxVMjQ4MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDgxPgorPFUyNDgyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODI+Cis8VTI0ODM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4Mz4KKzxVMjQ4ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDg0PgorPFUyNDg1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODU+Cis8VTI0ODY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4Nj4KKzxVMjQ4Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDg3PgorPFUyNDg4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODg+Cis8VTI0ODk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4OT4KKzxVMjQ4QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDhBPgorPFUyNDhCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OEI+Cis8VTI0OEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4Qz4KKzxVMjQ4RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDhEPgorPFUyNDhFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OEU+Cis8VTI0OEY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4Rj4KKzxVMjQ5MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDkwPgorPFUyNDkxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTE+Cis8VTI0OTI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5Mj4KKzxVMjQ5Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDkzPgorPFUyNDk0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTQ+Cis8VTI0OTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5NT4KKzxVMjQ5Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDk2PgorPFUyNDk3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTc+Cis8VTI0OTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5OD4KKzxVMjQ5OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDk5PgorPFUyNDlBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OUE+Cis8VTI0OUI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5Qj4KKzxVMjRFQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNEVBPgorPFUyNTAwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MDA+Cis8VTI1NTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1MD4KKzxVMjUwMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTAyPgorPFUyNTUxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTE+Cis8VTI1MDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwND4KKzxVMjUwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTA1PgorPFUyNTA2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MDY+Cis8VTI1MDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwNz4KKzxVMjUwOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTA4PgorPFUyNTA5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MDk+Cis8VTI1MEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwQT4KKzxVMjUwQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTBCPgorPFUyNTBDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MEM+Cis8VTI1NTI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Mj4KKzxVMjU1Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTUzPgorPFUyNTU0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTQ+Cis8VTI1MTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUxMD4KKzxVMjU1NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTU1PgorPFUyNTU2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTY+Cis8VTI1NTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Nz4KKzxVMjUxND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTE0PgorPFUyNTU4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTg+Cis8VTI1NTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1OT4KKzxVMjU1QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTVBPgorPFUyNTE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MTg+Cis8VTI1NUI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Qj4KKzxVMjU1Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTVDPgorPFUyNTVEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NUQ+Cis8VTI1MUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUxQz4KKzxVMjU1RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTVFPgorPFUyNTFFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MUU+Cis8VTI1MUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUxRj4KKzxVMjU1Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTVGPgorPFUyNTIxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MjE+Cis8VTI1MjI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyMj4KKzxVMjU2MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTYwPgorPFUyNTI0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MjQ+Cis8VTI1NjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2MT4KKzxVMjUyNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTI2PgorPFUyNTI3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Mjc+Cis8VTI1NjI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2Mj4KKzxVMjUyOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTI5PgorPFUyNTJBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MkE+Cis8VTI1NjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2Mz4KKzxVMjUyQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTJDPgorPFUyNTJEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MkQ+Cis8VTI1MkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyRT4KKzxVMjU2ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTY0PgorPFUyNTY1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjU+Cis8VTI1MzE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzMT4KKzxVMjUzMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTMyPgorPFUyNTY2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjY+Cis8VTI1MzQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzND4KKzxVMjUzNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTM1PgorPFUyNTM2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MzY+Cis8VTI1Njc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2Nz4KKzxVMjU2OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTY4PgorPFUyNTM5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Mzk+Cis8VTI1M0E+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzQT4KKzxVMjU2OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTY5PgorPFUyNTNDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1M0M+Cis8VTI1M0Q+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzRD4KKzxVMjUzRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTNFPgorPFUyNTZBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NkE+Cis8VTI1NDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0MD4KKzxVMjU0MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTQxPgorPFUyNTZCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NkI+Cis8VTI1NDM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0Mz4KKzxVMjU0ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTQ0PgorPFUyNTQ1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDU+Cis8VTI1NDY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0Nj4KKzxVMjU0Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTQ3PgorPFUyNTQ4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDg+Cis8VTI1NDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0OT4KKzxVMjU0QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTRBPgorPFUyNTZDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NkM+Cis8VTI1NzE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU3MT4KKzxVMjU3Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTcyPgorPFUyNTgwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1ODA+Cis8VTI1ODQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU4ND4KKzxVMjU4OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTg4PgorPFUyNThDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1OEM+Cis8VTI1OTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU5MD4KKzxVMjU5MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTkxPgorPFUyNTkyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1OTI+Cis8VTI1OTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU5Mz4KKzxVMjVBMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUEwPgorPFUyNUExPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTE+Cis8VTI1QTI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBMj4KKzxVMjVBMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUEzPgorPFUyNUE0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTQ+Cis8VTI1QTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBNT4KKzxVMjVBNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUE2PgorPFUyNUE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTc+Cis8VTI1QTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBOD4KKzxVMjVBOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUE5PgorPFUyNUFBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QUE+Cis8VTI1QUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBQz4KKzxVMjVBRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUFEPgorPFUyNUIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QjI+Cis8VTI1QjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVCMz4KKzxVMjVCNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUI3PgorPFUyNUJBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QkE+Cis8VTI1QkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVCQz4KKzxVMjVCRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUJEPgorPFUyNUMxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QzE+Cis8VTI1QzQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVDND4KKzxVMjVDNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUM2PgorPFUyNUM3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Qzc+Cis8VTI1Q0E+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVDQT4KKzxVMjVDQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUNCPgorPFUyNUNFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Q0U+Cis8VTI1Q0Y+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVDRj4KKzxVMjVEMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUQwPgorPFUyNUQxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1RDE+Cis8VTI1RDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVEOD4KKzxVMjVEOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUQ5PgorPFUyNUUyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1RTI+Cis8VTI1RTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVFMz4KKzxVMjVFRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUVGPgorPFUyNjA1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2MDU+Cis8VTI2MDY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYwNj4KKzxVMjYwRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjBFPgorPFUyNjBGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2MEY+Cis8VTI2MUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYxQz4KKzxVMjYxRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjFFPgorPFUyNjNBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2M0E+Cis8VTI2M0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYzQj4KKzxVMjYzQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjNDPgorPFUyNjQwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NDA+Cis8VTI2NDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY0Mj4KKzxVMjY2MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjYwPgorPFUyNjYxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NjE+Cis8VTI2NjI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2Mj4KKzxVMjY2Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjYzPgorPFUyNjY0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NjQ+Cis8VTI2NjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2NT4KKzxVMjY2Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjY2PgorPFUyNjY3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2Njc+Cis8VTI2Njk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2OT4KKzxVMjY2QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjZBPgorPFUyNjZCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NkI+Cis8VTI2NkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2Qz4KKzxVMjY2RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjZEPgorPFUyNjZFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NkU+Cis8VTI2NkY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2Rj4KKzxVMjcxMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNzEzPgorPFUyNzE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI3MTc+Cis8VTI3MjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjcyMD4KKzxVMzAwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDAwPgorPFUzMDAxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMDE+Cis8VTMwMDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwMj4KKzxVMzAwMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDAzPgorPFUzMDA0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMDQ+Cis8VTMwMDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwNT4KKzxVMzAwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDA2PgorPFUzMDA3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMDc+Cis8VTMwMEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwQT4KKzxVMzAwQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDBCPgorPFUzMDBDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMEM+Cis8VTMwMEQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwRD4KKzxVMzAwRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDBFPgorPFUzMDBGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMEY+Cis8VTMwMTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxMD4KKzxVMzAxMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDExPgorPFUzMDEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTI+Cis8VTMwMTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxMz4KKzxVMzAxND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDE0PgorPFUzMDE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTU+Cis8VTMwMTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxNj4KKzxVMzAxNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDE3PgorPFUzMDFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMUM+Cis8VTMwMjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAyMD4KKzxVMzA5Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDlCPgorPFUzMDlDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwOUM+Cis8VTMwOUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzA5RD4KKzxVMzA5RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDlFPgorPFUzMEZCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwRkI+Cis8VTMwRkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzBGQz4KKzxVMzBGRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMEZEPgorPFUzMEZFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwRkU+Cis8VTMyMUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIxQz4KKzxVMzIyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjIwPgorPFUzMjIxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjE+Cis8VTMyMjI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyMj4KKzxVMzIyMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjIzPgorPFUzMjI0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjQ+Cis8VTMyMjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyNT4KKzxVMzIyNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjI2PgorPFUzMjI3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjc+Cis8VTMyMjg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyOD4KKzxVMzIyOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjI5PgorPFUzMjdGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyN0Y+Cis8VTMzQzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzNDMj4KKzxVMzNEOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzM0Q4PgorPFUwMDAwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDA+Cis8VTAwMDE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwMT4KKzxVMDAwMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDAyPgorPFUwMDAzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDM+Cis8VTAwMDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwND4KKzxVMDAwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA1PgorPFUwMDA2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDY+Cis8VTAwMDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwNz4KKzxVMDAwOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA4PgorPFUwMDBFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMEU+Cis8VTAwMEY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwRj4KKzxVMDAxMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDEwPgorPFUwMDExPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTE+Cis8VTAwMTI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxMj4KKzxVMDAxMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDEzPgorPFUwMDE0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTQ+Cis8VTAwMTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxNT4KKzxVMDAxNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE2PgorPFUwMDE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTc+Cis8VTAwMTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxOD4KKzxVMDAxOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE5PgorPFUwMDFBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMUE+Cis8VTAwMUI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxQj4KKzxVMDAxQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFDPgorPFUwMDFEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMUQ+Cis8VTAwMUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxRT4KKzxVMDAxRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFGPgorPFUwMDdGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwN0Y+Cis8VTAwODA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4MD4KKzxVMDA4MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDgxPgorPFUwMDgyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODI+Cis8VTAwODM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4Mz4KKzxVMDA4ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDg0PgorPFUwMDg1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODU+Cis8VTAwODY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4Nj4KKzxVMDA4Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDg3PgorPFUwMDg4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODg+Cis8VTAwODk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4OT4KKzxVMDA4QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDhBPgorPFUwMDhCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOEI+Cis8VTAwOEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4Qz4KKzxVMDA4RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDhEPgorPFUwMDhFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOEU+Cis8VTAwOEY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4Rj4KKzxVMDA5MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDkwPgorPFUwMDkxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTE+Cis8VTAwOTI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Mj4KKzxVMDA5Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDkzPgorPFUwMDk0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTQ+Cis8VTAwOTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5NT4KKzxVMDA5Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDk2PgorPFUwMDk3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTc+Cis8VTAwOTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5OD4KKzxVMDA5OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDk5PgorPFUwMDlBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOUE+Cis8VTAwOUI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Qj4KKzxVMDA5Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDlDPgorPFUwMDlEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOUQ+Cis8VTAwOUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5RT4KKzxVMDA5Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDlGPgorPFVFMDAwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDA+Cis8VUUwMDE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwMT4KKzxVRTAwMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDAyPgorPFUwMzAxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzMDE+Cis8VUUwMDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwND4KKzxVRTAwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDA1PgorPFVFMDA2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDY+Cis8VUUwMDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwNz4KKzxVRTAwOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDA4PgorPFVFMDA5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDk+Cis8VUUwMEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwQT4KKzxVRTAwQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDBCPgorPFVFMDBDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMEM+Cis8VUUwMEQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwRD4KKzxVRTAwRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDBFPgorPFVFMDBGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMEY+Cis8Ij0+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzwiPT4KKzxVRTAxMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDExPgorPFVFMDEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMTI+Cis8VUUwMTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxMz4KKzxVRTAxND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDE0PgorPFVFMDE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMTU+Cis8VUUwMTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxNz4KKzxVRTAxOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDE4PgorPFVFMDE5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMTk+CitVTkRFRklORUQJSUdOT1JFO0lHTk9SRTtJR05PUkUKKworPFUwMDMwPgk8VTAwMzA+OzxVMDAzMD47SUdOT1JFO0lHTk9SRQorPFUyMDcwPgk8VTAwMzA+OzxVMjA3MD47SUdOT1JFO0lHTk9SRQorPFUyMTVCPgk8VTAwMzA+OzxVMjE1Qj47SUdOT1JFO0lHTk9SRQorPFUwMEJDPgk8VTAwMzA+OzxVMDBCQz47SUdOT1JFO0lHTk9SRQorPFUyMTVDPgk8VTAwMzA+OzxVMjE1Qz47SUdOT1JFO0lHTk9SRQorPFUwMEJEPgk8VTAwMzA+OzxVMDBCRD47SUdOT1JFO0lHTk9SRQorPFUyMTVEPgk8VTAwMzA+OzxVMjE1RD47SUdOT1JFO0lHTk9SRQorPFUwMEJFPgk8VTAwMzA+OzxVMDBCRT47SUdOT1JFO0lHTk9SRQorPFUyMTVFPgk8VTAwMzA+OzxVMjE1RT47SUdOT1JFO0lHTk9SRQorPFUwMDMxPgk8VTAwMzE+OzxVMDAzMT47SUdOT1JFO0lHTk9SRQorPFUwMDMyPgk8VTAwMzI+OzxVMDAzMj47SUdOT1JFO0lHTk9SRQorPFUwMDMzPgk8VTAwMzM+OzxVMDAzMz47SUdOT1JFO0lHTk9SRQorPFUwMDM0Pgk8VTAwMzQ+OzxVMDAzND47SUdOT1JFO0lHTk9SRQorPFUwMDM1Pgk8VTAwMzU+OzxVMDAzNT47SUdOT1JFO0lHTk9SRQorPFUwMDM2Pgk8VTAwMzY+OzxVMDAzNj47SUdOT1JFO0lHTk9SRQorPFUwMDM3Pgk8VTAwMzc+OzxVMDAzNz47SUdOT1JFO0lHTk9SRQorPFUwMDM4Pgk8VTAwMzg+OzxVMDAzOD47SUdOT1JFO0lHTk9SRQorPFUwMDM5Pgk8VTAwMzk+OzxVMDAzOT47SUdOT1JFO0lHTk9SRQorPFUwMEI5Pgk8VTAwMzE+OzxVMDBCOT47SUdOT1JFO0lHTk9SRQorPFUwMEIyPgk8VTAwMzI+OzxVMDBCMj47SUdOT1JFO0lHTk9SRQorPFUwMEIzPgk8VTAwMzM+OzxVMDBCMz47SUdOT1JFO0lHTk9SRQorPFUyMDc0Pgk8VTAwMzQ+OzxVMjA3ND47SUdOT1JFO0lHTk9SRQorPFUyMDc1Pgk8VTAwMzU+OzxVMjA3NT47SUdOT1JFO0lHTk9SRQorPFUyMDc2Pgk8VTAwMzY+OzxVMjA3Nj47SUdOT1JFO0lHTk9SRQorPFUyMDc3Pgk8VTAwMzc+OzxVMjA3Nz47SUdOT1JFO0lHTk9SRQorPFUyMDc4Pgk8VTAwMzg+OzxVMjA3OD47SUdOT1JFO0lHTk9SRQorPFUyMDc5Pgk8VTAwMzk+OzxVMjA3OT47SUdOT1JFO0lHTk9SRQorPFUwMDQxPgk8VTAwNDE+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjE+CTxVMDA0MT47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAwQUE+CTxVMDA0MT47PE5PTkU+OzxVMDBBQT47SUdOT1JFCis8VTAwQzE+CTxVMDA0MT47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTE+CTxVMDA0MT47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMEMwPgk8VTAwNDE+OzxHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMEUwPgk8VTAwNDE+OzxHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIwMD4JPFUwMDQxPjs8RE9VQkxFLUdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMDE+CTxVMDA0MT47PERPVUJMRS1HUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDEwMj4JPFUwMDQxPjs8QlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEwMz4JPFUwMDQxPjs8QlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFQUU+CTxVMDA0MT47PEJSRVZFK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQUY+CTxVMDA0MT47PEJSRVZFK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRUIwPgk8VTAwNDE+OzxCUkVWRStHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRUIxPgk8VTAwNDE+OzxCUkVWRStHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMUVCMj4JPFUwMDQxPjs8QlJFVkUrSE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUIzPgk8VTAwNDE+OzxCUkVWRStIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRUI0Pgk8VTAwNDE+OzxCUkVWRStUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUxRUI1Pgk8VTAwNDE+OzxCUkVWRStUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUVCNj4JPFUwMDQxPjs8QlJFVkUrRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQjc+CTxVMDA0MT47PEJSRVZFK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDIwMj4JPFUwMDQxPjs8SU5WRVJURUQtQlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIwMz4JPFUwMDQxPjs8SU5WRVJURUQtQlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAwQzI+CTxVMDA0MT47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFMj4JPFUwMDQxPjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMUVBND4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRUE1Pgk8VTAwNDE+OzxDSVJDVU1GTEVYK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRUE2Pgk8VTAwNDE+OzxDSVJDVU1GTEVYK0dSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQTc+CTxVMDA0MT47PENJUkNVTUZMRVgrR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFQTg+CTxVMDA0MT47PENJUkNVTUZMRVgrSE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUE5Pgk8VTAwNDE+OzxDSVJDVU1GTEVYK0hPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFQUE+CTxVMDA0MT47PENJUkNVTUZMRVgrVElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVBQj4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUVBQz4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVBRD4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxQ0Q+CTxVMDA0MT47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxQ0U+CTxVMDA0MT47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMEM1Pgk8VTAwNDE+OzxSSU5HPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTU+CTxVMDA0MT47PFJJTkc+OzxTTUFMTD47SUdOT1JFCis8VTAxRkE+CTxVMDA0MT47PFJJTkcrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFGQj4JPFUwMDQxPjs8UklORytBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUUwMD4JPFUwMDQxPjs8UklORy1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTAxPgk8VTAwNDE+OzxSSU5HLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMURFPgk8VTAwNDE+OzxESUFFUkVTSVMrTUFDUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxREY+CTxVMDA0MT47PERJQUVSRVNJUytNQUNST04+OzxTTUFMTD47SUdOT1JFCis8VTFFQTI+CTxVMDA0MT47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVBMz4JPFUwMDQxPjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMDBDMz4JPFUwMDQxPjs8VElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFMz4JPFUwMDQxPjs8VElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFQTA+CTxVMDA0MT47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUExPgk8VTAwNDE+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxMDQ+CTxVMDA0MT47PE9HT05FSz47PENBUElUQUw+O0lHTk9SRQorPFUwMTA1Pgk8VTAwNDE+OzxPR09ORUs+OzxTTUFMTD47SUdOT1JFCis8VTAxMDA+CTxVMDA0MT47PE1BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTAxPgk8VTAwNDE+OzxNQUNST04+OzxTTUFMTD47SUdOT1JFCis8VTAxRTA+CTxVMDA0MT47PE1BQ1JPTitET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFFMT4JPFUwMDQxPjs8TUFDUk9OK0RPVD47PFNNQUxMPjtJR05PUkUKKzxhOD4KKzxVMDBDNj4JIjxVMDA0MT48VTAwNDU+IjsiPFUwMEM2PjxVMDBDNj4iOyI8Q0FQSVRBTD48Q0FQSVRBTD4iO0lHTk9SRQorPFUwMEU2PgkiPFUwMDQxPjxVMDA0NT4iOyI8VTAwQzY+PFUwMEM2PiI7IjxTTUFMTD48U01BTEw+IjtJR05PUkUKKzxVMDFGQz4JIjxVMDA0MT48VTAwNDU+IjsiPFUwMUZDPjxVMDFGQz4iOyI8Q0FQSVRBTD48Q0FQSVRBTD4iO0lHTk9SRQorPFUwMUZEPgkiPFUwMDQxPjxVMDA0NT4iOyI8VTAxRkM+PFUwMUZDPiI7IjxTTUFMTD48U01BTEw+IjtJR05PUkUKKzxVMDFFMj4JIjxVMDA0MT48VTAwNDU+IjsiPFUwMUUyPjxVMDFFMj4iOyI8Q0FQSVRBTD48Q0FQSVRBTD4iO0lHTk9SRQorPFUwMUUzPgkiPFUwMDQxPjxVMDA0NT4iOyI8VTAxRTI+PFUwMUUyPiI7IjxTTUFMTD48U01BTEw+IjtJR05PUkUKKzxVMDA0Mj4JPFUwMDQyPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDYyPgk8VTAwNDI+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUxRTAyPgk8VTAwNDI+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwMz4JPFUwMDQyPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTA0Pgk8VTAwNDI+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwNT4JPFUwMDQyPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUxRTA2Pgk8VTAwNDI+OzxMSU5FLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMDc+CTxVMDA0Mj47PExJTkUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8Yjg+Cis8VTAwNDM+CTxVMDA0Mz47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2Mz4JPFUwMDQzPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDEwNj4JPFUwMDQzPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEwNz4JPFUwMDQzPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAxMDg+CTxVMDA0Mz47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEwOT4JPFUwMDQzPjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMDEwQz4JPFUwMDQzPjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEwRD4JPFUwMDQzPjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAxODc+CTxVMDA0Mz47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE4OD4JPFUwMDQzPjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMDEwQT4JPFUwMDQzPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMEI+CTxVMDA0Mz47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMDBDNz4JPFUwMDQzPjs8Q0VESUxMQT47PENBUElUQUw+O0lHTk9SRQorPFUwMEU3Pgk8VTAwNDM+OzxDRURJTExBPjs8U01BTEw+O0lHTk9SRQorPFUxRTA4Pgk8VTAwNDM+OzxDRURJTExBK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMDk+CTxVMDA0Mz47PENFRElMTEErQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8Yzg+Cis8VTAwNDQ+CTxVMDA0ND47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2ND4JPFUwMDQ0Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDEwRT4JPFUwMDQ0Pjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEwRj4JPFUwMDQ0Pjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTFFMEE+CTxVMDA0ND47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTBCPgk8VTAwNDQ+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFMEM+CTxVMDA0ND47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTBEPgk8VTAwNDQ+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxMTA+CTxVMDA0ND47PFNUUk9LRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTExPgk8VTAwNDQ+OzxTVFJPS0U+OzxTTUFMTD47SUdOT1JFCis8VTFFMTA+CTxVMDA0ND47PENFRElMTEE+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUxMT4JPFUwMDQ0Pjs8Q0VESUxMQT47PFNNQUxMPjtJR05PUkUKKzxVMUUxMj4JPFUwMDQ0Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUxMz4JPFUwMDQ0Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFMEU+CTxVMDA0ND47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwRj4JPFUwMDQ0Pjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxkOD4KKzxVMDA0NT4JPFUwMDQ1Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDY1Pgk8VTAwNDU+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMEM5Pgk8VTAwNDU+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMEU5Pgk8VTAwNDU+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDBDOD4JPFUwMDQ1Pjs8R1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFOD4JPFUwMDQ1Pjs8R1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMDQ+CTxVMDA0NT47PERPVUJMRS1HUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjA1Pgk8VTAwNDU+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMTQ+CTxVMDA0NT47PEJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMTU+CTxVMDA0NT47PEJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjA2Pgk8VTAwNDU+OzxJTlZFUlRFRC1CUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjA3Pgk8VTAwNDU+OzxJTlZFUlRFRC1CUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDBDQT4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMEVBPgk8VTAwNDU+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRUJFPgk8VTAwNDU+OzxDSVJDVU1GTEVYK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQkY+CTxVMDA0NT47PENJUkNVTUZMRVgrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFQzA+CTxVMDA0NT47PENJUkNVTUZMRVgrR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDMT4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMUVDMj4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQzM+CTxVMDA0NT47PENJUkNVTUZMRVgrSE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVDND4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUxRUM1Pgk8VTAwNDU+OzxDSVJDVU1GTEVYK1RJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRUM2Pgk8VTAwNDU+OzxDSVJDVU1GTEVYK0RPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUM3Pgk8VTAwNDU+OzxDSVJDVU1GTEVYK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDExQT4JPFUwMDQ1Pjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExQj4JPFUwMDQ1Pjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAwQ0I+CTxVMDA0NT47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUwMEVCPgk8VTAwNDU+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFQkE+CTxVMDA0NT47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCQj4JPFUwMDQ1Pjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVCQz4JPFUwMDQ1Pjs8VElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCRD4JPFUwMDQ1Pjs8VElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFMUE+CTxVMDA0NT47PFRJTERFLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMUI+CTxVMDA0NT47PFRJTERFLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTE2Pgk8VTAwNDU+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExNz4JPFUwMDQ1Pjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRUI4Pgk8VTAwNDU+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCOT4JPFUwMDQ1Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUxRTFDPgk8VTAwNDU+OzxDRURJTExBK0JSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMUQ+CTxVMDA0NT47PENFRElMTEErQlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMTg+CTxVMDA0NT47PE9HT05FSz47PENBUElUQUw+O0lHTk9SRQorPFUwMTE5Pgk8VTAwNDU+OzxPR09ORUs+OzxTTUFMTD47SUdOT1JFCis8VTAxMTI+CTxVMDA0NT47PE1BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTEzPgk8VTAwNDU+OzxNQUNST04+OzxTTUFMTD47SUdOT1JFCis8VTFFMTY+CTxVMDA0NT47PE1BQ1JPTitBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTE3Pgk8VTAwNDU+OzxNQUNST04rQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFMTQ+CTxVMDA0NT47PE1BQ1JPTitHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRTE1Pgk8VTAwNDU+OzxNQUNST04rR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFMTg+CTxVMDA0NT47PE1BQ1JPTitDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMTk+CTxVMDA0NT47PE1BQ1JPTitDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPGU4PgorPFUwMDQ2Pgk8VTAwNDY+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjY+CTxVMDA0Nj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxOTE+CTxVMDA0Nj47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE5Mj4JPFUwMDQ2Pjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUUxRT4JPFUwMDQ2Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMUY+CTxVMDA0Nj47PERPVD47PFNNQUxMPjtJR05PUkUKKzxmOD4KKzxVRkIwMD4JIjxVMDA0Nj48VTAwNDY+IjsiPE5PTkU+PE5PTkU+IjsiPFVGQjAwPjxVRkIwMD4iO0lHTk9SRQorPFVGQjAxPgkiPFUwMDQ2PjxVMDA0OT4iOyI8Tk9ORT48Tk9ORT4iOyI8VUZCMDE+PFVGQjAxPiI7SUdOT1JFCis8VUZCMDI+CSI8VTAwNDY+PFUwMDRDPiI7IjxOT05FPjxOT05FPiI7IjxVRkIwMj48VUZCMDI+IjtJR05PUkUKKzxVRkIwMz4JIjxVMDA0Nj48VTAwNDY+PFUwMDQ5PiI7IjxOT05FPjxOT05FPjxOT05FPiI7IjxVRkIwMz48VUZCMDM+PFVGQjAzPiI7SUdOT1JFCis8VUZCMDQ+CSI8VTAwNDY+PFUwMDQ2PjxVMDA0Qz4iOyI8Tk9ORT48Tk9ORT48Tk9ORT4iOyI8VUZCMDQ+PFVGQjA0PjxVRkIwND4iO0lHTk9SRQorPFUwMDQ3Pgk8VTAwNDc+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjc+CTxVMDA0Nz47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxRjQ+CTxVMDA0Nz47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRjU+CTxVMDA0Nz47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMTFFPgk8VTAwNDc+OzxCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTFGPgk8VTAwNDc+OzxCUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDExQz4JPFUwMDQ3Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMTFEPgk8VTAwNDc+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUwMUU2Pgk8VTAwNDc+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUU3Pgk8VTAwNDc+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDEyMD4JPFUwMDQ3Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMjE+CTxVMDA0Nz47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMDFFND4JPFUwMDQ3Pjs8U1RST0tFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRTU+CTxVMDA0Nz47PFNUUk9LRT47PFNNQUxMPjtJR05PUkUKKzxVMDEyMj4JPFUwMDQ3Pjs8Q0VESUxMQT47PENBUElUQUw+O0lHTk9SRQorPFUwMTIzPgk8VTAwNDc+OzxDRURJTExBPjs8U01BTEw+O0lHTk9SRQorPFUxRTIwPgk8VTAwNDc+OzxNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUyMT4JPFUwMDQ3Pjs8TUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPGc4PgorPFUwMDQ4Pgk8VTAwNDg+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjg+CTxVMDA0OD47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFMkE+CTxVMDA0OD47PEJSRVZFLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMkI+CTxVMDA0OD47PEJSRVZFLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTI0Pgk8VTAwNDg+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMjU+CTxVMDA0OD47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFMjY+CTxVMDA0OD47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUxRTI3Pgk8VTAwNDg+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFMjI+CTxVMDA0OD47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTIzPgk8VTAwNDg+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFMjQ+CTxVMDA0OD47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTI1Pgk8VTAwNDg+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxMjY+CTxVMDA0OD47PFNUUk9LRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTI3Pgk8VTAwNDg+OzxTVFJPS0U+OzxTTUFMTD47SUdOT1JFCis8VTFFMjg+CTxVMDA0OD47PENFRElMTEE+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUyOT4JPFUwMDQ4Pjs8Q0VESUxMQT47PFNNQUxMPjtJR05PUkUKKzxoOD4KKzxVMDA0OT4JPFUwMDQ5Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDY5Pgk8VTAwNDk+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMENEPgk8VTAwNDk+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMEVEPgk8VTAwNDk+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDBDQz4JPFUwMDQ5Pjs8R1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFQz4JPFUwMDQ5Pjs8R1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMDg+CTxVMDA0OT47PERPVUJMRS1HUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjA5Pgk8VTAwNDk+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMkM+CTxVMDA0OT47PEJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMkQ+CTxVMDA0OT47PEJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjBBPgk8VTAwNDk+OzxJTlZFUlRFRC1CUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjBCPgk8VTAwNDk+OzxJTlZFUlRFRC1CUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDBDRT4JPFUwMDQ5Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMEVFPgk8VTAwNDk+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUwMUNGPgk8VTAwNDk+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUQwPgk8VTAwNDk+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDBDRj4JPFUwMDQ5Pjs8RElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRUY+CTxVMDA0OT47PERJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMUUyRT4JPFUwMDQ5Pjs8RElBRVJFU0lTK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMkY+CTxVMDA0OT47PERJQUVSRVNJUytBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVDOD4JPFUwMDQ5Pjs8SE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUM5Pgk8VTAwNDk+OzxIT09LPjs8U01BTEw+O0lHTk9SRQorPFUwMTI4Pgk8VTAwNDk+OzxUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUwMTI5Pgk8VTAwNDk+OzxUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUUyQz4JPFUwMDQ5Pjs8VElMREUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUyRD4JPFUwMDQ5Pjs8VElMREUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxMzA+CTxVMDA0OT47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUwMTMxPgk8VTAwNDk+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFQ0E+CTxVMDA0OT47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUNCPgk8VTAwNDk+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxMkU+CTxVMDA0OT47PE9HT05FSz47PENBUElUQUw+O0lHTk9SRQorPFUwMTJGPgk8VTAwNDk+OzxPR09ORUs+OzxTTUFMTD47SUdOT1JFCis8VTAxMkE+CTxVMDA0OT47PE1BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTJCPgk8VTAwNDk+OzxNQUNST04+OzxTTUFMTD47SUdOT1JFCis8aTg+Cis8VTAxMzI+CSI8VTAwNDk+PFUwMDRBPiI7IjxVMDEzMj48VTAxMzI+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDEzMz4JIjxVMDA0OT48VTAwNEE+IjsiPFUwMTMyPjxVMDEzMj4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAwNEE+CTxVMDA0QT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2QT4JPFUwMDRBPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDEzND4JPFUwMDRBPjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMTM1Pgk8VTAwNEE+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPGo4PgorPFUwMDRCPgk8VTAwNEI+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNkI+CTxVMDA0Qj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFMzA+CTxVMDA0Qj47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMzE+CTxVMDA0Qj47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMUU4Pgk8VTAwNEI+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUU5Pgk8VTAwNEI+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDE5OD4JPFUwMDRCPjs8SE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUwMTk5Pgk8VTAwNEI+OzxIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRTMyPgk8VTAwNEI+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzMz4JPFUwMDRCPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTM2Pgk8VTAwNEI+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMzc+CTxVMDA0Qj47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFMzQ+CTxVMDA0Qj47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzNT4JPFUwMDRCPjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxrOD4KKzxVMDEzOD4JPFUwMDRCPjs8VTAxMzg+OzxTTUFMTD47SUdOT1JFCis8VTAwNEM+CTxVMDA0Qz47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2Qz4JPFUwMDRDPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDEzOT4JPFUwMDRDPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEzQT4JPFUwMDRDPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAxM0Q+CTxVMDA0Qz47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxM0U+CTxVMDA0Qz47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMTNGPgk8VTAwNEM+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0MD4JPFUwMDRDPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTM2Pgk8VTAwNEM+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzNz4JPFUwMDRDPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTQxPgk8VTAwNEM+OzxTVFJPS0U+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0Mj4JPFUwMDRDPjs8U1RST0tFPjs8U01BTEw+O0lHTk9SRQorPFUwMTNCPgk8VTAwNEM+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxM0M+CTxVMDA0Qz47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFMzg+CTxVMDA0Qz47PE1BQ1JPTitET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzOT4JPFUwMDRDPjs8TUFDUk9OK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUUzQz4JPFUwMDRDPjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzRD4JPFUwMDRDPjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFM0E+CTxVMDA0Qz47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzQj4JPFUwMDRDPjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxsOD4KKzxVMDA0RD4JPFUwMDREPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDZEPgk8VTAwNEQ+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUxRTNFPgk8VTAwNEQ+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTNGPgk8VTAwNEQ+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUU0MD4JPFUwMDREPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNDE+CTxVMDA0RD47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUU0Mj4JPFUwMDREPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNDM+CTxVMDA0RD47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxtOD4KKzxVMDA0RT4JPFUwMDRFPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDZFPgk8VTAwNEU+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTQzPgk8VTAwNEU+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMTQ0Pgk8VTAwNEU+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDE0Nz4JPFUwMDRFPjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0OD4JPFUwMDRFPjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAwRDE+CTxVMDA0RT47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRjE+CTxVMDA0RT47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRTQ0Pgk8VTAwNEU+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU0NT4JPFUwMDRFPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTQ2Pgk8VTAwNEU+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU0Nz4JPFUwMDRFPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTQ1Pgk8VTAwNEU+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNDY+CTxVMDA0RT47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFNEE+CTxVMDA0RT47PE1BQ1JPTitDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNEI+CTxVMDA0RT47PE1BQ1JPTitDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRTQ4Pgk8VTAwNEU+OzxMSU5FLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNDk+CTxVMDA0RT47PExJTkUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxNDk+CTxVMDA0RT47PFBSRUNFREVELUJZLUFQT1NUUk9QSEU+OzxTTUFMTD47SUdOT1JFCis8bjg+Cis8VTAxNEE+CSI8VTAwNEU+PFUwMDQ3PiI7IjxVMDE0QT48VTAxNEE+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDE0Qj4JIjxVMDA0RT48VTAwNDc+IjsiPFUwMTRBPjxVMDE0QT4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAwNEY+CTxVMDA0Rj47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2Rj4JPFUwMDRGPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDBCQT4JPFUwMDRGPjs8Tk9ORT47PFUwMEJBPjtJR05PUkUKKzxVMDBEMz4JPFUwMDRGPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGMz4JPFUwMDRGPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAwRDI+CTxVMDA0Rj47PEdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRjI+CTxVMDA0Rj47PEdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjBDPgk8VTAwNEY+OzxET1VCTEUtR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIwRD4JPFUwMDRGPjs8RE9VQkxFLUdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTRFPgk8VTAwNEY+OzxCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTRGPgk8VTAwNEY+OzxCUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIwRT4JPFUwMDRGPjs8SU5WRVJURUQtQlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIwRj4JPFUwMDRGPjs8SU5WRVJURUQtQlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAwRDQ+CTxVMDA0Rj47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGND4JPFUwMDRGPjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMUVEMD4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRUQxPgk8VTAwNEY+OzxDSVJDVU1GTEVYK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRUQyPgk8VTAwNEY+OzxDSVJDVU1GTEVYK0dSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRDM+CTxVMDA0Rj47PENJUkNVTUZMRVgrR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFRDQ+CTxVMDA0Rj47PENJUkNVTUZMRVgrSE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUQ1Pgk8VTAwNEY+OzxDSVJDVU1GTEVYK0hPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFRDY+CTxVMDA0Rj47PENJUkNVTUZMRVgrVElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVENz4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUVEOD4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVEOT4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxRDE+CTxVMDA0Rj47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRDI+CTxVMDA0Rj47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMTUwPgk8VTAwNEY+OzxET1VCTEUtQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE1MT4JPFUwMDRGPjs8RE9VQkxFLUFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRUNFPgk8VTAwNEY+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQ0Y+CTxVMDA0Rj47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFNEM+CTxVMDA0Rj47PFRJTERFK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNEQ+CTxVMDA0Rj47PFRJTERFK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTRFPgk8VTAwNEY+OzxUSUxERStESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU0Rj4JPFUwMDRGPjs8VElMREUrRElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUxRUNDPgk8VTAwNEY+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDRD4JPFUwMDRGPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMEQ4Pgk8VTAwNEY+OzxTVFJPS0U+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGOD4JPFUwMDRGPjs8U1RST0tFPjs8U01BTEw+O0lHTk9SRQorPFUwMUZFPgk8VTAwNEY+OzxTVFJPS0UrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFGRj4JPFUwMDRGPjs8U1RST0tFK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMUVBPgk8VTAwNEY+OzxPR09ORUs+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFFQj4JPFUwMDRGPjs8T0dPTkVLPjs8U01BTEw+O0lHTk9SRQorPFUwMUVDPgk8VTAwNEY+OzxPR09ORUsrTUFDUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRUQ+CTxVMDA0Rj47PE9HT05FSytNQUNST04+OzxTTUFMTD47SUdOT1JFCis8VTAxNEM+CTxVMDA0Rj47PE1BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTREPgk8VTAwNEY+OzxNQUNST04+OzxTTUFMTD47SUdOT1JFCis8VTFFNTI+CTxVMDA0Rj47PE1BQ1JPTitBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTUzPgk8VTAwNEY+OzxNQUNST04rQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFNTA+CTxVMDA0Rj47PE1BQ1JPTitHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRTUxPgk8VTAwNEY+OzxNQUNST04rR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxQTA+CTxVMDA0Rj47PEhPUk4+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFBMT4JPFUwMDRGPjs8SE9STj47PFNNQUxMPjtJR05PUkUKKzxVMUVEQT4JPFUwMDRGPjs8SE9STitBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRURCPgk8VTAwNEY+OzxIT1JOK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRURDPgk8VTAwNEY+OzxIT1JOK0dSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFREQ+CTxVMDA0Rj47PEhPUk4rR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFREU+CTxVMDA0Rj47PEhPUk4rSE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRURGPgk8VTAwNEY+OzxIT1JOK0hPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFRTA+CTxVMDA0Rj47PEhPUk4rVElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFMT4JPFUwMDRGPjs8SE9STitUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUVFMj4JPFUwMDRGPjs8SE9STitET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFMz4JPFUwMDRGPjs8SE9STitET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8bzg+Cis8VTAxNTI+CSI8VTAwNEY+PFUwMDQ1PiI7IjxVMDE1Mj48VTAxNTI+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDE1Mz4JIjxVMDA0Rj48VTAwNDU+IjsiPFUwMTUyPjxVMDE1Mj4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAwNTA+CTxVMDA1MD47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3MD4JPFUwMDUwPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMUU1ND4JPFUwMDUwPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU1NT4JPFUwMDUwPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFNTY+CTxVMDA1MD47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTU3Pgk8VTAwNTA+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8cDg+Cis8VTAwNTE+CTxVMDA1MT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3MT4JPFUwMDUxPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxxOD4KKzxVMDA1Mj4JPFUwMDUyPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDcyPgk8VTAwNTI+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTU0Pgk8VTAwNTI+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMTU1Pgk8VTAwNTI+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDIxMD4JPFUwMDUyPjs8RE9VQkxFLUdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMTE+CTxVMDA1Mj47PERPVUJMRS1HUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIxMj4JPFUwMDUyPjs8SU5WRVJURUQtQlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIxMz4JPFUwMDUyPjs8SU5WRVJURUQtQlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxNTg+CTxVMDA1Mj47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNTk+CTxVMDA1Mj47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRTU4Pgk8VTAwNTI+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU1OT4JPFUwMDUyPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTVBPgk8VTAwNTI+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU1Qj4JPFUwMDUyPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTU2Pgk8VTAwNTI+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNTc+CTxVMDA1Mj47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFNUM+CTxVMDA1Mj47PE1BQ1JPTitET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU1RD4JPFUwMDUyPjs8TUFDUk9OK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUU1RT4JPFUwMDUyPjs8TElORS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTVGPgk8VTAwNTI+OzxMSU5FLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPHI4PgorPFUwMDUzPgk8VTAwNTM+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzM+CTxVMDA1Mz47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VUZCMDY+CSI8VTAwNTM+PFUwMDU0PiI7IjxOT05FPjxOT05FPiI7IjxVRkIwNj48VUZCMDY+IjtJR05PUkUKKzxVMDE1QT4JPFUwMDUzPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE1Qj4JPFUwMDUzPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFNjQ+CTxVMDA1Mz47PEFDVVRFK0RPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTY1Pgk8VTAwNTM+OzxBQ1VURStET1Q+OzxTTUFMTD47SUdOT1JFCis8VTAxNUM+CTxVMDA1Mz47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE1RD4JPFUwMDUzPjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMUU2Nj4JPFUwMDUzPjs8Q0FST04rRE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNjc+CTxVMDA1Mz47PENBUk9OK0RPVD47PFNNQUxMPjtJR05PUkUKKzxVMUU2MD4JPFUwMDUzPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNjE+CTxVMDA1Mz47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUU2Mj4JPFUwMDUzPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNjM+CTxVMDA1Mz47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUU2OD4JPFUwMDUzPjs8RE9UK0RPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTY5Pgk8VTAwNTM+OzxET1QrRE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTVFPgk8VTAwNTM+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNUY+CTxVMDA1Mz47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8czg+Cis8VTAxNjA+IDxVMDE2MD47PENBUk9OPjs8Q0FQSVRBTD4KKzxVMDE2MT4gPFUwMTYwPjs8Q0FST04+OzxTTUFMTD4KKzxVMDA1QT4gIDxVMDA1QT47PE5PTkU+OzxDQVBJVEFMPgorPFUwMDdBPiAgPFUwMDVBPjs8Tk9ORT47PFNNQUxMPgorPFUwMTc5PiA8VTAwNUE+OzxBQ1VURT47PENBUElUQUw+Cis8VTAxN0E+IDxVMDA1QT47PEFDVVRFPjs8U01BTEw+Cis8VTAxN0I+IDxVMDA1QT47PERPVD47PENBUElUQUw+Cis8VTAxN0M+IDxVMDA1QT47PERPVD47PFNNQUxMPgorPFUwMTdEPiA8VTAwNUE+OzxDQVJPTj47PENBUElUQUw+Cis8VTAxN0U+IDxVMDA1QT47PENBUk9OPjs8U01BTEw+Cis8VTAxN0Y+CTxVMDA1Mz47PFUwMTdGPjs8U01BTEw+O0lHTk9SRQorPFUwMERGPgkiPFUwMDUzPjxVMDA1Mz4iOyI8Tk9ORT48Tk9ORT4iOyI8U01BTEw+PFUwMERGPiI7SUdOT1JFCis8VUZCMDU+CSI8VTAwNTM+PFUwMDU0PiI7IjxOT05FPjxOT05FPiI7IjxVRkIwNT48VUZCMDU+IjtJR05PUkUKKzxVMDA1ND4JPFUwMDU0Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDc0Pgk8VTAwNTQ+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTY0Pgk8VTAwNTQ+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTY1Pgk8VTAwNTQ+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMUU2QT4JPFUwMDU0Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNkI+CTxVMDA1ND47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUU2Qz4JPFUwMDU0Pjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNkQ+CTxVMDA1ND47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDE2Nj4JPFUwMDU0Pjs8U1RST0tFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNjc+CTxVMDA1ND47PFNUUk9LRT47PFNNQUxMPjtJR05PUkUKKzxVMDE2Mj4JPFUwMDU0Pjs8Q0VESUxMQT47PENBUElUQUw+O0lHTk9SRQorPFUwMTYzPgk8VTAwNTQ+OzxDRURJTExBPjs8U01BTEw+O0lHTk9SRQorPFUxRTcwPgk8VTAwNTQ+OzxNQUNST04rQ0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUxRTcxPgk8VTAwNTQ+OzxNQUNST04rQ0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMUU2RT4JPFUwMDU0Pjs8TElORS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTZGPgk8VTAwNTQ+OzxMSU5FLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPHQ4PgorPFUwMERFPgkiPFUwMDU0PjxVMDA0OD4iOyI8VTAwREU+PFUwMERFPiI7IjxDQVBJVEFMPjxDQVBJVEFMPiI7SUdOT1JFCis8VTAwRkU+CSI8VTAwNTQ+PFUwMDQ4PiI7IjxVMDBERT48VTAwREU+IjsiPFNNQUxMPjxTTUFMTD4iO0lHTk9SRQorPFUwMDU1Pgk8VTAwNTU+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzU+CTxVMDA1NT47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAwREE+CTxVMDA1NT47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRkE+CTxVMDA1NT47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMEQ5Pgk8VTAwNTU+OzxHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMEY5Pgk8VTAwNTU+OzxHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIxND4JPFUwMDU1Pjs8RE9VQkxFLUdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMTU+CTxVMDA1NT47PERPVUJMRS1HUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDE2Qz4JPFUwMDU1Pjs8QlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE2RD4JPFUwMDU1Pjs8QlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMTY+CTxVMDA1NT47PElOVkVSVEVELUJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMTc+CTxVMDA1NT47PElOVkVSVEVELUJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMERCPgk8VTAwNTU+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRkI+CTxVMDA1NT47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTAxRDM+CTxVMDA1NT47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRDQ+CTxVMDA1NT47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMTZFPgk8VTAwNTU+OzxSSU5HPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNkY+CTxVMDA1NT47PFJJTkc+OzxTTUFMTD47SUdOT1JFCis8VTAxRDU+CTxVMDA1NT47PERJQUVSRVNJUytNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFENj4JPFUwMDU1Pjs8RElBRVJFU0lTK01BQ1JPTj47PFNNQUxMPjtJR05PUkUKKzxVMDFENz4JPFUwMDU1Pjs8RElBRVJFU0lTK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRDg+CTxVMDA1NT47PERJQUVSRVNJUytBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDFEQj4JPFUwMDU1Pjs8RElBRVJFU0lTK0dSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxREM+CTxVMDA1NT47PERJQUVSRVNJUytHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDFEOT4JPFUwMDU1Pjs8RElBRVJFU0lTK0NBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxREE+CTxVMDA1NT47PERJQUVSRVNJUytDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDE3MD4JPFUwMDU1Pjs8RE9VQkxFLUFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNzE+CTxVMDA1NT47PERPVUJMRS1BQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVFNj4JPFUwMDU1Pjs8SE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUU3Pgk8VTAwNTU+OzxIT09LPjs8U01BTEw+O0lHTk9SRQorPFUwMTY4Pgk8VTAwNTU+OzxUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUwMTY5Pgk8VTAwNTU+OzxUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUU3OD4JPFUwMDU1Pjs8VElMREUrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU3OT4JPFUwMDU1Pjs8VElMREUrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFNzQ+CTxVMDA1NT47PFRJTERFLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNzU+CTxVMDA1NT47PFRJTERFLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUxRUU0Pgk8VTAwNTU+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFNT4JPFUwMDU1Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTcyPgk8VTAwNTU+OzxPR09ORUs+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE3Mz4JPFUwMDU1Pjs8T0dPTkVLPjs8U01BTEw+O0lHTk9SRQorPFUwMTZBPgk8VTAwNTU+OzxNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE2Qj4JPFUwMDU1Pjs8TUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRTdBPgk8VTAwNTU+OzxNQUNST04rRElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFN0I+CTxVMDA1NT47PE1BQ1JPTitESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFNzI+CTxVMDA1NT47PE1BQ1JPTitESUFFUkVTSVMtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU3Mz4JPFUwMDU1Pjs8TUFDUk9OK0RJQUVSRVNJUy1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUU3Nj4JPFUwMDU1Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU3Nz4JPFUwMDU1Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTAxQUY+CTxVMDA1NT47PEhPUk4+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFCMD4JPFUwMDU1Pjs8SE9STj47PFNNQUxMPjtJR05PUkUKKzxVMUVFOD4JPFUwMDU1Pjs8SE9STitBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRUU5Pgk8VTAwNTU+OzxIT1JOK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRUVBPgk8VTAwNTU+OzxIT1JOK0dSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRUI+CTxVMDA1NT47PEhPUk4rR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFRUM+CTxVMDA1NT47PEhPUk4rSE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUVEPgk8VTAwNTU+OzxIT1JOK0hPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFRUU+CTxVMDA1NT47PEhPUk4rVElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFRj4JPFUwMDU1Pjs8SE9STitUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUVGMD4JPFUwMDU1Pjs8SE9STitET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVGMT4JPFUwMDU1Pjs8SE9STitET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8dTg+Cis8VTAwNTY+CTxVMDA1Nj47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3Nj4JPFUwMDU2Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMUU3Qz4JPFUwMDU2Pjs8VElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU3RD4JPFUwMDU2Pjs8VElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFN0U+CTxVMDA1Nj47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTdGPgk8VTAwNTY+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8djg+Cis8VTAwNTc+CTxVMDA1Nj47PFUwMDU3Pjs8Tk9ORT47PENBUElUQUw+Cis8VTAwNzc+CTxVMDA1Nj47PFUwMDU3Pjs8Tk9ORT47PFNNQUxMPgorPFUxRTgyPgk8VTAwNTY+OzxVMDA1Nz47PEFDVVRFPjs8Q0FQSVRBTD4KKzxVMUU4Mz4JPFUwMDU2Pjs8VTAwNTc+OzxBQ1VURT47PFNNQUxMPgorPFUxRTgwPgk8VTAwNTY+OzxVMDA1Nz47PEdSQVZFPjs8Q0FQSVRBTD4KKzxVMUU4MT4JPFUwMDU2Pjs8VTAwNTc+OzxHUkFWRT47PFNNQUxMPgorPFUwMTc0Pgk8VTAwNTY+OzxVMDA1Nz47PENJUkNVTUZMRVg+OzxDQVBJVEFMPgorPFUwMTc1Pgk8VTAwNTY+OzxVMDA1Nz47PENJUkNVTUZMRVg+OzxTTUFMTD4KKzxVMUU4OD4JPFUwMDU2Pjs8VTAwNTc+OzxNQUNST04+OzxDQVBJVEFMPgorPFUxRTg5Pgk8VTAwNTY+OzxVMDA1Nz47PE1BQ1JPTj47PFNNQUxMPgorPFUxRTg2Pgk8VTAwNTY+OzxVMDA1Nz47PERPVD47PENBUElUQUw+Cis8VTFFODc+CTxVMDA1Nj47PFUwMDU3Pjs8RE9UPjs8U01BTEw+Cis8VTFFODQ+CTxVMDA1Nj47PFUwMDU3Pjs8RElBRVJFU0lTPjs8Q0FQSVRBTD4KKzxVMUU4NT4JPFUwMDU2Pjs8VTAwNTc+OzxESUFFUkVTSVM+OzxTTUFMTD4KKzxVMDBENT4gPFUwMEQ1Pjs8VElMREU+OzxDQVBJVEFMPgorPFUwMEY1PiA8VTAwRDU+OzxUSUxERT47PFNNQUxMPgorPFUwMEM0PiA8VTAwQzQ+OzxESUFFUkVTSVM+OzxDQVBJVEFMPgorPFUwMEU0PiA8VTAwQzQ+OzxESUFFUkVTSVM+OzxTTUFMTD4KKzxVMDBENj4gPFUwMEQ2Pjs8RElBRVJFU0lTPjs8Q0FQSVRBTD4KKzxVMDBGNj4gPFUwMEQ2Pjs8RElBRVJFU0lTPjs8U01BTEw+Cis8VTAwREM+IDxVMDBEQz47PERJQUVSRVNJUz47PENBUElUQUw+Cis8VTAwRkM+IDxVMDBEQz47PERJQUVSRVNJUz47PFNNQUxMPgorPHc4PgorPFUwMDU4Pgk8VTAwNTg+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzg+CTxVMDA1OD47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFOEM+CTxVMDA1OD47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUxRThEPgk8VTAwNTg+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFOEE+CTxVMDA1OD47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRThCPgk8VTAwNTg+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8eDg+Cis8VTAwNTk+CTxVMDA1OT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3OT4JPFUwMDU5Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDBERD4JPFUwMDU5Pjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGRD4JPFUwMDU5Pjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFRjI+CTxVMDA1OT47PEdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRjM+CTxVMDA1OT47PEdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTc2Pgk8VTAwNTk+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNzc+CTxVMDA1OT47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTAxNzg+CTxVMDA1OT47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUwMEZGPgk8VTAwNTk+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFRjY+CTxVMDA1OT47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVGNz4JPFUwMDU5Pjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVGOD4JPFUwMDU5Pjs8VElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVGOT4JPFUwMDU5Pjs8VElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFOEU+CTxVMDA1OT47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRThGPgk8VTAwNTk+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFRjQ+CTxVMDA1OT47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUY1Pgk8VTAwNTk+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8eTg+Cis8VTFFOTA+CTxVMDA1QT47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU5MT4JPFUwMDVBPjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMUU5Mj4JPFUwMDVBPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFOTM+CTxVMDA1QT47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDFCNT4JPFUwMDVBPjs8U1RST0tFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxQjY+CTxVMDA1QT47PFNUUk9LRT47PFNNQUxMPjtJR05PUkUKKzxVMUU5ND4JPFUwMDVBPjs8TElORS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTk1Pgk8VTAwNUE+OzxMSU5FLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPHo4PgorPFUwMzkxPgk8VTAzOTE+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzg2Pgk8VTAzOTE+OzxDQVBJVEFMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0IxPgk8VTAzOTE+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBQz4JPFUwMzkxPjs8U01BTEw+OzxUT05PUz47SUdOT1JFCis8VTAzOTI+CTxVMDM5Mj47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQjI+CTxVMDM5Mj47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzkzPgk8VTAzOTM+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0IzPgk8VTAzOTM+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDM5ND4JPFUwMzk0Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCND4JPFUwMzk0Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOTU+CTxVMDM5NT47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzODg+CTxVMDM5NT47PENBUElUQUw+OzxUT05PUz47SUdOT1JFCis8VTAzQjU+CTxVMDM5NT47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0FEPgk8VTAzOTU+OzxTTUFMTD47PFRPTk9TPjtJR05PUkUKKzxVMDM5Nj4JPFUwMzk2Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCNj4JPFUwMzk2Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOTc+CTxVMDM5Nz47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzODk+CTxVMDM5Nz47PENBUElUQUw+OzxUT05PUz47SUdOT1JFCis8VTAzQjc+CTxVMDM5Nz47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0FFPgk8VTAzOTc+OzxTTUFMTD47PFRPTk9TPjtJR05PUkUKKzxVMDM5OD4JPFUwMzk4Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCOD4JPFUwMzk4Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOTk+CTxVMDM5OT47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzOEE+CTxVMDM5OT47PENBUElUQUw+OzxUT05PUz47SUdOT1JFCis8VTAzQUE+CTxVMDM5OT47PENBUElUQUw+OzxESUFMWVRJQ0E+O0lHTk9SRQorPFUwM0I5Pgk8VTAzOTk+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBRj4JPFUwMzk5Pjs8U01BTEw+OzxUT05PUz47SUdOT1JFCis8VTAzQ0E+CTxVMDM5OT47PFNNQUxMPjs8RElBTFlUSUNBPjtJR05PUkUKKzxVMDM5MD4JPFUwMzk5Pjs8U01BTEw+OzxESUFMWVRJQ0ErVE9OT1M+O0lHTk9SRQorPFUwMzlBPgk8VTAzOUE+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0JBPgk8VTAzOUE+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDM5Qj4JPFUwMzlCPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCQj4JPFUwMzlCPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOUM+CTxVMDM5Qz47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQkM+CTxVMDM5Qz47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzlEPgk8VTAzOUQ+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0JEPgk8VTAzOUQ+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDM5RT4JPFUwMzlFPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCRT4JPFUwMzlFPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOUY+CTxVMDM5Rj47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzOEM+CTxVMDM5Rj47PENBUElUQUw+OzxUT05PUz47SUdOT1JFCis8VTAzQkY+CTxVMDM5Rj47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0NDPgk8VTAzOUY+OzxTTUFMTD47PFRPTk9TPjtJR05PUkUKKzxVMDNBMD4JPFUwM0EwPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDMD4JPFUwM0EwPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQTE+CTxVMDNBMT47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzE+CTxVMDNBMT47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0EzPgk8VTAzQTM+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0MzPgk8VTAzQTM+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDMj4JPFUwM0EzPjs8U01BTEw+OzxVMDNDMj47SUdOT1JFCis8VTAzQTQ+CTxVMDNBND47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzQ+CTxVMDNBND47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0E1Pgk8VTAzQTU+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzhFPgk8VTAzQTU+OzxDQVBJVEFMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0FCPgk8VTAzQTU+OzxDQVBJVEFMPjs8RElBTFlUSUNBPjtJR05PUkUKKzxVMDNDNT4JPFUwM0E1Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQ0Q+CTxVMDNBNT47PFNNQUxMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0NCPgk8VTAzQTU+OzxTTUFMTD47PERJQUxZVElDQT47SUdOT1JFCis8VTAzQjA+CTxVMDNBNT47PFNNQUxMPjs8RElBTFlUSUNBK1RPTk9TPjtJR05PUkUKKzxVMDNBNj4JPFUwM0E2Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDNj4JPFUwM0E2Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQTc+CTxVMDNBNz47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzc+CTxVMDNBNz47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0E4Pgk8VTAzQTg+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0M4Pgk8VTAzQTg+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBOT4JPFUwM0E5Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDM4Rj4JPFUwM0E5Pjs8Q0FQSVRBTD47PFRPTk9TPjtJR05PUkUKKzxVMDNDOT4JPFUwM0E5Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQ0U+CTxVMDNBOT47PFNNQUxMPjs8VE9OT1M+O0lHTk9SRQorPFUwNDEwPgk8VTA0MTA+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDMwPgk8VTA0MTA+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxMT4JPFUwNDExPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzMT4JPFUwNDExPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTI+CTxVMDQxMj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0MzI+CTxVMDQxMj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDEzPgk8VTA0MTM+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDMzPgk8VTA0MTM+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwMz4JPFUwNDAzPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1Mz4JPFUwNDAzPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0OTA+CTxVMDQ5MD47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0OTE+CTxVMDQ5MD47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDE0Pgk8VTA0MTQ+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDM0Pgk8VTA0MTQ+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwMj4JPFUwNDAyPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1Mj4JPFUwNDAyPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTU+CTxVMDQxNT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0MzU+CTxVMDQxNT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDAxPgk8VTA0MDE+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDUxPgk8VTA0MDE+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwND4JPFUwNDA0Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1ND4JPFUwNDA0Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTY+CTxVMDQxNj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0MzY+CTxVMDQxNj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDE3Pgk8VTA0MTc+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDM3Pgk8VTA0MTc+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxOD4JPFUwNDE4Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzOD4JPFUwNDE4Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MDY+CTxVMDQwNj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NTY+CTxVMDQwNj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDA3Pgk8VTA0MDc+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDU3Pgk8VTA0MDc+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwOD4JPFUwNDA4Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1OD4JPFUwNDA4Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTk+CTxVMDQxOT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0Mzk+CTxVMDQxOT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDFBPgk8VTA0MUE+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDNBPgk8VTA0MUE+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwQz4JPFUwNDBDPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1Qz4JPFUwNDBDPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MUI+CTxVMDQxQj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0M0I+CTxVMDQxQj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDA5Pgk8VTA0MDk+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDU5Pgk8VTA0MDk+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxQz4JPFUwNDFDPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzQz4JPFUwNDFDPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MUQ+CTxVMDQxRD47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0M0Q+CTxVMDQxRD47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDBBPgk8VTA0MEE+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDVBPgk8VTA0MEE+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxRT4JPFUwNDFFPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzRT4JPFUwNDFFPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MUY+CTxVMDQxRj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0M0Y+CTxVMDQxRj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDIwPgk8VTA0MjA+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDQwPgk8VTA0MjA+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyMT4JPFUwNDIxPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0MT4JPFUwNDIxPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MjI+CTxVMDQyMj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDI+CTxVMDQyMj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDBCPgk8VTA0MEI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDVCPgk8VTA0MEI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyMz4JPFUwNDIzPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0Mz4JPFUwNDIzPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MEU+CTxVMDQwRT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NUU+CTxVMDQwRT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDI0Pgk8VTA0MjQ+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDQ0Pgk8VTA0MjQ+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyNT4JPFUwNDI1Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0NT4JPFUwNDI1Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MjY+CTxVMDQyNj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDY+CTxVMDQyNj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDA1Pgk8VTA0MDU+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDU1Pgk8VTA0MDU+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyNz4JPFUwNDI3Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0Nz4JPFUwNDI3Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MEY+CTxVMDQwRj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NUY+CTxVMDQwRj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDI4Pgk8VTA0Mjg+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDQ4Pgk8VTA0Mjg+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyOT4JPFUwNDI5Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0OT4JPFUwNDI5Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0NEE+CTxVMDQ0QT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDJBPgk8VTA0NEE+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDJCPgk8VTA0MkI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDRCPgk8VTA0MkI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQ0Qz4JPFUwNDRDPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MkM+CTxVMDQ0Qz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0MkQ+CTxVMDQyRD47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NEQ+CTxVMDQyRD47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDJFPgk8VTA0MkU+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDRFPgk8VTA0MkU+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyRj4JPFUwNDJGPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0Rj4JPFUwNDJGPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0NjI+CTxVMDQ2Mj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NjM+CTxVMDQ2Mj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDZBPgk8VTA0NkE+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDZCPgk8VTA0NkE+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQ3Mj4JPFUwNDcyPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ3Mz4JPFUwNDcyPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0NzQ+CTxVMDQ3ND47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NzU+CTxVMDQ3ND47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDgwPgk8VTA0ODA+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDgxPgk8VTA0ODA+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDVEMD4JPFUwNUQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQxPgk8VTA1RDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDI+CTxVMDVEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEMz4JPFUwNUQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQ0Pgk8VTA1RDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDU+CTxVMDVENT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVENj4JPFUwNUQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQ3Pgk8VTA1RDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDg+CTxVMDVEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEOT4JPFUwNUQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNURBPgk8VTA1REE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1REI+CTxVMDVEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEQz4JPFUwNURDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUREPgk8VTA1REQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1REU+CTxVMDVERT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVERj4JPFUwNURGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUUwPgk8VTA1RTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTE+CTxVMDVFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFMj4JPFUwNUUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUUzPgk8VTA1RTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTQ+CTxVMDVFND47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFNT4JPFUwNUU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUU2Pgk8VTA1RTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTc+CTxVMDVFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFOD4JPFUwNUU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUU5Pgk8VTA1RTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RUE+CTxVMDVFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKworJSBBcmFiaWMgY29sbGF0aW5nCisKKzxVMDYwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNjBDPgorPFUwNjFCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA2MUI+Cis8VTA2MUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDYxRj4KKzxVMDY0MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNjQwPgorCis8VTA2MjE+CTxVMDYyMT47PFUwNjIxPjtJR05PUkU7SUdOT1JFCis8VTA2MjI+CTxVMDYyMj47PFUwNjIyPjtJR05PUkU7SUdOT1JFCis8VUZFODI+CTxVMDYyMj47PFVGRTgyPjtJR05PUkU7SUdOT1JFCis8VTA2MjM+CTxVMDYyMT47PFUwNjIzPjtJR05PUkU7SUdOT1JFCis8VUZFODQ+CTxVMDYyMT47PFVGRTg0PjtJR05PUkU7SUdOT1JFCis8VTA2MjQ+CTxVMDYyMT47PFUwNjI0PjtJR05PUkU7SUdOT1JFCis8VTA2MjU+CTxVMDYyMT47PFUwNjI1PjtJR05PUkU7SUdOT1JFCis8VUZFODg+CTxVMDYyMT47PFVGRTg4PjtJR05PUkU7SUdOT1JFCis8VTA2MjY+CTxVMDYyMT47PFUwNjI2PjtJR05PUkU7SUdOT1JFCis8VTA2NzA+CTxVMDY3MD47PFUwNjcwPjtJR05PUkU7SUdOT1JFCis8VTA2Mjc+CTxVMDYyNz47PFUwNjI3PjtJR05PUkU7SUdOT1JFCis8VUZFOEQ+CTxVMDYyNz47PFVGRThEPjtJR05PUkU7SUdOT1JFCis8VUZFOEU+CTxVMDYyNz47PFVGRThFPjtJR05PUkU7SUdOT1JFCis8VUUwMTY+CTxVMDYyNz47PFVFMDE2PjtJR05PUkU7SUdOT1JFCis8VTA2Mjg+CTxVMDYyOD47PFUwNjI4PjtJR05PUkU7SUdOT1JFCis8VUZFOEY+CTxVMDYyOD47PFVGRThGPjtJR05PUkU7SUdOT1JFCis8VUZFOTA+CTxVMDYyOD47PFVGRTkwPjtJR05PUkU7SUdOT1JFCis8VUZFOTE+CTxVMDYyOD47PFVGRTkxPjtJR05PUkU7SUdOT1JFCis8VUZFOTI+CTxVMDYyOD47PFVGRTkyPjtJR05PUkU7SUdOT1JFCis8VTA2N0U+CTxVMDY3RT47PFUwNjdFPjtJR05PUkU7SUdOT1JFCis8VTA2QTQ+CTxVMDZBND47PFUwNkE0PjtJR05PUkU7SUdOT1JFCis8VTA2Mjk+CTxVMDYyOT47PFUwNjI5PjtJR05PUkU7SUdOT1JFCis8VUZFOTM+CTxVMDYyOT47PFVGRTkzPjtJR05PUkU7SUdOT1JFCis8VUZFOTQ+CTxVMDYyOT47PFVGRTk0PjtJR05PUkU7SUdOT1JFCis8VTA2MkE+CTxVMDYyOT47PFUwNjJBPjtJR05PUkU7SUdOT1JFCis8VUZFOTU+CTxVMDYyOT47PFVGRTk1PjtJR05PUkU7SUdOT1JFCis8VUZFOTY+CTxVMDYyOT47PFVGRTk2PjtJR05PUkU7SUdOT1JFCis8VUZFOTc+CTxVMDYyOT47PFVGRTk3PjtJR05PUkU7SUdOT1JFCis8VUZFOTg+CTxVMDYyOT47PFVGRTk4PjtJR05PUkU7SUdOT1JFCis8VTA2MkI+CTxVMDYyQj47PFUwNjJCPjtJR05PUkU7SUdOT1JFCis8VUZFOTk+CTxVMDYyQj47PFVGRTk5PjtJR05PUkU7SUdOT1JFCis8VUZFOUE+CTxVMDYyQj47PFVGRTlBPjtJR05PUkU7SUdOT1JFCis8VUZFOUI+CTxVMDYyQj47PFVGRTlCPjtJR05PUkU7SUdOT1JFCis8VUZFOUM+CTxVMDYyQj47PFVGRTlDPjtJR05PUkU7SUdOT1JFCis8VTA2MkM+CTxVMDYyQz47PFUwNjJDPjtJR05PUkU7SUdOT1JFCis8VUZFOUQ+CTxVMDYyQz47PFVGRTlEPjtJR05PUkU7SUdOT1JFCis8VUZFOUU+CTxVMDYyQz47PFVGRTlFPjtJR05PUkU7SUdOT1JFCis8VUZFOUY+CTxVMDYyQz47PFVGRTlGPjtJR05PUkU7SUdOT1JFCis8VUZFQTA+CTxVMDYyQz47PFVGRUEwPjtJR05PUkU7SUdOT1JFCis8VTA2MkQ+CTxVMDYyRD47PFUwNjJEPjtJR05PUkU7SUdOT1JFCis8VUZFQTE+CTxVMDYyRD47PFVGRUExPjtJR05PUkU7SUdOT1JFCis8VUZFQTI+CTxVMDYyRD47PFVGRUEyPjtJR05PUkU7SUdOT1JFCis8VUZFQTM+CTxVMDYyRD47PFVGRUEzPjtJR05PUkU7SUdOT1JFCis8VUZFQTQ+CTxVMDYyRD47PFVGRUE0PjtJR05PUkU7SUdOT1JFCis8VTA2MkU+CTxVMDYyRT47PFUwNjJFPjtJR05PUkU7SUdOT1JFCis8VUZFQTU+CTxVMDYyRT47PFVGRUE1PjtJR05PUkU7SUdOT1JFCis8VUZFQTY+CTxVMDYyRT47PFVGRUE2PjtJR05PUkU7SUdOT1JFCis8VUZFQTc+CTxVMDYyRT47PFVGRUE3PjtJR05PUkU7SUdOT1JFCis8VUZFQTg+CTxVMDYyRT47PFVGRUE4PjtJR05PUkU7SUdOT1JFCis8VTA2MkY+CTxVMDYyRj47PFUwNjJGPjtJR05PUkU7SUdOT1JFCis8VUZFQTk+CTxVMDYyRj47PFVGRUE5PjtJR05PUkU7SUdOT1JFCis8VUZFQUE+CTxVMDYyRj47PFVGRUFBPjtJR05PUkU7SUdOT1JFCis8VTA2MzA+CTxVMDYzMD47PFUwNjMwPjtJR05PUkU7SUdOT1JFCis8VUZFQUI+CTxVMDYzMD47PFVGRUFCPjtJR05PUkU7SUdOT1JFCis8VUZFQUM+CTxVMDYzMD47PFVGRUFDPjtJR05PUkU7SUdOT1JFCis8VTA2MzE+CTxVMDYzMT47PFUwNjMxPjtJR05PUkU7SUdOT1JFCis8VUZFQUQ+CTxVMDYzMT47PFVGRUFEPjtJR05PUkU7SUdOT1JFCis8VUZFQUU+CTxVMDYzMT47PFVGRUFFPjtJR05PUkU7SUdOT1JFCis8VTA2MzI+CTxVMDYzMj47PFUwNjMyPjtJR05PUkU7SUdOT1JFCis8VUZFQUY+CTxVMDYzMj47PFVGRUFGPjtJR05PUkU7SUdOT1JFCis8VUZFQjA+CTxVMDYzMj47PFVGRUIwPjtJR05PUkU7SUdOT1JFCis8VTA2MzM+CTxVMDYzMz47PFUwNjMzPjtJR05PUkU7SUdOT1JFCis8VUZFQjE+CTxVMDYzMz47PFVGRUIxPjtJR05PUkU7SUdOT1JFCis8VUZFQjI+CTxVMDYzMz47PFVGRUIyPjtJR05PUkU7SUdOT1JFCis8VUZFQjM+CTxVMDYzMz47PFVGRUIzPjtJR05PUkU7SUdOT1JFCis8VUZFQjQ+CTxVMDYzMz47PFVGRUI0PjtJR05PUkU7SUdOT1JFCis8VTA2MzQ+CTxVMDYzND47PFUwNjM0PjtJR05PUkU7SUdOT1JFCis8VUZFQjU+CTxVMDYzND47PFVGRUI1PjtJR05PUkU7SUdOT1JFCis8VUZFQjY+CTxVMDYzND47PFVGRUI2PjtJR05PUkU7SUdOT1JFCis8VUZFQjc+CTxVMDYzND47PFVGRUI3PjtJR05PUkU7SUdOT1JFCis8VUZFQjg+CTxVMDYzND47PFVGRUI4PjtJR05PUkU7SUdOT1JFCis8VTA2MzU+CTxVMDYzNT47PFUwNjM1PjtJR05PUkU7SUdOT1JFCis8VUZFQjk+CTxVMDYzNT47PFVGRUI5PjtJR05PUkU7SUdOT1JFCis8VUZFQkE+CTxVMDYzNT47PFVGRUJBPjtJR05PUkU7SUdOT1JFCis8VUZFQkI+CTxVMDYzNT47PFVGRUJCPjtJR05PUkU7SUdOT1JFCis8VUZFQkM+CTxVMDYzNT47PFVGRUJDPjtJR05PUkU7SUdOT1JFCis8VTA2MzY+CTxVMDYzNj47PFUwNjM2PjtJR05PUkU7SUdOT1JFCis8VUZFQkQ+CTxVMDYzNj47PFVGRUJEPjtJR05PUkU7SUdOT1JFCis8VUZFQkU+CTxVMDYzNj47PFVGRUJFPjtJR05PUkU7SUdOT1JFCis8VUZFQkY+CTxVMDYzNj47PFVGRUJGPjtJR05PUkU7SUdOT1JFCis8VUZFQzA+CTxVMDYzNj47PFVGRUMwPjtJR05PUkU7SUdOT1JFCis8VTA2Mzc+CTxVMDYzNz47PFUwNjM3PjtJR05PUkU7SUdOT1JFCis8VUZFQzE+CTxVMDYzNz47PFVGRUMxPjtJR05PUkU7SUdOT1JFCis8VUZFQzI+CTxVMDYzNz47PFVGRUMyPjtJR05PUkU7SUdOT1JFCis8VUZFQzM+CTxVMDYzNz47PFVGRUMzPjtJR05PUkU7SUdOT1JFCis8VUZFQzQ+CTxVMDYzNz47PFVGRUM0PjtJR05PUkU7SUdOT1JFCis8VTA2Mzg+CTxVMDYzOD47PFUwNjM4PjtJR05PUkU7SUdOT1JFCis8VUZFQzU+CTxVMDYzOD47PFVGRUM1PjtJR05PUkU7SUdOT1JFCis8VUZFQzY+CTxVMDYzOD47PFVGRUM2PjtJR05PUkU7SUdOT1JFCis8VUZFQzc+CTxVMDYzOD47PFVGRUM3PjtJR05PUkU7SUdOT1JFCis8VUZFQzg+CTxVMDYzOD47PFVGRUM4PjtJR05PUkU7SUdOT1JFCis8VTA2Mzk+CTxVMDYzOT47PFUwNjM5PjtJR05PUkU7SUdOT1JFCis8VUZFQzk+CTxVMDYzOT47PFVGRUM5PjtJR05PUkU7SUdOT1JFCis8VUZFQ0E+CTxVMDYzOT47PFVGRUNBPjtJR05PUkU7SUdOT1JFCis8VUZFQ0I+CTxVMDYzOT47PFVGRUNCPjtJR05PUkU7SUdOT1JFCis8VUZFQ0M+CTxVMDYzOT47PFVGRUNDPjtJR05PUkU7SUdOT1JFCis8VTA2M0E+CTxVMDYzQT47PFUwNjNBPjtJR05PUkU7SUdOT1JFCis8VUZFQ0Q+CTxVMDYzQT47PFVGRUNEPjtJR05PUkU7SUdOT1JFCis8VUZFQ0U+CTxVMDYzQT47PFVGRUNFPjtJR05PUkU7SUdOT1JFCis8VUZFQ0Y+CTxVMDYzQT47PFVGRUNGPjtJR05PUkU7SUdOT1JFCis8VUZFRDA+CTxVMDYzQT47PFVGRUQwPjtJR05PUkU7SUdOT1JFCis8VTA2NDE+CTxVMDY0MT47PFUwNjQxPjtJR05PUkU7SUdOT1JFCis8VUZFRDE+CTxVMDY0MT47PFVGRUQxPjtJR05PUkU7SUdOT1JFCis8VUZFRDI+CTxVMDY0MT47PFVGRUQyPjtJR05PUkU7SUdOT1JFCis8VUZFRDM+CTxVMDY0MT47PFVGRUQzPjtJR05PUkU7SUdOT1JFCis8VUZFRDQ+CTxVMDY0MT47PFVGRUQ0PjtJR05PUkU7SUdOT1JFCis8VTA2NDI+CTxVMDY0Mj47PFUwNjQyPjtJR05PUkU7SUdOT1JFCis8VUZFRDU+CTxVMDY0Mj47PFVGRUQ1PjtJR05PUkU7SUdOT1JFCis8VUZFRDY+CTxVMDY0Mj47PFVGRUQ2PjtJR05PUkU7SUdOT1JFCis8VUZFRDc+CTxVMDY0Mj47PFVGRUQ3PjtJR05PUkU7SUdOT1JFCis8VUZFRDg+CTxVMDY0Mj47PFVGRUQ4PjtJR05PUkU7SUdOT1JFCis8VTA2NDM+CTxVMDY0Mz47PFUwNjQzPjtJR05PUkU7SUdOT1JFCis8VUZFRDk+CTxVMDY0Mz47PFVGRUQ5PjtJR05PUkU7SUdOT1JFCis8VUZFREE+CTxVMDY0Mz47PFVGRURBPjtJR05PUkU7SUdOT1JFCis8VUZFREI+CTxVMDY0Mz47PFVGRURCPjtJR05PUkU7SUdOT1JFCis8VUZFREM+CTxVMDY0Mz47PFVGRURDPjtJR05PUkU7SUdOT1JFCis8VTA2NDQ+CTxVMDY0ND47PFUwNjQ0PjtJR05PUkU7SUdOT1JFCis8VUZFREQ+CTxVMDY0ND47PFVGRUREPjtJR05PUkU7SUdOT1JFCis8VUZFREU+CTxVMDY0ND47PFVGRURFPjtJR05PUkU7SUdOT1JFCis8VUZFREY+CTxVMDY0ND47PFVGRURGPjtJR05PUkU7SUdOT1JFCis8VUZFRTA+CTxVMDY0ND47PFVGRUUwPjtJR05PUkU7SUdOT1JFCis8VTA2NDU+CTxVMDY0NT47PFUwNjQ1PjtJR05PUkU7SUdOT1JFCis8VUZFRTE+CTxVMDY0NT47PFVGRUUxPjtJR05PUkU7SUdOT1JFCis8VUZFRTI+CTxVMDY0NT47PFVGRUUyPjtJR05PUkU7SUdOT1JFCis8VUZFRTM+CTxVMDY0NT47PFVGRUUzPjtJR05PUkU7SUdOT1JFCis8VUZFRTQ+CTxVMDY0NT47PFVGRUU0PjtJR05PUkU7SUdOT1JFCis8VTA2NDY+CTxVMDY0Nj47PFUwNjQ2PjtJR05PUkU7SUdOT1JFCis8VUZFRTU+CTxVMDY0Nj47PFVGRUU1PjtJR05PUkU7SUdOT1JFCis8VUZFRTY+CTxVMDY0Nj47PFVGRUU2PjtJR05PUkU7SUdOT1JFCis8VUZFRTc+CTxVMDY0Nj47PFVGRUU3PjtJR05PUkU7SUdOT1JFCis8VUZFRTg+CTxVMDY0Nj47PFVGRUU4PjtJR05PUkU7SUdOT1JFCis8VTA2NDc+CTxVMDY0Nz47PFUwNjQ3PjtJR05PUkU7SUdOT1JFCis8VUZFRTk+CTxVMDY0Nz47PFVGRUU5PjtJR05PUkU7SUdOT1JFCis8VUZFRUE+CTxVMDY0Nz47PFVGRUVBPjtJR05PUkU7SUdOT1JFCis8VUZFRUI+CTxVMDY0Nz47PFVGRUVCPjtJR05PUkU7SUdOT1JFCis8VUZFRUM+CTxVMDY0Nz47PFVGRUVDPjtJR05PUkU7SUdOT1JFCis8VTA2NDg+CTxVMDY0OD47PFUwNjQ4PjtJR05PUkU7SUdOT1JFCis8VUZFRUQ+CTxVMDY0OD47PFVGRUVEPjtJR05PUkU7SUdOT1JFCis8VUZFRUU+CTxVMDY0OD47PFVGRUVFPjtJR05PUkU7SUdOT1JFCis8VTA2NDk+CTxVMDY0OT47PFUwNjQ5PjtJR05PUkU7SUdOT1JFCis8VUZFRUY+CTxVMDY0OT47PFVGRUVGPjtJR05PUkU7SUdOT1JFCis8VUZFRjA+CTxVMDY0OT47PFVGRUYwPjtJR05PUkU7SUdOT1JFCis8VTA2NEE+CTxVMDY0QT47PFUwNjRBPjtJR05PUkU7SUdOT1JFCis8VUZFRjE+CTxVMDY0QT47PFVGRUYxPjtJR05PUkU7SUdOT1JFCis8VUZFRjI+CTxVMDY0QT47PFVGRUYyPjtJR05PUkU7SUdOT1JFCis8VUZFRjM+CTxVMDY0QT47PFVGRUYzPjtJR05PUkU7SUdOT1JFCis8VUZFRjQ+CTxVMDY0QT47PFVGRUY0PjtJR05PUkU7SUdOT1JFCisKKzxVMDY0Qj4JSUdOT1JFO0lHTk9SRTs8VTA2NEI+O0lHTk9SRQorPFUwNjRDPglJR05PUkU7SUdOT1JFOzxVMDY0Qz47SUdOT1JFCis8VTA2NEQ+CUlHTk9SRTtJR05PUkU7PFUwNjREPjtJR05PUkUKKzxVMDY0RT4JSUdOT1JFO0lHTk9SRTs8VTA2NEU+O0lHTk9SRQorPFUwNjRGPglJR05PUkU7SUdOT1JFOzxVMDY0Rj47SUdOT1JFCis8VTA2NTA+CUlHTk9SRTtJR05PUkU7PFUwNjUwPjtJR05PUkUKKzxVMDY1MT4JSUdOT1JFO0lHTk9SRTs8VTA2NTE+O0lHTk9SRQorPFVGRTdEPglJR05PUkU7SUdOT1JFOzxVRkU3RD47SUdOT1JFCis8VTA2NTI+CUlHTk9SRTtJR05PUkU7PFUwNjUyPjtJR05PUkUKKworPFUwNjYwPgk8VTAwMzA+OzxVMDY2MD47SUdOT1JFO0lHTk9SRQorPFUwNjYxPgk8VTAwMzE+OzxVMDY2MT47SUdOT1JFO0lHTk9SRQorPFUwNjYyPgk8VTAwMzI+OzxVMDY2Mj47SUdOT1JFO0lHTk9SRQorPFUwNjYzPgk8VTAwMzM+OzxVMDY2Mz47SUdOT1JFO0lHTk9SRQorPFUwNjY0Pgk8VTAwMzQ+OzxVMDY2ND47SUdOT1JFO0lHTk9SRQorPFUwNjY1Pgk8VTAwMzU+OzxVMDY2NT47SUdOT1JFO0lHTk9SRQorPFUwNjY2Pgk8VTAwMzY+OzxVMDY2Nj47SUdOT1JFO0lHTk9SRQorPFUwNjY3Pgk8VTAwMzc+OzxVMDY2Nz47SUdOT1JFO0lHTk9SRQorPFUwNjY4Pgk8VTAwMzg+OzxVMDY2OD47SUdOT1JFO0lHTk9SRQorPFUwNjY5Pgk8VTAwMzk+OzxVMDY2OT47SUdOT1JFO0lHTk9SRQorCis8VUZFRjU+CSI8VTA2NDQ+PFUwNjIyPiI7IjxVMDY0ND48VTA2MjI+IjsiPFVGRUY1PjxVRkVGNT4iO0lHTk9SRQorPFVGRUY2PgkiPFUwNjQ0PjxVMDYyMj4iOyI8VTA2NDQ+PFVGRTgyPiI7IjxVRkVGNj48VUZFRjY+IjtJR05PUkUKKzxVRkVGNz4JIjxVMDY0ND48VTA2MjM+IjsiPFUwNjQ0PjxVMDYyMz4iOyI8VUZFRjc+PFVGRUY3PiI7SUdOT1JFCis8VUZFRjg+CSI8VTA2NDQ+PFUwNjIzPiI7IjxVMDY0ND48VUZFODQ+IjsiPFVGRUY4PjxVRkVGOD4iO0lHTk9SRQorPFVGRUY5PgkiPFUwNjQ0PjxVMDYyNT4iOyI8VTA2NDQ+PFUwNjI1PiI7IjxVRkVGOT48VUZFRjk+IjtJR05PUkUKKzxVRkVGQT4JIjxVMDY0ND48VTA2MjU+IjsiPFUwNjQ0PjxVRkU4OD4iOyI8VUZFRkE+PFVGRUZBPiI7SUdOT1JFCis8VUZFRkI+CSI8VTA2NDQ+PFUwNjI3PiI7IjxVMDY0ND48VUZFOEQ+IjsiPFVGRUZCPjxVRkVGQj4iO0lHTk9SRQorPFVGRUZDPgkiPFUwNjQ0PjxVMDYyNz4iOyI8VTA2NDQ+PFVGRThFPiI7IjxVRkVGQz48VUZFRkM+IjtJR05PUkUKKworJSBrYXRha2FuYS9oaXJhZ2FuYSBzb3J0aW5nCislIGJhc2UgaXMga2F0YWthbmEsIGFzIHRoaXMgaXMgcHJlc2VudCBpbiBtb3N0IGNoYXJzZXRzCislIG5vcm1hbCBiZWZvcmUgdm9pY2VkIGJlZm9yZSBzZW1pLXZvaWNlZAorJSBzbWFsbCB2b2NhbHMgYmVmb3JlIG5vcm1hbCB2b2NhbHMKKyUga2F0YWthbmEgYmVmb3JlIGhpcmFnYW5hCisKKzxVMzBBMT4JPFUzMEExPjs8VTMwQTE+O0lHTk9SRTtJR05PUkUKKzxVMzA0MT4JPFUzMEExPjs8VTMwNDE+O0lHTk9SRTtJR05PUkUKKzxVMzBBMj4JPFUzMEExPjs8VTMwQTI+O0lHTk9SRTtJR05PUkUKKzxVMzA0Mj4JPFUzMEExPjs8VTMwNDI+O0lHTk9SRTtJR05PUkUKKzxVMzBBMz4JPFUzMEEzPjs8VTMwQTM+O0lHTk9SRTtJR05PUkUKKzxVMzA0Mz4JPFUzMEEzPjs8VTMwNDM+O0lHTk9SRTtJR05PUkUKKzxVMzBBND4JPFUzMEEzPjs8VTMwQTQ+O0lHTk9SRTtJR05PUkUKKzxVMzA0ND4JPFUzMEEzPjs8VTMwNDQ+O0lHTk9SRTtJR05PUkUKKzxVMzBBNT4JPFUzMEE1Pjs8VTMwQTU+O0lHTk9SRTtJR05PUkUKKzxVMzA0NT4JPFUzMEE1Pjs8VTMwNDU+O0lHTk9SRTtJR05PUkUKKzxVMzBBNj4JPFUzMEE1Pjs8VTMwQTY+O0lHTk9SRTtJR05PUkUKKzxVMzA0Nj4JPFUzMEE1Pjs8VTMwNDY+O0lHTk9SRTtJR05PUkUKKzxVMzBGND4JPFUzMEE1Pjs8VTMwRjQ+O0lHTk9SRTtJR05PUkUKKzxVMzBBNz4JPFUzMEE3Pjs8VTMwQTc+O0lHTk9SRTtJR05PUkUKKzxVMzA0Nz4JPFUzMEE3Pjs8VTMwNDc+O0lHTk9SRTtJR05PUkUKKzxVMzBBOD4JPFUzMEE3Pjs8VTMwQTg+O0lHTk9SRTtJR05PUkUKKzxVMzA0OD4JPFUzMEE3Pjs8VTMwNDg+O0lHTk9SRTtJR05PUkUKKzxVMzBBOT4JPFUzMEE5Pjs8VTMwQTk+O0lHTk9SRTtJR05PUkUKKzxVMzA0OT4JPFUzMEE5Pjs8VTMwNDk+O0lHTk9SRTtJR05PUkUKKzxVMzBBQT4JPFUzMEE5Pjs8VTMwQUE+O0lHTk9SRTtJR05PUkUKKzxVMzA0QT4JPFUzMEE5Pjs8VTMwNEE+O0lHTk9SRTtJR05PUkUKKzxVMzBGNT4JPFUzMEY1Pjs8VTMwRjU+O0lHTk9SRTtJR05PUkUKKzxVMzBBQj4JPFUzMEY1Pjs8VTMwQUI+O0lHTk9SRTtJR05PUkUKKzxVMzA0Qj4JPFUzMEY1Pjs8VTMwNEI+O0lHTk9SRTtJR05PUkUKKzxVMzBBQz4JPFUzMEY1Pjs8VTMwQUM+O0lHTk9SRTtJR05PUkUKKzxVMzA0Qz4JPFUzMEY1Pjs8VTMwNEM+O0lHTk9SRTtJR05PUkUKKzxVMzBBRD4JPFUzMEFEPjs8VTMwQUQ+O0lHTk9SRTtJR05PUkUKKzxVMzA0RD4JPFUzMEFEPjs8VTMwNEQ+O0lHTk9SRTtJR05PUkUKKzxVMzBBRT4JPFUzMEFEPjs8VTMwQUU+O0lHTk9SRTtJR05PUkUKKzxVMzA0RT4JPFUzMEFEPjs8VTMwNEU+O0lHTk9SRTtJR05PUkUKKzxVMzBBRj4JPFUzMEFGPjs8VTMwQUY+O0lHTk9SRTtJR05PUkUKKzxVMzA0Rj4JPFUzMEFGPjs8VTMwNEY+O0lHTk9SRTtJR05PUkUKKzxVMzBCMD4JPFUzMEFGPjs8VTMwQjA+O0lHTk9SRTtJR05PUkUKKzxVMzA1MD4JPFUzMEFGPjs8VTMwNTA+O0lHTk9SRTtJR05PUkUKKzxVMzBGNj4JPFUzMEY2Pjs8VTMwRjY+O0lHTk9SRTtJR05PUkUKKzxVMzBCMT4JPFUzMEY2Pjs8VTMwQjE+O0lHTk9SRTtJR05PUkUKKzxVMzA1MT4JPFUzMEY2Pjs8VTMwNTE+O0lHTk9SRTtJR05PUkUKKzxVMzBCMj4JPFUzMEY2Pjs8VTMwQjI+O0lHTk9SRTtJR05PUkUKKzxVMzA1Mj4JPFUzMEY2Pjs8VTMwNTI+O0lHTk9SRTtJR05PUkUKKzxVMzBCMz4JPFUzMEIzPjs8VTMwQjM+O0lHTk9SRTtJR05PUkUKKzxVMzA1Mz4JPFUzMEIzPjs8VTMwNTM+O0lHTk9SRTtJR05PUkUKKzxVMzBCND4JPFUzMEIzPjs8VTMwQjQ+O0lHTk9SRTtJR05PUkUKKzxVMzA1ND4JPFUzMEIzPjs8VTMwNTQ+O0lHTk9SRTtJR05PUkUKKzxVMzBCNT4JPFUzMEI1Pjs8VTMwQjU+O0lHTk9SRTtJR05PUkUKKzxVMzA1NT4JPFUzMEI1Pjs8VTMwNTU+O0lHTk9SRTtJR05PUkUKKzxVMzBCNj4JPFUzMEI1Pjs8VTMwQjY+O0lHTk9SRTtJR05PUkUKKzxVMzA1Nj4JPFUzMEI1Pjs8VTMwNTY+O0lHTk9SRTtJR05PUkUKKzxVMzBCNz4JPFUzMEI3Pjs8VTMwQjc+O0lHTk9SRTtJR05PUkUKKzxVMzA1Nz4JPFUzMEI3Pjs8VTMwNTc+O0lHTk9SRTtJR05PUkUKKzxVMzBCOD4JPFUzMEI3Pjs8VTMwQjg+O0lHTk9SRTtJR05PUkUKKzxVMzA1OD4JPFUzMEI3Pjs8VTMwNTg+O0lHTk9SRTtJR05PUkUKKzxVMzBCOT4JPFUzMEI5Pjs8VTMwQjk+O0lHTk9SRTtJR05PUkUKKzxVMzA1OT4JPFUzMEI5Pjs8VTMwNTk+O0lHTk9SRTtJR05PUkUKKzxVMzBCQT4JPFUzMEI5Pjs8VTMwQkE+O0lHTk9SRTtJR05PUkUKKzxVMzA1QT4JPFUzMEI5Pjs8VTMwNUE+O0lHTk9SRTtJR05PUkUKKzxVMzBCQj4JPFUzMEJCPjs8VTMwQkI+O0lHTk9SRTtJR05PUkUKKzxVMzA1Qj4JPFUzMEJCPjs8VTMwNUI+O0lHTk9SRTtJR05PUkUKKzxVMzBCQz4JPFUzMEJCPjs8VTMwQkM+O0lHTk9SRTtJR05PUkUKKzxVMzA1Qz4JPFUzMEJCPjs8VTMwNUM+O0lHTk9SRTtJR05PUkUKKzxVMzBCRD4JPFUzMEJEPjs8VTMwQkQ+O0lHTk9SRTtJR05PUkUKKzxVMzA1RD4JPFUzMEJEPjs8VTMwNUQ+O0lHTk9SRTtJR05PUkUKKzxVMzBCRT4JPFUzMEJEPjs8VTMwQkU+O0lHTk9SRTtJR05PUkUKKzxVMzA1RT4JPFUzMEJEPjs8VTMwNUU+O0lHTk9SRTtJR05PUkUKKzxVMzBCRj4JPFUzMEJGPjs8VTMwQkY+O0lHTk9SRTtJR05PUkUKKzxVMzA1Rj4JPFUzMEJGPjs8VTMwNUY+O0lHTk9SRTtJR05PUkUKKzxVMzBDMD4JPFUzMEJGPjs8VTMwQzA+O0lHTk9SRTtJR05PUkUKKzxVMzA2MD4JPFUzMEJGPjs8VTMwNjA+O0lHTk9SRTtJR05PUkUKKzxVMzBDMT4JPFUzMEMxPjs8VTMwQzE+O0lHTk9SRTtJR05PUkUKKzxVMzA2MT4JPFUzMEMxPjs8VTMwNjE+O0lHTk9SRTtJR05PUkUKKzxVMzBDMj4JPFUzMEMxPjs8VTMwQzI+O0lHTk9SRTtJR05PUkUKKzxVMzA2Mj4JPFUzMEMxPjs8VTMwNjI+O0lHTk9SRTtJR05PUkUKKzxVMzBDMz4JPFUzMEMzPjs8VTMwQzM+O0lHTk9SRTtJR05PUkUKKzxVMzA2Mz4JPFUzMEMzPjs8VTMwNjM+O0lHTk9SRTtJR05PUkUKKzxVMzBDND4JPFUzMEMzPjs8VTMwQzQ+O0lHTk9SRTtJR05PUkUKKzxVMzA2ND4JPFUzMEMzPjs8VTMwNjQ+O0lHTk9SRTtJR05PUkUKKzxVMzBDNT4JPFUzMEMzPjs8VTMwQzU+O0lHTk9SRTtJR05PUkUKKzxVMzA2NT4JPFUzMEMzPjs8VTMwNjU+O0lHTk9SRTtJR05PUkUKKzxVMzBDNj4JPFUzMEM2Pjs8VTMwQzY+O0lHTk9SRTtJR05PUkUKKzxVMzA2Nj4JPFUzMEM2Pjs8VTMwNjY+O0lHTk9SRTtJR05PUkUKKzxVMzBDNz4JPFUzMEM2Pjs8VTMwQzc+O0lHTk9SRTtJR05PUkUKKzxVMzA2Nz4JPFUzMEM2Pjs8VTMwNjc+O0lHTk9SRTtJR05PUkUKKzxVMzBDOD4JPFUzMEM4Pjs8VTMwQzg+O0lHTk9SRTtJR05PUkUKKzxVMzA2OD4JPFUzMEM4Pjs8VTMwNjg+O0lHTk9SRTtJR05PUkUKKzxVMzBDOT4JPFUzMEM4Pjs8VTMwQzk+O0lHTk9SRTtJR05PUkUKKzxVMzA2OT4JPFUzMEM4Pjs8VTMwNjk+O0lHTk9SRTtJR05PUkUKKzxVMzBDQT4JPFUzMENBPjs8VTMwQ0E+O0lHTk9SRTtJR05PUkUKKzxVMzA2QT4JPFUzMENBPjs8VTMwNkE+O0lHTk9SRTtJR05PUkUKKzxVMzBDQj4JPFUzMENCPjs8VTMwQ0I+O0lHTk9SRTtJR05PUkUKKzxVMzA2Qj4JPFUzMENCPjs8VTMwNkI+O0lHTk9SRTtJR05PUkUKKzxVMzBDQz4JPFUzMENDPjs8VTMwQ0M+O0lHTk9SRTtJR05PUkUKKzxVMzA2Qz4JPFUzMENDPjs8VTMwNkM+O0lHTk9SRTtJR05PUkUKKzxVMzBDRD4JPFUzMENEPjs8VTMwQ0Q+O0lHTk9SRTtJR05PUkUKKzxVMzA2RD4JPFUzMENEPjs8VTMwNkQ+O0lHTk9SRTtJR05PUkUKKzxVMzBDRT4JPFUzMENFPjs8VTMwQ0U+O0lHTk9SRTtJR05PUkUKKzxVMzA2RT4JPFUzMENFPjs8VTMwNkU+O0lHTk9SRTtJR05PUkUKKzxVMzBDRj4JPFUzMENGPjs8VTMwQ0Y+O0lHTk9SRTtJR05PUkUKKzxVMzA2Rj4JPFUzMENGPjs8VTMwNkY+O0lHTk9SRTtJR05PUkUKKzxVMzBEMD4JPFUzMENGPjs8VTMwRDA+O0lHTk9SRTtJR05PUkUKKzxVMzA3MD4JPFUzMENGPjs8VTMwNzA+O0lHTk9SRTtJR05PUkUKKzxVMzBEMT4JPFUzMENGPjs8VTMwRDE+O0lHTk9SRTtJR05PUkUKKzxVMzA3MT4JPFUzMENGPjs8VTMwNzE+O0lHTk9SRTtJR05PUkUKKzxVMzBEMj4JPFUzMEQyPjs8VTMwRDI+O0lHTk9SRTtJR05PUkUKKzxVMzA3Mj4JPFUzMEQyPjs8VTMwNzI+O0lHTk9SRTtJR05PUkUKKzxVMzBEMz4JPFUzMEQyPjs8VTMwRDM+O0lHTk9SRTtJR05PUkUKKzxVMzA3Mz4JPFUzMEQyPjs8VTMwNzM+O0lHTk9SRTtJR05PUkUKKzxVMzBEND4JPFUzMEQyPjs8VTMwRDQ+O0lHTk9SRTtJR05PUkUKKzxVMzA3ND4JPFUzMEQyPjs8VTMwNzQ+O0lHTk9SRTtJR05PUkUKKzxVMzBENT4JPFUzMEQ1Pjs8VTMwRDU+O0lHTk9SRTtJR05PUkUKKzxVMzA3NT4JPFUzMEQ1Pjs8VTMwNzU+O0lHTk9SRTtJR05PUkUKKzxVMzBENj4JPFUzMEQ1Pjs8VTMwRDY+O0lHTk9SRTtJR05PUkUKKzxVMzA3Nj4JPFUzMEQ1Pjs8VTMwNzY+O0lHTk9SRTtJR05PUkUKKzxVMzBENz4JPFUzMEQ1Pjs8VTMwRDc+O0lHTk9SRTtJR05PUkUKKzxVMzA3Nz4JPFUzMEQ1Pjs8VTMwNzc+O0lHTk9SRTtJR05PUkUKKzxVMzBEOD4JPFUzMEQ4Pjs8VTMwRDg+O0lHTk9SRTtJR05PUkUKKzxVMzA3OD4JPFUzMEQ4Pjs8VTMwNzg+O0lHTk9SRTtJR05PUkUKKzxVMzBEOT4JPFUzMEQ4Pjs8VTMwRDk+O0lHTk9SRTtJR05PUkUKKzxVMzA3OT4JPFUzMEQ4Pjs8VTMwNzk+O0lHTk9SRTtJR05PUkUKKzxVMzBEQT4JPFUzMEQ4Pjs8VTMwREE+O0lHTk9SRTtJR05PUkUKKzxVMzA3QT4JPFUzMEQ4Pjs8VTMwN0E+O0lHTk9SRTtJR05PUkUKKzxVMzBEQj4JPFUzMERCPjs8VTMwREI+O0lHTk9SRTtJR05PUkUKKzxVMzA3Qj4JPFUzMERCPjs8VTMwN0I+O0lHTk9SRTtJR05PUkUKKzxVMzBEQz4JPFUzMERCPjs8VTMwREM+O0lHTk9SRTtJR05PUkUKKzxVMzA3Qz4JPFUzMERCPjs8VTMwN0M+O0lHTk9SRTtJR05PUkUKKzxVMzBERD4JPFUzMERCPjs8VTMwREQ+O0lHTk9SRTtJR05PUkUKKzxVMzA3RD4JPFUzMERCPjs8VTMwN0Q+O0lHTk9SRTtJR05PUkUKKzxVMzBERT4JPFUzMERFPjs8VTMwREU+O0lHTk9SRTtJR05PUkUKKzxVMzA3RT4JPFUzMERFPjs8VTMwN0U+O0lHTk9SRTtJR05PUkUKKzxVMzBERj4JPFUzMERGPjs8VTMwREY+O0lHTk9SRTtJR05PUkUKKzxVMzA3Rj4JPFUzMERGPjs8VTMwN0Y+O0lHTk9SRTtJR05PUkUKKzxVMzBFMD4JPFUzMEUwPjs8VTMwRTA+O0lHTk9SRTtJR05PUkUKKzxVMzA4MD4JPFUzMEUwPjs8VTMwODA+O0lHTk9SRTtJR05PUkUKKzxVMzBFMT4JPFUzMEUxPjs8VTMwRTE+O0lHTk9SRTtJR05PUkUKKzxVMzA4MT4JPFUzMEUxPjs8VTMwODE+O0lHTk9SRTtJR05PUkUKKzxVMzBFMj4JPFUzMEUyPjs8VTMwRTI+O0lHTk9SRTtJR05PUkUKKzxVMzA4Mj4JPFUzMEUyPjs8VTMwODI+O0lHTk9SRTtJR05PUkUKKzxVMzBFMz4JPFUzMEUzPjs8VTMwRTM+O0lHTk9SRTtJR05PUkUKKzxVMzA4Mz4JPFUzMEUzPjs8VTMwODM+O0lHTk9SRTtJR05PUkUKKzxVMzBFND4JPFUzMEUzPjs8VTMwRTQ+O0lHTk9SRTtJR05PUkUKKzxVMzA4ND4JPFUzMEUzPjs8VTMwODQ+O0lHTk9SRTtJR05PUkUKKzxVMzBFNT4JPFUzMEU1Pjs8VTMwRTU+O0lHTk9SRTtJR05PUkUKKzxVMzA4NT4JPFUzMEU1Pjs8VTMwODU+O0lHTk9SRTtJR05PUkUKKzxVMzBFNj4JPFUzMEU1Pjs8VTMwRTY+O0lHTk9SRTtJR05PUkUKKzxVMzA4Nj4JPFUzMEU1Pjs8VTMwODY+O0lHTk9SRTtJR05PUkUKKzxVMzBFNz4JPFUzMEU3Pjs8VTMwRTc+O0lHTk9SRTtJR05PUkUKKzxVMzA4Nz4JPFUzMEU3Pjs8VTMwODc+O0lHTk9SRTtJR05PUkUKKzxVMzBFOD4JPFUzMEU3Pjs8VTMwRTg+O0lHTk9SRTtJR05PUkUKKzxVMzA4OD4JPFUzMEU3Pjs8VTMwODg+O0lHTk9SRTtJR05PUkUKKzxVMzBFOT4JPFUzMEU5Pjs8VTMwRTk+O0lHTk9SRTtJR05PUkUKKzxVMzA4OT4JPFUzMEU5Pjs8VTMwODk+O0lHTk9SRTtJR05PUkUKKzxVMzBFQT4JPFUzMEVBPjs8VTMwRUE+O0lHTk9SRTtJR05PUkUKKzxVMzA4QT4JPFUzMEVBPjs8VTMwOEE+O0lHTk9SRTtJR05PUkUKKzxVMzBFQj4JPFUzMEVCPjs8VTMwRUI+O0lHTk9SRTtJR05PUkUKKzxVMzA4Qj4JPFUzMEVCPjs8VTMwOEI+O0lHTk9SRTtJR05PUkUKKzxVMzBFQz4JPFUzMEVDPjs8VTMwRUM+O0lHTk9SRTtJR05PUkUKKzxVMzA4Qz4JPFUzMEVDPjs8VTMwOEM+O0lHTk9SRTtJR05PUkUKKzxVMzBFRD4JPFUzMEVEPjs8VTMwRUQ+O0lHTk9SRTtJR05PUkUKKzxVMzA4RD4JPFUzMEVEPjs8VTMwOEQ+O0lHTk9SRTtJR05PUkUKKzxVMzBFRT4JPFUzMEVFPjs8VTMwRUU+O0lHTk9SRTtJR05PUkUKKzxVMzA4RT4JPFUzMEVFPjs8VTMwOEU+O0lHTk9SRTtJR05PUkUKKzxVMzBFRj4JPFUzMEVFPjs8VTMwRUY+O0lHTk9SRTtJR05PUkUKKzxVMzA4Rj4JPFUzMEVFPjs8VTMwOEY+O0lHTk9SRTtJR05PUkUKKzxVMzBGMD4JPFUzMEYwPjs8VTMwRjA+O0lHTk9SRTtJR05PUkUKKzxVMzA5MD4JPFUzMEYwPjs8VTMwOTA+O0lHTk9SRTtJR05PUkUKKzxVMzBGMT4JPFUzMEYxPjs8VTMwRjE+O0lHTk9SRTtJR05PUkUKKzxVMzA5MT4JPFUzMEYxPjs8VTMwOTE+O0lHTk9SRTtJR05PUkUKKzxVMzBGMj4JPFUzMEYyPjs8VTMwRjI+O0lHTk9SRTtJR05PUkUKKzxVMzA5Mj4JPFUzMEYyPjs8VTMwOTI+O0lHTk9SRTtJR05PUkUKKzxVMzBGMz4JPFUzMEYzPjs8VTMwRjM+O0lHTk9SRTtJR05PUkUKKzxVMzA5Mz4JPFUzMEYzPjs8VTMwOTM+O0lHTk9SRTtJR05PUkUKKworb3JkZXJfZW5kCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgIjxVMDA0NT48VTAwNDU+PFUwMDRCPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICI8VTAwNkI+PFUwMDcyPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgIjxVMDAyQz4iCittb25fdGhvdXNhbmRzX3NlcCAgICI8VTAwQTA+IgorbW9uX2dyb3VwaW5nICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgMQorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgICI8VTAwMkM+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAgIjxVMDBBMD4iCitncm91cGluZyAgICAgICAgICAgICAgICAzOzMKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICI8VTAwNTA+IjsiPFUwMDQ1PiI7IjxVMDA1ND4iOyI8VTAwNEI+IjsvCisgICAgICAiPFUwMDRFPiI7IjxVMDA1Mj4iOyI8VTAwNEM+IgorZGF5ICAgIjxVMDA3MD48VTAwRkM+PFUwMDY4PjxVMDA2MT48VTAwNzA+PFUwMEU0PjxVMDA2NT48VTAwNzY+IjsvCisgICAgICAiPFUwMDY1PjxVMDA3Mz48VTAwNkQ+PFUwMDYxPjxVMDA3Mz48VTAwNzA+PFUwMEU0PjxVMDA2NT48VTAwNzY+IjsvCisgICAgICAiPFUwMDc0PjxVMDA2NT48VTAwNjk+PFUwMDczPjxVMDA2OT48VTAwNzA+PFUwMEU0PjxVMDA2NT48VTAwNzY+IjsvCisgICAgICAiPFUwMDZCPjxVMDA2Rj48VTAwNkM+PFUwMDZEPjxVMDA2MT48VTAwNzA+PFUwMEU0PjxVMDA2NT48VTAwNzY+IjsvCisgICAgICAiPFUwMDZFPjxVMDA2NT48VTAwNkM+PFUwMDZBPjxVMDA2MT48VTAwNzA+PFUwMEU0PjxVMDA2NT48VTAwNzY+IjsvCisgICAgICAiPFUwMDcyPjxVMDA2NT48VTAwNjU+PFUwMDY0PjxVMDA2NT4iOy8KKyAgICAgICI8VTAwNkM+PFUwMDYxPjxVMDA3NT48VTAwNzA+PFUwMEU0PjxVMDA2NT48VTAwNzY+IgorYWJtb24gIjxVMDA2QT48VTAwNjE+PFUwMDYxPjxVMDA2RT48VTAwMjA+IjsvCisgICAgICAiPFUwMDc2PjxVMDA2NT48VTAwNjU+PFUwMDYyPjxVMDA3Mj4iOy8KKyAgICAgICI8VTAwNkQ+PFUwMEU0PjxVMDA3Mj48VTAwNzQ+PFUwMDczPiI7LworICAgICAgIjxVMDA2MT48VTAwNzA+PFUwMDcyPjxVMDAyMD48VTAwMjA+IjsvCisgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNjk+PFUwMDIwPjxVMDAyMD4iOy8KKyAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA3NT48VTAwNkU+PFUwMDY5PiI7LworICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDc1PjxVMDA2Qz48VTAwNjk+IjsvCisgICAgICAiPFUwMDYxPjxVMDA3NT48VTAwNjc+PFUwMDIwPjxVMDAyMD4iOy8KKyAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDIwPiI7LworICAgICAgIjxVMDA2Rj48VTAwNkI+PFUwMDc0PjxVMDAyMD48VTAwMjA+IjsvCisgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+PFUwMDIwPjxVMDAyMD4iOy8KKyAgICAgICI8VTAwNjQ+PFUwMDY1PjxVMDA3ND48VTAwNzM+PFUwMDIwPiIKK21vbiAgICI8VTAwNkE+PFUwMDYxPjxVMDA2MT48VTAwNkU+PFUwMDc1PjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAiPFUwMDc2PjxVMDA2NT48VTAwNjU+PFUwMDYyPjxVMDA3Mj48VTAwNzU+PFUwMDYxPjxVMDA3Mj4iOy8KKyAgICAgICI8VTAwNkQ+PFUwMEU0PjxVMDA3Mj48VTAwNzQ+PFUwMDczPiI7LworICAgICAgIjxVMDA2MT48VTAwNzA+PFUwMDcyPjxVMDA2OT48VTAwNkM+PFUwMDZDPiI7LworICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDY5PiI7LworICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDc1PjxVMDA2RT48VTAwNjk+IjsvCisgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNzU+PFUwMDZDPjxVMDA2OT4iOy8KKyAgICAgICI8VTAwNjE+PFUwMDc1PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICI8VTAwNkY+PFUwMDZCPjxVMDA3ND48VTAwNkY+PFUwMDZGPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAiPFUwMDY0PjxVMDA2NT48VTAwNzQ+PFUwMDczPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IgorCislIFN1Z2dlc3RlZCBkYXRlIGZvcm1hdHMKKworZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjU+PFUwMDZEPjxVMDAyRT48VTAwMjU+PFUwMDU5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAiIjsiIgordF9mbXRfYW1wbSAgICAiIgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+Igord2VlayAgICA3OzE5OTcxMjAxOzQKK2ZpcnN0X3dlZWtkYXkgMQorZmlyc3Rfd29ya2RheSAxCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAgICI8VTAwNUU+PFUwMDVCPjxVMDA0QT48VTAwNkE+PFUwMDU5PjxVMDA3OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICAgIjxVMDA1RT48VTAwNUI+PFUwMDQ1PjxVMDA2NT48VTAwNEU+PFUwMDZFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19QQVBFUgorJSBGSVhNRQoraGVpZ2h0ICAgMjk3CislIEZJWE1FCit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDMzPjxVMDAzNz48VTAwMzI+IgoraW50X3NlbGVjdCAgICAgIjxVMDAzMD48VTAwMzA+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorJSBGSVhNRQorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKyAgICAgICAgICAgICAgICAgPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPi8KKyAgICAgICAgICAgICAgICAgPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPi8KKyAgICAgICAgICAgICAgICAgPFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPi8KKyAgICAgICAgICAgICAgICAgPFUwMDI1PjxVMDA3Mz48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjg+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY1PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA3Mj48VTAwMjU+PFUwMDRFPi8KKyAgICAgICAgICAgICAgICAgPFUwMDI1PjxVMDA0Mz48VTAwMkQ+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDRFPi8KKyAgICAgICAgICAgICAgICAgPFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfbmFtZSAgICAiPFUwMDQ1PjxVMDA2NT48VTAwNzM+PFUwMDc0PjxVMDA2OT4iCitjb3VudHJ5X3Bvc3QgICAgIjxVMDA0NT48VTAwNDU+IgorY291bnRyeV9hYjIgICAgICI8VTAwNDU+PFUwMDQ1PiIKK2NvdW50cnlfYWIzICAgICAiPFUwMDQ1PjxVMDA1Mz48VTAwNTQ+IgorY291bnRyeV9udW0gICAgIDIzMworY291bnRyeV9jYXIgICAgICI8VTAwNDU+PFUwMDUzPjxVMDA1ND4iCitjb3VudHJ5X2lzYm4gICAgIjxVMDAzOT48VTAwMzk+PFUwMDM4PjxVMDAzNT4iCitsYW5nX25hbWUgICAgICAgIjxVMDA2NT48VTAwNjU+PFUwMDczPjxVMDA3ND48VTAwNjk+PFUwMDIwPjxVMDA2Qj48VTAwNjU+PFUwMDY1PjxVMDA2Qz4iCitsYW5nX2FiICAgICAgICAgIjxVMDA2NT48VTAwNzQ+IgorbGFuZ190ZXJtICAgICAgICI8VTAwNjU+PFUwMDczPjxVMDA3ND4iCitsYW5nX2xpYiAgICAgICAgIjxVMDA2NT48VTAwNzM+PFUwMDc0PiIKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ldV9FUyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2V1X0VTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MzNhZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ldV9FUwpAQCAtMCwwICsxLDE2OCBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIEJhc3F1ZSBMYW5ndWFnZSBMb2NhbGUgZm9yIFNwYWluCislIFNvdXJjZTogUkFQCislIEFkZHJlc3M6IFNhbmt0IEpvLy9yZ2VucyBBbGxlIDgKKyUgICAgREstMTYxNSBLby8vYmVuaGF2biBWLCBEYW5tYXJrCislIENvbnRhY3Q6IEtlbGQgU2ltb25zZW4KKyUgRW1haWw6IEtlbGQuU2ltb25zZW5AZGt1dWcuZGsKKyUgVGVsOiArNDUgLSAzMTIyNjU0MworJSBGYXg6ICs0NSAtIDMzMjU2NTQzCislIExhbmd1YWdlOiBldQorJSBUZXJyaXRvcnk6IEVTCislIFJldmlzaW9uOiA0LjMKKyUgRGF0ZTogMTk5Ni0xMC0xNQorJSBBcHBsaWNhdGlvbjogZ2VuZXJhbAorJSBVc2VyczogZ2VuZXJhbAorJSBDaGFyc2V0OiBJU08tODg1OS0xCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKKyUKKyUgc29tZSB1cGRhdGVzIGRvbmUgYnkgRWxodXlhciBodHRwOi8vd3d3LmVsaHV5YXIuY29tLworJQorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiQmFzcXVlIGxvY2FsZSBmb3IgU3BhaW4iCitzb3VyY2UgICAgICJSQVAiCithZGRyZXNzICAgICJTYW5rdCBKPFUwMEY4PnJnZW5zIEFsbGUgOCwgREstMTYxNSBLPFUwMEY4PmJlbmhhdm4gViwgRGFubWFyayIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJCYXNxdWUiCit0ZXJyaXRvcnkgICJTcGFpbiIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjkiCislCitjYXRlZ29yeSAgImV1X0VTOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImV1X0VTOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImV1X0VTOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiZXVfRVM6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJldV9FUzoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImV1X0VTOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImV1X0VTOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImV1X0VTOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImV1X0VTOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiZXVfRVM6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJldV9FUzoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImVzX0VTIgorRU5EIExDX0NUWVBFCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA2Mj48VTAwNDI+PFUwMDczPjxVMDA1Mz48VTAwNzk+PFUwMDU5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDY1PjxVMDA0NT48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgIjxVMDA0NT48VTAwNTU+PFUwMDUyPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAiPFUyMEFDPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICI8VTAwMkM+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgIjxVMDAyRT4iCittb25fZ3JvdXBpbmcgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICIiCitncm91cGluZyAgICAgICAgICAgICAwOzAKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA2OT48VTAwNjc+PFUwMDJFPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA2Qz48VTAwMkU+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDcyPjxVMDAyRT4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwN0E+PFUwMDJFPiI7LworICAgICAgICAiPFUwMDZGPjxVMDA2Nz48VTAwMkU+IjsvCisgICAgICAgICI8VTAwNkY+PFUwMDcyPjxVMDAyRT4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwNzI+PFUwMDJFPiIKK2RheSAgICAgIjxVMDA2OT48VTAwNjc+PFUwMDYxPjxVMDA2RT48VTAwNjQ+PFUwMDY1PjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNzM+PFUwMDc0PjxVMDA2NT48VTAwNkM+PFUwMDY1PjxVMDA2OD48VTAwNjU+PFUwMDZFPjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNzM+PFUwMDc0PjxVMDA2NT48VTAwNjE+PFUwMDcyPjxVMDA3ND48VTAwNjU+PFUwMDYxPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA3Mz48VTAwNzQ+PFUwMDY1PjxVMDA2MT48VTAwN0E+PFUwMDZCPjxVMDA2NT48VTAwNkU+PFUwMDYxPiI7LworICAgICAgICAiPFUwMDZGPjxVMDA3Mz48VTAwNzQ+PFUwMDY1PjxVMDA2Nz48VTAwNzU+PFUwMDZFPjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA2Rj48VTAwNzM+PFUwMDc0PjxVMDA2OT48VTAwNzI+PFUwMDYxPjxVMDA2Qz48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNkM+PFUwMDYxPjxVMDA3Mj48VTAwNzU+PFUwMDZFPjxVMDA2Mj48VTAwNjE+PFUwMDc0PjxVMDA2MT4iCithYm1vbiAgICI8VTAwNzU+PFUwMDcyPjxVMDA3ND4iOyI8VTAwNkY+PFUwMDc0PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2MT48VTAwNzA+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNjk+IjsiPFUwMDY1PjxVMDA2Qj48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNzU+PFUwMDdBPjxVMDA3ND4iOyI8VTAwNjE+PFUwMDYyPjxVMDA3NT4iOy8KKyAgICAgICAgIjxVMDA2OT48VTAwNzI+PFUwMDYxPiI7IjxVMDA3NT48VTAwNzI+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA3QT48VTAwNjE+IjsiPFUwMDYxPjxVMDA2Mj48VTAwNjU+IgorbW9uICAgICAiPFUwMDc1PjxVMDA3Mj48VTAwNzQ+PFUwMDYxPjxVMDA3Mj48VTAwNzI+PFUwMDY5PjxVMDA2Qz48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNkY+PFUwMDc0PjxVMDA3Mz48VTAwNjE+PFUwMDY5PjxVMDA2Qz48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNzQ+PFUwMDc4PjxVMDA2Rj48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDcwPjxVMDA2OT48VTAwNzI+PFUwMDY5PjxVMDA2Qz48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA2OT48VTAwNjE+PFUwMDc0PjxVMDA3QT48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNjU+PFUwMDZCPjxVMDA2MT48VTAwNjk+PFUwMDZFPjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA3NT48VTAwN0E+PFUwMDc0PjxVMDA2MT48VTAwNjk+PFUwMDZDPjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNjI+PFUwMDc1PjxVMDA3QT48VTAwNzQ+PFUwMDc1PjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA2OT48VTAwNzI+PFUwMDYxPjxVMDA2OT48VTAwNkM+PFUwMDYxPiI7LworICAgICAgICAiPFUwMDc1PjxVMDA3Mj48VTAwNzI+PFUwMDY5PjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwN0E+PFUwMDYxPjxVMDA3Mj48VTAwNkY+PFUwMDYxPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA2Mj48VTAwNjU+PFUwMDZFPjxVMDA2ND48VTAwNzU+PFUwMDYxPiIKKyUgWVktTU0tREQKK2RfdF9mbXQgIjxVMDAyNT48VTAwNzk+PFUwMDJEPjxVMDAyNT48VTAwNkQ+PFUwMDJEPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJSBkZGRkZGRkZGRkLCAgIDE5WVlla28gIG1tbW1tbW1yZW4gICBYWGEKKyUgZGF5IG9mIHRoZSB3ZWVrLCAgIHllYXIrZWtvICAgbW9udGgrcmVuICAgZGF5K2EKK2RfZm10ICAgIjxVMDAyNT48VTAwNjE+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyRT48VTAwNjU+PFUwMDZCPjxVMDA2Rj48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwNzI+PFUwMDY1PjxVMDA2RT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwNjE+IgordF9mbXQgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICIiOyIiCit0X2ZtdF9hbXBtICIiCitkYXRlX2ZtdAkiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorJSBGSVhNRQoraGVpZ2h0ICAgMjk3CislIEZJWE1FCit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDMzPjxVMDAzND4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCislIEZJWE1FCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICI8VTAwNDU+PFUwMDUzPiIKK2NvdW50cnlfYWIzICI8VTAwNDU+PFUwMDUzPjxVMDA1MD4iCitjb3VudHJ5X251bSA3MjQKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ldV9FU0BldXJvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZXVfRVNAZXVybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODhmY2U0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZXVfRVNAZXVybwpAQCAtMCwwICsxLDk4IEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgQmFzcXVlIExhbmd1YWdlIExvY2FsZSBmb3IgU3BhaW4gd2l0aCBFdXJvCislIExhbmd1YWdlOiBldQorJSBUZXJyaXRvcnk6IEVTCislIE9wdGlvbjogZXVybworJSBEYXRlOiAyMDAwLTA4LTIxCislIEFwcGxpY2F0aW9uOiBnZW5lcmFsCislIFVzZXJzOiBnZW5lcmFsCislIENoYXJzZXQ6IElTTy04ODU5LTE1CislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJCYXNxdWUgbGFuZ3VhZ2UgbG9jYWxlIGZvciBTcGFpbiB3aXRoIEV1cm8iCitzb3VyY2UgICAgICJGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4iCithZGRyZXNzICAgICI1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkJhc3F1ZSIKK3RlcnJpdG9yeSAgIlNwYWluIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wOC0yMSIKKyUKK2NhdGVnb3J5ICAiZXVfRVNAZXVybzoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJldV9FU0BldXJvOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImV1X0VTQGV1cm86MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJldV9FU0BldXJvOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiZXVfRVNAZXVybzoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImV1X0VTQGV1cm86MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZXVfRVNAZXVybzoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJldV9FU0BldXJvOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImV1X0VTQGV1cm86MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJldV9FU0BldXJvOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiZXVfRVNAZXVybzoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImV1X0VTIgorRU5EIExDX0NUWVBFCisKK0xDX01FU1NBR0VTCitjb3B5ICJldV9FUyIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgIjxVMDA0NT48VTAwNTU+PFUwMDUyPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAiPFUyMEFDPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICI8VTAwMkM+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgIjxVMDAyRT4iCittb25fZ3JvdXBpbmcgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgIDAKK2ZyYWNfZGlnaXRzICAgICAgICAgIDAKK3BfY3NfcHJlY2VkZXMgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJldV9FUyIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2NvcHkgImV1X0VTIgorRU5EIExDX1RJTUUKKworTENfUEFQRVIKK2NvcHkgImV1X0VTIgorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQorY29weSAiZXVfRVMiCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJldV9FUyIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCitjb3B5ICJldV9FUyIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK2NvcHkgImV1X0VTIgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2ZhX0lSIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZmFfSVIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQyOTc4NwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2ZhX0lSCkBAIC0wLDAgKzEsNDkyIEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgUGVyc2lhbiBMYW5ndWFnZSBMb2NhbGUgZm9yIElyYW4gd2l0aCBVVEYtOCBjaGFyYWN0ZXIgc2V0CislIFNvdXJjZTogU2hhcmlmIEZhcnNpV2ViLCBJbmMuCislIEFkZHJlc3M6IDUsIFNoYWhpZCBHaGFzZW1pIEhhYmlib2xsYWgsIEF6YWRpIEF2ZSwgVGVocmFuLCBJcmFuCislIENvbnRhY3Q6IFJvb3piZWggUG91cm5hZGVyCislIEVtYWlsOiByb296YmVoQGZhcnNpd2ViLmluZm8KKyUgVGVsOiArOTggMjEgNjAyMjM3MgorJSBGYXg6ICs5OCAyMSA2MDE5NTY4CislIExhbmd1YWdlOiBmYQorJSBUZXJyaXRvcnk6IElSCislIFJldmlzaW9uOiAzLjAKKyUgRGF0ZTogMjAwNS0wNC0wNgorJSBVc2VyczogZ2VuZXJhbAorJSBSZXBlcnRvaXJlbWFwOgorJSBDaGFyc2V0OiBVVEYtOAorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiUGVyc2lhbiBsb2NhbGUgZm9yIElyYW4iCitzb3VyY2UgICAgICJTaGFyaWYgRmFyc2lXZWIsIEluYy4iCithZGRyZXNzICAgICI1LCBTaGFoaWQgR2hhc2VtaSBIYWJpYm9sbGFoLCBBemFkaSBBdmUsIFRlaHJhbiwgSXJhbiIKK2NvbnRhY3QgICAgIlJvb3piZWggUG91cm5hZGVyIgorZW1haWwgICAgICAicm9vemJlaEBmYXJzaXdlYi5pbmZvIgordGVsICAgICAgICAiKzk4IDIxIDYwMjIzNzIiCitmYXggICAgICAgICIrOTggMjEgNjAxOTU2OCIKK2xhbmd1YWdlICAgIlBlcnNpYW4iCit0ZXJyaXRvcnkgICJJcmFuIgorcmV2aXNpb24gICAiMy4wIgorZGF0ZSAgICAgICAiMjAwNS0wNC0wNiIKKyUKK2NhdGVnb3J5ICAiZmFfSVI6MjAwNSI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZmFfSVI6MjAwNSI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZmFfSVI6MjAwNSI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJmYV9JUjoyMDA1IjtMQ19USU1FCitjYXRlZ29yeSAgImZhX0lSOjIwMDUiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZmFfSVI6MjAwNSI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZmFfSVI6MjAwNSI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZmFfSVI6MjAwNSI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZmFfSVI6MjAwNSI7TENfTkFNRQorY2F0ZWdvcnkgICJmYV9JUjoyMDA1IjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImZhX0lSOjIwMDUiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKKyUgUGVyc2lhbiB1c2VzIHRoZSBhbHRlcm5hdGUgZGlnaXRzIFUrMDZGMC4uVSswNkY5CitvdXRkaWdpdCA8VTA2RjA+Li48VTA2Rjk+CisKKyUgVGhpcyBpcyB1c2VkIGluIHRoZSBzY2FuZiBmYW1pbHkgb2YgZnVuY3Rpb25zIHRvIHJlYWQgUGVyc2lhbiBudW1iZXJzCislIHVzaW5nICIlSWQiIGFuZCBzdWNoLgorbWFwIHRvX2lucHVuY3Q7IC8KKyAgKDxVMDAzMD4sPFUwNkYwPik7IC8KKyAgKDxVMDAzMT4sPFUwNkYxPik7IC8KKyAgKDxVMDAzMj4sPFUwNkYyPik7IC8KKyAgKDxVMDAzMz4sPFUwNkYzPik7IC8KKyAgKDxVMDAzND4sPFUwNkY0Pik7IC8KKyAgKDxVMDAzNT4sPFUwNkY1Pik7IC8KKyAgKDxVMDAzNj4sPFUwNkY2Pik7IC8KKyAgKDxVMDAzNz4sPFUwNkY3Pik7IC8KKyAgKDxVMDAzOD4sPFUwNkY4Pik7IC8KKyAgKDxVMDAzOT4sPFUwNkY5Pik7IC8KKyAgKDxVMDAyRT4sPFUwNjZCPik7IC8KKyAgKDxVMDAyQz4sPFUwNjZDPikKKworJSBUaGlzIGlzIHVzZWQgaW4gdGhlIHByaW50ZiBmYW1pbHkgb2YgZnVuY3Rpb25zIHRvIHdyaXRlIFBlcnNpYW4gZmxvYXRpbmcKKyUgcG9pbnQgbnVtYmVycyB1c2luZyAiJUlmIiBhbmQgc3VjaC4KK21hcCB0b19vdXRwdW5jdDsgLworICAoPFUwMDJFPiw8VTA2NkI+KTsgLworICAoPFUwMDJDPiw8VTA2NkM+KQorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCisKKyUgVGhlIFBlcnNpYW4gYWxwaGFiZXQgb3JkZXIgaXM6IEFMRUYgV0lUSCBNQUREQSBBQk9WRSwgQUxFRiwgSEFNWkEgKGFsbAorJSBraW5kcyksIEJFSCwgUEVILCBURUgsIEpFRU0sIFRDSEVILCBIQUgsIEtIQUgsIERBTCwgVEhBTCwgUkVILCBaQUlOLCBKRUgsCislIFNFRU4sIFNIRUVOLCBTQUQsIERBRCwgVEFILCBaQUgsIEFJTiwgR0hBSU4sIEZFSCwgUUFGLCBLQUYsIEdBRiwgTEFNLAorJSBNRUVNLCBOT09OLCBXQVcsIEhFSCwgWUVILgorJSBUaGUgdmFyaW91cyBraW5kcyBvZiBIQU1aQSBhcmUgc29ydGVkIGFzIEFMRUYgV0lUSCBIQU1aQSBBQk9WRSwgQUxFRiBXSVRICislIEhBTVpBIEJFTE9XLCBXQVcgV0lUSCBIQU1aQSBBQk9WRSwgWUVIIFdJVEggSEFNWkEgQUJPVkUuCisKK2NvbGxhdGluZy1zeW1ib2wgPEFIWT4gJSBhY2NlbnQgaGFtemEgb3ZlciB5ZWgKK2NvbGxhdGluZy1zeW1ib2wgPEFETD4gJSBkb3RsZXNzCitjb2xsYXRpbmctc3ltYm9sIDxBRE8+ICUgd2l0aCBkb3RzIG92ZXIKK2NvbGxhdGluZy1zeW1ib2wgPEFXTz4gJSB3aXRoIHdhc2xhIG92ZXIKKworY29sbGF0aW5nLXN5bWJvbCA8YWxlZm1hZGRhPgorY29sbGF0aW5nLXN5bWJvbCA8eWVoPgorCislIEFsdGVybmF0ZSByZXByZXNlbnRhdGlvbnMgZGlzcGxheWVkIHRoZSBzYW1lCitjb2xsYXRpbmctc3ltYm9sIDxBTFQxPgorY29sbGF0aW5nLXN5bWJvbCA8QUxUMj4KKworY29sbGF0aW5nLWVsZW1lbnQgPEFsZWYtTWFkZGE+IGZyb20gIjxVMDYyNz48VTA2NTM+IgorY29sbGF0aW5nLWVsZW1lbnQgPEFsZWYtSGFtemE+IGZyb20gIjxVMDYyNz48VTA2NTQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPEFsZWYtSGFtemFCZWxvdz4gZnJvbSAiPFUwNjI3PjxVMDY1NT4iCitjb2xsYXRpbmctZWxlbWVudCA8V2F3LUhhbXphPiBmcm9tICI8VTA2NDg+PFUwNjU0PiIKK2NvbGxhdGluZy1lbGVtZW50IDxBbGVmTWFrc3VyYS1IYW16YT4gZnJvbSAiPFUwNjQ5PjxVMDY1ND4iCitjb2xsYXRpbmctZWxlbWVudCA8WWVoLUhhbXphPiBmcm9tICI8VTA2NEE+PFUwNjU0PiIKK2NvbGxhdGluZy1lbGVtZW50IDxGYXJzaVllaC1IYW16YT4gZnJvbSAiPFUwNkNDPjxVMDY1ND4iCisKK3Jlb3JkZXItYWZ0ZXIgPEJBUz4KKzxBSEE+Cis8QUhTPgorPEFXTz4KKzxBSFc+Cis8QUhZPgorPEFETD4KKzxBRE8+Cis8QVlFPgorPFlCQT4KKworcmVvcmRlci1hZnRlciA8TElHPgorPEFMVDE+Cis8QUxUMj4KKworcmVvcmRlci1hZnRlciA8dGg+Cis8YWxlZm1hZGRhPgorPGFsZWY+Cis8aGFtemE+CisKK3Jlb3JkZXItYWZ0ZXIgPHdhdz4KKzxoZWg+Cis8eWVoPgorCislIFBlcnNpYW4gdXNlcyB0aGlzIG9yZGVyOiBGYXRoYSwgS2FzcmEsIERhbW1hLCBGYXRoYXRhbiwgS2FzcmF0YW4sIERhbW1hdGFuLgorCityZW9yZGVyLWFmdGVyIDxVMDY2RD4KKzxVMDY0RT4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNjRFPiAlPGZhdGhhX25vPgorPFVGRTc2PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUZFNzY+ICU8ZmF0aGFfaXM+Cis8VUZFNzc+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVRkU3Nz4gJTxmYXRoYV9tZT4KKzxVMDY1MD4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNjUwPiAlPGthc3JhX25vPgorPFVGRTdBPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUZFN0E+ICU8a2FzcmFfaXM+Cis8VUZFN0I+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVRkU3Qj4gJTxrYXNyYV9tZT4KKzxVMDY0Rj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNjRGPiAlPGRhbW1hX25vPgorPFVGRTc4PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUZFNzg+ICU8ZGFtbWFfaXM+Cis8VUZFNzk+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVRkU3OT4gJTxkYW1tYV9tZT4KKzxVMDY0Qj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNjRCPiAlPGZhdGhhdGFuX25vPgorPFVGRTcwPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUZFNzA+ICU8ZmF0aGF0YW5faXM+Cis8VUZFNzE+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVRkU3MT4gJTxmYXRoYXRhbl9tZT4KKzxVMDY0RD4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNjREPiAlPGthc3JhdGFuX25vPgorPFVGRTc0PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUZFNzQ+ICU8a2FzcmF0YW5faXM+Cis8VTA2NEM+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDY0Qz4gJTxkYW1tYXRhbl9ubz4KKzxVRkU3Mj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVGRTcyPiAlPGRhbW1hdGFuX2lzPgorCityZW9yZGVyLWFmdGVyIDxVRkU3Rj4KKzxVMDY1Mz4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNjUzPiAlPG1hZGRhX25vPgorPFUwNjU0PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA2NTQ+ICU8aGFtemFhYm92ZV9ubz4KKzxVMDY1NT4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNjU1PiAlPGhhbXphYmVsb3dfbm8+Cis8VTA2NzA+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDY3MD4gJTxzdXBhbGVmX25vPgorCislIFRoZSBQZXJzaWFuIGRpZ2l0cyBhcmUgc29ydGVkIGJlZm9yZSB0aGUgQXJhYmljIG9uZXM6IHRoZXkgYXJlIHRoZSBiYXNpYyBmb3Jtcy4KK3Jlb3JkZXItYWZ0ZXIgPFUwNjYwPgorPFUwNkYwPiA8MD47PEJBUz47PE1JTj47SUdOT1JFCis8VTA2NjA+IDwwPjs8UENMPjs8TUlOPjtJR05PUkUKKzxVMDZGMT4gPDE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNjYxPiA8MT47PFBDTD47PE1JTj47SUdOT1JFCis8VTA2RjI+IDwyPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDY2Mj4gPDI+OzxQQ0w+OzxNSU4+O0lHTk9SRQorPFUwNkYzPiA8Mz47PEJBUz47PE1JTj47SUdOT1JFCis8VTA2NjM+IDwzPjs8UENMPjs8TUlOPjtJR05PUkUKKzxVMDZGND4gPDQ+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNjY0PiA8ND47PFBDTD47PE1JTj47SUdOT1JFCis8VTA2RjU+IDw1Pjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDY2NT4gPDU+OzxQQ0w+OzxNSU4+O0lHTk9SRQorPFUwNkY2PiA8Nj47PEJBUz47PE1JTj47SUdOT1JFCis8VTA2NjY+IDw2Pjs8UENMPjs8TUlOPjtJR05PUkUKKzxVMDZGNz4gPDc+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNjY3PiA8Nz47PFBDTD47PE1JTj47SUdOT1JFCis8VTA2Rjg+IDw4Pjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDY2OD4gPDg+OzxQQ0w+OzxNSU4+O0lHTk9SRQorPFUwNkY5PiA8OT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA2Njk+IDw5Pjs8UENMPjs8TUlOPjtJR05PUkUKKworJSBBbmQgdGhlbiB0aGUgbGV0dGVyczoKKzxVMDYyMj4gPGFsZWZtYWRkYT47PEJBUz47PE1JTj47SUdOT1JFICUgQWxlZiBXaXRoIE1hZGRhIEFib3ZlCis8QWxlZi1NYWRkYT4gPGFsZWZtYWRkYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA2Mjc+IDxhbGVmPjs8QkFTPjs8TUlOPjtJR05PUkUgICAgICAgJSBBbGVmCis8VTA2NzE+IDxhbGVmPjs8QVdPPjs8TUlOPjtJR05PUkUgICAgICAgJSBBbGVmIFdhc2xhCis8VTA2MjE+IDxoYW16YT47PEJBUz47PE1JTj47SUdOT1JFICAgICAgJSBIYW16YQorPFUwNjIzPiA8aGFtemE+OzxBSEE+OzxNSU4+O0lHTk9SRSAgICAgICUgQWxlZiBXaXRoIEhhbXphIEFib3ZlCis8QWxlZi1IYW16YT4gPGhhbXphPjs8QUhBPjs8TUlOPjtJR05PUkUKKzxVMDYyNT4gPGhhbXphPjs8QUhTPjs8TUlOPjtJR05PUkUgICAgICAlIEFsZWYgV2l0aCBIYW16YSBCZWxvdworPEFsZWYtSGFtemFCZWxvdz4gPGhhbXphPjs8QUhTPjs8TUlOPjtJR05PUkUKKzxVMDYyND4gPGhhbXphPjs8QUhXPjs8TUlOPjtJR05PUkUgICAgICAlIFdhdyBXaXRoIEhhbXphIEFib3ZlCis8V2F3LUhhbXphPiA8aGFtemE+OzxBSFc+OzxNSU4+O0lHTk9SRQorPFUwNjI2PiA8aGFtemE+OzxBSFk+OzxNSU4+O0lHTk9SRSAgICAgICUgWWVoIFdpdGggSGFtemEgQWJvdmUKKzxGYXJzaVllaC1IYW16YT4gPGhhbXphPjs8QUhZPjs8QUxUMT47SUdOT1JFCis8QWxlZk1ha3N1cmEtSGFtemE+IDxoYW16YT47PEFIWT47PEFMVDI+O0lHTk9SRQorPFllaC1IYW16YT4gPGhhbXphPjs8QUhZPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwNjQyPgorPFUwNkE5PiA8a2FmPjs8QkFTPjs8TUlOPjtJR05PUkUgICAgICAgICUgS2VoZWgKKzxVMDY0Mz4gPGthZj47PFBDTD47PE1JTj47SUdOT1JFICAgICAgICAlIEthZgorcmVvcmRlci1hZnRlciA8VTA2NDg+Cis8VTA2NDc+IDxoZWg+OzxCQVM+OzxNSU4+O0lHTk9SRSAgICAgICAgJSBIZWgKKzxVMDYyOT4gPGhlaD47PEFETz47PE1JTj47SUdOT1JFICAgICAgICAlIFRlaCBNYXJidXRhCis8VTA2QzA+IDxoZWg+OzxBSEE+OzxNSU4+O0lHTk9SRSAgICAgICAgJSBIZWggV2l0aCBZZWggQWJvdmUKKzxVMDZDQz4gPHllaD47PEJBUz47PE1JTj47SUdOT1JFICAgICAgICAlIEZhcnNpIFllaAorPFUwNjQ5PiA8eWVoPjs8QURMPjs8TUlOPjtJR05PUkUgICAgICAgICUgQWxlZiBNYWtzdXJhCis8VTA2NEE+IDx5ZWg+OzxBWUU+OzxNSU4+O0lHTk9SRSAgICAgICAgJSBZZWgKKworJSBGaW5hbGx5IHRoZSBsZXR0ZXJzIGluIFByZXNlbnRhdGlvbiBGb3JtOgorcmVvcmRlci1hZnRlciA8VUZFODA+Cis8VUZFODE+IDxhbGVmbWFkZGE+OzxCQVM+OzxBSVM+O0lHTk9SRQorPFVGRTgyPiA8YWxlZm1hZGRhPjs8QkFTPjs8QUZJPjtJR05PUkUKKzxVRkU4RD4gPGFsZWY+OzxCQVM+OzxBSVM+O0lHTk9SRQorPFVGRThFPiA8YWxlZj47PEJBUz47PEFGST47SUdOT1JFCis8VUZCNTA+IDxhbGVmPjs8QVdPPjs8QUlTPjtJR05PUkUKKzxVRkI1MT4gPGFsZWY+OzxBV08+OzxBRkk+O0lHTk9SRQorPFVGRTgwPiA8aGFtemE+OzxCQVM+OzxBSVM+O0lHTk9SRQorPFVGRTgzPiA8aGFtemE+OzxBSEE+OzxBSVM+O0lHTk9SRQorPFVGRTg0PiA8aGFtemE+OzxBSEE+OzxBRkk+O0lHTk9SRQorPFVGRTg3PiA8aGFtemE+OzxBSFM+OzxBSVM+O0lHTk9SRQorPFVGRTg4PiA8aGFtemE+OzxBSFM+OzxBRkk+O0lHTk9SRQorPFVGRTg1PiA8aGFtemE+OzxBSFc+OzxBSVM+O0lHTk9SRQorPFVGRTg2PiA8aGFtemE+OzxBSFc+OzxBRkk+O0lHTk9SRQorPFUwNjg5PiA8aGFtemE+OzxBSFk+OzxBSVM+O0lHTk9SRQorPFUwNjhBPiA8aGFtemE+OzxBSFk+OzxBRkk+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VUZFQUU+Cis8VUZERkM+ICI8cmVoPjx5ZWg+PGFsZWY+PGxhbT4iOyI8TElHPjxMSUc+PExJRz48TElHPiI7IjxBSUk+PEFNRT48QUZJPjxBSVM+IjtJR05PUkUgJSBSaWFsIFNpZ24KK3Jlb3JkZXItYWZ0ZXIgPFVGRUQ4PgorPFVGQjhFPiA8a2FmPjs8QkFTPjs8QUlTPjtJR05PUkUKKzxVRkI4Rj4gPGthZj47PEJBUz47PEFGST47SUdOT1JFCis8VUZCOTA+IDxrYWY+OzxCQVM+OzxBSUk+O0lHTk9SRQorPFVGQjkxPiA8a2FmPjs8QkFTPjs8QU1FPjtJR05PUkUKKzxVRkVEOT4gPGthZj47PFBDTD47PEFJUz47SUdOT1JFCis8VUZFREE+IDxrYWY+OzxQQ0w+OzxBRkk+O0lHTk9SRQorPFVGRURCPiA8a2FmPjs8UENMPjs8QUlJPjtJR05PUkUKKzxVRkVEQz4gPGthZj47PFBDTD47PEFNRT47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVRkVFRT4KKzxVRkVFOT4gPGhlaD47PEJBUz47PEFJUz47SUdOT1JFCis8VUZFRUE+IDxoZWg+OzxCQVM+OzxBRkk+O0lHTk9SRQorPFVGRUVCPiA8aGVoPjs8QkFTPjs8QUlJPjtJR05PUkUKKzxVRkVFQz4gPGhlaD47PEJBUz47PEFNRT47SUdOT1JFCis8VUZFOTM+IDxoZWg+OzxBRE8+OzxBSVM+O0lHTk9SRQorPFVGRTk0PiA8aGVoPjs8QURPPjs8QUZJPjtJR05PUkUKKzxVRkJBND4gPGhlaD47PEFIQT47PEFJUz47SUdOT1JFCis8VUZCQTU+IDxoZWg+OzxBSEE+OzxBRkk+O0lHTk9SRQorPFVGQkZDPiA8eWVoPjs8QkFTPjs8QUlTPjtJR05PUkUKKzxVRkJGRD4gPHllaD47PEJBUz47PEFGST47SUdOT1JFCis8VUZCRkU+IDx5ZWg+OzxCQVM+OzxBSUk+O0lHTk9SRQorPFVGQkZGPiA8eWVoPjs8QkFTPjs8QU1FPjtJR05PUkUKKzxVRkVFRj4gPHllaD47PEFETD47PEFJUz47SUdOT1JFCis8VUZFRjA+IDx5ZWg+OzxBREw+OzxBRkk+O0lHTk9SRQorPFVGRUYxPiA8eWVoPjs8QVlFPjs8QUlTPjtJR05PUkUKKzxVRkVGMj4gPHllaD47PEFZRT47PEFGST47SUdOT1JFCis8VUZFRjM+IDx5ZWg+OzxBWUU+OzxBSUk+O0lHTk9SRQorPFVGRUY0PiA8eWVoPjs8QVlFPjs8QU1FPjtJR05PUkUKKzxVRkVGNT4gIjxsYW0+PGFsZWZtYWRkYT4iOyI8QkFTPjxCQVM+IjsiPEFJUz48QUZJPiI7SUdOT1JFCis8VUZFRjY+ICI8bGFtPjxhbGVmbWFkZGE+IjsiPEJBUz48QkFTPiI7IjxBRkk+PEFGST4iO0lHTk9SRQorPFVGRUY3PiAiPGxhbT48aGFtemE+IjsiPEJBUz48QUhBPiI7IjxBSVM+PEFGST4iO0lHTk9SRQorPFVGRUY4PiAiPGxhbT48aGFtemE+IjsiPEJBUz48QUhBPiI7IjxBRkk+PEFGST4iO0lHTk9SRQorPFVGRUY5PiAiPGxhbT48aGFtemE+IjsiPEJBUz48QUhTPiI7IjxBSVM+PEFGST4iO0lHTk9SRQorPFVGRUZBPiAiPGxhbT48aGFtemE+IjsiPEJBUz48QUhTPiI7IjxBRkk+PEFGST4iO0lHTk9SRQorPFVGRUZCPiAiPGxhbT48YWxlZj4iOyI8QkFTPjxCQVM+IjsiPEFJUz48QUZJPiI7SUdOT1JFCis8VUZFRkM+ICI8bGFtPjxhbGVmPiI7IjxCQVM+PEJBUz4iOyI8QUZJPjxBRkk+IjtJR05PUkUKK3Jlb3JkZXItZW5kCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAiPFUwMDQ5PjxVMDA1Mj48VTAwNTI+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICI8VTA2MzE+PFUwNkNDPjxVMDYyNz48VTA2NDQ+IgorbW9uX2RlY2ltYWxfcG9pbnQgIjxVMDY2Qj4iCittb25fdGhvdXNhbmRzX3NlcCAiPFUwNjZDPiIKK21vbl9ncm91cGluZyAgICAgIDMKK3Bvc2l0aXZlX3NpZ24gICAgICIiCituZWdhdGl2ZV9zaWduICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgIDAKK2ZyYWNfZGlnaXRzICAgICAgIDAKKyUgVGhlIGZvbGxvd2luZyBwb3NpdGlvbmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIDMuMCBiaWRpcmVjdGlvbmFsIGFsZ29yaXRobSwKKyUgd2l0aCBhICJiYXNlIGRpcmVjdGlvbiIgb2YgcmlnaHQtdG8tbGVmdC4KK3BfY3NfcHJlY2VkZXMgICAgIDAKK3Bfc2VwX2J5X3NwYWNlICAgIDEKK25fY3NfcHJlY2VkZXMgICAgIDAKK25fc2VwX2J5X3NwYWNlICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgIDEKKyUgVGhlIGZvbGxvd2luZyBwb3NpdGlvbmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIDMuMCBiaWRpcmVjdGlvbmFsIGFsZ29yaXRobSwKKyUgd2l0aCBhICJiYXNlIGRpcmVjdGlvbiIgb2YgbGVmdC10by1yaWdodC4KK2ludF9wX2NzX3ByZWNlZGVzICAgICAwCitpbnRfcF9zZXBfYnlfc3BhY2UgICAgMQoraW50X25fY3NfcHJlY2VkZXMgICAgIDAKK2ludF9uX3NlcF9ieV9zcGFjZSAgICAxCitpbnRfcF9zaWduX3Bvc24gICAgICAgMQoraW50X25fc2lnbl9wb3NuICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICI8VTAwMkM+IgorZ3JvdXBpbmcgICAgICAgICAgMworRU5EIExDX05VTUVSSUMKKworTENfVElNRQorJSBBbHRlcm5hdGl2ZSBkaWdpdHMgYXJlIHVzZWQgZm9yIFBlcnNpYW4gbnVtZXJhbHMgaW4gZGF0ZSBhbmQgdGltZS4gVGhpcyBpcworJSBhIGhhY2ssIHVudGlsIGEgbmV3IHByZWZpeCBpcyBkZWZpbmVkIGZvciBhbHRlcm5hdGl2ZSBkaWdpdHMuCithbHRfZGlnaXRzCSI8VTA2RjA+PFUwNkYwPiI7IjxVMDZGMD48VTA2RjE+IjsvCisJCSI8VTA2RjA+PFUwNkYyPiI7IjxVMDZGMD48VTA2RjM+IjsvCisJCSI8VTA2RjA+PFUwNkY0PiI7IjxVMDZGMD48VTA2RjU+IjsvCisJCSI8VTA2RjA+PFUwNkY2PiI7IjxVMDZGMD48VTA2Rjc+IjsvCisJCSI8VTA2RjA+PFUwNkY4PiI7IjxVMDZGMD48VTA2Rjk+IjsvCisJCSI8VTA2RjE+PFUwNkYwPiI7IjxVMDZGMT48VTA2RjE+IjsvCisJCSI8VTA2RjE+PFUwNkYyPiI7IjxVMDZGMT48VTA2RjM+IjsvCisJCSI8VTA2RjE+PFUwNkY0PiI7IjxVMDZGMT48VTA2RjU+IjsvCisJCSI8VTA2RjE+PFUwNkY2PiI7IjxVMDZGMT48VTA2Rjc+IjsvCisJCSI8VTA2RjE+PFUwNkY4PiI7IjxVMDZGMT48VTA2Rjk+IjsvCisJCSI8VTA2RjI+PFUwNkYwPiI7IjxVMDZGMj48VTA2RjE+IjsvCisJCSI8VTA2RjI+PFUwNkYyPiI7IjxVMDZGMj48VTA2RjM+IjsvCisJCSI8VTA2RjI+PFUwNkY0PiI7IjxVMDZGMj48VTA2RjU+IjsvCisJCSI8VTA2RjI+PFUwNkY2PiI7IjxVMDZGMj48VTA2Rjc+IjsvCisJCSI8VTA2RjI+PFUwNkY4PiI7IjxVMDZGMj48VTA2Rjk+IjsvCisJCSI8VTA2RjM+PFUwNkYwPiI7IjxVMDZGMz48VTA2RjE+IjsvCisJCSI8VTA2RjM+PFUwNkYyPiI7IjxVMDZGMz48VTA2RjM+IjsvCisJCSI8VTA2RjM+PFUwNkY0PiI7IjxVMDZGMz48VTA2RjU+IjsvCisJCSI8VTA2RjM+PFUwNkY2PiI7IjxVMDZGMz48VTA2Rjc+IjsvCisJCSI8VTA2RjM+PFUwNkY4PiI7IjxVMDZGMz48VTA2Rjk+IjsvCisJCSI8VTA2RjQ+PFUwNkYwPiI7IjxVMDZGND48VTA2RjE+IjsvCisJCSI8VTA2RjQ+PFUwNkYyPiI7IjxVMDZGND48VTA2RjM+IjsvCisJCSI8VTA2RjQ+PFUwNkY0PiI7IjxVMDZGND48VTA2RjU+IjsvCisJCSI8VTA2RjQ+PFUwNkY2PiI7IjxVMDZGND48VTA2Rjc+IjsvCisJCSI8VTA2RjQ+PFUwNkY4PiI7IjxVMDZGND48VTA2Rjk+IjsvCisJCSI8VTA2RjU+PFUwNkYwPiI7IjxVMDZGNT48VTA2RjE+IjsvCisJCSI8VTA2RjU+PFUwNkYyPiI7IjxVMDZGNT48VTA2RjM+IjsvCisJCSI8VTA2RjU+PFUwNkY0PiI7IjxVMDZGNT48VTA2RjU+IjsvCisJCSI8VTA2RjU+PFUwNkY2PiI7IjxVMDZGNT48VTA2Rjc+IjsvCisJCSI8VTA2RjU+PFUwNkY4PiI7IjxVMDZGNT48VTA2Rjk+IjsvCisJCSI8VTA2RjY+PFUwNkYwPiI7IjxVMDZGNj48VTA2RjE+IjsvCisJCSI8VTA2RjY+PFUwNkYyPiI7IjxVMDZGNj48VTA2RjM+IjsvCisJCSI8VTA2RjY+PFUwNkY0PiI7IjxVMDZGNj48VTA2RjU+IjsvCisJCSI8VTA2RjY+PFUwNkY2PiI7IjxVMDZGNj48VTA2Rjc+IjsvCisJCSI8VTA2RjY+PFUwNkY4PiI7IjxVMDZGNj48VTA2Rjk+IjsvCisJCSI8VTA2Rjc+PFUwNkYwPiI7IjxVMDZGNz48VTA2RjE+IjsvCisJCSI8VTA2Rjc+PFUwNkYyPiI7IjxVMDZGNz48VTA2RjM+IjsvCisJCSI8VTA2Rjc+PFUwNkY0PiI7IjxVMDZGNz48VTA2RjU+IjsvCisJCSI8VTA2Rjc+PFUwNkY2PiI7IjxVMDZGNz48VTA2Rjc+IjsvCisJCSI8VTA2Rjc+PFUwNkY4PiI7IjxVMDZGNz48VTA2Rjk+IjsvCisJCSI8VTA2Rjg+PFUwNkYwPiI7IjxVMDZGOD48VTA2RjE+IjsvCisJCSI8VTA2Rjg+PFUwNkYyPiI7IjxVMDZGOD48VTA2RjM+IjsvCisJCSI8VTA2Rjg+PFUwNkY0PiI7IjxVMDZGOD48VTA2RjU+IjsvCisJCSI8VTA2Rjg+PFUwNkY2PiI7IjxVMDZGOD48VTA2Rjc+IjsvCisJCSI8VTA2Rjg+PFUwNkY4PiI7IjxVMDZGOD48VTA2Rjk+IjsvCisJCSI8VTA2Rjk+PFUwNkYwPiI7IjxVMDZGOT48VTA2RjE+IjsvCisJCSI8VTA2Rjk+PFUwNkYyPiI7IjxVMDZGOT48VTA2RjM+IjsvCisJCSI8VTA2Rjk+PFUwNkY0PiI7IjxVMDZGOT48VTA2RjU+IjsvCisJCSI8VTA2Rjk+PFUwNkY2PiI7IjxVMDZGOT48VTA2Rjc+IjsvCisJCSI8VTA2Rjk+PFUwNkY4PiI7IjxVMDZGOT48VTA2Rjk+IgorJSBQZXJzaWFuIGRvZXNuJ3QgaGF2ZSBhYmJyZXZpYXRpb25zIGZvciB3ZWVrZGF5cyBhbmQgbW9udGggbmFtZXMsIHNvCislICJhYmRheSIgaXMgdGhlIHNhbWUgYXMgImRheSIgYW5kICJhYm1vbiIgaXMgdGhlIHNhbWUgYXMgIm1vbiIKK2FiZGF5ICAgIjxVMDZDQz48VTA2QTk+PFUwNjM0PjxVMDY0Nj48VTA2Mjg+PFUwNjQ3PiI7LworICAgICAgICAiPFUwNjJGPjxVMDY0OD48VTA2MzQ+PFUwNjQ2PjxVMDYyOD48VTA2NDc+IjsvCisgICAgICAgICI8VTA2MzM+PFUwNjQ3PjxVMjAwQz48VTA2MzQ+PFUwNjQ2PjxVMDYyOD48VTA2NDc+IjsvCisgICAgICAgICI8VTA2ODY+PFUwNjQ3PjxVMDYyNz48VTA2MzE+PFUwNjM0PjxVMDY0Nj48VTA2Mjg+PFUwNjQ3PiI7LworICAgICAgICAiPFUwNjdFPjxVMDY0Nj48VTA2MkM+PFUwNjM0PjxVMDY0Nj48VTA2Mjg+PFUwNjQ3PiI7LworICAgICAgICAiPFUwNjJDPjxVMDY0NT48VTA2Mzk+PFUwNjQ3PiI7LworICAgICAgICAiPFUwNjM0PjxVMDY0Nj48VTA2Mjg+PFUwNjQ3PiIKK2RheSAgICAgIjxVMDZDQz48VTA2QTk+PFUwNjM0PjxVMDY0Nj48VTA2Mjg+PFUwNjQ3PiI7LworICAgICAgICAiPFUwNjJGPjxVMDY0OD48VTA2MzQ+PFUwNjQ2PjxVMDYyOD48VTA2NDc+IjsvCisgICAgICAgICI8VTA2MzM+PFUwNjQ3PjxVMjAwQz48VTA2MzQ+PFUwNjQ2PjxVMDYyOD48VTA2NDc+IjsvCisgICAgICAgICI8VTA2ODY+PFUwNjQ3PjxVMDYyNz48VTA2MzE+PFUwNjM0PjxVMDY0Nj48VTA2Mjg+PFUwNjQ3PiI7LworICAgICAgICAiPFUwNjdFPjxVMDY0Nj48VTA2MkM+PFUwNjM0PjxVMDY0Nj48VTA2Mjg+PFUwNjQ3PiI7LworICAgICAgICAiPFUwNjJDPjxVMDY0NT48VTA2Mzk+PFUwNjQ3PiI7LworICAgICAgICAiPFUwNjM0PjxVMDY0Nj48VTA2Mjg+PFUwNjQ3PiIKK21vbiAgICAgIjxVMDY5OD48VTA2Mjc+PFUwNjQ2PjxVMDY0OD48VTA2Q0M+PFUwNjQ3PiI7LworICAgICAgICAiPFUwNjQxPjxVMDY0OD48VTA2MzE+PFUwNkNDPjxVMDY0Nz4iOy8KKyAgICAgICAgIjxVMDY0NT48VTA2Mjc+PFUwNjMxPjxVMDYzMz4iOy8KKyAgICAgICAgIjxVMDYyMj48VTA2NDg+PFUwNjMxPjxVMDZDQz48VTA2NDQ+IjsvCisgICAgICAgICI8VTA2NDU+PFUwNjQ3PiI7LworICAgICAgICAiPFUwNjk4PjxVMDY0OD48VTA2MjY+PFUwNjQ2PiI7LworICAgICAgICAiPFUwNjk4PjxVMDY0OD48VTA2MjY+PFUwNkNDPjxVMDY0Nz4iOy8KKyAgICAgICAgIjxVMDYyNz48VTA2NDg+PFUwNjJBPiI7LworICAgICAgICAiPFUwNjMzPjxVMDY3RT48VTA2MkE+PFUwNjI3PjxVMDY0NT48VTA2Mjg+PFUwNjMxPiI7LworICAgICAgICAiPFUwNjI3PjxVMDY0Mz48VTA2MkE+PFUwNjI4PjxVMDYzMT4iOy8KKyAgICAgICAgIjxVMDY0Nj48VTA2NDg+PFUwNjI3PjxVMDY0NT48VTA2Mjg+PFUwNjMxPiI7LworICAgICAgICAiPFUwNjJGPjxVMDYzMz48VTA2Mjc+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IgorYWJtb24gICAiPFUwNjk4PjxVMDYyNz48VTA2NDY+PFUwNjQ4PjxVMDZDQz48VTA2NDc+IjsvCisgICAgICAgICI8VTA2NDE+PFUwNjQ4PjxVMDYzMT48VTA2Q0M+PFUwNjQ3PiI7LworICAgICAgICAiPFUwNjQ1PjxVMDYyNz48VTA2MzE+PFUwNjMzPiI7LworICAgICAgICAiPFUwNjIyPjxVMDY0OD48VTA2MzE+PFUwNkNDPjxVMDY0ND4iOy8KKyAgICAgICAgIjxVMDY0NT48VTA2NDc+IjsvCisgICAgICAgICI8VTA2OTg+PFUwNjQ4PjxVMDYyNj48VTA2NDY+IjsvCisgICAgICAgICI8VTA2OTg+PFUwNjQ4PjxVMDYyNj48VTA2Q0M+PFUwNjQ3PiI7LworICAgICAgICAiPFUwNjI3PjxVMDY0OD48VTA2MkE+IjsvCisgICAgICAgICI8VTA2MzM+PFUwNjdFPjxVMDYyQT48VTA2Mjc+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICI8VTA2Mjc+PFUwNjQzPjxVMDYyQT48VTA2Mjg+PFUwNjMxPiI7LworICAgICAgICAiPFUwNjQ2PjxVMDY0OD48VTA2Mjc+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IjsvCisgICAgICAgICI8VTA2MkY+PFUwNjMzPjxVMDYyNz48VTA2NDU+PFUwNjI4PjxVMDYzMT4iCislIFBlcnNpYW4gZG9lcyBub3QgaGF2ZSB0aGUgMTItaG91ciBmb3JtYXQKK2FtX3BtICAgIiI7IiIKK3RfZm10X2FtcG0gICAgIiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbiAoJXgpCislICAgICAgICIlT3kvJU9tLyVPZCIKK2RfZm10ICAgIjxVMDAyNT48VTAwNEY+PFUwMDc5PjxVMDAyRj4vCis8VTAwMjU+PFUwMDRGPjxVMDA2RD48VTAwMkY+LworPFUwMDI1PjxVMDA0Rj48VTAwNjQ+IgorJQorJSBBcHByb3ByaWF0ZSB0aW1lIHJlcHJlc2VudGF0aW9uICglWCkKKyUgICAgICAgIiVPSDolT006JU9TIgordF9mbXQgICAiPFUwMDI1PjxVMDA0Rj48VTAwNDg+PFUwMDNBPi8KKzxVMDAyNT48VTAwNEY+PFUwMDREPjxVMDAzQT4vCis8VTAwMjU+PFUwMDRGPjxVMDA1Mz4iCislCislIEZJWE1FOiBuZWVkIHRvIGFkZCAiSEFNWkEgQUJPVkUiIGFmdGVyIEphbnVhcnksIEZlYnJ1YXJ5LCBNYXksIEp1bHkgd2hlbiB1c2VkCislIGJlZm9yZSBhIHllYXIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbiAoJWMpCislICAgICAgICI8UkxFPiVBICVPZSAlQiAlT3k8QVJBQklDIENPTU1BPiAlT0g6JU9NOiVPUzxQREY+IgorZF90X2ZtdCAiPFUyMDJCPjxVMDAyNT48VTAwNDE+PFUwMDIwPi8KKzxVMDAyNT48VTAwNEY+PFUwMDY1PjxVMDAyMD4vCis8VTAwMjU+PFUwMDQyPjxVMDAyMD4vCis8VTAwMjU+PFUwMDRGPjxVMDA3OT48VTA2MEM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNEY+PFUwMDQ4PjxVMDAzQT4vCis8VTAwMjU+PFUwMDRGPjxVMDA0RD48VTAwM0E+LworPFUwMDI1PjxVMDA0Rj48VTAwNTM+PFUyMDJDPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbiAoZGF0ZSgxKSkKKyUgICAgICAgIjxSTEU+JUEgJU9lICVCICVPeTxBUkFCSUMgQ09NTUE+IDxTRUVOPjxBTEVGPjxBSU4+PFRFSD4gJU9IOiVPTTolT1MgKCVaKTxQREY+IgorZGF0ZV9mbXQgIjxVMjAyQj48VTAwMjU+PFUwMDQxPjxVMDAyMD4vCis8VTAwMjU+PFUwMDRGPjxVMDA2NT48VTAwMjA+LworPFUwMDI1PjxVMDA0Mj48VTAwMjA+LworPFUwMDI1PjxVMDA0Rj48VTAwNzk+PFUwNjBDPjxVMDAyMD4vCis8VTA2MzM+PFUwNjI3PjxVMDYzOT48VTA2MkE+PFUwMDIwPi8KKzxVMDAyNT48VTAwNEY+PFUwMDQ4PjxVMDAzQT4vCis8VTAwMjU+PFUwMDRGPjxVMDA0RD48VTAwM0E+LworPFUwMDI1PjxVMDA0Rj48VTAwNTM+PFUwMDIwPi8KKzxVMDAyOD48VTAwMjU+PFUwMDVBPjxVMDAyOT48VTIwMkM+IgorZmlyc3Rfd2Vla2RheSA3CitmaXJzdF93b3JrZGF5IDcKK2NhbF9kaXJlY3Rpb24gMworRU5EIExDX1RJTUUKKworTENfTUVTU0FHRVMKKyUgVGhpcyBpcyAiXlt5WTxBTEVGIE1BRERBPjxCRUg+SGZdLioiCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA3OT48VTAwNTk+PFUwNjIyPjxVMDYyOD48VTAwNDg+PFUwMDY2PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKKyUgVGhpcyBpcyAiXltuTjxLSEFIPjxOT09OPm9rXS4qIgorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDYyRT48VTA2NDY+PFUwMDZGPjxVMDA2Qj48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfUEFQRVIKK2hlaWdodCAgIDI5Nword2lkdGggICAgMjEwCitFTkQgTENfUEFQRVIKKworTENfTkFNRQorbmFtZV9nZW4gICAgIiIKK25hbWVfbWlzcyAgICI8VTA2MkU+PFUwNjI3PjxVMDY0Nj48VTA2NDU+IgorbmFtZV9tcyAgICAgIjxVMDYyRT48VTA2Mjc+PFUwNjQ2PjxVMDY0NT4iCituYW1lX21ycyAgICAiPFUwNjJFPjxVMDYyNz48VTA2NDY+PFUwNjQ1PiIKK25hbWVfbXIgICAgICI8VTA2MjI+PFUwNjQyPjxVMDYyNz48VTA2Q0M+IgorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDczPjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X25hbWUgICAiPFUwNjI3PjxVMDZDQz48VTA2MzE+PFUwNjI3PjxVMDY0Nj4iCitjb3VudHJ5X2FiMiAgICAiPFUwMDQ5PjxVMDA1Mj4iCitjb3VudHJ5X2FiMyAgICAiPFUwMDQ5PjxVMDA1Mj48VTAwNEU+IgorY291bnRyeV9udW0gICAgMzY0Citjb3VudHJ5X2NhciAgICAiPFUwMDQ5PjxVMDA1Mj4iCitjb3VudHJ5X2lzYm4gICAiPFUwMDM5PjxVMDAzNj48VTAwMzQ+IgorbGFuZ19uYW1lICAgICAgIjxVMDY0MT48VTA2Mjc+PFUwNjMxPjxVMDYzMz48VTA2Q0M+IgorbGFuZ19hYiAgICAgICAgIjxVMDA2Nj48VTAwNjE+IgorbGFuZ190ZXJtICAgICAgIjxVMDA2Nj48VTAwNjE+PFUwMDczPiIKK2xhbmdfbGliICAgICAgICI8VTAwNzA+PFUwMDY1PjxVMDA3Mj4iCitFTkQgTENfQUREUkVTUworCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTIwMkE+PFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPi8KKzxVMDAyNT48VTAwNkM+PFUyMDJDPiIKK3RlbF9kb21fZm10ICAgICI8VTIwMkE+PFUwMDI1PjxVMDA0MT48VTIwMTI+PFUwMDI1PjxVMDA2Qz48VTIwMkM+IgoraW50X3NlbGVjdCAgICAgIjxVMDAzMD48VTAwMzA+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzOT48VTAwMzg+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9maV9GSSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2ZpX0ZJCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNjA0ODcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9maV9GSQpAQCAtMCwwICsxLDI0NCBAQAorZXNjYXBlX2NoYXIJLworY29tbWVudF9jaGFyICAgICUKKworJSBGaW5uaXNoIGxhbmd1YWdlIGxvY2FsZSBmb3IgRmlubGFuZAorJSBzb3J0aW5nIGFjY29yZGluZyB0byBTRlMgNDYwMCAoMTk4Ni0wNi0wOSkKKyUgU291cmNlOiBSQVAKKyUgQWRkcmVzczogU2Fua3QgSm8vL3JnZW5zIEFsbGUgOAorJSAgICBESy0xNjE1IEtvLy9iZW5oYXZuIFYsIERhbm1hcmsKKyUgQ29udGFjdDogS2VsZCBTaW1vbnNlbgorJSBFbWFpbDogS2VsZC5TaW1vbnNlbkBka3V1Zy5kaworJSBUZWw6ICs0NSAtIDMxMjI2NTQzCislIEZheDogKzQ1IC0gMzMyNTY1NDMKKyUgTGFuZ3VhZ2U6IGZpCislIFRlcnJpdG9yeTogRkkKKyUgUmV2aXNpb246IDQuMworJSBEYXRlOiAxOTk2LTEwLTE1CislIEFwcGxpY2F0aW9uOiBnZW5lcmFsCislIFVzZXJzOiBnZW5lcmFsCislIENoYXJzZXQ6IElTTy04ODU5LTEKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKyUKKyUgVXNlZnVsIHNvdXJjZXM6CislICAgTG9jYWxlIGluZm8gZm9yIEZpbm5pc2ggaW4gRmlubGFuZAorJSAgICAgaHR0cDovL3N0ZC5ka3V1Zy5kay9jdWx0cmVnL3JlZ2lzdHJhdGlvbnMvbmFycmF0aXZlL2ZpX0ZJLF8xLjAKKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkZpbm5pc2ggbG9jYWxlIGZvciBGaW5sYW5kIgorc291cmNlICAgICAiUkFQIgorYWRkcmVzcyAgICAiU2Fua3QgSjxVMDBGOD5yZ2VucyBBbGxlIDgsIERLLTE2MTUgSzxVMDBGOD5iZW5oYXZuIFYsIERhbm1hcmsiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiRmlubmlzaCIKK3RlcnJpdG9yeSAgIkZpbmxhbmQiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA2LTI5IgorJQorY2F0ZWdvcnkgICJmaV9GSToyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJmaV9GSToyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJmaV9GSToyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImZpX0ZJOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiZmlfRkk6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJmaV9GSToyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJmaV9GSToyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJmaV9GSToyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJmaV9GSToyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImZpX0ZJOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiZmlfRkk6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DT0xMQVRFCitjb3B5ICJpc28xNDY1MV90MSIKKworY29sbGF0aW5nLXN5bWJvbCA8YS1yaW5nPgorY29sbGF0aW5nLXN5bWJvbCA8YS1kaWFlcmlzaXM+Citjb2xsYXRpbmctc3ltYm9sIDxvLWRpYWVyaXNpcz4KKworcmVvcmRlci1hZnRlciA8ej4KKzxhLXJpbmc+Cis8YS1kaWFlcmlzaXM+Cis8by1kaWFlcmlzaXM+CisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDVBPgorPFUwMEU1PiA8YS1yaW5nPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDBDNT4gPGEtcmluZz47PEJBUz47PENBUD47SUdOT1JFCis8VTAxRkI+IDxhLXJpbmc+OzxBQ0E+OzxNSU4+O0lHTk9SRQorPFUwMUZBPiA8YS1yaW5nPjs8QUNBPjs8Q0FQPjtJR05PUkUKKzxVMDBFND4gPGEtZGlhZXJpc2lzPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDBDND4gPGEtZGlhZXJpc2lzPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDBFNj4gPGEtZGlhZXJpc2lzPjs8UkVVPjs8TUlOPjtJR05PUkUKKzxVMDBDNj4gPGEtZGlhZXJpc2lzPjs8UkVVPjs8Q0FQPjtJR05PUkUKKzxVMDFGRD4gPGEtZGlhZXJpc2lzPjs8VTAxRkQ+OzxNSU4+O0lHTk9SRQorPFUwMUZDPiA8YS1kaWFlcmlzaXM+OzxVMDFGRD47PENBUD47SUdOT1JFCis8VTAxRTM+IDxhLWRpYWVyaXNpcz47PE1BQz47PE1JTj47SUdOT1JFCis8VTAxRTI+IDxhLWRpYWVyaXNpcz47PE1BQz47PENBUD47SUdOT1JFCis8VTAwRjY+IDxvLWRpYWVyaXNpcz47PEJBUz47PE1JTj47SUdOT1JFCis8VTAwRDY+IDxvLWRpYWVyaXNpcz47PEJBUz47PENBUD47SUdOT1JFCis8VTAwRjg+IDxvLWRpYWVyaXNpcz47PFUwMEQ4Pjs8TUlOPjtJR05PUkUKKzxVMDBEOD4gPG8tZGlhZXJpc2lzPjs8VTAwRDg+OzxDQVA+O0lHTk9SRQorPFUwMUZGPiA8by1kaWFlcmlzaXM+OzxVMDFGRj47PE1JTj47SUdOT1JFCis8VTAxRkU+IDxvLWRpYWVyaXNpcz47PFUwMUZGPjs8Q0FQPjtJR05PUkUKKzxVMDBGNT4gPG8tZGlhZXJpc2lzPjs8VElMPjs8TUlOPjtJR05PUkUKKzxVMDBENT4gPG8tZGlhZXJpc2lzPjs8VElMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAxNkE+Cis8VTAwNzY+IDx2Pjs8VTAwNTY+OzxCQVM+OzxNSU4+Cis8VTAwNTY+IDx2Pjs8VTAwNTY+OzxCQVM+OzxDQVA+Cis8VTFFN0Q+IDx2Pjs8VTAwNTY+OzxUSUw+OzxNSU4+Cis8VTFFN0M+IDx2Pjs8VTAwNTY+OzxUSUw+OzxDQVA+Cis8VTAwNzc+IDx3Pjs8VTAwNTc+OzxCQVM+OzxNSU4+Cis8VTAwNTc+IDx3Pjs8VTAwNTc+OzxCQVM+OzxDQVA+Cis8VTFFODM+IDx3Pjs8VTAwNTc+OzxBQ0E+OzxNSU4+Cis8VTFFODI+IDx3Pjs8VTAwNTc+OzxBQ0E+OzxDQVA+Cis8VTFFODE+IDx3Pjs8VTAwNTc+OzxHUkE+OzxNSU4+Cis8VTFFODA+IDx3Pjs8VTAwNTc+OzxHUkE+OzxDQVA+Cis8VTAxNzU+IDx3Pjs8VTAwNTc+OzxDSVI+OzxNSU4+Cis8VTAxNzQ+IDx3Pjs8VTAwNTc+OzxDSVI+OzxDQVA+Cis8VTFFODU+IDx3Pjs8VTAwNTc+OzxSRVU+OzxNSU4+Cis8VTFFODQ+IDx3Pjs8VTAwNTc+OzxSRVU+OzxDQVA+Cis8VTFFODc+IDx3Pjs8VTAwNTc+OzxQQ1Q+OzxNSU4+Cis8VTFFODY+IDx3Pjs8VTAwNTc+OzxQQ1Q+OzxDQVA+CisKK3Jlb3JkZXItYWZ0ZXIgPFUwMEZGPgorPFUwMEZDPiA8eT47PERUVD47PE1JTj47SUdOT1JFCis8VTAwREM+IDx5Pjs8RFRUPjs8Q0FQPjtJR05PUkUKKworJSAgUHJlc2VudCBpbiBpc28xNDY1MV90MSwgYnV0IHRoZXNlIGRlZmluaXRpb25zIHNlZW0gdG8gaGF2ZSBiZWVuCislICByZW1vdmVkIGZyb20gbGF0ZXN0IGlzbzE0NjUxIHRhYmxlcy4KK3Jlb3JkZXItYWZ0ZXIgPFUwMTYyPgorPFUwMEZFPiAiPHQ+PGg+IjsiPExJRz48TElHPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwMERFPiAiPHQ+PGg+IjsiPExJRz48TElHPiI7IjxDQVA+PENBUD4iO0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA2ND4KKzxVMDBGMD4gPGQ+OzxQQ0w+OzxNSU4+O0lHTk9SRQorPFUwMEQwPiA8ZD47PFBDTD47PENBUD47SUdOT1JFCis8VTAxMTE+IDxkPjs8T0JMPjs8TUlOPjtJR05PUkUKKzxVMDExMD4gPGQ+OzxPQkw+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWVuZAorCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAiaTE4biIKKwordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAiPFUwMDQ1PjxVMDA1NT48VTAwNTI+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICI8VTIwQUM+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgIjxVMDAyQz4iCittb25fdGhvdXNhbmRzX3NlcCAgICAiPFUwMEEwPiIKK21vbl9ncm91cGluZyAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgMgorJSBpbnRfY3Vycl9zeW1ib2wgcHJlY2VkZXMKKyUgY3Vycl9zeW1ib2wgc3VjY2VlZHMKK3BfY3NfcHJlY2VkZXMgICAgICAgIDAKK3Bfc2VwX2J5X3NwYWNlICAgICAgIDIKK25fY3NfcHJlY2VkZXMgICAgICAgIDAKK25fc2VwX2J5X3NwYWNlICAgICAgIDIKK3Bfc2lnbl9wb3NuICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICI8VTAwQTA+IgorZ3JvdXBpbmcgICAgICAgICAgICAgMzszCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICAiPFUwMDczPjxVMDA3NT4iOyI8VTAwNkQ+PFUwMDYxPiI7IjxVMDA3ND48VTAwNjk+IjsvCisgICAgICAgICAiPFUwMDZCPjxVMDA2NT4iOyI8VTAwNzQ+PFUwMDZGPiI7IjxVMDA3MD48VTAwNjU+IjsvCisgICAgICAgICAiPFUwMDZDPjxVMDA2MT4iCitkYXkgICAgICAiPFUwMDczPjxVMDA3NT48VTAwNkU+PFUwMDZFPjxVMDA3NT48VTAwNkU+PFUwMDc0PjxVMDA2MT48VTAwNjk+IjsvCisgICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNjE+PFUwMDZFPjxVMDA2MT48VTAwNkU+PFUwMDc0PjxVMDA2MT48VTAwNjk+IjsvCisgICAgICAgICAiPFUwMDc0PjxVMDA2OT48VTAwNjk+PFUwMDczPjxVMDA3ND48VTAwNjE+PFUwMDY5PiI7LworICAgICAgICAgIjxVMDA2Qj48VTAwNjU+PFUwMDczPjxVMDA2Qj48VTAwNjk+PFUwMDc2PjxVMDA2OT48VTAwNjk+PFUwMDZCPjxVMDA2Qj48VTAwNkY+IjsvCisgICAgICAgICAiPFUwMDc0PjxVMDA2Rj48VTAwNzI+PFUwMDczPjxVMDA3ND48VTAwNjE+PFUwMDY5PiI7LworICAgICAgICAgIjxVMDA3MD48VTAwNjU+PFUwMDcyPjxVMDA2QT48VTAwNjE+PFUwMDZFPjxVMDA3ND48VTAwNjE+PFUwMDY5PiI7LworICAgICAgICAgIjxVMDA2Qz48VTAwNjE+PFUwMDc1PjxVMDA2MT48VTAwNkU+PFUwMDc0PjxVMDA2MT48VTAwNjk+IgorYWJtb24gICAgIjxVMDA3ND48VTAwNjE+PFUwMDZEPjxVMDA2RD48VTAwNjk+PFUwMEEwPiI7LworICAgICAgICAgIjxVMDA2OD48VTAwNjU+PFUwMDZDPjxVMDA2RD48VTAwNjk+PFUwMEEwPiI7LworICAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDYxPjxVMDA2Qz48VTAwNjk+PFUwMDczPiI7LworICAgICAgICAgIjxVMDA2OD48VTAwNzU+PFUwMDY4PjxVMDA3ND48VTAwNjk+PFUwMEEwPiI7LworICAgICAgICAgIjxVMDA3ND48VTAwNkY+PFUwMDc1PjxVMDA2Qj48VTAwNkY+PFUwMEEwPiI7LworICAgICAgICAgIjxVMDA2Qj48VTAwNjU+PFUwMDczPjxVMDBFND48VTAwQTA+PFUwMEEwPiI7LworICAgICAgICAgIjxVMDA2OD48VTAwNjU+PFUwMDY5PjxVMDA2RT48VTAwRTQ+PFUwMEEwPiI7LworICAgICAgICAgIjxVMDA2NT48VTAwNkM+PFUwMDZGPjxVMDBBMD48VTAwQTA+PFUwMEEwPiI7LworICAgICAgICAgIjxVMDA3Mz48VTAwNzk+PFUwMDc5PjxVMDA3Mz48VTAwQTA+PFUwMEEwPiI7LworICAgICAgICAgIjxVMDA2Qz48VTAwNkY+PFUwMDZCPjxVMDA2MT48VTAwQTA+PFUwMEEwPiI7LworICAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3Mj48VTAwNjE+PFUwMDczPiI7LworICAgICAgICAgIjxVMDA2QT48VTAwNkY+PFUwMDc1PjxVMDA2Qz48VTAwNzU+PFUwMEEwPiIKK21vbiAgICAgICI8VTAwNzQ+PFUwMDYxPjxVMDA2RD48VTAwNkQ+PFUwMDY5PjxVMDA2Qj48VTAwNzU+PFUwMDc1PiI7LworICAgICAgICAgIjxVMDA2OD48VTAwNjU+PFUwMDZDPjxVMDA2RD48VTAwNjk+PFUwMDZCPjxVMDA3NT48VTAwNzU+IjsvCisgICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNjE+PFUwMDZDPjxVMDA2OT48VTAwNzM+PFUwMDZCPjxVMDA3NT48VTAwNzU+IjsvCisgICAgICAgICAiPFUwMDY4PjxVMDA3NT48VTAwNjg+PFUwMDc0PjxVMDA2OT48VTAwNkI+PFUwMDc1PjxVMDA3NT4iOy8KKyAgICAgICAgICI8VTAwNzQ+PFUwMDZGPjxVMDA3NT48VTAwNkI+PFUwMDZGPjxVMDA2Qj48VTAwNzU+PFUwMDc1PiI7LworICAgICAgICAgIjxVMDA2Qj48VTAwNjU+PFUwMDczPjxVMDBFND48VTAwNkI+PFUwMDc1PjxVMDA3NT4iOy8KKyAgICAgICAgICI8VTAwNjg+PFUwMDY1PjxVMDA2OT48VTAwNkU+PFUwMEU0PjxVMDA2Qj48VTAwNzU+PFUwMDc1PiI7LworICAgICAgICAgIjxVMDA2NT48VTAwNkM+PFUwMDZGPjxVMDA2Qj48VTAwNzU+PFUwMDc1PiI7LworICAgICAgICAgIjxVMDA3Mz48VTAwNzk+PFUwMDc5PjxVMDA3Mz48VTAwNkI+PFUwMDc1PjxVMDA3NT4iOy8KKyAgICAgICAgICI8VTAwNkM+PFUwMDZGPjxVMDA2Qj48VTAwNjE+PFUwMDZCPjxVMDA3NT48VTAwNzU+IjsvCisgICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMDcyPjxVMDA2MT48VTAwNzM+PFUwMDZCPjxVMDA3NT48VTAwNzU+IjsvCisgICAgICAgICAiPFUwMDZBPjxVMDA2Rj48VTAwNzU+PFUwMDZDPjxVMDA3NT48VTAwNkI+PFUwMDc1PjxVMDA3NT4iCitkX3RfZm10ICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMkU+PFUwMDIwPjxVMDAyNT48VTAwNDI+LworPFUwMDc0PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwMkU+PFUwMDI1Pi8KKzxVMDA0RD48VTAwMkU+PFUwMDI1PjxVMDA1Mz4iCitkX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMkU+PFUwMDI1PjxVMDA2RD48VTAwMkU+PFUwMDI1PjxVMDA1OT4iCit0X2ZtdCAgICAiPFUwMDI1PjxVMDA0OD48VTAwMkU+PFUwMDI1PjxVMDA0RD48VTAwMkU+PFUwMDI1PjxVMDA1Mz4iCithbV9wbSAgICAiIjsiIgordF9mbXRfYW1wbSAgIiIKK2RhdGVfZm10ICAgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDJEPjxVMDA2ND48VTAwMkU+PFUwMDI1Pi8KKzxVMDAyRD48VTAwNkQ+PFUwMDJFPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDJFPjxVMDAyNT4vCis8VTAwNEQ+PFUwMDJFPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwN0E+IgorZmlyc3Rfd2Vla2RheSAyICUgTW9uZGF5CitmaXJzdF93b3JrZGF5IDIgJSBNb25kYXkKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCit5ZXNleHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNEI+PFUwMDZCPjxVMDA0QT48VTAwNkE+PFUwMDU5PjxVMDA3OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICAiPFUwMDVFPjxVMDA1Qj48VTAwNEU+PFUwMDZFPjxVMDA0NT48VTAwNjU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCitoZWlnaHQgICAyOTcKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzM+PFUwMDM1PjxVMDAzOD4iCitpbnRfc2VsZWN0ICAgICAiPFUwMDMwPjxVMDAzMD4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICI8VTAwNDY+PFUwMDQ5PiIKK2NvdW50cnlfYWIzICI8VTAwNDY+PFUwMDQ5PjxVMDA0RT4iCitjb3VudHJ5X251bSAyNDYKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9maV9GSUBldXJvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZmlfRklAZXVybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzYzMjJiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZmlfRklAZXVybwpAQCAtMCwwICsxLDg0IEBACitlc2NhcGVfY2hhcgkvCitjb21tZW50X2NoYXIgICAgJQorCislIEZpbm5pc2ggbGFuZ3VhZ2UgbG9jYWxlIGZvciBGaW5sYW5kIHdpdGggRXVybworJSBMYW5ndWFnZTogZmkKKyUgVGVycml0b3J5OiBGSQorJSBPcHRpb246IGV1cm8KKyUgRGF0ZTogMjAwMC0wOC0yMAorJSBBcHBsaWNhdGlvbjogZ2VuZXJhbAorJSBVc2VyczogZ2VuZXJhbAorJSBDaGFyc2V0OiBJU08tODg1OS0xNQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiRmlubmlzaCBsb2NhbGUgZm9yIEZpbmxhbmQgd2l0aCBFdXJvIgorc291cmNlICAgICAiRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIgorYWRkcmVzcyAgICAiNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQSIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJGaW5uaXNoIgordGVycml0b3J5ICAiRmlubGFuZCIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDgtMjAiCislCitjYXRlZ29yeSAgImZpX0ZJQGV1cm86MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZmlfRklAZXVybzoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJmaV9GSUBldXJvOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiZmlfRklAZXVybzoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImZpX0ZJQGV1cm86MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJmaV9GSUBldXJvOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImZpX0ZJQGV1cm86MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZmlfRklAZXVybzoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJmaV9GSUBldXJvOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiZmlfRklAZXVybzoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImZpX0ZJOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ09MTEFURQorY29weSAiZmlfRkkiCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAiZmlfRkkiCitFTkQgTENfQ1RZUEUKKworTENfTU9ORVRBUlkKK2NvcHkgImZpX0ZJIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgImZpX0ZJIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorY29weSAiZmlfRkkiCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworY29weSAiZmlfRkkiCitFTkQgTENfTUVTU0FHRVMKKworTENfUEFQRVIKK2NvcHkgImZpX0ZJIgorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQorY29weSAiZmlfRkkiCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJmaV9GSSIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCitjb3B5ICJmaV9GSSIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK2NvcHkgImZpX0ZJIgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2ZpbF9QSCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2ZpbF9QSApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTlhNDNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZmlsX1BICkBAIC0wLDAgKzEsMTg0IEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgRmlsaXBpbm8gTGFuZ3VhZ2UgTG9jYWxlIGZvciBQaGlsaXBwaW5lcworJSBTb3VyY2U6IAorJSBDb250YWN0OiBSZW5lIFRvcnJlcywgUGFibG8gU2FyYXR4YWdhIAorJSBFbWFpbDogPHJndG9ycmVAcm9ja2V0bWFpbC5jb20+LCA8cGFibG9AbWFuZHJha2Vzb2Z0LmNvbT4KKyUgTGFuZ3VhZ2U6IGZpbAorJSBUZXJyaXRvcnk6IFBICislIFJldmlzaW9uOiAwLjUKKyUgRGF0ZTogMjAwNS0wMi0wMgorJSBVc2VyczogZ2VuZXJhbAorJSBDaGFyc2V0OiBVVEYtOAorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgIkZpbGlwaW5vIGxhbmd1YWdlIGxvY2FsZSBmb3IgUGhpbGlwcGluZXMiCitzb3VyY2UgIlJlbmUgVG9ycmVzIgorYWRkcmVzcyAiIgorY29udGFjdCAiUmVuZSBUb3JyZXMsIFBhYmxvIFNhcmF0eGFnYSIKK2VtYWlsICJyZ3RvcnJlQHJvY2tldG1haWwuY29tLCBwYWJsb0BtYW5kcmFrZXNvZnQuY29tIgordGVsICIiCitmYXggIiIKK2xhbmd1YWdlICJGaWxpcGlubyIKK3RlcnJpdG9yeSAiUGhpbGlwcGluZXMiCityZXZpc2lvbiAiMC41IgorZGF0ZSAiMjAwNS0wMi0wMiIKKworY2F0ZWdvcnkgcGhfUEg6MjAwMDtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgcGhfUEg6MjAwMDtMQ19DVFlQRQorY2F0ZWdvcnkgcGhfUEg6MjAwMDtMQ19DT0xMQVRFCitjYXRlZ29yeSBwaF9QSDoyMDAwO0xDX1RJTUUKK2NhdGVnb3J5IHBoX1BIOjIwMDA7TENfTlVNRVJJQworY2F0ZWdvcnkgcGhfUEg6MjAwMDtMQ19QQVBFUgorY2F0ZWdvcnkgcGhfUEg6MjAwMDtMQ19URUxFUEhPTkUKK2NhdGVnb3J5IHBoX1BIOjIwMDA7TENfTUVBU1VSRU1FTlQKK2NhdGVnb3J5IHBoX1BIOjIwMDA7TENfQUREUkVTUworY2F0ZWdvcnkgcGhfUEg6MjAwMDtMQ19NRVNTQUdFUworY2F0ZWdvcnkgcGhfUEg6MjAwMDtMQ19NT05FVEFSWQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgInRsX1BIIgorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorCislIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBufiBuZyBvIHAgcSByIHMgdCB1IHYgdyB4IHkgegorCitjb2xsYXRpbmctc3ltYm9sICA8bi1nLXBoPgorY29sbGF0aW5nLWVsZW1lbnQgPE4tRz4gZnJvbSAiPFUwMDRFPjxVMDA0Nz4iCitjb2xsYXRpbmctZWxlbWVudCA8bi1nPiBmcm9tICI8VTAwNkU+PFUwMDY3PiIKK2NvbGxhdGluZy1lbGVtZW50IDxOLWc+IGZyb20gIjxVMDA0RT48VTAwNjc+IgorY29sbGF0aW5nLWVsZW1lbnQgPG4tRz4gZnJvbSAiPFUwMDZFPjxVMDA0Nz4iCitjb2xsYXRpbmctc3ltYm9sICA8bnRpbGRlPgorCitjb2xsYXRpbmctc3ltYm9sIDxDQVAtTUlOPgorY29sbGF0aW5nLXN5bWJvbCA8TUlOLUNBUD4KKworcmVvcmRlci1hZnRlciA8TUlOPgorPE1JTi1DQVA+CityZW9yZGVyLWFmdGVyIDxDQVA+Cis8Q0FQLU1JTj4KKworcmVvcmRlci1hZnRlciA8bj4KKzxudGlsZGU+Cis8bi1nLXBoPgorCityZW9yZGVyLWFmdGVyIDxVMDA2RT4KKzxVMDBGMT4gPG50aWxkZT47PFRJTD47PE1JTj47SUdOT1JFCis8bi1nPgk8bi1nLXBoPjs8UENUPjs8TUlOPjtJR05PUkUKKzxuLUc+CTxuLWctcGg+OzxQQ1Q+OzxNSU4tQ0FQPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDRFPiAKKzxVMDBEMT4gPG50aWxkZT47PFRJTD47PENBUD47SUdOT1JFCis8Ti1HPgk8bi1nLXBoPjs8UENUPjs8Q0FQPjtJR05PUkUKKzxOLWc+CTxuLWctcGg+OzxQQ1Q+OzxDQVAtTUlOPjtJR05PUkUKKworcmVvcmRlci1lbmQKKworRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgICAgICI8VTAwNTA+PFUwMDQ4PjxVMDA1MD48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICAgIjxVMDA1MD48VTAwNjg+PFUwMDUwPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgIDAKK25fY3NfcHJlY2VkZXMgICAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJ0bF9QSCIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA0Qz48VTAwNjk+PFUwMDZFPiI7IjxVMDA0Qz48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzI+IjsiPFUwMDREPjxVMDA2OT48VTAwNzk+IjsvCisgICAgICAgICI8VTAwNDg+PFUwMDc1PjxVMDA3Nz4iOyI8VTAwNDI+PFUwMDY5PjxVMDA3OT4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDYyPiIKK2RheSAgICAgIjxVMDA0Qz48VTAwNjk+PFUwMDZFPjxVMDA2Nz48VTAwNjc+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDRDPjxVMDA3NT48VTAwNkU+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPjxVMDA3ND48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2OT48VTAwNzk+PFUwMDY1PjxVMDA3Mj48VTAwNkI+PFUwMDZGPjxVMDA2Qz48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDQ4PjxVMDA3NT48VTAwNzc+PFUwMDY1PjxVMDA2Mj48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDQyPjxVMDA2OT48VTAwNzk+PFUwMDY1PjxVMDA3Mj48VTAwNkU+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDYyPjxVMDA2MT48VTAwNjQ+PFUwMDZGPiIKK2FibW9uICAgIjxVMDA0NT48VTAwNkU+PFUwMDY1PiI7IjxVMDA1MD48VTAwNjU+PFUwMDYyPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzI+IjsiPFUwMDQxPjxVMDA2Mj48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3OT4iOyI8VTAwNDg+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA0OD48VTAwNzU+PFUwMDZDPiI7IjxVMDA0MT48VTAwNjc+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNzA+IjsiPFUwMDRGPjxVMDA2Qj48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNEU+PFUwMDZGPjxVMDA2Mj4iOyI8VTAwNDQ+PFUwMDY5PjxVMDA3Mz4iCittb24gICAgICI8VTAwNDU+PFUwMDZFPjxVMDA2NT48VTAwNzI+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDUwPjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA2NT48VTAwNzI+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzI+PFUwMDczPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA0MT48VTAwNjI+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3OT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNDg+PFUwMDc1PjxVMDA2RT48VTAwNzk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDQ4PjxVMDA3NT48VTAwNkM+PFUwMDc5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA0MT48VTAwNjc+PFUwMDZGPjxVMDA3Mz48VTAwNzQ+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNzA+PFUwMDc0PjxVMDA2OT48VTAwNzk+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA0Rj48VTAwNkI+PFUwMDc0PjxVMDA3NT48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDYyPjxVMDA2OT48VTAwNzk+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA0ND48VTAwNjk+PFUwMDczPjxVMDA3OT48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiIKKyUKK2RfdF9mbXQgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgICAgICI8VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDcyPiIKK2FtX3BtICAgICAgICI8VTAwNEU+PFUwMDJFPjxVMDA1NT48VTAwMkU+IjsiPFUwMDRFPjxVMDAyRT48VTAwNDg+PFUwMDJFPiIKK3RfZm10X2FtcG0gICI8VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPiIKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCit5ZXNzdHIgICAgICAiPFUwMDZGPjxVMDA2Rj4iCitub3N0cgkgICAgIjxVMDA2OD48VTAwNjk+PFUwMDZFPjxVMDA2ND48VTAwNjk+IgoreWVzZXhwciAgICAgIjxVMDA1Qj48VTAwNkY+PFUwMDRGPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAgICAgIjxVMDA1Qj48VTAwNjg+PFUwMDQ4PjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCitoZWlnaHQgICAgICAyOTcKK3dpZHRoICAgICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX01FQVNVUkVNRU5UCittZWFzdXJlbWVudCAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorJSBmb3JtYXQ6ICVkJXQlZyV0JW0ldCVmCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCislIGVtcHR5CituYW1lX2dlbiAgICAiIgorJSAiRy4iCituYW1lX21yICAgICAiPFUwMDQ3PjxVMDAyRT4iCislICJHbmcuIgorbmFtZV9tcnMgICAgIjxVMDA0Nz48VTAwNkU+PFUwMDY3PjxVMDAyRT4iCislICJCYi4iCituYW1lX21zICAgICAiPFUwMDQyPjxVMDA2Mj48VTAwMkU+IgorJSAiQmIuIgorbmFtZV9taXNzICAgIjxVMDA0Mj48VTAwNjI+PFUwMDJFPiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK2NvcHkgInRsX1BIIgorRU5EIExDX0FERFJFU1MKKworTENfVEVMRVBIT05FCitjb3B5ICJ0bF9QSCIKK0VORCBMQ19URUxFUEhPTkUKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZm9fRk8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9mb19GTwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTljMmVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZm9fRk8KQEAgLTAsMCArMSwxNDUgQEAKK2VzY2FwZV9jaGFyIC8KK2NvbW1lbnRfY2hhciAlCisKKyUgRmFyb2VzZSBsYW5ndWFnZSBsb2NhbGUgZm9yIEZhcm9lIElzbGFuZHMKKyUgU291cmNlOiBEYW5pc2ggU3RhbmRhcmRzIEFzc29jaWF0aW9uCislIEFkZHJlc3M6IEtvbGxlZ2lldmVqIDYKKyUgICAgREstMjkyMCBDaGFybG90dGVubHVuZCwgRGFubWFyaworJSBDb250YWN0OiBLZWxkIFNpbW9uc2VuCislIEVtYWlsOiBLZWxkLlNpbW9uc2VuQGRrdXVnLmRrCislIFRlbDogKzQ1IC0gMzk5NjYxMDEKKyUgRmF4OiArNDUgLSAzOTk2NjEwMgorJSBMYW5ndWFnZTogZm8KKyUgVGVycml0b3J5OiBGTworJSBSZXZpc2lvbjogNC4zCislIERhdGU6IDE5OTYtMTAtMTUKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMuZHMKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorJQorJSBPbmx5IExDX1RJTUUgYW5kIExDX01FU1NBR0VTIGFyZQorJSBzcGVjaWZpZWQgaGVyZSwgZWxzZSB1c2UgdGhlIGRhX0RLIGxvY2FsZQorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiRmFyb2VzZSBsb2NhbGUgZm9yIEZhcm9lIElzbGFuZHMiCitzb3VyY2UgICAgICJEYW5pc2ggU3RhbmRhcmRzIEFzc29jaWF0aW9uIgorYWRkcmVzcyAgICAiS29sbGVnaWV2ZWogNiwgREstMjkyMCBDaGFybG90dGVubHVuZCwgRGFubWFyayIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJGYXJvZXNlIgordGVycml0b3J5ICAiRmFyb2UgSXNsYW5kcyIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjkiCislCitjYXRlZ29yeSAgImZvX0ZPOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImZvX0ZPOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImZvX0ZPOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiZm9fRk86MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJmb19GTzoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImZvX0ZPOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImZvX0ZPOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImZvX0ZPOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImZvX0ZPOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiZm9fRk86MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJmb19GTzoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJkYV9ESyIKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCitjb3B5ICJkYV9ESyIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCitjb3B5ICJkYV9ESyIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJkYV9ESyIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA3Mz48VTAwNzU+PFUwMDZFPiI7IjxVMDA2RD48VTAwRTE+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDc0PjxVMDBGRD48VTAwNzM+IjsiPFUwMDZEPjxVMDA2OT48VTAwNkI+IjsvCisgICAgICAgICI8VTAwNjg+PFUwMEYzPjxVMDA3Mz4iOyI8VTAwNjY+PFUwMDcyPjxVMDBFRD4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwNjU+PFUwMDc5PiIKK2RheSAgICAgIjxVMDA3Mz48VTAwNzU+PFUwMDZFPjxVMDA2RT48VTAwNzU+PFUwMDY0PjxVMDA2MT48VTAwNjc+PFUwMDc1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwRTE+PFUwMDZFPjxVMDA2MT48VTAwNjQ+PFUwMDYxPjxVMDA2Nz48VTAwNzU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDc0PjxVMDBGRD48VTAwNzM+PFUwMDY0PjxVMDA2MT48VTAwNjc+PFUwMDc1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjk+PFUwMDZCPjxVMDA3NT48VTAwNjQ+PFUwMDYxPjxVMDA2Nz48VTAwNzU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDY4PjxVMDBGMz48VTAwNzM+PFUwMDY0PjxVMDA2MT48VTAwNjc+PFUwMDc1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2Nj48VTAwNzI+PFUwMEVEPjxVMDA2Nz48VTAwNjc+PFUwMDZBPjxVMDA2MT48VTAwNjQ+PFUwMDYxPjxVMDA2Nz48VTAwNzU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZDPjxVMDA2NT48VTAwNzk+PFUwMDY3PjxVMDA2MT48VTAwNzI+PFUwMDY0PjxVMDA2MT48VTAwNjc+PFUwMDc1PjxVMDA3Mj4iCithYm1vbiAgICI8VTAwNkE+PFUwMDYxPjxVMDA2RT4iOyI8VTAwNjY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2MT48VTAwNzA+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNjk+IjsiPFUwMDZBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNjE+PFUwMDc1PjxVMDA2Nz4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA2Rj48VTAwNkI+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDY0PjxVMDA2NT48VTAwNzM+IgorbW9uICAgICAiPFUwMDZBPjxVMDA2MT48VTAwNkU+PFUwMDc1PjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNjY+PFUwMDY1PjxVMDA2Mj48VTAwNzI+PFUwMDc1PjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDcwPjxVMDA3Mj48VTAwRUQ+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2RT48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Qz48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDc1PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZGPjxVMDA2Qj48VTAwNzQ+PFUwMDZGPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwNjU+PFUwMDczPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRD48VTAwMjU+PFUwMDU5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAiIjsiIgordF9mbXRfYW1wbSAgIiIKK2RhdGVfZm10ICAgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA0QT48VTAwNkE+PFUwMDU5PjxVMDA3OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA0RT48VTAwNkU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCislIEZJWE1FCitoZWlnaHQgICAyOTcKKyUgRklYTUUKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzI+PFUwMDM5PjxVMDAzOD4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCislIEZJWE1FCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICI8VTAwNDY+PFUwMDRGPiIKK2NvdW50cnlfYWIzICI8VTAwNDY+PFUwMDUyPjxVMDA0Rj4iCitjb3VudHJ5X251bSAyMzQKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9mcl9CRSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2ZyX0JFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhOTZkM2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9mcl9CRQpAQCAtMCwwICsxLDE1OCBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIEZyZW5jaCBMYW5ndWFnZSBMb2NhbGUgZm9yIEJlbGdpdW0KKyUgU291cmNlOiBSQVAKKyUgQWRkcmVzczogU2Fua3QgSm8vL3JnZW5zIEFsbGUgOAorJSAgICBESy0xNjE1IEtvLy9iZW5oYXZuIFYsIERhbm1hcmsKKyUgQ29udGFjdDogS2VsZCBTaW1vbnNlbgorJSBFbWFpbDogS2VsZC5TaW1vbnNlbkBka3V1Zy5kaworJSBUZWw6ICs0NSAtIDMxMjI2NTQzCislIEZheDogKzQ1IC0gMzMyNTY1NDMKKyUgTGFuZ3VhZ2U6IGZyCislIFRlcnJpdG9yeTogQkUKKyUgUmV2aXNpb246IDQuNAorJSBEYXRlOiAxOTk3LTAzLTE4CislIFVzZXJzOiBnZW5lcmFsCislIENoYXJzZXQ6IElTTy04ODU5LTEKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkZyZW5jaCBsb2NhbGUgZm9yIEJlbGdpdW0iCitzb3VyY2UgICAgICJSQVAiCithZGRyZXNzICAgICJTYW5rdCBKPFUwMEY4PnJnZW5zIEFsbGUgOCwgREstMTYxNSBLPFUwMEY4PmJlbmhhdm4gViwgRGFubWFyayIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJGcmVuY2giCit0ZXJyaXRvcnkgICJCZWxnaXVtIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAiZnJfQkU6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZnJfQkU6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZnJfQkU6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJmcl9CRToyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImZyX0JFOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZnJfQkU6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZnJfQkU6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZnJfQkU6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZnJfQkU6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJmcl9CRToyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImZyX0JFOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImZyX0ZSIgorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfTUVTU0FHRVMKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDZGPjxVMDA0Rj48VTAwNkE+PFUwMDRBPjxVMDA3OT48VTAwNTk+PFUwMDMxPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwMzA+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAgICI8VTAwNDU+PFUwMDU1PjxVMDA1Mj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICAgICAiPFUyMEFDPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAgICAgIjxVMDAyQz4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgICAgICI8VTAwMkU+IgorbW9uX2dyb3VwaW5nICAgICAgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgICAgICAwCitwX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAgICAgMAorbl9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAgICAgMQorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgICAgIjxVMDAyQz4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICAgICI8VTAwMkU+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAgICAwOzAKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA2ND48VTAwNjk+PFUwMDZEPiI7IjxVMDA2Qz48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsiPFUwMDZEPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDY1PjxVMDA3NT4iOyI8VTAwNzY+PFUwMDY1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjE+PFUwMDZEPiIKK2RheSAgICAgIjxVMDA2ND48VTAwNjk+PFUwMDZEPjxVMDA2MT48VTAwNkU+PFUwMDYzPjxVMDA2OD48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkM+PFUwMDc1PjxVMDA2RT48VTAwNjQ+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMDY0PjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjU+PFUwMDcyPjxVMDA2Mz48VTAwNzI+PFUwMDY1PjxVMDA2ND48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDY1PjxVMDA3NT48VTAwNjQ+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDc2PjxVMDA2NT48VTAwNkU+PFUwMDY0PjxVMDA3Mj48VTAwNjU+PFUwMDY0PjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjE+PFUwMDZEPjxVMDA2NT48VTAwNjQ+PFUwMDY5PiIKK2FibW9uICAgIjxVMDA2QT48VTAwNjE+PFUwMDZFPiI7IjxVMDA2Nj48VTAwRTk+PFUwMDc2PiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsiPFUwMDYxPjxVMDA3Nj48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA2OT4iOyI8VTAwNkE+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDY5PiI7IjxVMDA2MT48VTAwNkY+PFUwMEZCPiI7LworICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNzA+IjsiPFUwMDZGPjxVMDA2Mz48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA3Nj4iOyI8VTAwNjQ+PFUwMEU5PjxVMDA2Mz4iCittb24gICAgICI8VTAwNkE+PFUwMDYxPjxVMDA2RT48VTAwNzY+PFUwMDY5PjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNjY+PFUwMEU5PjxVMDA3Nj48VTAwNzI+PFUwMDY5PjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDc2PjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2OT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2OT48VTAwNkM+PFUwMDZDPjxVMDA2NT48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDZGPjxVMDBGQj48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2Rj48VTAwNjM+PFUwMDc0PjxVMDA2Rj48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNjQ+PFUwMEU5PjxVMDA2Mz48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiIKK2RfdF9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA3OT4iCit0X2ZtdCAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgIiI7IiIKK3RfZm10X2FtcG0gIiIKK2RhdGVfZm10ICAgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCislIEZJWE1FCitoZWlnaHQgICAyOTcKKyUgRklYTUUKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzM+PFUwMDMyPiIKK2ludF9zZWxlY3QgICAgICI8VTAwMzA+PFUwMDMwPiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKKyUgRklYTUUKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgIjxVMDA0Mj48VTAwNDU+IgorY291bnRyeV9hYjMgIjxVMDA0Mj48VTAwNDU+PFUwMDRDPiIKK2NvdW50cnlfbnVtIDA1NgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2ZyX0JFQGV1cm8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9mcl9CRUBldXJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxOTY4ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9mcl9CRUBldXJvCkBAIC0wLDAgKzEsODMgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBGcmVuY2ggTGFuZ3VhZ2UgTG9jYWxlIGZvciBCZWxnaXVtIHdpdGggRXVybworJSBMYW5ndWFnZTogZnIKKyUgVGVycml0b3J5OiBCRQorJSBPcHRpb246IGV1cm8KKyUgRGF0ZTogMjAwMC0wOC0yMAorJSBVc2VyczogZ2VuZXJhbAorJSBDaGFyc2V0OiBJU08tODg1OS0xNQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiRnJlbmNoIGxvY2FsZSBmb3IgQmVsZ2l1bSB3aXRoIEV1cm8iCitzb3VyY2UgICAgICJGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4iCithZGRyZXNzICAgICI1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkZyZW5jaCIKK3RlcnJpdG9yeSAgIkJlbGdpdW0iCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA4LTIwIgorJQorY2F0ZWdvcnkgICJmcl9CRUBldXJvOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImZyX0JFQGV1cm86MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZnJfQkVAZXVybzoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImZyX0JFQGV1cm86MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJmcl9CRUBldXJvOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZnJfQkVAZXVybzoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJmcl9CRUBldXJvOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImZyX0JFQGV1cm86MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZnJfQkVAZXVybzoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImZyX0JFQGV1cm86MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJmcl9CRUBldXJvOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImZyX0JFIgorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfTUVTU0FHRVMKK2NvcHkgImZyX0JFIgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitjb3B5ICJmcl9CRSIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJmcl9CRSIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2NvcHkgImZyX0JFIgorRU5EIExDX1RJTUUKKworTENfUEFQRVIKK2NvcHkgImZyX0JFIgorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQorY29weSAiZnJfQkUiCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJmcl9CRSIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCitjb3B5ICJmcl9CRSIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK2NvcHkgImZyX0JFIgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2ZyX0NBIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZnJfQ0EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkyYTRiMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2ZyX0NBCkBAIC0wLDAgKzEsMTU2IEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgRnJlbmNoIExhbmd1YWdlIExvY2FsZSBmb3IgQ2FuYWRhCislIFNvdXJjZTogUkFQCislIEFkZHJlc3M6IFNhbmt0IEpvLy9yZ2VucyBBbGxlIDgKKyUgICAgREstMTYxNSBLby8vYmVuaGF2biBWLCBEYW5tYXJrCislIENvbnRhY3Q6IEtlbGQgU2ltb25zZW4KKyUgRW1haWw6IEtlbGQuU2ltb25zZW5AZGt1dWcuZGsKKyUgVGVsOiArNDUgLSAzMTIyNjU0MworJSBGYXg6ICs0NSAtIDMzMjU2NTQzCislIExhbmd1YWdlOiBmcgorJSBUZXJyaXRvcnk6IENBCislIFJldmlzaW9uOiA0LjMKKyUgRGF0ZTogMTk5Ni0xMC0xNQorJSBVc2VyczogZ2VuZXJhbAorJSBSZXBlcnRvaXJlbWFwOiBtbmVtb25pYy5kcworJSBDaGFyc2V0OiBJU08tODg1OS0xCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJGcmVuY2ggbG9jYWxlIGZvciBDYW5hZGEiCitzb3VyY2UgICAgICJSQVAiCithZGRyZXNzICAgICJTYW5rdCBKPFUwMEY4PnJnZW5zIEFsbGUgOCwgREstMTYxNSBLPFUwMEY4PmJlbmhhdm4gViwgRGFubWFyayIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJGcmVuY2giCit0ZXJyaXRvcnkgICJDYW5hZGEiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA2LTI5IgorJQorY2F0ZWdvcnkgICJmcl9DQToyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJmcl9DQToyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJmcl9DQToyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImZyX0NBOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiZnJfQ0E6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJmcl9DQToyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJmcl9DQToyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJmcl9DQToyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJmcl9DQToyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImZyX0NBOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiZnJfQ0E6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiZnJfRlIiCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorY29weSAiZW5fQ0EiCitFTkQgTENfQ09MTEFURQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNkY+PFUwMDRGPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgICAgICAiPFUwMDQzPjxVMDA0MT48VTAwNDQ+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICAgIjxVMDAyND4iCittb25fZGVjaW1hbF9wb2ludCAgICAgICAgICI8VTAwMkM+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgICAiPFUwMDIwPiIKK21vbl9ncm91cGluZyAgICAgICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAgICAgMAorcF9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDAKK25fc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDAKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAgICAgICI8VTAwMkM+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAgICAiPFUwMDIwPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgICAgMDswCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICI8VTAwNjQ+PFUwMDY5PjxVMDA2RD4iOyI8VTAwNkM+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2RD48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA2NT48VTAwNzU+IjsiPFUwMDc2PjxVMDA2NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDYxPjxVMDA2RD4iCitkYXkgICAgICI8VTAwNjQ+PFUwMDY5PjxVMDA2RD48VTAwNjE+PFUwMDZFPjxVMDA2Mz48VTAwNjg+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDZDPjxVMDA3NT48VTAwNkU+PFUwMDY0PjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA2ND48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDY1PjxVMDA3Mj48VTAwNjM+PFUwMDcyPjxVMDA2NT48VTAwNjQ+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDZBPjxVMDA2NT48VTAwNzU+PFUwMDY0PjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA3Nj48VTAwNjU+PFUwMDZFPjxVMDA2ND48VTAwNzI+PFUwMDY1PjxVMDA2ND48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDYxPjxVMDA2RD48VTAwNjU+PFUwMDY0PjxVMDA2OT4iCithYm1vbiAgICI8VTAwNkE+PFUwMDYxPjxVMDA2RT4iOyI8VTAwNjY+PFUwMEU5PjxVMDA3Nj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2MT48VTAwNzY+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNjk+IjsiPFUwMDZBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2OT4iOyI8VTAwNjE+PFUwMDZGPjxVMDBGQj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA2Rj48VTAwNjM+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDY0PjxVMDBFOT48VTAwNjM+IgorbW9uICAgICAiPFUwMDZBPjxVMDA2MT48VTAwNkU+PFUwMDc2PjxVMDA2OT48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDY2PjxVMDBFOT48VTAwNzY+PFUwMDcyPjxVMDA2OT48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMDczPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA3Nj48VTAwNzI+PFUwMDY5PjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNjk+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNjk+PFUwMDZDPjxVMDA2Qz48VTAwNjU+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDYxPjxVMDA2Rj48VTAwRkI+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNzA+PFUwMDc0PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkY+PFUwMDYzPjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA3Nj48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDY0PjxVMDBFOT48VTAwNjM+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iCitkX3RfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgIjxVMDAyNT48VTAwNTk+PFUwMDJEPjxVMDAyNT48VTAwNkQ+PFUwMDJEPjxVMDAyNT48VTAwNjQ+IgordF9mbXQgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICIiOyIiCit0X2ZtdF9hbXBtICIiCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorY29weSAiZW5fQ0EiCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCitjb3B5ICJlbl9DQSIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgImVuX0NBIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAiPFUwMDQzPjxVMDA0MT4iCitjb3VudHJ5X2FiMyAiPFUwMDQzPjxVMDA0MT48VTAwNEU+IgorY291bnRyeV9udW0gMTI0CitsYW5nX25hbWUgIjxVMDA0Nj48VTAwNzI+PFUwMDYxPjxVMDA2RT48VTAwRTc+PFUwMDYxPjxVMDA2OT48VTAwNzM+IgorbGFuZ19hYiAgICI8VTAwNjY+PFUwMDcyPiIKK2xhbmdfdGVybSAiPFUwMDY2PjxVMDA3Mj48VTAwNjE+IgorbGFuZ19saWIgICI8VTAwNjY+PFUwMDcyPjxVMDA2NT4iCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZnJfQ0ggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9mcl9DSApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2I2MjgyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZnJfQ0gKQEAgLTAsMCArMSwxNDQgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBGcmVuY2ggTGFuZ3VhZ2UgTG9jYWxlIGZvciBTd2l0emVybGFuZAorJSBTb3VyY2U6IFJBUAorJSBBZGRyZXNzOiBTYW5rdCBKby8vcmdlbnMgQWxsZSA4CislICAgIERLLTE2MTUgS28vL2Jlbmhhdm4gViwgRGFubWFyaworJSBDb250YWN0OiBLZWxkIFNpbW9uc2VuCislIEVtYWlsOiBLZWxkLlNpbW9uc2VuQGRrdXVnLmRrCislIFRlbDogKzQ1IC0gMzEyMjY1NDMKKyUgRmF4OiArNDUgLSAzMzI1NjU0MworJSBMYW5ndWFnZTogZnIKKyUgVGVycml0b3J5OiBDSAorJSBSZXZpc2lvbjogNC4zCislIERhdGU6IDE5OTYtMTAtMTUKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMuZHMKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiRnJlbmNoIGxvY2FsZSBmb3IgU3dpdHplcmxhbmQiCitzb3VyY2UgICAgICJSQVAiCithZGRyZXNzICAgICJTYW5rdCBKPFUwMEY4PnJnZW5zIEFsbGUgOCwgREstMTYxNSBLPFUwMEY4PmJlbmhhdm4gViwgRGFubWFyayIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJGcmVuY2giCit0ZXJyaXRvcnkgICJTd2l0emVybGFuZCIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjkiCislCitjYXRlZ29yeSAgImZyX0NIOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImZyX0NIOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImZyX0NIOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiZnJfQ0g6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJmcl9DSDoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImZyX0NIOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImZyX0NIOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImZyX0NIOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImZyX0NIOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiZnJfQ0g6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJmcl9DSDoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJmcl9GUiIKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCitjb3B5ICJpc28xNDY1MV90MSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA0Rj48VTAwNkY+PFUwMDZBPjxVMDA0QT48VTAwNzM+PFUwMDUzPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQorY29weSAgImRlX0NIIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgICAgIjxVMDAyQz4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICAgICIiCitncm91cGluZyAgICAgICAgICAgICAgICAgIDA7MAorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorYWJkYXkgICAiPFUwMDY0PjxVMDA2OT48VTAwNkQ+IjsiPFUwMDZDPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNkQ+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNjU+PFUwMDc1PiI7IjxVMDA3Nj48VTAwNjU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDczPjxVMDA2MT48VTAwNkQ+IgorZGF5ICAgICAiPFUwMDY0PjxVMDA2OT48VTAwNkQ+PFUwMDYxPjxVMDA2RT48VTAwNjM+PFUwMDY4PjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwNzU+PFUwMDZFPjxVMDA2ND48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNjQ+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2NT48VTAwNzI+PFUwMDYzPjxVMDA3Mj48VTAwNjU+PFUwMDY0PjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNjU+PFUwMDc1PjxVMDA2ND48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNzY+PFUwMDY1PjxVMDA2RT48VTAwNjQ+PFUwMDcyPjxVMDA2NT48VTAwNjQ+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDczPjxVMDA2MT48VTAwNkQ+PFUwMDY1PjxVMDA2ND48VTAwNjk+IgorYWJtb24gICAiPFUwMDZBPjxVMDA2MT48VTAwNkU+IjsiPFUwMDY2PjxVMDBFOT48VTAwNzY+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNjE+PFUwMDc2PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDY5PiI7IjxVMDA2QT48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNjk+IjsiPFUwMDYxPjxVMDA2Rj48VTAwRkI+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD4iOyI8VTAwNkY+PFUwMDYzPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PiI7IjxVMDA2ND48VTAwRTk+PFUwMDYzPiIKK21vbiAgICAgIjxVMDA2QT48VTAwNjE+PFUwMDZFPjxVMDA3Nj48VTAwNjk+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2Nj48VTAwRTk+PFUwMDc2PjxVMDA3Mj48VTAwNjk+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNzY+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDY5PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDY5PjxVMDA2Qz48VTAwNkM+PFUwMDY1PjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNkY+PFUwMEZCPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDZGPjxVMDA2Mz48VTAwNzQ+PFUwMDZGPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwRTk+PFUwMDYzPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjA+PFUwMDI1PjxVMDA2RD48VTAwMkU+PFUwMDIwPjxVMDAyNT48VTAwNzk+IgordF9mbXQgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICIiOyIiCit0X2ZtdF9hbXBtICIiCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorJSBGSVhNRQoraGVpZ2h0ICAgMjk3CislIEZJWE1FCit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDM0PjxVMDAzMT4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCislIEZJWE1FCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICI8VTAwNDM+PFUwMDQ4PiIKK2NvdW50cnlfYWIzICI8VTAwNDM+PFUwMDQ4PjxVMDA0NT4iCitjb3VudHJ5X251bSA3NTYKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9mcl9GUiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2ZyX0ZSCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYTY1MTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9mcl9GUgpAQCAtMCwwICsxLDE4MCBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIEZyZW5jaCBMYW5ndWFnZSBMb2NhbGUgZm9yIEZyYW5jZQorJSBTb3VyY2U6IFJBUAorJSBMYW5ndWFnZTogZnIKKyUgQ29udGFjdDogVHJhZHVjLm9yZworJSBBZGRyZXNzOiAxOCwgcnVlIENhdmVuZGlzaAorJSAgICAgICAgICA3NTAxOSBQYXJpcworJSBFbWFpbDogdHJhZHVjQHRyYWR1Yy5vcmcKKyUgVGVycml0b3J5OiBGUgorJSBSZXZpc2lvbjogNC40CislIERhdGU6IDIwMDgtMDMtMDIKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBBdXRob3JzOgorJSAyMDAwLTA2LTI4LCBrZWxkLnNpbW9uc2VuQGRrdXVnLmRrCislIDIwMDgtMDMtMDIsIHN0ZXBoYW5lLnJhaW1iYXVsdEBnbWFpbC5jb20KKyUKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkZyZW5jaCBsb2NhbGUgZm9yIEZyYW5jZSIKK3NvdXJjZSAgICAgIlJBUCIKK2FkZHJlc3MgICAgIiIKK2NvbnRhY3QgICAgIlRyYWR1Yy5vcmciCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiRnJlbmNoIgordGVycml0b3J5ICAiRnJhbmNlIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwOC0wMy0xNSIKKyUKK2NhdGVnb3J5ICAiZnJfRlI6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZnJfRlI6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZnJfRlI6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJmcl9GUjoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImZyX0ZSOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZnJfRlI6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZnJfRlI6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZnJfRlI6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZnJfRlI6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJmcl9GUjoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImZyX0ZSOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CisKKyUgSW4gRnJhbmNlLCBhY2NlbnRzIGFyZSBzaW1wbHkgb21pdHRlZCBpZiB0aGV5IGNhbm5vdCBiZSByZXByZXNlbnRlZC4KK2luY2x1ZGUgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKKwordHJhbnNsaXRfZW5kCisKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCislIENvcHkgdGhlIHRlbXBsYXRlIGZyb20gSVNPL0lFQyAxNDY1MQorY29weSAiaXNvMTQ2NTFfdDEiCitFTkQgTENfQ09MTEFURQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNkY+PFUwMDRGPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgICAgICAiPFUwMDQ1PjxVMDA1NT48VTAwNTI+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICAgIjxVMjBBQz4iCittb25fZGVjaW1hbF9wb2ludCAgICAgICAgICI8VTAwMkM+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgICAiPFUwMDIwPiIKK21vbl9ncm91cGluZyAgICAgICAgICAgICAgMworcG9zaXRpdmVfc2lnbiAgICAgICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDAKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgICAgICAwCituX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgICAgICAxCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludCAgICAgICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgICAgIjxVMDAyMD4iCitncm91cGluZyAgICAgICAgICAgICAgICAgIDMKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA2ND48VTAwNjk+PFUwMDZEPjxVMDAyRT4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwNzU+PFUwMDZFPjxVMDAyRT4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDAyRT4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjU+PFUwMDcyPjxVMDAyRT4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNjU+PFUwMDc1PjxVMDAyRT4iOy8KKyAgICAgICAgIjxVMDA3Nj48VTAwNjU+PFUwMDZFPjxVMDAyRT4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjE+PFUwMDZEPjxVMDAyRT4iCitkYXkgICAgICI8VTAwNjQ+PFUwMDY5PjxVMDA2RD48VTAwNjE+PFUwMDZFPjxVMDA2Mz48VTAwNjg+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDZDPjxVMDA3NT48VTAwNkU+PFUwMDY0PjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA2ND48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDY1PjxVMDA3Mj48VTAwNjM+PFUwMDcyPjxVMDA2NT48VTAwNjQ+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDZBPjxVMDA2NT48VTAwNzU+PFUwMDY0PjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA3Nj48VTAwNjU+PFUwMDZFPjxVMDA2ND48VTAwNzI+PFUwMDY1PjxVMDA2ND48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDYxPjxVMDA2RD48VTAwNjU+PFUwMDY0PjxVMDA2OT4iCithYm1vbiAgICI8VTAwNkE+PFUwMDYxPjxVMDA2RT48VTAwNzY+PFUwMDJFPiI7LworICAgICAgICAiPFUwMDY2PjxVMDBFOT48VTAwNzY+PFUwMDcyPjxVMDAyRT4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNzY+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDY5PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDY5PjxVMDA2Qz48VTAwMkU+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDZGPjxVMDBGQj48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDJFPiI7LworICAgICAgICAiPFUwMDZGPjxVMDA2Mz48VTAwNzQ+PFUwMDJFPiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+PFUwMDJFPiI7LworICAgICAgICAiPFUwMDY0PjxVMDBFOT48VTAwNjM+PFUwMDJFPiIKK21vbiAgICAgIjxVMDA2QT48VTAwNjE+PFUwMDZFPjxVMDA3Nj48VTAwNjk+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2Nj48VTAwRTk+PFUwMDc2PjxVMDA3Mj48VTAwNjk+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNzY+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDY5PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDY5PjxVMDA2Qz48VTAwNkM+PFUwMDY1PjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNkY+PFUwMEZCPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDZGPjxVMDA2Mz48VTAwNzQ+PFUwMDZGPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwRTk+PFUwMDYzPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDU5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAiIjsiIgordF9mbXRfYW1wbSAiIgorZGF0ZV9mbXQgICAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorCit3ZWVrICAgIDc7MTk5NzEyMDE7NAorZmlyc3Rfd2Vla2RheSAxCitmaXJzdF93b3JrZGF5IDEKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCitoZWlnaHQgICAyOTcKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK3RlbF9kb21fZm10ICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzM+PFUwMDMzPiIKK2ludF9zZWxlY3QgICAgICI8VTAwMzA+PFUwMDMwPiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgIjxVMDA0Nj48VTAwNTI+IgorY291bnRyeV9hYjMgIjxVMDA0Nj48VTAwNTI+PFUwMDQxPiIKK2NvdW50cnlfbnVtIDI1MAorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2ZyX0ZSQGV1cm8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9mcl9GUkBldXJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZjgwNWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9mcl9GUkBldXJvCkBAIC0wLDAgKzEsODMgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBGcmVuY2ggTGFuZ3VhZ2UgTG9jYWxlIGZvciBGcmFuY2Ugd2l0aCBFdXJvCislIExhbmd1YWdlOiBmcgorJSBUZXJyaXRvcnk6IEZSCislIE9wdGlvbjogZXVybworJSBEYXRlOiAyMDAwLTA4LTIwCislIFVzZXJzOiBnZW5lcmFsCislIENoYXJzZXQ6IElTTy04ODU5LTE1CislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJGcmVuY2ggbG9jYWxlIGZvciBGcmFuY2Ugd2l0aCBFdXJvIgorc291cmNlICAgICAiRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIgorYWRkcmVzcyAgICAiNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQSIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJGcmVuY2giCit0ZXJyaXRvcnkgICJGcmFuY2UiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA4LTIwIgorJQorY2F0ZWdvcnkgICJmcl9GUkBldXJvOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImZyX0ZSQGV1cm86MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZnJfRlJAZXVybzoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImZyX0ZSQGV1cm86MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJmcl9GUkBldXJvOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZnJfRlJAZXVybzoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJmcl9GUkBldXJvOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImZyX0ZSQGV1cm86MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZnJfRlJAZXVybzoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImZyX0ZSQGV1cm86MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJmcl9GUkBldXJvOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImZyX0ZSIgorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxCitjb3B5ICJpc28xNDY1MV90MSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01FU1NBR0VTCitjb3B5ICJmcl9GUiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQorY29weSAiZnJfRlIiCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworY29weSAiZnJfRlIiCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCitjb3B5ICJmcl9GUiIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCitjb3B5ICJmcl9GUiIKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK2NvcHkgImZyX0ZSIgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorY29weSAiZnJfRlIiCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorY29weSAiZnJfRlIiCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitjb3B5ICJmcl9GUiIKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9mcl9MVSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2ZyX0xVCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwYjI5YjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9mcl9MVQpAQCAtMCwwICsxLDE1NyBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIEZyZW5jaCBMYW5ndWFnZSBMb2NhbGUgZm9yIEx1eGVtYnVyZworJSBTb3VyY2U6IFJBUAorJSBBZGRyZXNzOiBTYW5rdCBKby8vcmdlbnMgQWxsZSA4CislICAgIERLLTE2MTUgS28vL2Jlbmhhdm4gViwgRGFubWFyaworJSBDb250YWN0OiBLZWxkIFNpbW9uc2VuCislIEVtYWlsOiBLZWxkLlNpbW9uc2VuQGRrdXVnLmRrCislIFRlbDogKzQ1IC0gMzEyMjY1NDMKKyUgRmF4OiArNDUgLSAzMzI1NjU0MworJSBMYW5ndWFnZTogZnIKKyUgVGVycml0b3J5OiBMVQorJSBSZXZpc2lvbjogNC4zCislIERhdGU6IDE5OTYtMTAtMTUKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiRnJlbmNoIGxvY2FsZSBmb3IgTHV4ZW1idXJnIgorc291cmNlICAgICAiUkFQIgorYWRkcmVzcyAgICAiU2Fua3QgSjxVMDBGOD5yZ2VucyBBbGxlIDgsIERLLTE2MTUgSzxVMDBGOD5iZW5oYXZuIFYsIERhbm1hcmsiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiRnJlbmNoIgordGVycml0b3J5ICAiTHV4ZW1idXJnIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAiZnJfTFU6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZnJfTFU6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZnJfTFU6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJmcl9MVToyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImZyX0xVOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZnJfTFU6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZnJfTFU6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZnJfTFU6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZnJfTFU6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJmcl9MVToyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImZyX0xVOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImZyX0ZSIgorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfTUVTU0FHRVMKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDZGPjxVMDA0Rj48VTAwNzk+PFUwMDU5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgICAgICAgIjxVMDA0NT48VTAwNTU+PFUwMDUyPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgICAgICI8VTIwQUM+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICAgICAiPFUwMDJDPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAgICAgIjxVMDAyMD4iCittb25fZ3JvdXBpbmcgICAgICAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDAKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgICAgICAwCituX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgICAgICAxCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludCAgICAgICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgICAgIiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgICAgMDswCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICI8VTAwNjQ+PFUwMDY5PjxVMDA2RD4iOyI8VTAwNkM+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2RD48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA2NT48VTAwNzU+IjsiPFUwMDc2PjxVMDA2NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDYxPjxVMDA2RD4iCitkYXkgICAgICI8VTAwNjQ+PFUwMDY5PjxVMDA2RD48VTAwNjE+PFUwMDZFPjxVMDA2Mz48VTAwNjg+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDZDPjxVMDA3NT48VTAwNkU+PFUwMDY0PjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA2ND48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDY1PjxVMDA3Mj48VTAwNjM+PFUwMDcyPjxVMDA2NT48VTAwNjQ+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDZBPjxVMDA2NT48VTAwNzU+PFUwMDY0PjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA3Nj48VTAwNjU+PFUwMDZFPjxVMDA2ND48VTAwNzI+PFUwMDY1PjxVMDA2ND48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDYxPjxVMDA2RD48VTAwNjU+PFUwMDY0PjxVMDA2OT4iCithYm1vbiAgICI8VTAwNkE+PFUwMDYxPjxVMDA2RT4iOyI8VTAwNjY+PFUwMEU5PjxVMDA3Nj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2MT48VTAwNzY+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNjk+IjsiPFUwMDZBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2OT4iOyI8VTAwNjE+PFUwMDZGPjxVMDBGQj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA2Rj48VTAwNjM+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDY0PjxVMDBFOT48VTAwNjM+IgorbW9uICAgICAiPFUwMDZBPjxVMDA2MT48VTAwNkU+PFUwMDc2PjxVMDA2OT48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDY2PjxVMDBFOT48VTAwNzY+PFUwMDcyPjxVMDA2OT48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMDczPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA3Nj48VTAwNzI+PFUwMDY5PjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNjk+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNjk+PFUwMDZDPjxVMDA2Qz48VTAwNjU+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDYxPjxVMDA2Rj48VTAwRkI+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNzA+PFUwMDc0PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkY+PFUwMDYzPjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA3Nj48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDY0PjxVMDBFOT48VTAwNjM+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iCitkX3RfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJFPjxVMDAyNT48VTAwNkQ+PFUwMDJFPjxVMDAyNT48VTAwNTk+IgordF9mbXQgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICIiOyIiCit0X2ZtdF9hbXBtICIiCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorJSBGSVhNRQoraGVpZ2h0ICAgMjk3CislIEZJWE1FCit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDMzPjxVMDAzNT48VTAwMzI+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorJSBGSVhNRQorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAiPFUwMDRDPjxVMDA1NT4iCitjb3VudHJ5X2FiMyAiPFUwMDRDPjxVMDA1NT48VTAwNTg+IgorY291bnRyeV9udW0gNDQyCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZnJfTFVAZXVybyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2ZyX0xVQGV1cm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ2NmU0MAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2ZyX0xVQGV1cm8KQEAgLTAsMCArMSw4MyBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIEZyZW5jaCBMYW5ndWFnZSBMb2NhbGUgZm9yIEx1eGVtYnVyZyB3aXRoIEV1cm8KKyUgTGFuZ3VhZ2U6IGZyCislIFRlcnJpdG9yeTogTFUKKyUgT3B0aW9uOiBldXJvCislIERhdGU6IDIwMDAtMDgtMjAKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogSVNPLTg4NTktMTUKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkZyZW5jaCBsb2NhbGUgZm9yIEx1eGVtYnVyZyB3aXRoIEV1cm8iCitzb3VyY2UgICAgICJGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4iCithZGRyZXNzICAgICI1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkZyZW5jaCIKK3RlcnJpdG9yeSAgIkx1eGVtYnVyZyIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDgtMjAiCislCitjYXRlZ29yeSAgImZyX0xVQGV1cm86MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZnJfTFVAZXVybzoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJmcl9MVUBldXJvOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiZnJfTFVAZXVybzoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImZyX0xVQGV1cm86MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJmcl9MVUBldXJvOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImZyX0xVQGV1cm86MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZnJfTFVAZXVybzoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJmcl9MVUBldXJvOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiZnJfTFVAZXVybzoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImZyX0xVQGV1cm86MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiZnJfTFUiCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCitFTkQgTENfQ09MTEFURQorCitMQ19NRVNTQUdFUworY29weSAiZnJfTFUiCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2NvcHkgImZyX0xVIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgImZyX0xVIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorY29weSAiZnJfTFUiCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorY29weSAiZnJfTFUiCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCitjb3B5ICJmcl9MVSIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgImZyX0xVIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK2NvcHkgImZyX0xVIgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworY29weSAiZnJfTFUiCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZnVyX0lUIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZnVyX0lUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZGEzOGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9mdXJfSVQKQEAgLTAsMCArMSwxMzYgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBGdXJsYW4gTGFuZ3VhZ2UgTG9jYWxlIGZvciBJdGFseQorJSBMYW5ndWFnZTogZnVyCislIFRlcnJpdG9yeTogSVQKKyUgUmV2aXNpb246IDAuMworJSBEYXRlOiAyMDA0LTA0LTI2CislIFVzZXJzOiBnZW5lcmFsCislIENoYXJzZXQ6IElTTy04ODU5LTEKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkZ1cmxhbiBsb2NhbGUgZm9yIEl0YWx5Igorc291cmNlICAgICAiIgorYWRkcmVzcyAgICAiIgorY29udGFjdCAgICAiUGFibG8gU2FyYXR4YWdhIgorZW1haWwgICAgICAicGFibG9AbWFuZHJha2Vzb2Z0LmNvbSIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkZ1cmxhbiIKK3RlcnJpdG9yeSAgIkl0YWx5IgorcmV2aXNpb24gICAiMC4zIgorZGF0ZSAgICAgICAiMjAwNC0wNC0yNiIKKyUKK2NhdGVnb3J5ICAiZnVyX0lUOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImZ1cl9JVDoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJmdXJfSVQ6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJmdXJfSVQ6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJmdXJfSVQ6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJmdXJfSVQ6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZnVyX0lUOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImZ1cl9JVDoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJmdXJfSVQ6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJmdXJfSVQ6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJmdXJfSVQ6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiaXRfSVQiCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCisKK2NvbGxhdGluZy1zeW1ib2wgPGMsPgorCityZW9yZGVyLWFmdGVyIDxjPgorPGMsPgorCityZW9yZGVyLWFmdGVyIDxVMDA2Mz4KKzxVMDBFNz4gPGMsPjs8Q0RJPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDQzPgorPFUwMEM3PiA8Yyw+OzxDREk+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWVuZAorCitFTkQgTENfQ09MTEFURQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNzM+PFUwMDUzPjxVMDA2QT48VTAwNEE+PFUwMDZGPjxVMDA0Rj48VTAwNzk+PFUwMDU5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2NvcHkgICJpdF9JVCIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICAiaXRfSVQiCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICI8VTAwNDQ+PFUwMDZGPjxVMDA2RD4iOyI8VTAwNEM+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA0RD48VTAwNjk+PFUwMDYxPiI7LworICAgICAgICAiPFUwMDRBPjxVMDA2Rj48VTAwNjk+IjsiPFUwMDU2PjxVMDA2OT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA2Mj4iCitkYXkgICAgICI8VTAwNDQ+PFUwMDZGPjxVMDA2RD48VTAwNjU+PFUwMDZFPjxVMDA2OT48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNEM+PFUwMDc1PjxVMDA2RT48VTAwNjk+PFUwMDczPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzI+PFUwMDc0PjxVMDA2MT48VTAwNzI+PFUwMDczPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2OT48VTAwNjE+PFUwMDcyPjxVMDA2Mz48VTAwNzU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDRBPjxVMDA2Rj48VTAwNjk+PFUwMDYyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA1Nj48VTAwNjk+PFUwMDZFPjxVMDA2MT48VTAwNzI+PFUwMDczPiI7LworICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNjI+PFUwMDY5PjxVMDA2ND48VTAwNjU+IgorYWJtb24gICAiPFUwMDVBPjxVMDA2NT48VTAwNkU+IjsiPFUwMDQ2PjxVMDA2NT48VTAwNzY+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNDE+PFUwMDc2PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDY5PiI7IjxVMDA0QT48VTAwNzU+PFUwMDY3PiI7LworICAgICAgICAiPFUwMDRDPjxVMDA3NT48VTAwNjk+IjsiPFUwMDQxPjxVMDA3Nj48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA3ND4iOyI8VTAwNEY+PFUwMDc0PjxVMDA3NT4iOy8KKyAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDc2PiI7IjxVMDA0ND48VTAwNjU+PFUwMDYzPiIKK21vbiAgICAgIjxVMDA1QT48VTAwNjU+PFUwMDZFPjxVMDBFMj48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNDY+PFUwMDY1PjxVMDA3Nj48VTAwNzI+PFUwMEUyPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPjxVMDBFNz4iOy8KKyAgICAgICAgIjxVMDA0MT48VTAwNzY+PFUwMDcyPjxVMDBFRT48VTAwNkM+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDY3PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA0Qz48VTAwNzU+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDQxPjxVMDA3Nj48VTAwNkY+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDc0PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNEY+PFUwMDc0PjxVMDA3NT48VTAwNjI+PFUwMDYxPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDc2PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDY1PjxVMDA2Mz48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjE+PFUwMDcyPiIKK2RfdF9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkU+PFUwMDIwPjxVMDAyNT48VTAwNkQ+PFUwMDJFPjxVMDAyMD48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAiIjsiIgordF9mbXRfYW1wbSAiIgorZGF0ZV9mbXQgICAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+Igord2VlawkJCTc7MTk5NzEyMDE7NAorZmlyc3Rfd2Vla2RheQkJMQorZmlyc3Rfd29ya2RheQkJMQorRU5EIExDX1RJTUUKKworTENfUEFQRVIKK2NvcHkgICJpdF9JVCIKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK2NvcHkgICJpdF9JVCIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgICJpdF9JVCIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCitjb3B5ICAiaXRfSVQiCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitjb3B5ICAiaXRfSVQiCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZnlfREUgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9meV9ERQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzQ3NTdmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZnlfREUKQEAgLTAsMCArMSwxMzMgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJSBjaGFyc2V0ICJJU09fODg1OS0xOjE5ODciCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzCisKK0xDX0lERU5USUZJQ0FUSU9OIAordGl0bGUgIlNhdGVyIEZyaXNpYW4gYW5kIE5vcnRoIEZyaXNpYW4gTG9jYWxlIGZvciBHZXJtYW55Igorc291cmNlICJpbmZvcm1hdGlvbiBmcm9tIEtlbm5ldGggQ2hyaXN0aWFuc2VuIgorYWRkcmVzcyAiIgorY29udGFjdCAiS2VubmV0aCBDaHJpc3RpYW5zZW4sIFBhYmxvIFNhcmF0eGFnYSIKK2VtYWlsICJrZW5uZXRoQGdudS5vcmcsIHBhYmxvQG1hbmRyaXZhLmNvbSIKK3RlbCAiIgorJSBGYXgKK2xhbmd1YWdlICJmeSIKK3RlcnJpdG9yeSAiREUiCityZXZpc2lvbiAiMC4xIgorZGF0ZSAiMjAwMy0xMS0zMCIKKworY2F0ZWdvcnkgaTE4bjoyMDAwO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSBpMThuOjIwMDA7TENfQ09MTEFURQorY2F0ZWdvcnkgaTE4bjoyMDAwO0xDX0NUWVBFCitjYXRlZ29yeSBpMThuOjIwMDA7TENfTUVTU0FHRVMKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19NT05FVEFSWQorY2F0ZWdvcnkgaTE4bjoyMDAwO0xDX05VTUVSSUMKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19USU1FCitjYXRlZ29yeSBpMThuOjIwMDA7TENfUEFQRVIKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19OQU1FCitjYXRlZ29yeSBpMThuOjIwMDA7TENfTUVBU1VSRU1FTlQKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19URUxFUEhPTkUKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19BRERSRVNTCisKKyUgSVNPL0lFQyAxNDY1MjogQ29udmVydGVkIGNvbW1lbnRzIHRvIExDX0lERU5USUZJQ0FUSU9OCislICBhZGRlZCBMQ19QQVBFUiwgTENfTUVBU1VSRU1FTlQsIExDX1RFTEVQSE9ORSwgTENfQUREUkVTUworJSAgY29waWVkIExDX01PTkVUQVJZLCBMQ19OVU1FUklDIGZyb20gZGVfREUgZm9yIHNpbXBsaWNpdHkKKyUgLS0gbWNraW5zdHJ5QGNvbXB1dGVyLm9yZywgMjAwMC0wNy0wMworCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfcG9zdCAgIjxVMDA0ND4iCitjb3VudHJ5X2FiMiAgICI8VTAwNDQ+PFUwMDQ1PiIKK2NvdW50cnlfYWIzICAgIjxVMDA0ND48VTAwNDU+PFUwMDU1PiIKK2NvdW50cnlfY2FyICAgIjxVMDA0ND4iCitjb3VudHJ5X251bSAyNzYKK2NvdW50cnlfaXNibiAiMyIKKyUgRklYTUUgY291bnRyeV9uYW1lIGluIExvdyBTYXhvbiA/CitsYW5nX25hbWUgIkZyaXNpYW4iCitsYW5nX2FiICJmeSIKKyUgRklYTUUgbGFuZ190ZXJtIGZvciBMb3cgU2F4b24gPworJSBGSVhNRSBsYW5nX2xpYiBmb3IgTG93IFNheG9uID8KK0VORCBMQ19BRERSRVNTCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImVuX0RLIgorRU5EIExDX0NUWVBFCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA2QT48VTAwNEE+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitjb3B5ICJkZV9ERSIKK0VORCBMQ19NT05FVEFSWQorCitMQ19QQVBFUgorY29weSAiZGVfREUiCitFTkQgTENfUEFQRVIKKworTENfTkFNRQorY29weSAiZGVfREUiCitFTkQgTENfTkFNRQorCitMQ19URUxFUEhPTkUKK2NvcHkgImRlX0RFIgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorY29weSAiZGVfREUiCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTlVNRVJJQworY29weSAiZGVfREUiCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICI8VTAwNTM+PFUwMDY0PjxVMDA2Nz4iOyI8VTAwNEQ+PFUwMDY0PjxVMDA2Nz4iOy8KKyAgICAgICAgIjxVMDA0ND48VTAwNzM+PFUwMDY3PiI7IjxVMDA0RD48VTAwNzc+PFUwMDZCPiI7LworICAgICAgICAiPFUwMDQ0PjxVMDA2ND48VTAwNjc+IjsiPFUwMDQ2PjxVMDA2ND48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDc3PjxVMDA2ND4iCitkYXkgICAgICI8VTAwNTM+PFUwMDY5PjxVMDA2RT48VTAwNkU+PFUwMDY0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDZGPjxVMDA2RT48VTAwNjQ+PFUwMDYxPjxVMDA2Nz4iOy8KKyAgICAgICAgIjxVMDA0ND48VTAwNjk+PFUwMDZFPjxVMDA2Nz48VTAwNzM+PFUwMDY0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDY1PjxVMDA2ND48VTAwNjQ+PFUwMDc3PjxVMDBFND48VTAwNjE+PFUwMDZCPjxVMDA2QT4iOy8KKyAgICAgICAgIjxVMDA0ND48VTAwNkY+PFUwMDZFPjxVMDA2RT48VTAwNjE+PFUwMDY0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNDY+PFUwMDcyPjxVMDA2OT48VTAwNjU+PFUwMDY0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDY5PjxVMDA2RT48VTAwNkU+PFUwMDZGPjxVMDA3Nz48VTAwNjU+PFUwMDZFPjxVMDA2ND4iCithYm1vbiAgICI8VTAwNEE+PFUwMDYxPjxVMDA2RT4iOyI8VTAwNDY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNkY+PFUwMDdBPiI7IjxVMDA0MT48VTAwNzA+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNjk+IjsiPFUwMDRBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNDE+PFUwMDc1PjxVMDA2Nz4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA0Rj48VTAwNkI+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzc+IjsiPFUwMDQ0PjxVMDA2NT48VTAwN0E+IgorbW9uICAgICAiPFUwMDRBPjxVMDA2MT48VTAwNzU+PFUwMDZFPjxVMDA3NT48VTAwNzc+PFUwMDZGPjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA0Nj48VTAwNjU+PFUwMDYyPjxVMDA3Mj48VTAwNzU+PFUwMDc3PjxVMDA2Rj48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDZGPjxVMDA2MT48VTAwN0E+IjsvCisgICAgICAgICI8VTAwNDE+PFUwMDcwPjxVMDA3Mj48VTAwNjU+PFUwMDZDPjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkU+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkM+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDQxPjxVMDA3NT48VTAwNjc+PFUwMDc1PjxVMDA3Mz48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDYxPjxVMDA2RD48VTAwNjI+PFUwMDYxPiI7LworICAgICAgICAiPFUwMDRGPjxVMDA2Qj48VTAwNzQ+PFUwMDZGPjxVMDA2Mj48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNEU+PFUwMDZGPjxVMDA3Nz48VTAwNjE+PFUwMDZEPjxVMDA2Mj48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDY1PjxVMDA3QT48VTAwNjE+PFUwMDZEPjxVMDA2Mj48VTAwNjE+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMkU+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkU+PFUwMDI1PjxVMDA2RD48VTAwMkU+PFUwMDI1PjxVMDA1OT4iCit0X2ZtdCAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgIiI7IiIKK3RfZm10X2FtcG0gIiIKK3dlZWsJNzsxOTk3MTIwMTs0CitmaXJzdF93ZWVrZGF5CTEKK2ZpcnN0X3dvcmtkYXkJMQorRU5EIExDX1RJTUUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2Z5X05MIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZnlfTkwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc4N2U3OAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2Z5X05MCkBAIC0wLDAgKzEsMTM5IEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgRnJpc2lhbiBMYW5ndWFnZSBMb2NhbGUgZm9yIHRoZSBOZXRoZXJsYW5kcworJSBMYW5ndWFnZTogZnkKKyUgVGVycml0b3J5OiBOTAorJSBEYXRlOiAyMDA2LTgtMTMKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiRnJpc2lhbiBsb2NhbGUgZm9yIHRoZSBOZXRoZXJsYW5kcyIKK3NvdXJjZSAgICAgIkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiIKK2FkZHJlc3MgICAgIjU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiRnJpc2lhbiIKK3RlcnJpdG9yeSAgIk5ldGhlcmxhbmRzIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwNi0wOC0xMyIKKyUKK2NhdGVnb3J5ICAiZnlfTkw6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZnlfTkw6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZnlfTkw6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJmeV9OTDoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImZ5X05MOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZnlfTkw6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZnlfTkw6MjAwMCI7TENfTUVBU1VSRU1FTlQKK2NhdGVnb3J5ICAiZnlfTkw6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZnlfTkw6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZnlfTkw6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJmeV9OTDoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImZ5X05MOjIwMDAiO0xDX1RFTEVQSE9ORQorRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJubF9OTCIKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCitjb3B5ICJubF9OTCIKK0VORCBMQ19DT0xMQVRFCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA1Mz48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDU0PjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA1Nz48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNTQ+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDQ2PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNkU+IgorZGF5ICAgICAiPFUwMDUzPjxVMDA2RT48VTAwNjU+PFUwMDY5PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNkY+PFUwMDYxPjxVMDA2RT48VTAwNjQ+PFUwMDY1PjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA1ND48VTAwNjk+PFUwMDY5PjxVMDA3Mz48VTAwNjQ+PFUwMDY1PjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA1Nz48VTAwNkY+PFUwMDYxPjxVMDA2RT48VTAwNzM+PFUwMDY0PjxVMDA2NT48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNTQ+PFUwMDZGPjxVMDA2RT48VTAwNjc+PFUwMDY1PjxVMDA3Mj48VTAwNzM+PFUwMDY0PjxVMDA2NT48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNDY+PFUwMDcyPjxVMDA2NT48VTAwNjU+PFUwMDY0PiI7LworICAgICAgICAiPFUwMDUzPjxVMDA2RT48VTAwNjU+PFUwMDZGPjxVMDA2RT4iCithYm1vbiAgICI8VTAwNEE+PFUwMDYxPjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA0Nj48VTAwNjU+PFUwMDYyPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNDE+PFUwMDcwPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDYxPiI7LworICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA0MT48VTAwNzU+PFUwMDY3PiI7LworICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNzA+IjsvCisgICAgICAgICI8VTAwNEY+PFUwMDZCPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDc2PiI7LworICAgICAgICAiPFUwMDQ0PjxVMDA2NT48VTAwNzM+IgorbW9uICAgICAiPFUwMDRBPjxVMDA2MT48VTAwNkU+PFUwMDYxPjxVMDA3Mj48VTAwNjk+PFUwMDczPiI7LworICAgICAgICAiPFUwMDQ2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA2NT48VTAwNzc+PFUwMDYxPjxVMDA3Mj48VTAwNjk+PFUwMDczPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNjE+PFUwMDcyPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA0MT48VTAwNzA+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA2MT48VTAwNjk+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkU+PFUwMDc5PiI7LworICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkM+PFUwMDc5PiI7LworICAgICAgICAiPFUwMDQxPjxVMDA3NT48VTAwNjc+PFUwMDc1PjxVMDA3Mz48VTAwNzQ+PFUwMDc1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjk+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDRGPjxVMDA2Qj48VTAwNzQ+PFUwMDZGPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+PFUwMDY5PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0ND48VTAwNjU+PFUwMDczPjxVMDA2OT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRD48VTAwMjU+PFUwMDZEPjxVMDAyRD48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAiIjsiIgordF9mbXRfYW1wbSAiIgorZGF0ZV9mbXQgICAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworTENfTlVNRVJJQworY29weSAibmxfTkwiCitFTkQgTENfTlVNRVJJQworCitMQ19NT05FVEFSWQorY29weSAibmxfTkwiCitFTkQgTENfTU9ORVRBUlkKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgIm5sX05MIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX01FU1NBR0VTCitjb3B5ICJubF9OTCIKK0VORCBMQ19NRVNTQUdFUworCitMQ19QQVBFUgorY29weSAibmxfTkwiCitFTkQgTENfUEFQRVIKKworTENfTkFNRQorY29weSAibmxfTkwiCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgIjxVMDA0RT48VTAwNEM+IgorY291bnRyeV9hYjMgIjxVMDA0RT48VTAwNEM+PFUwMDQ0PiIKK2NvdW50cnlfbnVtIDUyOAorY291bnRyeV9jYXIgIjxVMDA0RT48VTAwNEM+IgorbGFuZ19uYW1lICI8VTAwNDY+PFUwMDcyPjxVMDA2OT48VTAwNzM+PFUwMDY5PjxVMDA2MT48VTAwNkU+IgorbGFuZ19hYiAiPFUwMDY2PjxVMDA3OT4iCitsYW5nX3Rlcm0gIjxVMDA2Nj48VTAwNzI+PFUwMDc5PiIKK2xhbmdfbGliICI8VTAwNjY+PFUwMDcyPjxVMDA3OT4iCitFTkQgTENfQUREUkVTUworCitMQ19URUxFUEhPTkUKK2NvcHkgIm5sX05MIgorRU5EIExDX1RFTEVQSE9ORQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZ2FfSUUgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9nYV9JRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODA4NmE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZ2FfSUUKQEAgLTAsMCArMSwxNTkgQEAKK2VzY2FwZV9jaGFyICAvCitjb21tZW50X2NoYXIgICUKKyUgSXJpc2ggbGFuZ3VhZ2UgbG9jYWxlIGZvciBJcmVsYW5kCislIFNvdXJjZTogTlNBSQorJSBBZGRyZXNzOiBHbGFzbmV2aW4sIER1YmxpbiA5LCBJcmVsYW5kCislIENvbnRhY3Q6IE1pY2hhZWwgRXZlcnNvbgorJSBFbWFpbDogZXZlcnNvbkBpcmxlYXJuLnVjZC5pZQorJSBUZWw6ICszNTMgMSAyODAtMDcwMQorJSBGYXg6ICszNTMgMSA4MzAtOTgyMQorJSBMYW5ndWFnZTogZ2EKKyUgVGVycml0b3J5OiBJRQorJSBSZXZpc2lvbjogNC4zCislIERhdGU6IDE5OTYtMTAtMTUKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiSXJpc2ggbG9jYWxlIGZvciBJcmVsYW5kIgorc291cmNlICAgICAiTlNBSSIKK2FkZHJlc3MgICAgIkdsYXNuZXZpbiwgRHVibGluIDksIElyZWxhbmQiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiSXJpc2giCit0ZXJyaXRvcnkgICJJcmVsYW5kIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAiZ2FfSUU6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZ2FfSUU6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZ2FfSUU6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJnYV9JRToyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImdhX0lFOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZ2FfSUU6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZ2FfSUU6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZ2FfSUU6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZ2FfSUU6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJnYV9JRToyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImdhX0lFOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCitjb3B5ICJpc28xNDY1MV90MSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAiPFUwMDQ1PjxVMDA1NT48VTAwNTI+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICI8VTIwQUM+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgICAgMAorbl9jc19wcmVjZWRlcyAgICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgICAgMAorcF9zaWduX3Bvc24gICAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgICAgMQorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAgIjxVMDAyQz4iCitncm91cGluZyAgICAgICAgICAgICAgICAzOzMKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgICAgICI8VTAwNDQ+PFUwMDZGPjxVMDA2RD48VTAwNjg+IjsiPFUwMDRDPjxVMDA3NT48VTAwNjE+PFUwMDZFPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwRTE+PFUwMDY5PjxVMDA3Mj48VTAwNzQ+IjsiPFUwMDQzPjxVMDBFOT48VTAwNjE+PFUwMDY0PiI7LworICAgICAgICAgICAgIjxVMDA0ND48VTAwRTk+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNDE+PFUwMDZGPjxVMDA2OT48VTAwNkU+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDc0PjxVMDA2OD4iCitkYXkgICAgICAgICAiPFUwMDQ0PjxVMDBFOT48VTAwMjA+PFUwMDQ0PjxVMDA2Rj48VTAwNkQ+PFUwMDY4PjxVMDA2RT48VTAwNjE+PFUwMDY5PjxVMDA2Nz48VTAwNjg+IjsvCisgICAgICAgICAgICAiPFUwMDQ0PjxVMDBFOT48VTAwMjA+PFUwMDRDPjxVMDA3NT48VTAwNjE+PFUwMDY5PjxVMDA2RT4iOy8KKyAgICAgICAgICAgICI8VTAwNDQ+PFUwMEU5PjxVMDAyMD48VTAwNEQ+PFUwMEUxPjxVMDA2OT48VTAwNzI+PFUwMDc0PiI7LworICAgICAgICAgICAgIjxVMDA0ND48VTAwRTk+PFUwMDIwPjxVMDA0Mz48VTAwRTk+PFUwMDYxPjxVMDA2ND48VTAwNjE+PFUwMDZGPjxVMDA2OT48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDQ0PjxVMDBFOT48VTAwNjE+PFUwMDcyPjxVMDA2ND48VTAwNjE+PFUwMDZGPjxVMDA2OT48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDQ0PjxVMDBFOT48VTAwMjA+PFUwMDY4PjxVMDA0MT48VTAwNkY+PFUwMDY5PjxVMDA2RT48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDQ0PjxVMDBFOT48VTAwMjA+PFUwMDUzPjxVMDA2MT48VTAwNzQ+PFUwMDY4PjxVMDA2MT48VTAwNjk+PFUwMDcyPjxVMDA2RT4iCithYm1vbiAgICAgICAiPFUwMDQ1PjxVMDA2MT48VTAwNkU+IjsiPFUwMDQ2PjxVMDA2NT48VTAwNjE+PFUwMDYyPjxVMDA2OD4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMEUxPjxVMDA3Mj48VTAwNzQ+PFUwMDYxPiI7IjxVMDA0MT48VTAwNjk+PFUwMDYyPiI7LworICAgICAgICAgICAgIjxVMDA0Mj48VTAwNjU+PFUwMDYxPjxVMDA2Qz4iOyI8VTAwNEQ+PFUwMDY1PjxVMDA2OT48VTAwNzQ+PFUwMDY4PiI7LworICAgICAgICAgICAgIjxVMDA0OT48VTAwRkE+PFUwMDY5PjxVMDA2Qz4iOyI8VTAwNEM+PFUwMEZBPjxVMDA2RT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDQ2PjxVMDBGMz48VTAwNkQ+PFUwMDY4PiI7IjxVMDA0ND48VTAwNDY+PFUwMEYzPjxVMDA2RD48VTAwNjg+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNkQ+PFUwMDY4PiI7IjxVMDA0RT48VTAwNkY+PFUwMDZDPjxVMDA2Qz4iCittb24gICAgICAgICAiPFUwMDQ1PjxVMDA2MT48VTAwNkU+PFUwMEUxPjxVMDA2OT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDQ2PjxVMDA2NT48VTAwNjE+PFUwMDYyPjxVMDA2OD48VTAwNzI+PFUwMDYxPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwRTE+PFUwMDcyPjxVMDA3ND48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDQxPjxVMDA2OT48VTAwNjI+PFUwMDcyPjxVMDA2NT48VTAwRTE+PFUwMDZFPiI7LworICAgICAgICAgICAgIjxVMDA0Mj48VTAwNjU+PFUwMDYxPjxVMDA2Qz48VTAwNzQ+PFUwMDYxPjxVMDA2OT48VTAwNkU+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjU+PFUwMDY5PjxVMDA3ND48VTAwNjg+PFUwMDY1PjxVMDA2MT48VTAwNmQ+PFUwMDY4PiI7LworICAgICAgICAgICAgIjxVMDA0OT48VTAwRkE+PFUwMDY5PjxVMDA2Qz4iOy8KKyAgICAgICAgICAgICI8VTAwNEM+PFUwMEZBPjxVMDA2RT48VTAwNjE+PFUwMDczPjxVMDA2MT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDY1PjxVMDBFMT48VTAwNkU+PFUwMDIwPjxVMDA0Nj48VTAwRjM+PFUwMDZEPjxVMDA2OD48VTAwNjE+PFUwMDY5PjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNDQ+PFUwMDY1PjxVMDA2OT48VTAwNzI+PFUwMDY1PjxVMDA2MT48VTAwNjQ+PFUwMDY4PjxVMDAyMD48VTAwNDY+PFUwMEYzPjxVMDA2RD48VTAwNjg+PFUwMDYxPjxVMDA2OT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNkQ+PFUwMDY4PjxVMDA2MT48VTAwNjk+PFUwMDZFPiI7LworICAgICAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDZDPjxVMDA2Qz48VTAwNjE+PFUwMDY5PjxVMDA2Nz4iCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2ND48VTAwMkU+PFUwMDI1PjxVMDA2RD48VTAwMkU+PFUwMDI1PjxVMDA3OT4iCit0X2ZtdCAgICAgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICAgICAiIjsiIgordF9mbXRfYW1wbSAgIiIKK2RhdGVfZm10ICAgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCit5ZXNleHByICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNzQ+PFUwMDU0PjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfUEFQRVIKKyUgRklYTUUKK2hlaWdodCAgIDI5NworJSBGSVhNRQord2lkdGggICAgMjEwCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzMz48VTAwMzU+PFUwMDMzPiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKKyUgRklYTUUKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgIjxVMDA0OT48VTAwNDU+IgorY291bnRyeV9hYjMgIjxVMDA0OT48VTAwNTI+PFUwMDRDPiIKK2NvdW50cnlfbnVtIDM3MgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2dhX0lFQGV1cm8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9nYV9JRUBldXJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YTkyOTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9nYV9JRUBldXJvCkBAIC0wLDAgKzEsODIgQEAKK2VzY2FwZV9jaGFyICAvCitjb21tZW50X2NoYXIgICUKKyUgSXJpc2ggbGFuZ3VhZ2UgbG9jYWxlIGZvciBJcmVsYW5kIHdpdGggRXVybworJSBMYW5ndWFnZTogZ2EKKyUgVGVycml0b3J5OiBJRQorJSBPcHRpb246IGV1cm8KKyUgRGF0ZTogMjAwMC0wOC0yMQorJSBVc2VyczogZ2VuZXJhbAorJSBDaGFyc2V0OiBJU08tODg1OS0xNQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiSXJpc2ggbG9jYWxlIGZvciBJcmVsYW5kIHdpdGggRXVybyIKK3NvdXJjZSAgICAgIkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiIKK2FkZHJlc3MgICAgIjU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiSXJpc2giCit0ZXJyaXRvcnkgICJJcmVsYW5kIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wOC0yMSIKKyUKK2NhdGVnb3J5ICAiZ2FfSUVAZXVybzoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJnYV9JRUBldXJvOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImdhX0lFQGV1cm86MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJnYV9JRUBldXJvOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiZ2FfSUVAZXVybzoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImdhX0lFQGV1cm86MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZ2FfSUVAZXVybzoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJnYV9JRUBldXJvOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImdhX0lFQGV1cm86MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJnYV9JRUBldXJvOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiZ2FfSUVAZXVybzoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJnYV9JRSIKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCitjb3B5ICJpc28xNDY1MV90MSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCitjb3B5ICJnYV9JRSIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJnYV9JRSIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2NvcHkgImdhX0lFIgorRU5EIExDX1RJTUUKKworTENfTUVTU0FHRVMKK2NvcHkgImdhX0lFIgorRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCitjb3B5ICJnYV9JRSIKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK2NvcHkgImdhX0lFIgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorY29weSAiZ2FfSUUiCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorY29weSAiZ2FfSUUiCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitjb3B5ICJnYV9JRSIKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9nZF9HQiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2dkX0dCCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MzgzOWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9nZF9HQgpAQCAtMCwwICsxLDEzNyBAQAorZXNjYXBlX2NoYXIgIC8KK2NvbW1lbnRfY2hhciAgJQorJSBjaGFyc2V0ICJJU09fODg1OS0xNSIKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbyBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworCislIFdBUk5JTkc6IFVOT0ZGSUNJQUw7IEVYUEVSSU1FTlRBTC4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICJTY290cyBHYWVsaWMgbGFuZ3VhZ2UgbG9jYWxlIGZvciBHcmVhdCBCcml0YWluIgorc291cmNlICJBbGFzdGFpciBNY0tpbnN0cnkiCithZGRyZXNzICJDcm/tIEzhciwgQmFsbGluYWhhbGxhLCBNYWlnaCBDdWlsaW5uLCBDby4gR2FpbGxpbWgsIElyZWxhbmQiCitjb250YWN0ICJBbGFzdGFpciBNY0tpbnN0cnkiCitlbWFpbCAibWNraW5zdHJ5QGNvbXB1dGVyLm9yZyIKK3RlbCAiKzM1MyA5MSA1NTYxNzciCitsYW5ndWFnZSAiU2NvdHMgR2FlbGljIgordGVycml0b3J5ICJHcmVhdCBCcml0YWluIgorZGF0ZSAiMjAwMC0wNi0xMiIKK3JldmlzaW9uICIxLjEiCisKK2NhdGVnb3J5IGdkX0dCOjIwMDA7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5IGdkX0dCOjIwMDA7TENfQ1RZUEUKK2NhdGVnb3J5IGdkX0dCOjIwMDA7TENfQ09MTEFURQorY2F0ZWdvcnkgZ2RfR0I6MjAwMDtMQ19USU1FCitjYXRlZ29yeSBnZF9HYjoyMDAwO0xDX05VTUVSSUMKK2NhdGVnb3J5IGdkX0dCOjIwMDA7TENfUEFQRVIKK2NhdGVnb3J5IGdkX0dCOjIwMDA7TENfTkFNRQorY2F0ZWdvcnkgZ2RfR0I6MjAwMDtMQ19BRERSRVNTCitjYXRlZ29yeSBnZF9HQjoyMDAwO0xDX1RFTEVQSE9ORQorY2F0ZWdvcnkgZ2RfR0I6MjAwMDtMQ19NRUFTVVJFTUVOVAorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQUREUkVTUworJSBGSVhNRQorcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKKworY291bnRyeV9uYW1lICI8VTAwNDI+PFUwMDcyPjxVMDA2NT48VTAwNjE+PFUwMDc0PjxVMDA2MT48VTAwNjk+PFUwMDZFPjxVMDA2RT48VTAwMjA+PFUwMDREPjxVMDA2OD48VTAwRjI+PFUwMDcyPiIKK2NvdW50cnlfYWIyICJHQiIKK2NvdW50cnlfYWIzICJHQlIiCitjb3VudHJ5X251bSA4MjYKK2NvdW50cnlfY2FyICJHQiIKK2NvdW50cnlfaXNibiAiMCIKK2xhbmdfbmFtZSAiPFUwMDQ3PjxVMDA2MT48VTAwNjk+PFUwMDY0PjxVMDA2OD48VTAwNkM+PFUwMDY5PjxVMDA2Nz48VTAwMjA+PFUwMDZFPjxVMDA2MT48VTAwMjA+PFUwMDY4PjxVMDAyRD48VTAwNDE+PFUwMDZDPjxVMDA2Mj48VTAwNjE+PFUwMDZFPjxVMDBGMT4iCitsYW5nX2FiICJnZCIKK2xhbmdfdGVybSAiZ2xhIgorbGFuZ19saWIgImdsYSIKK0VORCBMQ19BRERSRVNTCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKK0xDX1BBUEVSCitjb3B5ICJlbl9HQiIKK0VORCBMQ19QQVBFUgorCitMQ19NRUFTVVJFTUVOVAorY29weSAiZW5fR0IiCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfVEVMRVBIT05FCitjb3B5ICJlbl9HQiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfQ09MTEFURQorY29weSAiZW5fREsiCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQorY29weSAiZW5fR0IiCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworY29weSAiZW5fR0IiCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCisKK2FiZGF5ICAgICAgICI8VTAwNDQ+PFUwMDY5PjxVMDA2ND48VTAwNkY+IjsiPFUwMDQ0PjxVMDA2OT48VTAwNkM+PFUwMDc1PiI7LworICAgICAgICAgICAgIjxVMDA0ND48VTAwNjk+PFUwMDZEPiI7IjxVMDA0ND48VTAwNjk+PFUwMDYzPiI7LworICAgICAgICAgICAgIjxVMDA0ND48VTAwNjk+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNDQ+PFUwMDY5PjxVMDA2OD48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDQ0PjxVMDA2OT48VTAwNzM+PFUwMDYxPiIKKworZGF5ICAgICAgICAgIjxVMDA0ND48VTAwNjk+PFUwMDY0PjxVMDBGMj48VTAwNkQ+PFUwMDY4PjxVMDA2RT48VTAwNjE+PFUwMDY5PjxVMDA2Mz48VTAwNjg+IjsvCisJICAgICI8VTAwNDQ+PFUwMDY5PjxVMDA2Qz48VTAwNzU+PFUwMDYxPjxVMDA2OT48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDQ0PjxVMDA2OT48VTAwNkQ+PFUwMEUwPjxVMDA2OT48VTAwNzI+PFUwMDc0PiI7LworICAgICAgICAgICAgIjxVMDA0ND48VTAwNjk+PFUwMDYzPjxVMDA2OT48VTAwNjE+PFUwMDY0PjxVMDA2MT48VTAwNjk+PFUwMDZFPiI7LworICAgICAgICAgICAgIjxVMDA0ND48VTAwNjk+PFUwMDYxPjxVMDA3Mj48VTAwNjQ+PFUwMDYxPjxVMDA2Rj48VTAwNjk+PFUwMDZFPiI7LworICAgICAgICAgICAgIjxVMDA0ND48VTAwNjk+PFUwMDY4PjxVMDA2MT48VTAwNkY+PFUwMDY5PjxVMDA2RT48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDQ0PjxVMDA2OT48VTAwNzM+PFUwMDYxPjxVMDA3ND48VTAwNjg+PFUwMDYxPjxVMDA2OT48VTAwNzI+PFUwMDZFPjxVMDA2NT4iCisKK2FibW9uICAgICAgICI8VTAwNDY+PFUwMDYxPjxVMDA2Rj4iOyI8VTAwNDc+PFUwMDY1PjxVMDA2MT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMEUwPjxVMDA3Mj4iOyI8VTAwNDc+PFUwMDY5PjxVMDA2Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDY4PjxVMDBFMD4iOyI8VTAwNEY+PFUwMDY3PjxVMDA0RD4iOy8KKyAgICAgICAgICAgICI8VTAwNkM+PFUwMDc1PjxVMDA2Mz4iOyI8VTAwNEM+PFUwMEY5PjxVMDA2RT4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNDQ+PFUwMDYxPjxVMDA2RD4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA2RD4iOyI8VTAwNDQ+PFUwMEY5PjxVMDA2Mj4iCisKK21vbgkgICAgIjxVMDA0MT48VTAwNkQ+PFUwMDIwPjxVMDA0Nj48VTAwNjE+PFUwMDZGPjxVMDA2OT48VTAwNkM+PFUwMDc0PjxVMDA2NT48VTAwNjE+PFUwMDYzPjxVMDA2OD4iOy8KKwkgICAgIjxVMDA0MT48VTAwNkU+PFUwMDIwPjxVMDA0Nz48VTAwNjU+PFUwMDYxPjxVMDA3Mj48VTAwNzI+PFUwMDYxPjxVMDA2RT4iOy8KKwkgICAgIjxVMDA0MT48VTAwNkQ+PFUwMDIwPjxVMDA0RD48VTAwRTA+PFUwMDcyPjxVMDA3ND4iOy8KKwkgICAgIjxVMDA0MT48VTAwNkU+PFUwMDIwPjxVMDA0Nz48VTAwNjk+PFUwMDYyPjxVMDA2Qz48VTAwNjU+PFUwMDYxPjxVMDA2RT4iOy8KKwkgICAgIjxVMDA0MT48VTAwMjc+PFUwMDIwPjxVMDA0RD48VTAwNjg+PFUwMEUwPjxVMDA2OT48VTAwNjc+PFUwMDY4PiI7LworCSAgICAiPFUwMDQxPjxVMDA2RT48VTAwMjA+PFUwMDc0PjxVMDAyRD48VTAwNEQ+PFUwMDY4PjxVMDBFQz48VTAwNkY+PFUwMDczPiI7LworCSAgICAiPFUwMDQxPjxVMDA2RT48VTAwMjA+PFUwMDc0PjxVMDAyRD48VTAwNkM+PFUwMDc1PjxVMDA2Mz48VTAwNjg+PFUwMDYxPjxVMDA3Mj4iOy8KKwkgICAgIjxVMDA0MT48VTAwNkU+PFUwMDIwPjxVMDA0Qz48VTAwRjk+PFUwMDZFPjxVMDA2MT48VTAwNzM+PFUwMDY0PjxVMDA2MT48VTAwNkM+IjsvCisJICAgICI8VTAwNDE+PFUwMDZFPjxVMDAyMD48VTAwNzQ+PFUwMDJEPjxVMDA1Mz48VTAwNzU+PFUwMDZDPjxVMDA3ND48VTAwNjE+PFUwMDY5PjxVMDA2RT4iOy8KKwkgICAgIjxVMDA0MT48VTAwNkU+PFUwMDIwPjxVMDA0ND48VTAwNjE+PFUwMDZEPjxVMDA2OD48VTAwNjE+PFUwMDY5PjxVMDA3Mj4iOy8KKwkgICAgIjxVMDA0MT48VTAwNkU+PFUwMDIwPjxVMDA3ND48VTAwMkQ+PFUwMDUzPjxVMDA2MT48VTAwNkQ+PFUwMDY4PjxVMDA2MT48VTAwNjk+PFUwMDZFPiI7LworIAkgICAgIjxVMDA0MT48VTAwNkU+PFUwMDIwPjxVMDA0ND48VTAwRjk+PFUwMDYyPjxVMDA2OD48VTAwNkM+PFUwMDYxPjxVMDA2Mz48VTAwNjg+PFUwMDY0PiIKKworZF90X2ZtdCAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNzk+IgordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAgICAgIiI7IiIKK3RfZm10X2FtcG0gICIiCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworJSBGSVhNRQoreWVzZXhwciAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCislIEZJWE1FCitub2V4cHIgICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19OQU1FCislIEZJWE1FCitjb3B5ICJlbl9HQiIKK0VORCBMQ19OQU1FCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9nZXpfRVIgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9nZXpfRVIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI5YzliOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2dlel9FUgpAQCAtMCwwICsxLDIxOSBAQAorY29tbWVudF9jaGFyICAgICUKK2VzY2FwZV9jaGFyICAgICAvCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgR2UnZXogbGFuZ3VhZ2UgbG9jYWxlIGZvciBFcml0cmVhLgorJQorJSBDaGFyc2V0OiBVVEYtOAorJQorJSBQcmVwYXJlZCBhbmQgY29udHJpYnV0ZWQgdG8gZ2xpYmMgYnkgRGFuaWVsIFlhY29iIDxsb2NhbGVzQGdlZXoub3JnPi4KKyUKKyUgVGhpcyBsb2NhbGUgZGF0YSBoYXMgYmVlbiBkZXZlbG9wZWQgdW5kZXIgdGhlIFllaGEgUHJvamVjdDoKKyUgICAgICBodHRwOi8veWVoYS5zb3VyY2Vmb3JnZS5uZXQvCislCislIGJ1aWxkIHdpdGg6IGxvY2FsZWRlZiAtZiBVVEYtOCAtaSBnZXpfRVIgZ2V6X0VSCislCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCisKK0xDX0lERU5USUZJQ0FUSU9OCislCit0aXRsZSAgICAgICJHZSdleiBsYW5ndWFnZSBsb2NhbGUgZm9yIEVyaXRyZWEuIgorc291cmNlICAgICAiR2UnZXogRnJvbnRpZXIgRm91bmRhdGlvbiIKK2FkZHJlc3MgICAgIjc4MDIgU29sb21vbiBTZWFsIERyLiwgU3ByaW5nZmllbGQsIFZBIDIyMTUyLCBVU0EiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJsb2NhbGVzQGdlZXoub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiZ2V6IgordGVycml0b3J5ICAiRVIiCityZXZpc2lvbiAgICIwLjIwIgorZGF0ZSAgICAgICAiMjAwMy0wNy0wNSIKKyUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX01FQVNVUkVNRU5UCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAicG9zaXg6MTk5MyI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfVEVMRVBIT05FCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX1RJTUUKKyUKK0VORCBMQ19JREVOVElGSUNBVElPTgorCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislICBFdGhpb3BpYyBTcGVjaWZjIERhdGE6CislCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCitMQ19DT0xMQVRFCitjb3B5ICJ0aV9FUiIKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJ0aV9FUiIKK0VORCBMQ19DVFlQRQorCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislICBFcml0cmVhIFNwZWNpZmMgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJ0aV9FUiIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19NT05FVEFSWQorY29weSAidGlfRVIiCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworY29weSAidGlfRVIiCitFTkQgTENfTlVNRVJJQworCitMQ19QQVBFUgorY29weSAidGlfRVIiCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCitjb3B5ICJ0aV9FUiIKK0VORCBMQ19URUxFUEhPTkUKKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSAgR2UnZXovRVIgU3BlY2lmaWMgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX0FERFJFU1MKKyUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfQUREUkVTUyBjYXRlZ29yeS4KKyUKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwN0E+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDU0PjxVMDAyNT48VTAwNzM+LworPFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDY1PjxVMDAyNT48VTAwNzI+IgorY291bnRyeV9uYW1lICAiPFUxMkE0PjxVMTIyRD48VTEyNzU+PFUxMjJCPiIKK2NvdW50cnlfcG9zdCAgIjxVMDA0NT48VTAwNTI+PFUwMDQ5PiIKK2NvdW50cnlfYWIyICAgIjxVMDA0NT48VTAwNTI+IgorY291bnRyeV9hYjMgICAiPFUwMDQ1PjxVMDA1Mj48VTAwNDk+IgorY291bnRyeV9udW0gICAyMzIKKyUgY291bnRyeV9jYXIgICB1bmtub3duCislIGNvdW50cnlfaXNibiAgdW5rbm93biwgTmVlZCBJU08gMjEwOAorbGFuZ19uYW1lICAgICAiPFUxMzBEPjxVMTJENT48VTEyREQ+IgorJWxhbmdfYWIgICAgICAgIjxVMDA2Nz48VTAwNjU+PFUwMDdBPiIKK2xhbmdfdGVybSAgICAgIjxVMDA2Nz48VTAwNjU+PFUwMDdBPiIKKyUKKyUgUGV0dGVyIFJlaW5ob2xkdHNlbiByZXBvcnRzIHVuY29tbWVudGluZyB0aGUgYmVsb3cgYnJlYWtzIGNvbXBpbGF0aW9uCislCislbGFuZ19saWIgICAgICAiPFUwMDY3PjxVMDA2NT48VTAwN0E+IgorJQorRU5EIExDX0FERFJFU1MKKworCitMQ19NRVNTQUdFUworY29weSAidGlfRVIiCitFTkQgTENfTUVTU0FHRVMKKworTENfTkFNRQorY29weSAidGlfRVIiCitFTkQgTENfTkFNRQorCisKK0xDX1RJTUUKKyUKKyUgQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyAoJWEpCislCithYmRheSAgICAiPFUxMkE1PjxVMTI4MT48VTEyRjU+IjsvCisgICAgICAgICAiPFUxMjMwPjxVMTI5MT48VTEyRUQ+IjsvCisgICAgICAgICAiPFUxMjIwPjxVMTIwOT48VTEyMzU+IjsvCisgICAgICAgICAiPFUxMjJCPjxVMTI2NT48VTEyRDU+IjsvCisgICAgICAgICAiPFUxMjEwPjxVMTIxOT48VTEyMzU+IjsvCisgICAgICAgICAiPFUxMkQzPjxVMTIyRD48VTEyNjA+IjsvCisgICAgICAgICAiPFUxMjQwPjxVMTJGMz48VTEyMUE+IgorJQorJSBGdWxsIHdlZWtkYXkgbmFtZXMgKCVBKQorJQorZGF5ICAgICAgIjxVMTJBNT48VTEyODE+PFUxMkY1PiI7LworICAgICAgICAgIjxVMTIzMD48VTEyOTE+PFUxMkVEPiI7LworICAgICAgICAgIjxVMTIyMD48VTEyMDk+PFUxMjM1PiI7LworICAgICAgICAgIjxVMTIyQj48VTEyNjU+PFUxMkQ1PiI7LworICAgICAgICAgIjxVMTIxMD48VTEyMTk+PFUxMjM1PiI7LworICAgICAgICAgIjxVMTJEMz48VTEyMkQ+PFUxMjYwPiI7LworICAgICAgICAgIjxVMTI0MD48VTEyRjM+PFUxMjFBPjxVMTI3NT4iCislCislIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzICglYikKKyUKK2FibW9uICAgICI8VTEzMjA+PFUxMjEwPjxVMTIyOD4iOy8KKyAgICAgICAgICI8VTEyQTg+PFUxMjcwPjxVMTI3MD4iOy8KKyAgICAgICAgICI8VTEyMTg+PFUxMzA4PjxVMTI2MD4iOy8KKyAgICAgICAgICI8VTEyQTA+PFUxMjgwPjxVMTJEOD4iOy8KKyAgICAgICAgICI8VTEzMEQ+PFUxMjk1PjxVMTI2Mz4iOy8KKyAgICAgICAgICI8VTEyMjA+PFUxMjk1PjxVMTJFOD4iOy8KKyAgICAgICAgICI8VTEyMTA+PFUxMjE4PjxVMTIwOD4iOy8KKyAgICAgICAgICI8VTEyOTA+PFUxMjEwPjxVMTIzMD4iOy8KKyAgICAgICAgICI8VTEyQTg+PFUxMjI4PjxVMTIxOD4iOy8KKyAgICAgICAgICI8VTEzMjA+PFUxMjQwPjxVMTIxOD4iOy8KKyAgICAgICAgICI8VTEyODA+PFUxMkYwPjxVMTIyOD4iOy8KKyAgICAgICAgICI8VTEyODA+PFUxMjIwPjxVMTIyMD4iCislCislIEZ1bGwgbW9udGggbmFtZXMgKCVCKQorJQorbW9uICAgICAgIjxVMTMyMD48VTEyMTA+PFUxMjI4PiI7LworICAgICAgICAgIjxVMTJBOD48VTEyNzA+PFUxMjcwPiI7LworICAgICAgICAgIjxVMTIxOD48VTEzMDg+PFUxMjYwPiI7LworICAgICAgICAgIjxVMTJBMD48VTEyODA+PFUxMkQ4PiI7LworICAgICAgICAgIjxVMTMwRD48VTEyOTU+PFUxMjYzPjxVMTI3NT4iOy8KKyAgICAgICAgICI8VTEyMjA+PFUxMjk1PjxVMTJFOD4iOy8KKyAgICAgICAgICI8VTEyMTA+PFUxMjE4PjxVMTIwOD4iOy8KKyAgICAgICAgICI8VTEyOTA+PFUxMjEwPjxVMTIzMD4iOy8KKyAgICAgICAgICI8VTEyQTg+PFUxMjI4PjxVMTIxOD4iOy8KKyAgICAgICAgICI8VTEzMjA+PFUxMjQwPjxVMTIxOD4iOy8KKyAgICAgICAgICI8VTEyODA+PFUxMkYwPjxVMTIyOD4iOy8KKyAgICAgICAgICI8VTEyODA+PFUxMjIwPjxVMTIyMD4iCislCislIEVxdWl2YWxlbnQgb2YgQU0gUE0KKyUKK2FtX3BtICAgIjxVMTMzRD48VTEyNjM+PFUxMjE1PiI7IjxVMTIxRD48VTEyMzQ+PFUxMjc1PiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbiAoJXgpCislCSIlZC8lbS8lWSIKKyUKK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNTk+IgorJQorJSBBcHByb3ByaWF0ZSB0aW1lIHJlcHJlc2VudGF0aW9uICglWCkKKyUJIiVsOiVNOiVTIgorJQordF9mbXQgIjxVMDAyNT48VTAwNkM+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+IgorJQorJSBBcHByb3ByaWF0ZSBBTS9QTSB0aW1lIHJlcHJlc2VudGF0aW9uICglcikKKyUJIiVYICVwIgorJQordF9mbXRfYW1wbSAiPFUwMDI1PjxVMDA1OD48VTEzNjE+PFUwMDI1PjxVMDA3MD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24gKCVjKQorJQkiJUHhjaUlQuGNoSVl4Y2h4YiY4YuT4YiN4Ym14Y2hJVnhjaElcuGNoSVaIgorJQorZF90X2ZtdCAgICAiPFUwMDI1PjxVMDA0MT48VTEzNjU+PFUwMDI1PjxVMDA0Mj48VTEzNjE+PFUwMDI1PjxVMDA2NT4vCis8VTEzNjE+PFUxMjE4PjxVMTJEMz48VTEyMEQ+PFUxMjc1Pi8KKzxVMTM2MT48VTAwMjU+PFUwMDU5PjxVMTM2MT48VTAwMjU+PFUwMDcyPjxVMTM2MT48VTAwMjU+PFUwMDVBPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbiAoZGF0ZSgxKSkKKyUJIiVB4Y2lJULhjaElZeGNoeGImOGLk+GIjeGJteGNoSVy4Y2hJVrhjaElWeGNoeGLky/hiJ0KKyUKK2RhdGVfZm10ICAgICI8VTAwMjU+PFUwMDQxPjxVMTM2NT48VTAwMjU+PFUwMDQyPjxVMTM2MT48VTAwMjU+PFUwMDY1Pi8KKzxVMTM2MT48VTEyMTg+PFUxMkQzPjxVMTIwRD48VTEyNzU+LworPFUxMzYxPjxVMDAyNT48VTAwNzI+PFUxMzYxPjxVMDAyNT48VTAwNUE+PFUxMzYxPjxVMDAyNT48VTAwNTk+LworPFUxMzYxPjxVMTJEMz48VTAwMkY+PFUxMjFEPiIKKyUKK0VORCBMQ19USU1FCislCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9nZXpfRVJAYWJlZ2VkZSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2dlel9FUkBhYmVnZWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliOTM4ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9nZXpfRVJAYWJlZ2VkZQpAQCAtMCwwICsxLDE1OSBAQAorY29tbWVudF9jaGFyICAgICUKK2VzY2FwZV9jaGFyICAgICAvCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgR2UnZXogbGFuZ3VhZ2UgbG9jYWxlIGZvciBFcml0cmVhIHdpdGggQWJlZ2VkZSBjb2xsYXRpb24uCislCislIENoYXJzZXQ6IFVURi04CislCislIFByZXBhcmVkIGFuZCBjb250cmlidXRlZCB0byBnbGliYyBieSBEYW5pZWwgWWFjb2IgPGxvY2FsZXNAZ2Vlei5vcmc+LgorJQorJSBUaGlzIGxvY2FsZSBkYXRhIGhhcyBiZWVuIGRldmVsb3BlZCB1bmRlciB0aGUgWWVoYSBQcm9qZWN0OgorJSAgICAgIGh0dHA6Ly95ZWhhLnNvdXJjZWZvcmdlLm5ldC8KKyUKKyUgYnVpbGQgd2l0aDogbG9jYWxlZGVmIC1mIFVURi04IC1pIGdlel9FUi1BYmVnZWRlIGdlel9FUi1BYmVnZWRlCislCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCisKK0xDX0lERU5USUZJQ0FUSU9OCislCit0aXRsZSAgICAgICJHZSdleiBsYW5ndWFnZSBsb2NhbGUgZm9yIEVyaXRyZWEgV2l0aCBBYmVnZWRlIENvbGxhdGlvbi4iCitzb3VyY2UgICAgICJHZSdleiBGcm9udGllciBGb3VuZGF0aW9uIgorYWRkcmVzcyAgICAiNzgwMiBTb2xvbW9uIFNlYWwgRHIuLCBTcHJpbmdmaWVsZCwgVkEgMjIxNTIsIFVTQSIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImxvY2FsZXNAZ2Vlei5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJnZXoiCit0ZXJyaXRvcnkgICJFUiIKK3JldmlzaW9uICAgIjAuMjAiCitkYXRlICAgICAgICIyMDAzLTA3LTA1IgorJQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTUVBU1VSRU1FTlQKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJwb3NpeDoxOTkzIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19URUxFUEhPTkUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfVElNRQorJQorRU5EIExDX0lERU5USUZJQ0FUSU9OCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIEV0aGlvcGljIFNwZWNpZmMgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX0NPTExBVEUKKyUKKyUgSW1wb3J0IEhhbGVoYW1lIGFuZCBSZXNlcXVlbmNlOgorJQorY29weSAidGlfRVIiCislCityZW9yZGVyLWFmdGVyIDx0aD4KKzxBTEVGPgorPEJFVD4KKzxWRS1CRVQ+Cis8R0VNRUw+Cis8TkdFLUdFTUVMPgorPERJTlQ+Cis8REhJLURJTlQ+Cis8SkktRElOVD4KKzxIT1k+Cis8V0VXRT4KKzxaRVk+Cis8WkhFLVpFWT4KKzxIQVdUPgorPFRFWVQ+Cis8Q0hFLVRFWVQ+Cis8WUVNRU4+Cis8S0FGPgorPEtIQS1LQUY+Cis8TEFXST4KKzxNQVk+Cis8TkVIQVM+Cis8TllFLU5FSEFTPgorPFNFV1Q+Cis8QVlJTj4KKzxBRj4KKzxTRURFWT4KKzxRQUY+Cis8UUhBLVFBRj4KKzxSSVM+Cis8U0FUPgorPFNIQS1TQVQ+Cis8VEFXPgorPENIQS1UQVc+Cis8SEFSTT4KKzxTRVBBPgorPFBFWVQ+Cis8UFNBPgorcmVvcmRlci1lbmQKKyUKK0VORCBMQ19DT0xMQVRFCisKKworTENfQ1RZUEUKK2NvcHkgImdlel9FUiIKK0VORCBMQ19DVFlQRQorCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislICBFcml0cmVhIFNwZWNpZmMgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJnZXpfRVIiCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTU9ORVRBUlkKK2NvcHkgImdlel9FUiIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJnZXpfRVIiCitFTkQgTENfTlVNRVJJQworCitMQ19QQVBFUgorY29weSAiZ2V6X0VSIgorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQorY29weSAiZ2V6X0VSIgorRU5EIExDX1RFTEVQSE9ORQorCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislICBHZSdlei9FUiBTcGVjaWZpYyBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfQUREUkVTUworY29weSAiZ2V6X0VSIgorRU5EIExDX0FERFJFU1MKKworTENfTUVTU0FHRVMKK2NvcHkgImdlel9FUiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19OQU1FCitjb3B5ICJnZXpfRVIiCitFTkQgTENfTkFNRQorCitMQ19USU1FCitjb3B5ICJnZXpfRVIiCitFTkQgTENfVElNRQorJQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZ2V6X0VUIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZ2V6X0VUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZTA5ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9nZXpfRVQKQEAgLTAsMCArMSwyMjAgQEAKK2NvbW1lbnRfY2hhciAgICAlCitlc2NhcGVfY2hhciAgICAgLworCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislIEdlJ2V6IGxhbmd1YWdlIGxvY2FsZSBmb3IgRXRoaW9waWEuCislCislIENoYXJzZXQ6IFVURi04CislCislIFByZXBhcmVkIGFuZCBjb250cmlidXRlZCB0byBnbGliYyBieSBEYW5pZWwgWWFjb2IgPGxvY2FsZXNAZ2Vlei5vcmc+LgorJQorJSBUaGlzIGxvY2FsZSBkYXRhIGhhcyBiZWVuIGRldmVsb3BlZCB1bmRlciB0aGUgWWVoYSBQcm9qZWN0OgorJSAgICAgIGh0dHA6Ly95ZWhhLnNvdXJjZWZvcmdlLm5ldC8KKyUKKyUgYnVpbGQgd2l0aDogbG9jYWxlZGVmIC1mIFVURi04IC1pIGdlel9FVCBnZXpfRVQKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKKworTENfSURFTlRJRklDQVRJT04KKyUKK3RpdGxlICAgICAgIkdlJ2V6IGxhbmd1YWdlIGxvY2FsZSBmb3IgRXRoaW9waWEiCitzb3VyY2UgICAgICJHZSdleiBGcm9udGllciBGb3VuZGF0aW9uIgorYWRkcmVzcyAgICAiNzgwMiBTb2xvbW9uIFNlYWwgRHIuLCBTcHJpbmdmaWVsZCwgVkEgMjIxNTIsIFVTQSIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImxvY2FsZXNAZ2Vlei5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJnZXoiCit0ZXJyaXRvcnkgICJFVCIKK3JldmlzaW9uICAgIjAuMjAiCitkYXRlICAgICAgICIyMDAzLTA3LTA1IgorJQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTUVBU1VSRU1FTlQKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJwb3NpeDoxOTkzIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19URUxFUEhPTkUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfVElNRQorJQorRU5EIExDX0lERU5USUZJQ0FUSU9OCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIEV0aGlvcGljIFNwZWNpZmMgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX0NPTExBVEUKK2NvcHkgImFtX0VUIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgInRpX0VUIgorRU5EIExDX0NUWVBFCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIEV0aGlvcGlhIFNwZWNpZmMgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJ0aV9FVCIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19NT05FVEFSWQorY29weSAidGlfRVQiCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworY29weSAidGlfRVQiCitFTkQgTENfTlVNRVJJQworCitMQ19QQVBFUgorY29weSAidGlfRVQiCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCitjb3B5ICJ0aV9FVCIKK0VORCBMQ19URUxFUEhPTkUKKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSAgR2UnZXovRVQgU3BlY2lmaWMgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX0FERFJFU1MKKyUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfQUREUkVTUyBjYXRlZ29yeS4KKyUKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwN0E+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDU0PjxVMDAyNT48VTAwNzM+LworPFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDY1PjxVMDAyNT48VTAwNzI+IgorY291bnRyeV9uYW1lICAiPFUxMkEyPjxVMTI3NT48VTEyRUU+PFUxMzM1PjxVMTJFQj4iCitjb3VudHJ5X3Bvc3QgICI8VTAwNDU+PFUwMDU0PjxVMDA0OD4iCitjb3VudHJ5X2FiMiAgICI8VTAwNDU+PFUwMDU0PiIKK2NvdW50cnlfYWIzICAgIjxVMDA0NT48VTAwNTQ+PFUwMDQ4PiIKK2NvdW50cnlfbnVtICAgMjMxICAgJSAyMTAgZm91bmQgaW4gYXQgbGVhc3Qgb25lIElTTyAzMTY2IGRvYworJSBjb3VudHJ5X2NhciAgIHVua25vd24KKyUgY291bnRyeV9pc2JuICB1bmtub3duLCBOZWVkIElTTyAyMTA4CitsYW5nX25hbWUgICAgICI8VTEzMEQ+PFUxMkQ1PjxVMTJERD4iCislbGFuZ19hYiAgICAgICAiPFUwMDY3PjxVMDA2NT48VTAwN0E+IgorbGFuZ190ZXJtICAgICAiPFUwMDY3PjxVMDA2NT48VTAwN0E+IgorJQorJSBQZXR0ZXIgUmVpbmhvbGR0c2VuIHJlcG9ydHMgdW5jb21tZW50aW5nIHRoZSBiZWxvdyBicmVha3MgY29tcGlsYXRpb24KKyUKKyVsYW5nX2xpYiAgICAgICI8VTAwNjc+PFUwMDY1PjxVMDA3QT4iCislCitFTkQgTENfQUREUkVTUworCisKK0xDX01FU1NBR0VTCitjb3B5ICJ0aV9FVCIKK0VORCBMQ19NRVNTQUdFUworCisKK0xDX05BTUUKK2NvcHkgInRpX0VUIgorRU5EIExDX05BTUUKKworCitMQ19USU1FCislCislIEFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZXMgKCVhKQorJQorYWJkYXkgICAgIjxVMTJBNT48VTEyODE+PFUxMkY1PiI7LworICAgICAgICAgIjxVMTIzMD48VTEyOTE+PFUxMkVEPiI7LworICAgICAgICAgIjxVMTIyMD48VTEyMDk+PFUxMjM1PiI7LworICAgICAgICAgIjxVMTIyQj48VTEyNjU+PFUxMkQ1PiI7LworICAgICAgICAgIjxVMTIxMD48VTEyMTk+PFUxMjM1PiI7LworICAgICAgICAgIjxVMTJEMz48VTEyMkQ+PFUxMjYwPiI7LworICAgICAgICAgIjxVMTI0MD48VTEyRjM+PFUxMjFBPiIKKyUKKyUgRnVsbCB3ZWVrZGF5IG5hbWVzICglQSkKKyUKK2RheSAgICAgICI8VTEyQTU+PFUxMjgxPjxVMTJGNT4iOy8KKyAgICAgICAgICI8VTEyMzA+PFUxMjkxPjxVMTJFRD4iOy8KKyAgICAgICAgICI8VTEyMjA+PFUxMjA5PjxVMTIzNT4iOy8KKyAgICAgICAgICI8VTEyMkI+PFUxMjY1PjxVMTJENT4iOy8KKyAgICAgICAgICI8VTEyMTA+PFUxMjE5PjxVMTIzNT4iOy8KKyAgICAgICAgICI8VTEyRDM+PFUxMjJEPjxVMTI2MD4iOy8KKyAgICAgICAgICI8VTEyNDA+PFUxMkYzPjxVMTIxQT48VTEyNzU+IgorJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCislCithYm1vbiAgICAiPFUxMzAzPjxVMTI5NT48VTEyRTk+IjsvCisgICAgICAgICAiPFUxMzRDPjxVMTI2NT48VTEyMjk+IjsvCisgICAgICAgICAiPFUxMjFCPjxVMTIyRD48VTEyN0Q+IjsvCisgICAgICAgICAiPFUxMkE0PjxVMTM1NT48VTEyMjg+IjsvCisgICAgICAgICAiPFUxMjFDPjxVMTJFRD48VTAwMjA+IjsvCisgICAgICAgICAiPFUxMzAxPjxVMTI5NT48VTAwMjA+IjsvCisgICAgICAgICAiPFUxMzAxPjxVMTIwQj48VTEyRUQ+IjsvCisgICAgICAgICAiPFUxMkE2PjxVMTMwOD48VTEyMzU+IjsvCisgICAgICAgICAiPFUxMjM0PjxVMTM1NT48VTEyNzQ+IjsvCisgICAgICAgICAiPFUxMkE2PjxVMTJBRD48VTEyNzA+IjsvCisgICAgICAgICAiPFUxMjk2PjxVMTI2Qz48VTEyMUQ+IjsvCisgICAgICAgICAiPFUxMkYyPjxVMTIzND48VTEyMUQ+IgorJQorJSBGdWxsIG1vbnRoIG5hbWVzICglQikKKyUKK21vbiAgICAgICI8VTEzMDM+PFUxMjk1PjxVMTJFOT48VTEyQzg+PFUxMjJBPiI7LworICAgICAgICAgIjxVMTM0Qz48VTEyNjU+PFUxMjI5PjxVMTJDOD48VTEyMkE+IjsvCisgICAgICAgICAiPFUxMjFCPjxVMTIyRD48VTEyN0Q+IjsvCisgICAgICAgICAiPFUxMkE0PjxVMTM1NT48VTEyMjg+PFUxMjBEPiI7LworICAgICAgICAgIjxVMTIxQz48VTEyRUQ+IjsvCisgICAgICAgICAiPFUxMzAxPjxVMTI5NT4iOy8KKyAgICAgICAgICI8VTEzMDE+PFUxMjBCPjxVMTJFRD4iOy8KKyAgICAgICAgICI8VTEyQTY+PFUxMzA4PjxVMTIzNT48VTEyNzU+IjsvCisgICAgICAgICAiPFUxMjM0PjxVMTM1NT48VTEyNzQ+PFUxMjFEPjxVMTI2MD48VTEyMkQ+IjsvCisgICAgICAgICAiPFUxMkE2PjxVMTJBRD48VTEyNzA+PFUxMkNEPjxVMTI2MD48VTEyMkQ+IjsvCisgICAgICAgICAiPFUxMjk2PjxVMTI2Qz48VTEyMUQ+PFUxMjYwPjxVMTIyRD4iOy8KKyAgICAgICAgICI8VTEyRjI+PFUxMjM0PjxVMTIxRD48VTEyNjA+PFUxMjJEPiIKKyUKKyUgRXF1aXZhbGVudCBvZiBBTSBQTQorJQorYW1fcG0gICAiPFUxMzNEPjxVMTI2Mz48VTEyMTU+IjsiPFUxMjFEPjxVMTIzND48VTEyNzU+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uICgleCkKKyUJIiVkLyVtLyVZIgorJQorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA1OT4iCislCislIEFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24gKCVYKQorJQkiJWw6JU06JVMiCislCit0X2ZtdCAiPFUwMDI1PjxVMDA2Qz48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4iCislCislIEFwcHJvcHJpYXRlIEFNL1BNIHRpbWUgcmVwcmVzZW50YXRpb24gKCVyKQorJQkiJVggJXAiCislCit0X2ZtdF9hbXBtICI8VTAwMjU+PFUwMDU4PjxVMTM2MT48VTAwMjU+PFUwMDcwPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbiAoJWMpCislCSIlQeGNpSVC4Y2hJWXhjaHhiJjhi5PhiI3hibXhjaElWeGNoSVy4Y2hJVoiCislCitkX3RfZm10ICAgICI8VTAwMjU+PFUwMDQxPjxVMTM2NT48VTAwMjU+PFUwMDQyPjxVMTM2MT48VTAwMjU+PFUwMDY1Pi8KKzxVMTM2MT48VTEyMTg+PFUxMkQzPjxVMTIwRD48VTEyNzU+LworPFUxMzYxPjxVMDAyNT48VTAwNTk+PFUxMzYxPjxVMDAyNT48VTAwNzI+PFUxMzYxPjxVMDAyNT48VTAwNUE+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uIChkYXRlKDEpKQorJQkiJUHhjaUlQuGNoSVl4Y2h4YiY4YuT4YiN4Ym14Y2hJXLhjaElWuGNoSVZ4Y2h4YuTL+GInQorJQorZGF0ZV9mbXQgICAgIjxVMDAyNT48VTAwNDE+PFUxMzY1PjxVMDAyNT48VTAwNDI+PFUxMzYxPjxVMDAyNT48VTAwNjU+LworPFUxMzYxPjxVMTIxOD48VTEyRDM+PFUxMjBEPjxVMTI3NT4vCis8VTEzNjE+PFUwMDI1PjxVMDA3Mj48VTEzNjE+PFUwMDI1PjxVMDA1QT48VTEzNjE+PFUwMDI1PjxVMDA1OT4vCis8VTEzNjE+PFUxMkQzPjxVMDAyRj48VTEyMUQ+IgorJQorRU5EIExDX1RJTUUKKyUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2dlel9FVEBhYmVnZWRlIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZ2V6X0VUQGFiZWdlZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E5N2M1NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2dlel9FVEBhYmVnZWRlCkBAIC0wLDAgKzEsMTE1IEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSBHZSdleiBsYW5ndWFnZSBsb2NhbGUgZm9yIEV0aGlvcGlhIHdpdGggQWJlZ2VkZSBjb2xsYXRpb24uCislCislIENoYXJzZXQ6IFVURi04CislCislIFByZXBhcmVkIGFuZCBjb250cmlidXRlZCB0byBnbGliYyBieSBEYW5pZWwgWWFjb2IgPGxvY2FsZXNAZ2Vlei5vcmc+LgorJQorJSBUaGlzIGxvY2FsZSBkYXRhIGhhcyBiZWVuIGRldmVsb3BlZCB1bmRlciB0aGUgWWVoYSBQcm9qZWN0OgorJSAgICAgIGh0dHA6Ly95ZWhhLnNvdXJjZWZvcmdlLm5ldC8KKyUKKyUgYnVpbGQgd2l0aDogbG9jYWxlZGVmIC1mIFVURi04IC1pIGdlel9FVC1BYmVnZWRlIGdlel9FVC1BYmVnZWRlCislCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCisKK0xDX0lERU5USUZJQ0FUSU9OCislCit0aXRsZSAgICAgICJHZSdleiBsYW5ndWFnZSBsb2NhbGUgZm9yIEV0aGlvcGlhIFdpdGggQWJlZ2VkZSBDb2xsYXRpb24iCitzb3VyY2UgICAgICJHZSdleiBGcm9udGllciBGb3VuZGF0aW9uIgorYWRkcmVzcyAgICAiNzgwMiBTb2xvbW9uIFNlYWwgRHIuLCBTcHJpbmdmaWVsZCwgVkEgMjIxNTIsIFVTQSIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImxvY2FsZXNAZ2Vlei5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJnZXoiCit0ZXJyaXRvcnkgICJFVCIKK3JldmlzaW9uICAgIjAuMjAiCitkYXRlICAgICAgICIyMDAzLTA3LTA1IgorJQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTUVBU1VSRU1FTlQKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJwb3NpeDoxOTkzIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19URUxFUEhPTkUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfVElNRQorJQorRU5EIExDX0lERU5USUZJQ0FUSU9OCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIEV0aGlvcGljIFNwZWNpZmMgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX0NPTExBVEUKK2NvcHkgImdlel9FUkBhYmVnZWRlIgorRU5EIExDX0NPTExBVEUKKworCitMQ19DVFlQRQorY29weSAiZ2V6X0VUIgorRU5EIExDX0NUWVBFCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIEV0aGlvcGlhIFNwZWNpZmMgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJnZXpfRVQiCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTU9ORVRBUlkKK2NvcHkgImdlel9FVCIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJnZXpfRVQiCitFTkQgTENfTlVNRVJJQworCitMQ19QQVBFUgorY29weSAiZ2V6X0VUIgorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQorY29weSAiZ2V6X0VUIgorRU5EIExDX1RFTEVQSE9ORQorCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislICBHZSdlei9FVCBTcGVjaWZpYyBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfQUREUkVTUworY29weSAiZ2V6X0VUIgorRU5EIExDX0FERFJFU1MKKworTENfTUVTU0FHRVMKK2NvcHkgImdlel9FVCIKK0VORCBMQ19NRVNTQUdFUworCitMQ19OQU1FCitjb3B5ICJnZXpfRVQiCitFTkQgTENfTkFNRQorCitMQ19USU1FCitjb3B5ICJnZXpfRVQiCitFTkQgTENfVElNRQorJQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZ2xfRVMgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9nbF9FUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWZlNWMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZ2xfRVMKQEAgLTAsMCArMSwxNTggQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBHYWxpY2lhbiBMYW5ndWFnZSBMb2NhbGUgZm9yIFNwYWluCislIFNvdXJjZTogR1BVTAorJSBBZGRyZXNzOiBGYWN1bHRhZGUgZGUgSW5mb3Jt4XRpY2EKKyUgICAgICAgICAgQ2FtcHVzIGRlIEVsdmlufmEsIHMvbgorJSAgICAgICAgICAxNTA3MSBBIENvcnVufmEsIFNwYWluCislIENvbnRhY3Q6IEphY29ibyBUYXJyaW8KKyUgRW1haWw6IGdwdWxAY2V1LmZpLnVkYy5lcworJSBMYW5ndWFnZTogZ2wKKyUgVGVycml0b3J5OiBFUworJSBSZXZpc2lvbjogMS4wCislIERhdGU6IDE5OTktMDctMDcKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorJSBCYXNlZCBpbiB0aGUgZXNfRVMgTG9jYWxlCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJHYWxpY2lhbiBsb2NhbGUgZm9yIFNwYWluIgorc291cmNlICAgICAiR1BVTCIKK2FkZHJlc3MgICAgIkZhY3VsdGFkZSBkZSBJbmZvcm3hdGljYSwgQ2FtcHVzIGRlIEVsdmlufmEsIHMvbiwgMTUwNzEgQSBDb3J1bn5hLCBTcGFpbiIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJHYWxpY2lhbiIKK3RlcnJpdG9yeSAgIlNwYWluIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAiZ2xfRVM6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZ2xfRVM6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZ2xfRVM6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJnbF9FUzoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImdsX0VTOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZ2xfRVM6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZ2xfRVM6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZ2xfRVM6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZ2xfRVM6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJnbF9FUzoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImdsX0VTOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ09MTEFURQorY29weSAiZXNfRVMiCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAiZXNfRVMiCitFTkQgTENfQ1RZUEUKKworTENfTUVTU0FHRVMKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDczPjxVMDA1Mz48VTAwNzk+PFUwMDU5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgICI8VTAwNDU+PFUwMDU1PjxVMDA1Mj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgIjxVMjBBQz4iCittb25fZGVjaW1hbF9wb2ludCAgICAiPFUwMDJDPiIKK21vbl90aG91c2FuZHNfc2VwICAgICI8VTAwMkU+IgorbW9uX2dyb3VwaW5nICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAxCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludCAgICAgICAgIjxVMDAyQz4iCit0aG91c2FuZHNfc2VwICAgICAgICAiIgorZ3JvdXBpbmcgICAgICAgICAgICAgMDswCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICI8VTAwNDQ+PFUwMDZGPjxVMDA2RD4iOyI8VTAwNEM+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA0RD48VTAwRTk+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDU4PjxVMDA2Rj48VTAwNzY+IjsiPFUwMDU2PjxVMDA2NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMEUxPjxVMDA2Mj4iCitkYXkgICAgICI8VTAwNDQ+PFUwMDZGPjxVMDA2RD48VTAwNjk+PFUwMDZFPjxVMDA2Nz48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNEM+PFUwMDc1PjxVMDA2RT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Mj48VTAwNzQ+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwRTk+PFUwMDcyPjxVMDA2Mz48VTAwNkY+PFUwMDcyPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNTg+PFUwMDZGPjxVMDA3Nj48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDU2PjxVMDA2NT48VTAwNkU+PFUwMDcyPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMEUxPjxVMDA2Mj48VTAwNjE+PFUwMDY0PjxVMDA2Rj4iCithYm1vbiAgICI8VTAwNTg+PFUwMDYxPjxVMDA2RT4iOyI8VTAwNDY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA0MT48VTAwNjI+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNjk+IjsiPFUwMDU4PjxVMDA3NT48VTAwRjE+IjsvCisgICAgICAgICI8VTAwNTg+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNDE+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDc0PiI7IjxVMDA0Rj48VTAwNzU+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDQ0PjxVMDA2NT48VTAwNjM+IgorbW9uICAgICAiPFUwMDU4PjxVMDA2MT48VTAwNkU+PFUwMDY1PjxVMDA2OT48VTAwNzI+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDQ2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA2NT48VTAwNjk+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPjxVMDA3QT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNDE+PFUwMDYyPjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNjk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDU4PjxVMDA3NT48VTAwRjE+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDU4PjxVMDA3NT48VTAwNkM+PFUwMDZDPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA0MT48VTAwNjc+PFUwMDZGPjxVMDA3Mz48VTAwNzQ+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNzQ+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA0Rj48VTAwNzU+PFUwMDc0PjxVMDA3NT48VTAwNjI+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDc2PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDY1PjxVMDA2Mz48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDZGPiIKK2RfdF9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA3OT4iCit0X2ZtdCAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgIiI7IiIKK3RfZm10X2FtcG0gIiIKK2RhdGVfZm10ICAgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCislIEZJWE1FCitoZWlnaHQgICAyOTcKKyUgRklYTUUKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzM+PFUwMDM0PiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKKyUgRklYTUUKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgIjxVMDA0NT48VTAwNTM+IgorY291bnRyeV9hYjMgIjxVMDA0NT48VTAwNTM+PFUwMDUwPiIKK2NvdW50cnlfbnVtIDcyNAorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2dsX0VTQGV1cm8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9nbF9FU0BldXJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MjE0NTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9nbF9FU0BldXJvCkBAIC0wLDAgKzEsODQgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBHYWxpY2lhbiBMYW5ndWFnZSBMb2NhbGUgZm9yIFNwYWluIHdpdGggRXVybworJSBMYW5ndWFnZTogZ2wKKyUgVGVycml0b3J5OiBFUworJSBPcHRpb246IGV1cm8KKyUgRGF0ZTogMjAwMC0wOC0yMQorJSBBcHBsaWNhdGlvbjogZ2VuZXJhbAorJSBVc2VyczogZ2VuZXJhbAorJSBDaGFyc2V0OiBJU08tODg1OS0xNQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiR2FsaWNpYW4gbG9jYWxlIGZvciBTcGFpbiB3aXRoIEV1cm8iCitzb3VyY2UgICAgICJGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4iCithZGRyZXNzICAgICI1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkdhbGljaWFuIgordGVycml0b3J5ICAiU3BhaW4iCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA4LTIxIgorJQorY2F0ZWdvcnkgICJnbF9FU0BldXJvOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImdsX0VTQGV1cm86MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZ2xfRVNAZXVybzoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImdsX0VTQGV1cm86MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJnbF9FU0BldXJvOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZ2xfRVNAZXVybzoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJnbF9FU0BldXJvOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImdsX0VTQGV1cm86MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZ2xfRVNAZXVybzoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImdsX0VTQGV1cm86MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJnbF9FU0BldXJvOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ09MTEFURQorY29weSAiZXNfRVMiCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAiZ2xfRVMiCitFTkQgTENfQ1RZUEUKKworTENfTUVTU0FHRVMKK2NvcHkgImdsX0VTIgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitjb3B5ICJnbF9FUyIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJnbF9FUyIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2NvcHkgImdsX0VTIgorRU5EIExDX1RJTUUKKworTENfUEFQRVIKK2NvcHkgImdsX0VTIgorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQorY29weSAiZ2xfRVMiCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJnbF9FUyIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCitjb3B5ICJnbF9FUyIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK2NvcHkgImdsX0VTIgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2d1X0lOIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvZ3VfSU4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU2MGEyMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2d1X0lOCkBAIC0wLDAgKzEsMjExIEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKyUgR3VyYWphdGkgTGFuZ3VhZ2UgTG9jYWxlIEZvciBJbmRpYS4KKyUgQ29waWVkIGZyb20gaGlfSU4gb25lLCBHIEthcnVuYWthciA8a2FydW5ha2FyQGZyZWVkb21pbmsub3JnPgorJSBHdWphcmF0aSBzdHVmZiBmcm9tIFRhcGFuIFBhcmlraCA8dGFwMmtAeWFob28uY29tPgorJSBHdWphcmF0aSBzdHVmZiBNb2RpZmllZCBieSBBbmtpdCBQYXRlbCA8YW5raXRAcmVkaGF0LmNvbT4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkd1amFyYXRpIExhbmd1YWdlIExvY2FsZSBGb3IgSW5kaWEiCitzb3VyY2UgICAgICJJbmRMaW51eC5vcmciCithZGRyZXNzICAgICIiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiR3VqYXJhdGkiCit0ZXJyaXRvcnkgICJJbmRpYSIKK3JldmlzaW9uICAgIjAuMiIKK2RhdGUgICAgICAgIjIwMDQtMTQtMDkiCislCitjYXRlZ29yeSAgImd1X0lOOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImd1X0lOOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImd1X0lOOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiZ3VfSU46MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJndV9JTjoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImd1X0lOOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImd1X0lOOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImd1X0lOOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImd1X0lOOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiZ3VfSU46MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJndV9JTjoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworCitMQ19DT0xMQVRFCisKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxCitjb3B5ICJpc28xNDY1MV90MSIKKworRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gdGhlIExDX01PTkVUQVJZIGNhdGVnb3J5LgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkaWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlL0phdmEKKyUKK2ludF9jdXJyX3N5bWJvbCAgICAgICAiPFUwMDQ5PjxVMDA0RT48VTAwNTI+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAiPFUwQUIwPjxVMEFDMT4iCittb25fZGVjaW1hbF9wb2ludCAgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAgMworcG9zaXRpdmVfc2lnbiAgICAgICAgICI8VTAwMkI+IgorbmVnYXRpdmVfc2lnbiAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAxCislCitFTkQgTENfTU9ORVRBUlkKKworCitMQ19OVU1FUklDCitjb3B5ICJoaV9JTiIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19USU1FIGNhdGVnb3J5LgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkaWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlL0phdmEKKyUKKyUgQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyAoJWEpCithYmRheQkJIjxVMEFCMD48VTBBQjU+PFUwQUJGPiI7LworCQkiPFUwQUI4PjxVMEFDQj48VTBBQUU+IjsvCisJCSI8VTBBQUU+PFUwQTgyPjxVMEE5Nz48VTBBQjM+IjsvCisJCSI8VTBBQUM+PFUwQUMxPjxVMEFBNz4iOy8KKwkJIjxVMEE5Nz48VTBBQzE+PFUwQUIwPjxVMEFDMT4iOy8KKwkJIjxVMEFCNj48VTBBQzE+PFUwQTk1PjxVMEFDRD48VTBBQjA+IjsvCisJCSI8VTBBQjY+PFUwQUE4PjxVMEFCRj4iCisKKyUKKyUgRnVsbCB3ZWVrZGF5IG5hbWVzICglQSkKK2RheQkJIjxVMEFCMD48VTBBQjU+PFUwQUJGPjxVMEFCNT48VTBBQkU+PFUwQUIwPiI7LworCQkiPFUwQUI4PjxVMEFDQj48VTBBQUU+PFUwQUI1PjxVMEFCRT48VTBBQjA+IjsvCisJCSI8VTBBQUU+PFUwQTgyPjxVMEE5Nz48VTBBQjM+PFUwQUI1PjxVMEFCRT48VTBBQjA+IjsvCisJCSI8VTBBQUM+PFUwQUMxPjxVMEFBNz48VTBBQjU+PFUwQUJFPjxVMEFCMD4iOy8KKwkJIjxVMEE5Nz48VTBBQzE+PFUwQUIwPjxVMEFDMT48VTBBQjU+PFUwQUJFPjxVMEFCMD4iOy8KKwkJIjxVMEFCNj48VTBBQzE+PFUwQTk1PjxVMEFDRD48VTBBQjA+PFUwQUI1PjxVMEFCRT48VTBBQjA+IjsvCisJCSI8VTBBQjY+PFUwQUE4PjxVMEFCRj48VTBBQjU+PFUwQUJFPjxVMEFCMD4iCisKKyUgQWJicmV2aWF0ZWQgbW9udGggbmFtZXMgKCViKQorYWJtb24gCQkiPFUwQTlDPjxVMEFCRT48VTBBQTg+IjsvCisJCSI8VTBBQUI+PFUwQUM3PjxVMEFBQz4iOy8KKwkJIjxVMEFBRT48VTBBQkU+PFUwQUIwPiI7LworCQkiPFUwQThGPjxVMEFBQT48VTBBQ0Q+PFUwQUIwPiI7LworCQkiPFUwQUFFPjxVMEFDNz4iOy8KKwkJIjxVMEE5Qz48VTBBQzE+PFUwQUE4PiI7LworCQkiPFUwQTlDPjxVMEFDMT48VTBBQjI+IjsvCisJCSI8VTBBOTM+PFUwQTk3PiI7LworCQkiPFUwQUI4PjxVMEFBQT48VTBBQ0Q+PFUwQTlGPiI7LworCQkiPFUwQTkzPjxVMEE5NT48VTBBQ0Q+PFUwQTlGPiI7LworCQkiPFUwQUE4PjxVMEFDQj48VTBBQjU+IjsvCisJCSI8VTBBQTE+PFUwQUJGPjxVMEFCOD4iCisKKyUKKyUgRnVsbCBtb250aCBuYW1lcyAoJUIpCittb24JIjxVMEE5Qz48VTBBQkU+PFUwQUE4PjxVMEFDRD48VTBBQUY+PFUwQUMxPjxVMEE4Nj48VTBBQjA+PFUwQUMwPiI7LworCSI8VTBBQUI+PFUwQUM3PjxVMEFBQz48VTBBQ0Q+PFUwQUIwPjxVMEFDMT48VTBBODY+PFUwQUIwPjxVMEFDMD4iOy8KKwkiPFUwQUFFPjxVMEFCRT48VTBBQjA+PFUwQUNEPjxVMEE5QT4iOy8KKwkiPFUwQThGPjxVMEFBQT48VTBBQ0Q+PFUwQUIwPjxVMEFCRj48VTBBQjI+IjsvCisJIjxVMEFBRT48VTBBQzc+IjsvCisJIjxVMEE5Qz48VTBBQzE+PFUwQUE4PiI7LworCSI8VTBBOUM+PFUwQUMxPjxVMEFCMj48VTBBQkU+PFUwQTg3PiI7LworCSI8VTBBOTM+PFUwQTk3PjxVMEFCOD48VTBBQ0Q+PFUwQTlGPiI7LworCSI8VTBBQjg+PFUwQUFBPjxVMEFDRD48VTBBOUY+PFUwQUM3PjxVMEFBRT48VTBBQ0Q+PFUwQUFDPjxVMEFCMD4iOy8KKwkiPFUwQTkzPjxVMEE5NT48VTBBQ0Q+PFUwQTlGPjxVMEFDQj48VTBBQUM+PFUwQUIwPiI7LworCSI8VTBBQTg+PFUwQUI1PjxVMEFDNz48VTBBQUU+PFUwQUNEPjxVMEFBQz48VTBBQjA+IjsvCisJIjxVMEFBMT48VTBBQkY+PFUwQUI4PjxVMEFDNz48VTBBQUU+PFUwQUNEPjxVMEFBQz48VTBBQjA+IgorCislCislIEVxdWl2YWxlbnQgb2YgQU0gUE0KK2FtX3BtCQkiPFUwQUI4PjxVMEFCNT48VTBBQkU+PFUwQUIwPjxVMEFDNz4iOy8KKwkJIjxVMEFCOD48VTBBQkU+PFUwQTgyPjxVMEE5Qz48VTBBQzc+IgorCislICoqKiBUaGVyZSBhcmVuJ3QgYW55IERldmFuYWdhcmkgY2hhcmFjdGVycyBiZWxvdywgc28gZm9yIHRpbWUgYmVpbmcKKyUgKioqIG1haW50YWluIHNhbWUgZm9yIEd1amFyYXRpIGFsc28sICBLYXJ1bmFrYXIKKworJQorJSBBcHByb3ByaWF0ZSBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uCislICVBICVkICViICVZJUk6JU06JVMgICVaCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA0MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj4vCis8VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+LworPFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24KKyUgJUEgJWQgJWIgJVkKK2RfZm10ICAgICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPi8KKzxVMDAyMD48VTAwMjU+PFUwMDU5PiIKKyUKKyUgQXBwcm9wcmlhdGUgdGltZSByZXByZXNlbnRhdGlvbgorJSAlSTolTTolUyAgJVoKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPi8KKzxVMDAyMD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIDEyIGggdGltZSByZXByZXNlbnRhdGlvbiAoJXIpCit0X2ZtdF9hbXBtICAiPFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA3MD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNzk+PFUwMDU5PjxVMEFCOT48VTAwNUQ+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMEFBOD48VTAwNUQ+IgorRU5EIExDX01FU1NBR0VTCisKKworTENfUEFQRVIKK2NvcHkgImhpX0lOIgorRU5EIExDX1BBUEVSCisKKworTENfTkFNRQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19OQU1FIGNhdGVnb3J5LgorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNzA+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2Nz4iCituYW1lX2dlbiAgICAiPFUwQTlDPjxVMEFCRT48VTBBQTQ+PFUwQUJGPiIKK25hbWVfbXIgICAgICI8VTBBQjY+PFUwQUNEPjxVMEFCMD48VTBBQzA+PFUwQUFFPjxVMEFCRT48VTBBQTg+IgorbmFtZV9tcnMgICAgIjxVMEFCNj48VTBBQ0Q+PFUwQUIwPjxVMEFDMD48VTBBQUU+PFUwQUE0PjxVMEFCRj4iCituYW1lX21pc3MgICAiPFUwQTk1PjxVMEFDMT48VTBBQUU+PFUwQUJFPjxVMEFCMD48VTBBQzA+IgorbmFtZV9tcyAgICAgIjxVMEFCOD48VTBBQjY+PFUwQUNEPjxVMEFCMD48VTBBQzA+IgorCitFTkQgTENfTkFNRQorCisKK0xDX0FERFJFU1MKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUgTENfQUREUkVTUworcG9zdGFsX2ZtdCAgIjxVMDAyNT48VTAwN0E+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDU0PjxVMDAyNT48VTAwNzM+LworPFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDY1PjxVMDAyNT48VTAwNzI+IgorCitjb3VudHJ5X2FiMiAiPFUwMDQ5PjxVMDA0RT4iCitjb3VudHJ5X2FiMyAiPFUwMDQ5PjxVMDA0RT48VTAwNDQ+IgorY291bnRyeV9udW0gMzU2CitFTkQgTENfQUREUkVTUworCisKK0xDX1RFTEVQSE9ORQorY29weSAiaGlfSU4iCitFTkQgTENfVEVMRVBIT05FCisKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgImhpX0lOIgorRU5EIExDX01FQVNVUkVNRU5UCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ndl9HQiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2d2X0dCCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZWZkOGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ndl9HQgpAQCAtMCwwICsxLDE3MyBAQAorZXNjYXBlX2NoYXIgIC8KK2NvbW1lbnRfY2hhciAgJQorCislIFdBUk5JTkc6IFVOT0ZGSUNJQUw7IEVYUEVSSU1FTlRBTC4gQ0hFQ0sgV0lUSCBLZWxkIFNpbW9uc2VuCislIHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBvZmZpY2FsIHJlbGVhc2UgZm9yIE1hbnggR2FlbGljLgorCislIE1hbnggR2FlbGljIGxhbmd1YWdlIGxvY2FsZSBmb3IgQnJpdGFpbgorJSBTb3VyY2U6IEFsYXN0YWlyIE1jS2luc3RyeQorJSBBZGRyZXNzOiBDcm/tIEzhciwgQmFsbGluYWhhbGxhLCBNYWlnaCBDdWlsaW5uLAorJSAgICBDby4gR2FpbGxpbWgsIElyZWxhbmQKKyUgQ29udGFjdDogQWxhc3RhaXIgTWNLaW5zdHJ5CislIEVtYWlsOiBtY2tpbnN0cnlAY29tcHV0ZXIub3JnCislIFRlbDogKzM1MyA5MSA1NTYxNzcKKyUgTGFuZ3VhZ2U6IGd2CislIFRlcnJpdG9yeTogR0IKKyUgUmV2aXNpb246IDQuMworJSBEYXRlOiAxOTk5LTA3LTA2CislIFVzZXJzOiBnZW5lcmFsCislIFJlcGVydG9pcmVtYXA6IG1uZW1vbmljLGRzCislIENoYXJzZXQ6IElTTy04ODU5LTEKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIk1hbnggR2FlbGljIGxvY2FsZSBmb3IgQnJpdGFpbiIKK3NvdXJjZSAgICAgIkFsYXN0YWlyIE1jS2luc3RyeSIKK2FkZHJlc3MgICAgIkNyb+0gTOFyLCBCYWxsaW5haGFsbGEsIE1haWdoIEN1aWxpbm4sLCBDby4gR2FpbGxpbWgsIElyZWxhbmQiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiTWFueCBHYWVsaWMiCit0ZXJyaXRvcnkgICJCcml0YWluIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAiZ3ZfR0I6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiZ3ZfR0I6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiZ3ZfR0I6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJndl9HQjoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImd2X0dCOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiZ3ZfR0I6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiZ3ZfR0I6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiZ3ZfR0I6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiZ3ZfR0I6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJndl9HQjoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImd2X0dCOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCitjb3B5ICJpc28xNDY1MV90MSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAiPFUwMDQ3PjxVMDA0Mj48VTAwNTA+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICI8VTAwQTM+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgICAgMAorbl9jc19wcmVjZWRlcyAgICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgICAgMAorcF9zaWduX3Bvc24gICAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgICAgMQorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAgIjxVMDAyQz4iCitncm91cGluZyAgICAgICAgICAgICAgICAzOzMKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKKworYWJkYXkgICAgICAgIjxVMDA0QT48VTAwNjU+PFUwMDY0PiI7IjxVMDA0QT48VTAwNjU+PFUwMDZDPiI7LworICAgICAgICAgICAgIjxVMDA0QT48VTAwNjU+PFUwMDZEPiI7IjxVMDA0QT48VTAwNjU+PFUwMDcyPjxVMDA2Mz4iOy8KKyAgICAgICAgICAgICI8VTAwNEE+PFUwMDY1PjxVMDA3Mj48VTAwNjQ+IjsiPFUwMDRBPjxVMDA2NT48VTAwNjg+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDA2NT48VTAwNzM+IgorZGF5ICAgICAgICAgIjxVMDA0QT48VTAwNjU+PFUwMDY0PjxVMDA2Rj48VTAwNkY+PFUwMDZFPjxVMDA2NT48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDA2NT48VTAwNkM+PFUwMDY4PjxVMDA2NT48VTAwNjk+PFUwMDZFPiI7LworICAgICAgICAgICAgIjxVMDA0QT48VTAwNjU+PFUwMDZEPjxVMDA2MT48VTAwNzk+PFUwMDcyPjxVMDA3ND4iOy8KKyAgICAgICAgICAgICI8VTAwNEE+PFUwMDY1PjxVMDA3Mj48VTAwNjM+PFUwMDY1PjxVMDA2MT48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDA2NT48VTAwNzI+PFUwMDY0PjxVMDA2NT48VTAwNjk+PFUwMDZFPiI7LworICAgICAgICAgICAgIjxVMDA0QT48VTAwNjU+PFUwMDY4PjxVMDA2NT48VTAwNjk+PFUwMDZFPjxVMDA2NT48VTAwNzk+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDA2NT48VTAwNzM+PFUwMDYxPjxVMDA3Mj48VTAwNkU+IgorbW9uCSAgICAiPFUwMDRBPjxVMDA2NT48VTAwNzI+PFUwMDcyPjxVMDA2NT48VTAwNzk+PFUwMDJEPjxVMDA2Nz48VTAwNjU+PFUwMDc1PjxVMDA3Mj48VTAwNjU+PFUwMDY1PiI7LworCSAgICAiPFUwMDU0PjxVMDA2Rj48VTAwNzM+PFUwMDY4PjxVMDA2OT48VTAwNjE+PFUwMDY3PjxVMDA2OD48VTAwNzQ+PFUwMDJEPjxVMDA2MT48VTAwNzI+PFUwMDcyPjxVMDA2NT48VTAwNjU+IjsvCisJICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3OT48VTAwNzI+PFUwMDZFPjxVMDA3ND4iOy8KKwkgICAgIjxVMDA0MT48VTAwNzY+PFUwMDY1PjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworCSAgICAiPFUwMDQyPjxVMDA2Rj48VTAwNjE+PFUwMDZDPjxVMDA2ND48VTAwNzk+PFUwMDZFPiI7LworCSAgICAiPFUwMDREPjxVMDA2NT48VTAwNjE+PFUwMDZFPjxVMDAyRD48VTAwNzM+PFUwMDZGPjxVMDA3NT48VTAwNzI+PFUwMDY1PjxVMDA2NT4iOy8KKwkgICAgIjxVMDA0QT48VTAwNjU+PFUwMDcyPjxVMDA3Mj48VTAwNjU+PFUwMDc5PjxVMDAyRD48VTAwNzM+PFUwMDZGPjxVMDA3NT48VTAwNzI+PFUwMDY1PjxVMDA2NT4iOy8KKwkgICAgIjxVMDA0Qz48VTAwNzU+PFUwMDYxPjxVMDA2RT48VTAwNjk+PFUwMDczPjxVMDA3ND48VTAwNzk+PFUwMDZFPiI7LworCSAgICAiPFUwMDREPjxVMDA2NT48VTAwNjE+PFUwMDZFPjxVMDAyRD48VTAwNjY+PFUwMDZGPjxVMDA3NT48VTAwNzk+PFUwMDY5PjxVMDA3Mj4iOy8KKwkgICAgIjxVMDA0QT48VTAwNjU+PFUwMDcyPjxVMDA3Mj48VTAwNjU+PFUwMDc5PjxVMDAyRD48VTAwNjY+PFUwMDZGPjxVMDA3NT48VTAwNzk+PFUwMDY5PjxVMDA3Mj4iOy8KKwkgICAgIjxVMDA0RD48VTAwNjU+PFUwMDY1PjxVMDAyMD48VTAwNDg+PFUwMDZGPjxVMDA3NT48VTAwNkU+PFUwMDY1PjxVMDA3OT4iOy8KKwkgICAgIjxVMDA0RD48VTAwNjU+PFUwMDY1PjxVMDAyMD48VTAwNkU+PFUwMDc5PjxVMDAyMD48VTAwNEU+PFUwMDZGPjxVMDA2Qz48VTAwNkM+PFUwMDY5PjxVMDA2Mz48VTAwNkI+IgorYWJtb24gICAgICAgIjxVMDA0QT48VTAwMkQ+PFUwMDY3PjxVMDA3NT48VTAwNjU+PFUwMDcyPiI7LworCSAgICAiPFUwMDU0PjxVMDAyRD48VTAwNjE+PFUwMDcyPjxVMDA3Mj48VTAwNjU+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDc5PjxVMDA3Mj48VTAwNkU+PFUwMDc0PiI7LworCSAgICAiPFUwMDQxPjxVMDA3Nj48VTAwNzI+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICAgICAiPFUwMDQyPjxVMDA2Rj48VTAwNjE+PFUwMDZDPjxVMDA2ND48VTAwNzk+PFUwMDZFPiI7LworCSAgICAiPFUwMDREPjxVMDAyRD48VTAwNzM+PFUwMDZGPjxVMDA3NT48VTAwNzI+PFUwMDY1PjxVMDA2NT4iOy8KKyAgICAgICAgICAgICI8VTAwNEE+PFUwMDJEPjxVMDA3Mz48VTAwNkY+PFUwMDc1PjxVMDA3Mj48VTAwNjU+PFUwMDY1PiI7LworCSAgICAiPFUwMDRDPjxVMDA3NT48VTAwNjE+PFUwMDZFPjxVMDA2OT48VTAwNzM+PFUwMDc0PjxVMDA3OT48VTAwNkU+IjsvCisJICAgICI8VTAwNEQ+PFUwMDJEPjxVMDA2Nj48VTAwNkY+PFUwMDc1PjxVMDA3OT48VTAwNjk+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA0QT48VTAwMkQ+PFUwMDY2PjxVMDA2Rj48VTAwNzU+PFUwMDc5PjxVMDA2OT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDAyRT48VTAwNDg+PFUwMDZGPjxVMDA3NT48VTAwNkU+PFUwMDY1PjxVMDA3OT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDJFPjxVMDA0RT48VTAwNkY+PFUwMDZDPjxVMDA2Qz48VTAwNjk+PFUwMDYzPjxVMDA2Qj4iCisKKworZF90X2ZtdCAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNzk+IgordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAgICAgIiI7IiIKK3RfZm10X2FtcG0gICIiCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19QQVBFUgorJSBGSVhNRQoraGVpZ2h0ICAgMjk3CislIEZJWE1FCit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDM0PjxVMDAzND4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCislIEZJWE1FCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICI8VTAwNDc+PFUwMDQyPiIKK2NvdW50cnlfYWIzICI8VTAwNDc+PFUwMDQyPjxVMDA1Mj4iCitjb3VudHJ5X251bSA4MjYKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9oYV9ORyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2hhX05HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NGQzMjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9oYV9ORwpAQCAtMCwwICsxLDMwNyBAQAorZXNjYXBlX2NoYXIgLworY29tbWVudF9jaGFyICUKKyUKKyUgSGF1c2EgbGFuZ3VhZ2UgbG9jYWxlIGZvciBOaWdlcmlhCislIFNvdXJjZTogCislIENvbnRhY3Q6IFBhYmxvIFNhcmF0eGFnYQorJSBFbWFpbDogcGFibG9AbWFuZHJpdmEuY29tCislIExhbmd1YWdlOiBoYQorJSBUZXJyaXRvcnk6IE5HCislIFJldmlzaW9uOiAwLjIKKyUgRGF0ZTogMjAwNi0wMi0wMQorJSBVc2VyczogZ2VuZXJhbAorJSBDaGFyc2V0OiBVVEYtOAorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiSGF1c2EgbG9jYWxlIGZvciBOaWdlcmlhIgorc291cmNlICAgICAiIgorYWRkcmVzcyAgICAiIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAicGFibG9AbWFuZHJpdmEuY29tIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiSGF1c2EiCit0ZXJyaXRvcnkgICJOaWdlcmlhIgorcmV2aXNpb24gICAiMC4yIgorZGF0ZSAgICAgICAiMjAwNi0wMi0wMSIKKyUKK2NhdGVnb3J5ICAiaGFfTkc6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiaGFfTkc6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiaGFfTkc6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJoYV9ORzoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImhhX05HOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiaGFfTkc6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiaGFfTkc6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiaGFfTkc6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiaGFfTkc6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJoYV9ORzoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImhhX05HOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ09MTEFURQorCislIEhhdXNhIHVzZXMgdGhlIGZvbGxvd2luZyBleHRyYSBsZXR0ZXJzOgorJSBiaG9vaywgZGhvb2ssIGtob29rLCBydGlsZGUuCislIGFjY2VudCBtYXJrcz8lCislCislICcgaXMgdXNlZCBhcyBnbG90YWwgc3RvcCAoc2hvdWxkIGl0IGNvdW50IG9uIHNvcnRpbmc/KQorJQorJSBIYXVzYSBpbiBOaWdlciB1c2VzIGFsc28geWhvb2s7IGltcGxlbWVudGVkIGhlcmUgdG9vCislIHNvIGl0IHNvcnRzIGFzICd5CislCislIG9yZGVyOiBhLCBiLCBiKywgYywgZCwgZCssIGUsIGYsIGcsIGgsIGksIGosIGssIGsrLCBsLCBtLCBuLCBvLCBwCislIHEsIHIsIHJ+LCBzLCBzaCwgdCwgdHMsIHUsIFt2XSwgdywgW3hdLCAneSwgeSwgegorCitjb3B5ICJpc28xNDY1MV90MSIKKworY29sbGF0aW5nLXN5bWJvbCAgPHMtaC1oYT4KK2NvbGxhdGluZy1lbGVtZW50IDxTLUg+IGZyb20gIjxVMDA1Mz48VTAwNDg+IgorY29sbGF0aW5nLWVsZW1lbnQgPHMtaD4gZnJvbSAiPFUwMDczPjxVMDA2OD4iCitjb2xsYXRpbmctZWxlbWVudCA8Uy1oPiBmcm9tICI8VTAwNTM+PFUwMDY4PiIKK2NvbGxhdGluZy1lbGVtZW50IDxzLUg+IGZyb20gIjxVMDA3Mz48VTAwNDg+IgorY29sbGF0aW5nLXN5bWJvbCAgPHQtcy1oYT4KK2NvbGxhdGluZy1lbGVtZW50IDxULVM+IGZyb20gIjxVMDA1ND48VTAwNTM+IgorY29sbGF0aW5nLWVsZW1lbnQgPHQtcz4gZnJvbSAiPFUwMDc0PjxVMDA3Mz4iCitjb2xsYXRpbmctZWxlbWVudCA8VC1zPiBmcm9tICI8VTAwNTQ+PFUwMDczPiIKK2NvbGxhdGluZy1lbGVtZW50IDx0LVM+IGZyb20gIjxVMDA3ND48VTAwNTM+IgorY29sbGF0aW5nLXN5bWJvbCAgPCcteS1oYT4KK2NvbGxhdGluZy1lbGVtZW50IDwnMXk+IGZyb20gIjxVMDAyNz48VTAwNzk+IgorY29sbGF0aW5nLWVsZW1lbnQgPCcxWT4gZnJvbSAiPFUwMDI3PjxVMDA1OT4iCitjb2xsYXRpbmctZWxlbWVudCA8JzJ5PiBmcm9tICI8VTIwMTk+PFUwMDc5PiIKK2NvbGxhdGluZy1lbGVtZW50IDwnMlk+IGZyb20gIjxVMjAxOT48VTAwNTk+IgorY29sbGF0aW5nLXN5bWJvbCAgPHJ0aWxkZT4gCitjb2xsYXRpbmctZWxlbWVudCA8cj8+ICBmcm9tICI8VTAwNzI+PFUwMzAzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxSPz4gIGZyb20gIjxVMDA1Mj48VTAzMDM+IgorY29sbGF0aW5nLXN5bWJvbCAgPGJjdXJsPgorY29sbGF0aW5nLXN5bWJvbCAgPGRjdXJsPgorY29sbGF0aW5nLXN5bWJvbCAgPGtjdXJsPgorCitjb2xsYXRpbmctc3ltYm9sIDxDQVAtTUlOPgorY29sbGF0aW5nLXN5bWJvbCA8TUlOLUNBUD4KKyAKK3Jlb3JkZXItYWZ0ZXIgPE1JTj4KKzxNSU4tQ0FQPgorIAorcmVvcmRlci1hZnRlciA8Q0FQPgorPENBUC1NSU4+CisKK3Jlb3JkZXItYWZ0ZXIgPGI+Cis8YmN1cmw+CityZW9yZGVyLWFmdGVyIDxkPgorPGRjdXJsPgorcmVvcmRlci1hZnRlciA8az4KKzxrY3VybD4KK3Jlb3JkZXItYWZ0ZXIgPHI+Cis8cnRpbGRlPgorPHM+Cis8cy1oLWhhPgorPHQ+Cis8dC1zLWhhPgorcmVvcmRlci1hZnRlciA8eD4KKzwnLXktaGE+CisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDYyPgorPFUwMjUzPiA8YmN1cmw+OzxCQVM+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNDI+Cis8VTAxODE+IDxiY3VybD47PEJBUz47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDY0PgorPFUwMjU3PiA8ZGN1cmw+OzxCQVM+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNDQ+Cis8VTAxOEE+IDxkY3VybD47PEJBUz47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDZCPgorPFUwMTk5PiA8a2N1cmw+OzxCQVM+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNEI+Cis8VTAxOTg+IDxrY3VybD47PEJBUz47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDcyPgorPHI/PiAgICA8cnRpbGRlPjs8QUNBPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDUyPgorPFI/PiAgICA8cnRpbGRlPjs8QUNBPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNzM+Cis8cy1oPiAgIDxzLWgtaGE+OzxQQ0w+OzxNSU4+O0lHTk9SRQorPHMtSD4gICA8cy1oLWhhPjs8UENMPjs8TUlOLUNBUD47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA1Mz4KKzxTLUg+ICAgPHMtaC1oYT47PFBDTD47PENBUD47SUdOT1JFCis8Uy1oPiAgIDxzLWgtaGE+OzxQQ0w+OzxDQVAtTUlOPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNzQ+Cis8dC1zPiAgIDx0LXMtaGE+OzxQQ0w+OzxNSU4+O0lHTk9SRQorPHQtUz4gICA8dC1zLWhhPjs8UENMPjs8TUlOLUNBUD47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA1ND4KKzxULVM+ICAgPHQtcy1oYT47PFBDTD47PENBUD47SUdOT1JFCis8VC1zPiAgIDx0LXMtaGE+OzxQQ0w+OzxDQVAtTUlOPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNzg+Cis8JzF5PiAgIDwnLXktaGE+OzxQQ0w+OzxNSU4+O0lHTk9SRQorPCcyeT4gICA8Jy15LWhhPjs8UENMPjs8TUlOPjtJR05PUkUKKzxVMDFCND4gPCcteS1oYT47PFBDTD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA1OD4KKzwnMVk+ICAgPCcteS1oYT47PFBDTD47PENBUD47SUdOT1JFCis8JzJZPiAgIDwnLXktaGE+OzxQQ0w+OzxDQVA+O0lHTk9SRQorPFUwMUIzPiA8Jy15LWhhPjs8UENMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1lbmQKKworRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImVuX05HIgorRU5EIExDX0NUWVBFCisKK0xDX01PTkVUQVJZCitjb3B5ICJlbl9ORyIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJlbl9ORyIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RFTEVQSE9ORQorY29weSAiZW5fTkciCitFTkQgTENfVEVMRVBIT05FCisgCitMQ19USU1FCislIExhaCwgTGl0LCBUYWwsIExhciwgQWxoLCBKdW0sIEFzYQorJSBtYXliZSAiTGhkIiAiTHJiIiA9PiAiTGgiLyJMYiIgb24gMmxldHRlciB0YWJsZXM/CithYmRheSAgICAgICAiPFUwMDRDPjxVMDA2MT48VTAwNjg+IjsiPFUwMDRDPjxVMDA2OT48VTAwNzQ+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA2MT48VTAwNkM+IjsiPFUwMDRDPjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDQxPjxVMDA2Qz48VTAwNjg+IjsiPFUwMDRBPjxVMDA3NT48VTAwNkQ+IjsvCisgICAgICAgICAgICAiPFUwMDQxPjxVMDA3Mz48VTAwNjE+IgorJSBMYWhhZGksIExpdGluaSwgVGFsYXRhLCBMYXJhYmEsIEFsaGFtaXMsIEp1bWEnYSwgQXNhYmFyCitkYXkgICAgICAgICAiPFUwMDRDPjxVMDA2MT48VTAwNjg+PFUwMDYxPjxVMDA2ND48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDRDPjxVMDA2OT48VTAwNzQ+PFUwMDY5PjxVMDA2RT48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA2MT48VTAwNkM+PFUwMDYxPjxVMDA3ND48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDRDPjxVMDA2MT48VTAwNzI+PFUwMDYxPjxVMDA2Mj48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDQxPjxVMDA2Qz48VTAwNjg+PFUwMDYxPjxVMDA2RD48VTAwNjk+PFUwMDczPiI7LworICAgICAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZEPjxVMDA2MT48VTAwMjc+PFUwMDYxPiI7LworICAgICAgICAgICAgIjxVMDA0MT48VTAwNzM+PFUwMDYxPjxVMDA2Mj48VTAwNjE+PFUwMDcyPiIKKyUgSmFuLCBGYWIsIE1hciwgQWZyLCBNYXksIFl1biwgWXVsLCBBZ3UsIFNhdCwgT2t0LCBOdXcsIERpcworYWJtb24gICAgICAgIjxVMDA0QT48VTAwNjE+PFUwMDZFPiI7IjxVMDA0Nj48VTAwNjE+PFUwMDYyPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA0MT48VTAwNjY+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDc5PiI7IjxVMDA1OT48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAgICAgIjxVMDA1OT48VTAwNzU+PFUwMDZDPiI7IjxVMDA0MT48VTAwNjc+PFUwMDc1PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDc0PiI7IjxVMDA0Rj48VTAwNkI+PFUwMDc0PiI7LworICAgICAgICAgICAgIjxVMDA0RT48VTAwNzU+PFUwMDc3PiI7IjxVMDA0ND48VTAwNjk+PFUwMDczPiIKKyUgSmFuYWlydSwgRmFicmFpcnUsIE1hcmlzLCBBZnJpbHUsIE1heXUsIFl1bmksIAorJSBZdWxpLCBBZ3VzdGEsIFNhdHVtYmEsIE9rdG9iYSwgTnV3YW1iYSwgRGlzYW1iYQorbW9uICAgICAgICAgIjxVMDA0QT48VTAwNjE+PFUwMDZFPjxVMDA2MT48VTAwNjk+PFUwMDcyPjxVMDA3NT4iOy8KKyAgICAgICAgICAgICI8VTAwNDY+PFUwMDYxPjxVMDA2Mj48VTAwNzI+PFUwMDYxPjxVMDA2OT48VTAwNzI+PFUwMDc1PiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPjxVMDA2OT48VTAwNzM+IjsvCisgICAgICAgICAgICAiPFUwMDQxPjxVMDA2Nj48VTAwNzI+PFUwMDY5PjxVMDA2Qz48VTAwNzU+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+PFUwMDc1PiI7LworICAgICAgICAgICAgIjxVMDA1OT48VTAwNzU+PFUwMDZFPjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNTk+PFUwMDc1PjxVMDA2Qz48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDQxPjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNzQ+PFUwMDc1PjxVMDA2RD48VTAwNjI+PFUwMDYxPiI7LworICAgICAgICAgICAgIjxVMDA0Rj48VTAwNkI+PFUwMDc0PjxVMDA2Rj48VTAwNjI+PFUwMDYxPiI7LworICAgICAgICAgICAgIjxVMDA0RT48VTAwNzU+PFUwMDc3PjxVMDA2MT48VTAwNkQ+PFUwMDYyPjxVMDA2MT4iOy8KKyAgICAgICAgICAgICI8VTAwNDQ+PFUwMDY5PjxVMDA3Mz48VTAwNjE+PFUwMDZEPjxVMDA2Mj48VTAwNjE+IgorJSByYW5hciAlQSwgJWQgZ2EgJUIgY2lraW4gJVkgJXIgJVoKK2RfdF9mbXQgICAgICI8VTAwNzI+PFUwMDYxPjxVMDA2RT48VTAwNjE+PFUwMDcyPjxVMDAyMD48VTAwMjU+PFUwMDQxPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDY3PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDYzPjxVMDA2OT48VTAwNkI+PFUwMDY5PjxVMDA2RT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA3OT4iCit0X2ZtdCAgICAgICAiPFUwMDI1PjxVMDA3Mj4iCithbV9wbSAgICAgICAiPFUwMDQxPjxVMDA0RD4iOyI8VTAwNTA+PFUwMDREPiIKK3RfZm10X2FtcG0gICI8VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPiIKK0VORCBMQ19USU1FCisKKyUgRklYTUUKK0xDX01FU1NBR0VTCislIHllczogVG9oLCBJaQoreWVzc3RyICAgICAgIjxVMDA1ND48VTAwNkY+PFUwMDY4PiIKKyUgXltUdElpWXldLioKK3llc2V4cHIgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA1ND48VTAwNzQ+PFUwMDY5PjxVMDA0OT48VTAwNTk+PFUwMDc5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKKyUgbm86IEJhYnUsIEEnYQorbm9zdHIgICAgICAgIjxVMDA0Mj48VTAwNjE+PFUwMDYyPjxVMDA3NT4iCislIF5bQmJBYU5uXS4qCitub2V4cHIgICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNjI+PFUwMDQyPjxVMDA2MT48VTAwNDE+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfUEFQRVIKK2NvcHkgImVuX05HIgorRU5EIExDX1BBUEVSCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJlbl9ORyIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCislIEZJWE1FCitjb3B5ICJlbl9ORyIKK0VORCBMQ19OQU1FCisKKyUgRklYTUUKK0xDX0FERFJFU1MKKyUgUmVwcmVzZW50YXRpb24gb2YgcG9zdGFsIGFkZHJlc3NlcyAobWludXMgdGhlIGFkZHJlc3NlZSdzIG5hbWUpIGluIFNvdXRoCislIEFmcmljYS4gKElnbm9yZWQgZm9yIG5vdykKKyUgIiVmJU4lYSVOJWQlTiViJU4lcyAlaCAlZSAlciVOJXogJVQlTiVjJU4iLCB3aGljaCBnaXZlcyAtCislCislICJmaXJtIG5hbWUiLAorJSAiZW5kIG9mIGxpbmUiLAorJSAiQy9PIGFkZHJlc3MiLAorJSAiZW5kIG9mIGxpbmUiLAorJSAiZGVwYXJ0bWVudCBuYW1lIiwKKyUgIkJ1aWxkaW5nIG5hbWUiLAorJSAiZW5kIG9mIGxpbmUiLAorJSAic3RyZWV0IG9yIGJsb2NrIG5hbWUiLAorJSAic3BhY2UiLAorJSAiaG91c2UgbnVtYmVyIG9yIGRlc2lnbmF0aW9uIiwKKyUgInNwYWNlIiwKKyUgImZsb29yIG51bWJlciIsCislICJzcGFjZSIsCislICJyb29tIG51bWJlciwgZG9vciBkZXNpZ25hdGlvbiIsCislICJlbmQgb2YgbGluZSIsCislICJwb3N0YWwgY29kZSIsCislICJzcGFjZSIsCislICJ0b3duLCBjaXR5IiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgImNvdW50cnkgZGVzaWduYXRpb24gZm9yIHRoZSA8Y291bnRyeV9wb3N0PiBrZXl3b3JkIiwKKyUgImVuZCBvZiBsaW5lCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorCislIENvdW50cnkgbmFtZSBpbiBIYXVzYSAtICJOaWdlcmlhIgorY291bnRyeV9uYW1lICAiPFUwMDRFPjxVMDA2OT48VTAwNjc+PFUwMDY1PjxVMDA3Mj48VTAwNjk+PFUwMDYxPiIKKworJSBMYW5ndWFnZSBuYW1lIGluIEhhdXNhIC0gIkhhdXNhIgorbGFuZ19uYW1lICAgICAiPFUwMDQ4PjxVMDA2MT48VTAwNzU+PFUwMDczPjxVMDA2MT4iCisKKyUgQ0VQVCBNQUlMQ09ERVMgYXJlIHN1Z2dlc3RlZAorJSBBbHRlcm5hdGl2ZWx5IHVzZSB0aGUgY29kZSBmb3VuZCBvbiB5b3VyIGNvdW50cmllcyBwb3N0YWwgaXRlbSB0cmFja2luZyBudW1iZXIKKyUgIk5HIj8KKyVjb3VudHJ5X3Bvc3QgICAiPFUwMDRFPjxVMDA0Nz4iCisKKyUgVU4gR2VuZXZlIDE5NDk6NjggRGlzdGluZ3Vpc2hpbmcgc2lnbnMgb2YgdmVoaWNsZXMgaW4gaW50ZXJuYXRpb25hbCB0cmFmZmljCislIGh0dHA6Ly93d3cudW5lY2Uub3JnL3RyYW5zL2NvbnZlbnRuL0Rpc3RzaWduc19TZXB0MjAwMy5wZGYKKyUgIldBTiIKK2NvdW50cnlfY2FyICAgIjxVMDA1Nz48VTAwNDE+PFUwMDRFPiIKKworJSBJU08gMjEwOAorJSBodHRwOi8vd3d3LmlzYm4taW50ZXJuYXRpb25hbC5vcmcvCitjb3VudHJ5X2lzYm4gIDk3OAorCislIElTTyA2MzkgbGFuZ3VhZ2UgYWJicmV2aWF0aW9uczoKKyUgNjM5LTEgMiBsZXR0ZXIsIDYzOS0yIDMgbGV0dGVyIHRlcm1pbm9sb2d5CislIGh0dHA6Ly93d3cubG9jLmdvdi9zdGFuZGFyZHMvaXNvNjM5LTIvZW5nbGFnbi5odG1sCislICJoYSIsICJoYXUiCitsYW5nX2FiICAgICAgICI8VTAwNjg+PFUwMDYxPiIKK2xhbmdfdGVybSAgICAgIjxVMDA2OD48VTAwNjE+PFUwMDc1PiIKK2xhbmdfbGliICAgICAgIjxVMDA2OD48VTAwNjE+PFUwMDc1PiIKKworJSBJU08gMzE2NiBjb3VudHJ5IG51bWJlciBhbmQgMiBhbmQgMyBsZXR0ZXIgYWJyZXZpYXRpb25zCislIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvb25saW5lZGF0L2NvdW50cmllcy5odG1sCislICJORyIsICJOR0EiCitjb3VudHJ5X2FiMiAgICI8VTAwNEU+PFUwMDQ3PiIKK2NvdW50cnlfYWIzICAgIjxVMDA0RT48VTAwNDc+PFUwMDQxPiIKK2NvdW50cnlfbnVtICAgNTY2CisKK0VORCBMQ19BRERSRVNTCisKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2hlX0lMIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvaGVfSUwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc0NGQ0NwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2hlX0lMCkBAIC0wLDAgKzEsMTY1IEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgSGVicmV3IExhbmd1YWdlIExvY2FsZSBmb3IgSXNyYWVsCislIFNvdXJjZTogUkFQCislIEFkZHJlc3M6IFNhbmt0IEpvL3JnZW5zIEFsbGUgOAorJSAgICBESy0xNjE1IEtvL2Jlbmhhdm4gViwgRGFubWFyaworJSBDb250YWN0OiBLZWxkIFNpbW9uc2VuCislIEVtYWlsOiBLZWxkLlNpbW9uc2VuQGRrdXVnLmRrCislIFRlbDogKzQ1IC0gMzEyMjY1NDMKKyUgRmF4OiArNDUgLSAzMzI1NjU0MworJSBMYW5ndWFnZTogaXcKKyUgVGVycml0b3J5OiBJTAorJSBSZXZpc2lvbjogNC40CislIERhdGU6IDE5OTctMDMtMTgKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMuZHMKKyUgQ2hhcnNldDogSVNPLTg4NTktOAorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorJQorJSBUaGlzIGxvY2FsZSByZXBsYWNlcyBpd19JTCwgYXMgdGhlIElTTy02MzkgY29kZSBmb3IgSGVicmV3IHdhcyBjaGFuZ2VkCislIGZyb20gJ2l3JyB0byAnaGUnIGluIDE5ODksIGFjY29yZGluZyB0byBCcnVubyBIYWlibGUgb24gbGliYy1hbHBoYQorJSAyMDAzLTA5LTAxLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiSGVicmV3IGxvY2FsZSBmb3IgSXNyYWVsIgorc291cmNlICAgICAiUkFQIgorYWRkcmVzcyAgICAiU2Fua3QgSm8vcmdlbnMgQWxsZSA4LCBESy0xNjE1IEtvL2Jlbmhhdm4gViwgRGFubWFyayIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJIZWJyZXciCit0ZXJyaXRvcnkgICJJc3JhZWwiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA2LTI5IgorJQorY2F0ZWdvcnkgICJoZV9JTDoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJoZV9JTDoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJoZV9JTDoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImhlX0lMOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiaGVfSUw6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJoZV9JTDoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJoZV9JTDoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJoZV9JTDoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJoZV9JTDoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImhlX0lMOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiaGVfSUw6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiaTE4biIKKwordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICI8VTAwNDk+PFUwMDRDPjxVMDA1Mz48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgIjxVMDVFOT48VTA1RDc+IgorbW9uX2RlY2ltYWxfcG9pbnQgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgMgorZnJhY19kaWdpdHMgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgMQorbl9jc19wcmVjZWRlcyAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgMQorcF9zaWduX3Bvc24gICAgICAgMgorbl9zaWduX3Bvc24gICAgICAgMgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgIjxVMDAyQz4iCitncm91cGluZyAgICAgICAgICAzOzMKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDVEMD48VTAwMjc+IjsiPFUwNUQxPjxVMDAyNz4iOyI8VTA1RDI+PFUwMDI3PiI7LworICAgICAgICAiPFUwNUQzPjxVMDAyNz4iOyI8VTA1RDQ+PFUwMDI3PiI7IjxVMDVENT48VTAwMjc+IjsvCisJIjxVMDVFOT48VTAwMjc+IgorZGF5ICAgICAiPFUwNUU4PjxVMDVEMD48VTA1RTk+PFUwNUQ1PjxVMDVERj4iOy8KKyAgICAgICAgIjxVMDVFOT48VTA1RTA+PFUwNUQ5PiI7LworICAgICAgICAiPFUwNUU5PjxVMDVEQz48VTA1RDk+PFUwNUU5PjxVMDVEOT4iOy8KKyAgICAgICAgIjxVMDVFOD48VTA1RDE+PFUwNUQ5PjxVMDVFMj48VTA1RDk+IjsvCisgICAgICAgICI8VTA1RDc+PFUwNURFPjxVMDVEOT48VTA1RTk+PFUwNUQ5PiI7LworICAgICAgICAiPFUwNUU5PjxVMDVEOT48VTA1RTk+PFUwNUQ5PiI7LworICAgICAgICAiPFUwNUU5PjxVMDVEMT48VTA1RUE+IgorbW9uICAgICAiPFUwNUQ5PjxVMDVFMD48VTA1RDU+PFUwNUQwPjxVMDVFOD4iOy8KKyAgICAgICAgIjxVMDVFND48VTA1RDE+PFUwNUU4PjxVMDVENT48VTA1RDA+PFUwNUU4PiI7LworICAgICAgICAiPFUwNURFPjxVMDVFOD48VTA1RTU+IjsvCisgICAgICAgICI8VTA1RDA+PFUwNUU0PjxVMDVFOD48VTA1RDk+PFUwNURDPiI7LworICAgICAgICAiPFUwNURFPjxVMDVEMD48VTA1RDk+IjsvCisgICAgICAgICI8VTA1RDk+PFUwNUQ1PjxVMDVFMD48VTA1RDk+IjsvCisgICAgICAgICI8VTA1RDk+PFUwNUQ1PjxVMDVEQz48VTA1RDk+IjsvCisgICAgICAgICI8VTA1RDA+PFUwNUQ1PjxVMDVEMj48VTA1RDU+PFUwNUUxPjxVMDVEOD4iOy8KKyAgICAgICAgIjxVMDVFMT48VTA1RTQ+PFUwNUQ4PjxVMDVERT48VTA1RDE+PFUwNUU4PiI7LworICAgICAgICAiPFUwNUQwPjxVMDVENT48VTA1RTc+PFUwNUQ4PjxVMDVENT48VTA1RDE+PFUwNUU4PiI7LworICAgICAgICAiPFUwNUUwPjxVMDVENT48VTA1RDE+PFUwNURFPjxVMDVEMT48VTA1RTg+IjsvCisgICAgICAgICI8VTA1RDM+PFUwNUU2PjxVMDVERT48VTA1RDE+PFUwNUU4PiIKK2FibW9uICAgIjxVMDVEOT48VTA1RTA+PFUwNUQ1PiI7IjxVMDVFND48VTA1RDE+PFUwNUU4PiI7LworICAgICAgICAiPFUwNURFPjxVMDVFOD48VTA1RTU+IjsiPFUwNUQwPjxVMDVFND48VTA1RTg+IjsvCisgICAgICAgICI8VTA1REU+PFUwNUQwPjxVMDVEOT4iOyI8VTA1RDk+PFUwNUQ1PjxVMDVFMD4iOy8KKyAgICAgICAgIjxVMDVEOT48VTA1RDU+PFUwNURDPiI7IjxVMDVEMD48VTA1RDU+PFUwNUQyPiI7LworICAgICAgICAiPFUwNUUxPjxVMDVFND48VTA1RDg+IjsiPFUwNUQwPjxVMDVENT48VTA1RTc+IjsvCisgICAgICAgICI8VTA1RTA+PFUwNUQ1PjxVMDVEMT4iOyI8VTA1RDM+PFUwNUU2PjxVMDVERT4iCitkX3RfZm10ICI8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYxPiIKK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNzk+IgordF9mbXQgICAiPFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4iCithbV9wbSAgICI8VTAwNDE+PFUwMDREPiI7IjxVMDA1MD48VTAwNEQ+IgordF9mbXRfYW1wbSAgIjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNTA+IgorZGF0ZV9mbXQgICAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworTENfTUVTU0FHRVMKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDU5PjxVMDA3OT48VTA1REI+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNEU+PFUwMDZFPjxVMDVEQz48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfUEFQRVIKKyUgRklYTUUKK2hlaWdodCAgIDI5NworJSBGSVhNRQord2lkdGggICAgMjEwCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzOT48VTAwMzc+PFUwMDMyPiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKKyUgRklYTUUKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgIjxVMDA0OT48VTAwNEM+IgorY291bnRyeV9hYjMgIjxVMDA0OT48VTAwNTM+PFUwMDUyPiIKK2NvdW50cnlfbnVtIDM3NgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2hpX0lOIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvaGlfSU4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ2NDRiYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2hpX0lOCkBAIC0wLDAgKzEsMjE3IEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKyUgSGluZGkgbGFuZ3VhZ2UgbG9jYWxlIGZvciBJbmRpYS4KKyUgQ29udHJpYnV0ZWQgYnkgS2VudGFyb2ggTm9qaSA8a25vamlAanAuaWJtLmNvbT4gYW5kCislIFRldHN1amkgT3JpdGEgPG9yaXRhQGpwLmlibS5jb20+LgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiSGluZGkgbGFuZ3VhZ2UgbG9jYWxlIGZvciBJbmRpYSIKK3NvdXJjZSAgICAgIklCTSBHbG9iYWxpemF0aW9uIENlbnRlciBvZiBDb21wZXRlbmN5LCBZYW1hdG8gU29mdHdhcmUgTGFib3JhdG9yeSIKK2FkZHJlc3MgICAgIjE2MjMtMTQsIFNoaW1vdHN1cnVtYSwgWWFtYXRvLXNoaSwgS2FuYWdhd2Eta2VuLCAyNDItODUwMiwgSmFwYW4iCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiSGluZGkiCit0ZXJyaXRvcnkgICJJbmRpYSIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDctMjEiCislCitjYXRlZ29yeSAgImhpX0lOOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImhpX0lOOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImhpX0lOOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiaGlfSU46MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJoaV9JTjoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImhpX0lOOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImhpX0lOOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImhpX0lOOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImhpX0lOOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiaGlfSU46MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJoaV9JTjoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorCislIENvcHkgdGhlIHRlbXBsYXRlIGZyb20gSVNPL0lFQyAxNDY1MQorY29weSAiaXNvMTQ2NTFfdDEiCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIHRoZSBMQ19NT05FVEFSWSBjYXRlZ29yeS4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS9KYXZhCislCitpbnRfY3Vycl9zeW1ib2wgICAgICAgIjxVMDA0OT48VTAwNEU+PFUwMDUyPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgIjxVMDkzMD48VTA5NDI+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgIDMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAxCislCitFTkQgTENfTU9ORVRBUlkKKworCitMQ19OVU1FUklDCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTlVNRVJJQyAgY2F0ZWdvcnkuCislCitkZWNpbWFsX3BvaW50ICAgICAgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAiPFUwMDJDPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgMworJQorRU5EIExDX05VTUVSSUMKKworCitMQ19USU1FCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfVElNRSBjYXRlZ29yeS4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS9KYXZhCislCislIEFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZXMgKCVhKQorYWJkYXkgICAgICAgIjxVMDkzMD48VTA5MzU+PFUwOTNGPjxVMDAyMD4iOy8KKyAgICAgICAgICAgICI8VTA5Mzg+PFUwOTRCPjxVMDkyRT48VTAwMjA+IjsvCisgICAgICAgICAgICAiPFUwOTJFPjxVMDkwMj48VTA5MTc+PFUwOTMyPjxVMDAyMD4iOy8KKyAgICAgICAgICAgICI8VTA5MkM+PFUwOTQxPjxVMDkyNz48VTAwMjA+IjsvCisgICAgICAgICAgICAiPFUwOTE3PjxVMDk0MT48VTA5MzA+PFUwOTQxPjxVMDAyMD4iOy8KKyAgICAgICAgICAgICI8VTA5MzY+PFUwOTQxPjxVMDkxNT48VTA5NEQ+PFUwOTMwPjxVMDAyMD4iOy8KKyAgICAgICAgICAgICI8VTA5MzY+PFUwOTI4PjxVMDkzRj48VTAwMjA+IgorJQorJSBGdWxsIHdlZWtkYXkgbmFtZXMgKCVBKQorZGF5ICAgICAgICAgIjxVMDkzMD48VTA5MzU+PFUwOTNGPjxVMDkzNT48VTA5M0U+PFUwOTMwPjxVMDAyMD4iOy8KKyAgICAgICAgICAgICI8VTA5Mzg+PFUwOTRCPjxVMDkyRT48VTA5MzU+PFUwOTNFPjxVMDkzMD48VTAwMjA+IjsvCisgICAgICAgICAgICAiPFUwOTJFPjxVMDkwMj48VTA5MTc+PFUwOTMyPjxVMDkzNT48VTA5M0U+PFUwOTMwPjxVMDAyMD4iOy8KKyAgICAgICAgICAgICI8VTA5MkM+PFUwOTQxPjxVMDkyNz48VTA5MzU+PFUwOTNFPjxVMDkzMD48VTAwMjA+IjsvCisgICAgICAgICAgICAiPFUwOTE3PjxVMDk0MT48VTA5MzA+PFUwOTQxPjxVMDkzNT48VTA5M0U+PFUwOTMwPjxVMDAyMD4iOy8KKyAgICAgICAgICAgICI8VTA5MzY+PFUwOTQxPjxVMDkxNT48VTA5NEQ+PFUwOTMwPjxVMDkzNT48VTA5M0U+PFUwOTMwPjxVMDAyMD4iOy8KKyAgICAgICAgICAgICI8VTA5MzY+PFUwOTI4PjxVMDkzRj48VTA5MzU+PFUwOTNFPjxVMDkzMD48VTAwMjA+IgorJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCithYm1vbiAgICAgICAiPFUwOTFDPjxVMDkyOD48VTA5MzU+PFUwOTMwPjxVMDk0MD4iOy8KKyAgICAgICAgICAgICI8VTA5MkI+PFUwOTNDPjxVMDkzMD48VTA5MzU+PFUwOTMwPjxVMDk0MD4iOy8KKyAgICAgICAgICAgICI8VTA5MkU+PFUwOTNFPjxVMDkzMD48VTA5NEQ+PFUwOTFBPiI7LworICAgICAgICAgICAgIjxVMDkwNT48VTA5MkE+PFUwOTREPjxVMDkzMD48VTA5NDc+PFUwOTMyPiI7LworICAgICAgICAgICAgIjxVMDkyRT48VTA5MDg+IjsiPFUwOTFDPjxVMDk0Mj48VTA5Mjg+IjsvCisgICAgICAgICAgICAiPFUwOTFDPjxVMDk0MT48VTA5MzI+PFUwOTNFPjxVMDkwOD4iOy8KKyAgICAgICAgICAgICI8VTA5MDU+PFUwOTE3PjxVMDkzOD48VTA5NEQ+PFUwOTI0PiI7LworICAgICAgICAgICAgIjxVMDkzOD48VTA5M0Y+PFUwOTI0PjxVMDkyRT48VTA5NEQ+PFUwOTJDPjxVMDkzMD4iOy8KKyAgICAgICAgICAgICI8VTA5MDU+PFUwOTE1PjxVMDk0RD48VTA5MUY+PFUwOTQyPjxVMDkyQz48VTA5MzA+IjsvCisgICAgICAgICAgICAiPFUwOTI4PjxVMDkzNT48VTA5MkU+PFUwOTREPjxVMDkyQz48VTA5MzA+IjsvCisgICAgICAgICAgICAiPFUwOTI2PjxVMDkzRj48VTA5Mzg+PFUwOTJFPjxVMDk0RD48VTA5MkM+PFUwOTMwPiIKKyUKKyUgRnVsbCBtb250aCBuYW1lcyAoJUIpCittb24gICAgICAgICAiPFUwOTFDPjxVMDkyOD48VTA5MzU+PFUwOTMwPjxVMDk0MD4iOy8KKyAgICAgICAgICAgICI8VTA5MkI+PFUwOTNDPjxVMDkzMD48VTA5MzU+PFUwOTMwPjxVMDk0MD4iOy8KKyAgICAgICAgICAgICI8VTA5MkU+PFUwOTNFPjxVMDkzMD48VTA5NEQ+PFUwOTFBPiI7LworICAgICAgICAgICAgIjxVMDkwNT48VTA5MkE+PFUwOTREPjxVMDkzMD48VTA5NDc+PFUwOTMyPiI7LworICAgICAgICAgICAgIjxVMDkyRT48VTA5MDg+IjsiPFUwOTFDPjxVMDk0Mj48VTA5Mjg+IjsvCisgICAgICAgICAgICAiPFUwOTFDPjxVMDk0MT48VTA5MzI+PFUwOTNFPjxVMDkwOD4iOy8KKyAgICAgICAgICAgICI8VTA5MDU+PFUwOTE3PjxVMDkzOD48VTA5NEQ+PFUwOTI0PiI7LworICAgICAgICAgICAgIjxVMDkzOD48VTA5M0Y+PFUwOTI0PjxVMDkyRT48VTA5NEQ+PFUwOTJDPjxVMDkzMD4iOy8KKyAgICAgICAgICAgICI8VTA5MDU+PFUwOTE1PjxVMDk0RD48VTA5MUY+PFUwOTQyPjxVMDkyQz48VTA5MzA+IjsvCisgICAgICAgICAgICAiPFUwOTI4PjxVMDkzNT48VTA5MkU+PFUwOTREPjxVMDkyQz48VTA5MzA+IjsvCisgICAgICAgICAgICAiPFUwOTI2PjxVMDkzRj48VTA5Mzg+PFUwOTJFPjxVMDk0RD48VTA5MkM+PFUwOTMwPiIKKyUKKyUgRXF1aXZhbGVudCBvZiBBTSBQTQorYW1fcG0gICAgICAgIjxVMDkyQT48VTA5NDI+PFUwOTMwPjxVMDk0RD48VTA5MzU+PFUwOTNFPjxVMDkzOT48VTA5NEQ+PFUwOTI4PiI7LworICAgICAgICAgICAgIjxVMDkwNT48VTA5MkE+PFUwOTMwPjxVMDkzRT48VTA5Mzk+PFUwOTREPjxVMDkyOD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJUEgJWQgJWIgJVklSTolTTolUyAgJVoKK2RfdF9mbXQgICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPi8KKzxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT4vCis8VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbgorJSAlQSAlZCAlYiAlWQorZF9mbXQgICAgICAgIjxVMDAyNT48VTAwNDE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+LworPFUwMDIwPjxVMDAyNT48VTAwNTk+IgorJQorJSBBcHByb3ByaWF0ZSB0aW1lIHJlcHJlc2VudGF0aW9uCislICVJOiVNOiVTICAlWgordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+LworPFUwMDIwPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKKyUgQXBwcm9wcmlhdGUgMTIgaCB0aW1lIHJlcHJlc2VudGF0aW9uICglcikKK3RfZm10X2FtcG0gICI8VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPi8KKzxVMDAyMD48VTAwMjU+PFUwMDcwPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKK2RhdGVfZm10ICAgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKKworTENfTUVTU0FHRVMKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKKworTENfUEFQRVIKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfUEFQRVIgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KK2hlaWdodCAgICAgIDI5Nword2lkdGggICAgICAgMjEwCisKK0VORCBMQ19QQVBFUgorCisKK0xDX05BTUUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUgTENfTkFNRSBjYXRlZ29yeS4KKyUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDcwPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNjc+IgorbmFtZV9nZW4gICAgIiIKK25hbWVfbXIgICAgICI8VTAwNEQ+PFUwMDcyPjxVMDAyRT4iCituYW1lX21ycyAgICAiPFUwMDREPjxVMDA3Mj48VTAwNzM+PFUwMDJFPiIKK25hbWVfbWlzcyAgICI8VTAwNEQ+PFUwMDY5PjxVMDA3Mz48VTAwNzM+PFUwMDJFPiIKK25hbWVfbXMgICAgICI8VTAwNEQ+PFUwMDczPjxVMDAyRT4iCisKK0VORCBMQ19OQU1FCisKKworTENfQUREUkVTUworJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19BRERSRVNTCitwb3N0YWxfZm10ICAiPFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3Mj4iCisKK2NvdW50cnlfYWIyICI8VTAwNDk+PFUwMDRFPiIKK2NvdW50cnlfYWIzICI8VTAwNDk+PFUwMDRFPjxVMDA0ND4iCitjb3VudHJ5X251bSAzNTYKK0VORCBMQ19BRERSRVNTCisKKworTENfVEVMRVBIT05FCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX1RFTEVQSE9ORQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgordGVsX2ludF9mbXQgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwM0I+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDNCPjxVMDAyNT48VTAwNkM+IgoraW50X3ByZWZpeCAiPFUwMDM5PjxVMDAzMT4iCitpbnRfc2VsZWN0ICI8VTAwMzA+PFUwMDMwPiIKK0VORCBMQ19URUxFUEhPTkUKKworCitMQ19NRUFTVVJFTUVOVAorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19NRUFTVVJFTUVOVAorJSBjYXRlZ29yeSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorbWVhc3VyZW1lbnQgMQorRU5EIExDX01FQVNVUkVNRU5UCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ocl9IUiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2hyX0hSCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZjFjYzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ocl9IUgpAQCAtMCwwICsxLDIyNTAgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBDcm9hdGlhbiBMYW5ndWFnZSBMb2NhbGUgZm9yIENyb2F0aWEKKyUgU291cmNlOiBDQVJOZXQvTVpUCislIEFkZHJlc3M6IEpvc2lwYSBNYXJvaG5pY2EgYmIKKyUgICAgWmFncmViLCBIcnZhdHNrYQorJSBDb250YWN0OiBUb21pc2xhdiBWdWplYworJSBFbWFpbDogdHZ1amVjQHJlZGhhdC5jb20KKyUgVGVsOiArMzg1IC0gMSAtIDYxNjQxOTQKKyUgRmF4OiArMzg1IC0gMSAtIDYxNjQzOTUKKyUgTGFuZ3VhZ2U6IGhyCislIFRlcnJpdG9yeTogSFIKKyUgUmV2aXNpb246IDUuMAorJSBEYXRlOiAxOTk5LTAzLTAxCislIEFwcGxpY2F0aW9uOiBnZW5lcmFsCislIFVzZXJzOiBnZW5lcmFsCislIFJlcGVydG9pcmVtYXA6IG1uZW1vbmljLmRzCislIENoYXJzZXQ6IElTTy04ODU5LTIKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkNyb2F0aWFuIGxvY2FsZSBmb3IgQ3JvYXRpYSIKK3NvdXJjZSAgICAgIkNBUk5ldC9NWlQiCithZGRyZXNzICAgICJKb3NpcGEgTWFyb2huaWNhIGJiLCBaYWdyZWIsIEhydmF0c2thIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkNyb2F0aWFuIgordGVycml0b3J5ICAiQ3JvYXRpYSIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjkiCislCitjYXRlZ29yeSAgImhyX0hSOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImhyX0hSOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImhyX0hSOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiaHJfSFI6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJocl9IUjoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImhyX0hSOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImhyX0hSOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImhyX0hSOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImhyX0hSOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiaHJfSFI6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJocl9IUjoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKK2NvbGxhdGluZy1lbGVtZW50IDxELVo8PiBmcm9tICI8VTAwNDQ+PFUwMTdEPiIKK2NvbGxhdGluZy1lbGVtZW50IDxELXo8PiBmcm9tICI8VTAwNDQ+PFUwMTdFPiIKK2NvbGxhdGluZy1lbGVtZW50IDxkLVo8PiBmcm9tICI8VTAwNjQ+PFUwMTdEPiIKK2NvbGxhdGluZy1lbGVtZW50IDxkLXo8PiBmcm9tICI8VTAwNjQ+PFUwMTdFPiIKK2NvbGxhdGluZy1lbGVtZW50IDxMLUo+IGZyb20gIjxVMDA0Qz48VTAwNEE+IgorY29sbGF0aW5nLWVsZW1lbnQgPEwtaj4gZnJvbSAiPFUwMDRDPjxVMDA2QT4iCitjb2xsYXRpbmctZWxlbWVudCA8bC1KPiBmcm9tICI8VTAwNkM+PFUwMDRBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxsLWo+IGZyb20gIjxVMDA2Qz48VTAwNkE+IgorY29sbGF0aW5nLWVsZW1lbnQgPE4tSj4gZnJvbSAiPFUwMDRFPjxVMDA0QT4iCitjb2xsYXRpbmctZWxlbWVudCA8Ti1qPiBmcm9tICI8VTAwNEU+PFUwMDZBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxuLUo+IGZyb20gIjxVMDA2RT48VTAwNEE+IgorY29sbGF0aW5nLWVsZW1lbnQgPG4taj4gZnJvbSAiPFUwMDZFPjxVMDA2QT4iCisKKyUgQmFzZSBjb2xsYXRpb24gc2NoZW1lOiAxOTk0LTAzLTIyCisKKyUgT3JkZXJpbmcgYWxnb3JpdGhtOgorJSAgMS4gU3BhY2VzIGFuZCBoeXBoZW4gKGJ1dCBub3Qgc29mdAorJSAgICAgaHlwaGVuKSBiZWZvcmUgcHVuY3R1YXRpb24KKyUgICAgIGNoYXJhY3RlcnMsIHB1bmN0dWF0aW9uIGNoYXJhY3RlcnMKKyUgICAgIGJlZm9yZSBudW1iZXJzLAorJSAgICAgbnVtYmVycyBiZWZvcmUgbGV0dGVycy4KKyUgIDIuIExldHRlcnMgd2l0aCBkaWFjcml0aWNhbCBtYXJrcyBhcmUKKyUgICAgIG1lbWJlcnMgb2YgZXF1aXZhbGVuY2UgY2xhc3NlcworJSAgMy4gQSBkaXN0aW5jdGlvbiBpcyBtYWRlIHdpdGggcmVnYXJkcworJSAgICAgdG8gY2FzZSBhcyBub3RlZCBiZWxvdy4KKyUgIDQuIFNwZWNpYWwgY2hhcmFjdGVycyBhcmUgaWdub3JlZAorJSAgICAgd2hlbiBjb21wYXJpbmcgbGV0dGVycywgYnV0IHRoZW4KKyUgICAgIHRoZXkgYXJlIGNvbnNpZGVyZWQKKyUgIDUuIFRoZSBhbHBoYWJldHMgYXJlIHNvcnRlZCBpbiBvcmRlcgorJSAgICAgb2YgZmlyc3QgYXBwZWFyYW5jZSBpbiBJU08gMTA2NDY6CislICAgICBMYXRpbiwgR3JlZWssIEN5cmlsbGljLCBldGMuCislCislIEFjY29yZGluZyB0byBHcmVlayBzcGVjaWZpY2F0aW9ucywKKyUgdGhlIHN0ZXBzIDIuIGFuZCAzLiBhYm92ZSBhcmUgcmV2ZXJzZWQKKyUgZm9yIHRoZSBHcmVlayBzY3JpcHQKKworJSBjb2xsYXRpbmcgc3ltYm9scworCislIFRoZSBjb2xsYXRpbmcgc3ltYm9sIG5hbWluZyBpcworJSBtb3N0bHkgdGFrZW4gZnJvbSBJU08gMTA2NDYtMSwKKyUgZm9yIGV4YW1wbGUgdGhlIGNhc2UgYW5kIGFjY2VudAorJSBuYW1lcyBhcmUgZnJvbSB0aGlzIHN0YW5kYXJkLgorCitjb2xsYXRpbmctc3ltYm9sIDxDQVBJVEFMPgorY29sbGF0aW5nLXN5bWJvbCA8Q0FQSVRBTC1TTUFMTD4KK2NvbGxhdGluZy1zeW1ib2wgPFNNQUxMLUNBUElUQUw+Citjb2xsYXRpbmctc3ltYm9sIDxTTUFMTD4KKworJSA8Q0FQSVRBTC1TTUFMTD4gYW5kIDxTTUFMTC1DQVBJVEFMPgorJSBhcmUgZm9yIGNhc2VzIGxpa2UgRGFuaXNoIDxVMDA0MT48VTAwNjE+CislIGFuZCBTcGFuaXNoIDxVMDA0Mz48VTAwNjg+IGJlaW5nIHRyZWF0ZWQKKyUgYXMgb25lIGxldHRlci4KKworJSBUaGUgPGE4PiAuLi4uLi4gPHo4PiBjb2xsYXRpbmcKKyUgc3ltYm9scyBoYXZlIGRlZmluZWQgd2VpZ2h0cyBhcworJSB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gYSBncm91cCBvZgorJSBMYXRpbiBsZXR0ZXJzLiBUaGV5IGFyZSB1c2VkCislIHRvIHNwZWNpZnkgZGVsdGFzIGJ5IGxvY2FsZXMgdXNpbmcKKyUgYSBsb2NhbGUgYXMgdGhlIGRlZmF1bHQgb3JkZXJpbmcKKyUgYW5kIGJ5ICJyZXBsYWNlLWFmdGVyIiBzdGF0ZW1lbnRzCislIHNwZWNpZnlpbmcgdGhlIGNoYW5nZWQgcGxhY2VtZW50CislIGluIGFuIG9yZGVyaW5nIG9mIGEgY2hhcmFjdGVyLgorCitjb2xsYXRpbmctc3ltYm9sIDxhOD4KK2NvbGxhdGluZy1zeW1ib2wgPGI4PgorY29sbGF0aW5nLXN5bWJvbCA8Yzg+Citjb2xsYXRpbmctc3ltYm9sIDxkOD4KK2NvbGxhdGluZy1zeW1ib2wgPGU4PgorY29sbGF0aW5nLXN5bWJvbCA8Zjg+Citjb2xsYXRpbmctc3ltYm9sIDxnOD4KK2NvbGxhdGluZy1zeW1ib2wgPGg4PgorY29sbGF0aW5nLXN5bWJvbCA8aTg+Citjb2xsYXRpbmctc3ltYm9sIDxqOD4KK2NvbGxhdGluZy1zeW1ib2wgPGs4PgorY29sbGF0aW5nLXN5bWJvbCA8bDg+Citjb2xsYXRpbmctc3ltYm9sIDxtOD4KK2NvbGxhdGluZy1zeW1ib2wgPG44PgorY29sbGF0aW5nLXN5bWJvbCA8bzg+Citjb2xsYXRpbmctc3ltYm9sIDxwOD4KK2NvbGxhdGluZy1zeW1ib2wgPHE4PgorY29sbGF0aW5nLXN5bWJvbCA8cjg+Citjb2xsYXRpbmctc3ltYm9sIDxzOD4KK2NvbGxhdGluZy1zeW1ib2wgPHQ4PgorY29sbGF0aW5nLXN5bWJvbCA8dTg+Citjb2xsYXRpbmctc3ltYm9sIDx2OD4KK2NvbGxhdGluZy1zeW1ib2wgPHc4PgorY29sbGF0aW5nLXN5bWJvbCA8eDg+Citjb2xsYXRpbmctc3ltYm9sIDx5OD4KK2NvbGxhdGluZy1zeW1ib2wgPHo4PgorCitjb2xsYXRpbmctc3ltYm9sIDxOT05FPgorY29sbGF0aW5nLXN5bWJvbCA8QUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxBQ1VURStET1Q+Citjb2xsYXRpbmctc3ltYm9sIDxHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPERPVUJMRS1HUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkUrQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxCUkVWRStHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFK01BQ1JPTj4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFK0hPT0s+Citjb2xsYXRpbmctc3ltYm9sIDxCUkVWRStUSUxERT4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFK0RPVC1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFLUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8SU5WRVJURUQtQlJFVkU+Citjb2xsYXRpbmctc3ltYm9sIDxDSVJDVU1GTEVYPgorY29sbGF0aW5nLXN5bWJvbCA8Q0lSQ1VNRkxFWCtBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPENJUkNVTUZMRVgrR1JBVkU+Citjb2xsYXRpbmctc3ltYm9sIDxDSVJDVU1GTEVYK0hPT0s+Citjb2xsYXRpbmctc3ltYm9sIDxDSVJDVU1GTEVYK1RJTERFPgorY29sbGF0aW5nLXN5bWJvbCA8Q0lSQ1VNRkxFWCtET1QtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxDQVJPTj4KK2NvbGxhdGluZy1zeW1ib2wgPENBUk9OK0RJQUVSRVNJUz4KK2NvbGxhdGluZy1zeW1ib2wgPENBUk9OK0RPVD4KK2NvbGxhdGluZy1zeW1ib2wgPFJJTkc+Citjb2xsYXRpbmctc3ltYm9sIDxSSU5HK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8UklORy1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPERJQUVSRVNJUz4KK2NvbGxhdGluZy1zeW1ib2wgPERJQUVSRVNJUytNQUNST04+Citjb2xsYXRpbmctc3ltYm9sIDxESUFFUkVTSVMrQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxESUFFUkVTSVMrR1JBVkU+Citjb2xsYXRpbmctc3ltYm9sIDxESUFFUkVTSVMrQ0FST04+Citjb2xsYXRpbmctc3ltYm9sIDxET1VCTEUtQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxIT09LPgorY29sbGF0aW5nLXN5bWJvbCA8VElMREU+Citjb2xsYXRpbmctc3ltYm9sIDxUSUxERStBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPFRJTERFK0RJQUVSRVNJUz4KK2NvbGxhdGluZy1zeW1ib2wgPFRJTERFLUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8RE9UPgorY29sbGF0aW5nLXN5bWJvbCA8RE9ULUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8RE9UK0RPVC1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPFNUUk9LRT4KK2NvbGxhdGluZy1zeW1ib2wgPFNUUk9LRStBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPENFRElMTEE+Citjb2xsYXRpbmctc3ltYm9sIDxDRURJTExBK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8Q0VESUxMQStHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPENFRElMTEErQlJFVkU+Citjb2xsYXRpbmctc3ltYm9sIDxPR09ORUs+Citjb2xsYXRpbmctc3ltYm9sIDxPR09ORUsrTUFDUk9OPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0dSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0RJQUVSRVNJUz4KK2NvbGxhdGluZy1zeW1ib2wgPE1BQ1JPTitESUFFUkVTSVMtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04rRE9UPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0RPVC1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPE1BQ1JPTitDSVJDVU1GTEVYPgorY29sbGF0aW5nLXN5bWJvbCA8TElORS1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPEhPUk4+Citjb2xsYXRpbmctc3ltYm9sIDxIT1JOK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8SE9STitHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPEhPUk4rSE9PSz4KK2NvbGxhdGluZy1zeW1ib2wgPEhPUk4rVElMREU+Citjb2xsYXRpbmctc3ltYm9sIDxIT1JOK0RPVC1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPFBSRUNFREVELUJZLUFQT1NUUk9QSEU+Citjb2xsYXRpbmctc3ltYm9sIDxHUkVFSz4KK2NvbGxhdGluZy1zeW1ib2wgPFRPTk9TPgorY29sbGF0aW5nLXN5bWJvbCA8RElBTFlUSUNBPgorY29sbGF0aW5nLXN5bWJvbCA8RElBTFlUSUNBK1RPTk9TPgorY29sbGF0aW5nLXN5bWJvbCA8Q1lSSUxMSUM+Citjb2xsYXRpbmctc3ltYm9sIDxISVJBR0FOQT4KK2NvbGxhdGluZy1zeW1ib2wgPEtBVEFLQU5BPgorY29sbGF0aW5nLXN5bWJvbCA8U1BFQ0lBTD4KKworJSBsZXR0ZXI7YWNjZW50O2Nhc2U7c3BlY2lhbHMKKworb3JkZXJfc3RhcnQgZm9yd2FyZDtiYWNrd2FyZC8KKyAgICAgICAgICAgIDtmb3J3YXJkO3Bvc2l0aW9uCisKKyUgPENBUElUQUw+IG9yIDxTTUFMTD4gbGV0dGVycyBmaXJzdDoKKworPFNNQUxMPgorPFNNQUxMLUNBUElUQUw+Cis8Q0FQSVRBTC1TTUFMTD4KKzxDQVBJVEFMPgorCislIEFjY2VudHM6CisKKzxOT05FPgorPEFDVVRFPgorPEFDVVRFK0RPVD4KKzxHUkFWRT4KKzxET1VCTEUtR1JBVkU+Cis8QlJFVkU+Cis8QlJFVkUrQUNVVEU+Cis8QlJFVkUrR1JBVkU+Cis8QlJFVkUrTUFDUk9OPgorPEJSRVZFK0hPT0s+Cis8QlJFVkUrVElMREU+Cis8QlJFVkUrRE9ULUJFTE9XPgorPEJSRVZFLUJFTE9XPgorPElOVkVSVEVELUJSRVZFPgorPENJUkNVTUZMRVg+Cis8Q0lSQ1VNRkxFWCtBQ1VURT4KKzxDSVJDVU1GTEVYK0dSQVZFPgorPENJUkNVTUZMRVgrSE9PSz4KKzxDSVJDVU1GTEVYK1RJTERFPgorPENJUkNVTUZMRVgrRE9ULUJFTE9XPgorPENBUk9OPgorPENBUk9OK0RJQUVSRVNJUz4KKzxDQVJPTitET1Q+Cis8UklORz4KKzxSSU5HK0FDVVRFPgorPFJJTkctQkVMT1c+Cis8RElBRVJFU0lTPgorPERJQUVSRVNJUytNQUNST04+Cis8RElBRVJFU0lTK0FDVVRFPgorPERJQUVSRVNJUytHUkFWRT4KKzxESUFFUkVTSVMrQ0FST04+Cis8RE9VQkxFLUFDVVRFPgorPEhPT0s+Cis8VElMREU+Cis8VElMREUrQUNVVEU+Cis8VElMREUrRElBRVJFU0lTPgorPFRJTERFLUJFTE9XPgorPERPVD4KKzxET1QtQkVMT1c+Cis8RE9UK0RPVC1CRUxPVz4KKzxTVFJPS0U+Cis8U1RST0tFK0FDVVRFPgorPENFRElMTEE+Cis8Q0VESUxMQStBQ1VURT4KKzxDRURJTExBK0dSQVZFPgorPENFRElMTEErQlJFVkU+Cis8T0dPTkVLPgorPE9HT05FSytNQUNST04+Cis8TUFDUk9OPgorPE1BQ1JPTitBQ1VURT4KKzxNQUNST04rR1JBVkU+Cis8TUFDUk9OK0RJQUVSRVNJUz4KKzxNQUNST04rRElBRVJFU0lTLUJFTE9XPgorPE1BQ1JPTitET1Q+Cis8TUFDUk9OK0RPVC1CRUxPVz4KKzxNQUNST04rQ0lSQ1VNRkxFWD4KKzxMSU5FLUJFTE9XPgorPEhPUk4+Cis8SE9STitBQ1VURT4KKzxIT1JOK0dSQVZFPgorPEhPUk4rSE9PSz4KKzxIT1JOK1RJTERFPgorPEhPUk4rRE9ULUJFTE9XPgorPFBSRUNFREVELUJZLUFQT1NUUk9QSEU+Cis8R1JFRUs+Cis8VE9OT1M+Cis8RElBTFlUSUNBPgorPERJQUxZVElDQStUT05PUz4KKzxDWVJJTExJQz4KKzxISVJBR0FOQT4KKzxLQVRBS0FOQT4KKzxTUEVDSUFMPgorCis8VTAwQTA+CTxVMDBBMD47PFUwMEEwPjs8VTAwQTA+O0lHTk9SRQorPFUwMDIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjA+Cis8VTAwMDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwOT4KKzxVMDAwQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBCPgorPFUwMDBEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMEQ+Cis8VTAwMEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwQT4KKzxVMDAwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBDPgorPFUwMDVGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNUY+Cis8VTAwQUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBRj4KKzxVMDBBRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEFEPgorPFUwMDJEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMkQ+Cis8VTAwMkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyQz4KKzxVMDAzQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDNCPgorPFUwMDNBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwM0E+Cis8VTAwMjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyMT4KKzxVMDBBMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEExPgorPFUwMDNGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwM0Y+Cis8VTAwQkY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCRj4KKzxVMDAyRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDJGPgorPFUwMDJFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMkU+Cis8VTAwQjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCND4KKzxVMDA2MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDYwPgorPFUwMDVFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNUU+Cis8VTAwQTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBOD4KKzxVMDA3RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDdFPgorPFUwMEI3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjc+Cis8VTAwQjg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCOD4KKzxVMDAyNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDI3PgorPFUyMDE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTg+Cis8VTIwMTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxOT4KKzxVMDAyMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDIyPgorPFUyMDFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMUM+Cis8VTIwMUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxRD4KKzxVMDBBQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEFCPgorPFUwMEJCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQkI+Cis8VTAwMjg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyOD4KKzxVMjA3RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDdEPgorPFUwMDI5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjk+Cis8VTIwN0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA3RT4KKzxVMDA1Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDVCPgorPFUwMDVEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNUQ+Cis8VTAwN0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA3Qj4KKzxVMDA3RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDdEPgorPFUwMEE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTc+Cis8VTAwQjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCNj4KKzxVMDBBOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEE5PgorPFUwMEFFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQUU+Cis8VTAwNDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA0MD4KKzxVMDBBND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEE0PgorPFUwMEEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTI+Cis8VTAwMjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyND4KKzxVMDBBMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEEzPgorPFUwMEE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTU+Cis8VTAwMkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyQT4KKzxVMDA1Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDVDPgorPFUwMDI2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjY+Cis8VTAwMjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyMz4KKzxVMDAyNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDI1PgorPFUyMDdCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwN0I+Cis8VTAwMkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyQj4KKzxVMjA3QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDdBPgorPFUwMEIxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjE+Cis8VTAwRjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBGNz4KKzxVMDBENz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEQ3PgorPFUyMjYwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNjA+Cis8VTAwM0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAzQz4KKzxVMjI2ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjY0PgorPFUwMDNEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwM0Q+Cis8VTIyNjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2NT4KKzxVMDAzRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDNFPgorPFUwMEFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQUM+Cis8VTAwN0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA3Qz4KKzxVMDBBNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEE2PgorPFUwMEIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjA+Cis8VTAwQjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCNT4KKzxVMDJDNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkM3PgorPFUwMkQ4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAyRDg+Cis8VTAyRDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDJEOT4KKzxVMDJEQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkRBPgorPFUwMkRCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAyREI+Cis8VTAyREM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDJEQz4KKzxVMDJERD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkREPgorPFUwMzc0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzNzQ+Cis8VTAzNzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDM3NT4KKzxVMDM3QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzdBPgorPFUwMzdFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzN0U+Cis8VTAzODQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDM4ND4KKzxVMDM4NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzg1PgorPFUwMzg3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzODc+Cis8VTAzRDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDNEMD4KKzxVMUZCRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkJGPgorPFUxRkMwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGQzA+Cis8VTFGQzE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZDMT4KKzxVMUZDRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkNEPgorPFUxRkNFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGQ0U+Cis8VTFGQ0Y+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZDRj4KKzxVMUZERD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkREPgorPFUxRkRFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGREU+Cis8VTFGREY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZERj4KKzxVMUZFRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkVEPgorPFUxRkVGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGRUY+Cis8VTFGRkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZGRT4KKzxVMjAwMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDAyPgorPFUyMDAzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMDM+Cis8VTIwMDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwND4KKzxVMjAwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDA1PgorPFUyMDA2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMDY+Cis8VTIwMEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwRT4KKzxVMjAwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDBGPgorPFUyMDA5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMDk+Cis8VTIwMEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwQT4KKzxVMjAxMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDEwPgorPFUyMDEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTM+Cis8VTIwMTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxND4KKzxVMjAxNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDE1PgorPFUyMDE2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTY+Cis8VTIwMTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxNz4KKzxVMjAxQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDFBPgorPFUyMDFCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMUI+Cis8VTIwMUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxRT4KKzxVMjAxRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDFGPgorPFUyMDIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMjA+Cis8VTIwMjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAyMT4KKzxVMjIxOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjE5PgorPFUyMDI1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMjU+Cis8VTIwMjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAyNj4KKzxVMjAzMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDMwPgorPFUyMDMyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzI+Cis8VTIwMzM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzMz4KKzxVMjAzND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDM0PgorPFUyMDM1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzU+Cis8VTIwMzY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzNj4KKzxVMjAzNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDM3PgorPFUyMDM4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzg+Cis8VTIwMzk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzOT4KKzxVMjAzQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDNBPgorPFUyMDNCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwM0I+Cis8VTIwM0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzQz4KKzxVMjAzRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDNFPgorPFUyMDdDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwN0M+Cis8VTIwODA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4MD4KKzxVMjA4MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDgxPgorPFUyMDgyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODI+Cis8VTIwODM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4Mz4KKzxVMjA4ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDg0PgorPFUyMDg1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODU+Cis8VTIwODY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4Nj4KKzxVMjA4Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDg3PgorPFUyMDg4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODg+Cis8VTIwODk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4OT4KKzxVMjA4QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDhBPgorPFUyMDhCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwOEI+Cis8VTIwOEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4Qz4KKzxVMjA4RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDhEPgorPFUyMDhFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwOEU+Cis8VTIwQTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjBBMz4KKzxVMjBBND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMEE0PgorPFUyMEE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwQTc+Cis8VTIwQTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjBBOT4KKzxVMjEwMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTAzPgorPFUyMTA1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMDU+Cis8VTIxMDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjEwOT4KKzxVMjExNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTE2PgorPFUyMTE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMTc+Cis8VTIxMUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjExRT4KKzxVMjEyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTIwPgorPFUyMTIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMjI+Cis8VTIxMjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjEyNj4KKzxVMjEyQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTJCPgorPFUyMTUzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTM+Cis8VTIxNTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1ND4KKzxVMjE1NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTU1PgorPFUyMTU2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTY+Cis8VTIxNTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1Nz4KKzxVMjE1OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTU4PgorPFUyMTU5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTk+Cis8VTIxNUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1QT4KKzxVMjE2MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTYwPgorPFUyMTYxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjE+Cis8VTIxNjI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2Mj4KKzxVMjE2Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTYzPgorPFUyMTY0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjQ+Cis8VTIxNjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2NT4KKzxVMjE2Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTY2PgorPFUyMTY3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjc+Cis8VTIxNjg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2OD4KKzxVMjE2OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTY5PgorPFUyMTZBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNkE+Cis8VTIxNkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2Qj4KKzxVMjE2Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTZDPgorPFUyMTZEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNkQ+Cis8VTIxNkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2RT4KKzxVMjE2Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTZGPgorPFUyMTcwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzA+Cis8VTIxNzE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3MT4KKzxVMjE3Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTcyPgorPFUyMTczPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzM+Cis8VTIxNzQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3ND4KKzxVMjE3NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTc1PgorPFUyMTc2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzY+Cis8VTIxNzc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3Nz4KKzxVMjE3OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTc4PgorPFUyMTc5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzk+Cis8VTIxN0E+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3QT4KKzxVMjE3Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTdCPgorPFUyMTdDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxN0M+Cis8VTIxN0Q+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3RD4KKzxVMjE3RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTdFPgorPFUyMTdGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxN0Y+Cis8VTIxODA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE4MD4KKzxVMjE4MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTgxPgorPFUyMTgyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxODI+Cis8VTIxOTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5MT4KKzxVMjE5Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTkzPgorPFUyMTk0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxOTQ+Cis8VTIxOTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5NT4KKzxVMjE5Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTk2PgorPFUyMTk3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxOTc+Cis8VTIxOTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5OD4KKzxVMjE5OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTk5PgorPFUyMUE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxQTg+Cis8VTIxQzA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjFDMD4KKzxVMjFEMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMUQwPgorPFUyMUQyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxRDI+Cis8VTIxRDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjFEND4KKzxVMjIwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjAwPgorPFUyMjAyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMDI+Cis8VTIyMDM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwMz4KKzxVMjIwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjA1PgorPFUyMjA2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMDY+Cis8VTIyMDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwNz4KKzxVMjIwOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjA4PgorPFUyMjBCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMEI+Cis8VTIyMEY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwRj4KKzxVMjIxMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjExPgorPFUyMjEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMTI+Cis8VTIyMTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxMz4KKzxVMjIxND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjE0PgorPFUyMDQ0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwNDQ+Cis8VTIyMTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxNz4KKzxVMjIxOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjE4PgorPFUyMDIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMjI+Cis8VTIyMUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxQT4KKzxVMjIxRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjFEPgorPFUyMjFFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMUU+Cis8VTIyMUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxRj4KKzxVMjIyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjIwPgorPFUyMjI1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMjU+Cis8VTIyMjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyNz4KKzxVMjIyOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjI4PgorPFUyMjI5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMjk+Cis8VTIyMkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyQT4KKzxVMjIyQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjJCPgorPFUyMjJDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMkM+Cis8VTIyMkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyRT4KKzxVMjIzND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjM0PgorPFUyMjM1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMzU+Cis8VTIyMzY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIzNj4KKzxVMjIzNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjM3PgorPFUyMjNDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyM0M+Cis8VTIyM0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIzRT4KKzxVMjI0Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjQzPgorPFUyMjQ1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNDU+Cis8VTIyNDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI0OD4KKzxVMjI0Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjRDPgorPFUyMjUzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNTM+Cis8VTIyNjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2MT4KKzxVMjI2QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjZBPgorPFUyMjZCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNkI+Cis8VTIyNkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2RT4KKzxVMjI2Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjZGPgorPFUyMjgyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyODI+Cis8VTIyODM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI4Mz4KKzxVMjI4Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjg2PgorPFUyMjg3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyODc+Cis8VTIyOTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI5OT4KKzxVMjI5QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjlBPgorPFUyMkE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyQTU+Cis8VTIyQzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjJDNT4KKzxVMjJFRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMkVFPgorPFUyMzAyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMDI+Cis8VTIzMDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMwOD4KKzxVMjMwOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzA5PgorPFUyMzBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMEE+Cis8VTIzMEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMwQj4KKzxVMjMxMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzEwPgorPFUyMzEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMTI+Cis8VTIzMTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMxNT4KKzxVMjMyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzIwPgorPFUyMzIxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMjE+Cis8VTI0MjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQyMz4KKzxVMjQ0MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQwPgorPFUyNDQxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDE+Cis8VTI0NDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ0Mj4KKzxVMjQ0Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQzPgorPFUyNDQ2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDY+Cis8VTI0NDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ0Nz4KKzxVMjQ0OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQ4PgorPFUyNDQ5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDk+Cis8VTI0NjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2MD4KKzxVMjQ2MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDYxPgorPFUyNDYyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NjI+Cis8VTI0NjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Mz4KKzxVMjQ2ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDY0PgorPFUyNDY1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NjU+Cis8VTI0NjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Nj4KKzxVMjQ2Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDY3PgorPFUyNDY4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0Njg+Cis8VTI0Njk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2OT4KKzxVMjQ2QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDZBPgorPFUyNDZCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NkI+Cis8VTI0NkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Qz4KKzxVMjQ2RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDZEPgorPFUyNDZFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NkU+Cis8VTI0NkY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Rj4KKzxVMjQ3MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDcwPgorPFUyNDcxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NzE+Cis8VTI0NzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3Mj4KKzxVMjQ3Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDczPgorPFUyNDc0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NzQ+Cis8VTI0NzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3NT4KKzxVMjQ3Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDc2PgorPFUyNDc3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0Nzc+Cis8VTI0Nzg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3OD4KKzxVMjQ3OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDc5PgorPFUyNDdBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0N0E+Cis8VTI0N0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3Qj4KKzxVMjQ3Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDdDPgorPFUyNDdEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0N0Q+Cis8VTI0N0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3RT4KKzxVMjQ3Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDdGPgorPFUyNDgwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODA+Cis8VTI0ODE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4MT4KKzxVMjQ4Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDgyPgorPFUyNDgzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODM+Cis8VTI0ODQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4ND4KKzxVMjQ4NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDg1PgorPFUyNDg2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODY+Cis8VTI0ODc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4Nz4KKzxVMjQ4OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDg4PgorPFUyNDg5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODk+Cis8VTI0OEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4QT4KKzxVMjQ4Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDhCPgorPFUyNDhDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OEM+Cis8VTI0OEQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4RD4KKzxVMjQ4RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDhFPgorPFUyNDhGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OEY+Cis8VTI0OTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5MD4KKzxVMjQ5MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDkxPgorPFUyNDkyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTI+Cis8VTI0OTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5Mz4KKzxVMjQ5ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDk0PgorPFUyNDk1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTU+Cis8VTI0OTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5Nj4KKzxVMjQ5Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDk3PgorPFUyNDk4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTg+Cis8VTI0OTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5OT4KKzxVMjQ5QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDlBPgorPFUyNDlCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OUI+Cis8VTI0RUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjRFQT4KKzxVMjUwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTAwPgorPFUyNTUwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTA+Cis8VTI1MDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwMj4KKzxVMjU1MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTUxPgorPFUyNTA0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MDQ+Cis8VTI1MDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwNT4KKzxVMjUwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTA2PgorPFUyNTA3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MDc+Cis8VTI1MDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwOD4KKzxVMjUwOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTA5PgorPFUyNTBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MEE+Cis8VTI1MEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwQj4KKzxVMjUwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTBDPgorPFUyNTUyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTI+Cis8VTI1NTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Mz4KKzxVMjU1ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTU0PgorPFUyNTEwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MTA+Cis8VTI1NTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1NT4KKzxVMjU1Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTU2PgorPFUyNTU3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTc+Cis8VTI1MTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUxND4KKzxVMjU1OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTU4PgorPFUyNTU5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTk+Cis8VTI1NUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1QT4KKzxVMjUxOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTE4PgorPFUyNTVCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NUI+Cis8VTI1NUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Qz4KKzxVMjU1RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTVEPgorPFUyNTFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MUM+Cis8VTI1NUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1RT4KKzxVMjUxRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTFFPgorPFUyNTFGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MUY+Cis8VTI1NUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Rj4KKzxVMjUyMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTIxPgorPFUyNTIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MjI+Cis8VTI1NjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2MD4KKzxVMjUyND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTI0PgorPFUyNTYxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjE+Cis8VTI1MjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyNj4KKzxVMjUyNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTI3PgorPFUyNTYyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjI+Cis8VTI1Mjk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyOT4KKzxVMjUyQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTJBPgorPFUyNTYzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjM+Cis8VTI1MkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyQz4KKzxVMjUyRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTJEPgorPFUyNTJFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MkU+Cis8VTI1NjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2ND4KKzxVMjU2NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTY1PgorPFUyNTMxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MzE+Cis8VTI1MzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzMj4KKzxVMjU2Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTY2PgorPFUyNTM0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MzQ+Cis8VTI1MzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzNT4KKzxVMjUzNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTM2PgorPFUyNTY3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Njc+Cis8VTI1Njg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2OD4KKzxVMjUzOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTM5PgorPFUyNTNBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1M0E+Cis8VTI1Njk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2OT4KKzxVMjUzQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTNDPgorPFUyNTNEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1M0Q+Cis8VTI1M0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzRT4KKzxVMjU2QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTZBPgorPFUyNTQwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDA+Cis8VTI1NDE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0MT4KKzxVMjU2Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTZCPgorPFUyNTQzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDM+Cis8VTI1NDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0ND4KKzxVMjU0NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTQ1PgorPFUyNTQ2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDY+Cis8VTI1NDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0Nz4KKzxVMjU0OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTQ4PgorPFUyNTQ5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDk+Cis8VTI1NEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0QT4KKzxVMjU2Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTZDPgorPFUyNTcxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NzE+Cis8VTI1NzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU3Mj4KKzxVMjU4MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTgwPgorPFUyNTg0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1ODQ+Cis8VTI1ODg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU4OD4KKzxVMjU4Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNThDPgorPFUyNTkwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1OTA+Cis8VTI1OTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU5MT4KKzxVMjU5Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTkyPgorPFUyNTkzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1OTM+Cis8VTI1QTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBMD4KKzxVMjVBMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUExPgorPFUyNUEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTI+Cis8VTI1QTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBMz4KKzxVMjVBND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUE0PgorPFUyNUE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTU+Cis8VTI1QTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBNj4KKzxVMjVBNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUE3PgorPFUyNUE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTg+Cis8VTI1QTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBOT4KKzxVMjVBQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUFBPgorPFUyNUFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QUM+Cis8VTI1QUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBRD4KKzxVMjVCMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUIyPgorPFUyNUIzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QjM+Cis8VTI1Qjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVCNz4KKzxVMjVCQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUJBPgorPFUyNUJDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QkM+Cis8VTI1QkQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVCRD4KKzxVMjVDMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUMxPgorPFUyNUM0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QzQ+Cis8VTI1QzY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVDNj4KKzxVMjVDNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUM3PgorPFUyNUNBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Q0E+Cis8VTI1Q0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVDQj4KKzxVMjVDRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUNFPgorPFUyNUNGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Q0Y+Cis8VTI1RDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVEMD4KKzxVMjVEMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUQxPgorPFUyNUQ4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1RDg+Cis8VTI1RDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVEOT4KKzxVMjVFMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUUyPgorPFUyNUUzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1RTM+Cis8VTI1RUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVFRj4KKzxVMjYwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjA1PgorPFUyNjA2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2MDY+Cis8VTI2MEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYwRT4KKzxVMjYwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjBGPgorPFUyNjFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2MUM+Cis8VTI2MUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYxRT4KKzxVMjYzQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjNBPgorPFUyNjNCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2M0I+Cis8VTI2M0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYzQz4KKzxVMjY0MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjQwPgorPFUyNjQyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NDI+Cis8VTI2NjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2MD4KKzxVMjY2MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjYxPgorPFUyNjYyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NjI+Cis8VTI2NjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2Mz4KKzxVMjY2ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjY0PgorPFUyNjY1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NjU+Cis8VTI2NjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2Nj4KKzxVMjY2Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjY3PgorPFUyNjY5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2Njk+Cis8VTI2NkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2QT4KKzxVMjY2Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjZCPgorPFUyNjZDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NkM+Cis8VTI2NkQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2RD4KKzxVMjY2RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjZFPgorPFUyNjZGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NkY+Cis8VTI3MTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjcxMz4KKzxVMjcxNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNzE3PgorPFUyNzIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI3MjA+Cis8VTMwMDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwMD4KKzxVMzAwMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDAxPgorPFUzMDAyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMDI+Cis8VTMwMDM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwMz4KKzxVMzAwND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDA0PgorPFUzMDA1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMDU+Cis8VTMwMDY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwNj4KKzxVMzAwNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDA3PgorPFUzMDBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMEE+Cis8VTMwMEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwQj4KKzxVMzAwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDBDPgorPFUzMDBEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMEQ+Cis8VTMwMEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwRT4KKzxVMzAwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDBGPgorPFUzMDEwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTA+Cis8VTMwMTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxMT4KKzxVMzAxMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDEyPgorPFUzMDEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTM+Cis8VTMwMTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxND4KKzxVMzAxNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDE1PgorPFUzMDE2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTY+Cis8VTMwMTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxNz4KKzxVMzAxQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDFDPgorPFUzMDIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMjA+Cis8VTMwOUI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzA5Qj4KKzxVMzA5Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDlDPgorPFUzMDlEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwOUQ+Cis8VTMwOUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzA5RT4KKzxVMzBGQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMEZCPgorPFUzMEZDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwRkM+Cis8VTMwRkQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzBGRD4KKzxVMzBGRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMEZFPgorPFUzMjFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMUM+Cis8VTMyMjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyMD4KKzxVMzIyMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjIxPgorPFUzMjIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjI+Cis8VTMyMjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyMz4KKzxVMzIyND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjI0PgorPFUzMjI1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjU+Cis8VTMyMjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyNj4KKzxVMzIyNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjI3PgorPFUzMjI4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjg+Cis8VTMyMjk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyOT4KKzxVMzI3Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjdGPgorPFUzM0MyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMzQzI+Cis8VTMzRDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzNEOD4KKzxVMDAwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDAwPgorPFUwMDAxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDE+Cis8VTAwMDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwMj4KKzxVMDAwMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDAzPgorPFUwMDA0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDQ+Cis8VTAwMDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwNT4KKzxVMDAwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA2PgorPFUwMDA3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDc+Cis8VTAwMDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwOD4KKzxVMDAwRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBFPgorPFUwMDBGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMEY+Cis8VTAwMTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxMD4KKzxVMDAxMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDExPgorPFUwMDEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTI+Cis8VTAwMTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxMz4KKzxVMDAxND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE0PgorPFUwMDE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTU+Cis8VTAwMTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxNj4KKzxVMDAxNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE3PgorPFUwMDE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTg+Cis8VTAwMTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxOT4KKzxVMDAxQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFBPgorPFUwMDFCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMUI+Cis8VTAwMUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxQz4KKzxVMDAxRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFEPgorPFUwMDFFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMUU+Cis8VTAwMUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxRj4KKzxVMDA3Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDdGPgorPFUwMDgwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODA+Cis8VTAwODE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4MT4KKzxVMDA4Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDgyPgorPFUwMDgzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODM+Cis8VTAwODQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4ND4KKzxVMDA4NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDg1PgorPFUwMDg2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODY+Cis8VTAwODc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4Nz4KKzxVMDA4OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDg4PgorPFUwMDg5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODk+Cis8VTAwOEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4QT4KKzxVMDA4Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDhCPgorPFUwMDhDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOEM+Cis8VTAwOEQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4RD4KKzxVMDA4RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDhFPgorPFUwMDhGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOEY+Cis8VTAwOTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5MD4KKzxVMDA5MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDkxPgorPFUwMDkyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTI+Cis8VTAwOTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Mz4KKzxVMDA5ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDk0PgorPFUwMDk1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTU+Cis8VTAwOTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Nj4KKzxVMDA5Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDk3PgorPFUwMDk4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTg+Cis8VTAwOTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5OT4KKzxVMDA5QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDlBPgorPFUwMDlCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOUI+Cis8VTAwOUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Qz4KKzxVMDA5RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDlEPgorPFUwMDlFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOUU+Cis8VTAwOUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Rj4KKzxVRTAwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDAwPgorPFVFMDAxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDE+Cis8VUUwMDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwMj4KKzxVMDMwMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzAxPgorPFVFMDA0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDQ+Cis8VUUwMDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwNT4KKzxVRTAwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDA2PgorPFVFMDA3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDc+Cis8VUUwMDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwOD4KKzxVRTAwOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDA5PgorPFVFMDBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMEE+Cis8VUUwMEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwQj4KKzxVRTAwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDBDPgorPFVFMDBEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMEQ+Cis8VUUwMEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwRT4KKzxVRTAwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDBGPgorPCI9PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8Ij0+Cis8VUUwMTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxMT4KKzxVRTAxMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDEyPgorPFVFMDEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMTM+Cis8VUUwMTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxND4KKzxVRTAxNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDE1PgorPFVFMDE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMTc+Cis8VUUwMTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxOD4KKzxVRTAxOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDE5PgorVU5ERUZJTkVECUlHTk9SRTtJR05PUkU7SUdOT1JFCisKKzxVMDAzMD4JPFUwMDMwPjs8VTAwMzA+O0lHTk9SRTtJR05PUkUKKzxVMjA3MD4JPFUwMDMwPjs8VTIwNzA+O0lHTk9SRTtJR05PUkUKKzxVMjE1Qj4JPFUwMDMwPjs8VTIxNUI+O0lHTk9SRTtJR05PUkUKKzxVMDBCQz4JPFUwMDMwPjs8VTAwQkM+O0lHTk9SRTtJR05PUkUKKzxVMjE1Qz4JPFUwMDMwPjs8VTIxNUM+O0lHTk9SRTtJR05PUkUKKzxVMDBCRD4JPFUwMDMwPjs8VTAwQkQ+O0lHTk9SRTtJR05PUkUKKzxVMjE1RD4JPFUwMDMwPjs8VTIxNUQ+O0lHTk9SRTtJR05PUkUKKzxVMDBCRT4JPFUwMDMwPjs8VTAwQkU+O0lHTk9SRTtJR05PUkUKKzxVMjE1RT4JPFUwMDMwPjs8VTIxNUU+O0lHTk9SRTtJR05PUkUKKzxVMDAzMT4JPFUwMDMxPjs8VTAwMzE+O0lHTk9SRTtJR05PUkUKKzxVMDAzMj4JPFUwMDMyPjs8VTAwMzI+O0lHTk9SRTtJR05PUkUKKzxVMDAzMz4JPFUwMDMzPjs8VTAwMzM+O0lHTk9SRTtJR05PUkUKKzxVMDAzND4JPFUwMDM0Pjs8VTAwMzQ+O0lHTk9SRTtJR05PUkUKKzxVMDAzNT4JPFUwMDM1Pjs8VTAwMzU+O0lHTk9SRTtJR05PUkUKKzxVMDAzNj4JPFUwMDM2Pjs8VTAwMzY+O0lHTk9SRTtJR05PUkUKKzxVMDAzNz4JPFUwMDM3Pjs8VTAwMzc+O0lHTk9SRTtJR05PUkUKKzxVMDAzOD4JPFUwMDM4Pjs8VTAwMzg+O0lHTk9SRTtJR05PUkUKKzxVMDAzOT4JPFUwMDM5Pjs8VTAwMzk+O0lHTk9SRTtJR05PUkUKKzxVMDBCOT4JPFUwMDMxPjs8VTAwQjk+O0lHTk9SRTtJR05PUkUKKzxVMDBCMj4JPFUwMDMyPjs8VTAwQjI+O0lHTk9SRTtJR05PUkUKKzxVMDBCMz4JPFUwMDMzPjs8VTAwQjM+O0lHTk9SRTtJR05PUkUKKzxVMjA3ND4JPFUwMDM0Pjs8VTIwNzQ+O0lHTk9SRTtJR05PUkUKKzxVMjA3NT4JPFUwMDM1Pjs8VTIwNzU+O0lHTk9SRTtJR05PUkUKKzxVMjA3Nj4JPFUwMDM2Pjs8VTIwNzY+O0lHTk9SRTtJR05PUkUKKzxVMjA3Nz4JPFUwMDM3Pjs8VTIwNzc+O0lHTk9SRTtJR05PUkUKKzxVMjA3OD4JPFUwMDM4Pjs8VTIwNzg+O0lHTk9SRTtJR05PUkUKKzxVMjA3OT4JPFUwMDM5Pjs8VTIwNzk+O0lHTk9SRTtJR05PUkUKKzxVMDA0MT4JPFUwMDQxPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDYxPgk8VTAwNDE+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMEFBPgk8VTAwNDE+OzxOT05FPjs8VTAwQUE+O0lHTk9SRQorPFUwMEMxPgk8VTAwNDE+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMEUxPgk8VTAwNDE+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDBDMD4JPFUwMDQxPjs8R1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFMD4JPFUwMDQxPjs8R1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMDA+CTxVMDA0MT47PERPVUJMRS1HUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjAxPgk8VTAwNDE+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMDI+CTxVMDA0MT47PEJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMDM+CTxVMDA0MT47PEJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRUFFPgk8VTAwNDE+OzxCUkVWRStBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRUFGPgk8VTAwNDE+OzxCUkVWRStBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVCMD4JPFUwMDQxPjs8QlJFVkUrR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCMT4JPFUwMDQxPjs8QlJFVkUrR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFQjI+CTxVMDA0MT47PEJSRVZFK0hPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCMz4JPFUwMDQxPjs8QlJFVkUrSE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVCND4JPFUwMDQxPjs8QlJFVkUrVElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCNT4JPFUwMDQxPjs8QlJFVkUrVElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFQjY+CTxVMDA0MT47PEJSRVZFK0RPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUI3Pgk8VTAwNDE+OzxCUkVWRStET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAyMDI+CTxVMDA0MT47PElOVkVSVEVELUJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMDM+CTxVMDA0MT47PElOVkVSVEVELUJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMEMyPgk8VTAwNDE+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTI+CTxVMDA0MT47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFQTQ+CTxVMDA0MT47PENJUkNVTUZMRVgrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVBNT4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVBNj4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRUE3Pgk8VTAwNDE+OzxDSVJDVU1GTEVYK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRUE4Pgk8VTAwNDE+OzxDSVJDVU1GTEVYK0hPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVBOT4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRUFBPgk8VTAwNDE+OzxDSVJDVU1GTEVYK1RJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQUI+CTxVMDA0MT47PENJUkNVTUZMRVgrVElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFQUM+CTxVMDA0MT47PENJUkNVTUZMRVgrRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQUQ+CTxVMDA0MT47PENJUkNVTUZMRVgrRE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMUNEPgk8VTAwNDE+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUNFPgk8VTAwNDE+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDBDNT4JPFUwMDQxPjs8UklORz47PENBUElUQUw+O0lHTk9SRQorPFUwMEU1Pgk8VTAwNDE+OzxSSU5HPjs8U01BTEw+O0lHTk9SRQorPFUwMUZBPgk8VTAwNDE+OzxSSU5HK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRkI+CTxVMDA0MT47PFJJTkcrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFMDA+CTxVMDA0MT47PFJJTkctQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwMT4JPFUwMDQxPjs8UklORy1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDBDND4JPFUwMDQxPjs8RElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTQ+CTxVMDA0MT47PERJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMDFERT4JPFUwMDQxPjs8RElBRVJFU0lTK01BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMURGPgk8VTAwNDE+OzxESUFFUkVTSVMrTUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRUEyPgk8VTAwNDE+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQTM+CTxVMDA0MT47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTAwQzM+CTxVMDA0MT47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTM+CTxVMDA0MT47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRUEwPgk8VTAwNDE+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVBMT4JPFUwMDQxPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTA0Pgk8VTAwNDE+OzxPR09ORUs+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEwNT4JPFUwMDQxPjs8T0dPTkVLPjs8U01BTEw+O0lHTk9SRQorPFUwMTAwPgk8VTAwNDE+OzxNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEwMT4JPFUwMDQxPjs8TUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMUUwPgk8VTAwNDE+OzxNQUNST04rRE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRTE+CTxVMDA0MT47PE1BQ1JPTitET1Q+OzxTTUFMTD47SUdOT1JFCis8YTg+Cis8VTAwQzY+CSI8VTAwNDE+PFUwMDQ1PiI7IjxVMDBDNj48VTAwQzY+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDBFNj4JIjxVMDA0MT48VTAwNDU+IjsiPFUwMEM2PjxVMDBDNj4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAxRkM+CSI8VTAwNDE+PFUwMDQ1PiI7IjxVMDFGQz48VTAxRkM+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDFGRD4JIjxVMDA0MT48VTAwNDU+IjsiPFUwMUZDPjxVMDFGQz4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAxRTI+CSI8VTAwNDE+PFUwMDQ1PiI7IjxVMDFFMj48VTAxRTI+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDFFMz4JIjxVMDA0MT48VTAwNDU+IjsiPFUwMUUyPjxVMDFFMj4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAwNDI+CTxVMDA0Mj47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2Mj4JPFUwMDQyPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMUUwMj4JPFUwMDQyPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMDM+CTxVMDA0Mj47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUUwND4JPFUwMDQyPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMDU+CTxVMDA0Mj47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUUwNj4JPFUwMDQyPjs8TElORS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTA3Pgk8VTAwNDI+OzxMSU5FLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPGI4PgorPFUwMDQzPgk8VTAwNDM+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjM+CTxVMDA0Mz47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMDg+CTxVMDA0Mz47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEwOT4JPFUwMDQzPjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMDE4Nz4JPFUwMDQzPjs8SE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUwMTg4Pgk8VTAwNDM+OzxIT09LPjs8U01BTEw+O0lHTk9SRQorPFUwMTBBPgk8VTAwNDM+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEwQj4JPFUwMDQzPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUwMEM3Pgk8VTAwNDM+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTc+CTxVMDA0Mz47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFMDg+CTxVMDA0Mz47PENFRElMTEErQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwOT4JPFUwMDQzPjs8Q0VESUxMQStBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxjOD4KKzxVMDEwQz4JPFUwMTBDPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMTBEPgk8VTAxMEM+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTA2Pgk8VTAxMDY+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMDc+CTxVMDEwNj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAwNDQ+CTxVMDA0ND47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2ND4JPFUwMDQ0Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDEwRT4JPFUwMDQ0Pjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEwRj4JPFUwMDQ0Pjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTFFMEE+CTxVMDA0ND47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTBCPgk8VTAwNDQ+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFMEM+CTxVMDA0ND47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTBEPgk8VTAwNDQ+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTFFMTA+CTxVMDA0ND47PENFRElMTEE+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUxMT4JPFUwMDQ0Pjs8Q0VESUxMQT47PFNNQUxMPjtJR05PUkUKKzxVMUUxMj4JPFUwMDQ0Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUxMz4JPFUwMDQ0Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFMEU+CTxVMDA0ND47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwRj4JPFUwMDQ0Pjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxkOD4KKzxELVo8Pgk8RC1aPD47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxELXo8Pgk8RC1aPD47PE5PTkU+OzxDQVBJVEFMLVNNQUxMPjtJR05PUkUKKzxkLVo8Pgk8RC1aPD47PE5PTkU+OzxTTUFMTC1DQVBJVEFMPjtJR05PUkUKKzxkLXo8Pgk8RC1aPD47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMTA+CTxVMDExMD47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExMT4JPFUwMTEwPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDA0NT4JPFUwMDQ1Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDY1Pgk8VTAwNDU+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMEM5Pgk8VTAwNDU+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMEU5Pgk8VTAwNDU+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDBDOD4JPFUwMDQ1Pjs8R1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFOD4JPFUwMDQ1Pjs8R1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMDQ+CTxVMDA0NT47PERPVUJMRS1HUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjA1Pgk8VTAwNDU+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMTQ+CTxVMDA0NT47PEJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMTU+CTxVMDA0NT47PEJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjA2Pgk8VTAwNDU+OzxJTlZFUlRFRC1CUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjA3Pgk8VTAwNDU+OzxJTlZFUlRFRC1CUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDBDQT4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMEVBPgk8VTAwNDU+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRUJFPgk8VTAwNDU+OzxDSVJDVU1GTEVYK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQkY+CTxVMDA0NT47PENJUkNVTUZMRVgrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFQzA+CTxVMDA0NT47PENJUkNVTUZMRVgrR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDMT4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMUVDMj4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQzM+CTxVMDA0NT47PENJUkNVTUZMRVgrSE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVDND4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUxRUM1Pgk8VTAwNDU+OzxDSVJDVU1GTEVYK1RJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRUM2Pgk8VTAwNDU+OzxDSVJDVU1GTEVYK0RPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUM3Pgk8VTAwNDU+OzxDSVJDVU1GTEVYK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDExQT4JPFUwMDQ1Pjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExQj4JPFUwMDQ1Pjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAwQ0I+CTxVMDA0NT47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUwMEVCPgk8VTAwNDU+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFQkE+CTxVMDA0NT47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCQj4JPFUwMDQ1Pjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVCQz4JPFUwMDQ1Pjs8VElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCRD4JPFUwMDQ1Pjs8VElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFMUE+CTxVMDA0NT47PFRJTERFLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMUI+CTxVMDA0NT47PFRJTERFLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTE2Pgk8VTAwNDU+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExNz4JPFUwMDQ1Pjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRUI4Pgk8VTAwNDU+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCOT4JPFUwMDQ1Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUxRTFDPgk8VTAwNDU+OzxDRURJTExBK0JSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMUQ+CTxVMDA0NT47PENFRElMTEErQlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMTg+CTxVMDA0NT47PE9HT05FSz47PENBUElUQUw+O0lHTk9SRQorPFUwMTE5Pgk8VTAwNDU+OzxPR09ORUs+OzxTTUFMTD47SUdOT1JFCis8VTAxMTI+CTxVMDA0NT47PE1BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTEzPgk8VTAwNDU+OzxNQUNST04+OzxTTUFMTD47SUdOT1JFCis8VTFFMTY+CTxVMDA0NT47PE1BQ1JPTitBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTE3Pgk8VTAwNDU+OzxNQUNST04rQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFMTQ+CTxVMDA0NT47PE1BQ1JPTitHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRTE1Pgk8VTAwNDU+OzxNQUNST04rR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFMTg+CTxVMDA0NT47PE1BQ1JPTitDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMTk+CTxVMDA0NT47PE1BQ1JPTitDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPGU4PgorPFUwMDQ2Pgk8VTAwNDY+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjY+CTxVMDA0Nj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxOTE+CTxVMDA0Nj47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE5Mj4JPFUwMDQ2Pjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUUxRT4JPFUwMDQ2Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMUY+CTxVMDA0Nj47PERPVD47PFNNQUxMPjtJR05PUkUKKzxmOD4KKzxVRkIwMD4JIjxVMDA0Nj48VTAwNDY+IjsiPE5PTkU+PE5PTkU+IjsiPFVGQjAwPjxVRkIwMD4iO0lHTk9SRQorPFVGQjAxPgkiPFUwMDQ2PjxVMDA0OT4iOyI8Tk9ORT48Tk9ORT4iOyI8VUZCMDE+PFVGQjAxPiI7SUdOT1JFCis8VUZCMDI+CSI8VTAwNDY+PFUwMDRDPiI7IjxOT05FPjxOT05FPiI7IjxVRkIwMj48VUZCMDI+IjtJR05PUkUKKzxVRkIwMz4JIjxVMDA0Nj48VTAwNDY+PFUwMDQ5PiI7IjxOT05FPjxOT05FPjxOT05FPiI7IjxVRkIwMz48VUZCMDM+PFVGQjAzPiI7SUdOT1JFCis8VUZCMDQ+CSI8VTAwNDY+PFUwMDQ2PjxVMDA0Qz4iOyI8Tk9ORT48Tk9ORT48Tk9ORT4iOyI8VUZCMDQ+PFVGQjA0PjxVRkIwND4iO0lHTk9SRQorPFUwMDQ3Pgk8VTAwNDc+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjc+CTxVMDA0Nz47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxRjQ+CTxVMDA0Nz47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRjU+CTxVMDA0Nz47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMTFFPgk8VTAwNDc+OzxCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTFGPgk8VTAwNDc+OzxCUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDExQz4JPFUwMDQ3Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMTFEPgk8VTAwNDc+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUwMUU2Pgk8VTAwNDc+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUU3Pgk8VTAwNDc+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDEyMD4JPFUwMDQ3Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMjE+CTxVMDA0Nz47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMDFFND4JPFUwMDQ3Pjs8U1RST0tFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRTU+CTxVMDA0Nz47PFNUUk9LRT47PFNNQUxMPjtJR05PUkUKKzxVMDEyMj4JPFUwMDQ3Pjs8Q0VESUxMQT47PENBUElUQUw+O0lHTk9SRQorPFUwMTIzPgk8VTAwNDc+OzxDRURJTExBPjs8U01BTEw+O0lHTk9SRQorPFUxRTIwPgk8VTAwNDc+OzxNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUyMT4JPFUwMDQ3Pjs8TUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPGc4PgorPFUwMDQ4Pgk8VTAwNDg+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjg+CTxVMDA0OD47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFMkE+CTxVMDA0OD47PEJSRVZFLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMkI+CTxVMDA0OD47PEJSRVZFLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTI0Pgk8VTAwNDg+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMjU+CTxVMDA0OD47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFMjY+CTxVMDA0OD47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUxRTI3Pgk8VTAwNDg+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFMjI+CTxVMDA0OD47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTIzPgk8VTAwNDg+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFMjQ+CTxVMDA0OD47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTI1Pgk8VTAwNDg+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxMjY+CTxVMDA0OD47PFNUUk9LRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTI3Pgk8VTAwNDg+OzxTVFJPS0U+OzxTTUFMTD47SUdOT1JFCis8VTFFMjg+CTxVMDA0OD47PENFRElMTEE+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUyOT4JPFUwMDQ4Pjs8Q0VESUxMQT47PFNNQUxMPjtJR05PUkUKKzxoOD4KKzxVMDA0OT4JPFUwMDQ5Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDY5Pgk8VTAwNDk+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMENEPgk8VTAwNDk+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMEVEPgk8VTAwNDk+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDBDQz4JPFUwMDQ5Pjs8R1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFQz4JPFUwMDQ5Pjs8R1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMDg+CTxVMDA0OT47PERPVUJMRS1HUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjA5Pgk8VTAwNDk+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMkM+CTxVMDA0OT47PEJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMkQ+CTxVMDA0OT47PEJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjBBPgk8VTAwNDk+OzxJTlZFUlRFRC1CUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjBCPgk8VTAwNDk+OzxJTlZFUlRFRC1CUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDBDRT4JPFUwMDQ5Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMEVFPgk8VTAwNDk+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUwMUNGPgk8VTAwNDk+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUQwPgk8VTAwNDk+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDBDRj4JPFUwMDQ5Pjs8RElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRUY+CTxVMDA0OT47PERJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMUUyRT4JPFUwMDQ5Pjs8RElBRVJFU0lTK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMkY+CTxVMDA0OT47PERJQUVSRVNJUytBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVDOD4JPFUwMDQ5Pjs8SE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUM5Pgk8VTAwNDk+OzxIT09LPjs8U01BTEw+O0lHTk9SRQorPFUwMTI4Pgk8VTAwNDk+OzxUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUwMTI5Pgk8VTAwNDk+OzxUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUUyQz4JPFUwMDQ5Pjs8VElMREUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUyRD4JPFUwMDQ5Pjs8VElMREUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxMzA+CTxVMDA0OT47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUwMTMxPgk8VTAwNDk+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFQ0E+CTxVMDA0OT47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUNCPgk8VTAwNDk+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxMkU+CTxVMDA0OT47PE9HT05FSz47PENBUElUQUw+O0lHTk9SRQorPFUwMTJGPgk8VTAwNDk+OzxPR09ORUs+OzxTTUFMTD47SUdOT1JFCis8VTAxMkE+CTxVMDA0OT47PE1BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTJCPgk8VTAwNDk+OzxNQUNST04+OzxTTUFMTD47SUdOT1JFCis8aTg+Cis8VTAxMzI+CSI8VTAwNDk+PFUwMDRBPiI7IjxVMDEzMj48VTAxMzI+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDEzMz4JIjxVMDA0OT48VTAwNEE+IjsiPFUwMTMyPjxVMDEzMj4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAwNEE+CTxVMDA0QT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2QT4JPFUwMDRBPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDEzND4JPFUwMDRBPjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMTM1Pgk8VTAwNEE+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPGo4PgorPFUwMDRCPgk8VTAwNEI+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNkI+CTxVMDA0Qj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFMzA+CTxVMDA0Qj47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMzE+CTxVMDA0Qj47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMUU4Pgk8VTAwNEI+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUU5Pgk8VTAwNEI+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDE5OD4JPFUwMDRCPjs8SE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUwMTk5Pgk8VTAwNEI+OzxIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRTMyPgk8VTAwNEI+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzMz4JPFUwMDRCPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTM2Pgk8VTAwNEI+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMzc+CTxVMDA0Qj47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFMzQ+CTxVMDA0Qj47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzNT4JPFUwMDRCPjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxrOD4KKzxVMDEzOD4JPFUwMDRCPjs8VTAxMzg+OzxTTUFMTD47SUdOT1JFCis8VTAwNEM+CTxVMDA0Qz47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2Qz4JPFUwMDRDPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDEzOT4JPFUwMDRDPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEzQT4JPFUwMDRDPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAxM0Q+CTxVMDA0Qz47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxM0U+CTxVMDA0Qz47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMTNGPgk8VTAwNEM+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0MD4JPFUwMDRDPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTM2Pgk8VTAwNEM+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzNz4JPFUwMDRDPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTQxPgk8VTAwNEM+OzxTVFJPS0U+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0Mj4JPFUwMDRDPjs8U1RST0tFPjs8U01BTEw+O0lHTk9SRQorPFUwMTNCPgk8VTAwNEM+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxM0M+CTxVMDA0Qz47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFMzg+CTxVMDA0Qz47PE1BQ1JPTitET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzOT4JPFUwMDRDPjs8TUFDUk9OK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUUzQz4JPFUwMDRDPjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzRD4JPFUwMDRDPjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFM0E+CTxVMDA0Qz47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzQj4JPFUwMDRDPjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxsOD4KKzxMLUo+CTxMLUo+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8TC1qPgk8TC1KPjs8Tk9ORT47PENBUElUQUwtU01BTEw+O0lHTk9SRQorPGwtSj4JPEwtSj47PE5PTkU+OzxTTUFMTC1DQVBJVEFMPjtJR05PUkUKKzxsLWo+CTxMLUo+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMDREPgk8VTAwNEQ+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNkQ+CTxVMDA0RD47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFM0U+CTxVMDA0RD47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFM0Y+CTxVMDA0RD47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTQwPgk8VTAwNEQ+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU0MT4JPFUwMDREPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTQyPgk8VTAwNEQ+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU0Mz4JPFUwMDREPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPG04PgorPFUwMDRFPgk8VTAwNEU+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNkU+CTxVMDA0RT47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxNDM+CTxVMDA0RT47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNDQ+CTxVMDA0RT47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMTQ3Pgk8VTAwNEU+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTQ4Pgk8VTAwNEU+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDBEMT4JPFUwMDRFPjs8VElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGMT4JPFUwMDRFPjs8VElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFNDQ+CTxVMDA0RT47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTQ1Pgk8VTAwNEU+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFNDY+CTxVMDA0RT47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTQ3Pgk8VTAwNEU+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxNDU+CTxVMDA0RT47PENFRElMTEE+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0Nj4JPFUwMDRFPjs8Q0VESUxMQT47PFNNQUxMPjtJR05PUkUKKzxVMUU0QT4JPFUwMDRFPjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU0Qj4JPFUwMDRFPjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFNDg+CTxVMDA0RT47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU0OT4JPFUwMDRFPjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDE0OT4JPFUwMDRFPjs8UFJFQ0VERUQtQlktQVBPU1RST1BIRT47PFNNQUxMPjtJR05PUkUKKzxuOD4KKzxOLUo+CTxOLUo+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8Ti1qPgk8Ti1KPjs8Tk9ORT47PENBUElUQUwtU01BTEw+O0lHTk9SRQorPG4tSj4JPE4tSj47PE5PTkU+OzxTTUFMTC1DQVBJVEFMPjtJR05PUkUKKzxuLWo+CTxOLUo+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTRBPgkiPFUwMDRFPjxVMDA0Nz4iOyI8VTAxNEE+PFUwMTRBPiI7IjxDQVBJVEFMPjxDQVBJVEFMPiI7SUdOT1JFCis8VTAxNEI+CSI8VTAwNEU+PFUwMDQ3PiI7IjxVMDE0QT48VTAxNEE+IjsiPFNNQUxMPjxTTUFMTD4iO0lHTk9SRQorPFUwMDRGPgk8VTAwNEY+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNkY+CTxVMDA0Rj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAwQkE+CTxVMDA0Rj47PE5PTkU+OzxVMDBCQT47SUdOT1JFCis8VTAwRDM+CTxVMDA0Rj47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRjM+CTxVMDA0Rj47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMEQyPgk8VTAwNEY+OzxHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMEYyPgk8VTAwNEY+OzxHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIwQz4JPFUwMDRGPjs8RE9VQkxFLUdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMEQ+CTxVMDA0Rj47PERPVUJMRS1HUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDE0RT4JPFUwMDRGPjs8QlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0Rj4JPFUwMDRGPjs8QlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMEU+CTxVMDA0Rj47PElOVkVSVEVELUJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMEY+CTxVMDA0Rj47PElOVkVSVEVELUJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMEQ0Pgk8VTAwNEY+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRjQ+CTxVMDA0Rj47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFRDA+CTxVMDA0Rj47PENJUkNVTUZMRVgrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVEMT4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVEMj4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRUQzPgk8VTAwNEY+OzxDSVJDVU1GTEVYK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRUQ0Pgk8VTAwNEY+OzxDSVJDVU1GTEVYK0hPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVENT4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRUQ2Pgk8VTAwNEY+OzxDSVJDVU1GTEVYK1RJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRDc+CTxVMDA0Rj47PENJUkNVTUZMRVgrVElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFRDg+CTxVMDA0Rj47PENJUkNVTUZMRVgrRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRDk+CTxVMDA0Rj47PENJUkNVTUZMRVgrRE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMUQxPgk8VTAwNEY+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUQyPgk8VTAwNEY+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDBENj4JPFUwMDRGPjs8RElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRjY+CTxVMDA0Rj47PERJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMDE1MD4JPFUwMDRGPjs8RE9VQkxFLUFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNTE+CTxVMDA0Rj47PERPVUJMRS1BQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVDRT4JPFUwMDRGPjs8SE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUNGPgk8VTAwNEY+OzxIT09LPjs8U01BTEw+O0lHTk9SRQorPFUwMEQ1Pgk8VTAwNEY+OzxUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUwMEY1Pgk8VTAwNEY+OzxUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUU0Qz4JPFUwMDRGPjs8VElMREUrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU0RD4JPFUwMDRGPjs8VElMREUrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFNEU+CTxVMDA0Rj47PFRJTERFK0RJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUxRTRGPgk8VTAwNEY+OzxUSUxERStESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFQ0M+CTxVMDA0Rj47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUNEPgk8VTAwNEY+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAwRDg+CTxVMDA0Rj47PFNUUk9LRT47PENBUElUQUw+O0lHTk9SRQorPFUwMEY4Pgk8VTAwNEY+OzxTVFJPS0U+OzxTTUFMTD47SUdOT1JFCis8VTAxRkU+CTxVMDA0Rj47PFNUUk9LRStBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMUZGPgk8VTAwNEY+OzxTVFJPS0UrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAxRUE+CTxVMDA0Rj47PE9HT05FSz47PENBUElUQUw+O0lHTk9SRQorPFUwMUVCPgk8VTAwNEY+OzxPR09ORUs+OzxTTUFMTD47SUdOT1JFCis8VTAxRUM+CTxVMDA0Rj47PE9HT05FSytNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFFRD4JPFUwMDRGPjs8T0dPTkVLK01BQ1JPTj47PFNNQUxMPjtJR05PUkUKKzxVMDE0Qz4JPFUwMDRGPjs8TUFDUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNEQ+CTxVMDA0Rj47PE1BQ1JPTj47PFNNQUxMPjtJR05PUkUKKzxVMUU1Mj4JPFUwMDRGPjs8TUFDUk9OK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNTM+CTxVMDA0Rj47PE1BQ1JPTitBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUU1MD4JPFUwMDRGPjs8TUFDUk9OK0dSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNTE+CTxVMDA0Rj47PE1BQ1JPTitHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDFBMD4JPFUwMDRGPjs8SE9STj47PENBUElUQUw+O0lHTk9SRQorPFUwMUExPgk8VTAwNEY+OzxIT1JOPjs8U01BTEw+O0lHTk9SRQorPFUxRURBPgk8VTAwNEY+OzxIT1JOK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFREI+CTxVMDA0Rj47PEhPUk4rQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFREM+CTxVMDA0Rj47PEhPUk4rR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVERD4JPFUwMDRGPjs8SE9STitHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMUVERT4JPFUwMDRGPjs8SE9STitIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFREY+CTxVMDA0Rj47PEhPUk4rSE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVFMD4JPFUwMDRGPjs8SE9STitUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUxRUUxPgk8VTAwNEY+OzxIT1JOK1RJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRUUyPgk8VTAwNEY+OzxIT1JOK0RPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUUzPgk8VTAwNEY+OzxIT1JOK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxvOD4KKzxVMDE1Mj4JIjxVMDA0Rj48VTAwNDU+IjsiPFUwMTUyPjxVMDE1Mj4iOyI8Q0FQSVRBTD48Q0FQSVRBTD4iO0lHTk9SRQorPFUwMTUzPgkiPFUwMDRGPjxVMDA0NT4iOyI8VTAxNTI+PFUwMTUyPiI7IjxTTUFMTD48U01BTEw+IjtJR05PUkUKKzxVMDA1MD4JPFUwMDUwPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDcwPgk8VTAwNTA+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUxRTU0Pgk8VTAwNTA+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTU1Pgk8VTAwNTA+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUU1Nj4JPFUwMDUwPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNTc+CTxVMDA1MD47PERPVD47PFNNQUxMPjtJR05PUkUKKzxwOD4KKzxVMDA1MT4JPFUwMDUxPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDcxPgk8VTAwNTE+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPHE4PgorPFUwMDUyPgk8VTAwNTI+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzI+CTxVMDA1Mj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxNTQ+CTxVMDA1Mj47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNTU+CTxVMDA1Mj47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMjEwPgk8VTAwNTI+OzxET1VCTEUtR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIxMT4JPFUwMDUyPjs8RE9VQkxFLUdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjEyPgk8VTAwNTI+OzxJTlZFUlRFRC1CUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjEzPgk8VTAwNTI+OzxJTlZFUlRFRC1CUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDE1OD4JPFUwMDUyPjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE1OT4JPFUwMDUyPjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTFFNTg+CTxVMDA1Mj47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTU5Pgk8VTAwNTI+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFNUE+CTxVMDA1Mj47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTVCPgk8VTAwNTI+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxNTY+CTxVMDA1Mj47PENFRElMTEE+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE1Nz4JPFUwMDUyPjs8Q0VESUxMQT47PFNNQUxMPjtJR05PUkUKKzxVMUU1Qz4JPFUwMDUyPjs8TUFDUk9OK0RPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTVEPgk8VTAwNTI+OzxNQUNST04rRE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUxRTVFPgk8VTAwNTI+OzxMSU5FLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNUY+CTxVMDA1Mj47PExJTkUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8cjg+Cis8VTAwNTM+CTxVMDA1Mz47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3Mz4JPFUwMDUzPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVRkIwNj4JIjxVMDA1Mz48VTAwNTQ+IjsiPE5PTkU+PE5PTkU+IjsiPFVGQjA2PjxVRkIwNj4iO0lHTk9SRQorPFUwMTVBPgk8VTAwNTM+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMTVCPgk8VTAwNTM+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUU2ND4JPFUwMDUzPjs8QUNVVEUrRE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNjU+CTxVMDA1Mz47PEFDVVRFK0RPVD47PFNNQUxMPjtJR05PUkUKKzxVMDE1Qz4JPFUwMDUzPjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMTVEPgk8VTAwNTM+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRTY2Pgk8VTAwNTM+OzxDQVJPTitET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2Nz4JPFUwMDUzPjs8Q0FST04rRE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTYwPgk8VTAwNTM+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2MT4JPFUwMDUzPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTYyPgk8VTAwNTM+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2Mz4JPFUwMDUzPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUxRTY4Pgk8VTAwNTM+OzxET1QrRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNjk+CTxVMDA1Mz47PERPVCtET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxNUU+CTxVMDA1Mz47PENFRElMTEE+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE1Rj4JPFUwMDUzPjs8Q0VESUxMQT47PFNNQUxMPjtJR05PUkUKKzxzOD4KKzxVMDE2MD4JPFUwMTYwPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMTYxPgk8VTAxNjA+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTdGPgk8VTAwNTM+OzxVMDE3Rj47PFNNQUxMPjtJR05PUkUKKzxVMDBERj4JIjxVMDA1Mz48VTAwNTM+IjsiPE5PTkU+PE5PTkU+IjsiPFNNQUxMPjxVMDBERj4iO0lHTk9SRQorPFVGQjA1PgkiPFUwMDUzPjxVMDA1ND4iOyI8Tk9ORT48Tk9ORT4iOyI8VUZCMDU+PFVGQjA1PiI7SUdOT1JFCis8VTAwNTQ+CTxVMDA1ND47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3ND4JPFUwMDU0Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDE2ND4JPFUwMDU0Pjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE2NT4JPFUwMDU0Pjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTFFNkE+CTxVMDA1ND47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTZCPgk8VTAwNTQ+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFNkM+CTxVMDA1ND47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTZEPgk8VTAwNTQ+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxNjY+CTxVMDA1ND47PFNUUk9LRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTY3Pgk8VTAwNTQ+OzxTVFJPS0U+OzxTTUFMTD47SUdOT1JFCis8VTAxNjI+CTxVMDA1ND47PENFRElMTEE+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE2Mz4JPFUwMDU0Pjs8Q0VESUxMQT47PFNNQUxMPjtJR05PUkUKKzxVMUU3MD4JPFUwMDU0Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU3MT4JPFUwMDU0Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFNkU+CTxVMDA1ND47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2Rj4JPFUwMDU0Pjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzx0OD4KKzxVMDBERT4JIjxVMDA1ND48VTAwNDg+IjsiPFUwMERFPjxVMDBERT4iOyI8Q0FQSVRBTD48Q0FQSVRBTD4iO0lHTk9SRQorPFUwMEZFPgkiPFUwMDU0PjxVMDA0OD4iOyI8VTAwREU+PFUwMERFPiI7IjxTTUFMTD48U01BTEw+IjtJR05PUkUKKzxVMDA1NT4JPFUwMDU1Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDc1Pgk8VTAwNTU+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMERBPgk8VTAwNTU+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMEZBPgk8VTAwNTU+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDBEOT4JPFUwMDU1Pjs8R1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGOT4JPFUwMDU1Pjs8R1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMTQ+CTxVMDA1NT47PERPVUJMRS1HUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjE1Pgk8VTAwNTU+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxNkM+CTxVMDA1NT47PEJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNkQ+CTxVMDA1NT47PEJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjE2Pgk8VTAwNTU+OzxJTlZFUlRFRC1CUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjE3Pgk8VTAwNTU+OzxJTlZFUlRFRC1CUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDBEQj4JPFUwMDU1Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMEZCPgk8VTAwNTU+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUwMUQzPgk8VTAwNTU+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUQ0Pgk8VTAwNTU+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDE2RT4JPFUwMDU1Pjs8UklORz47PENBUElUQUw+O0lHTk9SRQorPFUwMTZGPgk8VTAwNTU+OzxSSU5HPjs8U01BTEw+O0lHTk9SRQorPFUwMERDPgk8VTAwNTU+OzxESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGQz4JPFUwMDU1Pjs8RElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUwMUQ1Pgk8VTAwNTU+OzxESUFFUkVTSVMrTUFDUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRDY+CTxVMDA1NT47PERJQUVSRVNJUytNQUNST04+OzxTTUFMTD47SUdOT1JFCis8VTAxRDc+CTxVMDA1NT47PERJQUVSRVNJUytBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMUQ4Pgk8VTAwNTU+OzxESUFFUkVTSVMrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAxREI+CTxVMDA1NT47PERJQUVSRVNJUytHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMURDPgk8VTAwNTU+OzxESUFFUkVTSVMrR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxRDk+CTxVMDA1NT47PERJQUVSRVNJUytDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMURBPgk8VTAwNTU+OzxESUFFUkVTSVMrQ0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAxNzA+CTxVMDA1NT47PERPVUJMRS1BQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMTcxPgk8VTAwNTU+OzxET1VCTEUtQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFRTY+CTxVMDA1NT47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFNz4JPFUwMDU1Pjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMDE2OD4JPFUwMDU1Pjs8VElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE2OT4JPFUwMDU1Pjs8VElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFNzg+CTxVMDA1NT47PFRJTERFK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNzk+CTxVMDA1NT47PFRJTERFK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTc0Pgk8VTAwNTU+OzxUSUxERS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTc1Pgk8VTAwNTU+OzxUSUxERS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUVFND4JPFUwMDU1Pjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRTU+CTxVMDA1NT47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDE3Mj4JPFUwMDU1Pjs8T0dPTkVLPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNzM+CTxVMDA1NT47PE9HT05FSz47PFNNQUxMPjtJR05PUkUKKzxVMDE2QT4JPFUwMDU1Pjs8TUFDUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNkI+CTxVMDA1NT47PE1BQ1JPTj47PFNNQUxMPjtJR05PUkUKKzxVMUU3QT4JPFUwMDU1Pjs8TUFDUk9OK0RJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUxRTdCPgk8VTAwNTU+OzxNQUNST04rRElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUxRTcyPgk8VTAwNTU+OzxNQUNST04rRElBRVJFU0lTLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNzM+CTxVMDA1NT47PE1BQ1JPTitESUFFUkVTSVMtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTFFNzY+CTxVMDA1NT47PE1BQ1JPTitDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNzc+CTxVMDA1NT47PE1BQ1JPTitDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUwMUFGPgk8VTAwNTU+OzxIT1JOPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxQjA+CTxVMDA1NT47PEhPUk4+OzxTTUFMTD47SUdOT1JFCis8VTFFRTg+CTxVMDA1NT47PEhPUk4rQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFOT4JPFUwMDU1Pjs8SE9STitBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVFQT4JPFUwMDU1Pjs8SE9STitHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRUVCPgk8VTAwNTU+OzxIT1JOK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRUVDPgk8VTAwNTU+OzxIT1JOK0hPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFRD4JPFUwMDU1Pjs8SE9STitIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRUVFPgk8VTAwNTU+OzxIT1JOK1RJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRUY+CTxVMDA1NT47PEhPUk4rVElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFRjA+CTxVMDA1NT47PEhPUk4rRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRjE+CTxVMDA1NT47PEhPUk4rRE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPHU4PgorPFUwMDU2Pgk8VTAwNTY+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzY+CTxVMDA1Nj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFN0M+CTxVMDA1Nj47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFN0Q+CTxVMDA1Nj47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRTdFPgk8VTAwNTY+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU3Rj4JPFUwMDU2Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPHY4PgorPFUwMDU3Pgk8VTAwNTc+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzc+CTxVMDA1Nz47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFODI+CTxVMDA1Nz47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFODM+CTxVMDA1Nz47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTgwPgk8VTAwNTc+OzxHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRTgxPgk8VTAwNTc+OzxHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDE3ND4JPFUwMDU3Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMTc1Pgk8VTAwNTc+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRTg0Pgk8VTAwNTc+OzxESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU4NT4JPFUwMDU3Pjs8RElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUxRTg2Pgk8VTAwNTc+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU4Nz4JPFUwMDU3Pjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTg4Pgk8VTAwNTc+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU4OT4JPFUwMDU3Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPHc4PgorPFUwMDU4Pgk8VTAwNTg+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzg+CTxVMDA1OD47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFOEM+CTxVMDA1OD47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUxRThEPgk8VTAwNTg+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFOEE+CTxVMDA1OD47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRThCPgk8VTAwNTg+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8eDg+Cis8VTAwNTk+CTxVMDA1OT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3OT4JPFUwMDU5Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDBERD4JPFUwMDU5Pjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGRD4JPFUwMDU5Pjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFRjI+CTxVMDA1OT47PEdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRjM+CTxVMDA1OT47PEdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTc2Pgk8VTAwNTk+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNzc+CTxVMDA1OT47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTAxNzg+CTxVMDA1OT47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUwMEZGPgk8VTAwNTk+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFRjY+CTxVMDA1OT47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVGNz4JPFUwMDU5Pjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVGOD4JPFUwMDU5Pjs8VElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVGOT4JPFUwMDU5Pjs8VElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFOEU+CTxVMDA1OT47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRThGPgk8VTAwNTk+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFRjQ+CTxVMDA1OT47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUY1Pgk8VTAwNTk+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8eTg+Cis8VTAwNUE+CTxVMDA1QT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3QT4JPFUwMDVBPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDE3OT4JPFUwMDVBPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE3QT4JPFUwMDVBPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFOTA+CTxVMDA1QT47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU5MT4JPFUwMDVBPjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMDE3Qj4JPFUwMDVBPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxN0M+CTxVMDA1QT47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUU5Mj4JPFUwMDVBPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFOTM+CTxVMDA1QT47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDFCNT4JPFUwMDVBPjs8U1RST0tFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxQjY+CTxVMDA1QT47PFNUUk9LRT47PFNNQUxMPjtJR05PUkUKKzxVMUU5ND4JPFUwMDVBPjs8TElORS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTk1Pgk8VTAwNUE+OzxMSU5FLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPHo4PgorPFUwMTdEPgk8VTAxN0Q+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxN0U+CTxVMDE3RD47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAzOTE+CTxVMDM5MT47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzODY+CTxVMDM5MT47PENBUElUQUw+OzxUT05PUz47SUdOT1JFCis8VTAzQjE+CTxVMDM5MT47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0FDPgk8VTAzOTE+OzxTTUFMTD47PFRPTk9TPjtJR05PUkUKKzxVMDM5Mj4JPFUwMzkyPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCMj4JPFUwMzkyPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOTM+CTxVMDM5Mz47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQjM+CTxVMDM5Mz47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzk0Pgk8VTAzOTQ+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0I0Pgk8VTAzOTQ+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDM5NT4JPFUwMzk1Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDM4OD4JPFUwMzk1Pjs8Q0FQSVRBTD47PFRPTk9TPjtJR05PUkUKKzxVMDNCNT4JPFUwMzk1Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQUQ+CTxVMDM5NT47PFNNQUxMPjs8VE9OT1M+O0lHTk9SRQorPFUwMzk2Pgk8VTAzOTY+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0I2Pgk8VTAzOTY+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDM5Nz4JPFUwMzk3Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDM4OT4JPFUwMzk3Pjs8Q0FQSVRBTD47PFRPTk9TPjtJR05PUkUKKzxVMDNCNz4JPFUwMzk3Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQUU+CTxVMDM5Nz47PFNNQUxMPjs8VE9OT1M+O0lHTk9SRQorPFUwMzk4Pgk8VTAzOTg+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0I4Pgk8VTAzOTg+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDM5OT4JPFUwMzk5Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDM4QT4JPFUwMzk5Pjs8Q0FQSVRBTD47PFRPTk9TPjtJR05PUkUKKzxVMDNBQT4JPFUwMzk5Pjs8Q0FQSVRBTD47PERJQUxZVElDQT47SUdOT1JFCis8VTAzQjk+CTxVMDM5OT47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0FGPgk8VTAzOTk+OzxTTUFMTD47PFRPTk9TPjtJR05PUkUKKzxVMDNDQT4JPFUwMzk5Pjs8U01BTEw+OzxESUFMWVRJQ0E+O0lHTk9SRQorPFUwMzkwPgk8VTAzOTk+OzxTTUFMTD47PERJQUxZVElDQStUT05PUz47SUdOT1JFCis8VTAzOUE+CTxVMDM5QT47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQkE+CTxVMDM5QT47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzlCPgk8VTAzOUI+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0JCPgk8VTAzOUI+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDM5Qz4JPFUwMzlDPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCQz4JPFUwMzlDPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOUQ+CTxVMDM5RD47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQkQ+CTxVMDM5RD47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzlFPgk8VTAzOUU+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0JFPgk8VTAzOUU+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDM5Rj4JPFUwMzlGPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDM4Qz4JPFUwMzlGPjs8Q0FQSVRBTD47PFRPTk9TPjtJR05PUkUKKzxVMDNCRj4JPFUwMzlGPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQ0M+CTxVMDM5Rj47PFNNQUxMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0EwPgk8VTAzQTA+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0MwPgk8VTAzQTA+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBMT4JPFUwM0ExPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDMT4JPFUwM0ExPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQTM+CTxVMDNBMz47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzM+CTxVMDNBMz47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0MyPgk8VTAzQTM+OzxTTUFMTD47PFUwM0MyPjtJR05PUkUKKzxVMDNBND4JPFUwM0E0Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDND4JPFUwM0E0Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQTU+CTxVMDNBNT47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzOEU+CTxVMDNBNT47PENBUElUQUw+OzxUT05PUz47SUdOT1JFCis8VTAzQUI+CTxVMDNBNT47PENBUElUQUw+OzxESUFMWVRJQ0E+O0lHTk9SRQorPFUwM0M1Pgk8VTAzQTU+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDRD4JPFUwM0E1Pjs8U01BTEw+OzxUT05PUz47SUdOT1JFCis8VTAzQ0I+CTxVMDNBNT47PFNNQUxMPjs8RElBTFlUSUNBPjtJR05PUkUKKzxVMDNCMD4JPFUwM0E1Pjs8U01BTEw+OzxESUFMWVRJQ0ErVE9OT1M+O0lHTk9SRQorPFUwM0E2Pgk8VTAzQTY+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0M2Pgk8VTAzQTY+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBNz4JPFUwM0E3Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDNz4JPFUwM0E3Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQTg+CTxVMDNBOD47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzg+CTxVMDNBOD47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0E5Pgk8VTAzQTk+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzhGPgk8VTAzQTk+OzxDQVBJVEFMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0M5Pgk8VTAzQTk+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDRT4JPFUwM0E5Pjs8U01BTEw+OzxUT05PUz47SUdOT1JFCis8VTA0MTA+CTxVMDQxMD47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0MzA+CTxVMDQxMD47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDExPgk8VTA0MTE+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDMxPgk8VTA0MTE+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxMj4JPFUwNDEyPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzMj4JPFUwNDEyPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTM+CTxVMDQxMz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0MzM+CTxVMDQxMz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDAzPgk8VTA0MDM+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDUzPgk8VTA0MDM+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQ5MD4JPFUwNDkwPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ5MT4JPFUwNDkwPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTQ+CTxVMDQxND47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0MzQ+CTxVMDQxND47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDAyPgk8VTA0MDI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDUyPgk8VTA0MDI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxNT4JPFUwNDE1Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzNT4JPFUwNDE1Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MDE+CTxVMDQwMT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NTE+CTxVMDQwMT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDA0Pgk8VTA0MDQ+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDU0Pgk8VTA0MDQ+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxNj4JPFUwNDE2Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzNj4JPFUwNDE2Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTc+CTxVMDQxNz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0Mzc+CTxVMDQxNz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDE4Pgk8VTA0MTg+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDM4Pgk8VTA0MTg+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwNj4JPFUwNDA2Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1Nj4JPFUwNDA2Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MDc+CTxVMDQwNz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NTc+CTxVMDQwNz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDA4Pgk8VTA0MDg+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDU4Pgk8VTA0MDg+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxOT4JPFUwNDE5Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzOT4JPFUwNDE5Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MUE+CTxVMDQxQT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0M0E+CTxVMDQxQT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDBDPgk8VTA0MEM+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDVDPgk8VTA0MEM+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxQj4JPFUwNDFCPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzQj4JPFUwNDFCPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MDk+CTxVMDQwOT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NTk+CTxVMDQwOT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDFDPgk8VTA0MUM+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDNDPgk8VTA0MUM+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxRD4JPFUwNDFEPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzRD4JPFUwNDFEPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MEE+CTxVMDQwQT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NUE+CTxVMDQwQT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDFFPgk8VTA0MUU+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDNFPgk8VTA0MUU+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxRj4JPFUwNDFGPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzRj4JPFUwNDFGPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MjA+CTxVMDQyMD47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDA+CTxVMDQyMD47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDIxPgk8VTA0MjE+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDQxPgk8VTA0MjE+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyMj4JPFUwNDIyPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0Mj4JPFUwNDIyPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MEI+CTxVMDQwQj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NUI+CTxVMDQwQj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDIzPgk8VTA0MjM+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDQzPgk8VTA0MjM+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwRT4JPFUwNDBFPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1RT4JPFUwNDBFPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MjQ+CTxVMDQyND47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDQ+CTxVMDQyND47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDI1Pgk8VTA0MjU+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDQ1Pgk8VTA0MjU+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyNj4JPFUwNDI2Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0Nj4JPFUwNDI2Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MDU+CTxVMDQwNT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NTU+CTxVMDQwNT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDI3Pgk8VTA0Mjc+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDQ3Pgk8VTA0Mjc+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwRj4JPFUwNDBGPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1Rj4JPFUwNDBGPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0Mjg+CTxVMDQyOD47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDg+CTxVMDQyOD47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDI5Pgk8VTA0Mjk+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDQ5Pgk8VTA0Mjk+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQ0QT4JPFUwNDRBPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MkE+CTxVMDQ0QT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0MkI+CTxVMDQyQj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NEI+CTxVMDQyQj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDRDPgk8VTA0NEM+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyQz4JPFUwNDRDPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQyRD4JPFUwNDJEPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0RD4JPFUwNDJEPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MkU+CTxVMDQyRT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NEU+CTxVMDQyRT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDJGPgk8VTA0MkY+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDRGPgk8VTA0MkY+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQ2Mj4JPFUwNDYyPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ2Mz4JPFUwNDYyPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0NkE+CTxVMDQ2QT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NkI+CTxVMDQ2QT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDcyPgk8VTA0NzI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDczPgk8VTA0NzI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQ3ND4JPFUwNDc0Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ3NT4JPFUwNDc0Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0ODA+CTxVMDQ4MD47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0ODE+CTxVMDQ4MD47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNUQwPgk8VTA1RDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDE+CTxVMDVEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEMj4JPFUwNUQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQzPgk8VTA1RDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDQ+CTxVMDVEND47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVENT4JPFUwNUQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQ2Pgk8VTA1RDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDc+CTxVMDVENz47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEOD4JPFUwNUQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQ5Pgk8VTA1RDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1REE+CTxVMDVEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEQj4JPFUwNURCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNURDPgk8VTA1REM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1REQ+CTxVMDVERD47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVERT4JPFUwNURFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNURGPgk8VTA1REY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTA+CTxVMDVFMD47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFMT4JPFUwNUUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUUyPgk8VTA1RTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTM+CTxVMDVFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFND4JPFUwNUU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUU1Pgk8VTA1RTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTY+CTxVMDVFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFNz4JPFUwNUU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUU4Pgk8VTA1RTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTk+CTxVMDVFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFQT4JPFUwNUVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorCislIEFyYWJpYyBjb2xsYXRpbmcKKworPFUwNjBDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA2MEM+Cis8VTA2MUI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDYxQj4KKzxVMDYxRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNjFGPgorPFUwNjQwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA2NDA+CisKKzxVMDYyMT4JPFUwNjIxPjs8VTA2MjE+O0lHTk9SRTtJR05PUkUKKzxVMDYyMj4JPFUwNjIyPjs8VTA2MjI+O0lHTk9SRTtJR05PUkUKKzxVRkU4Mj4JPFUwNjIyPjs8VUZFODI+O0lHTk9SRTtJR05PUkUKKzxVMDYyMz4JPFUwNjIxPjs8VTA2MjM+O0lHTk9SRTtJR05PUkUKKzxVRkU4ND4JPFUwNjIxPjs8VUZFODQ+O0lHTk9SRTtJR05PUkUKKzxVMDYyND4JPFUwNjIxPjs8VTA2MjQ+O0lHTk9SRTtJR05PUkUKKzxVMDYyNT4JPFUwNjIxPjs8VTA2MjU+O0lHTk9SRTtJR05PUkUKKzxVRkU4OD4JPFUwNjIxPjs8VUZFODg+O0lHTk9SRTtJR05PUkUKKzxVMDYyNj4JPFUwNjIxPjs8VTA2MjY+O0lHTk9SRTtJR05PUkUKKzxVMDY3MD4JPFUwNjcwPjs8VTA2NzA+O0lHTk9SRTtJR05PUkUKKzxVMDYyNz4JPFUwNjI3Pjs8VTA2Mjc+O0lHTk9SRTtJR05PUkUKKzxVRkU4RD4JPFUwNjI3Pjs8VUZFOEQ+O0lHTk9SRTtJR05PUkUKKzxVRkU4RT4JPFUwNjI3Pjs8VUZFOEU+O0lHTk9SRTtJR05PUkUKKzxVRTAxNj4JPFUwNjI3Pjs8VUUwMTY+O0lHTk9SRTtJR05PUkUKKzxVMDYyOD4JPFUwNjI4Pjs8VTA2Mjg+O0lHTk9SRTtJR05PUkUKKzxVRkU4Rj4JPFUwNjI4Pjs8VUZFOEY+O0lHTk9SRTtJR05PUkUKKzxVRkU5MD4JPFUwNjI4Pjs8VUZFOTA+O0lHTk9SRTtJR05PUkUKKzxVRkU5MT4JPFUwNjI4Pjs8VUZFOTE+O0lHTk9SRTtJR05PUkUKKzxVRkU5Mj4JPFUwNjI4Pjs8VUZFOTI+O0lHTk9SRTtJR05PUkUKKzxVMDY3RT4JPFUwNjdFPjs8VTA2N0U+O0lHTk9SRTtJR05PUkUKKzxVMDZBND4JPFUwNkE0Pjs8VTA2QTQ+O0lHTk9SRTtJR05PUkUKKzxVMDYyOT4JPFUwNjI5Pjs8VTA2Mjk+O0lHTk9SRTtJR05PUkUKKzxVRkU5Mz4JPFUwNjI5Pjs8VUZFOTM+O0lHTk9SRTtJR05PUkUKKzxVRkU5ND4JPFUwNjI5Pjs8VUZFOTQ+O0lHTk9SRTtJR05PUkUKKzxVMDYyQT4JPFUwNjI5Pjs8VTA2MkE+O0lHTk9SRTtJR05PUkUKKzxVRkU5NT4JPFUwNjI5Pjs8VUZFOTU+O0lHTk9SRTtJR05PUkUKKzxVRkU5Nj4JPFUwNjI5Pjs8VUZFOTY+O0lHTk9SRTtJR05PUkUKKzxVRkU5Nz4JPFUwNjI5Pjs8VUZFOTc+O0lHTk9SRTtJR05PUkUKKzxVRkU5OD4JPFUwNjI5Pjs8VUZFOTg+O0lHTk9SRTtJR05PUkUKKzxVMDYyQj4JPFUwNjJCPjs8VTA2MkI+O0lHTk9SRTtJR05PUkUKKzxVRkU5OT4JPFUwNjJCPjs8VUZFOTk+O0lHTk9SRTtJR05PUkUKKzxVRkU5QT4JPFUwNjJCPjs8VUZFOUE+O0lHTk9SRTtJR05PUkUKKzxVRkU5Qj4JPFUwNjJCPjs8VUZFOUI+O0lHTk9SRTtJR05PUkUKKzxVRkU5Qz4JPFUwNjJCPjs8VUZFOUM+O0lHTk9SRTtJR05PUkUKKzxVMDYyQz4JPFUwNjJDPjs8VTA2MkM+O0lHTk9SRTtJR05PUkUKKzxVRkU5RD4JPFUwNjJDPjs8VUZFOUQ+O0lHTk9SRTtJR05PUkUKKzxVRkU5RT4JPFUwNjJDPjs8VUZFOUU+O0lHTk9SRTtJR05PUkUKKzxVRkU5Rj4JPFUwNjJDPjs8VUZFOUY+O0lHTk9SRTtJR05PUkUKKzxVRkVBMD4JPFUwNjJDPjs8VUZFQTA+O0lHTk9SRTtJR05PUkUKKzxVMDYyRD4JPFUwNjJEPjs8VTA2MkQ+O0lHTk9SRTtJR05PUkUKKzxVRkVBMT4JPFUwNjJEPjs8VUZFQTE+O0lHTk9SRTtJR05PUkUKKzxVRkVBMj4JPFUwNjJEPjs8VUZFQTI+O0lHTk9SRTtJR05PUkUKKzxVRkVBMz4JPFUwNjJEPjs8VUZFQTM+O0lHTk9SRTtJR05PUkUKKzxVRkVBND4JPFUwNjJEPjs8VUZFQTQ+O0lHTk9SRTtJR05PUkUKKzxVMDYyRT4JPFUwNjJFPjs8VTA2MkU+O0lHTk9SRTtJR05PUkUKKzxVRkVBNT4JPFUwNjJFPjs8VUZFQTU+O0lHTk9SRTtJR05PUkUKKzxVRkVBNj4JPFUwNjJFPjs8VUZFQTY+O0lHTk9SRTtJR05PUkUKKzxVRkVBNz4JPFUwNjJFPjs8VUZFQTc+O0lHTk9SRTtJR05PUkUKKzxVRkVBOD4JPFUwNjJFPjs8VUZFQTg+O0lHTk9SRTtJR05PUkUKKzxVMDYyRj4JPFUwNjJGPjs8VTA2MkY+O0lHTk9SRTtJR05PUkUKKzxVRkVBOT4JPFUwNjJGPjs8VUZFQTk+O0lHTk9SRTtJR05PUkUKKzxVRkVBQT4JPFUwNjJGPjs8VUZFQUE+O0lHTk9SRTtJR05PUkUKKzxVMDYzMD4JPFUwNjMwPjs8VTA2MzA+O0lHTk9SRTtJR05PUkUKKzxVRkVBQj4JPFUwNjMwPjs8VUZFQUI+O0lHTk9SRTtJR05PUkUKKzxVRkVBQz4JPFUwNjMwPjs8VUZFQUM+O0lHTk9SRTtJR05PUkUKKzxVMDYzMT4JPFUwNjMxPjs8VTA2MzE+O0lHTk9SRTtJR05PUkUKKzxVRkVBRD4JPFUwNjMxPjs8VUZFQUQ+O0lHTk9SRTtJR05PUkUKKzxVRkVBRT4JPFUwNjMxPjs8VUZFQUU+O0lHTk9SRTtJR05PUkUKKzxVMDYzMj4JPFUwNjMyPjs8VTA2MzI+O0lHTk9SRTtJR05PUkUKKzxVRkVBRj4JPFUwNjMyPjs8VUZFQUY+O0lHTk9SRTtJR05PUkUKKzxVRkVCMD4JPFUwNjMyPjs8VUZFQjA+O0lHTk9SRTtJR05PUkUKKzxVMDYzMz4JPFUwNjMzPjs8VTA2MzM+O0lHTk9SRTtJR05PUkUKKzxVRkVCMT4JPFUwNjMzPjs8VUZFQjE+O0lHTk9SRTtJR05PUkUKKzxVRkVCMj4JPFUwNjMzPjs8VUZFQjI+O0lHTk9SRTtJR05PUkUKKzxVRkVCMz4JPFUwNjMzPjs8VUZFQjM+O0lHTk9SRTtJR05PUkUKKzxVRkVCND4JPFUwNjMzPjs8VUZFQjQ+O0lHTk9SRTtJR05PUkUKKzxVMDYzND4JPFUwNjM0Pjs8VTA2MzQ+O0lHTk9SRTtJR05PUkUKKzxVRkVCNT4JPFUwNjM0Pjs8VUZFQjU+O0lHTk9SRTtJR05PUkUKKzxVRkVCNj4JPFUwNjM0Pjs8VUZFQjY+O0lHTk9SRTtJR05PUkUKKzxVRkVCNz4JPFUwNjM0Pjs8VUZFQjc+O0lHTk9SRTtJR05PUkUKKzxVRkVCOD4JPFUwNjM0Pjs8VUZFQjg+O0lHTk9SRTtJR05PUkUKKzxVMDYzNT4JPFUwNjM1Pjs8VTA2MzU+O0lHTk9SRTtJR05PUkUKKzxVRkVCOT4JPFUwNjM1Pjs8VUZFQjk+O0lHTk9SRTtJR05PUkUKKzxVRkVCQT4JPFUwNjM1Pjs8VUZFQkE+O0lHTk9SRTtJR05PUkUKKzxVRkVCQj4JPFUwNjM1Pjs8VUZFQkI+O0lHTk9SRTtJR05PUkUKKzxVRkVCQz4JPFUwNjM1Pjs8VUZFQkM+O0lHTk9SRTtJR05PUkUKKzxVMDYzNj4JPFUwNjM2Pjs8VTA2MzY+O0lHTk9SRTtJR05PUkUKKzxVRkVCRD4JPFUwNjM2Pjs8VUZFQkQ+O0lHTk9SRTtJR05PUkUKKzxVRkVCRT4JPFUwNjM2Pjs8VUZFQkU+O0lHTk9SRTtJR05PUkUKKzxVRkVCRj4JPFUwNjM2Pjs8VUZFQkY+O0lHTk9SRTtJR05PUkUKKzxVRkVDMD4JPFUwNjM2Pjs8VUZFQzA+O0lHTk9SRTtJR05PUkUKKzxVMDYzNz4JPFUwNjM3Pjs8VTA2Mzc+O0lHTk9SRTtJR05PUkUKKzxVRkVDMT4JPFUwNjM3Pjs8VUZFQzE+O0lHTk9SRTtJR05PUkUKKzxVRkVDMj4JPFUwNjM3Pjs8VUZFQzI+O0lHTk9SRTtJR05PUkUKKzxVRkVDMz4JPFUwNjM3Pjs8VUZFQzM+O0lHTk9SRTtJR05PUkUKKzxVRkVDND4JPFUwNjM3Pjs8VUZFQzQ+O0lHTk9SRTtJR05PUkUKKzxVMDYzOD4JPFUwNjM4Pjs8VTA2Mzg+O0lHTk9SRTtJR05PUkUKKzxVRkVDNT4JPFUwNjM4Pjs8VUZFQzU+O0lHTk9SRTtJR05PUkUKKzxVRkVDNj4JPFUwNjM4Pjs8VUZFQzY+O0lHTk9SRTtJR05PUkUKKzxVRkVDNz4JPFUwNjM4Pjs8VUZFQzc+O0lHTk9SRTtJR05PUkUKKzxVRkVDOD4JPFUwNjM4Pjs8VUZFQzg+O0lHTk9SRTtJR05PUkUKKzxVMDYzOT4JPFUwNjM5Pjs8VTA2Mzk+O0lHTk9SRTtJR05PUkUKKzxVRkVDOT4JPFUwNjM5Pjs8VUZFQzk+O0lHTk9SRTtJR05PUkUKKzxVRkVDQT4JPFUwNjM5Pjs8VUZFQ0E+O0lHTk9SRTtJR05PUkUKKzxVRkVDQj4JPFUwNjM5Pjs8VUZFQ0I+O0lHTk9SRTtJR05PUkUKKzxVRkVDQz4JPFUwNjM5Pjs8VUZFQ0M+O0lHTk9SRTtJR05PUkUKKzxVMDYzQT4JPFUwNjNBPjs8VTA2M0E+O0lHTk9SRTtJR05PUkUKKzxVRkVDRD4JPFUwNjNBPjs8VUZFQ0Q+O0lHTk9SRTtJR05PUkUKKzxVRkVDRT4JPFUwNjNBPjs8VUZFQ0U+O0lHTk9SRTtJR05PUkUKKzxVRkVDRj4JPFUwNjNBPjs8VUZFQ0Y+O0lHTk9SRTtJR05PUkUKKzxVRkVEMD4JPFUwNjNBPjs8VUZFRDA+O0lHTk9SRTtJR05PUkUKKzxVMDY0MT4JPFUwNjQxPjs8VTA2NDE+O0lHTk9SRTtJR05PUkUKKzxVRkVEMT4JPFUwNjQxPjs8VUZFRDE+O0lHTk9SRTtJR05PUkUKKzxVRkVEMj4JPFUwNjQxPjs8VUZFRDI+O0lHTk9SRTtJR05PUkUKKzxVRkVEMz4JPFUwNjQxPjs8VUZFRDM+O0lHTk9SRTtJR05PUkUKKzxVRkVEND4JPFUwNjQxPjs8VUZFRDQ+O0lHTk9SRTtJR05PUkUKKzxVMDY0Mj4JPFUwNjQyPjs8VTA2NDI+O0lHTk9SRTtJR05PUkUKKzxVRkVENT4JPFUwNjQyPjs8VUZFRDU+O0lHTk9SRTtJR05PUkUKKzxVRkVENj4JPFUwNjQyPjs8VUZFRDY+O0lHTk9SRTtJR05PUkUKKzxVRkVENz4JPFUwNjQyPjs8VUZFRDc+O0lHTk9SRTtJR05PUkUKKzxVRkVEOD4JPFUwNjQyPjs8VUZFRDg+O0lHTk9SRTtJR05PUkUKKzxVMDY0Mz4JPFUwNjQzPjs8VTA2NDM+O0lHTk9SRTtJR05PUkUKKzxVRkVEOT4JPFUwNjQzPjs8VUZFRDk+O0lHTk9SRTtJR05PUkUKKzxVRkVEQT4JPFUwNjQzPjs8VUZFREE+O0lHTk9SRTtJR05PUkUKKzxVRkVEQj4JPFUwNjQzPjs8VUZFREI+O0lHTk9SRTtJR05PUkUKKzxVRkVEQz4JPFUwNjQzPjs8VUZFREM+O0lHTk9SRTtJR05PUkUKKzxVMDY0ND4JPFUwNjQ0Pjs8VTA2NDQ+O0lHTk9SRTtJR05PUkUKKzxVRkVERD4JPFUwNjQ0Pjs8VUZFREQ+O0lHTk9SRTtJR05PUkUKKzxVRkVERT4JPFUwNjQ0Pjs8VUZFREU+O0lHTk9SRTtJR05PUkUKKzxVRkVERj4JPFUwNjQ0Pjs8VUZFREY+O0lHTk9SRTtJR05PUkUKKzxVRkVFMD4JPFUwNjQ0Pjs8VUZFRTA+O0lHTk9SRTtJR05PUkUKKzxVMDY0NT4JPFUwNjQ1Pjs8VTA2NDU+O0lHTk9SRTtJR05PUkUKKzxVRkVFMT4JPFUwNjQ1Pjs8VUZFRTE+O0lHTk9SRTtJR05PUkUKKzxVRkVFMj4JPFUwNjQ1Pjs8VUZFRTI+O0lHTk9SRTtJR05PUkUKKzxVRkVFMz4JPFUwNjQ1Pjs8VUZFRTM+O0lHTk9SRTtJR05PUkUKKzxVRkVFND4JPFUwNjQ1Pjs8VUZFRTQ+O0lHTk9SRTtJR05PUkUKKzxVMDY0Nj4JPFUwNjQ2Pjs8VTA2NDY+O0lHTk9SRTtJR05PUkUKKzxVRkVFNT4JPFUwNjQ2Pjs8VUZFRTU+O0lHTk9SRTtJR05PUkUKKzxVRkVFNj4JPFUwNjQ2Pjs8VUZFRTY+O0lHTk9SRTtJR05PUkUKKzxVRkVFNz4JPFUwNjQ2Pjs8VUZFRTc+O0lHTk9SRTtJR05PUkUKKzxVRkVFOD4JPFUwNjQ2Pjs8VUZFRTg+O0lHTk9SRTtJR05PUkUKKzxVMDY0Nz4JPFUwNjQ3Pjs8VTA2NDc+O0lHTk9SRTtJR05PUkUKKzxVRkVFOT4JPFUwNjQ3Pjs8VUZFRTk+O0lHTk9SRTtJR05PUkUKKzxVRkVFQT4JPFUwNjQ3Pjs8VUZFRUE+O0lHTk9SRTtJR05PUkUKKzxVRkVFQj4JPFUwNjQ3Pjs8VUZFRUI+O0lHTk9SRTtJR05PUkUKKzxVRkVFQz4JPFUwNjQ3Pjs8VUZFRUM+O0lHTk9SRTtJR05PUkUKKzxVMDY0OD4JPFUwNjQ4Pjs8VTA2NDg+O0lHTk9SRTtJR05PUkUKKzxVRkVFRD4JPFUwNjQ4Pjs8VUZFRUQ+O0lHTk9SRTtJR05PUkUKKzxVRkVFRT4JPFUwNjQ4Pjs8VUZFRUU+O0lHTk9SRTtJR05PUkUKKzxVMDY0OT4JPFUwNjQ5Pjs8VTA2NDk+O0lHTk9SRTtJR05PUkUKKzxVRkVFRj4JPFUwNjQ5Pjs8VUZFRUY+O0lHTk9SRTtJR05PUkUKKzxVRkVGMD4JPFUwNjQ5Pjs8VUZFRjA+O0lHTk9SRTtJR05PUkUKKzxVMDY0QT4JPFUwNjRBPjs8VTA2NEE+O0lHTk9SRTtJR05PUkUKKzxVRkVGMT4JPFUwNjRBPjs8VUZFRjE+O0lHTk9SRTtJR05PUkUKKzxVRkVGMj4JPFUwNjRBPjs8VUZFRjI+O0lHTk9SRTtJR05PUkUKKzxVRkVGMz4JPFUwNjRBPjs8VUZFRjM+O0lHTk9SRTtJR05PUkUKKzxVRkVGND4JPFUwNjRBPjs8VUZFRjQ+O0lHTk9SRTtJR05PUkUKKworPFUwNjRCPglJR05PUkU7SUdOT1JFOzxVMDY0Qj47SUdOT1JFCis8VTA2NEM+CUlHTk9SRTtJR05PUkU7PFUwNjRDPjtJR05PUkUKKzxVMDY0RD4JSUdOT1JFO0lHTk9SRTs8VTA2NEQ+O0lHTk9SRQorPFUwNjRFPglJR05PUkU7SUdOT1JFOzxVMDY0RT47SUdOT1JFCis8VTA2NEY+CUlHTk9SRTtJR05PUkU7PFUwNjRGPjtJR05PUkUKKzxVMDY1MD4JSUdOT1JFO0lHTk9SRTs8VTA2NTA+O0lHTk9SRQorPFUwNjUxPglJR05PUkU7SUdOT1JFOzxVMDY1MT47SUdOT1JFCis8VUZFN0Q+CUlHTk9SRTtJR05PUkU7PFVGRTdEPjtJR05PUkUKKzxVMDY1Mj4JSUdOT1JFO0lHTk9SRTs8VTA2NTI+O0lHTk9SRQorCis8VTA2NjA+CTxVMDAzMD47PFUwNjYwPjtJR05PUkU7SUdOT1JFCis8VTA2NjE+CTxVMDAzMT47PFUwNjYxPjtJR05PUkU7SUdOT1JFCis8VTA2NjI+CTxVMDAzMj47PFUwNjYyPjtJR05PUkU7SUdOT1JFCis8VTA2NjM+CTxVMDAzMz47PFUwNjYzPjtJR05PUkU7SUdOT1JFCis8VTA2NjQ+CTxVMDAzND47PFUwNjY0PjtJR05PUkU7SUdOT1JFCis8VTA2NjU+CTxVMDAzNT47PFUwNjY1PjtJR05PUkU7SUdOT1JFCis8VTA2NjY+CTxVMDAzNj47PFUwNjY2PjtJR05PUkU7SUdOT1JFCis8VTA2Njc+CTxVMDAzNz47PFUwNjY3PjtJR05PUkU7SUdOT1JFCis8VTA2Njg+CTxVMDAzOD47PFUwNjY4PjtJR05PUkU7SUdOT1JFCis8VTA2Njk+CTxVMDAzOT47PFUwNjY5PjtJR05PUkU7SUdOT1JFCisKKzxVRkVGNT4JIjxVMDY0ND48VTA2MjI+IjsiPFUwNjQ0PjxVMDYyMj4iOyI8VUZFRjU+PFVGRUY1PiI7SUdOT1JFCis8VUZFRjY+CSI8VTA2NDQ+PFUwNjIyPiI7IjxVMDY0ND48VUZFODI+IjsiPFVGRUY2PjxVRkVGNj4iO0lHTk9SRQorPFVGRUY3PgkiPFUwNjQ0PjxVMDYyMz4iOyI8VTA2NDQ+PFUwNjIzPiI7IjxVRkVGNz48VUZFRjc+IjtJR05PUkUKKzxVRkVGOD4JIjxVMDY0ND48VTA2MjM+IjsiPFUwNjQ0PjxVRkU4ND4iOyI8VUZFRjg+PFVGRUY4PiI7SUdOT1JFCis8VUZFRjk+CSI8VTA2NDQ+PFUwNjI1PiI7IjxVMDY0ND48VTA2MjU+IjsiPFVGRUY5PjxVRkVGOT4iO0lHTk9SRQorPFVGRUZBPgkiPFUwNjQ0PjxVMDYyNT4iOyI8VTA2NDQ+PFVGRTg4PiI7IjxVRkVGQT48VUZFRkE+IjtJR05PUkUKKzxVRkVGQj4JIjxVMDY0ND48VTA2Mjc+IjsiPFUwNjQ0PjxVRkU4RD4iOyI8VUZFRkI+PFVGRUZCPiI7SUdOT1JFCis8VUZFRkM+CSI8VTA2NDQ+PFUwNjI3PiI7IjxVMDY0ND48VUZFOEU+IjsiPFVGRUZDPjxVRkVGQz4iO0lHTk9SRQorCislIGthdGFrYW5hL2hpcmFnYW5hIHNvcnRpbmcKKyUgYmFzZSBpcyBrYXRha2FuYSwgYXMgdGhpcyBpcyBwcmVzZW50IGluIG1vc3QgY2hhcnNldHMKKyUgbm9ybWFsIGJlZm9yZSB2b2ljZWQgYmVmb3JlIHNlbWktdm9pY2VkCislIHNtYWxsIHZvY2FscyBiZWZvcmUgbm9ybWFsIHZvY2FscworJSBrYXRha2FuYSBiZWZvcmUgaGlyYWdhbmEKKworPFUzMEExPgk8VTMwQTE+OzxVMzBBMT47SUdOT1JFO0lHTk9SRQorPFUzMDQxPgk8VTMwQTE+OzxVMzA0MT47SUdOT1JFO0lHTk9SRQorPFUzMEEyPgk8VTMwQTE+OzxVMzBBMj47SUdOT1JFO0lHTk9SRQorPFUzMDQyPgk8VTMwQTE+OzxVMzA0Mj47SUdOT1JFO0lHTk9SRQorPFUzMEEzPgk8VTMwQTM+OzxVMzBBMz47SUdOT1JFO0lHTk9SRQorPFUzMDQzPgk8VTMwQTM+OzxVMzA0Mz47SUdOT1JFO0lHTk9SRQorPFUzMEE0Pgk8VTMwQTM+OzxVMzBBND47SUdOT1JFO0lHTk9SRQorPFUzMDQ0Pgk8VTMwQTM+OzxVMzA0ND47SUdOT1JFO0lHTk9SRQorPFUzMEE1Pgk8VTMwQTU+OzxVMzBBNT47SUdOT1JFO0lHTk9SRQorPFUzMDQ1Pgk8VTMwQTU+OzxVMzA0NT47SUdOT1JFO0lHTk9SRQorPFUzMEE2Pgk8VTMwQTU+OzxVMzBBNj47SUdOT1JFO0lHTk9SRQorPFUzMDQ2Pgk8VTMwQTU+OzxVMzA0Nj47SUdOT1JFO0lHTk9SRQorPFUzMEY0Pgk8VTMwQTU+OzxVMzBGND47SUdOT1JFO0lHTk9SRQorPFUzMEE3Pgk8VTMwQTc+OzxVMzBBNz47SUdOT1JFO0lHTk9SRQorPFUzMDQ3Pgk8VTMwQTc+OzxVMzA0Nz47SUdOT1JFO0lHTk9SRQorPFUzMEE4Pgk8VTMwQTc+OzxVMzBBOD47SUdOT1JFO0lHTk9SRQorPFUzMDQ4Pgk8VTMwQTc+OzxVMzA0OD47SUdOT1JFO0lHTk9SRQorPFUzMEE5Pgk8VTMwQTk+OzxVMzBBOT47SUdOT1JFO0lHTk9SRQorPFUzMDQ5Pgk8VTMwQTk+OzxVMzA0OT47SUdOT1JFO0lHTk9SRQorPFUzMEFBPgk8VTMwQTk+OzxVMzBBQT47SUdOT1JFO0lHTk9SRQorPFUzMDRBPgk8VTMwQTk+OzxVMzA0QT47SUdOT1JFO0lHTk9SRQorPFUzMEY1Pgk8VTMwRjU+OzxVMzBGNT47SUdOT1JFO0lHTk9SRQorPFUzMEFCPgk8VTMwRjU+OzxVMzBBQj47SUdOT1JFO0lHTk9SRQorPFUzMDRCPgk8VTMwRjU+OzxVMzA0Qj47SUdOT1JFO0lHTk9SRQorPFUzMEFDPgk8VTMwRjU+OzxVMzBBQz47SUdOT1JFO0lHTk9SRQorPFUzMDRDPgk8VTMwRjU+OzxVMzA0Qz47SUdOT1JFO0lHTk9SRQorPFUzMEFEPgk8VTMwQUQ+OzxVMzBBRD47SUdOT1JFO0lHTk9SRQorPFUzMDREPgk8VTMwQUQ+OzxVMzA0RD47SUdOT1JFO0lHTk9SRQorPFUzMEFFPgk8VTMwQUQ+OzxVMzBBRT47SUdOT1JFO0lHTk9SRQorPFUzMDRFPgk8VTMwQUQ+OzxVMzA0RT47SUdOT1JFO0lHTk9SRQorPFUzMEFGPgk8VTMwQUY+OzxVMzBBRj47SUdOT1JFO0lHTk9SRQorPFUzMDRGPgk8VTMwQUY+OzxVMzA0Rj47SUdOT1JFO0lHTk9SRQorPFUzMEIwPgk8VTMwQUY+OzxVMzBCMD47SUdOT1JFO0lHTk9SRQorPFUzMDUwPgk8VTMwQUY+OzxVMzA1MD47SUdOT1JFO0lHTk9SRQorPFUzMEY2Pgk8VTMwRjY+OzxVMzBGNj47SUdOT1JFO0lHTk9SRQorPFUzMEIxPgk8VTMwRjY+OzxVMzBCMT47SUdOT1JFO0lHTk9SRQorPFUzMDUxPgk8VTMwRjY+OzxVMzA1MT47SUdOT1JFO0lHTk9SRQorPFUzMEIyPgk8VTMwRjY+OzxVMzBCMj47SUdOT1JFO0lHTk9SRQorPFUzMDUyPgk8VTMwRjY+OzxVMzA1Mj47SUdOT1JFO0lHTk9SRQorPFUzMEIzPgk8VTMwQjM+OzxVMzBCMz47SUdOT1JFO0lHTk9SRQorPFUzMDUzPgk8VTMwQjM+OzxVMzA1Mz47SUdOT1JFO0lHTk9SRQorPFUzMEI0Pgk8VTMwQjM+OzxVMzBCND47SUdOT1JFO0lHTk9SRQorPFUzMDU0Pgk8VTMwQjM+OzxVMzA1ND47SUdOT1JFO0lHTk9SRQorPFUzMEI1Pgk8VTMwQjU+OzxVMzBCNT47SUdOT1JFO0lHTk9SRQorPFUzMDU1Pgk8VTMwQjU+OzxVMzA1NT47SUdOT1JFO0lHTk9SRQorPFUzMEI2Pgk8VTMwQjU+OzxVMzBCNj47SUdOT1JFO0lHTk9SRQorPFUzMDU2Pgk8VTMwQjU+OzxVMzA1Nj47SUdOT1JFO0lHTk9SRQorPFUzMEI3Pgk8VTMwQjc+OzxVMzBCNz47SUdOT1JFO0lHTk9SRQorPFUzMDU3Pgk8VTMwQjc+OzxVMzA1Nz47SUdOT1JFO0lHTk9SRQorPFUzMEI4Pgk8VTMwQjc+OzxVMzBCOD47SUdOT1JFO0lHTk9SRQorPFUzMDU4Pgk8VTMwQjc+OzxVMzA1OD47SUdOT1JFO0lHTk9SRQorPFUzMEI5Pgk8VTMwQjk+OzxVMzBCOT47SUdOT1JFO0lHTk9SRQorPFUzMDU5Pgk8VTMwQjk+OzxVMzA1OT47SUdOT1JFO0lHTk9SRQorPFUzMEJBPgk8VTMwQjk+OzxVMzBCQT47SUdOT1JFO0lHTk9SRQorPFUzMDVBPgk8VTMwQjk+OzxVMzA1QT47SUdOT1JFO0lHTk9SRQorPFUzMEJCPgk8VTMwQkI+OzxVMzBCQj47SUdOT1JFO0lHTk9SRQorPFUzMDVCPgk8VTMwQkI+OzxVMzA1Qj47SUdOT1JFO0lHTk9SRQorPFUzMEJDPgk8VTMwQkI+OzxVMzBCQz47SUdOT1JFO0lHTk9SRQorPFUzMDVDPgk8VTMwQkI+OzxVMzA1Qz47SUdOT1JFO0lHTk9SRQorPFUzMEJEPgk8VTMwQkQ+OzxVMzBCRD47SUdOT1JFO0lHTk9SRQorPFUzMDVEPgk8VTMwQkQ+OzxVMzA1RD47SUdOT1JFO0lHTk9SRQorPFUzMEJFPgk8VTMwQkQ+OzxVMzBCRT47SUdOT1JFO0lHTk9SRQorPFUzMDVFPgk8VTMwQkQ+OzxVMzA1RT47SUdOT1JFO0lHTk9SRQorPFUzMEJGPgk8VTMwQkY+OzxVMzBCRj47SUdOT1JFO0lHTk9SRQorPFUzMDVGPgk8VTMwQkY+OzxVMzA1Rj47SUdOT1JFO0lHTk9SRQorPFUzMEMwPgk8VTMwQkY+OzxVMzBDMD47SUdOT1JFO0lHTk9SRQorPFUzMDYwPgk8VTMwQkY+OzxVMzA2MD47SUdOT1JFO0lHTk9SRQorPFUzMEMxPgk8VTMwQzE+OzxVMzBDMT47SUdOT1JFO0lHTk9SRQorPFUzMDYxPgk8VTMwQzE+OzxVMzA2MT47SUdOT1JFO0lHTk9SRQorPFUzMEMyPgk8VTMwQzE+OzxVMzBDMj47SUdOT1JFO0lHTk9SRQorPFUzMDYyPgk8VTMwQzE+OzxVMzA2Mj47SUdOT1JFO0lHTk9SRQorPFUzMEMzPgk8VTMwQzM+OzxVMzBDMz47SUdOT1JFO0lHTk9SRQorPFUzMDYzPgk8VTMwQzM+OzxVMzA2Mz47SUdOT1JFO0lHTk9SRQorPFUzMEM0Pgk8VTMwQzM+OzxVMzBDND47SUdOT1JFO0lHTk9SRQorPFUzMDY0Pgk8VTMwQzM+OzxVMzA2ND47SUdOT1JFO0lHTk9SRQorPFUzMEM1Pgk8VTMwQzM+OzxVMzBDNT47SUdOT1JFO0lHTk9SRQorPFUzMDY1Pgk8VTMwQzM+OzxVMzA2NT47SUdOT1JFO0lHTk9SRQorPFUzMEM2Pgk8VTMwQzY+OzxVMzBDNj47SUdOT1JFO0lHTk9SRQorPFUzMDY2Pgk8VTMwQzY+OzxVMzA2Nj47SUdOT1JFO0lHTk9SRQorPFUzMEM3Pgk8VTMwQzY+OzxVMzBDNz47SUdOT1JFO0lHTk9SRQorPFUzMDY3Pgk8VTMwQzY+OzxVMzA2Nz47SUdOT1JFO0lHTk9SRQorPFUzMEM4Pgk8VTMwQzg+OzxVMzBDOD47SUdOT1JFO0lHTk9SRQorPFUzMDY4Pgk8VTMwQzg+OzxVMzA2OD47SUdOT1JFO0lHTk9SRQorPFUzMEM5Pgk8VTMwQzg+OzxVMzBDOT47SUdOT1JFO0lHTk9SRQorPFUzMDY5Pgk8VTMwQzg+OzxVMzA2OT47SUdOT1JFO0lHTk9SRQorPFUzMENBPgk8VTMwQ0E+OzxVMzBDQT47SUdOT1JFO0lHTk9SRQorPFUzMDZBPgk8VTMwQ0E+OzxVMzA2QT47SUdOT1JFO0lHTk9SRQorPFUzMENCPgk8VTMwQ0I+OzxVMzBDQj47SUdOT1JFO0lHTk9SRQorPFUzMDZCPgk8VTMwQ0I+OzxVMzA2Qj47SUdOT1JFO0lHTk9SRQorPFUzMENDPgk8VTMwQ0M+OzxVMzBDQz47SUdOT1JFO0lHTk9SRQorPFUzMDZDPgk8VTMwQ0M+OzxVMzA2Qz47SUdOT1JFO0lHTk9SRQorPFUzMENEPgk8VTMwQ0Q+OzxVMzBDRD47SUdOT1JFO0lHTk9SRQorPFUzMDZEPgk8VTMwQ0Q+OzxVMzA2RD47SUdOT1JFO0lHTk9SRQorPFUzMENFPgk8VTMwQ0U+OzxVMzBDRT47SUdOT1JFO0lHTk9SRQorPFUzMDZFPgk8VTMwQ0U+OzxVMzA2RT47SUdOT1JFO0lHTk9SRQorPFUzMENGPgk8VTMwQ0Y+OzxVMzBDRj47SUdOT1JFO0lHTk9SRQorPFUzMDZGPgk8VTMwQ0Y+OzxVMzA2Rj47SUdOT1JFO0lHTk9SRQorPFUzMEQwPgk8VTMwQ0Y+OzxVMzBEMD47SUdOT1JFO0lHTk9SRQorPFUzMDcwPgk8VTMwQ0Y+OzxVMzA3MD47SUdOT1JFO0lHTk9SRQorPFUzMEQxPgk8VTMwQ0Y+OzxVMzBEMT47SUdOT1JFO0lHTk9SRQorPFUzMDcxPgk8VTMwQ0Y+OzxVMzA3MT47SUdOT1JFO0lHTk9SRQorPFUzMEQyPgk8VTMwRDI+OzxVMzBEMj47SUdOT1JFO0lHTk9SRQorPFUzMDcyPgk8VTMwRDI+OzxVMzA3Mj47SUdOT1JFO0lHTk9SRQorPFUzMEQzPgk8VTMwRDI+OzxVMzBEMz47SUdOT1JFO0lHTk9SRQorPFUzMDczPgk8VTMwRDI+OzxVMzA3Mz47SUdOT1JFO0lHTk9SRQorPFUzMEQ0Pgk8VTMwRDI+OzxVMzBEND47SUdOT1JFO0lHTk9SRQorPFUzMDc0Pgk8VTMwRDI+OzxVMzA3ND47SUdOT1JFO0lHTk9SRQorPFUzMEQ1Pgk8VTMwRDU+OzxVMzBENT47SUdOT1JFO0lHTk9SRQorPFUzMDc1Pgk8VTMwRDU+OzxVMzA3NT47SUdOT1JFO0lHTk9SRQorPFUzMEQ2Pgk8VTMwRDU+OzxVMzBENj47SUdOT1JFO0lHTk9SRQorPFUzMDc2Pgk8VTMwRDU+OzxVMzA3Nj47SUdOT1JFO0lHTk9SRQorPFUzMEQ3Pgk8VTMwRDU+OzxVMzBENz47SUdOT1JFO0lHTk9SRQorPFUzMDc3Pgk8VTMwRDU+OzxVMzA3Nz47SUdOT1JFO0lHTk9SRQorPFUzMEQ4Pgk8VTMwRDg+OzxVMzBEOD47SUdOT1JFO0lHTk9SRQorPFUzMDc4Pgk8VTMwRDg+OzxVMzA3OD47SUdOT1JFO0lHTk9SRQorPFUzMEQ5Pgk8VTMwRDg+OzxVMzBEOT47SUdOT1JFO0lHTk9SRQorPFUzMDc5Pgk8VTMwRDg+OzxVMzA3OT47SUdOT1JFO0lHTk9SRQorPFUzMERBPgk8VTMwRDg+OzxVMzBEQT47SUdOT1JFO0lHTk9SRQorPFUzMDdBPgk8VTMwRDg+OzxVMzA3QT47SUdOT1JFO0lHTk9SRQorPFUzMERCPgk8VTMwREI+OzxVMzBEQj47SUdOT1JFO0lHTk9SRQorPFUzMDdCPgk8VTMwREI+OzxVMzA3Qj47SUdOT1JFO0lHTk9SRQorPFUzMERDPgk8VTMwREI+OzxVMzBEQz47SUdOT1JFO0lHTk9SRQorPFUzMDdDPgk8VTMwREI+OzxVMzA3Qz47SUdOT1JFO0lHTk9SRQorPFUzMEREPgk8VTMwREI+OzxVMzBERD47SUdOT1JFO0lHTk9SRQorPFUzMDdEPgk8VTMwREI+OzxVMzA3RD47SUdOT1JFO0lHTk9SRQorPFUzMERFPgk8VTMwREU+OzxVMzBERT47SUdOT1JFO0lHTk9SRQorPFUzMDdFPgk8VTMwREU+OzxVMzA3RT47SUdOT1JFO0lHTk9SRQorPFUzMERGPgk8VTMwREY+OzxVMzBERj47SUdOT1JFO0lHTk9SRQorPFUzMDdGPgk8VTMwREY+OzxVMzA3Rj47SUdOT1JFO0lHTk9SRQorPFUzMEUwPgk8VTMwRTA+OzxVMzBFMD47SUdOT1JFO0lHTk9SRQorPFUzMDgwPgk8VTMwRTA+OzxVMzA4MD47SUdOT1JFO0lHTk9SRQorPFUzMEUxPgk8VTMwRTE+OzxVMzBFMT47SUdOT1JFO0lHTk9SRQorPFUzMDgxPgk8VTMwRTE+OzxVMzA4MT47SUdOT1JFO0lHTk9SRQorPFUzMEUyPgk8VTMwRTI+OzxVMzBFMj47SUdOT1JFO0lHTk9SRQorPFUzMDgyPgk8VTMwRTI+OzxVMzA4Mj47SUdOT1JFO0lHTk9SRQorPFUzMEUzPgk8VTMwRTM+OzxVMzBFMz47SUdOT1JFO0lHTk9SRQorPFUzMDgzPgk8VTMwRTM+OzxVMzA4Mz47SUdOT1JFO0lHTk9SRQorPFUzMEU0Pgk8VTMwRTM+OzxVMzBFND47SUdOT1JFO0lHTk9SRQorPFUzMDg0Pgk8VTMwRTM+OzxVMzA4ND47SUdOT1JFO0lHTk9SRQorPFUzMEU1Pgk8VTMwRTU+OzxVMzBFNT47SUdOT1JFO0lHTk9SRQorPFUzMDg1Pgk8VTMwRTU+OzxVMzA4NT47SUdOT1JFO0lHTk9SRQorPFUzMEU2Pgk8VTMwRTU+OzxVMzBFNj47SUdOT1JFO0lHTk9SRQorPFUzMDg2Pgk8VTMwRTU+OzxVMzA4Nj47SUdOT1JFO0lHTk9SRQorPFUzMEU3Pgk8VTMwRTc+OzxVMzBFNz47SUdOT1JFO0lHTk9SRQorPFUzMDg3Pgk8VTMwRTc+OzxVMzA4Nz47SUdOT1JFO0lHTk9SRQorPFUzMEU4Pgk8VTMwRTc+OzxVMzBFOD47SUdOT1JFO0lHTk9SRQorPFUzMDg4Pgk8VTMwRTc+OzxVMzA4OD47SUdOT1JFO0lHTk9SRQorPFUzMEU5Pgk8VTMwRTk+OzxVMzBFOT47SUdOT1JFO0lHTk9SRQorPFUzMDg5Pgk8VTMwRTk+OzxVMzA4OT47SUdOT1JFO0lHTk9SRQorPFUzMEVBPgk8VTMwRUE+OzxVMzBFQT47SUdOT1JFO0lHTk9SRQorPFUzMDhBPgk8VTMwRUE+OzxVMzA4QT47SUdOT1JFO0lHTk9SRQorPFUzMEVCPgk8VTMwRUI+OzxVMzBFQj47SUdOT1JFO0lHTk9SRQorPFUzMDhCPgk8VTMwRUI+OzxVMzA4Qj47SUdOT1JFO0lHTk9SRQorPFUzMEVDPgk8VTMwRUM+OzxVMzBFQz47SUdOT1JFO0lHTk9SRQorPFUzMDhDPgk8VTMwRUM+OzxVMzA4Qz47SUdOT1JFO0lHTk9SRQorPFUzMEVEPgk8VTMwRUQ+OzxVMzBFRD47SUdOT1JFO0lHTk9SRQorPFUzMDhEPgk8VTMwRUQ+OzxVMzA4RD47SUdOT1JFO0lHTk9SRQorPFUzMEVFPgk8VTMwRUU+OzxVMzBFRT47SUdOT1JFO0lHTk9SRQorPFUzMDhFPgk8VTMwRUU+OzxVMzA4RT47SUdOT1JFO0lHTk9SRQorPFUzMEVGPgk8VTMwRUU+OzxVMzBFRj47SUdOT1JFO0lHTk9SRQorPFUzMDhGPgk8VTMwRUU+OzxVMzA4Rj47SUdOT1JFO0lHTk9SRQorPFUzMEYwPgk8VTMwRjA+OzxVMzBGMD47SUdOT1JFO0lHTk9SRQorPFUzMDkwPgk8VTMwRjA+OzxVMzA5MD47SUdOT1JFO0lHTk9SRQorPFUzMEYxPgk8VTMwRjE+OzxVMzBGMT47SUdOT1JFO0lHTk9SRQorPFUzMDkxPgk8VTMwRjE+OzxVMzA5MT47SUdOT1JFO0lHTk9SRQorPFUzMEYyPgk8VTMwRjI+OzxVMzBGMj47SUdOT1JFO0lHTk9SRQorPFUzMDkyPgk8VTMwRjI+OzxVMzA5Mj47SUdOT1JFO0lHTk9SRQorPFUzMEYzPgk8VTMwRjM+OzxVMzBGMz47SUdOT1JFO0lHTk9SRQorPFUzMDkzPgk8VTMwRjM+OzxVMzA5Mz47SUdOT1JFO0lHTk9SRQorCitvcmRlcl9lbmQKKworRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNjQ+PFUwMDQ0PjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgICAgICAiPFUwMDQ4PjxVMDA1Mj48VTAwNEI+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICAgIjxVMDA0Qj48VTAwNkU+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICAgICAiPFUwMDJDPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAgICAgIjxVMDAyMD4iCittb25fZ3JvdXBpbmcgICAgICAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgICAgICAxCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludCAgICAgICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgICAgIiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgICAgMDswCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCisKK2FiZGF5ICAgIjxVMDA0RT48VTAwNjU+PFUwMDY0PiI7IjxVMDA1MD48VTAwNkY+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDU1PjxVMDA3ND48VTAwNkY+IjsiPFUwMDUzPjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICI8VTAxMEM+PFUwMDY1PjxVMDA3ND4iOyI8VTAwNTA+PFUwMDY1PjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNzU+PFUwMDYyPiIKK2RheSAgICAgIjxVMDA0RT48VTAwNjU+PFUwMDY0PjxVMDA2QT48VTAwNjU+PFUwMDZDPjxVMDA2QT48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNTA+PFUwMDZGPjxVMDA2RT48VTAwNjU+PFUwMDY0PjxVMDA2QT48VTAwNjU+PFUwMDZDPjxVMDA2QT48VTAwNjE+PFUwMDZCPiI7LworICAgICAgICAiPFUwMDU1PjxVMDA3ND48VTAwNkY+PFUwMDcyPjxVMDA2MT48VTAwNkI+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDcyPjxVMDA2OT48VTAwNkE+PFUwMDY1PjxVMDA2ND48VTAwNjE+IjsvCisgICAgICAgICI8VTAxMEM+PFUwMDY1PjxVMDA3ND48VTAwNzY+PFUwMDcyPjxVMDA3ND48VTAwNjE+PFUwMDZCPiI7LworICAgICAgICAiPFUwMDUwPjxVMDA2NT48VTAwNzQ+PFUwMDYxPjxVMDA2Qj4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNzU+PFUwMDYyPjxVMDA2Rj48VTAwNzQ+PFUwMDYxPiIKK2FibW9uICAgIjxVMDA1Mz48VTAwNjk+PFUwMDZBPiI7IjxVMDA1Nj48VTAwNjU+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDRGPjxVMDE3RT48VTAwNzU+IjsiPFUwMDU0PjxVMDA3Mj48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDc2PjxVMDA2OT4iOyI8VTAwNEM+PFUwMDY5PjxVMDA3MD4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNzI+PFUwMDcwPiI7IjxVMDA0Qj48VTAwNkY+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDUyPjxVMDA3NT48VTAwNkE+IjsiPFUwMDRDPjxVMDA2OT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDc0PjxVMDA3NT4iOyI8VTAwNTA+PFUwMDcyPjxVMDA2Rj4iCittb24gICAgICI8VTAwNTM+PFUwMDY5PjxVMDA2QT48VTAwNjU+PFUwMTBEPjxVMDA2MT48VTAwNkU+PFUwMDZBPiI7LworICAgICAgICAiPFUwMDU2PjxVMDA2NT48VTAwNkM+PFUwMDZBPjxVMDA2MT48VTAxMEQ+PFUwMDYxPiI7LworICAgICAgICAiPFUwMDRGPjxVMDE3RT48VTAwNzU+PFUwMDZBPjxVMDA2MT48VTAwNkI+IjsvCisgICAgICAgICI8VTAwNTQ+PFUwMDcyPjxVMDA2MT48VTAwNzY+PFUwMDYxPjxVMDA2RT48VTAwNkE+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDc2PjxVMDA2OT48VTAwNjI+PFUwMDYxPjxVMDA2RT48VTAwNkE+IjsvCisgICAgICAgICI8VTAwNEM+PFUwMDY5PjxVMDA3MD48VTAwNjE+PFUwMDZFPjxVMDA2QT4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNzI+PFUwMDcwPjxVMDA2MT48VTAwNkU+PFUwMDZBPiI7LworICAgICAgICAiPFUwMDRCPjxVMDA2Rj48VTAwNkM+PFUwMDZGPjxVMDA3Nj48VTAwNkY+PFUwMDdBPiI7LworICAgICAgICAiPFUwMDUyPjxVMDA3NT48VTAwNkE+PFUwMDYxPjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA0Qz48VTAwNjk+PFUwMDczPjxVMDA3ND48VTAwNkY+PFUwMDcwPjxVMDA2MT48VTAwNjQ+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDc0PjxVMDA3NT48VTAwNjQ+PFUwMDY1PjxVMDA2RT48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNTA+PFUwMDcyPjxVMDA2Rj48VTAwNzM+PFUwMDY5PjxVMDA2RT48VTAwNjE+PFUwMDYzPiIKK2RfdF9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+IgorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkU+PFUwMDI1PjxVMDA2RD48VTAwMkU+PFUwMDI1PjxVMDA1OT4iCit0X2ZtdCAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgIiI7IiIKK3RfZm10X2FtcG0gIiIKK2RhdGVfZm10ICAgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCislIEZJWE1FCitoZWlnaHQgICAyOTcKKyUgRklYTUUKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzM+PFUwMDM4PjxVMDAzNT4iCitpbnRfc2VsZWN0ICAgICAiPFUwMDMwPjxVMDAzMD4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCislIEZJWE1FCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICI8VTAwNDg+PFUwMDUyPiIKK2NvdW50cnlfYWIzICI8VTAwNDg+PFUwMDUyPjxVMDA1Nj4iCitjb3VudHJ5X251bSAxOTEKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9oc2JfREUgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9oc2JfREUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAzNTVhZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2hzYl9ERQpAQCAtMCwwICsxLDIyMTYgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBVcHBlciBTb3JiaWFuIExhbmd1YWdlIExvY2FsZSBmb3IgR2VybWFueQorJSBieSBBbmRyemVqIEtyenlzenRvZm93aWN6IDxhbmtyeSBhdCBtaWYgcGcgZ2RhIHBsPgorJSBTb3VyY2U6IGluZm9ybWF0aW9uIGZyb20gTWljaGFlbCBXb2xmIDxtaWx1cG8gYXQgc29yYnppbGxhIGRlPgorJQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiVXBwZXIgU29yYmlhbiBsb2NhbGUgZm9yIEdlcm1hbnkiCitzb3VyY2UgICAgICJJbmZvcm1hdGlvbiBmcm9tIE1pY2hhZWwgV29sZiIKK2FkZHJlc3MgICAgIiIKK2NvbnRhY3QgICAgIkFuZHJ6ZWogS3J6eXN6dG9mb3dpY3oiCitlbWFpbCAgICAgICJhbmtyeUBtaWYucGcuZ2RhLnBsIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiVXBwZXIgU29yYmlhbiIKK3RlcnJpdG9yeSAgIkdlcm1hbnkiCityZXZpc2lvbiAgICIwLjEiCitkYXRlICAgICAgICIyMDA0LTA5LTA5IgorJQorY2F0ZWdvcnkgICJpMThuOjE5OTciO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImkxOG46MTk5NyI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiaTE4bjoxOTk3IjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImkxOG46MTk5NyI7TENfVElNRQorY2F0ZWdvcnkgICJpMThuOjE5OTciO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiaTE4bjoxOTk3IjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJpMThuOjE5OTciO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImkxOG46MTk5NyI7TENfUEFQRVIKK2NhdGVnb3J5ICAiaTE4bjoxOTk3IjtMQ19OQU1FCitjYXRlZ29yeSAgImkxOG46MTk5NyI7TENfQUREUkVTUworY2F0ZWdvcnkgICJpMThuOjE5OTciO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ09MTEFURQorY29sbGF0aW5nLWVsZW1lbnQgPEQtWic+IGZyb20gIjxVMDA0ND48VTAxNzk+IgorY29sbGF0aW5nLWVsZW1lbnQgPEQteic+IGZyb20gIjxVMDA0ND48VTAxN0E+IgorY29sbGF0aW5nLWVsZW1lbnQgPGQtWic+IGZyb20gIjxVMDA2ND48VTAxNzk+IgorY29sbGF0aW5nLWVsZW1lbnQgPGQteic+IGZyb20gIjxVMDA2ND48VTAxN0E+IgorY29sbGF0aW5nLWVsZW1lbnQgPEMtSD4gZnJvbSAiPFUwMDQzPjxVMDA0OD4iCitjb2xsYXRpbmctZWxlbWVudCA8Qy1oPiBmcm9tICI8VTAwNDM+PFUwMDY4PiIKK2NvbGxhdGluZy1lbGVtZW50IDxjLUg+IGZyb20gIjxVMDA2Mz48VTAwNDg+IgorY29sbGF0aW5nLWVsZW1lbnQgPGMtaD4gZnJvbSAiPFUwMDYzPjxVMDA2OD4iCisKKyUgQmFzZSBjb2xsYXRpb24gc2NoZW1lOiAxOTk0LTAzLTIyCisKKyUgT3JkZXJpbmcgYWxnb3JpdGhtOgorJSAgMS4gU3BhY2VzIGFuZCBoeXBoZW4gKGJ1dCBub3Qgc29mdAorJSAgICAgaHlwaGVuKSBiZWZvcmUgcHVuY3R1YXRpb24KKyUgICAgIGNoYXJhY3RlcnMsIHB1bmN0dWF0aW9uIGNoYXJhY3RlcnMKKyUgICAgIGJlZm9yZSBudW1iZXJzLAorJSAgICAgbnVtYmVycyBiZWZvcmUgbGV0dGVycy4KKyUgIDIuIExldHRlcnMgd2l0aCBkaWFjcml0aWNhbCBtYXJrcyBhcmUKKyUgICAgIG1lbWJlcnMgb2YgZXF1aXZhbGVuY2UgY2xhc3NlcworJSAgMy4gQSBkaXN0aW5jdGlvbiBpcyBtYWRlIHdpdGggcmVnYXJkcworJSAgICAgdG8gY2FzZSBhcyBub3RlZCBiZWxvdy4KKyUgIDQuIFNwZWNpYWwgY2hhcmFjdGVycyBhcmUgaWdub3JlZAorJSAgICAgd2hlbiBjb21wYXJpbmcgbGV0dGVycywgYnV0IHRoZW4KKyUgICAgIHRoZXkgYXJlIGNvbnNpZGVyZWQKKyUgIDUuIFRoZSBhbHBoYWJldHMgYXJlIHNvcnRlZCBpbiBvcmRlcgorJSAgICAgb2YgZmlyc3QgYXBwZWFyYW5jZSBpbiBJU08gMTA2NDY6CislICAgICBMYXRpbiwgR3JlZWssIEN5cmlsbGljLCBldGMuCislCislIEFjY29yZGluZyB0byBHcmVlayBzcGVjaWZpY2F0aW9ucywKKyUgdGhlIHN0ZXBzIDIuIGFuZCAzLiBhYm92ZSBhcmUgcmV2ZXJzZWQKKyUgZm9yIHRoZSBHcmVlayBzY3JpcHQKKworJSBjb2xsYXRpbmcgc3ltYm9scworCislIFRoZSBjb2xsYXRpbmcgc3ltYm9sIG5hbWluZyBpcworJSBtb3N0bHkgdGFrZW4gZnJvbSBJU08gMTA2NDYtMSwKKyUgZm9yIGV4YW1wbGUgdGhlIGNhc2UgYW5kIGFjY2VudAorJSBuYW1lcyBhcmUgZnJvbSB0aGlzIHN0YW5kYXJkLgorCitjb2xsYXRpbmctc3ltYm9sIDxDQVBJVEFMPgorY29sbGF0aW5nLXN5bWJvbCA8Q0FQSVRBTC1TTUFMTD4KK2NvbGxhdGluZy1zeW1ib2wgPFNNQUxMLUNBUElUQUw+Citjb2xsYXRpbmctc3ltYm9sIDxTTUFMTD4KKworJSA8Q0FQSVRBTC1TTUFMTD4gYW5kIDxTTUFMTC1DQVBJVEFMPgorJSBhcmUgZm9yIGNhc2VzIGxpa2UgRGFuaXNoIDxVMDA0MT48VTAwNjE+CislIGFuZCBTcGFuaXNoIDxVMDA0Mz48VTAwNjg+IGJlaW5nIHRyZWF0ZWQKKyUgYXMgb25lIGxldHRlci4KKworJSBUaGUgPGE4PiAuLi4uLi4gPHo4PiBjb2xsYXRpbmcKKyUgc3ltYm9scyBoYXZlIGRlZmluZWQgd2VpZ2h0cyBhcworJSB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gYSBncm91cCBvZgorJSBMYXRpbiBsZXR0ZXJzLiBUaGV5IGFyZSB1c2VkCislIHRvIHNwZWNpZnkgZGVsdGFzIGJ5IGxvY2FsZXMgdXNpbmcKKyUgYSBsb2NhbGUgYXMgdGhlIGRlZmF1bHQgb3JkZXJpbmcKKyUgYW5kIGJ5ICJyZXBsYWNlLWFmdGVyIiBzdGF0ZW1lbnRzCislIHNwZWNpZnlpbmcgdGhlIGNoYW5nZWQgcGxhY2VtZW50CislIGluIGFuIG9yZGVyaW5nIG9mIGEgY2hhcmFjdGVyLgorCitjb2xsYXRpbmctc3ltYm9sIDxhOD4KK2NvbGxhdGluZy1zeW1ib2wgPGI4PgorY29sbGF0aW5nLXN5bWJvbCA8Yzg+Citjb2xsYXRpbmctc3ltYm9sIDxkOD4KK2NvbGxhdGluZy1zeW1ib2wgPGU4PgorY29sbGF0aW5nLXN5bWJvbCA8Zjg+Citjb2xsYXRpbmctc3ltYm9sIDxnOD4KK2NvbGxhdGluZy1zeW1ib2wgPGg4PgorY29sbGF0aW5nLXN5bWJvbCA8aTg+Citjb2xsYXRpbmctc3ltYm9sIDxqOD4KK2NvbGxhdGluZy1zeW1ib2wgPGs4PgorY29sbGF0aW5nLXN5bWJvbCA8bDg+Citjb2xsYXRpbmctc3ltYm9sIDxtOD4KK2NvbGxhdGluZy1zeW1ib2wgPG44PgorY29sbGF0aW5nLXN5bWJvbCA8bzg+Citjb2xsYXRpbmctc3ltYm9sIDxwOD4KK2NvbGxhdGluZy1zeW1ib2wgPHE4PgorY29sbGF0aW5nLXN5bWJvbCA8cjg+Citjb2xsYXRpbmctc3ltYm9sIDxzOD4KK2NvbGxhdGluZy1zeW1ib2wgPHQ4PgorY29sbGF0aW5nLXN5bWJvbCA8dTg+Citjb2xsYXRpbmctc3ltYm9sIDx2OD4KK2NvbGxhdGluZy1zeW1ib2wgPHc4PgorY29sbGF0aW5nLXN5bWJvbCA8eDg+Citjb2xsYXRpbmctc3ltYm9sIDx5OD4KK2NvbGxhdGluZy1zeW1ib2wgPHo4PgorCitjb2xsYXRpbmctc3ltYm9sIDxOT05FPgorY29sbGF0aW5nLXN5bWJvbCA8QUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxBQ1VURStET1Q+Citjb2xsYXRpbmctc3ltYm9sIDxHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPERPVUJMRS1HUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkUrQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxCUkVWRStHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFK01BQ1JPTj4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFK0hPT0s+Citjb2xsYXRpbmctc3ltYm9sIDxCUkVWRStUSUxERT4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFK0RPVC1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFLUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8SU5WRVJURUQtQlJFVkU+Citjb2xsYXRpbmctc3ltYm9sIDxDSVJDVU1GTEVYPgorY29sbGF0aW5nLXN5bWJvbCA8Q0lSQ1VNRkxFWCtBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPENJUkNVTUZMRVgrR1JBVkU+Citjb2xsYXRpbmctc3ltYm9sIDxDSVJDVU1GTEVYK0hPT0s+Citjb2xsYXRpbmctc3ltYm9sIDxDSVJDVU1GTEVYK1RJTERFPgorY29sbGF0aW5nLXN5bWJvbCA8Q0lSQ1VNRkxFWCtET1QtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxDQVJPTj4KK2NvbGxhdGluZy1zeW1ib2wgPENBUk9OK0RJQUVSRVNJUz4KK2NvbGxhdGluZy1zeW1ib2wgPENBUk9OK0RPVD4KK2NvbGxhdGluZy1zeW1ib2wgPFJJTkc+Citjb2xsYXRpbmctc3ltYm9sIDxSSU5HK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8UklORy1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPERJQUVSRVNJUz4KK2NvbGxhdGluZy1zeW1ib2wgPERJQUVSRVNJUytNQUNST04+Citjb2xsYXRpbmctc3ltYm9sIDxESUFFUkVTSVMrQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxESUFFUkVTSVMrR1JBVkU+Citjb2xsYXRpbmctc3ltYm9sIDxESUFFUkVTSVMrQ0FST04+Citjb2xsYXRpbmctc3ltYm9sIDxET1VCTEUtQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxIT09LPgorY29sbGF0aW5nLXN5bWJvbCA8VElMREU+Citjb2xsYXRpbmctc3ltYm9sIDxUSUxERStBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPFRJTERFK0RJQUVSRVNJUz4KK2NvbGxhdGluZy1zeW1ib2wgPFRJTERFLUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8RE9UPgorY29sbGF0aW5nLXN5bWJvbCA8RE9ULUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8RE9UK0RPVC1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPFNUUk9LRT4KK2NvbGxhdGluZy1zeW1ib2wgPFNUUk9LRStBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPENFRElMTEE+Citjb2xsYXRpbmctc3ltYm9sIDxDRURJTExBK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8Q0VESUxMQStHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPENFRElMTEErQlJFVkU+Citjb2xsYXRpbmctc3ltYm9sIDxPR09ORUs+Citjb2xsYXRpbmctc3ltYm9sIDxPR09ORUsrTUFDUk9OPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0dSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0RJQUVSRVNJUz4KK2NvbGxhdGluZy1zeW1ib2wgPE1BQ1JPTitESUFFUkVTSVMtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04rRE9UPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0RPVC1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPE1BQ1JPTitDSVJDVU1GTEVYPgorY29sbGF0aW5nLXN5bWJvbCA8TElORS1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPEhPUk4+Citjb2xsYXRpbmctc3ltYm9sIDxIT1JOK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8SE9STitHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPEhPUk4rSE9PSz4KK2NvbGxhdGluZy1zeW1ib2wgPEhPUk4rVElMREU+Citjb2xsYXRpbmctc3ltYm9sIDxIT1JOK0RPVC1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPFBSRUNFREVELUJZLUFQT1NUUk9QSEU+Citjb2xsYXRpbmctc3ltYm9sIDxHUkVFSz4KK2NvbGxhdGluZy1zeW1ib2wgPFRPTk9TPgorY29sbGF0aW5nLXN5bWJvbCA8RElBTFlUSUNBPgorY29sbGF0aW5nLXN5bWJvbCA8RElBTFlUSUNBK1RPTk9TPgorY29sbGF0aW5nLXN5bWJvbCA8Q1lSSUxMSUM+Citjb2xsYXRpbmctc3ltYm9sIDxISVJBR0FOQT4KK2NvbGxhdGluZy1zeW1ib2wgPEtBVEFLQU5BPgorY29sbGF0aW5nLXN5bWJvbCA8U1BFQ0lBTD4KKworJSBsZXR0ZXI7YWNjZW50O2Nhc2U7c3BlY2lhbHMKKworb3JkZXJfc3RhcnQgZm9yd2FyZDtiYWNrd2FyZC8KKyAgICAgICAgICAgIDtmb3J3YXJkO3Bvc2l0aW9uCisKKyUgPENBUElUQUw+IG9yIDxTTUFMTD4gbGV0dGVycyBmaXJzdDoKKworPFNNQUxMPgorPFNNQUxMLUNBUElUQUw+Cis8Q0FQSVRBTC1TTUFMTD4KKzxDQVBJVEFMPgorCislIEFjY2VudHM6CisKKzxOT05FPgorPEFDVVRFPgorPEFDVVRFK0RPVD4KKzxHUkFWRT4KKzxET1VCTEUtR1JBVkU+Cis8QlJFVkU+Cis8QlJFVkUrQUNVVEU+Cis8QlJFVkUrR1JBVkU+Cis8QlJFVkUrTUFDUk9OPgorPEJSRVZFK0hPT0s+Cis8QlJFVkUrVElMREU+Cis8QlJFVkUrRE9ULUJFTE9XPgorPEJSRVZFLUJFTE9XPgorPElOVkVSVEVELUJSRVZFPgorPENJUkNVTUZMRVg+Cis8Q0lSQ1VNRkxFWCtBQ1VURT4KKzxDSVJDVU1GTEVYK0dSQVZFPgorPENJUkNVTUZMRVgrSE9PSz4KKzxDSVJDVU1GTEVYK1RJTERFPgorPENJUkNVTUZMRVgrRE9ULUJFTE9XPgorPENBUk9OPgorPENBUk9OK0RJQUVSRVNJUz4KKzxDQVJPTitET1Q+Cis8UklORz4KKzxSSU5HK0FDVVRFPgorPFJJTkctQkVMT1c+Cis8RElBRVJFU0lTPgorPERJQUVSRVNJUytNQUNST04+Cis8RElBRVJFU0lTK0FDVVRFPgorPERJQUVSRVNJUytHUkFWRT4KKzxESUFFUkVTSVMrQ0FST04+Cis8RE9VQkxFLUFDVVRFPgorPEhPT0s+Cis8VElMREU+Cis8VElMREUrQUNVVEU+Cis8VElMREUrRElBRVJFU0lTPgorPFRJTERFLUJFTE9XPgorPERPVD4KKzxET1QtQkVMT1c+Cis8RE9UK0RPVC1CRUxPVz4KKzxTVFJPS0U+Cis8U1RST0tFK0FDVVRFPgorPENFRElMTEE+Cis8Q0VESUxMQStBQ1VURT4KKzxDRURJTExBK0dSQVZFPgorPENFRElMTEErQlJFVkU+Cis8T0dPTkVLPgorPE9HT05FSytNQUNST04+Cis8TUFDUk9OPgorPE1BQ1JPTitBQ1VURT4KKzxNQUNST04rR1JBVkU+Cis8TUFDUk9OK0RJQUVSRVNJUz4KKzxNQUNST04rRElBRVJFU0lTLUJFTE9XPgorPE1BQ1JPTitET1Q+Cis8TUFDUk9OK0RPVC1CRUxPVz4KKzxNQUNST04rQ0lSQ1VNRkxFWD4KKzxMSU5FLUJFTE9XPgorPEhPUk4+Cis8SE9STitBQ1VURT4KKzxIT1JOK0dSQVZFPgorPEhPUk4rSE9PSz4KKzxIT1JOK1RJTERFPgorPEhPUk4rRE9ULUJFTE9XPgorPFBSRUNFREVELUJZLUFQT1NUUk9QSEU+Cis8R1JFRUs+Cis8VE9OT1M+Cis8RElBTFlUSUNBPgorPERJQUxZVElDQStUT05PUz4KKzxDWVJJTExJQz4KKzxISVJBR0FOQT4KKzxLQVRBS0FOQT4KKzxTUEVDSUFMPgorCis8VTAwQTA+CTxVMDBBMD47PFUwMEEwPjs8VTAwQTA+O0lHTk9SRQorPFUwMDIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjA+Cis8VTAwMDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwOT4KKzxVMDAwQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBCPgorPFUwMDBEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMEQ+Cis8VTAwMEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwQT4KKzxVMDAwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBDPgorPFUwMDVGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNUY+Cis8VTAwQUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBRj4KKzxVMDBBRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEFEPgorPFUwMDJEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMkQ+Cis8VTAwMkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyQz4KKzxVMDAzQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDNCPgorPFUwMDNBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwM0E+Cis8VTAwMjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyMT4KKzxVMDBBMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEExPgorPFUwMDNGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwM0Y+Cis8VTAwQkY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCRj4KKzxVMDAyRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDJGPgorPFUwMDJFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMkU+Cis8VTAwQjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCND4KKzxVMDA2MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDYwPgorPFUwMDVFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNUU+Cis8VTAwQTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBOD4KKzxVMDA3RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDdFPgorPFUwMEI3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjc+Cis8VTAwQjg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCOD4KKzxVMDAyNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDI3PgorPFUyMDE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTg+Cis8VTIwMTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxOT4KKzxVMDAyMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDIyPgorPFUyMDFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMUM+Cis8VTIwMUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxRD4KKzxVMDBBQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEFCPgorPFUwMEJCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQkI+Cis8VTAwMjg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyOD4KKzxVMjA3RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDdEPgorPFUwMDI5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjk+Cis8VTIwN0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA3RT4KKzxVMDA1Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDVCPgorPFUwMDVEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNUQ+Cis8VTAwN0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA3Qj4KKzxVMDA3RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDdEPgorPFUwMEE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTc+Cis8VTAwQjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCNj4KKzxVMDBBOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEE5PgorPFUwMEFFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQUU+Cis8VTAwNDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA0MD4KKzxVMDBBND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEE0PgorPFUwMEEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTI+Cis8VTAwMjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyND4KKzxVMDBBMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEEzPgorPFUwMEE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTU+Cis8VTAwMkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyQT4KKzxVMDA1Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDVDPgorPFUwMDI2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjY+Cis8VTAwMjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyMz4KKzxVMDAyNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDI1PgorPFUyMDdCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwN0I+Cis8VTAwMkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyQj4KKzxVMjA3QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDdBPgorPFUwMEIxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjE+Cis8VTAwRjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBGNz4KKzxVMDBENz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEQ3PgorPFUyMjYwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNjA+Cis8VTAwM0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAzQz4KKzxVMjI2ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjY0PgorPFUwMDNEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwM0Q+Cis8VTIyNjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2NT4KKzxVMDAzRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDNFPgorPFUwMEFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQUM+Cis8VTAwN0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA3Qz4KKzxVMDBBNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEE2PgorPFUwMEIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjA+Cis8VTAwQjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCNT4KKzxVMDJDNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkM3PgorPFUwMkQ4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAyRDg+Cis8VTAyRDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDJEOT4KKzxVMDJEQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkRBPgorPFUwMkRCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAyREI+Cis8VTAyREM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDJEQz4KKzxVMDJERD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkREPgorPFUwMzc0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzNzQ+Cis8VTAzNzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDM3NT4KKzxVMDM3QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzdBPgorPFUwMzdFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzN0U+Cis8VTAzODQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDM4ND4KKzxVMDM4NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzg1PgorPFUwMzg3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzODc+Cis8VTAzRDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDNEMD4KKzxVMUZCRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkJGPgorPFUxRkMwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGQzA+Cis8VTFGQzE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZDMT4KKzxVMUZDRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkNEPgorPFUxRkNFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGQ0U+Cis8VTFGQ0Y+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZDRj4KKzxVMUZERD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkREPgorPFUxRkRFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGREU+Cis8VTFGREY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZERj4KKzxVMUZFRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkVEPgorPFUxRkVGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGRUY+Cis8VTFGRkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZGRT4KKzxVMjAwMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDAyPgorPFUyMDAzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMDM+Cis8VTIwMDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwND4KKzxVMjAwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDA1PgorPFUyMDA2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMDY+Cis8VTIwMEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwRT4KKzxVMjAwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDBGPgorPFUyMDA5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMDk+Cis8VTIwMEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwQT4KKzxVMjAxMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDEwPgorPFUyMDEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTM+Cis8VTIwMTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxND4KKzxVMjAxNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDE1PgorPFUyMDE2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTY+Cis8VTIwMTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxNz4KKzxVMjAxQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDFBPgorPFUyMDFCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMUI+Cis8VTIwMUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxRT4KKzxVMjAxRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDFGPgorPFUyMDIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMjA+Cis8VTIwMjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAyMT4KKzxVMjIxOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjE5PgorPFUyMDI1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMjU+Cis8VTIwMjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAyNj4KKzxVMjAzMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDMwPgorPFUyMDMyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzI+Cis8VTIwMzM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzMz4KKzxVMjAzND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDM0PgorPFUyMDM1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzU+Cis8VTIwMzY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzNj4KKzxVMjAzNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDM3PgorPFUyMDM4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzg+Cis8VTIwMzk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzOT4KKzxVMjAzQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDNBPgorPFUyMDNCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwM0I+Cis8VTIwM0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzQz4KKzxVMjAzRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDNFPgorPFUyMDdDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwN0M+Cis8VTIwODA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4MD4KKzxVMjA4MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDgxPgorPFUyMDgyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODI+Cis8VTIwODM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4Mz4KKzxVMjA4ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDg0PgorPFUyMDg1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODU+Cis8VTIwODY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4Nj4KKzxVMjA4Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDg3PgorPFUyMDg4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODg+Cis8VTIwODk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4OT4KKzxVMjA4QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDhBPgorPFUyMDhCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwOEI+Cis8VTIwOEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4Qz4KKzxVMjA4RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDhEPgorPFUyMDhFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwOEU+Cis8VTIwQTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjBBMz4KKzxVMjBBND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMEE0PgorPFUyMEE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwQTc+Cis8VTIwQTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjBBOT4KKzxVMjEwMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTAzPgorPFUyMTA1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMDU+Cis8VTIxMDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjEwOT4KKzxVMjExNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTE2PgorPFUyMTE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMTc+Cis8VTIxMUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjExRT4KKzxVMjEyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTIwPgorPFUyMTIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMjI+Cis8VTIxMjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjEyNj4KKzxVMjEyQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTJCPgorPFUyMTUzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTM+Cis8VTIxNTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1ND4KKzxVMjE1NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTU1PgorPFUyMTU2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTY+Cis8VTIxNTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1Nz4KKzxVMjE1OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTU4PgorPFUyMTU5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTk+Cis8VTIxNUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1QT4KKzxVMjE2MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTYwPgorPFUyMTYxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjE+Cis8VTIxNjI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2Mj4KKzxVMjE2Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTYzPgorPFUyMTY0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjQ+Cis8VTIxNjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2NT4KKzxVMjE2Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTY2PgorPFUyMTY3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjc+Cis8VTIxNjg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2OD4KKzxVMjE2OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTY5PgorPFUyMTZBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNkE+Cis8VTIxNkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2Qj4KKzxVMjE2Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTZDPgorPFUyMTZEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNkQ+Cis8VTIxNkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2RT4KKzxVMjE2Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTZGPgorPFUyMTcwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzA+Cis8VTIxNzE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3MT4KKzxVMjE3Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTcyPgorPFUyMTczPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzM+Cis8VTIxNzQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3ND4KKzxVMjE3NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTc1PgorPFUyMTc2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzY+Cis8VTIxNzc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3Nz4KKzxVMjE3OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTc4PgorPFUyMTc5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzk+Cis8VTIxN0E+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3QT4KKzxVMjE3Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTdCPgorPFUyMTdDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxN0M+Cis8VTIxN0Q+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3RD4KKzxVMjE3RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTdFPgorPFUyMTdGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxN0Y+Cis8VTIxODA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE4MD4KKzxVMjE4MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTgxPgorPFUyMTgyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxODI+Cis8VTIxOTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5MT4KKzxVMjE5Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTkzPgorPFUyMTk0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxOTQ+Cis8VTIxOTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5NT4KKzxVMjE5Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTk2PgorPFUyMTk3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxOTc+Cis8VTIxOTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5OD4KKzxVMjE5OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTk5PgorPFUyMUE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxQTg+Cis8VTIxQzA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjFDMD4KKzxVMjFEMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMUQwPgorPFUyMUQyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxRDI+Cis8VTIxRDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjFEND4KKzxVMjIwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjAwPgorPFUyMjAyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMDI+Cis8VTIyMDM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwMz4KKzxVMjIwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjA1PgorPFUyMjA2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMDY+Cis8VTIyMDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwNz4KKzxVMjIwOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjA4PgorPFUyMjBCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMEI+Cis8VTIyMEY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwRj4KKzxVMjIxMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjExPgorPFUyMjEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMTI+Cis8VTIyMTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxMz4KKzxVMjIxND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjE0PgorPFUyMDQ0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwNDQ+Cis8VTIyMTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxNz4KKzxVMjIxOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjE4PgorPFUyMDIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMjI+Cis8VTIyMUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxQT4KKzxVMjIxRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjFEPgorPFUyMjFFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMUU+Cis8VTIyMUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxRj4KKzxVMjIyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjIwPgorPFUyMjI1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMjU+Cis8VTIyMjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyNz4KKzxVMjIyOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjI4PgorPFUyMjI5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMjk+Cis8VTIyMkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyQT4KKzxVMjIyQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjJCPgorPFUyMjJDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMkM+Cis8VTIyMkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyRT4KKzxVMjIzND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjM0PgorPFUyMjM1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMzU+Cis8VTIyMzY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIzNj4KKzxVMjIzNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjM3PgorPFUyMjNDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyM0M+Cis8VTIyM0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIzRT4KKzxVMjI0Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjQzPgorPFUyMjQ1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNDU+Cis8VTIyNDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI0OD4KKzxVMjI0Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjRDPgorPFUyMjUzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNTM+Cis8VTIyNjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2MT4KKzxVMjI2QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjZBPgorPFUyMjZCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNkI+Cis8VTIyNkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2RT4KKzxVMjI2Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjZGPgorPFUyMjgyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyODI+Cis8VTIyODM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI4Mz4KKzxVMjI4Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjg2PgorPFUyMjg3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyODc+Cis8VTIyOTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI5OT4KKzxVMjI5QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjlBPgorPFUyMkE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyQTU+Cis8VTIyQzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjJDNT4KKzxVMjJFRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMkVFPgorPFUyMzAyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMDI+Cis8VTIzMDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMwOD4KKzxVMjMwOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzA5PgorPFUyMzBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMEE+Cis8VTIzMEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMwQj4KKzxVMjMxMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzEwPgorPFUyMzEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMTI+Cis8VTIzMTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMxNT4KKzxVMjMyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzIwPgorPFUyMzIxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMjE+Cis8VTI0MjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQyMz4KKzxVMjQ0MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQwPgorPFUyNDQxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDE+Cis8VTI0NDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ0Mj4KKzxVMjQ0Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQzPgorPFUyNDQ2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDY+Cis8VTI0NDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ0Nz4KKzxVMjQ0OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQ4PgorPFUyNDQ5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDk+Cis8VTI0NjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2MD4KKzxVMjQ2MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDYxPgorPFUyNDYyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NjI+Cis8VTI0NjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Mz4KKzxVMjQ2ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDY0PgorPFUyNDY1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NjU+Cis8VTI0NjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Nj4KKzxVMjQ2Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDY3PgorPFUyNDY4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0Njg+Cis8VTI0Njk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2OT4KKzxVMjQ2QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDZBPgorPFUyNDZCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NkI+Cis8VTI0NkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Qz4KKzxVMjQ2RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDZEPgorPFUyNDZFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NkU+Cis8VTI0NkY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Rj4KKzxVMjQ3MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDcwPgorPFUyNDcxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NzE+Cis8VTI0NzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3Mj4KKzxVMjQ3Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDczPgorPFUyNDc0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NzQ+Cis8VTI0NzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3NT4KKzxVMjQ3Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDc2PgorPFUyNDc3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0Nzc+Cis8VTI0Nzg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3OD4KKzxVMjQ3OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDc5PgorPFUyNDdBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0N0E+Cis8VTI0N0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3Qj4KKzxVMjQ3Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDdDPgorPFUyNDdEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0N0Q+Cis8VTI0N0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3RT4KKzxVMjQ3Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDdGPgorPFUyNDgwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODA+Cis8VTI0ODE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4MT4KKzxVMjQ4Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDgyPgorPFUyNDgzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODM+Cis8VTI0ODQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4ND4KKzxVMjQ4NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDg1PgorPFUyNDg2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODY+Cis8VTI0ODc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4Nz4KKzxVMjQ4OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDg4PgorPFUyNDg5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODk+Cis8VTI0OEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4QT4KKzxVMjQ4Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDhCPgorPFUyNDhDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OEM+Cis8VTI0OEQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4RD4KKzxVMjQ4RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDhFPgorPFUyNDhGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OEY+Cis8VTI0OTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5MD4KKzxVMjQ5MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDkxPgorPFUyNDkyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTI+Cis8VTI0OTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5Mz4KKzxVMjQ5ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDk0PgorPFUyNDk1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTU+Cis8VTI0OTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5Nj4KKzxVMjQ5Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDk3PgorPFUyNDk4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTg+Cis8VTI0OTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5OT4KKzxVMjQ5QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDlBPgorPFUyNDlCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OUI+Cis8VTI0RUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjRFQT4KKzxVMjUwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTAwPgorPFUyNTUwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTA+Cis8VTI1MDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwMj4KKzxVMjU1MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTUxPgorPFUyNTA0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MDQ+Cis8VTI1MDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwNT4KKzxVMjUwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTA2PgorPFUyNTA3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MDc+Cis8VTI1MDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwOD4KKzxVMjUwOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTA5PgorPFUyNTBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MEE+Cis8VTI1MEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwQj4KKzxVMjUwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTBDPgorPFUyNTUyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTI+Cis8VTI1NTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Mz4KKzxVMjU1ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTU0PgorPFUyNTEwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MTA+Cis8VTI1NTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1NT4KKzxVMjU1Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTU2PgorPFUyNTU3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTc+Cis8VTI1MTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUxND4KKzxVMjU1OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTU4PgorPFUyNTU5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTk+Cis8VTI1NUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1QT4KKzxVMjUxOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTE4PgorPFUyNTVCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NUI+Cis8VTI1NUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Qz4KKzxVMjU1RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTVEPgorPFUyNTFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MUM+Cis8VTI1NUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1RT4KKzxVMjUxRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTFFPgorPFUyNTFGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MUY+Cis8VTI1NUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Rj4KKzxVMjUyMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTIxPgorPFUyNTIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MjI+Cis8VTI1NjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2MD4KKzxVMjUyND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTI0PgorPFUyNTYxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjE+Cis8VTI1MjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyNj4KKzxVMjUyNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTI3PgorPFUyNTYyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjI+Cis8VTI1Mjk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyOT4KKzxVMjUyQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTJBPgorPFUyNTYzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjM+Cis8VTI1MkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyQz4KKzxVMjUyRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTJEPgorPFUyNTJFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MkU+Cis8VTI1NjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2ND4KKzxVMjU2NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTY1PgorPFUyNTMxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MzE+Cis8VTI1MzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzMj4KKzxVMjU2Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTY2PgorPFUyNTM0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MzQ+Cis8VTI1MzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzNT4KKzxVMjUzNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTM2PgorPFUyNTY3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Njc+Cis8VTI1Njg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2OD4KKzxVMjUzOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTM5PgorPFUyNTNBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1M0E+Cis8VTI1Njk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2OT4KKzxVMjUzQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTNDPgorPFUyNTNEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1M0Q+Cis8VTI1M0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzRT4KKzxVMjU2QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTZBPgorPFUyNTQwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDA+Cis8VTI1NDE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0MT4KKzxVMjU2Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTZCPgorPFUyNTQzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDM+Cis8VTI1NDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0ND4KKzxVMjU0NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTQ1PgorPFUyNTQ2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDY+Cis8VTI1NDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0Nz4KKzxVMjU0OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTQ4PgorPFUyNTQ5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDk+Cis8VTI1NEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0QT4KKzxVMjU2Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTZDPgorPFUyNTcxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NzE+Cis8VTI1NzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU3Mj4KKzxVMjU4MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTgwPgorPFUyNTg0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1ODQ+Cis8VTI1ODg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU4OD4KKzxVMjU4Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNThDPgorPFUyNTkwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1OTA+Cis8VTI1OTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU5MT4KKzxVMjU5Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTkyPgorPFUyNTkzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1OTM+Cis8VTI1QTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBMD4KKzxVMjVBMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUExPgorPFUyNUEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTI+Cis8VTI1QTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBMz4KKzxVMjVBND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUE0PgorPFUyNUE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTU+Cis8VTI1QTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBNj4KKzxVMjVBNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUE3PgorPFUyNUE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTg+Cis8VTI1QTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBOT4KKzxVMjVBQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUFBPgorPFUyNUFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QUM+Cis8VTI1QUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBRD4KKzxVMjVCMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUIyPgorPFUyNUIzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QjM+Cis8VTI1Qjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVCNz4KKzxVMjVCQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUJBPgorPFUyNUJDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QkM+Cis8VTI1QkQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVCRD4KKzxVMjVDMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUMxPgorPFUyNUM0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QzQ+Cis8VTI1QzY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVDNj4KKzxVMjVDNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUM3PgorPFUyNUNBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Q0E+Cis8VTI1Q0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVDQj4KKzxVMjVDRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUNFPgorPFUyNUNGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Q0Y+Cis8VTI1RDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVEMD4KKzxVMjVEMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUQxPgorPFUyNUQ4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1RDg+Cis8VTI1RDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVEOT4KKzxVMjVFMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUUyPgorPFUyNUUzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1RTM+Cis8VTI1RUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVFRj4KKzxVMjYwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjA1PgorPFUyNjA2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2MDY+Cis8VTI2MEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYwRT4KKzxVMjYwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjBGPgorPFUyNjFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2MUM+Cis8VTI2MUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYxRT4KKzxVMjYzQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjNBPgorPFUyNjNCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2M0I+Cis8VTI2M0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYzQz4KKzxVMjY0MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjQwPgorPFUyNjQyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NDI+Cis8VTI2NjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2MD4KKzxVMjY2MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjYxPgorPFUyNjYyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NjI+Cis8VTI2NjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2Mz4KKzxVMjY2ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjY0PgorPFUyNjY1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NjU+Cis8VTI2NjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2Nj4KKzxVMjY2Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjY3PgorPFUyNjY5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2Njk+Cis8VTI2NkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2QT4KKzxVMjY2Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjZCPgorPFUyNjZDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NkM+Cis8VTI2NkQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2RD4KKzxVMjY2RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjZFPgorPFUyNjZGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NkY+Cis8VTI3MTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjcxMz4KKzxVMjcxNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNzE3PgorPFUyNzIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI3MjA+Cis8VTMwMDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwMD4KKzxVMzAwMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDAxPgorPFUzMDAyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMDI+Cis8VTMwMDM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwMz4KKzxVMzAwND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDA0PgorPFUzMDA1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMDU+Cis8VTMwMDY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwNj4KKzxVMzAwNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDA3PgorPFUzMDBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMEE+Cis8VTMwMEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwQj4KKzxVMzAwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDBDPgorPFUzMDBEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMEQ+Cis8VTMwMEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwRT4KKzxVMzAwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDBGPgorPFUzMDEwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTA+Cis8VTMwMTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxMT4KKzxVMzAxMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDEyPgorPFUzMDEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTM+Cis8VTMwMTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxND4KKzxVMzAxNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDE1PgorPFUzMDE2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTY+Cis8VTMwMTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxNz4KKzxVMzAxQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDFDPgorPFUzMDIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMjA+Cis8VTMwOUI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzA5Qj4KKzxVMzA5Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDlDPgorPFUzMDlEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwOUQ+Cis8VTMwOUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzA5RT4KKzxVMzBGQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMEZCPgorPFUzMEZDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwRkM+Cis8VTMwRkQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzBGRD4KKzxVMzBGRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMEZFPgorPFUzMjFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMUM+Cis8VTMyMjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyMD4KKzxVMzIyMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjIxPgorPFUzMjIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjI+Cis8VTMyMjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyMz4KKzxVMzIyND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjI0PgorPFUzMjI1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjU+Cis8VTMyMjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyNj4KKzxVMzIyNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjI3PgorPFUzMjI4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjg+Cis8VTMyMjk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyOT4KKzxVMzI3Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjdGPgorPFUzM0MyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMzQzI+Cis8VTMzRDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzNEOD4KKzxVMDAwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDAwPgorPFUwMDAxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDE+Cis8VTAwMDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwMj4KKzxVMDAwMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDAzPgorPFUwMDA0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDQ+Cis8VTAwMDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwNT4KKzxVMDAwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA2PgorPFUwMDA3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDc+Cis8VTAwMDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwOD4KKzxVMDAwRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBFPgorPFUwMDBGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMEY+Cis8VTAwMTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxMD4KKzxVMDAxMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDExPgorPFUwMDEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTI+Cis8VTAwMTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxMz4KKzxVMDAxND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE0PgorPFUwMDE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTU+Cis8VTAwMTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxNj4KKzxVMDAxNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE3PgorPFUwMDE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTg+Cis8VTAwMTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxOT4KKzxVMDAxQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFBPgorPFUwMDFCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMUI+Cis8VTAwMUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxQz4KKzxVMDAxRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFEPgorPFUwMDFFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMUU+Cis8VTAwMUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxRj4KKzxVMDA3Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDdGPgorPFUwMDgwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODA+Cis8VTAwODE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4MT4KKzxVMDA4Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDgyPgorPFUwMDgzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODM+Cis8VTAwODQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4ND4KKzxVMDA4NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDg1PgorPFUwMDg2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODY+Cis8VTAwODc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4Nz4KKzxVMDA4OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDg4PgorPFUwMDg5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODk+Cis8VTAwOEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4QT4KKzxVMDA4Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDhCPgorPFUwMDhDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOEM+Cis8VTAwOEQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4RD4KKzxVMDA4RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDhFPgorPFUwMDhGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOEY+Cis8VTAwOTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5MD4KKzxVMDA5MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDkxPgorPFUwMDkyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTI+Cis8VTAwOTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Mz4KKzxVMDA5ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDk0PgorPFUwMDk1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTU+Cis8VTAwOTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Nj4KKzxVMDA5Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDk3PgorPFUwMDk4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTg+Cis8VTAwOTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5OT4KKzxVMDA5QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDlBPgorPFUwMDlCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOUI+Cis8VTAwOUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Qz4KKzxVMDA5RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDlEPgorPFUwMDlFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOUU+Cis8VTAwOUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Rj4KKzxVRTAwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDAwPgorPFVFMDAxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDE+Cis8VUUwMDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwMj4KKzxVMDMwMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzAxPgorPFVFMDA0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDQ+Cis8VUUwMDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwNT4KKzxVRTAwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDA2PgorPFVFMDA3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDc+Cis8VUUwMDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwOD4KKzxVRTAwOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDA5PgorPFVFMDBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMEE+Cis8VUUwMEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwQj4KKzxVRTAwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDBDPgorPFVFMDBEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMEQ+Cis8VUUwMEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwRT4KKzxVRTAwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDBGPgorPCI9PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8Ij0+Cis8VUUwMTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxMT4KKzxVRTAxMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDEyPgorPFVFMDEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMTM+Cis8VUUwMTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxND4KKzxVRTAxNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDE1PgorPFVFMDE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMTc+Cis8VUUwMTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxOD4KKzxVRTAxOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDE5PgorVU5ERUZJTkVECUlHTk9SRTtJR05PUkU7SUdOT1JFCisKKzxVMDAzMD4JPFUwMDMwPjs8VTAwMzA+O0lHTk9SRTtJR05PUkUKKzxVMjA3MD4JPFUwMDMwPjs8VTIwNzA+O0lHTk9SRTtJR05PUkUKKzxVMjE1Qj4JPFUwMDMwPjs8VTIxNUI+O0lHTk9SRTtJR05PUkUKKzxVMDBCQz4JPFUwMDMwPjs8VTAwQkM+O0lHTk9SRTtJR05PUkUKKzxVMjE1Qz4JPFUwMDMwPjs8VTIxNUM+O0lHTk9SRTtJR05PUkUKKzxVMDBCRD4JPFUwMDMwPjs8VTAwQkQ+O0lHTk9SRTtJR05PUkUKKzxVMjE1RD4JPFUwMDMwPjs8VTIxNUQ+O0lHTk9SRTtJR05PUkUKKzxVMDBCRT4JPFUwMDMwPjs8VTAwQkU+O0lHTk9SRTtJR05PUkUKKzxVMjE1RT4JPFUwMDMwPjs8VTIxNUU+O0lHTk9SRTtJR05PUkUKKzxVMDAzMT4JPFUwMDMxPjs8VTAwMzE+O0lHTk9SRTtJR05PUkUKKzxVMDAzMj4JPFUwMDMyPjs8VTAwMzI+O0lHTk9SRTtJR05PUkUKKzxVMDAzMz4JPFUwMDMzPjs8VTAwMzM+O0lHTk9SRTtJR05PUkUKKzxVMDAzND4JPFUwMDM0Pjs8VTAwMzQ+O0lHTk9SRTtJR05PUkUKKzxVMDAzNT4JPFUwMDM1Pjs8VTAwMzU+O0lHTk9SRTtJR05PUkUKKzxVMDAzNj4JPFUwMDM2Pjs8VTAwMzY+O0lHTk9SRTtJR05PUkUKKzxVMDAzNz4JPFUwMDM3Pjs8VTAwMzc+O0lHTk9SRTtJR05PUkUKKzxVMDAzOD4JPFUwMDM4Pjs8VTAwMzg+O0lHTk9SRTtJR05PUkUKKzxVMDAzOT4JPFUwMDM5Pjs8VTAwMzk+O0lHTk9SRTtJR05PUkUKKzxVMDBCOT4JPFUwMDMxPjs8VTAwQjk+O0lHTk9SRTtJR05PUkUKKzxVMDBCMj4JPFUwMDMyPjs8VTAwQjI+O0lHTk9SRTtJR05PUkUKKzxVMDBCMz4JPFUwMDMzPjs8VTAwQjM+O0lHTk9SRTtJR05PUkUKKzxVMjA3ND4JPFUwMDM0Pjs8VTIwNzQ+O0lHTk9SRTtJR05PUkUKKzxVMjA3NT4JPFUwMDM1Pjs8VTIwNzU+O0lHTk9SRTtJR05PUkUKKzxVMjA3Nj4JPFUwMDM2Pjs8VTIwNzY+O0lHTk9SRTtJR05PUkUKKzxVMjA3Nz4JPFUwMDM3Pjs8VTIwNzc+O0lHTk9SRTtJR05PUkUKKzxVMjA3OD4JPFUwMDM4Pjs8VTIwNzg+O0lHTk9SRTtJR05PUkUKKzxVMjA3OT4JPFUwMDM5Pjs8VTIwNzk+O0lHTk9SRTtJR05PUkUKKzxVMDA0MT4JPFUwMDQxPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDYxPgk8VTAwNDE+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMEFBPgk8VTAwNDE+OzxOT05FPjs8VTAwQUE+O0lHTk9SRQorPFUwMEMxPgk8VTAwNDE+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMEUxPgk8VTAwNDE+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDBDMD4JPFUwMDQxPjs8R1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFMD4JPFUwMDQxPjs8R1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMDA+CTxVMDA0MT47PERPVUJMRS1HUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjAxPgk8VTAwNDE+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMDI+CTxVMDA0MT47PEJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMDM+CTxVMDA0MT47PEJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRUFFPgk8VTAwNDE+OzxCUkVWRStBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRUFGPgk8VTAwNDE+OzxCUkVWRStBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVCMD4JPFUwMDQxPjs8QlJFVkUrR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCMT4JPFUwMDQxPjs8QlJFVkUrR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFQjI+CTxVMDA0MT47PEJSRVZFK0hPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCMz4JPFUwMDQxPjs8QlJFVkUrSE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVCND4JPFUwMDQxPjs8QlJFVkUrVElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCNT4JPFUwMDQxPjs8QlJFVkUrVElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFQjY+CTxVMDA0MT47PEJSRVZFK0RPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUI3Pgk8VTAwNDE+OzxCUkVWRStET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAyMDI+CTxVMDA0MT47PElOVkVSVEVELUJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMDM+CTxVMDA0MT47PElOVkVSVEVELUJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMEMyPgk8VTAwNDE+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTI+CTxVMDA0MT47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFQTQ+CTxVMDA0MT47PENJUkNVTUZMRVgrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVBNT4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVBNj4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRUE3Pgk8VTAwNDE+OzxDSVJDVU1GTEVYK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRUE4Pgk8VTAwNDE+OzxDSVJDVU1GTEVYK0hPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVBOT4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRUFBPgk8VTAwNDE+OzxDSVJDVU1GTEVYK1RJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQUI+CTxVMDA0MT47PENJUkNVTUZMRVgrVElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFQUM+CTxVMDA0MT47PENJUkNVTUZMRVgrRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQUQ+CTxVMDA0MT47PENJUkNVTUZMRVgrRE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMUNEPgk8VTAwNDE+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUNFPgk8VTAwNDE+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDBDNT4JPFUwMDQxPjs8UklORz47PENBUElUQUw+O0lHTk9SRQorPFUwMEU1Pgk8VTAwNDE+OzxSSU5HPjs8U01BTEw+O0lHTk9SRQorPFUwMUZBPgk8VTAwNDE+OzxSSU5HK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRkI+CTxVMDA0MT47PFJJTkcrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFMDA+CTxVMDA0MT47PFJJTkctQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwMT4JPFUwMDQxPjs8UklORy1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDBDND4JPFUwMDQxPjs8RElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTQ+CTxVMDA0MT47PERJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMDFERT4JPFUwMDQxPjs8RElBRVJFU0lTK01BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMURGPgk8VTAwNDE+OzxESUFFUkVTSVMrTUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRUEyPgk8VTAwNDE+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQTM+CTxVMDA0MT47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTAwQzM+CTxVMDA0MT47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTM+CTxVMDA0MT47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRUEwPgk8VTAwNDE+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVBMT4JPFUwMDQxPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTA0Pgk8VTAwNDE+OzxPR09ORUs+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEwNT4JPFUwMDQxPjs8T0dPTkVLPjs8U01BTEw+O0lHTk9SRQorPFUwMTAwPgk8VTAwNDE+OzxNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEwMT4JPFUwMDQxPjs8TUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMUUwPgk8VTAwNDE+OzxNQUNST04rRE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRTE+CTxVMDA0MT47PE1BQ1JPTitET1Q+OzxTTUFMTD47SUdOT1JFCis8YTg+Cis8VTAwQzY+CSI8VTAwNDE+PFUwMDQ1PiI7IjxVMDBDNj48VTAwQzY+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDBFNj4JIjxVMDA0MT48VTAwNDU+IjsiPFUwMEM2PjxVMDBDNj4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAxRkM+CSI8VTAwNDE+PFUwMDQ1PiI7IjxVMDFGQz48VTAxRkM+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDFGRD4JIjxVMDA0MT48VTAwNDU+IjsiPFUwMUZDPjxVMDFGQz4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAxRTI+CSI8VTAwNDE+PFUwMDQ1PiI7IjxVMDFFMj48VTAxRTI+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDFFMz4JIjxVMDA0MT48VTAwNDU+IjsiPFUwMUUyPjxVMDFFMj4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAwNDI+CTxVMDA0Mj47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2Mj4JPFUwMDQyPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMUUwMj4JPFUwMDQyPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMDM+CTxVMDA0Mj47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUUwND4JPFUwMDQyPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMDU+CTxVMDA0Mj47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUUwNj4JPFUwMDQyPjs8TElORS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTA3Pgk8VTAwNDI+OzxMSU5FLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPGI4PgorPFUwMDQzPgk8VTAwNDM+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjM+CTxVMDA0Mz47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMDg+CTxVMDA0Mz47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEwOT4JPFUwMDQzPjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMDE4Nz4JPFUwMDQzPjs8SE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUwMTg4Pgk8VTAwNDM+OzxIT09LPjs8U01BTEw+O0lHTk9SRQorPFUwMTBBPgk8VTAwNDM+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEwQj4JPFUwMDQzPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUwMEM3Pgk8VTAwNDM+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTc+CTxVMDA0Mz47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFMDg+CTxVMDA0Mz47PENFRElMTEErQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwOT4JPFUwMDQzPjs8Q0VESUxMQStBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxjOD4KKzxVMDEwQz4JPFUwMTBDPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMTBEPgk8VTAxMEM+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMDQ0Pgk8VTAwNDQ+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjQ+CTxVMDA0ND47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMEU+CTxVMDA0ND47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMEY+CTxVMDA0ND47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRTBBPgk8VTAwNDQ+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwQj4JPFUwMDQ0Pjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTBDPgk8VTAwNDQ+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwRD4JPFUwMDQ0Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTEwPgk8VTAwNDQ+OzxTVFJPS0U+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExMT4JPFUwMDQ0Pjs8U1RST0tFPjs8U01BTEw+O0lHTk9SRQorPFUxRTEwPgk8VTAwNDQ+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMTE+CTxVMDA0ND47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFMTI+CTxVMDA0ND47PE1BQ1JPTitDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMTM+CTxVMDA0ND47PE1BQ1JPTitDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRTBFPgk8VTAwNDQ+OzxMSU5FLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMEY+CTxVMDA0ND47PExJTkUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8ZDg+Cis8RC1aJz4JPEQtWic+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8RC16Jz4JPEQtWic+OzxOT05FPjs8Q0FQSVRBTC1TTUFMTD47SUdOT1JFCis8ZC1aJz4JPEQtWic+OzxOT05FPjs8U01BTEwtQ0FQSVRBTD47SUdOT1JFCis8ZC16Jz4JPEQtWic+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMDQ1Pgk8VTAwNDU+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjU+CTxVMDA0NT47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAwQzk+CTxVMDA0NT47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTk+CTxVMDA0NT47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMEM4Pgk8VTAwNDU+OzxHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMEU4Pgk8VTAwNDU+OzxHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIwND4JPFUwMDQ1Pjs8RE9VQkxFLUdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMDU+CTxVMDA0NT47PERPVUJMRS1HUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDExND4JPFUwMDQ1Pjs8QlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExNT4JPFUwMDQ1Pjs8QlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMDY+CTxVMDA0NT47PElOVkVSVEVELUJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMDc+CTxVMDA0NT47PElOVkVSVEVELUJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMENBPgk8VTAwNDU+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRUE+CTxVMDA0NT47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFQkU+CTxVMDA0NT47PENJUkNVTUZMRVgrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCRj4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVDMD4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRUMxPgk8VTAwNDU+OzxDSVJDVU1GTEVYK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRUMyPgk8VTAwNDU+OzxDSVJDVU1GTEVYK0hPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDMz4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRUM0Pgk8VTAwNDU+OzxDSVJDVU1GTEVYK1RJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQzU+CTxVMDA0NT47PENJUkNVTUZMRVgrVElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFQzY+CTxVMDA0NT47PENJUkNVTUZMRVgrRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQzc+CTxVMDA0NT47PENJUkNVTUZMRVgrRE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMENCPgk8VTAwNDU+OzxESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFQj4JPFUwMDQ1Pjs8RElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUxRUJBPgk8VTAwNDU+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQkI+CTxVMDA0NT47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFQkM+CTxVMDA0NT47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQkQ+CTxVMDA0NT47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRTFBPgk8VTAwNDU+OzxUSUxERS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTFCPgk8VTAwNDU+OzxUSUxERS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDExNj4JPFUwMDQ1Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMTc+CTxVMDA0NT47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUVCOD4JPFUwMDQ1Pjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQjk+CTxVMDA0NT47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUUxQz4JPFUwMDQ1Pjs8Q0VESUxMQStCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRTFEPgk8VTAwNDU+OzxDRURJTExBK0JSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTE4Pgk8VTAwNDU+OzxPR09ORUs+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExOT4JPFUwMDQ1Pjs8T0dPTkVLPjs8U01BTEw+O0lHTk9SRQorPFUwMTEyPgk8VTAwNDU+OzxNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExMz4JPFUwMDQ1Pjs8TUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRTE2Pgk8VTAwNDU+OzxNQUNST04rQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUxNz4JPFUwMDQ1Pjs8TUFDUk9OK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTE0Pgk8VTAwNDU+OzxNQUNST04rR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUxNT4JPFUwMDQ1Pjs8TUFDUk9OK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRTE4Pgk8VTAwNDU+OzxNQUNST04rQ0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUxRTE5Pgk8VTAwNDU+OzxNQUNST04rQ0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxlOD4KKzxVMDExQT4JPFUwMTFBPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMTFCPgk8VTAxMUE+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMDQ2Pgk8VTAwNDY+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjY+CTxVMDA0Nj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxOTE+CTxVMDA0Nj47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE5Mj4JPFUwMDQ2Pjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUUxRT4JPFUwMDQ2Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMUY+CTxVMDA0Nj47PERPVD47PFNNQUxMPjtJR05PUkUKKzxmOD4KKzxVRkIwMD4JIjxVMDA0Nj48VTAwNDY+IjsiPE5PTkU+PE5PTkU+IjsiPFVGQjAwPjxVRkIwMD4iO0lHTk9SRQorPFVGQjAxPgkiPFUwMDQ2PjxVMDA0OT4iOyI8Tk9ORT48Tk9ORT4iOyI8VUZCMDE+PFVGQjAxPiI7SUdOT1JFCis8VUZCMDI+CSI8VTAwNDY+PFUwMDRDPiI7IjxOT05FPjxOT05FPiI7IjxVRkIwMj48VUZCMDI+IjtJR05PUkUKKzxVRkIwMz4JIjxVMDA0Nj48VTAwNDY+PFUwMDQ5PiI7IjxOT05FPjxOT05FPjxOT05FPiI7IjxVRkIwMz48VUZCMDM+PFVGQjAzPiI7SUdOT1JFCis8VUZCMDQ+CSI8VTAwNDY+PFUwMDQ2PjxVMDA0Qz4iOyI8Tk9ORT48Tk9ORT48Tk9ORT4iOyI8VUZCMDQ+PFVGQjA0PjxVRkIwND4iO0lHTk9SRQorPFUwMDQ3Pgk8VTAwNDc+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjc+CTxVMDA0Nz47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxRjQ+CTxVMDA0Nz47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRjU+CTxVMDA0Nz47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMTFFPgk8VTAwNDc+OzxCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTFGPgk8VTAwNDc+OzxCUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDExQz4JPFUwMDQ3Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMTFEPgk8VTAwNDc+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUwMUU2Pgk8VTAwNDc+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUU3Pgk8VTAwNDc+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDEyMD4JPFUwMDQ3Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMjE+CTxVMDA0Nz47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMDFFND4JPFUwMDQ3Pjs8U1RST0tFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRTU+CTxVMDA0Nz47PFNUUk9LRT47PFNNQUxMPjtJR05PUkUKKzxVMDEyMj4JPFUwMDQ3Pjs8Q0VESUxMQT47PENBUElUQUw+O0lHTk9SRQorPFUwMTIzPgk8VTAwNDc+OzxDRURJTExBPjs8U01BTEw+O0lHTk9SRQorPFUxRTIwPgk8VTAwNDc+OzxNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUyMT4JPFUwMDQ3Pjs8TUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPGc4PgorPFUwMDQ4Pgk8VTAwNDg+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjg+CTxVMDA0OD47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFMkE+CTxVMDA0OD47PEJSRVZFLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMkI+CTxVMDA0OD47PEJSRVZFLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTI0Pgk8VTAwNDg+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMjU+CTxVMDA0OD47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFMjY+CTxVMDA0OD47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUxRTI3Pgk8VTAwNDg+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFMjI+CTxVMDA0OD47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTIzPgk8VTAwNDg+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFMjQ+CTxVMDA0OD47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTI1Pgk8VTAwNDg+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxMjY+CTxVMDA0OD47PFNUUk9LRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTI3Pgk8VTAwNDg+OzxTVFJPS0U+OzxTTUFMTD47SUdOT1JFCis8VTFFMjg+CTxVMDA0OD47PENFRElMTEE+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUyOT4JPFUwMDQ4Pjs8Q0VESUxMQT47PFNNQUxMPjtJR05PUkUKKzxoOD4KKzxDLUg+CTxDLUg+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8Qy1oPgk8Qy1IPjs8Tk9ORT47PENBUElUQUwtU01BTEw+O0lHTk9SRQorPGMtSD4JPEMtSD47PE5PTkU+OzxTTUFMTC1DQVBJVEFMPjtJR05PUkUKKzxjLWg+CTxDLUg+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMDQ5Pgk8VTAwNDk+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjk+CTxVMDA0OT47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAwQ0Q+CTxVMDA0OT47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRUQ+CTxVMDA0OT47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMENDPgk8VTAwNDk+OzxHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMEVDPgk8VTAwNDk+OzxHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIwOD4JPFUwMDQ5Pjs8RE9VQkxFLUdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMDk+CTxVMDA0OT47PERPVUJMRS1HUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDEyQz4JPFUwMDQ5Pjs8QlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEyRD4JPFUwMDQ5Pjs8QlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMEE+CTxVMDA0OT47PElOVkVSVEVELUJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMEI+CTxVMDA0OT47PElOVkVSVEVELUJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMENFPgk8VTAwNDk+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRUU+CTxVMDA0OT47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTAxQ0Y+CTxVMDA0OT47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRDA+CTxVMDA0OT47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMENGPgk8VTAwNDk+OzxESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFRj4JPFUwMDQ5Pjs8RElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUxRTJFPgk8VTAwNDk+OzxESUFFUkVTSVMrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUyRj4JPFUwMDQ5Pjs8RElBRVJFU0lTK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRUM4Pgk8VTAwNDk+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQzk+CTxVMDA0OT47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTAxMjg+CTxVMDA0OT47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMjk+CTxVMDA0OT47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRTJDPgk8VTAwNDk+OzxUSUxERS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTJEPgk8VTAwNDk+OzxUSUxERS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDEzMD4JPFUwMDQ5Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMzE+CTxVMDA0OT47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUVDQT4JPFUwMDQ5Pjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQ0I+CTxVMDA0OT47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDEyRT4JPFUwMDQ5Pjs8T0dPTkVLPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMkY+CTxVMDA0OT47PE9HT05FSz47PFNNQUxMPjtJR05PUkUKKzxVMDEyQT4JPFUwMDQ5Pjs8TUFDUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMkI+CTxVMDA0OT47PE1BQ1JPTj47PFNNQUxMPjtJR05PUkUKKzxpOD4KKzxVMDEzMj4JIjxVMDA0OT48VTAwNEE+IjsiPFUwMTMyPjxVMDEzMj4iOyI8Q0FQSVRBTD48Q0FQSVRBTD4iO0lHTk9SRQorPFUwMTMzPgkiPFUwMDQ5PjxVMDA0QT4iOyI8VTAxMzI+PFUwMTMyPiI7IjxTTUFMTD48U01BTEw+IjtJR05PUkUKKzxVMDA0QT4JPFUwMDRBPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDZBPgk8VTAwNEE+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTM0Pgk8VTAwNEE+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMzU+CTxVMDA0QT47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8ajg+Cis8VTAwNEI+CTxVMDA0Qj47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2Qj4JPFUwMDRCPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMUUzMD4JPFUwMDRCPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzMT4JPFUwMDRCPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAxRTg+CTxVMDA0Qj47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRTk+CTxVMDA0Qj47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMTk4Pgk8VTAwNEI+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxOTk+CTxVMDA0Qj47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFMzI+CTxVMDA0Qj47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTMzPgk8VTAwNEI+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxMzY+CTxVMDA0Qj47PENFRElMTEE+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEzNz4JPFUwMDRCPjs8Q0VESUxMQT47PFNNQUxMPjtJR05PUkUKKzxVMUUzND4JPFUwMDRCPjs8TElORS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTM1Pgk8VTAwNEI+OzxMSU5FLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPGs4PgorPFUwMTM4Pgk8VTAwNEI+OzxVMDEzOD47PFNNQUxMPjtJR05PUkUKKzxVMDE0MT4JPFUwMTQxPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMTQyPgk8VTAxNDE+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMDRDPgk8VTAwNEM+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNkM+CTxVMDA0Qz47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMzk+CTxVMDA0Qz47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxM0E+CTxVMDA0Qz47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMTNEPgk8VTAwNEM+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTNFPgk8VTAwNEM+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDEzRj4JPFUwMDRDPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNDA+CTxVMDA0Qz47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUUzNj4JPFUwMDRDPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMzc+CTxVMDA0Qz47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDEzQj4JPFUwMDRDPjs8Q0VESUxMQT47PENBUElUQUw+O0lHTk9SRQorPFUwMTNDPgk8VTAwNEM+OzxDRURJTExBPjs8U01BTEw+O0lHTk9SRQorPFUxRTM4Pgk8VTAwNEM+OzxNQUNST04rRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMzk+CTxVMDA0Qz47PE1BQ1JPTitET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTFFM0M+CTxVMDA0Qz47PE1BQ1JPTitDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFM0Q+CTxVMDA0Qz47PE1BQ1JPTitDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRTNBPgk8VTAwNEM+OzxMSU5FLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFM0I+CTxVMDA0Qz47PExJTkUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8bDg+Cis8VTAwNEQ+CTxVMDA0RD47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2RD4JPFUwMDREPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMUUzRT4JPFUwMDREPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzRj4JPFUwMDREPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFNDA+CTxVMDA0RD47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTQxPgk8VTAwNEQ+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFNDI+CTxVMDA0RD47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTQzPgk8VTAwNEQ+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8bTg+Cis8VTAwNEU+CTxVMDA0RT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2RT4JPFUwMDRFPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDE0Nz4JPFUwMDRFPjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0OD4JPFUwMDRFPjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAwRDE+CTxVMDA0RT47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRjE+CTxVMDA0RT47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRTQ0Pgk8VTAwNEU+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU0NT4JPFUwMDRFPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTQ2Pgk8VTAwNEU+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU0Nz4JPFUwMDRFPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTQ1Pgk8VTAwNEU+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNDY+CTxVMDA0RT47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFNEE+CTxVMDA0RT47PE1BQ1JPTitDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNEI+CTxVMDA0RT47PE1BQ1JPTitDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRTQ4Pgk8VTAwNEU+OzxMSU5FLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNDk+CTxVMDA0RT47PExJTkUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxNDk+CTxVMDA0RT47PFBSRUNFREVELUJZLUFQT1NUUk9QSEU+OzxTTUFMTD47SUdOT1JFCis8bjg+Cis8VTAxNDM+CTxVMDE0Mz47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0ND4JPFUwMTQzPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDE0QT4JIjxVMDA0RT48VTAwNDc+IjsiPFUwMTRBPjxVMDE0QT4iOyI8Q0FQSVRBTD48Q0FQSVRBTD4iO0lHTk9SRQorPFUwMTRCPgkiPFUwMDRFPjxVMDA0Nz4iOyI8VTAxNEE+PFUwMTRBPiI7IjxTTUFMTD48U01BTEw+IjtJR05PUkUKKzxVMDA0Rj4JPFUwMDRGPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDZGPgk8VTAwNEY+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMEJBPgk8VTAwNEY+OzxOT05FPjs8VTAwQkE+O0lHTk9SRQorPFUwMEQzPgk8VTAwRDM+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMEYzPgk8VTAwRDM+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDBEMj4JPFUwMDRGPjs8R1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGMj4JPFUwMDRGPjs8R1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMEM+CTxVMDA0Rj47PERPVUJMRS1HUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjBEPgk8VTAwNEY+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxNEU+CTxVMDA0Rj47PEJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNEY+CTxVMDA0Rj47PEJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjBFPgk8VTAwNEY+OzxJTlZFUlRFRC1CUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjBGPgk8VTAwNEY+OzxJTlZFUlRFRC1CUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDBEND4JPFUwMDRGPjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMEY0Pgk8VTAwNEY+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRUQwPgk8VTAwNEY+OzxDSVJDVU1GTEVYK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRDE+CTxVMDA0Rj47PENJUkNVTUZMRVgrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFRDI+CTxVMDA0Rj47PENJUkNVTUZMRVgrR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVEMz4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMUVEND4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRDU+CTxVMDA0Rj47PENJUkNVTUZMRVgrSE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVENj4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUxRUQ3Pgk8VTAwNEY+OzxDSVJDVU1GTEVYK1RJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRUQ4Pgk8VTAwNEY+OzxDSVJDVU1GTEVYK0RPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUQ5Pgk8VTAwNEY+OzxDSVJDVU1GTEVYK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDFEMT4JPFUwMDRGPjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFEMj4JPFUwMDRGPjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAwRDY+CTxVMDA0Rj47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUwMEY2Pgk8VTAwNEY+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTAxNTA+CTxVMDA0Rj47PERPVUJMRS1BQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMTUxPgk8VTAwNEY+OzxET1VCTEUtQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFQ0U+CTxVMDA0Rj47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDRj4JPFUwMDRGPjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMDBENT4JPFUwMDRGPjs8VElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGNT4JPFUwMDRGPjs8VElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFNEM+CTxVMDA0Rj47PFRJTERFK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNEQ+CTxVMDA0Rj47PFRJTERFK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTRFPgk8VTAwNEY+OzxUSUxERStESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU0Rj4JPFUwMDRGPjs8VElMREUrRElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUxRUNDPgk8VTAwNEY+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDRD4JPFUwMDRGPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMEQ4Pgk8VTAwNEY+OzxTVFJPS0U+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGOD4JPFUwMDRGPjs8U1RST0tFPjs8U01BTEw+O0lHTk9SRQorPFUwMUZFPgk8VTAwNEY+OzxTVFJPS0UrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFGRj4JPFUwMDRGPjs8U1RST0tFK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMUVBPgk8VTAwNEY+OzxPR09ORUs+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFFQj4JPFUwMDRGPjs8T0dPTkVLPjs8U01BTEw+O0lHTk9SRQorPFUwMUVDPgk8VTAwNEY+OzxPR09ORUsrTUFDUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRUQ+CTxVMDA0Rj47PE9HT05FSytNQUNST04+OzxTTUFMTD47SUdOT1JFCis8VTAxNEM+CTxVMDA0Rj47PE1BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTREPgk8VTAwNEY+OzxNQUNST04+OzxTTUFMTD47SUdOT1JFCis8VTFFNTI+CTxVMDA0Rj47PE1BQ1JPTitBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTUzPgk8VTAwNEY+OzxNQUNST04rQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFNTA+CTxVMDA0Rj47PE1BQ1JPTitHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRTUxPgk8VTAwNEY+OzxNQUNST04rR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxQTA+CTxVMDA0Rj47PEhPUk4+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFBMT4JPFUwMDRGPjs8SE9STj47PFNNQUxMPjtJR05PUkUKKzxVMUVEQT4JPFUwMDRGPjs8SE9STitBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRURCPgk8VTAwNEY+OzxIT1JOK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRURDPgk8VTAwNEY+OzxIT1JOK0dSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFREQ+CTxVMDA0Rj47PEhPUk4rR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFREU+CTxVMDA0Rj47PEhPUk4rSE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRURGPgk8VTAwNEY+OzxIT1JOK0hPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFRTA+CTxVMDA0Rj47PEhPUk4rVElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFMT4JPFUwMDRGPjs8SE9STitUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUVFMj4JPFUwMDRGPjs8SE9STitET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFMz4JPFUwMDRGPjs8SE9STitET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8bzg+Cis8VTAxNTI+CSI8VTAwNEY+PFUwMDQ1PiI7IjxVMDE1Mj48VTAxNTI+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDE1Mz4JIjxVMDA0Rj48VTAwNDU+IjsiPFUwMTUyPjxVMDE1Mj4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAwNTA+CTxVMDA1MD47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3MD4JPFUwMDUwPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMUU1ND4JPFUwMDUwPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU1NT4JPFUwMDUwPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFNTY+CTxVMDA1MD47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTU3Pgk8VTAwNTA+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8cDg+Cis8VTAwNTE+CTxVMDA1MT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3MT4JPFUwMDUxPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxxOD4KKzxVMDA1Mj4JPFUwMDUyPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDcyPgk8VTAwNTI+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTU0Pgk8VTAwNTI+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMTU1Pgk8VTAwNTI+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDIxMD4JPFUwMDUyPjs8RE9VQkxFLUdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMTE+CTxVMDA1Mj47PERPVUJMRS1HUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIxMj4JPFUwMDUyPjs8SU5WRVJURUQtQlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIxMz4JPFUwMDUyPjs8SU5WRVJURUQtQlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFNTg+CTxVMDA1Mj47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTU5Pgk8VTAwNTI+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFNUE+CTxVMDA1Mj47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTVCPgk8VTAwNTI+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxNTY+CTxVMDA1Mj47PENFRElMTEE+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE1Nz4JPFUwMDUyPjs8Q0VESUxMQT47PFNNQUxMPjtJR05PUkUKKzxVMUU1Qz4JPFUwMDUyPjs8TUFDUk9OK0RPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTVEPgk8VTAwNTI+OzxNQUNST04rRE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUxRTVFPgk8VTAwNTI+OzxMSU5FLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNUY+CTxVMDA1Mj47PExJTkUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8cjg+Cis8VTAxNTg+CTxVMDE1OD47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE1OT4JPFUwMTU4Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDA1Mz4JPFUwMDUzPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDczPgk8VTAwNTM+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFVGQjA2PgkiPFUwMDUzPjxVMDA1ND4iOyI8Tk9ORT48Tk9ORT4iOyI8VUZCMDY+PFVGQjA2PiI7SUdOT1JFCis8VTAxNUE+CTxVMDA1Mz47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNUI+CTxVMDA1Mz47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTY0Pgk8VTAwNTM+OzxBQ1VURStET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2NT4JPFUwMDUzPjs8QUNVVEUrRE9UPjs8U01BTEw+O0lHTk9SRQorPFUwMTVDPgk8VTAwNTM+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNUQ+CTxVMDA1Mz47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFNjY+CTxVMDA1Mz47PENBUk9OK0RPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTY3Pgk8VTAwNTM+OzxDQVJPTitET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFNjA+CTxVMDA1Mz47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTYxPgk8VTAwNTM+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFNjI+CTxVMDA1Mz47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTYzPgk8VTAwNTM+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTFFNjg+CTxVMDA1Mz47PERPVCtET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2OT4JPFUwMDUzPjs8RE9UK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDE1RT4JPFUwMDUzPjs8Q0VESUxMQT47PENBUElUQUw+O0lHTk9SRQorPFUwMTVGPgk8VTAwNTM+OzxDRURJTExBPjs8U01BTEw+O0lHTk9SRQorPHM4PgorPFUwMTYwPgk8VTAxNjA+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNjE+CTxVMDE2MD47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxN0Y+CTxVMDA1Mz47PFUwMTdGPjs8U01BTEw+O0lHTk9SRQorPFUwMERGPgkiPFUwMDUzPjxVMDA1Mz4iOyI8Tk9ORT48Tk9ORT4iOyI8U01BTEw+PFUwMERGPiI7SUdOT1JFCis8VUZCMDU+CSI8VTAwNTM+PFUwMDU0PiI7IjxOT05FPjxOT05FPiI7IjxVRkIwNT48VUZCMDU+IjtJR05PUkUKKzxVMDA1ND4JPFUwMDU0Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDc0Pgk8VTAwNTQ+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTY0Pgk8VTAwNTQ+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTY1Pgk8VTAwNTQ+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMUU2QT4JPFUwMDU0Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNkI+CTxVMDA1ND47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUU2Qz4JPFUwMDU0Pjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNkQ+CTxVMDA1ND47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDE2Nj4JPFUwMDU0Pjs8U1RST0tFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNjc+CTxVMDA1ND47PFNUUk9LRT47PFNNQUxMPjtJR05PUkUKKzxVMDE2Mj4JPFUwMDU0Pjs8Q0VESUxMQT47PENBUElUQUw+O0lHTk9SRQorPFUwMTYzPgk8VTAwNTQ+OzxDRURJTExBPjs8U01BTEw+O0lHTk9SRQorPFUxRTcwPgk8VTAwNTQ+OzxNQUNST04rQ0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUxRTcxPgk8VTAwNTQ+OzxNQUNST04rQ0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMUU2RT4JPFUwMDU0Pjs8TElORS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTZGPgk8VTAwNTQ+OzxMSU5FLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPHQ4PgorPFUwMTA2Pgk8VTAxMDY+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMDc+CTxVMDEwNj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAwREU+CSI8VTAwNTQ+PFUwMDQ4PiI7IjxVMDBERT48VTAwREU+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDBGRT4JIjxVMDA1ND48VTAwNDg+IjsiPFUwMERFPjxVMDBERT4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAwNTU+CTxVMDA1NT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3NT4JPFUwMDU1Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDBEQT4JPFUwMDU1Pjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGQT4JPFUwMDU1Pjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAwRDk+CTxVMDA1NT47PEdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRjk+CTxVMDA1NT47PEdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjE0Pgk8VTAwNTU+OzxET1VCTEUtR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIxNT4JPFUwMDU1Pjs8RE9VQkxFLUdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTZDPgk8VTAwNTU+OzxCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTZEPgk8VTAwNTU+OzxCUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIxNj4JPFUwMDU1Pjs8SU5WRVJURUQtQlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIxNz4JPFUwMDU1Pjs8SU5WRVJURUQtQlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAwREI+CTxVMDA1NT47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGQj4JPFUwMDU1Pjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMDFEMz4JPFUwMDU1Pjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFEND4JPFUwMDU1Pjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAxNkU+CTxVMDA1NT47PFJJTkc+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE2Rj4JPFUwMDU1Pjs8UklORz47PFNNQUxMPjtJR05PUkUKKzxVMDBEQz4JPFUwMDU1Pjs8RElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRkM+CTxVMDA1NT47PERJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMDFENT4JPFUwMDU1Pjs8RElBRVJFU0lTK01BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUQ2Pgk8VTAwNTU+OzxESUFFUkVTSVMrTUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMUQ3Pgk8VTAwNTU+OzxESUFFUkVTSVMrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFEOD4JPFUwMDU1Pjs8RElBRVJFU0lTK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMURCPgk8VTAwNTU+OzxESUFFUkVTSVMrR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFEQz4JPFUwMDU1Pjs8RElBRVJFU0lTK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMUQ5Pgk8VTAwNTU+OzxESUFFUkVTSVMrQ0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFEQT4JPFUwMDU1Pjs8RElBRVJFU0lTK0NBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMTcwPgk8VTAwNTU+OzxET1VCTEUtQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE3MT4JPFUwMDU1Pjs8RE9VQkxFLUFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRUU2Pgk8VTAwNTU+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRTc+CTxVMDA1NT47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTAxNjg+CTxVMDA1NT47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNjk+CTxVMDA1NT47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRTc4Pgk8VTAwNTU+OzxUSUxERStBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTc5Pgk8VTAwNTU+OzxUSUxERStBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUU3ND4JPFUwMDU1Pjs8VElMREUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU3NT4JPFUwMDU1Pjs8VElMREUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTFFRTQ+CTxVMDA1NT47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUU1Pgk8VTAwNTU+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxNzI+CTxVMDA1NT47PE9HT05FSz47PENBUElUQUw+O0lHTk9SRQorPFUwMTczPgk8VTAwNTU+OzxPR09ORUs+OzxTTUFMTD47SUdOT1JFCis8VTAxNkE+CTxVMDA1NT47PE1BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTZCPgk8VTAwNTU+OzxNQUNST04+OzxTTUFMTD47SUdOT1JFCis8VTFFN0E+CTxVMDA1NT47PE1BQ1JPTitESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU3Qj4JPFUwMDU1Pjs8TUFDUk9OK0RJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMUU3Mj4JPFUwMDU1Pjs8TUFDUk9OK0RJQUVSRVNJUy1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTczPgk8VTAwNTU+OzxNQUNST04rRElBRVJFU0lTLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUxRTc2Pgk8VTAwNTU+OzxNQUNST04rQ0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUxRTc3Pgk8VTAwNTU+OzxNQUNST04rQ0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMDFBRj4JPFUwMDU1Pjs8SE9STj47PENBUElUQUw+O0lHTk9SRQorPFUwMUIwPgk8VTAwNTU+OzxIT1JOPjs8U01BTEw+O0lHTk9SRQorPFUxRUU4Pgk8VTAwNTU+OzxIT1JOK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRTk+CTxVMDA1NT47PEhPUk4rQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFRUE+CTxVMDA1NT47PEhPUk4rR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFQj4JPFUwMDU1Pjs8SE9STitHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMUVFQz4JPFUwMDU1Pjs8SE9STitIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRUQ+CTxVMDA1NT47PEhPUk4rSE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVFRT4JPFUwMDU1Pjs8SE9STitUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUxRUVGPgk8VTAwNTU+OzxIT1JOK1RJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRUYwPgk8VTAwNTU+OzxIT1JOK0RPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUYxPgk8VTAwNTU+OzxIT1JOK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzx1OD4KKzxVMDA1Nj4JPFUwMDU2Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDc2Pgk8VTAwNTY+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUxRTdDPgk8VTAwNTY+OzxUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUxRTdEPgk8VTAwNTY+OzxUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUU3RT4JPFUwMDU2Pjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFN0Y+CTxVMDA1Nj47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzx2OD4KKzxVMDA1Nz4JPFUwMDU3Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDc3Pgk8VTAwNTc+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUxRTgyPgk8VTAwNTc+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTgzPgk8VTAwNTc+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUU4MD4JPFUwMDU3Pjs8R1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU4MT4JPFUwMDU3Pjs8R1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxNzQ+CTxVMDA1Nz47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE3NT4JPFUwMDU3Pjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMUU4ND4JPFUwMDU3Pjs8RElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFODU+CTxVMDA1Nz47PERJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMUU4Nj4JPFUwMDU3Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFODc+CTxVMDA1Nz47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUU4OD4JPFUwMDU3Pjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFODk+CTxVMDA1Nz47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzx3OD4KKzxVMDA1OD4JPFUwMDU4Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDc4Pgk8VTAwNTg+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUxRThDPgk8VTAwNTg+OzxESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU4RD4JPFUwMDU4Pjs8RElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUxRThBPgk8VTAwNTg+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU4Qj4JPFUwMDU4Pjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPHg4PgorPFUwMDU5Pgk8VTAwNTk+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzk+CTxVMDA1OT47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAwREQ+CTxVMDA1OT47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRkQ+CTxVMDA1OT47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRUYyPgk8VTAwNTk+OzxHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRUYzPgk8VTAwNTk+OzxHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDE3Nj4JPFUwMDU5Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMTc3Pgk8VTAwNTk+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUwMTc4Pgk8VTAwNTk+OzxESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGRj4JPFUwMDU5Pjs8RElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUxRUY2Pgk8VTAwNTk+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRjc+CTxVMDA1OT47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFRjg+CTxVMDA1OT47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRjk+CTxVMDA1OT47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRThFPgk8VTAwNTk+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU4Rj4JPFUwMDU5Pjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRUY0Pgk8VTAwNTk+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVGNT4JPFUwMDU5Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPHk4PgorPFUwMDVBPgk8VTAwNUE+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwN0E+CTxVMDA1QT47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxNzk+CTxVMDA1QT47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxN0E+CTxVMDA1QT47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTkwPgk8VTAwNUE+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFOTE+CTxVMDA1QT47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTAxN0I+CTxVMDA1QT47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUwMTdDPgk8VTAwNUE+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFOTI+CTxVMDA1QT47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTkzPgk8VTAwNUE+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxQjU+CTxVMDA1QT47PFNUUk9LRT47PENBUElUQUw+O0lHTk9SRQorPFUwMUI2Pgk8VTAwNUE+OzxTVFJPS0U+OzxTTUFMTD47SUdOT1JFCis8VTFFOTQ+CTxVMDA1QT47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU5NT4JPFUwMDVBPjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzx6OD4KKzxVMDE3RD4JPFUwMTdEPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMTdFPgk8VTAxN0Q+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMzkxPgk8VTAzOTE+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzg2Pgk8VTAzOTE+OzxDQVBJVEFMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0IxPgk8VTAzOTE+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBQz4JPFUwMzkxPjs8U01BTEw+OzxUT05PUz47SUdOT1JFCis8VTAzOTI+CTxVMDM5Mj47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQjI+CTxVMDM5Mj47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzkzPgk8VTAzOTM+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0IzPgk8VTAzOTM+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDM5ND4JPFUwMzk0Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCND4JPFUwMzk0Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOTU+CTxVMDM5NT47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzODg+CTxVMDM5NT47PENBUElUQUw+OzxUT05PUz47SUdOT1JFCis8VTAzQjU+CTxVMDM5NT47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0FEPgk8VTAzOTU+OzxTTUFMTD47PFRPTk9TPjtJR05PUkUKKzxVMDM5Nj4JPFUwMzk2Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCNj4JPFUwMzk2Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOTc+CTxVMDM5Nz47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzODk+CTxVMDM5Nz47PENBUElUQUw+OzxUT05PUz47SUdOT1JFCis8VTAzQjc+CTxVMDM5Nz47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0FFPgk8VTAzOTc+OzxTTUFMTD47PFRPTk9TPjtJR05PUkUKKzxVMDM5OD4JPFUwMzk4Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCOD4JPFUwMzk4Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOTk+CTxVMDM5OT47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzOEE+CTxVMDM5OT47PENBUElUQUw+OzxUT05PUz47SUdOT1JFCis8VTAzQUE+CTxVMDM5OT47PENBUElUQUw+OzxESUFMWVRJQ0E+O0lHTk9SRQorPFUwM0I5Pgk8VTAzOTk+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBRj4JPFUwMzk5Pjs8U01BTEw+OzxUT05PUz47SUdOT1JFCis8VTAzQ0E+CTxVMDM5OT47PFNNQUxMPjs8RElBTFlUSUNBPjtJR05PUkUKKzxVMDM5MD4JPFUwMzk5Pjs8U01BTEw+OzxESUFMWVRJQ0ErVE9OT1M+O0lHTk9SRQorPFUwMzlBPgk8VTAzOUE+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0JBPgk8VTAzOUE+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDM5Qj4JPFUwMzlCPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCQj4JPFUwMzlCPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOUM+CTxVMDM5Qz47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQkM+CTxVMDM5Qz47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzlEPgk8VTAzOUQ+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0JEPgk8VTAzOUQ+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDM5RT4JPFUwMzlFPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCRT4JPFUwMzlFPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOUY+CTxVMDM5Rj47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzOEM+CTxVMDM5Rj47PENBUElUQUw+OzxUT05PUz47SUdOT1JFCis8VTAzQkY+CTxVMDM5Rj47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0NDPgk8VTAzOUY+OzxTTUFMTD47PFRPTk9TPjtJR05PUkUKKzxVMDNBMD4JPFUwM0EwPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDMD4JPFUwM0EwPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQTE+CTxVMDNBMT47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzE+CTxVMDNBMT47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0EzPgk8VTAzQTM+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0MzPgk8VTAzQTM+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDMj4JPFUwM0EzPjs8U01BTEw+OzxVMDNDMj47SUdOT1JFCis8VTAzQTQ+CTxVMDNBND47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzQ+CTxVMDNBND47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0E1Pgk8VTAzQTU+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzhFPgk8VTAzQTU+OzxDQVBJVEFMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0FCPgk8VTAzQTU+OzxDQVBJVEFMPjs8RElBTFlUSUNBPjtJR05PUkUKKzxVMDNDNT4JPFUwM0E1Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQ0Q+CTxVMDNBNT47PFNNQUxMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0NCPgk8VTAzQTU+OzxTTUFMTD47PERJQUxZVElDQT47SUdOT1JFCis8VTAzQjA+CTxVMDNBNT47PFNNQUxMPjs8RElBTFlUSUNBK1RPTk9TPjtJR05PUkUKKzxVMDNBNj4JPFUwM0E2Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDNj4JPFUwM0E2Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQTc+CTxVMDNBNz47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzc+CTxVMDNBNz47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0E4Pgk8VTAzQTg+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0M4Pgk8VTAzQTg+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBOT4JPFUwM0E5Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDM4Rj4JPFUwM0E5Pjs8Q0FQSVRBTD47PFRPTk9TPjtJR05PUkUKKzxVMDNDOT4JPFUwM0E5Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQ0U+CTxVMDNBOT47PFNNQUxMPjs8VE9OT1M+O0lHTk9SRQorPFUwNDEwPgk8VTA0MTA+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDMwPgk8VTA0MTA+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxMT4JPFUwNDExPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzMT4JPFUwNDExPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTI+CTxVMDQxMj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0MzI+CTxVMDQxMj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDEzPgk8VTA0MTM+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDMzPgk8VTA0MTM+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwMz4JPFUwNDAzPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1Mz4JPFUwNDAzPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0OTA+CTxVMDQ5MD47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0OTE+CTxVMDQ5MD47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDE0Pgk8VTA0MTQ+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDM0Pgk8VTA0MTQ+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwMj4JPFUwNDAyPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1Mj4JPFUwNDAyPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTU+CTxVMDQxNT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0MzU+CTxVMDQxNT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDAxPgk8VTA0MDE+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDUxPgk8VTA0MDE+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwND4JPFUwNDA0Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1ND4JPFUwNDA0Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTY+CTxVMDQxNj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0MzY+CTxVMDQxNj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDE3Pgk8VTA0MTc+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDM3Pgk8VTA0MTc+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxOD4JPFUwNDE4Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzOD4JPFUwNDE4Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MDY+CTxVMDQwNj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NTY+CTxVMDQwNj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDA3Pgk8VTA0MDc+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDU3Pgk8VTA0MDc+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwOD4JPFUwNDA4Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1OD4JPFUwNDA4Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTk+CTxVMDQxOT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0Mzk+CTxVMDQxOT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDFBPgk8VTA0MUE+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDNBPgk8VTA0MUE+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwQz4JPFUwNDBDPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1Qz4JPFUwNDBDPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MUI+CTxVMDQxQj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0M0I+CTxVMDQxQj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDA5Pgk8VTA0MDk+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDU5Pgk8VTA0MDk+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxQz4JPFUwNDFDPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzQz4JPFUwNDFDPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MUQ+CTxVMDQxRD47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0M0Q+CTxVMDQxRD47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDBBPgk8VTA0MEE+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDVBPgk8VTA0MEE+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxRT4JPFUwNDFFPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzRT4JPFUwNDFFPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MUY+CTxVMDQxRj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0M0Y+CTxVMDQxRj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDIwPgk8VTA0MjA+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDQwPgk8VTA0MjA+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyMT4JPFUwNDIxPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0MT4JPFUwNDIxPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MjI+CTxVMDQyMj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDI+CTxVMDQyMj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDBCPgk8VTA0MEI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDVCPgk8VTA0MEI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyMz4JPFUwNDIzPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0Mz4JPFUwNDIzPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MEU+CTxVMDQwRT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NUU+CTxVMDQwRT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDI0Pgk8VTA0MjQ+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDQ0Pgk8VTA0MjQ+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyNT4JPFUwNDI1Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0NT4JPFUwNDI1Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MjY+CTxVMDQyNj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDY+CTxVMDQyNj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDA1Pgk8VTA0MDU+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDU1Pgk8VTA0MDU+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyNz4JPFUwNDI3Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0Nz4JPFUwNDI3Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MEY+CTxVMDQwRj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NUY+CTxVMDQwRj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDI4Pgk8VTA0Mjg+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDQ4Pgk8VTA0Mjg+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyOT4JPFUwNDI5Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0OT4JPFUwNDI5Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0NEE+CTxVMDQ0QT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDJBPgk8VTA0NEE+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDJCPgk8VTA0MkI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDRCPgk8VTA0MkI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQ0Qz4JPFUwNDRDPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MkM+CTxVMDQ0Qz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0MkQ+CTxVMDQyRD47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NEQ+CTxVMDQyRD47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDJFPgk8VTA0MkU+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDRFPgk8VTA0MkU+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyRj4JPFUwNDJGPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0Rj4JPFUwNDJGPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0NjI+CTxVMDQ2Mj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NjM+CTxVMDQ2Mj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDZBPgk8VTA0NkE+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDZCPgk8VTA0NkE+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQ3Mj4JPFUwNDcyPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ3Mz4JPFUwNDcyPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0NzQ+CTxVMDQ3ND47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NzU+CTxVMDQ3ND47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDgwPgk8VTA0ODA+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDgxPgk8VTA0ODA+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDVEMD4JPFUwNUQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQxPgk8VTA1RDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDI+CTxVMDVEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEMz4JPFUwNUQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQ0Pgk8VTA1RDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDU+CTxVMDVENT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVENj4JPFUwNUQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQ3Pgk8VTA1RDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDg+CTxVMDVEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEOT4JPFUwNUQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNURBPgk8VTA1REE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1REI+CTxVMDVEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEQz4JPFUwNURDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUREPgk8VTA1REQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1REU+CTxVMDVERT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVERj4JPFUwNURGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUUwPgk8VTA1RTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTE+CTxVMDVFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFMj4JPFUwNUUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUUzPgk8VTA1RTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTQ+CTxVMDVFND47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFNT4JPFUwNUU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUU2Pgk8VTA1RTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTc+CTxVMDVFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFOD4JPFUwNUU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUU5Pgk8VTA1RTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RUE+CTxVMDVFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKworJSBBcmFiaWMgY29sbGF0aW5nCisKKzxVMDYwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNjBDPgorPFUwNjFCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA2MUI+Cis8VTA2MUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDYxRj4KKzxVMDY0MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNjQwPgorCis8VTA2MjE+CTxVMDYyMT47PFUwNjIxPjtJR05PUkU7SUdOT1JFCis8VTA2MjI+CTxVMDYyMj47PFUwNjIyPjtJR05PUkU7SUdOT1JFCis8VUZFODI+CTxVMDYyMj47PFVGRTgyPjtJR05PUkU7SUdOT1JFCis8VTA2MjM+CTxVMDYyMT47PFUwNjIzPjtJR05PUkU7SUdOT1JFCis8VUZFODQ+CTxVMDYyMT47PFVGRTg0PjtJR05PUkU7SUdOT1JFCis8VTA2MjQ+CTxVMDYyMT47PFUwNjI0PjtJR05PUkU7SUdOT1JFCis8VTA2MjU+CTxVMDYyMT47PFUwNjI1PjtJR05PUkU7SUdOT1JFCis8VUZFODg+CTxVMDYyMT47PFVGRTg4PjtJR05PUkU7SUdOT1JFCis8VTA2MjY+CTxVMDYyMT47PFUwNjI2PjtJR05PUkU7SUdOT1JFCis8VTA2NzA+CTxVMDY3MD47PFUwNjcwPjtJR05PUkU7SUdOT1JFCis8VTA2Mjc+CTxVMDYyNz47PFUwNjI3PjtJR05PUkU7SUdOT1JFCis8VUZFOEQ+CTxVMDYyNz47PFVGRThEPjtJR05PUkU7SUdOT1JFCis8VUZFOEU+CTxVMDYyNz47PFVGRThFPjtJR05PUkU7SUdOT1JFCis8VUUwMTY+CTxVMDYyNz47PFVFMDE2PjtJR05PUkU7SUdOT1JFCis8VTA2Mjg+CTxVMDYyOD47PFUwNjI4PjtJR05PUkU7SUdOT1JFCis8VUZFOEY+CTxVMDYyOD47PFVGRThGPjtJR05PUkU7SUdOT1JFCis8VUZFOTA+CTxVMDYyOD47PFVGRTkwPjtJR05PUkU7SUdOT1JFCis8VUZFOTE+CTxVMDYyOD47PFVGRTkxPjtJR05PUkU7SUdOT1JFCis8VUZFOTI+CTxVMDYyOD47PFVGRTkyPjtJR05PUkU7SUdOT1JFCis8VTA2N0U+CTxVMDY3RT47PFUwNjdFPjtJR05PUkU7SUdOT1JFCis8VTA2QTQ+CTxVMDZBND47PFUwNkE0PjtJR05PUkU7SUdOT1JFCis8VTA2Mjk+CTxVMDYyOT47PFUwNjI5PjtJR05PUkU7SUdOT1JFCis8VUZFOTM+CTxVMDYyOT47PFVGRTkzPjtJR05PUkU7SUdOT1JFCis8VUZFOTQ+CTxVMDYyOT47PFVGRTk0PjtJR05PUkU7SUdOT1JFCis8VTA2MkE+CTxVMDYyOT47PFUwNjJBPjtJR05PUkU7SUdOT1JFCis8VUZFOTU+CTxVMDYyOT47PFVGRTk1PjtJR05PUkU7SUdOT1JFCis8VUZFOTY+CTxVMDYyOT47PFVGRTk2PjtJR05PUkU7SUdOT1JFCis8VUZFOTc+CTxVMDYyOT47PFVGRTk3PjtJR05PUkU7SUdOT1JFCis8VUZFOTg+CTxVMDYyOT47PFVGRTk4PjtJR05PUkU7SUdOT1JFCis8VTA2MkI+CTxVMDYyQj47PFUwNjJCPjtJR05PUkU7SUdOT1JFCis8VUZFOTk+CTxVMDYyQj47PFVGRTk5PjtJR05PUkU7SUdOT1JFCis8VUZFOUE+CTxVMDYyQj47PFVGRTlBPjtJR05PUkU7SUdOT1JFCis8VUZFOUI+CTxVMDYyQj47PFVGRTlCPjtJR05PUkU7SUdOT1JFCis8VUZFOUM+CTxVMDYyQj47PFVGRTlDPjtJR05PUkU7SUdOT1JFCis8VTA2MkM+CTxVMDYyQz47PFUwNjJDPjtJR05PUkU7SUdOT1JFCis8VUZFOUQ+CTxVMDYyQz47PFVGRTlEPjtJR05PUkU7SUdOT1JFCis8VUZFOUU+CTxVMDYyQz47PFVGRTlFPjtJR05PUkU7SUdOT1JFCis8VUZFOUY+CTxVMDYyQz47PFVGRTlGPjtJR05PUkU7SUdOT1JFCis8VUZFQTA+CTxVMDYyQz47PFVGRUEwPjtJR05PUkU7SUdOT1JFCis8VTA2MkQ+CTxVMDYyRD47PFUwNjJEPjtJR05PUkU7SUdOT1JFCis8VUZFQTE+CTxVMDYyRD47PFVGRUExPjtJR05PUkU7SUdOT1JFCis8VUZFQTI+CTxVMDYyRD47PFVGRUEyPjtJR05PUkU7SUdOT1JFCis8VUZFQTM+CTxVMDYyRD47PFVGRUEzPjtJR05PUkU7SUdOT1JFCis8VUZFQTQ+CTxVMDYyRD47PFVGRUE0PjtJR05PUkU7SUdOT1JFCis8VTA2MkU+CTxVMDYyRT47PFUwNjJFPjtJR05PUkU7SUdOT1JFCis8VUZFQTU+CTxVMDYyRT47PFVGRUE1PjtJR05PUkU7SUdOT1JFCis8VUZFQTY+CTxVMDYyRT47PFVGRUE2PjtJR05PUkU7SUdOT1JFCis8VUZFQTc+CTxVMDYyRT47PFVGRUE3PjtJR05PUkU7SUdOT1JFCis8VUZFQTg+CTxVMDYyRT47PFVGRUE4PjtJR05PUkU7SUdOT1JFCis8VTA2MkY+CTxVMDYyRj47PFUwNjJGPjtJR05PUkU7SUdOT1JFCis8VUZFQTk+CTxVMDYyRj47PFVGRUE5PjtJR05PUkU7SUdOT1JFCis8VUZFQUE+CTxVMDYyRj47PFVGRUFBPjtJR05PUkU7SUdOT1JFCis8VTA2MzA+CTxVMDYzMD47PFUwNjMwPjtJR05PUkU7SUdOT1JFCis8VUZFQUI+CTxVMDYzMD47PFVGRUFCPjtJR05PUkU7SUdOT1JFCis8VUZFQUM+CTxVMDYzMD47PFVGRUFDPjtJR05PUkU7SUdOT1JFCis8VTA2MzE+CTxVMDYzMT47PFUwNjMxPjtJR05PUkU7SUdOT1JFCis8VUZFQUQ+CTxVMDYzMT47PFVGRUFEPjtJR05PUkU7SUdOT1JFCis8VUZFQUU+CTxVMDYzMT47PFVGRUFFPjtJR05PUkU7SUdOT1JFCis8VTA2MzI+CTxVMDYzMj47PFUwNjMyPjtJR05PUkU7SUdOT1JFCis8VUZFQUY+CTxVMDYzMj47PFVGRUFGPjtJR05PUkU7SUdOT1JFCis8VUZFQjA+CTxVMDYzMj47PFVGRUIwPjtJR05PUkU7SUdOT1JFCis8VTA2MzM+CTxVMDYzMz47PFUwNjMzPjtJR05PUkU7SUdOT1JFCis8VUZFQjE+CTxVMDYzMz47PFVGRUIxPjtJR05PUkU7SUdOT1JFCis8VUZFQjI+CTxVMDYzMz47PFVGRUIyPjtJR05PUkU7SUdOT1JFCis8VUZFQjM+CTxVMDYzMz47PFVGRUIzPjtJR05PUkU7SUdOT1JFCis8VUZFQjQ+CTxVMDYzMz47PFVGRUI0PjtJR05PUkU7SUdOT1JFCis8VTA2MzQ+CTxVMDYzND47PFUwNjM0PjtJR05PUkU7SUdOT1JFCis8VUZFQjU+CTxVMDYzND47PFVGRUI1PjtJR05PUkU7SUdOT1JFCis8VUZFQjY+CTxVMDYzND47PFVGRUI2PjtJR05PUkU7SUdOT1JFCis8VUZFQjc+CTxVMDYzND47PFVGRUI3PjtJR05PUkU7SUdOT1JFCis8VUZFQjg+CTxVMDYzND47PFVGRUI4PjtJR05PUkU7SUdOT1JFCis8VTA2MzU+CTxVMDYzNT47PFUwNjM1PjtJR05PUkU7SUdOT1JFCis8VUZFQjk+CTxVMDYzNT47PFVGRUI5PjtJR05PUkU7SUdOT1JFCis8VUZFQkE+CTxVMDYzNT47PFVGRUJBPjtJR05PUkU7SUdOT1JFCis8VUZFQkI+CTxVMDYzNT47PFVGRUJCPjtJR05PUkU7SUdOT1JFCis8VUZFQkM+CTxVMDYzNT47PFVGRUJDPjtJR05PUkU7SUdOT1JFCis8VTA2MzY+CTxVMDYzNj47PFUwNjM2PjtJR05PUkU7SUdOT1JFCis8VUZFQkQ+CTxVMDYzNj47PFVGRUJEPjtJR05PUkU7SUdOT1JFCis8VUZFQkU+CTxVMDYzNj47PFVGRUJFPjtJR05PUkU7SUdOT1JFCis8VUZFQkY+CTxVMDYzNj47PFVGRUJGPjtJR05PUkU7SUdOT1JFCis8VUZFQzA+CTxVMDYzNj47PFVGRUMwPjtJR05PUkU7SUdOT1JFCis8VTA2Mzc+CTxVMDYzNz47PFUwNjM3PjtJR05PUkU7SUdOT1JFCis8VUZFQzE+CTxVMDYzNz47PFVGRUMxPjtJR05PUkU7SUdOT1JFCis8VUZFQzI+CTxVMDYzNz47PFVGRUMyPjtJR05PUkU7SUdOT1JFCis8VUZFQzM+CTxVMDYzNz47PFVGRUMzPjtJR05PUkU7SUdOT1JFCis8VUZFQzQ+CTxVMDYzNz47PFVGRUM0PjtJR05PUkU7SUdOT1JFCis8VTA2Mzg+CTxVMDYzOD47PFUwNjM4PjtJR05PUkU7SUdOT1JFCis8VUZFQzU+CTxVMDYzOD47PFVGRUM1PjtJR05PUkU7SUdOT1JFCis8VUZFQzY+CTxVMDYzOD47PFVGRUM2PjtJR05PUkU7SUdOT1JFCis8VUZFQzc+CTxVMDYzOD47PFVGRUM3PjtJR05PUkU7SUdOT1JFCis8VUZFQzg+CTxVMDYzOD47PFVGRUM4PjtJR05PUkU7SUdOT1JFCis8VTA2Mzk+CTxVMDYzOT47PFUwNjM5PjtJR05PUkU7SUdOT1JFCis8VUZFQzk+CTxVMDYzOT47PFVGRUM5PjtJR05PUkU7SUdOT1JFCis8VUZFQ0E+CTxVMDYzOT47PFVGRUNBPjtJR05PUkU7SUdOT1JFCis8VUZFQ0I+CTxVMDYzOT47PFVGRUNCPjtJR05PUkU7SUdOT1JFCis8VUZFQ0M+CTxVMDYzOT47PFVGRUNDPjtJR05PUkU7SUdOT1JFCis8VTA2M0E+CTxVMDYzQT47PFUwNjNBPjtJR05PUkU7SUdOT1JFCis8VUZFQ0Q+CTxVMDYzQT47PFVGRUNEPjtJR05PUkU7SUdOT1JFCis8VUZFQ0U+CTxVMDYzQT47PFVGRUNFPjtJR05PUkU7SUdOT1JFCis8VUZFQ0Y+CTxVMDYzQT47PFVGRUNGPjtJR05PUkU7SUdOT1JFCis8VUZFRDA+CTxVMDYzQT47PFVGRUQwPjtJR05PUkU7SUdOT1JFCis8VTA2NDE+CTxVMDY0MT47PFUwNjQxPjtJR05PUkU7SUdOT1JFCis8VUZFRDE+CTxVMDY0MT47PFVGRUQxPjtJR05PUkU7SUdOT1JFCis8VUZFRDI+CTxVMDY0MT47PFVGRUQyPjtJR05PUkU7SUdOT1JFCis8VUZFRDM+CTxVMDY0MT47PFVGRUQzPjtJR05PUkU7SUdOT1JFCis8VUZFRDQ+CTxVMDY0MT47PFVGRUQ0PjtJR05PUkU7SUdOT1JFCis8VTA2NDI+CTxVMDY0Mj47PFUwNjQyPjtJR05PUkU7SUdOT1JFCis8VUZFRDU+CTxVMDY0Mj47PFVGRUQ1PjtJR05PUkU7SUdOT1JFCis8VUZFRDY+CTxVMDY0Mj47PFVGRUQ2PjtJR05PUkU7SUdOT1JFCis8VUZFRDc+CTxVMDY0Mj47PFVGRUQ3PjtJR05PUkU7SUdOT1JFCis8VUZFRDg+CTxVMDY0Mj47PFVGRUQ4PjtJR05PUkU7SUdOT1JFCis8VTA2NDM+CTxVMDY0Mz47PFUwNjQzPjtJR05PUkU7SUdOT1JFCis8VUZFRDk+CTxVMDY0Mz47PFVGRUQ5PjtJR05PUkU7SUdOT1JFCis8VUZFREE+CTxVMDY0Mz47PFVGRURBPjtJR05PUkU7SUdOT1JFCis8VUZFREI+CTxVMDY0Mz47PFVGRURCPjtJR05PUkU7SUdOT1JFCis8VUZFREM+CTxVMDY0Mz47PFVGRURDPjtJR05PUkU7SUdOT1JFCis8VTA2NDQ+CTxVMDY0ND47PFUwNjQ0PjtJR05PUkU7SUdOT1JFCis8VUZFREQ+CTxVMDY0ND47PFVGRUREPjtJR05PUkU7SUdOT1JFCis8VUZFREU+CTxVMDY0ND47PFVGRURFPjtJR05PUkU7SUdOT1JFCis8VUZFREY+CTxVMDY0ND47PFVGRURGPjtJR05PUkU7SUdOT1JFCis8VUZFRTA+CTxVMDY0ND47PFVGRUUwPjtJR05PUkU7SUdOT1JFCis8VTA2NDU+CTxVMDY0NT47PFUwNjQ1PjtJR05PUkU7SUdOT1JFCis8VUZFRTE+CTxVMDY0NT47PFVGRUUxPjtJR05PUkU7SUdOT1JFCis8VUZFRTI+CTxVMDY0NT47PFVGRUUyPjtJR05PUkU7SUdOT1JFCis8VUZFRTM+CTxVMDY0NT47PFVGRUUzPjtJR05PUkU7SUdOT1JFCis8VUZFRTQ+CTxVMDY0NT47PFVGRUU0PjtJR05PUkU7SUdOT1JFCis8VTA2NDY+CTxVMDY0Nj47PFUwNjQ2PjtJR05PUkU7SUdOT1JFCis8VUZFRTU+CTxVMDY0Nj47PFVGRUU1PjtJR05PUkU7SUdOT1JFCis8VUZFRTY+CTxVMDY0Nj47PFVGRUU2PjtJR05PUkU7SUdOT1JFCis8VUZFRTc+CTxVMDY0Nj47PFVGRUU3PjtJR05PUkU7SUdOT1JFCis8VUZFRTg+CTxVMDY0Nj47PFVGRUU4PjtJR05PUkU7SUdOT1JFCis8VTA2NDc+CTxVMDY0Nz47PFUwNjQ3PjtJR05PUkU7SUdOT1JFCis8VUZFRTk+CTxVMDY0Nz47PFVGRUU5PjtJR05PUkU7SUdOT1JFCis8VUZFRUE+CTxVMDY0Nz47PFVGRUVBPjtJR05PUkU7SUdOT1JFCis8VUZFRUI+CTxVMDY0Nz47PFVGRUVCPjtJR05PUkU7SUdOT1JFCis8VUZFRUM+CTxVMDY0Nz47PFVGRUVDPjtJR05PUkU7SUdOT1JFCis8VTA2NDg+CTxVMDY0OD47PFUwNjQ4PjtJR05PUkU7SUdOT1JFCis8VUZFRUQ+CTxVMDY0OD47PFVGRUVEPjtJR05PUkU7SUdOT1JFCis8VUZFRUU+CTxVMDY0OD47PFVGRUVFPjtJR05PUkU7SUdOT1JFCis8VTA2NDk+CTxVMDY0OT47PFUwNjQ5PjtJR05PUkU7SUdOT1JFCis8VUZFRUY+CTxVMDY0OT47PFVGRUVGPjtJR05PUkU7SUdOT1JFCis8VUZFRjA+CTxVMDY0OT47PFVGRUYwPjtJR05PUkU7SUdOT1JFCis8VTA2NEE+CTxVMDY0QT47PFUwNjRBPjtJR05PUkU7SUdOT1JFCis8VUZFRjE+CTxVMDY0QT47PFVGRUYxPjtJR05PUkU7SUdOT1JFCis8VUZFRjI+CTxVMDY0QT47PFVGRUYyPjtJR05PUkU7SUdOT1JFCis8VUZFRjM+CTxVMDY0QT47PFVGRUYzPjtJR05PUkU7SUdOT1JFCis8VUZFRjQ+CTxVMDY0QT47PFVGRUY0PjtJR05PUkU7SUdOT1JFCisKKzxVMDY0Qj4JSUdOT1JFO0lHTk9SRTs8VTA2NEI+O0lHTk9SRQorPFUwNjRDPglJR05PUkU7SUdOT1JFOzxVMDY0Qz47SUdOT1JFCis8VTA2NEQ+CUlHTk9SRTtJR05PUkU7PFUwNjREPjtJR05PUkUKKzxVMDY0RT4JSUdOT1JFO0lHTk9SRTs8VTA2NEU+O0lHTk9SRQorPFUwNjRGPglJR05PUkU7SUdOT1JFOzxVMDY0Rj47SUdOT1JFCis8VTA2NTA+CUlHTk9SRTtJR05PUkU7PFUwNjUwPjtJR05PUkUKKzxVMDY1MT4JSUdOT1JFO0lHTk9SRTs8VTA2NTE+O0lHTk9SRQorPFVGRTdEPglJR05PUkU7SUdOT1JFOzxVRkU3RD47SUdOT1JFCis8VTA2NTI+CUlHTk9SRTtJR05PUkU7PFUwNjUyPjtJR05PUkUKKworPFUwNjYwPgk8VTAwMzA+OzxVMDY2MD47SUdOT1JFO0lHTk9SRQorPFUwNjYxPgk8VTAwMzE+OzxVMDY2MT47SUdOT1JFO0lHTk9SRQorPFUwNjYyPgk8VTAwMzI+OzxVMDY2Mj47SUdOT1JFO0lHTk9SRQorPFUwNjYzPgk8VTAwMzM+OzxVMDY2Mz47SUdOT1JFO0lHTk9SRQorPFUwNjY0Pgk8VTAwMzQ+OzxVMDY2ND47SUdOT1JFO0lHTk9SRQorPFUwNjY1Pgk8VTAwMzU+OzxVMDY2NT47SUdOT1JFO0lHTk9SRQorPFUwNjY2Pgk8VTAwMzY+OzxVMDY2Nj47SUdOT1JFO0lHTk9SRQorPFUwNjY3Pgk8VTAwMzc+OzxVMDY2Nz47SUdOT1JFO0lHTk9SRQorPFUwNjY4Pgk8VTAwMzg+OzxVMDY2OD47SUdOT1JFO0lHTk9SRQorPFUwNjY5Pgk8VTAwMzk+OzxVMDY2OT47SUdOT1JFO0lHTk9SRQorCis8VUZFRjU+CSI8VTA2NDQ+PFUwNjIyPiI7IjxVMDY0ND48VTA2MjI+IjsiPFVGRUY1PjxVRkVGNT4iO0lHTk9SRQorPFVGRUY2PgkiPFUwNjQ0PjxVMDYyMj4iOyI8VTA2NDQ+PFVGRTgyPiI7IjxVRkVGNj48VUZFRjY+IjtJR05PUkUKKzxVRkVGNz4JIjxVMDY0ND48VTA2MjM+IjsiPFUwNjQ0PjxVMDYyMz4iOyI8VUZFRjc+PFVGRUY3PiI7SUdOT1JFCis8VUZFRjg+CSI8VTA2NDQ+PFUwNjIzPiI7IjxVMDY0ND48VUZFODQ+IjsiPFVGRUY4PjxVRkVGOD4iO0lHTk9SRQorPFVGRUY5PgkiPFUwNjQ0PjxVMDYyNT4iOyI8VTA2NDQ+PFUwNjI1PiI7IjxVRkVGOT48VUZFRjk+IjtJR05PUkUKKzxVRkVGQT4JIjxVMDY0ND48VTA2MjU+IjsiPFUwNjQ0PjxVRkU4OD4iOyI8VUZFRkE+PFVGRUZBPiI7SUdOT1JFCis8VUZFRkI+CSI8VTA2NDQ+PFUwNjI3PiI7IjxVMDY0ND48VUZFOEQ+IjsiPFVGRUZCPjxVRkVGQj4iO0lHTk9SRQorPFVGRUZDPgkiPFUwNjQ0PjxVMDYyNz4iOyI8VTA2NDQ+PFVGRThFPiI7IjxVRkVGQz48VUZFRkM+IjtJR05PUkUKKworJSBrYXRha2FuYS9oaXJhZ2FuYSBzb3J0aW5nCislIGJhc2UgaXMga2F0YWthbmEsIGFzIHRoaXMgaXMgcHJlc2VudCBpbiBtb3N0IGNoYXJzZXRzCislIG5vcm1hbCBiZWZvcmUgdm9pY2VkIGJlZm9yZSBzZW1pLXZvaWNlZAorJSBzbWFsbCB2b2NhbHMgYmVmb3JlIG5vcm1hbCB2b2NhbHMKKyUga2F0YWthbmEgYmVmb3JlIGhpcmFnYW5hCisKKzxVMzBBMT4JPFUzMEExPjs8VTMwQTE+O0lHTk9SRTtJR05PUkUKKzxVMzA0MT4JPFUzMEExPjs8VTMwNDE+O0lHTk9SRTtJR05PUkUKKzxVMzBBMj4JPFUzMEExPjs8VTMwQTI+O0lHTk9SRTtJR05PUkUKKzxVMzA0Mj4JPFUzMEExPjs8VTMwNDI+O0lHTk9SRTtJR05PUkUKKzxVMzBBMz4JPFUzMEEzPjs8VTMwQTM+O0lHTk9SRTtJR05PUkUKKzxVMzA0Mz4JPFUzMEEzPjs8VTMwNDM+O0lHTk9SRTtJR05PUkUKKzxVMzBBND4JPFUzMEEzPjs8VTMwQTQ+O0lHTk9SRTtJR05PUkUKKzxVMzA0ND4JPFUzMEEzPjs8VTMwNDQ+O0lHTk9SRTtJR05PUkUKKzxVMzBBNT4JPFUzMEE1Pjs8VTMwQTU+O0lHTk9SRTtJR05PUkUKKzxVMzA0NT4JPFUzMEE1Pjs8VTMwNDU+O0lHTk9SRTtJR05PUkUKKzxVMzBBNj4JPFUzMEE1Pjs8VTMwQTY+O0lHTk9SRTtJR05PUkUKKzxVMzA0Nj4JPFUzMEE1Pjs8VTMwNDY+O0lHTk9SRTtJR05PUkUKKzxVMzBGND4JPFUzMEE1Pjs8VTMwRjQ+O0lHTk9SRTtJR05PUkUKKzxVMzBBNz4JPFUzMEE3Pjs8VTMwQTc+O0lHTk9SRTtJR05PUkUKKzxVMzA0Nz4JPFUzMEE3Pjs8VTMwNDc+O0lHTk9SRTtJR05PUkUKKzxVMzBBOD4JPFUzMEE3Pjs8VTMwQTg+O0lHTk9SRTtJR05PUkUKKzxVMzA0OD4JPFUzMEE3Pjs8VTMwNDg+O0lHTk9SRTtJR05PUkUKKzxVMzBBOT4JPFUzMEE5Pjs8VTMwQTk+O0lHTk9SRTtJR05PUkUKKzxVMzA0OT4JPFUzMEE5Pjs8VTMwNDk+O0lHTk9SRTtJR05PUkUKKzxVMzBBQT4JPFUzMEE5Pjs8VTMwQUE+O0lHTk9SRTtJR05PUkUKKzxVMzA0QT4JPFUzMEE5Pjs8VTMwNEE+O0lHTk9SRTtJR05PUkUKKzxVMzBGNT4JPFUzMEY1Pjs8VTMwRjU+O0lHTk9SRTtJR05PUkUKKzxVMzBBQj4JPFUzMEY1Pjs8VTMwQUI+O0lHTk9SRTtJR05PUkUKKzxVMzA0Qj4JPFUzMEY1Pjs8VTMwNEI+O0lHTk9SRTtJR05PUkUKKzxVMzBBQz4JPFUzMEY1Pjs8VTMwQUM+O0lHTk9SRTtJR05PUkUKKzxVMzA0Qz4JPFUzMEY1Pjs8VTMwNEM+O0lHTk9SRTtJR05PUkUKKzxVMzBBRD4JPFUzMEFEPjs8VTMwQUQ+O0lHTk9SRTtJR05PUkUKKzxVMzA0RD4JPFUzMEFEPjs8VTMwNEQ+O0lHTk9SRTtJR05PUkUKKzxVMzBBRT4JPFUzMEFEPjs8VTMwQUU+O0lHTk9SRTtJR05PUkUKKzxVMzA0RT4JPFUzMEFEPjs8VTMwNEU+O0lHTk9SRTtJR05PUkUKKzxVMzBBRj4JPFUzMEFGPjs8VTMwQUY+O0lHTk9SRTtJR05PUkUKKzxVMzA0Rj4JPFUzMEFGPjs8VTMwNEY+O0lHTk9SRTtJR05PUkUKKzxVMzBCMD4JPFUzMEFGPjs8VTMwQjA+O0lHTk9SRTtJR05PUkUKKzxVMzA1MD4JPFUzMEFGPjs8VTMwNTA+O0lHTk9SRTtJR05PUkUKKzxVMzBGNj4JPFUzMEY2Pjs8VTMwRjY+O0lHTk9SRTtJR05PUkUKKzxVMzBCMT4JPFUzMEY2Pjs8VTMwQjE+O0lHTk9SRTtJR05PUkUKKzxVMzA1MT4JPFUzMEY2Pjs8VTMwNTE+O0lHTk9SRTtJR05PUkUKKzxVMzBCMj4JPFUzMEY2Pjs8VTMwQjI+O0lHTk9SRTtJR05PUkUKKzxVMzA1Mj4JPFUzMEY2Pjs8VTMwNTI+O0lHTk9SRTtJR05PUkUKKzxVMzBCMz4JPFUzMEIzPjs8VTMwQjM+O0lHTk9SRTtJR05PUkUKKzxVMzA1Mz4JPFUzMEIzPjs8VTMwNTM+O0lHTk9SRTtJR05PUkUKKzxVMzBCND4JPFUzMEIzPjs8VTMwQjQ+O0lHTk9SRTtJR05PUkUKKzxVMzA1ND4JPFUzMEIzPjs8VTMwNTQ+O0lHTk9SRTtJR05PUkUKKzxVMzBCNT4JPFUzMEI1Pjs8VTMwQjU+O0lHTk9SRTtJR05PUkUKKzxVMzA1NT4JPFUzMEI1Pjs8VTMwNTU+O0lHTk9SRTtJR05PUkUKKzxVMzBCNj4JPFUzMEI1Pjs8VTMwQjY+O0lHTk9SRTtJR05PUkUKKzxVMzA1Nj4JPFUzMEI1Pjs8VTMwNTY+O0lHTk9SRTtJR05PUkUKKzxVMzBCNz4JPFUzMEI3Pjs8VTMwQjc+O0lHTk9SRTtJR05PUkUKKzxVMzA1Nz4JPFUzMEI3Pjs8VTMwNTc+O0lHTk9SRTtJR05PUkUKKzxVMzBCOD4JPFUzMEI3Pjs8VTMwQjg+O0lHTk9SRTtJR05PUkUKKzxVMzA1OD4JPFUzMEI3Pjs8VTMwNTg+O0lHTk9SRTtJR05PUkUKKzxVMzBCOT4JPFUzMEI5Pjs8VTMwQjk+O0lHTk9SRTtJR05PUkUKKzxVMzA1OT4JPFUzMEI5Pjs8VTMwNTk+O0lHTk9SRTtJR05PUkUKKzxVMzBCQT4JPFUzMEI5Pjs8VTMwQkE+O0lHTk9SRTtJR05PUkUKKzxVMzA1QT4JPFUzMEI5Pjs8VTMwNUE+O0lHTk9SRTtJR05PUkUKKzxVMzBCQj4JPFUzMEJCPjs8VTMwQkI+O0lHTk9SRTtJR05PUkUKKzxVMzA1Qj4JPFUzMEJCPjs8VTMwNUI+O0lHTk9SRTtJR05PUkUKKzxVMzBCQz4JPFUzMEJCPjs8VTMwQkM+O0lHTk9SRTtJR05PUkUKKzxVMzA1Qz4JPFUzMEJCPjs8VTMwNUM+O0lHTk9SRTtJR05PUkUKKzxVMzBCRD4JPFUzMEJEPjs8VTMwQkQ+O0lHTk9SRTtJR05PUkUKKzxVMzA1RD4JPFUzMEJEPjs8VTMwNUQ+O0lHTk9SRTtJR05PUkUKKzxVMzBCRT4JPFUzMEJEPjs8VTMwQkU+O0lHTk9SRTtJR05PUkUKKzxVMzA1RT4JPFUzMEJEPjs8VTMwNUU+O0lHTk9SRTtJR05PUkUKKzxVMzBCRj4JPFUzMEJGPjs8VTMwQkY+O0lHTk9SRTtJR05PUkUKKzxVMzA1Rj4JPFUzMEJGPjs8VTMwNUY+O0lHTk9SRTtJR05PUkUKKzxVMzBDMD4JPFUzMEJGPjs8VTMwQzA+O0lHTk9SRTtJR05PUkUKKzxVMzA2MD4JPFUzMEJGPjs8VTMwNjA+O0lHTk9SRTtJR05PUkUKKzxVMzBDMT4JPFUzMEMxPjs8VTMwQzE+O0lHTk9SRTtJR05PUkUKKzxVMzA2MT4JPFUzMEMxPjs8VTMwNjE+O0lHTk9SRTtJR05PUkUKKzxVMzBDMj4JPFUzMEMxPjs8VTMwQzI+O0lHTk9SRTtJR05PUkUKKzxVMzA2Mj4JPFUzMEMxPjs8VTMwNjI+O0lHTk9SRTtJR05PUkUKKzxVMzBDMz4JPFUzMEMzPjs8VTMwQzM+O0lHTk9SRTtJR05PUkUKKzxVMzA2Mz4JPFUzMEMzPjs8VTMwNjM+O0lHTk9SRTtJR05PUkUKKzxVMzBDND4JPFUzMEMzPjs8VTMwQzQ+O0lHTk9SRTtJR05PUkUKKzxVMzA2ND4JPFUzMEMzPjs8VTMwNjQ+O0lHTk9SRTtJR05PUkUKKzxVMzBDNT4JPFUzMEMzPjs8VTMwQzU+O0lHTk9SRTtJR05PUkUKKzxVMzA2NT4JPFUzMEMzPjs8VTMwNjU+O0lHTk9SRTtJR05PUkUKKzxVMzBDNj4JPFUzMEM2Pjs8VTMwQzY+O0lHTk9SRTtJR05PUkUKKzxVMzA2Nj4JPFUzMEM2Pjs8VTMwNjY+O0lHTk9SRTtJR05PUkUKKzxVMzBDNz4JPFUzMEM2Pjs8VTMwQzc+O0lHTk9SRTtJR05PUkUKKzxVMzA2Nz4JPFUzMEM2Pjs8VTMwNjc+O0lHTk9SRTtJR05PUkUKKzxVMzBDOD4JPFUzMEM4Pjs8VTMwQzg+O0lHTk9SRTtJR05PUkUKKzxVMzA2OD4JPFUzMEM4Pjs8VTMwNjg+O0lHTk9SRTtJR05PUkUKKzxVMzBDOT4JPFUzMEM4Pjs8VTMwQzk+O0lHTk9SRTtJR05PUkUKKzxVMzA2OT4JPFUzMEM4Pjs8VTMwNjk+O0lHTk9SRTtJR05PUkUKKzxVMzBDQT4JPFUzMENBPjs8VTMwQ0E+O0lHTk9SRTtJR05PUkUKKzxVMzA2QT4JPFUzMENBPjs8VTMwNkE+O0lHTk9SRTtJR05PUkUKKzxVMzBDQj4JPFUzMENCPjs8VTMwQ0I+O0lHTk9SRTtJR05PUkUKKzxVMzA2Qj4JPFUzMENCPjs8VTMwNkI+O0lHTk9SRTtJR05PUkUKKzxVMzBDQz4JPFUzMENDPjs8VTMwQ0M+O0lHTk9SRTtJR05PUkUKKzxVMzA2Qz4JPFUzMENDPjs8VTMwNkM+O0lHTk9SRTtJR05PUkUKKzxVMzBDRD4JPFUzMENEPjs8VTMwQ0Q+O0lHTk9SRTtJR05PUkUKKzxVMzA2RD4JPFUzMENEPjs8VTMwNkQ+O0lHTk9SRTtJR05PUkUKKzxVMzBDRT4JPFUzMENFPjs8VTMwQ0U+O0lHTk9SRTtJR05PUkUKKzxVMzA2RT4JPFUzMENFPjs8VTMwNkU+O0lHTk9SRTtJR05PUkUKKzxVMzBDRj4JPFUzMENGPjs8VTMwQ0Y+O0lHTk9SRTtJR05PUkUKKzxVMzA2Rj4JPFUzMENGPjs8VTMwNkY+O0lHTk9SRTtJR05PUkUKKzxVMzBEMD4JPFUzMENGPjs8VTMwRDA+O0lHTk9SRTtJR05PUkUKKzxVMzA3MD4JPFUzMENGPjs8VTMwNzA+O0lHTk9SRTtJR05PUkUKKzxVMzBEMT4JPFUzMENGPjs8VTMwRDE+O0lHTk9SRTtJR05PUkUKKzxVMzA3MT4JPFUzMENGPjs8VTMwNzE+O0lHTk9SRTtJR05PUkUKKzxVMzBEMj4JPFUzMEQyPjs8VTMwRDI+O0lHTk9SRTtJR05PUkUKKzxVMzA3Mj4JPFUzMEQyPjs8VTMwNzI+O0lHTk9SRTtJR05PUkUKKzxVMzBEMz4JPFUzMEQyPjs8VTMwRDM+O0lHTk9SRTtJR05PUkUKKzxVMzA3Mz4JPFUzMEQyPjs8VTMwNzM+O0lHTk9SRTtJR05PUkUKKzxVMzBEND4JPFUzMEQyPjs8VTMwRDQ+O0lHTk9SRTtJR05PUkUKKzxVMzA3ND4JPFUzMEQyPjs8VTMwNzQ+O0lHTk9SRTtJR05PUkUKKzxVMzBENT4JPFUzMEQ1Pjs8VTMwRDU+O0lHTk9SRTtJR05PUkUKKzxVMzA3NT4JPFUzMEQ1Pjs8VTMwNzU+O0lHTk9SRTtJR05PUkUKKzxVMzBENj4JPFUzMEQ1Pjs8VTMwRDY+O0lHTk9SRTtJR05PUkUKKzxVMzA3Nj4JPFUzMEQ1Pjs8VTMwNzY+O0lHTk9SRTtJR05PUkUKKzxVMzBENz4JPFUzMEQ1Pjs8VTMwRDc+O0lHTk9SRTtJR05PUkUKKzxVMzA3Nz4JPFUzMEQ1Pjs8VTMwNzc+O0lHTk9SRTtJR05PUkUKKzxVMzBEOD4JPFUzMEQ4Pjs8VTMwRDg+O0lHTk9SRTtJR05PUkUKKzxVMzA3OD4JPFUzMEQ4Pjs8VTMwNzg+O0lHTk9SRTtJR05PUkUKKzxVMzBEOT4JPFUzMEQ4Pjs8VTMwRDk+O0lHTk9SRTtJR05PUkUKKzxVMzA3OT4JPFUzMEQ4Pjs8VTMwNzk+O0lHTk9SRTtJR05PUkUKKzxVMzBEQT4JPFUzMEQ4Pjs8VTMwREE+O0lHTk9SRTtJR05PUkUKKzxVMzA3QT4JPFUzMEQ4Pjs8VTMwN0E+O0lHTk9SRTtJR05PUkUKKzxVMzBEQj4JPFUzMERCPjs8VTMwREI+O0lHTk9SRTtJR05PUkUKKzxVMzA3Qj4JPFUzMERCPjs8VTMwN0I+O0lHTk9SRTtJR05PUkUKKzxVMzBEQz4JPFUzMERCPjs8VTMwREM+O0lHTk9SRTtJR05PUkUKKzxVMzA3Qz4JPFUzMERCPjs8VTMwN0M+O0lHTk9SRTtJR05PUkUKKzxVMzBERD4JPFUzMERCPjs8VTMwREQ+O0lHTk9SRTtJR05PUkUKKzxVMzA3RD4JPFUzMERCPjs8VTMwN0Q+O0lHTk9SRTtJR05PUkUKKzxVMzBERT4JPFUzMERFPjs8VTMwREU+O0lHTk9SRTtJR05PUkUKKzxVMzA3RT4JPFUzMERFPjs8VTMwN0U+O0lHTk9SRTtJR05PUkUKKzxVMzBERj4JPFUzMERGPjs8VTMwREY+O0lHTk9SRTtJR05PUkUKKzxVMzA3Rj4JPFUzMERGPjs8VTMwN0Y+O0lHTk9SRTtJR05PUkUKKzxVMzBFMD4JPFUzMEUwPjs8VTMwRTA+O0lHTk9SRTtJR05PUkUKKzxVMzA4MD4JPFUzMEUwPjs8VTMwODA+O0lHTk9SRTtJR05PUkUKKzxVMzBFMT4JPFUzMEUxPjs8VTMwRTE+O0lHTk9SRTtJR05PUkUKKzxVMzA4MT4JPFUzMEUxPjs8VTMwODE+O0lHTk9SRTtJR05PUkUKKzxVMzBFMj4JPFUzMEUyPjs8VTMwRTI+O0lHTk9SRTtJR05PUkUKKzxVMzA4Mj4JPFUzMEUyPjs8VTMwODI+O0lHTk9SRTtJR05PUkUKKzxVMzBFMz4JPFUzMEUzPjs8VTMwRTM+O0lHTk9SRTtJR05PUkUKKzxVMzA4Mz4JPFUzMEUzPjs8VTMwODM+O0lHTk9SRTtJR05PUkUKKzxVMzBFND4JPFUzMEUzPjs8VTMwRTQ+O0lHTk9SRTtJR05PUkUKKzxVMzA4ND4JPFUzMEUzPjs8VTMwODQ+O0lHTk9SRTtJR05PUkUKKzxVMzBFNT4JPFUzMEU1Pjs8VTMwRTU+O0lHTk9SRTtJR05PUkUKKzxVMzA4NT4JPFUzMEU1Pjs8VTMwODU+O0lHTk9SRTtJR05PUkUKKzxVMzBFNj4JPFUzMEU1Pjs8VTMwRTY+O0lHTk9SRTtJR05PUkUKKzxVMzA4Nj4JPFUzMEU1Pjs8VTMwODY+O0lHTk9SRTtJR05PUkUKKzxVMzBFNz4JPFUzMEU3Pjs8VTMwRTc+O0lHTk9SRTtJR05PUkUKKzxVMzA4Nz4JPFUzMEU3Pjs8VTMwODc+O0lHTk9SRTtJR05PUkUKKzxVMzBFOD4JPFUzMEU3Pjs8VTMwRTg+O0lHTk9SRTtJR05PUkUKKzxVMzA4OD4JPFUzMEU3Pjs8VTMwODg+O0lHTk9SRTtJR05PUkUKKzxVMzBFOT4JPFUzMEU5Pjs8VTMwRTk+O0lHTk9SRTtJR05PUkUKKzxVMzA4OT4JPFUzMEU5Pjs8VTMwODk+O0lHTk9SRTtJR05PUkUKKzxVMzBFQT4JPFUzMEVBPjs8VTMwRUE+O0lHTk9SRTtJR05PUkUKKzxVMzA4QT4JPFUzMEVBPjs8VTMwOEE+O0lHTk9SRTtJR05PUkUKKzxVMzBFQj4JPFUzMEVCPjs8VTMwRUI+O0lHTk9SRTtJR05PUkUKKzxVMzA4Qj4JPFUzMEVCPjs8VTMwOEI+O0lHTk9SRTtJR05PUkUKKzxVMzBFQz4JPFUzMEVDPjs8VTMwRUM+O0lHTk9SRTtJR05PUkUKKzxVMzA4Qz4JPFUzMEVDPjs8VTMwOEM+O0lHTk9SRTtJR05PUkUKKzxVMzBFRD4JPFUzMEVEPjs8VTMwRUQ+O0lHTk9SRTtJR05PUkUKKzxVMzA4RD4JPFUzMEVEPjs8VTMwOEQ+O0lHTk9SRTtJR05PUkUKKzxVMzBFRT4JPFUzMEVFPjs8VTMwRUU+O0lHTk9SRTtJR05PUkUKKzxVMzA4RT4JPFUzMEVFPjs8VTMwOEU+O0lHTk9SRTtJR05PUkUKKzxVMzBFRj4JPFUzMEVFPjs8VTMwRUY+O0lHTk9SRTtJR05PUkUKKzxVMzA4Rj4JPFUzMEVFPjs8VTMwOEY+O0lHTk9SRTtJR05PUkUKKzxVMzBGMD4JPFUzMEYwPjs8VTMwRjA+O0lHTk9SRTtJR05PUkUKKzxVMzA5MD4JPFUzMEYwPjs8VTMwOTA+O0lHTk9SRTtJR05PUkUKKzxVMzBGMT4JPFUzMEYxPjs8VTMwRjE+O0lHTk9SRTtJR05PUkUKKzxVMzA5MT4JPFUzMEYxPjs8VTMwOTE+O0lHTk9SRTtJR05PUkUKKzxVMzBGMj4JPFUzMEYyPjs8VTMwRjI+O0lHTk9SRTtJR05PUkUKKzxVMzA5Mj4JPFUzMEYyPjs8VTMwOTI+O0lHTk9SRTtJR05PUkUKKzxVMzBGMz4JPFUzMEYzPjs8VTMwRjM+O0lHTk9SRTtJR05PUkUKKzxVMzA5Mz4JPFUzMEYzPjs8VTMwOTM+O0lHTk9SRTtJR05PUkUKKworb3JkZXJfZW5kCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorRU5EIExDX0NUWVBFCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA2OD48VTAwNDg+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgoreWVzc3RyICAiPFUwMDY4PjxVMDA2MT48VTAwNkE+Igorbm9zdHIgICAiPFUwMDZFPjxVMDExQj4iCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2NvcHkgImRlX0RFIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgImRlX0RFIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorYWJkYXkgICAiPFUwMDRFPjxVMDA2QT4iOyI8VTAwNTA+PFUwMEYzPiI7LworICAgICAgICAiPFUwMDU3PjxVMDA3NT4iOyI8VTAwNTM+PFUwMDcyPiI7LworICAgICAgICAiPFUwMTYwPjxVMDA3ND4iOyI8VTAwNTA+PFUwMDZBPiI7LworICAgICAgICAiPFUwMDUzPjxVMDA2Rj4iCitkYXkgICAgICI8VTAwNEU+PFUwMDZBPjxVMDA2NT48VTAwNjQ+PFUwMTdBPjxVMDA2NT48VTAwNkM+PFUwMDYxPiI7LworICAgICAgICAiPFUwMDUwPjxVMDBGMz48VTAwNkU+PFUwMDY0PjxVMDE3QT48VTAwNjU+PFUwMDZDPjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA1Nz48VTAwNzU+PFUwMDc0PjxVMDA2Rj48VTAwNzI+PFUwMDYxPiI7LworICAgICAgICAiPFUwMDUzPjxVMDA3Mj48VTAwNkE+PFUwMDY1PjxVMDA2ND48VTAwNjE+IjsvCisgICAgICAgICI8VTAxNjA+PFUwMDc0PjxVMDA3Nj48VTAwRjM+PFUwMDcyPjxVMDA3ND48VTAwNkI+IjsvCisgICAgICAgICI8VTAwNTA+PFUwMDZBPjxVMDA2MT48VTAwNzQ+PFUwMDZCPiI7LworICAgICAgICAiPFUwMDUzPjxVMDA2Rj48VTAwNjI+PFUwMDZGPjxVMDA3ND48VTAwNjE+IgorYWJtb24JIjxVMDA0QT48VTAwNjE+PFUwMDZFPiI7IjxVMDA0Nj48VTAwNjU+PFUwMDYyPiI7LworCSI8VTAwNEQ+PFUwMTFCPjxVMDA3Mj4iOyI8VTAwNDE+PFUwMDcwPjxVMDA3Mj4iOy8KKwkiPFUwMDREPjxVMDA2NT48VTAwNkE+IjsiPFUwMDRBPjxVMDA3NT48VTAwNkU+IjsvCisJIjxVMDA0QT48VTAwNzU+PFUwMDZDPiI7IjxVMDA0MT48VTAwNzc+PFUwMDY3PiI7LworCSI8VTAwNTM+PFUwMDY1PjxVMDA3MD4iOyI8VTAwNEY+PFUwMDZCPjxVMDA3ND4iOy8KKwkiPFUwMDRFPjxVMDA2Rj48VTAwNzc+IjsiPFUwMDQ0PjxVMDA2NT48VTAwNjM+IgorbW9uCSI8VTAwNEE+PFUwMDYxPjxVMDA2RT48VTAwNzU+PFUwMDYxPjxVMDA3Mj4iOy8KKwkiPFUwMDQ2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA3NT48VTAwNjE+PFUwMDcyPiI7LworCSI8VTAwNEQ+PFUwMTFCPjxVMDA3Mj48VTAwNjM+IjsvCisJIjxVMDA0MT48VTAwNzA+PFUwMDcyPjxVMDA3OT48VTAwNkM+IjsvCisJIjxVMDA0RD48VTAwNjU+PFUwMDZBPjxVMDA2MT4iOy8KKwkiPFUwMDRBPjxVMDA3NT48VTAwNkU+PFUwMDY5PjxVMDA2QT4iOy8KKwkiPFUwMDRBPjxVMDA3NT48VTAwNkM+PFUwMDY5PjxVMDA2QT4iOy8KKwkiPFUwMDQxPjxVMDA3Nz48VTAwNjc+PFUwMDc1PjxVMDA3Mz48VTAwNzQ+IjsvCisJIjxVMDA1Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworCSI8VTAwNEY+PFUwMDZCPjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisJIjxVMDA0RT48VTAwNkY+PFUwMDc3PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisJIjxVMDA0ND48VTAwNjU+PFUwMDYzPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjU+PFUwMDZEPjxVMDAyRT48VTAwMjU+PFUwMDU5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAiIjsiIgordF9mbXRfYW1wbSAiIgorZGF0ZV9mbXQgICAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworTENfUEFQRVIKK2NvcHkgImRlX0RFIgorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQorY29weSAiZGVfREUiCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJkZV9ERSIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCituYW1lX21pc3MgICAiPFUwMDZCPjxVMDA2RT48VTAwNkE+PFUwMDY1PjxVMDE3RT48VTAwNkU+PFUwMDYxPiIKK25hbWVfbXIgICAgICI8VTAwNkI+PFUwMDZFPjxVMDA2QT48VTAwNjU+PFUwMDdBPiIKK25hbWVfbXJzICAgICI8VTAwNkI+PFUwMDZFPjxVMDA2QT48VTAwNjU+PFUwMDZFPjxVMDA2OT4iCislbmFtZV9tcyAgICAgIiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X25hbWUgICI8VTAwNEU+PFUwMTFCPjxVMDA2RD48VTAwNzM+PFUwMDZCPjxVMDA2MT4iCitjb3VudHJ5X3Bvc3QgICI8VTAwNDQ+IgorY291bnRyeV9hYjIgICAiPFUwMDQ0PjxVMDA0NT4iCitjb3VudHJ5X2FiMyAgICI8VTAwNDQ+PFUwMDQ1PjxVMDA1NT4iCitjb3VudHJ5X251bSAgIDI3NgorY291bnRyeV9jYXIgICAiPFUwMDQ0PiIKK2NvdW50cnlfaXNibiAgMworbGFuZ19uYW1lICAgICAiPFUwMDQ4PjxVMDA2Rj48VTAwNzI+PFUwMDZFPjxVMDA2QT48VTAwNkY+PFUwMDczPjxVMDA2NT4vCis8VTAwNzI+PFUwMDYyPjxVMDE2MT48VTAxMDc+PFUwMDY5PjxVMDA2RT48VTAwNjE+IgorbGFuZ19hYiAgICAgICAiIgorbGFuZ190ZXJtICAgICAiPFUwMDY4PjxVMDA3Mz48VTAwNjI+IgorbGFuZ19saWIgICAgICAiPFUwMDY4PjxVMDA3Mz48VTAwNjI+IgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2h0X0hUIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvaHRfSFQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdiYTBhNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2h0X0hUCkBAIC0wLDAgKzEsMTc4IEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgVTAwNkJyZXlvbCBMYW5ndWFnZSBMb2NhbGUgZm9yIEhhaXRpCislIFNvdXJjZTogT0xQQworJSBMYW5ndWFnZTogaHQKKyUgQ29udGFjdDogb2xwY2hhaXRpLm9yZworJSBBZGRyZXNzOiAyMiBydWUgMiwgUG9ydC1hdS1QcmluY2UKKyUgRW1haWw6IGNvbnRhY3RAb2xwY2hhaXRpLm9yZworJSBUZXJyaXRvcnk6IEhUCislIFJldmlzaW9uOiAxLjAKKyUgRGF0ZTogMjAwOC0wOC0xNworJSBVc2VyczogZ2VuZXJhbAorJSBDaGFyc2V0OiBJU08tODg1OS0xCislIEF1dGhvcnM6CislIDIwMDgtMDgtMTcsIGJ6Z0BsYXB0b3Aub3JnCislCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJLcmV5b2wgbG9jYWxlIGZvciBIYWl0aSIKK3NvdXJjZSAgICAgIk9MUEMiCithZGRyZXNzICAgICIiCitjb250YWN0ICAgICJvbHBjaGFpdGkub3JnIgorZW1haWwgICAgICAiY29udGFjdEBvbHBjaGFpdGkub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiVTAwNkJyZXlvbCIKK3RlcnJpdG9yeSAgIkhhaXRpIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwOC0wOC0xNyIKKyUKK2NhdGVnb3J5ICAiaHRfSFQ6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiaHRfSFQ6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiaHRfSFQ6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJodF9IVDoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImh0X0hUOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiaHRfSFQ6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiaHRfSFQ6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiaHRfSFQ6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiaHRfSFQ6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJodF9IVDoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImh0X0hUOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CisKKyUgSW4gSGFpdGksIGFjY2VudHMgYXJlIHNpbXBseSBvbWl0dGVkIGlmIHRoZXkgY2Fubm90IGJlIHJlcHJlc2VudGVkLgoraW5jbHVkZSAidHJhbnNsaXRfY29tYmluaW5nIjsiIgorCit0cmFuc2xpdF9lbmQKKworRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxCitjb3B5ICJpc28xNDY1MV90MSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA2Rj48VTAwNkY+PFUwMDc5PjxVMDA3OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNkU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAgICI8VTAwNDg+PFUwMDU0PjxVMDA0Nz48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICAgICAiPFUwMDY3PiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAgICAgIjxVMDAyQz4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgICAgICI8VTAwMjA+IgorbW9uX2dyb3VwaW5nICAgICAgICAgICAgICAzCitwb3NpdGl2ZV9zaWduICAgICAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAgICAgMAorcF9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDAKK25fc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAgICAgICI8VTAwMkM+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAgICAiPFUwMDIwPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgICAgMworRU5EIExDX05VTUVSSUMKKworTENfVElNRQorYWJkYXkgICAiPFUwMDY0PjxVMDA2OT48VTAwNkQ+PFUwMDJFPiI7LworICAgICAgICAiPFUwMDZDPjxVMDA0NT48VTAwNkU+PFUwMDJFPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNjQ+PFUwMDJFPiI7LworICAgICAgICAiPFUwMDZEPjxVMDBFOD48VTAwNkI+PFUwMDJFPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA0NT48VTAwNjQ+PFUwMDJFPiI7LworICAgICAgICAiPFUwMDc2PjxVMDA2MT48VTAwNkU+PFUwMDJFPiI7LworICAgICAgICAiPFUwMDczPjxVMDA2MT48VTAwNkQ+PFUwMDJFPiIKK2RheSAgICAgIjxVMDA2ND48VTAwNjk+PFUwMDZEPjxVMDA2MT48VTAwNkU+PFUwMDYzPjxVMDA2OD4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwNDU+PFUwMDZFPjxVMDA2ND48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA2ND48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMEU4PjxVMDA2Qj48VTAwNTI+PFUwMDQ1PjxVMDA2ND48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDQ1PjxVMDA2ND48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNzY+PFUwMDYxPjxVMDA2RT48VTAwNjQ+PFUwMDUyPjxVMDA0NT48VTAwNjQ+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDczPjxVMDA2MT48VTAwNkQ+PFUwMDY0PjxVMDA2OT4iCithYm1vbiAgICI8VTAwNkE+PFUwMDYxPjxVMDA2RT48VTAwNzY+PFUwMDJFPiI7LworICAgICAgICAiPFUwMDY2PjxVMDA0NT48VTAwNzY+PFUwMDUyPjxVMDAyRT4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDczPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA3Nj48VTAwNTI+PFUwMDY5PjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNDU+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDQ1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNjk+PFUwMDc5PjxVMDBFOD48VTAwMkU+IjsvCisgICAgICAgICI8VTAwNkY+PFUwMDU1PjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNDU+PFUwMDcwPjxVMDA3ND48VTAwMkU+IjsvCisgICAgICAgICI8VTAwNkY+PFUwMDZCPjxVMDA3ND48VTAwMkU+IjsvCisgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA3Nj48VTAwMkU+IjsvCisgICAgICAgICI8VTAwNjQ+PFUwMDQ1PjxVMDA3Mz48VTAwMkU+IgorbW9uICAgICAiPFUwMDZBPjxVMDA2MT48VTAwNkU+PFUwMDc2PjxVMDA3OT48VTAwNDU+IjsvCisgICAgICAgICI8VTAwNjY+PFUwMDQ1PjxVMDA3Nj48VTAwNTI+PFUwMDY5PjxVMDA3OT48VTAwNDU+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNzY+PFUwMDUyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDQ1PiI7LworICAgICAgICAiPFUwMDZBPjxVMDA0NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDY5PjxVMDA3OT48VTAwRTg+IjsvCisgICAgICAgICI8VTAwNkY+PFUwMDU1PjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNDU+PFUwMDcwPjxVMDA3ND48VTAwNjE+PFUwMDZFPjxVMDA2RD4iOy8KKyAgICAgICAgIjxVMDA2Rj48VTAwNjM+PFUwMDc0PjxVMDA2Rj48VTAwNjI+PFUwMDUyPjxVMDA0NT4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PjxVMDA2MT48VTAwNkU+PFUwMDZEPiI7LworICAgICAgICAiPFUwMDY0PjxVMDA0NT48VTAwNzM+PFUwMDYxPjxVMDA2RT48VTAwNkQ+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA3OT48VTAwMjA+PFUwMDI1PjxVMDA3ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNzQ+IgorYW1fcG0gICAiIjsiIgordF9mbXRfYW1wbSAiIgorZGF0ZV9mbXQgICAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNDU+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDNBPjxVMDAyNT48VTAwNkQ+PFUwMDNBPjxVMDAyNT48VTAwNzM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNzk+IgorCit3ZWVrICAgIDc7MTk5NzEyMDE7NAorZmlyc3Rfd2Vla2RheSAxCitmaXJzdF93b3JrZGF5IDEKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCitoZWlnaHQgICAyOTcKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK3RlbF9kb21fZm10ICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzU+PFUwMDMwPjxVMDAzOT4iCitpbnRfc2VsZWN0ICAgICAiPFUwMDMwPjxVMDAzMD4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNTI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA3ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAiPFUwMDY4PjxVMDA3ND4iCitjb3VudHJ5X2FiMyAiPFUwMDY4PjxVMDA3ND48VTAwNjk+IgorJWNvdW50cnlfbnVtIDMzMgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2h1X0hVIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvaHVfSFUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk0OGRmNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2h1X0hVCkBAIC0wLDAgKzEsNTU5IEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgSHVuZ2FyaWFuIExhbmd1YWdlIExvY2FsZSBmb3IgSHVuZ2FyeQorJSBTb3VyY2U6IFJBUAorJSBBZGRyZXNzOiBTYW5rdCBKby8vcmdlbnMgQWxsZSA4CislICAgIERLLTE2MTUgS28vL2Jlbmhhdm4gViwgRGFubWFyaworJSBDb250YWN0OiBLZWxkIFNpbW9uc2VuCislIEVtYWlsOiBLZWxkLlNpbW9uc2VuQGRrdXVnLmRrCislIFRlbDogKzQ1IC0gMzEyMjY1NDMKKyUgRmF4OiArNDUgLSAzMzI1NjU0MworJQorJSBDaGFuZ2VzIGJ5IFBhYmxvIFNhcmF0eGFnYQorJSAtIGNvcnJlY3RlZCBhbHBoYWJldGljYWwgb3JkZXIKKyUgLSBtYWRlIGFsbCBkYXlzIGFiYnJldmlhdGlvbnMgc2FtZSBsZW5naHQgYnkgYXBwZW5kaW5nIHNwYWNlcworJSBFbWFpbDogc3J0eGdAY2hhbmFlLmFscGhhbmV0LmNoCislCislIEZ1cnRoZXIgY2hhbmdlcyBieSBFZ21vbnQgS29ibGluZ2VyLCAyMDAyL0phbi8wNgorJSAtIGZpeGVkIHRvbnMgb2YgcmVtYWluaW5nIGJ1Z3MgaW4gYWxwaGFiZXRpY2FsIG9yZGVyCislIC0gdHVybmVkIG1vbnRoIG5hbWVzIGFuZCBzaW1pbGFyIHN0dWZmIHRvIGxvd2VyY2FzZQorJSAtIG90aGVyIHNtYWxsIGJ1Z2ZpeGVzCislIEVtYWlsOiBlZ21vbnRAc3VzZWxpbnV4Lmh1CislCislIExhbmd1YWdlOiBodQorJSBUZXJyaXRvcnk6IEhVCislIFJldmlzaW9uOiA0LjcKKyUgRGF0ZTogMjAwMS0wMS0yOQorJSBBcHBsaWNhdGlvbjogZ2VuZXJhbAorJSBVc2VyczogZ2VuZXJhbAorJSBDaGFyc2V0OiBJU08tODg1OS0yCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJIdW5nYXJpYW4gbG9jYWxlIGZvciBIdW5nYXJ5Igorc291cmNlICAgICAiUkFQIgorYWRkcmVzcyAgICAiU2Fua3QgSm9yZ2VucyBBbGxlIDgsIERLLTE2MTUgS29iZW5oYXZuIFYsIERhbm1hcmsiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiSHVuZ2FyaWFuIgordGVycml0b3J5ICAiSHVuZ2FyeSIKK3JldmlzaW9uICAgIjQuNyIKK2RhdGUgICAgICAgIjIwMDEtMDEtMjkiCislCitjYXRlZ29yeSAgImh1X0hVOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImh1X0hVOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImh1X0hVOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiaHVfSFU6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJodV9IVToyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImh1X0hVOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImh1X0hVOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImh1X0hVOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImh1X0hVOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiaHVfSFU6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJodV9IVToyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorCislJSBhIGIgYyBjcyBkIGR6IGR6cyBlIGYgZyBneSBoIGkgaiBrIGwgbHkgbSBuIG55IG8gbzogcCBxCislJSByIHMgc3ogdCB0eSB1IHU6IHYgdyB4IHkgeiB6cworJSUKKyUlIGEnIGUnIGknIG8nIHUnIGFyZSBzb3J0ZWQgYXMgaWYgdGhleSB3ZXJlIHVuYWNjZW50ZWQKKyUlIG8iIGFuZCB1IiBhcmUgc29ydGVkIGFzIGlmIHRoZXkgd2VyZSBvOiBhbmQgdToKKworY29sbGF0aW5nLXN5bWJvbCAgPG9kb3VibGU+Citjb2xsYXRpbmctc3ltYm9sICA8dWRvdWJsZT4KKworY29sbGF0aW5nLXN5bWJvbCAgPGNzPgorY29sbGF0aW5nLWVsZW1lbnQgPEMtUz4gZnJvbSAiPFUwMDQzPjxVMDA1Mz4iCitjb2xsYXRpbmctZWxlbWVudCA8Qy1zPiBmcm9tICI8VTAwNDM+PFUwMDczPiIKK2NvbGxhdGluZy1lbGVtZW50IDxjLVM+IGZyb20gIjxVMDA2Mz48VTAwNTM+IgorY29sbGF0aW5nLWVsZW1lbnQgPGMtcz4gZnJvbSAiPFUwMDYzPjxVMDA3Mz4iCitjb2xsYXRpbmctZWxlbWVudCA8Qy1DLVM+IGZyb20gIjxVMDA0Mz48VTAwNDM+PFUwMDUzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxDLUMtcz4gZnJvbSAiPFUwMDQzPjxVMDA0Mz48VTAwNzM+IgorY29sbGF0aW5nLWVsZW1lbnQgPEMtYy1TPiBmcm9tICI8VTAwNDM+PFUwMDYzPjxVMDA1Mz4iCitjb2xsYXRpbmctZWxlbWVudCA8Qy1jLXM+IGZyb20gIjxVMDA0Mz48VTAwNjM+PFUwMDczPiIKK2NvbGxhdGluZy1lbGVtZW50IDxjLUMtUz4gZnJvbSAiPFUwMDYzPjxVMDA0Mz48VTAwNTM+IgorY29sbGF0aW5nLWVsZW1lbnQgPGMtQy1zPiBmcm9tICI8VTAwNjM+PFUwMDQzPjxVMDA3Mz4iCitjb2xsYXRpbmctZWxlbWVudCA8Yy1jLVM+IGZyb20gIjxVMDA2Mz48VTAwNjM+PFUwMDUzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxjLWMtcz4gZnJvbSAiPFUwMDYzPjxVMDA2Mz48VTAwNzM+IgorCitjb2xsYXRpbmctc3ltYm9sICA8ZHo+Citjb2xsYXRpbmctZWxlbWVudCA8RC1aPiBmcm9tICI8VTAwNDQ+PFUwMDVBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxELXo+IGZyb20gIjxVMDA0ND48VTAwN0E+IgorY29sbGF0aW5nLWVsZW1lbnQgPGQtWj4gZnJvbSAiPFUwMDY0PjxVMDA1QT4iCitjb2xsYXRpbmctZWxlbWVudCA8ZC16PiBmcm9tICI8VTAwNjQ+PFUwMDdBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxELUQtWj4gZnJvbSAiPFUwMDQ0PjxVMDA0ND48VTAwNUE+IgorY29sbGF0aW5nLWVsZW1lbnQgPEQtRC16PiBmcm9tICI8VTAwNDQ+PFUwMDQ0PjxVMDA3QT4iCitjb2xsYXRpbmctZWxlbWVudCA8RC1kLVo+IGZyb20gIjxVMDA0ND48VTAwNjQ+PFUwMDVBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxELWQtej4gZnJvbSAiPFUwMDQ0PjxVMDA2ND48VTAwN0E+IgorY29sbGF0aW5nLWVsZW1lbnQgPGQtRC1aPiBmcm9tICI8VTAwNjQ+PFUwMDQ0PjxVMDA1QT4iCitjb2xsYXRpbmctZWxlbWVudCA8ZC1ELXo+IGZyb20gIjxVMDA2ND48VTAwNDQ+PFUwMDdBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxkLWQtWj4gZnJvbSAiPFUwMDY0PjxVMDA2ND48VTAwNUE+IgorY29sbGF0aW5nLWVsZW1lbnQgPGQtZC16PiBmcm9tICI8VTAwNjQ+PFUwMDY0PjxVMDA3QT4iCisKK2NvbGxhdGluZy1zeW1ib2wgIDxkenM+Citjb2xsYXRpbmctZWxlbWVudCA8RC1aLVM+IGZyb20gIjxVMDA0ND48VTAwNUE+PFUwMDUzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxELVotcz4gZnJvbSAiPFUwMDQ0PjxVMDA1QT48VTAwNzM+IgorY29sbGF0aW5nLWVsZW1lbnQgPEQtei1TPiBmcm9tICI8VTAwNDQ+PFUwMDdBPjxVMDA1Mz4iCitjb2xsYXRpbmctZWxlbWVudCA8RC16LXM+IGZyb20gIjxVMDA0ND48VTAwN0E+PFUwMDczPiIKK2NvbGxhdGluZy1lbGVtZW50IDxkLVotUz4gZnJvbSAiPFUwMDY0PjxVMDA1QT48VTAwNTM+IgorY29sbGF0aW5nLWVsZW1lbnQgPGQtWi1zPiBmcm9tICI8VTAwNjQ+PFUwMDVBPjxVMDA3Mz4iCitjb2xsYXRpbmctZWxlbWVudCA8ZC16LVM+IGZyb20gIjxVMDA2ND48VTAwN0E+PFUwMDUzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxkLXotcz4gZnJvbSAiPFUwMDY0PjxVMDA3QT48VTAwNzM+IgorY29sbGF0aW5nLWVsZW1lbnQgPEQtRC1aLVM+IGZyb20gIjxVMDA0ND48VTAwNDQ+PFUwMDVBPjxVMDA1Mz4iCitjb2xsYXRpbmctZWxlbWVudCA8RC1ELVotcz4gZnJvbSAiPFUwMDQ0PjxVMDA0ND48VTAwNUE+PFUwMDczPiIKK2NvbGxhdGluZy1lbGVtZW50IDxELUQtei1TPiBmcm9tICI8VTAwNDQ+PFUwMDQ0PjxVMDA3QT48VTAwNTM+IgorY29sbGF0aW5nLWVsZW1lbnQgPEQtRC16LXM+IGZyb20gIjxVMDA0ND48VTAwNDQ+PFUwMDdBPjxVMDA3Mz4iCitjb2xsYXRpbmctZWxlbWVudCA8RC1kLVotUz4gZnJvbSAiPFUwMDQ0PjxVMDA2ND48VTAwNUE+PFUwMDUzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxELWQtWi1zPiBmcm9tICI8VTAwNDQ+PFUwMDY0PjxVMDA1QT48VTAwNzM+IgorY29sbGF0aW5nLWVsZW1lbnQgPEQtZC16LVM+IGZyb20gIjxVMDA0ND48VTAwNjQ+PFUwMDdBPjxVMDA1Mz4iCitjb2xsYXRpbmctZWxlbWVudCA8RC1kLXotcz4gZnJvbSAiPFUwMDQ0PjxVMDA2ND48VTAwN0E+PFUwMDczPiIKK2NvbGxhdGluZy1lbGVtZW50IDxkLUQtWi1TPiBmcm9tICI8VTAwNjQ+PFUwMDQ0PjxVMDA1QT48VTAwNTM+IgorY29sbGF0aW5nLWVsZW1lbnQgPGQtRC1aLXM+IGZyb20gIjxVMDA2ND48VTAwNDQ+PFUwMDVBPjxVMDA3Mz4iCitjb2xsYXRpbmctZWxlbWVudCA8ZC1ELXotUz4gZnJvbSAiPFUwMDY0PjxVMDA0ND48VTAwN0E+PFUwMDUzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxkLUQtei1zPiBmcm9tICI8VTAwNjQ+PFUwMDQ0PjxVMDA3QT48VTAwNzM+IgorY29sbGF0aW5nLWVsZW1lbnQgPGQtZC1aLVM+IGZyb20gIjxVMDA2ND48VTAwNjQ+PFUwMDVBPjxVMDA1Mz4iCitjb2xsYXRpbmctZWxlbWVudCA8ZC1kLVotcz4gZnJvbSAiPFUwMDY0PjxVMDA2ND48VTAwNUE+PFUwMDczPiIKK2NvbGxhdGluZy1lbGVtZW50IDxkLWQtei1TPiBmcm9tICI8VTAwNjQ+PFUwMDY0PjxVMDA3QT48VTAwNTM+IgorY29sbGF0aW5nLWVsZW1lbnQgPGQtZC16LXM+IGZyb20gIjxVMDA2ND48VTAwNjQ+PFUwMDdBPjxVMDA3Mz4iCisKK2NvbGxhdGluZy1zeW1ib2wgIDxneT4KK2NvbGxhdGluZy1lbGVtZW50IDxHLVk+IGZyb20gIjxVMDA0Nz48VTAwNTk+IgorY29sbGF0aW5nLWVsZW1lbnQgPEcteT4gZnJvbSAiPFUwMDQ3PjxVMDA3OT4iCitjb2xsYXRpbmctZWxlbWVudCA8Zy1ZPiBmcm9tICI8VTAwNjc+PFUwMDU5PiIKK2NvbGxhdGluZy1lbGVtZW50IDxnLXk+IGZyb20gIjxVMDA2Nz48VTAwNzk+IgorY29sbGF0aW5nLWVsZW1lbnQgPEctRy1ZPiBmcm9tICI8VTAwNDc+PFUwMDQ3PjxVMDA1OT4iCitjb2xsYXRpbmctZWxlbWVudCA8Ry1HLXk+IGZyb20gIjxVMDA0Nz48VTAwNDc+PFUwMDc5PiIKK2NvbGxhdGluZy1lbGVtZW50IDxHLWctWT4gZnJvbSAiPFUwMDQ3PjxVMDA2Nz48VTAwNTk+IgorY29sbGF0aW5nLWVsZW1lbnQgPEctZy15PiBmcm9tICI8VTAwNDc+PFUwMDY3PjxVMDA3OT4iCitjb2xsYXRpbmctZWxlbWVudCA8Zy1HLVk+IGZyb20gIjxVMDA2Nz48VTAwNDc+PFUwMDU5PiIKK2NvbGxhdGluZy1lbGVtZW50IDxnLUcteT4gZnJvbSAiPFUwMDY3PjxVMDA0Nz48VTAwNzk+IgorY29sbGF0aW5nLWVsZW1lbnQgPGctZy1ZPiBmcm9tICI8VTAwNjc+PFUwMDY3PjxVMDA1OT4iCitjb2xsYXRpbmctZWxlbWVudCA8Zy1nLXk+IGZyb20gIjxVMDA2Nz48VTAwNjc+PFUwMDc5PiIKKworY29sbGF0aW5nLXN5bWJvbCAgPGx5PgorY29sbGF0aW5nLWVsZW1lbnQgPEwtWT4gZnJvbSAiPFUwMDRDPjxVMDA1OT4iCitjb2xsYXRpbmctZWxlbWVudCA8TC15PiBmcm9tICI8VTAwNEM+PFUwMDc5PiIKK2NvbGxhdGluZy1lbGVtZW50IDxsLVk+IGZyb20gIjxVMDA2Qz48VTAwNTk+IgorY29sbGF0aW5nLWVsZW1lbnQgPGwteT4gZnJvbSAiPFUwMDZDPjxVMDA3OT4iCitjb2xsYXRpbmctZWxlbWVudCA8TC1MLVk+IGZyb20gIjxVMDA0Qz48VTAwNEM+PFUwMDU5PiIKK2NvbGxhdGluZy1lbGVtZW50IDxMLUwteT4gZnJvbSAiPFUwMDRDPjxVMDA0Qz48VTAwNzk+IgorY29sbGF0aW5nLWVsZW1lbnQgPEwtbC1ZPiBmcm9tICI8VTAwNEM+PFUwMDZDPjxVMDA1OT4iCitjb2xsYXRpbmctZWxlbWVudCA8TC1sLXk+IGZyb20gIjxVMDA0Qz48VTAwNkM+PFUwMDc5PiIKK2NvbGxhdGluZy1lbGVtZW50IDxsLUwtWT4gZnJvbSAiPFUwMDZDPjxVMDA0Qz48VTAwNTk+IgorY29sbGF0aW5nLWVsZW1lbnQgPGwtTC15PiBmcm9tICI8VTAwNkM+PFUwMDRDPjxVMDA3OT4iCitjb2xsYXRpbmctZWxlbWVudCA8bC1sLVk+IGZyb20gIjxVMDA2Qz48VTAwNkM+PFUwMDU5PiIKK2NvbGxhdGluZy1lbGVtZW50IDxsLWwteT4gZnJvbSAiPFUwMDZDPjxVMDA2Qz48VTAwNzk+IgorCitjb2xsYXRpbmctc3ltYm9sICA8bnk+Citjb2xsYXRpbmctZWxlbWVudCA8Ti1ZPiBmcm9tICI8VTAwNEU+PFUwMDU5PiIKK2NvbGxhdGluZy1lbGVtZW50IDxOLXk+IGZyb20gIjxVMDA0RT48VTAwNzk+IgorY29sbGF0aW5nLWVsZW1lbnQgPG4tWT4gZnJvbSAiPFUwMDZFPjxVMDA1OT4iCitjb2xsYXRpbmctZWxlbWVudCA8bi15PiBmcm9tICI8VTAwNkU+PFUwMDc5PiIKK2NvbGxhdGluZy1lbGVtZW50IDxOLU4tWT4gZnJvbSAiPFUwMDRFPjxVMDA0RT48VTAwNTk+IgorY29sbGF0aW5nLWVsZW1lbnQgPE4tTi15PiBmcm9tICI8VTAwNEU+PFUwMDRFPjxVMDA3OT4iCitjb2xsYXRpbmctZWxlbWVudCA8Ti1uLVk+IGZyb20gIjxVMDA0RT48VTAwNkU+PFUwMDU5PiIKK2NvbGxhdGluZy1lbGVtZW50IDxOLW4teT4gZnJvbSAiPFUwMDRFPjxVMDA2RT48VTAwNzk+IgorY29sbGF0aW5nLWVsZW1lbnQgPG4tTi1ZPiBmcm9tICI8VTAwNkU+PFUwMDRFPjxVMDA1OT4iCitjb2xsYXRpbmctZWxlbWVudCA8bi1OLXk+IGZyb20gIjxVMDA2RT48VTAwNEU+PFUwMDc5PiIKK2NvbGxhdGluZy1lbGVtZW50IDxuLW4tWT4gZnJvbSAiPFUwMDZFPjxVMDA2RT48VTAwNTk+IgorY29sbGF0aW5nLWVsZW1lbnQgPG4tbi15PiBmcm9tICI8VTAwNkU+PFUwMDZFPjxVMDA3OT4iCisKK2NvbGxhdGluZy1zeW1ib2wgIDxzej4KK2NvbGxhdGluZy1lbGVtZW50IDxTLVo+IGZyb20gIjxVMDA1Mz48VTAwNUE+IgorY29sbGF0aW5nLWVsZW1lbnQgPFMtej4gZnJvbSAiPFUwMDUzPjxVMDA3QT4iCitjb2xsYXRpbmctZWxlbWVudCA8cy1aPiBmcm9tICI8VTAwNzM+PFUwMDVBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxzLXo+IGZyb20gIjxVMDA3Mz48VTAwN0E+IgorY29sbGF0aW5nLWVsZW1lbnQgPFMtUy1aPiBmcm9tICI8VTAwNTM+PFUwMDUzPjxVMDA1QT4iCitjb2xsYXRpbmctZWxlbWVudCA8Uy1TLXo+IGZyb20gIjxVMDA1Mz48VTAwNTM+PFUwMDdBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxTLXMtWj4gZnJvbSAiPFUwMDUzPjxVMDA3Mz48VTAwNUE+IgorY29sbGF0aW5nLWVsZW1lbnQgPFMtcy16PiBmcm9tICI8VTAwNTM+PFUwMDczPjxVMDA3QT4iCitjb2xsYXRpbmctZWxlbWVudCA8cy1TLVo+IGZyb20gIjxVMDA3Mz48VTAwNTM+PFUwMDVBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxzLVMtej4gZnJvbSAiPFUwMDczPjxVMDA1Mz48VTAwN0E+IgorY29sbGF0aW5nLWVsZW1lbnQgPHMtcy1aPiBmcm9tICI8VTAwNzM+PFUwMDczPjxVMDA1QT4iCitjb2xsYXRpbmctZWxlbWVudCA8cy1zLXo+IGZyb20gIjxVMDA3Mz48VTAwNzM+PFUwMDdBPiIKKworY29sbGF0aW5nLXN5bWJvbCAgPHR5PgorY29sbGF0aW5nLWVsZW1lbnQgPFQtWT4gZnJvbSAiPFUwMDU0PjxVMDA1OT4iCitjb2xsYXRpbmctZWxlbWVudCA8VC15PiBmcm9tICI8VTAwNTQ+PFUwMDc5PiIKK2NvbGxhdGluZy1lbGVtZW50IDx0LVk+IGZyb20gIjxVMDA3ND48VTAwNTk+IgorY29sbGF0aW5nLWVsZW1lbnQgPHQteT4gZnJvbSAiPFUwMDc0PjxVMDA3OT4iCitjb2xsYXRpbmctZWxlbWVudCA8VC1ULVk+IGZyb20gIjxVMDA1ND48VTAwNTQ+PFUwMDU5PiIKK2NvbGxhdGluZy1lbGVtZW50IDxULVQteT4gZnJvbSAiPFUwMDU0PjxVMDA1ND48VTAwNzk+IgorY29sbGF0aW5nLWVsZW1lbnQgPFQtdC1ZPiBmcm9tICI8VTAwNTQ+PFUwMDc0PjxVMDA1OT4iCitjb2xsYXRpbmctZWxlbWVudCA8VC10LXk+IGZyb20gIjxVMDA1ND48VTAwNzQ+PFUwMDc5PiIKK2NvbGxhdGluZy1lbGVtZW50IDx0LVQtWT4gZnJvbSAiPFUwMDc0PjxVMDA1ND48VTAwNTk+IgorY29sbGF0aW5nLWVsZW1lbnQgPHQtVC15PiBmcm9tICI8VTAwNzQ+PFUwMDU0PjxVMDA3OT4iCitjb2xsYXRpbmctZWxlbWVudCA8dC10LVk+IGZyb20gIjxVMDA3ND48VTAwNzQ+PFUwMDU5PiIKK2NvbGxhdGluZy1lbGVtZW50IDx0LXQteT4gZnJvbSAiPFUwMDc0PjxVMDA3ND48VTAwNzk+IgorCitjb2xsYXRpbmctc3ltYm9sICA8enM+Citjb2xsYXRpbmctZWxlbWVudCA8Wi1TPiBmcm9tICI8VTAwNUE+PFUwMDUzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxaLXM+IGZyb20gIjxVMDA1QT48VTAwNzM+IgorY29sbGF0aW5nLWVsZW1lbnQgPHotUz4gZnJvbSAiPFUwMDdBPjxVMDA1Mz4iCitjb2xsYXRpbmctZWxlbWVudCA8ei1zPiBmcm9tICI8VTAwN0E+PFUwMDczPiIKK2NvbGxhdGluZy1lbGVtZW50IDxaLVotUz4gZnJvbSAiPFUwMDVBPjxVMDA1QT48VTAwNTM+IgorY29sbGF0aW5nLWVsZW1lbnQgPFotWi1zPiBmcm9tICI8VTAwNUE+PFUwMDVBPjxVMDA3Mz4iCitjb2xsYXRpbmctZWxlbWVudCA8Wi16LVM+IGZyb20gIjxVMDA1QT48VTAwN0E+PFUwMDUzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxaLXotcz4gZnJvbSAiPFUwMDVBPjxVMDA3QT48VTAwNzM+IgorY29sbGF0aW5nLWVsZW1lbnQgPHotWi1TPiBmcm9tICI8VTAwN0E+PFUwMDVBPjxVMDA1Mz4iCitjb2xsYXRpbmctZWxlbWVudCA8ei1aLXM+IGZyb20gIjxVMDA3QT48VTAwNUE+PFUwMDczPiIKK2NvbGxhdGluZy1lbGVtZW50IDx6LXotUz4gZnJvbSAiPFUwMDdBPjxVMDA3QT48VTAwNTM+IgorY29sbGF0aW5nLWVsZW1lbnQgPHotei1zPiBmcm9tICI8VTAwN0E+PFUwMDdBPjxVMDA3Mz4iCisKK2NvbGxhdGluZy1zeW1ib2wgPENBUC1NSU4+Citjb2xsYXRpbmctc3ltYm9sIDxNSU4tQ0FQPgorY29sbGF0aW5nLXN5bWJvbCA8Q0FQLUNBUC1DQVA+Citjb2xsYXRpbmctc3ltYm9sIDxDQVAtQ0FQLU1JTj4KK2NvbGxhdGluZy1zeW1ib2wgPENBUC1NSU4tQ0FQPgorY29sbGF0aW5nLXN5bWJvbCA8Q0FQLU1JTi1NSU4+Citjb2xsYXRpbmctc3ltYm9sIDxNSU4tQ0FQLUNBUD4KK2NvbGxhdGluZy1zeW1ib2wgPE1JTi1DQVAtTUlOPgorY29sbGF0aW5nLXN5bWJvbCA8TUlOLU1JTi1DQVA+Citjb2xsYXRpbmctc3ltYm9sIDxNSU4tTUlOLU1JTj4KKworcmVvcmRlci1hZnRlciA8TUlOPgorPE1JTi1DQVA+Cis8TUlOLU1JTi1NSU4+Cis8TUlOLU1JTi1DQVA+Cis8TUlOLUNBUC1NSU4+Cis8TUlOLUNBUC1DQVA+CisKK3Jlb3JkZXItYWZ0ZXIgPENBUD4KKzxDQVAtTUlOPgorPENBUC1NSU4tTUlOPgorPENBUC1NSU4tQ0FQPgorPENBUC1DQVAtTUlOPgorPENBUC1DQVAtQ0FQPgorCityZW9yZGVyLWFmdGVyIDxjPgorPGNzPgorcmVvcmRlci1hZnRlciA8ZD4KKzxkej4KKzxkenM+CityZW9yZGVyLWFmdGVyIDxnPgorPGd5PgorcmVvcmRlci1hZnRlciA8bD4KKzxseT4KK3Jlb3JkZXItYWZ0ZXIgPG4+Cis8bnk+CityZW9yZGVyLWFmdGVyIDxvPgorPG9kb3VibGU+CityZW9yZGVyLWFmdGVyIDxzPgorPHN6PgorcmVvcmRlci1hZnRlciA8dD4KKzx0eT4KK3Jlb3JkZXItYWZ0ZXIgPHU+Cis8dWRvdWJsZT4KK3Jlb3JkZXItYWZ0ZXIgPHo+Cis8enM+CisKK3Jlb3JkZXItYWZ0ZXIgPG8+Cis8VTAwRjY+CTxvZG91YmxlPjs8UkVVPjs8TUlOPjtJR05PUkUKKzxVMDE1MT4JPG9kb3VibGU+OzxEQUM+OzxNSU4+O0lHTk9SRQorPFUwMEQ2Pgk8b2RvdWJsZT47PFJFVT47PENBUD47SUdOT1JFCis8VTAxNTA+CTxvZG91YmxlPjs8REFDPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8dT4KKzxVMDBGQz4JPHVkb3VibGU+OzxSRVU+OzxNSU4+O0lHTk9SRQorPFUwMTcxPgk8dWRvdWJsZT47PERBQz47PE1JTj47SUdOT1JFCis8VTAwREM+CTx1ZG91YmxlPjs8UkVVPjs8Q0FQPjtJR05PUkUKKzxVMDE3MD4JPHVkb3VibGU+OzxEQUM+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA0Mz4KKzxDLVM+CQk8Y3M+OzxCQVM+OzxDQVA+O0lHTk9SRQorPEMtcz4JCTxjcz47PEJBUz47PENBUC1NSU4+O0lHTk9SRQorPEMtQy1TPgkJIjxjcz48Y3M+IjsiPEJBUz48QkFTPiI7IjxDQVA+PENBUD4iO0lHTk9SRQorPEMtQy1zPgkJIjxjcz48Y3M+IjsiPEJBUz48QkFTPiI7IjxDQVA+PENBUC1NSU4+IjtJR05PUkUKKzxDLWMtUz4JCSI8Y3M+PGNzPiI7IjxCQVM+PEJBUz4iOyI8Q0FQPjxNSU4tQ0FQPiI7SUdOT1JFCis8Qy1jLXM+CQkiPGNzPjxjcz4iOyI8QkFTPjxCQVM+IjsiPENBUD48TUlOPiI7SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA2Mz4KKzxjLVM+CQk8Y3M+OzxCQVM+OzxNSU4tQ0FQPjtJR05PUkUKKzxjLXM+CQk8Y3M+OzxCQVM+OzxNSU4+O0lHTk9SRQorPGMtQy1TPgkJIjxjcz48Y3M+IjsiPEJBUz48QkFTPiI7IjxNSU4+PENBUD4iO0lHTk9SRQorPGMtQy1zPgkJIjxjcz48Y3M+IjsiPEJBUz48QkFTPiI7IjxNSU4+PENBUC1NSU4+IjtJR05PUkUKKzxjLWMtUz4JCSI8Y3M+PGNzPiI7IjxCQVM+PEJBUz4iOyI8TUlOPjxNSU4tQ0FQPiI7SUdOT1JFCis8Yy1jLXM+CQkiPGNzPjxjcz4iOyI8QkFTPjxCQVM+IjsiPE1JTj48TUlOPiI7SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDQ0PgorPEQtWj4JCTxkej47PEJBUz47PENBUD47SUdOT1JFCis8RC16PgkJPGR6Pjs8QkFTPjs8Q0FQLU1JTj47SUdOT1JFCis8RC1ELVo+CQkiPGR6Pjxkej4iOyI8QkFTPjxCQVM+IjsiPENBUD48Q0FQPiI7SUdOT1JFCis8RC1ELXo+CQkiPGR6Pjxkej4iOyI8QkFTPjxCQVM+IjsiPENBUD48Q0FQLU1JTj4iO0lHTk9SRQorPEQtZC1aPgkJIjxkej48ZHo+IjsiPEJBUz48QkFTPiI7IjxDQVA+PE1JTi1DQVA+IjtJR05PUkUKKzxELWQtej4JCSI8ZHo+PGR6PiI7IjxCQVM+PEJBUz4iOyI8Q0FQPjxNSU4+IjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDY0PgorPGQtWj4JCTxkej47PEJBUz47PE1JTi1DQVA+O0lHTk9SRQorPGQtej4JCTxkej47PEJBUz47PE1JTj47SUdOT1JFCis8ZC1ELVo+CQkiPGR6Pjxkej4iOyI8QkFTPjxCQVM+IjsiPE1JTj48Q0FQPiI7SUdOT1JFCis8ZC1ELXo+CQkiPGR6Pjxkej4iOyI8QkFTPjxCQVM+IjsiPE1JTj48Q0FQLU1JTj4iO0lHTk9SRQorPGQtZC1aPgkJIjxkej48ZHo+IjsiPEJBUz48QkFTPiI7IjxNSU4+PE1JTi1DQVA+IjtJR05PUkUKKzxkLWQtej4JCSI8ZHo+PGR6PiI7IjxCQVM+PEJBUz4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNDQ+Cis8RC1aLVM+CQk8ZHpzPjs8QkFTPjs8Q0FQLUNBUC1DQVA+O0lHTk9SRQorPEQtWi1zPgkJPGR6cz47PEJBUz47PENBUC1DQVAtTUlOPjtJR05PUkUKKzxELXotUz4JCTxkenM+OzxCQVM+OzxDQVAtTUlOLUNBUD47SUdOT1JFCis8RC16LXM+CQk8ZHpzPjs8QkFTPjs8Q0FQLU1JTi1NSU4+O0lHTk9SRQorPEQtRC1aLVM+CSI8ZHpzPjxkenM+IjsiPEJBUz48QkFTPiI7IjxDQVA+PENBUC1DQVAtQ0FQPiI7SUdOT1JFCis8RC1ELVotcz4JIjxkenM+PGR6cz4iOyI8QkFTPjxCQVM+IjsiPENBUD48Q0FQLUNBUC1NSU4+IjtJR05PUkUKKzxELUQtei1TPgkiPGR6cz48ZHpzPiI7IjxCQVM+PEJBUz4iOyI8Q0FQPjxDQVAtTUlOLUNBUD4iO0lHTk9SRQorPEQtRC16LXM+CSI8ZHpzPjxkenM+IjsiPEJBUz48QkFTPiI7IjxDQVA+PENBUC1NSU4tTUlOPiI7SUdOT1JFCis8RC1kLVotUz4JIjxkenM+PGR6cz4iOyI8QkFTPjxCQVM+IjsiPENBUD48Q0FQLUNBUC1DQVA+IjtJR05PUkUKKzxELWQtWi1zPgkiPGR6cz48ZHpzPiI7IjxCQVM+PEJBUz4iOyI8Q0FQPjxDQVAtQ0FQLU1JTj4iO0lHTk9SRQorPEQtZC16LVM+CSI8ZHpzPjxkenM+IjsiPEJBUz48QkFTPiI7IjxDQVA+PENBUC1NSU4tQ0FQPiI7SUdOT1JFCis8RC1kLXotcz4JIjxkenM+PGR6cz4iOyI8QkFTPjxCQVM+IjsiPENBUD48Q0FQLU1JTi1NSU4+IjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDY0PgorPGQtWi1TPgkJPGR6cz47PEJBUz47PE1JTi1DQVAtQ0FQPjtJR05PUkUKKzxkLVotcz4JCTxkenM+OzxCQVM+OzxNSU4tQ0FQLU1JTj47SUdOT1JFCis8ZC16LVM+CQk8ZHpzPjs8QkFTPjs8TUlOLU1JTi1DQVA+O0lHTk9SRQorPGQtei1zPgkJPGR6cz47PEJBUz47PE1JTi1NSU4tTUlOPjtJR05PUkUKKzxkLUQtWi1TPgkiPGR6cz48ZHpzPiI7IjxCQVM+PEJBUz4iOyI8TUlOPjxDQVAtQ0FQLUNBUD4iO0lHTk9SRQorPGQtRC1aLXM+CSI8ZHpzPjxkenM+IjsiPEJBUz48QkFTPiI7IjxNSU4+PENBUC1DQVAtTUlOPiI7SUdOT1JFCis8ZC1ELXotUz4JIjxkenM+PGR6cz4iOyI8QkFTPjxCQVM+IjsiPE1JTj48Q0FQLU1JTi1DQVA+IjtJR05PUkUKKzxkLUQtei1zPgkiPGR6cz48ZHpzPiI7IjxCQVM+PEJBUz4iOyI8TUlOPjxDQVAtTUlOLU1JTj4iO0lHTk9SRQorPGQtZC1aLVM+CSI8ZHpzPjxkenM+IjsiPEJBUz48QkFTPiI7IjxNSU4+PENBUC1DQVAtQ0FQPiI7SUdOT1JFCis8ZC1kLVotcz4JIjxkenM+PGR6cz4iOyI8QkFTPjxCQVM+IjsiPE1JTj48Q0FQLUNBUC1NSU4+IjtJR05PUkUKKzxkLWQtei1TPgkiPGR6cz48ZHpzPiI7IjxCQVM+PEJBUz4iOyI8TUlOPjxDQVAtTUlOLUNBUD4iO0lHTk9SRQorPGQtZC16LXM+CSI8ZHpzPjxkenM+IjsiPEJBUz48QkFTPiI7IjxNSU4+PENBUC1NSU4tTUlOPiI7SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDQ3PgorPEctWT4JCTxneT47PEJBUz47PENBUD47SUdOT1JFCis8Ry15PgkJPGd5Pjs8QkFTPjs8Q0FQLU1JTj47SUdOT1JFCis8Ry1HLVk+CQkiPGd5PjxneT4iOyI8QkFTPjxCQVM+IjsiPENBUD48Q0FQPiI7SUdOT1JFCis8Ry1HLXk+CQkiPGd5PjxneT4iOyI8QkFTPjxCQVM+IjsiPENBUD48Q0FQLU1JTj4iO0lHTk9SRQorPEctZy1ZPgkJIjxneT48Z3k+IjsiPEJBUz48QkFTPiI7IjxDQVA+PE1JTi1DQVA+IjtJR05PUkUKKzxHLWcteT4JCSI8Z3k+PGd5PiI7IjxCQVM+PEJBUz4iOyI8Q0FQPjxNSU4+IjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDY3PgorPGcteT4JCTxneT47PEJBUz47PE1JTj47SUdOT1JFCis8Zy1ZPgkJPGd5Pjs8QkFTPjs8TUlOLUNBUD47SUdOT1JFCis8Zy1HLVk+CQkiPGd5PjxneT4iOyI8QkFTPjxCQVM+IjsiPE1JTj48Q0FQPiI7SUdOT1JFCis8Zy1HLXk+CQkiPGd5PjxneT4iOyI8QkFTPjxCQVM+IjsiPE1JTj48Q0FQLU1JTj4iO0lHTk9SRQorPGctZy1ZPgkJIjxneT48Z3k+IjsiPEJBUz48QkFTPiI7IjxNSU4+PE1JTi1DQVA+IjtJR05PUkUKKzxnLWcteT4JCSI8Z3k+PGd5PiI7IjxCQVM+PEJBUz4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNEM+Cis8TC1ZPgkJPGx5Pjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxMLXk+CQk8bHk+OzxCQVM+OzxDQVAtTUlOPjtJR05PUkUKKzxMLUwtWT4JCSI8bHk+PGx5PiI7IjxCQVM+PEJBUz4iOyI8Q0FQPjxDQVA+IjtJR05PUkUKKzxMLUwteT4JCSI8bHk+PGx5PiI7IjxCQVM+PEJBUz4iOyI8Q0FQPjxDQVAtTUlOPiI7SUdOT1JFCis8TC1sLVk+CQkiPGx5PjxseT4iOyI8QkFTPjxCQVM+IjsiPENBUD48TUlOLUNBUD4iO0lHTk9SRQorPEwtbC15PgkJIjxseT48bHk+IjsiPEJBUz48QkFTPiI7IjxDQVA+PE1JTj4iO0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNkM+Cis8bC15PgkJPGx5Pjs8QkFTPjs8TUlOPjtJR05PUkUKKzxsLVk+CQk8bHk+OzxCQVM+OzxNSU4tQ0FQPjtJR05PUkUKKzxsLUwtWT4JCSI8bHk+PGx5PiI7IjxCQVM+PEJBUz4iOyI8TUlOPjxDQVA+IjtJR05PUkUKKzxsLUwteT4JCSI8bHk+PGx5PiI7IjxCQVM+PEJBUz4iOyI8TUlOPjxDQVAtTUlOPiI7SUdOT1JFCis8bC1sLVk+CQkiPGx5PjxseT4iOyI8QkFTPjxCQVM+IjsiPE1JTj48TUlOLUNBUD4iO0lHTk9SRQorPGwtbC15PgkJIjxseT48bHk+IjsiPEJBUz48QkFTPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA0RT4KKzxOLVk+CQk8bnk+OzxCQVM+OzxDQVA+O0lHTk9SRQorPE4teT4JCTxueT47PEJBUz47PENBUC1NSU4+O0lHTk9SRQorPE4tTi1ZPgkJIjxueT48bnk+IjsiPEJBUz48QkFTPiI7IjxDQVA+PENBUD4iO0lHTk9SRQorPE4tTi15PgkJIjxueT48bnk+IjsiPEJBUz48QkFTPiI7IjxDQVA+PENBUC1NSU4+IjtJR05PUkUKKzxOLW4tWT4JCSI8bnk+PG55PiI7IjxCQVM+PEJBUz4iOyI8Q0FQPjxNSU4tQ0FQPiI7SUdOT1JFCis8Ti1uLXk+CQkiPG55PjxueT4iOyI8QkFTPjxCQVM+IjsiPENBUD48TUlOPiI7SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA2RT4KKzxuLXk+CQk8bnk+OzxCQVM+OzxNSU4+O0lHTk9SRQorPG4tWT4JCTxueT47PEJBUz47PE1JTi1DQVA+O0lHTk9SRQorPG4tTi1ZPgkJIjxueT48bnk+IjsiPEJBUz48QkFTPiI7IjxNSU4+PENBUD4iO0lHTk9SRQorPG4tTi15PgkJIjxueT48bnk+IjsiPEJBUz48QkFTPiI7IjxNSU4+PENBUC1NSU4+IjtJR05PUkUKKzxuLW4tWT4JCSI8bnk+PG55PiI7IjxCQVM+PEJBUz4iOyI8TUlOPjxNSU4tQ0FQPiI7SUdOT1JFCis8bi1uLXk+CQkiPG55PjxueT4iOyI8QkFTPjxCQVM+IjsiPE1JTj48TUlOPiI7SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDUzPgorPFMtWj4JCTxzej47PEJBUz47PENBUD47SUdOT1JFCis8Uy16PgkJPHN6Pjs8QkFTPjs8Q0FQLU1JTj47SUdOT1JFCis8Uy1TLVo+CQkiPHN6Pjxzej4iOyI8QkFTPjxCQVM+IjsiPENBUD48Q0FQPiI7SUdOT1JFCis8Uy1TLXo+CQkiPHN6Pjxzej4iOyI8QkFTPjxCQVM+IjsiPENBUD48Q0FQLU1JTj4iO0lHTk9SRQorPFMtcy1aPgkJIjxzej48c3o+IjsiPEJBUz48QkFTPiI7IjxDQVA+PE1JTi1DQVA+IjtJR05PUkUKKzxTLXMtej4JCSI8c3o+PHN6PiI7IjxCQVM+PEJBUz4iOyI8Q0FQPjxNSU4+IjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDczPgorPHMtWj4JCTxzej47PEJBUz47PE1JTi1DQVA+O0lHTk9SRQorPHMtej4JCTxzej47PEJBUz47PE1JTj47SUdOT1JFCis8cy1TLVo+CQkiPHN6Pjxzej4iOyI8QkFTPjxCQVM+IjsiPE1JTj48Q0FQPiI7SUdOT1JFCis8cy1TLXo+CQkiPHN6Pjxzej4iOyI8QkFTPjxCQVM+IjsiPE1JTj48Q0FQLU1JTj4iO0lHTk9SRQorPHMtcy1aPgkJIjxzej48c3o+IjsiPEJBUz48QkFTPiI7IjxNSU4+PE1JTi1DQVA+IjtJR05PUkUKKzxzLXMtej4JCSI8c3o+PHN6PiI7IjxCQVM+PEJBUz4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNTQ+Cis8VC1ZPgkJPHR5Pjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxULXk+CQk8dHk+OzxCQVM+OzxDQVAtTUlOPjtJR05PUkUKKzxULVQtWT4JCSI8dHk+PHR5PiI7IjxCQVM+PEJBUz4iOyI8Q0FQPjxDQVA+IjtJR05PUkUKKzxULVQteT4JCSI8dHk+PHR5PiI7IjxCQVM+PEJBUz4iOyI8Q0FQPjxDQVAtTUlOPiI7SUdOT1JFCis8VC10LVk+CQkiPHR5Pjx0eT4iOyI8QkFTPjxCQVM+IjsiPENBUD48TUlOLUNBUD4iO0lHTk9SRQorPFQtdC15PgkJIjx0eT48dHk+IjsiPEJBUz48QkFTPiI7IjxDQVA+PE1JTj4iO0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNzQ+Cis8dC1ZPgkJPHR5Pjs8QkFTPjs8TUlOLUNBUD47SUdOT1JFCis8dC15PgkJPHR5Pjs8QkFTPjs8TUlOPjtJR05PUkUKKzx0LVQtWT4JCSI8dHk+PHR5PiI7IjxCQVM+PEJBUz4iOyI8TUlOPjxDQVA+IjtJR05PUkUKKzx0LVQteT4JCSI8dHk+PHR5PiI7IjxCQVM+PEJBUz4iOyI8TUlOPjxDQVAtTUlOPiI7SUdOT1JFCis8dC10LVk+CQkiPHR5Pjx0eT4iOyI8QkFTPjxCQVM+IjsiPE1JTj48TUlOLUNBUD4iO0lHTk9SRQorPHQtdC15PgkJIjx0eT48dHk+IjsiPEJBUz48QkFTPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA1QT4KKzxaLVM+CQk8enM+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFotcz4JCTx6cz47PEJBUz47PENBUC1NSU4+O0lHTk9SRQorPFotWi1TPgkJIjx6cz48enM+IjsiPEJBUz48QkFTPiI7IjxDQVA+PENBUD4iO0lHTk9SRQorPFotWi1zPgkJIjx6cz48enM+IjsiPEJBUz48QkFTPiI7IjxDQVA+PENBUC1NSU4+IjtJR05PUkUKKzxaLXotUz4JCSI8enM+PHpzPiI7IjxCQVM+PEJBUz4iOyI8Q0FQPjxNSU4tQ0FQPiI7SUdOT1JFCis8Wi16LXM+CQkiPHpzPjx6cz4iOyI8QkFTPjxCQVM+IjsiPENBUD48TUlOPiI7SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA3QT4KKzx6LVM+CQk8enM+OzxCQVM+OzxNSU4tQ0FQPjtJR05PUkUKKzx6LXM+CQk8enM+OzxCQVM+OzxNSU4+O0lHTk9SRQorPHotWi1TPgkJIjx6cz48enM+IjsiPEJBUz48QkFTPiI7IjxNSU4+PENBUD4iO0lHTk9SRQorPHotWi1zPgkJIjx6cz48enM+IjsiPEJBUz48QkFTPiI7IjxNSU4+PENBUC1NSU4+IjtJR05PUkUKKzx6LXotUz4JCSI8enM+PHpzPiI7IjxCQVM+PEJBUz4iOyI8TUlOPjxNSU4tQ0FQPiI7SUdOT1JFCis8ei16LXM+CQkiPHpzPjx6cz4iOyI8QkFTPjxCQVM+IjsiPE1JTj48TUlOPiI7SUdOT1JFCisKK3Jlb3JkZXItZW5kCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAorCitpbmNsdWRlICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCisKKzxVMDBDMT4gIjxVMDA0MT48VTAzMDE+IjsiPFUwMDQxPjxVMDBCND4iOyI8VTAwNDE+PFUwMDI3PiIKKzxVMDBDOT4gIjxVMDA0NT48VTAzMDE+IjsiPFUwMDQ1PjxVMDBCND4iOyI8VTAwNDU+PFUwMDI3PiIKKzxVMDBDRD4gIjxVMDA0OT48VTAzMDE+IjsiPFUwMDQ5PjxVMDBCND4iOyI8VTAwNDk+PFUwMDI3PiIKKzxVMDBEMz4gIjxVMDA0Rj48VTAzMDE+IjsiPFUwMDRGPjxVMDBCND4iOyI8VTAwNEY+PFUwMDI3PiIKKzxVMDBENj4gIjxVMDA0Rj48VTAzMDg+IjsiPFUwMDRGPjxVMDBBOD4iOyI8VTAwNEY+PFUwMDNBPiIKKzxVMDE1MD4gIjxVMDA0Rj48VTAzMEI+IjsiPFUwMDRGPjxVMDJERD4iOyI8VTAwNEY+PFUwMDIyPiIKKzxVMDBEQT4gIjxVMDA1NT48VTAzMDE+IjsiPFUwMDU1PjxVMDBCND4iOyI8VTAwNTU+PFUwMDI3PiIKKzxVMDBEQz4gIjxVMDA1NT48VTAzMDg+IjsiPFUwMDU1PjxVMDBBOD4iOyI8VTAwNTU+PFUwMDNBPiIKKzxVMDE3MD4gIjxVMDA1NT48VTAzMEI+IjsiPFUwMDU1PjxVMDJERD4iOyI8VTAwNTU+PFUwMDIyPiIKKworPFUwMEUxPiAiPFUwMDYxPjxVMDMwMT4iOyI8VTAwNjE+PFUwMEI0PiI7IjxVMDA2MT48VTAwMjc+IgorPFUwMEU5PiAiPFUwMDY1PjxVMDMwMT4iOyI8VTAwNjU+PFUwMEI0PiI7IjxVMDA2NT48VTAwMjc+IgorPFUwMEVEPiAiPFUwMDY5PjxVMDMwMT4iOyI8VTAwNjk+PFUwMEI0PiI7IjxVMDA2OT48VTAwMjc+IgorPFUwMEYzPiAiPFUwMDZGPjxVMDMwMT4iOyI8VTAwNkY+PFUwMEI0PiI7IjxVMDA2Rj48VTAwMjc+IgorPFUwMEY2PiAiPFUwMDZGPjxVMDMwOD4iOyI8VTAwNkY+PFUwMEE4PiI7IjxVMDA2Rj48VTAwM0E+IgorPFUwMTUxPiAiPFUwMDZGPjxVMDMwQj4iOyI8VTAwNkY+PFUwMkREPiI7IjxVMDA2Rj48VTAwMjI+IgorPFUwMEZBPiAiPFUwMDc1PjxVMDMwMT4iOyI8VTAwNzU+PFUwMEI0PiI7IjxVMDA3NT48VTAwMjc+IgorPFUwMEZDPiAiPFUwMDc1PjxVMDMwOD4iOyI8VTAwNzU+PFUwMEE4PiI7IjxVMDA3NT48VTAwM0E+IgorPFUwMTcxPiAiPFUwMDc1PjxVMDMwQj4iOyI8VTAwNzU+PFUwMkREPiI7IjxVMDA3NT48VTAwMjI+IgorCit0cmFuc2xpdF9lbmQKKworRU5EIExDX0NUWVBFCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA0OT48VTAwNjk+PFUwMDU5PjxVMDA3OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAgICI8VTAwNDg+PFUwMDU1PjxVMDA0Nj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICAgICAiPFUwMDQ2PjxVMDA3ND4iCittb25fZGVjaW1hbF9wb2ludCAgICAgICAgICI8VTAwMkM+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgICAiPFUwMDJFPiIKK21vbl9ncm91cGluZyAgICAgICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgICAgIDIKK2ludF9wX2NzX3ByZWNlZGVzICAgICAgICAgMQoraW50X3Bfc2VwX2J5X3NwYWNlICAgICAgICAxCitpbnRfbl9jc19wcmVjZWRlcyAgICAgICAgIDEKK2ludF9uX3NlcF9ieV9zcGFjZSAgICAgICAgMQoraW50X3Bfc2lnbl9wb3NuICAgICAgICAgICAxCitpbnRfbl9zaWduX3Bvc24gICAgICAgICAgIDEKK3BfY3NfcHJlY2VkZXMgICAgICAgICAgICAgMAorcF9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDAKK25fc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAgICAgICI8VTAwMkM+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAgICAiPFUwMDJFPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgICAgMzszCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICI8VTAwNzY+IjsiPFUwMDY4PiI7IjxVMDA2Qj4iOyI8VTAwNzM+PFUwMDdBPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2Mz48VTAwNzM+IjsiPFUwMDcwPiI7IjxVMDA3Mz48VTAwN0E+PFUwMDZGPiIKK2RheSAgICAgIjxVMDA3Nj48VTAwNjE+PFUwMDczPjxVMDBFMT48VTAwNzI+PFUwMDZFPjxVMDA2MT48VTAwNzA+IjsvCisgICAgICAgICI8VTAwNjg+PFUwMEU5PjxVMDA3ND48VTAwNjY+PFUwMTUxPiI7LworICAgICAgICAiPFUwMDZCPjxVMDA2NT48VTAwNjQ+PFUwMDY0PiI7LworICAgICAgICAiPFUwMDczPjxVMDA3QT48VTAwNjU+PFUwMDcyPjxVMDA2ND48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNjM+PFUwMDczPjxVMDBGQz48VTAwNzQ+PFUwMEY2PjxVMDA3Mj48VTAwNzQ+PFUwMEY2PjxVMDA2Qj4iOy8KKyAgICAgICAgIjxVMDA3MD48VTAwRTk+PFUwMDZFPjxVMDA3ND48VTAwNjU+PFUwMDZCPiI7LworICAgICAgICAiPFUwMDczPjxVMDA3QT48VTAwNkY+PFUwMDZEPjxVMDA2Mj48VTAwNjE+PFUwMDc0PiIKK2FibW9uICAgIjxVMDA2QT48VTAwNjE+PFUwMDZFPiI7IjxVMDA2Nj48VTAwNjU+PFUwMDYyPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwRTE+PFUwMDcyPjxVMDA2Mz4iOyI8VTAwRTE+PFUwMDcwPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwRTE+PFUwMDZBPiI7IjxVMDA2QT48VTAwRkE+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZBPjxVMDBGQT48VTAwNkM+IjsiPFUwMDYxPjxVMDA3NT48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDdBPjxVMDA2NT48VTAwNzA+PFUwMDc0PiI7IjxVMDA2Rj48VTAwNkI+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDY0PjxVMDA2NT48VTAwNjM+IgorbW9uICAgICAiPFUwMDZBPjxVMDA2MT48VTAwNkU+PFUwMDc1PjxVMDBFMT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNjY+PFUwMDY1PjxVMDA2Mj48VTAwNzI+PFUwMDc1PjxVMDBFMT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMEUxPjxVMDA3Mj48VTAwNjM+PFUwMDY5PjxVMDA3NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwRTE+PFUwMDcwPjxVMDA3Mj48VTAwNjk+PFUwMDZDPjxVMDA2OT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMEUxPjxVMDA2QT48VTAwNzU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDZBPjxVMDBGQT48VTAwNkU+PFUwMDY5PjxVMDA3NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMEZBPjxVMDA2Qz48VTAwNjk+PFUwMDc1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNzU+PFUwMDY3PjxVMDA3NT48VTAwNzM+PFUwMDdBPjxVMDA3ND48VTAwNzU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDczPjxVMDA3QT48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZGPjxVMDA2Qj48VTAwNzQ+PFUwMEYzPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwNjU+PFUwMDYzPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA1OT48VTAwMkU+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDJFPjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyRT48VTAwMkM+LworPFUwMDIwPjxVMDAyNT48VTAwNDE+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAyRT48VTAwMjU+PFUwMDREPjxVMDAyRT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgIjxVMDAyNT48VTAwNTk+PFUwMDJEPjxVMDAyNT48VTAwNkQ+PFUwMDJEPjxVMDAyNT48VTAwNjQ+IgordF9mbXQgICAiPFUwMDI1PjxVMDA0OD48VTAwMkU+PFUwMDI1PjxVMDA0RD48VTAwMkU+PFUwMDI1PjxVMDA1Mz4iCithbV9wbSAgICIiOyIiCit0X2ZtdF9hbXBtICI8VTAwMjU+PFUwMDQ4PjxVMDAyRT48VTAwMjU+PFUwMDREPjxVMDAyRT48VTAwMjU+PFUwMDUzPiIKK2RhdGVfZm10ICI8VTAwMjU+PFUwMDU5PjxVMDAyRT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMkU+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDJFPjxVMDAyQz4vCis8VTAwMjA+PFUwMDI1PjxVMDA0MT48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDJFPjxVMDAyNT48VTAwNEQ+PFUwMDJFPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNUE+Igord2VlayAgICAgNzsxOTk3MTIwMTs0CitmaXJzdF93ZWVrZGF5CTEKK2ZpcnN0X3dvcmtkYXkJMQorRU5EIExDX1RJTUUKKworTENfUEFQRVIKK2hlaWdodCAgIDI5Nword2lkdGggICAgMjEwCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzMz48VTAwMzY+IgoraW50X3NlbGVjdCAgICAgIjxVMDAzMD48VTAwMzA+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorJSBGSVhNRQorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAiPFUwMDQ4PjxVMDA1NT4iCitjb3VudHJ5X2FiMyAiPFUwMDQ4PjxVMDA1NT48VTAwNEU+IgorY291bnRyeV9udW0gMzQ4CitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvaHlfQU0gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9oeV9BTQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDc5NzMwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvaHlfQU0KQEAgLTAsMCArMSwyMDAgQEAKK2VzY2FwZV9jaGFyIC8KK2NvbW1lbnRfY2hhciAlCislIENoYXJzZXQ6IFVURi04CislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28gZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAiQXJtZW5pYW4gbGFuZ3VhZ2UgbG9jYWxlIGZvciBBcm1lbmlhIgorc291cmNlICJodHRwOi8vd3d3LmZyZWVuZXQuYW0vYXJtc2NpaSIKKyUJRXVnZW5lIFNldmluaWFuIDxzZXZpbmlhbkBjcmRseDIueWVycGhpLmFtPiBjb21wbGV0ZWQKKyUJTENfTU9ORVRBUlkgYW5kIExDX1RJTUUKK2FkZHJlc3MgIiIKK2NvbnRhY3QgIlBhYmxvIFNhcmF0eGFnYSIKK2VtYWlsICJwYWJsb0BtYW5kcmFrZXNvZnQuY29tIgordGVsICIiCitmYXggIiIKK2xhbmd1YWdlICJBcm1lbmlhbiIKK3RlcnJpdG9yeSAiQXJtZW5pYSIKK3JldmlzaW9uICIwLjQiCitkYXRlICIyMDAxLTAxLTI2IgorCitjYXRlZ29yeSAiaHlfQU06MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICJoeV9BTToyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAiaHlfQU06MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICJoeV9BTToyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgImh5X0FNOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAiaHlfQU06MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgImh5X0FNOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICJoeV9BTToyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgImh5X0FNOjIwMDAiO0xDX01FQVNVUkVNRU5UCitjYXRlZ29yeSAiaHlfQU06MjAwMCI7TENfVEVMRVBIT05FCitjYXRlZ29yeSAiaHlfQU06MjAwMCI7TENfQUREUkVTUworCislIElTTy9JRUMgMTQ2NTI6IENvbnZlcnRlZCBjb21tZW50cyB0byBMQ19JREVOVElGSUNBVElPTgorJSAgYWRkZWQgTENfUEFQRVIsIExDX01FQVNVUkVNRU5ULCBMQ19URUxFUEhPTkUKKyUgLS0gbWNraW5zdHJ5QGNvbXB1dGVyLm9yZywgMjAwMC0wNi0yMAorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworCislIElNT1JUQU5UIE5PVEU6CislCislICAgIERpY3Rpb25hcmllcywgc3BlbGxpbmcgY2hlY2tlcnMgYW5kIG90aGVyIGxpbmd1aXN0aWMgc3lzdGVtcywgYXMKKyUgICAgd2VsbCBhcyBvcGVyYXRpbmcgZW52aXJvbm1lbnRzIGRpc3Rpbmd1aXNoaW5nIGh1bWFuIGxhbmd1YWdlcyBhbmQKKyUgICAgbG9jYWxlIGlkZW50aWZpY2F0aW9uIHNob3VsZCB0YWtlIGludG8gY29uc2lkZXJhdGlvbiB0aGUgZXhpc3RlbmNlCislICAgIG9mIDQgbXV0dWFsbHkgaW5jb21wcmVoZW5zaWJsZSBmb3JtcyAoZGlhbGVjdHMpIG9mIHRoZSBBcm1lbmlhbgorJSAgICBsYW5ndWFnZTogRWFzdGVybiwgV2VzdGVybiwgR3JhYmFyIGFuZCBNaWRkbGUuIFRhYmxlIDMgcHJlc2VudHMgdHdvCislICAgIGZvcm1zIG9mIHN1Z2dlc3RlZCBtbmVtb25pYyB0YWdzOiBNSU1FLXN0eWxlIChSRkMtMTc2NikgYW5kCislICAgIFdpbmRvd3Mtc3R5bGUgMy1sZXR0ZXIgYWJicmV2aWF0aW9ucy4KKyUKKyUgICAgVGFibGUgMy4gTGFuZ3VhZ2UgdGFncworJQorJSAgICAgICAgICAgICAgIE1pbWUtc3R5bGUgbmFtZSAgMy1sZXR0ZXIgY29kZSAgIEZ1bGwgbmFtZQorJSAgICAgICAgICAgICAgICAgICBoeS1lYXN0ZXJuICAgQU1FICAgICAgQXJtZW5pYW4gRWFzdGVybgorJSAgICAgICAgICAgICAgICAgICBoeS13ZXN0ZXJuICAgQU1XICAgICAgQXJtZW5pYW4gV2VzdGVybgorJSAgICAgICAgICAgICAgICAgICBoeS1ncmFiYXIgICAgQU1HICAgICAgQXJtZW5pYW4gR3JhYmFyCislICAgICAgICAgICAgICAgICAgIGh5LW1pZGRsZSAgICBBTU0gICAgICBBcm1lbmlhbiBNaWRkbGUKKyUKKyUgVGhhdCB3aWxsIGFmZmVjdCBMQ19USU1FIGFuZCBMQ19NRVNTQUdFUzsgYXMgd2VsbCBhcyBhbnkgdHJhbnNsYXRpb24KKyUgb2YgcHJvZ3JhbXMuIHRoZSBsb2NhbGUgbmFtZXMgd2lsbCBwcm9iYWJseSBiZSBoeUBlYXN0ZXJuLCBoeUB3ZXN0ZXJuLAorJSBoeUBncmFiYXIsIGFuZCBoeUBtaWRkbGUgaW4gTGludXggKGVnLCBhcyB5b3UgcGFzcyB0aGVtIHRvIExBTkcgdmFyaWFibGUpLgorCislJSUlJSUlJSUlJSUlCislCislIFRPRE86IGNoZWNrIExDX01FU1NBR0VTCislCXNlZSBJTVBPUlRBTlQgTk9URSBhYm92ZS4KKyUKKyUlJSUlJSUlJSUlJQorCitMQ19DT0xMQVRFCitjb3B5ICJpc28xNDY1MV90MSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgICI8VTAwNDE+PFUwMDREPjxVMDA0ND48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgIjxVMDUzND4iCittb25fZGVjaW1hbF9wb2ludCAgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAwCituX2NzX3ByZWNlZGVzICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAwCitwX3NpZ25fcG9zbiAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAxCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludCAgICAgICAgIjxVMDAyRT4iCit0aG91c2FuZHNfc2VwICAgICAgICAiPFUwMDJDPiIKK2dyb3VwaW5nICAgICAgICAgICAgIDM7MworRU5EIExDX05VTUVSSUMKKworTENfVElNRQorCithYmRheSAgICAgICAiPFUwNTNGPjxVMDU4MD48VTA1NkY+IjsvCisgICAgICAgICAgICAiPFUwNTM1PjxVMDU4MD48VTA1NkY+IjsvCisgICAgICAgICAgICAiPFUwNTM1PjxVMDU4MD48VTA1ODQ+IjsvCisgICAgICAgICAgICAiPFUwNTQ5PjxVMDU4MD48VTA1ODQ+IjsvCisgICAgICAgICAgICAiPFUwNTQwPjxVMDU3Nj48VTA1NjM+IjsvCisgICAgICAgICAgICAiPFUwNTQ4PjxVMDU4Mj48VTA1ODA+IjsvCisgICAgICAgICAgICAiPFUwNTQ3PjxVMDU2Mj48VTA1Njk+IgorZGF5ICAgICAgICAgIjxVMDUzRj48VTA1NkI+PFUwNTgwPjxVMDU2MT48VTA1NkY+PFUwNTZCPiI7LworICAgICAgICAgICAgIjxVMDUzNT48VTA1ODA+PFUwNTZGPjxVMDU3OD48VTA1ODI+PFUwNTc3PjxVMDU2MT48VTA1NjI+PFUwNTY5PjxVMDU2Qj4iOy8KKyAgICAgICAgICAgICI8VTA1MzU+PFUwNTgwPjxVMDU2NT48VTA1ODQ+PFUwNTc3PjxVMDU2MT48VTA1NjI+PFUwNTY5PjxVMDU2Qj4iOy8KKyAgICAgICAgICAgICI8VTA1NDk+PFUwNTc4PjxVMDU4MD48VTA1NjU+PFUwNTg0PjxVMDU3Nz48VTA1NjE+PFUwNTYyPjxVMDU2OT48VTA1NkI+IjsvCisgICAgICAgICAgICAiPFUwNTQwPjxVMDU2Qj48VTA1NzY+PFUwNTYzPjxVMDU3Nz48VTA1NjE+PFUwNTYyPjxVMDU2OT48VTA1NkI+IjsvCisgICAgICAgICAgICAiPFUwNTQ4PjxVMDU4Mj48VTA1ODA+PFUwNTYyPjxVMDU2MT48VTA1Njk+IjsvCisgICAgICAgICAgICAiPFUwNTQ3PjxVMDU2MT48VTA1NjI+PFUwNTYxPjxVMDU2OT4iCithYm1vbiAgICAgICAiPFUwNTQwPjxVMDU3Nj48VTA1N0U+IjsvCisgICAgICAgICAgICAiPFUwNTUzPjxVMDU3Rj48VTA1ODA+IjsvCisgICAgICAgICAgICAiPFUwNTQ0PjxVMDU2MT48VTA1ODA+IjsvCisgICAgICAgICAgICAiPFUwNTMxPjxVMDU3QT48VTA1ODA+IjsvCisgICAgICAgICAgICAiPFUwNTQ0PjxVMDU2MT48VTA1NzU+IjsvCisgICAgICAgICAgICAiPFUwNTQwPjxVMDU3Nj48VTA1N0Q+IjsvCisgICAgICAgICAgICAiPFUwNTQwPjxVMDU2Qz48VTA1N0Q+IjsvCisgICAgICAgICAgICAiPFUwNTU1PjxVMDU2Mz48VTA1N0Q+IjsvCisgICAgICAgICAgICAiPFUwNTREPjxVMDU2NT48VTA1N0E+IjsvCisgICAgICAgICAgICAiPFUwNTQwPjxVMDU3OD48VTA1NkY+IjsvCisgICAgICAgICAgICAiPFUwNTQ2PjxVMDU3ND48VTA1NjI+IjsvCisgICAgICAgICAgICAiPFUwNTM0PjxVMDU2NT48VTA1NkY+IgorbW9uICAgICAgICAgIjxVMDU0MD48VTA1Nzg+PFUwNTgyPjxVMDU3Nj48VTA1N0U+PFUwNTYxPjxVMDU4MD48VTA1NkI+IjsvCisgICAgICAgICAgICAiPFUwNTUzPjxVMDU2NT48VTA1N0Y+PFUwNTgwPjxVMDU3RT48VTA1NjE+PFUwNTgwPjxVMDU2Qj4iOy8KKyAgICAgICAgICAgICI8VTA1NDQ+PFUwNTYxPjxVMDU4MD48VTA1N0Y+PFUwNTZCPiI7LworICAgICAgICAgICAgIjxVMDUzMT48VTA1N0E+PFUwNTgwPjxVMDU2Qj48VTA1NkM+PFUwNTZCPiI7LworICAgICAgICAgICAgIjxVMDU0ND48VTA1NjE+PFUwNTc1PjxVMDU2Qj48VTA1N0Q+PFUwNTZCPiI7LworICAgICAgICAgICAgIjxVMDU0MD48VTA1Nzg+PFUwNTgyPjxVMDU3Nj48VTA1NkI+PFUwNTdEPjxVMDU2Qj4iOy8KKyAgICAgICAgICAgICI8VTA1NDA+PFUwNTc4PjxVMDU4Mj48VTA1NkM+PFUwNTZCPjxVMDU3RD48VTA1NkI+IjsvCisgICAgICAgICAgICAiPFUwNTU1PjxVMDU2Mz48VTA1Nzg+PFUwNTdEPjxVMDU3Rj48VTA1Nzg+PFUwNTdEPjxVMDU2Qj4iOy8KKyAgICAgICAgICAgICI8VTA1NEQ+PFUwNTY1PjxVMDU3QT48VTA1N0Y+PFUwNTY1PjxVMDU3ND48VTA1NjI+PFUwNTY1PjxVMDU4MD48VTA1NkI+IjsvCisgICAgICAgICAgICAiPFUwNTQwPjxVMDU3OD48VTA1NkY+PFUwNTdGPjxVMDU2NT48VTA1NzQ+PFUwNTYyPjxVMDU2NT48VTA1ODA+PFUwNTZCPiI7LworICAgICAgICAgICAgIjxVMDU0Nj48VTA1Nzg+PFUwNTc1PjxVMDU2NT48VTA1NzQ+PFUwNTYyPjxVMDU2NT48VTA1ODA+PFUwNTZCPiI7LworICAgICAgICAgICAgIjxVMDUzND48VTA1NjU+PFUwNTZGPjxVMDU3Rj48VTA1NjU+PFUwNTc0PjxVMDU2Mj48VTA1NjU+PFUwNTgwPjxVMDU2Qj4iCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA3OT4iCit0X2ZtdCAgICAgICAiPFUwMDI1PjxVMDA3Mj4iCithbV9wbSAgICAgICAiIjsiIgordF9mbXRfYW1wbSAgIiIKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCit5ZXNzdHIgICAgICAiPFUwNTYxPjxVMDU3NT48VTA1Nzg+Igorbm9zdHIgICAgICAgIjxVMDU3OD48VTA1Nzk+IgoreWVzZXhwciAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDc5PjxVMDA1OT48VTAwNzM+PFUwMDUzPjxVMDU2MT48VTA1MzE+PFUwMDVEPiIKK25vZXhwciAgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwNTc4PjxVMDU0OD48VTAwNUQ+IgorRU5EIExDX01FU1NBR0VTCisKKyUgTWV0cmljIE1lYXN1cmVtZW50IHN5c3RlbSAoSVNPIDEwMDApCitMQ19NRUFTVVJFTUVOVAorbWVhc3VyZW1lbnQgMQorRU5EIExDX01FQVNVUkVNRU5UCisKKyUgRGVmYXVsdCBwYXBlcjogQTQKK0xDX1BBUEVSCitoZWlnaHQgMjk3Cit3aWR0aCAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Qz4iCislIEZJWE1FIEZpbmQgdGVsX2RvbV9mbXQKK2ludF9zZWxlY3QgIjxVMDAzMD48VTAwMzA+IgoraW50X3ByZWZpeCAiPFUwMDMzPjxVMDAzNz48VTAwMzQ+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA3Mz48VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDM1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNDM+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X25hbWUgIjxVMDU0MD48VTA1NjE+PFUwNTc1PjxVMDU2MT48VTA1N0Q+PFUwNTdGPjxVMDU2MT48VTA1NzY+IgorJSBGSVhNRSBjb3VudHJ5X3Bvc3QgZm9yIEFybWVuaWE/Citjb3VudHJ5X2FiMiAiPFUwMDQxPjxVMDA0RD4iCitjb3VudHJ5X2FiMyAiPFUwMDQxPjxVMDA1Mj48VTAwNEQ+IgorY291bnRyeV9udW0gNTEKK2NvdW50cnlfY2FyICI8VTAwNDE+PFUwMDREPiIKK2NvdW50cnlfaXNibiAiPFUwMDM5PjxVMDAzOT48VTAwMzk+PFUwMDMzPjxVMDAzMD4iCitsYW5nX25hbWUgIjxVMDU0MD48VTA1NjE+PFUwNTc1PjxVMDU2NT48VTA1ODA+PFUwNTY1PjxVMDU3Nj4iCitsYW5nX2FiICI8VTAwNjg+PFUwMDc5PiIKK2xhbmdfdGVybSAiPFUwMDY4PjxVMDA3OT48VTAwNjU+IgorbGFuZ19saWIgIjxVMDA2MT48VTAwNzI+PFUwMDZEPiIKK0VORCBMQ19BRERSRVNTCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK25hbWVfbWlzcyAgICI8VTA1ODU+PFUwNTgwPjxVMDU2Qj48VTA1Nzg+PFUwNTgwPjxVMDU2ND4iCituYW1lX21yICAgICAiPFUwNTdBPjxVMDU4MD48VTA1NzY+IgorbmFtZV9tcnMgICAgIjxVMDU3Rj48VTA1NkY+PFUwNTc2PiIKK0VORCBMQ19OQU1FCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9pMThuIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvaTE4bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mjg3NDI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvaTE4bgpAQCAtMCwwICsxLDIxMzAgQEAKK2VzY2FwZV9jaGFyIC8KK2NvbW1lbnRfY2hhciAlCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICAgICAgICAgICAgIiIKK3NvdXJjZSAgICAgICAgICAgICAgICAiIgorYWRkcmVzcyAgICAgICAgICAgICAgICIiCitjb250YWN0ICAgICAgICAgICAgICAgIiIKK2VtYWlsICAgICAgICAgICAgICAgICAiIgordGVsICAgICAgICAgICAgICAgICAgICIiCitmYXggICAgICAgICAgICAgICAgICAgIiIKK2xhbmd1YWdlICAgICAgICAgICAgICAiIgordGVycml0b3J5ICAgICAgICAgICAgICIiCityZXZpc2lvbiAgICAgICAgICAgICAgIiIKK2RhdGUgICAgICAgICAgICAgICAgICAiMjAwOC0wNC0xMyIKKyUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCislIFRoZSBmb2xsb3dpbmcgaXMgdGhlIDE0NjUyIGkxOG4gZmRjYy1zZXQgTENfQ1RZUEUgY2F0ZWdvcnkuCislIEl0IGNvdmVycyBVbmljb2RlIHZlcnNpb24gNS4wLjAuCislIFRoZSBjaGFyYWN0ZXIgY2xhc3NlcyBhbmQgbWFwcGluZyB0YWJsZXMgd2VyZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZAorJSB1c2luZyB0aGUgZ2VuLXVuaWNvZGUtY3R5cGUuYyBwcm9ncmFtLgorCislIFRoZSAidXBwZXIiIGNsYXNzIHJlZmxlY3RzIHRoZSB1cHBlcmNhc2UgY2hhcmFjdGVycyBvZiBjbGFzcyAiYWxwaGEiCit1cHBlciAvCislIEJBU0lDIExBVElOLworICAgPFUwMDQxPi4uPFUwMDVBPjsvCislIExBVElOLTEgU1VQUExFTUVOVC8KKyAgIDxVMDBDMD4uLjxVMDBENj47PFUwMEQ4Pi4uPFUwMERFPjsvCislIExBVElOIEVYVEVOREVELUEvCisgICA8VTAxMDA+Li4oMikuLjxVMDEzNj47LworICAgPFUwMTM5Pi4uKDIpLi48VTAxNDc+Oy8KKyAgIDxVMDE0QT4uLigyKS4uPFUwMTc4PjsvCisgICA8VTAxNzk+Li4oMikuLjxVMDE3RD47LworJSBMQVRJTiBFWFRFTkRFRC1CLworICAgPFUwMTgxPjs8VTAxODI+Li4oMikuLjxVMDE4Nj47PFUwMTg3PjsvCisgICA8VTAxODk+Li48VTAxOEI+OzxVMDE4RT4uLjxVMDE5MT47PFUwMTkzPjs8VTAxOTQ+Oy8KKyAgIDxVMDE5Nj4uLjxVMDE5OD47PFUwMTlDPjs8VTAxOUQ+OzxVMDE5Rj47LworICAgPFUwMUEwPi4uKDIpLi48VTAxQTQ+Oy8KKyAgIDxVMDFBNj47PFUwMUE3Pjs8VTAxQTk+OzxVMDFBQz47PFUwMUFFPjs8VTAxQUY+OzxVMDFCMT4uLjxVMDFCMz47LworICAgPFUwMUI1Pjs8VTAxQjc+OzxVMDFCOD47PFUwMUJDPjs8VTAxQzQ+OzxVMDFDNT47PFUwMUM3Pjs8VTAxQzg+Oy8KKyAgIDxVMDFDQT47PFUwMUNCPjsvCisgICA8VTAxQ0Q+Li4oMikuLjxVMDFEQj47LworICAgPFUwMURFPi4uKDIpLi48VTAxRUU+Oy8KKyAgIDxVMDFGMT47PFUwMUYyPjs8VTAxRjQ+OzxVMDFGNj4uLjxVMDFGOD47PFUwMUZBPi4uKDIpLi48VTAxRkU+Oy8KKyAgIDxVMDIwMD4uLigyKS4uPFUwMjMyPjsvCisgICA8VTAyM0E+OzxVMDIzQj47PFUwMjNEPjs8VTAyM0U+Oy8KKyAgIDxVMDI0MT47PFUwMjQzPi4uPFUwMjQ2Pjs8VTAyNDg+OzxVMDI0QT47PFUwMjRDPjs8VTAyNEU+Oy8KKyUgQkFTSUMgR1JFRUsvCisgICA8VTAzNzA+OzxVMDM3Mj47PFUwMzc2PjsvCisgICA8VTAzODY+OzxVMDM4OD4uLjxVMDM4QT47PFUwMzhDPjs8VTAzOEU+OzxVMDM4Rj47PFUwMzkxPi4uPFUwM0ExPjsvCisgICA8VTAzQTM+Li48VTAzQUI+OzxVMDNEOD4uLigyKS4uPFUwM0RFPjsvCislIEdSRUVLIFNZTUJPTFMgQU5EIENPUFRJQy8KKyAgIDxVMDNFMD4uLigyKS4uPFUwM0VFPjs8VTAzRjQ+Oy8KKyAgIDxVMDNGNz47PFUwM0Y5Pi4uPFUwM0ZBPjs8VTAzRkQ+Li48VTAzRkY+Oy8KKyUgQ1lSSUxMSUMvCisgICA8VTA0MDA+Li48VTA0MkY+OzxVMDQ2MD4uLigyKS4uPFUwNDdFPjsvCisgICA8VTA0ODA+OzxVMDQ4QT4uLigyKS4uPFUwNEJFPjs8VTA0QzA+OzxVMDRDMT4uLigyKS4uPFUwNENEPjsvCisgICA8VTA0RDA+Li4oMikuLjxVMDRGRT47LworJSBDWVJJTExJQyBTVVBQTEVNRU5ULworICAgPFUwNTAwPi4uKDIpLi48VTA1MjI+Oy8KKyUgQVJNRU5JQU4vCisgICA8VTA1MzE+Li48VTA1NTY+Oy8KKyUgR0VPUkdJQU4vCislIGlzIG5vdCBhZGRyZXNzZWQgYXMgdGhlIGxldHRlcnMgZG9lcyBub3QgaGF2ZSBhIHVwcGVyY2FzZS9sb3dlcmNhc2UgcmVsYXRpb24vCislIHdlbGwsIHRoZXJlIGFyZSB0aHJlZSBnZW9yZ2lhbiBibG9ja3MgZGVmaW5lZDsgb25lIGNhc2VsZXNzICh0aGUgb25lIHVzdWFsbHkvCislIHVzZWQpLCBvbmUgZGVmaW5lZCBhcyB1cHBlcmNhc2UgYW5kIG9uZSBhcyBsb3dlcmNhc2UuIGRlZmluaW5nIHRoZSB1cHBlcmNhc2Ugb25lIGhlcmUvCisgICA8VTEwQTA+Li48VTEwQzU+Oy8KKyUgTEFUSU4gRVhURU5ERUQgQURESVRJT05BTC8KKyAgIDxVMUUwMD4uLigyKS4uPFUxRTdFPjsvCisgICA8VTFFODA+Li4oMikuLjxVMUU5ND47PFUxRTlFPjsvCisgICA8VTFFQTA+Li4oMikuLjxVMUVGRT47LworJSBHUkVFSyBFWFRFTkRFRC8KKyAgIDxVMUYwOD4uLjxVMUYwRj47PFUxRjE4Pi4uPFUxRjFEPjs8VTFGMjg+Li48VTFGMkY+OzxVMUYzOD4uLjxVMUYzRj47LworICAgPFUxRjQ4Pi4uPFUxRjREPjs8VTFGNTk+Li4oMikuLjxVMUY1Rj47PFUxRjY4Pi4uPFUxRjZGPjsvCisgICA8VTFGODg+Li48VTFGOEY+OzxVMUY5OD4uLjxVMUY5Rj47PFUxRkE4Pi4uPFUxRkFGPjs8VTFGQjg+Li48VTFGQkM+Oy8KKyAgIDxVMUZDOD4uLjxVMUZDQz47PFUxRkQ4Pi4uPFUxRkRCPjs8VTFGRTg+Li48VTFGRUM+OzxVMUZGOD4uLjxVMUZGQz47LworJSBMRVRURVJMSUtFIFNZTUJPTFMvCisgICA8VTIxMjY+OzxVMjEyQT4uLjxVMjEyQj47LworICAgPFUyMTMyPjsvCislIE5VTUJFUiBGT1JNUy8KKyAgIDxVMjE2MD4uLjxVMjE2Rj47LworICAgPFUyMTgzPjsvCislIEVOQ0xPU0VEIEFMUEhBTlVNRVJJQ1MvCisgICA8VTI0QjY+Li48VTI0Q0Y+Oy8KKyUgR0xBR09MSVRJQy8KKyAgIDxVMkMwMD4uLjxVMkMyRT47LworJSBMQVRJTiBFWFRFTkRFRC1DLworICAgPFUyQzYwPjs8VTJDNjI+Li48VTJDNjQ+OzxVMkM2Nz4uLigyKS4uPFUyQzZCPjs8VTJDNkQ+Li48VTJDNkY+Oy8KKyAgIDxVMkM3Mj47PFUyQzc1Pjs8VUE3OEI+Oy8KKyUgQ09QVElDLworICAgPFUyQzgwPi4uKDIpLi48VTJDRTI+Oy8KKyUgQ1lSSUxMSUMgU1VQUExFTUVOVCAyLworICAgPFVBNjQwPi4uKDIpLi48VUE2NUU+OzxVQTY2Mj4uLigyKS4uPFVBNjZDPjs8VUE2ODA+Li4oMikuLjxVQTY5Nj47LworJSBMQVRJTiBFWFRFTkRFRC1ELworICAgPFVBNzIyPi4uKDIpLi48VUE3MkU+OzxVQTczMj4uLigyKS4uPFVBNzZFPjs8VUE3Nzk+Li4oMikuLjxVQTc3RD47LworICAgPFVBNzdFPi4uKDIpLi48VUE3ODY+Oy8KKyUgSEFMRldJRFRIIEFORCBGVUxMV0lEVEggRk9STVMvCisgICA8VUZGMjE+Li48VUZGM0E+Oy8KKyUgREVTRVJFVC8KKyAgIDxVMDAwMTA0MDA+Li48VTAwMDEwNDI3PgorCislIFRoZSAibG93ZXIiIGNsYXNzIHJlZmxlY3RzIHRoZSBsb3dlcmNhc2UgY2hhcmFjdGVycyBvZiBjbGFzcyAiYWxwaGEiCitsb3dlciAvCislIEJBU0lDIExBVElOLworICAgPFUwMDYxPi4uPFUwMDdBPjsvCislIExBVElOLTEgU1VQUExFTUVOVC8KKyAgIDxVMDBCNT47PFUwMERGPi4uPFUwMEY2Pjs8VTAwRjg+Li48VTAwRkY+Oy8KKyUgTEFUSU4gRVhURU5ERUQtQS8KKyAgIDxVMDEwMT4uLigyKS4uPFUwMTM3Pjs8VTAxM0E+Li4oMikuLjxVMDE0OD47LworICAgPFUwMTRCPi4uKDIpLi48VTAxNzc+OzxVMDE3QT4uLigyKS4uPFUwMTdFPjs8VTAxN0Y+Oy8KKyUgTEFUSU4gRVhURU5ERUQtQi8KKyAgIDxVMDE4MD47PFUwMTgzPjs8VTAxODU+OzxVMDE4OD47PFUwMThDPjs8VTAxOTI+OzxVMDE5NT47LworICAgPFUwMTk5Pjs8VTAxOUE+OzxVMDE5RT47PFUwMUExPjs8VTAxQTM+OzxVMDFBNT47PFUwMUE4Pjs8VTAxQUQ+Oy8KKyAgIDxVMDFCMD47PFUwMUI0Pjs8VTAxQjY+OzxVMDFCOT47PFUwMUJEPjs8VTAxQkY+OzxVMDFDNT47PFUwMUM2PjsvCisgICA8VTAxQzg+OzxVMDFDOT47PFUwMUNCPjs8VTAxQ0M+Li4oMikuLjxVMDFEQz47LworICAgPFUwMUREPi4uKDIpLi48VTAxRUY+OzxVMDFGMj47PFUwMUYzPjs8VTAxRjU+OzxVMDFGOT4uLigyKS4uPFUwMUZGPjsvCisgICA8VTAyMDE+Li4oMikuLjxVMDIxRj47PFUwMjIzPi4uKDIpLi48VTAyMzM+Oy8KKyAgIDxVMDIzQz47PFUwMjQyPjs8VTAyNDc+Li4oMikuLjxVMDI0Rj47LworJSBJUEEgRVhURU5TSU9OUy8KKyAgIDxVMDI1Mz47PFUwMjU0Pjs8VTAyNTY+OzxVMDI1Nz47PFUwMjU5Pjs8VTAyNUI+OzxVMDI2MD47PFUwMjYzPjs8VTAyNjg+Oy8KKyAgIDxVMDI2OT47PFUwMjZCPjs8VTAyNkY+OzxVMDI3Mj47PFUwMjc1Pjs8VTAyN0Q+OzxVMDI4MD47PFUwMjgzPjs8VTAyODg+Li48VTAyOEM+Oy8KKyAgIDxVMDI5Mj47LworJSBDT01CSU5JTkcgRElBQ1JJVElDQUwgTUFSS1MvCisgICA8VTAzNDU+Oy8KKyUgQkFTSUMgR1JFRUsvCisgICA8VTAzNzE+OzxVMDM3Mz47PFUwMzc3PjsvCisgICA8VTAzN0I+Li48VTAzN0Q+Oy8KKyAgIDxVMDNBQz4uLjxVMDNBRj47PFUwM0IxPi4uPFUwM0NFPjsvCislIEdSRUVLIFNZTUJPTFMgQU5EIENPUFRJQy8KKyAgIDxVMDNEMD47PFUwM0QxPjs8VTAzRDU+OzxVMDNENj47PFUwM0Q5Pi4uKDIpLi48VTAzRUY+OzxVMDNGMD4uLjxVMDNGMj47LworICAgPFUwM0Y1Pjs8VTAzRjg+OzxVMDNGQj47LworJSBDWVJJTExJQy8KKyAgIDxVMDQzMD4uLjxVMDQ1Rj47PFUwNDYxPi4uKDIpLi48VTA0N0Y+Oy8KKyAgIDxVMDQ4MT47PFUwNDhCPi4uKDIpLi48VTA0QkY+OzxVMDRDMj4uLigyKS4uPFUwNENFPjsvCisgICA8VTA0Q0Y+Oy8KKyAgIDxVMDREMT4uLigyKS4uPFUwNTIzPjsvCislIEFSTUVOSUFOLworICAgPFUwNTYxPi4uPFUwNTg2PjsvCislIFBIT05FVElDIEVYVEVOU0lPTlMvCisgICA8VTFEN0Q+Oy8KKyUgTEFUSU4gRVhURU5ERUQgQURESVRJT05BTC8KKyAgIDxVMUUwMT4uLigyKS4uPFUxRTk1Pjs8VTFFOUI+Li48VTFFOUQ+OzxVMUU5Rj47PFUxRUExPi4uKDIpLi48VTFFRkY+Oy8KKyUgR1JFRUsgRVhURU5ERUQvCisgICA8VTFGMDA+Li48VTFGMDc+OzxVMUYxMD4uLjxVMUYxNT47PFUxRjIwPi4uPFUxRjI3Pjs8VTFGMzA+Li48VTFGMzc+Oy8KKyAgIDxVMUY0MD4uLjxVMUY0NT47PFUxRjUxPi4uKDIpLi48VTFGNTc+OzxVMUY2MD4uLjxVMUY2Nz47PFUxRjcwPi4uPFUxRjdEPjsvCisgICA8VTFGODA+Li48VTFGODc+OzxVMUY5MD4uLjxVMUY5Nz47PFUxRkEwPi4uPFUxRkE3Pjs8VTFGQjA+OzxVMUZCMT47LworICAgPFUxRkIzPjs8VTFGQkU+OzxVMUZDMz47PFUxRkQwPjs8VTFGRDE+OzxVMUZFMD47PFUxRkUxPjs8VTFGRTU+Oy8KKyAgIDxVMUZGMz47LworJSBMRVRURVJMSUtFIFNZTUJPTFMvCisgICA8VTIxNEU+Oy8KKyUgTlVNQkVSIEZPUk1TLworICAgPFUyMTcwPi4uPFUyMTdGPjs8VTIxODg+Oy8KKyUgRU5DTE9TRUQgQUxQSEFOVU1FUklDUy8KKyAgIDxVMjREMD4uLjxVMjRFOT47LworJSBHTEFHT0xJVElDLworICAgPFUyQzMwPi4uPFUyQzVFPjsvCislIExBVElOIEVYVEVOREVELUMvCisgICA8VTJDNjE+OzxVMkM2NT47PFUyQzY2Pi4uKDIpLi48VTJDNkM+OzxVMkM3MT47PFUyQzczPjs8VTJDNzQ+Oy8KKyAgIDxVMkM3Nj4uLjxVMkM3QT47LworJSBDT1BUSUMvCisgICA8VTJDODE+Li4oMikuLjxVMkNFMz47LworJSBHRU9SR0lBTiBTVVBQTEVNRU5ULworJSB3ZWxsLCB0aGVyZSBhcmUgdGhyZWUgZ2VvcmdpYW4gYmxvY2tzIGRlZmluZWQ7IG9uZSBjYXNlbGVzcyAodGhlIG9uZSB1c3VhbGx5LworJSB1c2VkKSwgb25lIGRlZmluZWQgYXMgdXBwZXJjYXNlIGFuZCBvbmUgYXMgbG93ZXJjYXNlLiBkZWZpbmluZyB0aGUgbG93ZXJjYXNlIG9uZSBoZXJlLworICAgPFUyRDAwPi4uPFUyRDI1PjsvCislIENZUklMTElDIFNVUFBMRU1FTlQgMi8KKyAgIDxVQTY0MT4uLigyKS4uPFVBNjVGPjs8VUE2NjM+Li4oMikuLjxVQTY2RD47PFVBNjgxPi4uKDIpLi48VUE2OTc+Oy8KKyUgTEFUSU4gRVhURU5ERUQtRC8KKyAgIDxVQTcyMz4uLigyKS4uPFVBNzJGPjs8VUE3MzA+OzxVQTczMT4uLigyKS4uPFVBNzZGPjs8VUE3NzE+Li48VUE3Nzg+Oy8KKyAgIDxVQTc3QT4uLigyKS4uPFVBNzdDPjs8VUE3N0Y+Li4oMikuLjxVQTc4Nz47PFVBNzhDPjsvCislIEhBTEZXSURUSCBBTkQgRlVMTFdJRFRIIEZPUk1TLworICAgPFVGRjQxPi4uPFVGRjVBPjsvCislIERFU0VSRVQvCisgICA8VTAwMDEwNDI4Pi4uPFUwMDAxMDQ0Rj4KKworJSBUaGUgImFscGhhIiBjbGFzcyBvZiB0aGUgImkxOG4iIEZEQ0Mtc2V0IGlzIHJlZmxlY3RpbmcKKyUgdGhlIHJlY29tbWVuZGF0aW9ucyBpbiBUUiAxMDE3NiBhbm5leCBBCithbHBoYSAvCislIEJBU0lDIExBVElOLworICAgPFUwMDQxPi4uPFUwMDVBPjs8VTAwNjE+Li48VTAwN0E+Oy8KKyUgTEFUSU4tMSBTVVBQTEVNRU5ULworICAgPFUwMEFBPjs8VTAwQjU+OzxVMDBCQT47PFUwMEMwPi4uPFUwMEQ2Pjs8VTAwRDg+Li48VTAwRjY+Oy8KKyAgIDxVMDBGOD4uLjxVMDBGRj47LworJSBMQVRJTiBFWFRFTkRFRC1BLworICAgPFUwMTAwPi4uPFUwMTdGPjsvCislIExBVElOIEVYVEVOREVELUIvCisgICA8VTAxODA+Li48VTAyNEY+Oy8KKyUgSVBBIEVYVEVOU0lPTlMvCisgICA8VTAyNTA+Li48VTAyQUY+Oy8KKyUgU1BBQ0lORyBNT0RJRklFUiBMRVRURVJTLworICAgPFUwMkIwPi4uPFUwMkMxPjs8VTAyQzY+Li48VTAyRDE+OzxVMDJFMD4uLjxVMDJFND47LworICAgPFUwMkVFPjsvCislIENPTUJJTklORyBESUFDUklUSUNBTCBNQVJLUy8KKyAgIDxVMDM0NT47LworJSBCQVNJQyBHUkVFSy8KKyAgIDxVMDM3MD4uLjxVMDM3Mz47PFUwMzc2Pi4uPFUwMzc3Pjs8VTAzN0E+Li48VTAzN0Q+OzxVMDM4Nj47LworICAgPFUwMzg4Pi4uPFUwMzhBPjs8VTAzOEM+OzxVMDM4RT4uLjxVMDNBMT47LworICAgPFUwM0EzPi4uPFUwM0NFPjsvCislIEdSRUVLIFNZTUJPTFMgQU5EIENPUFRJQy8KKyAgIDxVMDNEMD4uLjxVMDNGNT47PFUwM0Y3Pi4uPFUwM0ZGPjsvCislIENZUklMTElDLworICAgPFUwNDAwPi4uPFUwNDgxPjs8VTA0OEE+Li48VTA0RkY+Oy8KKyUgQ1lSSUxMSUMgU1VQUExFTUVOVC8KKyAgIDxVMDUwMD4uLjxVMDUyMz47LworJSBBUk1FTklBTi8KKyAgIDxVMDUzMT4uLjxVMDU1Nj47PFUwNTU5Pjs8VTA1NjE+Li48VTA1ODc+Oy8KKyUgSEVCUkVXLworICAgPFUwNUQwPi4uPFUwNUVBPjs8VTA1RjA+Li48VTA1RjI+Oy8KKyUgQVJBQklDLworICAgPFUwNjIxPi4uPFUwNjRBPjs8VTA2NkU+Li48VTA2NkY+OzxVMDY3MT4uLjxVMDZEMz47LworICAgPFUwNkQ1Pjs8VTA2RTU+Li48VTA2RTY+OzxVMDZFRT4uLjxVMDZFRj47PFUwNkZBPi4uPFUwNkZDPjs8VTA2RkY+Oy8KKyUgU1lSSUFDLworICAgPFUwNzEwPjs8VTA3MTI+Li48VTA3MkY+OzxVMDc0RD4uLjxVMDc0Rj47LworJSBBUkFCSUMgU1VQUExFTUVOVC8KKyAgIDxVMDc1MD4uLjxVMDc3Rj47LworJSBUSEFBTkEvCisgICA8VTA3ODA+Li48VTA3QTU+OzxVMDdCMT47LworJSBOS08vCisgICA8VTA3QzA+Li48VTA3RUE+OzxVMDdGND4uLjxVMDdGNT47PFUwN0ZBPjsvCislIERFVkFOQUdBUkkvCisgICA8VTA5MDQ+Li48VTA5Mzk+OzxVMDkzRD47PFUwOTUwPjs8VTA5NTg+Li48VTA5NjE+Oy8KKyAgIDxVMDk3Qj4uLjxVMDk3Rj47LworJSBUQUJMRSAxOCBCRU5HQUxJLworICAgPFUwOTg1Pi4uPFUwOThDPjs8VTA5OEY+OzxVMDk5MD47PFUwOTkzPi4uPFUwOUE4Pjs8VTA5QUE+Li48VTA5QjA+Oy8KKyAgIDxVMDlCMj47PFUwOUI2Pi4uPFUwOUI5Pjs8VTA5QkQ+OzxVMDlDRT47PFUwOURDPjs8VTA5REQ+OzxVMDlERj4uLjxVMDlFMT47LworICAgPFUwOUYwPi4uPFUwOUYxPjsvCislIEdVUk1VS0hJLworICAgPFUwQTA1Pi4uPFUwQTBBPjs8VTBBMEY+OzxVMEExMD47PFUwQTEzPi4uPFUwQTI4Pjs8VTBBMkE+Li48VTBBMzA+Oy8KKyAgIDxVMEEzMj47PFUwQTMzPjs8VTBBMzU+OzxVMEEzNj47PFUwQTM4Pjs8VTBBMzk+OzxVMEE1OT4uLjxVMEE1Qz47LworICAgPFUwQTVFPjs8VTBBNzI+Li48VTBBNzQ+Oy8KKyUgR1VKQVJBVEkvCisgICA8VTBBODU+Li48VTBBOEQ+OzxVMEE4Rj4uLjxVMEE5MT47PFUwQTkzPi4uPFUwQUE4PjsvCisgICA8VTBBQUE+Li48VTBBQjA+OzxVMEFCMj47PFUwQUIzPjs8VTBBQjU+Li48VTBBQjk+OzxVMEFCRD47PFUwQUQwPjsvCisgICA8VTBBRTA+OzxVMEFFMT47LworJSBPUklZQS8KKyAgIDxVMEIwNT4uLjxVMEIwQz47PFUwQjBGPjs8VTBCMTA+OzxVMEIxMz4uLjxVMEIyOD47PFUwQjJBPi4uPFUwQjMwPjsvCisgICA8VTBCMzI+OzxVMEIzMz47PFUwQjM1Pi4uPFUwQjM5Pjs8VTBCM0Q+OzxVMEI1Qz47PFUwQjVEPjsvCisgICA8VTBCNUY+Li48VTBCNjM+OzxVMEI3MT47LworJSBUQU1JTC8KKyAgIDxVMEI4Mz47PFUwQjg1Pi4uPFUwQjhBPjs8VTBCOEU+Li48VTBCOTA+OzxVMEI5Mj4uLjxVMEI5NT47PFUwQjk5PjsvCisgICA8VTBCOUE+OzxVMEI5Qz47PFUwQjlFPjs8VTBCOUY+OzxVMEJBMz47PFUwQkE0Pjs8VTBCQTg+Li48VTBCQUE+Oy8KKyAgIDxVMEJBRT4uLjxVMEJCOT47LworJSBURUxVR1UvCisgICA8VTBDMDU+Li48VTBDMEM+OzxVMEMwRT4uLjxVMEMxMD47PFUwQzEyPi4uPFUwQzI4Pjs8VTBDMkE+Li48VTBDMzM+Oy8KKyAgIDxVMEMzNT4uLjxVMEMzOT47PFUwQzNEPjs8VTBDNTg+Li48VTBDNTk+OzxVMEM2MD4uLjxVMEM2Mz47LworJSBLQU5OQURBLworICAgPFUwQzg1Pi4uPFUwQzhDPjs8VTBDOEU+Li48VTBDOTA+OzxVMEM5Mj4uLjxVMENBOD47PFUwQ0FBPi4uPFUwQ0IzPjsvCisgICA8VTBDQjU+Li48VTBDQjk+OzxVMENERT47PFUwQ0UwPi4uPFUwQ0UxPjsvCislIE1BTEFZQUxBTS8KKyAgIDxVMEQwNT4uLjxVMEQwQz47PFUwRDBFPi4uPFUwRDEwPjs8VTBEMTI+Li48VTBEMjg+OzxVMEQyQT4uLjxVMEQzOT47LworICAgPFUwRDNEPjs8VTBENjA+Li48VTBENjM+Oy8KKyUgU0lOSEFMQS8KKyAgIDxVMEQ4NT4uLjxVMEQ5Nj47PFUwRDlBPi4uPFUwREIxPjs8VTBEQjM+Li48VTBEQkI+OzxVMERCRD47LworICAgPFUwREMwPi4uPFUwREM2PjsvCislIFRIQUkvCisgICA8VTBFMDE+Li48VTBFMkU+OzxVMEUzMD4uLjxVMEUzQT47PFUwRTQwPi4uPFUwRTQ1Pjs8VTBFNDc+Li48VTBFNEU+Oy8KKyUgTEFPLworICAgPFUwRTgxPi4uPFUwRTgyPjs8VTBFODQ+OzxVMEU4Nz4uLjxVMEU4OD47PFUwRThBPjs8VTBFOEQ+Oy8KKyAgIDxVMEU5ND4uLjxVMEU5Nz47PFUwRTk5Pi4uPFUwRTlGPjs8VTBFQTE+Li48VTBFQTM+OzxVMEVBNT47PFUwRUE3PjsvCisgICA8VTBFQUE+Li48VTBFQUI+OzxVMEVBRD4uLjxVMEVCMD47PFUwRUIyPi4uPFUwRUIzPjs8VTBFQkQ+Oy8KKyAgIDxVMEVDMD4uLjxVMEVDND47PFUwRUM2Pjs8VTBFREM+Li48VTBFREQ+Oy8KKyUgVElCRVRBTi8KKyAgIDxVMEYwMD47PFUwRjQwPi4uPFUwRjQ3Pjs8VTBGNDk+Li48VTBGNkM+OzxVMEY4OD4uLjxVMEY4Qj47LworJSBNWUFOTUFSLworICAgPFUxMDAwPi4uPFUxMDJBPjs8VTEwNTA+Li48VTEwNTU+OzxVMTA1QT4uLjxVMTA1RD47PFUxMDYxPjs8VTAxNjU+Oy8KKyAgIDxVMTA2Nj47PFUxMDZFPi4uPFUxMDcwPjs8VTEwNzU+Li48VTEwODE+OzxVMTA4RT47LworJSBHRU9SR0lBTi8KKyAgIDxVMTBBMD4uLjxVMTBDNT47PFUxMEQwPi4uPFUxMEZBPjs8VTEwRkM+Oy8KKyUgSEFOR1VMIEpBTU8vCisgICA8VTExMDA+Li48VTExNTk+OzxVMTE1Rj4uLjxVMTFBMj47PFUxMUE4Pi4uPFUxMUY5PjsvCislIEVUSElPUElDLworICAgPFUxMjAwPi4uPFUxMjQ4Pjs8VTEyNEE+Li48VTEyNEQ+Oy8KKyAgIDxVMTI1MD4uLjxVMTI1Nj47PFUxMjU4Pjs8VTEyNUE+Li48VTEyNUQ+OzxVMTI2MD4uLjxVMTI4OD47LworICAgPFUxMjhBPi4uPFUxMjhEPjs8VTEyOTA+Li48VTEyQjA+OzxVMTJCMj4uLjxVMTJCNT47LworICAgPFUxMkI4Pi4uPFUxMkJFPjs8VTEyQzA+OzxVMTJDMj4uLjxVMTJDNT47PFUxMkM4Pi4uPFUxMkQ2PjsvCisgICA8VTEyRDg+Li48VTEzMTA+Oy8KKyAgIDxVMTMxMj4uLjxVMTMxNT47PFUxMzE4Pi4uPFUxMzVBPjsvCislIEVUSElPUElDIEVYVEVOREVELworICAgPFUxMzgwPi4uPFUxMzhGPjsvCislIENIRVJPS0VFLworICAgPFUxM0EwPi4uPFUxM0Y0PjsvCislIFVOSUZJRUQgQ0FOQURJQU4gQUJPUklHSU5BTCBTWUxMQUJJQ1MvCisgICA8VTE0MDE+Li48VTE2NkM+OzxVMTY2Rj4uLjxVMTY3Nj47LworJSBPR0hBTS8KKyAgIDxVMTY4MT4uLjxVMTY5QT47LworJSBSVU5JQy8KKyAgIDxVMTZBMD4uLjxVMTZFQT47PFUxNkVFPi4uPFUxNkYwPjsvCislIFRBR0FMT0cvCisgICA8VTE3MDA+Li48VTE3MEM+OzxVMTcwRT4uLjxVMTcxMT47LworJSBIQU5VTk9PLworICAgPFUxNzIwPi4uPFUxNzMxPjsvCislIEJVSElELworICAgPFUxNzQwPi4uPFUxNzUxPjsvCislIFRBR0JBTldBLworICAgPFUxNzYwPi4uPFUxNzZDPjs8VTE3NkU+Li48VTE3NzA+Oy8KKyUgS0hNRVIvCisgICA8VTE3ODA+Li48VTE3QjM+OzxVMTdENz47PFUxN0RDPjsvCislIE1PTkdPTElBTi8KKyAgIDxVMTgyMD4uLjxVMTg3Nz47PFUxODgwPi4uPFUxOEE4Pjs8VTE4QUE+Oy8KKyUgTElNQlUvCisgICA8VTE5MDA+Li48VTE5MUM+OzxVMTk0Nj4uLjxVMTk0Rj47LworJSBUQUkgTEUvCisgICA8VTE5NTA+Li48VTE5NkQ+OzxVMTk3MD4uLjxVMTk3ND47LworJSBORVcgVEFJIExVRS8KKyAgIDxVMTk4MD4uLjxVMTlBOT47PFUxOUMxPi4uPFUxOUM3Pjs8VTE5RDA+Li48VTE5RDk+Oy8KKyUgQlVHSU5FU0UvCisgICA8VTFBMDA+Li48VTFBMTY+Oy8KKyUgQkFMSU5FU0UvCisgICA8VTFCMDU+Li48VTFCMzM+OzxVMUI0NT4uLjxVMUI0Qj47PFUxQjUwPi4uPFUxQjU5PjsvCislIFNVTkRBTkVTRS8KKyAgIDxVMUI4Mz4uLjxVMUJBMD47PFUxQkFFPi4uPFUxQkFGPjsvCislIExFUENIQS8KKyAgIDxVMUMwMD4uLjxVMUMyMz47PFUxQzREPi4uPFUxQzRGPjsvCislIE9MIENISUtJLworICAgPFUxQzVBPi4uPFUxQzdEPjsvCislIFBIT05FVElDIEVYVEVOU0lPTlMvCisgICA8VTFEMDA+Li48VTFEQkY+Oy8KKyUgTEFUSU4gRVhURU5ERUQgQURESVRJT05BTC8KKyAgIDxVMUUwMD4uLjxVMUU5Rj47PFUxRUEwPi4uPFUxRUZGPjsvCislIEdSRUVLIEVYVEVOREVELworICAgPFUxRjAwPi4uPFUxRjE1Pjs8VTFGMTg+Li48VTFGMUQ+OzxVMUYyMD4uLjxVMUY0NT47PFUxRjQ4Pi4uPFUxRjREPjsvCisgICA8VTFGNTA+Li48VTFGNTc+OzxVMUY1OT47PFUxRjVCPjs8VTFGNUQ+OzxVMUY1Rj4uLjxVMUY3RD47LworICAgPFUxRjgwPi4uPFUxRkI0Pjs8VTFGQjY+Li48VTFGQkM+OzxVMUZCRT47PFUxRkMyPi4uPFUxRkM0PjsvCisgICA8VTFGQzY+Li48VTFGQ0M+OzxVMUZEMD4uLjxVMUZEMz47PFUxRkQ2Pi4uPFUxRkRCPjs8VTFGRTA+Li48VTFGRUM+Oy8KKyAgIDxVMUZGMj4uLjxVMUZGND47PFUxRkY2Pi4uPFUxRkZDPjsvCislIFNVUEVSU0NSSVBUUyBBTkQgU1VCU0NSSVBUUy8KKyAgIDxVMjA3MT47PFUyMDdGPjs8VTIwOTA+Li48VTIwOTQ+Oy8KKyUgTEVUVEVSTElLRSBTWU1CT0xTLworICAgPFUyMTAyPjs8VTIxMDc+OzxVMjEwQT4uLjxVMjExMz47PFUyMTE1Pjs8VTIxMTk+Li48VTIxMUQ+OzxVMjEyND47LworICAgPFUyMTI2Pjs8VTIxMjg+Li48VTIxMkQ+OzxVMjEyRj4uLjxVMjEzOT47LworICAgPFUyMTNDPi4uPFUyMTNGPjs8VTIxNDU+Li48VTIxNDk+OzxVMjE0RT47LworJSBOVU1CRVIgRk9STVMvCisgICA8VTIxNjA+Li48VTIxODg+Oy8KKyUgRU5DTE9TRUQgQUxQSEFOVU1FUklDUy8KKyAgIDxVMjQ5Qz4uLjxVMjRFOT47LworJSBHTEFHT0xJVElDLworICAgPFUyQzAwPi4uPFUyQzJFPjs8VTJDMzA+Li48VTJDNUU+Oy8KKyUgTEFUSU4gRVhURU5ERUQtQy8KKyAgIDxVMkM2MD4uLjxVMkM2Rj47PFUyQzcxPi4uPFUyQzdEPjsvCislIENPUFRJQy8KKyAgIDxVMkM4MD4uLjxVMkNFND47LworJSBHRU9SR0lBTiBTVVBQTEVNRU5ULworICAgPFUyRDAwPi4uPFUyRDI1PjsvCislIFRJRklOQUdILworICAgPFUyRDMwPi4uPFUyRDY1Pjs8VTJENkY+Oy8KKyUgRVRISU9QSUMgRVhURU5ERUQvCisgICA8VTJEODA+Li48VTJEOTY+OzxVMkRBMD4uLjxVMkRBNj47PFUyREE4Pi4uPFUyREFFPjs8VTJEQjA+Li48VTJEQjY+Oy8KKyAgIDxVMkRCOD4uLjxVMkRCRT47PFUyREMwPi4uPFUyREM2Pjs8VTJEQzg+Li48VTJEQ0U+OzxVMkREMD4uLjxVMkRENj47LworICAgPFUyREQ4Pi4uPFUyRERFPjsvCislIENKSyBTWU1CT0xTIEFORCBQVU5DVFVBVElPTi8KKyAgIDxVMzAwNT4uLjxVMzAwNz47PFUzMDIxPi4uPFUzMDI5Pjs8VTMwMzE+Li48VTMwMzU+OzxVMzAzOD4uLjxVMzAzQz47LworJSBISVJBR0FOQS8KKyAgIDxVMzA0MT4uLjxVMzA5Nj47PFUzMDlEPi4uPFUzMDlGPjsvCislIEtBVEFLQU5BLworICAgPFUzMEExPi4uPFUzMEZBPjs8VTMwRkM+Li48VTMwRkY+Oy8KKyUgQk9QT01PRk8vCisgICA8VTMxMDU+Li48VTMxMkQ+Oy8KKyUgSEFOR1VMIENPTVBBVElCSUxJVFkgSkFNTy8KKyAgIDxVMzEzMT4uLjxVMzE4RT47LworJSBCT1BPTU9GTyBFWFRFTkRFRC8KKyAgIDxVMzFBMD4uLjxVMzFCNz47LworJSBLQVRBS0FOQSBQSE9ORVRJQyBFWFRFTlNJT05TLworICAgPFUzMUYwPi4uPFUzMUZGPjsvCislIENKSyBVTklGSUVEIElERU9HUkFQSFMgRVhURU5TSU9OLworICAgPFUzNDAwPi4uPFU0REI1PjsvCislIENKSyBVTklGSUVEIElERU9HUkFQSFMvCisgICA8VTRFMDA+Li48VTlGQkI+Oy8KKyUgWUkgU1lMTEFCTEVTLworICAgPFVBMDAwPi4uPFVBNDhDPjsvCislIFZBSSBTWUxMQUJMRVMvCisgICA8VUE1MDA+Li48VUE2MEI+OzxVQTYxMD4uLjxVQTYxRj47PFVBNjJBPi4uPFVBNjJCPjsvCislIENZUklMTElDIFNVUFBMRU1FTlQgMi8KKyAgIDxVQTY0MD4uLjxVQTY1Rj47PFVBNjYyPi4uPFVBNjZFPjs8VUE2ODA+Li48VUE2OTc+Oy8KKyUgTEFUSU4gRVhURU5ERUQtRC8KKyAgIDxVQTcxNz4uLjxVQTcxRj47PFVBNzIyPi4uPFVBNzhDPjs8VUE3RkI+Li48VUE3RkY+Oy8KKyUgU1lMT1RJIE5FR1JJLworICAgPFVBODAwPjs8VUE4MDE+OzxVQTgwMz4uLjxVQTgwNT47PFVBODA3Pi4uPFVBODBBPjs8VUE4MEM+Li48VUE4MjI+Oy8KKyUgUEhBR1MgUEEvCisgICA8VUE4NDA+Li48VUE4NzM+Oy8KKyUgU0FVUkFTSFRSQS8KKyAgIDxVQTg4Mj4uLjxVQThCMz47LworJSBLQVlBSCBMSS8KKyAgIDxVQTkwQT4uLjxVQTkyRD47LworJSBSRUpBTkcvCisgICA8VUE5MzA+Li48VUE5NDY+Oy8KKyUgQ0hBTS8KKyAgIDxVQUEwMD4uLjxVQUEyOD47PFVBQTQwPi4uPFVBQTQyPjs8VUFBNDQ+Li48VUFBNEI+Oy8KKyUgSEFOR1VMIFNZTExBQkxFUy8KKyAgIDxVQUMwMD4uLjxVRDdBMz47LworJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEhTLworICAgPFVGOTAwPi4uPFVGQTJEPjs8VUZBMzA+Li48VUZBNkE+Oy8KKyAgIDxVRkE3MD4uLjxVRkFEOT47LworJSBBTFBIQUJFVElDIFBSRVNFTlRBVElPTiBGT1JNUy8KKyAgIDxVRkIwMD4uLjxVRkIwNj47PFVGQjEzPi4uPFVGQjE3Pjs8VUZCMUQ+OzxVRkIxRj4uLjxVRkIyOD47LworICAgPFVGQjJBPi4uPFVGQjM2Pjs8VUZCMzg+Li48VUZCM0M+OzxVRkIzRT47PFVGQjQwPjs8VUZCNDE+OzxVRkI0Mz47LworICAgPFVGQjQ0Pjs8VUZCNDY+Li48VUZCNEY+Oy8KKyUgQVJBQklDIFBSRVNFTlRBVElPTiBGT1JNUy1BLworICAgPFVGQjUwPi4uPFVGQkIxPjs8VUZCRDM+Li48VUZEM0Q+OzxVRkQ1MD4uLjxVRkQ4Rj47PFVGRDkyPi4uPFVGREM3PjsvCisgICA8VUZERjA+Li48VUZERkI+Oy8KKyUgQVJBQklDIFBSRVNFTlRBVElPTiBGT1JNUy1CLworICAgPFVGRTcwPi4uPFVGRTc0Pjs8VUZFNzY+Li48VUZFRkM+Oy8KKyUgSEFMRldJRFRIIEFORCBGVUxMV0lEVEggRk9STVMvCisgICA8VUZGMjE+Li48VUZGM0E+OzxVRkY0MT4uLjxVRkY1QT47PFVGRjY2Pi4uPFVGRkJFPjs8VUZGQzI+Li48VUZGQzc+Oy8KKyAgIDxVRkZDQT4uLjxVRkZDRj47PFVGRkQyPi4uPFVGRkQ3Pjs8VUZGREE+Li48VUZGREM+Oy8KKyUgTElORUFSIEIgU1lMTEFCQVJZLworICAgPFUwMDAxMDAwMD4uLjxVMDAwMTAwMEI+OzxVMDAwMTAwMEQ+Li48VTAwMDEwMDI2PjsvCisgICA8VTAwMDEwMDI4Pi4uPFUwMDAxMDAzQT47PFUwMDAxMDAzQz4uLjxVMDAwMTAwM0Q+Oy8KKyAgIDxVMDAwMTAwM0Y+Li48VTAwMDEwMDREPjs8VTAwMDEwMDUwPi4uPFUwMDAxMDA1RD47LworJSBMSU5FQVIgQiBJREVPR1JBTVMvCisgICA8VTAwMDEwMDgwPi4uPFUwMDAxMDBGQT47LworJSBBTkNJRU5UIEdSRUVLIE5VTUJFUlMvCisgICA8VTAwMDEwMTQwPi4uPFUwMDAxMDE3ND47LworJSBMWUNJQU4vCisgICA8VTAwMDEwMjgwPi4uPFUwMDAxMDI5Qz47LworJSBDQVJJQU4vCisgICA8VTAwMDEwMkEwPi4uPFUwMDAxMDJEMD47LworJSBPTEQgSVRBTElDLworICAgPFUwMDAxMDMwMD4uLjxVMDAwMTAzMUU+Oy8KKyUgR09USElDLworICAgPFUwMDAxMDMzMD4uLjxVMDAwMTAzNEE+Oy8KKyUgVUdBUklUSUMvCisgICA8VTAwMDEwMzgwPi4uPFUwMDAxMDM5RD47LworJSBPTEQgUEVSU0lBTi8KKyAgIDxVMDAwMTAzQTA+Li48VTAwMDEwM0MzPjs8VTAwMDEwM0M4Pi4uPFUwMDAxMDNDRj47LworICAgPFUwMDAxMDNEMT4uLjxVMDAwMTAzRDU+Oy8KKyUgREVTRVJFVC8KKyAgIDxVMDAwMTA0MDA+Li48VTAwMDEwNDRGPjsvCislIFNIQVZJQU4vCisgICA8VTAwMDEwNDUwPi4uPFUwMDAxMDQ3Rj47LworJSBPU01BTllBLworICAgPFUwMDAxMDQ4MD4uLjxVMDAwMTA0OUQ+OzxVMDAwMTA0QTA+Li48VTAwMDEwNEE5PjsvCislIENZUFJJT1QgU1lMTEFCQVJZLworICAgPFUwMDAxMDgwMD4uLjxVMDAwMTA4MDU+OzxVMDAwMTA4MDg+OzxVMDAwMTA4MEE+Li48VTAwMDEwODM1PjsvCisgICA8VTAwMDEwODM3Pi4uPFUwMDAxMDgzOD47PFUwMDAxMDgzQz47PFUwMDAxMDgzRj47LworJSBQSE9FTklDSUFOLworICAgPFUwMDAxMDkwMD4uLjxVMDAwMTA5MTU+OzxVMDAwMTBBMDA+OzxVMDAwMTBBMTA+Li48VTAwMDEwQTEzPjsvCislIEtIQVJPU0hUSS8KKyAgIDxVMDAwMTBBMTU+Li48VTAwMDEwQTE3Pjs8VTAwMDEwQTE5Pi4uPFUwMDAxMEEzMz47LworJSBDVU5FSUZPUk0vCisgICA8VTAwMDEyMDAwPi4uPFUwMDAxMjM2RT47LworJSBDVU5FSUZPUk0gTlVNQkVSUyBBTkQgUE9OQ1RVQVRJT04vCisgICA8VTAwMDEyNDAwPi4uPFUwMDAxMjQ2Mj47LworJSBCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0xTLworJSBNQVRIRU1BVElDQUwgQUxQSEFOVU1FUklDIFNZTUJPTFMvCisgICA8VTAwMDFENDAwPi4uPFUwMDAxRDQ1ND47PFUwMDAxRDQ1Nj4uLjxVMDAwMUQ0OUM+Oy8KKyAgIDxVMDAwMUQ0OUU+Li48VTAwMDFENDlGPjs8VTAwMDFENEEyPjs8VTAwMDFENEE1Pi4uPFUwMDAxRDRBNj47LworICAgPFUwMDAxRDRBOT4uLjxVMDAwMUQ0QUM+OzxVMDAwMUQ0QUU+Li48VTAwMDFENEI5Pjs8VTAwMDFENEJCPjsvCisgICA8VTAwMDFENEJEPi4uPFUwMDAxRDRDMz47PFUwMDAxRDRDNT4uLjxVMDAwMUQ1MDU+Oy8KKyAgIDxVMDAwMUQ1MDc+Li48VTAwMDFENTBBPjs8VTAwMDFENTBEPi4uPFUwMDAxRDUxND47LworICAgPFUwMDAxRDUxNj4uLjxVMDAwMUQ1MUM+OzxVMDAwMUQ1MUU+Li48VTAwMDFENTM5PjsvCisgICA8VTAwMDFENTNCPi4uPFUwMDAxRDUzRT47PFUwMDAxRDU0MD4uLjxVMDAwMUQ1NDQ+OzxVMDAwMUQ1NDY+Oy8KKyAgIDxVMDAwMUQ1NEE+Li48VTAwMDFENTUwPjs8VTAwMDFENTUyPi4uPFUwMDAxRDZBNT47LworICAgPFUwMDAxRDZBOD4uLjxVMDAwMUQ2QzA+OzxVMDAwMUQ2QzI+Li48VTAwMDFENkRBPjsvCisgICA8VTAwMDFENkRDPi4uPFUwMDAxRDZGQT47PFUwMDAxRDZGQz4uLjxVMDAwMUQ3MTQ+Oy8KKyAgIDxVMDAwMUQ3MTY+Li48VTAwMDFENzM0Pjs8VTAwMDFENzM2Pi4uPFUwMDAxRDc0RT47LworICAgPFUwMDAxRDc1MD4uLjxVMDAwMUQ3NkU+OzxVMDAwMUQ3NzA+Li48VTAwMDFENzg4PjsvCisgICA8VTAwMDFENzhBPi4uPFUwMDAxRDdBOD47PFUwMDAxRDdBQT4uLjxVMDAwMUQ3QzI+Oy8KKyAgIDxVMDAwMUQ3QzQ+Li48VTAwMDFEN0NCPjs8VTAwMDFEN0NFPi4uPFUwMDAxRDdGRj47LworJSBDSksgVU5JRklFRCBJREVPR1JBUEhTIEVYVEVOU0lPTi8KKyAgIDxVMDAwMjAwMDA+Li48VTAwMDJBNkQ2PjsvCislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSFMgU1VQUExFTUVOVC8KKyAgIDxVMDAwMkY4MDA+Li48VTAwMDJGQTFEPjsvCislIFRoZSBub24tQVNDSUkgbnVtYmVyIGNoYXJhY3RlcnMgYXJlIGluY2x1ZGVkIGhlcmUgYmVjYXVzZSBJU08gQyA5OSAgICAvCislIGZvcmJpZHMgdXMgdG8gY2xhc3NpZnkgdGhlbSBhcyBkaWdpdHM7IGhvd2V2ZXIsIHRoZXkgYmVoYXZlIG1vcmUgbGlrZSAvCislIGFscGhhbnVtZXJpYyB0aGFuIGxpa2UgcHVuY3R1YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvCislIEFSQUJJQy8KKyAgIDxVMDY2MD4uLjxVMDY2OT47PFUwNkYwPi4uPFUwNkY5PjsvCislIERFVkFOQUdBUkkvCisgICA8VTA5NjY+Li48VTA5NkY+Oy8KKyUgQkVOR0FMSS8KKyAgIDxVMDlFNj4uLjxVMDlFRj47LworJSBHVVJNVUtISS8KKyAgIDxVMEE2Nj4uLjxVMEE2Rj47LworJSBHVUpBUkFUSS8KKyAgIDxVMEFFNj4uLjxVMEFFRj47LworJSBPUklZQS8KKyAgIDxVMEI2Nj4uLjxVMEI2Rj47LworJSBUQU1JTC8KKyAgIDxVMEJFNj4uLjxVMEJFRj47LworJSBURUxVR1UvCisgICA8VTBDNjY+Li48VTBDNkY+OzxVMEM3OD4uLjxVMEM3Rj47LworJSBLQU5OQURBLworICAgPFUwQ0U2Pi4uPFUwQ0VGPjsvCislIE1BTEFZQUxBTS8KKyAgIDxVMEQ2Nj4uLjxVMEQ3NT47PFUwRDc5Pi4uPFUwRDdGPjsvCislIFRIQUkvCisgICA8VTBFNTA+Li48VTBFNTk+Oy8KKyUgTEFPLworICAgPFUwRUQwPi4uPFUwRUQ5PjsvCislIFRJQkVUQU4vCisgICA8VTBGMjA+Li48VTBGMjk+Oy8KKyUgTVlBTk1BUi8KKyAgIDxVMTA0MD4uLjxVMTA0OT47LworJSBLSE1FUi8KKyAgIDxVMTdFMD4uLjxVMTdFOT47LworJSBNT05HT0xJQU4vCisgICA8VTE4MTA+Li48VTE4MTk+Oy8KKyUgU1VOREFORVNFLworICAgPFUxQkIwPi4uPFUxQkI5PjsvCislIExFUENIQS8KKyAgIDxVMUM0MD4uLjxVMUM0OT47LworJSBPTCBDSElLSS8KKyAgIDxVMUM1MD4uLjxVMUM1OT47LworJSBWQUkvCisgICA8VUE2MjA+Li48VUE2Mjk+Oy8KKyUgU0FVUkFTSFRSQS8KKyAgIDxVQThEMD4uLjxVQThEOT47LworJSBLQVlBSCBMSS8KKyAgIDxVQTkwMD4uLjxVQTkwOT47LworJSBDSEFNLworICAgPFVBQTUwPi4uPFVBQTU5PjsvCislIEhBTEZXSURUSCBBTkQgRlVMTFdJRFRIIEZPUk1TLworICAgPFVGRjEwPi4uPFVGRjE5PgorCislIFRoZSAiZGlnaXQiIGNsYXNzIG11c3Qgb25seSBjb250YWluIHRoZSBCQVNJQyBMQVRJTiBkaWdpdHMsIHNheXMgSVNPIEMgOTkKKyUgKHNlY3Rpb25zIDcuMjUuMi4xLjUgYW5kIDUuMi4xKS4KK2RpZ2l0IC8KKyAgIDxVMDAzMD4uLjxVMDAzOT4KKworJSBUaGUgIm91dGRpZ2l0IiBpbmZvcm1hdGlvbiBpcyBieSBkZWZhdWx0ICIwIiB0byAiOSIuICBXZSBkb24ndCBoYXZlIHRvCislIHByb3ZpZGUgaXQgaGVyZSBzaW5jZSBsb2NhbGVkZWYgd2lsbCBmaWxsIGluIHRoZSBiaXRzIGFuZCBpdCB3b3VsZAorJSBwcmV2ZW50IGxvY2FsZXMgY29weS1pbmcgdGhpcyBmaWxlIGRlZmluZSB0aGVpciBvd24gdmFsdWVzLgorJSBvdXRkaWdpdCA8VTAwMzA+Li48VTAwMzk+CisKK3NwYWNlIC8KKyUgSVNPL0lFQyA2NDI5LworICAgPFUwMDA5Pi4uPFUwMDBEPjsvCislIEJBU0lDIExBVElOLworICAgPFUwMDIwPjsvCislIE9HSEFNLworICAgPFUxNjgwPjsvCislIE1PTkdPTC8KKyAgIDxVMTgwRT47LworJSBHRU5FUkFMIFBVTkNUVUFUSU9OLworICAgPFUyMDAwPi4uPFUyMDA2Pjs8VTIwMDg+Li48VTIwMEE+OzxVMjAyOD47PFUyMDI5Pjs8VTIwNUY+Oy8KKyUgQ0pLIFNZTUJPTFMgQU5EIFBVTkNUVUFUSU9OLCBISVJBR0FOQS8KKyAgIDxVMzAwMD4KKworY250cmwgLworICAgPFUwMDAwPi4uPFUwMDFGPjs8VTAwN0Y+Li48VTAwOUY+Oy8KKyUgVHJlYXQgdGhlIExpbmUvUGFyYWdyYXBoIFNlcGFyYXRvcnMgYXMgY29udHJvbCBjaGFyYWN0ZXJzLCBsaWtlIExpbmUgRmVlZC4vCisgICA8VTIwMjg+OzxVMjAyOT4KKworcHVuY3QgLworICAgPFUwMDIxPi4uPFUwMDJGPjs8VTAwM0E+Li48VTAwNDA+OzxVMDA1Qj4uLjxVMDA2MD47PFUwMDdCPi4uPFUwMDdFPjsvCisgICA8VTAwQTA+Li48VTAwQTk+OzxVMDBBQj4uLjxVMDBCND47PFUwMEI2Pi4uPFUwMEI5Pjs8VTAwQkI+Li48VTAwQkY+Oy8KKyAgIDxVMDBENz47PFUwMEY3Pjs8VTAyQzI+Li48VTAyQzU+OzxVMDJEMj4uLjxVMDJERj47PFUwMkU1Pi4uPFUwMkVEPjsvCisgICA8VTAyRUY+Li48VTAzNDQ+OzxVMDM0Nj4uLjxVMDM2Rj47PFUwMzc0Pi4uPFUwMzc1Pjs8VTAzN0U+Oy8KKyAgIDxVMDM4ND4uLjxVMDM4NT47PFUwMzg3Pjs8VTAzRjY+OzxVMDQ4Mj4uLjxVMDQ4Nj47PFUwNDg4Pi4uPFUwNDg5PjsvCisgICA8VTA1NUE+Li48VTA1NUY+OzxVMDU4OT4uLjxVMDU4QT47PFUwNTkxPi4uPFUwNUM3Pjs8VTA1RjM+Li48VTA1RjQ+Oy8KKyAgIDxVMDYwMD4uLjxVMDYwMz47PFUwNjBCPi4uPFUwNjFCPjs8VTA2MUU+Li48VTA2MUY+Oy8KKyAgIDxVMDY0Qj4uLjxVMDY1RT47PFUwNjZBPi4uPFUwNjZEPjs8VTA2NzA+OzxVMDZEND47PFUwNkQ2Pi4uPFUwNkU0PjsvCisgICA8VTA2RTc+Li48VTA2RUQ+OzxVMDZGRD4uLjxVMDZGRT47PFUwNzAwPi4uPFUwNzBEPjs8VTA3MEY+OzxVMDcxMT47LworICAgPFUwNzMwPi4uPFUwNzRBPjs8VTA3QTY+Li48VTA3QjA+OzxVMDdFQj4uLjxVMDdGMz47PFUwN0Y2Pi4uPFUwN0Y5PjsvCisgICA8VTA5MDE+Li48VTA5MDM+OzxVMDkzQz47PFUwOTNFPi4uPFUwOTREPjs8VTA5NTE+Li48VTA5NTQ+Oy8KKyAgIDxVMDk2Mj4uLjxVMDk2NT47PFUwOTcyPjs8VTA5ODE+Li48VTA5ODM+OzxVMDlCQz47PFUwOUJFPi4uPFUwOUM0PjsvCisgICA8VTA5Qzc+Li48VTA5Qzg+OzxVMDlDQj4uLjxVMDlDRD47PFUwOUQ3Pjs8VTA5RTI+Li48VTA5RTM+Oy8KKyAgIDxVMDlGMj4uLjxVMDlGQT47PFUwQTAxPi4uPFUwQTAzPjs8VTBBM0M+OzxVMEEzRT4uLjxVMEE0Mj47LworICAgPFUwQTQ3Pi4uPFUwQTQ4Pjs8VTBBNEI+Li48VTBBNEQ+OzxVMEE1MT47PFUwQTcwPi4uPFUwQTcxPjsvCisgICA8VTBBNzU+OzxVMEE4MT4uLjxVMEE4Mz47LworICAgPFUwQUJDPjs8VTBBQkU+Li48VTBBQzU+OzxVMEFDNz4uLjxVMEFDOT47PFUwQUNCPi4uPFUwQUNEPjsvCisgICA8VTBBRTI+Li48VTBBRTM+OzxVMEFGMT47PFUwQjAxPi4uPFUwQjAzPjs8VTBCM0M+OzxVMEIzRT4uLjxVMEI0ND47LworICAgPFUwQjQ3Pi4uPFUwQjQ4Pjs8VTBCNEI+Li48VTBCNEQ+OzxVMEI1Nj4uLjxVMEI1Nz47PFUwQjcwPjs8VTBCODI+Oy8KKyAgIDxVMEJCRT4uLjxVMEJDMj47PFUwQkM2Pi4uPFUwQkM4Pjs8VTBCQ0E+Li48VTBCQ0Q+OzxVMEJEMD47PFUwQkQ3PjsvCisgICA8VTBCRjA+Li48VTBCRkE+OzxVMEMwMT4uLjxVMEMwMz47PFUwQzNFPi4uPFUwQzQ0Pjs8VTBDNDY+Li48VTBDNDg+Oy8KKyAgIDxVMEM0QT4uLjxVMEM0RD47PFUwQzU1Pi4uPFUwQzU2Pjs8VTBDODI+Li48VTBDODM+OzxVMENCQz47LworICAgPFUwQ0JFPi4uPFUwQ0M0Pjs8VTBDQzY+Li48VTBDQzg+OzxVMENDQT4uLjxVMENDRD47PFUwQ0Q1Pi4uPFUwQ0Q2PjsvCisgICA8VTBDRTI+Li48VTBDRTM+OzxVMENGMT4uLjxVMENGMj47PFUwRDAyPi4uPFUwRDAzPjs8VTBEM0U+Li48VTBENDQ+Oy8KKyAgIDxVMEQ0Nj4uLjxVMEQ0OD47PFUwRDRBPi4uPFUwRDREPjs8VTBENTc+OzxVMEQ4Mj4uLjxVMEQ4Mz47PFUwRENBPjsvCisgICA8VTBEQ0Y+Li48VTBERDQ+OzxVMERENj47PFUwREQ4Pi4uPFUwRERGPjs8VTBERjI+Li48VTBERjQ+OzxVMEUyRj47LworICAgPFUwRTNGPjs8VTBFNDY+OzxVMEU0Rj47PFUwRTVBPi4uPFUwRTVCPjs8VTBFQjE+OzxVMEVCND4uLjxVMEVCOT47LworICAgPFUwRUJCPi4uPFUwRUJDPjs8VTBFQzg+Li48VTBFQ0Q+OzxVMEYwMT4uLjxVMEYxRj47PFUwRjJBPi4uPFUwRjNGPjsvCisgICA8VTBGNzE+Li48VTBGODc+OzxVMEY5MD4uLjxVMEY5Nz47PFUwRjk5Pi4uPFUwRkJDPjs8VTBGQkU+Li48VTBGQ0M+Oy8KKyAgIDxVMEZDRT4uLjxVMEZEND47PFUxMDJCPi4uPFUxMDNGPjs8VTEwNEE+Li48VTEwNEY+OzxVMTA1Nj4uLjxVMTA1OT47LworICAgPFUxMDVFPi4uPFUxMDYwPjs8VTEwNjI+Li48VTEwNjQ+OzxVMTA2Nz4uLjxVMTA2RD47PFUxMDcxPi4uPFUxMDc0PjsvCisgICA8VTEwODI+Li48VTEwOEQ+OzxVMTA4Rj4uLjxVMTA5OT47PFUxMDlFPjs8VTEwOUY+Oy8KKyAgIDxVMTBGQj47PFUxMzVGPi4uPFUxMzdDPjs8VTEzOTA+Li48VTEzOTk+Oy8KKyAgIDxVMTY2RD4uLjxVMTY2RT47PFUxNjlCPi4uPFUxNjlDPjs8VTE2RUI+Li48VTE2RUQ+OzxVMTcxMj4uLjxVMTcxND47LworICAgPFUxNzMyPi4uPFUxNzM2Pjs8VTE3NTI+Li48VTE3NTM+OzxVMTc3Mj4uLjxVMTc3Mz47PFUxN0I0Pi4uPFUxN0Q2PjsvCisgICA8VTE3RDg+Li48VTE3REI+OzxVMTdERD47PFUxN0YwPi4uPFUxN0Y5Pjs8VTE4MDA+Li48VTE4MEQ+OzxVMThBOT47LworICAgPFUxOTIwPi4uPFUxOTJCPjs8VTE5MzA+Li48VTE5M0I+OzxVMTk0MD47PFUxOTQ0Pi4uPFUxOTQ1PjsvCisgICA8VTE5QjA+Li48VTE5QzA+OzxVMTlDOD4uLjxVMTlDOT47PFUxOURFPi4uPFUxOUZGPjs8VTFBMTc+Li48VTFBMUI+Oy8KKyAgIDxVMUExRT4uLjxVMUExRj47PFUxQjAwPi4uPFUxQjA0Pjs8VTFCMzQ+Li48VTFCNDQ+OzxVMUI1QT4uLjxVMUI3Qz47LworICAgPFUxQjgwPi4uPFUxQjgyPjs8VTFCQTE+Li48VTFCQUE+OzxVMUMyND4uLjxVMUMzNz47PFUxQzNCPi4uPFUxQzNGPjsvCisgICA8VTFDN0U+Li48VTFDN0Y+Oy8KKyAgIDxVMURDMD4uLjxVMURFNj47PFUxREZFPi4uPFUxREZGPjs8VTFGQkQ+OzxVMUZCRj4uLjxVMUZDMT47LworICAgPFUxRkNEPi4uPFUxRkNGPjs8VTFGREQ+Li48VTFGREY+OzxVMUZFRD4uLjxVMUZFRj47PFUxRkZEPi4uPFUxRkZFPjsvCisgICA8VTIwMDc+OzxVMjAwQj4uLjxVMjAyNz47PFUyMDJBPi4uPFUyMDVFPjs8VTIwNjA+Li48VTIwNjQ+Oy8KKyAgIDxVMjA2QT4uLjxVMjA3MD47PFUyMDc0Pi4uPFUyMDdFPjs8VTIwODA+Li48VTIwOEU+OzxVMjBBMD4uLjxVMjBCNT47LworICAgPFUyMEQwPi4uPFUyMEYwPjs8VTIxMDA+Li48VTIxMDE+OzxVMjEwMz4uLjxVMjEwNj47PFUyMTA4Pi4uPFUyMTA5PjsvCisgICA8VTIxMTQ+OzxVMjExNj4uLjxVMjExOD47PFUyMTFFPi4uPFUyMTIzPjs8VTIxMjU+OzxVMjEyNz47PFUyMTJFPjsvCisgICA8VTIxM0E+Li48VTIxM0I+OzxVMjE0MD4uLjxVMjE0ND47PFUyMTRBPi4uPFUyMTREPjs8VTIxNTM+Li48VTIxNUY+Oy8KKyAgIDxVMjE5MD4uLjxVMjNFNz47PFUyNDAwPi4uPFUyNDI2Pjs8VTI0NDA+Li48VTI0NEE+OzxVMjQ2MD4uLjxVMjQ5Qj47LworICAgPFUyNEVBPi4uPFUyNjlEPjs8VTI2QTA+Li48VTI2QzM+OzxVMjcwMT4uLjxVMjcwND47PFUyNzA2Pi4uPFUyNzA5PjsvCisgICA8VTI3MEM+Li48VTI3Mjc+OzxVMjcyOT4uLjxVMjc0Qj47PFUyNzREPjs8VTI3NEY+Li48VTI3NTI+OzxVMjc1Nj47LworICAgPFUyNzU4Pi4uPFUyNzVFPjs8VTI3NjE+Li48VTI3OTQ+OzxVMjc5OD4uLjxVMjdBRj47PFUyN0IxPi4uPFUyN0JFPjsvCisgICA8VTI3QzA+Li48VTI3Q0E+OzxVMjdDQz47PFUyN0QwPi4uPFUyN0VGPjs8VTI3RjA+Li48VTJCNEM+Oy8KKyAgIDxVMkI1MD4uLjxVMkI1ND47PFUyREUwPi4uPFUyREZGPjsvCisgICA8VTJDRTU+Li48VTJDRUE+OzxVMkNGOT4uLjxVMkNGRj47PFUyRTAwPi4uPFUyRTMwPjsvCisgICA8VTJFODA+Li48VTJFOTk+OzxVMkU5Qj4uLjxVMkVGMz47PFUyRjAwPi4uPFUyRkQ1Pjs8VTJGRjA+Li48VTJGRkI+Oy8KKyAgIDxVMzAwMT4uLjxVMzAwND47PFUzMDA4Pi4uPFUzMDIwPjs8VTMwMkE+Li48VTMwMzA+OzxVMzAzNj4uLjxVMzAzNz47LworICAgPFUzMDNEPi4uPFUzMDNGPjs8VTMwOTk+Li48VTMwOUM+OzxVMzBBMD47PFUzMEZCPjs8VTMxOTA+Li48VTMxOUY+Oy8KKyAgIDxVMzFDMD4uLjxVMzFDRj47PFUzMjAwPi4uPFUzMjFFPjs8VTMyMjA+Li48VTMyNDM+OzxVMzI1MD4uLjxVMzJGRT47LworICAgPFUzMzAwPi4uPFUzM0ZGPjs8VTREQzA+Li48VTRERkY+OzxVQTQ5MD4uLjxVQTRDNj47PFVBNjBDPi4uPFVBNjBGPjsvCisgICA8VUE2NkY+Li48VUE2NzM+OzxVQTY3Qz4uLjxVQTY3Rj47PFVBNzAwPi4uPFVBNzE2PjsvCisgICA8VUE3MjA+Li48VUE3MjE+OzxVQTgwMj47PFVBODA2Pjs8VUE4MEI+OzxVQTgyMz4uLjxVQTgyQj47LworICAgPFVBODc0Pi4uPFVBODc3Pjs8VUE4ODA+OzxVQTg4MT47PFVBOEI0Pi4uPFVBOEM0Pjs8VUE4Q0U+Li48VUE4Q0Y+Oy8KKyAgIDxVQTkyRT4uLjxVQTkyRj47PFVBOTQ3Pi4uPFVBOTUzPjs8VUE5NUY+OzxVQUEyOT4uLjxVQUEzNj47PFVBQTQzPjsvCisgICA8VUFBNEM+Li48VUFBNEQ+OzxVQUE1Qz4uLjxVQUE1Rj47LworICAgPFVFMDAwPi4uPFVGOEZGPjs8VUZCMUU+OzxVRkIyOT47PFVGRDNFPi4uPFVGRDNGPjsvCisgICA8VUZERkM+Li48VUZERkQ+OzxVRkUwMD4uLjxVRkUxOT47PFVGRTIwPi4uPFVGRTI2Pjs8VUZFMzA+Li48VUZFNTI+Oy8KKyAgIDxVRkU1ND4uLjxVRkU2Nj47PFVGRTY4Pi4uPFVGRTZCPjs8VUZFRkY+OzxVRkYwMT4uLjxVRkYwRj47LworICAgPFVGRjFBPi4uPFVGRjIwPjs8VUZGM0I+Li48VUZGNDA+OzxVRkY1Qj4uLjxVRkY2NT47PFVGRkUwPi4uPFVGRkU2PjsvCisgICA8VUZGRTg+Li48VUZGRUU+OzxVRkZGOT4uLjxVRkZGRD47PFUwMDAxMDEwMD4uLjxVMDAwMTAxMDI+Oy8KKyAgIDxVMDAwMTAxMDc+Li48VTAwMDEwMTMzPjs8VTAwMDEwMTM3Pi4uPFUwMDAxMDEzRj47LworICAgPFUwMDAxMDE3NT4uLjxVMDAwMTAxOEE+OzxVMDAwMTAzMjA+Li48VTAwMDEwMzIzPjs8VTAwMDEwMzlGPjsvCisgICA8VTAwMDEwM0QwPjs8VTAwMDEwOTE2Pi4uPFUwMDAxMDkxOT47PFUwMDAxMDkxRj47LworICAgPFUwMDAxMEEwMT4uLjxVMDAwMTBBMDM+OzxVMDAwMTBBMDU+Li48VTAwMDEwQTA2PjsvCisgICA8VTAwMDEwQTBDPi4uPFUwMDAxMEEwRj47PFUwMDAxMEEzOD4uLjxVMDAwMTBBM0E+Oy8KKyAgIDxVMDAwMTBBM0Y+Li48VTAwMDEwQTQ3Pjs8VTAwMDEwQTUwPi4uPFUwMDAxMEE1OD47LworICAgPFUwMDAxMjQ3MD4uLjxVMDAwMTI0NzM+OzxVMDAwMUQwMDA+Li48VTAwMDFEMEY1PjsvCisgICA8VTAwMDFEMTAwPi4uPFUwMDAxRDEyNj47PFUwMDAxRDEyOT4uLjxVMDAwMUQxREQ+Oy8KKyAgIDxVMDAwMUQyMDA+Li48VTAwMDFEMjQ1Pjs8VTAwMDFEMzAwPi4uPFUwMDAxRDM1Nj47LworICAgPFUwMDAxRDM2MD4uLjxVMDAwMUQzNzE+OzxVMDAwMUQ2QzE+OzxVMDAwMUQ2REI+OzxVMDAwMUQ2RkI+OzxVMDAwMUQ3MTU+Oy8KKyAgIDxVMDAwMUQ3MzU+OzxVMDAwMUQ3NEY+OzxVMDAwMUQ3NkY+OzxVMDAwMUQ3ODk+OzxVMDAwMUQ3QTk+OzxVMDAwMUQ3QzM+Oy8KKyAgIDxVMDAwRTAwMDE+OzxVMDAwRTAwMjA+Li48VTAwMEUwMDdGPjs8VTAwMEUwMTAwPi4uPFUwMDBFMDFFRj47LworICAgPFUwMDBGMDAwMD4uLjxVMDAwRkZGRkQ+OzxVMDAxMDAwMDA+Li48VTAwMTBGRkZEPgorCitncmFwaCAvCisgICA8VTAwMjE+Li48VTAwN0U+OzxVMDBBMD4uLjxVMDM3Nz47PFUwMzdBPi4uPFUwMzdFPjsvCisgICA8VTAzODQ+Li48VTAzOEE+OzxVMDM4Qz47PFUwMzhFPi4uPFUwM0ExPjs8VTAzQTM+Li48VTA0ODY+Oy8KKyAgIDxVMDQ4OD4uLjxVMDUyMz47PFUwNTMxPi4uPFUwNTU2Pjs8VTA1NTk+Li48VTA1NUY+Oy8KKyAgIDxVMDU2MT4uLjxVMDU4Nz47PFUwNTg5Pi4uPFUwNThBPjs8VTA1OTE+Li48VTA1Qzc+OzxVMDVEMD4uLjxVMDVFQT47LworICAgPFUwNUYwPi4uPFUwNUY0Pjs8VTA2MDA+Li48VTA2MDM+OzxVMDYwNj4uLjxVMDYxQj47LworICAgPFUwNjFFPi4uPFUwNjFGPjs8VTA2MjE+Li48VTA2NUU+OzxVMDY2MD4uLjxVMDcwRD47LworICAgPFUwNzBGPi4uPFUwNzRBPjs8VTA3NEQ+Li48VTA3QjE+OzxVMDdDMD4uLjxVMDdGQT47LworICAgPFUwOTAxPi4uPFUwOTM5Pjs8VTA5M0M+Li48VTA5NEQ+OzxVMDk1MD4uLjxVMDk1ND47PFUwOTU4Pi4uPFUwOTcyPjsvCisgICA8VTA5N0I+Li48VTA5N0Y+OzxVMDk4MT4uLjxVMDk4Mz47PFUwOTg1Pi4uPFUwOThDPjs8VTA5OEY+Li48VTA5OTA+Oy8KKyAgIDxVMDk5Mz4uLjxVMDlBOD47PFUwOUFBPi4uPFUwOUIwPjs8VTA5QjI+OzxVMDlCNj4uLjxVMDlCOT47LworICAgPFUwOUJDPi4uPFUwOUM0Pjs8VTA5Qzc+Li48VTA5Qzg+OzxVMDlDQj4uLjxVMDlDRT47PFUwOUQ3PjsvCisgICA8VTA5REM+Li48VTA5REQ+OzxVMDlERj4uLjxVMDlFMz47PFUwOUU2Pi4uPFUwOUZBPjs8VTBBMDE+Li48VTBBMDM+Oy8KKyAgIDxVMEEwNT4uLjxVMEEwQT47PFUwQTBGPi4uPFUwQTEwPjs8VTBBMTM+Li48VTBBMjg+OzxVMEEyQT4uLjxVMEEzMD47LworICAgPFUwQTMyPi4uPFUwQTMzPjs8VTBBMzU+Li48VTBBMzY+OzxVMEEzOD4uLjxVMEEzOT47PFUwQTNDPjsvCisgICA8VTBBM0U+Li48VTBBNDI+OzxVMEE0Nz4uLjxVMEE0OD47PFUwQTRCPi4uPFUwQTREPjs8VTBBNTE+Oy8KKyAgIDxVMEE1OT4uLjxVMEE1Qz47LworICAgPFUwQTVFPjs8VTBBNjY+Li48VTBBNzU+OzxVMEE4MT4uLjxVMEE4Mz47PFUwQTg1Pi4uPFUwQThEPjsvCisgICA8VTBBOEY+Li48VTBBOTE+OzxVMEE5Mz4uLjxVMEFBOD47PFUwQUFBPi4uPFUwQUIwPjs8VTBBQjI+Li48VTBBQjM+Oy8KKyAgIDxVMEFCNT4uLjxVMEFCOT47PFUwQUJDPi4uPFUwQUM1Pjs8VTBBQzc+Li48VTBBQzk+OzxVMEFDQj4uLjxVMEFDRD47LworICAgPFUwQUQwPjs8VTBBRTA+Li48VTBBRTM+OzxVMEFFNj4uLjxVMEFFRj47PFUwQUYxPjs8VTBCMDE+Li48VTBCMDM+Oy8KKyAgIDxVMEIwNT4uLjxVMEIwQz47PFUwQjBGPi4uPFUwQjEwPjs8VTBCMTM+Li48VTBCMjg+OzxVMEIyQT4uLjxVMEIzMD47LworICAgPFUwQjMyPi4uPFUwQjMzPjs8VTBCMzU+Li48VTBCMzk+OzxVMEIzQz4uLjxVMEI0ND47PFUwQjQ3Pi4uPFUwQjQ4PjsvCisgICA8VTBCNEI+Li48VTBCNEQ+OzxVMEI1Nj4uLjxVMEI1Nz47PFUwQjVDPi4uPFUwQjVEPjs8VTBCNUY+Li48VTBCNjM+Oy8KKyAgIDxVMEI2Nj4uLjxVMEI3MT47PFUwQjgyPi4uPFUwQjgzPjs8VTBCODU+Li48VTBCOEE+OzxVMEI4RT4uLjxVMEI5MD47LworICAgPFUwQjkyPi4uPFUwQjk1Pjs8VTBCOTk+Li48VTBCOUE+OzxVMEI5Qz47PFUwQjlFPi4uPFUwQjlGPjsvCisgICA8VTBCQTM+Li48VTBCQTQ+OzxVMEJBOD4uLjxVMEJBQT47PFUwQkFFPi4uPFUwQkI5Pjs8VTBCQkU+Li48VTBCQzI+Oy8KKyAgIDxVMEJDNj4uLjxVMEJDOD47PFUwQkNBPi4uPFUwQkNEPjs8VTBCRDA+OzxVMEJENz47PFUwQkU2Pi4uPFUwQkZBPjsvCisgICA8VTBDMDE+Li48VTBDMDM+OzxVMEMwNT4uLjxVMEMwQz47PFUwQzBFPi4uPFUwQzEwPjs8VTBDMTI+Li48VTBDMjg+Oy8KKyAgIDxVMEMyQT4uLjxVMEMzMz47PFUwQzM1Pi4uPFUwQzM5Pjs8VTBDM0Q+Li48VTBDNDQ+OzxVMEM0Nj4uLjxVMEM0OD47LworICAgPFUwQzRBPi4uPFUwQzREPjs8VTBDNTU+Li48VTBDNTY+OzxVMEM1OD4uLjxVMEM1OT47PFUwQzYwPi4uPFUwQzYzPjsvCisgICA8VTBDNjY+Li48VTBDNkY+OzxVMEM3OD4uLjxVMEM3Rj47LworICAgPFUwQzgyPi4uPFUwQzgzPjs8VTBDODU+Li48VTBDOEM+OzxVMEM4RT4uLjxVMEM5MD47PFUwQzkyPi4uPFUwQ0E4PjsvCisgICA8VTBDQUE+Li48VTBDQjM+OzxVMENCNT4uLjxVMENCOT47PFUwQ0JDPi4uPFUwQ0M0Pjs8VTBDQzY+Li48VTBDQzg+Oy8KKyAgIDxVMENDQT4uLjxVMENDRD47PFUwQ0Q1Pi4uPFUwQ0Q2Pjs8VTBDREU+OzxVMENFMD4uLjxVMENFMz47LworICAgPFUwQ0U2Pi4uPFUwQ0VGPjs8VTBDRjE+Li48VTBDRjI+OzxVMEQwMj4uLjxVMEQwMz47PFUwRDA1Pi4uPFUwRDBDPjsvCisgICA8VTBEMEU+Li48VTBEMTA+OzxVMEQxMj4uLjxVMEQyOD47PFUwRDJBPi4uPFUwRDM5Pjs8VTBEM0Q+Li48VTBENDQ+Oy8KKyAgIDxVMEQ0Nj4uLjxVMEQ0OD47PFUwRDRBPi4uPFUwRDREPjs8VTBENTc+OzxVMEQ2MD4uLjxVMEQ2Mz47LworICAgPFUwRDY2Pi4uPFUwRDc1Pjs8VTBENzk+Li48VTBEN0Y+OzxVMEQ4Mj4uLjxVMEQ4Mz47PFUwRDg1Pi4uPFUwRDk2PjsvCisgICA8VTBEOUE+Li48VTBEQjE+Oy8KKyAgIDxVMERCMz4uLjxVMERCQj47PFUwREJEPjs8VTBEQzA+Li48VTBEQzY+OzxVMERDQT47PFUwRENGPi4uPFUwREQ0PjsvCisgICA8VTBERDY+OzxVMEREOD4uLjxVMERERj47PFUwREYyPi4uPFUwREY0Pjs8VTBFMDE+Li48VTBFM0E+Oy8KKyAgIDxVMEUzRj4uLjxVMEU1Qj47PFUwRTgxPi4uPFUwRTgyPjs8VTBFODQ+OzxVMEU4Nz4uLjxVMEU4OD47PFUwRThBPjsvCisgICA8VTBFOEQ+OzxVMEU5ND4uLjxVMEU5Nz47PFUwRTk5Pi4uPFUwRTlGPjs8VTBFQTE+Li48VTBFQTM+OzxVMEVBNT47LworICAgPFUwRUE3Pjs8VTBFQUE+Li48VTBFQUI+OzxVMEVBRD4uLjxVMEVCOT47PFUwRUJCPi4uPFUwRUJEPjsvCisgICA8VTBFQzA+Li48VTBFQzQ+OzxVMEVDNj47PFUwRUM4Pi4uPFUwRUNEPjs8VTBFRDA+Li48VTBFRDk+Oy8KKyAgIDxVMEVEQz4uLjxVMEVERD47PFUwRjAwPi4uPFUwRjQ3Pjs8VTBGNDk+Li48VTBGNkM+OzxVMEY3MT4uLjxVMEY4Qj47LworICAgPFUwRjkwPi4uPFUwRjk3Pjs8VTBGOTk+Li48VTBGQkM+OzxVMEZCRT4uLjxVMEZDQz47PFUwRkNFPi4uPFUwRkQ0PjsvCisgICA8VTEwMDA+Li48VTEwMkE+OzxVMTAyQj4uLjxVMTAzRj47PFUxMDQwPi4uPFUxMDk5Pjs8VTEwOUU+OzxVMTA5Rj47LworICAgPFUxMEEwPi4uPFUxMEM1Pjs8VTEwRDA+Li48VTEwRkM+Oy8KKyAgIDxVMTEwMD4uLjxVMTE1OT47PFUxMTVGPi4uPFUxMUEyPjs8VTExQTg+Li48VTExRjk+OzxVMTIwMD4uLjxVMTI0OD47LworICAgPFUxMjRBPi4uPFUxMjREPjs8VTEyNTA+Li48VTEyNTY+OzxVMTI1OD47PFUxMjVBPi4uPFUxMjVEPjsvCisgICA8VTEyNjA+Li48VTEyODg+OzxVMTI4QT4uLjxVMTI4RD47PFUxMjkwPi4uPFUxMkIwPjs8VTEyQjI+Li48VTEyQjU+Oy8KKyAgIDxVMTJCOD4uLjxVMTJCRT47PFUxMkMwPjs8VTEyQzI+Li48VTEyQzU+OzxVMTJDOD4uLjxVMTJENj47LworICAgPFUxMkQ4Pi4uPFUxMzEwPjs8VTEzMTI+Li48VTEzMTU+OzxVMTMxOD4uLjxVMTM1QT47PFUxMzVGPi4uPFUxMzdDPjsvCisgICA8VTEzODA+Li48VTEzOTk+OzxVMTNBMD4uLjxVMTNGND47PFUxNDAxPi4uPFUxNjc2Pjs8VTE2ODE+Li48VTE2OUM+Oy8KKyAgIDxVMTZBMD4uLjxVMTZGMD47PFUxNzAwPi4uPFUxNzBDPjs8VTE3MEU+Li48VTE3MTQ+OzxVMTcyMD4uLjxVMTczNj47LworICAgPFUxNzQwPi4uPFUxNzUzPjs8VTE3NjA+Li48VTE3NkM+OzxVMTc2RT4uLjxVMTc3MD47PFUxNzcyPi4uPFUxNzczPjsvCisgICA8VTE3ODA+Li48VTE3REQ+OzxVMTdFMD4uLjxVMTdFOT47PFUxN0YwPi4uPFUxN0Y5Pjs8VTE4MDA+Li48VTE4MEQ+Oy8KKyAgIDxVMTgxMD4uLjxVMTgxOT47PFUxODIwPi4uPFUxODc3Pjs8VTE4ODA+Li48VTE4QUE+OzxVMTkwMD4uLjxVMTkxQz47LworICAgPFUxOTIwPi4uPFUxOTJCPjs8VTE5MzA+Li48VTE5M0I+OzxVMTk0MD47PFUxOTQ0Pi4uPFUxOTZEPjsvCisgICA8VTE5NzA+Li48VTE5NzQ+OzxVMTk4MD4uLjxVMTlBOT47PFUxOUIwPi4uPFUxOUM5Pjs8VTE5RDA+Li48VTE5RDk+Oy8KKyAgIDxVMTlERT4uLjxVMUExQj47PFUxQTFFPi4uPFUxQTFGPjs8VTFCMDA+Li48VTFCNEI+OzxVMUI1MD4uLjxVMUI3Qz47LworICAgPFUxQjgwPi4uPFUxQkFBPjs8VTFCQUU+Li48VTFCQjk+OzxVMUMwMD4uLjxVMUMzNz47PFUxQzNCPi4uPFUxQzQ5PjsvCisgICA8VTFDNEQ+Li48VTFDN0Y+Oy8KKyAgIDxVMUQwMD4uLjxVMURFNj47PFUxREZFPi4uPFUxRTlGPjs8VTFFQTA+Li48VTFFRkY+OzxVMUYwMD4uLjxVMUYxNT47LworICAgPFUxRjE4Pi4uPFUxRjFEPjs8VTFGMjA+Li48VTFGNDU+OzxVMUY0OD4uLjxVMUY0RD47PFUxRjUwPi4uPFUxRjU3PjsvCisgICA8VTFGNTk+OzxVMUY1Qj47PFUxRjVEPjs8VTFGNUY+Li48VTFGN0Q+OzxVMUY4MD4uLjxVMUZCND47LworICAgPFUxRkI2Pi4uPFUxRkM0Pjs8VTFGQzY+Li48VTFGRDM+OzxVMUZENj4uLjxVMUZEQj47PFUxRkREPi4uPFUxRkVGPjsvCisgICA8VTFGRjI+Li48VTFGRjQ+OzxVMUZGNj4uLjxVMUZGRT47PFUyMDA3Pjs8VTIwMEI+Li48VTIwMjc+Oy8KKyAgIDxVMjAyQT4uLjxVMjA1RT47PFUyMDYwPi4uPFUyMDY0Pjs8VTIwNkE+Li48VTIwNzE+OzxVMjA3ND4uLjxVMjA4RT47LworICAgPFUyMDkwPi4uPFUyMDk0Pjs8VTIwQTA+Li48VTIwQjU+OzxVMjBEMD4uLjxVMjBGMD47PFUyMTAwPi4uPFUyMTRGPjsvCisgICA8VTIxNTM+Li48VTIxODg+OzxVMjE5MD4uLjxVMjNFNz47PFUyNDAwPi4uPFUyNDI2Pjs8VTI0NDA+Li48VTI0NEE+Oy8KKyAgIDxVMjQ2MD4uLjxVMjY5RD47PFUyNkEwPi4uPFUyNkMzPjs8VTI3MDE+Li48VTI3MDQ+OzxVMjcwNj4uLjxVMjcwOT47LworICAgPFUyNzBDPi4uPFUyNzI3Pjs8VTI3Mjk+Li48VTI3NEI+OzxVMjc0RD47PFUyNzRGPi4uPFUyNzUyPjs8VTI3NTY+Oy8KKyAgIDxVMjc1OD4uLjxVMjc1RT47PFUyNzYxPi4uPFUyNzk0Pjs8VTI3OTg+Li48VTI3QUY+OzxVMjdCMT4uLjxVMjdCRT47LworICAgPFUyN0MwPi4uPFUyN0NBPjs8VTI3Q0M+OzxVMjdEMD4uLjxVMjdFRj47PFUyN0YwPi4uPFUyQjRDPjsvCisgICA8VTJCNTA+Li48VTJCNTQ+Oy8KKyAgIDxVMkMwMD4uLjxVMkMyRT47PFUyQzMwPi4uPFUyQzVFPjs8VTJDNjA+Li48VTJDNkY+OzxVMkM3MT4uLjxVMkM3RD47LworICAgPFUyQzgwPi4uPFUyQ0VBPjs8VTJDRjk+Li48VTJEMjU+OzxVMkQzMD4uLjxVMkQ2NT47PFUyRDZGPjsvCisgICA8VTJEODA+Li48VTJEOTY+OzxVMkRBMD4uLjxVMkRBNj47PFUyREE4Pi4uPFUyREFFPjs8VTJEQjA+Li48VTJEQjY+Oy8KKyAgIDxVMkRCOD4uLjxVMkRCRT47PFUyREMwPi4uPFUyREM2Pjs8VTJEQzg+Li48VTJEQ0U+OzxVMkREMD4uLjxVMkRENj47LworICAgPFUyREQ4Pi4uPFUyRERFPjs8VTJERTA+Li48VTJFMzA+OzxVMkU4MD4uLjxVMkU5OT47LworICAgPFUyRTlCPi4uPFUyRUYzPjs8VTJGMDA+Li48VTJGRDU+OzxVMkZGMD4uLjxVMkZGQj47PFUzMDAxPi4uPFUzMDNGPjsvCisgICA8VTMwNDE+Li48VTMwOTY+OzxVMzA5OT4uLjxVMzBGRj47PFUzMTA1Pi4uPFUzMTJEPjs8VTMxMzE+Li48VTMxOEU+Oy8KKyAgIDxVMzE5MD4uLjxVMzFCNz47PFUzMUMwPi4uPFUzMUNGPjs8VTMxRjA+Li48VTMyMUU+OzxVMzIyMD4uLjxVMzI0Mz47LworICAgPFUzMjUwPi4uPFUzMkZFPjs8VTMzMDA+Li48VTREQjU+OzxVNERDMD4uLjxVOUZCQj47PFVBMDAwPi4uPFVBNDhDPjsvCisgICA8VUE0OTA+Li48VUE0QzY+OzxVQTUwMD4uLjxVQTYyQj47PFVBNjQwPi4uPFVBNjVGPjs8VUE2NjI+Li48VUE2NzM+Oy8KKyAgIDxVQTY3Qz4uLjxVQTY5Nz47PFVBNzAwPi4uPFVBNzhDPjs8VUE3RkI+Li48VUE3RkY+OzxVQTgwMD4uLjxVQTgyQj47LworICAgPFVBODQwPi4uPFVBODc3Pjs8VUE4ODA+Li48VUE4QzQ+OzxVQThDRT4uLjxVQThEOT47PFVBOTAwPi4uPFVBOTUzPjsvCisgICA8VUE5NUY+OzxVQUEwMD4uLjxVQUEzNj47PFVBQTQwPi4uPFVBQTREPjs8VUFBNTA+Li48VUFBNTk+Oy8KKyAgIDxVQUE1Qz4uLjxVQUE1Rj47PFVBQzAwPi4uPFVEN0EzPjs8VUUwMDA+Li48VUZBMkQ+OzxVRkEzMD4uLjxVRkE2QT47LworICAgPFVGQTcwPi4uPFVGQUQ5Pjs8VUZCMDA+Li48VUZCMDY+OzxVRkIxMz4uLjxVRkIxNz47PFVGQjFEPi4uPFVGQjM2PjsvCisgICA8VUZCMzg+Li48VUZCM0M+OzxVRkIzRT47PFVGQjQwPi4uPFVGQjQxPjs8VUZCNDM+Li48VUZCNDQ+Oy8KKyAgIDxVRkI0Nj4uLjxVRkJCMT47PFVGQkQzPi4uPFVGRDNGPjs8VUZENTA+Li48VUZEOEY+OzxVRkQ5Mj4uLjxVRkRDNz47LworICAgPFVGREYwPi4uPFVGREZEPjs8VUZFMDA+Li48VUZFMTk+OzxVRkUyMD4uLjxVRkUyNj47PFVGRTMwPi4uPFVGRTUyPjsvCisgICA8VUZFNTQ+Li48VUZFNjY+OzxVRkU2OD4uLjxVRkU2Qj47PFVGRTcwPi4uPFVGRTc0Pjs8VUZFNzY+Li48VUZFRkM+Oy8KKyAgIDxVRkVGRj47PFVGRjAxPi4uPFVGRkJFPjs8VUZGQzI+Li48VUZGQzc+OzxVRkZDQT4uLjxVRkZDRj47LworICAgPFVGRkQyPi4uPFVGRkQ3Pjs8VUZGREE+Li48VUZGREM+OzxVRkZFMD4uLjxVRkZFNj47PFVGRkU4Pi4uPFVGRkVFPjsvCisgICA8VUZGRjk+Li48VUZGRkQ+OzxVMDAwMTAwMDA+Li48VTAwMDEwMDBCPjs8VTAwMDEwMDBEPi4uPFUwMDAxMDAyNj47LworICAgPFUwMDAxMDAyOD4uLjxVMDAwMTAwM0E+OzxVMDAwMTAwM0M+Li48VTAwMDEwMDNEPjsvCisgICA8VTAwMDEwMDNGPi4uPFUwMDAxMDA0RD47PFUwMDAxMDA1MD4uLjxVMDAwMTAwNUQ+Oy8KKyAgIDxVMDAwMTAwODA+Li48VTAwMDEwMEZBPjs8VTAwMDEwMTAwPi4uPFUwMDAxMDEwMj47LworICAgPFUwMDAxMDEwNz4uLjxVMDAwMTAxMzM+OzxVMDAwMTAxMzc+Li48VTAwMDEwMThBPjsvCisgICA8VTAwMDEwMTkwPi4uPFUwMDAxMDE5Qj47PFUwMDAxMDFEMD4uLjxVMDAwMTAxRkQ+Oy8KKyAgIDxVMDAwMTAyODA+Li48VTAwMDEwMjlDPjs8VTAwMDEwMkEwPi4uPFUwMDAxMDJEMD47LworICAgPFUwMDAxMDMwMD4uLjxVMDAwMTAzMUU+OzxVMDAwMTAzMjA+Li48VTAwMDEwMzIzPjsvCisgICA8VTAwMDEwMzMwPi4uPFUwMDAxMDM0QT47PFUwMDAxMDM4MD4uLjxVMDAwMTAzOUQ+Oy8KKyAgIDxVMDAwMTAzOUY+Li48VTAwMDEwM0MzPjs8VTAwMDEwM0M4Pi4uPFUwMDAxMDNENT47LworICAgPFUwMDAxMDQwMD4uLjxVMDAwMTA0OUQ+OzxVMDAwMTA0QTA+Li48VTAwMDEwNEE5PjsvCisgICA8VTAwMDEwODAwPi4uPFUwMDAxMDgwNT47PFUwMDAxMDgwOD47PFUwMDAxMDgwQT4uLjxVMDAwMTA4MzU+Oy8KKyAgIDxVMDAwMTA4Mzc+Li48VTAwMDEwODM4Pjs8VTAwMDEwODNDPjs8VTAwMDEwODNGPjsvCisgICA8VTAwMDEwOTAwPi4uPFUwMDAxMDkxOT47PFUwMDAxMDkxRj47PFUwMDAxMEEwMD4uLjxVMDAwMTBBMDM+Oy8KKyAgIDxVMDAwMTBBMDU+Li48VTAwMDEwQTA2Pjs8VTAwMDEwQTBDPi4uPFUwMDAxMEExMz47LworICAgPFUwMDAxMEExNT4uLjxVMDAwMTBBMTc+OzxVMDAwMTBBMTk+Li48VTAwMDEwQTMzPjsvCisgICA8VTAwMDEwQTM4Pi4uPFUwMDAxMEEzQT47PFUwMDAxMEEzRj4uLjxVMDAwMTBBNDc+Oy8KKyAgIDxVMDAwMTBBNTA+Li48VTAwMDEwQTU4Pjs8VTAwMDEyMDAwPi4uPFUwMDAxMjM2RT47LworICAgPFUwMDAxMjQwMD4uLjxVMDAwMTI0NjI+OzxVMDAwMTI0NzA+Li48VTAwMDEyNDczPjsvCisgICA8VTAwMDFEMDAwPi4uPFUwMDAxRDBGNT47PFUwMDAxRDEwMD4uLjxVMDAwMUQxMjY+Oy8KKyAgIDxVMDAwMUQxMjk+Li48VTAwMDFEMUREPjs8VTAwMDFEMjAwPi4uPFUwMDAxRDI0NT47LworICAgPFUwMDAxRDMwMD4uLjxVMDAwMUQzNTY+OzxVMDAwMUQzNjA+Li48VTAwMDFEMzcxPjsvCisgICA8VTAwMDFENDAwPi4uPFUwMDAxRDQ1ND47PFUwMDAxRDQ1Nj4uLjxVMDAwMUQ0OUM+Oy8KKyAgIDxVMDAwMUQ0OUU+Li48VTAwMDFENDlGPjs8VTAwMDFENEEyPjs8VTAwMDFENEE1Pi4uPFUwMDAxRDRBNj47LworICAgPFUwMDAxRDRBOT4uLjxVMDAwMUQ0QUM+OzxVMDAwMUQ0QUU+Li48VTAwMDFENEI5Pjs8VTAwMDFENEJCPjsvCisgICA8VTAwMDFENEJEPi4uPFUwMDAxRDRDMz47PFUwMDAxRDRDNT4uLjxVMDAwMUQ1MDU+Oy8KKyAgIDxVMDAwMUQ1MDc+Li48VTAwMDFENTBBPjs8VTAwMDFENTBEPi4uPFUwMDAxRDUxND47LworICAgPFUwMDAxRDUxNj4uLjxVMDAwMUQ1MUM+OzxVMDAwMUQ1MUU+Li48VTAwMDFENTM5PjsvCisgICA8VTAwMDFENTNCPi4uPFUwMDAxRDUzRT47PFUwMDAxRDU0MD4uLjxVMDAwMUQ1NDQ+OzxVMDAwMUQ1NDY+Oy8KKyAgIDxVMDAwMUQ1NEE+Li48VTAwMDFENTUwPjs8VTAwMDFENTUyPi4uPFUwMDAxRDZBNT47LworICAgPFUwMDAxRDZBOD4uLjxVMDAwMUQ3Q0I+OzxVMDAwMUQ3Q0U+Li48VTAwMDFEN0ZGPjsvCisgICA8VTAwMDFGMDAwPi4uPFUwMDAxRjAyQj47PFUwMDAxRjAzMD4uLjxVMDAwMUYwOTM+Oy8KKyAgIDxVMDAwMjAwMDA+Li48VTAwMDJBNkQ2Pjs8VTAwMDJGODAwPi4uPFUwMDAyRkExRD47PFUwMDBFMDAwMT47LworICAgPFUwMDBFMDAyMD4uLjxVMDAwRTAwN0Y+OzxVMDAwRTAxMDA+Li48VTAwMEUwMUVGPjsvCisgICA8VTAwMEYwMDAwPi4uPFUwMDBGRkZGRD47PFUwMDEwMDAwMD4uLjxVMDAxMEZGRkQ+CisKK3ByaW50IC8KKyAgIDxVMDAyMD4uLjxVMDA3RT47PFUwMEEwPi4uPFUwMzc3Pjs8VTAzN0E+Li48VTAzN0U+Oy8KKyAgIDxVMDM4ND4uLjxVMDM4QT47PFUwMzhDPjs8VTAzOEU+Li48VTAzQTE+OzxVMDNBMz4uLjxVMDQ4Nj47LworICAgPFUwNDg4Pi4uPFUwNTIzPjs8VTA1MzE+Li48VTA1NTY+OzxVMDU1OT4uLjxVMDU1Rj47LworICAgPFUwNTYxPi4uPFUwNTg3Pjs8VTA1ODk+Li48VTA1OEE+OzxVMDU5MT4uLjxVMDVDNz47PFUwNUQwPi4uPFUwNUVBPjsvCisgICA8VTA1RjA+Li48VTA1RjQ+OzxVMDYwMD4uLjxVMDYwMz47PFUwNjA2Pi4uPFUwNjFCPjsvCisgICA8VTA2MUU+Li48VTA2MUY+OzxVMDYyMT4uLjxVMDY1RT47PFUwNjYwPi4uPFUwNzBEPjsvCisgICA8VTA3MEY+Li48VTA3NEE+OzxVMDc0RD4uLjxVMDdCMT47PFUwN0MwPi4uPFUwN0ZBPjsvCisgICA8VTA5MDE+Li48VTA5Mzk+OzxVMDkzQz4uLjxVMDk0RD47PFUwOTUwPi4uPFUwOTU0Pjs8VTA5NTg+Li48VTA5NzI+Oy8KKyAgIDxVMDk3Qj4uLjxVMDk3Rj47PFUwOTgxPi4uPFUwOTgzPjs8VTA5ODU+Li48VTA5OEM+OzxVMDk4Rj4uLjxVMDk5MD47LworICAgPFUwOTkzPi4uPFUwOUE4Pjs8VTA5QUE+Li48VTA5QjA+OzxVMDlCMj47PFUwOUI2Pi4uPFUwOUI5PjsvCisgICA8VTA5QkM+Li48VTA5QzQ+OzxVMDlDNz4uLjxVMDlDOD47PFUwOUNCPi4uPFUwOUNFPjs8VTA5RDc+Oy8KKyAgIDxVMDlEQz4uLjxVMDlERD47PFUwOURGPi4uPFUwOUUzPjs8VTA5RTY+Li48VTA5RkE+OzxVMEEwMT4uLjxVMEEwMz47LworICAgPFUwQTA1Pi4uPFUwQTBBPjs8VTBBMEY+Li48VTBBMTA+OzxVMEExMz4uLjxVMEEyOD47PFUwQTJBPi4uPFUwQTMwPjsvCisgICA8VTBBMzI+Li48VTBBMzM+OzxVMEEzNT4uLjxVMEEzNj47PFUwQTM4Pi4uPFUwQTM5Pjs8VTBBM0M+Oy8KKyAgIDxVMEEzRT4uLjxVMEE0Mj47PFUwQTQ3Pi4uPFUwQTQ4Pjs8VTBBNEI+Li48VTBBNEQ+OzxVMEE1MT47LworICAgPFUwQTU5Pi4uPFUwQTVDPjsvCisgICA8VTBBNUU+OzxVMEE2Nj4uLjxVMEE3NT47PFUwQTgxPi4uPFUwQTgzPjs8VTBBODU+Li48VTBBOEQ+Oy8KKyAgIDxVMEE4Rj4uLjxVMEE5MT47PFUwQTkzPi4uPFUwQUE4Pjs8VTBBQUE+Li48VTBBQjA+OzxVMEFCMj4uLjxVMEFCMz47LworICAgPFUwQUI1Pi4uPFUwQUI5Pjs8VTBBQkM+Li48VTBBQzU+OzxVMEFDNz4uLjxVMEFDOT47PFUwQUNCPi4uPFUwQUNEPjsvCisgICA8VTBBRDA+OzxVMEFFMD4uLjxVMEFFMz47PFUwQUU2Pi4uPFUwQUVGPjs8VTBBRjE+OzxVMEIwMT4uLjxVMEIwMz47LworICAgPFUwQjA1Pi4uPFUwQjBDPjs8VTBCMEY+Li48VTBCMTA+OzxVMEIxMz4uLjxVMEIyOD47PFUwQjJBPi4uPFUwQjMwPjsvCisgICA8VTBCMzI+Li48VTBCMzM+OzxVMEIzNT4uLjxVMEIzOT47PFUwQjNDPi4uPFUwQjQ0Pjs8VTBCNDc+Li48VTBCNDg+Oy8KKyAgIDxVMEI0Qj4uLjxVMEI0RD47PFUwQjU2Pi4uPFUwQjU3Pjs8VTBCNUM+Li48VTBCNUQ+OzxVMEI1Rj4uLjxVMEI2Mz47LworICAgPFUwQjY2Pi4uPFUwQjcxPjs8VTBCODI+Li48VTBCODM+OzxVMEI4NT4uLjxVMEI4QT47PFUwQjhFPi4uPFUwQjkwPjsvCisgICA8VTBCOTI+Li48VTBCOTU+OzxVMEI5OT4uLjxVMEI5QT47PFUwQjlDPjs8VTBCOUU+Li48VTBCOUY+Oy8KKyAgIDxVMEJBMz4uLjxVMEJBND47PFUwQkE4Pi4uPFUwQkFBPjs8VTBCQUU+Li48VTBCQjk+OzxVMEJCRT4uLjxVMEJDMj47LworICAgPFUwQkM2Pi4uPFUwQkM4Pjs8VTBCQ0E+Li48VTBCQ0Q+OzxVMEJEMD47PFUwQkQ3Pjs8VTBCRTY+Li48VTBCRkE+Oy8KKyAgIDxVMEMwMT4uLjxVMEMwMz47PFUwQzA1Pi4uPFUwQzBDPjs8VTBDMEU+Li48VTBDMTA+OzxVMEMxMj4uLjxVMEMyOD47LworICAgPFUwQzJBPi4uPFUwQzMzPjs8VTBDMzU+Li48VTBDMzk+OzxVMEMzRD4uLjxVMEM0ND47PFUwQzQ2Pi4uPFUwQzQ4PjsvCisgICA8VTBDNEE+Li48VTBDNEQ+OzxVMEM1NT4uLjxVMEM1Nj47PFUwQzU4Pi4uPFUwQzU5Pjs8VTBDNjA+Li48VTBDNjM+Oy8KKyAgIDxVMEM2Nj4uLjxVMEM2Rj47PFUwQzc4Pi4uPFUwQzdGPjsvCisgICA8VTBDODI+Li48VTBDODM+OzxVMEM4NT4uLjxVMEM4Qz47PFUwQzhFPi4uPFUwQzkwPjs8VTBDOTI+Li48VTBDQTg+Oy8KKyAgIDxVMENBQT4uLjxVMENCMz47PFUwQ0I1Pi4uPFUwQ0I5Pjs8VTBDQkM+Li48VTBDQzQ+OzxVMENDNj4uLjxVMENDOD47LworICAgPFUwQ0NBPi4uPFUwQ0NEPjs8VTBDRDU+Li48VTBDRDY+OzxVMENERT47PFUwQ0UwPi4uPFUwQ0UzPjsvCisgICA8VTBDRTY+Li48VTBDRUY+OzxVMENGMT4uLjxVMENGMj47PFUwRDAyPi4uPFUwRDAzPjs8VTBEMDU+Li48VTBEMEM+Oy8KKyAgIDxVMEQwRT4uLjxVMEQxMD47PFUwRDEyPi4uPFUwRDI4Pjs8VTBEMkE+Li48VTBEMzk+OzxVMEQzRD4uLjxVMEQ0ND47LworICAgPFUwRDQ2Pi4uPFUwRDQ4Pjs8VTBENEE+Li48VTBENEQ+OzxVMEQ1Nz47PFUwRDYwPi4uPFUwRDYzPjsvCisgICA8VTBENjY+Li48VTBENzU+OzxVMEQ3OT4uLjxVMEQ3Rj47PFUwRDgyPi4uPFUwRDgzPjs8VTBEODU+Li48VTBEOTY+Oy8KKyAgIDxVMEQ5QT4uLjxVMERCMT47LworICAgPFUwREIzPi4uPFUwREJCPjs8VTBEQkQ+OzxVMERDMD4uLjxVMERDNj47PFUwRENBPjs8VTBEQ0Y+Li48VTBERDQ+Oy8KKyAgIDxVMERENj47PFUwREQ4Pi4uPFUwRERGPjs8VTBERjI+Li48VTBERjQ+OzxVMEUwMT4uLjxVMEUzQT47LworICAgPFUwRTNGPi4uPFUwRTVCPjs8VTBFODE+Li48VTBFODI+OzxVMEU4ND47PFUwRTg3Pi4uPFUwRTg4Pjs8VTBFOEE+Oy8KKyAgIDxVMEU4RD47PFUwRTk0Pi4uPFUwRTk3Pjs8VTBFOTk+Li48VTBFOUY+OzxVMEVBMT4uLjxVMEVBMz47PFUwRUE1PjsvCisgICA8VTBFQTc+OzxVMEVBQT4uLjxVMEVBQj47PFUwRUFEPi4uPFUwRUI5Pjs8VTBFQkI+Li48VTBFQkQ+Oy8KKyAgIDxVMEVDMD4uLjxVMEVDND47PFUwRUM2Pjs8VTBFQzg+Li48VTBFQ0Q+OzxVMEVEMD4uLjxVMEVEOT47LworICAgPFUwRURDPi4uPFUwRUREPjs8VTBGMDA+Li48VTBGNDc+OzxVMEY0OT4uLjxVMEY2Qz47PFUwRjcxPi4uPFUwRjhCPjsvCisgICA8VTBGOTA+Li48VTBGOTc+OzxVMEY5OT4uLjxVMEZCQz47PFUwRkJFPi4uPFUwRkNDPjs8VTBGQ0U+Li48VTBGRDQ+Oy8KKyAgIDxVMTAwMD4uLjxVMTAyQT47PFUxMDJCPi4uPFUxMDNGPjs8VTEwNDA+Li48VTEwOTk+OzxVMTA5RT47PFUxMDlGPjsvCisgICA8VTEwQTA+Li48VTEwQzU+OzxVMTBEMD4uLjxVMTBGQz47LworICAgPFUxMTAwPi4uPFUxMTU5Pjs8VTExNUY+Li48VTExQTI+OzxVMTFBOD4uLjxVMTFGOT47PFUxMjAwPi4uPFUxMjQ4PjsvCisgICA8VTEyNEE+Li48VTEyNEQ+OzxVMTI1MD4uLjxVMTI1Nj47PFUxMjU4Pjs8VTEyNUE+Li48VTEyNUQ+Oy8KKyAgIDxVMTI2MD4uLjxVMTI4OD47PFUxMjhBPi4uPFUxMjhEPjs8VTEyOTA+Li48VTEyQjA+OzxVMTJCMj4uLjxVMTJCNT47LworICAgPFUxMkI4Pi4uPFUxMkJFPjs8VTEyQzA+OzxVMTJDMj4uLjxVMTJDNT47PFUxMkM4Pi4uPFUxMkQ2PjsvCisgICA8VTEyRDg+Li48VTEzMTA+OzxVMTMxMj4uLjxVMTMxNT47PFUxMzE4Pi4uPFUxMzVBPjs8VTEzNUY+Li48VTEzN0M+Oy8KKyAgIDxVMTM4MD4uLjxVMTM5OT47PFUxM0EwPi4uPFUxM0Y0Pjs8VTE0MDE+Li48VTE2NzY+OzxVMTY4MD4uLjxVMTY5Qz47LworICAgPFUxNkEwPi4uPFUxNkYwPjs8VTE3MDA+Li48VTE3MEM+OzxVMTcwRT4uLjxVMTcxND47PFUxNzIwPi4uPFUxNzM2PjsvCisgICA8VTE3NDA+Li48VTE3NTM+OzxVMTc2MD4uLjxVMTc2Qz47PFUxNzZFPi4uPFUxNzcwPjs8VTE3NzI+Li48VTE3NzM+Oy8KKyAgIDxVMTc4MD4uLjxVMTdERD47PFUxN0UwPi4uPFUxN0U5Pjs8VTE3RjA+Li48VTE3Rjk+OzxVMTgwMD4uLjxVMTgwRT47LworICAgPFUxODEwPi4uPFUxODE5Pjs8VTE4MjA+Li48VTE4Nzc+OzxVMTg4MD4uLjxVMThBQT47PFUxOTAwPi4uPFUxOTFDPjsvCisgICA8VTE5MjA+Li48VTE5MkI+OzxVMTkzMD4uLjxVMTkzQj47PFUxOTQwPjs8VTE5NDQ+Li48VTE5NkQ+Oy8KKyAgIDxVMTk3MD4uLjxVMTk3ND47PFUxOTgwPi4uPFUxOUE5Pjs8VTE5QjA+Li48VTE5Qzk+OzxVMTlEMD4uLjxVMTlEOT47LworICAgPFUxOURFPi4uPFUxQTFCPjs8VTFBMUU+Li48VTFBMUY+OzxVMUIwMD4uLjxVMUI0Qj47PFUxQjUwPi4uPFUxQjdDPjsvCisgICA8VTFCODA+Li48VTFCQUE+OzxVMUJBRT4uLjxVMUJCOT47PFUxQzAwPi4uPFUxQzM3Pjs8VTFDM0I+Li48VTFDNDk+Oy8KKyAgIDxVMUM0RD4uLjxVMUM3Rj47LworICAgPFUxRDAwPi4uPFUxREU2Pjs8VTFERkU+Li48VTFFOUY+OzxVMUVBMD4uLjxVMUVGRj47PFUxRjAwPi4uPFUxRjE1PjsvCisgICA8VTFGMTg+Li48VTFGMUQ+OzxVMUYyMD4uLjxVMUY0NT47PFUxRjQ4Pi4uPFUxRjREPjs8VTFGNTA+Li48VTFGNTc+Oy8KKyAgIDxVMUY1OT47PFUxRjVCPjs8VTFGNUQ+OzxVMUY1Rj4uLjxVMUY3RD47PFUxRjgwPi4uPFUxRkI0PjsvCisgICA8VTFGQjY+Li48VTFGQzQ+OzxVMUZDNj4uLjxVMUZEMz47PFUxRkQ2Pi4uPFUxRkRCPjs8VTFGREQ+Li48VTFGRUY+Oy8KKyAgIDxVMUZGMj4uLjxVMUZGND47PFUxRkY2Pi4uPFUxRkZFPjs8VTIwMDA+Li48VTIwMjc+OzxVMjAyQT4uLjxVMjA2ND47LworICAgPFUyMDZBPi4uPFUyMDcxPjs8VTIwNzQ+Li48VTIwOEU+OzxVMjA5MD4uLjxVMjA5ND47PFUyMEEwPi4uPFUyMEI1PjsvCisgICA8VTIwRDA+Li48VTIwRjA+OzxVMjEwMD4uLjxVMjE0Rj47PFUyMTUzPi4uPFUyMTg4Pjs8VTIxOTA+Li48VTIzRTc+Oy8KKyAgIDxVMjQwMD4uLjxVMjQyNj47PFUyNDQwPi4uPFUyNDRBPjs8VTI0NjA+Li48VTI2OUQ+OzxVMjZBMD4uLjxVMjZDMz47LworICAgPFUyNzAxPi4uPFUyNzA0Pjs8VTI3MDY+Li48VTI3MDk+OzxVMjcwQz4uLjxVMjcyNz47PFUyNzI5Pi4uPFUyNzRCPjsvCisgICA8VTI3NEQ+OzxVMjc0Rj4uLjxVMjc1Mj47PFUyNzU2Pjs8VTI3NTg+Li48VTI3NUU+OzxVMjc2MT4uLjxVMjc5ND47LworICAgPFUyNzk4Pi4uPFUyN0FGPjs8VTI3QjE+Li48VTI3QkU+OzxVMjdDMD4uLjxVMjdDQT47PFUyN0NDPjsvCisgICA8VTI3RDA+Li48VTI3RUY+Oy8KKyAgIDxVMjdGMD4uLjxVMkI0Qz47PFUyQjUwPi4uPFUyQjU0Pjs8VTJDMDA+Li48VTJDMkU+OzxVMkMzMD4uLjxVMkM1RT47LworICAgPFUyQzYwPi4uPFUyQzZGPjs8VTJDNzE+Li48VTJDN0Q+OzxVMkM4MD4uLjxVMkNFQT47PFUyQ0Y5Pi4uPFUyRDI1PjsvCisgICA8VTJEMzA+Li48VTJENjU+OzxVMkQ2Rj47PFUyRDgwPi4uPFUyRDk2Pjs8VTJEQTA+Li48VTJEQTY+Oy8KKyAgIDxVMkRBOD4uLjxVMkRBRT47PFUyREIwPi4uPFUyREI2Pjs8VTJEQjg+Li48VTJEQkU+OzxVMkRDMD4uLjxVMkRDNj47LworICAgPFUyREM4Pi4uPFUyRENFPjs8VTJERDA+Li48VTJERDY+OzxVMkREOD4uLjxVMkRERT47PFUyREUwPi4uPFUyRTMwPjsvCisgICA8VTJFODA+Li48VTJFOTk+OzxVMkU5Qj4uLjxVMkVGMz47PFUyRjAwPi4uPFUyRkQ1PjsvCisgICA8VTJGRjA+Li48VTJGRkI+OzxVMzAwMD4uLjxVMzAzRj47PFUzMDQxPi4uPFUzMDk2Pjs8VTMwOTk+Li48VTMwRkY+Oy8KKyAgIDxVMzEwNT4uLjxVMzEyRD47PFUzMTMxPi4uPFUzMThFPjs8VTMxOTA+Li48VTMxQjc+OzxVMzFDMD4uLjxVMzFDRj47LworICAgPFUzMUYwPi4uPFUzMjFFPjs8VTMyMjA+Li48VTMyNDM+OzxVMzI1MD4uLjxVMzJGRT47PFUzMzAwPi4uPFU0REI1PjsvCisgICA8VTREQzA+Li48VTlGQkI+OzxVQTAwMD4uLjxVQTQ4Qz47PFVBNDkwPi4uPFVBNEM2Pjs8VUE1MDA+Li48VUE2MkI+Oy8KKyAgIDxVQTY0MD4uLjxVQTY1Rj47PFVBNjYyPi4uPFVBNjczPjs8VUE2N0M+Li48VUE2OTc+OzxVQTcwMD4uLjxVQTc4Qz47LworICAgPFVBN0ZCPi4uPFVBN0ZGPjs8VUE4MDA+Li48VUE4MkI+OzxVQTg0MD4uLjxVQTg3Nz47LworICAgPFVBODgwPi4uPFVBOEM0Pjs8VUE4Q0U+Li48VUE4RDk+OzxVQUMwMD4uLjxVRDdBMz47LworICAgPFVBODQwPi4uPFVBODc3Pjs8VUE4ODA+Li48VUE4QzQ+OzxVQThDRT4uLjxVQThEOT47PFVBOTAwPi4uPFVBOTUzPjsvCisgICA8VUE5NUY+OzxVQUEwMD4uLjxVQUEzNj47PFVBQTQwPi4uPFVBQTREPjs8VUFBNTA+Li48VUFBNTk+Oy8KKyAgIDxVQUE1Qz4uLjxVQUE1Rj47LworICAgPFVFMDAwPi4uPFVGQTJEPjs8VUZBMzA+Li48VUZBNkE+OzxVRkE3MD4uLjxVRkFEOT47PFVGQjAwPi4uPFVGQjA2PjsvCisgICA8VUZCMTM+Li48VUZCMTc+OzxVRkIxRD4uLjxVRkIzNj47PFVGQjM4Pi4uPFVGQjNDPjs8VUZCM0U+Oy8KKyAgIDxVRkI0MD4uLjxVRkI0MT47PFVGQjQzPi4uPFVGQjQ0Pjs8VUZCNDY+Li48VUZCQjE+OzxVRkJEMz4uLjxVRkQzRj47LworICAgPFVGRDUwPi4uPFVGRDhGPjs8VUZEOTI+Li48VUZEQzc+OzxVRkRGMD4uLjxVRkRGRD47PFVGRTAwPi4uPFVGRTE5PjsvCisgICA8VUZFMjA+Li48VUZFMjY+OzxVRkUzMD4uLjxVRkU1Mj47PFVGRTU0Pi4uPFVGRTY2Pjs8VUZFNjg+Li48VUZFNkI+Oy8KKyAgIDxVRkU3MD4uLjxVRkU3ND47PFVGRTc2Pi4uPFVGRUZDPjs8VUZFRkY+OzxVRkYwMT4uLjxVRkZCRT47LworICAgPFVGRkMyPi4uPFVGRkM3Pjs8VUZGQ0E+Li48VUZGQ0Y+OzxVRkZEMj4uLjxVRkZENz47PFVGRkRBPi4uPFVGRkRDPjsvCisgICA8VUZGRTA+Li48VUZGRTY+OzxVRkZFOD4uLjxVRkZFRT47PFVGRkY5Pi4uPFVGRkZEPjsvCisgICA8VTAwMDEwMDAwPi4uPFUwMDAxMDAwQj47PFUwMDAxMDAwRD4uLjxVMDAwMTAwMjY+Oy8KKyAgIDxVMDAwMTAwMjg+Li48VTAwMDEwMDNBPjs8VTAwMDEwMDNDPi4uPFUwMDAxMDAzRD47LworICAgPFUwMDAxMDAzRj4uLjxVMDAwMTAwNEQ+OzxVMDAwMTAwNTA+Li48VTAwMDEwMDVEPjsvCisgICA8VTAwMDEwMDgwPi4uPFUwMDAxMDBGQT47PFUwMDAxMDEwMD4uLjxVMDAwMTAxMDI+Oy8KKyAgIDxVMDAwMTAxMDc+Li48VTAwMDEwMTMzPjs8VTAwMDEwMTM3Pi4uPFUwMDAxMDE4QT47LworICAgPFUwMDAxMDE5MD4uLjxVMDAwMTAxOUI+OzxVMDAwMTAxRDA+Li48VTAwMDEwMUZEPjsvCisgICA8VTAwMDEwMjgwPi4uPFUwMDAxMDI5Qz47PFUwMDAxMDJBMD4uLjxVMDAwMTAyRDA+Oy8KKyAgIDxVMDAwMTAzMDA+Li48VTAwMDEwMzFFPjs8VTAwMDEwMzIwPi4uPFUwMDAxMDMyMz47LworICAgPFUwMDAxMDMzMD4uLjxVMDAwMTAzNEE+OzxVMDAwMTAzODA+Li48VTAwMDEwMzlEPjsvCisgICA8VTAwMDEwMzlGPi4uPFUwMDAxMDNDMz47PFUwMDAxMDNDOD4uLjxVMDAwMTAzRDU+Oy8KKyAgIDxVMDAwMTA0MDA+Li48VTAwMDEwNDlEPjs8VTAwMDEwNEEwPi4uPFUwMDAxMDRBOT47LworICAgPFUwMDAxMDgwMD4uLjxVMDAwMTA4MDU+OzxVMDAwMTA4MDg+OzxVMDAwMTA4MEE+Li48VTAwMDEwODM1PjsvCisgICA8VTAwMDEwODM3Pi4uPFUwMDAxMDgzOD47PFUwMDAxMDgzQz47PFUwMDAxMDgzRj47LworICAgPFUwMDAxMDkwMD4uLjxVMDAwMTA5MTk+OzxVMDAwMTA5MUY+OzxVMDAwMTBBMDA+Li48VTAwMDEwQTAzPjsvCisgICA8VTAwMDEwQTA1Pi4uPFUwMDAxMEEwNj47PFUwMDAxMEEwQz4uLjxVMDAwMTBBMTM+Oy8KKyAgIDxVMDAwMTBBMTU+Li48VTAwMDEwQTE3Pjs8VTAwMDEwQTE5Pi4uPFUwMDAxMEEzMz47LworICAgPFUwMDAxMEEzOD4uLjxVMDAwMTBBM0E+OzxVMDAwMTBBM0Y+Li48VTAwMDEwQTQ3PjsvCisgICA8VTAwMDEwQTUwPi4uPFUwMDAxMEE1OD47PFUwMDAxMjAwMD4uLjxVMDAwMTIzNkU+Oy8KKyAgIDxVMDAwMTI0MDA+Li48VTAwMDEyNDYyPjs8VTAwMDEyNDcwPi4uPFUwMDAxMjQ3Mz47LworICAgPFUwMDAxRDAwMD4uLjxVMDAwMUQwRjU+OzxVMDAwMUQxMDA+Li48VTAwMDFEMTI2PjsvCisgICA8VTAwMDFEMTI5Pi4uPFUwMDAxRDFERD47PFUwMDAxRDIwMD4uLjxVMDAwMUQyNDU+Oy8KKyAgIDxVMDAwMUQzMDA+Li48VTAwMDFEMzU2Pjs8VTAwMDFEMzYwPi4uPFUwMDAxRDM3MT47LworICAgPFUwMDAxRDQwMD4uLjxVMDAwMUQ0NTQ+OzxVMDAwMUQ0NTY+Li48VTAwMDFENDlDPjsvCisgICA8VTAwMDFENDlFPi4uPFUwMDAxRDQ5Rj47PFUwMDAxRDRBMj47PFUwMDAxRDRBNT4uLjxVMDAwMUQ0QTY+Oy8KKyAgIDxVMDAwMUQ0QTk+Li48VTAwMDFENEFDPjs8VTAwMDFENEFFPi4uPFUwMDAxRDRCOT47PFUwMDAxRDRCQj47LworICAgPFUwMDAxRDRCRD4uLjxVMDAwMUQ0QzM+OzxVMDAwMUQ0QzU+Li48VTAwMDFENTA1PjsvCisgICA8VTAwMDFENTA3Pi4uPFUwMDAxRDUwQT47PFUwMDAxRDUwRD4uLjxVMDAwMUQ1MTQ+Oy8KKyAgIDxVMDAwMUQ1MTY+Li48VTAwMDFENTFDPjs8VTAwMDFENTFFPi4uPFUwMDAxRDUzOT47LworICAgPFUwMDAxRDUzQj4uLjxVMDAwMUQ1M0U+OzxVMDAwMUQ1NDA+Li48VTAwMDFENTQ0Pjs8VTAwMDFENTQ2PjsvCisgICA8VTAwMDFENTRBPi4uPFUwMDAxRDU1MD47PFUwMDAxRDU1Mj4uLjxVMDAwMUQ2QTU+Oy8KKyAgIDxVMDAwMUQ2QTg+Li48VTAwMDFEN0NCPjs8VTAwMDFEN0NFPi4uPFUwMDAxRDdGRj47LworICAgPFUwMDAxRjAwMD4uLjxVMDAwMUYwMkI+OzxVMDAwMUYwMzA+Li48VTAwMDFGMDkzPjsvCisgICA8VTAwMDIwMDAwPi4uPFUwMDAyQTZENj47PFUwMDAyRjgwMD4uLjxVMDAwMkZBMUQ+OzxVMDAwRTAwMDE+Oy8KKyAgIDxVMDAwRTAwMjA+Li48VTAwMEUwMDdGPjs8VTAwMEUwMTAwPi4uPFUwMDBFMDFFRj47LworICAgPFUwMDBGMDAwMD4uLjxVMDAwRkZGRkQ+OzxVMDAxMDAwMDA+Li48VTAwMTBGRkZEPgorCislIFRoZSAieGRpZ2l0IiBjbGFzcyBtdXN0IG9ubHkgY29udGFpbiB0aGUgQkFTSUMgTEFUSU4gZGlnaXRzIGFuZCBBLUYsIGEtZiwKKyUgc2F5cyBJU08gQyA5OSAoc2VjdGlvbnMgNy4yNS4yLjEuMTIgYW5kIDYuNC40LjEpLgoreGRpZ2l0IC8KKyAgIDxVMDAzMD4uLjxVMDAzOT47PFUwMDQxPi4uPFUwMDQ2Pjs8VTAwNjE+Li48VTAwNjY+CisKK2JsYW5rIC8KKyAgIDxVMDAwOT47PFUwMDIwPjs8VTE2ODA+OzxVMTgwRT47PFUyMDAwPi4uPFUyMDA2Pjs8VTIwMDg+Li48VTIwMEE+Oy8KKyAgIDxVMjA1Rj47PFUzMDAwPgorCit0b3VwcGVyIC8KKyAgICg8VTAwNjE+LDxVMDA0MT4pOyg8VTAwNjI+LDxVMDA0Mj4pOyg8VTAwNjM+LDxVMDA0Mz4pOyg8VTAwNjQ+LDxVMDA0ND4pOy8KKyAgICg8VTAwNjU+LDxVMDA0NT4pOyg8VTAwNjY+LDxVMDA0Nj4pOyg8VTAwNjc+LDxVMDA0Nz4pOyg8VTAwNjg+LDxVMDA0OD4pOy8KKyAgICg8VTAwNjk+LDxVMDA0OT4pOyg8VTAwNkE+LDxVMDA0QT4pOyg8VTAwNkI+LDxVMDA0Qj4pOyg8VTAwNkM+LDxVMDA0Qz4pOy8KKyAgICg8VTAwNkQ+LDxVMDA0RD4pOyg8VTAwNkU+LDxVMDA0RT4pOyg8VTAwNkY+LDxVMDA0Rj4pOyg8VTAwNzA+LDxVMDA1MD4pOy8KKyAgICg8VTAwNzE+LDxVMDA1MT4pOyg8VTAwNzI+LDxVMDA1Mj4pOyg8VTAwNzM+LDxVMDA1Mz4pOyg8VTAwNzQ+LDxVMDA1ND4pOy8KKyAgICg8VTAwNzU+LDxVMDA1NT4pOyg8VTAwNzY+LDxVMDA1Nj4pOyg8VTAwNzc+LDxVMDA1Nz4pOyg8VTAwNzg+LDxVMDA1OD4pOy8KKyAgICg8VTAwNzk+LDxVMDA1OT4pOyg8VTAwN0E+LDxVMDA1QT4pOyg8VTAwQjU+LDxVMDM5Qz4pOyg8VTAwREY+LDxVMUU5RT4pOy8KKyAgICg8VTAwRTA+LDxVMDBDMD4pOy8KKyAgICg8VTAwRTE+LDxVMDBDMT4pOyg8VTAwRTI+LDxVMDBDMj4pOyg8VTAwRTM+LDxVMDBDMz4pOyg8VTAwRTQ+LDxVMDBDND4pOy8KKyAgICg8VTAwRTU+LDxVMDBDNT4pOyg8VTAwRTY+LDxVMDBDNj4pOyg8VTAwRTc+LDxVMDBDNz4pOyg8VTAwRTg+LDxVMDBDOD4pOy8KKyAgICg8VTAwRTk+LDxVMDBDOT4pOyg8VTAwRUE+LDxVMDBDQT4pOyg8VTAwRUI+LDxVMDBDQj4pOyg8VTAwRUM+LDxVMDBDQz4pOy8KKyAgICg8VTAwRUQ+LDxVMDBDRD4pOyg8VTAwRUU+LDxVMDBDRT4pOyg8VTAwRUY+LDxVMDBDRj4pOyg8VTAwRjA+LDxVMDBEMD4pOy8KKyAgICg8VTAwRjE+LDxVMDBEMT4pOyg8VTAwRjI+LDxVMDBEMj4pOyg8VTAwRjM+LDxVMDBEMz4pOyg8VTAwRjQ+LDxVMDBEND4pOy8KKyAgICg8VTAwRjU+LDxVMDBENT4pOyg8VTAwRjY+LDxVMDBENj4pOyg8VTAwRjg+LDxVMDBEOD4pOyg8VTAwRjk+LDxVMDBEOT4pOy8KKyAgICg8VTAwRkE+LDxVMDBEQT4pOyg8VTAwRkI+LDxVMDBEQj4pOyg8VTAwRkM+LDxVMDBEQz4pOyg8VTAwRkQ+LDxVMDBERD4pOy8KKyAgICg8VTAwRkU+LDxVMDBERT4pOyg8VTAwRkY+LDxVMDE3OD4pOyg8VTAxMDE+LDxVMDEwMD4pOyg8VTAxMDM+LDxVMDEwMj4pOy8KKyAgICg8VTAxMDU+LDxVMDEwND4pOyg8VTAxMDc+LDxVMDEwNj4pOyg8VTAxMDk+LDxVMDEwOD4pOyg8VTAxMEI+LDxVMDEwQT4pOy8KKyAgICg8VTAxMEQ+LDxVMDEwQz4pOyg8VTAxMEY+LDxVMDEwRT4pOyg8VTAxMTE+LDxVMDExMD4pOyg8VTAxMTM+LDxVMDExMj4pOy8KKyAgICg8VTAxMTU+LDxVMDExND4pOyg8VTAxMTc+LDxVMDExNj4pOyg8VTAxMTk+LDxVMDExOD4pOyg8VTAxMUI+LDxVMDExQT4pOy8KKyAgICg8VTAxMUQ+LDxVMDExQz4pOyg8VTAxMUY+LDxVMDExRT4pOyg8VTAxMjE+LDxVMDEyMD4pOyg8VTAxMjM+LDxVMDEyMj4pOy8KKyAgICg8VTAxMjU+LDxVMDEyND4pOyg8VTAxMjc+LDxVMDEyNj4pOyg8VTAxMjk+LDxVMDEyOD4pOyg8VTAxMkI+LDxVMDEyQT4pOy8KKyAgICg8VTAxMkQ+LDxVMDEyQz4pOyg8VTAxMkY+LDxVMDEyRT4pOyg8VTAxMzE+LDxVMDA0OT4pOyg8VTAxMzM+LDxVMDEzMj4pOy8KKyAgICg8VTAxMzU+LDxVMDEzND4pOyg8VTAxMzc+LDxVMDEzNj4pOyg8VTAxM0E+LDxVMDEzOT4pOyg8VTAxM0M+LDxVMDEzQj4pOy8KKyAgICg8VTAxM0U+LDxVMDEzRD4pOyg8VTAxNDA+LDxVMDEzRj4pOyg8VTAxNDI+LDxVMDE0MT4pOyg8VTAxNDQ+LDxVMDE0Mz4pOy8KKyAgICg8VTAxNDY+LDxVMDE0NT4pOyg8VTAxNDg+LDxVMDE0Nz4pOyg8VTAxNEI+LDxVMDE0QT4pOyg8VTAxNEQ+LDxVMDE0Qz4pOy8KKyAgICg8VTAxNEY+LDxVMDE0RT4pOyg8VTAxNTE+LDxVMDE1MD4pOyg8VTAxNTM+LDxVMDE1Mj4pOyg8VTAxNTU+LDxVMDE1ND4pOy8KKyAgICg8VTAxNTc+LDxVMDE1Nj4pOyg8VTAxNTk+LDxVMDE1OD4pOyg8VTAxNUI+LDxVMDE1QT4pOyg8VTAxNUQ+LDxVMDE1Qz4pOy8KKyAgICg8VTAxNUY+LDxVMDE1RT4pOyg8VTAxNjE+LDxVMDE2MD4pOyg8VTAxNjM+LDxVMDE2Mj4pOyg8VTAxNjU+LDxVMDE2ND4pOy8KKyAgICg8VTAxNjc+LDxVMDE2Nj4pOyg8VTAxNjk+LDxVMDE2OD4pOyg8VTAxNkI+LDxVMDE2QT4pOyg8VTAxNkQ+LDxVMDE2Qz4pOy8KKyAgICg8VTAxNkY+LDxVMDE2RT4pOyg8VTAxNzE+LDxVMDE3MD4pOyg8VTAxNzM+LDxVMDE3Mj4pOyg8VTAxNzU+LDxVMDE3ND4pOy8KKyAgICg8VTAxNzc+LDxVMDE3Nj4pOyg8VTAxN0E+LDxVMDE3OT4pOyg8VTAxN0M+LDxVMDE3Qj4pOyg8VTAxN0U+LDxVMDE3RD4pOy8KKyAgICg8VTAxN0Y+LDxVMDA1Mz4pOyg8VTAxODA+LDxVMDI0Mz4pOyg8VTAxODM+LDxVMDE4Mj4pOyg8VTAxODU+LDxVMDE4ND4pOy8KKyAgICg8VTAxODg+LDxVMDE4Nz4pOyg8VTAxOEM+LDxVMDE4Qj4pOyg8VTAxOTI+LDxVMDE5MT4pOyg8VTAxOTU+LDxVMDFGNj4pOy8KKyAgICg8VTAxOTk+LDxVMDE5OD4pOyg8VTAxOUE+LDxVMDIzRD4pOyg8VTAxOUU+LDxVMDIyMD4pOyg8VTAxQTE+LDxVMDFBMD4pOy8KKyAgICg8VTAxQTM+LDxVMDFBMj4pOyg8VTAxQTU+LDxVMDFBND4pOyg8VTAxQTg+LDxVMDFBNz4pOyg8VTAxQUQ+LDxVMDFBQz4pOy8KKyAgICg8VTAxQjA+LDxVMDFBRj4pOyg8VTAxQjQ+LDxVMDFCMz4pOyg8VTAxQjY+LDxVMDFCNT4pOyg8VTAxQjk+LDxVMDFCOD4pOy8KKyAgICg8VTAxQkQ+LDxVMDFCQz4pOyg8VTAxQkY+LDxVMDFGNz4pOyg8VTAxQzU+LDxVMDFDND4pOyg8VTAxQzY+LDxVMDFDND4pOy8KKyAgICg8VTAxQzg+LDxVMDFDNz4pOyg8VTAxQzk+LDxVMDFDNz4pOyg8VTAxQ0I+LDxVMDFDQT4pOyg8VTAxQ0M+LDxVMDFDQT4pOy8KKyAgICg8VTAxQ0U+LDxVMDFDRD4pOyg8VTAxRDA+LDxVMDFDRj4pOyg8VTAxRDI+LDxVMDFEMT4pOyg8VTAxRDQ+LDxVMDFEMz4pOy8KKyAgICg8VTAxRDY+LDxVMDFENT4pOyg8VTAxRDg+LDxVMDFENz4pOyg8VTAxREE+LDxVMDFEOT4pOyg8VTAxREM+LDxVMDFEQj4pOy8KKyAgICg8VTAxREQ+LDxVMDE4RT4pOyg8VTAxREY+LDxVMDFERT4pOyg8VTAxRTE+LDxVMDFFMD4pOyg8VTAxRTM+LDxVMDFFMj4pOy8KKyAgICg8VTAxRTU+LDxVMDFFND4pOyg8VTAxRTc+LDxVMDFFNj4pOyg8VTAxRTk+LDxVMDFFOD4pOyg8VTAxRUI+LDxVMDFFQT4pOy8KKyAgICg8VTAxRUQ+LDxVMDFFQz4pOyg8VTAxRUY+LDxVMDFFRT4pOyg8VTAxRjI+LDxVMDFGMT4pOyg8VTAxRjM+LDxVMDFGMT4pOy8KKyAgICg8VTAxRjU+LDxVMDFGND4pOyg8VTAxRjk+LDxVMDFGOD4pOyg8VTAxRkI+LDxVMDFGQT4pOyg8VTAxRkQ+LDxVMDFGQz4pOy8KKyAgICg8VTAxRkY+LDxVMDFGRT4pOyg8VTAyMDE+LDxVMDIwMD4pOyg8VTAyMDM+LDxVMDIwMj4pOyg8VTAyMDU+LDxVMDIwND4pOy8KKyAgICg8VTAyMDc+LDxVMDIwNj4pOyg8VTAyMDk+LDxVMDIwOD4pOyg8VTAyMEI+LDxVMDIwQT4pOyg8VTAyMEQ+LDxVMDIwQz4pOy8KKyAgICg8VTAyMEY+LDxVMDIwRT4pOyg8VTAyMTE+LDxVMDIxMD4pOyg8VTAyMTM+LDxVMDIxMj4pOyg8VTAyMTU+LDxVMDIxND4pOy8KKyAgICg8VTAyMTc+LDxVMDIxNj4pOyg8VTAyMTk+LDxVMDIxOD4pOyg8VTAyMUI+LDxVMDIxQT4pOyg8VTAyMUQ+LDxVMDIxQz4pOy8KKyAgICg8VTAyMUY+LDxVMDIxRT4pOyg8VTAyMjM+LDxVMDIyMj4pOyg8VTAyMjU+LDxVMDIyND4pOyg8VTAyMjc+LDxVMDIyNj4pOy8KKyAgICg8VTAyMjk+LDxVMDIyOD4pOyg8VTAyMkI+LDxVMDIyQT4pOyg8VTAyMkQ+LDxVMDIyQz4pOyg8VTAyMkY+LDxVMDIyRT4pOy8KKyAgICg8VTAyMzE+LDxVMDIzMD4pOyg8VTAyMzM+LDxVMDIzMj4pOyg8VTAyM0M+LDxVMDIzQj4pOyg8VTAyNDI+LDxVMDI0MT4pOy8KKyAgICg8VTAyNDc+LDxVMDI0Nj4pOyg8VTAyNDk+LDxVMDI0OD4pOyg8VTAyNEI+LDxVMDI0QT4pOyg8VTAyNEQ+LDxVMDI0Qz4pOy8KKyAgICg8VTAyNEY+LDxVMDI0RT4pOyg8VTAyNTA+LDxVMkM2Rj4pOyg8VTAyNTE+LDxVMkM2RD4pOyg8VTAyNTM+LDxVMDE4MT4pOy8KKyAgICg8VTAyNTQ+LDxVMDE4Nj4pOyg8VTAyNTY+LDxVMDE4OT4pOy8KKyAgICg8VTAyNTc+LDxVMDE4QT4pOyg8VTAyNTk+LDxVMDE4Rj4pOyg8VTAyNUI+LDxVMDE5MD4pOyg8VTAyNjA+LDxVMDE5Mz4pOy8KKyAgICg8VTAyNjM+LDxVMDE5ND4pOyg8VTAyNjg+LDxVMDE5Nz4pOyg8VTAyNjk+LDxVMDE5Nj4pOyg8VTAyNkI+LDxVMkM2Mj4pOy8KKyAgICg8VTAyNkY+LDxVMDE5Qz4pOyg8VTAyNzE+LDxVMkM2RT4pOyg8VTAyNzI+LDxVMDE5RD4pOyg8VTAyNzU+LDxVMDE5Rj4pOy8KKyAgICg8VTAyN0Q+LDxVMkM2ND4pOy8KKyAgICg8VTAyODA+LDxVMDFBNj4pOyg8VTAyODM+LDxVMDFBOT4pOyg8VTAyODg+LDxVMDFBRT4pOyg8VTAyODk+LDxVMDI0ND4pOy8KKyAgICg8VTAyOEE+LDxVMDFCMT4pOyg8VTAyOEI+LDxVMDFCMj4pOyg8VTAyOEM+LDxVMDI0NT4pOyg8VTAyOTI+LDxVMDFCNz4pOy8KKyAgICg8VTAzNDU+LDxVMDM5OT4pOyg8VTAzNzE+LDxVMDM3MD4pOyg8VTAzNzM+LDxVMDM3Mj4pOyg8VTAzNzc+LDxVMDM3Nj4pOy8KKyAgICg8VTAzN0I+LDxVMDNGRD4pOyg8VTAzN0M+LDxVMDNGRT4pOyg8VTAzN0Q+LDxVMDNGRj4pOy8KKyAgICg8VTAzQUM+LDxVMDM4Nj4pOyg8VTAzQUQ+LDxVMDM4OD4pOyg8VTAzQUU+LDxVMDM4OT4pOyg8VTAzQUY+LDxVMDM4QT4pOy8KKyAgICg8VTAzQjE+LDxVMDM5MT4pOyg8VTAzQjI+LDxVMDM5Mj4pOyg8VTAzQjM+LDxVMDM5Mz4pOyg8VTAzQjQ+LDxVMDM5ND4pOy8KKyAgICg8VTAzQjU+LDxVMDM5NT4pOyg8VTAzQjY+LDxVMDM5Nj4pOyg8VTAzQjc+LDxVMDM5Nz4pOyg8VTAzQjg+LDxVMDM5OD4pOy8KKyAgICg8VTAzQjk+LDxVMDM5OT4pOyg8VTAzQkE+LDxVMDM5QT4pOyg8VTAzQkI+LDxVMDM5Qj4pOyg8VTAzQkM+LDxVMDM5Qz4pOy8KKyAgICg8VTAzQkQ+LDxVMDM5RD4pOyg8VTAzQkU+LDxVMDM5RT4pOyg8VTAzQkY+LDxVMDM5Rj4pOyg8VTAzQzA+LDxVMDNBMD4pOy8KKyAgICg8VTAzQzE+LDxVMDNBMT4pOyg8VTAzQzI+LDxVMDNBMz4pOyg8VTAzQzM+LDxVMDNBMz4pOyg8VTAzQzQ+LDxVMDNBND4pOy8KKyAgICg8VTAzQzU+LDxVMDNBNT4pOyg8VTAzQzY+LDxVMDNBNj4pOyg8VTAzQzc+LDxVMDNBNz4pOyg8VTAzQzg+LDxVMDNBOD4pOy8KKyAgICg8VTAzQzk+LDxVMDNBOT4pOyg8VTAzQ0E+LDxVMDNBQT4pOyg8VTAzQ0I+LDxVMDNBQj4pOyg8VTAzQ0M+LDxVMDM4Qz4pOy8KKyAgICg8VTAzQ0Q+LDxVMDM4RT4pOyg8VTAzQ0U+LDxVMDM4Rj4pOyg8VTAzRDA+LDxVMDM5Mj4pOyg8VTAzRDE+LDxVMDM5OD4pOy8KKyAgICg8VTAzRDU+LDxVMDNBNj4pOyg8VTAzRDY+LDxVMDNBMD4pOyg8VTAzRDk+LDxVMDNEOD4pOyg8VTAzREI+LDxVMDNEQT4pOy8KKyAgICg8VTAzREQ+LDxVMDNEQz4pOyg8VTAzREY+LDxVMDNERT4pOyg8VTAzRTE+LDxVMDNFMD4pOyg8VTAzRTM+LDxVMDNFMj4pOy8KKyAgICg8VTAzRTU+LDxVMDNFND4pOyg8VTAzRTc+LDxVMDNFNj4pOyg8VTAzRTk+LDxVMDNFOD4pOyg8VTAzRUI+LDxVMDNFQT4pOy8KKyAgICg8VTAzRUQ+LDxVMDNFQz4pOyg8VTAzRUY+LDxVMDNFRT4pOyg8VTAzRjA+LDxVMDM5QT4pOyg8VTAzRjE+LDxVMDNBMT4pOy8KKyAgICg8VTAzRjI+LDxVMDNGOT4pOyg8VTAzRjU+LDxVMDM5NT4pOyg8VTAzRjg+LDxVMDNGNz4pOyg8VTAzRkI+LDxVMDNGQT4pOy8KKyAgICg8VTA0MzA+LDxVMDQxMD4pOyg8VTA0MzE+LDxVMDQxMT4pOyg8VTA0MzI+LDxVMDQxMj4pOyg8VTA0MzM+LDxVMDQxMz4pOy8KKyAgICg8VTA0MzQ+LDxVMDQxND4pOyg8VTA0MzU+LDxVMDQxNT4pOyg8VTA0MzY+LDxVMDQxNj4pOyg8VTA0Mzc+LDxVMDQxNz4pOy8KKyAgICg8VTA0Mzg+LDxVMDQxOD4pOyg8VTA0Mzk+LDxVMDQxOT4pOyg8VTA0M0E+LDxVMDQxQT4pOyg8VTA0M0I+LDxVMDQxQj4pOy8KKyAgICg8VTA0M0M+LDxVMDQxQz4pOyg8VTA0M0Q+LDxVMDQxRD4pOyg8VTA0M0U+LDxVMDQxRT4pOyg8VTA0M0Y+LDxVMDQxRj4pOy8KKyAgICg8VTA0NDA+LDxVMDQyMD4pOyg8VTA0NDE+LDxVMDQyMT4pOyg8VTA0NDI+LDxVMDQyMj4pOyg8VTA0NDM+LDxVMDQyMz4pOy8KKyAgICg8VTA0NDQ+LDxVMDQyND4pOyg8VTA0NDU+LDxVMDQyNT4pOyg8VTA0NDY+LDxVMDQyNj4pOyg8VTA0NDc+LDxVMDQyNz4pOy8KKyAgICg8VTA0NDg+LDxVMDQyOD4pOyg8VTA0NDk+LDxVMDQyOT4pOyg8VTA0NEE+LDxVMDQyQT4pOyg8VTA0NEI+LDxVMDQyQj4pOy8KKyAgICg8VTA0NEM+LDxVMDQyQz4pOyg8VTA0NEQ+LDxVMDQyRD4pOyg8VTA0NEU+LDxVMDQyRT4pOyg8VTA0NEY+LDxVMDQyRj4pOy8KKyAgICg8VTA0NTA+LDxVMDQwMD4pOyg8VTA0NTE+LDxVMDQwMT4pOyg8VTA0NTI+LDxVMDQwMj4pOyg8VTA0NTM+LDxVMDQwMz4pOy8KKyAgICg8VTA0NTQ+LDxVMDQwND4pOyg8VTA0NTU+LDxVMDQwNT4pOyg8VTA0NTY+LDxVMDQwNj4pOyg8VTA0NTc+LDxVMDQwNz4pOy8KKyAgICg8VTA0NTg+LDxVMDQwOD4pOyg8VTA0NTk+LDxVMDQwOT4pOyg8VTA0NUE+LDxVMDQwQT4pOyg8VTA0NUI+LDxVMDQwQj4pOy8KKyAgICg8VTA0NUM+LDxVMDQwQz4pOyg8VTA0NUQ+LDxVMDQwRD4pOyg8VTA0NUU+LDxVMDQwRT4pOyg8VTA0NUY+LDxVMDQwRj4pOy8KKyAgICg8VTA0NjE+LDxVMDQ2MD4pOyg8VTA0NjM+LDxVMDQ2Mj4pOyg8VTA0NjU+LDxVMDQ2ND4pOyg8VTA0Njc+LDxVMDQ2Nj4pOy8KKyAgICg8VTA0Njk+LDxVMDQ2OD4pOyg8VTA0NkI+LDxVMDQ2QT4pOyg8VTA0NkQ+LDxVMDQ2Qz4pOyg8VTA0NkY+LDxVMDQ2RT4pOy8KKyAgICg8VTA0NzE+LDxVMDQ3MD4pOyg8VTA0NzM+LDxVMDQ3Mj4pOyg8VTA0NzU+LDxVMDQ3ND4pOyg8VTA0Nzc+LDxVMDQ3Nj4pOy8KKyAgICg8VTA0Nzk+LDxVMDQ3OD4pOyg8VTA0N0I+LDxVMDQ3QT4pOyg8VTA0N0Q+LDxVMDQ3Qz4pOyg8VTA0N0Y+LDxVMDQ3RT4pOy8KKyAgICg8VTA0ODE+LDxVMDQ4MD4pOyg8VTA0OEI+LDxVMDQ4QT4pOyg8VTA0OEQ+LDxVMDQ4Qz4pOyg8VTA0OEY+LDxVMDQ4RT4pOy8KKyAgICg8VTA0OTE+LDxVMDQ5MD4pOyg8VTA0OTM+LDxVMDQ5Mj4pOyg8VTA0OTU+LDxVMDQ5ND4pOyg8VTA0OTc+LDxVMDQ5Nj4pOy8KKyAgICg8VTA0OTk+LDxVMDQ5OD4pOyg8VTA0OUI+LDxVMDQ5QT4pOyg8VTA0OUQ+LDxVMDQ5Qz4pOyg8VTA0OUY+LDxVMDQ5RT4pOy8KKyAgICg8VTA0QTE+LDxVMDRBMD4pOyg8VTA0QTM+LDxVMDRBMj4pOyg8VTA0QTU+LDxVMDRBND4pOyg8VTA0QTc+LDxVMDRBNj4pOy8KKyAgICg8VTA0QTk+LDxVMDRBOD4pOyg8VTA0QUI+LDxVMDRBQT4pOyg8VTA0QUQ+LDxVMDRBQz4pOyg8VTA0QUY+LDxVMDRBRT4pOy8KKyAgICg8VTA0QjE+LDxVMDRCMD4pOyg8VTA0QjM+LDxVMDRCMj4pOyg8VTA0QjU+LDxVMDRCND4pOyg8VTA0Qjc+LDxVMDRCNj4pOy8KKyAgICg8VTA0Qjk+LDxVMDRCOD4pOyg8VTA0QkI+LDxVMDRCQT4pOyg8VTA0QkQ+LDxVMDRCQz4pOyg8VTA0QkY+LDxVMDRCRT4pOy8KKyAgICg8VTA0QzI+LDxVMDRDMT4pOyg8VTA0QzQ+LDxVMDRDMz4pOyg8VTA0QzY+LDxVMDRDNT4pOyg8VTA0Qzg+LDxVMDRDNz4pOy8KKyAgICg8VTA0Q0E+LDxVMDRDOT4pOyg8VTA0Q0M+LDxVMDRDQj4pOyg8VTA0Q0U+LDxVMDRDRD4pOyg8VTA0Q0Y+LDxVMDRDMD4pOy8KKyAgICg8VTA0RDE+LDxVMDREMD4pOyg8VTA0RDM+LDxVMDREMj4pOyg8VTA0RDU+LDxVMDREND4pOyg8VTA0RDc+LDxVMDRENj4pOy8KKyAgICg8VTA0RDk+LDxVMDREOD4pOyg8VTA0REI+LDxVMDREQT4pOyg8VTA0REQ+LDxVMDREQz4pOyg8VTA0REY+LDxVMDRERT4pOy8KKyAgICg8VTA0RTE+LDxVMDRFMD4pOyg8VTA0RTM+LDxVMDRFMj4pOyg8VTA0RTU+LDxVMDRFND4pOyg8VTA0RTc+LDxVMDRFNj4pOy8KKyAgICg8VTA0RTk+LDxVMDRFOD4pOyg8VTA0RUI+LDxVMDRFQT4pOyg8VTA0RUQ+LDxVMDRFQz4pOyg8VTA0RUY+LDxVMDRFRT4pOy8KKyAgICg8VTA0RjE+LDxVMDRGMD4pOyg8VTA0RjM+LDxVMDRGMj4pOyg8VTA0RjU+LDxVMDRGND4pOyg8VTA0Rjc+LDxVMDRGNj4pOy8KKyAgICg8VTA0Rjk+LDxVMDRGOD4pOyg8VTA0RkI+LDxVMDRGQT4pOyg8VTA0RkQ+LDxVMDRGQz4pOyg8VTA0RkY+LDxVMDRGRT4pOy8KKyAgICg8VTA1MDE+LDxVMDUwMD4pOyg8VTA1MDM+LDxVMDUwMj4pOyg8VTA1MDU+LDxVMDUwND4pOyg8VTA1MDc+LDxVMDUwNj4pOy8KKyAgICg8VTA1MDk+LDxVMDUwOD4pOyg8VTA1MEI+LDxVMDUwQT4pOyg8VTA1MEQ+LDxVMDUwQz4pOyg8VTA1MEY+LDxVMDUwRT4pOy8KKyAgICg8VTA1MTE+LDxVMDUxMD4pOyg8VTA1MTM+LDxVMDUxMj4pOyg8VTA1MTU+LDxVMDUxND4pOyg8VTA1MTc+LDxVMDUxNj4pOy8KKyAgICg8VTA1MTk+LDxVMDUxOD4pOyg8VTA1MUI+LDxVMDUxQT4pOyg8VTA1MUQ+LDxVMDUxQz4pOyg8VTA1MUY+LDxVMDUxRT4pOy8KKyAgICg8VTA1MjE+LDxVMDUyMD4pOyg8VTA1MjM+LDxVMDUyMj4pOyg8VTA1NjE+LDxVMDUzMT4pOyg8VTA1NjI+LDxVMDUzMj4pOy8KKyAgICg8VTA1NjM+LDxVMDUzMz4pOyg8VTA1NjQ+LDxVMDUzND4pOyg8VTA1NjU+LDxVMDUzNT4pOyg8VTA1NjY+LDxVMDUzNj4pOy8KKyAgICg8VTA1Njc+LDxVMDUzNz4pOyg8VTA1Njg+LDxVMDUzOD4pOyg8VTA1Njk+LDxVMDUzOT4pOyg8VTA1NkE+LDxVMDUzQT4pOy8KKyAgICg8VTA1NkI+LDxVMDUzQj4pOyg8VTA1NkM+LDxVMDUzQz4pOyg8VTA1NkQ+LDxVMDUzRD4pOyg8VTA1NkU+LDxVMDUzRT4pOy8KKyAgICg8VTA1NkY+LDxVMDUzRj4pOyg8VTA1NzA+LDxVMDU0MD4pOyg8VTA1NzE+LDxVMDU0MT4pOyg8VTA1NzI+LDxVMDU0Mj4pOy8KKyAgICg8VTA1NzM+LDxVMDU0Mz4pOyg8VTA1NzQ+LDxVMDU0ND4pOyg8VTA1NzU+LDxVMDU0NT4pOyg8VTA1NzY+LDxVMDU0Nj4pOy8KKyAgICg8VTA1Nzc+LDxVMDU0Nz4pOyg8VTA1Nzg+LDxVMDU0OD4pOyg8VTA1Nzk+LDxVMDU0OT4pOyg8VTA1N0E+LDxVMDU0QT4pOy8KKyAgICg8VTA1N0I+LDxVMDU0Qj4pOyg8VTA1N0M+LDxVMDU0Qz4pOyg8VTA1N0Q+LDxVMDU0RD4pOyg8VTA1N0U+LDxVMDU0RT4pOy8KKyAgICg8VTA1N0Y+LDxVMDU0Rj4pOyg8VTA1ODA+LDxVMDU1MD4pOyg8VTA1ODE+LDxVMDU1MT4pOyg8VTA1ODI+LDxVMDU1Mj4pOy8KKyAgICg8VTA1ODM+LDxVMDU1Mz4pOyg8VTA1ODQ+LDxVMDU1ND4pOyg8VTA1ODU+LDxVMDU1NT4pOyg8VTA1ODY+LDxVMDU1Nj4pOy8KKyAgICg8VTFEN0Q+LDxVMkM2Mz4pOyg8VTFFMDE+LDxVMUUwMD4pOyg8VTFFMDM+LDxVMUUwMj4pOyg8VTFFMDU+LDxVMUUwND4pOy8KKyAgICg8VTFFMDc+LDxVMUUwNj4pOyg8VTFFMDk+LDxVMUUwOD4pOyg8VTFFMEI+LDxVMUUwQT4pOyg8VTFFMEQ+LDxVMUUwQz4pOy8KKyAgICg8VTFFMEY+LDxVMUUwRT4pOyg8VTFFMTE+LDxVMUUxMD4pOyg8VTFFMTM+LDxVMUUxMj4pOyg8VTFFMTU+LDxVMUUxND4pOy8KKyAgICg8VTFFMTc+LDxVMUUxNj4pOyg8VTFFMTk+LDxVMUUxOD4pOyg8VTFFMUI+LDxVMUUxQT4pOyg8VTFFMUQ+LDxVMUUxQz4pOy8KKyAgICg8VTFFMUY+LDxVMUUxRT4pOyg8VTFFMjE+LDxVMUUyMD4pOyg8VTFFMjM+LDxVMUUyMj4pOyg8VTFFMjU+LDxVMUUyND4pOy8KKyAgICg8VTFFMjc+LDxVMUUyNj4pOyg8VTFFMjk+LDxVMUUyOD4pOyg8VTFFMkI+LDxVMUUyQT4pOyg8VTFFMkQ+LDxVMUUyQz4pOy8KKyAgICg8VTFFMkY+LDxVMUUyRT4pOyg8VTFFMzE+LDxVMUUzMD4pOyg8VTFFMzM+LDxVMUUzMj4pOyg8VTFFMzU+LDxVMUUzND4pOy8KKyAgICg8VTFFMzc+LDxVMUUzNj4pOyg8VTFFMzk+LDxVMUUzOD4pOyg8VTFFM0I+LDxVMUUzQT4pOyg8VTFFM0Q+LDxVMUUzQz4pOy8KKyAgICg8VTFFM0Y+LDxVMUUzRT4pOyg8VTFFNDE+LDxVMUU0MD4pOyg8VTFFNDM+LDxVMUU0Mj4pOyg8VTFFNDU+LDxVMUU0ND4pOy8KKyAgICg8VTFFNDc+LDxVMUU0Nj4pOyg8VTFFNDk+LDxVMUU0OD4pOyg8VTFFNEI+LDxVMUU0QT4pOyg8VTFFNEQ+LDxVMUU0Qz4pOy8KKyAgICg8VTFFNEY+LDxVMUU0RT4pOyg8VTFFNTE+LDxVMUU1MD4pOyg8VTFFNTM+LDxVMUU1Mj4pOyg8VTFFNTU+LDxVMUU1ND4pOy8KKyAgICg8VTFFNTc+LDxVMUU1Nj4pOyg8VTFFNTk+LDxVMUU1OD4pOyg8VTFFNUI+LDxVMUU1QT4pOyg8VTFFNUQ+LDxVMUU1Qz4pOy8KKyAgICg8VTFFNUY+LDxVMUU1RT4pOyg8VTFFNjE+LDxVMUU2MD4pOyg8VTFFNjM+LDxVMUU2Mj4pOyg8VTFFNjU+LDxVMUU2ND4pOy8KKyAgICg8VTFFNjc+LDxVMUU2Nj4pOyg8VTFFNjk+LDxVMUU2OD4pOyg8VTFFNkI+LDxVMUU2QT4pOyg8VTFFNkQ+LDxVMUU2Qz4pOy8KKyAgICg8VTFFNkY+LDxVMUU2RT4pOyg8VTFFNzE+LDxVMUU3MD4pOyg8VTFFNzM+LDxVMUU3Mj4pOyg8VTFFNzU+LDxVMUU3ND4pOy8KKyAgICg8VTFFNzc+LDxVMUU3Nj4pOyg8VTFFNzk+LDxVMUU3OD4pOyg8VTFFN0I+LDxVMUU3QT4pOyg8VTFFN0Q+LDxVMUU3Qz4pOy8KKyAgICg8VTFFN0Y+LDxVMUU3RT4pOyg8VTFFODE+LDxVMUU4MD4pOyg8VTFFODM+LDxVMUU4Mj4pOyg8VTFFODU+LDxVMUU4ND4pOy8KKyAgICg8VTFFODc+LDxVMUU4Nj4pOyg8VTFFODk+LDxVMUU4OD4pOyg8VTFFOEI+LDxVMUU4QT4pOyg8VTFFOEQ+LDxVMUU4Qz4pOy8KKyAgICg8VTFFOEY+LDxVMUU4RT4pOyg8VTFFOTE+LDxVMUU5MD4pOyg8VTFFOTM+LDxVMUU5Mj4pOyg8VTFFOTU+LDxVMUU5ND4pOy8KKyAgICg8VTFFOUI+LDxVMUU2MD4pOyg8VTFFQTE+LDxVMUVBMD4pOyg8VTFFQTM+LDxVMUVBMj4pOyg8VTFFQTU+LDxVMUVBND4pOy8KKyAgICg8VTFFQTc+LDxVMUVBNj4pOyg8VTFFQTk+LDxVMUVBOD4pOyg8VTFFQUI+LDxVMUVBQT4pOyg8VTFFQUQ+LDxVMUVBQz4pOy8KKyAgICg8VTFFQUY+LDxVMUVBRT4pOyg8VTFFQjE+LDxVMUVCMD4pOyg8VTFFQjM+LDxVMUVCMj4pOyg8VTFFQjU+LDxVMUVCND4pOy8KKyAgICg8VTFFQjc+LDxVMUVCNj4pOyg8VTFFQjk+LDxVMUVCOD4pOyg8VTFFQkI+LDxVMUVCQT4pOyg8VTFFQkQ+LDxVMUVCQz4pOy8KKyAgICg8VTFFQkY+LDxVMUVCRT4pOyg8VTFFQzE+LDxVMUVDMD4pOyg8VTFFQzM+LDxVMUVDMj4pOyg8VTFFQzU+LDxVMUVDND4pOy8KKyAgICg8VTFFQzc+LDxVMUVDNj4pOyg8VTFFQzk+LDxVMUVDOD4pOyg8VTFFQ0I+LDxVMUVDQT4pOyg8VTFFQ0Q+LDxVMUVDQz4pOy8KKyAgICg8VTFFQ0Y+LDxVMUVDRT4pOyg8VTFFRDE+LDxVMUVEMD4pOyg8VTFFRDM+LDxVMUVEMj4pOyg8VTFFRDU+LDxVMUVEND4pOy8KKyAgICg8VTFFRDc+LDxVMUVENj4pOyg8VTFFRDk+LDxVMUVEOD4pOyg8VTFFREI+LDxVMUVEQT4pOyg8VTFFREQ+LDxVMUVEQz4pOy8KKyAgICg8VTFFREY+LDxVMUVERT4pOyg8VTFFRTE+LDxVMUVFMD4pOyg8VTFFRTM+LDxVMUVFMj4pOyg8VTFFRTU+LDxVMUVFND4pOy8KKyAgICg8VTFFRTc+LDxVMUVFNj4pOyg8VTFFRTk+LDxVMUVFOD4pOyg8VTFFRUI+LDxVMUVFQT4pOyg8VTFFRUQ+LDxVMUVFQz4pOy8KKyAgICg8VTFFRUY+LDxVMUVFRT4pOyg8VTFFRjE+LDxVMUVGMD4pOyg8VTFFRjM+LDxVMUVGMj4pOyg8VTFFRjU+LDxVMUVGND4pOy8KKyAgICg8VTFFRjc+LDxVMUVGNj4pOyg8VTFFRjk+LDxVMUVGOD4pOyg8VTFFRkI+LDxVMUVGQT4pOyg8VTFFRkQ+LDxVMUVGQz4pOy8KKyAgICg8VTFFRkY+LDxVMUVGRT4pOyg8VTFGMDA+LDxVMUYwOD4pOyg8VTFGMDE+LDxVMUYwOT4pOy8KKyAgICg8VTFGMDI+LDxVMUYwQT4pOyg8VTFGMDM+LDxVMUYwQj4pOyg8VTFGMDQ+LDxVMUYwQz4pOyg8VTFGMDU+LDxVMUYwRD4pOy8KKyAgICg8VTFGMDY+LDxVMUYwRT4pOyg8VTFGMDc+LDxVMUYwRj4pOyg8VTFGMTA+LDxVMUYxOD4pOyg8VTFGMTE+LDxVMUYxOT4pOy8KKyAgICg8VTFGMTI+LDxVMUYxQT4pOyg8VTFGMTM+LDxVMUYxQj4pOyg8VTFGMTQ+LDxVMUYxQz4pOyg8VTFGMTU+LDxVMUYxRD4pOy8KKyAgICg8VTFGMjA+LDxVMUYyOD4pOyg8VTFGMjE+LDxVMUYyOT4pOyg8VTFGMjI+LDxVMUYyQT4pOyg8VTFGMjM+LDxVMUYyQj4pOy8KKyAgICg8VTFGMjQ+LDxVMUYyQz4pOyg8VTFGMjU+LDxVMUYyRD4pOyg8VTFGMjY+LDxVMUYyRT4pOyg8VTFGMjc+LDxVMUYyRj4pOy8KKyAgICg8VTFGMzA+LDxVMUYzOD4pOyg8VTFGMzE+LDxVMUYzOT4pOyg8VTFGMzI+LDxVMUYzQT4pOyg8VTFGMzM+LDxVMUYzQj4pOy8KKyAgICg8VTFGMzQ+LDxVMUYzQz4pOyg8VTFGMzU+LDxVMUYzRD4pOyg8VTFGMzY+LDxVMUYzRT4pOyg8VTFGMzc+LDxVMUYzRj4pOy8KKyAgICg8VTFGNDA+LDxVMUY0OD4pOyg8VTFGNDE+LDxVMUY0OT4pOyg8VTFGNDI+LDxVMUY0QT4pOyg8VTFGNDM+LDxVMUY0Qj4pOy8KKyAgICg8VTFGNDQ+LDxVMUY0Qz4pOyg8VTFGNDU+LDxVMUY0RD4pOyg8VTFGNTE+LDxVMUY1OT4pOyg8VTFGNTM+LDxVMUY1Qj4pOy8KKyAgICg8VTFGNTU+LDxVMUY1RD4pOyg8VTFGNTc+LDxVMUY1Rj4pOyg8VTFGNjA+LDxVMUY2OD4pOyg8VTFGNjE+LDxVMUY2OT4pOy8KKyAgICg8VTFGNjI+LDxVMUY2QT4pOyg8VTFGNjM+LDxVMUY2Qj4pOyg8VTFGNjQ+LDxVMUY2Qz4pOyg8VTFGNjU+LDxVMUY2RD4pOy8KKyAgICg8VTFGNjY+LDxVMUY2RT4pOyg8VTFGNjc+LDxVMUY2Rj4pOyg8VTFGNzA+LDxVMUZCQT4pOyg8VTFGNzE+LDxVMUZCQj4pOy8KKyAgICg8VTFGNzI+LDxVMUZDOD4pOyg8VTFGNzM+LDxVMUZDOT4pOyg8VTFGNzQ+LDxVMUZDQT4pOyg8VTFGNzU+LDxVMUZDQj4pOy8KKyAgICg8VTFGNzY+LDxVMUZEQT4pOyg8VTFGNzc+LDxVMUZEQj4pOyg8VTFGNzg+LDxVMUZGOD4pOyg8VTFGNzk+LDxVMUZGOT4pOy8KKyAgICg8VTFGN0E+LDxVMUZFQT4pOyg8VTFGN0I+LDxVMUZFQj4pOyg8VTFGN0M+LDxVMUZGQT4pOyg8VTFGN0Q+LDxVMUZGQj4pOy8KKyAgICg8VTFGODA+LDxVMUY4OD4pOyg8VTFGODE+LDxVMUY4OT4pOyg8VTFGODI+LDxVMUY4QT4pOyg8VTFGODM+LDxVMUY4Qj4pOy8KKyAgICg8VTFGODQ+LDxVMUY4Qz4pOyg8VTFGODU+LDxVMUY4RD4pOyg8VTFGODY+LDxVMUY4RT4pOyg8VTFGODc+LDxVMUY4Rj4pOy8KKyAgICg8VTFGOTA+LDxVMUY5OD4pOyg8VTFGOTE+LDxVMUY5OT4pOyg8VTFGOTI+LDxVMUY5QT4pOyg8VTFGOTM+LDxVMUY5Qj4pOy8KKyAgICg8VTFGOTQ+LDxVMUY5Qz4pOyg8VTFGOTU+LDxVMUY5RD4pOyg8VTFGOTY+LDxVMUY5RT4pOyg8VTFGOTc+LDxVMUY5Rj4pOy8KKyAgICg8VTFGQTA+LDxVMUZBOD4pOyg8VTFGQTE+LDxVMUZBOT4pOyg8VTFGQTI+LDxVMUZBQT4pOyg8VTFGQTM+LDxVMUZBQj4pOy8KKyAgICg8VTFGQTQ+LDxVMUZBQz4pOyg8VTFGQTU+LDxVMUZBRD4pOyg8VTFGQTY+LDxVMUZBRT4pOyg8VTFGQTc+LDxVMUZBRj4pOy8KKyAgICg8VTFGQjA+LDxVMUZCOD4pOyg8VTFGQjE+LDxVMUZCOT4pOyg8VTFGQjM+LDxVMUZCQz4pOyg8VTFGQkU+LDxVMDM5OT4pOy8KKyAgICg8VTFGQzM+LDxVMUZDQz4pOyg8VTFGRDA+LDxVMUZEOD4pOyg8VTFGRDE+LDxVMUZEOT4pOyg8VTFGRTA+LDxVMUZFOD4pOy8KKyAgICg8VTFGRTE+LDxVMUZFOT4pOyg8VTFGRTU+LDxVMUZFQz4pOyg8VTFGRjM+LDxVMUZGQz4pOyg8VTIxNEU+LDxVMjEzMj4pOy8KKyAgICg8VTIxNzA+LDxVMjE2MD4pOyg8VTIxNzE+LDxVMjE2MT4pOyg8VTIxNzI+LDxVMjE2Mj4pOyg8VTIxNzM+LDxVMjE2Mz4pOy8KKyAgICg8VTIxNzQ+LDxVMjE2ND4pOyg8VTIxNzU+LDxVMjE2NT4pOyg8VTIxNzY+LDxVMjE2Nj4pOyg8VTIxNzc+LDxVMjE2Nz4pOy8KKyAgICg8VTIxNzg+LDxVMjE2OD4pOyg8VTIxNzk+LDxVMjE2OT4pOyg8VTIxN0E+LDxVMjE2QT4pOyg8VTIxN0I+LDxVMjE2Qj4pOy8KKyAgICg8VTIxN0M+LDxVMjE2Qz4pOyg8VTIxN0Q+LDxVMjE2RD4pOyg8VTIxN0U+LDxVMjE2RT4pOyg8VTIxN0Y+LDxVMjE2Rj4pOy8KKyAgICg8VTIxODQ+LDxVMjE4Mz4pOyg8VTI0RDA+LDxVMjRCNj4pOyg8VTI0RDE+LDxVMjRCNz4pOyg8VTI0RDI+LDxVMjRCOD4pOy8KKyAgICg8VTI0RDM+LDxVMjRCOT4pOyg8VTI0RDQ+LDxVMjRCQT4pOyg8VTI0RDU+LDxVMjRCQj4pOyg8VTI0RDY+LDxVMjRCQz4pOy8KKyAgICg8VTI0RDc+LDxVMjRCRD4pOyg8VTI0RDg+LDxVMjRCRT4pOyg8VTI0RDk+LDxVMjRCRj4pOyg8VTI0REE+LDxVMjRDMD4pOy8KKyAgICg8VTI0REI+LDxVMjRDMT4pOyg8VTI0REM+LDxVMjRDMj4pOyg8VTI0REQ+LDxVMjRDMz4pOyg8VTI0REU+LDxVMjRDND4pOy8KKyAgICg8VTI0REY+LDxVMjRDNT4pOyg8VTI0RTA+LDxVMjRDNj4pOyg8VTI0RTE+LDxVMjRDNz4pOyg8VTI0RTI+LDxVMjRDOD4pOy8KKyAgICg8VTI0RTM+LDxVMjRDOT4pOyg8VTI0RTQ+LDxVMjRDQT4pOyg8VTI0RTU+LDxVMjRDQj4pOyg8VTI0RTY+LDxVMjRDQz4pOy8KKyAgICg8VTI0RTc+LDxVMjRDRD4pOyg8VTI0RTg+LDxVMjRDRT4pOyg8VTI0RTk+LDxVMjRDRj4pOyg8VTJDMzA+LDxVMkMwMD4pOy8KKyAgICg8VTJDMzE+LDxVMkMwMT4pOyg8VTJDMzI+LDxVMkMwMj4pOyg8VTJDMzM+LDxVMkMwMz4pOyg8VTJDMzQ+LDxVMkMwND4pOy8KKyAgICg8VTJDMzU+LDxVMkMwNT4pOyg8VTJDMzY+LDxVMkMwNj4pOyg8VTJDMzc+LDxVMkMwNz4pOyg8VTJDMzg+LDxVMkMwOD4pOy8KKyAgICg8VTJDMzk+LDxVMkMwOT4pOyg8VTJDM0E+LDxVMkMwQT4pOyg8VTJDM0I+LDxVMkMwQj4pOyg8VTJDM0M+LDxVMkMwQz4pOy8KKyAgICg8VTJDM0Q+LDxVMkMwRD4pOyg8VTJDM0U+LDxVMkMwRT4pOyg8VTJDM0Y+LDxVMkMwRj4pOyg8VTJDNDA+LDxVMkMxMD4pOy8KKyAgICg8VTJDNDE+LDxVMkMxMT4pOyg8VTJDNDI+LDxVMkMxMj4pOyg8VTJDNDM+LDxVMkMxMz4pOyg8VTJDNDQ+LDxVMkMxND4pOy8KKyAgICg8VTJDNDU+LDxVMkMxNT4pOyg8VTJDNDY+LDxVMkMxNj4pOyg8VTJDNDc+LDxVMkMxNz4pOyg8VTJDNDg+LDxVMkMxOD4pOy8KKyAgICg8VTJDNDk+LDxVMkMxOT4pOyg8VTJDNEE+LDxVMkMxQT4pOyg8VTJDNEI+LDxVMkMxQj4pOyg8VTJDNEM+LDxVMkMxQz4pOy8KKyAgICg8VTJDNEQ+LDxVMkMxRD4pOyg8VTJDNEU+LDxVMkMxRT4pOyg8VTJDNEY+LDxVMkMxRj4pOyg8VTJDNTA+LDxVMkMyMD4pOy8KKyAgICg8VTJDNTE+LDxVMkMyMT4pOyg8VTJDNTI+LDxVMkMyMj4pOyg8VTJDNTM+LDxVMkMyMz4pOyg8VTJDNTQ+LDxVMkMyND4pOy8KKyAgICg8VTJDNTU+LDxVMkMyNT4pOyg8VTJDNTY+LDxVMkMyNj4pOyg8VTJDNTc+LDxVMkMyNz4pOyg8VTJDNTg+LDxVMkMyOD4pOy8KKyAgICg8VTJDNTk+LDxVMkMyOT4pOyg8VTJDNUE+LDxVMkMyQT4pOyg8VTJDNUI+LDxVMkMyQj4pOyg8VTJDNUM+LDxVMkMyQz4pOy8KKyAgICg8VTJDNUQ+LDxVMkMyRD4pOyg8VTJDNUU+LDxVMkMyRT4pOyg8VTJDNjE+LDxVMkM2MD4pOyg8VTJDNjU+LDxVMDIzQT4pOy8KKyAgICg8VTJDNjY+LDxVMDIzRT4pOyg8VTJDNjg+LDxVMkM2Nz4pOyg8VTJDNkE+LDxVMkM2OT4pOyg8VTJDNkM+LDxVMkM2Qj4pOy8KKyAgICg8VTJDNzM+LDxVMkM3Mj4pOy8KKyAgICg8VTJDNzY+LDxVMkM3NT4pOyg8VTJDODE+LDxVMkM4MD4pOyg8VTJDODM+LDxVMkM4Mj4pOyg8VTJDODU+LDxVMkM4ND4pOy8KKyAgICg8VTJDODc+LDxVMkM4Nj4pOyg8VTJDODk+LDxVMkM4OD4pOyg8VTJDOEI+LDxVMkM4QT4pOyg8VTJDOEQ+LDxVMkM4Qz4pOy8KKyAgICg8VTJDOEY+LDxVMkM4RT4pOyg8VTJDOTE+LDxVMkM5MD4pOyg8VTJDOTM+LDxVMkM5Mj4pOyg8VTJDOTU+LDxVMkM5ND4pOy8KKyAgICg8VTJDOTc+LDxVMkM5Nj4pOyg8VTJDOTk+LDxVMkM5OD4pOyg8VTJDOUI+LDxVMkM5QT4pOyg8VTJDOUQ+LDxVMkM5Qz4pOy8KKyAgICg8VTJDOUY+LDxVMkM5RT4pOyg8VTJDQTE+LDxVMkNBMD4pOyg8VTJDQTM+LDxVMkNBMj4pOyg8VTJDQTU+LDxVMkNBND4pOy8KKyAgICg8VTJDQTc+LDxVMkNBNj4pOyg8VTJDQTk+LDxVMkNBOD4pOyg8VTJDQUI+LDxVMkNBQT4pOyg8VTJDQUQ+LDxVMkNBQz4pOy8KKyAgICg8VTJDQUY+LDxVMkNBRT4pOyg8VTJDQjE+LDxVMkNCMD4pOyg8VTJDQjM+LDxVMkNCMj4pOyg8VTJDQjU+LDxVMkNCND4pOy8KKyAgICg8VTJDQjc+LDxVMkNCNj4pOyg8VTJDQjk+LDxVMkNCOD4pOyg8VTJDQkI+LDxVMkNCQT4pOyg8VTJDQkQ+LDxVMkNCQz4pOy8KKyAgICg8VTJDQkY+LDxVMkNCRT4pOyg8VTJDQzE+LDxVMkNDMD4pOyg8VTJDQzM+LDxVMkNDMj4pOyg8VTJDQzU+LDxVMkNDND4pOy8KKyAgICg8VTJDQzc+LDxVMkNDNj4pOyg8VTJDQzk+LDxVMkNDOD4pOyg8VTJDQ0I+LDxVMkNDQT4pOyg8VTJDQ0Q+LDxVMkNDQz4pOy8KKyAgICg8VTJDQ0Y+LDxVMkNDRT4pOyg8VTJDRDE+LDxVMkNEMD4pOyg8VTJDRDM+LDxVMkNEMj4pOyg8VTJDRDU+LDxVMkNEND4pOy8KKyAgICg8VTJDRDc+LDxVMkNENj4pOyg8VTJDRDk+LDxVMkNEOD4pOyg8VTJDREI+LDxVMkNEQT4pOyg8VTJDREQ+LDxVMkNEQz4pOy8KKyAgICg8VTJDREY+LDxVMkNERT4pOyg8VTJDRTE+LDxVMkNFMD4pOyg8VTJDRTM+LDxVMkNFMj4pOyg8VTJEMDA+LDxVMTBBMD4pOy8KKyAgICg8VTJEMDE+LDxVMTBBMT4pOyg8VTJEMDI+LDxVMTBBMj4pOyg8VTJEMDM+LDxVMTBBMz4pOyg8VTJEMDQ+LDxVMTBBND4pOy8KKyAgICg8VTJEMDU+LDxVMTBBNT4pOyg8VTJEMDY+LDxVMTBBNj4pOyg8VTJEMDc+LDxVMTBBNz4pOyg8VTJEMDg+LDxVMTBBOD4pOy8KKyAgICg8VTJEMDk+LDxVMTBBOT4pOyg8VTJEMEE+LDxVMTBBQT4pOyg8VTJEMEI+LDxVMTBBQj4pOyg8VTJEMEM+LDxVMTBBQz4pOy8KKyAgICg8VTJEMEQ+LDxVMTBBRD4pOyg8VTJEMEU+LDxVMTBBRT4pOyg8VTJEMEY+LDxVMTBBRj4pOyg8VTJEMTA+LDxVMTBCMD4pOy8KKyAgICg8VTJEMTE+LDxVMTBCMT4pOyg8VTJEMTI+LDxVMTBCMj4pOyg8VTJEMTM+LDxVMTBCMz4pOyg8VTJEMTQ+LDxVMTBCND4pOy8KKyAgICg8VTJEMTU+LDxVMTBCNT4pOyg8VTJEMTY+LDxVMTBCNj4pOyg8VTJEMTc+LDxVMTBCNz4pOyg8VTJEMTg+LDxVMTBCOD4pOy8KKyAgICg8VTJEMTk+LDxVMTBCOT4pOyg8VTJEMUE+LDxVMTBCQT4pOyg8VTJEMUI+LDxVMTBCQj4pOyg8VTJEMUM+LDxVMTBCQz4pOy8KKyAgICg8VTJEMUQ+LDxVMTBCRD4pOyg8VTJEMUU+LDxVMTBCRT4pOyg8VTJEMUY+LDxVMTBCRj4pOyg8VTJEMjA+LDxVMTBDMD4pOy8KKyAgICg8VTJEMjE+LDxVMTBDMT4pOyg8VTJEMjI+LDxVMTBDMj4pOyg8VTJEMjM+LDxVMTBDMz4pOyg8VTJEMjQ+LDxVMTBDND4pOy8KKyAgICg8VTJEMjU+LDxVMTBDNT4pOyg8VUZGNDE+LDxVRkYyMT4pOyg8VUZGNDI+LDxVRkYyMj4pOyg8VUZGNDM+LDxVRkYyMz4pOy8KKyAgICg8VUZGNDQ+LDxVRkYyND4pOyg8VUZGNDU+LDxVRkYyNT4pOyg8VUZGNDY+LDxVRkYyNj4pOyg8VUZGNDc+LDxVRkYyNz4pOy8KKyAgICg8VUZGNDg+LDxVRkYyOD4pOyg8VUZGNDk+LDxVRkYyOT4pOyg8VUZGNEE+LDxVRkYyQT4pOyg8VUZGNEI+LDxVRkYyQj4pOy8KKyAgICg8VUZGNEM+LDxVRkYyQz4pOyg8VUZGNEQ+LDxVRkYyRD4pOyg8VUZGNEU+LDxVRkYyRT4pOyg8VUZGNEY+LDxVRkYyRj4pOy8KKyAgICg8VUZGNTA+LDxVRkYzMD4pOyg8VUZGNTE+LDxVRkYzMT4pOyg8VUZGNTI+LDxVRkYzMj4pOyg8VUZGNTM+LDxVRkYzMz4pOy8KKyAgICg8VUZGNTQ+LDxVRkYzND4pOyg8VUZGNTU+LDxVRkYzNT4pOyg8VUZGNTY+LDxVRkYzNj4pOyg8VUZGNTc+LDxVRkYzNz4pOy8KKyAgICg8VUZGNTg+LDxVRkYzOD4pOyg8VUZGNTk+LDxVRkYzOT4pOyg8VUZGNUE+LDxVRkYzQT4pOy8KKyAgICg8VTAwMDEwNDI4Piw8VTAwMDEwNDAwPik7KDxVMDAwMTA0Mjk+LDxVMDAwMTA0MDE+KTsvCisgICAoPFUwMDAxMDQyQT4sPFUwMDAxMDQwMj4pOyg8VTAwMDEwNDJCPiw8VTAwMDEwNDAzPik7LworICAgKDxVMDAwMTA0MkM+LDxVMDAwMTA0MDQ+KTsoPFUwMDAxMDQyRD4sPFUwMDAxMDQwNT4pOy8KKyAgICg8VTAwMDEwNDJFPiw8VTAwMDEwNDA2Pik7KDxVMDAwMTA0MkY+LDxVMDAwMTA0MDc+KTsvCisgICAoPFUwMDAxMDQzMD4sPFUwMDAxMDQwOD4pOyg8VTAwMDEwNDMxPiw8VTAwMDEwNDA5Pik7LworICAgKDxVMDAwMTA0MzI+LDxVMDAwMTA0MEE+KTsoPFUwMDAxMDQzMz4sPFUwMDAxMDQwQj4pOy8KKyAgICg8VTAwMDEwNDM0Piw8VTAwMDEwNDBDPik7KDxVMDAwMTA0MzU+LDxVMDAwMTA0MEQ+KTsvCisgICAoPFUwMDAxMDQzNj4sPFUwMDAxMDQwRT4pOyg8VTAwMDEwNDM3Piw8VTAwMDEwNDBGPik7LworICAgKDxVMDAwMTA0Mzg+LDxVMDAwMTA0MTA+KTsoPFUwMDAxMDQzOT4sPFUwMDAxMDQxMT4pOy8KKyAgICg8VTAwMDEwNDNBPiw8VTAwMDEwNDEyPik7KDxVMDAwMTA0M0I+LDxVMDAwMTA0MTM+KTsvCisgICAoPFUwMDAxMDQzQz4sPFUwMDAxMDQxND4pOyg8VTAwMDEwNDNEPiw8VTAwMDEwNDE1Pik7LworICAgKDxVMDAwMTA0M0U+LDxVMDAwMTA0MTY+KTsoPFUwMDAxMDQzRj4sPFUwMDAxMDQxNz4pOy8KKyAgICg8VTAwMDEwNDQwPiw8VTAwMDEwNDE4Pik7KDxVMDAwMTA0NDE+LDxVMDAwMTA0MTk+KTsvCisgICAoPFUwMDAxMDQ0Mj4sPFUwMDAxMDQxQT4pOyg8VTAwMDEwNDQzPiw8VTAwMDEwNDFCPik7LworICAgKDxVMDAwMTA0NDQ+LDxVMDAwMTA0MUM+KTsoPFUwMDAxMDQ0NT4sPFUwMDAxMDQxRD4pOy8KKyAgICg8VTAwMDEwNDQ2Piw8VTAwMDEwNDFFPik7KDxVMDAwMTA0NDc+LDxVMDAwMTA0MUY+KTsvCisgICAoPFUwMDAxMDQ0OD4sPFUwMDAxMDQyMD4pOyg8VTAwMDEwNDQ5Piw8VTAwMDEwNDIxPik7LworICAgKDxVMDAwMTA0NEE+LDxVMDAwMTA0MjI+KTsoPFUwMDAxMDQ0Qj4sPFUwMDAxMDQyMz4pOy8KKyAgICg8VTAwMDEwNDRDPiw8VTAwMDEwNDI0Pik7KDxVMDAwMTA0NEQ+LDxVMDAwMTA0MjU+KTsvCisgICAoPFUwMDAxMDQ0RT4sPFUwMDAxMDQyNj4pOyg8VTAwMDEwNDRGPiw8VTAwMDEwNDI3PikKKwordG9sb3dlciAvCisgICAoPFUwMDQxPiw8VTAwNjE+KTsoPFUwMDQyPiw8VTAwNjI+KTsoPFUwMDQzPiw8VTAwNjM+KTsoPFUwMDQ0Piw8VTAwNjQ+KTsvCisgICAoPFUwMDQ1Piw8VTAwNjU+KTsoPFUwMDQ2Piw8VTAwNjY+KTsoPFUwMDQ3Piw8VTAwNjc+KTsoPFUwMDQ4Piw8VTAwNjg+KTsvCisgICAoPFUwMDQ5Piw8VTAwNjk+KTsoPFUwMDRBPiw8VTAwNkE+KTsoPFUwMDRCPiw8VTAwNkI+KTsoPFUwMDRDPiw8VTAwNkM+KTsvCisgICAoPFUwMDREPiw8VTAwNkQ+KTsoPFUwMDRFPiw8VTAwNkU+KTsoPFUwMDRGPiw8VTAwNkY+KTsoPFUwMDUwPiw8VTAwNzA+KTsvCisgICAoPFUwMDUxPiw8VTAwNzE+KTsoPFUwMDUyPiw8VTAwNzI+KTsoPFUwMDUzPiw8VTAwNzM+KTsoPFUwMDU0Piw8VTAwNzQ+KTsvCisgICAoPFUwMDU1Piw8VTAwNzU+KTsoPFUwMDU2Piw8VTAwNzY+KTsoPFUwMDU3Piw8VTAwNzc+KTsoPFUwMDU4Piw8VTAwNzg+KTsvCisgICAoPFUwMDU5Piw8VTAwNzk+KTsoPFUwMDVBPiw8VTAwN0E+KTsoPFUwMEMwPiw8VTAwRTA+KTsoPFUwMEMxPiw8VTAwRTE+KTsvCisgICAoPFUwMEMyPiw8VTAwRTI+KTsoPFUwMEMzPiw8VTAwRTM+KTsoPFUwMEM0Piw8VTAwRTQ+KTsoPFUwMEM1Piw8VTAwRTU+KTsvCisgICAoPFUwMEM2Piw8VTAwRTY+KTsoPFUwMEM3Piw8VTAwRTc+KTsoPFUwMEM4Piw8VTAwRTg+KTsoPFUwMEM5Piw8VTAwRTk+KTsvCisgICAoPFUwMENBPiw8VTAwRUE+KTsoPFUwMENCPiw8VTAwRUI+KTsoPFUwMENDPiw8VTAwRUM+KTsoPFUwMENEPiw8VTAwRUQ+KTsvCisgICAoPFUwMENFPiw8VTAwRUU+KTsoPFUwMENGPiw8VTAwRUY+KTsoPFUwMEQwPiw8VTAwRjA+KTsoPFUwMEQxPiw8VTAwRjE+KTsvCisgICAoPFUwMEQyPiw8VTAwRjI+KTsoPFUwMEQzPiw8VTAwRjM+KTsoPFUwMEQ0Piw8VTAwRjQ+KTsoPFUwMEQ1Piw8VTAwRjU+KTsvCisgICAoPFUwMEQ2Piw8VTAwRjY+KTsoPFUwMEQ4Piw8VTAwRjg+KTsoPFUwMEQ5Piw8VTAwRjk+KTsoPFUwMERBPiw8VTAwRkE+KTsvCisgICAoPFUwMERCPiw8VTAwRkI+KTsoPFUwMERDPiw8VTAwRkM+KTsoPFUwMEREPiw8VTAwRkQ+KTsoPFUwMERFPiw8VTAwRkU+KTsvCisgICAoPFUwMTAwPiw8VTAxMDE+KTsoPFUwMTAyPiw8VTAxMDM+KTsoPFUwMTA0Piw8VTAxMDU+KTsoPFUwMTA2Piw8VTAxMDc+KTsvCisgICAoPFUwMTA4Piw8VTAxMDk+KTsoPFUwMTBBPiw8VTAxMEI+KTsoPFUwMTBDPiw8VTAxMEQ+KTsoPFUwMTBFPiw8VTAxMEY+KTsvCisgICAoPFUwMTEwPiw8VTAxMTE+KTsoPFUwMTEyPiw8VTAxMTM+KTsoPFUwMTE0Piw8VTAxMTU+KTsoPFUwMTE2Piw8VTAxMTc+KTsvCisgICAoPFUwMTE4Piw8VTAxMTk+KTsoPFUwMTFBPiw8VTAxMUI+KTsoPFUwMTFDPiw8VTAxMUQ+KTsoPFUwMTFFPiw8VTAxMUY+KTsvCisgICAoPFUwMTIwPiw8VTAxMjE+KTsoPFUwMTIyPiw8VTAxMjM+KTsoPFUwMTI0Piw8VTAxMjU+KTsoPFUwMTI2Piw8VTAxMjc+KTsvCisgICAoPFUwMTI4Piw8VTAxMjk+KTsoPFUwMTJBPiw8VTAxMkI+KTsoPFUwMTJDPiw8VTAxMkQ+KTsoPFUwMTJFPiw8VTAxMkY+KTsvCisgICAoPFUwMTMwPiw8VTAwNjk+KTsoPFUwMTMyPiw8VTAxMzM+KTsoPFUwMTM0Piw8VTAxMzU+KTsoPFUwMTM2Piw8VTAxMzc+KTsvCisgICAoPFUwMTM5Piw8VTAxM0E+KTsoPFUwMTNCPiw8VTAxM0M+KTsoPFUwMTNEPiw8VTAxM0U+KTsoPFUwMTNGPiw8VTAxNDA+KTsvCisgICAoPFUwMTQxPiw8VTAxNDI+KTsoPFUwMTQzPiw8VTAxNDQ+KTsoPFUwMTQ1Piw8VTAxNDY+KTsoPFUwMTQ3Piw8VTAxNDg+KTsvCisgICAoPFUwMTRBPiw8VTAxNEI+KTsoPFUwMTRDPiw8VTAxNEQ+KTsoPFUwMTRFPiw8VTAxNEY+KTsoPFUwMTUwPiw8VTAxNTE+KTsvCisgICAoPFUwMTUyPiw8VTAxNTM+KTsoPFUwMTU0Piw8VTAxNTU+KTsoPFUwMTU2Piw8VTAxNTc+KTsoPFUwMTU4Piw8VTAxNTk+KTsvCisgICAoPFUwMTVBPiw8VTAxNUI+KTsoPFUwMTVDPiw8VTAxNUQ+KTsoPFUwMTVFPiw8VTAxNUY+KTsoPFUwMTYwPiw8VTAxNjE+KTsvCisgICAoPFUwMTYyPiw8VTAxNjM+KTsoPFUwMTY0Piw8VTAxNjU+KTsoPFUwMTY2Piw8VTAxNjc+KTsoPFUwMTY4Piw8VTAxNjk+KTsvCisgICAoPFUwMTZBPiw8VTAxNkI+KTsoPFUwMTZDPiw8VTAxNkQ+KTsoPFUwMTZFPiw8VTAxNkY+KTsoPFUwMTcwPiw8VTAxNzE+KTsvCisgICAoPFUwMTcyPiw8VTAxNzM+KTsoPFUwMTc0Piw8VTAxNzU+KTsoPFUwMTc2Piw8VTAxNzc+KTsoPFUwMTc4Piw8VTAwRkY+KTsvCisgICAoPFUwMTc5Piw8VTAxN0E+KTsoPFUwMTdCPiw8VTAxN0M+KTsoPFUwMTdEPiw8VTAxN0U+KTsoPFUwMTgxPiw8VTAyNTM+KTsvCisgICAoPFUwMTgyPiw8VTAxODM+KTsoPFUwMTg0Piw8VTAxODU+KTsoPFUwMTg2Piw8VTAyNTQ+KTsoPFUwMTg3Piw8VTAxODg+KTsvCisgICAoPFUwMTg5Piw8VTAyNTY+KTsoPFUwMThBPiw8VTAyNTc+KTsoPFUwMThCPiw8VTAxOEM+KTsoPFUwMThFPiw8VTAxREQ+KTsvCisgICAoPFUwMThGPiw8VTAyNTk+KTsoPFUwMTkwPiw8VTAyNUI+KTsoPFUwMTkxPiw8VTAxOTI+KTsoPFUwMTkzPiw8VTAyNjA+KTsvCisgICAoPFUwMTk0Piw8VTAyNjM+KTsoPFUwMTk2Piw8VTAyNjk+KTsoPFUwMTk3Piw8VTAyNjg+KTsoPFUwMTk4Piw8VTAxOTk+KTsvCisgICAoPFUwMTlDPiw8VTAyNkY+KTsoPFUwMTlEPiw8VTAyNzI+KTsoPFUwMTlGPiw8VTAyNzU+KTsoPFUwMUEwPiw8VTAxQTE+KTsvCisgICAoPFUwMUEyPiw8VTAxQTM+KTsoPFUwMUE0Piw8VTAxQTU+KTsoPFUwMUE2Piw8VTAyODA+KTsoPFUwMUE3Piw8VTAxQTg+KTsvCisgICAoPFUwMUE5Piw8VTAyODM+KTsoPFUwMUFDPiw8VTAxQUQ+KTsoPFUwMUFFPiw8VTAyODg+KTsoPFUwMUFGPiw8VTAxQjA+KTsvCisgICAoPFUwMUIxPiw8VTAyOEE+KTsoPFUwMUIyPiw8VTAyOEI+KTsoPFUwMUIzPiw8VTAxQjQ+KTsoPFUwMUI1Piw8VTAxQjY+KTsvCisgICAoPFUwMUI3Piw8VTAyOTI+KTsoPFUwMUI4Piw8VTAxQjk+KTsoPFUwMUJDPiw8VTAxQkQ+KTsoPFUwMUM0Piw8VTAxQzY+KTsvCisgICAoPFUwMUM1Piw8VTAxQzY+KTsoPFUwMUM3Piw8VTAxQzk+KTsoPFUwMUM4Piw8VTAxQzk+KTsoPFUwMUNBPiw8VTAxQ0M+KTsvCisgICAoPFUwMUNCPiw8VTAxQ0M+KTsoPFUwMUNEPiw8VTAxQ0U+KTsoPFUwMUNGPiw8VTAxRDA+KTsoPFUwMUQxPiw8VTAxRDI+KTsvCisgICAoPFUwMUQzPiw8VTAxRDQ+KTsoPFUwMUQ1Piw8VTAxRDY+KTsoPFUwMUQ3Piw8VTAxRDg+KTsoPFUwMUQ5Piw8VTAxREE+KTsvCisgICAoPFUwMURCPiw8VTAxREM+KTsoPFUwMURFPiw8VTAxREY+KTsoPFUwMUUwPiw8VTAxRTE+KTsoPFUwMUUyPiw8VTAxRTM+KTsvCisgICAoPFUwMUU0Piw8VTAxRTU+KTsoPFUwMUU2Piw8VTAxRTc+KTsoPFUwMUU4Piw8VTAxRTk+KTsoPFUwMUVBPiw8VTAxRUI+KTsvCisgICAoPFUwMUVDPiw8VTAxRUQ+KTsoPFUwMUVFPiw8VTAxRUY+KTsoPFUwMUYxPiw8VTAxRjM+KTsoPFUwMUYyPiw8VTAxRjM+KTsvCisgICAoPFUwMUY0Piw8VTAxRjU+KTsoPFUwMUY2Piw8VTAxOTU+KTsoPFUwMUY3Piw8VTAxQkY+KTsoPFUwMUY4Piw8VTAxRjk+KTsvCisgICAoPFUwMUZBPiw8VTAxRkI+KTsoPFUwMUZDPiw8VTAxRkQ+KTsoPFUwMUZFPiw8VTAxRkY+KTsoPFUwMjAwPiw8VTAyMDE+KTsvCisgICAoPFUwMjAyPiw8VTAyMDM+KTsoPFUwMjA0Piw8VTAyMDU+KTsoPFUwMjA2Piw8VTAyMDc+KTsoPFUwMjA4Piw8VTAyMDk+KTsvCisgICAoPFUwMjBBPiw8VTAyMEI+KTsoPFUwMjBDPiw8VTAyMEQ+KTsoPFUwMjBFPiw8VTAyMEY+KTsoPFUwMjEwPiw8VTAyMTE+KTsvCisgICAoPFUwMjEyPiw8VTAyMTM+KTsoPFUwMjE0Piw8VTAyMTU+KTsoPFUwMjE2Piw8VTAyMTc+KTsoPFUwMjE4Piw8VTAyMTk+KTsvCisgICAoPFUwMjFBPiw8VTAyMUI+KTsoPFUwMjFDPiw8VTAyMUQ+KTsoPFUwMjFFPiw8VTAyMUY+KTsoPFUwMjIwPiw8VTAxOUU+KTsvCisgICAoPFUwMjIyPiw8VTAyMjM+KTsoPFUwMjI0Piw8VTAyMjU+KTsoPFUwMjI2Piw8VTAyMjc+KTsoPFUwMjI4Piw8VTAyMjk+KTsvCisgICAoPFUwMjJBPiw8VTAyMkI+KTsoPFUwMjJDPiw8VTAyMkQ+KTsoPFUwMjJFPiw8VTAyMkY+KTsoPFUwMjMwPiw8VTAyMzE+KTsvCisgICAoPFUwMjMyPiw8VTAyMzM+KTsoPFUwMjNBPiw8VTJDNjU+KTsoPFUwMjNCPiw8VTAyM0M+KTsoPFUwMjNEPiw8VTAxOUE+KTsvCisgICAoPFUwMjNFPiw8VTJDNjY+KTsoPFUwMjQxPiw8VTAyNDI+KTsoPFUwMjQzPiw8VTAxODA+KTsoPFUwMjQ0Piw8VTAyODk+KTsvCisgICAoPFUwMjQ1Piw8VTAyOEM+KTsoPFUwMjQ2Piw8VTAyNDc+KTsoPFUwMjQ4Piw8VTAyNDk+KTsoPFUwMjRBPiw8VTAyNEI+KTsvCisgICAoPFUwMjRDPiw8VTAyNEQ+KTsoPFUwMjRFPiw8VTAyNEY+KTsoPFUwMzcwPiw8VTAzNzE+KTsoPFUwMzcyPiw8VTAzNzM+KTsvCisgICAoPFUwMzc2Piw8VTAzNzc+KTsoPFUwMzg2Piw8VTAzQUM+KTsoPFUwMzg4Piw8VTAzQUQ+KTsvCisgICAoPFUwMzg5Piw8VTAzQUU+KTsoPFUwMzhBPiw8VTAzQUY+KTsoPFUwMzhDPiw8VTAzQ0M+KTsoPFUwMzhFPiw8VTAzQ0Q+KTsvCisgICAoPFUwMzhGPiw8VTAzQ0U+KTsoPFUwMzkxPiw8VTAzQjE+KTsoPFUwMzkyPiw8VTAzQjI+KTsoPFUwMzkzPiw8VTAzQjM+KTsvCisgICAoPFUwMzk0Piw8VTAzQjQ+KTsoPFUwMzk1Piw8VTAzQjU+KTsoPFUwMzk2Piw8VTAzQjY+KTsoPFUwMzk3Piw8VTAzQjc+KTsvCisgICAoPFUwMzk4Piw8VTAzQjg+KTsoPFUwMzk5Piw8VTAzQjk+KTsoPFUwMzlBPiw8VTAzQkE+KTsoPFUwMzlCPiw8VTAzQkI+KTsvCisgICAoPFUwMzlDPiw8VTAzQkM+KTsoPFUwMzlEPiw8VTAzQkQ+KTsoPFUwMzlFPiw8VTAzQkU+KTsoPFUwMzlGPiw8VTAzQkY+KTsvCisgICAoPFUwM0EwPiw8VTAzQzA+KTsoPFUwM0ExPiw8VTAzQzE+KTsoPFUwM0EzPiw8VTAzQzM+KTsoPFUwM0E0Piw8VTAzQzQ+KTsvCisgICAoPFUwM0E1Piw8VTAzQzU+KTsoPFUwM0E2Piw8VTAzQzY+KTsoPFUwM0E3Piw8VTAzQzc+KTsoPFUwM0E4Piw8VTAzQzg+KTsvCisgICAoPFUwM0E5Piw8VTAzQzk+KTsoPFUwM0FBPiw8VTAzQ0E+KTsoPFUwM0FCPiw8VTAzQ0I+KTsoPFUwM0Q4Piw8VTAzRDk+KTsvCisgICAoPFUwM0RBPiw8VTAzREI+KTsoPFUwM0RDPiw8VTAzREQ+KTsoPFUwM0RFPiw8VTAzREY+KTsoPFUwM0UwPiw8VTAzRTE+KTsvCisgICAoPFUwM0UyPiw8VTAzRTM+KTsoPFUwM0U0Piw8VTAzRTU+KTsoPFUwM0U2Piw8VTAzRTc+KTsoPFUwM0U4Piw8VTAzRTk+KTsvCisgICAoPFUwM0VBPiw8VTAzRUI+KTsoPFUwM0VDPiw8VTAzRUQ+KTsoPFUwM0VFPiw8VTAzRUY+KTsoPFUwM0Y0Piw8VTAzQjg+KTsvCisgICAoPFUwM0Y3Piw8VTAzRjg+KTsoPFUwM0Y5Piw8VTAzRjI+KTsoPFUwM0ZBPiw8VTAzRkI+KTsoPFUwM0ZEPiw8VTAzN0I+KTsvCisgICAoPFUwM0ZFPiw8VTAzN0M+KTsoPFUwM0ZGPiw8VTAzN0Q+KTsoPFUwNDAwPiw8VTA0NTA+KTsoPFUwNDAxPiw8VTA0NTE+KTsvCisgICAoPFUwNDAyPiw8VTA0NTI+KTsoPFUwNDAzPiw8VTA0NTM+KTsoPFUwNDA0Piw8VTA0NTQ+KTsoPFUwNDA1Piw8VTA0NTU+KTsvCisgICAoPFUwNDA2Piw8VTA0NTY+KTsoPFUwNDA3Piw8VTA0NTc+KTsoPFUwNDA4Piw8VTA0NTg+KTsoPFUwNDA5Piw8VTA0NTk+KTsvCisgICAoPFUwNDBBPiw8VTA0NUE+KTsoPFUwNDBCPiw8VTA0NUI+KTsoPFUwNDBDPiw8VTA0NUM+KTsoPFUwNDBEPiw8VTA0NUQ+KTsvCisgICAoPFUwNDBFPiw8VTA0NUU+KTsoPFUwNDBGPiw8VTA0NUY+KTsoPFUwNDEwPiw8VTA0MzA+KTsoPFUwNDExPiw8VTA0MzE+KTsvCisgICAoPFUwNDEyPiw8VTA0MzI+KTsoPFUwNDEzPiw8VTA0MzM+KTsoPFUwNDE0Piw8VTA0MzQ+KTsoPFUwNDE1Piw8VTA0MzU+KTsvCisgICAoPFUwNDE2Piw8VTA0MzY+KTsoPFUwNDE3Piw8VTA0Mzc+KTsoPFUwNDE4Piw8VTA0Mzg+KTsoPFUwNDE5Piw8VTA0Mzk+KTsvCisgICAoPFUwNDFBPiw8VTA0M0E+KTsoPFUwNDFCPiw8VTA0M0I+KTsoPFUwNDFDPiw8VTA0M0M+KTsoPFUwNDFEPiw8VTA0M0Q+KTsvCisgICAoPFUwNDFFPiw8VTA0M0U+KTsoPFUwNDFGPiw8VTA0M0Y+KTsoPFUwNDIwPiw8VTA0NDA+KTsoPFUwNDIxPiw8VTA0NDE+KTsvCisgICAoPFUwNDIyPiw8VTA0NDI+KTsoPFUwNDIzPiw8VTA0NDM+KTsoPFUwNDI0Piw8VTA0NDQ+KTsoPFUwNDI1Piw8VTA0NDU+KTsvCisgICAoPFUwNDI2Piw8VTA0NDY+KTsoPFUwNDI3Piw8VTA0NDc+KTsoPFUwNDI4Piw8VTA0NDg+KTsoPFUwNDI5Piw8VTA0NDk+KTsvCisgICAoPFUwNDJBPiw8VTA0NEE+KTsoPFUwNDJCPiw8VTA0NEI+KTsoPFUwNDJDPiw8VTA0NEM+KTsoPFUwNDJEPiw8VTA0NEQ+KTsvCisgICAoPFUwNDJFPiw8VTA0NEU+KTsoPFUwNDJGPiw8VTA0NEY+KTsoPFUwNDYwPiw8VTA0NjE+KTsoPFUwNDYyPiw8VTA0NjM+KTsvCisgICAoPFUwNDY0Piw8VTA0NjU+KTsoPFUwNDY2Piw8VTA0Njc+KTsoPFUwNDY4Piw8VTA0Njk+KTsoPFUwNDZBPiw8VTA0NkI+KTsvCisgICAoPFUwNDZDPiw8VTA0NkQ+KTsoPFUwNDZFPiw8VTA0NkY+KTsoPFUwNDcwPiw8VTA0NzE+KTsoPFUwNDcyPiw8VTA0NzM+KTsvCisgICAoPFUwNDc0Piw8VTA0NzU+KTsoPFUwNDc2Piw8VTA0Nzc+KTsoPFUwNDc4Piw8VTA0Nzk+KTsoPFUwNDdBPiw8VTA0N0I+KTsvCisgICAoPFUwNDdDPiw8VTA0N0Q+KTsoPFUwNDdFPiw8VTA0N0Y+KTsoPFUwNDgwPiw8VTA0ODE+KTsoPFUwNDhBPiw8VTA0OEI+KTsvCisgICAoPFUwNDhDPiw8VTA0OEQ+KTsoPFUwNDhFPiw8VTA0OEY+KTsoPFUwNDkwPiw8VTA0OTE+KTsoPFUwNDkyPiw8VTA0OTM+KTsvCisgICAoPFUwNDk0Piw8VTA0OTU+KTsoPFUwNDk2Piw8VTA0OTc+KTsoPFUwNDk4Piw8VTA0OTk+KTsoPFUwNDlBPiw8VTA0OUI+KTsvCisgICAoPFUwNDlDPiw8VTA0OUQ+KTsoPFUwNDlFPiw8VTA0OUY+KTsoPFUwNEEwPiw8VTA0QTE+KTsoPFUwNEEyPiw8VTA0QTM+KTsvCisgICAoPFUwNEE0Piw8VTA0QTU+KTsoPFUwNEE2Piw8VTA0QTc+KTsoPFUwNEE4Piw8VTA0QTk+KTsoPFUwNEFBPiw8VTA0QUI+KTsvCisgICAoPFUwNEFDPiw8VTA0QUQ+KTsoPFUwNEFFPiw8VTA0QUY+KTsoPFUwNEIwPiw8VTA0QjE+KTsoPFUwNEIyPiw8VTA0QjM+KTsvCisgICAoPFUwNEI0Piw8VTA0QjU+KTsoPFUwNEI2Piw8VTA0Qjc+KTsoPFUwNEI4Piw8VTA0Qjk+KTsoPFUwNEJBPiw8VTA0QkI+KTsvCisgICAoPFUwNEJDPiw8VTA0QkQ+KTsoPFUwNEJFPiw8VTA0QkY+KTsoPFUwNEMwPiw8VTA0Q0Y+KTsoPFUwNEMxPiw8VTA0QzI+KTsvCisgICAoPFUwNEMzPiw8VTA0QzQ+KTsoPFUwNEM1Piw8VTA0QzY+KTsoPFUwNEM3Piw8VTA0Qzg+KTsoPFUwNEM5Piw8VTA0Q0E+KTsvCisgICAoPFUwNENCPiw8VTA0Q0M+KTsoPFUwNENEPiw8VTA0Q0U+KTsoPFUwNEQwPiw8VTA0RDE+KTsoPFUwNEQyPiw8VTA0RDM+KTsvCisgICAoPFUwNEQ0Piw8VTA0RDU+KTsoPFUwNEQ2Piw8VTA0RDc+KTsoPFUwNEQ4Piw8VTA0RDk+KTsoPFUwNERBPiw8VTA0REI+KTsvCisgICAoPFUwNERDPiw8VTA0REQ+KTsoPFUwNERFPiw8VTA0REY+KTsoPFUwNEUwPiw8VTA0RTE+KTsoPFUwNEUyPiw8VTA0RTM+KTsvCisgICAoPFUwNEU0Piw8VTA0RTU+KTsoPFUwNEU2Piw8VTA0RTc+KTsoPFUwNEU4Piw8VTA0RTk+KTsoPFUwNEVBPiw8VTA0RUI+KTsvCisgICAoPFUwNEVDPiw8VTA0RUQ+KTsoPFUwNEVFPiw8VTA0RUY+KTsoPFUwNEYwPiw8VTA0RjE+KTsoPFUwNEYyPiw8VTA0RjM+KTsvCisgICAoPFUwNEY0Piw8VTA0RjU+KTsoPFUwNEY2Piw8VTA0Rjc+KTsoPFUwNEY4Piw8VTA0Rjk+KTsoPFUwNEZBPiw8VTA0RkI+KTsvCisgICAoPFUwNEZDPiw8VTA0RkQ+KTsoPFUwNEZFPiw8VTA0RkY+KTsoPFUwNTAwPiw8VTA1MDE+KTsoPFUwNTAyPiw8VTA1MDM+KTsvCisgICAoPFUwNTA0Piw8VTA1MDU+KTsoPFUwNTA2Piw8VTA1MDc+KTsoPFUwNTA4Piw8VTA1MDk+KTsoPFUwNTBBPiw8VTA1MEI+KTsvCisgICAoPFUwNTBDPiw8VTA1MEQ+KTsoPFUwNTBFPiw8VTA1MEY+KTsoPFUwNTEwPiw8VTA1MTE+KTsoPFUwNTEyPiw8VTA1MTM+KTsvCisgICAoPFUwNTE0Piw8VTA1MTU+KTsoPFUwNTE2Piw8VTA1MTc+KTsoPFUwNTE4Piw8VTA1MTk+KTsoPFUwNTFBPiw8VTA1MUI+KTsvCisgICAoPFUwNTFDPiw8VTA1MUQ+KTsoPFUwNTFFPiw8VTA1MUY+KTsoPFUwNTIwPiw8VTA1MjE+KTsoPFUwNTIyPiw8VTA1MjM+KTsvCisgICAoPFUwNTMxPiw8VTA1NjE+KTsoPFUwNTMyPiw8VTA1NjI+KTsoPFUwNTMzPiw8VTA1NjM+KTsoPFUwNTM0Piw8VTA1NjQ+KTsvCisgICAoPFUwNTM1Piw8VTA1NjU+KTsoPFUwNTM2Piw8VTA1NjY+KTsoPFUwNTM3Piw8VTA1Njc+KTsoPFUwNTM4Piw8VTA1Njg+KTsvCisgICAoPFUwNTM5Piw8VTA1Njk+KTsoPFUwNTNBPiw8VTA1NkE+KTsoPFUwNTNCPiw8VTA1NkI+KTsoPFUwNTNDPiw8VTA1NkM+KTsvCisgICAoPFUwNTNEPiw8VTA1NkQ+KTsoPFUwNTNFPiw8VTA1NkU+KTsoPFUwNTNGPiw8VTA1NkY+KTsoPFUwNTQwPiw8VTA1NzA+KTsvCisgICAoPFUwNTQxPiw8VTA1NzE+KTsoPFUwNTQyPiw8VTA1NzI+KTsoPFUwNTQzPiw8VTA1NzM+KTsoPFUwNTQ0Piw8VTA1NzQ+KTsvCisgICAoPFUwNTQ1Piw8VTA1NzU+KTsoPFUwNTQ2Piw8VTA1NzY+KTsoPFUwNTQ3Piw8VTA1Nzc+KTsoPFUwNTQ4Piw8VTA1Nzg+KTsvCisgICAoPFUwNTQ5Piw8VTA1Nzk+KTsoPFUwNTRBPiw8VTA1N0E+KTsoPFUwNTRCPiw8VTA1N0I+KTsoPFUwNTRDPiw8VTA1N0M+KTsvCisgICAoPFUwNTREPiw8VTA1N0Q+KTsoPFUwNTRFPiw8VTA1N0U+KTsoPFUwNTRGPiw8VTA1N0Y+KTsoPFUwNTUwPiw8VTA1ODA+KTsvCisgICAoPFUwNTUxPiw8VTA1ODE+KTsoPFUwNTUyPiw8VTA1ODI+KTsoPFUwNTUzPiw8VTA1ODM+KTsoPFUwNTU0Piw8VTA1ODQ+KTsvCisgICAoPFUwNTU1Piw8VTA1ODU+KTsoPFUwNTU2Piw8VTA1ODY+KTsoPFUxMEEwPiw8VTJEMDA+KTsoPFUxMEExPiw8VTJEMDE+KTsvCisgICAoPFUxMEEyPiw8VTJEMDI+KTsoPFUxMEEzPiw8VTJEMDM+KTsoPFUxMEE0Piw8VTJEMDQ+KTsoPFUxMEE1Piw8VTJEMDU+KTsvCisgICAoPFUxMEE2Piw8VTJEMDY+KTsoPFUxMEE3Piw8VTJEMDc+KTsoPFUxMEE4Piw8VTJEMDg+KTsoPFUxMEE5Piw8VTJEMDk+KTsvCisgICAoPFUxMEFBPiw8VTJEMEE+KTsoPFUxMEFCPiw8VTJEMEI+KTsoPFUxMEFDPiw8VTJEMEM+KTsoPFUxMEFEPiw8VTJEMEQ+KTsvCisgICAoPFUxMEFFPiw8VTJEMEU+KTsoPFUxMEFGPiw8VTJEMEY+KTsoPFUxMEIwPiw8VTJEMTA+KTsoPFUxMEIxPiw8VTJEMTE+KTsvCisgICAoPFUxMEIyPiw8VTJEMTI+KTsoPFUxMEIzPiw8VTJEMTM+KTsoPFUxMEI0Piw8VTJEMTQ+KTsoPFUxMEI1Piw8VTJEMTU+KTsvCisgICAoPFUxMEI2Piw8VTJEMTY+KTsoPFUxMEI3Piw8VTJEMTc+KTsoPFUxMEI4Piw8VTJEMTg+KTsoPFUxMEI5Piw8VTJEMTk+KTsvCisgICAoPFUxMEJBPiw8VTJEMUE+KTsoPFUxMEJCPiw8VTJEMUI+KTsoPFUxMEJDPiw8VTJEMUM+KTsoPFUxMEJEPiw8VTJEMUQ+KTsvCisgICAoPFUxMEJFPiw8VTJEMUU+KTsoPFUxMEJGPiw8VTJEMUY+KTsoPFUxMEMwPiw8VTJEMjA+KTsoPFUxMEMxPiw8VTJEMjE+KTsvCisgICAoPFUxMEMyPiw8VTJEMjI+KTsoPFUxMEMzPiw8VTJEMjM+KTsoPFUxMEM0Piw8VTJEMjQ+KTsoPFUxMEM1Piw8VTJEMjU+KTsvCisgICAoPFUxRTAwPiw8VTFFMDE+KTsoPFUxRTAyPiw8VTFFMDM+KTsoPFUxRTA0Piw8VTFFMDU+KTsoPFUxRTA2Piw8VTFFMDc+KTsvCisgICAoPFUxRTA4Piw8VTFFMDk+KTsoPFUxRTBBPiw8VTFFMEI+KTsoPFUxRTBDPiw8VTFFMEQ+KTsoPFUxRTBFPiw8VTFFMEY+KTsvCisgICAoPFUxRTEwPiw8VTFFMTE+KTsoPFUxRTEyPiw8VTFFMTM+KTsoPFUxRTE0Piw8VTFFMTU+KTsoPFUxRTE2Piw8VTFFMTc+KTsvCisgICAoPFUxRTE4Piw8VTFFMTk+KTsoPFUxRTFBPiw8VTFFMUI+KTsoPFUxRTFDPiw8VTFFMUQ+KTsoPFUxRTFFPiw8VTFFMUY+KTsvCisgICAoPFUxRTIwPiw8VTFFMjE+KTsoPFUxRTIyPiw8VTFFMjM+KTsoPFUxRTI0Piw8VTFFMjU+KTsoPFUxRTI2Piw8VTFFMjc+KTsvCisgICAoPFUxRTI4Piw8VTFFMjk+KTsoPFUxRTJBPiw8VTFFMkI+KTsoPFUxRTJDPiw8VTFFMkQ+KTsoPFUxRTJFPiw8VTFFMkY+KTsvCisgICAoPFUxRTMwPiw8VTFFMzE+KTsoPFUxRTMyPiw8VTFFMzM+KTsoPFUxRTM0Piw8VTFFMzU+KTsoPFUxRTM2Piw8VTFFMzc+KTsvCisgICAoPFUxRTM4Piw8VTFFMzk+KTsoPFUxRTNBPiw8VTFFM0I+KTsoPFUxRTNDPiw8VTFFM0Q+KTsoPFUxRTNFPiw8VTFFM0Y+KTsvCisgICAoPFUxRTQwPiw8VTFFNDE+KTsoPFUxRTQyPiw8VTFFNDM+KTsoPFUxRTQ0Piw8VTFFNDU+KTsoPFUxRTQ2Piw8VTFFNDc+KTsvCisgICAoPFUxRTQ4Piw8VTFFNDk+KTsoPFUxRTRBPiw8VTFFNEI+KTsoPFUxRTRDPiw8VTFFNEQ+KTsoPFUxRTRFPiw8VTFFNEY+KTsvCisgICAoPFUxRTUwPiw8VTFFNTE+KTsoPFUxRTUyPiw8VTFFNTM+KTsoPFUxRTU0Piw8VTFFNTU+KTsoPFUxRTU2Piw8VTFFNTc+KTsvCisgICAoPFUxRTU4Piw8VTFFNTk+KTsoPFUxRTVBPiw8VTFFNUI+KTsoPFUxRTVDPiw8VTFFNUQ+KTsoPFUxRTVFPiw8VTFFNUY+KTsvCisgICAoPFUxRTYwPiw8VTFFNjE+KTsoPFUxRTYyPiw8VTFFNjM+KTsoPFUxRTY0Piw8VTFFNjU+KTsoPFUxRTY2Piw8VTFFNjc+KTsvCisgICAoPFUxRTY4Piw8VTFFNjk+KTsoPFUxRTZBPiw8VTFFNkI+KTsoPFUxRTZDPiw8VTFFNkQ+KTsoPFUxRTZFPiw8VTFFNkY+KTsvCisgICAoPFUxRTcwPiw8VTFFNzE+KTsoPFUxRTcyPiw8VTFFNzM+KTsoPFUxRTc0Piw8VTFFNzU+KTsoPFUxRTc2Piw8VTFFNzc+KTsvCisgICAoPFUxRTc4Piw8VTFFNzk+KTsoPFUxRTdBPiw8VTFFN0I+KTsoPFUxRTdDPiw8VTFFN0Q+KTsoPFUxRTdFPiw8VTFFN0Y+KTsvCisgICAoPFUxRTgwPiw8VTFFODE+KTsoPFUxRTgyPiw8VTFFODM+KTsoPFUxRTg0Piw8VTFFODU+KTsoPFUxRTg2Piw8VTFFODc+KTsvCisgICAoPFUxRTg4Piw8VTFFODk+KTsoPFUxRThBPiw8VTFFOEI+KTsoPFUxRThDPiw8VTFFOEQ+KTsoPFUxRThFPiw8VTFFOEY+KTsvCisgICAoPFUxRTkwPiw8VTFFOTE+KTsoPFUxRTkyPiw8VTFFOTM+KTsoPFUxRTk0Piw8VTFFOTU+KTsoPFUxRTlFPiw8VTAwREY+KTsvCisgICAoPFUxRUEwPiw8VTFFQTE+KTsvCisgICAoPFUxRUEyPiw8VTFFQTM+KTsoPFUxRUE0Piw8VTFFQTU+KTsoPFUxRUE2Piw8VTFFQTc+KTsoPFUxRUE4Piw8VTFFQTk+KTsvCisgICAoPFUxRUFBPiw8VTFFQUI+KTsoPFUxRUFDPiw8VTFFQUQ+KTsoPFUxRUFFPiw8VTFFQUY+KTsoPFUxRUIwPiw8VTFFQjE+KTsvCisgICAoPFUxRUIyPiw8VTFFQjM+KTsoPFUxRUI0Piw8VTFFQjU+KTsoPFUxRUI2Piw8VTFFQjc+KTsoPFUxRUI4Piw8VTFFQjk+KTsvCisgICAoPFUxRUJBPiw8VTFFQkI+KTsoPFUxRUJDPiw8VTFFQkQ+KTsoPFUxRUJFPiw8VTFFQkY+KTsoPFUxRUMwPiw8VTFFQzE+KTsvCisgICAoPFUxRUMyPiw8VTFFQzM+KTsoPFUxRUM0Piw8VTFFQzU+KTsoPFUxRUM2Piw8VTFFQzc+KTsoPFUxRUM4Piw8VTFFQzk+KTsvCisgICAoPFUxRUNBPiw8VTFFQ0I+KTsoPFUxRUNDPiw8VTFFQ0Q+KTsoPFUxRUNFPiw8VTFFQ0Y+KTsoPFUxRUQwPiw8VTFFRDE+KTsvCisgICAoPFUxRUQyPiw8VTFFRDM+KTsoPFUxRUQ0Piw8VTFFRDU+KTsoPFUxRUQ2Piw8VTFFRDc+KTsoPFUxRUQ4Piw8VTFFRDk+KTsvCisgICAoPFUxRURBPiw8VTFFREI+KTsoPFUxRURDPiw8VTFFREQ+KTsoPFUxRURFPiw8VTFFREY+KTsoPFUxRUUwPiw8VTFFRTE+KTsvCisgICAoPFUxRUUyPiw8VTFFRTM+KTsoPFUxRUU0Piw8VTFFRTU+KTsoPFUxRUU2Piw8VTFFRTc+KTsoPFUxRUU4Piw8VTFFRTk+KTsvCisgICAoPFUxRUVBPiw8VTFFRUI+KTsoPFUxRUVDPiw8VTFFRUQ+KTsoPFUxRUVFPiw8VTFFRUY+KTsoPFUxRUYwPiw8VTFFRjE+KTsvCisgICAoPFUxRUYyPiw8VTFFRjM+KTsoPFUxRUY0Piw8VTFFRjU+KTsoPFUxRUY2Piw8VTFFRjc+KTsoPFUxRUY4Piw8VTFFRjk+KTsvCisgICAoPFUxRUZBPiw8VTFFRkI+KTsoPFUxRUZDPiw8VTFFRkQ+KTsoPFUxRUZFPiw8VTFFRkY+KTsvCisgICAoPFUxRjA4Piw8VTFGMDA+KTsoPFUxRjA5Piw8VTFGMDE+KTsoPFUxRjBBPiw8VTFGMDI+KTsoPFUxRjBCPiw8VTFGMDM+KTsvCisgICAoPFUxRjBDPiw8VTFGMDQ+KTsoPFUxRjBEPiw8VTFGMDU+KTsoPFUxRjBFPiw8VTFGMDY+KTsoPFUxRjBGPiw8VTFGMDc+KTsvCisgICAoPFUxRjE4Piw8VTFGMTA+KTsoPFUxRjE5Piw8VTFGMTE+KTsoPFUxRjFBPiw8VTFGMTI+KTsoPFUxRjFCPiw8VTFGMTM+KTsvCisgICAoPFUxRjFDPiw8VTFGMTQ+KTsoPFUxRjFEPiw8VTFGMTU+KTsoPFUxRjI4Piw8VTFGMjA+KTsoPFUxRjI5Piw8VTFGMjE+KTsvCisgICAoPFUxRjJBPiw8VTFGMjI+KTsoPFUxRjJCPiw8VTFGMjM+KTsoPFUxRjJDPiw8VTFGMjQ+KTsoPFUxRjJEPiw8VTFGMjU+KTsvCisgICAoPFUxRjJFPiw8VTFGMjY+KTsoPFUxRjJGPiw8VTFGMjc+KTsoPFUxRjM4Piw8VTFGMzA+KTsoPFUxRjM5Piw8VTFGMzE+KTsvCisgICAoPFUxRjNBPiw8VTFGMzI+KTsoPFUxRjNCPiw8VTFGMzM+KTsoPFUxRjNDPiw8VTFGMzQ+KTsoPFUxRjNEPiw8VTFGMzU+KTsvCisgICAoPFUxRjNFPiw8VTFGMzY+KTsoPFUxRjNGPiw8VTFGMzc+KTsoPFUxRjQ4Piw8VTFGNDA+KTsoPFUxRjQ5Piw8VTFGNDE+KTsvCisgICAoPFUxRjRBPiw8VTFGNDI+KTsoPFUxRjRCPiw8VTFGNDM+KTsoPFUxRjRDPiw8VTFGNDQ+KTsoPFUxRjREPiw8VTFGNDU+KTsvCisgICAoPFUxRjU5Piw8VTFGNTE+KTsoPFUxRjVCPiw8VTFGNTM+KTsoPFUxRjVEPiw8VTFGNTU+KTsoPFUxRjVGPiw8VTFGNTc+KTsvCisgICAoPFUxRjY4Piw8VTFGNjA+KTsoPFUxRjY5Piw8VTFGNjE+KTsoPFUxRjZBPiw8VTFGNjI+KTsoPFUxRjZCPiw8VTFGNjM+KTsvCisgICAoPFUxRjZDPiw8VTFGNjQ+KTsoPFUxRjZEPiw8VTFGNjU+KTsoPFUxRjZFPiw8VTFGNjY+KTsoPFUxRjZGPiw8VTFGNjc+KTsvCisgICAoPFUxRjg4Piw8VTFGODA+KTsoPFUxRjg5Piw8VTFGODE+KTsoPFUxRjhBPiw8VTFGODI+KTsoPFUxRjhCPiw8VTFGODM+KTsvCisgICAoPFUxRjhDPiw8VTFGODQ+KTsoPFUxRjhEPiw8VTFGODU+KTsoPFUxRjhFPiw8VTFGODY+KTsoPFUxRjhGPiw8VTFGODc+KTsvCisgICAoPFUxRjk4Piw8VTFGOTA+KTsoPFUxRjk5Piw8VTFGOTE+KTsoPFUxRjlBPiw8VTFGOTI+KTsoPFUxRjlCPiw8VTFGOTM+KTsvCisgICAoPFUxRjlDPiw8VTFGOTQ+KTsoPFUxRjlEPiw8VTFGOTU+KTsoPFUxRjlFPiw8VTFGOTY+KTsoPFUxRjlGPiw8VTFGOTc+KTsvCisgICAoPFUxRkE4Piw8VTFGQTA+KTsoPFUxRkE5Piw8VTFGQTE+KTsoPFUxRkFBPiw8VTFGQTI+KTsoPFUxRkFCPiw8VTFGQTM+KTsvCisgICAoPFUxRkFDPiw8VTFGQTQ+KTsoPFUxRkFEPiw8VTFGQTU+KTsoPFUxRkFFPiw8VTFGQTY+KTsoPFUxRkFGPiw8VTFGQTc+KTsvCisgICAoPFUxRkI4Piw8VTFGQjA+KTsoPFUxRkI5Piw8VTFGQjE+KTsoPFUxRkJBPiw8VTFGNzA+KTsoPFUxRkJCPiw8VTFGNzE+KTsvCisgICAoPFUxRkJDPiw8VTFGQjM+KTsoPFUxRkM4Piw8VTFGNzI+KTsoPFUxRkM5Piw8VTFGNzM+KTsoPFUxRkNBPiw8VTFGNzQ+KTsvCisgICAoPFUxRkNCPiw8VTFGNzU+KTsoPFUxRkNDPiw8VTFGQzM+KTsoPFUxRkQ4Piw8VTFGRDA+KTsoPFUxRkQ5Piw8VTFGRDE+KTsvCisgICAoPFUxRkRBPiw8VTFGNzY+KTsoPFUxRkRCPiw8VTFGNzc+KTsoPFUxRkU4Piw8VTFGRTA+KTsoPFUxRkU5Piw8VTFGRTE+KTsvCisgICAoPFUxRkVBPiw8VTFGN0E+KTsoPFUxRkVCPiw8VTFGN0I+KTsoPFUxRkVDPiw8VTFGRTU+KTsoPFUxRkY4Piw8VTFGNzg+KTsvCisgICAoPFUxRkY5Piw8VTFGNzk+KTsoPFUxRkZBPiw8VTFGN0M+KTsoPFUxRkZCPiw8VTFGN0Q+KTsoPFUxRkZDPiw8VTFGRjM+KTsvCisgICAoPFUyMTI2Piw8VTAzQzk+KTsoPFUyMTJBPiw8VTAwNkI+KTsoPFUyMTJCPiw8VTAwRTU+KTsoPFUyMTMyPiw8VTIxNEU+KTsvCisgICAoPFUyMTYwPiw8VTIxNzA+KTsoPFUyMTYxPiw8VTIxNzE+KTsoPFUyMTYyPiw8VTIxNzI+KTsoPFUyMTYzPiw8VTIxNzM+KTsvCisgICAoPFUyMTY0Piw8VTIxNzQ+KTsoPFUyMTY1Piw8VTIxNzU+KTsoPFUyMTY2Piw8VTIxNzY+KTsoPFUyMTY3Piw8VTIxNzc+KTsvCisgICAoPFUyMTY4Piw8VTIxNzg+KTsoPFUyMTY5Piw8VTIxNzk+KTsoPFUyMTZBPiw8VTIxN0E+KTsoPFUyMTZCPiw8VTIxN0I+KTsvCisgICAoPFUyMTZDPiw8VTIxN0M+KTsoPFUyMTZEPiw8VTIxN0Q+KTsoPFUyMTZFPiw8VTIxN0U+KTsoPFUyMTZGPiw8VTIxN0Y+KTsvCisgICAoPFUyMTgzPiw8VTIxODQ+KTsoPFUyNEI2Piw8VTI0RDA+KTsoPFUyNEI3Piw8VTI0RDE+KTsoPFUyNEI4Piw8VTI0RDI+KTsvCisgICAoPFUyNEI5Piw8VTI0RDM+KTsoPFUyNEJBPiw8VTI0RDQ+KTsoPFUyNEJCPiw8VTI0RDU+KTsoPFUyNEJDPiw8VTI0RDY+KTsvCisgICAoPFUyNEJEPiw8VTI0RDc+KTsoPFUyNEJFPiw8VTI0RDg+KTsoPFUyNEJGPiw8VTI0RDk+KTsoPFUyNEMwPiw8VTI0REE+KTsvCisgICAoPFUyNEMxPiw8VTI0REI+KTsoPFUyNEMyPiw8VTI0REM+KTsoPFUyNEMzPiw8VTI0REQ+KTsoPFUyNEM0Piw8VTI0REU+KTsvCisgICAoPFUyNEM1Piw8VTI0REY+KTsoPFUyNEM2Piw8VTI0RTA+KTsoPFUyNEM3Piw8VTI0RTE+KTsoPFUyNEM4Piw8VTI0RTI+KTsvCisgICAoPFUyNEM5Piw8VTI0RTM+KTsoPFUyNENBPiw8VTI0RTQ+KTsoPFUyNENCPiw8VTI0RTU+KTsoPFUyNENDPiw8VTI0RTY+KTsvCisgICAoPFUyNENEPiw8VTI0RTc+KTsoPFUyNENFPiw8VTI0RTg+KTsoPFUyNENGPiw8VTI0RTk+KTsoPFUyQzAwPiw8VTJDMzA+KTsvCisgICAoPFUyQzAxPiw8VTJDMzE+KTsoPFUyQzAyPiw8VTJDMzI+KTsoPFUyQzAzPiw8VTJDMzM+KTsoPFUyQzA0Piw8VTJDMzQ+KTsvCisgICAoPFUyQzA1Piw8VTJDMzU+KTsoPFUyQzA2Piw8VTJDMzY+KTsoPFUyQzA3Piw8VTJDMzc+KTsoPFUyQzA4Piw8VTJDMzg+KTsvCisgICAoPFUyQzA5Piw8VTJDMzk+KTsoPFUyQzBBPiw8VTJDM0E+KTsoPFUyQzBCPiw8VTJDM0I+KTsoPFUyQzBDPiw8VTJDM0M+KTsvCisgICAoPFUyQzBEPiw8VTJDM0Q+KTsoPFUyQzBFPiw8VTJDM0U+KTsoPFUyQzBGPiw8VTJDM0Y+KTsoPFUyQzEwPiw8VTJDNDA+KTsvCisgICAoPFUyQzExPiw8VTJDNDE+KTsoPFUyQzEyPiw8VTJDNDI+KTsoPFUyQzEzPiw8VTJDNDM+KTsoPFUyQzE0Piw8VTJDNDQ+KTsvCisgICAoPFUyQzE1Piw8VTJDNDU+KTsoPFUyQzE2Piw8VTJDNDY+KTsoPFUyQzE3Piw8VTJDNDc+KTsoPFUyQzE4Piw8VTJDNDg+KTsvCisgICAoPFUyQzE5Piw8VTJDNDk+KTsoPFUyQzFBPiw8VTJDNEE+KTsoPFUyQzFCPiw8VTJDNEI+KTsoPFUyQzFDPiw8VTJDNEM+KTsvCisgICAoPFUyQzFEPiw8VTJDNEQ+KTsoPFUyQzFFPiw8VTJDNEU+KTsoPFUyQzFGPiw8VTJDNEY+KTsoPFUyQzIwPiw8VTJDNTA+KTsvCisgICAoPFUyQzIxPiw8VTJDNTE+KTsoPFUyQzIyPiw8VTJDNTI+KTsoPFUyQzIzPiw8VTJDNTM+KTsoPFUyQzI0Piw8VTJDNTQ+KTsvCisgICAoPFUyQzI1Piw8VTJDNTU+KTsoPFUyQzI2Piw8VTJDNTY+KTsoPFUyQzI3Piw8VTJDNTc+KTsoPFUyQzI4Piw8VTJDNTg+KTsvCisgICAoPFUyQzI5Piw8VTJDNTk+KTsoPFUyQzJBPiw8VTJDNUE+KTsoPFUyQzJCPiw8VTJDNUI+KTsoPFUyQzJDPiw8VTJDNUM+KTsvCisgICAoPFUyQzJEPiw8VTJDNUQ+KTsoPFUyQzJFPiw8VTJDNUU+KTsoPFUyQzYwPiw8VTJDNjE+KTsoPFUyQzYyPiw8VTAyNkI+KTsvCisgICAoPFUyQzYzPiw8VTFEN0Q+KTsoPFUyQzY0Piw8VTAyN0Q+KTsoPFUyQzY3Piw8VTJDNjg+KTsoPFUyQzY5Piw8VTJDNkE+KTsvCisgICAoPFUyQzZCPiw8VTJDNkM+KTsoPFUyQzZEPiw8VTAyNTE+KTsoPFUyQzZFPiw8VTAyNzE+KTsoPFUyQzZGPiw8VTAyNTA+KTsvCisgICAoPFUyQzcyPiw8VTJDNzM+KTsoPFUyQzc1Piw8VTJDNzY+KTsoPFUyQzgwPiw8VTJDODE+KTsoPFUyQzgyPiw8VTJDODM+KTsvCisgICAoPFUyQzg0Piw8VTJDODU+KTsoPFUyQzg2Piw8VTJDODc+KTsoPFUyQzg4Piw8VTJDODk+KTsoPFUyQzhBPiw8VTJDOEI+KTsvCisgICAoPFUyQzhDPiw8VTJDOEQ+KTsoPFUyQzhFPiw8VTJDOEY+KTsoPFUyQzkwPiw8VTJDOTE+KTsoPFUyQzkyPiw8VTJDOTM+KTsvCisgICAoPFUyQzk0Piw8VTJDOTU+KTsoPFUyQzk2Piw8VTJDOTc+KTsoPFUyQzk4Piw8VTJDOTk+KTsoPFUyQzlBPiw8VTJDOUI+KTsvCisgICAoPFUyQzlDPiw8VTJDOUQ+KTsoPFUyQzlFPiw8VTJDOUY+KTsoPFUyQ0EwPiw8VTJDQTE+KTsoPFUyQ0EyPiw8VTJDQTM+KTsvCisgICAoPFUyQ0E0Piw8VTJDQTU+KTsoPFUyQ0E2Piw8VTJDQTc+KTsoPFUyQ0E4Piw8VTJDQTk+KTsoPFUyQ0FBPiw8VTJDQUI+KTsvCisgICAoPFUyQ0FDPiw8VTJDQUQ+KTsoPFUyQ0FFPiw8VTJDQUY+KTsoPFUyQ0IwPiw8VTJDQjE+KTsoPFUyQ0IyPiw8VTJDQjM+KTsvCisgICAoPFUyQ0I0Piw8VTJDQjU+KTsoPFUyQ0I2Piw8VTJDQjc+KTsoPFUyQ0I4Piw8VTJDQjk+KTsoPFUyQ0JBPiw8VTJDQkI+KTsvCisgICAoPFUyQ0JDPiw8VTJDQkQ+KTsoPFUyQ0JFPiw8VTJDQkY+KTsoPFUyQ0MwPiw8VTJDQzE+KTsoPFUyQ0MyPiw8VTJDQzM+KTsvCisgICAoPFUyQ0M0Piw8VTJDQzU+KTsoPFUyQ0M2Piw8VTJDQzc+KTsoPFUyQ0M4Piw8VTJDQzk+KTsoPFUyQ0NBPiw8VTJDQ0I+KTsvCisgICAoPFUyQ0NDPiw8VTJDQ0Q+KTsoPFUyQ0NFPiw8VTJDQ0Y+KTsoPFUyQ0QwPiw8VTJDRDE+KTsoPFUyQ0QyPiw8VTJDRDM+KTsvCisgICAoPFUyQ0Q0Piw8VTJDRDU+KTsoPFUyQ0Q2Piw8VTJDRDc+KTsoPFUyQ0Q4Piw8VTJDRDk+KTsoPFUyQ0RBPiw8VTJDREI+KTsvCisgICAoPFUyQ0RDPiw8VTJDREQ+KTsoPFUyQ0RFPiw8VTJDREY+KTsoPFUyQ0UwPiw8VTJDRTE+KTsoPFUyQ0UyPiw8VTJDRTM+KTsvCisgICAoPFVGRjIxPiw8VUZGNDE+KTsoPFVGRjIyPiw8VUZGNDI+KTsoPFVGRjIzPiw8VUZGNDM+KTsoPFVGRjI0Piw8VUZGNDQ+KTsvCisgICAoPFVGRjI1Piw8VUZGNDU+KTsoPFVGRjI2Piw8VUZGNDY+KTsoPFVGRjI3Piw8VUZGNDc+KTsoPFVGRjI4Piw8VUZGNDg+KTsvCisgICAoPFVGRjI5Piw8VUZGNDk+KTsoPFVGRjJBPiw8VUZGNEE+KTsoPFVGRjJCPiw8VUZGNEI+KTsoPFVGRjJDPiw8VUZGNEM+KTsvCisgICAoPFVGRjJEPiw8VUZGNEQ+KTsoPFVGRjJFPiw8VUZGNEU+KTsoPFVGRjJGPiw8VUZGNEY+KTsoPFVGRjMwPiw8VUZGNTA+KTsvCisgICAoPFVGRjMxPiw8VUZGNTE+KTsoPFVGRjMyPiw8VUZGNTI+KTsoPFVGRjMzPiw8VUZGNTM+KTsoPFVGRjM0Piw8VUZGNTQ+KTsvCisgICAoPFVGRjM1Piw8VUZGNTU+KTsoPFVGRjM2Piw8VUZGNTY+KTsoPFVGRjM3Piw8VUZGNTc+KTsoPFVGRjM4Piw8VUZGNTg+KTsvCisgICAoPFVGRjM5Piw8VUZGNTk+KTsoPFVGRjNBPiw8VUZGNUE+KTsoPFUwMDAxMDQwMD4sPFUwMDAxMDQyOD4pOy8KKyAgICg8VTAwMDEwNDAxPiw8VTAwMDEwNDI5Pik7KDxVMDAwMTA0MDI+LDxVMDAwMTA0MkE+KTsvCisgICAoPFUwMDAxMDQwMz4sPFUwMDAxMDQyQj4pOyg8VTAwMDEwNDA0Piw8VTAwMDEwNDJDPik7LworICAgKDxVMDAwMTA0MDU+LDxVMDAwMTA0MkQ+KTsoPFUwMDAxMDQwNj4sPFUwMDAxMDQyRT4pOy8KKyAgICg8VTAwMDEwNDA3Piw8VTAwMDEwNDJGPik7KDxVMDAwMTA0MDg+LDxVMDAwMTA0MzA+KTsvCisgICAoPFUwMDAxMDQwOT4sPFUwMDAxMDQzMT4pOyg8VTAwMDEwNDBBPiw8VTAwMDEwNDMyPik7LworICAgKDxVMDAwMTA0MEI+LDxVMDAwMTA0MzM+KTsoPFUwMDAxMDQwQz4sPFUwMDAxMDQzND4pOy8KKyAgICg8VTAwMDEwNDBEPiw8VTAwMDEwNDM1Pik7KDxVMDAwMTA0MEU+LDxVMDAwMTA0MzY+KTsvCisgICAoPFUwMDAxMDQwRj4sPFUwMDAxMDQzNz4pOyg8VTAwMDEwNDEwPiw8VTAwMDEwNDM4Pik7LworICAgKDxVMDAwMTA0MTE+LDxVMDAwMTA0Mzk+KTsoPFUwMDAxMDQxMj4sPFUwMDAxMDQzQT4pOy8KKyAgICg8VTAwMDEwNDEzPiw8VTAwMDEwNDNCPik7KDxVMDAwMTA0MTQ+LDxVMDAwMTA0M0M+KTsvCisgICAoPFUwMDAxMDQxNT4sPFUwMDAxMDQzRD4pOyg8VTAwMDEwNDE2Piw8VTAwMDEwNDNFPik7LworICAgKDxVMDAwMTA0MTc+LDxVMDAwMTA0M0Y+KTsoPFUwMDAxMDQxOD4sPFUwMDAxMDQ0MD4pOy8KKyAgICg8VTAwMDEwNDE5Piw8VTAwMDEwNDQxPik7KDxVMDAwMTA0MUE+LDxVMDAwMTA0NDI+KTsvCisgICAoPFUwMDAxMDQxQj4sPFUwMDAxMDQ0Mz4pOyg8VTAwMDEwNDFDPiw8VTAwMDEwNDQ0Pik7LworICAgKDxVMDAwMTA0MUQ+LDxVMDAwMTA0NDU+KTsoPFUwMDAxMDQxRT4sPFUwMDAxMDQ0Nj4pOy8KKyAgICg8VTAwMDEwNDFGPiw8VTAwMDEwNDQ3Pik7KDxVMDAwMTA0MjA+LDxVMDAwMTA0NDg+KTsvCisgICAoPFUwMDAxMDQyMT4sPFUwMDAxMDQ0OT4pOyg8VTAwMDEwNDIyPiw8VTAwMDEwNDRBPik7LworICAgKDxVMDAwMTA0MjM+LDxVMDAwMTA0NEI+KTsoPFUwMDAxMDQyND4sPFUwMDAxMDQ0Qz4pOy8KKyAgICg8VTAwMDEwNDI1Piw8VTAwMDEwNDREPik7KDxVMDAwMTA0MjY+LDxVMDAwMTA0NEU+KTsvCisgICAoPFUwMDAxMDQyNz4sPFUwMDAxMDQ0Rj4pCisKK21hcCAidG90aXRsZSI7IC8KKyAgICg8VTAwNjE+LDxVMDA0MT4pOyg8VTAwNjI+LDxVMDA0Mj4pOyg8VTAwNjM+LDxVMDA0Mz4pOyg8VTAwNjQ+LDxVMDA0ND4pOy8KKyAgICg8VTAwNjU+LDxVMDA0NT4pOyg8VTAwNjY+LDxVMDA0Nj4pOyg8VTAwNjc+LDxVMDA0Nz4pOyg8VTAwNjg+LDxVMDA0OD4pOy8KKyAgICg8VTAwNjk+LDxVMDA0OT4pOyg8VTAwNkE+LDxVMDA0QT4pOyg8VTAwNkI+LDxVMDA0Qj4pOyg8VTAwNkM+LDxVMDA0Qz4pOy8KKyAgICg8VTAwNkQ+LDxVMDA0RD4pOyg8VTAwNkU+LDxVMDA0RT4pOyg8VTAwNkY+LDxVMDA0Rj4pOyg8VTAwNzA+LDxVMDA1MD4pOy8KKyAgICg8VTAwNzE+LDxVMDA1MT4pOyg8VTAwNzI+LDxVMDA1Mj4pOyg8VTAwNzM+LDxVMDA1Mz4pOyg8VTAwNzQ+LDxVMDA1ND4pOy8KKyAgICg8VTAwNzU+LDxVMDA1NT4pOyg8VTAwNzY+LDxVMDA1Nj4pOyg8VTAwNzc+LDxVMDA1Nz4pOyg8VTAwNzg+LDxVMDA1OD4pOy8KKyAgICg8VTAwNzk+LDxVMDA1OT4pOyg8VTAwN0E+LDxVMDA1QT4pOyg8VTAwQjU+LDxVMDM5Qz4pOyg8VTAwRTA+LDxVMDBDMD4pOy8KKyAgICg8VTAwRTE+LDxVMDBDMT4pOyg8VTAwRTI+LDxVMDBDMj4pOyg8VTAwRTM+LDxVMDBDMz4pOyg8VTAwRTQ+LDxVMDBDND4pOy8KKyAgICg8VTAwRTU+LDxVMDBDNT4pOyg8VTAwRTY+LDxVMDBDNj4pOyg8VTAwRTc+LDxVMDBDNz4pOyg8VTAwRTg+LDxVMDBDOD4pOy8KKyAgICg8VTAwRTk+LDxVMDBDOT4pOyg8VTAwRUE+LDxVMDBDQT4pOyg8VTAwRUI+LDxVMDBDQj4pOyg8VTAwRUM+LDxVMDBDQz4pOy8KKyAgICg8VTAwRUQ+LDxVMDBDRD4pOyg8VTAwRUU+LDxVMDBDRT4pOyg8VTAwRUY+LDxVMDBDRj4pOyg8VTAwRjA+LDxVMDBEMD4pOy8KKyAgICg8VTAwRjE+LDxVMDBEMT4pOyg8VTAwRjI+LDxVMDBEMj4pOyg8VTAwRjM+LDxVMDBEMz4pOyg8VTAwRjQ+LDxVMDBEND4pOy8KKyAgICg8VTAwRjU+LDxVMDBENT4pOyg8VTAwRjY+LDxVMDBENj4pOyg8VTAwRjg+LDxVMDBEOD4pOyg8VTAwRjk+LDxVMDBEOT4pOy8KKyAgICg8VTAwRkE+LDxVMDBEQT4pOyg8VTAwRkI+LDxVMDBEQj4pOyg8VTAwRkM+LDxVMDBEQz4pOyg8VTAwRkQ+LDxVMDBERD4pOy8KKyAgICg8VTAwRkU+LDxVMDBERT4pOyg8VTAwRkY+LDxVMDE3OD4pOyg8VTAxMDE+LDxVMDEwMD4pOyg8VTAxMDM+LDxVMDEwMj4pOy8KKyAgICg8VTAxMDU+LDxVMDEwND4pOyg8VTAxMDc+LDxVMDEwNj4pOyg8VTAxMDk+LDxVMDEwOD4pOyg8VTAxMEI+LDxVMDEwQT4pOy8KKyAgICg8VTAxMEQ+LDxVMDEwQz4pOyg8VTAxMEY+LDxVMDEwRT4pOyg8VTAxMTE+LDxVMDExMD4pOyg8VTAxMTM+LDxVMDExMj4pOy8KKyAgICg8VTAxMTU+LDxVMDExND4pOyg8VTAxMTc+LDxVMDExNj4pOyg8VTAxMTk+LDxVMDExOD4pOyg8VTAxMUI+LDxVMDExQT4pOy8KKyAgICg8VTAxMUQ+LDxVMDExQz4pOyg8VTAxMUY+LDxVMDExRT4pOyg8VTAxMjE+LDxVMDEyMD4pOyg8VTAxMjM+LDxVMDEyMj4pOy8KKyAgICg8VTAxMjU+LDxVMDEyND4pOyg8VTAxMjc+LDxVMDEyNj4pOyg8VTAxMjk+LDxVMDEyOD4pOyg8VTAxMkI+LDxVMDEyQT4pOy8KKyAgICg8VTAxMkQ+LDxVMDEyQz4pOyg8VTAxMkY+LDxVMDEyRT4pOyg8VTAxMzE+LDxVMDA0OT4pOyg8VTAxMzM+LDxVMDEzMj4pOy8KKyAgICg8VTAxMzU+LDxVMDEzND4pOyg8VTAxMzc+LDxVMDEzNj4pOyg8VTAxM0E+LDxVMDEzOT4pOyg8VTAxM0M+LDxVMDEzQj4pOy8KKyAgICg8VTAxM0U+LDxVMDEzRD4pOyg8VTAxNDA+LDxVMDEzRj4pOyg8VTAxNDI+LDxVMDE0MT4pOyg8VTAxNDQ+LDxVMDE0Mz4pOy8KKyAgICg8VTAxNDY+LDxVMDE0NT4pOyg8VTAxNDg+LDxVMDE0Nz4pOyg8VTAxNEI+LDxVMDE0QT4pOyg8VTAxNEQ+LDxVMDE0Qz4pOy8KKyAgICg8VTAxNEY+LDxVMDE0RT4pOyg8VTAxNTE+LDxVMDE1MD4pOyg8VTAxNTM+LDxVMDE1Mj4pOyg8VTAxNTU+LDxVMDE1ND4pOy8KKyAgICg8VTAxNTc+LDxVMDE1Nj4pOyg8VTAxNTk+LDxVMDE1OD4pOyg8VTAxNUI+LDxVMDE1QT4pOyg8VTAxNUQ+LDxVMDE1Qz4pOy8KKyAgICg8VTAxNUY+LDxVMDE1RT4pOyg8VTAxNjE+LDxVMDE2MD4pOyg8VTAxNjM+LDxVMDE2Mj4pOyg8VTAxNjU+LDxVMDE2ND4pOy8KKyAgICg8VTAxNjc+LDxVMDE2Nj4pOyg8VTAxNjk+LDxVMDE2OD4pOyg8VTAxNkI+LDxVMDE2QT4pOyg8VTAxNkQ+LDxVMDE2Qz4pOy8KKyAgICg8VTAxNkY+LDxVMDE2RT4pOyg8VTAxNzE+LDxVMDE3MD4pOyg8VTAxNzM+LDxVMDE3Mj4pOyg8VTAxNzU+LDxVMDE3ND4pOy8KKyAgICg8VTAxNzc+LDxVMDE3Nj4pOyg8VTAxN0E+LDxVMDE3OT4pOyg8VTAxN0M+LDxVMDE3Qj4pOyg8VTAxN0U+LDxVMDE3RD4pOy8KKyAgICg8VTAxN0Y+LDxVMDA1Mz4pOyg8VTAxODA+LDxVMDI0Mz4pOyg8VTAxODM+LDxVMDE4Mj4pOyg8VTAxODU+LDxVMDE4ND4pOy8KKyAgICg8VTAxODg+LDxVMDE4Nz4pOyg8VTAxOEM+LDxVMDE4Qj4pOyg8VTAxOTI+LDxVMDE5MT4pOyg8VTAxOTU+LDxVMDFGNj4pOy8KKyAgICg8VTAxOTk+LDxVMDE5OD4pOyg8VTAxOUE+LDxVMDIzRD4pOyg8VTAxOUU+LDxVMDIyMD4pOyg8VTAxQTE+LDxVMDFBMD4pOy8KKyAgICg8VTAxQTM+LDxVMDFBMj4pOyg8VTAxQTU+LDxVMDFBND4pOyg8VTAxQTg+LDxVMDFBNz4pOyg8VTAxQUQ+LDxVMDFBQz4pOy8KKyAgICg8VTAxQjA+LDxVMDFBRj4pOyg8VTAxQjQ+LDxVMDFCMz4pOyg8VTAxQjY+LDxVMDFCNT4pOyg8VTAxQjk+LDxVMDFCOD4pOy8KKyAgICg8VTAxQkQ+LDxVMDFCQz4pOyg8VTAxQkY+LDxVMDFGNz4pOyg8VTAxQzQ+LDxVMDFDNT4pOyg8VTAxQzY+LDxVMDFDNT4pOy8KKyAgICg8VTAxQzc+LDxVMDFDOD4pOyg8VTAxQzk+LDxVMDFDOD4pOyg8VTAxQ0E+LDxVMDFDQj4pOyg8VTAxQ0M+LDxVMDFDQj4pOy8KKyAgICg8VTAxQ0U+LDxVMDFDRD4pOyg8VTAxRDA+LDxVMDFDRj4pOyg8VTAxRDI+LDxVMDFEMT4pOyg8VTAxRDQ+LDxVMDFEMz4pOy8KKyAgICg8VTAxRDY+LDxVMDFENT4pOyg8VTAxRDg+LDxVMDFENz4pOyg8VTAxREE+LDxVMDFEOT4pOyg8VTAxREM+LDxVMDFEQj4pOy8KKyAgICg8VTAxREQ+LDxVMDE4RT4pOyg8VTAxREY+LDxVMDFERT4pOyg8VTAxRTE+LDxVMDFFMD4pOyg8VTAxRTM+LDxVMDFFMj4pOy8KKyAgICg8VTAxRTU+LDxVMDFFND4pOyg8VTAxRTc+LDxVMDFFNj4pOyg8VTAxRTk+LDxVMDFFOD4pOyg8VTAxRUI+LDxVMDFFQT4pOy8KKyAgICg8VTAxRUQ+LDxVMDFFQz4pOyg8VTAxRUY+LDxVMDFFRT4pOyg8VTAxRjE+LDxVMDFGMj4pOyg8VTAxRjM+LDxVMDFGMj4pOy8KKyAgICg8VTAxRjU+LDxVMDFGND4pOyg8VTAxRjk+LDxVMDFGOD4pOyg8VTAxRkI+LDxVMDFGQT4pOyg8VTAxRkQ+LDxVMDFGQz4pOy8KKyAgICg8VTAxRkY+LDxVMDFGRT4pOyg8VTAyMDE+LDxVMDIwMD4pOyg8VTAyMDM+LDxVMDIwMj4pOyg8VTAyMDU+LDxVMDIwND4pOy8KKyAgICg8VTAyMDc+LDxVMDIwNj4pOyg8VTAyMDk+LDxVMDIwOD4pOyg8VTAyMEI+LDxVMDIwQT4pOyg8VTAyMEQ+LDxVMDIwQz4pOy8KKyAgICg8VTAyMEY+LDxVMDIwRT4pOyg8VTAyMTE+LDxVMDIxMD4pOyg8VTAyMTM+LDxVMDIxMj4pOyg8VTAyMTU+LDxVMDIxND4pOy8KKyAgICg8VTAyMTc+LDxVMDIxNj4pOyg8VTAyMTk+LDxVMDIxOD4pOyg8VTAyMUI+LDxVMDIxQT4pOyg8VTAyMUQ+LDxVMDIxQz4pOy8KKyAgICg8VTAyMUY+LDxVMDIxRT4pOyg8VTAyMjM+LDxVMDIyMj4pOyg8VTAyMjU+LDxVMDIyND4pOyg8VTAyMjc+LDxVMDIyNj4pOy8KKyAgICg8VTAyMjk+LDxVMDIyOD4pOyg8VTAyMkI+LDxVMDIyQT4pOyg8VTAyMkQ+LDxVMDIyQz4pOyg8VTAyMkY+LDxVMDIyRT4pOy8KKyAgICg8VTAyMzE+LDxVMDIzMD4pOyg8VTAyMzM+LDxVMDIzMj4pOyg8VTAyM0M+LDxVMDIzQj4pOyg8VTAyNDI+LDxVMDI0MT4pOy8KKyAgICg8VTAyNDc+LDxVMDI0Nj4pOyg8VTAyNDk+LDxVMDI0OD4pOyg8VTAyNEI+LDxVMDI0QT4pOyg8VTAyNEQ+LDxVMDI0Qz4pOy8KKyAgICg8VTAyNEY+LDxVMDI0RT4pOyg8VTAyNTM+LDxVMDE4MT4pOyg8VTAyNTQ+LDxVMDE4Nj4pOyg8VTAyNTY+LDxVMDE4OT4pOy8KKyAgICg8VTAyNTc+LDxVMDE4QT4pOyg8VTAyNTk+LDxVMDE4Rj4pOyg8VTAyNUI+LDxVMDE5MD4pOyg8VTAyNjA+LDxVMDE5Mz4pOy8KKyAgICg8VTAyNjM+LDxVMDE5ND4pOyg8VTAyNjg+LDxVMDE5Nz4pOyg8VTAyNjk+LDxVMDE5Nj4pOyg8VTAyNkI+LDxVMkM2Mj4pOy8KKyAgICg8VTAyNkY+LDxVMDE5Qz4pOyg8VTAyNzI+LDxVMDE5RD4pOyg8VTAyNzU+LDxVMDE5Rj4pOyg8VTAyN0Q+LDxVMkM2ND4pOy8KKyAgICg8VTAyODA+LDxVMDFBNj4pOyg8VTAyODM+LDxVMDFBOT4pOyg8VTAyODg+LDxVMDFBRT4pOyg8VTAyODk+LDxVMDI0ND4pOy8KKyAgICg8VTAyOEE+LDxVMDFCMT4pOyg8VTAyOEI+LDxVMDFCMj4pOyg8VTAyOEM+LDxVMDI0NT4pOyg8VTAyOTI+LDxVMDFCNz4pOy8KKyAgICg8VTAzNDU+LDxVMDM5OT4pOyg8VTAzN0I+LDxVMDNGRD4pOyg8VTAzN0M+LDxVMDNGRT4pOyg8VTAzN0Q+LDxVMDNGRj4pOy8KKyAgICg8VTAzQUM+LDxVMDM4Nj4pOyg8VTAzQUQ+LDxVMDM4OD4pOyg8VTAzQUU+LDxVMDM4OT4pOyg8VTAzQUY+LDxVMDM4QT4pOy8KKyAgICg8VTAzQjE+LDxVMDM5MT4pOyg8VTAzQjI+LDxVMDM5Mj4pOyg8VTAzQjM+LDxVMDM5Mz4pOyg8VTAzQjQ+LDxVMDM5ND4pOy8KKyAgICg8VTAzQjU+LDxVMDM5NT4pOyg8VTAzQjY+LDxVMDM5Nj4pOyg8VTAzQjc+LDxVMDM5Nz4pOyg8VTAzQjg+LDxVMDM5OD4pOy8KKyAgICg8VTAzQjk+LDxVMDM5OT4pOyg8VTAzQkE+LDxVMDM5QT4pOyg8VTAzQkI+LDxVMDM5Qj4pOyg8VTAzQkM+LDxVMDM5Qz4pOy8KKyAgICg8VTAzQkQ+LDxVMDM5RD4pOyg8VTAzQkU+LDxVMDM5RT4pOyg8VTAzQkY+LDxVMDM5Rj4pOyg8VTAzQzA+LDxVMDNBMD4pOy8KKyAgICg8VTAzQzE+LDxVMDNBMT4pOyg8VTAzQzI+LDxVMDNBMz4pOyg8VTAzQzM+LDxVMDNBMz4pOyg8VTAzQzQ+LDxVMDNBND4pOy8KKyAgICg8VTAzQzU+LDxVMDNBNT4pOyg8VTAzQzY+LDxVMDNBNj4pOyg8VTAzQzc+LDxVMDNBNz4pOyg8VTAzQzg+LDxVMDNBOD4pOy8KKyAgICg8VTAzQzk+LDxVMDNBOT4pOyg8VTAzQ0E+LDxVMDNBQT4pOyg8VTAzQ0I+LDxVMDNBQj4pOyg8VTAzQ0M+LDxVMDM4Qz4pOy8KKyAgICg8VTAzQ0Q+LDxVMDM4RT4pOyg8VTAzQ0U+LDxVMDM4Rj4pOyg8VTAzRDA+LDxVMDM5Mj4pOyg8VTAzRDE+LDxVMDM5OD4pOy8KKyAgICg8VTAzRDU+LDxVMDNBNj4pOyg8VTAzRDY+LDxVMDNBMD4pOyg8VTAzRDk+LDxVMDNEOD4pOyg8VTAzREI+LDxVMDNEQT4pOy8KKyAgICg8VTAzREQ+LDxVMDNEQz4pOyg8VTAzREY+LDxVMDNERT4pOyg8VTAzRTE+LDxVMDNFMD4pOyg8VTAzRTM+LDxVMDNFMj4pOy8KKyAgICg8VTAzRTU+LDxVMDNFND4pOyg8VTAzRTc+LDxVMDNFNj4pOyg8VTAzRTk+LDxVMDNFOD4pOyg8VTAzRUI+LDxVMDNFQT4pOy8KKyAgICg8VTAzRUQ+LDxVMDNFQz4pOyg8VTAzRUY+LDxVMDNFRT4pOyg8VTAzRjA+LDxVMDM5QT4pOyg8VTAzRjE+LDxVMDNBMT4pOy8KKyAgICg8VTAzRjI+LDxVMDNGOT4pOyg8VTAzRjU+LDxVMDM5NT4pOyg8VTAzRjg+LDxVMDNGNz4pOyg8VTAzRkI+LDxVMDNGQT4pOy8KKyAgICg8VTA0MzA+LDxVMDQxMD4pOyg8VTA0MzE+LDxVMDQxMT4pOyg8VTA0MzI+LDxVMDQxMj4pOyg8VTA0MzM+LDxVMDQxMz4pOy8KKyAgICg8VTA0MzQ+LDxVMDQxND4pOyg8VTA0MzU+LDxVMDQxNT4pOyg8VTA0MzY+LDxVMDQxNj4pOyg8VTA0Mzc+LDxVMDQxNz4pOy8KKyAgICg8VTA0Mzg+LDxVMDQxOD4pOyg8VTA0Mzk+LDxVMDQxOT4pOyg8VTA0M0E+LDxVMDQxQT4pOyg8VTA0M0I+LDxVMDQxQj4pOy8KKyAgICg8VTA0M0M+LDxVMDQxQz4pOyg8VTA0M0Q+LDxVMDQxRD4pOyg8VTA0M0U+LDxVMDQxRT4pOyg8VTA0M0Y+LDxVMDQxRj4pOy8KKyAgICg8VTA0NDA+LDxVMDQyMD4pOyg8VTA0NDE+LDxVMDQyMT4pOyg8VTA0NDI+LDxVMDQyMj4pOyg8VTA0NDM+LDxVMDQyMz4pOy8KKyAgICg8VTA0NDQ+LDxVMDQyND4pOyg8VTA0NDU+LDxVMDQyNT4pOyg8VTA0NDY+LDxVMDQyNj4pOyg8VTA0NDc+LDxVMDQyNz4pOy8KKyAgICg8VTA0NDg+LDxVMDQyOD4pOyg8VTA0NDk+LDxVMDQyOT4pOyg8VTA0NEE+LDxVMDQyQT4pOyg8VTA0NEI+LDxVMDQyQj4pOy8KKyAgICg8VTA0NEM+LDxVMDQyQz4pOyg8VTA0NEQ+LDxVMDQyRD4pOyg8VTA0NEU+LDxVMDQyRT4pOyg8VTA0NEY+LDxVMDQyRj4pOy8KKyAgICg8VTA0NTA+LDxVMDQwMD4pOyg8VTA0NTE+LDxVMDQwMT4pOyg8VTA0NTI+LDxVMDQwMj4pOyg8VTA0NTM+LDxVMDQwMz4pOy8KKyAgICg8VTA0NTQ+LDxVMDQwND4pOyg8VTA0NTU+LDxVMDQwNT4pOyg8VTA0NTY+LDxVMDQwNj4pOyg8VTA0NTc+LDxVMDQwNz4pOy8KKyAgICg8VTA0NTg+LDxVMDQwOD4pOyg8VTA0NTk+LDxVMDQwOT4pOyg8VTA0NUE+LDxVMDQwQT4pOyg8VTA0NUI+LDxVMDQwQj4pOy8KKyAgICg8VTA0NUM+LDxVMDQwQz4pOyg8VTA0NUQ+LDxVMDQwRD4pOyg8VTA0NUU+LDxVMDQwRT4pOyg8VTA0NUY+LDxVMDQwRj4pOy8KKyAgICg8VTA0NjE+LDxVMDQ2MD4pOyg8VTA0NjM+LDxVMDQ2Mj4pOyg8VTA0NjU+LDxVMDQ2ND4pOyg8VTA0Njc+LDxVMDQ2Nj4pOy8KKyAgICg8VTA0Njk+LDxVMDQ2OD4pOyg8VTA0NkI+LDxVMDQ2QT4pOyg8VTA0NkQ+LDxVMDQ2Qz4pOyg8VTA0NkY+LDxVMDQ2RT4pOy8KKyAgICg8VTA0NzE+LDxVMDQ3MD4pOyg8VTA0NzM+LDxVMDQ3Mj4pOyg8VTA0NzU+LDxVMDQ3ND4pOyg8VTA0Nzc+LDxVMDQ3Nj4pOy8KKyAgICg8VTA0Nzk+LDxVMDQ3OD4pOyg8VTA0N0I+LDxVMDQ3QT4pOyg8VTA0N0Q+LDxVMDQ3Qz4pOyg8VTA0N0Y+LDxVMDQ3RT4pOy8KKyAgICg8VTA0ODE+LDxVMDQ4MD4pOyg8VTA0OEI+LDxVMDQ4QT4pOyg8VTA0OEQ+LDxVMDQ4Qz4pOyg8VTA0OEY+LDxVMDQ4RT4pOy8KKyAgICg8VTA0OTE+LDxVMDQ5MD4pOyg8VTA0OTM+LDxVMDQ5Mj4pOyg8VTA0OTU+LDxVMDQ5ND4pOyg8VTA0OTc+LDxVMDQ5Nj4pOy8KKyAgICg8VTA0OTk+LDxVMDQ5OD4pOyg8VTA0OUI+LDxVMDQ5QT4pOyg8VTA0OUQ+LDxVMDQ5Qz4pOyg8VTA0OUY+LDxVMDQ5RT4pOy8KKyAgICg8VTA0QTE+LDxVMDRBMD4pOyg8VTA0QTM+LDxVMDRBMj4pOyg8VTA0QTU+LDxVMDRBND4pOyg8VTA0QTc+LDxVMDRBNj4pOy8KKyAgICg8VTA0QTk+LDxVMDRBOD4pOyg8VTA0QUI+LDxVMDRBQT4pOyg8VTA0QUQ+LDxVMDRBQz4pOyg8VTA0QUY+LDxVMDRBRT4pOy8KKyAgICg8VTA0QjE+LDxVMDRCMD4pOyg8VTA0QjM+LDxVMDRCMj4pOyg8VTA0QjU+LDxVMDRCND4pOyg8VTA0Qjc+LDxVMDRCNj4pOy8KKyAgICg8VTA0Qjk+LDxVMDRCOD4pOyg8VTA0QkI+LDxVMDRCQT4pOyg8VTA0QkQ+LDxVMDRCQz4pOyg8VTA0QkY+LDxVMDRCRT4pOy8KKyAgICg8VTA0QzI+LDxVMDRDMT4pOyg8VTA0QzQ+LDxVMDRDMz4pOyg8VTA0QzY+LDxVMDRDNT4pOyg8VTA0Qzg+LDxVMDRDNz4pOy8KKyAgICg8VTA0Q0E+LDxVMDRDOT4pOyg8VTA0Q0M+LDxVMDRDQj4pOyg8VTA0Q0U+LDxVMDRDRD4pOyg8VTA0Q0Y+LDxVMDRDMD4pOy8KKyAgICg8VTA0RDE+LDxVMDREMD4pOyg8VTA0RDM+LDxVMDREMj4pOyg8VTA0RDU+LDxVMDREND4pOyg8VTA0RDc+LDxVMDRENj4pOy8KKyAgICg8VTA0RDk+LDxVMDREOD4pOyg8VTA0REI+LDxVMDREQT4pOyg8VTA0REQ+LDxVMDREQz4pOyg8VTA0REY+LDxVMDRERT4pOy8KKyAgICg8VTA0RTE+LDxVMDRFMD4pOyg8VTA0RTM+LDxVMDRFMj4pOyg8VTA0RTU+LDxVMDRFND4pOyg8VTA0RTc+LDxVMDRFNj4pOy8KKyAgICg8VTA0RTk+LDxVMDRFOD4pOyg8VTA0RUI+LDxVMDRFQT4pOyg8VTA0RUQ+LDxVMDRFQz4pOyg8VTA0RUY+LDxVMDRFRT4pOy8KKyAgICg8VTA0RjE+LDxVMDRGMD4pOyg8VTA0RjM+LDxVMDRGMj4pOyg8VTA0RjU+LDxVMDRGND4pOyg8VTA0Rjc+LDxVMDRGNj4pOy8KKyAgICg8VTA0Rjk+LDxVMDRGOD4pOyg8VTA0RkI+LDxVMDRGQT4pOyg8VTA0RkQ+LDxVMDRGQz4pOyg8VTA0RkY+LDxVMDRGRT4pOy8KKyAgICg8VTA1MDE+LDxVMDUwMD4pOyg8VTA1MDM+LDxVMDUwMj4pOyg8VTA1MDU+LDxVMDUwND4pOyg8VTA1MDc+LDxVMDUwNj4pOy8KKyAgICg8VTA1MDk+LDxVMDUwOD4pOyg8VTA1MEI+LDxVMDUwQT4pOyg8VTA1MEQ+LDxVMDUwQz4pOyg8VTA1MEY+LDxVMDUwRT4pOy8KKyAgICg8VTA1MTE+LDxVMDUxMD4pOyg8VTA1MTM+LDxVMDUxMj4pOyg8VTA1MTU+LDxVMDUxND4pOyg8VTA1MTc+LDxVMDUxNj4pOy8KKyAgICg8VTA1MTk+LDxVMDUxOD4pOyg8VTA1MUI+LDxVMDUxQT4pOyg8VTA1MUQ+LDxVMDUxQz4pOyg8VTA1MUY+LDxVMDUxRT4pOy8KKyAgICg8VTA1MjE+LDxVMDUyMD4pOyg8VTA1MjM+LDxVMDUyMj4pOyg8VTA1NjE+LDxVMDUzMT4pOyg8VTA1NjI+LDxVMDUzMj4pOy8KKyAgICg8VTA1NjM+LDxVMDUzMz4pOyg8VTA1NjQ+LDxVMDUzND4pOyg8VTA1NjU+LDxVMDUzNT4pOyg8VTA1NjY+LDxVMDUzNj4pOy8KKyAgICg8VTA1Njc+LDxVMDUzNz4pOyg8VTA1Njg+LDxVMDUzOD4pOyg8VTA1Njk+LDxVMDUzOT4pOyg8VTA1NkE+LDxVMDUzQT4pOy8KKyAgICg8VTA1NkI+LDxVMDUzQj4pOyg8VTA1NkM+LDxVMDUzQz4pOyg8VTA1NkQ+LDxVMDUzRD4pOyg8VTA1NkU+LDxVMDUzRT4pOy8KKyAgICg8VTA1NkY+LDxVMDUzRj4pOyg8VTA1NzA+LDxVMDU0MD4pOyg8VTA1NzE+LDxVMDU0MT4pOyg8VTA1NzI+LDxVMDU0Mj4pOy8KKyAgICg8VTA1NzM+LDxVMDU0Mz4pOyg8VTA1NzQ+LDxVMDU0ND4pOyg8VTA1NzU+LDxVMDU0NT4pOyg8VTA1NzY+LDxVMDU0Nj4pOy8KKyAgICg8VTA1Nzc+LDxVMDU0Nz4pOyg8VTA1Nzg+LDxVMDU0OD4pOyg8VTA1Nzk+LDxVMDU0OT4pOyg8VTA1N0E+LDxVMDU0QT4pOy8KKyAgICg8VTA1N0I+LDxVMDU0Qj4pOyg8VTA1N0M+LDxVMDU0Qz4pOyg8VTA1N0Q+LDxVMDU0RD4pOyg8VTA1N0U+LDxVMDU0RT4pOy8KKyAgICg8VTA1N0Y+LDxVMDU0Rj4pOyg8VTA1ODA+LDxVMDU1MD4pOyg8VTA1ODE+LDxVMDU1MT4pOyg8VTA1ODI+LDxVMDU1Mj4pOy8KKyAgICg8VTA1ODM+LDxVMDU1Mz4pOyg8VTA1ODQ+LDxVMDU1ND4pOyg8VTA1ODU+LDxVMDU1NT4pOyg8VTA1ODY+LDxVMDU1Nj4pOy8KKyAgICg8VTFEN0Q+LDxVMkM2Mz4pOyg8VTFFMDE+LDxVMUUwMD4pOyg8VTFFMDM+LDxVMUUwMj4pOyg8VTFFMDU+LDxVMUUwND4pOy8KKyAgICg8VTFFMDc+LDxVMUUwNj4pOyg8VTFFMDk+LDxVMUUwOD4pOyg8VTFFMEI+LDxVMUUwQT4pOyg8VTFFMEQ+LDxVMUUwQz4pOy8KKyAgICg8VTFFMEY+LDxVMUUwRT4pOyg8VTFFMTE+LDxVMUUxMD4pOyg8VTFFMTM+LDxVMUUxMj4pOyg8VTFFMTU+LDxVMUUxND4pOy8KKyAgICg8VTFFMTc+LDxVMUUxNj4pOyg8VTFFMTk+LDxVMUUxOD4pOyg8VTFFMUI+LDxVMUUxQT4pOyg8VTFFMUQ+LDxVMUUxQz4pOy8KKyAgICg8VTFFMUY+LDxVMUUxRT4pOyg8VTFFMjE+LDxVMUUyMD4pOyg8VTFFMjM+LDxVMUUyMj4pOyg8VTFFMjU+LDxVMUUyND4pOy8KKyAgICg8VTFFMjc+LDxVMUUyNj4pOyg8VTFFMjk+LDxVMUUyOD4pOyg8VTFFMkI+LDxVMUUyQT4pOyg8VTFFMkQ+LDxVMUUyQz4pOy8KKyAgICg8VTFFMkY+LDxVMUUyRT4pOyg8VTFFMzE+LDxVMUUzMD4pOyg8VTFFMzM+LDxVMUUzMj4pOyg8VTFFMzU+LDxVMUUzND4pOy8KKyAgICg8VTFFMzc+LDxVMUUzNj4pOyg8VTFFMzk+LDxVMUUzOD4pOyg8VTFFM0I+LDxVMUUzQT4pOyg8VTFFM0Q+LDxVMUUzQz4pOy8KKyAgICg8VTFFM0Y+LDxVMUUzRT4pOyg8VTFFNDE+LDxVMUU0MD4pOyg8VTFFNDM+LDxVMUU0Mj4pOyg8VTFFNDU+LDxVMUU0ND4pOy8KKyAgICg8VTFFNDc+LDxVMUU0Nj4pOyg8VTFFNDk+LDxVMUU0OD4pOyg8VTFFNEI+LDxVMUU0QT4pOyg8VTFFNEQ+LDxVMUU0Qz4pOy8KKyAgICg8VTFFNEY+LDxVMUU0RT4pOyg8VTFFNTE+LDxVMUU1MD4pOyg8VTFFNTM+LDxVMUU1Mj4pOyg8VTFFNTU+LDxVMUU1ND4pOy8KKyAgICg8VTFFNTc+LDxVMUU1Nj4pOyg8VTFFNTk+LDxVMUU1OD4pOyg8VTFFNUI+LDxVMUU1QT4pOyg8VTFFNUQ+LDxVMUU1Qz4pOy8KKyAgICg8VTFFNUY+LDxVMUU1RT4pOyg8VTFFNjE+LDxVMUU2MD4pOyg8VTFFNjM+LDxVMUU2Mj4pOyg8VTFFNjU+LDxVMUU2ND4pOy8KKyAgICg8VTFFNjc+LDxVMUU2Nj4pOyg8VTFFNjk+LDxVMUU2OD4pOyg8VTFFNkI+LDxVMUU2QT4pOyg8VTFFNkQ+LDxVMUU2Qz4pOy8KKyAgICg8VTFFNkY+LDxVMUU2RT4pOyg8VTFFNzE+LDxVMUU3MD4pOyg8VTFFNzM+LDxVMUU3Mj4pOyg8VTFFNzU+LDxVMUU3ND4pOy8KKyAgICg8VTFFNzc+LDxVMUU3Nj4pOyg8VTFFNzk+LDxVMUU3OD4pOyg8VTFFN0I+LDxVMUU3QT4pOyg8VTFFN0Q+LDxVMUU3Qz4pOy8KKyAgICg8VTFFN0Y+LDxVMUU3RT4pOyg8VTFFODE+LDxVMUU4MD4pOyg8VTFFODM+LDxVMUU4Mj4pOyg8VTFFODU+LDxVMUU4ND4pOy8KKyAgICg8VTFFODc+LDxVMUU4Nj4pOyg8VTFFODk+LDxVMUU4OD4pOyg8VTFFOEI+LDxVMUU4QT4pOyg8VTFFOEQ+LDxVMUU4Qz4pOy8KKyAgICg8VTFFOEY+LDxVMUU4RT4pOyg8VTFFOTE+LDxVMUU5MD4pOyg8VTFFOTM+LDxVMUU5Mj4pOyg8VTFFOTU+LDxVMUU5ND4pOy8KKyAgICg8VTFFOUI+LDxVMUU2MD4pOyg8VTFFQTE+LDxVMUVBMD4pOyg8VTFFQTM+LDxVMUVBMj4pOyg8VTFFQTU+LDxVMUVBND4pOy8KKyAgICg8VTFFQTc+LDxVMUVBNj4pOyg8VTFFQTk+LDxVMUVBOD4pOyg8VTFFQUI+LDxVMUVBQT4pOyg8VTFFQUQ+LDxVMUVBQz4pOy8KKyAgICg8VTFFQUY+LDxVMUVBRT4pOyg8VTFFQjE+LDxVMUVCMD4pOyg8VTFFQjM+LDxVMUVCMj4pOyg8VTFFQjU+LDxVMUVCND4pOy8KKyAgICg8VTFFQjc+LDxVMUVCNj4pOyg8VTFFQjk+LDxVMUVCOD4pOyg8VTFFQkI+LDxVMUVCQT4pOyg8VTFFQkQ+LDxVMUVCQz4pOy8KKyAgICg8VTFFQkY+LDxVMUVCRT4pOyg8VTFFQzE+LDxVMUVDMD4pOyg8VTFFQzM+LDxVMUVDMj4pOyg8VTFFQzU+LDxVMUVDND4pOy8KKyAgICg8VTFFQzc+LDxVMUVDNj4pOyg8VTFFQzk+LDxVMUVDOD4pOyg8VTFFQ0I+LDxVMUVDQT4pOyg8VTFFQ0Q+LDxVMUVDQz4pOy8KKyAgICg8VTFFQ0Y+LDxVMUVDRT4pOyg8VTFFRDE+LDxVMUVEMD4pOyg8VTFFRDM+LDxVMUVEMj4pOyg8VTFFRDU+LDxVMUVEND4pOy8KKyAgICg8VTFFRDc+LDxVMUVENj4pOyg8VTFFRDk+LDxVMUVEOD4pOyg8VTFFREI+LDxVMUVEQT4pOyg8VTFFREQ+LDxVMUVEQz4pOy8KKyAgICg8VTFFREY+LDxVMUVERT4pOyg8VTFFRTE+LDxVMUVFMD4pOyg8VTFFRTM+LDxVMUVFMj4pOyg8VTFFRTU+LDxVMUVFND4pOy8KKyAgICg8VTFFRTc+LDxVMUVFNj4pOyg8VTFFRTk+LDxVMUVFOD4pOyg8VTFFRUI+LDxVMUVFQT4pOyg8VTFFRUQ+LDxVMUVFQz4pOy8KKyAgICg8VTFFRUY+LDxVMUVFRT4pOyg8VTFFRjE+LDxVMUVGMD4pOyg8VTFFRjM+LDxVMUVGMj4pOyg8VTFFRjU+LDxVMUVGND4pOy8KKyAgICg8VTFFRjc+LDxVMUVGNj4pOyg8VTFFRjk+LDxVMUVGOD4pOyg8VTFGMDA+LDxVMUYwOD4pOyg8VTFGMDE+LDxVMUYwOT4pOy8KKyAgICg8VTFGMDI+LDxVMUYwQT4pOyg8VTFGMDM+LDxVMUYwQj4pOyg8VTFGMDQ+LDxVMUYwQz4pOyg8VTFGMDU+LDxVMUYwRD4pOy8KKyAgICg8VTFGMDY+LDxVMUYwRT4pOyg8VTFGMDc+LDxVMUYwRj4pOyg8VTFGMTA+LDxVMUYxOD4pOyg8VTFGMTE+LDxVMUYxOT4pOy8KKyAgICg8VTFGMTI+LDxVMUYxQT4pOyg8VTFGMTM+LDxVMUYxQj4pOyg8VTFGMTQ+LDxVMUYxQz4pOyg8VTFGMTU+LDxVMUYxRD4pOy8KKyAgICg8VTFGMjA+LDxVMUYyOD4pOyg8VTFGMjE+LDxVMUYyOT4pOyg8VTFGMjI+LDxVMUYyQT4pOyg8VTFGMjM+LDxVMUYyQj4pOy8KKyAgICg8VTFGMjQ+LDxVMUYyQz4pOyg8VTFGMjU+LDxVMUYyRD4pOyg8VTFGMjY+LDxVMUYyRT4pOyg8VTFGMjc+LDxVMUYyRj4pOy8KKyAgICg8VTFGMzA+LDxVMUYzOD4pOyg8VTFGMzE+LDxVMUYzOT4pOyg8VTFGMzI+LDxVMUYzQT4pOyg8VTFGMzM+LDxVMUYzQj4pOy8KKyAgICg8VTFGMzQ+LDxVMUYzQz4pOyg8VTFGMzU+LDxVMUYzRD4pOyg8VTFGMzY+LDxVMUYzRT4pOyg8VTFGMzc+LDxVMUYzRj4pOy8KKyAgICg8VTFGNDA+LDxVMUY0OD4pOyg8VTFGNDE+LDxVMUY0OT4pOyg8VTFGNDI+LDxVMUY0QT4pOyg8VTFGNDM+LDxVMUY0Qj4pOy8KKyAgICg8VTFGNDQ+LDxVMUY0Qz4pOyg8VTFGNDU+LDxVMUY0RD4pOyg8VTFGNTE+LDxVMUY1OT4pOyg8VTFGNTM+LDxVMUY1Qj4pOy8KKyAgICg8VTFGNTU+LDxVMUY1RD4pOyg8VTFGNTc+LDxVMUY1Rj4pOyg8VTFGNjA+LDxVMUY2OD4pOyg8VTFGNjE+LDxVMUY2OT4pOy8KKyAgICg8VTFGNjI+LDxVMUY2QT4pOyg8VTFGNjM+LDxVMUY2Qj4pOyg8VTFGNjQ+LDxVMUY2Qz4pOyg8VTFGNjU+LDxVMUY2RD4pOy8KKyAgICg8VTFGNjY+LDxVMUY2RT4pOyg8VTFGNjc+LDxVMUY2Rj4pOyg8VTFGNzA+LDxVMUZCQT4pOyg8VTFGNzE+LDxVMUZCQj4pOy8KKyAgICg8VTFGNzI+LDxVMUZDOD4pOyg8VTFGNzM+LDxVMUZDOT4pOyg8VTFGNzQ+LDxVMUZDQT4pOyg8VTFGNzU+LDxVMUZDQj4pOy8KKyAgICg8VTFGNzY+LDxVMUZEQT4pOyg8VTFGNzc+LDxVMUZEQj4pOyg8VTFGNzg+LDxVMUZGOD4pOyg8VTFGNzk+LDxVMUZGOT4pOy8KKyAgICg8VTFGN0E+LDxVMUZFQT4pOyg8VTFGN0I+LDxVMUZFQj4pOyg8VTFGN0M+LDxVMUZGQT4pOyg8VTFGN0Q+LDxVMUZGQj4pOy8KKyAgICg8VTFGODA+LDxVMUY4OD4pOyg8VTFGODE+LDxVMUY4OT4pOyg8VTFGODI+LDxVMUY4QT4pOyg8VTFGODM+LDxVMUY4Qj4pOy8KKyAgICg8VTFGODQ+LDxVMUY4Qz4pOyg8VTFGODU+LDxVMUY4RD4pOyg8VTFGODY+LDxVMUY4RT4pOyg8VTFGODc+LDxVMUY4Rj4pOy8KKyAgICg8VTFGOTA+LDxVMUY5OD4pOyg8VTFGOTE+LDxVMUY5OT4pOyg8VTFGOTI+LDxVMUY5QT4pOyg8VTFGOTM+LDxVMUY5Qj4pOy8KKyAgICg8VTFGOTQ+LDxVMUY5Qz4pOyg8VTFGOTU+LDxVMUY5RD4pOyg8VTFGOTY+LDxVMUY5RT4pOyg8VTFGOTc+LDxVMUY5Rj4pOy8KKyAgICg8VTFGQTA+LDxVMUZBOD4pOyg8VTFGQTE+LDxVMUZBOT4pOyg8VTFGQTI+LDxVMUZBQT4pOyg8VTFGQTM+LDxVMUZBQj4pOy8KKyAgICg8VTFGQTQ+LDxVMUZBQz4pOyg8VTFGQTU+LDxVMUZBRD4pOyg8VTFGQTY+LDxVMUZBRT4pOyg8VTFGQTc+LDxVMUZBRj4pOy8KKyAgICg8VTFGQjA+LDxVMUZCOD4pOyg8VTFGQjE+LDxVMUZCOT4pOyg8VTFGQjM+LDxVMUZCQz4pOyg8VTFGQkU+LDxVMDM5OT4pOy8KKyAgICg8VTFGQzM+LDxVMUZDQz4pOyg8VTFGRDA+LDxVMUZEOD4pOyg8VTFGRDE+LDxVMUZEOT4pOyg8VTFGRTA+LDxVMUZFOD4pOy8KKyAgICg8VTFGRTE+LDxVMUZFOT4pOyg8VTFGRTU+LDxVMUZFQz4pOyg8VTFGRjM+LDxVMUZGQz4pOyg8VTIxNEU+LDxVMjEzMj4pOy8KKyAgICg8VTIxNzA+LDxVMjE2MD4pOyg8VTIxNzE+LDxVMjE2MT4pOyg8VTIxNzI+LDxVMjE2Mj4pOyg8VTIxNzM+LDxVMjE2Mz4pOy8KKyAgICg8VTIxNzQ+LDxVMjE2ND4pOyg8VTIxNzU+LDxVMjE2NT4pOyg8VTIxNzY+LDxVMjE2Nj4pOyg8VTIxNzc+LDxVMjE2Nz4pOy8KKyAgICg8VTIxNzg+LDxVMjE2OD4pOyg8VTIxNzk+LDxVMjE2OT4pOyg8VTIxN0E+LDxVMjE2QT4pOyg8VTIxN0I+LDxVMjE2Qj4pOy8KKyAgICg8VTIxN0M+LDxVMjE2Qz4pOyg8VTIxN0Q+LDxVMjE2RD4pOyg8VTIxN0U+LDxVMjE2RT4pOyg8VTIxN0Y+LDxVMjE2Rj4pOy8KKyAgICg8VTIxODQ+LDxVMjE4Mz4pOyg8VTI0RDA+LDxVMjRCNj4pOyg8VTI0RDE+LDxVMjRCNz4pOyg8VTI0RDI+LDxVMjRCOD4pOy8KKyAgICg8VTI0RDM+LDxVMjRCOT4pOyg8VTI0RDQ+LDxVMjRCQT4pOyg8VTI0RDU+LDxVMjRCQj4pOyg8VTI0RDY+LDxVMjRCQz4pOy8KKyAgICg8VTI0RDc+LDxVMjRCRD4pOyg8VTI0RDg+LDxVMjRCRT4pOyg8VTI0RDk+LDxVMjRCRj4pOyg8VTI0REE+LDxVMjRDMD4pOy8KKyAgICg8VTI0REI+LDxVMjRDMT4pOyg8VTI0REM+LDxVMjRDMj4pOyg8VTI0REQ+LDxVMjRDMz4pOyg8VTI0REU+LDxVMjRDND4pOy8KKyAgICg8VTI0REY+LDxVMjRDNT4pOyg8VTI0RTA+LDxVMjRDNj4pOyg8VTI0RTE+LDxVMjRDNz4pOyg8VTI0RTI+LDxVMjRDOD4pOy8KKyAgICg8VTI0RTM+LDxVMjRDOT4pOyg8VTI0RTQ+LDxVMjRDQT4pOyg8VTI0RTU+LDxVMjRDQj4pOyg8VTI0RTY+LDxVMjRDQz4pOy8KKyAgICg8VTI0RTc+LDxVMjRDRD4pOyg8VTI0RTg+LDxVMjRDRT4pOyg8VTI0RTk+LDxVMjRDRj4pOyg8VTJDMzA+LDxVMkMwMD4pOy8KKyAgICg8VTJDMzE+LDxVMkMwMT4pOyg8VTJDMzI+LDxVMkMwMj4pOyg8VTJDMzM+LDxVMkMwMz4pOyg8VTJDMzQ+LDxVMkMwND4pOy8KKyAgICg8VTJDMzU+LDxVMkMwNT4pOyg8VTJDMzY+LDxVMkMwNj4pOyg8VTJDMzc+LDxVMkMwNz4pOyg8VTJDMzg+LDxVMkMwOD4pOy8KKyAgICg8VTJDMzk+LDxVMkMwOT4pOyg8VTJDM0E+LDxVMkMwQT4pOyg8VTJDM0I+LDxVMkMwQj4pOyg8VTJDM0M+LDxVMkMwQz4pOy8KKyAgICg8VTJDM0Q+LDxVMkMwRD4pOyg8VTJDM0U+LDxVMkMwRT4pOyg8VTJDM0Y+LDxVMkMwRj4pOyg8VTJDNDA+LDxVMkMxMD4pOy8KKyAgICg8VTJDNDE+LDxVMkMxMT4pOyg8VTJDNDI+LDxVMkMxMj4pOyg8VTJDNDM+LDxVMkMxMz4pOyg8VTJDNDQ+LDxVMkMxND4pOy8KKyAgICg8VTJDNDU+LDxVMkMxNT4pOyg8VTJDNDY+LDxVMkMxNj4pOyg8VTJDNDc+LDxVMkMxNz4pOyg8VTJDNDg+LDxVMkMxOD4pOy8KKyAgICg8VTJDNDk+LDxVMkMxOT4pOyg8VTJDNEE+LDxVMkMxQT4pOyg8VTJDNEI+LDxVMkMxQj4pOyg8VTJDNEM+LDxVMkMxQz4pOy8KKyAgICg8VTJDNEQ+LDxVMkMxRD4pOyg8VTJDNEU+LDxVMkMxRT4pOyg8VTJDNEY+LDxVMkMxRj4pOyg8VTJDNTA+LDxVMkMyMD4pOy8KKyAgICg8VTJDNTE+LDxVMkMyMT4pOyg8VTJDNTI+LDxVMkMyMj4pOyg8VTJDNTM+LDxVMkMyMz4pOyg8VTJDNTQ+LDxVMkMyND4pOy8KKyAgICg8VTJDNTU+LDxVMkMyNT4pOyg8VTJDNTY+LDxVMkMyNj4pOyg8VTJDNTc+LDxVMkMyNz4pOyg8VTJDNTg+LDxVMkMyOD4pOy8KKyAgICg8VTJDNTk+LDxVMkMyOT4pOyg8VTJDNUE+LDxVMkMyQT4pOyg8VTJDNUI+LDxVMkMyQj4pOyg8VTJDNUM+LDxVMkMyQz4pOy8KKyAgICg8VTJDNUQ+LDxVMkMyRD4pOyg8VTJDNUU+LDxVMkMyRT4pOyg8VTJDNjE+LDxVMkM2MD4pOyg8VTJDNjU+LDxVMDIzQT4pOy8KKyAgICg8VTJDNjY+LDxVMDIzRT4pOyg8VTJDNjg+LDxVMkM2Nz4pOyg8VTJDNkE+LDxVMkM2OT4pOyg8VTJDNkM+LDxVMkM2Qj4pOy8KKyAgICg8VTJDNzY+LDxVMkM3NT4pOyg8VTJDODE+LDxVMkM4MD4pOyg8VTJDODM+LDxVMkM4Mj4pOyg8VTJDODU+LDxVMkM4ND4pOy8KKyAgICg8VTJDODc+LDxVMkM4Nj4pOyg8VTJDODk+LDxVMkM4OD4pOyg8VTJDOEI+LDxVMkM4QT4pOyg8VTJDOEQ+LDxVMkM4Qz4pOy8KKyAgICg8VTJDOEY+LDxVMkM4RT4pOyg8VTJDOTE+LDxVMkM5MD4pOyg8VTJDOTM+LDxVMkM5Mj4pOyg8VTJDOTU+LDxVMkM5ND4pOy8KKyAgICg8VTJDOTc+LDxVMkM5Nj4pOyg8VTJDOTk+LDxVMkM5OD4pOyg8VTJDOUI+LDxVMkM5QT4pOyg8VTJDOUQ+LDxVMkM5Qz4pOy8KKyAgICg8VTJDOUY+LDxVMkM5RT4pOyg8VTJDQTE+LDxVMkNBMD4pOyg8VTJDQTM+LDxVMkNBMj4pOyg8VTJDQTU+LDxVMkNBND4pOy8KKyAgICg8VTJDQTc+LDxVMkNBNj4pOyg8VTJDQTk+LDxVMkNBOD4pOyg8VTJDQUI+LDxVMkNBQT4pOyg8VTJDQUQ+LDxVMkNBQz4pOy8KKyAgICg8VTJDQUY+LDxVMkNBRT4pOyg8VTJDQjE+LDxVMkNCMD4pOyg8VTJDQjM+LDxVMkNCMj4pOyg8VTJDQjU+LDxVMkNCND4pOy8KKyAgICg8VTJDQjc+LDxVMkNCNj4pOyg8VTJDQjk+LDxVMkNCOD4pOyg8VTJDQkI+LDxVMkNCQT4pOyg8VTJDQkQ+LDxVMkNCQz4pOy8KKyAgICg8VTJDQkY+LDxVMkNCRT4pOyg8VTJDQzE+LDxVMkNDMD4pOyg8VTJDQzM+LDxVMkNDMj4pOyg8VTJDQzU+LDxVMkNDND4pOy8KKyAgICg8VTJDQzc+LDxVMkNDNj4pOyg8VTJDQzk+LDxVMkNDOD4pOyg8VTJDQ0I+LDxVMkNDQT4pOyg8VTJDQ0Q+LDxVMkNDQz4pOy8KKyAgICg8VTJDQ0Y+LDxVMkNDRT4pOyg8VTJDRDE+LDxVMkNEMD4pOyg8VTJDRDM+LDxVMkNEMj4pOyg8VTJDRDU+LDxVMkNEND4pOy8KKyAgICg8VTJDRDc+LDxVMkNENj4pOyg8VTJDRDk+LDxVMkNEOD4pOyg8VTJDREI+LDxVMkNEQT4pOyg8VTJDREQ+LDxVMkNEQz4pOy8KKyAgICg8VTJDREY+LDxVMkNERT4pOyg8VTJDRTE+LDxVMkNFMD4pOyg8VTJDRTM+LDxVMkNFMj4pOyg8VTJEMDA+LDxVMTBBMD4pOy8KKyAgICg8VTJEMDE+LDxVMTBBMT4pOyg8VTJEMDI+LDxVMTBBMj4pOyg8VTJEMDM+LDxVMTBBMz4pOyg8VTJEMDQ+LDxVMTBBND4pOy8KKyAgICg8VTJEMDU+LDxVMTBBNT4pOyg8VTJEMDY+LDxVMTBBNj4pOyg8VTJEMDc+LDxVMTBBNz4pOyg8VTJEMDg+LDxVMTBBOD4pOy8KKyAgICg8VTJEMDk+LDxVMTBBOT4pOyg8VTJEMEE+LDxVMTBBQT4pOyg8VTJEMEI+LDxVMTBBQj4pOyg8VTJEMEM+LDxVMTBBQz4pOy8KKyAgICg8VTJEMEQ+LDxVMTBBRD4pOyg8VTJEMEU+LDxVMTBBRT4pOyg8VTJEMEY+LDxVMTBBRj4pOyg8VTJEMTA+LDxVMTBCMD4pOy8KKyAgICg8VTJEMTE+LDxVMTBCMT4pOyg8VTJEMTI+LDxVMTBCMj4pOyg8VTJEMTM+LDxVMTBCMz4pOyg8VTJEMTQ+LDxVMTBCND4pOy8KKyAgICg8VTJEMTU+LDxVMTBCNT4pOyg8VTJEMTY+LDxVMTBCNj4pOyg8VTJEMTc+LDxVMTBCNz4pOyg8VTJEMTg+LDxVMTBCOD4pOy8KKyAgICg8VTJEMTk+LDxVMTBCOT4pOyg8VTJEMUE+LDxVMTBCQT4pOyg8VTJEMUI+LDxVMTBCQj4pOyg8VTJEMUM+LDxVMTBCQz4pOy8KKyAgICg8VTJEMUQ+LDxVMTBCRD4pOyg8VTJEMUU+LDxVMTBCRT4pOyg8VTJEMUY+LDxVMTBCRj4pOyg8VTJEMjA+LDxVMTBDMD4pOy8KKyAgICg8VTJEMjE+LDxVMTBDMT4pOyg8VTJEMjI+LDxVMTBDMj4pOyg8VTJEMjM+LDxVMTBDMz4pOyg8VTJEMjQ+LDxVMTBDND4pOy8KKyAgICg8VTJEMjU+LDxVMTBDNT4pOyg8VUZGNDE+LDxVRkYyMT4pOyg8VUZGNDI+LDxVRkYyMj4pOyg8VUZGNDM+LDxVRkYyMz4pOy8KKyAgICg8VUZGNDQ+LDxVRkYyND4pOyg8VUZGNDU+LDxVRkYyNT4pOyg8VUZGNDY+LDxVRkYyNj4pOyg8VUZGNDc+LDxVRkYyNz4pOy8KKyAgICg8VUZGNDg+LDxVRkYyOD4pOyg8VUZGNDk+LDxVRkYyOT4pOyg8VUZGNEE+LDxVRkYyQT4pOyg8VUZGNEI+LDxVRkYyQj4pOy8KKyAgICg8VUZGNEM+LDxVRkYyQz4pOyg8VUZGNEQ+LDxVRkYyRD4pOyg8VUZGNEU+LDxVRkYyRT4pOyg8VUZGNEY+LDxVRkYyRj4pOy8KKyAgICg8VUZGNTA+LDxVRkYzMD4pOyg8VUZGNTE+LDxVRkYzMT4pOyg8VUZGNTI+LDxVRkYzMj4pOyg8VUZGNTM+LDxVRkYzMz4pOy8KKyAgICg8VUZGNTQ+LDxVRkYzND4pOyg8VUZGNTU+LDxVRkYzNT4pOyg8VUZGNTY+LDxVRkYzNj4pOyg8VUZGNTc+LDxVRkYzNz4pOy8KKyAgICg8VUZGNTg+LDxVRkYzOD4pOyg8VUZGNTk+LDxVRkYzOT4pOyg8VUZGNUE+LDxVRkYzQT4pOy8KKyAgICg8VTAwMDEwNDI4Piw8VTAwMDEwNDAwPik7KDxVMDAwMTA0Mjk+LDxVMDAwMTA0MDE+KTsvCisgICAoPFUwMDAxMDQyQT4sPFUwMDAxMDQwMj4pOyg8VTAwMDEwNDJCPiw8VTAwMDEwNDAzPik7LworICAgKDxVMDAwMTA0MkM+LDxVMDAwMTA0MDQ+KTsoPFUwMDAxMDQyRD4sPFUwMDAxMDQwNT4pOy8KKyAgICg8VTAwMDEwNDJFPiw8VTAwMDEwNDA2Pik7KDxVMDAwMTA0MkY+LDxVMDAwMTA0MDc+KTsvCisgICAoPFUwMDAxMDQzMD4sPFUwMDAxMDQwOD4pOyg8VTAwMDEwNDMxPiw8VTAwMDEwNDA5Pik7LworICAgKDxVMDAwMTA0MzI+LDxVMDAwMTA0MEE+KTsoPFUwMDAxMDQzMz4sPFUwMDAxMDQwQj4pOy8KKyAgICg8VTAwMDEwNDM0Piw8VTAwMDEwNDBDPik7KDxVMDAwMTA0MzU+LDxVMDAwMTA0MEQ+KTsvCisgICAoPFUwMDAxMDQzNj4sPFUwMDAxMDQwRT4pOyg8VTAwMDEwNDM3Piw8VTAwMDEwNDBGPik7LworICAgKDxVMDAwMTA0Mzg+LDxVMDAwMTA0MTA+KTsoPFUwMDAxMDQzOT4sPFUwMDAxMDQxMT4pOy8KKyAgICg8VTAwMDEwNDNBPiw8VTAwMDEwNDEyPik7KDxVMDAwMTA0M0I+LDxVMDAwMTA0MTM+KTsvCisgICAoPFUwMDAxMDQzQz4sPFUwMDAxMDQxND4pOyg8VTAwMDEwNDNEPiw8VTAwMDEwNDE1Pik7LworICAgKDxVMDAwMTA0M0U+LDxVMDAwMTA0MTY+KTsoPFUwMDAxMDQzRj4sPFUwMDAxMDQxNz4pOy8KKyAgICg8VTAwMDEwNDQwPiw8VTAwMDEwNDE4Pik7KDxVMDAwMTA0NDE+LDxVMDAwMTA0MTk+KTsvCisgICAoPFUwMDAxMDQ0Mj4sPFUwMDAxMDQxQT4pOyg8VTAwMDEwNDQzPiw8VTAwMDEwNDFCPik7LworICAgKDxVMDAwMTA0NDQ+LDxVMDAwMTA0MUM+KTsoPFUwMDAxMDQ0NT4sPFUwMDAxMDQxRD4pOy8KKyAgICg8VTAwMDEwNDQ2Piw8VTAwMDEwNDFFPik7KDxVMDAwMTA0NDc+LDxVMDAwMTA0MUY+KTsvCisgICAoPFUwMDAxMDQ0OD4sPFUwMDAxMDQyMD4pOyg8VTAwMDEwNDQ5Piw8VTAwMDEwNDIxPik7LworICAgKDxVMDAwMTA0NEE+LDxVMDAwMTA0MjI+KTsoPFUwMDAxMDQ0Qj4sPFUwMDAxMDQyMz4pOy8KKyAgICg8VTAwMDEwNDRDPiw8VTAwMDEwNDI0Pik7KDxVMDAwMTA0NEQ+LDxVMDAwMTA0MjU+KTsvCisgICAoPFUwMDAxMDQ0RT4sPFUwMDAxMDQyNj4pOyg8VTAwMDEwNDRGPiw8VTAwMDEwNDI3PikKKworJSBUaGUgImNvbWJpbmluZyIgY2xhc3MgcmVmbGVjdHMgSVNPL0lFQyAxMDY0Ni0xIGFubmV4IEIuMQorJSBUaGF0IGlzLCBhbGwgY29tYmluaW5nIGNoYXJhY3RlcnMgKGxldmVsIDIrMykuCitjbGFzcyAiY29tYmluaW5nIjsgLworICAgPFUwMzAwPi4uPFUwMzZGPjs8VTA0ODM+Li48VTA0ODY+OzxVMDQ4OD4uLjxVMDQ4OT47PFUwNTkxPi4uPFUwNUJEPjsvCisgICA8VTA1QkY+OzxVMDVDMT4uLjxVMDVDMj47PFUwNUM0Pi4uPFUwNUM1Pjs8VTA1Qzc+OzxVMDYxMD4uLjxVMDYxQT47LworICAgPFUwNjRCPi4uPFUwNjVFPjs8VTA2NzA+OzxVMDZENj4uLjxVMDZEQz47PFUwNkRFPi4uPFUwNkU0PjsvCisgICA8VTA2RTc+Li48VTA2RTg+OzxVMDZFQT4uLjxVMDZFRD47PFUwNzExPjs8VTA3MzA+Li48VTA3NEE+Oy8KKyAgIDxVMDdBNj4uLjxVMDdCMD47PFUwN0VCPi4uPFUwN0YzPjs8VTA5MDE+Li48VTA5MDM+OzxVMDkzQz47LworICAgPFUwOTNFPi4uPFUwOTREPjs8VTA5NTE+Li48VTA5NTQ+OzxVMDk2Mj4uLjxVMDk2Mz47PFUwOTgxPi4uPFUwOTgzPjsvCisgICA8VTA5QkM+OzxVMDlCRT4uLjxVMDlDND47PFUwOUM3Pi4uPFUwOUM4Pjs8VTA5Q0I+Li48VTA5Q0Q+OzxVMDlENz47LworICAgPFUwOUUyPi4uPFUwOUUzPjs8VTBBMDE+Li48VTBBMDM+OzxVMEEzQz47PFUwQTNFPi4uPFUwQTQyPjsvCisgICA8VTBBNDc+Li48VTBBNDg+OzxVMEE0Qj4uLjxVMEE0RD47PFUwQTUxPjs8VTBBNzA+Li48VTBBNzE+Oy8KKyAgIDxVMEE3NT47PFUwQTgxPi4uPFUwQTgzPjsvCisgICA8VTBBQkM+OzxVMEFCRT4uLjxVMEFDNT47PFUwQUM3Pi4uPFUwQUM5Pjs8VTBBQ0I+Li48VTBBQ0Q+Oy8KKyAgIDxVMEFFMj4uLjxVMEFFMz47PFUwQjAxPi4uPFUwQjAzPjs8VTBCM0M+OzxVMEIzRT4uLjxVMEI0ND47LworICAgPFUwQjQ3Pi4uPFUwQjQ4Pjs8VTBCNEI+Li48VTBCNEQ+OzxVMEI1Nj4uLjxVMEI1Nz47PFUwQjgyPjsvCisgICA8VTBCQkU+Li48VTBCQzI+OzxVMEJDNj4uLjxVMEJDOD47PFUwQkNBPi4uPFUwQkNEPjs8VTBCRDA+OzxVMEJENz47LworICAgPFUwQzAxPi4uPFUwQzAzPjs8VTBDM0U+Li48VTBDNDQ+OzxVMEM0Nj4uLjxVMEM0OD47PFUwQzRBPi4uPFUwQzREPjsvCisgICA8VTBDNTU+Li48VTBDNTY+OzxVMEM2Mj4uLjxVMEM2Mz47PFUwQzgyPi4uPFUwQzgzPjs8VTBDQkM+Oy8KKyAgIDxVMENCRT4uLjxVMENDND47LworICAgPFUwQ0M2Pi4uPFUwQ0M4Pjs8VTBDQ0E+Li48VTBDQ0Q+OzxVMENENT4uLjxVMENENj47PFUwQ0UyPi4uPFUwQ0UzPjsvCisgICA8VTBEMDI+Li48VTBEMDM+OzxVMEQzRT4uLjxVMEQ0ND47PFUwRDQ2Pi4uPFUwRDQ4Pjs8VTBENEE+Li48VTBENEQ+Oy8KKyAgIDxVMEQ1Nz47PFUwRDYyPi4uPFUwRDYzPjs8VTBEODI+Li48VTBEODM+OzxVMERDQT47PFUwRENGPi4uPFUwREQ0PjsvCisgICA8VTBERDY+OzxVMEREOD4uLjxVMERERj47PFUwREYyPi4uPFUwREYzPjs8VTBFMzE+OzxVMEUzND4uLjxVMEUzQT47LworICAgPFUwRTQ3Pi4uPFUwRTRFPjs8VTBFQjE+OzxVMEVCND4uLjxVMEVCOT47PFUwRUJCPi4uPFUwRUJDPjsvCisgICA8VTBFQzg+Li48VTBFQ0Q+OzxVMEYxOD4uLjxVMEYxOT47PFUwRjM1Pjs8VTBGMzc+OzxVMEYzOT47LworICAgPFUwRjNFPi4uPFUwRjNGPjs8VTBGNzE+Li48VTBGODQ+OzxVMEY4Nj4uLjxVMEY4Nz47PFUwRjkwPi4uPFUwRjk3PjsvCisgICA8VTBGOTk+Li48VTBGQkM+OzxVMEZDNj47PFUxMDJCPi4uPFUxMDNGPjsvCisgICA8VTEwNTY+Li48VTEwNTk+OzxVMTA1RT4uLjxVMTA2MD47PFUxMDYyPi4uPFUxMDY0Pjs8VTEwNjc+Li48VTEwNkQ+Oy8KKyAgIDxVMTA3MT4uLjxVMTA3ND47PFUxMDgyPi4uPFUxMDhEPjs8VTEwOEY+Oy8KKyAgIDxVMTM1Rj47PFUxNzEyPi4uPFUxNzE0Pjs8VTE3MzI+Li48VTE3MzQ+Oy8KKyAgIDxVMTc1Mj4uLjxVMTc1Mz47PFUxNzcyPi4uPFUxNzczPjs8VTE3QjY+Li48VTE3RDM+OzxVMTdERD47LworICAgPFUxODBCPi4uPFUxODBEPjs8VTE4QTk+OzxVMTkyMD4uLjxVMTkyQj47PFUxOTMwPi4uPFUxOTNCPjsvCisgICA8VTE5QjA+Li48VTE5QzA+OzxVMTlDOD4uLjxVMTlDOT47PFUxQTE3Pi4uPFUxQTFCPjs8VTFCMDA+Li48VTFCMDQ+Oy8KKyAgIDxVMUIzND4uLjxVMUI0ND47PFUxQjZCPi4uPFUxQjczPjs8VTFEQzA+Li48VTFERTY+OzxVMURGRT4uLjxVMURGRj47LworICAgPFUyMEQwPi4uPFUyMEYwPjs8VTJERTA+Li48VTJERkY+OzxVMzAyQT4uLjxVMzAyRj47PFUzMDk5Pi4uPFUzMDlBPjsvCisgICA8VUE2NkY+Li48VUE2NzI+OzxVQTY3Qz47PFVBNjdEPjs8VUE4MDI+OzxVQTgwNj47LworICAgPFVBODBCPjs8VUE4MjM+Li48VUE4Mjc+OzxVRkIxRT47PFVGRTAwPi4uPFVGRTBGPjs8VUZFMjA+Li48VUZFMjY+Oy8KKyAgIDxVMDAwMTBBMDE+Li48VTAwMDEwQTAzPjs8VTAwMDEwQTA1Pi4uPFUwMDAxMEEwNj47LworICAgPFUwMDAxMEEwQz4uLjxVMDAwMTBBMEY+OzxVMDAwMTBBMzg+Li48VTAwMDEwQTNBPjs8VTAwMDEwQTNGPjsvCisgICA8VTAwMDFEMTY1Pi4uPFUwMDAxRDE2OT47PFUwMDAxRDE2RD4uLjxVMDAwMUQxNzI+Oy8KKyAgIDxVMDAwMUQxN0I+Li48VTAwMDFEMTgyPjs8VTAwMDFEMTg1Pi4uPFUwMDAxRDE4Qj47LworICAgPFUwMDAxRDFBQT4uLjxVMDAwMUQxQUQ+OzxVMDAwMUQyNDI+Li48VTAwMDFEMjQ0PjsvCisgICA8VTAwMEUwMTAwPi4uPFUwMDBFMDFFRj4KKworJSBUaGUgImNvbWJpbmluZ19sZXZlbDMiIGNsYXNzIHJlZmxlY3RzIElTTy9JRUMgMTA2NDYtMSBhbm5leCBCLjIKKyUgVGhhdCBpcywgY29tYmluaW5nIGNoYXJhY3RlcnMgb2YgbGV2ZWwgMy4KK2NsYXNzICJjb21iaW5pbmdfbGV2ZWwzIjsgLworICAgPFUwMzM0Pi4uPFUwMzM4Pjs8VTAzNEY+OzxVMDQ4OD4uLjxVMDQ4OT47PFUwNUIwPi4uPFUwNUJEPjs8VTA1QkY+Oy8KKyAgIDxVMDVDMT4uLjxVMDVDMj47PFUwNUM3Pjs8VTA2NEI+Li48VTA2NTI+OzxVMDY3MD47PFUwNkRFPjs8VTA3MTE+Oy8KKyAgIDxVMDdBNj4uLjxVMDdCMD47PFUwOTAxPi4uPFUwOTAzPjs8VTA5M0M+OzxVMDkzRT4uLjxVMDk0RD47LworICAgPFUwOTYyPi4uPFUwOTYzPjs8VTA5ODE+Li48VTA5ODM+OzxVMDlCQz47PFUwOUJFPi4uPFUwOUM0PjsvCisgICA8VTA5Qzc+Li48VTA5Qzg+OzxVMDlDQj4uLjxVMDlDRD47PFUwOUQ3Pjs8VTA5RTI+Li48VTA5RTM+Oy8KKyAgIDxVMEEwMT4uLjxVMEEwMz47PFUwQTNDPjs8VTBBM0U+Li48VTBBNDI+OzxVMEE0Nz4uLjxVMEE0OD47LworICAgPFUwQTRCPi4uPFUwQTREPjs8VTBBNTE+OzxVMEE3MD4uLjxVMEE3MT47PFUwMzc1Pjs8VTBBODE+Li48VTBBODM+Oy8KKyAgIDxVMEFCQz47LworICAgPFUwQUJFPi4uPFUwQUM1Pjs8VTBBQzc+Li48VTBBQzk+OzxVMEFDQj4uLjxVMEFDRD47PFUwQUUyPi4uPFUwQUUzPjsvCisgICA8VTBCMDE+Li48VTBCMDM+OzxVMEIzQz47PFUwQjNFPi4uPFUwQjQ0Pjs8VTBCNDc+Li48VTBCNDg+Oy8KKyAgIDxVMEI0Qj4uLjxVMEI0RD47PFUwQjU2Pi4uPFUwQjU3Pjs8VTBCODI+OzxVMEJCRT4uLjxVMEJDMj47LworICAgPFUwQkM2Pi4uPFUwQkM4Pjs8VTBCQ0E+Li48VTBCQ0Q+OzxVMEJEMD47PFUwQkQ3Pjs8VTBDMDE+Li48VTBDMDM+Oy8KKyAgIDxVMEMzRT4uLjxVMEM0ND47PFUwQzQ2Pi4uPFUwQzQ4Pjs8VTBDNEE+Li48VTBDNEQ+OzxVMEM1NT4uLjxVMEM1Nj47LworICAgPFUwQzYyPi4uPFUwQzYzPjsvCisgICA8VTBDODI+Li48VTBDODM+OzxVMENCQz47PFUwQ0JFPi4uPFUwQ0M0Pjs8VTBDQzY+Li48VTBDQzg+Oy8KKyAgIDxVMENDQT4uLjxVMENDRD47PFUwQ0Q1Pi4uPFUwQ0Q2Pjs8VTBDRTI+Li48VTBDRTM+OzxVMEQwMj4uLjxVMEQwMz47LworICAgPFUwRDNFPi4uPFUwRDQ0Pjs8VTBENDY+Li48VTBENDg+OzxVMEQ0QT4uLjxVMEQ0RD47PFUwRDU3PjsvCisgICA8VTBENjI+Li48VTBENjM+Oy8KKyAgIDxVMEQ4Mj4uLjxVMEQ4Mz47PFUwRENBPjs8VTBEQ0Y+Li48VTBERDQ+OzxVMERENj47PFUwREQ4Pi4uPFUwRERGPjsvCisgICA8VTBERjI+Li48VTBERjM+OzxVMEUzMT47PFUwRTM0Pi4uPFUwRTNBPjs8VTBFNDc+Li48VTBFNEU+OzxVMEVCMT47LworICAgPFUwRUI0Pi4uPFUwRUI5Pjs8VTBFQkI+Li48VTBFQkM+OzxVMEVDOD4uLjxVMEVDRD47PFUwRjNFPi4uPFUwRjNGPjsvCisgICA8VTBGNzE+Li48VTBGODE+OzxVMEY4ND47PFUwRjkwPi4uPFUwRjk3Pjs8VTBGOTk+Li48VTBGQkM+Oy8KKyAgIDxVMTAyQj4uLjxVMTAzRj47PFUxMDU2Pi4uPFUxMDU5Pjs8VTEwNUU+Li48VTEwNjA+OzxVMTA2Mj4uLjxVMTA2ND47LworICAgPFUxMDY3Pi4uPFUxMDZEPjsvCisgICA8VTEwNzE+Li48VTEwNzQ+OzxVMTA4Mj4uLjxVMTA4RD47PFUxMDhGPjs8VTE3MTI+Li48VTE3MTQ+Oy8KKyAgIDxVMTczMj4uLjxVMTczND47PFUxNzUyPi4uPFUxNzUzPjs8VTE3NzI+Li48VTE3NzM+OzxVMTdCNj4uLjxVMTdEMz47LworICAgPFUxODBCPi4uPFUxODBEPjs8VTE5MjA+Li48VTE5MkI+OzxVMTkzMD4uLjxVMTkzOD47PFUxOUIwPi4uPFUxOUMwPjsvCisgICA8VTE5Qzg+Li48VTE5Qzk+OzxVMUExOT4uLjxVMUExQj47PFUxQjAwPi4uPFUxQjA0Pjs8VTFCMzQ+Li48VTFCNDQ+Oy8KKyAgIDxVMjBEMj4uLjxVMjBEMz47PFUyMEQ4Pi4uPFUyMERBPjs8VTIwREQ+Li48VTIwRTA+OzxVMjBFMj4uLjxVMjBFNj47LworICAgPFUyMEVBPi4uPFUyMEVCPjs8VTMwOTk+Li48VTMwOUE+OzxVQTgwMj47PFVBODA2Pjs8VUE4MEI+Oy8KKyAgIDxVQTgyMz4uLjxVQTgyNz47PFVGQjFFPjs8VUZFMDA+Li48VUZFMEY+OzxVMDAwMTBBMDE+Li48VTAwMDEwQTAzPjsvCisgICA8VTAwMDEwQTA1Pi4uPFUwMDAxMEEwNj47PFUwMDAxMEEwQz47PFUwMDAxMEEwRT47PFUwMDAxMEEzOT47PFUwMDAxMEEzRj47LworICAgPFUwMDAxRDE2Nz4uLjxVMDAwMUQxNjk+OzxVMDAwRTAxMDA+Li48VTAwMEUwMUVGPgorCit0cmFuc2xpdF9zdGFydAorCitpbmNsdWRlICJ0cmFuc2xpdF9uZXV0cmFsIjsiIgorCitkZWZhdWx0X21pc3NpbmcgPFUwMDNGPgorCit0cmFuc2xpdF9lbmQKKworRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKKworJSBDYXNlIGNvbGxhdGluZyBzeW1ib2xzCitjb2xsYXRpbmctc3ltYm9sIDxSRVMtMT4KK2NvbGxhdGluZy1zeW1ib2wgPEJMSz4KK2NvbGxhdGluZy1zeW1ib2wgPE1JTj4gICAgICUgU01BTEwKK2NvbGxhdGluZy1zeW1ib2wgPFdJREU+ICAgICUgV0lERQorY29sbGF0aW5nLXN5bWJvbCA8Q09NUEFUPgorY29sbGF0aW5nLXN5bWJvbCA8Rk9OVD4KK2NvbGxhdGluZy1zeW1ib2wgPENJUkNMRT4KK2NvbGxhdGluZy1zeW1ib2wgPFJFUy0yPgorY29sbGF0aW5nLXN5bWJvbCA8Q0FQPiAgICAgJSBDQVBJVEFMCitjb2xsYXRpbmctc3ltYm9sIDxXSURFQ0FQPgorY29sbGF0aW5nLXN5bWJvbCA8Q09NUEFUQ0FQPgorY29sbGF0aW5nLXN5bWJvbCA8Rk9OVENBUD4KK2NvbGxhdGluZy1zeW1ib2wgPENJUkNMRUNBUD4KK2NvbGxhdGluZy1zeW1ib2wgPEhJUkEtU01BTEw+Citjb2xsYXRpbmctc3ltYm9sIDxISVJBPgorY29sbGF0aW5nLXN5bWJvbCA8U01BTEw+Citjb2xsYXRpbmctc3ltYm9sIDxTTUFMTC1OQVJST1c+Citjb2xsYXRpbmctc3ltYm9sIDxLQVRBPgorY29sbGF0aW5nLXN5bWJvbCA8TkFSUk9XPgorY29sbGF0aW5nLXN5bWJvbCA8Q0lSQ0xFLUtBVEE+Citjb2xsYXRpbmctc3ltYm9sIDxNTk4+Citjb2xsYXRpbmctc3ltYm9sIDxNTlM+Citjb2xsYXRpbmctc3ltYm9sIDxWRVJUSUNBTD4KKyUgQXJhYmljIGZvcm1zCitjb2xsYXRpbmctc3ltYm9sIDxBSU5JPgorY29sbGF0aW5nLXN5bWJvbCA8QU1FRD4KK2NvbGxhdGluZy1zeW1ib2wgPEFGSU4+Citjb2xsYXRpbmctc3ltYm9sIDxBSVNPPgorJQorY29sbGF0aW5nLXN5bWJvbCA8Tk9CUkVBSz4KK2NvbGxhdGluZy1zeW1ib2wgPFNRVUFSRUQ+Citjb2xsYXRpbmctc3ltYm9sIDxTUVVBUkVEQ0FQPgorY29sbGF0aW5nLXN5bWJvbCA8RlJBQ1RJT04+Citjb2xsYXRpbmctc3ltYm9sIDxCTEFOSz4KK2NvbGxhdGluZy1zeW1ib2wgPENBUElUQUwtU01BTEw+Citjb2xsYXRpbmctc3ltYm9sIDxTTUFMTC1DQVBJVEFMPgorY29sbGF0aW5nLXN5bWJvbCA8Qk9USD4KKyUgYWNjZW50cworY29sbGF0aW5nLXN5bWJvbCA8TE9XTElORT4gICUgTE9XIExJTkUKK2NvbGxhdGluZy1zeW1ib2wgPE1BQ1JPPiAgJSBNQUNST04KK2NvbGxhdGluZy1zeW1ib2wgPE9CTElLPiAgJSBTVFJPS0UKK2NvbGxhdGluZy1zeW1ib2wgPEFJR1VUPiAgJSBBQ1VURSBBQ0NFTlQKK2NvbGxhdGluZy1zeW1ib2wgPEdSQVZFPiAgJSBHUkFWRSBBQ0NFTlQKK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFPiAgJSBCUkVWRQorY29sbGF0aW5nLXN5bWJvbCA8Q0lSQ0Y+ICAlIENJUkNVTUZMRVggQUNDRU5UCitjb2xsYXRpbmctc3ltYm9sIDxDQVJPTj4gICUgQ0FST04KK2NvbGxhdGluZy1zeW1ib2wgPENSQ0xFPiAgJSBSSU5HIEFCT1ZFCitjb2xsYXRpbmctc3ltYm9sIDxUUkVNQT4gICUgRElBRVJFU0lTCitjb2xsYXRpbmctc3ltYm9sIDwyQUlHVT4gICUgRE9VQkxFIEFDVVRFIEFDQ0VOVAorY29sbGF0aW5nLXN5bWJvbCA8VElMREU+ICAlIFRJTERFCitjb2xsYXRpbmctc3ltYm9sIDxQT0lOVD4gICUgRE9UIEFCT1ZFCitjb2xsYXRpbmctc3ltYm9sIDxDRURJTD4gICUgQ0VESUxMQQorY29sbGF0aW5nLXN5bWJvbCA8T0dPTks+ICAlIE9HT05FSworY29sbGF0aW5nLXN5bWJvbCA8T1ZFUkxJTkU+ICAlIE9WRVJMSU5FCitjb2xsYXRpbmctc3ltYm9sIDxDUk9PSz4gICUgSE9PSyBBQk9WRQorY29sbGF0aW5nLXN5bWJvbCA8VE9OT1M+ICAlIFZFUlRJQ0FMIExJTkUgQUJPVkUKK2NvbGxhdGluZy1zeW1ib2wgPEQwMzBFPiAgJSBET1VCTEUgVkVSVElDQUwgTElORSBBQk9WRQorY29sbGF0aW5nLXN5bWJvbCA8MkdSQVY+ICAlIERPVUJMRSBHUkFWRSBBQ0NFTlQKK2NvbGxhdGluZy1zeW1ib2wgPEQwMzEwPiAgJSBDQU5EUkFCSU5EVQorY29sbGF0aW5nLXN5bWJvbCA8QlJFVlI+ICAlIElOVkVSVEVEIEJSRVZFCitjb2xsYXRpbmctc3ltYm9sIDxEMDMxMj4gICUgVFVSTkVEIENPTU1BIEFCT1ZFCitjb2xsYXRpbmctc3ltYm9sIDxQU0lMST4gICUgQ09NTUEgQUJPVkUKK2NvbGxhdGluZy1zeW1ib2wgPERBU0lBPiAgJSBSRVZFUlNFRCBDT01NQSBBQk9WRQorY29sbGF0aW5nLXN5bWJvbCA8RDAzMTU+ICAlIENPTU1BIEFCT1ZFIFJJR0hUCitjb2xsYXRpbmctc3ltYm9sIDxEMDMxNj4gICUgR1JBVkUgQUNDRU5UIEJFTE9XCitjb2xsYXRpbmctc3ltYm9sIDxEMDMxNz4gICUgQUNVVEUgQUNDRU5UIEJFTE9XCitjb2xsYXRpbmctc3ltYm9sIDxEMDMxOD4gICUgTEVGVCBUQUNLIEJFTE9XCitjb2xsYXRpbmctc3ltYm9sIDxEMDMxOT4gICUgUklHSFQgVEFDSyBCRUxPVworY29sbGF0aW5nLXN5bWJvbCA8RDAzMUE+ICAlIExFRlQgQU5HTEUgQUJPVkUKK2NvbGxhdGluZy1zeW1ib2wgPEhPUk5VPiAgJSBIT1JOCitjb2xsYXRpbmctc3ltYm9sIDxEMDMxQz4gICUgTEVGVCBIQUxGIFJJTkcgQkVMT1cKK2NvbGxhdGluZy1zeW1ib2wgPEQwMzFEPiAgJSBVUCBUQUNLIEJFTE9XCitjb2xsYXRpbmctc3ltYm9sIDxEMDMxRT4gICUgRE9XTiBUQUNLIEJFTE9XCitjb2xsYXRpbmctc3ltYm9sIDxEMDMxRj4gICUgUExVUyBTSUdOIEJFTE9XCitjb2xsYXRpbmctc3ltYm9sIDxEMDMyMD4gICUgTUlOVVMgU0lHTiBCRUxPVworY29sbGF0aW5nLXN5bWJvbCA8UEFMQ1I+ICAlIFBBTEFUQUxJWkVEIEhPT0sgQkVMT1cKK2NvbGxhdGluZy1zeW1ib2wgPFJFVENSPiAgJSBSRVRST0ZMRVggSE9PSyBCRUxPVworY29sbGF0aW5nLXN5bWJvbCA8UE9JTlM+ICAlIERPVCBCRUxPVworY29sbGF0aW5nLXN5bWJvbCA8VFJFTVM+ICAlIERJQUVSRVNJUyBCRUxPVworY29sbGF0aW5nLXN5bWJvbCA8Q1JDTFM+ICAlIFJJTkcgQkVMT1cKK2NvbGxhdGluZy1zeW1ib2wgPENPTU1TPiAgJSBDT01NQSBCRUxPVworY29sbGF0aW5nLXN5bWJvbCA8RDAzMjk+ICAlIFZFUlRJQ0FMIExJTkUgQkVMT1cKK2NvbGxhdGluZy1zeW1ib2wgPEQwMzJBPiAgJSBCUklER0UgQkVMT1cKK2NvbGxhdGluZy1zeW1ib2wgPEQwMzJCPiAgJSBJTlZFUlRFRCBET1VCTEUgQVJDSCBCRUxPVworY29sbGF0aW5nLXN5bWJvbCA8RDAzMkM+ICAlIENBUk9OIEJFTE9XCitjb2xsYXRpbmctc3ltYm9sIDxDSVJDUz4gICUgQ0lSQ1VNRkxFWCBBQ0NFTlQgQkVMT1cKK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZTPiAgJSBCUkVWRSBCRUxPVworY29sbGF0aW5nLXN5bWJvbCA8RDAzMkY+ICAlIElOVkVSVEVEIEJSRVZFIEJFTE9XCitjb2xsYXRpbmctc3ltYm9sIDxUSUxEUz4gICUgVElMREUgQkVMT1cKK2NvbGxhdGluZy1zeW1ib2wgPE1BQ1JTPiAgJSBNQUNST04gQkVMT1cKK2NvbGxhdGluZy1zeW1ib2wgPEQwMzMzPiAgJSBET1VCTEUgTE9XIExJTkUKK2NvbGxhdGluZy1zeW1ib2wgPFRJTERYPiAgJSBUSUxERSBPVkVSTEFZCitjb2xsYXRpbmctc3ltYm9sIDxCQVJSRT4gICUgU0hPUlQgU1RST0tFIE9WRVJMQVkKK2NvbGxhdGluZy1zeW1ib2wgPEQwMzM2PiAgJSBMT05HIFNUUk9LRSBPVkVSTEFZCitjb2xsYXRpbmctc3ltYm9sIDxEMDMzNz4gICUgU0hPUlQgU09MSURVUyBPVkVSTEFZCitjb2xsYXRpbmctc3ltYm9sIDxDUkNMMj4gICUgUklHSFQgSEFMRiBSSU5HIEJFTE9XCitjb2xsYXRpbmctc3ltYm9sIDxEMDMzQT4gICUgSU5WRVJURUQgQlJJREdFIEJFTE9XCitjb2xsYXRpbmctc3ltYm9sIDxEMDMzQj4gICUgU1FVQVJFIEJFTE9XCitjb2xsYXRpbmctc3ltYm9sIDxEMDMzQz4gICUgU0VBR1VMTCBCRUxPVworY29sbGF0aW5nLXN5bWJvbCA8RDAzM0Q+ICAlIFggQUJPVkUKK2NvbGxhdGluZy1zeW1ib2wgPEQwMzNFPiAgJSBWRVJUSUNBTCBUSUxERQorY29sbGF0aW5nLXN5bWJvbCA8RDAzM0Y+ICAlIERPVUJMRSBPVkVSTElORQorY29sbGF0aW5nLXN5bWJvbCA8UEVSSVM+ICAlIEdSRUVLIFBFUklTUE9NRU5JCitjb2xsYXRpbmctc3ltYm9sIDxZUE9HRT4gICUgR1JFRUsgWVBPR0VHUkFNTUVOSQorY29sbGF0aW5nLXN5bWJvbCA8RDAzNjA+ICAlIERPVUJMRSBUSUxERQorY29sbGF0aW5nLXN5bWJvbCA8RDAzNjE+ICAlIERPVUJMRSBJTlZFUlRFRCBCUkVWRQorY29sbGF0aW5nLXN5bWJvbCA8REZFMjA+ICAlIExJR0FUVVJFIExFRlQgSEFMRgorY29sbGF0aW5nLXN5bWJvbCA8REZFMjE+ICAlIExJR0FUVVJFIFJJR0hUIEhBTEYKK2NvbGxhdGluZy1zeW1ib2wgPERGRTIyPiAgJSBET1VCTEUgVElMREUgTEVGVCBIQUxGCitjb2xsYXRpbmctc3ltYm9sIDxERkUyMz4gICUgRE9VQkxFIFRJTERFIFJJR0hUIEhBTEYKK2NvbGxhdGluZy1zeW1ib2wgPEQwNDgzPiAgJSBDWVJJTExJQyBUSVRMTworY29sbGF0aW5nLXN5bWJvbCA8RDA0ODQ+ICAlIENZUklMTElDIFBBTEFUQUxJWkFUSU9OCitjb2xsYXRpbmctc3ltYm9sIDxEMDQ4NT4gICUgQ1lSSUxMSUMgREFTSUEgUE5FVU1BVEEKK2NvbGxhdGluZy1zeW1ib2wgPEQwNDg2PiAgJSBDWVJJTExJQyBQU0lMSSBQTkVVTUFUQQorY29sbGF0aW5nLXN5bWJvbCA8U0hFVkE+ICAlIEhFQlJFVyBQT0lOVCBTSEVWQQorY29sbGF0aW5nLXN5bWJvbCA8SFRGU0c+ICAlIEhFQlJFVyBQT0lOVCBIQVRBRiBTRUdPTAorY29sbGF0aW5nLXN5bWJvbCA8SFRGUFQ+ICAlIEhFQlJFVyBQT0lOVCBIQVRBRiBQQVRBSAorY29sbGF0aW5nLXN5bWJvbCA8SFRGUU0+ICAlIEhFQlJFVyBQT0lOVCBIQVRBRiBRQU1BVFMKK2NvbGxhdGluZy1zeW1ib2wgPEhJUklRPiAgJSBIRUJSRVcgUE9JTlQgSElSSVEKK2NvbGxhdGluZy1zeW1ib2wgPFRTRVJFPiAgJSBIRUJSRVcgUE9JTlQgVFNFUkUKK2NvbGxhdGluZy1zeW1ib2wgPFNFR09MPiAgJSBIRUJSRVcgUE9JTlQgU0VHT0wKK2NvbGxhdGluZy1zeW1ib2wgPFBBVEFIPiAgJSBIRUJSRVcgUE9JTlQgUEFUQUgKK2NvbGxhdGluZy1zeW1ib2wgPFFBTUFUPiAgJSBIRUJSRVcgUE9JTlQgUUFNQVRTCitjb2xsYXRpbmctc3ltYm9sIDxIT0xBTT4gICUgSEVCUkVXIFBPSU5UIEhPTEFNCitjb2xsYXRpbmctc3ltYm9sIDxRVUJVVD4gICUgSEVCUkVXIFBPSU5UIFFVQlVUUworY29sbGF0aW5nLXN5bWJvbCA8REFHRVM+ICAlIEhFQlJFVyBQT0lOVCBEQUdFU0ggT1IgTUFQSVEKK2NvbGxhdGluZy1zeW1ib2wgPFJBUEhFPiAgJSBIRUJSRVcgUE9JTlQgUkFGRQorY29sbGF0aW5nLXN5bWJvbCA8U0hJTlA+ICAlIEhFQlJFVyBQT0lOVCBTSElOIERPVAorY29sbGF0aW5nLXN5bWJvbCA8U0lOUFQ+ICAlIEhFQlJFVyBQT0lOVCBTSU4gRE9UCitjb2xsYXRpbmctc3ltYm9sIDxWQVJJS0E+ICAlIEhFQlJFVyBQT0lOVCBKVURFTy1TUEFOSVNIIFZBUklLQQorY29sbGF0aW5nLXN5bWJvbCA8RkFUSEFUQU4+ICAlIEFSQUJJQyBGQVRIQVRBTgorY29sbGF0aW5nLXN5bWJvbCA8REFNTUFUQU4+ICAlIEFSQUJJQyBEQU1NQVRBTgorY29sbGF0aW5nLXN5bWJvbCA8S0FTUkFUQU4+ICAlIEFSQUJJQyBLQVNSQVRBTgorY29sbGF0aW5nLXN5bWJvbCA8RkFUSEE+ICAlIEFSQUJJQyBGQVRIQQorY29sbGF0aW5nLXN5bWJvbCA8REFNTUE+ICAlIEFSQUJJQyBEQU1NQQorY29sbGF0aW5nLXN5bWJvbCA8S0FTUkE+ICAlIEFSQUJJQyBLQVNSQQorY29sbGF0aW5nLXN5bWJvbCA8U0hBRERBPiAgJSBBUkFCSUMgU0hBRERBCitjb2xsYXRpbmctc3ltYm9sIDxTVUtVTj4gICUgQVJBQklDIFNVS1VOCitjb2xsYXRpbmctc3ltYm9sIDxTVVBFUkFMRUY+ICAlIEFSQUJJQyBMRVRURVIgU1VQRVJTQ1JJUFQgQUxFRgorY29sbGF0aW5nLXN5bWJvbCA8RDA2RDY+ICUgQVJBQklDIFNNQUxMIEhJR0ggTElHQVRVUkUgU0FEIFdJVEggTEFNIFdJVEggQUxFRiBNQUtTVVJBCitjb2xsYXRpbmctc3ltYm9sIDxEMDZENz4gJSBBUkFCSUMgU01BTEwgSElHSCBMSUdBVFVSRSBRQUYgV0lUSCBMQU0gV0lUSCBBTEVGIE1BS1NVUkEKK2NvbGxhdGluZy1zeW1ib2wgPEQwNkQ4PiAgJSBBUkFCSUMgU01BTEwgSElHSCBNRUVNIElOSVRJQUwgRk9STQorY29sbGF0aW5nLXN5bWJvbCA8RDA2RDk+ICAlIEFSQUJJQyBTTUFMTCBISUdIIExBTSBBTEVGCitjb2xsYXRpbmctc3ltYm9sIDxEMDZEQT4gICUgQVJBQklDIFNNQUxMIEhJR0ggSkVFTQorY29sbGF0aW5nLXN5bWJvbCA8RDA2REI+ICAlIEFSQUJJQyBTTUFMTCBISUdIIFRIUkVFIERPVFMKK2NvbGxhdGluZy1zeW1ib2wgPEQwNkRDPiAgJSBBUkFCSUMgU01BTEwgSElHSCBTRUVOCitjb2xsYXRpbmctc3ltYm9sIDxEMDZFMT4gICUgQVJBQklDIFNNQUxMIEhJR0ggRE9UTEVTUyBIRUFEIE9GIEtIQUgKK2NvbGxhdGluZy1zeW1ib2wgPEQwNkUyPiAgJSBBUkFCSUMgU01BTEwgSElHSCBNRUVNIElTT0xBVEVEIEZPUk0KK2NvbGxhdGluZy1zeW1ib2wgPEQwNkUzPiAgJSBBUkFCSUMgU01BTEwgTE9XIFNFRU4KK2NvbGxhdGluZy1zeW1ib2wgPEFNQUREPiAgJSBBUkFCSUMgU01BTEwgSElHSCBNQUREQQorY29sbGF0aW5nLXN5bWJvbCA8RDA2RTc+ICAlIEFSQUJJQyBTTUFMTCBISUdIIFlFSAorY29sbGF0aW5nLXN5bWJvbCA8RDA2RTg+ICAlIEFSQUJJQyBTTUFMTCBISUdIIE5PT04KK2NvbGxhdGluZy1zeW1ib2wgPEQwNkVEPiAgJSBBUkFCSUMgU01BTEwgTE9XIE1FRU0KK2NvbGxhdGluZy1zeW1ib2wgPEQwOTNDPiAgJSBERVZBTkFHQVJJIFNJR04gTlVLVEEKK2NvbGxhdGluZy1zeW1ib2wgPEQwOTUxPiAgJSBERVZBTkFHQVJJIFNUUkVTUyBTSUdOIFVEQVRUQQorY29sbGF0aW5nLXN5bWJvbCA8RDA5NTI+ICAlIERFVkFOQUdBUkkgU1RSRVNTIFNJR04gQU5VREFUVEEKK2NvbGxhdGluZy1zeW1ib2wgPEQwOTUzPiAgJSBERVZBTkFHQVJJIEdSQVZFIEFDQ0VOVAorY29sbGF0aW5nLXN5bWJvbCA8RDA5NTQ+ICAlIERFVkFOQUdBUkkgQUNVVEUgQUNDRU5UCitjb2xsYXRpbmctc3ltYm9sIDxEMDlCQz4gICUgQkVOR0FMSSBTSUdOIE5VS1RBCitjb2xsYXRpbmctc3ltYm9sIDxEMEEzQz4gICUgR1VSTVVLSEkgU0lHTiBOVUtUQQorY29sbGF0aW5nLXN5bWJvbCA8RDBBQkM+ICAlIEdVSkFSQVRJIFNJR04gTlVLVEEKK2NvbGxhdGluZy1zeW1ib2wgPEQwQjNDPiAgJSBPUklZQSBTSUdOIE5VS1RBCitjb2xsYXRpbmctc3ltYm9sIDxEMEU0OD4gICUgVEhBSSBDSEFSQUNURVIgTUFJIEVLCitjb2xsYXRpbmctc3ltYm9sIDxEMEU0OT4gICUgVEhBSSBDSEFSQUNURVIgTUFJIFRITworY29sbGF0aW5nLXN5bWJvbCA8RDBFNEE+ICAlIFRIQUkgQ0hBUkFDVEVSIE1BSSBUUkkKK2NvbGxhdGluZy1zeW1ib2wgPEQwRTRCPiAgJSBUSEFJIENIQVJBQ1RFUiBNQUkgQ0hBVFRBV0EKK2NvbGxhdGluZy1zeW1ib2wgPEQwRUM4PiAgJSBMQU8gVE9ORSBNQUkgRUsKK2NvbGxhdGluZy1zeW1ib2wgPEQwRUM5PiAgJSBMQU8gVE9ORSBNQUkgVEhPCitjb2xsYXRpbmctc3ltYm9sIDxEMEVDQT4gICUgTEFPIFRPTkUgTUFJIFRJCitjb2xsYXRpbmctc3ltYm9sIDxEMEVDQj4gICUgTEFPIFRPTkUgTUFJIENBVEFXQQorY29sbGF0aW5nLXN5bWJvbCA8RDBGMzk+ICAlIFRJQkVUQU4gTUFSSyBUU0EgLVBIUlUKK2NvbGxhdGluZy1zeW1ib2wgPEQwRjNFPiAgJSBUSUJFVEFOIFNJR04gWUFSIFRTSEVTCitjb2xsYXRpbmctc3ltYm9sIDxEMEYzRj4gICUgVElCRVRBTiBTSUdOIE1BUiBUU0hFUworY29sbGF0aW5nLXN5bWJvbCA8RDMwMkE+ICAlIElERU9HUkFQSElDIExFVkVMIFRPTkUgTUFSSworY29sbGF0aW5nLXN5bWJvbCA8RDMwMkI+ICAlIElERU9HUkFQSElDIFJJU0lORyBUT05FIE1BUksKK2NvbGxhdGluZy1zeW1ib2wgPEQzMDJDPiAgJSBJREVPR1JBUEhJQyBERVBBUlRJTkcgVE9ORSBNQVJLCitjb2xsYXRpbmctc3ltYm9sIDxEMzAyRD4gICUgSURFT0dSQVBISUMgRU5URVJJTkcgVE9ORSBNQVJLCitjb2xsYXRpbmctc3ltYm9sIDxEMzAyRT4gICUgSEFOR1VMIFNJTkdMRSBET1QgVE9ORSBNQVJLCitjb2xsYXRpbmctc3ltYm9sIDxEMzAyRj4gICUgSEFOR1VMIERPVUJMRSBET1QgVE9ORSBNQVJLCitjb2xsYXRpbmctc3ltYm9sIDxLTlZDRT4gICUgS0FUQUtBTkEtSElSQUdBTkEgVk9JQ0VEIFNPVU5EIE1BUksKK2NvbGxhdGluZy1zeW1ib2wgPEtOU01WPiAgJSBLQVRBS0FOQS1ISVJBR0FOQSBTRU1JLVZPSUNFRCBTT1VORCBNQVJLCitjb2xsYXRpbmctc3ltYm9sIDxEMjBEMD4gICUgTEVGVCBIQVJQT09OIEFCT1ZFCitjb2xsYXRpbmctc3ltYm9sIDxEMjBEMT4gICUgUklHSFQgSEFSUE9PTiBBQk9WRQorY29sbGF0aW5nLXN5bWJvbCA8RDIwRDI+ICAlIExPTkcgVkVSVElDQUwgTElORSBPVkVSTEFZCitjb2xsYXRpbmctc3ltYm9sIDxEMjBEMz4gICUgU0hPUlQgVkVSVElDQUwgTElORSBPVkVSTEFZCitjb2xsYXRpbmctc3ltYm9sIDxEMjBEND4gICUgQU5USUNMT0NLV0lTRSBBUlJPVyBBQk9WRQorY29sbGF0aW5nLXN5bWJvbCA8RDIwRDU+ICAlIENMT0NLV0lTRSBBUlJPVyBBQk9WRQorY29sbGF0aW5nLXN5bWJvbCA8RDIwRDY+ICAlIExFRlQgQVJST1cgQUJPVkUKK2NvbGxhdGluZy1zeW1ib2wgPEQyMEQ3PiAgJSBSSUdIVCBBUlJPVyBBQk9WRQorY29sbGF0aW5nLXN5bWJvbCA8RDIwRDg+ICAlIFJJTkcgT1ZFUkxBWQorY29sbGF0aW5nLXN5bWJvbCA8RDIwRDk+ICAlIENMT0NLV0lTRSBSSU5HIE9WRVJMQVkKK2NvbGxhdGluZy1zeW1ib2wgPEQyMERBPiAgJSBBTlRJQ0xPQ0tXSVNFIFJJTkcgT1ZFUkxBWQorY29sbGF0aW5nLXN5bWJvbCA8RDIwREI+ICAlIFRIUkVFIERPVFMgQUJPVkUKK2NvbGxhdGluZy1zeW1ib2wgPEQyMERDPiAgJSBGT1VSIERPVFMgQUJPVkUKK2NvbGxhdGluZy1zeW1ib2wgPEQyMEREPiAgJSBFTkNMT1NJTkcgQ0lSQ0xFCitjb2xsYXRpbmctc3ltYm9sIDxEMjBERT4gICUgRU5DTE9TSU5HIFNRVUFSRQorY29sbGF0aW5nLXN5bWJvbCA8RDIwREY+ICAlIEVOQ0xPU0lORyBESUFNT05ECitjb2xsYXRpbmctc3ltYm9sIDxEMjBFMD4gICUgRU5DTE9TSU5HIENJUkNMRSBCQUNLU0xBU0gKK2NvbGxhdGluZy1zeW1ib2wgPEQyMEUxPiAgJSBMRUZUIFJJR0hUIEFSUk9XIEFCT1ZFCitjb2xsYXRpbmctc3ltYm9sIDxORUdBVElWRT4KK2NvbGxhdGluZy1zeW1ib2wgPFNBTlNTRVJJRj4KK2NvbGxhdGluZy1zeW1ib2wgPE5FR1NBTlNTRVJJRj4KK2NvbGxhdGluZy1zeW1ib2wgPEFSQUJJQz4KK2NvbGxhdGluZy1zeW1ib2wgPEVYVEFSQUJJQz4KK2NvbGxhdGluZy1zeW1ib2wgPE5BR0FSPgorY29sbGF0aW5nLXN5bWJvbCA8QkVOR0w+Citjb2xsYXRpbmctc3ltYm9sIDxCRU5HQUxJTlVNRVJBVE9SPgorY29sbGF0aW5nLXN5bWJvbCA8R1VSTVU+Citjb2xsYXRpbmctc3ltYm9sIDxHVUpBUj4KK2NvbGxhdGluZy1zeW1ib2wgPE9SSVlBPgorY29sbGF0aW5nLXN5bWJvbCA8VEFNSUw+Citjb2xsYXRpbmctc3ltYm9sIDxURUxHVT4KK2NvbGxhdGluZy1zeW1ib2wgPEtOTkRBPgorY29sbGF0aW5nLXN5bWJvbCA8TUFMQVk+Citjb2xsYXRpbmctc3ltYm9sIDxTSU5IQUxBPgorY29sbGF0aW5nLXN5bWJvbCA8VEhBSUk+Citjb2xsYXRpbmctc3ltYm9sIDxMQUFPTz4KK2NvbGxhdGluZy1zeW1ib2wgPEJPREtBPgorY29sbGF0aW5nLXN5bWJvbCA8Q0pLVlM+Citjb2xsYXRpbmctc3ltYm9sIDxTMDIwMD4uLjxTMTEwMD4gJSAweDAyMDAuLjB4MTEwMAorCitjb2xsYXRpbmctc3ltYm9sIDxTNEUwMD4uLjxTOUZBNT4gJSBTeW1ib2xzIGZvciBIYW4KKworY29sbGF0aW5nLXN5bWJvbCA8U0FDMDA+Li48U0Q3QTM+ICUgU3ltYm9scyBmb3IgSGFuZ3VsCisKK2NvbGxhdGluZy1zeW1ib2wgPFNGQTBFPi4uPFNGQTI5PiAlIFN5bWJvbHMgZm9yIENvbXBhdGliaWxpdHkgSGFuCisKKyUgZXF1aXZhbGVuY2VzCitzeW1ib2wtZXF1aXZhbGVuY2UgPE5PTkU+ICAgICAgICAgICAgICA8QkxBTks+CitzeW1ib2wtZXF1aXZhbGVuY2UgPENBUElUQUw+ICAgICAgICAgICA8Q0FQPgorc3ltYm9sLWVxdWl2YWxlbmNlIDxNQUNST04+ICAgICAgICAgICAgPE1BQ1JPPgorc3ltYm9sLWVxdWl2YWxlbmNlIDxTVFJPS0U+ICAgICAgICAgICAgPE9CTElLPgorc3ltYm9sLWVxdWl2YWxlbmNlIDxBQ1VURT4gICAgICAgICAgICAgPEFJR1VUPgorc3ltYm9sLWVxdWl2YWxlbmNlIDxDSVJDVU1GTEVYPiAgICAgICAgPENJUkNGPgorc3ltYm9sLWVxdWl2YWxlbmNlIDxSSU5HPiAgICAgICAgICAgICAgPENSQ0xFPgorc3ltYm9sLWVxdWl2YWxlbmNlIDxESUFFUkVTSVM+ICAgICAgICAgPFRSRU1BPgorc3ltYm9sLWVxdWl2YWxlbmNlIDxET1Q+ICAgICAgICAgICAgICAgPFBPSU5UPgorc3ltYm9sLWVxdWl2YWxlbmNlIDxDRURJTExBPiAgICAgICAgICAgPENFRElMPgorc3ltYm9sLWVxdWl2YWxlbmNlIDxPR09ORUs+ICAgICAgICAgICAgPE9HT05LPgorc3ltYm9sLWVxdWl2YWxlbmNlIDxIT09LPiAgICAgICAgICAgICAgPENST09LPgorc3ltYm9sLWVxdWl2YWxlbmNlIDxIT1JOPiAgICAgICAgICAgICAgPEhPUk5VPgorc3ltYm9sLWVxdWl2YWxlbmNlIDxET1QtQkVMT1c+ICAgICAgICAgPFBPSU5TPgorCislIENvcHkgdGhlIHRlbXBsYXRlIGZyb20gSVNPL0lFQyAxNDY1MQorY29weSAiaXNvMTQ2NTFfdDEiCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCislIFRoaXMgaXMgdGhlIDE0NjUyIGkxOG4gZmRjYy1zZXQgZGVmaW5pdGlvbiBmb3IKKyUgdGhlIExDX01PTkVUQVJZIGNhdGVnb3J5LgorJQoraW50X2N1cnJfc3ltYm9sICAgICAiPFUwMDU4PjxVMDA0ND48VTAwNTI+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgIjxVMDBBND4iCittb25fZGVjaW1hbF9wb2ludCAgICI8VTAwMkM+IgorbW9uX3Rob3VzYW5kc19zZXAgICAiIgorbW9uX2dyb3VwaW5nICAgICAgICAtMQorcG9zaXRpdmVfc2lnbiAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgLTEKK2ZyYWNfZGlnaXRzICAgICAgICAgLTEKK3BfY3NfcHJlY2VkZXMgICAgICAgLTEKK3Bfc2VwX2J5X3NwYWNlICAgICAgLTEKK25fY3NfcHJlY2VkZXMgICAgICAgLTEKK25fc2VwX2J5X3NwYWNlICAgICAgLTEKK3Bfc2lnbl9wb3NuICAgICAgICAgLTEKK25fc2lnbl9wb3NuICAgICAgICAgLTEKKyUKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCislIFRoaXMgaXMgdGhlIDE0NjUyIGkxOG4gZmRjYy1zZXQgZGVmaW5pdGlvbiBmb3IKKyUgdGhlIExDX05VTUVSSUMgY2F0ZWdvcnkuCislCitkZWNpbWFsX3BvaW50ICAgIjxVMDAyQz4iCit0aG91c2FuZHNfc2VwICAgIiIKK2dyb3VwaW5nICAgICAgICAtMQorJQorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorJSBUaGlzIGlzIHRoZSBJU08vSUVDIDE0NjUyICJpMThuIiBkZWZpbml0aW9uIGZvcgorJSB0aGUgTENfVElNRSBjYXRlZ29yeS4KKyUKKyUgV2Vla2RheSBhbmQgd2VlayBudW1iZXJpbmcgYWNjb3JkaW5nIHRvIElTTyA4NjAxCithYmRheSAgICI8VTAwMzE+IjsiPFUwMDMyPiI7IjxVMDAzMz4iOyI8VTAwMzQ+IjsiPFUwMDM1PiI7IjxVMDAzNj4iOyI8VTAwMzc+IgorZGF5ICAgICAiPFUwMDMxPiI7IjxVMDAzMj4iOyI8VTAwMzM+IjsiPFUwMDM0PiI7IjxVMDAzNT4iOyI8VTAwMzY+IjsiPFUwMDM3PiIKK3dlZWsgICAgNzsxOTk3MTIwMTs0CitmaXJzdF93ZWVrZGF5CTEKK2ZpcnN0X3dvcmtkYXkJMQorYWJtb24gICAiPFUwMDMwPjxVMDAzMT4iOyI8VTAwMzA+PFUwMDMyPiI7IjxVMDAzMD48VTAwMzM+IjsiPFUwMDMwPjxVMDAzND4iOy8KKyAgICAgICAgIjxVMDAzMD48VTAwMzU+IjsiPFUwMDMwPjxVMDAzNj4iOyI8VTAwMzA+PFUwMDM3PiI7IjxVMDAzMD48VTAwMzg+IjsvCisgICAgICAgICI8VTAwMzA+PFUwMDM5PiI7IjxVMDAzMT48VTAwMzA+IjsiPFUwMDMxPjxVMDAzMT4iOyI8VTAwMzE+PFUwMDMyPiIKK21vbiAgICAgIjxVMDAzMD48VTAwMzE+IjsiPFUwMDMwPjxVMDAzMj4iOyI8VTAwMzA+PFUwMDMzPiI7IjxVMDAzMD48VTAwMzQ+IjsvCisgICAgICAgICI8VTAwMzA+PFUwMDM1PiI7IjxVMDAzMD48VTAwMzY+IjsiPFUwMDMwPjxVMDAzNz4iOyI8VTAwMzA+PFUwMDM4PiI7LworICAgICAgICAiPFUwMDMwPjxVMDAzOT4iOyI8VTAwMzE+PFUwMDMwPiI7IjxVMDAzMT48VTAwMzE+IjsiPFUwMDMxPjxVMDAzMj4iCithbV9wbSAgICIiOyIiCislIERhdGUgZm9ybWF0cyBmb2xsb3dpbmcgSVNPIDg2MDEKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbiAoJWMpCislICAgICAgICIlRiAlVCIKK2RfdF9mbXQgIjxVMDAyNT48VTAwNDY+PFUwMDIwPjxVMDAyNT48VTAwNTQ+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uICgleCkgICAiJUYiCitkX2ZtdCAgICI8VTAwMjU+PFUwMDQ2PiIKKyUKKyUgQXBwcm9wcmlhdGUgdGltZSByZXByZXNlbnRhdGlvbiAoJVgpICAgIiVUIgordF9mbXQgICAiPFUwMDI1PjxVMDA1ND4iCit0X2ZtdF9hbXBtICIiCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKGRhdGUoMSkpICAgIiVhICViICVlICVIOiVNOiVTICVaICVZIgorZGF0ZV9mbXQgICAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworTENfTUVTU0FHRVMKKyUgVGhpcyBpcyB0aGUgSVNPL0lFQyAxNDY1MiAiaTE4biIgZGVmaW5pdGlvbiBmb3IKKyUgdGhlIExDX01FU1NBR0VTIGNhdGVnb3J5LgorJQoreWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwMkI+PFUwMDMxPjxVMDA1RD4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDAyRD48VTAwMzA+PFUwMDVEPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19QQVBFUgorJSBUaGlzIGlzIHRoZSBJU08vSUVDIDE0NjUyICJpMThuIiBkZWZpbml0aW9uIGZvcgorJSB0aGUgTENfUEFQRVIgY2F0ZWdvcnkuCislCitoZWlnaHQgICAyOTcKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX05BTUUKKyUgVGhpcyBpcyB0aGUgSVNPL0lFQyAxNDY1MiAiaTE4biIgZGVmaW5pdGlvbiBmb3IKKyUgdGhlIExDX05BTUUgY2F0ZWdvcnkuCislCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA3MD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCisKK0xDX0FERFJFU1MKKyUgVGhpcyBpcyB0aGUgSVNPL0lFQyAxNDY1MiAiaTE4biIgZGVmaW5pdGlvbiBmb3IKKyUgdGhlIExDX0FERFJFU1MgY2F0ZWdvcnkuCislCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNDM+PFUwMDJEPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorRU5EIExDX0FERFJFU1MKKworTENfVEVMRVBIT05FCislIFRoaXMgaXMgdGhlIElTTy9JRUMgMTQ2NTIgImkxOG4iIGRlZmluaXRpb24gZm9yCislIHRoZSBMQ19URUxFUEhPTkUgY2F0ZWdvcnkuCislCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyQj48VTAwNjE+PFUwMDIwPjxVMDAyQj4vCis8VTAwNkM+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorJSBUaGlzIGlzIHRoZSBJU08vSUVDIDE0NjUyICJpMThuIiBkZWZpbml0aW9uIGZvcgorJSB0aGUgTENfTUVBU1VSRU1FTlQgY2F0ZWdvcnkuCislCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2lkX0lEIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvaWRfSUQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNlYjg5MQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2lkX0lECkBAIC0wLDAgKzEsMTYyIEBACitlc2NhcGVfY2hhciAgLworY29tbWVudF9jaGFyICAlCisKKyUgSW5kb25lc2lhbiBsYW5ndWFnZSBsb2NhbGUgZm9yIEluZG9uZXNpYQorJSBTb3VyY2U6CislIEFkZHJlc3M6CislIENvbnRhY3Q6IFBhYmxvIFNhcmF0eGFnYSwgTW9oYW1tYWQgREFNVAorJSBFbWFpbDogc3J0eGdAY2hhbmFlLmFscGhhbmV0LmNoLCBtZGFtdEBjYWtyYXdlYi5jb20KKyUgVGVsOgorJSBGYXg6CislIExhbmd1YWdlOiBpZAorJSBUZXJyaXRvcnk6IElECislIFJldmlzaW9uOiAwLjUKKyUgRGF0ZTogMTk5OS0wOS0wOAorJSBBcHBsaWNhdGlvbjogZ2VuZXJhbAorJSBVc2VyczogZ2VuZXJhbAorJSBSZXBlcnRvaXJlbWFwOgorJSBDaGFyc2V0OiBJU08tODg1OS0xCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJJbmRvbmVzaWFuIGxvY2FsZSBmb3IgSW5kb25lc2lhIgorc291cmNlICAgICAiIgorYWRkcmVzcyAgICAiIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkluZG9uZXNpYW4iCit0ZXJyaXRvcnkgICJJbmRvbmVzaWEiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA2LTI5IgorJQorY2F0ZWdvcnkgICJpZF9JRDoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJpZF9JRDoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJpZF9JRDoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImlkX0lEOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiaWRfSUQ6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJpZF9JRDoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJpZF9JRDoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJpZF9JRDoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJpZF9JRDoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImlkX0lEOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiaWRfSUQ6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiaTE4biIKKwordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgICAgICI8VTAwNDk+PFUwMDQ0PjxVMDA1Mj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICAgIjxVMDA1Mj48VTAwNzA+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICAgIjxVMDAyQz4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgICAiPFUwMDJFPiIKK21vbl9ncm91cGluZyAgICAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgICAgMAorbl9jc19wcmVjZWRlcyAgICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgICAgMAorcF9zaWduX3Bvc24gICAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgICAgMQorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgICI8VTAwMkM+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAgIjxVMDAyRT4iCitncm91cGluZyAgICAgICAgICAgICAgICAzOzMKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgICAgICI8VTAwNEQ+PFUwMDY5PjxVMDA2RT4iOyI8VTAwNTM+PFUwMDY1PjxVMDA2RT4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA2Qz4iOyI8VTAwNTI+PFUwMDYxPjxVMDA2Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNEI+PFUwMDYxPjxVMDA2RD4iOyI8VTAwNEE+PFUwMDc1PjxVMDA2RD4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA2Mj4iCitkYXkgICAgICAgICAiPFUwMDREPjxVMDA2OT48VTAwNkU+PFUwMDY3PjxVMDA2Nz48VTAwNzU+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNkU+PFUwMDY5PjxVMDA2RT4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA2Qz48VTAwNjE+PFUwMDczPjxVMDA2MT4iOy8KKyAgICAgICAgICAgICI8VTAwNTI+PFUwMDYxPjxVMDA2Mj48VTAwNzU+IjsvCisgICAgICAgICAgICAiPFUwMDRCPjxVMDA2MT48VTAwNkQ+PFUwMDY5PjxVMDA3Mz4iOy8KKyAgICAgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2RD48VTAwNjE+PFUwMDc0PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDYyPjxVMDA3ND48VTAwNzU+IgorYWJtb24gICAgICAgIjxVMDA0QT48VTAwNjE+PFUwMDZFPiI7IjxVMDA1MD48VTAwNjU+PFUwMDYyPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA0MT48VTAwNzA+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjU+PFUwMDY5PiI7IjxVMDA0QT48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZDPiI7IjxVMDA0MT48VTAwNjc+PFUwMDc1PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA0Rj48VTAwNkI+PFUwMDc0PiI7LworICAgICAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDc2PiI7IjxVMDA0ND48VTAwNjU+PFUwMDczPiIKK21vbiAgICAgICAgICI8VTAwNEE+PFUwMDYxPjxVMDA2RT48VTAwNzU+PFUwMDYxPjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDUwPjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA3NT48VTAwNjE+PFUwMDcyPjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Mj48VTAwNjU+PFUwMDc0PiI7LworICAgICAgICAgICAgIjxVMDA0MT48VTAwNzA+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2NT48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkU+PFUwMDY5PiI7LworICAgICAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZDPjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNDE+PFUwMDY3PjxVMDA3NT48VTAwNzM+PFUwMDc0PjxVMDA3NT48VTAwNzM+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNzA+PFUwMDc0PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDRGPjxVMDA2Qj48VTAwNzQ+PFUwMDZGPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDc2PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDQ0PjxVMDA2NT48VTAwNzM+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA3OT4iCit0X2ZtdCAgICAgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICAgICAiIjsiIgordF9mbXRfYW1wbSAgIiIKK2RhdGVfZm10ICAgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCit5ZXNleHByICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNzk+PFUwMDU5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA3ND48VTAwNTQ+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfUEFQRVIKKyUgRklYTUUKK2hlaWdodCAgIDI5NworJSBGSVhNRQord2lkdGggICAgMjEwCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzNj48VTAwMzI+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorJSBGSVhNRQorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAiPFUwMDQ5PjxVMDA0ND4iCitjb3VudHJ5X2FiMyAiPFUwMDQ5PjxVMDA0ND48VTAwNEU+IgorY291bnRyeV9udW0gMzYwCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvaWdfTkcgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9pZ19ORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODA4ODI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvaWdfTkcKQEAgLTAsMCArMSw1MDQgQEAKK2VzY2FwZV9jaGFyIC8KK2NvbW1lbnRfY2hhciAlCislCislIElnYm8gbGFuZ3VhZ2UgbG9jYWxlIGZvciBOaWdlcmlhCislIFNvdXJjZTogCislIENvbnRhY3Q6IFBhYmxvIFNhcmF0eGFnYQorJSBFbWFpbDogcGFibG9AbWFuZHJpdmEuY29tCislIExhbmd1YWdlOiBpZworJSBUZXJyaXRvcnk6IE5HCislIFJldmlzaW9uOiAwLjIKKyUgRGF0ZTogMjAwNS0xMi0xNAorJSBVc2VyczogZ2VuZXJhbAorJSBDaGFyc2V0OiBVVEYtOAorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiSWdibyBsb2NhbGUgZm9yIE5pZ2VyaWEiCitzb3VyY2UgICAgICIiCithZGRyZXNzICAgICIiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJwYWJsb0BtYW5kcml2YS5jb20iCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJJZ2JvIgordGVycml0b3J5ICAiTmlnZXJpYSIKK3JldmlzaW9uICAgIjAuMiIKK2RhdGUgICAgICAgIjIwMDUtMTItMTQiCislCitjYXRlZ29yeSAgImlnX05HOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImlnX05HOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImlnX05HOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiaWdfTkc6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJpZ19ORzoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImlnX05HOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImlnX05HOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImlnX05HOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImlnX05HOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiaWdfTkc6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJpZ19ORzoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKKworJSBJZ2JvIHVzZXMgdGhlIGZvbGxvd2luZyBleHRyYSBsZXR0ZXJzOgorJSBpZG90YmVsb3csIG9kb3RiZWxvdywgdWRvdGJlbG93LCBuYWJvdmVkb3QKKyUgcGx1cyBhY3V0ZSBhbmQgZ3JhdmUgY29tYmluaW5nIG1hcmtzIG92ZXIgdm93ZWxzIGFuZCBuCislIG9mIHRob3NlLCB0aGUgZm9sbG93aW5nIGhhdmUgcHJlY29tYmluZWQgZm9ybXM6CislIGFhY3V0ZSwgZWFjdXRlLCBpYWN1dGUsIG9hY3V0ZSwgdWFjdXRlLCBuYWN1dGUKKyUgYWdyYXZlLCBlZ3JhdmUsIGlncmF2ZSwgb2dyYXZlLCB1Z3JhdmUsIG5ncmF2ZQorJQorJSBvcmRlcjogYSwgYiwgW2NdLCBjaCwgZCwgZSwgZiwgZywgZ2IsIGdoLCBndywgaCwgaSwgaS4sIGosIGssIGtwLCBrdywgCislIGwsIG0sIG4sIG4uLCBudywgbnksIG8sIG8uLCBwLCBbcV0sIHIsIHMsIHNoLCB0LCB1LCB1LiwgdiwgdywgW3hdLCB5LCB6CisKK2NvcHkgImlzbzE0NjUxX3QxIgorCitjb2xsYXRpbmctc3ltYm9sICA8Yy1oLWlnPgorY29sbGF0aW5nLWVsZW1lbnQgPEMtSD4gZnJvbSAiPFUwMDQzPjxVMDA0OD4iCitjb2xsYXRpbmctZWxlbWVudCA8Yy1oPiBmcm9tICI8VTAwNjM+PFUwMDY4PiIKK2NvbGxhdGluZy1lbGVtZW50IDxDLWg+IGZyb20gIjxVMDA0Mz48VTAwNjg+IgorY29sbGF0aW5nLWVsZW1lbnQgPGMtSD4gZnJvbSAiPFUwMDYzPjxVMDA0OD4iCitjb2xsYXRpbmctc3ltYm9sICA8Zy1iLWlnPgorY29sbGF0aW5nLWVsZW1lbnQgPEctQj4gZnJvbSAiPFUwMDQ3PjxVMDA0Mj4iCitjb2xsYXRpbmctZWxlbWVudCA8Zy1iPiBmcm9tICI8VTAwNjc+PFUwMDYyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxHLWI+IGZyb20gIjxVMDA0Nz48VTAwNjI+IgorY29sbGF0aW5nLWVsZW1lbnQgPGctQj4gZnJvbSAiPFUwMDY3PjxVMDA0Mj4iCitjb2xsYXRpbmctc3ltYm9sICA8Zy1oLWlnPgorY29sbGF0aW5nLWVsZW1lbnQgPEctSD4gZnJvbSAiPFUwMDQ3PjxVMDA0OD4iCitjb2xsYXRpbmctZWxlbWVudCA8Zy1oPiBmcm9tICI8VTAwNjc+PFUwMDY4PiIKK2NvbGxhdGluZy1lbGVtZW50IDxHLWg+IGZyb20gIjxVMDA0Nz48VTAwNjg+IgorY29sbGF0aW5nLWVsZW1lbnQgPGctSD4gZnJvbSAiPFUwMDY3PjxVMDA0OD4iCitjb2xsYXRpbmctc3ltYm9sICA8Zy13LWlnPgorY29sbGF0aW5nLWVsZW1lbnQgPEctVz4gZnJvbSAiPFUwMDQ3PjxVMDA1Nz4iCitjb2xsYXRpbmctZWxlbWVudCA8Zy13PiBmcm9tICI8VTAwNjc+PFUwMDc3PiIKK2NvbGxhdGluZy1lbGVtZW50IDxHLXc+IGZyb20gIjxVMDA0Nz48VTAwNzc+IgorY29sbGF0aW5nLWVsZW1lbnQgPGctVz4gZnJvbSAiPFUwMDY3PjxVMDA1Nz4iCitjb2xsYXRpbmctc3ltYm9sICA8ay1wLWlnPgorY29sbGF0aW5nLWVsZW1lbnQgPEstUD4gZnJvbSAiPFUwMDRCPjxVMDA1MD4iCitjb2xsYXRpbmctZWxlbWVudCA8ay1wPiBmcm9tICI8VTAwNkI+PFUwMDcwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxLLXA+IGZyb20gIjxVMDA0Qj48VTAwNzA+IgorY29sbGF0aW5nLWVsZW1lbnQgPGstUD4gZnJvbSAiPFUwMDZCPjxVMDA1MD4iCitjb2xsYXRpbmctc3ltYm9sICA8ay13LWlnPgorY29sbGF0aW5nLWVsZW1lbnQgPEstVz4gZnJvbSAiPFUwMDRCPjxVMDA1Nz4iCitjb2xsYXRpbmctZWxlbWVudCA8ay13PiBmcm9tICI8VTAwNkI+PFUwMDc3PiIKK2NvbGxhdGluZy1lbGVtZW50IDxLLXc+IGZyb20gIjxVMDA0Qj48VTAwNzc+IgorY29sbGF0aW5nLWVsZW1lbnQgPGstVz4gZnJvbSAiPFUwMDZCPjxVMDA1Nz4iCitjb2xsYXRpbmctc3ltYm9sICA8bi13LWlnPgorY29sbGF0aW5nLWVsZW1lbnQgPE4tVz4gZnJvbSAiPFUwMDRFPjxVMDA1Nz4iCitjb2xsYXRpbmctZWxlbWVudCA8bi13PiBmcm9tICI8VTAwNkU+PFUwMDc3PiIKK2NvbGxhdGluZy1lbGVtZW50IDxOLXc+IGZyb20gIjxVMDA0RT48VTAwNzc+IgorY29sbGF0aW5nLWVsZW1lbnQgPG4tVz4gZnJvbSAiPFUwMDZFPjxVMDA1Nz4iCitjb2xsYXRpbmctc3ltYm9sICA8bi15LWlnPgorY29sbGF0aW5nLWVsZW1lbnQgPE4tWT4gZnJvbSAiPFUwMDRFPjxVMDA1OT4iCitjb2xsYXRpbmctZWxlbWVudCA8bi15PiBmcm9tICI8VTAwNkU+PFUwMDc5PiIKK2NvbGxhdGluZy1lbGVtZW50IDxOLXk+IGZyb20gIjxVMDA0RT48VTAwNzk+IgorY29sbGF0aW5nLWVsZW1lbnQgPG4tWT4gZnJvbSAiPFUwMDZFPjxVMDA1OT4iCitjb2xsYXRpbmctc3ltYm9sICA8aWJlbG93ZG90PgorY29sbGF0aW5nLWVsZW1lbnQgPElfPiAgZnJvbSAiPFUwMDQ5PjxVMDMyMz4iCitjb2xsYXRpbmctZWxlbWVudCA8aV8+ICBmcm9tICI8VTAwNjk+PFUwMzIzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxJXyc+IGZyb20gIjxVMDA0OT48VTAzMjM+PFUwMzAxPiIKK2NvbGxhdGluZy1lbGVtZW50IDxpXyc+IGZyb20gIjxVMDA2OT48VTAzMjM+PFUwMzAxPiIKK2NvbGxhdGluZy1lbGVtZW50IDxJX2A+IGZyb20gIjxVMDA0OT48VTAzMjM+PFUwMzAwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxpX2A+IGZyb20gIjxVMDA2OT48VTAzMjM+PFUwMzAwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxJXzInPiBmcm9tICI8VTFFQ0E+PFUwMzAxPiIKK2NvbGxhdGluZy1lbGVtZW50IDxpXzInPiBmcm9tICI8VTFFQ0I+PFUwMzAxPiIKK2NvbGxhdGluZy1lbGVtZW50IDxJXzJgPiBmcm9tICI8VTFFQ0E+PFUwMzAwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxpXzJgPiBmcm9tICI8VTFFQ0I+PFUwMzAwPiIKK2NvbGxhdGluZy1zeW1ib2wgIDxvYmVsb3dkb3Q+Citjb2xsYXRpbmctZWxlbWVudCA8T18+ICBmcm9tICI8VTAwNEY+PFUwMzIzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxvXz4gIGZyb20gIjxVMDA2Rj48VTAzMjM+IgorY29sbGF0aW5nLWVsZW1lbnQgPE9fJz4gZnJvbSAiPFUwMDRGPjxVMDMyMz48VTAzMDE+IgorY29sbGF0aW5nLWVsZW1lbnQgPG9fJz4gZnJvbSAiPFUwMDZGPjxVMDMyMz48VTAzMDE+IgorY29sbGF0aW5nLWVsZW1lbnQgPE9fYD4gZnJvbSAiPFUwMDRGPjxVMDMyMz48VTAzMDA+IgorY29sbGF0aW5nLWVsZW1lbnQgPG9fYD4gZnJvbSAiPFUwMDZGPjxVMDMyMz48VTAzMDA+IgorY29sbGF0aW5nLWVsZW1lbnQgPE9fMic+IGZyb20gIjxVMUVDQz48VTAzMDE+IgorY29sbGF0aW5nLWVsZW1lbnQgPG9fMic+IGZyb20gIjxVMUVDRD48VTAzMDE+IgorY29sbGF0aW5nLWVsZW1lbnQgPE9fMmA+IGZyb20gIjxVMUVDQz48VTAzMDA+IgorY29sbGF0aW5nLWVsZW1lbnQgPG9fMmA+IGZyb20gIjxVMUVDRD48VTAzMDA+IgorY29sbGF0aW5nLXN5bWJvbCAgPHMtaC1pZz4KK2NvbGxhdGluZy1lbGVtZW50IDxTLUg+IGZyb20gIjxVMDA1Mz48VTAwNDg+IgorY29sbGF0aW5nLWVsZW1lbnQgPFMtaD4gZnJvbSAiPFUwMDUzPjxVMDA2OD4iCitjb2xsYXRpbmctZWxlbWVudCA8cy1IPiBmcm9tICI8VTAwNzM+PFUwMDQ4PiIKK2NvbGxhdGluZy1lbGVtZW50IDxzLWg+IGZyb20gIjxVMDA3Mz48VTAwNjg+IgorY29sbGF0aW5nLXN5bWJvbCAgPHViZWxvd2RvdD4KK2NvbGxhdGluZy1lbGVtZW50IDxVXz4gIGZyb20gIjxVMDA1NT48VTAzMjM+IgorY29sbGF0aW5nLWVsZW1lbnQgPHVfPiAgZnJvbSAiPFUwMDc1PjxVMDMyMz4iCitjb2xsYXRpbmctZWxlbWVudCA8VV8nPiBmcm9tICI8VTAwNTU+PFUwMzIzPjxVMDMwMT4iCitjb2xsYXRpbmctZWxlbWVudCA8dV8nPiBmcm9tICI8VTAwNzU+PFUwMzIzPjxVMDMwMT4iCitjb2xsYXRpbmctZWxlbWVudCA8VV9gPiBmcm9tICI8VTAwNzU+PFUwMzIzPjxVMDMwMD4iCitjb2xsYXRpbmctZWxlbWVudCA8dV9gPiBmcm9tICI8VTAwNTU+PFUwMzIzPjxVMDMwMD4iCitjb2xsYXRpbmctZWxlbWVudCA8VV8yJz4gZnJvbSAiPFUxRUU0PjxVMDMwMT4iCitjb2xsYXRpbmctZWxlbWVudCA8dV8yJz4gZnJvbSAiPFUxRUU1PjxVMDMwMT4iCitjb2xsYXRpbmctZWxlbWVudCA8VV8yYD4gZnJvbSAiPFUxRUU0PjxVMDMwMD4iCitjb2xsYXRpbmctZWxlbWVudCA8dV8yYD4gZnJvbSAiPFUxRUU1PjxVMDMwMD4iCitjb2xsYXRpbmctc3ltYm9sICA8bmFib3ZlZG90PgorY29sbGF0aW5nLWVsZW1lbnQgPE4uPiBmcm9tICI8VTAwNEU+PFUwMzA3PiIKK2NvbGxhdGluZy1lbGVtZW50IDxuLj4gZnJvbSAiPFUwMDZFPjxVMDMwNz4iCitjb2xsYXRpbmctc3ltYm9sICA8YWFjdXRlPgorY29sbGF0aW5nLWVsZW1lbnQgPEEnPiBmcm9tICI8VTAwNDE+PFUwMzAxPiIKK2NvbGxhdGluZy1lbGVtZW50IDxhJz4gZnJvbSAiPFUwMDYxPjxVMDMwMT4iCitjb2xsYXRpbmctc3ltYm9sICA8ZWFjdXRlPgorY29sbGF0aW5nLWVsZW1lbnQgPEUnPiBmcm9tICI8VTAwNDU+PFUwMzAxPiIKK2NvbGxhdGluZy1lbGVtZW50IDxlJz4gZnJvbSAiPFUwMDY1PjxVMDMwMT4iCitjb2xsYXRpbmctc3ltYm9sICA8aWFjdXRlPgorY29sbGF0aW5nLWVsZW1lbnQgPEknPiBmcm9tICI8VTAwNDk+PFUwMzAxPiIKK2NvbGxhdGluZy1lbGVtZW50IDxpJz4gZnJvbSAiPFUwMDY5PjxVMDMwMT4iCitjb2xsYXRpbmctc3ltYm9sICA8b2FjdXRlPgorY29sbGF0aW5nLWVsZW1lbnQgPE8nPiBmcm9tICI8VTAwNEY+PFUwMzAxPiIKK2NvbGxhdGluZy1lbGVtZW50IDxvJz4gZnJvbSAiPFUwMDZGPjxVMDMwMT4iCitjb2xsYXRpbmctc3ltYm9sICA8dWFjdXRlPgorY29sbGF0aW5nLWVsZW1lbnQgPFUnPiBmcm9tICI8VTAwNTU+PFUwMzAxPiIKK2NvbGxhdGluZy1lbGVtZW50IDx1Jz4gZnJvbSAiPFUwMDc1PjxVMDMwMT4iCitjb2xsYXRpbmctc3ltYm9sICA8YWdyYXZlPgorY29sbGF0aW5nLWVsZW1lbnQgPEFgPiBmcm9tICI8VTAwNDE+PFUwMzAwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxhYD4gZnJvbSAiPFUwMDYxPjxVMDMwMD4iCitjb2xsYXRpbmctc3ltYm9sICA8ZWdyYXZlPgorY29sbGF0aW5nLWVsZW1lbnQgPEVgPiBmcm9tICI8VTAwNDU+PFUwMzAwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxlYD4gZnJvbSAiPFUwMDY1PjxVMDMwMD4iCitjb2xsYXRpbmctc3ltYm9sICA8aWdyYXZlPgorY29sbGF0aW5nLWVsZW1lbnQgPElgPiBmcm9tICI8VTAwNDk+PFUwMzAwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxpYD4gZnJvbSAiPFUwMDY5PjxVMDMwMD4iCitjb2xsYXRpbmctc3ltYm9sICA8b2dyYXZlPgorY29sbGF0aW5nLWVsZW1lbnQgPE9gPiBmcm9tICI8VTAwNEY+PFUwMzAwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxvYD4gZnJvbSAiPFUwMDZGPjxVMDMwMD4iCitjb2xsYXRpbmctc3ltYm9sICA8dWdyYXZlPgorY29sbGF0aW5nLWVsZW1lbnQgPFVgPiBmcm9tICI8VTAwNTU+PFUwMzAwPiIKK2NvbGxhdGluZy1lbGVtZW50IDx1YD4gZnJvbSAiPFUwMDc1PjxVMDMwMD4iCisKK2NvbGxhdGluZy1zeW1ib2wgPENBUC1NSU4+Citjb2xsYXRpbmctc3ltYm9sIDxNSU4tQ0FQPgorIAorcmVvcmRlci1hZnRlciA8TUlOPgorPE1JTi1DQVA+CisgCityZW9yZGVyLWFmdGVyIDxDQVA+Cis8Q0FQLU1JTj4KKworcmVvcmRlci1hZnRlciA8Yz4KKzxjLWgtaWc+CityZW9yZGVyLWFmdGVyIDxnPgorPGctYi1pZz4KKzxnLWgtaWc+Cis8Zy13LWlnPgorcmVvcmRlci1hZnRlciA8aT4KKzxpYmVsb3dkb3Q+CityZW9yZGVyLWFmdGVyIDxrPgorPGstcC1pZz4KKzxrLXctaWc+CityZW9yZGVyLWFmdGVyIDxuPgorPG5hYm92ZWRvdD4KKzxuLXctaWc+Cis8bi15LWlnPgorPG8+Cis8b2JlbG93ZG90PgorcmVvcmRlci1hZnRlciA8cz4KKzxzLWgtaWc+CityZW9yZGVyLWFmdGVyIDx1PgorPHViZWxvd2RvdD4KKworcmVvcmRlci1hZnRlciA8VTAwNjE+Cis8VTAwRTE+IDxhPjs8QUNBPjs8TUlOPjtJR05PUkUKKzxhJz4gICAgPGE+OzxBQ0E+OzxNSU4+O0lHTk9SRQorPFUwMEUwPiA8YT47PEdSQT47PE1JTj47SUdOT1JFCis8YWA+ICAgIDxhPjs8R1JBPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDQxPgorPFUwMEMxPiA8YT47PEFDQT47PENBUD47SUdOT1JFCis8QSc+ICAgIDxhPjs8QUNBPjs8Q0FQPjtJR05PUkUKKzxVMDBDMD4gPGE+OzxHUkE+OzxDQVA+O0lHTk9SRQorPEFgPiAgICA8YT47PEdSQT47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDYzPgorPGMtaD4gICA8Yy1oLWlnPjs8UENMPjs8TUlOPjtJR05PUkUKKzxjLUg+ICAgPGMtaC1pZz47PFBDTD47PE1JTi1DQVA+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNDM+Cis8Qy1IPiAgIDxjLWgtaWc+OzxQQ0w+OzxDQVA+O0lHTk9SRQorPEMtaD4gICA8Yy1oLWlnPjs8UENMPjs8Q0FQLU1JTj47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDY1PgorPFUwMEU5PiA8ZT47PEFDQT47PE1JTj47SUdOT1JFCis8ZSc+ICAgIDxlPjs8QUNBPjs8TUlOPjtJR05PUkUKKzxVMDBFOD4gPGU+OzxHUkE+OzxNSU4+O0lHTk9SRQorPGVgPiAgICA8ZT47PEdSQT47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0NT4KKzxVMDBDOT4gPGU+OzxBQ0E+OzxDQVA+O0lHTk9SRQorPEUnPiAgICA8ZT47PEFDQT47PENBUD47SUdOT1JFCis8VTAwQzg+IDxlPjs8R1JBPjs8Q0FQPjtJR05PUkUKKzxFYD4gICAgPGU+OzxHUkE+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA2Nz4KKzxnLWI+ICAgPGctYi1pZz47PFBDTD47PE1JTj47SUdOT1JFCis8Zy1CPiAgIDxnLWItaWc+OzxQQ0w+OzxNSU4tQ0FQPjtJR05PUkUKKzxnLWg+ICAgPGctaC1pZz47PFBDTD47PE1JTj47SUdOT1JFCis8Zy1IPiAgIDxnLWgtaWc+OzxQQ0w+OzxNSU4tQ0FQPjtJR05PUkUKKzxnLXc+ICAgPGctdy1pZz47PFBDTD47PE1JTj47SUdOT1JFCis8Zy1XPiAgIDxnLXctaWc+OzxQQ0w+OzxNSU4tQ0FQPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDQ3PgorPEctQj4gICA8Zy1iLWlnPjs8UENMPjs8Q0FQPjtJR05PUkUKKzxHLWI+ICAgPGctYi1pZz47PFBDTD47PENBUC1NSU4+O0lHTk9SRQorPEctSD4gICA8Zy1oLWlnPjs8UENMPjs8Q0FQPjtJR05PUkUKKzxHLWg+ICAgPGctaC1pZz47PFBDTD47PENBUC1NSU4+O0lHTk9SRQorPEctVz4gICA8Zy13LWlnPjs8UENMPjs8Q0FQPjtJR05PUkUKKzxHLXc+ICAgPGctdy1pZz47PFBDTD47PENBUC1NSU4+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA2OT4KKzxVMDBFRD4gPGk+OzxBQ0E+OzxNSU4+O0lHTk9SRQorPGknPiAgICA8aT47PEFDQT47PE1JTj47SUdOT1JFCis8VTAwRUM+IDxpPjs8R1JBPjs8TUlOPjtJR05PUkUKKzxpYD4gICAgPGk+OzxHUkE+OzxNSU4+O0lHTk9SRQorPFUxRUNCPiA8aWJlbG93ZG90Pjs8QkFTPjs8TUlOPjtJR05PUkUKKzxpXz4gICAgPGliZWxvd2RvdD47PEJBUz47PE1JTj47SUdOT1JFCis8aV8nPiAgIDxpYmVsb3dkb3Q+OzxBQ0E+OzxNSU4+O0lHTk9SRQorPGlfMic+ICA8aWJlbG93ZG90Pjs8QUNBPjs8TUlOPjtJR05PUkUKKzxpX2A+ICAgPGliZWxvd2RvdD47PEdSQT47PE1JTj47SUdOT1JFCis8aV8yYD4gIDxpYmVsb3dkb3Q+OzxHUkE+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNDk+Cis8VTAwQ0Q+IDxpPjs8QUNBPjs8Q0FQPjtJR05PUkUKKzxJJz4gICAgPGk+OzxBQ0E+OzxDQVA+O0lHTk9SRQorPFUwMENDPiA8aT47PEdSQT47PENBUD47SUdOT1JFCis8SWA+ICAgIDxpPjs8R1JBPjs8Q0FQPjtJR05PUkUKKzxVMUVDQT4gPGliZWxvd2RvdD47PEJBUz47PENBUD47SUdOT1JFCis8SV8+ICAgIDxpYmVsb3dkb3Q+OzxDQVA+OzxDQVA+O0lHTk9SRQorPElfJz4gICA8aWJlbG93ZG90Pjs8QUNBPjs8Q0FQPjtJR05PUkUKKzxJXzInPiAgPGliZWxvd2RvdD47PEFDQT47PENBUD47SUdOT1JFCis8SV9gPiAgIDxpYmVsb3dkb3Q+OzxHUkE+OzxDQVA+O0lHTk9SRQorPElfMmA+ICA8aWJlbG93ZG90Pjs8R1JBPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNjc+Cis8ay1wPiAgIDxrLXAtaWc+OzxQQ0w+OzxNSU4+O0lHTk9SRQorPGstUD4gICA8ay1wLWlnPjs8UENMPjs8TUlOLUNBUD47SUdOT1JFCis8ay13PiAgIDxrLXctaWc+OzxQQ0w+OzxNSU4+O0lHTk9SRQorPGstVz4gICA8ay13LWlnPjs8UENMPjs8TUlOLUNBUD47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0Nz4KKzxLLVA+ICAgPGstcC1pZz47PFBDTD47PENBUD47SUdOT1JFCis8Sy1wPiAgIDxrLXAtaWc+OzxQQ0w+OzxDQVAtTUlOPjtJR05PUkUKKzxLLVc+ICAgPGstdy1pZz47PFBDTD47PENBUD47SUdOT1JFCis8Sy13PiAgIDxrLXctaWc+OzxQQ0w+OzxDQVAtTUlOPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNkU+Cis8VTFFNDU+IDxuYWJvdmVkb3Q+OzxCQVM+OzxNSU4+O0lHTk9SRQorPG4uPiAgICA8bmFib3ZlZG90Pjs8QkFTPjs8TUlOPjtJR05PUkUKKzxuLXc+ICAgPG4tdy1pZz47PFBDTD47PE1JTj47SUdOT1JFCis8bi1XPiAgIDxuLXctaWc+OzxQQ0w+OzxNSU4tQ0FQPjtJR05PUkUKKzxuLXk+ICAgPG4teS1pZz47PFBDTD47PE1JTj47SUdOT1JFCis8bi1ZPiAgIDxuLXktaWc+OzxQQ0w+OzxNSU4tQ0FQPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDRFPgorPFUxRTQ0PiA8bmFib3ZlZG90Pjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxOLj4gICAgPG5hYm92ZWRvdD47PEJBUz47PENBUD47SUdOT1JFCis8Ti1XPiAgIDxuLXctaWc+OzxQQ0w+OzxDQVA+O0lHTk9SRQorPE4tdz4gICA8bi13LWlnPjs8UENMPjs8Q0FQLU1JTj47SUdOT1JFCis8Ti1ZPiAgIDxuLXktaWc+OzxQQ0w+OzxDQVA+O0lHTk9SRQorPE4teT4gICA8bi15LWlnPjs8UENMPjs8Q0FQLU1JTj47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDZGPgorPFUwMEYzPiA8bz47PEFDQT47PE1JTj47SUdOT1JFCis8byc+ICAgIDxvPjs8QUNBPjs8TUlOPjtJR05PUkUKKzxVMDBGMj4gPG8+OzxHUkE+OzxNSU4+O0lHTk9SRQorPG9gPiAgICA8bz47PEdSQT47PE1JTj47SUdOT1JFCis8VTFFQ0Q+IDxvYmVsb3dkb3Q+OzxCQVM+OzxNSU4+O0lHTk9SRQorPG9fPiAgICA8b2JlbG93ZG90Pjs8QkFTPjs8TUlOPjtJR05PUkUKKzxvXyc+ICAgPG9iZWxvd2RvdD47PEFDQT47PE1JTj47SUdOT1JFCis8b18yJz4gIDxvYmVsb3dkb3Q+OzxBQ0E+OzxNSU4+O0lHTk9SRQorPG9fYD4gICA8b2JlbG93ZG90Pjs8R1JBPjs8TUlOPjtJR05PUkUKKzxvXzJgPiAgPG9iZWxvd2RvdD47PEdSQT47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0Rj4KKzxVMDBEMz4gPG8+OzxBQ0E+OzxDQVA+O0lHTk9SRQorPE8nPiAgICA8bz47PEFDQT47PENBUD47SUdOT1JFCis8VTAwRDI+IDxvPjs8R1JBPjs8Q0FQPjtJR05PUkUKKzxPYD4gICAgPG8+OzxHUkE+OzxDQVA+O0lHTk9SRQorPFUxRUNDPiA8b2JlbG93ZG90Pjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxPXz4gICAgPG9iZWxvd2RvdD47PEJBUz47PENBUD47SUdOT1JFCis8T18nPiAgIDxvYmVsb3dkb3Q+OzxBQ0E+OzxDQVA+O0lHTk9SRQorPE9fMic+ICA8b2JlbG93ZG90Pjs8QUNBPjs8Q0FQPjtJR05PUkUKKzxPX2A+ICAgPG9iZWxvd2RvdD47PEdSQT47PENBUD47SUdOT1JFCis8T18yYD4gIDxvYmVsb3dkb3Q+OzxHUkE+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA3Mz4KKzxzLWg+ICAgPHMtaC1pZz47PFBDTD47PE1JTj47SUdOT1JFCis8cy1IPiAgIDxzLWgtaWc+OzxQQ0w+OzxNSU4tQ0FQPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDUzPgorPFMtSD4gICA8cy1oLWlnPjs8UENMPjs8Q0FQPjtJR05PUkUKKzxTLWg+ICAgPHMtaC1pZz47PFBDTD47PENBUC1NSU4+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA3NT4KKzxVMDBGQT4gPHU+OzxBQ0E+OzxNSU4+O0lHTk9SRQorPHUnPiAgICA8dT47PEFDQT47PE1JTj47SUdOT1JFCis8VTAwRjk+IDx1Pjs8R1JBPjs8TUlOPjtJR05PUkUKKzx1YD4gICAgPHU+OzxHUkE+OzxNSU4+O0lHTk9SRQorPFUxRUU1PiA8dWJlbG93ZG90Pjs8QkFTPjs8TUlOPjtJR05PUkUKKzx1Xz4gICAgPHViZWxvd2RvdD47PEJBUz47PE1JTj47SUdOT1JFCis8dV8nPiAgIDx1YmVsb3dkb3Q+OzxBQ0E+OzxNSU4+O0lHTk9SRQorPHVfMic+ICA8dWJlbG93ZG90Pjs8QUNBPjs8TUlOPjtJR05PUkUKKzx1X2A+ICAgPHViZWxvd2RvdD47PEdSQT47PE1JTj47SUdOT1JFCis8dV8yYD4gIDx1YmVsb3dkb3Q+OzxHUkE+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNTU+Cis8VTAwREE+IDx1Pjs8QUNBPjs8Q0FQPjtJR05PUkUKKzxVJz4gICAgPHU+OzxBQ0E+OzxDQVA+O0lHTk9SRQorPFUwMEQ5PiA8dT47PEdSQT47PENBUD47SUdOT1JFCis8VWA+ICAgIDx1Pjs8R1JBPjs8Q0FQPjtJR05PUkUKKzxVMUVFND4gPHViZWxvd2RvdD47PEJBUz47PENBUD47SUdOT1JFCis8VV8+ICAgIDx1YmVsb3dkb3Q+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFVfJz4gICA8dWJlbG93ZG90Pjs8QUNBPjs8Q0FQPjtJR05PUkUKKzxVXzInPiAgPHViZWxvd2RvdD47PEFDQT47PENBUD47SUdOT1JFCis8VV9gPiAgIDx1YmVsb3dkb3Q+OzxHUkE+OzxDQVA+O0lHTk9SRQorPFVfMmA+ICA8dWJlbG93ZG90Pjs8R1JBPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1lbmQKKworRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImVuX05HIgorRU5EIExDX0NUWVBFCisKK0xDX01PTkVUQVJZCitjb3B5ICJlbl9ORyIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJlbl9ORyIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RFTEVQSE9ORQorY29weSAiZW5fTkciCitFTkQgTENfVEVMRVBIT05FCisgCitMQ19USU1FCislIHPhu41uLCBt4buNbiwgdHV6LCB3ZW4sIHThu41zLCBmcmEsIHNhdAorYWJkYXkgICAgICAgIjxVMDA3Mz48VTFFQ0Q+PFUwMDZFPiI7IjxVMDA2RD48VTFFQ0Q+PFUwMDZFPiI7LworICAgICAgICAgICAgIjxVMDA3ND48VTAwNzU+PFUwMDdBPiI7IjxVMDA3Nz48VTAwNjU+PFUwMDZFPiI7LworICAgICAgICAgICAgIjxVMDA3ND48VTFFQ0Q+PFUwMDczPiI7IjxVMDA2Nj48VTAwNzI+PFUwMDYxPiI7LworICAgICAgICAgICAgIjxVMDA3Mz48VTAwNjE+PFUwMDc0PiIKKyUgc+G7jW5kZSwgbeG7jW5kZSwgdHV6ZGUsIHdlbnpkZSwgdOG7jXNkZSwgZnJh4buLZGUsIHNhdOG7jWRlCitkYXkgICAgICAgICAiPFUwMDczPjxVMUVDRD48VTAwNkU+PFUwMDY0PjxVMDA2NT4iOy8KKyAgICAgICAgICAgICI8VTAwNkQ+PFUxRUNEPjxVMDA2RT48VTAwNjQ+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA3ND48VTAwNzU+PFUwMDdBPjxVMDA2ND48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDc3PjxVMDA2NT48VTAwNkU+PFUwMDdBPjxVMDA2ND48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDc0PjxVMUVDRD48VTAwNzM+PFUwMDY0PjxVMDA2NT4iOy8KKyAgICAgICAgICAgICI8VTAwNjY+PFUwMDcyPjxVMDA2MT48VTFFQ0I+PFUwMDY0PjxVMDA2NT4iOy8KKyAgICAgICAgICAgICI8VTAwNzM+PFUwMDYxPjxVMDA3ND48VTFFQ0Q+PFUwMDY0PjxVMDA2NT4iCislIGplbiwgZmViLCBtYWNoLCBlcHIsIG1lZSwganV1LCBqdWwsIOG7jWfhu40sIHNlcCwg4buNa3QsIG7hu412LCBkaXMKK2FibW9uICAgICAgICI8VTAwNkE+PFUwMDY1PjxVMDA2RT4iOyI8VTAwNjY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA2MT4iOyI8VTAwNjU+PFUwMDcwPjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNkQ+PFUwMDY1PjxVMDA2NT4iOyI8VTAwNkE+PFUwMDc1PjxVMDA3NT4iOy8KKyAgICAgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Qz4iOyI8VTFFQ0Q+PFUwMDY3PjxVMUVDRD4iOy8KKyAgICAgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD4iOyI8VTFFQ0Q+PFUwMDZCPjxVMDA3ND4iOy8KKyAgICAgICAgICAgICI8VTAwNkU+PFUxRUNEPjxVMDA3Nj4iOyI8VTAwNjQ+PFUwMDY5PjxVMDA3Mz4iCislIGplbuG7pXdhcuG7iywgZmVi4bulcuG7pXdhcuG7iywgbWFhY2jhu4ssIGVwcmVlbCwgbWVlLCBqdXVuLCAKKyUganVsYeG7iywg4buNZ+G7jXN04bulLCBzZXB0ZW1iYSwg4buNa3RvYmEsIG7hu412ZW1iYSwgZGlzZW1iYQorbW9uICAgICAgICAgIjxVMDA2QT48VTAwNjU+PFUwMDZFPjxVMUVFNT48VTAwNzc+PFUwMDYxPjxVMDA3Mj48VTFFQ0I+IjsvCisgICAgICAgICAgICAiPFUwMDY2PjxVMDA2NT48VTAwNjI+PFUxRUU1PjxVMDA3Mj48VTFFRTU+PFUwMDc3PjxVMDA2MT48VTAwNzI+PFUxRUNCPiI7LworICAgICAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDYxPjxVMDA2Mz48VTAwNjg+PFUxRUNCPiI7LworICAgICAgICAgICAgIjxVMDA2NT48VTAwNzA+PFUwMDcyPjxVMDA2NT48VTAwNjU+PFUwMDZDPiI7LworICAgICAgICAgICAgIjxVMDA2RD48VTAwNjU+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Qz48VTAwNjE+PFUxRUNCPiI7LworICAgICAgICAgICAgIjxVMUVDRD48VTAwNjc+PFUxRUNEPjxVMDA3Mz48VTAwNzQ+PFUxRUU1PiI7LworICAgICAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUxRUNEPjxVMDA2Qj48VTAwNzQ+PFUwMDZGPjxVMDA2Mj48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDZFPjxVMUVDRD48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDYxPiI7LworICAgICAgICAgICAgIjxVMDA2ND48VTAwNjk+PFUwMDczPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2MT4iCislIEZJWE1FCislICVBLCAlZCAlQiAlWSAlVCAlWgorZF90X2ZtdCAgICAgIjxVMDAyNT48VTAwNDE+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDQyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDcyPiIKK2FtX3BtICAgICAgICI8VTAwNDE+PFUwMDREPiI7IjxVMDA1MD48VTAwNEQ+IgordF9mbXRfYW1wbSAgIjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNzA+IgorRU5EIExDX1RJTUUKKworTENfTUVTU0FHRVMKKyUgeWVzOiBFZQoreWVzc3RyICAgICAgIjxVMDA0NT48VTAwNjU+IgorJSBeW0VlSWlZeV0uKgoreWVzZXhwciAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDQ1PjxVMDA2NT48VTAwNDk+PFUwMDY5PjxVMDA1OT48VTAwNzk+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorJSBNYmEKK25vc3RyICAgICAgICI8VTAwNEQ+PFUwMDYyPjxVMDA2MT4iCislIF5bTW1Obl0uKgorbm9leHByICAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDMwPjxVMDA0RD48VTAwNkQ+PFUwMDRFPjxVMDA2RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfUEFQRVIKK2NvcHkgImVuX05HIgorRU5EIExDX1BBUEVSCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJlbl9ORyIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCislIEZJWE1FCitjb3B5ICJlbl9ORyIKK0VORCBMQ19OQU1FCisKKyUgRklYTUUKK0xDX0FERFJFU1MKKyUgUmVwcmVzZW50YXRpb24gb2YgcG9zdGFsIGFkZHJlc3NlcyAobWludXMgdGhlIGFkZHJlc3NlZSdzIG5hbWUpIGluIFNvdXRoCislIEFmcmljYS4gKElnbm9yZWQgZm9yIG5vdykKKyUgIiVmJU4lYSVOJWQlTiViJU4lcyAlaCAlZSAlciVOJXogJVQlTiVjJU4iLCB3aGljaCBnaXZlcyAtCislCislICJmaXJtIG5hbWUiLAorJSAiZW5kIG9mIGxpbmUiLAorJSAiQy9PIGFkZHJlc3MiLAorJSAiZW5kIG9mIGxpbmUiLAorJSAiZGVwYXJ0bWVudCBuYW1lIiwKKyUgIkJ1aWxkaW5nIG5hbWUiLAorJSAiZW5kIG9mIGxpbmUiLAorJSAic3RyZWV0IG9yIGJsb2NrIG5hbWUiLAorJSAic3BhY2UiLAorJSAiaG91c2UgbnVtYmVyIG9yIGRlc2lnbmF0aW9uIiwKKyUgInNwYWNlIiwKKyUgImZsb29yIG51bWJlciIsCislICJzcGFjZSIsCislICJyb29tIG51bWJlciwgZG9vciBkZXNpZ25hdGlvbiIsCislICJlbmQgb2YgbGluZSIsCislICJwb3N0YWwgY29kZSIsCislICJzcGFjZSIsCislICJ0b3duLCBjaXR5IiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgImNvdW50cnkgZGVzaWduYXRpb24gZm9yIHRoZSA8Y291bnRyeV9wb3N0PiBrZXl3b3JkIiwKKyUgImVuZCBvZiBsaW5lCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorCislIENvdW50cnkgbmFtZSBpbiBJZ2JvIC0gIk5pZ2VyaWEiCitjb3VudHJ5X25hbWUgICI8VTAwNEU+PFUwMDY5PjxVMDA2Nz48VTAwNjU+PFUwMDcyPjxVMDA2OT48VTAwNjE+IgorCislIExhbmd1YWdlIG5hbWUgaW4gSWdibyAtICJJZ2JvIgorbGFuZ19uYW1lICAgICAiPFUwMDQ5PjxVMDA2Nz48VTAwNjI+PFUwMDZGPiIKKworJSBDRVBUIE1BSUxDT0RFUyBhcmUgc3VnZ2VzdGVkCislIEFsdGVybmF0aXZlbHkgdXNlIHRoZSBjb2RlIGZvdW5kIG9uIHlvdXIgY291bnRyaWVzIHBvc3RhbCBpdGVtIHRyYWNraW5nIG51bWJlcgorJSAiTkciPworJWNvdW50cnlfcG9zdCAgICI8VTAwNEU+PFUwMDQ3PiIKKworJSBVTiBHZW5ldmUgMTk0OTo2OCBEaXN0aW5ndWlzaGluZyBzaWducyBvZiB2ZWhpY2xlcyBpbiBpbnRlcm5hdGlvbmFsIHRyYWZmaWMKKyUgaHR0cDovL3d3dy51bmVjZS5vcmcvdHJhbnMvY29udmVudG4vRGlzdHNpZ25zX1NlcHQyMDAzLnBkZgorJSAiV0FOIgorY291bnRyeV9jYXIgICAiPFUwMDU3PjxVMDA0MT48VTAwNEU+IgorCislIElTTyAyMTA4CislIGh0dHA6Ly93d3cuaXNibi1pbnRlcm5hdGlvbmFsLm9yZy8KK2NvdW50cnlfaXNibiAgOTc4CisKKyUgSVNPIDYzOSBsYW5ndWFnZSBhYmJyZXZpYXRpb25zOgorJSA2MzktMSAyIGxldHRlciwgNjM5LTIgMyBsZXR0ZXIgdGVybWlub2xvZ3kKKyUgaHR0cDovL3d3dy5sb2MuZ292L3N0YW5kYXJkcy9pc282MzktMi9lbmdsYWduLmh0bWwKKyUgImlnIiwgImlibyIKK2xhbmdfYWIgICAgICAgIjxVMDA2OT48VTAwNjc+IgorbGFuZ190ZXJtICAgICAiPFUwMDY5PjxVMDA2Mj48VTAwNkY+IgorbGFuZ19saWIgICAgICAiPFUwMDY5PjxVMDA2Mj48VTAwNkY+IgorCislIElTTyAzMTY2IGNvdW50cnkgbnVtYmVyIGFuZCAyIGFuZCAzIGxldHRlciBhYnJldmlhdGlvbnMKKyUgaHR0cDovL3d3dy51bmljb2RlLm9yZy9vbmxpbmVkYXQvY291bnRyaWVzLmh0bWwKKyUgIk5HIiwgIk5HQSIKK2NvdW50cnlfYWIyICAgIjxVMDA0RT48VTAwNDc+IgorY291bnRyeV9hYjMgICAiPFUwMDRFPjxVMDA0Nz48VTAwNDE+IgorY291bnRyeV9udW0gICA1NjYKKworRU5EIExDX0FERFJFU1MKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvaWtfQ0EgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9pa19DQQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGNiOGFmCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvaWtfQ0EKQEAgLTAsMCArMSwyMzcgQEAKK2VzY2FwZV9jaGFyIC8KK2NvbW1lbnRfY2hhciAlCislCislIEludXBpYXEgbGFuZ3VhZ2UgbG9jYWxlIGZvciBDYW5hZGEKKyUgU291cmNlOiAKKyUgQ29udGFjdDogUGFibG8gU2FyYXR4YWdhCislIEVtYWlsOiBwYWJsb0BtYW5kcml2YS5jb20KKyUgTGFuZ3VhZ2U6IGlrCislIFRlcnJpdG9yeTogQ0EKKyUgUmV2aXNpb246IDAuMgorJSBEYXRlOiAyMDA0LTA4LTAxCislIFVzZXJzOiBnZW5lcmFsCislIENoYXJzZXQ6IFVURi04CislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJJbnVwaWFxIGxvY2FsZSBmb3IgQ2FuYWRhIgorc291cmNlICAgICAiIgorYWRkcmVzcyAgICAiIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAicGFibG9AbWFuZHJpdmEuY29tIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiSW51cGlhcSIKK3RlcnJpdG9yeSAgIkNhbmFkYSIKK3JldmlzaW9uICAgIjAuMiIKK2RhdGUgICAgICAgIjIwMDQtMDgtMDEiCislCitjYXRlZ29yeSAgImlrX0NBOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImlrX0NBOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImlrX0NBOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiaWtfQ0E6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJpa19DQToyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImlrX0NBOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImlrX0NBOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImlrX0NBOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImlrX0NBOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiaWtfQ0E6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJpa19DQToyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKKworJSBJbnVwaWFxIHVzZXMgdGhlIGZvbGxvd2luZyBleHRyYSBsZXR0ZXJzOiAKKyUgZ2RvdGFib3ZlLCBsZG90YmVsb3csIGxiYXJyZWQsIGxiYXJyZWRkb3RiZWxvdyAobm90IGluIHVuaWNvZGUsCislIGhhcyB0byBiZSBjb21wb3NlZCBhcyBsYmFycmVkK2NvbXBvc2luZ2RvdGJlbG93KSwgZW5nLCBudGlsZGUKKyUKKyUgc29ydGluZyBvcmRlciBmcm9tCislIGh0dHA6Ly93d3cubnNic2Qub3JnL2FuZXAvcHVibGljL2luZGV4LmNmbS8xNyw0NTksaHRtbAorJSBob3dldmVyIEknbSBub3QKKyUgc3VyZSBpZiBhbGwgbGV0dGVycyBhcmUgdG8gYmUgY29uc2lkZXJlZCBhcyBzZXBhcmF0ZSBpdGVtcyBmb3IKKyUgc29ydGluZyBwdXJwb3Nlcy4uLgorJQorJSBvcmRlcjogYSwgW2JdLCBbY10sIGNoLCBbZF0sIFtlXSwgW2ZdLCBnLCBnLiwgaCwgaSwgW2pdLCBrLCBsLAorJSBsLywgbC0uLCBsLy0uLCBtLCBuLCBuPywgbmcsIFtvXSwgcCwgcSwgciwgcywgc3IsIHQsIHUsIHYsIFt3XSwKKyUgW3hdLCB5LCBbel0KKworY29weSAiaXNvMTQ2NTFfdDEiCisKK2NvbGxhdGluZy1zeW1ib2wgIDxjLWgtaWs+Citjb2xsYXRpbmctZWxlbWVudCA8Qy1IPiBmcm9tICI8VTAwNDM+PFUwMDQ4PiIKK2NvbGxhdGluZy1lbGVtZW50IDxjLWg+IGZyb20gIjxVMDA2Mz48VTAwNjg+IgorY29sbGF0aW5nLWVsZW1lbnQgPEMtaD4gZnJvbSAiPFUwMDQzPjxVMDA2OD4iCitjb2xsYXRpbmctZWxlbWVudCA8Yy1IPiBmcm9tICI8VTAwNjM+PFUwMDQ4PiIKK2NvbGxhdGluZy1zeW1ib2wgIDxzLXItaWs+Citjb2xsYXRpbmctZWxlbWVudCA8Uy1SPiBmcm9tICI8VTAwNTM+PFUwMDUyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxzLXI+IGZyb20gIjxVMDA3Mz48VTAwNzI+IgorY29sbGF0aW5nLWVsZW1lbnQgPFMtcj4gZnJvbSAiPFUwMDUzPjxVMDA3Mj4iCitjb2xsYXRpbmctZWxlbWVudCA8cy1SPiBmcm9tICI8VTAwNzM+PFUwMDUyPiIKK2NvbGxhdGluZy1zeW1ib2wgIDxsLWRvdGJlbG93LWlrPgorY29sbGF0aW5nLWVsZW1lbnQgPEwtZG90PiBmcm9tICI8VTAwNEM+PFUwMzIzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxsLWRvdD4gZnJvbSAiPFUwMDZDPjxVMDMyMz4iCitjb2xsYXRpbmctc3ltYm9sICA8bGJhci1kb3RiZWxvdy1paz4KK2NvbGxhdGluZy1lbGVtZW50IDxMYmFyLWRvdD4gZnJvbSAiPFUwMTQxPjxVMDMyMz4iCitjb2xsYXRpbmctZWxlbWVudCA8bGJhci1kb3Q+IGZyb20gIjxVMDE0Mj48VTAzMjM+IgorY29sbGF0aW5nLXN5bWJvbCAgPGdkb3Q+Citjb2xsYXRpbmctc3ltYm9sICA8bGJhcj4KK2NvbGxhdGluZy1zeW1ib2wgIDxudGlsZGU+Citjb2xsYXRpbmctc3ltYm9sICA8ZW5nPgorCitjb2xsYXRpbmctc3ltYm9sIDxDQVAtTUlOPgorY29sbGF0aW5nLXN5bWJvbCA8TUlOLUNBUD4KKyAKK3Jlb3JkZXItYWZ0ZXIgPE1JTj4KKzxNSU4tQ0FQPgorIAorcmVvcmRlci1hZnRlciA8Q0FQPgorPENBUC1NSU4+CisKK3Jlb3JkZXItYWZ0ZXIgPGM+Cis8Yy1oLWlrPgorcmVvcmRlci1hZnRlciA8Zz4KKzxnZG90PgorcmVvcmRlci1hZnRlciA8bD4KKzxsYmFyPgorPGwtZG90YmVsb3ctaWs+Cis8bGJhci1kb3RiZWxvdy1paz4KK3Jlb3JkZXItYWZ0ZXIgPG4+Cis8bnRpbGRlPgorPGVuZz4KK3Jlb3JkZXItYWZ0ZXIgPHM+Cis8cy1yLWlrPgorCityZW9yZGVyLWFmdGVyIDxVMDA2Mz4KKzxjLWg+ICAgPGMtaC1paz47PFBDVD47PE1JTj47SUdOT1JFCis8Yy1IPiAgIDxjLWgtaWs+OzxQQ1Q+OzxNSU4tQ0FQPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDQzPgorPEMtSD4gICA8Yy1oLWlrPjs8UENUPjs8Q0FQPjtJR05PUkUKKzxDLWg+ICAgPGMtaC1paz47PFBDVD47PENBUC1NSU4+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA2Nz4KKzxVMDEyMT4gICA8Z2RvdD47PFBDVD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0Nz4KKzxVMDEyMD4gICA8Z2RvdD47PFBDVD47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDZDPgorPFUwMTQyPiA8bGJhcj47PEJBUz47PE1JTj47SUdOT1JFCis8bC1kb3Q+IDxsLWRvdGJlbG93LWlrPjs8UENUPjs8TUlOPjtJR05PUkUKKzxVMUUzNz4gPGwtZG90YmVsb3ctaWs+OzxQQ1Q+OzxNSU4+O0lHTk9SRQorPFUxRTM5PiA8bC1kb3RiZWxvdy1paz47PFBDVD47PE1JTj47SUdOT1JFCis8bGJhci1kb3Q+IDxsYmFyLWRvdGJlbG93LWlrPjs8UENUPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDRDPgorPFUwMTQxPiA8bGJhcj47PEJBUz47PENBUD47SUdOT1JFCis8TC1kb3Q+IDxsLWRvdGJlbG93LWlrPjs8UENUPjs8Q0FQPjtJR05PUkUKKzxVMUUzNj4gPGwtZG90YmVsb3ctaWs+OzxQQ1Q+OzxDQVA+O0lHTk9SRQorPFUxRTM4PiA8bC1kb3RiZWxvdy1paz47PFBDVD47PENBUD47SUdOT1JFCis8TGJhci1kb3Q+IDxsYmFyLWRvdGJlbG93LWlrPjs8UENUPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNkU+Cis8VTAwRjE+IDxudGlsZGU+OzxUSUw+OzxNSU4+O0lHTk9SRQorPFUwMTRCPiA8ZW5nPjs8UENMPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDRFPgorPFUwMEQxPiA8bnRpbGRlPjs8VElMPjs8Q0FQPjtJR05PUkUKKzxVMDE0QT4gPGVuZz47PFBDTD47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDczPgorPHMtcj4gICA8cy1yLWlrPjs8UENUPjs8TUlOPjtJR05PUkUKKzxzLVI+ICAgPHMtci1paz47PFBDVD47PE1JTi1DQVA+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNTM+Cis8Uy1SPiAgIDxzLXItaWs+OzxQQ1Q+OzxDQVA+O0lHTk9SRQorPFMtcj4gICA8cy1yLWlrPjs8UENUPjs8Q0FQLU1JTj47SUdOT1JFCisKKyAKK3Jlb3JkZXItZW5kCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJlbl9DQSIKK0VORCBMQ19DVFlQRQorCitMQ19NT05FVEFSWQorY29weSAiZW5fQ0EiCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworY29weSAiZW5fQ0EiCitFTkQgTENfTlVNRVJJQworCitMQ19URUxFUEhPTkUKK2NvcHkgImVuX0NBIgorRU5EIExDX1RFTEVQSE9ORQorIAorTENfVElNRQorYWJkYXkgICAgICAgIjxVMDA0RD48VTAwNjk+PFUwMDZFPiI7IjxVMDA1Mz48VTAwNjE+PFUwMDc2PiI7LworICAgICAgICAgICAgIjxVMDA0OT48VTAwNkM+PFUwMDYxPiI7IjxVMDA1MT48VTAwNjk+PFUwMDc0PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjk+PFUwMDczPiI7IjxVMDA1ND48VTAwNjE+PFUwMDZDPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcxPiIKK2RheSAgICAgICAgICI8VTAwNEQ+PFUwMDY5PjxVMDA2RT48VTAxMjE+PFUwMDc1PjxVMDA2OT48VTAwNzE+PFUwMDczPjxVMDA2OT48VTAwNkY+PFUwMDY5PjxVMDA3MT4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA3Nj48VTAwNjE+PFUwMTQyPjxVMDE0Mj48VTAwNjk+PFUwMDcxPiI7LworICAgICAgICAgICAgIjxVMDA0OT48VTAwNkM+PFUwMDYxPjxVMDA3MT48VTAwNzQ+PFUwMDYzPjxVMDA2OD48VTAwNjk+PFUwMDY5PjxVMDA2Rj48VTAwNjk+PFUwMDcxPiI7LworICAgICAgICAgICAgIjxVMDA1MT48VTAwNjk+PFUwMDc0PjxVMDA2Mz48VTAwNjg+PFUwMDY5PjxVMDA2OT48VTAwNkY+PFUwMDY5PjxVMDA3MT4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDY5PjxVMDA3Mz48VTAwNjE+PFUwMDZEPjxVMDA2OT48VTAwNjk+PFUwMDZGPjxVMDA2OT48VTAwNzE+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA2MT48VTAwNkM+PFUwMDZDPjxVMDA2OT48VTAwNkQ+PFUwMDZEPjxVMDA2OT48VTAwNjk+PFUwMDZGPjxVMDA2OT48VTAwNzE+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzE+PFUwMDY5PjxVMDA2RT48VTAxMjE+PFUwMDc1PjxVMDA2Rj48VTAwNjk+PFUwMDcxPiIKK2FibW9uICAgICAgICI8VTAwNTM+PFUwMEYxPjxVMDA3ND4iOyI8VTAwNTM+PFUwMEYxPjxVMDA3Mz4iOy8KKyAgICAgICAgICAgICI8VTAwNTA+PFUwMDYxPjxVMDA2RT4iOyI8VTAwNTE+PFUwMDY5PjxVMDA2Qz4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDc1PjxVMDA3MD4iOyI8VTAwNDk+PFUwMTIxPjxVMDBGMT4iOy8KKyAgICAgICAgICAgICI8VTAwNDk+PFUwMDc0PjxVMDA2Mz4iOyI8VTAwNTQ+PFUwMDY5PjxVMDBGMT4iOy8KKyAgICAgICAgICAgICI8VTAwNDE+PFUwMDZEPjxVMDA2OT4iOyI8VTAwNTM+PFUwMDY5PjxVMDA2Qj4iOy8KKyAgICAgICAgICAgICI8VTAwNEU+PFUwMDY5PjxVMDA3MD4iOyI8VTAwNTM+PFUwMDY5PjxVMDA3MT4iCittb24gICAgICAgICAiPFUwMDUzPjxVMDA2OT48VTAwNzE+PFUwMDY5PjxVMDBGMT48VTAwRjE+PFUwMDYxPjxVMDA2MT48VTAwNzQ+PFUwMDYzPjxVMDA2OD48VTAwNjk+PFUwMDYxPjxVMDA3MT4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDY5PjxVMDA3MT48VTAwNjk+PFUwMEYxPjxVMDBGMT48VTAwNjE+PFUwMDYxPjxVMDA3Mz48VTAwNzI+PFUwMDc1PjxVMDA2Nz48VTAwNzI+PFUwMDc1PjxVMDA2Qj4iOy8KKyAgICAgICAgICAgICI8VTAwNTA+PFUwMDYxPjxVMDA2RT48VTAwNjk+PFUwMDcxPjxVMDA3Mz48VTAwNjk+PFUwMDcxPjxVMDA3Mz48VTAwNjk+PFUwMDY5PjxVMDA3Nj48VTAwNjk+PFUwMDZCPiI7LworICAgICAgICAgICAgIjxVMDA1MT48VTAwNjk+PFUwMDZDPjxVMDEyMT48VTAwNjk+PFUwMDYzPjxVMDA2OD48VTAwMjA+PFUwMDU0PjxVMDA2MT48VTAwNzQ+PFUwMDcxPjxVMDA2OT48VTAwNjE+PFUwMDc0PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNzU+PFUwMDcwPjxVMDA3MD48VTAwNjk+PFUwMDc2PjxVMDA2OT48VTAwNkI+IjsvCisgICAgICAgICAgICAiPFUwMDQ5PjxVMDEyMT48VTAwRjE+PFUwMDY5PjxVMDA3Nj48VTAwNjk+PFUwMDZCPiI7LworICAgICAgICAgICAgIjxVMDA0OT48VTAwNzQ+PFUwMDYzPjxVMDA2OD48VTAwNjE+PFUwMDc2PjxVMDA2OT48VTAwNkI+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA2OT48VTAwRjE+PFUwMEYxPjxVMDA2OT48VTAwNzY+PFUwMDY5PjxVMDA2Qj4iOy8KKyAgICAgICAgICAgICI8VTAwNDE+PFUwMDZEPjxVMDA2OT48VTAxMjE+PFUwMDYxPjxVMDA2OT48VTAwNzE+PFUwMDczPjxVMDA2OT48VTAwNzY+PFUwMDY5PjxVMDA2Qj4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDY5PjxVMDA2Qj48VTAwNkI+PFUwMDc1PjxVMDA3Nj48VTAwNjk+PFUwMDZCPiI7LworICAgICAgICAgICAgIjxVMDA0RT48VTAwNjk+PFUwMDcwPjxVMDA3MD48VTAwNjk+PFUwMDc2PjxVMDA2OT48VTAwNkI+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2OT48VTAwNzE+PFUwMDY5PjxVMDBGMT48VTAxMjE+PFUwMDY5PjxVMUUzNz48VTAwNjE+PFUwMDcxPiIKK2RfdF9mbXQgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDcyPiIKK2FtX3BtICAgICAgICI8VTAwNDE+PFUwMDREPiI7IjxVMDA1MD48VTAwNEQ+IgordF9mbXRfYW1wbSAgIjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNzA+IgorRU5EIExDX1RJTUUKKworTENfTUVTU0FHRVMKK3llc3N0ciAgICAgICI8VTAwNjE+PFUwMDYxPiIKK25vc3RyICAgICAgICI8VTAwNzE+PFUwMDYxPjxVMDBGMT48VTAwNjE+PFUwMDYxPiIKK3llc2V4cHIgICAgICI8VTAwNUI+PFUwMDc5PjxVMDA1OT48VTAwNjk+PFUwMDQ5PjxVMDA2MT48VTAwNDE+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAgICAgIjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA3MT48VTAwNTE+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKKyUgRGVmYXVsdCBwYXBlcjogQTQKK0xDX1BBUEVSCitoZWlnaHQgMjk3Cit3aWR0aCAyMTAKK0VORCBMQ19QQVBFUgorCislIE1ldHJpYyBTeXN0ZW0gKElTTyAxMDAwKQorTENfTUVBU1VSRU1FTlQKK21lYXN1cmVtZW50IDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCislIEZJWE1FCitjb3B5ICJlbl9DQSIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKKyUgRklYTUUKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAiPFUwMDQzPjxVMDA0MT4iCitjb3VudHJ5X2FiMyAiPFUwMDQzPjxVMDA0MT48VTAwNEU+IgorY291bnRyeV9udW0gMTI0CitFTkQgTENfQUREUkVTUworCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9pc19JUyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2lzX0lTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZTM5MTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9pc19JUwpAQCAtMCwwICsxLDIyNjYgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworCislIEljZWxhbmRpYyBMYW5ndWFnZSBMb2NhbGUgZm9yIEljZWxhbmQKKyUgU291cmNlOiBTdGFkbGFyYWQgSSdzbGFuZHMKKyUgQWRkcmVzczogS2VsZG5haG9sdC1JVEknCislICAgSVMtMTEyIFJleWtqYXZpJ2ssIEljZWxhbmQKKyUgQ29udGFjdDogVGhvcnZhcmR1ciBLLiBPbGFmc3NvbgorJSBFbWFpbDogdG9iYmlAaXRpLmlzCislIFRlbDogKzM1NCAtIDEgLSA2ODcwMDAKKyUgRmF4OiArMzU0IC0gMSAtIDY4NzQwOQorJSBMYW5ndWFnZTogaXMKKyUgVGVycml0b3J5OiBJUworJSBSZXZpc2lvbjogNC4zCislIERhdGU6IDE5OTYtMTAtMTUKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMuZHMKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiSWNlbGFuZGljIGxvY2FsZSBmb3IgSWNlbGFuZCIKK3NvdXJjZSAgICAgIlN0YWRsYXJhZCBJJ3NsYW5kcyIKK2FkZHJlc3MgICAgIktlbGRuYWhvbHQtSVRJJywgSVMtMTEyIFJleWtqYXZpJ2ssIEljZWxhbmQiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiSWNlbGFuZGljIgordGVycml0b3J5ICAiSWNlbGFuZCIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjkiCislCitjYXRlZ29yeSAgImlzX0lTOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImlzX0lTOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImlzX0lTOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiaXNfSVM6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJpc19JUzoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImlzX0lTOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImlzX0lTOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImlzX0lTOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImlzX0lTOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiaXNfSVM6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJpc19JUzoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKKworJSBCYXNlIGNvbGxhdGlvbiBzY2hlbWU6IDE5OTQtMDMtMjIKKworJSBPcmRlcmluZyBhbGdvcml0aG06CislICAxLiBTcGFjZXMgYW5kIGh5cGhlbiAoYnV0IG5vdCBzb2Z0CislICAgICBoeXBoZW4pIGJlZm9yZSBwdW5jdHVhdGlvbgorJSAgICAgY2hhcmFjdGVycywgcHVuY3R1YXRpb24gY2hhcmFjdGVycworJSAgICAgYmVmb3JlIG51bWJlcnMsCislICAgICBudW1iZXJzIGJlZm9yZSBsZXR0ZXJzLgorJSAgMi4gTGV0dGVycyB3aXRoIGRpYWNyaXRpY2FsIG1hcmtzIGFyZQorJSAgICAgbWVtYmVycyBvZiBlcXVpdmFsZW5jZSBjbGFzc2VzCislICAzLiBBIGRpc3RpbmN0aW9uIGlzIG1hZGUgd2l0aCByZWdhcmRzCislICAgICB0byBjYXNlIGFzIG5vdGVkIGJlbG93LgorJSAgNC4gU3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSBpZ25vcmVkCislICAgICB3aGVuIGNvbXBhcmluZyBsZXR0ZXJzLCBidXQgdGhlbgorJSAgICAgdGhleSBhcmUgY29uc2lkZXJlZAorJSAgNS4gVGhlIGFscGhhYmV0cyBhcmUgc29ydGVkIGluIG9yZGVyCislICAgICBvZiBmaXJzdCBhcHBlYXJhbmNlIGluIElTTyAxMDY0NjoKKyUgICAgIExhdGluLCBHcmVlaywgQ3lyaWxsaWMsIGV0Yy4KKyUKKyUgQWNjb3JkaW5nIHRvIEdyZWVrIHNwZWNpZmljYXRpb25zLAorJSB0aGUgc3RlcHMgMi4gYW5kIDMuIGFib3ZlIGFyZSByZXZlcnNlZAorJSBmb3IgdGhlIEdyZWVrIHNjcmlwdAorCislIGNvbGxhdGluZyBzeW1ib2xzCisKKyUgVGhlIGNvbGxhdGluZyBzeW1ib2wgbmFtaW5nIGlzCislIG1vc3RseSB0YWtlbiBmcm9tIElTTyAxMDY0Ni0xLAorJSBmb3IgZXhhbXBsZSB0aGUgY2FzZSBhbmQgYWNjZW50CislIG5hbWVzIGFyZSBmcm9tIHRoaXMgc3RhbmRhcmQuCisKK2NvbGxhdGluZy1zeW1ib2wgPENBUElUQUw+Citjb2xsYXRpbmctc3ltYm9sIDxDQVBJVEFMLVNNQUxMPgorY29sbGF0aW5nLXN5bWJvbCA8U01BTEwtQ0FQSVRBTD4KK2NvbGxhdGluZy1zeW1ib2wgPFNNQUxMPgorCislIDxDQVBJVEFMLVNNQUxMPiBhbmQgPFNNQUxMLUNBUElUQUw+CislIGFyZSBmb3IgY2FzZXMgbGlrZSBEYW5pc2ggPFUwMDQxPjxVMDA2MT4KKyUgYW5kIFNwYW5pc2ggPFUwMDQzPjxVMDA2OD4gYmVpbmcgdHJlYXRlZAorJSBhcyBvbmUgbGV0dGVyLgorCislIFRoZSA8YTg+IC4uLi4uLiA8ejg+IGNvbGxhdGluZworJSBzeW1ib2xzIGhhdmUgZGVmaW5lZCB3ZWlnaHRzIGFzCislIHRoZSBsYXN0IGNoYXJhY3RlciBpbiBhIGdyb3VwIG9mCislIExhdGluIGxldHRlcnMuIFRoZXkgYXJlIHVzZWQKKyUgdG8gc3BlY2lmeSBkZWx0YXMgYnkgbG9jYWxlcyB1c2luZworJSBhIGxvY2FsZSBhcyB0aGUgZGVmYXVsdCBvcmRlcmluZworJSBhbmQgYnkgInJlb3JkZXItYWZ0ZXIiIHN0YXRlbWVudHMKKyUgc3BlY2lmeWluZyB0aGUgY2hhbmdlZCBwbGFjZW1lbnQKKyUgaW4gYW4gb3JkZXJpbmcgb2YgYSBjaGFyYWN0ZXIuCisKK2NvbGxhdGluZy1zeW1ib2wgPGE4PgorY29sbGF0aW5nLXN5bWJvbCA8Yjg+Citjb2xsYXRpbmctc3ltYm9sIDxjOD4KK2NvbGxhdGluZy1zeW1ib2wgPGQ4PgorY29sbGF0aW5nLXN5bWJvbCA8ZTg+Citjb2xsYXRpbmctc3ltYm9sIDxmOD4KK2NvbGxhdGluZy1zeW1ib2wgPGc4PgorY29sbGF0aW5nLXN5bWJvbCA8aDg+Citjb2xsYXRpbmctc3ltYm9sIDxpOD4KK2NvbGxhdGluZy1zeW1ib2wgPGo4PgorY29sbGF0aW5nLXN5bWJvbCA8azg+Citjb2xsYXRpbmctc3ltYm9sIDxsOD4KK2NvbGxhdGluZy1zeW1ib2wgPG04PgorY29sbGF0aW5nLXN5bWJvbCA8bjg+Citjb2xsYXRpbmctc3ltYm9sIDxvOD4KK2NvbGxhdGluZy1zeW1ib2wgPHA4PgorY29sbGF0aW5nLXN5bWJvbCA8cTg+Citjb2xsYXRpbmctc3ltYm9sIDxyOD4KK2NvbGxhdGluZy1zeW1ib2wgPHM4PgorY29sbGF0aW5nLXN5bWJvbCA8dDg+Citjb2xsYXRpbmctc3ltYm9sIDx1OD4KK2NvbGxhdGluZy1zeW1ib2wgPHY4PgorY29sbGF0aW5nLXN5bWJvbCA8dzg+Citjb2xsYXRpbmctc3ltYm9sIDx4OD4KK2NvbGxhdGluZy1zeW1ib2wgPHk4PgorY29sbGF0aW5nLXN5bWJvbCA8ejg+CisKK2NvbGxhdGluZy1zeW1ib2wgPE5PTkU+Citjb2xsYXRpbmctc3ltYm9sIDxBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPEFDVVRFK0RPVD4KK2NvbGxhdGluZy1zeW1ib2wgPEdSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8RE9VQkxFLUdSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkU+Citjb2xsYXRpbmctc3ltYm9sIDxCUkVWRStBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFK0dSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkUrTUFDUk9OPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkUrSE9PSz4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFK1RJTERFPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkUrRE9ULUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkUtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxJTlZFUlRFRC1CUkVWRT4KK2NvbGxhdGluZy1zeW1ib2wgPENJUkNVTUZMRVg+Citjb2xsYXRpbmctc3ltYm9sIDxDSVJDVU1GTEVYK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8Q0lSQ1VNRkxFWCtHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPENJUkNVTUZMRVgrSE9PSz4KK2NvbGxhdGluZy1zeW1ib2wgPENJUkNVTUZMRVgrVElMREU+Citjb2xsYXRpbmctc3ltYm9sIDxDSVJDVU1GTEVYK0RPVC1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPENBUk9OPgorY29sbGF0aW5nLXN5bWJvbCA8Q0FST04rRElBRVJFU0lTPgorY29sbGF0aW5nLXN5bWJvbCA8Q0FST04rRE9UPgorY29sbGF0aW5nLXN5bWJvbCA8UklORz4KK2NvbGxhdGluZy1zeW1ib2wgPFJJTkcrQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxSSU5HLUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8RElBRVJFU0lTPgorY29sbGF0aW5nLXN5bWJvbCA8RElBRVJFU0lTK01BQ1JPTj4KK2NvbGxhdGluZy1zeW1ib2wgPERJQUVSRVNJUytBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPERJQUVSRVNJUytHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPERJQUVSRVNJUytDQVJPTj4KK2NvbGxhdGluZy1zeW1ib2wgPERPVUJMRS1BQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPEhPT0s+Citjb2xsYXRpbmctc3ltYm9sIDxUSUxERT4KK2NvbGxhdGluZy1zeW1ib2wgPFRJTERFK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8VElMREUrRElBRVJFU0lTPgorY29sbGF0aW5nLXN5bWJvbCA8VElMREUtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxET1Q+Citjb2xsYXRpbmctc3ltYm9sIDxET1QtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxET1QrRE9ULUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8U1RST0tFPgorY29sbGF0aW5nLXN5bWJvbCA8U1RST0tFK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8Q0VESUxMQT4KK2NvbGxhdGluZy1zeW1ib2wgPENFRElMTEErQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxDRURJTExBK0dSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8Q0VESUxMQStCUkVWRT4KK2NvbGxhdGluZy1zeW1ib2wgPE9HT05FSz4KK2NvbGxhdGluZy1zeW1ib2wgPE9HT05FSytNQUNST04+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04rQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04rR1JBVkU+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04rRElBRVJFU0lTPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0RJQUVSRVNJUy1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPE1BQ1JPTitET1Q+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04rRE9ULUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0NJUkNVTUZMRVg+Citjb2xsYXRpbmctc3ltYm9sIDxMSU5FLUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8SE9STj4KK2NvbGxhdGluZy1zeW1ib2wgPEhPUk4rQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxIT1JOK0dSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8SE9STitIT09LPgorY29sbGF0aW5nLXN5bWJvbCA8SE9STitUSUxERT4KK2NvbGxhdGluZy1zeW1ib2wgPEhPUk4rRE9ULUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8UFJFQ0VERUQtQlktQVBPU1RST1BIRT4KK2NvbGxhdGluZy1zeW1ib2wgPEdSRUVLPgorY29sbGF0aW5nLXN5bWJvbCA8VE9OT1M+Citjb2xsYXRpbmctc3ltYm9sIDxESUFMWVRJQ0E+Citjb2xsYXRpbmctc3ltYm9sIDxESUFMWVRJQ0ErVE9OT1M+Citjb2xsYXRpbmctc3ltYm9sIDxDWVJJTExJQz4KK2NvbGxhdGluZy1zeW1ib2wgPEhJUkFHQU5BPgorY29sbGF0aW5nLXN5bWJvbCA8S0FUQUtBTkE+Citjb2xsYXRpbmctc3ltYm9sIDxTUEVDSUFMPgorCislIGxldHRlcjthY2NlbnQ7Y2FzZTtzcGVjaWFscworCitvcmRlcl9zdGFydCBmb3J3YXJkO2ZvcndhcmQvCisgICAgICAgICAgICA7Zm9yd2FyZDtwb3NpdGlvbgorCislIDxDQVBJVEFMPiBvciA8U01BTEw+IGxldHRlcnMgZmlyc3Q6CisKKzxTTUFMTD4KKzxTTUFMTC1DQVBJVEFMPgorPENBUElUQUwtU01BTEw+Cis8Q0FQSVRBTD4KKworJSBBY2NlbnRzOgorCis8Tk9ORT4KKzxBQ1VURT4KKzxBQ1VURStET1Q+Cis8R1JBVkU+Cis8RE9VQkxFLUdSQVZFPgorPEJSRVZFPgorPEJSRVZFK0FDVVRFPgorPEJSRVZFK0dSQVZFPgorPEJSRVZFK01BQ1JPTj4KKzxCUkVWRStIT09LPgorPEJSRVZFK1RJTERFPgorPEJSRVZFK0RPVC1CRUxPVz4KKzxCUkVWRS1CRUxPVz4KKzxJTlZFUlRFRC1CUkVWRT4KKzxDSVJDVU1GTEVYPgorPENJUkNVTUZMRVgrQUNVVEU+Cis8Q0lSQ1VNRkxFWCtHUkFWRT4KKzxDSVJDVU1GTEVYK0hPT0s+Cis8Q0lSQ1VNRkxFWCtUSUxERT4KKzxDSVJDVU1GTEVYK0RPVC1CRUxPVz4KKzxDQVJPTj4KKzxDQVJPTitESUFFUkVTSVM+Cis8Q0FST04rRE9UPgorPFJJTkc+Cis8UklORytBQ1VURT4KKzxSSU5HLUJFTE9XPgorPERJQUVSRVNJUz4KKzxESUFFUkVTSVMrTUFDUk9OPgorPERJQUVSRVNJUytBQ1VURT4KKzxESUFFUkVTSVMrR1JBVkU+Cis8RElBRVJFU0lTK0NBUk9OPgorPERPVUJMRS1BQ1VURT4KKzxIT09LPgorPFRJTERFPgorPFRJTERFK0FDVVRFPgorPFRJTERFK0RJQUVSRVNJUz4KKzxUSUxERS1CRUxPVz4KKzxET1Q+Cis8RE9ULUJFTE9XPgorPERPVCtET1QtQkVMT1c+Cis8U1RST0tFPgorPFNUUk9LRStBQ1VURT4KKzxDRURJTExBPgorPENFRElMTEErQUNVVEU+Cis8Q0VESUxMQStHUkFWRT4KKzxDRURJTExBK0JSRVZFPgorPE9HT05FSz4KKzxPR09ORUsrTUFDUk9OPgorPE1BQ1JPTj4KKzxNQUNST04rQUNVVEU+Cis8TUFDUk9OK0dSQVZFPgorPE1BQ1JPTitESUFFUkVTSVM+Cis8TUFDUk9OK0RJQUVSRVNJUy1CRUxPVz4KKzxNQUNST04rRE9UPgorPE1BQ1JPTitET1QtQkVMT1c+Cis8TUFDUk9OK0NJUkNVTUZMRVg+Cis8TElORS1CRUxPVz4KKzxIT1JOPgorPEhPUk4rQUNVVEU+Cis8SE9STitHUkFWRT4KKzxIT1JOK0hPT0s+Cis8SE9STitUSUxERT4KKzxIT1JOK0RPVC1CRUxPVz4KKzxQUkVDRURFRC1CWS1BUE9TVFJPUEhFPgorPEdSRUVLPgorPFRPTk9TPgorPERJQUxZVElDQT4KKzxESUFMWVRJQ0ErVE9OT1M+Cis8Q1lSSUxMSUM+Cis8SElSQUdBTkE+Cis8S0FUQUtBTkE+Cis8U1BFQ0lBTD4KKworPFUwMEEwPgk8VTAwQTA+OzxVMDBBMD47PFUwMEEwPjtJR05PUkUKKzxVMDAyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDIwPgorPFUwMDA5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDk+Cis8VTAwMEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwQj4KKzxVMDAwRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBEPgorPFUwMDBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMEE+Cis8VTAwMEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwQz4KKzxVMDA1Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDVGPgorPFUwMEFGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQUY+Cis8VTAwQUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBRD4KKzxVMDAyRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDJEPgorPFUwMDJDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMkM+Cis8VTAwM0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAzQj4KKzxVMDAzQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDNBPgorPFUwMDIxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjE+Cis8VTAwQTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBMT4KKzxVMDAzRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDNGPgorPFUwMEJGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQkY+Cis8VTAwMkY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyRj4KKzxVMDAyRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDJFPgorPFUwMEI0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjQ+Cis8VTAwNjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA2MD4KKzxVMDA1RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDVFPgorPFUwMEE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTg+Cis8VTAwN0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA3RT4KKzxVMDBCNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEI3PgorPFUwMEI4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjg+Cis8VTAwMjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyNz4KKzxVMjAxOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDE4PgorPFUyMDE5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTk+Cis8VTAwMjI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyMj4KKzxVMjAxQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDFDPgorPFUyMDFEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMUQ+Cis8VTAwQUI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBQj4KKzxVMDBCQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEJCPgorPFUwMDI4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjg+Cis8VTIwN0Q+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA3RD4KKzxVMDAyOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDI5PgorPFUyMDdFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwN0U+Cis8VTAwNUI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA1Qj4KKzxVMDA1RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDVEPgorPFUwMDdCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwN0I+Cis8VTAwN0Q+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA3RD4KKzxVMDBBNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEE3PgorPFUwMEI2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjY+Cis8VTAwQTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBOT4KKzxVMDBBRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEFFPgorPFUwMDQwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNDA+Cis8VTAwQTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBND4KKzxVMDBBMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEEyPgorPFUwMDI0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjQ+Cis8VTAwQTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBMz4KKzxVMDBBNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEE1PgorPFUwMDJBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMkE+Cis8VTAwNUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA1Qz4KKzxVMDAyNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDI2PgorPFUwMDIzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjM+Cis8VTAwMjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyNT4KKzxVMjA3Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDdCPgorPFUwMDJCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMkI+Cis8VTIwN0E+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA3QT4KKzxVMDBCMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEIxPgorPFUwMEY3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwRjc+Cis8VTAwRDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBENz4KKzxVMjI2MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjYwPgorPFUwMDNDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwM0M+Cis8VTIyNjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2ND4KKzxVMDAzRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDNEPgorPFUyMjY1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNjU+Cis8VTAwM0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAzRT4KKzxVMDBBQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEFDPgorPFUwMDdDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwN0M+Cis8VTAwQTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBNj4KKzxVMDBCMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEIwPgorPFUwMEI1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjU+Cis8VTAyQzc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDJDNz4KKzxVMDJEOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkQ4PgorPFUwMkQ5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAyRDk+Cis8VTAyREE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDJEQT4KKzxVMDJEQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkRCPgorPFUwMkRDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAyREM+Cis8VTAyREQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDJERD4KKzxVMDM3ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzc0PgorPFUwMzc1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzNzU+Cis8VTAzN0E+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDM3QT4KKzxVMDM3RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzdFPgorPFUwMzg0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzODQ+Cis8VTAzODU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDM4NT4KKzxVMDM4Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzg3PgorPFUwM0QwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzRDA+Cis8VTFGQkY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZCRj4KKzxVMUZDMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkMwPgorPFUxRkMxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGQzE+Cis8VTFGQ0Q+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZDRD4KKzxVMUZDRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkNFPgorPFUxRkNGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGQ0Y+Cis8VTFGREQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZERD4KKzxVMUZERT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkRFPgorPFUxRkRGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGREY+Cis8VTFGRUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZFRD4KKzxVMUZFRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkVGPgorPFUxRkZFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGRkU+Cis8VTIwMDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwMj4KKzxVMjAwMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDAzPgorPFUyMDA0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMDQ+Cis8VTIwMDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwNT4KKzxVMjAwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDA2PgorPFUyMDBFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMEU+Cis8VTIwMEY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwRj4KKzxVMjAwOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDA5PgorPFUyMDBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMEE+Cis8VTIwMTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxMD4KKzxVMjAxMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDEzPgorPFUyMDE0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTQ+Cis8VTIwMTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxNT4KKzxVMjAxNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDE2PgorPFUyMDE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTc+Cis8VTIwMUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxQT4KKzxVMjAxQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDFCPgorPFUyMDFFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMUU+Cis8VTIwMUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxRj4KKzxVMjAyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDIwPgorPFUyMDIxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMjE+Cis8VTIwMjI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAyMj4KKzxVMjAyNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDI1PgorPFUyMDI2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMjY+Cis8VTIwMzA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzMD4KKzxVMjAzMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDMyPgorPFUyMDMzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzM+Cis8VTIwMzQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzND4KKzxVMjAzNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDM1PgorPFUyMDM2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzY+Cis8VTIwMzc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzNz4KKzxVMjAzOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDM4PgorPFUyMDM5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzk+Cis8VTIwM0E+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzQT4KKzxVMjAzQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDNCPgorPFUyMDNDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwM0M+Cis8VTIwM0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzRT4KKzxVMjA0ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDQ0PgorPFUyMDdDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwN0M+Cis8VTIwODA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4MD4KKzxVMjA4MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDgxPgorPFUyMDgyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODI+Cis8VTIwODM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4Mz4KKzxVMjA4ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDg0PgorPFUyMDg1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODU+Cis8VTIwODY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4Nj4KKzxVMjA4Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDg3PgorPFUyMDg4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODg+Cis8VTIwODk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4OT4KKzxVMjA4QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDhBPgorPFUyMDhCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwOEI+Cis8VTIwOEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4Qz4KKzxVMjA4RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDhEPgorPFUyMDhFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwOEU+Cis8VTIwQTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjBBMz4KKzxVMjBBND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMEE0PgorPFUyMEE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwQTc+Cis8VTIwQTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjBBOT4KKzxVMjEwMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTAzPgorPFUyMTA1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMDU+Cis8VTIxMDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjEwOT4KKzxVMjExNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTE2PgorPFUyMTE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMTc+Cis8VTIxMUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjExRT4KKzxVMjEyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTIwPgorPFUyMTIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMjI+Cis8VTIxMjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjEyNj4KKzxVMjEyQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTJCPgorPFUyMTUzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTM+Cis8VTIxNTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1ND4KKzxVMjE1NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTU1PgorPFUyMTU2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTY+Cis8VTIxNTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1Nz4KKzxVMjE1OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTU4PgorPFUyMTU5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTk+Cis8VTIxNUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1QT4KKzxVMjE2MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTYwPgorPFUyMTYxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjE+Cis8VTIxNjI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2Mj4KKzxVMjE2Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTYzPgorPFUyMTY0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjQ+Cis8VTIxNjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2NT4KKzxVMjE2Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTY2PgorPFUyMTY3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjc+Cis8VTIxNjg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2OD4KKzxVMjE2OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTY5PgorPFUyMTZBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNkE+Cis8VTIxNkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2Qj4KKzxVMjE2Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTZDPgorPFUyMTZEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNkQ+Cis8VTIxNkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2RT4KKzxVMjE2Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTZGPgorPFUyMTcwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzA+Cis8VTIxNzE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3MT4KKzxVMjE3Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTcyPgorPFUyMTczPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzM+Cis8VTIxNzQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3ND4KKzxVMjE3NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTc1PgorPFUyMTc2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzY+Cis8VTIxNzc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3Nz4KKzxVMjE3OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTc4PgorPFUyMTc5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzk+Cis8VTIxN0E+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3QT4KKzxVMjE3Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTdCPgorPFUyMTdDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxN0M+Cis8VTIxN0Q+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3RD4KKzxVMjE3RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTdFPgorPFUyMTdGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxN0Y+Cis8VTIxODA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE4MD4KKzxVMjE4MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTgxPgorPFUyMTgyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxODI+Cis8VTIxOTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5MT4KKzxVMjE5Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTkzPgorPFUyMTk0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxOTQ+Cis8VTIxOTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5NT4KKzxVMjE5Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTk2PgorPFUyMTk3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxOTc+Cis8VTIxOTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5OD4KKzxVMjE5OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTk5PgorPFUyMUE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxQTg+Cis8VTIxQzA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjFDMD4KKzxVMjFEMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMUQwPgorPFUyMUQyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxRDI+Cis8VTIxRDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjFEND4KKzxVMjIwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjAwPgorPFUyMjAyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMDI+Cis8VTIyMDM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwMz4KKzxVMjIwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjA1PgorPFUyMjA2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMDY+Cis8VTIyMDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwNz4KKzxVMjIwOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjA4PgorPFUyMjBCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMEI+Cis8VTIyMEY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwRj4KKzxVMjIxMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjExPgorPFUyMjEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMTI+Cis8VTIyMTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxMz4KKzxVMjIxND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjE0PgorPFUyMjE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMTc+Cis8VTIyMTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxOD4KKzxVMjIxOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjE5PgorPFUyMjFBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMUE+Cis8VTIyMUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxRD4KKzxVMjIxRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjFFPgorPFUyMjFGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMUY+Cis8VTIyMjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyMD4KKzxVMjIyNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjI1PgorPFUyMjI3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMjc+Cis8VTIyMjg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyOD4KKzxVMjIyOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjI5PgorPFUyMjJBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMkE+Cis8VTIyMkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyQj4KKzxVMjIyQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjJDPgorPFUyMjJFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMkU+Cis8VTIyMzQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIzND4KKzxVMjIzNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjM1PgorPFUyMjM2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMzY+Cis8VTIyMzc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIzNz4KKzxVMjIzQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjNDPgorPFUyMjNFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyM0U+Cis8VTIyNDM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI0Mz4KKzxVMjI0NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjQ1PgorPFUyMjQ4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNDg+Cis8VTIyNEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI0Qz4KKzxVMjI1Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjUzPgorPFUyMjYxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNjE+Cis8VTIyNkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2QT4KKzxVMjI2Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjZCPgorPFUyMjZFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNkU+Cis8VTIyNkY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2Rj4KKzxVMjI4Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjgyPgorPFUyMjgzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyODM+Cis8VTIyODY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI4Nj4KKzxVMjI4Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjg3PgorPFUyMjk5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyOTk+Cis8VTIyOUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI5QT4KKzxVMjJBNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMkE1PgorPFUyMkM1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyQzU+Cis8VTIyRUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjJFRT4KKzxVMjMwMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzAyPgorPFUyMzA4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMDg+Cis8VTIzMDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMwOT4KKzxVMjMwQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzBBPgorPFUyMzBCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMEI+Cis8VTIzMTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMxMD4KKzxVMjMxMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzEyPgorPFUyMzE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMTU+Cis8VTIzMTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMxOD4KKzxVMjMyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzIwPgorPFUyMzIxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMjE+Cis8VTI0MjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQyMz4KKzxVMjQ0MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQwPgorPFUyNDQxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDE+Cis8VTI0NDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ0Mj4KKzxVMjQ0Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQzPgorPFUyNDQ2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDY+Cis8VTI0NDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ0Nz4KKzxVMjQ0OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQ4PgorPFUyNDQ5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDk+Cis8VTI0NjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2MD4KKzxVMjQ2MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDYxPgorPFUyNDYyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NjI+Cis8VTI0NjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Mz4KKzxVMjQ2ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDY0PgorPFUyNDY1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NjU+Cis8VTI0NjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Nj4KKzxVMjQ2Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDY3PgorPFUyNDY4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0Njg+Cis8VTI0Njk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2OT4KKzxVMjQ2QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDZBPgorPFUyNDZCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NkI+Cis8VTI0NkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Qz4KKzxVMjQ2RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDZEPgorPFUyNDZFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NkU+Cis8VTI0NkY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Rj4KKzxVMjQ3MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDcwPgorPFUyNDcxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NzE+Cis8VTI0NzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3Mj4KKzxVMjQ3Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDczPgorPFUyNDc0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NzQ+Cis8VTI0NzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3NT4KKzxVMjQ3Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDc2PgorPFUyNDc3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0Nzc+Cis8VTI0Nzg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3OD4KKzxVMjQ3OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDc5PgorPFUyNDdBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0N0E+Cis8VTI0N0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3Qj4KKzxVMjQ3Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDdDPgorPFUyNDdEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0N0Q+Cis8VTI0N0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3RT4KKzxVMjQ3Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDdGPgorPFUyNDgwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODA+Cis8VTI0ODE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4MT4KKzxVMjQ4Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDgyPgorPFUyNDgzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODM+Cis8VTI0ODQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4ND4KKzxVMjQ4NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDg1PgorPFUyNDg2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODY+Cis8VTI0ODc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4Nz4KKzxVMjQ4OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDg4PgorPFUyNDg5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODk+Cis8VTI0OEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4QT4KKzxVMjQ4Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDhCPgorPFUyNDhDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OEM+Cis8VTI0OEQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4RD4KKzxVMjQ4RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDhFPgorPFUyNDhGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OEY+Cis8VTI0OTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5MD4KKzxVMjQ5MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDkxPgorPFUyNDkyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTI+Cis8VTI0OTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5Mz4KKzxVMjQ5ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDk0PgorPFUyNDk1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTU+Cis8VTI0OTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5Nj4KKzxVMjQ5Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDk3PgorPFUyNDk4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTg+Cis8VTI0OTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5OT4KKzxVMjQ5QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDlBPgorPFUyNDlCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OUI+Cis8VTI0RUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjRFQT4KKzxVMjUwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTAwPgorPFUyNTAxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MDE+Cis8VTI1MDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwMj4KKzxVMjUwMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTAzPgorPFUyNTA0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MDQ+Cis8VTI1MDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwNT4KKzxVMjUwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTA2PgorPFUyNTA3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MDc+Cis8VTI1MDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwOD4KKzxVMjUwOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTA5PgorPFUyNTBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MEE+Cis8VTI1MEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwQj4KKzxVMjUwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTBDPgorPFUyNTBEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MEQ+Cis8VTI1MEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwRT4KKzxVMjUwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTBGPgorPFUyNTEwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MTA+Cis8VTI1MTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUxMT4KKzxVMjUxMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTEyPgorPFUyNTEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MTM+Cis8VTI1MTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUxND4KKzxVMjUxNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTE1PgorPFUyNTE2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MTY+Cis8VTI1MTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUxNz4KKzxVMjUxOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTE4PgorPFUyNTE5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MTk+Cis8VTI1MUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUxQT4KKzxVMjUxQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTFCPgorPFUyNTFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MUM+Cis8VTI1MUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUxRD4KKzxVMjUxRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTFFPgorPFUyNTFGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MUY+Cis8VTI1MjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyMD4KKzxVMjUyMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTIxPgorPFUyNTIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MjI+Cis8VTI1MjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyMz4KKzxVMjUyND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTI0PgorPFUyNTI1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MjU+Cis8VTI1MjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyNj4KKzxVMjUyNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTI3PgorPFUyNTI4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Mjg+Cis8VTI1Mjk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyOT4KKzxVMjUyQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTJBPgorPFUyNTJCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MkI+Cis8VTI1MkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyQz4KKzxVMjUyRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTJEPgorPFUyNTJFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MkU+Cis8VTI1MkY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyRj4KKzxVMjUzMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTMwPgorPFUyNTMxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MzE+Cis8VTI1MzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzMj4KKzxVMjUzMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTMzPgorPFUyNTM0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MzQ+Cis8VTI1MzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzNT4KKzxVMjUzNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTM2PgorPFUyNTM3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Mzc+Cis8VTI1Mzg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzOD4KKzxVMjUzOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTM5PgorPFUyNTNBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1M0E+Cis8VTI1M0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzQj4KKzxVMjUzQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTNDPgorPFUyNTNEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1M0Q+Cis8VTI1M0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzRT4KKzxVMjUzRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTNGPgorPFUyNTQwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDA+Cis8VTI1NDE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0MT4KKzxVMjU0Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTQyPgorPFUyNTQzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDM+Cis8VTI1NDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0ND4KKzxVMjU0NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTQ1PgorPFUyNTQ2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDY+Cis8VTI1NDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0Nz4KKzxVMjU0OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTQ4PgorPFUyNTQ5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDk+Cis8VTI1NEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0QT4KKzxVMjU0Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTRCPgorPFUyNTUwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTA+Cis8VTI1NTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1MT4KKzxVMjU1Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTUyPgorPFUyNTUzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTM+Cis8VTI1NTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1ND4KKzxVMjU1NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTU1PgorPFUyNTU2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTY+Cis8VTI1NTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Nz4KKzxVMjU1OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTU4PgorPFUyNTU5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTk+Cis8VTI1NUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1QT4KKzxVMjU1Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTVCPgorPFUyNTVDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NUM+Cis8VTI1NUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1RD4KKzxVMjU1RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTVFPgorPFUyNTVGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NUY+Cis8VTI1NjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2MD4KKzxVMjU2MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTYxPgorPFUyNTYyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjI+Cis8VTI1NjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2Mz4KKzxVMjU2ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTY0PgorPFUyNTY1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjU+Cis8VTI1NjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2Nj4KKzxVMjU2Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTY3PgorPFUyNTY4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Njg+Cis8VTI1Njk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2OT4KKzxVMjU2QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTZBPgorPFUyNTZCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NkI+Cis8VTI1NkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2Qz4KKzxVMjU3MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTcxPgorPFUyNTcyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NzI+Cis8VTI1ODA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU4MD4KKzxVMjU4ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTg0PgorPFUyNTg4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1ODg+Cis8VTI1OEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU4Qz4KKzxVMjU5MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTkwPgorPFUyNTkxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1OTE+Cis8VTI1OTI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU5Mj4KKzxVMjU5Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTkzPgorPFUyNUEwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTA+Cis8VTI1QTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBMT4KKzxVMjVBMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUEyPgorPFUyNUEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTM+Cis8VTI1QTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBND4KKzxVMjVBNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUE1PgorPFUyNUE2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTY+Cis8VTI1QTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBNz4KKzxVMjVBOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUE4PgorPFUyNUE5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTk+Cis8VTI1QUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBQT4KKzxVMjVBQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUFDPgorPFUyNUFEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QUQ+Cis8VTI1QjI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVCMj4KKzxVMjVCMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUIzPgorPFUyNUI3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Qjc+Cis8VTI1QkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVCQT4KKzxVMjVCQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUJDPgorPFUyNUJEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QkQ+Cis8VTI1QzE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVDMT4KKzxVMjVDND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUM0PgorPFUyNUM2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QzY+Cis8VTI1Qzc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVDNz4KKzxVMjVDQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUNBPgorPFUyNUNCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Q0I+Cis8VTI1Q0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVDRT4KKzxVMjVDRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUNGPgorPFUyNUQwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1RDA+Cis8VTI1RDE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVEMT4KKzxVMjVEOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUQ4PgorPFUyNUQ5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1RDk+Cis8VTI1RTI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVFMj4KKzxVMjVFMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUUzPgorPFUyNUVGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1RUY+Cis8VTI2MDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYwNT4KKzxVMjYwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjA2PgorPFUyNjBFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2MEU+Cis8VTI2MEY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYwRj4KKzxVMjYxQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjFDPgorPFUyNjFFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2MUU+Cis8VTI2M0E+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYzQT4KKzxVMjYzQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjNCPgorPFUyNjNDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2M0M+Cis8VTI2NDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY0MD4KKzxVMjY0Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjQyPgorPFUyNjYwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NjA+Cis8VTI2NjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2MT4KKzxVMjY2Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjYyPgorPFUyNjYzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NjM+Cis8VTI2NjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2ND4KKzxVMjY2NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjY1PgorPFUyNjY2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NjY+Cis8VTI2Njc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2Nz4KKzxVMjY2OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjY5PgorPFUyNjZBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NkE+Cis8VTI2NkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2Qj4KKzxVMjY2Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjZDPgorPFUyNjZEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NkQ+Cis8VTI2NkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2RT4KKzxVMjY2Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjZGPgorPFUyNzEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI3MTM+Cis8VTI3MTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjcxNz4KKzxVMjcyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNzIwPgorPFUzMDAwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMDA+Cis8VTMwMDE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwMT4KKzxVMzAwMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDAyPgorPFUzMDAzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMDM+Cis8VTMwMDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwND4KKzxVMzAwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDA1PgorPFUzMDA2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMDY+Cis8VTMwMDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwNz4KKzxVMzAwQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDBBPgorPFUzMDBCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMEI+Cis8VTMwMEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwQz4KKzxVMzAwRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDBEPgorPFUzMDBFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMEU+Cis8VTMwMEY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwRj4KKzxVMzAxMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDEwPgorPFUzMDExPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTE+Cis8VTMwMTI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxMj4KKzxVMzAxMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDEzPgorPFUzMDE0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTQ+Cis8VTMwMTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxNT4KKzxVMzAxNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDE2PgorPFUzMDE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTc+Cis8VTMwMUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxQz4KKzxVMzAyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDIwPgorPFUzMDlCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwOUI+Cis8VTMwOUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzA5Qz4KKzxVMzA5RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDlEPgorPFUzMDlFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwOUU+Cis8VTMwRkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzBGQj4KKzxVMzBGQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMEZDPgorPFUzMEZEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwRkQ+Cis8VTMwRkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzBGRT4KKzxVMzIxQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjFDPgorPFUzMjIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjA+Cis8VTMyMjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyMT4KKzxVMzIyMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjIyPgorPFUzMjIzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjM+Cis8VTMyMjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyND4KKzxVMzIyNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjI1PgorPFUzMjI2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjY+Cis8VTMyMjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyNz4KKzxVMzIyOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjI4PgorPFUzMjI5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjk+Cis8VTMyN0Y+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzI3Rj4KKzxVMzNDMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzM0MyPgorPFUzM0Q4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMzRDg+Cis8VTAwMDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwMD4KKzxVMDAwMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDAxPgorPFUwMDAyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDI+Cis8VTAwMDM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwMz4KKzxVMDAwND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA0PgorPFUwMDA1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDU+Cis8VTAwMDY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwNj4KKzxVMDAwNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA3PgorPFUwMDA4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDg+Cis8VTAwMEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwRT4KKzxVMDAwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBGPgorPFUwMDEwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTA+Cis8VTAwMTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxMT4KKzxVMDAxMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDEyPgorPFUwMDEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTM+Cis8VTAwMTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxND4KKzxVMDAxNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE1PgorPFUwMDE2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTY+Cis8VTAwMTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxNz4KKzxVMDAxOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE4PgorPFUwMDE5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTk+Cis8VTAwMUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxQT4KKzxVMDAxQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFCPgorPFUwMDFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMUM+Cis8VTAwMUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxRD4KKzxVMDAxRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFFPgorPFUwMDFGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMUY+Cis8VTAwN0Y+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA3Rj4KKzxVMDA4MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDgwPgorPFUwMDgxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODE+Cis8VTAwODI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4Mj4KKzxVMDA4Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDgzPgorPFUwMDg0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODQ+Cis8VTAwODU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4NT4KKzxVMDA4Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDg2PgorPFUwMDg3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODc+Cis8VTAwODg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4OD4KKzxVMDA4OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDg5PgorPFUwMDhBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOEE+Cis8VTAwOEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4Qj4KKzxVMDA4Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDhDPgorPFUwMDhEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOEQ+Cis8VTAwOEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4RT4KKzxVMDA4Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDhGPgorPFUwMDkwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTA+Cis8VTAwOTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5MT4KKzxVMDA5Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDkyPgorPFUwMDkzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTM+Cis8VTAwOTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5ND4KKzxVMDA5NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDk1PgorPFUwMDk2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTY+Cis8VTAwOTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Nz4KKzxVMDA5OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDk4PgorPFUwMDk5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTk+Cis8VTAwOUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5QT4KKzxVMDA5Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDlCPgorPFUwMDlDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOUM+Cis8VTAwOUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5RD4KKzxVMDA5RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDlFPgorPFUwMDlGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOUY+Cis8VUUwMDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwMD4KKzxVRTAwMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDAxPgorPFVFMDAyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDI+Cis8VTAzMDE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDMwMT4KKzxVRTAwND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDA0PgorPFVFMDA1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDU+Cis8VUUwMDY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwNj4KKzxVRTAwNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDA3PgorPFVFMDA4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDg+Cis8VUUwMDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwOT4KKzxVRTAwQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDBBPgorPFVFMDBCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMEI+Cis8VUUwMEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwQz4KKzxVRTAwRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDBEPgorPFVFMDBFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMEU+Cis8VUUwMEY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwRj4KKzxVRTAxMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDExPgorPFVFMDEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMTI+Cis8VUUwMTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxMz4KKzxVRTAxND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDE0PgorPFVFMDE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMTU+Cis8VUUwMTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxNz4KKzxVRTAxOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDE4PgorPFVFMDE5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMTk+CitVTkRFRklORUQJSUdOT1JFO0lHTk9SRTtJR05PUkUKKworPFUwMDMwPgk8VTAwMzA+OzxVMDAzMD47SUdOT1JFO0lHTk9SRQorPFUyMDcwPgk8VTAwMzA+OzxVMjA3MD47SUdOT1JFO0lHTk9SRQorPFUyMTVCPgk8VTAwMzA+OzxVMjE1Qj47SUdOT1JFO0lHTk9SRQorPFUwMEJDPgk8VTAwMzA+OzxVMDBCQz47SUdOT1JFO0lHTk9SRQorPFUyMTVDPgk8VTAwMzA+OzxVMjE1Qz47SUdOT1JFO0lHTk9SRQorPFUwMEJEPgk8VTAwMzA+OzxVMDBCRD47SUdOT1JFO0lHTk9SRQorPFUyMTVEPgk8VTAwMzA+OzxVMjE1RD47SUdOT1JFO0lHTk9SRQorPFUwMEJFPgk8VTAwMzA+OzxVMDBCRT47SUdOT1JFO0lHTk9SRQorPFUyMTVFPgk8VTAwMzA+OzxVMjE1RT47SUdOT1JFO0lHTk9SRQorPFUwMDMxPgk8VTAwMzE+OzxVMDAzMT47SUdOT1JFO0lHTk9SRQorPFUwMDMyPgk8VTAwMzI+OzxVMDAzMj47SUdOT1JFO0lHTk9SRQorPFUwMDMzPgk8VTAwMzM+OzxVMDAzMz47SUdOT1JFO0lHTk9SRQorPFUwMDM0Pgk8VTAwMzQ+OzxVMDAzND47SUdOT1JFO0lHTk9SRQorPFUwMDM1Pgk8VTAwMzU+OzxVMDAzNT47SUdOT1JFO0lHTk9SRQorPFUwMDM2Pgk8VTAwMzY+OzxVMDAzNj47SUdOT1JFO0lHTk9SRQorPFUwMDM3Pgk8VTAwMzc+OzxVMDAzNz47SUdOT1JFO0lHTk9SRQorPFUwMDM4Pgk8VTAwMzg+OzxVMDAzOD47SUdOT1JFO0lHTk9SRQorPFUwMDM5Pgk8VTAwMzk+OzxVMDAzOT47SUdOT1JFO0lHTk9SRQorPFUwMEI5Pgk8VTAwMzE+OzxVMDBCOT47SUdOT1JFO0lHTk9SRQorPFUwMEIyPgk8VTAwMzI+OzxVMDBCMj47SUdOT1JFO0lHTk9SRQorPFUwMEIzPgk8VTAwMzM+OzxVMDBCMz47SUdOT1JFO0lHTk9SRQorPFUyMDc0Pgk8VTAwMzQ+OzxVMjA3ND47SUdOT1JFO0lHTk9SRQorPFUyMDc1Pgk8VTAwMzU+OzxVMjA3NT47SUdOT1JFO0lHTk9SRQorPFUyMDc2Pgk8VTAwMzY+OzxVMjA3Nj47SUdOT1JFO0lHTk9SRQorPFUyMDc3Pgk8VTAwMzc+OzxVMjA3Nz47SUdOT1JFO0lHTk9SRQorPFUyMDc4Pgk8VTAwMzg+OzxVMjA3OD47SUdOT1JFO0lHTk9SRQorPFUyMDc5Pgk8VTAwMzk+OzxVMjA3OT47SUdOT1JFO0lHTk9SRQorPFUwMDQxPgk8VTAwNDE+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjE+CTxVMDA0MT47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAwQUE+CTxVMDA0MT47PE5PTkU+OzxVMDBBQT47SUdOT1JFCis8VTAwQzA+CTxVMDA0MT47PEdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTA+CTxVMDA0MT47PEdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjAwPgk8VTAwNDE+OzxET1VCTEUtR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIwMT4JPFUwMDQxPjs8RE9VQkxFLUdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTAyPgk8VTAwNDE+OzxCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTAzPgk8VTAwNDE+OzxCUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMUVBRT4JPFUwMDQxPjs8QlJFVkUrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVBRj4JPFUwMDQxPjs8QlJFVkUrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFQjA+CTxVMDA0MT47PEJSRVZFK0dSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQjE+CTxVMDA0MT47PEJSRVZFK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRUIyPgk8VTAwNDE+OzxCUkVWRStIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQjM+CTxVMDA0MT47PEJSRVZFK0hPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFQjQ+CTxVMDA0MT47PEJSRVZFK1RJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQjU+CTxVMDA0MT47PEJSRVZFK1RJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRUI2Pgk8VTAwNDE+OzxCUkVWRStET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCNz4JPFUwMDQxPjs8QlJFVkUrRE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMjAyPgk8VTAwNDE+OzxJTlZFUlRFRC1CUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjAzPgk8VTAwNDE+OzxJTlZFUlRFRC1CUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDBDMj4JPFUwMDQxPjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMEUyPgk8VTAwNDE+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRUE0Pgk8VTAwNDE+OzxDSVJDVU1GTEVYK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQTU+CTxVMDA0MT47PENJUkNVTUZMRVgrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFQTY+CTxVMDA0MT47PENJUkNVTUZMRVgrR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVBNz4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMUVBOD4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQTk+CTxVMDA0MT47PENJUkNVTUZMRVgrSE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVBQT4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUxRUFCPgk8VTAwNDE+OzxDSVJDVU1GTEVYK1RJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRUFDPgk8VTAwNDE+OzxDSVJDVU1GTEVYK0RPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUFEPgk8VTAwNDE+OzxDSVJDVU1GTEVYK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDFDRD4JPFUwMDQxPjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFDRT4JPFUwMDQxPjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAwQzU+CTxVMDA0MT47PFJJTkc+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFNT4JPFUwMDQxPjs8UklORz47PFNNQUxMPjtJR05PUkUKKzxVMDFGQT4JPFUwMDQxPjs8UklORytBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMUZCPgk8VTAwNDE+OzxSSU5HK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTAwPgk8VTAwNDE+OzxSSU5HLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMDE+CTxVMDA0MT47PFJJTkctQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAwQzQ+CTxVMDA0MT47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUwMEU0Pgk8VTAwNDE+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTAxREU+CTxVMDA0MT47PERJQUVSRVNJUytNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFERj4JPFUwMDQxPjs8RElBRVJFU0lTK01BQ1JPTj47PFNNQUxMPjtJR05PUkUKKzxVMUVBMj4JPFUwMDQxPjs8SE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUEzPgk8VTAwNDE+OzxIT09LPjs8U01BTEw+O0lHTk9SRQorPFUwMEMzPgk8VTAwNDE+OzxUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUwMEUzPgk8VTAwNDE+OzxUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUVBMD4JPFUwMDQxPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQTE+CTxVMDA0MT47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDEwND4JPFUwMDQxPjs8T0dPTkVLPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMDU+CTxVMDA0MT47PE9HT05FSz47PFNNQUxMPjtJR05PUkUKKzxVMDEwMD4JPFUwMDQxPjs8TUFDUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMDE+CTxVMDA0MT47PE1BQ1JPTj47PFNNQUxMPjtJR05PUkUKKzxVMDFFMD4JPFUwMDQxPjs8TUFDUk9OK0RPVD47PENBUElUQUw+O0lHTk9SRQorPFUwMUUxPgk8VTAwNDE+OzxNQUNST04rRE9UPjs8U01BTEw+O0lHTk9SRQorPGE4PgorPFUwMEUxPgk8VTAwRTE+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMEMxPgk8VTAwRTE+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRkM+CSI8VTAwNDE+PFUwMDQ1PiI7IjxVMDFGQz48VTAxRkM+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDFGRD4JIjxVMDA0MT48VTAwNDU+IjsiPFUwMUZDPjxVMDFGQz4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAxRTI+CSI8VTAwNDE+PFUwMDQ1PiI7IjxVMDFFMj48VTAxRTI+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDFFMz4JIjxVMDA0MT48VTAwNDU+IjsiPFUwMUUyPjxVMDFFMj4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAwNDI+CTxVMDA0Mj47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2Mj4JPFUwMDQyPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMUUwMj4JPFUwMDQyPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMDM+CTxVMDA0Mj47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUUwND4JPFUwMDQyPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMDU+CTxVMDA0Mj47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUUwNj4JPFUwMDQyPjs8TElORS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTA3Pgk8VTAwNDI+OzxMSU5FLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPGI4PgorPFUwMDQzPgk8VTAwNDM+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjM+CTxVMDA0Mz47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMDY+CTxVMDA0Mz47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMDc+CTxVMDA0Mz47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMTA4Pgk8VTAwNDM+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMDk+CTxVMDA0Mz47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTAxMEM+CTxVMDA0Mz47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMEQ+CTxVMDA0Mz47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMTg3Pgk8VTAwNDM+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxODg+CTxVMDA0Mz47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTAxMEE+CTxVMDA0Mz47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUwMTBCPgk8VTAwNDM+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTAwQzc+CTxVMDA0Mz47PENFRElMTEE+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFNz4JPFUwMDQzPjs8Q0VESUxMQT47PFNNQUxMPjtJR05PUkUKKzxVMUUwOD4JPFUwMDQzPjs8Q0VESUxMQStBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTA5Pgk8VTAwNDM+OzxDRURJTExBK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPGM4PgorPFUwMDQ0Pgk8VTAwNDQ+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjQ+CTxVMDA0ND47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMEU+CTxVMDA0ND47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMEY+CTxVMDA0ND47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRTBBPgk8VTAwNDQ+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwQj4JPFUwMDQ0Pjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTBDPgk8VTAwNDQ+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwRD4JPFUwMDQ0Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTEwPgk8VTAwNDQ+OzxTVFJPS0U+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExMT4JPFUwMDQ0Pjs8U1RST0tFPjs8U01BTEw+O0lHTk9SRQorPFUxRTEwPgk8VTAwNDQ+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMTE+CTxVMDA0ND47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFMTI+CTxVMDA0ND47PE1BQ1JPTitDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMTM+CTxVMDA0ND47PE1BQ1JPTitDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRTBFPgk8VTAwNDQ+OzxMSU5FLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMEY+CTxVMDA0ND47PExJTkUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8ZDg+Cis8VTAwRjA+CTxVMDBGMD47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAwRDA+CTxVMDBGMD47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA0NT4JPFUwMDQ1Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDY1Pgk8VTAwNDU+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMEM4Pgk8VTAwNDU+OzxHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMEU4Pgk8VTAwNDU+OzxHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIwND4JPFUwMDQ1Pjs8RE9VQkxFLUdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMDU+CTxVMDA0NT47PERPVUJMRS1HUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDExND4JPFUwMDQ1Pjs8QlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExNT4JPFUwMDQ1Pjs8QlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMDY+CTxVMDA0NT47PElOVkVSVEVELUJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMDc+CTxVMDA0NT47PElOVkVSVEVELUJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMENBPgk8VTAwNDU+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRUE+CTxVMDA0NT47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFQkU+CTxVMDA0NT47PENJUkNVTUZMRVgrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCRj4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVDMD4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRUMxPgk8VTAwNDU+OzxDSVJDVU1GTEVYK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRUMyPgk8VTAwNDU+OzxDSVJDVU1GTEVYK0hPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDMz4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRUM0Pgk8VTAwNDU+OzxDSVJDVU1GTEVYK1RJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQzU+CTxVMDA0NT47PENJUkNVTUZMRVgrVElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFQzY+CTxVMDA0NT47PENJUkNVTUZMRVgrRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQzc+CTxVMDA0NT47PENJUkNVTUZMRVgrRE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTFBPgk8VTAwNDU+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTFCPgk8VTAwNDU+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDBDQj4JPFUwMDQ1Pjs8RElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRUI+CTxVMDA0NT47PERJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMUVCQT4JPFUwMDQ1Pjs8SE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUJCPgk8VTAwNDU+OzxIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRUJDPgk8VTAwNDU+OzxUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUxRUJEPgk8VTAwNDU+OzxUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUUxQT4JPFUwMDQ1Pjs8VElMREUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUxQj4JPFUwMDQ1Pjs8VElMREUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxMTY+CTxVMDA0NT47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUwMTE3Pgk8VTAwNDU+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFQjg+CTxVMDA0NT47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUI5Pgk8VTAwNDU+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTFFMUM+CTxVMDA0NT47PENFRElMTEErQlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUxRD4JPFUwMDQ1Pjs8Q0VESUxMQStCUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDExOD4JPFUwMDQ1Pjs8T0dPTkVLPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMTk+CTxVMDA0NT47PE9HT05FSz47PFNNQUxMPjtJR05PUkUKKzxVMDExMj4JPFUwMDQ1Pjs8TUFDUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMTM+CTxVMDA0NT47PE1BQ1JPTj47PFNNQUxMPjtJR05PUkUKKzxVMUUxNj4JPFUwMDQ1Pjs8TUFDUk9OK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMTc+CTxVMDA0NT47PE1BQ1JPTitBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUUxND4JPFUwMDQ1Pjs8TUFDUk9OK0dSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMTU+CTxVMDA0NT47PE1BQ1JPTitHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMUUxOD4JPFUwMDQ1Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUxOT4JPFUwMDQ1Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8ZTg+Cis8VTAwRTk+CTxVMDBFOT47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAwQzk+CTxVMDBFOT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA0Nj4JPFUwMDQ2Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDY2Pgk8VTAwNDY+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTkxPgk8VTAwNDY+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxOTI+CTxVMDA0Nj47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFMUU+CTxVMDA0Nj47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTFGPgk8VTAwNDY+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8Zjg+Cis8VUZCMDA+CSI8VTAwNDY+PFUwMDQ2PiI7IjxOT05FPjxOT05FPiI7IjxVRkIwMD48VUZCMDA+IjtJR05PUkUKKzxVRkIwMT4JIjxVMDA0Nj48VTAwNDk+IjsiPE5PTkU+PE5PTkU+IjsiPFVGQjAxPjxVRkIwMT4iO0lHTk9SRQorPFVGQjAyPgkiPFUwMDQ2PjxVMDA0Qz4iOyI8Tk9ORT48Tk9ORT4iOyI8VUZCMDI+PFVGQjAyPiI7SUdOT1JFCis8VUZCMDM+CSI8VTAwNDY+PFUwMDQ2PjxVMDA0OT4iOyI8Tk9ORT48Tk9ORT48Tk9ORT4iOyI8VUZCMDM+PFVGQjAzPjxVRkIwMz4iO0lHTk9SRQorPFVGQjA0PgkiPFUwMDQ2PjxVMDA0Nj48VTAwNEM+IjsiPE5PTkU+PE5PTkU+PE5PTkU+IjsiPFVGQjA0PjxVRkIwND48VUZCMDQ+IjtJR05PUkUKKzxVMDA0Nz4JPFUwMDQ3Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDY3Pgk8VTAwNDc+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMUY0Pgk8VTAwNDc+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMUY1Pgk8VTAwNDc+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDExRT4JPFUwMDQ3Pjs8QlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExRj4JPFUwMDQ3Pjs8QlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxQTI+CTxVMDA0Nz47PEJSRVZFK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxQTM+CTxVMDA0Nz47PEJSRVZFK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMTFDPgk8VTAwNDc+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMUQ+CTxVMDA0Nz47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTAxRTY+CTxVMDA0Nz47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRTc+CTxVMDA0Nz47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMTIwPgk8VTAwNDc+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEyMT4JPFUwMDQ3Pjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUwMUU0Pgk8VTAwNDc+OzxTVFJPS0U+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFFNT4JPFUwMDQ3Pjs8U1RST0tFPjs8U01BTEw+O0lHTk9SRQorPFUwMTIyPgk8VTAwNDc+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMjM+CTxVMDA0Nz47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFMjA+CTxVMDA0Nz47PE1BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUxRTIxPgk8VTAwNDc+OzxNQUNST04+OzxTTUFMTD47SUdOT1JFCis8Zzg+Cis8VTAwNDg+CTxVMDA0OD47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2OD4JPFUwMDQ4Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMUUyQT4JPFUwMDQ4Pjs8QlJFVkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUyQj4JPFUwMDQ4Pjs8QlJFVkUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxMjQ+CTxVMDA0OD47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEyNT4JPFUwMDQ4Pjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMUUyNj4JPFUwMDQ4Pjs8RElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMjc+CTxVMDA0OD47PERJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMUUyMj4JPFUwMDQ4Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMjM+CTxVMDA0OD47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUUyND4JPFUwMDQ4Pjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMjU+CTxVMDA0OD47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDEyNj4JPFUwMDQ4Pjs8U1RST0tFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMjc+CTxVMDA0OD47PFNUUk9LRT47PFNNQUxMPjtJR05PUkUKKzxVMUUyOD4JPFUwMDQ4Pjs8Q0VESUxMQT47PENBUElUQUw+O0lHTk9SRQorPFUxRTI5Pgk8VTAwNDg+OzxDRURJTExBPjs8U01BTEw+O0lHTk9SRQorPGg4PgorPFUwMDQ5Pgk8VTAwNDk+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjk+CTxVMDA0OT47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAwQ0M+CTxVMDA0OT47PEdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRUM+CTxVMDA0OT47PEdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjA4Pgk8VTAwNDk+OzxET1VCTEUtR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIwOT4JPFUwMDQ5Pjs8RE9VQkxFLUdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTJDPgk8VTAwNDk+OzxCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTJEPgk8VTAwNDk+OzxCUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIwQT4JPFUwMDQ5Pjs8SU5WRVJURUQtQlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIwQj4JPFUwMDQ5Pjs8SU5WRVJURUQtQlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAwQ0U+CTxVMDA0OT47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFRT4JPFUwMDQ5Pjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMDFDRj4JPFUwMDQ5Pjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFEMD4JPFUwMDQ5Pjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAwQ0Y+CTxVMDA0OT47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUwMEVGPgk8VTAwNDk+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFMkU+CTxVMDA0OT47PERJQUVSRVNJUytBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTJGPgk8VTAwNDk+OzxESUFFUkVTSVMrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFQzg+CTxVMDA0OT47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDOT4JPFUwMDQ5Pjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMDEyOD4JPFUwMDQ5Pjs8VElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEyOT4JPFUwMDQ5Pjs8VElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFMkM+CTxVMDA0OT47PFRJTERFLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMkQ+CTxVMDA0OT47PFRJTERFLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTMwPgk8VTAwNDk+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEzMT4JPFUwMDQ5Pjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRUNBPgk8VTAwNDk+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDQj4JPFUwMDQ5Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTJFPgk8VTAwNDk+OzxPR09ORUs+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEyRj4JPFUwMDQ5Pjs8T0dPTkVLPjs8U01BTEw+O0lHTk9SRQorPFUwMTJBPgk8VTAwNDk+OzxNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEyQj4JPFUwMDQ5Pjs8TUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPGk4PgorPFUwMEVEPgk8VTAwRUQ+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMENEPgk8VTAwRUQ+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMzI+CSI8VTAwNDk+PFUwMDRBPiI7IjxVMDEzMj48VTAxMzI+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDEzMz4JIjxVMDA0OT48VTAwNEE+IjsiPFUwMTMyPjxVMDEzMj4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAwNEE+CTxVMDA0QT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2QT4JPFUwMDRBPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDEzND4JPFUwMDRBPjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMTM1Pgk8VTAwNEE+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPGo4PgorPFUwMDRCPgk8VTAwNEI+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNkI+CTxVMDA0Qj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFMzA+CTxVMDA0Qj47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMzE+CTxVMDA0Qj47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMUU4Pgk8VTAwNEI+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUU5Pgk8VTAwNEI+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDE5OD4JPFUwMDRCPjs8SE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUwMTk5Pgk8VTAwNEI+OzxIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRTMyPgk8VTAwNEI+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzMz4JPFUwMDRCPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTM2Pgk8VTAwNEI+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMzc+CTxVMDA0Qj47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFMzQ+CTxVMDA0Qj47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzNT4JPFUwMDRCPjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxrOD4KKzxVMDEzOD4JPFUwMDRCPjs8VTAxMzg+OzxTTUFMTD47SUdOT1JFCis8VTAwNEM+CTxVMDA0Qz47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2Qz4JPFUwMDRDPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDEzOT4JPFUwMDRDPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEzQT4JPFUwMDRDPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAxM0Q+CTxVMDA0Qz47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxM0U+CTxVMDA0Qz47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMTNGPgk8VTAwNEM+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0MD4JPFUwMDRDPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTM2Pgk8VTAwNEM+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzNz4JPFUwMDRDPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTQxPgk8VTAwNEM+OzxTVFJPS0U+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0Mj4JPFUwMDRDPjs8U1RST0tFPjs8U01BTEw+O0lHTk9SRQorPFUwMTNCPgk8VTAwNEM+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxM0M+CTxVMDA0Qz47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFMzg+CTxVMDA0Qz47PE1BQ1JPTitET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzOT4JPFUwMDRDPjs8TUFDUk9OK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUUzQz4JPFUwMDRDPjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzRD4JPFUwMDRDPjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFM0E+CTxVMDA0Qz47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzQj4JPFUwMDRDPjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxsOD4KKzxVMDA0RD4JPFUwMDREPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDZEPgk8VTAwNEQ+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUxRTNFPgk8VTAwNEQ+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTNGPgk8VTAwNEQ+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUU0MD4JPFUwMDREPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNDE+CTxVMDA0RD47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUU0Mj4JPFUwMDREPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNDM+CTxVMDA0RD47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxtOD4KKzxVMDA0RT4JPFUwMDRFPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDZFPgk8VTAwNEU+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTQzPgk8VTAwNEU+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMTQ0Pgk8VTAwNEU+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDE0Nz4JPFUwMDRFPjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0OD4JPFUwMDRFPjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAwRDE+CTxVMDA0RT47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRjE+CTxVMDA0RT47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRTQ0Pgk8VTAwNEU+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU0NT4JPFUwMDRFPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTQ2Pgk8VTAwNEU+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU0Nz4JPFUwMDRFPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTQ1Pgk8VTAwNEU+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNDY+CTxVMDA0RT47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFNEE+CTxVMDA0RT47PE1BQ1JPTitDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNEI+CTxVMDA0RT47PE1BQ1JPTitDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRTQ4Pgk8VTAwNEU+OzxMSU5FLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNDk+CTxVMDA0RT47PExJTkUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxNDk+CTxVMDA0RT47PFBSRUNFREVELUJZLUFQT1NUUk9QSEU+OzxTTUFMTD47SUdOT1JFCis8bjg+Cis8VTAxNEE+CTxVMDA0RT47PFUwMTRBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNEI+CTxVMDA0RT47PFUwMTRBPjs8U01BTEw+O0lHTk9SRQorPFUwMDRGPgk8VTAwNEY+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNkY+CTxVMDA0Rj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAwQkE+CTxVMDA0Rj47PE5PTkU+OzxVMDBCQT47SUdOT1JFCis8VTAwRDI+CTxVMDA0Rj47PEdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRjI+CTxVMDA0Rj47PEdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjBDPgk8VTAwNEY+OzxET1VCTEUtR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIwRD4JPFUwMDRGPjs8RE9VQkxFLUdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTRFPgk8VTAwNEY+OzxCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTRGPgk8VTAwNEY+OzxCUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIwRT4JPFUwMDRGPjs8SU5WRVJURUQtQlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIwRj4JPFUwMDRGPjs8SU5WRVJURUQtQlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAwRDQ+CTxVMDA0Rj47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGND4JPFUwMDRGPjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMUVEMD4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRUQxPgk8VTAwNEY+OzxDSVJDVU1GTEVYK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRUQyPgk8VTAwNEY+OzxDSVJDVU1GTEVYK0dSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRDM+CTxVMDA0Rj47PENJUkNVTUZMRVgrR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFRDQ+CTxVMDA0Rj47PENJUkNVTUZMRVgrSE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUQ1Pgk8VTAwNEY+OzxDSVJDVU1GTEVYK0hPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFRDY+CTxVMDA0Rj47PENJUkNVTUZMRVgrVElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVENz4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUVEOD4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVEOT4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxRDE+CTxVMDA0Rj47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRDI+CTxVMDA0Rj47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMTUwPgk8VTAwNEY+OzxET1VCTEUtQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE1MT4JPFUwMDRGPjs8RE9VQkxFLUFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRUNFPgk8VTAwNEY+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQ0Y+CTxVMDA0Rj47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTAwRDU+CTxVMDA0Rj47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRjU+CTxVMDA0Rj47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRTRDPgk8VTAwNEY+OzxUSUxERStBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTREPgk8VTAwNEY+OzxUSUxERStBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUU0RT4JPFUwMDRGPjs8VElMREUrRElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNEY+CTxVMDA0Rj47PFRJTERFK0RJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMUVDQz4JPFUwMDRGPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQ0Q+CTxVMDA0Rj47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDFGRT4JPFUwMDRGPjs8U1RST0tFK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRkY+CTxVMDA0Rj47PFNUUk9LRStBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDFFQT4JPFUwMDRGPjs8T0dPTkVLPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRUI+CTxVMDA0Rj47PE9HT05FSz47PFNNQUxMPjtJR05PUkUKKzxVMDFFQz4JPFUwMDRGPjs8T0dPTkVLK01BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUVEPgk8VTAwNEY+OzxPR09ORUsrTUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMTRDPgk8VTAwNEY+OzxNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0RD4JPFUwMDRGPjs8TUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRTUyPgk8VTAwNEY+OzxNQUNST04rQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU1Mz4JPFUwMDRGPjs8TUFDUk9OK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTUwPgk8VTAwNEY+OzxNQUNST04rR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU1MT4JPFUwMDRGPjs8TUFDUk9OK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMUEwPgk8VTAwNEY+OzxIT1JOPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxQTE+CTxVMDA0Rj47PEhPUk4+OzxTTUFMTD47SUdOT1JFCis8VTFFREE+CTxVMDA0Rj47PEhPUk4rQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVEQj4JPFUwMDRGPjs8SE9STitBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVEQz4JPFUwMDRGPjs8SE9STitHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRUREPgk8VTAwNEY+OzxIT1JOK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRURFPgk8VTAwNEY+OzxIT1JOK0hPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVERj4JPFUwMDRGPjs8SE9STitIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRUUwPgk8VTAwNEY+OzxIT1JOK1RJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRTE+CTxVMDA0Rj47PEhPUk4rVElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFRTI+CTxVMDA0Rj47PEhPUk4rRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRTM+CTxVMDA0Rj47PEhPUk4rRE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPG84PgorPFUwMEYzPgk8VTAwRjM+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMEQzPgk8VTAwRjM+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNTA+CTxVMDA1MD47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3MD4JPFUwMDUwPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMUU1ND4JPFUwMDUwPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU1NT4JPFUwMDUwPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFNTY+CTxVMDA1MD47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTU3Pgk8VTAwNTA+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8cDg+Cis8VTAwNTE+CTxVMDA1MT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3MT4JPFUwMDUxPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxxOD4KKzxVMDA1Mj4JPFUwMDUyPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDcyPgk8VTAwNTI+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTU0Pgk8VTAwNTI+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMTU1Pgk8VTAwNTI+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDIxMD4JPFUwMDUyPjs8RE9VQkxFLUdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMTE+CTxVMDA1Mj47PERPVUJMRS1HUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIxMj4JPFUwMDUyPjs8SU5WRVJURUQtQlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIxMz4JPFUwMDUyPjs8SU5WRVJURUQtQlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxNTg+CTxVMDA1Mj47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNTk+CTxVMDA1Mj47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRTU4Pgk8VTAwNTI+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU1OT4JPFUwMDUyPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTVBPgk8VTAwNTI+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU1Qj4JPFUwMDUyPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTU2Pgk8VTAwNTI+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNTc+CTxVMDA1Mj47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFNUM+CTxVMDA1Mj47PE1BQ1JPTitET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU1RD4JPFUwMDUyPjs8TUFDUk9OK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUU1RT4JPFUwMDUyPjs8TElORS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTVGPgk8VTAwNTI+OzxMSU5FLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPHI4PgorPFUwMDUzPgk8VTAwNTM+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzM+CTxVMDA1Mz47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VUZCMDY+CSI8VTAwNTM+PFUwMDU0PiI7IjxOT05FPjxOT05FPiI7IjxVRkIwNj48VUZCMDY+IjtJR05PUkUKKzxVMDE1QT4JPFUwMDUzPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE1Qj4JPFUwMDUzPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFNjQ+CTxVMDA1Mz47PEFDVVRFK0RPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTY1Pgk8VTAwNTM+OzxBQ1VURStET1Q+OzxTTUFMTD47SUdOT1JFCis8VTAxNUM+CTxVMDA1Mz47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE1RD4JPFUwMDUzPjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMDE2MD4JPFUwMDUzPjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE2MT4JPFUwMDUzPjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTFFNjY+CTxVMDA1Mz47PENBUk9OK0RPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTY3Pgk8VTAwNTM+OzxDQVJPTitET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFNjA+CTxVMDA1Mz47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTYxPgk8VTAwNTM+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFNjI+CTxVMDA1Mz47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTYzPgk8VTAwNTM+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTFFNjg+CTxVMDA1Mz47PERPVCtET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2OT4JPFUwMDUzPjs8RE9UK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDE1RT4JPFUwMDUzPjs8Q0VESUxMQT47PENBUElUQUw+O0lHTk9SRQorPFUwMTVGPgk8VTAwNTM+OzxDRURJTExBPjs8U01BTEw+O0lHTk9SRQorPHM4PgorPFUwMTdGPgk8VTAwNTM+OzxVMDE3Rj47PFNNQUxMPjtJR05PUkUKKzxVMDBERj4JIjxVMDA1Mz48VTAwNTM+IjsiPE5PTkU+PE5PTkU+IjsiPFNNQUxMPjxVMDBERj4iO0lHTk9SRQorPFVGQjA1PgkiPFUwMDUzPjxVMDA1ND4iOyI8Tk9ORT48Tk9ORT4iOyI8VUZCMDU+PFVGQjA1PiI7SUdOT1JFCis8VTAwNTQ+CTxVMDA1ND47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3ND4JPFUwMDU0Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDE2ND4JPFUwMDU0Pjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE2NT4JPFUwMDU0Pjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTFFNkE+CTxVMDA1ND47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTZCPgk8VTAwNTQ+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFNkM+CTxVMDA1ND47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTZEPgk8VTAwNTQ+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxNjY+CTxVMDA1ND47PFNUUk9LRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTY3Pgk8VTAwNTQ+OzxTVFJPS0U+OzxTTUFMTD47SUdOT1JFCis8VTAxNjI+CTxVMDA1ND47PENFRElMTEE+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE2Mz4JPFUwMDU0Pjs8Q0VESUxMQT47PFNNQUxMPjtJR05PUkUKKzxVMUU3MD4JPFUwMDU0Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU3MT4JPFUwMDU0Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFNkU+CTxVMDA1ND47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2Rj4JPFUwMDU0Pjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzx0OD4KKzxVMDA1NT4JPFUwMDU1Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDc1Pgk8VTAwNTU+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMEQ5Pgk8VTAwNTU+OzxHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMEY5Pgk8VTAwNTU+OzxHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIxND4JPFUwMDU1Pjs8RE9VQkxFLUdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMTU+CTxVMDA1NT47PERPVUJMRS1HUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDE2Qz4JPFUwMDU1Pjs8QlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE2RD4JPFUwMDU1Pjs8QlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMTY+CTxVMDA1NT47PElOVkVSVEVELUJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMTc+CTxVMDA1NT47PElOVkVSVEVELUJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMERCPgk8VTAwNTU+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRkI+CTxVMDA1NT47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTAxRDM+CTxVMDA1NT47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRDQ+CTxVMDA1NT47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMTZFPgk8VTAwNTU+OzxSSU5HPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNkY+CTxVMDA1NT47PFJJTkc+OzxTTUFMTD47SUdOT1JFCis8VTAwREM+CTxVMDA1NT47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUwMEZDPgk8VTAwNTU+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTAxRDU+CTxVMDA1NT47PERJQUVSRVNJUytNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFENj4JPFUwMDU1Pjs8RElBRVJFU0lTK01BQ1JPTj47PFNNQUxMPjtJR05PUkUKKzxVMDFENz4JPFUwMDU1Pjs8RElBRVJFU0lTK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRDg+CTxVMDA1NT47PERJQUVSRVNJUytBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDFEQj4JPFUwMDU1Pjs8RElBRVJFU0lTK0dSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxREM+CTxVMDA1NT47PERJQUVSRVNJUytHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDFEOT4JPFUwMDU1Pjs8RElBRVJFU0lTK0NBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxREE+CTxVMDA1NT47PERJQUVSRVNJUytDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDE3MD4JPFUwMDU1Pjs8RE9VQkxFLUFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNzE+CTxVMDA1NT47PERPVUJMRS1BQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVFNj4JPFUwMDU1Pjs8SE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUU3Pgk8VTAwNTU+OzxIT09LPjs8U01BTEw+O0lHTk9SRQorPFUwMTY4Pgk8VTAwNTU+OzxUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUwMTY5Pgk8VTAwNTU+OzxUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUU3OD4JPFUwMDU1Pjs8VElMREUrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU3OT4JPFUwMDU1Pjs8VElMREUrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFNzQ+CTxVMDA1NT47PFRJTERFLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNzU+CTxVMDA1NT47PFRJTERFLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUxRUU0Pgk8VTAwNTU+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFNT4JPFUwMDU1Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTcyPgk8VTAwNTU+OzxPR09ORUs+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE3Mz4JPFUwMDU1Pjs8T0dPTkVLPjs8U01BTEw+O0lHTk9SRQorPFUwMTZBPgk8VTAwNTU+OzxNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE2Qj4JPFUwMDU1Pjs8TUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRTdBPgk8VTAwNTU+OzxNQUNST04rRElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFN0I+CTxVMDA1NT47PE1BQ1JPTitESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFNzI+CTxVMDA1NT47PE1BQ1JPTitESUFFUkVTSVMtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU3Mz4JPFUwMDU1Pjs8TUFDUk9OK0RJQUVSRVNJUy1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUU3Nj4JPFUwMDU1Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU3Nz4JPFUwMDU1Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTAxQUY+CTxVMDA1NT47PEhPUk4+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFCMD4JPFUwMDU1Pjs8SE9STj47PFNNQUxMPjtJR05PUkUKKzxVMUVFOD4JPFUwMDU1Pjs8SE9STitBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRUU5Pgk8VTAwNTU+OzxIT1JOK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRUVBPgk8VTAwNTU+OzxIT1JOK0dSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRUI+CTxVMDA1NT47PEhPUk4rR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFRUM+CTxVMDA1NT47PEhPUk4rSE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUVEPgk8VTAwNTU+OzxIT1JOK0hPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFRUU+CTxVMDA1NT47PEhPUk4rVElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFRj4JPFUwMDU1Pjs8SE9STitUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUVGMD4JPFUwMDU1Pjs8SE9STitET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVGMT4JPFUwMDU1Pjs8SE9STitET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8dTg+Cis8VTAwRkE+CTxVMDBGQT47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAwREE+CTxVMDBGQT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA1Nj4JPFUwMDU2Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDc2Pgk8VTAwNTY+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUxRTdDPgk8VTAwNTY+OzxUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUxRTdEPgk8VTAwNTY+OzxUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUU3RT4JPFUwMDU2Pjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFN0Y+CTxVMDA1Nj47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzx2OD4KKzxVMDA1Nz4JPFUwMDU3Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDc3Pgk8VTAwNTc+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUxRTgyPgk8VTAwNTc+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTgzPgk8VTAwNTc+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUU4MD4JPFUwMDU3Pjs8R1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU4MT4JPFUwMDU3Pjs8R1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxNzQ+CTxVMDA1Nz47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE3NT4JPFUwMDU3Pjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMUU4ND4JPFUwMDU3Pjs8RElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFODU+CTxVMDA1Nz47PERJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMUU4Nj4JPFUwMDU3Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFODc+CTxVMDA1Nz47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUU4OD4JPFUwMDU3Pjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFODk+CTxVMDA1Nz47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzx3OD4KKzxVMDA1OD4JPFUwMDU4Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDc4Pgk8VTAwNTg+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUxRThDPgk8VTAwNTg+OzxESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU4RD4JPFUwMDU4Pjs8RElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUxRThBPgk8VTAwNTg+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU4Qj4JPFUwMDU4Pjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPHg4PgorPFUwMDU5Pgk8VTAwNTk+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzk+CTxVMDA1OT47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFRjI+CTxVMDA1OT47PEdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRjM+CTxVMDA1OT47PEdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTc2Pgk8VTAwNTk+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNzc+CTxVMDA1OT47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTAxNzg+CTxVMDA1OT47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUwMEZGPgk8VTAwNTk+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFRjY+CTxVMDA1OT47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVGNz4JPFUwMDU5Pjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVGOD4JPFUwMDU5Pjs8VElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVGOT4JPFUwMDU5Pjs8VElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFOEU+CTxVMDA1OT47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRThGPgk8VTAwNTk+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFRjQ+CTxVMDA1OT47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUY1Pgk8VTAwNTk+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8eTg+Cis8VTAwRkQ+CTxVMDBGRD47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAwREQ+CTxVMDBGRD47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA1QT4JPFUwMDVBPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDdBPgk8VTAwNUE+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTc5Pgk8VTAwNUE+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMTdBPgk8VTAwNUE+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUU5MD4JPFUwMDVBPjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUxRTkxPgk8VTAwNUE+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUwMTdEPgk8VTAwNUE+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTdFPgk8VTAwNUE+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDE3Qj4JPFUwMDVBPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxN0M+CTxVMDA1QT47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUU5Mj4JPFUwMDVBPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFOTM+CTxVMDA1QT47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDFCNT4JPFUwMDVBPjs8U1RST0tFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxQjY+CTxVMDA1QT47PFNUUk9LRT47PFNNQUxMPjtJR05PUkUKKzxVMUU5ND4JPFUwMDVBPjs8TElORS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTk1Pgk8VTAwNUE+OzxMSU5FLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPHo4PgorPFUwMEZFPgk8VTAwRkU+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMERFPgk8VTAwRkU+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTY+CTxVMDBFNj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAwQzY+CTxVMDBFNj47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE1Mz4JPFUwMEU2Pjs8U1BFQ0lBTD47PFNNQUxMPjtJR05PUkUKKzxVMDE1Mj4JPFUwMEU2Pjs8U1BFQ0lBTD47PENBUElUQUw+O0lHTk9SRQorPFUwMEY2Pgk8VTAwRjY+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMEQ2Pgk8VTAwRjY+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRjg+CTxVMDBGNj47PFNQRUNJQUw+OzxTTUFMTD47SUdOT1JFCis8VTAwRDg+CTxVMDBGNj47PFNQRUNJQUw+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDM5MT4JPFUwMzkxPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDM4Nj4JPFUwMzkxPjs8Q0FQSVRBTD47PFRPTk9TPjtJR05PUkUKKzxVMDNCMT4JPFUwMzkxPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQUM+CTxVMDM5MT47PFNNQUxMPjs8VE9OT1M+O0lHTk9SRQorPFUwMzkyPgk8VTAzOTI+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0IyPgk8VTAzOTI+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDM5Mz4JPFUwMzkzPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCMz4JPFUwMzkzPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOTQ+CTxVMDM5ND47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQjQ+CTxVMDM5ND47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzk1Pgk8VTAzOTU+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzg4Pgk8VTAzOTU+OzxDQVBJVEFMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0I1Pgk8VTAzOTU+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBRD4JPFUwMzk1Pjs8U01BTEw+OzxUT05PUz47SUdOT1JFCis8VTAzOTY+CTxVMDM5Nj47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQjY+CTxVMDM5Nj47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzk3Pgk8VTAzOTc+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzg5Pgk8VTAzOTc+OzxDQVBJVEFMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0I3Pgk8VTAzOTc+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBRT4JPFUwMzk3Pjs8U01BTEw+OzxUT05PUz47SUdOT1JFCis8VTAzOTg+CTxVMDM5OD47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQjg+CTxVMDM5OD47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzk5Pgk8VTAzOTk+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzhBPgk8VTAzOTk+OzxDQVBJVEFMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0FBPgk8VTAzOTk+OzxDQVBJVEFMPjs8RElBTFlUSUNBPjtJR05PUkUKKzxVMDNCOT4JPFUwMzk5Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQUY+CTxVMDM5OT47PFNNQUxMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0NBPgk8VTAzOTk+OzxTTUFMTD47PERJQUxZVElDQT47SUdOT1JFCis8VTAzOTA+CTxVMDM5OT47PFNNQUxMPjs8RElBTFlUSUNBK1RPTk9TPjtJR05PUkUKKzxVMDM5QT4JPFUwMzlBPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCQT4JPFUwMzlBPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOUI+CTxVMDM5Qj47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQkI+CTxVMDM5Qj47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzlDPgk8VTAzOUM+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0JDPgk8VTAzOUM+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDM5RD4JPFUwMzlEPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCRD4JPFUwMzlEPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOUU+CTxVMDM5RT47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQkU+CTxVMDM5RT47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzlGPgk8VTAzOUY+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzhDPgk8VTAzOUY+OzxDQVBJVEFMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0JGPgk8VTAzOUY+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDQz4JPFUwMzlGPjs8U01BTEw+OzxUT05PUz47SUdOT1JFCis8VTAzQTA+CTxVMDNBMD47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzA+CTxVMDNBMD47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0ExPgk8VTAzQTE+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0MxPgk8VTAzQTE+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBMz4JPFUwM0EzPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDMz4JPFUwM0EzPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzI+CTxVMDNBMz47PFNNQUxMPjs8VTAzQzI+O0lHTk9SRQorPFUwM0E0Pgk8VTAzQTQ+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0M0Pgk8VTAzQTQ+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBNT4JPFUwM0E1Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDM4RT4JPFUwM0E1Pjs8Q0FQSVRBTD47PFRPTk9TPjtJR05PUkUKKzxVMDNBQj4JPFUwM0E1Pjs8Q0FQSVRBTD47PERJQUxZVElDQT47SUdOT1JFCis8VTAzQzU+CTxVMDNBNT47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0NEPgk8VTAzQTU+OzxTTUFMTD47PFRPTk9TPjtJR05PUkUKKzxVMDNDQj4JPFUwM0E1Pjs8U01BTEw+OzxESUFMWVRJQ0E+O0lHTk9SRQorPFUwM0IwPgk8VTAzQTU+OzxTTUFMTD47PERJQUxZVElDQStUT05PUz47SUdOT1JFCis8VTAzQTY+CTxVMDNBNj47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzY+CTxVMDNBNj47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0E3Pgk8VTAzQTc+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0M3Pgk8VTAzQTc+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBOD4JPFUwM0E4Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDOD4JPFUwM0E4Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQTk+CTxVMDNBOT47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzOEY+CTxVMDNBOT47PENBUElUQUw+OzxUT05PUz47SUdOT1JFCis8VTAzQzk+CTxVMDNBOT47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0NFPgk8VTAzQTk+OzxTTUFMTD47PFRPTk9TPjtJR05PUkUKKzxVMDQxMD4JPFUwNDEwPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzMD4JPFUwNDEwPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTE+CTxVMDQxMT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0MzE+CTxVMDQxMT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDEyPgk8VTA0MTI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDMyPgk8VTA0MTI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxMz4JPFUwNDEzPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzMz4JPFUwNDEzPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MDM+CTxVMDQwMz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NTM+CTxVMDQwMz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDkwPgk8VTA0OTA+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDkxPgk8VTA0OTA+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxND4JPFUwNDE0Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzND4JPFUwNDE0Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MDI+CTxVMDQwMj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NTI+CTxVMDQwMj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDE1Pgk8VTA0MTU+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDM1Pgk8VTA0MTU+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwMT4JPFUwNDAxPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1MT4JPFUwNDAxPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MDQ+CTxVMDQwND47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NTQ+CTxVMDQwND47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDE2Pgk8VTA0MTY+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDM2Pgk8VTA0MTY+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxNz4JPFUwNDE3Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzNz4JPFUwNDE3Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTg+CTxVMDQxOD47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0Mzg+CTxVMDQxOD47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDA2Pgk8VTA0MDY+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDU2Pgk8VTA0MDY+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwNz4JPFUwNDA3Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1Nz4JPFUwNDA3Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MDg+CTxVMDQwOD47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NTg+CTxVMDQwOD47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDE5Pgk8VTA0MTk+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDM5Pgk8VTA0MTk+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxQT4JPFUwNDFBPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzQT4JPFUwNDFBPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MEM+CTxVMDQwQz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NUM+CTxVMDQwQz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDFCPgk8VTA0MUI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDNCPgk8VTA0MUI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwOT4JPFUwNDA5Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1OT4JPFUwNDA5Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MUM+CTxVMDQxQz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0M0M+CTxVMDQxQz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDFEPgk8VTA0MUQ+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDNEPgk8VTA0MUQ+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwQT4JPFUwNDBBPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1QT4JPFUwNDBBPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MUU+CTxVMDQxRT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0M0U+CTxVMDQxRT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDFGPgk8VTA0MUY+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDNGPgk8VTA0MUY+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyMD4JPFUwNDIwPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0MD4JPFUwNDIwPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MjE+CTxVMDQyMT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDE+CTxVMDQyMT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDIyPgk8VTA0MjI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDQyPgk8VTA0MjI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwQj4JPFUwNDBCPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1Qj4JPFUwNDBCPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MjM+CTxVMDQyMz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDM+CTxVMDQyMz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDBFPgk8VTA0MEU+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDVFPgk8VTA0MEU+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyND4JPFUwNDI0Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0ND4JPFUwNDI0Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MjU+CTxVMDQyNT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDU+CTxVMDQyNT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDI2Pgk8VTA0MjY+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDQ2Pgk8VTA0MjY+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwNT4JPFUwNDA1Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1NT4JPFUwNDA1Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0Mjc+CTxVMDQyNz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDc+CTxVMDQyNz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDBGPgk8VTA0MEY+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDVGPgk8VTA0MEY+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyOD4JPFUwNDI4Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0OD4JPFUwNDI4Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0Mjk+CTxVMDQyOT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDk+CTxVMDQyOT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDRBPgk8VTA0NEE+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyQT4JPFUwNDRBPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQyQj4JPFUwNDJCPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0Qj4JPFUwNDJCPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0NEM+CTxVMDQ0Qz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDJDPgk8VTA0NEM+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDJEPgk8VTA0MkQ+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDREPgk8VTA0MkQ+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyRT4JPFUwNDJFPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0RT4JPFUwNDJFPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MkY+CTxVMDQyRj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NEY+CTxVMDQyRj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDYyPgk8VTA0NjI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDYzPgk8VTA0NjI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQ2QT4JPFUwNDZBPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ2Qj4JPFUwNDZBPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0NzI+CTxVMDQ3Mj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NzM+CTxVMDQ3Mj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDc0Pgk8VTA0NzQ+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDc1Pgk8VTA0NzQ+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQ4MD4JPFUwNDgwPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ4MT4JPFUwNDgwPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA1RDA+CTxVMDVEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEMT4JPFUwNUQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQyPgk8VTA1RDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDM+CTxVMDVEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEND4JPFUwNUQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQ1Pgk8VTA1RDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDY+CTxVMDVENj47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVENz4JPFUwNUQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQ4Pgk8VTA1RDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDk+CTxVMDVEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEQT4JPFUwNURBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNURCPgk8VTA1REI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1REM+CTxVMDVEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVERD4JPFUwNUREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNURFPgk8VTA1REU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1REY+CTxVMDVERj47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFMD4JPFUwNUUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUUxPgk8VTA1RTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTI+CTxVMDVFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFMz4JPFUwNUUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUU0Pgk8VTA1RTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTU+CTxVMDVFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFNj4JPFUwNUU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUU3Pgk8VTA1RTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTg+CTxVMDVFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFOT4JPFUwNUU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUVBPgk8VTA1RUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCisKKyUgQXJhYmljIGNvbGxhdGluZworCis8VTA2MEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDYwQz4KKzxVMDYxQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNjFCPgorPFUwNjFGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA2MUY+Cis8VTA2NDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDY0MD4KKworPFUwNjIxPgk8VTA2MjE+OzxVMDYyMT47SUdOT1JFO0lHTk9SRQorPFUwNjIyPgk8VTA2MjI+OzxVMDYyMj47SUdOT1JFO0lHTk9SRQorPFVGRTgyPgk8VTA2MjI+OzxVRkU4Mj47SUdOT1JFO0lHTk9SRQorPFUwNjIzPgk8VTA2MjE+OzxVMDYyMz47SUdOT1JFO0lHTk9SRQorPFVGRTg0Pgk8VTA2MjE+OzxVRkU4ND47SUdOT1JFO0lHTk9SRQorPFUwNjI0Pgk8VTA2MjE+OzxVMDYyND47SUdOT1JFO0lHTk9SRQorPFUwNjI1Pgk8VTA2MjE+OzxVMDYyNT47SUdOT1JFO0lHTk9SRQorPFVGRTg4Pgk8VTA2MjE+OzxVRkU4OD47SUdOT1JFO0lHTk9SRQorPFUwNjI2Pgk8VTA2MjE+OzxVMDYyNj47SUdOT1JFO0lHTk9SRQorPFUwNjcwPgk8VTA2NzA+OzxVMDY3MD47SUdOT1JFO0lHTk9SRQorPFUwNjI3Pgk8VTA2Mjc+OzxVMDYyNz47SUdOT1JFO0lHTk9SRQorPFVGRThEPgk8VTA2Mjc+OzxVRkU4RD47SUdOT1JFO0lHTk9SRQorPFVGRThFPgk8VTA2Mjc+OzxVRkU4RT47SUdOT1JFO0lHTk9SRQorPFVFMDE2Pgk8VTA2Mjc+OzxVRTAxNj47SUdOT1JFO0lHTk9SRQorPFUwNjI4Pgk8VTA2Mjg+OzxVMDYyOD47SUdOT1JFO0lHTk9SRQorPFVGRThGPgk8VTA2Mjg+OzxVRkU4Rj47SUdOT1JFO0lHTk9SRQorPFVGRTkwPgk8VTA2Mjg+OzxVRkU5MD47SUdOT1JFO0lHTk9SRQorPFVGRTkxPgk8VTA2Mjg+OzxVRkU5MT47SUdOT1JFO0lHTk9SRQorPFVGRTkyPgk8VTA2Mjg+OzxVRkU5Mj47SUdOT1JFO0lHTk9SRQorPFUwNjdFPgk8VTA2N0U+OzxVMDY3RT47SUdOT1JFO0lHTk9SRQorPFUwNkE0Pgk8VTA2QTQ+OzxVMDZBND47SUdOT1JFO0lHTk9SRQorPFUwNjI5Pgk8VTA2Mjk+OzxVMDYyOT47SUdOT1JFO0lHTk9SRQorPFVGRTkzPgk8VTA2Mjk+OzxVRkU5Mz47SUdOT1JFO0lHTk9SRQorPFVGRTk0Pgk8VTA2Mjk+OzxVRkU5ND47SUdOT1JFO0lHTk9SRQorPFUwNjJBPgk8VTA2Mjk+OzxVMDYyQT47SUdOT1JFO0lHTk9SRQorPFVGRTk1Pgk8VTA2Mjk+OzxVRkU5NT47SUdOT1JFO0lHTk9SRQorPFVGRTk2Pgk8VTA2Mjk+OzxVRkU5Nj47SUdOT1JFO0lHTk9SRQorPFVGRTk3Pgk8VTA2Mjk+OzxVRkU5Nz47SUdOT1JFO0lHTk9SRQorPFVGRTk4Pgk8VTA2Mjk+OzxVRkU5OD47SUdOT1JFO0lHTk9SRQorPFUwNjJCPgk8VTA2MkI+OzxVMDYyQj47SUdOT1JFO0lHTk9SRQorPFVGRTk5Pgk8VTA2MkI+OzxVRkU5OT47SUdOT1JFO0lHTk9SRQorPFVGRTlBPgk8VTA2MkI+OzxVRkU5QT47SUdOT1JFO0lHTk9SRQorPFVGRTlCPgk8VTA2MkI+OzxVRkU5Qj47SUdOT1JFO0lHTk9SRQorPFVGRTlDPgk8VTA2MkI+OzxVRkU5Qz47SUdOT1JFO0lHTk9SRQorPFUwNjJDPgk8VTA2MkM+OzxVMDYyQz47SUdOT1JFO0lHTk9SRQorPFVGRTlEPgk8VTA2MkM+OzxVRkU5RD47SUdOT1JFO0lHTk9SRQorPFVGRTlFPgk8VTA2MkM+OzxVRkU5RT47SUdOT1JFO0lHTk9SRQorPFVGRTlGPgk8VTA2MkM+OzxVRkU5Rj47SUdOT1JFO0lHTk9SRQorPFVGRUEwPgk8VTA2MkM+OzxVRkVBMD47SUdOT1JFO0lHTk9SRQorPFUwNjJEPgk8VTA2MkQ+OzxVMDYyRD47SUdOT1JFO0lHTk9SRQorPFVGRUExPgk8VTA2MkQ+OzxVRkVBMT47SUdOT1JFO0lHTk9SRQorPFVGRUEyPgk8VTA2MkQ+OzxVRkVBMj47SUdOT1JFO0lHTk9SRQorPFVGRUEzPgk8VTA2MkQ+OzxVRkVBMz47SUdOT1JFO0lHTk9SRQorPFVGRUE0Pgk8VTA2MkQ+OzxVRkVBND47SUdOT1JFO0lHTk9SRQorPFUwNjJFPgk8VTA2MkU+OzxVMDYyRT47SUdOT1JFO0lHTk9SRQorPFVGRUE1Pgk8VTA2MkU+OzxVRkVBNT47SUdOT1JFO0lHTk9SRQorPFVGRUE2Pgk8VTA2MkU+OzxVRkVBNj47SUdOT1JFO0lHTk9SRQorPFVGRUE3Pgk8VTA2MkU+OzxVRkVBNz47SUdOT1JFO0lHTk9SRQorPFVGRUE4Pgk8VTA2MkU+OzxVRkVBOD47SUdOT1JFO0lHTk9SRQorPFUwNjJGPgk8VTA2MkY+OzxVMDYyRj47SUdOT1JFO0lHTk9SRQorPFVGRUE5Pgk8VTA2MkY+OzxVRkVBOT47SUdOT1JFO0lHTk9SRQorPFVGRUFBPgk8VTA2MkY+OzxVRkVBQT47SUdOT1JFO0lHTk9SRQorPFUwNjMwPgk8VTA2MzA+OzxVMDYzMD47SUdOT1JFO0lHTk9SRQorPFVGRUFCPgk8VTA2MzA+OzxVRkVBQj47SUdOT1JFO0lHTk9SRQorPFVGRUFDPgk8VTA2MzA+OzxVRkVBQz47SUdOT1JFO0lHTk9SRQorPFUwNjMxPgk8VTA2MzE+OzxVMDYzMT47SUdOT1JFO0lHTk9SRQorPFVGRUFEPgk8VTA2MzE+OzxVRkVBRD47SUdOT1JFO0lHTk9SRQorPFVGRUFFPgk8VTA2MzE+OzxVRkVBRT47SUdOT1JFO0lHTk9SRQorPFUwNjMyPgk8VTA2MzI+OzxVMDYzMj47SUdOT1JFO0lHTk9SRQorPFVGRUFGPgk8VTA2MzI+OzxVRkVBRj47SUdOT1JFO0lHTk9SRQorPFVGRUIwPgk8VTA2MzI+OzxVRkVCMD47SUdOT1JFO0lHTk9SRQorPFUwNjMzPgk8VTA2MzM+OzxVMDYzMz47SUdOT1JFO0lHTk9SRQorPFVGRUIxPgk8VTA2MzM+OzxVRkVCMT47SUdOT1JFO0lHTk9SRQorPFVGRUIyPgk8VTA2MzM+OzxVRkVCMj47SUdOT1JFO0lHTk9SRQorPFVGRUIzPgk8VTA2MzM+OzxVRkVCMz47SUdOT1JFO0lHTk9SRQorPFVGRUI0Pgk8VTA2MzM+OzxVRkVCND47SUdOT1JFO0lHTk9SRQorPFUwNjM0Pgk8VTA2MzQ+OzxVMDYzND47SUdOT1JFO0lHTk9SRQorPFVGRUI1Pgk8VTA2MzQ+OzxVRkVCNT47SUdOT1JFO0lHTk9SRQorPFVGRUI2Pgk8VTA2MzQ+OzxVRkVCNj47SUdOT1JFO0lHTk9SRQorPFVGRUI3Pgk8VTA2MzQ+OzxVRkVCNz47SUdOT1JFO0lHTk9SRQorPFVGRUI4Pgk8VTA2MzQ+OzxVRkVCOD47SUdOT1JFO0lHTk9SRQorPFUwNjM1Pgk8VTA2MzU+OzxVMDYzNT47SUdOT1JFO0lHTk9SRQorPFVGRUI5Pgk8VTA2MzU+OzxVRkVCOT47SUdOT1JFO0lHTk9SRQorPFVGRUJBPgk8VTA2MzU+OzxVRkVCQT47SUdOT1JFO0lHTk9SRQorPFVGRUJCPgk8VTA2MzU+OzxVRkVCQj47SUdOT1JFO0lHTk9SRQorPFVGRUJDPgk8VTA2MzU+OzxVRkVCQz47SUdOT1JFO0lHTk9SRQorPFUwNjM2Pgk8VTA2MzY+OzxVMDYzNj47SUdOT1JFO0lHTk9SRQorPFVGRUJEPgk8VTA2MzY+OzxVRkVCRD47SUdOT1JFO0lHTk9SRQorPFVGRUJFPgk8VTA2MzY+OzxVRkVCRT47SUdOT1JFO0lHTk9SRQorPFVGRUJGPgk8VTA2MzY+OzxVRkVCRj47SUdOT1JFO0lHTk9SRQorPFVGRUMwPgk8VTA2MzY+OzxVRkVDMD47SUdOT1JFO0lHTk9SRQorPFUwNjM3Pgk8VTA2Mzc+OzxVMDYzNz47SUdOT1JFO0lHTk9SRQorPFVGRUMxPgk8VTA2Mzc+OzxVRkVDMT47SUdOT1JFO0lHTk9SRQorPFVGRUMyPgk8VTA2Mzc+OzxVRkVDMj47SUdOT1JFO0lHTk9SRQorPFVGRUMzPgk8VTA2Mzc+OzxVRkVDMz47SUdOT1JFO0lHTk9SRQorPFVGRUM0Pgk8VTA2Mzc+OzxVRkVDND47SUdOT1JFO0lHTk9SRQorPFUwNjM4Pgk8VTA2Mzg+OzxVMDYzOD47SUdOT1JFO0lHTk9SRQorPFVGRUM1Pgk8VTA2Mzg+OzxVRkVDNT47SUdOT1JFO0lHTk9SRQorPFVGRUM2Pgk8VTA2Mzg+OzxVRkVDNj47SUdOT1JFO0lHTk9SRQorPFVGRUM3Pgk8VTA2Mzg+OzxVRkVDNz47SUdOT1JFO0lHTk9SRQorPFVGRUM4Pgk8VTA2Mzg+OzxVRkVDOD47SUdOT1JFO0lHTk9SRQorPFUwNjM5Pgk8VTA2Mzk+OzxVMDYzOT47SUdOT1JFO0lHTk9SRQorPFVGRUM5Pgk8VTA2Mzk+OzxVRkVDOT47SUdOT1JFO0lHTk9SRQorPFVGRUNBPgk8VTA2Mzk+OzxVRkVDQT47SUdOT1JFO0lHTk9SRQorPFVGRUNCPgk8VTA2Mzk+OzxVRkVDQj47SUdOT1JFO0lHTk9SRQorPFVGRUNDPgk8VTA2Mzk+OzxVRkVDQz47SUdOT1JFO0lHTk9SRQorPFUwNjNBPgk8VTA2M0E+OzxVMDYzQT47SUdOT1JFO0lHTk9SRQorPFVGRUNEPgk8VTA2M0E+OzxVRkVDRD47SUdOT1JFO0lHTk9SRQorPFVGRUNFPgk8VTA2M0E+OzxVRkVDRT47SUdOT1JFO0lHTk9SRQorPFVGRUNGPgk8VTA2M0E+OzxVRkVDRj47SUdOT1JFO0lHTk9SRQorPFVGRUQwPgk8VTA2M0E+OzxVRkVEMD47SUdOT1JFO0lHTk9SRQorPFUwNjQxPgk8VTA2NDE+OzxVMDY0MT47SUdOT1JFO0lHTk9SRQorPFVGRUQxPgk8VTA2NDE+OzxVRkVEMT47SUdOT1JFO0lHTk9SRQorPFVGRUQyPgk8VTA2NDE+OzxVRkVEMj47SUdOT1JFO0lHTk9SRQorPFVGRUQzPgk8VTA2NDE+OzxVRkVEMz47SUdOT1JFO0lHTk9SRQorPFVGRUQ0Pgk8VTA2NDE+OzxVRkVEND47SUdOT1JFO0lHTk9SRQorPFUwNjQyPgk8VTA2NDI+OzxVMDY0Mj47SUdOT1JFO0lHTk9SRQorPFVGRUQ1Pgk8VTA2NDI+OzxVRkVENT47SUdOT1JFO0lHTk9SRQorPFVGRUQ2Pgk8VTA2NDI+OzxVRkVENj47SUdOT1JFO0lHTk9SRQorPFVGRUQ3Pgk8VTA2NDI+OzxVRkVENz47SUdOT1JFO0lHTk9SRQorPFVGRUQ4Pgk8VTA2NDI+OzxVRkVEOD47SUdOT1JFO0lHTk9SRQorPFUwNjQzPgk8VTA2NDM+OzxVMDY0Mz47SUdOT1JFO0lHTk9SRQorPFVGRUQ5Pgk8VTA2NDM+OzxVRkVEOT47SUdOT1JFO0lHTk9SRQorPFVGRURBPgk8VTA2NDM+OzxVRkVEQT47SUdOT1JFO0lHTk9SRQorPFVGRURCPgk8VTA2NDM+OzxVRkVEQj47SUdOT1JFO0lHTk9SRQorPFVGRURDPgk8VTA2NDM+OzxVRkVEQz47SUdOT1JFO0lHTk9SRQorPFUwNjQ0Pgk8VTA2NDQ+OzxVMDY0ND47SUdOT1JFO0lHTk9SRQorPFVGRUREPgk8VTA2NDQ+OzxVRkVERD47SUdOT1JFO0lHTk9SRQorPFVGRURFPgk8VTA2NDQ+OzxVRkVERT47SUdOT1JFO0lHTk9SRQorPFVGRURGPgk8VTA2NDQ+OzxVRkVERj47SUdOT1JFO0lHTk9SRQorPFVGRUUwPgk8VTA2NDQ+OzxVRkVFMD47SUdOT1JFO0lHTk9SRQorPFUwNjQ1Pgk8VTA2NDU+OzxVMDY0NT47SUdOT1JFO0lHTk9SRQorPFVGRUUxPgk8VTA2NDU+OzxVRkVFMT47SUdOT1JFO0lHTk9SRQorPFVGRUUyPgk8VTA2NDU+OzxVRkVFMj47SUdOT1JFO0lHTk9SRQorPFVGRUUzPgk8VTA2NDU+OzxVRkVFMz47SUdOT1JFO0lHTk9SRQorPFVGRUU0Pgk8VTA2NDU+OzxVRkVFND47SUdOT1JFO0lHTk9SRQorPFUwNjQ2Pgk8VTA2NDY+OzxVMDY0Nj47SUdOT1JFO0lHTk9SRQorPFVGRUU1Pgk8VTA2NDY+OzxVRkVFNT47SUdOT1JFO0lHTk9SRQorPFVGRUU2Pgk8VTA2NDY+OzxVRkVFNj47SUdOT1JFO0lHTk9SRQorPFVGRUU3Pgk8VTA2NDY+OzxVRkVFNz47SUdOT1JFO0lHTk9SRQorPFVGRUU4Pgk8VTA2NDY+OzxVRkVFOD47SUdOT1JFO0lHTk9SRQorPFUwNjQ3Pgk8VTA2NDc+OzxVMDY0Nz47SUdOT1JFO0lHTk9SRQorPFVGRUU5Pgk8VTA2NDc+OzxVRkVFOT47SUdOT1JFO0lHTk9SRQorPFVGRUVBPgk8VTA2NDc+OzxVRkVFQT47SUdOT1JFO0lHTk9SRQorPFVGRUVCPgk8VTA2NDc+OzxVRkVFQj47SUdOT1JFO0lHTk9SRQorPFVGRUVDPgk8VTA2NDc+OzxVRkVFQz47SUdOT1JFO0lHTk9SRQorPFUwNjQ4Pgk8VTA2NDg+OzxVMDY0OD47SUdOT1JFO0lHTk9SRQorPFVGRUVEPgk8VTA2NDg+OzxVRkVFRD47SUdOT1JFO0lHTk9SRQorPFVGRUVFPgk8VTA2NDg+OzxVRkVFRT47SUdOT1JFO0lHTk9SRQorPFUwNjQ5Pgk8VTA2NDk+OzxVMDY0OT47SUdOT1JFO0lHTk9SRQorPFVGRUVGPgk8VTA2NDk+OzxVRkVFRj47SUdOT1JFO0lHTk9SRQorPFVGRUYwPgk8VTA2NDk+OzxVRkVGMD47SUdOT1JFO0lHTk9SRQorPFUwNjRBPgk8VTA2NEE+OzxVMDY0QT47SUdOT1JFO0lHTk9SRQorPFVGRUYxPgk8VTA2NEE+OzxVRkVGMT47SUdOT1JFO0lHTk9SRQorPFVGRUYyPgk8VTA2NEE+OzxVRkVGMj47SUdOT1JFO0lHTk9SRQorPFVGRUYzPgk8VTA2NEE+OzxVRkVGMz47SUdOT1JFO0lHTk9SRQorPFVGRUY0Pgk8VTA2NEE+OzxVRkVGND47SUdOT1JFO0lHTk9SRQorCis8VTA2NEI+CUlHTk9SRTtJR05PUkU7PFUwNjRCPjtJR05PUkUKKzxVMDY0Qz4JSUdOT1JFO0lHTk9SRTs8VTA2NEM+O0lHTk9SRQorPFUwNjREPglJR05PUkU7SUdOT1JFOzxVMDY0RD47SUdOT1JFCis8VTA2NEU+CUlHTk9SRTtJR05PUkU7PFUwNjRFPjtJR05PUkUKKzxVMDY0Rj4JSUdOT1JFO0lHTk9SRTs8VTA2NEY+O0lHTk9SRQorPFUwNjUwPglJR05PUkU7SUdOT1JFOzxVMDY1MD47SUdOT1JFCis8VTA2NTE+CUlHTk9SRTtJR05PUkU7PFUwNjUxPjtJR05PUkUKKzxVRkU3RD4JSUdOT1JFO0lHTk9SRTs8VUZFN0Q+O0lHTk9SRQorPFUwNjUyPglJR05PUkU7SUdOT1JFOzxVMDY1Mj47SUdOT1JFCisKKzxVMDY2MD4JPFUwMDMwPjs8VTA2NjA+O0lHTk9SRTtJR05PUkUKKzxVMDY2MT4JPFUwMDMxPjs8VTA2NjE+O0lHTk9SRTtJR05PUkUKKzxVMDY2Mj4JPFUwMDMyPjs8VTA2NjI+O0lHTk9SRTtJR05PUkUKKzxVMDY2Mz4JPFUwMDMzPjs8VTA2NjM+O0lHTk9SRTtJR05PUkUKKzxVMDY2ND4JPFUwMDM0Pjs8VTA2NjQ+O0lHTk9SRTtJR05PUkUKKzxVMDY2NT4JPFUwMDM1Pjs8VTA2NjU+O0lHTk9SRTtJR05PUkUKKzxVMDY2Nj4JPFUwMDM2Pjs8VTA2NjY+O0lHTk9SRTtJR05PUkUKKzxVMDY2Nz4JPFUwMDM3Pjs8VTA2Njc+O0lHTk9SRTtJR05PUkUKKzxVMDY2OD4JPFUwMDM4Pjs8VTA2Njg+O0lHTk9SRTtJR05PUkUKKzxVMDY2OT4JPFUwMDM5Pjs8VTA2Njk+O0lHTk9SRTtJR05PUkUKKworPFVGRUY1PgkiPFUwNjQ0PjxVMDYyMj4iOyI8VTA2NDQ+PFUwNjIyPiI7IjxVRkVGNT48VUZFRjU+IjtJR05PUkUKKzxVRkVGNj4JIjxVMDY0ND48VTA2MjI+IjsiPFUwNjQ0PjxVRkU4Mj4iOyI8VUZFRjY+PFVGRUY2PiI7SUdOT1JFCis8VUZFRjc+CSI8VTA2NDQ+PFUwNjIzPiI7IjxVMDY0ND48VTA2MjM+IjsiPFVGRUY3PjxVRkVGNz4iO0lHTk9SRQorPFVGRUY4PgkiPFUwNjQ0PjxVMDYyMz4iOyI8VTA2NDQ+PFVGRTg0PiI7IjxVRkVGOD48VUZFRjg+IjtJR05PUkUKKzxVRkVGOT4JIjxVMDY0ND48VTA2MjU+IjsiPFUwNjQ0PjxVMDYyNT4iOyI8VUZFRjk+PFVGRUY5PiI7SUdOT1JFCis8VUZFRkE+CSI8VTA2NDQ+PFUwNjI1PiI7IjxVMDY0ND48VUZFODg+IjsiPFVGRUZBPjxVRkVGQT4iO0lHTk9SRQorPFVGRUZCPgkiPFUwNjQ0PjxVMDYyNz4iOyI8VTA2NDQ+PFVGRThEPiI7IjxVRkVGQj48VUZFRkI+IjtJR05PUkUKKzxVRkVGQz4JIjxVMDY0ND48VTA2Mjc+IjsiPFUwNjQ0PjxVRkU4RT4iOyI8VUZFRkM+PFVGRUZDPiI7SUdOT1JFCisKKyUga2F0YWthbmEvaGlyYWdhbmEgc29ydGluZworJSBiYXNlIGlzIGthdGFrYW5hLCBhcyB0aGlzIGlzIHByZXNlbnQgaW4gbW9zdCBjaGFyc2V0cworJSBub3JtYWwgYmVmb3JlIHZvaWNlZCBiZWZvcmUgc2VtaS12b2ljZWQKKyUgc21hbGwgdm9jYWxzIGJlZm9yZSBub3JtYWwgdm9jYWxzCislIGthdGFrYW5hIGJlZm9yZSBoaXJhZ2FuYQorCis8VTMwQTE+CTxVMzBBMT47PFUzMEExPjtJR05PUkU7SUdOT1JFCis8VTMwNDE+CTxVMzBBMT47PFUzMDQxPjtJR05PUkU7SUdOT1JFCis8VTMwQTI+CTxVMzBBMT47PFUzMEEyPjtJR05PUkU7SUdOT1JFCis8VTMwNDI+CTxVMzBBMT47PFUzMDQyPjtJR05PUkU7SUdOT1JFCis8VTMwQTM+CTxVMzBBMz47PFUzMEEzPjtJR05PUkU7SUdOT1JFCis8VTMwNDM+CTxVMzBBMz47PFUzMDQzPjtJR05PUkU7SUdOT1JFCis8VTMwQTQ+CTxVMzBBMz47PFUzMEE0PjtJR05PUkU7SUdOT1JFCis8VTMwNDQ+CTxVMzBBMz47PFUzMDQ0PjtJR05PUkU7SUdOT1JFCis8VTMwQTU+CTxVMzBBNT47PFUzMEE1PjtJR05PUkU7SUdOT1JFCis8VTMwNDU+CTxVMzBBNT47PFUzMDQ1PjtJR05PUkU7SUdOT1JFCis8VTMwQTY+CTxVMzBBNT47PFUzMEE2PjtJR05PUkU7SUdOT1JFCis8VTMwNDY+CTxVMzBBNT47PFUzMDQ2PjtJR05PUkU7SUdOT1JFCis8VTMwRjQ+CTxVMzBBNT47PFUzMEY0PjtJR05PUkU7SUdOT1JFCis8VTMwQTc+CTxVMzBBNz47PFUzMEE3PjtJR05PUkU7SUdOT1JFCis8VTMwNDc+CTxVMzBBNz47PFUzMDQ3PjtJR05PUkU7SUdOT1JFCis8VTMwQTg+CTxVMzBBNz47PFUzMEE4PjtJR05PUkU7SUdOT1JFCis8VTMwNDg+CTxVMzBBNz47PFUzMDQ4PjtJR05PUkU7SUdOT1JFCis8VTMwQTk+CTxVMzBBOT47PFUzMEE5PjtJR05PUkU7SUdOT1JFCis8VTMwNDk+CTxVMzBBOT47PFUzMDQ5PjtJR05PUkU7SUdOT1JFCis8VTMwQUE+CTxVMzBBOT47PFUzMEFBPjtJR05PUkU7SUdOT1JFCis8VTMwNEE+CTxVMzBBOT47PFUzMDRBPjtJR05PUkU7SUdOT1JFCis8VTMwRjU+CTxVMzBGNT47PFUzMEY1PjtJR05PUkU7SUdOT1JFCis8VTMwQUI+CTxVMzBGNT47PFUzMEFCPjtJR05PUkU7SUdOT1JFCis8VTMwNEI+CTxVMzBGNT47PFUzMDRCPjtJR05PUkU7SUdOT1JFCis8VTMwQUM+CTxVMzBGNT47PFUzMEFDPjtJR05PUkU7SUdOT1JFCis8VTMwNEM+CTxVMzBGNT47PFUzMDRDPjtJR05PUkU7SUdOT1JFCis8VTMwQUQ+CTxVMzBBRD47PFUzMEFEPjtJR05PUkU7SUdOT1JFCis8VTMwNEQ+CTxVMzBBRD47PFUzMDREPjtJR05PUkU7SUdOT1JFCis8VTMwQUU+CTxVMzBBRD47PFUzMEFFPjtJR05PUkU7SUdOT1JFCis8VTMwNEU+CTxVMzBBRD47PFUzMDRFPjtJR05PUkU7SUdOT1JFCis8VTMwQUY+CTxVMzBBRj47PFUzMEFGPjtJR05PUkU7SUdOT1JFCis8VTMwNEY+CTxVMzBBRj47PFUzMDRGPjtJR05PUkU7SUdOT1JFCis8VTMwQjA+CTxVMzBBRj47PFUzMEIwPjtJR05PUkU7SUdOT1JFCis8VTMwNTA+CTxVMzBBRj47PFUzMDUwPjtJR05PUkU7SUdOT1JFCis8VTMwRjY+CTxVMzBGNj47PFUzMEY2PjtJR05PUkU7SUdOT1JFCis8VTMwQjE+CTxVMzBGNj47PFUzMEIxPjtJR05PUkU7SUdOT1JFCis8VTMwNTE+CTxVMzBGNj47PFUzMDUxPjtJR05PUkU7SUdOT1JFCis8VTMwQjI+CTxVMzBGNj47PFUzMEIyPjtJR05PUkU7SUdOT1JFCis8VTMwNTI+CTxVMzBGNj47PFUzMDUyPjtJR05PUkU7SUdOT1JFCis8VTMwQjM+CTxVMzBCMz47PFUzMEIzPjtJR05PUkU7SUdOT1JFCis8VTMwNTM+CTxVMzBCMz47PFUzMDUzPjtJR05PUkU7SUdOT1JFCis8VTMwQjQ+CTxVMzBCMz47PFUzMEI0PjtJR05PUkU7SUdOT1JFCis8VTMwNTQ+CTxVMzBCMz47PFUzMDU0PjtJR05PUkU7SUdOT1JFCis8VTMwQjU+CTxVMzBCNT47PFUzMEI1PjtJR05PUkU7SUdOT1JFCis8VTMwNTU+CTxVMzBCNT47PFUzMDU1PjtJR05PUkU7SUdOT1JFCis8VTMwQjY+CTxVMzBCNT47PFUzMEI2PjtJR05PUkU7SUdOT1JFCis8VTMwNTY+CTxVMzBCNT47PFUzMDU2PjtJR05PUkU7SUdOT1JFCis8VTMwQjc+CTxVMzBCNz47PFUzMEI3PjtJR05PUkU7SUdOT1JFCis8VTMwNTc+CTxVMzBCNz47PFUzMDU3PjtJR05PUkU7SUdOT1JFCis8VTMwQjg+CTxVMzBCNz47PFUzMEI4PjtJR05PUkU7SUdOT1JFCis8VTMwNTg+CTxVMzBCNz47PFUzMDU4PjtJR05PUkU7SUdOT1JFCis8VTMwQjk+CTxVMzBCOT47PFUzMEI5PjtJR05PUkU7SUdOT1JFCis8VTMwNTk+CTxVMzBCOT47PFUzMDU5PjtJR05PUkU7SUdOT1JFCis8VTMwQkE+CTxVMzBCOT47PFUzMEJBPjtJR05PUkU7SUdOT1JFCis8VTMwNUE+CTxVMzBCOT47PFUzMDVBPjtJR05PUkU7SUdOT1JFCis8VTMwQkI+CTxVMzBCQj47PFUzMEJCPjtJR05PUkU7SUdOT1JFCis8VTMwNUI+CTxVMzBCQj47PFUzMDVCPjtJR05PUkU7SUdOT1JFCis8VTMwQkM+CTxVMzBCQj47PFUzMEJDPjtJR05PUkU7SUdOT1JFCis8VTMwNUM+CTxVMzBCQj47PFUzMDVDPjtJR05PUkU7SUdOT1JFCis8VTMwQkQ+CTxVMzBCRD47PFUzMEJEPjtJR05PUkU7SUdOT1JFCis8VTMwNUQ+CTxVMzBCRD47PFUzMDVEPjtJR05PUkU7SUdOT1JFCis8VTMwQkU+CTxVMzBCRD47PFUzMEJFPjtJR05PUkU7SUdOT1JFCis8VTMwNUU+CTxVMzBCRD47PFUzMDVFPjtJR05PUkU7SUdOT1JFCis8VTMwQkY+CTxVMzBCRj47PFUzMEJGPjtJR05PUkU7SUdOT1JFCis8VTMwNUY+CTxVMzBCRj47PFUzMDVGPjtJR05PUkU7SUdOT1JFCis8VTMwQzA+CTxVMzBCRj47PFUzMEMwPjtJR05PUkU7SUdOT1JFCis8VTMwNjA+CTxVMzBCRj47PFUzMDYwPjtJR05PUkU7SUdOT1JFCis8VTMwQzE+CTxVMzBDMT47PFUzMEMxPjtJR05PUkU7SUdOT1JFCis8VTMwNjE+CTxVMzBDMT47PFUzMDYxPjtJR05PUkU7SUdOT1JFCis8VTMwQzI+CTxVMzBDMT47PFUzMEMyPjtJR05PUkU7SUdOT1JFCis8VTMwNjI+CTxVMzBDMT47PFUzMDYyPjtJR05PUkU7SUdOT1JFCis8VTMwQzM+CTxVMzBDMz47PFUzMEMzPjtJR05PUkU7SUdOT1JFCis8VTMwNjM+CTxVMzBDMz47PFUzMDYzPjtJR05PUkU7SUdOT1JFCis8VTMwQzQ+CTxVMzBDMz47PFUzMEM0PjtJR05PUkU7SUdOT1JFCis8VTMwNjQ+CTxVMzBDMz47PFUzMDY0PjtJR05PUkU7SUdOT1JFCis8VTMwQzU+CTxVMzBDMz47PFUzMEM1PjtJR05PUkU7SUdOT1JFCis8VTMwNjU+CTxVMzBDMz47PFUzMDY1PjtJR05PUkU7SUdOT1JFCis8VTMwQzY+CTxVMzBDNj47PFUzMEM2PjtJR05PUkU7SUdOT1JFCis8VTMwNjY+CTxVMzBDNj47PFUzMDY2PjtJR05PUkU7SUdOT1JFCis8VTMwQzc+CTxVMzBDNj47PFUzMEM3PjtJR05PUkU7SUdOT1JFCis8VTMwNjc+CTxVMzBDNj47PFUzMDY3PjtJR05PUkU7SUdOT1JFCis8VTMwQzg+CTxVMzBDOD47PFUzMEM4PjtJR05PUkU7SUdOT1JFCis8VTMwNjg+CTxVMzBDOD47PFUzMDY4PjtJR05PUkU7SUdOT1JFCis8VTMwQzk+CTxVMzBDOD47PFUzMEM5PjtJR05PUkU7SUdOT1JFCis8VTMwNjk+CTxVMzBDOD47PFUzMDY5PjtJR05PUkU7SUdOT1JFCis8VTMwQ0E+CTxVMzBDQT47PFUzMENBPjtJR05PUkU7SUdOT1JFCis8VTMwNkE+CTxVMzBDQT47PFUzMDZBPjtJR05PUkU7SUdOT1JFCis8VTMwQ0I+CTxVMzBDQj47PFUzMENCPjtJR05PUkU7SUdOT1JFCis8VTMwNkI+CTxVMzBDQj47PFUzMDZCPjtJR05PUkU7SUdOT1JFCis8VTMwQ0M+CTxVMzBDQz47PFUzMENDPjtJR05PUkU7SUdOT1JFCis8VTMwNkM+CTxVMzBDQz47PFUzMDZDPjtJR05PUkU7SUdOT1JFCis8VTMwQ0Q+CTxVMzBDRD47PFUzMENEPjtJR05PUkU7SUdOT1JFCis8VTMwNkQ+CTxVMzBDRD47PFUzMDZEPjtJR05PUkU7SUdOT1JFCis8VTMwQ0U+CTxVMzBDRT47PFUzMENFPjtJR05PUkU7SUdOT1JFCis8VTMwNkU+CTxVMzBDRT47PFUzMDZFPjtJR05PUkU7SUdOT1JFCis8VTMwQ0Y+CTxVMzBDRj47PFUzMENGPjtJR05PUkU7SUdOT1JFCis8VTMwNkY+CTxVMzBDRj47PFUzMDZGPjtJR05PUkU7SUdOT1JFCis8VTMwRDA+CTxVMzBDRj47PFUzMEQwPjtJR05PUkU7SUdOT1JFCis8VTMwNzA+CTxVMzBDRj47PFUzMDcwPjtJR05PUkU7SUdOT1JFCis8VTMwRDE+CTxVMzBDRj47PFUzMEQxPjtJR05PUkU7SUdOT1JFCis8VTMwNzE+CTxVMzBDRj47PFUzMDcxPjtJR05PUkU7SUdOT1JFCis8VTMwRDI+CTxVMzBEMj47PFUzMEQyPjtJR05PUkU7SUdOT1JFCis8VTMwNzI+CTxVMzBEMj47PFUzMDcyPjtJR05PUkU7SUdOT1JFCis8VTMwRDM+CTxVMzBEMj47PFUzMEQzPjtJR05PUkU7SUdOT1JFCis8VTMwNzM+CTxVMzBEMj47PFUzMDczPjtJR05PUkU7SUdOT1JFCis8VTMwRDQ+CTxVMzBEMj47PFUzMEQ0PjtJR05PUkU7SUdOT1JFCis8VTMwNzQ+CTxVMzBEMj47PFUzMDc0PjtJR05PUkU7SUdOT1JFCis8VTMwRDU+CTxVMzBENT47PFUzMEQ1PjtJR05PUkU7SUdOT1JFCis8VTMwNzU+CTxVMzBENT47PFUzMDc1PjtJR05PUkU7SUdOT1JFCis8VTMwRDY+CTxVMzBENT47PFUzMEQ2PjtJR05PUkU7SUdOT1JFCis8VTMwNzY+CTxVMzBENT47PFUzMDc2PjtJR05PUkU7SUdOT1JFCis8VTMwRDc+CTxVMzBENT47PFUzMEQ3PjtJR05PUkU7SUdOT1JFCis8VTMwNzc+CTxVMzBENT47PFUzMDc3PjtJR05PUkU7SUdOT1JFCis8VTMwRDg+CTxVMzBEOD47PFUzMEQ4PjtJR05PUkU7SUdOT1JFCis8VTMwNzg+CTxVMzBEOD47PFUzMDc4PjtJR05PUkU7SUdOT1JFCis8VTMwRDk+CTxVMzBEOD47PFUzMEQ5PjtJR05PUkU7SUdOT1JFCis8VTMwNzk+CTxVMzBEOD47PFUzMDc5PjtJR05PUkU7SUdOT1JFCis8VTMwREE+CTxVMzBEOD47PFUzMERBPjtJR05PUkU7SUdOT1JFCis8VTMwN0E+CTxVMzBEOD47PFUzMDdBPjtJR05PUkU7SUdOT1JFCis8VTMwREI+CTxVMzBEQj47PFUzMERCPjtJR05PUkU7SUdOT1JFCis8VTMwN0I+CTxVMzBEQj47PFUzMDdCPjtJR05PUkU7SUdOT1JFCis8VTMwREM+CTxVMzBEQj47PFUzMERDPjtJR05PUkU7SUdOT1JFCis8VTMwN0M+CTxVMzBEQj47PFUzMDdDPjtJR05PUkU7SUdOT1JFCis8VTMwREQ+CTxVMzBEQj47PFUzMEREPjtJR05PUkU7SUdOT1JFCis8VTMwN0Q+CTxVMzBEQj47PFUzMDdEPjtJR05PUkU7SUdOT1JFCis8VTMwREU+CTxVMzBERT47PFUzMERFPjtJR05PUkU7SUdOT1JFCis8VTMwN0U+CTxVMzBERT47PFUzMDdFPjtJR05PUkU7SUdOT1JFCis8VTMwREY+CTxVMzBERj47PFUzMERGPjtJR05PUkU7SUdOT1JFCis8VTMwN0Y+CTxVMzBERj47PFUzMDdGPjtJR05PUkU7SUdOT1JFCis8VTMwRTA+CTxVMzBFMD47PFUzMEUwPjtJR05PUkU7SUdOT1JFCis8VTMwODA+CTxVMzBFMD47PFUzMDgwPjtJR05PUkU7SUdOT1JFCis8VTMwRTE+CTxVMzBFMT47PFUzMEUxPjtJR05PUkU7SUdOT1JFCis8VTMwODE+CTxVMzBFMT47PFUzMDgxPjtJR05PUkU7SUdOT1JFCis8VTMwRTI+CTxVMzBFMj47PFUzMEUyPjtJR05PUkU7SUdOT1JFCis8VTMwODI+CTxVMzBFMj47PFUzMDgyPjtJR05PUkU7SUdOT1JFCis8VTMwRTM+CTxVMzBFMz47PFUzMEUzPjtJR05PUkU7SUdOT1JFCis8VTMwODM+CTxVMzBFMz47PFUzMDgzPjtJR05PUkU7SUdOT1JFCis8VTMwRTQ+CTxVMzBFMz47PFUzMEU0PjtJR05PUkU7SUdOT1JFCis8VTMwODQ+CTxVMzBFMz47PFUzMDg0PjtJR05PUkU7SUdOT1JFCis8VTMwRTU+CTxVMzBFNT47PFUzMEU1PjtJR05PUkU7SUdOT1JFCis8VTMwODU+CTxVMzBFNT47PFUzMDg1PjtJR05PUkU7SUdOT1JFCis8VTMwRTY+CTxVMzBFNT47PFUzMEU2PjtJR05PUkU7SUdOT1JFCis8VTMwODY+CTxVMzBFNT47PFUzMDg2PjtJR05PUkU7SUdOT1JFCis8VTMwRTc+CTxVMzBFNz47PFUzMEU3PjtJR05PUkU7SUdOT1JFCis8VTMwODc+CTxVMzBFNz47PFUzMDg3PjtJR05PUkU7SUdOT1JFCis8VTMwRTg+CTxVMzBFNz47PFUzMEU4PjtJR05PUkU7SUdOT1JFCis8VTMwODg+CTxVMzBFNz47PFUzMDg4PjtJR05PUkU7SUdOT1JFCis8VTMwRTk+CTxVMzBFOT47PFUzMEU5PjtJR05PUkU7SUdOT1JFCis8VTMwODk+CTxVMzBFOT47PFUzMDg5PjtJR05PUkU7SUdOT1JFCis8VTMwRUE+CTxVMzBFQT47PFUzMEVBPjtJR05PUkU7SUdOT1JFCis8VTMwOEE+CTxVMzBFQT47PFUzMDhBPjtJR05PUkU7SUdOT1JFCis8VTMwRUI+CTxVMzBFQj47PFUzMEVCPjtJR05PUkU7SUdOT1JFCis8VTMwOEI+CTxVMzBFQj47PFUzMDhCPjtJR05PUkU7SUdOT1JFCis8VTMwRUM+CTxVMzBFQz47PFUzMEVDPjtJR05PUkU7SUdOT1JFCis8VTMwOEM+CTxVMzBFQz47PFUzMDhDPjtJR05PUkU7SUdOT1JFCis8VTMwRUQ+CTxVMzBFRD47PFUzMEVEPjtJR05PUkU7SUdOT1JFCis8VTMwOEQ+CTxVMzBFRD47PFUzMDhEPjtJR05PUkU7SUdOT1JFCis8VTMwRUU+CTxVMzBFRT47PFUzMEVFPjtJR05PUkU7SUdOT1JFCis8VTMwOEU+CTxVMzBFRT47PFUzMDhFPjtJR05PUkU7SUdOT1JFCis8VTMwRUY+CTxVMzBFRT47PFUzMEVGPjtJR05PUkU7SUdOT1JFCis8VTMwOEY+CTxVMzBFRT47PFUzMDhGPjtJR05PUkU7SUdOT1JFCis8VTMwRjA+CTxVMzBGMD47PFUzMEYwPjtJR05PUkU7SUdOT1JFCis8VTMwOTA+CTxVMzBGMD47PFUzMDkwPjtJR05PUkU7SUdOT1JFCis8VTMwRjE+CTxVMzBGMT47PFUzMEYxPjtJR05PUkU7SUdOT1JFCis8VTMwOTE+CTxVMzBGMT47PFUzMDkxPjtJR05PUkU7SUdOT1JFCis8VTMwRjI+CTxVMzBGMj47PFUzMEYyPjtJR05PUkU7SUdOT1JFCis8VTMwOTI+CTxVMzBGMj47PFUzMDkyPjtJR05PUkU7SUdOT1JFCis8VTMwRjM+CTxVMzBGMz47PFUzMEYzPjtJR05PUkU7SUdOT1JFCis8VTMwOTM+CTxVMzBGMz47PFUzMDkzPjtJR05PUkU7SUdOT1JFCisKKyUgbW9kaWZpZXIgbGV0dGVycworCis8VTAyQkI+CUlHTk9SRTtJR05PUkU7PFUwMkJCPjtJR05PUkUKKzxVMDJDNj4JSUdOT1JFO0lHTk9SRTs8Q0lSQ1VNRkxFWD47SUdOT1JFCis8VTAyQzk+CUlHTk9SRTtJR05PUkU7PE1BQ1JPTj47SUdOT1JFCis8VTAyQ0I+CUlHTk9SRTtJR05PUkU7PEdSQVZFPjtJR05PUkUKKworb3JkZXJfZW5kCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgICAgICI8VTAwNDk+PFUwMDUzPjxVMDA0Qj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICAgIjxVMDA2Qj48VTAwNzI+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICAgIjxVMDAyQz4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgICAiPFUwMDJFPiIKK21vbl9ncm91cGluZyAgICAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAgICI8VTAwMkQ+IgorJSAqX2ZyYWNfKiBtdXN0IGJlIGNoZWNrZWQKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgIDAKK2ZyYWNfZGlnaXRzICAgICAgICAgICAgIDAKK3BfY3NfcHJlY2VkZXMgICAgICAgICAgIDAKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAgIDAKK25fc2VwX2J5X3NwYWNlICAgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgICI8VTAwMkU+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAgMzszCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAiPFUwMDczPjxVMDA3NT48VTAwNkU+IjsiPFUwMDZEPjxVMDBFMT48VTAwNkU+IjsvCisgICAgICAiPFUwMEZFPjxVMDA3Mj48VTAwNjk+IjsiPFUwMDZEPjxVMDA2OT48VTAwRjA+IjsvCisgICAgICAiPFUwMDY2PjxVMDA2OT48VTAwNkQ+IjsiPFUwMDY2PjxVMDBGNj48VTAwNzM+IjsvCisgICAgICAiPFUwMDZDPjxVMDA2MT48VTAwNzU+IgorZGF5ICAgIjxVMDA3Mz48VTAwNzU+PFUwMDZFPjxVMDA2RT48VTAwNzU+PFUwMDY0PjxVMDA2MT48VTAwNjc+PFUwMDc1PjxVMDA3Mj4iOy8KKyAgICAgICI8VTAwNkQ+PFUwMEUxPjxVMDA2RT48VTAwNzU+PFUwMDY0PjxVMDA2MT48VTAwNjc+PFUwMDc1PjxVMDA3Mj4iOy8KKyAgICAgICI8VTAwRkU+PFUwMDcyPjxVMDA2OT48VTAwRjA+PFUwMDZBPjxVMDA3NT48VTAwNjQ+PFUwMDYxPjxVMDA2Nz48VTAwNzU+PFUwMDcyPiI7LworICAgICAgIjxVMDA2RD48VTAwNjk+PFUwMEYwPjxVMDA3Nj48VTAwNjk+PFUwMDZCPjxVMDA3NT48VTAwNjQ+PFUwMDYxPjxVMDA2Nz48VTAwNzU+PFUwMDcyPiI7LworICAgICAgIjxVMDA2Nj48VTAwNjk+PFUwMDZEPjxVMDA2RD48VTAwNzQ+PFUwMDc1PjxVMDA2ND48VTAwNjE+PFUwMDY3PjxVMDA3NT48VTAwNzI+IjsvCisgICAgICAiPFUwMDY2PjxVMDBGNj48VTAwNzM+PFUwMDc0PjxVMDA3NT48VTAwNjQ+PFUwMDYxPjxVMDA2Nz48VTAwNzU+PFUwMDcyPiI7LworICAgICAgIjxVMDA2Qz48VTAwNjE+PFUwMDc1PjxVMDA2Nz48VTAwNjE+PFUwMDcyPjxVMDA2ND48VTAwNjE+PFUwMDY3PjxVMDA3NT48VTAwNzI+IgorYWJtb24gIjxVMDA2QT48VTAwNjE+PFUwMDZFPiI7IjxVMDA2Nj48VTAwNjU+PFUwMDYyPiI7LworICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2MT48VTAwNzA+PFUwMDcyPiI7LworICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMEVEPiI7IjxVMDA2QT48VTAwRkE+PFUwMDZFPiI7LworICAgICAgIjxVMDA2QT48VTAwRkE+PFUwMDZDPiI7IjxVMDBFMT48VTAwNjc+PFUwMEZBPiI7LworICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA2Rj48VTAwNkI+PFUwMDc0PiI7LworICAgICAgIjxVMDA2RT48VTAwRjM+PFUwMDc2PiI7IjxVMDA2ND48VTAwNjU+PFUwMDczPiIKK21vbiAgICI8VTAwNkE+PFUwMDYxPjxVMDA2RT48VTAwRkE+PFUwMDYxPjxVMDA3Mj4iOy8KKyAgICAgICI8VTAwNjY+PFUwMDY1PjxVMDA2Mj48VTAwNzI+PFUwMEZBPjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMDczPiI7LworICAgICAgIjxVMDA2MT48VTAwNzA+PFUwMDcyPjxVMDBFRD48VTAwNkM+IjsvCisgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwRUQ+IjsvCisgICAgICAiPFUwMDZBPjxVMDBGQT48VTAwNkU+PFUwMEVEPiI7LworICAgICAgIjxVMDA2QT48VTAwRkE+PFUwMDZDPjxVMDBFRD4iOy8KKyAgICAgICI8VTAwRTE+PFUwMDY3PjxVMDBGQT48VTAwNzM+PFUwMDc0PiI7LworICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgIjxVMDA2Rj48VTAwNkI+PFUwMDc0PjxVMDBGMz48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICI8VTAwNkU+PFUwMEYzPjxVMDA3Nj48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgIjxVMDA2ND48VTAwNjU+PFUwMDczPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMkU+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMkU+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCit0X2ZtdCAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgIjxVMDA2Nj48VTAwNjg+IjsiPFUwMDY1PjxVMDA2OD4iCit0X2ZtdF9hbXBtICIiCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNkE+PFUwMDRBPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19QQVBFUgorJSBGSVhNRQoraGVpZ2h0ICAgMjk3CislIEZJWE1FCit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDMzPjxVMDAzNT48VTAwMzQ+IgoraW50X3NlbGVjdCAgICAgIjxVMDAzMD48VTAwMzA+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorJSBGSVhNRQorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAiPFUwMDQ5PjxVMDA1Mz4iCitjb3VudHJ5X2FiMyAiPFUwMDQ5PjxVMDA1Mz48VTAwNEM+IgorY291bnRyeV9udW0gMzUyCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvaXNvMTQ2NTFfdDEgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9pc28xNDY1MV90MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDY5NGQwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvaXNvMTQ2NTFfdDEKQEAgLTAsMCArMSwxNCBAQAorTENfQ09MTEFURQorCitjb3B5ICJpc28xNDY1MV90MV9jb21tb24iCisKK3NjcmlwdCA8SEFOPgorCitvcmRlcl9zdGFydCA8SEFOPjtmb3J3YXJkO2ZvcndhcmQ7Zm9yd2FyZDtmb3J3YXJkLHBvc2l0aW9uCis8VTRFMDA+IDxVNEUwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUKKy4uIC4uO0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTlGQTU+IDxVOUZBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKyMKK29yZGVyX2VuZAorIworRU5EIExDX0NPTExBVEUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2lzbzE0NjUxX3QxX2NvbW1vbiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2lzbzE0NjUxX3QxX2NvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTVjZTMyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvaXNvMTQ2NTFfdDFfY29tbW9uCkBAIC0wLDAgKzEsNDA1NyBAQAorTENfQ09MTEFURQorCisjIFRoaXMgaXMgYSBzcGVjaWFsIGNvcHkgb2YgaXNvMTQ2NTFfdDEgZmlsZTsgYmVjYXVzZSBnbGliYyAyLjMgaGFzIHNvbWUKKyMgbGltaXRhdGlvbnMsIGl0IGNhbid0IHlldCBpbmNsdWRlIGEgd2hvbGUgbmV3IGFscGhhYmV0IG9yZGVyaW5nIGZyb20KKyMgdGhlIGRlZmluaXRpb24gb2YgYSBsb2NhbGUgKG9yIEkgZG9uJ3Qga25vdyBob3cgdG8gZG8uLi4pCisjIFRoaXMgaXMgb25seSBzdGlsbCBuZWNlc3NhcnkgZm9yIEFybWVuaWFuICh1bmljb2RlIGhhcyBhIHdyb25nIG9yZGVyaW5nKQorCisjIElNUFJPVkVNRU5UUzoKKyMKKyMgMS4gY29udmVydGVkIHRvIFVURi04IChmb3IgY29tbWVudHMpCisjIDIuIGFkZGVkIEFybWVuaWFuIHNjcmlwdCBibG9jaywgd2l0aCBwcm9wZXIgc29ydGluZworIyAzLiBhZGRlZCBUaWZpbmFnaCBzY3JpcHQgYmxvY2sKKyMgNC4gYWRkZWQgYSB3aG9sZSBsb3Qgb2YgTGF0aW4gc2NyaXB0IGxldHRlcnMsIHNvIHRoZXkgYXJlICJwcm9wZXJseSIKKyMgICAgc29ydGVkIChub3QgYXQgcmFuZG9tIHBvc2l0aW9ucyBiZWZvcmUgIjAiIG9yIGFmdGVyICJ6IiwgYnV0LCBmb3IKKyMgICAgZXhhbXBsZSwgImUgd2l0aCBkb3QgYmVsb3ciIHNvcnRlZCBhcyAiZSIsIGV0Yy4KKyMgNS4gYWRkZWQgZGVmaW5pdGlvbnMgb2YgZXh0cmEgbGF0aW4gZGlhY3JpdGljczsgb3RoZXJ3aXNlIGl0IGlzIG5vdCBwb3NzaWJsZQorIyAgICB0byBkaWZmZXJlbnRpYXRlIGVub3VnaCwgZm9yIGV4YW1wbGUgImQgY2Fyb24iIHZzICJkIGNhcm9uIGJlbG93IgorIyAgICB0aG9zZSBleHRyYSBkaWFjcml0aWNzIGFyZToKKyMgICAgPEhPSz4gIyBob29rIGFib3ZlICh2aWV0bmFtZXNlIHRvbmUgbWFyaykKKyMgICAgPERHUj4gIyBkb3VibGUgZ3JhdmUKKyMgICAgPElCUj4gIyBpbnZlcnRlZCBicmV2ZQorIyAgICA8QlBUPiAjIGRvdCBiZWxvdyAodmlldG5hbWVzZSB0b25lIG1hcmspCisjICAgIDxCUlU+ICMgZGlhZXJlc2lzIGJlbG93CisjICAgIDxCUk4+ICMgcmluZyBiZWxvdworIyAgICA8QkNJPiAjIGNpcmN1bWZsZXggYmVsb3cKKyMgICAgPEJUST4gIyB0aWxkZSBiZWxvdworIyAgICA8QkJSPiAjIGJyZXZlIGJlbG93CisjICAgIDxCTUE+ICMgbWFjcm9uIGJlbG93CisjICAgIDxDUkw+ICMgY3VybGVkIGxldHRlci9sZXR0ZXIgd2l0aCBob29rCisjIDYuIHdoZW4gYSBjaGFyYWN0ZXIgaGFzIHR3byBkaWFjcml0aWNzIHRoZSBzZWNvbmQgb25lIGlzIHJlZmVyZW5jZWQgdG9vLCBlZzoKKyMgICAgPFUxRUE1PiA8YT47PENJUj47PE1JTj47PEFDQT4gIyDhuqUgKGEgd2l0aCBjaXJjdW1mbGV4IGFuZCBhY3V0ZSkKKyMgICAgPFUxRUE5PiA8YT47PENJUj47PE1JTj47PEhPSz4gIyDhuqkgKGEgd2l0aCBjaXJjdW1mbGV4IGFuZCBob29rKQorIyAgICAgICAgICAgICAgICBeMXN0XiAgICAgICBeMm5kXgorIyAgICB0aGF0IGFsbG93cyBkaWZmZXJlbmNpYXRpbmcgYmV0d2VlbiB0aG9zZSB0d28sIGJ1dCBhbHNvLCB0aGV5IGdldAorIyAgICBzb3J0ZWQgYWxvbmcgd2l0aCAiYSBjaXJjdW1mbGV4Iiwgd2hpY2ggaXMgbmljZXIuCisjIDcuIGRpZ3JhcGhzIChhcyBvcHBvc2VkIHRvIGxpZ2F0dXJlcykgYXJlIG1hZGUgc3lub255bXMgb2YgdGhlaXIKKyMgICAgYmFzZSBsZXR0ZXJzIChlbmNvZGluZyBkaWdyYXBocyBpcyBjb25zaWRlcmVkIG9ic29sZXRlIHVuaWNvZGUgYmVoYXZpb3VyCisjICAgIGFueXdheSk7IHRoYXQgaXMsIHRoZSBjb21wb3NpbmcgcGFydHMgYXJlICI8QkFTPiIgKG9yIHdoYXRldmVyIGRpYWNyaXRpYworIyAgICB0aGVyZSBtYXkgYmUpIGFuZCBub3QgIjxMSUc+IjsgY29tcGFyZSAiYWUiLCBhIGxpZ2F0dXJlOgorIyAgICA8VTAwRTY+ICI8YT48ZT4iOyI8TElHPjxMSUc+IjsiPE1JTj48TUlOPiI7SUdOT1JFICMgMjMwIMOmCisjICAgIHdpdGggImlqIiwgYSBkaWdyYXBoOgorIyAgICA8VTAxMzM+ICI8aT48aj4iOyI8QkFTPjxCQVM+IjsiPE1JTj48TUlOPiI7SUdOT1JFICMgMzI5IDxpaj4KKyMgICAgdGhhdCBtZWFucyB0aGF0ICI8YT48ZT4iIHdvbid0IGJlIHNlZW4gYXMgYSBzeW5vbnltIG9mICI8YWU+IiwgYnV0IHRoYXQKKyMgICAgIjxpPjxqPiIgd2lsbCBiZSBhIHN5bm9ueW0gb2YgIjxpaj4iCisjIDguIHQvcyB3aXRoIGNlZGlsbGEgYW5kIHQvcyB3aXRoIGNvbW1hIGJlbG93IGFyZSBtYWRlIHN5bm9ueW1zCisjIDkuIGFkZGVkIHZhcmlvdXMgbmV3IGN5cmlsbGljIGxldHRlcnMKKyMgMTAuIHB1dCA8UENMPiBhbmQgPExJRz4gYWZ0ZXIgYWxsIGRpYWNyaXRpY3MgKGFzIHRoYXQgb2Z0ZW4gaXMgdXNlZCBmb3IKKyMgICAgIGNoYXJzIHRoYXQgY2hhbmdlIG1vcmUpCisjCisjIDIwMDUtMTEtMjksIFBhYmxvIFNhcmF0eGFnYSA8cGFibG9AbWFuZHJpdmEuY29tPgorCisjIETDqWNsYXJhdGlvbiBkZXMgc3lzdMOobWVzIGQnw6ljcml0dXJlIC8gRGVjbGFyYXRpb24gb2Ygc2NyaXB0cworc2NyaXB0IDxTUEVDSUFMPgorc2NyaXB0IDxMQVRJTj4KK3NjcmlwdCA8VElGSU5BR0g+CitzY3JpcHQgPEFSQUJJTlQ+CitzY3JpcHQgPEFSQUJGT1I+CitzY3JpcHQgPEhFQlJFVT4KK3NjcmlwdCA8R1JFQz4KK3NjcmlwdCA8Q1lSSUw+CitzY3JpcHQgPEFSTUVOSUFOPgorc2NyaXB0IDxHRU9SR0lBTj4KK3NjcmlwdCA8REVWQU5BR0FSST4KK3NjcmlwdCA8R1VKQVJBVEk+CitzY3JpcHQgPFRFTFVHVT4KK3NjcmlwdCA8R1VSVU1VS0hJPgorc2NyaXB0IDxLQU5OQURBPgorc2NyaXB0IDxTSU5IQUxBPgorCisjIETDqWNsYXJhdGlvbiBkZXMgc3ltYm9sZXMgaW50ZXJuZXMgLyBEZWNsYXJhdGlvbiBvZiBpbnRlcm5hbCBzeW1ib2xzCisjCisjIFNZTUIgTsKwIEV4cGwuCisjCitjb2xsYXRpbmctc3ltYm9sIDxSRVMtMT4KKyMKKyMgPEFSQUJJTlQ+LzxBUkFCRk9SPgorIworIworY29sbGF0aW5nLXN5bWJvbCA8QU5PPiAjIDIgbm9ybWFsIC0tPiB2b2lyL3NlZSA8TUlOPgorY29sbGF0aW5nLXN5bWJvbCA8QUlTPiAjIDMgaXNvbC4KK2NvbGxhdGluZy1zeW1ib2wgPEFGST4gIyA0IGZpbmFsCitjb2xsYXRpbmctc3ltYm9sIDxBSUk+ICMgNSBpbml0aWFsCitjb2xsYXRpbmctc3ltYm9sIDxBTUU+ICMgNiBtZWRpYWwvbTxlJz5kaWFuCisjCitjb2xsYXRpbmctc3ltYm9sIDxNSU4+ICMgNyBtaW51c2N1bGUvbWludXNjdWxlIChiYXMgZGUgY2Fzc2UvbG93ZXIgY2FzZSkKK2NvbGxhdGluZy1zeW1ib2wgPElNST4gIyA4IGluZsOpcmlldXIgbWluLi9zdWJzY3JpcHQgbWluLiAoaW5kaWNlL2luZGV4KQorY29sbGF0aW5nLXN5bWJvbCA8RU1JPiAjIDkgc3Vww6lyLiBtaW4uL3N1cGVyc2NyaXB0IG1pbi4gKGV4cG9zYW50L2V4cG9uZW50KQorY29sbGF0aW5nLXN5bWJvbCA8Q0FQPiAjIDEwIGNhcGl0YWxlL2NhcGl0YWwgKGhhdXQgZGUgY2Fzc2UvdXBwZXIgY2FzZSkKK2NvbGxhdGluZy1zeW1ib2wgPEFNST4gIyA4IG1pbnVzY3VsZSBncmVjcXVlL0dyZWVrIGxvd2VyIGNhc2UKK2NvbGxhdGluZy1zeW1ib2wgPElDQT4gIyAxMSBpbmbDqXJpZXVyIGVuIGNhcGl0YWxlL3N1YnNjcmlwdCBjYXBpdGFsCitjb2xsYXRpbmctc3ltYm9sIDxFQ0E+ICMgMTIgc3Vww6lyaWV1ciBlbiBjYXBpdGFsZS9zdXBlcnNjcmlwdCBjYXBpdGFsCisjCisjIDxBUkFCSU5UPi88QVJBQkZPUj4KKyMKK2NvbGxhdGluZy1zeW1ib2wgPEFNQT4gIyAxMyBhY2NlbnQgbWFkZGEKK2NvbGxhdGluZy1zeW1ib2wgPEFIQT4gIyAxNCBhY2NlbnQgaGFtemEKK2NvbGxhdGluZy1zeW1ib2wgPEFIVz4gIyAxNC0xIGFjY2VudCBoYW16YS93YXcKK2NvbGxhdGluZy1zeW1ib2wgPEFIUz4gIyAxNC0yIGFjY2VudCBoYW16YSB1bmRlciAvIGhhbXphIHNvdXNjcml0Citjb2xsYXRpbmctc3ltYm9sIDxBWUU+ICMgMTQtMyBhY2NlbnQgdW5kZXIgeWVoIC8gYWNjZW50IHNvdXNjcml0IGR1IHlhJworY29sbGF0aW5nLXN5bWJvbCA8WUJBPiAjIDE0LTQgYWNjZW50IGhhbXphL3llaCBiYXJyZWUKKyMKK2NvbGxhdGluZy1zeW1ib2wgPEJBUz4gIyAxNSBkZSBiYXNlL2Jhc2ljIChub24gYWNjZW50dcOpL25vbi1hY2NlbnRlZCkKKyMKK2NvbGxhdGluZy1zeW1ib2wgPFBDTD4gIyAxNiBwYXJ0aWN1bGllci9wZWN1bGlhcgorY29sbGF0aW5nLXN5bWJvbCA8TElHPiAjIDE3IGxpZ2F0dXJlL2xpZ2F0dXJlCitjb2xsYXRpbmctc3ltYm9sIDxBQ0E+ICMgMTggYWNjZW50IGFpZ3UvYWN1dGUgYWNjZW50Citjb2xsYXRpbmctc3ltYm9sIDxHUkE+ICMgMjAgYWNjZW50IGdyYXZlL2dyYXZlIGFjY2VudAorY29sbGF0aW5nLXN5bWJvbCA8QlJFPiAjIDIxIGJyw6h2ZS9icmV2ZQorY29sbGF0aW5nLXN5bWJvbCA8Q0lSPiAjIDIyIGFjY2VudCBjaXJjb25mbGV4ZS9jaXJjdW1mbGV4IGFjY2VudAorY29sbGF0aW5nLXN5bWJvbCA8Q0FSPiAjIDIzIGNhcm9uL2Nhcm9uCitjb2xsYXRpbmctc3ltYm9sIDxSTkU+ICMgMjQgcm9uZCBzdXDDqXJpZXVyL3JpbmcgYWJvdmUKK2NvbGxhdGluZy1zeW1ib2wgPFJFVT4gIyAyNSB0csOpbWEvZGlhZXJlc2lzIChvdS9vciB1bWxhdXQpCitjb2xsYXRpbmctc3ltYm9sIDxEQUM+ICMgMjYgZG91YmxlIGFjLiBhaWd1L2RvdWJsZSBhY3V0ZSBhYy4KK2NvbGxhdGluZy1zeW1ib2wgPFRJTD4gIyAyNyB0aWxkZS90aWxkZQorY29sbGF0aW5nLXN5bWJvbCA8UENUPiAjIDI4IHBvaW50L2RvdAorY29sbGF0aW5nLXN5bWJvbCA8T0JMPiAjIDI5IGJhcnJlIG9ibGlxdWUvb2JsaXF1ZQorY29sbGF0aW5nLXN5bWJvbCA8Q0RJPiAjIDMwIGPDqWRpbGxlL2NlZGlsbGEKK2NvbGxhdGluZy1zeW1ib2wgPE9HTz4gIyAzMSBvZ29uZWsvb2dvbmVrCitjb2xsYXRpbmctc3ltYm9sIDxNQUM+ICMgMzIgbWFjcm9uL21hY3JvbgorIyBleHRyYSBkaWFjcml0aWNzCitjb2xsYXRpbmctc3ltYm9sIDxIT0s+ICMgaG9vayBhYm92ZSAodmlldG5hbWVzZSB0b25lIG1hcmspCitjb2xsYXRpbmctc3ltYm9sIDxER1I+ICMgZG91YmxlIGdyYXZlCitjb2xsYXRpbmctc3ltYm9sIDxJQlI+ICMgaW52ZXJ0ZWQgYnJldmUKK2NvbGxhdGluZy1zeW1ib2wgPEJQVD4gIyBkb3QgYmVsb3cgKHZpZXRuYW1lc2UgdG9uZSBtYXJrKQorY29sbGF0aW5nLXN5bWJvbCA8QlJVPiAjIGRpYWVyZXNpcyBiZWxvdworY29sbGF0aW5nLXN5bWJvbCA8QlJOPiAjIHJpbmcgYmVsb3cKK2NvbGxhdGluZy1zeW1ib2wgPEJDST4gIyBjaXJjdW1mbGV4IGJlbG93Citjb2xsYXRpbmctc3ltYm9sIDxCQlI+ICMgYnJldmUgYmVsb3cKK2NvbGxhdGluZy1zeW1ib2wgPEJUST4gIyB0aWxkZSBiZWxvdworY29sbGF0aW5nLXN5bWJvbCA8Qk1BPiAjIG1hY3JvbiBiZWxvdworY29sbGF0aW5nLXN5bWJvbCA8Q1JMPiAjIGN1cmxlZCBsZXR0ZXIvbGV0dGVyIHdpdGggaG9vaworIworIyBHUkVDCisjCitjb2xsYXRpbmctc3ltYm9sIDxUTlM+ICMgYWNjZW50IGFpZ3UvdG9ub3MvYWN1dGUgYWNjZW50Citjb2xsYXRpbmctc3ltYm9sIDxETFQ+ICMgdHI8ZSc+bWEvZGlhbHl0aWNhL2RpYWVyZXNpcworY29sbGF0aW5nLXN5bWJvbCA8RFRUPiAjIGRpYWx5dGlrYSB0b25vcworIworY29sbGF0aW5nLXN5bWJvbCA8MD4KK2NvbGxhdGluZy1zeW1ib2wgPDE+Citjb2xsYXRpbmctc3ltYm9sIDwyPgorY29sbGF0aW5nLXN5bWJvbCA8Mz4KK2NvbGxhdGluZy1zeW1ib2wgPDQ+Citjb2xsYXRpbmctc3ltYm9sIDw1PgorY29sbGF0aW5nLXN5bWJvbCA8Nj4KK2NvbGxhdGluZy1zeW1ib2wgPDc+Citjb2xsYXRpbmctc3ltYm9sIDw4PgorY29sbGF0aW5nLXN5bWJvbCA8OT4KKyMKK2NvbGxhdGluZy1zeW1ib2wgPGE+Citjb2xsYXRpbmctc3ltYm9sIDxiPgorY29sbGF0aW5nLXN5bWJvbCA8Yz4KK2NvbGxhdGluZy1zeW1ib2wgPGQ+Citjb2xsYXRpbmctc3ltYm9sIDxlPgorY29sbGF0aW5nLXN5bWJvbCA8Zj4KK2NvbGxhdGluZy1zeW1ib2wgPGc+Citjb2xsYXRpbmctc3ltYm9sIDxoPgorY29sbGF0aW5nLXN5bWJvbCA8aT4KK2NvbGxhdGluZy1zeW1ib2wgPGo+Citjb2xsYXRpbmctc3ltYm9sIDxrPgorY29sbGF0aW5nLXN5bWJvbCA8bD4KK2NvbGxhdGluZy1zeW1ib2wgPG0+Citjb2xsYXRpbmctc3ltYm9sIDxuPgorY29sbGF0aW5nLXN5bWJvbCA8bz4KK2NvbGxhdGluZy1zeW1ib2wgPHA+Citjb2xsYXRpbmctc3ltYm9sIDxxPgorY29sbGF0aW5nLXN5bWJvbCA8cj4KK2NvbGxhdGluZy1zeW1ib2wgPHM+Citjb2xsYXRpbmctc3ltYm9sIDx0PgorY29sbGF0aW5nLXN5bWJvbCA8dT4KK2NvbGxhdGluZy1zeW1ib2wgPHY+Citjb2xsYXRpbmctc3ltYm9sIDx3PgorY29sbGF0aW5nLXN5bWJvbCA8eD4KK2NvbGxhdGluZy1zeW1ib2wgPHk+Citjb2xsYXRpbmctc3ltYm9sIDx6PgorY29sbGF0aW5nLXN5bWJvbCA8dGg+Citjb2xsYXRpbmctc3ltYm9sIDx6aD4KKyMKKyMgPFRJRklOQUdIPgorIworY29sbGF0aW5nLXN5bWJvbCA8VElGLUE+Citjb2xsYXRpbmctc3ltYm9sIDxUSUYtQj4KK2NvbGxhdGluZy1zeW1ib2wgPFRJRi1CSD4KK2NvbGxhdGluZy1zeW1ib2wgPFRJRi1HPgorY29sbGF0aW5nLXN5bWJvbCA8VElGLUdISD4KK2NvbGxhdGluZy1zeW1ib2wgPFRJRi1ESj4KK2NvbGxhdGluZy1zeW1ib2wgPFRJRi1ESjI+Citjb2xsYXRpbmctc3ltYm9sIDxUSUYtRD4KK2NvbGxhdGluZy1zeW1ib2wgPFRJRi1ESD4KK2NvbGxhdGluZy1zeW1ib2wgPFRJRi1ERD4KK2NvbGxhdGluZy1zeW1ib2wgPFRJRi1EREg+Citjb2xsYXRpbmctc3ltYm9sIDxUSUYtRT4KK2NvbGxhdGluZy1zeW1ib2wgPFRJRi1GPgorY29sbGF0aW5nLXN5bWJvbCA8VElGLUs+Citjb2xsYXRpbmctc3ltYm9sIDxUSUYtSzI+Citjb2xsYXRpbmctc3ltYm9sIDxUSUYtS0hIPgorY29sbGF0aW5nLXN5bWJvbCA8VElGLUg+Citjb2xsYXRpbmctc3ltYm9sIDxUSUYtSDI+Citjb2xsYXRpbmctc3ltYm9sIDxUSUYtSDM+Citjb2xsYXRpbmctc3ltYm9sIDxUSUYtSEg+Citjb2xsYXRpbmctc3ltYm9sIDxUSUYtQUE+Citjb2xsYXRpbmctc3ltYm9sIDxUSUYtWD4KK2NvbGxhdGluZy1zeW1ib2wgPFRJRi1YMj4KK2NvbGxhdGluZy1zeW1ib2wgPFRJRi1RPgorY29sbGF0aW5nLXN5bWJvbCA8VElGLVEyPgorY29sbGF0aW5nLXN5bWJvbCA8VElGLUk+Citjb2xsYXRpbmctc3ltYm9sIDxUSUYtSj4KK2NvbGxhdGluZy1zeW1ib2wgPFRJRi1KMj4KK2NvbGxhdGluZy1zeW1ib2wgPFRJRi1KMz4KK2NvbGxhdGluZy1zeW1ib2wgPFRJRi1MPgorY29sbGF0aW5nLXN5bWJvbCA8VElGLU0+Citjb2xsYXRpbmctc3ltYm9sIDxUSUYtTj4KK2NvbGxhdGluZy1zeW1ib2wgPFRJRi1HTj4KK2NvbGxhdGluZy1zeW1ib2wgPFRJRi1ORz4KK2NvbGxhdGluZy1zeW1ib2wgPFRJRi1QPgorY29sbGF0aW5nLXN5bWJvbCA8VElGLVU+Citjb2xsYXRpbmctc3ltYm9sIDxUSUYtUj4KK2NvbGxhdGluZy1zeW1ib2wgPFRJRi1SUj4KK2NvbGxhdGluZy1zeW1ib2wgPFRJRi1HSD4KK2NvbGxhdGluZy1zeW1ib2wgPFRJRi1HSDI+Citjb2xsYXRpbmctc3ltYm9sIDxUSUYtR0gzPgorY29sbGF0aW5nLXN5bWJvbCA8VElGLVM+Citjb2xsYXRpbmctc3ltYm9sIDxUSUYtU1M+Citjb2xsYXRpbmctc3ltYm9sIDxUSUYtQz4KK2NvbGxhdGluZy1zeW1ib2wgPFRJRi1UPgorY29sbGF0aW5nLXN5bWJvbCA8VElGLVRIPgorY29sbGF0aW5nLXN5bWJvbCA8VElGLVRDPgorY29sbGF0aW5nLXN5bWJvbCA8VElGLVRUPgorY29sbGF0aW5nLXN5bWJvbCA8VElGLVY+Citjb2xsYXRpbmctc3ltYm9sIDxUSUYtVz4KK2NvbGxhdGluZy1zeW1ib2wgPFRJRi1ZPgorY29sbGF0aW5nLXN5bWJvbCA8VElGLVo+Citjb2xsYXRpbmctc3ltYm9sIDxUSUYtWjI+Citjb2xsYXRpbmctc3ltYm9sIDxUSUYtWlo+Citjb2xsYXRpbmctc3ltYm9sIDxUSUYtTE1XPgorIworIyA8QVJBQklOVD4vPEFSQUJGT1I+CisjCitjb2xsYXRpbmctc3ltYm9sIDxoYW16YT4KK2NvbGxhdGluZy1zeW1ib2wgPGFsZWY+Citjb2xsYXRpbmctc3ltYm9sIDxiZWg+Citjb2xsYXRpbmctc3ltYm9sIDxwZWg+Citjb2xsYXRpbmctc3ltYm9sIDx0ZWhfbWFyYnV0YT4KK2NvbGxhdGluZy1zeW1ib2wgPHRlaD4KK2NvbGxhdGluZy1zeW1ib2wgPHR0ZWg+Citjb2xsYXRpbmctc3ltYm9sIDx0aGVoPgorY29sbGF0aW5nLXN5bWJvbCA8amVlbT4KK2NvbGxhdGluZy1zeW1ib2wgPHRjaGVoPgorY29sbGF0aW5nLXN5bWJvbCA8aGFoPgorY29sbGF0aW5nLXN5bWJvbCA8a2hhaD4KK2NvbGxhdGluZy1zeW1ib2wgPGRhbD4KK2NvbGxhdGluZy1zeW1ib2wgPGRkYWw+Citjb2xsYXRpbmctc3ltYm9sIDx0aGFsPgorY29sbGF0aW5nLXN5bWJvbCA8cmVoPgorY29sbGF0aW5nLXN5bWJvbCA8cnJlaD4KK2NvbGxhdGluZy1zeW1ib2wgPHphaW4+Citjb2xsYXRpbmctc3ltYm9sIDxqZWg+Citjb2xsYXRpbmctc3ltYm9sIDxzZWVuPgorY29sbGF0aW5nLXN5bWJvbCA8c2hlZW4+Citjb2xsYXRpbmctc3ltYm9sIDxzYWQ+Citjb2xsYXRpbmctc3ltYm9sIDxkYWQ+Citjb2xsYXRpbmctc3ltYm9sIDx0YWg+Citjb2xsYXRpbmctc3ltYm9sIDx6YWg+Citjb2xsYXRpbmctc3ltYm9sIDxhaW4+Citjb2xsYXRpbmctc3ltYm9sIDxnaGFpbj4KK2NvbGxhdGluZy1zeW1ib2wgPGZlaD4KK2NvbGxhdGluZy1zeW1ib2wgPHFhZj4KK2NvbGxhdGluZy1zeW1ib2wgPGthZj4KK2NvbGxhdGluZy1zeW1ib2wgPGtlaGVoPgorY29sbGF0aW5nLXN5bWJvbCA8Z2FmPgorY29sbGF0aW5nLXN5bWJvbCA8bGFtPgorY29sbGF0aW5nLXN5bWJvbCA8bWVlbT4KK2NvbGxhdGluZy1zeW1ib2wgPG5vb24+Citjb2xsYXRpbmctc3ltYm9sIDxub29uX2dodW5uYT4KK2NvbGxhdGluZy1zeW1ib2wgPGhlaD4KK2NvbGxhdGluZy1zeW1ib2wgPGhlaF95ZWg+Citjb2xsYXRpbmctc3ltYm9sIDx3YXc+Citjb2xsYXRpbmctc3ltYm9sIDxhbGVmX21ha3N1cmE+Citjb2xsYXRpbmctc3ltYm9sIDx5ZWhfYmFycmVlPgorIworIyA8SEVCUkVVPgorIworY29sbGF0aW5nLXN5bWJvbCA8YWxlZl9oZWI+Citjb2xsYXRpbmctc3ltYm9sIDxiZXQ+Citjb2xsYXRpbmctc3ltYm9sIDxnaW1lbD4KK2NvbGxhdGluZy1zeW1ib2wgPGRhbGV0PgorY29sbGF0aW5nLXN5bWJvbCA8aGU+Citjb2xsYXRpbmctc3ltYm9sIDx2YXY+Citjb2xsYXRpbmctc3ltYm9sIDx6YXlpbj4KK2NvbGxhdGluZy1zeW1ib2wgPGhldD4KK2NvbGxhdGluZy1zeW1ib2wgPHRldD4KK2NvbGxhdGluZy1zeW1ib2wgPHlvZD4KK2NvbGxhdGluZy1zeW1ib2wgPGthZl9maW4+Citjb2xsYXRpbmctc3ltYm9sIDxrYWZfaGViPgorY29sbGF0aW5nLXN5bWJvbCA8bGFtZWQ+Citjb2xsYXRpbmctc3ltYm9sIDxtZW1fZmluPgorY29sbGF0aW5nLXN5bWJvbCA8bWVtPgorY29sbGF0aW5nLXN5bWJvbCA8bnVuX2Zpbj4KK2NvbGxhdGluZy1zeW1ib2wgPG51bj4KK2NvbGxhdGluZy1zeW1ib2wgPHNhbWVraD4KK2NvbGxhdGluZy1zeW1ib2wgPGF5aW4+Citjb2xsYXRpbmctc3ltYm9sIDxwZV9maW4+Citjb2xsYXRpbmctc3ltYm9sIDxwZT4KK2NvbGxhdGluZy1zeW1ib2wgPHRzYWRpX2Zpbj4KK2NvbGxhdGluZy1zeW1ib2wgPHRzYWRpPgorY29sbGF0aW5nLXN5bWJvbCA8cW9mPgorY29sbGF0aW5nLXN5bWJvbCA8cmVzaD4KK2NvbGxhdGluZy1zeW1ib2wgPHNoaW4+Citjb2xsYXRpbmctc3ltYm9sIDx0YXY+CisjCisjIEdSRUMKKyMKK2NvbGxhdGluZy1zeW1ib2wgPEFMUEhBPgorY29sbGF0aW5nLXN5bWJvbCA8QkVUQT4KK2NvbGxhdGluZy1zeW1ib2wgPEdBTU1BPgorY29sbGF0aW5nLXN5bWJvbCA8REVMVEE+Citjb2xsYXRpbmctc3ltYm9sIDxFUFNJTE9OPgorY29sbGF0aW5nLXN5bWJvbCA8WkVUQT4KK2NvbGxhdGluZy1zeW1ib2wgPEVUQT4KK2NvbGxhdGluZy1zeW1ib2wgPFRIRVRBPgorY29sbGF0aW5nLXN5bWJvbCA8SU9UQT4KK2NvbGxhdGluZy1zeW1ib2wgPEtBUFBBPgorY29sbGF0aW5nLXN5bWJvbCA8TEFNQkRBPgorY29sbGF0aW5nLXN5bWJvbCA8TVU+Citjb2xsYXRpbmctc3ltYm9sIDxOVT4KK2NvbGxhdGluZy1zeW1ib2wgPFhJPgorY29sbGF0aW5nLXN5bWJvbCA8T01JQ1JPTj4KK2NvbGxhdGluZy1zeW1ib2wgPFBJPgorY29sbGF0aW5nLXN5bWJvbCA8UkhPPgorY29sbGF0aW5nLXN5bWJvbCA8U0lHTUE+Citjb2xsYXRpbmctc3ltYm9sIDxUQVU+Citjb2xsYXRpbmctc3ltYm9sIDxVUFNJTE9OPgorY29sbGF0aW5nLXN5bWJvbCA8UEhJPgorY29sbGF0aW5nLXN5bWJvbCA8Q0hJPgorY29sbGF0aW5nLXN5bWJvbCA8UFNJPgorY29sbGF0aW5nLXN5bWJvbCA8T01FR0E+CisjCisjIENZUklMCisjCitjb2xsYXRpbmctc3ltYm9sIDxDWVItQT4KK2NvbGxhdGluZy1zeW1ib2wgPENZUi1CRT4KK2NvbGxhdGluZy1zeW1ib2wgPENZUi1WRT4KK2NvbGxhdGluZy1zeW1ib2wgPENZUi1HSEU+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItREU+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItR1pIRT4KK2NvbGxhdGluZy1zeW1ib2wgPENZUi1ESkU+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItSUU+Citjb2xsYXRpbmctc3ltYm9sIDxVS1ItSUU+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItSU8+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItWkhFPgorY29sbGF0aW5nLXN5bWJvbCA8Q1lSLVpFPgorY29sbGF0aW5nLXN5bWJvbCA8Q1lSLURaRT4KK2NvbGxhdGluZy1zeW1ib2wgPENZUi1JPgorY29sbGF0aW5nLXN5bWJvbCA8VUtSLUk+Citjb2xsYXRpbmctc3ltYm9sIDxVS1ItWUk+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItSUJSRT4KK2NvbGxhdGluZy1zeW1ib2wgPENZUi1KRT4KK2NvbGxhdGluZy1zeW1ib2wgPENZUi1LQT4KK2NvbGxhdGluZy1zeW1ib2wgPENZUi1FTD4KK2NvbGxhdGluZy1zeW1ib2wgPENZUi1MSkU+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItRU0+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItRU4+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItTkpFPgorY29sbGF0aW5nLXN5bWJvbCA8Q1lSLU8+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItUEU+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItRVI+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItRVM+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItVEU+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItS0pFPgorY29sbGF0aW5nLXN5bWJvbCA8Q1lSLVRTSEU+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItT1U+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItT1VCUkU+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItRUY+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItSEE+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItVFNFPgorY29sbGF0aW5nLXN5bWJvbCA8Q1lSLUNIRT4KK2NvbGxhdGluZy1zeW1ib2wgPENZUi1EQ0hFPgorY29sbGF0aW5nLXN5bWJvbCA8Q1lSLVNIQT4KK2NvbGxhdGluZy1zeW1ib2wgPENZUi1TSFRTSEE+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItU0lHRFVSPgorY29sbGF0aW5nLXN5bWJvbCA8Q1lSLVlFUk9VPgorY29sbGF0aW5nLXN5bWJvbCA8Q1lSLVNJR01PVUlMPgorY29sbGF0aW5nLXN5bWJvbCA8Q1lSLUU+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItWU9VPgorY29sbGF0aW5nLXN5bWJvbCA8Q1lSLVlBPgorIworIyBBUk1FTklBTgorIworY29sbGF0aW5nLXN5bWJvbCA8QVJNLUFZQj4KK2NvbGxhdGluZy1zeW1ib2wgPEFSTS1CRU4+Citjb2xsYXRpbmctc3ltYm9sIDxBUk0tR0lNPgorY29sbGF0aW5nLXN5bWJvbCA8QVJNLURBPgorY29sbGF0aW5nLXN5bWJvbCA8QVJNLUVDSD4KK2NvbGxhdGluZy1zeW1ib2wgPEFSTS1aQT4KK2NvbGxhdGluZy1zeW1ib2wgPEFSTS1FPgorY29sbGF0aW5nLXN5bWJvbCA8QVJNLUFUPgorY29sbGF0aW5nLXN5bWJvbCA8QVJNLVRPPgorY29sbGF0aW5nLXN5bWJvbCA8QVJNLVpIRT4KK2NvbGxhdGluZy1zeW1ib2wgPEFSTS1JTkk+Citjb2xsYXRpbmctc3ltYm9sIDxBUk0tTFlVTj4KK2NvbGxhdGluZy1zeW1ib2wgPEFSTS1LSEU+Citjb2xsYXRpbmctc3ltYm9sIDxBUk0tVFNBPgorY29sbGF0aW5nLXN5bWJvbCA8QVJNLUtFTj4KK2NvbGxhdGluZy1zeW1ib2wgPEFSTS1ITz4KK2NvbGxhdGluZy1zeW1ib2wgPEFSTS1EWkE+Citjb2xsYXRpbmctc3ltYm9sIDxBUk0tR0hBVD4KK2NvbGxhdGluZy1zeW1ib2wgPEFSTS1UQ0hFPgorY29sbGF0aW5nLXN5bWJvbCA8QVJNLU1FTj4KK2NvbGxhdGluZy1zeW1ib2wgPEFSTS1IST4KK2NvbGxhdGluZy1zeW1ib2wgPEFSTS1OVT4KK2NvbGxhdGluZy1zeW1ib2wgPEFSTS1TSEE+Citjb2xsYXRpbmctc3ltYm9sIDxBUk0tVk8+Citjb2xsYXRpbmctc3ltYm9sIDxBUk0tQ0hBPgorY29sbGF0aW5nLXN5bWJvbCA8QVJNLVBFPgorY29sbGF0aW5nLXN5bWJvbCA8QVJNLUpFPgorY29sbGF0aW5nLXN5bWJvbCA8QVJNLVJBPgorY29sbGF0aW5nLXN5bWJvbCA8QVJNLVNFPgorY29sbGF0aW5nLXN5bWJvbCA8QVJNLVZFVj4KK2NvbGxhdGluZy1zeW1ib2wgPEFSTS1UWVVOPgorY29sbGF0aW5nLXN5bWJvbCA8QVJNLVJFPgorY29sbGF0aW5nLXN5bWJvbCA8QVJNLVRTTz4KK2NvbGxhdGluZy1zeW1ib2wgPEFSTS1WWVVOPgorY29sbGF0aW5nLXN5bWJvbCA8QVJNLVBZVVI+Citjb2xsYXRpbmctc3ltYm9sIDxBUk0tS0U+Citjb2xsYXRpbmctc3ltYm9sIDxBUk0tTz4KK2NvbGxhdGluZy1zeW1ib2wgPEFSTS1GRT4KKyMKKyMgR0VPUkdJQU4KKyMKK2NvbGxhdGluZy1zeW1ib2wgPEdFT1JHLUFOPgorY29sbGF0aW5nLXN5bWJvbCA8R0VPUkctQkFOPgorY29sbGF0aW5nLXN5bWJvbCA8R0VPUkctR0FOPgorY29sbGF0aW5nLXN5bWJvbCA8R0VPUkctRE9OPgorY29sbGF0aW5nLXN5bWJvbCA8R0VPUkctRU4+Citjb2xsYXRpbmctc3ltYm9sIDxHRU9SRy1WSU4+Citjb2xsYXRpbmctc3ltYm9sIDxHRU9SRy1aRU4+Citjb2xsYXRpbmctc3ltYm9sIDxHRU9SRy1UQU4+Citjb2xsYXRpbmctc3ltYm9sIDxHRU9SRy1JTj4KK2NvbGxhdGluZy1zeW1ib2wgPEdFT1JHLUtBTj4KK2NvbGxhdGluZy1zeW1ib2wgPEdFT1JHLUxBUz4KK2NvbGxhdGluZy1zeW1ib2wgPEdFT1JHLU1BTj4KK2NvbGxhdGluZy1zeW1ib2wgPEdFT1JHLU5BUj4KK2NvbGxhdGluZy1zeW1ib2wgPEdFT1JHLU9OPgorY29sbGF0aW5nLXN5bWJvbCA8R0VPUkctUEFSPgorY29sbGF0aW5nLXN5bWJvbCA8R0VPUkctWkhBUj4KK2NvbGxhdGluZy1zeW1ib2wgPEdFT1JHLVJBRT4KK2NvbGxhdGluZy1zeW1ib2wgPEdFT1JHLVNBTj4KK2NvbGxhdGluZy1zeW1ib2wgPEdFT1JHLVRBUj4KK2NvbGxhdGluZy1zeW1ib2wgPEdFT1JHLVVOPgorY29sbGF0aW5nLXN5bWJvbCA8R0VPUkctUEhBUj4KK2NvbGxhdGluZy1zeW1ib2wgPEdFT1JHLUtIQVI+Citjb2xsYXRpbmctc3ltYm9sIDxHRU9SRy1HSEFOPgorY29sbGF0aW5nLXN5bWJvbCA8R0VPUkctUUFSPgorY29sbGF0aW5nLXN5bWJvbCA8R0VPUkctU0hJTj4KK2NvbGxhdGluZy1zeW1ib2wgPEdFT1JHLUNISU4+Citjb2xsYXRpbmctc3ltYm9sIDxHRU9SRy1DQU4+Citjb2xsYXRpbmctc3ltYm9sIDxHRU9SRy1KSUw+Citjb2xsYXRpbmctc3ltYm9sIDxHRU9SRy1DSUw+Citjb2xsYXRpbmctc3ltYm9sIDxHRU9SRy1DSEFSPgorY29sbGF0aW5nLXN5bWJvbCA8R0VPUkctWEFOPgorY29sbGF0aW5nLXN5bWJvbCA8R0VPUkctSkhBTj4KK2NvbGxhdGluZy1zeW1ib2wgPEdFT1JHLUhBRT4KK2NvbGxhdGluZy1zeW1ib2wgPEdFT1JHLUhFPgorY29sbGF0aW5nLXN5bWJvbCA8R0VPUkctSElFPgorY29sbGF0aW5nLXN5bWJvbCA8R0VPUkctV0U+Citjb2xsYXRpbmctc3ltYm9sIDxHRU9SRy1IQVI+Citjb2xsYXRpbmctc3ltYm9sIDxHRU9SRy1IT0U+Citjb2xsYXRpbmctc3ltYm9sIDxHRU9SRy1GST4KKyMKKyMgPERFVkFOQUdBUkk+CisjCisjIGR2ZC0gZGVub3RlcyB2b3dlbCBtb2RpZmllcgorIyBkbS0gIGRlbm90ZXMgbWF0cmFzCisjIGR2dy0gZGVub3RlcyB2b3dlbHMKKyMgPE5LVD4gZGVub3RlcyBOdWt0YSBjaGFyYWN0ZXJzCisjIDxOVU0+IGRlbm90ZXMgTnVtZXJhbHMKKyMKKyMgZGVmbmluZyBzeW1ib2xzCitjb2xsYXRpbmctc3ltYm9sIDxOVU0+Citjb2xsYXRpbmctc3ltYm9sIDxOS1Q+Citjb2xsYXRpbmctc3ltYm9sIDxkdi1hYmJyZXZhdGlvbj4KK2NvbGxhdGluZy1zeW1ib2wgPGRvbT4KK2NvbGxhdGluZy1zeW1ib2wgPGR2dy1zaG9ydGE+Citjb2xsYXRpbmctc3ltYm9sIDxkdnctYT4KK2NvbGxhdGluZy1zeW1ib2wgPGR2dy1hYT4KK2NvbGxhdGluZy1zeW1ib2wgPGR2dy1pPgorY29sbGF0aW5nLXN5bWJvbCA8ZHZ3LWlpPgorY29sbGF0aW5nLXN5bWJvbCA8ZHZ3LXU+Citjb2xsYXRpbmctc3ltYm9sIDxkdnctdXU+Citjb2xsYXRpbmctc3ltYm9sIDxkdnctdm9jYWxpY3I+Citjb2xsYXRpbmctc3ltYm9sIDxkdnctdm9jYWxpY3JyPgorY29sbGF0aW5nLXN5bWJvbCA8ZHZ3LXZvY2FsaWNsPgorY29sbGF0aW5nLXN5bWJvbCA8ZHZ3LXZvY2FsaWNsbD4KK2NvbGxhdGluZy1zeW1ib2wgPGR2dy1jYW5kcmFlPgorY29sbGF0aW5nLXN5bWJvbCA8ZHZ3LXNob3J0ZT4KK2NvbGxhdGluZy1zeW1ib2wgPGR2dy1lPgorY29sbGF0aW5nLXN5bWJvbCA8ZHZ3LWFpPgorY29sbGF0aW5nLXN5bWJvbCA8ZHZ3LWNhbmRyYW8+Citjb2xsYXRpbmctc3ltYm9sIDxkdnctc2hvcnRvPgorY29sbGF0aW5nLXN5bWJvbCA8ZHZ3LW8+Citjb2xsYXRpbmctc3ltYm9sIDxkdnctYXU+Citjb2xsYXRpbmctc3ltYm9sIDxkX2thPgorY29sbGF0aW5nLXN5bWJvbCA8ZF9raGE+Citjb2xsYXRpbmctc3ltYm9sIDxkX2dhPgorY29sbGF0aW5nLXN5bWJvbCA8ZF9nZ2E+Citjb2xsYXRpbmctc3ltYm9sIDxkX2doYT4KK2NvbGxhdGluZy1zeW1ib2wgPGRfbmdhPgorY29sbGF0aW5nLXN5bWJvbCA8ZF9jYT4KK2NvbGxhdGluZy1zeW1ib2wgPGRfY2hhPgorY29sbGF0aW5nLXN5bWJvbCA8ZF9qYT4KK2NvbGxhdGluZy1zeW1ib2wgPGRfamphPgorY29sbGF0aW5nLXN5bWJvbCA8ZF9qaGE+Citjb2xsYXRpbmctc3ltYm9sIDxkX255YT4KK2NvbGxhdGluZy1zeW1ib2wgPGRfdHRhPgorY29sbGF0aW5nLXN5bWJvbCA8ZF90dGhhPgorY29sbGF0aW5nLXN5bWJvbCA8ZF9kZGE+Citjb2xsYXRpbmctc3ltYm9sIDxkX2RkZGE+Citjb2xsYXRpbmctc3ltYm9sIDxkX2RkaGE+Citjb2xsYXRpbmctc3ltYm9sIDxkX25uYT4KK2NvbGxhdGluZy1zeW1ib2wgPGRfdGE+Citjb2xsYXRpbmctc3ltYm9sIDxkX3RoYT4KK2NvbGxhdGluZy1zeW1ib2wgPGRfZGE+Citjb2xsYXRpbmctc3ltYm9sIDxkX2RoYT4KK2NvbGxhdGluZy1zeW1ib2wgPGRfbmE+Citjb2xsYXRpbmctc3ltYm9sIDxkX3BhPgorY29sbGF0aW5nLXN5bWJvbCA8ZF9waGE+Citjb2xsYXRpbmctc3ltYm9sIDxkX2JhPgorY29sbGF0aW5nLXN5bWJvbCA8ZF9iYmE+Citjb2xsYXRpbmctc3ltYm9sIDxkX2JoYT4KK2NvbGxhdGluZy1zeW1ib2wgPGRfbWE+Citjb2xsYXRpbmctc3ltYm9sIDxkX3lhPgorY29sbGF0aW5nLXN5bWJvbCA8ZF9yYT4KK2NvbGxhdGluZy1zeW1ib2wgPGRfbGE+Citjb2xsYXRpbmctc3ltYm9sIDxkX2xsYT4KK2NvbGxhdGluZy1zeW1ib2wgPGRfdmE+Citjb2xsYXRpbmctc3ltYm9sIDxkX3NoYT4KK2NvbGxhdGluZy1zeW1ib2wgPGRfc3NhPgorY29sbGF0aW5nLXN5bWJvbCA8ZF9zYT4KK2NvbGxhdGluZy1zeW1ib2wgPGRfaGE+Citjb2xsYXRpbmctc3ltYm9sIDxkX2F2YWdyYWg+Citjb2xsYXRpbmctc3ltYm9sIDxkX2dsby1zdG9wPgorY29sbGF0aW5nLXN5bWJvbCA8ZG0tYWE+Citjb2xsYXRpbmctc3ltYm9sIDxkbS1pPgorY29sbGF0aW5nLXN5bWJvbCA8ZG0taWk+Citjb2xsYXRpbmctc3ltYm9sIDxkbS11PgorY29sbGF0aW5nLXN5bWJvbCA8ZG0tdXU+Citjb2xsYXRpbmctc3ltYm9sIDxkbS12b2NhbGljcj4KK2NvbGxhdGluZy1zeW1ib2wgPGRtLXZvY2FsaWNycj4KK2NvbGxhdGluZy1zeW1ib2wgPGRtLXZvY2FsaWNsPgorY29sbGF0aW5nLXN5bWJvbCA8ZG0tdm9jYWxpY2xsPgorY29sbGF0aW5nLXN5bWJvbCA8ZG0tY2FuZHJhZT4KK2NvbGxhdGluZy1zeW1ib2wgPGRtLXNob3J0ZT4KK2NvbGxhdGluZy1zeW1ib2wgPGRtLWU+Citjb2xsYXRpbmctc3ltYm9sIDxkbS1haT4KK2NvbGxhdGluZy1zeW1ib2wgPGRtLWNhbmRyYW8+Citjb2xsYXRpbmctc3ltYm9sIDxkbS1zaG9ydG8+Citjb2xsYXRpbmctc3ltYm9sIDxkbS1vPgorY29sbGF0aW5nLXN5bWJvbCA8ZG0tYXU+Citjb2xsYXRpbmctc3ltYm9sIDxkdmQtYW51c3dhcmE+Citjb2xsYXRpbmctc3ltYm9sIDxkdmQtY2hhbmRyYWJpbmR1PgorY29sbGF0aW5nLXN5bWJvbCA8ZHZkLXZpc2FyZz4KK2NvbGxhdGluZy1zeW1ib2wgPGRfaGFsYW50PgorY29sbGF0aW5nLXN5bWJvbCA8ZF91ZGF0dGE+Citjb2xsYXRpbmctc3ltYm9sIDxkX2FudWRhdHRhPgorY29sbGF0aW5nLXN5bWJvbCA8ZHYtZ3JhdmU+Citjb2xsYXRpbmctc3ltYm9sIDxkdi1hY3V0ZT4KKworIzxHVUpBUkFUST4KKyMKKyMgQWRkZWQgQWtoYW5kIENoYXJhY3RlcnMgaW4gc29ydGluZyBhcyBwZXIgcmVxdWlyZW1lbnQgb2YgbXJfSU4KKyMgZ3ZkLSBkZW5vdGVzIHZvd2VsIG1vZGlmaWVyCisjIGdtLSAgZGVub3RlcyBtYXRyYXMKKyMgZ3Z3LSBkZW5vdGVzIHZvd2VscworIyA8R05LVD4gZGVub3RlcyBOdWt0YSBjaGFyYWN0ZXJzCisKK2NvbGxhdGluZy1lbGVtZW50IDxndS1rc2hhPiBmcm9tICI8VTBBOTU+PFUwQUNEPjxVMEFCNz4iCitjb2xsYXRpbmctZWxlbWVudCA8Z3UtZG55YT4gZnJvbSAiPFUwQTlDPjxVMEFDRD48VTBBOUU+IgorY29sbGF0aW5nLWVsZW1lbnQgPGd1LXNocmE+IGZyb20gIjxVMEFCNj48VTBBQ0Q+PFUwQUIwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxndS10cmE+ICBmcm9tICI8VTBBQTQ+PFUwQUNEPjxVMEFCMD4iCisKKyMgZGVmbmluZyBzeW1ib2xzCitjb2xsYXRpbmctc3ltYm9sIDxHTktUPgorY29sbGF0aW5nLXN5bWJvbCA8Z29tPgorY29sbGF0aW5nLXN5bWJvbCA8Z3Z3LWE+Citjb2xsYXRpbmctc3ltYm9sIDxndnctYWE+Citjb2xsYXRpbmctc3ltYm9sIDxndnctaT4KK2NvbGxhdGluZy1zeW1ib2wgPGd2dy1paT4KK2NvbGxhdGluZy1zeW1ib2wgPGd2dy11PgorY29sbGF0aW5nLXN5bWJvbCA8Z3Z3LXV1PgorY29sbGF0aW5nLXN5bWJvbCA8Z3Z3LXZvY2FsaWNyPgorY29sbGF0aW5nLXN5bWJvbCA8Z3Z3LXZvY2FsaWNycj4KK2NvbGxhdGluZy1zeW1ib2wgPGd2dy12b2NhbGljbD4KK2NvbGxhdGluZy1zeW1ib2wgPGd2dy12b2NhbGljbGw+Citjb2xsYXRpbmctc3ltYm9sIDxndnctY2FuZHJhZT4KK2NvbGxhdGluZy1zeW1ib2wgPGd2dy1lPgorY29sbGF0aW5nLXN5bWJvbCA8Z3Z3LWFpPgorY29sbGF0aW5nLXN5bWJvbCA8Z3Z3LWNhbmRyYW8+Citjb2xsYXRpbmctc3ltYm9sIDxndnctbz4KK2NvbGxhdGluZy1zeW1ib2wgPGd2dy1hdT4KK2NvbGxhdGluZy1zeW1ib2wgPGcta2E+Citjb2xsYXRpbmctc3ltYm9sIDxnLWtoYT4KK2NvbGxhdGluZy1zeW1ib2wgPGctZ2E+Citjb2xsYXRpbmctc3ltYm9sIDxnLWdoYT4KK2NvbGxhdGluZy1zeW1ib2wgPGctbmdhPgorY29sbGF0aW5nLXN5bWJvbCA8Zy1jYT4KK2NvbGxhdGluZy1zeW1ib2wgPGctY2hhPgorY29sbGF0aW5nLXN5bWJvbCA8Zy1qYT4KK2NvbGxhdGluZy1zeW1ib2wgPGctamhhPgorY29sbGF0aW5nLXN5bWJvbCA8Zy1ueWE+Citjb2xsYXRpbmctc3ltYm9sIDxnLXR0YT4KK2NvbGxhdGluZy1zeW1ib2wgPGctdHRoYT4KK2NvbGxhdGluZy1zeW1ib2wgPGctZGRhPgorY29sbGF0aW5nLXN5bWJvbCA8Zy1kZGhhPgorY29sbGF0aW5nLXN5bWJvbCA8Zy1ubmE+Citjb2xsYXRpbmctc3ltYm9sIDxnLXRhPgorY29sbGF0aW5nLXN5bWJvbCA8Zy10aGE+Citjb2xsYXRpbmctc3ltYm9sIDxnLWRhPgorY29sbGF0aW5nLXN5bWJvbCA8Zy1kaGE+Citjb2xsYXRpbmctc3ltYm9sIDxnLW5hPgorY29sbGF0aW5nLXN5bWJvbCA8Zy1wYT4KK2NvbGxhdGluZy1zeW1ib2wgPGctcGhhPgorY29sbGF0aW5nLXN5bWJvbCA8Zy1iYT4KK2NvbGxhdGluZy1zeW1ib2wgPGctYmhhPgorY29sbGF0aW5nLXN5bWJvbCA8Zy1tYT4KK2NvbGxhdGluZy1zeW1ib2wgPGcteWE+Citjb2xsYXRpbmctc3ltYm9sIDxnLXJhPgorY29sbGF0aW5nLXN5bWJvbCA8Zy1sYT4KK2NvbGxhdGluZy1zeW1ib2wgPGctbGxhPgorY29sbGF0aW5nLXN5bWJvbCA8Zy12YT4KK2NvbGxhdGluZy1zeW1ib2wgPGctc2hhPgorY29sbGF0aW5nLXN5bWJvbCA8Zy1zc2E+Citjb2xsYXRpbmctc3ltYm9sIDxnLXNhPgorY29sbGF0aW5nLXN5bWJvbCA8Zy1oYT4KK2NvbGxhdGluZy1zeW1ib2wgPGcta3NoYT4KK2NvbGxhdGluZy1zeW1ib2wgPGctZG55YT4KK2NvbGxhdGluZy1zeW1ib2wgPGctc2hyYT4KK2NvbGxhdGluZy1zeW1ib2wgPGctdHJhPgorY29sbGF0aW5nLXN5bWJvbCA8Zy1hdmFncmFoPgorY29sbGF0aW5nLXN5bWJvbCA8Z20tYWE+Citjb2xsYXRpbmctc3ltYm9sIDxnbS1pPgorY29sbGF0aW5nLXN5bWJvbCA8Z20taWk+Citjb2xsYXRpbmctc3ltYm9sIDxnbS11PgorY29sbGF0aW5nLXN5bWJvbCA8Z20tdXU+Citjb2xsYXRpbmctc3ltYm9sIDxnbS12b2NhbGljcj4KK2NvbGxhdGluZy1zeW1ib2wgPGdtLXZvY2FsaWNycj4KK2NvbGxhdGluZy1zeW1ib2wgPGdtLXZvY2FsaWNsPgorY29sbGF0aW5nLXN5bWJvbCA8Z20tdm9jYWxpY2xsPgorY29sbGF0aW5nLXN5bWJvbCA8Z20tY2FuZHJhZT4KK2NvbGxhdGluZy1zeW1ib2wgPGdtLWU+Citjb2xsYXRpbmctc3ltYm9sIDxnbS1haT4KK2NvbGxhdGluZy1zeW1ib2wgPGdtLWNhbmRyYW8+Citjb2xsYXRpbmctc3ltYm9sIDxnbS1vPgorY29sbGF0aW5nLXN5bWJvbCA8Z20tYXU+Citjb2xsYXRpbmctc3ltYm9sIDxndmQtYW51c3dhcmE+Citjb2xsYXRpbmctc3ltYm9sIDxndmQtY2hhbmRyYWJpbmR1PgorY29sbGF0aW5nLXN5bWJvbCA8Z3ZkLXZpc2FyZz4KK2NvbGxhdGluZy1zeW1ib2wgPGctaGFsYW50PgorCisjIDxURUxVR1U+CisjCisjIHR2ZCAtIGRlbm90ZXMgVGVsdWd1IHZvd2VsIG1vZGlmaWVyCisjIHRtICAtICBkZW5vdGVzIFRlbHVndSBtYXRyYXMKKyMgdHZ3IC0gZGVub3RlcyBUZWx1Z3Ugdm93ZWxzCisKKyMgZGVmaW5pbmcgc3ltYm9scworY29sbGF0aW5nLXN5bWJvbCA8dHVtbXU+Citjb2xsYXRpbmctc3ltYm9sIDx0dnctYT4KK2NvbGxhdGluZy1zeW1ib2wgPHR2dy1hYT4KK2NvbGxhdGluZy1zeW1ib2wgPHR2dy1pPgorY29sbGF0aW5nLXN5bWJvbCA8dHZ3LWlpPgorY29sbGF0aW5nLXN5bWJvbCA8dHZ3LXU+Citjb2xsYXRpbmctc3ltYm9sIDx0dnctdXU+Citjb2xsYXRpbmctc3ltYm9sIDx0dnctdm9jYWxpY3I+Citjb2xsYXRpbmctc3ltYm9sIDx0dnctdm9jYWxpY3JyPgorY29sbGF0aW5nLXN5bWJvbCA8dHZ3LXZvY2FsaWNsPgorY29sbGF0aW5nLXN5bWJvbCA8dHZ3LXZvY2FsaWNsbD4KK2NvbGxhdGluZy1zeW1ib2wgPHR2dy1jYW5kcmFlPgorY29sbGF0aW5nLXN5bWJvbCA8dHZ3LXNob3J0ZT4KK2NvbGxhdGluZy1zeW1ib2wgPHR2dy1lPgorY29sbGF0aW5nLXN5bWJvbCA8dHZ3LWFpPgorY29sbGF0aW5nLXN5bWJvbCA8dHZ3LXNob3J0bz4KK2NvbGxhdGluZy1zeW1ib2wgPHR2dy1vPgorY29sbGF0aW5nLXN5bWJvbCA8dHZ3LWF1PgorY29sbGF0aW5nLXN5bWJvbCA8dC1rYT4KK2NvbGxhdGluZy1zeW1ib2wgPHQta2hhPgorY29sbGF0aW5nLXN5bWJvbCA8dC1nYT4KK2NvbGxhdGluZy1zeW1ib2wgPHQtZ2dhPgorY29sbGF0aW5nLXN5bWJvbCA8dC1naGE+Citjb2xsYXRpbmctc3ltYm9sIDx0LW5nYT4KK2NvbGxhdGluZy1zeW1ib2wgPHQtY2E+Citjb2xsYXRpbmctc3ltYm9sIDx0LXRzYT4KK2NvbGxhdGluZy1zeW1ib2wgPHQtY2hhPgorY29sbGF0aW5nLXN5bWJvbCA8dC1qYT4KK2NvbGxhdGluZy1zeW1ib2wgPHQtZHphPgorY29sbGF0aW5nLXN5bWJvbCA8dC1qamE+Citjb2xsYXRpbmctc3ltYm9sIDx0LWpoYT4KK2NvbGxhdGluZy1zeW1ib2wgPHQtbnlhPgorY29sbGF0aW5nLXN5bWJvbCA8dC10dGE+Citjb2xsYXRpbmctc3ltYm9sIDx0LXR0aGE+Citjb2xsYXRpbmctc3ltYm9sIDx0LWRkYT4KK2NvbGxhdGluZy1zeW1ib2wgPHQtZGRkYT4KK2NvbGxhdGluZy1zeW1ib2wgPHQtZGRoYT4KK2NvbGxhdGluZy1zeW1ib2wgPHQtbm5hPgorY29sbGF0aW5nLXN5bWJvbCA8dC10YT4KK2NvbGxhdGluZy1zeW1ib2wgPHQtdGhhPgorY29sbGF0aW5nLXN5bWJvbCA8dC1kYT4KK2NvbGxhdGluZy1zeW1ib2wgPHQtZGhhPgorY29sbGF0aW5nLXN5bWJvbCA8dC1uYT4KK2NvbGxhdGluZy1zeW1ib2wgPHQtcGE+Citjb2xsYXRpbmctc3ltYm9sIDx0LXBoYT4KK2NvbGxhdGluZy1zeW1ib2wgPHQtYmE+Citjb2xsYXRpbmctc3ltYm9sIDx0LWJiYT4KK2NvbGxhdGluZy1zeW1ib2wgPHQtYmhhPgorY29sbGF0aW5nLXN5bWJvbCA8dC1tYT4KK2NvbGxhdGluZy1zeW1ib2wgPHQteWE+Citjb2xsYXRpbmctc3ltYm9sIDx0LXJhPgorY29sbGF0aW5nLXN5bWJvbCA8dC1ycmE+Citjb2xsYXRpbmctc3ltYm9sIDx0LWxhPgorY29sbGF0aW5nLXN5bWJvbCA8dC1sbGE+Citjb2xsYXRpbmctc3ltYm9sIDx0LXZhPgorY29sbGF0aW5nLXN5bWJvbCA8dC1zaGE+Citjb2xsYXRpbmctc3ltYm9sIDx0LXNzYT4KK2NvbGxhdGluZy1zeW1ib2wgPHQtc2E+Citjb2xsYXRpbmctc3ltYm9sIDx0LWhhPgorY29sbGF0aW5nLXN5bWJvbCA8dC1hdmFncmFoPgorY29sbGF0aW5nLXN5bWJvbCA8dG0tYWE+Citjb2xsYXRpbmctc3ltYm9sIDx0bS1pPgorY29sbGF0aW5nLXN5bWJvbCA8dG0taWk+Citjb2xsYXRpbmctc3ltYm9sIDx0bS11PgorY29sbGF0aW5nLXN5bWJvbCA8dG0tdXU+Citjb2xsYXRpbmctc3ltYm9sIDx0bS12b2NhbGljcj4KK2NvbGxhdGluZy1zeW1ib2wgPHRtLXZvY2FsaWNycj4KK2NvbGxhdGluZy1zeW1ib2wgPHRtLXZvY2FsaWNsPgorY29sbGF0aW5nLXN5bWJvbCA8dG0tdm9jYWxpY2xsPgorY29sbGF0aW5nLXN5bWJvbCA8dG0tc2hvcnRlPgorY29sbGF0aW5nLXN5bWJvbCA8dG0tZT4KK2NvbGxhdGluZy1zeW1ib2wgPHRtLWFpPgorY29sbGF0aW5nLXN5bWJvbCA8dG0tc2hvcnRvPgorY29sbGF0aW5nLXN5bWJvbCA8dG0tbz4KK2NvbGxhdGluZy1zeW1ib2wgPHRtLWF1PgorY29sbGF0aW5nLXN5bWJvbCA8dHZkLWNoYW5kcmFiaW5kdT4KK2NvbGxhdGluZy1zeW1ib2wgPHR2ZC1hbnVzd2FyYT4KK2NvbGxhdGluZy1zeW1ib2wgPHR2ZC12aXNhcmc+Citjb2xsYXRpbmctc3ltYm9sIDx0LWhhbGFudD4KK2NvbGxhdGluZy1zeW1ib2wgPHQtbGVuZ2h0bWFyaz4KK2NvbGxhdGluZy1zeW1ib2wgPHQtYWlsZW5naHRtYXJrPgorCisjPEdVUlVNVUtIST4KKyMKKyMgcG0gLSBkZW5vdGVzIHBhbmphYmkgbWF0cmFzCisjIHB2dyAtIHBhbmphYmkgZGVub3RlcyB2b3dlbHMKKyMgcGF2ZCAtIGRlbm90ZXMgcGFuamFiaSB2b3dlbCBtb2RpZmllcgorIyBQTktUIC0gUHVuamFiaSBOdWt0YQorCisjIGRlZm5pbmcgc3ltYm9scworY29sbGF0aW5nLXN5bWJvbCA8UE5LVD4KK2NvbGxhdGluZy1zeW1ib2wgPGFkaS1zaGFrdGk+Citjb2xsYXRpbmctc3ltYm9sIDxvbmthcj4KK2NvbGxhdGluZy1zeW1ib2wgPHVyYT4KK2NvbGxhdGluZy1zeW1ib2wgPHBhdnctdT4KK2NvbGxhdGluZy1zeW1ib2wgPHBhdnctdXU+Citjb2xsYXRpbmctc3ltYm9sIDxwYXZ3LW8+Citjb2xsYXRpbmctc3ltYm9sIDxwYXZ3LWE+Citjb2xsYXRpbmctc3ltYm9sIDxwYXZ3LWFhPgorY29sbGF0aW5nLXN5bWJvbCA8cGF2dy1haT4KK2NvbGxhdGluZy1zeW1ib2wgPHBhdnctYXU+Citjb2xsYXRpbmctc3ltYm9sIDxpcmk+Citjb2xsYXRpbmctc3ltYm9sIDxwYXZ3LWk+Citjb2xsYXRpbmctc3ltYm9sIDxwYXZ3LWlpPgorY29sbGF0aW5nLXN5bWJvbCA8cGF2dy1lPgorY29sbGF0aW5nLXN5bWJvbCA8cGEtc2E+Citjb2xsYXRpbmctc3ltYm9sIDxwYS1oYT4KK2NvbGxhdGluZy1zeW1ib2wgPHBhLXVkYXR0YT4KK2NvbGxhdGluZy1zeW1ib2wgPHBhLWthPgorY29sbGF0aW5nLXN5bWJvbCA8cGEta2hhPgorY29sbGF0aW5nLXN5bWJvbCA8cGEtZ2E+Citjb2xsYXRpbmctc3ltYm9sIDxwYS1naGE+Citjb2xsYXRpbmctc3ltYm9sIDxwYS1uZ2E+Citjb2xsYXRpbmctc3ltYm9sIDxwYS1jYT4KK2NvbGxhdGluZy1zeW1ib2wgPHBhLWNoYT4KK2NvbGxhdGluZy1zeW1ib2wgPHBhLWphPgorY29sbGF0aW5nLXN5bWJvbCA8cGEtamhhPgorY29sbGF0aW5nLXN5bWJvbCA8cGEtbnlhPgorY29sbGF0aW5nLXN5bWJvbCA8cGEtdHRhPgorY29sbGF0aW5nLXN5bWJvbCA8cGEtdHRoYT4KK2NvbGxhdGluZy1zeW1ib2wgPHBhLWRkYT4KK2NvbGxhdGluZy1zeW1ib2wgPHBhLWRkaGE+Citjb2xsYXRpbmctc3ltYm9sIDxwYS1ubmE+Citjb2xsYXRpbmctc3ltYm9sIDxwYS10YT4KK2NvbGxhdGluZy1zeW1ib2wgPHBhLXRoYT4KK2NvbGxhdGluZy1zeW1ib2wgPHBhLWRhPgorY29sbGF0aW5nLXN5bWJvbCA8cGEtZGhhPgorY29sbGF0aW5nLXN5bWJvbCA8cGEtbmE+Citjb2xsYXRpbmctc3ltYm9sIDxwYS1wYT4KK2NvbGxhdGluZy1zeW1ib2wgPHBhLXBoYT4KK2NvbGxhdGluZy1zeW1ib2wgPHBhLWJhPgorY29sbGF0aW5nLXN5bWJvbCA8cGEtYmhhPgorY29sbGF0aW5nLXN5bWJvbCA8cGEtbWE+Citjb2xsYXRpbmctc3ltYm9sIDxwYS15YT4KK2NvbGxhdGluZy1zeW1ib2wgPHNpZ24teWFrYXNoPgorY29sbGF0aW5nLXN5bWJvbCA8cGEtcmE+Citjb2xsYXRpbmctc3ltYm9sIDxwYS1sYT4KK2NvbGxhdGluZy1zeW1ib2wgPHBhLXZhPgorY29sbGF0aW5nLXN5bWJvbCA8cGEtcnJhPgorY29sbGF0aW5nLXN5bWJvbCA8cGFtLWFhPgorY29sbGF0aW5nLXN5bWJvbCA8cGFtLWk+Citjb2xsYXRpbmctc3ltYm9sIDxwYW0taWk+Citjb2xsYXRpbmctc3ltYm9sIDxwYW0tdT4KK2NvbGxhdGluZy1zeW1ib2wgPHBhbS11dT4KK2NvbGxhdGluZy1zeW1ib2wgPHBhbS1lPgorY29sbGF0aW5nLXN5bWJvbCA8cGFtLWFpPgorY29sbGF0aW5nLXN5bWJvbCA8cGFtLW8+Citjb2xsYXRpbmctc3ltYm9sIDxwYW0tYXU+Citjb2xsYXRpbmctc3ltYm9sIDxwYXZkLWFkYWtiaW5kaT4KK2NvbGxhdGluZy1zeW1ib2wgPHBhdmQtYmluZGk+Citjb2xsYXRpbmctc3ltYm9sIDxwYXZkLXZpc2FyZz4KK2NvbGxhdGluZy1zeW1ib2wgPHRpcHBpPgorY29sbGF0aW5nLXN5bWJvbCA8YWRhaz4KK2NvbGxhdGluZy1zeW1ib2wgPHBhLWhhbGFudD4KKworIzxLQU5OQURBPgorIworIyBrdmQtIGRlbm90ZXMgdm93ZWwgbW9kaWZpZXIKKyMga20tICBkZW5vdGVzIG1hdHJhcworIyBrdnctIGRlbm90ZXMgdm93ZWxzCisjIDxLTktUPiBkZW5vdGVzIE51a3RhIGNoYXJhY3RlcnMKKworY29sbGF0aW5nLWVsZW1lbnQgPGtuLXNpZ25faWk+IGZyb20gIjxVMENCRj48VTBDRDU+IgorY29sbGF0aW5nLWVsZW1lbnQgPGtuLXNpZ25fZT4gZnJvbSAiPFUwQ0M2PjxVMENENT4iCitjb2xsYXRpbmctZWxlbWVudCA8a24tc2lnbl9vPiBmcm9tICI8VTBDQzY+PFUwQ0MyPjxVMENENT4iCitjb2xsYXRpbmctZWxlbWVudCA8a24tc2lnbjFfbz4gZnJvbSAiPFUwQ0NBPjxVMENENT4iCitjb2xsYXRpbmctZWxlbWVudCA8a24tc2lnbl9zaG9ydG8+IGZyb20gIjxVMENDNj48VTBDQzI+IgorY29sbGF0aW5nLWVsZW1lbnQgPGtuLXNpZ25fYWk+IGZyb20gIjxVMENDNj48VTBDRDY+IgorCisjIGRlZm5pbmcgc3ltYm9scworCitjb2xsYXRpbmctc3ltYm9sIDxzaWduLWppaHZhbXVsaXlhPgorY29sbGF0aW5nLXN5bWJvbCA8c2lnbi11cGFkaG1hbml5YT4KK2NvbGxhdGluZy1zeW1ib2wgPEtOS1Q+Citjb2xsYXRpbmctc3ltYm9sIDxrdnctYT4KK2NvbGxhdGluZy1zeW1ib2wgPGt2dy1hYT4KK2NvbGxhdGluZy1zeW1ib2wgPGt2dy1pPgorY29sbGF0aW5nLXN5bWJvbCA8a3Z3LWlpPgorY29sbGF0aW5nLXN5bWJvbCA8a3Z3LXU+Citjb2xsYXRpbmctc3ltYm9sIDxrdnctdXU+Citjb2xsYXRpbmctc3ltYm9sIDxrdnctdm9jYWxpY3I+Citjb2xsYXRpbmctc3ltYm9sIDxrdnctdm9jYWxpY3JyPgorY29sbGF0aW5nLXN5bWJvbCA8a3Z3LXZvY2FsaWNsPgorY29sbGF0aW5nLXN5bWJvbCA8a3Z3LXZvY2FsaWNsbD4KK2NvbGxhdGluZy1zeW1ib2wgPGt2dy1zaG9ydGU+Citjb2xsYXRpbmctc3ltYm9sIDxrdnctZT4KK2NvbGxhdGluZy1zeW1ib2wgPGt2dy1haT4KK2NvbGxhdGluZy1zeW1ib2wgPGt2dy1zaG9ydG8+Citjb2xsYXRpbmctc3ltYm9sIDxrdnctbz4KK2NvbGxhdGluZy1zeW1ib2wgPGt2dy1hdT4KK2NvbGxhdGluZy1zeW1ib2wgPGsta2E+Citjb2xsYXRpbmctc3ltYm9sIDxrLWtoYT4KK2NvbGxhdGluZy1zeW1ib2wgPGstZ2E+Citjb2xsYXRpbmctc3ltYm9sIDxrLWdoYT4KK2NvbGxhdGluZy1zeW1ib2wgPGstbmdhPgorY29sbGF0aW5nLXN5bWJvbCA8ay1jYT4KK2NvbGxhdGluZy1zeW1ib2wgPGstY2hhPgorY29sbGF0aW5nLXN5bWJvbCA8ay1qYT4KK2NvbGxhdGluZy1zeW1ib2wgPGstamhhPgorY29sbGF0aW5nLXN5bWJvbCA8ay1ueWE+Citjb2xsYXRpbmctc3ltYm9sIDxrLXR0YT4KK2NvbGxhdGluZy1zeW1ib2wgPGstdHRoYT4KK2NvbGxhdGluZy1zeW1ib2wgPGstZGRhPgorY29sbGF0aW5nLXN5bWJvbCA8ay1kZGhhPgorY29sbGF0aW5nLXN5bWJvbCA8ay1ubmE+Citjb2xsYXRpbmctc3ltYm9sIDxrLXRhPgorY29sbGF0aW5nLXN5bWJvbCA8ay10aGE+Citjb2xsYXRpbmctc3ltYm9sIDxrLWRhPgorY29sbGF0aW5nLXN5bWJvbCA8ay1kaGE+Citjb2xsYXRpbmctc3ltYm9sIDxrLW5hPgorY29sbGF0aW5nLXN5bWJvbCA8ay1wYT4KK2NvbGxhdGluZy1zeW1ib2wgPGstcGhhPgorY29sbGF0aW5nLXN5bWJvbCA8ay1iYT4KK2NvbGxhdGluZy1zeW1ib2wgPGstYmhhPgorY29sbGF0aW5nLXN5bWJvbCA8ay1tYT4KK2NvbGxhdGluZy1zeW1ib2wgPGsteWE+Citjb2xsYXRpbmctc3ltYm9sIDxrLXJhPgorY29sbGF0aW5nLXN5bWJvbCA8ay1ycmE+Citjb2xsYXRpbmctc3ltYm9sIDxrLWxhPgorY29sbGF0aW5nLXN5bWJvbCA8ay12YT4KK2NvbGxhdGluZy1zeW1ib2wgPGstc2hhPgorY29sbGF0aW5nLXN5bWJvbCA8ay1zc2E+Citjb2xsYXRpbmctc3ltYm9sIDxrLXNhPgorY29sbGF0aW5nLXN5bWJvbCA8ay1oYT4KK2NvbGxhdGluZy1zeW1ib2wgPGstbGxhPgorY29sbGF0aW5nLXN5bWJvbCA8ay1mYT4KK2NvbGxhdGluZy1zeW1ib2wgPGstYXZhZ3JhaD4KK2NvbGxhdGluZy1zeW1ib2wgPGttLWFhPgorY29sbGF0aW5nLXN5bWJvbCA8a20taT4KK2NvbGxhdGluZy1zeW1ib2wgPGttLWlpPgorY29sbGF0aW5nLXN5bWJvbCA8a20tdT4KK2NvbGxhdGluZy1zeW1ib2wgPGttLXV1PgorY29sbGF0aW5nLXN5bWJvbCA8a20tdm9jYWxpY3I+Citjb2xsYXRpbmctc3ltYm9sIDxrbS12b2NhbGljcnI+Citjb2xsYXRpbmctc3ltYm9sIDxrbS12b2NhbGljbD4KK2NvbGxhdGluZy1zeW1ib2wgPGttLXZvY2FsaWNsbD4KK2NvbGxhdGluZy1zeW1ib2wgPGttLXNob3J0ZT4KK2NvbGxhdGluZy1zeW1ib2wgPGttLWU+Citjb2xsYXRpbmctc3ltYm9sIDxrbS1haT4KK2NvbGxhdGluZy1zeW1ib2wgPGttLXNob3J0bz4KK2NvbGxhdGluZy1zeW1ib2wgPGttLW8+Citjb2xsYXRpbmctc3ltYm9sIDxrbS1hdT4KK2NvbGxhdGluZy1zeW1ib2wgPGt2ZC1hbnVzd2FyYT4KK2NvbGxhdGluZy1zeW1ib2wgPGt2ZC12aXNhcmc+Citjb2xsYXRpbmctc3ltYm9sIDxrLWhhbGFudD4KK2NvbGxhdGluZy1zeW1ib2wgPGstbGVuZ2h0X21hcms+Citjb2xsYXRpbmctc3ltYm9sIDxrLWFpX2xlbmdodF9tYXJrPgorCisjIE9yZHJlIGRlcyBzeW1ib2xlcyBpbnRlcm5lcyAvIE9yZGVyIG9mIGludGVybmFsIHN5bWJvbHMKKyMKKyMgU1lNQi4gTsKwCisjCis8UkVTLTE+Cis8TUlOPgorIyBmb3JtZSBkZSBiYXNlIChiYXMgZGUgY2Fzc2UsIGFyYWJlIGludHJpbnPDqHF1ZSwKKyMgaMOpYnJldSBpbnRyaW5zw6hxdWUsIGV0Yy4KKyMgYmFzaWMgZm9ybSAobG93ZXIgY2FzZSwgaW50cmluc2ljIEFyYWJpYworIyBpbnRyaW5zaWMgSGVicmV3IGFuZCBzbyBvbikKKyMKKyMgPEFSQUJJTlQ+LzxBUkFCRk9SPgorIworIworPEFOTz4gIyB2b2lyCis8QUlTPiAjIGlzb2wuCisjIDMKKzxBRkk+ICMgZmluYWwKKyMgNAorPEFJST4gIyBpbml0aWFsCisjIDUKKzxBTUU+ICMgbWVkaWFsL208ZSc+ZGlhbgorIyA2CisjCis8SU1JPiAjIDcKKzxFTUk+ICMgOAorPENBUD4gIyA5Cis8SUNBPiAjIDEwCis8RUNBPiAjIDExCis8QU1JPgorI2FsdGVybmF0ZSBsb3dlciBjYXNlLworIyAxMgorIworI21pbnVzY3VsZXMgc3DDqWNpYWxlcyBhcHLDqHMgbWFqdXNjdWxlcworIyA8QVJBQklOVD4vPEFSQUJGT1I+CisjCis8QU1BPiAjIGFjY2VudCBtYWRkYSAjMTMKKzxBSEE+ICMgYWNjZW50IGhhbXphICMxNAorPEFIVz4gIyBhY2NlbnQgaGFtemEvd2F3ICMxNCAxCis8QUhTPiAjIGFjY2VudCBoYW16YSB1bmRlciAvIGhhbXphIHNvdXNjcml0ICMxNCAyCis8QVlFPiAjIGFjY2VudCB1bmRlciB5ZWggLyBhY2NlbnQgc291c2NyaXQgZHUgeWEnICMxNCAzCis8WUJBPiAjIGFjY2VudCBoYW16YS95ZWggYmFycmVlICMxNCA0CisjCis8QkFTPiAjIDE1CisjCis8QUNBPiAjIDE4Cis8R1JBPiAjIDE5Cis8QlJFPiAjIDIwCis8Q0lSPiAjIDIxCis8Q0FSPiAjIDIyCis8Uk5FPiAjIDIzCis8UkVVPiAjIDI0Cis8REFDPiAjIDI1Cis8VElMPiAjIDI2Cis8UENUPiAjIDI3Cis8T0JMPiAjIDI4Cis8Q0RJPiAjIDI5Cis8T0dPPiAjIDMwCis8TUFDPiAjIDMxCisjIGV4dHJhIGRpYWNyaXRpY3MKKzxIT0s+ICMgaG9vayBhYm92ZSAodmlldG5hbWVzZSB0b25lIG1hcmspCis8REdSPiAjIGRvdWJsZSBncmF2ZQorPElCUj4gIyBpbnZlcnRlZCBicmV2ZQorPEJQVD4gIyBkb3QgYmVsb3cgKHZpZXRuYW1lc2UgdG9uZSBtYXJrKQorPEJSVT4gIyBkaWFlcmVzaXMgYmVsb3cKKzxCUk4+ICMgcmluZyBiZWxvdworPEJDST4gIyBjaXJjdW1mbGV4IGJlbG93Cis8QkJSPiAjIGJyZXZlIGJlbG93Cis8QlRJPiAjIHRpbGRlIGJlbG93Cis8Qk1BPiAjIG1hY3JvbiBiZWxvdworPENSTD4gIyBjdXJsZWQgbGV0dGVyL2xldHRlciB3aXRoIGhvb2sKKyMgY2hhbmdlZCA8UENMPiBhbmQgPExJRz4gdG8gY29tZSBhZnRlciBkaWFjcml0aWNzCis8UENMPiAjIDE2Cis8TElHPiAjIDE3CisjCisjIEdSRUMKKyMKKzxUTlM+ICMgYWNjZW50IGFpZ3UvdG9ub3MvYWN1dGUgYWNjZW50Cis8RExUPiAjIHRyPGUnPm1hL2RpYWx5dGljYS9kaWFlcmVzaXMKKzxEVFQ+ICMgZGlhbHl0aWthIHRvbm9zCisjCis8MD4gIyA0OAorPDE+ICMgNDkKKzwyPiAjIDUwCis8Mz4gIyA1MQorPDQ+ICMgNTIKKzw1PiAjIDUzCis8Nj4gIyA1NAorPDc+ICMgNTUKKzw4PiAjIDU2Cis8OT4gIyA1NworIworPGE+ICMgOTcKKzxiPiAjIDk4Cis8Yz4gIyA5OQorPGQ+ICMgMTAwCis8ZT4gIyAxMDEKKzxmPiAjIDEwMgorPGc+ICMgMTAzCis8aD4gIyAxMDQKKzxpPiAjIDEwNQorPGo+ICMgMTA2Cis8az4gIyAxMDcKKzxsPiAjIDEwOAorPG0+ICMgMTA5Cis8bj4gIyAxMTAKKzxvPiAjIDExMQorPHA+ICMgMTEyCis8cT4gIyAxMTMKKzxyPiAjIDExNAorPHM+ICMgMTE1Cis8dD4gIyAxMTYKKzx1PiAjIDExNworPHY+ICMgMTE4Cis8dz4gIyAxMTkKKzx4PiAjIDEyMAorPHk+ICMgMTIxCis8ej4gIyAxMjIKKzx0aD4jIDEyMmIKKzx6aD4jIDEyMmMKKyMKKyMgPFRJRklOQUdIPgorIworPFRJRi1BPgorPFRJRi1CPgorPFRJRi1CSD4KKzxUSUYtRz4KKzxUSUYtR0hIPgorPFRJRi1ESj4KKzxUSUYtREoyPgorPFRJRi1EPgorPFRJRi1ESD4KKzxUSUYtREQ+Cis8VElGLURESD4KKzxUSUYtRT4KKzxUSUYtRj4KKzxUSUYtSz4KKzxUSUYtSzI+Cis8VElGLUtISD4KKzxUSUYtSD4KKzxUSUYtSDI+Cis8VElGLUgzPgorPFRJRi1ISD4KKzxUSUYtQUE+Cis8VElGLVg+Cis8VElGLVgyPgorPFRJRi1RPgorPFRJRi1RMj4KKzxUSUYtST4KKzxUSUYtSj4KKzxUSUYtSjI+Cis8VElGLUozPgorPFRJRi1MPgorPFRJRi1NPgorPFRJRi1OPgorPFRJRi1HTj4KKzxUSUYtTkc+Cis8VElGLVA+Cis8VElGLVU+Cis8VElGLVI+Cis8VElGLVJSPgorPFRJRi1HSD4KKzxUSUYtR0gyPgorPFRJRi1HSDM+Cis8VElGLVM+Cis8VElGLVNTPgorPFRJRi1DPgorPFRJRi1UPgorPFRJRi1USD4KKzxUSUYtVEM+Cis8VElGLVRUPgorPFRJRi1WPgorPFRJRi1XPgorPFRJRi1ZPgorPFRJRi1aPgorPFRJRi1aMj4KKzxUSUYtWlo+Cis8VElGLUxNVz4KKyMKKyMgPEFSQUJJTlQ+LzxBUkFCRk9SPgorIworPGhhbXphPgorPGFsZWY+Cis8YmVoPgorPHBlaD4KKzx0ZWhfbWFyYnV0YT4KKzx0ZWg+Cis8dHRlaD4KKzx0aGVoPgorPGplZW0+Cis8dGNoZWg+Cis8aGFoPgorPGtoYWg+Cis8ZGFsPgorPGRkYWw+Cis8dGhhbD4KKzxyZWg+Cis8cnJlaD4KKzx6YWluPgorPGplaD4KKzxzZWVuPgorPHNoZWVuPgorPHNhZD4KKzxkYWQ+Cis8dGFoPgorPHphaD4KKzxhaW4+Cis8Z2hhaW4+Cis8ZmVoPgorPHFhZj4KKzxrYWY+Cis8a2VoZWg+Cis8Z2FmPgorPGxhbT4KKzxtZWVtPgorPG5vb24+Cis8bm9vbl9naHVubmE+Cis8aGVoPgorPGhlaF95ZWg+Cis8d2F3PgorPGFsZWZfbWFrc3VyYT4KKzx5ZWhfYmFycmVlPgorIworIyA8SEVCUkVVPgorIworPGFsZWZfaGViPgorPGJldD4KKzxnaW1lbD4KKzxkYWxldD4KKzxoZT4KKzx2YXY+Cis8emF5aW4+Cis8aGV0PgorPHRldD4KKzx5b2Q+Cis8a2FmX2Zpbj4KKzxrYWZfaGViPgorPGxhbWVkPgorPG1lbV9maW4+Cis8bWVtPgorPG51bl9maW4+Cis8bnVuPgorPHNhbWVraD4KKzxheWluPgorPHBlX2Zpbj4KKzxwZT4KKzx0c2FkaV9maW4+Cis8dHNhZGk+Cis8cW9mPgorPHJlc2g+Cis8c2hpbj4KKzx0YXY+CisjCisjR1JFQworIworPEFMUEhBPgorPEJFVEE+Cis8R0FNTUE+Cis8REVMVEE+Cis8RVBTSUxPTj4KKzxaRVRBPgorPEVUQT4KKzxUSEVUQT4KKzxJT1RBPgorPEtBUFBBPgorPExBTUJEQT4KKzxNVT4KKzxOVT4KKzxYST4KKzxPTUlDUk9OPgorPFBJPgorPFJITz4KKzxTSUdNQT4KKzxUQVU+Cis8VVBTSUxPTj4KKzxQSEk+Cis8Q0hJPgorPFBTST4KKzxPTUVHQT4KKyMKKyNDWVJJTAorIworPENZUi1BPgorPENZUi1CRT4KKzxDWVItVkU+Cis8Q1lSLUdIRT4KKzxDWVItREU+Cis8Q1lSLUdaSEU+Cis8Q1lSLURKRT4KKzxDWVItSUU+Cis8VUtSLUlFPgorPENZUi1JTz4KKzxDWVItWkhFPgorPENZUi1aRT4KKzxDWVItRFpFPgorPENZUi1JPgorPFVLUi1JPgorPFVLUi1ZST4KKzxDWVItSUJSRT4KKzxDWVItSkU+Cis8Q1lSLUtBPgorPENZUi1FTD4KKzxDWVItTEpFPgorPENZUi1FTT4KKzxDWVItRU4+Cis8Q1lSLU5KRT4KKzxDWVItTz4KKzxDWVItUEU+Cis8Q1lSLUVSPgorPENZUi1FUz4KKzxDWVItVEU+Cis8Q1lSLUtKRT4KKzxDWVItVFNIRT4KKzxDWVItT1U+Cis8Q1lSLU9VQlJFPgorPENZUi1FRj4KKzxDWVItSEE+Cis8Q1lSLVRTRT4KKzxDWVItQ0hFPgorPENZUi1EQ0hFPgorPENZUi1TSEE+Cis8Q1lSLVNIVFNIQT4KKzxDWVItU0lHRFVSPgorPENZUi1ZRVJPVT4KKzxDWVItU0lHTU9VSUw+Cis8Q1lSLUU+Cis8Q1lSLVlPVT4KKzxDWVItWUE+CisjCisjIEFSTUVOSUFOCisjCis8QVJNLUFZQj4KKzxBUk0tQkVOPgorPEFSTS1HSU0+Cis8QVJNLURBPgorPEFSTS1FQ0g+Cis8QVJNLVpBPgorPEFSTS1FPgorPEFSTS1BVD4KKzxBUk0tVE8+Cis8QVJNLVpIRT4KKzxBUk0tSU5JPgorPEFSTS1MWVVOPgorPEFSTS1LSEU+Cis8QVJNLVRTQT4KKzxBUk0tS0VOPgorPEFSTS1ITz4KKzxBUk0tRFpBPgorPEFSTS1HSEFUPgorPEFSTS1UQ0hFPgorPEFSTS1NRU4+Cis8QVJNLUhJPgorPEFSTS1OVT4KKzxBUk0tU0hBPgorPEFSTS1WTz4KKzxBUk0tQ0hBPgorPEFSTS1QRT4KKzxBUk0tSkU+Cis8QVJNLVJBPgorPEFSTS1TRT4KKzxBUk0tVkVWPgorPEFSTS1UWVVOPgorPEFSTS1SRT4KKzxBUk0tVFNPPgorPEFSTS1WWVVOPgorPEFSTS1QWVVSPgorPEFSTS1LRT4KKzxBUk0tTz4KKzxBUk0tRkU+CisjCisjIEdFT1JHSUFOCisjCis8R0VPUkctQU4+Cis8R0VPUkctQkFOPgorPEdFT1JHLUdBTj4KKzxHRU9SRy1ET04+Cis8R0VPUkctRU4+Cis8R0VPUkctVklOPgorPEdFT1JHLVpFTj4KKzxHRU9SRy1IRT4KKzxHRU9SRy1UQU4+Cis8R0VPUkctSU4+Cis8R0VPUkctS0FOPgorPEdFT1JHLUxBUz4KKzxHRU9SRy1NQU4+Cis8R0VPUkctTkFSPgorPEdFT1JHLUhJRT4KKzxHRU9SRy1PTj4KKzxHRU9SRy1QQVI+Cis8R0VPUkctWkhBUj4KKzxHRU9SRy1SQUU+Cis8R0VPUkctU0FOPgorPEdFT1JHLVRBUj4KKzxHRU9SRy1XRT4KKzxHRU9SRy1VTj4KKzxHRU9SRy1QSEFSPgorPEdFT1JHLUtIQVI+Cis8R0VPUkctR0hBTj4KKzxHRU9SRy1RQVI+Cis8R0VPUkctU0hJTj4KKzxHRU9SRy1DSElOPgorPEdFT1JHLUNBTj4KKzxHRU9SRy1KSUw+Cis8R0VPUkctQ0lMPgorPEdFT1JHLUNIQVI+Cis8R0VPUkctWEFOPgorPEdFT1JHLUhBUj4KKzxHRU9SRy1KSEFOPgorPEdFT1JHLUhBRT4KKzxHRU9SRy1IT0U+Cis8R0VPUkctRkk+CisjCisjPERFVkFOQUdBUkk+CisjCisjIGNvbGxhdGlvbiB3ZWlnaHRzIGluIG9yZGVyCis8TktUPgorPE5VTT4KKzxkX3VkYXR0YT4KKzxkX2FudWRhdHRhPgorPGR2LWdyYXZlPgorPGR2LWFjdXRlPgorPGR2LWFiYnJldmF0aW9uPgorPGRvbT4KKzxkdnctc2hvcnRhPgorPGR2dy1hPgorPGR2dy1hYT4KKzxkdnctaT4KKzxkdnctaWk+Cis8ZHZ3LXU+Cis8ZHZ3LXV1PgorPGR2dy12b2NhbGljcj4KKzxkdnctdm9jYWxpY3JyPgorPGR2dy12b2NhbGljbD4KKzxkdnctdm9jYWxpY2xsPgorPGR2dy1jYW5kcmFlPgorPGR2dy1zaG9ydGU+Cis8ZHZ3LWU+Cis8ZHZ3LWFpPgorPGR2dy1jYW5kcmFvPgorPGR2dy1zaG9ydG8+Cis8ZHZ3LW8+Cis8ZHZ3LWF1PgorPGRfa2E+Cis8ZF9raGE+Cis8ZF9nYT4KKzxkX2dnYT4KKzxkX2doYT4KKzxkX25nYT4KKzxkX2NhPgorPGRfY2hhPgorPGRfamE+Cis8ZF9qamE+Cis8ZF9qaGE+Cis8ZF9ueWE+Cis8ZF90dGE+Cis8ZF90dGhhPgorPGRfZGRhPgorPGRfZGRkYT4KKzxkX2RkaGE+Cis8ZF9ubmE+Cis8ZF90YT4KKzxkX3RoYT4KKzxkX2RhPgorPGRfZGhhPgorPGRfbmE+Cis8ZF9wYT4KKzxkX3BoYT4KKzxkX2JhPgorPGRfYmJhPgorPGRfYmhhPgorPGRfbWE+Cis8ZF95YT4KKzxkX3JhPgorPGRfbGE+Cis8ZF9sbGE+Cis8ZF92YT4KKzxkX3NoYT4KKzxkX3NzYT4KKzxkX3NhPgorPGRfaGE+Cis8ZF9hdmFncmFoPgorPGRfZ2xvLXN0b3A+Cis8ZG0tYWE+Cis8ZG0taT4KKzxkbS1paT4KKzxkbS11PgorPGRtLXV1PgorPGRtLXZvY2FsaWNyPgorPGRtLXZvY2FsaWNycj4KKzxkbS12b2NhbGljbD4KKzxkbS12b2NhbGljbGw+Cis8ZG0tY2FuZHJhZT4KKzxkbS1zaG9ydGU+Cis8ZG0tZT4KKzxkbS1haT4KKzxkbS1jYW5kcmFvPgorPGRtLXNob3J0bz4KKzxkbS1vPgorPGRtLWF1PgorPGR2ZC1hbnVzd2FyYT4KKzxkdmQtY2hhbmRyYWJpbmR1PgorPGR2ZC12aXNhcmc+Cis8ZF9oYWxhbnQ+CisjCisjIDxHVUpBUkFUST4KKyMKKyMgY29sbGF0aW9uIHdlaWdodHMgaW4gb3JkZXIKKworPEdOS1Q+Cis8Z29tPgorPGd2dy1hPgorPGd2dy1hYT4KKzxndnctaT4KKzxndnctaWk+Cis8Z3Z3LXU+Cis8Z3Z3LXV1PgorPGd2dy12b2NhbGljcj4KKzxndnctdm9jYWxpY3JyPgorPGd2dy12b2NhbGljbD4KKzxndnctdm9jYWxpY2xsPgorPGd2dy1jYW5kcmFlPgorPGd2dy1lPgorPGd2dy1haT4KKzxndnctY2FuZHJhbz4KKzxndnctbz4KKzxndnctYXU+Cis8Zy1rYT4KKzxnLWtoYT4KKzxnLWdhPgorPGctZ2hhPgorPGctbmdhPgorPGctY2E+Cis8Zy1jaGE+Cis8Zy1qYT4KKzxnLWpoYT4KKzxnLW55YT4KKzxnLXR0YT4KKzxnLXR0aGE+Cis8Zy1kZGE+Cis8Zy1kZGhhPgorPGctbm5hPgorPGctdGE+Cis8Zy10aGE+Cis8Zy1kYT4KKzxnLWRoYT4KKzxnLW5hPgorPGctcGE+Cis8Zy1waGE+Cis8Zy1iYT4KKzxnLWJoYT4KKzxnLW1hPgorPGcteWE+Cis8Zy1yYT4KKzxnLWxhPgorPGctbGxhPgorPGctdmE+Cis8Zy1zaGE+Cis8Zy1zc2E+Cis8Zy1zYT4KKzxnLWhhPgorPGcta3NoYT4KKzxnLWRueWE+Cis8Zy1zaHJhPgorPGctdHJhPgorPGctYXZhZ3JhaD4KKzxnbS1hYT4KKzxnbS1pPgorPGdtLWlpPgorPGdtLXU+Cis8Z20tdXU+Cis8Z20tdm9jYWxpY3I+Cis8Z20tdm9jYWxpY3JyPgorPGdtLXZvY2FsaWNsPgorPGdtLXZvY2FsaWNsbD4KKzxnbS1jYW5kcmFlPgorPGdtLWU+Cis8Z20tYWk+Cis8Z20tY2FuZHJhbz4KKzxnbS1vPgorPGdtLWF1PgorPGd2ZC1hbnVzd2FyYT4KKzxndmQtY2hhbmRyYWJpbmR1PgorPGd2ZC12aXNhcmc+Cis8Zy1oYWxhbnQ+CisjCisjPFRFTFVHVT4KKyMKKyMgY29sbGF0aW9uIHdlaWdodHMgaW4gb3JkZXIKKworPHR1bW11PgorPHR2dy1hPgorPHR2dy1hYT4KKzx0dnctaT4KKzx0dnctaWk+Cis8dHZ3LXU+Cis8dHZ3LXV1PgorPHR2dy12b2NhbGljcj4KKzx0dnctdm9jYWxpY3JyPgorPHR2dy12b2NhbGljbD4KKzx0dnctdm9jYWxpY2xsPgorPHR2dy1jYW5kcmFlPgorPHR2dy1zaG9ydGU+Cis8dHZ3LWU+Cis8dHZ3LWFpPgorPHR2dy1zaG9ydG8+Cis8dHZ3LW8+Cis8dHZ3LWF1PgorPHQta2E+Cis8dC1raGE+Cis8dC1nYT4KKzx0LWdnYT4KKzx0LWdoYT4KKzx0LW5nYT4KKzx0LWNhPgorPHQtdHNhPgorPHQtY2hhPgorPHQtamE+Cis8dC1kemE+Cis8dC1qamE+Cis8dC1qaGE+Cis8dC1ueWE+Cis8dC10dGE+Cis8dC10dGhhPgorPHQtZGRhPgorPHQtZGRkYT4KKzx0LWRkaGE+Cis8dC1ubmE+Cis8dC10YT4KKzx0LXRoYT4KKzx0LWRhPgorPHQtZGhhPgorPHQtbmE+Cis8dC1wYT4KKzx0LXBoYT4KKzx0LWJhPgorPHQtYmJhPgorPHQtYmhhPgorPHQtbWE+Cis8dC15YT4KKzx0LXJhPgorPHQtcnJhPgorPHQtbGE+Cis8dC1sbGE+Cis8dC12YT4KKzx0LXNoYT4KKzx0LXNzYT4KKzx0LXNhPgorPHQtaGE+Cis8dC1hdmFncmFoPgorPHRtLWFhPgorPHRtLWk+Cis8dG0taWk+Cis8dG0tdT4KKzx0bS11dT4KKzx0bS12b2NhbGljcj4KKzx0bS12b2NhbGljcnI+Cis8dG0tdm9jYWxpY2w+Cis8dG0tdm9jYWxpY2xsPgorPHRtLXNob3J0ZT4KKzx0bS1lPgorPHRtLWFpPgorPHRtLXNob3J0bz4KKzx0bS1vPgorPHRtLWF1PgorPHR2ZC1jaGFuZHJhYmluZHU+Cis8dHZkLWFudXN3YXJhPgorPHR2ZC12aXNhcmc+Cis8dC1oYWxhbnQ+Cis8dC1sZW5naHRtYXJrPgorPHQtYWlsZW5naHRtYXJrPgorCisjCisjIDxHVVJVTVVLSEk+CisjCisjIGNvbGxhdGlvbiB3ZWlnaHRzIGluIG9yZGVyCisKKzxQTktUPgorPGFkYWs+Cis8YWRpLXNoYWt0aT4KKzxvbmthcj4KKzx1cmE+Cis8cGF2dy11PgorPHBhdnctdXU+Cis8cGF2dy1vPgorPHBhdnctYT4KKzxwYXZ3LWFhPgorPHBhdnctYWk+Cis8cGF2dy1hdT4KKzxpcmk+Cis8cGF2dy1pPgorPHBhdnctaWk+Cis8cGF2dy1lPgorPHBhLXNhPgorPHBhLWhhPgorPHBhLXVkYXR0YT4KKzxwYS1rYT4KKzxwYS1raGE+Cis8cGEtZ2E+Cis8cGEtZ2hhPgorPHBhLW5nYT4KKzxwYS1jYT4KKzxwYS1jaGE+Cis8cGEtamE+Cis8cGEtamhhPgorPHBhLW55YT4KKzxwYS10dGE+Cis8cGEtdHRoYT4KKzxwYS1kZGE+Cis8cGEtZGRoYT4KKzxwYS1ubmE+Cis8cGEtdGE+Cis8cGEtdGhhPgorPHBhLWRhPgorPHBhLWRoYT4KKzxwYS1uYT4KKzxwYS1wYT4KKzxwYS1waGE+Cis8cGEtYmE+Cis8cGEtYmhhPgorPHBhLW1hPgorPHBhLXlhPgorPHNpZ24teWFrYXNoPgorPHBhLXJhPgorPHBhLWxhPgorPHBhLXZhPgorPHBhLXJyYT4KKzxwYW0tYWE+Cis8cGFtLWk+Cis8cGFtLWlpPgorPHBhbS11PgorPHBhbS11dT4KKzxwYW0tZT4KKzxwYW0tYWk+Cis8cGFtLW8+Cis8cGFtLWF1PgorPHBhdmQtYWRha2JpbmRpPgorPHBhdmQtYmluZGk+Cis8cGF2ZC12aXNhcmc+Cis8dGlwcGk+Cis8cGEtaGFsYW50PgorCisjCisjIDxLQU5OQURBPgorIworIyBjb2xsYXRpb24gd2VpZ2h0cyBpbiBvcmRlcgorCis8S05LVD4KKzxzaWduLWppaHZhbXVsaXlhPgorPHNpZ24tdXBhZGhtYW5peWE+Cis8a3Z3LWE+Cis8a3Z3LWFhPgorPGt2dy1pPgorPGt2dy1paT4KKzxrdnctdT4KKzxrdnctdXU+Cis8a3Z3LXZvY2FsaWNyPgorPGt2dy12b2NhbGljcnI+Cis8a3Z3LXZvY2FsaWNsPgorPGt2dy12b2NhbGljbGw+Cis8a3Z3LXNob3J0ZT4KKzxrdnctZT4KKzxrdnctYWk+Cis8a3Z3LXNob3J0bz4KKzxrdnctbz4KKzxrdnctYXU+Cis8ay1rYT4KKzxrLWtoYT4KKzxrLWdhPgorPGstZ2hhPgorPGstbmdhPgorPGstY2E+Cis8ay1jaGE+Cis8ay1qYT4KKzxrLWpoYT4KKzxrLW55YT4KKzxrLXR0YT4KKzxrLXR0aGE+Cis8ay1kZGE+Cis8ay1kZGhhPgorPGstbm5hPgorPGstdGE+Cis8ay10aGE+Cis8ay1kYT4KKzxrLWRoYT4KKzxrLW5hPgorPGstcGE+Cis8ay1waGE+Cis8ay1iYT4KKzxrLWJoYT4KKzxrLW1hPgorPGsteWE+Cis8ay1yYT4KKzxrLXJyYT4KKzxrLWxhPgorPGstdmE+Cis8ay1zaGE+Cis8ay1zc2E+Cis8ay1zYT4KKzxrLWhhPgorPGstbGxhPgorPGstZmE+Cis8ay1hdmFncmFoPgorPGttLWFhPgorPGttLWk+Cis8a20taWk+Cis8a20tdT4KKzxrbS11dT4KKzxrbS12b2NhbGljcj4KKzxrbS12b2NhbGljcnI+Cis8a20tdm9jYWxpY2w+Cis8a20tdm9jYWxpY2xsPgorPGttLXNob3J0ZT4KKzxrbS1lPgorPGttLWFpPgorPGttLXNob3J0bz4KKzxrbS1vPgorPGttLWF1PgorPGt2ZC1hbnVzd2FyYT4KKzxrdmQtdmlzYXJnPgorPGstaGFsYW50PgorPGstbGVuZ2h0X21hcms+Cis8ay1haV9sZW5naHRfbWFyaz4KKworb3JkZXJfc3RhcnQgPFNQRUNJQUw+O2ZvcndhcmQ7YmFja3dhcmQ7Zm9yd2FyZDtmb3J3YXJkLHBvc2l0aW9uCisjCisjIFRvdXQgY2FyYWN0w6hyZSBub24gcHLDqWNpc8OpbWVudCBkw6lmaW5pIHNlcmEgY29uc2lkw6lyw6kgY29tbWUgY2FyYWN0w6hyZSBzcMOpY2lhbAorIyBldCBjb25zaWTDqXLDqSB1bmlxdWVtZW50IGF1IGRlcm5pZXIgbml2ZWF1LgorIworIyBBbnkgY2hhcmFjdGVyIG5vdCBwcmVjaXNlbHkgc3BlY2lmaWVkIHdpbGwgYmUgY29uc2lkZXJlZCBhcyBhIHNwZWNpYWwKKyMgY2hhcmFjdGVyIGFuZCBjb25zaWRlcmVkIG9ubHkgYXQgdGhlIGxhc3QgbGV2ZWwuCisjIDxVMDAwMD4uLi4uLi48VTdGRkZGRkZGPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDA+Li4uLi4uPFU3RkZGRkZGRj4KKyMKKyMgU1lNQi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE7CsCBHTFkKKyMKKzxVMDAyMD4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDIwPiAjIDMyIDxTUD4KKzxVMDA1Rj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDVGPiAjIDMzIF8KKzxVMDMzMj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzMyPiAjIDM0IDwiXz4KKzxVMDBBRj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEFGPiAjIDM1IC0gKE1BQ1JPTikKKzxVMDBBRD4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEFEPiAjIDM2IDxTSFk+Cis8VTAwMkQ+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyRD4gIyAzNyAtCis8VTAwMkM+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyQz4gIyAzOCAsCis8VTAwM0I+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAzQj4gIyAzOSA7Cis8VTAwM0E+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAzQT4gIyA0MCA6Cis8VTAwMjE+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyMT4gIyA0MSAhCis8VTAwQTE+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBMT4gIyA0MiDCoQorPFUwMDNGPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwM0Y+ICMgNDMgPworPFUwMEJGPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQkY+ICMgNDQgwr8KKzxVMDAyRj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDJGPiAjIDQ1IC8KKzxVMDMzOD4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzM4PiAjIDQ2IDwiLz4KKzxVMDAyRT4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDJFPiAjIDQ3IC4KKzxVMDBCNz4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEI3PiAjIDU4IMOXCis8VTAwQjg+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCOD4gIyA1OSDCuAorPFUwMzI4PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzMjg+ICMgNjAgPCI7PgorPFUwMDI3PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjc+ICMgNjEgJworPFUyMDE4PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTg+ICMgNjIgPCc2PgorPFUyMDE5PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTk+ICMgNjMgPCc5PgorPFUwMDIyPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjI+ICMgNjQgIgorPFUyMDFDPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMUM+ICMgNjUgPCI2PgorPFUyMDFEPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMUQ+ICMgNjYgPCI5PgorPFUwMEFCPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQUI+ICMgNjcgwqsKKzxVMDBCQj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEJCPiAjIDY4IMK7Cis8VTAwMjg+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyOD4gIyA2OSAoCis8VTIwN0Q+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA3ZD4gIyA3MCA8KFM+Cis8VTAwMjk+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyOT4gIyA3MSApCis8VTIwN0U+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA3RT4gIyA3MiA8KVM+Cis8VTAwNUI+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA1Qj4gIyA3MyBbCis8VTAwNUQ+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA1RD4gIyA3NCBdCis8VTAwN0I+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA3Qj4gIyA3NSB7Cis8VTAwN0Q+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA3RD4gIyA3NiB9Cis8VTAwQTc+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBNz4gIyA3NyDCpworPFUwMEI2PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjY+ICMgNzggwrYKKzxVMDBBOT4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEE5PiAjIDc5IMKpCis8VTAwQUU+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBRT4gIyA4MCDCrgorPFUyMTIyPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMjI+ICMgODEgPFRNPgorPFUwMDQwPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNDA+ICMgODIgQAorPFUwMEE0PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTQ+ICMgODMgwqQKKzxVMDBBMj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEEyPiAjIDg0IMKiCis8VTAwMjQ+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyND4gIyA4NSAkCis8VTAwQTM+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBMz4gIyA4NiDCoworPFUwMEE1PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTU+ICMgODcgwqUKKzxVMjBBMD4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMEEwPiAjIGVjdQorPFUyMEExPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwQTE+ICMgY29sb24KKzxVMjBBMj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMEEyPiAjIGNydXplaXJvCis8VTIwQTM+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjBBMz4gIyBmcmVuY2ggZnJhbmMKKzxVMjBBND4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMEE0PiAjIGxpcmEKKzxVMjBBNT4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMEE1PiAjIG1pbGwKKzxVMjBBNj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMEE2PiAjIG5haXJhCis8VTIwQTc+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjBBNz4gIyBwZXNldGEKKzxVMjBBOD4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMEE4PiAjIHJ1cGVlCis8VTIwQTk+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjBBOT4gIyB3b24KKzxVMjBBQT4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMEFBPiAjIG5ldyBzaGVxZWwKKzxVMjBBQj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMEFCPiAjIGRvbmcKKzxVMjBBQz4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMEFDPiAjIGV1cm8KKzxVMjBBRD4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMEFEPiAjIGtpcAorPFUyMEFFPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwQUU+ICMgdHVncmlrCis8VTIwQUY+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjBBRj4gIyBkcmFjaG1hCis8VTAwMkE+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyQT4gIyA4OCAqCis8VTAwNUM+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA1Qz4gIyA4OQorPFUwMDI2PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjY+ICMgOTAgJgorPFUwMDIzPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjM+ICMgOTEgIworPFUwMDI1PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjU+ICMgOTIgJQorPFUyMDdCPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwN0Q+ICMgOTMgPC1TPgorPFUwMDJCPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMkI+ICMgOTQgKworPFUyMDdBPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwN0U+ICMgOTUgPCtTPgorPFUwMEIxPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjE+ICMgOTYgwrEKKzxVMDBCND4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PDA+ICMgMTIzIMK0Cis8VTAwNjA+IElHTk9SRTtJR05PUkU7SUdOT1JFOzwxPiAjIDEyNCBgCis8VTAzMDY+IElHTk9SRTtJR05PUkU7SUdOT1JFOzwyPiAjIDEyNSA8Iig+Cis8VTAwNUU+IElHTk9SRTtJR05PUkU7SUdOT1JFOzwzPiAjIDEyNiBeCis8VTAzMEM+IElHTk9SRTtJR05PUkU7SUdOT1JFOzw0PiAjIDEyNyA8Ijw+Cis8VTAzMEE+IElHTk9SRTtJR05PUkU7SUdOT1JFOzw1PiAjIDEyOCA8IjA+Cis8VTAwQTg+IElHTk9SRTtJR05PUkU7SUdOT1JFOzw2PiAjIDEyOSDCqAorPFUwMzBCPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8Nz4gIyAxMzAgPCIiPgorPFUwMDdFPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8OD4gIyAxMzEgfgorPFUwMzA3PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8OT4gIyAxMzIgPCIuPgorPFUwMEY3PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8YT4gIyAxMzMgwrgKKzxVMDBENz4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PGI+ICMgMTM0IMK0Cis8VTIyNjA+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxjPiAjIDEzNSA8IT0+Cis8VTAwM0M+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxkPiAjIDEzNiA8Cis8VTIyNjQ+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxlPiAjIDEzNyA8PTw+Cis8VTAwM0Q+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxmPiAjIDEzOCA9Cis8VTIyNjU+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxnPiAjIDEzOSA8Lz49PgorPFUwMDNFPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8aD4gIyAxNDAgPgorPFUwMEFDPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8aT4gIyAxNDEgwqwKKzxVMDA3Qz4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PGo+ICMgMTQyIHwKKzxVMDBBNj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PGs+ICMgMTQzIHwKKzxVMDBCMD4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PGw+ICMgMTQ0IMKwCis8VTAwQjU+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxtPiAjIDE0NSBtCis8VTIxMjY+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxuPiAjIDE0NiA8T20+Cis8VTIyMEU+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxvPiAjIDE0NyA8RlA+Cis8VTI1MEM+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxwPiAjIDE0OCA8X1YvPj4KKzxVMjUyQz4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PHE+ICMgMTQ5IDxfVi0+Cis8VTI1MTA+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxyPiAjIDE1MCA8X1Y8dz4KKzxVMjUxQz4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PHM+ICMgMTUxIDxfIS8+PgorPFUyNTNDPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8dD4gIyAxNTIgPF8hLT4KKzxVMjUyND4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PHU+ICMgMTUzIDxfITw+Cis8VTI1MTQ+IElHTk9SRTtJR05PUkU7SUdOT1JFOzx2PiAjIDE1NCA8X0EvPj4KKzxVMjUzND4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PHc+ICMgMTU1IDxfLUE+Cis8VTI1MTg+IElHTk9SRTtJR05PUkU7SUdOT1JFOzx4PiAjIDE1NiA8X0E8PgorPFUyNTAyPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8eT4gIyAxNTcgPF8hPgorPFUyNTAwPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8ej4gIyAxNTggPF8tPiAjCis8VTI1MDE+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwMT4gIyAxNTkgPF89PgorPFUyMTkwPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxOTA+ICMgMTYwIDw8LT4KKzxVMjE5Mj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTkyPiAjIDE2MSA8LS8+PgorPFUyMEQxPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwRDE+ICMgMTYyIDwiNz4KKzxVMjE5MT4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTkxPiAjIDE2MyA8LSE+Cis8VTIxOTM+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5Mz4gIyAxNjQgPC12PgorPFUyNjZBPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NkE+ICMgMTY1IDxfZCE+Cis8VTI1NzE+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU3MT4gIyAxNjYgPF8vPi8vPgorPFUyNTcyPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NzI+ICMgMTY3IDxfPFw+Cis8VTI1RTI+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVFMj4gIyAxNjggPF8uLz4vLz4KKzxVMjVFMz4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUUzPiAjIDE2OSA8Xy48XD4gIyAjIDxBUkFCSU5UPi88QVJBQkZPUj4gIworPFUwNjBDPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA2MEM+Cis8VTA2MUI+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDYxQj4KKzxVMDYxRj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNjFGPgorPFUwNjQwPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA2NDA+Cis8VTA2NkE+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDY2QT4KKzxVMDY2Qj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNjZCPgorPFUwNjZDPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA2NkM+Cis8VTA2NkQ+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDY2RD4KKzxVMDY0Qj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNjRCPiAjPGZhdGhhdGFuX25vPgorPFVGRTcwPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUZFNzA+ICM8ZmF0aGF0YW5faXM+Cis8VUZFNzE+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVRkU3MT4gIzxmYXRoYXRhbl9tZT4KKzxVMDY0Qz4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNjRDPiAjPGRhbW1hdGFuX25vPgorPFVGRTcyPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUZFNzI+ICM8ZGFtbWF0YW5faXM+Cis8VTA2NEQ+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDY0RD4gIzxrYXNyYXRhbl9ubz4KKzxVRkU3ND4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVGRTc0PiAjPGthc3JhdGFuX2lzPgorPFUwNjRFPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA2NEU+ICM8ZmF0aGFfbm8+Cis8VUZFNzY+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVRkU3Nj4gIzxmYXRoYV9pcz4KKzxVRkU3Nz4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVGRTc3PiAjPGZhdGhhX21lPgorPFUwNjRGPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA2NEY+ICM8ZGFtbWFfbm8+Cis8VUZFNzg+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVRkU3OD4gIzxkYW1tYV9pcz4KKzxVRkU3OT4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVGRTc5PiAjPGRhbW1hX21lPgorPFUwNjUwPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA2NTA+ICM8a2FzcmFfbm8+Cis8VUZFN0E+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVRkU3QT4gIzxrYXNyYV9pcz4KKzxVRkU3Qj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVGRTdCPiAjPGthc3JhX21lPgorPFUwNjUxPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA2NTE+ICM8c2hhZGRhX25vPgorPFVGRTdDPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUZFN0M+ICM8c2hhZGRhX2lzPgorPFVGRTdEPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUZFN0Q+ICM8c2hhZGRhX21lPgorPFUwNjUyPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA2NTI+ICM8c3VrdW5fbm8+Cis8VUZFN0U+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVRkU3RT4gIzxzdWt1bl9pcz4KKzxVRkU3Rj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVGRTdGPiAjPHN1a3VuX21lPiAjICMgPEhFQlJFVT4gIworPFUwNUIwPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA1QjA+ICNwb2ludF9zaGV2YQorPFUwNUIxPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA1QjE+ICNwb2ludF9oYXRhZl9zZWdvbAorPFUwNUIyPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA1QjI+ICNwb2ludF9oYXRhZl9wYXRhaAorPFUwNUIzPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA1QjM+ICNwb2ludF9oYXRhZl9xYW1hdHMKKzxVMDVCND4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNUI0PiAjcG9pbnRfaGlyaXEKKzxVMDVCNT4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNUI1PiAjcG9pbnRfdHNlcmUKKzxVMDVCNj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNUI2PiAjcG9pbnRfc2Vnb2wKKzxVMDVCNz4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNUI3PiAjcG9pbnRfcGF0YWgKKzxVMDVCOD4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNUI4PiAjcG9pbnRfcWFtYXRzCis8VTA1Qjk+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDVCOT4gI3BvaW50X2hvbGFtCis8VTA1QkI+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDVCQj4gI3BvaW50X3F1YnV0cworPFUwNUJDPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA1QkM+ICNwb2ludF9kYWdlc2gKKzxVMDVCRD4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNUJEPiAjcG9pbnRfbWV0ZWcKKzxVMDVCRT4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNUJFPiAjbWFxYWYKKzxVMDVCRj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNUJGPiAjcG9pbnRfcmFmZQorPFUwNUMwPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA1QzA+ICNwYXNlcQorPFUwNUMxPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA1QzE+ICNwb2ludF9zaGluX2RvdAorPFUwNUMyPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA1QzI+ICNwb2ludF9zaW5fZG90Cis8VTA1QzM+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDVDMz4gI3NvZiBwYXN1cQorCisjIFRoZSBjb21tZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBzZWN0aW9uIG1lbnRpb25zIGNoYXJhY3RlcnMgd2hpY2gKKyMgYXJlIG5vdCBvdGhlcndpc2UgY292ZXJlZC4gIEJ1dCB0aGlzIGRlc2NyaXB0aW9uIGNhbm5vdCBleHByZXNzIHRoaXMuCisjIFRoZXJlZm9yZSB3ZSBhZGQgaGVyZSBhIGZldyBlbnRyaWVzIHdoaWNoIGFyZSB1c2VkIGluIG9sZGVyIGltcGxlbWVudGF0aW9ucworIyB0byBiZSBjb21wYXRpYmxlLiAgLS1kcmVwcGVyCis8VTAwMDE+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwMT4KKzxVMDAwMj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDAyPgorPFUwMDAzPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDM+Cis8VTAwMDQ+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwND4KKzxVMDAwNT4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA1PgorPFUwMDA2PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDY+Cis8VTAwMDc+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwNz4KKzxVMDAwOD4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA4PgorPFUwMDA5PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDk+Cis8VTAwMEE+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwQT4KKzxVMDAwQj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBCPgorPFUwMDBDPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMEM+Cis8VTAwMEQ+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwRD4KKzxVMDAwRT4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBFPgorPFUwMDBGPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMEY+Cis8VTAwMTA+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxMD4KKzxVMDAxMT4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDExPgorPFUwMDEyPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTI+Cis8VTAwMTM+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxMz4KKzxVMDAxND4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE0PgorPFUwMDE1PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTU+Cis8VTAwMTY+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxNj4KKzxVMDAxNz4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE3PgorPFUwMDE4PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTg+Cis8VTAwMTk+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxOT4KKzxVMDAxQT4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFBPgorPFUwMDFCPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMUI+Cis8VTAwMUM+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxQz4KKzxVMDAxRD4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFEPgorPFUwMDFFPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMUU+Cis8VTAwMUY+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxRj4KKzxVMDA3Rj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDdGPgorPFUwMDgwPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODA+Cis8VTAwODE+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4MT4KKzxVMDA4Mj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDgyPgorPFUwMDgzPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODM+Cis8VTAwODQ+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4ND4KKzxVMDA4NT4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDg1PgorPFUwMDg2PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODY+Cis8VTAwODc+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4Nz4KKzxVMDA4OD4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDg4PgorPFUwMDg5PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODk+Cis8VTAwOEE+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4QT4KKzxVMDA4Qj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDhCPgorPFUwMDhDPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOEM+Cis8VTAwOEQ+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4RD4KKzxVMDA4RT4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDhFPgorPFUwMDhGPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOEY+Cis8VTAwOTA+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5MD4KKzxVMDA5MT4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDkxPgorPFUwMDkyPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTI+Cis8VTAwOTM+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Mz4KKzxVMDA5ND4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDk0PgorPFUwMDk1PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTU+Cis8VTAwOTY+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Nj4KKzxVMDA5Nz4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDk3PgorPFUwMDk4PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTg+Cis8VTAwOTk+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5OT4KKzxVMDA5QT4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDlBPgorPFUwMDlCPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOUI+Cis8VTAwOUM+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Qz4KKzxVMDA5RD4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDlEPgorPFUwMDlFPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOUU+Cis8VTAwOUY+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Rj4KKworaWZkZWYgRElBQ1JJVF9GT1JXQVJECitvcmRlcl9zdGFydCA8TEFUSU4+O2ZvcndhcmQ7Zm9yd2FyZDtmb3J3YXJkO2ZvcndhcmQscG9zaXRpb24KK2Vsc2UKK29yZGVyX3N0YXJ0IDxMQVRJTj47Zm9yd2FyZDtiYWNrd2FyZDtmb3J3YXJkO2ZvcndhcmQscG9zaXRpb24KK2VuZGlmCisjCis8VTAwQTA+IDxVMDAyMD47PEJBUz47PE1JTj47SUdOT1JFICMgMTcwPE5CU1A+CisjCis8VTAwMzA+IDwwPjs8QkFTPjs8TUlOPjtJR05PUkUgIyAxNzEgMAorPFUwMDMxPiA8MT47PEJBUz47PE1JTj47SUdOT1JFICMgMTcyIDEKKzxVMDAzMj4gPDI+OzxCQVM+OzxNSU4+O0lHTk9SRSAjIDE3MyAyCis8VTAwMzM+IDwzPjs8QkFTPjs8TUlOPjtJR05PUkUgIyAxNzQgMworPFUwMDM0PiA8ND47PEJBUz47PE1JTj47SUdOT1JFICMgMTc1IDQKKzxVMDAzNT4gPDU+OzxCQVM+OzxNSU4+O0lHTk9SRSAjIDE3NiA1Cis8VTAwMzY+IDw2Pjs8QkFTPjs8TUlOPjtJR05PUkUgIyAxNzcgNgorPFUwMDM3PiA8Nz47PEJBUz47PE1JTj47SUdOT1JFICMgMTc4IDcKKzxVMDAzOD4gPDg+OzxCQVM+OzxNSU4+O0lHTk9SRSAjIDE3OSA4Cis8VTAwMzk+IDw5Pjs8QkFTPjs8TUlOPjtJR05PUkUgIyAxODAgOQorIworPFUyMTVCPiA8MD47PEdSQT47PE1JTj47SUdOT1JFICMgMTgxIDwxOD4KKzxVMDBCQz4gPDA+OzxCUkU+OzxNSU4+O0lHTk9SRSAjIDE4MiDCvAorPFUyMTVDPiA8MD47PENJUj47PE1JTj47SUdOT1JFICMgMTgzIDwzOD4KKzxVMjE1RD4gPDA+OzxSTkU+OzxNSU4+O0lHTk9SRSAjIDE4NCA8NTg+Cis8VTIxNUU+IDwwPjs8REFDPjs8TUlOPjtJR05PUkUgIyAxODUgPDc4PgorPFUwMEJEPiA8MD47PENBUj47PE1JTj47SUdOT1JFICMgMTg2IMK9Cis8VTAwQkU+IDwwPjs8UkVVPjs8TUlOPjtJR05PUkUgIyAxODcgwr4KKzxVMjA3MD4gPDA+OzxCQVM+OzxFTUk+O0lHTk9SRSAjIDE4OCA8MFM+Cis8VTAwQjk+IDwxPjs8QkFTPjs8RU1JPjtJR05PUkUgIyAxODkgwrkKKzxVMDBCMj4gPDI+OzxCQVM+OzxFTUk+O0lHTk9SRSAjIDE5MCDCsgorPFUwMEIzPiA8Mz47PEJBUz47PEVNST47SUdOT1JFICMgMTkxIMKzCis8VTIwNzQ+IDw0Pjs8QkFTPjs8RU1JPjtJR05PUkUgIyAxOTIgPDRTPgorPFUyMDc1PiA8NT47PEJBUz47PEVNST47SUdOT1JFICMgMTkzIDw1Uz4KKzxVMjA3Nj4gPDY+OzxCQVM+OzxFTUk+O0lHTk9SRSAjIDE5NCA8NlM+Cis8VTIwNzc+IDw3Pjs8QkFTPjs8RU1JPjtJR05PUkUgIyAxOTUgPDdTPgorPFUyMDc4PiA8OD47PEJBUz47PEVNST47SUdOT1JFICMgMTk2IDw4Uz4KKzxVMjA3OT4gPDk+OzxCQVM+OzxFTUk+O0lHTk9SRSAjIDE5NyA8OVM+CisjCis8VTAwNjE+IDxhPjs8QkFTPjs8TUlOPjtJR05PUkUgIyAxOTggYQorPFUwMEFBPiA8YT47PFBDTD47PEVNST47SUdOT1JFICMgMTk5IMKqCis8VTAwRTE+IDxhPjs8QUNBPjs8TUlOPjtJR05PUkUgIyAyMDAgw6EKKzxVMDBFMD4gPGE+OzxHUkE+OzxNSU4+O0lHTk9SRSAjIDIwMSDDoAorPFUwMEUyPiA8YT47PENJUj47PE1JTj47SUdOT1JFICMgMjAyIMOiCis8VTAwRTM+IDxhPjs8VElMPjs8TUlOPjtJR05PUkUgIyAyMDMgw6MKKzxVMDBFND4gPGE+OzxSRVU+OzxNSU4+O0lHTk9SRSAjIDIwNCDDpAorPFUwMEU1PiA8YT47PFJORT47PE1JTj47SUdOT1JFICMgMjA1IMOlCis8VTAxMDM+IDxhPjs8QlJFPjs8TUlOPjtJR05PUkUgIyAyMDYgPGEoPgorPFUwMTA1PiA8YT47PE9HTz47PE1JTj47SUdOT1JFICMgMjA3IDxhOz4KKzxVMDEwMT4gPGE+OzxNQUM+OzxNSU4+O0lHTk9SRSAjIDIwOCA8YS0+Cis8VTAxQ0U+IDxhPjs8Q0FSPjs8TUlOPjtJR05PUkUgIyAyMDkgPGE8PgorPFUwMURGPiA8YT47PFJFVT47PE1JTj47PE1BQz4gIyAyMTAgx58KKzxVMDFFMT4gPGE+OzxQQ1Q+OzxNSU4+OzxNQUM+ICMgMjExIMehCis8VTAxRkI+IDxhPjs8Uk5FPjs8TUlOPjs8QUNBPiAjIDIxMiDHuworPFUwMjAxPiA8YT47PERHUj47PE1JTj47SUdOT1JFICMgMjEzIMiBCis8VTAyMDM+IDxhPjs8SUJSPjs8TUlOPjtJR05PUkUgIyAyMTQgyIMKKzxVMDIyNz4gPGE+OzxQQ1Q+OzxNSU4+O0lHTk9SRSAjIDIxNSDIpworPFUxRTAxPiA8YT47PEJSTj47PE1JTj47SUdOT1JFICMgMjE2IOG4gQorPFUxRTlBPiA8YT47PFBDTD47PE1JTj47SUdOT1JFICMgMjE3IOG6mgorPFUxRUExPiA8YT47PEJQVD47PE1JTj47SUdOT1JFICMgMjE4IOG6oQorPFUxRUEzPiA8YT47PEhPSz47PE1JTj47SUdOT1JFICMgMjE5IOG6oworPFUxRUE1PiA8YT47PENJUj47PE1JTj47PEFDQT4gIyAyMjAg4bqlCis8VTFFQTc+IDxhPjs8Q0lSPjs8TUlOPjs8R1JBPiAjIDIyMSDhuqcKKzxVMUVBOT4gPGE+OzxDSVI+OzxNSU4+OzxIT0s+ICMgMjIyIOG6qQorPFUxRUFCPiA8YT47PENJUj47PE1JTj47PFRJTD4gIyAyMjMg4bqrCis8VTFFQUQ+IDxhPjs8Q0lSPjs8TUlOPjs8QlBUPiAjIDIyNCDhuq0KKzxVMUVBRj4gPGE+OzxCUkU+OzxNSU4+OzxBQ0E+ICMgMjI1IOG6rworPFUxRUIxPiA8YT47PEJSRT47PE1JTj47PEdSQT4gIyAyMjYg4bqxCis8VTFFQjM+IDxhPjs8QlJFPjs8TUlOPjs8SE9LPiAjIDIyNyDhurMKKzxVMUVCNT4gPGE+OzxCUkU+OzxNSU4+OzxNQUM+ICMgMjI4IOG6tQorPFUxRUI3PiA8YT47PEJSRT47PE1JTj47PEJQVD4gIyAyMjkg4bq3Cis8VTAwRTY+ICI8YT48ZT4iOyI8TElHPjxMSUc+IjsiPE1JTj48TUlOPiI7SUdOT1JFICMgMjMwIMOmCis8VTAxRTM+ICI8YT48ZT4iOyI8TElHPjxMSUc+IjsiPE1JTj48TUlOPiI7PE1BQz4gIyAyMzEgx6MKKzxVMDFGRD4gIjxhPjxlPiI7IjxMSUc+PExJRz4iOyI8TUlOPjxNSU4+Ijs8QUNBPiAjIDIzMiDHvQorPFUwMDYyPiA8Yj47PEJBUz47PE1JTj47SUdOT1JFICMgMjMzIGIKKzxVMDI1Mz4gPGI+OzxDUkw+OzxNSU4+O0lHTk9SRSAjIDIzNCDJkworPFUxRTAzPiA8Yj47PFBDVD47PE1JTj47SUdOT1JFICMgMjM1IOG4gworPFUxRTA1PiA8Yj47PEJQVD47PE1JTj47SUdOT1JFICMgMjM2IOG4hQorPFUxRTA3PiA8Yj47PEJNQT47PE1JTj47SUdOT1JFICMgMjM3IOG4hworPFUwMDYzPiA8Yz47PEJBUz47PE1JTj47SUdOT1JFICMgMjM4IGMKKzxVMDBFNz4gPGM+OzxDREk+OzxNSU4+O0lHTk9SRSAjIDIzOSDDpworPFUwMTA3PiA8Yz47PEFDQT47PE1JTj47SUdOT1JFICMgMjQwIDxjJz4KKzxVMDEwOT4gPGM+OzxDSVI+OzxNSU4+O0lHTk9SRSAjIDI0MSA8Yy8+PgorPFUwMTBEPiA8Yz47PENBUj47PE1JTj47SUdOT1JFICMgMjQyIDxjPD4KKzxVMDEwQj4gPGM+OzxQQ1Q+OzxNSU4+O0lHTk9SRSAjIDI0MyA8Yy4+Cis8VTAxODg+IDxjPjs8Q1JMPjs8TUlOPjtJR05PUkUgIyAyNDQgxogKKzxVMUUwOT4gPGM+OzxDREk+OzxNSU4+OzxBQ0E+ICMgMjQ1IOG4iQorPFUwMDY0PiA8ZD47PEJBUz47PE1JTj47SUdOT1JFICMgMjQ2IGQKKzxVMDBGMD4gPGQ+OzxQQ0w+OzxNSU4+O0lHTk9SRSAjIDI0NyDDsAorPFUwMTBGPiA8ZD47PENBUj47PE1JTj47SUdOT1JFICMgMjQ4IDxkPD4KKzxVMDExMT4gPGQ+OzxPQkw+OzxNSU4+O0lHTk9SRSAjIDI0OSA8ZC8vPgorPFUwMjU2PiA8ZD47PENSTD47PE1JTj47SUdOT1JFICMgMjUwIMmWCis8VTAyNTc+IDxkPjs8Q1JMPjs8TUlOPjtJR05PUkUgIyAyNTEgyZcKKzxVMUUwQj4gPGQ+OzxQQ1Q+OzxNSU4+O0lHTk9SRSAjIDI1MiDhuIsKKzxVMUUwRD4gPGQ+OzxCUFQ+OzxNSU4+O0lHTk9SRSAjIDI1MyDhuI0KKzxVMUUwRj4gPGQ+OzxCTUE+OzxNSU4+O0lHTk9SRSAjIDI1NCDhuI8KKzxVMUUxMT4gPGQ+OzxDREk+OzxNSU4+O0lHTk9SRSAjIDI1NSA8ZCw+Cis8VTFFMTM+IDxkPjs8QkNJPjs8TUlOPjtJR05PUkUgIyAyNTYg4biTCis8VTAxRjM+ICI8ZD48ej4iOyI8QkFTPjxCQVM+IjsiPE1JTj48TUlOPiI7SUdOT1JFICMgMjU3IDxkej4KKzxVMDFDNj4gIjxkPjx6PiI7IjxCQVM+PENBUj4iOyI8TUlOPjxNSU4+IjtJR05PUkUgIyAyNTggPGR6PD4KKzxVMDA2NT4gPGU+OzxCQVM+OzxNSU4+O0lHTk9SRSAjIDI1OSBlCis8VTAwRTk+IDxlPjs8QUNBPjs8TUlOPjtJR05PUkUgIyAyNjAgw6kKKzxVMDBFOD4gPGU+OzxHUkE+OzxNSU4+O0lHTk9SRSAjIDI2MSDDqAorPFUwMEVBPiA8ZT47PENJUj47PE1JTj47SUdOT1JFICMgMjYyIMOqCis8VTAwRUI+IDxlPjs8UkVVPjs8TUlOPjtJR05PUkUgIyAyNjMgw6sKKzxVMDExNT4gPGU+OzxCUkU+OzxNSU4+O0lHTk9SRSAjIDI2NCA8ZSg+Cis8VTAxMUI+IDxlPjs8Q0FSPjs8TUlOPjtJR05PUkUgIyAyNjUgPGU8PgorPFUwMTE3PiA8ZT47PFBDVD47PE1JTj47SUdOT1JFICMgMjY2IDxlLj4KKzxVMDExOT4gPGU+OzxPR08+OzxNSU4+O0lHTk9SRSAjIDI2NyA8ZTs+Cis8VTAxMTM+IDxlPjs8TUFDPjs8TUlOPjtJR05PUkUgIyAyNjggPGUtPgorPFUwMjA1PiA8ZT47PERHUj47PE1JTj47SUdOT1JFICMgMjY5IMiFCis8VTAyMDc+IDxlPjs8SUJSPjs8TUlOPjtJR05PUkUgIyAyNzAgyIcKKzxVMDIyOT4gPGU+OzxDREk+OzxNSU4+O0lHTk9SRSAjIDI3MSA8ZSw+Cis8VTFFMTU+IDxlPjs8TUFDPjs8TUlOPjs8R1JBPiAjIDI3MiDhuJUKKzxVMUUxNz4gPGU+OzxNQUM+OzxNSU4+OzxBQ0E+ICMgMjczIOG4lworPFUxRTE5PiA8ZT47PEJDST47PE1JTj47SUdOT1JFICMgMjc0IOG4mQorPFUxRTFCPiA8ZT47PEJUST47PE1JTj47SUdOT1JFICMgMjc1IOG4mworPFUxRTFEPiA8ZT47PENEST47PE1JTj47PEJSRT4gIyAyNzYg4bidCis8VTFFQjk+IDxlPjs8QlBUPjs8TUlOPjtJR05PUkUgIyAyNzcg4bq5Cis8VTFFQkI+IDxlPjs8SE9LPjs8TUlOPjtJR05PUkUgIyAyNzgg4bq7Cis8VTFFQkQ+IDxlPjs8VElMPjs8TUlOPjtJR05PUkUgIyAyNzkgPGU/PgorPFUxRUJGPiA8ZT47PENJUj47PE1JTj47PEFDQT4gIyAyODAg4bq/Cis8VTFFQzE+IDxlPjs8Q0lSPjs8TUlOPjs8R1JBPiAjIDI4MSDhu4EKKzxVMUVDMz4gPGU+OzxDSVI+OzxNSU4+OzxIT0s+ICMgMjgyIOG7gworPFUxRUM1PiA8ZT47PENJUj47PE1JTj47PFRJTD4gIyAyODMg4buFCis8VTFFQzc+IDxlPjs8Q0lSPjs8TUlOPjs8QlBUPiAjIDI4NCDhu4cKKzxVMDFERD4gPGU+OzxQQ0w+OzxNSU4+O0lHTk9SRSAjIDI4NSDHnQorPFUwMjU5PiA8ZT47PFBDTD47PE1JTj47SUdOT1JFICMgMjg2IMmZCis8VTAyNUI+IDxlPjs8UENMPjs8TUlOPjtJR05PUkUgIyAyODcgyZsKKzxVMDA2Nj4gPGY+OzxCQVM+OzxNSU4+O0lHTk9SRSAjIDI4OCBmCis8VTFFMUY+IDxmPjs8UENUPjs8TUlOPjtJR05PUkUgIyAyODkgPGYuPgorPFUwMDY3PiA8Zz47PEJBUz47PE1JTj47SUdOT1JFICMgMjkwIGcKKzxVMDExRj4gPGc+OzxCUkU+OzxNSU4+O0lHTk9SRSAjIDI5MSA8Zyg+Cis8VTAxMUQ+IDxnPjs8Q0lSPjs8TUlOPjtJR05PUkUgIyAyOTIgPGcvPj4KKzxVMDEyMT4gPGc+OzxQQ1Q+OzxNSU4+O0lHTk9SRSAjIDI5MyA8Zy4+Cis8VTAxMjM+IDxnPjs8Q0RJPjs8TUlOPjtJR05PUkUgIyAyOTQgPGcsPgorPFUwMUU1PiA8Zz47PE9CTD47PE1JTj47SUdOT1JFICMgMjk1IMelCis8VTAxRTc+IDxnPjs8Q0FSPjs8TUlOPjtJR05PUkUgIyAyOTYgx6cKKzxVMDFGNT4gPGc+OzxBQ0E+OzxNSU4+O0lHTk9SRSAjIDI5NyDHtQorPFUxRTIxPiA8Zz47PE1BQz47PE1JTj47SUdOT1JFICMgMjk4IOG4oQorPFUwMjYwPiA8Zz47PENSTD47PE1JTj47SUdOT1JFICMgMjk5IMmgCis8VTAxQTM+IDxnPjs8UENMPjs8TUlOPjtJR05PUkUgIyAzMDAgxqMKKzxVMDA2OD4gPGg+OzxCQVM+OzxNSU4+O0lHTk9SRSAjIDMwMSBoCis8VTAxMjU+IDxoPjs8Q0lSPjs8TUlOPjtJR05PUkUgIyAzMDIgPGgvPj4KKzxVMDEyNz4gPGg+OzxPQkw+OzxNSU4+O0lHTk9SRSAjIDMwMyA8aC8vPgorPFUwMjFGPiA8aD47PENBUj47PE1JTj47SUdOT1JFICMgMzA0IDxoPD4KKzxVMUUyMz4gPGg+OzxQQ1Q+OzxNSU4+O0lHTk9SRSAjIDMwNSA8aC4+Cis8VTFFMjU+IDxoPjs8QlBUPjs8TUlOPjtJR05PUkUgIyAzMDYg4bilCis8VTFFMjc+IDxoPjs8UkVVPjs8TUlOPjtJR05PUkUgIyAzMDcgPGg6PgorPFUxRTI5PiA8aD47PENEST47PE1JTj47SUdOT1JFICMgMzA4IDxoLD4KKzxVMUUyQj4gPGg+OzxCQlI+OzxNSU4+O0lHTk9SRSAjIDMwOSDhuKsKKzxVMUU5Nj4gPGg+OzxCTUE+OzxNSU4+O0lHTk9SRSAjIDMxMCDhupYKKzxVMDE5NT4gIjxoPjx2PiI7IjxMSUc+PExJRz4iOyI8TUlOPjxNSU4+IjtJR05PUkUgIyAzMTEgxpUKKzxVMDA2OT4gPGk+OzxCQVM+OzxNSU4+O0lHTk9SRSAjIDMxMiBpCis8VTAwRUQ+IDxpPjs8QUNBPjs8TUlOPjtJR05PUkUgIyAzMTMgw60KKzxVMDBFQz4gPGk+OzxHUkE+OzxNSU4+O0lHTk9SRSAjIDMxNCDDrAorPFUwMEVFPiA8aT47PENJUj47PE1JTj47SUdOT1JFICMgMzE1IMOuCis8VTAwRUY+IDxpPjs8UkVVPjs8TUlOPjtJR05PUkUgIyAzMTYgw68KKzxVMDEzMT4gPGk+OzxQQ0w+OzxNSU4+O0lHTk9SRSAjIDMxNyA8aS4+Cis8VTAxMjk+IDxpPjs8VElMPjs8TUlOPjtJR05PUkUgIyAzMTggPGk/PgorPFUwMTJGPiA8aT47PE9HTz47PE1JTj47SUdOT1JFICMgMzE5IDxpOz4KKzxVMDEyQj4gPGk+OzxNQUM+OzxNSU4+O0lHTk9SRSAjIDMyMCA8aS0+Cis8VTAxMkQ+IDxpPjs8QlJFPjs8TUlOPjtJR05PUkUgIyAzMjEgPGkoPgorPFUwMUQwPiA8aT47PENBUj47PE1JTj47SUdOT1JFICMgMzIyIDxpPD4KKzxVMDIwOT4gPGk+OzxER1I+OzxNSU4+O0lHTk9SRSAjIDMyMyDIiQorPFUwMjBCPiA8aT47PElCUj47PE1JTj47SUdOT1JFICMgMzI0IMiLCis8VTFFMkQ+IDxpPjs8QlRJPjs8TUlOPjtJR05PUkUgIyAzMjUg4bitCis8VTFFMkY+IDxpPjs8UkVVPjs8TUlOPjs8QUNBPiAjIDMyNiDhuK8KKzxVMUVDOT4gPGk+OzxIT0s+OzxNSU4+O0lHTk9SRSAjIDMyNyDhu4kKKzxVMUVDQj4gPGk+OzxCUFQ+OzxNSU4+O0lHTk9SRSAjIDMyOCDhu4sKKzxVMDEzMz4gIjxpPjxqPiI7IjxCQVM+PEJBUz4iOyI8TUlOPjxNSU4+IjtJR05PUkUgIyAzMjkgPGlqPgorPFUwMDZBPiA8aj47PEJBUz47PE1JTj47SUdOT1JFICMgMzMwIGoKKzxVMDEzNT4gPGo+OzxDSVI+OzxNSU4+O0lHTk9SRSAjIDMzMSA8ai8+PgorPFUwMUYwPiA8aj47PENBUj47PE1JTj47SUdOT1JFICMgMzMxIDxqPD4KKzxVMDA2Qj4gPGs+OzxCQVM+OzxNSU4+O0lHTk9SRSAjIDMzMyBrCis8VTAxMzc+IDxrPjs8Q0RJPjs8TUlOPjtJR05PUkUgIyAzMzQgPGssPgorPFUwMUU5PiA8az47PENBUj47PE1JTj47SUdOT1JFICMgMzM1IDxrPD4KKzxVMUUzMT4gPGs+OzxBQ0E+OzxNSU4+O0lHTk9SRSAjIDMzNiA8ayc+Cis8VTFFMzM+IDxrPjs8QlBUPjs8TUlOPjtJR05PUkUgIyAzMzcg4bizCis8VTFFMzU+IDxrPjs8Qk1BPjs8TUlOPjtJR05PUkUgIyAzMzgg4bi1Cis8VTAxOTk+IDxrPjs8Q1JMPjs8TUlOPjtJR05PUkUgIyAzMzkgxpkKKzxVMDEzOD4gPGs+OzxQQ0w+OzxNSU4+O0lHTk9SRSAjIDM0MCA8a2s+Cis8VTAwNkM+IDxsPjs8QkFTPjs8TUlOPjtJR05PUkUgIyAzNDEgbAorPFUwMTNBPiA8bD47PEFDQT47PE1JTj47SUdOT1JFICMgMzQyIDxsJz4KKzxVMDEzRT4gPGw+OzxDQVI+OzxNSU4+O0lHTk9SRSAjIDM0MyA8bDw+Cis8VTAxNDI+IDxsPjs8T0JMPjs8TUlOPjtJR05PUkUgIyAzNDQgPGwvLz4KKzxVMDEzQz4gPGw+OzxDREk+OzxNSU4+O0lHTk9SRSAjIDM0NSA8bCw+Cis8VTFFMzc+IDxsPjs8QlBUPjs8TUlOPjtJR05PUkUgIyAzNDYg4bi3Cis8VTFFMzk+IDxsPjs8QlBUPjs8TUlOPjs8TUFDPiAjIDM0NyDhuLkKKzxVMUUzQj4gPGw+OzxCTUE+OzxNSU4+O0lHTk9SRSAjIDM0OCDhuLsKKzxVMUUzRD4gPGw+OzxCQ0k+OzxNSU4+O0lHTk9SRSAjIDM0OSDhuL0KKzxVMDE0MD4gPGw+OzxQQ1Q+OzxNSU4+O0lHTk9SRSAjIDM1MCA8bC4+Cis8VTAxQzk+ICI8bD48aj4iOyI8QkFTPjxCQVM+IjsiPE1JTj48TUlOPiI7SUdOT1JFICMgMzUxIDxsaj4KKzxVMDA2RD4gPG0+OzxCQVM+OzxNSU4+O0lHTk9SRSAjIDM1MiBtCis8VTFFM0Y+IDxtPjs8QUNBPjs8TUlOPjtJR05PUkUgIyAzNTMgPG0nPgorPFUxRTQxPiA8bT47PFBDVD47PE1JTj47SUdOT1JFICMgMzU0IDxtLj4KKzxVMUU0Mz4gPG0+OzxCUFQ+OzxNSU4+O0lHTk9SRSAjIDM1NSDhuYMKKzxVMDA2RT4gPG4+OzxCQVM+OzxNSU4+O0lHTk9SRSAjIDM1NiBuCis8VTAwRjE+IDxuPjs8VElMPjs8TUlOPjtJR05PUkUgIyAzNTcgw7EKKzxVMDE0OT4gPG4+OzxQQ0w+OzxNSU4+O0lHTk9SRSAjIDM1OCA8J24+Cis8VTAxNDQ+IDxuPjs8QUNBPjs8TUlOPjtJR05PUkUgIyAzNTkgPG4nPgorPFUwMTQ4PiA8bj47PENBUj47PE1JTj47SUdOT1JFICMgMzYwIDxuPD4KKzxVMDE0Nj4gPG4+OzxDREk+OzxNSU4+O0lHTk9SRSAjIDM2MSA8biw+Cis8VTAxRjk+IDxuPjs8R1JBPjs8TUlOPjtJR05PUkUgIyAzNjIgx7kKKzxVMUU0NT4gPG4+OzxQQ1Q+OzxNSU4+O0lHTk9SRSAjIDM2MyA8bi4+Cis8VTFFNDc+IDxuPjs8QlBUPjs8TUlOPjtJR05PUkUgIyAzNjQg4bmHCis8VTFFNDk+IDxuPjs8Qk1BPjs8TUlOPjtJR05PUkUgIyAzNjUg4bmJCis8VTFFNEI+IDxuPjs8QkNJPjs8TUlOPjtJR05PUkUgIyAzNjYg4bmLCis8VTAxNEI+ICI8bj48Zz4iOyI8TElHPjxMSUc+IjsiPE1JTj48TUlOPiI7SUdOT1JFICMgMzY3IDxuZz4KKzxVMDFDQz4gIjxuPjxqPiI7IjxCQVM+PEJBUz4iOyI8TUlOPjxNSU4+IjtJR05PUkUgIyAzNjggPG4+PGo+Cis8VTAwNkY+IDxvPjs8QkFTPjs8TUlOPjtJR05PUkUgIyAzNjkgbworPFUwMEJBPiA8bz47PFBDTD47PEVNST47SUdOT1JFICMgMzcwIMK6Cis8VTAwRjM+IDxvPjs8QUNBPjs8TUlOPjtJR05PUkUgIyAzNzEgw7MKKzxVMDBGMj4gPG8+OzxHUkE+OzxNSU4+O0lHTk9SRSAjIDM3MiDDsgorPFUwMEY0PiA8bz47PENJUj47PE1JTj47SUdOT1JFICMgMzczIMO0Cis8VTAwRjU+IDxvPjs8VElMPjs8TUlOPjtJR05PUkUgIyAzNzQgw7UKKzxVMDBGNj4gPG8+OzxSRVU+OzxNSU4+O0lHTk9SRSAjIDM3NSDDtgorPFUwMEY4PiA8bz47PE9CTD47PE1JTj47SUdOT1JFICMgMzc2IMO4Cis8VTAxNTE+IDxvPjs8REFDPjs8TUlOPjtJR05PUkUgIyAzNzcgPG8iPgorPFUwMTREPiA8bz47PE1BQz47PE1JTj47SUdOT1JFICMgMzc4IDxvLT4KKzxVMDE0Rj4gPG8+OzxCUkU+OzxNSU4+O0lHTk9SRSAjIDM3OSA8byg+Cis8VTAxQTE+IDxvPjs8Q1JMPjs8TUlOPjtJR05PUkUgIyAzODAgxqEKKzxVMDFEMj4gPG8+OzxDQVI+OzxNSU4+O0lHTk9SRSAjIDM4MSA8bzw+Cis8VTAxRUI+IDxvPjs8T0dPPjs8TUlOPjtJR05PUkUgIyAzODIgPG87PgorPFUwMUVEPiA8bz47PE9HTz47PE1JTj47PE1BQz4gIyAzODMgx60KKzxVMDFGRj4gPG8+OzxPQkw+OzxNSU4+OzxBQ0E+ICMgMzg0IMe/Cis8VTAyMEQ+IDxvPjs8REdSPjs8TUlOPjtJR05PUkUgIyAzODUgyI0KKzxVMDIwRj4gPG8+OzxJQlI+OzxNSU4+O0lHTk9SRSAjIDM4NiDIjworPFUwMjJCPiA8bz47PFJFVT47PE1JTj47PE1BQz4gIyAzODcgyKsKKzxVMDIyRD4gPG8+OzxUSUw+OzxNSU4+OzxNQUM+ICMgMzg4IMitCis8VTAyMkY+IDxvPjs8UENUPjs8TUlOPjtJR05PUkUgIyAzODkgPG8uPgorPFUwMjMxPiA8bz47PFBDVD47PE1JTj47PE1BQz4gIyAzOTAgyLEKKzxVMUU0RD4gPG8+OzxUSUw+OzxNSU4+OzxBQ0E+ICMgMzkxIOG5jQorPFUxRTRGPiA8bz47PFRJTD47PE1JTj47PFJFVT4gIyAzOTIg4bmPCis8VTFFNTE+IDxvPjs8TUFDPjs8TUlOPjs8R1JBPiAjIDM5MyDhuZEKKzxVMUU1Mz4gPG8+OzxNQUM+OzxNSU4+OzxBQ0E+ICMgMzk0IOG5kworPFUxRUNEPiA8bz47PEJQVD47PE1JTj47SUdOT1JFICMgMzk1IOG7jQorPFUxRUNGPiA8bz47PEhPSz47PE1JTj47SUdOT1JFICMgMzk2IOG7jworPFUxRUQxPiA8bz47PENJUj47PE1JTj47PEFDQT4gIyAzOTcg4buRCis8VTFFRDM+IDxvPjs8Q0lSPjs8TUlOPjs8R1JBPiAjIDM5OCDhu5MKKzxVMUVENT4gPG8+OzxDSVI+OzxNSU4+OzxIT0s+ICMgMzk5IOG7lQorPFUxRUQ3PiA8bz47PENJUj47PE1JTj47PFRJTD4gIyA0MDAg4buXCis8VTFFRDk+IDxvPjs8Q0lSPjs8TUlOPjs8QlBUPiAjIDQwMSDhu5kKKzxVMUVEQj4gPG8+OzxDUkw+OzxNSU4+OzxBQ0E+ICMgNDAyIOG7mworPFUxRUREPiA8bz47PENSTD47PE1JTj47PEdSQT4gIyA0MDMg4budCis8VTFFREY+IDxvPjs8Q1JMPjs8TUlOPjs8SE9LPiAjIDQwNCDhu58KKzxVMUVFMT4gPG8+OzxDUkw+OzxNSU4+OzxUSUw+ICMgNDA1IOG7oQorPFUxRUUzPiA8bz47PENSTD47PE1JTj47PEJQVD4gIyA0MDYg4bujCis8VTAyNzU+IDxvPjs8UkVVPjs8TUlOPjtJR05PUkUgIyA0MDcgybUgIyA8UkVVPiBhcyBpdCBpcyBvZnRlbiBzeW4uIG9mIDxvOj4KKzxVMDI1ND4gPG8+OzxQQ0w+OzxNSU4+O0lHTk9SRSAjIDQwOCDJlAorPFUwMTUzPiAiPG8+PGU+IjsiPExJRz48TElHPiI7IjxNSU4+PE1JTj4iO0lHTk9SRSAjIDQwOSA8b2U+Cis8VTAwNzA+IDxwPjs8QkFTPjs8TUlOPjtJR05PUkUgIyA0MTAgcAorPFUxRTU1PiA8cD47PEFDQT47PE1JTj47SUdOT1JFICMgNDExIDxwJz4KKzxVMUU1Nz4gPHA+OzxQQ1Q+OzxNSU4+O0lHTk9SRSAjIDQxMiA8cC4+Cis8VTAwNzE+IDxxPjs8QkFTPjs8TUlOPjtJR05PUkUgIyA0MTMgcQorPFUwMDcyPiA8cj47PEJBUz47PE1JTj47SUdOT1JFICMgNDE0IHIKKzxVMDE1NT4gPHI+OzxBQ0E+OzxNSU4+O0lHTk9SRSAjIDQxNSA8cic+Cis8VTAxNTk+IDxyPjs8Q0FSPjs8TUlOPjtJR05PUkUgIyA0MTYgPHI8PgorPFUwMTU3PiA8cj47PENEST47PE1JTj47SUdOT1JFICMgNDE3IDxyLD4KKzxVMDIxMT4gPHI+OzxER1I+OzxNSU4+O0lHTk9SRSAjIDQxOCDIkQorPFUwMjEzPiA8cj47PElCUj47PE1JTj47SUdOT1JFICMgNDE5IMiTCis8VTFFNTk+IDxyPjs8UENUPjs8TUlOPjtJR05PUkUgIyA0MjAgPHIuPgorPFUxRTVCPiA8cj47PEJQVD47PE1JTj47SUdOT1JFICMgNDIxIOG5mworPFUxRTVEPiA8cj47PEJQVD47PE1JTj47PE1BQz4gIyA0MjIg4bmdCis8VTFFNUY+IDxyPjs8Qk1BPjs8TUlOPjtJR05PUkUgIyA0MjMg4bmfCis8VTAwNzM+IDxzPjs8QkFTPjs8TUlOPjtJR05PUkUgIyA0MjQgcworPFUwMTVCPiA8cz47PEFDQT47PE1JTj47SUdOT1JFICMgNDI1IDxzJz4KKzxVMDE1RD4gPHM+OzxDSVI+OzxNSU4+O0lHTk9SRSAjIDQyNiA8cy8+PgorPFUwMTYxPiA8cz47PENBUj47PE1JTj47SUdOT1JFICMgNDI3IDxzPD4KKzxVMDE1Rj4gPHM+OzxDREk+OzxNSU4+O0lHTk9SRSAjIDQyOCA8cyw+Cis8VTAyMTk+IDxzPjs8Q0RJPjs8TUlOPjtJR05PUkUgIyA0MjkgyJkKKzxVMUU2MT4gPHM+OzxQQ1Q+OzxNSU4+O0lHTk9SRSAjIDQzMCA8cy4+Cis8VTFFNjM+IDxzPjs8QlBUPjs8TUlOPjtJR05PUkUgIyA0MzEg4bmjCis8VTFFNjU+IDxzPjs8QUNBPjs8TUlOPjs8UENUPiAjIDQzMiDhuaUKKzxVMUU2Nz4gPHM+OzxDQVI+OzxNSU4+OzxQQ1Q+ICMgNDMzIOG5pworPFUxRTY5PiA8cz47PEJQVD47PE1JTj47PFBDVD4gIyA0MzQg4bmpCis8VTAxN0Y+IDxzPjs8UENMPjs8TUlOPjtJR05PUkUgIyA0MzUgxb8KKzxVMUU5Qj4gPHM+OzxQQ0w+OzxNSU4+OzxQQ1Q+ICMgNDM2IOG6mworPFUwMERGPiAiPHM+PHM+IjsiPExJRz48TElHPiI7IjxNSU4+PE1JTj4iO0lHTk9SRSAjIDQzNyDDnworPFUwMDc0PiA8dD47PEJBUz47PE1JTj47SUdOT1JFICMgNDM4IHQKKzxVMDE2NT4gPHQ+OzxDQVI+OzxNSU4+O0lHTk9SRSAjIDQzOSA8dDw+Cis8VTAxNjc+IDx0Pjs8T0JMPjs8TUlOPjtJR05PUkUgIyA0NDAgPHQvLz4KKzxVMDE2Mz4gPHQ+OzxDREk+OzxNSU4+O0lHTk9SRSAjIDQ0MSA8dCw+Cis8VTAyMUI+IDx0Pjs8Q0RJPjs8TUlOPjtJR05PUkUgIyA0NDIgyJsKKzxVMUU2Qj4gPHQ+OzxQQ1Q+OzxNSU4+O0lHTk9SRSAjIDQ0MyA8dC4+Cis8VTFFNkQ+IDx0Pjs8QlBUPjs8TUlOPjtJR05PUkUgIyA0NDQg4bmtCis8VTFFNkY+IDx0Pjs8Qk1BPjs8TUlOPjtJR05PUkUgIyA0NDUg4bmvCis8VTFFNzE+IDx0Pjs8QkNJPjs8TUlOPjtJR05PUkUgIyA0NDYg4bmxCis8VTFFOTc+IDx0Pjs8UkVVPjs8TUlOPjtJR05PUkUgIyA0NDcgPHQ6PgorPFUwMDc1PiA8dT47PEJBUz47PE1JTj47SUdOT1JFICMgNDQ4IHUKKzxVMDBGQT4gPHU+OzxBQ0E+OzxNSU4+O0lHTk9SRSAjIDQ0OSDDugorPFUwMEY5PiA8dT47PEdSQT47PE1JTj47SUdOT1JFICMgNDUwIMO5Cis8VTAwRkI+IDx1Pjs8Q0lSPjs8TUlOPjtJR05PUkUgIyA0NTEgw7sKKzxVMDBGQz4gPHU+OzxSRVU+OzxNSU4+O0lHTk9SRSAjIDQ1MiDDvAorPFUwMTZEPiA8dT47PEJSRT47PE1JTj47SUdOT1JFICMgNDUzIDx1KD4KKzxVMDE2Rj4gPHU+OzxSTkU+OzxNSU4+O0lHTk9SRSAjIDQ1NCA8dTA+Cis8VTAxNzE+IDx1Pjs8REFDPjs8TUlOPjtJR05PUkUgIyA0NTUgPHUiPgorPFUwMTY5PiA8dT47PFRJTD47PE1JTj47SUdOT1JFICMgNDU2IDx1Pz4KKzxVMDE3Mz4gPHU+OzxPR08+OzxNSU4+O0lHTk9SRSAjIDQ1NyA8dTs+Cis8VTAxNkI+IDx1Pjs8TUFDPjs8TUlOPjtJR05PUkUgIyA0NTggPHUtPgorPFUwMUIwPiA8dT47PENSTD47PE1JTj47SUdOT1JFICMgNDU5IMawCis8VTAxRDQ+IDx1Pjs8Q0FSPjs8TUlOPjtJR05PUkUgIyA0NjAgPHU8PgorPFUwMUQ2PiA8dT47PFJFVT47PE1JTj47PE1BQz4gIyA0NjEgx5YKKzxVMDFEOD4gPHU+OzxSRVU+OzxNSU4+OzxBQ0E+ICMgNDYyIMeYCis8VTAxREE+IDx1Pjs8UkVVPjs8TUlOPjs8Q0FSPiAjIDQ2MyDHmgorPFUwMURDPiA8dT47PFJFVT47PE1JTj47PEdSQT4gIyA0NjQgx5wKKzxVMDIxNT4gPHU+OzxER1I+OzxNSU4+O0lHTk9SRSAjIDQ2NSDIlQorPFUwMjE3PiA8dT47PElCUj47PE1JTj47SUdOT1JFICMgNDY2IMiXCis8VTFFNzM+IDx1Pjs8QlJVPjs8TUlOPjtJR05PUkUgIyA0Njcg4bmzCis8VTFFNzU+IDx1Pjs8QlRJPjs8TUlOPjtJR05PUkUgIyA0Njgg4bm1Cis8VTFFNzc+IDx1Pjs8QkNJPjs8TUlOPjtJR05PUkUgIyA0Njkg4bm3Cis8VTFFNzk+IDx1Pjs8VElMPjs8TUlOPjs8QUNBPiAjIDQ3MCDhubkKKzxVMUU3Qj4gPHU+OzxNQUM+OzxNSU4+OzxSRVU+ICMgNDcxIOG5uworPFUxRUU1PiA8dT47PEJQVD47PE1JTj47SUdOT1JFICMgNDcyIOG7pQorPFUxRUU3PiA8dT47PEhPSz47PE1JTj47SUdOT1JFICMgNDczIOG7pworPFUxRUU5PiA8dT47PENSTD47PE1JTj47PEFDQT4gIyA0NzQg4bupCis8VTFFRUI+IDx1Pjs8Q1JMPjs8TUlOPjs8R1JBPiAjIDQ3NSDhu6sKKzxVMUVFRD4gPHU+OzxDUkw+OzxNSU4+OzxIT0s+ICMgNDc2IOG7rQorPFUxRUVGPiA8dT47PENSTD47PE1JTj47PFRJTD4gIyA0Nzcg4buvCis8VTFFRjE+IDx1Pjs8Q1JMPjs8TUlOPjs8QlBUPiAjIDQ3OCDhu7EKKzxVMDA3Nj4gPHY+OzxCQVM+OzxNSU4+O0lHTk9SRSAjIDQ3OSB2Cis8VTFFN0Q+IDx2Pjs8VElMPjs8TUlOPjtJR05PUkUgIyA0ODAg4bm9Cis8VTFFN0Y+IDx2Pjs8QlBUPjs8TUlOPjtJR05PUkUgIyA0ODEg4bm/Cis8VTAwNzc+IDx3Pjs8QkFTPjs8TUlOPjtJR05PUkUgIyA0ODIgdworPFUwMTc1PiA8dz47PENJUj47PE1JTj47SUdOT1JFICMgNDgzIDx3Lz4+Cis8VTFFODE+IDx3Pjs8R1JBPjs8TUlOPjtJR05PUkUgIyA0ODQg4bqBCis8VTFFODM+IDx3Pjs8QUNBPjs8TUlOPjtJR05PUkUgIyA0ODUg4bqDCis8VTFFODU+IDx3Pjs8UkVVPjs8TUlOPjtJR05PUkUgIyA0ODYg4bqFCis8VTFFODc+IDx3Pjs8UENUPjs8TUlOPjtJR05PUkUgIyA0ODcg4bqHCis8VTFFODk+IDx3Pjs8QlBUPjs8TUlOPjtJR05PUkUgIyA0ODgg4bqJCis8VTFFOTg+IDx3Pjs8Uk5FPjs8TUlOPjtJR05PUkUgIyA0ODkg4bqYCis8VTAxQkY+IDx3Pjs8UENMPjs8TUlOPjtJR05PUkUgIyA0OTAgxr8KKzxVMDA3OD4gPHg+OzxCQVM+OzxNSU4+O0lHTk9SRSAjIDQ5MSB4Cis8VTFFOEI+IDx4Pjs8UENUPjs8TUlOPjtJR05PUkUgIyA0OTIgPHguPgorPFUxRThEPiA8eD47PFJFVT47PE1JTj47SUdOT1JFICMgNDkzIDx4Oj4KKzxVMDA3OT4gPHk+OzxCQVM+OzxNSU4+O0lHTk9SRSAjIDQ5NCB5Cis8VTAwRkQ+IDx5Pjs8QUNBPjs8TUlOPjtJR05PUkUgIyA0OTUgw70KKzxVMDBGRj4gPHk+OzxSRVU+OzxNSU4+O0lHTk9SRSAjIDQ5NiDDvworPFUwMTc3PiA8eT47PENJUj47PE1JTj47SUdOT1JFICMgNDk3IDx5Lz4+Cis8VTAyMzM+IDx5Pjs8TUFDPjs8TUlOPjtJR05PUkUgIyA0OTggPHktPgorPFUxRThGPiA8eT47PFBDVD47PE1JTj47SUdOT1JFICMgNDk5IDx5Lj4KKzxVMUU5OT4gPHk+OzxSTkU+OzxNSU4+O0lHTk9SRSAjIDUwMCDhupkKKzxVMUVGMz4gPHk+OzxHUkE+OzxNSU4+O0lHTk9SRSAjIDUwMSDhu7MKKzxVMUVGNT4gPHk+OzxCUFQ+OzxNSU4+O0lHTk9SRSAjIDUwMiDhu7UKKzxVMUVGNz4gPHk+OzxIT0s+OzxNSU4+O0lHTk9SRSAjIDUwMyDhu7cKKzxVMUVGOT4gPHk+OzxUSUw+OzxNSU4+O0lHTk9SRSAjIDUwNCDhu7kKKzxVMDFCND4gPHk+OzxDUkw+OzxNSU4+O0lHTk9SRSAjIDUwNSDGtAorPFUwMjFEPiA8eT47PFBDTD47PE1JTj47SUdOT1JFICMgNTA2IMidCis8VTAwN0E+IDx6Pjs8QkFTPjs8TUlOPjtJR05PUkUgIyA1MDcgegorPFUwMTdBPiA8ej47PEFDQT47PE1JTj47SUdOT1JFICMgNTA4IDx6Jz4KKzxVMDE3RT4gPHo+OzxDQVI+OzxNSU4+O0lHTk9SRSAjIDUwOSA8ejw+Cis8VTAxN0M+IDx6Pjs8UENUPjs8TUlOPjtJR05PUkUgIyA1MTAgPHouPgorPFUxRTkxPiA8ej47PENJUj47PE1JTj47SUdOT1JFICMgNTExIDx6Lz4+Cis8VTFFOTM+IDx6Pjs8QlBUPjs8TUlOPjtJR05PUkUgIyA1MTIg4bqTCis8VTFFOTU+IDx6Pjs8Qk1BPjs8TUlOPjtJR05PUkUgIyA1MTMg4bqVCis8VTAxQjY+IDx6Pjs8T0JMPjs8TUlOPjtJR05PUkUgIyA1MTIgxrYKKzxVMDIyNT4gPHo+OzxDUkw+OzxNSU4+O0lHTk9SRSAjIDUxMyDIpQorPFUwMjkyPiA8emg+OzxCQVM+OzxNSU4+O0lHTk9SRSAjIDUxNCDKkgorPFUwMUVGPiA8emg+OzxDQVI+OzxNSU4+O0lHTk9SRSAjIDUxNSDHrworPFUwMEZFPiA8dGg+OzxCQVM+OzxNSU4+O0lHTk9SRSAjIDUxNiDDngorPFUwMDQxPiA8YT47PEJBUz47PENBUD47SUdOT1JFICMgNTE3IEEKKzxVMDBDMT4gPGE+OzxBQ0E+OzxDQVA+O0lHTk9SRSAjIDUxOCDDgQorPFUwMEMwPiA8YT47PEdSQT47PENBUD47SUdOT1JFICMgNTE5IMOACis8VTAwQzI+IDxhPjs8Q0lSPjs8Q0FQPjtJR05PUkUgIyA1MjAgw4IKKzxVMDBDMz4gPGE+OzxUSUw+OzxDQVA+O0lHTk9SRSAjIDUyMSDDgworPFUwMEM0PiA8YT47PFJFVT47PENBUD47SUdOT1JFICMgNTIyIMOECis8VTAwQzU+IDxhPjs8Uk5FPjs8Q0FQPjtJR05PUkUgIyA1MjMgw4UKKzxVMDEwMj4gPGE+OzxCUkU+OzxDQVA+O0lHTk9SRSAjIDUyNCA8QSg+Cis8VTAxMDQ+IDxhPjs8T0dPPjs8Q0FQPjtJR05PUkUgIyA1MjUgPEE7PgorPFUwMTAwPiA8YT47PE1BQz47PENBUD47SUdOT1JFICMgNTI2IDxBLT4KKzxVMDFDRD4gPGE+OzxDQVI+OzxDQVA+O0lHTk9SRSAjIDUyNyA8QTw+Cis8VTAxREU+IDxhPjs8UkVVPjs8Q0FQPjs8TUFDPiAjIDUyOCDHngorPFUwMUUwPiA8YT47PFBDVD47PENBUD47PE1BQz4gIyA1Mjkgx6AKKzxVMDFGQT4gPGE+OzxSTkU+OzxDQVA+OzxBQ0E+ICMgNTMwIMe6Cis8VTAyMDA+IDxhPjs8REdSPjs8Q0FQPjtJR05PUkUgIyA1MzEgyIAKKzxVMDIwMj4gPGE+OzxJQlI+OzxDQVA+O0lHTk9SRSAjIDUzMiDIggorPFUwMjI2PiA8YT47PFBDVD47PENBUD47SUdOT1JFICMgNTMzIDxBLj4KKzxVMUUwMD4gPGE+OzxCUk4+OzxDQVA+O0lHTk9SRSAjIDUzNCDhuIAKKzxVMUVBMD4gPGE+OzxCUFQ+OzxDQVA+O0lHTk9SRSAjIDUzNSDhuqAKKzxVMUVBMj4gPGE+OzxIT0s+OzxDQVA+O0lHTk9SRSAjIDUzNiDhuqIKKzxVMUVBND4gPGE+OzxDSVI+OzxDQVA+OzxBQ0E+ICMgNTM3IOG6pAorPFUxRUE2PiA8YT47PENJUj47PENBUD47PEdSQT4gIyA1Mzgg4bqmCis8VTFFQTg+IDxhPjs8Q0lSPjs8Q0FQPjs8SE9LPiAjIDUzOSDhuqgKKzxVMUVBQT4gPGE+OzxDSVI+OzxDQVA+OzxUSUw+ICMgNTQwIOG6qgorPFUxRUFDPiA8YT47PENJUj47PENBUD47PEJQVD4gIyA1NDEg4bqsCis8VTFFQUU+IDxhPjs8QlJFPjs8Q0FQPjs8QUNBPiAjIDU0MiDhuq4KKzxVMUVCMD4gPGE+OzxCUkU+OzxDQVA+OzxHUkE+ICMgNTQzIOG6sAorPFUxRUIyPiA8YT47PEJSRT47PENBUD47PEhPSz4gIyA1NDQg4bqyCis8VTFFQjQ+IDxhPjs8QlJFPjs8Q0FQPjs8VElMPiAjIDU0NSDhurQKKzxVMUVCNj4gPGE+OzxCUkU+OzxDQVA+OzxCUFQ+ICMgNTQ2IOG6tgorPFUwMEM2PiAiPGE+PGU+IjsiPExJRz48TElHPiI7IjxDQVA+PENBUD4iO0lHTk9SRSAjIDU0NyDDhgorPFUwMUUyPiAiPGE+PGU+IjsiPExJRz48TElHPiI7IjxDQVA+PENBUD4iOzxNQUM+ICMgNTQ4IMeiCis8VTAxRkM+ICI8YT48ZT4iOyI8TElHPjxMSUc+IjsiPENBUD48Q0FQPiI7PEFDQT4gIyA1NDkgx7wKKzxVMDA0Mj4gPGI+OzxCQVM+OzxDQVA+O0lHTk9SRSAjIDU1MCBCCis8VTFFMDI+IDxiPjs8UENUPjs8Q0FQPjtJR05PUkUgIyA1NTEgPEIuPgorPFUxRTA0PiA8Yj47PEJQVD47PENBUD47SUdOT1JFICMgNTUyIOG4hAorPFUxRTA2PiA8Yj47PEJNQT47PENBUD47SUdOT1JFICMgNTUzIOG4hgorPFUwMTgxPiA8Yj47PENSTD47PENBUD47SUdOT1JFICMgNTU0IMaBCis8VTAwNDM+IDxjPjs8QkFTPjs8Q0FQPjtJR05PUkUgIyA1NTUgQworPFUwMEM3PiA8Yz47PENEST47PENBUD47SUdOT1JFICMgNTU2IMOHCis8VTAxMDY+IDxjPjs8QUNBPjs8Q0FQPjtJR05PUkUgIyA1NTcgPEMnPgorPFUwMTA4PiA8Yz47PENJUj47PENBUD47SUdOT1JFICMgNTU4IDxDLz4+Cis8VTAxMEM+IDxjPjs8Q0FSPjs8Q0FQPjtJR05PUkUgIyA1NTkgPEM8PgorPFUwMTBBPiA8Yz47PFBDVD47PENBUD47SUdOT1JFICMgNTYwIDxDLj4KKzxVMUUwOD4gPGM+OzxDREk+OzxDQVA+OzxBQ0E+ICMgNTYxIOG4iAorPFUwMTg3PiA8Yz47PENSTD47PENBUD47SUdOT1JFICMgNTYyIMaHCis8VTAwNDQ+IDxkPjs8QkFTPjs8Q0FQPjtJR05PUkUgIyA1NjMgRAorPFUwMEQwPiA8ZD47PFBDTD47PENBUD47SUdOT1JFICMgNTY0IMOQCis8VTAxMEU+IDxkPjs8Q0FSPjs8Q0FQPjtJR05PUkUgIyA1NjUgPEQ8PgorPFUwMTEwPiA8ZD47PE9CTD47PENBUD47SUdOT1JFICMgNTY2IDxELy8+Cis8VTFFMEE+IDxkPjs8UENUPjs8Q0FQPjtJR05PUkUgIyA1NjcgPEQuPgorPFUxRTBDPiA8ZD47PEJQVD47PENBUD47SUdOT1JFICMgNTY4IOG4jAorPFUxRTBFPiA8ZD47PEJNQT47PENBUD47SUdOT1JFICMgNTY5IOG4jgorPFUxRTEwPiA8ZD47PENEST47PENBUD47SUdOT1JFICMgNTcwIDxELD4KKzxVMUUxMj4gPGQ+OzxCQ0k+OzxDQVA+O0lHTk9SRSAjIDU3MSDhuJIKKzxVMDE4QT4gPGQ+OzxDUkw+OzxDQVA+O0lHTk9SRSAjIDU3MiDGigorPFUwMUM0PiAiPGQ+PHo+IjsiPEJBUz48Q0FSPiI7IjxDQVA+PENBUD4iO0lHTk9SRSAjIDU3MyDHhAorPFUwMUM1PiAiPGQ+PHo+IjsiPEJBUz48Q0FSPiI7IjxDQVA+PE1JTj4iO0lHTk9SRSAjIDU3NCDHhQorPFUwMUYxPiAiPGQ+PHo+IjsiPEJBUz48QkFTPiI7IjxDQVA+PENBUD4iO0lHTk9SRSAjIDU3NSDHsQorPFUwMUYyPiAiPGQ+PHo+IjsiPEJBUz48QkFTPiI7IjxDQVA+PE1JTj4iO0lHTk9SRSAjIDU3NiDHsgorPFUwMDQ1PiA8ZT47PEJBUz47PENBUD47SUdOT1JFICMgNTc3IEUKKzxVMDBDOT4gPGU+OzxBQ0E+OzxDQVA+O0lHTk9SRSAjIDU3OCDDiQorPFUwMEM4PiA8ZT47PEdSQT47PENBUD47SUdOT1JFICMgNTc5IMOICis8VTAwQ0E+IDxlPjs8Q0lSPjs8Q0FQPjtJR05PUkUgIyA1ODAgw4oKKzxVMDBDQj4gPGU+OzxSRVU+OzxDQVA+O0lHTk9SRSAjIDU4MSDDiworPFUwMTFBPiA8ZT47PENBUj47PENBUD47SUdOT1JFICMgNTgyIDxFPD4KKzxVMDExNj4gPGU+OzxQQ1Q+OzxDQVA+O0lHTk9SRSAjIDU4MyA8RS4+Cis8VTAxMTg+IDxlPjs8T0dPPjs8Q0FQPjtJR05PUkUgIyA1ODQgPEU7PgorPFUwMTEyPiA8ZT47PE1BQz47PENBUD47SUdOT1JFICMgNTg1IDxFLT4KKzxVMDExND4gPGU+OzxCUkU+OzxDQVA+O0lHTk9SRSAjIDU4NiA8RSg+Cis8VTAyMDQ+IDxlPjs8REdSPjs8Q0FQPjtJR05PUkUgIyA1ODcgyIQKKzxVMDIwNj4gPGU+OzxJQlI+OzxDQVA+O0lHTk9SRSAjIDU4OCDIhgorPFUwMjI4PiA8ZT47PENEST47PENBUD47SUdOT1JFICMgNTg5IDxFLD4KKzxVMUUxND4gPGU+OzxNQUM+OzxDQVA+OzxHUkE+ICMgNTkwIOG4lAorPFUxRTE2PiA8ZT47PE1BQz47PENBUD47PEFDQT4gIyA1OTEg4biWCis8VTFFMTg+IDxlPjs8QkNJPjs8Q0FQPjtJR05PUkUgIyA1OTIg4biYCis8VTFFMUE+IDxlPjs8QlRJPjs8Q0FQPjtJR05PUkUgIyA1OTMg4biaCis8VTFFMUM+IDxlPjs8Q0RJPjs8Q0FQPjs8QlJFPiAjIDU5NCDhuJwKKzxVMUVCOD4gPGU+OzxCUFQ+OzxDQVA+O0lHTk9SRSAjIDU5NSDhurgKKzxVMUVCQT4gPGU+OzxIT0s+OzxDQVA+O0lHTk9SRSAjIDU5NiDhuroKKzxVMUVCQz4gPGU+OzxUSUw+OzxDQVA+O0lHTk9SRSAjIDU5NyDhurwKKzxVMUVCRT4gPGU+OzxDSVI+OzxDQVA+OzxBQ0E+ICMgNTk4IOG6vgorPFUxRUMwPiA8ZT47PENJUj47PENBUD47PEdSQT4gIyA1OTkg4buACis8VTFFQzI+IDxlPjs8Q0lSPjs8Q0FQPjs8SE9LPiAjIDYwMCDhu4IKKzxVMUVDND4gPGU+OzxDSVI+OzxDQVA+OzxUSUw+ICMgNjAxIOG7hAorPFUxRUM2PiA8ZT47PENJUj47PENBUD47PEJQVD4gIyA2MDIg4buGCis8VTAxOEU+IDxlPjs8UENMPjs8Q0FQPjtJR05PUkUgIyA2MDMgxo4KKzxVMDE4Rj4gPGU+OzxQQ0w+OzxDQVA+O0lHTk9SRSAjIDYwNCDGjworPFUwMTkwPiA8ZT47PFBDTD47PENBUD47SUdOT1JFICMgNjA1IMaQCis8VTAwNDY+IDxmPjs8QkFTPjs8Q0FQPjtJR05PUkUgIyA2MDYgRgorPFUxRTFFPiA8Zj47PFBDVD47PENBUD47SUdOT1JFICMgNjA3IDxGLj4KKzxVMDA0Nz4gPGc+OzxCQVM+OzxDQVA+O0lHTk9SRSAjIDYwOCBHCis8VTAxMUU+IDxnPjs8QlJFPjs8Q0FQPjtJR05PUkUgIyA2MDkgPEcoPgorPFUwMTFDPiA8Zz47PENJUj47PENBUD47SUdOT1JFICMgNjEwIDxHLz4+Cis8VTAxMjA+IDxnPjs8UENUPjs8Q0FQPjtJR05PUkUgIyA2MTEgPEcuPgorPFUwMTIyPiA8Zz47PENEST47PENBUD47SUdOT1JFICMgNjEyIDxHLD4KKzxVMDFFND4gPGc+OzxPQkw+OzxDQVA+O0lHTk9SRSAjIDYxMyA8Ry8vPgorPFUwMUU2PiA8Zz47PENBUj47PENBUD47SUdOT1JFICMgNjE0IDxHPD4KKzxVMDFGND4gPGc+OzxBQ0E+OzxDQVA+O0lHTk9SRSAjIDYxNSA8Ryc+Cis8VTFFMjA+IDxnPjs8TUFDPjs8Q0FQPjtJR05PUkUgIyA2MTYgPEctPgorPFUwMTkzPiA8Zz47PENSTD47PENBUD47SUdOT1JFICMgNjE3IMaTCis8VTAxQTI+IDxnPjs8UENMPjs8Q0FQPjtJR05PUkUgIyA2MTggxqIKKzxVMDA0OD4gPGg+OzxCQVM+OzxDQVA+O0lHTk9SRSAjIDYxOSBICis8VTAxMjQ+IDxoPjs8Q0lSPjs8Q0FQPjtJR05PUkUgIyA2MjAgPEgvPj4KKzxVMDEyNj4gPGg+OzxPQkw+OzxDQVA+O0lHTk9SRSAjIDYyMSA8SC8vPgorPFUwMjFFPiA8aD47PENBUj47PENBUD47SUdOT1JFICMgNjIyIDxIPD4KKzxVMUUyMj4gPGg+OzxQQ1Q+OzxDQVA+O0lHTk9SRSAjIDYyMyA8SC4+Cis8VTFFMjQ+IDxoPjs8QlBUPjs8Q0FQPjtJR05PUkUgIyA2MjQg4bikCis8VTFFMjY+IDxoPjs8UkVVPjs8Q0FQPjtJR05PUkUgIyA2MjUgPEg6PgorPFUxRTI4PiA8aD47PENEST47PENBUD47SUdOT1JFICMgNjI2IDxILD4KKzxVMUUyQT4gPGg+OzxCQlI+OzxDQVA+O0lHTk9SRSAjIDYyNyDhuKoKKzxVMDFGNj4gIjxoPjx2PiI7IjxMSUc+PExJRz4iOyI8Q0FQPjxDQVA+IjtJR05PUkUgIyA2Mjggx7YKKzxVMDA0OT4gPGk+OzxCQVM+OzxDQVA+O0lHTk9SRSAjIDYyOSBJCis8VTAwQ0Q+IDxpPjs8QUNBPjs8Q0FQPjtJR05PUkUgIyA2MzAgw40KKzxVMDBDQz4gPGk+OzxHUkE+OzxDQVA+O0lHTk9SRSAjIDYzMSDDjAorPFUwMENFPiA8aT47PENJUj47PENBUD47SUdOT1JFICMgNjMyIMOOCis8VTAwQ0Y+IDxpPjs8UkVVPjs8Q0FQPjtJR05PUkUgIyA2MzMgw48KKzxVMDEzMD4gPGk+OzxQQ0w+OzxDQVA+O0lHTk9SRSAjIDYzNCA8SS4+Cis8VTAxMjg+IDxpPjs8VElMPjs8Q0FQPjtJR05PUkUgIyA2MzUgPEk/PgorPFUwMTJFPiA8aT47PE9HTz47PENBUD47SUdOT1JFICMgNjM2IDxJOz4KKzxVMDEyQT4gPGk+OzxNQUM+OzxDQVA+O0lHTk9SRSAjIDYzNyA8SS0+Cis8VTAxMkM+IDxpPjs8QlJFPjs8Q0FQPjtJR05PUkUgIyA2MzggPEkoPgorPFUwMUNGPiA8aT47PENBUj47PENBUD47SUdOT1JFICMgNjM5IDxJPD4KKzxVMDIwOD4gPGk+OzxER1I+OzxDQVA+O0lHTk9SRSAjIDY0MCDIiAorPFUwMjBBPiA8aT47PElCUj47PENBUD47SUdOT1JFICMgNjQxIMiKCis8VTFFMkM+IDxpPjs8QlRJPjs8Q0FQPjtJR05PUkUgIyA2NDIg4bisCis8VTFFMkU+IDxpPjs8UkVVPjs8Q0FQPjs8QUNBPiAjIDY0MyDhuK4KKzxVMUVDOD4gPGk+OzxIT0s+OzxDQVA+O0lHTk9SRSAjIDY0NCDhu4gKKzxVMUVDQT4gPGk+OzxCUFQ+OzxDQVA+O0lHTk9SRSAjIDY0NSDhu4oKKzxVMDEzMj4gIjxpPjxqPiI7IjxCQVM+PEJBUz4iOyI8Q0FQPjxDQVA+IjtJR05PUkUgIyA2NDYgPElKPgorPFUwMDRBPiA8aj47PEJBUz47PENBUD47SUdOT1JFICMgNjQ3IEoKKzxVMDEzND4gPGo+OzxDSVI+OzxDQVA+O0lHTk9SRSAjIDY0OCA8Si8+PgorPFUwMDRCPiA8az47PEJBUz47PENBUD47SUdOT1JFICMgNjQ5IEsKKzxVMDEzNj4gPGs+OzxDREk+OzxDQVA+O0lHTk9SRSAjIDY1MCA8Syw+Cis8VTAxRTg+IDxrPjs8Q0FSPjs8Q0FQPjtJR05PUkUgIyA2NTEgPEs8PgorPFUxRTMwPiA8az47PEFDQT47PENBUD47SUdOT1JFICMgNjUyIDxLJz4KKzxVMUUzMj4gPGs+OzxCUFQ+OzxDQVA+O0lHTk9SRSAjIDY1MyDhuLIKKzxVMUUzND4gPGs+OzxCTUE+OzxDQVA+O0lHTk9SRSAjIDY1NCDhuLQKKzxVMDE5OD4gPGs+OzxDUkw+OzxDQVA+O0lHTk9SRSAjIDY1NSDGmAorPFUwMDRDPiA8bD47PEJBUz47PENBUD47SUdOT1JFICMgNjU2IEwKKzxVMDEzOT4gPGw+OzxBQ0E+OzxDQVA+O0lHTk9SRSAjIDY1NyA8TCc+Cis8VTAxM0Q+IDxsPjs8Q0FSPjs8Q0FQPjtJR05PUkUgIyA2NTggPEw8PgorPFUwMTQxPiA8bD47PE9CTD47PENBUD47SUdOT1JFICMgNjU5IDxMLy8+Cis8VTAxM0I+IDxsPjs8Q0RJPjs8Q0FQPjtJR05PUkUgIyA2NjAgPEwsPgorPFUxRTM2PiA8bD47PEJQVD47PENBUD47SUdOT1JFICMgNjYxIOG4tgorPFUxRTM4PiA8bD47PEJQVD47PENBUD47PE1BQz4gIyA2NjIg4bi4Cis8VTFFM0E+IDxsPjs8Qk1BPjs8Q0FQPjtJR05PUkUgIyA2NjMg4bi6Cis8VTFFM0M+IDxsPjs8QkNJPjs8Q0FQPjtJR05PUkUgIyA2NjQg4bi8Cis8VTAxM0Y+IDxsPjs8UENUPjs8Q0FQPjtJR05PUkUgIyA2NjUgPEwuPgorPFUwMUM3PiAiPGw+PGo+IjsiPEJBUz48QkFTPiI7IjxDQVA+PENBUD4iO0lHTk9SRSAjIDY2NiA8TD48Sj4KKzxVMDFDOD4gIjxsPjxqPiI7IjxCQVM+PEJBUz4iOyI8Q0FQPjxNSU4+IjtJR05PUkUgIyA2NjcgPEw+PGo+Cis8VTAwNEQ+IDxtPjs8QkFTPjs8Q0FQPjtJR05PUkUgIyA2NjggTQorPFUxRTNFPiA8bT47PEFDQT47PENBUD47SUdOT1JFICMgNjY5IOG4vgorPFUxRTQwPiA8bT47PFBDVD47PENBUD47SUdOT1JFICMgNjcwIOG5gAorPFUxRTQyPiA8bT47PEJQVD47PENBUD47SUdOT1JFICMgNjcxIOG5ggorPFUwMDRFPiA8bj47PEJBUz47PENBUD47SUdOT1JFICMgNjcyIE4KKzxVMDBEMT4gPG4+OzxUSUw+OzxDQVA+O0lHTk9SRSAjIDY3MyDDkQorPFUwMTQzPiA8bj47PEFDQT47PENBUD47SUdOT1JFICMgNjc0IDxOJz4KKzxVMDE0Nz4gPG4+OzxDQVI+OzxDQVA+O0lHTk9SRSAjIDY3NSA8Tjw+Cis8VTAxNDU+IDxuPjs8Q0RJPjs8Q0FQPjtJR05PUkUgIyA2NzYgPE4sPgorPFUwMUY4PiA8bj47PEdSQT47PENBUD47SUdOT1JFICMgNjc3IMe4Cis8VTFFNDQ+IDxuPjs8UENUPjs8Q0FQPjtJR05PUkUgIyA2Nzgg4bmECis8VTFFNDY+IDxuPjs8QlBUPjs8Q0FQPjtJR05PUkUgIyA2Nzkg4bmGCis8VTFFNDg+IDxuPjs8Qk1BPjs8Q0FQPjtJR05PUkUgIyA2ODAg4bmICis8VTFFNEE+IDxuPjs8QkNJPjs8Q0FQPjtJR05PUkUgIyA2ODEg4bmKCis8VTAxNEE+ICI8bj48Zz4iOyI8TElHPjxMSUc+IjsiPENBUD48Q0FQPiI7SUdOT1JFICMgNjgyIDxORz4KKzxVMDFDQT4gIjxuPjxqPiI7IjxCQVM+PEJBUz4iOyI8Q0FQPjxDQVA+IjtJR05PUkUgIyA2ODMgPE4+PEo+Cis8VTAxQ0I+ICI8bj48aj4iOyI8QkFTPjxCQVM+IjsiPENBUD48TUlOPiI7SUdOT1JFICMgNjg0IDxOPjxqPgorPFUwMDRGPiA8bz47PEJBUz47PENBUD47SUdOT1JFICMgNjg1IE8KKzxVMDBEMz4gPG8+OzxBQ0E+OzxDQVA+O0lHTk9SRSAjIDY4NiDDkworPFUwMEQyPiA8bz47PEdSQT47PENBUD47SUdOT1JFICMgNjg3IMOSCis8VTAwRDQ+IDxvPjs8Q0lSPjs8Q0FQPjtJR05PUkUgIyA2ODggw5QKKzxVMDBENT4gPG8+OzxUSUw+OzxDQVA+O0lHTk9SRSAjIDY4OSDDlQorPFUwMEQ2PiA8bz47PFJFVT47PENBUD47SUdOT1JFICMgNjkwIMOWCis8VTAwRDg+IDxvPjs8T0JMPjs8Q0FQPjtJR05PUkUgIyA2OTEgw5gKKzxVMDE1MD4gPG8+OzxEQUM+OzxDQVA+O0lHTk9SRSAjIDY5MiA8TyI+Cis8VTAxNEM+IDxvPjs8TUFDPjs8Q0FQPjtJR05PUkUgIyA2OTMgPE8tPgorPFUwMTRFPiA8bz47PEJSRT47PENBUD47SUdOT1JFICMgNjk0IDxPKD4KKzxVMDFBMD4gPG8+OzxDUkw+OzxDQVA+O0lHTk9SRSAjIDY5NSDGoAorPFUwMUQxPiA8bz47PENBUj47PENBUD47SUdOT1JFICMgNjk2IDxPPD4KKzxVMDFFQT4gPG8+OzxPR08+OzxDQVA+O0lHTk9SRSAjIDY5NyDHqgorPFUwMUVDPiA8bz47PE9HTz47PENBUD47PE1BQz4gIyA2OTggx6wKKzxVMDFGRT4gPG8+OzxPQkw+OzxDQVA+OzxBQ0E+ICMgNjk5IMe+Cis8VTAyMEM+IDxvPjs8REdSPjs8Q0FQPjtJR05PUkUgIyA3MDAgyIwKKzxVMDIwRT4gPG8+OzxJQlI+OzxDQVA+O0lHTk9SRSAjIDcwMSDIjgorPFUwMjJBPiA8bz47PFJFVT47PENBUD47PE1BQz4gIyA3MDIgyKoKKzxVMDIyQz4gPG8+OzxUSUw+OzxDQVA+OzxNQUM+ICMgNzAzIMisCis8VTAyMkU+IDxvPjs8UENUPjs8Q0FQPjtJR05PUkUgIyA3MDQgyK4KKzxVMDIzMD4gPG8+OzxQQ1Q+OzxDQVA+OzxNQUM+ICMgNzA1IMiwCis8VTFFNEM+IDxvPjs8VElMPjs8Q0FQPjs8QUNBPiAjIDcwNiDhuYwKKzxVMUU0RT4gPG8+OzxUSUw+OzxDQVA+OzxSRVU+ICMgNzA3IOG5jgorPFUxRTUwPiA8bz47PE1BQz47PENBUD47PEdSQT4gIyA3MDgg4bmQCis8VTFFNTI+IDxvPjs8TUFDPjs8Q0FQPjs8QUNBPiAjIDcwOSDhuZIKKzxVMUVDQz4gPG8+OzxCUFQ+OzxDQVA+O0lHTk9SRSAjIDcxMCDhu4wKKzxVMUVDRT4gPG8+OzxIT0s+OzxDQVA+O0lHTk9SRSAjIDcxMSDhu44KKzxVMUVEMD4gPG8+OzxDSVI+OzxDQVA+OzxBQ0E+ICMgNzEyIOG7kAorPFUxRUQyPiA8bz47PENJUj47PENBUD47PEdSQT4gIyA3MTMg4buSCis8VTFFRDQ+IDxvPjs8Q0lSPjs8Q0FQPjs8SE9LPiAjIDcxNCDhu5QKKzxVMUVENj4gPG8+OzxDSVI+OzxDQVA+OzxUSUw+ICMgNzE1IOG7lgorPFUxRUQ4PiA8bz47PENJUj47PENBUD47PEJQVD4gIyA3MTYg4buYCis8VTFFREE+IDxvPjs8Q1JMPjs8Q0FQPjs8QUNBPiAjIDcxNyDhu5oKKzxVMUVEQz4gPG8+OzxDUkw+OzxDQVA+OzxHUkE+ICMgNzE4IOG7nAorPFUxRURFPiA8bz47PENSTD47PENBUD47PEhPSz4gIyA3MTkg4bueCis8VTFFRTA+IDxvPjs8Q1JMPjs8Q0FQPjs8VElMPiAjIDcyMCDhu6AKKzxVMUVFMj4gPG8+OzxDUkw+OzxDQVA+OzxCUFQ+ICMgNzIxIOG7ogorPFUwMTlGPiA8bz47PFJFVT47PENBUD47SUdOT1JFICMgNzIyIMm1ICMgPFJFVT4gYXMgaXQgaXMgb2Z0ZW4gc3luLiBvZiA8Tzo+Cis8VTAxODY+IDxvPjs8UENMPjs8Q0FQPjtJR05PUkUgIyA3MjMgyZQKKzxVMDE1Mj4gIjxvPjxlPiI7IjxMSUc+PExJRz4iOyI8Q0FQPjxDQVA+IjtJR05PUkUgIyA3MjQgPE9FPgorPFUwMDUwPiA8cD47PEJBUz47PENBUD47SUdOT1JFICMgNzI1IFAKKzxVMUU1ND4gPHA+OzxBQ0E+OzxDQVA+O0lHTk9SRSAjIDcyNiDhuZQKKzxVMUU1Nj4gPHA+OzxQQ1Q+OzxDQVA+O0lHTk9SRSAjIDcyNyDhuZYKKzxVMDA1MT4gPHE+OzxCQVM+OzxDQVA+O0lHTk9SRSAjIDcyOCBRCis8VTAwNTI+IDxyPjs8QkFTPjs8Q0FQPjtJR05PUkUgIyA3MjkgUgorPFUwMTU0PiA8cj47PEFDQT47PENBUD47SUdOT1JFICMgNzMwIDxSJz4KKzxVMDE1OD4gPHI+OzxDQVI+OzxDQVA+O0lHTk9SRSAjIDczMSA8Ujw+Cis8VTAxNTY+IDxyPjs8Q0RJPjs8Q0FQPjtJR05PUkUgIyA3MzIgPFIsPgorPFUwMjEwPiA8cj47PERHUj47PENBUD47SUdOT1JFICMgNzMzIMiQCis8VTAyMTI+IDxyPjs8SUJSPjs8Q0FQPjtJR05PUkUgIyA3MzQgyJIKKzxVMUU1OD4gPHI+OzxQQ1Q+OzxDQVA+O0lHTk9SRSAjIDczNSDhuZgKKzxVMUU1QT4gPHI+OzxCUFQ+OzxDQVA+O0lHTk9SRSAjIDczNiDhuZoKKzxVMUU1Qz4gPHI+OzxCUFQ+OzxDQVA+OzxNQUM+ICMgNzM3IOG5nAorPFUxRTVFPiA8cj47PEJNQT47PENBUD47SUdOT1JFICMgNzM4IOG5ngorPFUwMDUzPiA8cz47PEJBUz47PENBUD47SUdOT1JFICMgNzM5IFMKKzxVMDE1QT4gPHM+OzxBQ0E+OzxDQVA+O0lHTk9SRSAjIDc0MCA8Uyc+Cis8VTAxNUM+IDxzPjs8Q0lSPjs8Q0FQPjtJR05PUkUgIyA3NDEgPFMvPj4KKzxVMDE2MD4gPHM+OzxDQVI+OzxDQVA+O0lHTk9SRSAjIDc0MiA8Uzw+Cis8VTAxNUU+IDxzPjs8Q0RJPjs8Q0FQPjtJR05PUkUgIyA3NDMgPFMsPgorPFUwMjE4PiA8cz47PENEST47PENBUD47SUdOT1JFICMgNzQ0IMiYCis8VTFFNjA+IDxzPjs8UENUPjs8Q0FQPjtJR05PUkUgIyA3NDUg4bmgCis8VTFFNjI+IDxzPjs8QlBUPjs8Q0FQPjtJR05PUkUgIyA3NDYg4bmiCis8VTFFNjQ+IDxzPjs8QUNBPjs8Q0FQPjs8UENUPiAjIDc0NyDhuaQKKzxVMUU2Nj4gPHM+OzxDQVI+OzxDQVA+OzxQQ1Q+ICMgNzQ4IOG5pgorPFUxRTY4PiA8cz47PEJQVD47PENBUD47PFBDVD4gIyA3NDkg4bmoCis8VTAwNTQ+IDx0Pjs8QkFTPjs8Q0FQPjtJR05PUkUgIyA3NTAgVAorPFUwMTY0PiA8dD47PENBUj47PENBUD47SUdOT1JFICMgNzUxIDxUPD4KKzxVMDE2Nj4gPHQ+OzxPQkw+OzxDQVA+O0lHTk9SRSAjIDc1MiA8VC8vPgorPFUwMTYyPiA8dD47PENEST47PENBUD47SUdOT1JFICMgNzUzIDxULD4KKzxVMDIxQT4gPHQ+OzxDREk+OzxDQVA+O0lHTk9SRSAjIDc1NCDImgorPFUxRTZBPiA8dD47PFBDVD47PENBUD47SUdOT1JFICMgNzU1IOG5qgorPFUxRTZDPiA8dD47PEJQVD47PENBUD47SUdOT1JFICMgNzU2IOG5rAorPFUxRTZFPiA8dD47PEJNQT47PENBUD47SUdOT1JFICMgNzU3IOG5rgorPFUxRTcwPiA8dD47PEJDST47PENBUD47SUdOT1JFICMgNzU4IOG5sAorPFUwMDU1PiA8dT47PEJBUz47PENBUD47SUdOT1JFICMgNzU5IFUKKzxVMDBEQT4gPHU+OzxBQ0E+OzxDQVA+O0lHTk9SRSAjIDc2MCDDmgorPFUwMEQ5PiA8dT47PEdSQT47PENBUD47SUdOT1JFICMgNzYxIMOZCis8VTAwREI+IDx1Pjs8Q0lSPjs8Q0FQPjtJR05PUkUgIyA3NjIgw5sKKzxVMDBEQz4gPHU+OzxSRVU+OzxDQVA+O0lHTk9SRSAjIDc2MyDDnAorPFUwMTZDPiA8dT47PEJSRT47PENBUD47SUdOT1JFICMgNzY0IDxVKD4KKzxVMDE2RT4gPHU+OzxSTkU+OzxDQVA+O0lHTk9SRSAjIDc2NSA8VTA+Cis8VTAxNzA+IDx1Pjs8REFDPjs8Q0FQPjtJR05PUkUgIyA3NjYgPFUiPgorPFUwMTY4PiA8dT47PFRJTD47PENBUD47SUdOT1JFICMgNzY3IDxVPz4KKzxVMDE3Mj4gPHU+OzxPR08+OzxDQVA+O0lHTk9SRSAjIDc2OCA8VTs+Cis8VTAxNkE+IDx1Pjs8TUFDPjs8Q0FQPjtJR05PUkUgIyA3NjkgPFUtPgorPFUwMUFGPiA8dT47PENSTD47PENBUD47SUdOT1JFICMgNzcwIMavCis8VTAxRDM+IDx1Pjs8Q0FSPjs8Q0FQPjtJR05PUkUgIyA3NzEgx5MKKzxVMDFENT4gPHU+OzxSRVU+OzxDQVA+OzxNQUM+ICMgNzcyIMeVCis8VTAxRDc+IDx1Pjs8UkVVPjs8Q0FQPjs8QUNBPiAjIDc3MyDHlworPFUwMUQ5PiA8dT47PFJFVT47PENBUD47PENBUj4gIyA3NzQgx5kKKzxVMDFEQj4gPHU+OzxSRVU+OzxDQVA+OzxHUkE+ICMgNzc1IMebCis8VTFFNzI+IDx1Pjs8QlJVPjs8Q0FQPjtJR05PUkUgIyA3NzYg4bmyCis8VTFFNzQ+IDx1Pjs8QlRJPjs8Q0FQPjtJR05PUkUgIyA3Nzcg4bm0Cis8VTFFNzY+IDx1Pjs8QkNJPjs8Q0FQPjtJR05PUkUgIyA3Nzgg4bm2Cis8VTFFNzg+IDx1Pjs8VElMPjs8Q0FQPjs8QUNBPiAjIDc3OSDhubgKKzxVMUU3QT4gPHU+OzxNQUM+OzxDQVA+OzxSRVU+ICMgNzgwIOG5ugorPFUxRUU0PiA8dT47PEJQVD47PENBUD47SUdOT1JFICMgNzgxIOG7pAorPFUxRUU2PiA8dT47PEhPSz47PENBUD47SUdOT1JFICMgNzgyIOG7pgorPFUxRUU4PiA8dT47PENSTD47PENBUD47PEFDQT4gIyA3ODMg4buoCis8VTFFRUE+IDx1Pjs8Q1JMPjs8Q0FQPjs8R1JBPiAjIDc4NCDhu6oKKzxVMUVFQz4gPHU+OzxDUkw+OzxDQVA+OzxIT0s+ICMgNzg1IOG7rAorPFUxRUVFPiA8dT47PENSTD47PENBUD47PFRJTD4gIyA3ODYg4buuCis8VTFFRjA+IDx1Pjs8Q1JMPjs8Q0FQPjs8QlBUPiAjIDc4NyDhu7AKKzxVMDA1Nj4gPHY+OzxCQVM+OzxDQVA+O0lHTk9SRSAjIDc4OCBWCis8VTFFN0M+IDx2Pjs8VElMPjs8Q0FQPjtJR05PUkUgIyA3ODkg4bm8Cis8VTFFN0U+IDx2Pjs8QlBUPjs8Q0FQPjtJR05PUkUgIyA3OTAg4bm+Cis8VTAwNTc+IDx3Pjs8QkFTPjs8Q0FQPjtJR05PUkUgIyA3OTEgVworPFUwMTc0PiA8dz47PENJUj47PENBUD47SUdOT1JFICMgNzkyIDxXLz4+Cis8VTFFODA+IDx3Pjs8R1JBPjs8Q0FQPjtJR05PUkUgIyA3OTMg4bqACis8VTFFODI+IDx3Pjs8QUNBPjs8Q0FQPjtJR05PUkUgIyA3OTQg4bqCCis8VTFFODQ+IDx3Pjs8UkVVPjs8Q0FQPjtJR05PUkUgIyA3OTUg4bqECis8VTFFODY+IDx3Pjs8UENUPjs8Q0FQPjtJR05PUkUgIyA3OTYg4bqGCis8VTFFODg+IDx3Pjs8QlBUPjs8Q0FQPjtJR05PUkUgIyA3OTcg4bqICis8VTAxRjc+IDx3Pjs8UENMPjs8Q0FQPjtJR05PUkUgIyA3OTggx7cKKzxVMDA1OD4gPHg+OzxCQVM+OzxDQVA+O0lHTk9SRSAjIDc5OSBYCis8VTFFOEE+IDx4Pjs8UENUPjs8Q0FQPjtJR05PUkUgIyA4MDAg4bqKCis8VTFFOEM+IDx4Pjs8UkVVPjs8Q0FQPjtJR05PUkUgIyA4MDEg4bqMCis8VTAwNTk+IDx5Pjs8QkFTPjs8Q0FQPjtJR05PUkUgIyA4MDIgWQorPFUwMEREPiA8eT47PEFDQT47PENBUD47SUdOT1JFICMgODAzIMOdCis8VTAxNzY+IDx5Pjs8Q0lSPjs8Q0FQPjtJR05PUkUgIyA4MDQgPFkvPj4KKzxVMDE3OD4gPHk+OzxSRVU+OzxDQVA+O0lHTk9SRSAjIDgwNSA8WTo+Cis8VTAyMzI+IDx5Pjs8TUFDPjs8Q0FQPjtJR05PUkUgIyA4MDYgPFktPgorPFUxRThFPiA8eT47PFBDVD47PENBUD47SUdOT1JFICMgODA3IOG6jgorPFUxRUYyPiA8eT47PEdSQT47PENBUD47SUdOT1JFICMgODA4IOG7sgorPFUxRUY0PiA8eT47PEJQVD47PENBUD47SUdOT1JFICMgODA5IOG7tAorPFUxRUY2PiA8eT47PEhPSz47PENBUD47SUdOT1JFICMgODEwIOG7tgorPFUxRUY4PiA8eT47PFRJTD47PENBUD47SUdOT1JFICMgODExIOG7uAorPFUwMUIzPiA8eT47PENSTD47PENBUD47SUdOT1JFICMgODEyIMazCis8VTAyMUM+IDx5Pjs8UENMPjs8Q0FQPjtJR05PUkUgIyA1MzMgyJwKKzxVMDA1QT4gPHo+OzxCQVM+OzxDQVA+O0lHTk9SRSAjIDgxMyBaCis8VTAxNzk+IDx6Pjs8QUNBPjs8Q0FQPjtJR05PUkUgIyA4MTQgPFonPgorPFUwMTdEPiA8ej47PENBUj47PENBUD47SUdOT1JFICMgODE1IDxaPD4KKzxVMDE3Qj4gPHo+OzxQQ1Q+OzxDQVA+O0lHTk9SRSAjIDgxNiA8Wi4+Cis8VTFFOTA+IDx6Pjs8Q0lSPjs8Q0FQPjtJR05PUkUgIyA4MTcgPFovPj4KKzxVMUU5Mj4gPHo+OzxCUFQ+OzxDQVA+O0lHTk9SRSAjIDgxOCDhupIKKzxVMUU5ND4gPHo+OzxCTUE+OzxDQVA+O0lHTk9SRSAjIDgxOSDhupQKKzxVMDFCNT4gPHo+OzxPQkw+OzxDQVA+O0lHTk9SRSAjIDgyMCDGtQorPFUwMjI0PiA8ej47PENSTD47PENBUD47SUdOT1JFICMgODIxIMikCis8VTAxQjc+IDx6aD47PEJBUz47PENBUD47SUdOT1JFICMgODIyIMa3Cis8VTAxRUU+IDx6aD47PENBUj47PENBUD47SUdOT1JFICMgODIzIMeuCis8VTAwREU+IDx0aD47PEJBUz47PENBUD47SUdOT1JFICMgODI0IMO+CisKK29yZGVyX3N0YXJ0IDxUSUZJTkFHSD47Zm9yd2FyZDtiYWNrd2FyZDtmb3J3YXJkO2ZvcndhcmQscG9zaXRpb24KKzxVMkQzMD4gPFRJRi1BPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMkQzMT4gPFRJRi1CPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMkQzMj4gPFRJRi1CSD47PEJBUz47PE1JTj47SUdOT1JFCis8VTJEMzM+IDxUSUYtRz47PEJBUz47PE1JTj47SUdOT1JFCis8VTJEMzQ+IDxUSUYtR0hIPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMkQzNT4gPFRJRi1ESj47PEJBUz47PE1JTj47SUdOT1JFCis8VTJEMzY+IDxUSUYtREoyPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMkQzNz4gPFRJRi1EPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMkQzOD4gPFRJRi1ESD47PEJBUz47PE1JTj47SUdOT1JFCis8VTJEMzk+IDxUSUYtREQ+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUyRDNBPiA8VElGLURESD47PEJBUz47PE1JTj47SUdOT1JFCis8VTJEM0I+IDxUSUYtRT47PEJBUz47PE1JTj47SUdOT1JFCis8VTJEM0M+IDxUSUYtRj47PEJBUz47PE1JTj47SUdOT1JFCis8VTJEM0Q+IDxUSUYtSz47PEJBUz47PE1JTj47SUdOT1JFCis8VTJEM0U+IDxUSUYtSzI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUyRDNGPiA8VElGLUtISD47PEJBUz47PE1JTj47SUdOT1JFCis8VTJENDA+IDxUSUYtSD47PEJBUz47PE1JTj47SUdOT1JFCis8VTJENDE+IDxUSUYtSDI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUyRDQyPiA8VElGLUgzPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMkQ0Mz4gPFRJRi1ISD47PEJBUz47PE1JTj47SUdOT1JFCis8VTJENDQ+IDxUSUYtQUE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUyRDQ1PiA8VElGLVg+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUyRDQ2PiA8VElGLVgyPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMkQ0Nz4gPFRJRi1RPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMkQ0OD4gPFRJRi1RMj47PEJBUz47PE1JTj47SUdOT1JFCis8VTJENDk+IDxUSUYtST47PEJBUz47PE1JTj47SUdOT1JFCis8VTJENEE+IDxUSUYtSj47PEJBUz47PE1JTj47SUdOT1JFCis8VTJENEI+IDxUSUYtSjI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUyRDRDPiA8VElGLUozPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMkQ0RD4gPFRJRi1MPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMkQ0RT4gPFRJRi1NPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMkQ0Rj4gPFRJRi1OPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMkQ1MD4gPFRJRi1HTj47PEJBUz47PE1JTj47SUdOT1JFCis8VTJENTE+IDxUSUYtTkc+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUyRDUyPiA8VElGLVA+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUyRDUzPiA8VElGLVU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUyRDU0PiA8VElGLVI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUyRDU1PiA8VElGLVJSPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMkQ1Nj4gPFRJRi1HSD47PEJBUz47PE1JTj47SUdOT1JFCis8VTJENTc+IDxUSUYtR0gyPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMkQ1OD4gPFRJRi1HSDM+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUyRDU5PiA8VElGLVM+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUyRDVBPiA8VElGLVNTPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMkQ1Qj4gPFRJRi1DPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMkQ1Qz4gPFRJRi1UPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMkQ1RD4gPFRJRi1USD47PEJBUz47PE1JTj47SUdOT1JFCis8VTJENUU+IDxUSUYtVEM+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUyRDVGPiA8VElGLVRUPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMkQ2MD4gPFRJRi1WPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMkQ2MT4gPFRJRi1XPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMkQ2Mj4gPFRJRi1ZPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMkQ2Mz4gPFRJRi1aPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMkQ2ND4gPFRJRi1aMj47PEJBUz47PE1JTj47SUdOT1JFCis8VTJENjU+IDxUSUYtWlo+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUyRDZGPiA8VElGLUxNVz47PEJBUz47PE1JTj47SUdOT1JFCisKK29yZGVyX3N0YXJ0IDxBUkFCSU5UPjtmb3J3YXJkO2ZvcndhcmQ7Zm9yd2FyZDtmb3J3YXJkLHBvc2l0aW9uCis8VTA2NjA+IDwwPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDZGMD4gPDA+OzxQQ0w+OzxNSU4+O0lHTk9SRQorPFUwNjYxPiA8MT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA2RjE+IDwxPjs8UENMPjs8TUlOPjtJR05PUkUKKzxVMDY2Mj4gPDI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNkYyPiA8Mj47PFBDTD47PE1JTj47SUdOT1JFCis8VTA2NjM+IDwzPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDZGMz4gPDM+OzxQQ0w+OzxNSU4+O0lHTk9SRQorPFUwNjY0PiA8ND47PEJBUz47PE1JTj47SUdOT1JFCis8VTA2RjQ+IDw0Pjs8UENMPjs8TUlOPjtJR05PUkUKKzxVMDY2NT4gPDU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNkY1PiA8NT47PFBDTD47PE1JTj47SUdOT1JFCis8VTA2NjY+IDw2Pjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDZGNj4gPDY+OzxQQ0w+OzxNSU4+O0lHTk9SRQorPFUwNjY3PiA8Nz47PEJBUz47PE1JTj47SUdOT1JFCis8VTA2Rjc+IDw3Pjs8UENMPjs8TUlOPjtJR05PUkUKKzxVMDY2OD4gPDg+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNkY4PiA8OD47PFBDTD47PE1JTj47SUdOT1JFCis8VTA2Njk+IDw5Pjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDZGOT4gPDk+OzxQQ0w+OzxNSU4+O0lHTk9SRQorPFUwNjIxPiA8aGFtemE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNjIyPiA8YWxlZj47PEFNQT47PE1JTj47SUdOT1JFCis8VTA2MjM+IDxhbGVmPjs8QUhBPjs8TUlOPjtJR05PUkUKKzxVMDYyNT4gPGFsZWY+OzxBSFM+OzxNSU4+O0lHTk9SRQorPFUwNjI3PiA8YWxlZj47PEJBUz47PE1JTj47SUdOT1JFCis8VTA2Mjg+IDxiZWg+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNjdFPiA8cGVoPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDYyOT4gPHRlaF9tYXJidXRhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDYyQT4gPHRlaD47PEJBUz47PE1JTj47SUdOT1JFCis8VTA2Nzk+IDx0dGVoPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDYyQj4gPHRoZWg+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNjJDPiA8amVlbT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA2ODY+IDx0Y2hlaD47PEJBUz47PE1JTj47SUdOT1JFCis8VTA2MkQ+IDxoYWg+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNjJFPiA8a2hhaD47PEJBUz47PE1JTj47SUdOT1JFCis8VTA2MkY+IDxkYWw+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNjg4PiA8ZGRhbD47PEJBUz47PE1JTj47SUdOT1JFCis8VTA2MzA+IDx0aGFsPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDYzMT4gPHJlaD47PEJBUz47PE1JTj47SUdOT1JFCis8VTA2OTE+IDxycmVoPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDYzMj4gPHphaW4+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNjk4PiA8amVoPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDYzMz4gPHNlZW4+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNjM0PiA8c2hlZW4+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNjM1PiA8c2FkPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDYzNj4gPGRhZD47PEJBUz47PE1JTj47SUdOT1JFCis8VTA2Mzc+IDx0YWg+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNjM4PiA8emFoPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDYzOT4gPGFpbj47PEJBUz47PE1JTj47SUdOT1JFCis8VTA2M0E+IDxnaGFpbj47PEJBUz47PE1JTj47SUdOT1JFCis8VTA2NDE+IDxmZWg+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNjQyPiA8cWFmPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDY0Mz4gPGthZj47PEJBUz47PE1JTj47SUdOT1JFCis8VTA2QTk+IDxrZWhlaD47PEJBUz47PE1JTj47SUdOT1JFCis8VTA2QUY+IDxnYWY+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNjQ0PiA8bGFtPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDY0NT4gPG1lZW0+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNjQ2PiA8bm9vbj47PEJBUz47PE1JTj47SUdOT1JFCis8VTA2QkE+IDxub29uX2dodW5uYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA2NDc+IDxoZWg+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNkMwPiA8aGVoX3llaD47PEJBUz47PE1JTj47SUdOT1JFCis8VTA2MjQ+IDx3YXc+OzxBSFc+OzxNSU4+O0lHTk9SRQorPFUwNjQ4PiA8d2F3Pjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDY0OT4gPGFsZWZfbWFrc3VyYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA2MjY+ICI8YWxlZl9tYWtzdXJhPjxoYW16YT4iOyI8QkFTPjxCQVM+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTA2NEE+IDxhbGVmX21ha3N1cmE+OzxBWUU+OzxNSU4+O0lHTk9SRQorPFUwNkQzPiA8eWVoX2JhcnJlZT47PFlCQT47PE1JTj47SUdOT1JFCis8VTA2RDI+IDx5ZWhfYmFycmVlPjs8QkFTPjs8TUlOPjtJR05PUkUKKworb3JkZXJfc3RhcnQgPEFSQUJGT1I+O2JhY2t3YXJkO2JhY2t3YXJkO2JhY2t3YXJkO2ZvcndhcmQscG9zaXRpb24KKzxVRkU4MD4gPGhhbXphPjs8QkFTPjs8QUlTPjtJR05PUkUKKzxVRkU4MT4gPGFsZWY+OzxBTUE+OzxBSVM+O0lHTk9SRQorPFVGRTgyPiA8YWxlZj47PEFNQT47PEFGST47SUdOT1JFCis8VUZFODM+IDxhbGVmPjs8QUhBPjs8QUlTPjtJR05PUkUKKzxVRkU4ND4gPGFsZWY+OzxBSEE+OzxBRkk+O0lHTk9SRQorPFVGRTg3PiA8YWxlZj47PEFIUz47PEFJUz47SUdOT1JFCis8VUZFODg+IDxhbGVmPjs8QUhTPjs8QUZJPjtJR05PUkUKKzxVRkU4RD4gPGFsZWY+OzxCQVM+OzxBSVM+O0lHTk9SRQorPFVGRThFPiA8YWxlZj47PEJBUz47PEFGST47SUdOT1JFCis8VUZFOEY+IDxiZWg+OzxCQVM+OzxBSVM+O0lHTk9SRQorPFVGRTkwPiA8YmVoPjs8QkFTPjs8QUZJPjtJR05PUkUKKzxVRkU5MT4gPGJlaD47PEJBUz47PEFJST47SUdOT1JFCis8VUZFOTI+IDxiZWg+OzxCQVM+OzxBTUU+O0lHTk9SRQorPFVGQjU2PiA8cGVoPjs8QkFTPjs8QUlTPjtJR05PUkUKKzxVRkI1Nz4gPHBlaD47PEJBUz47PEFGST47SUdOT1JFCis8VUZCNTg+IDxwZWg+OzxCQVM+OzxBSUk+O0lHTk9SRQorPFVGQjU5PiA8cGVoPjs8QkFTPjs8QU1FPjtJR05PUkUKKzxVRkU5Mz4gPHRlaF9tYXJidXRhPjs8QkFTPjs8QUlTPjtJR05PUkUKKzxVRkU5ND4gPHRlaF9tYXJidXRhPjs8QkFTPjs8QUZJPjtJR05PUkUKKzxVRkU5NT4gPHRlaD47PEJBUz47PEFJUz47SUdOT1JFCis8VUZFOTY+IDx0ZWg+OzxCQVM+OzxBRkk+O0lHTk9SRQorPFVGRTk3PiA8dGVoPjs8QkFTPjs8QUlJPjtJR05PUkUKKzxVRkU5OD4gPHRlaD47PEJBUz47PEFNRT47SUdOT1JFCis8VUZCNjY+IDx0dGVoPjs8QkFTPjs8QUlTPjtJR05PUkUKKzxVRkI2Nz4gPHR0ZWg+OzxCQVM+OzxBRkk+O0lHTk9SRQorPFVGQjY4PiA8dHRlaD47PEJBUz47PEFJST47SUdOT1JFCis8VUZCNjk+IDx0dGVoPjs8QkFTPjs8QU1FPjtJR05PUkUKKzxVRkU5OT4gPHRoZWg+OzxCQVM+OzxBSVM+O0lHTk9SRQorPFVGRTlBPiA8dGhlaD47PEJBUz47PEFGST47SUdOT1JFCis8VUZFOUI+IDx0aGVoPjs8QkFTPjs8QUlJPjtJR05PUkUKKzxVRkU5Qz4gPHRoZWg+OzxCQVM+OzxBTUU+O0lHTk9SRQorPFVGRTlEPiA8amVlbT47PEJBUz47PEFJUz47SUdOT1JFCis8VUZFOUU+IDxqZWVtPjs8QkFTPjs8QUZJPjtJR05PUkUKKzxVRkU5Rj4gPGplZW0+OzxCQVM+OzxBSUk+O0lHTk9SRQorPFVGRUEwPiA8amVlbT47PEJBUz47PEFNRT47SUdOT1JFCis8VUZCN0E+IDx0Y2hlaD47PEJBUz47PEFJUz47SUdOT1JFCis8VUZCN0I+IDx0Y2hlaD47PEJBUz47PEFGST47SUdOT1JFCis8VUZCN0M+IDx0Y2hlaD47PEJBUz47PEFJST47SUdOT1JFCis8VUZCN0Q+IDx0Y2hlaD47PEJBUz47PEFNRT47SUdOT1JFCis8VUZFQTE+IDxoYWg+OzxCQVM+OzxBSVM+O0lHTk9SRQorPFVGRUEyPiA8aGFoPjs8QkFTPjs8QUZJPjtJR05PUkUKKzxVRkVBMz4gPGhhaD47PEJBUz47PEFJST47SUdOT1JFCis8VUZFQTQ+IDxoYWg+OzxCQVM+OzxBTUU+O0lHTk9SRQorPFVGRUE1PiA8a2hhaD47PEJBUz47PEFJUz47SUdOT1JFCis8VUZFQTY+IDxraGFoPjs8QkFTPjs8QUZJPjtJR05PUkUKKzxVRkVBNz4gPGtoYWg+OzxCQVM+OzxBSUk+O0lHTk9SRQorPFVGRUE4PiA8a2hhaD47PEJBUz47PEFNRT47SUdOT1JFCis8VUZFQTk+IDxkYWw+OzxCQVM+OzxBSVM+O0lHTk9SRQorPFVGRUFBPiA8ZGFsPjs8QkFTPjs8QUZJPjtJR05PUkUKKzxVRkI4OD4gPGRkYWw+OzxCQVM+OzxBSVM+O0lHTk9SRQorPFVGQjg5PiA8ZGRhbD47PEJBUz47PEFGST47SUdOT1JFCis8VUZFQUI+IDx0aGFsPjs8QkFTPjs8QUlTPjtJR05PUkUKKzxVRkVBQz4gPHRoYWw+OzxCQVM+OzxBRkk+O0lHTk9SRQorPFVGRUFEPiA8cmVoPjs8QkFTPjs8QUlTPjtJR05PUkUKKzxVRkVBRT4gPHJlaD47PEJBUz47PEFGST47SUdOT1JFCis8VUZCOEM+IDxycmVoPjs8QkFTPjs8QUlTPjtJR05PUkUKKzxVRkI4RD4gPHJyZWg+OzxCQVM+OzxBRkk+O0lHTk9SRQorPFVGRUFGPiA8emFpbj47PEJBUz47PEFJUz47SUdOT1JFCis8VUZFQjA+IDx6YWluPjs8QkFTPjs8QUZJPjtJR05PUkUKKzxVRkI4QT4gPGplaD47PEJBUz47PEFJUz47SUdOT1JFCis8VUZCOEI+IDxqZWg+OzxCQVM+OzxBRkk+O0lHTk9SRQorPFVGRUIxPiA8c2Vlbj47PEJBUz47PEFJUz47SUdOT1JFCis8VUZFQjI+IDxzZWVuPjs8QkFTPjs8QUZJPjtJR05PUkUKKzxVRkVCMz4gPHNlZW4+OzxCQVM+OzxBSUk+O0lHTk9SRQorPFVGRUI0PiA8c2Vlbj47PEJBUz47PEFNRT47SUdOT1JFCis8VUZFQjU+IDxzaGVlbj47PEJBUz47PEFJUz47SUdOT1JFCis8VUZFQjY+IDxzaGVlbj47PEJBUz47PEFGST47SUdOT1JFCis8VUZFQjc+IDxzaGVlbj47PEJBUz47PEFJST47SUdOT1JFCis8VUZFQjg+IDxzaGVlbj47PEJBUz47PEFNRT47SUdOT1JFCis8VUZFQjk+IDxzYWQ+OzxCQVM+OzxBSVM+O0lHTk9SRQorPFVGRUJBPiA8c2FkPjs8QkFTPjs8QUZJPjtJR05PUkUKKzxVRkVCQj4gPHNhZD47PEJBUz47PEFJST47SUdOT1JFCis8VUZFQkM+IDxzYWQ+OzxCQVM+OzxBTUU+O0lHTk9SRQorPFVGRUJEPiA8ZGFkPjs8QkFTPjs8QUlTPjtJR05PUkUKKzxVRkVCRT4gPGRhZD47PEJBUz47PEFGST47SUdOT1JFCis8VUZFQkY+IDxkYWQ+OzxCQVM+OzxBSUk+O0lHTk9SRQorPFVGRUMwPiA8ZGFkPjs8QkFTPjs8QU1FPjtJR05PUkUKKzxVRkVDMT4gPHRhaD47PEJBUz47PEFJUz47SUdOT1JFCis8VUZFQzI+IDx0YWg+OzxCQVM+OzxBRkk+O0lHTk9SRQorPFVGRUMzPiA8dGFoPjs8QkFTPjs8QUlJPjtJR05PUkUKKzxVRkVDND4gPHRhaD47PEJBUz47PEFNRT47SUdOT1JFCis8VUZFQzU+IDx6YWg+OzxCQVM+OzxBSVM+O0lHTk9SRQorPFVGRUM2PiA8emFoPjs8QkFTPjs8QUZJPjtJR05PUkUKKzxVRkVDNz4gPHphaD47PEJBUz47PEFJST47SUdOT1JFCis8VUZFQzg+IDx6YWg+OzxCQVM+OzxBTUU+O0lHTk9SRQorPFVGRUM5PiA8YWluPjs8QkFTPjs8QUlTPjtJR05PUkUKKzxVRkVDQT4gPGFpbj47PEJBUz47PEFGST47SUdOT1JFCis8VUZFQ0I+IDxhaW4+OzxCQVM+OzxBSUk+O0lHTk9SRQorPFVGRUNDPiA8YWluPjs8QkFTPjs8QU1FPjtJR05PUkUKKzxVRkVDRD4gPGdoYWluPjs8QkFTPjs8QUlTPjtJR05PUkUKKzxVRkVDRT4gPGdoYWluPjs8QkFTPjs8QUZJPjtJR05PUkUKKzxVRkVDRj4gPGdoYWluPjs8QkFTPjs8QUlJPjtJR05PUkUKKzxVRkVEMD4gPGdoYWluPjs8QkFTPjs8QU1FPjtJR05PUkUKKzxVRkVEMT4gPGZlaD47PEJBUz47PEFJUz47SUdOT1JFCis8VUZFRDI+IDxmZWg+OzxCQVM+OzxBRkk+O0lHTk9SRQorPFVGRUQzPiA8ZmVoPjs8QkFTPjs8QUlJPjtJR05PUkUKKzxVRkVEND4gPGZlaD47PEJBUz47PEFNRT47SUdOT1JFCis8VUZFRDU+IDxxYWY+OzxCQVM+OzxBSVM+O0lHTk9SRQorPFVGRUQ2PiA8cWFmPjs8QkFTPjs8QUZJPjtJR05PUkUKKzxVRkVENz4gPHFhZj47PEJBUz47PEFJST47SUdOT1JFCis8VUZFRDg+IDxxYWY+OzxCQVM+OzxBTUU+O0lHTk9SRQorPFVGRUQ5PiA8a2FmPjs8QkFTPjs8QUlTPjtJR05PUkUKKzxVRkVEQT4gPGthZj47PEJBUz47PEFGST47SUdOT1JFCis8VUZFREI+IDxrYWY+OzxCQVM+OzxBSUk+O0lHTk9SRQorPFVGRURDPiA8a2FmPjs8QkFTPjs8QU1FPjtJR05PUkUKKzxVRkI4RT4gPGtlaGVoPjs8QkFTPjs8QUlTPjtJR05PUkUKKzxVRkI4Rj4gPGtlaGVoPjs8QkFTPjs8QUZJPjtJR05PUkUKKzxVRkI5MD4gPGtlaGVoPjs8QkFTPjs8QUlJPjtJR05PUkUKKzxVRkI5MT4gPGtlaGVoPjs8QkFTPjs8QU1FPjtJR05PUkUKKzxVRkI5Mj4gPGdhZj47PEJBUz47PEFJUz47SUdOT1JFCis8VUZCOTM+IDxnYWY+OzxCQVM+OzxBRkk+O0lHTk9SRQorPFVGQjk0PiA8Z2FmPjs8QkFTPjs8QUlJPjtJR05PUkUKKzxVRkI5NT4gPGdhZj47PEJBUz47PEFNRT47SUdOT1JFCis8VUZFREQ+IDxsYW0+OzxCQVM+OzxBSVM+O0lHTk9SRQorPFVGRURFPiA8bGFtPjs8QkFTPjs8QUZJPjtJR05PUkUKKzxVRkVERj4gPGxhbT47PEJBUz47PEFJST47SUdOT1JFCis8VUZFRTA+IDxsYW0+OzxCQVM+OzxBTUU+O0lHTk9SRQorPFVGRUUxPiA8bWVlbT47PEJBUz47PEFJUz47SUdOT1JFCis8VUZFRTI+IDxtZWVtPjs8QkFTPjs8QUZJPjtJR05PUkUKKzxVRkVFMz4gPG1lZW0+OzxCQVM+OzxBSUk+O0lHTk9SRQorPFVGRUU0PiA8bWVlbT47PEJBUz47PEFNRT47SUdOT1JFCis8VUZFRTU+IDxub29uPjs8QkFTPjs8QUlTPjtJR05PUkUKKzxVRkVFNj4gPG5vb24+OzxCQVM+OzxBRkk+O0lHTk9SRQorPFVGRUU3PiA8bm9vbj47PEJBUz47PEFJST47SUdOT1JFCis8VUZFRTg+IDxub29uPjs8QkFTPjs8QU1FPjtJR05PUkUKKzxVRkI5RT4gPG5vb25fZ2h1bm5hPjs8QkFTPjs8QUlTPjtJR05PUkUKKzxVRkI5Rj4gPG5vb25fZ2h1bm5hPjs8QkFTPjs8QUZJPjtJR05PUkUKKzxVRkVFOT4gPGhlaD47PEJBUz47PEFJUz47SUdOT1JFCis8VUZFRUE+IDxoZWg+OzxCQVM+OzxBRkk+O0lHTk9SRQorPFVGRUVCPiA8aGVoPjs8QkFTPjs8QUlJPjtJR05PUkUKKzxVRkVFQz4gPGhlaD47PEJBUz47PEFNRT47SUdOT1JFCis8VUZCQTQ+IDxoZWhfeWVoPjs8QkFTPjs8QUlTPjtJR05PUkUKKzxVRkJBNT4gPGhlaF95ZWg+OzxCQVM+OzxBRkk+O0lHTk9SRQorPFVGRTg1PiA8d2F3Pjs8QUhXPjs8QUlTPjtJR05PUkUKKzxVRkU4Nj4gPHdhdz47PEFIVz47PEFGST47SUdOT1JFCis8VUZFRUQ+IDx3YXc+OzxCQVM+OzxBSVM+O0lHTk9SRQorPFVGRUVFPiA8d2F3Pjs8QkFTPjs8QUZJPjtJR05PUkUKKzxVRkVFRj4gPGFsZWZfbWFrc3VyYT47PEJBUz47PEFJUz47SUdOT1JFCis8VUZFRjA+IDxhbGVmX21ha3N1cmE+OzxCQVM+OzxBRkk+O0lHTk9SRQorPFVGRTg5PiAiPGFsZWZfbWFrc3VyYT48aGFtemE+IjsiPEJBUz48QkFTPiI7IjxBSVM+PEFJUz4iO0lHTk9SRQorPFVGRThBPiAiPGFsZWZfbWFrc3VyYT48aGFtemE+IjsiPEJBUz48QkFTPiI7IjxBRkk+PEFJUz4iO0lHTk9SRQorPFVGRThCPiAiPGFsZWZfbWFrc3VyYT48aGFtemE+IjsiPEJBUz48QkFTPiI7IjxBSUk+PEFJUz4iO0lHTk9SRQorPFVGRThDPiAiPGFsZWZfbWFrc3VyYT48aGFtemE+IjsiPEJBUz48QkFTPiI7IjxBTUU+PEFJUz4iO0lHTk9SRQorPFVGRUYxPiA8YWxlZl9tYWtzdXJhPjs8QVlFPjs8QUlTPjtJR05PUkUKKzxVRkVGMj4gPGFsZWZfbWFrc3VyYT47PEFZRT47PEFGST47SUdOT1JFCis8VUZFRjM+IDxhbGVmX21ha3N1cmE+OzxBWUU+OzxBSUk+O0lHTk9SRQorPFVGRUY0PiA8YWxlZl9tYWtzdXJhPjs8QVlFPjs8QU1FPjtJR05PUkUKKzxVRkJCMD4gPHllaF9iYXJyZWU+OzxZQkE+OzxBSVM+O0lHTk9SRQorPFVGQkIxPiA8eWVoX2JhcnJlZT47PFlCQT47PEFGST47SUdOT1JFCis8VUZCQUU+IDx5ZWhfYmFycmVlPjs8QkFTPjs8QUlTPjtJR05PUkUKKzxVRkJBRj4gPHllaF9iYXJyZWU+OzxCQVM+OzxBRkk+O0lHTk9SRQorPFVGRUY1PiAiPGxhbT48YWxlZj4iOyI8QkFTPjxBTUE+IjsiPEFJUz48QUZJPiI7SUdOT1JFCis8VUZFRjY+ICI8bGFtPjxhbGVmPiI7IjxCQVM+PEFNQT4iOyI8QUZJPjxBRkk+IjtJR05PUkUKKzxVRkVGNz4gIjxsYW0+PGFsZWY+IjsiPEJBUz48QUhBPiI7IjxBSVM+PEFGST4iO0lHTk9SRQorPFVGRUY4PiAiPGxhbT48YWxlZj4iOyI8QkFTPjxBSEE+IjsiPEFGST48QUZJPiI7SUdOT1JFCis8VUZFRjk+ICI8bGFtPjxhbGVmPiI7IjxCQVM+PEFIUz4iOyI8QUlTPjxBRkk+IjtJR05PUkUKKzxVRkVGQT4gIjxsYW0+PGFsZWY+IjsiPEJBUz48QUhTPiI7IjxBRkk+PEFGST4iO0lHTk9SRQorPFVGRUZCPiAiPGxhbT48YWxlZj4iOyI8QkFTPjxCQVM+IjsiPEFJUz48QUZJPiI7SUdOT1JFCis8VUZFRkM+ICI8bGFtPjxhbGVmPiI7IjxCQVM+PEJBUz4iOyI8QUZJPjxBRkk+IjtJR05PUkUKKworb3JkZXJfc3RhcnQgPEhFQlJFVT47Zm9yd2FyZDtmb3J3YXJkO2ZvcndhcmQ7Zm9yd2FyZCxwb3NpdGlvbgorPFUwNUQwPiA8YWxlZl9oZWI+OzxCQVM+O0lHTk9SRTtJR05PUkUKKzxVMDVEMT4gPGJldD47PEJBUz47SUdOT1JFO0lHTk9SRQorPFUwNUQyPiA8Z2ltZWw+OzxCQVM+O0lHTk9SRTtJR05PUkUKKzxVMDVEMz4gPGRhbGV0Pjs8QkFTPjtJR05PUkU7SUdOT1JFCis8VTA1RDQ+IDxoZT47PEJBUz47SUdOT1JFO0lHTk9SRQorPFUwNUQ1PiA8dmF2Pjs8QkFTPjtJR05PUkU7SUdOT1JFCis8VTA1RDY+IDx6YXlpbj47PEJBUz47SUdOT1JFO0lHTk9SRQorPFUwNUQ3PiA8aGV0Pjs8QkFTPjtJR05PUkU7SUdOT1JFCis8VTA1RDg+IDx0ZXQ+OzxCQVM+O0lHTk9SRTtJR05PUkUKKzxVMDVEOT4gPHlvZD47PEJBUz47SUdOT1JFO0lHTk9SRQorPFUwNURBPiA8a2FmX2Zpbj47PEJBUz47SUdOT1JFO0lHTk9SRQorPFUwNURCPiA8a2FmX2hlYj47PEJBUz47SUdOT1JFO0lHTk9SRQorPFUwNURDPiA8bGFtZWQ+OzxCQVM+O0lHTk9SRTtJR05PUkUKKzxVMDVERD4gPG1lbV9maW4+OzxCQVM+O0lHTk9SRTtJR05PUkUKKzxVMDVERT4gPG1lbT47PEJBUz47SUdOT1JFO0lHTk9SRQorPFUwNURGPiA8bnVuX2Zpbj47PEJBUz47SUdOT1JFO0lHTk9SRQorPFUwNUUwPiA8bnVuPjs8QkFTPjtJR05PUkU7SUdOT1JFCis8VTA1RTE+IDxzYW1la2g+OzxCQVM+O0lHTk9SRTtJR05PUkUKKzxVMDVFMj4gPGF5aW4+OzxCQVM+O0lHTk9SRTtJR05PUkUKKzxVMDVFMz4gPHBlX2Zpbj47PEJBUz47SUdOT1JFO0lHTk9SRQorPFUwNUU0PiA8cGU+OzxCQVM+O0lHTk9SRTtJR05PUkUKKzxVMDVFNT4gPHRzYWRpX2Zpbj47PEJBUz47SUdOT1JFO0lHTk9SRQorPFUwNUU2PiA8dHNhZGk+OzxCQVM+O0lHTk9SRTtJR05PUkUKKzxVMDVFNz4gPHFvZj47PEJBUz47SUdOT1JFO0lHTk9SRQorPFUwNUU4PiA8cmVzaD47PEJBUz47SUdOT1JFO0lHTk9SRQorPFUwNUU5PiA8c2hpbj47PEJBUz47SUdOT1JFO0lHTk9SRQorPFUwNUVBPiA8dGF2Pjs8QkFTPjtJR05PUkU7SUdOT1JFCisKK29yZGVyX3N0YXJ0IDxHUkVDPjtmb3J3YXJkO2JhY2t3YXJkO2ZvcndhcmQ7Zm9yd2FyZCxwb3NpdGlvbgorPFUwMzkxPiA8QUxQSEE+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwMzg2PiA8QUxQSEE+OzxUTlM+OzxDQVA+O0lHTk9SRQorPFUwMzkyPiA8QkVUQT47PEJBUz47PENBUD47SUdOT1JFCis8VTAzOTM+IDxHQU1NQT47PEJBUz47PENBUD47SUdOT1JFCis8VTAzREM+IDxHQU1NQT47PFBDTD47PENBUD47SUdOT1JFICMgZGlnYW1tYSBjb3B0ZQorPFUwMzk0PiA8REVMVEE+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwM0VBPiA8REVMVEE+OzxQQ0w+OzxDQVA+O0lHTk9SRSAjIEdBTkdJQSBDT1BURQorPFUwMzk1PiA8RVBTSUxPTj47PEJBUz47PENBUD47SUdOT1JFCis8VTAzODg+IDxFUFNJTE9OPjs8VE5TPjs8Q0FQPjtJR05PUkUKKzxVMDM5Nj4gPFpFVEE+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwM0U4PiA8WkVUQT47PFBDTD47PENBUD47SUdOT1JFICMgSE9SSSBDT1BURQorPFUwMzk3PiA8RVRBPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDM4OT4gPEVUQT47PFROUz47PENBUD47SUdOT1JFCis8VTAzOTg+IDxUSEVUQT47PEJBUz47PENBUD47SUdOT1JFCis8VTAzOTk+IDxJT1RBPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDM4QT4gPElPVEE+OzxUTlM+OzxDQVA+O0lHTk9SRQorPFUwM0FBPiA8SU9UQT47PERMVD47PENBUD47SUdOT1JFCis8VTAzOUE+IDxLQVBQQT47PEJBUz47PENBUD47SUdOT1JFCis8VTAzREU+IDxLQVBQQT47PFBDTD47PENBUD47SUdOT1JFICMga29wcGEgY29wdGUKKzxVMDNFNj4gPEtBUFBBPjs8TElHPjs8Q0FQPjtJR05PUkUgIyBLSEVJIENPUFRFCis8VTAzOUI+IDxMQU1CREE+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwMzlDPiA8TVU+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwMzlEPiA8TlU+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwMzlFPiA8WEk+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwMzlGPiA8T01JQ1JPTj47PEJBUz47PENBUD47SUdOT1JFCis8VTAzOEM+IDxPTUlDUk9OPjs8VE5TPjs8Q0FQPjtJR05PUkUKKzxVMDNBMD4gPFBJPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDNBMT4gPFJITz47PEJBUz47PENBUD47SUdOT1JFCis8VTAzQzE+IDxSSE8+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwM0EzPiA8U0lHTUE+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwM0RBPiA8U0lHTUE+OzxQQ0w+OzxDQVA+O0lHTk9SRSAjIFNUSUdNQSBBUkNILgorPFUwM0VDPiA8U0lHTUE+OzxMSUc+OzxDQVA+O0lHTk9SRSAjIFNISU1BIENPUFRFCis8VTAzQTQ+IDxUQVU+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwM0VFPiA8VEFVPjs8UENMPjs8Q0FQPjtJR05PUkUgIyBERUkgQ09QVEUKKzxVMDNBNT4gPFVQU0lMT04+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwMzhFPiA8VVBTSUxPTj47PFROUz47PENBUD47SUdOT1JFCis8VTAzQUI+IDxVUFNJTE9OPjs8RExUPjs8Q0FQPjtJR05PUkUKKzxVMDNEND4gPFVQU0lMT04+OzxEVFQ+OzxDQVA+O0lHTk9SRQorPFUwM0QyPiA8VVBTSUxPTj47PE9HTz47PENBUD47SUdOT1JFCis8VTAzRDM+IDxVUFNJTE9OPjs8TUFDPjs8Q0FQPjtJR05PUkUKKzxVMDNBNj4gPFBIST47PEJBUz47PENBUD47SUdOT1JFCis8VTAzRTQ+IDxQSEk+OzxMSUc+OzxDQVA+O0lHTk9SRSAjIEZFSSBDT1BURQorPFUwM0E3PiA8Q0hJPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDNFMD4gPENIST47PFBDTD47PENBUD47SUdOT1JFICMgc2FtcGkgY29wdGUKKzxVMDNBOD4gPFBTST47PEJBUz47PENBUD47SUdOT1JFCis8VTAzRTI+IDxQU0k+OzxQQ0w+OzxDQVA+O0lHTk9SRSAjIFNIRUkgQ09QVEUKKzxVMDNBOT4gPE9NRUdBPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDM4Rj4gPE9NRUdBPjs8VE5TPjs8Q0FQPjtJR05PUkUKKzxVMDNCMT4gPEFMUEhBPjs8QkFTPjs8QU1JPjtJR05PUkUKKzxVMDNBQz4gPEFMUEhBPjs8VE5TPjs8QU1JPjtJR05PUkUKKzxVMDNCMj4gPEJFVEE+OzxCQVM+OzxBTUk+O0lHTk9SRQorPFUwM0QwPiA8QkVUQT47PFBDTD47PEFNST47SUdOT1JFCis8VTAzQjM+IDxHQU1NQT47PEJBUz47PEFNST47SUdOT1JFCis8VTAzQjQ+IDxERUxUQT47PEJBUz47PEFNST47SUdOT1JFCis8VTAzRUI+IDxERUxUQT47PEJBUz47PEFNST47SUdOT1JFICMgZ2FuZ2lhIGNvcHRlCis8VTAzQjU+IDxFUFNJTE9OPjs8QkFTPjs8QU1JPjtJR05PUkUKKzxVMDNBRD4gPEVQU0lMT04+OzxUTlM+OzxBTUk+O0lHTk9SRQorPFUwM0I2PiA8WkVUQT47PEJBUz47PEFNST47SUdOT1JFCis8VTAzRTk+IDxaRVRBPjs8UENMPjs8QU1JPjtJR05PUkUgIyBob3JpIGNvcHRlCis8VTAzQjc+IDxFVEE+OzxCQVM+OzxBTUk+O0lHTk9SRQorPFUwM0FFPiA8RVRBPjs8VE5TPjs8QU1JPjtJR05PUkUKKzxVMDNCOD4gPFRIRVRBPjs8QkFTPjs8QU1JPjtJR05PUkUKKzxVMDNEMT4gPFRIRVRBPjs8UENMPjs8QU1JPjtJR05PUkUKKzxVMDNCOT4gPElPVEE+OzxCQVM+OzxBTUk+O0lHTk9SRQorPFUwM0FGPiA8SU9UQT47PFROUz47PEFNST47SUdOT1JFCis8VTAzQ0E+IDxJT1RBPjs8RExUPjs8QU1JPjtJR05PUkUKKzxVMDM5MD4gPElPVEE+OzxEVFQ+OzxBTUk+O0lHTk9SRQorPFUwM0YzPiA8SU9UQT47PE9HTz47PEFNST47SUdOT1JFICMgeW90Cis8VTAzQkE+IDxLQVBQQT47PEJBUz47PEFNST47SUdOT1JFCis8VTAzRjA+IDxLQVBQQT47PFBDTD47PEFNST47SUdOT1JFCis8VTAzRTc+IDxLQVBQQT47PExJRz47PEFNST47SUdOT1JFICMga2hlaSBjb3B0ZQorPFUwM0JCPiA8TEFNQkRBPjs8QkFTPjs8QU1JPjtJR05PUkUKKzxVMDNCQz4gPE1VPjs8QkFTPjs8QU1JPjtJR05PUkUKKzxVMDNCRD4gPE5VPjs8QkFTPjs8QU1JPjtJR05PUkUKKzxVMDNCRT4gPFhJPjs8QkFTPjs8QU1JPjtJR05PUkUKKzxVMDNCRj4gPE9NSUNST04+OzxCQVM+OzxBTUk+O0lHTk9SRQorPFUwM0NDPiA8T01JQ1JPTj47PFROUz47PEFNST47SUdOT1JFCis8VTAzQzA+IDxQST47PEJBUz47PEFNST47SUdOT1JFCis8VTAzRDY+IDxQST47PFBDTD47PEFNST47SUdOT1JFCis8VTAzRjE+IDxSSE8+OzxQQ0w+OzxBTUk+O0lHTk9SRQorPFUwM0MzPiA8U0lHTUE+OzxCQVM+OzxBTUk+O0lHTk9SRQorPFUwM0MyPiA8U0lHTUE+OzxQQ0w+OzxBTUk+O0lHTk9SRQorPFUwM0VEPiA8U0lHTUE+OzxMSUc+OzxBTUk+O0lHTk9SRSAjIHNoaW1hIGNvcHRlCis8VTAzRjI+IDxTSUdNQT47PE9HTz47PEFNST47SUdOT1JFCis8VTAzQzQ+IDxUQVU+OzxCQVM+OzxBTUk+O0lHTk9SRQorPFUwM0VGPiA8VEFVPjs8UENMPjs8QU1JPjtJR05PUkUgIyBkZWkgY29wdGUKKzxVMDNDNT4gPFVQU0lMT04+OzxCQVM+OzxBTUk+O0lHTk9SRQorPFUwM0NEPiA8VVBTSUxPTj47PFROUz47PEFNST47SUdOT1JFCis8VTAzQ0I+IDxVUFNJTE9OPjs8RExUPjs8QU1JPjtJR05PUkUKKzxVMDNCMD4gPFVQU0lMT04+OzxEVFQ+OzxBTUk+O0lHTk9SRQorPFUwM0M2PiA8UEhJPjs8QkFTPjs8QU1JPjtJR05PUkUKKzxVMDNENT4gPFBIST47PFBDTD47PEFNST47SUdOT1JFCis8VTAzRTU+IDxQSEk+OzxMSUc+OzxBTUk+O0lHTk9SRSAjIGZlaSBjb3B0ZQorPFUwM0M3PiA8Q0hJPjs8QkFTPjs8QU1JPjtJR05PUkUKKzxVMDNDOD4gPFBTST47PEJBUz47PEFNST47SUdOT1JFCis8VTAzRTM+IDxQU0k+OzxQQ0w+OzxBTUk+O0lHTk9SRSAjIHNoZWkgY29wdGUKKzxVMDNDOT4gPE9NRUdBPjs8QkFTPjs8QU1JPjtJR05PUkUKKzxVMDNDRT4gPE9NRUdBPjs8VE5TPjs8QU1JPjtJR05PUkUKKworb3JkZXJfc3RhcnQgPENZUklMPjtmb3J3YXJkO2ZvcndhcmQ7Zm9yd2FyZDtmb3J3YXJkLHBvc2l0aW9uCis8VTA0MzA+IDxDWVItQT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA0RDE+IDxDWVItQT47PEJSRT47PE1JTj47SUdOT1JFCis8VTA0RDM+IDxDWVItQT47PFJFVT47PE1JTj47SUdOT1JFCis8VTA0RDU+ICI8Q1lSLUE+PENZUi1JRT4iOyI8TElHPjxMSUc+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTA0MzE+IDxDWVItQkU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNDMyPiA8Q1lSLVZFPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDQzMz4gPENZUi1HSEU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNDkxPiA8Q1lSLUdIRT47PENSTD47PE1JTj47SUdOT1JFCis8VTA0OTM+IDxDWVItR0hFPjs8T0JMPjs8TUlOPjtJR05PUkUKKzxVMDRGNz4gPENZUi1HSEU+OzxDREk+OzxNSU4+O0lHTk9SRQorPFUwNDk1PiA8Q1lSLUdIRT47PEhPSz47PE1JTj47SUdOT1JFCis8VTA0MzQ+IDxDWVItREU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNTAxPiA8Q1lSLURFPjs8UENMPjs8TUlOPjtJR05PUkUgICAjIGtvbWkgREUKKzxVMDUwMz4gIjxDWVItREU+PENZUi1KRT4iOyI8TElHPjxMSUc+IjsiPE1JTj48TUlOPiI7SUdOT1JFICAgIyBrb21pIERKRQorPFUwNDUzPiA8Q1lSLUdaSEU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNDM1PiA8Q1lSLUlFPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDQ1MD4gPENZUi1JRT47PEdSQT47PE1JTj47SUdOT1JFCis8VTA0RDc+IDxDWVItSUU+OzxCUkU+OzxNSU4+O0lHTk9SRQorPFUwNEQ5PiA8Q1lSLUlFPjs8UENMPjs8TUlOPjtJR05PUkUKKzxVMDREQj4gPENZUi1JRT47PFBDTD47PE1JTj47PFJFVT4KKzxVMDQ1Mj4gPENZUi1ESkU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNDU0PiA8VUtSLUlFPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDQ1MT4gPENZUi1JTz47PEJBUz47PE1JTj47SUdOT1JFCis8VTA0MzY+IDxDWVItWkhFPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDQ5Nz4gPENZUi1aSEU+OzxDREk+OzxNSU4+O0lHTk9SRQorPFUwNEMyPiA8Q1lSLVpIRT47PEJSRT47PE1JTj47SUdOT1JFCis8VTA0REQ+IDxDWVItWkhFPjs8UkVVPjs8TUlOPjtJR05PUkUKKzxVMDQzNz4gPENZUi1aRT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA0OTk+IDxDWVItWkU+OzxDREk+OzxNSU4+O0lHTk9SRQorPFUwNERGPiA8Q1lSLVpFPjs8UkVVPjs8TUlOPjtJR05PUkUKKzxVMDUwNT4gIjxDWVItWkU+PENZUi1KRT4iOyI8TElHPjxMSUc+IjsiPE1JTj48TUlOPiI7SUdOT1JFICAgIyBrb21pIFpKRQorPFUwNDU1PiA8Q1lSLURaRT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA0RTE+IDxDWVItRFpFPjs8UENMPjs8TUlOPjtJR05PUkUKKzxVMDUwNz4gIjxDWVItRFpFPjxDWVItSkU+IjsiPExJRz48TElHPiI7IjxNSU4+PE1JTj4iO0lHTk9SRSAgICMga29taSBEWkpFCis8VTA0Mzg+IDxDWVItST47PEJBUz47PE1JTj47SUdOT1JFCis8VTA0NUQ+IDxDWVItST47PEdSQT47PE1JTj47SUdOT1JFCis8VTA0RTM+IDxDWVItST47PE1BQz47PE1JTj47SUdOT1JFCis8VTA0RTU+IDxDWVItST47PFJFVT47PE1JTj47SUdOT1JFCis8VTA0NTY+IDxVS1ItST47PEJBUz47PE1JTj47SUdOT1JFCis8VTA0NTc+IDxVS1ItWUk+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNDM5PiA8Q1lSLUlCUkU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNDhCPiA8Q1lSLUlCUkU+OzxDREk+OzxNSU4+O0lHTk9SRQorPFUwNDU4PiA8Q1lSLUpFPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDQzQT4gPENZUi1LQT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA0OUI+IDxDWVItS0E+OzxDREk+OzxNSU4+O0lHTk9SRQorPFUwNDlEPiA8Q1lSLUtBPjs8T0JMPjs8TUlOPjtJR05PUkUKKzxVMDQ5Rj4gPENZUi1LQT47PE1BQz47PE1JTj47SUdOT1JFCis8VTA0QTE+IDxDWVItS0E+OzxQQ0w+OzxNSU4+O0lHTk9SRQorPFUwNEM0PiA8Q1lSLUtBPjs8SE9LPjs8TUlOPjtJR05PUkUKKzxVMDQzQj4gPENZUi1FTD47PEJBUz47PE1JTj47SUdOT1JFCis8VTA0QzY+IDxDWVItRUw+OzxDREk+OzxNSU4+O0lHTk9SRQorPFUwNTA5PiAiPENZUi1FTD48Q1lSLUpFPiI7IjxMSUc+PExJRz4iOyI8TUlOPjxNSU4+IjtJR05PUkUgICAjIGtvbWkgTEpFCis8VTA0NTk+IDxDWVItTEpFPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDQzQz4gPENZUi1FTT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA0Q0U+IDxDWVItRU0+OzxDREk+OzxNSU4+O0lHTk9SRQorPFUwNDNEPiA8Q1lSLUVOPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDRBMz4gPENZUi1FTj47PENEST47PE1JTj47SUdOT1JFCis8VTA0Q0E+IDxDWVItRU4+OzxDREk+OzxNSU4+O0lHTk9SRQorPFUwNEM4PiA8Q1lSLUVOPjs8SE9LPjs8TUlOPjtJR05PUkUKKzxVMDRBNT4gIjxDWVItRU4+PENZUi1HSEU+IjsiPExJRz48TElHPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwNTBCPiAiPENZUi1FTj48Q1lSLUpFPiI7IjxMSUc+PExJRz4iOyI8TUlOPjxNSU4+IjtJR05PUkUgICAjIGtvbWkgTkpFCis8VTA0NUE+IDxDWVItTkpFPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDQzRT4gPENZUi1PPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDRFNz4gPENZUi1PPjs8UkVVPjs8TUlOPjtJR05PUkUKKzxVMDRFOT4gPENZUi1PPjs8UENMPjs8TUlOPjtJR05PUkUKKzxVMDRFQj4gPENZUi1PPjs8UENMPjs8TUlOPjs8UkVVPgorPFUwNDNGPiA8Q1lSLVBFPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDRBNz4gPENZUi1QRT47PEhPSz47PE1JTj47SUdOT1JFCis8VTA0NDA+IDxDWVItRVI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNDhGPiA8Q1lSLUVSPjs8T0JMPjs8TUlOPjtJR05PUkUKKzxVMDQ0MT4gPENZUi1FUz47PEJBUz47PE1JTj47SUdOT1JFCis8VTA0QUI+IDxDWVItRVM+OzxDREk+OzxNSU4+O0lHTk9SRQorPFUwNTBEPiAiPENZUi1FUz48Q1lSLUpFPiI7IjxMSUc+PExJRz4iOyI8TUlOPjxNSU4+IjtJR05PUkUgICAjIGtvbWkgU0pFCis8VTA0NDI+IDxDWVItVEU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNEFEPiA8Q1lSLVRFPjs8Q0RJPjs8TUlOPjtJR05PUkUKKzxVMDUwRj4gIjxDWVItVEU+PENZUi1KRT4iOyI8TElHPjxMSUc+IjsiPE1JTj48TUlOPiI7SUdOT1JFICAgIyBrb21pIFRKRQorPFUwNEI1PiAiPENZUi1URT48Q1lSLVRTRT4iOyI8TElHPjxMSUc+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTA0NUM+IDxDWVItS0pFPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDQ1Qj4gPENZUi1UU0hFPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDQ0Mz4gPENZUi1PVT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA0RUY+IDxDWVItT1U+OzxNQUM+OzxNSU4+O0lHTk9SRQorPFUwNEFGPiA8Q1lSLU9VPjs8UENMPjs8TUlOPjtJR05PUkUKKzxVMDRCMT4gPENZUi1PVT47PFBDTD47PE1JTj47PE9CTD4KKzxVMDRGMT4gPENZUi1PVT47PFJFVT47PE1JTj47SUdOT1JFCis8VTA0RjM+IDxDWVItT1U+OzxEQUM+OzxNSU4+O0lHTk9SRQorPFUwNDVFPiA8Q1lSLU9VQlJFPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDQ0ND4gPENZUi1FRj47PEJBUz47PE1JTj47SUdOT1JFCis8VTA0NDU+IDxDWVItSEE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNEIzPiA8Q1lSLUhBPjs8Q0RJPjs8TUlOPjtJR05PUkUKKzxVMDRCQj4gPENZUi1IQT47PFBDTD47PE1JTj47SUdOT1JFCis8VTA0QTk+IDxDWVItSEE+OzxQQ0w+OzxNSU4+OzxDUkw+ICAgICMgYWJraGF6aWFuIGhhCis8VTA0NDY+IDxDWVItVFNFPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDQ0Nz4gPENZUi1DSEU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNEI3PiA8Q1lSLUNIRT47PENEST47PE1JTj47SUdOT1JFCis8VTA0Qjk+IDxDWVItQ0hFPjs8T0JMPjs8TUlOPjtJR05PUkUKKzxVMDRDQz4gPENZUi1DSEU+OzxDREk+OzxNSU4+O0lHTk9SRQorPFUwNEY1PiA8Q1lSLUNIRT47PFJFVT47PE1JTj47SUdOT1JFCis8VTA0QkQ+IDxDWVItQ0hFPjs8UENMPjs8TUlOPjtJR05PUkUgICAjIGFia2hhemlhbiBjaGUKKzxVMDRCRj4gPENZUi1DSEU+OzxQQ0w+OzxNSU4+OzxDREk+ICAgICMgYWJraGF6aWFuIGNoZSB3aXRoIGRlc2NlbmRlcgorPFUwNDVGPiA8Q1lSLURDSEU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNDQ4PiA8Q1lSLVNIQT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA0NDk+IDxDWVItU0hUU0hBPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDQ0QT4gPENZUi1TSUdEVVI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNDRCPiA8Q1lSLVlFUk9VPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDRGOT4gPENZUi1ZRVJPVT47PFJFVT47PE1JTj47SUdOT1JFCis8VTA0NEM+IDxDWVItU0lHTU9VSUw+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNDhEPiA8Q1lSLVNJR01PVUlMPjs8T0JMPjs8TUlOPjtJR05PUkUKKzxVMDQ0RD4gPENZUi1FPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDRFRD4gPENZUi1FPjs8UkVVPjs8TUlOPjtJR05PUkUKKzxVMDQ0RT4gPENZUi1ZT1U+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNDRGPiA8Q1lSLVlBPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDQxMD4gPENZUi1BPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDREMD4gPENZUi1BPjs8QlJFPjs8Q0FQPjtJR05PUkUKKzxVMDREMj4gPENZUi1BPjs8UkVVPjs8Q0FQPjtJR05PUkUKKzxVMDREND4gIjxDWVItQT48Q1lSLUlFPiI7IjxMSUc+PExJRz4iOyI8Q0FQPjxDQVA+IjtJR05PUkUKKzxVMDQxMT4gPENZUi1CRT47PEJBUz47PENBUD47SUdOT1JFCis8VTA0MTI+IDxDWVItVkU+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNDEzPiA8Q1lSLUdIRT47PEJBUz47PENBUD47SUdOT1JFCis8VTA0OTA+IDxDWVItR0hFPjs8Q1JMPjs8Q0FQPjtJR05PUkUKKzxVMDQ5Mj4gPENZUi1HSEU+OzxPQkw+OzxDQVA+O0lHTk9SRQorPFUwNDk0PiA8Q1lSLUdIRT47PEhPSz47PENBUD47SUdOT1JFCis8VTA0RjY+IDxDWVItR0hFPjs8Q0RJPjs8Q0FQPjtJR05PUkUKKzxVMDQxND4gPENZUi1ERT47PEJBUz47PENBUD47SUdOT1JFCis8VTA1MDA+IDxDWVItREU+OzxQQ0w+OzxDQVA+O0lHTk9SRSAgICMga29taSBERQorPFUwNTAyPiAiPENZUi1ERT48Q1lSLUpFPiI7IjxMSUc+PExJRz4iOyI8Q0FQPjxDQVA+IjtJR05PUkUgICAjIGtvbWkgREpFCis8VTA0MDM+IDxDWVItR1pIRT47PEJBUz47PENBUD47SUdOT1JFCis8VTA0MDI+IDxDWVItREpFPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDQxNT4gPENZUi1JRT47PEJBUz47PENBUD47SUdOT1JFCis8VTA0MDA+IDxDWVItSUU+OzxHUkE+OzxDQVA+O0lHTk9SRQorPFUwNEQ2PiA8Q1lSLUlFPjs8QlJFPjs8Q0FQPjtJR05PUkUKKzxVMDREOD4gPENZUi1JRT47PFBDTD47PENBUD47SUdOT1JFCis8VTA0REE+IDxDWVItSUU+OzxQQ0w+OzxDQVA+OzxSRVU+Cis8VTA0MDQ+IDxVS1ItSUU+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNDAxPiA8Q1lSLUlPPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDQxNj4gPENZUi1aSEU+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNDk2PiA8Q1lSLVpIRT47PENEST47PENBUD47SUdOT1JFCis8VTA0QzE+IDxDWVItWkhFPjs8QlJFPjs8Q0FQPjtJR05PUkUKKzxVMDREQz4gPENZUi1aSEU+OzxSRVU+OzxDQVA+O0lHTk9SRQorPFUwNDE3PiA8Q1lSLVpFPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDQ5OD4gPENZUi1aRT47PENEST47PENBUD47SUdOT1JFCis8VTA0REU+IDxDWVItWkU+OzxSRVU+OzxDQVA+O0lHTk9SRQorPFUwNTA0PiAiPENZUi1aRT48Q1lSLUpFPiI7IjxMSUc+PExJRz4iOyI8Q0FQPjxDQVA+IjtJR05PUkUgICAjIGtvbWkgWkpFCis8VTA0MDU+IDxDWVItRFpFPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDRFMD4gPENZUi1EWkU+OzxQQ0w+OzxDQVA+O0lHTk9SRQorPFUwNTA2PiAiPENZUi1EWkU+PENZUi1KRT4iOyI8TElHPjxMSUc+IjsiPENBUD48Q0FQPiI7SUdOT1JFICAgIyBrb21pIERaSkUKKzxVMDQxOD4gPENZUi1JPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDQwRD4gPENZUi1JPjs8R1JBPjs8Q0FQPjtJR05PUkUKKzxVMDRFMj4gPENZUi1JPjs8TUFDPjs8Q0FQPjtJR05PUkUKKzxVMDRFND4gPENZUi1JPjs8UkVVPjs8Q0FQPjtJR05PUkUKKzxVMDQwNj4gPFVLUi1JPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDQwNz4gPFVLUi1ZST47PEJBUz47PENBUD47SUdOT1JFCis8VTA0MTk+IDxDWVItSUJSRT47PEJBUz47PENBUD47SUdOT1JFCis8VTA0OEE+IDxDWVItSUJSRT47PENEST47PENBUD47SUdOT1JFCis8VTA0MDg+IDxDWVItSkU+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNDFBPiA8Q1lSLUtBPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDQ5QT4gPENZUi1LQT47PENEST47PENBUD47SUdOT1JFCis8VTA0OUM+IDxDWVItS0E+OzxPQkw+OzxDQVA+O0lHTk9SRQorPFUwNDlFPiA8Q1lSLUtBPjs8TUFDPjs8Q0FQPjtJR05PUkUKKzxVMDRBMD4gPENZUi1LQT47PFBDTD47PENBUD47SUdOT1JFCis8VTA0QzM+IDxDWVItS0E+OzxIT0s+OzxDQVA+O0lHTk9SRQorPFUwNDFCPiA8Q1lSLUVMPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDRDNT4gPENZUi1FTD47PENEST47PENBUD47SUdOT1JFCis8VTA1MDg+ICI8Q1lSLUVMPjxDWVItSkU+IjsiPExJRz48TElHPiI7IjxDQVA+PENBUD4iO0lHTk9SRSAgICMga29taSBMSkUKKzxVMDQwOT4gPENZUi1MSkU+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNDFDPiA8Q1lSLUVNPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDRDRD4gPENZUi1FTT47PENEST47PENBUD47SUdOT1JFCis8VTA0MUQ+IDxDWVItRU4+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNEEyPiA8Q1lSLUVOPjs8Q0RJPjs8Q0FQPjtJR05PUkUKKzxVMDRDNz4gPENZUi1FTj47PEhPSz47PENBUD47SUdOT1JFCis8VTA0Qzk+IDxDWVItRU4+OzxDREk+OzxDQVA+O0lHTk9SRQorPFUwNEE0PiAiPENZUi1FTj48Q1lSLUdIRT4iOyI8TElHPjxMSUc+IjsiPENBUD48Q0FQPiI7SUdOT1JFCis8VTA1MEE+ICI8Q1lSLUVOPjxDWVItSkU+IjsiPExJRz48TElHPiI7IjxDQVA+PENBUD4iO0lHTk9SRSAgICMga29taSBOSkUKKzxVMDQwQT4gPENZUi1OSkU+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNDFFPiA8Q1lSLU8+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNEU2PiA8Q1lSLU8+OzxSRVU+OzxDQVA+O0lHTk9SRQorPFUwNEU4PiA8Q1lSLU8+OzxQQ0w+OzxDQVA+O0lHTk9SRQorPFUwNEVBPiA8Q1lSLU8+OzxQQ0w+OzxDQVA+OzxSRVU+Cis8VTA0MUY+IDxDWVItUEU+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNEE2PiA8Q1lSLVBFPjs8SE9LPjs8Q0FQPjtJR05PUkUKKzxVMDQyMD4gPENZUi1FUj47PEJBUz47PENBUD47SUdOT1JFCis8VTA0OEU+IDxDWVItRVI+OzxPQkw+OzxDQVA+O0lHTk9SRQorPFUwNDIxPiA8Q1lSLUVTPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDRBQT4gPENZUi1FUz47PENEST47PENBUD47SUdOT1JFCis8VTA1MEM+ICI8Q1lSLUVTPjxDWVItSkU+IjsiPExJRz48TElHPiI7IjxDQVA+PENBUD4iO0lHTk9SRSAgICMga29taSBTSkUKKzxVMDQyMj4gPENZUi1URT47PEJBUz47PENBUD47SUdOT1JFCis8VTA0QUM+IDxDWVItVEU+OzxDREk+OzxDQVA+O0lHTk9SRQorPFUwNTBFPiAiPENZUi1URT48Q1lSLUpFPiI7IjxMSUc+PExJRz4iOyI8Q0FQPjxDQVA+IjtJR05PUkUgICAjIGtvbWkgVEpFCis8VTA0QjQ+ICI8Q1lSLVRFPjxDWVItVFNFPiI7IjxMSUc+PExJRz4iOyI8Q0FQPjxDQVA+IjtJR05PUkUKKzxVMDQwQz4gPENZUi1LSkU+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNDBCPiA8Q1lSLVRTSEU+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNDIzPiA8Q1lSLU9VPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDRFRT4gPENZUi1PVT47PE1BQz47PENBUD47SUdOT1JFCis8VTA0QUU+IDxDWVItT1U+OzxQQ0w+OzxDQVA+O0lHTk9SRQorPFUwNEIwPiA8Q1lSLU9VPjs8UENMPjs8Q0FQPjs8T0JMPgorPFUwNEYwPiA8Q1lSLU9VPjs8UkVVPjs8Q0FQPjtJR05PUkUKKzxVMDRGMj4gPENZUi1PVT47PERBQz47PENBUD47SUdOT1JFCis8VTA0MEU+IDxDWVItT1VCUkU+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNDI0PiA8Q1lSLUVGPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDQyNT4gPENZUi1IQT47PEJBUz47PENBUD47SUdOT1JFCis8VTA0QjI+IDxDWVItSEE+OzxDREk+OzxDQVA+O0lHTk9SRQorPFUwNEJBPiA8Q1lSLUhBPjs8UENMPjs8Q0FQPjtJR05PUkUKKzxVMDRBOD4gPENZUi1IQT47PFBDTD47PENBUD47PENSTD4gICAgIyBhYmtoYXppYW4gaGEKKzxVMDQyNj4gPENZUi1UU0U+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNDI3PiA8Q1lSLUNIRT47PEJBUz47PENBUD47SUdOT1JFCis8VTA0QjY+IDxDWVItQ0hFPjs8Q0RJPjs8Q0FQPjtJR05PUkUKKzxVMDRCOD4gPENZUi1DSEU+OzxPQkw+OzxDQVA+O0lHTk9SRQorPFUwNENCPiA8Q1lSLUNIRT47PENEST47PENBUD47SUdOT1JFCis8VTA0RjQ+IDxDWVItQ0hFPjs8UkVVPjs8Q0FQPjtJR05PUkUKKzxVMDRCQz4gPENZUi1DSEU+OzxQQ0w+OzxDQVA+O0lHTk9SRSAgICMgYWJraGF6aWFuIGNoZQorPFUwNEJFPiA8Q1lSLUNIRT47PFBDTD47PENBUD47PENEST4gICAgIyBhYmtoYXppYW4gY2hlIHdpdGggZGVzY2VuZGVyCis8VTA0MEY+IDxDWVItRENIRT47PEJBUz47PENBUD47SUdOT1JFCis8VTA0Mjg+IDxDWVItU0hBPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDQyOT4gPENZUi1TSFRTSEE+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNDJBPiA8Q1lSLVNJR0RVUj47PEJBUz47PENBUD47SUdOT1JFCis8VTA0Rjg+IDxDWVItWUVST1U+OzxSRVU+OzxDQVA+O0lHTk9SRQorPFUwNDJCPiA8Q1lSLVlFUk9VPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDQyQz4gPENZUi1TSUdNT1VJTD47PEJBUz47PENBUD47SUdOT1JFCis8VTA0OEM+IDxDWVItU0lHTU9VSUw+OzxPQkw+OzxDQVA+O0lHTk9SRQorPFUwNDJEPiA8Q1lSLUU+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNEVDPiA8Q1lSLUU+OzxSRVU+OzxDQVA+O0lHTk9SRQorPFUwNDJFPiA8Q1lSLVlPVT47PEJBUz47PENBUD47SUdOT1JFCis8VTA0MkY+IDxDWVItWUE+OzxCQVM+OzxDQVA+O0lHTk9SRQorCitvcmRlcl9zdGFydCA8QVJNRU5JQU4+O2ZvcndhcmQ7Zm9yd2FyZDtmb3J3YXJkO2ZvcndhcmQscG9zaXRpb24KKzxVMDU2MT4gPEFSTS1BWUI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNTYyPiA8QVJNLUJFTj47PEJBUz47PE1JTj47SUdOT1JFCis8VTA1NjM+IDxBUk0tR0lNPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDU2ND4gPEFSTS1EQT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA1NjU+IDxBUk0tRUNIPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDU2Nj4gPEFSTS1aQT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA1Njc+IDxBUk0tRT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA1Njg+IDxBUk0tQVQ+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNTY5PiA8QVJNLVRPPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDU2QT4gPEFSTS1aSEU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNTZCPiA8QVJNLUlOST47PEJBUz47PE1JTj47SUdOT1JFCis8VTA1NkM+IDxBUk0tTFlVTj47PEJBUz47PE1JTj47SUdOT1JFCis8VTA1NkQ+IDxBUk0tS0hFPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDU2RT4gPEFSTS1UU0E+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNTZGPiA8QVJNLUtFTj47PEJBUz47PE1JTj47SUdOT1JFCis8VTA1NzA+IDxBUk0tSE8+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNTcxPiA8QVJNLURaQT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA1NzI+IDxBUk0tR0hBVD47PEJBUz47PE1JTj47SUdOT1JFCis8VTA1NzM+IDxBUk0tVENIRT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA1NzQ+IDxBUk0tTUVOPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDU3NT4gPEFSTS1IST47PEJBUz47PE1JTj47SUdOT1JFCis8VTA1NzY+IDxBUk0tTlU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNTc3PiA8QVJNLVNIQT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA1Nzg+IDxBUk0tVk8+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNTc5PiA8QVJNLUNIQT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA1N0E+IDxBUk0tUEU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNTdCPiA8QVJNLUpFPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDU3Qz4gPEFSTS1SQT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA1N0Q+IDxBUk0tU0U+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNTdFPiA8QVJNLVZFVj47PEJBUz47PE1JTj47SUdOT1JFCis8VTA1N0Y+IDxBUk0tVFlVTj47PEJBUz47PE1JTj47SUdOT1JFCis8VTA1ODA+IDxBUk0tUkU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNTgxPiA8QVJNLVRTTz47PEJBUz47PE1JTj47SUdOT1JFCis8VTA1ODI+IDxBUk0tVllVTj47PEJBUz47PE1JTj47SUdOT1JFCis8VTA1ODM+IDxBUk0tUFlVUj47PEJBUz47PE1JTj47SUdOT1JFCis8VTA1ODQ+IDxBUk0tS0U+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNTg1PiA8QVJNLU8+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNTg2PiA8QVJNLUZFPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDUzMT4gPEFSTS1BWUI+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNTMyPiA8QVJNLUJFTj47PEJBUz47PENBUD47SUdOT1JFCis8VTA1MzM+IDxBUk0tR0lNPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDUzND4gPEFSTS1EQT47PEJBUz47PENBUD47SUdOT1JFCis8VTA1MzU+IDxBUk0tRUNIPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDUzNj4gPEFSTS1aQT47PEJBUz47PENBUD47SUdOT1JFCis8VTA1Mzc+IDxBUk0tRT47PEJBUz47PENBUD47SUdOT1JFCis8VTA1Mzg+IDxBUk0tQVQ+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNTM5PiA8QVJNLVRPPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDUzQT4gPEFSTS1aSEU+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNTNCPiA8QVJNLUlOST47PEJBUz47PENBUD47SUdOT1JFCis8VTA1M0M+IDxBUk0tTFlVTj47PEJBUz47PENBUD47SUdOT1JFCis8VTA1M0Q+IDxBUk0tS0hFPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDUzRT4gPEFSTS1UU0E+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNTNGPiA8QVJNLUtFTj47PEJBUz47PENBUD47SUdOT1JFCis8VTA1NDA+IDxBUk0tSE8+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNTQxPiA8QVJNLURaQT47PEJBUz47PENBUD47SUdOT1JFCis8VTA1NDI+IDxBUk0tR0hBVD47PEJBUz47PENBUD47SUdOT1JFCis8VTA1NDM+IDxBUk0tVENIRT47PEJBUz47PENBUD47SUdOT1JFCis8VTA1NDQ+IDxBUk0tTUVOPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDU0NT4gPEFSTS1IST47PEJBUz47PENBUD47SUdOT1JFCis8VTA1NDY+IDxBUk0tTlU+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNTQ3PiA8QVJNLVNIQT47PEJBUz47PENBUD47SUdOT1JFCis8VTA1NDg+IDxBUk0tVk8+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNTQ5PiA8QVJNLUNIQT47PEJBUz47PENBUD47SUdOT1JFCis8VTA1NEE+IDxBUk0tUEU+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNTRCPiA8QVJNLUpFPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDU0Qz4gPEFSTS1SQT47PEJBUz47PENBUD47SUdOT1JFCis8VTA1NEQ+IDxBUk0tU0U+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNTRFPiA8QVJNLVZFVj47PEJBUz47PENBUD47SUdOT1JFCis8VTA1NEY+IDxBUk0tVFlVTj47PEJBUz47PENBUD47SUdOT1JFCis8VTA1NTA+IDxBUk0tUkU+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNTUxPiA8QVJNLVRTTz47PEJBUz47PENBUD47SUdOT1JFCis8VTA1NTI+IDxBUk0tVllVTj47PEJBUz47PENBUD47SUdOT1JFCis8VTA1NTM+IDxBUk0tUFlVUj47PEJBUz47PENBUD47SUdOT1JFCis8VTA1NTQ+IDxBUk0tS0U+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNTU1PiA8QVJNLU8+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwNTU2PiA8QVJNLUZFPjs8QkFTPjs8Q0FQPjtJR05PUkUKKworb3JkZXJfc3RhcnQgPEdFT1JHSUFOPjtmb3J3YXJkO2ZvcndhcmQ7Zm9yd2FyZDtmb3J3YXJkLHBvc2l0aW9uCisjIHRoZXJlIGFyZSB0aHJlZSBnZW9yZ2lhbiBibG9ja3MgZGVmaW5lZCBpbiB1bmljb2RlOworIyB0aG9zZSBjb3JyZXNwb25kIHRvIGN1cnJlbnQgYW5kIHR3byBoaXN0b3JpY2FsIHNjcmlwdHMsCisjIGFuZCBhcmUgZGVzY3JpYmVkIGFzICJDQVBJVEFMIiwgIihub3RoaW5nKSIgYW5kICJTTUFMTCIgbGV0dGVycy4KKyMgdXNpbmcgPENBUD4sIDxNSU4+LCA8QU5PPiByZXNwZWN0aXZlbHkgZm9yIHRoZW0sIHNvIHRoZSB1c3VhbAorIyBzY3JpcHQgY29tZXMgZmlyc3QgKDxNSU4+KSwgdGhlbiB0aGUgIlNNQUxMIiAoPEFOTz4pIHRoZW4gdGhlCisjICJDQVBJVEFMIiAoPENBUD4pCis8VTEwQTA+IDxHRU9SRy1BTj47PEJBUz47PENBUD47SUdOT1JFCis8VTEwQTE+IDxHRU9SRy1CQU4+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUxMEEyPiA8R0VPUkctR0FOPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMTBBMz4gPEdFT1JHLURPTj47PEJBUz47PENBUD47SUdOT1JFCis8VTEwQTQ+IDxHRU9SRy1FTj47PEJBUz47PENBUD47SUdOT1JFCis8VTEwQTU+IDxHRU9SRy1WSU4+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUxMEE2PiA8R0VPUkctWkVOPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMTBBNz4gPEdFT1JHLVRBTj47PEJBUz47PENBUD47SUdOT1JFCis8VTEwQTg+IDxHRU9SRy1JTj47PEJBUz47PENBUD47SUdOT1JFCis8VTEwQTk+IDxHRU9SRy1LQU4+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUxMEFBPiA8R0VPUkctTEFTPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMTBBQj4gPEdFT1JHLU1BTj47PEJBUz47PENBUD47SUdOT1JFCis8VTEwQUM+IDxHRU9SRy1OQVI+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUxMEFEPiA8R0VPUkctT04+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUxMEFFPiA8R0VPUkctUEFSPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMTBBRj4gPEdFT1JHLVpIQVI+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUxMEIwPiA8R0VPUkctUkFFPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMTBCMT4gPEdFT1JHLVNBTj47PEJBUz47PENBUD47SUdOT1JFCis8VTEwQjI+IDxHRU9SRy1UQVI+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUxMEIzPiA8R0VPUkctVU4+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUxMEI0PiA8R0VPUkctUEhBUj47PEJBUz47PENBUD47SUdOT1JFCis8VTEwQjU+IDxHRU9SRy1LSEFSPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMTBCNj4gPEdFT1JHLUdIQU4+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUxMEI3PiA8R0VPUkctUUFSPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMTBCOD4gPEdFT1JHLVNISU4+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUxMEI5PiA8R0VPUkctQ0hJTj47PEJBUz47PENBUD47SUdOT1JFCis8VTEwQkE+IDxHRU9SRy1DQU4+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUxMEJCPiA8R0VPUkctSklMPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMTBCQz4gPEdFT1JHLUNJTD47PEJBUz47PENBUD47SUdOT1JFCis8VTEwQkQ+IDxHRU9SRy1DSEFSPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMTBCRT4gPEdFT1JHLVhBTj47PEJBUz47PENBUD47SUdOT1JFCis8VTEwQkY+IDxHRU9SRy1KSEFOPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMTBDMD4gPEdFT1JHLUhBRT47PEJBUz47PENBUD47SUdOT1JFCis8VTEwQzE+IDxHRU9SRy1IRT47PEJBUz47PENBUD47SUdOT1JFCis8VTEwQzI+IDxHRU9SRy1ISUU+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUxMEMzPiA8R0VPUkctV0U+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUxMEM0PiA8R0VPUkctSEFSPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMTBDNT4gPEdFT1JHLUhPRT47PEJBUz47PENBUD47SUdOT1JFCisjCis8VTEwRDA+IDxHRU9SRy1BTj47PEJBUz47PE1JTj47SUdOT1JFCis8VTEwRDE+IDxHRU9SRy1CQU4+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUxMEQyPiA8R0VPUkctR0FOPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMTBEMz4gPEdFT1JHLURPTj47PEJBUz47PE1JTj47SUdOT1JFCis8VTEwRDQ+IDxHRU9SRy1FTj47PEJBUz47PE1JTj47SUdOT1JFCis8VTEwRDU+IDxHRU9SRy1WSU4+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUxMEQ2PiA8R0VPUkctWkVOPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMTBENz4gPEdFT1JHLVRBTj47PEJBUz47PE1JTj47SUdOT1JFCis8VTEwRDg+IDxHRU9SRy1JTj47PEJBUz47PE1JTj47SUdOT1JFCis8VTEwRDk+IDxHRU9SRy1LQU4+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUxMERBPiA8R0VPUkctTEFTPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMTBEQj4gPEdFT1JHLU1BTj47PEJBUz47PE1JTj47SUdOT1JFCis8VTEwREM+IDxHRU9SRy1OQVI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUxMEREPiA8R0VPUkctT04+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUxMERFPiA8R0VPUkctUEFSPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMTBERj4gPEdFT1JHLVpIQVI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUxMEUwPiA8R0VPUkctUkFFPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMTBFMT4gPEdFT1JHLVNBTj47PEJBUz47PE1JTj47SUdOT1JFCis8VTEwRTI+IDxHRU9SRy1UQVI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUxMEUzPiA8R0VPUkctVU4+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUxMEU0PiA8R0VPUkctUEhBUj47PEJBUz47PE1JTj47SUdOT1JFCis8VTEwRTU+IDxHRU9SRy1LSEFSPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMTBFNj4gPEdFT1JHLUdIQU4+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUxMEU3PiA8R0VPUkctUUFSPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMTBFOD4gPEdFT1JHLVNISU4+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUxMEU5PiA8R0VPUkctQ0hJTj47PEJBUz47PE1JTj47SUdOT1JFCis8VTEwRUE+IDxHRU9SRy1DQU4+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUxMEVCPiA8R0VPUkctSklMPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMTBFQz4gPEdFT1JHLUNJTD47PEJBUz47PE1JTj47SUdOT1JFCis8VTEwRUQ+IDxHRU9SRy1DSEFSPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMTBFRT4gPEdFT1JHLVhBTj47PEJBUz47PE1JTj47SUdOT1JFCis8VTEwRUY+IDxHRU9SRy1KSEFOPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMTBGMD4gPEdFT1JHLUhBRT47PEJBUz47PE1JTj47SUdOT1JFCis8VTEwRjE+IDxHRU9SRy1IRT47PEJBUz47PE1JTj47SUdOT1JFCis8VTEwRjI+IDxHRU9SRy1ISUU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUxMEYzPiA8R0VPUkctV0U+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUxMEY0PiA8R0VPUkctSEFSPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMTBGNT4gPEdFT1JHLUhPRT47PEJBUz47PE1JTj47SUdOT1JFCis8VTEwRjY+IDxHRU9SRy1GST47PEJBUz47PE1JTj47SUdOT1JFCis8VTEwRjc+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMTBGNz4gIyBHRU9SR0lBTiBMRVRURVIgWU4KKzxVMTBGOD4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxMEY4PiAjIEdFT1JHSUFOIExFVFRFUiBFTElGSQorPFUxMEY5PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTEwRjk+ICMgR0VPUkdJQU4gTEVUVEVSIFRVUk5FRCBHQU4KKzxVMTBGQT4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxMEZBPiAjIEdFT1JHSUFOIExFVFRFUiBBSU4KKzxVMTBGQj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxMEZCPiAjIEdFT1JHSUFOIFBBUkFHUkFQSCBTRVBBUkFUT1IKKzxVMTBGQz4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxMEZDPiAjIE1PRElGSUVSIExFVFRFUiBHRU9SR0lBTiBOQVIKKyMKKzxVMkQwMD4gPEdFT1JHLUFOPjs8QkFTPjs8QU5PPjtJR05PUkUKKzxVMkQwMT4gPEdFT1JHLUJBTj47PEJBUz47PEFOTz47SUdOT1JFCis8VTJEMDI+IDxHRU9SRy1HQU4+OzxCQVM+OzxBTk8+O0lHTk9SRQorPFUyRDAzPiA8R0VPUkctRE9OPjs8QkFTPjs8QU5PPjtJR05PUkUKKzxVMkQwND4gPEdFT1JHLUVOPjs8QkFTPjs8QU5PPjtJR05PUkUKKzxVMkQwNT4gPEdFT1JHLVZJTj47PEJBUz47PEFOTz47SUdOT1JFCis8VTJEMDY+IDxHRU9SRy1aRU4+OzxCQVM+OzxBTk8+O0lHTk9SRQorPFUyRDA3PiA8R0VPUkctVEFOPjs8QkFTPjs8QU5PPjtJR05PUkUKKzxVMkQwOD4gPEdFT1JHLUlOPjs8QkFTPjs8QU5PPjtJR05PUkUKKzxVMkQwOT4gPEdFT1JHLUtBTj47PEJBUz47PEFOTz47SUdOT1JFCis8VTJEMEE+IDxHRU9SRy1MQVM+OzxCQVM+OzxBTk8+O0lHTk9SRQorPFUyRDBCPiA8R0VPUkctTUFOPjs8QkFTPjs8QU5PPjtJR05PUkUKKzxVMkQwQz4gPEdFT1JHLU5BUj47PEJBUz47PEFOTz47SUdOT1JFCis8VTJEMEQ+IDxHRU9SRy1PTj47PEJBUz47PEFOTz47SUdOT1JFCis8VTJEMEU+IDxHRU9SRy1QQVI+OzxCQVM+OzxBTk8+O0lHTk9SRQorPFUyRDBGPiA8R0VPUkctWkhBUj47PEJBUz47PEFOTz47SUdOT1JFCis8VTJEMTA+IDxHRU9SRy1SQUU+OzxCQVM+OzxBTk8+O0lHTk9SRQorPFUyRDExPiA8R0VPUkctU0FOPjs8QkFTPjs8QU5PPjtJR05PUkUKKzxVMkQxMj4gPEdFT1JHLVRBUj47PEJBUz47PEFOTz47SUdOT1JFCis8VTJEMTM+IDxHRU9SRy1VTj47PEJBUz47PEFOTz47SUdOT1JFCis8VTJEMTQ+IDxHRU9SRy1QSEFSPjs8QkFTPjs8QU5PPjtJR05PUkUKKzxVMkQxNT4gPEdFT1JHLUtIQVI+OzxCQVM+OzxBTk8+O0lHTk9SRQorPFUyRDE2PiA8R0VPUkctR0hBTj47PEJBUz47PEFOTz47SUdOT1JFCis8VTJEMTc+IDxHRU9SRy1RQVI+OzxCQVM+OzxBTk8+O0lHTk9SRQorPFUyRDE4PiA8R0VPUkctU0hJTj47PEJBUz47PEFOTz47SUdOT1JFCis8VTJEMTk+IDxHRU9SRy1DSElOPjs8QkFTPjs8QU5PPjtJR05PUkUKKzxVMkQxQT4gPEdFT1JHLUNBTj47PEJBUz47PEFOTz47SUdOT1JFCis8VTJEMUI+IDxHRU9SRy1KSUw+OzxCQVM+OzxBTk8+O0lHTk9SRQorPFUyRDFDPiA8R0VPUkctQ0lMPjs8QkFTPjs8QU5PPjtJR05PUkUKKzxVMkQxRD4gPEdFT1JHLUNIQVI+OzxCQVM+OzxBTk8+O0lHTk9SRQorPFUyRDFFPiA8R0VPUkctWEFOPjs8QkFTPjs8QU5PPjtJR05PUkUKKzxVMkQxRj4gPEdFT1JHLUpIQU4+OzxCQVM+OzxBTk8+O0lHTk9SRQorPFUyRDIwPiA8R0VPUkctSEFFPjs8QkFTPjs8QU5PPjtJR05PUkUKKzxVMkQyMT4gPEdFT1JHLUhFPjs8QkFTPjs8QU5PPjtJR05PUkUKKzxVMkQyMj4gPEdFT1JHLUhJRT47PEJBUz47PEFOTz47SUdOT1JFCis8VTJEMjM+IDxHRU9SRy1XRT47PEJBUz47PEFOTz47SUdOT1JFCis8VTJEMjQ+IDxHRU9SRy1IQVI+OzxCQVM+OzxBTk8+O0lHTk9SRQorPFUyRDI1PiA8R0VPUkctSE9FPjs8QkFTPjs8QU5PPjtJR05PUkUKKworb3JkZXJfc3RhcnQgPERFVkFOQUdBUkk+O2ZvcndhcmQ7Zm9yd2FyZDtmb3J3YXJkO2ZvcndhcmQscG9zaXRpb24KKzxVMDk3MD4gPGR2LWFiYnJldmF0aW9uPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDk2Nj4gPDA+OyI8QkFTPjxOVU0+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTA5Njc+IDwxPjsiPEJBUz48TlVNPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwOTY4PiA8Mj47IjxCQVM+PE5VTT4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMDk2OT4gPDM+OyI8QkFTPjxOVU0+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTA5NkE+IDw0PjsiPEJBUz48TlVNPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwOTZCPiA8NT47IjxCQVM+PE5VTT4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMDk2Qz4gPDY+OyI8QkFTPjxOVU0+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTA5NkQ+IDw3PjsiPEJBUz48TlVNPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwOTZFPiA8OD47IjxCQVM+PE5VTT4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMDk2Rj4gPDk+OyI8QkFTPjxOVU0+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTA5NTA+IDxkb20+IDs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDkwND4gIDxkdnctc2hvcnRhPiA7PEJBUz47PE1JTj47SUdOT1JFCis8VTA5MDU+IDxkdnctYT4gOzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTA2PiA8ZHZ3LWFhPiA7PEJBUz47PE1JTj47SUdOT1JFCis8VTA5MDc+IDxkdnctaT4gOzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTA4PiA8ZHZ3LWlpPiA7PEJBUz47PE1JTj47SUdOT1JFCis8VTA5MDk+IDxkdnctdT4gOzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTBBPiA8ZHZ3LXV1Pjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDkwQj4gPGR2dy12b2NhbGljcj47PEJBUz47PE1JTj47SUdOT1JFCis8VTA5NjA+IDxkdnctdm9jYWxpY3JyPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDkwQz4gPGR2dy12b2NhbGljbD47PEJBUz47PE1JTj47SUdOT1JFCis8VTA5NjE+IDxkdnctdm9jYWxpY2xsPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDkwRD4gPGR2dy1jYW5kcmFlPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDkwRT4gPGR2dy1zaG9ydGU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTBGPiA8ZHZ3LWU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTEwPiA8ZHZ3LWFpPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDkxMT4gPGR2dy1jYW5kcmFvPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDkxMj4gPGR2dy1zaG9ydG8+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTEzPiA8ZHZ3LW8+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTE0PiA8ZHZ3LWF1Pjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDkxNT4gPGRfa2E+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTU4PiA8ZF9rYT47IjxCQVM+PE5LVD4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMDkxNj4gPGRfa2hhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDk1OT4gPGRfa2hhPjsiPEJBUz48TktUPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwOTE3PiA8ZF9nYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA5NUE+IDxkX2dhPjsiPEJBUz48TktUPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwOTdCPiA8ZF9nZ2E+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTE4PiA8ZF9naGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTE5PiA8ZF9uZ2E+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTFBPiA8ZF9jYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA5MUI+IDxkX2NoYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA5MUM+IDxkX2phPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDk1Qj4gPGRfamE+OyI8QkFTPjxOS1Q+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTA5N0M+IDxkX2pqYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA5MUQ+IDxkX2poYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA5MUU+IDxkX255YT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA5MUY+IDxkX3R0YT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA5MjA+IDxkX3R0aGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTIxPiA8ZF9kZGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTVDPiA8ZF9kZGE+OyI8QkFTPjxOS1Q+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTA5N0U+IDxkX2RkZGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTIyPiA8ZF9kZGhhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDk1RD4gPGRfZGRoYT47IjxCQVM+PE5LVD4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMDkyMz4gPGRfbm5hPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDkyND4gPGRfdGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTI1PiA8ZF90aGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTI2PiA8ZF9kYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA5Mjc+IDxkX2RoYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA5Mjg+IDxkX25hPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDkyOT4gPGRfbmE+OyI8QkFTPjxOS1Q+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTA5MkE+IDxkX3BhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDkyQj4gPGRfcGhhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDk1RT4gPGRfcGhhPjsiPEJBUz48TktUPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwOTJDPiA8ZF9iYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA5N0Y+IDxkX2JiYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA5MkQ+IDxkX2JoYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA5MkU+IDxkX21hPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDkyRj4gPGRfeWE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTVGPiA8ZF95YT47IjxCQVM+PE5LVD4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMDkzMD4gPGRfcmE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTMxPiA8ZF9yYT47IjxCQVM+PE5LVD4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMDkzMj4gPGRfbGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTMzPiA8ZF9sbGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTM0PiA8ZF9sbGE+OyI8QkFTPjxOS1Q+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTA5MzU+IDxkX3ZhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDkzNj4gPGRfc2hhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDkzNz4gPGRfc3NhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDkzOD4gPGRfc2E+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTM5PiA8ZF9oYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA5M0Q+IDxkX2F2YWdyYWg+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTdEPiA8ZF9nbG8tc3RvcD47PEJBUz47PE1JTj47SUdOT1JFCis8VTA5M0U+IDxkbS1hYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA5M0Y+IDxkbS1pPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDk0MD4gPGRtLWlpPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDk0MT4gPGRtLXU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTQyPiA8ZG0tdXU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTQzPiA8ZG0tdm9jYWxpY3I+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTQ0PiA8ZG0tdm9jYWxpY3JyPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDk2Mj4gPGRtLXZvY2FsaWNsPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDk2Mz4gPGRtLXZvY2FsaWNsbD47PEJBUz47PE1JTj47SUdOT1JFCis8VTA5NDU+IDxkbS1jYW5kcmFlPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDk0Nj4gIDxkbS1zaG9ydGU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTQ3PiA8ZG0tZT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA5NDg+IDxkbS1haT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA5NDk+IDxkbS1jYW5kcmFvPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDk0QT4gPGRtLXNob3J0bz47PEJBUz47PE1JTj47SUdOT1JFCis8VTA5NEI+IDxkbS1vPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDk0Qz4gPGRtLWF1Pjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDkwMj4gPGR2ZC1hbnVzd2FyYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA5MDE+IDxkdmQtY2hhbmRyYWJpbmR1Pjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDkwMz4gPGR2ZC12aXNhcmc+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTREPiA8ZF9oYWxhbnQ+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwOTNDPiBJR05PUkU7PE5LVD47PE1JTj47SUdOT1JFCis8VTA5NTE+IElHTk9SRTs8ZF91ZGF0dGE+OzxNSU4+O0lHTk9SRQorPFUwOTUyPiBJR05PUkU7PGRfYW51ZGF0dGE+OzxNSU4+O0lHTk9SRQorPFUwOTUzPiBJR05PUkU7PGR2LWdyYXZlPjs8TUlOPjtJR05PUkUKKzxVMDk1ND4gSUdOT1JFOzxkdi1hY3V0ZT47PE1JTj47SUdOT1JFCisKK29yZGVyX3N0YXJ0ICA8R1VKQVJBVEk+O2ZvcndhcmQ7Zm9yd2FyZDtmb3J3YXJkO2ZvcndhcmQscG9zaXRpb24KKzxVMEFFNj4gPDA+OyI8QkFTPjxOVU0+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTBBRTc+IDwxPjsiPEJBUz48TlVNPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwQUU4PiA8Mj47IjxCQVM+PE5VTT4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMEFFOT4gPDM+OyI8QkFTPjxOVU0+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTBBRUE+IDw0PjsiPEJBUz48TlVNPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwQUVCPiA8NT47IjxCQVM+PE5VTT4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMEFFQz4gPDY+OyI8QkFTPjxOVU0+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTBBRUQ+IDw3PjsiPEJBUz48TlVNPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwQUVFPiA8OD47IjxCQVM+PE5VTT4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMEFFRj4gPDk+OyI8QkFTPjxOVU0+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTBBRDA+IDxnb20+IDs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEE4NT4gPGd2dy1hPiA7PEJBUz47PE1JTj47SUdOT1JFCis8VTBBODY+IDxndnctYWE+IDs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEE4Nz4gPGd2dy1pPiA7PEJBUz47PE1JTj47SUdOT1JFCis8VTBBODg+IDxndnctaWk+IDs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEE4OT4gPGd2dy11PiA7PEJBUz47PE1JTj47SUdOT1JFCis8VTBBOEE+IDxndnctdXU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQThCPiA8Z3Z3LXZvY2FsaWNyPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEFFMD4gPGd2dy12b2NhbGljcnI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQThDPiA8Z3Z3LXZvY2FsaWNsPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEFFMT4gPGd2dy12b2NhbGljbGw+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQThEPiA8Z3Z3LWNhbmRyYWU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQThGPiA8Z3Z3LWU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQTkwPiA8Z3Z3LWFpPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEE5MT4gPGd2dy1jYW5kcmFvPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEE5Mz4gPGd2dy1vPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEE5ND4gPGd2dy1hdT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBOTU+IDxnLWthPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEE5Nj4gPGcta2hhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEE5Nz4gPGctZ2E+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQTk4PiA8Zy1naGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQTk5PiA8Zy1uZ2E+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQTlBPiA8Zy1jYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBOUI+IDxnLWNoYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBOUM+IDxnLWphPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEE5RD4gPGctamhhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEE5RT4gPGctbnlhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEE5Rj4gPGctdHRhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEFBMD4gPGctdHRoYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBQTE+IDxnLWRkYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBQTI+IDxnLWRkaGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQUEzPiA8Zy1ubmE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQUE0PiA8Zy10YT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBQTU+IDxnLXRoYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBQTY+IDxnLWRhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEFBNz4gPGctZGhhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEFBOD4gPGctbmE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQUFBPiA8Zy1wYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBQUI+IDxnLXBoYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBQUM+IDxnLWJhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEFBRD4gPGctYmhhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEFBRT4gPGctbWE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQUFGPiA8Zy15YT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBQjA+IDxnLXJhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEFCMj4gPGctbGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQUIzPiA8Zy1sbGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQUI1PiA8Zy12YT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBQjY+IDxnLXNoYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBQjc+IDxnLXNzYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBQjg+IDxnLXNhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEFCOT4gICA8Zy1oYT47PEJBUz47PE1JTj47SUdOT1JFCis8Z3Uta3NoYT4gPGcta3NoYT47PEJBUz47PE1JTj47SUdOT1JFCis8Z3UtZG55YT4gPGctZG55YT47PEJBUz47PE1JTj47SUdOT1JFCis8Z3Utc2hyYT4gPGctc2hyYT47PEJBUz47PE1JTj47SUdOT1JFCis8Z3UtdHJhPiA8Zy10cmE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQUJEPiA8Zy1hdmFncmFoPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEFCRT4gPGdtLWFhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEFCRj4gPGdtLWk+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQUMwPiA8Z20taWk+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQUMxPiA8Z20tdT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBQzI+IDxnbS11dT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBQzM+IDxnbS12b2NhbGljcj47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBQzQ+IDxnbS12b2NhbGljcnI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQUUyPiA8Z20tdm9jYWxpY2w+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQUUzPiA8Z20tdm9jYWxpY2xsPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEFDNT4gPGdtLWNhbmRyYWU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQUM3PiA8Z20tZT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBQzg+IDxnbS1haT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBQzk+IDxnbS1jYW5kcmFvPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEFDQj4gPGdtLW8+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQUNDPiA8Z20tYXU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQTgyPiA8Z3ZkLWFudXN3YXJhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEE4MT4gPGd2ZC1jaGFuZHJhYmluZHU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQTgzPiA8Z3ZkLXZpc2FyZz47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBQ0Q+IDxnLWhhbGFudD47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBQkM+IElHTk9SRTs8R05LVD47PE1JTj47SUdOT1JFCisKK29yZGVyX3N0YXJ0IDxURUxVR1U+O2ZvcndhcmQ7Zm9yd2FyZDtmb3J3YXJkO2ZvcndhcmQscG9zaXRpb24KKzxVMEM2Nj4gPDA+OyI8QkFTPjxOVU0+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTBDNzg+IDwwPjsiPEJBUz48TlVNPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwQzY3PiA8MT47IjxCQVM+PE5VTT4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMEM3OT4gPDE+OyI8QkFTPjxOVU0+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTBDN0M+IDwxPjsiPEJBUz48TlVNPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwQzY4PiA8Mj47IjxCQVM+PE5VTT4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMEM3QT4gPDI+OyI8QkFTPjxOVU0+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTBDN0Q+IDwyPjsiPEJBUz48TlVNPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwQzY5PiA8Mz47IjxCQVM+PE5VTT4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMEM3Qj4gPDM+OyI8QkFTPjxOVU0+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTBDN0U+IDwzPjsiPEJBUz48TlVNPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwQzZBPiA8ND47IjxCQVM+PE5VTT4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMEM2Qj4gPDU+OyI8QkFTPjxOVU0+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTBDNkM+IDw2PjsiPEJBUz48TlVNPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwQzZEPiA8Nz47IjxCQVM+PE5VTT4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMEM2RT4gPDg+OyI8QkFTPjxOVU0+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTBDNkY+IDw5PjsiPEJBUz48TlVNPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwQzdGPiA8dHVtbXU+IDs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEMwNT4gPHR2dy1hPiA7PEJBUz47PE1JTj47SUdOT1JFCis8VTBDMDY+IDx0dnctYWE+IDs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEMwNz4gPHR2dy1pPiA7PEJBUz47PE1JTj47SUdOT1JFCis8VTBDMDg+IDx0dnctaWk+IDs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEMwOT4gPHR2dy11PiA7PEJBUz47PE1JTj47SUdOT1JFCis8VTBDMEE+IDx0dnctdXU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzBCPiA8dHZ3LXZvY2FsaWNyPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEM2MD4gPHR2dy12b2NhbGljcnI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzBDPiA8dHZ3LXZvY2FsaWNsPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEM2MT4gPHR2dy12b2NhbGljbGw+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzBFPiA8dHZ3LXNob3J0ZT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDMEY+IDx0dnctZT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDMTA+IDx0dnctYWk+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzEyPiA8dHZ3LXNob3J0bz47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDMTM+IDx0dnctbz47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDMTQ+IDx0dnctYXU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzE1PiA8dC1rYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDMTY+IDx0LWtoYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDMTc+IDx0LWdhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEMxOD4gPHQtZ2hhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEMxOT4gPHQtbmdhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEMxQT4gPHQtY2E+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzU4PiA8dC10c2E+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzFCPiA8dC1jaGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzFDPiA8dC1qYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDNTk+IDx0LWR6YT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDMUQ+IDx0LWpoYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDMUU+IDx0LW55YT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDMUY+IDx0LXR0YT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDMjA+IDx0LXR0aGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzIxPiA8dC1kZGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzIyPiA8dC1kZGhhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEMyMz4gPHQtbm5hPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEMyND4gPHQtdGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzI1PiA8dC10aGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzI2PiA8dC1kYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDMjc+IDx0LWRoYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDMjg+IDx0LW5hPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEMyQT4gPHQtcGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzJCPiA8dC1waGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzJDPiA8dC1iYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDMkQ+IDx0LWJoYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDMkU+IDx0LW1hPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEMyRj4gPHQteWE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzMwPiA8dC1yYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDMzE+IDx0LXJyYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDMzI+IDx0LWxhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEMzMz4gPHQtbGxhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEMzNT4gPHQtdmE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzM2PiA8dC1zaGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzM3PiA8dC1zc2E+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzM4PiA8dC1zYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDMzk+IDx0LWhhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEMzRD4gPHQtYXZhZ3JhaD47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDM0U+IDx0bS1hYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDM0Y+IDx0bS1pPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEM0MD4gPHRtLWlpPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEM0MT4gPHRtLXU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzQyPiA8dG0tdXU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzQzPiA8dG0tdm9jYWxpY3I+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzQ0PiA8dG0tdm9jYWxpY3JyPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEM2Mj4gPHRtLXZvY2FsaWNsPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEM2Mz4gPHRtLXZvY2FsaWNsbD47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDNDY+ICA8dG0tc2hvcnRlPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEM0Nz4gPHRtLWU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzQ4PiA8dG0tYWk+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzRBPiA8dG0tc2hvcnRvPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEM0Qj4gPHRtLW8+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzRDPiA8dG0tYXU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzAxPiA8dHZkLWNoYW5kcmFiaW5kdT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDMDI+IDx0dmQtYW51c3dhcmE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzAzPiA8dHZkLXZpc2FyZz47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDNEQ+IDx0LWhhbGFudD47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDNTU+IDx0LWxlbmdodG1hcms+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzU2PiA8dC1haWxlbmdodG1hcms+OzxCQVM+OzxNSU4+O0lHTk9SRQorCitvcmRlcl9zdGFydCAgPEdVUlVNVUtIST47Zm9yd2FyZDtmb3J3YXJkO2ZvcndhcmQ7Zm9yd2FyZCxwb3NpdGlvbgorPFUwQTY2PiA8MD47IjxCQVM+PE5VTT4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMEE2Nz4gPDE+OyI8QkFTPjxOVU0+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTBBNjg+IDwyPjsiPEJBUz48TlVNPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwQTY5PiA8Mz47IjxCQVM+PE5VTT4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMEE2QT4gPDQ+OyI8QkFTPjxOVU0+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTBBNkI+IDw1PjsiPEJBUz48TlVNPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwQTZDPiA8Nj47IjxCQVM+PE5VTT4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMEE2RD4gPDc+OyI8QkFTPjxOVU0+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTBBNkU+IDw4PjsiPEJBUz48TlVNPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwQTZGPiA8OT47IjxCQVM+PE5VTT4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMjYyYz4gPGFkaS1zaGFrdGk+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQTc0PiA8b25rYXI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQTczPiA8dXJhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEEwOT4gPHBhdnctdT4gOzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQTBBPiA8cGF2dy11dT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBMTM+IDxwYXZ3LW8+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQTA1PiA8cGF2dy1hPiA7PEJBUz47PE1JTj47SUdOT1JFCis8VTBBMDY+IDxwYXZ3LWFhPiA7PEJBUz47PE1JTj47SUdOT1JFCis8VTBBMTA+IDxwYXZ3LWFpPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEExND4gPHBhdnctYXU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQTcyPiA8aXJpPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEEwNz4gPHBhdnctaT4gOzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQTA4PiA8cGF2dy1paT4gOzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQTBGPiA8cGF2dy1lPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEEzOD4gPHBhLXNhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEEzNj4gPHBhLXNhPjsiPEJBUz48UE5LVD4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMEEzOT4gICA8cGEtaGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQTUxPiA8cGEtdWRhdHRhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEExNT4gPHBhLWthPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEExNj4gPHBhLWtoYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBNTk+IDxwYS1raGE+OyI8QkFTPjxQTktUPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwQTE3PiA8cGEtZ2E+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQTVBPiA8cGEtZ2E+OyI8QkFTPjxQTktUPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwQTE4PiA8cGEtZ2hhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEExOT4gPHBhLW5nYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBMUE+IDxwYS1jYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBMUI+IDxwYS1jaGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQTFDPiA8cGEtamE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQTVCPiA8cGEtamE+OyI8QkFTPjxQTktUPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwQTFEPiA8cGEtamhhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEExRT4gPHBhLW55YT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBMUY+IDxwYS10dGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQTIwPiA8cGEtdHRoYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBMjE+IDxwYS1kZGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQTIyPiA8cGEtZGRoYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBMjM+IDxwYS1ubmE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQTI0PiA8cGEtdGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQTI1PiA8cGEtdGhhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEEyNj4gPHBhLWRhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEEyNz4gPHBhLWRoYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBMjg+IDxwYS1uYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBMkE+IDxwYS1wYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBMkI+IDxwYS1waGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQTVFPiA8cGEtcGhhPjsiPEJBUz48UE5LVD4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMEEyQz4gPHBhLWJhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEEyRD4gPHBhLWJoYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBMkU+IDxwYS1tYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBMkY+IDxwYS15YT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBNzU+IDxzaWduLXlha2FzaD47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBMzA+IDxwYS1yYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBMzI+IDxwYS1sYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBMzM+IDxwYS1sYT47IjxCQVM+PFBOS1Q+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTBBMzU+IDxwYS12YT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBNUM+IDxwYS1ycmE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQTNFPiA8cGFtLWFhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEEzRj4gPHBhbS1pPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEE0MD4gPHBhbS1paT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBNDE+IDxwYW0tdT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBNDI+IDxwYW0tdXU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQTQ3PiA8cGFtLWU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQTQ4PiA8cGFtLWFpPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEE0Qj4gPHBhbS1vPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEE0Qz4gPHBhbS1hdT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBMDE+IDxwYXZkLWFkYWtiaW5kaT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBMDI+IDxwYXZkLWJpbmRpPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEEwMz4gPHBhdmQtdmlzYXJnPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEE3MD4gPHRpcHBpPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEE0RD4gPHBhLWhhbGFudD47PEJBUz47PE1JTj47SUdOT1JFCis8VTBBM0M+IElHTk9SRTs8UE5LVD47PE1JTj47SUdOT1JFCis8VTBBNzE+IElHTk9SRTs8YWRhaz47PE1JTj47SUdOT1JFCisKK29yZGVyX3N0YXJ0ICA8S0FOTkFEQT47Zm9yd2FyZDtmb3J3YXJkO2ZvcndhcmQ7Zm9yd2FyZCxwb3NpdGlvbgorPFUwQ0U2PiA8MD47IjxCQVM+PE5VTT4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMENFNz4gPDE+OyI8QkFTPjxOVU0+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTBDRTg+IDwyPjsiPEJBUz48TlVNPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwQ0U5PiA8Mz47IjxCQVM+PE5VTT4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMENFQT4gPDQ+OyI8QkFTPjxOVU0+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTBDRUI+IDw1PjsiPEJBUz48TlVNPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwQ0VDPiA8Nj47IjxCQVM+PE5VTT4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMENFRD4gPDc+OyI8QkFTPjxOVU0+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTBDRUU+IDw4PjsiPEJBUz48TlVNPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUwQ0VGPiA8OT47IjxCQVM+PE5VTT4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMENGMT4gPHNpZ24tamlodmFtdWxpeWE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQ0YyPiA8c2lnbi11cGFkaG1hbml5YT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDODU+IDxrdnctYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDODY+IDxrdnctYWE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzg3PiA8a3Z3LWk+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzg4PiA8a3Z3LWlpPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEM4OT4gPGt2dy11Pjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEM4QT4gPGt2dy11dT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDOEI+IDxrdnctdm9jYWxpY3I+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQ0UwPiA8a3Z3LXZvY2FsaWNycj47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDOEM+IDxrdnctdm9jYWxpY2w+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQ0UxPiA8a3Z3LXZvY2FsaWNsbD47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDOEU+IDxrdnctc2hvcnRlPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEM4Rj4gPGt2dy1lPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEM5MD4gPGt2dy1haT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDOTI+IDxrdnctc2hvcnRvPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEM5Mz4gPGt2dy1vPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEM5ND4gPGt2dy1hdT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDOTU+IDxrLWthPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEM5Nj4gPGsta2hhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEM5Nz4gPGstZ2E+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzk4PiA8ay1naGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzk5PiA8ay1uZ2E+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzlBPiA8ay1jYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDOUI+IDxrLWNoYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDOUM+IDxrLWphPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEM5RD4gPGstamhhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEM5RT4gPGstbnlhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEM5Rj4gPGstdHRhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMENBMD4gPGstdHRoYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDQTE+IDxrLWRkYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDQTI+IDxrLWRkaGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQ0EzPiA8ay1ubmE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQ0E0PiA8ay10YT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDQTU+IDxrLXRoYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDQTY+IDxrLWRhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMENBNz4gPGstZGhhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMENBOD4gPGstbmE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQ0FBPiA8ay1wYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDQUI+IDxrLXBoYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDQUM+IDxrLWJhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMENBRD4gPGstYmhhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMENBRT4gPGstbWE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQ0FGPiA8ay15YT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDQjA+IDxrLXJhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMENCMT4gPGstcnJhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMENCMj4gPGstbGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQ0I1PiA8ay12YT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDQjY+IDxrLXNoYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDQjc+IDxrLXNzYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDQjg+IDxrLXNhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMENCOT4gPGstaGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQ0IzPiA8ay1sbGE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQ0RFPiA8ay1mYT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDQkQ+IDxrLWF2YWdyYWg+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQ0JFPiA8a20tYWE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQ0JGPiA8a20taT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDQzA+IDxrbS1paT47PEJBUz47PE1JTj47SUdOT1JFCis8a24tc2lnbl9paT4gPGttLWlpPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMENDMT4gPGttLXU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQ0MyPiA8a20tdXU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQ0MzPiA8a20tdm9jYWxpY3I+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQ0M0PiA8a20tdm9jYWxpY3JyPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMENFMj4gPGttLXZvY2FsaWNsPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMENFMz4gPGttLXZvY2FsaWNsbD47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDQzY+IDxrbS1zaG9ydGU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQ0M3PiA8a20tZT47PEJBUz47PE1JTj47SUdOT1JFCis8a24tc2lnbl9lPiA8a20tZT47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDQzg+IDxrbS1haT47PEJBUz47PE1JTj47SUdOT1JFCis8a24tc2lnbl9haT4gPGttLWFpPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMENDQT4gPGttLXNob3J0bz47PEJBUz47PE1JTj47SUdOT1JFCis8a24tc2lnbl9zaG9ydG8+IDxrbS1zaG9ydG8+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQ0NCPiA8a20tbz47PEJBUz47PE1JTj47SUdOT1JFCis8a24tc2lnbl9vPiA8a20tbz47PEJBUz47PE1JTj47SUdOT1JFCis8a24tc2lnbjFfbz4gPGttLW8+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQ0NDPiA8a20tYXU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQzgyPiA8a3ZkLWFudXN3YXJhPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMEM4Mz4gPGt2ZC12aXNhcmc+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQ0NEPiA8ay1oYWxhbnQ+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwQ0Q1PiA8ay1sZW5naHRfbWFyaz47PEJBUz47PE1JTj47SUdOT1JFCis8VTBDRDY+IDxrLWFpX2xlbmdodF9tYXJrPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMENCQz4gSUdOT1JFOzxLTktUPjs8TUlOPjtJR05PUkUKKworb3JkZXJfc3RhcnQgPFNJTkhBTEE+O2ZvcndhcmQ7Zm9yd2FyZDtmb3J3YXJkO2ZvcndhcmQscG9zaXRpb24KKyMgU0NDSUkgUGFydCAxIDogQ29sbGF0aW9uIFNlcXVlbmNlIChTTFMxMTM0KQorPFUwREY0PiA8VTBERjQ+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDg1PiA8VTBEODU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDg2PiA8VTBEODY+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDg3PiA8VTBEODc+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDg4PiA8VTBEODg+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDg5PiA8VTBEODk+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDhBPiA8VTBEOEE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDhCPiA8VTBEOEI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDhDPiA8VTBEOEM+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDhEPiA8VTBEOEQ+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDhFPiA8VTBEOEU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDhGPiA8VTBEOEY+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDkwPiA8VTBEOTA+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDkxPiA8VTBEOTE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDkyPiA8VTBEOTI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDkzPiA8VTBEOTM+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDk0PiA8VTBEOTQ+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDk1PiA8VTBEOTU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDk2PiA8VTBEOTY+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDgyPiA8VTBEODI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDgzPiA8VTBEODM+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDlBPiA8VTBEOUE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDlCPiA8VTBEOUI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDlDPiA8VTBEOUM+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDlEPiA8VTBEOUQ+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDlFPiA8VTBEOUU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRDlGPiA8VTBEOUY+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREEwPiA8VTBEQTA+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREExPiA8VTBEQTE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREEyPiA8VTBEQTI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREEzPiA8VTBEQTM+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREE1PiA8VTBEQTU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREE0PiA8VTBEQTQ+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREE2PiA8VTBEQTY+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREE3PiA8VTBEQTc+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREE4PiA8VTBEQTg+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREE5PiA8VTBEQTk+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREFBPiA8VTBEQUE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREFCPiA8VTBEQUI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREFDPiA8VTBEQUM+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREFEPiA8VTBEQUQ+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREFFPiA8VTBEQUU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREFGPiA8VTBEQUY+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREIwPiA8VTBEQjA+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREIxPiA8VTBEQjE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREIzPiA8VTBEQjM+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREI0PiA8VTBEQjQ+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREI1PiA8VTBEQjU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREI2PiA8VTBEQjY+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREI3PiA8VTBEQjc+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREI4PiA8VTBEQjg+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREI5PiA8VTBEQjk+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREJBPiA8VTBEQkE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREJCPiA8VTBEQkI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREJEPiA8VTBEQkQ+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREMwPiA8VTBEQzA+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREMxPiA8VTBEQzE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREMyPiA8VTBEQzI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREMzPiA8VTBEQzM+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREM0PiA8VTBEQzQ+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREM1PiA8VTBEQzU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREM2PiA8VTBEQzY+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRENGPiA8VTBEQ0Y+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREQwPiA8VTBERDA+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREQxPiA8VTBERDE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREQyPiA8VTBERDI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREQzPiA8VTBERDM+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREQ0PiA8VTBERDQ+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREQ2PiA8VTBERDY+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREQ4PiA8VTBERDg+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREYyPiA8VTBERjI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRERGPiA8VTBEREY+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREYzPiA8VTBERjM+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREQ5PiA8VTBERDk+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRERBPiA8VTBEREE+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRERCPiA8VTBEREI+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRERDPiA8VTBEREM+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwREREPiA8VTBEREQ+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRERFPiA8VTBEREU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwRENBPiA8VTBEQ0E+OzxCQVM+OzxNSU4+O0lHTk9SRQorCitvcmRlcl9lbmQKKworRU5EIExDX0NPTExBVEUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2lzbzE0NjUxX3QxX3BpbnlpbiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2lzbzE0NjUxX3QxX3BpbnlpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODJjN2NhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvaXNvMTQ2NTFfdDFfcGlueWluCkBAIC0wLDAgKzEsMjU1MDcgQEAKK0xDX0NPTExBVEUKKworY29weSAiaXNvMTQ2NTFfdDFfY29tbW9uIgorCitzY3JpcHQgPEhBTj4KKworb3JkZXJfc3RhcnQgPEhBTj47Zm9yd2FyZDtmb3J3YXJkO2ZvcndhcmQ7Zm9yd2FyZCxwb3NpdGlvbgorPFU1NDE2PiA8VTU0MTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkJYxMDQKKzxVODE0Qz4gPFU4MTRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IWMMTg1Cis8VTkzMTI+IDxVOTMxMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mMkjAKKzxVOTUxNT4gPFU5NTE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZSVNworPFU5NjNGPiA8VTk2M0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmL8yMzIzNworPFU1NUM0PiA8VTU1QzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPll4Q2MAorPFU1NTRBPiA8VTU1NEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllYoxNjU2NgorPFU1NEMwPiA8VTU0QzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlk4A0MDcwCis8VTU0Q0U+IDxVNTRDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WTjjI0NzMKKzxVNTUwOT4gPFU1NTA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZSJMTgxMQorPFU1N0MzPiA8VTU3QzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPln4M1MTkyCis8VTVBMkQ+IDxVNUEyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WorTAKKzxVNjMyOD4gPFU2MzI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oyoMjU5OQorPFU2MzcxPiA8VTYzNzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjbExODcKKzxVNkIzOD4gPFU2QjM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qy4NQorPFU4QkY2PiA8VThCRjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor7Y1MgorPFU5MkIwPiA8VTkyQjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpirAwCis8VTkzODQ+IDxVOTM4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mOhDAKKzxVOTUzRj4gPFU5NTNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZS/MjAxCis8VTNDNkY+IDxVM0M2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OxrzAKKzxVNDgzOT4gPFU0ODM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KC5MAorPFU0REEzPiA8VTREQTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktqMwCis8VTUxRDI+IDxVNTFEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WHkjAKKzxVNTM5Mz4gPFU1MzkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y6TMAorPFU1NTQwPiA8VTU1NDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllYAwCis8VTU2MEE+IDxVNTYwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WYijAKKzxVNUEzRT4gPFU1QTNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ai+MAorPFU1RDY2PiA8VTVENjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltaYwCis8VTY1NzE+IDxVNjU3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aVsTAKKzxVNjU3Mz4gPFU2NTczPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pWzMAorPFU3NjRDPiA8VTc2NEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmYw1NzYKKzxVNzY5MT4gPFU3NjkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55qRMTUwCis8VTc2OUE+IDxVNzY5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eamjAKKzxVOUEwMz4gPFU5QTAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aiDMgorPFUzNDc4PiA8VTM0Nzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkbgwCis8VTM1RTg+IDxVMzVFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OXqDAKKzxVMzg4QT4gPFUzODhBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46KKMAorPFU0NDQyPiA8VTQ0NDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkYIwCis8VTRBMjA+IDxVNEEyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SooDAKKzxVNEY0MT4gPFU0RjQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L2BMAorPFU1NUYzPiA8VTU1RjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPll7MyMjIKKzxVNTY2Rj4gPFU1NjZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZmvNQorPFU2NjM5PiA8VTY2Mzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmLkwCis8VTZCRDA+IDxVNkJEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+avkDEyMgorPFU3N0VFPiA8VTc3RUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnn64xNjg0Cis8VTg1M0M+IDxVODUzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iUvDQyOQorPFU4NUY5PiA8VTg1Rjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPol7kyCis8VThFQjc+IDxVOEVCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6tzAKKzxVOTcyRD4gPFU5NzJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZytMjI4Cis8VTk3NDQ+IDxVOTc0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mdhDMKKzxVOTlBND4gPFU5OUE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aakMAorPFUzNTRDPiA8VTM1NEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlYwwCis8VTM1RDI+IDxVMzVEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OXkjAKKzxVMzYzNz4gPFUzNjM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45i3MAorPFUzNzc2PiA8VTM3NzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnbYwCis8VTM5MDU+IDxVMzkwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OkhTAKKzxVM0ZDND4gPFUzRkM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47+EMAorPFU0MDMzPiA8VTQwMzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgLMwCis8VTQxNkM+IDxVNDE2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SFrDAKKzxVNDUzRD4gPFU0NTNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JS9MAorPFU0NzdEPiA8VTQ3N0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknb0wCis8VTRCMzU+IDxVNEIzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SstTAKKzxVNEYwQz4gPFU0RjBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LyMMAorPFU1MEZFPiA8VTUwRkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlg74wCis8VTUzQzY+IDxVNTNDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPhjIKKzxVNTQ1RD4gPFU1NDVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZGdMAorPFU1NUNDPiA8VTU1Q0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPll4wwCis8VTU4Mjg+IDxVNTgyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WgqDAKKzxVNTg2Nz4gPFU1ODY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aGnMAorPFU1QUQyPiA8VTVBRDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlq5IxMQorPFU1QjIxPiA8VTVCMjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrKEwCis8VTYxMUI+IDxVNjExQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aEmzQ0NworPFU2MUQzPiA8VTYxRDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmh5MwCis8VTYxREQ+IDxVNjFERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aHnTAKKzxVNjZBNz4gPFU2NkE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pqnNTA3Cis8VTY2RDY+IDxVNjZENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+abljkKKzxVNkZFRD4gPFU2RkVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r+tMAorPFU3MjMxPiA8VTcyMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniLE2MDc1MQorPFU3NDc3PiA8VTc0Nzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkbczCis8VTc0QTY+IDxVNzRBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eSpjAKKzxVNzZBNz4gPFU3NkE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55qnMAorPFU3N0I5PiA8VTc3Qjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnrkxCis8VTc4Mzk+IDxVNzgzOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eguTAKKzxVNzg0Qj4gPFU3ODRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56GLMAorPFU3ODhEPiA8VTc4OEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoo0yNDM4Cis8VTc5MTk+IDxVNzkxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ekmTE5Cis8VTgyN0U+IDxVODI3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iJvjQyOTAKKzxVODU4Nj4gPFU4NTg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JaGMAorPFU4QjZBPiA8VThCNkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoraoxCis8VThDRjk+IDxVOENGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+izuTAKKzxVOTQ0MD4gPFU5NDQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZGAMAorPFU5Njk4PiA8VTk2OTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmpgyNDIKKzxVOTc0OT4gPFU5NzQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z2JMAorPFU5QzZCPiA8VTlDNkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsasxCis8VTlEMzE+IDxVOUQzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m0sTAKKzxVNEY5Mj4gPFU0RjkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L6SMAorPFU1Mzg4PiA8VTUzODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljogwCis8VTVBOTU+IDxVNUE5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WqlTAKKzxVNUI4OT4gPFU1Qjg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a6JNTczODUKKzxVNUNENj4gPFU1Q0Q2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bOWMAorPFU1RTgzPiA8VTVFODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluoMwCis8VTVFQjU+IDxVNUVCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W6tTQzNgorPFU2ODQ5PiA8VTY4NDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoYkxNQorPFU2QzI4PiA8VTZDMjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsKgxNDEKKzxVNzVGNz4gPFU3NUY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55e3MAorPFU3NkU2PiA8VTc2RTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnm6YwCis8VTc2RUI+IDxVNzZFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ebqzMKKzxVODE2ND4gPFU4MTY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IWkMAorPFU4NDNCPiA8VTg0M0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokLswCis8VTg0NEE+IDxVODQ0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iRijAKKzxVODRFRD4gPFU4NEVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JOtMAorPFU4QTlEPiA8VThBOUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqp0wCis8VThBRjM+IDxVOEFGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+irszEKKzxVOEMxOT4gPFU4QzE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LCZMTY5Cis8VTk2MjU+IDxVOTYyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mYpTAKKzxVOTc4Qz4gPFU5NzhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z6MMAorPFU5NzhEPiA8VTk3OEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpno0zNjQKKzxVOTdGRD4gPFU5N0ZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z+9MAorPFU5RDZBPiA8VTlENkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptaowCis8VTlEOTU+IDxVOUQ5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m2lTAKKzxVOUU0Qz4gPFU5RTRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bmMNDkKKzxVNDcxOT4gPFU0NzE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JyZMAorPFU1NTdEPiA8VTU1N0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllb0wCis8VTczQjU+IDxVNzNCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eOtTAKKzxVOTZGOD4gPFU5NkY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Zu4MAorPFUzNzFEPiA8VTM3MUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnJ0wCis8VTNGNjI+IDxVM0Y2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O9ojAKKzxVNDE1Nj4gPFU0MTU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IWWMAorPFU0RkZBPiA8VTRGRkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkv7oxNzUyCis8VTU1MzU+IDxVNTUzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUtTkKKzxVNTdCNT4gPFU1N0I1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z61MAorPFU1N0VGPiA8VTU3RUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPln68wCis8VTU4Mzc+IDxVNTgzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WgtzAKKzxVNjNERT4gPFU2M0RFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+eMgorPFU2NjdCPiA8VTY2N0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmbswCis8VTdGNkY+IDxVN0Y2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9rzAKKzxVOTJBOD4gPFU5MkE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YqoMAorPFU5NEY1PiA8VTk0RjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpk7UyCis8VTk2OEM+IDxVOTY4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+majDAKKzxVMzdDMT4gPFUzN0MxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45+BMAorPFUzQzU4PiA8VTNDNTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsZgwCis8VTNFMjk+IDxVM0UyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O4qTAKKzxVNDE0MT4gPFU0MTQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IWBMAorPFU0MzhGPiA8VTQzOEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjo8wCis8VTQzQTg+IDxVNDNBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SOqDAKKzxVNEIxMz4gPFU0QjEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KyTMAorPFU0Qjk3PiA8VTRCOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrpcwCis8VTRCRTU+IDxVNEJFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SvpTAKKzxVNTExMT4gPFU1MTExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YSRMAorPFU1MzBFPiA8VTUzMEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljI4wCis8VTUzM0M+IDxVNTMzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WMvDAKKzxVNTgxMz4gPFU1ODEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aCTMAorPFU1QTY5PiA8VTVBNjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqakwCis8VTVDQjg+IDxVNUNCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WyuDk2NTcKKzxVNjMwOT4gPFU2MzA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oyJMTQwNTgKKzxVNjY5Nz4gPFU2Njk3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pqXMTUyODUKKzxVNjg0OD4gPFU2ODQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qGIMjM1MDYKKzxVNkQxRD4gPFU2RDFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rSdMAorPFU3MkI0PiA8VTcyQjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnirQxMAorPFU4MEZBPiA8VTgwRkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPog7oxMTMKKzxVODM0Qz4gPFU4MzRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I2MMAorPFU4M0Y0PiA8VTgzRjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoj7QyCis8VThDN0I+IDxVOEM3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ixuzAKKzxVOEM4Qj4gPFU4QzhCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LKLMAorPFU5MzBDPiA8VTkzMEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjIwwCis8VTk1Qzc+IDxVOTVDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mXhzEKKzxVOUI5Rj4gPFU5QjlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a6fMQorPFU5RUVDPiA8VTlFRUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpu6wwCis8VTlFRUY+IDxVOUVFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7rzEzMzQKKzxVODBBRT4gPFU4MEFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IKuNzM2Cis8VTlBQUY+IDxVOUFBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mqrzEwCis8VTNCN0Y+IDxVM0I3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OtvzAKKzxVNDAxQT4gPFU0MDFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ICaMAorPFU0NEEyPiA8VTQ0QTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkqIwCis8VTRBNTU+IDxVNEE1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SplTAKKzxVNEI3OT4gPFU0Qjc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K25MAorPFU0QjdBPiA8VTRCN0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrbowCis8VTUzNkM+IDxVNTM2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WNrDAKKzxVNUM4Nz4gPFU1Qzg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bKHMAorPFU2NjAyPiA8VTY2MDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmIIxNzY5Cis8VTY2M0I+IDxVNjYzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aYuzAKKzxVNDM2OT4gPFU0MzY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I2pMAorPFU4RUVFPiA8VThFRUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPou64wCis8VTM5Qjk+IDxVMzlCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OmuTAKKzxVM0YxQz4gPFUzRjFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47ycMAorPFU2NzhBPiA8VTY3OEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnoowCis8VTc2Q0U+IDxVNzZDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ebjjE4MworPFU5MUEwPiA8VTkxQTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphqAwCis8VTUxRjk+IDxVNTFGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WHuTUzNworPFU1NzczPiA8VTU3NzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnbM3NgorPFU1Nzg3PiA8VTU3ODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnocwCis8VTY3RUE+IDxVNjdFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+afqjAKKzxVNjg4RT4gPFU2ODhFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qKOMAorPFU3MUFDPiA8VTcxQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhqwxNDczCis8VThFRUE+IDxVOEVFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i7qjAKKzxVMzdGQz4gPFUzN0ZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45+8MAorPFUzODAyPiA8VTM4MDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoIIwCis8VTNGRjA+IDxVM0ZGMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O/sDAKKzxVNDQzRj4gPFU0NDNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JC/MAorPFU0NkFCPiA8VTQ2QUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmqswCis8VTQ5NUQ+IDxVNDk1RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SlnTAKKzxVNDk4Qj4gPFU0OThCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KaLMAorPFU0RDQ1PiA8VTRENDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktYUwCis8VTUzQUI+IDxVNTNBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WOqzAKKzxVNTVGNz4gPFU1NUY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ze3MTk3Cis8VTU1Rjg+IDxVNTVGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WXuDAKKzxVNTZDMj4gPFU1NkMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZuCMTMKKzxVNUQ4NT4gPFU1RDg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5baFMAorPFU1RUQyPiA8VTVFRDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlu5IzCis8VTY0NkU+IDxVNjQ2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aRrjEKKzxVNjU1Nj4gPFU2NTU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pWWNDU2Cis8VTZFRjY+IDxVNkVGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a7tjAKKzxVNzIwQT4gPFU3MjBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54iKMAorPFU3MzUyPiA8VTczNTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjZIxOQorPFU3MzUzPiA8VTczNTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjZMwCis8VTc0ODg+IDxVNzQ4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eSiDAKKzxVNzhERD4gPFU3OEREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56OdMQorPFU3QzIyPiA8VTdDMjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsKIwCis8VTdGRjE+IDxVN0ZGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e/sTk2Cis8VTdGRjY+IDxVN0ZGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e/tjAKKzxVN0ZGQT4gPFU3RkZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57+6MAorPFU4MDcxPiA8VTgwNzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogbExMQorPFU4NTFDPiA8VTg1MUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolJwwCis8VTg3QUY+IDxVODdBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ierzQ2Cis8VThCMzc+IDxVOEIzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+istzAKKzxVOEIzOD4gPFU4QjM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ky4MAorPFU5MDY4PiA8VTkwNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgag5NQorPFU5M0Q2PiA8VTkzRDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpj5YyOQorPFU5NjlFPiA8VTk2OUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmp4wCis8VTlBOUM+IDxVOUE5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mqnDY5Cis8VTlDMzI+IDxVOUMzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mwsjAKKzxVOUNDQz4gPFU5Q0NDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bOMMTIwNworPFU5REQ0PiA8VTlERDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpt5QwCis8VTlGMDc+IDxVOUYwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m8hzAKKzxVMzQ0Mz4gPFUzNDQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45GDMAorPFUzOTA3PiA8VTM5MDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpIcwCis8VTQ3OUQ+IDxVNDc5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SenTAKKzxVNEJFMD4gPFU0QkUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K+gMAorPFU0RDA4PiA8VTREMDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktIgwCis8VTVBQUE+IDxVNUFBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+Wqqjc4Cis8VTVBQkM+IDxVNUFCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WqvDAKKzxVNjI5RD4gPFU2MjlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oqdMAorPFU4MkJBPiA8VTgyQkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoirowCis8VTg4ODQ+IDxVODg4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iihDU1MAorPFU4OTU2PiA8VTg5NTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopZYyCis8VTk1N0E+IDxVOTU3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mVujAKKzxVOUQwMT4gPFU5RDAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bSBMAorPFUzNTZEPiA8VTM1NkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjla0wCis8VTM2MkM+IDxVMzYyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OYrDAKKzxVMzYyRD4gPFUzNjJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45itMAorPFUzNzFDPiA8VTM3MUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnJwwCis8VTM3Mjk+IDxVMzcyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OcqTAKKzxVMzgxNz4gPFUzODE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46CXMAorPFUzOTdGPiA8VTM5N0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpb8wCis8VTQwNzE+IDxVNDA3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SBsTAKKzxVNDcxMj4gPFU0NzEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JySMAorPFU0QUU4PiA8VTRBRTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkq6gwCis8VTRCQUY+IDxVNEJBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SurzAKKzxVNTBCMj4gPFU1MEIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YKyMzYyOQorPFU1OEJBPiA8VTU4QkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlorowCis8VTU5NjE+IDxVNTk2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WloTAKKzxVNTk2NT4gPFU1OTY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aWlODM1NworPFU1OTY3PiA8VTU5Njc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpacxOQorPFU1QUVGPiA8VTVBRUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlq68wCis8VTVDOTk+IDxVNUM5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WymTcKKzxVNURCND4gPFU1REI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ba0MAorPFU2MTYwPiA8VTYxNjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhaAwCis8VTYxQ0E+IDxVNjFDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aHijQ2NQorPFU2Mjc3PiA8VTYyNzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmibcwCis8VTY0RDk+IDxVNjREOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aTmTAKKzxVNkY5QT4gPFU2RjlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r6aMAorPFU2RkIzPiA8VTZGQjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvrMzMjU5Cis8VThBNEY+IDxVOEE0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ipjzAKKzxVOTNDQT4gPFU5M0NBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+KNgorPFU5QTQxPiA8VTlBNDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqYEwCis8VTRFQzg+IDxVNEVDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S7iDAKKzxVNTE2Qj4gPFU1MTZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YWrMjQ5NzkKKzxVNTNFRD4gPFU1M0VEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y+tMTAyMgorPFU1NDI3PiA8VTU0Mjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkKcyODEyMgorPFU1NEY1PiA8VTU0RjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlk7UwCis8VTU5M0Y+IDxVNTkzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WkvzAKKzxVNUM5Qz4gPFU1QzlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bKcMTIzCis8VTVERjQ+IDxVNURGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W3tDI0MDYzCis8VTYyNTI+IDxVNjI1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aJkjY3MgorPFU2MzRDPiA8VTYzNEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjYw3Cis8VTY3MzM+IDxVNjczMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+acszAKKzxVNzM5MD4gPFU3MzkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj546QMAorPFU3NUE0PiA8VTc1QTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlqQ2MDQKKzxVN0IwNj4gPFU3QjA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56yGMTc0Cis8VTdDOTE+IDxVN0M5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eykTUwCis8VTdEMjY+IDxVN0QyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e0pjAKKzxVN0Y5Mz4gPFU3RjkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj576TMAorPFU4MkFEPiA8VTgyQUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiq01OTcKKzxVOEM1RD4gPFU4QzVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LGdMAorPFU5MURGPiA8VTkxREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPph58wCis8VTlCNUU+IDxVOUI1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mtnjAKKzxVOUM4Mz4gPFU5QzgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bKDMAorPFUzNTFDPiA8VTM1MUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlJwwCis8VTM5Q0E+IDxVMzlDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OnijAKKzxVNDdFNj4gPFU0N0U2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J+mMAorPFU0Q0MxPiA8VTRDQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPks4EwCis8VTRDQ0E+IDxVNENDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SzijAKKzxVNTNEMD4gPFU1M0QwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y+QMAorPFU1NzdBPiA8VTU3N0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnbowCis8VTU4QTI+IDxVNThBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WiojAKKzxVNTlBRD4gPFU1OUFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aatMAorPFU2MjlDPiA8VTYyOUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmipwwCis8VTYyRDQ+IDxVNjJEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aLlDMyMDUKKzxVNzBBNj4gPFU3MEE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54KmMAorPFU3MkFFPiA8VTcyQUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniq4wCis8VTc5RTE+IDxVNzlFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+enoTAKKzxVN0IyOT4gPFU3QjI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56ypMAorPFU4MEM4PiA8VTgwQzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPog4gwCis8VTgzMDc+IDxVODMwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iMhzAKKzxVODMzNz4gPFU4MzM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Iy3MAorPFU4M0REPiA8VTgzREQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoj50xCis8VThBNTk+IDxVOEE1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ipmTAKKzxVOERDQj4gPFU4RENCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LeLNDkxCis8VThFRjc+IDxVOEVGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i7tzAKKzxVOTIzOD4gPFU5MjM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Yi4MAorPFU5NEI5PiA8VTk0Qjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkrkyNworPFU5OEIwPiA8VTk4QjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPporAwCis8VTk5OUI+IDxVOTk5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mmmzAKKzxVOUI0Mz4gPFU5QjQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a2DMTIKKzxVOUYyNT4gPFU5RjI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bylMAorPFUzNzhFPiA8VTM3OEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjno4wCis8VTYyOEE+IDxVNjI4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aKijgyOTA2Cis8VTZCMUI+IDxVNkIxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+asmzAKKzxVOTIwMD4gPFU5MjAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YiAMgorPFU5NEFGPiA8VTk0QUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkq84Cis8VTk3NzY+IDxVOTc3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mdtjI4NworPFUzNUEwPiA8VTM1QTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlqAwCis8VTNEOUE+IDxVM0Q5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O2mjAKKzxVNDBGQj4gPFU0MEZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IO7MAorPFU0MTg5PiA8VTQxODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhokwCis8VTQxRDE+IDxVNDFEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SHkTAKKzxVNDNBQz4gPFU0M0FDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I6sMAorPFU0M0IxPiA8VTQzQjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjrEwCis8VTQ5NkY+IDxVNDk2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SlrzAKKzxVNEE1Nz4gPFU0QTU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KmXMAorPFU0QTdCPiA8VTRBN0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqbswCis8VTRDM0U+IDxVNEMzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SwvjAKKzxVNEM1RD4gPFU0QzVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LGdMAorPFU1NzVEPiA8VTU3NUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnZ0xMDc4Cis8VTU3QkI+IDxVNTdCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WeuzAKKzxVNThFOT4gPFU1OEU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aOpMAorPFU1RjFEPiA8VTVGMUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvJ0wCis8VTcwNUU+IDxVNzA1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eBnjIzCis8VTcyMzg+IDxVNzIzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eIuDkzODUKKzxVNzMwOD4gPFU3MzA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54yIMAorPFU3RjYyPiA8VTdGNjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvaI4ODY2Cis8VTdGNzc+IDxVN0Y3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9tzMyCis8VTgwMTk+IDxVODAxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iAmTExNQorPFU4OTg3PiA8VTg5ODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopocwCis8VTk3Mzg+IDxVOTczOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mcuDI0MjEKKzxVOUI4MT4gPFU5QjgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a6BMAorPFU5QjhBPiA8VTlCOEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPproowCis8VTlDODU+IDxVOUM4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+myhTIKKzxVOUM4Qz4gPFU5QzhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bKMMAorPFU2Nzc3PiA8VTY3Nzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnbc1MworPFU2M0IwPiA8VTYzQjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjrAzMDcKKzxVM0YxRj4gPFUzRjFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47yfMAorPFUzRkRGPiA8VTNGREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjv58wCis8VTRDQzY+IDxVNENDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SzhjAKKzxVNzY3RD4gPFU3NjdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55m9NTQ1NjcKKzxVMzVENz4gPFUzNUQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45eXMAorPFUzRjIzPiA8VTNGMjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvKMwCis8VTQ2NTM+IDxVNDY1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SZkzAKKzxVNEY3MD4gPFU0RjcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L2wNDQKKzxVNTE2MT4gPFU1MTYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YWhMAorPFU2MzZEPiA8VTYzNkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmja0xOQorPFU2NDQ2PiA8VTY0NDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkYY4OTg3Cis8VTY0RkE+IDxVNjRGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aTujgxCis8VTY4MjI+IDxVNjgyMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+agojAKKzxVNzY3RT4gPFU3NjdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55m+MjQyNTkKKzxVNzdGMj4gPFU3N0YyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+yMAorPFU3Q0E4PiA8VTdDQTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsqgwCis8VTdENTQ+IDxVN0Q1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e1lDAKKzxVODk2Qz4gPFU4OTZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KWsMTAKKzxVMzVEMT4gPFUzNUQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45eRMAorPFUzODE0PiA8VTM4MTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoJQwCis8VTQ0OTQ+IDxVNDQ5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SSlDAKKzxVNDg5OT4gPFU0ODk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KKZMAorPFU0RDNEPiA8VTREM0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktL0wCis8VTU0NTc+IDxVNTQ1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRlzM4OQorPFU1NTA0PiA8VTU1MDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllIQxCis8VTVFOEQ+IDxVNUU4RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W6jTAKKzxVNjJEQz4gPFU2MkRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oucNzUyMgorPFU2MkREPiA8VTYyREQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmi50wCis8VTY1NTc+IDxVNjU1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aVlzQ3Cis8VTdBMTc+IDxVN0ExNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eolzg5Cis8VTdDQkE+IDxVN0NCQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eyujAKKzxVODVBRD4gPFU4NUFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JatMAorPFU4NkZEPiA8VTg2RkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPom70yCis8VThEMDE+IDxVOEQwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i0gTAKKzxVOEQyNT4gPFU4RDI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LSlODU2MgorPFU5NzgxPiA8VTk3ODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnoEwCis8VTYyNzM+IDxVNjI3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aJszUxNAorPFU2NDJDPiA8VTY0MkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkKw0MzM2Cis8VTY1M0Q+IDxVNjUzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aUvTAKKzxVNjU5MT4gPFU2NTkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5paRMjI0OQorPFU2NTkyPiA8VTY1OTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlpIwCis8VTY3MEM+IDxVNjcwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+acjDAKKzxVNzNFRD4gPFU3M0VEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54+tMTYzOTMKKzxVNzYyMj4gPFU3NjIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55iiMzEKKzxVNzY0RD4gPFU3NjREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55mNNworPFU4MEE2PiA8VTgwQTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogqYwCis8VTgyMkM+IDxVODIyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iIrDE5NDcyCis8VTg2Njg+IDxVODY2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iZqDAKKzxVODc4Qz4gPFU4NzhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J6MMAorPFU4OTI5PiA8VTg5Mjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopKkwCis8VThGQUM+IDxVOEZBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i+rDAKKzxVOTgxMj4gPFU5ODEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aCSOAorPFU5ODgxPiA8VTk4ODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpooE2MDAKKzxVM0E2Rj4gPFUzQTZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46mvMAorPFUzRTFFPiA8VTNFMUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuJ4wCis8VTNFOUM+IDxVM0U5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O6nDAKKzxVNDI3RD4gPFU0MjdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Im9MAorPFU0QjMzPiA8VTRCMzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrLMwCis8VTU3NDI+IDxVNTc0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WdgjU5NAorPFU1Qzg1PiA8VTVDODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsoUwCis8VTY2MDQ+IDxVNjYwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aYhDAKKzxVNjc3Rj4gPFU2NzdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p2/MTQwNDEKKzxVNzI0OD4gPFU3MjQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54mIMTY5MjMKKzxVNzRFQT4gPFU3NEVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55OqMAorPFU3Qzg0PiA8VTdDODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsoQwCis8VTgyMjg+IDxVODIyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iIqDIKKzxVODc0Mj4gPFU4NzQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J2CMAorPFU5MjExPiA8VTkyMTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiJEwCis8VTk0QTM+IDxVOTRBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mSozMKKzxVOTVDNj4gPFU5NUM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZeGMTkKKzxVOTYyQT4gPFU5NjJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZiqNTc1Cis8VTM2OTg+IDxVMzY5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OamDAKKzxVM0FCNT4gPFUzQUI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46q1MAorPFU0NTcwPiA8VTQ1NzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklbAwCis8VTRGMzQ+IDxVNEYzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S8tDUxOTUKKzxVNTI5RT4gPFU1MjlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YqeMjM5MzcKKzxVNTM0QT4gPFU1MzRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y2KMjc3NDYKKzxVNTlDNT4gPFU1OUM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aeFMAorPFU2MDExPiA8VTYwMTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgJExCis8VTYyNkU+IDxVNjI2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aJrjI4NDYKKzxVNjJDQz4gPFU2MkNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ouMNDQ4Cis8VTY3Qzg+IDxVNjdDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+afiDEKKzxVNkU3ND4gPFU2RTc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rm0MAorPFU3NEUzPiA8VTc0RTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnk6MxNDkxCis8VTc5REE+IDxVNzlEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+enmjAKKzxVN0Q0Nj4gPFU3RDQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57WGNQorPFU3RUNBPiA8VTdFQ0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnu4o1MzQKKzxVOEZBNj4gPFU4RkE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L6mMTY1Cis8VTkyNjE+IDxVOTI2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mJoTAKKzxVOTc3RD4gPFU5NzdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z29MAorPFU1N0I5PiA8VTU3Qjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnrkwCis8VTVFMkU+IDxVNUUyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W4rjE0Mzc1Cis8VTVFNDc+IDxVNUU0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W5hzAKKzxVNUU1QT4gPFU1RTVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bmaMAorPFU1RTZCPiA8VTVFNkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluasxNTIKKzxVNjM2MD4gPFU2MzYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o2gMAorPFU2ODg2PiA8VTY4ODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmooYxOTAKKzxVNkQ1Qz4gPFU2RDVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rWcMTE1Cis8VTdFMEQ+IDxVN0UwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e4jTAKKzxVOTBBNj4gPFU5MEE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKmMjg1NQorPFU5MEFCPiA8VTkwQUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgqswCis8VTk3QTQ+IDxVOTdBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mepDAKKzxVMzUxOT4gPFUzNTE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45SZMAorPFUzQjg0PiA8VTNCODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjroQwCis8VTQ3RkE+IDxVNDdGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SfujAKKzxVNjMzNz4gPFU2MzM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oy3MAorPFU2NDEyPiA8VTY0MTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkJIxCis8VTY5OUM+IDxVNjk5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+amnDEyNjQKKzxVNkMwNj4gPFU2QzA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rCGMworPFU3MjUzPiA8VTcyNTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniZMwCis8VTdEODE+IDxVN0Q4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e2gTkKKzxVN0VEMT4gPFU3RUQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57uRMTM4NQorPFU4MTgwPiA8VTgxODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohoAyMDAwCis8VTlBQzg+IDxVOUFDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mriDExCis8VTNCNEI+IDxVM0I0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OtizAKKzxVM0JDMT4gPFUzQkMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46+BMAorPFUzRkE2PiA8VTNGQTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvqYwCis8VTQwOUM+IDxVNDA5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SCnDAKKzxVNDNBNz4gPFU0M0E3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I6nMAorPFU0NUFCPiA8VTQ1QUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklqswCis8VTQ5REI+IDxVNDlEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SnmzAKKzxVNEMzNz4gPFU0QzM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LC3MAorPFU1MDhEPiA8VTUwOEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgo0xNjczCis8VTU4NUQ+IDxVNTg1RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WhnTAKKzxVNjhEMj4gPFU2OEQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qOSMjU3OQorPFU2OEQzPiA8VTY4RDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmo5MxCis8VTc4QzU+IDxVNzhDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ejhTMxNworPFU3QTE2PiA8VTdBMTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqJYwCis8VTgyNTU+IDxVODI1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iJlTAKKzxVODRBMT4gPFU4NEExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JKhMTEKKzxVODY4Qz4gPFU4NjhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JqMMTA2Cis8VTg3MkY+IDxVODcyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+icrzAKKzxVOEIxNz4gPFU4QjE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KyXMworPFU4QzI0PiA8VThDMjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosKQyMDUKKzxVOTM4QT4gPFU5MzhBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y6KMAorPFU5NTUxPiA8VTk1NTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplZE0MTcKKzxVNTI2NT4gPFU1MjY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YmlMTY2OQorPFU1MkY5PiA8VTUyRjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPli7kyCis8VTUzMDU+IDxVNTMwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WMhTI3NzQwCis8VTVCNjI+IDxVNUI2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WtojEwNgorPFU2N0I5PiA8VTY3Qjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnrkzCis8VTcxNzI+IDxVNzE3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eFsjUwCis8VTdCMjM+IDxVN0IyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+esozAKKzxVODBERT4gPFU4MERFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IOeMjc1NAorPFU4MkRFPiA8VTgyREU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi540MzgKKzxVODU1ND4gPFU4NTU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JWUMAorPFU4OTEyPiA8VTg5MTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopJIxNzIKKzxVODk0Mz4gPFU4OTQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KWDMAorPFU5NUMxPiA8VTk1QzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl4EwCis8VTlGNTk+IDxVOUY1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m9mTAKKzxVOUY4NT4gPFU5Rjg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b6FNworPFUzRDYxPiA8VTNENjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtaEwCis8VTNGRkE+IDxVM0ZGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O/ujAKKzxVNDIwRj4gPFU0MjBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IiPMAorPFU0OTY0PiA8VTQ5NjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpaQwCis8VTRBMEM+IDxVNEEwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SojDAKKzxVNEExND4gPFU0QTE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KiUMAorPFU0QUE4PiA8VTRBQTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqqgwCis8VTVBRDE+IDxVNUFEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WrkTAKKzxVNzRERD4gPFU3NEREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55OdMAorPFU3QTg3PiA8VTdBODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqocwCis8VTg1ODQ+IDxVODU4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iWhDI1ODUKKzxVOTZGOT4gPFU5NkY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Zu5MTI0Cis8VTM2NDU+IDxVMzY0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OZhTAKKzxVM0M4Rj4gPFUzQzhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47KPMAorPFUzRUM0PiA8VTNFQzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPju4QwCis8VTQzODI+IDxVNDM4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SOgjAKKzxVNEI0Qj4gPFU0QjRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K2LMAorPFU0Q0M4PiA8VTRDQzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPks4gwCis8VTRDRjA+IDxVNENGMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SzsDAKKzxVNEQxMD4gPFU0RDEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LSQMAorPFU0RkREPiA8VTRGREQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkv50yNzM1NAorPFU1ODIxPiA8VTU4MjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloKExOTY1Cis8VTU4MjI+IDxVNTgyMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WgojAKKzxVNUFBQz4gPFU1QUFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aqsMQorPFU1QjlEPiA8VTVCOUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrp05MDA2Cis8VTVCQjI+IDxVNUJCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WusjAKKzxVNUJEQT4gPFU1QkRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a+aMAorPFU1QkYzPiA8VTVCRjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlr7MwCis8VTVCRjY+IDxVNUJGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WvtjY4Cis8VTYwMDk+IDxVNjAwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aAiTAKKzxVNzNFND4gPFU3M0U0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54+kMAorPFU3REU1PiA8VTdERTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnt6UwCis8VTg0NDY+IDxVODQ0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iRhjE0NgorPFU4OTEzPiA8VTg5MTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopJM0OAorPFU4Q0YyPiA8VThDRjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPos7IwCis8VTk3NEM+IDxVOTc0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mdjDAKKzxVOThGRD4gPFU5OEZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aO9MjEKKzxVOTk3MT4gPFU5OTcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aWxMjQyNQorPFU5OUMyPiA8VTk5QzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpp4IwCis8VTlDRjU+IDxVOUNGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mztTAKKzxVOUQwNz4gPFU5RDA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bSHMQorPFU5RTI4PiA8VTlFMjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuKgyMTIKKzxVMzY3OD4gPFUzNjc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45m4MAorPFUzQUU3PiA8VTNBRTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjq6cwCis8VTNDOTI+IDxVM0M5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OykjAKKzxVNDkxNj4gPFU0OTE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KSWMAorPFU1MTI0PiA8VTUxMjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhKQwCis8VTUyMjg+IDxVNTIyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WIqDM2MAorPFU1MkZEPiA8VTUyRkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPli70wCis8VTU2OTc+IDxVNTY5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WalzIKKzxVNTgzMT4gPFU1ODMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aCxMzQ1Cis8VTVGQzE+IDxVNUZDMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W/gTAKKzxVNjJBNT4gPFU2MkE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oqlMzk3NDYKKzxVNjJCMT4gPFU2MkIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oqxMTE0NTgKKzxVNjZCND4gPFU2NkI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pq0NzIyNQorPFU2NkQzPiA8VTY2RDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmm5MwCis8VTcyMDY+IDxVNzIwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eIhjU0NTgKKzxVNzJBNj4gPFU3MkE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54qmMAorPFU4M0UyPiA8VTgzRTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoj6IwCis8VTg2NjM+IDxVODY2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iZozAKKzxVODZBQj4gPFU4NkFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JqrMAorPFU4ODhDPiA8VTg4OEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooowwCis8VThDNzk+IDxVOEM3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ixuTc4NAorPFU4REI1PiA8VThEQjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotrU0Cis8VTkyNEI+IDxVOTI0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mJizAKKzxVOTQ2ND4gPFU5NDY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZGkMAorPFU5NEM3PiA8VTk0Qzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpk4cwCis8VTlBQjI+IDxVOUFCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mqsjIKKzxVOUI5MT4gPFU5QjkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a6RMTA4Cis8VTlDOEQ+IDxVOUM4RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+myjTE3OTkKKzxVNEYxMz4gPFU0RjEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LyTMAorPFU0RkZFPiA8VTRGRkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkv741MgorPFU1MDVEPiA8VTUwNUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgZ0wCis8VTUzNTE+IDxVNTM1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WNkTIxNDcKKzxVNTdFND4gPFU1N0U0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z+kMQorPFU2MEIyPiA8VTYwQjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgrI5MTMxCis8VTYzRjk+IDxVNjNGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aPuTcKKzxVNjc2Rj4gPFU2NzZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p2vOTY5NAorPFU2ODZFPiA8VTY4NkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoa4wCis8VTY5MTE+IDxVNjkxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+akkTAKKzxVNzZDMz4gPFU3NkMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55uDMgorPFU3ODkxPiA8VTc4OTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnopExMjM1Cis8VTc5ODY+IDxVNzk4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+emhjMKKzxVN0RCQz4gPFU3REJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57a8MAorPFU4NDA2PiA8VTg0MDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokIYwCis8VTg1RTM+IDxVODVFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iXozAKKzxVODhFOD4gPFU4OEU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KOoNTMKKzxVOTMwMz4gPFU5MzAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YyDMAorPFU5NjQyPiA8VTk2NDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmYIzNQorPFU5RDZGPiA8VTlENkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpta8wCis8VTlFNEU+IDxVOUU0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m5jjEKKzxVMzkzMz4gPFUzOTMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46SzMAorPFU1MzE3PiA8VTUzMTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljJczNzkzMworPFU5MjczPiA8VTkyNzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpibMwCis8VTM0Qzg+IDxVMzRDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OTiDAKKzxVMzUyOD4gPFUzNTI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45SoMAorPFUzNkREPiA8VTM2REQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjm50wCis8VTM4QzE+IDxVMzhDMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OjgTAKKzxVM0MwNj4gPFUzQzA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47CGMAorPFUzRDk0PiA8VTNEOTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtpQwCis8VTNERjY+IDxVM0RGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O3tjAKKzxVM0UyMj4gPFUzRTIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47iiMAorPFUzRTJDPiA8VTNFMkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuKwwCis8VTNFM0Q+IDxVM0UzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O4vTAKKzxVM0VENz4gPFUzRUQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47uXMAorPFUzRjBFPiA8VTNGMEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvI4wCis8VTNGQjE+IDxVM0ZCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O+sTAKKzxVNDA0NT4gPFU0MDQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IGFMAorPFU0MkYzPiA8VTQyRjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPki7MwCis8VTQ1MTI+IDxVNDUxMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SUkjAKKzxVNDgxOT4gPFU0ODE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KCZMAorPFU0ODc2PiA8VTQ4NzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkobYwCis8VTRBNDA+IDxVNEE0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SpgDAKKzxVNEMzRD4gPFU0QzNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LC9MAorPFU0RkZCPiA8VTRGRkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkv7swCis8VTUwMEQ+IDxVNTAwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAjTMwNTMKKzxVNTA3OT4gPFU1MDc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YG5MAorPFU1MDk5PiA8VTUwOTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgpkxMzcKKzxVNTBDMz4gPFU1MEMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YODMAorPFU1NEYxPiA8VTU0RjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlk7EwCis8VTU5MDc+IDxVNTkwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WkhzIyMjA2Cis8VTU5NzA+IDxVNTk3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WlsDAKKzxVNUI1Qj4gPFU1QjVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a2bNjQKKzxVNjA5Nj4gPFU2MDk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oKWNTM2Cis8VTYwRUI+IDxVNjBFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aDqzk4OQorPFU2MTAyPiA8VTYxMDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhIIwCis8VTYxOEE+IDxVNjE4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aGijMKKzxVNjYwMT4gPFU2NjAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5piBMAorPFU2NzZFPiA8VTY3NkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmna4wCis8VTY4OTY+IDxVNjg5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ailjAKKzxVNzExOT4gPFU3MTE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54SZMzQKKzxVNzI2Qz4gPFU3MjZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54msMAorPFU3Mjk1PiA8VTcyOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnipUwCis8VTcyQzg+IDxVNzJDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eLiDUxOQorPFU3MkZEPiA8VTcyRkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPni70yCis8VTczRkM+IDxVNzNGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ePvDAKKzxVNzQzMj4gPFU3NDMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55CyMAorPFU3ODlBPiA8VTc4OUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnopo3Cis8VTdDRDI+IDxVN0NEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ezkjQKKzxVN0QzND4gPFU3RDM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57S0MAorPFU4MENDPiA8VTgwQ0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPog4wxMDAwMAorPFU4NEQzPiA8VTg0RDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPok5MyNTkKKzxVODhBQj4gPFU4OEFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KKrNzM0NjQKKzxVODkxOT4gPFU4OTE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KSZMgorPFU4QTk2PiA8VThBOTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqpYwCis8VThDOUQ+IDxVOEM5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iynTM2Cis8VThEMUQ+IDxVOEQxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i0nTc0NTYKKzxVOEVGMD4gPFU4RUYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LuwMAorPFU4RjI5PiA8VThGMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovKkyNAorPFU4Rjg4PiA8VThGODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovog0NzQ2Cis8VTkwQjY+IDxVOTBCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mCtjAKKzxVOTBFNT4gPFU5MEU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YOlMAorPFU5MTAxPiA8VTkxMDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphIEwCis8VTkyQzc+IDxVOTJDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mLhzAKKzxVOTQzND4gPFU5NDM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZC0MQorPFU5NDNFPiA8VTk0M0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkL4wCis8VTk0QTE+IDxVOTRBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mSoTI5Cis8VTk3QjQ+IDxVOTdCND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+metDEKKzxVOTdEQj4gPFU5N0RCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z+bMAorPFU1MDM0PiA8VTUwMzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgLQwCis8VTU5NTQ+IDxVNTk1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WllDU0NjUKKzxVNjgxRj4gPFU2ODFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qCfMAorPFU2Q0NEPiA8VTZDQ0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPms40xCis8VTZFMDA+IDxVNkUwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a4gDAKKzxVNzI4Nz4gPFU3Mjg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54qHMAorPFU4Q0MxPiA8VThDQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPos4ExCis8VThEMzI+IDxVOEQzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i0sjIwNAorPFU5MDI5PiA8VTkwMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgKkwCis8VTkzMUI+IDxVOTMxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mMmzAKKzxVOTUxQj4gPFU5NTFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZSbNDcKKzxVMzg3Nz4gPFUzODc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46G3MAorPFUzQkJBPiA8VTNCQkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrrowCis8VTU5MzI+IDxVNTkzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WksjAKKzxVNTk1OT4gPFU1OTU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aWZMAorPFU2NzJDPiA8VTY3MkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnKw5OTgzOAorPFU2OTREPiA8VTY5NEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpY0wCis8VTc1NUE+IDxVNzU1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eVmjE5Cis8VTgyRUY+IDxVODJFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iLrzExMQorPFUzOTEzPiA8VTM5MTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpJMwCis8VTNBMjc+IDxVM0EyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OopzAKKzxVM0M3NT4gPFUzQzc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47G1MAorPFU0QjMxPiA8VTRCMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrLEwCis8VTU3NEM+IDxVNTc0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WdjDE2Cis8VTYzNzk+IDxVNjM3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aNuTAKKzxVNjRBQT4gPFU2NEFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pKqMQorPFU2ODczPiA8VTY4NzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmobMwCis8VTcxQ0M+IDxVNzFDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHjDAKKzxVNzM1Nj4gPFU3MzU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj542WMAorPFU3QjI4PiA8VTdCMjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrKgzNjUwCis8VThGM0Q+IDxVOEYzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i8vTAKKzxVNEYzQj4gPFU0RjNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ly7MAorPFU1NjIzPiA8VTU2MjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmKMxMTIKKzxVNTg3ND4gPFU1ODc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aG0MAorPFU1OTVGPiA8VTU5NUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpZ8wCis8VTVEMjk+IDxVNUQyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W0qTE0ODUKKzxVNUQ2RD4gPFU1RDZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bWtMAorPFU1RjM4PiA8VTVGMzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvLgwCis8VTc5NEE+IDxVNzk0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+elijAKKzxVN0Q2Mz4gPFU3RDYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57WjMworPFU3REIzPiA8VTdEQjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntrMwCis8VTdFNDM+IDxVN0U0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5gzQKKzxVN0VGNz4gPFU3RUY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57u3ODM0Cis8VTk1OEQ+IDxVOTU4RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mWjTAKKzxVNzUyRD4gPFU3NTJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55StNDQ3Cis8VTM0NUY+IDxVMzQ1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ORnzAKKzxVNDJGRD4gPFU0MkZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Iu9MAorPFU0NjQwPiA8VTQ2NDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmYAwCis8VTRBNkM+IDxVNEE2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SprDAKKzxVNEI3MD4gPFU0QjcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K2wMAorPFU0Q0RFPiA8VTRDREU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPks54wCis8VTU3RjI+IDxVNTdGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfsjAKKzxVNzNBND4gPFU3M0E0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj546kMAorPFU3NDJCPiA8VTc0MkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkKswCis8VTgzRjY+IDxVODNGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPtjAKKzxVOEE4MT4gPFU4QTgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KqBMAorPFU5NzlCPiA8VTk3OUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnpswCis8VTNDNzY+IDxVM0M3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OxtjAKKzxVM0RFRj4gPFUzREVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47evMAorPFU0QTNCPiA8VTRBM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqLswCis8VTU4MEI+IDxVNTgwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WgizYKKzxVNjlGMD4gPFU2OUYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qewMAorPFU2Q0Y1PiA8VTZDRjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPms7U4NgorPFU2RDM0PiA8VTZEMzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtLQwCis8VTcxQTI+IDxVNzFBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eGojAKKzxVNzUwRj4gPFU3NTBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55SPMgorPFU4REYwPiA8VThERjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPot7AwCis8VThFNjY+IDxVOEU2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i5pjEwOTIKKzxVOEZGOD4gPFU4RkY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L+4NDAyCis8VTkwMkM+IDxVOTAyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mArDAKKzxVOTNGMD4gPFU5M0YwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+wMAorPFU5NTVBPiA8VTk1NUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplZoxCis8VTUwNkE+IDxVNTA2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WBqjAKKzxVNUM0ND4gPFU1QzQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bGEMTIKKzxVNjA4Mj4gPFU2MDgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oKCMAorPFU2QkY0PiA8VTZCRjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmr7QwCis8VTc2ODA+IDxVNzY4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eagDAKKzxVN0EyQj4gPFU3QTJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56irMAorPFU4Nzk1PiA8VTg3OTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonpUwCis8VThDNEQ+IDxVOEM0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ixjTAKKzxVOTAzQz4gPFU5MDNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YC8MzY5OAorPFU5Q0JFPiA8VTlDQkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsr4wCis8VTNCQjA+IDxVM0JCMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OusDAKKzxVNEEwNj4gPFU0QTA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KiGMAorPFU0RDQ0PiA8VTRENDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktYQwCis8VTgzNzg+IDxVODM3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iNuDQ3Cis8VTlGM0I+IDxVOUYzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m8uzU1MDMKKzxVMzZCMD4gPFUzNkIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45qwMAorPFUzODMyPiA8VTM4MzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoLIwCis8VTNBOEY+IDxVM0E4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OqjzAKKzxVM0VGNj4gPFUzRUY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47u2MAorPFU0MEZFPiA8VTQwRkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkg74wCis8VTQxRjc+IDxVNDFGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SHtzAKKzxVNDNFMj4gPFU0M0UyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I+iMAorPFU0NjIxPiA8VTQ2MjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmKEwCis8VTQ4MEI+IDxVNDgwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SgizAKKzxVNDhFNT4gPFU0OEU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KOlMAorPFU0RjRBPiA8VTRGNEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvYowCis8VTUzMTU+IDxVNTMxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WMlTI3NAorPFU1NDIxPiA8VTU0MjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkKExOAorPFU1NTVBPiA8VTU1NUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllZowCis8VTU5MzY+IDxVNTkzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WktjAKKzxVNTlBMz4gPFU1OUEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aajMzQKKzxVNUY3Qz4gPFU1RjdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b28NjU3OAorPFU2NzNDPiA8VTY3M0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnLwwCis8VTY3QzA+IDxVNjdDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+afgDAKKzxVNkJEND4gPFU2QkQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q+UNTM2OTEKKzxVNkM5OD4gPFU2Qzk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rKYMAorPFU3NTk1PiA8VTc1OTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlpUwCis8VTc5RDU+IDxVNzlENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+enlTE0Cis8VTdCMTQ+IDxVN0IxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eslDExMTUwCis8VTdCNDY+IDxVN0I0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ethjEyOAorPFU3QzgzPiA8VTdDODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsoMwCis8VTdFQjA+IDxVN0VCMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e6sDI2Cis8VTgyMkQ+IDxVODIyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iIrTAKKzxVOEM4Rj4gPFU4QzhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LKPMAorPFU5MTE5PiA8VTkxMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphJkxMTM1Cis8VTlCNkU+IDxVOUI2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mtrjAKKzxVMzRENj4gPFUzNEQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45OWMAorPFUzNUM5PiA8VTM1Qzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjl4kwCis8VTM2MjA+IDxVMzYyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OYoDAKKzxVMzYyOT4gPFUzNjI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45ipMAorPFUzNjQ0PiA8VTM2NDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmYQwCis8VTM4NDA+IDxVMzg0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OhgDAKKzxVMzg1OT4gPFUzODU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46GZMAorPFUzOEIwPiA8VTM4QjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjorAwCis8VTM4QjY+IDxVMzhCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OitjAKKzxVMzhCOD4gPFUzOEI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46K4MAorPFUzOUQ5PiA8VTM5RDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjp5kwCis8VTNBQTQ+IDxVM0FBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OqpDAKKzxVM0JCRj4gPFUzQkJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj466/MAorPFUzQkM3PiA8VTNCQzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjr4cwCis8VTNDNzg+IDxVM0M3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OxuDAKKzxVM0NGQz4gPFUzQ0ZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47O8MAorPFUzRDY1PiA8VTNENjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtaUwCis8VTNENjg+IDxVM0Q2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O1qDAKKzxVM0U0Mz4gPFUzRTQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47mDMAorPFUzRUVCPiA8VTNFRUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPju6swCis8VTNGRUI+IDxVM0ZFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O/qzAKKzxVNDAyMz4gPFU0MDIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ICjMAorPFU0MDc5PiA8VTQwNzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgbkwCis8VTQxMzY+IDxVNDEzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SEtjAKKzxVNDJBNz4gPFU0MkE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IqnMAorPFU0MkQ0PiA8VTQyRDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPki5QwCis8VTQzMUY+IDxVNDMxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SMnzAKKzxVNDNCNT4gPFU0M0I1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I61MAorPFU0M0Y2PiA8VTQzRjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkj7YwCis8VTQ1NTc+IDxVNDU1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SVlzAKKzxVNDVBOT4gPFU0NUE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JapMAorPFU0N0M2PiA8VTQ3QzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkn4YwCis8VTQ3RTQ+IDxVNDdFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SfpDAKKzxVNDk5OD4gPFU0OTk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KaYMAorPFU0OUQ3PiA8VTQ5RDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkp5cwCis8VTRBNUI+IDxVNEE1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SpmzAKKzxVNEE5MD4gPFU0QTkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KqQMAorPFU0QUMxPiA8VTRBQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkq4EwCis8VTRBRkU+IDxVNEFGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SrvjAKKzxVNEIxQj4gPFU0QjFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KybMAorPFU0QjZFPiA8VTRCNkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkra4wCis8VTRCQTE+IDxVNEJBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SuoTAKKzxVNEJENz4gPFU0QkQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K+XMAorPFU0RjU2PiA8VTRGNTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvZYwCis8VTU0RDQ+IDxVNTREND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WTlDczCis8VTU1RjY+IDxVNTVGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WXtjQKKzxVNTc1Mj4gPFU1NzUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z2SMAorPFU1ODFCPiA8VTU4MUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloJswCis8VTU4QzE+IDxVNThDMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WjgTQ4NTkKKzxVNTlCQz4gPFU1OUJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aa8MAorPFU1QTYyPiA8VTVBNjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqaIzMTAKKzxVNUFGMz4gPFU1QUYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5auzMAorPFU1QjE2PiA8VTVCMTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrJY0Cis8VTVFMDE+IDxVNUUwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W4gTI0MzIKKzxVNUU2Mz4gPFU1RTYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bmjMTEKKzxVNUU2ND4gPFU1RTY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bmkMAorPFU1RTg3PiA8VTVFODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluoc3MTMKKzxVNUVCMz4gPFU1RUIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bqzMgorPFU1RUU2PiA8VTVFRTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlu6YwCis8VTVGMEE+IDxVNUYwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W8ijgyMAorPFU1RjNCPiA8VTVGM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvLsxMgorPFU1RjNDPiA8VTVGM0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvLwxNTAKKzxVNUY0Mz4gPFU1RjQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b2DMAorPFU1RkM1PiA8VTVGQzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv4UzMzAyNworPFU2MDJEPiA8VTYwMkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgK0wCis8VTYxMEE+IDxVNjEwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aEijEKKzxVNjEwRT4gPFU2MTBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oSONTcKKzxVNjI1NT4gPFU2MjU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5omVMAorPFU2NTVEPiA8VTY1NUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlZ0yMTcKKzxVNjU4Mz4gPFU2NTgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5paDMQorPFU2NzA3PiA8VTY3MDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnIcwCis8VTY3ODg+IDxVNjc4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aeiDAKKzxVNjdFQj4gPFU2N0VCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p+rMAorPFU2N0YyPiA8VTY3RjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmn7IwCis8VTY4OTA+IDxVNjg5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aikDAKKzxVNjk0NT4gPFU2OTQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qWFMAorPFU2QTk4PiA8VTZBOTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqpgwCis8VTZCRDU+IDxVNkJENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+avlTk3MDkKKzxVNkJENj4gPFU2QkQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q+WMTQKKzxVNkJEOT4gPFU2QkQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q+ZODAxCis8VTZDQ0M+IDxVNkNDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+azjDIzNgorPFU2RTYyPiA8VTZFNjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuaIwCis8VTZFRDc+IDxVNkVENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a7lzAKKzxVNkVFRD4gPFU2RUVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rutMAorPFU2Rjc3PiA8VTZGNzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvbcwCis8VTZGREU+IDxVNkZERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a/njEKKzxVNzE0Rj4gPFU3MTRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54WPMAorPFU3MTlBPiA8VTcxOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhpowCis8VTcyRjQ+IDxVNzJGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eLtDMKKzxVNzM1OD4gPFU3MzU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj542YMAorPFU3MzU5PiA8VTczNTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjZkwCis8VTczQ0M+IDxVNzNDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ePjDAKKzxVNzRBNz4gPFU3NEE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55KnNDQzCis8VTc1NDA+IDxVNzU0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eVgDQKKzxVNzU0MT4gPFU3NTQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55WBMAorPFU3NTUwPiA8VTc1NTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlZAwCis8VTc1NjI+IDxVNzU2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eVojExMgorPFU3NUFBPiA8VTc1QUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlqowCis8VTc1Rjk+IDxVNzVGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eXuTE5NworPFU3NUZBPiA8VTc1RkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnl7ozCis8VTc2OTU+IDxVNzY5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ealTAKKzxVNzhBNz4gPFU3OEE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56KnMTUxMQorPFU3QjVBPiA8VTdCNUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrZo1Cis8VTdCODQ+IDxVN0I4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+euhDAKKzxVN0I4NT4gPFU3Qjg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj566FMgorPFU3Qjg2PiA8VTdCODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnroYwCis8VTdCRTY+IDxVN0JFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+evpjU1Cis8VTdCRjM+IDxVN0JGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+evszAKKzxVN0M4QT4gPFU3QzhBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57KKMAorPFU3RTJBPiA8VTdFMkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuKowCis8VTdGN0M+IDxVN0Y3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9vDAKKzxVODA1Qj4gPFU4MDVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IGbMQorPFU4MTc3PiA8VTgxNzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohbcwCis8VTgxQzI+IDxVODFDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iHgjM2MzgKKzxVODI5OD4gPFU4Mjk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IqYMAorPFU4MkZFPiA8VTgyRkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi74yCis8VTgzNUM+IDxVODM1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iNnDUKKzxVODRENj4gPFU4NEQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JOWMjIKKzxVODRGRD4gPFU4NEZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JO9MAorPFU4NTNEPiA8VTg1M0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolL0xMTA4Cis8VTg1OUM+IDxVODU5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iWnDUKKzxVODcwQz4gPFU4NzBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JyMMAorPFU4ODkwPiA8VTg4OTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoopAwCis8VTg5NTI+IDxVODk1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ilkjAKKzxVODk1RT4gPFU4OTVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KWeMTIKKzxVODk2Mz4gPFU4OTYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KWjMAorPFU4OUYxPiA8VTg5RjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPop7EwCis8VThBNTY+IDxVOEE1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ipljAKKzxVOEJEMD4gPFU4QkQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K+QMAorPFU4Q0IxPiA8VThDQjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosrEwCis8VThEMTQ+IDxVOEQxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i0lDEKKzxVOEQ1MT4gPFU4RDUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LWRMAorPFU4REY4PiA8VThERjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPot7gzMgorPFU4RTU1PiA8VThFNTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouZUwCis8VThFODM+IDxVOEU4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6gzAKKzxVOEU4ND4gPFU4RTg0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LqEMQorPFU4RjlGPiA8VThGOUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovp85MjQKKzxVOTA3Rj4gPFU5MDdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YG/NzIxMworPFU5MEIyPiA8VTkwQjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgrIwCis8VTkxMjg+IDxVOTEyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mEqDAKKzxVOTEyQT4gPFU5MTJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YSqMAorPFU5MjREPiA8VTkyNEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiY0wCis8VTkzOUU+IDxVOTM5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mOnjAKKzxVOTNDRT4gPFU5M0NFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+OMAorPFU5NENCPiA8VTk0Q0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpk4s4Cis8VTk1ODc+IDxVOTU4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mWhzAKKzxVOTU4OT4gPFU5NTg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZaJNjgKKzxVOTU5Rj4gPFU5NTlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZafMQorPFU5NUUyPiA8VTk1RTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl6I0Cis8VTk1RUQ+IDxVOTVFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mXrTcxMzMKKzxVOTY1Qj4gPFU5NjVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZmbMzQ1Cis8VTk3Qjg+IDxVOTdCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+meuDAKKzxVOTdFMD4gPFU5N0UwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z+gMAorPFU5OEY2PiA8VTk4RjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpo7YwCis8VTk5NDY+IDxVOTk0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mlhjEKKzxVOTk5RD4gPFU5OTlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aadMAorPFU5OURDPiA8VTk5REM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpp5wwCis8VTlBNDY+IDxVOUE0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mphjAKKzxVOUFCMz4gPFU5QUIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aqzMAorPFU5QUMwPiA8VTlBQzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpq4AxMworPFU5QjUzPiA8VTlCNTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprZMwCis8VTlCODU+IDxVOUI4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+muhTAKKzxVOUMwRj4gPFU5QzBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bCPMAorPFU5RDU2PiA8VTlENTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptZYwCis8VTlEREQ+IDxVOURERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m3nTAKKzxVOURFOT4gPFU5REU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bepMAorPFU5RjBBPiA8VTlGMEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvIowCis8VTY3Qzk+IDxVNjdDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+afiTAKKzxVNjk0ND4gPFU2OTQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qWEMAorPFU3MTc4PiA8VTcxNzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhbg2Cis8VTcyNTE+IDxVNzI1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eJkTAKKzxVNzMzNT4gPFU3MzM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54y1MAorPFU3MzcxPiA8VTczNzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjbEwCis8VTc1MDI+IDxVNzUwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eUgjAKKzxVNzgyRD4gPFU3ODJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56CtMzgKKzxVN0EyOD4gPFU3QTI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56ioMAorPFU3QjNFPiA8VTdCM0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrL40Cis8VTdCQUY+IDxVN0JBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eurzAKKzxVN0M2OT4gPFU3QzY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57GpMAorPFU3Q0M0PiA8VTdDQzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPns4QwCis8VTdERTg+IDxVN0RFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3qDM1Cis8VTdGMTY+IDxVN0YxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e8ljE3OTE0Cis8VTg3NTk+IDxVODc1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+idmTE4OAorPFU4RkI5PiA8VThGQjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovrk2MDU1OQorPFU4RkJBPiA8VThGQkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovrowCis8VTkwODk+IDxVOTA4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mCiTEKKzxVOTA4QT4gPFU5MDhBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKKNjEwCis8VTkzN0Q+IDxVOTM3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mNvTAKKzxVOTdBRD4gPFU5N0FEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z6tMTM5MworPFU5QkZFPiA8VTlCRkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpr74wCis8VTlCRkY+IDxVOUJGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mvvzAKKzxVOUNDQT4gPFU5Q0NBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bOKMTYKKzxVMzk5QT4gPFUzOTlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46aaMAorPFU0MDc1PiA8VTQwNzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgbUwCis8VTUzM0U+IDxVNTMzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WMvjI0MAorPFU2MEZDPiA8VTYwRkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmg7wwCis8VTYyNDE+IDxVNjI0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aJgTE1MjcKKzxVNzhBNT4gPFU3OEE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56KlNAorPFU3QTg2PiA8VTdBODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqoY0Cis8VTg0Mzk+IDxVODQzOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iQuTAKKzxVODVDQT4gPFU4NUNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JeKMAorPFU4OTBBPiA8VTg5MEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopIo3Cis8VThDQjY+IDxVOENCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iytjQKKzxVOEQyQz4gPFU4RDJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LSsNjA5Cis8VTM3Nzg+IDxVMzc3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OduDAKKzxVMzhEMD4gPFUzOEQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46OQMAorPFUzQjUzPiA8VTNCNTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrZMwCis8VTNDQTI+IDxVM0NBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OyojAKKzxVM0NDRT4gPFUzQ0NFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47OOMAorPFUzQ0QyPiA8VTNDRDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjs5IwCis8VTNEMUM+IDxVM0QxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O0nDAKKzxVM0Q3Nz4gPFUzRDc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47W3MAorPFUzRUI5PiA8VTNFQjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjurkwCis8VTNFREU+IDxVM0VERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O7njAKKzxVNDI3OD4gPFU0Mjc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Im4MAorPFU0NEFBPiA8VTQ0QUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkqowCis8VTQ2RDI+IDxVNDZEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SbkjAKKzxVNDg2Mj4gPFU0ODYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KGiMAorPFU0QUJCPiA8VTRBQkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqrswCis8VTRGQkY+IDxVNEZCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+vzQwMDAwCis8VTUzNUU+IDxVNTM1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WNnjU5Cis8VTUzRDg+IDxVNTNEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPmDQzMTg4Cis8VTU5MDk+IDxVNTkwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WkiTAKKzxVNUYwMT4gPFU1RjAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5byBNjgKKzxVNUZBNz4gPFU1RkE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b6nMAorPFU1RkVEPiA8VTVGRUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv60xCis8VTYyODM+IDxVNjI4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aKgzIKKzxVNjNEOT4gPFU2M0Q5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+ZMAorPFU2NjJBPiA8VTY2MkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmKowCis8VTZDNzM+IDxVNkM3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+axszAKKzxVNkM3ND4gPFU2Qzc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rG0MzY1Cis8VTcwOUU+IDxVNzA5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eCnjAKKzxVNzNBMz4gPFU3M0EzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj546jMAorPFU3REY2PiA8VTdERjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnt7YwCis8VTdGMEY+IDxVN0YwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e8jzAKKzxVODI1MT4gPFU4MjUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ImRMAorPFU4MkM0PiA8VTgyQzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi4QxCis8VTg5OEQ+IDxVODk4RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+imjTAKKzxVOEI4QT4gPFU4QjhBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K6KMzc1Cis8VThGQTE+IDxVOEZBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i+oTAKKzxVOEZBNz4gPFU4RkE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L6nMAorPFU4RkE4PiA8VThGQTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovqgyMDIxCis8VThGQTk+IDxVOEZBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i+qTQxNTQKKzxVOEZBQj4gPFU4RkFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L6rOTk4Cis8VThGQUU+IDxVOEZBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i+rjAKKzxVOEZBRj4gPFU4RkFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L6vMTMKKzxVOTA0RD4gPFU5MDREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YGNNzkwOAorPFU5MUM2PiA8VTkxQzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPph4Y2Cis8VTk1OUU+IDxVOTU5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mWnjIKKzxVOUQxOD4gPFU5RDE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bSYMAorPFU1MEM0PiA8VTUwQzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlg4QwCis8VTUxMjY+IDxVNTEyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WEpjAKKzxVNTg4Mj4gPFU1ODgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aKCMAorPFU1RTU2PiA8VTVFNTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluZYxCis8VTVGNkE+IDxVNUY2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W9qjE1OTQKKzxVNUZCMT4gPFU1RkIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b6xMAorPFU2NDdEPiA8VTY0N0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkb0xCis8VTY3NTM+IDxVNjc1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+adkzI5Cis8VTY4MDc+IDxVNjgwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aghzU2ODA2Cis8VTZBMTk+IDxVNkExOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aomTE5OQorPFU2RUVFPiA8VTZFRUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmu64wCis8VTcwMEM+IDxVNzAwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eAjDAKKzxVNzA2Qz4gPFU3MDZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54GsMQorPFU3MTlCPiA8VTcxOUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhpswCis8VTcyMDI+IDxVNzIwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eIgjAKKzxVNzMwQj4gPFU3MzBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54yLMAorPFU3NjJEPiA8VTc2MkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmK0xCis8VTc4RTY+IDxVNzhFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ejpjEKKzxVN0E2RT4gPFU3QTZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56muMAorPFU3Rjg2PiA8VTdGODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvoYwCis8VTgxM0Y+IDxVODEzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iEvzAKKzxVODE5OD4gPFU4MTk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IaYODcKKzxVODFENT4gPFU4MUQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IeVMAorPFU4NTA4PiA8VTg1MDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolIgwCis8VTg1RTg+IDxVODVFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iXqDAKKzxVOEIyND4gPFU4QjI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KykMAorPFU4RDA2PiA8VThEMDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotIYwCis8VTkzRTI+IDxVOTNFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mPojEKKzxVOTQ2Mz4gPFU5NDYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZGjMQorPFU5NTU2PiA8VTk1NTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplZYzNzkKKzxVOTU3Mz4gPFU5NTczPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZWzNzgKKzxVOThBOT4gPFU5OEE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aKpMAorPFU5OEFFPiA8VTk4QUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoq4wCis8VTk4Qjc+IDxVOThCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mitzAKKzxVOThDNj4gPFU5OEM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aOGNAorPFU5OEM3PiA8VTk4Qzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpo4cwCis8VTk4Qzg+IDxVOThDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mjiDAKKzxVOThDRD4gPFU5OENEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aONMAorPFU5OEQxPiA8VTk4RDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpo5EyCis8VTk4RDk+IDxVOThEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mjmTEwNworPFU5OERBPiA8VTk4REE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpo5oyNQorPFU5QTQzPiA8VTlBNDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqYMwCis8VTlBNkI+IDxVOUE2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mpqzAKKzxVOUE4OT4gPFU5QTg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aqJMAorPFU5QUEwPiA8VTlBQTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqqAyNworPFU5QURGPiA8VTlBREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpq583MworPFU5RTgzPiA8VTlFODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuoM4Cis8VTM3RkQ+IDxVMzdGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OfvTAKKzxVMzgxMj4gPFUzODEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46CSMAorPFUzQkYxPiA8VTNCRjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjr7EwCis8VTNCRjk+IDxVM0JGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OvuTAKKzxVNDUzOD4gPFU0NTM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JS4MAorPFU1QTRBPiA8VTVBNEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqYozNjUKKzxVNkFBNj4gPFU2QUE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qqmMAorPFU4ODY4PiA8VTg4Njg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooag1ODU0OQorPFU4OEYxPiA8VTg4RjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo7E5NworPFU4OTNFPiA8VTg5M0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopL4wCis8VThBRDg+IDxVOEFEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+irmDAKKzxVOTMzNj4gPFU5MzM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Yy2MTUKKzxVMzlGQz4gPFUzOUZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46e8MAorPFU0Nzg0PiA8VTQ3ODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknoQwCis8VTRGRjU+IDxVNEZGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S/tTEKKzxVOUMzRT4gPFU5QzNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bC+MAorPFU5Q0Q0PiA8VTlDRDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPps5QxMQorPFU2MThCPiA8VTYxOEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhos4MjEKKzxVNzYyQT4gPFU3NjJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55iqMzUxCis8VTc2NUY+IDxVNzY1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eZnzcKKzxVODY0Qz4gPFU4NjRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JmMMAorPFU5QzQ5PiA8VTlDNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsYkwCis8VTlDRDY+IDxVOUNENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mzljE1NgorPFU5RjA4PiA8VTlGMDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvIgwCis8VTlGOUU+IDxVOUY5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m+njAKKzxVNDgyNT4gPFU0ODI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KClMAorPFU0QjcxPiA8VTRCNzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrbEwCis8VTUyMjU+IDxVNTIyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WIpTQwMgorPFU1MjJCPiA8VTUyMkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliKs2MDU5NQorPFU1NDg3PiA8VTU0ODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkocwCis8VTVGQjY+IDxVNUZCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W+tjEKKzxVODM4Mj4gPFU4MzgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I6CMAorPFU4N0RFPiA8VTg3REU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPon54wCis8VThFNjk+IDxVOEU2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i5qTE1NworPFUzRkRDPiA8VTNGREM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjv5wwCis8VTg2QzI+IDxVODZDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ibgjAKKzxVMzhCQz4gPFUzOEJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46K8MAorPFU0MjcyPiA8VTQyNzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkibIwCis8VTQyRTI+IDxVNDJFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SLojAKKzxVNDNERj4gPFU0M0RGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I+fMAorPFU1RjQ2PiA8VTVGNDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvYYyCis8VTUwQTc+IDxVNTBBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WCpzI3Cis8VTUxMTA+IDxVNTExMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WEkDAKKzxVNUJCRT4gPFU1QkJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a6+Mjk0MgorPFU1RjZDPiA8VTVGNkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvawxMzEzCis8VTY1OEM+IDxVNjU4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWjDQ5MgorPFU2OEI5PiA8VTY4Qjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmorkwCis8VTY5MTU+IDxVNjkxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aklTAKKzxVNjlERj4gPFU2OURGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qefMjIwCis8VTZBQjM+IDxVNkFCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aqszkKKzxVNkM0Mz4gPFU2QzQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rGDMAorPFU2RUU4PiA8VTZFRTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmu6g5NTMKKzxVNkZEMj4gPFU2RkQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r+SMjM2Cis8VTZGRjE+IDxVNkZGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a/sTcKKzxVNkZGNT4gPFU2RkY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r+1MAorPFU2RkY5PiA8VTZGRjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv7kwCis8VTcwMTU+IDxVNzAxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eAlTkKKzxVNzNBMj4gPFU3M0EyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj546iMAorPFU3NDc4PiA8VTc0Nzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkbgwCis8VTc0Qjg+IDxVNzRCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eSuDAKKzxVNzdDOT4gPFU3N0M5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+JMAorPFU3QTY2PiA8VTdBNjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqaYwCis8VTdFN0Q+IDxVN0U3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5vTMKKzxVN0YyND4gPFU3RjI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57ykMjc5Cis8VTg4MTk+IDxVODgxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+igmTAKKzxVOEM2OT4gPFU4QzY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LGpMAorPFU4QzczPiA8VThDNzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosbMzCis8VThDRDM+IDxVOENEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+izkzE5Cis8VThDRDQ+IDxVOENEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+izlDAKKzxVOTBBMD4gPFU5MEEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKgMAorPFU5NDRDPiA8VTk0NEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkYwwCis8VTk1NTQ+IDxVOTU1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mVlDYKKzxVOTcyNj4gPFU5NzI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZymMAorPFU5ODZFPiA8VTk4NkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoa4wCis8VTk5QUE+IDxVOTlBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mmqjAKKzxVOUE1RT4gPFU5QTVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ameMAorPFU0NDE0PiA8VTQ0MTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkJQwCis8VTY0NDg+IDxVNjQ0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aRiDY5Cis8VTY0RUY+IDxVNjRFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aTrzAKKzxVNkJBMT4gPFU2QkExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q6hMjI3Cis8VTZCQUY+IDxVNkJBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aurzMKKzxVODE5MT4gPFU4MTkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IaROTIKKzxVODFDRj4gPFU4MUNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IePMAorPFU5QUNDPiA8VTlBQ0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpq4wxCis8VTlBRDU+IDxVOUFENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mrlTAKKzxVOUFFOT4gPFU5QUU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aupMAorPFU5QjAyPiA8VTlCMDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprIIwCis8VTlCMTM+IDxVOUIxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mskzQyOAorPFU5QjIyPiA8VTlCMjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprKIyCis8VTlEQTM+IDxVOURBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m2ozAKKzxVNEVDQz4gPFU0RUNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LuMMAorPFU1MEExPiA8VTUwQTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgqEwCis8VTUxNzU+IDxVNTE3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WFtTE3MjQ3Cis8VTUxQUI+IDxVNTFBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WGqzEKKzxVNTFCMD4gPFU1MUIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YawOTI0MworPFU2M0E0PiA8VTYzQTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjqQwCis8VTZDMzc+IDxVNkMzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+awtzAKKzxVN0FERD4gPFU3QUREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56udMAorPFUzQTAwPiA8VTNBMDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqIAwCis8VTQyRDE+IDxVNDJEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SLkTAKKzxVNDREMT4gPFU0NEQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JORMAorPFU0RDM1PiA8VTREMzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktLUwCis8VTRFMTk+IDxVNEUxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S4mTM5NAorPFU1RUIwPiA8VTVFQjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlurAwCis8VTVFRUE+IDxVNUVFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W7qjkKKzxVNjAzMj4gPFU2MDMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oCyMAorPFU2MkE2PiA8VTYyQTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiqYwCis8VTY2MUU+IDxVNjYxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aYnjAKKzxVNjYzQT4gPFU2NjNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pi6MQorPFU2N0M0PiA8VTY3QzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmn4QxMDI0Cis8VTY4QzU+IDxVNjhDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ajhTAKKzxVNzBCMz4gPFU3MEIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54KzMzY5Cis8VTc0MTU+IDxVNzQxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eQlTAKKzxVNzY1RD4gPFU3NjVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55mdMAorPFU3NzJBPiA8VTc3MkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnKowCis8VTc5ODA+IDxVNzk4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+emgDcwNworPFU3OUM5PiA8VTc5Qzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnp4k0NzEKKzxVN0ExRj4gPFU3QTFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56ifMQorPFU3QTg5PiA8VTdBODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqokwCis8VTgyRUE+IDxVODJFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iLqjAKKzxVODZDMz4gPFU4NkMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JuDMAorPFU5MEI0PiA8VTkwQjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgrQwCis8VTkyMzU+IDxVOTIzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mItTAKKzxVOTI3Qz4gPFU5MjdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ym8MAorPFU5NjQzPiA8VTk2NDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmYMwCis8VTk3OUU+IDxVOTc5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+menjEKKzxVOTkwNT4gPFU5OTA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aSFMworPFU5OTIwPiA8VTk5MjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppKAwCis8VTk5N0M+IDxVOTk3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mlvDE4NjIKKzxVNDIwMj4gPFU0MjAyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IiCMAorPFU0NUQyPiA8VTQ1RDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkl5IwCis8VTRFMjY+IDxVNEUyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S4pjM4NAorPFU0Rjc1PiA8VTRGNzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvbU5Cis8VTUwMDI+IDxVNTAwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAgjAKKzxVNTA0Qj4gPFU1MDRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YGLMAorPFU1QkNFPiA8VTVCQ0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlr44wCis8VTVFNzY+IDxVNUU3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W5tjU5ODk0Cis8VTVFNzc+IDxVNUU3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W5tzAKKzxVNjQ1Mj4gPFU2NDUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pGSMTExCis8VTY4MjQ+IDxVNjgyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+agpDAKKzxVNzVDNT4gPFU3NUM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55eFMTcwMzcKKzxVOTc1MD4gPFU5NzUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z2QMAorPFU5QkE5PiA8VTlCQTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprqkwCis8VTlENjc+IDxVOUQ2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m1pzAKKzxVNTI1RD4gPFU1MjVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YmdMTMKKzxVNTU3NT4gPFU1NTc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZW1NTMKKzxVNUNBNT4gPFU1Q0E1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bKlMAorPFU1RDkzPiA8VTVEOTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltpMwCis8VTVGNDI+IDxVNUY0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W9gjAKKzxVNjJFOD4gPFU2MkU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ouoMzU2NAorPFU2NEE1PiA8VTY0QTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkqUxOAorPFU2NEFEPiA8VTY0QUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkq00MTExCis8VTY3RUQ+IDxVNjdFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+afrTAKKzxVNkNFMj4gPFU2Q0UyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rOiMTI5NjIKKzxVNzNCQj4gPFU3M0JCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5467NDAxOQorPFU3Njc2PiA8VTc2NzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmbYwCis8VTc2Q0I+IDxVNzZDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ebizAKKzxVNzgzNT4gPFU3ODM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56C1MAorPFU3ODg2PiA8VTc4ODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnooYwCis8VTdGM0Q+IDxVN0YzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e8vTk0Cis8VTgzRTA+IDxVODNFMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPoDEzNworPFU4ODlBPiA8VTg4OUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoopowCis8VTg5NEY+IDxVODk0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iljzAKKzxVOEU3Mz4gPFU4RTczPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LmzMAorPFU5MjYyPiA8VTkyNjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiaIwCis8VTk0QjU+IDxVOTRCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mStTI1NgorPFU5OTExPiA8VTk5MTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppJEwCis8VTk5N0Q+IDxVOTk3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mlvTI2MAorPFU5QTRCPiA8VTlBNEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqYswCis8VTlBQzk+IDxVOUFDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mriTAKKzxVOUM0RD4gPFU5QzREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bGNMAorPFUzNUQ4PiA8VTM1RDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjl5gwCis8VTM3N0Y+IDxVMzc3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OdvzAKKzxVMzdEMT4gPFUzN0QxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45+RMAorPFUzOUYzPiA8VTM5RjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjp7MwCis8VTNBNjc+IDxVM0E2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OppzAKKzxVM0E2RD4gPFUzQTZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46mtMAorPFUzQThEPiA8VTNBOEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqo0wCis8VTNCMEQ+IDxVM0IwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OsjTAKKzxVM0IyNz4gPFUzQjI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46ynMAorPFUzQzVGPiA8VTNDNUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsZ8wCis8VTNEM0U+IDxVM0QzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O0vjAKKzxVM0RCRj4gPFUzREJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47a/MAorPFUzRTQwPiA8VTNFNDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuYAwCis8VTQwOEQ+IDxVNDA4RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SCjTAKKzxVNDJCRj4gPFU0MkJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Iq/MAorPFU0MzY4PiA8VTQzNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjagwCis8VTQzNzg+IDxVNDM3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SNuDAKKzxVNDQ0OD4gPFU0NDQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JGIMAorPFU0NDg0PiA8VTQ0ODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkoQwCis8VTQ1REE+IDxVNDVEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SXmjAKKzxVNDY0Rj4gPFU0NjRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JmPMAorPFU0N0IzPiA8VTQ3QjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknrMwCis8VTQ3REI+IDxVNDdEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SfmzAKKzxVNDg4Qz4gPFU0ODhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KKMMAorPFU0OEFBPiA8VTQ4QUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoqowCis8VTQ5NkM+IDxVNDk2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SlrDAKKzxVNEE4Nz4gPFU0QTg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KqHMAorPFU0QUFDPiA8VTRBQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqqwwCis8VTRBQ0E+IDxVNEFDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SrijAKKzxVNEIyQT4gPFU0QjJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KyqMAorPFU0QjY2PiA8VTRCNjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkraYwCis8VTRCNkY+IDxVNEI2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+StrzAKKzxVNEI4MD4gPFU0QjgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K6AMAorPFU0QjgyPiA8VTRCODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkroIwCis8VTRCQ0I+IDxVNEJDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SvizAKKzxVNEMwQT4gPFU0QzBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LCKMAorPFU0RDg4PiA8VTREODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktogwCis8VTRFQjM+IDxVNEVCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6szIxCis8VTRGMkY+IDxVNEYyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S8rzk2NzUKKzxVNEZCQz4gPFU0RkJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L68MAorPFU1MEYwPiA8VTUwRjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlg7AxCis8VTUyQzM+IDxVNTJDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WLgzMyNTIKKzxVNTM1QT4gPFU1MzVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y2aNjE3MworPFU1RDhGPiA8VTVEOEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlto8wCis8VTVFMUI+IDxVNUUxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W4mzEzOQorPFU2MTNEPiA8VTYxM0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhL0wCis8VTYxRUE+IDxVNjFFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aHqjAKKzxVNjMyQz4gPFU2MzJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oysMAorPFU2NDBGPiA8VTY0MEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkI84ODAKKzxVNjU0MD4gPFU2NTQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pWAMAorPFU2N0NGPiA8VTY3Q0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmn48yMDAwCis8VTY4NzI+IDxVNjg3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ahsjUKKzxVNkE5Nz4gPFU2QTk3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qqXMworPFU2QjAyPiA8VTZCMDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrIIwCis8VTZDQ0E+IDxVNkNDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+azijEzOTIKKzxVNkNGQT4gPFU2Q0ZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rO6MgorPFU2RDYxPiA8VTZENjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtaEwCis8VTZFMjQ+IDxVNkUyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a4pDY4Cis8VTcxN0Y+IDxVNzE3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eFvzAKKzxVNzI1ND4gPFU3MjU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54mUMAorPFU3MkJCPiA8VTcyQkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnirswCis8VTczM0M+IDxVNzMzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eMvDAKKzxVNzkyMT4gPFU3OTIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56ShMAorPFU3OTM0PiA8VTc5MzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpLQ1MAorPFU3Qjk0PiA8VTdCOTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrpQ4OQorPFU3QzE5PiA8VTdDMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsJkwCis8VTdDRUE+IDxVN0NFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ezqjAKKzxVODBDOT4gPFU4MEM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IOJMAorPFU4MTE2PiA8VTgxMTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohJYzMDYxCis8VTgxOEE+IDxVODE4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iGijI0OTMKKzxVODIzNj4gPFU4MjM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ii2MTA3Cis8VTgyNEE+IDxVODI0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iJijAKKzxVODJFOT4gPFU4MkU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IupMAorPFU4NDY3PiA8VTg0Njc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokacwCis8VTg4QUY+IDxVODhBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iirzAKKzxVODk2RT4gPFU4OTZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KWuMAorPFU4QjA4PiA8VThCMDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorIgwCis8VThFMDQ+IDxVOEUwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i4hDAKKzxVOEUyMz4gPFU4RTIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LijMAorPFU5MEUzPiA8VTkwRTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg6MwCis8VTkyNTE+IDxVOTI1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mJkTAKKzxVOTJDRD4gPFU5MkNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YuNMAorPFU5MzlCPiA8VTkzOUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjpsyCis8VTk0NkU+IDxVOTQ2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mRrjAKKzxVOTRDMj4gPFU5NEMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZOCNjMKKzxVOTU0OD4gPFU5NTQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZWIMAorPFU5OTNBPiA8VTk5M0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppLowCis8VTk5OEU+IDxVOTk4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mmjjAKKzxVOTk5RT4gPFU5OTlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aaeMAorPFU5OUMxPiA8VTk5QzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpp4EyNQorPFU5OUVFPiA8VTk5RUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpp64wCis8VTlBNzM+IDxVOUE3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mpszIwNjcKKzxVOUFDNj4gPFU5QUM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6auGMQorPFU5RDUzPiA8VTlENTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptZMwCis8VTlFMTQ+IDxVOUUxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m4lDAKKzxVOUU0MT4gPFU5RTQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bmBMTQKKzxVN0JBNT4gPFU3QkE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj566lMAorPFU3QzM4PiA8VTdDMzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsLgzMjgKKzxVODZCRT4gPFU4NkJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Jq+MAorPFU4RERCPiA8VThEREI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPot5syNDQKKzxVOTlDQT4gPFU5OUNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aeKMAorPFUzNTk1PiA8VTM1OTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlpUwCis8VTVCNzk+IDxVNUI3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WtuTAKKzxVNjMwMD4gPFU2MzAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oyAMAorPFU2NEQ3PiA8VTY0RDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmk5cyCis8VTY0RDg+IDxVNjREOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aTmDQwCis8VTc1ODg+IDxVNzU4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eWiDAKKzxVN0U3ND4gPFU3RTc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57m0MAorPFU4NjE3PiA8VTg2MTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomJcxCis8VThCNTI+IDxVOEI1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+itkjAKKzxVNTM1Qz4gPFU1MzVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y2cMTc3MQorPFU1NjQzPiA8VTU2NDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmYMwCis8VTg1MTQ+IDxVODUxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iUlDAKKzxVNUNFQz4gPFU1Q0VDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bOsMAorPFU1RUFGPiA8VTVFQUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluq8wCis8VTY2NjE+IDxVNjY2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aZoTEKKzxVOTAwQj4gPFU5MDBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YCLMTAKKzxVOTIzRD4gPFU5MjNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Yi9MAorPFU5NEI4PiA8VTk0Qjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkrgxCis8VTk5MTQ+IDxVOTkxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mklDEKKzxVOUQ0Rj4gPFU5RDRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bWPMAorPFU0RTBEPiA8VTRFMEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuI0zNzY1MDMKKzxVOTFBRD4gPFU5MUFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YatMAorPFUzNjVCPiA8VTM2NUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmZswCis8VTNBMTA+IDxVM0ExMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OokDAKKzxVNDAyRj4gPFU0MDJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ICvMAorPFU0MkUwPiA8VTQyRTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPki6AwCis8VTQ0ODg+IDxVNDQ4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SSiDAKKzxVNEE4MT4gPFU0QTgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KqBMAorPFU0QTk0PiA8VTRBOTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqpQwCis8VTUzNUY+IDxVNTM1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WNnzU5Cis8VTU0RkE+IDxVNTRGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WTujI1NgorPFU2MzU1PiA8VTYzNTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjZUzNjYyCis8VTczNUI+IDxVNzM1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eNmzAKKzxVODg2NT4gPFU4ODY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KGlNzA5MQorPFU4OERDPiA8VTg4REM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo5w2MAorPFU5Q0VBPiA8VTlDRUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPps6owCis8VTM2MzU+IDxVMzYzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OYtTAKKzxVMzZCND4gPFUzNkI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45q0MAorPFUzQ0NEPiA8VTNDQ0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjs40wCis8VTNFQzk+IDxVM0VDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O7iTAKKzxVM0Y5Rj4gPFUzRjlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj476fMAorPFU0Mjg3PiA8VTQyODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiocwCis8VTQzNEM+IDxVNDM0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SNjDAKKzxVNDNGRD4gPFU0M0ZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I+9MAorPFU0NDcwPiA8VTQ0NzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkbAwCis8VTQ3NzU+IDxVNDc3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SdtTAKKzxVNEIwRj4gPFU0QjBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KyPMAorPFU0Q0REPiA8VTRDREQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPks50wCis8VTREMUQ+IDxVNEQxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S0nTAKKzxVNEQzQT4gPFU0RDNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LS6MAorPFU0RjQ4PiA8VTRGNDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvYgzNQorPFU1MkNGPiA8VTUyQ0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPli48wCis8VTU0OTg+IDxVNTQ5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WSmDAKKzxVNTdEND4gPFU1N0Q0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z+UMjY4Cis8VTU3RDc+IDxVNTdENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WflzIKKzxVNTdFMD4gPFU1N0UwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z+gMzQwCis8VTVFMDM+IDxVNUUwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W4gzI3ODY2Cis8VTYwMTY+IDxVNjAxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aAljQyNzIKKzxVNjA5MT4gPFU2MDkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oKRMAorPFU2MzU3PiA8VTYzNTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjZcwCis8VTZCNjU+IDxVNkI2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+atpTI4ODg2Cis8VTZCNjg+IDxVNkI2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+atqDAKKzxVNkI2OT4gPFU2QjY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q2pMAorPFU3NEZGPiA8VTc0RkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnk78zCis8VTdCRjA+IDxVN0JGMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+evsDAKKzxVN0MzRj4gPFU3QzNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57C/NDczCis8VTgzNzk+IDxVODM3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iNuTAKKzxVODUwMD4gPFU4NTAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JSAMAorPFU5MEU4PiA8VTkwRTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg6g2NTY3NAorPFU5MEY2PiA8VTkwRjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg7YwCis8VTkyMDg+IDxVOTIwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mIiDAKKzxVOTQ5QT4gPFU5NDlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZKaMjAKKzxVOTkyMj4gPFU5OTIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aSiMAorPFU1MEFBPiA8VTUwQUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgqozCis8VTU2OTM+IDxVNTY5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WakzQ0MAorPFU2NEU2PiA8VTY0RTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmk6Y0Nzc3Cis8VTc5MjQ+IDxVNzkyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ekpDAKKzxVNDdDMz4gPFU0N0MzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J+DMAorPFU0RDdEPiA8VTREN0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktb0wCis8VTU2QzM+IDxVNTZDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WbgzAKKzxVNTA3Mj4gPFU1MDcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YGyMQorPFU3MzFDPiA8VTczMUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjJw0ODQ3Cis8VTc3NzU+IDxVNzc3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+edtTAKKzxVMzRCMj4gPFUzNEIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45KyMAorPFU0RDJEPiA8VTREMkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktK0wCis8VTYyNEQ+IDxVNjI0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aJjTYwMzM5Cis8VTY3NTA+IDxVNjc1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+adkDU1NTkKKzxVNkVBOD4gPFU2RUE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqoMAorPFU3RTk0PiA8VTdFOTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnupQ0Cis8VTg4QzE+IDxVODhDMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ijgTMzMDIKKzxVOENBMT4gPFU4Q0ExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LKhMjIKKzxVOEQyMj4gPFU4RDIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LSiNjgzOQorPFUzOTUyPiA8VTM5NTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpZIwCis8VTQzM0Q+IDxVNDMzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SMvTAKKzxVNDQwNj4gPFU0NDA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JCGMAorPFU0OENCPiA8VTQ4Q0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPko4swCis8VTUwMzg+IDxVNTAzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAuDAKKzxVNUE0Nz4gPFU1QTQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5amHMAorPFU1QkMwPiA8VTVCQzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlr4AwCis8VTVGNjk+IDxVNUY2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W9qTc0NjQKKzxVNjNBMT4gPFU2M0ExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o6hNTYKKzxVNjhDQz4gPFU2OENDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qOMMAorPFU3NzZDPiA8VTc3NkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnaw1NTQKKzxVN0RCNT4gPFU3REI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57a1MAorPFU4REY0PiA8VThERjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPot7QwCis8VThFMjk+IDxVOEUyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i4qTE4ODQKKzxVOTFDNz4gPFU5MUM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YeHMTEwMjMKKzxVNDMyOD4gPFU0MzI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IyoMAorPFU0QzAyPiA8VTRDMDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksIIwCis8VTU3RjA+IDxVNTdGMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfsDAKKzxVN0UyOT4gPFU3RTI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57ipMAorPFU4M0RDPiA8VTgzREM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoj5w4NDA5Cis8VTg1MjE+IDxVODUyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iUoTE2MzcKKzxVNTNDMj4gPFU1M0MyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y+CMjAwMDAKKzxVNTNDMz4gPFU1M0MzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y+DMTExCis8VTUzQzQ+IDxVNTNDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPhDAKKzxVNTNDNT4gPFU1M0M1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y+FMAorPFU1NUIwPiA8VTU1QjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllrAwCis8VTZCN0E+IDxVNkI3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+atujEKKzxVNkU0Qz4gPFU2RTRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rmMMAorPFU4NEUxPiA8VTg0RTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPok6EwCis8VThCMzI+IDxVOEIzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+issjAKKzxVOThFMT4gPFU5OEUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aOhMAorPFU5OTEwPiA8VTk5MTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppJA1NjUxCis8VTlBNDI+IDxVOUE0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mpgjAKKzxVOUE5Nj4gPFU5QTk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aqWNQorPFU5QkY1PiA8VTlCRjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpr7UwCis8VTlDM0E+IDxVOUMzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mwujAKKzxVMzk0Nz4gPFUzOTQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46WHMAorPFUzQTNCPiA8VTNBM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqLswCis8VTNDNUE+IDxVM0M1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OxmjAKKzxVM0U5MT4gPFUzRTkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47qRMAorPFU0MzdDPiA8VTQzN0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjbwwCis8VTQzRkM+IDxVNDNGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SPvDAKKzxVNDQ3Nj4gPFU0NDc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JG2MAorPFU0NUREPiA8VTQ1REQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkl50wCis8VTQ1REU+IDxVNDVERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SXnjAKKzxVNDYwOT4gPFU0NjA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JiJMAorPFU0NjQxPiA8VTQ2NDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmYEwCis8VTQ3NzM+IDxVNDc3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SdszAKKzxVNDhERj4gPFU0OERGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KOfMAorPFU0QUVFPiA8VTRBRUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkq64wCis8VTRDRkI+IDxVNENGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SzuzAKKzxVNUIyMD4gPFU1QjIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aygMAorPFU1QjMxPiA8VTVCMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrLEwCis8VTYwRUQ+IDxVNjBFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aDrTc3OQorPFU2MTU5PiA8VTYxNTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhZkwCis8VTYxNUE+IDxVNjE1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aFmjgKKzxVNkI4Qj4gPFU2QjhCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q6LNTg3NworPFU2Qjk4PiA8VTZCOTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrpgzMworPFU4Njk1PiA8VTg2OTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPompUzOTcKKzxVODc0NT4gPFU4NzQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J2FMAorPFU4ODM2PiA8VTg4MzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooLYyCis8VTg4M0E+IDxVODgzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+igujAKKzxVMzYxND4gPFUzNjE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45iUMAorPFUzNzE3PiA8VTM3MTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnJcwCis8VTM5QTc+IDxVMzlBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OmpzAKKzxVM0ZDQT4gPFUzRkNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47+KMAorPFU0MTVGPiA8VTQxNUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhZ8wCis8VTRCMkI+IDxVNEIyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SsqzAKKzxVNTY0Nj4gPFU1NjQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZmGMAorPFU2MEU4PiA8VTYwRTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmg6gzNjc5Cis8VTYxNTg+IDxVNjE1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aFmDI4Cis8VTYxQUY+IDxVNjFBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aGrzAKKzxVNjcwMT4gPFU2NzAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pyBMAorPFU5RUVBPiA8VTlFRUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpu6owCis8VTlFRjI+IDxVOUVGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7sjAKKzxVMzZEMT4gPFUzNkQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45uRMAorPFUzOEQzPiA8VTM4RDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjo5MwCis8VTNFRUU+IDxVM0VFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O7rjAKKzxVM0Y2OT4gPFUzRjY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj472pMAorPFU0NkY5PiA8VTQ2Rjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkm7kwCis8VTVCNzE+IDxVNUI3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WtsTEwMgorPFU2NDdCPiA8VTY0N0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkbs0Cis8VTZGQUY+IDxVNkZBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a+rzAKKzxVNzA3Rj4gPFU3MDdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54G/MzMyNQorPFU3MUU2PiA8VTcxRTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnh6YxMAorPFU3NEE4PiA8VTc0QTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkqg5MworPFU3Q0IyPiA8VTdDQjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsrI2NQorPFU4NTkyPiA8VTg1OTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolpIwCis8VTRFRDM+IDxVNEVEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S7kzE1OTcKKzxVNEVGQT4gPFU0RUZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Lu6MAorPFU0RjI3PiA8VTRGMjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvKc3OQorPFU1MDA5PiA8VTUwMDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgIkxNQorPFU1MDk2PiA8VTUwOTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgpYwCis8VTUxRDQ+IDxVNTFEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WHlDAKKzxVNUQ2Mj4gPFU1RDYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bWiMAorPFU2Q0E3PiA8VTZDQTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsqc5ODcKKzxVNkVDND4gPFU2RUM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ruENQorPFU4MjMxPiA8VTgyMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiLExMTY1Cis8VTgyNTk+IDxVODI1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iJmTEwCis8VTgyQ0Q+IDxVODJDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iLjTQ5NDEKKzxVODRCQz4gPFU4NEJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JK8NTQKKzxVODdBNT4gPFU4N0E1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J6lMAorPFU5REFDPiA8VTlEQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptqwwCis8VTlFMjc+IDxVOUUyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m4pzAKKzxVM0Q3ND4gPFUzRDc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47W0MAorPFUzRDkzPiA8VTNEOTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtpMwCis8VTUzMjg+IDxVNTMyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WMqDAKKzxVODUzNT4gPFU4NTM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JS1MAorPFU4NUNGPiA8VTg1Q0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPol484NTA0Cis8VTk0NzY+IDxVOTQ3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mRtjAKKzxVNDE2RT4gPFU0MTZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IWuMAorPFU0OEEyPiA8VTQ4QTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoqIwCis8VThDRjY+IDxVOENGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iztjAKKzxVNTVCRj4gPFU1NUJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Za/MAorPFU2NEExPiA8VTY0QTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkqEwCis8VTY0Q0Q+IDxVNjRDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aTjTgwMjgKKzxVN0NEOT4gPFU3Q0Q5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57OZNTgwCis8VTkxMzU+IDxVOTEzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mEtTAKKzxVMzcxNj4gPFUzNzE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45yWMAorPFUzQkU1PiA8VTNCRTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjr6UwCis8VTQxMUE+IDxVNDExQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SEmjAKKzxVNDNDNj4gPFU0M0M2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I+GMAorPFU0NDJDPiA8VTQ0MkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkKwwCis8VTU2MDg+IDxVNTYwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WYiDUyOQorPFU1RDg2PiA8VTVEODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltoYwCis8VTY2Rjk+IDxVNjZGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+abuTE4NTUKKzxVNjZGQT4gPFU2NkZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pu6MAorPFU2OUZEPiA8VTY5RkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmp701MzMKKzxVNkYxNT4gPFU2RjE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ryVMTA2Cis8VTgyNUE+IDxVODI1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iJmjAKKzxVODRGOD4gPFU4NEY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JO4MAorPFU4N0FDPiA8VTg3QUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonqwxCis8VTg5M0Y+IDxVODkzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ikvzAKKzxVOTNFQT4gPFU5M0VBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+qMAorPFU0NDkxPiA8VTQ0OTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkpEwCis8VTYxM0E+IDxVNjEzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aEujAKKzxVNjFDNj4gPFU2MUM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oeGMAorPFU4Mjc4PiA8VTgyNzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoibgxCis8VTgyNzk+IDxVODI3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iJuTEyCis8VTgzNDk+IDxVODM0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iNiTEzNzA2Cis8VTlBMzI+IDxVOUEzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mosjAKKzxVNDQ4Mz4gPFU0NDgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JKDMAorPFU4MDhGPiA8VTgwOEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogo8yCis8VTg5NTk+IDxVODk1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ilmTAKKzxVMzk3RD4gPFUzOTdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46W9MAorPFUzQTMyPiA8VTNBMzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqLIwCis8VTNBNEQ+IDxVM0E0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OpjTAKKzxVNDIxRj4gPFU0MjFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IifMAorPFU0MjgyPiA8VTQyODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkioIwCis8VTQ1MzQ+IDxVNDUzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SUtDAKKzxVNDczQT4gPFU0NzNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Jy6MAorPFU0RkE3PiA8VTRGQTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvqc0Mzc3Cis8VTUwNzQ+IDxVNTA3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WBtDQ4Cis8VTUxOEE+IDxVNTE4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WGijI1Cis8VTUxOEM+IDxVNTE4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WGjDI2MDEKKzxVNTM5NT4gPFU1Mzk1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y6VMTY3NgorPFU1M0EwPiA8VTUzQTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljqAwCis8VTU4ODQ+IDxVNTg4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WihDAKKzxVNUFFNz4gPFU1QUU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aunMAorPFU1RUMxPiA8VTVFQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlu4ExOAorPFU2MDdCPiA8VTYwN0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgbsxNjYKKzxVNjBGQj4gPFU2MEZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oO7MQorPFU2MUExPiA8VTYxQTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhqEwCis8VTYyRkE+IDxVNjJGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aLujAKKzxVNjU0Nz4gPFU2NTQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pWHMAorPFU2RDRCPiA8VTZENEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtYs5NTIxCis8VTZFMkM+IDxVNkUyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a4rDQxCis8VTc1NUY+IDxVNzU1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eVnzAKKzxVNzdFMD4gPFU3N0UwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+gMAorPFU3QjI3PiA8VTdCMjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrKcwCis8VTdCNTY+IDxVN0I1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+etljgxMzcKKzxVN0I1RT4gPFU3QjVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj562eMAorPFU3Qjc0PiA8VTdCNzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrbQwCis8VTdCQTM+IDxVN0JBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+euozAKKzxVN0NBMz4gPFU3Q0EzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57KjMQorPFU4MzI2PiA8VTgzMjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojKYwCis8VTgzNUQ+IDxVODM1RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iNnTAKKzxVODQxNz4gPFU4NDE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JCXMAorPFU4NERCPiA8VTg0REI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPok5swCis8VTkwNkE+IDxVOTA2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mBqjAKKzxVNUQ3RT4gPFU1RDdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bW+MAorPFU2OEFCPiA8VTY4QUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoqswCis8VTM3QTU+IDxVMzdBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OepTAKKzxVM0VGOD4gPFUzRUY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47u4MAorPFU0MEUxPiA8VTQwRTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkg6EwCis8VTQxN0U+IDxVNDE3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SFvjAKKzxVNDkwMT4gPFU0OTAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KSBMAorPFU0QTE5PiA8VTRBMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqJkwCis8VTRCRDQ+IDxVNEJEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SvlDAKKzxVNEM4Qj4gPFU0QzhCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LKLMAorPFU1N0MxPiA8VTU3QzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPln4EwCis8VTVDOTE+IDxVNUM5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WykTExOQorPFU2OEEzPiA8VTY4QTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoqMzMgorPFU2QTZDPiA8VTZBNkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqawwCis8VTZEOTQ+IDxVNkQ5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a2lDYxCis8VTc4NzY+IDxVNzg3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ehtjAKKzxVN0IxMj4gPFU3QjEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56ySMAorPFU1NjRDPiA8VTU2NEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmYw5MgorPFUzQjFEPiA8VTNCMUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrJ0wCis8VTQwNkM+IDxVNDA2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SBrDAKKzxVNDI1NT4gPFU0MjU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ImVMAorPFU1QzQyPiA8VTVDNDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsYIxMjIxOQorPFU1QzY0PiA8VTVDNjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsaQxMDEKKzxVNUQ5Mj4gPFU1RDkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5baSMgorPFU2NkZEPiA8VTY2RkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmm70xCis8VTY2RkU+IDxVNjZGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+abvjIwMDAwCis8VTc4ODA+IDxVNzg4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eigDAKKzxVN0FGMj4gPFU3QUYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56uyMAorPFU3RjJGPiA8VTdGMkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvK8xMAorPFU5MTJCPiA8VTkxMkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphKswCis8VTM4RDI+IDxVMzhEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OjkjAKKzxVOEU2RD4gPFU4RTZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LmtNTY4Cis8VTUwNUI+IDxVNTA1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WBmzAKKzxVNTNDOT4gPFU1M0M5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y+JMTY0OQorPFU1NUIzPiA8VTU1QjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllrM1NTQKKzxVNTVDRj4gPFU1NUNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZePMAorPFU1QUM1PiA8VTVBQzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlq4UwCis8VTYyNjA+IDxVNjI2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aJoDUKKzxVNjMzRj4gPFU2MzNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oy/MAorPFU2M0QyPiA8VTYzRDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmj5I1MTgzCis8VTYzRjc+IDxVNjNGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aPtzAKKzxVNjc0OD4gPFU2NzQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p2IMTEyCis8VTc1ODA+IDxVNzU4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eWgDAKKzxVODA5RT4gPFU4MDlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IKeMAorPFU4MjU2PiA8VTgyNTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiZYwCis8VTkyOUY+IDxVOTI5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mKnzAKKzxVOTM2ND4gPFU5MzY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y2kMAorPFU5Mzg4PiA8VTkzODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjogwCis8VTk1Mzg+IDxVOTUzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mUuDUKKzxVOTkzNz4gPFU5OTM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aS3MAorPFU5OTg3PiA8VTk5ODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppoczCis8VTM4ODk+IDxVMzg4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OiiTAKKzxVMzg5Mj4gPFUzODkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46KSMAorPFUzQUFGPiA8VTNBQUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqq8wCis8VTNBQzU+IDxVM0FDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OrhTAKKzxVNDA1Rj4gPFU0MDVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IGfMAorPFU0MTlCPiA8VTQxOUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhpswCis8VTQ0NTg+IDxVNDQ1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SRmDAKKzxVNDU1Mz4gPFU0NTUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JWTMAorPFU0OTI5PiA8VTQ5Mjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpKkwCis8VTRDQTY+IDxVNENBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SypjAKKzxVNERBQT4gPFU0REFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LaqMAorPFU1NzlFPiA8VTU3OUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnp4xCis8VTVCREY+IDxVNUJERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WvnzE0ODY3Cis8VTVENTY+IDxVNUQ1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W1ljAKKzxVNjQzRD4gPFU2NDNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pC9MTIzCis8VTY3RTU+IDxVNjdFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+afpTE4Mjk2Cis8VTY3RkI+IDxVNjdGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+afuzAKKzxVNjk0Mj4gPFU2OTQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qWCMjQxCis8VTY5Q0U+IDxVNjlDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+anjjQ0Cis8VTZBQUI+IDxVNkFBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aqqzUKKzxVNzMzOT4gPFU3MzM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54y5OQorPFU3OEI0PiA8VTc4QjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnorQxODIKKzxVNzlDNT4gPFU3OUM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56eFMAorPFU4MUZGPiA8VTgxRkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoh78wCis8VTgzMkM+IDxVODMyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iMrDMyOAorPFU4MzM2PiA8VTgzMzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojLY4NjMzCis8VThBNjc+IDxVOEE2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ippzAKKzxVOTc2Qj4gPFU5NzZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z2rMAorPFU0QzA4PiA8VTRDMDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksIgwCis8VTg4Njk+IDxVODg2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ihqTEzOQorPFU4RTQ1PiA8VThFNDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouYU0Cis8VTk0NTQ+IDxVOTQ1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mRlDAKKzxVOTU3Mj4gPFU5NTcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZWyMQorPFUzNkYzPiA8VTM2RjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjm7MwCis8VTM4OEU+IDxVMzg4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OijjAKKzxVMzhGRT4gPFUzOEZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46O+MAorPFUzOTFFPiA8VTM5MUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpJ4wCis8VTQyQUM+IDxVNDJBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SKrDAKKzxVNDRCMj4gPFU0NEIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JKyMAorPFU0NEVEPiA8VTQ0RUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkk60wCis8VTQ3RDU+IDxVNDdENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SflTAKKzxVNDg2OD4gPFU0ODY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KGoMAorPFU0RURCPiA8VTRFREI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPku5swCis8VTRGOTg+IDxVNEY5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+mDAKKzxVNTIzOT4gPFU1MjM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Yi5MTc1MAorPFU1MjRFPiA8VTUyNEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliY43OAorPFU1OTdDPiA8VTU5N0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpbwxCis8VTU5Rjk+IDxVNTlGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WnuTQwCis8VTVDOTQ+IDxVNUM5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WylDY2MworPFU1REVFPiA8VTVERUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlt64xMDAwMAorPFU2QzRBPiA8VTZDNEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsYoxNgorPFU3RDAxPiA8VTdEMDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntIEwCis8VThBMEQ+IDxVOEEwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iojTAKKzxVOEE2Qj4gPFU4QTZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KmrMworPFU4QkU3PiA8VThCRTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor6cxMTIyCis8VTUwNjg+IDxVNTA2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WBqDAKKzxVNjJDNj4gPFU2MkM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ouGMTk0MgorPFU4Mjg2PiA8VTgyODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoioYwCis8VTkxRjU+IDxVOTFGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mHtTAKKzxVOTQ5Nz4gPFU5NDk3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZKXNDQ0Cis8VTM0NkE+IDxVMzQ2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ORqjAKKzxVM0ZCOT4gPFUzRkI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj4765MAorPFU0NEYxPiA8VTQ0RjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkk7EwCis8VTRGQUE+IDxVNEZBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+qjI4Cis8VTUxMTU+IDxVNTExNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WElTEKKzxVNTU4RD4gPFU1NThEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZaNMAorPFU2N0Y0PiA8VTY3RjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmn7QyNTI0Cis8VTcyQjI+IDxVNzJCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eKsjAKKzxVNzk2MT4gPFU3OTYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56WhMAorPFU4QzdBPiA8VThDN0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosbo3MQorPFU4MzFEPiA8VTgzMUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojJ0wCis8VTNDRDc+IDxVM0NENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OzlzAKKzxVNDYwRD4gPFU0NjBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JiNMAorPFU1NkM2PiA8VTU2QzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlm4YwCis8VTc2MjU+IDxVNzYyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eYpTMKKzxVODY3Rj4gPFU4NjdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Jm/NAorPFU4ODA2PiA8VTg4MDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooIYwCis8VTg4ODM+IDxVODg4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iigzAKKzxVNUIxMz4gPFU1QjEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ayTMAorPFU2MEM5PiA8VTYwQzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmg4kwCis8VTYzQkE+IDxVNjNCQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aOujQzMAorPFU2NDAwPiA8VTY0MDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkIA1NDIKKzxVNjUxOT4gPFU2NTE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pSZMworPFU2OEI0PiA8VTY4QjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmorQwCis8VTZCMDM+IDxVNkIwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+asgzAKKzxVODEyMD4gPFU4MTIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ISgMAorPFU4OEE5PiA8VTg4QTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooqkwCis8VTg5NUM+IDxVODk1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ilnDAKKzxVODk5OD4gPFU4OTk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KaYMAorPFU4OUM3PiA8VTg5Qzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPop4cxCis8VThGQkY+IDxVOEZCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i+vzAKKzxVOTJEMz4gPFU5MkQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YuTMAorPFUzNTA2PiA8VTM1MDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlIYwCis8VTM2N0I+IDxVMzY3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OZuzAKKzxVMzg4Nj4gPFUzODg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46KGMAorPFUzREEzPiA8VTNEQTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtqMwCis8VTNFMjU+IDxVM0UyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O4pTAKKzxVM0VBNT4gPFUzRUE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47qlMAorPFU0MDgxPiA8VTQwODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgoEwCis8VTQ3MUI+IDxVNDcxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ScmzAKKzxVNDg2QT4gPFU0ODZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KGqMAorPFU0ODcyPiA8VTQ4NzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkobIwCis8VTQ4RDE+IDxVNDhEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SjkTAKKzxVNDkyQj4gPFU0OTJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KSrMAorPFU0OUVGPiA8VTQ5RUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkp68wCis8VTUwREQ+IDxVNTBERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WDnTAKKzxVNTI5Nj4gPFU1Mjk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YqWMAorPFU1MzU4PiA8VTUzNTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljZgwCis8VTU1QUU+IDxVNTVBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WWrjI2NworPFU1NkI1PiA8VTU2QjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmrUwCis8VTU4RTU+IDxVNThFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WjpTAKKzxVNUE3NT4gPFU1QTc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5am1ODEKKzxVNUIwQj4gPFU1QjBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ayLMAorPFU1REM5PiA8VTVEQzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlt4k3Cis8VTVFREI+IDxVNUVEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W7mzEzCis8VTY4Q0U+IDxVNjhDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ajjjAKKzxVNkJEQT4gPFU2QkRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q+aMAorPFU2RTc5PiA8VTZFNzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmubkwCis8VTZGNzk+IDxVNkY3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a9uTAKKzxVNkY3QT4gPFU2RjdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r26MjE1Cis8VTZGQjY+IDxVNkZCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a+tjcKKzxVNzAwRD4gPFU3MDBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54CNMAorPFU3MDNBPiA8VTcwM0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngLowCis8VTcxNTg+IDxVNzE1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eFmDAKKzxVNzM1MT4gPFU3MzUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj542RMAorPFU3OERCPiA8VTc4REI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPno5swCis8VTc5ODU+IDxVNzk4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+emhTEwMDEKKzxVNzlBQT4gPFU3OUFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56aqMzE1Cis8VTdERkU+IDxVN0RGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3vjAKKzxVN0U3NT4gPFU3RTc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57m1MAorPFU3RThGPiA8VTdFOEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuo8xMworPFU3RTkyPiA8VTdFOTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnupIwCis8VTdGMjA+IDxVN0YyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e8oDMyNDQKKzxVODI2Qz4gPFU4MjZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ImsMAorPFU4NzQ5PiA8VTg3NDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonYkzNzQKKzxVODdFQz4gPFU4N0VDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J+sNQorPFU4N0ZFPiA8VTg3RkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPon74zMworPFU4QTk3PiA8VThBOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqpcwCis8VThCOTI+IDxVOEI5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iukjAKKzxVOEMxNz4gPFU4QzE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LCXNjUKKzxVOEU5ND4gPFU4RTk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LqUMworPFU5MTNEPiA8VTkxM0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphL0wCis8VTkxNDE+IDxVOTE0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mFgTAKKzxVOTJDQj4gPFU5MkNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YuLMAorPFU5NDE0PiA8VTk0MTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkJQwCis8VTk0NzE+IDxVOTQ3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mRsTAKKzxVOTU2MT4gPFU5NTYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZWhMAorPFU5NTc1PiA8VTk1NzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplbUwCis8VTk5NUU+IDxVOTk1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mlnjAKKzxVOTk4Qj4gPFU5OThCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aaLMjkwCis8VTM4OUY+IDxVMzg5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OinzAKKzxVMzk4Mz4gPFUzOTgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46aDMAorPFUzQkM2PiA8VTNCQzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjr4YwCis8VTNFNEM+IDxVM0U0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O5jDAKKzxVM0U3RD4gPFUzRTdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47m9MAorPFU0MkIyPiA8VTQyQjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkirIwCis8VTQ0MkU+IDxVNDQyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SQrjAKKzxVNDQ0RT4gPFU0NDRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JGOMAorPFU0OTE4PiA8VTQ5MTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpJgwCis8VTQ5NDA+IDxVNDk0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SlgDAKKzxVNEE3Nj4gPFU0QTc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Km2MAorPFU0RDNDPiA8VTREM0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktLwwCis8VTRENTA+IDxVNEQ1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S1kDAKKzxVNEUzMz4gPFU0RTMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LizMAorPFU0RUE3PiA8VTRFQTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuqcyNzkxNgorPFU1MTgxPiA8VTUxODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhoExCis8VTUyMkM+IDxVNTIyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WIrDIKKzxVNTI1Nz4gPFU1MjU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YmXNgorPFU1Mjc3PiA8VTUyNzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlibcxCis8VTU1NzQ+IDxVNTU3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WVtDAKKzxVNTYzRD4gPFU1NjNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Zi9MAorPFU1NkM1PiA8VTU2QzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlm4UwCis8VTVEN0M+IDxVNUQ3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W1vDAKKzxVNUU1RD4gPFU1RTVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bmdMAorPFU2NDRDPiA8VTY0NEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkYwwCis8VTY1RjU+IDxVNjVGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aXtTAKKzxVNkQ1MD4gPFU2RDUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rWQMAorPFU2RUZCPiA8VTZFRkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmu7swCis8VTcwNUI+IDxVNzA1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eBmzAKKzxVNzFDMD4gPFU3MUMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54eAMAorPFU3NTIyPiA8VTc1MjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlKIxMTQKKzxVNzUyMz4gPFU3NTIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55SjMAorPFU3QzA1PiA8VTdDMDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsIUwCis8VTdFNUY+IDxVN0U1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5nzAKKzxVODQ4Nz4gPFU4NDg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JKHMAorPFU4NTQ2PiA8VTg1NDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolYYxMAorPFU4QUMyPiA8VThBQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoq4IxCis8VThCNDI+IDxVOEI0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+itgjAKKzxVOEI4Nz4gPFU4Qjg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K6HMAorPFU4QzA0PiA8VThDMDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosIQxMDgKKzxVOTFBNj4gPFU5MUE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YamMAorPFU5M0RGPiA8VTkzREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpj58wCis8VTk0RjI+IDxVOTRGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mTsjM4OQorPFU5NUIzPiA8VTk1QjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplrMwCis8VTk1RTE+IDxVOTVFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mXoTYKKzxVOTYxMD4gPFU5NjEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZiQNzg1Cis8VTlBQTM+IDxVOUFBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mqozEKKzxVMzY3ND4gPFUzNjc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45m0MAorPFUzQjA0PiA8VTNCMDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrIQwCis8VTNENEM+IDxVM0Q0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O1jDAKKzxVNDAyMT4gPFU0MDIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IChMAorPFU0ODI4PiA8VTQ4Mjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoKgwCis8VTRBOUM+IDxVNEE5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SqnDAKKzxVNEM3Rj4gPFU0QzdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LG/MAorPFU1MTMzPiA8VTUxMzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhLMwCis8VTVGQ0Y+IDxVNUZDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W/jzQ5OQorPFU2MUY0PiA8VTYxRjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmh7QwCis8VTYxRkE+IDxVNjFGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aHujEKKzxVNzg1Rj4gPFU3ODVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56GfMAorPFU3RkJDPiA8VTdGQkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvrwyNAorPFU5N0MyPiA8VTk3QzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpn4IxCis8VTk4NkI+IDxVOTg2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mhqzMzCis8VTRGMjU+IDxVNEYyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S8pTI0Cis8VTUwMDA+IDxVNTAwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAgDAKKzxVNUEzQz4gPFU1QTNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ai8MzcyCis8VTY2MEM+IDxVNjYwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aYjDQwODEKKzxVNjY3Rj4gPFU2NjdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pm/MAorPFU2REQwPiA8VTZERDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmt5AwCis8VTczMTY+IDxVNzMxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eMljI3OAorPFU3NDI5PiA8VTc0Mjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkKkwCis8VTgzRDY+IDxVODNENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPljE4Cis8VTg4RUU+IDxVODhFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ijrjAKKzxVOTMyOT4gPFU5MzI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YypMAorPFU5NTIwPiA8VTk1MjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplKAwCis8VTk1QjY+IDxVOTVCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mWtjAKKzxVOTYwQT4gPFU5NjBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZiKMTIKKzxVOUJFNz4gPFU5QkU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a+nMAorPFU5Q0IzPiA8VTlDQjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsrMyCis8VTlGMUE+IDxVOUYxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m8mjAKKzxVMzY0QT4gPFUzNjRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45mKMAorPFUzOTgyPiA8VTM5ODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpoIwCis8VTQ1QzU+IDxVNDVDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SXhTAKKzxVNDgwNj4gPFU0ODA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KCGMAorPFU0QkY0PiA8VTRCRjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkr7QwCis8VTRFRTc+IDxVNEVFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S7pzAKKzxVNTA3Rj4gPFU1MDdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YG/MTgxOAorPFU1MTFGPiA8VTUxMUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhJ8yCis8VTUxNEY+IDxVNTE0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WFjzAKKzxVNTYxNz4gPFU1NjE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZiXNDAKKzxVNTY5MD4gPFU1NjkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZqQOAorPFU1ODM0PiA8VTU4MzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloLQyNzMKKzxVNTg3Mj4gPFU1ODcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aGyMAorPFU1QUU2PiA8VTVBRTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlq6YzNDEKKzxVNUMxRD4gPFU1QzFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bCdMzU1OQorPFU1RTM4PiA8VTVFMzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluLg1Njk1NQorPFU1RjlDPiA8VTVGOUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvpw5MAorPFU3NDdBPiA8VTc0N0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkbowCis8VTc0RkE+IDxVNzRGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eTujAKKzxVNzUxRT4gPFU3NTFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55SeMAorPFU3Q0JCPiA8VTdDQkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsrsyCis8VTgwQTA+IDxVODBBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iCoDE4NzQKKzxVODE3OD4gPFU4MTc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IW4MTEKKzxVODE5Mz4gPFU4MTkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IaTMAorPFU4MkNDPiA8VTgyQ0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi4w1Cis8VTg0MDc+IDxVODQwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iQhzAKKzxVODhGMz4gPFU4OEYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KOzMTE0NworPFU5MkZGPiA8VTkyRkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpi78wCis8VTkzREI+IDxVOTNEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mPmzAKKzxVOTU3Nz4gPFU5NTc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZW3MTA0MAorPFU5NTc4PiA8VTk1Nzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplbgwCis8VTk1N0Y+IDxVOTU3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mVvzUxODYzCis8VTlDNjg+IDxVOUM2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxqDAKKzxVOUNCRj4gPFU5Q0JGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bK/MAorPFUzQUU0PiA8VTNBRTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjq6QwCis8VTQ1NEI+IDxVNDU0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SVizAKKzxVNDgwMD4gPFU0ODAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KCAMAorPFU1MEQ4PiA8VTUwRDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlg5gwCis8VTUzODI+IDxVNTM4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WOgjQ5NTkKKzxVNTNCMD4gPFU1M0IwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y6wMAorPFU1NzNBPiA8VTU3M0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnLo0MDc5NworPFU1RUUwPiA8VTVFRTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlu6AxOQorPFU2MEREPiA8VTYwREQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmg50xMAorPFU2NTVFPiA8VTY1NUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlZ4xMDc5Cis8VTY2MzY+IDxVNjYzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aYtjAKKzxVNkMwNT4gPFU2QzA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rCFNjcKKzxVOTJGOT4gPFU5MkY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Yu5MAorPFU0QTY4PiA8VTRBNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqagwCis8VTUwMjE+IDxVNTAyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAoTg4NAorPFU1NTMxPiA8VTU1MzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllLExMDczNworPFU2MDA1PiA8VTYwMDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgIU2NzgKKzxVNjBCNT4gPFU2MEI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oK1MgorPFU2NkEyPiA8VTY2QTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmqIxMworPFU3MTNCPiA8VTcxM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhLswCis8VTczOUE+IDxVNzM5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eOmjAKKzxVNzU0NT4gPFU3NTQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55WFMTk4OQorPFU3NTdDPiA8VTc1N0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlbwwCis8VThBQUY+IDxVOEFBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iqrzAKKzxVOTdEND4gPFU5N0Q0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z+UMAorPFU5QjJGPiA8VTlCMkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprK8xCis8VTUyN0Y+IDxVNTI3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WJvzYyOAorPFU1MkU2PiA8VTUyRTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPli6YwCis8VTVGMjg+IDxVNUYyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W8qDAKKzxVNjAwQT4gPFU2MDBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oCKMAorPFU2Mjg0PiA8VTYyODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmioQyNTM3Cis8VTY0Nzc+IDxVNjQ3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aRtzAKKzxVNkIyOT4gPFU2QjI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qypMAorPFU3RUYwPiA8VTdFRjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnu7A3NzgKKzxVN0Y3QT4gPFU3RjdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5726MAorPFU4QTJDPiA8VThBMkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqKwwCis8VThEODU+IDxVOEQ4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i2hTExMjAyCis8VTkyMTQ+IDxVOTIxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mIlDEzCis8VTk0OUU+IDxVOTQ5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mSnjcwNAorPFU0MTNCPiA8VTQxM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhLswCis8VTRCMjQ+IDxVNEIyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SspDAKKzxVNEMyQj4gPFU0QzJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LCrMAorPFU1NjMyPiA8VTU2MzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmLIyMTUwCis8VTVERTI+IDxVNURFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W3ojYyMgorPFU1REUzPiA8VTVERTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlt6MwCis8VTY2NDE+IDxVNjY0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aZgTEwNzUKKzxVNkExND4gPFU2QTE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qiUMAorPFU2RjZFPiA8VTZGNkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmva40OTgwCis8VTZGRTQ+IDxVNkZFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a/pDI5Cis8VThCM0Y+IDxVOEIzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+isvzAKKzxVOEY0OD4gPFU4RjQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L2IMAorPFU5MTFCPiA8VTkxMUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphJswCis8VTlGMDI+IDxVOUYwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m8gjAKKzxVOUYwQz4gPFU5RjBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6byMMAorPFUzREE0PiA8VTNEQTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtqQwCis8VTNEQzU+IDxVM0RDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O3hTAKKzxVNDM5MD4gPFU0MzkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I6QMAorPFU0M0RBPiA8VTQzREE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkj5owCis8VTU0MzU+IDxVNTQzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WQtTM0NDQKKzxVNUREMD4gPFU1REQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5beQMAorPFU3MDkyPiA8VTcwOTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngpIxNDk4Cis8VTcxN0M+IDxVNzE3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eFvDAKKzxVNzcyNz4gPFU3NzI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55ynMAorPFU3OTg5PiA8VTc5ODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpokwCis8VTlFQTg+IDxVOUVBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6qDAKKzxVNEVFNj4gPFU0RUU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LumMAorPFU0RUVGPiA8VTRFRUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPku68wCis8VTgwMTY+IDxVODAxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iAljAKKzxVODlEOD4gPFU4OUQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KeYMAorPFU0RjIxPiA8VTRGMjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvKEwCis8VTRGRTU+IDxVNEZFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S/pTAKKzxVNTUxMz4gPFU1NTEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZSTMAorPFU3ODE3PiA8VTc4MTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoJcxNworPFU3ODY4PiA8VTc4Njg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoagwCis8VTgzOTc+IDxVODM5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iOlzAKKzxVODZGQz4gPFU4NkZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ju8MAorPFU4RUNBPiA8VThFQ0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPou4o0NDYKKzxVOEY2Nj4gPFU4RjY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L2mNDU2MTQKKzxVM0EwQj4gPFUzQTBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46iLMAorPFUzRDU0PiA8VTNENTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtZQwCis8VTQyRjI+IDxVNDJGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SLsjAKKzxVNDdBMz4gPFU0N0EzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J6jMAorPFU0QzI5PiA8VTRDMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksKkwCis8VTUwNTY+IDxVNTA1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WBljAKKzxVNTk3Mj4gPFU1OTcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aWyMAorPFU2MjZGPiA8VTYyNkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmia8zMzM5Cis8VTY0QTY+IDxVNjRBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aSpjAKKzxVMzUyRD4gPFUzNTJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45StMAorPFUzOTQ5PiA8VTM5NDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpYkwCis8VTNCMUE+IDxVM0IxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OsmjAKKzxVM0JEOT4gPFUzQkQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46+ZMAorPFUzQzRDPiA8VTNDNEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsYwwCis8VTNENDM+IDxVM0Q0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O1gzAKKzxVM0Y5RD4gPFUzRjlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj476dMAorPFUzRkVEPiA8VTNGRUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjv60wCis8VTQwNjQ+IDxVNDA2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SBpDAKKzxVNDQ3Mj4gPFU0NDcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JGyMAorPFU0NDg2PiA8VTQ0ODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkoYwCis8VTQ2QTI+IDxVNDZBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SaojAKKzxVNDZGOD4gPFU0NkY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ju4MAorPFU0NzIwPiA8VTQ3MjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknKAwCis8VTQ5RUE+IDxVNDlFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SnqjAKKzxVNEEwMT4gPFU0QTAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KiBMAorPFU1MkY2PiA8VTUyRjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPli7YwCis8VTU3N0M+IDxVNTc3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WdvDIKKzxVNUM2RT4gPFU1QzZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bGuMAorPFU1RjdCPiA8VTVGN0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvbs0NzM3Cis8VTVGQjk+IDxVNUZCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W+uTcxCis8VTYzQTM+IDxVNjNBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aOozE3NQorPFU2NEE0PiA8VTY0QTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkqQzMTg0Cis8VTZGODg+IDxVNkY4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a+iDU1OQorPFU3MEYyPiA8VTcwRjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPng7IwCis8VTcyMjE+IDxVNzIyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eIoTAKKzxVNzdBRT4gPFU3N0FFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj556uMAorPFU3ODY5PiA8VTc4Njk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoakwCis8VTgwNDU+IDxVODA0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iBhTAKKzxVOEY0RD4gPFU4RjREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L2NMQorPFU4RkUwPiA8VThGRTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPov6AwCis8VTk4MTk+IDxVOTgxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mgmTAKKzxVNTVEND4gPFU1NUQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZeUMzc4Cis8VTU4MTQ+IDxVNTgxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WglDAKKzxVNjJCQj4gPFU2MkJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oq7NjIKKzxVNjQzNz4gPFU2NDM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pC3MAorPFU2OEZEPiA8VTY4RkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmo70wCis8VTc0MUI+IDxVNzQxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eQmzI3MgorPFU3NzhCPiA8VTc3OEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnosxCis8VTgwQzI+IDxVODBDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iDgjAKKzxVOEFDMz4gPFU4QUMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KuDMAorPFU4QjEzPiA8VThCMTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorJMwCis8VThDREQ+IDxVOENERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iznTAKKzxVOTBGND4gPFU5MEY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YO0MTUKKzxVMzU3ND4gPFUzNTc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45W0MAorPFUzQUYzPiA8VTNBRjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjq7MwCis8VTNDODA+IDxVM0M4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OygDAKKzxVM0QzND4gPFUzRDM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47S0MAorPFUzRjc4PiA8VTNGNzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvbgwCis8VTQxQTM+IDxVNDFBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SGozAKKzxVNDQ5RT4gPFU0NDlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JKeMAorPFU0Njk4PiA8VTQ2OTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmpgwCis8VTQ3MUY+IDxVNDcxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ScnzAKKzxVNDdFMj4gPFU0N0UyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J+iMAorPFU0ODg1PiA8VTQ4ODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkooUwCis8VTQ4ODg+IDxVNDg4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SiiDAKKzxVNDhCQj4gPFU0OEJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KK7MAorPFU0OEM1PiA8VTQ4QzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPko4UwCis8VTQ5MUY+IDxVNDkxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SknzAKKzxVNEYxND4gPFU0RjE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LyUMAorPFU1ODc1PiA8VTU4NzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlobU1MgorPFU1QTIwPiA8VTVBMjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqKAyNgorPFU1QkI4PiA8VTVCQjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrrgxNworPFU1QzE4PiA8VTVDMTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsJg3MTUwCis8VTVDNTI+IDxVNUM1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WxkjAKKzxVNUZGMT4gPFU1RkYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b+xMTk4Cis8VTYxMTY+IDxVNjExNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aEljAKKzxVNjU1MD4gPFU2NTUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pWQMAorPFU2NTc2PiA8VTY1NzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlbYwCis8VTY2Njg+IDxVNjY2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aZqDY3NjkKKzxVNjZERj4gPFU2NkRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pufMAorPFU2QTA0PiA8VTZBMDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqIQwCis8VTZDODk+IDxVNkM4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ayiTE4NzUzCis8VTcxNDE+IDxVNzE0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eFgTAKKzxVODFFMz4gPFU4MUUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IejNzIxMworPFU4MzFFPiA8VTgzMUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojJ4wCis8VTgzODA+IDxVODM4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iOgDAKKzxVODM5MD4gPFU4MzkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I6QMAorPFU4NTJGPiA8VTg1MkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolK80Cis8VTg1QkM+IDxVODVCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iWvDAKKzxVODdCND4gPFU4N0I0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J60MAorPFU4QTI2PiA8VThBMjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqKYwCis8VThBRjY+IDxVOEFGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+irtjAKKzxVOEMwQz4gPFU4QzBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LCMMjgKKzxVOEVEOT4gPFU4RUQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LuZMAorPFU4RkIwPiA8VThGQjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovrAyMjIwCis8VThGRTc+IDxVOEZFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i/pzAKKzxVOTIwMj4gPFU5MjAyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YiCMAorPFU5NjQ4PiA8VTk2NDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmYgxNDE5NQorPFU5NjczPiA8VTk2NzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmbMxMTgKKzxVOTcwMz4gPFU5NzAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZyDMAorPFU5REQwPiA8VTlERDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpt5AwCis8VTlFOEU+IDxVOUU4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6jjAKKzxVNEFENj4gPFU0QUQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KuWMAorPFU1ODhCPiA8VTU4OEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlooswCis8VTYzNzU+IDxVNjM3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aNtTAKKzxVNzg5Qz4gPFU3ODlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56KcNzMKKzxVNzhFMz4gPFU3OEUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56OjMAorPFU4OEQ2PiA8VTg4RDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo5YwCis8VThEMDI+IDxVOEQwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i0gjAKKzxVOERCQj4gPFU4REJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6La7MAorPFU4RTM4PiA8VThFMzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouLgwCis8VTkzNTY+IDxVOTM1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mNljAKKzxVMzlGMT4gPFUzOUYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46exMAorPFU0NzhCPiA8VTQ3OEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknoswCis8VTUxMkQ+IDxVNTEyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WErTAKKzxVNTZBQj4gPFU1NkFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZqrMAorPFU1OTI2PiA8VTU5MjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpKYwCis8VTY5ODc+IDxVNjk4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+amhzMKKzxVNkFFQz4gPFU2QUVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qusMAorPFU3NUEyPiA8VTc1QTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlqIwCis8VTc5RjA+IDxVNzlGMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ensDExNzUzCis8VTdBMzE+IDxVN0EzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eosTE1NAorPFU3QTZBPiA8VTdBNkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqaowCis8VTg1RkQ+IDxVODVGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iXvTAKKzxVODg2Qz4gPFU4ODZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KGsMjAyNworPFU4OTZGPiA8VTg5NkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopa8xNgorPFU4Qjk2PiA8VThCOTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorpYyCis8VThDMzY+IDxVOEMzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwtjU0Cis8VThEODE+IDxVOEQ4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i2gTIwNTEKKzxVOEQ4Mj4gPFU4RDgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LaCMAorPFU5RjUzPiA8VTlGNTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvZMwCis8VTlGNTQ+IDxVOUY1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m9lDAKKzxVOUY4MD4gPFU5RjgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b6AMQorPFU1MDQxPiA8VTUwNDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgYEwCis8VTU3RTU+IDxVNTdFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfpTAKKzxVNUQxRD4gPFU1RDFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bSdMAorPFU2MTg2PiA8VTYxODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhoYwCis8VTY0NUE+IDxVNjQ1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aRmjAKKzxVNjQ5MD4gPFU2NDkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pKQMzAKKzxVNjQ5MT4gPFU2NDkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pKRMjIwMworPFU2N0ZEPiA8VTY3RkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmn701Cis8VTY4RTY+IDxVNjhFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ajpjAKKzxVNkE1NT4gPFU2QTU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qmVMAorPFU2QTg5PiA8VTZBODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqokwCis8VTZDREY+IDxVNkNERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aznzAKKzxVNkQ3RT4gPFU2RDdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rW+MAorPFU2RTVFPiA8VTZFNUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuZ4wCis8VTcyMkY+IDxVNzIyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eIrzAKKzxVNzI1QT4gPFU3MjVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54maMQorPFU3MjVDPiA8VTcyNUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniZwwCis8VTc0MjQ+IDxVNzQyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eQpDgKKzxVNzdBMD4gPFU3N0EwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj556gMTY0Cis8VTdBQzA+IDxVN0FDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ergDEKKzxVN0RGRD4gPFU3REZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57e9MAorPFU4NkNGPiA8VTg2Q0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPom480Cis8VTg3RjY+IDxVODdGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iftjAKKzxVOEQ2QT4gPFU4RDZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LWqMQorPFU4RDZDPiA8VThENkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotawwCis8VTkzRkY+IDxVOTNGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mPvzAKKzxVOTQzQT4gPFU5NDNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZC6MworPFU5NERCPiA8VTk0REI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpk5syMTcKKzxVOTYzNz4gPFU5NjM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Zi3MAorPFU5NzU3PiA8VTk3NTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnZcwCis8VTk4MzM+IDxVOTgzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mgszAKKzxVOTk1Mz4gPFU5OTUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aWTMAorPFUzN0JDPiA8VTM3QkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnrwwCis8VTNBMDM+IDxVM0EwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OogzAKKzxVM0M4Mj4gPFUzQzgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47KCMAorPFUzRjI5PiA8VTNGMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvKkwCis8VTQwNEU+IDxVNDA0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SBjjAKKzxVNDEwNz4gPFU0MTA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ISHMAorPFU0MTkxPiA8VTQxOTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhpEwCis8VTQxQjU+IDxVNDFCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SGtTAKKzxVNDFCOD4gPFU0MUI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ia4MAorPFU0MUY4PiA8VTQxRjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkh7gwCis8VTQ1MzI+IDxVNDUzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SUsjAKKzxVNDVDQT4gPFU0NUNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JeKMAorPFU0OUQ1PiA8VTQ5RDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkp5UwCis8VTRBQzY+IDxVNEFDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SrhjAKKzxVNEJBQT4gPFU0QkFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K6qMAorPFU0RTFFPiA8VTRFMUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuJ4zOTIKKzxVNEU1Nz4gPFU0RTU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LmXMAorPFU0RTU4PiA8VTRFNTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuZg1NzQ3Cis8VTU0NDg+IDxVNTQ0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRiDE5NzIKKzxVNTdDRT4gPFU1N0NFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z+OMjM2NDIKKzxVNTdENT4gPFU1N0Q1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z+VMworPFU1ODE4PiA8VTU4MTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloJgwCis8VTU4NEQ+IDxVNTg0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WhjTEzCis8VTU4NTY+IDxVNTg1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WhljAKKzxVNUEwRD4gPFU1QTBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aiNMAorPFU1QkFDPiA8VTVCQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrqwwCis8VTVDRjg+IDxVNUNGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WzuDAKKzxVNjBFOT4gPFU2MEU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oOpMTQxMQorPFU2MTk1PiA8VTYxOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhpUwCis8VTYxRjI+IDxVNjFGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aHsjE0Cis8VTYyMTA+IDxVNjIxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aIkDEwOTQ4MgorPFU2MjdGPiA8VTYyN0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmib8xMTUyMgorPFU2MzMwPiA8VTYzMzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjLAwCis8VTYzODE+IDxVNjM4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aOgTAKKzxVNjNFOD4gPFU2M0U4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+oMAorPFU2NjVGPiA8VTY2NUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmZ84MgorPFU2NjYwPiA8VTY2NjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmaAwCis8VTY3QTg+IDxVNjdBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aeqDMKKzxVNjhENj4gPFU2OEQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qOWMAorPFU2OTA5PiA8VTY5MDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpIkwCis8VTZBNTk+IDxVNkE1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+apmTQ3OAorPFU2RDA2PiA8VTZEMDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtIYwCis8VTZENDg+IDxVNkQ0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a1iDAKKzxVNkY4Mj4gPFU2RjgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r6CMAorPFU2Rjg0PiA8VTZGODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvoQxMDE5Cis8VTcwMTM+IDxVNzAxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eAkzAKKzxVNzNGNT4gPFU3M0Y1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54+1MAorPFU3M0Y5PiA8VTczRjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnj7k0Cis8VTc1N0I+IDxVNzU3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eVuzAKKzxVNzZEQj4gPFU3NkRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55ubMzQwOAorPFU3QTBCPiA8VTdBMEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqIs0NTEzNworPFU3QTlBPiA8VTdBOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqpowCis8VTdCNkM+IDxVN0I2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+etrDAKKzxVN0Q3RT4gPFU3RDdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57W+MAorPFU4MTAwPiA8VTgxMDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohIAwCis8VTgxMkQ+IDxVODEyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iErTAKKzxVODM3Rj4gPFU4MzdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I2/MAorPFU4OENFPiA8VTg4Q0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo44xNgorPFU4QUEwPiA8VThBQTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqqAyNworPFU4QkRBPiA8VThCREE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor5o1NjgwCis8VTkwRDU+IDxVOTBENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mDlTAKKzxVOTE3Mj4gPFU5MTcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YWyMAorPFU5MkVFPiA8VTkyRUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpi64wCis8VTk0RDY+IDxVOTRENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mTljAKKzxVOUEyQz4gPFU5QTJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aisMAorPFU0RkIxPiA8VTRGQjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvrEwCis8VTU4NjM+IDxVNTg2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WhozAKKzxVNUVCMT4gPFU1RUIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bqxMAorPFU1RjhFPiA8VTVGOEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvo4wCis8VTYwOUM+IDxVNjA5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aCnDAKKzxVNzc0OD4gPFU3NzQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj552IMAorPFU5MDFFPiA8VTkwMUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgJ4zNDQKKzxVOUEwMT4gPFU5QTAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aiBMAorPFU5QThCPiA8VTlBOEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqosxNTgKKzxVMzQzQz4gPFUzNDNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45C8MAorPFU0MDE1PiA8VTQwMTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgJUwCis8VTc5RTQ+IDxVNzlFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+enpDIyNworPFU1NDAzPiA8VTU0MDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkIM0MTUwOAorPFU1NEU3PiA8VTU0RTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlk6c2NDQKKzxVNTVBQj4gPFU1NUFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZarNAorPFU1NUU0PiA8VTU1RTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPll6Q0MjcKKzxVNTY0ND4gPFU1NjQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZmEMAorPFU1OTlCPiA8VTU5OUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlppswCis8VTVBQjg+IDxVNUFCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WquDMKKzxVNUY2OD4gPFU1RjY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b2oMAorPFU1RjcyPiA8VTVGNzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvbIwCis8VTY0NUI+IDxVNjQ1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aRmzAKKzxVNzRGQj4gPFU3NEZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55O7MQorPFU3NUY0PiA8VTc1RjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnl7QyNzM4Cis8VTc2NjE+IDxVNzY2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eZoTEwCis8VTc3MzU+IDxVNzczNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ectTQKKzxVNzc5RD4gPFU3NzlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj556dMAorPFU3QjFFPiA8VTdCMUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrJ40MAorPFU3RDdBPiA8VTdEN0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntbowCis8VTg2QTk+IDxVODZBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iaqTIyCis8VTg3QUQ+IDxVODdBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ierTEyCis8VThBMzU+IDxVOEEzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iotTAKKzxVOEFCQT4gPFU4QUJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Kq6MAorPFU4Q0JFPiA8VThDQkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosr4wCis8VTkwRDc+IDxVOTBENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mDlzEyCis8VTlCNTE+IDxVOUI1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mtkTE4Cis8VTlEMUY+IDxVOUQxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m0nzAKKzxVOUQ0ND4gPFU5RDQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bWEMAorPFU5RTMxPiA8VTlFMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuLExNworPFU5RUI2PiA8VTlFQjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpurYwCis8VTlFRDA+IDxVOUVEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7kDEKKzxVOUY1RD4gPFU5RjVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b2dMAorPFU5Rjc5PiA8VTlGNzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvbkwCis8VTM0RkU+IDxVMzRGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OTvjAKKzxVMzY1Qz4gPFUzNjVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45mcMAorPFUzN0I0PiA8VTM3QjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnrQwCis8VTM4QUU+IDxVMzhBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OirjAKKzxVM0I5Qj4gPFUzQjlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj466bMAorPFU0MjE1PiA8VTQyMTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiJUwCis8VTQ0MjQ+IDxVNDQyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SQpDAKKzxVNDUxRj4gPFU0NTFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JSfMAorPFU0NjU5PiA8VTQ2NTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmZkwCis8VTQ2QzI+IDxVNDZDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SbgjAKKzxVNDcwND4gPFU0NzA0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JyEMAorPFU0N0JFPiA8VTQ3QkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknr4wCis8VTRBQTc+IDxVNEFBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SqpzAKKzxVNEI4OD4gPFU0Qjg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K6IMAorPFU0RDk0PiA8VTREOTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktpQwCis8VTREQjU+IDxVNERCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S2tTAKKzxVNEZGRj4gPFU0RkZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L+/MAorPFU1MzE5PiA8VTUzMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljJkxNTk4Cis8VTU3N0I+IDxVNTc3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WduzgKKzxVNTg4MD4gPFU1ODgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aKANjAKKzxVNUNCQj4gPFU1Q0JCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bK7MAorPFU1RjFCPiA8VTVGMUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvJs0OTAKKzxVNUZBNT4gPFU1RkE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b6lMAorPFU1RkIyPiA8VTVGQjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvrIwCis8VTVGRUY+IDxVNUZFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W/rzAKKzxVNjMwMT4gPFU2MzAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oyBMjY3MDAKKzxVNjgxOD4gPFU2ODE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qCYMAorPFU2QjZEPiA8VTZCNkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmra0wCis8VTZDNjA+IDxVNkM2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+axoDM1NTUKKzxVNkM2Nj4gPFU2QzY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rGmMAorPFU2Q0IxPiA8VTZDQjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsrE4MworPFU2Q0IyPiA8VTZDQjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsrIwCis8VTc1QzQ+IDxVNzVDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eXhDEKKzxVN0FGRT4gPFU3QUZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56u+MAorPFU3QjQyPiA8VTdCNDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrYIwCis8VTdCODg+IDxVN0I4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+euiDAKKzxVN0I4RT4gPFU3QjhFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj566OMQorPFU3QkVBPiA8VTdCRUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnr6o2MAorPFU4MDFCPiA8VTgwMUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogJswCis8VTgzMEM+IDxVODMwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iMjDM1Cis8VTgzNEU+IDxVODM0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iNjjAKKzxVODY5ND4gPFU4Njk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JqUMAorPFU4NkIzPiA8VTg2QjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomrMwCis8VThCMTg+IDxVOEIxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ismDAKKzxVOEQ3Rj4gPFU4RDdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LW/MAorPFU4RDhEPiA8VThEOEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoto0wCis8VThFMUY+IDxVOEUxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i4nzI4Cis8VThGREY+IDxVOEZERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i/nzU5NTAKKzxVOTA0NT4gPFU5MDQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YGFMAorPFU5MDVGPiA8VTkwNUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgZ8wCis8VTkwNzI+IDxVOTA3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mBsjQyCis8VTk5QjM+IDxVOTlCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mmszE2Cis8VTlBNzA+IDxVOUE3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mpsDE0MzAKKzxVMzYxQz4gPFUzNjFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45icMAorPFUzN0MyPiA8VTM3QzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjn4IwCis8VTM4ODE+IDxVMzg4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OigTAKKzxVMzg4Qj4gPFUzODhCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46KLMAorPFUzQzQwPiA8VTNDNDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsYAwCis8VTNDQ0Y+IDxVM0NDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OzjzAKKzxVM0RCND4gPFUzREI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47a0MAorPFU0MkJDPiA8VTQyQkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkirwwCis8VTQ0NUI+IDxVNDQ1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SRmzAKKzxVNDczNT4gPFU0NzM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Jy1MAorPFU0NzNCPiA8VTQ3M0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknLswCis8VTRGMkM+IDxVNEYyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S8rDAKKzxVNEY4OD4gPFU0Rjg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L6IMzQ2Cis8VTUwODI+IDxVNTA4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WCgjAKKzxVNTNGQT4gPFU1M0ZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y+6MQorPFU1NDRFPiA8VTU0NEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkY44NAorPFU1NzkxPiA8VTU3OTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnpEwCis8VTU5RkM+IDxVNTlGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WnvDAKKzxVNUMzQT4gPFU1QzNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bC6MzExNworPFU2MDQwPiA8VTYwNDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgYAwCis8VTYwNjU+IDxVNjA2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBpTEwCis8VTYyNjE+IDxVNjI2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aJoTAKKzxVNjJGOD4gPFU2MkY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ou4MAorPFU2NDBCPiA8VTY0MEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkIswCis8VTZCM0M+IDxVNkIzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+asvDAKKzxVNkI2Rj4gPFU2QjZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q2vMAorPFU3QzhFPiA8VTdDOEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnso4wCis8VTgwM0I+IDxVODAzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iAuzI2NzEKKzxVODY4Nz4gPFU4Njg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JqHMAorPFU4OEIzPiA8VTg4QjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoorMwCis8VTg4RUQ+IDxVODhFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ijrTAKKzxVODkyQj4gPFU4OTJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KSrMTUKKzxVOEE4Mz4gPFU4QTgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KqDMAorPFU4QzQ5PiA8VThDNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosYkxNworPFU5Mjc5PiA8VTkyNzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpibkwCis8VTlEOTI+IDxVOUQ5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m2kjAKKzxVOUY1Mj4gPFU5RjUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b2SMTcKKzxVOUY3Rj4gPFU5RjdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b2/MjU2MQorPFUzNDg2PiA8VTM0ODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkoYwCis8VTM0RkM+IDxVMzRGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OTvDAKKzxVMzUxMT4gPFUzNTExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45SRMAorPFUzN0JGPiA8VTM3QkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnr8wCis8VTM4N0Y+IDxVMzg3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OhvzAKKzxVM0Y1QT4gPFUzRjVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj472aMAorPFU0MUZDPiA8VTQxRkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkh7wwCis8VTQ1RDY+IDxVNDVENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SXljAKKzxVNDdGNz4gPFU0N0Y3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J+3MAorPFU0ODIwPiA8VTQ4MjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoKAwCis8VTQ5MzI+IDxVNDkzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SksjAKKzxVNEJCQj4gPFU0QkJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K67MAorPFU0QzIxPiA8VTRDMjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksKEwCis8VTRDRjU+IDxVNENGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SztTAKKzxVNEY5OT4gPFU0Rjk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L6ZMAorPFU1MEJBPiA8VTUwQkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgroyCis8VTUyQzU+IDxVNTJDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WLhTEKKzxVNTJEMT4gPFU1MkQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YuRMAorPFU1M0YxPiA8VTUzRjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlj7ExNzMKKzxVNTU3Qj4gPFU1NTdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZW7ODAKKzxVNUY3Mz4gPFU1RjczPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b2zMTIKKzxVNjA1Qz4gPFU2MDVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oGcMAorPFU2MTU3PiA8VTYxNTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhZcwCis8VTYxOEY+IDxVNjE4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aGjzAKKzxVNjFEOD4gPFU2MUQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oeYMAorPFU2MjIwPiA8VTYyMjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiKAwCis8VTYyQjY+IDxVNjJCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aKtjAKKzxVNjQ3MD4gPFU2NDcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pGwMAorPFU2NTU1PiA8VTY1NTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlZU3NgorPFU2NUE1PiA8VTY1QTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlqUyMTc1Cis8VTY3NTg+IDxVNjc1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+admDAKKzxVNjgzQj4gPFU2ODNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qC7MQorPFU2REQ0PiA8VTZERDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmt5QwCis8VTcwN0I+IDxVNzA3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eBuzAKKzxVNzBCRD4gPFU3MEJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54K9Njc4Cis8VTcwRkU+IDxVNzBGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eDvjAKKzxVNzFCRT4gPFU3MUJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54a+MQorPFU3NUQzPiA8VTc1RDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnl5MwCis8VTc1Rjg+IDxVNzVGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eXuDAKKzxVNzYxQj4gPFU3NjFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55ibMgorPFU3NzE5PiA8VTc3MTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnJkzCis8VTdGQzQ+IDxVN0ZDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e/hDAKKzxVN0ZDNT4gPFU3RkM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57+FMTQyNworPFU3RkU0PiA8VTdGRTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnv6QwCis8VTgxNUY+IDxVODE1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iFnzAKKzxVOEQ2ND4gPFU4RDY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LWkMzE5OQorPFU4REE5PiA8VThEQTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotqkwCis8VThERUU+IDxVOERFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i3rjAKKzxVOTA2Qj4gPFU5MDZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YGrMAorPFU5MjUzPiA8VTkyNTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiZMwCis8VTkyOTA+IDxVOTI5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mKkDAKKzxVOThFRD4gPFU5OEVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aOtMAorPFU5OTZDPiA8VTk5NkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppaw1NQorPFU5RDYzPiA8VTlENjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptaMwCis8VTlERDg+IDxVOUREOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m3mDAKKzxVNTBBRD4gPFU1MEFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YKtMgorPFU1MTQ1PiA8VTUxNDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhYUxMTUzNAorPFU1MUIyPiA8VTUxQjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhrIxNTUxOQorPFU1NjAzPiA8VTU2MDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmIMwCis8VTVGQjg+IDxVNUZCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W+uDAKKzxVNUZFMT4gPFU1RkUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b+hMjc3Cis8VTYxQTc+IDxVNjFBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aGpzMzNworPFU2NDRGPiA8VTY0NEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkY8wCis8VTZDOTY+IDxVNkM5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ayljM3Cis8VTZEN0E+IDxVNkQ3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a1ujAKKzxVNkU2Nz4gPFU2RTY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rmnMjUKKzxVNzNFQj4gPFU3M0VCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54+rMAorPFU3OTRDPiA8VTc5NEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpYwwCis8VTdGQzA+IDxVN0ZDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e/gDAKKzxVODIwMj4gPFU4MjAyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IiCMzUKKzxVODI1Rj4gPFU4MjVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ImfMAorPFU4MzNBPiA8VTgzM0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojLowCis8VTg4NUQ+IDxVODg1RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ihnTgxCis8VThFNTY+IDxVOEU1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i5ljAKKzxVMzRGRD4gPFUzNEZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45O9MAorPFUzRTUwPiA8VTNFNTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuZAwCis8VTQzMkM+IDxVNDMyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SMrDAKKzxVNDU5RD4gPFU0NTlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JadMAorPFU0Q0VGPiA8VTRDRUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPks68wCis8VTVEMDc+IDxVNUQwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W0hzI5NjIKKzxVNUQwOD4gPFU1RDA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bSIMAorPFU2RjM0PiA8VTZGMzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvLQwCis8VTc1Q0I+IDxVNzVDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eXizAKKzxVODY2Qj4gPFU4NjZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JmrMzkyNworPFU4NzY5PiA8VTg3Njk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonakwCis8VTg3RjI+IDxVODdGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ifsjE4Cis8VTg5MDg+IDxVODkwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ikiDAKKzxVOTY4MD4gPFU5NjgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZqAMAorPFU1N0VCPiA8VTU3RUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPln6swCis8VTVCQTA+IDxVNUJBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WuoDEyNTcKKzxVNUJGNT4gPFU1QkY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a+1NAorPFUzOUU0PiA8VTM5RTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjp6QwCis8VTYzRjA+IDxVNjNGMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aPsDAKKzxVOTI4Mz4gPFU5MjgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YqDMAorPFU5NEYzPiA8VTk0RjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpk7M3MAorPFU1QTY0PiA8VTVBNjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqaQwCis8VTYyQkQ+IDxVNjJCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aKvTgyNTMKKzxVNjQwQT4gPFU2NDBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pCKMAorPFU3MkE4PiA8VTcyQTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniqgxCis8VTcyQUI+IDxVNzJBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eKqzAKKzxVNzYzMz4gPFU3NjMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55izMQorPFU3QkQ4PiA8VTdCRDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnr5gwCis8VTkxOTQ+IDxVOTE5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mGlDAKKzxVMzQxQz4gPFUzNDFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45CcMAorPFUzNkY2PiA8VTM2RjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjm7YwCis8VTM5M0Q+IDxVMzkzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OkvTAKKzxVMzk5RT4gPFUzOTlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46aeMAorPFUzQTM2PiA8VTNBMzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqLYwCis8VTNENUU+IDxVM0Q1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O1njAKKzxVM0ZFNz4gPFUzRkU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47+nMAorPFU0MUZBPiA8VTQxRkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkh7owCis8VTQyQUQ+IDxVNDJBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SKrTAKKzxVNDMyNz4gPFU0MzI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IynMAorPFU0NEQzPiA8VTQ0RDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkk5MwCis8VTQ2RUM+IDxVNDZFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SbrDAKKzxVNDk1Mj4gPFU0OTUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KWSMAorPFU0Qzk2PiA8VTRDOTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkspYwCis8VTRFQzc+IDxVNEVDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S7hzMxNDYKKzxVNEZFNj4gPFU0RkU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L+mOAorPFU1MTE0PiA8VTUxMTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhJQwCis8VTU2OEI+IDxVNTY4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WaizAKKzxVNUIyNj4gPFU1QjI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aymMAorPFU1RTMxPiA8VTVFMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluLEwCis8VTVFNkM+IDxVNUU2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W5rDAKKzxVNjBDNj4gPFU2MEM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oOGMzAyCis8VTYxMDE+IDxVNjEwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aEgTI4MjgKKzxVNjFFND4gPFU2MUU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oekMAorPFU2ODI2PiA8VTY4MjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoKYwCis8VTY5MDY+IDxVNjkwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+akhjIKKzxVNzFGRD4gPFU3MUZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54e9MAorPFU3NTc0PiA8VTc1NzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlbQ0NTAKKzxVNzU4Nz4gPFU3NTg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55aHNQorPFU3Njk3PiA8VTc2OTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmpcwCis8VTdBMjA+IDxVN0EyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eooDM1NgorPFU3Qjc5PiA8VTdCNzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrbkxNzIzCis8VTdDNEM+IDxVN0M0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+exjDMKKzxVN0QyQz4gPFU3RDJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57SsMAorPFU3RDUyPiA8VTdENTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntZIwCis8VTdEQTI+IDxVN0RBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e2ojIKKzxVN0VGOD4gPFU3RUY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57u4OTg2Cis8VTgzRDc+IDxVODNENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPlzAKKzxVODVCNT4gPFU4NUI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ja1MAorPFU4OEVGPiA8VTg4RUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo68xCis8VThBNzY+IDxVOEE3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iptjAKKzxVOEI4RT4gPFU4QjhFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K6OMQorPFU4QjkwPiA8VThCOTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorpAwCis8VThFMEM+IDxVOEUwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i4jDM3MAorPFU4RThBPiA8VThFOEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouoozCis8VTkxNjc+IDxVOTE2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mFpzAKKzxVOTE2Qz4gPFU5MTZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YWsOTk5Cis8VTkxQkI+IDxVOTFCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mGuzAKKzxVOTZEND4gPFU5NkQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZuUMAorPFU5NkUwPiA8VTk2RTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpm6A3Cis8VTlCQzg+IDxVOUJDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mviDAKKzxVNEFBRT4gPFU0QUFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KquMAorPFU0RTExPiA8VTRFMTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuJEzMjg4Cis8VTRFMTI+IDxVNEUxMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S4kjAKKzxVNEZCND4gPFU0RkI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L60MAorPFU1NDFDPiA8VTU0MUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkJw3Cis8VTY3N0I+IDxVNjc3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aduzAKKzxVNjc3RD4gPFU2NzdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p29MAorPFU3Nzg1PiA8VTc3ODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnoU4NjgKKzxVNzdDMT4gPFU3N0MxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+BMAorPFU4M0E1PiA8VTgzQTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojqUwCis8VTkxOUM+IDxVOTE5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mGnDI5Cis8VTlCNTc+IDxVOUI1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mtlzAKKzxVNDUwRj4gPFU0NTBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JSPMAorPFU2MUIxPiA8VTYxQjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhrEwCis8VTZCQTA+IDxVNkJBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+auoDAKKzxVNkVCND4gPFU2RUI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rq0MTkKKzxVODFFRD4gPFU4MUVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IetMzAyNworPFU4MUYwPiA8VTgxRjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoh7AwCis8VTUxRkE+IDxVNTFGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WHujIwOTM3MgorPFU1MjFEPiA8VTUyMUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliJ0xNjI2NgorPFU1QzgwPiA8VTVDODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsoAwCis8VTZBMTc+IDxVNkExNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aolzcKKzxVOEM5OT4gPFU4Qzk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LKZMAorPFU5RjYzPiA8VTlGNjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvaMwCis8VTM1NEY+IDxVMzU0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OVjzAKKzxVMzU1MT4gPFUzNTUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45WRMAorPFUzODYxPiA8VTM4NjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoaEwCis8VTNEODY+IDxVM0Q4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O2hjAKKzxVM0YyNT4gPFUzRjI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47ylMAorPFU0MTczPiA8VTQxNzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhbMwCis8VTQzOUQ+IDxVNDM5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SOnTAKKzxVNDNBND4gPFU0M0E0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I6kMAorPFU0N0RFPiA8VTQ3REU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkn54wCis8VTQ4MDI+IDxVNDgwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SggjAKKzxVNDgyNz4gPFU0ODI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KCnMAorPFU1MTMyPiA8VTUxMzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhLI1Cis8VTUyMEQ+IDxVNTIwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WIjTcyCis8VTUzQTg+IDxVNTNBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WOqDI2MDMKKzxVNThCOD4gPFU1OEI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aK4MAorPFU1RTZFPiA8VTVFNkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlua4wCis8VTVFREE+IDxVNUVEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W7mjQ5Cis8VTYwNzk+IDxVNjA3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBuTEzMgorPFU2MUU4PiA8VTYxRTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmh6g0Cis8VTZBNzE+IDxVNkE3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+apsTY4MgorPFU2QUM5PiA8VTZBQzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmq4kwCis8VTZBRTU+IDxVNkFFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+arpTgKKzxVNkVDMT4gPFU2RUMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ruBMjAKKzxVNzI5Mz4gPFU3MjkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54qTMAorPFU3QkU4PiA8VTdCRTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnr6gwCis8VTgwMUQ+IDxVODAxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iAnTAKKzxVODAyMT4gPFU4MDIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IChMAorPFU4MkJCPiA8VTgyQkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoirswCis8VTg0QTI+IDxVODRBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iSojAKKzxVODRBRD4gPFU4NEFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JKtMAorPFU4NTRGPiA8VTg1NEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolY8wCis8VTg1Rjg+IDxVODVGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iXuDAKKzxVODcwRD4gPFU4NzBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JyNMTcKKzxVODgyOT4gPFU4ODI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KCpMAorPFU4RDhFPiA8VThEOEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoto4wCis8VThERTY+IDxVOERFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i3pjAKKzxVOEU3MD4gPFU4RTcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LmwMzAKKzxVOEU4Nz4gPFU4RTg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LqHMzY5Cis8VThFOTU+IDxVOEU5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6lTAKKzxVOTI0Rj4gPFU5MjRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YmPMAorPFU5MkU0PiA8VTkyRTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpi6QwCis8VTk1MDQ+IDxVOTUwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mUhDI4OAorPFU5NjY0PiA8VTk2NjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmaQxOTA0OAorPFU5NkNGPiA8VTk2Q0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpm48yMDcKKzxVOTZEQj4gPFU5NkRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZubMAorPFU5QkZBPiA8VTlCRkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpr7owCis8VTlEQjU+IDxVOURCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m2tTEKKzxVM0U3Qz4gPFUzRTdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47m8MAorPFU0MkIwPiA8VTQyQjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkirAwCis8VTQ1OEY+IDxVNDU4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SWjzAKKzxVNDY1OD4gPFU0NjU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JmYMAorPFU1MEE4PiA8VTUwQTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgqgyMTk4Cis8VTUxRTY+IDxVNTFFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WHpjAKKzxVNjFCNz4gPFU2MUI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oa3MTEKKzxVNjc3NT4gPFU2Nzc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p21MTAxCis8VTY5MTg+IDxVNjkxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+akmDAKKzxVNjk1QT4gPFU2OTVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qWaMTQ3OTkKKzxVNjk2RT4gPFU2OTZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qWuMTMKKzxVNkE5QT4gPFU2QTlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qqaMAorPFU2RkNCPiA8VTZGQ0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv4swCis8VTc4NDA+IDxVNzg0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ehgDUwMTcKKzxVNzkwRT4gPFU3OTBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56SOMjcKKzxVODY1NT4gPFU4NjU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JmVNDY0Cis8VTg5MUE+IDxVODkxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ikmjgyNQorPFU5RjZEPiA8VTlGNkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpva0wCis8VTlGN0M+IDxVOUY3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m9vDAKKzxVMzUxOD4gPFUzNTE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45SYMAorPFUzNUYwPiA8VTM1RjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjl7AwCis8VTM2NDc+IDxVMzY0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OZhzAKKzxVMzkxNT4gPFUzOTE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46SVMAorPFUzOTE4PiA8VTM5MTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpJgwCis8VTQ2NTU+IDxVNDY1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SZlTAKKzxVNDczND4gPFU0NzM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Jy0MAorPFU0N0UzPiA8VTQ3RTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkn6MwCis8VTQ5OEM+IDxVNDk4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SmjDAKKzxVNDlDMT4gPFU0OUMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KeBMAorPFU0QjlFPiA8VTRCOUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrp4wCis8VTRFOEQ+IDxVNEU4RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6jTcKKzxVNEZGNj4gPFU0RkY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L+2MQorPFU1MDk3PiA8VTUwOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgpcwCis8VTUxMEE+IDxVNTEwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WEijAKKzxVNTYzQz4gPFU1NjNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Zi8MAorPFU1OTA0PiA8VTU5MDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpIQ0OTE5NgorPFU2MDM1PiA8VTYwMzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgLU4MgorPFU2MkMwPiA8VTYyQzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmi4AwCis8VTY0MTA+IDxVNjQxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aQkDI3OQorPFU2NTRBPiA8VTY1NEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlYowCis8VTY1QjY+IDxVNjVCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWtjAKKzxVNkIyQT4gPFU2QjJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qyqMQorPFU2QjVDPiA8VTZCNUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrZwwCis8VTZDQ0Y+IDxVNkNDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+azjzAKKzxVNkVDMD4gPFU2RUMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ruAMAorPFU3NDIxPiA8VTc0MjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkKEwCis8VTc1NUM+IDxVNzU1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eVnDc3NgorPFU3N0Q3PiA8VTc3RDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnn5cyNTAKKzxVN0FDQz4gPFU3QUNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56uMMAorPFU3QUQwPiA8VTdBRDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnq5AwCis8VTdENDA+IDxVN0Q0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e1gDUwCis8VTdFQ0M+IDxVN0VDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e7jDM4Cis8VTgxQzU+IDxVODFDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iHhTAKKzxVODM3Mj4gPFU4MzcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I2yMAorPFU4OUU2PiA8VTg5RTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPop6Y2MjkyCis8VTg5Rjg+IDxVODlGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+inuDY2Cis8VThBNTg+IDxVOEE1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ipmDAKKzxVOEM1Nj4gPFU4QzU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LGWMAorPFU4RTAwPiA8VThFMDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouIAxCis8VTkwNUE+IDxVOTA1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mBmjAKKzxVOTExMD4gPFU5MTEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YSQMQorPFU5NUE2PiA8VTk1QTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplqYwCis8VTlFREM+IDxVOUVEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7nDgzCis8VTZCM0I+IDxVNkIzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+asuzAKKzxVNEFDND4gPFU0QUM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KuEMAorPFU2M0UzPiA8VTYzRTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmj6M4MjAKKzxVM0E5Mz4gPFUzQTkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46qTMAorPFU4MTk3PiA8VTgxOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohpcxCis8VTNBOUM+IDxVM0E5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OqnDAKKzxVNDk5Rj4gPFU0OTlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KafMAorPFU0OUE0PiA8VTQ5QTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpqQwCis8VTQ5Qjc+IDxVNDlCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SmtzAKKzxVNTYyQz4gPFU1NjJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZisNjkKKzxVOEUzOT4gPFU4RTM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Li5MjcxCis8VTVEREI+IDxVNUREQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W3mzAKKzxVNURERD4gPFU1REREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bedNjM1MgorPFU2QzFBPiA8VTZDMUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsJozCis8VTc0NEY+IDxVNzQ0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eRjzAKKzxVN0E3Rj4gPFU3QTdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56m/MTk4NzMKKzxVOTQwOT4gPFU5NDA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZCJMAorPFUzQkNDPiA8VTNCQ0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjr4wwCis8VTNGMzc+IDxVM0YzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O8tzAKKzxVNDA2Mz4gPFU0MDYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IGjMAorPFU0RjIwPiA8VTRGMjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvKAyMDAwMAorPFU1MEIzPiA8VTUwQjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgrMyMjIKKzxVNjZCNz4gPFU2NkI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pq3MAorPFU2OTNEPiA8VTY5M0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpL01OQorPFU2QjQyPiA8VTZCNDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrYIwCis8VTdCQzU+IDxVN0JDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+evhTAKKzxVODIyMT4gPFU4MjIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IihMgorPFU4MjI5PiA8VTgyMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiKkwCis8VTgyMzk+IDxVODIzOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iIuTExMTY3Cis8VThBRUY+IDxVOEFFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+irrzAKKzxVOEYzMj4gPFU4RjMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LyyMAorPFU5MDQ0PiA8VTkwNDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgYQzCis8VTNDNUI+IDxVM0M1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OxmzAKKzxVNTBFMj4gPFU1MEUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YOiMAorPFU1NTk4PiA8VTU1OTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllpgyMzQzCis8VTU4M0U+IDxVNTgzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WgvjAKKzxVODIxQj4gPFU4MjFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IibMjUKKzxVODM0OD4gPFU4MzQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I2IMAorPFU4NzdEPiA8VTg3N0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonb0xCis8VThFMzM+IDxVOEUzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i4szAKKzxVNEUzMj4gPFU0RTMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LiyNDU4OAorPFU2QzRDPiA8VTZDNEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsYwwCis8VTczOTQ+IDxVNzM5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eOlDAKKzxVOENENz4gPFU4Q0Q3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LOXMAorPFU5MUU3PiA8VTkxRTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPph6c0Cis8VTk0OEY+IDxVOTQ4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mSjzIxNAorPFU1MjA1PiA8VTUyMDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliIUwCis8VTUyMzE+IDxVNTIzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WIsTAKKzxVNTI0Rj4gPFU1MjRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YmPMAorPFU1Mjc1PiA8VTUyNzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlibUxNDkKKzxVNTZFQT4gPFU1NkVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZuqMAorPFU2MTgzPiA8VTYxODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhoMwCis8VTYyMjc+IDxVNjIyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aIpzAKKzxVNjQ1MD4gPFU2NDUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pGQMAorPFU3MjRFPiA8VTcyNEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniY4xMAorPFU3MjU1PiA8VTcyNTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniZUwCis8VTc1QUU+IDxVNzVBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eWrjM5MgorPFU3NjIxPiA8VTc2MjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmKE0Cis8VTdBOTM+IDxVN0E5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eqkzAKKzxVN0E5Nz4gPFU3QTk3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56qXMTgwNjEKKzxVN0FCQj4gPFU3QUJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56q7MAorPFUzODU2PiA8VTM4NTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoZYwCis8VTQwRTU+IDxVNDBFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SDpTAKKzxVNDY5Mj4gPFU0NjkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JqSMAorPFU0ODc0PiA8VTQ4NzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkobQwCis8VTRCNUE+IDxVNEI1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+StmjAKKzxVNTY0Nz4gPFU1NjQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZmHMgorPFU1RTYyPiA8VTVFNjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluaI5OTYKKzxVNUU4QT4gPFU1RThBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bqKMTM3NzcKKzxVNkE2Nj4gPFU2QTY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qmmMAorPFU3MjQwPiA8VTcyNDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniYAwCis8VTc1OTI+IDxVNzU5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eWkjIKKzxVM0Q0Mj4gPFUzRDQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47WCMAorPFU0MUVDPiA8VTQxRUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkh6wwCis8VTY0MzY+IDxVNjQzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aQtjU1Cis8VTY0NjQ+IDxVNjQ2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aRpDAKKzxVNkYzQT4gPFU2RjNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ry6MAorPFU5NUQ2PiA8VTk1RDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl5Y5Cis8VTk1RUY+IDxVOTVFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mXrzI0NDkKKzxVNDNBQj4gPFU0M0FCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I6rMAorPFU1MjFCPiA8VTUyMUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliJsxMDE2NgorPFU1MjU5PiA8VTUyNTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliZkwCis8VTYwMDY+IDxVNjAwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aAhjE5MAorPFU2MTM0PiA8VTYxMzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhLQwCis8VTczNEE+IDxVNzM0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eNijAKKzxVNTQzOT4gPFU1NDM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZC5Nzk1NAorPFU3MDhBPiA8VTcwOEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngoozNjcKKzxVOUZBMT4gPFU5RkExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b6hMAorPFUzNEMzPiA8VTM0QzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjk4MwCis8VTM3N0Q+IDxVMzc3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OdvTAKKzxVMzk2OD4gPFUzOTY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46WoMAorPFUzQTdFPiA8VTNBN0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqb4wCis8VTQxMzI+IDxVNDEzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SEsjAKKzxVNDM0Qj4gPFU0MzRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I2LMAorPFU0Q0UwPiA8VTRDRTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPks6AwCis8VTUwMTU+IDxVNTAxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAlTAKKzxVNTcwQz4gPFU1NzBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZyMMAorPFU1NzgyPiA8VTU3ODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnoIzNDc5Cis8VTU3QzA+IDxVNTdDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfgDAKKzxVNUEzNz4gPFU1QTM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ai3MAorPFU2Mzc2PiA8VTYzNzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjbY0MTgKKzxVNjQyNT4gPFU2NDI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pClMTIKKzxVNjg1OD4gPFU2ODU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qGYMgorPFU2OEYwPiA8VTY4RjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmo7AxOAorPFU2OTBFPiA8VTY5MEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpI4xODUKKzxVNjlDQz4gPFU2OUNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qeMMTM5Cis8VTZFNzc+IDxVNkU3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a5tzAKKzxVNzUwMD4gPFU3NTAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55SAMAorPFU3QkEwPiA8VTdCQTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrqAxCis8VTgxNDQ+IDxVODE0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iFhDAKKzxVODNEOT4gPFU4M0Q5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I+ZMAorPFU5MzE4PiA8VTkzMTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjJgxCis8VTkzOUE+IDxVOTM5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mOmjAKKzxVOTUyND4gPFU5NTI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZSkNjg5Cis8VTk2NzI+IDxVOTY3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mZsjM5Cis8VTk4NDA+IDxVOTg0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mhgDAKKzxVNDdCQz4gPFU0N0JDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J68MAorPFU4QUM4PiA8VThBQzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoq4gwCis8VTVBOEI+IDxVNUE4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WqizAKKzxVNjVGRT4gPFU2NUZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pe+MAorPFU2NjI1PiA8VTY2MjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmKUxMzY1NgorPFU2Njk5PiA8VTY2OTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmpkwCis8VTY3NzY+IDxVNjc3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+adtjAKKzxVNjkzRj4gPFU2OTNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qS/MTM2Cis8VTZBQzQ+IDxVNkFDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+arhDAKKzxVNzExRT4gPFU3MTFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54SeMAorPFU3NDQzPiA8VTc0NDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkYMzCis8VTdCQkE+IDxVN0JCQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+euujAKKzxVODFBNT4gPFU4MUE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IalMAorPFU4NDA1PiA8VTg0MDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokIUxCis8VThGMzQ+IDxVOEYzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i8tDAKKzxVOUMwNj4gPFU5QzA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bCGMAorPFU5RDlFPiA8VTlEOUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptp4wCis8VTM3NDQ+IDxVMzc0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OdhDAKKzxVMzc0Nz4gPFUzNzQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj452HMAorPFUzRDZFPiA8VTNENkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjta4wCis8VTNFMkE+IDxVM0UyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O4qjAKKzxVNDNERD4gPFU0M0REPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I+dMAorPFU0NDA3PiA8VTQ0MDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkIcwCis8VTQ0RDA+IDxVNDREMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+STkDAKKzxVNDUxQT4gPFU0NTFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JSaMAorPFU0OEU4PiA8VTQ4RTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPko6gwCis8VTQ4RTk+IDxVNDhFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SjqTAKKzxVNDk0RT4gPFU0OTRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KWOMAorPFU0QUMzPiA8VTRBQzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkq4MwCis8VTU1MDc+IDxVNTUwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUhzQxNTUKKzxVNjE4Qz4gPFU2MThDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oaMMAorPFU2RDcxPiA8VTZENzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtbEwCis8VTZERjM+IDxVNkRGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3szI5MworPFU2RTdCPiA8VTZFN0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmubswCis8VTZFRTM+IDxVNkVFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a7ozAKKzxVNkYxOD4gPFU2RjE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ryYMAorPFU3RDE0PiA8VTdEMTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntJQ2NAorPFU3RUFGPiA8VTdFQUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuq83NzQyCis8VTgxMjM+IDxVODEyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iEozIKKzxVODNCQz4gPFU4M0JDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I68MzcKKzxVODQ5Mz4gPFU4NDkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JKTMAorPFU4NEY0PiA8VTg0RjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPok7QwCis8VTkxODc+IDxVOTE4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mGhzI4MworPFU5MTk1PiA8VTkxOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphpUwCis8VTkzMUU+IDxVOTMxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mMnjAKKzxVOTY1OT4gPFU5NjU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZmZMAorPFU5QkQ5PiA8VTlCRDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpr5kwCis8VTlEODk+IDxVOUQ4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m2iTEKKzxVOUU1MT4gPFU5RTUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bmRNjIKKzxVMzVCQT4gPFUzNUJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45a6MAorPFUzRkU0PiA8VTNGRTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjv6QwCis8VTQxMUQ+IDxVNDExRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SEnTAKKzxVNDNEQj4gPFU0M0RCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I+bMAorPFU0NDBGPiA8VTQ0MEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkI8wCis8VTQ3OTA+IDxVNDc5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SekDAKKzxVNDlBRT4gPFU0OUFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KauMAorPFU1MDQ2PiA8VTUwNDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgYYwCis8VTYwRjc+IDxVNjBGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aDtzAKKzxVNzc3Nj4gPFU3Nzc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5522MAorPFU4NDM2PiA8VTg0MzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokLYwCis8VTg4MjI+IDxVODgyMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+igojE5MjkKKzxVNjIzMz4gPFU2MjMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oizNTc3Cis8VThFMTQ+IDxVOEUxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i4lDUKKzxVMzY5Rj4gPFUzNjlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45qfMAorPFUzQzhCPiA8VTNDOEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsoswCis8VTQwOTA+IDxVNDA5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SCkDAKKzxVNDBENz4gPFU0MEQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IOXMAorPFU0MTJBPiA8VTQxMkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhKowCis8VTQxQUY+IDxVNDFBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SGrzAKKzxVNDFDRD4gPFU0MUNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IeNMAorPFU0MkQ4PiA8VTQyRDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPki5gwCis8VTQzNzM+IDxVNDM3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SNszAKKzxVNDRDRT4gPFU0NENFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JOOMAorPFU0Qjk1PiA8VTRCOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrpUwCis8VTU0Mzc+IDxVNTQzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WQtzAKKzxVNTU1Qz4gPFU1NTVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZWcNDA4Cis8VTU2QkQ+IDxVNTZCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WavTAKKzxVNUExNj4gPFU1QTE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aiWMQorPFU1QTY1PiA8VTVBNjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqaUwCis8VTVBN0M+IDxVNUE3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WpvDAKKzxVNjBEOT4gPFU2MEQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oOZNAorPFU2NEM5PiA8VTY0Qzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmk4kwCis8VTZCNjA+IDxVNkI2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+atoDAKKzxVNkRCMD4gPFU2REIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rawMAorPFU3M0ZGPiA8VTczRkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnj78wCis8VTc1Nzc+IDxVNzU3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eVtzAKKzxVNzhFRD4gPFU3OEVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56OtMAorPFU3REJEPiA8VTdEQkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntr0wCis8VTdFNUI+IDxVN0U1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5mzAKKzxVODE0Rj4gPFU4MTRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IWPMAorPFU4QUMxPiA8VThBQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoq4EwCis8VThEQTA+IDxVOERBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i2oDAKKzxVOEYxRj4gPFU4RjFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LyfMAorPFU4RjhEPiA8VThGOEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovo05MAorPFU4RkI1PiA8VThGQjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovrUwCis8VThGQjY+IDxVOEZCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i+tjUzCis8VTkwMzQ+IDxVOTAzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mAtDEKKzxVOTE2Qj4gPFU5MTZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YWrMAorPFU5MThBPiA8VTkxOEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphoowCis8VTk0NjE+IDxVOTQ2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mRoTAKKzxVOUY2QT4gPFU5RjZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b2qMAorPFU5RjcxPiA8VTlGNzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvbE0Cis8VTlGOEE+IDxVOUY4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m+ijE5MAorPFU1NDcyPiA8VTU0NzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkbI5NworPFU1RTlCPiA8VTVFOUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlupsyCis8VTc1QjU+IDxVNzVCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eWtTEzOQorPFU4RDdDPiA8VThEN0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotbwzCis8VThEODA+IDxVOEQ4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i2gDAKKzxVOUFCND4gPFU5QUI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aq0MAorPFUzNEU4PiA8VTM0RTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjk6gwCis8VTM2MDI+IDxVMzYwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OYgjAKKzxVMzYzOT4gPFUzNjM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45i5MAorPFUzOTM1PiA8VTM5MzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpLUwCis8VTQwQTM+IDxVNDBBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SCozAKKzxVNDE4NT4gPFU0MTg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IaFMAorPFU0MjE4PiA8VTQyMTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiJgwCis8VTQ1QUE+IDxVNDVBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SWqjAKKzxVNDZEMD4gPFU0NkQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JuQMAorPFU0OUYzPiA8VTQ5RjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkp7MwCis8VTRBMEY+IDxVNEEwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SojzAKKzxVNEI2Mz4gPFU0QjYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K2jMAorPFU0Q0JGPiA8VTRDQkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksr8wCis8VTRDQzQ+IDxVNENDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SzhDAKKzxVNTE3OT4gPFU1MTc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YW5MjA0MAorPFU1NzkwPiA8VTU3OTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnpAwCis8VTVCMjg+IDxVNUIyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WsqDAKKzxVNjE0OD4gPFU2MTQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oWIMTc1NworPFU2N0IxPiA8VTY3QjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnrExCis8VTY3Q0M+IDxVNjdDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+afjDAKKzxVNkZFOD4gPFU2RkU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r+oMgorPFU3M0MxPiA8VTczQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnj4EwCis8VTc0Rjc+IDxVNzRGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eTtzg1MQorPFU3NTA2PiA8VTc1MDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlIYwCis8VTc4QzE+IDxVNzhDMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ejgTQ3NjAKKzxVNzkyMD4gPFU3OTIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56SgMAorPFU3OTYwPiA8VTc5NjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpaAzMDQKKzxVN0NBMj4gPFU3Q0EyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57KiNAorPFU3Q0NEPiA8VTdDQ0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPns40xNgorPFU4MzA4PiA8VTgzMDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojIgwCis8VTgzMjg+IDxVODMyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iMqDExNDYKKzxVODU4Qj4gPFU4NThCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JaLMAorPFU4QTVFPiA8VThBNUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqZ41NAorPFU4QkNEPiA8VThCQ0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor405Mjg5Cis8VThGOUQ+IDxVOEY5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i+nTAKKzxVOEY5RT4gPFU4RjlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L6eNTAyOQorPFU4RkE0PiA8VThGQTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovqQwCis8VThGQUQ+IDxVOEZBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i+rTU3Cis8VTk2Q0M+IDxVOTZDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mbjDMzMgorPFU5OEZBPiA8VTk4RkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpo7owCis8VTk5MDg+IDxVOTkwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mkiDAKKzxVOURDMD4gPFU5REMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6beAMAorPFU5RTVBPiA8VTlFNUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuZoxMgorPFUzODNGPiA8VTM4M0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoL8wCis8VTRGNEM+IDxVNEY0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S9jDAKKzxVNkI2ND4gPFU2QjY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q2kNzU2NDIKKzxVNkNEQT4gPFU2Q0RBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rOaMQorPFU3M0JDPiA8VTczQkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjrwwCis8VTc2ODk+IDxVNzY4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eaiTAKKzxVOEREMD4gPFU4REQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LeQNworPFUzNzk2PiA8VTM3OTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnpYwCis8VTM4Nzk+IDxVMzg3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OhuTAKKzxVMzg4MD4gPFUzODgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46KAMAorPFUzQTVFPiA8VTNBNUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqZ4wCis8VTNFNDI+IDxVM0U0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O5gjAKKzxVNDRFNz4gPFU0NEU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JOnMAorPFU0NUY5PiA8VTQ1Rjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkl7kwCis8VTQ5QkI+IDxVNDlCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SmuzAKKzxVNEJGOD4gPFU0QkY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K+4MAorPFU0QzBEPiA8VTRDMEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksI0wCis8VTRDRDA+IDxVNENEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SzkDAKKzxVNEYzQT4gPFU0RjNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ly6MTU3OAorPFU0RjdEPiA8VTRGN0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvb0wCis8VTUyM0E+IDxVNTIzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WIujczMjcKKzxVNTIzRT4gPFU1MjNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Yi+MAorPFU2NzNGPiA8VTY3M0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnL8wCis8VTY4Mjg+IDxVNjgyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+agqDAKKzxVNkIyMT4gPFU2QjIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qyhNjg0MzYKKzxVN0Q1OD4gPFU3RDU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57WYMAorPFU4M0JGPiA8VTgzQkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojr8wCis8VTg2OUQ+IDxVODY5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ianTIwCis8VTg2RDM+IDxVODZEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ibkzAKKzxVODc4NT4gPFU4Nzg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J6FMTAKKzxVODc4Nj4gPFU4Nzg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J6GMAorPFU4Q0RDPiA8VThDREM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPos5wxOQorPFU4RDUwPiA8VThENTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotZAxNjUzCis8VTUzMDY+IDxVNTMwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WMhjQ1MTEKKzxVNTZGMT4gPFU1NkYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZuxMjE0Cis8VTVGOUU+IDxVNUY5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W+njY0MAorPFU1RkU5PiA8VTVGRTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv6kwCis8VTYwMzE+IDxVNjAzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aAsTAKKzxVNjBBND4gPFU2MEE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oKkMAorPFU2NkIwPiA8VTY2QjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmrAwCis8VTY3OUU+IDxVNjc5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aenjQ5Cis8VTY4Qzc+IDxVNjhDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ajhzAKKzxVNkEwNT4gPFU2QTA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qiFMAorPFU2QTJDPiA8VTZBMkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqKwwCis8VTZGMTc+IDxVNkYxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a8lzAKKzxVNzEyNz4gPFU3MTI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54SnMAorPFU3MTlDPiA8VTcxOUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhpwwCis8VTcxRUE+IDxVNzFFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHqjAKKzxVNzQ3RD4gPFU3NDdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55G9MgorPFU3NDgxPiA8VTc0ODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkoExCis8VTc3OUI+IDxVNzc5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eemzAKKzxVN0JGNT4gPFU3QkY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56+1MAorPFU3RENGPiA8VTdEQ0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnt48wCis8VTdERUI+IDxVN0RFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3qzAKKzxVN0U3MT4gPFU3RTcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57mxMAorPFU4MDYxPiA8VTgwNjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogaEwCis8VTgwNjY+IDxVODA2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iBpjAKKzxVODA2QT4gPFU4MDZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IGqNTEyNQorPFU4MDcwPiA8VTgwNzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogbAyNAorPFU4MkMxPiA8VTgyQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi4ExCis8VTg0NzE+IDxVODQ3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iRsTg4MAorPFU4NEVGPiA8VTg0RUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPok68xCis8VTg1MjU+IDxVODUyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iUpTUKKzxVODdDQz4gPFU4N0NDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J+MMAorPFU5MzQzPiA8VTkzNDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjYMwCis8VTkzNkY+IDxVOTM2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mNrzAKKzxVOTNEMz4gPFU5M0QzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+TMAorPFU5M0U2PiA8VTkzRTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpj6YwCis8VTlBMTg+IDxVOUExOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+momDAKKzxVOUE0ND4gPFU5QTQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6amEMAorPFU5QUEyPiA8VTlBQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqqIxNQorPFUzRjNCPiA8VTNGM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvLswCis8VTQyNTg+IDxVNDI1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SJmDAKKzxVNDU3QT4gPFU0NTdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JW6MAorPFU0Q0Y3PiA8VTRDRjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPks7cwCis8VTRFMUI+IDxVNEUxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S4mzI2MjkKKzxVNEVDRT4gPFU0RUNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LuOMTAzNDEzCis8VTUzRTI+IDxVNTNFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPojMwCis8VTVBNDM+IDxVNUE0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WpgzAKKzxVNUI2RT4gPFU1QjZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a2uMAorPFU1RjkzPiA8VTVGOTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvpMwCis8VTVGOTY+IDxVNUY5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W+ljAKKzxVNjBCMD4gPFU2MEIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oKwMAorPFU2MTUyPiA8VTYxNTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhZIwCis8VTZBMzc+IDxVNkEzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aotzAKKzxVNkREOT4gPFU2REQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5reZNzgKKzxVNkYwRT4gPFU2RjBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ryOMAorPFU2RjQwPiA8VTZGNDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvYAwCis8VTcwNDc+IDxVNzA0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eBhzAKKzxVNzIxQz4gPFU3MjFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54icMAorPFU3NDJFPiA8VTc0MkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkK41NQorPFU4QUI0PiA8VThBQjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqrQwCis8VThDRTg+IDxVOENFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+izqDAKKzxVOENFOT4gPFU4Q0U5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LOpMAorPFU5MzFEPiA8VTkzMUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjJ0yCis8VTZCMDk+IDxVNkIwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+asiTEKKzxVODVDMj4gPFU4NUMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JeCMAorPFU4QjI1PiA8VThCMjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorKUwCis8VTNBRjY+IDxVM0FGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OrtjAKKzxVNTFEMT4gPFU1MUQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YeRMjUzMworPFU2OTcxPiA8VTY5NzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpbEwCis8VTZFNEE+IDxVNkU0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a5ijE2Cis8VTgxNjA+IDxVODE2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iFoDUKKzxVOEYzMz4gPFU4RjMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LyzMAorPFU4RjhGPiA8VThGOEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovo8xMQorPFU3Qzk3PiA8VTdDOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnspc1MTI1Cis8VTg5RDU+IDxVODlENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+inlTAKKzxVOUU4MT4gPFU5RTgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bqBMAorPFU5RTg0PiA8VTlFODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuoQxCis8VTlFQTQ+IDxVOUVBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6pDAKKzxVNDREQT4gPFU0NERBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JOaMAorPFU0ODkwPiA8VTQ4OTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkopAwCis8VTVGODI+IDxVNUY4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W+gjcKKzxVNkI4Mj4gPFU2QjgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q6COQorPFU4QzYwPiA8VThDNjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosaAwCis8VTM1RTQ+IDxVMzVFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OXpDAKKzxVM0MxNz4gPFUzQzE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47CXMAorPFU0MERBPiA8VTQwREE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkg5owCis8VTQzOEM+IDxVNDM4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SOjDAKKzxVNDY2Rj4gPFU0NjZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JmvMAorPFU0NkU0PiA8VTQ2RTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkm6QwCis8VTQ3REY+IDxVNDdERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SfnzAKKzxVNDgxMz4gPFU0ODEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KCTMAorPFU0ODFFPiA8VTQ4MUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoJ4wCis8VTQ5NDQ+IDxVNDk0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SlhDAKKzxVNDk1OD4gPFU0OTU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KWYMAorPFU0QjI4PiA8VTRCMjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrKgwCis8VTRGQzM+IDxVNEZDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S/gzQxODkKKzxVNTM1Mj4gPFU1MzUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y2SNjQ2Cis8VTU2NDg+IDxVNTY0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WZiDAKKzxVNjg4MD4gPFU2ODgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qKAMAorPFU2QkE3PiA8VTZCQTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrqcwCis8VTczMUQ+IDxVNzMxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eMnTI1NgorPFU3NjA0PiA8VTc2MDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmIQwCis8VTc2MkY+IDxVNzYyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eYrzAKKzxVN0MwNz4gPFU3QzA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57CHODU3Cis8VTdFMkM+IDxVN0UyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e4rDAKKzxVODEyOD4gPFU4MTI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ISoMAorPFU4NTFGPiA8VTg1MUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolJ80Cis8VThEOTc+IDxVOEQ5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i2lzAKKzxVOERBOD4gPFU4REE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LaoMjAKKzxVOEUyNz4gPFU4RTI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LinMAorPFU4RTU5PiA8VThFNTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouZkyMjQKKzxVOEU3ND4gPFU4RTc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Lm0NTAKKzxVOTE2Mj4gPFU5MTYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YWiMTkKKzxVOTE4Qj4gPFU5MThCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YaLOTgyCis8VTkzQzM+IDxVOTNDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mPgzAKKzxVOUYwMD4gPFU5RjAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6byAMAorPFU2NEJBPiA8VTY0QkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkro5MQorPFU2NTFCPiA8VTY1MUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlJswCis8VTZDNDY+IDxVNkM0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+axhjUKKzxVOEU3Rj4gPFU4RTdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Lm/MjY1Cis8VThFQTU+IDxVOEVBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6pTAKKzxVOTJEMT4gPFU5MkQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YuRMAorPFU5NDc5PiA8VTk0Nzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkbkwCis8VTk1Njk+IDxVOTU2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mVqTEKKzxVMzgxRD4gPFUzODFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46CdMAorPFUzQjZCPiA8VTNCNkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjraswCis8VTQxOTg+IDxVNDE5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SGmDAKKzxVNEMxNj4gPFU0QzE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LCWMAorPFU1Mjk3PiA8VTUyOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlipcwCis8VTVERDE+IDxVNUREMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W3kTAKKzxVNjUwNT4gPFU2NTA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pSFMAorPFU2NTEyPiA8VTY1MTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlJI1NTkKKzxVNjUyMj4gPFU2NTIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pSiMQorPFU2QUQ1PiA8VTZBRDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmq5UwCis8VTZGRkQ+IDxVNkZGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a/vTEKKzxVNzA1Mj4gPFU3MDUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54GSMAorPFUzRDQwPiA8VTNENDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtYAwCis8VTNFMTE+IDxVM0UxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O4kTAKKzxVNkJBOT4gPFU2QkE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q6pMAorPFU3MUI2PiA8VTcxQjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhrYwCis8VTcyMjg+IDxVNzIyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eIqDExCis8VTdBOUM+IDxVN0E5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eqnDExOTEKKzxVN0FDND4gPFU3QUM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56uENAorPFU3QkUxPiA8VTdCRTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnr6EyODYKKzxVN0JGOT4gPFU3QkY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56+5MAorPFU3QzEyPiA8VTdDMTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsJIwCis8VTUwQUM+IDxVNTBBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WCrDE2MDIKKzxVNTVGQT4gPFU1NUZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ze6MAorPFU1ODk0PiA8VTU4OTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlopQwCis8VTVEMTQ+IDxVNUQxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W0lDEwMjkKKzxVNjQ2Nz4gPFU2NDY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pGnMTA2NgorPFU2OUIxPiA8VTY5QjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmprExCis8VTY5RUY+IDxVNjlFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+anrzAKKzxVNzM1NT4gPFU3MzU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj542VMgorPFU3OEVBPiA8VTc4RUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPno6owCis8VTdGMUU+IDxVN0YxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e8njAKKzxVOTNEOT4gPFU5M0Q5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+ZMAorPFU5NkI5PiA8VTk2Qjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmrk3Cis8VTUxRDc+IDxVNTFENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WHlzAKKzxVNjE1Qj4gPFU2MTVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oWbMAorPFUzRDRGPiA8VTNENEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtY8wCis8VTNEQzM+IDxVM0RDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O3gzAKKzxVNDJBQj4gPFU0MkFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IqrMAorPFU0OUZEPiA8VTQ5RkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkp70wCis8VTZGM0M+IDxVNkYzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a8vDAKKzxVNzQ4MD4gPFU3NDgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55KAMTA0Cis8VTc2QTA+IDxVNzZBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eaoDQKKzxVOERBMT4gPFU4REExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LahMAorPFUzNzZFPiA8VTM3NkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjna4wCis8VTM5NUU+IDxVMzk1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OlnjAKKzxVMzlEOD4gPFUzOUQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46eYMAorPFUzQkQ0PiA8VTNCRDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjr5QwCis8VTNCREM+IDxVM0JEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OvnDAKKzxVM0M1Nj4gPFUzQzU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47GWMAorPFUzQ0MzPiA8VTNDQzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjs4MwCis8VTNERUE+IDxVM0RFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O3qjAKKzxVNDBCMT4gPFU0MEIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IKxMAorPFU0MEMwPiA8VTQwQzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkg4AwCis8VTQxMUY+IDxVNDExRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SEnzAKKzxVNDE4QT4gPFU0MThBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IaKMAorPFU0RjFDPiA8VTRGMUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvJwwCis8VTUwMDU+IDxVNTAwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAhTAKKzxVNTU1MD4gPFU1NTUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZWQMjE2Cis8VTU1NUI+IDxVNTU1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WVmzAKKzxVNUZGMD4gPFU1RkYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b+wMAorPFU2MEI0PiA8VTYwQjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgrQ1NzkKKzxVNkE0Nz4gPFU2QTQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qmHNTQKKzxVNkJGMz4gPFU2QkYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q+zMjAKKzxVNkRFQz4gPFU2REVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5resMzkKKzxVNkZFMj4gPFU2RkUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r+iMAorPFU3MTIwPiA8VTcxMjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhKAwCis8VTc0MTc+IDxVNzQxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eQlzAKKzxVNzVBOT4gPFU3NUE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55apMAorPFU3NjAxPiA8VTc2MDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmIExMzAKKzxVN0FDMT4gPFU3QUMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56uBMAorPFU3QzhCPiA8VTdDOEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsoswCis8VTdDQjk+IDxVN0NCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eyuTE4OTYKKzxVN0QyMz4gPFU3RDIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57SjMAorPFU3REI3PiA8VTdEQjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntrcxCis8VTdGQzY+IDxVN0ZDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e/hjAKKzxVN0ZFMD4gPFU3RkUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57+gMjcyOAorPFU4MTAzPiA8VTgxMDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohIMwCis8VTgxMDY+IDxVODEwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iEhjM0MjkKKzxVODEzQT4gPFU4MTNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IS6MAorPFU4MUFDPiA8VTgxQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohqwwCis8VTgxQjU+IDxVODFCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iGtTAKKzxVODFDRT4gPFU4MUNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IeOMAorPFU4NDAzPiA8VTg0MDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokIMyNjgKKzxVODk0QT4gPFU4OTRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KWKMAorPFU5ODQ3PiA8VTk4NDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoYcwCis8VTY3NTE+IDxVNjc1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+adkTEyNzY3Cis8VTZGOEE+IDxVNkY4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a+ijAKKzxVNzZCND4gPFU3NkI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55q0MjIKKzxVN0FGND4gPFU3QUY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56u0MAorPFU5MEE4PiA8VTkwQTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgqg4Cis8VTVCNTg+IDxVNUI1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WtmDI3MjkxCis8VTg4Qjg+IDxVODhCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iiuDAKKzxVNTIwQz4gPFU1MjBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YiMMAorPFU1RkQ2PiA8VTVGRDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv5YzODEKKzxVNDM0RT4gPFU0MzRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I2OMAorPFU1NDBCPiA8VTU0MEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkIsxOQorPFU1QkY4PiA8VTVCRjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlr7gyMDUwCis8VTdDN0Y+IDxVN0M3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+exvzAKKzxVNjQxMz4gPFU2NDEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pCTNzU2Cis8VTY0QUU+IDxVNjRBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aSrjQzMgorPFU3OENCPiA8VTc4Q0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPno4s0MDgKKzxVODRBQj4gPFU4NEFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JKrNAorPFU4RTQ5PiA8VThFNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouYk1OQorPFU5MDczPiA8VTkwNzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgbMwCis8VTlBQ0E+IDxVOUFDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mrijAKKzxVMzdDNz4gPFUzN0M3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45+HMAorPFUzRjY4PiA8VTNGNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvagwCis8VTQ4MjE+IDxVNDgyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SgoTAKKzxVNDhEQz4gPFU0OERDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KOcMAorPFU0RDNFPiA8VTREM0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktL4wCis8VTVENkY+IDxVNUQ2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W1rzcKKzxVNUQ3Mz4gPFU1RDczPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bWzMAorPFU3NUU0PiA8VTc1RTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnl6QzCis8VTc3NDk+IDxVNzc0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ediTAKKzxVNzdFQz4gPFU3N0VDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+sMTEKKzxVODUxNj4gPFU4NTE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JSWMAorPFU4NjU4PiA8VTg2NTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomZgwCis8VTkxNDI+IDxVOTE0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mFgjAKKzxVOTE0Nz4gPFU5MTQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YWHMAorPFU5MTlEPiA8VTkxOUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphp0wCis8VTlFN0E+IDxVOUU3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m5ujAKKzxVOUU3RT4gPFU5RTdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bm+MworPFU0MEIzPiA8VTQwQjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgrMwCis8VTc0NzM+IDxVNzQ3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eRszAKKzxVNzg3MD4gPFU3ODcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56GwMAorPFU3RTEyPiA8VTdFMTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuJIwCis8VTgxMUU+IDxVODExRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iEnjIKKzxVNDQyMz4gPFU0NDIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JCjMAorPFU0N0Y2PiA8VTQ3RjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkn7YwCis8VTRDNUM+IDxVNEM1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SxnDAKKzxVNEZCMz4gPFU0RkIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L6zMAorPFU1MjQ5PiA8VTUyNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliYkwCis8VTUyNTI+IDxVNTI1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WJkjEKKzxVNTM5RD4gPFU1MzlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y6dMjUKKzxVNjMyQj4gPFU2MzJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oyrNzUwCis8VTYzQUE+IDxVNjNBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aOqjM3MTIKKzxVNkI3NT4gPFU2Qjc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q21MAorPFU4MzlEPiA8VTgzOUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojp0wCis8VTgzQTE+IDxVODNBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iOoTAKKzxVODRDQz4gPFU4NENDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JOMMAorPFU5MDJBPiA8VTkwMkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgKowCis8VTkyQkM+IDxVOTJCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mKvDAKKzxVOTMyRj4gPFU5MzJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YyvMTIwCis8VTk1MDk+IDxVOTUwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mUiTU5Cis8VTk1MTk+IDxVOTUxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mUmTIxMzMwCis8VTlGNzA+IDxVOUY3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m9sDAKKzxVNTQ5MT4gPFU1NDkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZKRMAorPFU1NEQyPiA8VTU0RDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlk5IzNDEKKzxVNTVEMj4gPFU1NUQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZeSNTQ3Cis8VTU2NjA+IDxVNTY2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WZoDE0Cis8VTU4QjY+IDxVNThCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WitjAKKzxVNjQyRD4gPFU2NDJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pCtNDAwNQorPFU2NDk4PiA8VTY0OTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkpgwCis8VTdCNTQ+IDxVN0I1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+etlDExNTk5Cis8VTgwMzc+IDxVODAzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iAtzIzOAorPFU4OTIxPiA8VTg5MjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopKE2NQorPFUzNzEzPiA8VTM3MTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnJMwCis8VTNCREE+IDxVM0JEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OvmjAKKzxVM0Y5MT4gPFUzRjkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj476RMAorPFUzRkVGPiA8VTNGRUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjv68wCis8VTQwRUU+IDxVNDBFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SDrjAKKzxVNDQwQT4gPFU0NDBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JCKMAorPFU0NDdEPiA8VTQ0N0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkb0wCis8VTRBNjI+IDxVNEE2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SpojAKKzxVNENGND4gPFU0Q0Y0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LO0MAorPFU0RDYzPiA8VTRENjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktaMwCis8VTUyNzM+IDxVNTI3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WJszAKKzxVNTMxMj4gPFU1MzEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YySMAorPFU1NDdFPiA8VTU0N0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkb4wCis8VTU5QjI+IDxVNTlCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WmsjU2Cis8VTYwMUI+IDxVNjAxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aAmzkKKzxVNkM5Mz4gPFU2QzkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rKTMjQ2Cis8VTZFOUE+IDxVNkU5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a6mjAKKzxVNzA5Rj4gPFU3MDlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54KfMAorPFU3NTU3PiA8VTc1NTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlZcwCis8VTc1NjM+IDxVNzU2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eVozAKKzxVNzYyOT4gPFU3NjI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55ipNTUxCis8VTdCMkE+IDxVN0IyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+esqjIKKzxVN0I5QT4gPFU3QjlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj566aMAorPFU3RTY4PiA8VTdFNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuagwCis8VTgzNDU+IDxVODM0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iNhTAKKzxVODM1OT4gPFU4MzU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I2ZMAorPFU4NTk4PiA8VTg1OTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolpgwCis8VTg3RkQ+IDxVODdGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ifvTAKKzxVODkxRj4gPFU4OTFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KSfMAorPFU4QTVBPiA8VThBNUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqZowCis8VThGQkU+IDxVOEZCRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i+vjI3NzI4Cis8VTkwMzk+IDxVOTAzOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mAuTAKKzxVOTA1ND4gPFU5MDU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YGUMjUxCis8VTkzOUQ+IDxVOTM5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mOnTAKKzxVOTQzRD4gPFU5NDNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZC9MAorPFU5NUQyPiA8VTk1RDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl5IwCis8VTk2MTg+IDxVOTYxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mYmDAKKzxVOTc3Qz4gPFU5NzdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z28MzYKKzxVOTc5MT4gPFU5NzkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z6RNjUKKzxVOTdDMz4gPFU5N0MzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z+DMAorPFU2MjUzPiA8VTYyNTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiZM3MTY1OQorPFU1OTI3PiA8VTU5Mjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpKcyOTM2NjEKKzxVNzcxND4gPFU3NzE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55yUMAorPFUzN0Y3PiA8VTM3Rjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjn7cwCis8VTU3QUY+IDxVNTdBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WerzAKKzxVNTg5Nj4gPFU1ODk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aKWMAorPFU3NUI4PiA8VTc1Qjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlrgxMgorPFU4REY2PiA8VThERjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPot7Y4Cis8VTU0NDY+IDxVNTQ0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRhjg3ODgKKzxVNTQ1ND4gPFU1NDU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZGUMjkKKzxVNTYxQT4gPFU1NjFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZiaMTYKKzxVNjFEQj4gPFU2MURCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oebMAorPFU3MzQzPiA8VTczNDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjYMwCis8VTQ2OUU+IDxVNDY5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SanjAKKzxVNDY5Rj4gPFU0NjlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JqfMAorPFU1MEEzPiA8VTUwQTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgqMzNAorPFU2Qjc5PiA8VTZCNzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrbk5MjYKKzxVOTAyRT4gPFU5MDJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YCuMTQxOAorPFUzNDMyPiA8VTM0MzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkLIwCis8VTM3QUQ+IDxVMzdBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OerTAKKzxVM0FGOT4gPFUzQUY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46u5MAorPFUzQkMyPiA8VTNCQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjr4IwCis8VTNEQTE+IDxVM0RBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O2oTAKKzxVM0VENj4gPFUzRUQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47uWMAorPFUzRkMzPiA8VTNGQzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjv4MwCis8VTQyMDY+IDxVNDIwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SIhjAKKzxVNDRBQj4gPFU0NEFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JKrMAorPFU0RUUzPiA8VTRFRTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPku6M0NjE3MworPFU1M0M3PiA8VTUzQzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlj4cyCis8VTU3RUQ+IDxVNTdFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfrTEKKzxVNUNCMT4gPFU1Q0IxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bKxMTIxCis8VTVFMTI+IDxVNUUxMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W4kjAKKzxVNUUyNj4gPFU1RTI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bimMzc3OTgKKzxVNUUyRj4gPFU1RTJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bivMAorPFU1RTM2PiA8VTVFMzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluLYzMjkKKzxVNUVENz4gPFU1RUQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5buXMAorPFU1Rjg1PiA8VTVGODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvoUxMDAwMAorPFU1RkQ1PiA8VTVGRDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv5UwCis8VTYwMjA+IDxVNjAyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aAoDQwMworPFU2MjM0PiA8VTYyMzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiLQ2NzYxCis8VTY2QzM+IDxVNjZDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+abgzAKKzxVNjdDQj4gPFU2N0NCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p+LMAorPFU2Qjg2PiA8VTZCODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmroYyNTYKKzxVNkM0Rj4gPFU2QzRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rGPMAorPFU3MDNCPiA8VTcwM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngLswCis8VTczQjM+IDxVNzNCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eOszY3NAorPFU3NDQ3PiA8VTc0NDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkYcwCis8VTc1MTk+IDxVNzUxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eUmTEKKzxVN0MyND4gPFU3QzI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57CkMAorPFU3RDNGPiA8VTdEM0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntL8wCis8VTdERkY+IDxVN0RGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3vzAKKzxVN0VEMD4gPFU3RUQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57uQMQorPFU4MjVDPiA8VTgyNUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiZwwCis8VTg4OEI+IDxVODg4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iiizgxOTcKKzxVODk3Nj4gPFU4OTc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KW2MAorPFU4Q0I4PiA8VThDQjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosrg2Cis8VThEMzc+IDxVOEQzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i0tzgyMAorPFU4REUyPiA8VThERTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPot6IwCis8VThFNUI+IDxVOEU1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i5mzAKKzxVOEVEMT4gPFU4RUQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LuRMAorPFU4RURBPiA8VThFREE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPou5owCis8VThFRTk+IDxVOEVFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i7qTAKKzxVOEY2QT4gPFU4RjZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L2qMAorPFU4RkU4PiA8VThGRTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPov6gyMgorPFU5MTY4PiA8VTkxNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphagwCis8VTk3MzQ+IDxVOTczND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mctDAKKzxVOTc0Nj4gPFU5NzQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z2GMAorPFU5QTgwPiA8VTlBODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqoAyCis8VTlFREI+IDxVOUVEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7mzE0MTEKKzxVOUVGMT4gPFU5RUYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6buxMAorPFU0RTM5PiA8VTRFMzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuLkzOTAzCis8VTUxMEI+IDxVNTEwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WEizExCis8VTUyRUY+IDxVNTJFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WLrzAKKzxVNTMzMD4gPFU1MzMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YywMAorPFU1MzU1PiA8VTUzNTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljZUyNjAyMworPFU1NjYxPiA8VTU2NjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmaEwCis8VTU2QUE+IDxVNTZBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WaqjAKKzxVNTk4OT4gPFU1OTg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aaJMAorPFU1QTg1PiA8VTVBODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqoUwCis8VTY0RDQ+IDxVNjREND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aTlDgzCis8VTZCOUE+IDxVNkI5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aumjQyCis8VTZCQUI+IDxVNkJBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+auqzAKKzxVNzUxND4gPFU3NTE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55SUMAorPFU3NjA1PiA8VTc2MDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmIUzCis8VTc2NDk+IDxVNzY0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eZiTAKKzxVNzcwOD4gPFU3NzA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55yIMTA0Cis8VTc4MDM+IDxVNzgwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eggzAKKzxVN0JBQT4gPFU3QkFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj566qMTkKKzxVN0MxRT4gPFU3QzFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57CeMAorPFU4MDNDPiA8VTgwM0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogLwwCis8VTgwM0Q+IDxVODAzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iAvTg4NgorPFU4MDQzPiA8VTgwNDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogYMyMgorPFU4MDc4PiA8VTgwNzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogbgwCis8VTg5NEM+IDxVODk0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iljDIKKzxVOEVBRD4gPFU4RUFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LqtMAorPFU5MEY4PiA8VTkwRjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg7gyMzcKKzxVOTEzMj4gPFU5MTMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YSyMAorPFU5MTU2PiA8VTkxNTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphZYwCis8VTk4MTU+IDxVOTgxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mglTAKKzxVMzUwQT4gPFUzNTBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45SKMAorPFUzNTZBPiA8VTM1NkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlaowCis8VTNGNEU+IDxVM0Y0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O9jjAKKzxVNDBFQj4gPFU0MEVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IOrMAorPFU0MjVFPiA8VTQyNUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiZ4wCis8VTRCQjA+IDxVNEJCMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SusDAKKzxVNEM0Qj4gPFU0QzRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LGLMAorPFU0RTNDPiA8VTRFM0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuLwwCis8VTRFQjY+IDxVNEVCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6tjQKKzxVNTIxMD4gPFU1MjEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YiQMAorPFU2M0I4PiA8VTYzQjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjrgxODgKKzxVNjRBMj4gPFU2NEEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pKiNAorPFU2NEEzPiA8VTY0QTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkqMwCis8VTZGQjg+IDxVNkZCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a+uDAKKzxVNzNBQz4gPFU3M0FDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj546sMAorPFU3NEVEPiA8VTc0RUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnk60wCis8VTdEMUU+IDxVN0QxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e0njAKKzxVODBDNj4gPFU4MEM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IOGNDE4NgorPFU4MUJEPiA8VTgxQkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohr0xOQorPFU4ODc0PiA8VTg4NzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoobQwCis8VTlFRjU+IDxVOUVGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7tTIKKzxVMzVENj4gPFUzNUQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45eWMAorPFUzODdBPiA8VTM4N0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjobowCis8VTNBREM+IDxVM0FEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OrnDAKKzxVM0M3RD4gPFUzQzdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47G9MAorPFUzQ0I3PiA8VTNDQjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsrcwCis8VTNENDU+IDxVM0Q0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O1hTAKKzxVM0U5Nz4gPFUzRTk3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47qXMAorPFU0MTM3PiA8VTQxMzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhLcwCis8VTQyNzc+IDxVNDI3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SJtzAKKzxVNEEyMj4gPFU0QTIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KiiMAorPFU0QTM1PiA8VTRBMzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqLUwCis8VTRBNjU+IDxVNEE2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SppTAKKzxVNEI1Qj4gPFU0QjVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K2bMAorPFU0Q0M5PiA8VTRDQzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPks4kwCis8VTRGNDY+IDxVNEY0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S9hjk4NTk1Cis8VTUwRTQ+IDxVNTBFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WDpDAKKzxVNTU1Nj4gPFU1NTU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZWWNDQKKzxVNTU1Nz4gPFU1NTU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZWXMAorPFU1NTdGPiA8VTU1N0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllb8wCis8VTU2M0U+IDxVNTYzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WYvjEKKzxVNTY0OT4gPFU1NjQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZmJMQorPFU1RTBFPiA8VTVFMEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluI4wCis8VTVFNjg+IDxVNUU2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W5qDAKKzxVNUYzRT4gPFU1RjNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5by+MAorPFU1RjQ4PiA8VTVGNDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvYgxMjMKKzxVNjBFRT4gPFU2MEVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oOuMzQ2Cis8VTYxOUE+IDxVNjE5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aGmjEKKzxVNjFCQT4gPFU2MUJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oa6MAorPFU2MkM1PiA8VTYyQzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmi4U1MDQ5Cis8VTY1RTY+IDxVNjVFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aXpjQ5NzMKKzxVNjZCQT4gPFU2NkJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pq6MAorPFU2N0U2PiA8VTY3RTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmn6YwCis8VTZDMkU+IDxVNkMyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+awrjIzNQorPFU2QzhBPiA8VTZDOEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsoowCis8VTZDRjk+IDxVNkNGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+azuTAKKzxVNkRFMT4gPFU2REUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rehOTE1NworPFU2RjZDPiA8VTZGNkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvawwCis8VTZGQjk+IDxVNkZCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a+uTEwMgorPFU3MDU3PiA8VTcwNTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngZcwCis8VTcyREE+IDxVNzJEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eLmjAKKzxVNzU4RD4gPFU3NThEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55aNMAorPFU3NjVBPiA8VTc2NUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmZowCis8VTc5QUI+IDxVNzlBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+emqzAKKzxVN0E5RT4gPFU3QTlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56qeMAorPFU4MTQ1PiA8VTgxNDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohYUwCis8VTgxQkI+IDxVODFCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iGuzMwCis8VTgyMTU+IDxVODIxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iIlTAKKzxVODQwRj4gPFU4NDBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JCPNQorPFU4NkNCPiA8VTg2Q0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPom4s1NjE1Cis8VTg3MTE+IDxVODcxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ickTAKKzxVODlEQj4gPFU4OURCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KebMAorPFU4QTk1PiA8VThBOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqpUxMgorPFU4QkRFPiA8VThCREU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor54yNDU1Cis8VThENjE+IDxVOEQ2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i1oTc5Cis8VTk0QkQ+IDxVOTRCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mSvTEKKzxVOTcyRT4gPFU5NzJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZyuMAorPFU5OTRGPiA8VTk5NEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppY8wCis8VTk5QkU+IDxVOTlCRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mmvjAKKzxVOTlGMz4gPFU5OUYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aezMQorPFU5QUU3PiA8VTlBRTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpq6cwCis8VTlEMjA+IDxVOUQyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m0oDAKKzxVNTEwNT4gPFU1MTA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YSFMAorPFU1Njc5PiA8VTU2Nzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmbk0MgorPFU1RDYzPiA8VTVENjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltaMwCis8VTVGNTM+IDxVNUY1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W9kzUwMDg5Cis8VTZGQTI+IDxVNkZBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a+ojAKKzxVNzNGMD4gPFU3M0YwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54+wOAorPFU3NEFCPiA8VTc0QUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkqswCis8VTc1NzY+IDxVNzU3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eVtjgyMgorPFU3QjVDPiA8VTdCNUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrZwwCis8VTdDMzk+IDxVN0MzOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ewuTAKKzxVODI2MT4gPFU4MjYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ImhMAorPFU4N0Y3PiA8VTg3Rjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPon7cwCis8VTg4QzY+IDxVODhDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ijhjIxMworPFU4OTYwPiA8VTg5NjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopaAyCis8VTQ4Q0E+IDxVNDhDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SjijAKKzxVNDhFMz4gPFU0OEUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KOjMAorPFU1MTVBPiA8VTUxNUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhZoyMzA3NworPFU2MzIxPiA8VTYzMjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjKEyNDExCis8VTY0Q0I+IDxVNjRDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aTizEzCis8VTY1Mjk+IDxVNjUyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aUqTAKKzxVNkE5ND4gPFU2QTk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qqUMzIKKzxVNkIxMz4gPFU2QjEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qyTMAorPFU3MDU5PiA8VTcwNTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngZkwCis8VThCNjE+IDxVOEI2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+itoTAKKzxVOEI5Qz4gPFU4QjlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K6cMAorPFU4QzIwPiA8VThDMjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosKAyCis8VTlFRTg+IDxVOUVFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7qDYyCis8VTQ0NTc+IDxVNDQ1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SRlzAKKzxVNDk5Mj4gPFU0OTkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KaSMAorPFU1MUZDPiA8VTUxRkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlh7wxMAorPFU1NzM1PiA8VTU3MzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnLUwCis8VTU3QjE+IDxVNTdCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WesTAKKzxVNThDQj4gPFU1OENCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aOLMAorPFU1Qjk1PiA8VTVCOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrpU3OAorPFU2MTEzPiA8VTYxMTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhJMwCis8VTY4NjM+IDxVNjg2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ahozYwMDAKKzxVNkMzOT4gPFU2QzM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rC5MQorPFU3NDk3PiA8VTc0OTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkpcwCis8VTc0RkQ+IDxVNzRGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eTvTAKKzxVNzZFQT4gPFU3NkVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55uqOAorPFU3NzhBPiA8VTc3OEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnoowCis8VTc4MDA+IDxVNzgwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eggDEyCis8VTc4QUQ+IDxVNzhBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eirTAKKzxVNzkxMT4gPFU3OTExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56SRMAorPFU3QzFDPiA8VTdDMUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsJwwCis8VTgzNjE+IDxVODM2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iNoTY0NDYKKzxVODNFQT4gPFU4M0VBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I+qMQorPFU4NTY5PiA8VTg1Njk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolak3MAorPFU4NjJGPiA8VTg2MkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomK8wCis8VThEQTQ+IDxVOERBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i2pDAKKzxVOTAzRj4gPFU5MDNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YC/MAorPFU5NUUzPiA8VTk1RTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl6MwCis8VTk2RkM+IDxVOTZGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mbvDAKKzxVNTIwMD4gPFU1MjAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YiAOTUwNQorPFU1MjAyPiA8VTUyMDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliII4Cis8VTUzRTg+IDxVNTNFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPqDEwODcKKzxVNTU0MT4gPFU1NTQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZWBNDIKKzxVNUU0RD4gPFU1RTREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bmNMAorPFU1RkM5PiA8VTVGQzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv4kwCis8VTY3Mzc+IDxVNjczNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+actzAKKzxVNkMxOD4gPFU2QzE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rCYMjgKKzxVODIyMD4gPFU4MjIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IigMAorPFU5MUQ2PiA8VTkxRDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPph5YwCis8VTlCNUI+IDxVOUI1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mtmzAKKzxVOUM3RD4gPFU5QzdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bG9MAorPFU2MzZGPiA8VTYzNkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmja8wCis8VTM4MDA+IDxVMzgwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OggDAKKzxVM0ZEMj4gPFUzRkQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47+SMAorPFU0MTgzPiA8VTQxODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhoMwCis8VTQzMjY+IDxVNDMyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SMpjAKKzxVNENCRD4gPFU0Q0JEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LK9MAorPFU1MDEyPiA8VTUwMTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgJIxNTk0OAorPFU1OEQ0PiA8VTU4RDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlo5QwCis8VTVCRkM+IDxVNUJGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WvvDI2MDM0Cis8VTVDMEU+IDxVNUMwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WwjjE2MgorPFU1QzlCPiA8VTVDOUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsps4MDQwCis8VTVDRjY+IDxVNUNGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WztjYzCis8VTVEOEI+IDxVNUQ4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W2izAKKzxVNUQ4Qz4gPFU1RDhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5baMMAorPFU1REI5PiA8VTVEQjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltrkwCis8VTYzNjM+IDxVNjM2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aNozg3NworPFU2NDE3PiA8VTY0MTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkJc2Cis8VTY0RTM+IDxVNjRFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aTozAKKzxVNjhCQz4gPFU2OEJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qK8OAorPFU3OTc3PiA8VTc5Nzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpbcxMDgyCis8VTc5ODI+IDxVNzk4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+emgjMKKzxVNzlCMT4gPFU3OUIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56axOAorPFU4RTQ4PiA8VThFNDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouYgxMDQ1Cis8VTk2OUQ+IDxVOTY5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+manTAKKzxVOTZBRj4gPFU5NkFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZqvMAorPFU0OUMyPiA8VTQ5QzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkp4IwCis8VTUyMzA+IDxVNTIzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WIsDM2MzY1NAorPFU1Njc1PiA8VTU2NzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmbUwCis8VTYwQkM+IDxVNjBCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aCvDczMworPFU2QUE0PiA8VTZBQTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqqQwCis8VTcxMTg+IDxVNzExOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eEmDEzMgorPFU3MUZFPiA8VTcxRkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnh74wCis8VTc0RDk+IDxVNzREOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eTmTAKKzxVNzZENz4gPFU3NkQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55uXMjE1NgorPFU3NkRDPiA8VTc2REM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnm5wxMgorPFU3QTMyPiA8VTdBMzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqLIwCis8VTdBM0I+IDxVN0EzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eouzE0MjcKKzxVN0U5Qj4gPFU3RTlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57qbNTgKKzxVN0ZGRj4gPFU3RkZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57+/MAorPFU4M0ZGPiA8VTgzRkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoj78wCis8VTg4NUM+IDxVODg1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ihnDAKKzxVODg1Rj4gPFU4ODVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KGfMAorPFU4RUM3PiA8VThFQzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPou4cwCis8VTkwNTM+IDxVOTA1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mBkzE2MzA1NQorPFUzNzc1PiA8VTM3NzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnbUwCis8VTM5MkI+IDxVMzkyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OkqzAKKzxVMzk0MD4gPFUzOTQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46WAMAorPFUzOTQxPiA8VTM5NDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpYEwCis8VTNCRDY+IDxVM0JENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OvljAKKzxVNDY3Nz4gPFU0Njc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Jm3MAorPFU0Njc4PiA8VTQ2Nzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmbgwCis8VTVGOTc+IDxVNUY5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W+lzE1MDAwMAorPFU1RkIzPiA8VTVGQjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvrMxCis8VTVGQjc+IDxVNUZCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W+tzI4MzEzCis8VTYwNzQ+IDxVNjA3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBtDAKKzxVNjBCMz4gPFU2MEIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oKzMAorPFU2MEVBPiA8VTYwRUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmg6owCis8VTY4Q0Y+IDxVNjhDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ajjzAKKzxVNkRDMj4gPFU2REMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5reCMAorPFU5MzQwPiA8VTkzNDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjYAwCis8VTk1MUQ+IDxVOTUxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mUnTUKKzxVNzY4ND4gPFU3Njg0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55qEMjIxMzg1NQorPFU1NENCPiA8VTU0Q0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlk4s0Cis8VTU2NTQ+IDxVNTY1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WZlDE1OAorPFU1QjAxPiA8VTVCMDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrIEwCis8VTcwNkY+IDxVNzA2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eBrzEyMDAzCis8VTcxQzg+IDxVNzFDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHiDc4Cis8VTc0OTI+IDxVNzQ5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eSkjAKKzxVNzY3Qj4gPFU3NjdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55m7MTAzMjgKKzxVN0FGMz4gPFU3QUYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56uzMAorPFU3QzI2PiA8VTdDMjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsKYwCis8VTg5QjQ+IDxVODlCND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+imtDAKKzxVOEM0Qj4gPFU4QzRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LGLMAorPFU4RTZDPiA8VThFNkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouaw2MjkKKzxVOTQxOT4gPFU5NDE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZCZMQorPFU5NTZCPiA8VTk1NkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplasyOQorPFU0NEFEPiA8VTQ0QUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkq0wCis8VTYyMjU+IDxVNjIyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aIpTgKKzxVN0I0OT4gPFU3QjQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj562JNjE4MjAKKzxVNDgyQz4gPFU0ODJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KCsMAorPFU0QkI0PiA8VTRCQjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrrQwCis8VTUwREM+IDxVNTBEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WDnDAKKzxVNTFGMz4gPFU1MUYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YezMTQ5OAorPFU1OEIxPiA8VTU4QjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlorEwCis8VTVEOUQ+IDxVNUQ5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W2nTIKKzxVNkFDOD4gPFU2QUM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5quIMQorPFU3N0FBPiA8VTc3QUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnqoyNjE4Cis8VTc4RjQ+IDxVNzhGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ejtDI0Cis8VTkwODY+IDxVOTA4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mChjAKKzxVOTA5Mz4gPFU5MDkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKTNDUxMQorPFU5MTI3PiA8VTkxMjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphKcyMDMKKzxVOTZBNT4gPFU5NkE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZqlMAorPFU5NzJGPiA8VTk3MkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnK8wCis8VTRFRkU+IDxVNEVGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S7vjAKKzxVNEY0RT4gPFU0RjRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L2OMTU5NjQKKzxVNTYwMD4gPFU1NjAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZiANjM0Cis8VTU3REU+IDxVNTdERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfnjAKKzxVNTgyND4gPFU1ODI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aCkMTA2NworPFU1ODkxPiA8VTU4OTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlopEwCis8VTU5NDM+IDxVNTk0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WlgzAKKzxVNUY3RD4gPFU1RjdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b29MAorPFU2QzEwPiA8VTZDMTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsJAzOQorPFU2RUY0PiA8VTZFRjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmu7QzOTY0Cis8VTc3MjE+IDxVNzcyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ecoTAKKzxVNzhGRT4gPFU3OEZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56O+MAorPFU3RjlEPiA8VTdGOUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvp0zCis8VTg4OUI+IDxVODg5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iimzEKKzxVOEQ4Nj4gPFU4RDg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LaGMAorPFU5MzQ5PiA8VTkzNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjYkwCis8VTkzRDE+IDxVOTNEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mPkTAKKzxVOTU1RD4gPFU5NTVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZWdNworPFU5Njg0PiA8VTk2ODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmoQwCis8VTk3QUU+IDxVOTdBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+merjAKKzxVMzhEOT4gPFUzOEQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46OZMAorPFUzQzA1PiA8VTNDMDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsIUwCis8VTNFNEQ+IDxVM0U0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O5jTAKKzxVNDJBRT4gPFU0MkFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IquMAorPFU0QTAwPiA8VTRBMDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqIAwCis8VTRBMjQ+IDxVNEEyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SopDAKKzxVNEJBND4gPFU0QkE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K6kMAorPFU0QkZDPiA8VTRCRkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkr7wwCis8VTREMUU+IDxVNEQxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S0njAKKzxVNEQ2MD4gPFU0RDYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LWgMAorPFU0RUUyPiA8VTRFRTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPku6IwCis8VTU1MTk+IDxVNTUxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUmTAKKzxVNTY4MT4gPFU1NjgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZqBMAorPFU1QUUxPiA8VTVBRTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlq6EyMDQKKzxVNUVGOD4gPFU1RUY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bu4MAorPFU2NTRDPiA8VTY1NEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlYw4MzQzCis8VTY1NzU+IDxVNjU3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aVtTI1Cis8VTY4OTE+IDxVNjg5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aikTAKKzxVNkRBND4gPFU2REE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rakMjE5Cis8VTZFQ0M+IDxVNkVDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a7jDUKKzxVNkY2QT4gPFU2RjZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r2qMAorPFU3MjkyPiA8VTcyOTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnipI1MgorPFU3MkM0PiA8VTcyQzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPni4Q2OTkKKzxVN0IxQj4gPFU3QjFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56ybMTAzOQorPFU3QkY0PiA8VTdCRjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnr7QwCis8VTdDNzQ+IDxVN0M3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+extDE0Cis8VTdDRjQ+IDxVN0NGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eztDAKKzxVN0ZERj4gPFU3RkRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57+fMjM5Cis8VTgyRDY+IDxVODJENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iLljEKKzxVODM3Qj4gPFU4MzdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I27NTUKKzxVODM5Qz4gPFU4MzlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I6cMTgKKzxVODUwQj4gPFU4NTBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JSLMAorPFU4NTEwPiA8VTg1MTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolJAwCis8VTg1Q0I+IDxVODVDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iXizEKKzxVODVFMT4gPFU4NUUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JehMAorPFU4OUJGPiA8VTg5QkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopr8wCis8VTg5Q0M+IDxVODlDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+injDgKKzxVOEM3ND4gPFU4Qzc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LG0MAorPFU4RTYyPiA8VThFNjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouaIwCis8VThGRUE+IDxVOEZFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i/qjQxMDAKKzxVOTc2RT4gPFU5NzZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z2uMAorPFU5ODE0PiA8VTk4MTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoJQwCis8VTlFMTA+IDxVOUUxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m4kDAKKzxVMzg3Mz4gPFUzODczPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46GzMAorPFUzQTg2PiA8VTNBODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqoYwCis8VTNCN0Q+IDxVM0I3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OtvTAKKzxVNDBBMT4gPFU0MEExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IKhMAorPFU0MzU1PiA8VTQzNTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjZUwCis8VTQ4OTE+IDxVNDg5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SikTAKKzxVNDhDQz4gPFU0OENDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KOMMAorPFU0QzQzPiA8VTRDNDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksYMwCis8VTU0Njc+IDxVNTQ2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRpzIKKzxVNTc1OD4gPFU1NzU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z2YMAorPFU1RTk1PiA8VTVFOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlupUyMDgwNAorPFU1RjI0PiA8VTVGMjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvKQwCis8VTYyQjU+IDxVNjJCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aKtTQyMDYKKzxVNjJERT4gPFU2MkRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oueMAorPFU2MzhCPiA8VTYzOEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjoswCis8VTY3RTI+IDxVNjdFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+afojI0Cis8VTcyNzQ+IDxVNzI3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eJtDAKKzxVNzgyNT4gPFU3ODI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56ClNDEKKzxVODA1Qz4gPFU4MDVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IGcMAorPFU4MzBCPiA8VTgzMEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojIswCis8VTgzRTc+IDxVODNFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPpzAKKzxVODlERD4gPFU4OUREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KedMAorPFU4QTQ2PiA8VThBNDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqYYwCis8VThCQ0I+IDxVOEJDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ivizgwCis8VThFRTc+IDxVOEVFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i7pzAKKzxVOTBCOD4gPFU5MEI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YK4NTU2Cis8VTk2M0E+IDxVOTYzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mYujAKKzxVOUFCNj4gPFU5QUI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aq2NAorPFUzOEE5PiA8VTM4QTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoqkwCis8VTM5ODU+IDxVMzk4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OmhTAKKzxVM0YzNT4gPFUzRjM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47y1MAorPFU0MDM4PiA8VTQwMzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgLgwCis8VTQwM0Y+IDxVNDAzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SAvzAKKzxVNDNEMT4gPFU0M0QxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I+RMAorPFU0NDZEPiA8VTQ0NkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkka0wCis8VTQ0NkY+IDxVNDQ2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SRrzAKKzxVNDdCNj4gPFU0N0I2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J62MAorPFU0N0UxPiA8VTQ3RTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkn6EwCis8VTQ5REQ+IDxVNDlERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SnnTAKKzxVNEE1OD4gPFU0QTU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KmYMAorPFU0QTVBPiA8VTRBNUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqZowCis8VTRDNzE+IDxVNEM3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SxsTAKKzxVNEQ4RD4gPFU0RDhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LaNMAorPFU1MDU5PiA8VTUwNTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgZkwCis8VTUwQzA+IDxVNTBDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WDgDAKKzxVNTU0Nz4gPFU1NTQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZWHMAorPFU1NTcyPiA8VTU1NzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllbIwCis8VTU3MzA+IDxVNTczMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WcsDE5OTc4NgorPFU1NzU0PiA8VTU3NTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnZQwCis8VTU3Q0E+IDxVNTdDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfijAKKzxVNTg4Nj4gPFU1ODg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aKGMAorPFU1QTIzPiA8VTVBMjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqKM5MDUKKzxVNUQ3RD4gPFU1RDdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bW9MAorPFU1REIzPiA8VTVEQjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltrMwCis8VTVFMUQ+IDxVNUUxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W4nTEzNDUxCis8VTVGMUY+IDxVNUYxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W8nzE2MTI1Cis8VTYwMUY+IDxVNjAxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aAnzAKKzxVNjE3OD4gPFU2MTc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oW4MAorPFU2NDU1PiA8VTY0NTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkZUwCis8VTY1RjM+IDxVNjVGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aXszEKKzxVNjc1NT4gPFU2NzU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p2VMAorPFU2ODhBPiA8VTY4OEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmooowCis8VTY4RTM+IDxVNjhFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ajozE1NworPFU2OTc0PiA8VTY5NzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpbQwCis8VTZBMDA+IDxVNkEwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aogDAKKzxVNkUyNz4gPFU2RTI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rinMAorPFU3MTBEPiA8VTcxMEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhI0wCis8VTczOTM+IDxVNzM5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eOkzAKKzxVNzNGNj4gPFU3M0Y2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54+2MAorPFU3NTBCPiA8VTc1MEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlIswCis8VTc3NDc+IDxVNzc0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+edhzYzCis8VTc4QjI+IDxVNzhCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eisjIKKzxVNzk3Nj4gPFU3OTc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56W2MAorPFU3OTk4PiA8VTc5OTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnppgwCis8VTdCMkM+IDxVN0IyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+esrDYyNzM4Cis8VTdERTA+IDxVN0RFMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3oDAKKzxVN0YxND4gPFU3RjE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57yUNDQ3Cis8VTgwOTE+IDxVODA5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iCkTAKKzxVODE2Mz4gPFU4MTYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IWjMAorPFU4M0MyPiA8VTgzQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoj4IxCis8VTg0ODI+IDxVODQ4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iSgjUzODYKKzxVODUxNT4gPFU4NTE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JSVMAorPFU4NjczPiA8VTg2NzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPombMwCis8VTg3QUU+IDxVODdBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ierjAKKzxVOEFFNj4gPFU4QUU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KumNworPFU4QzFCPiA8VThDMUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosJs0MDUKKzxVOEUzNj4gPFU4RTM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Li2MQorPFU5MDEyPiA8VTkwMTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgJI1MTc5Cis8VTkwMTM+IDxVOTAxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mAkzAKKzxVOTA1RT4gPFU5MDVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YGeMTAKKzxVOTFGMT4gPFU5MUYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YexMAorPFU5MjZBPiA8VTkyNkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiaowCis8VTk5QjA+IDxVOTlCMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mmsDAKKzxVNTVGMj4gPFU1NUYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZeyMTAyCis8VTUwOEU+IDxVNTA4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WCjjAKKzxVNTNBNz4gPFU1M0E3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y6nMAorPFU1RDZFPiA8VTVENkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlta4wCis8VTVEQzU+IDxVNURDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W3hTIwOAorPFU1REQzPiA8VTVERDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlt5MwCis8VTVERDQ+IDxVNUREND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W3lDQKKzxVNjM4Mj4gPFU2MzgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o6CMzIwCis8VTY1Mjc+IDxVNjUyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aUpzIKKzxVNjU0MT4gPFU2NTQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pWBNQorPFU2OUM3PiA8VTY5Qzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmp4cwCis8VTY5RDk+IDxVNjlEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+anmTAKKzxVNkVDNz4gPFU2RUM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ruHMTI0Cis8VTc2Mjg+IDxVNzYyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eYqDAKKzxVNzY2Qj4gPFU3NjZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55mrMzI2Cis8VTc2NzI+IDxVNzY3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eZsjIKKzxVOEU0RT4gPFU4RTRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LmOMAorPFU5ODVBPiA8VTk4NUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoZowCis8VTk4NUI+IDxVOTg1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mhmzgKKzxVOThBMD4gPFU5OEEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aKgMTgxMAorPFU5RjdCPiA8VTlGN0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvbswCis8VTQ3Q0Q+IDxVNDdDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SfjTAKKzxVMzZCMj4gPFUzNkIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45qyMAorPFUzRTAzPiA8VTNFMDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuIMwCis8VTQzNDQ+IDxVNDM0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SNhDAKKzxVNDRFNj4gPFU0NEU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JOmMAorPFU1MTc4PiA8VTUxNzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhbg2NzAzCis8VTU2Qjg+IDxVNTZCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WauDAKKzxVNTk0Qz4gPFU1OTRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aWMMAorPFU1QTcwPiA8VTVBNzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqbAwCis8VTY1NUY+IDxVNjU1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aVnzAKKzxVNzBCOT4gPFU3MEI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54K5MTAwODIxCis8VTc0MjA+IDxVNzQyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eQoDAKKzxVNzg5OD4gPFU3ODk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56KYMjIKKzxVODU0Nz4gPFU4NTQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JWHNworPFU4RTJFPiA8VThFMkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouK4xNTUKKzxVOTMyQT4gPFU5MzJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YyqMAorPFU5RURFPiA8VTlFREU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpu544NTMKKzxVMzRFMD4gPFUzNEUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45OgMAorPFUzNzZBPiA8VTM3NkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnaowCis8VTM3OUY+IDxVMzc5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OenzAKKzxVMzk0Nj4gPFUzOTQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46WGMAorPFUzRDY0PiA8VTNENjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtaQwCis8VTNEOTg+IDxVM0Q5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O2mDAKKzxVM0YyRD4gPFUzRjJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47ytMAorPFU0OUMzPiA8VTQ5QzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkp4MwCis8VTRGNDM+IDxVNEY0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S9gzIyNAorPFU1NzZCPiA8VTU3NkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnasxCis8VTU3QUI+IDxVNTdBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WeqzEwOTEKKzxVNTg4QT4gPFU1ODhBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aKKMTQKKzxVNThDMj4gPFU1OEMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aOCMAorPFU1OTYwPiA8VTU5NjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpaA1NTMKKzxVNUE1RD4gPFU1QTVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5amdMAorPFU1RTk3PiA8VTVFOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlupcxMTUzMQorPFU2MEU2PiA8VTYwRTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmg6Y0NDcKKzxVNjI0Mj4gPFU2MjQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5omCMAorPFU2QTQyPiA8VTZBNDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqYIwCis8VTZCQkY+IDxVNkJCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+auvzMwNzAKKzxVNkRDMD4gPFU2REMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5reANDMxCis8VTZGQjE+IDxVNkZCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a+sTQKKzxVNzNCNz4gPFU3M0I3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5463MTM2Cis8VTc0MTQ+IDxVNzQxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eQlDAKKzxVNzUzNT4gPFU3NTM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55S1NDkzODkKKzxVNzUzOD4gPFU3NTM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55S4NzU2Cis8VTc1QzE+IDxVNzVDMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eXgTAKKzxVNzY1Qz4gPFU3NjVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55mcMTAKKzxVNzhGOT4gPFU3OEY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56O5MAorPFU3QzFGPiA8VTdDMUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsJ8yMgorPFU4NzE0PiA8VTg3MTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonJQwCis8VTkyM0Y+IDxVOTIzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mIvzAKKzxVOTRCRj4gPFU5NEJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZK/NjMKKzxVOTYzRD4gPFU5NjNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Zi9MQorPFU5NkZCPiA8VTk2RkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpm7s1MTYKKzxVOTc1Qj4gPFU5NzVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z2bNDcKKzxVNTFDQj4gPFU1MUNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YeLNDQ0Cis8VTUyMDE+IDxVNTIwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WIgTM5NgorPFU1M0ZDPiA8VTUzRkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlj7wzNzYKKzxVNTk1RD4gPFU1OTVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aWdMAorPFU1RjM0PiA8VTVGMzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvLQwCis8VTVGNkI+IDxVNUY2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W9qzEKKzxVNjI1QT4gPFU2MjVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5omaMAorPFU2QkE2PiA8VTZCQTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrqYwCis8VTZDNDg+IDxVNkM0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+axiDAKKzxVNzQzMT4gPFU3NDMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55CxMAorPFU3Nzk3PiA8VTc3OTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnpcwCis8VTc3RjU+IDxVNzdGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eftTAKKzxVNzg4OT4gPFU3ODg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56KJMTE3Cis8VTg2NkQ+IDxVODY2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iZrTAKKzxVODZDMT4gPFU4NkMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JuBMAorPFU4QzgyPiA8VThDODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosoIxNDcKKzxVOTZENT4gPFU5NkQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZuVMTg5NgorPFU5Qjg5PiA8VTlCODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprokwCis8VTlCREI+IDxVOUJEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mvmzAKKzxVOUNCNz4gPFU5Q0I3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bK3NgorPFU5Q0VEPiA8VTlDRUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPps60wCis8VTlENzA+IDxVOUQ3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m1sDEKKzxVOUYyNj4gPFU5RjI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bymMAorPFUzRTdGPiA8VTNFN0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjub8wCis8VTQyNDY+IDxVNDI0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SJhjAKKzxVNUM0Qz4gPFU1QzRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bGMMTAKKzxVMzQ5Qj4gPFUzNDlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45KbMAorPFUzQTk1PiA8VTNBOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqpUwCis8VTQwQUE+IDxVNDBBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SCqjAKKzxVNDBCRD4gPFU0MEJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IK9MAorPFU0NTE5PiA8VTQ1MTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklJkwCis8VTQ4M0M+IDxVNDgzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SgvDAKKzxVNEQ3Mj4gPFU0RDcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LWyMAorPFU0RjA0PiA8VTRGMDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvIQwCis8VTU0MEE+IDxVNTQwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WQijI1MTAKKzxVNUYxND4gPFU1RjE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5byUMTcKKzxVNjM4OT4gPFU2Mzg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o6JMTcyOTAKKzxVNzYzOT4gPFU3NjM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55i5MAorPFU3QThFPiA8VTdBOEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqo4wCis8VTdBQjU+IDxVN0FCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eqtTAKKzxVN0FFOD4gPFU3QUU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56uoMAorPFU4NEU3PiA8VTg0RTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPok6cwCis8VThBMEI+IDxVOEEwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ioizAKKzxVOEE4Mj4gPFU4QTgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KqCMAorPFU4QUJGPiA8VThBQkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqr8yNDcKKzxVOEMwMz4gPFU4QzAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LCDMTU0NzUKKzxVOTFFMz4gPFU5MUUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YejMgorPFU5MjFGPiA8VTkyMUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiJ8wCis8VTkyOUE+IDxVOTI5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mKmjAKKzxVOTJCMT4gPFU5MkIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YqxMAorPFU5MkZEPiA8VTkyRkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpi70wCis8VTk0NDM+IDxVOTQ0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mRgzAKKzxVOTQ5Mz4gPFU5NDkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZKTMTAzNAorPFU5NERFPiA8VTk0REU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpk54yCis8VTk0RUI+IDxVOTRFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mTqzExCis8VTlCNjE+IDxVOUI2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mtoTAKKzxVNzIzOT4gPFU3MjM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54i5Mzk5MAorPFU4OTNBPiA8VTg5M0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopLoxCis8VThEQ0M+IDxVOERDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i3jDIyMjkKKzxVMzQ1OT4gPFUzNDU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45GZMAorPFUzOTQ4PiA8VTM5NDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpYgwCis8VTM5QjY+IDxVMzlCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OmtjAKKzxVM0E3OD4gPFUzQTc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46m4MAorPFUzQTc5PiA8VTNBNzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqbkwCis8VTNBRkM+IDxVM0FGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OrvDAKKzxVM0IyQT4gPFUzQjJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46yqMAorPFUzQjZGPiA8VTNCNkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjra8wCis8VTNDQjI+IDxVM0NCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OysjAKKzxVM0NCMz4gPFUzQ0IzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47KzMAorPFUzREY4PiA8VTNERjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjt7gwCis8VTNFRTE+IDxVM0VFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O7oTAKKzxVNDNGMj4gPFU0M0YyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I+yMAorPFU0NjJEPiA8VTQ2MkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmK0wCis8VTQ3ODc+IDxVNDc4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SehzAKKzxVNDc5NT4gPFU0Nzk1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J6VMAorPFU0ODFGPiA8VTQ4MUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoJ8wCis8VTRBQTU+IDxVNEFBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SqpTAKKzxVNEJBMj4gPFU0QkEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K6iMAorPFU0QzgwPiA8VTRDODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksoAwCis8VTRDQzA+IDxVNENDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SzgDAKKzxVNEQxMT4gPFU0RDExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LSRMAorPFU1M0UwPiA8VTUzRTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlj6AyMjEyCis8VTU0QTU+IDxVNTRBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WSpTAKKzxVNTU4Qj4gPFU1NThCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZaLNDMzCis8VTU3QTQ+IDxVNTdBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WepDUKKzxVNTgxRT4gPFU1ODFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aCeMTcKKzxVNUNDQz4gPFU1Q0NDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bOMMAorPFU1RDgwPiA8VTVEODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltoAwCis8VTYwNEU+IDxVNjA0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBjjAKKzxVNjBGNT4gPFU2MEY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oO1MAorPFU2MjFDPiA8VTYyMUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiJwwCis8VTYzMTU+IDxVNjMxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aMlTAKKzxVNjNGMj4gPFU2M0YyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+yMgorPFU2NjMzPiA8VTY2MzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmLMwCis8VTY2RTE+IDxVNjZFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aboTAKKzxVNjk2QT4gPFU2OTZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qWqMAorPFU2QzBFPiA8VTZDMEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsI4wCis8VTcyNDM+IDxVNzI0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eJgzAKKzxVNzI1Mj4gPFU3MjUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54mSMTA4Cis8VTc0REU+IDxVNzRERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eTnjQKKzxVNzU3Mz4gPFU3NTczPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55WzMAorPFU3NTgyPiA8VTc1ODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnloIwCis8VTc1ODk+IDxVNzU4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eWiTAKKzxVNzU4QT4gPFU3NThBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55aKMTAKKzxVNzcyMz4gPFU3NzIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55yjMAorPFU3NzMwPiA8VTc3MzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnLAwCis8VTc4OUY+IDxVNzg5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+einzE4NjMKKzxVN0Q3MD4gPFU3RDcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57WwMQorPFU3RUQ2PiA8VTdFRDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnu5YxCis8VTgwMEE+IDxVODAwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iAijAKKzxVODAwQj4gPFU4MDBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ICLMTMKKzxVODA1MT4gPFU4MDUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IGRMAorPFU4MEM1PiA8VTgwQzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPog4UwCis8VTgxRjc+IDxVODFGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iHtzAKKzxVODI1Mz4gPFU4MjUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ImTMAorPFU4MkY1PiA8VTgyRjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi7UwCis8VTg3Mjg+IDxVODcyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+icqDAKKzxVODc3Nj4gPFU4Nzc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J22MjE0NgorPFU4OTBCPiA8VTg5MEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopIswCis8VThBNDQ+IDxVOEE0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iphDIKKzxVOEFEQz4gPFU4QURDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KucNworPFU4QzBEPiA8VThDMEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosI02MDgKKzxVOEQ4Mz4gPFU4RDgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LaDMAorPFU4REQ1PiA8VThERDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPot5UwCis8VThFNDA+IDxVOEU0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i5gDgKKzxVOEZFRD4gPFU4RkVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L+tNjc1Cis8VTk1N0I+IDxVOTU3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mVuzAKKzxVOUMwOD4gPFU5QzA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bCIMQorPFU5Q0JEPiA8VTlDQkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsr02Cis8VTlDQ0U+IDxVOUNDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mzjjMKKzxVNEUwMT4gPFU0RTAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LiBNjYzNAorPFU0RUMzPiA8VTRFQzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPku4M5MgorPFU1M0VFPiA8VTUzRUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlj64xMjU4Cis8VTU5NzU+IDxVNTk3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WltTAKKzxVNUUwND4gPFU1RTA0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5biEMAorPFU3MzhFPiA8VTczOEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjo40MworPFU3NTNBPiA8VTc1M0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlLoxMTIKKzxVNzUzQz4gPFU3NTNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55S8MAorPFU3NTk0PiA8VTc1OTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlpQ1Cis8VTc2RUY+IDxVNzZFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ebrzM3MzkKKzxVODAzNT4gPFU4MDM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IC1NAorPFU4NjcwPiA8VTg2NzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPombAzCis8VTkxNEE+IDxVOTE0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mFijExNQorPFU5MUQ4PiA8VTkxRDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPph5gxMgorPFU5NDg5PiA8VTk0ODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkokxNjExCis8VTk3NkE+IDxVOTc2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mdqjAKKzxVM0FDMD4gPFUzQUMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46uAMAorPFUzRDNGPiA8VTNEM0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtL8wCis8VTNGMTc+IDxVM0YxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O8lzAKKzxVNUQ3Rj4gPFU1RDdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bW/MAorPFU2QTk5PiA8VTZBOTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqpkwCis8VTZGQ0U+IDxVNkZDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a/jjAKKzxVODVBMT4gPFU4NUExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JahMAorPFU5NDI0PiA8VTk0MjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkKQwCis8VTk4MDI+IDxVOTgwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mggjEwNgorPFU5ODc2PiA8VTk4NzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpobY5OTA3Cis8VTlGMEU+IDxVOUYwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m8jjEwMDAKKzxVOUYxMT4gPFU5RjExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6byRMAorPFUzNzRFPiA8VTM3NEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnY4wCis8VTU1NzY+IDxVNTU3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WVtjY1Cis8VTVBMTc+IDxVNUExNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WolzAKKzxVNUI5QT4gPFU1QjlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a6aOTA4NzcKKzxVNUZDQT4gPFU1RkNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b+KMAorPFU2MzlGPiA8VTYzOUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjp8wCis8VTY5MTc+IDxVNjkxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aklzAKKzxVNzdGND4gPFU3N0Y0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+0MAorPFU3ODg3PiA8VTc4ODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoocyMworPFU3OEEwPiA8VTc4QTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoqAwCis8VTc4Rjg+IDxVNzhGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ejuDAKKzxVODE1QT4gPFU4MTVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IWaNDkKKzxVODQyMz4gPFU4NDIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JCjMAorPFU4QTAyPiA8VThBMDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqIIyNworPFU4QkEyPiA8VThCQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorqIyNjAyCis8VTkyQ0M+IDxVOTJDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mLjDAKKzxVOTMyMD4gPFU5MzIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YygMQorPFU5NEU0PiA8VTk0RTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpk6Q0OAorPFU5NTJEPiA8VTk1MkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplK0xOTgKKzxVOTg0MT4gPFU5ODQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aGBMAorPFU5OEUzPiA8VTk4RTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpo6MwCis8VTk5NjQ+IDxVOTk2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mlpDIKKzxVNEUxRj4gPFU0RTFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LifNDIKKzxVNEUyMj4gPFU0RTIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LiiNDU5NQorPFU0RTYzPiA8VTRFNjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuaMwCis8VTkyQTk+IDxVOTJBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mKqTAKKzxVOTRFNT4gPFU5NEU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZOlMAorPFU0RTFDPiA8VTRFMUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuJw1ODMxMAorPFU1MDMyPiA8VTUwMzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgLIwCis8VTUxQUM+IDxVNTFBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WGrDYyMTkKKzxVNTQ5QT4gPFU1NDlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZKaMTAyMgorPFU1N0VDPiA8VTU3RUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPln6wwCis8VTVBM0I+IDxVNUEzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WouzAKKzxVNUNCRD4gPFU1Q0JEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bK9MQorPFU1RDIwPiA8VTVEMjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltKAwCis8VTVEMkM+IDxVNUQyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W0rDAKKzxVNjYzOD4gPFU2NjM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pi4MAorPFU2NzcxPiA8VTY3NzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnbE0MjMKKzxVNkMyMT4gPFU2QzIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rChNworPFU2QzJEPiA8VTZDMkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsK0wCis8VTZEQjc+IDxVNkRCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a2tzIKKzxVNzBCNT4gPFU3MEI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54K1MAorPFU3QjE3PiA8VTdCMTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrJcwCis8VTgyRjM+IDxVODJGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iLszAKKzxVODNDND4gPFU4M0M0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I+EMAorPFU4NzQwPiA8VTg3NDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonYAwCis8VTlCREY+IDxVOUJERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mvnzAKKzxVOUQ4Nz4gPFU5RDg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6baHMAorPFU5RTJCPiA8VTlFMkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuKsyNQorPFU5RjE1PiA8VTlGMTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvJUyCis8VTM1QTY+IDxVMzVBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OWpjAKKzxVM0EwMj4gPFUzQTAyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46iCMAorPFU0MEEyPiA8VTQwQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgqIwCis8VTRENTQ+IDxVNEQ1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S1lDAKKzxVNThBNT4gPFU1OEE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aKlMAorPFU1QjFFPiA8VTVCMUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrJ4wCis8VTYxQzI+IDxVNjFDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aHgjk1NDEKKzxVN0JCRD4gPFU3QkJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5669MAorPFU4NDYzPiA8VTg0NjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokaMyNjE5Cis8VThBQ0M+IDxVOEFDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+irjDAKKzxVMzQ0OD4gPFUzNDQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45GIMAorPFUzNENBPiA8VTM0Q0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjk4owCis8VTM1RTI+IDxVMzVFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OXojAKKzxVMzczMT4gPFUzNzMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45yxMAorPFUzOEE1PiA8VTM4QTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoqUwCis8VTNGMkY+IDxVM0YyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O8rzAKKzxVNDE0RD4gPFU0MTREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IWNMAorPFU0Mzc2PiA8VTQzNzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjbYwCis8VTQ3OTI+IDxVNDc5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SekjAKKzxVNEY5Nz4gPFU0Rjk3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L6XMTQ2Cis8VTUwQ0Q+IDxVNTBDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WDjTAKKzxVNTFCQj4gPFU1MUJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ya7MTg0NgorPFU1MUNEPiA8VTUxQ0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlh40xNQorPFU1MkE4PiA8VTUyQTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliqg5NDIxNAorPFU1MkQ1PiA8VTUyRDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPli5U2OTAKKzxVNTc4Qz4gPFU1NzhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z6MMAorPFU1Q0QyPiA8VTVDRDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPls5IzNworPFU1Q0REPiA8VTVDREQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPls50wCis8VTYwNkI+IDxVNjA2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBqzkyCis8VTYyMTk+IDxVNjIxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aImTAKKzxVNjMwRj4gPFU2MzBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oyPMAorPFU2ODBCPiA8VTY4MEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoIs4MzYKKzxVNjhERj4gPFU2OERGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qOfMTgKKzxVNkQxRT4gPFU2RDFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rSeNzA0OAorPFU3ODUwPiA8VTc4NTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoZAzCis8VTgwRTg+IDxVODBFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iDqDEKKzxVODBGND4gPFU4MEY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IO0NzIKKzxVODE1Nj4gPFU4MTU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IWWMAorPFU5NzE4PiA8VTk3MTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnJgwCis8VTk5RTc+IDxVOTlFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mnpzAKKzxVNTE1Qz4gPFU1MTVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YWcMTY2NQorPFU1MTYwPiA8VTUxNjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhaAwCis8VTU0M0E+IDxVNTQzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WQujEKKzxVNkE3Nz4gPFU2QTc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qm3MAorPFU3QkZDPiA8VTdCRkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnr7w2Cis8VTg1Mzg+IDxVODUzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iUuDEKKzxVOTBENj4gPFU5MEQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YOWMAorPFU5MEZEPiA8VTkwRkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg70xNTMwMDAKKzxVRkEyNj4gPFVGQTI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj76imMAorPFUzN0IzPiA8VTM3QjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnrMwCis8VTNBQjc+IDxVM0FCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OqtzAKKzxVNDU3MT4gPFU0NTcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JWxMAorPFU1NTE3PiA8VTU1MTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllJc0Cis8VTU1MUU+IDxVNTUxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUnjAKKzxVNjI5Nj4gPFU2Mjk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oqWMzc5NAorPFU2NTY4PiA8VTY1Njg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlagwCis8VTY1OTc+IDxVNjU5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWlzYwMzkKKzxVNjc5Mz4gPFU2NzkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p6TMAorPFU2N0ExPiA8VTY3QTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnqEwCis8VTg2QUE+IDxVODZBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iaqjE1OAorPFU5NUQ4PiA8VTk1RDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl5gwCis8VTk2Mjc+IDxVOTYyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mYpzAKKzxVOTY2MT4gPFU5NjYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZmhNjM4Cis8VTlCMjU+IDxVOUIyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mspTM4Cis8VTlCMjY+IDxVOUIyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mspjAKKzxVOUIyQT4gPFU5QjJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ayqMAorPFU5QjJEPiA8VTlCMkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprK0wCis8VTM2RDI+IDxVMzZEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ObkjAKKzxVMzg4ND4gPFUzODg0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46KEMAorPFUzREM2PiA8VTNEQzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjt4YwCis8VTQxMDg+IDxVNDEwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SEiDAKKzxVNDU0Nj4gPFU0NTQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JWGMAorPFU0NkUwPiA8VTQ2RTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkm6AwCis8VTRCMjY+IDxVNEIyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SspjAKKzxVNjVBMz4gPFU2NUEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pajMAorPFU2OEFBPiA8VTY4QUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoqowCis8VTZCRUQ+IDxVNkJFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+avrTAKKzxVNkQ2Mj4gPFU2RDYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rWiMAorPFU3NUQ4PiA8VTc1RDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnl5gxMjEKKzxVN0FBNj4gPFU3QUE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56qmNTMyCis8VTdBQzc+IDxVN0FDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+erhzIKKzxVODEzMD4gPFU4MTMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ISwMAorPFU4MzczPiA8VTgzNzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojbMwCis8VThBQUQ+IDxVOEFBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iqrTAKKzxVOEI4MD4gPFU4QjgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K6AMjA1Cis8VThDNDY+IDxVOEM0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ixhjM3NjkKKzxVOTAxNz4gPFU5MDE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YCXMTgyOQorPFU5MkMwPiA8VTkyQzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpi4AwCis8VTk1OTc+IDxVOTU5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mWlzAKKzxVOTkxNj4gPFU5OTE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aSWMAorPFU5OTdFPiA8VTk5N0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppb4yCis8VTlCMkM+IDxVOUIyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+msrDAKKzxVNTNCRT4gPFU1M0JFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y6+MAorPFU1NjFGPiA8VTU2MUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmJ8xMzQ5Cis8VTc3NjM+IDxVNzc2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+edozQyNzUKKzxVOTE4Rj4gPFU5MThGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YaPMAorPFU5NUNEPiA8VTk1Q0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl40yCis8VTk2MDc+IDxVOTYwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mYhzAKKzxVM0M2OT4gPFUzQzY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47GpMAorPFUzRTNGPiA8VTNFM0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuL8wCis8VTNGODQ+IDxVM0Y4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O+hDAKKzxVNDRFRj4gPFU0NEVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JOvMAorPFU0NjcxPiA8VTQ2NzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmbEwCis8VTQ4QjE+IDxVNDhCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SisTAKKzxVNEE4NT4gPFU0QTg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KqFMAorPFU0QUYzPiA8VTRBRjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkq7MwCis8VTRCQjc+IDxVNEJCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SutzAKKzxVNTEyNT4gPFU1MTI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YSlMAorPFU1MURGPiA8VTUxREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlh58wCis8VTUzMzU+IDxVNTMzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WMtTAKKzxVNUIzQj4gPFU1QjNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ay7MAorPFU2OTFGPiA8VTY5MUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpJ81Cis8VTZBREQ+IDxVNkFERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+arnTAKKzxVNkJCMD4gPFU2QkIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q6wMAorPFU2QkQyPiA8VTZCRDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmr5I2MDI1Cis8VTZEOUM+IDxVNkQ5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a2nDAKKzxVNkUwRT4gPFU2RTBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5riOMzU5Cis8VTcwMDY+IDxVNzAwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eAhjMKKzxVNzI0RD4gPFU3MjREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54mNNjkKKzxVNzI1OD4gPFU3MjU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54mYMAorPFU3MjhBPiA8VTcyOEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniooxNDcKKzxVNzJBMj4gPFU3MkEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54qiMAorPFU3MkVDPiA8VTcyRUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPni6wxODM3MgorPFU3MzY4PiA8VTczNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjagyNjAKKzxVNzRDND4gPFU3NEM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55OEMAorPFU3NkJFPiA8VTc2QkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmr4wCis8VTg3NzM+IDxVODc3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+idszAKKzxVOEI5Rj4gPFU4QjlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K6fMAorPFU4QkZCPiA8VThCRkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor7sxOTA2MgorPFU4QzQ0PiA8VThDNDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosYQwCis8VThEMTU+IDxVOEQxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i0lTAKKzxVOTQ1Rj4gPFU5NDVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZGfMAorPFU5N0M3PiA8VTk3Qzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpn4cwCis8VTk3RTU+IDxVOTdFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mfpTAKKzxVOTgxMz4gPFU5ODEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aCTOTMKKzxVOUEzMz4gPFU5QTMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aizMAorPFU5QUQxPiA8VTlBRDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpq5ExMAorPFU5RUU5PiA8VTlFRTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpu6kzNQorPFU5RUY3PiA8VTlFRjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpu7cwCis8VTQwM0U+IDxVNDAzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SAvjAKKzxVNDIxRT4gPFU0MjFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IieMAorPFU0NDE3PiA8VTQ0MTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkJcwCis8VTU4MzU+IDxVNTgzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WgtTE1NzUKKzxVNUUzRT4gPFU1RTNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bi+MAorPFU2NjhGPiA8VTY2OEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmo8wCis8VTc0M0Q+IDxVNzQzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eQvTAKKzxVNzc3OT4gPFU3Nzc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5525MTEzMworPFU3QjAzPiA8VTdCMDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrIM1NTIKKzxVN0JFND4gPFU3QkU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56+kNAorPFU4OEZCPiA8VTg4RkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo7swCis8VTg5QTk+IDxVODlBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+imqTIKKzxVOENFRD4gPFU4Q0VEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LOtMTgKKzxVOEQ0Qz4gPFU4RDRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LWMMjI1NgorPFU5MzE2PiA8VTkzMTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjJYwCis8VTQxMEQ+IDxVNDEwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SEjTAKKzxVNDE0QT4gPFU0MTRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IWKMAorPFU0N0ZCPiA8VTQ3RkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkn7swCis8VTRDQTc+IDxVNENBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SypzAKKzxVNTVBNT4gPFU1NUE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZalMAorPFU1OTkyPiA8VTU5OTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlppIxMTg4Cis8VTU5QUM+IDxVNTlBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WmrDIKKzxVNUVBNj4gPFU1RUE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bqmNDI3MjYKKzxVNjU4MT4gPFU2NTgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5paBMAorPFU2NzVDPiA8VTY3NUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnZwzNDMzCis8VTY5RDY+IDxVNjlENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+anljAKKzxVNkE1MD4gPFU2QTUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qmQOTYKKzxVNkJBQz4gPFU2QkFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q6sMAorPFU2RTIxPiA8VTZFMjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuKEzNjc0Cis8VTc5RkE+IDxVNzlGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+enujAKKzxVN0MzNT4gPFU3QzM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57C1MAorPFU4MDlBPiA8VTgwOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogpozMTc1Cis8VTgyOEY+IDxVODI4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iKjzAKKzxVODM3MD4gPFU4MzcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I2wMAorPFU4Nzk5PiA8VTg3OTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonpkwCis8VTg4Mjc+IDxVODgyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+igpzAKKzxVODgzOT4gPFU4ODM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KC5MjgKKzxVOTM0RD4gPFU5MzREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y2NMAorPFU5NTQwPiA8VTk1NDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplYAyMDUKKzxVOTc2Rj4gPFU5NzZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z2vMAorPFU1MDczPiA8VTUwNzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgbMwCis8VTUyNkM+IDxVNTI2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WJrDAKKzxVNUE4Rj4gPFU1QThGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aqPMAorPFU3QUVGPiA8VTdBRUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnq68xMzExOAorPFU4MDExPiA8VTgwMTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogJEwCis8VTg5MEQ+IDxVODkwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ikjTAKKzxVOTM3ND4gPFU5Mzc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y20MAorPFU3N0VEPiA8VTc3RUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnn60xMDE2MworPFUzQUMxPiA8VTNBQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjq4EwCis8VTNDNkQ+IDxVM0M2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OxrTAKKzxVNDgyQT4gPFU0ODJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KCqMAorPFU1ODQ1PiA8VTU4NDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloYUwCis8VTY1QUQ+IDxVNjVBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWrTIwODA2Cis8VTY1Qjc+IDxVNjVCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWtzE4MgorPFU2OTM0PiA8VTY5MzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpLQyMQorPFU2QkI1PiA8VTZCQjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrrUxODAyNAorPFU2QkM4PiA8VTZCQzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmr4gwCis8VTcxNDU+IDxVNzE0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eFhTYKKzxVNzQ1Nj4gPFU3NDU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55GWMAorPFU3OEFCPiA8VTc4QUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoqswCis8VTdDMTY+IDxVN0MxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ewljAKKzxVN0M2QT4gPFU3QzZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57GqMAorPFU3RERFPiA8VTdEREU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnt54xCis8VTdGMEU+IDxVN0YwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e8jjc0NgorPFU4MTc2PiA8VTgxNzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohbYwCis8VTg0NkU+IDxVODQ2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iRrjAKKzxVOEU5Nj4gPFU4RTk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LqWMAorPFU5MzVCPiA8VTkzNUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjZsxCis8VTk1M0I+IDxVOTUzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mUuzQ5OQorPFU1Nzk2PiA8VTU3OTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnpYwCis8VTU4MDY+IDxVNTgwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WghjY0MjgKKzxVNTg2MD4gPFU1ODYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aGgMAorPFU1RDVGPiA8VTVENUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltZ8wCis8VTc1RkQ+IDxVNzVGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eXvTAKKzxVNzhEMz4gPFU3OEQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56OTMAorPFU5ODI3PiA8VTk4Mjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoKcwCis8VTM2NDI+IDxVMzY0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OZgjAKKzxVMzdDQj4gPFUzN0NCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45+LMAorPFUzODFBPiA8VTM4MUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoJowCis8VTNCMjM+IDxVM0IyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OsozAKKzxVM0NEND4gPFUzQ0Q0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47OUMAorPFUzRDdEPiA8VTNEN0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtb0wCis8VTQxQ0Y+IDxVNDFDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SHjzAKKzxVNDFFND4gPFU0MUU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IekMAorPFU0NTJBPiA8VTQ1MkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklKowCis8VTRBMzQ+IDxVNEEzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SotDAKKzxVNEEzQT4gPFU0QTNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ki6MAorPFU0QjA4PiA8VTRCMDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrIgwCis8VTRCM0Q+IDxVNEIzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SsvTAKKzxVNEJERj4gPFU0QkRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K+fMAorPFU1MTRBPiA8VTUxNEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhYowCis8VTUxNEM+IDxVNTE0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WFjDAKKzxVNTE1MT4gPFU1MTUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YWRNTg2Cis8VTVCRjk+IDxVNUJGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WvuTE4MDU4OQorPFU1QkZFPiA8VTVCRkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlr74wCis8VTVDMEQ+IDxVNUMwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WwjTEyNTcKKzxVNjAzQz4gPFU2MDNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oC8MjIKKzxVNjE5RD4gPFU2MTlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oadMQorPFU2MTlFPiA8VTYxOUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhp4wCis8VTYxREY+IDxVNjFERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aHnzAKKzxVNkZFNz4gPFU2RkU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r+nMAorPFU2RkZCPiA8VTZGRkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv7swCis8VTcwMjk+IDxVNzAyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eAqTAKKzxVNzg5Mz4gPFU3ODkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56KTMTcKKzxVN0Q5MD4gPFU3RDkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57aQMAorPFU4NUIxPiA8VTg1QjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolrExCis8VThCNDg+IDxVOEI0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+itiDAKKzxVOEY1Qj4gPFU4RjVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L2bMAorPFU5NDEzPiA8VTk0MTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkJMwCis8VTk0MUM+IDxVOTQxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mQnDAKKzxVOTU2Nj4gPFU5NTY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZWmMAorPFU5NjFGPiA8VTk2MUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmJ8yNjkwNAorPFU5NjZFPiA8VTk2NkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpma4wCis8VTk2OEE+IDxVOTY4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+maijI0MworPFU1NDI4PiA8VTU0Mjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkKgxMDE3Cis8VTU2Nzg+IDxVNTY3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WZuDMKKzxVNThBOT4gPFU1OEE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aKpMzg1Cis8VTU4QUE+IDxVNThBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WiqjAKKzxVNjBDNz4gPFU2MEM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oOHMgorPFU2NDg5PiA8VTY0ODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkokwCis8VTY0QjQ+IDxVNjRCND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aStDAKKzxVNjU2Nj4gPFU2NTY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pWmMjA5NQorPFU3MjlDPiA8VTcyOUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnipwwCis8VTc5MDU+IDxVNzkwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ekhTgKKzxVODczMz4gPFU4NzMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JyzMAorPFU4RTcyPiA8VThFNzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoubIxOTU5Cis8VThFN0U+IDxVOEU3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i5vjAKKzxVOUE1MD4gPFU5QTUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6amQMAorPFU3NkY5PiA8VTc2Rjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnm7kyMDQKKzxVOERCOD4gPFU4REI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6La4MzYKKzxVOEU4OT4gPFU4RTg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LqJMAorPFUzQjNGPiA8VTNCM0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrL8wCis8VTQ5MUM+IDxVNDkxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SknDAKKzxVNEYwNT4gPFU0RjA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LyFMAorPFU1NkU0PiA8VTU2RTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlm6Q3MQorPFU1NzQ5PiA8VTU3NDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnYkwCis8VTVEMzg+IDxVNUQzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W0uDAKKzxVNUU4OT4gPFU1RTg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bqJMAorPFU2MjdEPiA8VTYyN0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmib0yCis8VTY5NkY+IDxVNjk2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+alrzEKKzxVNkM4Qz4gPFU2QzhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rKMNjcyCis8VTZGNjE+IDxVNkY2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a9oTAKKzxVNzA5Nj4gPFU3MDk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54KWMjQyCis8VTcxQzk+IDxVNzFDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHiTEKKzxVNzZGRT4gPFU3NkZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55u+MzA3MgorPFU3ODE4PiA8VTc4MTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoJg0Cis8VTgxNUU+IDxVODE1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iFnjAKKzxVOEUzMj4gPFU4RTMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LiyMAorPFU5MDA3PiA8VTkwMDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgIcwCis8VTkwNDE+IDxVOTA0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mBgTI5MAorPFU5MDZGPiA8VTkwNkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpga8wCis8VTkyMEQ+IDxVOTIwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mIjTMKKzxVOTQ5RD4gPFU5NDlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZKdNTYzCis8VTk4N0Y+IDxVOTg3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mhvzE1Njk1Cis8VTlEQTg+IDxVOURBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m2qDAKKzxVNTI1Rj4gPFU1MjVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YmfMAorPFU1NDg0PiA8VTU0ODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkoQ0MTkKKzxVNTRDNj4gPFU1NEM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZOGNjg5Cis8VTU2ODk+IDxVNTY4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WaiTAKKzxVNTkxQT4gPFU1OTFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aSaMTM0NDgwCis8VTU5MUI+IDxVNTkxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WkmzAKKzxVNUQxQz4gPFU1RDFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bScMAorPFU2Mzg3PiA8VTYzODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjocyNTEKKzxVODMyND4gPFU4MzI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IykMAorPFU4OEYwPiA8VTg4RjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo7AxNQorPFUzOERFPiA8VTM4REU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjo54wCis8VTQ0M0U+IDxVNDQzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SQvjAKKzxVNTFEOT4gPFU1MUQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YeZMAorPFU1MjZCPiA8VTUyNkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliaswCis8VTU5M0E+IDxVNTkzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WkujM4ODMKKzxVNTk2QT4gPFU1OTZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aWqMzEKKzxVNjU1Mz4gPFU2NTUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pWTMAorPFU2NTVBPiA8VTY1NUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlZowCis8VTY1NjA+IDxVNjU2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aVoDUKKzxVNjU2QT4gPFU2NTZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pWqMAorPFU2OTJGPiA8VTY5MkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpK8wCis8VTZCRjI+IDxVNkJGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+avsjAKKzxVNzVFNT4gPFU3NUU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55elMAorPFU4MzhDPiA8VTgzOEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojowwCis8VTg5NTc+IDxVODk1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+illzAKKzxVOEUzMT4gPFU4RTMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LixOTY0Cis8VTkyMkM+IDxVOTIyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mIrDAKKzxVOTQzOD4gPFU5NDM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZC4MAorPFU5NENFPiA8VTk0Q0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpk44yMjIKKzxVOUJCNT4gPFU5QkI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a61MAorPFUzNTBEPiA8VTM1MEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlI0wCis8VTM1QkM+IDxVMzVCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OWvDAKKzxVMzY1MD4gPFUzNjUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45mQMAorPFUzNkM2PiA8VTM2QzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjm4YwCis8VTM2Q0E+IDxVMzZDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ObijAKKzxVMzk2OT4gPFUzOTY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46WpMAorPFUzRUQ0PiA8VTNFRDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPju5QwCis8VTQ0QjM+IDxVNDRCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SSszAKKzxVNDY2ND4gPFU0NjY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JmkMAorPFU0ODI0PiA8VTQ4MjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoKQwCis8VTQ5MkE+IDxVNDkyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SkqjAKKzxVNEE2Mz4gPFU0QTYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KmjMAorPFU0QUMyPiA8VTRBQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkq4IwCis8VTRCRUM+IDxVNEJFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SvrDAKKzxVNEVCOD4gPFU0RUI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Lq4MAorPFU1NERBPiA8VTU0REE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlk5ozCis8VTU2QjI+IDxVNTZCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WasjAKKzxVNTc5Qj4gPFU1NzlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z6bMjA2Cis8VTU3OUM+IDxVNTc5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WenDAKKzxVNTdGNT4gPFU1N0Y1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z+1MTAKKzxVNjMwNT4gPFU2MzA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oyFMAorPFU2MzA2PiA8VTYzMDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjIYwCis8VTY3MzU+IDxVNjczNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+actTYzNzcKKzxVNjczNj4gPFU2NzM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5py2MAorPFU2ODU3PiA8VTY4NTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoZcwCis8VTc1RDE+IDxVNzVEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eXkTAKKzxVN0Q5RT4gPFU3RDlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57aeMAorPFU3RjBEPiA8VTdGMEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvI0zCis8VThEOTM+IDxVOEQ5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i2kzAKKzxVOEVCMT4gPFU4RUIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LqxMAorPFU4RUIyPiA8VThFQjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPourI0MjYwCis8VThFQzM+IDxVOEVDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i7gzAKKzxVOTUxNz4gPFU5NTE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZSXNQorPFU5QjBDPiA8VTlCMEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprIwwCis8VTM5Rjc+IDxVMzlGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OntzAKKzxVM0VFNz4gPFUzRUU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47unMAorPFU0MTVDPiA8VTQxNUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhZwwCis8VTQzNzQ+IDxVNDM3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SNtDAKKzxVNDQ2OD4gPFU0NDY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JGoMAorPFU0NjQzPiA8VTQ2NDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmYMwCis8VTQ2NUY+IDxVNDY1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SZnzAKKzxVNDkzQj4gPFU0OTNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KS7MAorPFU0QTU0PiA8VTRBNTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqZQwCis8VTUyMzQ+IDxVNTIzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WItDAKKzxVNTI0MT4gPFU1MjQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YmBMjMzCis8VTU4MTU+IDxVNTgxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WglTExNzEKKzxVNThBRT4gPFU1OEFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aKuMTEKKzxVNThBRj4gPFU1OEFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aKvMAorPFU1QzJFPiA8VTVDMkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsK4wCis8VTVEOUU+IDxVNUQ5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W2njAKKzxVNjBGMD4gPFU2MEYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oOwMzQ4Cis8VTYxOUM+IDxVNjE5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aGnDAKKzxVNjdDMT4gPFU2N0MxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p+BNAorPFU2N0VFPiA8VTY3RUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmn64wCis8VTcwQTc+IDxVNzBBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eCpzAKKzxVNzBBOD4gPFU3MEE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54KoMAorPFU4MjM1PiA8VTgyMzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiLUyMDQKKzxVODg4OT4gPFU4ODg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KKJMAorPFU4QzgwPiA8VThDODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosoAwCis8VThERTU+IDxVOERFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i3pTAKKzxVOERGQT4gPFU4REZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Le6MzgzCis8VTk2NEE+IDxVOTY0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mZijAKKzxVOTY0Rj4gPFU5NjRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZmPMAorPFU5OEZGPiA8VTk4RkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpo78wCis8VTk5NzM+IDxVOTk3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mlszAKKzxVOTlCMT4gPFU5OUIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aaxMAorPFU5OUM0PiA8VTk5QzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpp4QwCis8VTlBNkU+IDxVOUE2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mprjM5NQorPFU5RDdEPiA8VTlEN0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptb0xNQorPFU1OUI4PiA8VTU5Qjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlprgwCis8VTU5QkY+IDxVNTlCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WmvzAKKzxVNUEzRj4gPFU1QTNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ai/MAorPFU1QTQwPiA8VTVBNDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqYA5NgorPFU1QzU5PiA8VTVDNTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsZk5NAorPFU1Q0M5PiA8VTVDQzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPls4kwCis8VTc1RkU+IDxVNzVGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eXvjAKKzxVOTRCNj4gPFU5NEI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZK2MAorPFUzRjAyPiA8VTNGMDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvIIwCis8VTNGMzA+IDxVM0YzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O8sDAKKzxVNDEwOT4gPFU0MTA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ISJMAorPFU0NTRGPiA8VTQ1NEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklY8wCis8VTQ1Qjg+IDxVNDVCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SWuDAKKzxVNEE3OT4gPFU0QTc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Km5MAorPFU0QzZFPiA8VTRDNkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksa4wCis8VTRDRDc+IDxVNENENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SzlzAKKzxVNENEOD4gPFU0Q0Q4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LOYMAorPFU0RkM0PiA8VTRGQzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkv4Q2Nzk5Cis8VTU0MkE+IDxVNTQyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WQqjAKKzxVNTZFRT4gPFU1NkVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZuuMgorPFU1QTI1PiA8VTVBMjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqKU5MjcKKzxVNUNFOD4gPFU1Q0U4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bOoMTkzCis8VTVDRTk+IDxVNUNFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WzqTAKKzxVNkQ5MD4gPFU2RDkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5raQMAorPFU3M0Y0PiA8VTczRjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnj7QwCis8VTc2OTI+IDxVNzY5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eakjAKKzxVNzc0Qj4gPFU3NzRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj552LMAorPFU3ODZBPiA8VTc4NkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoaowCis8VTc4QzA+IDxVNzhDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ejgDAKKzxVODNBQT4gPFU4M0FBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I6qNDEKKzxVODZGRT4gPFU4NkZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ju+NDI2Cis8VThBMUI+IDxVOEExQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iomzIKKzxVOEE5MD4gPFU4QTkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KqQMQorPFU4QjRDPiA8VThCNEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorYwwCis8VThCQjk+IDxVOEJCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iuuTE1MgorPFU4RkQ3PiA8VThGRDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPov5cwCis8VTkyMEI+IDxVOTIwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mIizAKKzxVOTJFOD4gPFU5MkU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YuoMAorPFU5NTA3PiA8VTk1MDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplIc0Cis8VTk4MUY+IDxVOTgxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mgnzAKKzxVOTg0RD4gPFU5ODREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aGNMjYKKzxVOTg5RD4gPFU5ODlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aKdNTE0NgorPFU5QTAwPiA8VTlBMDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqIAwCis8VTlCNjQ+IDxVOUI2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mtpDAKKzxVOUQ1RD4gPFU5RDVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bWdMworPFU5RDVFPiA8VTlENUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptZ4wCis8VTlFNDU+IDxVOUU0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m5hTEwNjgKKzxVM0YyMj4gPFUzRjIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47yiMAorPFU2MEFBPiA8VTYwQUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgqowCis8VTYwRTE+IDxVNjBFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aDoTEwOQorPFU2ODYwPiA8VTY4NjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoaA5NAorPFU2OTBGPiA8VTY5MEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpI8xCis8VTM0RjU+IDxVMzRGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OTtTAKKzxVMzUyOT4gPFUzNTI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45SpMAorPFUzNTRFPiA8VTM1NEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlY4wCis8VTM1QkU+IDxVMzVCRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OWvjAKKzxVMzVDMT4gPFUzNUMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45eBMAorPFUzN0U3PiA8VTM3RTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjn6cwCis8VTM4MEI+IDxVMzgwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OgizAKKzxVMzg0Qj4gPFUzODRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46GLMAorPFUzOThEPiA8VTM5OEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpo0wCis8VTM5RDY+IDxVMzlENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OnljAKKzxVM0E3NT4gPFUzQTc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46m1MAorPFUzQjk5PiA8VTNCOTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrpkwCis8VTNDNjY+IDxVM0M2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OxpjAKKzxVM0RDOD4gPFUzREM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47eIMAorPFU0MTkzPiA8VTQxOTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhpMwCis8VTQ0NjU+IDxVNDQ2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SRpTAKKzxVNDQ2QT4gPFU0NDZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JGqMAorPFU0NENBPiA8VTQ0Q0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkk4owCis8VTQ1M0U+IDxVNDUzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SUvjAKKzxVNDY3Mz4gPFU0NjczPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JmzMAorPFU0NkQ2PiA8VTQ2RDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkm5YwCis8VTQ3NDg+IDxVNDc0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SdiDAKKzxVNDdBOT4gPFU0N0E5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J6pMAorPFU0OERFPiA8VTQ4REU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPko54wCis8VTRBRjc+IDxVNEFGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SrtzAKKzxVNENFQz4gPFU0Q0VDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LOsMAorPFU1MDU0PiA8VTUwNTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgZQwCis8VTUwRUI+IDxVNTBFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WDqzAKKzxVNTM3RT4gPFU1MzdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y2+MQorPFU1Mzg0PiA8VTUzODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljoQ4NjcKKzxVNTQ0Mz4gPFU1NDQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZGDNTUyCis8VTU0QTI+IDxVNTRBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WSojAKKzxVNTRCOT4gPFU1NEI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZK5MAorPFU1NTE2PiA8VTU1MTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllJYwCis8VTU1NUU+IDxVNTU1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WVnjgKKzxVNTY2OT4gPFU1NjY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZmpNjc3Cis8VTU3MTQ+IDxVNTcxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WclDAKKzxVNTdBOT4gPFU1N0E5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z6pNTAKKzxVNTdBRD4gPFU1N0FEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z6tNAorPFU1N0UxPiA8VTU3RTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPln6EwCis8VTU4MEE+IDxVNTgwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WgijIKKzxVNTgyRT4gPFU1ODJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aCuMAorPFU1Qzc1PiA8VTVDNzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsbUwCis8VTVDOEI+IDxVNUM4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WyizAKKzxVNUQzRj4gPFU1RDNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bS/MAorPFU1REFEPiA8VTVEQUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltq0wCis8VTYxMTU+IDxVNjExNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aElTY4MworPFU2MjM5PiA8VTYyMzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiLkwCis8VTYyN0M+IDxVNjI3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aJvDQ0OAorPFU2NDI0PiA8VTY0MjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkKQwCis8VTY0Mzk+IDxVNjQzOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aQuTAKKzxVNjc5OT4gPFU2Nzk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p6ZMAorPFU2QUVFPiA8VTZBRUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmq64wCis8VTZFNDI+IDxVNkU0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a5gjAKKzxVNzQyNz4gPFU3NDI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55CnMAorPFU3ODEwPiA8VTc4MTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoJAwCis8VTc4Mjg+IDxVNzgyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+egqDAKKzxVNzg0Nj4gPFU3ODQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56GGMAorPFU4MTZEPiA8VTgxNkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoha0xNworPFU4MkNBPiA8VTgyQ0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi4owCis8VTg0M0M+IDxVODQzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iQvDgyCis8VTg1NUE+IDxVODU1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iVmjQKKzxVODYwMT4gPFU4NjAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JiBMAorPFU4Njg1PiA8VTg2ODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomoUwCis8VTg3NDE+IDxVODc0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+idgTAKKzxVODlBOD4gPFU4OUE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KaoMAorPFU4QTdCPiA8VThBN0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqbswCis8VThBRTQ+IDxVOEFFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+irpDAKKzxVOEI4RD4gPFU4QjhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K6NMAorPFU4QzE0PiA8VThDMTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosJQ5NQorPFU4QzVGPiA8VThDNUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosZ8wCis8VThDOTY+IDxVOEM5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iyljAKKzxVOEVEQj4gPFU4RURCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LubMAorPFU4RUY2PiA8VThFRjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPou7YwCis8VThGNkQ+IDxVOEY2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i9rTQ4Cis8VTkwNEM+IDxVOTA0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mBjDAKKzxVOTA0Rj4gPFU5MDRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YGPNzAyCis8VTkxMDI+IDxVOTEwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mEgjkxMAorPFU5MzU0PiA8VTkzNTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjZQwCis8VTk0Njk+IDxVOTQ2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mRqTAKKzxVOTUzNz4gPFU5NTM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZS3NTEKKzxVOTVCQz4gPFU5NUJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Za8MAorPFU5NjBGPiA8VTk2MEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmI82Cis8VTk2Mjg+IDxVOTYyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mYqDEKKzxVOTYzOD4gPFU5NjM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Zi4MAorPFU5ODFFPiA8VTk4MUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoJ4wCis8VTk4NEU+IDxVOTg0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mhjjAKKzxVOTg5QT4gPFU5ODlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aKaOTQKKzxVOTkxMz4gPFU5OTEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aSTMjQKKzxVOTkyOT4gPFU5OTI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aSpMAorPFU5OTdGPiA8VTk5N0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppb8zMzM4Cis8VTlCNjU+IDxVOUI2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mtpTAKKzxVOUMxMD4gPFU5QzEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bCQNworPFU5Qzc3PiA8VTlDNzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsbczCis8VTlDQzQ+IDxVOUNDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mzhDI1OQorPFU5RDlBPiA8VTlEOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptpowCis8VTlFNTc+IDxVOUU1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m5lzMyCis8VTlGNzY+IDxVOUY3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m9tjAKKzxVOEE5Mj4gPFU4QTkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KqSMAorPFU1OTQwPiA8VTU5NDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpYAwCis8VTYwNjk+IDxVNjA2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBqTcxNDYKKzxVNzE3RT4gPFU3MTdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54W+MAorPFU4NEJEPiA8VTg0QkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokr0zCis8VTQxNzA+IDxVNDE3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SFsDAKKzxVNDI5MD4gPFU0MjkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IqQMAorPFU0QjM2PiA8VTRCMzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrLYwCis8VTRCNTM+IDxVNEI1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+StkzAKKzxVNEI2MT4gPFU0QjYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K2hMAorPFU2NDQxPiA8VTY0NDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkYExMDcKKzxVN0NFNj4gPFU3Q0U2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57OmMAorPFU5OTRFPiA8VTk5NEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppY4wCis8VTk3QTU+IDxVOTdBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mepTAKKzxVMzU4Nz4gPFUzNTg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45aHMAorPFUzNzI4PiA8VTM3Mjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnKgwCis8VTM5RUI+IDxVMzlFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OnqzAKKzxVM0I5NT4gPFUzQjk1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj466VMAorPFU0MkU5PiA8VTQyRTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPki6kwCis8VTQzOUY+IDxVNDM5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SOnzAKKzxVNDNBMD4gPFU0M0EwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I6gMAorPFU0Qjk4PiA8VTRCOTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrpgwCis8VTRGOTU+IDxVNEY5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+lTAKKzxVNTEzRj4gPFU1MTNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YS/OTU4ODkKKzxVNTE1MD4gPFU1MTUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YWQMAorPFU1MTUyPiA8VTUxNTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhZIyMjQKKzxVNTUzMj4gPFU1NTMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZSyMQorPFU2ODJEPiA8VTY4MkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoK0wCis8VTZBQkQ+IDxVNkFCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aqvTAKKzxVNkQwRj4gPFU2RDBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rSPMAorPFU4MDBDPiA8VTgwMEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogIwxNDcyMjEKKzxVODAwRj4gPFU4MDBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ICPMAorPFU4MDRGPiA8VTgwNEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogY8wCis8VTgwRjk+IDxVODBGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iDuTAKKzxVODFEMT4gPFU4MUQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IeRMAorPFU4MzRCPiA8VTgzNEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojYswCis8VTg4QkI+IDxVODhCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iiuzAKKzxVOEYwMD4gPFU4RjAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LyAMAorPFU4RjVDPiA8VThGNUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovZwwCis8VTk2NTE+IDxVOTY1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mZkTAKKzxVOTZBRD4gPFU5NkFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZqtMAorPFU5QUY1PiA8VTlBRjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpq7UwCis8VTlCOUU+IDxVOUI5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+munjAKKzxVOUM5NT4gPFU5Qzk1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bKVMAorPFU5RDJGPiA8VTlEMkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptK8wCis8VTlFMzg+IDxVOUUzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m4uDAKKzxVMzZCNz4gPFUzNkI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45q3MAorPFUzOEJEPiA8VTM4QkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjor0wCis8VTQyRDk+IDxVNDJEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SLmTAKKzxVNDMzQT4gPFU0MzNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Iy6MAorPFU1QzEyPiA8VTVDMTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsJIwCis8VTVDMTM+IDxVNUMxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WwkzAKKzxVNUMxND4gPFU1QzE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bCUMzk5NDEKKzxVNUNDRj4gPFU1Q0NGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bOPMAorPFU2ODJFPiA8VTY4MkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoK4wCis8VTZEMzE+IDxVNkQzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a0sTM4Cis8VTcyM0U+IDxVNzIzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eIvjE2OAorPFU3M0U1PiA8VTczRTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnj6U1Cis8VTgwMzM+IDxVODAzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iAszEwNzc4Cis8VTg1QkU+IDxVODVCRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iWvjAKKzxVOEZFOT4gPFU4RkU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L+pNTUKKzxVOTA4Nz4gPFU5MDg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKHMAorPFU5MjdBPiA8VTkyN0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpibowCis8VTk0RDI+IDxVOTREMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mTkjQ1Cis8VTk5MEM+IDxVOTkwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mkjDAKKzxVOTk3NT4gPFU5OTc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aW1MTQ4Cis8VTk5RUM+IDxVOTlFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mnrDEKKzxVMzQ4Mz4gPFUzNDgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45KDMAorPFUzNkM1PiA8VTM2QzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjm4UwCis8VTQzQjY+IDxVNDNCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SOtjAKKzxVNDNFQT4gPFU0M0VBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I+qMAorPFU0OEY1PiA8VTQ4RjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPko7UwCis8VTRFOEM+IDxVNEU4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6jDY1NDU2Cis8VTRGNzQ+IDxVNEY3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S9tDEKKzxVNTIzNT4gPFU1MjM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Yi1MAorPFU1NEExPiA8VTU0QTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkqEwCis8VTVGMEQ+IDxVNUYwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W8jTAKKzxVNUYxMD4gPFU1RjEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5byQMAorPFU2QTMyPiA8VTZBMzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqLIwCis8VTZCRTY+IDxVNkJFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+avpjAKKzxVNzczMj4gPFU3NzMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55yyMAorPFU4ODQ4PiA8VTg4NDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooYgwCis8VThBODA+IDxVOEE4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iqgDAKKzxVOENBRT4gPFU4Q0FFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LKuMAorPFU4Q0IzPiA8VThDQjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosrMwCis8VThEMzA+IDxVOEQzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i0sDQxCis8VTUzRDE+IDxVNTNEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPkTEyNzI0NgorPFU2QTQzPiA8VTZBNDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqYMwCis8VTc2N0E+IDxVNzY3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eZujIKKzxVNzY3Qz4gPFU3NjdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55m8ODQ4Cis8VTc3ODI+IDxVNzc4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eegjAKKzxVOTE2Nj4gPFU5MTY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YWmMAorPFU5MTk3PiA8VTkxOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphpcwCis8VTkxQjE+IDxVOTFCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mGsTAKKzxVMzU3OT4gPFUzNTc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45W5MAorPFUzNjNBPiA8VTM2M0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmLowCis8VTQxQzU+IDxVNDFDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SHhTAKKzxVNDhGOT4gPFU0OEY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KO5MAorPFU0RTRGPiA8VTRFNEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuY8zNDU4Cis8VTRGMTA+IDxVNEYxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S8kDEzNDMKKzxVNTBBMD4gPFU1MEEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YKgMAorPFU1N0ExPiA8VTU3QTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnqE0Cis8VTU5QzI+IDxVNTlDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WngjAKKzxVNjgzMD4gPFU2ODMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qCwMAorPFU3NUJBPiA8VTc1QkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlrowCis8VTdCNEY+IDxVN0I0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+etjzE3OAorPFU3RjVBPiA8VTdGNUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvZoyNTExCis8VTdGNzA+IDxVN0Y3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9sDE5Cis8VTdGNzg+IDxVN0Y3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9uDAKKzxVODVDNT4gPFU4NUM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JeFMQorPFU5NUE1PiA8VTk1QTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplqUwCis8VTk2MDA+IDxVOTYwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mYgDYxOAorPFU0MEIyPiA8VTQwQjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgrIwCis8VTRGNzE+IDxVNEY3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S9sTAKKzxVNkNENT4gPFU2Q0Q1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rOVNzk3NjUKKzxVNzA0Qj4gPFU3MDRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54GLNzAwCis8VTc4MUQ+IDxVNzgxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+egnTM2Cis8VTM2RjI+IDxVMzZGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ObsjAKKzxVNDRBNT4gPFU0NEE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JKlMAorPFU3M0QwPiA8VTczRDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnj5AyMworPFU3NDNBPiA8VTc0M0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkLowCis8VTg1NUY+IDxVODU1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iVnzAKKzxVOUFFQT4gPFU5QUVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6auqOAorPFU5QUVFPiA8VTlBRUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpq64xMzcKKzxVNTBFMD4gPFU1MEUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YOgMAorPFU1QjBGPiA8VTVCMEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrI8wCis8VTVFMDY+IDxVNUUwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W4hjE1NzYKKzxVNUU2MT4gPFU1RTYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bmhMTg3Cis8VTY1RDk+IDxVNjVEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aXmTAKKzxVNjVEQj4gPFU2NURCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pebMQorPFU3NTY4PiA8VTc1Njg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlagwCis8VTc1NkE+IDxVNzU2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eVqjQ3MDkKKzxVN0M1Mz4gPFU3QzUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57GTMAorPFU3RTU5PiA8VTdFNTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuZkzCis8VTdGRkI+IDxVN0ZGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e/uzExNDEyCis8VTg1NDM+IDxVODU0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iVgzE4NAorPFU4NUU5PiA8VTg1RTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPol6k2NjEKKzxVOEY1Mz4gPFU4RjUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L2TMAorPFU5OERDPiA8VTk4REM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpo5wwCis8VTlDNTU+IDxVOUM1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxlTAKKzxVMzgzNj4gPFUzODM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46C2MAorPFUzRTBCPiA8VTNFMEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuIswCis8VTNFOTU+IDxVM0U5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O6lTAKKzxVNDAwMD4gPFU0MDAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ICAMAorPFU0MDFGPiA8VTQwMUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgJ8wCis8VTQyNTI+IDxVNDI1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SJkjAKKzxVNDJBOT4gPFU0MkE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IqpMAorPFU0MkUzPiA8VTQyRTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPki6MwCis8VTQyRTY+IDxVNDJFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SLpjAKKzxVNDMxMz4gPFU0MzEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IyTMAorPFU0ODRBPiA8VTQ4NEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoYowCis8VTRBOUI+IDxVNEE5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SqmzAKKzxVNEFBND4gPFU0QUE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KqkMAorPFU0QUY2PiA8VTRBRjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkq7YwCis8VTRCNzU+IDxVNEI3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SttTAKKzxVNEJCMz4gPFU0QkIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K6zMAorPFU1MUUxPiA8VTUxRTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlh6E4NTUyCis8VTUxRTI+IDxVNTFFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WHojAKKzxVNTFFMz4gPFU1MUUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YejMAorPFU1MkVCPiA8VTUyRUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPli6swCis8VTUzMjU+IDxVNTMyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WMpTAKKzxVNThBNj4gPFU1OEE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aKmMAorPFU1RkRCPiA8VTVGREI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv5swCis8VTYxQTM+IDxVNjFBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aGozAKKzxVNjc0Qj4gPFU2NzRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p2LMAorPFU2OEU1PiA8VTY4RTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmo6UwCis8VTZBMEE+IDxVNkEwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aoijI4MQorPFU2QTRFPiA8VTZBNEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqY4wCis8VTcwMkE+IDxVNzAyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eAqjAKKzxVNzAzRj4gPFU3MDNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54C/MAorPFU3MEU2PiA8VTcwRTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPng6Y3NzU4Cis8VTcxNjk+IDxVNzE2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eFqTg1Cis8VTcxRDQ+IDxVNzFEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHlDEyCis8VTc0QTA+IDxVNzRBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eSoDEKKzxVNzdGRT4gPFU3N0ZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55++NDAKKzxVNzkyQz4gPFU3OTJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56SsMAorPFU3QjMyPiA8VTdCMzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrLIwCis8VTdDNzU+IDxVN0M3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+extTEKKzxVN0REMD4gPFU3REQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57eQMAorPFU3RTQxPiA8VTdFNDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuYE0Mjc0Cis8VTdGQjM+IDxVN0ZCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e+szAKKzxVODFCMD4gPFU4MUIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IawMAorPFU4MjI0PiA8VTgyMjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiKQwCis8VTgyMjc+IDxVODIyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iIpzAKKzxVODVBMD4gPFU4NUEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JagMAorPFU4NjI5PiA8VTg2Mjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomKkxCis8VTg4MUM+IDxVODgxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ignDAKKzxVODk0RT4gPFU4OTRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KWOMAorPFU4RTZGPiA8VThFNkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoua8xCis8VTkxRTk+IDxVOTFFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mHqTAKKzxVOTQwNz4gPFU5NDA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZCHMAorPFU5NDkyPiA8VTk0OTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkpI0Cis8VTk4QkY+IDxVOThCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mivzAKKzxVOURFRD4gPFU5REVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6betMAorPFU0NEEwPiA8VTQ0QTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkqAwCis8VTQ2QzA+IDxVNDZDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SbgDAKKzxVNTNDRD4gPFU1M0NEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y+NNDEzMzEKKzxVOEZEND4gPFU4RkQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L+UMzQyMTcKKzxVOUI2Qz4gPFU5QjZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a2sMAorPFUzNTY4PiA8VTM1Njg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlagwCis8VTM3NDM+IDxVMzc0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OdgzAKKzxVMzkwNj4gPFUzOTA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46SGMAorPFUzRDAwPiA8VTNEMDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtIAwCis8VTNEOTc+IDxVM0Q5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O2lzAKKzxVM0YxRD4gPFUzRjFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47ydMAorPFUzRjc5PiA8VTNGNzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvbkwCis8VTQyNEE+IDxVNDI0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SJijAKKzxVNDQyQT4gPFU0NDJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JCqMAorPFU0NEE2PiA8VTQ0QTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkqYwCis8VTQ4RjI+IDxVNDhGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SjsjAKKzxVNTk3Rj4gPFU1OTdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aW/MAorPFU1QjBFPiA8VTVCMEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrI4wCis8VTVCMTQ+IDxVNUIxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WslDAKKzxVNjhCNT4gPFU2OEI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qK1MzM4Cis8VTZDM0U+IDxVNkMzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+awvjEKKzxVNkM0RT4gPFU2QzRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rGOMAorPFU2Q0RCPiA8VTZDREI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPms5szNTM4Cis8VTZFRkM+IDxVNkVGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a7vDAKKzxVNzJBRj4gPFU3MkFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54qvMTA0NTIKKzxVNzU0OD4gPFU3NTQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55WIMjIKKzxVNzZENT4gPFU3NkQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55uVMAorPFU3QjM1PiA8VTdCMzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrLUwCis8VTdCQzQ+IDxVN0JDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+evhDQ2Cis8VTgzMDM+IDxVODMwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iMgzk0NzUKKzxVOEEwOT4gPFU4QTA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KiJMAorPFU4Q0E5PiA8VThDQTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosqkxMAorPFU4RDI5PiA8VThEMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotKkxMjU1Cis8VThFRDM+IDxVOEVEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i7kzAKKzxVOEVFQz4gPFU4RUVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LusMAorPFU5MTI0PiA8VTkxMjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphKQwCis8VTk4RUY+IDxVOThFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mjrzExNgorPFU5OEYwPiA8VTk4RjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpo7AwCis8VTk5NkQ+IDxVOTk2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mlrTE4NjA5Cis8VUZBMkE+IDxVRkEyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI++oqjAKKzxVNTMxQT4gPFU1MzFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YyaMgorPFU1NzRBPiA8VTU3NEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnYoxNDAxCis8VTY1Qjk+IDxVNjVCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWuTExMjg0MQorPFU2NzhCPiA8VTY3OEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnosyMQorPFU2Qzc4PiA8VTZDNzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsbgwCis8VTZERDM+IDxVNkREMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3kzAKKzxVNzI2NT4gPFU3MjY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54mlMAorPFU4MkIzPiA8VTgyQjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoirMzOTMyCis8VTg2ODQ+IDxVODY4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iahDAKKzxVOTBBMT4gPFU5MEExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKhMQorPFU5MjAxPiA8VTkyMDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiIEwCis8VTk0QUI+IDxVOTRBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mSqzEKKzxVOUQwQj4gPFU5RDBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bSLMAorPFUzOTAzPiA8VTM5MDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpIMwCis8VTU3QzU+IDxVNTdDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfhTAKKzxVNTlBOD4gPFU1OUE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aaoMjE4MworPFU2MjNGPiA8VTYyM0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiL8zMTEyNAorPFU4MEFBPiA8VTgwQUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogqoxNDYKKzxVOTYzMj4gPFU5NjMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZiyMTI2MjAKKzxVOUI3ND4gPFU5Qjc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a20MAorPFU5QzFGPiA8VTlDMUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsJ8wCis8VTlDODI+IDxVOUM4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mygjkKKzxVOUNEMT4gPFU5Q0QxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bORMAorPFUzNDQyPiA8VTM0NDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkYIwCis8VTM1NkI+IDxVMzU2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OVqzAKKzxVMzlDRD4gPFUzOUNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46eNMAorPFUzQkQwPiA8VTNCRDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjr5AwCis8VTQ4OEQ+IDxVNDg4RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SijTAKKzxVNDk4OD4gPFU0OTg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KaIMAorPFU0Q0IxPiA8VTRDQjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksrEwCis8VTRFRkY+IDxVNEVGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S7vzgzMzAKKzxVNTAyMz4gPFU1MDIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YCjMAorPFU1Rjc3PiA8VTVGNzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvbc3NDIKKzxVNjVDQT4gPFU2NUNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5peKMAorPFU2NjA5PiA8VTY2MDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmIkyCis8VTY2MTg+IDxVNjYxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aYmDAKKzxVNzRFQz4gPFU3NEVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55OsMAorPFU3NzA2PiA8VTc3MDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnIYwCis8VTdEMjE+IDxVN0QyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e0oTIKKzxVN0VCQT4gPFU3RUJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57q6NDQxCis8VTgyMkI+IDxVODIyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iIqzgyCis8VThBMkE+IDxVOEEyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ioqjQ2Cis8VThCQkY+IDxVOEJCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iuvzgxMDEKKzxVOUFFMz4gPFU5QUUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aujMAorPFU5REFEPiA8VTlEQUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptq0wCis8VTY1M0U+IDxVNjUzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aUvjQ4MTI2Cis8VThEQkQ+IDxVOERCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i2vTAKKzxVNTU2MT4gPFU1NTYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZWhMzU5MgorPFU1OTgzPiA8VTU5ODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpoM3ODAKKzxVNUE1Mz4gPFU1QTUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5amTMAorPFU2MjQ5PiA8VTYyNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiYkyNzIKKzxVNkUwND4gPFU2RTA0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5riEMAorPFU3MzA2PiA8VTczMDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjIYwCis8VTdEQ0I+IDxVN0RDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3izAKKzxVN0VFRj4gPFU3RUVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57uvMjczCis8VTgzRjI+IDxVODNGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPsjQ0MzMKKzxVODcxQT4gPFU4NzFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JyaNjgKKzxVODhGNj4gPFU4OEY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KO2MAorPFU5NzBGPiA8VTk3MEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnI8xODYKKzxVOTc1RT4gPFU5NzVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z2eMzU1NzIKKzxVOTc1Rj4gPFU5NzVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z2fMAorPFU5OERCPiA8VTk4REI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpo5syMTAKKzxVOThERD4gPFU5OEREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aOdMAorPFU5OERFPiA8VTk4REU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpo54zMDkyOQorPFU5OUExPiA8VTk5QTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppqEwCis8VTlBMTE+IDxVOUExMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mokTEKKzxVOUExQj4gPFU5QTFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aibMAorPFU5QkUxPiA8VTlCRTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpr6EwCis8VTlDQjE+IDxVOUNCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mysTE0Cis8VTQyMDg+IDxVNDIwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SIiDAKKzxVNkRERD4gPFU2REREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5redNgorPFU4MEE1PiA8VTgwQTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogqUyNjc1Cis8VTgxNTM+IDxVODE1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iFkzg3Cis8VTg0MDk+IDxVODQwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iQiTAKKzxVODczMD4gPFU4NzMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JywMAorPFUzOTcxPiA8VTM5NzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpbEwCis8VTQ1NDE+IDxVNDU0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SVgTAKKzxVNEEzRD4gPFU0QTNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ki9MAorPFU0QTNFPiA8VTRBM0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqL4wCis8VTUzMkE+IDxVNTMyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WMqjE0MDEKKzxVNTk1Qz4gPFU1OTVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aWcMAorPFU2MEIxPiA8VTYwQjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgrEzMworPFU2NTkwPiA8VTY1OTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlpA0OTEKKzxVNjcwRj4gPFU2NzBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pyPMAorPFU2OEQwPiA8VTY4RDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmo5AwCis8VTY5QTc+IDxVNjlBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ampzE3Cis8VTdCREE+IDxVN0JEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+evmjEKKzxVN0ZFMT4gPFU3RkUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57+hMTYwCis8VTg1NUM+IDxVODU1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iVnDAKKzxVOEFCOT4gPFU4QUI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Kq5MworPFU4QkZEPiA8VThCRkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor70xNDUKKzxVOTkyNT4gPFU5OTI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aSlMAorPFUzNTE3PiA8VTM1MTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlJcwCis8VTNBNEM+IDxVM0E0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OpjDAKKzxVM0I2RD4gPFUzQjZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj462tMAorPFUzRDUyPiA8VTNENTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtZIwCis8VTQxOEY+IDxVNDE4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SGjzAKKzxVNDI2Qz4gPFU0MjZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ImsMAorPFU0NDU0PiA8VTQ0NTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkZQwCis8VTQ1NjA+IDxVNDU2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SVoDAKKzxVNDZBOD4gPFU0NkE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JqoMAorPFU0NkNEPiA8VTQ2Q0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkm40wCis8VTQ4MEE+IDxVNDgwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SgijAKKzxVNDkzNT4gPFU0OTM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KS1MAorPFU0QzAxPiA8VTRDMDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksIEwCis8VTRGRjc+IDxVNEZGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S/tzIKKzxVNTI1NT4gPFU1MjU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YmVMAorPFU1MzlFPiA8VTUzOUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljp4wCis8VTU0MjA+IDxVNTQyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WQoDI1NAorPFU1QzVEPiA8VTVDNUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsZ0xCis8VTVFOUY+IDxVNUU5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W6nzM1OTkKKzxVNUVDMz4gPFU1RUMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5buDMAorPFU1RUUyPiA8VTVFRTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlu6IyNAorPFU2MDJCPiA8VTYwMkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgKsyMAorPFU2NjMyPiA8VTY2MzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmLIwCis8VTY2Q0E+IDxVNjZDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+abijAKKzxVNkFFMD4gPFU2QUUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qugMAorPFU2Q0I4PiA8VTZDQjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsrg4NDgKKzxVNkZGNz4gPFU2RkY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r+3MAorPFU3MkQyPiA8VTcyRDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPni5I2Cis8VTc1QkY+IDxVNzVCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eWvzAKKzxVNzVGMT4gPFU3NUYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55exMjQKKzxVNzY0OD4gPFU3NjQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55mINAorPFU3ODI5PiA8VTc4Mjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoKkxCis8VTgwQkE+IDxVODBCQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iCujExNTIKKzxVODBDNz4gPFU4MEM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IOHMAorPFU4MkJFPiA8VTgyQkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoir4zCis8VTg3RTY+IDxVODdFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ifpjAKKzxVOENCQj4gPFU4Q0JCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LK7NzIKKzxVOEQzOT4gPFU4RDM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LS5MTMwMDEKKzxVOTQyOD4gPFU5NDI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZCoMAorPFU5NTQ0PiA8VTk1NDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplYQxCis8VTk3NDU+IDxVOTc0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mdhTAKKzxVOUYyMz4gPFU5RjIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6byjMAorPFU1MTVEPiA8VTUxNUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhZ0wCis8VTUyMDY+IDxVNTIwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WIhjgwMDAwCis8VTU0Mjk+IDxVNTQyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WQqTE0MzgKKzxVNUM4RT4gPFU1QzhFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bKOMAorPFU1RTA5PiA8VTVFMDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluIkwCis8VTY2MTA+IDxVNjYxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aYkDEKKzxVNjcwNj4gPFU2NzA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pyGMAorPFU2OEE0PiA8VTY4QTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoqQwCis8VTY4RkI+IDxVNjhGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ajuzAKKzxVNkMxQj4gPFU2QzFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rCbMjU2MgorPFU3ODBGPiA8VTc4MEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoI8wCis8VTdEMUI+IDxVN0QxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e0mzQxCis8VTdFQjc+IDxVN0VCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e6tzYwMzcKKzxVN0ZDMj4gPFU3RkMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57+CMAorPFU4MkFDPiA8VTgyQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiqwyNTc1Cis8VTg4NkY+IDxVODg2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ihrzMKKzxVOEExQz4gPFU4QTFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KicMAorPFU5MTVBPiA8VTkxNUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphZo0OQorPFU5MjE2PiA8VTkyMTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiJYwCis8VTk2QUI+IDxVOTZBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+maqzAKKzxVOTZGMD4gPFU5NkYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZuwMAorPFU5OTM0PiA8VTk5MzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppLQwCis8VTk5NTk+IDxVOTk1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mlmTAKKzxVOUNGQj4gPFU5Q0ZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bO7MAorPFUzRENBPiA8VTNEQ0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjt4owCis8VTNFMkU+IDxVM0UyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O4rjAKKzxVNEE3Rj4gPFU0QTdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Km/MAorPFU0QkU4PiA8VTRCRTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkr6gwCis8VTREMDU+IDxVNEQwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S0hTAKKzxVNTc0Nj4gPFU1NzQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z2GMAorPFU1NzVGPiA8VTU3NUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnZ8xNjMyCis8VTU4QjM+IDxVNThCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WiszYKKzxVNTlBMj4gPFU1OUEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aaiMAorPFU1RTY5PiA8VTVFNjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluakwCis8VTVGMDU+IDxVNUYwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W8hTAKKzxVNjc4Qz4gPFU2NzhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p6MMworPFU2OEZDPiA8VTY4RkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmo7wyCis8VTZDN0U+IDxVNkM3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+axvjEwNAorPFU2RkM2PiA8VTZGQzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv4YwCis8VTcwODM+IDxVNzA4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eCgzAKKzxVNzExQT4gPFU3MTFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54SaNzk0Cis8VTcxRDM+IDxVNzFEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHkzAKKzxVN0Y5Mj4gPFU3RjkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj576SMAorPFU4NEI2PiA8VTg0QjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokrYwCis8VTg1NjE+IDxVODU2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iVoTAKKzxVODZBMD4gPFU4NkEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JqgMAorPFU4NkExPiA8VTg2QTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomqEwCis8VThDNkU+IDxVOEM2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ixrjAKKzxVOEM3Nj4gPFU4Qzc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LG2MAorPFU4RjUyPiA8VThGNTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovZIwCis8VTk0M0M+IDxVOTQzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mQvDAKKzxVOTk5QT4gPFU5OTlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aaaMAorPFU5OUE5PiA8VTk5QTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppqkwCis8VTlFQzI+IDxVOUVDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7gjAKKzxVOUYxNj4gPFU5RjE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6byWMAorPFU5RjIyPiA8VTlGMjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvKI1MgorPFUzOTc5PiA8VTM5Nzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpbkwCis8VTdDODk+IDxVN0M4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eyiTQ0MzkKKzxVOUVGQT4gPFU5RUZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bu6MAorPFUzNUI5PiA8VTM1Qjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlrkwCis8VTNCQTU+IDxVM0JBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OupTAKKzxVM0ZDRT4gPFUzRkNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47+OMAorPFU0RUZEPiA8VTRFRkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPku70xNTAzMQorPFU1MDdFPiA8VTUwN0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgb4zCis8VTUwRTg+IDxVNTBFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WDqDAKKzxVNTc0Qj4gPFU1NzRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z2LMAorPFU1OTRCPiA8VTU5NEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpYs1NDM2Cis8VTU5NkU+IDxVNTk2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WlrjQyCis8VTVGRkY+IDxVNUZGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W/vzM5MworPFU2MTI0PiA8VTYxMjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhKQ0MTY0Cis8VTYxQTQ+IDxVNjFBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aGpDMwCis8VTZBNjg+IDxVNkE2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+apqDAKKzxVNzAzNT4gPFU3MDM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54C1MAorPFU3OUNFPiA8VTc5Q0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnp44wCis8VTdDQUE+IDxVN0NBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eyqjk0OQorPFU3Q0RFPiA8VTdDREU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPns54yCis8VTdGQjU+IDxVN0ZCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e+tTAKKzxVODFCOT4gPFU4MUI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ia5MAorPFU5Qjc1PiA8VTlCNzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprbUwCis8VTlDNUQ+IDxVOUM1RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxnTAKKzxVOUNCQz4gPFU5Q0JDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bK8MAorPFU0RTMwPiA8VTRFMzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuLA0NTg1Cis8VTRFRjk+IDxVNEVGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S7uTAKKzxVNTA1MT4gPFU1MDUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YGRMAorPFU1MEZDPiA8VTUwRkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlg7wwCis8VTUxRTg+IDxVNTFFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WHqDAKKzxVNTFFQz4gPFU1MUVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YesMAorPFU1MUVFPiA8VTUxRUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlh64wCis8VTU5QTY+IDxVNTlBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WmpjAKKzxVNUJGNz4gPFU1QkY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a+3MAorPFU1QzAxPiA8VTVDMDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsIExMDYzNgorPFU1Q0VGPiA8VTVDRUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPls68xCis8VTVDRjA+IDxVNUNGMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WzsDMzMzYKKzxVNUQzNj4gPFU1RDM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bS2MAorPFU2MzQwPiA8VTYzNDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjYAwCis8VTY3QUI+IDxVNjdBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aeqzE1OTQKKzxVNjg3Qj4gPFU2ODdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qG7MAorPFU2OTUzPiA8VTY5NTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpZMzCis8VTZBOTI+IDxVNkE5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aqkjAKKzxVNkNBMz4gPFU2Q0EzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rKjNgorPFU2Q0E4PiA8VTZDQTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsqgwCis8VTcwNDM+IDxVNzA0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eBgzAKKzxVNzBGRD4gPFU3MEZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54O9MTMxCis8VTcyOEU+IDxVNzI4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eKjjAKKzxVNzMyNj4gPFU3MzI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54ymMAorPFU3NUFGPiA8VTc1QUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlq80Nzk0Cis8VTc2MEI+IDxVNzYwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eYizEzNworPFU3NkZEPiA8VTc2RkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnm70wCis8VTc4MUM+IDxVNzgxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+egnDEKKzxVNzhCOD4gPFU3OEI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56K4MAorPFU3QkM4PiA8VTdCQzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnr4gwCis8VTgzOTE+IDxVODM5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iOkTAKKzxVODQ1MT4gPFU4NDUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JGRMQorPFU4NjM0PiA8VTg2MzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomLQwCis8VTg3MDI+IDxVODcwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+icgjE1NjgKKzxVODgyRD4gPFU4ODJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KCtMworPFU4QUY3PiA8VThBRjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoq7c5Cis8VThDNEE+IDxVOEM0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ixijEKKzxVOEM1MD4gPFU4QzUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LGQMTMKKzxVOTEzNz4gPFU5MTM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YS3MAorPFU5MTQ2PiA8VTkxNDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphYYyMAorPFU5MkQyPiA8VTkyRDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpi5IxNgorPFU5M0UwPiA8VTkzRTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpj6AwCis8VTk1MEI+IDxVOTUwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mUizIyOTUKKzxVOTc0QT4gPFU5NzRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z2KMAorPFU5OEE4PiA8VTk4QTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoqg0MzkKKzxVOThDQz4gPFU5OENDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aOMMAorPFU5OENFPiA8VTk4Q0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpo44zOTUwOQorPFU5RUI3PiA8VTlFQjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpurcwCis8VTM5ODA+IDxVMzk4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OmgDAKKzxVM0Q2Rj4gPFUzRDZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47WvMAorPFU0M0NFPiA8VTQzQ0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkj44wCis8VTQ2NUM+IDxVNDY1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SZnDAKKzxVNEE3Qz4gPFU0QTdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Km8MAorPFU1MUFGPiA8VTUxQUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhq8yMDYzCis8VTU4Mzg+IDxVNTgzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WguDAKKzxVNTkwNj4gPFU1OTA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aSGMAorPFU2NDUzPiA8VTY0NTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkZMwCis8VTZENzI+IDxVNkQ3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a1sjAKKzxVNkUyMj4gPFU2RTIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5riiMAorPFU2RjI4PiA8VTZGMjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvKgwCis8VTdEOTg+IDxVN0Q5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e2mDAKKzxVN0UyQj4gPFU3RTJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57irMTkKKzxVN0YxRD4gPFU3RjFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57ydMjAwMAorPFU4MjQyPiA8VTgyNDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiYIwCis8VTkwMjI+IDxVOTAyMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mAojI2MzcKKzxVOTlBRT4gPFU5OUFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aauMAorPFU0N0VBPiA8VTQ3RUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkn6owCis8VTU1MkE+IDxVNTUyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUqjAKKzxVODk4Mj4gPFU4OTgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KaCMAorPFU4QkJEPiA8VThCQkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorr0xNDY0Cis8VTM4NUQ+IDxVMzg1RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OhnTAKKzxVNEZGOD4gPFU0RkY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L+4MTg3Cis8VTUxRTQ+IDxVNTFFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WHpDQzOTIKKzxVNTk0OT4gPFU1OTQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aWJMzQwNQorPFU2RTU3PiA8VTZFNTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuZcwCis8VTcxMjg+IDxVNzEyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eEqDAKKzxVNzE0OD4gPFU3MTQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54WIMAorPFU3NTJFPiA8VTc1MkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlK4xCis8VThDRjU+IDxVOENGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iztTAKKzxVOEQ1Nz4gPFU4RDU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LWXMAorPFU5Q0VGPiA8VTlDRUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPps68wCis8VTlDRjM+IDxVOUNGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mzszMzCis8VTlEMEM+IDxVOUQwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m0jDAKKzxVODk4NT4gPFU4OTg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KaFMQorPFU0RUNGPiA8VTRFQ0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPku48wCis8VTRGNUI+IDxVNEY1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S9mzEzMjkyCis8VTU3NzI+IDxVNTc3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WdsjAKKzxVOUFGND4gPFU5QUY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6au0MAorPFU0Q0Q1PiA8VTRDRDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPks5UwCis8VTUyN0I+IDxVNTI3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WJuzAKKzxVNTRGOT4gPFU1NEY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZO5MAorPFU3RDExPiA8VTdEMTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntJEwCis8VTdGNTg+IDxVN0Y1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9mDUKKzxVODJBMz4gPFU4MkEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IqjMAorPFU4OEU2PiA8VTg4RTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo6YwCis8VTU0MjY+IDxVNTQyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WQpjE4Mjk0Cis8VTZCOTU+IDxVNkI5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aulTAKKzxVN0YzNj4gPFU3RjM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57y2MTYKKzxVN0YzOT4gPFU3RjM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57y5MAorPFU3RjNCPiA8VTdGM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvLswCis8VTk2RUM+IDxVOTZFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mbrDAKKzxVOUQwMD4gPFU5RDAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bSAMAorPFU0RjE1PiA8VTRGMTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvJUyNQorPFU1NDRCPiA8VTU0NEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkYszNAorPFU1OTJCPiA8VTU5MkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpKsyNjkwNworPFU1OThCPiA8VTU5OEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlposwCis8VTU5Qzc+IDxVNTlDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WnhzAKKzxVNUExMD4gPFU1QTEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aiQMAorPFU1Qjc1PiA8VTVCNzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrbUxOTkKKzxVNUMwMz4gPFU1QzAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bCDMAorPFU2MDI0PiA8VTYwMjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgKQwCis8VTYxRUY+IDxVNjFFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aHrzAKKzxVNjU3Nz4gPFU2NTc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pW3NTgwCis8VTY1Qzk+IDxVNjVDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aXiTAKKzxVNjdDRT4gPFU2N0NFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p+OMAorPFU2Q0VEPiA8VTZDRUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPms60wCis8VTczOUU+IDxVNzM5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eOnjAKKzxVNzRCNz4gPFU3NEI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55K3MAorPFU3ODA2PiA8VTc4MDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoIYwCis8VTdBMDM+IDxVN0EwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eogzYKKzxVN0I1Rj4gPFU3QjVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj562fMAorPFU3Qjk5PiA8VTdCOTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrpkwCis8VTdDQjA+IDxVN0NCMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eysDAKKzxVN0NEMD4gPFU3Q0QwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57OQMAorPFU3RDI4PiA8VTdEMjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntKg0Cis8VTdEOTI+IDxVN0Q5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e2kjAKKzxVN0Y2Nj4gPFU3RjY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj572mMAorPFU4MEE0PiA8VTgwQTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogqQyOTI1Cis8VTgxOUE+IDxVODE5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iGmjE3Cis8VTgzNzQ+IDxVODM3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iNtDAKKzxVODg2RD4gPFU4ODZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KGtMAorPFU4QzY3PiA8VThDNjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosacwCis8VThEQkE+IDxVOERCQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i2ujE2Cis8VThERDc+IDxVOERENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i3lzUKKzxVOTA5RT4gPFU5MDlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKeMAorPFU5MTFDPiA8VTkxMUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphJw5Cis8VTkyMDc+IDxVOTIwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mIhzAKKzxVOUNGQT4gPFU5Q0ZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bO6MAorPFU5RUE5PiA8VTlFQTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuqkwCis8VTlFQUM+IDxVOUVBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6rDAKKzxVOUVCMT4gPFU5RUIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bqxMAorPFU5RUI4PiA8VTlFQjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpurg2Cis8VTM2OTU+IDxVMzY5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OalTAKKzxVMzcxMT4gPFUzNzExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45yRMAorPFUzN0NBPiA8VTM3Q0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjn4owCis8VTM4MDU+IDxVMzgwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OghTAKKzxVMzkxND4gPFUzOTE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46SUMAorPFUzQTg0PiA8VTNBODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqoQwCis8VTNBRDk+IDxVM0FEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OrmTAKKzxVNDBGRD4gPFU0MEZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IO9MAorPFU0MkY5PiA8VTQyRjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPki7kwCis8VTQzM0Y+IDxVNDMzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SMvzAKKzxVNDM1Nj4gPFU0MzU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I2WMAorPFU0NDY3PiA8VTQ0Njc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkacwCis8VTQ0ODA+IDxVNDQ4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SSgDAKKzxVNDUzMD4gPFU0NTMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JSwMAorPFU0NTRFPiA8VTQ1NEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklY4wCis8VTQ2MjA+IDxVNDYyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SYoDAKKzxVNDc5RT4gPFU0NzlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J6eMAorPFU0N0VFPiA8VTQ3RUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkn64wCis8VTQ4NEQ+IDxVNDg0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ShjTAKKzxVNEExNz4gPFU0QTE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KiXMAorPFU0QTk5PiA8VTRBOTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqpkwCis8VTRENTc+IDxVNEQ1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S1lzAKKzxVNEQ3RT4gPFU0RDdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LW+MAorPFU0RTQwPiA8VTRFNDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuYAwCis8VTRGMEY+IDxVNEYwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S8jzQwMDMKKzxVNEZEOD4gPFU0RkQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L+YOTMyCis8VTUxRUI+IDxVNTFFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WHqzI5Cis8VTUyMUM+IDxVNTIxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WInDAKKzxVNTMxMD4gPFU1MzEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YyQOTUKKzxVNTQ4OD4gPFU1NDg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZKINgorPFU1Nzk4PiA8VTU3OTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnpgwCis8VTVCNUE+IDxVNUI1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WtmjEwNgorPFU1Q0FBPiA8VTVDQUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsqowCis8VTVERkY+IDxVNURGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W3vzgKKzxVNUUxNz4gPFU1RTE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5biXMAorPFU1RTQ1PiA8VTVFNDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluYUzNTc3Cis8VTVFNUU+IDxVNUU1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W5njgKKzxVNUYxNz4gPFU1RjE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5byXMjY5NAorPFU1RjdGPiA8VTVGN0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvb81NgorPFU2Mjc2PiA8VTYyNzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmibYzMTM4Cis8VTYyQzI+IDxVNjJDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aLgjE1NTMKKzxVNjcwRD4gPFU2NzBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pyNMjk2NjkKKzxVNjc4RT4gPFU2NzhFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p6OMAorPFU2ODNGPiA8VTY4M0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoL8wCis8VTY4NzQ+IDxVNjg3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ahtDEyCis8VTY4RjQ+IDxVNjhGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ajtDAKKzxVNkMxRj4gPFU2QzFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rCfMTIzCis8VTZDQjc+IDxVNkNCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aytzAKKzxVNkQxMT4gPFU2RDExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rSRMAorPFU2RDZFPiA8VTZENkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmta41NTgwCis8VTZEQUE+IDxVNkRBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a2qjEzCis8VTZGOTM+IDxVNkY5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a+kzAKKzxVNzBBNT4gPFU3MEE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54KlMAorPFU3MEYwPiA8VTcwRjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPng7AwCis8VTczQjg+IDxVNzNCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eOuDAKKzxVNzQwOD4gPFU3NDA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55CIMAorPFU3NTM2PiA8VTc1MzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlLYwCis8VTc1NDk+IDxVNzU0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eViTAKKzxVNzY0MT4gPFU3NjQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55mBMAorPFU3OTUzPiA8VTc5NTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpZM0Cis8VTc5OEY+IDxVNzk4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+emjzE2MDI0Cis8VTdCMjY+IDxVN0IyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+espjc1NjEKKzxVN0IzMD4gPFU3QjMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56ywMAorPFU3RDMxPiA8VTdEMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntLEwCis8VTdEM0M+IDxVN0QzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e0vDIKKzxVN0Q2NT4gPFU3RDY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57WlMjIKKzxVN0Q4RD4gPFU3RDhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57aNMAorPFU3RTFCPiA8VTdFMUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuJs1Cis8VTdFQzI+IDxVN0VDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e7gjMxNgorPFU3RUNCPiA8VTdFQ0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnu4sxCis8VTdGQzc+IDxVN0ZDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e/hzAKKzxVODI0MD4gPFU4MjQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ImAMAorPFU4Mjc0PiA8VTgyNzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoibQwCis8VTgyOTk+IDxVODI5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iKmTY0MworPFU4MkZCPiA8VTgyRkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi7s4Cis8VTgzMDA+IDxVODMwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iMgDUKKzxVODMyRj4gPFU4MzJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IyvMTIKKzxVODNBOT4gPFU4M0E5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I6pMgorPFU4M0Q0PiA8VTgzRDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoj5QyCis8VTg0NEQ+IDxVODQ0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iRjTAKKzxVODY1OT4gPFU4NjU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JmZMAorPFU4NkE4PiA8VTg2QTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomqgxMQorPFU4NzA5PiA8VTg3MDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonIkyOQorPFU4NzYwPiA8VTg3NjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonaAxODQKKzxVODhCMT4gPFU4OEIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KKxNDMwCis8VThBRTg+IDxVOEFFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+irqDAKKzxVOEUzRT4gPFU4RTNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Li+MAorPFU4RjNCPiA8VThGM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovLswCis8VThGOTA+IDxVOEY5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i+kDg5MgorPFU5MERCPiA8VTkwREI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg5syCis8VTkyNTg+IDxVOTI1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mJmDAKKzxVOTI1Qz4gPFU5MjVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YmcMAorPFU5MzA3PiA8VTkzMDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjIcwCis8VTk3Q0Q+IDxVOTdDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mfjTAKKzxVOTdFOD4gPFU5N0U4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z+oMAorPFU5OEFCPiA8VTk4QUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoqswCis8VTlCODQ+IDxVOUI4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+muhDAKKzxVOUNFNz4gPFU5Q0U3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bOnMAorPFU5Q0VDPiA8VTlDRUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPps6wwCis8VTlEMTQ+IDxVOUQxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m0lDAKKzxVOUQ2OT4gPFU5RDY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bWpMgorPFU5RDlEPiA8VTlEOUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptp0wCis8VTlFRkI+IDxVOUVGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7uzMKKzxVRkExQj4gPFVGQTFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj76ibMAorPFUzNEUxPiA8VTM0RTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjk6EwCis8VTM1NkU+IDxVMzU2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OVrjAKKzxVNDJFOD4gPFU0MkU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IuoMAorPFU0MzE3PiA8VTQzMTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjJcwCis8VTQ0REI+IDxVNDREQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+STmzAKKzxVNDVDND4gPFU0NUM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JeEMAorPFU0QTQ5PiA8VTRBNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqYkwCis8VTRBQ0Q+IDxVNEFDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SrjTAKKzxVNEFERD4gPFU0QUREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KudMAorPFU0QkZEPiA8VTRCRkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkr70wCis8VTRFNzY+IDxVNEU3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S5tjAKKzxVNEZDQz4gPFU0RkNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L+MMAorPFU0RkVGPiA8VTRGRUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkv68xNTI2Cis8VTUxQjk+IDxVNTFCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WGuTAKKzxVNTQ1Mj4gPFU1NDUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZGSNTUKKzxVNTYzOD4gPFU1NjM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Zi4MAorPFU1RTlDPiA8VTVFOUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlupwxOTY4NQorPFU1RjIzPiA8VTVGMjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvKMwCis8VTYyOUE+IDxVNjI5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aKmjM3NDAKKzxVNjJDQT4gPFU2MkNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ouKMjEKKzxVNjM2Qz4gPFU2MzZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o2sMAorPFU2NEFCPiA8VTY0QUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkqsxOQorPFU2NUE3PiA8VTY1QTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlqc5MTMKKzxVNjY4QT4gPFU2NjhBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pqKMAorPFU2RUNGPiA8VTZFQ0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmu48yCis8VTcxMjQ+IDxVNzEyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eEpDAKKzxVNzUyQj4gPFU3NTJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55SrMTA5NQorPFU3NkQ5PiA8VTc2RDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnm5kwCis8VTc5RkY+IDxVNzlGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+envzAKKzxVN0MyMD4gPFU3QzIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57CgMgorPFU4MTJGPiA8VTgxMkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohK82OTMKKzxVODE1MD4gPFU4MTUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IWQMzI0MAorPFU4MTUxPiA8VTgxNTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohZEyNzEKKzxVODM4Nj4gPFU4Mzg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I6GNTQKKzxVODZBNT4gPFU4NkE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JqlMAorPFU4NzA1PiA8VTg3MDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonIUwCis8VThFRjU+IDxVOEVGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i7tTAKKzxVOEYxND4gPFU4RjE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LyUNworPFU4Rjg1PiA8VThGODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovoUxNjU2Cis8VTkwRDk+IDxVOTBEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mDmTAKKzxVOTFEQz4gPFU5MURDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YecNDA1Cis8VTkxRTE+IDxVOTFFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mHoTAKKzxVOTgyQj4gPFU5ODJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aCrNworPFU5QjM0PiA8VTlCMzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprLQwCis8VTlCQzY+IDxVOUJDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mvhjAKKzxVOUVGQz4gPFU5RUZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bu8OQorPFUzNjRGPiA8VTM2NEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmY8wCis8VTM2ODY+IDxVMzY4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OahjAKKzxVMzkzMT4gPFUzOTMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46SxMAorPFUzQjNDPiA8VTNCM0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrLwwCis8VTNDQzc+IDxVM0NDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OzhzAKKzxVM0Q1Nz4gPFUzRDU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47WXMAorPFUzRjZDPiA8VTNGNkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvawwCis8VTNGODg+IDxVM0Y4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O+iDAKKzxVNDBBND4gPFU0MEE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IKkMAorPFU0Mzg1PiA8VTQzODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjoUwCis8VTQ0ODc+IDxVNDQ4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SShzAKKzxVNDYwMD4gPFU0NjAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JiAMAorPFU0NjA0PiA8VTQ2MDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmIQwCis8VTQ3N0U+IDxVNDc3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SdvjAKKzxVNDc5Qz4gPFU0NzlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J6cMAorPFU0N0FGPiA8VTQ3QUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknq8wCis8VTQ3Qjg+IDxVNDdCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SeuDAKKzxVNDdEND4gPFU0N0Q0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J+UMAorPFU0ODM1PiA8VTQ4MzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoLUwCis8VTQ5QTM+IDxVNDlBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SmozAKKzxVNDlERT4gPFU0OURFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KeeMAorPFU0QTMxPiA8VTRBMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqLEwCis8VTRCNzg+IDxVNEI3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+StuDAKKzxVNEI5Qj4gPFU0QjlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K6bMAorPFU0QkYxPiA8VTRCRjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkr7EwCis8VTRFRDg+IDxVNEVEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S7mDY4MzcKKzxVNTA2OT4gPFU1MDY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YGpMAorPFU1MDg1PiA8VTUwODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgoU0NTcwCis8VTUxQTg+IDxVNTFBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WGqDAKKzxVNTI2Rj4gPFU1MjZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YmvMTIwNTIKKzxVNTQ5MD4gPFU1NDkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZKQMTk3NQorPFU1NzdGPiA8VTU3N0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnb8wCis8VTU5MEQ+IDxVNTkwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WkjTIxNjczCis8VTU5ODc+IDxVNTk4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WmhzExMzA4Cis8VTVBNEY+IDxVNUE0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WpjzIKKzxVNUE2Nj4gPFU1QTY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ammNjcKKzxVNUE4RD4gPFU1QThEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aqNMAorPFU1QkNDPiA8VTVCQ0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlr4wxMDYzMQorPFU1Q0NBPiA8VTVDQ0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPls4owCis8VTVGQTk+IDxVNUZBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W+qTExMworPFU2OTMxPiA8VTY5MzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpLEwCis8VTY5OTE+IDxVNjk5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+amkTIKKzxVNzIzNj4gPFU3MjM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54i2MjM0NzgKKzxVNzk1ND4gPFU3OTU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56WUMAorPFU3QTJBPiA8VTdBMkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqKowCis8VTdBQ0U+IDxVN0FDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+erjjAKKzxVN0RFRT4gPFU3REVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57euMAorPFU3RjFBPiA8VTdGMUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvJo4MjkKKzxVODBENT4gPFU4MEQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IOVMQorPFU4MTc5PiA8VTgxNzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohbkyMDAzCis8VTg0MkY+IDxVODQyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iQrzAKKzxVODU2Nz4gPFU4NTY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JWnMAorPFU4NkI5PiA8VTg2Qjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomrkwCis8VTg2RDc+IDxVODZENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iblzAKKzxVODc1Qz4gPFU4NzVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J2cMAorPFU4NzZFPiA8VTg3NkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPona40Cis8VTg4OUQ+IDxVODg5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iinTAKKzxVODkwNz4gPFU4OTA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KSHNTUKKzxVODkxND4gPFU4OTE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KSUMAorPFU4OTg2PiA8VTg5ODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopoYyNDAyCis8VThBMDM+IDxVOEEwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iogzAKKzxVOEE0Mj4gPFU4QTQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KmCMAorPFU4QkEzPiA8VThCQTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorqM2MworPFU4Q0EwPiA8VThDQTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosqA3MworPFU4Q0U2PiA8VThDRTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPos6YxNAorPFU4Q0ZCPiA8VThDRkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPos7swCis8VThEMUY+IDxVOEQxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i0nzEwNzc2Cis8VThENEI+IDxVOEQ0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i1izE2ODMKKzxVOEQ1OT4gPFU4RDU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LWZMTQKKzxVOEQ3ND4gPFU4RDc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LW0MjIwNQorPFU4RjM5PiA8VThGMzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovLkwCis8VTkzNTE+IDxVOTM1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mNkTAKKzxVOTM2Mj4gPFU5MzYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y2iMAorPFU5NjFDPiA8VTk2MUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmJwxODMKKzxVOTYxRD4gPFU5NjFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZidMgorPFU5NjQ0PiA8VTk2NDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmYQ3MjgyCis8VTk2NUE+IDxVOTY1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mZmjAKKzxVOTlBNT4gPFU5OUE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aalODIKKzxVOTlEOT4gPFU5OUQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aeZMAorPFU5QTc4PiA8VTlBNzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqbgxNzEKKzxVOUI5Mj4gPFU5QjkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a6SMAorPFU5QzEyPiA8VTlDMTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsJIwCis8VTlDOEI+IDxVOUM4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+myizkKKzxVOUNDNj4gPFU5Q0M2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bOGMAorPFU0RjNEPiA8VTRGM0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvL02MDYKKzxVNTQ3Nz4gPFU1NDc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZG3MjIyCis8VTU2MEU+IDxVNTYwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WYjjkzMAorPFU1NjIwPiA8VTU2MjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmKAxCis8VTY1RUU+IDxVNjVFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aXrjU2Cis8VTU2NzY+IDxVNTY3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WZtjc1Cis8VTVDMUM+IDxVNUMxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WwnDAKKzxVOEVDQj4gPFU4RUNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LuLMworPFU4RjY3PiA8VThGNjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovacyMTAKKzxVOTFEMz4gPFU5MUQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YeTMAorPFU5MzM3PiA8VTkzMzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjLcwCis8VTk0ODY+IDxVOTQ4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mShjEKKzxVNUMxNT4gPFU1QzE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bCVMzIKKzxVNzM4RD4gPFU3MzhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj546NMAorPFU1QzJDPiA8VTVDMkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsKwxMzY4Cis8VTRGODU+IDxVNEY4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+hTAKKzxVNTc5Mz4gPFU1NzkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z6TMTcKKzxVNTlERj4gPFU1OURGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aefMAorPFU1Q0QwPiA8VTVDRDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPls5AwCis8VTY2NTA+IDxVNjY1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aZkDAKKzxVNzU2MT4gPFU3NTYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55WhMAorPFU3OTc0PiA8VTc5NzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpbQwCis8VTdENkY+IDxVN0Q2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e1rzEKKzxVODBGMj4gPFU4MEYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IOyMAorPFU4MzQ0PiA8VTgzNDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojYQ2Cis8VThBNzI+IDxVOEE3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ipsjMxNworPFU4QkU1PiA8VThCRTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor6U0MTI5NQorPFU4QzY1PiA8VThDNjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosaUwCis8VThDQzU+IDxVOENDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+izhTAKKzxVOENDQz4gPFU4Q0NDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LOMMAorPFU4RDQ1PiA8VThENDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotYUyMAorPFU5MEMyPiA8VTkwQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg4IwCis8VTk2NTQ+IDxVOTY1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mZlDEKKzxVOTY5MT4gPFU5NjkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZqRMAorPFU0QUIxPiA8VTRBQjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqrEwCis8VTVGQ0I+IDxVNUZDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W/izAKKzxVNjUzOT4gPFU2NTM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pS5MzMzMjQKKzxVN0Q2MD4gPFU3RDYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57WgMgorPFUzNTYyPiA8VTM1NjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlaIwCis8VTM5Qzk+IDxVMzlDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OniTAKKzxVM0JBMz4gPFUzQkEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj466jMAorPFU0M0Q3PiA8VTQzRDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkj5cwCis8VTRFMTA+IDxVNEUxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S4kDc0OAorPFU0RTYyPiA8VTRFNjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuaIwCis8VTUzMDM+IDxVNTMwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WMgzAKKzxVNTMwND4gPFU1MzA0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YyEMAorPFU1QzcyPiA8VTVDNzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsbIwCis8VTYyMjQ+IDxVNjIyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aIpDAKKzxVNjQ2MT4gPFU2NDYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pGhMAorPFU2OTgyPiA8VTY5ODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpoIxMTcyNQorPFU2OUU5PiA8VTY5RTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmp6kwCis8VTY5RUE+IDxVNjlFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+anqjAKKzxVNkU4OT4gPFU2RTg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqJODUKKzxVNkYxMT4gPFU2RjExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ryRMAorPFU3NEMyPiA8VTc0QzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnk4IwCis8VTc2RDY+IDxVNzZENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ebljg4NDUKKzxVODJBNT4gPFU4MkE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IqlMjQ0Cis8VTg0NjI+IDxVODQ2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iRojEKKzxVODRDQj4gPFU4NENCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JOLNjIKKzxVOTIyMz4gPFU5MjIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YijMQorPFU5NDk5PiA8VTk0OTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkpk3OAorPFU0RTc5PiA8VTRFNzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkubkwCis8VTRFODE+IDxVNEU4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6gTAKKzxVNTFGMj4gPFU1MUYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YeyMAorPFU1NDgxPiA8VTU0ODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkoEyCis8VTU3Njk+IDxVNTc2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WdqTYKKzxVNUMzMj4gPFU1QzMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bCyMAorPFU1QzM0PiA8VTVDMzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsLQxMzY5Cis8VTVDMzY+IDxVNUMzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WwtjAKKzxVNUMzNz4gPFU1QzM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bC3MTIKKzxVNUQ0NT4gPFU1RDQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bWFMAorPFU1RTcyPiA8VTVFNzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlubIzMDAwMAorPFU1RTc5PiA8VTVFNzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlubk5NQorPFU1RkQzPiA8VTVGRDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv5MwCis8VTY1M0M+IDxVNjUzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aUvDAKKzxVNjc0Nj4gPFU2NzQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p2GMjEzOQorPFU2N0QxPiA8VTY3RDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmn5E2NQorPFU2Q0Q0PiA8VTZDRDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPms5QyNworPFU2RDVCPiA8VTZENUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtZswCis8VTczOTU+IDxVNzM5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eOlTAKKzxVNzUxOD4gPFU3NTE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55SYMzMwMgorPFU3NUIzPiA8VTc1QjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlrM1Cis8VTc3Rjg+IDxVNzdGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+efuDI1Cis8VTdBRkY+IDxVN0FGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ervzQ5MQorPFU3Qjc4PiA8VTdCNzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrbgxMAorPFU3QzkzPiA8VTdDOTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnspMwCis8VTgwOUQ+IDxVODA5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iCnTEwMDYKKzxVODI4OT4gPFU4Mjg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IqJMAorPFU4MkY3PiA8VTgyRjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi7c2NQorPFU4Njc3PiA8VTg2Nzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPombcwCis8VTg3MkM+IDxVODcyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+icrDAKKzxVOEZDMD4gPFU4RkMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L+AMAorPFU5MTUwPiA8VTkxNTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphZAyCis8VTk4RTY+IDxVOThFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mjpjAKKzxVOUNGMT4gPFU5Q0YxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bOxMAorPFUzRTgyPiA8VTNFODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuoIwCis8VTQwRUQ+IDxVNDBFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SDrTAKKzxVNDFERT4gPFU0MURFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IeeMAorPFU0NTA4PiA8VTQ1MDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklIgwCis8VTQ5MTc+IDxVNDkxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SklzAKKzxVNEQ1Rj4gPFU0RDVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LWfMAorPFU0RUUwPiA8VTRFRTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPku6AwCis8VTYxMUY+IDxVNjExRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aEnzYxOTY4Cis8VTY0QzA+IDxVNjRDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aTgDgwCis8VTY1NjI+IDxVNjU2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aVojE1MDI2Cis8VTY4N0Y+IDxVNjg3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ahvzMxCis8VTZBNDQ+IDxVNkE0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aphDM4OAorPFU2Rjg5PiA8VTZGODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvokwCis8VTc2QUY+IDxVNzZBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+earzAKKzxVNzZGMD4gPFU3NkYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55uwMAorPFU3OUM2PiA8VTc5QzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnp4Y2MworPFU3QTA4PiA8VTdBMDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqIgwCis8VTg4NjY+IDxVODg2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ihpjAKKzxVOEQxMT4gPFU4RDExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LSRMAorPFU4RDc2PiA8VThENzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotbYxMTIzMworPFU4RDk1PiA8VThEOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotpU5MgorPFU5QzY0PiA8VTlDNjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsaQwCis8VTlDRTE+IDxVOUNFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mzoTAKKzxVNEJDRT4gPFU0QkNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K+OMAorPFU0Q0JBPiA8VTRDQkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksrowCis8VTUwMUQ+IDxVNTAxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAnTAKKzxVNTFDRT4gPFU1MUNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YeOMAorPFU2NUYwPiA8VTY1RjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPml7AyNgorPFU2OUE2PiA8VTY5QTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpqYwCis8VTZBOEE+IDxVNkE4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aqijAKKzxVNkM3NT4gPFU2Qzc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rG1MAorPFU2REJCPiA8VTZEQkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtrswCis8VTZERTY+IDxVNkRFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3pjc2NgorPFU3MDY4PiA8VTcwNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngagwCis8VTdDMzM+IDxVN0MzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ewszAKKzxVN0QzQT4gPFU3RDNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57S6NgorPFU3RUMwPiA8VTdFQzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnu4AxMworPFU4QTRDPiA8VThBNEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqYwwCis8VThEMUI+IDxVOEQxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i0mzEKKzxVOEQ2Mz4gPFU4RDYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LWjMTQ0Cis8VTlBQUQ+IDxVOUFBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mqrTAKKzxVNTE4OD4gPFU1MTg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YaIMTM5OQorPFU1MUFFPiA8VTUxQUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhq4wCis8VTUyMUE+IDxVNTIxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WImjIzMTY4Cis8VTUyNUI+IDxVNTI1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WJmzE1OAorPFU1ODA4PiA8VTU4MDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloIgwCis8VTU4M0Q+IDxVNTgzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WgvTAKKzxVNUM5Nz4gPFU1Qzk3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bKXMTc1MQorPFU1Q0ExPiA8VTVDQTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsqExOAorPFU1RDE3PiA8VTVEMTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltJczCis8VTYyNUI+IDxVNjI1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aJmzg3OQorPFU2Mzg2PiA8VTYzODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjoYwCis8VTY3NjA+IDxVNjc2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+adoDU2MgorPFU2OEUxPiA8VTY4RTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmo6EwCis8VTcyNjg+IDxVNzI2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eJqDAKKzxVNzI4NT4gPFU3Mjg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54qFMAorPFU3NTk4PiA8VTc1OTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlpgwCis8VTc4OTk+IDxVNzg5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eimTAKKzxVN0IxMD4gPFU3QjEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56yQMAorPFU3REIxPiA8VTdEQjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntrE0Cis8VTdFQjI+IDxVN0VCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e6sjExNjYKKzxVN0YzOD4gPFU3RjM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57y4MTIzMgorPFU3RjQxPiA8VTdGNDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvYEwCis8VTdGNTM+IDxVN0Y1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9kzAKKzxVN0Y2MT4gPFU3RjYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj572hMTM4Cis8VTgwOUI+IDxVODA5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iCmzExMworPFU5MUVEPiA8VTkxRUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPph60wCis8VTkyRkM+IDxVOTJGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mLvDMwCis8VTkzQTA+IDxVOTNBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mOoDAKKzxVOTRBMj4gPFU5NEEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZKiMzE2NworPFU5ODgzPiA8VTk4ODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpooM1Cis8VTM3RTA+IDxVMzdFMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OfoDAKKzxVMzdGNT4gPFUzN0Y1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45+1MAorPFUzRjU4PiA8VTNGNTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvZgwCis8VTREMUE+IDxVNEQxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S0mjAKKzxVNTg0Mj4gPFU1ODQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aGCMAorPFU2RTJGPiA8VTZFMkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuK84MTU0Cis8VTYyMDU+IDxVNjIwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aIhTAKKzxVNjIwNj4gPFU2MjA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oiGMTYKKzxVNjIwNz4gPFU2MjA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oiHMAorPFU2OUQzPiA8VTY5RDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmp5MwCis8VTcxMzU+IDxVNzEzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eEtTAKKzxVN0I3Qj4gPFU3QjdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5627MAorPFU2OUQ0PiA8VTY5RDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmp5QxCis8VTY5Rjk+IDxVNjlGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+anuTAKKzxVNkE3MD4gPFU2QTcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qmwMAorPFU2QURDPiA8VTZBREM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmq5wxCis8VTZFREM+IDxVNkVEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a7nDAKKzxVNzY4Qj4gPFU3NjhCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55qLOTAKKzxVNzY5MD4gPFU3NjkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55qQMAorPFU3NzZBPiA8VTc3NkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnaoxCis8VTc3N0U+IDxVNzc3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+edvjc1Cis8VTdCRDk+IDxVN0JEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+evmTg5Cis8VTdDRDU+IDxVN0NENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ezlTE3MjkKKzxVN0Y5ND4gPFU3Rjk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj576UMjYwCis8VTdGOTk+IDxVN0Y5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e+mTAKKzxVODE4Rj4gPFU4MThGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IaPODIwCis8VTgxRUY+IDxVODFFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iHrzAKKzxVOTdERj4gPFU5N0RGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z+fMAorPFU5OTNCPiA8VTk5M0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppLswCis8VTlBRDg+IDxVOUFEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mrmDcxNDc3Cis8VTlBRDk+IDxVOUFEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mrmTAKKzxVOURGMT4gPFU5REYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bexMAorPFU5RjFCPiA8VTlGMUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvJswCis8VTM2OEY+IDxVMzY4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OajzAKKzxVMzY5Nj4gPFUzNjk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45qWMAorPFUzRkI4PiA8VTNGQjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvrgwCis8VTQ1RTM+IDxVNDVFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SXozAKKzxVNTkzMD4gPFU1OTMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aSwMAorPFU2NDFFPiA8VTY0MUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkJ44OTQxCis8VTY1MkE+IDxVNjUyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aUqjcKKzxVNjZBMD4gPFU2NkEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pqgMAorPFU2NzcyPiA8VTY3NzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnbIyNworPFU2OUMxPiA8VTY5QzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmp4E5MgorPFU2QUJBPiA8VTZBQkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqrowCis8VTdBMDE+IDxVN0EwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eogTAKKzxVN0EzRT4gPFU3QTNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56i+MAorPFU3QTNGPiA8VTdBM0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqL80MjU2Cis8VTdCNzY+IDxVN0I3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ettjAKKzxVN0UxRT4gPFU3RTFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57ieMAorPFU3RjFGPiA8VTdGMUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvJ8xMworPFU4M0QyPiA8VTgzRDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoj5IwCis8VTg1QzE+IDxVODVDMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iXgTMKKzxVODVGMz4gPFU4NUYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JezMAorPFU5M0FDPiA8VTkzQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjqwwCis8VTk1NTA+IDxVOTU1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mVkDEyMgorPFU1NDNGPiA8VTU0M0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkL8xCis8VTU0NEE+IDxVNTQ0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRijM0NzkwCis8VTcxNzA+IDxVNzE3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eFsDAKKzxVNzk2RT4gPFU3OTZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56WuMAorPFU3OTcwPiA8VTc5NzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpbAwCis8VTc5OUU+IDxVNzk5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+emnjAKKzxVOEFBNT4gPFU4QUE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KqlMAorPFU4QkYwPiA8VThCRjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor7A1NAorPFU5MERDPiA8VTkwREM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg5wzCis8VTkyRUY+IDxVOTJFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mLrzAKKzxVOTUwNj4gPFU5NTA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZSGMQorPFU0RUUxPiA8VTRFRTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPku6EyCis8VTUyNzI+IDxVNTI3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WJsjI5OTYKKzxVNTRBRj4gPFU1NEFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZKvMTM1NAorPFU1NEU1PiA8VTU0RTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlk6UxOTc5NgorPFU1NzJBPiA8VTU3MkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnKozMzIKKzxVNjIwOD4gPFU2MjA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oiIMzExNQorPFU2MjEzPiA8VTYyMTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiJMwCis8VTYyMjg+IDxVNjIyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aIqDAKKzxVNjQwMT4gPFU2NDAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pCBMTU2OAorPFU2NEYxPiA8VTY0RjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmk7EyNQorPFU2QjRDPiA8VTZCNEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrYwxNTgyNQorPFU2RTJFPiA8VTZFMkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuK4wCis8VTZFRDI+IDxVNkVEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a7kjAKKzxVNzI2Qj4gPFU3MjZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54mrMAorPFU3NTk5PiA8VTc1OTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlpk1NTgKKzxVN0QwNz4gPFU3RDA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57SHMAorPFU3RUE1PiA8VTdFQTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuqUxOAorPFU4MDkwPiA8VTgwOTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogpAxCis8VTgwRjM+IDxVODBGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iDszIyMzYKKzxVODNDRj4gPFU4M0NGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I+PMjYKKzxVODhCQz4gPFU4OEJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KK8NAorPFU4QjBDPiA8VThCMEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorIwwCis8VTkzQjY+IDxVOTNCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mOtjAKKzxVOUQxQT4gPFU5RDFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bSaMAorPFU5RDNGPiA8VTlEM0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptL85Cis8VTlFM0Q+IDxVOUUzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m4vTEzOTkKKzxVOUVBNz4gPFU5RUE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bqnMAorPFUzNUM2PiA8VTM1QzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjl4YwCis8VTM3NTM+IDxVMzc1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OdkzAKKzxVMzgzNz4gPFUzODM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46C3MAorPFUzOUI0PiA8VTM5QjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjprQwCis8VTNBMzA+IDxVM0EzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OosDAKKzxVM0FCRT4gPFUzQUJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46q+MAorPFUzRDY3PiA8VTNENjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtacwCis8VTNERjQ+IDxVM0RGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O3tDAKKzxVNDE5Rj4gPFU0MTlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IafMAorPFU0MjEzPiA8VTQyMTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiJMwCis8VTQ0MTk+IDxVNDQxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SQmTAKKzxVNDU3Qj4gPFU0NTdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JW7MAorPFU0NUQ4PiA8VTQ1RDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkl5gwCis8VTQ2MDE+IDxVNDYwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SYgTAKKzxVNDZDQj4gPFU0NkNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JuLMAorPFU0NkZGPiA8VTQ2RkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkm78wCis8VTQ4OTQ+IDxVNDg5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SilDAKKzxVNEEyMz4gPFU0QTIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KijMAorPFU0QTUwPiA8VTRBNTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqZAwCis8VTRBODI+IDxVNEE4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SqgjAKKzxVNEFCQT4gPFU0QUJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Kq6MAorPFU0QUU2PiA8VTRBRTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkq6YwCis8VTRFRUU+IDxVNEVFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S7rjAKKzxVNEY2RT4gPFU0RjZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L2uMAorPFU1MzBDPiA8VTUzMEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljIwwCis8VTU0NDQ+IDxVNTQ0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRhDAKKzxVNTVERD4gPFU1NUREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZedMTY2Cis8VTU2MDU+IDxVNTYwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WYhTQKKzxVNTg2NT4gPFU1ODY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aGlMQorPFU2MTA1PiA8VTYxMDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhIUwCis8VTYzMEM+IDxVNjMwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aMjDAKKzxVNjQzRj4gPFU2NDNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pC/MgorPFU2NTQ2PiA8VTY1NDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlYYwCis8VTY1NEI+IDxVNjU0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aVizAKKzxVNjY0ND4gPFU2NjQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pmEMAorPFU2ODNDPiA8VTY4M0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoLwyNDY5NworPFU2OUM1PiA8VTY5QzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmp4UyNgorPFU3MzY2PiA8VTczNjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjaYwCis8VTgxODg+IDxVODE4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iGiDIxCis8VTgxRjU+IDxVODFGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iHtTAKKzxVODMxNj4gPFU4MzE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IyWMAorPFU4NDVCPiA8VTg0NUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokZsxNjExCis8VTg2RDI+IDxVODZEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ibkjAKKzxVODZFND4gPFU4NkU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JukNzc1Cis8VTg4RDM+IDxVODhEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ijkzEKKzxVODlFMT4gPFU4OUUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KehMAorPFU4QUZEPiA8VThBRkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoq70wCis8VThGMzU+IDxVOEYzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i8tTAKKzxVOEY1NT4gPFU4RjU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L2VMQorPFU5MEMzPiA8VTkwQzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg4MwCis8VTkzOTg+IDxVOTM5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mOmDAKKzxVOTRFQz4gPFU5NEVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZOsMjAKKzxVOTU0OT4gPFU5NTQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZWJMAorPFU5NUEzPiA8VTk1QTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplqM3Cis8VTk1QTQ+IDxVOTVBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mWpDEKKzxVOTYwMT4gPFU5NjAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZiBMjI2OAorPFU5Njk0PiA8VTk2OTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmpQ2NjgyCis8VTk3Njk+IDxVOTc2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mdqTE0MTYyCis8VTk3Qjc+IDxVOTdCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+metzAKKzxVOTdEMD4gPFU5N0QwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z+QMAorPFU5N0RBPiA8VTk3REE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpn5owCis8VTk4OEM+IDxVOTg4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mijDcyCis8VTlBQkM+IDxVOUFCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mqvDEzMgorPFU5QUMyPiA8VTlBQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpq4IyCis8VTlCMzI+IDxVOUIzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mssjI2Cis8VTlCQUY+IDxVOUJBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+murzAKKzxVOUMyQT4gPFU5QzJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bCqMAorPFU5RjQzPiA8VTlGNDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvYMwCis8VTU0RkY+IDxVNTRGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WTvzIKKzxVNjRENj4gPFU2NEQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pOWMAorPFU3QjM0PiA8VTdCMzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrLQxCis8VTgyMzg+IDxVODIzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iIuDEzCis8VTlBMTQ+IDxVOUExND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+molDEKKzxVOUI3QT4gPFU5QjdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a26MAorPFU5Qzg0PiA8VTlDODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsoQwCis8VTQ5QzQ+IDxVNDlDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SnhDAKKzxVNEUyQT4gPFU0RTJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LiqNDIzMTQzCis8VTRFODc+IDxVNEU4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6hzAKKzxVNTAwQj4gPFU1MDBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YCLMjUwMgorPFU1NDA0PiA8VTU0MDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkIQyOTkxNQorPFU1NUYwPiA8VTU1RjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPll7AwCis8VTdCODc+IDxVN0I4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+euhzEwCis8VTg2N0M+IDxVODY3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iZvDUKKzxVOTI3Qj4gPFU5MjdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ym7MAorPFU3RDY2PiA8VTdENjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntaY0MDMKKzxVN0VEOT4gPFU3RUQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57uZNzM5OTMKKzxVNTIyRj4gPFU1MjJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YivMAorPFU2ODM5PiA8VTY4Mzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoLkyNzYyMworPFU4RERGPiA8VThEREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPot58zNTU1OAorPFU1NENGPiA8VTU0Q0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlk48yMgorPFU0QUMwPiA8VTRBQzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkq4AwCis8VTgyNkU+IDxVODI2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iJrjQ0Cis8VTNBRDQ+IDxVM0FEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OrlDAKKzxVM0I5Mz4gPFUzQjkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj466TMAorPFU0RTk4PiA8VTRFOTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkupgxNzQKKzxVNEU5OT4gPFU0RTk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LqZMgorPFU4MzFCPiA8VTgzMUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojJs3Cis8VTVFOUE+IDxVNUU5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W6mjY1MAorPFU2M0VGPiA8VTYzRUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmj68wCis8VTY0MDQ+IDxVNjQwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aQhDAKKzxVNkQ2RD4gPFU2RDZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rWtMAorPFU3NTRBPiA8VTc1NEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlYoxCis8VTdENTk+IDxVN0Q1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e1mTMKKzxVN0Q1QT4gPFU3RDVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57WaNQorPFU3REVBPiA8VTdERUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnt6owCis8VTdFMDY+IDxVN0UwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e4hjAKKzxVN0ZBRT4gPFU3RkFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj576uMAorPFU3RkI5PiA8VTdGQjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvrkxMTAzCis8VTgwMTU+IDxVODAxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iAlTg1OAorPFU4M0VFPiA8VTgzRUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoj64wCis8VThDRTE+IDxVOENFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+izoTAKKzxVOEQ1Mz4gPFU4RDUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LWTNTgKKzxVOUQ4QT4gPFU5RDhBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6baKMAorPFU5RTUyPiA8VTlFNTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuZIxCis8VTNGOTg+IDxVM0Y5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O+mDAKKzxVNDJDMT4gPFU0MkMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IuBMAorPFU0MzA0PiA8VTQzMDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjIQwCis8VTU0RkQ+IDxVNTRGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WTvTQ5MworPFU1N0MyPiA8VTU3QzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPln4IxNjYKKzxVNUNGQT4gPFU1Q0ZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bO6MAorPFU2MzJEPiA8VTYzMkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjK0wCis8VTY4OTc+IDxVNjg5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ailzMyNgorPFU3RDg2PiA8VTdEODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntoYwCis8VTdFRTA+IDxVN0VFMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e7oDUKKzxVODAzRj4gPFU4MDNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IC/Nzc3Cis8VTgzODQ+IDxVODM4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iOhDAKKzxVOTBFMD4gPFU5MEUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YOgMAorPFU5ODFBPiA8VTk4MUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoJoyCis8VTk4Mzg+IDxVOTgzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mguDcKKzxVOTg4OD4gPFU5ODg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aKIMTE5OAorPFU5QUJFPiA8VTlBQkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqr43Cis8VTlCQzE+IDxVOUJDMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mvgTAKKzxVOUNBMD4gPFU5Q0EwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bKgMTgKKzxVNEM0RD4gPFU0QzREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LGNMAorPFU0QzRFPiA8VTRDNEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksY4wCis8VTRDNkQ+IDxVNEM2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SxrTAKKzxVNEM3ND4gPFU0Qzc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LG0MAorPFU1ODI5PiA8VTU4Mjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloKkwCis8VTYwNDY+IDxVNjA0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBhjE3Cis8VTY2ODU+IDxVNjY4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aahTAKKzxVNjZGND4gPFU2NkY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pu0NDU4OTIKKzxVNEY5Qj4gPFU0RjlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L6bNjk3OQorPFU1MTZDPiA8VTUxNkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhaw2MDYwMgorPFU1MjlGPiA8VTUyOUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlip8yMjc3MworPFU1MzExPiA8VTUzMTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljJEwCis8VTUzQjc+IDxVNTNCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WOtzAKKzxVNTg2OD4gPFU1ODY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aGoMAorPFU1QkFCPiA8VTVCQUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrqs3ODg2Cis8VTVCQUU+IDxVNUJBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WurjE1Cis8VTVERTU+IDxVNURFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W3pTUyMTc1Cis8VTVFNEE+IDxVNUU0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W5ijAKKzxVNUYxMz4gPFU1RjEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5byTMTU1NQorPFU2MDZEPiA8VTYwNkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmga0yNDAwCis8VTYxMjk+IDxVNjEyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aEqTAKKzxVNjUzQj4gPFU2NTNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pS7OTIyNAorPFU2NzVCPiA8VTY3NUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnZswCis8VTc4QkQ+IDxVNzhCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eivTAKKzxVN0JFMj4gPFU3QkUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56+iMAorPFU3Q0ZDPiA8VTdDRkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPns7wwCis8VTgwQjE+IDxVODBCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iCsTQ2Cis8VTg2QTM+IDxVODZBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iaozgxCis8VTg5RTU+IDxVODlFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+inpTcyCis8VTg5RjU+IDxVODlGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+intTAKKzxVOEVBQz4gPFU4RUFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LqsMTMyMAorPFU4RUIzPiA8VThFQjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPourMwCis8VTlBRjg+IDxVOUFGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mruDAKKzxVOUY4Rj4gPFU5RjhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b6PMAorPFU5Rjk0PiA8VTlGOTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvpQwCis8VTlGOUE+IDxVOUY5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m+mjMwOAorPFUzOTI4PiA8VTM5Mjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpKgwCis8VTM5RUM+IDxVMzlFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OnrDAKKzxVM0FEMj4gPFUzQUQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46uSMAorPFUzQjVGPiA8VTNCNUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrZ8wCis8VTNFQUM+IDxVM0VBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O6rDAKKzxVM0YyNj4gPFUzRjI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47ymMAorPFU0MEFDPiA8VTQwQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgqwwCis8VTQ4NTc+IDxVNDg1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ShlzAKKzxVNURFOT4gPFU1REU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bepNDk3Cis8VTVFRkU+IDxVNUVGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W7vjIKKzxVNjJGMT4gPFU2MkYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ouxMTA5NgorPFU2MkYyPiA8VTYyRjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmi7IwCis8VTY4MzE+IDxVNjgzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+agsTAKKzxVNkM1RT4gPFU2QzVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rGeNjUKKzxVNzNEOT4gPFU3M0Q5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54+ZMgorPFU3OTI2PiA8VTc5MjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpKY2Cis8VTdBNkM+IDxVN0E2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eprDAKKzxVODZFQz4gPFU4NkVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JusMAorPFU5MkJFPiA8VTkyQkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpir4wCis8VTkyREI+IDxVOTJEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mLmzAKKzxVOTc4Rj4gPFU5NzhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z6PNAorPFU5NzkwPiA8VTk3OTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnpAwCis8VTM0Q0I+IDxVMzRDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OTizAKKzxVMzUzNj4gPFUzNTM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45S2MAorPFUzQkVGPiA8VTNCRUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjr68wCis8VTQxRTg+IDxVNDFFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SHqDAKKzxVNDg5QT4gPFU0ODlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KKaMAorPFU1MTcxPiA8VTUxNzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhbEyODAyMAorPFU1NTFEPiA8VTU1MUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllJ0wCis8VTY0NDM+IDxVNjQ0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aRgzAKKzxVN0ZCRT4gPFU3RkJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj576+MAorPFU4Q0EyPiA8VThDQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosqI3Cis8VThEMjE+IDxVOEQyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i0oTI2MzYKKzxVNEY1RD4gPFU0RjVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L2dNTUKKzxVNTJGRT4gPFU1MkZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Yu+MjcxNAorPFU2N0I4PiA8VTY3Qjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnrgyNQorPFU2QzlGPiA8VTZDOUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsp8yMTU1Cis8VTZDQzM+IDxVNkNDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+azgzAKKzxVNkU5RD4gPFU2RTlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqdMjMKKzxVN0JERD4gPFU3QkREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56+dMTExCis8VTdERjE+IDxVN0RGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3sTAKKzxVN0YxMT4gPFU3RjExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57yRMQorPFU4MkI2PiA8VTgyQjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoirYwCis8VTg5MjA+IDxVODkyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ikoDAKKzxVOTIwRT4gPFU5MjBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YiOMAorPFU5MjY0PiA8VTkyNjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiaQxCis8VTk0QTk+IDxVOTRBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mSqTkwMgorPFU5N0IyPiA8VTk3QjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnrIxCis8VTNFODM+IDxVM0U4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O6gzAKKzxVNUNBMz4gPFU1Q0EzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bKjMgorPFU3MkQ3PiA8VTcyRDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPni5c4OTQwCis8VTczQkQ+IDxVNzNCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eOvTAKKzxVN0IzMT4gPFU3QjMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56yxMAorPFU4MDA3PiA8VTgwMDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogIcwCis8VTgwMDg+IDxVODAwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iAiDAKKzxVODAwOT4gPFU4MDA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ICJMAorPFU4MkRGPiA8VTgyREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi582NjQKKzxVODMwRD4gPFU4MzBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IyNNQorPFU4MzI5PiA8VTgzMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojKkwCis8VTg2QkM+IDxVODZCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iavDAKKzxVOEM3Rj4gPFU4QzdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LG/MAorPFUzNUQ1PiA8VTM1RDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjl5UwCis8VTM3MEM+IDxVMzcwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OcjDAKKzxVMzc0NT4gPFUzNzQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj452FMAorPFUzNzY0PiA8VTM3NjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnaQwCis8VTNBMEM+IDxVM0EwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OojDAKKzxVM0NGNj4gPFUzQ0Y2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47O2MAorPFU0MEQzPiA8VTQwRDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkg5MwCis8VTQ3NkQ+IDxVNDc2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SdrTAKKzxVNDc4MD4gPFU0NzgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J6AMAorPFU1MDhCPiA8VTUwOEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgoswCis8VTUxOTM+IDxVNTE5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WGkzAKKzxVNTUyNj4gPFU1NTI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZSmMworPFU1Nzc4PiA8VTU3Nzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnbgwCis8VTU3QTI+IDxVNTdBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WeojM1MAorPFU1OTFGPiA8VTU5MUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpJ8xOTc1OAorPFU1OTIwPiA8VTU5MjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpKAxNDcKKzxVNTlFND4gPFU1OUU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aekMAorPFU1QUJFPiA8VTVBQkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqr41NworPFU1RjQwPiA8VTVGNDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvYA3Cis8VTY0MDY+IDxVNjQwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aQhjAKKzxVNjQ4MD4gPFU2NDgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pKAMQorPFU2Nzg0PiA8VTY3ODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnoQxMjg2NworPFU2OUNCPiA8VTY5Q0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmp4sxMTMKKzxVNzE3OT4gPFU3MTc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54W5MAorPFU3Nzg5PiA8VTc3ODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnokzCis8VTdDM0M+IDxVN0MzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ewvDAKKzxVODlBRj4gPFU4OUFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KavMAorPFU4OUNGPiA8VTg5Q0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPop481Cis8VThBM0Q+IDxVOEEzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iovTAKKzxVOEE2Qz4gPFU4QTZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KmsMAorPFU4QkRGPiA8VThCREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor58zMQorPFU4Q0ZDPiA8VThDRkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPos7wxOAorPFU4RDJEPiA8VThEMkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotK0yNDQ0Cis8VTkwNTg+IDxVOTA1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mBmDMKKzxVOTZDQT4gPFU5NkNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZuKMAorPFU5N0REPiA8VTk3REQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpn50wCis8VTRGMzA+IDxVNEYzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S8sDMyNzMKKzxVNTQ3MT4gPFU1NDcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZGxMzM0Cis8VTU0OTU+IDxVNTQ5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WSlTE4NjEKKzxVNTRDQz4gPFU1NENDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZOMMAorPFU1NUQ3PiA8VTU1RDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPll5cyCis8VTU5MDM+IDxVNTkwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WkgzAKKzxVNTlEMT4gPFU1OUQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aeRMTI4MDYKKzxVNUFGND4gPFU1QUY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5au0MAorPFU1QjY0PiA8VTVCNjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlraQ3MzM2Cis8VTY3RTc+IDxVNjdFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+afpzEKKzxVNkE2RD4gPFU2QTZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qmtMAorPFU2Q0JEPiA8VTZDQkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsr0xNzYKKzxVNkNEMj4gPFU2Q0QyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rOSMAorPFU3NUZDPiA8VTc1RkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnl7wzNQorPFU3QjFGPiA8VTdCMUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrJ8wCis8VTdCOEQ+IDxVN0I4RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eujTU1OAorPFU3QjlCPiA8VTdCOUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrpswCis8VTdGNUI+IDxVN0Y1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9mzAKKzxVODJGRD4gPFU4MkZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Iu9MAorPFU4M0M3PiA8VTgzQzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoj4czMDcKKzxVODNGMD4gPFU4M0YwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I+wMTAKKzxVODRDNz4gPFU4NEM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JOHMAorPFU4NkM0PiA8VTg2QzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPom4Q4Cis8VTg5REE+IDxVODlEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+inmjEzCis8VThFRjE+IDxVOEVGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i7sTAKKzxVOEVGMj4gPFU4RUYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LuyMAorPFU4RjQyPiA8VThGNDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovYIwCis8VThGNzE+IDxVOEY3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i9sTEwNgorPFU4RjlDPiA8VThGOUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovpwxMzEyCis8VTkxNjQ+IDxVOTE2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mFpDIKKzxVOTIzMj4gPFU5MjMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YiyMAorPFU5MjM3PiA8VTkyMzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiLcwCis8VTk0QjQ+IDxVOTRCND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mStDExCis8VTlCOTU+IDxVOUI5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mulTMKKzxVOUQyMz4gPFU5RDIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bSjMAorPFU5RTJBPiA8VTlFMkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuKo0NgorPFU0NzNDPiA8VTQ3M0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknLwwCis8VTRCQTk+IDxVNEJBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SuqTAKKzxVOURCQj4gPFU5REJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ba7MAorPFUzNEI0PiA8VTM0QjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkrQwCis8VTM2ODk+IDxVMzY4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OaiTAKKzxVM0JDRj4gPFUzQkNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46+PMAorPFUzRjBCPiA8VTNGMEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvIswCis8VTNGQjY+IDxVM0ZCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O+tjAKKzxVNDAwNz4gPFU0MDA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ICHMAorPFU0MDFDPiA8VTQwMUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgJwwCis8VTQwMjY+IDxVNDAyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SApjAKKzxVNDAzMD4gPFU0MDMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ICwMAorPFU0MTdEPiA8VTQxN0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhb0wCis8VTQyQkE+IDxVNDJCQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SKujAKKzxVNDM0RD4gPFU0MzREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I2NMAorPFU0NDI4PiA8VTQ0Mjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkKgwCis8VTQ4Njk+IDxVNDg2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ShqTAKKzxVNEQ3Qj4gPFU0RDdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LW7MAorPFU1M0U0PiA8VTUzRTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlj6QxNjEzMAorPFU1NTAyPiA8VTU1MDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllIIwCis8VTU1MDM+IDxVNTUwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUgzAKKzxVNTYwRj4gPFU1NjBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZiPNQorPFU1QzMzPiA8VTVDMzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsLMwCis8VTYxMzI+IDxVNjEzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aEsjAKKzxVNjI2Mj4gPFU2MjYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5omiMAorPFU2NzVBPiA8VTY3NUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnZowCis8VTY5OTY+IDxVNjk5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+amljEKKzxVNkJDMj4gPFU2QkMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q+CMjUKKzxVNkM2OT4gPFU2QzY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rGpMjQ5Cis8VTZEQzg+IDxVNkRDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3iDAKKzxVNkZGMj4gPFU2RkYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r+yMAorPFU3MDE0PiA8VTcwMTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngJQwCis8VTcxMzg+IDxVNzEzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eEuDAKKzxVNzI2Rj4gPFU3MjZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54mvMTgKKzxVNzJEQz4gPFU3MkRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54ucMAorPFU3NkI3PiA8VTc2Qjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmrcwCis8VTc2QkM+IDxVNzZCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eavDAKKzxVNzZFQz4gPFU3NkVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55usMAorPFU3N0JEPiA8VTc3QkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnr04Cis8VTdBNDA+IDxVN0E0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+epgDYKKzxVN0NEMz4gPFU3Q0QzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57OTMAorPFU3RTBFPiA8VTdFMEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuI4wCis8VTdGNUY+IDxVN0Y1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9nzUKKzxVN0Y5Nj4gPFU3Rjk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj576WNAorPFU4MEExPiA8VTgwQTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogqE4NTk4Cis8VTgxMzU+IDxVODEzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iEtTAKKzxVODFDQz4gPFU4MUNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IeMMgorPFU4NUEzPiA8VTg1QTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolqMwCis8VTg2Q0E+IDxVODZDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ibijI5OAorPFU4NkNDPiA8VTg2Q0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPom4wwCis8VTg4MzE+IDxVODgzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+igsTEKKzxVOEE0MT4gPFU4QTQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KmBMgorPFU4QkMyPiA8VThCQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor4IxNQorPFU4QzM3PiA8VThDMzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosLc0MTU0Cis8VThDQzg+IDxVOENDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iziDIKKzxVOTkzNj4gPFU5OTM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aS2MAorPFU5OTg5PiA8VTk5ODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppokwCis8VTlBQTg+IDxVOUFBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mqqDczOTcKKzxVOUQ2MD4gPFU5RDYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bWgMgorPFU5RTQ0PiA8VTlFNDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuYQ1MworPFU5RTU4PiA8VTlFNTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuZgxNTUKKzxVOUYxMz4gPFU5RjEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6byTNzMyOAorPFU5RjE0PiA8VTlGMTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvJQwCis8VTM5RkQ+IDxVMzlGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OnvTAKKzxVM0Y3RD4gPFUzRjdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj4729MAorPFU0MzVCPiA8VTQzNUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjZswCis8VTQ0RTI+IDxVNDRFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+STojAKKzxVNEQ5Qz4gPFU0RDlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LacMAorPFU1MEYxPiA8VTUwRjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlg7E0Cis8VTUxQzU+IDxVNTFDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WHhTAKKzxVNTZGQT4gPFU1NkZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Zu6NTc4MQorPFU1ODBDPiA8VTU4MEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloIwwCis8VTVEMTM+IDxVNUQxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W0kzAKKzxVNUQyRT4gPFU1RDJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bSuMzUKKzxVNjU0NT4gPFU2NTQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pWFMjU0NTQKKzxVNjg4Rj4gPFU2ODhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qKPOTAKKzxVNjhERD4gPFU2OEREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qOdMAorPFU2OUJFPiA8VTY5QkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpr4wCis8VTcyN0Y+IDxVNzI3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eJvzAKKzxVNzk3Qj4gPFU3OTdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56W7MAorPFU3QTEyPiA8VTdBMTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqJIwCis8VTkzMkU+IDxVOTMyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mMrjEKKzxVOTUyMj4gPFU5NTIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZSiMTEyCis8VTk2Qzc+IDxVOTZDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mbhzExNTMKKzxVOTgwQj4gPFU5ODBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aCLMAorPFU5ODY3PiA8VTk4Njc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoacxMDkKKzxVOTg3RT4gPFU5ODdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aG+MTExNTMKKzxVOUJERD4gPFU5QkREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a+dMAorPFU5Q0I0PiA8VTlDQjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsrQxCis8VTUyMkU+IDxVNTIyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WIrjE4NzkKKzxVNTI4MD4gPFU1MjgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YqAMAorPFU2MUQ2PiA8VTYxRDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmh5YwCis8VTY4MUQ+IDxVNjgxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+agnTEKKzxVNkI0ND4gPFU2QjQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q2EMAorPFU3MTcxPiA8VTcxNzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhbEwCis8VTc0REM+IDxVNzREQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eTnDM5ODUKKzxVNzYxMT4gPFU3NjExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55iRMQorPFU3QjQ4PiA8VTdCNDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrYgwCis8VTdERkE+IDxVN0RGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3ujAKKzxVODBDRD4gPFU4MENEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IONMgorPFU4MTM2PiA8VTgxMzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohLYwCis8VTgxNjE+IDxVODE2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iFoTEKKzxVODFCQz4gPFU4MUJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ia8MAorPFU4NDQwPiA8VTg0NDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokYAwCis8VTg3Nzg+IDxVODc3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iduDEKKzxVOEQ4Rj4gPFU4RDhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LaPMQorPFU4RTNCPiA8VThFM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouLswCis8VTkyQkQ+IDxVOTJCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mKvTAKKzxVOTgyMj4gPFU5ODIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aCiMAorPFU5OEIzPiA8VTk4QjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPporM0Cis8VTlBMjc+IDxVOUEyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mopzAKKzxVOUQzMD4gPFU5RDMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bSwMAorPFU5RTM5PiA8VTlFMzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuLkyOAorPFUzNEI3PiA8VTM0Qjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkrcwCis8VTQyMTE+IDxVNDIxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SIkTAKKzxVNTE4RT4gPFU1MThFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YaOMAorPFU1MjUwPiA8VTUyNTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliZAxMDcKKzxVNTI2RT4gPFU1MjZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YmuMAorPFU1M0U3PiA8VTUzRTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlj6cxCis8VTVCRTE+IDxVNUJFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WvoTE2OTEKKzxVNTM2Nj4gPFU1MzY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y2mNTIxCis8VTU1Njk+IDxVNTU2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WVqTAKKzxVNTc2Qz4gPFU1NzZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z2sMAorPFU2MzAyPiA8VTYzMDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjII3OTEyCis8VTYzOUI+IDxVNjM5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aOmzcxCis8VTdENTM+IDxVN0Q1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e1kzAKKzxVN0Y2Mz4gPFU3RjYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj572jNAorPFU3RjZCPiA8VTdGNkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvaswCis8VTg5MDI+IDxVODkwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ikgjYzNworPFU4QTdGPiA8VThBN0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqb8wCis8VThCRDY+IDxVOEJENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ivljEKKzxVOUFGQT4gPFU5QUZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6au6MAorPFU0RTU2PiA8VTRFNTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuZYyMTExCis8VTYyRDA+IDxVNjJEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aLkDE4NDEKKzxVNjdCND4gPFU2N0I0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p60MAorPFU2N0ZBPiA8VTY3RkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmn7o0Cis8VTdCODk+IDxVN0I4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+euiTAKKzxVMzlEND4gPFUzOUQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46eUMAorPFUzREM3PiA8VTNEQzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjt4cwCis8VTNGNDc+IDxVM0Y0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O9hzAKKzxVNDBBRj4gPFU0MEFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IKvMAorPFU0MkJEPiA8VTQyQkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkir0wCis8VTUzQ0Y+IDxVNTNDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPjzAKKzxVNTkyQz4gPFU1OTJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aSsMAorPFU1RUU1PiA8VTVFRTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlu6UwCis8VTYwMkE+IDxVNjAyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aAqjE1NzkzCis8VTYwNjA+IDxVNjA2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBoDEKKzxVNjVERD4gPFU2NUREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pedMAorPFU3NjUwPiA8VTc2NTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmZAwCis8VTUwMEM+IDxVNTAwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAjDE3OAorPFU1MTczPiA8VTUxNzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhbM2NzQ4OAorPFU1Qjk4PiA8VTVCOTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrpgyMzU2OQorPFU2OEZBPiA8VTY4RkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmo7o4NjUKKzxVNzYxRD4gPFU3NjFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55idMQorPFU3NjRGPiA8VTc2NEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmY8wCis8VTc3REM+IDxVNzdEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+efnDM4NQorPFU3QUE0PiA8VTdBQTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqqQwCis8VTdEQjg+IDxVN0RCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e2uDEKKzxVN0VCNj4gPFU3RUI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57q2ODIKKzxVODM5RT4gPFU4MzlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I6eMjE1Cis8VTg0ODQ+IDxVODQ4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iShDAKKzxVODk4Qz4gPFU4OThDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KaMMAorPFU4OUIzPiA8VTg5QjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoprMwCis8VTg5QzA+IDxVODlDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ingDE5MAorPFU4OUMyPiA8VTg5QzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPop4IyNTg4MQorPFU5NUEyPiA8VTk1QTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplqIwCis8VTk1RDc+IDxVOTVENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mXlzAKKzxVOTVEQz4gPFU5NURDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZecNTMwCis8VTlDMjU+IDxVOUMyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mwpTAKKzxVOUM1RT4gPFU5QzVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bGeMAorPFU5Q0NGPiA8VTlDQ0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPps481MAorPFU0M0QzPiA8VTQzRDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkj5MwCis8VTQ1QzY+IDxVNDVDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SXhjAKKzxVNDYzRT4gPFU0NjNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ji+MAorPFU0OThFPiA8VTQ5OEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpo4wCis8VTRBNkE+IDxVNEE2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SpqjAKKzxVNEE4MD4gPFU0QTgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KqAMAorPFU0Qzk4PiA8VTRDOTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkspgwCis8VTc0MkY+IDxVNzQyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eQrzEKKzxVNzVFRj4gPFU3NUVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55evMAorPFU3QjY2PiA8VTdCNjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnraYwCis8VTdCQTE+IDxVN0JBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+euoTMzNzA5Cis8VTgyMTg+IDxVODIxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iImDAKKzxVOEYyOD4gPFU4RjI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LyoMAorPFU5MzI3PiA8VTkzMjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjKcwCis8VTk5Mjg+IDxVOTkyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mkqDYzCis8VTk5ODY+IDxVOTk4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mmhjEyMjM3Cis8VTlDRTQ+IDxVOUNFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mzpDAKKzxVRkEyQz4gPFVGQTJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj76isMAorPFUzQkExPiA8VTNCQTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrqEwCis8VTNEMjY+IDxVM0QyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O0pjAKKzxVNDMyRj4gPFU0MzJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IyvMAorPFU0MzlBPiA8VTQzOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjpowCis8VTQ1RjA+IDxVNDVGMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SXsDAKKzxVNDY1Qj4gPFU0NjVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JmbMAorPFU0NjZFPiA8VTQ2NkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkma4wCis8VTQ3N0E+IDxVNDc3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SdujAKKzxVNEUzMT4gPFU0RTMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LixMAorPFU1MUEwPiA8VTUxQTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhqAyMDAwCis8VTYwQjk+IDxVNjBCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aCuTAKKzxVNjBCQT4gPFU2MEJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oK6MAorPFU2MEVGPiA8VTYwRUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmg682OTg2Cis8VTYxNjM+IDxVNjE2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aFozY1Cis8VTYzQkM+IDxVNjNCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aOvDY3Cis8VTY0NUM+IDxVNjQ1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aRnDEKKzxVNkEwQz4gPFU2QTBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qiMMAorPFU2QkNDPiA8VTZCQ0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmr4wwCis8VTZDRjQ+IDxVNkNGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aztDAKKzxVNkRBQj4gPFU2REFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rarMAorPFU2RjQ1PiA8VTZGNDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvYUwCis8VTcwNEM+IDxVNzA0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eBjDI0ODQKKzxVNzIxRj4gPFU3MjFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54ifMAorPFU3NEQ4PiA8VTc0RDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnk5gwCis8VTc2RTU+IDxVNzZFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ebpTEyMworPFU3N0Q0PiA8VTc3RDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnn5QwCis8VTc5MzY+IDxVNzkzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ektjAKKzxVNzk3Qz4gPFU3OTdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56W8MAorPFU3RjQ2PiA8VTdGNDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvYYwCis8VTdGNTA+IDxVN0Y1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9kDE2MDIKKzxVOENBQj4gPFU4Q0FCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LKrMTQKKzxVOEQyRj4gPFU4RDJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LSvMjYxMgorPFU5MDY2PiA8VTkwNjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgaYwCis8VTkzQzY+IDxVOTNDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mPhjAKKzxVOTQ3NT4gPFU5NDc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZG1MAorPFU5NkRBPiA8VTk2REE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpm5owCis8VTlDNzk+IDxVOUM3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxuTAKKzxVOUUxQj4gPFU5RTFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bibMAorPFU5RTczPiA8VTlFNzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpubMyMQorPFU0RjhBPiA8VTRGOEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvoowCis8VTUwRDk+IDxVNTBEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WDmTAKKzxVNTE0OT4gPFU1MTQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YWJNTU5MTgKKzxVNTRBMz4gPFU1NEEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZKjMjYwCis8VTU3OTk+IDxVNTc5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WemTAKKzxVNTlFRj4gPFU1OUVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aevMAorPFU2ODQ0PiA8VTY4NDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoYQyCis8VTZEMzg+IDxVNkQzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a0uDAKKzxVNzA2RT4gPFU3MDZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54GuMAorPFU3MDk3PiA8VTcwOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngpcwCis8VTcwOUE+IDxVNzA5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eCmjAKKzxVNzA5Qj4gPFU3MDlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54KbMAorPFU3MEUxPiA8VTcwRTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPng6EwCis8VTczRDY+IDxVNzNENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ePljAKKzxVODBGMT4gPFU4MEYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IOxMzMKKzxVODMyQT4gPFU4MzJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IyqMAorPFU4RjA0PiA8VThGMDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovIQwCis8VTkyQTc+IDxVOTJBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mKpzgKKzxVOUVDNj4gPFU5RUM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6buGMAorPFU1RTdGPiA8VTVFN0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlub8xNTE5OQorPFU1RUUzPiA8VTVFRTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlu6M5MworPFU3MkI3PiA8VTcyQjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnircxMTEKKzxVNzM3Nz4gPFU3Mzc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5423MQorPFUzQURCPiA8VTNBREI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjq5swCis8VTZBQ0U+IDxVNkFDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+arjjAKKzxVNzdDQz4gPFU3N0NDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+MMAorPFU4MUU2PiA8VTgxRTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoh6YwCis8VTgxRTk+IDxVODFFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iHqTAKKzxVOTAxQj4gPFU5MDFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YCbMTYyNAorPFU0RTgwPiA8VTRFODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuoAwCis8VTUwODA+IDxVNTA4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WCgDEzOAorPFU1NzJEPiA8VTU3MkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnK0yOTYKKzxVNTlBQj4gPFU1OUFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aarMAorPFU1QUFGPiA8VTVBQUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqq8wCis8VTVBRTI+IDxVNUFFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WrojAKKzxVNUIwMD4gPFU1QjAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ayAMAorPFU1RTMwPiA8VTVFMzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluLAwCis8VTVGNTI+IDxVNUY1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W9kjEwMTAyCis8VTY0NkI+IDxVNjQ2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aRqzAKKzxVNjU2RT4gPFU2NTZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pWuMAorPFU2OTFEPiA8VTY5MUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpJ0wCis8VTY5RTM+IDxVNjlFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+anozAKKzxVNjlGQj4gPFU2OUZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qe7MAorPFU2OUZDPiA8VTY5RkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmp7wwCis8VTZCNzg+IDxVNkI3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+atuDEwMgorPFU2RTg4PiA8VTZFODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuogwCis8VTZGNTk+IDxVNkY1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a9mTAKKzxVNzNFQT4gPFU3M0VBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54+qMAorPFU3NDcwPiA8VTc0NzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkbAyMTQwCis8VTc0OUQ+IDxVNzQ5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eSnTQKKzxVNzRDQz4gPFU3NENDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55OMMAorPFU3Njg4PiA8VTc2ODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmogxMzQKKzxVNzg0NT4gPFU3ODQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56GFMTcyCis8VTdBOTA+IDxVN0E5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eqkDAKKzxVODBGRj4gPFU4MEZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IO/MAorPFU4MUFEPiA8VTgxQUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohq0wCis8VTg4QkY+IDxVODhCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iivzEKKzxVODk4Rj4gPFU4OThGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KaPOTUKKzxVODlDND4gPFU4OUM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KeEMTU2NDUKKzxVOTBCRD4gPFU5MEJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YK9MAorPFU5MENDPiA8VTkwQ0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg4wwCis8VTk1QTg+IDxVOTVBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mWqDEKKzxVOTVGQT4gPFU5NUZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ze6NTU3Cis8VTlCMzY+IDxVOUIzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mstjEKKzxVOUIzOT4gPFU5QjM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ay5MAorPFU5QkFEPiA8VTlCQUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprq0xNgorPFU5QzkxPiA8VTlDOTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpspEzNAorPFU5RDAyPiA8VTlEMDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptIIwCis8VTlGOUM+IDxVOUY5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m+nDIKKzxVOUY5Rj4gPFU5RjlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b6fMjA0NgorPFUzNTMzPiA8VTM1MzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlLMwCis8VTM5RUE+IDxVMzlFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OnqjAKKzxVM0EzMz4gPFUzQTMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46izMAorPFUzQTdCPiA8VTNBN0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqbswCis8VTNDQjk+IDxVM0NCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OyuTAKKzxVM0UzNT4gPFUzRTM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47i1MAorPFU0MDVCPiA8VTQwNUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgZswCis8VTQzNkY+IDxVNDM2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SNrzAKKzxVNDc4OD4gPFU0Nzg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J6IMAorPFU0N0E4PiA8VTQ3QTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknqgwCis8VTQ4QzA+IDxVNDhDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SjgDAKKzxVNDkyNT4gPFU0OTI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KSlMAorPFU0Rjc5PiA8VTRGNzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvbkwCis8VTUzMjY+IDxVNTMyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WMpjAKKzxVNTMyRD4gPFU1MzJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YytMAorPFU1M0FDPiA8VTUzQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljqwwCis8VTU3OUQ+IDxVNTc5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WenTAKKzxVNTlGRD4gPFU1OUZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ae9MgorPFU1Qjg0PiA8VTVCODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlroQzCis8VTVFOEI+IDxVNUU4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W6izIKKzxVNUVBQT4gPFU1RUFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bqqMAorPFU2MDUxPiA8VTYwNTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgZEwCis8VTY1MzE+IDxVNjUzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aUsTAKKzxVNjY3Nz4gPFU2Njc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pm3MjQKKzxVNkMzRj4gPFU2QzNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rC/MQorPFU3Njc4PiA8VTc2Nzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmbg1NQorPFU3OTZBPiA8VTc5NkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpaowCis8VTdDMEI+IDxVN0MwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ewizMKKzxVODZFQj4gPFU4NkVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JurMAorPFU4N0UxPiA8VTg3RTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPon6EwCis8VTg5RTQ+IDxVODlFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+inpDAKKzxVOEE2RD4gPFU4QTZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KmtMjgKKzxVOEJFMT4gPFU4QkUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K+hNzkwCis8VThFQ0M+IDxVOEVDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i7jDE5Cis8VThGNjg+IDxVOEY2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i9qDIxNDQKKzxVOTY1Mj4gPFU5NjUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZmSMAorPFU5QjNDPiA8VTlCM0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprLw4Njc1Cis8VTM2N0E+IDxVMzY3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OZujAKKzxVM0E4OD4gPFUzQTg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46qIMAorPFU0MUM4PiA8VTQxQzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkh4gwCis8VTQzMDY+IDxVNDMwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SMhjAKKzxVNDM3Nz4gPFU0Mzc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I23MAorPFU0NDM0PiA8VTQ0MzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkLQwCis8VTQ1QUY+IDxVNDVBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SWrzAKKzxVNDY0Nj4gPFU0NjQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JmGMAorPFU0NzdGPiA8VTQ3N0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknb8wCis8VTQ4Mjk+IDxVNDgyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SgqTAKKzxVNEJFMz4gPFU0QkUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K+jMAorPFU0QzBFPiA8VTRDMEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksI4wCis8VTRDQ0Y+IDxVNENDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SzjzAKKzxVNTIzRD4gPFU1MjNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Yi9MjM0Cis8VTUyM0Y+IDxVNTIzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WIvzYKKzxVNTI4QT4gPFU1MjhBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YqKMAorPFU1MjhDPiA8VTUyOEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliowwCis8VTUzMkU+IDxVNTMyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WMrjk2Cis8VTVEQTE+IDxVNURBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W2oTAKKzxVNUREQz4gPFU1RERDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5becMAorPFU2NTMwPiA8VTY1MzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlLAwCis8VTY2MEI+IDxVNjYwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aYizAKKzxVNjZBOT4gPFU2NkE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pqpMAorPFU2N0RDPiA8VTY3REM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmn5wyNDU5Cis8VTY4NDI+IDxVNjg0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ahgjI5NjYKKzxVNjg2Nz4gPFU2ODY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qGnMzM2Cis8VTY5N0Y+IDxVNjk3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+alvzAKKzxVNkE5Qz4gPFU2QTlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qqcMAorPFU2QUMzPiA8VTZBQzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmq4M3NgorPFU2RThFPiA8VTZFOEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuo4wCis8VTcwODU+IDxVNzA4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eChTAKKzxVNzA5ND4gPFU3MDk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54KUMTEKKzxVNzMyND4gPFU3MzI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54ykMAorPFU3Nzg2PiA8VTc3ODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnoYwCis8VTdCNDA+IDxVN0I0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+etgDAKKzxVODRENT4gPFU4NEQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JOVMAorPFU4OTU4PiA8VTg5NTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopZgwCis8VThDQjQ+IDxVOENCND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iytDM3Cis8VThEMzU+IDxVOEQzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i0tTgyODIKKzxVOERFQT4gPFU4REVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LeqMzQxNQorPFU5N0JDPiA8VTk3QkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnrwwCis8VTlDNTY+IDxVOUM1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxljAKKzxVOUM2NT4gPFU5QzY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bGlMAorPFU5Q0RDPiA8VTlDREM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPps5w2Cis8VTg4RTk+IDxVODhFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ijqTAKKzxVMzY2NT4gPFUzNjY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45mlMAorPFUzQUNFPiA8VTNBQ0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjq44wCis8VTNCRkI+IDxVM0JGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OvuzAKKzxVNDBDMj4gPFU0MEMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IOCMAorPFU0M0JFPiA8VTQzQkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjr4wCis8VTQ3MDc+IDxVNDcwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SchzAKKzxVNEUyOD4gPFU0RTI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LioMAorPFU2MzhEPiA8VTYzOEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjo0wCis8VTZFREE+IDxVNkVEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a7mjQ3MTIKKzxVNkVGRT4gPFU2RUZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ru+MzUKKzxVNzhEOT4gPFU3OEQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56OZMworPFU3REM0PiA8VTdEQzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnt4QwCis8VTdFRjI+IDxVN0VGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e7sjEKKzxVODREOD4gPFU4NEQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JOYMAorPFU4NTA5PiA8VTg1MDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolIkwCis8VTg4NkU+IDxVODg2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ihrjE2NgorPFU4ODlFPiA8VTg4OUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoop41Cis8VThGMjU+IDxVOEYyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i8pTAKKzxVOEY4QT4gPFU4RjhBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L6KNQorPFU5QjhDPiA8VTlCOEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprowwCis8VTlCQzA+IDxVOUJDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mvgDAKKzxVOUNBNz4gPFU5Q0E3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bKnMTUKKzxVNEQ2QT4gPFU0RDZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LWqMAorPFU2OENEPiA8VTY4Q0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmo40xODg1Cis8VTc0QUQ+IDxVNzRBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eSrTAKKzxVNzc3ND4gPFU3Nzc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5520MAorPFU4QjM0PiA8VThCMzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorLQwCis8VTU0NTk+IDxVNTQ1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRmTAKKzxVNTRCQz4gPFU1NEJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZK8MAorPFU1NTZGPiA8VTU1NkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlla8zCis8VTU2MTM+IDxVNTYxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WYkzUKKzxVNTdEQT4gPFU1N0RBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z+aMworPFU1N0ZCPiA8VTU3RkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPln7swCis8VTU4MUQ+IDxVNTgxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WgnTAKKzxVNTg4RT4gPFU1ODhFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aKOMAorPFU1RDFFPiA8VTVEMUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltJ4xCis8VTVGNEQ+IDxVNUY0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W9jTAKKzxVNkRBMT4gPFU2REExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rahNjc4Cis8VTZFMjY+IDxVNkUyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a4pjQKKzxVNkZDND4gPFU2RkM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r+EMAorPFU4MDUyPiA8VTgwNTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogZIxMTUKKzxVODc0OD4gPFU4NzQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J2IMTYyCis8VTg3Qzg+IDxVODdDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ifiDAKKzxVOTA0RT4gPFU5MDRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YGOMTc2NQorPFU5MEVEPiA8VTkwRUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg60yMjI5Cis8VTkyMUI+IDxVOTIxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mImzAKKzxVOTM0Qj4gPFU5MzRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y2LMTkKKzxVOTUwNT4gPFU5NTA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZSFMjkwOAorPFUzNTc1PiA8VTM1NzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlbUwCis8VTM1QUE+IDxVMzVBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OWqjAKKzxVMzY4RD4gPFUzNjhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45qNMAorPFUzRDgxPiA8VTNEODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtoEwCis8VTQwQjg+IDxVNDBCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SCuDAKKzxVNDE5MD4gPFU0MTkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IaQMAorPFU0NDM4PiA8VTQ0Mzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkLgwCis8VTQ5MEI+IDxVNDkwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SkizAKKzxVNEIwRT4gPFU0QjBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KyOMAorPFU1NkVGPiA8VTU2RUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlm68wCis8VTU2RjY+IDxVNTZGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WbtjAKKzxVNTZGQj4gPFU1NkZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Zu7MAorPFU1NkZEPiA8VTU2RkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlm70yMTU1NDMKKzxVNTcwMD4gPFU1NzAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZyAMAorPFU1NzBCPiA8VTU3MEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnIsxNTQ3Cis8VTVFM0M+IDxVNUUzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W4vDMzCis8VTVFNTc+IDxVNUU1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W5lzAKKzxVNjE1Nj4gPFU2MTU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oWWMAorPFU2M0I0PiA8VTYzQjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjrQ0NworPFU2NDUxPiA8VTY0NTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkZEwCis8VTZGMEQ+IDxVNkYwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a8jTAKKzxVN0MwMj4gPFU3QzAyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57CCMAorPFU4MDVEPiA8VTgwNUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogZ0wCis8VTgxNTg+IDxVODE1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iFmDEKKzxVODE5NT4gPFU4MTk1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IaVMAorPFU4NjYyPiA8VTg2NjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomaIyOAorPFU5OTk4PiA8VTk5OTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpppg2Cis8VTM3ODU+IDxVMzc4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OehTAKKzxVNDY2OD4gPFU0NjY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JmoMAorPFU0RDM5PiA8VTREMzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktLkwCis8VTYwQzg+IDxVNjBDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aDiDAKKzxVNjc5Qz4gPFU2NzlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p6cNjUxMDEKKzxVNjkwMT4gPFU2OTAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qSBMTYKKzxVNjlFOD4gPFU2OUU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qeoMAorPFU2REM5PiA8VTZEQzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmt4kwCis8VTczMTM+IDxVNzMxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eMkzEKKzxVN0NCRj4gPFU3Q0JGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57K/MAorPFU3REI2PiA8VTdEQjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntrYwCis8VTgzRDM+IDxVODNEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPkzAKKzxVODczRT4gPFU4NzNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Jy+NQorPFU4OEY5PiA8VTg4Rjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo7kyMTA2Cis8VThGMjA+IDxVOEYyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i8oDAKKzxVOTMwMT4gPFU5MzAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YyBMAorPFU5NDM5PiA8VTk0Mzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkLkwCis8VTk5MUM+IDxVOTkxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mknDAKKzxVOTk4Mz4gPFU5OTgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aaDMAorPFUzQ0MwPiA8VTNDQzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjs4AwCis8VTgxNDI+IDxVODE0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iFgjAKKzxVOEZDNz4gPFU4RkM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L+HMTkwMDAwCis8VTU0Qzg+IDxVNTRDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WTiDE0NDg5Cis8VTkyN0Y+IDxVOTI3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mJvzAKKzxVOTRFQT4gPFU5NEVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZOqMTAKKzxVODc2Nj4gPFU4NzY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J2mNQorPFU1NDhEPiA8VTU0OEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlko0wCis8VTU0QjM+IDxVNTRCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WSszE3MDIKKzxVNTVFOD4gPFU1NUU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZeoNjAzCis8VTM3M0U+IDxVMzczRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OcvjAKKzxVM0ExRj4gPFUzQTFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46ifMAorPFU0ODNEPiA8VTQ4M0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoL0wCis8VTRCRDA+IDxVNEJEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SvkDAKKzxVNEM3QT4gPFU0QzdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LG6MAorPFU1QjY5PiA8VTVCNjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrakzNjY2NgorPFU4RkQ4PiA8VThGRDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPov5gxMDUxMzcKKzxVOTA4ND4gPFU5MDg0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKEOTAyCis8VTk4MjY+IDxVOTgyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mgpjIKKzxVOTg4Rj4gPFU5ODhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aKPNzUKKzxVOUFCOD4gPFU5QUI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aq4NTk5Cis8VTZENzc+IDxVNkQ3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a1tzQ1ODc1Cis8VTcwRjg+IDxVNzBGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eDuDAKKzxVOTE3Qz4gPFU5MTdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YW8MAorPFU5MUEyPiA8VTkxQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphqI2Cis8VTM5MjU+IDxVMzkyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OkpTAKKzxVMzk5Rj4gPFUzOTlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46afMAorPFUzOUUxPiA8VTM5RTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjp6EwCis8VTNFOTQ+IDxVM0U5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O6lDAKKzxVNDFDQj4gPFU0MUNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IeLMAorPFU0RUE1PiA8VTRFQTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuqUzMDYKKzxVNTVEMD4gPFU1NUQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZeQNAorPFU1QkIzPiA8VTVCQjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrrMxNTQxNAorPFU2QzI2PiA8VTZDMjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsKYxMDUKKzxVOTkwMD4gPFU5OTAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aSAMAorPFU5OTVBPiA8VTk5NUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppZowCis8VTk5RUQ+IDxVOTlFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mnrTgKKzxVOUE4Nz4gPFU5QTg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aqHNzExCis8VTU1MDU+IDxVNTUwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUhTAKKzxVNUFFOD4gPFU1QUU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5auoMAorPFU2MUE4PiA8VTYxQTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhqg0MjAKKzxVNzBCNj4gPFU3MEI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54K2MAorPFU3NTFEPiA8VTc1MUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlJ0wCis8VTg2QjY+IDxVODZCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iatjEzCis8VThDM0Q+IDxVOEMzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwvTAKKzxVOTE2Mz4gPFU5MTYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YWjMzI0Cis8VTk4MDc+IDxVOTgwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mghzEKKzxVOTg3OD4gPFU5ODc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aG4NworPFU5OUEwPiA8VTk5QTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppqAwCis8VTlCN0Q+IDxVOUI3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mtvTAKKzxVOUYzRT4gPFU5RjNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6by+Mjk2Cis8VTM1QTQ+IDxVMzVBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OWpDAKKzxVMzY0OD4gPFUzNjQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45mIMAorPFUzNjU0PiA8VTM2NTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmZQwCis8VTM3Q0Y+IDxVMzdDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OfjzAKKzxVMzdEND4gPFUzN0Q0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45+UMAorPFUzQjgwPiA8VTNCODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjroAwCis8VTNEQjA+IDxVM0RCMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O2sDAKKzxVM0YyOD4gPFUzRjI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47yoMAorPFU0MjA0PiA8VTQyMDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiIQwCis8VTQ1RDk+IDxVNDVEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SXmTAKKzxVNDkzND4gPFU0OTM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KS0MAorPFU0OTQxPiA8VTQ5NDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpYEwCis8VTRBMjE+IDxVNEEyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SooTAKKzxVNEJBNz4gPFU0QkE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K6nMAorPFU0RDgzPiA8VTREODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktoMwCis8VTRGNDQ+IDxVNEY0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S9hDAKKzxVNTFGRD4gPFU1MUZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ye9NjA3OQorPFU1MUZFPiA8VTUxRkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlh74wCis8VTU0MkI+IDxVNTQyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WQqzk3ODAKKzxVNTcwNT4gPFU1NzA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZyFMAorPFU1QTIyPiA8VTVBMjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqKIwCis8VTVCRDI+IDxVNUJEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WvkjYzMTUKKzxVNUQyMT4gPFU1RDIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bShMAorPFU2NjU3PiA8VTY2NTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmZc3MQorPFU2ODkyPiA8VTY4OTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmopIwCis8VTZEQjU+IDxVNkRCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a2tTEzOTIKKzxVNzExMz4gPFU3MTEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54STMTEKKzxVNzQwMD4gPFU3NDAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55CAMAorPFU3QjY4PiA8VTdCNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnragwCis8VTkwOTc+IDxVOTA5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mClzgKKzxVOTBBRj4gPFU5MEFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKvMjQxCis8VTkyRTE+IDxVOTJFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mLoTAKKzxVOTdEMz4gPFU5N0QzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z+TMTYKKzxVOTdFOT4gPFU5N0U5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z+pNjUxNworPFUzNjBFPiA8VTM2MEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmI4wCis8VTM2MTU+IDxVMzYxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OYlTAKKzxVMzYxQT4gPFUzNjFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45iaMAorPFUzNjczPiA8VTM2NzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmbMwCis8VTNENEU+IDxVM0Q0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O1jjAKKzxVM0UwMT4gPFUzRTAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47iBMAorPFUzRTk2PiA8VTNFOTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjupYwCis8VTNGNDk+IDxVM0Y0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O9iTAKKzxVNDM1MD4gPFU0MzUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I2QMAorPFU0MzUxPiA8VTQzNTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjZEwCis8VTQ0Q0Q+IDxVNDRDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+STjTAKKzxVNDRGRj4gPFU0NEZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JO/MAorPFU0NkRFPiA8VTQ2REU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkm54wCis8VTU1OEE+IDxVNTU4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WWijg4MjQKKzxVNTY4Mj4gPFU1NjgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZqCMAorPFU2RDZCPiA8VTZENkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtaswCis8VTdGNTU+IDxVN0Y1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9lTEwNzcKKzxVODUwQT4gPFU4NTBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JSKMAorPFU4QzQzPiA8VThDNDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosYMwCis8VTk1REU+IDxVOTVERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mXnjAKKzxVMzQ3NT4gPFUzNDc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45G1MAorPFUzNDg4PiA8VTM0ODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkogwCis8VTM3MjY+IDxVMzcyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OcpjAKKzxVMzhBOD4gPFUzOEE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46KoMAorPFUzQTE0PiA8VTNBMTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqJQwCis8VTNBOEI+IDxVM0E4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OqizAKKzxVM0NBNj4gPFUzQ0E2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47KmMAorPFUzRDQ0PiA8VTNENDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtYQwCis8VTNGNzM+IDxVM0Y3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O9szAKKzxVNDA1ND4gPFU0MDU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IGUMAorPFU0MzBEPiA8VTQzMEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjI0wCis8VTQzQUY+IDxVNDNBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SOrzAKKzxVNDNGNz4gPFU0M0Y3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I+3MAorPFU0NDA0PiA8VTQ0MDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkIQwCis8VTQ1N0Y+IDxVNDU3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SVvzAKKzxVNDU5ND4gPFU0NTk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JaUMAorPFU0NjM2PiA8VTQ2MzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmLYwCis8VTQ5RjI+IDxVNDlGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SnsjAKKzxVNEFGMj4gPFU0QUYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KuyMAorPFU1MEJDPiA8VTUwQkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgrwwCis8VTU0RkI+IDxVNTRGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WTuzAKKzxVNTdCRT4gPFU1N0JFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z6+MAorPFU1QzdEPiA8VTVDN0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsb0wCis8VTYwOEQ+IDxVNjA4RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aCjTU0NAorPFU2MUJFPiA8VTYxQkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhr4xOTE2Cis8VTYyNUU+IDxVNjI1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aJnjMKKzxVNjM0RD4gPFU2MzREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o2NNDI4Cis8VTY0OTY+IDxVNjQ5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aSljEKKzxVNjRCQz4gPFU2NEJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pK8NTcxCis8VTY1MEM+IDxVNjUwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aUjDAKKzxVNjVGMT4gPFU2NUYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pexNjU1Cis8VTY2NTg+IDxVNjY1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aZmDAKKzxVNjY2NT4gPFU2NjY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pmlMAorPFU2NkI1PiA8VTY2QjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmrUwCis8VTZDNDk+IDxVNkM0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+axiTEyMjE1Cis8VTZDNTc+IDxVNkM1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+axlzYzMDUKKzxVNkQ4Nj4gPFU2RDg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5raGMAorPFU2RENBPiA8VTZEQ0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmt4owCis8VTZGMjI+IDxVNkYyMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a8ojEwNgorPFU2RjhGPiA8VTZGOEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvo8wCis8VTcwMUE+IDxVNzAxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eAmjE4OQorPFU3MTBBPiA8VTcxMEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhIoxNzEKKzxVNzFBRj4gPFU3MUFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54avMQorPFU3MzAyPiA8VTczMDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjIIwCis8VTc2OTQ+IDxVNzY5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ealDAKKzxVNzc0NT4gPFU3NzQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj552FMAorPFU3RkYwPiA8VTdGRjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnv7AyMjUxCis8VTgzOUY+IDxVODM5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iOnzAKKzxVODNFMT4gPFU4M0UxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I+hMjcKKzxVODZGRj4gPFU4NkZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ju/MgorPFU4NzJEPiA8VTg3MkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonK0wCis8VTg3OTI+IDxVODc5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iekjAKKzxVOEI0MD4gPFU4QjQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K2AMAorPFU5MUVDPiA8VTkxRUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPph6wwCis8VTkyQjI+IDxVOTJCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mKsjAKKzxVOTJDRT4gPFU5MkNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YuOMAorPFU5NTg4PiA8VTk1ODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplogwCis8VTk1RUM+IDxVOTVFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mXrDAKKzxVOTZENz4gPFU5NkQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZuXMAorPFU5ODFDPiA8VTk4MUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoJwwCis8VTk4Mzc+IDxVOTgzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mgtzMKKzxVOTg0ND4gPFU5ODQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aGEMAorPFU5ODk0PiA8VTk4OTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpopQxNDEKKzxVOTlBRj4gPFU5OUFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aavMAorPFU5OUZCPiA8VTk5RkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpp7swCis8VTlEQkU+IDxVOURCRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m2vjAKKzxVNTkyRj4gPFU1OTJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aSvNTAKKzxVNUZGQz4gPFU1RkZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b+8MAorPFUzOTFBPiA8VTM5MUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpJowCis8VTQwMkE+IDxVNDAyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SAqjAKKzxVNDYxNT4gPFU0NjE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JiVMAorPFU0Q0IzPiA8VTRDQjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksrMwCis8VTU0MkQ+IDxVNTQyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WQrTk3NworPFU2NUJCPiA8VTY1QkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlrswCis8VTY3NkQ+IDxVNjc2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+adrTEwNDUKKzxVNjg0MT4gPFU2ODQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qGBOAorPFU3QjU1PiA8VTdCNTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrZUwCis8VTdENEU+IDxVN0Q0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e1jjEKKzxVN0VENz4gPFU3RUQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57uXMAorPFU4MjJBPiA8VTgyMkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiKo4NzM1Cis8VTgyQzA+IDxVODJDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iLgDAKKzxVODZBMj4gPFU4NkEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JqiMAorPFU4ODRDPiA8VTg4NEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooYw1MDAwMAorPFU4Q0E1PiA8VThDQTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosqUwCis8VThGRDI+IDxVOEZEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i/kjAKKzxVOTZGRD4gPFU5NkZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Zu9MAorPFU5ODBGPiA8VTk4MEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoI8wCis8VTlCNjc+IDxVOUI2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mtpzAKKzxVOUUzQj4gPFU5RTNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bi7MQorPFU0N0Q4PiA8VTQ3RDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkn5gwCis8VTQ4Qzg+IDxVNDhDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SjiDAKKzxVNDlCMz4gPFU0OUIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KazMAorPFU0RDAyPiA8VTREMDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktIIwCis8VTVERjc+IDxVNURGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W3tzE4MDMKKzxVNkM4Nj4gPFU2Qzg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rKGMjUKKzxVNEZCRT4gPFU0RkJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L6+MQorPFU1Njg2PiA8VTU2ODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmoYwCis8VTg0QkY+IDxVODRCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iSvzEzMworPFU4NTg1PiA8VTg1ODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoloUyNQorPFUzNTdBPiA8VTM1N0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlbowCis8VTM4MTk+IDxVMzgxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OgmTAKKzxVM0E1RD4gPFUzQTVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46mdMAorPFUzQjE0PiA8VTNCMTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrJQwCis8VTQ3NjU+IDxVNDc2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SdpTAKKzxVNDlFQj4gPFU0OUVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KerMAorPFU1MTJCPiA8VTUxMkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhKswCis8VTUyQzI+IDxVNTJDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WLgjAKKzxVNTVFNT4gPFU1NUU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZelMTA0Cis8VTU2Mzc+IDxVNTYzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WYtzEKKzxVNTY1MT4gPFU1NjUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZmRMAorPFU1NjhFPiA8VTU2OEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmo41NzYKKzxVNThENT4gPFU1OEQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aOVMTgyCis8VTY5MDM+IDxVNjkwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+akgzAKKzxVNkJFQj4gPFU2QkVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q+rODkyMAorPFU2RkUwPiA8VTZGRTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv6AyOAorPFU3MkUyPiA8VTcyRTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPni6IwCis8VTczNDY+IDxVNzM0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eNhjAKKzxVNzM0Qj4gPFU3MzRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj542LMAorPFU3MzU0PiA8VTczNTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjZQwCis8VTdDNDc+IDxVN0M0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+exhzAKKzxVODY1Rj4gPFU4NjVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JmfMTA4Cis8VTg2NjA+IDxVODY2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iZoDAKKzxVODgxND4gPFU4ODE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KCUMgorPFU4QUQ1PiA8VThBRDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoq5UwCis8VThCNzk+IDxVOEI3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ituTAKKzxVOEM2QT4gPFU4QzZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LGqMzE4OAorPFU4Qzg5PiA8VThDODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosokxMQorPFU5REI0PiA8VTlEQjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptrQyNworPFU1OTdEPiA8VTU5N0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpb0xNTIwNTcKKzxVNjA0Rj4gPFU2MDRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oGPMAorPFU5MEREPiA8VTkwREQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg502MDcKKzxVMzYyQT4gPFUzNjJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45iqMAorPFUzNjcxPiA8VTM2NzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmbEwCis8VTM2QUE+IDxVMzZBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OaqjAKKzxVMzc0MD4gPFUzNzQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj452AMAorPFUzN0JCPiA8VTM3QkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnrswCis8VTNCMzY+IDxVM0IzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OstjAKKzxVM0Q0Nj4gPFUzRDQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47WGMAorPFU0NEI1PiA8VTQ0QjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkrUwCis8VTQ2QkQ+IDxVNDZCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SavTAKKzxVNDc1RT4gPFU0NzVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J2eMAorPFU0OURBPiA8VTQ5REE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkp5owCis8VTRBQkQ+IDxVNEFCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SqvTAKKzxVNEIwOT4gPFU0QjA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KyJMAorPFU0QkVCPiA8VTRCRUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkr6swCis8VTUwOTA+IDxVNTA5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WCkDAKKzxVNTNGNz4gPFU1M0Y3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y+3MjQ2ODEKKzxVNTRFMD4gPFU1NEUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZOgMAorPFU1Q0ZDPiA8VTVDRkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPls7wwCis8VTYwOEU+IDxVNjA4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aCjjAKKzxVNjYwQT4gPFU2NjBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5piKMjY1Cis8VTY2MjY+IDxVNjYyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aYpjAKKzxVNjY2Nz4gPFU2NjY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pmnMAorPFU2NkE0PiA8VTY2QTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmqQwCis8VTY2QUQ+IDxVNjZBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aarTAKKzxVNjZDRD4gPFU2NkNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5puNMAorPFU2RDY5PiA8VTZENjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtakxOTAzCis8VTZEQ0Y+IDxVNkRDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3jzAKKzxVNkVDOD4gPFU2RUM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ruIMAorPFU2Rjk0PiA8VTZGOTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvpQwCis8VTcwMjU+IDxVNzAyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eApTAKKzxVNzA0Rj4gPFU3MDRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54GPMTQKKzxVNzA1RD4gPFU3MDVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54GdMAorPFU3NjkzPiA8VTc2OTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmpM1NTIKKzxVNzY5Qz4gPFU3NjlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55qcMAorPFU3NjlFPiA8VTc2OUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmp4wCis8VTc2QTE+IDxVNzZBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eaoTAKKzxVNzZBNT4gPFU3NkE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55qlMAorPFU3OUNGPiA8VTc5Q0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnp48wCis8VTgwMTc+IDxVODAxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iAlzIyMjAKKzxVODA1NT4gPFU4MDU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IGVMAorPFU4NTgzPiA8VTg1ODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoloMwCis8VTkxMTc+IDxVOTExNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mElzAKKzxVOTg2NT4gPFU5ODY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aGlMAorPFU5OEEyPiA8VTk4QTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoqIyMgorPFU5QzFEPiA8VTlDMUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsJ0wCis8VTU0NzU+IDxVNTQ3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRtTg4MjEKKzxVNTU5RD4gPFU1NTlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZadMTYwMDAKKzxVNTVFQz4gPFU1NUVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZesMzExCis8VTVDQzY+IDxVNUNDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WzhjAKKzxVNjJCMj4gPFU2MkIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oqyMAorPFU4QTM2PiA8VThBMzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqLYxCis8VThCQzM+IDxVOEJDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ivgzk2Cis8VTM0RUQ+IDxVMzRFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OTrTAKKzxVMzUyMD4gPFUzNTIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45SgMAorPFUzNTYxPiA8VTM1NjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlaEwCis8VTM5N0E+IDxVMzk3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OlujAKKzxVM0E4OT4gPFUzQTg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46qJMAorPFUzQjU4PiA8VTNCNTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrZgwCis8VTNCNzE+IDxVM0I3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OtsTAKKzxVM0I5RD4gPFUzQjlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj466dMAorPFUzQkFCPiA8VTNCQUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrqswCis8VTNFNDc+IDxVM0U0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O5hzAKKzxVM0ZFMz4gPFUzRkUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47+jMAorPFU0MEQyPiA8VTQwRDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkg5IwCis8VTQxNDI+IDxVNDE0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SFgjAKKzxVNDRBOT4gPFU0NEE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JKpMAorPFU0NTYzPiA8VTQ1NjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklaMwCis8VTQ3QTY+IDxVNDdBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SepjAKKzxVNDg5Nz4gPFU0ODk3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KKXMAorPFU0QUQ4PiA8VTRBRDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkq5gwCis8VTRDREE+IDxVNENEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SzmjAKKzxVNEQ4NT4gPFU0RDg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LaFMAorPFU0RjU1PiA8VTRGNTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvZU1NTAwNAorPFU1MkJFPiA8VTUyQkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlir4yMDI0Cis8VTU0MDg+IDxVNTQwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WQiDQyMjI1Cis8VTU0OEE+IDxVNTQ4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WSijAKKzxVNTQ4Qz4gPFU1NDhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZKMMjAwMDAwCis8VTU0RUM+IDxVNTRFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WTrDAKKzxVNTU1RD4gPFU1NTVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZWdMAorPFU1OUMwPiA8VTU5QzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlp4AwCis8VTVFQzU+IDxVNUVDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W7hTAKKzxVNjBEMj4gPFU2MEQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oOSMAorPFU2NkY3PiA8VTY2Rjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmm7cxNAorPFU2N0M3PiA8VTY3Qzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmn4cwCis8VTY4Mzg+IDxVNjgzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aguDExMDAwCis8VTY5NDE+IDxVNjk0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+algTAKKzxVNkJGQz4gPFU2QkZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q+8MAorPFU2Q0IzPiA8VTZDQjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsrMxNjQzOAorPFU2REI4PiA8VTZEQjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtrgyNDcKKzxVNkVDNj4gPFU2RUM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ruGMAorPFU2Rjk1PiA8VTZGOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvpUwCis8VTcxODY+IDxVNzE4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eGhjAKKzxVNzZDNz4gPFU3NkM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55uHMAorPFU3NkM5PiA8VTc2Qzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnm4kwCis8VTc2Q0Q+IDxVNzZDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ebjTI0Cis8VTc2RDI+IDxVNzZEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ebkjI5ODEKKzxVNzkwOT4gPFU3OTA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56SJMAorPFU3OUJFPiA8VTc5QkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpr43MDYKKzxVNzlGND4gPFU3OUY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56e0MAorPFU3QkQ1PiA8VTdCRDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnr5UwCis8VTdGRUU+IDxVN0ZFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e/rjkKKzxVODM3Nz4gPFU4Mzc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I23Mzk2NgorPFU4NDAyPiA8VTg0MDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokIIwCis8VTg0OUE+IDxVODQ5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iSmjAKKzxVODZCNT4gPFU4NkI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Jq1NgorPFU4NzlCPiA8VTg3OUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonpswCis8VTg5ODg+IDxVODk4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+imiDAKKzxVOEEzOD4gPFU4QTM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ki4MAorPFU4QTY1PiA8VThBNjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqaUwCis8VThDODg+IDxVOEM4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iyiDAKKzxVOERCNz4gPFU4REI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6La3MQorPFU5MURCPiA8VTkxREI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPph5swCis8VTkyNEM+IDxVOTI0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mJjDAKKzxVOTVBMT4gPFU5NUExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZahMAorPFU5NUQ0PiA8VTk1RDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl5Q0Cis8VTk2MDI+IDxVOTYwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mYgjEyNworPFU5NjE2PiA8VTk2MTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmJYxNjcKKzxVOTdBOD4gPFU5N0E4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z6oMQorPFU5OTMyPiA8VTk5MzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppLIwCis8VTk5Nzg+IDxVOTk3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mluDAKKzxVOURBMT4gPFU5REExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bahMAorPFU5RTU2PiA8VTlFNTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuZYwCis8VTlGNTU+IDxVOUY1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m9lTAKKzxVOUY4MT4gPFU5RjgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b6BMAorPFU5RkEyPiA8VTlGQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvqIzNQorPFUzNTcwPiA8VTM1NzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlbAwCis8VTM5QTY+IDxVMzlBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OmpjAKKzxVM0IxRT4gPFUzQjFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46yeMAorPFUzRDUxPiA8VTNENTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtZEwCis8VTNEQ0U+IDxVM0RDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O3jjAKKzxVM0RFND4gPFUzREU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47ekMAorPFU0MzhCPiA8VTQzOEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjoswCis8VTQ0RkM+IDxVNDRGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+STvDAKKzxVNDY4Mj4gPFU0NjgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JqCMAorPFU0QTlBPiA8VTRBOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqpowCis8VTRDRkQ+IDxVNENGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SzvTAKKzxVNEQzMz4gPFU0RDMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LSzMAorPFU0RDcxPiA8VTRENzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktbEwCis8VTRGNkI+IDxVNEY2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S9qzAKKzxVNTVDMz4gPFU1NUMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZeDMAorPFU1Njg3PiA8VTU2ODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmoc1NgorPFU1OEQxPiA8VTU4RDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlo5ExMjQKKzxVNUJDOT4gPFU1QkM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a+JMAorPFU2NjhEPiA8VTY2OEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmo0wCis8VTcxMDM+IDxVNzEwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eEgzAKKzxVNzE0Mj4gPFU3MTQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54WCMAorPFU3MTg3PiA8VTcxODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhocwCis8VTcyMDA+IDxVNzIwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eIgDAKKzxVNzMzMj4gPFU3MzMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54yyMAorPFU3NjRCPiA8VTc2NEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmYs5Cis8VTc2QUM+IDxVNzZBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+earDAKKzxVNzg4Qj4gPFU3ODhCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56KLMAorPFU3RkVGPiA8VTdGRUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnv68wCis8VTg4MUE+IDxVODgxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+igmjAKKzxVODg5ND4gPFU4ODk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KKUMAorPFU4OTEwPiA8VTg5MTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopJA3NTQKKzxVOENDMD4gPFU4Q0MwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LOAMworPFU4RDNBPiA8VThEM0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotLoyMzc2Cis8VThENkI+IDxVOEQ2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i1qzMzNjIKKzxVOTZCQT4gPFU5NkJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Zq6MAorPFU5NzRFPiA8VTk3NEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnY4wCis8VTk3NEY+IDxVOTc0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mdjzAKKzxVOURBRT4gPFU5REFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bauOAorPFU5RTE2PiA8VTlFMTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuJYwCis8VTlFNjQ+IDxVOUU2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m5pDExODQKKzxVRkEyRD4gPFVGQTJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj76itMAorPFU1NjNGPiA8VTU2M0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmL8yOTUwCis8VTZGNzY+IDxVNkY3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a9tjAKKzxVOUVEMT4gPFU5RUQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6buRMzE3MTEKKzxVOUVEMj4gPFU5RUQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6buSMgorPFUzQkNBPiA8VTNCQ0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjr4owCis8VTYyRUI+IDxVNjJFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aLqzAKKzxVNzVENT4gPFU3NUQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55eVMzA1NAorPFU5NzhFPiA8VTk3OEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpno4wCis8VTQ0RjM+IDxVNDRGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+STszAKKzxVNUY4OD4gPFU1Rjg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b6IMTA4MTEwCis8VTcyRTA+IDxVNzJFMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eLoDQ1MDEKKzxVOEE2QT4gPFU4QTZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KmqMAorPFU2MDY4PiA8VTYwNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgag3MTI1Cis8VTRFQTg+IDxVNEVBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6qDE1MzIKKzxVNTRGQz4gPFU1NEZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZO8Mjk4MgorPFU2MDk5PiA8VTYwOTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgpkwCis8VTgxMUQ+IDxVODExRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iEnTAKKzxVOEFGQj4gPFU4QUZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ku7MAorPFUzNTMwPiA8VTM1MzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlLAwCis8VTNEODc+IDxVM0Q4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O2hzAKKzxVNDExMz4gPFU0MTEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ISTMAorPFU0NDlCPiA8VTQ0OUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkpswCis8VTRCMTY+IDxVNEIxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SsljAKKzxVNEIxRD4gPFU0QjFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KydMAorPFU0QkQyPiA8VTRCRDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkr5IwCis8VTRGNzc+IDxVNEY3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S9tzIKKzxVNTlFRT4gPFU1OUVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aeuMAorPFU2MDUyPiA8VTYwNTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgZI1NTQyCis8VTYzRDg+IDxVNjNEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aPmDAKKzxVNjk3Qj4gPFU2OTdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qW7MAorPFU2QTJBPiA8VTZBMkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqKo0Nzc4Cis8VTZBNkI+IDxVNkE2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+apqzQ0Cis8VTczRTk+IDxVNzNFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ePqTg4Cis8VTg2MDU+IDxVODYwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iYhTkKKzxVODg2MT4gPFU4ODYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KGhMzMzOQorPFU4QTk5PiA8VThBOTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqpkwCis8VTk0NDU+IDxVOTQ0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mRhTAKKzxVOUQzND4gPFU5RDM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bS0MAorPFU5RUM5PiA8VTlFQzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpu4k0Cis8VTU1NDg+IDxVNTU0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WViDAKKzxVNTgzQz4gPFU1ODNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aC8MAorPFU2NDk0PiA8VTY0OTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkpQxCis8VTZGOEI+IDxVNkY4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a+izAKKzxVNTNGRj4gPFU1M0ZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y+/MAorPFU1NDNEPiA8VTU0M0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkL04Cis8VTU0NEQ+IDxVNTQ0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRjTEKKzxVNTRDND4gPFU1NEM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZOEMjAzNworPFU1NEM1PiA8VTU0QzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlk4UwCis8VTYzQzg+IDxVNjNDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aPiDAKKzxVNkUzOT4gPFU2RTM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ri5MAorPFU3MEQ4PiA8VTcwRDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPng5g3NzQKKzxVNzEyMj4gPFU3MTIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54SiMAorPFU3ODYxPiA8VTc4NjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoaEwCis8VTg1QTg+IDxVODVBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iWqDQwCis8VThBMDc+IDxVOEEwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iohzQyCis8VThDM0U+IDxVOEMzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwvjAKKzxVOEVFMz4gPFU4RUUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LujMAorPFU4RjM3PiA8VThGMzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovLcwCis8VThGNUY+IDxVOEY1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i9nzE2Cis8VThGNzA+IDxVOEY3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i9sDQyMjgKKzxVOTM2Nz4gPFU5MzY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y2nMAorPFU5NUE3PiA8VTk1QTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplqcwCis8VTk4NkQ+IDxVOTg2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mhrTAKKzxVOUI1Rj4gPFU5QjVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a2fMAorPFUzNTkzPiA8VTM1OTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlpMwCis8VTM4QUM+IDxVMzhBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OirDAKKzxVNDBBQj4gPFU0MEFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IKrMAorPFU0MEQ0PiA8VTQwRDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkg5QwCis8VTQxOTY+IDxVNDE5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SGljAKKzxVNDI3QT4gPFU0MjdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Im6MAorPFU0MzU0PiA8VTQzNTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjZQwCis8VTQ3MkI+IDxVNDcyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ScqzAKKzxVNDc5MT4gPFU0NzkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J6RMAorPFU0ODRDPiA8VTQ4NEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoYwwCis8VTQ4NEY+IDxVNDg0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ShjzAKKzxVNDlDNj4gPFU0OUM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KeGMAorPFU0QTBFPiA8VTRBMEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqI4wCis8VTRBNTE+IDxVNEE1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SpkTAKKzxVNEFBNj4gPFU0QUE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KqmMAorPFU0QUY5PiA8VTRBRjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkq7kwCis8VTRBRkE+IDxVNEFGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SrujAKKzxVNENBOD4gPFU0Q0E4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LKoMAorPFU0RURDPiA8VTRFREM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPku5wwCis8VTU3QUM+IDxVNTdBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WerDAKKzxVNTk4NT4gPFU1OTg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aaFMAorPFU1QTAyPiA8VTVBMDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqIIwCis8VTVCOEY+IDxVNUI4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WujzI3NDgKKzxVNUI5Nj4gPFU1Qjk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a6WMAorPFU1Q0Y1PiA8VTVDRjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPls7UwCis8VTVGMTg+IDxVNUYxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W8mDIyMzkKKzxVNUY0Qj4gPFU1RjRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b2LMAorPFU2QzZGPiA8VTZDNkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsa8wCis8VTZDRDM+IDxVNkNEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+azkzIxNQorPFU2RDJBPiA8VTZEMkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtKozMDQyCis8VTZENjQ+IDxVNkQ2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a1pDAKKzxVNkUzMT4gPFU2RTMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rixMAorPFU2RjQyPiA8VTZGNDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvYIwCis8VTcwNzQ+IDxVNzA3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eBtDAKKzxVNzM5Mj4gPFU3MzkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj546SMQorPFU3MzlDPiA8VTczOUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjpwwCis8VTc0RTg+IDxVNzRFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eTqDAKKzxVNzg1ND4gPFU3ODU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56GUMAorPFU3QUQxPiA8VTdBRDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnq5EwCis8VTdBRTQ+IDxVN0FFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+erpDEKKzxVN0JDQT4gPFU3QkNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56+KMAorPFU3Q0EwPiA8VTdDQTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsqAxCis8VTdEMDU+IDxVN0QwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e0hTEzMQorPFU3RDE4PiA8VTdEMTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntJgwCis8VTdEMkQ+IDxVN0QyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e0rTAKKzxVN0Q4Qj4gPFU3RDhCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57aLMAorPFU3RUEyPiA8VTdFQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuqIzMTcxNgorPFU3RUFFPiA8VTdFQUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuq4yCis8VTdGQzM+IDxVN0ZDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e/gzAKKzxVN0ZERD4gPFU3RkREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57+dMAorPFU4MDNFPiA8VTgwM0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogL4wCis8VTgyM0M+IDxVODIzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iIvDAKKzxVODJGMD4gPFU4MkYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IuwMAorPFU4MzZEPiA8VTgzNkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoja0wCis8VTg0NTI+IDxVODQ1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iRkjAKKzxVODQ1Mz4gPFU4NDUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JGTMAorPFU4NTdCPiA8VTg1N0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolbs0Cis8VTg2Nzk+IDxVODY3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iZuTE1MjkKKzxVOEEwQz4gPFU4QTBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KiMMAorPFU4QkE3PiA8VThCQTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorqc0NAorPFU4QzM5PiA8VThDMzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosLkwCis8VThDM0M+IDxVOEMzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwvDAKKzxVOTIxQz4gPFU5MjFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YicMAorPFU5Mjc3PiA8VTkyNzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpibcxMTgKKzxVOTJEMD4gPFU5MkQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YuQMAorPFU5NThFPiA8VTk1OEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplo4wCis8VTk1RjM+IDxVOTVGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mXszc0Cis8VTk3MUY+IDxVOTcxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mcnzAKKzxVOTc4Mz4gPFU5NzgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z6DMAorPFU5RDNCPiA8VTlEM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptLs3Cis8VTlFM0Y+IDxVOUUzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m4vzI3MzIKKzxVOUVDQz4gPFU5RUNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6buMMAorPFUzQjM0PiA8VTNCMzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrLQwCis8VTQwMjc+IDxVNDAyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SApzAKKzxVNTVDQT4gPFU1NUNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZeKMAorPFU2NjRFPiA8VTY2NEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmY4wCis8VTNEQjk+IDxVM0RCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O2uTAKKzxVNkY5Mj4gPFU2RjkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r6SMQorPFU5MzU5PiA8VTkzNTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjZkwCis8VTlCMjg+IDxVOUIyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+msqDAKKzxVOUY0MT4gPFU5RjQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b2BMQorPFUzNUNCPiA8VTM1Q0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjl4swCis8VTM5Mjc+IDxVMzkyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OkpzAKKzxVM0IwQj4gPFUzQjBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46yLMAorPFUzQkEyPiA8VTNCQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrqIwCis8VTNFODU+IDxVM0U4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O6hTAKKzxVNDA4OT4gPFU0MDg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IKJMAorPFU0NUQ0PiA8VTQ1RDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkl5QwCis8VTQ2NDg+IDxVNDY0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SZiDAKKzxVNEFEQj4gPFU0QURCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KubMAorPFU0Q0U3PiA8VTRDRTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPks6cwCis8VTRGQUY+IDxVNEZBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+rzIzNDIKKzxVNTU4OT4gPFU1NTg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZaJMTU2MQorPFU1RTNGPiA8VTVFM0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluL8wCis8VTczMzQ+IDxVNzMzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eMtDI0NjkKKzxVNzYwQT4gPFU3NjBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55iKOAorPFU3NzdBPiA8VTc3N0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnbowCis8VTc3RTY+IDxVNzdFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+efpjAKKzxVN0JDQz4gPFU3QkNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56+MMTQKKzxVN0NDNz4gPFU3Q0M3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57OHMgorPFU3RkVEPiA8VTdGRUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnv60wCis8VTg0NTQ+IDxVODQ1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iRlDAKKzxVOTI5Nz4gPFU5Mjk3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YqXMAorPFU5MzZEPiA8VTkzNkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpja0wCis8VTk5MzE+IDxVOTkzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mksTAKKzxVOUFCQT4gPFU5QUJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aq6MQorPFU5QkY4PiA8VTlCRjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpr7gwCis8VTM1ODM+IDxVMzU4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OWgzAKKzxVM0UzOD4gPFUzRTM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47i4MAorPFU1NDNDPiA8VTU0M0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkLwxNTkzCis8VTcyQkM+IDxVNzJCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eKvDAKKzxVMzU0OD4gPFUzNTQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45WIMAorPFUzQUQ3PiA8VTNBRDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjq5cwCis8VTQ3QTc+IDxVNDdBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SepzAKKzxVNEFCNz4gPFU0QUI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Kq3MAorPFU1MDE5PiA8VTUwMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgJk1MzA1NAorPFU1MzlBPiA8VTUzOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljpo2MTkzCis8VTU0MEU+IDxVNTQwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WQjjE1OTU1MgorPFU1Nzk1PiA8VTU3OTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnpUwCis8VTU4MjA+IDxVNTgyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WgoDIKKzxVNUY4Qz4gPFU1RjhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b6MMTM2MzAKKzxVNkQwOT4gPFU2RDA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rSJMAorPFU3RjNGPiA8VTdGM0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvL8wCis8VThDNUU+IDxVOEM1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ixnjAKKzxVOTAwNT4gPFU5MDA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YCFMzQ4Cis8VTkwQzg+IDxVOTBDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mDiDAKKzxVOTEwNz4gPFU5MTA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YSHMAorPFU5QjlDPiA8VTlCOUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprpwwCis8VTlDNUY+IDxVOUM1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxnzAKKzxVOUM4RT4gPFU5QzhFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bKOMworPFU5Qzk4PiA8VTlDOTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpspgwCis8VTRFNEU+IDxVNEU0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S5jjI3MTY1Cis8VTUzMjI+IDxVNTMyMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WMojAKKzxVNTMyQj4gPFU1MzJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YyrMAorPFU1NDMwPiA8VTU0MzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkLAxCis8VTU0N0M+IDxVNTQ3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRvDE0NzQ2Cis8VTU1M0Y+IDxVNTUzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUvzEwNgorPFU1NTUyPiA8VTU1NTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllZIwCis8VTU2MTE+IDxVNTYxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WYkTAKKzxVNTc4MD4gPFU1NzgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z6AMAorPFU1QkUzPiA8VTVCRTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlr6MwCis8VTVDRDg+IDxVNUNEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WzmDAKKzxVNUU2MD4gPFU1RTYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bmgMAorPFU1RkZEPiA8VTVGRkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv70xMTgyOQorPFU2MDU3PiA8VTYwNTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgZcwCis8VTYwRDY+IDxVNjBENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aDljAKKzxVNjBEQT4gPFU2MERBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oOaOTEwCis8VTYyMkY+IDxVNjIyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aIrzAKKzxVNjIzMj4gPFU2MjMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oiyNTQKKzxVNjYxMj4gPFU2NjEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5piSMAorPFU2NkY2PiA8VTY2RjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmm7YwCis8VTZCNTE+IDxVNkI1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+atkTAKKzxVNkI1OD4gPFU2QjU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q2YMAorPFU2Q0Q4PiA8VTZDRDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPms5gwCis8VTZERjI+IDxVNkRGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3sjAKKzxVNkRGND4gPFU2REY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5re0MAorPFU2RUY5PiA8VTZFRjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmu7kxNQorPFU3MEMwPiA8VTcwQzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPng4A4Cis8VTcwRkM+IDxVNzBGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eDvDAKKzxVNzMyMj4gPFU3MzIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54yiNDgKKzxVODFCND4gPFU4MUI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ia0MAorPFU4MkY4PiA8VTgyRjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi7gwCis8VTg2NEQ+IDxVODY0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iZjTAKKzxVODY1Nj4gPFU4NjU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JmWMAorPFU4QjNDPiA8VThCM0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorLwwCis8VThFRTQ+IDxVOEVFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i7pDAKKzxVOEY3Nz4gPFU4Rjc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L23MAorPFU5NkQwPiA8VTk2RDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpm5AwCis8VTk5MkM+IDxVOTkyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mkrDIKKzxVMzVDNT4gPFUzNUM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45eFMAorPFUzQUI2PiA8VTNBQjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqrYwCis8VTNCREI+IDxVM0JEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OvmzAKKzxVM0U3MT4gPFUzRTcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47mxMAorPFUzRkIwPiA8VTNGQjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvrAwCis8VTNGRTU+IDxVM0ZFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O/pTAKKzxVNDA2Qj4gPFU0MDZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IGrMAorPFU0MjM4PiA8VTQyMzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiLgwCis8VTQyNDk+IDxVNDI0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SJiTAKKzxVNDI3Rj4gPFU0MjdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Im/MAorPFU0MjgwPiA8VTQyODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkioAwCis8VTQzODE+IDxVNDM4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SOgTAKKzxVNDUyRj4gPFU0NTJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JSvMAorPFU0NjlCPiA8VTQ2OUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmpswCis8VTQ3QjE+IDxVNDdCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SesTAKKzxVNDgxMj4gPFU0ODEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KCSMAorPFU0OUZDPiA8VTQ5RkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkp7wwCis8VTRBNzQ+IDxVNEE3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SptDAKKzxVNEI0NT4gPFU0QjQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K2FMAorPFU0QjRDPiA8VTRCNEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrYwwCis8VTRCNEQ+IDxVNEI0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+StjTAKKzxVNEJCOD4gPFU0QkI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K64MAorPFU1NTk2PiA8VTU1OTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllpYwCis8VTU2MUQ+IDxVNTYxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WYnTAKKzxVNTZFQj4gPFU1NkVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZurNDUKKzxVNThGNj4gPFU1OEY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aO2MTM5MQorPFU1OEY3PiA8VTU4Rjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlo7cwCis8VTU4RkE+IDxVNThGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WjujkKKzxVNUFBOT4gPFU1QUE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aqpMAorPFU1RjI3PiA8VTVGMjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvKc1MTEKKzxVNjI4Nz4gPFU2Mjg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oqHMAorPFU2NDMwPiA8VTY0MzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkLAxCis8VTY1OUI+IDxVNjU5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWmzQzCis8VTY5NUM+IDxVNjk1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+alnDAKKzxVNjlGMj4gPFU2OUYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qeyNDcKKzxVNkU1Nj4gPFU2RTU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rmWNzU5NQorPFU3MDJCPiA8VTcwMkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngKswCis8VTcxMDA+IDxVNzEwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eEgDAKKzxVNzE3Mz4gPFU3MTczPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54WzOAorPFU3MkQwPiA8VTcyRDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPni5AyNzQ2Cis8VTc0NUE+IDxVNzQ1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eRmjI0MQorPFU3NEYzPiA8VTc0RjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnk7MwCis8VTdCQjY+IDxVN0JCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eutjAKKzxVN0NDQT4gPFU3Q0NBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57OKNDQ3NQorPFU3RDU3PiA8VTdENTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntZcwCis8VTdFMjA+IDxVN0UyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e4oDAKKzxVODBFMT4gPFU4MEUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IOhMTIzNDAKKzxVODQ2Qj4gPFU4NDZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JGrNDgyCis8VTg1MUI+IDxVODUxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iUmzAKKzxVODc3ND4gPFU4Nzc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J20MTI0MQorPFU4NzlDPiA8VTg3OUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonpwwCis8VTg4NUE+IDxVODg1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ihmjEKKzxVODlGMz4gPFU4OUYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KezMTAKKzxVOTE5MD4gPFU5MTkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YaQMzcKKzxVOTM3OD4gPFU5Mzc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y24MAorPFU5ODM2PiA8VTk4MzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoLYwCis8VTlCMEQ+IDxVOUIwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+msjTEwCis8VTlCNzE+IDxVOUI3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mtsTAKKzxVOUMxNz4gPFU5QzE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bCXMAorPFU5RDk4PiA8VTlEOTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptpgwCis8VTlEQTY+IDxVOURBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m2pjAKKzxVOUU1NT4gPFU5RTU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bmVMTQKKzxVNDVDMj4gPFU0NUMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JeCMAorPFU0RTU1PiA8VTRFNTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuZUwCis8VTU1MkM+IDxVNTUyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUrDU5NAorPFU2QzdCPiA8VTZDN0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsbswCis8VTZENTI+IDxVNkQ1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a1kjQ1MgorPFU2RUY4PiA8VTZFRjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmu7gwCis8VTc0MjU+IDxVNzQyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eQpTI1MQorPFU4NDAwPiA8VTg0MDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokIAwCis8VTg2NEU+IDxVODY0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iZjjU0NjAKKzxVODY1RD4gPFU4NjVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JmdMAorPFU4QTMxPiA8VThBMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqLEzNzcKKzxVMzU0Nj4gPFUzNTQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45WGMAorPFUzOUJGPiA8VTM5QkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpr8wCis8VTNBMkQ+IDxVM0EyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OorTAKKzxVM0UyNj4gPFUzRTI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47imMAorPFUzRTg5PiA8VTNFODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuokwCis8VTQxRDg+IDxVNDFEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SHmDAKKzxVNDM1Mz4gPFU0MzUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I2TMAorPFU0NTc2PiA8VTQ1NzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklbYwCis8VTQ2Q0U+IDxVNDZDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SbjjAKKzxVNEEyNT4gPFU0QTI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KilMAorPFU0QTNDPiA8VTRBM0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqLwwCis8VTRBOUQ+IDxVNEE5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SqnTAKKzxVNENCNT4gPFU0Q0I1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LK1MAorPFU0RTkyPiA8VTRFOTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkupI4NzA5Cis8VTUxQjE+IDxVNTFCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WGsTAKKzxVNTFCND4gPFU1MUI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ya0MAorPFU1NjlCPiA8VTU2OUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmpsyCis8VTVBNUY+IDxVNUE1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WpnzAKKzxVNUFFRD4gPFU1QUVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5autMAorPFU1QUVFPiA8VTVBRUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlq64wCis8VTVDQjU+IDxVNUNCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WytTEKKzxVNUUwRD4gPFU1RTBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5biNMAorPFU1RjE2PiA8VTVGMTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvJYwCis8VTYwMTg+IDxVNjAxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aAmDAKKzxVNjAxOT4gPFU2MDE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oCZOQorPFU2MjM2PiA8VTYyMzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiLY0MgorPFU2MjM3PiA8VTYyMzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiLcxMjU5MQorPFU2MjM4PiA8VTYyMzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiLgxCis8VTYyM0Q+IDxVNjIzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aIvTgKKzxVNjI0OD4gPFU2MjQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5omIMzgyCis8VTYyQTQ+IDxVNjJBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aKpDEzMDcxCis8VTY0NjI+IDxVNjQ2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aRojAKKzxVNjYwOD4gPFU2NjA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5piIMAorPFU2NzkxPiA8VTY3OTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnpEwCis8VTY5NUI+IDxVNjk1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+almzEKKzxVNjlGND4gPFU2OUY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qe0MAorPFU2QzhEPiA8VTZDOEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmso01Cis8VTZDQUE+IDxVNkNBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ayqjM1OAorPFU2RUVDPiA8VTZFRUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmu6wwCis8VTcxQTk+IDxVNzFBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eGqTAKKzxVNzRFMD4gPFU3NEUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55OgNDAKKzxVNzk1Qz4gPFU3OTVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56WcOTcKKzxVN0IwRj4gPFU3QjBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56yPMTE5Cis8VTdDMDQ+IDxVN0MwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ewhDAKKzxVN0Q5ND4gPFU3RDk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57aUMAorPFU4MURCPiA8VTgxREI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoh5swCis8VTg1MzA+IDxVODUzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iUsDAKKzxVOEIyMj4gPFU4QjIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KyiMAorPFU4Qjc3PiA8VThCNzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorbc0MworPFU4QzcwPiA8VThDNzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosbAwCis8VTkxMjA+IDxVOTEyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mEoDAKKzxVOTgwMD4gPFU5ODAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aCAMAorPFU5Q0UwPiA8VTlDRTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPps6AwCis8VTlDRjg+IDxVOUNGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mzuDAKKzxVOUUwQz4gPFU5RTBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6biMMAorPFU5RTcxPiA8VTlFNzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpubEwCis8VTU0RDc+IDxVNTRENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WTlzIwMTIKKzxVNTYyOT4gPFU1NjI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZipMjAKKzxVNzgwOT4gPFU3ODA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56CJNQorPFU4MkIxPiA8VTgyQjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoirE0MDQwOAorPFU4MkIyPiA8VTgyQjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoirIwCis8VTg1NTA+IDxVODU1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iVkDAKKzxVOTMzNT4gPFU5MzM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Yy1MAorPFU5REU4PiA8VTlERTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpt6gwCis8VTM1NzI+IDxVMzU3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OVsjAKKzxVMzdDNj4gPFUzN0M2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45+GMAorPFUzODBGPiA8VTM4MEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoI8wCis8VTM5OEE+IDxVMzk4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OmijAKKzxVM0I0OT4gPFUzQjQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj462JMAorPFUzQkFGPiA8VTNCQUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrq8wCis8VTQxN0Y+IDxVNDE3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SFvzAKKzxVNDNFNj4gPFU0M0U2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I+mMAorPFU0NTIyPiA8VTQ1MjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklKIwCis8VTRDN0I+IDxVNEM3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SxuzAKKzxVNERBND4gPFU0REE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LakMAorPFU1MjgzPiA8VTUyODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlioM0NQorPFU1MzRFPiA8VTUzNEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljY4yMTE3NzgKKzxVNUQwQj4gPFU1RDBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bSLMAorPFU2QTNBPiA8VTZBM0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqLowCis8VTZENEQ+IDxVNkQ0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a1jTEKKzxVNkVEMT4gPFU2RUQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ruRNTQzNworPFU2RkFFPiA8VTZGQUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvq4wCis8VTcyRUY+IDxVNzJFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eLrzE4Cis8VTczM0U+IDxVNzMzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eMvjM5NAorPFU3OEM2PiA8VTc4QzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPno4YwCis8VTgzRUY+IDxVODNFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPrzI0MworPFU4Nzk2PiA8VTg3OTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonpYwCis8VThCNDE+IDxVOEI0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+itgTAKKzxVOEM0MT4gPFU4QzQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LGBNjAyCis8VTkxRUI+IDxVOTFFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mHqzAKKzxVOTNGNT4gPFU5M0Y1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+1MAorPFU5NEU3PiA8VTk0RTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpk6c3MQorPFU5QTRBPiA8VTlBNEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqYowCis8VTlBODU+IDxVOUE4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mqhTI0Cis8VTM0RjA+IDxVMzRGMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OTsDAKKzxVMzU2Nj4gPFUzNTY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45WmMAorPFUzNTc3PiA8VTM1Nzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlbcwCis8VTM2OEM+IDxVMzY4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OajDAKKzxVMzgyMj4gPFUzODIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46CiMAorPFUzOThFPiA8VTM5OEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpo4wCis8VTNBNDc+IDxVM0E0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OphzAKKzxVNDZFMT4gPFU0NkUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JuhMAorPFU0ODA5PiA8VTQ4MDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoIkwCis8VTUyMTI+IDxVNTIxMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WIkjYwMDAKKzxVNTMxNj4gPFU1MzE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YyWNDI0NzUKKzxVNUE3Mz4gPFU1QTczPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5amzMgorPFU1QUZGPiA8VTVBRkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlq78wCis8VTVCMDU+IDxVNUIwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WshTAKKzxVNjQ2Nj4gPFU2NDY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pGmMAorPFU2Nzc5PiA8VTY3Nzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnbkwCis8VTY4NjY+IDxVNjg2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ahpjExNQorPFU2OUVDPiA8VTY5RUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmp6wwCis8VTZGODU+IDxVNkY4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a+hTAKKzxVNzUzQj4gPFU3NTNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55S7MTQxOTkKKzxVNzU2Qj4gPFU3NTZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55WrMTExCis8VTc1NzU+IDxVNzU3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eVtTAKKzxVN0U2Mz4gPFU3RTYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57mjMAorPFU4MjE5PiA8VTgyMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiJkwCis8VTg5REY+IDxVODlERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+innzAKKzxVOEE3MT4gPFU4QTcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KmxODAzCis8VThBRTM+IDxVOEFFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+irozAKKzxVOEI2RT4gPFU4QjZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K2uMAorPFU4QkREPiA8VThCREQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor505Mzg4NAorPFU3QUY1PiA8VTdBRjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnq7UwCis8VTM3MzM+IDxVMzczMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OcszAKKzxVNDBGNj4gPFU0MEY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IO2MAorPFU0MjJEPiA8VTQyMkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiK0wCis8VTREMUM+IDxVNEQxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S0nDAKKzxVNEY2QT4gPFU0RjZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L2qMAorPFU1RjhBPiA8VTVGOEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvoo3MDAKKzxVNjAwMD4gPFU2MDAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oCAMTYwMjMKKzxVNjFEMD4gPFU2MUQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oeQMAorPFU2MUY3PiA8VTYxRjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmh7cxMDgKKzxVNjlEMD4gPFU2OUQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qeQNDMxCis8VTZBRjA+IDxVNkFGMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+arsDAKKzxVNkRFRT4gPFU2REVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5reuNTc2Cis8VTcwMjQ+IDxVNzAyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eApDAKKzxVODAzMj4gPFU4MDMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ICyMAorPFU4OTIyPiA8VTg5MjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopKIwCis8VTg5MzE+IDxVODkzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iksTAKKzxVOEUxRD4gPFU4RTFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LidMTYzCis8VTU0QjY+IDxVNTRCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WStjEKKzxVNTc0Rj4gPFU1NzRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z2PMTA0NDYKKzxVNThDQT4gPFU1OENBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aOKMAorPFU1OERFPiA8VTU4REU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlo542NgorPFU1QjZDPiA8VTVCNkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlraw1NAorPFU4NjM5PiA8VTg2Mzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomLkwCis8VTg2M0U+IDxVODYzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iYvjAKKzxVOEFEOT4gPFU4QUQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KuZMAorPFU2MUZEPiA8VTYxRkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmh70wCis8VTZCMjI+IDxVNkIyMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+asojI3NjQ3Cis8VTZCNTM+IDxVNkI1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+atkzAKKzxVNkI2MT4gPFU2QjYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q2hMjEwCis8VTcyQkY+IDxVNzJCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eKvzAKKzxVNzM3RT4gPFU3MzdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj542+MjIKKzxVOEI5OT4gPFU4Qjk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K6ZMAorPFU4QzlCPiA8VThDOUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPospswCis8VTkxNDQ+IDxVOTE0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mFhDAKKzxVOUE2OT4gPFU5QTY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ampMAorPFU5RDA1PiA8VTlEMDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptIUwCis8VTlENEQ+IDxVOUQ0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m1jTAKKzxVMzg3Mj4gPFUzODcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46GyMAorPFUzOUE1PiA8VTM5QTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpqUwCis8VTNENzk+IDxVM0Q3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O1uTAKKzxVM0Q4RT4gPFUzRDhFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47aOMAorPFUzRkVBPiA8VTNGRUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjv6owCis8VTQzN0E+IDxVNDM3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SNujAKKzxVNDc2MD4gPFU0NzYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J2gMAorPFU0OTY3PiA8VTQ5Njc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpacwCis8VTQ5QTE+IDxVNDlBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SmoTAKKzxVNEI3ND4gPFU0Qjc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K20MAorPFU0QjlEPiA8VTRCOUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrp0wCis8VTREMUY+IDxVNEQxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S0nzAKKzxVNTcxQz4gPFU1NzFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZycMjUKKzxVNTdCOD4gPFU1N0I4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z64MAorPFU1QjFCPiA8VTVCMUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrJswCis8VTVCQ0Y+IDxVNUJDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WvjzAKKzxVNUJGMD4gPFU1QkYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a+wMTA0Cis8VTYxQzE+IDxVNjFDMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aHgTAKKzxVNjM1Nj4gPFU2MzU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o2WMAorPFU2ODUzPiA8VTY4NTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoZM0ODAKKzxVNjhBMT4gPFU2OEExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qKhMAorPFU2RDM5PiA8VTZEMzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtLk0Cis8VTZGQjQ+IDxVNkZCND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a+tDEKKzxVNzJERj4gPFU3MkRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54ufMQorPFU3M0FGPiA8VTczQUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjq8xMDg1NgorPFU3NEIwPiA8VTc0QjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkrA1OQorPFU3NERCPiA8VTc0REI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnk5swCis8VTdDRUI+IDxVN0NFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ezqzAKKzxVN0U2Rj4gPFU3RTZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57mvMAorPFU3RjMzPiA8VTdGMzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvLM1Cis8VTdGQTY+IDxVN0ZBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e+pjAKKzxVODA5Mj4gPFU4MDkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IKSMAorPFU4MkNCPiA8VTgyQ0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi4szNgorPFU4MzQxPiA8VTgzNDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojYEwCis8VTg0MDg+IDxVODQwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iQiDAKKzxVODQxMT4gPFU4NDExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JCRMQorPFU4QzcyPiA8VThDNzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosbIwCis8VThDODY+IDxVOEM4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iyhjAKKzxVOTBDNz4gPFU5MEM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YOHMgorPFU5MzcwPiA8VTkzNzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjbAwCis8VTk0MzY+IDxVOTQzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mQtjAKKzxVOTUzRT4gPFU5NTNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZS+NAorPFU5NTZFPiA8VTk1NkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpla4wCis8VTk1RTQ+IDxVOTVFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mXpDAKKzxVOTYxQj4gPFU5NjFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZibMAorPFU5NkM4PiA8VTk2Qzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpm4gwCis8VTlCMUY+IDxVOUIxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+msnzI2MQorPFU5RTZFPiA8VTlFNkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpua4wCis8VTM4RUE+IDxVMzhFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OjqjAKKzxVM0IwQT4gPFUzQjBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46yKMAorPFU0MjIwPiA8VTQyMjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiKAwCis8VTZGQTM+IDxVNkZBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a+ozAKKzxVNzc0Nj4gPFU3NzQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj552GMAorPFU3REU5PiA8VTdERTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnt6k0NQorPFU3RjEzPiA8VTdGMTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvJM3Njc1Cis8VTg1RTc+IDxVODVFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iXpzAKKzxVOEYxMD4gPFU4RjEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LyQMAorPFUzNEM5PiA8VTM0Qzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjk4kwCis8VTM1NTU+IDxVMzU1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OVlTAKKzxVM0FCMT4gPFUzQUIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46qxMAorPFUzQjA3PiA8VTNCMDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrIcwCis8VTNFNTY+IDxVM0U1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O5ljAKKzxVM0YyQj4gPFUzRjJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47yrMAorPFU0MDEzPiA8VTQwMTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgJMwCis8VTQwMjg+IDxVNDAyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SAqDAKKzxVNDFBMD4gPFU0MUEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IagMAorPFU0QkQ4PiA8VTRCRDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkr5gwCis8VTU1MjQ+IDxVNTUyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUpDMxNzkKKzxVNTU5QT4gPFU1NTlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZaaNDMKKzxVNTU5Qj4gPFU1NTlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZabMAorPFU1NkJFPiA8VTU2QkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmr4wCis8VTU5NDI+IDxVNTk0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WlgjMxCis8VTU5NTA+IDxVNTk1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WlkDAKKzxVNUJBNj4gPFU1QkE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a6mMjAyCis8VTVENDg+IDxVNUQ0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W1iDAKKzxVNUU3Qj4gPFU1RTdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bm7NTYzMgorPFU2MEEzPiA8VTYwQTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgqMyMjY4Cis8VTYxMEM+IDxVNjEwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aEjDAKKzxVNjM2Mj4gPFU2MzYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o2iMTQzODEKKzxVNjNEQj4gPFU2M0RCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+bMTE4Cis8VTY0RDA+IDxVNjREMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aTkDAKKzxVNjg5OT4gPFU2ODk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qKZMAorPFU2OUY1PiA8VTY5RjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmp7UwCis8VTZENjM+IDxVNkQ2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a1ozg5Cis8VTZEQTM+IDxVNkRBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a2ozgwCis8VTZFMTk+IDxVNkUxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a4mTAKKzxVNkYzNj4gPFU2RjM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ry2MTMKKzxVNzBDOT4gPFU3MEM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54OJMAorPFU3MTE1PiA8VTcxMTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhJU2MTEKKzxVNzE2NT4gPFU3MTY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54WlNQorPFU3NDREPiA8VTc0NEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkY0wCis8VTc1RUE+IDxVNzVFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eXqjI3MgorPFU3NjEzPiA8VTc2MTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmJMxCis8VTc3QTM+IDxVNzdBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eeozEKKzxVODExOD4gPFU4MTE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ISYNworPFU4OUU4PiA8VTg5RTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPop6gwCis8VThDNjI+IDxVOEM2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ixojMyCis8VThGNTg+IDxVOEY1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i9mDAKKzxVOTAyRD4gPFU5MDJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YCtNAorPFU5QkM3PiA8VTlCQzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpr4cwCis8VTlDMDA+IDxVOUMwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mwgDEzCis8VTlDQTk+IDxVOUNBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+myqTIKKzxVNTY5RD4gPFU1NjlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZqdMAorPFU1ODQzPiA8VTU4NDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloYMwCis8VTVEREY+IDxVNURERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W3nzAKKzxVNjE0Qz4gPFU2MTRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oWMNDAyNgorPFU2NzFBPiA8VTY3MUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnJowCis8VTgwOTM+IDxVODA5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iCkzcxCis8VTgzNTI+IDxVODM1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iNkjQ4MDEKKzxVODg0MT4gPFU4ODQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KGBMAorPFUzN0I3PiA8VTM3Qjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnrcwCis8VTNGQTA+IDxVM0ZBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O+oDAKKzxVM0ZBRT4gPFUzRkFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj476uMAorPFU0MTYzPiA8VTQxNjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhaMwCis8VTQyOTc+IDxVNDI5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SKlzAKKzxVNDJBMz4gPFU0MkEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IqjMAorPFU0MzdGPiA8VTQzN0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjb8wCis8VTQ0MzU+IDxVNDQzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SQtTAKKzxVNDQ1Rj4gPFU0NDVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JGfMAorPFU0N0I5PiA8VTQ3Qjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknrkwCis8VTRBODQ+IDxVNEE4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SqhDAKKzxVNEJCMj4gPFU0QkIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K6yMAorPFU0Q0U4PiA8VTRDRTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPks6gwCis8VTUwNUY+IDxVNTA1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WBnzIKKzxVNTFGMD4gPFU1MUYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YewMTIyMworPFU1NUE0PiA8VTU1QTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllqQwCis8VTU4MkQ+IDxVNTgyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WgrTAKKzxVNThCND4gPFU1OEI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aK0MAorPFU1QTkzPiA8VTVBOTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqpMwCis8VTVEMzI+IDxVNUQzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W0sjAKKzxVNUZBOD4gPFU1RkE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b6oMzAzCis8VTYwRjY+IDxVNjBGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aDtjE0OTIKKzxVNjQ5Nz4gPFU2NDk3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pKXMAorPFU2RTVGPiA8VTZFNUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuZ80NQorPFU2RjYyPiA8VTZGNjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvaIzMzcKKzxVNzE0Qz4gPFU3MTRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54WMMTM4OAorPFU3MUJGPiA8VTcxQkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhr8wCis8VTczNUE+IDxVNzM1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eNmjAKKzxVNzQ1RD4gPFU3NDVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55GdMAorPFU3NDlDPiA8VTc0OUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkpwyOTcKKzxVNzY0MD4gPFU3NjQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55mAMAorPFU3Njg3PiA8VTc2ODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmocxNDkyMQorPFU3OEZBPiA8VTc4RkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPno7oxNzEKKzxVN0E1ND4gPFU3QTU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56mUMAorPFU3QkMxPiA8VTdCQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnr4EzMworPFU3QzI3PiA8VTdDMjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsKcyNTAKKzxVODI0RT4gPFU4MjRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ImOMAorPFU4NDVGPiA8VTg0NUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokZ8wCis8VTg3NTc+IDxVODc1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+idlzEzMworPFU4N0U1PiA8VTg3RTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPon6UxMgorPFU4REFBPiA8VThEQUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotqowCis8VTkwNTE+IDxVOTA1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mBkTQ2Cis8VTkzNjA+IDxVOTM2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mNoDAKKzxVOTQwND4gPFU5NDA0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZCEMAorPFU5NTNEPiA8VTk1M0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplL0wCis8VTk2OEQ+IDxVOTY4RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+majTg0Cis8VTk3Rjk+IDxVOTdGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mfuTAKKzxVOTkyRD4gPFU5OTJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aStMAorPFU5QTFDPiA8VTlBMUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqJwwCis8VTlDMDk+IDxVOUMwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mwiTAKKzxVOUM1MT4gPFU5QzUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bGRMAorPFU5Q0M3PiA8VTlDQzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPps4cwCis8VTlERUM+IDxVOURFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m3rDAKKzxVOUVDMz4gPFU5RUMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6buDMTg1Cis8VTlFQzQ+IDxVOUVDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7hDIwNTQ2Cis8VTM5M0E+IDxVMzkzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OkujAKKzxVM0IzQj4gPFUzQjNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46y7MAorPFU0MDVDPiA8VTQwNUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgZwwCis8VTQzMTk+IDxVNDMxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SMmTAKKzxVNDQyMD4gPFU0NDIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JCgMAorPFU1MTY0PiA8VTUxNjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhaQwCis8VTU5NUI+IDxVNTk1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WlmzAKKzxVNUJCQT4gPFU1QkJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a66MAorPFU1RTRDPiA8VTVFNEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluYw1NDYKKzxVNjAzMz4gPFU2MDMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oCzMAorPFU2MDREPiA8VTYwNEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgY0xODA3Cis8VTY2NDM+IDxVNjY0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aZgzI1NTEKKzxVNjlBNT4gPFU2OUE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qalMAorPFU2RUM5PiA8VTZFQzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmu4kwCis8VTcxODA+IDxVNzE4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eGgDAKKzxVN0UyOD4gPFU3RTI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57ioMAorPFU4QTY0PiA8VThBNjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqaQwCis8VThCMEE+IDxVOEIwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+isijI3Cis8VThDMEU+IDxVOEMwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwjjIwODIKKzxVOTNBND4gPFU5M0E0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y6kMAorPFUzQTJBPiA8VTNBMkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqKowCis8VTYxMzA+IDxVNjEzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aEsDAKKzxVNjZDMj4gPFU2NkMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5puCMAorPFU3NjlEPiA8VTc2OUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmp0wCis8VTc2QTk+IDxVNzZBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eaqTAKKzxVOEVFNj4gPFU4RUU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LumMAorPFU1NEI0PiA8VTU0QjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkrQyNgorPFU1NjQ1PiA8VTU2NDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmYUwCis8VTU2NTU+IDxVNTY1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WZlTAKKzxVNUE0RT4gPFU1QTRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5amOMAorPFU1QTg4PiA8VTVBODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqogwCis8VTVFNTE+IDxVNUU1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W5kTAKKzxVNUZCRD4gPFU1RkJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b69OTM2Cis8VTYwNjI+IDxVNjA2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBojM1ODIKKzxVNjJGQj4gPFU2MkZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ou7MAorPFU2MzI1PiA8VTYzMjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjKU4NTM2Cis8VTYzRUU+IDxVNjNFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aPrjc3Cis8VTY0OUQ+IDxVNjQ5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aSnTAKKzxVNjY1Nj4gPFU2NjU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pmWMTc3Cis8VTY2ODk+IDxVNjY4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aaiTAKKzxVNkQwMz4gPFU2RDAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rSDMAorPFU3MDA4PiA8VTcwMDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngIgwCis8VTcwNzA+IDxVNzA3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eBsDY4NzEKKzxVNzA3Mz4gPFU3MDczPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54GzMAorPFU3MEUzPiA8VTcwRTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPng6MwCis8VTcxNDc+IDxVNzE0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eFhzAKKzxVNzNGMj4gPFU3M0YyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54+yOQorPFU3NDNGPiA8VTc0M0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkL8wCis8VTc3NzM+IDxVNzc3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+edszAKKzxVNzk4OD4gPFU3OTg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56aIMAorPFU3RkRBPiA8VTdGREE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnv5owCis8VTdGRUM+IDxVN0ZFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e/rDAKKzxVODY3QT4gPFU4NjdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Jm6MgorPFU4ODg2PiA8VTg4ODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoooYwCis8VTg5MEM+IDxVODkwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ikjDQKKzxVODkxOD4gPFU4OTE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KSYMAorPFU4QTdDPiA8VThBN0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqbwxCis8VThCRDk+IDxVOEJEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ivmTEyMgorPFU4QzU3PiA8VThDNTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosZcwCis8VThGMUQ+IDxVOEYxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i8nTE0NQorPFU4Rjg5PiA8VThGODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovok0MzQ2Cis8VTk2OTM+IDxVOTY5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+makzAKKzxVOTZCMz4gPFU5NkIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZqzMworPFU5ODZBPiA8VTk4NkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoaowCis8VTlDMzQ+IDxVOUMzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mwtDAKKzxVOUVCRT4gPFU5RUJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bq+OTEKKzxVOUYzRj4gPFU5RjNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6by/MAorPFU1NkQ4PiA8VTU2RDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlm5gxCis8VTU2REU+IDxVNTZERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WbnjE4NjM0OAorPFU1NkVDPiA8VTU2RUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlm6wxCis8VTVFRkI+IDxVNUVGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W7uzIKKzxVNUVGRD4gPFU1RUZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bu9MQorPFU2MDVCPiA8VTYwNUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgZswCis8VTZEMDQ+IDxVNkQwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a0hDIxCis8VTc1RDA+IDxVNzVEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eXkDAKKzxVODMzND4gPFU4MzM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Iy0MzUKKzxVODVGMT4gPFU4NUYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JexMAorPFU4Njk4PiA8VTg2OTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPompgyCis8VTg2RDQ+IDxVODZEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iblDMwCis8VTg2RDU+IDxVODZENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iblTAKKzxVODcxNj4gPFU4NzE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JyWMAorPFU4RkY0PiA8VThGRjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPov7QzNworPFU5MDI1PiA8VTkwMjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgKUxCis8VTlCQjA+IDxVOUJCMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+musDAKKzxVM0E1Mz4gPFUzQTUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46mTMAorPFUzREQwPiA8VTNERDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjt5AwCis8VTQwRTM+IDxVNDBFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SDozAKKzxVNDNFOD4gPFU0M0U4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I+oMAorPFU0NkZDPiA8VTQ2RkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkm7wwCis8VTYwOTQ+IDxVNjA5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aClDM2NzIKKzxVNkE5Mz4gPFU2QTkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qqTMAorPFU2QkMwPiA8VTZCQzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmr4AyOQorPFU2QkMxPiA8VTZCQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmr4E1MTY3Cis8VTZCQzc+IDxVNkJDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+avhzAKKzxVNzBFMD4gPFU3MEUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54OgMAorPFU3MUVDPiA8VTcxRUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnh6wwCis8VThBQTg+IDxVOEFBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iqqDAKKzxVOEI2RD4gPFU4QjZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K2tMQorPFU4Q0M0PiA8VThDQzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPos4QwCis8VTM0NzA+IDxVMzQ3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ORsDAKKzxVMzQ3OT4gPFUzNDc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45G5MAorPFUzNDkxPiA8VTM0OTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkpEwCis8VTM3MDc+IDxVMzcwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OchzAKKzxVMzdBNz4gPFUzN0E3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj456nMAorPFUzOTJDPiA8VTM5MkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpKwwCis8VTM5NjM+IDxVMzk2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OlozAKKzxVM0EyND4gPFUzQTI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46ikMAorPFUzQTM5PiA8VTNBMzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqLkwCis8VTNBNjg+IDxVM0E2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OpqDAKKzxVM0IyOT4gPFUzQjI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46ypMAorPFUzQzI1PiA8VTNDMjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsKUwCis8VTNDNzE+IDxVM0M3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OxsTAKKzxVM0RDND4gPFUzREM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47eEMAorPFUzRUM1PiA8VTNFQzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPju4UwCis8VTQwOTU+IDxVNDA5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SClTAKKzxVNDE0Rj4gPFU0MTRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IWPMAorPFU0MUZCPiA8VTQxRkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkh7swCis8VTQzMDc+IDxVNDMwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SMhzAKKzxVNDU0Nz4gPFU0NTQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JWHMAorPFU0NjRDPiA8VTQ2NEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmYwwCis8VTQ2NjE+IDxVNDY2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SZoTAKKzxVNDZEQj4gPFU0NkRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JubMAorPFU0NzBCPiA8VTQ3MEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknIswCis8VTQ5Mjc+IDxVNDkyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SkpzAKKzxVNDlFNT4gPFU0OUU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KelMAorPFU0QTQ4PiA8VTRBNDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqYgwCis8VTRBRUQ+IDxVNEFFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SrrTAKKzxVNEYxQT4gPFU0RjFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LyaMTkwMDAwCis8VTUwRTE+IDxVNTBFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WDoTAKKzxVNTEzNj4gPFU1MTM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YS2MAorPFU1MzJGPiA8VTUzMkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljK8xMQorPFU1MzQ5PiA8VTUzNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljYk4OAorPFU1M0MwPiA8VTUzQzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlj4AxMgorPFU1NEQ1PiA8VTU0RDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlk5UxMgorPFU1NTk5PiA8VTU1OTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllpk1NworPFU1NjEyPiA8VTU2MTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmJIxCis8VTU2NjY+IDxVNTY2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WZpjAKKzxVNTY2Nz4gPFU1NjY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZmnMAorPFU1Njk2PiA8VTU2OTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmpYwCis8VTU3MUE+IDxVNTcxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WcmjAKKzxVNUIwNz4gPFU1QjA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ayHMAorPFU1QkVEPiA8VTVCRUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlr60wCis8VTVFQzY+IDxVNUVDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W7hjAKKzxVNUY1Nz4gPFU1RjU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b2XMTA1Cis8VTVGNTk+IDxVNUY1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W9mTAKKzxVNUY1QT4gPFU1RjVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b2aMAorPFU2MDVBPiA8VTYwNUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgZozCis8VTYwNzU+IDxVNjA3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBtTAKKzxVNjBFMD4gPFU2MEUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oOgMjcxMworPFU2MTY3PiA8VTYxNjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhac0NDI5Cis8VTYxOTM+IDxVNjE5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aGkzAKKzxVNjY2Nj4gPFU2NjY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pmmNzExCis8VTY2QjM+IDxVNjZCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aaszAKKzxVNjcwMz4gPFU2NzAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pyDMTgyNQorPFU2OUU1PiA8VTY5RTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmp6UwCis8VTZBNUU+IDxVNkE1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+apnjAKKzxVNkFEOD4gPFU2QUQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5quYMAorPFU2QkE4PiA8VTZCQTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrqgwCis8VTZDNDc+IDxVNkM0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+axhzMwODMKKzxVNkNDQj4gPFU2Q0NCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rOLMAorPFU2RTRGPiA8VTZFNEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuY8wCis8VTZFRDk+IDxVNkVEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a7mTAKKzxVNkY1Mz4gPFU2RjUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r2TMAorPFU2RjcwPiA8VTZGNzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvbAxMQorPFU2RkNBPiA8VTZGQ0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv4owCis8VTcwRTk+IDxVNzBFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eDqTgwCis8VTcxRjQ+IDxVNzFGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHtDAKKzxVNzM2OT4gPFU3MzY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj542pMAorPFU3NEFGPiA8VTc0QUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkq8wCis8VTc3QkE+IDxVNzdCQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eeujAKKzxVNzlBQz4gPFU3OUFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56asMAorPFU3OUZEPiA8VTc5RkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnp700MzQKKzxVN0E2Mj4gPFU3QTYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56miMgorPFU3QkYyPiA8VTdCRjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnr7IwCis8VTdENzU+IDxVN0Q3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e1tTAKKzxVN0U1MD4gPFU3RTUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57mQMAorPFU3RTYyPiA8VTdFNjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuaIwCis8VTdFNkE+IDxVN0U2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5qjYKKzxVN0VEOD4gPFU3RUQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57uYMTc2NQorPFU3RjBCPiA8VTdGMEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvIswCis8VTdGRDk+IDxVN0ZEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e/mTAKKzxVN0ZGRD4gPFU3RkZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57+9MAorPFU4Mjk0PiA8VTgyOTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoipQwCis8VTgzNUY+IDxVODM1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iNnzUzCis8VTg1Mjc+IDxVODUyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iUpzAKKzxVODU1OT4gPFU4NTU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JWZMjU5Cis8VTg1ODg+IDxVODU4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iWiDAKKzxVODdFQT4gPFU4N0VBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J+qMQorPFU4QTZGPiA8VThBNkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqa8wCis8VThBNzQ+IDxVOEE3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iptDAKKzxVOEFGMT4gPFU4QUYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KuxMgorPFU4QjUzPiA8VThCNTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorZMwCis8VThCN0Y+IDxVOEI3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+itvzAKKzxVOEJCMz4gPFU4QkIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K6zNjQxCis8VThCRjI+IDxVOEJGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ivsjMxMworPFU4RDNGPiA8VThEM0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotL8xMjE0Cis8VTkzRjg+IDxVOTNGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mPuDAKKzxVOTQyQz4gPFU5NDJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZCsMAorPFU5NEJBPiA8VTk0QkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkro0MQorPFU5NUUwPiA8VTk1RTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl6AwCis8VTk2MTM+IDxVOTYxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mYkzAKKzxVOTc2Nz4gPFU5NzY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z2nMAorPFU5N0UyPiA8VTk3RTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpn6IwCis8VTk4MkU+IDxVOTgyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mgrjAKKzxVOTg5Mj4gPFU5ODkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aKSMAorPFU5OTJGPiA8VTk5MkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppK8wCis8VTk5NTY+IDxVOTk1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mlljAKKzxVNUE1QT4gPFU1QTVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5amaMTE1OTYKKzxVNjBEQj4gPFU2MERCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oObMAorPFU2MEZEPiA8VTYwRkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmg70wCis8VTY1NkY+IDxVNjU2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aVrzAKKzxVNjYwRj4gPFU2NjBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5piPNTI2OQorPFU2NjJDPiA8VTY2MkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmKwwCis8VTY4RDQ+IDxVNjhEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ajlDAKKzxVNkI5OT4gPFU2Qjk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q6ZMAorPFU2REJEPiA8VTZEQkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtr0wCis8VTc3Njc+IDxVNzc2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+edpzAKKzxVNzc2Rj4gPFU3NzZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj552vMAorPFU4MzY0PiA8VTgzNjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojaQxNzcKKzxVODQ3Nz4gPFU4NDc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JG3MQorPFU5NUJEPiA8VTk1QkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplr0wCis8VTk2MEQ+IDxVOTYwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mYjTI2Cis8VTM0NkU+IDxVMzQ2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ORrjAKKzxVM0EyMT4gPFUzQTIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46ihMAorPFU0NkYwPiA8VTQ2RjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkm7AwCis8VTRBREY+IDxVNEFERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SrnzAKKzxVNEMxRj4gPFU0QzFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LCfMAorPFU0RDM3PiA8VTREMzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktLcwCis8VTU4MUE+IDxVNTgxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WgmjAKKzxVNUZGNj4gPFU1RkY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b+2MAorPFU2OERFPiA8VTY4REU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmo54wCis8VTY5NEU+IDxVNjk0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aljjAKKzxVNkQ1MT4gPFU2RDUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rWRMzQyNworPFU2REY3PiA8VTZERjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmt7c0ODUwCis8VTZFM0U+IDxVNkUzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a4vjE3Cis8VTc5NzU+IDxVNzk3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eltTAKKzxVN0U0OT4gPFU3RTQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57mJMAorPFU4RjRCPiA8VThGNEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovYswCis8VTk4NTA+IDxVOTg1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mhkDAKKzxVOTkxQj4gPFU5OTFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aSbMAorPFU5OTJCPiA8VTk5MkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppKswCis8VTk5ODQ+IDxVOTk4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mmhDE0OQorPFU5QjQyPiA8VTlCNDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprYI2MDA2Cis8VTlGMzI+IDxVOUYzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m8sjAKKzxVNzc1ND4gPFU3NzU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj552UMAorPFU5QkY2PiA8VTlCRjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpr7YwCis8VTM5NzU+IDxVMzk3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OltTAKKzxVNDE1OT4gPFU0MTU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IWZMAorPFU0MTcxPiA8VTQxNzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhbEwCis8VTQ2QTA+IDxVNDZBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SaoDAKKzxVNDlGMD4gPFU0OUYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KewMAorPFU0RkQyPiA8VTRGRDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkv5IwCis8VTUwMzE+IDxVNTAzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAsTAKKzxVNTcwMj4gPFU1NzAyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZyCMAorPFU2MTQxPiA8VTYxNDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhYEwCis8VTZFQjc+IDxVNkVCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a6tzExCis8VTcxMUQ+IDxVNzExRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eEnTAKKzxVOEFFMj4gPFU4QUUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KuiMQorPFU4QkU4PiA8VThCRTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor6g2MworPFU1MjkwPiA8VTUyOTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlipAwCis8VTU2ODQ+IDxVNTY4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WahDcKKzxVODAyMD4gPFU4MDIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ICgMAorPFU5NTJBPiA8VTk1MkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplKowCis8VTQxMDY+IDxVNDEwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SEhjAKKzxVNDExMT4gPFU0MTExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ISRMAorPFU0OEY2PiA8VTQ4RjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPko7YwCis8VTRCQ0Y+IDxVNEJDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SvjzAKKzxVNEY3OD4gPFU0Rjc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L24MAorPFU2RDNCPiA8VTZEM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtLs0NzM3MQorPFU3OUYzPiA8VTc5RjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnp7MwCis8VTg0M0Y+IDxVODQzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iQvzAKKzxVOTIyNT4gPFU5MjI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YilMAorPFU5NEFDPiA8VTk0QUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkqwxCis8VTRGMTk+IDxVNEYxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S8mTk2OTMKKzxVNTkyNT4gPFU1OTI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aSlMjc2Cis8VTZGMzc+IDxVNkYzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a8tzAKKzxVNzA2Qj4gPFU3MDZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54GrMjcyMDMKKzxVOTBBOT4gPFU5MEE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKpMAorPFUzNUYyPiA8VTM1RjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjl7IwCis8VTM2MUU+IDxVMzYxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OYnjAKKzxVMzk5Qz4gPFUzOTlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46acMAorPFUzOUFGPiA8VTM5QUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpq8wCis8VTNBMkY+IDxVM0EyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OorzAKKzxVM0JDOT4gPFUzQkM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46+JMAorPFUzRTBDPiA8VTNFMEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuIwwCis8VTQwNjg+IDxVNDA2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SBqDAKKzxVNDA4ND4gPFU0MDg0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IKEMAorPFU0MTAwPiA8VTQxMDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhIAwCis8VTQyNUY+IDxVNDI1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SJnzAKKzxVNDJFRD4gPFU0MkVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IutMAorPFU0OTlBPiA8VTQ5OUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkppowCis8VTRDMjU+IDxVNEMyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SwpTAKKzxVNEZGMD4gPFU0RkYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L+wMAorPFU1MjY4PiA8VTUyNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliagwCis8VTU0OUY+IDxVNTQ5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WSnzAKKzxVNTVDMD4gPFU1NUMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZeAMAorPFU1NkFGPiA8VTU2QUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmq8zNAorPFU1NkJGPiA8VTU2QkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmr8xCis8VTU5NkY+IDxVNTk2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WlrzAKKzxVNUY1Rj4gPFU1RjVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b2fMAorPFU1RjYwPiA8VTVGNjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvaAwCis8VTYwRDE+IDxVNjBEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aDkTM5NDkKKzxVNjIxNj4gPFU2MjE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oiWNDQ5ODMKKzxVNjM0Nz4gPFU2MzQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o2HMAorPFU2MzlEPiA8VTYzOUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjp0wCis8VTY0RUQ+IDxVNjRFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aTrTAKKzxVNjUwOT4gPFU2NTA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pSJMTgKKzxVNjVFND4gPFU2NUU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pekMAorPFU2NkU0PiA8VTY2RTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmm6QwCis8VTY5NDc+IDxVNjk0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+alhzAKKzxVNkFCND4gPFU2QUI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qq0MAorPFU2QzhFPiA8VTZDOEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmso4wCis8VTZFNzE+IDxVNkU3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a5sTAKKzxVNkZFOT4gPFU2RkU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r+pNAorPFU3MDE2PiA8VTcwMTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngJYwCis8VTczNzI+IDxVNzM3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eNsjUxCis8VTc0QzE+IDxVNzRDMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eTgTAKKzxVNzY2OD4gPFU3NjY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55moMAorPFU3NzEzPiA8VTc3MTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnJMwCis8VTc3QzY+IDxVNzdDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+efhjAKKzxVNzdEMD4gPFU3N0QwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+QMAorPFU3N0YxPiA8VTc3RjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnn7EwCis8VTc5MEE+IDxVNzkwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ekijAKKzxVNzk3OD4gPFU3OTc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56W4MTkyMgorPFU3OThEPiA8VTc5OEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpo0xNAorPFU3QTZCPiA8VTdBNkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqasyCis8VTgwMkY+IDxVODAyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iArzAKKzxVODFEMj4gPFU4MUQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IeSMAorPFU4MjY3PiA8VTgyNjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiacwCis8VTgzQjc+IDxVODNCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iOtzkxMDcKKzxVODRBNj4gPFU4NEE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JKmMAorPFU4NUZGPiA8VTg1RkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPol78yCis8VTg4MTY+IDxVODgxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+igljkKKzxVOEIwQj4gPFU4QjBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KyLMAorPFU4Qjk3PiA8VThCOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorpcwCis8VThDQTg+IDxVOENBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iyqDUxCis8VThEMjc+IDxVOEQyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i0pzQ3MzkKKzxVOTQ0QT4gPFU5NDRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZGKMAorPFU5NTZDPiA8VTk1NkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplawxMQorPFU5NTg0PiA8VTk1ODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPploQwCis8VTk2RDg+IDxVOTZEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mbmDAKKzxVOTcwRD4gPFU5NzBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZyNMjUzOAorPFU5NzQzPiA8VTk3NDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnYMwCis8VTk3QzQ+IDxVOTdDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mfhDAKKzxVOUExRT4gPFU5QTFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aieMAorPFU5QzZGPiA8VTlDNkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsa8wCis8VUZBMEQ+IDxVRkEwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI++ojTAKKzxVNDkyMD4gPFU0OTIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KSgMAorPFU0RTBDPiA8VTRFMEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuIwwCis8VTRFNjk+IDxVNEU2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S5qTMwCis8VTUwREY+IDxVNTBERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WDnzAKKzxVNTFGQj4gPFU1MUZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ye7MTkxMjQKKzxVNTIwRj4gPFU1MjBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YiPMAorPFU1MjVFPiA8VTUyNUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliZ4xCis8VTUyRTM+IDxVNTJFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WLozAKKzxVNTNGRD4gPFU1M0ZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y+9NzA3Cis8VTU0QUQ+IDxVNTRBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WSrTQ2Cis8VTU1Mjc+IDxVNTUyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUpzQ3OAorPFU1NTlFPiA8VTU1OUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllp4wCis8VTU1RDg+IDxVNTVEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WXmDAKKzxVNTYzMD4gPFU1NjMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZiwNAorPFU1NzNFPiA8VTU3M0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnL4xMjc4Cis8VTU3RkE+IDxVNTdGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfujI5Nzc0Cis8VTU4QkM+IDxVNThCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WivDEKKzxVNTlFQz4gPFU1OUVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aesNzA1Cis8VTVDMTA+IDxVNUMxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WwkDAKKzxVNUM1MD4gPFU1QzUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bGQOTMKKzxVNUNEQz4gPFU1Q0RDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bOcMAorPFU1RDQ2PiA8VTVENDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltYYwCis8VTVENDc+IDxVNUQ0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W1hzE5NworPFU1RTdFPiA8VTVFN0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlub4zMjEKKzxVNjRDQT4gPFU2NENBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pOKMTMyCis8VTY3MUU+IDxVNjcxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+acnjAKKzxVNjczQT4gPFU2NzNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5py6Njg2NzYKKzxVNjc4NT4gPFU2Nzg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p6FMAorPFU2QTBEPiA8VTZBMEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqI0wCis8VTZBNUY+IDxVNkE1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+apnzYwOAorPFU2QUM1PiA8VTZBQzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmq4UwCis8VTZCMUE+IDxVNkIxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+asmjAKKzxVNkJDND4gPFU2QkM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q+EMAorPFU2RkMwPiA8VTZGQzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv4AxMjk5MworPFU3Mjg0PiA8VTcyODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnioQ4NworPFU3MzkxPiA8VTczOTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjpEyOQorPFU3NEEzPiA8VTc0QTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkqMxCis8VTc1Nzg+IDxVNzU3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eVuDcxMQorPFU3NTdGPiA8VTc1N0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlb8zMworPFU3NjU4PiA8VTc2NTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmZgwCis8VTc2NkE+IDxVNzY2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eZqjAKKzxVNzdGNj4gPFU3N0Y2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+2Mzc2Cis8VTc4RUY+IDxVNzhFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ejrzEKKzxVNzlBOD4gPFU3OUE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56aoMAorPFU3OUVGPiA8VTc5RUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnp684NDE2Cis8VTdBMTg+IDxVN0ExOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eomDAKKzxVN0EzRD4gPFU3QTNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56i9MTAyOQorPFU3QTREPiA8VTdBNEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqY05OQorPFU3QUQyPiA8VTdBRDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnq5IwCis8VTdCMDQ+IDxVN0IwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eshDEzCis8VTdCNTM+IDxVN0I1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+etkzAKKzxVN0I5NT4gPFU3Qjk1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj566VMTgzCis8VTdDMEE+IDxVN0MwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ewijAKKzxVN0RERD4gPFU3REREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57edMQorPFU3RTNFPiA8VTdFM0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuL45Cis8VTdFRTk+IDxVN0VFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e7qTI0MjAKKzxVN0YwOT4gPFU3RjA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57yJNjgwCis8VTdGODE+IDxVN0Y4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e+gTM4NgorPFU3Rjg3PiA8VTdGODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvocwCis8VTdGODg+IDxVN0Y4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e+iDUKKzxVODAyRD4gPFU4MDJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ICtMAorPFU4MDdCPiA8VTgwN0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogbswCis8VTgwOEM+IDxVODA4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iCjDE1MjgKKzxVODExND4gPFU4MTE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ISUNQorPFU4MkE4PiA8VTgyQTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiqgzMgorPFU4NDAxPiA8VTg0MDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokIExMworPFU4NjQwPiA8VTg2NDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomYAwCis8VTg2NkU+IDxVODY2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iZrjYKKzxVODZFMz4gPFU4NkUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JujMAorPFU4OTQwPiA8VTg5NDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopYAwCis8VTg5ODk+IDxVODk4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+imiTAKKzxVODk4QT4gPFU4OThBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KaKMAorPFU4OUVEPiA8VTg5RUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPop60wCis8VThBQzU+IDxVOEFDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+irhTAKKzxVOEI0Rj4gPFU4QjRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K2PNAorPFU4QjY0PiA8VThCNjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoraQwCis8VThCQTU+IDxVOEJBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iupTU1MAorPFU4Q0VCPiA8VThDRUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPos6swCis8VThDRjc+IDxVOENGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iztzAKKzxVOEQ0RD4gPFU4RDREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LWNMjcKKzxVOERFMT4gPFU4REUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LehNTcKKzxVOERGQj4gPFU4REZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Le7ODYKKzxVOEUyNj4gPFU4RTI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LimMAorPFU4RTVGPiA8VThFNUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouZ82Cis8VThFOEI+IDxVOEU4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6izAKKzxVOEVCOD4gPFU4RUI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Lq4MAorPFU4RkY5PiA8VThGRjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPov7k2Nzc0Cis8VTkyODg+IDxVOTI4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mKiDAKKzxVOTQxNj4gPFU5NDE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZCWMAorPFU5NDQ3PiA8VTk0NDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkYcwCis8VTk0NTk+IDxVOTQ1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mRmTAKKzxVOTZBRT4gPFU5NkFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZquMAorPFU5NkRFPiA8VTk2REU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpm54yOAorPFU5NzE5PiA8VTk3MTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnJkwCis8VTk3QkY+IDxVOTdCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mevzAKKzxVOTdGMj4gPFU5N0YyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z+yMAorPFU5OEUyPiA8VTk4RTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpo6I5Cis8VTk5NTE+IDxVOTk1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mlkTAKKzxVOTk2NT4gPFU5OTY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aWlMTYwNQorPFU5QzNGPiA8VTlDM0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsL8wCis8VTlDRUU+IDxVOUNFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mzrjAKKzxVOUQ4Rj4gPFU5RDhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6baPMAorPFU5REM0PiA8VTlEQzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpt4QxCis8VTlFMDQ+IDxVOUUwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m4hDAKKzxVOUUyMT4gPFU5RTIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bihNjYyOQorPFU5RjREPiA8VTlGNEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvY0wCis8VTlGNEU+IDxVOUY0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m9jjAKKzxVOUY0Rj4gPFU5RjRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b2PMAorPFU5RjUxPiA8VTlGNTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvZEyMworPFUzNTE1PiA8VTM1MTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlJUwCis8VTM1QTI+IDxVMzVBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OWojAKKzxVMzVDQT4gPFUzNUNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45eKMAorPFUzNUYxPiA8VTM1RjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjl7EwCis8VTM2MEQ+IDxVMzYwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OYjTAKKzxVMzY2Qj4gPFUzNjZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45mrMAorPFUzNzgzPiA8VTM3ODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnoMwCis8VTM4MEQ+IDxVMzgwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OgjTAKKzxVMzgwRT4gPFUzODBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46COMAorPFUzODQ3PiA8VTM4NDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoYcwCis8VTM4NkU+IDxVMzg2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OhrjAKKzxVMzkwMj4gPFUzOTAyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46SCMAorPFUzOTVCPiA8VTM5NUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpZswCis8VTM5QzA+IDxVMzlDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OngDAKKzxVM0I3Mj4gPFUzQjcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj462yMAorPFUzQjlGPiA8VTNCOUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrp8wCis8VTNCQTg+IDxVM0JBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OuqDAKKzxVM0M1RT4gPFUzQzVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47GeMAorPFUzQ0JBPiA8VTNDQkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsrowCis8VTNEMTU+IDxVM0QxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O0lTAKKzxVM0VGNz4gPFUzRUY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47u3MAorPFUzRjdBPiA8VTNGN0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvbowCis8VTNGOEE+IDxVM0Y4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O+ijAKKzxVNDA1Mj4gPFU0MDUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IGSMAorPFU0NDE1PiA8VTQ0MTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkJUwCis8VTQ0MUE+IDxVNDQxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SQmjAKKzxVNDY5MD4gPFU0NjkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JqQMAorPFU0Nzk4PiA8VTQ3OTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknpgwCis8VTQ3Q0M+IDxVNDdDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SfjDAKKzxVNDhFMj4gPFU0OEUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KOiMAorPFU0QTZGPiA8VTRBNkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqa8wCis8VTRCQzI+IDxVNEJDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SvgjAKKzxVNENBRj4gPFU0Q0FGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LKvMAorPFU0Q0VEPiA8VTRDRUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPks60wCis8VTRFOUY+IDxVNEU5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6nzcxCis8VTRFQkM+IDxVNEVCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6vDAKKzxVNEYwQj4gPFU0RjBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LyLMAorPFU0Rjc2PiA8VTRGNzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvbY2Cis8VTUwNkU+IDxVNTA2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WBrjAKKzxVNTM1OT4gPFU1MzU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y2ZMAorPFU1MzczPiA8VTUzNzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljbMyNzYyOQorPFU1MzdEPiA8VTUzN0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljb0wCis8VTUzQ0E+IDxVNTNDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPijMzOTA5Cis8VTUzREQ+IDxVNTNERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPnTAKKzxVNTQwOT4gPFU1NDA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZCJNzEzMgorPFU1ODMyPiA8VTU4MzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloLIwCis8VTU4NDk+IDxVNTg0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WhiTAKKzxVNTlERT4gPFU1OURFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aeeMAorPFU1QUM5PiA8VTVBQzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlq4k4ODUKKzxVNUM4Qz4gPFU1QzhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bKMMTEwCis8VTVENzQ+IDxVNUQ3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W1tDAKKzxVNURBRj4gPFU1REFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bavMAorPFU1RUI0PiA8VTVFQjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlurQwCis8VTVGNzY+IDxVNUY3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W9tjAKKzxVNUZFMz4gPFU1RkUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b+jMAorPFU2MDI1PiA8VTYwMjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgKUxNDU2OQorPFU2MTMxPiA8VTYxMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhLEwCis8VTYyMjI+IDxVNjIyMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aIojIKKzxVNjNFND4gPFU2M0U0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+kMAorPFU2NDgzPiA8VTY0ODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkoMwCis8VTY0RUU+IDxVNjRFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aTrjAKKzxVNjc4MT4gPFU2NzgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p6BMjE2ODIKKzxVNjhEOD4gPFU2OEQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qOYNjkxCis8VTY5NTY+IDxVNjk1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+alljAKKzxVNjk2Qj4gPFU2OTZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qWrMzQKKzxVNjk3NT4gPFU2OTc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qW1MjY1Cis8VTY5Qzk+IDxVNjlDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aniTAKKzxVNkE3Nj4gPFU2QTc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qm2MAorPFU2QTlEPiA8VTZBOUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqp0wCis8VTZCOUI+IDxVNkI5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aumzEzCis8VTZDNzI+IDxVNkM3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+axsjI1OQorPFU2RTUyPiA8VTZFNTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuZIwCis8VTZGMDM+IDxVNkYwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a8gzAKKzxVNkY1Nz4gPFU2RjU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r2XMAorPFU2RkM4PiA8VTZGQzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv4gwCis8VTcxMEY+IDxVNzEwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eEjzAKKzxVNzJFND4gPFU3MkU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54ukMAorPFU3NUJFPiA8VTc1QkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlr4yNDA4Cis8VTc2MjA+IDxVNzYyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eYoDEwNgorPFU3NjhEPiA8VTc2OEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmo0wCis8VTc5MEY+IDxVNzkwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ekjzAKKzxVNzlGOD4gPFU3OUY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56e4ODEKKzxVN0IwOD4gPFU3QjA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56yIMjcKKzxVN0JCRj4gPFU3QkJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj566/MAorPFU3QzREPiA8VTdDNEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsY0yOTk4Cis8VTdEMUE+IDxVN0QxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e0mjY2Cis8VTdFQTc+IDxVN0VBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e6pzE5MjIwCis8VTgwMjQ+IDxVODAyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iApDAKKzxVODEwQT4gPFU4MTBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ISKMTAxMgorPFU4MThDPiA8VTgxOEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohowwCis8VTgzOEI+IDxVODM4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iOizAKKzxVODRCQT4gPFU4NEJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JK6MjYKKzxVODRGQj4gPFU4NEZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JO7MAorPFU4NTQwPiA8VTg1NDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolYAyCis8VTg1N0E+IDxVODU3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iVujMKKzxVODVDOT4gPFU4NUM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JeJMTE3MworPFU4NzREPiA8VTg3NEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonY0xCis8VTg3OEY+IDxVODc4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iejzAKKzxVODg3MT4gPFU4ODcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KGxMAorPFU4OTRCPiA8VTg5NEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopYswCis8VTg5RDk+IDxVODlEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+inmTAKKzxVOEUxNj4gPFU4RTE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LiWMAorPFU4RTUwPiA8VThFNTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouZAwCis8VThGMkY+IDxVOEYyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i8rzIzCis8VThGNUE+IDxVOEY1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i9mjAKKzxVOEY5MT4gPFU4RjkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L6RODQxNworPFU5MEM2PiA8VTkwQzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg4YwCis8VTkyMTI+IDxVOTIxMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mIkjAKKzxVOTJBMT4gPFU5MkExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YqhMAorPFU5MzUzPiA8VTkzNTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjZMwCis8VTkzRjY+IDxVOTNGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mPtjAKKzxVOTQ5MT4gPFU5NDkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZKRMAorPFU5NkM2PiA8VTk2QzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpm4YxNzAyMgorPFU5NkU2PiA8VTk2RTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpm6YwCis8VTk2RTc+IDxVOTZFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mbpzAKKzxVOTczNT4gPFU5NzM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Zy1MAorPFU5NzhBPiA8VTk3OEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnoowCis8VTlEMzY+IDxVOUQzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m0tjAKKzxVOURCQT4gPFU5REJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ba6MAorPFU5RTYxPiA8VTlFNjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuaExCis8VTM2QTE+IDxVMzZBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OaoTAKKzxVMzc4Nj4gPFUzNzg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj456GMAorPFUzNzlCPiA8VTM3OUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnpswCis8VTM3QTY+IDxVMzdBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OepjAKKzxVMzlCOD4gPFUzOUI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46a4MAorPFUzQTA4PiA8VTNBMDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqIgwCis8VTNEMDk+IDxVM0QwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O0iTAKKzxVNDM2ND4gPFU0MzY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I2kMAorPFU0OEIzPiA8VTQ4QjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkorMwCis8VTQ5MTI+IDxVNDkxMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SkkjAKKzxVNEUyRT4gPFU0RTJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LiuMAorPFU1MUUwPiA8VTUxRTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlh6A1Njk2OAorPFU1OTgwPiA8VTU5ODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpoAwCis8VTVERjE+IDxVNURGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W3sTg3ODkyCis8VTYyMUY+IDxVNjIxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aInzE4NQorPFU2MzI0PiA8VTYzMjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjKQ0NDE2Cis8VTYzOEU+IDxVNjM4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aOjjEKKzxVNjRBMD4gPFU2NEEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pKgMAorPFU2NEUwPiA8VTY0RTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmk6AyMworPFU2Q0YyPiA8VTZDRjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPms7IwCis8VTZGREY+IDxVNkZERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a/nzY0Cis8VTcyQjE+IDxVNzJCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eKsTAKKzxVN0E1Nj4gPFU3QTU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56mWMAorPFU4N0UzPiA8VTg3RTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPon6MwCis8VTlCNTU+IDxVOUI1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mtlTAKKzxVOUI2Mj4gPFU5QjYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a2iMAorPFU5QzdFPiA8VTlDN0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsb4wCis8VTlFODI+IDxVOUU4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6gjQ0Cis8VTM0Njc+IDxVMzQ2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ORpzAKKzxVMzRBQj4gPFUzNEFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45KrMAorPFUzNjY4PiA8VTM2Njg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmagwCis8VTM4MTY+IDxVMzgxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OgljAKKzxVMzgzMT4gPFUzODMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46CxMAorPFUzODZEPiA8VTM4NkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoa0wCis8VTM4NzY+IDxVMzg3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OhtjAKKzxVMzk0RD4gPFUzOTREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46WNMAorPFUzQjcwPiA8VTNCNzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrbAwCis8VTNDMUY+IDxVM0MxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OwnzAKKzxVM0M4NT4gPFUzQzg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47KFMAorPFUzQ0Y1PiA8VTNDRjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjs7UwCis8VTNFMDQ+IDxVM0UwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O4hDAKKzxVM0U0ND4gPFUzRTQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47mEMAorPFUzRUQxPiA8VTNFRDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPju5EwCis8VTNGOTI+IDxVM0Y5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O+kjAKKzxVM0ZCNT4gPFUzRkI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj4761MAorPFU0MkRGPiA8VTQyREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPki58wCis8VTQ0MDA+IDxVNDQwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SQgDAKKzxVNDQ4MT4gPFU0NDgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JKBMAorPFU0NEVCPiA8VTQ0RUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkk6swCis8VTQ0RkQ+IDxVNDRGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+STvTAKKzxVNDVDMT4gPFU0NUMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JeBMAorPFU0NzFFPiA8VTQ3MUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknJ4wCis8VTQ3Nzg+IDxVNDc3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SduDAKKzxVNDgwRj4gPFU0ODBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KCPMAorPFU0ODhCPiA8VTQ4OEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkooswCis8VTQ5ODc+IDxVNDk4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SmhzAKKzxVNEExNj4gPFU0QTE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KiWMAorPFU0QkJBPiA8VTRCQkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrrowCis8VTRDMEY+IDxVNEMwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SwjzAKKzxVNEQ5Mz4gPFU0RDkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LaTMAorPFU0REE5PiA8VTREQTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktqkwCis8VTRGMEU+IDxVNEYwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S8jjIyNAorPFU1MDQ4PiA8VTUwNDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgYgxNDIKKzxVNTE3RT4gPFU1MTdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YW+MAorPFU1MTgwPiA8VTUxODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhoA1MDYKKzxVNTIwOT4gPFU1MjA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YiJMAorPFU1MjQyPiA8VTUyNDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliYIxMDg2Cis8VTUyNjQ+IDxVNTI2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WJpDAKKzxVNTI5MT4gPFU1MjkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YqRMgorPFU1NERDPiA8VTU0REM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlk5w0Cis8VTU2OEM+IDxVNTY4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WajDAKKzxVNTc1Nj4gPFU1NzU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z2WMAorPFU1NzhEPiA8VTU3OEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlno0wCis8VTU4NDg+IDxVNTg0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WhiDAKKzxVNTg4RD4gPFU1ODhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aKNMAorPFU1OTkzPiA8VTU5OTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlppMxOTM3Cis8VTVCNjM+IDxVNUI2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WtozQ2NTEKKzxVNUJDMj4gPFU1QkMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a+CNTcxMAorPFU1QkM0PiA8VTVCQzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlr4Q1MTQxCis8VTVGNTA+IDxVNUY1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W9kDEKKzxVNUY1MT4gPFU1RjUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b2RMAorPFU1RkNDPiA8VTVGQ0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv4wyMzYzCis8VTYwQjg+IDxVNjBCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aCuDM0NQorPFU2MENFPiA8VTYwQ0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmg44wCis8VTYxRkI+IDxVNjFGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aHuzAKKzxVNjI4MD4gPFU2MjgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oqAMTQwNDAKKzxVNjU4OT4gPFU2NTg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5paJMAorPFU2NThBPiA8VTY1OEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmloowCis8VTY1RTE+IDxVNjVFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aXoTAKKzxVNjVFMj4gPFU2NUUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5peiMTIwNTgKKzxVNjVFMz4gPFU2NUUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pejMAorPFU2NkE4PiA8VTY2QTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmqgxMzQKKzxVNjZDMT4gPFU2NkMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5puBMAorPFU2ODlFPiA8VTY4OUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmop4wCis8VTZBOTU+IDxVNkE5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aqlTAKKzxVNkFCNT4gPFU2QUI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qq1MAorPFU2QUVEPiA8VTZBRUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmq60wCis8VTZEMEU+IDxVNkQwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a0jjMKKzxVNkQ0RT4gPFU2RDRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rWOMTQwMDAKKzxVNkUwOD4gPFU2RTA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5riIMAorPFU2RjA4PiA8VTZGMDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvIgwCis8VTcwMzE+IDxVNzAzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eAsTAKKzxVNzRCRT4gPFU3NEJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55K+MAorPFU3NUY1PiA8VTc1RjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnl7UwCis8VTc2MDg+IDxVNzYwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eYiDAKKzxVNzY2MD4gPFU3NjYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55mgMAorPFU3N0ExPiA8VTc3QTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnqEwCis8VTc5NkQ+IDxVNzk2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+elrTE3MTAKKzxVNzk5RD4gPFU3OTlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56adMAorPFU3QTI5PiA8VTdBMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqKkwCis8VTdBMzc+IDxVN0EzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eotzE5MAorPFU3QTQ0PiA8VTdBNDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqYQwCis8VTdBNEE+IDxVN0E0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+epijAKKzxVN0E2Nz4gPFU3QTY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56mnMAorPFU3RDAwPiA8VTdEMDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntIAyMzAKKzxVN0Q5OT4gPFU3RDk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57aZMAorPFU3RTRCPiA8VTdFNEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuYswCis8VTdFNkI+IDxVN0U2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5qzM0Cis8VTdFN0M+IDxVN0U3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5vDEzOQorPFU3RUFBPiA8VTdFQUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuqoxNTM4MworPFU3RUU3PiA8VTdFRTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnu6cxMzc1MAorPFU3RjdEPiA8VTdGN0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvb0wCis8VTgxRUU+IDxVODFFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iHrjAKKzxVODJCMD4gPFU4MkIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IqwNAorPFU4MzYwPiA8VTgzNjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojaA3OQorPFU4NDE1PiA8VTg0MTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokJUwCis8VTg0NkE+IDxVODQ2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iRqjAKKzxVODRERj4gPFU4NERGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JOfNDkKKzxVODUwNz4gPFU4NTA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JSHMAorPFU4NThBPiA8VTg1OEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoloowCis8VTg1QkE+IDxVODVCQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iWujAKKzxVODYwRT4gPFU4NjBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JiOMAorPFU4NjJFPiA8VTg2MkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomK4wCis8VTg2M0I+IDxVODYzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iYuzAKKzxVODhEQT4gPFU4OERBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KOaMAorPFU4OTAwPiA8VTg5MDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopIAwCis8VTg5QUM+IDxVODlBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+imrDAKKzxVODlDQT4gPFU4OUNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KeKNjUKKzxVOEEwOD4gPFU4QTA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KiIMTcyCis8VThBMTg+IDxVOEExOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iomDM0MgorPFU4QThCPiA8VThBOEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqoswCis8VThCQTE+IDxVOEJBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iuoTI3ODYwCis8VThCQjA+IDxVOEJCMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iusDQ2Njk5Cis8VThERkQ+IDxVOERGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i3vTIKKzxVOTY0NT4gPFU5NjQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZmFMjE3MzgKKzxVOTY5Qj4gPFU5NjlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZqbMTc4Cis8VTk3MDE+IDxVOTcwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mcgTExMworPFU5NzNEPiA8VTk3M0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnL0wCis8VTlBMEU+IDxVOUEwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mojjM2Cis8VTlBNjU+IDxVOUE2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mppTAKKzxVOUFBNT4gPFU5QUE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aqlMTM0Cis8VTlBRkI+IDxVOUFGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mruzMyMAorPFU5QjNFPiA8VTlCM0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprL4wCis8VTlCNUQ+IDxVOUI1RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mtnTAKKzxVOUI4Nj4gPFU5Qjg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a6GMAorPFU5QkRBPiA8VTlCREE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpr5owCis8VTlCRUY+IDxVOUJFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mvrzAKKzxVOUJGRD4gPFU5QkZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a+9MgorPFU5QzM2PiA8VTlDMzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsLYwCis8VTlDNDA+IDxVOUM0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxgDAKKzxVOUM2RD4gPFU5QzZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bGtMAorPFU5QzlBPiA8VTlDOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpspowCis8VTlDQUI+IDxVOUNBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+myqzQ1Cis8VTlENEI+IDxVOUQ0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m1izAKKzxVOUY0Qz4gPFU5RjRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b2MMAorPFU0RTZCPiA8VTRFNkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuaswCis8VTRGNzM+IDxVNEY3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S9szI3MzkKKzxVNTBBMj4gPFU1MEEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YKiMTUKKzxVNTJBMD4gPFU1MkEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YqgNTE0ODQKKzxVNTVFNz4gPFU1NUU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZenMAorPFU1NjA5PiA8VTU2MDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmIkyNjI3Cis8VTU5Mzk+IDxVNTkzOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WkuTM2OTAKKzxVNTkzRT4gPFU1OTNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aS+MjgKKzxVNUI4QT4gPFU1QjhBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a6KMAorPFU1QkI2PiA8VTVCQjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrrYxNDk4NjkKKzxVNUU0Rj4gPFU1RTRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bmPMAorPFU2MkMxPiA8VTYyQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmi4EwCis8VTY3Qjc+IDxVNjdCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aetzM2OQorPFU2QkUwPiA8VTZCRTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmr6AwCis8VTZDQzc+IDxVNkNDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+azhzAKKzxVNkQ0Mz4gPFU2RDQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rWDNTIKKzxVNkQ3OT4gPFU2RDc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rW5MQorPFU3MjhDPiA8VTcyOEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniowwCis8VTczMzM+IDxVNzMzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eMszAKKzxVNzNDOD4gPFU3M0M4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54+IODAKKzxVNzVDMj4gPFU3NUMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55eCNjMKKzxVN0IzMz4gPFU3QjMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56yzNQorPFU4MDFFPiA8VTgwMUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogJ4wCis8VTgxNzU+IDxVODE3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iFtTAKKzxVODMwND4gPFU4MzA0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IyENTE2Cis8VTg0NkQ+IDxVODQ2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iRrTYzCis8VTg4ODg+IDxVODg4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iiiDE3NworPFU4QzZEPiA8VThDNkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosa0wCis8VThDOTE+IDxVOEM5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iykTAKKzxVOERDRj4gPFU4RENGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LePMworPFU4RkNDPiA8VThGQ0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPov4wwCis8VThGRTY+IDxVOEZFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i/pjQzOQorPFU5MjZCPiA8VTkyNkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiaswCis8VTkzQjU+IDxVOTNCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mOtTAKKzxVOTU1Mz4gPFU5NTUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZWTNgorPFU5RDEwPiA8VTlEMTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptJAwCis8VTlFOUE+IDxVOUU5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6mjAKKzxVM0FCND4gPFUzQUI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46q0MAorPFUzQjk2PiA8VTNCOTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrpYwCis8VTNGMkE+IDxVM0YyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O8qjAKKzxVM0ZEMz4gPFUzRkQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47+TMAorPFU0MDJCPiA8VTQwMkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgKswCis8VTQwMzk+IDxVNDAzOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SAuTAKKzxVNDU1Qj4gPFU0NTVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JWbMAorPFU0NkRGPiA8VTQ2REY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkm58wCis8VTRBNjE+IDxVNEE2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SpoTAKKzxVNTUwQT4gPFU1NTBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZSKMQorPFU1NzNGPiA8VTU3M0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnL8wCis8VTU3Qzk+IDxVNTdDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfiTAKKzxVNjA1RD4gPFU2MDVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oGdNQorPFU2MjFCPiA8VTYyMUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiJsxNjIKKzxVNjIxRT4gPFU2MjFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oieMAorPFU2Mjc0PiA8VTYyNzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmibQwCis8VTYzM0U+IDxVNjMzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aMvjEyCis8VTYzRjM+IDxVNjNGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aPszAKKzxVNjg5Qz4gPFU2ODlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qKcMAorPFU3ODQ4PiA8VTc4NDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoYgxCis8VTgyM0E+IDxVODIzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iIujAKKzxVODM1QT4gPFU4MzVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I2aMTE0Cis8VTgzQTI+IDxVODNBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iOojEKKzxVODZGMT4gPFU4NkYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JuxNworPFU4NkZBPiA8VTg2RkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPom7owCis8VTg4Qjc+IDxVODhCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iitzIKKzxVODhDQz4gPFU4OENDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KOMMAorPFU4REYyPiA8VThERjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPot7IwCis8VTkwQ0Y+IDxVOTBDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mDjzcKKzxVOTBERj4gPFU5MERGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YOfMAorPFU5MkNGPiA8VTkyQ0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpi48wCis8VTk0RDc+IDxVOTRENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mTlzcKKzxVOTc4Mj4gPFU5NzgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z6CMAorPFU5Nzg4PiA8VTk3ODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnogwCis8VTk4MkM+IDxVOTgyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mgrDEKKzxVOTgzMD4gPFU5ODMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aCwMTkKKzxVOTg4QT4gPFU5ODhBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aKKMTQ5NworPFU5OTA0PiA8VTk5MDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppIQwCis8VTlENEE+IDxVOUQ0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m1ijAKKzxVMzU0NT4gPFUzNTQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45WFMAorPFU0NDVEPiA8VTQ0NUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkZ0wCis8VTUwNDc+IDxVNTA0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WBhzEyNDU0Cis8VTUzREE+IDxVNTNEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPmjAKKzxVNUE3RD4gPFU1QTdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5am9MAorPFU1Q0FDPiA8VTVDQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsqw3MgorPFU1RkE2PiA8VTVGQTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvqYwCis8VTYzNDE+IDxVNjM0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aNgTAKKzxVNjQ5Rj4gPFU2NDlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pKfMQorPFU2NEI5PiA8VTY0Qjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkrkwCis8VTY1OUE+IDxVNjU5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWmjAKKzxVNjU5RD4gPFU2NTlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5padMAorPFU2OTM1PiA8VTY5MzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpLUwCis8VTY5OEU+IDxVNjk4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+amjjAKKzxVNjlEQT4gPFU2OURBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qeaMAorPFU2QTlGPiA8VTZBOUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqp8wCis8VTczQkU+IDxVNzNCRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eOvjAKKzxVNzUzMj4gPFU3NTMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55SyNDY4MgorPFU3NjE1PiA8VTc2MTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmJUwCis8VTc3RUY+IDxVNzdFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+efrzMKKzxVN0Q1RT4gPFU3RDVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57WeNgorPFU3RTczPiA8VTdFNzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnubM0Cis8VTgwREI+IDxVODBEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iDmzY0Cis8VThEM0U+IDxVOEQzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i0vjI0NTkKKzxVOEUwQj4gPFU4RTBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LiLMAorPFU5MjQwPiA8VTkyNDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiYAwCis8VTkyNzg+IDxVOTI3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mJuDAKKzxVOTRCRT4gPFU5NEJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZK+MTQxCis8VTk5MDM+IDxVOTkwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mkgzIKKzxVNDA0RD4gPFU0MDREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IGNMAorPFU0RUY3PiA8VTRFRjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPku7cxMTUzMgorPFU0RkExPiA8VTRGQTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvqEwCis8VTUwRjk+IDxVNTBGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WDuTI0MgorPFU1QUMxPiA8VTVBQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlq4EzMDMyCis8VTY3QjY+IDxVNjdCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aetjEwNjA1Cis8VTY5QTI+IDxVNjlBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+amojAKKzxVN0EzQz4gPFU3QTNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56i8NjQ4Cis8VTk5RDU+IDxVOTlENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mnlTMwCis8VTlBN0U+IDxVOUE3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mpvjMwMzIKKzxVNTE3Qz4gPFU1MTdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YW8Mjg0MQorPFU1MUJGPiA8VTUxQkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhr8wCis8VTU2Q0Y+IDxVNTZDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WbjzAKKzxVNTc1QT4gPFU1NzVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z2aMTIxMDUKKzxVNTgwNT4gPFU1ODA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aCFNjkKKzxVNTk3OD4gPFU1OTc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aW4MjIyMgorPFU1OUU2PiA8VTU5RTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlp6YxCis8VTU5RTc+IDxVNTlFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WnpzAKKzxVNUMxNj4gPFU1QzE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bCWNTYwMAorPFU1RTc1PiA8VTVFNzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlubUwCis8VTVFQ0M+IDxVNUVDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W7jDAKKzxVNjBFND4gPFU2MEU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oOkMAorPFU2MjBCPiA8VTYyMEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiIsxCis8VTYyMTQ+IDxVNjIxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aIlDAKKzxVNjNDMz4gPFU2M0MzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+DMQorPFU2NDFCPiA8VTY0MUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkJszCis8VTY5Mzc+IDxVNjkzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aktzAKKzxVNkEyQj4gPFU2QTJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qirNAorPFU2QUZDPiA8VTZBRkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmq7wwCis8VTZCN0M+IDxVNkI3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+atvDEzMDYKKzxVNkJCMT4gPFU2QkIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q6xMAorPFU2QkIyPiA8VTZCQjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrrI5Cis8VTZERkE+IDxVNkRGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3ujMwCis8VTZFNTQ+IDxVNkU1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a5lDIKKzxVNkU4NT4gPFU2RTg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqFODE3Cis8VTZGMzg+IDxVNkYzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a8uDEyNQorPFU2RkZBPiA8VTZGRkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv7oyCis8VTcwMTA+IDxVNzAxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eAkDAKKzxVNzAzOD4gPFU3MDM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54C4MAorPFU3MTRFPiA8VTcxNEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhY43MzcKKzxVNzE5RT4gPFU3MTlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54aeMAorPFU3MUI4PiA8VTcxQjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhrgwCis8VTcyNEI+IDxVNzI0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eJizg2NAorPFU3MjhEPiA8VTcyOEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnio0yNQorPFU3MzBGPiA8VTczMEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjI8wCis8VTczQUE+IDxVNzNBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eOqjAKKzxVNzZEMT4gPFU3NkQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55uRNjQ3MworPFU3NkUzPiA8VTc2RTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnm6M1NAorPFU3Nzc3PiA8VTc3Nzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnbcwCis8VTc4OEE+IDxVNzg4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eiijAKKzxVNzkxQj4gPFU3OTFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56SbMAorPFU3QTM0PiA8VTdBMzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqLQwCis8VTdCM0E+IDxVN0IzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+esujMzNAorPFU3QjhCPiA8VTdCOEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnroswCis8VTdCRUY+IDxVN0JFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+evrzAKKzxVN0M1Qj4gPFU3QzVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57GbMAorPFU3REQ4PiA8VTdERDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnt5gxCis8VTdFMTE+IDxVN0UxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e4kTAKKzxVN0YwND4gPFU3RjA0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57yEMjYzCis8VTdGMjM+IDxVN0YyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e8ozMKKzxVODBBOT4gPFU4MEE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IKpNjY0MAorPFU4MjcwPiA8VTgyNzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoibAyNDk2Cis8VTgyNzE+IDxVODI3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iJsTEwCis8VTgzQzU+IDxVODNDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPhTQyCis8VTgzRkE+IDxVODNGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPujAKKzxVODQ0Qz4gPFU4NDRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JGMMAorPFU4NEI5PiA8VTg0Qjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokrk2MQorPFU4NTUxPiA8VTg1NTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolZEwCis8VTg1NzM+IDxVODU3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iVszAKKzxVODY0Mz4gPFU4NjQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JmDMAorPFU4QjdDPiA8VThCN0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorbwwCis8VThDNUM+IDxVOEM1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ixnDAKKzxVOEM2Mz4gPFU4QzYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LGjMAorPFU5MjAzPiA8VTkyMDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiIMwCis8VTkyOTI+IDxVOTI5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mKkjAKKzxVOTQ2Rj4gPFU5NDZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZGvMAorPFU5NDk4PiA8VTk0OTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkpgwCis8VTk1OTM+IDxVOTU5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mWkzczNQorPFU5NTlBPiA8VTk1OUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplpowCis8VTk1RjQ+IDxVOTVGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mXtDc0NTY3Cis8VTk3NkM+IDxVOTc2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mdrDAKKzxVOTdBQz4gPFU5N0FDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z6sMQorPFU5N0FGPiA8VTk3QUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnq84Cis8VTk3QzA+IDxVOTdDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mfgDAKKzxVOTdDOT4gPFU5N0M5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z+JMAorPFU5OTMwPiA8VTk5MzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppLAwCis8VTk5QTI+IDxVOTlBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mmojAKKzxVOUExRD4gPFU5QTFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aidMAorPFU5QjBCPiA8VTlCMEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprIsxCis8VTlCNTA+IDxVOUI1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mtkDAKKzxVOUMxQz4gPFU5QzFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bCcMAorPFU5QzM5PiA8VTlDMzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsLkwCis8VTlDQTM+IDxVOUNBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+myozUKKzxVOUNEMj4gPFU5Q0QyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bOSMQorPFU5Q0ZEPiA8VTlDRkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPps70wCis8VTlENzM+IDxVOUQ3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m1szAKKzxVOURCQz4gPFU5REJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ba8MQorPFU5RTYzPiA8VTlFNjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuaM1Cis8VTlFODk+IDxVOUU4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6iTAKKzxVMzUxMz4gPFUzNTEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45STMAorPFUzQTM1PiA8VTNBMzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqLUwCis8VTNDRTg+IDxVM0NFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OzqDAKKzxVM0Q5NT4gPFUzRDk1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47aVMAorPFU0MTJGPiA8VTQxMkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhK8wCis8VTQxNTA+IDxVNDE1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SFkDAKKzxVNDI0RD4gPFU0MjREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ImNMAorPFU0NkYzPiA8VTQ2RjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkm7MwCis8VTQ3RjA+IDxVNDdGMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SfsDAKKzxVNEE0Nj4gPFU0QTQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KmGMAorPFU0QjYwPiA8VTRCNjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkraAwCis8VTRCQkY+IDxVNEJCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SuvzAKKzxVNEJEQj4gPFU0QkRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K+bMAorPFU0QkUxPiA8VTRCRTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkr6EwCis8VTRENjE+IDxVNEQ2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S1oTAKKzxVNEQ2ND4gPFU0RDY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LWkMAorPFU0REEwPiA8VTREQTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktqAwCis8VTRGRUQ+IDxVNEZFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S/rTMzNworPFU1MDM5PiA8VTUwMzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgLkwCis8VTUwNDI+IDxVNTA0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WBgjAKKzxVNTEwOT4gPFU1MTA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YSJMQorPFU1MUNGPiA8VTUxQ0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlh480Njg5Cis8VTUyNkE+IDxVNTI2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WJqjI0OTQKKzxVNTZERD4gPFU1NkREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZudMjUKKzxVNTgzRj4gPFU1ODNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aC/MAorPFU1QkNCPiA8VTVCQ0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlr4swCis8VTVGM0Y+IDxVNUYzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W8vzAKKzxVNjIyOT4gPFU2MjI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oipMzAKKzxVNjIyQz4gPFU2MjJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oisMTI2Cis8VTYyRTM+IDxVNjJFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aLozg4MAorPFU2MzM4PiA8VTYzMzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjLgwCis8VTYzNjE+IDxVNjM2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aNoTEzNjgKKzxVNjNDMD4gPFU2M0MwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+AMAorPFU2NEJGPiA8VTY0QkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkr8xMworPFU2Njk1PiA8VTY2OTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmpUxCis8VTY3QTc+IDxVNjdBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aepzQKKzxVNjdFQz4gPFU2N0VDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p+sMjAxCis8VTY4OTg+IDxVNjg5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aimDAKKzxVNjhDMD4gPFU2OEMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qOANzM3MgorPFU2OTFDPiA8VTY5MUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpJwwCis8VTZBQTI+IDxVNkFBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aqojc1Cis8VTZFMUI+IDxVNkUxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a4mzI1Cis8VTZFNTU+IDxVNkU1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a5lTAKKzxVNzAzRD4gPFU3MDNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54C9MAorPFU3NDUwPiA8VTc0NTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkZAwCis8VTc3NTE+IDxVNzc1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+edkTE3NQorPFU3N0JDPiA8VTc3QkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnrwwCis8VTc4Nzc+IDxVNzg3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ehtzgyCis8VTc4QjE+IDxVNzhCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eisTMwOQorPFU3OTA2PiA8VTc5MDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpIYwCis8VTdCMTU+IDxVN0IxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eslTMKKzxVN0I2Nz4gPFU3QjY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj562nMAorPFU3QjgwPiA8VTdCODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnroAxNjk3NgorPFU3QzIxPiA8VTdDMjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsKEyMTkKKzxVN0Q3OD4gPFU3RDc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57W4MAorPFU3RTZEPiA8VTdFNkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnua0wCis8VTdGRTY+IDxVN0ZFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e/pjQxCis8VTgzMjc+IDxVODMyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iMpzI4MAorPFU4NUM2PiA8VTg1QzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPol4YwCis8VTg4MTI+IDxVODgxMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+igkjAKKzxVODhFNT4gPFU4OEU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KOlMTAKKzxVODk0Nz4gPFU4OTQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KWHMQorPFU4OTdBPiA8VTg5N0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopbowCis8VThBNDM+IDxVOEE0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ipgzAKKzxVOEIwNz4gPFU4QjA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KyHMworPFU4QjJEPiA8VThCMkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorK0wCis8VThCN0U+IDxVOEI3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+itvjAKKzxVOEMyQj4gPFU4QzJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LCrMQorPFU4REJDPiA8VThEQkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotrwxCis8VThFNDc+IDxVOEU0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i5hzM4Cis8VTkxOEU+IDxVOTE4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mGjjAKKzxVOTJDND4gPFU5MkM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YuEMAorPFU5MzNEPiA8VTkzM0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjL0wCis8VTkzQUI+IDxVOTNBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mOqzAKKzxVOTQxNz4gPFU5NDE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZCXMAorPFU5NDI3PiA8VTk0Mjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkKcwCis8VTk1MEY+IDxVOTUwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mUjzY4Cis8VTlDMTQ+IDxVOUMxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mwlDAKKzxVOUU3OD4gPFU5RTc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bm4MAorPFU5RTdCPiA8VTlFN0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpubswCis8VTlFN0M+IDxVOUU3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m5vDYKKzxVMzRGQT4gPFUzNEZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45O6MAorPFUzNTBCPiA8VTM1MEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlIswCis8VTM4RTQ+IDxVMzhFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OjpDAKKzxVMzk5Nz4gPFUzOTk3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46aXMAorPFUzQTM0PiA8VTNBMzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqLQwCis8VTNCRkE+IDxVM0JGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OvujAKKzxVM0MwND4gPFUzQzA0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47CEMAorPFUzRTlEPiA8VTNFOUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjup0wCis8VTQxREY+IDxVNDFERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SHnzAKKzxVNDdDNT4gPFU0N0M1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J+FMAorPFU0OTE0PiA8VTQ5MTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpJQwCis8VTQ5NUM+IDxVNDk1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SlnDAKKzxVNDlENj4gPFU0OUQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KeWMAorPFU0QjNCPiA8VTRCM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrLswCis8VTRCNDg+IDxVNEI0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+StiDAKKzxVNEI1NT4gPFU0QjU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K2VMAorPFU0RDU2PiA8VTRENTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktZYwCis8VTRENUI+IDxVNEQ1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S1mzAKKzxVNEVGNj4gPFU0RUY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Lu2MTAwNTQwCis8VTRGOUY+IDxVNEY5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+nzAKKzxVNEZGND4gPFU0RkY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L+0MAorPFU1MDY1PiA8VTUwNjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgaU1MDQwCis8VTUwRUQ+IDxVNTBFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WDrTM1Cis8VTUyNTE+IDxVNTI1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WJkTQ2NTYKKzxVNTI2Mz4gPFU1MjYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YmjMAorPFU1MjcxPiA8VTUyNzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlibEwCis8VTUyOEQ+IDxVNTI4RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WKjTE0Cis8VTUyOEU+IDxVNTI4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WKjjAKKzxVNTI5Mj4gPFU1MjkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YqSMAorPFU1Mjk0PiA8VTUyOTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlipQxCis8VTVFRkE+IDxVNUVGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W7ujI5MDkyCis8VTVGQTQ+IDxVNUZBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W+pDAKKzxVNjRGNj4gPFU2NEY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pO2MAorPFU2NUQ0PiA8VTY1RDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPml5QwCis8VTY4MkI+IDxVNjgyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+agqzAKKzxVNjk1Nz4gPFU2OTU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qWXMAorPFU2OTk3PiA8VTY5OTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmppcwCis8VTY5REI+IDxVNjlEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+anmzUxNAorPFU2QUJCPiA8VTZBQkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqrs0Cis8VTZCRkQ+IDxVNkJGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+avvTE3Cis8VTZEMEE+IDxVNkQwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a0ijIKKzxVNkRBNz4gPFU2REE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ranMTgwCis8VTZFMTA+IDxVNkUxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a4kDEzNDMwCis8VTZGOTc+IDxVNkY5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a+lzEzCis8VTcwMzM+IDxVNzAzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eAszAKKzxVNzI2RT4gPFU3MjZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54muMAorPFU3M0Q0PiA8VTczRDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnj5QwCis8VTc3Qjc+IDxVNzdCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eetzAKKzxVNzhGNT4gPFU3OEY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56O1MAorPFU3OTAwPiA8VTc5MDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpIAwCis8VTdCQUQ+IDxVN0JBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eurTI5MzAKKzxVN0NDQj4gPFU3Q0NCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57OLMAorPFU3Q0VFPiA8VTdDRUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPns64wCis8VTdFNUQ+IDxVN0U1RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5nTEKKzxVODE3MT4gPFU4MTcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IWxMzAKKzxVODFGNj4gPFU4MUY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ie2MAorPFU4MjMwPiA8VTgyMzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiLAzODk3Cis8VTgyNjY+IDxVODI2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iJpjE3OAorPFU4MzUwPiA8VTgzNTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojZAxNDc1Cis8VTg1MkE+IDxVODUyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iUqjAKKzxVODVBNj4gPFU4NUE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JamMworPFU4N0I5PiA8VTg3Qjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonrkwCis8VTg5NDk+IDxVODk0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iliTAKKzxVODk4Qj4gPFU4OThCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KaLNzExCis8VTg5QjU+IDxVODlCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+imtTAKKzxVODlCOD4gPFU4OUI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ka4MAorPFU4OUMxPiA8VTg5QzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPop4E5MzY3NgorPFU4QUQzPiA8VThBRDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoq5MwCis8VThBRUI+IDxVOEFFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+irqzAKKzxVOEI1Nj4gPFU4QjU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K2WMAorPFU4QzBGPiA8VThDMEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosI8yMjUKKzxVOEMyRT4gPFU4QzJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LCuMgorPFU4Q0NFPiA8VThDQ0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPos44wCis8VThDRTQ+IDxVOENFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+izpDUKKzxVOEQzMT4gPFU4RDMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LSxMTEzNAorPFU4RDlEPiA8VThEOUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotp0wCis8VThERjU+IDxVOERGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i3tTE5NjYKKzxVOEUxMD4gPFU4RTEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LiQMzkKKzxVOEUzQT4gPFU4RTNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Li6MAorPFU5MUYwPiA8VTkxRjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPph7AwCis8VTkxRkM+IDxVOTFGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mHvDAKKzxVOTI3ND4gPFU5Mjc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ym0MjA1OAorPFU5MkZCPiA8VTkyRkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpi7swCis8VTkzNzM+IDxVOTM3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mNszAKKzxVOTM3NT4gPFU5Mzc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y21NDUKKzxVOTNFOT4gPFU5M0U5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+pMAorPFU5NDUxPiA8VTk0NTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkZExCis8VTk0NTI+IDxVOTQ1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mRkjMKKzxVOTQ2Qz4gPFU5NDZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZGsMAorPFU5NDczPiA8VTk0NzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkbMwCis8VTk1MkU+IDxVOTUyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mUrjY5OTMKKzxVOTU5Mj4gPFU5NTkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZaSNjEKKzxVOTkxRT4gPFU5OTFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aSeMAorPFU5OTZGPiA8VTk5NkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppa85MgorPFU5QzBFPiA8VTlDMEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsI4xMgorPFU1MEY1PiA8VTUwRjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlg7UxNjIzCis8VTU4QzM+IDxVNThDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WjgzAKKzxVNTlEQz4gPFU1OURDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aecMTA2MgorPFU1QzA2PiA8VTVDMDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsIY1Nzk5NgorPFU1QzA3PiA8VTVDMDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsIc1MzgKKzxVNjQ2QT4gPFU2NDZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pGqMAorPFU2QTdGPiA8VTZBN0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqb8wCis8VTZCQUQ+IDxVNkJBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aurTI5Cis8VTZDNUY+IDxVNkM1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+axnzIyMzYyCis8VTZENDY+IDxVNkQ0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a1hjg1NworPFU2RjNGPiA8VTZGM0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvL8zCis8VTc1NTU+IDxVNzU1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eVlTAKKzxVNzU3QT4gPFU3NTdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55W6MAorPFU3NTg1PiA8VTc1ODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnloUwCis8VTc1ODY+IDxVNzU4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eWhjEyMTEKKzxVNzkxMz4gPFU3OTEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56STMAorPFU3RTZFPiA8VTdFNkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnua4wCis8VTdGMzA+IDxVN0YzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e8sDIzNworPFU3RkRFPiA8VTdGREU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnv54wCis8VTgzMzM+IDxVODMzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iMszAKKzxVODQ0MT4gPFU4NDQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JGBMAorPFU4NTkxPiA8VTg1OTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolpExCis8VTg3ODA+IDxVODc4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iegDAKKzxVODdCRj4gPFU4N0JGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J6/MAorPFU4QzQ3PiA8VThDNDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosYc3Cis8VTk3QzE+IDxVOTdDMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mfgTIKKzxVOUM0Mj4gPFU5QzQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bGCMAorPFU5Q0M5PiA8VTlDQzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPps4kwCis8VTM4QTE+IDxVMzhBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OioTAKKzxVM0JDRD4gPFUzQkNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46+NMAorPFU0MDcwPiA8VTQwNzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgbAwCis8VTQyNDM+IDxVNDI0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SJgzAKKzxVNDJDQz4gPFU0MkNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IuMMAorPFU0NDgyPiA8VTQ0ODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkoIwCis8VTQ2Nzk+IDxVNDY3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SZuTAKKzxVNTJFNT4gPFU1MkU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YulMAorPFU1OTU2PiA8VTU5NTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpZY0NjkzCis8VTU5Njg+IDxVNTk2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WlqDAKKzxVNTk2Qz4gPFU1OTZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aWsMAorPFU2ODY4PiA8VTY4Njg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoagzNDIKKzxVNjlGMz4gPFU2OUYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qezMQorPFU2RUYwPiA8VTZFRjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmu7AwCis8VTczNEU+IDxVNzM0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eNjjMwCis8VTdFNjY+IDxVN0U2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5pjAKKzxVODAyOT4gPFU4MDI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ICpMzQKKzxVODE5OT4gPFU4MTk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IaZMAorPFU4NDhCPiA8VTg0OEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokos0OTQzCis8VTg1MjM+IDxVODUyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iUozgKKzxVOEIxQj4gPFU4QjFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KybMjkyCis8VThCQjI+IDxVOEJCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iusjI0MzI3Cis8VTk4NUM+IDxVOTg1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mhnDAKKzxVNDdBQT4gPFU0N0FBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J6qMAorPFU1MzFFPiA8VTUzMUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljJ4wCis8VTUzMjA+IDxVNTMyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WMoDE4NTkKKzxVNTkwNT4gPFU1OTA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aSFMAorPFU1RDc5PiA8VTVENzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltbkwCis8VTVGMUM+IDxVNUYxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W8nDAKKzxVNUYzNj4gPFU1RjM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5by2MAorPFU1RjM3PiA8VTVGMzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvLcyMjkKKzxVNUY0QT4gPFU1RjRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b2KMAorPFU2NDdFPiA8VTY0N0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkb4wCis8VTZEMUE+IDxVNkQxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a0mjEKKzxVNzI5Rj4gPFU3MjlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54qfMTg1Cis8VTdDRTE+IDxVN0NFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ezoTAKKzxVN0NFOD4gPFU3Q0U4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57OoMTcKKzxVN0Q3Mz4gPFU3RDczPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57WzMAorPFU3RURCPiA8VTdFREI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnu5szNDEKKzxVODUwMz4gPFU4NTAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JSDMAorPFU4OEI2PiA8VTg4QjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoorYwCis8VThCM0Q+IDxVOEIzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+isvTAKKzxVOTE3MT4gPFU5MTcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YWxMTE5OQorPFU5MUE0PiA8VTkxQTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphqQwCis8VTkxQUM+IDxVOTFBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mGrDI4Cis8VTk2NEQ+IDxVOTY0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mZjTM3MjgKKzxVNEVBND4gPFU0RUE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LqkMzA0ODUKKzxVNTBFQz4gPFU1MEVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YOsMAorPFU1NUFDPiA8VTU1QUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllqw2Cis8VTU2MDQ+IDxVNTYwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WYhDAKKzxVNTlFMz4gPFU1OUUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aejOTkKKzxVNUEwNz4gPFU1QTA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aiHMjMyMAorPFU1QjBDPiA8VTVCMEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrIw0Cis8VTVDRTc+IDxVNUNFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WzpzAKKzxVNUQ5NT4gPFU1RDk1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5baVMAorPFU2MThEPiA8VTYxOEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmho0wCis8VTYxQkY+IDxVNjFCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aGvzAKKzxVNjU1OT4gPFU2NTU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pWZMjk1MzcKKzxVNjkxMj4gPFU2OTEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qSSNDQzCis8VTZENDc+IDxVNkQ0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a1hzc0MAorPFU2RTZCPiA8VTZFNkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuaszMQorPFU2Rjg2PiA8VTZGODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvoYxMAorPFU3MTI2PiA8VTcxMjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhKYzNDk3Cis8VTcxQ0I+IDxVNzFDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHizAKKzxVNzdFQj4gPFU3N0VCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+rNDg4Cis8VTc5MDE+IDxVNzkwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ekgTMyNgorPFU3QTVBPiA8VTdBNUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqZowCis8VTgwRjY+IDxVODBGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iDtjExNTcKKzxVODFBMD4gPFU4MUEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IagMTkKKzxVODFCMj4gPFU4MUIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IayMAorPFU4MjdEPiA8VTgyN0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoib0wCis8VTgyODE+IDxVODI4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iKgTAKKzxVODMyRD4gPFU4MzJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IytNgorPFU4MzJFPiA8VTgzMkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojK4wCis8VTgzNUU+IDxVODM1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iNnjUyCis8VTgzRkQ+IDxVODNGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPvTEzCis8VTg1NDk+IDxVODU0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iViTQ2NworPFU4NkRGPiA8VTg2REY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPom584NgorPFU4N0MyPiA8VTg3QzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPon4IwCis8VTg3RUQ+IDxVODdFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ifrTEKKzxVOERFND4gPFU4REU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LekMjQyCis8VTkwQ0E+IDxVOTBDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mDijExOTUKKzxVOTQwRT4gPFU5NDBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZCOMAorPFU5QTU1PiA8VTlBNTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqZUxNQorPFU5QTg0PiA8VTlBODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqoQxNzk5Cis8VTlCQUI+IDxVOUJBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+muqzEKKzxVOUM0RT4gPFU5QzRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bGOMAorPFU5QzlCPiA8VTlDOUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsps3NworPFU5RDM1PiA8VTlEMzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptLUwCis8VTlENDE+IDxVOUQ0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m1gTAKKzxVOURDRD4gPFU5RENEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6beNMAorPFU5REU2PiA8VTlERTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpt6YwCis8VTlERUU+IDxVOURFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m3rjAKKzxVOUU2QT4gPFU5RTZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bmqNQorPFU1NkJDPiA8VTU2QkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmrwxMjUyCis8VTNBNzA+IDxVM0E3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OpsDAKKzxVM0I0Mj4gPFUzQjQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj462CMAorPFUzQ0M1PiA8VTNDQzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjs4UwCis8VTNGNzE+IDxVM0Y3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O9sTAKKzxVM0Y3Mj4gPFUzRjcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj472yMAorPFU0MDBBPiA8VTQwMEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgIowCis8VTQwNzY+IDxVNDA3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SBtjAKKzxVNDYyOD4gPFU0NjI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JioMAorPFU0NkE5PiA8VTQ2QTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmqkwCis8VTQ4MUI+IDxVNDgxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SgmzAKKzxVNDk1RT4gPFU0OTVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KWeMAorPFU0RDFCPiA8VTREMUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktJswCis8VTRGN0M+IDxVNEY3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S9vDEyNQorPFU0RkE1PiA8VTRGQTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvqUyMzcKKzxVNTBFNT4gPFU1MEU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YOlMgorPFU1MTBDPiA8VTUxMEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhIwwCis8VTUyOEI+IDxVNTI4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WKizAKKzxVNTJFQT4gPFU1MkVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YuqMAorPFU1QjQyPiA8VTVCNDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrYIwCis8VTVGQkE+IDxVNUZCQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W+ujAKKzxVNUZCQz4gPFU1RkJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b68NAorPFU2MzIyPiA8VTYzMjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjKIzCis8VTY0MDU+IDxVNjQwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aQhTEzNjAKKzxVNjU2Qj4gPFU2NTZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pWrMQorPFU2NTdEPiA8VTY1N0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlb0wCis8VTY1ODY+IDxVNjU4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWhjAKKzxVNjY0OD4gPFU2NjQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pmIMAorPFU2NjlFPiA8VTY2OUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmp4wCis8VTY2RDI+IDxVNjZEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+abkjAKKzxVNkU2Qz4gPFU2RTZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rmsMAorPFU2RjA1PiA8VTZGMDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvIUwCis8VTcwNUE+IDxVNzA1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eBmjAKKzxVNzBDND4gPFU3MEM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54OEMAorPFU3MTREPiA8VTcxNEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhY0wCis8VTcyRTE+IDxVNzJFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eLoTc4NAorPFU3NEFDPiA8VTc0QUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkqwwCis8VTc2OEU+IDxVNzY4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eajjE5NgorPFU3NkE2PiA8VTc2QTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmqYwCis8VTdCNEE+IDxVN0I0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+etijAKKzxVN0VERT4gPFU3RURFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57ueNjk5Cis8VTdGMzQ+IDxVN0YzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e8tDYwOQorPFU4MTFBPiA8VTgxMUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohJoxODU5MworPFU4MTczPiA8VTgxNzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohbMxNzUKKzxVODFFQj4gPFU4MUVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IerMAorPFU4N0RDPiA8VTg3REM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPon5wyNDkKKzxVODlEMj4gPFU4OUQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KeSMTQyNDEKKzxVOEI1MT4gPFU4QjUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K2RMAorPFU4Q0NCPiA8VThDQ0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPos4swCis8VThFN0I+IDxVOEU3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i5uzEKKzxVOEYwMz4gPFU4RjAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LyDMTI0Cis8VTk0RjA+IDxVOTRGMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mTsDU3Cis8VTk5N0E+IDxVOTk3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mlujQ1NAorPFUzODEwPiA8VTM4MTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoJAwCis8VTNCMkQ+IDxVM0IyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OsrTAKKzxVM0MzRT4gPFUzQzNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47C+MAorPFU0MDgzPiA8VTQwODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgoMwCis8VTQxOTc+IDxVNDE5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SGlzAKKzxVNDhFND4gPFU0OEU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KOkMAorPFU0QTkyPiA8VTRBOTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqpIwCis8VTUzRUI+IDxVNTNFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPqzQ1NTIwCis8VTU0NEM+IDxVNTQ0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRjDAKKzxVNTYwMj4gPFU1NjAyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZiCMAorPFU1NjI2PiA8VTU2MjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmKYwCis8VTU2NEQ+IDxVNTY0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WZjTQKKzxVNTY2RD4gPFU1NjZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZmtMAorPFU1Q0U0PiA8VTVDRTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPls6QyCis8VTVEQTA+IDxVNURBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W2oDAKKzxVNjMwRD4gPFU2MzBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oyNMAorPFU2NTRFPiA8VTY1NEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlY4wCis8VTY1QTA+IDxVNjVBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWoDAKKzxVNkVEOD4gPFU2RUQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ruYMAorPFU2RjE2PiA8VTZGMTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvJYwCis8VTZGNTA+IDxVNkY1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a9kDAKKzxVNzNEMz4gPFU3M0QzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54+TMAorPFU3NkFEPiA8VTc2QUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmq0wCis8VTdBOEM+IDxVN0E4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eqjDAKKzxVN0E5Nj4gPFU3QTk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56qWMjI2Cis8VTg1RTA+IDxVODVFMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iXoDAKKzxVODk5MD4gPFU4OTkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KaQMAorPFU4OTlBPiA8VTg5OUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoppowCis8VTg5QkE+IDxVODlCQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+imujU0MQorPFU4QTA2PiA8VThBMDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqIYwCis8VThCNjU+IDxVOEI2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+itpTAKKzxVOEY0RT4gPFU4RjRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L2OMgorPFU4RjdGPiA8VThGN0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovb8xOTQ5Cis8VThGODM+IDxVOEY4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i+gzE0Mjg2Cis8VTkxNzU+IDxVOTE3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mFtTE4MgorPFU5MUFFPiA8VTkxQUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphq44NgorPFU5MUMyPiA8VTkxQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPph4IwCis8VTU1NTE+IDxVNTU1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WVkTAKKzxVNTU4OD4gPFU1NTg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZaIMTAKKzxVNTVERj4gPFU1NURGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZefMTM2Cis8VTU4MjY+IDxVNTgyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WgpjAKKzxVNUE5OD4gPFU1QTk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aqYMAorPFU1RTZGPiA8VTVFNkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlua8wCis8VTYzQTU+IDxVNjNBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aOpTQ0ODA1Cis8VTYzQjI+IDxVNjNCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aOsjAKKzxVNjNFRD4gPFU2M0VEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+tMzAwOQorPFU2NEQxPiA8VTY0RDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmk5EwCis8VTY5MDQ+IDxVNjkwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+akhDAKKzxVNkU1RD4gPFU2RTVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rmdMAorPFU3MTZGPiA8VTcxNkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnha8wCis8VTc1OTY+IDxVNzU5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eWljIwCis8VTc2NjQ+IDxVNzY2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eZpDEKKzxVNzY4Nj4gPFU3Njg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55qGMzAxNQorPFU3QTJEPiA8VTdBMkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqK0wCis8VTdCQzA+IDxVN0JDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+evgDEwMAorPFU3RDUwPiA8VTdENTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntZAzODQKKzxVODEzQj4gPFU4MTNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IS7MAorPFU4MTQ5PiA8VTgxNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohYkwCis8VTgzRTg+IDxVODNFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPqDAKKzxVODc1ND4gPFU4NzU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J2UMAorPFU4ODU3PiA8VTg4NTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooZcxMzI3OAorPFU4OEJBPiA8VTg4QkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoorowCis8VTk1MzQ+IDxVOTUzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mUtDE0Cis8VTk2MzY+IDxVOTYzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mYtjgxNTMKKzxVOTY4RT4gPFU5NjhFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZqONDUKKzxVOUQ5Qj4gPFU5RDlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6babMAorPFUzNEQ3PiA8VTM0RDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjk5cwCis8VTM0RTQ+IDxVMzRFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OTpDAKKzxVMzUzRT4gPFUzNTNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45S+MAorPFUzNjM2PiA8VTM2MzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmLYwCis8VTM2QzM+IDxVMzZDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ObgzAKKzxVMzc0Qz4gPFUzNzRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj452MMAorPFUzN0FGPiA8VTM3QUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnq8wCis8VTM5QTI+IDxVMzlBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OmojAKKzxVM0ExNz4gPFUzQTE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46iXMAorPFUzQTI5PiA8VTNBMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqKkwCis8VTNCOUU+IDxVM0I5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OunjAKKzxVM0JBRT4gPFUzQkFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj466uMAorPFUzRTA1PiA8VTNFMDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuIUwCis8VTQwMzc+IDxVNDAzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SAtzAKKzxVNDA5Mj4gPFU0MDkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IKSMAorPFU0MDlEPiA8VTQwOUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgp0wCis8VTQwQjY+IDxVNDBCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SCtjAKKzxVNDE2NT4gPFU0MTY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IWlMAorPFU0MzE2PiA8VTQzMTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjJYwCis8VTQ1NTk+IDxVNDU1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SVmTAKKzxVNDVGQj4gPFU0NUZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Je7MAorPFU0OEUwPiA8VTQ4RTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPko6AwCis8VTQ5NUI+IDxVNDk1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SlmzAKKzxVNEM5OT4gPFU0Qzk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LKZMAorPFU1MDIyPiA8VTUwMjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgKIwCis8VTUwN0M+IDxVNTA3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WBvDAKKzxVNTA5MT4gPFU1MDkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YKRMTgKKzxVNTIyNj4gPFU1MjI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YimMAorPFU1MjI3PiA8VTUyMjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliKcwCis8VTUyM0M+IDxVNTIzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WIvDAKKzxVNTJBQj4gPFU1MkFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YqrMjM1NQorPFU1MkJDPiA8VTUyQkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlirwxCis8VTUzNjk+IDxVNTM2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WNqTAKKzxVNTM2QT4gPFU1MzZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y2qMAorPFU1NUJDPiA8VTU1QkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllrwwCis8VTVBNTU+IDxVNUE1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WplTI3OAorPFU1QjUxPiA8VTVCNTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrZEzMzQKKzxVNUM4QT4gPFU1QzhBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bKKMAorPFU1RDI4PiA8VTVEMjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltKgwCis8VTVENTE+IDxVNUQ1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W1kTAKKzxVNUQ2NT4gPFU1RDY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bWlMAorPFU1REMwPiA8VTVEQzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlt4AwCis8VTYyMkE+IDxVNjIyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aIqjMyNDUKKzxVNjJFRT4gPFU2MkVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ouuNjkKKzxVNjM3Nz4gPFU2Mzc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o23MTc1NgorPFU2NDI5PiA8VTY0Mjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkKkwCis8VTY0RjM+IDxVNjRGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aTszAKKzxVNjRGNz4gPFU2NEY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pO3MAorPFU2NjA1PiA8VTY2MDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmIUwCis8VTY3NzA+IDxVNjc3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+adsDU5NzUKKzxVNjgwOT4gPFU2ODA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qCJODUKKzxVNjg0MD4gPFU2ODQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qGAMTE0Cis8VTY4NTQ+IDxVNjg1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ahlDM3OAorPFU2OTZDPiA8VTY5NkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpawwCis8VTY5NzY+IDxVNjk3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+altjAKKzxVNjlBND4gPFU2OUE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qakMAorPFU2RDAxPiA8VTZEMDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtIE0NzQzCis8VTZEMkY+IDxVNkQyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a0rzAKKzxVNkVEMD4gPFU2RUQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ruQMAorPFU2RjU0PiA8VTZGNTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvZQyMworPFU3MDA0PiA8VTcwMDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngIQwCis8VTcyQjU+IDxVNzJCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eKtTAKKzxVNzc2Qj4gPFU3NzZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj552rNTIxCis8VTc4QTM+IDxVNzhBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eiozk0Cis8VTdBRUQ+IDxVN0FFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+errTE1NzgKKzxVN0Q1Qz4gPFU3RDVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57WcNQorPFU3REMxPiA8VTdEQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnt4EwCis8VTdERjM+IDxVN0RGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3szAKKzxVN0VEMz4gPFU3RUQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57uTNDUxNjQKKzxVN0ZBRj4gPFU3RkFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj576vMzAKKzxVODI4Mj4gPFU4MjgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IqCMTg0NjAKKzxVODNBRD4gPFU4M0FEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I6tMAorPFU4NEY1PiA8VTg0RjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPok7UwCis8VTg3MTA+IDxVODcxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ickDAKKzxVODgxOD4gPFU4ODE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KCYMAorPFU4ODFFPiA8VTg4MUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooJ4wCis8VTg4M0Q+IDxVODgzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+igvTAKKzxVOEExMD4gPFU4QTEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KiQMAorPFU4QTcwPiA8VThBNzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqbAzCis8VThBQjE+IDxVOEFCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iqsTAKKzxVOEJBNj4gPFU4QkE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K6mNTAKKzxVOEJEOD4gPFU4QkQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K+YMTEzCis8VThEOEM+IDxVOEQ4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i2jDAKKzxVOEUxNT4gPFU4RTE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LiVMAorPFU4RkZDPiA8VThGRkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPov7wxCis8VTkyNjM+IDxVOTI2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mJozAKKzxVOTM3Qj4gPFU5MzdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y27MAorPFU5NDExPiA8VTk0MTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkJEwCis8VTk4MjE+IDxVOTgyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mgoTEKKzxVOTg4OT4gPFU5ODg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aKJMzA1Cis8VTlCOUE+IDxVOUI5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mumjAKKzxVOUM5Mj4gPFU5QzkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bKSMQorPFU1OUQwPiA8VTU5RDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlp5AyMDAwMAorPFU1QThFPiA8VTVBOEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqo4wCis8VTZBOUU+IDxVNkE5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aqnjE2Cis8VTg5RTM+IDxVODlFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+inozQ2MjA2Cis8VTg5RTc+IDxVODlFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+inpzAKKzxVOThGNz4gPFU5OEY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aO3MAorPFUzNDU4PiA8VTM0NTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkZgwCis8VTM3NEY+IDxVMzc0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OdjzAKKzxVMzgzOT4gPFUzODM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46C5MAorPFUzRjhGPiA8VTNGOEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvo8wCis8VTNGQ0Q+IDxVM0ZDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O/jTAKKzxVNDA1Mz4gPFU0MDUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IGTMAorPFU0MUQyPiA8VTQxRDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkh5IwCis8VTQ1M0Y+IDxVNDUzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SUvzAKKzxVNDZGQT4gPFU0NkZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ju6MAorPFU0QkYwPiA8VTRCRjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkr7AwCis8VTRDM0E+IDxVNEMzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SwujAKKzxVNEM0ND4gPFU0QzQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LGEMAorPFU0Q0I4PiA8VTRDQjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksrgwCis8VTRFMkY+IDxVNEUyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S4rzAKKzxVNEVDQj4gPFU0RUNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LuLMTI0NDEKKzxVNTAxRj4gPFU1MDFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YCfNzE0MQorPFU1NDI0PiA8VTU0MjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkKQwCis8VTU1MzY+IDxVNTUzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUtjEKKzxVNTgzQT4gPFU1ODNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aC6MAorPFU1QzQ2PiA8VTVDNDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsYYxNQorPFU1QzRBPiA8VTVDNEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsYozMzM1Cis8VTVDOTU+IDxVNUM5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WylTAKKzxVNUU4RT4gPFU1RThFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bqOMAorPFU1RkEzPiA8VTVGQTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvqMwCis8VTYwODg+IDxVNjA4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aCiDAKKzxVNjIxMj4gPFU2MjEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oiSMzgyNQorPFU2OTUwPiA8VTY5NTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpZAwCis8VTcyOTc+IDxVNzI5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eKlzAKKzxVNzNBMD4gPFU3M0EwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj546gMTkKKzxVNzQzRT4gPFU3NDNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55C+MAorPFU3NTRDPiA8VTc1NEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlYwzNzI5NgorPFU3NTREPiA8VTc1NEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlY0wCis8VTc1QTU+IDxVNzVBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eWpTM1Cis8VTc1Q0U+IDxVNzVDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eXjjAKKzxVNzgwRT4gPFU3ODBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56COMAorPFU3RDEyPiA8VTdEMTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntJIwCis8VTdFNzI+IDxVN0U3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5sjAKKzxVODI2NT4gPFU4MjY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ImlMAorPFU4NkE3PiA8VTg2QTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomqc0Cis8VTg5MkY+IDxVODkyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ikrzIKKzxVOEFBMT4gPFU4QUExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KqhMQorPFU4QkVCPiA8VThCRUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor6s1OTMKKzxVOEVBND4gPFU4RUE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LqkMAorPFU5Mzg1PiA8VTkzODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjoUwCis8VTlBQjE+IDxVOUFCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mqsTAKKzxVOUI0MD4gPFU5QjQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a2AMAorPFU5QjZBPiA8VTlCNkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpraowCis8VTRFQ0E+IDxVNEVDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S7ijQxNzU4Cis8VTU3RDA+IDxVNTdEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfkDAKKzxVNUQ5Qz4gPFU1RDlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bacMAorPFU1REZFPiA8VTVERkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlt74yNTI4Cis8VTYwQ0Q+IDxVNjBDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aDjTAKKzxVNjVBND4gPFU2NUE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pakMjIwNQorPFU2RDI1PiA8VTZEMjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtKU0MjExCis8VTczRDI+IDxVNzNEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ePkjAKKzxVNzQwRT4gPFU3NDBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55COMAorPFU3NDY3PiA8VTc0Njc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkacwCis8VTdCNEI+IDxVN0I0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+etizE3NzcKKzxVN0QxRj4gPFU3RDFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57SfMAorPFU4MzU1PiA8VTgzNTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojZUwCis8VTgzRjM+IDxVODNGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPszAKKzxVODg3Rj4gPFU4ODdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KG/MzQKKzxVODk1Rj4gPFU4OTVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KWfNzYyCis8VTg5RDQ+IDxVODlEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+inlDAKKzxVOTFEMT4gPFU5MUQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YeRMzE3NTEKKzxVOTQ4NT4gPFU5NDg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZKFMTEKKzxVOUU3Nj4gPFU5RTc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bm2MAorPFU5RUM1PiA8VTlFQzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpu4UwCis8VTM3N0I+IDxVMzc3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OduzAKKzxVM0IxMD4gPFUzQjEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46yQMAorPFUzQkY4PiA8VTNCRjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjr7gwCis8VTNFNEY+IDxVM0U0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O5jzAKKzxVNDQzNj4gPFU0NDM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JC2MAorPFU0NEJBPiA8VTQ0QkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkrowCis8VTQ5MTA+IDxVNDkxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SkkDAKKzxVNDk0Nj4gPFU0OTQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KWGMAorPFU0QjU5PiA8VTRCNTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrZkwCis8VTRFQzU+IDxVNEVDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S7hTE1MzI4Cis8VTRGQUQ+IDxVNEZBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+rTAKKzxVNTBDNT4gPFU1MEM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YOFNjEKKzxVNTExOD4gPFU1MTE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YSYNTAKKzxVNTM3QT4gPFU1MzdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y26MjIKKzxVNTNBQT4gPFU1M0FBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y6qMAorPFU1ODA3PiA8VTU4MDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloIc5OAorPFU1ODkwPiA8VTU4OTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlopAwCis8VTVERjk+IDxVNURGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W3uTAKKzxVNUVEMT4gPFU1RUQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5buRMgorPFU2MTZDPiA8VTYxNkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhawwCis8VTY5RkY+IDxVNjlGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+anvzM0Cis8VTZGMEM+IDxVNkYwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a8jDAKKzxVNzQ3RT4gPFU3NDdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55G+MjgzCis8VTc2RTE+IDxVNzZFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eboTEzNAorPFU3RDI3PiA8VTdEMjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntKcyMjM1NAorPFU3RENBPiA8VTdEQ0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnt4oxODEKKzxVODNFQj4gPFU4M0VCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I+rMQorPFU4OUIyPiA8VTg5QjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoprIxCis8VThCMzk+IDxVOEIzOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+isuTE2Cis8VThDMjg+IDxVOEMyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwqDIwOTQKKzxVOTMyNj4gPFU5MzI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YymMQorPFU5NTI2PiA8VTk1MjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplKYyOTM0Cis8VTk5NDk+IDxVOTk0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mliTAKKzxVOTk5MT4gPFU5OTkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aaRMjcKKzxVM0EzNz4gPFUzQTM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46i3MAorPFUzQjFDPiA8VTNCMUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrJwwCis8VTNCRjI+IDxVM0JGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OvsjAKKzxVM0MzOT4gPFUzQzM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47C5MAorPFUzQzQ4PiA8VTNDNDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsYgwCis8VTNEMDY+IDxVM0QwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O0hjAKKzxVM0RBNj4gPFUzREE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47amMAorPFUzREIzPiA8VTNEQjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtrMwCis8VTQwMDY+IDxVNDAwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SAhjAKKzxVNDFBRT4gPFU0MUFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IauMAorPFU0MkVFPiA8VTQyRUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPki64wCis8VTQzMUQ+IDxVNDMxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SMnTAKKzxVNDQ2ND4gPFU0NDY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JGkMAorPFU0NTkwPiA8VTQ1OTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklpAwCis8VTQ1RUY+IDxVNDVFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SXrzAKKzxVNDc3Mj4gPFU0NzcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J2yMAorPFU0QUY0PiA8VTRBRjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkq7QwCis8VTREOTY+IDxVNEQ5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S2ljAKKzxVNEYxMj4gPFU0RjEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LySMAorPFU1MEY4PiA8VTUwRjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlg7gwCis8VTUxREE+IDxVNTFEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WHmjAKKzxVNTJBND4gPFU1MkE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YqkMAorPFU1MkMxPiA8VTUyQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPli4ExNgorPFU1NTJCPiA8VTU1MkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllKswCis8VTU2NjQ+IDxVNTY2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WZpDE4NgorPFU1NjhEPiA8VTU2OEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmo0wCis8VTU5OTc+IDxVNTk5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WmlzE1MgorPFU1QUU0PiA8VTVBRTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlq6QwCis8VTVCMjc+IDxVNUIyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WspzAKKzxVNUJENj4gPFU1QkQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a+WMAorPFU1QzNEPiA8VTVDM0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsL0yMjgwOAorPFU2NDIyPiA8VTY0MjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkKIwCis8VTY2NDk+IDxVNjY0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aZiTEKKzxVNjY0Qj4gPFU2NjRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pmLMTkzMgorPFU2QjRGPiA8VTZCNEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrY8wCis8VTZCQTM+IDxVNkJBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+auozEKKzxVNkQ1NT4gPFU2RDU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rWVMAorPFU2RDc4PiA8VTZENzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtbgxNjU4Cis8VTZFOEQ+IDxVNkU4RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a6jTAKKzxVNkZDNT4gPFU2RkM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r+FMAorPFU2RkRDPiA8VTZGREM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv5wwCis8VTcwRUM+IDxVNzBFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eDrDI4MgorPFU3MUZDPiA8VTcxRkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnh7w0Cis8VTc0Njg+IDxVNzQ2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eRqDAKKzxVNzRBMT4gPFU3NEExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55KhMAorPFU3NEI2PiA8VTc0QjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkrYwCis8VTc2M0Q+IDxVNzYzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eYvTAKKzxVNzk3Mj4gPFU3OTcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56WyMAorPFU3OTgxPiA8VTc5ODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpoE4MjY0Cis8VTdFMDk+IDxVN0UwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e4iTAKKzxVN0YxOT4gPFU3RjE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57yZNjYKKzxVODBCNT4gPFU4MEI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IK1MAorPFU4MzY5PiA8VTgzNjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojakxNAorPFU4NEYzPiA8VTg0RjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPok7M4Cis8VTg1Q0U+IDxVODVDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iXjjAKKzxVODlEMD4gPFU4OUQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KeQMTA0Cis8VThDRUU+IDxVOENFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+izrjAKKzxVOEQxMD4gPFU4RDEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LSQMAorPFU4RDQ2PiA8VThENDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotYYwCis8VThGRDE+IDxVOEZEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i/kTI4NjAwCis8VThGREI+IDxVOEZEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i/mzkzNTM1Cis8VTkwMzI+IDxVOTAzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mAsjU4NgorPFU5MkRGPiA8VTkyREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpi58wCis8VTk3NzM+IDxVOTc3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mdszU3MAorPFU5RjdEPiA8VTlGN0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvb0wCis8VTRFQUM+IDxVNEVBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6rDI0NzE0Cis8VTRFQjA+IDxVNEVCMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6sDAKKzxVNEVGMT4gPFU0RUYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LuxMAorPFU1MTYyPiA8VTUxNjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhaI3NDMKKzxVNTc1NT4gPFU1NzU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z2VMAorPFU1NzU5PiA8VTU3NTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnZkwCis8VTVBNUI+IDxVNUE1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WpmzAKKzxVNURFMD4gPFU1REUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5begMAorPFU2MENBPiA8VTYwQ0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmg4oxNzIwMworPFU2NUNDPiA8VTY1Q0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPml4wxMzgKKzxVNjVDRD4gPFU2NUNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5peNMQorPFU2Njc2PiA8VTY2NzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmbYyOTk4Cis8VTZDRkU+IDxVNkNGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+azvjY4Cis8VTZEODc+IDxVNkQ4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a2hzIKKzxVNzMwND4gPFU3MzA0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54yEMQorPFU3NzVCPiA8VTc3NUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnZsxNjk0MgorPFU3OUQ0PiA8VTc5RDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnp5QwCis8VTdBMDk+IDxVN0EwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eoiTAKKzxVN0I5MD4gPFU3QjkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj566QMjgKKzxVN0NCMz4gPFU3Q0IzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57KzMjQKKzxVN0NCRT4gPFU3Q0JFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57K+ODA2NzEKKzxVN0Q0Qz4gPFU3RDRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57WMMAorPFU3RDkzPiA8VTdEOTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntpM3OTEKKzxVN0VDRj4gPFU3RUNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57uPMTA2MTE3Cis8VTgwNTk+IDxVODA1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iBmTAKKzxVODE0OD4gPFU4MTQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IWIMAorPFU4MzBFPiA8VTgzMEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojI4zNjEKKzxVODM0Nj4gPFU4MzQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I2GOTM5Cis8VTgzNEE+IDxVODM0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iNijMKKzxVODM5Nj4gPFU4Mzk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I6WMworPFU4M0MxPiA8VTgzQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoj4ExNDM2Cis8VTg0NEY+IDxVODQ0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iRjzAKKzxVOUE1QT4gPFU5QTVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6amaMTM4Cis8VTlCRTg+IDxVOUJFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mvqDEKKzxVOUNCOD4gPFU5Q0I4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bK4MjAwCis8VTlENUI+IDxVOUQ1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m1mzAKKzxVOUQ4MT4gPFU5RDgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6baBMAorPFU5RDg0PiA8VTlEODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptoQwCis8VTlFOTY+IDxVOUU5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6ljAKKzxVOUVBMD4gPFU5RUEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bqgMAorPFU5RjMxPiA8VTlGMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvLEwCis8VUZBMUQ+IDxVRkExRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI++onTAKKzxVMzYyQj4gPFUzNjJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45irMAorPFU0NzE4PiA8VTQ3MTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknJgwCis8VTRFOTU+IDxVNEU5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6lTQ5OTEKKzxVNTEwNj4gPFU1MTA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YSGNTgKKzxVNTIyRD4gPFU1MjJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YitMQorPFU1MjQ0PiA8VTUyNDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliYQxCis8VTVCOTE+IDxVNUI5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WukTAKKzxVNjFBQz4gPFU2MUFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oasMzQxCis8VTYxQkM+IDxVNjFCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aGvDAKKzxVNjY2Rj4gPFU2NjZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pmvMTI2MTgKKzxVNjZCQj4gPFU2NkJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pq7MworPFU2QzZDPiA8VTZDNkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsawwCis8VTcwQzM+IDxVNzBDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eDgzkKKzxVNzBGND4gPFU3MEY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54O0MAorPFU3MURCPiA8VTcxREI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnh5swCis8VTc0OUY+IDxVNzQ5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eSnzI2Cis8VTc0QTU+IDxVNzRBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eSpTAKKzxVN0E3RD4gPFU3QTdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56m9MAorPFU4MEJDPiA8VTgwQkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogrwyCis8VTg3RkM+IDxVODdGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ifvDAKKzxVOEI2Nj4gPFU4QjY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K2mMTQ2MDIKKzxVOTYzMT4gPFU5NjMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZixNDg1Cis8VTM1NEI+IDxVMzU0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OVizAKKzxVMzhBMz4gPFUzOEEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46KjMAorPFUzOENGPiA8VTM4Q0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjo48wCis8VTNCMEM+IDxVM0IwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OsjDAKKzxVM0Q3RT4gPFUzRDdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47W+MAorPFUzRTc1PiA8VTNFNzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjubUwCis8VTQ1MTQ+IDxVNDUxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SUlDAKKzxVNDg1Nj4gPFU0ODU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KGWMAorPFU0RDVFPiA8VTRENUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktZ4wCis8VTRGRDM+IDxVNEZEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S/kzAKKzxVNTAxRT4gPFU1MDFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YCeMAorPFU1MEI5PiA8VTUwQjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgrkwCis8VTUxQzA+IDxVNTFDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WHgDU1NzYKKzxVNTFDOD4gPFU1MUM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YeIMQorPFU1MUNBPiA8VTUxQ0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlh4owCis8VTUyQjI+IDxVNTJCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WKsjQwMDAKKzxVNTg4Mz4gPFU1ODgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aKDMTM3NjMKKzxVNTk4Qz4gPFU1OThDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aaMMAorPFU1QTU5PiA8VTVBNTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqZkwCis8VTVBNjc+IDxVNUE2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WppzIKKzxVNUYyQT4gPFU1RjJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5byqNgorPFU1RjMzPiA8VTVGMzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvLMwCis8VTVGODQ+IDxVNUY4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W+hDQ5MzkKKzxVNUY5MT4gPFU1RjkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b6RMzcKKzxVNjRDRj4gPFU2NENGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pOPMAorPFU2NTZDPiA8VTY1NkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlaw1NDgwCis8VTY2RDQ+IDxVNjZEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ablDAKKzxVNjg3MT4gPFU2ODcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qGxMAorPFU2OEI3PiA8VTY4Qjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmorcwCis8VTZENDQ+IDxVNkQ0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a1hDAKKzxVNkRFOD4gPFU2REU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5reoNTEKKzxVNkZFQT4gPFU2RkVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r+qMAorPFU3MDFFPiA8VTcwMUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngJ4wCis8VTczNEQ+IDxVNzM0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eNjTEwCis8VTc1Qzk+IDxVNzVDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eXiTIyNAorPFU3NUQ5PiA8VTc1RDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnl5kwCis8VTdBREU+IDxVN0FERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ernjMzOTUKKzxVN0FERj4gPFU3QURGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56ufMTc5MDgKKzxVN0FFNz4gPFU3QUU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56unMAorPFU3QUVCPiA8VTdBRUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnq6swCis8VTdBRjY+IDxVN0FGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ertjM1Cis8VTdBRjg+IDxVN0FGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eruDAKKzxVODBFQj4gPFU4MEVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IOrMzgKKzxVODExQj4gPFU4MTFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ISbMAorPFU4NDVEPiA8VTg0NUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokZ0wCis8VThBQTk+IDxVOEFBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iqqTAKKzxVOEUwMT4gPFU4RTAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LiBMAorPFU4RkYzPiA8VThGRjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPov7MyMjAKKzxVOTAxNT4gPFU5MDE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YCVOQorPFU5M0UxPiA8VTkzRTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpj6E1NAorPFU5NTVDPiA8VTk1NUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplZw4MjA0Cis8VTk2NDk+IDxVOTY0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mZiTYKKzxVOTc1Mz4gPFU5NzUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z2TMTM4Cis8VTk3NTY+IDxVOTc1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mdljE4NTcKKzxVOTc1OT4gPFU5NzU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z2ZMjIxMjUKKzxVOTc1QT4gPFU5NzVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z2aMAorPFU5NzVDPiA8VTk3NUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnZwyMDEKKzxVRkExQz4gPFVGQTFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj76icMAorPFU1MTgyPiA8VTUxODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhoIzCis8VTUxOEI+IDxVNTE4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WGizEKKzxVNTc3MD4gPFU1NzcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z2wMQorPFU1N0E3PiA8VTU3QTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnqc1Cis8VTU3REI+IDxVNTdEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfmzAKKzxVNjI0Mz4gPFU2MjQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5omDMworPFU3RDQ1PiA8VTdENDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntYUxCis8VTg2MEY+IDxVODYwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iYjzAKKzxVODYxND4gPFU4NjE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JiUMAorPFU5OUM5PiA8VTk5Qzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpp4k5Cis8VTk5RUI+IDxVOTlFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mnqzAKKzxVMzRDRj4gPFUzNENGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45OPMAorPFUzNUE1PiA8VTM1QTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlqUwCis8VTM4QTA+IDxVMzhBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OioDAKKzxVMzkyRj4gPFUzOTJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46SvMAorPFUzREQ3PiA8VTNERDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjt5cwCis8VTNERTE+IDxVM0RFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O3oTAKKzxVNDMzOT4gPFU0MzM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Iy5MAorPFU0NDAzPiA8VTQ0MDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkIMwCis8VTQ4OUI+IDxVNDg5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SimzAKKzxVNEZCMD4gPFU0RkIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L6wMAorPFU1MEQyPiA8VTUwRDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlg5IwCis8VTUxOEY+IDxVNTE4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WGjzAKKzxVNTZFNz4gPFU1NkU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZunMAorPFU1RTVDPiA8VTVFNUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluZwwCis8VTZDQzI+IDxVNkNDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+azgjIKKzxVNkY4Mz4gPFU2RjgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r6DMAorPFU3MEFGPiA8VTcwQUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngq81MzEKKzxVNzBGMT4gPFU3MEYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54OxMAorPFU3MTVBPiA8VTcxNUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhZowCis8VTcxNUI+IDxVNzE1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eFmzAKKzxVNzFCMj4gPFU3MUIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54ayMAorPFU3NjlCPiA8VTc2OUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmpswCis8VTdBOTg+IDxVN0E5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eqmDUyNworPFU3RDk3PiA8VTdEOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntpcwCis8VTg5Mjc+IDxVODkyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ikpzAKKzxVOEZFNT4gPFU4RkU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L+lMTk1Cis8VTkwMDg+IDxVOTAwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mAiDAKKzxVOTg0OD4gPFU5ODQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aGIMAorPFU5ODhFPiA8VTk4OEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoo4wCis8VTM0NEI+IDxVMzQ0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ORizAKKzxVNEUyOT4gPFU0RTI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LipMAorPFU1MkZDPiA8VTUyRkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPli7wwCis8VTU1N0U+IDxVNTU3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WVvjE3MQorPFU2M0MyPiA8VTYzQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmj4IwCis8VTYzRUE+IDxVNjNFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aPqjEwMTgKKzxVNjNFQj4gPFU2M0VCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+rMAorPFU2NzNCPiA8VTY3M0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnLswCis8VTZBMUI+IDxVNkExQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aomzAKKzxVNzI1RT4gPFU3MjVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54meMQorPFU3QTc2PiA8VTdBNzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqbYyMDQ1NworPFU3Q0ZBPiA8VTdDRkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPns7owCis8VTdDRkU+IDxVN0NGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ezvjI0Cis8VTdFQTA+IDxVN0VBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e6oDIzMDIKKzxVODQxQj4gPFU4NDFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JCbMAorPFU4OUQzPiA8VTg5RDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPop5MxCis8VThENzM+IDxVOEQ3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i1szEyMgorPFU4RjQ3PiA8VThGNDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovYcwCis8VTk2MDQ+IDxVOTYwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mYhDQwCis8VTlCMEY+IDxVOUIwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+msjzYKKzxVOUIyRT4gPFU5QjJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ayuMAorPFU5Q0U5PiA8VTlDRTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPps6kzCis8VTlFMjA+IDxVOUUyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m4oDE2NQorPFUzRUI1PiA8VTNFQjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjurUwCis8VTM4NzE+IDxVMzg3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OhsTAKKzxVNEU0NT4gPFU0RTQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LmFMjExNTIKKzxVNEU0Nj4gPFU0RTQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LmGMAorPFU0RTVEPiA8VTRFNUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuZ0yMDc0MworPFU1OTdBPiA8VTU5N0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpbowCis8VTcwNzg+IDxVNzA3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eBuDQ2Cis8VTczOTY+IDxVNzM5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eOljU1Cis8VTdEMjQ+IDxVN0QyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e0pDAKKzxVODIwRj4gPFU4MjBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IiPMAorPFU5MTUyPiA8VTkxNTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphZIyNDI0MgorPFU5NTc5PiA8VTk1Nzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplbkwCis8VTk3RUQ+IDxVOTdFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mfrTExNQorPFU5N0VFPiA8VTk3RUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpn64xCis8VTM4MDc+IDxVMzgwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OghzAKKzxVMzlENT4gPFUzOUQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46eVMAorPFUzQTQ2PiA8VTNBNDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqYYwCis8VTNDODM+IDxVM0M4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OygzAKKzxVM0RBRD4gPFUzREFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47atMAorPFUzRUE5PiA8VTNFQTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuqkwCis8VTQxNjI+IDxVNDE2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SFojAKKzxVNDE5Mj4gPFU0MTkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IaSMAorPFU0Mjg2PiA8VTQyODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkioYwCis8VTQyOTg+IDxVNDI5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SKmDAKKzxVNDREOD4gPFU0NEQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JOYMAorPFU0NkVFPiA8VTQ2RUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkm64wCis8VTQ4NDI+IDxVNDg0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ShgjAKKzxVNENDRT4gPFU0Q0NFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LOOMAorPFU0Q0Q0PiA8VTRDRDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPks5QwCis8VTUwMDM+IDxVNTAwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAgzAKKzxVNTBFNj4gPFU1MEU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YOmMQorPFU1MzEzPiA8VTUzMTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljJMwCis8VTUzMUI+IDxVNTMxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WMmzAKKzxVNTMzNj4gPFU1MzM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Yy2MAorPFU1M0E5PiA8VTUzQTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljqk4MgorPFU1NDhFPiA8VTU0OEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlko4zMjEKKzxVNUFBOD4gPFU1QUE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aqoMAorPFU1QzMxPiA8VTVDMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsLEyNzM0ODEKKzxVNUVDND4gPFU1RUM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5buEMworPFU1RUNGPiA8VTVFQ0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlu48wCis8VTVFRDA+IDxVNUVEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W7kDAKKzxVNjE2Nj4gPFU2MTY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oWmMAorPFU2MzQ0PiA8VTYzNDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjYQwCis8VTY1NTE+IDxVNjU1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aVkTkxMTgKKzxVNjVFNz4gPFU2NUU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5penMTEzODYKKzxVNjdFOT4gPFU2N0U5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p+pMTA2Cis8VTY3RkU+IDxVNjdGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+afvjAKKzxVNjg1NT4gPFU2ODU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qGVMTcKKzxVNzU5QT4gPFU3NTlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55aaNzM3Cis8VTgxRkM+IDxVODFGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iHvDkzCis8VTgyMDU+IDxVODIwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iIhTQzMTUKKzxVODIwQT4gPFU4MjBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IiKODEKKzxVOUJFNj4gPFU5QkU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a+mMAorPFU5REYyPiA8VTlERjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpt7IwCis8VTlFNkI+IDxVOUU2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m5qzgxCis8VTlFOTQ+IDxVOUU5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6lDAKKzxVOUY2OD4gPFU5RjY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b2oMAorPFU0RkYxPiA8VTRGRjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkv7EyMjU1Cis8VTUwMzY+IDxVNTAzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAtjAKKzxVNTFFNT4gPFU1MUU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YelMAorPFU1MjFGPiA8VTUyMUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliJ8wCis8VTVBMzU+IDxVNUEzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WotTAKKzxVNUE2RT4gPFU1QTZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5amuMAorPFU1QzQ1PiA8VTVDNDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsYUxMjU5NgorPFU1RDBDPiA8VTVEMEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltIwwCis8VTYyODU+IDxVNjI4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aKhTAKKzxVNjJEOD4gPFU2MkQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ouYMTYwMQorPFU2MkUwPiA8VTYyRTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmi6AwCis8VTYzQUM+IDxVNjNBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aOrDE3OQorPFU2M0RGPiA8VTYzREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmj58wCis8VTY0REE+IDxVNjREQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aTmjEzNAorPFU2NUFBPiA8VTY1QUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlqowCis8VTY5MTA+IDxVNjkxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+akkDQKKzxVNkRCQT4gPFU2REJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ra6MAorPFU3MkQ5PiA8VTcyRDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPni5k3MAorPFU3NDFBPiA8VTc0MUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkJoyCis8VTc1QkQ+IDxVNzVCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eWvTk5NworPFU3NUMwPiA8VTc1QzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnl4AwCis8VTc3MTc+IDxVNzcxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eclzAKKzxVN0Y1RD4gPFU3RjVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj572dMAorPFU4MTUyPiA8VTgxNTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohZIwCis8VTgyNEQ+IDxVODI0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iJjTAKKzxVODJGND4gPFU4MkY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Iu0NAorPFU4NDQ1PiA8VTg0NDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokYUwCis8VTg3MUI+IDxVODcxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+icmzAKKzxVODhGRT4gPFU4OEZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KO+ODkKKzxVOEQ4ND4gPFU4RDg0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LaEMTU1Cis8VThERDQ+IDxVOEREND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i3lDAKKzxVOEUxOT4gPFU4RTE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LiZMAorPFU4RjBCPiA8VThGMEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovIswCis8VTkyRTY+IDxVOTJFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mLpjAKKzxVOTJGOD4gPFU5MkY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Yu4MQorPFU5NTE0PiA8VTk1MTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplJQxMQorPFU5NkNFPiA8VTk2Q0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpm44xOAorPFU5N0EwPiA8VTk3QTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnqA1NjQKKzxVOTdBQj4gPFU5N0FCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z6rMQorPFU5OUQyPiA8VTk5RDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpp5IxCis8VTlBNzk+IDxVOUE3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mpuTUyMworPFU5Qjg4PiA8VTlCODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprogwCis8VTlEMjE+IDxVOUQyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m0oTAKKzxVOUQ4Qj4gPFU5RDhCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6baLMAorPFUzNjMyPiA8VTM2MzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmLIwCis8VTM5NEM+IDxVMzk0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OljDAKKzxVM0E3ND4gPFUzQTc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46m0MAorPFUzQjgyPiA8VTNCODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjroIwCis8VTNGNjQ+IDxVM0Y2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O9pDAKKzxVNDJGMD4gPFU0MkYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IuwMAorPFU0M0YxPiA8VTQzRjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkj7EwCis8VTQ1NkU+IDxVNDU2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SVrjAKKzxVNDVDNz4gPFU0NUM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JeHMAorPFU0NzJGPiA8VTQ3MkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknK8wCis8VTQ4NUU+IDxVNDg1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ShnjAKKzxVNDkwRT4gPFU0OTBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KSOMAorPFU0QTk1PiA8VTRBOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqpUwCis8VTRDMkM+IDxVNEMyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SwrDAKKzxVNEM2MT4gPFU0QzYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LGhMAorPFU0RDE3PiA8VTREMTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktJcwCis8VTRGQjc+IDxVNEZCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+tzMKKzxVNTMwQT4gPFU1MzBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YyKMAorPFU1QTQ1PiA8VTVBNDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqYUwCis8VTVDNDA+IDxVNUM0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WxgDE4NjIxCis8VTVEQzg+IDxVNURDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W3iDAKKzxVNjMzNj4gPFU2MzM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oy2MAorPFU2OEFFPiA8VTY4QUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoq4wCis8VTY5MDg+IDxVNjkwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+akiDIKKzxVNkE1OD4gPFU2QTU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qmYMzc1Cis8VTZBOEI+IDxVNkE4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aqizAKKzxVNkJFOT4gPFU2QkU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q+pMAorPFU2QkYxPiA8VTZCRjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmr7EwCis8VTZDRTY+IDxVNkNFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+azpjAKKzxVNkRENz4gPFU2REQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5reXMAorPFU2RTY4PiA8VTZFNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuagwCis8VTcxMTc+IDxVNzExNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eElzkKKzxVNzI5MT4gPFU3MjkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54qRMAorPFU3MkNBPiA8VTcyQ0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPni4owCis8VTdCQTQ+IDxVN0JBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eupDAKKzxVN0NCNz4gPFU3Q0I3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57K3MAorPFU4M0NBPiA8VTgzQ0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoj4oxNzUzCis8VTg2MUM+IDxVODYxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iYnDAKKzxVOEFDQT4gPFU4QUNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KuKMAorPFU4RDlDPiA8VThEOUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotpwwCis8VThERkM+IDxVOERGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i3vDAKKzxVOEUxOD4gPFU4RTE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LiYMAorPFU4RTZCPiA8VThFNkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouaswCis8VThFQjk+IDxVOEVCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6uTAKKzxVOEYwMj4gPFU4RjAyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LyCMAorPFU5MEY5PiA8VTkwRjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg7kwCis8VTkxMTM+IDxVOTExMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mEkzAKKzxVOTY3MT4gPFU5NjcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZmxMAorPFU5OUY2PiA8VTk5RjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpp7YwCis8VTlBNjc+IDxVOUE2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mppzAKKzxVOUQ1OT4gPFU5RDU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bWZMAorPFU5RDc0PiA8VTlENzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptbQwCis8VTlEQUE+IDxVOURBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m2qjEKKzxVOUYzMz4gPFU5RjMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6byzMAorPFU0MENBPiA8VTQwQ0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkg4owCis8VTQxMTQ+IDxVNDExND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SElDAKKzxVNDE1Mz4gPFU0MTUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IWTMAorPFU0MjJFPiA8VTQyMkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiK4wCis8VTQ4Qjk+IDxVNDhCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SiuTAKKzxVNERBNT4gPFU0REE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LalMAorPFU0RTNFPiA8VTRFM0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuL4xNjMyMgorPFU1NDgwPiA8VTU0ODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkoAzMjQKKzxVNUYwNj4gPFU1RjA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5byGMAorPFU2MzE5PiA8VTYzMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjJkwCis8VTY0RTc+IDxVNjRFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aTpzEKKzxVNjkwNz4gPFU2OTA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qSHMAorPFU2OTQwPiA8VTY5NDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpYAwCis8VTY5ODk+IDxVNjk4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+amiTQ3Cis8VTY5OTg+IDxVNjk5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ammDQKKzxVNkFGOD4gPFU2QUY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qu4MQorPFU2QjA1PiA8VTZCMDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrIUwCis8VTZDQUU+IDxVNkNBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ayrjcwOAorPFU3N0U5PiA8VTc3RTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnn6kyMDQ5Cis8VTdBRDg+IDxVN0FEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ermDAKKzxVN0I2NT4gPFU3QjY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj562lNQorPFU4MjA5PiA8VTgyMDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiIkxMTAKKzxVODM5Mj4gPFU4MzkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I6SMjkKKzxVODQ5Rj4gPFU4NDlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JKfNAorPFU4NzdBPiA8VTg3N0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonboyCis8VTg4OTM+IDxVODg5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iikzAKKzxVOEREOT4gPFU4REQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LeZMAorPFU4RTNEPiA8VThFM0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouL0xMzYKKzxVOUY1Rj4gPFU5RjVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b2fMAorPFU5RjgzPiA8VTlGODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvoM0NworPFUzNjBDPiA8VTM2MEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmIwwCis8VTM3MTg+IDxVMzcxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OcmDAKKzxVMzdBQj4gPFUzN0FCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj456rMAorPFUzODJBPiA8VTM4MkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoKowCis8VTNBM0Y+IDxVM0EzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OovzAKKzxVM0E0MD4gPFUzQTQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46mAMAorPFUzQjJDPiA8VTNCMkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrKwwCis8VTNDRTU+IDxVM0NFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OzpTAKKzxVNDFCRD4gPFU0MUJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ia9MAorPFU0NkVGPiA8VTQ2RUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkm68wCis8VTQ4RjA+IDxVNDhGMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SjsDAKKzxVNEM1Rj4gPFU0QzVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LGfMAorPFU0RDU1PiA8VTRENTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktZUwCis8VTREOTk+IDxVNEQ5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S2mTAKKzxVNEY2Mj4gPFU0RjYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L2iMgorPFU1MDI4PiA8VTUwMjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgKg2MworPFU1MTc3PiA8VTUxNzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhbcxODEwMQorPFU1MUEzPiA8VTUxQTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhqMwCis8VTUyNjc+IDxVNTI2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WJpzc3MzkKKzxVNTI4Nz4gPFU1Mjg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YqHNTcKKzxVNTJFRT4gPFU1MkVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YuuMAorPFU1M0U1PiA8VTUzRTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlj6UyMzM3MQorPFU1N0U3PiA8VTU3RTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPln6cwCis8VTU3RkU+IDxVNTdGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfvjAKKzxVNThDOT4gPFU1OEM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aOJMAorPFU1OUQ2PiA8VTU5RDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlp5YwCis8VTVCRTA+IDxVNUJFMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WvoDAKKzxVNUM2Nj4gPFU1QzY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bGmNgorPFU1QzY4PiA8VTVDNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsagwCis8VTVDQTA+IDxVNUNBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WyoDAKKzxVNURFOD4gPFU1REU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5beoNzM3NQorPFU2MDA3PiA8VTYwMDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgIcwCis8VTYwMUE+IDxVNjAxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aAmjAKKzxVNjBFNz4gPFU2MEU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oOnMzExOAorPFU2MTMzPiA8VTYxMzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhLMwCis8VTYxRkM+IDxVNjFGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aHvDI1Cis8VTYyRDI+IDxVNjJEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aLkjU0NDEKKzxVNjM2RT4gPFU2MzZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o2uMjU1NDgKKzxVNjYxQj4gPFU2NjFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pibMAorPFU2QjZCPiA8VTZCNkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmraswCis8VTZEMzA+IDxVNkQzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a0sDAKKzxVNkZCRD4gPFU2RkJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r69MAorPFU3MEFDPiA8VTcwQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngqwxNTEKKzxVNzEyMz4gPFU3MTIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54SjMAorPFU3MjhCPiA8VTcyOEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniosxCis8VTc3QkY+IDxVNzdCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eevzIyMgorPFU3OUVDPiA8VTc5RUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnp6wwCis8VTdBQUQ+IDxVN0FBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eqrTMKKzxVN0FCNj4gPFU3QUI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56q2MAorPFU3QzM0PiA8VTdDMzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsLQxCis8VTdDOTQ+IDxVN0M5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eylDAKKzxVN0Q0Nz4gPFU3RDQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57WHNQorPFU4MDFGPiA8VTgwMUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogJ8wCis8VTgwNUE+IDxVODA1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iBmjUxMzcKKzxVODJFMz4gPFU4MkUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IujMjIKKzxVODNGOT4gPFU4M0Y5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I+5MworPFU4NjYxPiA8VTg2NjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomaEwCis8VTg2Qjc+IDxVODZCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iatzAKKzxVOEE0RT4gPFU4QTRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KmOMAorPFU4QkI1PiA8VThCQjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorrUxMQorPFU4Qzk3PiA8VThDOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPospcwCis8VThEREQ+IDxVOERERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i3nTQ2NjkKKzxVOEUxRT4gPFU4RTFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LieMjExCis8VThFODY+IDxVOEU4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6hjAKKzxVOTA3RD4gPFU5MDdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YG9MTAxCis8VTkwQUQ+IDxVOTBBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mCrTAKKzxVOTFCNT4gPFU5MUI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ya1MAorPFU5MjQ1PiA8VTkyNDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiYUxCis8VTk0M0I+IDxVOTQzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mQuzAKKzxVOTQ5Qz4gPFU5NDlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZKcMzAKKzxVOTUyRj4gPFU5NTJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZSvMzE0Cis8VTk4QjY+IDxVOThCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mitjAKKzxVOThEMz4gPFU5OEQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aOTNjUKKzxVOTlDRj4gPFU5OUNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aePMAorPFU5QjhEPiA8VTlCOEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpro0wCis8VTlCOTQ+IDxVOUI5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mulDAKKzxVOUM4Rj4gPFU5QzhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bKPMAorPFU1Mjc2PiA8VTUyNzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlibYwCis8VTUyQ0M+IDxVNTJDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WLjDAKKzxVNTJFQz4gPFU1MkVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YusMAorPFU1NzBGPiA8VTU3MEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnI8yCis8VTU5RTI+IDxVNTlFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WnojAKKzxVNUExRj4gPFU1QTFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aifNjgzCis8VTYzNTA+IDxVNjM1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aNkDEwMzUKKzxVNjcxOD4gPFU2NzE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pyYMAorPFU2RDkzPiA8VTZEOTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtpMyNTQKKzxVNzc0Mz4gPFU3NzQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj552DNDcKKzxVODEyNz4gPFU4MTI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ISnMAorPFU4ODMyPiA8VTg4MzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooLIyNworPFU4OEQwPiA8VTg4RDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo5AwCis8VTkzQjg+IDxVOTNCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mOuDAKKzxVOTQyQj4gPFU5NDJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZCrMAorPFU5NTRDPiA8VTk1NEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplYwxMzIKKzxVOUQ1MT4gPFU5RDUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bWRNQorPFU5RTQzPiA8VTlFNDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuYMyMDgKKzxVM0RGNz4gPFUzREY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47e3MAorPFU1Mzc3PiA8VTUzNzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljbc0NTM0Cis8VTU3RTI+IDxVNTdFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfojAKKzxVNURGQj4gPFU1REZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5be7MAorPFU2MzcyPiA8VTYzNzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjbIyMQorPFU4MUM3PiA8VTgxQzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoh4cwCis8VTgzRTQ+IDxVODNFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPpDAKKzxVOTMwOD4gPFU5MzA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YyIMAorPFU5NTI5PiA8VTk1Mjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplKkxCis8VTM4QTc+IDxVMzhBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OipzAKKzxVMzhCRT4gPFUzOEJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46K+MAorPFUzQUJCPiA8VTNBQkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqrswCis8VTNCREU+IDxVM0JERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OvnjAKKzxVNDEwNT4gPFU0MTA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ISFMAorPFU0MzM4PiA8VTQzMzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjLgwCis8VTQ1QUQ+IDxVNDVBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SWrTAKKzxVNDY4OD4gPFU0Njg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JqIMAorPFU0ODUzPiA8VTQ4NTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoZMwCis8VTRDRUE+IDxVNENFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SzqjAKKzxVNTAyNj4gPFU1MDI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YCmMjQ1OAorPFU1MTAxPiA8VTUxMDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhIExCis8VTUyQjU+IDxVNTJCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WKtTAKKzxVNTk0Nj4gPFU1OTQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aWGMAorPFU1RTIzPiA8VTVFMjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluKMwCis8VTYwODE+IDxVNjA4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aCgTAKKzxVNjE3Qj4gPFU2MTdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oW7MAorPFU2ODRBPiA8VTY4NEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoYowCis8VTZEQzM+IDxVNkRDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3gzAKKzxVNzJGNz4gPFU3MkY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54u3MjEKKzxVNzM2Nz4gPFU3MzY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj542nMAorPFU3NEY5PiA8VTc0Rjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnk7kwCis8VTc3Mzc+IDxVNzczNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ectzcyNgorPFU3NzRBPiA8VTc3NEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnYowCis8VTc3NjA+IDxVNzc2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+edoDAKKzxVN0Q3OT4gPFU3RDc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57W5MAorPFU3RUUyPiA8VTdFRTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnu6I4NzcKKzxVN0Y2NT4gPFU3RjY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj572lMAorPFU3RjgyPiA8VTdGODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvoIwCis8VTgxNDM+IDxVODE0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iFgzAKKzxVOTEwND4gPFU5MTA0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YSEMQorPFU5NkJEPiA8VTk2QkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmr04NAorPFU5NkNCPiA8VTk2Q0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpm4swCis8VTk3Q0Y+IDxVOTdDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mfjzAKKzxVOThFQz4gPFU5OEVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aOsMAorPFU5OTBCPiA8VTk5MEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppIswCis8VTlCMzM+IDxVOUIzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+msszAKKzxVNTY1OD4gPFU1NjU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZmYNzMKKzxVNjQ4NT4gPFU2NDg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pKFMzM2Cis8VTk3OTI+IDxVOTc5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mekjEKKzxVOTdCRD4gPFU5N0JEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z69MAorPFUzNEY4PiA8VTM0Rjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjk7gwCis8VTM1MDM+IDxVMzUwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OUgzAKKzxVMzUyMj4gPFUzNTIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45SiMAorPFUzN0YyPiA8VTM3RjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjn7IwCis8VTM5MUM+IDxVMzkxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OknDAKKzxVM0E3MT4gPFUzQTcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46mxMAorPFUzQjQ4PiA8VTNCNDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrYgwCis8VTNCN0U+IDxVM0I3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OtvjAKKzxVM0MxMD4gPFUzQzEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47CQMAorPFUzRDUwPiA8VTNENTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtZAwCis8VTNERkU+IDxVM0RGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O3vjAKKzxVM0UxNT4gPFUzRTE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47iVMAorPFUzRTVGPiA8VTNFNUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuZ8wCis8VTNFRDU+IDxVM0VENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O7lTAKKzxVNDAxNz4gPFU0MDE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ICXMAorPFU0MDc3PiA8VTQwNzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgbcwCis8VTQxOTU+IDxVNDE5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SGlTAKKzxVNDFBMj4gPFU0MUEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IaiMAorPFU0MUY2PiA8VTQxRjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkh7YwCis8VTQyQzk+IDxVNDJDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SLiTAKKzxVNDM0QT4gPFU0MzRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I2KMAorPFU0M0QwPiA8VTQzRDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkj5AwCis8VTQzRTM+IDxVNDNFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SPozAKKzxVNDQxOD4gPFU0NDE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JCYMAorPFU0NUJDPiA8VTQ1QkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklrwwCis8VTQ2M0Y+IDxVNDYzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SYvzAKKzxVNDY2MD4gPFU0NjYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JmgMAorPFU0NzRDPiA8VTQ3NEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknYwwCis8VTQ3Qjc+IDxVNDdCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SetzAKKzxVNDgwNz4gPFU0ODA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KCHMAorPFU0ODQ4PiA8VTQ4NDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoYgwCis8VTQ5ODY+IDxVNDk4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SmhjAKKzxVNDlCQz4gPFU0OUJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ka8MAorPFU0RTg1PiA8VTRFODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuoUwCis8VTUwMTQ+IDxVNTAxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAlDM5NworPFU1MDk1PiA8VTUwOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgpUwCis8VTUwRUE+IDxVNTBFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WDqjAKKzxVNTFCMz4gPFU1MUIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YazMzE5ODUKKzxVNTIxND4gPFU1MjE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YiUMAorPFU1MjgyPiA8VTUyODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlioIyCis8VTUzQTU+IDxVNTNBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WOpTI2NAorPFU1NTczPiA8VTU1NzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllbMwCis8VTU2NzE+IDxVNTY3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WZsTUxCis8VTU4MDA+IDxVNTgwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WggDE0Cis8VTVCNTI+IDxVNUI1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WtkjAKKzxVNUI1Mz4gPFU1QjUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a2TMjU0Cis8VTVDNjk+IDxVNUM2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WxqTAKKzxVNUM2Qj4gPFU1QzZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bGrMAorPFU1RDFCPiA8VTVEMUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltJsyNDcKKzxVNUQyQj4gPFU1RDJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bSrMAorPFU1REE1PiA8VTVEQTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltqUwCis8VTVGMjE+IDxVNUYyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W8oTAKKzxVNUY0Rj4gPFU1RjRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b2PMAorPFU2MUEwPiA8VTYxQTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhqAwCis8VTYxQjA+IDxVNjFCMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aGsDAKKzxVNjIwND4gPFU2MjA0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oiEMAorPFU2Mjg5PiA8VTYyODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiokyMDAKKzxVNjMxNz4gPFU2MzE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oyXMAorPFU2MzU0PiA8VTYzNTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjZQwCis8VTYzOTg+IDxVNjM5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aOmDg2NQorPFU2NEE3PiA8VTY0QTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkqcwCis8VTY1MkI+IDxVNjUyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aUqzIxNAorPFU2NThEPiA8VTY1OEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlo0wCis8VTY4Nzc+IDxVNjg3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ahtzI2Cis8VTZBNUI+IDxVNkE1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+apmzI4Cis8VTZBNUM+IDxVNkE1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+apnDAKKzxVNkIxND4gPFU2QjE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qyUMAorPFU2QjJFPiA8VTZCMkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrK4wCis8VTZCOEM+IDxVNkI4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aujDAKKzxVNkMxMj4gPFU2QzEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rCSMAorPFU2QzdBPiA8VTZDN0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsboyMDYKKzxVNkY0Rj4gPFU2RjRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r2PMAorPFU3MTA2PiA8VTcxMDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhIYwCis8VTcxMzM+IDxVNzEzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eEszAKKzxVNzFBNj4gPFU3MUE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54amMAorPFU3MjExPiA8VTcyMTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniJEwCis8VTcyMUQ+IDxVNzIxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eInTEKKzxVNzIzND4gPFU3MjM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54i0MAorPFU3MjM1PiA8VTcyMzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniLUyNzA2Cis8VTczNTc+IDxVNzM1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eNlzEzNgorPFU3MzgzPiA8VTczODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjoMwCis8VTczQTY+IDxVNzNBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eOpjAKKzxVNzNBOD4gPFU3M0E4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj546oMAorPFU3M0NGPiA8VTczQ0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnj482NQorPFU3NDc0PiA8VTc0NzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkbQwCis8VTc1QTY+IDxVNzVBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eWpjAKKzxVNzYxQT4gPFU3NjFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55iaMAorPFU3N0NEPiA8VTc3Q0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnn400MgorPFU3N0UxPiA8VTc3RTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnn6EwCis8VTc4MDQ+IDxVNzgwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eghDAKKzxVN0E3MT4gPFU3QTcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56mxMAorPFU3RDU1PiA8VTdENTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntZUyMDIKKzxVN0Q3Nj4gPFU3RDc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57W2MAorPFU3RUREPiA8VTdFREQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnu50xOTU1MAorPFU4MUM0PiA8VTgxQzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoh4QwCis8VTgyQjU+IDxVODJCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iKtTAKKzxVODU1RD4gPFU4NTVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JWdMAorPFU4NTY4PiA8VTg1Njg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolagzNAorPFU4Njk3PiA8VTg2OTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPompcwCis8VTg3RTg+IDxVODdFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ifqDAKKzxVODdFOT4gPFU4N0U5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J+pMAorPFU4ODNDPiA8VTg4M0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooLwyCis8VTg5Qzk+IDxVODlDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iniTU2NjQ1Cis8VTg5RDY+IDxVODlENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+inljAKKzxVODlGQz4gPFU4OUZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ke8MAorPFU4QTIzPiA8VThBMjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqKMyCis8VThCNEU+IDxVOEI0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+itjjMKKzxVOEJDMD4gPFU4QkMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K+ANDMwCis8VThDMzI+IDxVOEMzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwsjg3Cis8VThDM0I+IDxVOEMzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwuzAKKzxVOEM5Qz4gPFU4QzlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LKcMAorPFU4RDdEPiA8VThEN0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotb0wCis8VThEQjk+IDxVOERCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i2uTAKKzxVOEU3Nj4gPFU4RTc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Lm2NzUKKzxVOEU3Nz4gPFU4RTc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Lm3MAorPFU4RUE5PiA8VThFQTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouqkwCis8VTkwMkI+IDxVOTAyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mAqzAKKzxVOTIwQz4gPFU5MjBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YiMMAorPFU5NDBEPiA8VTk0MEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkI0wCis8VTk0MUQ+IDxVOTQxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mQnTAKKzxVOTQ4MT4gPFU5NDgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZKBMAorPFU5NTYyPiA8VTk1NjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplaIyOQorPFU5QzRBPiA8VTlDNEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsYowCis8VTlEMDM+IDxVOUQwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m0gzAKKzxVOURFMj4gPFU5REUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6beiMAorPFU5RkEzPiA8VTlGQTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvqMwCis8VTQ3QjU+IDxVNDdCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SetTAKKzxVNDdGRT4gPFU0N0ZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J++MAorPFU1MTlCPiA8VTUxOUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhps1OTkzMAorPFU1NDFCPiA8VTU0MUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkJs4MzcwCis8VTU2Rjc+IDxVNTZGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WbtzAKKzxVNTc0Nz4gPFU1NzQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z2HNTM5MworPFU1OUYwPiA8VTU5RjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlp7AwCis8VTY4N0U+IDxVNjg3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ahvjAKKzxVNkM2RT4gPFU2QzZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rGuMAorPFU3NkIyPiA8VTc2QjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmrIxMAorPFU3NkI4PiA8VTc2Qjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmrgwCis8VTc2Qjk+IDxVNzZCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eauTAKKzxVNzg4NT4gPFU3ODg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56KFMAorPFU3QjYwPiA8VTdCNjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnraAxMjIKKzxVN0I5Rj4gPFU3QjlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj566fMAorPFU4Mzk5PiA8VTgzOTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojpkxCis8VTgzQ0M+IDxVODNDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPjDEyNzIKKzxVODY5MD4gPFU4NjkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JqQMAorPFU4ODgwPiA8VTg4ODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoooAwCis8VTg5QTA+IDxVODlBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+imoDAKKzxVOEVDRD4gPFU4RUNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LuNMzc5Cis8VTkyMUU+IDxVOTIxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mInjkKKzxVOTI4MT4gPFU5MjgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YqBMAorPFU5MjlFPiA8VTkyOUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpip4wCis8VTk0QTc+IDxVOTRBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mSpzQ3MgorPFU5ODM1PiA8VTk4MzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoLUwCis8VTlCQjY+IDxVOUJCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mutjAKKzxVOUNBQT4gPFU5Q0FBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bKqMAorPFU5RTg3PiA8VTlFODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuocxNworPFU5RThGPiA8VTlFOEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuo8wCis8VTlFOTU+IDxVOUU5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6lTUKKzxVODcyMD4gPFU4NzIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JygMAorPFUzNDdBPiA8VTM0N0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkbowCis8VTM0OUU+IDxVMzQ5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OSnjAKKzxVMzRGND4gPFUzNEY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45O0MAorPFUzNTU5PiA8VTM1NTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlZkwCis8VTM3NjY+IDxVMzc2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OdpjAKKzxVM0QyQj4gPFUzRDJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47SrMAorPFUzRUQyPiA8VTNFRDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPju5IwCis8VTNGNTk+IDxVM0Y1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O9mTAKKzxVNDFGOT4gPFU0MUY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ie5MAorPFU0NTUxPiA8VTQ1NTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklZEwCis8VTQ3MkQ+IDxVNDcyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ScrTAKKzxVNDc0RD4gPFU0NzREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J2NMAorPFU0RkNBPiA8VTRGQ0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkv4ozMTc4Cis8VTU0NDE+IDxVNTQ0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRgTAKKzxVNTdDOD4gPFU1N0M4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z+IMAorPFU1QkVGPiA8VTVCRUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlr68wCis8VTVDRkI+IDxVNUNGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WzuzEwNDcKKzxVNjFDRj4gPFU2MUNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oePMQorPFU2MzQzPiA8VTYzNDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjYM3Cis8VTY1MDg+IDxVNjUwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aUiDAKKzxVNjUxRj4gPFU2NTFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pSfMAorPFU2NjU5PiA8VTY2NTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmZkwCis8VTZENUE+IDxVNkQ1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a1mjEwNgorPFU2RkVDPiA8VTZGRUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv6wxNQorPFU3MTBDPiA8VTcxMEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhIwwCis8VTcxQzc+IDxVNzFDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHhzAKKzxVNzNGQT4gPFU3M0ZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54+6MworPFU3NTZGPiA8VTc1NkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnla8wCis8VTdBRTM+IDxVN0FFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+erozExOAorPFU3Qjk4PiA8VTdCOTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrpgxCis8VTg0NzA+IDxVODQ3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iRsDAKKzxVODUyOD4gPFU4NTI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JSoMAorPFU4NTQ4PiA8VTg1NDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolYgxMgorPFU5MEUxPiA8VTkwRTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg6E3MTUKKzxVOTY1Nj4gPFU5NjU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZmWMAorPFU5OTE1PiA8VTk5MTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppJUwCis8VTk5ODI+IDxVOTk4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mmgjAKKzxVOTlGRj4gPFU5OUZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ae/MQorPFU5QThGPiA8VTlBOEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqo81MTYKKzxVOUQ1OD4gPFU5RDU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bWYMAorPFU1NDk0PiA8VTU0OTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkpQzOTIKKzxVNTQ5Nj4gPFU1NDk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZKWMzAwMAorPFU1NTgwPiA8VTU1ODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlloAxMTA2Cis8VTg4NDk+IDxVODg0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ihiTAKKzxVOTI3Mj4gPFU5MjcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YmyMAorPFU0RjY3PiA8VTRGNjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvacwCis8VTUzNjE+IDxVNTM2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WNoTEwMDAwCis8VTgwRTk+IDxVODBFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iDqTAKKzxVNTk1Mj4gPFU1OTUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aWSMAorPFU1RjAwPiA8VTVGMDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvIAxMTg5NjkKKzxVNjNFOT4gPFU2M0U5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+pMzM1Cis8VTk0MjY+IDxVOTQyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mQpjAKKzxVOTUwRT4gPFU5NTBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZSOMQorPFU5NThCPiA8VTk1OEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplos5NjMKKzxVOTVGRj4gPFU5NUZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ze/MQorPFUzODQxPiA8VTM4NDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoYEwCis8VTQwNTc+IDxVNDA1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SBlzAKKzxVNDQyOT4gPFU0NDI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JCpMAorPFU0NDkzPiA8VTQ0OTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkpMwCis8VTUxRUY+IDxVNTFFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WHrzI0MjUKKzxVNTFGMT4gPFU1MUYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YexMTEKKzxVNTI0MD4gPFU1MjQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YmANAorPFU1Mjc0PiA8VTUyNzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlibQwCis8VTU3QjI+IDxVNTdCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WesjEKKzxVNTg0Rj4gPFU1ODRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aGPMAorPFU2MDdBPiA8VTYwN0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgboyOTQKKzxVNjEzNz4gPFU2MTM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oS3MworPFU2MTY4PiA8VTYxNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhagxNzgwCis8VTY2OUY+IDxVNjY5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aanzAKKzxVNjk3Nz4gPFU2OTc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qW3MjMzCis8VTg0ODg+IDxVODQ4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iSiDIKKzxVOEM0OD4gPFU4QzQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LGINTQKKzxVOEYwNj4gPFU4RjA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LyGMAorPFU5MzQ3PiA8VTkzNDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjYcwCis8VTkzQTc+IDxVOTNBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mOpzAKKzxVOTRFMD4gPFU5NEUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZOgNzYKKzxVOTVEMz4gPFU5NUQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZeTMAorPFU5OEJEPiA8VTk4QkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpor0wCis8VTNDODk+IDxVM0M4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OyiTAKKzxVNDg3Nz4gPFU0ODc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KG3MAorPFU1MkQzPiA8VTUyRDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPli5MwCis8VTU4RDI+IDxVNThEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WjkjAKKzxVNUZGRT4gPFU1RkZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b++NTUKKzxVNjExMj4gPFU2MTEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oSSMAorPFU2MTNFPiA8VTYxM0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhL4xCis8VTZCMkM+IDxVNkIyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+asrDAKKzxVNzA4Qz4gPFU3MDhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54KMMAorPFU3MDhGPiA8VTcwOEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngo8wCis8VTcwRDc+IDxVNzBENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eDlzAKKzxVNTIwQT4gPFU1MjBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YiKMzk4NAorPFU1MkQ4PiA8VTUyRDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPli5gzNzUKKzxVNTgyQT4gPFU1ODJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aCqMjc3OAorPFU1RDQxPiA8VTVENDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltYEwCis8VTYyMjE+IDxVNjIyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aIoTE5Cis8VTY4MUU+IDxVNjgxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+agnjAKKzxVOUY5NT4gPFU5Rjk1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b6VMworPFU5RjlCPiA8VTlGOUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvpsxNTYKKzxVM0UxRD4gPFUzRTFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47idMAorPFU0REFCPiA8VTREQUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktqswCis8VTRGODM+IDxVNEY4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+gzgzOQorPFU1MDU4PiA8VTUwNTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgZgwCis8VTUxOUE+IDxVNTE5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WGmjAKKzxVNTFGNT4gPFU1MUY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ye1MAorPFU1NzRFPiA8VTU3NEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnY4xMDA4Cis8VTU3RjM+IDxVNTdGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfszAKKzxVNTg2QT4gPFU1ODZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aGqMAorPFU1RDAxPiA8VTVEMDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltIE0Cis8VTYwQzI+IDxVNjBDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aDgjAKKzxVNkIzRj4gPFU2QjNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qy/MQorPFU2QjQxPiA8VTZCNDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrYEwCis8VTZCNUU+IDxVNkI1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+atnjAKKzxVNzgwRD4gPFU3ODBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56CNMTg3MQorPFU4M0IwPiA8VTgzQjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojrAwCis8VThGMjE+IDxVOEYyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i8oTAKKzxVOEY0MT4gPFU4RjQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L2BMAorPFU4RjU3PiA8VThGNTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovZcwCis8VTk4NTE+IDxVOTg1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mhkTAKKzxVNDAwRD4gPFU0MDBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ICNMAorPFU0NjEzPiA8VTQ2MTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmJMwCis8VTU4ODg+IDxVNTg4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WiiDAKKzxVNUQ0Qz4gPFU1RDRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bWMNjkxCis8VTc3MEI+IDxVNzcwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ecizE3MTI1NgorPFU3N0IwPiA8VTc3QjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnrAxNTkKKzxVNzdEOT4gPFU3N0Q5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+ZMAorPFU3OEUxPiA8VTc4RTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPno6EzCis8VTdBRjc+IDxVN0FGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ertzAKKzxVODg0RT4gPFU4ODRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KGOMAorPFU5NjFBPiA8VTk2MUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmJo2Cis8VTlCMkI+IDxVOUIyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+msqzAKKzxVNUFERD4gPFU1QUREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5audMAorPFU1RDdCPiA8VTVEN0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltbsyCis8VTVFQjc+IDxVNUVCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W6tzExOTY4Cis8VTYxNzc+IDxVNjE3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aFtzU2NgorPFU2OUZBPiA8VTY5RkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmp7oxCis8VTZGMkU+IDxVNkYyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a8rjAKKzxVN0E0NT4gPFU3QTQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56mFMAorPFU3Qzg3PiA8VTdDODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsocwCis8VTdDRTA+IDxVN0NFMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ezoDEyNgorPFU4RUJGPiA8VThFQkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPour8wCis8VTkzRUU+IDxVOTNFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mPrjEKKzxVOTU4Qz4gPFU5NThDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZaMMAorPFU5NUY2PiA8VTk1RjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl7YxCis8VTlDNDc+IDxVOUM0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxhzEKKzxVNDg0OT4gPFU0ODQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KGJMAorPFUzQzIwPiA8VTNDMjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsKAwCis8VTRFQTI+IDxVNEVBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6ojQ0OAorPFU0RjA5PiA8VTRGMDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvIkyMQorPFU1MzFGPiA8VTUzMUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljJ8wCis8VTU2RTU+IDxVNTZFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WbpTAKKzxVNjI5Nz4gPFU2Mjk3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oqXODM0MworPFU3MDk1PiA8VTcwOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngpUxMTc2Cis8VTcyQkE+IDxVNzJCQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eKujEKKzxVNzgwQT4gPFU3ODBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56CKMAorPFU5MDlGPiA8VTkwOUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgp8wCis8VTkyMjc+IDxVOTIyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mIpzAKKzxVOTRBQT4gPFU5NEFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZKqMgorPFU1QzNCPiA8VTVDM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsLs3Cis8VTlBREI+IDxVOUFEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mrmzAKKzxVNEJFQT4gPFU0QkVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K+qMAorPFU0RTAyPiA8VTRFMDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuIIwCis8VTYyRjc+IDxVNjJGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aLtzk3OQorPFU2NTM3PiA8VTY1Mzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlLcwCis8VTY4MzI+IDxVNjgzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+agsjkKKzxVNjlDMD4gPFU2OUMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qeAMAorPFU2RDE4PiA8VTZEMTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtJgwCis8VTcwRTQ+IDxVNzBFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eDpDExNjEKKzxVNzFGQT4gPFU3MUZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54e6MAorPFU4MDAzPiA8VTgwMDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogIMyMTE5NAorPFU4NUE3PiA8VTg1QTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolqcwCis8VTlCQjM+IDxVOUJCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+muszAKKzxVOUM5Mz4gPFU5QzkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bKTMAorPFU0NDI3PiA8VTQ0Mjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkKcwCis8VTcxMDU+IDxVNzEwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eEhTAKKzxVOTJBQz4gPFU5MkFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YqsMAorPFU5NEQwPiA8VTk0RDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpk5AyMjIKKzxVOTc2MD4gPFU5NzYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z2gMTE1NTUKKzxVOUJDQz4gPFU5QkNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a+MMAorPFU1NUQxPiA8VTU1RDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPll5ExMjQKKzxVNTc3Nz4gPFU1Nzc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z23MTY4Cis8VTVDQzc+IDxVNUNDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WzhzMKKzxVNUQ1OT4gPFU1RDU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bWZMAorPFU2N0VGPiA8VTY3RUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmn68yNDMyCis8VTY4RjU+IDxVNjhGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ajtTI0NDUKKzxVNkExNj4gPFU2QTE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qiWMAorPFU3MjQxPiA8VTcyNDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniYEwCis8VTcyNzE+IDxVNzI3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eJsTAKKzxVNzI5MD4gPFU3MjkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54qQMAorPFU3M0MyPiA8VTczQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnj4IyOTcKKzxVNzVCND4gPFU3NUI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55a0MTYKKzxVNzc4Qz4gPFU3NzhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj556MMzEyCis8VTc4MjI+IDxVNzgyMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+egojQKKzxVNzhENT4gPFU3OEQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56OVMTI5NgorPFU3OTFBPiA8VTc5MUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpJowCis8VTc5RDE+IDxVNzlEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+enkTM5MTMxCis8VTdBMUU+IDxVN0ExRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eonjIzCis8VTdBQTA+IDxVN0FBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eqoDY1Cis8VTdBQkM+IDxVN0FCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eqvDAKKzxVN0MzQj4gPFU3QzNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57C7MAorPFU4MEUyPiA8VTgwRTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPog6IwCis8VTgyREI+IDxVODJEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iLmzQ0NAorPFU4NDJBPiA8VTg0MkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokKowCis8VTg1OTY+IDxVODU5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iWljAKKzxVODc0Qz4gPFU4NzRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J2MMTU5Cis8VThFRkI+IDxVOEVGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i7uzEKKzxVOEY3Mj4gPFU4RjcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L2yNzUKKzxVOTE5OD4gPFU5MTk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YaYMAorPFU5MjMzPiA8VTkyMzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiLMwCis8VTk4NDY+IDxVOTg0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mhhjM1Cis8VTk4OTc+IDxVOTg5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+milzUxMDMKKzxVOUFDMT4gPFU5QUMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6auBNgorPFU1OEYzPiA8VTU4RjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlo7MxNjc3Cis8VTY5QkM+IDxVNjlCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+amvDAKKzxVNkJCQj4gPFU2QkJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q67MAorPFU2QkJDPiA8VTZCQkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrrwxMworPFUzN0I5PiA8VTM3Qjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnrkwCis8VTNBODM+IDxVM0E4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OqgzAKKzxVM0E5OT4gPFUzQTk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46qZMAorPFUzQUExPiA8VTNBQTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqqEwCis8VTNBQkM+IDxVM0FCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OqvDAKKzxVM0MyND4gPFUzQzI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47CkMAorPFUzRDYzPiA8VTNENjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtaMwCis8VTUzRUY+IDxVNTNFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPrzIwOTE3MAorPFU1ODAxPiA8VTU4MDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloIEwCis8VTVDQTI+IDxVNUNBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WyojIKKzxVNURCMT4gPFU1REIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5baxMAorPFU2NTY0PiA8VTY1NjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlaQwCis8VTZFMDc+IDxVNkUwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a4hzAKKzxVNkUzND4gPFU2RTM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ri0MzA5OAorPFU3MEEzPiA8VTcwQTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngqMwCis8VTc5MEQ+IDxVNzkwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ekjTAKKzxVOTU5Qz4gPFU5NTlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZacMAorPFUzNTQ5PiA8VTM1NDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlYkwCis8VTM5Mjk+IDxVMzkyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OkqTAKKzxVM0ZBNz4gPFUzRkE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj476nMAorPFU0NjUwPiA8VTQ2NTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmZAwCis8VTREOTc+IDxVNEQ5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S2lzAKKzxVNTE0Qj4gPFU1MTRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YWLMzA0NDMKKzxVNTE2Mz4gPFU1MTYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YWjMAorPFU1MjNCPiA8VTUyM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliLsyMjM2OAorPFU1MjRCPiA8VTUyNEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliYsxCis8VTUyQzA+IDxVNTJDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WLgDAKKzxVNTJDQT4gPFU1MkNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YuKMAorPFU1MzkyPiA8VTUzOTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljpIwCis8VTU3OEU+IDxVNTc4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WejjAKKzxVNUExND4gPFU1QTE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aiUMAorPFU1QkEyPiA8VTVCQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrqIyMzE2NgorPFU1QzA1PiA8VTVDMDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsIUwCis8VTYwNkE+IDxVNjA2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBqjE2MAorPFU2MTE5PiA8VTYxMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhJkwCis8VTYzRTI+IDxVNjNFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aPojAKKzxVNjQxNT4gPFU2NDE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pCVMAorPFU2QzJBPiA8VTZDMkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsKo5Cis8VTZFOTg+IDxVNkU5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a6mDE3Cis8VTc4QTY+IDxVNzhBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eipjAKKzxVN0REOT4gPFU3REQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57eZMAorPFU3RjAyPiA8VTdGMDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvIIxMQorPFU4QUIyPiA8VThBQjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqrI2MgorPFU4QkZFPiA8VThCRkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor745MTI2Cis8VTk1MUU+IDxVOTUxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mUnjMyCis8VTlBMEQ+IDxVOUEwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mojTAKKzxVOUE5Mj4gPFU5QTkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aqSNQorPFU1NTQzPiA8VTU1NDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllYM1NjMKKzxVNTdBNj4gPFU1N0E2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z6mMTYyCis8VTU4QkU+IDxVNThCRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WivjAKKzxVNjA3Mz4gPFU2MDczPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oGzMTI3MgorPFU2MUM3PiA8VTYxQzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmh4c1Cis8VTgwOEU+IDxVODA4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iCjjAKKzxVODBBRj4gPFU4MEFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IKvMTMwNjcKKzxVODBCQj4gPFU4MEJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IK7MAorPFU4QzY0PiA8VThDNjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosaQwCis8VTkzMzk+IDxVOTMzOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mMuTAKKzxVOTg4MD4gPFU5ODgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aKANzEKKzxVOUY1Nz4gPFU5RjU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b2XMAorPFU5RjY2PiA8VTlGNjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvaYwCis8VTlGODI+IDxVOUY4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m+gjAKKzxVOUY4OD4gPFU5Rjg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b6IMjMKKzxVM0UyNz4gPFUzRTI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47inMAorPFU2M0FGPiA8VTYzQUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjq80Cis8VTczRTI+IDxVNzNFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ePojAKKzxVNzg0RD4gPFU3ODREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56GNMAorPFU4OEM5PiA8VTg4Qzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo4kyCis8VTg5MDM+IDxVODkwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ikgzAKKzxVNTJBNT4gPFU1MkE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YqlMAorPFU1NzQ4PiA8VTU3NDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnYgwCis8VTU3NTE+IDxVNTc1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WdkTE0MjIKKzxVNTk5ND4gPFU1OTk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aaUMAorPFU1QTE5PiA8VTVBMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqJkwCis8VTYzMzM+IDxVNjMzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aMszAKKzxVNjQ3Qz4gPFU2NDdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pG8MAorPFU3MjdDPiA8VTcyN0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnibwwCis8VTc4NDE+IDxVNzg0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ehgTAKKzxVNzg1Qz4gPFU3ODVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56GcMAorPFU3ODdCPiA8VTc4N0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnobswCis8VTkyQjU+IDxVOTJCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mKtTAKKzxVOTM1RT4gPFU5MzVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y2eMAorPFU5M0Q3PiA8VTkzRDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpj5cxCis8VTk0RkY+IDxVOTRGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mTvzE3MgorPFU5NjJDPiA8VTk2MkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmKwwCis8VTQ4NzA+IDxVNDg3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ShsDAKKzxVNTAyNT4gPFU1MDI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YClMjEKKzxVNTdFQT4gPFU1N0VBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z+qMAorPFU1RDA2PiA8VTVEMDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltIYyCis8VTYwQkU+IDxVNjBCRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aCvjAKKzxVNkRCMz4gPFU2REIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5razMAorPFU3ODdGPiA8VTc4N0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnob8wCis8VTdCOUM+IDxVN0I5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eunDEzCis8VTkzMTM+IDxVOTMxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mMkzAKKzxVOUQ3Qz4gPFU5RDdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bW8MAorPFUzOTFGPiA8VTM5MUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpJ8wCis8VTVCNTQ+IDxVNUI1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WtlDU4MDIKKzxVNjA1MD4gPFU2MDUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oGQMTI3MzYKKzxVM0UxQz4gPFUzRTFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47icMAorPFU2M0E3PiA8VTYzQTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjqc5MjYwCis8VTdBN0E+IDxVN0E3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+epujMwMDAwCis8VTk3OUE+IDxVOTc5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+memjAKKzxVNTI3RT4gPFU1MjdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ym+MAorPFU1RjQ0PiA8VTVGNDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvYQwCis8VTYyQTA+IDxVNjJBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aKoDIzNworPFU2NDczPiA8VTY0NzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkbMyCis8VTc3MEQ+IDxVNzcwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ecjTIKKzxVNzc5OD4gPFU3Nzk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj556YMAorPFU4MkE0PiA8VTgyQTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiqQzCis8VTg4QTc+IDxVODhBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iipzAKKzxVOTNDMj4gPFU5M0MyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+CMAorPFUzNTFBPiA8VTM1MUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlJowCis8VTUyQjY+IDxVNTJCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WKtjAKKzxVNTNFMz4gPFU1M0UzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y+jNTcxMTYKKzxVMzRDMj4gPFUzNEMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45OCMAorPFUzQzJGPiA8VTNDMkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsK8wCis8VTNDODQ+IDxVM0M4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OyhDAKKzxVM0Y1Qj4gPFUzRjVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj472bMAorPFU0Q0RGPiA8VTRDREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPks58wCis8VTRDRjk+IDxVNENGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SzuTAKKzxVNTFBNj4gPFU1MUE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YamMAorPFU1M0U5PiA8VTUzRTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlj6kxMTM4Cis8VTVCQkM+IDxVNUJCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WuvDAKKzxVNUJDNz4gPFU1QkM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a+HNTI4Cis8VTYwMTA+IDxVNjAxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aAkDAKKzxVNjI2Mz4gPFU2MjYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5omjMjc5MgorPFU2NTQyPiA8VTY1NDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlYIwCis8VTZFRjE+IDxVNkVGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a7sTAKKzxVN0E5Qj4gPFU3QTlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56qbMAorPFU3QjU4PiA8VTdCNTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrZgxCis8VTdDMDY+IDxVN0MwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ewhjAKKzxVODUzMj4gPFU4NTMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JSyMgorPFU4NTNCPiA8VTg1M0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolLszOQorPFU5MUU2PiA8VTkxRTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPph6YxCis8VTlEQzc+IDxVOURDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m3hzAKKzxVNTIzMz4gPFU1MjMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YizNQorPFU1NEVEPiA8VTU0RUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlk60xMjgwOQorPFU1NzEwPiA8VTU3MTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnJAwCis8VTYyNUQ+IDxVNjI1RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aJnTAKKzxVNjdBRj4gPFU2N0FGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p6vMjM1OQorPFU2ODREPiA8VTY4NEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoY0wCis8VTc3RkI+IDxVNzdGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+efuzQKKzxVN0E5Rj4gPFU3QTlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56qfNDgzCis8VTgwRDA+IDxVODBEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iDkDAKKzxVOERDRD4gPFU4RENEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LeNMAorPFU5MEMwPiA8VTkwQzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg4AwCis8VTk4NUQ+IDxVOTg1RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mhnTAKKzxVOUFCNz4gPFU5QUI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aq3MTc1Cis8VTlCQUM+IDxVOUJBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+murDAKKzxVNDFFMj4gPFU0MUUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IeiMAorPFU4MkU2PiA8VTgyRTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi6YyMTcwNAorPFUzNDgyPiA8VTM0ODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkoIwCis8VTM4Mzg+IDxVMzgzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OguDAKKzxVNEZDOD4gPFU0RkM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L+IMAorPFU1NUJFPiA8VTU1QkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllr40MQorPFU1NkIzPiA8VTU2QjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmrMwCis8VTVFOTM+IDxVNUU5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W6kzcyNDAKKzxVNUVBQj4gPFU1RUFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bqrMjAKKzxVNzYxND4gPFU3NjE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55iUMAorPFU3OUQ5PiA8VTc5RDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnp5kwCis8VTdENUQ+IDxVN0Q1RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e1nTEKKzxVN0VEND4gPFU3RUQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57uUNDkKKzxVN0VGOT4gPFU3RUY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57u5MAorPFU4OEI0PiA8VTg4QjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoorQxMQorPFU4OEU0PiA8VTg4RTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo6Q0MzIyCis8VTg5MzI+IDxVODkzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iksjI0Cis8VThEQjY+IDxVOERCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i2tjIKKzxVOTE3Nz4gPFU5MTc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YW3Mjc0OAorPFU1OTM4PiA8VTU5Mzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpLgyNjU5Cis8VTU5RjE+IDxVNTlGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WnsTAKKzxVNjY0Nz4gPFU2NjQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pmHMAorPFU4MzQyPiA8VTgzNDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojYIwCis8VThBODc+IDxVOEE4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iqhzE1Cis8VTRGODk+IDxVNEY4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+iTE0MQorPFU1NEI1PiA8VTU0QjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkrUwCis8VTU3QUU+IDxVNTdBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+Werjk0NgorPFU5Mjk5PiA8VTkyOTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpipkwCis8VTQyQzA+IDxVNDJDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SLgDAKKzxVNjMwRT4gPFU2MzBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oyOMzA0Cis8VTgwRUY+IDxVODBFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iDrzE1MQorPFU4REU4PiA8VThERTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPot6gyMjIwCis8VTlBQkI+IDxVOUFCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mquzAKKzxVNTU4RT4gPFU1NThFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZaOMAorPFUzOURGPiA8VTM5REY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjp58wCis8VTQ0RDI+IDxVNDREMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+STkjAKKzxVNjREMz4gPFU2NEQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pOTMAorPFU4NEFGPiA8VTg0QUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokq8xNAorPFUzNTFFPiA8VTM1MUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlJ4wCis8VTM2NTU+IDxVMzY1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OZlTAKKzxVMzY1Nz4gPFUzNjU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45mXMAorPFUzN0Y0PiA8VTM3RjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjn7QwCis8VTNCMkU+IDxVM0IyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OsrjAKKzxVM0M2RT4gPFUzQzZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47GuMAorPFU0MjFCPiA8VTQyMUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiJswCis8VTRCNUQ+IDxVNEI1RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+StnTAKKzxVNEJFND4gPFU0QkU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K+kMAorPFU0RDkwPiA8VTREOTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktpAwCis8VTRGQTk+IDxVNEZBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+qTU2Cis8VTUxMDg+IDxVNTEwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WEiDAKKzxVNTFGNz4gPFU1MUY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ye3MAorPFU1NEQ5PiA8VTU0RDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlk5kxOQorPFU1NjcyPiA8VTU2NzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmbIwCis8VTU3NTc+IDxVNTc1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WdlzE2NTg1Cis8VTU4NEE+IDxVNTg0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WhijY4Cis8VTU4QTQ+IDxVNThBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WipDAKKzxVNUZFQj4gPFU1RkVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b+rMzk5ODgKKzxVNkIzMz4gPFU2QjMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qyzMAorPFU3MzZBPiA8VTczNkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjaowCis8VTdCNzc+IDxVN0I3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ettzkwMQorPFU3Q0U5PiA8VTdDRTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPns6kwCis8VTgxMEQ+IDxVODEwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iEjTQ3Cis8VTgxQkU+IDxVODFCRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iGvjEKKzxVODQ4OT4gPFU4NDg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JKJMworPFU5MEQwPiA8VTkwRDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg5AxCis8VTkxMzY+IDxVOTEzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mEtjAKKzxVOTlDMz4gPFU5OUMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aeDMAorPFU5QjIwPiA8VTlCMjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprKAwCis8VTlDNjA+IDxVOUM2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxoDAKKzxVOUM5OT4gPFU5Qzk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bKZMAorPFU1QkJEPiA8VTVCQkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrr01NjIzCis8VTVCREI+IDxVNUJEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WvmzAKKzxVNUJFQz4gPFU1QkVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a+sNDEKKzxVODFENz4gPFU4MUQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IeXMAorPFU5QUNCPiA8VTlBQ0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpq4sxMgorPFU5QUQ2PiA8VTlBRDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpq5YwCis8VTNCRDg+IDxVM0JEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OvmDAKKzxVNDU0MD4gPFU0NTQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JWAMAorPFU0OTU3PiA8VTQ5NTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpZcwCis8VTRDOEM+IDxVNEM4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SyjDAKKzxVNkIzNT4gPFU2QjM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qy1MAorPFU2QjNFPiA8VTZCM0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrL40NTMyCis8VTZCNDA+IDxVNkI0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+atgDAKKzxVN0FCRT4gPFU3QUJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56q+MAorPFU0OTJEPiA8VTQ5MkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpK0wCis8VTUyQkI+IDxVNTJCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WKuzAKKzxVNTMyMT4gPFU1MzIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YyhMzQyCis8VTUzMjk+IDxVNTMyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WMqTAKKzxVNTREMD4gPFU1NEQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZOQMTYwCis8VTYwNDc+IDxVNjA0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBhzAKKzxVNjg0Nj4gPFU2ODQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qGGMTczNworPFU2RDJEPiA8VTZEMkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtK0wCis8VTc4NDQ+IDxVNzg0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ehhDAKKzxVN0I1MD4gPFU3QjUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj562QNTA4Cis8VTdCN0E+IDxVN0I3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+etujAKKzxVOEE4Nj4gPFU4QTg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KqGMAorPFU4QkQzPiA8VThCRDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor5MzMgorPFU4RUVEPiA8VThFRUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPou60wCis8VTkwQkM+IDxVOTBCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mCvDAKKzxVMzkyRT4gPFUzOTJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46SuMAorPFU1RkY5PiA8VTVGRjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv7kwCis8VTYyODI+IDxVNjI4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aKgjAKKzxVNzJDMj4gPFU3MkMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54uCNzc4OQorPFU4QTkxPiA8VThBOTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqpEwCis8VThCRjM+IDxVOEJGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ivszM3Cis8VThFRDY+IDxVOEVENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i7ljAKKzxVOUQ1Rj4gPFU5RDVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bWfMAorPFU0RkM3PiA8VTRGQzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkv4cwCis8VTUxMjM+IDxVNTEyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WEozAKKzxVNTkzQz4gPFU1OTNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aS8OQorPFU0MkFGPiA8VTQyQUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiq8wCis8VTRENDM+IDxVNEQ0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S1gzAKKzxVNTFCNT4gPFU1MUI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ya1MTY5NTQKKzxVNTM1RD4gPFU1MzVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y2dMAorPFU1NzM5PiA8VTU3Mzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnLk2Cis8VTU4RDk+IDxVNThEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WjmTEKKzxVNUNCMj4gPFU1Q0IyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bKyMAorPFU1RjQ5PiA8VTVGNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvYkwCis8VTYxRUM+IDxVNjFFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aHrDAKKzxVNjFFRD4gPFU2MUVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oetMAorPFU2NUY3PiA8VTY1Rjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPml7cxMTU1Cis8VTY2M0Y+IDxVNjYzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aYvzAKKzxVNjZFMD4gPFU2NkUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pugMTEKKzxVNkNDMT4gPFU2Q0MxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rOBMTc2Cis8VTcyMEM+IDxVNzIwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eIjDAKKzxVNzcxNj4gPFU3NzE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55yWMAorPFU3NzM2PiA8VTc3MzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnLY4MTIKKzxVNzdGRj4gPFU3N0ZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+/Mjg3NgorPFU3ODNGPiA8VTc4M0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoL8wCis8VTdENEI+IDxVN0Q0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e1izIKKzxVN0Q1Nj4gPFU3RDU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57WWMAorPFU3RThBPiA8VTdFOEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuoowCis8VTdFQTk+IDxVN0VBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e6qTYKKzxVOENCQT4gPFU4Q0JBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LK6MAorPFU4RDM2PiA8VThEMzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotLYzCis8VThFODA+IDxVOEU4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6gDAKKzxVOTA5RD4gPFU5MDlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKdNDUKKzxVOTEzQT4gPFU5MTNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YS6MAorPFU5MjcxPiA8VTkyNzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpibEwCis8VTk0NUI+IDxVOTQ1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mRmzAKKzxVOUVDQj4gPFU5RUNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6buLMAorPFU0RThGPiA8VTRFOEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuo8yODI2Cis8VTUyMzI+IDxVNTIzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WIsjAKKzxVNUNCRj4gPFU1Q0JGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bK/MzMKKzxVNURDQj4gPFU1RENCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5beLMAorPFU2MDlEPiA8VTYwOUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgp0wCis8VTc2RDQ+IDxVNzZEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eblDQwNgorPFU3QUE1PiA8VTdBQTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqqU4MzgKKzxVN0FCQT4gPFU3QUJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56q6NgorPFU4MzI1PiA8VTgzMjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojKUwCis8VTg1Qzg+IDxVODVDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iXiDAKKzxVODYyQz4gPFU4NjJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JisMAorPFU4NjY3PiA8VTg2Njc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomacyOQorPFU5Mzc3PiA8VTkzNzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjbcwCis8VTk1REE+IDxVOTVEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mXmjAKKzxVOTdCOT4gPFU5N0I5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z65MAorPFUzNjUzPiA8VTM2NTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmZMwCis8VTM2OUQ+IDxVMzY5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OanTAKKzxVM0ExMj4gPFUzQTEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46iSMAorPFU0NTZCPiA8VTQ1NkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklaswCis8VTQ3Rjg+IDxVNDdGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SfuDAKKzxVNDkwNj4gPFU0OTA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KSGMAorPFU0OUY2PiA8VTQ5RjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkp7YwCis8VTRCRDM+IDxVNEJEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SvkzAKKzxVNENFQj4gPFU0Q0VCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LOrMAorPFU1NUI5PiA8VTU1Qjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllrk0Cis8VTU5MTQ+IDxVNTkxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WklDM0Cis8VTU5NEU+IDxVNTk0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WljjgyNAorPFU1REQ5PiA8VTVERDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlt5kwCis8VTYyMjM+IDxVNjIyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aIozAKKzxVNjNDNj4gPFU2M0M2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+GMjQKKzxVNjY0Nj4gPFU2NjQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pmGMAorPFU2NjhDPiA8VTY2OEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmowxMQorPFU2OTRGPiA8VTY5NEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpY8wCis8VTY5NTE+IDxVNjk1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+alkTAKKzxVNkFDNj4gPFU2QUM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5quGOQorPFU2RTQwPiA8VTZFNDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuYAwCis8VTcyQUE+IDxVNzJBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eKqjAKKzxVNzc3RD4gPFU3NzdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5529MjIwCis8VTgwNjc+IDxVODA2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iBpzAKKzxVODQ3NT4gPFU4NDc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JG1NjEyCis8VTg2Mzc+IDxVODYzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iYtzEKKzxVODY0MT4gPFU4NjQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JmBMAorPFU4NzcwPiA8VTg3NzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonbA2Cis8VThFQTg+IDxVOEVBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6qDAKKzxVOTAzNT4gPFU5MDM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YC1MTQ5NAorPFU5MTA4PiA8VTkxMDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphIgwCis8VTkzNjg+IDxVOTM2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mNqDAKKzxVOTY5Nz4gPFU5Njk3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZqXMTUKKzxVOTgyRj4gPFU5ODJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aCvMAorPFU5OTk3PiA8VTk5OTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpppczNworPFU5QTI0PiA8VTlBMjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqKQwCis8VTlBOTk+IDxVOUE5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mqmTgKKzxVOUI0MT4gPFU5QjQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a2BNjM3Cis8VTM2RkI+IDxVMzZGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ObuzAKKzxVNDgxMT4gPFU0ODExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KCRMAorPFU0OUIxPiA8VTQ5QjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkprEwCis8VTRBRTU+IDxVNEFFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SrpTAKKzxVNUMyRj4gPFU1QzJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bCvMAorPFU1Q0RFPiA8VTVDREU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPls54wCis8VTcxNDM+IDxVNzE0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eFgzAKKzxVOERFQz4gPFU4REVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LesMQorPFU4RTVFPiA8VThFNUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouZ4wCis8VTk4MEQ+IDxVOTgwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mgjTAKKzxVMzU1Rj4gPFUzNTVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45WfMAorPFU0MjEwPiA8VTQyMTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiJAwCis8VTQzNkE+IDxVNDM2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SNqjAKKzxVNDU1QT4gPFU0NTVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JWaMAorPFU1MzMxPiA8VTUzMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljLEwCis8VTU1OUY+IDxVNTU5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WWnzExMQorPFU1NjMzPiA8VTU2MzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmLMwCis8VTVBQkY+IDxVNUFCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WqvzAKKzxVNjEyNj4gPFU2MTI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oSmMTcKKzxVNjEyNz4gPFU2MTI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oSnMjA4NQorPFU2MTkyPiA8VTYxOTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhpIwCis8VTY0OEM+IDxVNjQ4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aSjDAKKzxVNjkyMj4gPFU2OTIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qSiMAorPFU2OUY2PiA8VTY5RjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmp7YwCis8VTZBM0I+IDxVNkEzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aouzAKKzxVNkU4Mz4gPFU2RTgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqDMTM2MworPFU3N0I2PiA8VTc3QjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnrYwCis8VTc4NEE+IDxVNzg0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ehijAKKzxVN0JEMT4gPFU3QkQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56+RMzcKKzxVN0MwMD4gPFU3QzAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57CAMAorPFU3QzIzPiA8VTdDMjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsKMxCis8VTdDNDQ+IDxVN0M0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+exhDAKKzxVODA2OT4gPFU4MDY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IGpMzgKKzxVODA2RD4gPFU4MDZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IGtMAorPFU4MDc1PiA8VTgwNzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogbUxCis8VTg1MkU+IDxVODUyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iUrjAKKzxVODU2Mj4gPFU4NTYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JWiMAorPFU4QjA5PiA8VThCMDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorIkwCis8VTk0MDA+IDxVOTQwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mQgDAKKzxVOTQ0RT4gPFU5NDRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZGOMAorPFU5OTNEPiA8VTk5M0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppL0wCis8VTk5NEI+IDxVOTk0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mlizAKKzxVOTk4OD4gPFU5OTg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aaIMjM5Cis8VTlBMjk+IDxVOUEyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+moqTAKKzxVNTc2ND4gPFU1NzY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z2kNjYyCis8VTU4MDM+IDxVNTgwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WggzY3Cis8VTVBNkI+IDxVNUE2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WpqzAKKzxVNUQxMD4gPFU1RDEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bSQMzIKKzxVNUQxMT4gPFU1RDExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bSRMworPFU2MEMzPiA8VTYwQzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmg4MwCis8VTY2MDY+IDxVNjYwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aYhjEyODEKKzxVNjY1Qz4gPFU2NjVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pmcMAorPFU3MTFDPiA8VTcxMUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhJwwCis8VTczMTE+IDxVNzMxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eMkTAKKzxVNzQyOD4gPFU3NDI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55CoOQorPFU3NDdCPiA8VTc0N0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkbswCis8VTgzQ0U+IDxVODNDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPjjAKKzxVODcyQj4gPFU4NzJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JyrMAorPFU4OEM4PiA8VTg4Qzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo4gyCis8VThDODc+IDxVOEM4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iyhzAKKzxVOTE4Qz4gPFU5MThDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YaMMworPFU5MzE1PiA8VTkzMTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjJUwCis8VTk1MUY+IDxVOTUxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mUnzExCis8VTlBMDk+IDxVOUEwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+moiTAKKzxVOUFFMD4gPFU5QUUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6augMAorPFU5QUUxPiA8VTlBRTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpq6E3Cis8VTlBRTg+IDxVOUFFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mrqDAKKzxVOUJFND4gPFU5QkU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a+kNgorPFU5Q0IyPiA8VTlDQjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsrIxOAorPFU5RDdFPiA8VTlEN0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptb4wCis8VTlFNEQ+IDxVOUU0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m5jTAKKzxVM0E3Mj4gPFUzQTcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46myMAorPFU0ODA1PiA8VTQ4MDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoIUwCis8VTU4Rjg+IDxVNThGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WjuDAKKzxVNThGQz4gPFU1OEZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aO8MQorPFU2MDgzPiA8VTYwODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgoMxMworPFU2MzQ2PiA8VTYzNDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjYYxMDI1Cis8VTY4QjE+IDxVNjhCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aisTAKKzxVNzg3MT4gPFU3ODcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56GxMAorPFU3QTA3PiA8VTdBMDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqIcwCis8VTdBMUI+IDxVN0ExQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eomzAKKzxVN0Q5MT4gPFU3RDkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57aRMgorPFU4OENEPiA8VTg4Q0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo40xCis8VTk1QUI+IDxVOTVBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mWqzAKKzxVOTVCOD4gPFU5NUI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Za4MAorPFU5NjAzPiA8VTk2MDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmIMxNgorPFU5RjZCPiA8VTlGNkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvaswCis8VTNBRkI+IDxVM0FGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OruzAKKzxVNTZGMD4gPFU1NkYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZuwNzQwMgorPFU2RDgzPiA8VTZEODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtoMwCis8VTc3NEY+IDxVNzc0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+edjzQKKzxVNjRDMz4gPFU2NEMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pODMAorPFUzNUU1PiA8VTM1RTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjl6UwCis8VTQ3RUY+IDxVNDdFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SfrzAKKzxVNDlBMj4gPFU0OUEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KaiMAorPFU0QkZBPiA8VTRCRkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkr7owCis8VTU5RTE+IDxVNTlFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WnoTAKKzxVNUVEMz4gPFU1RUQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5buTNzM0Cis8VTYyNjk+IDxVNjI2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aJqTQ2NTUKKzxVNjJFMT4gPFU2MkUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ouhMAorPFU2MkVDPiA8VTYyRUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmi6w4MTU1Cis8VTYzMDQ+IDxVNjMwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aMhDAKKzxVNjRGND4gPFU2NEY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pO0MjEKKzxVNjg3MD4gPFU2ODcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qGwMAorPFU2RkY2PiA8VTZGRjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv7YwCis8VTdDNTc+IDxVN0M1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+exlzAKKzxVODZERT4gPFU4NkRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JueMTAKKzxVOTA2OT4gPFU5MDY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YGpNjIKKzxVOTVDQT4gPFU5NUNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZeKMTUKKzxVOTYxND4gPFU5NjE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZiUMjYyNgorPFU5NzI5PiA8VTk3Mjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnKkwCis8VTk3OUY+IDxVOTc5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+menzAKKzxVNTU4Nz4gPFU1NTg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZaHMTk2MQorPFU1NkI5PiA8VTU2Qjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmrkwCis8VTU3ODM+IDxVNTc4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WegzEyODcKKzxVNjJDOT4gPFU2MkM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ouJMzk2NDUKKzxVNjdDNj4gPFU2N0M2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p+GMAorPFU3OEQ2PiA8VTc4RDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPno5YwCis8VTdGQ0I+IDxVN0ZDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e/izAKKzxVODNDOD4gPFU4M0M4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I+IMAorPFU5MDhCPiA8VTkwOEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgosxNDMKKzxVMzU0Nz4gPFUzNTQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45WHMAorPFU1MjRDPiA8VTUyNEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliYwxOTIKKzxVNjNFNj4gPFU2M0U2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+mMAorPFU2NUVGPiA8VTY1RUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPml681MgorPFU3ODJDPiA8VTc4MkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoKwxCis8VTQ3RDE+IDxVNDdEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SfkTAKKzxVODVERT4gPFU4NURFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JeeMAorPFUzRTBBPiA8VTNFMEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuIowCis8VTNFQ0I+IDxVM0VDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O7izAKKzxVM0VERD4gPFUzRUREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47udMAorPFU0MEIwPiA8VTQwQjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgrAwCis8VTQwRjM+IDxVNDBGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SDszAKKzxVNDNDMD4gPFU0M0MwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I+AMAorPFU0NEU1PiA8VTQ0RTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkk6UwCis8VTQ1RjY+IDxVNDVGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SXtjAKKzxVNDc1Mz4gPFU0NzUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J2TMAorPFU0QTg5PiA8VTRBODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqokwCis8VTRDNkI+IDxVNEM2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SxqzAKKzxVNEQ5Qj4gPFU0RDlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LabMAorPFU2M0U3PiA8VTYzRTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmj6cwCis8VTY1MEI+IDxVNjUwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aUizAKKzxVNjk0Qj4gPFU2OTRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qWLMAorPFU2RTgyPiA8VTZFODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuoIwCis8VTcyMDk+IDxVNzIwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eIiTAKKzxVNzRDRT4gPFU3NENFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55OOMAorPFU3NjBDPiA8VTc2MEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmIwxMQorPFU4MTRBPiA8VTgxNEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohYoyMTIzCis8VTgxQzg+IDxVODFDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iHiDAKKzxVODFEOD4gPFU4MUQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IeYMTcKKzxVODcyMT4gPFU4NzIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JyhMTAzMQorPFU4NzRCPiA8VTg3NEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonYswCis8VTg3NzI+IDxVODc3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+idsjIKKzxVODgxRj4gPFU4ODFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KCfMworPFU4RkEyPiA8VThGQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovqIwCis8VThGQTM+IDxVOEZBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i+ozIzNzUKKzxVOTQ1RT4gPFU5NDVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZGeMAorPFU5NTc0PiA8VTk1NzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplbQyCis8VTlCMEU+IDxVOUIwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+msjjAKKzxVOUJGQj4gPFU5QkZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a+7MAorPFVGOTBFPiA8VUY5MEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPvpI4wCis8VTU1NjY+IDxVNTU2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WVpjYwMDAKKzxVOTdBMT4gPFU5N0ExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z6hMAorPFUzNjkzPiA8VTM2OTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmpMwCis8VTM5NEU+IDxVMzk0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OljjAKKzxVNDE1OD4gPFU0MTU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IWYMAorPFU0MkYxPiA8VTQyRjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPki7EwCis8VTQ2ODU+IDxVNDY4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SahTAKKzxVNDgyRD4gPFU0ODJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KCtMAorPFU0OUQyPiA8VTQ5RDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkp5IwCis8VTRGODY+IDxVNEY4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+hjI4OTQKKzxVNEZFQj4gPFU0RkVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L+rMAorPFU1MDA4PiA8VTUwMDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgIgwCis8VTU1M0I+IDxVNTUzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUuzEKKzxVNUE2MT4gPFU1QTYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5amhMAorPFU1RDAzPiA8VTVEMDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltIM2Cis8VTVEMEQ+IDxVNUQwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W0jTAKKzxVNUVCMj4gPFU1RUIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bqyMAorPFU1Rjk1PiA8VTVGOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvpU1NQorPFU1RkEwPiA8VTVGQTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvqAwCis8VTY3NjU+IDxVNjc2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+adpTQwODU3MQorPFU2OEJFPiA8VTY4QkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmor4wCis8VTY4RjY+IDxVNjhGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ajtjAKKzxVNkQ5RT4gPFU2RDlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5raeMTkKKzxVNkRGNj4gPFU2REY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5re2MAorPFU3MzBEPiA8VTczMEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjI0wCis8VTc0MUM+IDxVNzQxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eQnDAKKzxVN0I1OT4gPFU3QjU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj562ZMAorPFU3QjgyPiA8VTdCODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnroIwCis8VTgzQjE+IDxVODNCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iOsTUwODEKKzxVODQwQT4gPFU4NDBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JCKMzYKKzxVOTAyOD4gPFU5MDI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YCoMAorPFU5MEYyPiA8VTkwRjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg7IwCis8VTkzMzg+IDxVOTMzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mMuDAKKzxVOTRGQz4gPFU5NEZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZO8MgorPFU5QTBCPiA8VTlBMEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqIswCis8VTlCRTA+IDxVOUJFMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mvoDAKKzxVOUQ4Nj4gPFU5RDg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6baGMAorPFU5RUIzPiA8VTlFQjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpurMwCis8VTQwQkU+IDxVNDBCRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SCvjAKKzxVMzgyMz4gPFUzODIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46CjMAorPFUzRkEyPiA8VTNGQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvqIwCis8VTQxMjQ+IDxVNDEyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SEpDAKKzxVNDRGNj4gPFU0NEY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JO2MAorPFU0QzlBPiA8VTRDOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkspowCis8VTVBMTU+IDxVNUExNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WolTAKKzxVNkFGND4gPFU2QUY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qu0MAorPFU2RkQxPiA8VTZGRDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv5ExMQorPFU3MDI4PiA8VTcwMjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngKgyOAorPFU3MDJDPiA8VTcwMkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngKwwCis8VTc2NUU+IDxVNzY1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eZnjE3MAorPFU3NjY5PiA8VTc2Njk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmakwCis8VTc3NTA+IDxVNzc1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+edkDI1MAorPFU3NzVFPiA8VTc3NUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnZ4wCis8VTdDNDE+IDxVN0M0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+exgTI0NworPFU3QzVGPiA8VTdDNUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsZ81Cis8VTg1RkU+IDxVODVGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iXvjAKKzxVODk3MD4gPFU4OTcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KWwMAorPFU4Q0RBPiA8VThDREE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPos5owCis8VThDRjQ+IDxVOENGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iztDMyCis8VThENDk+IDxVOEQ0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i1iTM2Cis8VThENTY+IDxVOEQ1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i1ljUzMjcKKzxVOTgzQz4gPFU5ODNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aC8MAorPFU5ODQyPiA8VTk4NDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoYIwCis8VTM0NjM+IDxVMzQ2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ORozAKKzxVMzYxMz4gPFUzNjEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45iTMAorPFUzN0E5PiA8VTM3QTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnqkwCis8VTM5QTg+IDxVMzlBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OmqDAKKzxVM0NENT4gPFUzQ0Q1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47OVMAorPFU0MUJFPiA8VTQxQkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhr4wCis8VTQzNDA+IDxVNDM0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SNgDAKKzxVNDQ0Qz4gPFU0NDRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JGMMAorPFU0OUE4PiA8VTQ5QTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpqgwCis8VTRBOEQ+IDxVNEE4RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SqjTAKKzxVNEMxMD4gPFU0QzEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LCQMAorPFU0Q0ZGPiA8VTRDRkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPks78wCis8VTUxMTY+IDxVNTExNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WEljAKKzxVNTE3MD4gPFU1MTcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YWwMTQ0NTAKKzxVNTNCMT4gPFU1M0IxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y6xMAorPFU1NkQyPiA8VTU2RDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlm5IwCis8VTVBNkE+IDxVNUE2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WpqjU0MworPFU1QzlBPiA8VTVDOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlspoxMTAyCis8VTVENTA+IDxVNUQ1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W1kDEKKzxVNUU3MT4gPFU1RTcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bmxMAorPFU2MUUyPiA8VTYxRTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmh6IwCis8VTYyRTY+IDxVNjJFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aLpjIwMDQKKzxVNjUxND4gPFU2NTE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pSUMTkKKzxVNjU5Mz4gPFU2NTkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5paTMTUzCis8VTY1OTU+IDxVNjU5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWlTAKKzxVNjgwRj4gPFU2ODBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qCPMjYwMworPFU2QjA0PiA8VTZCMDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrIQ5Cis8VTZCMTc+IDxVNkIxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aslzAKKzxVNkY5Qz4gPFU2RjlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r6cNDg2Cis8VTcwM0U+IDxVNzAzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eAvjMKKzxVNzA0Nj4gPFU3MDQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54GGMAorPFU3MDYxPiA8VTcwNjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngaEwCis8VTcxRTM+IDxVNzFFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHozAKKzxVNzFGNz4gPFU3MUY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54e3MAorPFU3NEJDPiA8VTc0QkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkrwwCis8VTc5Mzc+IDxVNzkzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ektzAKKzxVN0JFRT4gPFU3QkVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56+uMTU5MgorPFU3QzQzPiA8VTdDNDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsYMxMworPFU3QzYzPiA8VTdDNjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsaMzCis8VTdDRjc+IDxVN0NGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eztzAKKzxVN0U3Rj4gPFU3RTdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57m/MAorPFU4NDdCPiA8VTg0N0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokbswCis8VTg0REQ+IDxVODRERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iTnTg0MDgKKzxVODVDRD4gPFU4NUNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JeNNTUKKzxVODYyQj4gPFU4NjJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JirMAorPFU4NjJEPiA8VTg2MkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomK0yNworPFU4OTM0PiA8VTg5MzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopLQxMjYKKzxVODk1NT4gPFU4OTU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KWVMAorPFU4OTY0PiA8VTg5NjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopaQxCis8VTg5NzQ+IDxVODk3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iltDAKKzxVODk3RD4gPFU4OTdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KW9MAorPFU4QjRCPiA8VThCNEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorYswCis8VThCOTU+IDxVOEI5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iulTAKKzxVOEMzMD4gPFU4QzMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LCwOAorPFU4RTlEPiA8VThFOUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoup0wCis8VTk0NkQ+IDxVOTQ2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mRrTAKKzxVOTQ4ND4gPFU5NDg0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZKEMgorPFU5NTY3PiA8VTk1Njc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplac2Cis8VTk1Q0M+IDxVOTVDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mXjDIKKzxVOTYxMT4gPFU5NjExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZiRNDc2Cis8VTk3Q0E+IDxVOTdDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mfijAKKzxVMzZFNj4gPFUzNkU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45umMAorPFUzQTJCPiA8VTNBMkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqKswCis8VTNBNUM+IDxVM0E1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OpnDAKKzxVM0MxNj4gPFUzQzE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47CWMAorPFU0Mjk2PiA8VTQyOTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkipYwCis8VTQzMkI+IDxVNDMyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SMqzAKKzxVNThDOD4gPFU1OEM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aOIMQorPFU1QjNFPiA8VTVCM0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrL4wCis8VTVCNDQ+IDxVNUI0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WthDAKKzxVNUI0Rj4gPFU1QjRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a2PMAorPFU2MUQyPiA8VTYxRDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmh5IzMTYyCis8VTYxRjY+IDxVNjFGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aHtjQwCis8VTYzRkQ+IDxVNjNGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aPvTcxNgorPFU2NEU1PiA8VTY0RTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmk6UwCis8VTY1MkM+IDxVNjUyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aUrDIKKzxVNjk4ND4gPFU2OTg0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qaEMzk2Cis8VTZCMTY+IDxVNkIxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+asljQKKzxVNkQ2OD4gPFU2RDY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rWoMAorPFU2RjI0PiA8VTZGMjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvKQxCis8VTcwNjA+IDxVNzA2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eBoDAKKzxVNzIyNj4gPFU3MjI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54imMAorPFU3RTlDPiA8VTdFOUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnupw5Cis8VTdGMDY+IDxVN0YwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e8hjI5MQorPFU3RjcxPiA8VTdGNzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvbEwCis8VTg5QTc+IDxVODlBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+impzAKKzxVODlCRD4gPFU4OUJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ka9OAorPFU4OUM4PiA8VTg5Qzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPop4gxODI1Cis8VTkxODI+IDxVOTE4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mGgjAKKzxVOTg3Mj4gPFU5ODcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aGyMAorPFUzNzJFPiA8VTM3MkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnK4wCis8VTNDNkI+IDxVM0M2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OxqzAKKzxVNDBGOT4gPFU0MEY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IO5MAorPFU1OENGPiA8VTU4Q0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlo48wCis8VTZFRTU+IDxVNkVFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a7pTk4NgorPFU2RkVCPiA8VTZGRUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv6s1Cis8VTcwQzI+IDxVNzBDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eDgjY0MDgKKzxVNzFENz4gPFU3MUQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54eXMAorPFU3MjAxPiA8VTcyMDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniIEwCis8VTcyMUI+IDxVNzIxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eImzM4Cis8VTcyMjQ+IDxVNzIyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eIpDAKKzxVNzIyQj4gPFU3MjJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54irMAorPFU3NEQzPiA8VTc0RDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnk5MwCis8VTU1Nzc+IDxVNTU3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WVtzI0OAorPFUzNzU3PiA8VTM3NTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnZcwCis8VTM3Q0Q+IDxVMzdDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OfjTAKKzxVMzg4Mz4gPFUzODgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46KDMAorPFUzQzYyPiA8VTNDNjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsaIwCis8VTNGQkY+IDxVM0ZCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O+vzAKKzxVNDFBMT4gPFU0MUExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IahMAorPFU0ODU5PiA8VTQ4NTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoZkwCis8VTRCRDY+IDxVNEJENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SvljAKKzxVNEM3Nj4gPFU0Qzc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LG2MAorPFU0RkNEPiA8VTRGQ0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkv40wCis8VTUyQzY+IDxVNTJDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WLhjAKKzxVNUFDRj4gPFU1QUNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5auPMAorPFU1RUNBPiA8VTVFQ0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlu4oyMzE5Cis8VTY4Nzk+IDxVNjg3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ahuTAKKzxVNjk5ND4gPFU2OTk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qaUMTI4Cis8VTZCMzQ+IDxVNkIzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+astDAKKzxVNzJGQz4gPFU3MkZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54u8NDMzMAorPFU3NDA1PiA8VTc0MDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkIU0MzYKKzxVNzQ2Rj4gPFU3NDZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55GvMAorPFU3QTAyPiA8VTdBMDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqIIxCis8VTdCNjQ+IDxVN0I2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+etpDAKKzxVODI0Nj4gPFU4MjQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ImGMgorPFU4M0E4PiA8VTgzQTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojqg0Cis8VTg0Qzg+IDxVODRDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iTiDEKKzxVODRFMj4gPFU4NEUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JOiMAorPFU4NzBCPiA8VTg3MEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonIswCis8VTg3ODI+IDxVODc4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iegjM3NworPFU4RUI0PiA8VThFQjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPourQwCis8VTkwQ0U+IDxVOTBDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mDjjcyNTIKKzxVOTBEMj4gPFU5MEQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YOSMAorPFU5MERFPiA8VTkwREU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg54wCis8VTkyQzM+IDxVOTJDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mLgzAKKzxVOTUxMj4gPFU5NTEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZSSMjAKKzxVOTVBQz4gPFU5NUFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZasMAorPFU5NjA2PiA8VTk2MDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmIYxMAorPFUzNEVBPiA8VTM0RUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjk6owCis8VTM2NUY+IDxVMzY1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OZnzAKKzxVM0FGMD4gPFUzQUYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46uwMAorPFUzQkJFPiA8VTNCQkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrr4wCis8VTNGOTc+IDxVM0Y5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O+lzAKKzxVNDAzNj4gPFU0MDM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IC2MAorPFU0MDQxPiA8VTQwNDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgYEwCis8VTU4NzE+IDxVNTg3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WhsTAKKzxVNUNDRT4gPFU1Q0NFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bOOMAorPFU1RDAwPiA8VTVEMDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltIAxCis8VTYwQTI+IDxVNjBBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aCojMKKzxVNjU4Rj4gPFU2NThGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5paPMAorPFU2NzE2PiA8VTY3MTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnJYwCis8VTY3MTc+IDxVNjcxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aclzQ5NDUKKzxVNjcyND4gPFU2NzI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pykMAorPFU2QTAzPiA8VTZBMDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqIMwCis8VTcwRkE+IDxVNzBGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eDujAKKzxVNzg2MD4gPFU3ODYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56GgMAorPFU4QThGPiA8VThBOEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqo8wCis8VTQzNUE+IDxVNDM1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SNmjAKKzxVNDU1RT4gPFU0NTVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JWeMAorPFU1N0NDPiA8VTU3Q0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPln4wwCis8VTZENkE+IDxVNkQ2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a1qjg5MTcKKzxVODQ5Nz4gPFU4NDk3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JKXMAorPFU2MzVFPiA8VTYzNUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjZ4xMTczCis8VTY0ODg+IDxVNjQ4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aSiDEyCis8VTM1RTY+IDxVMzVFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OXpjAKKzxVMzdBMD4gPFUzN0EwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj456gMAorPFUzN0M5PiA8VTM3Qzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjn4kwCis8VTM3Rjk+IDxVMzdGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OfuTAKKzxVM0ExMz4gPFUzQTEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46iTMAorPFU0MEQ1PiA8VTQwRDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkg5UwCis8VTQ3MEU+IDxVNDcwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ScjjAKKzxVNDc0MT4gPFU0NzQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J2BMAorPFU0QzhGPiA8VTRDOEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkso8wCis8VTUyQjM+IDxVNTJCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WKszc2MDcKKzxVNTJCND4gPFU1MkI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Yq0MAorPFU1MkRFPiA8VTUyREU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPli542MQorPFU1NEYwPiA8VTU0RjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlk7AwCis8VTU1MjA+IDxVNTUyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUoDQ3NworPFU1NjJFPiA8VTU2MkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmK4wCis8VTVEMDI+IDxVNUQwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W0gjEwMQorPFU1RDk3PiA8VTVEOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltpcwCis8VTYxQTU+IDxVNjFBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aGpTAKKzxVNjgwRT4gPFU2ODBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qCOMjgKKzxVNkQ3Nj4gPFU2RDc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rW2MAorPFU2RDlEPiA8VTZEOUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtp02MQorPFU2Rjg3PiA8VTZGODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvocwCis8VTcyNjI+IDxVNzI2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eJojMyOTcKKzxVNzVFOD4gPFU3NUU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55eoNTMKKzxVNzY0Nj4gPFU3NjQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55mGMAorPFU3OEYxPiA8VTc4RjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPno7EwCis8VTdBODI+IDxVN0E4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eqgjAKKzxVN0MyOT4gPFU3QzI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57CpMAorPFU4N0U3PiA8VTg3RTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPon6cwCis8VTkxQUE+IDxVOTFBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mGqjI2Cis8VTk0MTI+IDxVOTQxMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mQkjAKKzxVOTRGOT4gPFU5NEY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZO5MQorPFUzN0Q5PiA8VTM3RDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjn5kwCis8VTM5RUY+IDxVMzlFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OnrzAKKzxVNDFFRD4gPFU0MUVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IetMAorPFU0NTY5PiA8VTQ1Njk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklakwCis8VTQ3NjQ+IDxVNDc2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SdpDAKKzxVNENEMz4gPFU0Q0QzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LOTMAorPFU0RDRGPiA8VTRENEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktY8wCis8VTRGNkM+IDxVNEY2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S9rDU4OQorPFU1NEJFPiA8VTU0QkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkr4wCis8VTU5RTU+IDxVNTlFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WnpTk3MAorPFU2MDQ1PiA8VTYwNDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgYUwCis8VTY4MzM+IDxVNjgzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+agszEwCis8VTZBNTE+IDxVNkE1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+apkTAKKzxVNkY2Nj4gPFU2RjY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r2mNDEzCis8VTcyRUI+IDxVNzJFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eLqzAKKzxVODAwMT4gPFU4MDAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ICBODg2ODcKKzxVODM1Nj4gPFU4MzU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I2WMAorPFU4RjUxPiA8VThGNTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovZEwCis8VTkyQTA+IDxVOTJBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mKoDAKKzxVOTREMT4gPFU5NEQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZORMworPFU1MEQ3PiA8VTUwRDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlg5cwCis8VTVBRUE+IDxVNUFFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WrqjExMQorPFU2MUE2PiA8VTYxQTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhqYwCis8VTZBNkY+IDxVNkE2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aprzAKKzxVNzBEOT4gPFU3MEQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54OZMzk4Cis8VTdENjE+IDxVN0Q2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e1oTI4Cis8VTgwMjI+IDxVODAyMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iAojAKKzxVODAyRT4gPFU4MDJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ICuMAorPFU4RUMyPiA8VThFQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPou4IwCis8VTkxNkE+IDxVOTE2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mFqjE3NQorPFU5QUREPiA8VTlBREQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpq50wCis8VTU2MUU+IDxVNTYxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WYnjI3Cis8VTgwOEI+IDxVODA4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iCizMzMgorPFUzNTM5PiA8VTM1Mzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlLkwCis8VTM1ODA+IDxVMzU4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OWgDAKKzxVMzlBMT4gPFUzOUExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46ahMAorPFU0RTUwPiA8VTRFNTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuZAxNzQzMAorPFU0RUMyPiA8VTRFQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPku4IyCis8VTUzRkI+IDxVNTNGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPuzEyCis8VTU0Rjc+IDxVNTRGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WTtzAKKzxVNUZDNz4gPFU1RkM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b+HMAorPFU2MjUwPiA8VTYyNTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiZAxMAorPFU2OTdEPiA8VTY5N0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpb0wCis8VTZBMDI+IDxVNkEwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aogjE5NworPFU2QzNCPiA8VTZDM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsLswCis8VTZDRDA+IDxVNkNEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+azkDMKKzxVNzM4Rj4gPFU3MzhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj546PMAorPFU3ODMzPiA8VTc4MzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoLMwCis8VTdBRkI+IDxVN0FGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eruzAKKzxVN0MxNT4gPFU3QzE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57CVMQorPFU4MjdCPiA8VTgyN0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoibswCis8VTk2MUU+IDxVOTYxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mYnjAKKzxVOTdGNz4gPFU5N0Y3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z+3MAorPFU5ODMxPiA8VTk4MzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoLEwCis8VTlDMzM+IDxVOUMzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mwszAKKzxVOUNEMz4gPFU5Q0QzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bOTMAorPFU0RTg2PiA8VTRFODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuoY3NzQ5NjcKKzxVOTkwRT4gPFU5OTBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aSOMAorPFU5OTc5PiA8VTk5Nzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppbkwCis8VTUyRDI+IDxVNTJEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WLkjc2NzkKKzxVNTZDND4gPFU1NkM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZuEMAorPFU2NEMyPiA8VTY0QzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmk4IzMjMKKzxVMzQ4RD4gPFUzNDhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45KNMAorPFUzNTIzPiA8VTM1MjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlKMwCis8VTNENjI+IDxVM0Q2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O1ojAKKzxVM0U0RT4gPFUzRTRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47mOMAorPFU0MjUzPiA8VTQyNTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiZMwCis8VTQzNjM+IDxVNDM2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SNozAKKzxVNDQyRj4gPFU0NDJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JCvMAorPFU0QTEzPiA8VTRBMTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqJMwCis8VTU4RTg+IDxVNThFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WjqDAKKzxVNUFEOD4gPFU1QUQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5auYMgorPFU2QTkxPiA8VTZBOTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqpExCis8VTZBRDE+IDxVNkFEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+arkTAKKzxVNkIxOT4gPFU2QjE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qyZMAorPFU3NEMzPiA8VTc0QzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnk4MwCis8VTc1N0U+IDxVNzU3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eVvjAKKzxVNzkwQz4gPFU3OTBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56SMMgorPFU3RTMyPiA8VTdFMzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuLIwCis8VTdFOEQ+IDxVN0U4RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e6jTQKKzxVN0U5RD4gPFU3RTlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57qdMAorPFU3RjI3PiA8VTdGMjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvKc3Cis8VTdGNEQ+IDxVN0Y0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9jTAKKzxVN0ZCOD4gPFU3RkI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5764NjEKKzxVODgxRD4gPFU4ODFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KCdMAorPFU4RjYwPiA8VThGNjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovaAwCis8VTk0MzM+IDxVOTQzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mQszAKKzxVOTQ1OD4gPFU5NDU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZGYMAorPFU5NTZEPiA8VTk1NkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpla01OQorPFU5NkY3PiA8VTk2Rjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpm7c5MjUzCis8VTk3NDE+IDxVOTc0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mdgTAKKzxVOUYzQT4gPFU5RjNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6by6MAorPFUzNDREPiA8VTM0NEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkY0wCis8VTM0QTY+IDxVMzRBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OSpjAKKzxVMzY3Qz4gPFUzNjdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45m8MAorPFUzODVFPiA8VTM4NUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoZ4wCis8VTNEOUY+IDxVM0Q5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O2nzAKKzxVM0YwRD4gPFUzRjBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47yNMAorPFUzRkQ0PiA8VTNGRDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjv5QwCis8VTQyNDI+IDxVNDI0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SJgjAKKzxVNDZGNj4gPFU0NkY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ju2MAorPFU0OEMyPiA8VTQ4QzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPko4IwCis8VTREMEU+IDxVNEQwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S0jjAKKzxVNTBBQj4gPFU1MEFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YKrMAorPFU1MTIxPiA8VTUxMjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhKExMzIKKzxVNTNCRD4gPFU1M0JEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y69MAorPFU1NzkyPiA8VTU3OTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnpI2NzEKKzxVNTg0MT4gPFU1ODQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aGBMAorPFU1OEQ4PiA8VTU4RDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlo5g3Cis8VTZBMEY+IDxVNkEwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aojzAKKzxVNkFEMD4gPFU2QUQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5quQMAorPFU2RDIxPiA8VTZEMjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtKEwCis8VTZGMkY+IDxVNkYyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a8rzE1Cis8VTcwNDU+IDxVNzA0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eBhTAKKzxVNzYyMz4gPFU3NjIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55ijMAorPFU3NjU3PiA8VTc2NTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmZcwCis8VTc4Q0E+IDxVNzhDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ejijY0NQorPFU3OEU1PiA8VTc4RTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPno6UwCis8VTc5Mjc+IDxVNzkyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ekpzAKKzxVNzkyOD4gPFU3OTI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56SoMAorPFU3RDZCPiA8VTdENkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntasxNQorPFU4MDEyPiA8VTgwMTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogJI0MworPFU4NTRDPiA8VTg1NEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolYwwCis8VTg1N0U+IDxVODU3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iVvjEwOTAKKzxVODVERj4gPFU4NURGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JefMAorPFU4NjMyPiA8VTg2MzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomLIwCis8VTg2M0Q+IDxVODYzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iYvTAKKzxVODY0Nj4gPFU4NjQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JmGMAorPFU4QTg0PiA8VThBODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqoQwCis8VThCODQ+IDxVOEI4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iuhDAKKzxVOEJEND4gPFU4QkQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K+UMTcKKzxVOTQ3OD4gPFU5NDc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZG4MAorPFU5ODFCPiA8VTk4MUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoJswCis8VTlFMTM+IDxVOUUxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m4kzAKKzxVM0I2OT4gPFUzQjY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj462pMAorPFUzQzk1PiA8VTNDOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjspUwCis8VTNEMDM+IDxVM0QwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O0gzAKKzxVNDI2QT4gPFU0MjZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ImqMAorPFU0MzY1PiA8VTQzNjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjaUwCis8VTQ0Qjk+IDxVNDRCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SSuTAKKzxVNDhBRT4gPFU0OEFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KKuMAorPFU0OEU2PiA8VTQ4RTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPko6YwCis8VTRCOTE+IDxVNEI5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SukTAKKzxVNTEzRD4gPFU1MTNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YS9MAorPFU2NTAyPiA8VTY1MDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlIIwCis8VTZDRUE+IDxVNkNFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+azqjEyMDAxCis8VTZEOTk+IDxVNkQ5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a2mTAKKzxVNkREQT4gPFU2RERBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5reaNjIKKzxVNzlCNz4gPFU3OUI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56a3MAorPFU3QzdCPiA8VTdDN0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsbsyNjM2MgorPFU3RDJGPiA8VTdEMkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntK80MDAwCis8VTdFODc+IDxVN0U4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e6hzAKKzxVODYzMT4gPFU4NjMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JixMAorPFU5MTc5PiA8VTkxNzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphbk3Cis8VTkyODc+IDxVOTI4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mKhzAKKzxVOTMxMT4gPFU5MzExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YyRMAorPFU5ODJBPiA8VTk4MkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoKowCis8VTk4NUU+IDxVOTg1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mhnjE0MAorPFU5OEEzPiA8VTk4QTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoqMwCis8VTY4RjE+IDxVNjhGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ajsTUxNAorPFU0MjQ0PiA8VTQyNDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiYQwCis8VTRCMEI+IDxVNEIwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SsizAKKzxVNTAzMD4gPFU1MDMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YCwMAorPFU1ODQ0PiA8VTU4NDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloYQ3Cis8VTVEMUE+IDxVNUQxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W0mjEKKzxVNjk1RT4gPFU2OTVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qWeODE3Cis8VTdBMUM+IDxVN0ExQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eonDYKKzxVODUwNj4gPFU4NTA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JSGMAorPFU4NTkwPiA8VTg1OTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolpAwCis8VTUxQjc+IDxVNTFCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WGtzE4NzI5Cis8VTQ2OEY+IDxVNDY4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SajzAKKzxVNEI5QT4gPFU0QjlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K6aMAorPFU1ODBFPiA8VTU4MEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloI4wCis8VTYxMjM+IDxVNjEyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aEozI1NTgKKzxVOEUxQz4gPFU4RTFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LicMAorPFUzNEJGPiA8VTM0QkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkr8wCis8VTM0RUY+IDxVMzRFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OTrzAKKzxVMzgxRj4gPFUzODFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46CfMAorPFUzOTkyPiA8VTM5OTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjppIwCis8VTNDMDA+IDxVM0MwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OwgDAKKzxVM0MxQT4gPFUzQzFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47CaMAorPFUzRDFEPiA8VTNEMUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtJ0wCis8VTNERjA+IDxVM0RGMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O3sDAKKzxVM0U0OD4gPFUzRTQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47mIMAorPFUzRkRCPiA8VTNGREI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjv5swCis8VTQxMUM+IDxVNDExQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SEnDAKKzxVNDE3Qj4gPFU0MTdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IW7MAorPFU0MjZCPiA8VTQyNkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiaswCis8VTQyOEQ+IDxVNDI4RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SKjTAKKzxVNDJFNT4gPFU0MkU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IulMAorPFU0MzYwPiA8VTQzNjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjaAwCis8VTQzNjY+IDxVNDM2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SNpjAKKzxVNDUwNj4gPFU0NTA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JSGMAorPFU0NTIzPiA8VTQ1MjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklKMwCis8VTQ1Mjc+IDxVNDUyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SUpzAKKzxVNDVBNT4gPFU0NUE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JalMAorPFU0NUJEPiA8VTQ1QkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklr0wCis8VTQ1QkY+IDxVNDVCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SWvzAKKzxVNDY3MD4gPFU0NjcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JmwMAorPFU0OEQzPiA8VTQ4RDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPko5MwCis8VTQ4RUI+IDxVNDhFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SjqzAKKzxVNEM1OD4gPFU0QzU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LGYMAorPFU0RDNCPiA8VTREM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktLswCis8VTRENTM+IDxVNEQ1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S1kzAKKzxVNEQ2OT4gPFU0RDY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LWpMAorPFU1MjE1PiA8VTUyMTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliJUwCis8VTUyNTM+IDxVNTI1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WJkzAKKzxVNTI3QT4gPFU1MjdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ym6MAorPFU1Mjk5PiA8VTUyOTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlipkwCis8VTUzOTg+IDxVNTM5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WOmDQ3OAorPFU1NUIxPiA8VTU1QjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllrE3NQorPFU1NjlGPiA8VTU2OUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmp8wCis8VTVBRTA+IDxVNUFFMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WroDIKKzxVNUI0Qj4gPFU1QjRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a2LMAorPFU1Qjc3PiA8VTVCNzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrbcwCis8VTVFRjI+IDxVNUVGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W7sjAKKzxVNjBBMT4gPFU2MEExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oKhMAorPFU2NTIxPiA8VTY1MjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlKEwCis8VTY4QTg+IDxVNjhBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aiqDYzMQorPFU2OEE5PiA8VTY4QTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoqkwCis8VTY4Qjg+IDxVNjhCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aiuDAKKzxVNjhDMz4gPFU2OEMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qODMAorPFU2QTA2PiA8VTZBMDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqIYwCis8VTZDMDI+IDxVNkMwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+awgjAKKzxVNkYxMz4gPFU2RjEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ryTNjAxCis8VTZGMjY+IDxVNkYyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a8pjAKKzxVNzA1NT4gPFU3MDU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54GVMAorPFU3MjgxPiA8VTcyODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnioEyODIKKzxVNzI4Mj4gPFU3MjgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54qCMAorPFU3MjlCPiA8VTcyOUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnipswCis8VTcyRjg+IDxVNzJGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eLuDY0NworPFU3NDgzPiA8VTc0ODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkoMzNzk0Cis8VTc0Qzg+IDxVNzRDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eTiDAKKzxVNzZFMD4gPFU3NkUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55ugMAorPFU3NzVEPiA8VTc3NUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnZ0wCis8VTc5QkI+IDxVNzlCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+emuzMwODc0Cis8VTdBNzI+IDxVN0E3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+epsjAKKzxVN0JGMT4gPFU3QkYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56+xNDA3Cis8VTdDNkM+IDxVN0M2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+exrDMKKzxVN0M4RD4gPFU3QzhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57KNMAorPFU3QzlBPiA8VTdDOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnspowCis8VTdDQ0U+IDxVN0NDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ezjjAKKzxVN0UyRD4gPFU3RTJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57itMAorPFU3RjIxPiA8VTdGMjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvKE0Cis8VTdGNzk+IDxVN0Y3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9uTE5OAorPFU4MjQzPiA8VTgyNDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiYMwCis8VTgzREU+IDxVODNERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPnjAKKzxVODRFMD4gPFU4NEUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JOgNAorPFU4NTNFPiA8VTg1M0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolL4wCis8VTg1REM+IDxVODVEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iXnDM5Cis8VTg2M0E+IDxVODYzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iYujAKKzxVODcwQT4gPFU4NzBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JyKMjMKKzxVODdDRD4gPFU4N0NEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J+NMAorPFU4N0Y4PiA8VTg3Rjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPon7gwCis8VTg4MjE+IDxVODgyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+igoTY5Cis8VTg5MzU+IDxVODkzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iktTAKKzxVOEIyNz4gPFU4QjI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KynMAorPFU4QzhEPiA8VThDOEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoso0yCis8VTkwOEM+IDxVOTA4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mCjDAKKzxVOTE3RT4gPFU5MTdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YW+MQorPFU5MUE4PiA8VTkxQTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphqgxCis8VTkxQzM+IDxVOTFDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mHgzAKKzxVOTFEMD4gPFU5MUQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YeQMgorPFU5MkVCPiA8VTkyRUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpi6swCis8VTkzMDU+IDxVOTMwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mMhTAKKzxVOTNFQj4gPFU5M0VCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+rMAorPFU5NDU3PiA8VTk0NTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkZcwCis8VTk2RTI+IDxVOTZFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mbojMxNgorPFU5QTM5PiA8VTlBMzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqLkwCis8VTlBNkE+IDxVOUE2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mpqjAKKzxVOUE4QT4gPFU5QThBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aqKMzYKKzxVOUJFQz4gPFU5QkVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a+sMAorPFU5QzdBPiA8VTlDN0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsbowCis8VTlDQTE+IDxVOUNBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+myoTAKKzxVOUQ3OT4gPFU5RDc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bW5MAorPFU5RTFEPiA8VTlFMUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuJ0wCis8VTlFNDI+IDxVOUU0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m5gjg5Cis8VTlFOTc+IDxVOUU5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6lzcwCis8VTlFQ0U+IDxVOUVDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7jjMwMzIKKzxVOUVFNz4gPFU5RUU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bunMjIKKzxVM0UxQT4gPFUzRTFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47iaMAorPFUzRjk2PiA8VTNGOTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvpYwCis8VTQ1Q0Q+IDxVNDVDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SXjTAKKzxVNDkxQT4gPFU0OTFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KSaMAorPFU0OUM5PiA8VTQ5Qzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkp4kwCis8VTRGREE+IDxVNEZEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S/mjEwNgorPFU1NEU5PiA8VTU0RTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlk6kyNTA3Cis8VTVBMEM+IDxVNUEwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WojDI0Cis8VTVDREI+IDxVNUNEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WzmzAKKzxVNUNFMj4gPFU1Q0UyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bOiMAorPFU1Q0YyPiA8VTVDRjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPls7IwCis8VTY3NEU+IDxVNjc0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+adjjI2MzkwCis8VTZENkM+IDxVNkQ2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a1rDkKKzxVNkZBNz4gPFU2RkE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r6nMTIKKzxVNzQwNj4gPFU3NDA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55CGODgxMzMKKzxVNzkzQz4gPFU3OTNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56S8MTIxMTAKKzxVNzlBRT4gPFU3OUFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56auOTYKKzxVN0NCND4gPFU3Q0I0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57K0MAorPFU4OENGPiA8VTg4Q0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo484OQorPFU4OEUxPiA8VTg4RTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo6E5NzkKKzxVOTAyNj4gPFU5MDI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YCmNDkKKzxVOTA5MD4gPFU5MDkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKQMQorPFU5MUI0PiA8VTkxQjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphrQyMworPFU5MUNDPiA8VTkxQ0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPph4wyMTExMTEKKzxVOTJGMD4gPFU5MkYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YuwMAorPFU5NTAyPiA8VTk1MDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplIIyNgorPFU5QkM5PiA8VTlCQzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpr4kxCis8VTlDNjc+IDxVOUM2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxpzAKKzxVOUNBND4gPFU5Q0E0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bKkMTMxCis8VTlDRTI+IDxVOUNFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mzojUKKzxVRkExOD4gPFVGQTE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj76iYMAorPFUzNDY2PiA8VTM0NjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkaYwCis8VTM0QTc+IDxVMzRBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OSpzAKKzxVMzUwRj4gPFUzNTBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45SPMAorPFUzNTc4PiA8VTM1Nzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlbgwCis8VTM1REE+IDxVMzVEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OXmjAKKzxVMzYxMT4gPFUzNjExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45iRMAorPFUzN0YzPiA8VTM3RjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjn7MwCis8VTM4NDI+IDxVMzg0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OhgjAKKzxVMzkyMT4gPFUzOTIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46ShMAorPFUzOTI2PiA8VTM5MjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpKYwCis8VTM5RjA+IDxVMzlGMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OnsDAKKzxVM0IwRj4gPFUzQjBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46yPMAorPFUzQjlBPiA8VTNCOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrpowCis8VTNCRTQ+IDxVM0JFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OvpDAKKzxVM0M3OT4gPFUzQzc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47G5MAorPFUzRUExPiA8VTNFQTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuqEwCis8VTNFQ0U+IDxVM0VDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O7jjAKKzxVM0VGQT4gPFUzRUZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47u6MAorPFUzRjE2PiA8VTNGMTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvJYwCis8VTNGNDE+IDxVM0Y0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O9gTAKKzxVM0Y1RD4gPFUzRjVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj472dMAorPFUzRjkwPiA8VTNGOTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvpAwCis8VTNGRTg+IDxVM0ZFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O/qDAKKzxVNDA3Qj4gPFU0MDdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IG7MAorPFU0MEVGPiA8VTQwRUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkg68wCis8VTQxNDQ+IDxVNDE0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SFhDAKKzxVNDFEMD4gPFU0MUQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IeQMAorPFU0MkFBPiA8VTQyQUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiqowCis8VTQzN0Q+IDxVNDM3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SNvTAKKzxVNDRERT4gPFU0NERFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JOeMAorPFU0NTAxPiA8VTQ1MDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklIEwCis8VTQ1MDk+IDxVNDUwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SUiTAKKzxVNDYwOD4gPFU0NjA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JiIMAorPFU0Njk1PiA8VTQ2OTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmpUwCis8VTQ3Q0Y+IDxVNDdDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SfjzAKKzxVNDdEMD4gPFU0N0QwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J+QMAorPFU0ODQzPiA8VTQ4NDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoYMwCis8VTQ5MTk+IDxVNDkxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SkmTAKKzxVNDk3Nj4gPFU0OTc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KW2MAorPFU0QjA1PiA8VTRCMDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrIUwCis8VTRCMDY+IDxVNEIwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SshjAKKzxVNEI4Qj4gPFU0QjhCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K6LMAorPFU0QkE1PiA8VTRCQTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrqUwCis8VTRDMUI+IDxVNEMxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SwmzAKKzxVNEMxQz4gPFU0QzFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LCcMAorPFU0QzlFPiA8VTRDOUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksp4wCis8VTREMDQ+IDxVNEQwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S0hDAKKzxVNEQyMT4gPFU0RDIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LShMAorPFU0RDk4PiA8VTREOTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktpgwCis8VTRFM0Q+IDxVNEUzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S4vTE1MTMxCis8VTRGOEI+IDxVNEY4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+izE0ODUyCis8VTRGRDA+IDxVNEZEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S/kDMzNAorPFU0RkVBPiA8VTRGRUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkv6ozOQorPFU1MDg4PiA8VTUwODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgog2Cis8VTUxMkU+IDxVNTEyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WErjAKKzxVNTEzNz4gPFU1MTM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YS3MQorPFU1MUQzPiA8VTUxRDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlh5MwCis8VTUyMjk+IDxVNTIyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WIqTM4MzY1Cis8VTUyOUI+IDxVNTI5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WKmzY5MjgzCis8VTUyQjE+IDxVNTJCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WKsTIxNDQKKzxVNTJGNT4gPFU1MkY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Yu1MTgKKzxVNTM4Nj4gPFU1Mzg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y6GMTk1NjMKKzxVNTM4OT4gPFU1Mzg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y6JMzgwNAorPFU1M0E0PiA8VTUzQTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljqQwCis8VTUzQUY+IDxVNTNBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WOrzAKKzxVNTNCMj4gPFU1M0IyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y6yMjkKKzxVNTNENT4gPFU1M0Q1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y+VMAorPFU1NDBGPiA8VTU0MEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkI8xMTMwCis8VTU0NTY+IDxVNTQ1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRljQyCis8VTU1MEU+IDxVNTUwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUjjAKKzxVNTUzMz4gPFU1NTMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZSzMzkKKzxVNTZBNj4gPFU1NkE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZqmMQorPFU1NkM3PiA8VTU2Qzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlm4cwCis8VTU3NUM+IDxVNTc1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WdnDcKKzxVNTg1Qj4gPFU1ODVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aGbMAorPFU1OEUyPiA8VTU4RTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlo6IyCis8VTVBMzM+IDxVNUEzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WoszAKKzxVNUE2Rj4gPFU1QTZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5amvMAorPFU1Qzc0PiA8VTVDNzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsbQwCis8VTVDQTY+IDxVNUNBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WypjAKKzxVNURDMT4gPFU1REMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5beBMAorPFU2MEE3PiA8VTYwQTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgqcwCis8VTYwQjc+IDxVNjBCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aCtzAKKzxVNjE0ND4gPFU2MTQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oWEOQorPFU2MjNFPiA8VTYyM0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiL4xMjUKKzxVNjQyRT4gPFU2NDJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pCuMAorPFU2NEZEPiA8VTY0RkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmk70wCis8VTY1MEE+IDxVNjUwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aUijAKKzxVNjUyNj4gPFU2NTI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pSmMAorPFU2NTJEPiA8VTY1MkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlK0wCis8VTY1ODQ+IDxVNjU4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWhDAKKzxVNjZBNj4gPFU2NkE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pqmMQorPFU2NkM2PiA8VTY2QzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmm4Y2Cis8VTY2REU+IDxVNjZERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+abnjAKKzxVNjczOD4gPFU2NzM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5py4MAorPFU2N0E1PiA8VTY3QTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnqUxOQorPFU2ODE3PiA8VTY4MTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoJcxMDI2Cis8VTY4MUI+IDxVNjgxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+agmzAKKzxVNjgzNT4gPFU2ODM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qC1MAorPFU2OEQ5PiA8VTY4RDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmo5kwCis8VTZBQUE+IDxVNkFBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aqqjAKKzxVNkFEND4gPFU2QUQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5quUMAorPFU2QURGPiA8VTZBREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmq58wCis8VTZBRUE+IDxVNkFFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+arqjAKKzxVNkIxMD4gPFU2QjEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qyQMAorPFU2Qjc0PiA8VTZCNzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrbQwCis8VTZCNzc+IDxVNkI3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+attzE5NgorPFU2Q0E1PiA8VTZDQTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsqU0MjEKKzxVNkNCND4gPFU2Q0I0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rK0MAorPFU2Q0I1PiA8VTZDQjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsrUwCis8VTZENzA+IDxVNkQ3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a1sDAKKzxVNkQ5Nj4gPFU2RDk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5raWMAorPFU2RUE3PiA8VTZFQTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuqc1Cis8VTZGRkY+IDxVNkZGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a/vzAKKzxVNzAxRD4gPFU3MDFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54CdMgorPFU3MjA0PiA8VTcyMDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniIQwCis8VTcyMEY+IDxVNzIwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eIjzAKKzxVNzJBMT4gPFU3MkExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54qhMAorPFU3MzAxPiA8VTczMDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjIE3Cis8VTczRDU+IDxVNzNENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ePlTAKKzxVNzQwRD4gPFU3NDBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55CNMAorPFU3NDZFPiA8VTc0NkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnka4wCis8VTc0QzU+IDxVNzRDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eThTAKKzxVNzREMT4gPFU3NEQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55ORMAorPFU3NEU1PiA8VTc0RTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnk6UwCis8VTc1QTA+IDxVNzVBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eWoDE0Cis8VTc1QUM+IDxVNzVBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eWrDMKKzxVNzVFMj4gPFU3NUUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55eiNDcKKzxVNzY2Nz4gPFU3NjY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55mnMAorPFU3NkFBPiA8VTc2QUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmqowCis8VTc2RUQ+IDxVNzZFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ebrTAKKzxVNzdDQj4gPFU3N0NCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+LMAorPFU3ODA1PiA8VTc4MDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoIUwCis8VTc4M0E+IDxVNzgzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+egujEwMgorPFU3ODNFPiA8VTc4M0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoL4yNjcKKzxVNzhGRj4gPFU3OEZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56O/MAorPFU3OTJBPiA8VTc5MkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpKoyCis8VTc5MkI+IDxVNzkyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ekqzEKKzxVNzkzMD4gPFU3OTMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56SwMAorPFU3OUIyPiA8VTc5QjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnprIwCis8VTc5REQ+IDxVNzlERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ennTAKKzxVN0FDQj4gPFU3QUNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56uLNDE2NjMKKzxVN0IyMD4gPFU3QjIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56ygMjMyCis8VTdCNjM+IDxVN0I2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+etozAKKzxVN0JFNT4gPFU3QkU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56+lMAorPFU3QzkyPiA8VTdDOTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnspIzODgwCis8VTdDOUQ+IDxVN0M5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eynTgKKzxVN0NGMj4gPFU3Q0YyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57OyMAorPFU3RDlGPiA8VTdEOUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntp8wCis8VTdFODU+IDxVN0U4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e6hTAKKzxVODEzNz4gPFU4MTM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IS3MAorPFU4MkM4PiA8VTgyQzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi4gwCis8VTgyRDk+IDxVODJEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iLmTAKKzxVODMxOD4gPFU4MzE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IyYMAorPFU4MzU0PiA8VTgzNTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojZQ5MQorPFU4Mzg1PiA8VTgzODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojoUzOAorPFU4Mzg5PiA8VTgzODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojokzMDkzCis8VTg0OUU+IDxVODQ5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iSnjAKKzxVODVGNj4gPFU4NUY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Je2MAorPFU4NjFBPiA8VTg2MUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomJoyCis8VTg2Qjg+IDxVODZCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iauDAKKzxVODZDRT4gPFU4NkNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JuONTkKKzxVODZFMD4gPFU4NkUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JugMAorPFU4NzI3PiA8VTg3Mjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonKcwCis8VTg3Nzc+IDxVODc3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+idtzAKKzxVODgwNz4gPFU4ODA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KCHMAorPFU4ODIzPiA8VTg4MjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooKMwCis8VTg4MkI+IDxVODgyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+igqzAKKzxVODlGQj4gPFU4OUZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ke7MAorPFU4QTQ4PiA8VThBNDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqYgxNAorPFU4Qjg4PiA8VThCODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorogwCis8VThENzI+IDxVOEQ3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i1sjAKKzxVOERERT4gPFU4RERFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LeeMzgKKzxVOEU5Mj4gPFU4RTkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LqSMAorPFU4RjYyPiA8VThGNjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovaIwCis8VThGNjM+IDxVOEY2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i9ozAKKzxVOEY3OT4gPFU4Rjc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L25NQorPFU5MEU2PiA8VTkwRTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg6Y1OQorPFU5MTQ4PiA8VTkxNDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphYgwCis8VTkxRDk+IDxVOTFEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mHmTAKKzxVOTI1RD4gPFU5MjVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YmdMAorPFU5NkI2PiA8VTk2QjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmrY5NDQKKzxVOTZCNz4gPFU5NkI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Zq3MAorPFU5NkI4PiA8VTk2Qjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmrgxNgorPFU5NkYzPiA8VTk2RjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpm7MyMTcKKzxVOTZGND4gPFU5NkY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Zu0MAorPFU5NzQyPiA8VTk3NDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnYIzCis8VTk3NEI+IDxVOTc0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mdizAKKzxVOUIwMT4gPFU5QjAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ayBMAorPFU5QzcxPiA8VTlDNzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsbEwCis8VTlDNzM+IDxVOUM3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxszAKKzxVOUNFOD4gPFU5Q0U4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bOoMAorPFU5RDE3PiA8VTlEMTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptJcwCis8VTlEQzU+IDxVOURDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m3hTAKKzxVOUREMT4gPFU5REQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6beRMAorPFU5RTlDPiA8VTlFOUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpupwwCis8VTUwMDY+IDxVNTAwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAhjI3Cis8VTM0Q0U+IDxVMzRDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OTjjAKKzxVMzcxNT4gPFUzNzE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45yVMAorPFUzNzdBPiA8VTM3N0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnbowCis8VTM3QzA+IDxVMzdDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OfgDAKKzxVMzg1OD4gPFUzODU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46GYMAorPFUzODk4PiA8VTM4OTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjopgwCis8VTM5NTU+IDxVMzk1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OllTAKKzxVMzk4MT4gPFUzOTgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46aBMAorPFUzRDhDPiA8VTNEOEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtowwCis8VTNFQTY+IDxVM0VBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O6pjAKKzxVM0YxMz4gPFUzRjEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47yTMAorPFUzRkJFPiA8VTNGQkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvr4wCis8VTQwNjA+IDxVNDA2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SBoDAKKzxVNDBEQj4gPFU0MERCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IObMAorPFU0MTgyPiA8VTQxODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhoIwCis8VTQzQzg+IDxVNDNDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SPiDAKKzxVNDY3QT4gPFU0NjdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Jm6MAorPFU0OTY1PiA8VTQ5NjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpaUwCis8VTRBMkM+IDxVNEEyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SorDAKKzxVNEI1MT4gPFU0QjUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K2RMAorPFU0RUI3PiA8VTRFQjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkurcwCis8VTUyODY+IDxVNTI4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WKhjAKKzxVNTMzMj4gPFU1MzMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YyyMAorPFU1MzMzPiA8VTUzMzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljLMwCis8VTU1Rjk+IDxVNTVGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WXuTAKKzxVNTY1Mj4gPFU1NjUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZmSMAorPFU1OTQxPiA8VTU5NDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpYE0NAorPFU1OTY5PiA8VTU5Njk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpakwCis8VTU5NzE+IDxVNTk3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WlsTAKKzxVNUFGRT4gPFU1QUZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5au+MAorPFU1QjFBPiA8VTVCMUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrJowCis8VTVFMTg+IDxVNUUxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W4mDIyNTMKKzxVNUVDOT4gPFU1RUM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5buJMjA5MworPFU2MDFDPiA8VTYwMUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgJw0OTcxCis8VTYxNjk+IDxVNjE2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aFqTAKKzxVNjE5MD4gPFU2MTkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oaQMTkKKzxVNjhCRj4gPFU2OEJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qK/MAorPFU2OUU0PiA8VTY5RTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmp6QxCis8VTZBRTM+IDxVNkFFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+arozAKKzxVNkQ5Rj4gPFU2RDlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rafMzcxCis8VTZFOTM+IDxVNkU5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a6kzAKKzxVNkYyMz4gPFU2RjIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ryjMgorPFU2RkMyPiA8VTZGQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv4I1NgorPFU2RkQzPiA8VTZGRDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv5MwCis8VTcxOTE+IDxVNzE5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eGkTAKKzxVNzFFQj4gPFU3MUVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54erMAorPFU3NDg5PiA8VTc0ODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkokwCis8VTc4Q0Y+IDxVNzhDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ejjzAKKzxVN0MzRT4gPFU3QzNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57C+NworPFU3QzYyPiA8VTdDNjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsaIwCis8VTdDNjg+IDxVN0M2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+exqDAKKzxVN0UzQT4gPFU3RTNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57i6MAorPFU3RkY0PiA8VTdGRjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnv7QwCis8VTgwNTQ+IDxVODA1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iBlDI0MzM2Cis8VTgwNjg+IDxVODA2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iBqDAKKzxVODA2Qj4gPFU4MDZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IGrMAorPFU4MDZFPiA8VTgwNkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoga4wCis8VTgwNkY+IDxVODA2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iBrzI0OQorPFU4MUMxPiA8VTgxQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoh4EwCis8VTgzQjI+IDxVODNCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iOsjM4MTkKKzxVODNCNj4gPFU4M0I2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I62MAorPFU4NEVFPiA8VTg0RUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPok645Cis8VTg1Mzk+IDxVODUzOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iUuTAKKzxVODU5NT4gPFU4NTk1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JaVMAorPFU4NzhBPiA8VTg3OEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonoowCis8VTg4MEE+IDxVODgwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+igijAKKzxVODhFMj4gPFU4OEUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KOiMzkKKzxVODkzMz4gPFU4OTMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KSzMAorPFU4OTlEPiA8VTg5OUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopp0wCis8VThCMzA+IDxVOEIzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+issDAKKzxVOEI2Nz4gPFU4QjY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K2nMAorPFU4RTY1PiA8VThFNjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouaUwCis8VThGREU+IDxVOEZERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i/njM0MjYzCis8VTkwMjM+IDxVOTAyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mAozI3MworPFU5MzhDPiA8VTkzOEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjowwCis8VTk0MkU+IDxVOTQyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mQrjYKKzxVOTU3MD4gPFU5NTcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZWwMjgxCis8VTlCMTE+IDxVOUIxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mskTAKKzxVOUMzMT4gPFU5QzMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bCxMAorPFU5Q0EyPiA8VTlDQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsqI5Cis8VTM5OTE+IDxVMzk5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OmkTAKKzxVM0E5OD4gPFUzQTk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46qYMAorPFUzQkVDPiA8VTNCRUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjr6wwCis8VTNDMDg+IDxVM0MwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OwiDAKKzxVM0MzOD4gPFUzQzM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47C4MAorPFU0MURDPiA8VTQxREM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkh5wwCis8VTQzMUU+IDxVNDMxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SMnjAKKzxVNTBDNj4gPFU1MEM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YOGMAorPFU2NDU5PiA8VTY0NTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkZkwCis8VTY1NUI+IDxVNjU1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aVmzc1NAorPFU2NTgyPiA8VTY1ODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmloI3Cis8VTc0MEY+IDxVNzQwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eQjzE2NgorPFU3RkI3PiA8VTdGQjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvrcwCis8VTgxMzg+IDxVODEzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iEuDM1MDEwCis8VTgxQTY+IDxVODFBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iGpjAKKzxVODFDOT4gPFU4MUM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IeJMjMxCis8VTg2MUU+IDxVODYxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iYnjAKKzxVODhFMz4gPFU4OEUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KOjNAorPFU4OTVEPiA8VTg5NUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopZ0wCis8VTkxM0I+IDxVOTEzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mEuzAKKzxVMzcwMz4gPFUzNzAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45yDMAorPFUzNzNCPiA8VTM3M0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnLswCis8VTNBOUQ+IDxVM0E5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OqnTAKKzxVM0M2OD4gPFUzQzY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47GoMAorPFUzRDkxPiA8VTNEOTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtpEwCis8VTNGMTE+IDxVM0YxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O8kTAKKzxVNTgxQz4gPFU1ODFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aCcMAorPFU1QTA4PiA8VTVBMDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqIgxNworPFU1QUExPiA8VTVBQTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqqEwCis8VTVCNEM+IDxVNUI0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WtjDAKKzxVNjA0Qj4gPFU2MDRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oGLOTE5MQorPFU2MjAwPiA8VTYyMDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiIA3NQorPFU2OTVEPiA8VTY5NUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpZ0zNQorPFU2QjVCPiA8VTZCNUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrZswCis8VTZCOTM+IDxVNkI5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aukzE2MAorPFU2QkFFPiA8VTZCQUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrq4wCis8VTZFNDU+IDxVNkU0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a5hTAKKzxVNkY0Qj4gPFU2RjRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r2LNDkKKzxVNkZCMD4gPFU2RkIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r6wMAorPFU3MDMyPiA8VTcwMzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngLIwCis8VTcwQkM+IDxVNzBCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eCvDE2MTkKKzxVNzE0OT4gPFU3MTQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54WJMQorPFU3NDUzPiA8VTc0NTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkZMwCis8VTdERjQ+IDxVN0RGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3tDU2Cis8VTdFOUU+IDxVN0U5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e6njAKKzxVN0VDMz4gPFU3RUMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57uDNjU3NAorPFU4NDMwPiA8VTg0MzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokLAwCis8VTg1OUY+IDxVODU5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iWnzAKKzxVODYxRD4gPFU4NjFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JidMAorPFU5MzJDPiA8VTkzMkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjKwwCis8VTkzNEE+IDxVOTM0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mNijkKKzxVOTNDOD4gPFU5M0M4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+INAorPFU5NEZFPiA8VTk0RkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpk74xODU4Cis8VTlDMEE+IDxVOUMwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mwijEKKzxVM0U0MT4gPFUzRTQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47mBMAorPFU0Nzc2PiA8VTQ3NzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknbYwCis8VTQ4RkM+IDxVNDhGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SjvDAKKzxVNEI2QT4gPFU0QjZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K2qMAorPFU1MUM5PiA8VTUxQzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlh4k1ODkwCis8VTU4OUE+IDxVNTg5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WimjEKKzxVNjg4MT4gPFU2ODgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qKBNjAxMworPFU2OTBCPiA8VTY5MEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpIsxMAorPFU2QTExPiA8VTZBMTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqJE1Cis8VTZEQkM+IDxVNkRCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a2vDUyCis8VTdDMTc+IDxVN0MxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ewlzAKKzxVN0NBRT4gPFU3Q0FFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57KuMzM2MQorPFU3Q0IxPiA8VTdDQjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsrE0NjcKKzxVN0NFNz4gPFU3Q0U3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57OnNAorPFU3REExPiA8VTdEQTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntqEwCis8VTgyNkY+IDxVODI2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iJrzEwNTM1Cis8VThGMkM+IDxVOEYyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i8rDEKKzxVOEY4Qz4gPFU4RjhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L6MMAorPFU5MUNGPiA8VTkxQ0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPph48yNTc3MQorPFU5OUZBPiA8VTk5RkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpp7owCis8VTM0QjM+IDxVMzRCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OSszAKKzxVMzUxRD4gPFUzNTFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45SdMAorPFU0NEUzPiA8VTQ0RTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkk6MwCis8VTQ4MDM+IDxVNDgwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SggzAKKzxVNEE2Qj4gPFU0QTZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KmrMAorPFU0RTIxPiA8VTRFMjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuKEwCis8VTRFMjQ+IDxVNEUyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S4pDg5NzMwCis8VTRGRTk+IDxVNEZFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S/qTUwMDAKKzxVNTE2OT4gPFU1MTY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YWpODA4Cis8VTU1MjE+IDxVNTUyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUoTAKKzxVNTU2Mj4gPFU1NTYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZWiMAorPFU2MzlBPiA8VTYzOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjpowCis8VTdEQzk+IDxVN0RDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3iTAKKzxVODEzQz4gPFU4MTNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IS8MAorPFU4NzNEPiA8VTg3M0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonL0wCis8VTg4RjI+IDxVODhGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ijsjAKKzxVOUI0OT4gPFU5QjQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a2JMjkKKzxVOUI0RT4gPFU5QjRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a2OMAorPFU0RUFFPiA8VTRFQUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuq4xODk1NworPFU1NEY0PiA8VTU0RjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlk7Q0Cis8VTU1QTg+IDxVNTVBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WWqDAKKzxVNjY3RT4gPFU2NjdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pm+Mzg1Cis8VTZFNzg+IDxVNkU3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a5uDAKKzxVOEFEMj4gPFU4QUQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KuSMTYKKzxVOEMwNT4gPFU4QzA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LCFMjMzMgorPFU4RTA5PiA8VThFMDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouIk0NTgKKzxVOEYwQz4gPFU4RjBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LyMMAorPFU4RjFCPiA8VThGMUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovJsyOQorPFU4Rjg2PiA8VThGODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovoY0MjM3Cis8VTkzNDQ+IDxVOTM0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mNhDAKKzxVNjRBOT4gPFU2NEE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pKpNjM1Cis8VThFN0Q+IDxVOEU3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i5vTIKKzxVMzY2OT4gPFUzNjY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45mpMAorPFUzNzRCPiA8VTM3NEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnYswCis8VTNENzM+IDxVM0Q3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O1szAKKzxVNDcwRD4gPFU0NzBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JyNMAorPFU0NzJFPiA8VTQ3MkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknK4wCis8VTQ3NDA+IDxVNDc0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SdgDAKKzxVNEEwNT4gPFU0QTA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KiFMAorPFU1MERBPiA8VTUwREE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlg5o3NzgKKzxVNTYzOT4gPFU1NjM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Zi5OTgKKzxVNUFGRD4gPFU1QUZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5au9MQorPFU1QkU1PiA8VTVCRTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlr6U3MzUKKzxVNUJFRT4gPFU1QkVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a+uNjcKKzxVNUMxRT4gPFU1QzFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bCeMAorPFU1QzZBPiA8VTVDNkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsaowCis8VTVEN0E+IDxVNUQ3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W1ujAKKzxVNUQ5QT4gPFU1RDlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5baaMAorPFU1RDlCPiA8VTVEOUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltpswCis8VTVFRUI+IDxVNUVFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W7qzAKKzxVNjE4MD4gPFU2MTgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oaAMAorPFU2NDRFPiA8VTY0NEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkY40Cis8VTY1Nzk+IDxVNjU3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aVuTAKKzxVNkYzQj4gPFU2RjNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ry7MAorPFU3MUFFPiA8VTcxQUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhq4wCis8VTcxQ0U+IDxVNzFDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHjjE2OAorPFU3MzYwPiA8VTczNjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjaA0NgorPFU3NDk5PiA8VTc0OTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkpkwCis8VTc1OTc+IDxVNzU5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eWlzE4ODEKKzxVNzY0Mj4gPFU3NjQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55mCMTgKKzxVN0FCNz4gPFU3QUI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56q3MAorPFU3QzFEPiA8VTdDMUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsJ0wCis8VTdFNUE+IDxVN0U1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5mjIKKzxVN0YyRD4gPFU3RjJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57ytMzI4Cis8VTgwNEE+IDxVODA0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iBijc4MTgKKzxVODE4Qj4gPFU4MThCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IaLMAorPFU4MUFCPiA8VTgxQUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohqswCis8VThDNDI+IDxVOEM0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ixgjAKKzxVOENGRj4gPFU4Q0ZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LO/MAorPFU4RTU4PiA8VThFNTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouZgwCis8VThGQkQ+IDxVOEZCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i+vTE0NjUKKzxVOTA3Qz4gPFU5MDdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YG8MworPFU5NDEwPiA8VTk0MTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkJAwCis8VTk1N0Q+IDxVOTU3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mVvTAKKzxVOTg1Rj4gPFU5ODVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aGfMAorPFU5OEMyPiA8VTk4QzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpo4IwCis8VTk4Qzk+IDxVOThDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mjiTAKKzxVOUFDRT4gPFU5QUNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6auOMAorPFU5RERBPiA8VTlEREE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpt5owCis8VTlERUY+IDxVOURFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m3rzAKKzxVOUU2OT4gPFU5RTY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bmpNQorPFUzREFCPiA8VTNEQUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtqswCis8VTQxMjY+IDxVNDEyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SEpjAKKzxVNDQ2MD4gPFU0NDYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JGgMAorPFU0QTREPiA8VTRBNEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqY0wCis8VTYxQUQ+IDxVNjFBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aGrTEKKzxVNjZCOD4gPFU2NkI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pq4NAorPFU3N0FEPiA8VTc3QUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnq02MQorPFU4NEZDPiA8VTg0RkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPok7wyOAorPFU4N0RGPiA8VTg3REY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPon58xCis8VTkxMUQ+IDxVOTExRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mEnTAKKzxVOTFENT4gPFU5MUQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YeVMAorPFU5NDhDPiA8VTk0OEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkowzCis8VTM4N0I+IDxVMzg3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OhuzAKKzxVM0U5Mj4gPFUzRTkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47qSMAorPFU0MjdDPiA8VTQyN0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkibwwCis8VTQzNjE+IDxVNDM2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SNoTAKKzxVNDM4Nj4gPFU0Mzg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I6GMAorPFU0OEE3PiA8VTQ4QTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoqcwCis8VTVDMjU+IDxVNUMyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WwpTgKKzxVNUMyNj4gPFU1QzI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bCmMAorPFU1RUQ2PiA8VTVFRDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlu5Y2MTgKKzxVNjQ4Mj4gPFU2NDgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pKCMzg0Cis8VTY1OTk+IDxVNjU5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWmTE1NTczCis8VTcwOTM+IDxVNzA5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eCkzAKKzxVNzIxMj4gPFU3MjEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54iSMAorPFU3QUIyPiA8VTdBQjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqrIwCis8VTg3Qzk+IDxVODdDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ifiTAKKzxVOTU2Mz4gPFU5NTYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZWjMTQ5Cis8VTU0QTc+IDxVNTRBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WSpzEzODkKKzxVNDdFOT4gPFU0N0U5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J+pMAorPFUzOTIwPiA8VTM5MjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpKAwCis8VTM5REM+IDxVMzlEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OnnDAKKzxVM0IyRj4gPFUzQjJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46yvMAorPFUzQjVFPiA8VTNCNUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrZ4wCis8VTNCRkY+IDxVM0JGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OvvzAKKzxVM0NCMT4gPFUzQ0IxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47KxMAorPFUzRTM5PiA8VTNFMzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuLkwCis8VTNGMzI+IDxVM0YzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O8sjAKKzxVM0Y1Rj4gPFUzRjVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj472fMAorPFU0MDdEPiA8VTQwN0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgb0wCis8VTQxNDA+IDxVNDE0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SFgDAKKzxVNDI2RD4gPFU0MjZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ImtMAorPFU0NERGPiA8VTQ0REY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkk58wCis8VTQ3MzI+IDxVNDczMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ScsjAKKzxVNDdGOT4gPFU0N0Y5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J+5MAorPFU0RDE1PiA8VTREMTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktJUwCis8VTUxMjA+IDxVNTEyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WEoDAKKzxVNTFCRD4gPFU1MUJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ya9MTg1Cis8VTUyMTc+IDxVNTIxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WIlzIwNTU4Cis8VTUyQTM+IDxVNTJBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WKozE2MTkKKzxVNTJCRD4gPFU1MkJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Yq9MAorPFU1N0QyPiA8VTU3RDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPln5IyCis8VTU3RDM+IDxVNTdEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfkzAKKzxVNTlGND4gPFU1OUY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ae0MAorPFU1REU0PiA8VTVERTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlt6QwCis8VTYzMTI+IDxVNjMxMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aMkjAKKzxVNjM2OT4gPFU2MzY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o2pMjEKKzxVNjRGOD4gPFU2NEY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pO4MAorPFU2RDBDPiA8VTZEMEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtIwyNAorPFU2RDU2PiA8VTZENTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtZYwCis8VTcwQzg+IDxVNzBDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eDiDEwNzk1Cis8VTcxNkQ+IDxVNzE2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eFrTAKKzxVNzJBMz4gPFU3MkEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54qjMAorPFU3MzBFPiA8VTczMEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjI4xODk2Cis8VTczMUY+IDxVNzMxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eMnzAKKzxVNzM3NT4gPFU3Mzc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5421MzUKKzxVNzc1OT4gPFU3NzU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj552ZMAorPFU4MDU3PiA8VTgwNTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogZcwCis8VTgxMUY+IDxVODExRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iEnzAKKzxVODMyMj4gPFU4MzIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IyiMAorPFU4NkRBPiA8VTg2REE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPom5owCis8VTg2RjY+IDxVODZGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ibtjAKKzxVODhDMj4gPFU4OEMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KOCNDUxOQorPFU4RDk0PiA8VThEOTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotpQxNTEKKzxVOEU5MD4gPFU4RTkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LqQMworPFU4RkZFPiA8VThGRkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPov74wCis8VTk4QjI+IDxVOThCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+misjAKKzxVOUIxQj4gPFU5QjFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aybMAorPFU5QjIzPiA8VTlCMjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprKMyMworPFU5QkE0PiA8VTlCQTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprqQwCis8VTlDNzI+IDxVOUM3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxsjAKKzxVOUQzNz4gPFU5RDM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bS3MAorPFUzNTAyPiA8VTM1MDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlIIwCis8VTM3NUQ+IDxVMzc1RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OdnTAKKzxVM0RFMD4gPFUzREUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47egMAorPFU0NkFDPiA8VTQ2QUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmqwwCis8VTQ4QUY+IDxVNDhBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SirzAKKzxVNEFEMD4gPFU0QUQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KuQMAorPFU0QkJDPiA8VTRCQkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrrwwCis8VTRFMzQ+IDxVNEUzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S4tDk5OTAKKzxVNTBFRj4gPFU1MEVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YOvMAorPFU1M0I4PiA8VTUzQjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljrgwCis8VTU1NDk+IDxVNTU0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WViTgKKzxVNThFMz4gPFU1OEUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aOjMAorPFU1RDBBPiA8VTVEMEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltIowCis8VTVEOTk+IDxVNUQ5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W2mTEwOAorPFU2MENGPiA8VTYwQ0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmg48wCis8VTY1QjQ+IDxVNjVCND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWtDAKKzxVNjY3RD4gPFU2NjdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pm9MAorPFU2NkJEPiA8VTY2QkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmr0wCis8VTY3OTc+IDxVNjc5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aelzMxMzUyCis8VTZEQ0I+IDxVNkRDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3izI0MjUKKzxVNkY3RT4gPFU2RjdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r2+MAorPFU3MDM2PiA8VTcwMzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngLYwCis8VTcxRDA+IDxVNzFEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHkDIKKzxVNzM1Qz4gPFU3MzVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj542cMAorPFU3NDMzPiA8VTc0MzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkLMyMjY1Cis8VTc0OTg+IDxVNzQ5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eSmDAKKzxVNzUxMD4gPFU3NTEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55SQMAorPFU3NTg0PiA8VTc1ODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnloQwCis8VTc1RjM+IDxVNzVGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eXszgKKzxVNzdCNT4gPFU3N0I1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5561MQorPFU3N0REPiA8VTc3REQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnn50wCis8VTc4ODQ+IDxVNzg4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eihDAKKzxVNzhGNz4gPFU3OEY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56O3MTYxCis8VTdCOTY+IDxVN0I5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+euljAKKzxVN0NBNj4gPFU3Q0E2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57KmMAorPFU3Q0JDPiA8VTdDQkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsrwxNzIKKzxVN0U1Nz4gPFU3RTU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57mXMAorPFU3RjY3PiA8VTdGNjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvacwCis8VTdGRjc+IDxVN0ZGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e/tzAKKzxVODFFOD4gPFU4MUU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IeoODMKKzxVOEU3OD4gPFU4RTc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Lm4MAorPFU4RjU0PiA8VThGNTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovZQwCis8VThGOUE+IDxVOEY5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i+mjc0Cis8VTkwNzQ+IDxVOTA3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mBtDI5Cis8VTkwQkI+IDxVOTBCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mCuzMwNzQKKzxVOTEzMD4gPFU5MTMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YSwMTUKKzxVOTNGQj4gPFU5M0ZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+7MAorPFU5NkEzPiA8VTk2QTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmqMwCis8VTk3MTY+IDxVOTcxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mcljM0OAorPFU5QTRFPiA8VTlBNEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqY4wCis8VTlDNTc+IDxVOUM1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxlzEKKzxVOUNERT4gPFU5Q0RFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bOeNTY3Cis8VTlFOTA+IDxVOUU5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6kDEKKzxVOUU5Rj4gPFU5RTlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bqfNDA2Cis8VTM0MkQ+IDxVMzQyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OQrTAKKzxVM0EwNj4gPFUzQTA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46iGMAorPFU0NTcyPiA8VTQ1NzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklbIwCis8VTRFODM+IDxVNEU4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6gzAKKzxVNTFEQj4gPFU1MURCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YebNTA3Cis8VTUxREM+IDxVNTFEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WHnDYKKzxVNUVFOT4gPFU1RUU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bupMAorPFU2MUNEPiA8VTYxQ0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmh40yCis8VTYxRDQ+IDxVNjFEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aHlDExCis8VTY0OUI+IDxVNjQ5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aSmzAKKzxVNkE4MT4gPFU2QTgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qqBMAorPFU2QUE5PiA8VTZBQTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqqkyOAorPFU2RjlGPiA8VTZGOUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvp8wCis8VTc2NUI+IDxVNzY1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eZmzAKKzxVN0Q5RD4gPFU3RDlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57adMAorPFU4M0ZCPiA8VTgzRkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoj7swCis8VTM1ODE+IDxVMzU4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OWgTAKKzxVNDI2RT4gPFU0MjZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ImuMAorPFU0NUYyPiA8VTQ1RjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkl7IwCis8VTRBRjA+IDxVNEFGMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SrsDAKKzxVNTQxRD4gPFU1NDFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZCdMzQwCis8VTYwNjE+IDxVNjA2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBoTEKKzxVNjA4Qj4gPFU2MDhCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oKLMQorPFU2QTQ5PiA8VTZBNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqYkwCis8VTcxMUI+IDxVNzExQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eEmzAKKzxVODUzQT4gPFU4NTNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JS6MTYKKzxVODVGQT4gPFU4NUZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Je6MAorPFU4Q0MzPiA8VThDQzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPos4MwCis8VThENDE+IDxVOEQ0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i1gTk3Cis8VThFOEY+IDxVOEU4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6jzE4OQorPFU4RTk5PiA8VThFOTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoupkwCis8VThFQUE+IDxVOEVBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6qjIKKzxVOEY2NT4gPFU4RjY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L2lMAorPFU5NUI1PiA8VTk1QjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplrUwCis8VTYyQ0U+IDxVNjJDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aLjjg0MQorPFUzMDA3PiA8VTMwMDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjgIcwCis8VTM1QUI+IDxVMzVBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OWqzAKKzxVMzg3NT4gPFUzODc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46G1MAorPFUzOTQ0PiA8VTM5NDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpYQwCis8VTM5QUQ+IDxVMzlBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OmrTAKKzxVM0FBRT4gPFUzQUFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46quMAorPFUzQjIxPiA8VTNCMjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrKEwCis8VTNCRUE+IDxVM0JFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OvqjAKKzxVM0M2NT4gPFUzQzY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47GlMAorPFUzQzg2PiA8VTNDODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsoYwCis8VTNFMzM+IDxVM0UzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O4szAKKzxVM0VDRj4gPFUzRUNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47uPMAorPFUzRjg5PiA8VTNGODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvokwCis8VTQxMjU+IDxVNDEyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SEpTAKKzxVNDIwQT4gPFU0MjBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IiKMAorPFU0MjQxPiA8VTQyNDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiYEwCis8VTQyNTY+IDxVNDI1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SJljAKKzxVNDI3OT4gPFU0Mjc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Im5MAorPFU0MzIyPiA8VTQzMjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjKIwCis8VTQzNDU+IDxVNDM0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SNhTAKKzxVNDUxNj4gPFU0NTE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JSWMAorPFU0NTU4PiA8VTQ1NTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklZgwCis8VTQ1ODU+IDxVNDU4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SWhTAKKzxVNDY2NT4gPFU0NjY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JmlMAorPFU0Njk2PiA8VTQ2OTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmpYwCis8VTQ4MzI+IDxVNDgzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SgsjAKKzxVNDg3Qz4gPFU0ODdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KG8MAorPFU0ODdGPiA8VTQ4N0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkob8wCis8VTQ5RDk+IDxVNDlEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SnmTAKKzxVNEEyOT4gPFU0QTI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KipMAorPFU0QkNEPiA8VTRCQ0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkr40wCis8VTRDMzE+IDxVNEMzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SwsTAKKzxVNEQwNz4gPFU0RDA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LSHMAorPFU0RDEyPiA8VTREMTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktJIwCis8VTREMkI+IDxVNEQyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S0qzAKKzxVNEYzNj4gPFU0RjM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ly2NjI4Cis8VTUxQ0M+IDxVNTFDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WHjDM5NDcKKzxVNTIyMj4gPFU1MjIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YiiMAorPFU1NDY0PiA8VTU0NjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkaQ5NAorPFU1NDZDPiA8VTU0NkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkawwCis8VTU2Rjk+IDxVNTZGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WbuTQzCis8VTU3N0Q+IDxVNTc3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WdvTAKKzxVNTkwQz4gPFU1OTBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aSMMAorPFU1OUM4PiA8VTU5Qzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlp4gwCis8VTVBNDg+IDxVNUE0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WpiDAKKzxVNUI0MT4gPFU1QjQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a2BMAorPFU1Q0FEPiA8VTVDQUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsq05NTEKKzxVNUNCQT4gPFU1Q0JBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bK6MAorPFU2Mzk1PiA8VTYzOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjpUwCis8VTY2MjQ+IDxVNjYyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aYpDAKKzxVNjcwRT4gPFU2NzBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pyOMAorPFU2N0MzPiA8VTY3QzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmn4M0Cis8VTY4QzI+IDxVNjhDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ajgjEwOQorPFU2QUZBPiA8VTZBRkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmq7oxCis8VTZCMUU+IDxVNkIxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+asnjAKKzxVNkNFMD4gPFU2Q0UwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rOgNDkKKzxVNkRFOT4gPFU2REU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5repMQorPFU2RkFBPiA8VTZGQUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvqowCis8VTcwNzU+IDxVNzA3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eBtTEzOTYzCis8VTcxRUY+IDxVNzFFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHrzAKKzxVNzIyNz4gPFU3MjI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54inMAorPFU3MkQxPiA8VTcyRDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPni5EwCis8VTczQjI+IDxVNzNCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eOsjI3NDQKKzxVNzQwQz4gPFU3NDBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55CMMQorPFU3NEY0PiA8VTc0RjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnk7QyNworPFU3NjhBPiA8VTc2OEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmoowCis8VTc3NTY+IDxVNzc1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+edljEKKzxVNzgzMT4gPFU3ODMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56CxMAorPFU3ODkwPiA8VTc4OTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnopAwCis8VTc5N0U+IDxVNzk3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+elvjAKKzxVNzlFMj4gPFU3OUUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56eiMAorPFU3QURCPiA8VTdBREI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnq5swCis8VTdCMkQ+IDxVN0IyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+esrTAKKzxVN0QzNz4gPFU3RDM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57S3MAorPFU3REJFPiA8VTdEQkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntr4wCis8VTdFRUI+IDxVN0VFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e7qzI4OQorPFU3RjlBPiA8VTdGOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvpoxNjQKKzxVN0ZDRT4gPFU3RkNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57+OMjU0Cis8VTgwNDY+IDxVODA0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iBhjU1MQorPFU4MjMyPiA8VTgyMzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiLIxCis8VTgyRDM+IDxVODJEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iLkzMxCis8VTgzRjE+IDxVODNGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPsTMzNQorPFU4NTc2PiA8VTg1NzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolbYwCis8VTg2MjY+IDxVODYyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iYpjAKKzxVODZDOT4gPFU4NkM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JuJMTIKKzxVODg1MT4gPFU4ODUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KGRMAorPFU4OEVDPiA8VTg4RUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo6wwCis8VThBNDU+IDxVOEE0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iphTAKKzxVOERDOT4gPFU4REM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LeJMAorPFU4RUU4PiA8VThFRTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPou6gwCis8VThGMTg+IDxVOEYxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i8mDAKKzxVOTE0Mz4gPFU5MTQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YWDMworPFU5MUJEPiA8VTkxQkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphr0wCis8VTkyMzQ+IDxVOTIzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mItDIwCis8VTkzMDI+IDxVOTMwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mMgjAKKzxVOTRDMz4gPFU5NEMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZODMjgxMQorPFU5NTlEPiA8VTk1OUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplp0wCis8VTk2NzU+IDxVOTY3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mZtTEyMTAKKzxVOTZGNj4gPFU5NkY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Zu2NjE0MworPFU5NzBBPiA8VTk3MEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnIowCis8VTk3MTc+IDxVOTcxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mclzAKKzxVOTcxQj4gPFU5NzFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZybMAorPFU5NzFEPiA8VTk3MUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnJ0wCis8VTk3NDg+IDxVOTc0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mdiDMxMAorPFU5OUQ2PiA8VTk5RDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpp5YwCis8VTlCN0Y+IDxVOUI3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mtvzAKKzxVOUJFQT4gPFU5QkVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a+qMQorPFU5Q0FFPiA8VTlDQUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsq4wCis8VTlEMTI+IDxVOUQxMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m0kjAKKzxVOUUzMD4gPFU5RTMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6biwMgorPFU5RTc3PiA8VTlFNzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpubcwCis8VTlFQTI+IDxVOUVBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6ojAKKzxVOUY2MT4gPFU5RjYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b2hMTMKKzxVOUY2Mj4gPFU5RjYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b2iMAorPFU5Rjg0PiA8VTlGODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvoQzMTUyCis8VTlGOTc+IDxVOUY5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m+lzAKKzxVNURCQT4gPFU1REJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ba6MjgKKzxVNUY3RT4gPFU1RjdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b2+MAorPFU4ODhBPiA8VTg4OEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoooowCis8VTk2M0U+IDxVOTYzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mYvjAKKzxVOTgxOD4gPFU5ODE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aCYMTU5Cis8VTk4ODY+IDxVOTg4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mihjI4MzEyCis8VTRFRTQ+IDxVNEVFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S7pDI4MzE5Cis8VTUzRTY+IDxVNTNFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPpjIxOTM0Cis8VTcwQTk+IDxVNzBBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eCqTAKKzxVM0Q4OD4gPFUzRDg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47aIMAorPFU2RTlDPiA8VTZFOUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmupwzMDAwCis8VTZGOTE+IDxVNkY5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a+kTAKKzxVNzE5OD4gPFU3MTk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54aYNTEKKzxVMzQyQz4gPFUzNDJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45CsMAorPFUzRjVFPiA8VTNGNUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvZ4wCis8VTQyNjc+IDxVNDI2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SJpzAKKzxVNDJGNz4gPFU0MkY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Iu3MAorPFU0NURDPiA8VTQ1REM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkl5wwCis8VTQ2QTc+IDxVNDZBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SapzAKKzxVNEIxRj4gPFU0QjFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KyfMAorPFU0Qjc3PiA8VTRCNzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrbcwCis8VTRDMTg+IDxVNEMxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SwmDAKKzxVNEM1Nj4gPFU0QzU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LGWMAorPFU0QzVFPiA8VTRDNUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksZ4wCis8VTREODk+IDxVNEQ4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S2iTAKKzxVNTIxOD4gPFU1MjE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YiYMTI4MDcKKzxVNTI4OT4gPFU1Mjg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YqJMjYKKzxVNTZBMD4gPFU1NkEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZqgMAorPFU1QUI5PiA8VTVBQjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqrkwCis8VTVCM0M+IDxVNUIzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WsvDEKKzxVNUQ2Nz4gPFU1RDY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bWnMAorPFU2MUYwPiA8VTYxRjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmh7AwCis8VTY1Qzg+IDxVNjVDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aXiDAKKzxVNjVEMj4gPFU2NUQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5peSMTQKKzxVNjlCND4gPFU2OUI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qa0NTA1Cis8VTZBNEE+IDxVNkE0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+apijAKKzxVNkNBMD4gPFU2Q0EwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rKgMAorPFU2RDQxPiA8VTZENDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtYEzMzE4MQorPFU2RDRGPiA8VTZENEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtY82NzYKKzxVNzAwRj4gPFU3MDBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54CPNAorPFU3NDA5PiA8VTc0MDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkIk0NjUKKzxVNzQ2MD4gPFU3NDYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55GgMAorPFU3NDZDPiA8VTc0NkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkawwCis8VTc0QTI+IDxVNzRBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eSojAKKzxVNzU0ND4gPFU3NTQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55WEMAorPFU3NTU5PiA8VTc1NTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlZkyNDAxMgorPFU3NTcxPiA8VTc1NzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlbEwCis8VTc1ODE+IDxVNzU4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eWgTAKKzxVNzYyND4gPFU3NjI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55ikMjUwCis8VTc2NDU+IDxVNzY0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eZhTAKKzxVNzg2Qj4gPFU3ODZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56GrNDM2Cis8VTg0QTU+IDxVODRBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iSpTAKKzxVODRDNT4gPFU4NEM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JOFMworPFU4NUYwPiA8VTg1RjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPol7AwCis8VTg4RDc+IDxVODhENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ijlzAKKzxVOTA1Qj4gPFU5MDVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YGbMTUzCis8VTkzOEY+IDxVOTM4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mOjzEyCis8VTkzQTY+IDxVOTNBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mOpjAKKzxVOTNEMD4gPFU5M0QwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+QMgorPFU5NDAyPiA8VTk0MDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkIIwCis8VTk1NEY+IDxVOTU0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mVjzgKKzxVOTU2MD4gPFU5NTYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZWgMAorPFU5OEMwPiA8VTk4QzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpo4AwCis8VTk4QzU+IDxVOThDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mjhTAKKzxVOThENz4gPFU5OEQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aOXMAorPFU5OTNFPiA8VTk5M0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppL4wCis8VTk5OEY+IDxVOTk4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mmjzE3OQorPFU5OUUwPiA8VTk5RTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpp6AwCis8VTk5RjU+IDxVOTlGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mntTAKKzxVOUEyRT4gPFU5QTJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aiuMAorPFU5QTUxPiA8VTlBNTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqZEwCis8VTlBOUQ+IDxVOUE5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mqnTEyCis8VTlDMjE+IDxVOUMyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mwoTAKKzxVOURCOT4gPFU5REI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ba5MAorPFU5RENFPiA8VTlEQ0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpt44wCis8VTlFNjA+IDxVOUU2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m5oDAKKzxVOUU4RD4gPFU5RThEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bqNMAorPFU2N0YzPiA8VTY3RjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmn7MzMTQ1Cis8VTY4MDE+IDxVNjgwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aggTAKKzxVNjg3QT4gPFU2ODdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qG6MAorPFU2QTZFPiA8VTZBNkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqa4wCis8VTczQ0I+IDxVNzNDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ePizAKKzxVN0RCOT4gPFU3REI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57a5MAorPFU3RUZBPiA8VTdFRkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnu7oxMTgKKzxVN0Y3Nj4gPFU3Rjc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5722MAorPFU3RjgwPiA8VTdGODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvoAwCis8VTg0OEM+IDxVODQ4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iSjDI1Cis8VTkyNUE+IDxVOTI1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mJmjAKKzxVOTJGNj4gPFU5MkY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Yu2MAorPFU5NEM2PiA8VTk0QzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpk4YzNworPFU5NTBEPiA8VTk1MEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplI0wCis8VTk4Rjk+IDxVOThGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mjuTAKKzxVMzY0MD4gPFUzNjQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45mAMAorPFUzQTI4PiA8VTNBMjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqKgwCis8VTNEQUY+IDxVM0RBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O2rzAKKzxVM0Y0Qz4gPFUzRjRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj472MMAorPFU0MTAyPiA8VTQxMDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhIIwCis8VTUxNkQ+IDxVNTE2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WFrTIyMzYwCis8VTU3NzQ+IDxVNTc3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WdtDAKKzxVNTg2Rj4gPFU1ODZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aGvMAorPFU1RUM3PiA8VTVFQzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlu4cwCis8VTc1NDI+IDxVNzU0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eVgjAKKzxVNzg4Qz4gPFU3ODhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56KMMTI0NQorPFU3OEMyPiA8VTc4QzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPno4IwCis8VTdGQ0Y+IDxVN0ZDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e/jzAKKzxVOEU1Mz4gPFU4RTUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LmTMgorPFU5Njc4PiA8VTk2Nzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmbgxMjYKKzxVOTZFMT4gPFU5NkUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZuhMAorPFU5NzI0PiA8VTk3MjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnKQwCis8VTlCMzg+IDxVOUIzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+msuDAKKzxVOUU2OD4gPFU5RTY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bmoMQorPFU5NzMzPiA8VTk3MzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnLMwCis8VTM2ODU+IDxVMzY4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OahTAKKzxVMzc2Qj4gPFUzNzZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj452rMAorPFUzODYzPiA8VTM4NjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoaMwCis8VTM5OTU+IDxVMzk5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OmlTAKKzxVM0MwRD4gPFUzQzBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47CNMAorPFU0MEU3PiA8VTQwRTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkg6cwCis8VTQxOEQ+IDxVNDE4RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SGjTAKKzxVNDNDQT4gPFU0M0NBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I+KMAorPFU0NjZBPiA8VTQ2NkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmaowCis8VTQ5NjI+IDxVNDk2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SlojAKKzxVNEE4QT4gPFU0QThBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KqKMAorPFU1MTMxPiA8VTUxMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhLEwCis8VTU0OTk+IDxVNTQ5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WSmTgwNAorPFU1NkE4PiA8VTU2QTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmqgxMQorPFU1Qzc4PiA8VTVDNzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsbgwCis8VTVEOTA+IDxVNUQ5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W2kDAKKzxVNURDMz4gPFU1REMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5beDMAorPFU1REM0PiA8VTVEQzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlt4QwCis8VTY2M0Q+IDxVNjYzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aYvTAKKzxVNjZFOD4gPFU2NkU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5puoMAorPFU2NzI3PiA8VTY3Mjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnKcxCis8VTY4MEE+IDxVNjgwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+agijIzCis8VTY5REU+IDxVNjlERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+annjAKKzxVNkFGMz4gPFU2QUYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5quzMAorPFU2Q0Y3PiA8VTZDRjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPms7cxCis8VTZFNzA+IDxVNkU3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a5sDAKKzxVNkVERD4gPFU2RUREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rudMAorPFU2RjBCPiA8VTZGMEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvIswCis8VTcwMjc+IDxVNzAyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eApzExCis8VTcyMTY+IDxVNzIxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eIljAKKzxVNzNEMT4gPFU3M0QxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54+RMzIyCis8VTc0Q0Y+IDxVNzRDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eTjzEKKzxVNzY0Mz4gPFU3NjQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55mDMAorPFU3NzJDPiA8VTc3MkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnKw2Cis8VTc3RDM+IDxVNzdEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+efkzIKKzxVNzgzQj4gPFU3ODNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56C7NgorPFU3OTMxPiA8VTc5MzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpLEwCis8VTc5MzI+IDxVNzkzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eksjAKKzxVN0FCRj4gPFU3QUJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56q/MjE0Cis8VTdBREM+IDxVN0FEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ernDAKKzxVN0IzQz4gPFU3QjNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56y8MTgwNworPFU3QkVEPiA8VTdCRUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnr60wCis8VTdDNjA+IDxVN0M2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+exoDE4Cis8VTgwNEI+IDxVODA0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iBizQ1MgorPFU4MDdFPiA8VTgwN0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogb42Cis8VTgwRTc+IDxVODBFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iDpzExNDUKKzxVODMwRj4gPFU4MzBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IyPMzYKKzxVODYyMj4gPFU4NjIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JiiMQorPFU4ODJBPiA8VTg4MkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooKowCis8VTg4MkM+IDxVODgyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+igrDAKKzxVODk3MT4gPFU4OTcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KWxMAorPFU4QzQ1PiA8VThDNDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosYUwCis8VThFOTg+IDxVOEU5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6mDAKKzxVOTNFNz4gPFU5M0U3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+nMAorPFU5NDY4PiA8VTk0Njg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkagwCis8VTk2ODY+IDxVOTY4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mahjgxMTIKKzxVOTc0Nz4gPFU5NzQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z2HMAorPFU5QTYxPiA8VTlBNjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqaEwCis8VTlFMTc+IDxVOUUxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m4lzAKKzxVOUY4RD4gPFU5RjhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b6NMTAxCis8VTlGOTI+IDxVOUY5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m+kjAKKzxVOUY5Mz4gPFU5RjkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b6TMAorPFU5Rjk5PiA8VTlGOTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvpkxMjIwMgorPFUzNjU5PiA8VTM2NTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmZkwCis8VTNEMzM+IDxVM0QzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O0szAKKzxVNDg0MT4gPFU0ODQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KGBMAorPFU1Nzg0PiA8VTU3ODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnoQ1MDIKKzxVNTc4NT4gPFU1Nzg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z6FMTQKKzxVNThERj4gPFU1OERGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aOfMAorPFU1OEUwPiA8VTU4RTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlo6AwCis8VTYyRTI+IDxVNjJFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aLojExMjkKKzxVNjUwRj4gPFU2NTBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pSPMTMKKzxVN0FDOT4gPFU3QUM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56uJMAorPFU5NjQ3PiA8VTk2NDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmYcxNjMKKzxVOTZCND4gPFU5NkI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Zq0MAorPFUzNDVEPiA8VTM0NUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkZ0wCis8VTM2REU+IDxVMzZERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ObnjAKKzxVMzdENj4gPFUzN0Q2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45+WMAorPFUzODg1PiA8VTM4ODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjooUwCis8VTU0RTI+IDxVNTRFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WTojAKKzxVNUZCRj4gPFU1RkJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b6/MAorPFU2MzBBPiA8VTYzMEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjIowCis8VTYzMzU+IDxVNjMzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aMtTAKKzxVNjg4Nz4gPFU2ODg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qKHMAorPFU3ODY2PiA8VTc4NjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoaYwCis8VTg4NTY+IDxVODg1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ihljEKKzxVOEQxQT4gPFU4RDFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LSaMAorPFU2NDAyPiA8VTY0MDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkIIxNzU5Cis8VTY0NUY+IDxVNjQ1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aRnzEyCis8VTM3RkE+IDxVMzdGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OfujAKKzxVMzk2QT4gPFUzOTZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46WqMAorPFUzQzhFPiA8VTNDOEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjso4wCis8VTNFOEY+IDxVM0U4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O6jzAKKzxVNDExQj4gPFU0MTFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ISbMAorPFU0MTc5PiA8VTQxNzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhbkwCis8VTQ3NEY+IDxVNDc0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SdjzAKKzxVNDhEQT4gPFU0OERBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KOaMAorPFU0QUVCPiA8VTRBRUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkq6swCis8VTRCQUI+IDxVNEJBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SuqzAKKzxVNEM3RT4gPFU0QzdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LG+MAorPFU1MDdCPiA8VTUwN0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgbs3NQorPFU1MEMyPiA8VTUwQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlg4IwCis8VTUyNDU+IDxVNTI0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WJhTAKKzxVNTVCRD4gPFU1NUJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Za9Nzg0Cis8VTU2MEQ+IDxVNTYwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WYjTEKKzxVNUEwND4gPFU1QTA0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aiEMTU0Cis8VTVBNDE+IDxVNUE0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WpgTEKKzxVNUVEND4gPFU1RUQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5buUMAorPFU2OTdDPiA8VTY5N0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpbwxODg4NworPFU2QTEzPiA8VTZBMTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqJMxMTMKKzxVNkU4Nz4gPFU2RTg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqHMAorPFU2RjBBPiA8VTZGMEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvIowCis8VTcxQTE+IDxVNzFBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eGoTAKKzxVNzc5Qz4gPFU3NzlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj556cMAorPFU4MDI3PiA8VTgwMjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogKcyCis8VTgwMkM+IDxVODAyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iArDAKKzxVODI1Qj4gPFU4MjVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ImbMQorPFU4NTFFPiA8VTg1MUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolJ4xCis8VTg3N0M+IDxVODc3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+idvDI0Cis8VTg3QkI+IDxVODdCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ieuzAKKzxVOEIzMT4gPFU4QjMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KyxMAorPFU4RUMxPiA8VThFQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPou4EwCis8VTkwNzE+IDxVOTA3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mBsTAKKzxVOTdCQj4gPFU5N0JCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z67MAorPFU5QUM1PiA8VTlBQzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpq4UxODEKKzxVOUFDRj4gPFU5QUNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6auPMAorPFU5RERDPiA8VTlEREM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpt5wwCis8VTNBQjk+IDxVM0FCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OquTAKKzxVNTg3Rj4gPFU1ODdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aG/MAorPFU1RDVEPiA8VTVENUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltZ0xCis8VTVEODE+IDxVNUQ4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W2gTAKKzxVNzUwQT4gPFU3NTBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55SKMQorPFU3QkQzPiA8VTdCRDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnr5MxOTMKKzxVN0MwRD4gPFU3QzBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57CNMQorPFUzNTM3PiA8VTM1Mzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlLcwCis8VTVDNUE+IDxVNUM1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WxmjAKKzxVNkYwRj4gPFU2RjBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ryPMjEzOAorPFU3NjE4PiA8VTc2MTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmJg0Cis8VTc2M0E+IDxVNzYzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eYujAKKzxVNzYzQj4gPFU3NjNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55i7MAorPFU5M0U0PiA8VTkzRTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpj6QwCis8VTk1NDI+IDxVOTU0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mVgjg4Cis8VTk2NEI+IDxVOTY0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mZizExMTIKKzxVOTczMj4gPFU5NzMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZyyMTAwMDAKKzxVNTY1Qz4gPFU1NjVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZmcODE2Cis8VTU2OTU+IDxVNTY5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WalTUKKzxVNjRCOD4gPFU2NEI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pK4NDIKKzxVNjRGQz4gPFU2NEZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pO8MAorPFUzODIwPiA8VTM4MjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoKAwCis8VTM4QjM+IDxVMzhCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OiszAKKzxVM0FBRD4gPFUzQUFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46qtMAorPFUzQjU0PiA8VTNCNTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrZQwCis8VTNDN0E+IDxVM0M3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OxujAKKzxVM0ZENj4gPFUzRkQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47+WMAorPFU0ODRFPiA8VTQ4NEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoY4wCis8VTRCODk+IDxVNEI4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SuiTAKKzxVNEMxNT4gPFU0QzE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LCVMAorPFU1MzYyPiA8VTUzNjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljaI0NDM3Cis8VTU2QTc+IDxVNTZBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WapzAKKzxVNTc4Nj4gPFU1Nzg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z6GMTEKKzxVNThEQT4gPFU1OERBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aOaMAorPFU1RTkwPiA8VTVFOTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlupAzNjQKKzxVNUVFQz4gPFU1RUVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5busMAorPFU2NTBFPiA8VTY1MEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlI4wCis8VTY2RTU+IDxVNjZFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+abpTAKKzxVNjdBNj4gPFU2N0E2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p6mMAorPFU2ODBDPiA8VTY4MEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoIwzCis8VTZBRTg+IDxVNkFFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+arqDAKKzxVNkNGOD4gPFU2Q0Y4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rO4MzMKKzxVNzAxOD4gPFU3MDE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54CYMAorPFU3MDg5PiA8VTcwODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngokyNDI4Cis8VTcyMTA+IDxVNzIxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eIkDEzCis8VTczNzk+IDxVNzM3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eNuTAKKzxVNzM4OD4gPFU3Mzg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj546IMAorPFU3NEQwPiA8VTc0RDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnk5AwCis8VTc2RTc+IDxVNzZFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ebpzU1Cis8VTc3RDE+IDxVNzdEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+efkTAKKzxVN0M1QT4gPFU3QzVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57GaMAorPFU3RTkxPiA8VTdFOTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnupExCis8VTdGNEY+IDxVN0Y0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9jzAKKzxVODBFQT4gPFU4MEVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IOqMzMKKzxVODFEQT4gPFU4MURBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IeaMAorPFU4MjJFPiA8VTgyMkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiK4wCis8VTgyM0I+IDxVODIzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iIuzIKKzxVODI2Qj4gPFU4MjZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ImrMAorPFU4MkE2PiA8VTgyQTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiqYxMDYxCis8VTg2MDY+IDxVODYwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iYhjYKKzxVODgyNj4gPFU4ODI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KCmMQorPFU4RjY0PiA8VThGNjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovaQwCis8VThGNzM+IDxVOEY3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i9szI3Cis8VTkyMjk+IDxVOTIyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mIqTAKKzxVOTQ2QT4gPFU5NDZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZGqMAorPFU5ODcxPiA8VTk4NzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpobExCis8VTk4ODU+IDxVOTg4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mihTM5MQorPFU5QUQ3PiA8VTlBRDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpq5cwCis8VTlCNzI+IDxVOUI3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mtsjAKKzxVOUM3OD4gPFU5Qzc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bG4MAorPFU5Qzg4PiA8VTlDODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsog0NgorPFU5RTE1PiA8VTlFMTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuJUwCis8VTlFMkM+IDxVOUUyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m4rDEwCis8VTlFRjg+IDxVOUVGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7uDAKKzxVMzUyQT4gPFUzNTJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45SqMAorPFUzODlBPiA8VTM4OUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjopowCis8VTNCRUQ+IDxVM0JFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OvrTAKKzxVNDU2MT4gPFU0NTYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JWhMAorPFU0QzkwPiA8VTRDOTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkspAwCis8VTUzNjQ+IDxVNTM2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WNpDE4NQorPFU1ODc3PiA8VTU4Nzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlobcwCis8VTYzQjM+IDxVNjNCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aOszEzNworPFU2NEM0PiA8VTY0QzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmk4QyCis8VTZBMTA+IDxVNkExMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aokDAKKzxVNkE3OT4gPFU2QTc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qm5OTYKKzxVNkFEMz4gPFU2QUQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5quTOQorPFU2QzA3PiA8VTZDMDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsIcxCis8VTZDMEM+IDxVNkMwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+awjDAKKzxVNkVGNz4gPFU2RUY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ru3MAorPFU2RjlCPiA8VTZGOUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvpswCis8VTcwMDI+IDxVNzAwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eAgjAKKzxVNzg3NT4gPFU3ODc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56G1MAorPFU3OEUwPiA8VTc4RTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPno6AwCis8VTgyNjM+IDxVODI2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iJozAKKzxVODI2QT4gPFU4MjZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ImqMAorPFU4NEZFPiA8VTg0RkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPok74wCis8VTg2NEY+IDxVODY0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iZjzYzOQorPFU4NjVDPiA8VTg2NUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomZw0Cis8VTkzQzA+IDxVOTNDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mPgDAKKzxVOTQyQT4gPFU5NDJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZCqMAorPFU5NDY1PiA8VTk0NjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkaUwCis8VTk1NjU+IDxVOTU2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mVpTEKKzxVOUI2Rj4gPFU5QjZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a2vMjUKKzxVOUM4MT4gPFU5QzgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bKBODU1MAorPFU5RTc1PiA8VTlFNzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpubUxCis8VTM0RDA+IDxVMzREMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OTkDAKKzxVMzVBOD4gPFUzNUE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45aoMAorPFUzNkVDPiA8VTM2RUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjm6wwCis8VTM3MTk+IDxVMzcxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OcmTAKKzxVMzdFND4gPFUzN0U0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45+kMAorPFUzOTg3PiA8VTM5ODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpocwCis8VTNBOTA+IDxVM0E5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OqkDAKKzxVM0E5Nj4gPFUzQTk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46qWMAorPFUzQUZEPiA8VTNBRkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjq70wCis8VTNCREQ+IDxVM0JERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OvnTAKKzxVM0JERj4gPFUzQkRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46+fMAorPFUzRjNFPiA8VTNGM0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvL4wCis8VTQwRDk+IDxVNDBEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SDmTAKKzxVNDMxMj4gPFU0MzEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IySMAorPFU0MzkxPiA8VTQzOTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjpEwCis8VTQzQkM+IDxVNDNCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SOvDAKKzxVNDQwMj4gPFU0NDAyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JCCMAorPFU0NjM1PiA8VTQ2MzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmLUwCis8VTQ2ODQ+IDxVNDY4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SahDAKKzxVNDdGRj4gPFU0N0ZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J+/MAorPFU0ODVDPiA8VTQ4NUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoZwwCis8VTRBNkU+IDxVNEE2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SprjAKKzxVNEM1QT4gPFU0QzVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LGaMAorPFU0RDJBPiA8VTREMkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktKowCis8VTRGOTM+IDxVNEY5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+kzAKKzxVNTBDNz4gPFU1MEM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YOHMAorPFU1Mjc5PiA8VTUyNzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlibkwCis8VTUyQ0U+IDxVNTJDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WLjjAKKzxVNTJFMD4gPFU1MkUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YugMAorPFU1NzI1PiA8VTU3MjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnKUwCis8VTU3OEY+IDxVNTc4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WejzAKKzxVNTg3Nj4gPFU1ODc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aG2MAorPFU1QTNEPiA8VTVBM0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqL0wCis8VTVDQ0Q+IDxVNUNDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WzjTAKKzxVNUVEOD4gPFU1RUQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5buYMAorPFU1RjU0PiA8VTVGNTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvZQwCis8VTVGNTU+IDxVNUY1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W9lTUwNjQwCis8VTYyMkU+IDxVNjIyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aIrjI2OQorPFU2NDVEPiA8VTY0NUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkZ0wCis8VTY5MDI+IDxVNjkwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+akgjAKKzxVNkExQT4gPFU2QTFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qiaMAorPFU2REQ1PiA8VTZERDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmt5UwCis8VTZERTU+IDxVNkRFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3pTAKKzxVNkUwQz4gPFU2RTBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5riMOAorPFU2RjA5PiA8VTZGMDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvIk2MzIKKzxVNkY1RT4gPFU2RjVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r2eMzcKKzxVNzE5RD4gPFU3MTlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54adMAorPFU3NDJEPiA8VTc0MkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkK0wCis8VTc0OTA+IDxVNzQ5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eSkDMzOQorPFU3NTJBPiA8VTc1MkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlKowCis8VTc2REQ+IDxVNzZERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ebnTAKKzxVNzc2OT4gPFU3NzY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj552pMAorPFU3ODQ5PiA8VTc4NDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoYkwCis8VTc4REY+IDxVNzhERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ejnzAKKzxVNzk3Rj4gPFU3OTdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56W/MTQKKzxVNzk4ND4gPFU3OTg0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56aENzkwCis8VTdBMTE+IDxVN0ExMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eokTAKKzxVN0E0Qj4gPFU3QTRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56mLMAorPFU3QjkzPiA8VTdCOTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrpMyCis8VTdDMEY+IDxVN0MwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ewjzQKKzxVN0MyQz4gPFU3QzJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57CsMAorPFU3QzM2PiA8VTdDMzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsLYwCis8VTdDNTk+IDxVN0M1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+exmTEKKzxVN0NCNj4gPFU3Q0I2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57K2MAorPFU4MTk0PiA8VTgxOTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohpQwCis8VTgzQzk+IDxVODNDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPiTAKKzxVODUwRD4gPFU4NTBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JSNMAorPFU4NTU3PiA8VTg1NTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolZcwCis8VTg2NDI+IDxVODY0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iZgjAKKzxVODdCMD4gPFU4N0IwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J6wMAorPFU4OUVFPiA8VTg5RUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPop64wCis8VThDQzI+IDxVOENDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+izgjAKKzxVOEQ0Mj4gPFU4RDQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LWCNDA3Cis8VThEQTI+IDxVOERBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i2ojAKKzxVOERFRj4gPFU4REVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LevNDQ0NDMKKzxVOEUxQj4gPFU4RTFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LibMAorPFU4RTU3PiA8VThFNTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouZcwCis8VThGMDU+IDxVOEYwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i8hTAKKzxVOEY0Nj4gPFU4RjQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L2GMAorPFU4RjgyPiA8VThGODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovoI2Cis8VThGOTg+IDxVOEY5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i+mDI1NworPFU5MDJGPiA8VTkwMkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgK8wCis8VTkxODE+IDxVOTE4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mGgTIKKzxVOTMwND4gPFU5MzA0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YyENzgKKzxVOTMzMj4gPFU5MzMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YyyMAorPFU5MzM0PiA8VTkzMzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjLQwCis8VTkzRDU+IDxVOTNENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mPlTAKKzxVOTNGND4gPFU5M0Y0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+0MAorPFU5NjQ2PiA8VTk2NDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmYY5ODYzCis8VTlBMDQ+IDxVOUEwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mohDEKKzxVOUEzQz4gPFU5QTNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ai8MAorPFU5QkU1PiA8VTlCRTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpr6UwCis8VTlENjY+IDxVOUQ2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m1pjAKKzxVOUQ3MT4gPFU5RDcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bWxMAorPFU5REZBPiA8VTlERkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpt7o1Cis8VTlFNkQ+IDxVOUU2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m5rTEyMworPFU5RTdGPiA8VTlFN0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpub8xMTU4Cis8VTlFOTM+IDxVOUU5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6kzE2NQorPFUzNzQ4PiA8VTM3NDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnYgwCis8VTM4Njk+IDxVMzg2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OhqTAKKzxVM0M0RD4gPFUzQzREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47GNMAorPFU0NTgyPiA8VTQ1ODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkloIwCis8VTQ3MEM+IDxVNDcwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ScjDAKKzxVNTcxRD4gPFU1NzFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZydMQorPFU1NzFFPiA8VTU3MUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnJ4wCis8VTVCNkE+IDxVNUI2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WtqjExMAorPFU1QjdGPiA8VTVCN0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrb8wCis8VTVDRTY+IDxVNUNFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WzpjE4OAorPFU1REQyPiA8VTVERDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlt5I1Cis8VTYzMUI+IDxVNjMxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aMmzIzMgorPFU2NTIzPiA8VTY1MjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlKMwCis8VTY2RUI+IDxVNjZFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+abqzAKKzxVNjgzRT4gPFU2ODNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qC+NzkKKzxVNkIxMj4gPFU2QjEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qySMAorPFU2RUU2PiA8VTZFRTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmu6YxMQorPFU3MDUzPiA8VTcwNTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngZMwCis8VTcwNjQ+IDxVNzA2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eBpDAKKzxVNzY3ND4gPFU3Njc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55m0MQorPFU3Njc1PiA8VTc2NzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmbUwCis8VTdGODk+IDxVN0Y4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e+iTAKKzxVODFFMD4gPFU4MUUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IegMAorPFU4NjRBPiA8VTg2NEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomYowCis8VTkyQUU+IDxVOTJBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mKrjc3Cis8VTk0N0U+IDxVOTQ3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mRvjAKKzxVOUQ0OT4gPFU5RDQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bWJMAorPFU5RTFFPiA8VTlFMUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuJ4wCis8VTlFM0U+IDxVOUUzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m4vjEwMgorPFU1Mzc1PiA8VTUzNzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljbU2NTcKKzxVNEU3MT4gPFU0RTcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LmxMTU5MDYKKzxVNEU3Rj4gPFU0RTdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Lm/MAorPFU0RTgyPiA8VTRFODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuoIxMzAKKzxVODU4RD4gPFU4NThEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JaNMAorPFU5MUUwPiA8VTkxRTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPph6AwCis8VTdBMjQ+IDxVN0EyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eopDAKKzxVMzQ3Qz4gPFUzNDdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45G8MAorPFUzNTAwPiA8VTM1MDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlIAwCis8VTNBM0M+IDxVM0EzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OovDAKKzxVNDBBRT4gPFU0MEFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IKuMAorPFU0MzBFPiA8VTQzMEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjI4wCis8VTQ2REE+IDxVNDZEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SbmjAKKzxVNDkyMz4gPFU0OTIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KSjMAorPFU1NzE5PiA8VTU3MTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnJkwCis8VTVCRkQ+IDxVNUJGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WvvTAKKzxVNjNBMD4gPFU2M0EwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o6gMTQxNworPFU3NTY1PiA8VTc1NjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlaUxMjc1NgorPFU3NTY3PiA8VTc1Njc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlacwCis8VTkyREQ+IDxVOTJERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mLnTAKKzxVOTJFMj4gPFU5MkUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YuiMAorPFU5NTBBPiA8VTk1MEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplIowCis8VTYyQTE+IDxVNjJBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aKoTI3OAorPFU2Mzg0PiA8VTYzODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjoQwCis8VTM1QUU+IDxVMzVBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OWrjAKKzxVM0RDRD4gPFUzRENEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47eNMAorPFU0MjAxPiA8VTQyMDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiIEwCis8VTQ0NzM+IDxVNDQ3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SRszAKKzxVNEVEMT4gPFU0RUQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LuRNzgwCis8VTRGMjY+IDxVNEYyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S8pjU4NzQKKzxVNEY5Nj4gPFU0Rjk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L6WMQorPFU1MDJCPiA8VTUwMkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgKszOAorPFU1NkY1PiA8VTU2RjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlm7U0OAorPFU1NzA3PiA8VTU3MDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnIcwCis8VTVBNjg+IDxVNUE2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WpqDAKKzxVNUQxOD4gPFU1RDE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bSYMAorPFU1RDE5PiA8VTVEMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltJkxCis8VTYwQzA+IDxVNjBDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aDgDEKKzxVNjhDNj4gPFU2OEM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qOGMAorPFU2Q0E2PiA8VTZDQTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsqY4OTIKKzxVNkRFQT4gPFU2REVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5reqMTUKKzxVNzg5Nj4gPFU3ODk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56KWMAorPFU4MTQwPiA8VTgxNDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohYAwCis8VTgzRDU+IDxVODNENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPlTAKKzxVODcyNj4gPFU4NzI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JymMAorPFU4QUQ2PiA8VThBRDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoq5YzODQKKzxVOEUxQT4gPFU4RTFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LiaMAorPFU4RjJBPiA8VThGMkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovKo2MQorPFU4RjZFPiA8VThGNkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPova43MDQxCis8VTkzMDA+IDxVOTMwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mMgDAKKzxVOTY2Rj4gPFU5NjZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZmvMAorPFU5QkU5PiA8VTlCRTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpr6kwCis8VTU3RTg+IDxVNTdFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfqDAKKzxVN0ExMD4gPFU3QTEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56iQMAorPFU4MDIzPiA8VTgwMjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogKMwCis8VTZFQTM+IDxVNkVBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a6ozAKKzxVOEJCQT4gPFU4QkJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K66NTM0ODcKKzxVNTU3MD4gPFU1NTcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZWwOTUKKzxVNTZDOT4gPFU1NkM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZuJMjIKKzxVNjM0Qj4gPFU2MzRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o2LMjA3Cis8VTdGODU+IDxVN0Y4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e+hTk4Cis8VTM0Njk+IDxVMzQ2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ORqTAKKzxVM0YwOD4gPFUzRjA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47yIMAorPFUzRjRCPiA8VTNGNEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvYswCis8VTQyQTg+IDxVNDJBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SKqDAKKzxVNEJDMT4gPFU0QkMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K+BMAorPFU1MTM4PiA8VTUxMzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhLgwCis8VTUyNDY+IDxVNTI0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WJhjAKKzxVNjUxRT4gPFU2NTFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pSeMAorPFU2OTI0PiA8VTY5MjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpKQxCis8VTZCMEY+IDxVNkIwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+asjzAKKzxVNzMyMT4gPFU3MzIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54yhNDIKKzxVNzM4MD4gPFU3MzgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj546AMAorPFU3QkE5PiA8VTdCQTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrqkxNzIKKzxVN0M2RT4gPFU3QzZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57GuMAorPFU3RjU3PiA8VTdGNTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvZcxOTY5MworPFU4NDFEPiA8VTg0MUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokJ04NDAKKzxVODUwMj4gPFU4NTAyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JSCMAorPFU4NjNGPiA8VTg2M0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomL8xCis8VTg3QkE+IDxVODdCQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ieujEzODUKKzxVODlCNj4gPFU4OUI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ka2MAorPFU4OUJDPiA8VTg5QkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoprwwCis8VTkwM0I+IDxVOTAzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mAuzI5OTgKKzxVOTA4Rj4gPFU5MDhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKPMjAKKzxVOTNDRD4gPFU5M0NEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+NMAorPFU5NDdDPiA8VTk0N0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkbwwCis8VTk1MjM+IDxVOTUyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mUozU2MworPFU5NTU5PiA8VTk1NTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplZkzCis8VTk5NjA+IDxVOTk2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mloDEKKzxVOUEzRT4gPFU5QTNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ai+MAorPFU5QTU4PiA8VTlBNTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqZgwCis8VTlBQTE+IDxVOUFBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mqoTQ5OQorPFU5RTAxPiA8VTlFMDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuIEwCis8VTM0QTk+IDxVMzRBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OSqTAKKzxVMzlBQz4gPFUzOUFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46asMAorPFUzQTYxPiA8VTNBNjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqaEwCis8VTNDMDE+IDxVM0MwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OwgTAKKzxVM0M3Qj4gPFUzQzdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47G7MAorPFU1MDJFPiA8VTUwMkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgK4wCis8VTY2RUE+IDxVNjZFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+abqjAKKzxVNzYzMD4gPFU3NjMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55iwOQorPFU3NjczPiA8VTc2NzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmbMwCis8VTgxREQ+IDxVODFERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iHnTAKKzxVODRDRj4gPFU4NENGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JOPMAorPFU4ODAzPiA8VTg4MDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooIMxOAorPFU4OEY4PiA8VTg4Rjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo7gyNjg0Cis8VThFQjY+IDxVOEVCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6tjAKKzxVOTNBRj4gPFU5M0FGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y6vNQorPFUzNEUyPiA8VTM0RTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjk6IwCis8VTNEMTY+IDxVM0QxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O0ljAKKzxVM0ZEQT4gPFUzRkRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47+aMAorPFU0MDI5PiA8VTQwMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgKkwCis8VTQxRDQ+IDxVNDFEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SHlDAKKzxVNDIzNz4gPFU0MjM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ii3MAorPFU0MzMxPiA8VTQzMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjLEwCis8VTQzMzQ+IDxVNDMzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SMtDAKKzxVNTVFMD4gPFU1NUUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZegMAorPFU1Q0M4PiA8VTVDQzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPls4gwCis8VTY0NUU+IDxVNjQ1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aRnjI0MgorPFU2RDFCPiA8VTZEMUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtJs3MDk1Cis8VTZEMUM+IDxVNkQxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a0nDAKKzxVNkZGQz4gPFU2RkZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r+8MAorPFU3Mjk2PiA8VTcyOTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnipYwCis8VTczREU+IDxVNzNERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ePnjM3Cis8VTc4NEM+IDxVNzg0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ehjDY4Cis8VTdCM0Y+IDxVN0IzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+esvzAKKzxVN0U5OT4gPFU3RTk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57qZMAorPFU3RURDPiA8VTdFREM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnu5w3NTg1Cis8VTgzNjY+IDxVODM2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iNpjQKKzxVODQzRD4gPFU4NDNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JC9MjAwMDAKKzxVOTZEMj4gPFU5NkQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZuSNAorPFU5OUYxPiA8VTk5RjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpp7EzCis8VTlBODY+IDxVOUE4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mqhjU5MAorPFU5QkE1PiA8VTlCQTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprqUwCis8VTlEM0M+IDxVOUQzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m0vDAKKzxVOUQ0NT4gPFU5RDQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bWFMAorPFU2MTdBPiA8VTYxN0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhbowCis8VTY5ODg+IDxVNjk4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+amiDExMworPFU2QUQ2PiA8VTZBRDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmq5YwCis8VTZBREE+IDxVNkFEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+armjgKKzxVNkMwMD4gPFU2QzAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rCAMAorPFU4MUEyPiA8VTgxQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohqIwCis8VTg1RDg+IDxVODVEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iXmDAKKzxVOTVBRD4gPFU5NUFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZatMAorPFU5NUZFPiA8VTk1RkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl745OAorPFU5OUJGPiA8VTk5QkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppr8wCis8VTlBNjI+IDxVOUE2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mpojIKKzxVOUE3ND4gPFU5QTc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6am0MTI2NworPFUzQjVBPiA8VTNCNUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrZowCis8VTNFRjI+IDxVM0VGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O7sjAKKzxVM0Y5ND4gPFUzRjk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj476UMAorPFU0RkEzPiA8VTRGQTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvqM5MzEKKzxVNEZCNj4gPFU0RkI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L62MworPFU1MTIyPiA8VTUxMjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhKIwCis8VTU0MTU+IDxVNTQxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WQlTIzMzcKKzxVNTQ0Mj4gPFU1NDQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZGCNQorPFU1QzYxPiA8VTVDNjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsaE3OTUKKzxVNUM2Mj4gPFU1QzYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bGiMTEKKzxVNUM2NT4gPFU1QzY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bGlMTQxNQorPFU2MzE0PiA8VTYzMTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjJQwCis8VTYzNUI+IDxVNjM1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aNmzAKKzxVNjVDNT4gPFU2NUM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5peFNzI4OQorPFU2OEEwPiA8VTY4QTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoqAwCis8VTc5NjM+IDxVNzk2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+elozAKKzxVN0EwNj4gPFU3QTA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56iGMAorPFU3QTVFPiA8VTdBNUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqZ4wCis8VTdBNkQ+IDxVN0E2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eprTAKKzxVN0Q3RD4gPFU3RDdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57W9MAorPFU3RTM3PiA8VTdFMzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuLcxNAorPFU3RjE1PiA8VTdGMTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvJU5NTgKKzxVODE4Mj4gPFU4MTgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IaCMTYKKzxVODE5MD4gPFU4MTkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IaQMAorPFU4OTFCPiA8VTg5MUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopJsyNDYKKzxVODkzOD4gPFU4OTM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KS4MQorPFU5MEQ4PiA8VTkwRDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg5gwCis8VTkyQzE+IDxVOTJDMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mLgTIKKzxVOTRERD4gPFU5NEREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZOdMTYyCis8VTM1Mjc+IDxVMzUyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OUpzAKKzxVMzgyNT4gPFUzODI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46ClMAorPFUzQ0I2PiA8VTNDQjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsrYwCis8VTQ1MUU+IDxVNDUxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SUnjAKKzxVNDg5Nj4gPFU0ODk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KKWMAorPFU0OTY4PiA8VTQ5Njg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpagwCis8VTUyRjQ+IDxVNTJGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WLtDAKKzxVNTM1Qj4gPFU1MzVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y2bMgorPFU1RDQyPiA8VTVENDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltYIwCis8VTVGOEI+IDxVNUY4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W+izExMzk3Cis8VTYxNkU+IDxVNjE2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aFrjUzCis8VTZDMkY+IDxVNkMyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+awrzU3Cis8VTZFRTQ+IDxVNkVFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a7pDQ3MAorPFU2RkZFPiA8VTZGRkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv744Cis8VTcyMDg+IDxVNzIwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eIiDAKKzxVNzM4Nz4gPFU3Mzg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj546HNTA2NQorPFU3QkJCPiA8VTdCQkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrrswCis8VTdEQTA+IDxVN0RBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e2oDk5Cis8VTdERDE+IDxVN0REMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3kTAKKzxVN0VGRj4gPFU3RUZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57u/NzU2MQorPFU4MTlGPiA8VTgxOUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohp8wCis8VTg0NEU+IDxVODQ0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iRjjAKKzxVODY1MT4gPFU4NjUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JmRODM3NgorPFU5NDYyPiA8VTk0NjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkaIwCis8VTU1Q0U+IDxVNTVDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WXjjM4NQorPFU1OTg4PiA8VTU5ODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpogyMDE1MgorPFU1QUJEPiA8VTVBQkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqr0xODkKKzxVNUIyND4gPFU1QjI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aykMQorPFU1QjM3PiA8VTVCMzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrLc0ODcKKzxVNjRGNT4gPFU2NEY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pO1MAorPFU4NTM0PiA8VTg1MzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolLQxCis8VTg2ODI+IDxVODY4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iagjc3NAorPFU4NzlFPiA8VTg3OUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonp4yCis8VTM5ODQ+IDxVMzk4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OmhDAKKzxVNDVFQj4gPFU0NUVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JerMAorPFU0Q0Y4PiA8VTRDRjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPks7gwCis8VTU0MTc+IDxVNTQxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WQlzIxNjM1Cis8VTVDMUI+IDxVNUMxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WwmzAKKzxVNzI5OD4gPFU3Mjk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54qYMAorPFU3NUYyPiA8VTc1RjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnl7IwCis8VTg3QzY+IDxVODdDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ifhjcwNgorPFU4N0M3PiA8VTg3Qzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPon4cwCis8VTlFQkI+IDxVOUVCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6uzg1ODIKKzxVOUVCQz4gPFU5RUJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bq8MTUyMQorPFUzNDM3PiA8VTM0Mzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkLcwCis8VTQ4RDU+IDxVNDhENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SjlTAKKzxVNDhENj4gPFU0OEQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KOWMAorPFU1NjFDPiA8VTU2MUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmJwwCis8VTY3Njk+IDxVNjc2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+adqTMKKzxVNkVBND4gPFU2RUE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqkMAorPFU3MkI4PiA8VTcyQjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnirgxMworPFU3MzQxPiA8VTczNDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjYEwCis8VTczOUI+IDxVNzM5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eOmzQwMTkKKzxVNzQ2QT4gPFU3NDZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55GqNTQKKzxVNzgwMT4gPFU3ODAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56CBOTU0MgorPFU3OEJDPiA8VTc4QkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnorw1MworPFU5M0I3PiA8VTkzQjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjrcwCis8VTk5QUM+IDxVOTlBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mmrDI0MworPFU5QTZDPiA8VTlBNkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqaw0MDcxMAorPFU5QzIyPiA8VTlDMjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsKIwCis8VTlEQ0M+IDxVOURDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m3jDAKKzxVMzQ3Qj4gPFUzNDdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45G7MAorPFUzNzJCPiA8VTM3MkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnKswCis8VTNBMzg+IDxVM0EzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OouDAKKzxVM0ZCQT4gPFUzRkJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj4766MAorPFU0QkU2PiA8VTRCRTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkr6YwCis8VTUwOEM+IDxVNTA4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WCjDAKKzxVNTUxQj4gPFU1NTFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZSbMAorPFU1RTEzPiA8VTVFMTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluJMwCis8VTY5QUE+IDxVNjlBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+amqjAKKzxVNzc3MD4gPFU3NzcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj552wMAorPFU3OTQzPiA8VTc5NDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpYMwCis8VTc5QTE+IDxVNzlBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+emoTAKKzxVN0Y3NT4gPFU3Rjc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5721MzkKKzxVOTU4MT4gPFU5NTgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZaBMAorPFU5OUUxPiA8VTk5RTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpp6EwCis8VTlBODI+IDxVOUE4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mqgjcyNTUKKzxVNTYxQj4gPFU1NjFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZibNzM2OQorPFUzNzI1PiA8VTM3MjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnKUwCis8VTNGMkU+IDxVM0YyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O8rjAKKzxVNDA3Mj4gPFU0MDcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IGyMAorPFU0NjkxPiA8VTQ2OTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmpEwCis8VTRBMkE+IDxVNEEyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SoqjAKKzxVNTdDQj4gPFU1N0NCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z+LMzAwMAorPFU4NUI2PiA8VTg1QjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolrYwCis8VTk3M0U+IDxVOTczRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mcvjExNgorPFU0RTcwPiA8VTRFNzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkubAxNTA4NworPFU1NjJBPiA8VTU2MkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmKowCis8VTgzNkM+IDxVODM2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iNrDMKKzxVODU1Mj4gPFU4NTUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JWSMAorPFU4Q0I3PiA8VThDQjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosrc4NgorPFU5REY2PiA8VTlERjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpt7YwCis8VTQyM0Y+IDxVNDIzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SIvzAKKzxVNDYxMT4gPFU0NjExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JiRMAorPFU0NzE1PiA8VTQ3MTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknJUwCis8VTRBMkI+IDxVNEEyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SoqzAKKzxVNEJBRT4gPFU0QkFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K6uMAorPFU0RjQ1PiA8VTRGNDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvYUwCis8VTUyQTI+IDxVNTJBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WKojEKKzxVNTJGMT4gPFU1MkYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YuxMAorPFU1MzU2PiA8VTUzNTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljZY5MTgxCis8VTU4RjI+IDxVNThGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WjsjAKKzxVNzczRj4gPFU3NzNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55y/MAorPFU4MTA4PiA8VTgxMDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohIgxNAorPFU4MTA5PiA8VTgxMDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohIkyNDg4Cis8VTg3NTA+IDxVODc1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+idkDAKKzxVOENFMz4gPFU4Q0UzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LOjNDEKKzxVOEZDOD4gPFU4RkM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L+IMjMwNgorPFU5MDgxPiA8VTkwODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgoEyMAorPFU5NzIxPiA8VTk3MjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnKEwCis8VTlFQTU+IDxVOUVBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6pTI3Cis8VTlFQTY+IDxVOUVBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6pjUzMDUKKzxVNUFEQT4gPFU1QURBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5auaMTMKKzxVOTg2Mj4gPFU5ODYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aGiMAorPFU5ODlGPiA8VTk4OUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpop83Cis8VTM0QkM+IDxVMzRCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OSvDAKKzxVMzVDND4gPFUzNUM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45eEMAorPFUzNjYyPiA8VTM2NjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmaIwCis8VTQxN0M+IDxVNDE3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SFvDAKKzxVNDJBMT4gPFU0MkExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IqhMAorPFU0NDNEPiA8VTQ0M0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkL0wCis8VTQ0NzE+IDxVNDQ3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SRsTAKKzxVNDZGMj4gPFU0NkYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JuyMAorPFU0N0MyPiA8VTQ3QzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkn4IwCis8VTRCRjY+IDxVNEJGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SvtjAKKzxVNEMwQj4gPFU0QzBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LCLMAorPFU2MDk3PiA8VTYwOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgpcwCis8VTYxNzI+IDxVNjE3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aFsjAKKzxVNjQ3MT4gPFU2NDcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pGxMAorPFU2OUZFPiA8VTY5RkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmp74wCis8VTc0OEE+IDxVNzQ4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eSijAKKzxVNzc5Mj4gPFU3NzkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj556SMTU2NworPFU3NzlFPiA8VTc3OUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnp4xMworPFU4NkVFPiA8VTg2RUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPom64yMDQ1Cis8VTg4M0I+IDxVODgzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iguzI0Cis8VThCM0U+IDxVOEIzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+isvjAKKzxVOEMyOT4gPFU4QzI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LCpMTE5Cis8VThFNjM+IDxVOEU2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i5ozMKKzxVOTc5ND4gPFU5Nzk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z6UMQorPFU5OTQ1PiA8VTk5NDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppYUxMworPFU5OTkyPiA8VTk5OTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpppI0NjkKKzxVOUIxNz4gPFU5QjE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ayXMAorPFU5QjE4PiA8VTlCMTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprJg2Cis8VTlDM0I+IDxVOUMzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mwuzAKKzxVOUNENz4gPFU5Q0Q3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bOXNTQKKzxVMzZFNz4gPFUzNkU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45unMAorPFU0NzMxPiA8VTQ3MzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknLEwCis8VTVDNTg+IDxVNUM1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WxmDAKKzxVNkU4MD4gPFU2RTgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqAMQorPFU2RUUxPiA8VTZFRTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmu6EzMzM4MAorPFU2RUZGPiA8VTZFRkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmu78yMzYKKzxVNzdENT4gPFU3N0Q1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+VMAorPFU4N0E4PiA8VTg3QTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonqgyNAorPFU4N0NFPiA8VTg3Q0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPon44wCis8VTg5NTQ+IDxVODk1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+illDAKKzxVOTNDQj4gPFU5M0NCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+LMAorPFUzNUM4PiA8VTM1Qzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjl4gwCis8VTM4NjI+IDxVMzg2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OhojAKKzxVM0IwNT4gPFUzQjA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46yFMAorPFUzRDU4PiA8VTNENTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtZgwCis8VTQ1NTU+IDxVNDU1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SVlTAKKzxVNDc2MT4gPFU0NzYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J2hMAorPFU0NzYyPiA8VTQ3NjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknaIwCis8VTQ4NkM+IDxVNDg2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ShrDAKKzxVNTBDOD4gPFU1MEM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YOIMAorPFU1ODgxPiA8VTU4ODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlooE2Cis8VTVFNTQ+IDxVNUU1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W5lDEzMgorPFU2MTYyPiA8VTYxNjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhaIxNzQzMQorPFU2NkZDPiA8VTY2RkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmm7w1MjIxCis8VTZGMkI+IDxVNkYyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a8qzY5NTgKKzxVNkZBQj4gPFU2RkFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r6rMAorPFU2RkI3PiA8VTZGQjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvrcwCis8VTcxQjM+IDxVNzFCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eGszEwCis8VTczNEM+IDxVNzM0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eNjDAKKzxVN0UzNT4gPFU3RTM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57i1MAorPFU3RjI2PiA8VTdGMjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvKYxMQorPFU4NTA0PiA8VTg1MDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolIQwCis8VTg1MTM+IDxVODUxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iUkzY1MgorPFU5M0REPiA8VTkzREQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpj50wCis8VTk1NTg+IDxVOTU1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mVmDEKKzxVNzI2ND4gPFU3MjY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54mkMTkKKzxVMzc1MT4gPFUzNzUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj452RMAorPFUzN0NDPiA8VTM3Q0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjn4wwCis8VTM3RkY+IDxVMzdGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OfvzAKKzxVMzg1Qj4gPFUzODVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46GbMAorPFUzRUNBPiA8VTNFQ0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPju4owCis8VTQwMkU+IDxVNDAyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SArjAKKzxVNDE1Mj4gPFU0MTUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IWSMAorPFU0MjBEPiA8VTQyMEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiI0wCis8VTQ3RTU+IDxVNDdFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SfpTAKKzxVNEQ2OD4gPFU0RDY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LWoMAorPFU1NDAyPiA8VTU0MDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkIIwCis8VTU0RTQ+IDxVNTRFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WTpDAKKzxVNUEwRj4gPFU1QTBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aiPMAorPFU1QzI4PiA8VTVDMjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsKgxCis8VTVGRDk+IDxVNUZEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W/mTE2MjkyCis8VTYwN0U+IDxVNjA3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBvjAKKzxVNjc1Nz4gPFU2NzU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p2XMAorPFU2NzY3PiA8VTY3Njc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnacwCis8VTZDMTM+IDxVNkMxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+awkzEyNzIKKzxVNkQ1RD4gPFU2RDVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rWdMAorPFU3MjdCPiA8VTcyN0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnibswCis8VTcyRjU+IDxVNzJGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eLtTAKKzxVNzVERD4gPFU3NUREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55edMAorPFU3NkYyPiA8VTc2RjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnm7IxNDQ0Cis8VTc2RjM+IDxVNzZGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ebszAKKzxVNzg2RD4gPFU3ODZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56GtOQorPFU3QjAwPiA8VTdCMDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrIAwCis8VTgyOTI+IDxVODI5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iKkjE3OTEKKzxVODMyQj4gPFU4MzJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IyrMzczOAorPFU4NjA5PiA8VTg2MDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomIkwCis8VTg2RDY+IDxVODZENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ibljAKKzxVOTA5OT4gPFU5MDk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKZMzIKKzxVOTFFRj4gPFU5MUVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YevMAorPFU5MkU5PiA8VTkyRTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpi6kwCis8VTk0RDM+IDxVOTREMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mTkzIKKzxVOTlGOT4gPFU5OUY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ae5MAorPFU5RjA2PiA8VTlGMDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvIYwCis8VTM2NDE+IDxVMzY0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OZgTAKKzxVMzdEMD4gPFUzN0QwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45+QMAorPFUzQjEyPiA8VTNCMTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrJIwCis8VTQwNzM+IDxVNDA3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SBszAKKzxVNDQ4RT4gPFU0NDhFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JKOMAorPFU0NTlGPiA8VTQ1OUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklp8wCis8VTU4RkU+IDxVNThGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WjvjAKKzxVNUVBQz4gPFU1RUFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bqsMAorPFU2QzUyPiA8VTZDNTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsZIwCis8VTZGMkQ+IDxVNkYyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a8rTAKKzxVNzg2NT4gPFU3ODY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56GlMAorPFU4MzNCPiA8VTgzM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojLswCis8VTgzQkQ+IDxVODNCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iOvTYwMQorPFU4M0JFPiA8VTgzQkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojr4wCis8VTg3RDI+IDxVODdEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ifkjE0NworPFU4ODBFPiA8VTg4MEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooI4wCis8VTczMkI+IDxVNzMyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eMqzU3MjcKKzxVOEM5Mz4gPFU4QzkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LKTNzMKKzxVMzc1Rj4gPFUzNzVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj452fMAorPFUzQ0EwPiA8VTNDQTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsqAwCis8VTQxNjY+IDxVNDE2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SFpjAKKzxVNTE1RT4gPFU1MTVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YWeMAorPFU1ODI1PiA8VTU4MjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloKUwCis8VTVBOEM+IDxVNUE4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WqjDAKKzxVNUFGOT4gPFU1QUY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5au5MAorPFU2NUM0PiA8VTY1QzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPml4Q0Cis8VTY3ODY+IDxVNjc4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aehjAKKzxVNkJEQj4gPFU2QkRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q+bMTg0MTMKKzxVNkUzNT4gPFU2RTM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ri1MAorPFU3MjY2PiA8VTcyNjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniaYyOQorPFU3N0RCPiA8VTc3REI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnn5szMDUwCis8VTdGNUU+IDxVN0Y1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9njAKKzxVODJCQz4gPFU4MkJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Iq8MAorPFU4MzA1PiA8VTgzMDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojIU4MzgKKzxVODc2NT4gPFU4NzY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J2lMgorPFU4N0NBPiA8VTg3Q0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPon4o0Cis8VTg5OTI+IDxVODk5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+imkjAKKzxVOEVERT4gPFU4RURFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LueMAorPFU5MTU1PiA8VTkxNTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphZUwCis8VTkzMjg+IDxVOTMyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mMqDIKKzxVOTUxQT4gPFU5NTFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZSaMTQyCis8VTlBRTY+IDxVOUFFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mrpjU5NAorPFU5QUYzPiA8VTlBRjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpq7MwCis8VTlEOUM+IDxVOUQ5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m2nDAKKzxVMzZCOT4gPFUzNkI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45q5MAorPFUzOUM3PiA8VTM5Qzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjp4cwCis8VTUxODc+IDxVNTE4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WGhzQKKzxVNTM2Rj4gPFU1MzZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y2vMjI1Cis8VTU5MTg+IDxVNTkxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WkmDAKKzxVNUNDMT4gPFU1Q0MxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bOBMzcKKzxVNjIzQz4gPFU2MjNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oi8MAorPFU2NjM0PiA8VTY2MzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmLQyMAorPFU2Q0Q2PiA8VTZDRDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPms5Y2Cis8VTdCMzc+IDxVN0IzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+estzAKKzxVODMwNj4gPFU4MzA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IyGMworPFUzNEI1PiA8VTM0QjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkrUwCis8VTM0QkI+IDxVMzRCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OSuzAKKzxVMzg0Qz4gPFUzODRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46GMMAorPFUzOUNDPiA8VTM5Q0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjp4wwCis8VTNBOUU+IDxVM0E5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OqnjAKKzxVM0FFRj4gPFUzQUVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46uvMAorPFUzQjk4PiA8VTNCOTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrpgwCis8VTNEMTg+IDxVM0QxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O0mDAKKzxVM0VCQT4gPFUzRUJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47q6MAorPFUzRkRFPiA8VTNGREU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjv54wCis8VTQwMjQ+IDxVNDAyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SApDAKKzxVNDJDMz4gPFU0MkMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IuDMAorPFU0NEVFPiA8VTQ0RUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkk64wCis8VTQ4NUE+IDxVNDg1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ShmjAKKzxVNEFDOT4gPFU0QUM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KuJMAorPFU1MTgzPiA8VTUxODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhoMwCis8VTUxOTA+IDxVNTE5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WGkDAKKzxVNTE5Mj4gPFU1MTkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YaSNTMxNworPFU1QUEyPiA8VTVBQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqqIwCis8VTVFM0Q+IDxVNUUzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W4vTM3NjYKKzxVNjFDQj4gPFU2MUNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oeLNTkKKzxVNjY5Mz4gPFU2NjkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pqTMAorPFU2N0Q1PiA8VTY3RDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmn5UwCis8VTY5NTk+IDxVNjk1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+almTAKKzxVNkJGNz4gPFU2QkY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q+3MQorPFU3NDQxPiA8VTc0NDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkYE0OAorPFU3NjgzPiA8VTc2ODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmoMwCis8VTc3MEE+IDxVNzcwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ecijIKKzxVNzc4MD4gPFU3NzgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj556ANQorPFU3NzkwPiA8VTc3OTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnpAwCis8VTgwMDQ+IDxVODAwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iAhDE4Cis8VTgyNTI+IDxVODI1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iJkjAKKzxVODMwMj4gPFU4MzAyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IyCMTAxNQorPFU4NDNBPiA8VTg0M0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokLowCis8VTg4QTQ+IDxVODhBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iipDEwNworPFU4QzhDPiA8VThDOEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosowzNzc4Cis8VThDQkY+IDxVOENCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iyvzE3Cis8VThEMzg+IDxVOEQzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i0uDU0OTEKKzxVOTExQT4gPFU5MTFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YSaMAorPFU5MTJFPiA8VTkxMkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphK4wCis8VTRFNDg+IDxVNEU0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S5iDIwNjY1OQorPFUzREFDPiA8VTNEQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtqwwCis8VTNFQjM+IDxVM0VCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O6szAKKzxVNDI4OD4gPFU0Mjg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IqIMAorPFU0MzU5PiA8VTQzNTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjZkwCis8VTQ0QkQ+IDxVNDRCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SSvTAKKzxVNDkwMj4gPFU0OTAyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KSCMAorPFU1NDQ1PiA8VTU0NDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkYUzCis8VTU4MzM+IDxVNTgzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WgszAKKzxVNTg3QT4gPFU1ODdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aG6MAorPFU1QTkyPiA8VTVBOTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqpIzODYxCis8VTVENEI+IDxVNUQ0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W1izQzCis8VTVGQkU+IDxVNUZCRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W+vjAKKzxVNjUxNz4gPFU2NTE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pSXMAorPFU2NzlBPiA8VTY3OUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnpoxOTcwCis8VTY4MDI+IDxVNjgwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aggjAKKzxVNjg4NT4gPFU2ODg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qKFNjkxMQorPFU2OTYzPiA8VTY5NjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpaM3NTMKKzxVNjk3Mz4gPFU2OTczPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qWzMAorPFU2OUQxPiA8VTY5RDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmp5EwCis8VTZDOTI+IDxVNkM5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aykjE0MjgKKzxVNkNBMT4gPFU2Q0ExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rKhMTc4NTEzCis8VTZFNDQ+IDxVNkU0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a5hDQ4Cis8VTZFNDg+IDxVNkU0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a5iDAKKzxVNkVBNj4gPFU2RUE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqmMAorPFU3MTY0PiA8VTcxNjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhaQyMjkzCis8VTczMzg+IDxVNzMzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eMuDAKKzxVNzNBQj4gPFU3M0FCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj546rMjQwMworPFU3M0ZCPiA8VTczRkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnj7swCis8VTc0NDI+IDxVNzQ0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eRgjAKKzxVNzcwOT4gPFU3NzA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55yJNjA1NworPFU3NzQyPiA8VTc3NDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnYIwCis8VTc5OTY+IDxVNzk5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+emljAKKzxVN0JDMz4gPFU3QkMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56+DMAorPFU4MTA0PiA8VTgxMDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohIQwCis8VTgxMjI+IDxVODEyMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iEojEKKzxVODE1Qz4gPFU4MTVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IWcMAorPFU4MkZBPiA8VTgyRkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi7oxCis8VTgzOTM+IDxVODM5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iOkzE4MQorPFU4NDdGPiA8VTg0N0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokb8wCis8VTkwRkY+IDxVOTBGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mDvzAKKzxVOTE3Nj4gPFU5MTc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YW2MTQ0Cis8VTkyQzI+IDxVOTJDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mLgjAKKzxVOTM4Nz4gPFU5Mzg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y6HMAorPFU5NTQ1PiA8VTk1NDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplYU3Cis8VTk3MDk+IDxVOTcwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mciTE0OTUKKzxVOURBNT4gPFU5REE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6balMAorPFU5RTVCPiA8VTlFNUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuZswCis8VTlFRjQ+IDxVOUVGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7tDAKKzxVNDE4MD4gPFU0MTgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IaAMAorPFU0NEZBPiA8VTQ0RkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkk7owCis8VTQ3Mzg+IDxVNDczOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ScuDAKKzxVNTFDMj4gPFU1MUMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YeCMAorPFU1QTg0PiA8VTVBODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqoQwCis8VTVBQkE+IDxVNUFCQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WqujAKKzxVNUIwRD4gPFU1QjBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ayNMAorPFU1RDQ0PiA8VTVENDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltYQwCis8VTYzMzQ+IDxVNjMzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aMtDAKKzxVNkJDRT4gPFU2QkNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q+OMAorPFU2QkNGPiA8VTZCQ0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmr48zNjI4OQorPFU2RDdDPiA8VTZEN0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtbwxMAorPFU2RTNDPiA8VTZFM0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuLwxCis8VTcxRDg+IDxVNzFEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHmDAKKzxVN0Y4RT4gPFU3RjhFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj576OODI2ODEKKzxVOTM4Mj4gPFU5MzgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y6CMAorPFU5NTQxPiA8VTk1NDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplYE1OAorPFU5RUUzPiA8VTlFRTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpu6MwCis8VTNCNTE+IDxVM0I1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OtkTAKKzxVNDAxQj4gPFU0MDFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ICbMAorPFU0MjRCPiA8VTQyNEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiYswCis8VTQyOEE+IDxVNDI4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SKijAKKzxVNEMyOD4gPFU0QzI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LCoMAorPFU0QzJBPiA8VTRDMkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksKowCis8VTRENjI+IDxVNEQ2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S1ojAKKzxVNTlCOT4gPFU1OUI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aa5OTgwOQorPFU1QTlBPiA8VTVBOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqpoyMDA2Cis8VTVCRDA+IDxVNUJEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WvkDI4NQorPFU2NjI3PiA8VTY2Mjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmKcxNDIyCis8VTZDQUM+IDxVNkNBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ayrDEKKzxVNzE1RD4gPFU3MTVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54WdMAorPFU3NUQ3PiA8VTc1RDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnl5cxCis8VTc3MUI+IDxVNzcxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ecmzUKKzxVNzc3OD4gPFU3Nzc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5524MAorPFU3OTU5PiA8VTc5NTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpZkwCis8VTg3NUU+IDxVODc1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+idnjAKKzxVODg4Mj4gPFU4ODgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KKCMTY5Cis8VThCMEU+IDxVOEIwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+isjjE2Cis8VThDMUM+IDxVOEMxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwnDExMTcKKzxVOERDQT4gPFU4RENBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LeKMAorPFU5N0NFPiA8VTk3Q0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpn44wCis8VTlCM0Q+IDxVOUIzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+msvTAKKzxVOUI0NT4gPFU5QjQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a2FMTEyNgorPFU2MEI2PiA8VTYwQjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgrYzNgorPFUzODQ4PiA8VTM4NDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoYgwCis8VTNBM0E+IDxVM0EzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OoujAKKzxVNDI5Rj4gPFU0MjlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IqfMAorPFU0NzY3PiA8VTQ3Njc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknacwCis8VTRBRDI+IDxVNEFEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SrkjAKKzxVNEVFQz4gPFU0RUVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LusMTM2NzIwCis8VTUwMTE+IDxVNTAxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAkTIyMjUKKzxVNjI2QT4gPFU2MjZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5omqNzgKKzxVNjM2Qj4gPFU2MzZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o2rMgorPFU2QTIwPiA8VTZBMjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqKAwCis8VTdBNDg+IDxVN0E0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+epiDAKKzxVODNEQj4gPFU4M0RCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I+bMAorPFU4NjRCPiA8VTg2NEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomYswCis8VTkzNDY+IDxVOTM0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mNhjAKKzxVOTQ5ND4gPFU5NDk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZKUMQorPFU5NTgwPiA8VTk1ODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPploAzNzUKKzxVOTU4NT4gPFU5NTg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZaFMAorPFU5NUU4PiA8VTk1RTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl6g2NTUyMQorPFU2NkFBPiA8VTY2QUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmqowCis8VTM5NDM+IDxVMzk0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OlgzAKKzxVMzk5Nj4gPFUzOTk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46aWMAorPFUzQzZBPiA8VTNDNkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsaowCis8VTNENEQ+IDxVM0Q0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O1jTAKKzxVNjFEMT4gPFU2MUQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oeRMTA3Cis8VTYxRTM+IDxVNjFFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aHozEKKzxVNzExNj4gPFU3MTE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54SWNTQKKzxVNzFEQz4gPFU3MURDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54ecMAorPFU5NUY3PiA8VTk1Rjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl7czMTk3Cis8VTM2Nzk+IDxVMzY3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OZuTAKKzxVMzgxMz4gPFUzODEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46CTMAorPFUzQTVBPiA8VTNBNUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqZowCis8VTQwMDQ+IDxVNDAwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SAhDAKKzxVNDFDNz4gPFU0MUM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IeHMAorPFU0MjVBPiA8VTQyNUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiZowCis8VTQ0NDM+IDxVNDQ0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SRgzAKKzxVNDQ0NT4gPFU0NDQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JGFMAorPFU0NDkwPiA8VTQ0OTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkpAwCis8VTQ0REQ+IDxVNDRERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+STnTAKKzxVNDVDOD4gPFU0NUM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JeIMAorPFU0NjY2PiA8VTQ2NjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmaYwCis8VTQ2Njk+IDxVNDY2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SZqTAKKzxVNDkxMz4gPFU0OTEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KSTMAorPFU0QzEyPiA8VTRDMTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksJIwCis8VTRDOUI+IDxVNEM5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SymzAKKzxVNEQwQz4gPFU0RDBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LSMMAorPFU0RDNGPiA8VTREM0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktL8wCis8VTRENDY+IDxVNEQ0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S1hjAKKzxVNTExQT4gPFU1MTFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YSaMAorPFU1MUExPiA8VTUxQTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhqEwCis8VTVFNkE+IDxVNUU2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W5qjEKKzxVNjFEQz4gPFU2MURDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oecMAorPFU2NkRBPiA8VTY2REE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmm5oxCis8VTY3MjY+IDxVNjcyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+acpjEyNDYKKzxVNkE1Nz4gPFU2QTU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qmXMAorPFU2QUFDPiA8VTZBQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqqwyNDcKKzxVNkMwQj4gPFU2QzBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rCLMAorPFU2RkRCPiA8VTZGREI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv5sxMzMKKzxVNzM3ND4gPFU3Mzc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5420MAorPFU3NTBEPiA8VTc1MEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlI04Cis8VTc1M0Y+IDxVNzUzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eUvzAKKzxVNzZERj4gPFU3NkRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55ufNjEzNworPFU3N0EyPiA8VTc3QTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnqIyCis8VTc3Qzc+IDxVNzdDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+efhzE0Cis8VTc3RDI+IDxVNzdEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+efkjAKKzxVNzkxRT4gPFU3OTFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56SeMAorPFU4MjY4PiA8VTgyNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiagwCis8VTgyQ0U+IDxVODJDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iLjjEwCis8VTgzOTQ+IDxVODM5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iOlDAKKzxVODQwQz4gPFU4NDBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JCMNTM0Cis8VTg0MjA+IDxVODQyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iQoDAKKzxVODU0ND4gPFU4NTQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JWEMAorPFU4NjdCPiA8VTg2N0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPombszNDgKKzxVODc3MT4gPFU4NzcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J2xMAorPFU5MTMzPiA8VTkxMzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphLMwCis8VTkxMzg+IDxVOTEzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mEuDAKKzxVOTZGQT4gPFU5NkZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Zu6MAorPFU5NzQwPiA8VTk3NDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnYAwCis8VTk5NUI+IDxVOTk1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mlmzAKKzxVOUJDRD4gPFU5QkNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a+NMAorPFU5RTBGPiA8VTlFMEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuI8wCis8VTlFNzI+IDxVOUU3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m5sjAKKzxVOUVGRT4gPFU5RUZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bu+MgorPFUzNjlFPiA8VTM2OUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmp4wCis8VTQzRjU+IDxVNDNGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SPtTAKKzxVNTJEMD4gPFU1MkQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YuQMjQKKzxVNjFERT4gPFU2MURFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oeeMAorPFU2MUY1PiA8VTYxRjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmh7UzNzMKKzxVNzMxQj4gPFU3MzFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54ybNTMwNworPFU3NEZFPiA8VTc0RkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnk74wCis8VTgyNEI+IDxVODI0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iJizMKKzxVODQ5OT4gPFU4NDk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JKZNDAwMAorPFU4NzIyPiA8VTg3MjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonKIzNAorPFU4ODEzPiA8VTg4MTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooJMxMworPFU5MzMzPiA8VTkzMzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjLMwCis8VTk1MzA+IDxVOTUzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mUsDQxCis8VTlCRUQ+IDxVOUJFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mvrTAKKzxVMzczND4gPFUzNzM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45y0MAorPFUzNzcxPiA8VTM3NzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnbEwCis8VTQ4MjI+IDxVNDgyMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SgojAKKzxVNDk0Mj4gPFU0OTQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KWCMAorPFU0OTcwPiA8VTQ5NzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpbAwCis8VTU5MjI+IDxVNTkyMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WkojEyNAorPFU1OTIzPiA8VTU5MjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpKMwCis8VTVCNUY+IDxVNUI1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WtnzIwNTYKKzxVNjhBNj4gPFU2OEE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qKmMTgwOTQKKzxVNkU5NT4gPFU2RTk1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqVMgorPFU5NzI1PiA8VTk3MjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnKUwCis8VTk3M0Y+IDxVOTczRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mcvzAKKzxVNTRBQT4gPFU1NEFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZKqMTU4MworPFU3NzJGPiA8VTc3MkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnK8xMTgzCis8VTc3ODc+IDxVNzc4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eehzIxCis8VTM3Mzc+IDxVMzczNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OctzAKKzxVMzdEQz4gPFUzN0RDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45+cMAorPFUzODI3PiA8VTM4Mjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoKcwCis8VTM4QzY+IDxVMzhDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OjhjAKKzxVM0E2Mj4gPFUzQTYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46miMAorPFUzRTBGPiA8VTNFMEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuI8wCis8VTQyQjM+IDxVNDJCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SKszAKKzxVNDJEQj4gPFU0MkRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IubMAorPFU0MzE1PiA8VTQzMTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjJUwCis8VTQzMTg+IDxVNDMxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SMmDAKKzxVNDM1OD4gPFU0MzU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I2YMAorPFU0NTczPiA8VTQ1NzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklbMwCis8VTQ1Nzc+IDxVNDU3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SVtzAKKzxVNDZFNz4gPFU0NkU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JunMAorPFU0OTBEPiA8VTQ5MEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpI0wCis8VTQ5Nzg+IDxVNDk3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SluDAKKzxVNEFCRT4gPFU0QUJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Kq+MAorPFU0RDIyPiA8VTREMjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktKIwCis8VTUxOUU+IDxVNTE5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WGnjAKKzxVNUYyNT4gPFU1RjI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bylMjUwNworPFU1RjRDPiA8VTVGNEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvYw1Cis8VTYyMDI+IDxVNjIwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aIgjAKKzxVNjRERj4gPFU2NERGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pOfMAorPFU2NTIwPiA8VTY1MjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlKAxCis8VTZBQjc+IDxVNkFCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aqtzAKKzxVNzAzMD4gPFU3MDMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54CwNworPFU3MjIyPiA8VTcyMjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniKIwCis8VTcyREQ+IDxVNzJERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eLnTAKKzxVNzMxNT4gPFU3MzE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54yVMTcKKzxVNzM3Qz4gPFU3MzdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5428MAorPFU3NEQ1PiA8VTc0RDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnk5UwCis8VTc5NjI+IDxVNzk2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+elojMzMgorPFU3OUIwPiA8VTc5QjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnprAwCis8VTdDNEI+IDxVN0M0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+exizAKKzxVN0NEQz4gPFU3Q0RDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57OcMTQ2Cis8VTdFM0I+IDxVN0UzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e4uzE0Cis8VTdGNTk+IDxVN0Y1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9mTAKKzxVODRCRT4gPFU4NEJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JK+MAorPFU4NjJBPiA8VTg2MkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomKowCis8VTg2M0M+IDxVODYzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iYvDE5Cis8VThBNzg+IDxVOEE3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ipuDAKKzxVOEZGNz4gPFU4RkY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L+3OTY0MAorPFU5MTlBPiA8VTkxOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphpoxNQorPFU5MUJFPiA8VTkxQkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphr4wCis8VTkxQkY+IDxVOTFCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mGvzAKKzxVOTFDND4gPFU5MUM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YeEMAorPFU5NTdFPiA8VTk1N0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplb4wCis8VTk3NjE+IDxVOTc2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mdoTQyNworPFU5RTBEPiA8VTlFMEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuI0wCis8VTlFOEE+IDxVOUU4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6ijAKKzxVOUU4Qj4gPFU5RThCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bqLMzEKKzxVOUU5Qj4gPFU5RTlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bqbMAorPFUzNzY1PiA8VTM3NjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnaUwCis8VTM5NUQ+IDxVMzk1RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OlnTAKKzxVM0MzRD4gPFUzQzNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47C9MAorPFUzQ0ZEPiA8VTNDRkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjs70wCis8VTRCNjc+IDxVNEI2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+StpzAKKzxVNEM0QT4gPFU0QzRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LGKMAorPFU0RjhFPiA8VTRGOEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvo4wCis8VTVCNEE+IDxVNUI0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WtijAKKzxVNUYyRD4gPFU1RjJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bytMzIKKzxVNjU0OT4gPFU2NTQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pWJNQorPFU2RDIzPiA8VTZEMjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtKMwCis8VTZFMzM+IDxVNkUzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a4szAKKzxVNkZEND4gPFU2RkQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r+UMAorPFU3MDU2PiA8VTcwNTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngZYwCis8VTc3MkI+IDxVNzcyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ecqzIKKzxVN0M3Mz4gPFU3QzczPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57GzMTYxMjAKKzxVN0Y4Qj4gPFU3RjhCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj576LMAorPFU4MTEyPiA8VTgxMTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohJIyCis8VTgyODg+IDxVODI4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iKiDMyCis8VTg0NUU+IDxVODQ1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iRnjAKKzxVODUxRD4gPFU4NTFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JSdMAorPFU5MkE0PiA8VTkyQTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiqQwCis8VTM3MDY+IDxVMzcwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OchjAKKzxVM0EyMD4gPFUzQTIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46igMAorPFUzQUQ4PiA8VTNBRDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjq5gwCis8VTNDRjQ+IDxVM0NGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OztDAKKzxVM0QzNT4gPFUzRDM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47S1MAorPFUzRDRCPiA8VTNENEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtYswCis8VTNFMTM+IDxVM0UxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O4kzAKKzxVNDA0Nz4gPFU0MDQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IGHMAorPFU0MjdFPiA8VTQyN0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkib4wCis8VTQzMEY+IDxVNDMwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SMjzAKKzxVNDMxMD4gPFU0MzEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IyQMAorPFU0MzI5PiA8VTQzMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjKkwCis8VTQ1OTE+IDxVNDU5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SWkTAKKzxVNDZDOT4gPFU0NkM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JuJMAorPFU0NkQxPiA8VTQ2RDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkm5EwCis8VTQ4RkU+IDxVNDhGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SjvjAKKzxVNDkwOT4gPFU0OTA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KSJMAorPFU0QjY5PiA8VTRCNjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrakwCis8VTRCQUQ+IDxVNEJBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SurTAKKzxVNTE5Nj4gPFU1MTk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YaWOAorPFU1MUFBPiA8VTUxQUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhqowCis8VTU2Mjc+IDxVNTYyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WYpzU4Cis8VTU4NTM+IDxVNTg1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WhkzAKKzxVNUI5Mz4gPFU1QjkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a6TNTIKKzxVNUJCQj4gPFU1QkJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a67MAorPFU1QkM2PiA8VTVCQzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlr4YxNDAyNQorPFU1Q0RBPiA8VTVDREE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPls5owCis8VTVFNDI+IDxVNUU0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W5gjc0Cis8VTVFNEU+IDxVNUU0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W5jjAKKzxVNUU2Nj4gPFU1RTY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bmmMAorPFU2OTkzPiA8VTY5OTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmppMwCis8VTZBMTI+IDxVNkExMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aokjAKKzxVNkFDMT4gPFU2QUMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5quBMAorPFU2QzY4PiA8VTZDNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsag0MQorPFU2REU3PiA8VTZERTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmt6cwCis8VTZERkY+IDxVNkRGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3vzAKKzxVNkVGNT4gPFU2RUY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ru1MAorPFU2RjFFPiA8VTZGMUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvJ4wCis8VTZGRDc+IDxVNkZENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a/lzAKKzxVNzk1NT4gPFU3OTU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56WVOAorPFU3OUQ4PiA8VTc5RDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnp5g4NTMxCis8VTdDMUE+IDxVN0MxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ewmjAKKzxVN0NGOD4gPFU3Q0Y4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57O4NgorPFU3RTlGPiA8VTdFOUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnup8zNAorPFU3RjgzPiA8VTdGODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvoMwCis8VTg1MjQ+IDxVODUyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iUpDAKKzxVODVDQz4gPFU4NUNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JeMMAorPFU4NzFDPiA8VTg3MUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonJwyMjA1Cis8VTg4MjA+IDxVODgyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+igoDAKKzxVODk5Mz4gPFU4OTkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KaTMTMKKzxVODk5ND4gPFU4OTk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KaUMAorPFU4OUM1PiA8VTg5QzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPop4U2NzcKKzxVOEIxMD4gPFU4QjEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KyQNQorPFU4QzI3PiA8VThDMjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosKcyNzMKKzxVOUYwRj4gPFU5RjBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6byPMAorPFUzNDk5PiA8VTM0OTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkpkwCis8VTM3NzA+IDxVMzc3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OdsDAKKzxVM0IwNj4gPFUzQjA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46yGMAorPFUzQjhDPiA8VTNCOEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrowwCis8VTNDMDM+IDxVM0MwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OwgzAKKzxVNDBDNz4gPFU0MEM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IOHMAorPFU0M0MzPiA8VTQzQzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkj4MwCis8VTRBRjU+IDxVNEFGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SrtTAKKzxVNEMxMz4gPFU0QzEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LCTMAorPFU1QTQyPiA8VTVBNDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqYIwCis8VTVBOTQ+IDxVNUE5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WqlDAKKzxVNUIzNT4gPFU1QjM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ay1MAorPFU1QjgwPiA8VTVCODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlroAwCis8VTY4Qzk+IDxVNjhDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ajiTIwNzMKKzxVNkFCMD4gPFU2QUIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qqwMAorPFU2QUNCPiA8VTZBQ0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmq4swCis8VTc3MjA+IDxVNzcyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ecoDM0NTQKKzxVNzdDOD4gPFU3N0M4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+IMAorPFU3N0NBPiA8VTc3Q0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnn4owCis8VTc3Q0Y+IDxVNzdDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+efjzAKKzxVN0RCRj4gPFU3REJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57a/MTgKKzxVN0REQz4gPFU3RERDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57ecMAorPFU3RUY1PiA8VTdFRjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnu7UyMTc3Cis8VTgxRjE+IDxVODFGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iHsTAKKzxVODI4Nz4gPFU4Mjg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IqHMAorPFU4NzUyPiA8VTg3NTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonZIwCis8VTM2RUY+IDxVMzZFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ObrzAKKzxVMzkwMT4gPFUzOTAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46SBMAorPFUzRUYwPiA8VTNFRjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPju7AwCis8VTQwMEU+IDxVNDAwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SAjjAKKzxVNDkwND4gPFU0OTA0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KSEMAorPFU0RTBGPiA8VTRFMEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuI8wCis8VTRGREI+IDxVNEZEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S/mzAKKzxVNTA2RD4gPFU1MDZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YGtMAorPFU1MTREPiA8VTUxNEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhY05NDAxCis8VTUxOTU+IDxVNTE5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WGlTI2OQorPFU1MkM5PiA8VTUyQzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPli4kxNzg0Cis8VTUyRDQ+IDxVNTJEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WLlDAKKzxVNTU5NT4gPFU1NTk1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZaVMAorPFU1QTI5PiA8VTVBMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqKkxMTgKKzxVNjExMD4gPFU2MTEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oSQMAorPFU2QzQ1PiA8VTZDNDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsYUwCis8VTZDOTQ+IDxVNkM5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aylDM1Cis8VTZFMTE+IDxVNkUxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a4kTIKKzxVNkU0RT4gPFU2RTRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rmOODkKKzxVNkZBMD4gPFU2RkEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r6gMAorPFU3NzA0PiA8VTc3MDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnIQxNAorPFU3RDdCPiA8VTdEN0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntbswCis8VTdERUM+IDxVN0RFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3rDIKKzxVN0YwNT4gPFU3RjA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57yFNzkzCis8VTgxN0M+IDxVODE3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iFvDIzNQorPFU4M0FDPiA8VTgzQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojqwwCis8VTk3NjY+IDxVOTc2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mdpjAKKzxVOUJCOD4gPFU5QkI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a64MAorPFU5RUFCPiA8VTlFQUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuqswCis8VTlFRkQ+IDxVOUVGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7vTAKKzxVM0QxMD4gPFUzRDEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47SQMAorPFU3Q0FCPiA8VTdDQUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsqswCis8VTdDQzY+IDxVN0NDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ezhjAKKzxVOTc2Mj4gPFU5NzYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z2iMTIyODUxCis8VTk3NjM+IDxVOTc2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mdozAKKzxVOUVBQT4gPFU5RUFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bqqMAorPFU5RUI1PiA8VTlFQjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpurU2OAorPFU5RUJBPiA8VTlFQkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpurowCis8VTU1QjU+IDxVNTVCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WWtTg2Cis8VTM0NjQ+IDxVMzQ2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ORpDAKKzxVMzgzQT4gPFUzODNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46C6MAorPFU0MDY3PiA8VTQwNjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgacwCis8VTQ1QTI+IDxVNDVBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SWojAKKzxVNjNDRj4gPFU2M0NGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+PNjM2NworPFU3Nzg0PiA8VTc3ODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnoQ2OTEKKzxVN0RFMj4gPFU3REUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57eiMAorPFU4MkQ3PiA8VTgyRDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi5cxNjI3Cis8VTlDNTk+IDxVOUM1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxmTAKKzxVOUQ5Mz4gPFU5RDkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6baTMAorPFU5RTRCPiA8VTlFNEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuYswCis8VTM5OUQ+IDxVMzk5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OmnTAKKzxVNDE3QT4gPFU0MTdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IW6MAorPFU2NzZBPiA8VTY3NkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnaoxMworPFU2REZDPiA8VTZERkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmt7w0MworPFU2RTNBPiA8VTZFM0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuLo5MTQKKzxVNzcwNz4gPFU3NzA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55yHNworPFU3OUQyPiA8VTc5RDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnp5IyNjE0Cis8VTdBRDc+IDxVN0FENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+erlzAKKzxVN0JDRT4gPFU3QkNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56+OMAorPFU3REYyPiA8VTdERjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnt7I2Cis8VTdGMDg+IDxVN0YwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e8iDE0OAorPFU4NUQwPiA8VTg1RDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPol5AxNTUKKzxVOTA4OD4gPFU5MDg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKIMjIKKzxVNTk5OT4gPFU1OTk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aaZNjE2OAorPFU1RTk5PiA8VTVFOTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlupkyNTM2Cis8VTVFQkY+IDxVNUVCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W6vzAKKzxVNUVERj4gPFU1RURGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bufNQorPFU3Mzg1PiA8VTczODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjoUwCis8VTdFNDY+IDxVN0U0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5hjI5Cis8VTdGMkE+IDxVN0YyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e8qjI2OQorPFU0RTVDPiA8VTRFNUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuZw2MQorPFU1NDAwPiA8VTU0MDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkIAwCis8VTU0QTk+IDxVNTRBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WSqTgzCis8VTU0RjY+IDxVNTRGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WTtjAKKzxVNUI2RD4gPFU1QjZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a2tMAorPFUzNDlEPiA8VTM0OUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkp0wCis8VTQwN0U+IDxVNDA3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SBvjAKKzxVNDIzQz4gPFU0MjNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ii8MAorPFU0NjBBPiA8VTQ2MEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmIowCis8VTRBNEY+IDxVNEE0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SpjzAKKzxVNUU2RD4gPFU1RTZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bmtMAorPFU2MUYxPiA8VTYxRjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmh7EwCis8VTY0MjM+IDxVNjQyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aQozEKKzxVNkFENz4gPFU2QUQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5quXMAorPFU2RUM1PiA8VTZFQzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmu4U0OAorPFU3MDBFPiA8VTcwMEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngI4wCis8VTcwNkQ+IDxVNzA2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eBrTY0MTUKKzxVNzBENT4gPFU3MEQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54OVMAorPFU3OTIzPiA8VTc5MjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpKMwCis8VTdCRkU+IDxVN0JGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+evvjk1Cis8VTg1MTE+IDxVODUxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iUkTEwNjUKKzxVODU4RT4gPFU4NThFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JaOMAorPFU4ODFCPiA8VTg4MUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooJswCis8VTg4NEE+IDxVODg0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ihijAKKzxVODk5NT4gPFU4OTk1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KaVMAorPFU5NDU2PiA8VTk0NTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkZYwCis8VTlDNzQ+IDxVOUM3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxtDAKKzxVOUQxMz4gPFU5RDEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bSTMAorPFUzN0U5PiA8VTM3RTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjn6kwCis8VTM3RUQ+IDxVMzdFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OfrTAKKzxVMzhBRj4gPFUzOEFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46KvMAorPFU0MDU1PiA8VTQwNTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgZUwCis8VTQwQTU+IDxVNDBBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SCpTAKKzxVNDBDOT4gPFU0MEM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IOJMAorPFU0MkNCPiA8VTQyQ0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPki4swCis8VTQ3RTg+IDxVNDdFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SfqDAKKzxVNDg1MT4gPFU0ODUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KGRMAorPFU0ODdCPiA8VTQ4N0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkobswCis8VTRBQjg+IDxVNEFCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SquDAKKzxVNEM4ND4gPFU0Qzg0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LKEMAorPFU1OUM0PiA8VTU5QzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlp4QwCis8VTVDQjc+IDxVNUNCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WytzMyCis8VTVEMEY+IDxVNUQwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W0jzAKKzxVNUZERT4gPFU1RkRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b+eMAorPFU1RkRGPiA8VTVGREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv58wCis8VTYwMEI+IDxVNjAwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aAizAKKzxVNjM2QT4gPFU2MzZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o2qMAorPFU2NUZCPiA8VTY1RkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPml7sxCis8VTY1RkM+IDxVNjVGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aXvDAKKzxVNjY4Qj4gPFU2NjhCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pqLMAorPFU2QzExPiA8VTZDMTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsJE1NDA2MgorPFU3MzlGPiA8VTczOUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjp84Cis8VTczQzk+IDxVNzNDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ePiTMKKzxVNzQxOD4gPFU3NDE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55CYMAorPFU3NDQ5PiA8VTc0NDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkYkwCis8VTc1RkI+IDxVNzVGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eXuzAKKzxVNzZGRj4gPFU3NkZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55u/MAorPFU3ODA3PiA8VTc4MDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoIcwCis8VTc4ODg+IDxVNzg4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eiiDAKKzxVN0RDRD4gPFU3RENEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57eNMAorPFU3REUxPiA8VTdERTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnt6EwCis8VTdGMTc+IDxVN0YxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e8lzIKKzxVN0Y2MD4gPFU3RjYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj572gMAorPFU4MkUwPiA8VTgyRTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi6AwCis8VThDRUY+IDxVOENFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+izrzAKKzxVOTIzMT4gPFU5MjMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YixMAorPFU5MzA5PiA8VTkzMDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjIkwCis8VTkzNzI+IDxVOTM3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mNsjAKKzxVOTVCQT4gPFU5NUJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Za6MAorPFUzN0I2PiA8VTM3QjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnrYwCis8VTM5Nzg+IDxVMzk3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OluDAKKzxVM0EwOT4gPFUzQTA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46iJMAorPFU0ODQ1PiA8VTQ4NDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoYUwCis8VTUwRjY+IDxVNTBGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WDtjAKKzxVNTFCQT4gPFU1MUJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ya6MAorPFU1MjIxPiA8VTUyMjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliKEwCis8VTUyQzQ+IDxVNTJDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WLhDAKKzxVNjBBRj4gPFU2MEFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oKvNzMzCis8VTYxMEQ+IDxVNjEwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aEjTMKKzxVNjE1Qz4gPFU2MTVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oWcMAorPFU2MUFCPiA8VTYxQUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhqsyCis8VTYyQkY+IDxVNjJCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aKvzQ5NworPFU2NTQzPiA8VTY1NDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlYMwCis8VTY1NEY+IDxVNjU0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aVjzUxOTAKKzxVNkNFRj4gPFU2Q0VGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rOvMTQxCis8VTZFNjM+IDxVNkU2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a5ozEKKzxVNkY2Mz4gPFU2RjYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r2jMAorPFU3NkJGPiA8VTc2QkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmr8xMzIKKzxVN0IyMj4gPFU3QjIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56yiMAorPFU5NTk0PiA8VTk1OTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplpQwCis8VTk1OTY+IDxVOTU5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mWljAKKzxVOTVBOT4gPFU5NUE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZapMAorPFU5NUY1PiA8VTk1RjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl7U0NQorPFU5NUZEPiA8VTk1RkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl70xODMKKzxVOUMzNT4gPFU5QzM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bC1MAorPFU5Q0Q4PiA8VTlDRDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPps5gxCis8VTM3NjA+IDxVMzc2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OdoDAKKzxVNDExOT4gPFU0MTE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ISZMAorPFU0MUE4PiA8VTQxQTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhqgwCis8VTQxQTk+IDxVNDFBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SGqTAKKzxVNDI4NT4gPFU0Mjg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IqFMAorPFU0QUU0PiA8VTRBRTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkq6QwCis8VTRGNzI+IDxVNEY3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S9sjAKKzxVNTFBNT4gPFU1MUE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YalOTkxCis8VTU0MEQ+IDxVNTQwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WQjTU4MjYyCis8VTVBQzc+IDxVNUFDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WrhzAKKzxVNjYwRT4gPFU2NjBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5piOODU0MjIKKzxVNjY5RD4gPFU2NjlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pqdMjIKKzxVNjcxOT4gPFU2NzE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pyZMAorPFU2OUEwPiA8VTY5QTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpqAwCis8VTZEM0E+IDxVNkQzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a0ujAKKzxVNkU5Rj4gPFU2RTlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqfMjEKKzxVNzE5MD4gPFU3MTkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54aQMAorPFU3MzNEPiA8VTczM0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjL0wCis8VTc3MDA+IDxVNzcwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ecgDEKKzxVNzc5MT4gPFU3NzkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj556RMTQ0Cis8VTgzMTc+IDxVODMxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iMlzk4NQorPFU4NEMyPiA8VTg0QzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPok4IyNgorPFU4NzlGPiA8VTg3OUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonp8xMAorPFU4OUFEPiA8VTg5QUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopq0wCis8VThBN0E+IDxVOEE3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ipujAKKzxVOTEwRD4gPFU5MTBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YSNMAorPFU5Mjk4PiA8VTkyOTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpipgxCis8VTk0RUQ+IDxVOTRFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mTrTE2MjQKKzxVOUNGND4gPFU5Q0Y0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bO0MTUKKzxVOUUyMz4gPFU5RTIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bijMzI2MQorPFUzN0YwPiA8VTM3RjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjn7AwCis8VTNBRTU+IDxVM0FFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OrpTAKKzxVNTFENT4gPFU1MUQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YeVMAorPFU1OUYzPiA8VTU5RjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlp7MwCis8VTYxNEY+IDxVNjE0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aFjzAKKzxVNzczMz4gPFU3NzMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55yzMAorPFU5MTY5PiA8VTkxNjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphakxMTEKKzxVNDQ4Qz4gPFU0NDhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JKMMAorPFU1NDdEPiA8VTU0N0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkb00MjQwNAorPFU1NTEyPiA8VTU1MTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllJIwCis8VThCMkM+IDxVOEIyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+isrDUzCis8VThDMkM+IDxVOEMyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwrDExMDIKKzxVNjQ3OD4gPFU2NDc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pG4NzgyMQorPFU0MEZBPiA8VTQwRkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkg7owCis8VTQyNTE+IDxVNDI1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SJkTAKKzxVNEJFMj4gPFU0QkUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K+iMAorPFU1Mjk4PiA8VTUyOTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlipgwCis8VTU2QTQ+IDxVNTZBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WapDAKKzxVNTZBOT4gPFU1NkE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZqpMAorPFU1NkIwPiA8VTU2QjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmrAwCis8VTVBRUI+IDxVNUFFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WrqzI5Cis8VTY0Njk+IDxVNjQ2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aRqTQwNjQKKzxVNjQ3OT4gPFU2NDc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pG5Mjg1Cis8VTZBMjE+IDxVNkEyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aooTE1NDQyCis8VTZBNDU+IDxVNkE0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aphTAKKzxVNzEyMT4gPFU3MTIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54ShMTU4MworPFU3OEU4PiA8VTc4RTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPno6gyODgxCis8VTdDRTI+IDxVN0NFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ezojIKKzxVODE5Qz4gPFU4MTlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IacOTY4Cis8VTg1RTY+IDxVODVFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iXpjAKKzxVODYxMT4gPFU4NjExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JiRMjIxCis8VThCMjg+IDxVOEIyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+isqDAKKzxVOEMxRj4gPFU4QzFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LCfMzM0Cis8VTk5NDM+IDxVOTk0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mlgzAKKzxVOTk1RD4gPFU5OTVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aWdMAorPFU5OThEPiA8VTk5OEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppo0yNzYKKzxVOUFDRD4gPFU5QUNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6auNMAorPFU5QjU0PiA8VTlCNTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprZQzNzMxCis8VTlFQkQ+IDxVOUVCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6vTExMDQ2Cis8VTRBNEI+IDxVNEE0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SpizAKKzxVNjFFMT4gPFU2MUUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oehMAorPFU2MkI5PiA8VTYyQjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmirkyMDE4Cis8VTYyQkE+IDxVNjJCQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aKujAKKzxVM0M0ND4gPFUzQzQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47GEMAorPFUzQzczPiA8VTNDNzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsbMwCis8VTNERUM+IDxVM0RFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O3rDAKKzxVM0RGNT4gPFUzREY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47e1MAorPFUzRTZFPiA8VTNFNkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjua4wCis8VTQwN0M+IDxVNDA3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SBvDAKKzxVNDA3Rj4gPFU0MDdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IG/MAorPFU0M0RFPiA8VTQzREU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkj54wCis8VTQ0QUM+IDxVNDRBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SSrDAKKzxVNDYwMz4gPFU0NjAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JiDMAorPFU0NzA2PiA8VTQ3MDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknIYwCis8VTRCMzQ+IDxVNEIzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SstDAKKzxVNEJBQz4gPFU0QkFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K6sMAorPFU0QzQ1PiA8VTRDNDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksYUwCis8VTRDRUU+IDxVNENFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SzrjAKKzxVNEQzMj4gPFU0RDMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LSyMAorPFU1MkIwPiA8VTUyQjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlirAwCis8VTU1RkM+IDxVNTVGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WXvDEKKzxVNTY5Qz4gPFU1NjlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZqcMAorPFU1NzNEPiA8VTU3M0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnL0wCis8VTU4N0I+IDxVNTg3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WhuzEKKzxVNThBOD4gPFU1OEE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aKoMzI5OAorPFU1OUJBPiA8VTU5QkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlprowCis8VTVBRkM+IDxVNUFGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WrvDAKKzxVNUJERT4gPFU1QkRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a+eMjg4MworPFU1RTFFPiA8VTVFMUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluJ4wCis8VTYxNTQ+IDxVNjE1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aFlDAKKzxVNjYyOT4gPFU2NjI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pipMAorPFU2NkFGPiA8VTY2QUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmq8wCis8VTY3MkI+IDxVNjcyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+acqzU2MjYKKzxVNjdCQT4gPFU2N0JBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p66MAorPFU2QjdFPiA8VTZCN0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrb4wCis8VTZCN0Y+IDxVNkI3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+atvzEKKzxVNkI4MT4gPFU2QjgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q6BNjkKKzxVNkNBQj4gPFU2Q0FCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rKrMTMwNgorPFU2RTUwPiA8VTZFNTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuZAwCis8VTZGMjA+IDxVNkYyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a8oDMzMjUKKzxVNzIwNT4gPFU3MjA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54iFMAorPFU3MzRGPiA8VTczNEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjY8zCis8VTc2M0M+IDxVNzYzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eYvDgKKzxVNzY4Qz4gPFU3NjhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55qMMAorPFU3NzFDPiA8VTc3MUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnJwwCis8VTc3M0Q+IDxVNzczRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ecvTAKKzxVNzc5OT4gPFU3Nzk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj556ZMAorPFU3ODFFPiA8VTc4MUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoJ4wCis8VTc5MzM+IDxVNzkzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ekszAKKzxVNzlFMz4gPFU3OUUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56ejMzMKKzxVN0M5Nj4gPFU3Qzk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57KWMAorPFU3RDQ4PiA8VTdENDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntYgwCis8VTdFMzg+IDxVN0UzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e4uDAKKzxVN0U4Nj4gPFU3RTg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57qGMAorPFU4MDMxPiA8VTgwMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogLEwCis8VTgzMDk+IDxVODMwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iMiTIxNAorPFU4Mzg4PiA8VTgzODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojogwCis8VTgzQUI+IDxVODNBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iOqzkzMTYKKzxVODQyQz4gPFU4NDJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JCsMjE5Cis8VTg0RTY+IDxVODRFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iTpjUzMAorPFU4NkU4PiA8VTg2RTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPom6gwCis8VTg3RDQ+IDxVODdEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iflDIKKzxVODg0Nz4gPFU4ODQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KGHMAorPFU4OEI5PiA8VTg4Qjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoorkwCis8VTg5OUI+IDxVODk5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+immzAKKzxVOEIyOT4gPFU4QjI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KypMAorPFU4QzgzPiA8VThDODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosoMwCis8VThDOEE+IDxVOEM4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iyijQKKzxVOEM5OD4gPFU4Qzk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LKYMAorPFU5Mjg2PiA8VTkyODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpioYwCis8VTkzQ0M+IDxVOTNDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mPjDAKKzxVOTU0Nj4gPFU5NTQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZWGMworPFU5NjRDPiA8VTk2NEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmYwzMjEzCis8VTk3MjI+IDxVOTcyMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mcojAKKzxVOTc3QT4gPFU5NzdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z26MQorPFU5Nzg2PiA8VTk3ODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnoYwCis8VTlBNDA+IDxVOUE0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mpgDQKKzxVOUIxNT4gPFU5QjE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ayVMAorPFU5QjY5PiA8VTlCNjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprakwCis8VTlFRDg+IDxVOUVEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7mDEzNjY4Cis8VTlFRDk+IDxVOUVEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7mTAKKzxVNUU4NT4gPFU1RTg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bqFMAorPFU1NERFPiA8VTU0REU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlk542MQorPFUzQjRDPiA8VTNCNEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrYwwCis8VTQzRUM+IDxVNDNFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SPrDAKKzxVNDVDQj4gPFU0NUNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JeLMAorPFU0OTUwPiA8VTQ5NTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpZAwCis8VTRDNTU+IDxVNEM1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SxlTAKKzxVNEY5ND4gPFU0Rjk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L6UNgorPFU1MkJBPiA8VTUyQkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlirowCis8VTU0NjM+IDxVNTQ2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRozE4Cis8VTYwNDg+IDxVNjA0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBiDAKKzxVNjg1OT4gPFU2ODU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qGZMAorPFU2RDIwPiA8VTZEMjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtKAwCis8VTcyNUY+IDxVNzI1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eJnzU5MworPFU3NzM4PiA8VTc3Mzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnLg3ODgKKzxVODZEMT4gPFU4NkQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JuRMAorPFU4N0YxPiA8VTg3RjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPon7EwCis8VThCMDA+IDxVOEIwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+isgDM2Cis8VThDMEI+IDxVOEMwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwizQ5MDgKKzxVOTI3RT4gPFU5MjdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ym+MAorPFU5MzZBPiA8VTkzNkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjaoxCis8VTlEM0U+IDxVOUQzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m0vjAKKzxVOUVCMD4gPFU5RUIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bqwMAorPFU0MzUyPiA8VTQzNTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjZIwCis8VTY3RDA+IDxVNjdEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+afkDE2MTc1Cis8VThFMDc+IDxVOEUwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i4hzAKKzxVNjExNz4gPFU2MTE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oSXMAorPFU0QzZGPiA8VTRDNkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksa8wCis8VTU4QjI+IDxVNThCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WisjAKKzxVNkJFQT4gPFU2QkVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q+qMAorPFU2QzAxPiA8VTZDMDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsIEwCis8VTQ5NDg+IDxVNDk0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SliDAKKzxVNEVBOT4gPFU0RUE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LqpNDgzCis8VTU5QzY+IDxVNTlDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WnhjY1MzIKKzxVNUExMj4gPFU1QTEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aiSMAorPFU1Q0Q0PiA8VTVDRDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPls5QwCis8VTYyQzc+IDxVNjJDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aLhzQyNworPFU2QkNEPiA8VTZCQ0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmr40yNTYxNQorPFU3MjYxPiA8VTcyNjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniaEzMjkKKzxVNzI3Mz4gPFU3MjczPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54mzMAorPFU3NTQ2PiA8VTc1NDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlYYwCis8VTc1NTI+IDxVNzU1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eVkjAKKzxVNzU1RD4gPFU3NTVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55WdMAorPFU3NTVFPiA8VTc1NUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlZ4wCis8VTc1NkU+IDxVNzU2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eVrjAKKzxVNzgyQT4gPFU3ODJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56CqMAorPFU4MERGPiA8VTgwREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPog58wCis8VTkyNjc+IDxVOTI2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mJpzAKKzxVMzQ4Nz4gPFUzNDg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45KHMAorPFUzNzA4PiA8VTM3MDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnIgwCis8VTM4Q0U+IDxVMzhDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OjjjAKKzxVMzlDNT4gPFUzOUM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46eFMAorPFUzRjg3PiA8VTNGODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvocwCis8VTQwMzI+IDxVNDAzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SAsjAKKzxVNDJCRT4gPFU0MkJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Iq+MAorPFU0NDc1PiA8VTQ0NzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkbUwCis8VTQ5RDQ+IDxVNDlEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SnlDAKKzxVNEVFQj4gPFU0RUVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LurMgorPFU1MkRGPiA8VTUyREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPli58yMzUKKzxVNTc3Nj4gPFU1Nzc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z22MQorPFU1ODkzPiA8VTU4OTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlopMyMTAxCis8VTVFNTU+IDxVNUU1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W5lTYyMTUKKzxVNUU1OT4gPFU1RTU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bmZMAorPFU2MTU1PiA8VTYxNTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhZUzMzczCis8VTY2QUU+IDxVNjZBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aarjE1ODMKKzxVNjcyOD4gPFU2NzI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pyoMTM5MjQ3Cis8VTY5NTg+IDxVNjk1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+almDAKKzxVNkEyMj4gPFU2QTIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qiiMAorPFU2QkUzPiA8VTZCRTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmr6MwCis8VTZDOTA+IDxVNkM5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aykDM4MQorPFU3MDkxPiA8VTcwOTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngpEwCis8VTcyNjc+IDxVNzI2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eJpzE3MTUKKzxVNzJDNz4gPFU3MkM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54uHMAorPFU3NkVFPiA8VTc2RUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnm644MDU2MworPFU3NzY2PiA8VTc3NjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnaYyNzcKKzxVN0E0Nj4gPFU3QTQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56mGMjk5NgorPFU4MkRDPiA8VTgyREM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi5wzNzQKKzxVODNBRj4gPFU4M0FGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I6vMAorPFU4NjlFPiA8VTg2OUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomp4wCis8VTkyNkM+IDxVOTI2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mJrDAKKzxVOTRCQz4gPFU5NEJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZK8NQorPFU5NkVFPiA8VTk2RUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpm64wCis8VTk3MDI+IDxVOTcwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mcgjAKKzxVOTdBQT4gPFU5N0FBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z6qMAorPFU5REE5PiA8VTlEQTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptqkwCis8VTlFNUM+IDxVOUU1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m5nDQ2Cis8VTQzRTc+IDxVNDNFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SPpzAKKzxVNDZEND4gPFU0NkQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JuUMAorPFU0QUYxPiA8VTRBRjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkq7EwCis8VTU1RjE+IDxVNTVGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WXsTAKKzxVNjJDRj4gPFU2MkNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ouPMAorPFU2MkZGPiA8VTYyRkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmi78yNTc0NworPFU2MzEwPiA8VTYzMTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjJAxCis8VThBMjQ+IDxVOEEyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iopDAKKzxVOEFCRD4gPFU4QUJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Kq9MAorPFU5M0JGPiA8VTkzQkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjr8wCis8VTk1NEU+IDxVOTU0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mVjjEKKzxVNEU3OD4gPFU0RTc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Lm4MAorPFU1NEVBPiA8VTU0RUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlk6oyNTU1OAorPFU5NkVCPiA8VTk2RUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpm6swCis8VTM1RDk+IDxVMzVEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OXmTAKKzxVM0EyNT4gPFUzQTI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46ilMAorPFUzRDM4PiA8VTNEMzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtLgwCis8VTQwMTE+IDxVNDAxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SAkTAKKzxVNDE1RT4gPFU0MTVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IWeMAorPFU0MUUzPiA8VTQxRTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkh6MwCis8VTQxRjE+IDxVNDFGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SHsTAKKzxVNDIyQj4gPFU0MjJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IirMAorPFU0MzhFPiA8VTQzOEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjo4wCis8VTQ1OTM+IDxVNDU5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SWkzAKKzxVNDVBNz4gPFU0NUE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JanMAorPFU0N0RDPiA8VTQ3REM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkn5wwCis8VTRBOEY+IDxVNEE4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SqjzAKKzxVNEM3OT4gPFU0Qzc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LG5MAorPFU1NDM2PiA8VTU0MzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkLYzNgorPFU1NDUwPiA8VTU0NTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkZAxMjA0Cis8VTU5QTA+IDxVNTlBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WmoDAKKzxVNUExQz4gPFU1QTFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aicNDAwMAorPFU2MjkwPiA8VTYyOTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmipAwCis8VTYzN0E+IDxVNjM3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aNujI1MAorPFU3QjFEPiA8VTdCMUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrJ0wCis8VTdEMEQ+IDxVN0QwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e0jTU0Cis8VTdFQjM+IDxVN0VCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e6szgyNjMKKzxVODBBRD4gPFU4MEFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IKtMQorPFU4NEIzPiA8VTg0QjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokrMwCis8VTg4NzI+IDxVODg3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ihsjc0Cis8VTg4QTY+IDxVODhBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iipjAKKzxVOEEyNT4gPFU4QTI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KilMAorPFU4QzdEPiA8VThDN0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosb0wCis8VThFREM+IDxVOEVEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i7nDAKKzxVOTBBMz4gPFU5MEEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKjMjQ2NTA0Cis8VTkyMDk+IDxVOTIwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mIiTAKKzxVOTRBMD4gPFU5NEEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZKgODIKKzxVOTc3OT4gPFU5Nzc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z25MAorPFU5Qjc2PiA8VTlCNzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprbY0Cis8VTNGOEQ+IDxVM0Y4RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O+jTAKKzxVNDM3Mj4gPFU0MzcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I2yMAorPFU0NjA1PiA8VTQ2MDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmIUwCis8VTRCRUU+IDxVNEJFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SvrjAKKzxVNUI3Qj4gPFU1QjdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a27MAorPFU2NDY4PiA8VTY0Njg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkagwCis8VTcxOEI+IDxVNzE4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eGizAKKzxVNEU0Mz4gPFU0RTQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LmDNDUxMgorPFU1OTc2PiA8VTU5NzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpbY3NTE1Cis8VTU5QjM+IDxVNTlCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WmszQyMQorPFU1QjJEPiA8VTVCMkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrK0wCis8VTVFRkM+IDxVNUVGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W7vDAKKzxVNkMxNj4gPFU2QzE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rCWMjAKKzxVNkMxRD4gPFU2QzFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rCdMAorPFU3NTkzPiA8VTc1OTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlpMwCis8VTgyN0Y+IDxVODI3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iJvzIKKzxVOEZGQT4gPFU4RkZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L+6MAorPFU5MUUyPiA8VTkxRTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPph6IwCis8VTNCODg+IDxVM0I4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OuiDAKKzxVM0I4Rj4gPFUzQjhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj466PMAorPFUzQ0ExPiA8VTNDQTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsqEwCis8VTUwMzc+IDxVNTAzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAtzEKKzxVNTk0OD4gPFU1OTQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aWIMzM1OQorPFU2N0YwPiA8VTY3RjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmn7AzCis8VTZFM0Y+IDxVNkUzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a4vzAKKzxVODAxMD4gPFU4MDEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ICQMzg3MAorPFU4NDE4PiA8VTg0MTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokJgzCis8VTg3OUE+IDxVODc5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iemjAKKzxVODkyNj4gPFU4OTI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KSmMAorPFU5MzNDPiA8VTkzM0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjLwwCis8VTlGMTA+IDxVOUYxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m8kDIxNworPFU1NkUxPiA8VTU2RTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlm6ExMDMKKzxVMzREMz4gPFUzNEQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45OTMAorPFUzRjU2PiA8VTNGNTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvZYwCis8VTQ1MUM+IDxVNDUxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SUnDAKKzxVNDU3Qz4gPFU0NTdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JW8MAorPFU0NkMxPiA8VTQ2QzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkm4EwCis8VTREQjI+IDxVNERCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S2sjAKKzxVNEZCRD4gPFU0RkJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L69MQorPFU1MzU3PiA8VTUzNTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljZczMjMzMworPFU1NTgzPiA8VTU1ODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlloMxOTY0Cis8VTU5N0I+IDxVNTk3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WluzAKKzxVNUExQT4gPFU1QTFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aiaMAorPFU2Njk0PiA8VTY2OTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmpQwCis8VTY3OEY+IDxVNjc4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aejzAKKzxVNjdBQz4gPFU2N0FDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p6sMAorPFU2N0RGPiA8VTY3REY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmn58wCis8VTY5NjA+IDxVNjk2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aloDgzMAorPFU3NTM3PiA8VTc1Mzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlLczMzYzMAorPFU3NTU4PiA8VTc1NTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlZgwCis8VTgzQUU+IDxVODNBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iOrjAKKzxVODQzMz4gPFU4NDMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JCzMAorPFU4QUY1PiA8VThBRjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoq7UwCis8VTk2QkU+IDxVOTZCRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mavjMzMDU0Cis8VTk2RTM+IDxVOTZFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mbozM1OQorPFUzQUYxPiA8VTNBRjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjq7EwCis8VTQwNkE+IDxVNDA2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SBqjAKKzxVNDIxMj4gPFU0MjEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IiSMAorPFU0NTMzPiA8VTQ1MzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklLMwCis8VTYyMDE+IDxVNjIwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aIgTAKKzxVNjNDNz4gPFU2M0M3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+HMAorPFU2RTczPiA8VTZFNzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmubMwCis8VTgxNjk+IDxVODE2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iFqTE1Cis8VTg3N0I+IDxVODc3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iduzAKKzxVOEQ2Nz4gPFU4RDY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LWnNTgKKzxVNUE3Qj4gPFU1QTdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5am7MAorPFU0RTZBPiA8VTRFNkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuaowCis8VTU2QTI+IDxVNTZBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WaojAKKzxVNTZDQT4gPFU1NkNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZuKMTAyNQorPFU1NkQ0PiA8VTU2RDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlm5QzMDkKKzxVNDA4Nz4gPFU0MDg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IKHMAorPFU2MUI5PiA8VTYxQjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhrkwCis8VTZCMUM+IDxVNkIxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+asnDAKKzxVOTk2Mj4gPFU5OTYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aWiMAorPFU5OTk1PiA8VTk5OTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpppU4Cis8VTNEOUU+IDxVM0Q5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O2njAKKzxVNjUyRT4gPFU2NTJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pSuMzcKKzxVNjZFOT4gPFU2NkU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pupMTUKKzxVNzA2Mj4gPFU3MDYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54GiMAorPFUzNDg0PiA8VTM0ODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkoQwCis8VTUxM0U+IDxVNTEzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WEvjAKKzxVOUY0OT4gPFU5RjQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b2JMAorPFU1Q0YxPiA8VTVDRjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPls7EwCis8VTM3QUE+IDxVMzdBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OeqjAKKzxVM0U4MD4gPFUzRTgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47qAMAorPFU0MEU5PiA8VTQwRTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkg6kwCis8VTQxMjk+IDxVNDEyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SEqTAKKzxVNDQ0Qj4gPFU0NDRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JGLMAorPFU0NkREPiA8VTQ2REQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkm50wCis8VTRBRjg+IDxVNEFGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SruDAKKzxVNEQwMz4gPFU0RDAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LSDMAorPFU1NDc2PiA8VTU0NzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkbY2NgorPFU1OTEyPiA8VTU5MTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpJIwCis8VTVEQTk+IDxVNURBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W2qTAKKzxVNURDRT4gPFU1RENFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5beOMAorPFU2MDEzPiA8VTYwMTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgJMwCis8VTYzMjA+IDxVNjMyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aMoDc0NworPFU2NDkzPiA8VTY0OTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkpM3Cis8VTY4NjE+IDxVNjg2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ahoTcKKzxVNkE0OD4gPFU2QTQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qmIMAorPFU3MzMxPiA8VTczMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjLE4Cis8VTczNzY+IDxVNzM3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eNtjAKKzxVNzM3Rj4gPFU3MzdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj542/MAorPFU3ODQ3PiA8VTc4NDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoYcwCis8VTdFNzc+IDxVN0U3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5tzAKKzxVODZGMj4gPFU4NkYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JuyMQorPFU4N0VGPiA8VTg3RUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPon68wCis8VThBNDk+IDxVOEE0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ipiTAKKzxVOEI0QT4gPFU4QjRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K2KMAorPFU5NDAzPiA8VTk0MDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkIMwCis8VTk0RDk+IDxVOTREOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mTmTE3Cis8VTlBRDA+IDxVOUFEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mrkDAKKzxVMzQ0RT4gPFUzNDRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45GOMAorPFUzNkY0PiA8VTM2RjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjm7QwCis8VTNFODE+IDxVM0U4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O6gTAKKzxVNDcwMD4gPFU0NzAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JyAMAorPFU0NzI3PiA8VTQ3Mjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknKcwCis8VTUzMTg+IDxVNTMxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WMmDAKKzxVNTdCND4gPFU1N0I0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z60MworPFU1ODE2PiA8VTU4MTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloJYwCis8VTVBRDA+IDxVNUFEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WrkDAKKzxVNjA3Qz4gPFU2MDdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oG8MzA4MAorPFU2MEE5PiA8VTYwQTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgqkwCis8VTYwRjE+IDxVNjBGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aDsTM1Cis8VTc0NTk+IDxVNzQ1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eRmTE0NgorPFU3OEFGPiA8VTc4QUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoq8wCis8VTgxMTE+IDxVODExMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iEkTE3MjM3Cis8VTgxMzM+IDxVODEzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iEszAKKzxVODE2Nj4gPFU4MTY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IWmMTQ1Cis8VTZERDY+IDxVNkRENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3ljExNAorPFU5NTk5PiA8VTk1OTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplpkwCis8VTk1Rjk+IDxVOTVGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mXuTgyOTkKKzxVOUIyNz4gPFU5QjI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aynNDIKKzxVNDNBQT4gPFU0M0FBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I6qMAorPFU0QjQ2PiA8VTRCNDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrYYwCis8VThCQjc+IDxVOEJCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iutzk3NgorPFU1NDYyPiA8VTU0NjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkaI0NTg0NAorPFUzRjBGPiA8VTNGMEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvI8wCis8VTRDOEU+IDxVNEM4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SyjjAKKzxVODEyRT4gPFU4MTJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ISuMAorPFU4MTQ3PiA8VTgxNDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohYcwCis8VTk5MTI+IDxVOTkxMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mkkjEKKzxVOTk4MT4gPFU5OTgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aaBMTI3Cis8VTlCQkU+IDxVOUJCRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+muvjAKKzxVOUJEOD4gPFU5QkQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a+YMAorPFUzNDNCPiA8VTM0M0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkLswCis8VTM1NkY+IDxVMzU2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OVrzAKKzxVMzU4Rj4gPFUzNThGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45aPMAorPFUzNjI4PiA8VTM2Mjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmKgwCis8VTNBMDU+IDxVM0EwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OohTAKKzxVNDg3RT4gPFU0ODdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KG+MAorPFU0Q0Q2PiA8VTRDRDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPks5YwCis8VTUxNjc+IDxVNTE2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WFpzM3NworPFU1MTg1PiA8VTUxODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhoU0OTc3OQorPFU5RUMxPiA8VTlFQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpu4EwCis8VTM3MUI+IDxVMzcxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OcmzAKKzxVM0JDRT4gPFUzQkNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46+OMAorPFUzREE3PiA8VTNEQTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtqcwCis8VTVBRTk+IDxVNUFFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WrqTE0NDQKKzxVNUFGMD4gPFU1QUYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5auwMAorPFU2MDQxPiA8VTYwNDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgYE0NTcKKzxVM0QzMD4gPFUzRDMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47SwMAorPFU0M0ZCPiA8VTQzRkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkj7swCis8VTUxMUM+IDxVNTExQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WEnDAKKzxVODBGRD4gPFU4MEZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IO9MTYxMDQ1Cis8VTg1QjQ+IDxVODVCND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iWtDAKKzxVM0M4Qz4gPFUzQzhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47KMMAorPFU2RkQ4PiA8VTZGRDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv5gwCis8VTM1NzY+IDxVMzU3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OVtjAKKzxVNTVFRj4gPFU1NUVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZevMzk4OQorPFU1OUFFPiA8VTU5QUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpq4xNjAxCis8VTM3QkU+IDxVMzdCRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OevjAKKzxVM0E5Mj4gPFUzQTkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46qSMAorPFUzRTc4PiA8VTNFNzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjubgwCis8VTQ2MjY+IDxVNDYyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SYpjAKKzxVNDYzRD4gPFU0NjNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ji9MAorPFU0NkNGPiA8VTQ2Q0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkm48wCis8VTQ3NUE+IDxVNDc1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SdmjAKKzxVNTAyQT4gPFU1MDJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YCqNDY1Cis8VTU3NkQ+IDxVNTc2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WdrTAKKzxVNTdGRj4gPFU1N0ZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z+/MAorPFU1QTU3PiA8VTVBNTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqZcwCis8VTVDM0M+IDxVNUMzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WwvDEyMDg3Cis8VTVDNTQ+IDxVNUM1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WxlDAKKzxVNjAyOT4gPFU2MDI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oCpODgKKzxVNkNFNT4gPFU2Q0U1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rOlNDkwMgorPFU2REUzPiA8VTZERTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmt6MwCis8VTcyQ0I+IDxVNzJDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eLizAKKzxVNzJEND4gPFU3MkQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54uUMAorPFU3MzBBPiA8VTczMEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjIo4Cis8VTc5REM+IDxVNzlEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ennDAKKzxVN0M3RT4gPFU3QzdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57G+MAorPFU4MUUxPiA8VTgxRTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoh6EwCis8VTg2QUQ+IDxVODZBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iarTAKKzxVODczQT4gPFU4NzNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Jy6MQorPFU4OUVDPiA8VTg5RUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPop6wwCis8VThDOEU+IDxVOEM4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iyjjAKKzxVOEREQz4gPFU4RERDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LecMAorPFU4RjE3PiA8VThGMTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovJcwCis8VTkwRjM+IDxVOTBGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mDszAKKzxVOTIyRT4gPFU5MjJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YiuMAorPFU5NENDPiA8VTk0Q0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpk4wzCis8VTk3MTM+IDxVOTcxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mckzMzNQorPFU5QkQzPiA8VTlCRDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpr5MwCis8VTlCRTI+IDxVOUJFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mvojAKKzxVOUNCNT4gPFU5Q0I1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bK1MworPFU5RDgyPiA8VTlEODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptoIwCis8VTlFOTE+IDxVOUU5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6kTAKKzxVOUY2Rj4gPFU5RjZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b2vMAorPFUzOEM3PiA8VTM4Qzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjo4cwCis8VTNENkI+IDxVM0Q2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O1qzAKKzxVNDU2NT4gPFU0NTY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JWlMAorPFU0OUI1PiA8VTQ5QjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkprUwCis8VTQ5Qzc+IDxVNDlDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SnhzAKKzxVNEI3Mj4gPFU0QjcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K2yMAorPFU0QzJGPiA8VTRDMkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksK8wCis8VTRGMzE+IDxVNEYzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S8sTAKKzxVNEYzMj4gPFU0RjMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LyyMgorPFU0RjYwPiA8VTRGNjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvaAzMTM1NzQKKzxVNTExNz4gPFU1MTE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YSXMAorPFU1MTFFPiA8VTUxMUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhJ4wCis8VTVCNzQ+IDxVNUI3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WttDAKKzxVNjJCMz4gPFU2MkIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oqzMAorPFU2MkRGPiA8VTYyREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmi58zMTI2Cis8VTY0RUM+IDxVNjRFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aTrDExCis8VTY1Q0U+IDxVNjVDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aXjjIwMgorPFU2N0M1PiA8VTY3QzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmn4UwCis8VTgyRTg+IDxVODJFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iLqDAKKzxVODVCRj4gPFU4NUJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ja/MAorPFU4QjdBPiA8VThCN0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorbowCis8VTkyNjg+IDxVOTI2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mJqDAKKzxVOTZBQz4gPFU5NkFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZqsMAorPFU5OTlDPiA8VTk5OUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpppwwCis8VTM4MUM+IDxVMzgxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OgnDAKKzxVMzk3RT4gPFUzOTdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46W+MAorPFUzOTkwPiA8VTM5OTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjppAwCis8VTNDQkI+IDxVM0NCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OyuzAKKzxVNDA2NT4gPFU0MDY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IGlMAorPFU0NjBDPiA8VTQ2MEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmIwwCis8VTRENTE+IDxVNEQ1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S1kTAKKzxVNEQ1Mj4gPFU0RDUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LWSMAorPFU1MzNGPiA8VTUzM0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljL82MTkKKzxVNTgwND4gPFU1ODA0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aCEMAorPFU1QURGPiA8VTVBREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlq58wCis8VTVCM0E+IDxVNUIzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WsujAKKzxVNUI2OD4gPFU1QjY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a2oMAorPFU1QzcwPiA8VTVDNzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsbAwCis8VTYwQzQ+IDxVNjBDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aDhDEKKzxVNjEzNT4gPFU2MTM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oS1MAorPFU2MTVEPiA8VTYxNUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhZ0yCis8VTY2MzU+IDxVNjYzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aYtTUzNAorPFU2NkIxPiA8VTY2QjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmrE1Cis8VTZDM0M+IDxVNkMzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+awvDAKKzxVNkVCQT4gPFU2RUJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rq6NjA4Cis8VTc1QzY+IDxVNzVDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eXhjAKKzxVNzc2OD4gPFU3NzY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj552oMTgwCis8VTdFMEM+IDxVN0UwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e4jDAKKzxVODBEMj4gPFU4MEQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IOSMAorPFU4MTdCPiA8VTgxN0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohbsxMjYwCis8VTgxQTk+IDxVODFBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iGqTcKKzxVOEZFMT4gPFU4RkUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L+hMAorPFU5MDA2PiA8VTkwMDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgIYxOTA4Cis8VTlEQ0E+IDxVOURDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m3ijAKKzxVOUU1RD4gPFU5RTVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bmdMAorPFU5RTYyPiA8VTlFNjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuaIwCis8VTYyQzg+IDxVNjJDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aLiDI5NgorPFU4NTJCPiA8VTg1MkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolKsxNDQKKzxVNDEyRD4gPFU0MTJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IStMAorPFU0MTM5PiA8VTQxMzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhLkwCis8VTRBNUU+IDxVNEE1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SpnjAKKzxVNEIyRj4gPFU0QjJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KyvMAorPFU1OUU5PiA8VTU5RTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlp6kwCis8VTVFNzQ+IDxVNUU3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W5tDE0MzMyOQorPFU3OUNBPiA8VTc5Q0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnp4owCis8VTc5RTU+IDxVNzlFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+enpTAKKzxVN0M5OD4gPFU3Qzk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57KYMTI4OAorPFU5QjhFPiA8VTlCOEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpro4wCis8VTlCRjA+IDxVOUJGMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mvsDAKKzxVOUM4Nz4gPFU5Qzg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bKHMjQKKzxVOUNCNj4gPFU5Q0I2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bK2MTkKKzxVOUVDRj4gPFU5RUNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6buPMjY2Cis8VTM2MUQ+IDxVMzYxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OYnTAKKzxVMzc4Qj4gPFUzNzhCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj456LMAorPFU0NjkzPiA8VTQ2OTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmpMwCis8VTYzN0I+IDxVNjM3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aNuzIzOQorPFU2NDlBPiA8VTY0OUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkpowCis8VTY0QjU+IDxVNjRCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aStTM1NQorPFU2NTA2PiA8VTY1MDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlIYwCis8VTZEOEE+IDxVNkQ4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a2ijAKKzxVNzhCRT4gPFU3OEJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56K+MzQ1Cis8VTdDMTA+IDxVN0MxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ewkDAKKzxVOERDOD4gPFU4REM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LeIMAorPFU4RTY4PiA8VThFNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouagwCis8VThFOEU+IDxVOEU4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6jjAKKzxVOEYyNj4gPFU4RjI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LymMAorPFU4Rjg3PiA8VThGODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovoczNworPFU4Rjk3PiA8VThGOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovpczMzAKKzxVM0NCRD4gPFUzQ0JEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47K9MAorPFU1MzQ0PiA8VTUzNDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljYQwCis8VTU1Mzg+IDxVNTUzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUuDM0Cis8VTU3REQ+IDxVNTdERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfnTEKKzxVNUVGRj4gPFU1RUZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bu/NDIzCis8VTVGRjU+IDxVNUZGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W/tTE5NjM0Cis8VTZERjA+IDxVNkRGMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3sDAKKzxVODI0Qz4gPFU4MjRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ImMMAorPFU5RjMwPiA8VTlGMzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvLAwCis8VTlGNUU+IDxVOUY1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m9njAKKzxVNUExOD4gPFU1QTE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aiYMTg5ODYKKzxVNUIyMj4gPFU1QjIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ayiMAorPFU1QjQzPiA8VTVCNDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrYMyCis8VTkxN0Y+IDxVOTE3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mFvzcxNQorPFU0NTg2PiA8VTQ1ODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkloYwCis8VTkxQjg+IDxVOTFCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mGuDAKKzxVOTFDMD4gPFU5MUMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YeAOAorPFUzNDlGPiA8VTM0OUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkp8wCis8VTM3MzU+IDxVMzczNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OctTAKKzxVMzgyMT4gPFUzODIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46ChMAorPFUzQjY0PiA8VTNCNjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjraQwCis8VTQwRjU+IDxVNDBGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SDtTAKKzxVNDQwMT4gPFU0NDAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JCBMAorPFU0NjVBPiA8VTQ2NUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmZowCis8VTQ5OEE+IDxVNDk4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SmijAKKzxVNEI4RD4gPFU0QjhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K6NMAorPFU1QUNCPiA8VTVBQ0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlq4swCis8VTVCMUQ+IDxVNUIxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WsnTAKKzxVNUIzMj4gPFU1QjMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ayyNgorPFU4MzExPiA8VTgzMTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojJE2Cis8VTg1MjY+IDxVODUyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iUpjAKKzxVODg4NT4gPFU4ODg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KKFNDczCis8VTg4Q0E+IDxVODhDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ijijMKKzxVODkyRD4gPFU4OTJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KStMAorPFU5Q0U1PiA8VTlDRTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPps6U4NworPFU5RTFGPiA8VTlFMUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuJ83OTg2Cis8VTM3OTk+IDxVMzc5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OemTAKKzxVM0NFRT4gPFUzQ0VFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47OuMAorPFU1QzNGPiA8VTVDM0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsL8xNjE0Cis8VTZDM0Q+IDxVNkMzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+awvTEwCis8VTgxMzI+IDxVODEzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iEsjEKKzxVNjBENz4gPFU2MEQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oOXMAorPFU2MzRGPiA8VTYzNEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjY8xNzUzCis8VTYzRDE+IDxVNjNEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aPkTAKKzxVOEUxNz4gPFU4RTE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LiXMAorPFU5MjIyPiA8VTkyMjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiKIwCis8VTk0NDg+IDxVOTQ0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mRiDAKKzxVMzg2QT4gPFUzODZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46GqMAorPFU4MkY2PiA8VTgyRjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi7YyCis8VTM1OTY+IDxVMzU5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OWljAKKzxVMzYzRj4gPFUzNjNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45i/MAorPFUzNjVFPiA8VTM2NUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmZ4wCis8VTM2OTQ+IDxVMzY5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OalDAKKzxVMzczOD4gPFUzNzM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45y4MAorPFUzQTc2PiA8VTNBNzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqbYwCis8VTNCODY+IDxVM0I4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OuhjAKKzxVM0QyQT4gPFUzRDJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47SqMAorPFUzRTBFPiA8VTNFMEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuI4wCis8VTQwQkM+IDxVNDBCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SCvDAKKzxVNDExMj4gPFU0MTEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ISSMAorPFU0MzFDPiA8VTQzMUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjJwwCis8VTQ3MTM+IDxVNDcxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SckzAKKzxVNEJDMD4gPFU0QkMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K+AMAorPFU0QkM1PiA8VTRCQzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkr4UwCis8VTRCRjU+IDxVNEJGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SvtTAKKzxVNTU2RT4gPFU1NTZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZWuNzkKKzxVNTVFQj4gPFU1NUVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZerMTg3Cis8VTU2NUI+IDxVNTY1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WZmzAKKzxVNTY5OT4gPFU1Njk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZqZMAorPFU1NkMxPiA8VTU2QzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlm4ExCis8VTU2RDM+IDxVNTZEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WbkzAKKzxVNTczQz4gPFU1NzNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Zy8MAorPFU1QjdDPiA8VTVCN0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrbwwCis8VTVCN0Q+IDxVNUI3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WtvTYzNQorPFU1RDcyPiA8VTVENzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltbIwCis8VTVERDU+IDxVNURENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W3lTAKKzxVNUUwNz4gPFU1RTA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5biHMAorPFU2NDQyPiA8VTY0NDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkYIwCis8VTY0REM+IDxVNjREQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aTnDAKKzxVNjU1Qz4gPFU2NTVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pWcMAorPFU2N0JGPiA8VTY3QkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnr8wCis8VTY4RkY+IDxVNjhGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ajvzAKKzxVNkFGMT4gPFU2QUYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5quxMAorPFU2RDg1PiA8VTZEODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtoU2MDQKKzxVNkU3Qz4gPFU2RTdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rm8MAorPFU3NThDPiA8VTc1OEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlowwCis8VTdCREU+IDxVN0JERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+evnjAKKzxVN0NGMT4gPFU3Q0YxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57OxMAorPFU3Q0Y1PiA8VTdDRjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPns7UwCis8VTgwNDI+IDxVODA0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iBgjM3MgorPFU4MDc2PiA8VTgwNzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogbYwCis8VTgxRUM+IDxVODFFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iHrDEyMQorPFU4MUYyPiA8VTgxRjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoh7IwCis8VTgzQ0Q+IDxVODNDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPjTAKKzxVODYxNj4gPFU4NjE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JiWNworPFU4ODI1PiA8VTg4MjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooKUwCis8VThFMDI+IDxVOEUwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i4gjAKKzxVOEU1MT4gPFU4RTUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LmRMzc4Cis8VThFQTE+IDxVOEVBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6oTUKKzxVOTI2OT4gPFU5MjY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YmpMAorPFU5MzFDPiA8VTkzMUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjJwwCis8VTkzQjM+IDxVOTNCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mOszAKKzxVOTQ3Nz4gPFU5NDc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZG3MAorPFU5NDgwPiA8VTk0ODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkoAwCis8VTk1NEE+IDxVOTU0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mVijIyCis8VTk1NEQ+IDxVOTU0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mVjTQ1Cis8VTk1RDE+IDxVOTVEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mXkTAKKzxVOTY2Nz4gPFU5NjY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZmnMgorPFU5Njg5PiA8VTk2ODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmokwCis8VTk4NzM+IDxVOTg3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mhszAKKzxVOTg5RT4gPFU5ODlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aKeOAorPFU5RjY3PiA8VTlGNjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvacwCis8VTM5MUI+IDxVMzkxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OkmzAKKzxVNDJGQj4gPFU0MkZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Iu7MAorPFU0NkJFPiA8VTQ2QkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmr4wCis8VTQ2RDg+IDxVNDZEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SbmDAKKzxVNTZEQz4gPFU1NkRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZucMAorPFU2MEE4PiA8VTYwQTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgqgxODk4MgorPFU2MkYwPiA8VTYyRjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmi7AwCis8VTM3NTU+IDxVMzc1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OdlTAKKzxVM0NCMD4gPFUzQ0IwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47KwMAorPFU0NUZGPiA8VTQ1RkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkl78wCis8VTRCNjI+IDxVNEI2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+StojAKKzxVNTFERD4gPFU1MUREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YedNDI1OAorPFU1NDlCPiA8VTU0OUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkpsxODYKKzxVNTY4MD4gPFU1NjgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZqANworPFU1QjIzPiA8VTVCMjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrKMwCis8VTVCODE+IDxVNUI4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WugTk0MTYKKzxVNUJDRD4gPFU1QkNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a+NMAorPFU1QkQ1PiA8VTVCRDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlr5UwCis8VTVCRDc+IDxVNUJENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WvlzAKKzxVNUJEQz4gPFU1QkRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a+cMAorPFU1QkU3PiA8VTVCRTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlr6c1MworPFU2MkU3PiA8VTYyRTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmi6c4NjkKKzxVNjRGMD4gPFU2NEYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pOwMgorPFU2N0UwPiA8VTY3RTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmn6AyNDUKKzxVNkFCOD4gPFU2QUI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qq4MQorPFU3MkRFPiA8VTcyREU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPni54zMjMKKzxVNzM3MD4gPFU3MzcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj542wNAorPFU3NTJGPiA8VTc1MkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlK8yCis8VTgwNEQ+IDxVODA0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iBjTEKKzxVODA3OT4gPFU4MDc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IG5MAorPFU4MkU3PiA8VTgyRTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi6cxCis8VTk0NEY+IDxVOTQ0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mRjzAKKzxVOUIyMT4gPFU5QjIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ayhMAorPFU5RTBCPiA8VTlFMEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuIswCis8VTZBNjM+IDxVNkE2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+apozAKKzxVNzdDMz4gPFU3N0MzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+DMAorPFUzOEY3PiA8VTM4Rjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjo7cwCis8VTNGRTY+IDxVM0ZFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O/pjAKKzxVNDUyRD4gPFU0NTJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JStMAorPFU0RjVFPiA8VTRGNUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvZ45NworPFU0RkFCPiA8VTRGQUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvqswCis8VTZDREU+IDxVNkNERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aznjE4OAorPFU1OTlFPiA8VTU5OUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpp42ODUKKzxVNDAxND4gPFU0MDE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ICUMAorPFU0NDlDPiA8VTQ0OUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkpwwCis8VTZDN0M+IDxVNkM3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+axvDAKKzxVNzI1Qj4gPFU3MjVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54mbMTA5MTAKKzxVM0VCMj4gPFUzRUIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47qyMAorPFU0M0Q0PiA8VTQzRDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkj5QwCis8VTVGRjg+IDxVNUZGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W/uDgxCis8VTYyNkQ+IDxVNjI2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aJrTM2ODEKKzxVNzA4ND4gPFU3MDg0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54KEMAorPFU3MkMzPiA8VTcyQzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPni4MwCis8VTdEMTA+IDxVN0QxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e0kDEzCis8VTdFQkQ+IDxVN0VCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e6vTIyNDQKKzxVOTIxNT4gPFU5MjE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YiVMgorPFU5NEFFPiA8VTk0QUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkq4xNzI3Cis8VTk3NzU+IDxVOTc3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mdtTAKKzxVNDJGND4gPFU0MkY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Iu0MAorPFU2MkQ3PiA8VTYyRDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmi5c0NjQKKzxVODZCND4gPFU4NkI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Jq0MgorPFUzREI2PiA8VTNEQjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtrYwCis8VTQwNzg+IDxVNDA3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SBuDAKKzxVNDg4OT4gPFU0ODg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KKJMAorPFU0RkFDPiA8VTRGQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvqwxNDgKKzxVNTEwMj4gPFU1MTAyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YSCMAorPFU1MTlDPiA8VTUxOUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhpwxMDE3NworPFU1NEREPiA8VTU0REQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlk500MTEKKzxVNTY2NT4gPFU1NjY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZmlNAorPFU2QTgyPiA8VTZBODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqoIwCis8VTZCMDE+IDxVNkIwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+asgTAKKzxVNkQ1Mz4gPFU2RDUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rWTMzk4MAorPFU2RkMzPiA8VTZGQzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv4MzOAorPFU3NjUxPiA8VTc2NTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmZEwCis8VTc5QUY+IDxVNzlBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+emrzAKKzxVNzlGRT4gPFU3OUZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56e+MworPFU3QTYwPiA8VTdBNjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqaAwCis8VTgxMTM+IDxVODExMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iEkzE1NgorPFU4MUJGPiA8VTgxQkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohr82Cis8VTg1N0Q+IDxVODU3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iVvTAKKzxVODk1Qj4gPFU4OTVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KWbMAorPFU4RkIyPiA8VThGQjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovrIzMworPFU4RkIzPiA8VThGQjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovrMwCis8VTkxQjI+IDxVOTFCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mGsjAKKzxVOUIxRT4gPFU5QjFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ayeMAorPFU5RjQ4PiA8VTlGNDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvYgwCis8VTRENUM+IDxVNEQ1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S1nDAKKzxVNUYwND4gPFU1RjA0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5byEMTEwNDUKKzxVMzc3OT4gPFUzNzc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj4525MAorPFU0QTMyPiA8VTRBMzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqLIwCis8VTczNzM+IDxVNzM3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eNszAKKzxVN0ZCQT4gPFU3RkJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5766MAorPFU0MTc2PiA8VTQxNzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhbYwCis8VTQ2MkI+IDxVNDYyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SYqzAKKzxVNEMyRD4gPFU0QzJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LCtMAorPFU1NTQyPiA8VTU1NDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllYIwCis8VTU1RDU+IDxVNTVENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WXlTAKKzxVNjlDOD4gPFU2OUM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qeIMAorPFU4MDI4PiA8VTgwMjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogKgxNQorPFU4QjY4PiA8VThCNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoragwCis8VThCNzM+IDxVOEI3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+itszAKKzxVOTM5Mj4gPFU5MzkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y6SMAorPFU5NDFFPiA8VTk0MUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkJ4wCis8VTM2QTI+IDxVMzZBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OaojAKKzxVNTk3ND4gPFU1OTc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aW0NTMyOAorPFU1QjY1PiA8VTVCNjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlraUxMAorPFU3QjJGPiA8VTdCMkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrK8wCis8VTgwRUM+IDxVODBFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iDrDEKKzxVODQ5OD4gPFU4NDk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JKYMAorPFU5OUQxPiA8VTk5RDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpp5EwCis8VTlBN0Q+IDxVOUE3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mpvTQyCis8VTRGMkU+IDxVNEYyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S8rjAKKzxVNTJBQT4gPFU1MkFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YqqNTc5MworPFU1RjI5PiA8VTVGMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvKkxNDYKKzxVNzgyRT4gPFU3ODJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56CuMAorPFU0ODlFPiA8VTQ4OUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkop4wCis8VTYwMTI+IDxVNjAxMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aAkjYzODYKKzxVNjQxOT4gPFU2NDE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pCZMAorPFUzQjA5PiA8VTNCMDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrIkwCis8VTQzQTE+IDxVNDNBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SOoTAKKzxVNDY0Nz4gPFU0NjQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JmHMAorPFU2MTFFPiA8VTYxMUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhJ4wCis8VTY2OTY+IDxVNjY5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aaljQ4NjcKKzxVNkUxQz4gPFU2RTFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ricMAorPFU3MTU2PiA8VTcxNTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhZYwCis8VTcxNTc+IDxVNzE1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eFlzAKKzxVOTkyQT4gPFU5OTJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aSqMAorPFU0NTg4PiA8VTQ1ODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklogwCis8VTQ1OEI+IDxVNDU4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SWizAKKzxVNEEwQj4gPFU0QTBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KiLMAorPFU3NTlGPiA8VTc1OUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlp83NgorPFU3NjI3PiA8VTc2Mjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmKcwCis8VTc4Nzg+IDxVNzg3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ehuDAKKzxVODY1MD4gPFU4NjUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JmQNzk4Cis8VThCMTQ+IDxVOEIxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+islDI4Cis8VThDMTE+IDxVOEMxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwkTIxMQorPFUzNDVBPiA8VTM0NUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkZowCis8VTM1MkU+IDxVMzUyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OUrjAKKzxVM0MxOT4gPFUzQzE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47CZMAorPFU1MEE5PiA8VTUwQTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgqk3NQorPFU1MTNBPiA8VTUxM0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhLowCis8VTYzMkE+IDxVNjMyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aMqjE1NTIKKzxVNjM3Qz4gPFU2MzdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o28MAorPFU2ODlCPiA8VTY4OUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmopswCis8VTkwQ0Q+IDxVOTBDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mDjTAKKzxVMzZDMj4gPFUzNkMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45uCMAorPFUzODQ1PiA8VTM4NDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoYUwCis8VTZBNjA+IDxVNkE2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+apoDAKKzxVNzgwOD4gPFU3ODA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56CIMAorPFUzNDIxPiA8VTM0MjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkKEwCis8VTQ2QTU+IDxVNDZBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SapTAKKzxVNTU4Rj4gPFU1NThGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZaPMzkzCis8VTYxRTY+IDxVNjFFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aHpjU2NgorPFU2MUU3PiA8VTYxRTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmh6cwCis8VTYzM0M+IDxVNjMzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aMvDEKKzxVNjNCRj4gPFU2M0JGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o6/MAorPFU2NDI2PiA8VTY0MjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkKYxOQorPFU2NDNCPiA8VTY0M0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkLswCis8VTY5OTI+IDxVNjk5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+amkjAKKzxVN0EyQz4gPFU3QTJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56isMAorPFU3QTY0PiA8VTdBNjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqaQwCis8VTdDRDE+IDxVN0NEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ezkTAKKzxVN0NFNT4gPFU3Q0U1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57OlMAorPFU3Q0VGPiA8VTdDRUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPns683MAorPFU4QUZFPiA8VThBRkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoq741MQorPFU4QkZBPiA8VThCRkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor7o4Mjg2Cis8VThFNDM+IDxVOEU0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i5gzAKKzxVOTAzRD4gPFU5MDNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YC9MAorPFU5MzY5PiA8VTkzNjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjakwCis8VTk1MTg+IDxVOTUxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mUmDEKKzxVNTk3Mz4gPFU1OTczPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aWzODE2MDcKKzxVN0M3OT4gPFU3Qzc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57G5MAorPFU5MUY5PiA8VTkxRjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPph7kwCis8VTk0OTU+IDxVOTQ5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mSlTEyCis8VTNENTY+IDxVM0Q1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O1ljAKKzxVNDVBMT4gPFU0NUExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JahMAorPFU0NjEwPiA8VTQ2MTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmJAwCis8VTQ2QkM+IDxVNDZCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SavDAKKzxVNEQ4QT4gPFU0RDhBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LaKMAorPFU2MDY3PiA8VTYwNjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgac2Cis8VTY3MTI+IDxVNjcxMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ackjAKKzxVODg0Mj4gPFU4ODQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KGCMAorPFU4ODQ0PiA8VTg4NDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooYQxCis8VTU1OTQ+IDxVNTU5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WWlDExNDYKKzxVNTY2Mj4gPFU1NjYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZmiMTgwNworPFU1NEU2PiA8VTU0RTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlk6YyMDAwCis8VTUzNDA+IDxVNTM0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WNgDE5OQorPFU1NDU1PiA8VTU0NTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkZU4MDEKKzxVNTYxND4gPFU1NjE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZiUMgorPFU1ODc4PiA8VTU4Nzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlobgwCis8VTYxNkE+IDxVNjE2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aFqjAKKzxVNkFEOT4gPFU2QUQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5quZMAorPFU2QjI3PiA8VTZCMjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrKc2Mzg0Cis8VTZCNTA+IDxVNkI1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+atkDY2Cis8VTZCQjQ+IDxVNkJCND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+autDMzMAorPFU2QkM2PiA8VTZCQzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmr4Y0Cis8VTZDQTQ+IDxVNkNBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aypDI0Cis8VTZGMUE+IDxVNkYxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a8mjAKKzxVNzFCMD4gPFU3MUIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54awMAorPFU3NEVGPiA8VTc0RUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnk680MgorPFU3NTBDPiA8VTc1MEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlIwwCis8VTgxOTI+IDxVODE5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iGkjAKKzxVODRGMj4gPFU4NEYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JOyMAorPFU4QjMzPiA8VThCMzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorLMwCis8VThCQjQ+IDxVOEJCND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iutDQyCis8VTlEMEU+IDxVOUQwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m0jjAKKzxVOURENz4gPFU5REQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6beXOAorPFU5RTI1PiA8VTlFMjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuKU3MjcKKzxVMzQ5Nj4gPFUzNDk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45KWMAorPFUzRjM0PiA8VTNGMzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvLQwCis8VTQ2ODY+IDxVNDY4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SahjAKKzxVNEJEQT4gPFU0QkRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K+aMAorPFU1MDc2PiA8VTUwNzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgbY2NjQ2Cis8VTU0MTg+IDxVNTQxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WQmDEKKzxVNkU2MT4gPFU2RTYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rmhMAorPFU4MDI2PiA8VTgwMjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogKYxMjAKKzxVODE2Mj4gPFU4MTYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IWiMAorPFU4NTQ1PiA8VTg1NDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolYUwCis8VTg1RDU+IDxVODVENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iXlTE4OQorPFUzNkNGPiA8VTM2Q0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjm48wCis8VTQzMDI+IDxVNDMwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SMgjAKKzxVNDMxND4gPFU0MzE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IyUMAorPFU2MDA0PiA8VTYwMDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgIQ5MAorPFU1NTZBPiA8VTU1NkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllaoxNDg2Cis8VTU5OTE+IDxVNTk5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WmkTAKKzxVNzY4NT4gPFU3Njg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55qFMAorPFU4MjI1PiA8VTgyMjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiKUwCis8VTg0Njk+IDxVODQ2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iRqTI4Cis8VTg2ODY+IDxVODY4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iahjAKKzxVOERCND4gPFU4REI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6La0MTIwMgorPFU0QkYyPiA8VTRCRjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkr7IwCis8VTREOTU+IDxVNEQ5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S2lTAKKzxVNjNCMT4gPFU2M0IxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o6xMAorPFU2RjU2PiA8VTZGNTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvZYwCis8VTcyMkM+IDxVNzIyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eIrDUxMTMKKzxVNzQzNj4gPFU3NDM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55C2MjI5Cis8VTdCNjI+IDxVN0I2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+etojQKKzxVOERDMT4gPFU4REMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LeBMAorPFU1RTBBPiA8VTVFMEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluIowCis8VTVFMTU+IDxVNUUxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W4lTI2MjYKKzxVNjAxNT4gPFU2MDE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oCVMjQ2NzAKKzxVODg5OT4gPFU4ODk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KKZMAorPFU2MkNEPiA8VTYyQ0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmi404MDcwCis8VTNEN0E+IDxVM0Q3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O1ujAKKzxVNEZGMz4gPFU0RkYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L+zMzkKKzxVNUY5OD4gPFU1Rjk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b6YNjg1Cis8VTYzOTI+IDxVNjM5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aOkjEzMDAwCis8VTY4RDE+IDxVNjhEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ajkTAKKzxVNzI0Qz4gPFU3MjRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54mMNjMxNQorPFU3MzA1PiA8VTczMDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjIUwCis8VTdCRkE+IDxVN0JGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+evujAKKzxVN0MzMD4gPFU3QzMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57CwMAorPFU3QzMyPiA8VTdDMzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsLIwCis8VThGMkI+IDxVOEYyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i8qzAKKzxVNEZENj4gPFU0RkQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L+WMAorPFUzQjVCPiA8VTNCNUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrZswCis8VTQ1QjA+IDxVNDVCMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SWsDAKKzxVNkM1Nj4gPFU2QzU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rGWMAorPFU2RDNFPiA8VTZEM0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtL4xMzMxOQorPFU2RTQzPiA8VTZFNDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuYMyODgKKzxVODQ4RT4gPFU4NDhFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JKOMQorPFU5MzgzPiA8VTkzODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjoMwCis8VTY1MDA+IDxVNjUwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aUgDEwODcKKzxVNkY1OD4gPFU2RjU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r2YMTk4MgorPFU3NzA1PiA8VTc3MDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnIUwCis8VTc4MTk+IDxVNzgxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+egmTAKKzxVNDBEMT4gPFU0MEQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IORMAorPFU0MEYyPiA8VTQwRjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkg7IwCis8VTQyMzI+IDxVNDIzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SIsjAKKzxVNEMwOT4gPFU0QzA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LCJMAorPFU0QzE0PiA8VTRDMTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksJQwCis8VTRFMkM+IDxVNEUyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S4rDEKKzxVNUFCQj4gPFU1QUJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aq7MAorPFU1RTRCPiA8VTVFNEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluYswCis8VTY0MkI+IDxVNjQyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aQqzAKKzxVNjlDMz4gPFU2OUMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qeDODAKKzxVNzAwQT4gPFU3MDBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54CKMAorPFU3MjNGPiA8VTcyM0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniL80NgorPFU3NkQ4PiA8VTc2RDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnm5gxMTczNgorPFU3NkU0PiA8VTc2RTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnm6Q3NworPFU3OEQwPiA8VTc4RDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPno5AyOTcKKzxVNzhGQj4gPFU3OEZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56O7MAorPFU3RTBGPiA8VTdFMEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuI8yCis8VTg0QjA+IDxVODRCMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iSsDAKKzxVODdFMD4gPFU4N0UwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J+gMjAzCis8VThERDg+IDxVOEREOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i3mDEKKzxVOEUyQj4gPFU4RTJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LirMTAKKzxVOEU1Mj4gPFU4RTUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LmSMjQyCis8VTkzOUM+IDxVOTM5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mOnDAKKzxVOTdCNj4gPFU5N0I2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z62MAorPFU1NzYyPiA8VTU3NjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnaIwCis8VTU5NjQ+IDxVNTk2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WlpDAKKzxVM0NFQT4gPFUzQ0VBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47OqMAorPFU1MUI4PiA8VTUxQjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhrgwCis8VTUyMjQ+IDxVNTIyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WIpDEyMDA2Cis8VTUzREI+IDxVNTNEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPmzIxODAKKzxVNjJEQT4gPFU2MkRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ouaNDg0Cis8VTZDOUM+IDxVNkM5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aynDAKKzxVNkNFRT4gPFU2Q0VFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rOuMTEKKzxVNkVCRj4gPFU2RUJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rq/MAorPFU3MDhEPiA8VTcwOEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngo0wCis8VTcyNDk+IDxVNzI0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eJiTAKKzxVNzU1ND4gPFU3NTU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55WUNzYxCis8VTc2RkM+IDxVNzZGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ebvDIxNzgKKzxVODhBMj4gPFU4OEEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KKiNAorPFU4OTdCPiA8VTg5N0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopbsxNgorPFU4QTRBPiA8VThBNEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqYowCis8VTkyRUM+IDxVOTJFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mLrDAKKzxVOTQ3Qj4gPFU5NDdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZG7MAorPFU5ODA0PiA8VTk4MDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoIQwCis8VTk4MTY+IDxVOTgxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mgljAKKzxVNEU1Mz4gPFU0RTUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LmTMjkxCis8VTZDOTc+IDxVNkM5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aylzAKKzxVNkVDMj4gPFU2RUMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ruCNjgKKzxVODBFRT4gPFU4MEVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IOuMAorPFU4MTk2PiA8VTgxOTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohpYwCis8VTM5MzY+IDxVMzkzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OktjAKKzxVMzk2Qz4gPFUzOTZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46WsMAorPFUzQUM0PiA8VTNBQzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjq4QwCis8VTQxNkQ+IDxVNDE2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SFrTAKKzxVNEEyNj4gPFU0QTI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KimMAorPFU0QkJFPiA8VTRCQkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrr4wCis8VTUzOTA+IDxVNTM5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WOkDAKKzxVNTM5Nj4gPFU1Mzk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y6WMzIKKzxVNUFDRT4gPFU1QUNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5auOMAorPFU1RTlFPiA8VTVFOUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlup4yMjYyCis8VTVGQUM+IDxVNUZBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W+rDYKKzxVNjVDMT4gPFU2NUMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5peBMTI1NzgKKzxVN0JFMz4gPFU3QkUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56+jMAorPFU4MjNEPiA8VTgyM0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiL0wCis8VTg3ODM+IDxVODc4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iegzIzMQorPFU5MDA0PiA8VTkwMDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgIQ2Cis8VTk2RjE+IDxVOTZGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mbsTAKKzxVOTczNj4gPFU5NzM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Zy2MAorPFU5QTJGPiA8VTlBMkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqK8wCis8VTlGOEU+IDxVOUY4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m+jjAKKzxVOUY5MD4gPFU5RjkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b6QMjMKKzxVNDQ4RD4gPFU0NDhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JKNMAorPFU1NUQ5PiA8VTU1RDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPll5kwCis8VTgwMkE+IDxVODAyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iAqjUKKzxVODlBQj4gPFU4OUFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KarMAorPFUzNzBBPiA8VTM3MEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnIowCis8VTcwOTA+IDxVNzA5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eCkDAKKzxVODBBOD4gPFU4MEE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IKoMAorPFU4MEQ2PiA8VTgwRDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPog5YzNDM3Cis8VTYyOUI+IDxVNjI5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aKmzI3ODEKKzxVNjJDQj4gPFU2MkNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ouLNzgKKzxVODEyQz4gPFU4MTJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ISsMgorPFUzNkJGPiA8VTM2QkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmr8wCis8VTQ2Q0M+IDxVNDZDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SbjDAKKzxVNEE1RD4gPFU0QTVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KmdMAorPFU1MzBGPiA8VTUzMEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljI8zCis8VTU0ODY+IDxVNTQ4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WShjI3MQorPFU1Nzg5PiA8VTU3ODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnokwCis8VTVFOTY+IDxVNUU5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W6ljUyCis8VTcwQjA+IDxVNzBCMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eCsDAKKzxVNzIyRT4gPFU3MjJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54iuMAorPFU3MkNEPiA8VTcyQ0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPni40xMworPFU3NERGPiA8VTc0REY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnk58wCis8VTg4OEQ+IDxVODg4RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iijTE3MTAKKzxVOEVGMz4gPFU4RUYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LuzMAorPFU5Nzg0PiA8VTk3ODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnoQwCis8VTlFODU+IDxVOUU4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6hTAKKzxVOEREMT4gPFU4REQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LeRMTc0MzEKKzxVMzYxMD4gPFUzNjEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45iQMAorPFUzQkUxPiA8VTNCRTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjr6EwCis8VTREOEM+IDxVNEQ4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S2jDAKKzxVNTk0NT4gPFU1OTQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aWFMAorPFU2Q0UxPiA8VTZDRTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPms6EzNTM3Cis8VTcwQUU+IDxVNzBBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eCrjQ3NTUKKzxVNzVCMT4gPFU3NUIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55axMjcKKzxVNzZCMD4gPFU3NkIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55qwMAorPFU3ODMyPiA8VTc4MzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoLIyCis8VTc5MUY+IDxVNzkxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eknzAKKzxVNzkyRT4gPFU3OTJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56SuMAorPFU5NzY0PiA8VTk3NjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnaQwCis8VTlBRjE+IDxVOUFGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mrsTAKKzxVOUVBRD4gPFU5RUFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bqtMAorPFU1NDc4PiA8VTU0Nzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkbgzNjgKKzxVNTdCQT4gPFU1N0JBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z66MAorPFU1OTlBPiA8VTU5OUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlppowCis8VTVBMUQ+IDxVNUExRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WonTAKKzxVNUNBRj4gPFU1Q0FGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bKvMAorPFU2N0Y4PiA8VTY3Rjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmn7gwCis8VTgwQTc+IDxVODBBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iCpzAKKzxVODBEQT4gPFU4MERBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IOaMjUwCis8VTg4NDM+IDxVODg0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ihgzAKKzxVOTE4NT4gPFU5MTg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YaFNAorPFUzN0REPiA8VTM3REQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjn50wCis8VTQ4RDk+IDxVNDhEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SjmTAKKzxVNEFCOT4gPFU0QUI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Kq5MAorPFU0QUUwPiA8VTRBRTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkq6AwCis8VTRDQjk+IDxVNENCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SyuTAKKzxVNTdGOT4gPFU1N0Y5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z+5MzM0NgorPFU2QkYwPiA8VTZCRjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmr7AwCis8VTg4RjQ+IDxVODhGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ijtDU2MgorPFU4OEY1PiA8VTg4RjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo7UwCis8VThDRTA+IDxVOENFMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+izoDcKKzxVOEQ1ND4gPFU4RDU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LWUMTgwOAorPFU5NTJCPiA8VTk1MkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplKsxCis8VTk2MkI+IDxVOTYyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mYqzAKKzxVOTY2QT4gPFU5NjZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZmqNjAxMQorPFU5NjZCPiA8VTk2NkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmaswCis8VTY2MjI+IDxVNjYyMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aYojAKKzxVNzQyMz4gPFU3NDIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55CjMAorPFUzOTA0PiA8VTM5MDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpIQwCis8VTM5RTk+IDxVMzlFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OnqTAKKzxVM0FGMj4gPFUzQUYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46uyMAorPFUzQ0M4PiA8VTNDQzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjs4gwCis8VTQyODM+IDxVNDI4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SKgzAKKzxVNEYwMj4gPFU0RjAyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LyCMAorPFU0RjY5PiA8VTRGNjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvakzNDc0Cis8VTU5RjU+IDxVNTlGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WntTAKKzxVNUUxND4gPFU1RTE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5biUMTAKKzxVNjVCRT4gPFU2NUJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pa+MAorPFU2NUM2PiA8VTY1QzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPml4Y0Cis8VTZDOUI+IDxVNkM5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aymzM1NworPFU2RDdGPiA8VTZEN0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtb8wCis8VTczRUU+IDxVNzNFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ePrjI2OAorPFU4MkREPiA8VTgyREQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi50wCis8VThGNjE+IDxVOEY2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i9oTAKKzxVOEY5ND4gPFU4Rjk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L6UMzcKKzxVOTE0RD4gPFU5MTREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YWNMTA2MDcKKzxVOTcwOD4gPFU5NzA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZyIMTEKKzxVOTlCNz4gPFU5OUI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aa3MAorPFU1NUFGPiA8VTU1QUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllq8wCis8VTU1Qjc+IDxVNTVCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WWtzIyMjcKKzxVNTY3ND4gPFU1Njc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Zm0MjUKKzxVNkI1NT4gPFU2QjU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q2VMAorPFU2RTUzPiA8VTZFNTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuZMxCis8VTc0RUI+IDxVNzRFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eTqzAKKzxVNzZDNj4gPFU3NkM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55uGMjY1MQorPFU4NDUwPiA8VTg0NTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokZAwCis8VTU0NjA+IDxVNTQ2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRoDAKKzxVN0ZDOT4gPFU3RkM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57+JMAorPFU3RkY4PiA8VTdGRjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnv7gwCis8VTRFQUY+IDxVNEVBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6rzAKKzxVNTMwOT4gPFU1MzA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YyJMAorPFU1NjJEPiA8VTU2MkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmK0xNzEKKzxVNjAyNj4gPFU2MDI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oCmMzQ4Cis8VTYwNzI+IDxVNjA3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBsjAKKzxVNjJBOD4gPFU2MkE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oqoMzIyCis8VTY4ODg+IDxVNjg4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aiiDAKKzxVNkYzMD4gPFU2RjMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rywMAorPFU2RjhFPiA8VTZGOEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvo40NzAKKzxVNzBGOT4gPFU3MEY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54O5MzAxCis8VTc4MzA+IDxVNzgzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+egsDY1NQorPFU3ODUxPiA8VTc4NTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoZEwCis8VTc4REU+IDxVNzhERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ejnjAKKzxVOEVFRj4gPFU4RUVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LuvMAorPFU5NTlCPiA8VTk1OUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplpsyCis8VTk5Q0Q+IDxVOTlDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mnjTAKKzxVMzZEND4gPFUzNkQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45uUMAorPFUzOTRBPiA8VTM5NEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpYowCis8VTQxMTg+IDxVNDExOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SEmDAKKzxVNDg2Qj4gPFU0ODZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KGrMAorPFU0QzAzPiA8VTRDMDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksIMwCis8VTREMzY+IDxVNEQzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S0tjAKKzxVNTAxNz4gPFU1MDE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YCXMAorPFU1MEIwPiA8VTUwQjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgrAwCis8VTU3QzQ+IDxVNTdDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfhDAKKzxVNTg1Qz4gPFU1ODVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aGcMAorPFU1ODczPiA8VTU4NzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlobMwCis8VTVGNkQ+IDxVNUY2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W9rTE3MDkKKzxVNjE4OT4gPFU2MTg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oaJMAorPFU2NzBCPiA8VTY3MEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnIsxNzk2MAorPFU2OERBPiA8VTY4REE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmo5oxMzQ3Cis8VTY5MTY+IDxVNjkxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+akljAKKzxVNkEyNT4gPFU2QTI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qilMAorPFU2RERDPiA8VTZEREM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmt5w0Cis8VTc1RUQ+IDxVNzVFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eXrTAKKzxVNzg3Qz4gPFU3ODdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56G8MzMKKzxVN0ExRD4gPFU3QTFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56idMAorPFU3QUZDPiA8VTdBRkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnq7wwCis8VTdCRjc+IDxVN0JGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+evtzEwNTkKKzxVN0U4ND4gPFU3RTg0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57qEMAorPFU4MUE4PiA8VTgxQTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohqg4NzMKKzxVODI4Mz4gPFU4MjgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IqDMworPFU4NEVDPiA8VTg0RUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPok6wxOTUxCis8VTg3REE+IDxVODdEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ifmjAKKzxVODdEQj4gPFU4N0RCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J+bMQorPFU4RjIzPiA8VThGMjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovKMwCis8VTkzMEI+IDxVOTMwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mMizAKKzxVOTQ1RD4gPFU5NDVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZGdMAorPFU5N0Y4PiA8VTk3Rjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpn7gwCis8VTk3RkM+IDxVOTdGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mfvDAKKzxVOUFGQz4gPFU5QUZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6au8MAorPFU5QjA1PiA8VTlCMDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprIUzCis8VTlCMTQ+IDxVOUIxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mslDAKKzxVOUQ2Qz4gPFU5RDZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bWsMTk1Cis8VTlFNEY+IDxVOUU0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m5jzI3NjMKKzxVNjM2Nz4gPFU2MzY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o2nMjM0OQorPFU2RENFPiA8VTZEQ0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmt44wCis8VTc2OEY+IDxVNzY4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eajzAKKzxVM0YxRT4gPFUzRjFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47yeMAorPFU2M0JEPiA8VTYzQkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjr0wCis8VTY5MkE+IDxVNjkyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+akqjAKKzxVNzhCMD4gPFU3OEIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56KwNzAwMworPFU0RTE1PiA8VTRFMTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuJU1NQorPFU0RjNFPiA8VTRGM0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvL4wCis8VTUyODg+IDxVNTI4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WKiDk2NQorPFU1MzM5PiA8VTUzMzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljLkyMjc1Cis8VTU2N0M+IDxVNTY3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WZvDI4MgorPFU1NzZGPiA8VTU3NkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlna8xNTMKKzxVNjAwQz4gPFU2MDBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oCMMAorPFU2MDM2PiA8VTYwMzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgLYwCis8VTYxQjU+IDxVNjFCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aGtTAKKzxVNjI3OT4gPFU2Mjc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5om5MTEyMzIKKzxVNjJBQj4gPFU2MkFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oqrMjU5NAorPFU2MkI3PiA8VTYyQjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmircwCis8VTY1Qzc+IDxVNjVDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aXhzAKKzxVNzA4Qj4gPFU3MDhCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54KLMAorPFU3MkM5PiA8VTcyQzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPni4kwCis8VTcyRDM+IDxVNzJEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eLkzAKKzxVNzgxMj4gPFU3ODEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56CSNzAKKzxVNzhDNz4gPFU3OEM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56OHMAorPFU3OTE1PiA8VTc5MTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpJUwCis8VTc5REI+IDxVNzlEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+enmzAKKzxVNzlFMD4gPFU3OUUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56egMAorPFU3RDE1PiA8VTdEMTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntJUwCis8VTdGQ0Q+IDxVN0ZDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e/jTAKKzxVODAxQT4gPFU4MDFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ICaMAorPFU4MkU0PiA8VTgyRTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi6QxCis8VThDN0U+IDxVOEM3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ixvjAKKzxVOTBCMz4gPFU5MEIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKzOQorPFU5MUZEPiA8VTkxRkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPph70wCis8VTkyMzk+IDxVOTIzOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mIuTAKKzxVOTI1Rj4gPFU5MjVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YmfMAorPFU5Mjk0PiA8VTkyOTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpipQwCis8VTk0Q0Q+IDxVOTRDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mTjTUKKzxVOTczOT4gPFU5NzM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Zy5MjMzCis8VTk5RDM+IDxVOTlEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mnkzAKKzxVOUFFQz4gPFU5QUVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ausMAorPFU5RDA0PiA8VTlEMDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptIQwCis8VTM1MjU+IDxVMzUyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OUpTAKKzxVM0JDNT4gPFUzQkM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46+FMAorPFU1NTY0PiA8VTU1NjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllaQxNzI3Cis8VTU4QzA+IDxVNThDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WjgDAKKzxVNjc4Nz4gPFU2Nzg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p6HMzUKKzxVNkJENz4gPFU2QkQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q+XMTU2Cis8VTZCRDg+IDxVNkJEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+avmDMKKzxVNkJERT4gPFU2QkRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q+eMAorPFU3MTM3PiA8VTcxMzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhLcwCis8VTcyQTQ+IDxVNzJBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eKpDAKKzxVNzNBRD4gPFU3M0FEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj546tMAorPFU3NDM1PiA8VTc0MzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkLUyNDgKKzxVNzVCMj4gPFU3NUIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55ayMzEwOAorPFU3NkFFPiA8VTc2QUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmq4xNTQ3NQorPFU3QjEzPiA8VTdCMTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrJMwCis8VTdGNzQ+IDxVN0Y3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9tDE1Cis8VTgwQjY+IDxVODBCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iCtjAKKzxVODEzRT4gPFU4MTNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IS+MTY0MQorPFU4MTU3PiA8VTgxNTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohZcwCis8VTgxOEQ+IDxVODE4RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iGjTEKKzxVODY4RD4gPFU4NjhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JqNNQorPFU4NkJEPiA8VTg2QkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomr0wCis8VTg3MzE+IDxVODczMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+icsTMKKzxVODdCNz4gPFU4N0I3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J63MAorPFU4ODJGPiA8VTg4MkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooK8wCis8VThDN0M+IDxVOEM3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ixvDAKKzxVOEM5ND4gPFU4Qzk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LKUOAorPFU5MEVCPiA8VTkwRUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg6syCis8VTkyMUE+IDxVOTIxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mImjAKKzxVOTMwRD4gPFU5MzBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YyNMAorPFU5NjMwPiA8VTk2MzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmLAwCis8VTk2NzQ+IDxVOTY3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mZtDEKKzxVOTZBNj4gPFU5NkE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZqmMAorPFU5QjdFPiA8VTlCN0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprb4wCis8VTlGMTk+IDxVOUYxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m8mTE5Cis8VTNBM0Q+IDxVM0EzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OovTAKKzxVNDNEOD4gPFU0M0Q4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I+YMAorPFU0NkIwPiA8VTQ2QjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmrAwCis8VTQ2Qjk+IDxVNDZCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SauTAKKzxVNDkwRj4gPFU0OTBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KSPMAorPFU0QUNDPiA8VTRBQ0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkq4wwCis8VTRDMjY+IDxVNEMyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SwpjAKKzxVNEVGMz4gPFU0RUYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LuzMworPFU1NjdEPiA8VTU2N0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmb0wCis8VTU2QUQ+IDxVNTZBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WarTAKKzxVNTcyRT4gPFU1NzJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZyuMTgKKzxVNUQyNT4gPFU1RDI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bSlMAorPFU1RTgwPiA8VTVFODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluoAxCis8VTc1OEI+IDxVNzU4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eWizUKKzxVNzVERT4gPFU3NURFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55eeNzQ0Cis8VTc2NTY+IDxVNzY1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eZljI5OQorPFU4MTM0PiA8VTgxMzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohLQwCis8VTgyQzk+IDxVODJDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iLiTAKKzxVOEFDMD4gPFU4QUMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KuAMAorPFUzRkQ5PiA8VTNGRDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjv5kwCis8VTQ0NDA+IDxVNDQ0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SRgDAKKzxVNDQ0ND4gPFU0NDQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JGEMAorPFU0ODE4PiA8VTQ4MTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoJgwCis8VTQ4NUY+IDxVNDg1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ShnzAKKzxVNDkyOD4gPFU0OTI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KSoMAorPFU0RDE5PiA8VTREMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktJkwCis8VTUwRkI+IDxVNTBGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WDuzg1MgorPFU1NjhBPiA8VTU2OEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmoowCis8VTVBQjI+IDxVNUFCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WqsjEwOAorPFU1QUQzPiA8VTVBRDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlq5MwCis8VTVDNDE+IDxVNUM0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WxgTM1NDQKKzxVNjNDQT4gPFU2M0NBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+KMAorPFU2REUwPiA8VTZERTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmt6A0Cis8VTZFMTI+IDxVNkUxMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a4kjAKKzxVNkY0RT4gPFU2RjRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r2OMAorPFU2RkJDPiA8VTZGQkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvrwwCis8VTc1MTM+IDxVNzUxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eUkzEKKzxVNzc2ND4gPFU3NzY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj552kMQorPFU3NzY1PiA8VTc3NjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnaUzOQorPFU3OTE0PiA8VTc5MTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpJQwCis8VThCNkM+IDxVOEI2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+itrDkzNAorPFU5QUYyPiA8VTlBRjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpq7IwCis8VTlERkY+IDxVOURGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m3vzAKKzxVOUUwQT4gPFU5RTBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6biKMgorPFU1MDRGPiA8VTUwNEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgY83MTM5Cis8VTU2RTg+IDxVNTZFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WbqDAKKzxVNUFBNT4gPFU1QUE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aqlMAorPFU3MjhGPiA8VTcyOEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnio8wCis8VTdCQzc+IDxVN0JDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+evhzU4MTU1Cis8VTdGRTk+IDxVN0ZFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e/qTg4NgorPFU4Q0I1PiA8VThDQjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosrUwCis8VTk4Mjg+IDxVOTgyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mgqDAKKzxVMzZGOT4gPFUzNkY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45u5MAorPFUzRjEwPiA8VTNGMTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvJAwCis8VTRCODE+IDxVNEI4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SugTAKKzxVNjk2OT4gPFU2OTY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qWpMAorPFU4MEZDPiA8VTgwRkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPog7wxOQorPFU4MTQxPiA8VTgxNDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohYEwCis8VThBREE+IDxVOEFEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+irmjAKKzxVOEFERT4gPFU4QURFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KueMAorPFU4QzFEPiA8VThDMUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosJ04Cis8VThDQzY+IDxVOENDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+izhjAKKzxVOEU0MT4gPFU4RTQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LmBMjIKKzxVOTlFMj4gPFU5OUUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aeiMAorPFU5QTA4PiA8VTlBMDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqIgwCis8VTlBODg+IDxVOUE4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mqiDE5Cis8VTlBQkY+IDxVOUFCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mqvzAKKzxVODk5MT4gPFU4OTkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KaRMAorPFUzNEYyPiA8VTM0RjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjk7IwCis8VTNFMjQ+IDxVM0UyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O4pDAKKzxVNDNEMj4gPFU0M0QyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I+SMAorPFU3MjQ3PiA8VTcyNDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniYcyNzU4NQorPFU5QTE3PiA8VTlBMTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqJcwCis8VTlBMTk+IDxVOUExOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+momTE1Cis8VTlBOTc+IDxVOUE5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mqlzQ5MjAKKzxVNTI3RD4gPFU1MjdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ym9MTU1Cis8VTU2MEM+IDxVNTYwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WYjDY0Cis8VTYxNTM+IDxVNjE1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aFkzEKKzxVNjVEQT4gPFU2NURBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5peaMAorPFU2RjAyPiA8VTZGMDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvII0MDUzCis8VTdFMzk+IDxVN0UzOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e4uTMKKzxVN0YyNT4gPFU3RjI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57ylMTQ5Cis8VTdGRjI+IDxVN0ZGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e/sjAKKzxVODVCOD4gPFU4NUI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ja4MAorPFU4N0I1PiA8VTg3QjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonrUwCis8VTk4QzM+IDxVOThDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mjgzAKKzxVOThDND4gPFU5OEM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aOENDQKKzxVOThEOD4gPFU5OEQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aOYNzA5NworPFU5QjUyPiA8VTlCNTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprZIwCis8VTNGM0M+IDxVM0YzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O8vDAKKzxVNDU2Rj4gPFU0NTZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JWvMAorPFU0RDI5PiA8VTREMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktKkwCis8VTVBRDY+IDxVNUFENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WrljMzMAorPFU2NzM0PiA8VTY3MzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnLQxNjM5Cis8VTc0RTI+IDxVNzRFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eTojM0NgorPFU3QUMyPiA8VTdBQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnq4IwCis8VTk1REQ+IDxVOTVERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mXnTAKKzxVM0E2MD4gPFUzQTYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46mgMAorPFUzRDcxPiA8VTNENzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtbEwCis8VTNFN0U+IDxVM0U3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O5vjAKKzxVNkI4RD4gPFU2QjhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q6NMjIKKzxVNzJBNT4gPFU3MkE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54qlMAorPFU3NkFCPiA8VTc2QUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmqswCis8VTc3OUY+IDxVNzc5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eenzUzNworPFU5MUE1PiA8VTkxQTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphqUwCis8VTNCMTM+IDxVM0IxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OskzAKKzxVM0U5Mz4gPFUzRTkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47qTMAorPFU0M0M3PiA8VTQzQzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkj4cwCis8VTUyRTE+IDxVNTJFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WLoTAKKzxVNUY2Rj4gPFU1RjZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b2vMAorPFU3OTY4PiA8VTc5Njg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpag3MDIyCis8VTdCRkI+IDxVN0JGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+evuzAKKzxVOTg2MD4gPFU5ODYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aGgMAorPFU2NDg2PiA8VTY0ODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkoYwCis8VTY0ODc+IDxVNjQ4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aShzEwMzcKKzxVNjZCQz4gPFU2NkJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pq8MAorPFU2QzE1PiA8VTZDMTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsJUwCis8VTc3QTU+IDxVNzdBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eepTkzNworPFU0OTU1PiA8VTQ5NTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpZUwCis8VTRFM0Y+IDxVNEUzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S4vzEKKzxVOTQwNT4gPFU5NDA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZCFMAorPFU1OUQ4PiA8VTU5RDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlp5g1OQorPFU2MkZDPiA8VTYyRkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmi7wzMjIxCis8VTZEODQ+IDxVNkQ4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a2hDAKKzxVNzkxNz4gPFU3OTE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56SXMAorPFUzQzBCPiA8VTNDMEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsIswCis8VTU2QUM+IDxVNTZBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WarDAKKzxVNUEyNj4gPFU1QTI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aimMAorPFU1QUQ0PiA8VTVBRDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlq5QxMTIKKzxVNUIyQT4gPFU1QjJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ayqMAorPFU4NUIyPiA8VTg1QjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolrIwCis8VTg2MEI+IDxVODYwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iYizgKKzxVOENBNz4gPFU4Q0E3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LKnMTAKKzxVOEQyQj4gPFU4RDJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LSrMjkwMQorPFU5ODNCPiA8VTk4M0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoLszNAorPFU5ODcwPiA8VTk4NzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpobAxCis8VTk4OTE+IDxVOTg5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mikTI3NTgKKzxVOThBNj4gPFU5OEE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aKmOTkKKzxVNTRDMT4gPFU1NEMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZOBMTkzMDEKKzxVNjk4MD4gPFU2OTgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qaAMAorPFU0MDNCPiA8VTQwM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgLswCis8VTY3Mjk+IDxVNjcyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+acqTAKKzxVNzI1RD4gPFU3MjVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54mdNzUKKzxVODA1OD4gPFU4MDU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IGYNzI0Cis8VTRFNTI+IDxVNEU1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S5kjMwNAorPFU0RkRDPiA8VTRGREM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkv5wxCis8VTVBMDk+IDxVNUEwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WoiTU4Cis8VTcxMjk+IDxVNzEyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eEqTAKKzxVNzgyRj4gPFU3ODJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56CvMAorPFU4MDYwPiA8VTgwNjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogaAwCis8VTg5QUU+IDxVODlBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+imrjAKKzxVOTgyOT4gPFU5ODI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aCpMAorPFUzRUI4PiA8VTNFQjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjurgwCis8VTNFQzI+IDxVM0VDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O7gjAKKzxVNDM0OD4gPFU0MzQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I2IMAorPFU0RDg0PiA8VTREODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktoQwCis8VTUxRUQ+IDxVNTFFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WHrTQzNzQKKzxVNTFGND4gPFU1MUY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ye0MAorPFU1NDZGPiA8VTU0NkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlka83Cis8VTU3NkE+IDxVNTc2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+Wdqjg2NAorPFU1QzRGPiA8VTVDNEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsY8yNTE3Cis8VTVDNUI+IDxVNUM1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WxmzAKKzxVNUUyMT4gPFU1RTIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bihMAorPFU1RTMyPiA8VTVFMzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluLIwCis8VTVFNDg+IDxVNUU0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W5iDAKKzxVNUU3Mz4gPFU1RTczPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bmzNTE2NjYKKzxVNjE3Rj4gPFU2MTdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oW/MAorPFU2MTkxPiA8VTYxOTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhpEyNQorPFU2N0IwPiA8VTY3QjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnrAxMAorPFU2Q0Q5PiA8VTZDRDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPms5kwCis8VTcwQkU+IDxVNzBCRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eCvjAKKzxVNzNCNj4gPFU3M0I2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5462MQorPFU3NEY2PiA8VTc0RjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnk7Y1ODA5Cis8VTc1MDE+IDxVNzUwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eUgTAKKzxVNzUzOT4gPFU3NTM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55S5MAorPFU3QUVFPiA8VTdBRUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnq64wCis8VTdCQjM+IDxVN0JCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+euszAKKzxVN0MwOD4gPFU3QzA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57CIMAorPFU3RjNFPiA8VTdGM0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvL4wCis8VTgwRDM+IDxVODBEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iDkzAKKzxVODI3NT4gPFU4Mjc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Im1MAorPFU4MkY5PiA8VTgyRjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi7kyMjE4Cis8VTgzNTM+IDxVODM1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iNkzAKKzxVODQwRD4gPFU4NDBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JCNMTE5MworPFU4NEYxPiA8VTg0RjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPok7EwCis8VTg2QjI+IDxVODZCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iasjAKKzxVODZFMj4gPFU4NkUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JuiMAorPFU4QTU1PiA8VThBNTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqZU3NAorPFU4QkM0PiA8VThCQzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor4Q5NDgzCis8VThFRkY+IDxVOEVGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i7vzAKKzxVOEYyNz4gPFU4RjI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LynMAorPFU5MEYxPiA8VTkwRjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg7EwCis8VTlCODM+IDxVOUI4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mugzAKKzxVOUM4Nj4gPFU5Qzg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bKGMQorPFU1NzYxPiA8VTU3NjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnaEyNzIwCis8VTZDRkM+IDxVNkNGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+azvDE5MjQKKzxVNkU4Qz4gPFU2RThDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqMMAorPFU2RjUxPiA8VTZGNTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvZE3Cis8VTc2Nzk+IDxVNzY3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eZuTEKKzxVOTI1NT4gPFU5MjU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YmVMAorPFU5M0ZBPiA8VTkzRkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpj7owCis8VTk0OEI+IDxVOTQ4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mSizMKKzxVOTRCNz4gPFU5NEI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZK3MworPFU5ODg3PiA8VTk4ODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpooczMDAzCis8VTNBMDc+IDxVM0EwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OohzAKKzxVM0MzND4gPFUzQzM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47C0MAorPFU1NjE5PiA8VTU2MTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmJkwCis8VTVBNDY+IDxVNUE0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+Wphjk0NjgKKzxVNkFDNz4gPFU2QUM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5quHMAorPFU3NkE0PiA8VTc2QTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmqQxNQorPFU4NTIyPiA8VTg1MjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolKIwCis8VTkxMzE+IDxVOTEzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mEsTE4Cis8VTUzRjU+IDxVNTNGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPtTEwNQorPFU1QzAwPiA8VTVDMDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsIAwCis8VTdCMzg+IDxVN0IzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+esuDE4Cis8VTk4MTc+IDxVOTgxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mglzE3Cis8VTM2RDg+IDxVMzZEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ObmDAKKzxVNDEzOD4gPFU0MTM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IS4MAorPFU0MzhBPiA8VTQzOEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjoowCis8VTQ3OUY+IDxVNDc5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SenzAKKzxVNDhFQT4gPFU0OEVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KOqMAorPFU0OEVFPiA8VTQ4RUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPko64wCis8VTRBMzA+IDxVNEEzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SosDAKKzxVNEE5Nj4gPFU0QTk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KqWMAorPFU0QkQ5PiA8VTRCRDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkr5kwCis8VTVDQjY+IDxVNUNCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WytjEKKzxVNUVGOT4gPFU1RUY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bu5MAorPFU2RDI2PiA8VTZEMjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtKYwCis8VTcwODc+IDxVNzA4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eChzAKKzxVNzBERT4gPFU3MERFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54OeMAorPFU3M0MwPiA8VTczQzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnj4A0NjMKKzxVNzgzND4gPFU3ODM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56C0MTY1NzkKKzxVNzgzNj4gPFU3ODM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56C2MAorPFU3Qzk1PiA8VTdDOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnspU0OQorPFU4NEFBPiA8VTg0QUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokqowCis8VThGRUI+IDxVOEZFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i/qzU1NzIKKzxVOUI0ND4gPFU5QjQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a2EMTEzMworPFU1MjU2PiA8VTUyNTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliZY4MzQKKzxVNTQyNT4gPFU1NDI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZClOQorPFUzOUY1PiA8VTM5RjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjp7UwCis8VTYyOTQ+IDxVNjI5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aKlDMKKzxVNjI5OT4gPFU2Mjk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oqZMAorPFU2MzRBPiA8VTYzNEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjYowCis8VTYzOEE+IDxVNjM4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aOijgKKzxVODhEMj4gPFU4OEQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KOSMgorPFUzNTdCPiA8VTM1N0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlbswCis8VTU0ODU+IDxVNTQ4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WShTAKKzxVNTRFMz4gPFU1NEUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZOjMQorPFU1QTQ0PiA8VTVBNDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqYQwCis8VTVFQ0Q+IDxVNUVDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W7jTAKKzxVNzI4Mz4gPFU3MjgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54qDMAorPFU0RUM2PiA8VTRFQzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPku4YxNTU3Cis8VTUwRDU+IDxVNTBENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WDlTgKKzxVNTY1Nz4gPFU1NjU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZmXNDkwCis8VTYyNTE+IDxVNjI1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aJkTQzNTQKKzxVNjJBQT4gPFU2MkFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oqqMAorPFU2NEIyPiA8VTY0QjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkrI4Cis8VTY0Qzg+IDxVNjRDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aTiDAKKzxVNjUzND4gPFU2NTM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pS0MAorPFU2NTM1PiA8VTY1MzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlLUyCis8VTY3RTg+IDxVNjdFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+afqDAKKzxVNkY3RD4gPFU2RjdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r29MAorPFU3NUUxPiA8VTc1RTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnl6EwCis8VTc3QTg+IDxVNzdBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eeqDAKKzxVODIxNz4gPFU4MjE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IiXMAorPFU5MkVBPiA8VTkyRUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpi6oyOAorPFU5NEZBPiA8VTk0RkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpk7o0MDMyCis8VTk2NjA+IDxVOTY2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mZoDAKKzxVMzQ5Mj4gPFUzNDkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45KSMAorPFUzQkY3PiA8VTNCRjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjr7cwCis8VTNDQUI+IDxVM0NBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OyqzAKKzxVM0VBQT4gPFUzRUFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47qqMAorPFU0MjJDPiA8VTQyMkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiKwwCis8VTQyM0I+IDxVNDIzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SIuzAKKzxVNDQ1MT4gPFU0NDUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JGRMAorPFU0NTE1PiA8VTQ1MTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklJUwCis8VTQ1RjE+IDxVNDVGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SXsTAKKzxVNDlFND4gPFU0OUU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KekMAorPFU0RDA2PiA8VTREMDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktIYwCis8VTUzMEQ+IDxVNTMwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WMjTExNgorPFU1NzI0PiA8VTU3MjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnKQwCis8VTU4QTM+IDxVNThBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WiozAKKzxVNkEzOD4gPFU2QTM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qi4NworPFU2QThGPiA8VTZBOEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqo8wCis8VTZGRUU+IDxVNkZFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a/rjI2Cis8VTc0OUU+IDxVNzQ5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eSnjc1Cis8VTdBNTk+IDxVN0E1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+epmTAKKzxVN0I4MT4gPFU3QjgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj566BMAorPFU3RTgwPiA8VTdFODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuoAwCis8VTgzRDA+IDxVODNEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPkDAKKzxVODNFOT4gPFU4M0U5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I+pMTEyMworPFU4NDYxPiA8VTg0NjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokaExNTI1Cis8VTg0QjE+IDxVODRCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iSsTAKKzxVODRCMj4gPFU4NEIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JKyNTU1Cis8VTg5NDY+IDxVODk0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ilhjAKKzxVODk2NT4gPFU4OTY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KWlMAorPFU4RjUwPiA8VThGNTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovZAwCis8VTkxN0E+IDxVOTE3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mFujEKKzxVOTNGNz4gPFU5M0Y3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+3MAorPFU5NTY0PiA8VTk1NjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplaQxCis8VTNFNTI+IDxVM0U1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O5kjAKKzxVNEM5NT4gPFU0Qzk1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LKVMAorPFU1NzAzPiA8VTU3MDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnIMxMzEKKzxVNTcxMT4gPFU1NzExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZyRMAorPFU2NjZFPiA8VTY2NkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmma4xMDg2MAorPFU2NjlDPiA8VTY2OUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmpwwCis8VTZENjY+IDxVNkQ2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a1pjE1MTgKKzxVNkVBNT4gPFU2RUE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqlNzEKKzxVNzBGMz4gPFU3MEYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54OzMAorPFU4QUE3PiA8VThBQTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqqcwCis8VThBRTk+IDxVOEFFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+irqTAKKzxVOEI1Qz4gPFU4QjVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K2cMTUKKzxVOEMzMT4gPFU4QzMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LCxMTY1OQorPFU4RTdDPiA8VThFN0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoubw0MworPFU5NDIwPiA8VTk0MjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkKAwCis8VTk1Njg+IDxVOTU2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mVqDEKKzxVM0IyNT4gPFUzQjI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46ylMAorPFU2NkREPiA8VTY2REQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmm50zMjkKKzxVNzAxMT4gPFU3MDExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54CRNDAxCis8VTgyMTY+IDxVODIxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iIljMxCis8VTRFMDM+IDxVNEUwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S4gzE5NTI4Cis8VTUwMUI+IDxVNTAxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAmzAKKzxVNTBEQj4gPFU1MERCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YObMAorPFU1MUM0PiA8VTUxQzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlh4QxOTMyCis8VTU0QTA+IDxVNTRBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WSoDAKKzxVNTUyRD4gPFU1NTJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZStMAorPFU1NjAxPiA8VTU2MDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmIExMzAKKzxVNTlCQj4gPFU1OUJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aa7NzY5MQorPFU1QTM4PiA8VTVBMzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqLgwCis8VTVGOUI+IDxVNUY5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W+mzAKKzxVNjA4QT4gPFU2MDhBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oKKMAorPFU2MEJEPiA8VTYwQkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgr0yCis8VTYxN0M+IDxVNjE3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aFvDIKKzxVNjE3RD4gPFU2MTdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oW9MAorPFU2MjFBPiA8VTYyMUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiJoxNjMwCis8VTYzN0Y+IDxVNjM3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aNvzAKKzxVNjUzMj4gPFU2NTMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pSyMAorPFU2NzFGPiA8VTY3MUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnJ8zMjgxOQorPFU2N0QyPiA8VTY3RDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmn5IzNQorPFU2ODE2PiA8VTY4MTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoJY1MDgKKzxVNjg2ND4gPFU2ODY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qGkMAorPFU2ODdDPiA8VTY4N0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmobwwCis8VTY4RjI+IDxVNjhGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ajsjcKKzxVNjlCRj4gPFU2OUJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qa/MAorPFU2OUVEPiA8VTY5RUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmp604Cis8VTZCMzk+IDxVNkIzOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+asuTkKKzxVNkIzQT4gPFU2QjNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qy6MzIyMgorPFU2QzhGPiA8VTZDOEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmso8xNDAKKzxVNkREMj4gPFU2REQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5reSOAorPFU2RjA2PiA8VTZGMDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvIYyMDg3Cis8VTc4Q0U+IDxVNzhDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ejjjAKKzxVNzhFOT4gPFU3OEU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56OpMAorPFU3RDJBPiA8VTdEMkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntKowCis8VTdEQzA+IDxVN0RDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3gDAKKzxVODQwQj4gPFU4NDBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JCLNTEKKzxVOEFDNj4gPFU4QUM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KuGMQorPFU4QzNGPiA8VThDM0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosL80Cis8VThFNEE+IDxVOEU0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i5ijIwNworPFU5MEVBPiA8VTkwRUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg6oxCis8VTk3MEI+IDxVOTcwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mcizAKKzxVOTg2Mz4gPFU5ODYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aGjMAorPFU5QjRDPiA8VTlCNEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprYwwCis8VTlEODg+IDxVOUQ4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m2iDAKKzxVOUUwMj4gPFU5RTAyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6biCMAorPFUzNzBFPiA8VTM3MEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnI4wCis8VTM3RDM+IDxVMzdEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OfkzAKKzxVMzdEQT4gPFUzN0RBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45+aMAorPFUzN0UyPiA8VTM3RTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjn6IwCis8VTNBN0Q+IDxVM0E3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OpvTAKKzxVM0JFNj4gPFUzQkU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46+mMAorPFU0MTIyPiA8VTQxMjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhKIwCis8VTQxNzI+IDxVNDE3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SFsjAKKzxVNDI3Qj4gPFU0MjdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Im7MAorPFU0NDIxPiA8VTQ0MjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkKEwCis8VTQ0NzQ+IDxVNDQ3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SRtDAKKzxVNDRDNT4gPFU0NEM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JOFMAorPFU0NzlBPiA8VTQ3OUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknpowCis8VTQ3REE+IDxVNDdEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SfmjAKKzxVNDg0Qj4gPFU0ODRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KGLMAorPFU0OUQ4PiA8VTQ5RDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkp5gwCis8VTQ5RjU+IDxVNDlGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SntTAKKzxVNEE1Mz4gPFU0QTUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KmTMAorPFU0Qjc2PiA8VTRCNzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrbYwCis8VTRCN0M+IDxVNEI3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+StvDAKKzxVNEMwNz4gPFU0QzA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LCHMAorPFU0QzQ4PiA8VTRDNDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksYgwCis8VTRDQUM+IDxVNENBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SyrDAKKzxVNENFMj4gPFU0Q0UyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LOiMAorPFU0RDkyPiA8VTREOTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktpIwCis8VTREOUU+IDxVNEQ5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S2njAKKzxVNEU5Mz4gPFU0RTkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LqTMTEwCis8VTRFOUQ+IDxVNEU5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6nTAKKzxVNEZERj4gPFU0RkRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L+fODgKKzxVNTE3Nj4gPFU1MTc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YW2NzkyNzgKKzxVNTI1OD4gPFU1MjU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YmYMAorPFU1NzNCPiA8VTU3M0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnLs1Cis8VTU3RkM+IDxVNTdGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfvDEKKzxVNTg5OD4gPFU1ODk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aKYMAorPFU1OTQ3PiA8VTU5NDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpYcxNjAwMAorPFU1QzkwPiA8VTVDOTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlspA2NAorPFU1QzkzPiA8VTVDOTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlspMwCis8VTVEMEU+IDxVNUQwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W0jjg3MworPFU1RDVDPiA8VTVENUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltZwwCis8VTVFM0E+IDxVNUUzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W4ujAKKzxVNjEyRD4gPFU2MTJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oStMAorPFU2MUUwPiA8VTYxRTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmh6AwCis8VTYyN0E+IDxVNjI3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aJujEKKzxVNjM5MT4gPFU2MzkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o6RMAorPFU2NUMyPiA8VTY1QzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPml4IwCis8VTY1RDc+IDxVNjVENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aXlzQ1NjUKKzxVNjhDQT4gPFU2OENBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qOKMAorPFU2OENCPiA8VTY4Q0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmo4syMjYxCis8VTZBQjE+IDxVNkFCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aqsTAKKzxVNkFDMD4gPFU2QUMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5quAMAorPFU2QjY3PiA8VTZCNjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmracxMzQ3Cis8VTZEQzc+IDxVNkRDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3hzMwNQorPFU2RkREPiA8VTZGREQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv50wCis8VTczMDk+IDxVNzMwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eMiTAKKzxVNzM4Mj4gPFU3MzgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj546CMAorPFU3NDI2PiA8VTc0MjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkKY2NTcKKzxVNzQyQT4gPFU3NDJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55CqODU1Cis8VTc0ODI+IDxVNzQ4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eSgjcKKzxVNzU2Nj4gPFU3NTY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55WmMzIKKzxVNzVCNz4gPFU3NUI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55a3MAorPFU3ODgxPiA8VTc4ODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnooExNgorPFU3ODk1PiA8VTc4OTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnopUwCis8VTc5NDE+IDxVNzk0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+elgTQwMQorPFU3OTQ3PiA8VTc5NDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpYczMzMKKzxVNzk0OD4gPFU3OTQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56WIMTEwMworPFU3OTdBPiA8VTc5N0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpbozNTAKKzxVNzlBNT4gPFU3OUE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56alMAorPFU3QUUyPiA8VTdBRTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnq6IwCis8VTdDMzE+IDxVN0MzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ewsTAKKzxVN0M0Rj4gPFU3QzRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57GPMAorPFU3Q0I4PiA8VTdDQjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsrgwCis8VTdEQTU+IDxVN0RBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e2pTAKKzxVN0RBNj4gPFU3REE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57amMTM1Cis8VTdEQTg+IDxVN0RBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e2qDAKKzxVN0U4Mz4gPFU3RTgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57qDMAorPFU3RkQ3PiA8VTdGRDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnv5cwCis8VTgwMDY+IDxVODAwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iAhjI1Cis8VTgxMTA+IDxVODExMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iEkDIyOAorPFU4MUNEPiA8VTgxQ0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoh40yCis8VTgyNjk+IDxVODI2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iJqTAKKzxVODJBQT4gPFU4MkFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IqqNQorPFU4NTcyPiA8VTg1NzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolbIxNAorPFU4NUM0PiA8VTg1QzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPol4QwCis8VTg2MDQ+IDxVODYwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iYhDMKKzxVODY5MT4gPFU4NjkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JqRMAorPFU4NjlBPiA8VTg2OUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPompowCis8VTg2RjQ+IDxVODZGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ibtDcKKzxVODcxRD4gPFU4NzFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JydMAorPFU4NzFFPiA8VTg3MUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonJ4wCis8VTg4MTA+IDxVODgxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+igkDAKKzxVODg3OT4gPFU4ODc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KG5MAorPFU4REMyPiA8VThEQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPot4IyCis8VThFMTE+IDxVOEUxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i4kTAKKzxVOEVERD4gPFU4RUREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LudMAorPFU4RkM5PiA8VThGQzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPov4kwCis8VTkxM0Y+IDxVOTEzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mEvzAKKzxVOTFFRT4gPFU5MUVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YeuMAorPFU5MzIxPiA8VTkzMjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjKEyCis8VTkzMjQ+IDxVOTMyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mMpDAKKzxVOTUxQz4gPFU5NTFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZScMQorPFU5ODBFPiA8VTk4MEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoI4wCis8VTlBMEY+IDxVOUEwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mojzAKKzxVOUE5MD4gPFU5QTkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aqQMjIKKzxVOUE5MT4gPFU5QTkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aqRNDUwMworPFU5QjEwPiA8VTlCMTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprJAwCis8VTlCM0Y+IDxVOUIzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+msvzAKKzxVOUJBOD4gPFU5QkE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a6oMAorPFU5QkQ1PiA8VTlCRDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpr5UwCis8VTlDMkQ+IDxVOUMyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mwrTAKKzxVOUNBRj4gPFU5Q0FGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bKvMAorPFU5Q0NEPiA8VTlDQ0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPps40xMDMKKzxVOUQ3OD4gPFU5RDc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bW4MAorPFU5RDgwPiA8VTlEODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptoAwCis8VTlFOTI+IDxVOUU5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6kjQ0NQorPFU5RUExPiA8VTlFQTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuqEwCis8VTlGNEE+IDxVOUY0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m9ijQzCis8VTlGNTA+IDxVOUY1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m9kDgwNDQKKzxVMzQ4NT4gPFUzNDg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45KFMAorPFUzNzkzPiA8VTM3OTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnpMwCis8VTM5NTM+IDxVMzk1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OlkzAKKzxVM0E2OT4gPFUzQTY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46mpMAorPFUzQUQzPiA8VTNBRDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjq5MwCis8VTNGQTg+IDxVM0ZBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O+qDAKKzxVNDEwRT4gPFU0MTBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ISOMAorPFU0MTJCPiA8VTQxMkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhKswCis8VTQyNUQ+IDxVNDI1RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SJnTAKKzxVNDJFRj4gPFU0MkVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IuvMAorPFU0M0EyPiA8VTQzQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjqIwCis8VTQzRkY+IDxVNDNGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SPvzAKKzxVNDRCQj4gPFU0NEJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JK7MAorPFU0NTA3PiA8VTQ1MDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklIcwCis8VTQ2RjQ+IDxVNDZGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SbtDAKKzxVNDg1ND4gPFU0ODU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KGUMAorPFU0QjZCPiA8VTRCNkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkraswCis8VTRCNkM+IDxVNEI2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+StrDAKKzxVNEU1RT4gPFU0RTVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LmeMTE2MworPFU0RjAxPiA8VTRGMDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvIE3MTExCis8VTU0MkY+IDxVNTQyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WQrzcyOTEKKzxVNTQ0Nz4gPFU1NDQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZGHMAorPFU1NTE4PiA8VTU1MTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllJgwCis8VTU1NTM+IDxVNTU1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WVkzAKKzxVNTU1ND4gPFU1NTU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZWUMAorPFU1NTVGPiA8VTU1NUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllZ8zOQorPFU1QTREPiA8VTVBNEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqY0wCis8VTVDN0E+IDxVNUM3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WxujE3Cis8VTVDODI+IDxVNUM4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WygjI0NDkKKzxVNjU2Nz4gPFU2NTY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pWnMAorPFU2Njc1PiA8VTY2NzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmbUwCis8VTY3NUU+IDxVNjc1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+adnjg1Cis8VTY4RTg+IDxVNjhFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ajqDAKKzxVNzM5OD4gPFU3Mzk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj546YMAorPFU3NkMwPiA8VTc2QzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnm4AwCis8VTdEQUU+IDxVN0RBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e2rjUKKzxVN0RCQT4gPFU3REJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57a6MQorPFU3RUVFPiA8VTdFRUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnu64yMzQKKzxVODI5MT4gPFU4MjkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IqRMAorPFU4MjlFPiA8VTgyOUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoip4wCis8VTg4RkY+IDxVODhGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ijvzAKKzxVOEFFQz4gPFU4QUVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KusMAorPFU4RDc3PiA8VThENzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotbcxNDA5NjcKKzxVOTA5ND4gPFU5MDk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKUMAorPFU5NUQ5PiA8VTk1RDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl5kwCis8VTM0REU+IDxVMzRERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OTnjAKKzxVMzc5QT4gPFUzNzlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj456aMAorPFUzOEVDPiA8VTM4RUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjo6wwCis8VTNCOTE+IDxVM0I5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OukTAKKzxVM0YyND4gPFUzRjI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47ykMAorPFU0MDA4PiA8VTQwMDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgIgwCis8VTQwMTk+IDxVNDAxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SAmTAKKzxVNDA0OD4gPFU0MDQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IGIMAorPFU0MDQ5PiA8VTQwNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgYkwCis8VTQxNjQ+IDxVNDE2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SFpDAKKzxVNDMwQz4gPFU0MzBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IyMMAorPFU0M0M1PiA8VTQzQzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkj4UwCis8VTQzQ0M+IDxVNDNDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SPjDAKKzxVNDNFMD4gPFU0M0UwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I+gMAorPFU0NDk3PiA8VTQ0OTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkpcwCis8VTQ2NDQ+IDxVNDY0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SZhDAKKzxVNDY4OT4gPFU0Njg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JqJMAorPFU0NjhEPiA8VTQ2OEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmo0wCis8VTQ3QzQ+IDxVNDdDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SfhDAKKzxVNDg4MD4gPFU0ODgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KKAMAorPFU0QUQ0PiA8VTRBRDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkq5QwCis8VTRCMjM+IDxVNEIyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SsozAKKzxVNEMzND4gPFU0QzM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LC0MAorPFU1NDVBPiA8VTU0NUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkZowCis8VTU0NkU+IDxVNTQ2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRrjAKKzxVNTY1MD4gPFU1NjUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZmQMAorPFU1NjY4PiA8VTU2Njg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmagyNDU5NAorPFU1OTIxPiA8VTU5MjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpKEwCis8VTU5NTE+IDxVNTk1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WlkTEzMzIKKzxVNUYwMz4gPFU1RjAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5byDNjUyMworPFU1RkQ0PiA8VTVGRDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv5QwCis8VTYxODc+IDxVNjE4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aGhzEKKzxVNjFBOT4gPFU2MUE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oapMjE1Cis8VTY0NTY+IDxVNjQ1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aRljAKKzxVNjZBMz4gPFU2NkEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pqjMAorPFU2ODE0PiA8VTY4MTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoJQwCis8VTY4QzQ+IDxVNjhDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ajhDU5Cis8VTZCMkI+IDxVNkIyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+asqzUKKzxVNkMxND4gPFU2QzE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rCUNjU1MDMKKzxVNkMxNz4gPFU2QzE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rCXMAorPFU2QzIzPiA8VTZDMjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsKM0MzUKKzxVNkM1ND4gPFU2QzU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rGUMworPFU2QzdEPiA8VTZDN0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsb01Mjc5Cis8VTZDRTM+IDxVNkNFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+azozIyODYKKzxVNkQxMz4gPFU2RDEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rSTMAorPFU2RTQ2PiA8VTZFNDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuYYwCis8VTZFNDc+IDxVNkU0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a5hzAKKzxVNzA4MT4gPFU3MDgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54KBMAorPFU3NTA4PiA8VTc1MDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlIgwCis8VTc2RjU+IDxVNzZGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ebtTAKKzxVNzgwQz4gPFU3ODBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56CMNDc1Cis8VTc4OUI+IDxVNzg5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eimzcKKzxVNzhCNj4gPFU3OEI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56K2MAorPFU3OERDPiA8VTc4REM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPno5wwCis8VTc4RTc+IDxVNzhFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ejpzAKKzxVNzkxOD4gPFU3OTE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56SYMAorPFU4NDdBPiA8VTg0N0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokbozMworPFU4N0ZGPiA8VTg3RkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPon78wCis8VThBMTY+IDxVOEExNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ioljEKKzxVOEFGRj4gPFU4QUZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ku/MAorPFU4QkFCPiA8VThCQUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorqs1MQorPFU4REJGPiA8VThEQkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotr83MAorPFU4RkM0PiA8VThGQzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPov4Q1NzQKKzxVOTNEQT4gPFU5M0RBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+aMAorPFU5RjFDPiA8VTlGMUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvJwwCis8VTYzOTA+IDxVNjM5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aOkDY2OQorPFU4NDVDPiA8VTg0NUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokZwwCis8VTQ4MEQ+IDxVNDgwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SgjTAKKzxVNjJFND4gPFU2MkU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oukMAorPFU4REQyPiA8VThERDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPot5IwCis8VTkxNjA+IDxVOTE2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mFoDAKKzxVMzRFMz4gPFUzNEUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45OjMAorPFUzODRBPiA8VTM4NEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoYowCis8VTM5MDk+IDxVMzkwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OkiTAKKzxVNDcxMT4gPFU0NzExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JyRMAorPFU0QTEwPiA8VTRBMTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqJAwCis8VTRCQ0E+IDxVNEJDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SvijAKKzxVNEQ5RD4gPFU0RDlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LadMAorPFU1NzM2PiA8VTU3MzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnLYwCis8VTVFMjI+IDxVNUUyMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W4ojAKKzxVNjA3MD4gPFU2MDcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oGwNDQxMgorPFU2MTE4PiA8VTYxMTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhJgwCis8VTZCOEU+IDxVNkI4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aujjEKKzxVNkQzRD4gPFU2RDNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rS9Mzk3Cis8VTRFREY+IDxVNEVERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S7nzM5Cis8VTRGNjU+IDxVNEY2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S9pTI5Cis8VTUwQzk+IDxVNTBDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WDiTAKKzxVNTE1Qj4gPFU1MTVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YWbMAorPFU1MzQzPiA8VTUzNDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljYMxODY5MgorPFU1NzMxPiA8VTU3MzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnLEwCis8VTU3MzI+IDxVNTczMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WcsjAKKzxVNTk3Nz4gPFU1OTc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aW3NQorPFU1QTVDPiA8VTVBNUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqZwwCis8VTVCNkY+IDxVNUI2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WtrzAKKzxVNUM4RD4gPFU1QzhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bKNMAorPFU2MEFEPiA8VTYwQUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgq00MgorPFU2MTA2PiA8VTYxMDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhIYzNworPFU2MTczPiA8VTYxNzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhbMwCis8VTYyNjY+IDxVNjI2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aJpjExCis8VTYyRUE+IDxVNjJFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aLqjAKKzxVNjM5ND4gPFU2Mzk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o6UMAorPFU2NDM0PiA8VTY0MzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkLQ1Cis8VTY0ODE+IDxVNjQ4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aSgTAKKzxVNjUxMD4gPFU2NTEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pSQMAorPFU2NTExPiA8VTY1MTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlJEwCis8VTY1MTM+IDxVNjUxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aUkzAKKzxVNjc0ND4gPFU2NzQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p2EMAorPFU2QUI2PiA8VTZBQjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqrYwCis8VTZBQ0Y+IDxVNkFDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+arjzAKKzxVNkIyNj4gPFU2QjI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qymMAorPFU2QzU4PiA8VTZDNTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsZgwCis8VTZDNjc+IDxVNkM2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+axpzAKKzxVNzI3NT4gPFU3Mjc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54m1MzU4MgorPFU3MjdEPiA8VTcyN0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnib0zNAorPFU3NEU5PiA8VTc0RTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnk6kwCis8VTdCN0U+IDxVN0I3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+etvjQ1MDgKKzxVN0I5RT4gPFU3QjlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj566eMAorPFU3QzNEPiA8VTdDM0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsL0zMworPFU3QzU2PiA8VTdDNTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsZYwCis8VTdDNjQ+IDxVN0M2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+expDE5Cis8VTdDODE+IDxVN0M4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eygTAKKzxVN0UzND4gPFU3RTM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57i0MAorPFU3RjlGPiA8VTdGOUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvp8xMworPFU3RkE1PiA8VTdGQTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvqUwCis8VTgxRTQ+IDxVODFFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iHpDAKKzxVODI4QT4gPFU4MjhBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IqKMzgKKzxVODY4OD4gPFU4Njg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JqIMAorPFU4OTMwPiA8VTg5MzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopLAyCis8VThBRDA+IDxVOEFEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+irkDAKKzxVOEIxOT4gPFU4QjE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KyZNgorPFU4QjYzPiA8VThCNjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoraMwCis8VThDMjY+IDxVOEMyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwpjE1OTkKKzxVOEMzOD4gPFU4QzM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LC4MAorPFU4RkMxPiA8VThGQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPov4EyMTk1Cis8VTkwNzc+IDxVOTA3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mBtzE3Cis8VTkxRkE+IDxVOTFGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mHujAKKzxVOTI1Qj4gPFU5MjVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YmbNworPFU5NDMxPiA8VTk0MzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkLEwCis8VTk0OEU+IDxVOTQ4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mSjjI0Cis8VTk0QzU+IDxVOTRDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mThTg2NgorPFU5NTEzPiA8VTk1MTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplJMwCis8VTk2MjE+IDxVOTYyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mYoTM4Cis8VTk3QzY+IDxVOTdDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mfhjEKKzxVOTg0NT4gPFU5ODQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aGFMAorPFU5ODY5PiA8VTk4Njk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoakwCis8VTlBMkI+IDxVOUEyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+moqzAKKzxVOUE5RT4gPFU5QTlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aqeNjMKKzxVOUIxQz4gPFU5QjFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aycMAorPFU5QjFEPiA8VTlCMUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprJ0wCis8VTlENkU+IDxVOUQ2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m1rjAKKzxVOUU1MD4gPFU5RTUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bmQMQorPFUzOUFFPiA8VTM5QUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpq4wCis8VTNBMUM+IDxVM0ExQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OonDAKKzxVM0E2RT4gPFUzQTZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46muMAorPFUzRTJCPiA8VTNFMkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuKswCis8VTQwNkU+IDxVNDA2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SBrjAKKzxVNDIyND4gPFU0MjI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IikMAorPFU0MzQ5PiA8VTQzNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjYkwCis8VTQ1NkQ+IDxVNDU2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SVrTAKKzxVNDU4RD4gPFU0NThEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JaNMAorPFU0QTNGPiA8VTRBM0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqL8wCis8VTRFN0U+IDxVNEU3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S5vjU2MzkKKzxVNTI0RD4gPFU1MjREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YmNMTA4MTA2Cis8VTU5Q0Y+IDxVNTlDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WnjzAKKzxVNUE4QT4gPFU1QThBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aqKMAorPFU1QzkyPiA8VTVDOTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlspIwCis8VTVGRjQ+IDxVNUZGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W/tDAKKzxVNjI3Mj4gPFU2MjcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5omyMAorPFU2MkQxPiA8VTYyRDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmi5EwCis8VTYzQUU+IDxVNjNBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aOrjQ2Cis8VTYzRjU+IDxVNjNGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aPtTAKKzxVNjlBOT4gPFU2OUE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qapMAorPFU2QjZDPiA8VTZCNkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrawwCis8VTZGMjc+IDxVNkYyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a8pzAKKzxVNkY1Qj4gPFU2RjVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r2bNDYKKzxVNkY1Qz4gPFU2RjVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r2cNDM4NQorPFU2RkYzPiA8VTZGRjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv7MwCis8VTcwNEE+IDxVNzA0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eBijAKKzxVNzFDMj4gPFU3MUMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54eCMAorPFU3QjlEPiA8VTdCOUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrp0xMgorPFU4MzY4PiA8VTgzNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojagxNgorPFU4NDY1PiA8VTg0NjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokaUwCis8VTg1NDE+IDxVODU0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iVgTUKKzxVODY1ND4gPFU4NjU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JmUNjExCis8VTg2OTk+IDxVODY5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iamTAKKzxVOEVFMT4gPFU4RUUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LuhMAorPFU5MjEwPiA8VTkyMTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiJAwCis8VTkyNTc+IDxVOTI1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mJlzAKKzxVOTJBRD4gPFU5MkFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YqtMAorPFU5MzIyPiA8VTkzMjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjKIyNTQKKzxVOTRBND4gPFU5NEE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZKkMTYKKzxVOTRCMT4gPFU5NEIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZKxMjg4ODAKKzxVOTRCMz4gPFU5NEIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZKzMjA4Cis8VTlBMUE+IDxVOUExQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+momjAKKzxVOUIzNT4gPFU5QjM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ay1MAorPFU5QzJDPiA8VTlDMkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsKwwCis8VTlDRjk+IDxVOUNGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mzuTAKKzxVOUVEND4gPFU5RUQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6buUMTE3Cis8VTlFREE+IDxVOUVEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7mjAKKzxVMzlDND4gPFUzOUM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46eEMAorPFU0QTg4PiA8VTRBODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqogwCis8VTRCNjQ+IDxVNEI2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+StpDAKKzxVNUQ3MD4gPFU1RDcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bWwMAorPFU2OUNGPiA8VTY5Q0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmp48wCis8VTZENDU+IDxVNkQ0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a1hTMzMDkKKzxVN0U3RT4gPFU3RTdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57m+MAorPFU3RjMxPiA8VTdGMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvLE1MQorPFU4MEI3PiA8VTgwQjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogrcwCis8VTgxODE+IDxVODE4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iGgTEKKzxVODczOD4gPFU4NzM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Jy4MAorPFU4Qjc0PiA8VThCNzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorbQ5Cis8VThDMzQ+IDxVOEMzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwtDEwNTkKKzxVOTA2Mz4gPFU5MDYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YGjMTY1OQorPFUzNDM4PiA8VTM0Mzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkLgwCis8VTM3MUU+IDxVMzcxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OcnjAKKzxVMzdGQj4gPFUzN0ZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45+7MAorPFUzQUEwPiA8VTNBQTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqqAwCis8VTNCRTA+IDxVM0JFMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OvoDAKKzxVNDIzND4gPFU0MjM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ii0MAorPFU0MkI0PiA8VTQyQjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkirQwCis8VTQ5NDU+IDxVNDk0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SlhTAKKzxVNDlCMj4gPFU0OUIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KayMAorPFU0QUUxPiA8VTRBRTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkq6EwCis8VTUwMjk+IDxVNTAyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAqTczNQorPFU1MDk0PiA8VTUwOTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgpQwCis8VTUxMTk+IDxVNTExOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WEmTAKKzxVNTIwQj4gPFU1MjBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YiLMAorPFU1NURCPiA8VTU1REI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPll5swCis8VTU4MTE+IDxVNTgxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WgkTUwCis8VTU4Nzk+IDxVNTg3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WhuTAKKzxVNThDRD4gPFU1OENEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aONMAorPFU2MDkzPiA8VTYwOTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgpMwCis8VTYxNEE+IDxVNjE0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aFijMKKzxVNjhDOD4gPFU2OEM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qOIMAorPFU2OTIwPiA8VTY5MjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpKAxCis8VTY5RTc+IDxVNjlFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+anpzAKKzxVNkIyMD4gPFU2QjIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qygMjQ5OQorPFU2QjQ5PiA8VTZCNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrYkyNDQwCis8VTc2OTg+IDxVNzY5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eamDAKKzxVN0JDRj4gPFU3QkNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56+PMAorPFU3QkRGPiA8VTdCREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnr58wCis8VTdEQUE+IDxVN0RBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e2qjAKKzxVN0VBND4gPFU3RUE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57qkMTM1NAorPFU4MkExPiA8VTgyQTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiqExMworPFU4MzFDPiA8VTgzMUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojJw1MjQKKzxVODRBOD4gPFU4NEE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JKoMgorPFU4NTMzPiA8VTg1MzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolLMzCis8VThGMjQ+IDxVOEYyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i8pDAKKzxVNTQ1Qj4gPFU1NDVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZGbNDU0Cis8VTU1QzY+IDxVNTVDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WXhjMKKzxVNUQ4OD4gPFU1RDg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5baIMAorPFU2MjE1PiA8VTYyMTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiJU1MworPFU2MjE3PiA8VTYyMTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiJczMgorPFU2NUE4PiA8VTY1QTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlqgwCis8VTY3QUE+IDxVNjdBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aeqjEwMzg2Cis8VTY5MEM+IDxVNjkwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+akjDAKKzxVNjlDRD4gPFU2OUNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qeNNDAKKzxVNkVBQz4gPFU2RUFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqsMAorPFU3MjQ0PiA8VTcyNDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniYQwCis8VTczMTA+IDxVNzMxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eMkDAKKzxVNzNCMT4gPFU3M0IxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj546xMAorPFU3NDcyPiA8VTc0NzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkbIwCis8VTc3RkM+IDxVNzdGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+efvDAKKzxVN0JFQz4gPFU3QkVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56+sMAorPFU3RjhDPiA8VTdGOEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvow4NAorPFU3Rjk3PiA8VTdGOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvpcwCis8VTdGQUI+IDxVN0ZBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e+qzAKKzxVODE1ND4gPFU4MTU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IWUMTg2NAorPFU4NzIzPiA8VTg3MjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonKM2Cis8VThCMTI+IDxVOEIxMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iskjAKKzxVOERDND4gPFU4REM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LeENDM5Cis8VThFNEM+IDxVOEU0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i5jDcKKzxVOEU2MT4gPFU4RTYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LmhMAorPFU5MzA2PiA8VTkzMDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjIYwCis8VTkzOTc+IDxVOTM5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mOlzAKKzxVOTNEOD4gPFU5M0Q4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+YMQorPFU5M0Y5PiA8VTkzRjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpj7kwCis8VTk0NTM+IDxVOTQ1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mRkzAKKzxVOTUxNj4gPFU5NTE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZSWMAorPFU5NTM1PiA8VTk1MzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplLUxOTMKKzxVOTU2QT4gPFU5NTZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZWqMjIKKzxVM0E1Nj4gPFUzQTU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46mWMAorPFU1ODk5PiA8VTU4OTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlopk4ODYzCis8VTU4QkI+IDxVNThCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WiuzAKKzxVNUFGMT4gPFU1QUYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5auxMgorPFU1QjE5PiA8VTVCMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrJkwCis8VTVFRTc+IDxVNUVFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W7pzAKKzxVNUYzQT4gPFU1RjNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5by6MjkwMDAKKzxVNkEyRj4gPFU2QTJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qivMTMKKzxVNkFBMz4gPFU2QUEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qqjMAorPFU2RjEyPiA8VTZGMTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvJIwCis8VTcyNDY+IDxVNzI0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eJhjc5Cis8VTgyNjI+IDxVODI2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iJojAKKzxVODUzNz4gPFU4NTM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JS3NDA0Cis8VTg1OTQ+IDxVODU5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iWlDIKKzxVODYyMD4gPFU4NjIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JigMAorPFUzNkU4PiA8VTM2RTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjm6gwCis8VTQxNUE+IDxVNDE1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SFmjAKKzxVNTBCOD4gPFU1MEI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YK4MAorPFU1ODhGPiA8VTU4OEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloo8wCis8VTYyQTI+IDxVNjJBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aKojQ4MTkKKzxVNzhFMj4gPFU3OEUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56OiMAorPFU3RTQ4PiA8VTdFNDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuYgwCis8VTg5NDE+IDxVODk0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ilgTM5Cis8VTRENDE+IDxVNEQ0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S1gTAKKzxVNTUzND4gPFU1NTM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZS0MAorPFU3MDlEPiA8VTcwOUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngp0xNAorPFU3MTk3PiA8VTcxOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhpcwCis8VTdGQkI+IDxVN0ZCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e+uzAKKzxVNTI4MT4gPFU1MjgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YqBNworPFU1ODU5PiA8VTU4NTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloZkwCis8VTU4OUQ+IDxVNTg5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WinTAKKzxVNThCRD4gPFU1OEJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aK9MAorPFU1RDZBPiA8VTVENkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltaowCis8VTVFNjc+IDxVNUU2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W5pzAKKzxVNUVBOD4gPFU1RUE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bqoMAorPFU2MDg0PiA8VTYwODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgoQ1ODczCis8VTY1NzI+IDxVNjU3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aVsjQzNjYKKzxVNzg1Nz4gPFU3ODU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56GXMAorPFU3OEZEPiA8VTc4RkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPno70wCis8VTdFNTE+IDxVN0U1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5kTAKKzxVN0U3MD4gPFU3RTcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57mwMAorPFU3RjMyPiA8VTdGMzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvLIxCis8VThEQUM+IDxVOERBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i2rDAKKzxVOERGNz4gPFU4REY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Le3MzY3Cis8VThFN0E+IDxVOEU3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i5ujIKKzxVOTBGQj4gPFU5MEZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YO7MAorPFU5MTIxPiA8VTkxMjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphKEwCis8VTkxMjU+IDxVOTEyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mEpTAKKzxVOTM2Qj4gPFU5MzZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y2rMAorPFU5MzZDPiA8VTkzNkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjawyMworPFU5M0QyPiA8VTkzRDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpj5IwCis8VTk0MzA+IDxVOTQzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mQsDAKKzxVOTUzOT4gPFU5NTM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZS5MTU5Cis8VTk4MUQ+IDxVOTgxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mgnTAKKzxVOUFCOT4gPFU5QUI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aq5MQorPFU5QURDPiA8VTlBREM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpq5wwCis8VTM2ODE+IDxVMzY4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OagTAKKzxVMzc2Rj4gPFUzNzZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj452vMAorPFU0MDA5PiA8VTQwMDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgIkwCis8VTQzOTc+IDxVNDM5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SOlzAKKzxVNEE0Qz4gPFU0QTRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KmMMAorPFU0QzQxPiA8VTRDNDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksYEwCis8VTRFNTQ+IDxVNEU1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S5lDM0MDUKKzxVNEZBOD4gPFU0RkE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L6oNDkyCis8VTUwRDE+IDxVNTBEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WDkTMKKzxVNTYzQT4gPFU1NjNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Zi6MAorPFU1OEE3PiA8VTU4QTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloqcwCis8VTVBRjY+IDxVNUFGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WrtjAKKzxVNURBMz4gPFU1REEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bajMAorPFU2MTk0PiA8VTYxOTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhpQ1ODIKKzxVNjU3Rj4gPFU2NTdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pW/MAorPFU2ODY1PiA8VTY4NjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoaU1ODk0Cis8VTY5RDc+IDxVNjlENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+anlzAKKzxVNkEzNT4gPFU2QTM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qi1MzIxCis8VTZBNEI+IDxVNkE0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+apizMyCis8VTcxQzY+IDxVNzFDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHhjAKKzxVNzY0ND4gPFU3NjQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55mEMAorPFU3N0E3PiA8VTc3QTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnqc2NTU4Cis8VTc4NUE+IDxVNzg1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ehmjAKKzxVNzkwND4gPFU3OTA0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56SEMAorPFU3QzI1PiA8VTdDMjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsKUwCis8VTdGRDg+IDxVN0ZEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e/mDc2MworPFU3RkY5PiA8VTdGRjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnv7k5Cis8VTg1NEU+IDxVODU0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iVjjAKKzxVODVFRT4gPFU4NUVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JeuMAorPFU4QjU5PiA8VThCNTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorZkwCis8VThDMkY+IDxVOEMyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwrzIzCis8VThEQUI+IDxVOERBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i2qzAKKzxVOTQwOD4gPFU5NDA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZCIMAorPFU5ODY2PiA8VTk4NjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoaYwCis8VTM2QkQ+IDxVMzZCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OavTAKKzxVMzg1MT4gPFUzODUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46GRMAorPFUzOTBEPiA8VTM5MEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpI0wCis8VTRDQkU+IDxVNENCRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SyvjAKKzxVNURFNz4gPFU1REU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5benNTkxOAorPFU2MTAwPiA8VTYxMDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhIA4Cis8VTkxRTU+IDxVOTFFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mHpTAKKzxVOUQ3Mj4gPFU5RDcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bWyNQorPFUzODk3PiA8VTM4OTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjopcwCis8VTNBQTM+IDxVM0FBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OqozAKKzxVM0QyNT4gPFUzRDI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47SlMAorPFU0MEREPiA8VTQwREQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkg50wCis8VTQxQkI+IDxVNDFCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SGuzAKKzxVNDFDQz4gPFU0MUNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IeMMAorPFU0RkNGPiA8VTRGQ0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkv483NTkKKzxVNTBGQT4gPFU1MEZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YO6MAorPFU1Q0VEPiA8VTVDRUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPls60yOTkKKzxVNUUyOT4gPFU1RTI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bipMAorPFU2NEFDPiA8VTY0QUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkqwxNzAKKzxVNjRCRD4gPFU2NEJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pK9MAorPFU3QThEPiA8VTdBOEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqo01MjQKKzxVN0FDNT4gPFU3QUM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56uFMworPFU4QTlBPiA8VThBOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqpowCis8VThCRUU+IDxVOEJFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ivrjQwCis8VThFODg+IDxVOEU4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6iDAKKzxVOTY1Nz4gPFU5NjU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZmXMAorPFU5Nzk4PiA8VTk3OTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnpgxOTcKKzxVOTdEMj4gPFU5N0QyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z+SMAorPFU5QURBPiA8VTlBREE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpq5owCis8VTUyMDc+IDxVNTIwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WIhzIwMTUzCis8VTgwN0E+IDxVODA3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iBujAKKzxVMzY5Nz4gPFUzNjk3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45qXMAorPFU0OUE3PiA8VTQ5QTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpqcwCis8VTc2N0Y+IDxVNzY3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eZvzAKKzxVNEUxND4gPFU0RTE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LiUMzQ3ODAKKzxVMzRGNj4gPFUzNEY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45O2MAorPFUzNUVCPiA8VTM1RUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjl6swCis8VTM2Q0Q+IDxVMzZDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ObjTAKKzxVMzZEOT4gPFUzNkQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45uZMAorPFUzOTMyPiA8VTM5MzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpLIwCis8VTM5NjY+IDxVMzk2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OlpjAKKzxVM0FGOD4gPFUzQUY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46u4MAorPFUzQzMwPiA8VTNDMzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsLAwCis8VTNDM0M+IDxVM0MzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OwvDAKKzxVM0U2ND4gPFUzRTY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47mkMAorPFUzRjgwPiA8VTNGODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvoAwCis8VTNGOUM+IDxVM0Y5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O+nDAKKzxVNDdEOT4gPFU0N0Q5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J+ZMAorPFU0OTNGPiA8VTQ5M0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpL8wCis8VTRCMEE+IDxVNEIwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SsijAKKzxVNTMyNz4gPFU1MzI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YynMAorPFU1NTNDPiA8VTU1M0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllLwxCis8VTU5QkU+IDxVNTlCRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WmvjQ1OQorPFU2MDJGPiA8VTYwMkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgK8xNDk0Cis8VTYwOEY+IDxVNjA4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aCjzAKKzxVNjBFQz4gPFU2MEVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oOsMjM1Cis8VTYxMUM+IDxVNjExQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aEnDAKKzxVNjMwOD4gPFU2MzA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oyIMjgKKzxVNjcwNT4gPFU2NzA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pyFMAorPFU2REMxPiA8VTZEQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmt4EwCis8VTdBNTU+IDxVN0E1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eplTAKKzxVN0E4Mz4gPFU3QTgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56qDMTU2NQorPFU3QUNBPiA8VTdBQ0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnq4o5Cis8VTdCMjE+IDxVN0IyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+esoTAKKzxVN0JBNz4gPFU3QkE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj566nMzIKKzxVN0JDQj4gPFU3QkNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56+LMAorPFU3QzYxPiA8VTdDNjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsaEwCis8VTg1RDI+IDxVODVEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iXkjAKKzxVODZFQT4gPFU4NkVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JuqMAorPFU4RTI1PiA8VThFMjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouKUwCis8VTkzNjU+IDxVOTM2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mNpTIKKzxVOTUzMj4gPFU5NTMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZSyNjEKKzxVOUJEQz4gPFU5QkRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a+cMAorPFU0RUIyPiA8VTRFQjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkurI0MzM0MQorPFU0RkI1PiA8VTRGQjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvrU0NjA2Cis8VTVBODc+IDxVNUE4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WqhzAKKzxVNUJGND4gPFU1QkY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a+0MAorPFU1RDVBPiA8VTVENUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltZowCis8VTVEOTQ+IDxVNUQ5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W2lDAKKzxVNkIzRD4gPFU2QjNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qy9MworPFU3RDg1PiA8VTdEODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntoUwCis8VTg4N0U+IDxVODg3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ihvjg2Cis8VTg5QUE+IDxVODlBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+imqjI1MQorPFU4QTlCPiA8VThBOUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqpswCis8VTk0QTY+IDxVOTRBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mSpjE2MTkKKzxVOTlGOD4gPFU5OUY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ae4MAorPFU5QThFPiA8VTlBOEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqo4wCis8VTlCQkM+IDxVOUJCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+muvDAKKzxVMzYyNj4gPFUzNjI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45imMAorPFUzODk5PiA8VTM4OTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjopkwCis8VTNBNTI+IDxVM0E1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OpkjAKKzxVM0E4MT4gPFUzQTgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46qBMAorPFUzQjk3PiA8VTNCOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrpcwCis8VTQ1Mzc+IDxVNDUzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SUtzAKKzxVNDU4Qz4gPFU0NThDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JaMMAorPFU0OUE2PiA8VTQ5QTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpqYwCis8VTUyRTQ+IDxVNTJFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WLpDI5NDIKKzxVNTVFQT4gPFU1NUVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZeqMgorPFU1NjU5PiA8VTU2NTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmZkxNjcKKzxVNUFDMD4gPFU1QUMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5auAMAorPFU1RTg4PiA8VTVFODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluogwCis8VTYxQzM+IDxVNjFDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aHgzAKKzxVNjFDND4gPFU2MUM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oeEMAorPFU2MzY2PiA8VTYzNjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjaYwCis8VTY0RDI+IDxVNjREMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aTkjUxMworPFU2NUIzPiA8VTY1QjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlrMwCis8VTZBOEU+IDxVNkE4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aqjjIKKzxVNkZCRj4gPFU2RkJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r6/MAorPFU3M0UxPiA8VTczRTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnj6EwCis8VTc0MzQ+IDxVNzQzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eQtDQ0NDAKKzxVNzQzOT4gPFU3NDM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55C5MAorPFU3OUJEPiA8VTc5QkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpr0zMzIKKzxVNzlFNj4gPFU3OUU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56emNDMxMworPFU4MDM5PiA8VTgwMzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogLkxCis8VTgwQTM+IDxVODBBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iCozAKKzxVODJBOT4gPFU4MkE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IqpMworPFU4MkI5PiA8VTgyQjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoirk1ODUKKzxVODNFNj4gPFU4M0U2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I+mMAorPFU4NzkzPiA8VTg3OTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonpM1Cis8VTg4MDQ+IDxVODgwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ighDAKKzxVODk4Mz4gPFU4OTgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KaDMTc3Cis8VThEN0E+IDxVOEQ3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i1ujAKKzxVOTIxOT4gPFU5MjE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YiZMAorPFU5NkMyPiA8VTk2QzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpm4IwCis8VTk3NzI+IDxVOTc3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mdsjAKKzxVOUQ2RD4gPFU5RDZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bWtMAorPFUzNzcyPiA8VTM3NzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnbIwCis8VTNGOUI+IDxVM0Y5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O+mzAKKzxVNDgzND4gPFU0ODM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KC0MAorPFU1NzQ1PiA8VTU3NDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnYUwCis8VTVCRDE+IDxVNUJEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WvkTAKKzxVNUJERD4gPFU1QkREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a+dMTI2MgorPFU1QkUyPiA8VTVCRTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlr6IxNgorPFU2NjExPiA8VTY2MTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmJEwCis8VTY2Q0I+IDxVNjZDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+abizAKKzxVODdCQz4gPFU4N0JDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J68MAorPFU4RDdFPiA8VThEN0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotb4wCis8VTk4NDk+IDxVOTg0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mhiTAKKzxVMzdBQz4gPFUzN0FDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj456sMAorPFUzOTA4PiA8VTM5MDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpIgwCis8VTQyMUM+IDxVNDIxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SInDAKKzxVNTEyQz4gPFU1MTJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YSsMAorPFU1NDIyPiA8VTU0MjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkKIwCis8VTU0MjM+IDxVNTQyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WQozYKKzxVNTUxQT4gPFU1NTFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZSaMQorPFU2MjhCPiA8VTYyOEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmioswCis8VTYzRkY+IDxVNjNGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aPvzQzCis8VTY0MDc+IDxVNjQwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aQhzAKKzxVNjRCMz4gPFU2NEIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pKzMAorPFU2QzgxPiA8VTZDODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsoEzNjEKKzxVNzAxOT4gPFU3MDE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54CZMAorPFU4M0UzPiA8VTgzRTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoj6MwCis8VTUwM0U+IDxVNTAzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAvjQ4ODYKKzxVNTBCRT4gPFU1MEJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YK+NTAKKzxVNTM3Rj4gPFU1MzdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y2/MTk5NworPFU1NTY4PiA8VTU1Njg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllagwCis8VTU3MEE+IDxVNTcwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WcijEKKzxVNUJDOD4gPFU1QkM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a+IMAorPFU2QzIyPiA8VTZDMjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsKI2MjMKKzxVNkMyQj4gPFU2QzJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rCrMgorPFU2REY4PiA8VTZERjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmt7gwCis8VTZFMDU+IDxVNkUwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a4hTE2ODU4MgorPFU3MkM1PiA8VTcyQzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPni4U0Cis8VTg3M0I+IDxVODczQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+icuzE4NAorPFU4RUZEPiA8VThFRkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPou70wCis8VThGMTU+IDxVOEYxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i8lTIxNgorPFU4RjdCPiA8VThGN0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovbszNDUwMworPFU5MEVDPiA8VTkwRUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg6wwCis8VTk3NTE+IDxVOTc1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mdkTAKKzxVOTc1Mj4gPFU5NzUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z2SMjIxNzEKKzxVOTgwMz4gPFU5ODAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aCDMgorPFU5QkQ2PiA8VTlCRDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpr5YwCis8VTlDQUQ+IDxVOUNBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+myrTEzCis8VTNCRjM+IDxVM0JGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OvszAKKzxVNDc3Qz4gPFU0NzdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J28MAorPFU0NzhEPiA8VTQ3OEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkno0wCis8VTRDOTQ+IDxVNEM5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SylDAKKzxVNTI2MD4gPFU1MjYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YmgMAorPFU1MkNEPiA8VTUyQ0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPli40xCis8VTU5MUQ+IDxVNTkxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WknTAKKzxVNjBDNT4gPFU2MEM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oOFOTUzODgKKzxVNjRDRT4gPFU2NENFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pOONTcxCis8VTY2NzQ+IDxVNjY3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aZtDIzMzAKKzxVNjY5Mj4gPFU2NjkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pqSMAorPFU2QTA4PiA8VTZBMDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqIgwCis8VTZBQTA+IDxVNkFBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aqoDYKKzxVNkI5MT4gPFU2QjkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q6RMAorPFU2QzMwPiA8VTZDMzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsLAxMDIKKzxVNzUyMD4gPFU3NTIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55SgMAorPFU5RUU1PiA8VTlFRTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpu6U3Cis8VUZBMTI+IDxVRkExMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI++okjAKKzxVM0RFQj4gPFUzREVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47erMAorPFU0NTFCPiA8VTQ1MUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklJswCis8VTRCRTc+IDxVNEJFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SvpzAKKzxVNUVCQz4gPFU1RUJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bq8MAorPFU1RUNFPiA8VTVFQ0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlu44wCis8VTZBQkU+IDxVNkFCRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aqvjAKKzxVODJEOD4gPFU4MkQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IuYMAorPFU4QUNCPiA8VThBQ0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoq4sxNzcKKzxVOEIyNj4gPFU4QjI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KymMAorPFU4QkY3PiA8VThCRjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor7czMDcwMQorPFU5ODc3PiA8VTk4Nzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpobc2MjMKKzxVNDJEQz4gPFU0MkRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IucMAorPFU0MzIwPiA8VTQzMjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjKAwCis8VTVFODY+IDxVNUU4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W6hjExMDI0Cis8VTYxNzY+IDxVNjE3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aFtjM0Cis8VTYzODU+IDxVNjM4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aOhTAKKzxVNkJCOD4gPFU2QkI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q64MAorPFU2QzZCPiA8VTZDNkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsaswCis8VTZGMDA+IDxVNkYwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a8gDAKKzxVNzg4Mz4gPFU3ODgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56KDMAorPFU3OEQ4PiA8VTc4RDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPno5gwCis8VTc4RUM+IDxVNzhFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ejrDg0Cis8VTdGNDQ+IDxVN0Y0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9hDY5Cis8VTdGNEE+IDxVN0Y0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9ijAKKzxVOTQ0Qj4gPFU5NDRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZGLMAorPFU5NzU4PiA8VTk3NTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnZgwCis8VTUzMTQ+IDxVNTMxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WMlDAKKzxVNzEyQT4gPFU3MTJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54SqMAorPFU3MThEPiA8VTcxOEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnho0wCis8VTkyOEU+IDxVOTI4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mKjjEKKzxVMzQ4Qz4gPFUzNDhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45KMMAorPFUzOUVEPiA8VTM5RUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjp60wCis8VTNCQUE+IDxVM0JBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OuqjAKKzxVM0RDMD4gPFUzREMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47eAMAorPFUzRjA3PiA8VTNGMDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvIcwCis8VTQxNDM+IDxVNDE0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SFgzAKKzxVNDFCMz4gPFU0MUIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IazMAorPFU0Mjg0PiA8VTQyODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkioQwCis8VTQ0RDY+IDxVNDRENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+STljAKKzxVNDZFQT4gPFU0NkVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JuqMAorPFU0ODNCPiA8VTQ4M0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoLswCis8VTUxMUQ+IDxVNTExRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WEnTAKKzxVNTM2RD4gPFU1MzZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y2tNAorPFU1Qjg2PiA8VTVCODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlroYwCis8VTYwRjg+IDxVNjBGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aDuDAKKzxVNjg0Rj4gPFU2ODRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qGPMAorPFU2OEZFPiA8VTY4RkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmo74wCis8VTZBNjk+IDxVNkE2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+apqTAKKzxVNzEyRD4gPFU3MTJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54StMAorPFU3MTYyPiA8VTcxNjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhaIwCis8VTc0M0M+IDxVNzQzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eQvDExNTAKKzxVNzQ5QT4gPFU3NDlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55KaMQorPFU3NENBPiA8VTc0Q0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnk4owCis8VTc3NTg+IDxVNzc1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+edmDAKKzxVNzc4Rj4gPFU3NzhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj556PMAorPFU3QTc3PiA8VTdBNzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqbc2MDcwCis8VTdBNzk+IDxVN0E3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+epuTM1NgorPFU3QUFFPiA8VTdBQUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqq4zMAorPFU3QUM2PiA8VTdBQzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnq4YwCis8VTdCM0I+IDxVN0IzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+esuzAKKzxVN0I0Nz4gPFU3QjQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj562HMgorPFU4MzE1PiA8VTgzMTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojJU0MgorPFU4NDg2PiA8VTg0ODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokoYwCis8VTg1RDE+IDxVODVEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iXkTAKKzxVODVFRD4gPFU4NUVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JetMAorPFU4NkU5PiA8VTg2RTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPom6kxMgorPFU4RDc5PiA8VThENzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotbkwCis8VThERUI+IDxVOERFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i3qzcKKzxVOEYwMT4gPFU4RjAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LyBMAorPFU5MDlCPiA8VTkwOUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgpsxMAorPFU0RTE4PiA8VTRFMTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuJgxMDAwCis8VTRFMjA+IDxVNEUyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S4oDAKKzxVNTA2Mj4gPFU1MDYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YGiMQorPFU1Nzc1PiA8VTU3NzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnbUwCis8VTVBOUQ+IDxVNUE5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WqnTAKKzxVNjA1OD4gPFU2MDU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oGYMAorPFU2OTc4PiA8VTY5Nzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpbg2Cis8VTc5Q0I+IDxVNzlDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+enizgyOTAKKzxVNzlDQz4gPFU3OUNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56eMMAorPFU3QTUwPiA8VTdBNTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqZAwCis8VTdCQ0Q+IDxVN0JDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+evjTAKKzxVN0RFNz4gPFU3REU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57enMAorPFU4NDI5PiA8VTg0Mjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokKkwCis8VTg2QUY+IDxVODZBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iarzk1Cis8VTg3NzU+IDxVODc3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+idtTAKKzxVODdENz4gPFU4N0Q3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J+XMAorPFU4ODI0PiA8VTg4MjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooKQwCis8VThEQTU+IDxVOERBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i2pTAKKzxVOTBCMT4gPFU5MEIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKxNzc3Cis8VTk3QTY+IDxVOTdBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mepjIKKzxVOTdBNz4gPFU5N0E3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z6nMAorPFU5QzBDPiA8VTlDMEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsIwwCis8VTlDMEQ+IDxVOUMwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mwjTAKKzxVOUM0Mz4gPFU5QzQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bGDMAorPFU5Q0M1PiA8VTlDQzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPps4U5MQorPFU5RDk2PiA8VTlEOTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptpYwCis8VTlFNTk+IDxVOUU1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m5mTAKKzxVOUY5RD4gPFU5RjlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b6dMAorPFUzNDI0PiA8VTM0MjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkKQwCis8VTM1NjQ+IDxVMzU2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OVpDAKKzxVMzc5Nz4gPFUzNzk3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj456XMAorPFUzN0M4PiA8VTM3Qzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjn4gwCis8VTM5Mzk+IDxVMzkzOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OkuTAKKzxVMzk2Mj4gPFUzOTYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46WiMAorPFUzOUU4PiA8VTM5RTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjp6gwCis8VTNCNUQ+IDxVM0I1RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OtnTAKKzxVM0RENT4gPFUzREQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47eVMAorPFUzRUFCPiA8VTNFQUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuqswCis8VTQyQjU+IDxVNDJCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SKtTAKKzxVNDNCRj4gPFU0M0JGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I6/MAorPFU0NzJBPiA8VTQ3MkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknKowCis8VTQ3RjU+IDxVNDdGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SftTAKKzxVNDhDNz4gPFU0OEM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KOHMAorPFU0OTFCPiA8VTQ5MUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpJswCis8VTRGQzU+IDxVNEZDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S/hTY3NgorPFU1MENCPiA8VTUwQ0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlg4swCis8VTUzQjk+IDxVNTNCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WOuTAKKzxVNTNGND4gPFU1M0Y0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y+0MgorPFU1NkRBPiA8VTU2REE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlm5oxMTgwCis8VTVEMzc+IDxVNUQzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W0tzAKKzxVNURFRj4gPFU1REVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bevNworPFU1REYwPiA8VTVERjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlt7AwCis8VTYyNEY+IDxVNjI0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aJjzAKKzxVNjczOT4gPFU2NzM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5py5MAorPFU2ODgyPiA8VTY4ODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmooIwCis8VTZCOEY+IDxVNkI4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aujzAKKzxVNkJFQz4gPFU2QkVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q+sNAorPFU2QzQyPiA8VTZDNDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsYIyODEzNworPFU2QzUzPiA8VTZDNTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsZMwCis8VTZDQzU+IDxVNkNDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+azhTY1Cis8VTZENTc+IDxVNkQ1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a1lzAKKzxVNkUxRT4gPFU2RTFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rieMAorPFU2RTZEPiA8VTZFNkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmua0wCis8VTcxNkE+IDxVNzE2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eFqjAKKzxVNzJCMD4gPFU3MkIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54qwMAorPFU3MzhDPiA8VTczOEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjowwCis8VTc0MDM+IDxVNzQwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eQgzE3NDAxCis8VTc0ODY+IDxVNzQ4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eShjAKKzxVNzZCMz4gPFU3NkIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55qzMAorPFU3NkRBPiA8VTc2REE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnm5owCis8VTdEMEM+IDxVN0QwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e0jDAKKzxVN0Q3Rj4gPFU3RDdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57W/MAorPFU4MDhEPiA8VTgwOEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogo0wCis8VTgxMTk+IDxVODExOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iEmTAKKzxVODJFQz4gPFU4MkVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IusMAorPFU4MzhEPiA8VTgzOEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojo0wCis8VTg2NkM+IDxVODY2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iZrDk5Cis8VTg2NkY+IDxVODY2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iZrzEKKzxVODZGNz4gPFU4NkY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ju3MAorPFU4NzY0PiA8VTg3NjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonaQ2Cis8VTg4RDg+IDxVODhEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ijmDI1OAorPFU4OUU5PiA8VTg5RTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPop6kwCis8VThBMDQ+IDxVOEEwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iohDAKKzxVOEEwNT4gPFU4QTA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KiFMAorPFU4Q0Q1PiA8VThDRDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPos5UwCis8VThENDc+IDxVOEQ0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i1hzAKKzxVOTAwRT4gPFU5MDBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YCOMAorPFU5MDExPiA8VTkwMTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgJExNworPFU5MDUyPiA8VTkwNTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgZIzOAorPFU5MTRCPiA8VTkxNEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphYsyMTAKKzxVOTFEQT4gPFU5MURBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YeaMAorPFU5MkI2PiA8VTkyQjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpirYwCis8VTlCODI+IDxVOUI4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mugjAKKzxVOUJDND4gPFU5QkM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a+EMAorPFU5QzNEPiA8VTlDM0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsL0wCis8VTlGM0Q+IDxVOUYzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m8vTAKKzxVM0YxMj4gPFUzRjEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47ySMAorPFU0N0FEPiA8VTQ3QUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknq0wCis8VTY0MUQ+IDxVNjQxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aQnTAKKzxVN0NENz4gPFU3Q0Q3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57OXNjQKKzxVNDdFQz4gPFU0N0VDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J+sMAorPFU0ODE3PiA8VTQ4MTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoJcwCis8VTRGMzk+IDxVNEYzOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S8uTAKKzxVNEY0OT4gPFU0RjQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L2JMQorPFU1MzI0PiA8VTUzMjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljKQwCis8VTUzM0E+IDxVNTMzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WMujEyNDQ5NAorPFU1NDdGPiA8VTU0N0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkb8wCis8VTU3NjU+IDxVNTc2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WdpTAKKzxVNUM0OD4gPFU1QzQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bGIMzI3MQorPFU1Qzk2PiA8VTVDOTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlspYxMTEKKzxVNUNBOD4gPFU1Q0E4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bKoMjgKKzxVNUNCND4gPFU1Q0I0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bK0MAorPFU1RDg3PiA8VTVEODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltocxCis8VTYxODg+IDxVNjE4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aGiDAKKzxVNjJCRT4gPFU2MkJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oq+MAorPFU2NTdBPiA8VTY1N0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlbowCis8VTc4MjA+IDxVNzgyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+egoDAKKzxVNzk1Qj4gPFU3OTVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56WbNTcKKzxVN0I0MT4gPFU3QjQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj562BMAorPFU3Q0FDPiA8VTdDQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsqwwCis8VTdEMzY+IDxVN0QzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e0tjAKKzxVODBFMD4gPFU4MEUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IOgMAorPFU4NkM2PiA8VTg2QzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPom4YxMjYKKzxVODZEMD4gPFU4NkQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JuQMTUwCis8VTg4QUE+IDxVODhBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iiqjAKKzxVODlCMD4gPFU4OUIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KawMAorPFU4OUI3PiA8VTg5Qjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoprcxMAorPFU4QUIzPiA8VThBQjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqrMwCis8VThCQ0U+IDxVOEJDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ivjjIKKzxVOEQ4Qj4gPFU4RDhCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LaLMTgzMworPFU4RUFGPiA8VThFQUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouq8xNDc2Cis8VThFQzA+IDxVOEVDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i7gDYKKzxVOTU3Qz4gPFU5NTdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZW8MAorPFU5NjM5PiA8VTk2Mzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmLkwCis8VTk5QzY+IDxVOTlDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mnhjAKKzxVOTlDOD4gPFU5OUM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aeIMAorPFU5QTQ1PiA8VTlBNDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqYUzOQorPFU5QTcxPiA8VTlBNzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqbEzODU3Cis8VTlBRjc+IDxVOUFGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mrtzAKKzxVOUI3Qz4gPFU5QjdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a28MAorPFU5QzM4PiA8VTlDMzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsLgwCis8VTlDNEI+IDxVOUM0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxizAKKzxVOUQ4Qz4gPFU5RDhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6baMMAorPFU5RUFGPiA8VTlFQUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuq8xCis8VTlFQjQ+IDxVOUVCND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6tDEyCis8VTlFQjk+IDxVOUVCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6uTEKKzxVOUVFMj4gPFU5RUUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6buiNjcKKzxVMzU4Nj4gPFUzNTg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45aGMAorPFUzNzM5PiA8VTM3Mzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnLkwCis8VTM4QzQ+IDxVMzhDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OjhDAKKzxVM0JFQj4gPFUzQkVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46+rMAorPFUzQzk4PiA8VTNDOTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjspgwCis8VTQwMjA+IDxVNDAyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SAoDAKKzxVNDA4Mj4gPFU0MDgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IKCMAorPFU0MkU3PiA8VTQyRTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPki6cwCis8VTQ3NjM+IDxVNDc2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SdozAKKzxVNDdBND4gPFU0N0E0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J6kMAorPFU0N0NBPiA8VTQ3Q0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkn4owCis8VTRENzY+IDxVNEQ3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S1tjAKKzxVNTJBQz4gPFU1MkFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YqsMzEKKzxVNTMzNz4gPFU1MzM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Yy3MAorPFU1RkMyPiA8VTVGQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv4IwCis8VTYxQzU+IDxVNjFDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aHhTAKKzxVNjIzNT4gPFU2MjM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oi1MAorPFU2NzEwPiA8VTY3MTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnJAwCis8VTZCMEI+IDxVNkIwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+asizEKKzxVNkMwRD4gPFU2QzBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rCNMQorPFU2REVEPiA8VTZERUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmt60wCis8VTZFMjA+IDxVNkUyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a4oDczNgorPFU3MDQ4PiA8VTcwNDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngYgwCis8VTcyMjA+IDxVNzIyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eIoDAKKzxVNzQ5Nj4gPFU3NDk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55KWMAorPFU3NEE5PiA8VTc0QTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkqkwCis8VTc2NkY+IDxVNzY2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eZrzMyCis8VTc4RjI+IDxVNzhGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ejsjMKKzxVN0M2Nz4gPFU3QzY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57GnMAorPFU3RkQxPiA8VTdGRDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnv5EwCis8VTdGRjU+IDxVN0ZGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e/tTAKKzxVODBDQT4gPFU4MENBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IOKMAorPFU4MURFPiA8VTgxREU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoh54wCis8VTgzQzM+IDxVODNDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPgzAKKzxVODQ0Qj4gPFU4NDRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JGLMAorPFU4NTU2PiA8VTg1NTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolZY2Cis8VTg2Mjc+IDxVODYyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iYpzUKKzxVODdCNj4gPFU4N0I2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J62MAorPFU4N0REPiA8VTg3REQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPon50wCis8VTg4Mzc+IDxVODgzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+igtzAKKzxVODg2Mj4gPFU4ODYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KGiNjEKKzxVOEM2Nj4gPFU4QzY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LGmMAorPFU4RUEzPiA8VThFQTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouqMwCis8VThFRTU+IDxVOEVFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i7pTAKKzxVOTQ3QT4gPFU5NDdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZG6MAorPFU5RDFEPiA8VTlEMUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptJ0wCis8VTlFMUM+IDxVOUUxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m4nDAKKzxVOUUzMj4gPFU5RTMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6biyMAorPFU5RjI5PiA8VTlGMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvKkwCis8VTREOUE+IDxVNEQ5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S2mjAKKzxVNTNENj4gPFU1M0Q2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y+WMjU4NzkKKzxVNUEzNj4gPFU1QTM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ai2MTYxMAorPFU2NkYyPiA8VTY2RjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmm7I5MDE1Cis8VTZENDA+IDxVNkQ0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a1gDAKKzxVN0FFQz4gPFU3QUVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56usMAorPFU4QTUzPiA8VThBNTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqZMwCis8VTlGNzI+IDxVOUY3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m9sjAKKzxVOUY4Qj4gPFU5RjhCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b6LMTYKKzxVMzlDMT4gPFUzOUMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46eBMAorPFUzQUUyPiA8VTNBRTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjq6IwCis8VTNDMjY+IDxVM0MyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OwpjAKKzxVNDA2Nj4gPFU0MDY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IGmMAorPFU0NEE3PiA8VTQ0QTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkqcwCis8VTQ4MTA+IDxVNDgxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SgkDAKKzxVNTIxRT4gPFU1MjFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YieMAorPFU1M0JBPiA8VTUzQkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljrowCis8VTUzQkI+IDxVNTNCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WOuzE5MDY3MQorPFU4OUJCPiA8VTg5QkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoprswCis8VTg5RDE+IDxVODlEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+inkTQ1MworPFU4REEzPiA8VThEQTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotqM5NDA0Cis8VTk1QjQ+IDxVOTVCND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mWtDAKKzxVOTVDMz4gPFU5NUMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZeDMQorPFU5NjEyPiA8VTk2MTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmJI1MAorPFU5RUFFPiA8VTlFQUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuq4wCis8VTlGMDE+IDxVOUYwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m8gTAKKzxVNjIwQz4gPFU2MjBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oiMMzM3Cis8VTU3MDg+IDxVNTcwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WciDUzNzQKKzxVNUYyRT4gPFU1RjJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5byuMAorPFU2MDlCPiA8VTYwOUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgps2Cis8VTYwRDM+IDxVNjBEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aDkzAKKzxVNjhFQz4gPFU2OEVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qOsMAorPFU3RDVGPiA8VTdENUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntZ8xCis8VTM0QjA+IDxVMzRCMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OSsDAKKzxVMzdFOD4gPFUzN0U4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45+oMAorPFUzN0VCPiA8VTM3RUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjn6swCis8VTQwMkM+IDxVNDAyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SArDAKKzxVNDQ0Rj4gPFU0NDRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JGPMAorPFU0N0QyPiA8VTQ3RDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkn5IwCis8VTQ4MzA+IDxVNDgzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SgsDAKKzxVNEY3QT4gPFU0RjdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L26MAorPFU1MTY4PiA8VTUxNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhag2NzkwMworPFU1OUZFPiA8VTU5RkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlp74wCis8VTVBNTg+IDxVNUE1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WpmDAKKzxVNUI0OT4gPFU1QjQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a2JMAorPFU1Q0QxPiA8VTVDRDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPls5EwCis8VTVEQ0Y+IDxVNURDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W3jzAKKzxVNjA2RT4gPFU2MDZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oGuMAorPFU2MkYzPiA8VTYyRjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmi7MzMDg1Cis8VTY0M0M+IDxVNjQzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aQvDAKKzxVNjc0Mz4gPFU2NzQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p2DMjAwMDQKKzxVNkEyOT4gPFU2QTI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qipMAorPFU2QjBBPiA8VTZCMEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrIoxMTIKKzxVNkNDOT4gPFU2Q0M5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rOJMzM2MgorPFU2RDI0PiA8VTZEMjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtKQwCis8VTZFNzY+IDxVNkU3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a5tjAKKzxVNzA2NT4gPFU3MDY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54GlMAorPFU3Mjc3PiA8VTcyNzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnibcwCis8VTcyODg+IDxVNzI4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eKiDAKKzxVNzJBQz4gPFU3MkFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54qsNzA4Cis8VTc0NTQ+IDxVNzQ1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eRlDAKKzxVNzVDQT4gPFU3NUNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55eKMjE1Cis8VTc4NDI+IDxVNzg0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ehgjAKKzxVN0I0Qz4gPFU3QjRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj562MMAorPFU3RTEzPiA8VTdFMTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuJMwCis8VTgzNDM+IDxVODM0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iNgzEyOTYKKzxVODQ3Mj4gPFU4NDcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JGyMAorPFU4NzM3PiA8VTg3Mzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonLc0NzYKKzxVODgzOD4gPFU4ODM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KC4MAorPFU4OUUwPiA8VTg5RTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPop6AwCis8VThBNkU+IDxVOEE2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iprjE4Cis8VThCRTA+IDxVOEJFMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ivoDE4NQorPFU4REU3PiA8VThERTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPot6cwCis8VThFMjE+IDxVOEUyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i4oTEKKzxVOEYwNz4gPFU4RjA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LyHMAorPFU4RjgxPiA8VThGODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovoEwCis8VTkxOUI+IDxVOTE5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mGmzEzCis8VTkyOTM+IDxVOTI5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mKkzAKKzxVOTRFOD4gPFU5NEU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZOoMzgKKzxVOTg3ND4gPFU5ODc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aG0MAorPFU5OEE3PiA8VTk4QTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoqcxMjYKKzxVOTlFOT4gPFU5OUU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aepMAorPFU5QTIxPiA8VTlBMjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqKEwCis8VTlCMDg+IDxVOUIwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+msiDk0Cis8VTlDMDE+IDxVOUMwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mwgTAKKzxVOUNDOD4gPFU5Q0M4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bOIMAorPFU5RjY0PiA8VTlGNjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvaQwCis8VTQyOEU+IDxVNDI4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SKjjAKKzxVNTQ1Rj4gPFU1NDVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZGfMAorPFU2QzcxPiA8VTZDNzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsbEwCis8VTcyQUQ+IDxVNzJBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eKrTM2Cis8VTc0MDQ+IDxVNzQwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eQhDAKKzxVNzUzRD4gPFU3NTNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55S9MAorPFU3NTRFPiA8VTc1NEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlY4yCis8VTdEQTM+IDxVN0RBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e2ozAKKzxVN0VGQj4gPFU3RUZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57u7NjMKKzxVODY0Nz4gPFU4NjQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JmHMAorPFU0MTEwPiA8VTQxMTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhJAwCis8VTUyMzg+IDxVNTIzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WIuDg0NworPFU1MjlEPiA8VTUyOUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlip0zOTY5Cis8VTUyRTc+IDxVNTJFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WLpzAKKzxVNTJGOD4gPFU1MkY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Yu4MzMKKzxVNzBDNz4gPFU3MEM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54OHMAorPFU3Mjc2PiA8VTcyNzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnibYwCis8VTdENkQ+IDxVN0Q2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e1rTAKKzxVN0YzQT4gPFU3RjNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57y6Nzk1MworPFU3RjNDPiA8VTdGM0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvLwwCis8VTg0OUI+IDxVODQ5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iSmzAKKzxVOTVENT4gPFU5NUQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZeVMworPFU5NjE5PiA8VTk2MTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmJkyNTEKKzxVNzYzOD4gPFU3NjM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55i4NjI1Cis8VTM1NDE+IDxVMzU0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OVgTAKKzxVM0E0MT4gPFUzQTQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46mBMAorPFUzQzBDPiA8VTNDMEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsIwwCis8VTNDNEI+IDxVM0M0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OxizAKKzxVM0M3Rj4gPFUzQzdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47G/MAorPFUzRDM2PiA8VTNEMzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtLYwCis8VTNGQTE+IDxVM0ZBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O+oTAKKzxVNDFDRT4gPFU0MUNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IeOMAorPFU0OUFDPiA8VTQ5QUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpqwwCis8VTQ5RkY+IDxVNDlGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SnvzAKKzxVNTM3ND4gPFU1Mzc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y20NDk3NTUKKzxVNTM3Qj4gPFU1MzdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y27NDk3Cis8VTU3QzY+IDxVNTdDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfhjAKKzxVNUQwNT4gPFU1RDA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bSFMAorPFU2MEFCPiA8VTYwQUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgqsxCis8VTYxMjg+IDxVNjEyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aEqDAKKzxVNjE2ND4gPFU2MTY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oWkMQorPFU2NDA5PiA8VTY0MDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkIkwCis8VTY5Qjc+IDxVNjlCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+amtzg5Cis8VTZCQzM+IDxVNkJDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+avgzAKKzxVNzA0RD4gPFU3MDREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54GNMAorPFU3MUU5PiA8VTcxRTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnh6kwCis8VTc0Mzc+IDxVNzQzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eQtzAKKzxVNzZCNT4gPFU3NkI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55q1MAorPFU3ODVFPiA8VTc4NUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoZ4wCis8VTc4NkU+IDxVNzg2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ehrjI2MDA2Cis8VTc4OEY+IDxVNzg4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eijzAKKzxVNzhCQT4gPFU3OEJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56K6MjEwCis8VTc4QkI+IDxVNzhCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eiuzAKKzxVNzkxMD4gPFU3OTEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56SQMAorPFU3OTJEPiA8VTc5MkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpK0wCis8VThEOUU+IDxVOEQ5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i2njAKKzxVOTVDQj4gPFU5NUNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZeLMAorPFU5NjE1PiA8VTk2MTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmJUzMgorPFU5NkMwPiA8VTk2QzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpm4AxNTUxCis8VTlFNEE+IDxVOUU0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m5ijI4MworPFU1OTBCPiA8VTU5MEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpIswCis8VTVDRUU+IDxVNUNFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WzrjAKKzxVOEUwNj4gPFU4RTA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LiGMAorPFU5MDIxPiA8VTkwMjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgKE4MQorPFUzQThBPiA8VTNBOEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqoowCis8VTNGQ0Y+IDxVM0ZDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O/jzAKKzxVNEI3RD4gPFU0QjdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K29MAorPFU1QkFEPiA8VTVCQUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrq0wCis8VTVFMkM+IDxVNUUyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W4rDAKKzxVN0ZBMz4gPFU3RkEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj576jMQorPFU3RkE0PiA8VTdGQTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvqQxNDU1MworPFU4OEQ5PiA8VTg4RDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo5kzMzgzCis8VTg4RTA+IDxVODhFMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ijoDAKKzxVMzcyMz4gPFUzNzIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45yjMAorPFUzQ0FGPiA8VTNDQUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsq8wCis8VTNFMTA+IDxVM0UxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O4kDAKKzxVM0Y4Nj4gPFUzRjg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj476GMAorPFU0NDU5PiA8VTQ0NTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkZkwCis8VTQ1ODQ+IDxVNDU4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SWhDAKKzxVNEFDNz4gPFU0QUM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KuHMAorPFU1NjJCPiA8VTU2MkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmKswCis8VTcxMzY+IDxVNzEzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eEtjE1Mzk1MAorPFU3MUMzPiA8VTcxQzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnh4MzMTg2Cis8VTdFNEU+IDxVN0U0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5jjAKKzxVODBCMD4gPFU4MEIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IKwMAorPFU4NjkyPiA8VTg2OTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPompIwCis8VTg2QTY+IDxVODZBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iapjAKKzxVODZCQT4gPFU4NkJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Jq6MgorPFU4NkM1PiA8VTg2QzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPom4UwCis8VTg4N0I+IDxVODg3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ihuzAKKzxVODg4Nz4gPFU4ODg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KKHMAorPFU4OEExPiA8VTg4QTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooqEwCis8VTlBRTU+IDxVOUFFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mrpTAKKzxVOUFFRj4gPFU5QUVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6auvMTU5Cis8VTM2QTk+IDxVMzZBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OaqTAKKzxVM0JENz4gPFUzQkQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46+XMAorPFUzRkY1PiA8VTNGRjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjv7UwCis8VTQzODM+IDxVNDM4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SOgzAKKzxVNDRBMz4gPFU0NEEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JKjMAorPFU0OEY4PiA8VTQ4Rjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPko7gwCis8VTQ5MjE+IDxVNDkyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SkoTAKKzxVNTE4ND4gPFU1MTg0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YaEMAorPFU1MTg5PiA8VTUxODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhok0OTIKKzxVNTQ2NT4gPFU1NDY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZGlMAorPFU1OUNDPiA8VTU5Q0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlp4wwCis8VTVBQTM+IDxVNUFBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WqozAKKzxVNjdEMz4gPFU2N0QzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p+TMzg2NworPFU2QTZBPiA8VTZBNkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqaowCis8VTczQzM+IDxVNzNDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ePgzAKKzxVODJEMj4gPFU4MkQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IuSMjgKKzxVNTZCNz4gPFU1NkI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Zq3MjEzMQorPFUzNjgyPiA8VTM2ODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmoIwCis8VTQyNzQ+IDxVNDI3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SJtDAKKzxVNTEzND4gPFU1MTM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YS0MAorPFU1MkY3PiA8VTUyRjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPli7cwCis8VTcwM0M+IDxVNzAzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eAvDAKKzxVNzM3RD4gPFU3MzdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5429MAorPFU3NEU0PiA8VTc0RTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnk6Q0NworPFU3OUIzPiA8VTc5QjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnprMyMworPFU3QTYzPiA8VTdBNjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqaMwCis8VTdBNzA+IDxVN0E3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+epsDIKKzxVODYxOD4gPFU4NjE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JiYMAorPFU4ODMwPiA8VTg4MzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooLAwCis8VThFOUY+IDxVOEU5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6nzAKKzxVOUIyND4gPFU5QjI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aykMAorPFU1OENDPiA8VTU4Q0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlo4wwCis8VTU4RTQ+IDxVNThFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WjpDU2NQorPFU2NTE4PiA8VTY1MTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlJg1MTAKKzxVNzIxOT4gPFU3MjE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54iZMAorPFU2MUY5PiA8VTYxRjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmh7kwCis8VThCNzI+IDxVOEI3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+itsjAKKzxVOEI5Mz4gPFU4QjkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K6TMzYyCis8VThCQTk+IDxVOEJBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iuqTUzNTYyCis8VTNFNUI+IDxVM0U1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O5mzAKKzxVNEFERT4gPFU0QURFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KueMAorPFU1QTA2PiA8VTVBMDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqIY4OAorPFU1QjA4PiA8VTVCMDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrIgwCis8VTgzNUI+IDxVODM1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iNmzQKKzxVODU1OD4gPFU4NTU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JWYMAorPFU4OTUzPiA8VTg5NTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopZMwCis8VTk5NTI+IDxVOTk1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mlkjYKKzxVOTk3Nj4gPFU5OTc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aW2MTY2NgorPFUzNDcxPiA8VTM0NzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkbEwCis8VTYyNzA+IDxVNjI3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aJsDMwMjAKKzxVNjRGRT4gPFU2NEZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pO+MjYKKzxVN0U1RT4gPFU3RTVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57meMzQKKzxVN0VENT4gPFU3RUQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57uVMzk0NQorPFU5MDc2PiA8VTkwNzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgbYwCis8VTk2QTI+IDxVOTZBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+maojAKKzxVNjBGOT4gPFU2MEY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oO5MjAzNworPFU2RTAzPiA8VTZFMDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuIMwCis8VTcwRUQ+IDxVNzBFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eDrTIzMTg0Cis8VTcxQjE+IDxVNzFCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eGsTEzMgorPFU0MzNFPiA8VTQzM0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjL4wCis8VTREMjY+IDxVNEQyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S0pjAKKzxVNEVCQT4gPFU0RUJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Lq6NTI1NzcxCis8VTRFQkI+IDxVNEVCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6uzk2Cis8VTRFQzE+IDxVNEVDMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S7gTM1MDEKKzxVNThFQz4gPFU1OEVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aOsMTAwCis8VTVGQzg+IDxVNUZDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W/iDAKKzxVNUZDRT4gPFU1RkNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b+OMAorPFU2NzMyPiA8VTY3MzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnLIwCis8VTc5QzI+IDxVNzlDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+engjAKKzxVN0VCND4gPFU3RUI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57q0MAorPFU4MkEyPiA8VTgyQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiqIwCis8VTkyMTM+IDxVOTIxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mIkzAKKzxVOTI4Qj4gPFU5MjhCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YqLMQorPFU5QjVDPiA8VTlCNUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprZwwCis8VTlEMzk+IDxVOUQzOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m0uTAKKzxVMzhGQz4gPFUzOEZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46O8MAorPFU0M0Q1PiA8VTQzRDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkj5UwCis8VTQzRjA+IDxVNDNGMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SPsDAKKzxVNEI0Mz4gPFU0QjQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K2DMAorPFU1RkNEPiA8VTVGQ0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv405NjM3Cis8VTY4MjA+IDxVNjgyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+agoDAKKzxVNjgyMz4gPFU2ODIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qCjMAorPFU2OEVGPiA8VTY4RUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmo68wCis8VTc5Rjk+IDxVNzlGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+enuTAKKzxVN0ExND4gPFU3QTE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56iUMTAyCis8VTgxNEQ+IDxVODE0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iFjTAKKzxVODM0Rj4gPFU4MzRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I2PNDgKKzxVODM3NT4gPFU4Mzc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I21MAorPFUzODM0PiA8VTM4MzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoLQwCis8VTNEQjU+IDxVM0RCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O2tTAKKzxVM0UzRT4gPFUzRTNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47i+MAorPFU0MDNDPiA8VTQwM0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgLwwCis8VTQxRUU+IDxVNDFFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SHrjAKKzxVNDJENT4gPFU0MkQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IuVMAorPFU0RURFPiA8VTRFREU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPku540NQorPFU0RUVEPiA8VTRFRUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPku60wCis8VTRFRkI+IDxVNEVGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S7uzQyMjk5Cis8VTUyMDM+IDxVNTIwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WIgzYwMworPFU1MjA0PiA8VTUyMDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliIQwCis8VTU5OEE+IDxVNTk4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WmijMyCis8VTU5RDk+IDxVNTlEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WnmTAKKzxVNUM3Qj4gPFU1QzdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bG7MAorPFU2MjY4PiA8VTYyNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiagwCis8VTY3NTI+IDxVNjc1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+adkjAKKzxVNjg5NT4gPFU2ODk1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qKVMAorPFU3MjYzPiA8VTcyNjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniaMwCis8VTdEMDk+IDxVN0QwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e0iTAKKzxVN0QxRD4gPFU3RDFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57SdMAorPFU3RDREPiA8VTdENEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntY0yCis8VTdFQUI+IDxVN0VBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e6qzEyNAorPFU4MDk1PiA8VTgwOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogpUwCis8VTg0NUE+IDxVODQ1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iRmjc1Cis8VTg4N0Q+IDxVODg3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ihvTI4Cis8VTg4QjU+IDxVODhCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iitTAKKzxVOEExMj4gPFU4QTEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KiSMAorPFU4QThEPiA8VThBOEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqo0zMzQKKzxVOEJBND4gPFU4QkE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K6kNDU4NDEKKzxVOEJCMT4gPFU4QkIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K6xMAorPFU4RUQ0PiA8VThFRDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPou5QwCis8VThFRTA+IDxVOEVFMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i7oDAKKzxVOEY2Qj4gPFU4RjZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L2rOAorPFU5NzZEPiA8VTk3NkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpna0wCis8VTk3NzE+IDxVOTc3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mdsTAKKzxVOTdDQz4gPFU5N0NDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z+MMworPFU5N0U3PiA8VTk3RTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpn6c0MjkKKzxVOThFQT4gPFU5OEVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aOqMAorPFU5OTAxPiA8VTk5MDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppIEwCis8VTk5NkE+IDxVOTk2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mlqjQ3Cis8VTlENDA+IDxVOUQ0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m1gDAKKzxVNjI1ND4gPFU2MjU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5omUMzgzOQorPFUzQjQxPiA8VTNCNDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrYEwCis8VTNFQjE+IDxVM0VCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O6sTAKKzxVNDEyNz4gPFU0MTI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ISnMAorPFU0NkFFPiA8VTQ2QUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmq4wCis8VTRFQ0Q+IDxVNEVDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S7jTE1Njc1Cis8VTc5M0Q+IDxVNzkzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ekvTQ0Cis8VThGQjg+IDxVOEZCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i+uDAKKzxVOTY3RT4gPFU5NjdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Zm+MAorPFU4MkJGPiA8VTgyQkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoir8wCis8VTQ0QTQ+IDxVNDRBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SSpDAKKzxVNTZGOD4gPFU1NkY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Zu4MAorPFU2NUU1PiA8VTY1RTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPml6UxMDk0NDAKKzxVNkMxQz4gPFU2QzFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rCcMAorPFU4ODc1PiA8VTg4NzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoobUwCis8VTkyMjQ+IDxVOTIyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mIpDAKKzxVOTlCOT4gPFU5OUI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aa5MAorPFU5QTcyPiA8VTlBNzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqbIwCis8VTM2MDc+IDxVMzYwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OYhzAKKzxVMzc1MD4gPFUzNzUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj452QMAorPFUzOEQxPiA8VTM4RDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjo5EwCis8VTNCNUM+IDxVM0I1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OtnDAKKzxVM0M5Mz4gPFUzQzkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47KTMAorPFUzQ0E4PiA8VTNDQTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsqgwCis8VTNFOEU+IDxVM0U4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O6jjAKKzxVM0YzOD4gPFUzRjM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47y4MAorPFU0MUMwPiA8VTQxQzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkh4AwCis8VTQxRUY+IDxVNDFFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SHrzAKKzxVNDIzNj4gPFU0MjM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ii2MAorPFU0NjJDPiA8VTQ2MkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmKwwCis8VTQ4MUM+IDxVNDgxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SgnDAKKzxVNDg0Nj4gPFU0ODQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KGGMAorPFU0ODY1PiA8VTQ4NjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoaUwCis8VTQ5MEE+IDxVNDkwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SkijAKKzxVNEE3OD4gPFU0QTc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Km4MAorPFU1QUI2PiA8VTVBQjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqrYwCis8VTVCQjk+IDxVNUJCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WuuTI4MTg5Cis8VTVENTg+IDxVNUQ1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W1mDM0Cis8VTVENjQ+IDxVNUQ2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W1pDAKKzxVNURCOD4gPFU1REI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ba4MAorPFU2MjBFPiA8VTYyMEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiI4zNTAKKzxVNjZFNz4gPFU2NkU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5punMAorPFU2ODA0PiA8VTY4MDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoIQwCis8VTY5OTU+IDxVNjk5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+amlTE5MgorPFU2OUFFPiA8VTY5QUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpq40NworPFU2OUI1PiA8VTY5QjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmprUwCis8VTZCRTc+IDxVNkJFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+avpzAKKzxVNkVCNj4gPFU2RUI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rq2ODA2Cis8VTcwMUM+IDxVNzAxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eAnDAKKzxVNzBGRj4gPFU3MEZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54O/MAorPFU3MTk0PiA8VTcxOTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhpQxNTA1Cis8VTcyMDM+IDxVNzIwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eIgzAKKzxVNzJFOD4gPFU3MkU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54uoNgorPFU3NDYyPiA8VTc0NjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkaIwCis8VTdBNDE+IDxVN0E0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+epgTAKKzxVN0Q2OD4gPFU3RDY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57WoNAorPFU3RTE5PiA8VTdFMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuJkwCis8VTdFRDI+IDxVN0VEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e7kjk4NAorPFU3RkEyPiA8VTdGQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvqIwCis8VTgwOUM+IDxVODA5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iCnDAKKzxVODMxOT4gPFU4MzE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IyZMAorPFU4MzM4PiA8VTgzMzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojLg1NDQKKzxVODM2Mz4gPFU4MzYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I2jNTY5MworPFU4NEM5PiA8VTg0Qzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPok4kxNzA0Cis8VTg3N0U+IDxVODc3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+idvjIKKzxVODc4RD4gPFU4NzhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J6NMzgxOQorPFU4NzhFPiA8VTg3OEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPono4wCis8VTg4MTE+IDxVODgxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+igkTEKKzxVODkyMz4gPFU4OTIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KSjMAorPFU5Mzk0PiA8VTkzOTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjpQyMDcKKzxVOTNCOT4gPFU5M0I5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y65MAorPFU5NTU1PiA8VTk1NTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplZU5MzcKKzxVOTlFNT4gPFU5OUU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aelMAorPFU5QUY2PiA8VTlBRjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpq7YwCis8VTlDMkI+IDxVOUMyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mwqzEKKzxVOUREQj4gPFU5RERCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bebMAorPFUzQzlEPiA8VTNDOUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsp0wCis8VTQ4ODc+IDxVNDg4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SihzAKKzxVNTA4Nz4gPFU1MDg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YKHMAorPFU1MTk3PiA8VTUxOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhpcyNDAKKzxVNUI4Mj4gPFU1QjgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a6CMAorPFU2NDExPiA8VTY0MTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkJEwCis8VTZDMDQ+IDxVNkMwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+awhDAKKzxVOUQyNz4gPFU5RDI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bSnMAorPFUzNUJCPiA8VTM1QkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlrswCis8VTNGNjU+IDxVM0Y2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O9pTAKKzxVNDQxMz4gPFU0NDEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JCTMAorPFU0OUY3PiA8VTQ5Rjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkp7cwCis8VTRDMDY+IDxVNEMwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SwhjAKKzxVNUE4Mz4gPFU1QTgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aqDMAorPFU2M0M5PiA8VTYzQzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmj4kxMzc0Cis8VTY3RDQ+IDxVNjdEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aflDc3NzAKKzxVNjk3QT4gPFU2OTdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qW6MAorPFU2QzkxPiA8VTZDOTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmspEwCis8VTZFMTg+IDxVNkUxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a4mDAKKzxVNzQ0OD4gPFU3NDQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55GIMAorPFU3NEM3PiA8VTc0Qzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnk4cwCis8VTc5Qjg+IDxVNzlCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+emuDAKKzxVN0NDNT4gPFU3Q0M1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57OFNjcKKzxVODE2Qz4gPFU4MTZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IWsMAorPFU4NDQ3PiA8VTg0NDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokYc1NDcKKzxVODc1QT4gPFU4NzVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J2aMAorPFU4RTQyPiA8VThFNDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouYIxOTIKKzxVOEYyRT4gPFU4RjJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LyuMAorPFU5MzUyPiA8VTkzNTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjZIwCis8VTk3QTM+IDxVOTdBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+meozE4Cis8VTk3RDY+IDxVOTdENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mfljAKKzxVOUEyNT4gPFU5QTI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ailMAorPFU5QzA3PiA8VTlDMDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsIcwCis8VTlEOTQ+IDxVOUQ5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m2lDAKKzxVNzE2Mz4gPFU3MTYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54WjMAorPFU3Qzg4PiA8VTdDODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsogwCis8VTkzNTU+IDxVOTM1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mNlTAKKzxVNDEzRT4gPFU0MTNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IS+MAorPFU1QjhEPiA8VTVCOEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlro0wCis8VTgwODk+IDxVODA4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iCiTExMjE0Cis8VTNBMEU+IDxVM0EwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OojjAKKzxVM0U1OD4gPFUzRTU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47mYMAorPFU0MkM4PiA8VTQyQzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPki4gwCis8VTRDMzA+IDxVNEMzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SwsDAKKzxVNTA0ND4gPFU1MDQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YGEMAorPFU1MTEyPiA8VTUxMTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhJIxNjc3Cis8VTU2ODU+IDxVNTY4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WahTIxMQorPFU1OTgyPiA8VTU5ODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpoIxMzAxMTIKKzxVNUI3QT4gPFU1QjdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a26MTQ0Cis8VTVFMjQ+IDxVNUUyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W4pDAKKzxVNjZEOD4gPFU2NkQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5puYMAorPFU2ODQ3PiA8VTY4NDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoYcwCis8VTZFMkE+IDxVNkUyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a4qjAKKzxVNkZFMT4gPFU2RkUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r+hMjA1Cis8VTcxRjg+IDxVNzFGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHuDAKKzxVN0I0RT4gPFU3QjRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj562OMAorPFU4MzM5PiA8VTgzMzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojLk1ODgKKzxVODU2MD4gPFU4NTYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JWgMAorPFU4NUI3PiA8VTg1Qjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolrcxCis8VTg4MTU+IDxVODgxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iglTI2NgorPFU4OEJEPiA8VTg4QkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoor0wCis8VTg5NjY+IDxVODk2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ilpjQKKzxVOTA5QT4gPFU5MDlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKaMAorPFU5MUI5PiA8VTkxQjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphrkwCis8VTkyQTM+IDxVOTJBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mKozAKKzxVOTRGNz4gPFU5NEY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZO3NgorPFU5ODZDPiA8VTk4NkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoawwCis8VTk4QTU+IDxVOThBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mipTMKKzxVOUM2Qz4gPFU5QzZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bGsMAorPFU5RDExPiA8VTlEMTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptJEwCis8VTlEM0Q+IDxVOUQzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m0vTAKKzxVMzlCQT4gPFUzOUJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46a6MAorPFU0RTczPiA8VTRFNzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkubMyMTkxCis8VTRGOUU+IDxVNEY5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+njAKKzxVNjRFOT4gPFU2NEU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pOpMAorPFU2QzVEPiA8VTZDNUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsZ04NjkKKzxVODA5Nz4gPFU4MDk3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IKXMAorPFU4RkIxPiA8VThGQjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovrEyNjY1Cis8VTUwODk+IDxVNTA4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WCiTQ1Cis8VTUxNjU+IDxVNTE2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WFpTQ5MDc2Cis8VTVBQjc+IDxVNUFCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WqtzAKKzxVNkQzMz4gPFU2RDMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rSzMgorPFU2RUJEPiA8VTZFQkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmur0xNAorPFU3RTFGPiA8VTdFMUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuJ8wCis8VTdGMUI+IDxVN0YxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e8mzMzCis8VTg0RDA+IDxVODREMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iTkDUKKzxVODkyNT4gPFU4OTI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KSlMzc0Cis8VTkxMEY+IDxVOTEwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mEjzAKKzxVNDRGND4gPFU0NEY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JO0MAorPFU1ODI3PiA8VTU4Mjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloKcwCis8VTU4RDY+IDxVNThENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WjljEKKzxVNjQ4Qj4gPFU2NDhCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pKLMAorPFUzRjMxPiA8VTNGMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvLEwCis8VTNGNkQ+IDxVM0Y2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O9rTAKKzxVNDc4Mj4gPFU0NzgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J6CMAorPFU0QUFEPiA8VTRBQUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqq0wCis8VTVBODY+IDxVNUE4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WqhjAKKzxVNjcwQT4gPFU2NzBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pyKNQorPFU3NDRDPiA8VTc0NEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkYwwCis8VTc0QzA+IDxVNzRDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eTgDAKKzxVNzg5RD4gPFU3ODlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56KdMAorPFU3OTFEPiA8VTc5MUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpJ0wCis8VTdEREI+IDxVN0REQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3mzAKKzxVODAwRT4gPFU4MDBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ICOMAorPFU4MTVEPiA8VTgxNUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohZ0wCis8VTg3NjE+IDxVODc2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+idoTAKKzxVOEVERj4gPFU4RURGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LufNDEKKzxVOEYyRD4gPFU4RjJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LytMAorPFU4RjZGPiA8VThGNkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPova8xMzIyNAorPFU5NjJFPiA8VTk2MkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmK45NTMKKzxVM0I4Mz4gPFUzQjgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj466DMAorPFU0MTUxPiA8VTQxNTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhZEwCis8VTVBNTE+IDxVNUE1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WpkTAKKzxVNzUyND4gPFU3NTI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55SkMAorPFU3RENDPiA8VTdEQ0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnt4wwCis8VTg1NjQ+IDxVODU2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iVpDI1Cis8VTYwRTI+IDxVNjBFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aDojAKKzxVNjg3NT4gPFU2ODc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qG1MAorPFU2QTY0PiA8VTZBNjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqaQwCis8VTdFNjA+IDxVN0U2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5oDAKKzxVODU0QT4gPFU4NTRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JWKNjg0Cis8VTg1NEI+IDxVODU0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iVizQKKzxVODYwMj4gPFU4NjAyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JiCMAorPFU4NjAzPiA8VTg2MDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomIMwCis8VTM0Rjk+IDxVMzRGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OTuTAKKzxVMzZGMT4gPFUzNkYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45uxMAorPFUzQUFCPiA8VTNBQUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqqswCis8VTNDOEE+IDxVM0M4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OyijAKKzxVNDMzQz4gPFU0MzNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Iy8MAorPFU0NEYyPiA8VTQ0RjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkk7IwCis8VTUzRTE+IDxVNTNFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPoTEKKzxVNThFMT4gPFU1OEUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aOhMAorPFU2Nzk4PiA8VTY3OTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnpgxCis8VTY4QzE+IDxVNjhDMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ajgTAKKzxVNkM2RD4gPFU2QzZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rGtMAorPFU3NDVFPiA8VTc0NUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkZ40MTEzCis8VTc3N0Y+IDxVNzc3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+edvzQ2NQorPFU4MkFFPiA8VTgyQUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiq44OQorPFU4NjhCPiA8VTg2OEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomosxNAorPFU4NzM5PiA8VTg3Mzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonLkwCis8VTkyQjM+IDxVOTJCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mKszEwCis8VTkyRUQ+IDxVOTJFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mLrTAKKzxVOTUxMD4gPFU5NTEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZSQMTcwNAorPFU3Mjg5PiA8VTcyODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniokwCis8VTc3QTQ+IDxVNzdBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eepDAKKzxVMzgwOD4gPFUzODA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46CIMAorPFU0OTlFPiA8VTQ5OUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpp4wCis8VTZBNEQ+IDxVNkE0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+apjTAKKzxVNkRBNj4gPFU2REE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ramMzM4OQorPFU2RjY0PiA8VTZGNjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvaQxNQorPFU4MUI2PiA8VTgxQjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohrYwCis8VTk1OEY+IDxVOTU4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mWjzAKKzxVOTVBMD4gPFU5NUEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZagMAorPFU5NUYwPiA8VTk1RjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl7A5MAorPFU0NDFFPiA8VTQ0MUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkJ4wCis8VTUwNEM+IDxVNTA0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WBjDI0MworPFU1M0QyPiA8VTUzRDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlj5IwCis8VTVGMzE+IDxVNUYzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W8sTc2NzAKKzxVNjk0OT4gPFU2OTQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qWJMAorPFU3MTJCPiA8VTcxMkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhKswCis8VTcyMDc+IDxVNzIwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eIhzMKKzxVN0JBQz4gPFU3QkFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj566sNQorPFU3QkRCPiA8VTdCREI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnr5swCis8VTgyRTU+IDxVODJFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iLpTE2MTIzCis8VTg0QkI+IDxVODRCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iSuzQKKzxVOTEwMD4gPFU5MTAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YSAMAorPFU5QzE5PiA8VTlDMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsJkwCis8VTlDMkY+IDxVOUMyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mwrzAKKzxVOURCOD4gPFU5REI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ba4MAorPFU0RUU4PiA8VTRFRTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPku6gxMjMKKzxVMzQ4RT4gPFUzNDhFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45KOMAorPFU0MjlCPiA8VTQyOUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkipswCis8VTY0OTI+IDxVNjQ5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aSkjIwMDAKKzxVNkQxMj4gPFU2RDEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rSSMjQ3OAorPFU2Rjc1PiA8VTZGNzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvbUwCis8VTcwNTE+IDxVNzA1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eBkTE3Cis8VThBMkY+IDxVOEEyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iorzAKKzxVOTc3OD4gPFU5Nzc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z24OAorPFUzQUFBPiA8VTNBQUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqqowCis8VTNDRDA+IDxVM0NEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OzkDAKKzxVM0Y0Mj4gPFUzRjQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj472CMAorPFU0NjJFPiA8VTQ2MkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmK4wCis8VTQ2NjM+IDxVNDY2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SZozAKKzxVNEIwMz4gPFU0QjAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KyDMAorPFU1MzQ1PiA8VTUzNDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljYUxMDgKKzxVNjUwMz4gPFU2NTAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pSDMAorPFU2QUQyPiA8VTZBRDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmq5IwCis8VTgxMEU+IDxVODEwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iEjjAKKzxVODQyOD4gPFU4NDI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JCoNTA1MAorPFU4NTZGPiA8VTg1NkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPola8wCis8VTg1QTk+IDxVODVBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iWqTI3Cis8VTk2QTE+IDxVOTZBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+maoTAKKzxVOThBRj4gPFU5OEFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aKvMAorPFU5OEQyPiA8VTk4RDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpo5IxMjkKKzxVOTlCQT4gPFU5OUJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aa6MAorPFU1NjdCPiA8VTU2N0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmbs3Cis8VTU4NUU+IDxVNTg1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WhnjQzOTUKKzxVNjA1Nj4gPFU2MDU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oGWMAorPFU2MTIyPiA8VTYxMjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhKIwCis8VTYzQ0M+IDxVNjNDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aPjDMKKzxVNkJFMj4gPFU2QkUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q+iMworPFU4MTZFPiA8VTgxNkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoha42NjQKKzxVOTg0Qj4gPFU5ODRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aGLMAorPFU5QzEzPiA8VTlDMTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsJMwCis8VTlDQzM+IDxVOUNDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mzgzM4Cis8VTM1Rjc+IDxVMzVGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OXtzAKKzxVNDIyMj4gPFU0MjIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IiiMAorPFU1MEZGPiA8VTUwRkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlg78wCis8VTU1RUU+IDxVNTVFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WXrjAKKzxVN0MzQT4gPFU3QzNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57C6MAorPFU4Q0ZEPiA8VThDRkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPos70yMAorPFU4RDVCPiA8VThENUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotZs2NTEwCis8VTRFMDk+IDxVNEUwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S4iTgzNDgxCis8VTUzQzE+IDxVNTNDMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPgTU3OAorPFU1NjA3PiA8VTU2MDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmIcwCis8VTVGMEU+IDxVNUYwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W8jjAKKzxVNjUxNT4gPFU2NTE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pSVMAorPFU2QkY1PiA8VTZCRjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmr7UxMQorPFU2QkZGPiA8VTZCRkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmr78xCis8VTcyOTk+IDxVNzI5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eKmTAKKzxVN0NDMT4gPFU3Q0MxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57OBMTYKKzxVOUIxNj4gPFU5QjE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ayWMAorPFUzOUYyPiA8VTM5RjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjp7IwCis8VTQwMTA+IDxVNDAxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SAkDAKKzxVNDI0OD4gPFU0MjQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ImIMAorPFU0Mjg5PiA8VTQyODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiokwCis8VTRBRTk+IDxVNEFFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SrqTAKKzxVNEVEMD4gPFU0RUQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LuQMAorPFU0RjFFPiA8VTRGMUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvJ4xNTU4Cis8VTRGNjE+IDxVNEY2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S9oTAKKzxVNTA5OD4gPFU1MDk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YKYMgorPFU3Q0MyPiA8VTdDQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPns4IwCis8VTdDREQ+IDxVN0NERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eznTAKKzxVN0NFMz4gPFU3Q0UzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57OjMAorPFU3Q0U0PiA8VTdDRTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPns6QwCis8VTdFNTY+IDxVN0U1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5ljIKKzxVOTNGRT4gPFU5M0ZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y++MgorPFU5OTRBPiA8VTk5NEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppYowCis8VTk5OTM+IDxVOTk5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mmkzgKKzxVMzkzRT4gPFUzOTNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46S+MAorPFUzQTk0PiA8VTNBOTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqpQwCis8VTNBOUE+IDxVM0E5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OqmjAKKzxVNEFDNT4gPFU0QUM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KuFMAorPFU0RkQ1PiA8VTRGRDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkv5UwCis8VTY1NjM+IDxVNjU2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aVozEwMDAwCis8VTk1OTA+IDxVOTU5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mWkDAKKzxVNEUyNz4gPFU0RTI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LinMjMzNQorPFU1NUFBPiA8VTU1QUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllqo0MAorPFU2ODUxPiA8VTY4NTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoZEyNTY1Cis8VTY4NTI+IDxVNjg1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ahkjAKKzxVNDg2Nj4gPFU0ODY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KGmMAorPFU0QUQ5PiA8VTRBRDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkq5kwCis8VTU1RDM+IDxVNTVEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WXkzIwODQKKzxVNjQyMT4gPFU2NDIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pChMTQ3Cis8VTc4Qzk+IDxVNzhDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ejiTEKKzxVODkyQz4gPFU4OTJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KSsMAorPFU5MzlGPiA8VTkzOUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjp8wCis8VTk4NTk+IDxVOTg1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mhmTAKKzxVOThBMT4gPFU5OEExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aKhMTEKKzxVNjE0NT4gPFU2MTQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oWFMAorPFU2M0JCPiA8VTYzQkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjrswCis8VTY0MTQ+IDxVNjQxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aQlDM2NAorPFU2RTlFPiA8VTZFOUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmup4wCis8VTdFNDU+IDxVN0U0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5hTAKKzxVN0YyQj4gPFU3RjJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57yrOQorPFU4MUNBPiA8VTgxQ0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoh4oyODAKKzxVOThCRT4gPFU5OEJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aK+MAorPFU5QTEyPiA8VTlBMTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqJIwCis8VTlBMzc+IDxVOUEzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+motzUKKzxVOUE5QT4gPFU5QTlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aqaMTk1NAorPFU5QzIwPiA8VTlDMjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsKAwCis8VTlDNjI+IDxVOUM2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxojAKKzxVOUNDQj4gPFU5Q0NCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bOLMAorPFUzNkVFPiA8VTM2RUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjm64wCis8VTQ1NDU+IDxVNDU0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SVhTAKKzxVNTdGRD4gPFU1N0ZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z+9MQorPFU1QUMyPiA8VTVBQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlq4IyNjM3Cis8VTYyNkI+IDxVNjI2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aJqzQ1MDAKKzxVNjM4Mz4gPFU2MzgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o6DMzIKKzxVM0ZDQj4gPFUzRkNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47+LMAorPFU0NDM5PiA8VTQ0Mzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkLkwCis8VTQ1QTM+IDxVNDVBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SWozAKKzxVNkMwOT4gPFU2QzA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rCJMAorPFU3NjE5PiA8VTc2MTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmJkzCis8VTc3QzI+IDxVNzdDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+efgjAKKzxVMzQ4QT4gPFUzNDhBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45KKMAorPFUzOTc2PiA8VTM5NzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpbYwCis8VTNCQTY+IDxVM0JBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OupjAKKzxVM0M0Nz4gPFUzQzQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47GHMAorPFUzRDE0PiA8VTNEMTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtJQwCis8VTNFRUQ+IDxVM0VFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O7rTAKKzxVNDI2Mj4gPFU0MjYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ImiMAorPFU0NTNDPiA8VTQ1M0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklLwwCis8VTRBMUI+IDxVNEExQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SomzAKKzxVNTU2Qz4gPFU1NTZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZWsMTQzCis8VTU1Qzc+IDxVNTVDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WXhzIKKzxVNjFDRT4gPFU2MUNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oeOMAorPFU2NENDPiA8VTY0Q0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmk4wwCis8VTZCNkU+IDxVNkI2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+atrjAKKzxVNkI3MD4gPFU2QjcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q2wMAorPFU2REE5PiA8VTZEQTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtqkxNTM0Cis8VTZFMEI+IDxVNkUwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a4izAKKzxVNkY4MD4gPFU2RjgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r6ANworPFU2RjgxPiA8VTZGODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvoEwCis8VTZGQzc+IDxVNkZDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a/hzAKKzxVNkZDRj4gPFU2RkNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r+PMAorPFU3MDEyPiA8VTcwMTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngJIwCis8VTcyOUU+IDxVNzI5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eKnjAKKzxVNzQ1Rj4gPFU3NDVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55GfMTkyMgorPFU3NEIxPiA8VTc0QjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkrEwCis8VTdBNTE+IDxVN0E1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+epkTkKKzxVN0E2MT4gPFU3QTYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56mhMAorPFU3RTZDPiA8VTdFNkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuawwCis8VTdGREM+IDxVN0ZEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e/nDAKKzxVODI3Mj4gPFU4MjcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ImyNTEwMDAKKzxVOEI0NT4gPFU4QjQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K2FMAorPFU4RDg3PiA8VThEODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotocwCis8VThGNTY+IDxVOEY1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i9ljEKKzxVOTJBQj4gPFU5MkFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YqrMAorPFU5NEVGPiA8VTk0RUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpk685MworPFU5NkVEPiA8VTk2RUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpm60wCis8VTk4Q0I+IDxVOThDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mjizAKKzxVNUU1Mz4gPFU1RTUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bmTMAorPFU2NkQxPiA8VTY2RDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmm5EwCis8VTY4RUU+IDxVNjhFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ajrjY3NjQKKzxVNjkyRT4gPFU2OTJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qSuMAorPFU2OUVFPiA8VTY5RUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmp64wCis8VTdBN0M+IDxVN0E3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+epvDAKKzxVN0JGOD4gPFU3QkY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56+4MAorPFU4NTE4PiA8VTg1MTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolJgwCis8VTg5NDI+IDxVODk0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ilgjAKKzxVNTBFNz4gPFU1MEU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YOnMTk1NQorPFU5QjE5PiA8VTlCMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprJkwCis8VTRFNzc+IDxVNEU3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S5tzAKKzxVNUUzND4gPFU1RTM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bi0MAorPFU2NDRCPiA8VTY0NEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkYswCis8VTY3NDA+IDxVNjc0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+adgDE5MDY1Cis8VTY3NDk+IDxVNjc0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+adiTgzMgorPFU2ODZDPiA8VTY4NkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoawwCis8VTY5OUQ+IDxVNjk5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+amnTAKKzxVNkEyNz4gPFU2QTI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qinMAorPFU2QkJBPiA8VTZCQkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrroxNjQKKzxVNkM5OT4gPFU2Qzk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rKZMTUxMzQKKzxVNzE1RT4gPFU3MTVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54WeMTA0MAorPFU3MzAwPiA8VTczMDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjIAwCis8VTc1RTc+IDxVNzVFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eXpzQ4Cis8VTc4MDI+IDxVNzgwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eggjY2NgorPFU3Qzg2PiA8VTdDODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsoYwCis8VTdEMTc+IDxVN0QxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e0lzUKKzxVN0VCMT4gPFU3RUIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57qxMTUwNAorPFU4MzhFPiA8VTgzOEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojo4yOTE1Cis8VTg1MzE+IDxVODUzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iUsTUKKzxVODhERj4gPFU4OERGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KOfMTc1Cis8VThENEE+IDxVOEQ0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i1ijkzCis8VTkzQTk+IDxVOTNBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mOqTAKKzxVOTRFOT4gPFU5NEU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZOpMTQKKzxVOUFGRj4gPFU5QUZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6au/MAorPFU5QjY2PiA8VTlCNjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpraYwCis8VTlCQ0E+IDxVOUJDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mvijAKKzxVOUJDQj4gPFU5QkNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a+LMAorPFU5Q0E4PiA8VTlDQTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsqgxNzcKKzxVNTU2NT4gPFU1NTY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZWlMTc5MQorPFU1MEJCPiA8VTUwQkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgrs1NTU3Cis8VTUxMEQ+IDxVNTEwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WEjTAKKzxVMzZBQj4gPFUzNkFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45qrMAorPFUzNkZDPiA8VTM2RkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjm7wwCis8VTNDMzE+IDxVM0MzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OwsTAKKzxVNDIwOT4gPFU0MjA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IiJMAorPFU0NzRBPiA8VTQ3NEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknYowCis8VTRCOUM+IDxVNEI5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SunDAKKzxVNEQ1OD4gPFU0RDU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LWYMAorPFU0RDhFPiA8VTREOEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkto4wCis8VTUwM0Q+IDxVNTAzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAvTAKKzxVNTNBNj4gPFU1M0E2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y6mMjIxNworPFU1NUEyPiA8VTU1QTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllqIwCis8VTVFMzk+IDxVNUUzOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W4uTEKKzxVNUVDOD4gPFU1RUM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5buIOAorPFU2QjQzPiA8VTZCNDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrYM5Cis8VTdCOTE+IDxVN0I5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eukTAKKzxVN0ZFMz4gPFU3RkUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57+jMAorPFU4NDEwPiA8VTg0MTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokJAwCis8VTk1QUY+IDxVOTVBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mWrzAKKzxVOTcwRT4gPFU5NzBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZyONDY5Cis8VTdCNUI+IDxVN0I1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+etmzQxMAorPFU3QkU5PiA8VTdCRTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnr6kzCis8VTdDMUI+IDxVN0MxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ewmzAKKzxVN0M2RD4gPFU3QzZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57GtMAorPFU3RTdBPiA8VTdFN0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnubowCis8VTNCMjA+IDxVM0IyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OsoDAKKzxVNjY1Mj4gPFU2NjUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pmSMTM5MQorPFU2NkVDPiA8VTY2RUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmm6w3Cis8VTk1Qjc+IDxVOTVCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mWtzAKKzxVNTIyMD4gPFU1MjIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YigMjIxNAorPFU1MjJBPiA8VTUyMkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliKoxNAorPFU1MjdDPiA8VTUyN0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlibwwCis8VTU5Q0Q+IDxVNTlDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WnjTAKKzxVNTlENz4gPFU1OUQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aeXMjQ5Cis8VTVDNzE+IDxVNUM3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WxsTQwMTk5Cis8VTVGNjE+IDxVNUY2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W9oTAKKzxVNjI0Nz4gPFU2MjQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5omHMjA1MgorPFU2MzNCPiA8VTYzM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjLswCis8VTY0Mjc+IDxVNjQyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aQpzIyCis8VTY3NjY+IDxVNjc2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+adpjEKKzxVNjgwNT4gPFU2ODA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qCFNTg0Cis8VTY5MTk+IDxVNjkxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+akmTAKKzxVNkE4Nj4gPFU2QTg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qqGMAorPFU2Rjc4PiA8VTZGNzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvbg5MgorPFU2Rjk4PiA8VTZGOTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvpgwCis8VTcwRkI+IDxVNzBGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eDuzAKKzxVNzE3RD4gPFU3MTdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54W9NDQ3Cis8VTcyRTY+IDxVNzJFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eLpjAKKzxVNzNDQT4gPFU3M0NBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54+KMTY2MworPFU3QTQ3PiA8VTdBNDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqYcwCis8VTdCMTg+IDxVN0IxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+esmDAKKzxVN0UzRj4gPFU3RTNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57i/MAorPFU3RkI0PiA8VTdGQjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvrQwCis8VTdGQjY+IDxVN0ZCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e+tjAKKzxVODIyMj4gPFU4MjIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IiiMzgKKzxVODI5Rj4gPFU4MjlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IqfMQorPFU4MkVCPiA8VTgyRUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi6szMQorPFU4ODZCPiA8VTg4NkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooasyNDQ3Cis8VThEREE+IDxVOEREQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i3mjI1MAorPFU4RUQ1PiA8VThFRDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPou5UwCis8VTkwOTY+IDxVOTA5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mCljAKKzxVOTFFND4gPFU5MUU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YekMAorPFU5NDkwPiA8VTk0OTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkpAyCis8VTlCQzU+IDxVOUJDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mvhTAKKzxVMzY5Mj4gPFUzNjkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45qSMAorPFUzOEUzPiA8VTM4RTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjo6MwCis8VTNBMUI+IDxVM0ExQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OomzAKKzxVM0E4RT4gPFUzQThFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46qOMAorPFUzRDkyPiA8VTNEOTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtpIwCis8VTQ4M0U+IDxVNDgzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SgvjAKKzxVNjY3MT4gPFU2NjcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pmxMAorPFU3MThDPiA8VTcxOEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhowwCis8VTc3NTI+IDxVNzc1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+edkjgKKzxVODlBMj4gPFU4OUEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KaiMAorPFU5NTgzPiA8VTk1ODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPploM3NAorPFU5NUVBPiA8VTk1RUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl6o4MDg4Cis8VTk2NTU+IDxVOTY1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mZlTg4NgorPFU5NjVDPiA8VTk2NUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmZwwCis8VTk2NUQ+IDxVOTY1RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mZnTcKKzxVOTY3Rj4gPFU5NjdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Zm/MAorPFUzOENDPiA8VTM4Q0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjo4wwCis8VTNBQTg+IDxVM0FBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OqqDAKKzxVNDEyMD4gPFU0MTIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ISgMAorPFU0MTg0PiA8VTQxODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhoQwCis8VTQ2QjI+IDxVNDZCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SasjAKKzxVNDk0Nz4gPFU0OTQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KWHMAorPFU0OTgyPiA8VTQ5ODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpoIwCis8VTQ5ODU+IDxVNDk4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SmhTAKKzxVNEM0Nz4gPFU0QzQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LGHMAorPFU0QzQ5PiA8VTRDNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksYkwCis8VTREMkU+IDxVNEQyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S0rjAKKzxVNTA5Mz4gPFU1MDkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YKTMAorPFU1MEQwPiA8VTUwRDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlg5AwCis8VTUxMDM+IDxVNTEwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WEgzAKKzxVNTI2MT4gPFU1MjYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YmhMQorPFU1NTg0PiA8VTU1ODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlloQxMDYwNAorPFU1OEEwPiA8VTU4QTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloqAwCis8VTU4QTE+IDxVNThBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WioTAKKzxVNUIxNz4gPFU1QjE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ayXNDkKKzxVNjM5RT4gPFU2MzlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o6eNQorPFU2NDcyPiA8VTY0NzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkbIyCis8VTY0QzU+IDxVNjRDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aThTc5NworPFU2NTdFPiA8VTY1N0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlb4wCis8VTY5MkI+IDxVNjkyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+akqzAKKzxVNkM1NT4gPFU2QzU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rGVODUKKzxVNzU5RD4gPFU3NTlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55adMjkKKzxVNzhGMD4gPFU3OEYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56OwMAorPFU3RTU1PiA8VTdFNTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuZUwCis8VTdGMkU+IDxVN0YyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e8rjY3Cis8VTgxQjM+IDxVODFCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iGszI4NAorPFU4N0VFPiA8VTg3RUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPon64zCis8VTg3RkE+IDxVODdGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ifujAKKzxVOEExNT4gPFU4QTE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KiVMQorPFU4QjA2PiA8VThCMDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorIYwCis8VThCNzE+IDxVOEI3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+itsTAKKzxVOEJBQT4gPFU4QkFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K6qNTYzCis8VThEMEQ+IDxVOEQwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i0jTAKKzxVOEQ3OD4gPFU4RDc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LW4MAorPFU5MTJGPiA8VTkxMkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphK8zCis8VTkyOEY+IDxVOTI4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mKjzAKKzxVOTQyNT4gPFU5NDI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZClMAorPFU5OTREPiA8VTk5NEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppY0wCis8VTlBMzg+IDxVOUEzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mouDAKKzxVOUE5Rj4gPFU5QTlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aqfMjYKKzxVOUM1Mz4gPFU5QzUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bGTMAorPFU5QzU0PiA8VTlDNTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsZQwCis8VTlDREQ+IDxVOUNERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mznTEwNQorPFU5Q0UzPiA8VTlDRTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPps6MwCis8VTRGMjQ+IDxVNEYyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S8pDE3NjU2Cis8VTUwQjc+IDxVNTBCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WCtzExMAorPFU1NTQ2PiA8VTU1NDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllYYxNDI3MgorPFU1ODkyPiA8VTU4OTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlopIxMworPFU2MTZGPiA8VTYxNkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmha8wCis8VTZCODc+IDxVNkI4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+auhzU2Cis8VTZCQTQ+IDxVNkJBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aupDEKKzxVNkU2Rj4gPFU2RTZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rmvMjcKKzxVNkVGMz4gPFU2RUYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ruzMAorPFU2RjIxPiA8VTZGMjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvKExCis8VTcxQjU+IDxVNzFCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eGtTM5MgorPFU4NTBGPiA8VTg1MEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolI8wCis8VTg3QUE+IDxVODdBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ieqjAKKzxVODlERT4gPFU4OURFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KeeNTcKKzxVODlGND4gPFU4OUY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ke0MAorPFU4QjJBPiA8VThCMkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorKowCis8VTlCM0E+IDxVOUIzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+msujAKKzxVNEIxNT4gPFU0QjE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KyVMAorPFU0RTA0PiA8VTRFMDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuIQxCis8VTYyNDQ+IDxVNjI0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aJhDAKKzxVNjY0Qz4gPFU2NjRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pmMOTg0Cis8VThDREU+IDxVOENERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iznjMwCis8VThENEY+IDxVOEQ0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i1jzUwNTcKKzxVOTQ1Qz4gPFU5NDVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZGcMAorPFU0RTBBPiA8VTRFMEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuIo0MTA4NzcKKzxVNEVFOT4gPFU0RUU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LupMAorPFU1OUUwPiA8VTU5RTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlp6AwCis8VTVDMTk+IDxVNUMxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WwmTAKKzxVNUMxQT4gPFU1QzFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bCaNzc1NQorPFU3REQ0PiA8VTdERDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnt5QwCis8VTdFRjE+IDxVN0VGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e7sTIKKzxVOTI4ND4gPFU5Mjg0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YqEMAorPFU1RjMwPiA8VTVGMzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvLAwCis8VTYzNEU+IDxVNjM0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aNjjQwNQorPFU2NUQzPiA8VTY1RDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPml5MwCis8VTY4QTI+IDxVNjhBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aiojY1OAorPFU3MEU3PiA8VTcwRTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPng6c3ODMzCis8VTcxM0M+IDxVNzEzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eEvDAKKzxVNzFEMj4gPFU3MUQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54eSMzUKKzxVN0EwRD4gPFU3QTBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56iNNDQ1NAorPFU3QjcyPiA8VTdCNzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrbIxCis8VTgyNDQ+IDxVODI0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iJhDc1Cis8VTgzQTY+IDxVODNBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iOpjAKKzxVODU3MT4gPFU4NTcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JWxMAorPFU4NkY4PiA8VTg2Rjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPom7gyCis8VThGMEU+IDxVOEYwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i8jjAKKzxVOUFGRT4gPFU5QUZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6au+MAorPFU5QkI5PiA8VTlCQjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprrkwCis8VTNDODg+IDxVM0M4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OyiDAKKzxVM0UxQj4gPFUzRTFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47ibMAorPFU1MkZBPiA8VTUyRkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPli7o4MzcKKzxVNTczND4gPFU1NzM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Zy0MAorPFU3MjRBPiA8VTcyNEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniYowCis8VTczQkY+IDxVNzNCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eOvzAKKzxVN0FGMD4gPFU3QUYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56uwMAorPFU4MjhEPiA8VTgyOEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoio0zOQorPFU4MkQ1PiA8VTgyRDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi5UxNworPFU5N0Y2PiA8VTk3RjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpn7YyMjgKKzxVM0FBMj4gPFUzQUEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46qiMAorPFU0NDlBPiA8VTQ0OUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkpowCis8VTQ1MjA+IDxVNDUyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SUoDAKKzxVNUMxMT4gPFU1QzExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bCRNDAwMDAKKzxVM0RGOT4gPFUzREY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47e5MAorPFU0M0Y0PiA8VTQzRjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkj7QwCis8VTQ2N0M+IDxVNDY3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SZvDAKKzxVNEIzMD4gPFU0QjMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KywMAorPFU0RjRCPiA8VTRGNEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvYswCis8VTUyQUQ+IDxVNTJBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WKrTEwCis8VTUzNzI+IDxVNTM3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WNsjAKKzxVNTRFOD4gPFU1NEU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZOoMTY4OAorPFU1QTBCPiA8VTVBMEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqIswCis8VTZGNzI+IDxVNkY3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a9sjIKKzxVNzc0ND4gPFU3NzQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj552EMAorPFU3RDM5PiA8VTdEMzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntLk0NAorPFU3REE0PiA8VTdEQTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntqQwCis8VTdFQ0Q+IDxVN0VDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e7jTYwMTgKKzxVODg5MT4gPFU4ODkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KKRMAorPFU5MEI1PiA8VTkwQjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgrUyNzMKKzxVOThCNT4gPFU5OEI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aK1MAorPFU1OTUzPiA8VTU5NTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpZMwCis8VTU5NjI+IDxVNTk2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+Wlojc5NgorPFU2QUE4PiA8VTZBQTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqqgwCis8VTczMUU+IDxVNzMxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eMnjEwCis8VTc1NzI+IDxVNzU3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eVsjcKKzxVOEI0Nz4gPFU4QjQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K2HMAorPFU4Q0QyPiA8VThDRDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPos5IwCis8VThDRDY+IDxVOENENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+izljAKKzxVM0I1OT4gPFUzQjU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj462ZMAorPFUzQzEyPiA8VTNDMTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsJIwCis8VTQwNEI+IDxVNDA0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SBizAKKzxVNDBBMD4gPFU0MEEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IKgMAorPFU0NzhDPiA8VTQ3OEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknowwCis8VTRGNTg+IDxVNEY1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S9mDMyCis8VTgyMEM+IDxVODIwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iIjDMxMjkKKzxVODY3NT4gPFU4Njc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Jm1MAorPFU4NkM3PiA8VTg2Qzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPom4cyMDY2Cis8VTg2RTU+IDxVODZFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ibpTAKKzxVOTI0OD4gPFU5MjQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YmIMAorPFU5MzY2PiA8VTkzNjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjaYwCis8VTk0Q0E+IDxVOTRDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mTijQKKzxVNEIzNz4gPFU0QjM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ky3MAorPFU2MzY4PiA8VTYzNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjagxMQorPFU4MjBFPiA8VTgyMEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiI4wCis8VTM0QTQ+IDxVMzRBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OSpDAKKzxVMzhCNT4gPFUzOEI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46K1MAorPFUzRDA3PiA8VTNEMDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtIcwCis8VTQwMDU+IDxVNDAwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SAhTAKKzxVNDA2Rj4gPFU0MDZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IGvMAorPFU0MTE1PiA8VTQxMTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhJUwCis8VTQzMzA+IDxVNDMzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SMsDAKKzxVNDgzNj4gPFU0ODM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KC2MAorPFU0OTJFPiA8VTQ5MkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpK4wCis8VTRENjU+IDxVNEQ2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S1pTAKKzxVNTM4RD4gPFU1MzhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y6NNAorPFU1Mzk5PiA8VTUzOTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljpkwCis8VTVDMDQ+IDxVNUMwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WwhDExMTYwCis8VTVGM0Q+IDxVNUYzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W8vTAKKzxVNjE1MT4gPFU2MTUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oWRNDc2Cis8VTYxRkU+IDxVNjFGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aHvjIKKzxVNjM1MT4gPFU2MzUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o2RMAorPFU2NDQ0PiA8VTY0NDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkYQxODcyCis8VTY1MUQ+IDxVNjUxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aUnTEzCis8VTZCMDc+IDxVNkIwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ashzAKKzxVNkI1OT4gPFU2QjU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q2ZMTcKKzxVNkQ4OT4gPFU2RDg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5raJNDUwNAorPFU2RTA5PiA8VTZFMDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuIkxCis8VTZFRTA+IDxVNkVFMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a7oDAKKzxVNzA0ND4gPFU3MDQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54GEMAorPFU3OTNFPiA8VTc5M0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpL4yNjMyMAorPFU4MjBEPiA8VTgyMEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiI01MDg4Cis8VTg0NDk+IDxVODQ0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iRiTU1Cis8VTg1MEU+IDxVODUwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iUjjAKKzxVODgwMj4gPFU4ODAyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KCCMAorPFU4QTJEPiA8VThBMkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqK0xMjMKKzxVOEJCRT4gPFU4QkJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K6+MzAzMDIKKzxVOEQ2Nj4gPFU4RDY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LWmNDk0Cis8VTk3RDg+IDxVOTdEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mfmDAKKzxVOUEwNz4gPFU5QTA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aiHMAorPFU5RTlEPiA8VTlFOUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpup0xNDQKKzxVOEFCMD4gPFU4QUIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KqwMjAxCis8VTRGMzg+IDxVNEYzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S8uDc5MzQKKzxVNEY4MT4gPFU0RjgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L6BMAorPFU1MTUzPiA8VTUxNTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhZMwCis8VTU0N0I+IDxVNTQ3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRuzgwNAorPFU1OUJEPiA8VTU5QkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpr0wCis8VTVDN0U+IDxVNUM3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WxvjAKKzxVNUNGNz4gPFU1Q0Y3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bO3MAorPFU2MjVGPiA8VTYyNUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiZ8wCis8VTY1NTI+IDxVNjU1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aVkjAKKzxVNjdEQj4gPFU2N0RCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p+bMAorPFU2QzIwPiA8VTZDMjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsKAwCis8VTZERjE+IDxVNkRGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3sTI5OTY0Cis8VTcxQ0E+IDxVNzFDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHijMKKzxVNzNDNT4gPFU3M0M1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54+FNDkKKzxVNzUyMT4gPFU3NTIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55ShMAorPFU3NTI3PiA8VTc1Mjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlKcwCis8VTc1MzM+IDxVNzUzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eUszQ1OTQKKzxVNzcxMj4gPFU3NzEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55ySMAorPFU3ODM3PiA8VTc4Mzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoLczNgorPFU3Qzc2PiA8VTdDNzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsbYwCis8VTdDNzg+IDxVN0M3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+exuDAKKzxVN0QzMz4gPFU3RDMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57SzOQorPFU3RUM1PiA8VTdFQzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnu4U3NjYKKzxVODM5OD4gPFU4Mzk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I6YMTQ5Cis8VTg0NjA+IDxVODQ2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iRoDAKKzxVODU5Mz4gPFU4NTkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JaTMAorPFU4OEQxPiA8VTg4RDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo5EwCis8VThBMzc+IDxVOEEzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iotzAKKzxVOEE3NT4gPFU4QTc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Km1MAorPFU4QkRDPiA8VThCREM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor5w0Cis8VThFQUI+IDxVOEVBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6qzgzNTY1Cis8VTkyNkU+IDxVOTI2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mJrjAKKzxVOTYyMD4gPFU5NjIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZigMAorPFU5OUVBPiA8VTk5RUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpp6owCis8VTlDQjk+IDxVOUNCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+myuTAKKzxVOUQ2Mj4gPFU5RDYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bWiMAorPFU0QzIwPiA8VTRDMjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksKAwCis8VTc5NUU+IDxVNzk1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+elnjQxOTI3Cis8VUZBMTk+IDxVRkExOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI++omTAKKzxVMzUyND4gPFUzNTI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45SkMAorPFUzNzI0PiA8VTM3MjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnKQwCis8VTNDMDI+IDxVM0MwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OwgjAKKzxVM0Q0QT4gPFUzRDRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47WKMAorPFUzRjk1PiA8VTNGOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvpUwCis8VTU0MzI+IDxVNTQzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WQsjAKKzxVNTRDMj4gPFU1NEMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZOCMTA5Cis8VTVBNzY+IDxVNUE3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WptjUzOQorPFU1QjM4PiA8VTVCMzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrLgwCis8VTVCQTE+IDxVNUJBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WuoTc5ODIKKzxVNUJCNz4gPFU1QkI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a63MAorPFU1QkU5PiA8VTVCRTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlr6kxOQorPFU1RjFFPiA8VTVGMUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvJ4wCis8VTZDODg+IDxVNkM4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ayiDI4NTcKKzxVNkUxNj4gPFU2RTE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5riWMjkKKzxVNzAwQj4gPFU3MDBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54CLNgorPFU3N0FCPiA8VTc3QUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnqs0Cis8VTc3RTQ+IDxVNzdFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+efpDAKKzxVNzdFNz4gPFU3N0U3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+nMQorPFU4OUJFPiA8VTg5QkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopr4wCis8VThBMjA+IDxVOEEyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iooDAKKzxVOEFENz4gPFU4QUQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KuXMAorPFU4Qjg1PiA8VThCODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoroUwCis8VThDMDI+IDxVOEMwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwgjIKKzxVOEMwOT4gPFU4QzA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LCJMAorPFU5MEE1PiA8VTkwQTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgqUwCis8VTk4MjM+IDxVOTgyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mgozAKKzxVOUI2Qj4gPFU5QjZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a2rMAorPFUzOTcyPiA8VTM5NzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpbIwCis8VTNDMkU+IDxVM0MyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OwrjAKKzxVM0Q1NT4gPFUzRDU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47WVMAorPFU0MUE2PiA8VTQxQTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhqYwCis8VTRGQkE+IDxVNEZCQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+ujAKKzxVNjEzQz4gPFU2MTNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oS8MQorPFU2MTRFPiA8VTYxNEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhY4xODMyCis8VTY2MUE+IDxVNjYxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aYmjAKKzxVNjkzOT4gPFU2OTM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qS5MzYKKzxVNkQ4MT4gPFU2RDgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5raBMAorPFU2RTE3PiA8VTZFMTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuJc5MDYKKzxVNkVGMj4gPFU2RUYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ruyMTUKKzxVNzUxQT4gPFU3NTFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55SaMTg4MzIKKzxVNzYwNj4gPFU3NjA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55iGNworPFU3NjBFPiA8VTc2MEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmI4wCis8VTc2MkU+IDxVNzYyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eYrjEKKzxVNzcxOD4gPFU3NzE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55yYMAorPFU4MEJFPiA8VTgwQkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogr4yMzkKKzxVODEyND4gPFU4MTI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ISkMQorPFU4MTRFPiA8VTgxNEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohY4xCis8VTg3MDM+IDxVODcwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+icgzEwMQorPFU5MkUwPiA8VTkyRTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpi6AwCis8VTUzNDc+IDxVNTM0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WNhzg0NTYKKzxVNTQ0Rj4gPFU1NDRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZGPMAorPFU1OEYwPiA8VTU4RjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlo7A3MjgwNAorPFU2NTk4PiA8VTY1OTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlpgwCis8VTY2MDc+IDxVNjYwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aYhzgzCis8VTY2RkI+IDxVNjZGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+abuzAKKzxVNkI4NT4gPFU2Qjg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q6FMAorPFU2Q0U5PiA8VTZDRTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPms6kwCis8VTZFNjY+IDxVNkU2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a5pjAKKzxVNzEzQT4gPFU3MTNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54S6MAorPFU3MjcyPiA8VTcyNzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnibIyNTA3Cis8VTcyQ0M+IDxVNzJDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eLjDAKKzxVNzNDND4gPFU3M0M0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54+EMAorPFU3NTFGPiA8VTc1MUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlJ8xNzExMjUKKzxVNzUyNT4gPFU3NTI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55SlMjUwCis8VTdBQ0Q+IDxVN0FDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+erjTAKKzxVN0FDRj4gPFU3QUNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56uPMAorPFU3QUQzPiA8VTdBRDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnq5MwCis8VTdBRDQ+IDxVN0FEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+erlDAKKzxVN0FENT4gPFU3QUQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56uVMAorPFU3QUUxPiA8VTdBRTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnq6EwCis8VTdCMTk+IDxVN0IxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+esmTM4MworPFU4MDcyPiA8VTgwNzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogbI2MzAKKzxVODJGQz4gPFU4MkZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Iu8MAorPFU5MjRFPiA8VTkyNEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiY4wCis8VTk2Mjk+IDxVOTYyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mYqTAKKzxVOTY1RT4gPFU5NjVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZmeMAorPFU5Njc5PiA8VTk2Nzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmbkwCis8VTlEN0Y+IDxVOUQ3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m1vzAKKzxVOUYyQT4gPFU5RjJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6byqMAorPFU0QzQ2PiA8VTRDNDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksYYwCis8VTYxQjQ+IDxVNjFCND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aGtDAKKzxVNkU5Nz4gPFU2RTk3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqXMAorPFU3RTA0PiA8VTdFMDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuIQwCis8VTdFNjk+IDxVN0U2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5qTE1Cis8VTdFRjM+IDxVN0VGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e7szIwNzQKKzxVOEI1RD4gPFU4QjVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K2dMAorPFU5QzY2PiA8VTlDNjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsaYwCis8VTM1QzI+IDxVMzVDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OXgjAKKzxVM0YzMz4gPFUzRjMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47yzMAorPFUzRkFBPiA8VTNGQUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvqowCis8VTQwNUU+IDxVNDA1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SBnjAKKzxVNDY4Nz4gPFU0Njg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JqHMAorPFU0QUJGPiA8VTRBQkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqr8wCis8VTUwNTc+IDxVNTA1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WBlzAKKzxVNTFCQz4gPFU1MUJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ya8NDUKKzxVNzcwMT4gPFU3NzAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55yBMTA4NTcKKzxVNzcxQT4gPFU3NzFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55yaMworPFU3QkI1PiA8VTdCQjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrrUwCis8VTQzQjQ+IDxVNDNCND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SOtDAKKzxVNDc4OT4gPFU0Nzg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J6JMAorPFU1MjY5PiA8VTUyNjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliak1MDc1Cis8VTUyNzA+IDxVNTI3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WJsDAKKzxVNTJERD4gPFU1MkREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YudNTYKKzxVNTcyMz4gPFU1NzIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZyjOTQ0OQorPFU1OEFEPiA8VTU4QUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloq0wCis8VTVENEE+IDxVNUQ0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W1ijIKKzxVNjlCQT4gPFU2OUJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qa6MAorPFU3NDFFPiA8VTc0MUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkJ4wCis8VTgwNTY+IDxVODA1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iBljg3Cis8VTgwREM+IDxVODBEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iDnDg2MDMKKzxVODU0Mj4gPFU4NTQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JWCMAorPFU4Q0I5PiA8VThDQjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosrkwCis8VThDRjg+IDxVOENGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+izuDEKKzxVNTQ1RT4gPFU1NDVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZGeMAorPFU1NjUzPiA8VTU2NTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmZM4Cis8VTU5MzE+IDxVNTkzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WksTMwOTczCis8VTVDMzg+IDxVNUMzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WwuDMzMDIKKzxVNUM0RD4gPFU1QzREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bGNMzIKKzxVNUUwOD4gPFU1RTA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5biIMjk1NTcKKzxVNUUyQj4gPFU1RTJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5birNDM2Cis8VTY1QkQ+IDxVNjVCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWvTkwNDkKKzxVNkQ0OT4gPFU2RDQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rWJMAorPFU2RTY0PiA8VTZFNjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuaQwCis8VTZFN0Y+IDxVNkU3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a5vzQxMDgKKzxVNkVBRT4gPFU2RUFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rquMAorPFU2RUJDPiA8VTZFQkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmurw0Cis8VTZGRDU+IDxVNkZENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a/lTIxCis8VTcyRUU+IDxVNzJFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eLrjEyNTcKKzxVNzM0NT4gPFU3MzQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj542FMTEKKzxVNzQ2MT4gPFU3NDYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55GhMAorPFU3QkI3PiA8VTdCQjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrrcwCis8VTdENDE+IDxVN0Q0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e1gTAKKzxVODQ3OT4gPFU4NDc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JG5MAorPFU4NDkyPiA8VTg0OTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokpIwCis8VTg0Q0Q+IDxVODRDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iTjTE1Cis8VTg2NzE+IDxVODY3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iZsTIzNAorPFU4NzY4PiA8VTg3Njg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonagwCis8VTg3ODQ+IDxVODc4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iehDAKKzxVODkzNz4gPFU4OTM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KS3MAorPFU4OTc5PiA8VTg5Nzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopbkwCis8VThBNjk+IDxVOEE2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ipqTc4Cis8VThCRDc+IDxVOEJENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ivlzE1NDA0Cis8VTkwQkY+IDxVOTBCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mCvzAKKzxVOTFGNj4gPFU5MUY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ye2MAorPFU5MjQ3PiA8VTkyNDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiYcwCis8VTlCRjQ+IDxVOUJGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mvtDAKKzxVOUMyND4gPFU5QzI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bCkMQorPFU5Q0JBPiA8VTlDQkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsroxCis8VTlDRjI+IDxVOUNGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mzsjAKKzxVOUNGRT4gPFU5Q0ZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bO+MAorPFU5REIzPiA8VTlEQjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptrMwCis8VTlFMjQ+IDxVOUUyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m4pDAKKzxVMzVCNz4gPFUzNUI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45a3MAorPFUzQUQxPiA8VTNBRDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjq5EwCis8VTNENTM+IDxVM0Q1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O1kzAKKzxVNDA5Nj4gPFU0MDk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IKWMAorPFU0NUE4PiA8VTQ1QTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklqgwCis8VTQ5Qjk+IDxVNDlCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SmuTAKKzxVNERBMT4gPFU0REExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LahMAorPFU0RTZEPiA8VTRFNkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkua0wCis8VTRFQzA+IDxVNEVDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S7gDEwMDAwMAorPFU1MTU5PiA8VTUxNTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhZkwCis8VTUzNDE+IDxVNTM0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WNgTgzOTE3Cis8VTU3RDg+IDxVNTdEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfmDAKKzxVNTg1Mj4gPFU1ODUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aGSMAorPFU1QjlFPiA8VTVCOUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrp45MTMzMworPFU1QjlGPiA8VTVCOUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrp8wCis8VTVCRDQ+IDxVNUJEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WvlDIKKzxVNUJFNj4gPFU1QkU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a+mNzg1Cis8VTVDRDU+IDxVNUNENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WzlTAKKzxVNjJGRT4gPFU2MkZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ou+MzQ1NAorPFU2NUY2PiA8VTY1RjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPml7YyNDQ3NDcKKzxVNjVGOT4gPFU2NUY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pe5MAorPFU2NjQyPiA8VTY2NDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmYIyMDc0Cis8VTY5QUY+IDxVNjlBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+amrzAKKzxVNkU0MT4gPFU2RTQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rmBMAorPFU2RTVDPiA8VTZFNUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuZwzCis8VTZFQTE+IDxVNkVBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a6oTAKKzxVNzBCQj4gPFU3MEJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54K7MAorPFU3NEU3PiA8VTc0RTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnk6cwCis8VTc3RjM+IDxVNzdGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+efszIwMTgzCis8VTc4QTk+IDxVNzhBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eiqTE1Cis8VTc5NEY+IDxVNzk0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eljzAKKzxVODNCMz4gPFU4M0IzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I6zMQorPFU4NDk0PiA8VTg0OTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokpQwCis8VTg2ODA+IDxVODY4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iagDUzNgorPFU4NzU1PiA8VTg3NTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonZUyCis8VThCNTg+IDxVOEI1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+itmDI2MQorPFU4QkM2PiA8VThCQzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor4YyNzQzOQorPFU5MDQ4PiA8VTkwNDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgYgwCis8VTkyNTA+IDxVOTI1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mJkDAKKzxVOThERj4gPFU5OERGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aOfMTAxNDAKKzxVOThFMD4gPFU5OEUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aOgMAorPFU5OTYzPiA8VTk5NjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppaM2Cis8VTlDMjM+IDxVOUMyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mwozAKKzxVOUNBNT4gPFU5Q0E1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bKlOQorPFU5RjJCPiA8VTlGMkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvKswCis8VTlGMkQ+IDxVOUYyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m8rTAKKzxVMzU1Qz4gPFUzNTVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45WcMAorPFUzRTZDPiA8VTNFNkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuawwCis8VTNFNzc+IDxVM0U3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O5tzAKKzxVNDRBOD4gPFU0NEE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JKoMAorPFU0OUEwPiA8VTQ5QTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpqAwCis8VTRFNjg+IDxVNEU2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S5qDAKKzxVNEY3Rj4gPFU0RjdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L2/Njc3NzIKKzxVNTE1OD4gPFU1MTU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YWYMAorPFU1M0YyPiA8VTUzRjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlj7IxOTQ1NAorPFU1OUNCPiA8VTU5Q0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlp4szNTQ2OQorPFU1QkE5PiA8VTVCQTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrqkwCis8VTVDNEU+IDxVNUM0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WxjjEwMDYKKzxVNzdFMj4gPFU3N0UyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+iODQ1Cis8VTdCMzY+IDxVN0IzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+estjAKKzxVOEM1NT4gPFU4QzU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LGVMjgKKzxVOTI0Mj4gPFU5MjQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YmCMAorPFU5OURCPiA8VTk5REI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpp5s0MworPFU5QTc2PiA8VTlBNzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqbYyNDczCis8VTM0QkU+IDxVMzRCRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OSvjAKKzxVMzUzQT4gPFUzNTNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45S6MAorPFUzQkI2PiA8VTNCQjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrrYwCis8VTNDNDE+IDxVM0M0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OxgTAKKzxVM0UzNz4gPFUzRTM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47i3MAorPFUzRTVEPiA8VTNFNUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuZ0wCis8VTQwN0E+IDxVNDA3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SBujAKKzxVNDI5Mz4gPFU0MjkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IqTMAorPFU0M0UxPiA8VTQzRTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkj6EwCis8VTQ2Qzg+IDxVNDZDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SbiDAKKzxVNDdENz4gPFU0N0Q3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J+XMAorPFU0OTMxPiA8VTQ5MzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpLEwCis8VTRBNDM+IDxVNEE0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SpgzAKKzxVNEI0ND4gPFU0QjQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K2EMAorPFU0QzA0PiA8VTRDMDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksIQwCis8VTRFMTY+IDxVNEUxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S4ljUzMTgwCis8VTRFMTc+IDxVNEUxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S4lzAKKzxVNEU4QT4gPFU0RThBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LqKMAorPFU0RThCPiA8VTRFOEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuosxNDE0NTIKKzxVNEVENT4gPFU0RUQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LuVNDM4Cis8VTRGNDA+IDxVNEY0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S9gDEKKzxVNEY4RD4gPFU0RjhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L6NMzY3OQorPFU1MTlGPiA8VTUxOUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhp8wCis8VTUyQkY+IDxVNTJCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WKvzE1MDAwCis8VTUyRTI+IDxVNTJFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WLojk5Cis8VTUzNEI+IDxVNTM0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WNizAKKzxVNTM3Nj4gPFU1Mzc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y22MAorPFU1M0QzPiA8VTUzRDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlj5MwCis8VTU0Njk+IDxVNTQ2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRqTAKKzxVNTUxMT4gPFU1NTExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZSRMworPFU1NURDPiA8VTU1REM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPll5wzNzUKKzxVNTY2Qz4gPFU1NjZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZmsMzU4Cis8VTU4RUI+IDxVNThFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WjqzI0OTc4Cis8VTU5NkQ+IDxVNTk2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WlrTAKKzxVNUE5RT4gPFU1QTlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aqeMAorPFU1QjE1PiA8VTVCMTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrJUwCis8VTVCQTQ+IDxVNUJBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WupDE3MTQ1Cis8VTVDRDk+IDxVNUNEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WzmTU4MgorPFU1RDNDPiA8VTVEM0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltLwwCis8VTVFMDI+IDxVNUUwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W4gjI1ODM1Cis8VTVGMEY+IDxVNUYwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W8jzM3NDg1Cis8VTVGMTE+IDxVNUYxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W8kTQ4Cis8VTVGMTI+IDxVNUYxMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W8kjEKKzxVNjA0Mz4gPFU2MDQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oGDMjQwCis8VTYyM0E+IDxVNjIzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aIujAKKzxVNjJFRD4gPFU2MkVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5outNjA2Cis8VTYzRDM+IDxVNjNEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aPkzAKKzxVNjYyRj4gPFU2NjJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pivODU2MzIzCis8VTY2MzA+IDxVNjYzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aYsDAKKzxVNjdCRT4gPFU2N0JFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p6+MAorPFU2N0Y5PiA8VTY3Rjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmn7kwCis8VTY3RkY+IDxVNjdGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+afvzM1MgorPFU2QzBGPiA8VTZDMEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsI80NDYxCis8VTZGQTg+IDxVNkZBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a+qDAKKzxVNzBEMj4gPFU3MEQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54OSMAorPFU3NzAyPiA8VTc3MDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnIIwCis8VTc3MEU+IDxVNzcwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ecjjAKKzxVNzc1Nz4gPFU3NzU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj552XMAorPFU3OTNBPiA8VTc5M0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpLoyNzMwMworPFU3OTNCPiA8VTc5M0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpLsyOAorPFU3QjZFPiA8VTdCNkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnra40Cis8VTdDMkQ+IDxVN0MyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ewrTAKKzxVN0ZFOD4gPFU3RkU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57+oMAorPFU4MjEwPiA8VTgyMTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiJA4MQorPFU4MjEzPiA8VTgyMTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiJMwCis8VTg3QUI+IDxVODdBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ieqzQ2Cis8VTg4NEI+IDxVODg0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ihizAKKzxVODkwNj4gPFU4OTA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KSGNAorPFU4OTZCPiA8VTg5NkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopaswCis8VTg5OTY+IDxVODk5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+imljMyMAorPFU4OUM2PiA8VTg5QzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPop4YyNzc3MAorPFU4QTREPiA8VThBNEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqY0wCis8VThBNjY+IDxVOEE2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ippjEwNworPFU4QTkzPiA8VThBOTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqpMyMjU1Cis8VThBREY+IDxVOEFERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+irnzAKKzxVOEFFMT4gPFU4QUUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KuhMAorPFU4QjFBPiA8VThCMUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorJowCis8VThCRDU+IDxVOEJENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ivlTE2NzE2Cis8VThDMjU+IDxVOEMyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwpTQyCis8VThDQjA+IDxVOENCMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iysDAKKzxVOEQzMz4gPFU4RDMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LSzMAorPFU4REU5PiA8VThERTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPot6kzCis8VThFRkU+IDxVOEVGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i7vjAKKzxVOEY3Qz4gPFU4RjdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L28MTI0Cis8VTkwMDI+IDxVOTAwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mAgjkxNzMKKzxVOTAxRD4gPFU5MDFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YCdMjUyMAorPFU5MDdFPiA8VTkwN0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgb4wCis8VTkxQzg+IDxVOTFDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mHiDAKKzxVOTFDQT4gPFU5MUNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YeKMTA0OTMKKzxVOTFDQj4gPFU5MUNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YeLODEKKzxVOTIzMD4gPFU5MjMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YiwMAorPFU5MjQzPiA8VTkyNDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiYMwCis8VTkyN0Q+IDxVOTI3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mJvTAKKzxVOTJCND4gPFU5MkI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Yq0MAorPFU5NEM4PiA8VTk0Qzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpk4gyCis8VTk4RkU+IDxVOThGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mjvjE3Cis8VTk5MTk+IDxVOTkxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mkmTAKKzxVOTkxRD4gPFU5OTFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aSdMAorPFU5OTcwPiA8VTk5NzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppbAzMjA3Cis8VTlDQzA+IDxVOUNDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mzgDI0Cis8VTlGNUI+IDxVOUY1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m9mzAKKzxVNTNDRT4gPFU1M0NFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y+OMAorPFU2NTM2PiA8VTY1MzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlLYyMTYyOAorPFU4MzREPiA8VTgzNEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojY0wCis8VTM3NEE+IDxVMzc0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OdijAKKzxVNEI2RD4gPFU0QjZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K2tMAorPFU1N0E4PiA8VTU3QTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnqgwCis8VTVCODg+IDxVNUI4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WuiDkzODIKKzxVNjI0Qj4gPFU2MjRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5omLOTAzMjQKKzxVNjI0Qz4gPFU2MjRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5omMOTYKKzxVODI0Rj4gPFU4MjRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ImPNgorPFU5OTk2PiA8VTk5OTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpppY0ODY0NworPFUzNTlGPiA8VTM1OUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlp8wCis8VTM5NDU+IDxVMzk0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OlhTAKKzxVNDZGNT4gPFU0NkY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ju1MAorPFU1MTdEPiA8VTUxN0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhb0xODUyCis8VTUzRDc+IDxVNTNENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPlzQwMjg2Cis8VTU1MkU+IDxVNTUyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUrjI5NTkKKzxVNThGRD4gPFU1OEZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aO9MTgKKzxVNTkwMD4gPFU1OTAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aSAMAorPFU1QkZGPiA8VTVCRkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlr78yMDgzCis8VTYzODg+IDxVNjM4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aOiDU4ODMKKzxVNkRBRD4gPFU2REFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ratMAorPFU3MkU5PiA8VTcyRTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPni6k5OQorPFU3MzYzPiA8VTczNjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjaMwCis8VTczNzg+IDxVNzM3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eNuDU2Cis8VTc1RTk+IDxVNzVFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eXqTEKKzxVNzYyNj4gPFU3NjI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55imMzcyNQorPFU3REFDPiA8VTdEQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntqwyCis8VTdFRjY+IDxVN0VGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e7tjM1Cis8VTgxODQ+IDxVODE4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iGhDAKKzxVOTNDOT4gPFU5M0M5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+JMAorPFU0RTY2PiA8VTRFNjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuaY0NzE2NgorPFU0RkM2PiA8VTRGQzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkv4YwCis8VTUwMEY+IDxVNTAwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAjzM5NQorPFU1MDEwPiA8VTUwMTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgJAwCis8VTUzRDQ+IDxVNTNEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPlDQ5MTYKKzxVNTcxNT4gPFU1NzE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZyVMAorPFU1OUREPiA8VTU5REQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlp504MQorPFU2MjkyPiA8VTYyOTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmipI1MzkKKzxVNjQ0NT4gPFU2NDQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pGFMgorPFU2NDc0PiA8VTY0NzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkbQ0Cis8VTY1MDQ+IDxVNjUwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aUhDAKKzxVNjZGOD4gPFU2NkY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pu4NDgyCis8VTY3Nzg+IDxVNjc3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aduDAKKzxVNjdBMj4gPFU2N0EyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p6iMzkxCis8VTY4QjM+IDxVNjhCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aiszE1NTAKKzxVNkExRT4gPFU2QTFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qieMQorPFU2QTdFPiA8VTZBN0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqb4wCis8VTZCOEE+IDxVNkI4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+auijQ5NzcKKzxVNkJCMz4gPFU2QkIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q6zOTQKKzxVNkJGOT4gPFU2QkY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q+5MQorPFU2REQxPiA8VTZERDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmt5ExMDc5Cis8VTc1OEU+IDxVNzU4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eWjjAKKzxVNzU4Rj4gPFU3NThGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55aPMjA1OQorPFU3OTRCPiA8VTc5NEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpYswCis8VTdEMTM+IDxVN0QxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e0kzQKKzxVN0Q4MD4gPFU3RDgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57aAMAorPFU3RUJFPiA8VTdFQkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnur4yMQorPFU4MjEyPiA8VTgyMTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiJI0OTg2Cis8VTg1MkM+IDxVODUyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iUrDQwNgorPFU4NUYyPiA8VTg1RjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPol7IwCis8VThFMDg+IDxVOEUwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i4iDAKKzxVOEVENz4gPFU4RUQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LuXMAorPFU4RjM4PiA8VThGMzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovLgyMworPFU4RjkzPiA8VThGOTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovpM4Njg0Cis8VTk2NEU+IDxVOTY0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mZjjAKKzxVOUQ2OD4gPFU5RDY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bWoMAorPFU0MERFPiA8VTQwREU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkg54wCis8VTQ3NkE+IDxVNDc2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SdqjAKKzxVNEQzMD4gPFU0RDMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LSwMAorPFU1N0YxPiA8VTU3RjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPln7EwCis8VTU4N0U+IDxVNTg3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WhvjE2NAorPFU1QjcwPiA8VTVCNzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrbAyMzYKKzxVNUMxNz4gPFU1QzE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bCXMAorPFU2MzkzPiA8VTYzOTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjpMwCis8VTcxMDI+IDxVNzEwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eEgjAKKzxVNzE5Rj4gPFU3MTlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54afOTgyOAorPFU3NEI5PiA8VTc0Qjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkrkwCis8VTc5RUI+IDxVNzlFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+enqzMzCis8VTg2NkE+IDxVODY2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iZqjAKKzxVODk2MT4gPFU4OTYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KWhMQorPFU4RDE2PiA8VThEMTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotJY5Cis8VThENEU+IDxVOEQ0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i1jjQ0NQorPFU4REZFPiA8VThERkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPot74wCis8VTlFMDA+IDxVOUUwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m4gDAKKzxVMzQ5ND4gPFUzNDk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45KUMAorPFUzN0VDPiA8VTM3RUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjn6wwCis8VTNCRUU+IDxVM0JFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OvrjAKKzxVM0NDNj4gPFUzQ0M2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47OGMAorPFUzRUZGPiA8VTNFRkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPju78wCis8VTQ0NTU+IDxVNDQ1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SRlTAKKzxVNDc5Nj4gPFU0Nzk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J6WMAorPFU0ODMxPiA8VTQ4MzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoLEwCis8VTRBNzM+IDxVNEE3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SpszAKKzxVNUE0Qz4gPFU1QTRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5amMMAorPFU1QzVFPiA8VTVDNUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsZ4xMTYyNAorPFU1QzZDPiA8VTVDNkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsawxNTkKKzxVNjU3OD4gPFU2NTc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pW4MTkxCis8VTY2OTE+IDxVNjY5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aakTExMDIKKzxVNjZEOT4gPFU2NkQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5puZNDg3Cis8VTZGN0I+IDxVNkY3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a9uzAKKzxVNzY1OT4gPFU3NjU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55mZMAorPFU3Q0VDPiA8VTdDRUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPns6wwCis8VTdGNzI+IDxVN0Y3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9sjM1NTQKKzxVODVBNT4gPFU4NUE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JalMAorPFU4NUFGPiA8VTg1QUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolq80MTMKKzxVODVGNz4gPFU4NUY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Je3MAorPFU4NzAwPiA8VTg3MDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonIAxOTEKKzxVODk2OT4gPFU4OTY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KWpMAorPFU5NDgzPiA8VTk0ODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkoMwCis8VTk3RTM+IDxVOTdFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mfozAKKzxVOUVDRD4gPFU5RUNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6buNNjEKKzxVOUYyMD4gPFU5RjIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bygNDg5NAorPFU5RjIxPiA8VTlGMjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvKEwCis8VTM2Rjg+IDxVMzZGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ObuDAKKzxVMzcxMD4gPFUzNzEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45yQMAorPFUzOEZEPiA8VTM4RkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjo70wCis8VTNEOTY+IDxVM0Q5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O2ljAKKzxVM0RDMj4gPFUzREMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47eCMAorPFUzRjcwPiA8VTNGNzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvbAwCis8VTNGODE+IDxVM0Y4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O+gTAKKzxVNDE5RD4gPFU0MTlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IadMAorPFU0MjQwPiA8VTQyNDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiYAwCis8VTQzODk+IDxVNDM4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SOiTAKKzxVNDYyND4gPFU0NjI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JikMAorPFU0NzM5PiA8VTQ3Mzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknLkwCis8VTQ3NDI+IDxVNDc0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SdgjAKKzxVNDhBND4gPFU0OEE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KKkMAorPFU0QTcxPiA8VTRBNzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqbEwCis8VTRGQjg+IDxVNEZCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+uDAKKzxVNTEzNT4gPFU1MTM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YS1MAorPFU1MTZBPiA8VTUxNkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhaoxCis8VTUxQzE+IDxVNTFDMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WHgTAKKzxVNTg4NT4gPFU1ODg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aKFNDY0Cis8VTVDMEM+IDxVNUMwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WwjDAKKzxVNUVCNj4gPFU1RUI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bq2MjQzCis8VTVFQkI+IDxVNUVCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W6uzAKKzxVNjA1NT4gPFU2MDU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oGVMTUxNworPFU2MjBEPiA8VTYyMEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiI04NAorPFU2MzUyPiA8VTYzNTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjZIwCis8VTY1NzA+IDxVNjU3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aVsDM5MDAwCis8VTY3MkY+IDxVNjcyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+acrzIwNTAzCis8VTY3NUY+IDxVNjc1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+adnzk5MTAKKzxVNjgxMT4gPFU2ODExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qCRMTUzNjMKKzxVNkExQz4gPFU2QTFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qicMAorPFU2QTM5PiA8VTZBMzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqLkxNzgKKzxVNkNBRD4gPFU2Q0FEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rKtOQorPFU2RjMxPiA8VTZGMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvLE0MTIKKzxVNkY0ND4gPFU2RjQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r2EMAorPFU2RjhEPiA8VTZGOEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvo0yOQorPFU2RkQ2PiA8VTZGRDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv5YwCis8VTdBRDY+IDxVN0FENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+erljEzNDYKKzxVN0FFQT4gPFU3QUVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56uqMAorPFU3RDQ5PiA8VTdENDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntYk0Cis8VTdGREI+IDxVN0ZEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e/mzAKKzxVODE2Nz4gPFU4MTY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IWnMQorPFU4MzU3PiA8VTgzNTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojZcwCis8VTg0ODE+IDxVODQ4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iSgTEKKzxVODg1Mz4gPFU4ODUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KGTMTEwCis8VTg4Q0I+IDxVODhDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ijizAKKzxVOEM0RT4gPFU4QzRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LGOMjQKKzxVOEZGMD4gPFU4RkYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L+wMTIxMTMKKzxVOTI2NT4gPFU5MjY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YmlMAorPFU5MzMwPiA8VTkzMzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjLAwCis8VTkzRTM+IDxVOTNFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mPozAKKzxVOUQ5MD4gPFU5RDkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6baQMAorPFU1MjM3PiA8VTUyMzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliLcyNDY3Cis8VTU1MzA+IDxVNTUzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUsDE4OAorPFU5QjlCPiA8VTlCOUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprpswCis8VTgwMEQ+IDxVODAwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iAjTE1NzkKKzxVOEE5Qz4gPFU4QTlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KqcMAorPFU1QjQ4PiA8VTVCNDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrYgwCis8VTY0NTQ+IDxVNjQ1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aRlDIwNDMKKzxVN0UxNz4gPFU3RTE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57iXMAorPFU4ODcwPiA8VTg4NzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoobAyMDA4Cis8VTc1Mjk+IDxVNzUyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eUqTE1ODgKKzxVNDhBNj4gPFU0OEE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KKmMAorPFU1NEIwPiA8VTU0QjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkrAwCis8VTVFMDU+IDxVNUUwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W4hTE5MzIKKzxVNUUyNT4gPFU1RTI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bilNDcKKzxVN0U0Mj4gPFU3RTQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57mCMAorPFU4N0MwPiA8VTg3QzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPon4AxNDUKKzxVNjJGND4gPFU2MkY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ou0NDQwCis8VTY4MTM+IDxVNjgxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+agkzMxNAorPFU5NTgyPiA8VTk1ODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPploIxCis8VTk1RTk+IDxVOTVFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mXqTEyNworPFU0OUUwPiA8VTQ5RTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkp6AwCis8VTZEQUU+IDxVNkRBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a2rjIyNAorPFU4MTY4PiA8VTgxNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohagwCis8VTUzQ0M+IDxVNTNDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPjDIwOTIwCis8VTVCNDA+IDxVNUI0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WtgDExNgorPFU1QjQ3PiA8VTVCNDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrYcwCis8VTZCMDY+IDxVNkIwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ashjAKKzxVNzkzNT4gPFU3OTM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56S1MAorPFU4MjZEPiA8VTgyNkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoia0wCis8VTk2RDk+IDxVOTZEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mbmTIyNQorPFU5NzFDPiA8VTk3MUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnJwxMDk2Cis8VTlBNjY+IDxVOUE2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mppjAKKzxVOUFBNj4gPFU5QUE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aqmMQorPFU5RERFPiA8VTlEREU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpt54wCis8VTlFMTg+IDxVOUUxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m4mDEKKzxVOUU3ND4gPFU5RTc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bm0MAorPFUzRjNEPiA8VTNGM0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvL0wCis8VTQ1RUU+IDxVNDVFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SXrjAKKzxVNEFFQT4gPFU0QUVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KuqMAorPFU1ODdEPiA8VTU4N0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlob0xCis8VTYxNjE+IDxVNjE2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aFoTAKKzxVNkEwOT4gPFU2QTA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qiJMAorPFU3MjNEPiA8VTcyM0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniL0yMTUzCis8VTdFMTQ+IDxVN0UxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e4lDAKKzxVOUEzQj4gPFU5QTNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ai7MAorPFUzOUJDPiA8VTM5QkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjprwwCis8VTQ4NkY+IDxVNDg2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ShrzAKKzxVNzA0MD4gPFU3MDQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54GAMAorPFU2MzI5PiA8VTYzMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjKkwCis8VTYzNUQ+IDxVNjM1RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aNnTAKKzxVODEzRD4gPFU4MTNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IS9MAorPFU4QzAxPiA8VThDMDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosIEyMDAwMAorPFU2QzM0PiA8VTZDMzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsLQxODI0MTEKKzxVNkMzNT4gPFU2QzM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rC1NTMKKzxVNkMzQT4gPFU2QzNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rC6MAorPFUzRjc3PiA8VTNGNzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvbcwCis8VTRCNjg+IDxVNEI2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+StqDAKKzxVNUUyOD4gPFU1RTI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bioNQorPFU2RDk3PiA8VTZEOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtpcwCis8VTZEOUE+IDxVNkQ5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a2mjAKKzxVNzc2MT4gPFU3NzYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj552hMTg4MzMKKzxVNzc5Mz4gPFU3NzkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj556TMAorPFU3OTcxPiA8VTc5NzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpbEwCis8VTdBMDU+IDxVN0EwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eohTIKKzxVN0EwRT4gPFU3QTBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56iOMjEwNgorPFU4NkZCPiA8VTg2RkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPom7swCis8VTg4REU+IDxVODhERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ijnjAKKzxVOEFBQT4gPFU4QUFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KqqMjE1NgorPFU4QUFDPiA8VThBQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqqwyMgorPFU1NDJFPiA8VTU0MkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkK4yNzcKKzxVNjNENz4gPFU2M0Q3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+XMAorPFU4Q0YwPiA8VThDRjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPos7AwCis8VTM5Njc+IDxVMzk2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OlpzAKKzxVNDAyMj4gPFU0MDIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ICiMAorPFU0MDM1PiA8VTQwMzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgLUwCis8VTQ0NUU+IDxVNDQ1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SRnjAKKzxVNkE1Mz4gPFU2QTUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qmTMAorPFU3NzlBPiA8VTc3OUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnpowCis8VTc3QUM+IDxVNzdBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eerDMzOTYKKzxVODIxQz4gPFU4MjFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IicNjE5Cis8VTg1NjM+IDxVODU2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iVozAKKzxVOTgwNj4gPFU5ODA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aCGMTM1Cis8VTk4N0E+IDxVOTg3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mhujEwOTc5Cis8VTlCMEE+IDxVOUIwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+msijAKKzxVNTRGRT4gPFU1NEZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZO+MAorPFU4QkY0PiA8VThCRjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor7QzMzUzODIKKzxVNDAyNT4gPFU0MDI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IClMAorPFU0MjNFPiA8VTQyM0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiL4wCis8VTQzMDM+IDxVNDMwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SMgzAKKzxVNTVDRD4gPFU1NUNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZeNMQorPFU1OTgxPiA8VTU5ODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpoEyOQorPFU2M0YxPiA8VTYzRjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmj7EwCis8VTY0MjA+IDxVNjQyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aQoDM2Cis8VTY3MTQ+IDxVNjcxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aclDg3NAorPFU2OUNBPiA8VTY5Q0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmp4o1Cis8VTZCMzY+IDxVNkIzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+astjAKKzxVNzBDMT4gPFU3MEMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54OBMTI5NAorPFU3MjBEPiA8VTcyMEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniI0xMgorPFU3MzYxPiA8VTczNjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjaEwCis8VTc3REY+IDxVNzdERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+efnzAKKzxVNzg1NT4gPFU3ODU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56GVMTEwOQorPFU3QkJFPiA8VTdCQkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrr4wCis8VTg0QjQ+IDxVODRCND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iStDQKKzxVOTM5OT4gPFU5Mzk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y6ZMAorPFU5NDYwPiA8VTk0NjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkaAxCis8VTk0QzQ+IDxVOTRDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mThDQ2Cis8VTRFMUQ+IDxVNEUxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S4nTEwNjAwCis8VTRGRUM+IDxVNEZFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S/rDEKKzxVNTFEOD4gPFU1MUQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YeYMAorPFU1M0FFPiA8VTUzQUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljq4xMzU4Cis8VTUzQjY+IDxVNTNCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WOtjEKKzxVNTNGOD4gPFU1M0Y4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y+4MjU2MTAKKzxVNTQ5RD4gPFU1NDlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZKdMTEyCis8VTU2MzY+IDxVNTYzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WYtjgzMQorPFU1NjVEPiA8VTU2NUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmZ0wCis8VTVBQTQ+IDxVNUFBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WqpDAKKzxVNUVERD4gPFU1RUREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5budMQorPFU2MDFEPiA8VTYwMUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgJ00MDgxMQorPFU2NDk1PiA8VTY0OTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkpUxODEyCis8VTY1QUY+IDxVNjVBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWrzQxODAzCis8VTY5NTI+IDxVNjk1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+alkjAKKzxVNjlCOT4gPFU2OUI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qa5MAorPFU2Q0MwPiA8VTZDQzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPms4AwCis8VTZGOEM+IDxVNkY4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a+jDEwCis8VTcxQ0Q+IDxVNzFDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHjTAKKzxVNzhDMz4gPFU3OEMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56ODMAorPFU3OTk3PiA8VTc5OTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnppcwCis8VTc5QTA+IDxVNzlBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+emoDAKKzxVNzlDMT4gPFU3OUMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56eBNzc0MQorPFU3Q0Y5PiA8VTdDRjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPns7kwCis8VTdENzI+IDxVN0Q3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e1sjcxCis8VTdERTY+IDxVN0RFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3pjAKKzxVN0YwQz4gPFU3RjBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57yMNAorPFU3RjczPiA8VTdGNzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvbMxCis8VTg1NkM+IDxVODU2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iVrDAKKzxVODY1Mj4gPFU4NjUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JmSMgorPFU4NkYzPiA8VTg2RjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPom7M2OQorPFU4NzI0PiA8VTg3MjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonKQwCis8VTg3RDY+IDxVODdENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ifljAKKzxVODdGND4gPFU4N0Y0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J+0MAorPFU4OTk3PiA8VTg5OTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoppcwCis8VThCMTU+IDxVOEIxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+islTAKKzxVOTI3MD4gPFU5MjcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YmwMAorPFU5MkQ2PiA8VTkyRDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpi5YwCis8VTkzNzY+IDxVOTM3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mNtjAKKzxVOTQwMT4gPFU5NDAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZCBMAorPFU5NTM2PiA8VTk1MzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplLY0Cis8VTk4Qjg+IDxVOThCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+miuDAKKzxVOThEND4gPFU5OEQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aOUMAorPFU5QTI2PiA8VTlBMjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqKYwCis8VTlERTU+IDxVOURFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m3pTMKKzxVOUUzNj4gPFU5RTM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bi2MzYKKzxVOUYzNj4gPFU5RjM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6by2MAorPFU2QjdCPiA8VTZCN0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrbs0Nzg2MAorPFUzNDBDPiA8VTM0MEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkIwwCis8VTM1N0Q+IDxVMzU3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OVvTAKKzxVMzZCNj4gPFUzNkI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45q2MAorPFUzOEM4PiA8VTM4Qzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjo4gwCis8VTNCNTI+IDxVM0I1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OtkjAKKzxVM0UzQj4gPFUzRTNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47i7MAorPFUzRTUxPiA8VTNFNTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuZEwCis8VTNGODU+IDxVM0Y4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O+hTAKKzxVNDFDMz4gPFU0MUMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IeDMAorPFU0M0EzPiA8VTQzQTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjqMwCis8VTQzRTQ+IDxVNDNFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SPpDAKKzxVNDk5OT4gPFU0OTk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KaZMAorPFU0RTk2PiA8VTRFOTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkupY3Cis8VTRGM0M+IDxVNEYzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S8vDMwMDAwCis8VTUxMjk+IDxVNTEyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WEqTAKKzxVNTE1NT4gPFU1MTU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YWVMworPFU1NUUzPiA8VTU1RTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPll6M1MzAKKzxVNTZEQj4gPFU1NkRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZubNDc4ODgKKzxVNTlEMj4gPFU1OUQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aeSOAorPFU1QTMwPiA8VTVBMzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqLAwCis8VTVCNjA+IDxVNUI2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WtoDAKKzxVNUJGQT4gPFU1QkZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a+6Mjc3NQorPFU1REYzPiA8VTVERjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlt7MxMjAKKzxVNjc2Qj4gPFU2NzZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p2rMAorPFU2N0Y2PiA8VTY3RjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmn7YwCis8VTZDNUM+IDxVNkM1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+axnDEwCis8VTZDRDc+IDxVNkNENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+azlzQ2MworPFU2Q0U0PiA8VTZDRTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPms6QwCis8VTZEMEQ+IDxVNkQwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a0jTAKKzxVNkQ5OD4gPFU2RDk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5raYMAorPFU3MDAzPiA8VTcwMDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngIMwCis8VTcyNkQ+IDxVNzI2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eJrTAKKzxVNzk0MD4gPFU3OTQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56WAMTk1Cis8VTc5QTk+IDxVNzlBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+emqTMyOQorPFU3QjI1PiA8VTdCMjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrKUxNworPFU4MDFDPiA8VTgwMUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogJwyCis8VTgwODI+IDxVODA4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iCgjEKKzxVODA4Nj4gPFU4MDg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IKGMTM5OQorPFU4NTdDPiA8VTg1N0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolbwwCis8VThDODQ+IDxVOEM4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iyhDAKKzxVOTFGMj4gPFU5MUYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YeyMAorPFU5MjNCPiA8VTkyM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiLswCis8VTk4RTQ+IDxVOThFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mjpDAKKzxVOThGQz4gPFU5OEZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aO8MworPFU5OTcyPiA8VTk5NzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppbIzMDcKKzxVOTk3ND4gPFU5OTc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aW0MjQKKzxVOTlERj4gPFU5OURGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aefMQorPFU5QTc3PiA8VTlBNzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqbc0NworPFVGQTJCPiA8VUZBMkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPvqKswCis8VTUwMkY+IDxVNTAyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WArzAKKzxVNTFDNz4gPFU1MUM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YeHOAorPFU1QTAwPiA8VTVBMDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqIAwCis8VTVEMjc+IDxVNUQyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W0pzE5Cis8VTVENjk+IDxVNUQ2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W1qTg1OQorPFU1RUJBPiA8VTVFQkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlurowCis8VTVGRUE+IDxVNUZFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W/qjk4Cis8VTYxQkQ+IDxVNjFCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aGvTAKKzxVNjc3RT4gPFU2NzdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p2+MTI3MjQKKzxVNjc4MD4gPFU2NzgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p6AMAorPFU2N0E5PiA8VTY3QTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnqkxCis8VTY3RDc+IDxVNjdENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aflzAKKzxVNjhBNT4gPFU2OEE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qKlMAorPFU2QUE3PiA8VTZBQTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqqcwCis8VTZEREU+IDxVNkRERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3njQ2Cis8VTZGQ0Q+IDxVNkZDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a/jTAKKzxVNzg3OT4gPFU3ODc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56G5MAorPFU4M0Q4PiA8VTgzRDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoj5gxMAorPFU4NzE5PiA8VTg3MTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonJkwCis8VTlCMDY+IDxVOUIwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mshjM5Cis8VTM5RDA+IDxVMzlEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OnkDAKKzxVM0EyNj4gPFUzQTI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46imMAorPFUzQTczPiA8VTNBNzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqbMwCis8VTQyNjU+IDxVNDI2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SJpTAKKzxVNDcyQz4gPFU0NzJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JysMAorPFU1MEIxPiA8VTUwQjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgrEwCis8VTVENzc+IDxVNUQ3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W1tzAKKzxVNjAwMj4gPFU2MDAyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oCCMTc1Cis8VTYwOUE+IDxVNjA5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aCmjI2NworPFU2MTJGPiA8VTYxMkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhK8xCis8VTYxNkI+IDxVNjE2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aFqzAKKzxVNjk2ND4gPFU2OTY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qWkMAorPFU3QUU2PiA8VTdBRTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnq6YxOAorPFU4MDM4PiA8VTgwMzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogLgxNjY1Cis8VTgwNzM+IDxVODA3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iBszE5Cis8VTk5Rjc+IDxVOTlGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mntzAKKzxVMzU2Qz4gPFUzNTZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45WsMAorPFUzQkI4PiA8VTNCQjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrrgwCis8VTQ2RTY+IDxVNDZFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SbpjAKKzxVNDhBMD4gPFU0OEEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KKgMAorPFU1QjhCPiA8VTVCOEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlros3ODk4Cis8VThBMUY+IDxVOEExRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ionzAKKzxVOEFBNj4gPFU4QUE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KqmOQorPFU4QkJDPiA8VThCQkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorrw0MzgKKzxVOEJGNT4gPFU4QkY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K+1MTE1NworPFU5MDAxPiA8VTkwMDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgIEyMDgyNworPFU5ODBDPiA8VTk4MEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoIwxNAorPFU5ODgyPiA8VTk4ODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpooI3NTYKKzxVOTkzOD4gPFU5OTM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aS4MAorPFU1M0RDPiA8VTUzREM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlj5wwCis8VTU1RDY+IDxVNTVENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WXljMwNgorPFU1RUMwPiA8VTVFQzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlu4AwCis8VTVFQ0I+IDxVNUVDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W7izEKKzxVNjM1Qz4gPFU2MzVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o2cMAorPFU2NDFDPiA8VTY0MUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkJwzNDA4Cis8VTY0NDk+IDxVNjQ0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aRiTAKKzxVNjQ1Nz4gPFU2NDU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pGXMAorPFU2RUIyPiA8VTZFQjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmurI2Cis8VTczNDA+IDxVNzM0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eNgDAKKzxVODI1OD4gPFU4MjU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ImYMTU5NQorPFU4NDkwPiA8VTg0OTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokpA1Cis8VTg0QzM+IDxVODRDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iTgzIKKzxVODc4Qj4gPFU4NzhCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J6LMQorPFU5MTBCPiA8VTkxMEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphIswCis8VTkxOTk+IDxVOTE5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mGmTAKKzxVOTNBQT4gPFU5M0FBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y6qMAorPFU5NTNDPiA8VTk1M0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplLwxCis8VTk4QkM+IDxVOThCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mivDIKKzxVOThENT4gPFU5OEQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aOVMjE3Cis8VTk5M0Y+IDxVOTkzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mkvzIKKzxVOTk4QT4gPFU5OThBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aaKMTIyCis8VTlBMkE+IDxVOUEyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+moqjAKKzxVMzVBOT4gPFUzNUE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45apMAorPFUzNkQwPiA8VTM2RDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjm5AwCis8VTQyMzk+IDxVNDIzOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SIuTAKKzxVNDI2ND4gPFU0MjY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ImkMAorPFU0M0MyPiA8VTQzQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkj4IwCis8VTRCOUY+IDxVNEI5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SunzAKKzxVNTA4MT4gPFU1MDgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YKBMAorPFU1M0RGPiA8VTUzREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlj58xNDAKKzxVNTVGRT4gPFU1NUZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ze+NgorPFU2NERFPiA8VTY0REU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmk54xNTMKKzxVNjRGQj4gPFU2NEZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pO7MQorPFU2QUUyPiA8VTZBRTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmq6IwCis8VTc3OEQ+IDxVNzc4RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eejTIKKzxVN0M1ND4gPFU3QzU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57GUMQorPFU4NUFFPiA8VTg1QUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolq4yMworPFU4NUVBPiA8VTg1RUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPol6oxCis8VThCMEY+IDxVOEIwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+isjzAKKzxVM0Q3Qj4gPFUzRDdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47W7MAorPFU1NUZEPiA8VTU1RkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPll704MjEKKzxVNzYzNj4gPFU3NjM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55i2MAorPFU1NkNDPiA8VTU2Q0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlm4wwCis8VTZBRUY+IDxVNkFFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+arrzAKKzxVNzUyNj4gPFU3NTI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55SmNgorPFU3QTIxPiA8VTdBMjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqKEwCis8VTdBMjM+IDxVN0EyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eoozU5NAorPFU3QTRDPiA8VTdBNEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqYw2Cis8VTdBQTM+IDxVN0FBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eqozY4Cis8VTgyQ0Y+IDxVODJDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iLjzExOTQ3Cis8VTg2MDc+IDxVODYwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iYhzM3Cis8VTg2MTM+IDxVODYxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iYkzAKKzxVOTE2NT4gPFU5MTY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YWlNDg1Cis8VTlCQzI+IDxVOUJDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mvgjAKKzxVNEZENz4gPFU0RkQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L+XNDg0NgorPFUzNDQ5PiA8VTM0NDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkYkwCis8VTM0NUI+IDxVMzQ1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ORmzAKKzxVMzREOD4gPFUzNEQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45OYMAorPFUzNTA0PiA8VTM1MDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlIQwCis8VTM1NTY+IDxVMzU1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OVljAKKzxVMzcxQT4gPFUzNzFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45yaMAorPFUzNzVCPiA8VTM3NUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnZswCis8VTNBMUU+IDxVM0ExRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OonjAKKzxVM0E0Qj4gPFUzQTRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46mLMAorPFUzQUE5PiA8VTNBQTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqqkwCis8VTNCMTg+IDxVM0IxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OsmDAKKzxVM0JDOD4gPFUzQkM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46+IMAorPFUzRDBCPiA8VTNEMEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtIswCis8VTNEMTE+IDxVM0QxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O0kTAKKzxVM0QzQz4gPFUzRDNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47S8MAorPFU0MEU0PiA8VTQwRTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkg6QwCis8VTQxNDc+IDxVNDE0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SFhzAKKzxVNDMxQT4gPFU0MzFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IyaMAorPFU0Mzk4PiA8VTQzOTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjpgwCis8VTQzQ0I+IDxVNDNDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SPizAKKzxVNDQ3Rj4gPFU0NDdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JG/MAorPFU0NTBFPiA8VTQ1MEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklI4wCis8VTQ2M0I+IDxVNDYzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SYuzAKKzxVNDZGRT4gPFU0NkZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ju+MAorPFU0OTU0PiA8VTQ5NTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpZQwCis8VTUwODM+IDxVNTA4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WCgzAKKzxVNTBGMz4gPFU1MEYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YOzMworPFU1NUM5PiA8VTU1Qzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPll4k1Cis8VTU4NTA+IDxVNTg1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WhkDAKKzxVNTg1MT4gPFU1ODUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aGRMTkwNgorPFU1OTE5PiA8VTU5MTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpJkxMDQKKzxVNUFDQT4gPFU1QUNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5auKMAorPFU1QkJGPiA8VTVCQkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrr81MjEwCis8VTYxMkI+IDxVNjEyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aEqzk2Cis8VTYxMkM+IDxVNjEyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aErDAKKzxVNjE5Rj4gPFU2MTlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oafMQorPFU2ODFDPiA8VTY4MUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoJwwCis8VTY5QTE+IDxVNjlBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+amoTAKKzxVNkExNT4gPFU2QTE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qiVMQorPFU2QTVBPiA8VTZBNUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqZowCis8VTZCOTA+IDxVNkI5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aukDEKKzxVNkNERD4gPFU2Q0REPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rOdMAorPFU2RDJDPiA8VTZEMkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtKwwCis8VTZEOTE+IDxVNkQ5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a2kTQKKzxVNkVBRj4gPFU2RUFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqvMzY1Cis8VTZFQjg+IDxVNkVCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a6uDAKKzxVNkVCOT4gPFU2RUI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rq5MAorPFU2RjVBPiA8VTZGNUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvZowCis8VTZGNjU+IDxVNkY2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a9pTAKKzxVNzM4QT4gPFU3MzhBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj546KMAorPFU3M0RGPiA8VTczREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnj58wCis8VTc0OUI+IDxVNzQ5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eSmzAKKzxVNzhCRj4gPFU3OEJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56K/MAorPFU3QzBDPiA8VTdDMEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsIw0MDgKKzxVN0M5Qj4gPFU3QzlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57KbMAorPFU3QzlGPiA8VTdDOUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsp82MTcKKzxVN0QyMD4gPFU3RDIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57SgOTUzNworPFU3RTI0PiA8VTdFMjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuKQwCis8VTdFMkU+IDxVN0UyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e4rjU0Cis8VTgwODM+IDxVODA4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iCgzMyMjgKKzxVODA4NT4gPFU4MDg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IKFMjUKKzxVODE4Nj4gPFU4MTg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IaGMQorPFU4NTBDPiA8VTg1MEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolIw2Cis8VTg1RDc+IDxVODVENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iXlzAKKzxVODczNj4gPFU4NzM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Jy2MAorPFU4OUVCPiA8VTg5RUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPop6s1Cis8VThBMzQ+IDxVOEEzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iotDE1NQorPFU4QThFPiA8VThBOEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqo4wCis8VThCMTY+IDxVOEIxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+isljAKKzxVOEJDOT4gPFU4QkM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K+JMjAxNzMKKzxVOEMyMT4gPFU4QzIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LChMTQKKzxVOEQ5QT4gPFU4RDlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LaaMAorPFU4RTVDPiA8VThFNUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouZwwCis8VTkwMUY+IDxVOTAxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mAnzE1NjUyCis8VTkwNjE+IDxVOTA2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mBoTAKKzxVOTA2Qz4gPFU5MDZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YGsMAorPFU5MkM5PiA8VTkyQzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpi4kwCis8VTk5MTc+IDxVOTkxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mklzAKKzxVOUE0Qz4gPFU5QTRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6amMMAorPFU5QTk1PiA8VTlBOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqpUzCis8VTlDNTA+IDxVOUM1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxkDAKKzxVOURFQj4gPFU5REVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6berMQorPFU5RTU0PiA8VTlFNTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuZQwCis8VTcyRkI+IDxVNzJGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eLuzgKKzxVNzVFMD4gPFU3NUUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55egMAorPFU5MTc4PiA8VTkxNzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphbgzNTM0Cis8VTM1MkY+IDxVMzUyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OUrzAKKzxVNTMzND4gPFU1MzM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Yy0MAorPFU3OTU4PiA8VTc5NTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpZgwCis8VTdCMDc+IDxVN0IwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eshzAKKzxVN0I2RD4gPFU3QjZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj562tMAorPFU3Qjk3PiA8VTdCOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrpczMzE5NAorPFU4NDlDPiA8VTg0OUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokpwzOTUKKzxVNTRGOD4gPFU1NEY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZO4MAorPFU1OTBBPiA8VTU5MEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpIowCis8VTVBMUU+IDxVNUExRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WonjAKKzxVNkJGOD4gPFU2QkY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q+4MAorPFU2RDdEPiA8VTZEN0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtb0wCis8VTZFRDY+IDxVNkVENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a7ljAKKzxVNkZDOT4gPFU2RkM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r+JMAorPFU3MUEzPiA8VTcxQTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhqMwCis8VTc3MkQ+IDxVNzcyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ecrTAKKzxVNzc2Mj4gPFU3NzYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj552iMjUKKzxVN0Q4Rj4gPFU3RDhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57aPMAorPFU4Mjk1PiA8VTgyOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoipUwCis8VTgzN0Q+IDxVODM3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iNvTEwCis8VTgzN0U+IDxVODM3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iNvjAKKzxVODY3RD4gPFU4NjdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Jm9MjA2MDYKKzxVOTZENj4gPFU5NkQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZuWMjIzCis8VTk3OTY+IDxVOTc5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+meljAKKzxVM0Q2Nj4gPFUzRDY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47WmMAorPFUzRURGPiA8VTNFREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPju58wCis8VTQ3MTQ+IDxVNDcxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SclDAKKzxVNDhBQj4gPFU0OEFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KKrMAorPFU3RUU1PiA8VTdFRTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnu6UzNjYKKzxVOTA0MD4gPFU5MDQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YGAMAorPFU5MDQyPiA8VTkwNDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgYIxMzMwCis8VTk2OEI+IDxVOTY4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+maizE5NAorPFU5NjhGPiA8VTk2OEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmo8yMzA5MQorPFU5NkE4PiA8VTk2QTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmqgyMzYKKzxVOTZERj4gPFU5NkRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZufMAorPFU0QjQ5PiA8VTRCNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrYkwCis8VTRCREQ+IDxVNEJERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SvnTAKKzxVNURCMj4gPFU1REIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bayMAorPFU1REMyPiA8VTVEQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlt4IxCis8VTcwMjE+IDxVNzAyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eAoTAKKzxVODFCOD4gPFU4MUI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ia4MAorPFU5QUM0PiA8VTlBQzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpq4QwCis8VTlBRDM+IDxVOUFEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mrkzQxNQorPFUzNEI4PiA8VTM0Qjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkrgwCis8VTM3Qjg+IDxVMzdCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OeuDAKKzxVM0QxQT4gPFUzRDFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47SaMAorPFUzRUVBPiA8VTNFRUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPju6owCis8VTNFRkQ+IDxVM0VGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O7vTAKKzxVNDE1Nz4gPFU0MTU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IWXMAorPFU0MjRDPiA8VTQyNEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiYwwCis8VTQzNDE+IDxVNDM0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SNgTAKKzxVNDUzOT4gPFU0NTM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JS5MAorPFU0ODE0PiA8VTQ4MTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoJQwCis8VTQ4NzU+IDxVNDg3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ShtTAKKzxVNDk1OT4gPFU0OTU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KWZMAorPFU0RTk3PiA8VTRFOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkupcwCis8VTU3RTM+IDxVNTdFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfozAKKzxVNUIxOD4gPFU1QjE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ayYMAorPFU1QzgxPiA8VTVDODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsoExNzA0NgorPFU1RDU3PiA8VTVENTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltZcwCis8VTY1REU+IDxVNjVERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aXnjAKKzxVNkE4NT4gPFU2QTg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qqFMAorPFU2QTk2PiA8VTZBOTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqpYwCis8VTZCNzI+IDxVNkI3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+atsjEwOQorPFU2QjczPiA8VTZCNzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrbMwCis8VTZFNkE+IDxVNkU2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a5qjAKKzxVNkZCQj4gPFU2RkJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r67MAorPFU3MTZCPiA8VTcxNkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhaswCis8VTcxRTc+IDxVNzFFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHpzQwCis8VTc0QjI+IDxVNzRCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eSsjAKKzxVNzRDRD4gPFU3NENEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55ONMAorPFU3NzVGPiA8VTc3NUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnZ8wCis8VTc4MTU+IDxVNzgxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eglTAKKzxVNzg4RT4gPFU3ODhFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56KONjA2NQorPFU3OTVGPiA8VTc5NUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpZ8zODcKKzxVNzlBRD4gPFU3OUFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56atMAorPFU3QTQyPiA8VTdBNDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqYIwCis8VTdBNTc+IDxVN0E1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eplzI4OQorPFU3QTVGPiA8VTdBNUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqZ8wCis8VTdFNDA+IDxVN0U0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5gDAKKzxVN0U3OD4gPFU3RTc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57m4MQorPFU4OTVBPiA8VTg5NUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopZowCis8VThBQjY+IDxVOEFCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iqtjAKKzxVOEI2Mj4gPFU4QjYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K2iMAorPFU4QzA3PiA8VThDMDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosIc2Cis8VThDRTU+IDxVOENFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+izpTAKKzxVOTA4Mz4gPFU5MDgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKDMjQ2Cis8VTk0MDY+IDxVOTQwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mQhjAKKzxVOTQyOT4gPFU5NDI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZCpMAorPFU5NkE3PiA8VTk2QTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmqc0ODYKKzxVNUI1OT4gPFU1QjU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a2ZMTA1NzcKKzxVNUI2Qj4gPFU1QjZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a2rMTgKKzxVNjQwRT4gPFU2NDBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pCOMAorPFU2OUMyPiA8VTY5QzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmp4IwCis8VTcyRjI+IDxVNzJGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eLsjU1Cis8VTczM0I+IDxVNzMzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eMuzAKKzxVODM2QT4gPFU4MzZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I2qNDYKKzxVODRDMD4gPFU4NEMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JOAMQorPFU4NTc1PiA8VTg1NzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolbUwCis8VTg1OUU+IDxVODU5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iWnjAKKzxVOThFNz4gPFU5OEU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aOnNQorPFU5OEYxPiA8VTk4RjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpo7EwCis8VTM1M0M+IDxVMzUzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OUvDAKKzxVMzg0ND4gPFUzODQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46GEMAorPFUzOThGPiA8VTM5OEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpo8wCis8VTQwNUE+IDxVNDA1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SBmjAKKzxVNjM1Rj4gPFU2MzVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o2fMzc4NworPFU2NDBEPiA8VTY0MEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkI0yMQorPFU2OUFCPiA8VTY5QUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpqsxMworPFU3QjBCPiA8VTdCMEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrIsyNDUKKzxVN0I0RD4gPFU3QjREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj562NNQorPFU3QkIwPiA8VTdCQjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrrAyCis8VTdDMjg+IDxVN0MyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ewqDAKKzxVOTNBOD4gPFU5M0E4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y6oMAorPFU5NkJDPiA8VTk2QkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmrwyNjEKKzxVNjEzQj4gPFU2MTNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oS7MAorPFU2RjYwPiA8VTZGNjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvaAyCis8VTUwOUU+IDxVNTA5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WCnjAKKzxVNTUwNj4gPFU1NTA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZSGMjM2Cis8VTU1RTY+IDxVNTVFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WXpjkxMAorPFU1QTExPiA8VTVBMTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqJExNDYKKzxVNjMzMT4gPFU2MzMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oyxMAorPFU2MzMyPiA8VTYzMzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjLIxMTgKKzxVNjQ0RD4gPFU2NDREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pGNMAorPFU2ODZCPiA8VTY4NkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoaswCis8VTY4QUQ+IDxVNjhBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+airTc2NworPFU2QTBFPiA8VTZBMEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqI4wCis8VTdDMTE+IDxVN0MxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ewkTAKKzxVN0MxND4gPFU3QzE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57CUMAorPFU3RjI5PiA8VTdGMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvKk0NjM3Cis8VTdGQTc+IDxVN0ZBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e+pzUKKzxVODM4Rj4gPFU4MzhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I6PMAorPFU4NEQxPiA8VTg0RDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPok5ExMTEKKzxVOEQ5Nj4gPFU4RDk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LaWMAorPFU5QkJCPiA8VTlCQkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprrswCis8VTNBQkQ+IDxVM0FCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OqvTAKKzxVNDBCOT4gPFU0MEI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IK5MAorPFU0MTc0PiA8VTQxNzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhbQwCis8VTQyMTc+IDxVNDIxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SIlzAKKzxVNDQxRD4gPFU0NDFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JCdMAorPFU0NTlCPiA8VTQ1OUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklpswCis8VTQ1RTI+IDxVNDVFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SXojAKKzxVNDc4Nj4gPFU0Nzg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J6GMAorPFU0N0JEPiA8VTQ3QkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknr0wCis8VTQ4RDQ+IDxVNDhEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SjlDAKKzxVNEQ0MD4gPFU0RDQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LWAMAorPFU1NTIyPiA8VTU1MjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllKI1OQorPFU1NUU5PiA8VTU1RTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPll6kwCis8VTYyNDA+IDxVNjI0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aJgDExMjkxNAorPFU2NDc1PiA8VTY0NzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkbUyCis8VTY2OUI+IDxVNjY5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aamzAKKzxVNkU5MT4gPFU2RTkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqRMAorPFU3NDEwPiA8VTc0MTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkJA5MjIKKzxVNzQxMT4gPFU3NDExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55CRMAorPFU3NDYzPiA8VTc0NjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkaM1Cis8VTc0ODU+IDxVNzQ4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eShTAKKzxVNzYzNz4gPFU3NjM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55i3MAorPFU3RDIyPiA8VTdEMjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntKIxMjM5MgorPFU4OTI4PiA8VTg5Mjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopKgwCis8VTkzOEQ+IDxVOTM4RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mOjTAKKzxVOTM5Nj4gPFU5Mzk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y6WMzYKKzxVOTNCQj4gPFU5M0JCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y67MAorPFU5M0MxPiA8VTkzQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpj4EwCis8VTkzRkM+IDxVOTNGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mPvDAKKzxVOTUwMT4gPFU5NTAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZSBNDMwNgorPFU5MDI0PiA8VTkwMjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgKQwCis8VTRFRDY+IDxVNEVENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S7ljQ4MjAyMAorPFU1ODRDPiA8VTU4NEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloYwxNzc3Cis8VTU5Nzk+IDxVNTk3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WluTI1NDQ2MgorPFU1QjgzPiA8VTVCODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlroM2OTExMworPFU3MjYwPiA8VTcyNjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniaA0OQorPFU3OTQyPiA8VTc5NDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpYIxNworPFU3OUEyPiA8VTc5QTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpqIwCis8VTM1RjM+IDxVMzVGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OXszAKKzxVM0U5QT4gPFUzRTlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47qaMAorPFU1ODU0PiA8VTU4NTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloZQ3MDMzCis8VTY5OTk+IDxVNjk5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ammTAKKzxVNzM2RD4gPFU3MzZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj542tNTQKKzxVNzM3QT4gPFU3MzdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5426MAorPFU5QzI4PiA8VTlDMjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsKgwCis8VTM0OTM+IDxVMzQ5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OSkzAKKzxVMzZFNT4gPFUzNkU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45ulMAorPFUzOERCPiA8VTM4REI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjo5swCis8VTM4RjU+IDxVMzhGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OjtTAKKzxVMzlGQT4gPFUzOUZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46e6MAorPFUzQjdDPiA8VTNCN0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrbwwCis8VTNCRDM+IDxVM0JEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OvkzAKKzxVM0NFMD4gPFUzQ0UwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47OgMAorPFUzQ0VCPiA8VTNDRUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjs6swCis8VTNFN0E+IDxVM0U3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O5ujAKKzxVM0ZGOT4gPFUzRkY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47+5MAorPFU0MEJGPiA8VTQwQkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgr8wCis8VTQyMEI+IDxVNDIwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SIizAKKzxVNDIzMz4gPFU0MjMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IizMAorPFU0MzA4PiA8VTQzMDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjIgwCis8VTQzNDc+IDxVNDM0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SNhzAKKzxVNDM1RD4gPFU0MzVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I2dMAorPFU0MzkzPiA8VTQzOTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjpMwCis8VTQ0NUM+IDxVNDQ1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SRnDAKKzxVNDRFMD4gPFU0NEUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JOgMAorPFU0NzFBPiA8VTQ3MUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknJowCis8VTRENkM+IDxVNEQ2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S1rDAKKzxVNEQ4MD4gPFU0RDgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LaAMAorPFU0RDgxPiA8VTREODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktoEwCis8VTRFQTM+IDxVNEVBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6ozAKKzxVNTA5RD4gPFU1MDlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YKdMAorPFU1NjgzPiA8VTU2ODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmoMwCis8VTU2QkE+IDxVNTZCQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WaujAKKzxVNUQwOT4gPFU1RDA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bSJMAorPFU2MkQzPiA8VTYyRDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmi5MxMzczCis8VTYzMUU+IDxVNjMxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aMnjEwOQorPFU2NDI4PiA8VTY0Mjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkKgwCis8VTY0QkI+IDxVNjRCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aSuzEKKzxVNjlCQj4gPFU2OUJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qa7NTg3Cis8VTZBN0Q+IDxVNkE3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+apvTAKKzxVNkJGRT4gPFU2QkZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q++MAorPFU2REJFPiA8VTZEQkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtr4wCis8VTZFQkI+IDxVNkVCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a6uzIKKzxVNkZCRT4gPFU2RkJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r6+MAorPFU2RkNDPiA8VTZGQ0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv4wwCis8VTcyRTc+IDxVNzJFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eLpzAKKzxVN0Y4RD4gPFU3RjhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj576NMAorPFU4QUJCPiA8VThBQkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqrswCis8VThCNzY+IDxVOEI3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ittjAKKzxVOEUwRj4gPFU4RTBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LiPMzUyNAorPFU4RTRCPiA8VThFNEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouYsyNzQKKzxVOEU3OT4gPFU4RTc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Lm5MAorPFU4RTgyPiA8VThFODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouoIwCis8VThFQTI+IDxVOEVBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6ojAKKzxVOEZENj4gPFU4RkQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L+WMAorPFU5MDVEPiA8VTkwNUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgZ0wCis8VTkwNjI+IDxVOTA2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mBojEyOAorPFU5MzE0PiA8VTkzMTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjJQwCis8VTkzODk+IDxVOTM4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mOiTAKKzxVOTQ0OT4gPFU5NDQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZGJMAorPFU5NUU1PiA8VTk1RTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl6UwCis8VTk1RkM+IDxVOTVGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mXvDE3Cis8VTk3OUM+IDxVOTc5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+menDAKKzxVOTdCMz4gPFU5N0IzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z6zMAorPFU5Qjk5PiA8VTlCOTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprpkwCis8VTlGOTY+IDxVOUY5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m+ljAKKzxVOUY5OD4gPFU5Rjk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b6YMAorPFU1NkZDPiA8VTU2RkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlm7wwCis8VTU3NkU+IDxVNTc2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WdrjAKKzxVNUI2MT4gPFU1QjYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a2hMAorPFU4MENFPiA8VTgwQ0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPog44xNTU1Cis8VTgxRkE+IDxVODFGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iHujI4Cis8VTgyRDQ+IDxVODJEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iLlDU1MworPFUzNDk3PiA8VTM0OTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkpcwCis8VTM2MDY+IDxVMzYwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OYhjAKKzxVMzY3NT4gPFUzNjc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45m1MAorPFUzOENEPiA8VTM4Q0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjo40wCis8VTNCMDM+IDxVM0IwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OsgzAKKzxVM0REOD4gPFUzREQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47eYMAorPFUzRTAwPiA8VTNFMDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuIAwCis8VTQyMUE+IDxVNDIxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SImjAKKzxVNDQ1Mz4gPFU0NDUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JGTMAorPFU0OEIwPiA8VTQ4QjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkorAwCis8VTUxMTM+IDxVNTExMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WEkzAKKzxVNTNGMD4gPFU1M0YwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y+wMzk2ODYKKzxVNUIyRj4gPFU1QjJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ayvMAorPFU2MkFDPiA8VTYyQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiqw3ODAxCis8VTY0RTE+IDxVNjRFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aToTAKKzxVNjVGMj4gPFU2NUYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5peyMAorPFU2QUFGPiA8VTZBQUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqq84Cis8VTcwQjE+IDxVNzBCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eCsTMKKzxVNzBCMj4gPFU3MEIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54KyMAorPFU3OUVFPiA8VTc5RUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnp64wCis8VTdDNDk+IDxVN0M0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+exiTAKKzxVODNFRD4gPFU4M0VEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I+tMAorPFU4NUI5PiA8VTg1Qjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolrk2Cis8VThEQzY+IDxVOERDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i3hjEwNworPFU5MEIwPiA8VTkwQjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgrA1OAorPFU5OEIxPiA8VTk4QjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPporEwCis8VTk5RDg+IDxVOTlEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mnmDAKKzxVOUI5MD4gPFU5QjkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a6QMAorPFU5QzkwPiA8VTlDOTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpspAwCis8VTM0Nzc+IDxVMzQ3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ORtzAKKzxVMzk2RD4gPFUzOTZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46WtMAorPFU0OEVEPiA8VTQ4RUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPko60wCis8VTUxQUQ+IDxVNTFBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WGrTAKKzxVNTkyQT4gPFU1OTJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aSqNjM3MDkKKzxVNTkzMz4gPFU1OTMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aSzMAorPFU1RkYyPiA8VTVGRjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv7IwCis8VTYwMDE+IDxVNjAwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aAgTE5MjM1Cis8VTYxNEI+IDxVNjE0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aFizIyMQorPFU2QzcwPiA8VTZDNzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsbAzODkKKzxVNkNGMD4gPFU2Q0YwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rOwMzEwNgorPFU2RTk5PiA8VTZFOTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmupkwCis8VTcxRTQ+IDxVNzFFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHpDAKKzxVN0M4Rj4gPFU3QzhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57KPMAorPFU4MEJEPiA8VTgwQkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogr0yNQorPFU4MjI2PiA8VTgyMjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiKYwCis8VTkxNUU+IDxVOTE1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mFnjAKKzxVOTIyNj4gPFU5MjI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YimMAorPFU5NDlCPiA8VTk0OUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkpszMworPFU1NzREPiA8VTU3NEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnY0zMjQKKzxVNjAzOT4gPFU2MDM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oC5MAorPFU2MkE5PiA8VTYyQTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiqkwCis8VTY0NEE+IDxVNjQ0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aRijIyMjQKKzxVNjRGOT4gPFU2NEY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pO5MAorPFU2NTI0PiA8VTY1MjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlKQ4Cis8VTZFRTk+IDxVNkVFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a7qTE4OTcKKzxVNzA1OD4gPFU3MDU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54GYMjQKKzxVNzYyQj4gPFU3NjJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55irNjc5Cis8VTc2NzE+IDxVNzY3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eZsTcKKzxVN0RDMj4gPFU3REMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57eCMAorPFU4MjExPiA8VTgyMTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiJEwCis8VThDQUE+IDxVOENBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iyqjEzCis8VThEMkE+IDxVOEQyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i0qjI4MjcKKzxVM0M5Qz4gPFUzQzlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47KcMAorPFUzRENCPiA8VTNEQ0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjt4swCis8VTNGNTE+IDxVM0Y1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O9kTAKKzxVNDBFQT4gPFU0MEVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IOqMAorPFU0MjYxPiA8VTQyNjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiaEwCis8VTQyQTQ+IDxVNDJBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SKpDAKKzxVNDU0QT4gPFU0NTRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JWKMAorPFU1MDEzPiA8VTUwMTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgJMzCis8VTU3NUI+IDxVNTc1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WdmzMwNTYKKzxVNThCMD4gPFU1OEIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aKwMAorPFU1OEI1PiA8VTU4QjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlorUwCis8VTU4Qzc+IDxVNThDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WjhzEyCis8VTU4REM+IDxVNThEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WjnDAKKzxVNUE1Mj4gPFU1QTUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5amSMAorPFU1RjM5PiA8VTVGMzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvLkxMDAwMAorPFU2MTlCPiA8VTYxOUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhpswCis8VTY2MTk+IDxVNjYxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aYmTk4Cis8VTY2Qzc+IDxVNjZDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+abhzAKKzxVNjk4Mz4gPFU2OTgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qaDMAorPFU2QTVEPiA8VTZBNUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqZ0wCis8VTZBODA+IDxVNkE4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aqgDM2MQorPFU2RjZEPiA8VTZGNkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmva03NzkKKzxVNzVGMD4gPFU3NUYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55ewMzY3Cis8VTdGNDg+IDxVN0Y0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9iDEKKzxVN0Y0RT4gPFU3RjRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj572OMAorPFU4NUVCPiA8VTg1RUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPol6swCis8VThBQzc+IDxVOEFDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+irhzE2NworPFU4QjVBPiA8VThCNUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorZowCis8VThDMDg+IDxVOEMwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwiDI1OTQ4Cis8VThDMkQ+IDxVOEMyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwrTk4MAorPFU4QzlBPiA8VThDOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPospowCis8VTkwRUY+IDxVOTBFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mDrzEKKzxVOTE4OD4gPFU5MTg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YaIMAorPFU5MUIwPiA8VTkxQjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphrAwCis8VTkzMUY+IDxVOTMxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mMnzAKKzxVOTUyQz4gPFU5NTJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZSsMAorPFU5OTI0PiA8VTk5MjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppKQwCis8VTlBMjg+IDxVOUEyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+moqDAKKzxVOUE1ND4gPFU5QTU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6amUMAorPFU5REU0PiA8VTlERTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpt6QwCis8VTlFRUU+IDxVOUVFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7rjEKKzxVM0NBRD4gPFUzQ0FEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47KtMAorPFU0MUIxPiA8VTQxQjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhrEwCis8VTQzRDk+IDxVNDNEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SPmTAKKzxVNDdBMT4gPFU0N0ExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J6hMAorPFU0OTk0PiA8VTQ5OTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkppQwCis8VTU1RkY+IDxVNTVGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WXvzAKKzxVNTc2Nj4gPFU1NzY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z2mOTg4MAorPFU1RkQwPiA8VTVGRDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv5AyNDYKKzxVNjFCMz4gPFU2MUIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oazMAorPFU2MUJCPiA8VTYxQkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhrswCis8VTZCRUY+IDxVNkJFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+avrzExMzcKKzxVNzRBRT4gPFU3NEFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55KuMAorPFU4M0ZDPiA8VTgzRkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoj7wwCis8VTg4OTI+IDxVODg5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iikjI3OQorPFU4OEU3PiA8VTg4RTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo6cwCis8VTg5NjI+IDxVODk2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ilojAKKzxVOEQwOT4gPFU4RDA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LSJMAorPFU5MTkzPiA8VTkxOTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphpMwCis8VTkyNkQ+IDxVOTI2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mJrTAKKzxVNDQzQT4gPFU0NDNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JC6MAorPFU0NzE2PiA8VTQ3MTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknJYwCis8VTUzRjk+IDxVNTNGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPuTY5OTYKKzxVNTYwNj4gPFU1NjA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZiGNjkKKzxVNTdFRT4gPFU1N0VFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z+uMgorPFU2M0EyPiA8VTYzQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjqI3NDQ0Cis8VTZCNEU+IDxVNkI0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+atjjYKKzxVNkU2MD4gPFU2RTYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rmgMAorPFU3MEFEPiA8VTcwQUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngq0xODA1Cis8VTc4QjM+IDxVNzhCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eiszM3NAorPFU4Q0U3PiA8VThDRTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPos6cwCis8VThENTU+IDxVOEQ1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i1lTAKKzxVNTI4Rj4gPFU1MjhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YqPMAorPFU1NjIxPiA8VTU2MjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmKEyMAorPFU1NzYzPiA8VTU3NjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnaMwCis8VTZDNjQ+IDxVNkM2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+axpDM3NjIKKzxVN0ZCMD4gPFU3RkIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj576wMAorPFU4NzZBPiA8VTg3NkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonaowCis8VThEOUY+IDxVOEQ5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i2nzE2OTEKKzxVOEU1QT4gPFU4RTVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LmaMTQKKzxVOTNEQz4gPFU5M0RDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+cMAorPFU5NDBCPiA8VTk0MEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkIswCis8VTk0RjQ+IDxVOTRGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mTtDAKKzxVOTU1Nz4gPFU5NTU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZWXMjEKKzxVOTdCQT4gPFU5N0JBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z66MAorPFU5RjFFPiA8VTlGMUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvJ4wCis8VTM0N0Q+IDxVMzQ3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ORvTAKKzxVMzY3Nj4gPFUzNjc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45m2MAorPFUzNzBEPiA8VTM3MEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnI0wCis8VTNCN0I+IDxVM0I3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OtuzAKKzxVM0NBNT4gPFUzQ0E1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47KlMAorPFUzRjNBPiA8VTNGM0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvLowCis8VTQxNkY+IDxVNDE2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SFrzAKKzxVNDI0RT4gPFU0MjRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ImOMAorPFU0MzA1PiA8VTQzMDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjIUwCis8VTQ4RDg+IDxVNDhEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SjmDAKKzxVNDlEQz4gPFU0OURDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KecMAorPFU1MDhGPiA8VTUwOEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgo8wCis8VTU1MTA+IDxVNTUxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUkDc4ODgKKzxVNTU3QT4gPFU1NTdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZW6MAorPFU1ODAyPiA8VTU4MDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloIIxMzQxOQorPFU1ODU4PiA8VTU4NTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloZgxMDM1Cis8VTY0MkE+IDxVNjQyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aQqjE5OAorPFU2OEUwPiA8VTY4RTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmo6A3NTkKKzxVNjlCNj4gPFU2OUI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qa2MAorPFU2QTE4PiA8VTZBMTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqJgwCis8VTZBNTY+IDxVNkE1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+apljAKKzxVNkU4Rj4gPFU2RThGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqPNworPFU2RjFGPiA8VTZGMUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvJ8wCis8VTcxN0I+IDxVNzE3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eFuzAKKzxVNzQ2RD4gPFU3NDZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55GtMworPFU3OEM0PiA8VTc4QzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPno4QwCis8VTc5OUY+IDxVNzk5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+emnzEwNworPFU3QkQ2PiA8VTdCRDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnr5YwCis8VTdDQzM+IDxVN0NDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ezgzAKKzxVN0NENj4gPFU3Q0Q2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57OWMjY4OAorPFU3Q0RCPiA8VTdDREI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPns5swCis8VTgxODU+IDxVODE4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iGhTEKKzxVODE5Qj4gPFU4MTlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IabODE1Cis8VTg0Q0U+IDxVODRDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iTjjAKKzxVODU5QT4gPFU4NTlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JaaMAorPFU4Nzk3PiA8VTg3OTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonpcwCis8VTg3QjM+IDxVODdCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ieszQ0Cis8VThENkY+IDxVOEQ2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i1rzAKKzxVOEUzQz4gPFU4RTNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Li8MAorPFU5MTBDPiA8VTkxMEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphIwwCis8VTkxQTM+IDxVOTFBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mGozIKKzxVOTM5NT4gPFU5Mzk1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y6VMAorPFU5NURCPiA8VTk1REI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl5swCis8VTk2OUE+IDxVOTY5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mamjAKKzxVOTkzMz4gPFU5OTMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aSzMAorPFU5OTM5PiA8VTk5Mzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppLkwCis8VTk5NDQ+IDxVOTk0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mlhDAKKzxVOTk2Nz4gPFU5OTY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aWnNgorPFU5REI2PiA8VTlEQjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptrYwCis8VTM0ODk+IDxVMzQ4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OSiTAKKzxVM0ZFOT4gPFUzRkU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47+pMAorPFU0RjE2PiA8VTRGMTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvJYwCis8VTUwMTg+IDxVNTAxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAmDE3NjQKKzxVNTA1Mj4gPFU1MDUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YGSMQorPFU1MEE1PiA8VTUwQTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgqUxMzEKKzxVNTEzQj4gPFU1MTNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YS7MAorPFU1RTExPiA8VTVFMTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluJExMgorPFU2MjAzPiA8VTYyMDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiIMwCis8VTY2RUQ+IDxVNjZFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+abrTAKKzxVNkRDQz4gPFU2RENDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5reMOTcxCis8VTcyMjM+IDxVNzIyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eIozAKKzxVNzdEOD4gPFU3N0Q4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+YMAorPFU4MDI1PiA8VTgwMjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogKUwCis8VThFQkE+IDxVOEVCQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6ujYyMDYKKzxVOTNCMj4gPFU5M0IyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y6yMAorPFU5NDgyPiA8VTk0ODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkoIwCis8VTk1NEI+IDxVOTU0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mVizEKKzxVNDdENj4gPFU0N0Q2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J+WMAorPFU2NDY1PiA8VTY0NjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkaUwCis8VTcwRUI+IDxVNzBFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eDqzEzNDMKKzxVNzFEOT4gPFU3MUQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54eZNgorPFU1QUNEPiA8VTVBQ0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlq40wCis8VTVGMjI+IDxVNUYyMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W8ojIKKzxVNjE0Nj4gPFU2MTQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oWGMAorPFU2MzhGPiA8VTYzOEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjo8yNzI5Cis8VTY0MkY+IDxVNjQyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aQrzAKKzxVNjlDND4gPFU2OUM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qeEMAorPFU2RDlCPiA8VTZEOUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtpszNDkwCis8VTZFRDQ+IDxVNkVEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a7lDEwMTgKKzxVNzQ2Qj4gPFU3NDZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55GrMAorPFU3RDVCPiA8VTdENUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntZszCis8VTdFMUE+IDxVN0UxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e4mjQKKzxVN0UyNz4gPFU3RTI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57inMAorPFU3RUU2PiA8VTdFRTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnu6Y2NworPFU3RkUyPiA8VTdGRTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnv6IwCis8VTg3MkE+IDxVODcyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+icqjAKKzxVOEE1Qz4gPFU4QTVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KmcMAorPFU4QjFGPiA8VThCMUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorJ8wCis8VTk3QjE+IDxVOTdCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mesTAKKzxVOTdEQz4gPFU5N0RDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z+cMAorPFU5N0VDPiA8VTk3RUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpn6wxMjMKKzxVOThGOD4gPFU5OEY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aO4MAorPFU5OTU1PiA8VTk5NTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppZU0NQorPFUzRTU3PiA8VTNFNTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuZcwCis8VTRCMUU+IDxVNEIxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SsnjAKKzxVNTMwQj4gPFU1MzBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YyLMTgKKzxVNTRCNz4gPFU1NEI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZK3MAorPFU1NTU1PiA8VTU1NTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllZUxNjYKKzxVNjg0Mz4gPFU2ODQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qGDMzQyNgorPFU2QUFFPiA8VTZBQUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqq4wCis8VTZEMkU+IDxVNkQyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a0rjIwCis8VTZERDg+IDxVNkREOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3mDc5MQorPFU3OTc5PiA8VTc5Nzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpbkwCis8VTdEQUY+IDxVN0RBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e2rzAKKzxVODQwND4gPFU4NDA0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JCEMTI5NworPFU4OEVBPiA8VTg4RUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo6owCis8VThGRUY+IDxVOEZFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i/rzAKKzxVOTAwMz4gPFU5MDAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YCDODQ0MQorPFU5MTg0PiA8VTkxODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphoQwCis8VTkyRkU+IDxVOTJGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mLvjAKKzxVOTMyRD4gPFU5MzJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YytMAorPFU5Njc2PiA8VTk2NzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmbYyMDEyCis8VTk3ODA+IDxVOTc4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+megDAKKzxVOTc4OT4gPFU5Nzg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z6JMAorPFU5OTQwPiA8VTk5NDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppYAwCis8VTk5RTM+IDxVOTlFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mnozAKKzxVOUEwQT4gPFU5QTBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aiKMQorPFU5RjE3PiA8VTlGMTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvJcxCis8VTQ2QUY+IDxVNDZBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SarzAKKzxVNDZCNT4gPFU0NkI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Jq1MAorPFU0RDVBPiA8VTRENUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktZowCis8VThBMEU+IDxVOEEwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iojjE1NAorPFU4QkE4PiA8VThCQTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorqgxNTQ0NQorPFUzNjkwPiA8VTM2OTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmpAwCis8VTU5NTc+IDxVNTk1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+Wllzk0MjMKKzxVMzk0Mj4gPFUzOTQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46WCMAorPFUzOUY5PiA8VTM5Rjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjp7kwCis8VTVGRDE+IDxVNUZEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W/kTI0MworPFU1RkQyPiA8VTVGRDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv5IyMDYKKzxVNzI3OT4gPFU3Mjc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54m5NDc4MTUKKzxVODEyNj4gPFU4MTI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ISmMAorPFU4NkFFPiA8VTg2QUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomq4wCis8VTg3QTM+IDxVODdBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ieozAKKzxVODdEOD4gPFU4N0Q4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J+YMAorPFU4Q0EzPiA8VThDQTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosqMwCis8VTkyRjE+IDxVOTJGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mLsTAKKzxVOTRGRD4gPFU5NEZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZO9MQorPFU5RDBGPiA8VTlEMEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptI8wCis8VTgxQUY+IDxVODFBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iGrzAKKzxVOUYxRj4gPFU5RjFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6byfMAorPFU0NDg1PiA8VTQ0ODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkoUwCis8VTQ1Njg+IDxVNDU2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SVqDAKKzxVNDgyRT4gPFU0ODJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KCuMAorPFU0QzhEPiA8VTRDOEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkso0wCis8VTRDQTI+IDxVNENBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SyojAKKzxVNTEyRj4gPFU1MTJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YSvMAorPFU1RTUwPiA8VTVFNTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluZAwCis8VTZFRDU+IDxVNkVENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a7lTIxMworPFU2RjFCPiA8VTZGMUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvJswCis8VTc1QkM+IDxVNzVCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eWvDQzNTMKKzxVN0M1MD4gPFU3QzUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57GQMAorPFU3QzU4PiA8VTdDNTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsZgwCis8VTdFMjI+IDxVN0UyMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e4ojAKKzxVODE3RT4gPFU4MTdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IW+Mzg4MQorPFU4NUU0PiA8VTg1RTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPol6QxMjgxCis8VThBOEE+IDxVOEE4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iqijk5Cis8VThCMDQ+IDxVOEIwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ishDAKKzxVOTlFNj4gPFU5OUU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aemMAorPFU5QTMwPiA8VTlBMzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqLAzMAorPFU5QTYzPiA8VTlBNjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqaMwCis8VTlDMjc+IDxVOUMyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mwpzAKKzxVNTI1ND4gPFU1MjU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YmUNjMxCis8VTY4QUY+IDxVNjhBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+airzMwOTUKKzxVOEUyMj4gPFU4RTIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LiiMjI5MAorPFU5MkJCPiA8VTkyQkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpirswCis8VTk1MTE+IDxVOTUxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mUkTgKKzxVOURDOD4gPFU5REM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6beIMAorPFU5REM5PiA8VTlEQzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpt4kxCis8VTM1OTI+IDxVMzU5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OWkjAKKzxVMzg1Nz4gPFUzODU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46GXMAorPFUzOEUyPiA8VTM4RTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjo6IwCis8VTQxNjA+IDxVNDE2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SFoDAKKzxVNDUzNj4gPFU0NTM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JS2MAorPFU0NkEzPiA8VTQ2QTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmqMwCis8VTQ2RjE+IDxVNDZGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SbsTAKKzxVNDc3MD4gPFU0NzcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J2wMAorPFU0OEUxPiA8VTQ4RTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPko6EwCis8VTRBMTE+IDxVNEExMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SokTAKKzxVNEIzRT4gPFU0QjNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ky+MAorPFU1MDREPiA8VTUwNEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgY0wCis8VTUzOTc+IDxVNTM5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WOlzAKKzxVNTU3Qz4gPFU1NTdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZW8NzY4Cis8VTU1QzE+IDxVNTVDMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WXgTAKKzxVNUE4Mj4gPFU1QTgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aqCMAorPFU1RDM5PiA8VTVEMzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltLkwCis8VTYwRkY+IDxVNjBGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aDvzAKKzxVNjNEMD4gPFU2M0QwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+QNTEyMDcKKzxVNkYzRD4gPFU2RjNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ry9MAorPFU3NDQ1PiA8VTc0NDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkYUwCis8VTc3N0M+IDxVNzc3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+edvDAKKzxVNzhBRT4gPFU3OEFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56KuMAorPFU3OTk0PiA8VTc5OTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnppQyNgorPFU3OUI1PiA8VTc5QjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnprUzNDIKKzxVN0EwQT4gPFU3QTBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56iKMAorPFU3QTQ5PiA8VTdBNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqYkwCis8VTdEODg+IDxVN0Q4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e2iDAKKzxVN0RGOT4gPFU3REY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57e5MAorPFU3RUU4PiA8VTdFRTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnu6g0Cis8VTdGMDc+IDxVN0YwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e8hzYKKzxVN0Y2ND4gPFU3RjY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj572kMAorPFU4MkQwPiA8VTgyRDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi5AwCis8VTgzNTE+IDxVODM1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iNkTE1Cis8VTg1NUI+IDxVODU1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iVmzAKKzxVODc2RD4gPFU4NzZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J2tMAorPFU4REE3PiA8VThEQTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotqcwCis8VThFNDQ+IDxVOEU0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i5hDg4MQorPFU4RTRGPiA8VThFNEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouY8wCis8VTkwNDY+IDxVOTA0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mBhjAKKzxVOTE4RD4gPFU5MThEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YaNMzkKKzxVOTM1Nz4gPFU5MzU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y2XMAorPFU5ODRDPiA8VTk4NEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoYw0MTgKKzxVOTg5OD4gPFU5ODk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aKYODk0NjIKKzxVOUEyMD4gPFU5QTIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aigMQorPFU5QkI3PiA8VTlCQjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprrcwCis8VTlCRjc+IDxVOUJGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mvtzAKKzxVOUQzQT4gPFU5RDNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bS6MAorPFU5RDVDPiA8VTlENUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptZwwCis8VTlEOTc+IDxVOUQ5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m2lzAKKzxVOUQ5OT4gPFU5RDk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6baZMAorPFU5RTQ4PiA8VTlFNDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuYgxNAorPFU0MzIxPiA8VTQzMjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjKEwCis8VTQ4RkQ+IDxVNDhGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SjvTAKKzxVNEE4Nj4gPFU0QTg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KqGMAorPFU0RDhGPiA8VTREOEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkto8wCis8VTRGNTM+IDxVNEY1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S9kzU2ODkzCis8VTYzMkU+IDxVNjMyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aMrjAKKzxVOEVCMD4gPFU4RUIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LqwMAorPFU4RUM2PiA8VThFQzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPou4YwCis8VTlBQjU+IDxVOUFCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mqtTAKKzxVOUFEND4gPFU5QUQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6auUNjU0Cis8VTM1RTM+IDxVMzVFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OXozAKKzxVM0IzMT4gPFUzQjMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46yxMAorPFUzQkU5PiA8VTNCRTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjr6kwCis8VTQzQUU+IDxVNDNBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SOrjAKKzxVNDY1Nz4gPFU0NjU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JmXMAorPFU0OUM1PiA8VTQ5QzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkp4UwCis8VTRCREM+IDxVNEJEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SvnDAKKzxVNEQ5MT4gPFU0RDkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LaRMAorPFU0RkU0PiA8VTRGRTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkv6QwCis8VTUwMUM+IDxVNTAxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAnDEzNQorPFU1MjQzPiA8VTUyNDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliYM3MTEKKzxVNTY4Rj4gPFU1NjhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZqPMjI1Cis8VTU2OTQ+IDxVNTY5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WalDAKKzxVNUM0OT4gPFU1QzQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bGJODEzCis8VTVDNUM+IDxVNUM1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WxnDYKKzxVNUM1Rj4gPFU1QzVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bGfMAorPFU2MDhDPiA8VTYwOEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgow1NQorPFU2MDkwPiA8VTYwOTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgpAwCis8VTYwRDU+IDxVNjBENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aDlTY1NworPFU2MjNCPiA8VTYyM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiLswCis8VTYzQTY+IDxVNjNBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aOpjAKKzxVNjNFNT4gPFU2M0U1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+lMQorPFU2NkZGPiA8VTY2RkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmm783NzMwCis8VTZCNTI+IDxVNkI1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+atkjAKKzxVNkJBMj4gPFU2QkEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q6iMAorPFU2RDk1PiA8VTZEOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtpU3MjMKKzxVN0M0QT4gPFU3QzRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57GKMAorPFU4NTk5PiA8VTg1OTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolpkxNAorPFU4OEZDPiA8VTg4RkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo7w0Cis8VTg5MDU+IDxVODkwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ikhTAKKzxVOEZDRj4gPFU4RkNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L+PMAorPFU5MDE2PiA8VTkwMTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgJY0Cis8VTkwMzc+IDxVOTAzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mAtzAKKzxVOTMyQj4gPFU5MzJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YyrMworPFU5NDFGPiA8VTk0MUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkJ8wCis8VTk0OTY+IDxVOTQ5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mSljAKKzxVOUFFMj4gPFU5QUUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6auiMAorPFU5QUYwPiA8VTlBRjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpq7AwCis8VTlCMDA+IDxVOUIwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+msgDEKKzxVOUIwND4gPFU5QjA0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ayEMQorPFU1MDBFPiA8VTUwMEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgI4wCis8VTUxNzI+IDxVNTE3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WFsjAKKzxVNTkyOT4gPFU1OTI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aSpMTYyODc2Cis8VTVBNTY+IDxVNUE1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WpljAKKzxVNUM0Nz4gPFU1QzQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bGHMAorPFU2REZCPiA8VTZERkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmt7syNDgyCis8VTkxNUY+IDxVOTE1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mFnzAKKzxVOTc1ND4gPFU5NzU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z2UMAorPFU5NzVEPiA8VTk3NUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnZ0wCis8VTlFQzc+IDxVOUVDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7hzAKKzxVMzlDMj4gPFUzOUMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46eCMAorPFU0NDVBPiA8VTQ0NUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkZowCis8VTQ3RTc+IDxVNDdFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SfpzAKKzxVNDg1Mj4gPFU0ODUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KGSMAorPFU0ODU4PiA8VTQ4NTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoZgwCis8VTQ5NTY+IDxVNDk1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SlljAKKzxVNTg2MT4gPFU1ODYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aGhMAorPFU1ODZCPiA8VTU4NkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloasxNzg5Cis8VTYwNkM+IDxVNjA2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBrDM3NgorPFU2Q0JBPiA8VTZDQkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsrowCis8VTZFNDk+IDxVNkU0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a5iTAKKzxVNzRCMz4gPFU3NEIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55KzMAorPFU3NTFCPiA8VTc1MUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlJswCis8VTc1MUM+IDxVNzUxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eUnDM1MzQKKzxVNzUzMD4gPFU3NTMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55SwMTM0OTkKKzxVNzU0Qj4gPFU3NTRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55WLNAorPFU3NTUxPiA8VTc1NTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlZEwCis8VTc2Rjc+IDxVNzZGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ebtzAKKzxVNzhDQz4gPFU3OENDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56OMMAorPFU3QUI0PiA8VTdBQjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqrQwCis8VTgwQ0I+IDxVODBDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iDizAKKzxVODNGRT4gPFU4M0ZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I++MAorPFU5NUQwPiA8VTk1RDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl5AwCis8VTk2MTc+IDxVOTYxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mYlzQxCis8VTlEQzY+IDxVOURDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m3hjAKKzxVMzQwMT4gPFUzNDAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45CBMAorPFUzNUFEPiA8VTM1QUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlq0wCis8VTM2NDk+IDxVMzY0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OZiTAKKzxVMzk0Rj4gPFUzOTRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46WPMAorPFU0MTNDPiA8VTQxM0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhLwwCis8VTQxM0Q+IDxVNDEzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SEvTAKKzxVNDQwQz4gPFU0NDBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JCMMAorPFU0ODA0PiA8VTQ4MDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoIQwCis8VTRBNDQ+IDxVNEE0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SphDAKKzxVNTUzQT4gPFU1NTNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZS6MAorPFU1RkREPiA8VTVGREQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv50yMgorPFU2MEJGPiA8VTYwQkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgr8wCis8VTY2NkE+IDxVNjY2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aZqjAKKzxVNkI4ND4gPFU2Qjg0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q6EMjQKKzxVNkRERj4gPFU2RERGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5refMAorPFU3NUY2PiA8VTc1RjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnl7YwCis8VTc3NTM+IDxVNzc1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+edkzAKKzxVODE0Nj4gPFU4MTQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IWGMzA3Cis8VTgyMTQ+IDxVODIxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iIlDY3MgorPFU4OUE1PiA8VTg5QTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopqUwCis8VTg5Q0Q+IDxVODlDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+injTAKKzxVOENERj4gPFU4Q0RGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LOfMAorPFU5OTAyPiA8VTk5MDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppIIwCis8VTNCODc+IDxVM0I4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OuhzAKKzxVM0RCQT4gPFUzREJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47a6MAorPFU2M0FEPiA8VTYzQUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjq0wCis8VTcxNTQ+IDxVNzE1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eFlDAKKzxVNzQ3MT4gPFU3NDcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55GxMQorPFU4MjFBPiA8VTgyMUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiJowCis8VTk4OEI+IDxVOTg4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+miizAKKzxVNEY3Qj4gPFU0RjdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L27MTMyCis8VTVFQTM+IDxVNUVBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W6ozAKKzxVNjA0Qz4gPFU2MDRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oGMMAorPFU2NUVCPiA8VTY1RUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPml6swCis8VTc5Njc+IDxVNzk2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+elpzkKKzxVODA0RT4gPFU4MDRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IGOMQorPFU5QkExPiA8VTlCQTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprqEwCis8VTM0N0Y+IDxVMzQ3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ORvzAKKzxVMzdEOD4gPFUzN0Q4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45+YMAorPFU0Mzg0PiA8VTQzODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjoQwCis8VTQ0OTI+IDxVNDQ5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SSkjAKKzxVNDVCQT4gPFU0NUJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ja6MAorPFU0N0VEPiA8VTQ3RUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkn60wCis8VTRBNjY+IDxVNEE2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SppjAKKzxVNEJGRT4gPFU0QkZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K++MAorPFU0QzU0PiA8VTRDNTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksZQwCis8VTRDQzI+IDxVNENDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SzgjAKKzxVNUNBNz4gPFU1Q0E3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bKnMAorPFU1Q0I5PiA8VTVDQjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsrkwCis8VTY3NjE+IDxVNjc2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+adoTMyODk0Cis8VTY4OUQ+IDxVNjg5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ainTE5OQorPFU2QTI0PiA8VTZBMjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqKQwCis8VTc5NTI+IDxVNzk1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+elkjAKKzxVN0IyND4gPFU3QjI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56ykNDQKKzxVODI4MD4gPFU4MjgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IqAMAorPFU4NDE0PiA8VTg0MTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokJQwCis8VTg3Mjk+IDxVODcyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+icqTIKKzxVOEQ5Mj4gPFU4RDkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LaSMAorPFU4RkUyPiA8VThGRTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPov6IzODYKKzxVOTJEQT4gPFU5MkRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YuaMAorPFU5M0E1PiA8VTkzQTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjqUwCis8VTk3OTc+IDxVOTc5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+melzAKKzxVOUFFQj4gPFU5QUVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aurNQorPFU5QzM3PiA8VTlDMzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsLcwCis8VTlDQTY+IDxVOUNBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mypjgKKzxVOUY2MD4gPFU5RjYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b2gMAorPFU5Rjg2PiA8VTlGODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvoYxCis8VTNFMjA+IDxVM0UyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O4oDAKKzxVNDgzNz4gPFU0ODM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KC3MAorPFU1QjI1PiA8VTVCMjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrKUwCis8VTVCQTg+IDxVNUJBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WuqDAKKzxVNjMxMT4gPFU2MzExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oyRNDQ0NworPFU2NUEyPiA8VTY1QTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlqIwCis8VTY2NDA+IDxVNjY0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aZgDAKKzxVNjcxMz4gPFU2NzEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pyTMAorPFU3QTk1PiA8VTdBOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqpU5NAorPFU3NzNBPiA8VTc3M0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnLo1NTgKKzxVN0FCMT4gPFU3QUIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56qxMAorPFU3QzlDPiA8VTdDOUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnspwxNAorPFU3Q0Y2PiA8VTdDRjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPns7YwCis8VTdENjk+IDxVN0Q2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e1qTIKKzxVODEwMT4gPFU4MTAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ISBMAorPFU4OTlDPiA8VTg5OUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoppwwCis8VThERjM+IDxVOERGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i3szE1Njc4Cis8VTVFMTY+IDxVNUUxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W4ljExOTcKKzxVNjAxNz4gPFU2MDE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oCXMAorPFU4NDFDPiA8VTg0MUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokJwxCis8VThDQkM+IDxVOENCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iyvDEwOAorPFU4RDM0PiA8VThEMzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotLQ2MjQzCis8VTQ5NkI+IDxVNDk2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SlqzAKKzxVNTBFMz4gPFU1MEUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YOjMAorPFU5MjQ0PiA8VTkyNDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiYQwCis8VTk0MjE+IDxVOTQyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mQoTAKKzxVOTQzNT4gPFU5NDM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZC1NzgKKzxVOTRDMT4gPFU5NEMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZOBMTEzNjkKKzxVOUE1Nj4gPFU5QTU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6amWMAorPFU0RDM0PiA8VTREMzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktLQwCis8VTREN0Y+IDxVNEQ3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S1vzAKKzxVODZDOD4gPFU4NkM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JuIMAorPFU5OEZCPiA8VTk4RkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpo7swCis8VTk5MkU+IDxVOTkyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mkrjMxCis8VTUzODU+IDxVNTM4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WOhTY4NjcKKzxVNTM5Qj4gPFU1MzlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y6bMAorPFU1NDJDPiA8VTU0MkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkKw1ODM3MAorPFU1RTgxPiA8VTVFODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluoEwCis8VTVFRjA+IDxVNUVGMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W7sDAKKzxVNUVGMz4gPFU1RUYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5buzNjQKKzxVNjg2Rj4gPFU2ODZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qGvMAorPFU2QzQwPiA8VTZDNDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsYAyNzMKKzxVODAxMz4gPFU4MDEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ICTMAorPFU4MDc0PiA8VTgwNzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogbQwCis8VTgwN0M+IDxVODA3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iBvDAKKzxVODA3RD4gPFU4MDdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IG9NDU4Cis8VTgyN0M+IDxVODI3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iJvDAKKzxVOTc5Mz4gPFU5NzkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z6TMQorPFUzRTc2PiA8VTNFNzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjubYwCis8VTQ1RjQ+IDxVNDVGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SXtDAKKzxVNEM1Mz4gPFU0QzUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LGTMAorPFU0RUFEPiA8VTRFQUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuq0zNzQzCis8VTUwNUM+IDxVNTA1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WBnDE3MTgzCis8VTVBNzc+IDxVNUE3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WptzIxNzUKKzxVNUQ0OT4gPFU1RDQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bWJMAorPFU1RUFEPiA8VTVFQUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluq03OTU0Cis8VTVFRjc+IDxVNUVGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W7tzQwNjIKKzxVNjczRT4gPFU2NzNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5py+MAorPFU2OTVGPiA8VTY5NUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpZ8wCis8VTY5QjM+IDxVNjlCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+amszAKKzxVNkUxRj4gPFU2RTFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rifMAorPFU3QjczPiA8VTdCNzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrbMyCis8VTdEOEU+IDxVN0Q4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e2jjAKKzxVODA2ND4gPFU4MDY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IGkMAorPFU4MzlCPiA8VTgzOUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojpswCis8VTg0NzY+IDxVODQ3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iRtjYxCis8VTg3MTM+IDxVODcxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ickzE4MQorPFU4NzRGPiA8VTg3NEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonY8wCis8VThBRUE+IDxVOEFFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+irqjAKKzxVOTA5Mj4gPFU5MDkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKSMAorPFU5NUFFPiA8VTk1QUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplq4wCis8VTk3MDY+IDxVOTcwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mchjIzMworPFU5RjJFPiA8VTlGMkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvK4wCis8VTQyRkM+IDxVNDJGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SLvDAKKzxVNDk5MD4gPFU0OTkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KaQMAorPFU0RDdBPiA8VTREN0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktbowCis8VTRGQjk+IDxVNEZCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+uTAKKzxVNTcyMj4gPFU1NzIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZyiMAorPFU2MzNBPiA8VTYzM0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjLo2OTYzCis8VTY4ODM+IDxVNjg4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aigzIKKzxVNkQ4Rj4gPFU2RDhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5raPMAorPFU3MEY2PiA8VTcwRjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPng7YwCis8VTczRkQ+IDxVNzNGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ePvTIwCis8VTgxMjE+IDxVODEyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iEoTEKKzxVODI0Nz4gPFU4MjQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ImHMjMxNQorPFU4QTk0PiA8VThBOTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqpQwCis8VTk4MzI+IDxVOTgzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mgsjAKKzxVNTVGNT4gPFU1NUY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ze1OTAKKzxVNTZGMj4gPFU1NkYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZuyMAorPFU2QTBCPiA8VTZBMEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqIswCis8VTcxQTU+IDxVNzFBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eGpTAKKzxVNzJFQT4gPFU3MkVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54uqMAorPFU3NUNDPiA8VTc1Q0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnl4wwCis8VTg0RUE+IDxVODRFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iTqjAKKzxVOTAxQT4gPFU5MDFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YCaNDA2NzUKKzxVMzgwOT4gPFUzODA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46CJMAorPFUzODNEPiA8VTM4M0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoL0wCis8VTM4REE+IDxVMzhEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OjmjAKKzxVMzhFMD4gPFUzOEUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46OgMAorPFUzOTBGPiA8VTM5MEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpI8wCis8VTNCOTQ+IDxVM0I5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OulDAKKzxVM0UxNz4gPFUzRTE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47iXMAorPFUzRjI3PiA8VTNGMjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvKcwCis8VTNGM0Y+IDxVM0YzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O8vzAKKzxVNDA4OD4gPFU0MDg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IKIMAorPFU0MTlBPiA8VTQxOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhpowCis8VTRCQjU+IDxVNEJCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SutTAKKzxVNENDQj4gPFU0Q0NCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LOLMAorPFU0RDAwPiA8VTREMDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktIAwCis8VTREQjE+IDxVNERCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S2sTAKKzxVNEVERD4gPFU0RUREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LudNzEKKzxVNEY1Rj4gPFU0RjVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L2fMjEyCis8VTUwRUU+IDxVNTBFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WDrjQ1Cis8VTUyRUQ+IDxVNTJFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WLrTAKKzxVNTQwQz4gPFU1NDBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZCMOTUwMTIKKzxVNTRDMz4gPFU1NEMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZODMAorPFU1Q0MyPiA8VTVDQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPls4IwCis8VTVFOUQ+IDxVNUU5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W6nTAKKzxVNUY2ND4gPFU1RjY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b2kMjk5Cis8VTY2NEQ+IDxVNjY0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aZjTAKKzxVNjZDOD4gPFU2NkM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5puIMAorPFU2NzIzPiA8VTY3MjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnKMwCis8VTY4NTA+IDxVNjg1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ahkDEyNjkKKzxVNkMwMz4gPFU2QzAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rCDMAorPFU2RDc1PiA8VTZENzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtbUwCis8VTZGN0M+IDxVNkY3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a9vDUxCis8VTcwRDQ+IDxVNzBEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eDlDAKKzxVNzFEMT4gPFU3MUQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54eRMAorPFU3MjFFPiA8VTcyMUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniJ4wCis8VTcyOUQ+IDxVNzI5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eKnTAKKzxVNzM1RT4gPFU3MzVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj542eMAorPFU3NzJFPiA8VTc3MkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnK4wCis8VTc3QjM+IDxVNzdCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eeszUwNworPFU3ODNDPiA8VTc4M0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoLwwCis8VTc5RjE+IDxVNzlGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ensTAKKzxVN0E1Qz4gPFU3QTVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56mcMAorPFU3QUU1PiA8VTdBRTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnq6U2NDU1Cis8VTdDQTE+IDxVN0NBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eyoTAKKzxVN0Q2Nz4gPFU3RDY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57WnMgorPFU3RjdGPiA8VTdGN0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvb8wCis8VTgxQTc+IDxVODFBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iGpzAKKzxVODMzQz4gPFU4MzNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Iy8MworPFU4NTZCPiA8VTg1NkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolaswCis8VThBNzc+IDxVOEE3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iptzEKKzxVOEZGNT4gPFU4RkY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L+1MAorPFU5MTZFPiA8VTkxNkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpha4zNAorPFU5MjU2PiA8VTkyNTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiZYwCis8VTkyNzU+IDxVOTI3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mJtTAKKzxVOTI4NT4gPFU5Mjg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YqFMTcKKzxVOTREQz4gPFU5NERDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZOcMjUzNgorPFU5OTA3PiA8VTk5MDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppIcwCis8VTlCQTY+IDxVOUJBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mupjAKKzxVOUM5Nj4gPFU5Qzk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bKWMAorPFU5RjI4PiA8VTlGMjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvKgwCis8VTM2REE+IDxVMzZEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ObmjAKKzxVM0E4Qz4gPFUzQThDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46qMMAorPFU0MUI5PiA8VTQxQjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhrkwCis8VTU5REI+IDxVNTlEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WnmzAKKzxVNjM0NT4gPFU2MzQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o2FNjQxCis8VTY4NzY+IDxVNjg3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ahtjE5OTIKKzxVN0I1Mj4gPFU3QjUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj562SMjA3MAorPFU3QjY5PiA8VTdCNjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrakwCis8VTdENzE+IDxVN0Q3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e1sTI2OQorPFU3RDgyPiA8VTdEODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntoIwCis8VTdFREY+IDxVN0VERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e7nzQwODgyCis8VTYwNzg+IDxVNjA3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBuDIzNworPFU2MTVGPiA8VTYxNUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhZ8zCis8VTYxODU+IDxVNjE4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aGhTAKKzxVNzVEQj4gPFU3NURCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55ebMTY5MTgKKzxVODYzMz4gPFU4NjMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JizMAorPFU4ODU1PiA8VTg4NTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooZUwCis8VTUwNzc+IDxVNTA3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WBtzc4NDYKKzxVNTA3OD4gPFU1MDc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YG4MAorPFU1QTdFPiA8VTVBN0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqb4wCis8VTVBQUU+IDxVNUFBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WqrjAKKzxVOTM2RT4gPFU5MzZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y2uMAorPFUzNEYxPiA8VTM0RjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjk7EwCis8VTM4NEY+IDxVMzg0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OhjzAKKzxVMzg4Rj4gPFUzODhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46KPMAorPFU0RDQ5PiA8VTRENDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktYkwCis8VTRFQTA+IDxVNEVBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6oDEKKzxVNTc0ND4gPFU1NzQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z2EMAorPFU1OTM0PiA8VTU5MzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpLQxMTAxNjkKKzxVNjI5NT4gPFU2Mjk1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oqVMTEzNDUKKzxVNzI0Rj4gPFU3MjRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54mPMAorPFU5MTU4PiA8VTkxNTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphZgwCis8VTk4MkQ+IDxVOTgyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mgrTg4NAorPFU5QUIwPiA8VTlBQjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqrAyMDQKKzxVM0E5Nz4gPFUzQTk3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46qXMAorPFU0QzRGPiA8VTRDNEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksY8wCis8VTU5QjU+IDxVNTlCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WmtTAKKzxVN0QwRj4gPFU3RDBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57SPMAorPFU4NjIzPiA8VTg2MjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomKMwCis8VTkyMDQ+IDxVOTIwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mIhDAKKzxVOTRBRD4gPFU5NEFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZKtMworPFU5RUM4PiA8VTlFQzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpu4gwCis8VTM1QTM+IDxVMzVBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OWozAKKzxVNDdBQz4gPFU0N0FDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J6sMAorPFU0N0REPiA8VTQ3REQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkn50wCis8VTkwMEY+IDxVOTAwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mAjzEwODgzCis8VTUxRjg+IDxVNTFGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WHuDU5OAorPFU1ODE3PiA8VTU4MTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloJcwCis8VTYzNzg+IDxVNjM3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aNuDAKKzxVNkQ4Qj4gPFU2RDhCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5raLMAorPFU3NURDPiA8VTc1REM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnl5wwCis8VTc5QkY+IDxVNzlCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+emvzIKKzxVNzlDMz4gPFU3OUMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56eDMTI2MworPFU3QTgxPiA8VTdBODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqoEyMjMwMworPFU4NDU2PiA8VTg0NTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokZYwCis8VTkyRjU+IDxVOTJGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mLtTAKKzxVOUQ1QT4gPFU5RDVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bWaMAorPFUzQjc4PiA8VTNCNzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrbgwCis8VTNFQ0M+IDxVM0VDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O7jDAKKzxVM0VFMD4gPFUzRUUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47ugMAorPFUzRUVDPiA8VTNFRUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPju6wwCis8VTNFRUY+IDxVM0VFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O7rzAKKzxVNDE3Nz4gPFU0MTc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IW3MAorPFU0NTk4PiA8VTQ1OTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklpgwCis8VTQ4MDg+IDxVNDgwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SgiDAKKzxVNDhDND4gPFU0OEM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KOEMAorPFU0OEREPiA8VTQ4REQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPko50wCis8VTQ5MDU+IDxVNDkwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SkhTAKKzxVNENEQz4gPFU0Q0RDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LOcMAorPFU1MUMzPiA8VTUxQzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlh4MwCis8VTU2RjM+IDxVNTZGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WbszAKKzxVNTZGRT4gPFU1NkZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Zu+MjE2MTcKKzxVNTcxNj4gPFU1NzE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZyWMTE1Cis8VTU3MTc+IDxVNTcxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WclzAKKzxVNTg1Nz4gPFU1ODU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aGXMjAKKzxVNUM2MD4gPFU1QzYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bGgMTcwOAorPFU1Q0Y5PiA8VTVDRjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPls7kwCis8VTVENUU+IDxVNUQ1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W1njAKKzxVNUVBOT4gPFU1RUE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bqpMAorPFU1RURDPiA8VTVFREM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlu5wwCis8VTVGOTI+IDxVNUY5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W+kjUzMzcKKzxVNjAyMj4gPFU2MDIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oCiMAorPFU2MzQ4PiA8VTYzNDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjYgwCis8VTYzRUM+IDxVNjNFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aPrDAKKzxVNjg4Qz4gPFU2ODhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qKMMAorPFU2RDgyPiA8VTZEODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtoIzODQ5Cis8VTZFNjU+IDxVNkU2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a5pTAKKzxVNkY3Mz4gPFU2RjczPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r2zMAorPFU3NDc5PiA8VTc0Nzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkbkwCis8VTc2MEY+IDxVNzYwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eYjzAKKzxVN0EwQz4gPFU3QTBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56iMMAorPFU3QjYxPiA8VTdCNjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnraEwCis8VTgxNkY+IDxVODE2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iFrzAKKzxVODM3Qz4gPFU4MzdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I28MTIzCis8VTgzQjU+IDxVODNCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iOtTAKKzxVODNERj4gPFU4M0RGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I+fNQorPFU4NEE0PiA8VTg0QTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokqQwCis8VThERkY+IDxVOERGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i3vzAKKzxVOTAxND4gPFU5MDE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YCUNTYzNworPFU5MTc0PiA8VTkxNzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphbQyCis8VTkyMkY+IDxVOTIyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mIrzAKKzxVOTM0RT4gPFU5MzRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y2OMAorPFU5OTlGPiA8VTk5OUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppp8wCis8VTk5RkM+IDxVOTlGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mnvDEKKzxVOUQ5Rj4gPFU5RDlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bafMAorPFU5RENCPiA8VTlEQ0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpt4swCis8VTlERjU+IDxVOURGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m3tTAKKzxVOUYzNT4gPFU5RjM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6by1MAorPFU1NDEwPiA8VTU0MTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkJAyNDAzCis8VTU1MEI+IDxVNTUwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUizAKKzxVNTcxRj4gPFU1NzFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZyfMTk1NDYKKzxVNTcyMT4gPFU1NzIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZyhMAorPFU5MUY3PiA8VTkxRjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPph7cwCis8VTk0OEQ+IDxVOTQ4RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mSjTIzCis8VTUxNEU+IDxVNTE0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WFjjAKKzxVNTE1ND4gPFU1MTU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YWUMTc4NAorPFU1ODBEPiA8VTU4MEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloI00Cis8VTlENzU+IDxVOUQ3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m1tTAKKzxVNkU0RD4gPFU2RTREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rmNMjcwCis8VTcxNTM+IDxVNzE1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eFkzAKKzxVNzMyRj4gPFU3MzJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54yvMAorPFU4QzkyPiA8VThDOTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPospIwCis8VTNBNUI+IDxVM0E1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OpmzAKKzxVNDI5Qz4gPFU0MjlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IqcMAorPFU1Mjc4PiA8VTUyNzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlibgyCis8VTU2RTI+IDxVNTZFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WbojE2Nzc2Cis8VTU2RTM+IDxVNTZFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WbozAKKzxVNTcxOD4gPFU1NzE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZyYODYKKzxVNjE3MT4gPFU2MTcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oWxMAorPFU2MjlGPiA8VTYyOUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmip8yMworPFU2NDc2PiA8VTY0NzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkbYyCis8VTY5RUI+IDxVNjlFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+anqzAKKzxVNkFCMj4gPFU2QUIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qqyMAorPFU2RjE5PiA8VTZGMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvJkwCis8VTdDRjA+IDxVN0NGMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ezsDAKKzxVOTNDND4gPFU5M0M0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+EMAorPFU5REZCPiA8VTlERkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpt7swCis8VTQ3MUQ+IDxVNDcxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ScnTAKKzxVNEQ2Rj4gPFU0RDZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LWvMAorPFU3NTgzPiA8VTc1ODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnloM0Cis8VTlFRDc+IDxVOUVENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7lzAKKzxVNUY1Nj4gPFU1RjU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b2WMgorPFU4OTE2PiA8VTg5MTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopJYwCis8VTYzQTg+IDxVNjNBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aOqDE3ODQxCis8VTg0Rjc+IDxVODRGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iTtzAKKzxVODVFQz4gPFU4NUVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JesMAorPFUzODg4PiA8VTM4ODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoogwCis8VTM4OTE+IDxVMzg5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OikTAKKzxVM0ZBRj4gPFUzRkFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj476vMAorPFUzRkJEPiA8VTNGQkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvr0wCis8VTNGQzk+IDxVM0ZDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O/iTAKKzxVM0ZENz4gPFUzRkQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47+XMAorPFU0MDAzPiA8VTQwMDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgIMwCis8VTQxNkE+IDxVNDE2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SFqjAKKzxVNDM3RT4gPFU0MzdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I2+MAorPFU0QUNCPiA8VTRBQ0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkq4swCis8VTUwRDM+IDxVNTBEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WDkzAKKzxVNUMzNT4gPFU1QzM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bC1MAorPFU1RjFBPiA8VTVGMUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvJowCis8VTZBNTQ+IDxVNkE1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aplDAKKzxVN0E2OD4gPFU3QTY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56moMAorPFU4NjA4PiA8VTg2MDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomIgwCis8VThFNkE+IDxVOEU2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i5qjAKKzxVOTZBND4gPFU5NkE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZqkMAorPFU5ODM5PiA8VTk4Mzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoLkyCis8VTk4M0E+IDxVOTgzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mgujAKKzxVOTgzRD4gPFU5ODNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aC9MAorPFU5ODkzPiA8VTk4OTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpopM4NjkKKzxVOUI0Qj4gPFU5QjRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a2LMAorPFUzNzgyPiA8VTM3ODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnoIwCis8VTNDNjM+IDxVM0M2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OxozAKKzxVM0ZCQz4gPFUzRkJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj4768MAorPFU0RkMwPiA8VTRGQzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkv4AwCis8VTgxN0Y+IDxVODE3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iFvzc0MzYKKzxVOEU0Nj4gPFU4RTQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LmGMAorPFU5QUJEPiA8VTlBQkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqr0wCis8VTM5OEM+IDxVMzk4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OmjDAKKzxVM0RERj4gPFUzRERGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47efMAorPFU1QTI3PiA8VTVBMjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqKcwCis8VTcxN0E+IDxVNzE3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eFujIKKzxVODcxNT4gPFU4NzE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JyVMTc1Cis8VTg3ODE+IDxVODc4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iegTAKKzxVODkyQT4gPFU4OTJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KSqNTkzCis8VTkwMDA+IDxVOTAwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mAgDk2ODUKKzxVOTlGRT4gPFU5OUZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ae+MAorPFU1NDFFPiA8VTU0MUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkJ4yNTcyCis8VTU0NTE+IDxVNTQ1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRkTAKKzxVNTU0RD4gPFU1NTREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZWNMAorPFU1NjRCPiA8VTU2NEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmYswCis8VTY1RkQ+IDxVNjVGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aXvTAKKzxVNjZCRT4gPFU2NkJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pq+NgorPFU2NzFDPiA8VTY3MUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnJwwCis8VTZEOTI+IDxVNkQ5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a2kjAKKzxVMzc5OD4gPFUzNzk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj456YMAorPFUzQTU0PiA8VTNBNTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqZQwCis8VTNFNjA+IDxVM0U2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O5oDAKKzxVM0YwQT4gPFUzRjBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47yKMAorPFU1QzZGPiA8VTVDNkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsa81MTQKKzxVNUZGMz4gPFU1RkYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b+zMAorPFU2MkY1PiA8VTYyRjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmi7UwCis8VTgxQzA+IDxVODFDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iHgDQwNAorPFU4MUNCPiA8VTgxQ0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoh4swCis8VTgyOUE+IDxVODI5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iKmjAKKzxVOEM1OD4gPFU4QzU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LGYMAorPFU4QzVBPiA8VThDNUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosZozNTIKKzxVOEVEOD4gPFU4RUQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LuYMAorPFU5NzE1PiA8VTk3MTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnJUwCis8VTk4RTk+IDxVOThFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mjqTAKKzxVOTk2OD4gPFU5OTY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aWoMTc3Cis8VTlCNjg+IDxVOUI2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mtqDAKKzxVOUM4MD4gPFU5QzgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bKAMAorPFUzNTk0PiA8VTM1OTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlpQwCis8VTc1N0Q+IDxVNzU3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eVvTAKKzxVNEU0Nz4gPFU0RTQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LmHMgorPFU0RjgyPiA8VTRGODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvoIwCis8VTRGQkI+IDxVNEZCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+uzAKKzxVNTQ4Mz4gPFU1NDgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZKDMQorPFU1ODM2PiA8VTU4MzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloLYwCis8VTYyNTg+IDxVNjI1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aJmDgzMzQKKzxVNjI2NT4gPFU2MjY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5omlMAorPFU2MkQ1PiA8VTYyRDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmi5UyCis8VTYyRDY+IDxVNjJENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aLljQ1OTAKKzxVNjc1ND4gPFU2NzU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p2UMAorPFU2QzUxPiA8VTZDNTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsZEwCis8VTZDQjA+IDxVNkNCMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aysDAKKzxVNkRCNj4gPFU2REI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ra2MAorPFU3N0ZBPiA8VTc3RkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnn7owCis8VTgxMkI+IDxVODEyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iEqzEzMAorPFU4MTMxPiA8VTgxMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohLE5OTQwCis8VTg4QTU+IDxVODhBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iipTAKKzxVOEExNz4gPFU4QTE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KiXMjcKKzxVOEE1MT4gPFU4QTUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KmRMAorPFU4QkFDPiA8VThCQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorqwwCis8VTk5NjY+IDxVOTk2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mlpjAKKzxVOTlCMj4gPFU5OUIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aayMAorPFU5QTVEPiA8VTlBNUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqZ0wCis8VTlCNjA+IDxVOUI2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mtoDAKKzxVM0UzMD4gPFUzRTMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47iwMAorPFUzRTMxPiA8VTNFMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuLEwCis8VTNGMjA+IDxVM0YyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O8oDAKKzxVM0Y4Mz4gPFUzRjgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj476DMAorPFU0MzZCPiA8VTQzNkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjaswCis8VTQ4NTA+IDxVNDg1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ShkDAKKzxVNEE5MT4gPFU0QTkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KqRMAorPFU0QjdFPiA8VTRCN0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrb4wCis8VTRDM0Y+IDxVNEMzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SwvzAKKzxVNEQzMT4gPFU0RDMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LSxMAorPFU0RjU3PiA8VTRGNTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvZc0OAorPFU1NzY4PiA8VTU3Njg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnag1NAorPFU1Q0FFPiA8VTVDQUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsq4wCis8VTcyQ0Y+IDxVNzJDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eLjzAKKzxVNzgyMz4gPFU3ODIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56CjNTIKKzxVNzgyND4gPFU3ODI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56CkMAorPFU3OEEyPiA8VTc4QTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoqIwCis8VTdEM0Q+IDxVN0QzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e0vTEKKzxVOERDRT4gPFU4RENFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LeONDkKKzxVOEZGMT4gPFU4RkYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L+xMAorPFU5MTYxPiA8VTkxNjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphaEzNgorPFU5NjI0PiA8VTk2MjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmKQxCis8VTk2NDA+IDxVOTY0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mZgDk3MworPFU5NjQxPiA8VTk2NDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmYEwCis8VTk4RTU+IDxVOThFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mjpTAKKzxVOTlERD4gPFU5OUREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aedMTQKKzxVOTlERT4gPFU5OURFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aeeMQorPFU5QTUyPiA8VTlBNTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqZIwCis8VTlBN0M+IDxVOUE3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mpvDkwNgorPFU5QjgwPiA8VTlCODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPproAwCis8VTlEMTU+IDxVOUQxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m0lTAKKzxVOUUzNT4gPFU5RTM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bi1NDA3Cis8VTlGMDk+IDxVOUYwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m8iTAKKzxVOUYwRD4gPFU5RjBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6byNNQorPFU5RjI3PiA8VTlGMjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvKcwCis8VTM3Q0U+IDxVMzdDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OfjjAKKzxVNDRENT4gPFU0NEQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JOVMAorPFU0QzhBPiA8VTRDOEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksoowCis8VTU5QTU+IDxVNTlBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WmpTIwNjkKKzxVNUFBMD4gPFU1QUEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aqgMAorPFU1QUY3PiA8VTVBRjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlq7cwCis8VTVFQjk+IDxVNUVCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W6uTcKKzxVNUY3NT4gPFU1Rjc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b21MAorPFU2NEIxPiA8VTY0QjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkrEwCis8VTY5MkQ+IDxVNjkyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+akrTM0MworPFU2OTU1PiA8VTY5NTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpZUwCis8VTZBNjI+IDxVNkE2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+apojEKKzxVOUMxNj4gPFU5QzE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bCWMAorPFU5RDRFPiA8VTlENEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptY4wCis8VTU1M0U+IDxVNTUzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUvjgxNAorPFU2N0REPiA8VTY3REQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmn505Cis8VTZCRTQ+IDxVNkJFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+avpDAKKzxVNkJGQj4gPFU2QkZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q+7MAorPFU3QkE4PiA8VTdCQTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrqgxCis8VTdDNUM+IDxVN0M1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+exnDAKKzxVODQxQT4gPFU4NDFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JCaMAorPFU4NjAwPiA8VTg2MDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomIAwCis8VThEQzU+IDxVOERDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i3hTAKKzxVNTJCOD4gPFU1MkI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Yq4MAorPFU1NEM3PiA8VTU0Qzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlk4cxNzYzCis8VTU1NTg+IDxVNTU1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WVmDAKKzxVNUEzMj4gPFU1QTMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aiyMTgwCis8VTVBQTc+IDxVNUFBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WqpzAKKzxVNUY4RD4gPFU1RjhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b6NMAorPFU2MzE2PiA8VTYzMTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjJYxOTk0Cis8VTY0MzI+IDxVNjQzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aQsjAKKzxVNjUyOD4gPFU2NTI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pSoMAorPFU2RDNDPiA8VTZEM0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtLw0OTAKKzxVNkU5Qj4gPFU2RTlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqbMAorPFU2RjI1PiA8VTZGMjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvKUyCis8VTc1NTY+IDxVNzU1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eVljAKKzxVN0E3NT4gPFU3QTc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56m1MAorPFU3QThBPiA8VTdBOEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqoowCis8VTdBQUE+IDxVN0FBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eqqjMKKzxVODA0OT4gPFU4MDQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IGJMAorPFU4NkQ5PiA8VTg2RDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPom5kxNTYwCis8VTlGMDM+IDxVOUYwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m8gzAKKzxVM0MyQT4gPFUzQzJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47CqMAorPFU1QTAzPiA8VTVBMDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqIMyODIyCis8VTM5REE+IDxVMzlEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OnmjAKKzxVM0YxOD4gPFUzRjE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47yYMAorPFU0RjY0PiA8VTRGNjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvaQyCis8VTU0OTM+IDxVNTQ5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WSkzAKKzxVNzRFNj4gPFU3NEU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55OmNTQ1MAorPFU5MEI3PiA8VTkwQjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgrcwCis8VTQzQjM+IDxVNDNCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SOszAKKzxVNDZCND4gPFU0NkI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Jq0MAorPFU0ODFBPiA8VTQ4MUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoJowCis8VTU1RTI+IDxVNTVFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WXojAKKzxVODE3RD4gPFU4MTdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IW9MAorPFU4MTgzPiA8VTgxODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohoMwCis8VTg4OUM+IDxVODg5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iinDEwMjgKKzxVODk2QT4gPFU4OTZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KWqOQorPFU5N0M4PiA8VTk3Qzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpn4gwCis8VTk3RTQ+IDxVOTdFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mfpDAKKzxVNkI2QT4gPFU2QjZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q2qMjQ2MworPFU1RDM0PiA8VTVEMzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltLQzMAorPFU0ODNGPiA8VTQ4M0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoL8wCis8VTU5MTY+IDxVNTkxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WkljczMTE2Cis8VTUyNUM+IDxVNTI1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WJnDczCis8VTU4NDY+IDxVNTg0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WhhjAKKzxVNUUzNT4gPFU1RTM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bi1MAorPFU1RjJGPiA8VTVGMkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvK8zODQyCis8VTVGNEU+IDxVNUY0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W9jjE4Cis8VTZFN0U+IDxVNkU3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a5vjE0ODg0Cis8VTZGNkI+IDxVNkY2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a9qzAKKzxVNzA2Mz4gPFU3MDYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54GjMTkwCis8VTg3M0Y+IDxVODczRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+icvzE4MgorPFU4QzRDPiA8VThDNEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosYw4MgorPFUzNzc0PiA8VTM3NzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnbQwCis8VTRCQzg+IDxVNEJDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SviDAKKzxVNEUzOD4gPFU0RTM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Li4Nzg2Cis8VTUyMTM+IDxVNTIxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WIkzAKKzxVNUE2MD4gPFU1QTYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5amgMAorPFU1QjhDPiA8VTVCOEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrow0MzQ3MAorPFU1QzhGPiA8VTVDOEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlso8wCis8VTYyOEY+IDxVNjI4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aKjzAKKzxVNkM0RD4gPFU2QzREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rGNMAorPFU3MEY3PiA8VTcwRjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPng7cyOAorPFU3M0E5PiA8VTczQTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjqkxNDI0OAorPFU3NDEzPiA8VTc0MTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkJMwCis8VTdEMDg+IDxVN0QwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e0iDAKKzxVN0VBOD4gPFU3RUE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57qoMTI0Cis8VTgyODQ+IDxVODI4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iKhDAKKzxVOTgxMT4gPFU5ODExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aCRMTYKKzxVOTg3RD4gPFU5ODdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aG9MTY3NQorPFUzNzM2PiA8VTM3MzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnLYwCis8VTNGNUM+IDxVM0Y1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O9nDAKKzxVM0ZGOD4gPFUzRkY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47+4MAorPFU0MEJBPiA8VTQwQkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgrowCis8VTQxNEI+IDxVNDE0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SFizAKKzxVNDVBND4gPFU0NUE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JakMAorPFU0NUQ1PiA8VTQ1RDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkl5UwCis8VTQ2M0M+IDxVNDYzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SYvDAKKzxVNDZGNz4gPFU0NkY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ju3MAorPFU0Nzc5PiA8VTQ3Nzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknbkwCis8VTRBNEE+IDxVNEE0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SpijAKKzxVNENDMz4gPFU0Q0MzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LODMAorPFU1MDA3PiA8VTUwMDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgIcwCis8VTU1MEQ+IDxVNTUwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUjTAKKzxVNTdFNj4gPFU1N0U2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z+mMAorPFU1QTQ5PiA8VTVBNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqYk5MDEKKzxVNUI5Qj4gPFU1QjlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a6bMTA2NAorPFU2MENCPiA8VTYwQ0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmg4szMzcKKzxVNjMzRD4gPFU2MzNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oy9MjA5MQorPFU2NjVBPiA8VTY2NUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmZoyODQxNAorPFU2NjY5PiA8VTY2Njk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmakxCis8VTY2N0M+IDxVNjY3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aZvDAKKzxVNjg5QT4gPFU2ODlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qKaMAorPFU2OTAwPiA8VTY5MDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpIA3Cis8VTZEQjQ+IDxVNkRCND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a2tDAKKzxVNzQyQz4gPFU3NDJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55CsOQorPFU3NTc5PiA8VTc1Nzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlbk4Cis8VTc2OTY+IDxVNzY5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ealjE3NgorPFU3NkNDPiA8VTc2Q0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnm4wxCis8VTc3NEM+IDxVNzc0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+edjDAKKzxVNzc1NT4gPFU3NzU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj552VMAorPFU3ODk3PiA8VTc4OTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnopc0NTYxCis8VTdCQTI+IDxVN0JBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+euojAKKzxVN0RBOT4gPFU3REE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57apMAorPFU3REIwPiA8VTdEQjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntrAwCis8VTdFRkU+IDxVN0VGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e7vjQ4Cis8VTgxMTU+IDxVODExNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iElTAKKzxVODNDMD4gPFU4M0MwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I+ANAorPFU4NDE2PiA8VTg0MTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokJYwCis8VTg0NDI+IDxVODQ0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iRgjAKKzxVOEYxMz4gPFU4RjEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LyTMgorPFU5MkQ0PiA8VTkyRDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpi5QwCis8VTkzNTA+IDxVOTM1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mNkDAKKzxVOTQ0MT4gPFU5NDQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZGBMAorPFUzRTE4PiA8VTNFMTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuJgwCis8VTQ5NTE+IDxVNDk1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SlkTAKKzxVNEUwNz4gPFU0RTA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LiHMzEwNjYKKzxVNEVGND4gPFU0RUY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Lu0MAorPFU1MzREPiA8VTUzNEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljY0xNAorPFU1MzUwPiA8VTUzNTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljZAxMAorPFU1RkU4PiA8VTVGRTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv6gwCis8VTYzNjU+IDxVNjM2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aNpTEKKzxVN0Q4ND4gPFU3RDg0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57aEMAorPFU3RkVCPiA8VTdGRUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnv6swCis8VTgxNTU+IDxVODE1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iFlTk5NgorPFU4N0MzPiA8VTg3QzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPon4MwCis8VThDQTY+IDxVOENBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iypjAKKzxVOEQwMz4gPFU4RDAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LSDMAorPFU4RDBFPiA8VThEMEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotI4wCis8VThFMjA+IDxVOEUyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i4oDAKKzxVNUMyMj4gPFU1QzIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bCiNAorPFU1QzIzPiA8VTVDMjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsKMwCis8VTVDMjk+IDxVNUMyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WwqTAKKzxVNUMyQT4gPFU1QzJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bCqMAorPFU1QzJCPiA8VTVDMkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsKswCis8VTZDNkE+IDxVNkM2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+axqjI1MDUKKzxVNEVBMT4gPFU0RUExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LqhODM3NgorPFU0RUJFPiA8VTRFQkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkur4wCis8VTRFRkM+IDxVNEVGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S7vDAKKzxVNTE2Nj4gPFU1MTY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YWmMAorPFU1RjdBPiA8VTVGN0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvbowCis8VTczOEI+IDxVNzM4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eOizMyNDcyCis8VTg2OUY+IDxVODY5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ianzAKKzxVMzRDMT4gPFUzNEMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45OBMAorPFUzQ0JGPiA8VTNDQkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsr8wCis8VTNDRjk+IDxVM0NGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OzuTAKKzxVM0QwRj4gPFUzRDBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47SPMAorPFU0MkM0PiA8VTQyQzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPki4QwCis8VTQyREU+IDxVNDJERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SLnjAKKzxVNEMyMz4gPFU0QzIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LCjMAorPFU1RjgwPiA8VTVGODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvoAzNTE0NworPFU1RjgzPiA8VTVGODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvoMwCis8VTYwRDg+IDxVNjBEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aDmDQ3MAorPFU2NjgwPiA8VTY2ODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmoAwCis8VTY3ODk+IDxVNjc4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aeiTkyNworPFU2OEUyPiA8VTY4RTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmo6IwCis8VTcwMDc+IDxVNzAwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eAhzAKKzxVN0RCMj4gPFU3REIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57ayMTA4Cis8VTdGNTE+IDxVN0Y1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9kTI3NDEwCis8VTdGNTI+IDxVN0Y1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9kjAKKzxVN0Y1ND4gPFU3RjU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj572UMTUyCis8VTgzRjU+IDxVODNGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPtTAKKzxVODZFNz4gPFU4NkU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JunMAorPFU4NzQ0PiA8VTg3NDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonYQwCis8VThBQjc+IDxVOEFCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iqtzEKKzxVOEYxRT4gPFU4RjFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LyeMAorPFU4RjhCPiA8VThGOEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovoszCis8VThGRUM+IDxVOEZFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i/rDAKKzxVOUI0RD4gPFU5QjREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a2NMjQKKzxVNDZDMz4gPFU0NkMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JuDMAorPFU0OTExPiA8VTQ5MTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpJEwCis8VTU5ODQ+IDxVNTk4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WmhDE3ODMKKzxVNUZEOD4gPFU1RkQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b+YMTMzODkKKzxVNjVGQT4gPFU2NUZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pe6MTUwMworPFU2NzFCPiA8VTY3MUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnJs0NDkwOAorPFU2NzIyPiA8VTY3MjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnKIwCis8VTgzQTM+IDxVODNBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iOozAKKzxVOEZDQj4gPFU4RkNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L+LMAorPFU1MDRFPiA8VTUwNEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgY40NDgKKzxVNTM3MT4gPFU1MzcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y2xNzAyNgorPFU1NUI0PiA8VTU1QjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllrQwCis8VTVBMDE+IDxVNUEwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WogTEyNTAzCis8VTVBNTQ+IDxVNUE1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WplDAKKzxVNUE4MT4gPFU1QTgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aqBMAorPFU1QTk5PiA8VTVBOTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqpkwCis8VTVEQ0Q+IDxVNURDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W3jTU3OQorPFU1RkFFPiA8VTVGQUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvq4yMjE1MworPFU2MTA0PiA8VTYxMDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhIQwCis8VTYzQ0I+IDxVNjNDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aPizAKKzxVNjkzMz4gPFU2OTMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qSzMAorPFU2OTcyPiA8VTY5NzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpbIwCis8VTZFMjg+IDxVNkUyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a4qDAKKzxVNkVCRT4gPFU2RUJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rq+MAorPFU3MEQzPiA8VTcwRDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPng5MwCis8VTcxNjg+IDxVNzE2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eFqDMxCis8VTcxRjA+IDxVNzFGMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHsDAKKzxVNzhBOD4gPFU3OEE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56KoMAorPFU4NDY4PiA8VTg0Njg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokagwCis8VTg0NzM+IDxVODQ3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iRszExCis8VTg1ODc+IDxVODU4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iWhzMyMjIKKzxVODc1Qj4gPFU4NzVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J2bMAorPFU4OUEzPiA8VTg5QTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopqMwCis8VTkwMzY+IDxVOTAzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mAtjgwCis8VTk2ODc+IDxVOTY4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mahzAKKzxVOTY4OD4gPFU5Njg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZqIMTUKKzxVOUMwMz4gPFU5QzAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bCDMAorPFU5QzA0PiA8VTlDMDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsIQxCis8VTlDQzI+IDxVOUNDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mzgjAKKzxVMzU1Mj4gPFUzNTUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45WSMAorPFUzOEYyPiA8VTM4RjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjo7IwCis8VTM5RDE+IDxVMzlEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OnkTAKKzxVNDI2MD4gPFU0MjYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ImgMAorPFU0NDRBPiA8VTQ0NEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkYowCis8VTQ1M0E+IDxVNDUzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SUujAKKzxVNDcwNT4gPFU0NzA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JyFMAorPFU0NzUwPiA8VTQ3NTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknZAwCis8VTQ5Njk+IDxVNDk2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SlqTAKKzxVNDlFNj4gPFU0OUU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KemMAorPFU0RTNBPiA8VTRFM0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuLoyMDAwMDAKKzxVNTUyRj4gPFU1NTJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZSvODAwNgorPFU1NkQ3PiA8VTU2RDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlm5cyOTUKKzxVNTZGND4gPFU1NkY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Zu0MTQ4ODQKKzxVNTcwRD4gPFU1NzBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZyNODcKKzxVNTcyOT4gPFU1NzI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZypMjAKKzxVNUQ2Qz4gPFU1RDZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bWsMzcKKzxVNUUwRj4gPFU1RTBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5biPNjUKKzxVNUUzNz4gPFU1RTM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bi3MjU2Cis8VTVFNDM+IDxVNUU0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W5gzEKKzxVNjBERj4gPFU2MERGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oOfMTk2OAorPFU2ODQ1PiA8VTY4NDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoYUxNTMKKzxVNkIwOD4gPFU2QjA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qyIMAorPFU2Q0E5PiA8VTZDQTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsqkwCis8VTZEMDg+IDxVNkQwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a0iDAKKzxVNkRBMD4gPFU2REEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ragMQorPFU2RTRCPiA8VTZFNEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuYswCis8VTZGNEQ+IDxVNkY0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a9jTgKKzxVNkY3Rj4gPFU2RjdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r2/MAorPFU2RkYwPiA8VTZGRjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv7AwCis8VTcwMjI+IDxVNzAyMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eAojAKKzxVNzBCQT4gPFU3MEJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54K6MjE0MAorPFU3MjMyPiA8VTcyMzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniLI1NworPFU3NDFGPiA8VTc0MUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkJ8wCis8VTc2NTM+IDxVNzY1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eZkzAKKzxVNzdDMD4gPFU3N0MwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+AMAorPFU3ODU5PiA8VTc4NTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoZkwCis8VTdEQUQ+IDxVN0RBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e2rTE5NworPFU3RUY0PiA8VTdFRjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnu7QxNTUxMworPFU4OUI5PiA8VTg5Qjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoprkwCis8VThGREQ+IDxVOEZERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i/nTM0MTQKKzxVOTA1NT4gPFU5MDU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YGVMjIKKzxVOTEyQz4gPFU5MTJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YSsMAorPFU5MTgwPiA8VTkxODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphoAwCis8VTkzNEY+IDxVOTM0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mNjzAKKzxVOTVDOD4gPFU5NUM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZeIMAorPFU5NUYxPiA8VTk1RjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl7ExMDUKKzxVOTczQT4gPFU5NzNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Zy6MAorPFU5N0NCPiA8VTk3Q0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpn4s3Cis8VTk3RTY+IDxVOTdFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mfpjI2MTAKKzxVOUJBMD4gPFU5QkEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a6gMAorPFUzNTkwPiA8VTM1OTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlpAwCis8VTM3ODc+IDxVMzc4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OehzAKKzxVMzc5MT4gPFUzNzkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj456RMAorPFUzN0VBPiA8VTM3RUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjn6owCis8VTM4MTU+IDxVMzgxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OglTAKKzxVMzhCQj4gPFUzOEJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46K7MAorPFUzQTBBPiA8VTNBMEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqIowCis8VTNCMTk+IDxVM0IxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OsmTAKKzxVM0I0Rj4gPFUzQjRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj462PMAorPFUzQzZDPiA8VTNDNkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsawwCis8VTQwRUM+IDxVNDBFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SDrDAKKzxVNDIyNz4gPFU0MjI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IinMAorPFU0Nzk0PiA8VTQ3OTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknpQwCis8VTRBOTg+IDxVNEE5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SqmDAKKzxVNEIxMD4gPFU0QjEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KyQMAorPFU0QjNGPiA8VTRCM0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrL8wCis8VTRENEI+IDxVNEQ0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S1izAKKzxVNEVCOT4gPFU0RUI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Lq5MQorPFU0RjFGPiA8VTRGMUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvJ82Nzg4Cis8VTRGMkE+IDxVNEYyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S8qjM5NzMKKzxVNTA0OT4gPFU1MDQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YGJMTUKKzxVNTEzMD4gPFU1MTMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YSwMAorPFU1MzgzPiA8VTUzODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljoMwCis8VTU1QTE+IDxVNTVBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WWoTAKKzxVNThERD4gPFU1OEREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aOdMAorPFU1OUQ0PiA8VTU5RDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlp5QxNzQyNgorPFU1QTEzPiA8VTVBMTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqJMyOTcKKzxVNUJFQT4gPFU1QkVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a+qMAorPFU1QzNFPiA8VTVDM0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsL41MjExCis8VTVDRDc+IDxVNUNENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WzlzAKKzxVNUQyMz4gPFU1RDIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bSjMAorPFU1RDU0PiA8VTVENTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltZQwCis8VTVGQUI+IDxVNUZBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W+qzAKKzxVNjEwNz4gPFU2MTA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oSHMAorPFU2NTk2PiA8VTY1OTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlpYwCis8VTY2OTA+IDxVNjY5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aakDEKKzxVNjhCNj4gPFU2OEI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qK2MAorPFU2OTMyPiA8VTY5MzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpLIwCis8VTZEMjc+IDxVNkQyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a0pzMKKzxVNkQ1OD4gPFU2RDU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rWYMAorPFU3MDlDPiA8VTcwOUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngpw5OQorPFU3MTUyPiA8VTcxNTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhZIwCis8VTczMjU+IDxVNzMyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eMpTIwOQorPFU3M0FFPiA8VTczQUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjq41OAorPFU3NDRCPiA8VTc0NEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkYsxCis8VTc1Q0Y+IDxVNzVDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eXjzAKKzxVNzVGRj4gPFU3NUZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55e/MTYzCis8VTc4Qzg+IDxVNzhDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ejiDAKKzxVN0RFRj4gPFU3REVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57evMAorPFU3RUFDPiA8VTdFQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuqwyNzQKKzxVODE3Mj4gPFU4MTcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IWyMAorPFU4MjQ5PiA8VTgyNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiYk1Cis8VTgyOUI+IDxVODI5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iKmzAKKzxVODJDNz4gPFU4MkM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IuHNTE1Cis8VTgzNzE+IDxVODM3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iNsTAKKzxVODQwRT4gPFU4NDBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JCONjE2Cis8VTg0NjY+IDxVODQ2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iRpjUKKzxVODQ4RD4gPFU4NDhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JKNMAorPFU4NEY2PiA8VTg0RjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPok7YxCis8VTg1M0Y+IDxVODUzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iUvzEKKzxVODVCMz4gPFU4NUIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JazMAorPFU4NjI0PiA8VTg2MjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomKQwCis8VTg3MzI+IDxVODczMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+icsjAKKzxVOEFDOT4gPFU4QUM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KuJMAorPFU4QkZGPiA8VThCRkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor781OAorPFU4RTEzPiA8VThFMTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouJMwCis8VTkzNjE+IDxVOTM2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mNoTAKKzxVOTdEMT4gPFU5N0QxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z+RMAorPFU5N0Q5PiA8VTk3RDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpn5kwCis8VTk3RTE+IDxVOTdFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mfoTAKKzxVOTdFQT4gPFU5N0VBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z+qNDYKKzxVOTgyMD4gPFU5ODIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aCgMAorPFU5OEI5PiA8VTk4Qjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPporkwCis8VTlBQTk+IDxVOUFBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mqqTAKKzxVOUFBQT4gPFU5QUFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aqqMAorPFU5QUFCPiA8VTlBQUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqqswCis8VTlCQUE+IDxVOUJBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+muqjAKKzxVOUM5ND4gPFU5Qzk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bKUNAorPFUzOTVDPiA8VTM5NUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpZwwCis8VTM5QTM+IDxVMzlBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OmozAKKzxVM0RDOT4gPFUzREM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47eJMAorPFU0NUZEPiA8VTQ1RkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkl70wCis8VTQ2MTk+IDxVNDYxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SYmTAKKzxVNDY3Rj4gPFU0NjdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Jm/MAorPFU0NzFDPiA8VTQ3MUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknJwwCis8VTQ4N0E+IDxVNDg3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ShujAKKzxVNEE4Qj4gPFU0QThCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KqLMAorPFU0QjExPiA8VTRCMTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrJEwCis8VTRCNzM+IDxVNEI3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+StszAKKzxVNEJCOT4gPFU0QkI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K65MAorPFU0QzgxPiA8VTRDODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksoEwCis8VTRENzM+IDxVNEQ3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S1szAKKzxVNEY0RD4gPFU0RjREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L2NNTA1NDIKKzxVNTA3RD4gPFU1MDdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YG9MgorPFU1MERFPiA8VTUwREU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlg54wCis8VTUzNkI+IDxVNTM2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WNqzEyMDc5Cis8VTUzREU+IDxVNTNERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPnjAKKzxVNTQ3Mz4gPFU1NDczPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZGzMTY4ODYKKzxVNTU4Mj4gPFU1NTgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZaCMzE2OQorPFU1QUE2PiA8VTVBQTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqqYwCis8VTVCMTI+IDxVNUIxMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WskjAKKzxVNUMwOT4gPFU1QzA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bCJMTY3NgorPFU1RkJCPiA8VTVGQkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvrswCis8VTYxNzA+IDxVNjE3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aFsDQwMjYKKzxVNjFDMD4gPFU2MUMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oeAMAorPFU2NzJBPiA8VTY3MkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnKoyNDY3MgorPFU2RTJEPiA8VTZFMkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuK0xNTEKKzxVNzFBRD4gPFU3MUFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54atMAorPFU3MjlBPiA8VTcyOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnipowCis8VTcyQTk+IDxVNzJBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eKqTAKKzxVNzMyQz4gPFU3MzJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54ysMjU4Cis8VTc0OEY+IDxVNzQ4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eSjzAKKzxVNzU0Rj4gPFU3NTRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55WPMTYxNworPFU3OEQxPiA8VTc4RDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPno5EwCis8VTdERUQ+IDxVN0RFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3rTAKKzxVN0Y3Qj4gPFU3RjdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5727MAorPFU4MEMzPiA8VTgwQzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPog4MxNTc0Cis8VTgyRkY+IDxVODJGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iLvzAKKzxVODNDQj4gPFU4M0NCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I+LMAorPFU4NTFBPiA8VTg1MUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolJo0NDgKKzxVODU4OT4gPFU4NTg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JaJMAorPFU4NUVGPiA8VTg1RUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPol68wCis8VTg2MzY+IDxVODYzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iYtjAKKzxVODczQz4gPFU4NzNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Jy8MAorPFU4NzVGPiA8VTg3NUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonZ8xCis8VTg3QjE+IDxVODdCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iesTAKKzxVODg1Qj4gPFU4ODVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KGbMTAyCis8VTg4NUU+IDxVODg1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ihnjAKKzxVODkzRD4gPFU4OTNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KS9MAorPFU4QjAyPiA8VThCMDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorIIxODAKKzxVOEI4Nj4gPFU4Qjg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K6GMAorPFU4QjhGPiA8VThCOEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoro8wCis8VThDMTM+IDxVOEMxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwkzg3NjAKKzxVOEQwMD4gPFU4RDAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LSAMAorPFU4RTk3PiA8VThFOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoupcwCis8VThFOUI+IDxVOEU5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6mzAKKzxVOEVDRT4gPFU4RUNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LuOMAorPFU4RjRBPiA8VThGNEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovYowCis8VTkwN0E+IDxVOTA3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mBujg1Cis8VTkzMTc+IDxVOTMxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mMlzAKKzxVOTNDRj4gPFU5M0NGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+PMAorPFU5NzI4PiA8VTk3Mjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnKgwCis8VTk5Mjc+IDxVOTkyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mkpzAKKzxVOTkzNT4gPFU5OTM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aS1MworPFU5QjRGPiA8VTlCNEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprY8yODcxCis8VTlCODc+IDxVOUI4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+muhzAKKzxVOUNEQT4gPFU5Q0RBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bOaMAorPFU1ODZEPiA8VTU4NkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloa0wCis8VTY2Mzc+IDxVNjYzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aYtzAKKzxVNkI5Rj4gPFU2QjlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q6fMAorPFU2RTI5PiA8VTZFMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuKkxNDIxNAorPFU2RUFCPiA8VTZFQUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuqs3NAorPFU3NDY1PiA8VTc0NjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkaUxCis8VTc2MUY+IDxVNzYxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eYnzMwMAorPFU3NzgzPiA8VTc3ODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnoMwCis8VTdERkM+IDxVN0RGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3vDAKKzxVN0YwQT4gPFU3RjBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57yKMAorPFU4NTcwPiA8VTg1NzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolbAwCis8VThDNzE+IDxVOEM3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ixsTAKKzxVOEYzQz4gPFU4RjNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ly8MQorPFU4RjQwPiA8VThGNDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovYAwCis8VThGOTI+IDxVOEY5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i+kjAKKzxVOTlBNz4gPFU5OUE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aanMAorPFU5QzFCPiA8VTlDMUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsJswCis8VTlDMkU+IDxVOUMyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mwrjAKKzxVOUNDMT4gPFU5Q0MxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bOBMAorPFU0M0I5PiA8VTQzQjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjrkwCis8VTQzQkQ+IDxVNDNCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SOvTAKKzxVNDYwNz4gPFU0NjA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JiHMAorPFU0QzFBPiA8VTRDMUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksJowCis8VTVGNjM+IDxVNUY2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W9ozAKKzxVNjU4Nz4gPFU2NTg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5paHMTQzMjM4Cis8VTcwODY+IDxVNzA4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eChjAKKzxVNzNGMz4gPFU3M0YzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54+zMAorPFU3NDFEPiA8VTc0MUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkJ0wCis8VTc0QkE+IDxVNzRCQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eSujEKKzxVNzYxMj4gPFU3NjEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55iSMAorPFU3RDBCPiA8VTdEMEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntIsxOAorPFU3RUI5PiA8VTdFQjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnurkyMjg0Cis8VTgwNUU+IDxVODA1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iBnjEyNAorPFU4MkEwPiA8VTgyQTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiqAwCis8VTg2ODk+IDxVODY4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iaiTAKKzxVODY4QT4gPFU4NjhBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JqKOTcyCis8VTg3QTE+IDxVODdBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ieoTAKKzxVODdDMT4gPFU4N0MxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J+BMAorPFU5NUJGPiA8VTk1QkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplr8wCis8VTk1QzU+IDxVOTVDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mXhTAKKzxVOTVFNj4gPFU5NUU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZemMAorPFU5NUZCPiA8VTk1RkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl7sxMjAwMAorPFU5NjBDPiA8VTk2MEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmIwxCis8VTk2RUY+IDxVOTZFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mbrzYzOAorPFU5OUJDPiA8VTk5QkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpprwwCis8VTk5Qzc+IDxVOTlDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mnhzAKKzxVOUI3MD4gPFU5QjcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a2wMAorPFU5Q0ZDPiA8VTlDRkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPps7wwCis8VTlEMEQ+IDxVOUQwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m0jTAKKzxVOUQxNj4gPFU5RDE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bSWMAorPFU5RjI0PiA8VTlGMjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvKQwCis8VTM0OUE+IDxVMzQ5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OSmjAKKzxVMzVBNz4gPFUzNUE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45anMAorPFUzNUMzPiA8VTM1QzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjl4MwCis8VTM3Njc+IDxVMzc2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OdpzAKKzxVM0NGNz4gPFUzQ0Y3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47O3MAorPFU1MjBFPiA8VTUyMEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliI40MworPFU1NDNCPiA8VTU0M0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkLs0MTYwCis8VTU0NjE+IDxVNTQ2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRoTQKKzxVNjg3RD4gPFU2ODdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qG9MAorPFU3MTc0PiA8VTcxNzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhbQyCis8VTdBMzM+IDxVN0EzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eoszY0MTYKKzxVN0E0Rj4gPFU3QTRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56mPMAorPFU3QTY5PiA8VTdBNjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqak1MAorPFU3RDBBPiA8VTdEMEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntIoyNDYKKzxVODBCMz4gPFU4MEIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IKzMAorPFU4MTE3PiA8VTgxMTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohJcwCis8VTU1NEY+IDxVNTU0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WVjzk1NQorPFU1OThGPiA8VTU5OEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpo8wCis8VTYyODY+IDxVNjI4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aKhjAKKzxVNjNGRT4gPFU2M0ZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o++MgorPFU2NDM1PiA8VTY0MzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkLUwCis8VTZDNzY+IDxVNkM3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+axtjk3NAorPFU2RTAyPiA8VTZFMDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuIIwCis8VTcxOTM+IDxVNzE5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eGkzAKKzxVOTVFRT4gPFU5NUVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZeuOTYwNTcKKzxVNTVFMT4gPFU1NUUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZehMTAxMworPFU1OTYzPiA8VTU5NjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpaMwCis8VTVENjE+IDxVNUQ2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W1oTAKKzxVNkVDMz4gPFU2RUMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ruDMAorPFU3RkMxPiA8VTdGQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnv4ExNDc5Cis8VTg3ODk+IDxVODc4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ieiTAKKzxVOTM5Mz4gPFU5MzkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y6TMAorPFU5NzEwPiA8VTk3MTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnJAwCis8VTlEQjI+IDxVOURCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m2sjAKKzxVOUU1Rj4gPFU5RTVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bmfMAorPFUzNjIyPiA8VTM2MjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmKIwCis8VTM3MzI+IDxVMzczMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OcsjAKKzxVNDQyNT4gPFU0NDI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JClMAorPFU0OTMwPiA8VTQ5MzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpLAwCis8VTUyREM+IDxVNTJEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WLnDAKKzxVNTg1NT4gPFU1ODU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aGVMAorPFU2NkExPiA8VTY2QTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmqEwCis8VTZEN0I+IDxVNkQ3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a1uzAKKzxVNzc4OD4gPFU3Nzg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj556IMAorPFU4MDZDPiA8VTgwNkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogawwCis8VTg0Q0E+IDxVODRDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iTijIwCis8VTc0RUU+IDxVNzRFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eTrjI2MQorPFU3NTE1PiA8VTc1MTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlJUyCis8VTdGNEI+IDxVN0Y0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9izAKKzxVODU3OT4gPFU4NTc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JW5MQorPFU5RjQ2PiA8VTlGNDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvYYyCis8VTUwMkQ+IDxVNTAyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WArTE4NAorPFU1NTI5PiA8VTU1Mjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllKkwCis8VTYzMUQ+IDxVNjMxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aMnTY3Cis8VTY0QkU+IDxVNjRCRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aSvjAKKzxVNkRCOT4gPFU2REI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ra5MAorPFU3MzI3PiA8VTczMjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjKcwCis8VTdBOUQ+IDxVN0E5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eqnTMwNDgKKzxVN0FBOT4gPFU3QUE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56qpMjIKKzxVODNCND4gPFU4M0I0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I60MjMKKzxVODQzNT4gPFU4NDM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JC1MAorPFU4NzE3PiA8VTg3MTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonJczNzkKKzxVOEUxMj4gPFU4RTEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LiSMAorPFUzOUIxPiA8VTM5QjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjprEwCis8VTM5RjQ+IDxVMzlGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OntDAKKzxVNEMwMD4gPFU0QzAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LCAMAorPFU1QTUwPiA8VTVBNTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqZAwCis8VTYyMTE+IDxVNjIxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aIkTg0MTEyNworPFU2MzcwPiA8VTYzNzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjbAwCis8VTM4MUI+IDxVMzgxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OgmzAKKzxVM0M2Nz4gPFUzQzY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47GnMAorPFU0MDRBPiA8VTQwNEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgYowCis8VTQ4MEU+IDxVNDgwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SgjjAKKzxVNTA1Mz4gPFU1MDUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YGTMAorPFU1MzY3PiA8VTUzNjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljacyOTE5Cis8VTVCMzM+IDxVNUIzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WsszAKKzxVNUU0ND4gPFU1RTQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bmENDAKKzxVNjM3RT4gPFU2MzdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o2+MAorPFU2M0UxPiA8VTYzRTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmj6E3MTAyCis8VTY1QTE+IDxVNjVBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWoTIyNQorPFU2OTQzPiA8VTY5NDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpYMwCis8VTZDODM+IDxVNkM4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aygzI5OTMKKzxVNkUyNT4gPFU2RTI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rilMTQyCis8VTZGRTM+IDxVNkZFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a/ozAKKzxVNzEyNT4gPFU3MTI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54SlMAorPFU4MDlGPiA8VTgwOUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogp8wCis8VTgxRTU+IDxVODFFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iHpTIzCis8VTlGNzc+IDxVOUY3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m9tzAKKzxVOUY4Qz4gPFU5RjhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b6MMTg3Cis8VTRFNEM+IDxVNEU0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S5jDU0NzkKKzxVNTI2RD4gPFU1MjZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YmtMAorPFU1NDVDPiA8VTU0NUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkZwxOTA2Cis8VTU1REE+IDxVNTVEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WXmjMKKzxVNTcyQz4gPFU1NzJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZysMQorPFU1QTg5PiA8VTVBODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqokwCis8VTVDNEI+IDxVNUM0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WxizEzNjMwCis8VTVERUI+IDxVNURFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W3qzk4MQorPFU1RjE5PiA8VTVGMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvJkwCis8VTY3NDc+IDxVNjc0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+adhzAKKzxVNkI0RD4gPFU2QjREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q2NMAorPFU2QzU5PiA8VTZDNTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsZkwCis8VTZDNUE+IDxVNkM1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+axmjAKKzxVNkM2MT4gPFU2QzYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rGhMjg0MAorPFU2RDNGPiA8VTZEM0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtL8wCis8VTcwQ0Y+IDxVNzBDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eDjzQ2Cis8VTdBOEY+IDxVN0E4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eqjzAKKzxVN0JCQz4gPFU3QkJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5668MAorPFU4MTVCPiA8VTgxNUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohZszCis8VTg3OTA+IDxVODc5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iekDAKKzxVOEFBMz4gPFU4QUEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KqjMQorPFU4QkVDPiA8VThCRUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor6wzMTEKKzxVOTBBQz4gPFU5MEFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKsMzM1Cis8VTkxMTQ+IDxVOTExND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mElDAKKzxVOTNBMj4gPFU5M0EyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y6iMAorPFU5NEE4PiA8VTk0QTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkqgxNgorPFU5NjUzPiA8VTk2NTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmZMwCis8VTlDMUU+IDxVOUMxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mwnjAKKzxVOUQyRT4gPFU5RDJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bSuMAorPFUzREZCPiA8VTNERkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjt7swCis8VTNFNzM+IDxVM0U3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O5szAKKzxVM0VDRD4gPFUzRUNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47uNMAorPFU0MzYyPiA8VTQzNjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjaIwCis8VTQ5OUM+IDxVNDk5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SmnDAKKzxVNEFEMz4gPFU0QUQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KuTMAorPFU0QjhGPiA8VTRCOEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkro8wCis8VTRGQzk+IDxVNEZDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S/iTAKKzxVNTQzMz4gPFU1NDMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZCzMTAKKzxVNTQzND4gPFU1NDM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZC0OTcxMQorPFU1NDNFPiA8VTU0M0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkL4xNjQ5Cis8VTU0NDk+IDxVNTQ0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRiTAKKzxVNTUxND4gPFU1NTE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZSUNjM4Cis8VTVBMkE+IDxVNUEyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WoqjAKKzxVNUNGRj4gPFU1Q0ZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bO/MAorPFU1RTkxPiA8VTVFOTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlupExMgorPFU2NUUwPiA8VTY1RTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPml6AxMDcwNzYKKzxVNjhBNz4gPFU2OEE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qKnODg3Cis8VTZCQ0I+IDxVNkJDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+avizQxMQorPFU2RDE2PiA8VTZEMTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtJYwCis8VTZENkY+IDxVNkQ2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a1rzMKKzxVNzI3RT4gPFU3MjdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54m+MTUKKzxVNzNGOD4gPFU3M0Y4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54+4MAorPFU3NDkxPiA8VTc0OTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkpEwCis8VTc3QjQ+IDxVNzdCND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eetDIKKzxVNzk2Nj4gPFU3OTY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56WmMAorPFU3OTkxPiA8VTc5OTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnppEwCis8VTgyOUM+IDxVODI5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iKnDY0OAorPFU4MzIzPiA8VTgzMjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojKMwCis8VTgzODE+IDxVODM4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iOgTAKKzxVODU2QT4gPFU4NTZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JWqNAorPFU4NzA4PiA8VTg3MDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonIg3OQorPFU4QTg4PiA8VThBODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqogwCis8VThCNTU+IDxVOEI1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+itlTAKKzxVOTBEQT4gPFU5MERBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YOaMAorPFU5MkQ4PiA8VTkyRDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpi5gzCis8VTkyRDk+IDxVOTJEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mLmTAKKzxVOTRGQj4gPFU5NEZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZO7MAorPFU5QkMzPiA8VTlCQzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpr4MwCis8VTlENTA+IDxVOUQ1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m1kDAKKzxVOURFMT4gPFU5REUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6behMAorPFU5RTQwPiA8VTlFNDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuYAwCis8VTlFOEM+IDxVOUU4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6jDAKKzxVOUYyRj4gPFU5RjJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6byvMgorPFUzNDA1PiA8VTM0MDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkIUwCis8VTM0NDQ+IDxVMzQ0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ORhDAKKzxVM0IzMz4gPFUzQjMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46yzMAorPFUzRDcyPiA8VTNENzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtbIwCis8VTQ0ODk+IDxVNDQ4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SSiTAKKzxVNDdGQz4gPFU0N0ZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J+8MAorPFU0ODY3PiA8VTQ4Njc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoacwCis8VTRDQzc+IDxVNENDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SzhzAKKzxVNEU0ND4gPFU0RTQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LmEMAorPFU0RTk0PiA8VTRFOTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkupQzODA2MworPFU0RUY1PiA8VTRFRjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPku7U0MworPFU0RjBEPiA8VTRGMEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvI0zOTg2Cis8VTRGQUU+IDxVNEZBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+rjc2OAorPFU1MDM1PiA8VTUwMzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgLUwCis8VTUxMUI+IDxVNTExQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WEmzAKKzxVNTM0OD4gPFU1MzQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y2IMTM2OTAKKzxVNTU0RT4gPFU1NTRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZWOMAorPFU1OUE5PiA8VTU5QTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpqk2NzIKKzxVNUEyQz4gPFU1QTJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aisMAorPFU1QUY1PiA8VTVBRjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlq7UxCis8VTVENjg+IDxVNUQ2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W1qDAKKzxVNUVFMT4gPFU1RUUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5buhMAorPFU1RkU0PiA8VTVGRTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv6Q0MQorPFU2MDAzPiA8VTYwMDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgIMyNgorPFU2MUFFPiA8VTYxQUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhq4wCis8VTYzNDI+IDxVNjM0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aNgjk2OAorPFU2NDQwPiA8VTY0NDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkYAzCis8VTY1RkY+IDxVNjVGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aXvzAKKzxVNkE0Nj4gPFU2QTQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qmGMAorPFU2QjY2PiA8VTZCNjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmraYxOTA3MworPFU2RjU1PiA8VTZGNTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvZUwCis8VTczOUQ+IDxVNzM5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eOnTAKKzxVNzNGNz4gPFU3M0Y3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54+3MAorPFU3NDY2PiA8VTc0NjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkaYyCis8VTc1MTI+IDxVNzUxMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eUkjAKKzxVNzg5ND4gPFU3ODk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56KUMAorPFU4MjFFPiA8VTgyMUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiJ4xMjA5MQorPFU4RThDPiA8VThFOEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouowwCis8VThGRDU+IDxVOEZENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i/lTEKKzxVOUQ2MT4gPFU5RDYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bWhMAorPFU5RTQ5PiA8VTlFNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuYkxODMKKzxVMzQzMz4gPFUzNDMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45CzMAorPFUzODU0PiA8VTM4NTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoZQwCis8VTNGN0U+IDxVM0Y3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O9vjAKKzxVNDBENj4gPFU0MEQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IOWMAorPFU0M0I4PiA8VTQzQjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjrgwCis8VTQ0NDE+IDxVNDQ0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SRgTAKKzxVNDZFOT4gPFU0NkU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JupMAorPFU0OThEPiA8VTQ5OEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpo0wCis8VTRDRjE+IDxVNENGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SzsTAKKzxVNEYwNj4gPFU0RjA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LyGMAorPFU1MTQwPiA8VTUxNDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhYA2NzgKKzxVNTJBMT4gPFU1MkExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YqhMjQ2MTIKKzxVNTJEOT4gPFU1MkQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YuZMjEwCis8VTUyRkY+IDxVNTJGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WLvzg3NQorPFU1MzdDPiA8VTUzN0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljbwwCis8VTU2NDE+IDxVNTY0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WZgTUKKzxVNTc1RT4gPFU1NzVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z2eMTk1Cis8VTU4NjI+IDxVNTg2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WhojEKKzxVNTk2Nj4gPFU1OTY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aWmMAorPFU1QTdBPiA8VTVBN0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqbo1Cis8VTVCRTQ+IDxVNUJFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WvpDE0Cis8VTVDN0M+IDxVNUM3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WxvDAKKzxVNUM4OT4gPFU1Qzg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bKJMAorPFU1RDREPiA8VTVENEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltY0wCis8VTVGRTI+IDxVNUZFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W/ojAKKzxVNjA3Nj4gPFU2MDc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oG2NTc5MworPFU2MDlFPiA8VTYwOUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgp4wCis8VTYwOUY+IDxVNjA5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aCnzYwNDQKKzxVNjBBRT4gPFU2MEFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oKuMAorPFU2MjBBPiA8VTYyMEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiIoxMTcKKzxVNjI2ND4gPFU2MjY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5omkMAorPFU2NTQ0PiA8VTY1NDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlYQwCis8VTY2NjQ+IDxVNjY2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aZpDg0MQorPFU2NzRDPiA8VTY3NEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnYw4NworPFU2Qzk1PiA8VTZDOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmspUwCis8VTZFQTk+IDxVNkVBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a6qTAKKzxVNzExMD4gPFU3MTEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54SQMzcKKzxVNzE1Rj4gPFU3MTVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54WfMAorPFU3MTgzPiA8VTcxODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhoMwCis8VTcyNjk+IDxVNzI2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eJqTQ3MTE2Cis8VTc1RTY+IDxVNzVFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eXpjUKKzxVNzdGOT4gPFU3N0Y5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+5MAorPFU3QUI5PiA8VTdBQjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqrkwCis8VTdDODU+IDxVN0M4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eyhTAKKzxVODJCND4gPFU4MkI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Iq0MAorPFU4NEU5PiA8VTg0RTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPok6kwCis8VThBQTQ+IDxVOEFBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iqpDQ1Cis8VThCRUY+IDxVOEJFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ivrzEwMDc2Cis8VThFQ0Y+IDxVOEVDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i7jzAKKzxVOTAxQz4gPFU5MDFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YCcMAorPFU5MDdCPiA8VTkwN0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgbswCis8VTkyQzg+IDxVOTJDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mLiDAKKzxVOTYyMj4gPFU5NjIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZiiMgorPFU5Njk2PiA8VTk2OTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmpYwCis8VTk2RkU+IDxVOTZGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mbvjMzMzIKKzxVOTcxQT4gPFU5NzFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZyaMAorPFU5NzI3PiA8VTk3Mjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnKczNAorPFU5NzcwPiA8VTk3NzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnbAxCis8VTlBMTY+IDxVOUExNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+moljAKKzxVOUE5Qj4gPFU5QTlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aqbNjUKKzxVOUY0MD4gPFU5RjQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b2AMAorPFVGQTBDPiA8VUZBMEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPvqIwwCis8VTRGRDk+IDxVNEZEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S/mTAKKzxVNTA5Mj4gPFU1MDkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YKSMjIKKzxVNTBDMT4gPFU1MEMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YOBMAorPFU1MEQ2PiA8VTUwRDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlg5YxMworPFU1MTZFPiA8VTUxNkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlha4xNjQ2Cis8VTUxREU+IDxVNTFERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WHnjAKKzxVNTM2NT4gPFU1MzY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y2lMAorPFU1MzgwPiA8VTUzODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljoAwCis8VTU0Mzg+IDxVNTQzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WQuDkzMDAKKzxVNTUwRj4gPFU1NTBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZSPMjQ5Cis8VTU2M0I+IDxVNTYzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WYuzMwMzUKKzxVNTY0Rj4gPFU1NjRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZmPMQorPFU1OTE1PiA8VTU5MTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpJUyNTMxCis8VTU5NUE+IDxVNTk1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WlmjE5NworPFU1QTkwPiA8VTVBOTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqpAwCis8VTVCMDY+IDxVNUIwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WshjAKKzxVNUIwOT4gPFU1QjA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ayJNTAzCis8VTVDNTY+IDxVNUM1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WxljAKKzxVNUQ2MD4gPFU1RDYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bWgMAorPFU1REM3PiA8VTVEQzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlt4cwCis8VTVFMEM+IDxVNUUwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W4jDIwMzI1Cis8VTVGODY+IDxVNUY4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W+hjAKKzxVNUZBRj4gPFU1RkFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b6vMAorPFU1RkRBPiA8VTVGREE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv5owCis8VTYwMzc+IDxVNjAzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aAtzAKKzxVNjAzOD4gPFU2MDM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oC4MAorPFU2MDUzPiA8VTYwNTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgZMyCis8VTYwNkY+IDxVNjA2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBrzI0MjAwCis8VTYwODk+IDxVNjA4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aCiTQ1MjcKKzxVNjA5NT4gPFU2MDk1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oKVMAorPFU2MEMxPiA8VTYwQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmg4EwCis8VTYwREM+IDxVNjBEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aDnDYyMjMKKzxVNjI3MT4gPFU2MjcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5omxMAorPFU2Mjc4PiA8VTYyNzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmibgwCis8VTY2MTQ+IDxVNjYxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aYlDExODMKKzxVNjY1RT4gPFU2NjVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pmeMgorPFU2NjcwPiA8VTY2NzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmbAxODYwCis8VTY2NzM+IDxVNjY3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aZszIKKzxVNjZFNj4gPFU2NkU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pumMTk3Cis8VTY3OTA+IDxVNjc5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aekDU0NzMKKzxVNjg3OD4gPFU2ODc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qG4MQorPFU2OUJEPiA8VTY5QkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpr0wCis8VTZBMjg+IDxVNkEyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aoqDMwCis8VTZBNDA+IDxVNkE0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+apgDAKKzxVNkIzNz4gPFU2QjM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qy3MTMKKzxVNkI1Nj4gPFU2QjU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q2WMAorPFU2QzI1PiA8VTZDMjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsKUwCis8VTZDNTA+IDxVNkM1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+axkDgyCis8VTZENjA+IDxVNkQ2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a1oDEwCis8VTZEQzU+IDxVNkRDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3hTE4NgorPFU2RTEzPiA8VTZFMTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuJMwCis8VTZFQUE+IDxVNkVBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a6qjE1NjUKKzxVNkY1RD4gPFU2RjVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r2dMAorPFU3MEVGPiA8VTcwRUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPng68zNworPFU3MTAxPiA8VTcxMDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhIEwCis8VTcxMDg+IDxVNzEwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eEiDAKKzxVNzE1NT4gPFU3MTU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54WVMAorPFU3MTg0PiA8VTcxODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhoQxMDM2Cis8VTcxODg+IDxVNzE4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eGiDAKKzxVNzE5OT4gPFU3MTk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54aZNDM0MworPFU3MUI5PiA8VTcxQjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhrkxMTQKKzxVNzFCQT4gPFU3MUJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54a6MAorPFU3MUJCPiA8VTcxQkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhrswCis8VTcxRTg+IDxVNzFFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHqDAKKzxVNzIxND4gPFU3MjE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54iUMAorPFU3MjdBPiA8VTcyN0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniboxODY1Cis8VTcyODA+IDxVNzI4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eKgDMxMworPFU3MkEwPiA8VTcyQTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniqAwCis8VTcyQTc+IDxVNzJBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eKpzEzCis8VTc0MEI+IDxVNzQwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eQizAKKzxVNzRENz4gPFU3NEQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55OXMAorPFU3NUE3PiA8VTc1QTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlqcwCis8VTc2OTk+IDxVNzY5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eamTQxNAorPFU3NkZCPiA8VTc2RkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnm7swCis8VTc3NEU+IDxVNzc0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+edjjAKKzxVNzdBNj4gPFU3N0E2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj556mMAorPFU3N0ZEPiA8VTc3RkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnn70yNQorPFU3ODUyPiA8VTc4NTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoZIxMAorPFU3OTAyPiA8VTc5MDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpIIwCis8VTdBMDA+IDxVN0EwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eogDMwOTMKKzxVN0E3OD4gPFU3QTc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56m4MQorPFU3QUI4PiA8VTdBQjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqrg4MQorPFU3QzlFPiA8VTdDOUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsp4xCis8VTdFMTg+IDxVN0UxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e4mDAKKzxVN0U2NT4gPFU3RTY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57mlMAorPFU3RkIyPiA8VTdGQjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvrI5MAorPFU3RkQ1PiA8VTdGRDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnv5U5MAorPFU4MTlEPiA8VTgxOUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohp0xODM4Cis8VTgyM0U+IDxVODIzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iIvjAKKzxVODM4Mz4gPFU4MzgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I6DMAorPFU4M0U1PiA8VTgzRTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoj6UwCis8VTg0QjU+IDxVODRCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iStTAKKzxVODcyNT4gPFU4NzI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JylNjkKKzxVODc4Nz4gPFU4Nzg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J6HMAorPFU4NzlEPiA8VTg3OUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonp0wCis8VTg3Q0I+IDxVODdDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ifizE1OQorPFU4ODM1PiA8VTg4MzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooLUwCis8VTg5N0Y+IDxVODk3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ilvzY2NzYwCis8VTg5ODA+IDxVODk4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+imgDAKKzxVODlGOT4gPFU4OUY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ke5NAorPFU4OUZEPiA8VTg5RkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPop70wCis8VTg5RkY+IDxVODlGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+invzAKKzxVOEI0Nj4gPFU4QjQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K2GMAorPFU4QzQwPiA8VThDNDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosYAwCis8VThDNjg+IDxVOEM2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ixqDAKKzxVOEM2Rj4gPFU4QzZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LGvMAorPFU4Qzk1PiA8VThDOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPospUwCis8VThENjU+IDxVOEQ2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i1pTAKKzxVOTBDQj4gPFU5MENCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YOLMAorPFU5MTQ1PiA8VTkxNDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphYUwCis8VTkxQUY+IDxVOTFBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mGrzAKKzxVOTNFRD4gPFU5M0VEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+tMAorPFU5NDc0PiA8VTk0NzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkbQwCis8VTk1MjE+IDxVOTUyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mUoTk4NAorPFU5NURGPiA8VTk1REY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl58wCis8VTk2QjU+IDxVOTZCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+matTAKKzxVOTk3Qj4gPFU5OTdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aW7MAorPFU5QTMxPiA8VTlBMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqLEwCis8VTlBNjg+IDxVOUE2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mpqDAKKzxVOUQ1Nz4gPFU5RDU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bWXMAorPFU5RUNBPiA8VTlFQ0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpu4owCis8VTlGMzc+IDxVOUYzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m8tzEKKzxVRkExNT4gPFVGQTE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj76iVMAorPFUzNTEyPiA8VTM1MTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlJIwCis8VTM4MDQ+IDxVMzgwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OghDAKKzxVMzkzND4gPFUzOTM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46S0MAorPFUzOUJCPiA8VTM5QkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjprswCis8VTNBNTc+IDxVM0E1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OplzAKKzxVM0NFNz4gPFUzQ0U3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47OnMAorPFUzRDdGPiA8VTNEN0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtb8wCis8VTNGNkY+IDxVM0Y2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O9rzAKKzxVM0ZDNz4gPFUzRkM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47+HMAorPFU0MDE4PiA8VTQwMTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgJgwCis8VTQzRUU+IDxVNDNFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SPrjAKKzxVNEFFMz4gPFU0QUUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KujMAorPFU0RTYwPiA8VTRFNjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuaAxNDU2MQorPFU1QUIzPiA8VTVBQjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqrMxNzcyCis8VTVEOEQ+IDxVNUQ4RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W2jTAKKzxVNUUyRD4gPFU1RTJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bitMTA0ODMKKzxVNjhFND4gPFU2OEU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qOkMAorPFU2OTNBPiA8VTY5M0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpLowCis8VTY5RTI+IDxVNjlFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+anojAKKzxVNkE4ND4gPFU2QTg0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qqENTgKKzxVNkIyRj4gPFU2QjJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qyvMAorPFU2RjFEPiA8VTZGMUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvJ0yCis8VTcxMUY+IDxVNzExRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eEnzAKKzxVNzEyQz4gPFU3MTJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54SsMAorPFU3MzY1PiA8VTczNjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjaUwCis8VTc2MUM+IDxVNzYxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eYnDAKKzxVN0ZEMj4gPFU3RkQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57+SMTM3Cis8VTg0QTA+IDxVODRBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iSoDAKKzxVODRDNj4gPFU4NEM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JOGNQorPFU4NTgyPiA8VTg1ODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoloIwCis8VTg4QUQ+IDxVODhBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iirTUxMTEKKzxVODk3Mj4gPFU4OTcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KWyNzMKKzxVODlBMT4gPFU4OUExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KahMAorPFU4OUNCPiA8VTg5Q0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPop4s1Cis8VThCMzU+IDxVOEIzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+istTAKKzxVOEQ5OD4gPFU4RDk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LaYMAorPFU5M0I0PiA8VTkzQjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjrQwCis8VTk2QjA+IDxVOTZCMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+masDQKKzxVOTcyQj4gPFU5NzJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZyrMAorPFU5OEMxPiA8VTk4QzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpo4EwCis8VTlBM0Q+IDxVOUEzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+movTAKKzxVOUMzQz4gPFU5QzNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bC8MAorPFU5Q0RCPiA8VTlDREI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPps5swCis8VTQ4ODQ+IDxVNDg4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SihDAKKzxVNTU5Qz4gPFU1NTlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZacMjk4NzYKKzxVNTZDRD4gPFU1NkNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZuNMAorPFU1OEQwPiA8VTU4RDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlo5AwCis8VTVDNjM+IDxVNUM2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WxozE5Cis8VTVGOTk+IDxVNUY5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W+mTEyMQorPFU2MTk4PiA8VTYxOTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhpgwCis8VTYxOTk+IDxVNjE5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aGmTIKKzxVNjU3Qz4gPFU2NTdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pW8MAorPFU2NkJGPiA8VTY2QkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmr8wCis8VTY3QjI+IDxVNjdCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aesjAKKzxVNkQxNz4gPFU2RDE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rSXODU1OQorPFU2RjA3PiA8VTZGMDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvIcwCis8VTcyRjY+IDxVNzJGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eLtjAKKzxVNzNCQT4gPFU3M0JBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5466MjIwCis8VTc0QkQ+IDxVNzRCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eSvTAKKzxVNzdENj4gPFU3N0Q2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+WMAorPFU3OUE3PiA8VTc5QTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpqcyNDcKKzxVN0MwMT4gPFU3QzAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57CBMAorPFU3RTMwPiA8VTdFMzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuLAxCis8VTdFOUE+IDxVN0U5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e6mjAKKzxVODQ0OD4gPFU4NDQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JGIMAorPFU4NDc4PiA8VTg0Nzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokbgxMgorPFU4NEYwPiA8VTg0RjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPok7AwCis8VTg3RTI+IDxVODdFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ifojAKKzxVOEFGMD4gPFU4QUYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KuwMAorPFU4RTVEPiA8VThFNUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouZ0wCis8VThFQTc+IDxVOEVBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6pzAKKzxVOTI5MT4gPFU5MjkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YqRMAorPFU5NEUzPiA8VTk0RTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpk6MxOAorPFU5NzNDPiA8VTk3M0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnLwwCis8VTlDNUE+IDxVOUM1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxmjAKKzxVMzQ3Nj4gPFUzNDc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45G2MAorPFUzNjdFPiA8VTM2N0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmb4wCis8VTM2OUI+IDxVMzY5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OamzAKKzxVMzc5Mj4gPFUzNzkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj456SMAorPFUzOERGPiA8VTM4REY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjo58wCis8VTM5Mzg+IDxVMzkzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OkuDAKKzxVMzk2MT4gPFUzOTYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46WhMAorPFUzQjYxPiA8VTNCNjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjraEwCis8VTNFMEQ+IDxVM0UwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O4jTAKKzxVM0U2Qj4gPFUzRTZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47mrMAorPFU0MjJBPiA8VTQyMkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiKowCis8VTQyQTA+IDxVNDJBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SKoDAKKzxVNDQzQz4gPFU0NDNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JC8MAorPFU0NEM3PiA8VTQ0Qzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkk4cwCis8VTQ2N0Q+IDxVNDY3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SZvTAKKzxVNDZCNz4gPFU0NkI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Jq3MAorPFU0NkU1PiA8VTQ2RTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkm6UwCis8VTQ3MDE+IDxVNDcwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ScgTAKKzxVNDlDRD4gPFU0OUNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KeNMAorPFU0QTMzPiA8VTRBMzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqLMwCis8VTRBNjQ+IDxVNEE2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SppDAKKzxVNEI4RT4gPFU0QjhFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K6OMAorPFU0Q0FBPiA8VTRDQUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksqowCis8VTRGQzI+IDxVNEZDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S/gjE0MworPFU1MzM4PiA8VTUzMzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljLgwCis8VTUzNEM+IDxVNTM0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WNjDAKKzxVNTUzRD4gPFU1NTNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZS9MAorPFU1NUJBPiA8VTU1QkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllrowCis8VTU2QjE+IDxVNTZCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WasTAKKzxVNUM0Mz4gPFU1QzQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bGDMQorPFU1QzUzPiA8VTVDNTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsZMwCis8VTVDNkQ+IDxVNUM2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WxrTAKKzxVNUZFNT4gPFU1RkU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b+lMAorPFU2MDJDPiA8VTYwMkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgKwwCis8VTYwNDQ+IDxVNjA0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBhDAKKzxVNjIwRj4gPFU2MjBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oiPOTgxNQorPFU2MjMxPiA8VTYyMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiLEwCis8VTY5MUU+IDxVNjkxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aknjAKKzxVNkVDQT4gPFU2RUNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ruKMAorPFU2RjVGPiA8VTZGNUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvZ8wCis8VTZGOTk+IDxVNkY5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a+mTAKKzxVNzE4Mj4gPFU3MTgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54aCMAorPFU3Mjk0PiA8VTcyOTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnipQwCis8VTc4RjY+IDxVNzhGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ejtjAKKzxVNzk4QT4gPFU3OThBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56aKMgorPFU3QTI3PiA8VTdBMjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqKcwCis8VTdDRkI+IDxVN0NGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ezuzUwOTEwCis8VTdEMzA+IDxVN0QzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e0sDE4OQorPFU3RDhDPiA8VTdEOEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntowwCis8VTdFQzY+IDxVN0VDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e7hjE4NzQzCis8VTdFRTQ+IDxVN0VFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e7pDAKKzxVN0ZENj4gPFU3RkQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57+WMAorPFU4MEI4PiA8VTgwQjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogrgwCis8VTgwQjk+IDxVODBCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iCuTAKKzxVODIwMz4gPFU4MjAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IiDMAorPFU4MjA0PiA8VTgyMDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiIQzCis8VTg1NkU+IDxVODU2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iVrjAKKzxVODY2OT4gPFU4NjY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JmpMAorPFU4OTA5PiA8VTg5MDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopIkwCis8VTg5QTQ+IDxVODlBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+impDEKKzxVOEIxMT4gPFU4QjExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KyRMAorPFU4RDY5PiA8VThENjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotakwCis8VTkwQzQ+IDxVOTBDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mDhDQKKzxVOTBFND4gPFU5MEU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YOkMTAKKzxVOTEwRT4gPFU5MTBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YSOMAorPFU5MUYzPiA8VTkxRjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPph7MwCis8VTkxRjg+IDxVOTFGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mHuDAKKzxVOTM4RT4gPFU5MzhFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y6OMAorPFU5NjBCPiA8VTk2MEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmIs2Cis8VTk2OTk+IDxVOTY5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mamTk0OQorPFU5NjlGPiA8VTk2OUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmp8wCis8VTk5M0M+IDxVOTkzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mkvDAKKzxVOTk2OT4gPFU5OTY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aWpMQorPFU5QjI5PiA8VTlCMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprKkwCis8VTlFRDY+IDxVOUVENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7ljAKKzxVOUY0Mj4gPFU5RjQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b2CMAorPFU1MDg0PiA8VTUwODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgoQwCis8VTVDODg+IDxVNUM4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WyiDEKKzxVNzE3NT4gPFU3MTc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54W1MAorPFU3NUE4PiA8VTc1QTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlqgwCis8VTc3OEU+IDxVNzc4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eejjE5MzAKKzxVODY3RT4gPFU4NjdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Jm+MTQ0NgorPFU4QzNBPiA8VThDM0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosLowCis8VTkzNUM+IDxVOTM1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mNnDAKKzxVOTU5NT4gPFU5NTk1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZaVMAorPFU5OEFDPiA8VTk4QUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoqwwCis8VTlDMTU+IDxVOUMxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mwlTAKKzxVMzVDNz4gPFUzNUM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45eHMAorPFUzNjIxPiA8VTM2MjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmKEwCis8VTNDM0E+IDxVM0MzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OwujAKKzxVM0Y2MD4gPFUzRjYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj472gMAorPFU0NThFPiA8VTQ1OEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklo4wCis8VTQ1OTY+IDxVNDU5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SWljAKKzxVNDYyNT4gPFU0NjI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JilMAorPFU0NkM1PiA8VTQ2QzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkm4UwCis8VTQ5OTY+IDxVNDk5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SmljAKKzxVNEE5Nz4gPFU0QTk3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KqXMAorPFU0QUQ3PiA8VTRBRDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkq5cwCis8VTRGQTA+IDxVNEZBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+oDE1ODcKKzxVNEZFMD4gPFU0RkUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L+gOQorPFU1MUJFPiA8VTUxQkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhr4wCis8VTUzMjM+IDxVNTMyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WMozcwMQorPFU1Q0UxPiA8VTVDRTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPls6EyNzExCis8VTVDRkQ+IDxVNUNGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WzvTgKKzxVNjQzMz4gPFU2NDMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pCzMAorPFU2Njg3PiA8VTY2ODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmoc1OTIKKzxVNjdEOT4gPFU2N0Q5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p+ZMworPFU3MEEwPiA8VTcwQTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngqAwCis8VTcwREE+IDxVNzBEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eDmjEKKzxVNzJDRT4gPFU3MkNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54uONTUKKzxVNzJFRD4gPFU3MkVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54utMTYwOQorPFU3MkY5PiA8VTcyRjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPni7kxNAorPFU3M0U4PiA8VTczRTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnj6gwCis8VTc0NTU+IDxVNzQ1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eRlTE1NAorPFU3ODU2PiA8VTc4NTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoZYwCis8VTc4NjQ+IDxVNzg2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ehpDAKKzxVNzhBQz4gPFU3OEFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56KsMAorPFU3OENEPiA8VTc4Q0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPno40wCis8VTc5NkI+IDxVNzk2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+elqzAKKzxVN0IxQT4gPFU3QjFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56yaMAorPFU3QjZBPiA8VTdCNkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnraoxCis8VTdFMDA+IDxVN0UwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e4gDAKKzxVN0UxNj4gPFU3RTE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57iWMAorPFU3RkM4PiA8VTdGQzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnv4gwCis8VTgyMUQ+IDxVODIxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iInTAKKzxVODU3OD4gPFU4NTc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JW4MAorPFU4RDZFPiA8VThENkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPota4wCis8VThGNDQ+IDxVOEY0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i9hDMKKzxVOEY5Nj4gPFU4Rjk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L6WNzE5Cis8VTkwNTA+IDxVOTA1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mBkDI2MAorPFU5MzhCPiA8VTkzOEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjoswCis8VTk3MUU+IDxVOTcxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mcnjI1NjIKKzxVOUEyMj4gPFU5QTIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aiiMAorPFU5QjdCPiA8VTlCN0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprbswCis8VTlFRTA+IDxVOUVFMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7oDE4OQorPFUzNUZGPiA8VTM1RkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjl78wCis8VTM2NjQ+IDxVMzY2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OZpDAKKzxVNEUwNT4gPFU0RTA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LiFMQorPFU0RTBCPiA8VTRFMEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuIsyMzIzODcKKzxVNTQxMz4gPFU1NDEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZCTNTAwMAorPFU1OTBGPiA8VTU5MEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpI84NTY1Cis8VTU5MTM+IDxVNTkxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WkkzAKKzxVNjFENz4gPFU2MUQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oeXMAorPFU2QjMxPiA8VTZCMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrLEwCis8VTc1OUM+IDxVNzU5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eWnDAKKzxVNzc3MT4gPFU3NzcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj552xMAorPFU3RjQ1PiA8VTdGNDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvYU1MgorPFU4MjkwPiA8VTgyOTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoipAwCis8VTkzRUM+IDxVOTNFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mPrDAKKzxVOURCNz4gPFU5REI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ba3MAorPFU0RUQ5PiA8VTRFRDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPku5k0OTYxCis8VTRFREE+IDxVNEVEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S7mjEKKzxVNTBDQT4gPFU1MENBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YOKMAorPFU1MEYyPiA8VTUwRjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlg7IwCis8VTUxNDg+IDxVNTE0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WFiDU0ODM3Cis8VTU2MTU+IDxVNTYxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WYlTAKKzxVNTk3RT4gPFU1OTdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aW+MAorPFU1QjEwPiA8VTVCMTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrJAwCis8VTVCNDU+IDxVNUI0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WthTAKKzxVNUM3Mz4gPFU1QzczPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bGzMAorPFU1RUVGPiA8VTVFRUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlu68wCis8VTVGRkE+IDxVNUZGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W/ujAKKzxVNjFCOD4gPFU2MUI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oa4MAorPFU2MzgwPiA8VTYzODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjoAxMzIzCis8VTY2Qjk+IDxVNjZCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aauTI2Cis8VTY3NzQ+IDxVNjc3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+adtDAKKzxVNjdBRT4gPFU2N0FFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p6uMAorPFU2QzE5PiA8VTZDMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsJkxCis8VTZGOTY+IDxVNkY5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a+ljAKKzxVNzA2Nj4gPFU3MDY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54GmMAorPFU3M0Q3PiA8VTczRDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnj5cwCis8VTc5NDY+IDxVNzk0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+elhjEyCis8VTc5Qzg+IDxVNzlDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eniDAKKzxVN0M3Qz4gPFU3QzdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57G8MjAKKzxVN0U0QT4gPFU3RTRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57mKMAorPFU3RThFPiA8VTdFOEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuo4wCis8VTdFOTY+IDxVN0U5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e6ljkKKzxVODJFRT4gPFU4MkVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IuuMAorPFU4NEQyPiA8VTg0RDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPok5IwCis8VTg5M0M+IDxVODkzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ikvDAKKzxVODk3Mz4gPFU4OTczPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KWzMAorPFU4QTJFPiA8VThBMkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqK4wCis8VThERjk+IDxVOERGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i3uTI2Cis8VThFNkU+IDxVOEU2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i5rjAKKzxVOEU5QT4gPFU4RTlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LqaMAorPFU5MTcwPiA8VTkxNzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphbA3NworPFU5MjlCPiA8VTkyOUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpipswCis8VTkzNDE+IDxVOTM0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mNgTAKKzxVOTRFNj4gPFU5NEU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZOmMAorPFU5NTI4PiA8VTk1Mjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplKgzNworPFU5N0VGPiA8VTk3RUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpn68wCis8VTk3RjE+IDxVOTdGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mfsTAKKzxVOTlBNj4gPFU5OUE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aamMAorPFU5QkFFPiA8VTlCQUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprq41MworPFU5QzdCPiA8VTlDN0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsbswCis8VTlDOUM+IDxVOUM5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mynDg3OTQKKzxVMzYwNT4gPFUzNjA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45iFMAorPFUzNjBCPiA8VTM2MEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmIswCis8VTM2RkU+IDxVMzZGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ObvjAKKzxVMzg0OT4gPFUzODQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46GJMAorPFUzOEJBPiA8VTM4QkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjorowCis8VTNCNzk+IDxVM0I3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OtuTAKKzxVM0JBRD4gPFUzQkFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj466tMAorPFUzQ0M0PiA8VTNDQzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjs4QwCis8VTNDRUQ+IDxVM0NFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OzrTAKKzxVM0Q2QT4gPFUzRDZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47WqMAorPFU0NEI4PiA8VTQ0Qjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkrgwCis8VTQ1NTQ+IDxVNDU1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SVlDAKKzxVNDc2OD4gPFU0NzY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J2oMAorPFU0OUE1PiA8VTQ5QTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpqUwCis8VTRDOTc+IDxVNEM5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SylzAKKzxVNERBMj4gPFU0REEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LaiMAorPFU1NDlFPiA8VTU0OUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkp4wCis8VTU0Qjg+IDxVNTRCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WSuDEwNjMKKzxVNTUwQz4gPFU1NTBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZSMMAorPFU1NTYzPiA8VTU1NjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllaMyCis8VTVBMzQ+IDxVNUEzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WotDU2NQorPFU1QTM5PiA8VTVBMzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqLkwCis8VTVBNzE+IDxVNUE3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WpsTAKKzxVNUFDQz4gPFU1QUNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5auMMjk3NgorPFU1QUZBPiA8VTVBRkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlq7owCis8VTVBRkI+IDxVNUFGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WruzAKKzxVNUYyNj4gPFU1RjI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bymMTc3OAorPFU2MUFBPiA8VTYxQUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhqowCis8VTYzMjY+IDxVNjMyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aMpjEKKzxVNjQ4Rj4gPFU2NDhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pKPMgorPFU2RDhFPiA8VTZEOEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmto4yNzMKKzxVNzFDNT4gPFU3MUM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54eFMAorPFU3NTA5PiA8VTc1MDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlIkwCis8VTc1QzM+IDxVNzVDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eXgzAKKzxVNzVFQj4gPFU3NUVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55erMzMKKzxVNzY0Nz4gPFU3NjQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55mHMAorPFU3NjRFPiA8VTc2NEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmY4wCis8VTc3QUY+IDxVNzdBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eerzAKKzxVNzkyNT4gPFU3OTI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56SlMAorPFU3RDQzPiA8VTdENDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntYMxCis8VTdGQUM+IDxVN0ZBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e+rDAKKzxVODBEOD4gPFU4MEQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IOYMAorPFU4MjM3PiA8VTgyMzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiLcxNzgKKzxVODQ3ND4gPFU4NDc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JG0MAorPFU4NUQ2PiA8VTg1RDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPol5YwCis8VTg2QkY+IDxVODZCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iavzAKKzxVODZERD4gPFU4NkREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JudMAorPFU4ODU0PiA8VTg4NTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooZQ5ODUKKzxVODg1OD4gPFU4ODU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KGYMAorPFU4QUY0PiA8VThBRjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoq7QwCis8VThDRTI+IDxVOENFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+izojUKKzxVOEQxMj4gPFU4RDEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LSSMAorPFU4RDI0PiA8VThEMjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotKQxNzY4Cis8VThGMzE+IDxVOEYzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i8sTAKKzxVOTI5Qz4gPFU5MjlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YqcNAorPFU5NTkxPiA8VTk1OTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplpE2Cis8VTk1RjI+IDxVOTVGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mXsjYwMjkKKzxVOURGMz4gPFU5REYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bezMAorPFU5REY0PiA8VTlERjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpt7QwCis8VTlERkM+IDxVOURGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m3vDAKKzxVOUU0Nz4gPFU5RTQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bmHOQorPFU5RTc5PiA8VTlFNzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpubkxCis8VTM3MkE+IDxVMzcyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OcqjAKKzxVMzlDQj4gPFUzOUNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46eLMAorPFUzOUU1PiA8VTM5RTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjp6UwCis8VTNBRUI+IDxVM0FFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OrqzAKKzxVM0IwRT4gPFUzQjBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46yOMAorPFUzQjYwPiA8VTNCNjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjraAwCis8VTNCQzA+IDxVM0JDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OvgDAKKzxVM0Q4RD4gPFUzRDhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47aNMAorPFUzRkM1PiA8VTNGQzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjv4UwCis8VTQyNzM+IDxVNDI3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SJszAKKzxVNDVGRT4gPFU0NUZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Je+MAorPFU0NjA2PiA8VTQ2MDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmIYwCis8VTQ2OUE+IDxVNDY5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SamjAKKzxVNDcyMj4gPFU0NzIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JyiMAorPFU0OEJFPiA8VTQ4QkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkor4wCis8VTQ5NkE+IDxVNDk2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SlqjAKKzxVNDlDQj4gPFU0OUNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KeLMAorPFU0OUVFPiA8VTQ5RUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkp64wCis8VTU5RkE+IDxVNTlGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WnujAKKzxVNUMxRj4gPFU1QzFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bCfMAorPFU1QzIwPiA8VTVDMjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsKAwCis8VTVEMDQ+IDxVNUQwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W0hDAKKzxVNURBRT4gPFU1REFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bauMAorPFU1RTcwPiA8VTVFNzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlubAwCis8VTY0MUY+IDxVNjQxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aQnzAKKzxVNjUwNz4gPFU2NTA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pSHMAorPFU2NjNFPiA8VTY2M0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmL4yMTc0NQorPFU2QUY2PiA8VTZBRjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmq7YwCis8VTZCRTg+IDxVNkJFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+avqDAKKzxVNzBDRD4gPFU3MENEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54ONMAorPFU3MUY5PiA8VTcxRjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnh7kxNQorPFU3MzAzPiA8VTczMDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjIM3Cis8VTczNkI+IDxVNzM2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eNqzAKKzxVNzM2RT4gPFU3MzZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj542uMAorPFU3MzgxPiA8VTczODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjoEwCis8VTc2NjM+IDxVNzY2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eZozQwCis8VTc2NkM+IDxVNzY2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eZrDAKKzxVNzk5Mj4gPFU3OTkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56aSMAorPFU3QjQ1PiA8VTdCNDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrYUxCis8VTdCQjI+IDxVN0JCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eusjAKKzxVODVEMz4gPFU4NUQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JeTNzQKKzxVODZBQz4gPFU4NkFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JqsMTYKKzxVODcwNj4gPFU4NzA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JyGMAorPFU4RDdCPiA8VThEN0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotbswCis8VThERTM+IDxVOERFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i3ozUKKzxVOTM0Qz4gPFU5MzRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y2MMAorPFU5NjY5PiA8VTk2Njk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmak4MDkyCis8VTk2N0E+IDxVOTY3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mZujAKKzxVOTZBQT4gPFU5NkFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZqqMTI2Cis8VTk3QzU+IDxVOTdDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mfhTAKKzxVOTg1NT4gPFU5ODU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aGVMAorPFU5ODZGPiA8VTk4NkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoa8xNzkKKzxVOUYzOD4gPFU5RjM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6by4MAorPFU5Rjc0PiA8VTlGNzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvbQwCis8VTM1MzU+IDxVMzUzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OUtTAKKzxVMzg3RT4gPFUzODdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46G+MAorPFUzOTkzPiA8VTM5OTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjppMwCis8VTNBNDg+IDxVM0E0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OpiDAKKzxVM0E4Nz4gPFUzQTg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46qHMAorPFUzQjE3PiA8VTNCMTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrJcwCis8VTNFOEM+IDxVM0U4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O6jDAKKzxVNDAwRj4gPFU0MDBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ICPMAorPFU0MDQyPiA8VTQwNDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgYIwCis8VTQwRjE+IDxVNDBGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SDsTAKKzxVNDBGOD4gPFU0MEY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IO4MAorPFU0MjZGPiA8VTQyNkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkia8wCis8VTQzRjk+IDxVNDNGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SPuTAKKzxVNDc4MT4gPFU0NzgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J6BMAorPFU0OTNDPiA8VTQ5M0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpLwwCis8VTQ5REY+IDxVNDlERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SnnzAKKzxVNEExOD4gPFU0QTE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KiYMAorPFU0QTM3PiA8VTRBMzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqLcwCis8VTRDNjQ+IDxVNEM2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SxpDAKKzxVNEQ0Nz4gPFU0RDQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LWHMAorPFU0RDlGPiA8VTREOUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktp8wCis8VTRGMjM+IDxVNEYyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S8ozIKKzxVNEZEND4gPFU0RkQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L+UMAorPFU1MEU5PiA8VTUwRTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlg6kwCis8VTUwRjQ+IDxVNTBGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WDtDAKKzxVNTNCRj4gPFU1M0JGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y6/NjA4NAorPFU1NEVGPiA8VTU0RUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlk68wCis8VTU3Qjc+IDxVNTdCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WetzAKKzxVNTlFRD4gPFU1OUVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aetMAorPFU1QTBBPiA8VTVBMEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqIowCis8VTVBMjg+IDxVNUEyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WoqDEKKzxVNUJBQT4gPFU1QkFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a6qMTc3MworPFU1Qzk4PiA8VTVDOTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlspgyCis8VTVDRjQ+IDxVNUNGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WztDAKKzxVNjFCMj4gPFU2MUIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oayMTUKKzxVNjQ4QT4gPFU2NDhBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pKKMAorPFU2NjVCPiA8VTY2NUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmZswCis8VTZBNEM+IDxVNkE0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+apjDAKKzxVNkQ4MD4gPFU2RDgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5raAMAorPFU3MDE3PiA8VTcwMTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngJcwCis8VTczMkU+IDxVNzMyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eMrjQ3MjcKKzxVNzM3Qj4gPFU3MzdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5427MzIKKzxVNzNCMD4gPFU3M0IwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj546wMTA3MTYwCis8VTczRkU+IDxVNzNGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ePvjEwODEKKzxVNzcwQz4gPFU3NzBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55yMMAorPFU3NzREPiA8VTc3NEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnY0wCis8VTdDQUY+IDxVN0NBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eyrzAKKzxVN0Q2ND4gPFU3RDY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57WkNworPFU3REFCPiA8VTdEQUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntqswCis8VTdEREE+IDxVN0REQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3mjE5NAorPFU3RTIzPiA8VTdFMjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuKM1MQorPFU3RUJGPiA8VTdFQkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnur8yMTQ5OAorPFU3RjEwPiA8VTdGMTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvJAwCis8VTdGQTE+IDxVN0ZBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e+oTIxOTcKKzxVN0ZBOD4gPFU3RkE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj576oNQorPFU4MTdBPiA8VTgxN0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohboyNDcKKzxVODFEND4gPFU4MUQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IeUMAorPFU4MUZEPiA8VTgxRkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoh70wCis8VTgzQTc+IDxVODNBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iOpzAKKzxVOEFBMj4gPFU4QUEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KqiMAorPFU4QzRGPiA8VThDNEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosY8wCis8VThFRDA+IDxVOEVEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i7kDAKKzxVOEY1RT4gPFU4RjVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L2eMAorPFU5MkU3PiA8VTkyRTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpi6cwCis8VTkzMEU+IDxVOTMwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mMjjAKKzxVOTY1MD4gPFU5NjUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZmQMTE2NTYKKzxVOTY2NT4gPFU5NjY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZmlMAorPFU5Njc3PiA8VTk2Nzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmbc0NzExCis8VTk3MzA+IDxVOTczMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mcsDU1Cis8VTk5MjE+IDxVOTkyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mkoTAKKzxVOTk4NT4gPFU5OTg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aaFMzk1Cis8VTlFQjI+IDxVOUVCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6sjAKKzxVNEU2MT4gPFU0RTYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LmhOTM5OAorPFU1M0EyPiA8VTUzQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljqIxOTk2Cis8VTU1NEM+IDxVNTU0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WVjDAKKzxVNUVDMj4gPFU1RUMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5buCNgorPFU1RkMwPiA8VTVGQzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv4AwCis8VTZCMDA+IDxVNkIwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+asgDAKKzxVNkU1OD4gPFU2RTU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rmYMTA0NAorPFU3NEQ2PiA8VTc0RDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnk5YwCis8VTc2Rjg+IDxVNzZGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ebuDU5MzY4Cis8VTdCQjE+IDxVN0JCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eusTUxMjUKKzxVN0RENz4gPFU3REQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57eXNQorPFU3RTk1PiA8VTdFOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnupUwCis8VTdGMDM+IDxVN0YwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e8gzkKKzxVODI5Nz4gPFU4Mjk3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IqXNzgKKzxVODQ1OT4gPFU4NDU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JGZMQorPFU4NThDPiA8VTg1OEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolowwCis8VTg5NDQ+IDxVODk0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ilhDMwNAorPFU5MEY3PiA8VTkwRjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg7cwCis8VTkxMDk+IDxVOTEwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mEiTk4Cis8VTkxMEE+IDxVOTEwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mEijAKKzxVOTExNT4gPFU5MTE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YSVMAorPFU5NDcyPiA8VTk0NzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkbI0Cis8VTk1NzY+IDxVOTU3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mVtjYxNgorPFU5OTk5PiA8VTk5OTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpppkxOTI5NgorPFU5QTY0PiA8VTlBNjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqaQwCis8VTlBQTc+IDxVOUFBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mqpzEyCis8VTlDNUM+IDxVOUM1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxnDAKKzxVOUU5OD4gPFU5RTk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bqYMAorPFUzN0M0PiA8VTM3QzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjn4QwCis8VTQ1MTc+IDxVNDUxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SUlzAKKzxVNDczNj4gPFU0NzM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Jy2MAorPFU0RjZEPiA8VTRGNkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkva0wCis8VTVFQTA+IDxVNUVBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W6oDkKKzxVNjgxOT4gPFU2ODE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qCZMAorPFU3OTY1PiA8VTc5NjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpaUyODg5Cis8VTdENzQ+IDxVN0Q3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e1tDAKKzxVN0Y4Rj4gPFU3RjhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj576PMAorPFU3RkQ0PiA8VTdGRDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnv5QxNjc2Cis8VThBNzM+IDxVOEE3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ipszUzCis8VThCRTY+IDxVOEJFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ivpjQyMDMKKzxVOERFRD4gPFU4REVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LetMAorPFVGQTFBPiA8VUZBMUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPvqJowCis8VTM1RkQ+IDxVMzVGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OXvTAKKzxVNDI5MT4gPFU0MjkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IqRMAorPFU0NUFFPiA8VTQ1QUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklq4wCis8VTRFQUI+IDxVNEVBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6qzUxMzgKKzxVNTRDRD4gPFU1NENEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZONMjA1MjYKKzxVNUQ5MT4gPFU1RDkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5baRMAorPFU2MEYzPiA8VTYwRjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmg7MxNTMyNjUKKzxVNjY1MT4gPFU2NjUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pmRMAorPFU4NjgzPiA8VTg2ODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomoMwCis8VTk3RkY+IDxVOTdGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mfvzE3MworPFU5OEU4PiA8VTk4RTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpo6gzNQorPFU5OTA5PiA8VTk5MDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppIkwCis8VTk5NTc+IDxVOTk1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mllzAKKzxVOTk1Rj4gPFU5OTVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aWfMAorPFU5OTc3PiA8VTk5Nzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppbcxOTgKKzxVOUI5RD4gPFU5QjlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a6dMAorPFU5QkQ3PiA8VTlCRDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpr5cwCis8VTlDNzY+IDxVOUM3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxtjAKKzxVOUM5RT4gPFU5QzlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bKeMTAKKzxVMzdERj4gPFUzN0RGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45+fMAorPFU0NDFGPiA8VTQ0MUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkJ8wCis8VTQ4QkQ+IDxVNDhCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SivTAKKzxVNTBDRj4gPFU1MENGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YOPNTI2MzEKKzxVNTJFOD4gPFU1MkU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YuoMAorPFU1NDExPiA8VTU0MTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkJE2MTg0MAorPFU1NkFFPiA8VTU2QUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmq41Cis8VTYwNjY+IDxVNjA2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBpjAKKzxVNjZDRj4gPFU2NkNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5puPMAorPFU2QTYxPiA8VTZBNjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqaE1OTYKKzxVNkY1Mj4gPFU2RjUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r2SMAorPFU3M0U2PiA8VTczRTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnj6YwCis8VTg0MkI+IDxVODQyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iQqzAKKzxVODdEMz4gPFU4N0QzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J+TMAorPFU4ODAxPiA8VTg4MDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooIEwCis8VTg5NTA+IDxVODk1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ilkDAKKzxVOEM2MT4gPFU4QzYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LGhNDgzODgKKzxVOTQwQz4gPFU5NDBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZCMMAorPFU5NUMwPiA8VTk1QzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl4AwCis8VTk1QzI+IDxVOTVDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mXgjAKKzxVOTgwNT4gPFU5ODA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aCFMzkKKzxVOTg3OT4gPFU5ODc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aG5MTIwNDcKKzxVOUM0Qz4gPFU5QzRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bGMMAorPFU1MjRBPiA8VTUyNEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliYoxMzgzCis8VTU0N0E+IDxVNTQ3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRujAKKzxVNTREMz4gPFU1NEQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZOTMTQKKzxVNTRFRT4gPFU1NEVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZOuMzA4Cis8VTU1NEI+IDxVNTU0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WVizAKKzxVNTYwQj4gPFU1NjBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZiLMAorPFU1NjEwPiA8VTU2MTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmJAwCis8VTU2MzU+IDxVNTYzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WYtTAKKzxVNTZBMz4gPFU1NkEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZqjMTA5MgorPFU1NkJCPiA8VTU2QkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmrswCis8VTVBNEI+IDxVNUE0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WpizAKKzxVNUJBRj4gPFU1QkFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a6vMAorPFU1QkI1PiA8VTVCQjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrrUxMDU4Cis8VTVGNDc+IDxVNUY0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W9hzAKKzxVNjFBMj4gPFU2MUEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oaiMAorPFU2NEE4PiA8VTY0QTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkqgwCis8VTY3QUQ+IDxVNjdBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aerTExOQorPFU2N0I1PiA8VTY3QjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnrU2Cis8VTY4OUY+IDxVNjg5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ainzAKKzxVNkFGOT4gPFU2QUY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qu5MAorPFU2QjRBPiA8VTZCNEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrYowCis8VTZCQ0E+IDxVNkJDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+avijAKKzxVNkQyOD4gPFU2RDI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rSoMAorPFU2RDg4PiA8VTZEODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtogyMTc1MAorPFU2RDhEPiA8VTZEOEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmto0wCis8VTZGNDc+IDxVNkY0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a9hzEwNjgKKzxVNzAxRj4gPFU3MDFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54CfMworPFU3MDcxPiA8VTcwNzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngbEwCis8VTcwNzI+IDxVNzA3Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eBsjAKKzxVNzBDQj4gPFU3MENCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54OLMAorPFU3MTA3PiA8VTcxMDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhIcwCis8VTczNjI+IDxVNzM2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eNojAKKzxVNzVEQT4gPFU3NURBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55eaMAorPFU3NURGPiA8VTc1REY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnl58wCis8VTc4NUQ+IDxVNzg1RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ehnTMxMworPFU3ODYzPiA8VTc4NjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoaMwCis8VTdBNTg+IDxVN0E1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+epmDAKKzxVN0E5OT4gPFU3QTk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56qZMAorPFU3QkFCPiA8VTdCQUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrqs5MjEKKzxVN0MxOD4gPFU3QzE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57CYMAorPFU3QzJCPiA8VTdDMkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsKswCis8VTdEODM+IDxVN0Q4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e2gzIKKzxVN0VFMT4gPFU3RUUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57uhMTE5Cis8VTgxQUU+IDxVODFBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iGrjAKKzxVODQyNz4gPFU4NDI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JCnMjU5MworPFU4NDM3PiA8VTg0Mzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokLcwCis8VTg1NkQ+IDxVODU2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iVrTQKKzxVODVDMz4gPFU4NUMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JeDMAorPFU4NjQ4PiA8VTg2NDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomYgwCis8VTg2NTM+IDxVODY1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iZkzEKKzxVODdDRj4gPFU4N0NGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J+PMAorPFU4N0YwPiA8VTg3RjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPon7AwCis8VTg4Mjg+IDxVODgyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+igqDAKKzxVOEUwMz4gPFU4RTAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LiDMAorPFU5MDBEPiA8VTkwMEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgI01NDEKKzxVOTJCNz4gPFU5MkI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Yq3OAorPFU5NTAwPiA8VTk1MDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplIAzNDg0Cis8VTk3MDQ+IDxVOTcwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mchDMwNAorPFU5ODY0PiA8VTk4NjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoaQwCis8VTlBNEQ+IDxVOUE0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mpjTEKKzxVOUE4MT4gPFU5QTgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aqBNjIKKzxVOUFDNz4gPFU5QUM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6auHMAorPFU5QjQ4PiA8VTlCNDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprYg2Cis8VTlEMUU+IDxVOUQxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m0njAKKzxVOUUyRT4gPFU5RTJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6biuNgorPFUzNDdFPiA8VTM0N0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkb4wCis8VTM2QTM+IDxVMzZBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OaozAKKzxVM0IzNT4gPFUzQjM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46y1MAorPFU0NDlEPiA8VTQ0OUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkp0wCis8VTZEQzY+IDxVNkRDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3hjMyNworPFU3QjA1PiA8VTdCMDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrIUwCis8VThBQjU+IDxVOEFCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iqtTAKKzxVOTBFOT4gPFU5MEU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YOpMAorPFU0NDk1PiA8VTQ0OTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkpUwCis8VTQ5NzU+IDxVNDk3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SltTAKKzxVNUMwRj4gPFU1QzBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bCPMTU4ODI3Cis8VTY2NTM+IDxVNjY1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aZkzkxMzkKKzxVNjY4MT4gPFU2NjgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pqBMAorPFU2NkM5PiA8VTY2Qzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmm4k2NgorPFU3NkEyPiA8VTc2QTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmqIwCis8VTdCNzE+IDxVN0I3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+etsTEwMQorPFU3QjdGPiA8VTdCN0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrb8wCis8VTdCRTA+IDxVN0JFMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+evoDIKKzxVMzUwNT4gPFUzNTA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45SFMAorPFUzNURCPiA8VTM1REI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjl5swCis8VTM5MEE+IDxVMzkwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OkijAKKzxVM0U3Mj4gPFUzRTcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47myMAorPFU0MkE1PiA8VTQyQTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiqUwCis8VTQ1Njc+IDxVNDU2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SVpzAKKzxVNEZGMj4gPFU0RkYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L+yMAorPFU1MDlBPiA8VTUwOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgpoyCis8VTUyQjk+IDxVNTJCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WKuTAKKzxVNTRCMj4gPFU1NEIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZKyMAorPFU1NTc4PiA8VTU1Nzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllbgxMDUwCis8VTU2Mjg+IDxVNTYyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WYqDIKKzxVNTYyRj4gPFU1NjJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZivNAorPFU1QjVEPiA8VTVCNUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrZ0xOTgwCis8VTYwNTQ+IDxVNjA1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBlDAKKzxVNjU0OD4gPFU2NTQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pWIOTYwMworPFU2NTY5PiA8VTY1Njk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlakwCis8VTY1ODU+IDxVNjU4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWhTAKKzxVNjgyMT4gPFU2ODIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qChMTIwMDAKKzxVNkI1Nz4gPFU2QjU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q2XMAorPFU2RUU3PiA8VTZFRTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmu6cwCis8VTcxQkQ+IDxVNzFCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eGvTAKKzxVN0IxMT4gPFU3QjExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56yRNjY3ODEKKzxVODA5Nj4gPFU4MDk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IKWMjQwNQorPFU4QTY4PiA8VThBNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqagwCis8VThBOUY+IDxVOEE5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iqnzAKKzxVOEUwRD4gPFU4RTBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LiNMAorPFU5N0E5PiA8VTk3QTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnqkwCis8VTRFOUI+IDxVNEU5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6mzEwNTc1NAorPFU1NUNCPiA8VTU1Q0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPll4swCis8VTY5NTQ+IDxVNjk1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+allDEzMgorPFU2QjQ3PiA8VTZCNDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrYcyNTM5Cis8VTg3NEU+IDxVODc0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+idjjE2NAorPFU4ODBEPiA8VTg4MEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooI0wCis8VTM1QkY+IDxVMzVCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OWvzAKKzxVMzY1RD4gPFUzNjVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45mdMAorPFUzOTVGPiA8VTM5NUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpZ8wCis8VTNBMTk+IDxVM0ExOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OomTAKKzxVM0E0OT4gPFUzQTQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46mJMAorPFUzQTY2PiA8VTNBNjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqaYwCis8VTNBNkE+IDxVM0E2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OpqjAKKzxVM0I2OD4gPFUzQjY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj462oMAorPFU0NTExPiA8VTQ1MTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklJEwCis8VTQ1NzU+IDxVNDU3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SVtTAKKzxVNDY0RT4gPFU0NjRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JmOMAorPFU0ODYxPiA8VTQ4NjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoaEwCis8VTRCNEU+IDxVNEI0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+StjjAKKzxVNTA1NT4gPFU1MDU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YGVMjcyCis8VTUyQTY+IDxVNTJBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WKpjAKKzxVNTJGMD4gPFU1MkYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YuwMTIKKzxVNTM0Rj4gPFU1MzRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y2POTc1MworPFU1MzU0PiA8VTUzNTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljZQ1MworPFU1N0E1PiA8VTU3QTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnqUwCis8VTU5NEE+IDxVNTk0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WlijAKKzxVNjA0QT4gPFU2MDRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oGKMAorPFU2MTM2PiA8VTYxMzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhLYwCis8VTYxNDA+IDxVNjE0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aFgDAKKzxVNjJGOT4gPFU2MkY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ou5MAorPFU2MzFGPiA8VTYzMUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjJ81MjcKKzxVNjQxQT4gPFU2NDFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pCaMAorPFU2NDNBPiA8VTY0M0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkLoxMzIwCis8VTY0Qjc+IDxVNjRCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aStzYzCis8VTY0RDU+IDxVNjRENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aTlTAKKzxVNjUxQz4gPFU2NTFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pScMTEKKzxVNjU5Qz4gPFU2NTlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pacMzQwNworPFU2NUVBPiA8VTY1RUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPml6owCis8VTcxODE+IDxVNzE4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eGgTAKKzxVNzFGMj4gPFU3MUYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54eyMAorPFU3NDRFPiA8VTc0NEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkY4wCis8VTdDN0E+IDxVN0M3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+exujAKKzxVN0Q4QT4gPFU3RDhBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57aKMAorPFU3RTg4PiA8VTdFODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuogwCis8VTdGMkM+IDxVN0YyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e8rDMKKzxVN0ZEMz4gPFU3RkQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57+TMAorPFU4MEMxPiA8VTgwQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPog4EyNzU1Cis8VTgxMDU+IDxVODEwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iEhTE5Cis8VTgxMDc+IDxVODEwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iEhzAKKzxVODEwQj4gPFU4MTBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ISLMAorPFU4MTI1PiA8VTgxMjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohKUwCis8VTgxOEU+IDxVODE4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iGjjAKKzxVODc2Mj4gPFU4NzYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J2iMAorPFU4ODdBPiA8VTg4N0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoobowCis8VTg5NkQ+IDxVODk2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ilrTAKKzxVOEFFNz4gPFU4QUU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KunNgorPFU4QzEwPiA8VThDMTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosJAxMTE4Cis8VTkwQUE+IDxVOTBBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mCqjE3OTYKKzxVOTc4Qj4gPFU5NzhCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z6LNTUxNgorPFU5N0I1PiA8VTk3QjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnrUwCis8VTlGQTQ+IDxVOUZBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m+pDAKKzxVMzU1MD4gPFUzNTUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45WQMAorPFUzNzREPiA8VTM3NEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnY0wCis8VTQ5NzE+IDxVNDk3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SlsTAKKzxVNDk3RT4gPFU0OTdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KW+MAorPFU1MTk5PiA8VTUxOTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhpkzOTU1MgorPFU1MUE5PiA8VTUxQTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhqkwCis8VTVCRUI+IDxVNUJFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WvqzM3MgorPFU4NURCPiA8VTg1REI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPol5swCis8VTg4MEY+IDxVODgwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+igjzAKKzxVMzRBMD4gPFUzNEEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45KgMAorPFUzNEQ0PiA8VTM0RDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjk5QwCis8VTM1MEU+IDxVMzUwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OUjjAKKzxVMzU5MT4gPFUzNTkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45aRMAorPFUzNjcwPiA8VTM2NzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmbAwCis8VTM3OTU+IDxVMzc5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OelTAKKzxVMzhFRj4gPFUzOEVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46OvMAorPFUzOEYwPiA8VTM4RjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjo7AwCis8VTM5QUE+IDxVMzlBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OmqjAKKzxVM0ExRD4gPFUzQTFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46idMAorPFUzQzE0PiA8VTNDMTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsJQwCis8VTNDMjE+IDxVM0MyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OwoTAKKzxVM0NFNj4gPFUzQ0U2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47OmMAorPFUzQ0ZGPiA8VTNDRkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjs78wCis8VTNEMkM+IDxVM0QyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O0rDAKKzxVM0QyRT4gPFUzRDJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47SuMAorPFUzRDNEPiA8VTNEM0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtL0wCis8VTNFMDk+IDxVM0UwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O4iTAKKzxVM0Y0QT4gPFUzRjRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj472KMAorPFU0MjRGPiA8VTQyNEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiY8wCis8VTQyNjM+IDxVNDI2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SJozAKKzxVNDI5RD4gPFU0MjlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IqdMAorPFU0NTQ4PiA8VTQ1NDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklYgwCis8VTQ2NEE+IDxVNDY0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SZijAKKzxVNDY1RD4gPFU0NjVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JmdMAorPFU0NkIzPiA8VTQ2QjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmrMwCis8VTQ2Qjg+IDxVNDZCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SauDAKKzxVNDhBMT4gPFU0OEExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KKhMAorPFU0OThGPiA8VTQ5OEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpo8wCis8VTQ5OTE+IDxVNDk5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SmkTAKKzxVNEE2Nz4gPFU0QTY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KmnMAorPFU0QzkyPiA8VTRDOTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkspIwCis8VTRENjY+IDxVNEQ2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S1pjAKKzxVNEVCNT4gPFU0RUI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Lq1NDAyCis8VTRGMzM+IDxVNEYzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S8szAKKzxVNTA3MD4gPFU1MDcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YGwMAorPFU1MzY4PiA8VTUzNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljagwCis8VTUzNzg+IDxVNTM3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WNuDExMzMKKzxVNTg2RT4gPFU1ODZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aGuMAorPFU1OThFPiA8VTU5OEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpo4wCis8VTVBMEU+IDxVNUEwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WojjAKKzxVNUE5Rj4gPFU1QTlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aqfMAorPFU1QzUxPiA8VTVDNTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsZExMjU0Cis8VTVDNjc+IDxVNUM2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WxpzAKKzxVNURCMD4gPFU1REIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bawMAorPFU1RUU4PiA8VTVFRTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlu6gzNgorPFU1RkEyPiA8VTVGQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvqIwCis8VTYxQzg+IDxVNjFDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aHiDU4OAorPFU2NUJBPiA8VTY1QkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlrowCis8VTY2QUM+IDxVNjZBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aarDAKKzxVNjhCMD4gPFU2OEIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qKwMTU5NQorPFU2OThEPiA8VTY5OEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpo0yCis8VTY5QUQ+IDxVNjlBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+amrTE3NgorPFU2Q0M0PiA8VTZDQzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPms4QxODQ0Cis8VTZDRkI+IDxVNkNGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+azuzYyNAorPFU2RDI5PiA8VTZEMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtKkxNQorPFU2RTJCPiA8VTZFMkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuKswCis8VTZGQTU+IDxVNkZBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a+pTEKKzxVNzAwOT4gPFU3MDA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54CJNAorPFU3MDIzPiA8VTcwMjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngKMyMworPFU3MDdBPiA8VTcwN0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngbowCis8VTcxMEU+IDxVNzEwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eEjjAKKzxVNzFFRT4gPFU3MUVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54euNDgKKzxVNzIxNT4gPFU3MjE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54iVMAorPFU3MzZDPiA8VTczNkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjawyCis8VTc1QjY+IDxVNzVCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eWtjAKKzxVNzk0ND4gPFU3OTQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56WEMAorPFU3OUJDPiA8VTc5QkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnprwwCis8VTdDQ0Y+IDxVN0NDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ezjzAKKzxVN0QzMj4gPFU3RDMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57SyMAorPFU3RDRGPiA8VTdENEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntY8wCis8VTdENkM+IDxVN0Q2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e1rDUKKzxVN0RFND4gPFU3REU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57ekMAorPFU3RUMxPiA8VTdFQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnu4EyCis8VTdGMzc+IDxVN0YzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e8tzEKKzxVODVBMj4gPFU4NUEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JaiMAorPFU4NUE0PiA8VTg1QTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolqQyMAorPFU4N0Y5PiA8VTg3Rjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPon7k2NTEKKzxVODg3OD4gPFU4ODc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KG4MAorPFU4OTNCPiA8VTg5M0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopLs0Cis8VThCMUQ+IDxVOEIxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+isnTEzMgorPFU4QzIyPiA8VThDMjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosKIxNDk0OAorPFU4RTlFPiA8VThFOUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoup42Cis8VThFQTA+IDxVOEVBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6oDAKKzxVOTA4Mj4gPFU5MDgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKCMzQzCis8VTk3QTI+IDxVOTdBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+meojAKKzxVOTdGMD4gPFU5N0YwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z+wMAorPFU5OUY0PiA8VTk5RjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpp7QwCis8VTlGNTg+IDxVOUY1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m9mDAKKzxVOUY2NT4gPFU5RjY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b2lMAorPFU0RkZEPiA8VTRGRkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkv70wCis8VTUxNUY+IDxVNTE1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WFnzAKKzxVNTY3Nz4gPFU1Njc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Zm3MAorPFU1OUExPiA8VTU5QTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpqEwCis8VTVCMUM+IDxVNUIxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WsnDAKKzxVNUVERT4gPFU1RURFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bueMAorPFU1RkMzPiA8VTVGQzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv4MxMzcxNTkKKzxVNUZDND4gPFU1RkM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b+EMTMKKzxVNUZGQj4gPFU1RkZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b+7NDAKKzxVNjBERT4gPFU2MERFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oOeMAorPFU2NUIwPiA8VTY1QjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlrA2MzQyNAorPFU2NjE1PiA8VTY2MTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmJUxMTkKKzxVNkIyMz4gPFU2QjIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qyjNDg0OAorPFU2QjQ2PiA8VTZCNDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrYYyOAorPFU3MDk4PiA8VTcwOTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngpgwCis8VTc2RkE+IDxVNzZGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ebujAKKzxVODJBRj4gPFU4MkFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IqvNTg4Cis8VTg1QUE+IDxVODVBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iWqjkxMgorPFU4QTIyPiA8VThBMjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqKIzCis8VThGOUI+IDxVOEY5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i+mzQzMTEKKzxVOTBBND4gPFU5MEE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKkMAorPFU5MjBBPiA8VTkyMEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiIowCis8VTkyQzU+IDxVOTJDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mLhTAKKzxVOTQ2Qj4gPFU5NDZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZGrNzcKKzxVOTUwQz4gPFU5NTBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZSMNTEKKzxVOTlBOD4gPFU5OUE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aaoMTU0MworPFUzNkFGPiA8VTM2QUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmq8wCis8VTRDM0M+IDxVNEMzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SwvDAKKzxVNUMwQj4gPFU1QzBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bCLMTQyCis8VTY1MzM+IDxVNjUzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aUszAKKzxVNjc3QT4gPFU2NzdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p26MAorPFU2ODZBPiA8VTY4NkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoaowCis8VTZBMzM+IDxVNkEzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aoszAKKzxVODk1MT4gPFU4OTUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KWRMAorPFU5MTI5PiA8VTkxMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphKkwCis8VTRGMDg+IDxVNEYwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S8iDIKKzxVMzQzMD4gPFUzNDMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45CwMAorPFUzNkRCPiA8VTM2REI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjm5swCis8VTNCNDQ+IDxVM0I0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OthDAKKzxVNDQ5Nj4gPFU0NDk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JKWMAorPFU0NkIxPiA8VTQ2QjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmrEwCis8VTQ2RTg+IDxVNDZFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SbqDAKKzxVNDcxNz4gPFU0NzE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JyXMAorPFU0RjI5PiA8VTRGMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvKkyCis8VTRGRTE+IDxVNEZFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S/oTE2NzcxNworPFU1MzQyPiA8VTUzNDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljYIwCis8VTU2REY+IDxVNTZERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WbnzcKKzxVNUI1RT4gPFU1QjVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a2eMAorPFU3MTJFPiA8VTcxMkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhK4wCis8VTcxNjE+IDxVNzE2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eFoTAKKzxVODEyQT4gPFU4MTJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ISqMAorPFU4MUI3PiA8VTgxQjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohrcwCis8VTgyMEI+IDxVODIwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iIizcKKzxVODg0NT4gPFU4ODQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KGFNDQ5Cis8VThBMkI+IDxVOEEyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ioqzAKKzxVOTFDMT4gPFU5MUMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YeBMworPFU5ODU2PiA8VTk4NTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoZYwCis8VTk5Qjg+IDxVOTlCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mmuDAKKzxVNTE3ND4gPFU1MTc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YW0MTIwNjQKKzxVNTdCNj4gPFU1N0I2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z62MAorPFU2MEZBPiA8VTYwRkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmg7o0MDcKKzxVNjYxRj4gPFU2NjFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pifMzIxNDAKKzxVNjZEMD4gPFU2NkQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5puQMAorPFU3MTRCPiA8VTcxNEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhYswCis8VTczMjk+IDxVNzMyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eMqTQ2NgorPFU3NDQ2PiA8VTc0NDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkYYwCis8VTc2QTg+IDxVNzZBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eaqDAKKzxVN0JDMj4gPFU3QkMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56+CMAorPFU4MTY1PiA8VTgxNjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohaU3ODYKKzxVODIwOD4gPFU4MjA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IiIMTMyCis8VTg2RjU+IDxVODZGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ibtTAKKzxVODlFQT4gPFU4OUVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KeqMAorPFU4OUYyPiA8VTg5RjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPop7IwCis8VTkzNUY+IDxVOTM1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mNnzAKKzxVOTlBQj4gPFU5OUFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aarMAorPFU5QTAyPiA8VTlBMDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqIIxCis8VTlBOEQ+IDxVOUE4RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mqjTAKKzxVOUI4Rj4gPFU5QjhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a6PMAorPFU5QkY5PiA8VTlCRjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpr7kwCis8VTM0Mjk+IDxVMzQyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OQqTAKKzxVMzRERD4gPFUzNEREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45OdMAorPFUzOERDPiA8VTM4REM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjo5wwCis8VTNGMUI+IDxVM0YxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O8mzAKKzxVNDhDNj4gPFU0OEM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KOGMAorPFU0OTJGPiA8VTQ5MkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpK8wCis8VTRGODA+IDxVNEY4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+gDAKKzxVNTIxMT4gPFU1MjExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YiRNTI3NworPFU1NzUzPiA8VTU3NTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnZMwCis8VTU3OEI+IDxVNTc4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WeizEzNDU2Cis8VTVGNjI+IDxVNUY2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W9ojI3Nzc0Cis8VTZEMTA+IDxVNkQxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a0kDAKKzxVNkVDRT4gPFU2RUNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ruOMAorPFU2RkRBPiA8VTZGREE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv5owCis8VTZGRjQ+IDxVNkZGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a/tDAKKzxVNzBDNj4gPFU3MEM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54OGMAorPFU3ODRFPiA8VTc4NEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoY4yCis8VTc4NEY+IDxVNzg0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ehjzAKKzxVODBGQj4gPFU4MEZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IO7MAorPFU4MzY1PiA8VTgzNjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojaUxMAorPFU5MEEyPiA8VTkwQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgqI2MTEKKzxVOTBDOT4gPFU5MEM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YOJMAorPFU5Mjc2PiA8VTkyNzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpibYwCis8VTkyREU+IDxVOTJERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mLnjAKKzxVOTRDRj4gPFU5NENGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZOPMAorPFU5NjU4PiA8VTk2NTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmZgwCis8VTM3NkQ+IDxVMzc2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OdrTAKKzxVM0ExOD4gPFUzQTE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46iYMAorPFUzQjkwPiA8VTNCOTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrpAwCis8VTRDRDk+IDxVNENEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SzmTAKKzxVNjRFND4gPFU2NEU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pOkNjUKKzxVNkUzQj4gPFU2RTNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ri7MAorPFU3NzcyPiA8VTc3NzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnbIwCis8VTkxOTI+IDxVOTE5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mGkjExMzQ4Cis8VTM0RDE+IDxVMzREMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OTkTAKKzxVM0YyQz4gPFUzRjJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47ysMAorPFU0MDQ0PiA8VTQwNDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgYQwCis8VTQwOTQ+IDxVNDA5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SClDAKKzxVNDRGNz4gPFU0NEY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JO3MAorPFU0NkVEPiA8VTQ2RUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkm60wCis8VTRDMjI+IDxVNEMyMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SwojAKKzxVNTAxNj4gPFU1MDE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YCWOQorPFU1OUQzPiA8VTU5RDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlp5M2NzM5Cis8VTVBNUU+IDxVNUE1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WpnjAKKzxVNUIzOT4gPFU1QjM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ay5MAorPFU1RTc4PiA8VTVFNzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlubgxMzY0NworPFU2MDI3PiA8VTYwMjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgKc1MDMyMAorPFU2MEJCPiA8VTYwQkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgrszMzUKKzxVNjc0Rj4gPFU2NzRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p2PMTUwMQorPFU2REFDPiA8VTZEQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtqwwCis8VTdEQzg+IDxVN0RDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3iDAKKzxVODFENj4gPFU4MUQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IeWMAorPFU4MzQ3PiA8VTgzNDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojYcxMworPFU4Mzk1PiA8VTgzOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojpUwCis8VTUxNDQ+IDxVNTE0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WFhDk2MjAKKzxVNTE0Nz4gPFU1MTQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YWHNTAKKzxVNTFGNj4gPFU1MUY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ye2MzY5NworPFU1MzA4PiA8VTUzMDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljIg3MjgKKzxVNUZGNz4gPFU1RkY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b+3MAorPFU2MDVGPiA8VTYwNUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgZ8wCis8VTZDNzk+IDxVNkM3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+axuTY5MAorPFU2RDM2PiA8VTZEMzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtLY0Cis8VTgwRjc+IDxVODBGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iDtzAKKzxVODBGOD4gPFU4MEY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IO4NjIzNworPFU4MjhFPiA8VTgyOEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoio41Cis8VThBMjk+IDxVOEEyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ioqTAKKzxVOEE3RT4gPFU4QTdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Km+MQorPFU4QkJCPiA8VThCQkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorrswCis8VTQ5RkE+IDxVNDlGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SnujAKKzxVNzE4QT4gPFU3MThBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54aKMzY2MAorPFU4RDY4PiA8VThENjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotagwCis8VTk2QzQ+IDxVOTZDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mbhDY3NzgKKzxVNTkxMD4gPFU1OTEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aSQMAorPFU2NTdCPiA8VTY1N0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlbsxCis8VThBNTc+IDxVOEE1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iplzAKKzxVOEJDNz4gPFU4QkM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K+HMAorPFU0RjExPiA8VTRGMTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvJE3MDY3Cis8VTRGRTI+IDxVNEZFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S/ojAKKzxVNEZFRT4gPFU0RkVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L+uMTc5MDMKKzxVNTRCQj4gPFU1NEJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZK7MTE2Cis8VTVFQTU+IDxVNUVBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W6pTI2MAorPFU2QTA3PiA8VTZBMDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqIcwCis8VTZGNDM+IDxVNkY0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a9gzAKKzxVNzBDQz4gPFU3MENDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54OMMAorPFU3RjlFPiA8VTdGOUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvp4zNDIxCis8VTgxMjk+IDxVODEyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iEqTUKKzxVODFGOT4gPFU4MUY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ie5MAorPFU4MzIwPiA8VTgzMjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojKAwCis8VTg0REE+IDxVODREQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iTmjAKKzxVODRFOD4gPFU4NEU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JOoMAorPFU4Qzg1PiA8VThDODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosoU0Cis8VTkyOUQ+IDxVOTI5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mKnTAKKzxVOTM4MD4gPFU5MzgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y6AMAorPFU5M0M1PiA8VTkzQzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpj4UwCis8VTk5NDg+IDxVOTk0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mliDAKKzxVOTk5MD4gPFU5OTkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aaQMjIKKzxVOUFFND4gPFU5QUU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aukMAorPFU5QUY5PiA8VTlBRjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpq7kzCis8VTlENDI+IDxVOUQ0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m1gjAKKzxVOUUzQT4gPFU5RTNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bi6MQorPFUzQzU5PiA8VTNDNTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsZkwCis8VTY3M0Q+IDxVNjczRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+acvTc1NworPFU2RUVCPiA8VTZFRUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmu6swCis8VTdDRDQ+IDxVN0NEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ezlDAKKzxVN0Q4Nz4gPFU3RDg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57aHMAorPFUzNURDPiA8VTM1REM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjl5wwCis8VTNGOEI+IDxVM0Y4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O+izAKKzxVNTVDNT4gPFU1NUM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZeFOTg4Cis8VTVDQUI+IDxVNUNBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WyqzE0Cis8VTVDQzA+IDxVNUNDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WzgDAKKzxVNzNEQj4gPFU3M0RCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54+bMAorPFU3NDA3PiA8VTc0MDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkIcxMDAKKzxVNzQ5Mz4gPFU3NDkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55KTMQorPFU3OUMwPiA8VTc5QzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnp4A3NjM3Cis8VTdEODk+IDxVN0Q4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e2iTAKKzxVN0U0RD4gPFU3RTREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57mNMgorPFU3RTYxPiA8VTdFNjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuaEwCis8VTdFRTM+IDxVN0VFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e7ozE0MTQKKzxVODc5MT4gPFU4NzkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J6RMAorPFU4ODk2PiA8VTg4OTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoopY0MzUxCis8VTg5MEU+IDxVODkwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ikjjEKKzxVODkwRj4gPFU4OTBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KSPMAorPFU5MkI5PiA8VTkyQjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpirkxCis8VTkzRTU+IDxVOTNFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mPpTAKKzxVOTNGRD4gPFU5M0ZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+9MgorPFU5NTA4PiA8VTk1MDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplIg0NjIKKzxVOUY0NT4gPFU5RjQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b2FMAorPFU1MDIwPiA8VTUwMjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgKAwCis8VTUwNjY+IDxVNTA2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WBpjAKKzxVNTQwMT4gPFU1NDAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZCBMjAwNQorPFU1NDc0PiA8VTU0NzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkbQwCis8VTU2MTg+IDxVNTYxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WYmDkwOAorPFU1ODlGPiA8VTU4OUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlop80MzMKKzxVNUFBRD4gPFU1QUFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aqtMAorPFU1QjAzPiA8VTVCMDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrIMwCis8VTVCMkM+IDxVNUIyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WsrDAKKzxVNUU0MT4gPFU1RTQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bmBMAorPFU2NUY0PiA8VTY1RjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPml7QwCis8VTY5NDg+IDxVNjk0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aliDAKKzxVNkIyOD4gPFU2QjI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qyoMAorPFU2QjMwPiA8VTZCMzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrLAwCis8VTZCNTQ+IDxVNkI1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+atlDYKKzxVNkI4OD4gPFU2Qjg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q6IMAorPFU3NTlFPiA8VTc1OUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlp4wCis8VTc2RjE+IDxVNzZGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ebsTQKKzxVN0EzMD4gPFU3QTMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56iwMAorPFU3QzcyPiA8VTdDNzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsbIxMAorPFU3RTAzPiA8VTdFMDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuIMwCis8VTdFN0I+IDxVN0U3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5uzEKKzxVODBFNT4gPFU4MEU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IOlNDM0Cis8VTg1NjY+IDxVODU2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iVpjAKKzxVODY1Nz4gPFU4NjU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JmXMAorPFU4NjVBPiA8VTg2NUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomZoxMDAyNQorPFU4NjVCPiA8VTg2NUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomZs0NjAKKzxVODc1MT4gPFU4NzUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J2RMAorPFU4QTBGPiA8VThBMEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqI8zCis8VThCNDM+IDxVOEI0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+itgzAKKzxVOTQ1MD4gPFU5NDUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZGQMAorPFU5NzAwPiA8VTk3MDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnIAyMTM5MgorPFU5ODA4PiA8VTk4MDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoIgxMzgKKzxVOTgwQT4gPFU5ODBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aCKMAorPFU5ODdCPiA8VTk4N0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpobsxNTg1MgorPFU5ODdDPiA8VTk4N0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpobwzMQorPFU5QTQ5PiA8VTlBNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqYkwCis8VTlCMUE+IDxVOUIxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+msmjYKKzxVOUI0Nj4gPFU5QjQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a2GMjYKKzxVOUI1Nj4gPFU5QjU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a2WMAorPFU0MzcxPiA8VTQzNzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjbEwCis8VTVGOTA+IDxVNUY5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W+kDQxMzMKKzxVODRBMz4gPFU4NEEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JKjMAorPFUzNDU0PiA8VTM0NTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkZQwCis8VTM0NkY+IDxVMzQ2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ORrzAKKzxVMzdCMD4gPFUzN0IwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj456wMAorPFUzOTYwPiA8VTM5NjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpaAwCis8VTQxNjE+IDxVNDE2MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SFoTAKKzxVNDUxMz4gPFU0NTEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JSTMAorPFU1MTk0PiA8VTUxOTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhpQwCis8VTU1QTM+IDxVNTVBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WWozEKKzxVNTlDMT4gPFU1OUMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aeBMAorPFU2ODI5PiA8VTY4Mjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoKkxOTIKKzxVNkU1MT4gPFU2RTUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rmRMAorPFU3M0REPiA8VTczREQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnj50wCis8VTc2RTg+IDxVNzZFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ebqDAKKzxVN0NDOD4gPFU3Q0M4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57OIMAorPFU4QTYxPiA8VThBNjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqaEyCis8VThBREQ+IDxVOEFERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+irnTAKKzxVOEJCOD4gPFU4QkI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K64NDcwMDAKKzxVOEJFOT4gPFU4QkU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K+pMTI3Cis8VThDMUU+IDxVOEMxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwnjAKKzxVOTEyNj4gPFU5MTI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YSmMAorPFU5MTkxPiA8VTkxOTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphpExCis8VTM0Mjg+IDxVMzQyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OQqDAKKzxVMzU1Qj4gPFUzNTVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45WbMAorPFUzNTg1PiA8VTM1ODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjloUwCis8VTM1RjU+IDxVMzVGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OXtTAKKzxVMzYyNz4gPFUzNjI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45inMAorPFUzNjlDPiA8VTM2OUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmpwwCis8VTM3MDU+IDxVMzcwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OchTAKKzxVMzczRj4gPFUzNzNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45y/MAorPFUzNzhBPiA8VTM3OEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnoowCis8VTM5MjI+IDxVMzkyMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OkojAKKzxVMzlCRD4gPFUzOUJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46a9MAorPFUzQzMyPiA8VTNDMzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsLIwCis8VTNENzA+IDxVM0Q3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O1sDAKKzxVM0RFNj4gPFUzREU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47emMAorPFUzRUI3PiA8VTNFQjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjurcwCis8VTNGQTU+IDxVM0ZBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O+pTAKKzxVNDA4Nj4gPFU0MDg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IKGMAorPFU0MkY2PiA8VTQyRjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPki7YwCis8VTQ2MEY+IDxVNDYwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SYjzAKKzxVNDY1Mj4gPFU0NjUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JmSMAorPFU0NkQ5PiA8VTQ2RDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkm5kwCis8VTQ3MjE+IDxVNDcyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ScoTAKKzxVNDg5NT4gPFU0ODk1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KKVMAorPFU0OEYxPiA8VTQ4RjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPko7EwCis8VTQ4RjQ+IDxVNDhGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SjtDAKKzxVNDk5Nz4gPFU0OTk3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KaXMAorPFU0OUJEPiA8VTQ5QkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpr0wCis8VTRCMTQ+IDxVNEIxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SslDAKKzxVNENGMz4gPFU0Q0YzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LOzMAorPFU0RjAzPiA8VTRGMDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvIMwCis8VTRGMzU+IDxVNEYzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S8tTAKKzxVNEY5MD4gPFU0RjkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L6QMQorPFU1MkQ2PiA8VTUyRDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPli5YxNDQ2Cis8VTUyRDc+IDxVNTJENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WLlzAKKzxVNTM3OT4gPFU1Mzc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y25MAorPFU1M0Q5PiA8VTUzRDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlj5kyNzk2Cis8VTU3QkY+IDxVNTdCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WevzAKKzxVNThGQj4gPFU1OEZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aO7MAorPFU1QTdGPiA8VTVBN0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqb82MTYKKzxVNUU4Rj4gPFU1RThGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bqPMTQ1OTYKKzxVNjAzND4gPFU2MDM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oC0MAorPFU2MDY0PiA8VTYwNjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgaQ1NzQKKzxVNjE0OT4gPFU2MTQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oWJMQorPFU2NTREPiA8VTY1NEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlY0wCis8VTY1NTg+IDxVNjU1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aVmDM5Cis8VTY1RUQ+IDxVNjVFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aXrTExOTQKKzxVNjYyQj4gPFU2NjJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pirMQorPFU2NzAyPiA8VTY3MDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnIIwCis8VTY5RDI+IDxVNjlEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ankjAKKzxVNkM3Rj4gPFU2QzdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rG/MAorPFU2QzgwPiA8VTZDODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsoAwCis8VTZEMkI+IDxVNkQyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a0qzMKKzxVNkU4Nj4gPFU2RTg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqGMTQKKzxVNkYzNT4gPFU2RjM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ry1MAorPFU2RjRBPiA8VTZGNEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvYowCis8VTcwQzU+IDxVNzBDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eDhTAKKzxVNzE2Nj4gPFU3MTY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54WmNDI0Cis8VTczRUM+IDxVNzNFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ePrDAKKzxVNzZFMj4gPFU3NkUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55uiMAorPFU3NzgxPiA8VTc3ODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnoEwCis8VTc3QjI+IDxVNzdCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eesjAKKzxVN0EzOD4gPFU3QTM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56i4MAorPFU3QUEyPiA8VTdBQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqqIwCis8VTdENkU+IDxVN0Q2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e1rjg2NworPFU3RDlBPiA8VTdEOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntpowCis8VTdERDI+IDxVN0REMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3kjIzMAorPFU3REQ2PiA8VTdERDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnt5YwCis8VTdFOEM+IDxVN0U4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e6jDIxNAorPFU3RUVBPiA8VTdFRUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnu6o1NDE1Cis8VTdFRUQ+IDxVN0VFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e7rTE3NzcxCis8VTgwNUY+IDxVODA1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iBnzAKKzxVODJBNz4gPFU4MkE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IqnMAorPFU4NEM0PiA8VTg0QzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPok4QxMjI4Cis8VTg1Qzc+IDxVODVDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iXhzAKKzxVODVEQT4gPFU4NURBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JeaMQorPFU4QTM5PiA8VThBMzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqLkwCis8VThDQzk+IDxVOENDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iziTAKKzxVOTE1Nz4gPFU5MTU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YWXMTE0Cis8VTkyOEE+IDxVOTI4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mKijAKKzxVOUI2Mz4gPFU5QjYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a2jMAorPFU5QzZFPiA8VTlDNkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsa4wCis8VTg0RkY+IDxVODRGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iTvzM3MgorPFU1MTA3PiA8VTUxMDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhIcxMQorPFU1NDA1PiA8VTU0MDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkIUyCis8VTU1QTc+IDxVNTVBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WWpzE3MzYKKzxVNTdEOT4gPFU1N0Q5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z+ZNTgKKzxVNTg0Nz4gPFU1ODQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aGHMAorPFU1ODY0PiA8VTU4NjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloaQwCis8VTVBOTc+IDxVNUE5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WqlzAKKzxVNUJBMz4gPFU1QkEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a6jMTA1NDQKKzxVNUYzMj4gPFU1RjMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5byyMAorPFU2MTAzPiA8VTYxMDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhIMwCis8VTYxMEI+IDxVNjEwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aEizAKKzxVNjNDRT4gPFU2M0NFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+OMjYKKzxVNjYwRD4gPFU2NjBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5piNMAorPFU2NjQ1PiA8VTY2NDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmYUwCis8VTY2ODQ+IDxVNjY4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aahDM4NgorPFU2ODhCPiA8VTY4OEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmooswCis8VTcxNEE+IDxVNzE0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eFijIxCis8VTc0NDQ+IDxVNzQ0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eRhDAKKzxVNzc3Qj4gPFU3NzdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5527MAorPFU3N0NFPiA8VTc3Q0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnn44wCis8VTc5QTQ+IDxVNzlBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+empDAKKzxVN0JBRT4gPFU3QkFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj566uMAorPFU3RkU3PiA8VTdGRTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnv6cwCis8VTdGRkU+IDxVN0ZGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e/vjAKKzxVODQzMT4gPFU4NDMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JCxMzUxCis8VTg0MzI+IDxVODQzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iQsjAKKzxVODU3Rj4gPFU4NTdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JW/MAorPFU4NUZDPiA8VTg1RkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPol7wwCis8VTg2MTA+IDxVODYxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iYkDAKKzxVODc1Nj4gPFU4NzU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J2WMAorPFU4ODA5PiA8VTg4MDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooIkwCis8VThBRTA+IDxVOEFFMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iroDAKKzxVOEFGQz4gPFU4QUZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ku8MAorPFU4QjVFPiA8VThCNUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorZ4wCis8VThDMTY+IDxVOEMxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwljEKKzxVOEVEMj4gPFU4RUQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LuSMjIKKzxVOEY2OT4gPFU4RjY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L2pNzc3Cis8VTkyRDc+IDxVOTJENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mLlzAKKzxVOTM3OT4gPFU5Mzc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y25MAorPFU5REIxPiA8VTlEQjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptrEwCis8VTM2MjM+IDxVMzYyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OYozAKKzxVM0NFQz4gPFUzQ0VDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47OsMAorPFUzRTYxPiA8VTNFNjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuaEwCis8VTQwNjI+IDxVNDA2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SBojAKKzxVNDVFMD4gPFU0NUUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JegMAorPFU0Qjg0PiA8VTRCODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkroQwCis8VTRDODI+IDxVNEM4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SygjAKKzxVNENCQj4gPFU0Q0JCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LK7MAorPFU0RDA5PiA8VTREMDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktIkwCis8VTREMEI+IDxVNEQwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S0izAKKzxVNEYyRD4gPFU0RjJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LytMAorPFU1OUI2PiA8VTU5QjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlprYwCis8VTVBRDk+IDxVNUFEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WrmTAKKzxVNjBBQz4gPFU2MEFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oKsMjY4NgorPFU2MUY4PiA8VTYxRjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmh7g0NworPFU2NUNCPiA8VTY1Q0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPml4s1MDAwCis8VTY2QjY+IDxVNjZCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aatjAKKzxVNkE4OD4gPFU2QTg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qqIMAorPFU2RjI5PiA8VTZGMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvKkyNzMKKzxVNzM4ND4gPFU3Mzg0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj546EMjA0NworPFU3M0I5PiA8VTczQjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjrkwCis8VTc0MDE+IDxVNzQwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eQgTAKKzxVNzQ4Nz4gPFU3NDg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55KHMjI3Cis8VTc0QkY+IDxVNzRCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eSvzAKKzxVODcwMT4gPFU4NzAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JyBMQorPFU4QUI4PiA8VThBQjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqrgwCis8VTNGOEM+IDxVM0Y4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O+jDAKKzxVNDM3Qj4gPFU0MzdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I27MAorPFU0ODIzPiA8VTQ4MjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoKMwCis8VTU0QkE+IDxVNTRCQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WSujAKKzxVNzBEQz4gPFU3MERDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54OcNQorPFU5MDA5PiA8VTkwMDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgIkyMTU1NQorPFU5MDc4PiA8VTkwNzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgbgxNzQKKzxVOTk5ND4gPFU5OTk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aaUNzgKKzxVMzlFNj4gPFUzOUU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46emMAorPFUzQ0Q5PiA8VTNDRDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjs5kwCis8VTQzNTc+IDxVNDM1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SNlzAKKzxVNDYyOT4gPFU0NjI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JipMAorPFU0NzZFPiA8VTQ3NkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkna4wCis8VTQ5Q0U+IDxVNDlDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SnjjAKKzxVNEE1OT4gPFU0QTU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KmZMAorPFU0QTcwPiA8VTRBNzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqbAwCis8VTU3Q0Q+IDxVNTdDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfjTAKKzxVNjAzMD4gPFU2MDMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oCwMAorPFU2NjIxPiA8VTY2MjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmKEwCis8VTY5NjU+IDxVNjk2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+alpTAKKzxVNjk2Nj4gPFU2OTY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qWmNAorPFU2Q0VCPiA8VTZDRUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPms6sxMgorPFU2RTMyPiA8VTZFMzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuLIyNTMKKzxVNzBBQj4gPFU3MEFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54KrNTAwCis8VTc3Mjk+IDxVNzcyOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ecqTcxNQorPFU3NzM0PiA8VTc3MzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnLQwCis8VTc4Qjk+IDxVNzhCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eiuTEKKzxVN0Q2Mj4gPFU3RDYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57WiMAorPFU3RTNDPiA8VTdFM0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuLwwCis8VTdFNEY+IDxVN0U0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5jzAKKzxVN0VEQT4gPFU3RURBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57uaMzgxCis8VTg1MTk+IDxVODUxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iUmTAKKzxVODg1Mj4gPFU4ODUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KGSMQorPFU4OEE4PiA8VTg4QTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooqgwCis8VThCODI+IDxVOEI4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iugjAKKzxVOEQxOT4gPFU4RDE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LSZMAorPFU5MjQ5PiA8VTkyNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiYkwCis8VTkzQzc+IDxVOTNDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mPhzAKKzxVOTRDOT4gPFU5NEM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZOJMzkKKzxVOTU1Rj4gPFU5NTVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZWfNgorPFU5Nzk5PiA8VTk3OTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnpkwCis8VTk4QjQ+IDxVOThCND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mitDAKKzxVOTlGRD4gPFU5OUZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ae9MAorPFU1NDE5PiA8VTU0MTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkJkyCis8VTVEQTg+IDxVNURBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W2qDAKKzxVODU5Qj4gPFU4NTlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JabMTg1MworPFU4RkE1PiA8VThGQTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovqUwCis8VTk3NzQ+IDxVOTc3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mdtDg3OQorPFU5N0JFPiA8VTk3QkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnr4wCis8VTM1Qjg+IDxVMzVCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OWuDAKKzxVMzlEMj4gPFUzOUQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46eSMAorPFUzRDg1PiA8VTNEODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtoUwCis8VTNGRjE+IDxVM0ZGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O/sTAKKzxVNEFGQj4gPFU0QUZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ku7MAorPFU0QzUxPiA8VTRDNTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksZEwCis8VTRFNzQ+IDxVNEU3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S5tDAKKzxVNThDNj4gPFU1OEM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aOGMAorPFU1QjY2PiA8VTVCNjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlraYxMzQ5NzIKKzxVNUI3OD4gPFU1Qjc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a24ODUyCis8VTVDQzM+IDxVNUNDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WzgzAKKzxVNjU4OD4gPFU2NTg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5paIMAorPFU2Q0Y2PiA8VTZDRjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPms7YwCis8VTZGQTk+IDxVNkZBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a+qTAKKzxVNzFFMj4gPFU3MUUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54eiMAorPFU3QTc0PiA8VTdBNzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqbQxMDc5Cis8VTgzMTM+IDxVODMxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iMkzAKKzxVODlGNz4gPFU4OUY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ke3MAorPFU4RTA1PiA8VThFMDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouIUxODgKKzxVOTZFND4gPFU5NkU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZukMAorPFU5REZEPiA8VTlERkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpt70wCis8VTlFMzQ+IDxVOUUzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m4tDAKKzxVMzg1Qz4gPFUzODVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46GcMAorPFU0QTJFPiA8VTRBMkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqK4wCis8VTgxQTQ+IDxVODFBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iGpDAKKzxVOTZFQT4gPFU5NkVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZuqMTM0NDcKKzxVOUM0OD4gPFU5QzQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bGIMAorPFU5Q0Q1PiA8VTlDRDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPps5UzOAorPFUzN0JEPiA8VTM3QkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnr0wCis8VTQzODA+IDxVNDM4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SOgDAKKzxVNDkxNT4gPFU0OTE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KSVMAorPFU0QUZDPiA8VTRBRkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkq7wwCis8VTRCMDI+IDxVNEIwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SsgjAKKzxVNEI2NT4gPFU0QjY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K2lMAorPFU1Nzc5PiA8VTU3Nzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnbkwCis8VTVDQTQ+IDxVNUNBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WypDAKKzxVNjg1Nj4gPFU2ODU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qGWMAorPFU2Q0VDPiA8VTZDRUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPms6wwCis8VTg4NDA+IDxVODg0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ihgDEwMDAwCis8VTg4OTU+IDxVODg5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iilTAKKzxVOEIxRT4gPFU4QjFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KyeMAorPFU4RDkwPiA8VThEOTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotpAwCis8VTUyQ0I+IDxVNTJDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WLizE3MDQKKzxVNTJEQj4gPFU1MkRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YubOQorPFU1MkYyPiA8VTUyRjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPli7IwCis8VTUyRjM+IDxVNTJGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WLszIKKzxVNTc0Mz4gPFU1NzQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z2DMAorPFU1OENFPiA8VTU4Q0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlo44wCis8VTU4RTY+IDxVNThFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WjpjAKKzxVNUNDQj4gPFU1Q0NCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bOLODUKKzxVNjZEQj4gPFU2NkRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pubNAorPFU3MTA0PiA8VTcxMDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhIQwCis8VTcxOEY+IDxVNzE4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eGjzg3MgorPFU3MUZCPiA8VTcxRkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnh7syCis8VTczNkY+IDxVNzM2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eNrzAKKzxVNzdDND4gPFU3N0M0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+EMAorPFU3QUE4PiA8VTdBQTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqqgxNAorPFU3RTgxPiA8VTdFODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuoEwCis8VTgxRDA+IDxVODFEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iHkDAKKzxVODUxMj4gPFU4NTEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JSSMAorPFU4NUFCPiA8VTg1QUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolqswCis8VTg1QjA+IDxVODVCMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iWsDIxOAorPFU4NjBEPiA8VTg2MEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomI0wCis8VTkxQkE+IDxVOTFCQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mGujMyNworPFUzNzA0PiA8VTM3MDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnIQwCis8VTM3NDE+IDxVMzc0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OdgTAKKzxVM0ExQT4gPFUzQTFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46iaMAorPFUzQzBBPiA8VTNDMEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsIowCis8VTNDMkM+IDxVM0MyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OwrDAKKzxVM0Y2Nj4gPFUzRjY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj472mMAorPFU0MkY4PiA8VTQyRjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPki7gwCis8VTQ1QjI+IDxVNDVCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SWsjAKKzxVNDY0OT4gPFU0NjQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JmJMAorPFU1MDcxPiA8VTUwNzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgbEwCis8VTU2NUE+IDxVNTY1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WZmjEwCis8VTVCRkI+IDxVNUJGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WvuzEwODkxCis8VTVERTE+IDxVNURFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W3oTI4OTkKKzxVNUVGNT4gPFU1RUY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bu1MAorPFU1RkFBPiA8VTVGQUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvqoyMDcyCis8VTYwNDI+IDxVNjA0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBgjMKKzxVNjVFQz4gPFU2NUVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pesNzA1Cis8VTY3NEE+IDxVNjc0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+adijAKKzxVNjc5ND4gPFU2Nzk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p6UMAorPFU2ODEyPiA8VTY4MTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoJIwCis8VTY5QzY+IDxVNjlDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+anhjAKKzxVNkE0MT4gPFU2QTQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qmBMAorPFU2QkU1PiA8VTZCRTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmr6UwCis8VTZEMzU+IDxVNkQzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a0tTE0Cis8VTZENTQ+IDxVNkQ1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a1lDU5Cis8VTZGNkY+IDxVNkY2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a9rzAKKzxVNzFENj4gPFU3MUQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54eWMAorPFU3M0UzPiA8VTczRTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnj6MwCis8VTc0OTU+IDxVNzQ5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eSlTAKKzxVNzU0Mz4gPFU3NTQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55WDMQorPFU3RDAzPiA8VTdEMDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntIMwCis8VTgzNDA+IDxVODM0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iNgDQ5Cis8VTg3RjM+IDxVODdGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ifszAKKzxVOEE2Mj4gPFU4QTYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KmiMjgKKzxVOEJFMj4gPFU4QkUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K+iMjQ2MgorPFU5OUI0PiA8VTk5QjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpprQzCis8VTk5RTg+IDxVOTlFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mnqDAKKzxVOUE2Rj4gPFU5QTZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6amvMzk0Cis8VTlDNEY+IDxVOUM0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxjzAKKzxVOUM1OD4gPFU5QzU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bGYMAorPFU5QzlGPiA8VTlDOUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsp8yMAorPFUzOEIyPiA8VTM4QjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjorIwCis8VTQ2REM+IDxVNDZEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SbnDAKKzxVNDc4QT4gPFU0NzhBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J6KMAorPFU0QjQwPiA8VTRCNDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrYAwCis8VTRGMjg+IDxVNEYyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S8qDAKKzxVNEY5QT4gPFU0RjlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L6aMAorPFU1NjQwPiA8VTU2NDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmYAwCis8VTU5NUU+IDxVNTk1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WlnjAKKzxVNURGQT4gPFU1REZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5be6MAorPFU1REZEPiA8VTVERkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlt70zNworPFU1Rjg3PiA8VTVGODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvoc2NQorPFU2Qjg5PiA8VTZCODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrok0ODgKKzxVNkJCRT4gPFU2QkJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q6+MAorPFU2QzVCPiA8VTZDNUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsZsxNDIKKzxVNzIwQj4gPFU3MjBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54iLMAorPFU3MkU1PiA8VTcyRTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPni6UwCis8VThBMEE+IDxVOEEwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ioijc2Cis8VThBMTM+IDxVOEExMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iokzU3Cis8VThBMTk+IDxVOEExOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iomTAKKzxVOEJBRD4gPFU4QkFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K6tNDk3NgorPFU4QkFGPiA8VThCQUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorq82NTYyCis8VThDRDA+IDxVOENEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+izkDIKKzxVOEZDNT4gPFU4RkM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L+FNTg4NgorPFU4RkZGPiA8VThGRkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPov78wCis8VTkwMEE+IDxVOTAwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mAijE0NjMKKzxVOTA1Qz4gPFU5MDVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YGcNAorPFU5NDQyPiA8VTk0NDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkYIwCis8VTk3RDc+IDxVOTdENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mflzAKKzxVOTg2OD4gPFU5ODY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aGoMAorPFU5RDU0PiA8VTlENTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptZQwCis8VTlENTU+IDxVOUQ1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m1lTAKKzxVNEUyQj4gPFU0RTJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LirMzcxNQorPFU1MzhCPiA8VTUzOEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljos2NDE1Cis8VTU0RDE+IDxVNTREMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WTkTIxMzQKKzxVNTcyNz4gPFU1NzI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZynMQorPFU1OEQzPiA8VTU4RDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlo5M4MworPFU1QjcyPiA8VTVCNzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrbIwCis8VTVFOTg+IDxVNUU5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W6mDAKKzxVNjJCQz4gPFU2MkJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oq8MjExMworPFU3MTQ2PiA8VTcxNDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhYYwCis8VTk0MUE+IDxVOTQxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mQmjAKKzxVOUQwOT4gPFU5RDA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bSJMTkKKzxVOUQyOD4gPFU5RDI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bSoMgorPFU5RDc2PiA8VTlENzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptbYxCis8VTlFMjY+IDxVOUUyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m4pjE1MzcKKzxVOUUyRD4gPFU5RTJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bitMTM1NAorPFUzOUNFPiA8VTM5Q0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjp44wCis8VTQxMzA+IDxVNDEzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SEsDAKKzxVNDJBNj4gPFU0MkE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IqmMAorPFU0RjIyPiA8VTRGMjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvKIyOAorPFU1ODEwPiA8VTU4MTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloJAwCis8VTVEMTU+IDxVNUQxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W0lTAKKzxVNUQxNj4gPFU1RDE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bSWMTA1NgorPFU2NzkyPiA8VTY3OTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnpIwCis8VTZEQUY+IDxVNkRBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a2rzE1OTUKKzxVNkYwND4gPFU2RjA0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ryEMAorPFU3MjU5PiA8VTcyNTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniZk3ODU3Cis8VTcyQkQ+IDxVNzJCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eKvTAKKzxVNzMxQT4gPFU3MzFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54yaMAorPFU3NDBBPiA8VTc0MEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkIoyMAorPFU3NzVBPiA8VTc3NUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnZoxMworPFU3QjBDPiA8VTdCMEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrIwwCis8VTgyQkQ+IDxVODJCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iKvTY2MworPFU4NjlDPiA8VTg2OUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPompw0MgorPFU4ODU5PiA8VTg4NTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooZkyMDk3Cis8VTlGNTY+IDxVOUY1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m9ljAKKzxVM0ZGRj4gPFUzRkZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47+/MAorPFU0QUI1PiA8VTRBQjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqrUwCis8VTRFOUU+IDxVNEU5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6njkyCis8VTUzOEE+IDxVNTM4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WOijAKKzxVNUU4Qz4gPFU1RThDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bqMMAorPFU2Mzk3PiA8VTYzOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjpcwCis8VTc1RDY+IDxVNzVENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eXljAKKzxVNzYwMj4gPFU3NjAyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55iCMAorPFU4NTY1PiA8VTg1NjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolaUwCis8VTk2QzM+IDxVOTZDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mbgzAKKzxVOTZDNT4gPFU5NkM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZuFNzM2NQorPFUzNzVFPiA8VTM3NUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnZ4wCis8VTNDMzM+IDxVM0MzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OwszAKKzxVNDE0OT4gPFU0MTQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IWJMAorPFU0NzVGPiA8VTQ3NUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknZ8wCis8VTQ4OUQ+IDxVNDg5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SinTAKKzxVNDlBQT4gPFU0OUFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KaqMAorPFU0QkM5PiA8VTRCQzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkr4kwCis8VTRDMzI+IDxVNEMzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SwsjAKKzxVNEQ1RD4gPFU0RDVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LWdMAorPFU0RTlBPiA8VTRFOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkupoxNzQ3OAorPFU0RTlDPiA8VTRFOUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkupwxCis8VTRGRjk+IDxVNEZGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S/uTAKKzxVNTI5Qz4gPFU1MjlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YqcMAorPFU1NzIwPiA8VTU3MjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnKAwCis8VTVBMDU+IDxVNUEwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WohTkzOQorPFU1QTZEPiA8VTVBNkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqa0wCis8VTYzMUM+IDxVNjMxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aMnDAKKzxVNjNFMD4gPFU2M0UwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+gNgorPFU2QzI5PiA8VTZDMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsKk2Cis8VTZDMkM+IDxVNkMyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+awrDAKKzxVNzMzMD4gPFU3MzMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54ywMQorPFU3M0ExPiA8VTczQTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjqEzCis8VTc4MTE+IDxVNzgxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+egkTYKKzxVN0EwRj4gPFU3QTBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56iPMAorPFU3QUFCPiA8VTdBQUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqqswCis8VTgwNTA+IDxVODA1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iBkDAKKzxVODk3RT4gPFU4OTdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KW+MAorPFU4QTFEPiA8VThBMUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqJ0zMQorPFU4QkI2PiA8VThCQjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorrYxOTYwCis8VThGRDM+IDxVOEZEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i/kzkKKzxVOTMwRj4gPFU5MzBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YyPMworPFU5NEQ0PiA8VTk0RDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpk5QxCis8VTlGM0M+IDxVOUYzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m8vDAKKzxVOUY3RT4gPFU5RjdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b2+MAorPFU1NDQwPiA8VTU0NDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkYAxMDAwMAorPFU1MDYzPiA8VTUwNjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgaMwCis8VTUyNjY+IDxVNTI2Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WJpjAKKzxVNTNBRD4gPFU1M0FEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y6tNTQKKzxVNTRCRD4gPFU1NEJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZK9MjIyMworPFU1NTcxPiA8VTU1NzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllbEwCis8VTVBRTM+IDxVNUFFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WrozMzOAorPFU1QjJFPiA8VTVCMkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrK4wCis8VTVEMjY+IDxVNUQyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W0pjIKKzxVNjFENT4gPFU2MUQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oeVMAorPFU2QkI3PiA8VTZCQjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrrcxMTg5Cis8VTZERjk+IDxVNkRGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3uTEyMTYKKzxVNkU2RT4gPFU2RTZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rmuMjY1Cis8VTZGMzk+IDxVNkYzOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a8uTAKKzxVNzBERj4gPFU3MERGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54OfMTM0NTgKKzxVNzEwOT4gPFU3MTA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54SJODU1Cis8VTcxNTk+IDxVNzE1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eFmTk1Cis8VTczMTI+IDxVNzMxMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eMkjAKKzxVNzNEQT4gPFU3M0RBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54+aMAorPFU3QkY2PiA8VTdCRjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnr7YwCis8VTgwRUQ+IDxVODBFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iDrTI0MAorPFU4MUQ5PiA8VTgxRDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoh5kwCis8VTgzRjg+IDxVODNGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPuDIyNgorPFU5MTIyPiA8VTkxMjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphKI3Cis8VTkxNDA+IDxVOTE0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mFgDAKKzxVOTE4Mz4gPFU5MTgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YaDMQorPFU5NUI5PiA8VTk1Qjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplrkwCis8VTk2MDk+IDxVOTYwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mYiTI0OQorPFUzNUY0PiA8VTM1RjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjl7QwCis8VTM2MTY+IDxVMzYxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OYljAKKzxVMzYxOT4gPFUzNjE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45iZMAorPFUzQURGPiA8VTNBREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjq58wCis8VTNDQzI+IDxVM0NDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OzgjAKKzxVM0Q4ND4gPFUzRDg0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47aEMAorPFUzRkQ1PiA8VTNGRDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjv5UwCis8VTNGRkM+IDxVM0ZGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O/vDAKKzxVNDAwQj4gPFU0MDBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ICLMAorPFU0MDNEPiA8VTQwM0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgL0wCis8VTQwQjQ+IDxVNDBCND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SCtDAKKzxVNDFGRT4gPFU0MUZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ie+MAorPFU0Mjk5PiA8VTQyOTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkipkwCis8VTQzMkE+IDxVNDMyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SMqjAKKzxVNDRDMj4gPFU0NEMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JOCMAorPFU0NTdFPiA8VTQ1N0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklb4wCis8VTQ1OTc+IDxVNDU5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SWlzAKKzxVNDVFMT4gPFU0NUUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JehMAorPFU0OEE1PiA8VTQ4QTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoqUwCis8VTQ5Mzc+IDxVNDkzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SktzAKKzxVNEM3Mj4gPFU0QzcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LGyMAorPFU0REFFPiA8VTREQUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktq4wCis8VTRFMjU+IDxVNEUyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S4pTE1MzAwCis8VTUzQjM+IDxVNTNCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WOszAKKzxVNTVBNj4gPFU1NUE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZamMAorPFU1NkI0PiA8VTU2QjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmrQxMDcKKzxVNTdDRj4gPFU1N0NGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z+PMworPFU1ODY5PiA8VTU4Njk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloakwCis8VTU4REI+IDxVNThEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WjmzAKKzxVNThFNz4gPFU1OEU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aOnMAorPFU1OThEPiA8VTU5OEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpo0yNDgKKzxVNTlGOD4gPFU1OUY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ae4MAorPFU1QTJCPiA8VTVBMkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqKswCis8VTVBMkU+IDxVNUEyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WorjAKKzxVNUI0RD4gPFU1QjREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a2NMAorPFU1Q0E5PiA8VTVDQTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsqkxNDkxCis8VTVENTI+IDxVNUQ1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W1kjAKKzxVNUQ1Mz4gPFU1RDUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bWTMAorPFU1RENDPiA8VTVEQ0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlt4wwCis8VTVERDY+IDxVNURENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W3ljIKKzxVNURENz4gPFU1REQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5beXMAorPFU1RUY2PiA8VTVFRjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlu7Y0ODU2Cis8VTYzQzU+IDxVNjNDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aPhTAKKzxVNjYxNj4gPFU2NjE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5piWMAorPFU2OTRDPiA8VTY5NEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpYwwCis8VTZBOTA+IDxVNkE5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aqkDg5OAorPFU2QUU5PiA8VTZBRTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmq6kwCis8VTZDQkY+IDxVNkNCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ayvzUwMTUKKzxVNkU3QT4gPFU2RTdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rm6MAorPFU3MDhFPiA8VTcwOEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngo4xODQwCis8VTcyRkY+IDxVNzJGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eLvzAKKzxVNzQwMj4gPFU3NDAyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55CCMQorPFU3NkQwPiA8VTc2RDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnm5AxNzU1Cis8VTc4MTQ+IDxVNzgxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eglDE4NTM0Cis8VTc4OUU+IDxVNzg5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+einjAKKzxVNzkzOT4gPFU3OTM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56S5MAorPFU3Qjc1PiA8VTdCNzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrbUzMzYKKzxVN0MzNz4gPFU3QzM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57C3NAorPFU3RDk2PiA8VTdEOTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntpYxCis8VTgyQUI+IDxVODJBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iKqzE2Cis8VTgzOUE+IDxVODM5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iOmjIKKzxVODQ1NT4gPFU4NDU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JGVMAorPFU4NTA1PiA8VTg1MDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolIUwCis8VTg2NjQ+IDxVODY2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iZpDAKKzxVODcxMj4gPFU4NzEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JySMjM1Cis8VThBMDA+IDxVOEEwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iogDMyMzMwCis8VThBMDE+IDxVOEEwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iogTAKKzxVOEE3RD4gPFU4QTdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Km9MAorPFU4QkEwPiA8VThCQTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorqA0Cis8VTkwRDQ+IDxVOTBEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mDlDAKKzxVOTIwNj4gPFU5MjA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YiGMAorPFU5NTg2PiA8VTk1ODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPploYwCis8VTk1QjA+IDxVOTVCMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mWsDAKKzxVOTVCQj4gPFU5NUJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Za7MQorPFU5NUVCPiA8VTk1RUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpl6sxNzYKKzxVOTYwRT4gPFU5NjBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZiONjQ1Cis8VTk4NDM+IDxVOTg0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mhgzAKKzxVOTg0Rj4gPFU5ODRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aGPMTYKKzxVOTg1ND4gPFU5ODU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aGUMgorPFU5ODlDPiA8VTk4OUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpopw1MDY4Cis8VTlFN0Q+IDxVOUU3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m5vTEKKzxVOUU5OT4gPFU5RTk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bqZMAorPFU5RUEzPiA8VTlFQTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuqMwCis8VTM0RTc+IDxVMzRFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OTpzAKKzxVMzU2Mz4gPFUzNTYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45WjMAorPFUzNkE3PiA8VTM2QTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmqcwCis8VTM4ODI+IDxVMzg4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OigjAKKzxVM0FDMz4gPFUzQUMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46uDMAorPFUzQjdBPiA8VTNCN0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrbowCis8VTQwNTk+IDxVNDA1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SBmTAKKzxVNDEwQj4gPFU0MTBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ISLMAorPFU0MkJCPiA8VTQyQkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkirswCis8VTQzQTY+IDxVNDNBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SOpjAKKzxVNDVGQT4gPFU0NUZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Je6MAorPFU0OENEPiA8VTQ4Q0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPko40wCis8VTRDOTM+IDxVNEM5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SykzAKKzxVNEU3NT4gPFU0RTc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Lm1MAorPFU0RkU4PiA8VTRGRTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkv6gzNDcKKzxVNTA0Mz4gPFU1MDQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YGDNTkKKzxVNTEzQz4gPFU1MTNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YS8MgorPFU1MTU2PiA8VTUxNTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhZYyOQorPFU1MTU3PiA8VTUxNTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhZcwCis8VTUzM0Q+IDxVNTMzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WMvTAKKzxVNTNBMz4gPFU1M0EzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y6jNAorPFU1M0I0PiA8VTUzQjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljrQwCis8VTU5MzU+IDxVNTkzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WktTAKKzxVNTk0ND4gPFU1OTQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aWENDgyCis8VTU5RjY+IDxVNTlGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WntjAKKzxVNUIzRj4gPFU1QjNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ay/MAorPFU1RDQzPiA8VTVENDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltYMwCis8VTVEOTY+IDxVNUQ5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W2ljAKKzxVNUREOD4gPFU1REQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5beYMQorPFU1RERBPiA8VTVEREE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlt5owCis8VTVGMDc+IDxVNUYwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W8hzkKKzxVNjBEND4gPFU2MEQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oOUMAorPFU2MTFEPiA8VTYxMUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhJ0wCis8VTYyMkQ+IDxVNjIyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aIrTAKKzxVNjI0QT4gPFU2MjRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5omKMAorPFU2MjgxPiA8VTYyODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmioEwCis8VTYzQTk+IDxVNjNBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aOqTM4NDgKKzxVNjNEQz4gPFU2M0RDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+cMAorPFU2NkVFPiA8VTY2RUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmm64wCis8VTY4RUE+IDxVNjhFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ajqjAKKzxVNjkzQz4gPFU2OTNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qS8MAorPFU2QUJGPiA8VTZBQkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqr8wCis8VTZDODc+IDxVNkM4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ayhzAKKzxVNkUzMD4gPFU2RTMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5riwMAorPFU2RTM3PiA8VTZFMzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuLcwCis8VTZGMTQ+IDxVNkYxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a8lDE0MDU2Cis8VTc0MzA+IDxVNzQzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eQsDYKKzxVNzUxNz4gPFU3NTE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55SXMAorPFU3NzNDPiA8VTc3M0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnLw2NjM3MAorPFU3ODdEPiA8VTc4N0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnob0wCis8VTdGNjg+IDxVN0Y2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9qDIKKzxVODQxMj4gPFU4NDEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JCSMAorPFU4NzU4PiA8VTg3NTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonZgwCis8VTg4NEQ+IDxVODg0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ihjTEwNDEKKzxVODhGQT4gPFU4OEZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KO6MAorPFU4OTE3PiA8VTg5MTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopJcwCis8VThFQkQ+IDxVOEVCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6vTAKKzxVOTA0Mz4gPFU5MDQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YGDMAorPFU5MEZFPiA8VTkwRkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg74wCis8VTkxNTM+IDxVOTE1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mFkzAKKzxVOTY5Mj4gPFU5NjkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZqSMAorPFU5OUEzPiA8VTk5QTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppqMwCis8VTlCNDc+IDxVOUI0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mthzIxMworPFU5QjU4PiA8VTlCNTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprZgzCis8VTlDMEI+IDxVOUMwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mwizAKKzxVOURBMD4gPFU5REEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bagMAorPFU5RUUxPiA8VTlFRTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpu6EwCis8VTlFRTQ+IDxVOUVFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7pDAKKzxVOUVFRD4gPFU5RUVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6butMAorPFU5RUY2PiA8VTlFRjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpu7YwCis8VTlGMzQ+IDxVOUYzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m8tDAKKzxVOUYzOT4gPFU5RjM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6by5NjkKKzxVOUY5MT4gPFU5RjkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b6RMTYKKzxVMzZFQT4gPFUzNkVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45uqMAorPFUzODlCPiA8VTM4OUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjopswCis8VTM5OTQ+IDxVMzk5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OmlDAKKzxVM0IyQj4gPFUzQjJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46yrMAorPFUzREQ0PiA8VTNERDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjt5QwCis8VTNERjM+IDxVM0RGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O3szAKKzxVM0RGQz4gPFUzREZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47e8MAorPFU0MEE5PiA8VTQwQTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgqkwCis8VTQxNjc+IDxVNDE2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SFpzAKKzxVNDQ0RD4gPFU0NDREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JGNMAorPFU0NzI5PiA8VTQ3Mjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknKkwCis8VTQ4QUQ+IDxVNDhBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SirTAKKzxVNEEwND4gPFU0QTA0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KiEMAorPFU0QjU4PiA8VTRCNTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrZgwCis8VTRDREI+IDxVNENEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SzmzAKKzxVNENGQT4gPFU0Q0ZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LO6MAorPFU0RDBGPiA8VTREMEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktI8wCis8VTUwNTA+IDxVNTA1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WBkDAKKzxVNTBCRj4gPFU1MEJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YK/MAorPFU1MzhDPiA8VTUzOEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljow1Mzk3Cis8VTU1MDE+IDxVNTUwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUgTEwNQorPFU1NUFEPiA8VTU1QUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllq0wCis8VTU2NUU+IDxVNTY1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WZnjAKKzxVNTZBNT4gPFU1NkE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZqlMQorPFU1ODMwPiA8VTU4MzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloLA3MgorPFU1ODk1PiA8VTU4OTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlopUwCis8VTU5OUY+IDxVNTk5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WmnzAKKzxVNTlGMj4gPFU1OUYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aeyMAorPFU1QjBBPiA8VTVCMEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrIowCis8VTVCQjQ+IDxVNUJCND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WutDE1MjAKKzxVNUY2NT4gPFU1RjY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b2lMQorPFU1RjY2PiA8VTVGNjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvaYzMzAKKzxVNjU2NT4gPFU2NTY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pWlMAorPFU2NjRGPiA8VTY2NEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmY8yMTYKKzxVNjZBNT4gPFU2NkE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pqlMAorPFU2NkQ1PiA8VTY2RDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmm5UwCis8VTY2RTM+IDxVNjZFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+abozAKKzxVNjkzQj4gPFU2OTNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qS7MAorPFU2RURGPiA8VTZFREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmu580MAorPFU3MDRFPiA8VTcwNEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngY4wCis8VTcwNTQ+IDxVNzA1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eBlDAKKzxVNzA2Nz4gPFU3MDY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54GnMAorPFU3MDY5PiA8VTcwNjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngakwCis8VTcxMTQ+IDxVNzExND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eElDAKKzxVNzEzMD4gPFU3MTMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54SwMTYwNQorPFU3MTMxPiA8VTcxMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhLE3MworPFU3MUM0PiA8VTcxQzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnh4QyCis8VTcxRDU+IDxVNzFENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHlTM1NDkKKzxVNzIxMz4gPFU3MjEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54iTMAorPFU3MjZBPiA8VTcyNkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniaowCis8VTc4MUE+IDxVNzgxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+egmjQ0NworPFU3ODZGPiA8VTc4NkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoa8wCis8VTgyNzM+IDxVODI3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iJszI0NTkKKzxVODI3Nj4gPFU4Mjc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Im2MAorPFU4Mjc3PiA8VTgyNzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoibc2Cis8VTg5OEU+IDxVODk4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+imjjAKKzxVODlDMz4gPFU4OUMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KeDMAorPFU4OUZFPiA8VTg5RkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPop74wCis8VThBRkE+IDxVOEFGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+irujMKKzxVOEI4Qz4gPFU4QjhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K6MMAorPFU4QjlFPiA8VThCOUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorp4wCis8VThDMUE+IDxVOEMxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwmjE0MworPFU4QzMzPiA8VThDMzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosLMzNQorPFU4QzUzPiA8VThDNTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosZMwCis8VThDNTQ+IDxVOEM1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ixlDcKKzxVOEQwQj4gPFU4RDBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LSLMAorPFU4RDE3PiA8VThEMTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotJcwCis8VThENUQ+IDxVOEQ1RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i1nTM0Cis8VTkxN0Q+IDxVOTE3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mFvTcxCis8VTkxQjY+IDxVOTFCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mGtjAKKzxVOTFCQz4gPFU5MUJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ya8MQorPFU5MUM1PiA8VTkxQzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPph4UwCis8VTk2ODE+IDxVOTY4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+magTAKKzxVOTZDMT4gPFU5NkMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZuBMTAxNworPFU5OTBEPiA8VTk5MEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppI0xMAorPFU5OTVDPiA8VTk5NUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppZwwCis8VTlBMTA+IDxVOUExMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mokDAKKzxVOUExMz4gPFU5QTEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aiTMAorPFU5QTM0PiA8VTlBMzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqLQwCis8VTlBNTc+IDxVOUE1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mplzEzNgorPFU5QTYwPiA8VTlBNjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqaAwCis8VTlBOEM+IDxVOUE4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mqjDE3NTQ0Cis8VTlDRUI+IDxVOUNFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mzqzAKKzxVOUQwOD4gPFU5RDA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bSIMAorPFU5RDMzPiA8VTlEMzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptLMxCis8VTlEQzM+IDxVOURDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m3gzEKKzxVOURGMD4gPFU5REYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bewMAorPFU0RjUyPiA8VTRGNTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvZIwCis8VTU0ODk+IDxVNTQ4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WSiTAKKzxVNTc3MT4gPFU1NzcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z2xMAorPFU1OTJFPiA8VTU5MkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpK4xMDI0NgorPFU1OUNFPiA8VTU5Q0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlp44wCis8VTY3Q0Q+IDxVNjdDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+afjTAKKzxVNkI4Mz4gPFU2QjgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q6DMjEwCis8VTZDRjE+IDxVNkNGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+azsTk4Cis8VTc3MEY+IDxVNzcwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ecjzAKKzxVNzlFNz4gPFU3OUU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56enMjA1Cis8VTdEM0I+IDxVN0QzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e0uzAKKzxVODBFNj4gPFU4MEU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IOmMAorPFU5MjYwPiA8VTkyNjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiaAwCis8VTk2RjU+IDxVOTZGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mbtTAKKzxVOTc4NT4gPFU5Nzg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z6FMjc0Cis8VTlEMjY+IDxVOUQyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m0pjEKKzxVOUUyRj4gPFU5RTJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bivMzA0Cis8VTM3QzU+IDxVMzdDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OfhTAKKzxVM0IxNT4gPFUzQjE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46yVMAorPFU0MDUxPiA8VTQwNTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgZEwCis8VTQ1Qjk+IDxVNDVCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SWuTAKKzxVNEIxNz4gPFU0QjE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KyXMAorPFU0RjZGPiA8VTRGNkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkva81ODEKKzxVNTJCNz4gPFU1MkI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Yq3MAorPFU1NzlGPiA8VTU3OUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnp8wCis8VTVBNzg+IDxVNUE3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WpuDAKKzxVNUQzNT4gPFU1RDM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bS1MAorPFU1Rjg5PiA8VTVGODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvok5NworPFU2MjZDPiA8VTYyNkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiaw3ODEzCis8VTYzREE+IDxVNjNEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aPmjYxCis8VTY1NkQ+IDxVNjU2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aVrTAKKzxVNjVGOD4gPFU2NUY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pe4MjMKKzxVNjYxQz4gPFU2NjFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5picMAorPFU2Njk4PiA8VTY2OTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmpgwCis8VTY3Njg+IDxVNjc2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+adqDkyODMKKzxVNjk0QT4gPFU2OTRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qWKMzgKKzxVNkQwQj4gPFU2RDBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rSLMTAwNDkKKzxVNzA4MD4gPFU3MDgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54KAMjYKKzxVNzBDQT4gPFU3MENBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54OKOTAKKzxVNzE2Qz4gPFU3MTZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54WsMAorPFU3M0RDPiA8VTczREM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnj5wwCis8VTc0NTI+IDxVNzQ1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eRkjAKKzxVNzVBMT4gPFU3NUExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55ahNDgKKzxVNzYwRD4gPFU3NjBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55iNMAorPFU3NzNCPiA8VTc3M0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnLswCis8VTc5OTM+IDxVNzk5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+emkzAKKzxVN0Y4QT4gPFU3RjhBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj576KNDQ0MAorPFU4NkQ4PiA8VTg2RDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPom5gwCis8VThBRjk+IDxVOEFGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iruTAKKzxVOEYzMD4gPFU4RjMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LywMAorPFU5MzVBPiA8VTkzNUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjZowCis8VTk0MEE+IDxVOTQwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mQijAKKzxVOTYyNj4gPFU5NjI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZimMAorPFU5NjMzPiA8VTk2MzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmLMyMDE4OAorPFU5NjdEPiA8VTk2N0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmb0xODIKKzxVOTczNz4gPFU5NzM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Zy3MAorPFU5OEJBPiA8VTk4QkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPporo2Cis8VTk4Q0Y+IDxVOThDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mjjzczCis8VTlDMTE+IDxVOUMxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mwkTAKKzxVOUUwOT4gPFU5RTA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6biJMAorPFUzNTI2PiA8VTM1MjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlKYwCis8VTQxRTY+IDxVNDFFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SHpjAKKzxVNDQ0Nj4gPFU0NDQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JGGMAorPFU0NDhCPiA8VTQ0OEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkoswCis8VTRCMkM+IDxVNEIyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SsrDAKKzxVNEVGMD4gPFU0RUYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LuwNTA4NAorPFU1MDlGPiA8VTUwOUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgp8wCis8VTUxN0I+IDxVNTE3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WFuzk0ODgKKzxVNUM5Rj4gPFU1QzlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bKfMAorPFU2MTQzPiA8VTYxNDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhYMwCis8VTYxRTk+IDxVNjFFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aHqTAKKzxVNjJCMD4gPFU2MkIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oqwMAorPFU2NTAxPiA8VTY1MDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlIEwCis8VTZDMjc+IDxVNkMyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+awpzEwNTIKKzxVNkMzMT4gPFU2QzMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rCxMAorPFU3MEI0PiA8VTcwQjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngrQwCis8VTc1RDI+IDxVNzVEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eXkjEwODgKKzxVNzY2Mj4gPFU3NjYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55miNQorPFU3RkFBPiA8VTdGQUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvqowCis8VTg3NDY+IDxVODc0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+idhjAKKzxVOTkwQT4gPFU5OTBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aSKNzkKKzxVOTlEQT4gPFU5OURBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aeaMQorPFUzQTNFPiA8VTNBM0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqL4wCis8VTNFOEE+IDxVM0U4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O6ijAKKzxVM0ZFRT4gPFUzRkVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47+uMAorPFU0QjNBPiA8VTRCM0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrLowCis8VTRCNTA+IDxVNEI1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+StkDAKKzxVNEQ2RT4gPFU0RDZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LWuMAorPFU2MDBGPiA8VTYwMEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgI8xMjkKKzxVNjA1OT4gPFU2MDU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oGZMjQxCis8VTY4Mzc+IDxVNjgzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+agtzEzMTExOQorPFU2OUQ4PiA8VTY5RDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmp5gwCis8VTZBMjM+IDxVNkEyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aoozk2OAorPFU2RjNFPiA8VTZGM0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvL42MjEKKzxVNzAwMT4gPFU3MDAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54CBMAorPFU3Rjk1PiA8VTdGOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvpUwCis8VThBNDc+IDxVOEE0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iphzAKKzxVNTQwNj4gPFU1NDA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZCGNDk3Cis8VTU1OTM+IDxVNTU5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WWkzIKKzxVNTkyRD4gPFU1OTJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aStNDg2Cis8VTU5OTY+IDxVNTk5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WmljIzOTcKKzxVNUU3QT4gPFU1RTdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bm6NDg5Cis8VTY3OTY+IDxVNjc5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aeljAKKzxVNjk0Nj4gPFU2OTQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qWGMAorPFU3OTQ1PiA8VTc5NDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpYUwCis8VTdEMDQ+IDxVN0QwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e0hDE5MAorPFU4MTcwPiA8VTgxNzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohbA1NDMxCis8VTg0N0Q+IDxVODQ3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iRvTAKKzxVOEExRT4gPFU4QTFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KieMAorPFU5MDgwPiA8VTkwODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgoAyMjQ0Cis8VTNBMzE+IDxVM0EzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OosTAKKzxVM0I4MT4gPFUzQjgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj466BMAorPFU0MDlBPiA8VTQwOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgpowCis8VTQxOTk+IDxVNDE5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SGmTAKKzxVNDI3MD4gPFU0MjcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ImwMAorPFU0MkMyPiA8VTQyQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPki4IwCis8VTQzMEE+IDxVNDMwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SMijAKKzxVNDMxQj4gPFU0MzFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IybMAorPFU0MzQzPiA8VTQzNDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjYMwCis8VTQ1MDQ+IDxVNDUwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SUhDAKKzxVNDVCND4gPFU0NUI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ja0MAorPFU0NkJBPiA8VTQ2QkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmrowCis8VTQ2QkI+IDxVNDZCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SauzAKKzxVNDhBMz4gPFU0OEEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KKjMAorPFU0QjE5PiA8VTRCMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrJkwCis8VTUwMDQ+IDxVNTAwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAhDAKKzxVNTA5Qz4gPFU1MDlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YKcMAorPFU1NUMyPiA8VTU1QzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPll4IwCis8VTU3OUE+IDxVNTc5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WemjIKKzxVNTgyRj4gPFU1ODJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aCvMgorPFU1OURBPiA8VTU5REE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlp5oxMTkxCis8VTVBQjE+IDxVNUFCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WqsTAKKzxVNUMyNz4gPFU1QzI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bCnMTU2OAorPFU1QzJEPiA8VTVDMkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsK0wCis8VTVDRTM+IDxVNUNFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WzozIKKzxVNUQyND4gPFU1RDI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bSkMgorPFU1REEyPiA8VTVEQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltqIwCis8VTVEQTQ+IDxVNURBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W2pDAKKzxVNUZBRD4gPFU1RkFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b6tNgorPFU2MTJFPiA8VTYxMkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhK4wCis8VTYzRkE+IDxVNjNGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aPujAKKzxVNjQxNj4gPFU2NDE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pCWMTEyCis8VTY0NDc+IDxVNjQ0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aRhzExNzg3Cis8VTY2OUE+IDxVNjY5QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aamjAKKzxVNjdGQz4gPFU2N0ZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p+8MAorPFU2OUEzPiA8VTY5QTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpqMwCis8VTZCQkQ+IDxVNkJCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+auvTAKKzxVNzBEMT4gPFU3MEQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54ORMAorPFU3MjNCPiA8VTcyM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniLsyCis8VTczMDc+IDxVNzMwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eMhzAKKzxVNzMzQT4gPFU3MzNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54y6MAorPFU3M0U3PiA8VTczRTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnj6cwCis8VTc0NjQ+IDxVNzQ2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eRpDAKKzxVNzQ3Nj4gPFU3NDc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55G2NDkwCis8VTdBOTE+IDxVN0E5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eqkTc3OAorPFU3QUFGPiA8VTdBQUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqq8xCis8VTdBQjA+IDxVN0FCMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eqsDAKKzxVN0U0Nz4gPFU3RTQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57mHNQorPFU4MEI0PiA8VTgwQjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogrQyNjMKKzxVODYyOD4gPFU4NjI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JioMAorPFU4QjIwPiA8VThCMjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorKA0Cis8VThCMjE+IDxVOEIyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+isoTAKKzxVOEMyMz4gPFU4QzIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LCjOTk3Cis8VThFRkE+IDxVOEVGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i7ujAKKzxVOEY3QT4gPFU4RjdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L26MAorPFU5MDU5PiA8VTkwNTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgZk1OAorPFU5MDY1PiA8VTkwNjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgaUzNjM2Cis8VTk4QkI+IDxVOThCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+miuzAKKzxVOThENj4gPFU5OEQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aOWMAorPFU5OTA2PiA8VTk5MDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppIYwCis8VTk5MUE+IDxVOTkxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mkmjEKKzxVOUMyOT4gPFU5QzI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bCpMAorPFU5Q0QwPiA8VTlDRDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPps5AzCis8VTM3RjE+IDxVMzdGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OfsTAKKzxVMzg5Mz4gPFUzODkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46KTMAorPFUzQUNGPiA8VTNBQ0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjq48wCis8VTNBRDA+IDxVM0FEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OrkDAKKzxVM0QyRD4gPFUzRDJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47StMAorPFU0MDRGPiA8VTQwNEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgY8wCis8VTQwNTg+IDxVNDA1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SBmDAKKzxVNDE5RT4gPFU0MTlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IaeMAorPFU0RDIwPiA8VTREMjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktKAwCis8VTREQTc+IDxVNERBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S2pzAKKzxVNEVGOD4gPFU0RUY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Lu4MAorPFU1MDYwPiA8VTUwNjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgaAwCis8VTU0QUM+IDxVNTRBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WSrDQwNjkKKzxVNUE3OT4gPFU1QTc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5am5MAorPFU1QjhFPiA8VTVCOEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlro4wCis8VTVDODY+IDxVNUM4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WyhjAKKzxVNUQzRT4gPFU1RDNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bS+MQorPFU2MkFEPiA8VTYyQUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiq0wCis8VTY3NzM+IDxVNjc3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+adszEzNQorPFU2OTlBPiA8VTY5OUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmppowCis8VTZCODA+IDxVNkI4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+augDIKKzxVNkU5ND4gPFU2RTk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqUMAorPFU3MkQ1PiA8VTcyRDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPni5UwCis8VTc3MTE+IDxVNzcxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eckTAKKzxVN0E4NT4gPFU3QTg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56qFNAorPFU3QTg4PiA8VTdBODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqogxMDMKKzxVN0E5ND4gPFU3QTk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56qUMAorPFU4MjAwPiA8VTgyMDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiIAyMTIKKzxVODJFRD4gPFU4MkVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IutMAorPFU4NEQ0PiA8VTg0RDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPok5QwCis8VTk1QzQ+IDxVOTVDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mXhDAKKzxVOUExNT4gPFU5QTE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aiVMQorPFU5REQ1PiA8VTlERDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpt5UwCis8VTlGNjk+IDxVOUY2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m9qTAKKzxVMzUzRD4gPFUzNTNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45S9MAorPFUzNzU0PiA8VTM3NTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnZQwCis8VTM3ODE+IDxVMzc4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OegTAKKzxVM0Q3OD4gPFUzRDc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47W4MAorPFUzRkQxPiA8VTNGRDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjv5EwCis8VTNGRTI+IDxVM0ZFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O/ojAKKzxVNDJFND4gPFU0MkU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IukMAorPFU0NDZDPiA8VTQ0NkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkawwCis8VTQ2NDU+IDxVNDY0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SZhTAKKzxVNjZEQz4gPFU2NkRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pucNDQKKzxVNzE4RT4gPFU3MThFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54aOMAorPFU3MUZGPiA8VTcxRkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnh78xCis8VTczNUY+IDxVNzM1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eNnzAKKzxVNzdDNT4gPFU3N0M1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+FMAorPFU3QTdFPiA8VTdBN0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqb4wCis8VTdCNDQ+IDxVN0I0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ethDAKKzxVODAwMD4gPFU4MDAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ICAMzkzNAorPFU4MjVFPiA8VTgyNUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiZ4wCis8VTgzNkY+IDxVODM2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iNrzgxMDAKKzxVODQ2Rj4gPFU4NDZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JGvMAorPFU4NUFDPiA8VTg1QUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolqwwCis8VTg1RTU+IDxVODVFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iXpTM3Cis8VTg4OEU+IDxVODg4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iijjAKKzxVODk4MT4gPFU4OTgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KaBMjAwMDAwCis8VTg5OUU+IDxVODk5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+imnjAKKzxVOEI5MT4gPFU4QjkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K6RMAorPFU4REFEPiA8VThEQUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotq0wCis8VTk0NzA+IDxVOTQ3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mRsDgKKzxVOTRBNT4gPFU5NEE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZKlMTU3MQorPFU5NzdGPiA8VTk3N0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnb8wCis8VTlEQzI+IDxVOURDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m3gjAKKzxVOUU1RT4gPFU5RTVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bmeMTAxCis8VTUwM0I+IDxVNTAzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAuzAKKzxVNTY0RT4gPFU1NjRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZmOMjg3Cis8VTYzOTY+IDxVNjM5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aOljE5NQorPFU2OTMwPiA8VTY5MzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpLAyMzYKKzxVNkY3MT4gPFU2RjcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r2xMAorPFU4MDM2PiA8VTgwMzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogLYzMDUyCis8VTg4MkU+IDxVODgyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+igrjAKKzxVNDRDOT4gPFU0NEM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JOJMAorPFU0OTdBPiA8VTQ5N0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpbowCis8VTVDRUI+IDxVNUNFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WzqzAKKzxVNjM1Mz4gPFU2MzUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o2TMAorPFU2M0Y2PiA8VTYzRjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmj7Y2OAorPFU2NEU4PiA8VTY0RTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmk6gwCis8VTcyMzc+IDxVNzIzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eItzE4MjEzCis8VTcyM0E+IDxVNzIzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eIujEzCis8VTc0NTg+IDxVNzQ1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eRmDAKKzxVOTFGRT4gPFU5MUZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ye+MAorPFU5MkUzPiA8VTkyRTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpi6MwCis8VTkzODE+IDxVOTM4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mOgTAKKzxVOTREOD4gPFU5NEQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZOYMAorPFUzNjUyPiA8VTM2NTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmZIwCis8VTRFNUY+IDxVNEU1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S5nzI0MzMzMworPFU1MUI2PiA8VTUxQjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhrYzMzQKKzxVNTQxND4gPFU1NDE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZCUMTEKKzxVNTYyMj4gPFU1NjIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZiiOQorPFU1N0RDPiA8VTU3REM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPln5wxCis8VTU4QzQ+IDxVNThDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WjhDAKKzxVNkYxQz4gPFU2RjFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rycMAorPFU5MUNFPiA8VTkxQ0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPph44xMDM2NgorPFUzNDE2PiA8VTM0MTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkJYwCis8VTM1QTE+IDxVMzVBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OWoTAKKzxVMzVCNj4gPFUzNUI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45a2MAorPFUzNUZDPiA8VTM1RkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjl7wwCis8VTM2NkE+IDxVMzY2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OZqjAKKzxVMzc2Mz4gPFUzNzYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj452jMAorPFUzOTc3PiA8VTM5Nzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpbcwCis8VTNBNEU+IDxVM0E0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OpjjAKKzxVM0E5MT4gPFUzQTkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46qRMAorPFUzQzQ5PiA8VTNDNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsYkwCis8VTNFMjM+IDxVM0UyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O4ozAKKzxVNDIwRT4gPFU0MjBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IiOMAorPFU0OTMzPiA8VTQ5MzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpLMwCis8VTQ5MzY+IDxVNDkzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SktjAKKzxVNDk1Rj4gPFU0OTVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KWfMAorPFU0OTYxPiA8VTQ5NjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpaEwCis8VTQ5RTg+IDxVNDlFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SnqDAKKzxVNEI1Rj4gPFU0QjVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K2fMAorPFU0QzlDPiA8VTRDOUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkspwwCis8VTRFMUE+IDxVNEUxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S4mjM0MTY3Cis8VTRFQjE+IDxVNEVCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6sTAKKzxVNTA1RT4gPFU1MDVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YGeMAorPFU1MEY3PiA8VTUwRjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlg7cwCis8VTUzRjY+IDxVNTNGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPtjEyMDM5Cis8VTU2ODg+IDxVNTY4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WaiDAKKzxVNThCNz4gPFU1OEI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aK3MAorPFU1OTFDPiA8VTU5MUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpJwyNzMxNworPFU1REFBPiA8VTVEQUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltqowCis8VTVEQUI+IDxVNURBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W2qzAKKzxVNUZFNj4gPFU1RkU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b+mMAorPFU2NERCPiA8VTY0REI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmk5swCis8VTY0RUE+IDxVNjRFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aTqjAKKzxVNjRFQj4gPFU2NEVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pOrMAorPFU2NjU0PiA8VTY2NTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmZQxMDAKKzxVNjZDND4gPFU2NkM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5puEMAorPFU2NkM1PiA8VTY2QzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmm4UwCis8VTY2RDc+IDxVNjZENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ablzAKKzxVNjZGMz4gPFU2NkYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5puzNDY0Cis8VTY2RjU+IDxVNjZGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+abtTAKKzxVNjdCQz4gPFU2N0JDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p68MAorPFU2N0JEPiA8VTY3QkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnr0wCis8VTY5NkQ+IDxVNjk2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+alrTE1MworPFU2Qjk3PiA8VTZCOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrpcwCis8VTZCOUM+IDxVNkI5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aunDAKKzxVNkRCMj4gPFU2REIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rayMjU2NworPFU2RkIyPiA8VTZGQjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvrIwCis8VTcwRTg+IDxVNzBFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eDqDEwOQorPFU3MTYwPiA8VTcxNjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhaAwCis8VTcxQzE+IDxVNzFDMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHgTIKKzxVNzIxNz4gPFU3MjE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54iXMAorPFU3NkEzPiA8VTc2QTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmqMwCis8VTc3QjE+IDxVNzdCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eesTAKKzxVNzdCOD4gPFU3N0I4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5564MAorPFU4MTRCPiA8VTgxNEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohYsyNjYKKzxVOEIwMT4gPFU4QjAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KyBMQorPFU4QzEyPiA8VThDMTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosJIxMDkKKzxVOTBCQT4gPFU5MEJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YK6MTUKKzxVOTEzND4gPFU5MTM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YS0MAorPFU5MzcxPiA8VTkzNzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjbEwCis8VTkzOTE+IDxVOTM5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mOkTAKKzxVOTQzNz4gPFU5NDM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZC3MAorPFU5NzY1PiA8VTk3NjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnaU5OQorPFU5NzY4PiA8VTk3Njg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnagwCis8VTk4MDE+IDxVOTgwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mggTEwMgorPFU5ODc1PiA8VTk4NzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpobU2MTAwNworPFU5OTIzPiA8VTk5MjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppKMwCis8VTk5NDE+IDxVOTk0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mlgTAKKzxVOTk4Qz4gPFU5OThDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aaMMAorPFU5QTVDPiA8VTlBNUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqZwwCis8VTlEN0E+IDxVOUQ3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m1ujAKKzxVOUUwOD4gPFU5RTA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6biIMAorPFUzNjA4PiA8VTM2MDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmIgwCis8VTRFMDA+IDxVNEUwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S4gDEwNTcxNTUKKzxVNEYwQT4gPFU0RjBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LyKMTA1NTgKKzxVNEY5RD4gPFU0RjlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L6dMTYzMzIKKzxVNTMzQj4gPFU1MzNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Yy7MTM1ODkKKzxVNTQxQT4gPFU1NDFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZCaMAorPFU1NEJGPiA8VTU0QkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkr8yMTYKKzxVNTY2Qj4gPFU1NjZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZmrMjI2Cis8VTU4RjE+IDxVNThGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WjsTAKKzxVNThGOT4gPFU1OEY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aO5OTQKKzxVNTkwMT4gPFU1OTAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aSBMAorPFU1QURCPiA8VTVBREI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlq5swCis8VTVCMDQ+IDxVNUIwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WshDAKKzxVNURBQz4gPFU1REFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5basMAorPFU1RjBDPiA8VTVGMEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvIwwCis8VTYwOTg+IDxVNjA5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aCmDAKKzxVNjNENj4gPFU2M0Q2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+WNDcyCis8VTY2QzA+IDxVNjZDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+abgDAKKzxVNkFCOT4gPFU2QUI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qq5MAorPFU2QkM5PiA8VTZCQzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmr4kwCis8VTZEMjI+IDxVNkQyMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a0ojAKKzxVNkVCMD4gPFU2RUIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqwMAorPFU2RjJBPiA8VTZGMkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvKoyMjMKKzxVNzFEQT4gPFU3MURBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54eaMAorPFU3MzE3PiA8VTczMTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjJcxNgorPFU3NDdGPiA8VTc0N0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkb8wCis8VTc5NEU+IDxVNzk0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eljjEKKzxVNzk5NT4gPFU3OTk1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56aVMAorPFU3QTI2PiA8VTdBMjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqKYwCis8VTdFNDQ+IDxVN0U0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5hDEKKzxVODZEQz4gPFU4NkRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JucMAorPFU4ODYzPiA8VTg4NjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooaMyMjU5OQorPFU4ODY0PiA8VTg4NjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooaQyMAorPFU4QjY5PiA8VThCNjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorakwCis8VTkwRkM+IDxVOTBGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mDvDAKKzxVOTFBQj4gPFU5MUFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YarNTgKKzxVOTJBNT4gPFU5MkE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YqlMAorPFU5NEYxPiA8VTk0RjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpk7E0MworPFU5NjZEPiA8VTk2NkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpma0wCis8VTk5MEY+IDxVOTkwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mkjzAKKzxVOURENj4gPFU5REQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6beWMAorPFU5RTY1PiA8VTlFNjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuaUwCis8VTlFREY+IDxVOUVERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7nzEKKzxVOUVGMz4gPFU5RUYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6buzMAorPFUzNkE2PiA8VTM2QTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmqYwCis8VTM3NTY+IDxVMzc1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OdljAKKzxVMzc5ND4gPFUzNzk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj456UMAorPFUzOTc0PiA8VTM5NzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpbQwCis8VTM5QkU+IDxVMzlCRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OmvjAKKzxVM0MxOD4gPFUzQzE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47CYMAorPFUzRUJGPiA8VTNFQkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjur8wCis8VTQxMkM+IDxVNDEyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SErDAKKzxVNDFGNT4gPFU0MUY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ie1MAorPFU0NDA1PiA8VTQ0MDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkIUwCis8VTQ0MTY+IDxVNDQxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SQljAKKzxVNDU4QT4gPFU0NThBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JaKMAorPFU0Nzg1PiA8VTQ3ODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknoUwCis8VTRBNUY+IDxVNEE1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SpnzAKKzxVNEIwMT4gPFU0QjAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KyBMAorPFU0QjJFPiA8VTRCMkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrK4wCis8VTRCOEE+IDxVNEI4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SuijAKKzxVNEM0Qz4gPFU0QzRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LGMMAorPFU0QzkxPiA8VTRDOTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkspEwCis8VTREMEE+IDxVNEQwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S0ijAKKzxVNEU0MT4gPFU0RTQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LmBMgorPFU0RUVBPiA8VTRFRUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPku6ozNzAzCis8VTRGODc+IDxVNEY4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+hzAKKzxVNTEwMD4gPFU1MTAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YSANDgKKzxVNTE5RD4gPFU1MTlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YadMAorPFU1MzFDPiA8VTUzMUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljJwxCis8VTU0QTY+IDxVNTRBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WSpjUxMgorPFU1NzJGPiA8VTU3MkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnK85Cis8VTU5Mzc+IDxVNTkzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WktzEwOTgKKzxVNTlFOD4gPFU1OUU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aeoMjkyOAorPFU1QjkwPiA8VTVCOTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrpAwCis8VTVCOUM+IDxVNUI5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WunDM4MzMKKzxVNUJBNz4gPFU1QkE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a6nMQorPFU1QkYyPiA8VTVCRjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlr7IwCis8VTVDRDM+IDxVNUNEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WzkzAKKzxVNURCNz4gPFU1REI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ba3MQorPFU1REY4PiA8VTVERjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlt7gwCis8VTVGMkM+IDxVNUYyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W8rDAKKzxVNUY1Qj4gPFU1RjVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b2bMAorPFU1RjVDPiA8VTVGNUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvZwwCis8VTVGNUQ+IDxVNUY1RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W9nTE3MworPFU1RjVFPiA8VTVGNUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvZ4wCis8VTYwMjE+IDxVNjAyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aAoTE1MDIKKzxVNjA1RT4gPFU2MDVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oGeMAorPFU2MjQ1PiA8VTYyNDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiYUwCis8VTY2ODY+IDxVNjY4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aahjAKKzxVNjc1RD4gPFU2NzVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p2dMAorPFU2N0MyPiA8VTY3QzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmn4IwCis8VTY4NEI+IDxVNjg0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ahizAKKzxVNjkzOD4gPFU2OTM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qS4MAorPFU2QjRCPiA8VTZCNEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrYswCis8VTZDODI+IDxVNkM4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aygjEwNAorPFU2Q0I2PiA8VTZDQjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsrYwCis8VTZEMUY+IDxVNkQxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a0nzAKKzxVNzFBQT4gPFU3MUFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54aqMAorPFU3M0M2PiA8VTczQzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnj4YwCis8VTc0RjU+IDxVNzRGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eTtTAKKzxVNzU5MT4gPFU3NTkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55aRMTQzNTQKKzxVNzVDRD4gPFU3NUNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55eNMjYKKzxVNzcyND4gPFU3NzI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55ykMAorPFU3NzMxPiA8VTc3MzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnLEwCis8VTc5RkI+IDxVNzlGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+enuzkyNzQKKzxVN0IyQj4gPFU3QjJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56yrMTgKKzxVN0MwMz4gPFU3QzAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57CDMAorPFU3RkEwPiA8VTdGQTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvqAwCis8VTgwRjA+IDxVODBGMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iDsDYyCis8VTg0MTM+IDxVODQxMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iQkzAKKzxVODZFNj4gPFU4NkU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JumMAorPFU4Nzk0PiA8VTg3OTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonpQwCis8VTg4NkE+IDxVODg2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ihqjEKKzxVODg5OD4gPFU4ODk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KKYMAorPFU4OEIyPiA8VTg4QjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoorIwCis8VTg5RkE+IDxVODlGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+inujAKKzxVOEExMT4gPFU4QTExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KiRMgorPFU4QTUyPiA8VThBNTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqZIwCis8VThBQkM+IDxVOEFCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iqvDExCis8VThCM0I+IDxVOEIzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+isuzAKKzxVOEI4OT4gPFU4Qjg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K6JMAorPFU4QkQyPiA8VThCRDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor5IxMQorPFU4Q0E0PiA8VThDQTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosqQwCis8VThDQkQ+IDxVOENCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iyvTAKKzxVOEQzQj4gPFU4RDNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LS7Mjc0Cis8VThERTA+IDxVOERFMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i3oDAKKzxVOEZDNj4gPFU4RkM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L+GMAorPFU4RkU0PiA8VThGRTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPov6QxMTkKKzxVOEZGQj4gPFU4RkZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L+7MQorPFU5MDU3PiA8VTkwNTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgZc3Mjc3Cis8VTkxNEY+IDxVOTE0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mFjzAKKzxVOTIzNj4gPFU5MjM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Yi2MAorPFU5Mjk1PiA8VTkyOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpipUwCis8VTk4MDk+IDxVOTgwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mgiTAKKzxVOTgyND4gPFU5ODI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aCkMAorPFU5ODI1PiA8VTk4MjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoKUwCis8VTk4NEE+IDxVOTg0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mhijAKKzxVOTg5MD4gPFU5ODkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aKQNTM5Cis8VTk4RjQ+IDxVOThGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mjtDAKKzxVOUJBNz4gPFU5QkE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a6nMAorPFU5RTAzPiA8VTlFMDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuIMwCis8VTM1NjU+IDxVMzU2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OVpTAKKzxVMzgyRj4gPFUzODJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46CvMAorPFUzQTU4PiA8VTNBNTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqZgwCis8VTNBQ0E+IDxVM0FDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OrijAKKzxVM0MxRD4gPFUzQzFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47CdMAorPFUzQzNCPiA8VTNDM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsLswCis8VTQ3NUQ+IDxVNDc1RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SdnTAKKzxVNDlFNz4gPFU0OUU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KenMAorPFU0QzE5PiA8VTRDMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksJkwCis8VTRFNTk+IDxVNEU1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S5mTExNTMKKzxVNEVFNT4gPFU0RUU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LulMjE5NDI0Cis8VTUwMUE+IDxVNTAxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAmjEyNjYKKzxVNTA2Rj4gPFU1MDZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YGvMAorPFU1RDNBPiA8VTVEM0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltLowCis8VTVERjI+IDxVNURGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W3sjg4ODQ4Cis8VTVFQTE+IDxVNUVBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W6oTAKKzxVNjI0Nj4gPFU2MjQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5omGMQorPFU2MzlDPiA8VTYzOUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjpwwCis8VTY1M0E+IDxVNjUzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aUujAKKzxVNjVEMT4gPFU2NUQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5peRMAorPFU2NUQ2PiA8VTY1RDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPml5YyMDkKKzxVNjY3Mj4gPFU2NjcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pmyMAorPFU2OTA1PiA8VTY5MDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpIU0MjQ5Cis8VTZBQTU+IDxVNkFBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aqpTAKKzxVNzdFMz4gPFU3N0UzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+jMTE3OAorPFU3OTEyPiA8VTc5MTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpJIwCis8VTdCMTY+IDxVN0IxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+esljAKKzxVODA5ND4gPFU4MDk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IKUMAorPFU4MEUzPiA8VTgwRTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPog6MxCis8VTgyMjM+IDxVODIyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iIozAKKzxVODI2ND4gPFU4MjY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ImkMAorPFU4MkUxPiA8VTgyRTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi6EzCis8VTgyRTI+IDxVODJFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iLojAKKzxVODY4MT4gPFU4NjgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JqBMTA1OAorPFU4Nzk4PiA8VTg3OTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonpgwCis8VTg3RkI+IDxVODdGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ifuzIKKzxVOEYyMj4gPFU4RjIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LyiMAorPFU4RjU5PiA8VThGNTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovZkwCis8VTkwMTg+IDxVOTAxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mAmDAKKzxVOTFEND4gPFU5MUQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YeUMAorPFU5MjE4PiA8VTkyMTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiJgwCis8VTkyNkY+IDxVOTI2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mJrzAKKzxVOTQ4Nz4gPFU5NDg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZKHMTEKKzxVOTg1Nz4gPFU5ODU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aGXMAorPFU5Q0U2PiA8VTlDRTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPps6YwCis8VTlGNkU+IDxVOUY2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m9rjUzCis8VTM0Mzk+IDxVMzQzOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OQuTAKKzxVMzQ0QT4gPFUzNDRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45GKMAorPFUzNDVDPiA8VTM0NUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkZwwCis8VTM0NjU+IDxVMzQ2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ORpTAKKzxVMzRGNz4gPFUzNEY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45O3MAorPFUzNTM0PiA8VTM1MzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlLQwCis8VTM1ODI+IDxVMzU4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OWgjAKKzxVMzYwMT4gPFUzNjAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45iBMAorPFUzNjBBPiA8VTM2MEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmIowCis8VTM2NjA+IDxVMzY2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OZoDAKKzxVMzY2Rj4gPFUzNjZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45mvMAorPFUzNkE0PiA8VTM2QTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmqQwCis8VTM2RDU+IDxVMzZENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OblTAKKzxVMzcwQj4gPFUzNzBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45yLMAorPFUzNzEyPiA8VTM3MTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnJIwCis8VTM4NkI+IDxVMzg2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OhqzAKKzxVMzg3Qz4gPFUzODdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46G8MAorPFUzODlFPiA8VTM4OUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjop4wCis8VTM4QzI+IDxVMzhDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OjgjAKKzxVMzhGQj4gPFUzOEZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46O7MAorPFUzOTg5PiA8VTM5ODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpokwCis8VTM5QTQ+IDxVMzlBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OmpDAKKzxVM0M0NT4gPFUzQzQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47GFMAorPFUzQzcyPiA8VTNDNzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsbIwCis8VTNDQkM+IDxVM0NCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OyvDAKKzxVM0NEMT4gPFUzQ0QxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47ORMAorPFUzRDAxPiA8VTNEMDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtIEwCis8VTNEMTI+IDxVM0QxMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O0kjAKKzxVM0Q1RD4gPFUzRDVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47WdMAorPFUzRDY5PiA8VTNENjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtakwCis8VTNEQTA+IDxVM0RBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O2oDAKKzxVM0U1Mz4gPFUzRTUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47mTMAorPFUzRTZEPiA8VTNFNkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjua0wCis8VTNGNDg+IDxVM0Y0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O9iDAKKzxVNDA0Nj4gPFU0MDQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IGGMAorPFU0MTAxPiA8VTQxMDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhIEwCis8VTQxM0Y+IDxVNDEzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SEvzAKKzxVNDFCRj4gPFU0MUJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ia/MAorPFU0MUU5PiA8VTQxRTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkh6kwCis8VTQyNjg+IDxVNDI2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SJqDAKKzxVNDJEQT4gPFU0MkRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IuaMAorPFU0MkY1PiA8VTQyRjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPki7UwCis8VTQzM0I+IDxVNDMzQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SMuzAKKzxVNDM4OD4gPFU0Mzg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I6IMAorPFU0NEMzPiA8VTQ0QzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkk4MwCis8VTQ0Qzg+IDxVNDRDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+STiDAKKzxVNDRGOT4gPFU0NEY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JO5MAorPFU0NTJDPiA8VTQ1MkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklKwwCis8VTQ1NEQ+IDxVNDU0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SVjTAKKzxVNDU4MT4gPFU0NTgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JaBMAorPFU0NUQxPiA8VTQ1RDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkl5EwCis8VTQ1REY+IDxVNDVERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SXnzAKKzxVNDVGNz4gPFU0NUY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Je3MAorPFU0NjFEPiA8VTQ2MUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmJ0wCis8VTQ2Mzg+IDxVNDYzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SYuDAKKzxVNDc1OD4gPFU0NzU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J2YMAorPFU0NzZGPiA8VTQ3NkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkna8wCis8VTQ4ODM+IDxVNDg4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SigzAKKzxVNDhFNz4gPFU0OEU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KOnMAorPFU0OUI0PiA8VTQ5QjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkprQwCis8VTRCMjU+IDxVNEIyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SspTAKKzxVNEI0Mj4gPFU0QjQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K2CMAorPFU0QjQ3PiA8VTRCNDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrYcwCis8VTRCNUU+IDxVNEI1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+StnjAKKzxVNEI3Rj4gPFU0QjdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K2/MAorPFU0QkM2PiA8VTRCQzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkr4YwCis8VTRDNTI+IDxVNEM1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SxkjAKKzxVNEQyQz4gPFU0RDJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LSsMAorPFU0RTQyPiA8VTRFNDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuYIzCis8VTRFNDk+IDxVNEU0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S5iTM3NTk5Cis8VTRFODQ+IDxVNEU4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6hDAKKzxVNEVBNj4gPFU0RUE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LqmNTkxNgorPFU0RUJGPiA8VTRFQkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkur80ODI1Cis8VTRGMDc+IDxVNEYwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S8hzAKKzxVNEYzRj4gPFU0RjNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ly/MAorPFU0RjVBPiA8VTRGNUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvZo3OAorPFU0RjdFPiA8VTRGN0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvb42Cis8VTRGQ0I+IDxVNEZDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S/izAKKzxVNTEwND4gPFU1MTA0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YSEMTEKKzxVNTE3Rj4gPFU1MTdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YW/MAorPFU1MjA4PiA8VTUyMDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliIgxMworPFU1MjkzPiA8VTUyOTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlipMyCis8VTUyQUU+IDxVNTJBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WKrjAKKzxVNTJEQT4gPFU1MkRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YuaMAorPFU1MkU5PiA8VTUyRTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPli6kwCis8VTU0NTM+IDxVNTQ1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRkzE4MAorPFU1NDZEPiA8VTU0NkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlka0wCis8VTU0Nzk+IDxVNTQ3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRuTAKKzxVNTUwOD4gPFU1NTA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZSIMAorPFU1NkM4PiA8VTU2Qzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlm4gyCis8VTU3MUI+IDxVNTcxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WcmzAKKzxVNTdCQz4gPFU1N0JDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z68MAorPFU1N0Y2PiA8VTU3RjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPln7YwCis8VTU3Rjg+IDxVNTdGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfuDQKKzxVNThCRj4gPFU1OEJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aK/MAorPFU1OTU1PiA8VTU5NTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpZUyMTcKKzxVNTlCNz4gPFU1OUI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aa3MAorPFU1QUQ1PiA8VTVBRDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlq5UwCis8VTVCMTE+IDxVNUIxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WskTAKKzxVNUIxRj4gPFU1QjFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ayfMAorPFU1QkYxPiA8VTVCRjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlr7EwCis8VTVDNzk+IDxVNUM3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WxuTE3OQorPFU1Q0M0PiA8VTVDQzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPls4QwCis8VTVEQTc+IDxVNURBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W2pzAKKzxVNUUxRj4gPFU1RTFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bifMAorPFU1RTIwPiA8VTVFMjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluKAwCis8VTVFNDY+IDxVNUU0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W5hjAKKzxVNUVEOT4gPFU1RUQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5buZMAorPFU1RjAyPiA8VTVGMDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvIIxMjgxOQorPFU1RjA4PiA8VTVGMDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvIg4MgorPFU1RjBCPiA8VTVGMEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvIsxMjkKKzxVNUY3OT4gPFU1Rjc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b25MzAwNworPFU1RkM2PiA8VTVGQzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv4Y5MzU2Cis8VTYwMDg+IDxVNjAwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aAiDAKKzxVNjAzRj4gPFU2MDNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oC/NAorPFU2MDkyPiA8VTYwOTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgpI0MgorPFU2MEE1PiA8VTYwQTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgqUwCis8VTYxMEY+IDxVNjEwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aEjzk0ODQ0Cis8VTYxQjY+IDxVNjFCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aGtjc4Cis8VTYxQ0M+IDxVNjFDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aHjDAKKzxVNjFGRj4gPFU2MUZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oe/MTE0Cis8VTYyOTE+IDxVNjI5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aKkTI0ODIKKzxVNjJCND4gPFU2MkI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oq0MAorPFU2MzM5PiA8VTYzMzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjLkxNAorPFU2MzU5PiA8VTYzNTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjZkwCis8VTY0OEU+IDxVNjQ4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aSjjAKKzxVNjU2MT4gPFU2NTYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pWhMAorPFU2NjEzPiA8VTY2MTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmJMxNzQ0MQorPFU2Njc5PiA8VTY2Nzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmbkwCis8VTY2Q0U+IDxVNjZDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+abjjAKKzxVNjc1OT4gPFU2NzU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p2ZMAorPFU2NzhEPiA8VTY3OEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmno0wCis8VTY3QkI+IDxVNjdCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aeuzAKKzxVNjgyNz4gPFU2ODI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qCnMAorPFU2OEVEPiA8VTY4RUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmo60xCis8VTY5OEY+IDxVNjk4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+amjzAKKzxVNjlGNz4gPFU2OUY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qe3MQorPFU2OUY4PiA8VTY5Rjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmp7gwCis8VTZBOEQ+IDxVNkE4RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aqjTAKKzxVNkIyRD4gPFU2QjJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qytMAorPFU2QjVEPiA8VTZCNUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrZ0wCis8VTZCOTQ+IDxVNkI5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aulDAKKzxVNkJBQT4gPFU2QkFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q6qMgorPFU2QkI5PiA8VTZCQjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrrkwCis8VTZCQzU+IDxVNkJDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+avhTEyMzYKKzxVNkNDNj4gPFU2Q0M2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rOGMAorPFU2RDAyPiA8VTZEMDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtIIwCis8VTZENDI+IDxVNkQ0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a1gjAKKzxVNkQ2NT4gPFU2RDY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rWlMAorPFU2RDczPiA8VTZENzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtbMwCis8VTZFNTk+IDxVNkU1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a5mTAKKzxVNkVBMj4gPFU2RUEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqiMTMxOQorPFU2RjY5PiA8VTZGNjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvakwCis8VTZGQkE+IDxVNkZCQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a+ujAKKzxVNzAzNz4gPFU3MDM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54C3MAorPFU3MDg4PiA8VTcwODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngogwCis8VTcxMzI+IDxVNzEzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eEsjAKKzxVNzFBMD4gPFU3MUEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54agMjQ2Cis8VTcxQTQ+IDxVNzFBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eGpDAKKzxVNzFCQz4gPFU3MUJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54a8MAorPFU3MUUxPiA8VTcxRTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnh6EwCis8VTcxRjE+IDxVNzFGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHsTAKKzxVNzM0OD4gPFU3MzQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj542IMAorPFU3M0I0PiA8VTczQjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjrQwCis8VTc1NzA+IDxVNzU3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eVsDIwMQorPFU3NUFCPiA8VTc1QUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlqs1OTkKKzxVNzVFQz4gPFU3NUVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55esMAorPFU3NjE3PiA8VTc2MTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmJcyCis8VTc2MUU+IDxVNzYxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eYnjAKKzxVNzYzMT4gPFU3NjMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55ixMAorPFU3NjU0PiA8VTc2NTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmZQxOQorPFU3NkNBPiA8VTc2Q0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnm4o4MDQ5Cis8VTc3OTY+IDxVNzc5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eeljAKKzxVNzlDNz4gPFU3OUM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56eHMAorPFU3QTUzPiA8VTdBNTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqZMwCis8VTdBRTk+IDxVN0FFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+erqTAKKzxVN0RDNj4gPFU3REM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57eGMAorPFU3RTBBPiA8VTdFMEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuIowCis8VTdFNzY+IDxVN0U3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5tjAKKzxVN0U3OT4gPFU3RTc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57m5NAorPFU3RUNFPiA8VTdFQ0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnu44xMTc0Cis8VTdGMjI+IDxVN0YyMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e8ojkzCis8VTdGOUI+IDxVN0Y5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e+mzAKKzxVN0ZBOT4gPFU3RkE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj576pMzg5Cis8VTdGQkY+IDxVN0ZCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e+vzE0NQorPFU3RkNBPiA8VTdGQ0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnv4oxMworPFU3RkNDPiA8VTdGQ0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnv4wzNjkKKzxVN0ZGMz4gPFU3RkYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57+zNDIKKzxVN0ZGQz4gPFU3RkZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57+8MzYwMgorPFU4MDg0PiA8VTgwODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogoQyMAorPFU4MDhBPiA8VTgwOEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogoowCis8VTgxODk+IDxVODE4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iGiTAKKzxVODFDNj4gPFU4MUM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IeGMzA3Cis8VTgyNTc+IDxVODI1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iJlzAKKzxVODI3QT4gPFU4MjdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Im6ODYyOAorPFU4Mjg1PiA8VTgyODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoioUwCis8VTgyQzU+IDxVODJDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iLhTAKKzxVODRGQT4gPFU4NEZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JO6MAorPFU4NThGPiA8VTg1OEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolo8xMAorPFU4NUQ5PiA8VTg1RDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPol5kwCis8VTg1REQ+IDxVODVERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iXnTQxCis8VTg2MTk+IDxVODYxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iYmTAKKzxVODY0OT4gPFU4NjQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JmJMAorPFU4NkUxPiA8VTg2RTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPom6EwCis8VTg3MzQ+IDxVODczND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ictDY1Cis8VTg3QTA+IDxVODdBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ieoDAKKzxVODhBMz4gPFU4OEEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KKjMAorPFU4OEQ0PiA8VTg4RDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo5Q3NDMKKzxVODhEQj4gPFU4OERCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KObMAorPFU4OTM5PiA8VTg5Mzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopLkwCis8VTg5N0M+IDxVODk3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ilvDAKKzxVOEEzMj4gPFU4QTMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KiyMAorPFU4QTMzPiA8VThBMzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqLMwCis8VThBNjM+IDxVOEE2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ipozAKKzxVOEI2Rj4gPFU4QjZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K2vMTEyCis8VThCNzA+IDxVOEI3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+itsDE3MQorPFU4QjlCPiA8VThCOUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorpsxCis8VThCQUU+IDxVOEJBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iurjI2OTQ2Cis8VThCRDE+IDxVOEJEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ivkTgxOTgKKzxVOEJFMz4gPFU4QkUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K+jMTM3Cis8VThDMEE+IDxVOEMwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwijE3NDIKKzxVOEM1OT4gPFU4QzU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LGZMAorPFU4QzVCPiA8VThDNUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosZswCis8VThDNzc+IDxVOEM3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ixtzAKKzxVOERDNz4gPFU4REM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LeHMAorPFU4RUZDPiA8VThFRkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPou7wwCis8VThGNzY+IDxVOEY3Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i9tjEzMQorPFU5MDM4PiA8VTkwMzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgLgxMjM0Cis8VTkwOTE+IDxVOTA5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mCkTE4MQorPFU5MUIzPiA8VTkxQjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphrMwCis8VTkxQjc+IDxVOTFCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mGtzAKKzxVOTFGND4gPFU5MUY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ye0MAorPFU5MjIwPiA8VTkyMjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiKAwCis8VTkzQjA+IDxVOTNCMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mOsDAKKzxVOTQzRj4gPFU5NDNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZC/MAorPFU5NTUyPiA8VTk1NTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplZI1Cis8VTk1NzE+IDxVOTU3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mVsTEKKzxVOTYyMz4gPFU5NjIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZijMAorPFU5NkJGPiA8VTk2QkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmr8wCis8VTk3MkM+IDxVOTcyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mcrDAKKzxVOTc3RT4gPFU5NzdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z2+MAorPFU5ODYxPiA8VTk4NjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoaEwCis8VTk5NTA+IDxVOTk1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mlkDAKKzxVOTlDNT4gPFU5OUM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aeFMAorPFU5QTVCPiA8VTlBNUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqZsxCis8VTlBN0Y+IDxVOUE3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mpvzY4OAorPFU5QUFFPiA8VTlBQUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqq4wCis8VTlCRTM+IDxVOUJFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mvozAKKzxVOUQ4Mz4gPFU5RDgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6baDMAorPFU5REMxPiA8VTlEQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpt4ExCis8VTlERTc+IDxVOURFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m3pzAKKzxVOURGRT4gPFU5REZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6be+MAorPFU5RUQzPiA8VTlFRDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpu5MwCis8VTlGNzg+IDxVOUY3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m9uDAKKzxVRkExNz4gPFVGQTE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj76iXMAorPFVGQTI1PiA8VUZBMjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPvqKUwCis8VTRGOEM+IDxVNEY4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+jDAKKzxVNTFEMD4gPFU1MUQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YeQMAorPFU1NTkxPiA8VTU1OTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllpE2NgorPFU1NjdFPiA8VTU2N0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmb4wCis8VTU2RDk+IDxVNTZEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WbmTAKKzxVNTZFMD4gPFU1NkUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZugODQxNTYKKzxVNTc5ND4gPFU1Nzk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z6UMAorPFU1ODE5PiA8VTU4MTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloJkzCis8VTU5RkI+IDxVNTlGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WnuzE2MzkKKzxVNUE2Mz4gPFU1QTYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5amjMAorPFU1Q0ZFPiA8VTVDRkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPls74wCis8VTYxMTQ+IDxVNjExND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aElDAKKzxVNjE0Nz4gPFU2MTQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oWHMgorPFU2NDdGPiA8VTY0N0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkb8wCis8VTY4MzY+IDxVNjgzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+agtjAKKzxVNkI0NT4gPFU2QjQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q2FMAorPFU2QzI0PiA8VTZDMjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsKQ1OQorPFU2RDA3PiA8VTZEMDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtIczOQorPFU2RDE1PiA8VTZEMTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtJUwCis8VTZFQjU+IDxVNkVCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a6tTAKKzxVNzYxNj4gPFU3NjE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55iWMworPFU3OThCPiA8VTc5OEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnposwCis8VTc5RjU+IDxVNzlGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+entTAKKzxVN0I0Mz4gPFU3QjQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj562DMAorPFU3RDZBPiA8VTdENkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntao1Cis8VTdERjg+IDxVN0RGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3uDAKKzxVN0VFQz4gPFU3RUVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57usMAorPFU4MzM1PiA8VTgzMzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojLU1MzUKKzxVODM2Qj4gPFU4MzZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I2rMTAxOAorPFU4NDkxPiA8VTg0OTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokpEwCis8VTg1MkQ+IDxVODUyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iUrTEzCis8VTg4QzA+IDxVODhDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ijgDAKKzxVOEFGMj4gPFU4QUYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KuyMAorPFU5MkE2PiA8VTkyQTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiqYwCis8VTk0REY+IDxVOTRERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mTnzEKKzxVOTVDOT4gPFU5NUM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZeJMAorPFU5NjM0PiA8VTk2MzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmLQ3MjA3Cis8VTk2NzA+IDxVOTY3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mZsDQ4Cis8VTk2N0I+IDxVOTY3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mZuzAKKzxVOTY4Mj4gPFU5NjgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZqCMAorPFU5NzIwPiA8VTk3MjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnKAwCis8VTk3ODc+IDxVOTc4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mehzAKKzxVOTdGMz4gPFU5N0YzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z+zMjk1NTYKKzxVOTdGRT4gPFU5N0ZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z++MAorPFU5OUYwPiA8VTk5RjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpp7AwCis8VTlBODM+IDxVOUE4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mqgzEKKzxVOUVFQj4gPFU5RUVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6burMAorPFUzNTQyPiA8VTM1NDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlYIwCis8VTM1OTc+IDxVMzU5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OWlzAKKzxVMzY2Qz4gPFUzNjZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45msMAorPFUzNzU5PiA8VTM3NTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnZkwCis8VTM3QTQ+IDxVMzdBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OepDAKKzxVM0UxMj4gPFUzRTEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47iSMAorPFUzRTVDPiA8VTNFNUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuZwwCis8VTNFNUU+IDxVM0U1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O5njAKKzxVNDRDND4gPFU0NEM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JOEMAorPFU0NTlDPiA8VTQ1OUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklpwwCis8VTRBQTk+IDxVNEFBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SqqTAKKzxVNTE5OD4gPFU1MTk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YaYMAorPFU1NDFGPiA8VTU0MUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkJ8yODU5Cis8VTU2NTY+IDxVNTY1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WZljAKKzxVNTY5QT4gPFU1NjlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZqaMAorPFU1NzAxPiA8VTU3MDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnIEwCis8VTU3QTA+IDxVNTdBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WeoDk5Cis8VTU5MjQ+IDxVNTkyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WkpDQwCis8VTVBNkM+IDxVNUE2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WprDAKKzxVNUJDNT4gPFU1QkM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a+FMjk2Cis8VTVEMUY+IDxVNUQxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W0nzAKKzxVNUQyRj4gPFU1RDJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bSvMAorPFU2NUE2PiA8VTY1QTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlqYwCis8VTZBQUQ+IDxVNkFBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aqrTAKKzxVNkJBNT4gPFU2QkE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q6lMAorPFU2Q0ZGPiA8VTZDRkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPms78wCis8VTZERUI+IDxVNkRFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3qzE3MDcKKzxVNkVEQj4gPFU2RURCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rubMAorPFU3MENFPiA8VTcwQ0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPng44wCis8VTcyQkU+IDxVNzJCRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eKvjAKKzxVNzJGQT4gPFU3MkZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54u6MTUKKzxVNzQ4Qz4gPFU3NDhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55KMMAorPFU3ODkyPiA8VTc4OTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnopIwCis8VTgyQzI+IDxVODJDMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iLgjAKKzxVODM3Nj4gPFU4Mzc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I22MAorPFU4NTI5PiA8VTg1Mjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolKkwCis8VTg3RUI+IDxVODdFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ifqzAKKzxVOEExND4gPFU4QTE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KiUMAorPFU4QTFBPiA8VThBMUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqJowCis8VThBMjE+IDxVOEEyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iooTAKKzxVOEFCRT4gPFU4QUJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Kq+MAorPFU5MTFFPiA8VTkxMUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphJ43Cis8VTkxRkY+IDxVOTFGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mHvzAKKzxVOTIxRD4gPFU5MjFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YidMAorPFU5MjgwPiA8VTkyODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpioAzMQorPFU5M0Q0PiA8VTkzRDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpj5QwCis8VTk0RjY+IDxVOTRGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mTtjEwMjI4Cis8VTk3MkE+IDxVOTcyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mcqjcKKzxVOURFMz4gPFU5REUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bejMAorPFUzNDA2PiA8VTM0MDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkIYwCis8VTM4NjU+IDxVMzg2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OhpTAKKzxVMzk2Rj4gPFUzOTZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46WvMAorPFUzOTdDPiA8VTM5N0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpbwwCis8VTM5QTk+IDxVMzlBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OmqTAKKzxVMzlDOD4gPFUzOUM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46eIMAorPFUzQzQzPiA8VTNDNDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsYMwCis8VTNGOTk+IDxVM0Y5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O+mTAKKzxVNDFEOT4gPFU0MUQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IeZMAorPFU0MzI1PiA8VTQzMjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjKUwCis8VTQ0QTE+IDxVNDRBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SSoTAKKzxVNDkzQT4gPFU0OTNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KS6MAorPFU0QTM4PiA8VTRBMzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqLgwCis8VTRFNUE+IDxVNEU1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S5mjEKKzxVNUMzOT4gPFU1QzM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bC5MzgwMworPFU1REJFPiA8VTVEQkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltr4wCis8VTVFRjQ+IDxVNUVGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W7tDAKKzxVNUYxNT4gPFU1RjE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5byVMTk2NzgKKzxVNkE4Mz4gPFU2QTgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qqDMAorPFU2QUZEPiA8VTZBRkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmq70wCis8VTZERkU+IDxVNkRGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3vjAKKzxVNkZFNj4gPFU2RkU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r+mMAorPFU3NjNFPiA8VTc2M0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmL42NzIKKzxVNzY2RT4gPFU3NjZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55muNQorPFU3OEU0PiA8VTc4RTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPno6QwCis8VTdDOEM+IDxVN0M4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eyjDAKKzxVN0QxNj4gPFU3RDE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57SWMAorPFU3RTJGPiA8VTdFMkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuK8wCis8VTdFQkM+IDxVN0VCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e6vDAKKzxVODYxRj4gPFU4NjFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JifMAorPFU4NjkzPiA8VTg2OTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPompM5NworPFU4N0JFPiA8VTg3QkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonr4wCis8VThCOTQ+IDxVOEI5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iulDAKKzxVOEQ5Qj4gPFU4RDlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LabMAorPFU5MjBGPiA8VTkyMEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiI8wCis8VTk2OTA+IDxVOTY5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+makDgwMjAKKzxVOTZBMD4gPFU5NkEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZqgMAorPFU5NkIxPiA8VTk2QjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmrE5MworPFU5Nzc3PiA8VTk3Nzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnbcwCis8VTk4RUU+IDxVOThFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mjrjAKKzxVOThGMj4gPFU5OEYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aOyMTcKKzxVOTk2RT4gPFU5OTZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aWuMzAwMAorPFU5OUJCPiA8VTk5QkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpprswCis8VTM4RTc+IDxVMzhFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OjpzAKKzxVM0FBNj4gPFUzQUE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46qmMAorPFUzRDA4PiA8VTNEMDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtIgwCis8VTNGMDk+IDxVM0YwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O8iTAKKzxVNDU0Mz4gPFU0NTQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JWDMAorPFU0NkJGPiA8VTQ2QkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmr8wCis8VTQ4NUI+IDxVNDg1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ShmzAKKzxVNDkwMz4gPFU0OTAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KSDMAorPFU0QzlGPiA8VTRDOUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksp8wCis8VTUzNzA+IDxVNTM3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WNsDE2NDg1Cis8VTU3QkQ+IDxVNTdCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WevTAKKzxVNUVENT4gPFU1RUQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5buVMAorPFU2MTZEPiA8VTYxNkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmha0xCis8VTYxOTY+IDxVNjE5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aGljAKKzxVNjE5Nz4gPFU2MTk3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oaXMAorPFU2MURBPiA8VTYxREE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmh5owCis8VTY3MDQ+IDxVNjcwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+achDAKKzxVNkFCQz4gPFU2QUJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qq8MAorPFU2RTVBPiA8VTZFNUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuZowCis8VTZGRTU+IDxVNkZFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a/pTAKKzxVNzMwQz4gPFU3MzBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54yMMAorPFU3NjRBPiA8VTc2NEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmYowCis8VTgwRTQ+IDxVODBFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iDpDI1MQorPFU4MzFBPiA8VTgzMUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojJowCis8VTkxNzM+IDxVOTE3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mFszAKKzxVOUJBMz4gPFU5QkEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a6jMAorPFU1MDQwPiA8VTUwNDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgYAwCis8VTU2MjQ+IDxVNTYyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WYpDE4NQorPFU1NkI2PiA8VTU2QjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmrYwCis8VTVBNzQ+IDxVNUE3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WptDE5MDIKKzxVNUE5Nj4gPFU1QTk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aqWMAorPFU1QUM4PiA8VTVBQzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlq4gwCis8VTVCMzA+IDxVNUIzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WssDcKKzxVNUI0Nj4gPFU1QjQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a2GMAorPFU1QjdFPiA8VTVCN0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrb4wCis8VTVFOTQ+IDxVNUU5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W6lDMzMzYxCis8VTVGREM+IDxVNUZEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W/nDAKKzxVNjFDOT4gPFU2MUM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oeJNDQ2Cis8VTY0ODQ+IDxVNjQ4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aShDQKKzxVNjUxNj4gPFU2NTE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pSWMAorPFU2NzIwPiA8VTY3MjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnKAwCis8VTY4NUM+IDxVNjg1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ahnDAKKzxVNjk2Nz4gPFU2OTY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qWnMAorPFU2QTMxPiA8VTZBMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqLExMjU3Cis8VTZBRkI+IDxVNkFGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aruzgKKzxVNkUzNj4gPFU2RTM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ri2MAorPFU3MTUwPiA8VTcxNTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhZAwCis8VTczRjE+IDxVNzNGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ePsTAKKzxVNzQ1Qj4gPFU3NDVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55GbNjU3Cis8VTc0OEU+IDxVNzQ4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eSjjUKKzxVNzREND4gPFU3NEQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55OUMAorPFU3NTA3PiA8VTc1MDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlIcwCis8VTc1MTY+IDxVNzUxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eUljAKKzxVNzhBND4gPFU3OEE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56KkMAorPFU3OTJGPiA8VTc5MkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpK8wCis8VTdERDM+IDxVN0REMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3kzAKKzxVN0U5Mz4gPFU3RTkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57qTMAorPFU3RjI4PiA8VTdGMjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvKg0MTEKKzxVN0Y0Mj4gPFU3RjQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj572CMzMzCis8VTdGNDM+IDxVN0Y0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9gzAKKzxVN0Y0Qz4gPFU3RjRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj572MMAorPFU4MUJBPiA8VTgxQkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohroxNDMKKzxVODJGMT4gPFU4MkYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IuxMjI1NDkKKzxVODNCQT4gPFU4M0JBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I66NjM4Cis8VTg2MjE+IDxVODYyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iYoTAKKzxVODc2Nz4gPFU4NzY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J2nMAorPFU4ODMzPiA8VTg4MzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooLMwCis8VTg5MkU+IDxVODkyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ikrjAKKzxVOEI3Qj4gPFU4QjdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K27MAorPFU5MzQ4PiA8VTkzNDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjYgwCis8VTk0NEQ+IDxVOTQ0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mRjTAKKzxVOTUzMz4gPFU5NTMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZSzMAorPFU5NzEyPiA8VTk3MTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnJIwCis8VTk3RkE+IDxVOTdGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mfujAKKzxVOUQyQz4gPFU5RDJDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bSsMAorPFU5REE3PiA8VTlEQTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptqcwCis8VTlEQUY+IDxVOURBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m2rzUKKzxVOURFQT4gPFU5REVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6beqMAorPFU5REY5PiA8VTlERjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpt7kxNworPFU5RTBFPiA8VTlFMEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuI4wCis8VTlFMUE+IDxVOUUxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m4mjAKKzxVOUU2Nj4gPFU5RTY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bmmMjIxCis8VTlFNzA+IDxVOUU3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m5sDI1MTMKKzxVMzg4RD4gPFUzODhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46KNMAorPFUzQTE1PiA8VTNBMTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqJUwCis8VTNEMDQ+IDxVM0QwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O0hDAKKzxVM0Q2Qz4gPFUzRDZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47WsMAorPFUzRTU5PiA8VTNFNTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuZkwCis8VTNFNUE+IDxVM0U1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O5mjAKKzxVM0ZEOD4gPFUzRkQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47+YMAorPFU0MDVEPiA8VTQwNUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgZ0wCis8VTQwRjc+IDxVNDBGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SDtzAKKzxVNDQ0OT4gPFU0NDQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JGJMAorPFU0NTY2PiA8VTQ1NjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklaYwCis8VTRBQUY+IDxVNEFBRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SqrzAKKzxVNTBDQz4gPFU1MENDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YOMMAorPFU1NUI2PiA8VTU1QjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllrYwCis8VTU4NEI+IDxVNTg0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WhizAKKzxVNUIzND4gPFU1QjM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ay0MzMzCis8VTVEQzY+IDxVNURDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W3hjAKKzxVNUVFRT4gPFU1RUVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5buuMAorPFU2NTBEPiA8VTY1MEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlI0wCis8VTY5Nzk+IDxVNjk3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aluTY1Cis8VTZBRkY+IDxVNkFGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+arvzAKKzxVNkU4MT4gPFU2RTgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqBMAorPFU2RUUyPiA8VTZFRTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmu6IxMjgKKzxVNkY0Nj4gPFU2RjQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r2GNgorPFU2RkQ5PiA8VTZGRDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmv5kwCis8VTcwMDU+IDxVNzAwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eAhTAKKzxVNzAxQj4gPFU3MDFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54CbNzUKKzxVNzAyMD4gPFU3MDIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54CgMAorPFU3MDJGPiA8VTcwMkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngK8wCis8VTcxOTI+IDxVNzE5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eGkjAKKzxVNzFERj4gPFU3MURGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54efNzQKKzxVNzQ2OT4gPFU3NDY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55GpNQorPFU3NkMxPiA8VTc2QzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnm4EwCis8VTc2Qzg+IDxVNzZDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ebiDIwODIKKzxVN0M1RD4gPFU3QzVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57GdMAorPFU3QzZGPiA8VTdDNkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsa8wCis8VTdFMDg+IDxVN0UwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e4iDEKKzxVODMxND4gPFU4MzE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IyUNjAKKzxVODM2Nz4gPFU4MzY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I2nMzI0Cis8VTgzQjk+IDxVODNCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iOuTExNzAKKzxVODQyND4gPFU4NDI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JCkMTQ4OAorPFU4NDI1PiA8VTg0MjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokKU4MjYzCis8VTg0MjY+IDxVODQyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iQpjI3NworPFU4NDNFPiA8VTg0M0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokL4wCis8VTg0RTU+IDxVODRFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iTpTMwCis8VTg1QzA+IDxVODVDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iXgDAKKzxVODZDRD4gPFU4NkNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JuNMAorPFU4NzQ3PiA8VTg3NDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonYcxMTY0Cis8VTg3N0Y+IDxVODc3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+idvzAKKzxVODdBMj4gPFU4N0EyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J6iMzIKKzxVODgwNT4gPFU4ODA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KCFMTcKKzxVOEIwRD4gPFU4QjBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KyNMAorPFU4RDBGPiA8VThEMEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotI8yNworPFU4RDYyPiA8VThENjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotaIyMzc5Cis8VThGQ0U+IDxVOEZDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i/jjc2MjMKKzxVOTNBMz4gPFU5M0EzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y6jMAorPFUzQkNCPiA8VTNCQ0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjr4swCis8VTNDOUY+IDxVM0M5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OynzAKKzxVNDAzND4gPFU0MDM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IC0MAorPFU0QTBEPiA8VTRBMEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqI0wCis8VTRCNEE+IDxVNEI0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+StijAKKzxVNEI1Nz4gPFU0QjU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K2XMAorPFU1RENBPiA8VTVEQ0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlt4owCis8VTVGNzE+IDxVNUY3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W9sTI1NjE4Cis8VTY4QUM+IDxVNjhBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+airDAKKzxVNkQ2Nz4gPFU2RDY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rWnMAorPFU2RjQxPiA8VTZGNDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvYEwCis8VTcwMzQ+IDxVNzAzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eAtDAKKzxVNzQ4ND4gPFU3NDg0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55KEMAorPFU3NjNGPiA8VTc2M0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmL8yCis8VTc2NkQ+IDxVNzY2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eZrTAKKzxVNzdFOD4gPFU3N0U4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55+oMAorPFU3QTRFPiA8VTdBNEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqY4xCis8VTkwRTI+IDxVOTBFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mDojUwCis8VTk4MzQ+IDxVOTgzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mgtDAKKzxVOTg4RD4gPFU5ODhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aKNMzA4Cis8VTk4OTU+IDxVOTg5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+milTAKKzxVOTg5Nj4gPFU5ODk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aKWNzg5Cis8VTM0NUU+IDxVMzQ1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ORnjAKKzxVNDA1MD4gPFU0MDUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IGQMAorPFU0NjZDPiA8VTQ2NkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmawwCis8VTQ5MUQ+IDxVNDkxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SknTAKKzxVNTY1Rj4gPFU1NjVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZmfMAorPFU1QUI1PiA8VTVBQjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqrU4Cis8VTY0NkM+IDxVNjQ2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aRrDAKKzxVNjYyMD4gPFU2NjIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pigNDQzMAorPFU2NjhFPiA8VTY2OEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmo4wCis8VTc4NkM+IDxVNzg2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ehrDkzMjgKKzxVODFBMT4gPFU4MUExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IahMAorPFU4QjREPiA8VThCNEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorY0wCis8VThDQ0Y+IDxVOENDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+izjzAKKzxVOTQxQj4gPFU5NDFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZCbMAorPFU5Nzk1PiA8VTk3OTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnpUwCis8VTU0REY+IDxVNTRERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WTnzEyOTQKKzxVNTUzNz4gPFU1NTM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZS3MjI4Cis8VTU1QjI+IDxVNTVCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WWsjMKKzxVNEY2Mz4gPFU0RjYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L2jOTMwCis8VTU1Qzg+IDxVNTVDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WXiDAKKzxVNTY3MD4gPFU1NjcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZmwMQorPFU1ODg5PiA8VTU4ODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlookyOTQKKzxVNThDNT4gPFU1OEM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aOFNDAKKzxVNUVCOD4gPFU1RUI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bq4MjIwOQorPFU1RUYxPiA8VTVFRjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlu7EwCis8VTYxNzU+IDxVNjE3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aFtTE3NworPFU2MkU1PiA8VTYyRTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmi6U4MDEwCis8VTY0QzE+IDxVNjRDMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aTgTgzCis8VTZFRkQ+IDxVNkVGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a7vTAKKzxVNkZBRD4gPFU2RkFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r6tMAorPFU3MDQ5PiA8VTcwNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngYkwCis8VTcyNDU+IDxVNzI0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eJhTAKKzxVNzVDOD4gPFU3NUM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55eIOAorPFU3NjU1PiA8VTc2NTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmZUwCis8VTc2NzA+IDxVNzY3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eZsDAKKzxVODFDMz4gPFU4MUMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IeDMTAxCis8VTkwOTU+IDxVOTA5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mClTUKKzxVOTBGQT4gPFU5MEZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YO6MAorPFU5MTE4PiA8VTkxMTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphJgwCis8VTkyQkY+IDxVOTJCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mKvzAKKzxVOTNERT4gPFU5M0RFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y+eMAorPFU5NTVCPiA8VTk1NUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplZsyNgorPFU5NkNEPiA8VTk2Q0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpm40yNDU5Cis8VTk2REQ+IDxVOTZERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mbnTMKKzxVOTk1ND4gPFU5OTU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aWUNAorPFU5QzQ1PiA8VTlDNDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsYUwCis8VTlDRDk+IDxVOUNEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mzmTAKKzxVMzc1OD4gPFUzNzU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj452YMAorPFU0NUU0PiA8VTQ1RTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkl6QwCis8VTUwOUI+IDxVNTA5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WCmzAKKzxVNTU4MT4gPFU1NTgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZaBNjcKKzxVNUFDNj4gPFU1QUM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5auGMAorPFU1QURFPiA8VTVBREU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlq54wCis8VTVCMkI+IDxVNUIyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WsqzAKKzxVNUQ3MT4gPFU1RDcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bWxMAorPFU2OUU2PiA8VTY5RTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmp6YwCis8VTk4NTI+IDxVOTg1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mhkjAKKzxVOTg5OT4gPFU5ODk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aKZMQorPFUzNjcyPiA8VTM2NzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmbIwCis8VTM5Qjc+IDxVMzlCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OmtzAKKzxVM0RDRj4gPFUzRENGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47ePMAorPFUzRjZCPiA8VTNGNkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvaswCis8VTQ3QkI+IDxVNDdCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SeuzAKKzxVNEZEMT4gPFU0RkQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L+RNjkKKzxVNTJDNz4gPFU1MkM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YuHNjA1MworPFU1MkM4PiA8VTUyQzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPli4gwCis8VTU0OEY+IDxVNTQ4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WSjzM3NAorPFU1N0M3PiA8VTU3Qzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPln4cxCis8VTU4NEU+IDxVNTg0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WhjjAKKzxVNUY2RT4gPFU1RjZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b2uMAorPFU2MDdGPiA8VTYwN0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgb8xNjUKKzxVNjA4MD4gPFU2MDgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oKAMAorPFU2MEU1PiA8VTYwRTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmg6UwCis8VTYxMTE+IDxVNjExMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aEkTAKKzxVNjEzOT4gPFU2MTM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oS5MAorPFU2MTQyPiA8VTYxNDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhYIwCis8VTY0MDg+IDxVNjQwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aQiDAKKzxVNjdFMT4gPFU2N0UxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p+hMAorPFU2ODEwPiA8VTY4MTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoJAwCis8VTZDMzg+IDxVNkMzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+awuDE1NjA2Cis8VTZDRjM+IDxVNkNGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+azszE0OTAKKzxVNkQ4Qz4gPFU2RDhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5raMMzQ2MAorPFU3NTJDPiA8VTc1MkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlKwxNTgKKzxVNzg2Nz4gPFU3ODY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56GnMAorPFU3OTlDPiA8VTc5OUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnppwwCis8VTg2Rjk+IDxVODZGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ibuTU3Cis8VThBNjA+IDxVOEE2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ipoDIKKzxVOEUwQT4gPFU4RTBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LiKMTA0Cis8VThFMzQ+IDxVOEUzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i4tDAKKzxVOTJBMj4gPFU5MkEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YqiMAorPFU5QkQyPiA8VTlCRDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpr5IwCis8VTlDQUM+IDxVOUNBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+myrDAKKzxVMzdCMj4gPFUzN0IyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj456yMAorPFUzREIyPiA8VTNEQjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtrIwCis8VTc1Mjg+IDxVNzUyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eUqDEzNzM4MAorPFU4MkRBPiA8VTgyREE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi5owCis8VTkxOUY+IDxVOTE5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mGnzAKKzxVNEYxOD4gPFU0RjE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LyYNzg3MgorPFU1MTJBPiA8VTUxMkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhKo0MworPFU1NDY2PiA8VTU0NjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkaYyNDYKKzxVNTY5OD4gPFU1Njk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZqYMAorPFU1RTdEPiA8VTVFN0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlub00MDg4Cis8VTVGRTc+IDxVNUZFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W/pzU1MDgKKzxVNjAyRT4gPFU2MDJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oCuMAorPFU2MEEwPiA8VTYwQTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgqAzNTI2Cis8VTYxODI+IDxVNjE4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aGgjQwCis8VTYxRUU+IDxVNjFFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aHrjAKKzxVNjUzOD4gPFU2NTM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pS4MTA0Cis8VTZBQ0M+IDxVNkFDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+arjDAKKzxVNzAwMD4gPFU3MDAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54CAMAorPFU3RThCPiA8VTdFOEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuoswCis8VTgwMzA+IDxVODAzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iAsDAKKzxVOTEzRT4gPFU5MTNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YS+MAorPFU5RTgwPiA8VTlFODA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuoAwCis8VTM0QTE+IDxVMzRBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OSoTAKKzxVMzU3MT4gPFUzNTcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45WxMAorPFUzNjI1PiA8VTM2MjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmKUwCis8VTM2QUQ+IDxVMzZBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OarTAKKzxVMzZEQz4gPFUzNkRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45ucMAorPFUzQUNEPiA8VTNBQ0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjq40wCis8VTNDRkE+IDxVM0NGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OzujAKKzxVM0VDMD4gPFUzRUMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47uAMAorPFUzRjU1PiA8VTNGNTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvZUwCis8VTQ0N0I+IDxVNDQ3Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SRuzAKKzxVNDVCQj4gPFU0NUJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ja7MAorPFU0NjgzPiA8VTQ2ODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmoMwCis8VTQ4OEE+IDxVNDg4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SiijAKKzxVNDg5Rj4gPFU0ODlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KKfMAorPFU1MDY0PiA8VTUwNjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgaQwCis8VTVDMjQ+IDxVNUMyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WwpDU3MDEKKzxVNUNGMz4gPFU1Q0YzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bOzMAorPFU2MDIzPiA8VTYwMjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgKMwCis8VTY1QkY+IDxVNjVCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWvzAKKzxVNjdEQT4gPFU2N0RBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p+aOTUKKzxVNjk2Mj4gPFU2OTYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qWiMQorPFU2QUZFPiA8VTZBRkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmq74wCis8VTZDOEI+IDxVNkM4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ayizAKKzxVNkNCOT4gPFU2Q0I5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rK5ODkzMQorPFU2RDVGPiA8VTZENUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtZ8wCis8VTZFMzg+IDxVNkUzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a4uDE2ODk3Cis8VTZFRkE+IDxVNkVGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a7ujAKKzxVNzJCOT4gPFU3MkI5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54q5NTQ4MAorPFU3MzM2PiA8VTczMzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjLY2NgorPFU3MzM3PiA8VTczMzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjLczNQorPFU3NTMxPiA8VTc1MzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlLE1MTk5MworPFU3NUEzPiA8VTc1QTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlqM1OQorPFU3OURFPiA8VTc5REU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnp54wCis8VTgwQUM+IDxVODBBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iCrDAKKzxVODNBND4gPFU4M0E0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I6kMAorPFU4M0I4PiA8VTgzQjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojrgxCis8VTg1NTU+IDxVODU1NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iVlTAKKzxVODZCMD4gPFU4NkIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JqwMTAKKzxVODc2Mz4gPFU4NzYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J2jMjQKKzxVOEEyNz4gPFU4QTI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KinMAorPFU4RjBGPiA8VThGMEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovI8wCis8VThGMzY+IDxVOEYzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i8tjAKKzxVOTAwQz4gPFU5MDBDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YCMMAorPFU5MDMwPiA8VTkwMzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgLAwCis8VTkwNEE+IDxVOTA0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mBijMzNworPFU5MDhFPiA8VTkwOEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgo4wCis8VTkwQUU+IDxVOTBBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mCrjM1NTQKKzxVOTBGNT4gPFU5MEY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YO1NDQKKzxVOTIzRT4gPFU5MjNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Yi+MzIKKzxVOTRDMD4gPFU5NEMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZOAMjY2Cis8VTk5QzA+IDxVOTlDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mngDAKKzxVOUI3Nz4gPFU5Qjc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a23MAorPFU5QjhCPiA8VTlCOEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPproswCis8VTlDN0Y+IDxVOUM3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxvzc4Cis8VTlDODk+IDxVOUM4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+myiTAKKzxVM0I4Qj4gPFUzQjhCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj466LMAorPFUzQzM2PiA8VTNDMzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsLYwCis8VTNGOUU+IDxVM0Y5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O+njAKKzxVNDE0RT4gPFU0MTRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IWOMAorPFU0NEI0PiA8VTQ0QjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkrQwCis8VTRCMDA+IDxVNEIwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SsgDAKKzxVNEM0Mj4gPFU0QzQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LGCMAorPFU0Q0QxPiA8VTRDRDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPks5EwCis8VTRFMjM+IDxVNEUyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S4ozAKKzxVNTM2Mz4gPFU1MzYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y2jMAorPFU1M0NCPiA8VTUzQ0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlj4szMDA1NQorPFU1Q0IwPiA8VTVDQjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsrAwCis8VTVFQUU+IDxVNUVBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W6rjAKKzxVNjcwOT4gPFU2NzA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pyJNTEyMjMwCis8VTY4ODQ+IDxVNjg4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aihDAKKzxVNjlGMT4gPFU2OUYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qexMAorPFU2Q0QxPiA8VTZDRDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPms5EwCis8VTZFNzU+IDxVNkU3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a5tTAKKzxVNzI1Nj4gPFU3MjU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54mWMTIKKzxVNzI1Nz4gPFU3MjU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54mXMAorPFU3RjkwPiA8VTdGOTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvpAwCis8VTdGOTE+IDxVN0Y5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e+kTAKKzxVODA0OD4gPFU4MDQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IGIMAorPFU4MTFDPiA8VTgxMUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohJwwCis8VTgyQzM+IDxVODJDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iLgzAKKzxVODNBMD4gPFU4M0EwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I6gMzAKKzxVODcwRj4gPFU4NzBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JyPMAorPFU5MTQ5PiA8VTkxNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphYkxMjkKKzxVOTJBQT4gPFU5MkFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YqqMAorPFU5NEQ1PiA8VTk0RDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpk5UxCis8VTlFREQ+IDxVOUVERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7nTQ2NAorPFUzNERDPiA8VTM0REM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjk5wwCis8VTM1NTc+IDxVMzU1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OVlzAKKzxVMzkxMT4gPFUzOTExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46SRMAorPFUzRTY4PiA8VTNFNjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuagwCis8VTNFQTA+IDxVM0VBMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O6oDAKKzxVNDAwMT4gPFU0MDAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ICBMAorPFU0MTlDPiA8VTQxOUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhpwwCis8VTQ2RkI+IDxVNDZGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SbuzAKKzxVNDdBNT4gPFU0N0E1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J6lMAorPFU0RUI0PiA8VTRFQjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkurQwCis8VTRGNTE+IDxVNEY1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S9kTk2MgorPFU0RjkxPiA8VTRGOTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvpE4Cis8VTUzQzg+IDxVNTNDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPiDEwNTkwNworPFU1M0YzPiA8VTUzRjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlj7MxMTg1MQorPFU1NENBPiA8VTU0Q0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlk4owCis8VTU1MDA+IDxVNTUwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUgDAKKzxVNTZGRj4gPFU1NkZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Zu/NTcKKzxVNTlGNz4gPFU1OUY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ae3MAorPFU1QkE1PiA8VTVCQTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrqUyOQorPFU1Q0RGPiA8VTVDREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPls58wCis8VTVFN0M+IDxVNUU3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W5vDI1NDUKKzxVNzI3MD4gPFU3MjcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54mwMAorPFU3MkQ2PiA8VTcyRDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPni5YxCis8VTcyREI+IDxVNzJEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eLmzAKKzxVNzk1MD4gPFU3OTUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56WQOAorPFU3Q0ZGPiA8VTdDRkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPns78wCis8VThBOTg+IDxVOEE5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iqmDE0Cis8VThCRjE+IDxVOEJGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ivsTIzODEKKzxVOEM4MT4gPFU4QzgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LKBMAorPFU4RkY2PiA8VThGRjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPov7YwCis8VTkxNkQ+IDxVOTE2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mFrTAKKzxVOTFDOT4gPFU5MUM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YeJNTkKKzxVOUQyMj4gPFU5RDIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bSiMAorPFU5RjJDPiA8VTlGMkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvKwyMworPFU2MjVDPiA8VTYyNUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiZwwCis8VTY1QkM+IDxVNjVCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWvDExODg1Cis8VTZCRkE+IDxVNkJGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+avujAKKzxVNkRFND4gPFU2REU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rekMjgyCis8VTc2MDA+IDxVNzYwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eYgDMyCis8VTc2RDM+IDxVNzZEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ebkzAKKzxVN0E3Qj4gPFU3QTdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56m7MAorPFU3QjhBPiA8VTdCOEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnroowCis8VTdEMDY+IDxVN0QwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e0hjAKKzxVN0VBMT4gPFU3RUExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57qhMTYKKzxVODY3Nj4gPFU4Njc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Jm2MAorPFU4RkMyPiA8VThGQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPov4IzNDcKKzxVOEZDMz4gPFU4RkMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L+DMAorPFUzNDlDPiA8VTM0OUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkpwwCis8VTM2QTU+IDxVMzZBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OapTAKKzxVMzkyND4gPFUzOTI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46SkMAorPFUzOTU0PiA8VTM5NTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpZQwCis8VTM5NUE+IDxVMzk1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OlmjAKKzxVMzk2NT4gPFUzOTY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46WlMAorPFUzOTlCPiA8VTM5OUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjppswCis8VTNBODA+IDxVM0E4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OqgDAKKzxVM0IwMj4gPFUzQjAyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46yCMAorPFUzQjMwPiA8VTNCMzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrLAwCis8VTNDREI+IDxVM0NEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OzmzAKKzxVM0Q5Qj4gPFUzRDlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47abMAorPFUzREQyPiA8VTNERDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjt5IwCis8VTNFOUU+IDxVM0U5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O6njAKKzxVM0VBRT4gPFUzRUFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47quMAorPFUzRjM2PiA8VTNGMzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvLYwCis8VTQwNjk+IDxVNDA2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SBqTAKKzxVNDA5Qj4gPFU0MDlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IKbMAorPFU0MENCPiA8VTQwQ0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkg4swCis8VTQxMEY+IDxVNDEwRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SEjzAKKzxVNDEyOD4gPFU0MTI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ISoMAorPFU0MzQyPiA8VTQzNDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjYIwCis8VTQzRjg+IDxVNDNGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SPuDAKKzxVNDQzMz4gPFU0NDMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JCzMAorPFU0NTIxPiA8VTQ1MjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklKEwCis8VTQ1RTg+IDxVNDVFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SXqDAKKzxVNDczRD4gPFU0NzNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Jy9MAorPFU0ODkzPiA8VTQ4OTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkopMwCis8VTRBNTI+IDxVNEE1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SpkjAKKzxVNEMzQj4gPFU0QzNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LC7MAorPFU0Qzc3PiA8VTRDNzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksbcwCis8VTRDQTM+IDxVNENBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SyozAKKzxVNEU4RT4gPFU0RThFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LqOMTIyNzU3Cis8VTRFOTA+IDxVNEU5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6kDAKKzxVNEY1OT4gPFU0RjU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L2ZMTA4NDIKKzxVNEZERT4gPFU0RkRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L+eNjE1Cis8VTU1Mzk+IDxVNTUzOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUuTAKKzxVNTgyMz4gPFU1ODIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aCjMAorPFU1ODJDPiA8VTU4MkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloKwwCis8VTU5QTQ+IDxVNTlBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WmpDQ0Cis8VTVBMUI+IDxVNUExQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WomzQKKzxVNUEyRj4gPFU1QTJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aivMAorPFU1QTMxPiA8VTVBMzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqLE4ODYKKzxVNUE4MD4gPFU1QTgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aqAMAorPFU1QjI5PiA8VTVCMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrKkwCis8VTVEMzM+IDxVNUQzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W0szAKKzxVNUQ0RT4gPFU1RDRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bWOMAorPFU1RDVCPiA8VTVENUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltZszCis8VTYxMDk+IDxVNjEwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aEiTI0OTAKKzxVNjExQT4gPFU2MTFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oSaMjQyMworPFU2Mjc1PiA8VTYyNzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmibUwCis8VTYzQzQ+IDxVNjNDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aPhDgxCis8VTY1REY+IDxVNjVERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aXnzAKKzxVNjc0NT4gPFU2NzQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p2FMAorPFU2OTYxPiA8VTY5NjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpaEwCis8VTY5NzA+IDxVNjk3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+alsDAKKzxVNjk4Nj4gPFU2OTg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qaGMjg0Cis8VTZCMjQ+IDxVNkIyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aspDUyCis8VTZCNDg+IDxVNkI0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+atiDAKKzxVNkI1Rj4gPFU2QjVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q2fMAorPFU2Qjc2PiA8VTZCNzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrbYwCis8VTZFMTQ+IDxVNkUxND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a4lDE1MzAKKzxVNkUxRD4gPFU2RTFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ridMjI3Cis8VTZGMDE+IDxVNkYwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a8gTkKKzxVNkY5RT4gPFU2RjlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r6eMAorPFU3MkYzPiA8VTcyRjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPni7MwCis8VTczOTc+IDxVNzM5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eOlzEKKzxVNzM5OT4gPFU3Mzk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj546ZMQorPFU3NDVDPiA8VTc0NUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkZwzMDAKKzxVNzRCNT4gPFU3NEI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55K1MAorPFU3NTZDPiA8VTc1NkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlawwCis8VTc1NkQ+IDxVNzU2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eVrTAKKzxVNzZDMj4gPFU3NkMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55uCMTM3Cis8VTc3NkU+IDxVNzc2RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+edrjAKKzxVNzg2Mj4gPFU3ODYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56GiMAorPFU3OUJBPiA8VTc5QkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpro3MworPFU3QUFDPiA8VTdBQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqqwxCis8VTdBRkQ+IDxVN0FGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ervTE3Cis8VTdDNDU+IDxVN0M0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+exhTAKKzxVN0RGMD4gPFU3REYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57ewMAorPFU3RkFEPiA8VTdGQUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvq0wCis8VTgxNzQ+IDxVODE3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iFtDE1MAorPFU4MUZFPiA8VTgxRkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoh74yMjIKKzxVODIwMT4gPFU4MjAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IiBNQorPFU4MjA2PiA8VTgyMDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiIYxMTgxCis8VTgyNDU+IDxVODI0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iJhTAKKzxVODMzMD4gPFU4MzMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IywMAorPFU4NDM4PiA8VTg0Mzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokLgzOAorPFU4NTREPiA8VTg1NEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolY0xCis8VTg2MUI+IDxVODYxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iYmzAKKzxVODY1RT4gPFU4NjVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JmeNjA2Cis8VTg3NTM+IDxVODc1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+idkzExCis8VTg3Qjg+IDxVODdCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ieuDAKKzxVODg2Nz4gPFU4ODY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KGnMAorPFU4OTE1PiA8VTg5MTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopJUwCis8VTg5QTY+IDxVODlBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+impjEKKzxVODlDRT4gPFU4OUNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KeONjgKKzxVOEFEQj4gPFU4QURCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KubMQorPFU4QjIzPiA8VThCMjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorKMwCis8VThDMDA+IDxVOEMwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwgDcyCis8VThFMzA+IDxVOEUzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i4sDIKKzxVOEYzRj4gPFU4RjNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ly/MTIKKzxVOEY1RD4gPFU4RjVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L2dMAorPFU5MDNFPiA8VTkwM0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgL40MTgKKzxVOTA5OD4gPFU5MDk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKYMAorPFU5MTAzPiA8VTkxMDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphIMwCis8VTkxRUE+IDxVOTFFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mHqjAKKzxVOTM1RD4gPFU5MzVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y2dMAorPFU5NjgzPiA8VTk2ODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmoMwCis8VTk2ODU+IDxVOTY4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mahTI0NgorPFU5NkQzPiA8VTk2RDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpm5MwCis8VTk2RTk+IDxVOTZFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mbqTYKKzxVOTkxOD4gPFU5OTE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aSYNjgKKzxVOTk4MD4gPFU5OTgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aaANTEyCis8VTlBMUY+IDxVOUExRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+monzAKKzxVOUFBQz4gPFU5QUFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aqsMAorPFU5QUMzPiA8VTlBQzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpq4MwCis8VTlCNUE+IDxVOUI1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mtmjY0Cis8VTlCQkQ+IDxVOUJCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+muvTAKKzxVOUMwNT4gPFU5QzA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bCFMAorPFU5QzdDPiA8VTlDN0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsbwxMDIxMworPFU5RDRDPiA8VTlENEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptYwwCis8VTlERTA+IDxVOURFMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m3oDAKKzxVOUUwNj4gPFU5RTA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6biGMAorPFU5RTEyPiA8VTlFMTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuJIwCis8VTlGNzU+IDxVOUY3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m9tTAKKzxVMzQ2OD4gPFUzNDY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45GoMAorPFUzNDgxPiA8VTM0ODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkoEwCis8VTM1MzE+IDxVMzUzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OUsTAKKzxVMzY1MT4gPFUzNjUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45mRMAorPFUzNzYyPiA8VTM3NjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnaIwCis8VTM4MTg+IDxVMzgxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OgmDAKKzxVMzg3MD4gPFUzODcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46GwMAorPFUzOEMzPiA8VTM4QzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjo4MwCis8VTNDQkU+IDxVM0NCRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OyvjAKKzxVM0U4ND4gPFUzRTg0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47qEMAorPFUzRjBDPiA8VTNGMEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvIwwCis8VTQ4QzE+IDxVNDhDMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SjgTAKKzxVNDk0Rj4gPFU0OTRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KWPMAorPFU0QTFFPiA8VTRBMUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqJ4wCis8VTRFMEU+IDxVNEUwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S4jjgwMjI5Cis8VTRFODg+IDxVNEU4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S6iDQzOTUKKzxVNEYxQj4gPFU0RjFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LybMjIKKzxVNEZDMT4gPFU0RkMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L+BMAorPFU0RkUzPiA8VTRGRTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkv6MyCis8VTUwNEE+IDxVNTA0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WBijAKKzxVNTBCND4gPFU1MEI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YK0MAorPFU1MzJDPiA8VTUzMkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljKwwCis8VTU2NzM+IDxVNTY3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WZszAKKzxVNTcwND4gPFU1NzA0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZyENDMKKzxVNTcwOT4gPFU1NzA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZyJNAorPFU1Qjg3PiA8VTVCODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlroc2NDAzCis8VTVCRDk+IDxVNUJEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WvmTAKKzxVNUM3Rj4gPFU1QzdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bG/MzkxCis8VTVEQkM+IDxVNURCQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W2vDEKKzxVNUVCRT4gPFU1RUJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bq+MzQKKzxVNjFEOT4gPFU2MUQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oeZMAorPFU2NTU0PiA8VTY1NTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlZQzCis8VTY1OTQ+IDxVNjU5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWlDAKKzxVNjU5RT4gPFU2NTlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5paeMAorPFU3NDQwPiA8VTc0NDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkYAxCis8VTc2MTA+IDxVNzYxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eYkDUKKzxVNzk2ND4gPFU3OTY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56WkMAorPFU3OUI5PiA8VTc5Qjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnprkzOTcKKzxVN0FCMz4gPFU3QUIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56qzMworPFU3QkZEPiA8VTdCRkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnr70wCis8VTdGQkQ+IDxVN0ZCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e+vTE4NDgKKzxVODA2NT4gPFU4MDY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IGlMAorPFU4MjA3PiA8VTgyMDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiIc1OTkKKzxVODQyRD4gPFU4NDJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JCtMAorPFU4NjBDPiA8VTg2MEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomIwwCis8VTg3QTQ+IDxVODdBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iepDAKKzxVOEE5RT4gPFU4QTlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KqeMzI3Cis8VThCRUQ+IDxVOEJFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ivrTI3NjIwCis8VThDOTA+IDxVOEM5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iykDAKKzxVOTEwNT4gPFU5MTA1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YSFMAorPFU5MTUxPiA8VTkxNTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphZEwCis8VTk2RTg+IDxVOTZFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mbqDE2MDkwCis8VTlGNkM+IDxVOUY2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m9rDAKKzxVOUY4OT4gPFU5Rjg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b6JNDMKKzxVRkExRT4gPFVGQTFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj76ieMAorPFUzODI4PiA8VTM4Mjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoKgwCis8VTNDREE+IDxVM0NEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OzmjAKKzxVM0Y2Mz4gPFUzRjYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj472jMAorPFU0MDRDPiA8VTQwNEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgYwwCis8VTQwOEE+IDxVNDA4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SCijAKKzxVNDFCNz4gPFU0MUI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ia3MAorPFU0MjA1PiA8VTQyMDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiIUwCis8VTQyNUI+IDxVNDI1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SJmzAKKzxVNDJENj4gPFU0MkQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IuWMAorPFU0MzVFPiA8VTQzNUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjZ4wCis8VTQ1ODc+IDxVNDU4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SWhzAKKzxVNDYxOD4gPFU0NjE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JiYMAorPFU0NjMxPiA8VTQ2MzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmLEwCis8VTQ2RDU+IDxVNDZENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SblTAKKzxVNDhBOT4gPFU0OEE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KKpMAorPFU0QTEyPiA8VTRBMTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqJIwCis8VTRCMDQ+IDxVNEIwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SshDAKKzxVNEI4Nz4gPFU0Qjg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K6HMAorPFU0Qjk5PiA8VTRCOTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrpkwCis8VTREMDE+IDxVNEQwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S0gTAKKzxVNEQ2Qj4gPFU0RDZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LWrMAorPFU0RkZDPiA8VTRGRkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkv7wwCis8VTU1ODU+IDxVNTU4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WWhTAKKzxVNTU5MD4gPFU1NTkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZaQMAorPFU1NUE5PiA8VTU1QTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllqkwCis8VTU1QkI+IDxVNTVCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WWuzEzMDgKKzxVNTY0QT4gPFU1NjRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZmKMAorPFU1NzJCPiA8VTU3MkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnKswCis8VTU3REY+IDxVNTdERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+Wfnzc5MDgKKzxVNTgwOT4gPFU1ODA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aCJMQorPFU1OUFBPiA8VTU5QUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpqoxNDMKKzxVNUFENz4gPFU1QUQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5auXMAorPFU1QkQzPiA8VTVCRDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlr5MxODU0Cis8VTVDRUE+IDxVNUNFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+Wzqjc1Cis8VTVEOEU+IDxVNUQ4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W2jjAKKzxVNUVCRD4gPFU1RUJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bq9MAorPFU1RjY3PiA8VTVGNjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvacyCis8VTVGQTE+IDxVNUZBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W+oTMyMTkKKzxVNUZFQz4gPFU1RkVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b+sMAorPFU2MDg2PiA8VTYwODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgoYwCis8VTYwODc+IDxVNjA4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aChzAKKzxVNjBEMD4gPFU2MEQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oOQMAorPFU2MTA4PiA8VTYxMDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhIg0NDEwCis8VTYxN0U+IDxVNjE3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aFvjkKKzxVNjIyQj4gPFU2MjJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oirMAorPFU2NjMxPiA8VTY2MzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmLE0NworPFU2ODJGPiA8VTY4MkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoK8wCis8VTY4REI+IDxVNjhEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ajmzAKKzxVNjhEQz4gPFU2OERDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qOcMAorPFU2OEVCPiA8VTY4RUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmo6swCis8VTZBRjI+IDxVNkFGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+arsjAKKzxVNkIwRT4gPFU2QjBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qyOMAorPFU2QjFEPiA8VTZCMUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrJ0wCis8VTZCMjU+IDxVNkIyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aspTAKKzxVNkIzMj4gPFU2QjMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qyyODYzNgorPFU2QkQzPiA8VTZCRDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmr5MxNzgKKzxVNkQ3ND4gPFU2RDc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rW0MjMzNworPFU2REUyPiA8VTZERTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmt6IwCis8VTZERUY+IDxVNkRFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3rzEKKzxVNkVFQT4gPFU2RUVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ruqMAorPFU2RkE2PiA8VTZGQTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvqYwCis8VTcwNkE+IDxVNzA2QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eBqjAKKzxVNzEzND4gPFU3MTM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54S0MAorPFU3MTVDPiA8VTcxNUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhZw0NgorPFU3MUE4PiA8VTcxQTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhqgyMTEKKzxVNzFDRj4gPFU3MUNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54ePMAorPFU3MUUwPiA8VTcxRTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnh6AxNAorPFU3MjI5PiA8VTcyMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniKkwCis8VTcyRjE+IDxVNzJGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eLsTM0MzgKKzxVNzM0ND4gPFU3MzQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj542EMzgKKzxVNzM1RD4gPFU3MzVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj542dMAorPFU3Mzg5PiA8VTczODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjokxMzM5NworPFU3NDE5PiA8VTc0MTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkJkwCis8VTc2MDk+IDxVNzYwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eYiTAKKzxVNzY1Mj4gPFU3NjUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55mSNQorPFU3N0RFPiA8VTc3REU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnn54wCis8VTc4MjE+IDxVNzgyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+egoTAKKzxVNzg3Mj4gPFU3ODcyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56GyMQorPFU3OTA3PiA8VTc5MDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpIcwCis8VTc5MTY+IDxVNzkxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ekljAKKzxVNzkxQz4gPFU3OTFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56ScMAorPFU3OUE2PiA8VTc5QTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpqYyCis8VTc5RDc+IDxVNzlENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+enlzAKKzxVN0EyMj4gPFU3QTIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56iiMAorPFU3QTM2PiA8VTdBMzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqLYwCis8VTdBNjU+IDxVN0E2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eppTAKKzxVN0M1RT4gPFU3QzVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57GeMAorPFU3RENFPiA8VTdEQ0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnt44wCis8VTdFNTg+IDxVN0U1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5mDAKKzxVN0Y2RD4gPFU3RjZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj572tMAorPFU4MDdGPiA8VTgwN0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogb8yMDcKKzxVODA4MD4gPFU4MDgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IKAMAorPFU4MEIyPiA8VTgwQjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogrI4NzIzCis8VTgyOEI+IDxVODI4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iKizExNworPFU4MjhDPiA8VTgyOEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiowwCis8VTgzMUY+IDxVODMxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iMnzAKKzxVODQyRT4gPFU4NDJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JCuMgorPFU4NEFFPiA8VTg0QUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokq4wCis8VTg0RTM+IDxVODRFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iTozAKKzxVODRGOT4gPFU4NEY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JO5MAorPFU4NTc3PiA8VTg1Nzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolbcwCis8VTg1ODE+IDxVODU4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iWgTIKKzxVODcxRj4gPFU4NzFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JyfMAorPFU4NzJFPiA8VTg3MkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonK42Cis8VTg4QUM+IDxVODhBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iirDAKKzxVODhENT4gPFU4OEQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KOVOTQ2Cis8VThBODk+IDxVOEE4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iqiTE4MjIKKzxVOEFFRD4gPFU4QUVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KutMQorPFU4QjdEPiA8VThCN0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorb0xMworPFU4QzE1PiA8VThDMTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosJU0NjUKKzxVOEM2Qj4gPFU4QzZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LGrMjE5OQorPFU4RUM5PiA8VThFQzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPou4kwCis8VThGMEQ+IDxVOEYwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i8jTAKKzxVOTAzMz4gPFU5MDMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YCzMAorPFU5MDQ3PiA8VTkwNDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgYcxMDYzOAorPFU5MDc5PiA8VTkwNzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgbkwCis8VTkwQzE+IDxVOTBDMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mDgTM4OTcKKzxVOTFBNz4gPFU5MUE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YanMAorPFU5MjNBPiA8VTkyM0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiLowCis8VTkyODk+IDxVOTI4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mKiTAKKzxVOTJDQT4gPFU5MkNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YuKMAorPFU5MzI1PiA8VTkzMjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjKUwCis8VTk0MkQ+IDxVOTQyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mQrTAKKzxVOTRCMD4gPFU5NEIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZKwNjAKKzxVOTVCRT4gPFU5NUJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Za+MAorPFU5NjA4PiA8VTk2MDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmIgxNworPFU5NkE5PiA8VTk2QTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmqkwCis8VTk3MzE+IDxVOTczMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mcsTAKKzxVOTgxMD4gPFU5ODEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aCQOTIKKzxVOTg4ND4gPFU5ODg0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aKEMTA4ODYKKzxVOThFQj4gPFU5OEVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aOrMAorPFU5OTQ3PiA8VTk5NDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppYcwCis8VTk5NkI+IDxVOTk2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mlqzQKKzxVOTlBRD4gPFU5OUFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aatMAorPFU5QTQ4PiA8VTlBNDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqYgwCis8VTlBNkQ+IDxVOUE2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mprTE4NQorPFU5QjMwPiA8VTlCMzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprLAwCis8VTlCMzE+IDxVOUIzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mssTgKKzxVOUIzQj4gPFU5QjNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ay7MTUKKzxVOUI0QT4gPFU5QjRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a2KMAorPFU5Q0ZGPiA8VTlDRkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPps78wCis8VTlEMjU+IDxVOUQyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m0pTAKKzxVOUQyQT4gPFU5RDJBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bSqMAorPFU5RDUyPiA8VTlENTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptZIwCis8VTlERjg+IDxVOURGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m3uDAKKzxVOUU0Nj4gPFU5RTQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bmGMQorPFU5RTZDPiA8VTlFNkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuawxMworPFU5RUU2PiA8VTlFRTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpu6YwCis8VTlGQTU+IDxVOUZBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m+pTAKKzxVNTFBND4gPFU1MUE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YakMTQyMgorPFU1MjQ4PiA8VTUyNDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliYgwCis8VTU2RTY+IDxVNTZFNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WbpjAKKzxVNUIzRD4gPFU1QjNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ay9MAorPFU1QkMzPiA8VTVCQzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlr4MwCis8VTYwQ0M+IDxVNjBDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aDjDAKKzxVNjhFOT4gPFU2OEU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qOpMAorPFU2REY1PiA8VTZERjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmt7UyNQorPFU2RTAxPiA8VTZFMDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuIEwCis8VTZFMDY+IDxVNkUwNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a4hjAKKzxVNkUwQT4gPFU2RTBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5riKMTE2MworPFU2RTE1PiA8VTZFMTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuJUwCis8VTcwNDE+IDxVNzA0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eBgTAKKzxVNzcyMj4gPFU3NzIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55yiMAorPFU4MDk5PiA8VTgwOTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogpkwCis8VTg0N0U+IDxVODQ3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iRvjAKKzxVODRBQz4gPFU4NEFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JKsMAorPFU4NzBFPiA8VTg3MEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonI4wCis8VTg3MzU+IDxVODczNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ictTAKKzxVODhFQj4gPFU4OEVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KOrMAorPFU4OEY3PiA8VTg4Rjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo7cwCis8VTkyRkE+IDxVOTJGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mLujAKKzxVOTlDQz4gPFU5OUNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aeMMAorPFU5Q0Y2PiA8VTlDRjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPps7YxCis8VTlEMUI+IDxVOUQxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m0mzEKKzxVOUQ3Nz4gPFU5RDc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bW3MworPFU5RTIyPiA8VTlFMjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuKI1NgorPFU5RTMzPiA8VTlFMzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuLMzNDEKKzxVOUU1Mz4gPFU5RTUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bmTMAorPFU5RjE4PiA8VTlGMTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvJgwCis8VTlGMUQ+IDxVOUYxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m8nTAKKzxVMzdGNj4gPFUzN0Y2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45+2MAorPFUzOTczPiA8VTM5NzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpbMwCis8VTNFNDk+IDxVM0U0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O5iTAKKzxVNDVBMD4gPFU0NUEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JagMAorPFU0QjI3PiA8VTRCMjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrKcwCis8VTRDQUU+IDxVNENBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SyrjAKKzxVNENEMj4gPFU0Q0QyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LOSMAorPFU0Q0UzPiA8VTRDRTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPks6MwCis8VTUxNDM+IDxVNTE0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WFgzE4MzI3Cis8VTUxODY+IDxVNTE4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WGhjAKKzxVNTM5Rj4gPFU1MzlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y6fNTIwMjMKKzxVNTNBMT4gPFU1M0ExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y6hMAorPFU1M0I1PiA8VTUzQjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljrUwCis8VTU0NTg+IDxVNTQ1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRmDM4MDg5Cis8VTU0RTE+IDxVNTRFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WToTM1OQorPFU1NkVEPiA8VTU2RUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlm60xNDA0MgorPFU1NzA2PiA8VTU3MDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnIY2Nzk2Cis8VTU3MEU+IDxVNTcwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WcjjAKKzxVNTcxMj4gPFU1NzEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZySNTcKKzxVNTcxMz4gPFU1NzEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZyTNjQKKzxVNTdBMz4gPFU1N0EzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z6jNDI0Cis8VTU4NkM+IDxVNTg2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WhrDMKKzxVNTlBNz4gPFU1OUE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aanMAorPFU1QTlCPiA8VTVBOUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqps5OQorPFU1QUI0PiA8VTVBQjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqrQwCis8VTVBQzQ+IDxVNUFDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WrhDAKKzxVNjNGND4gPFU2M0Y0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+0NDM4MgorPFU2NzZDPiA8VTY3NkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnawwCis8VTY5OUU+IDxVNjk5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+amnjAKKzxVNjlBQz4gPFU2OUFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qasMAorPFU2QTdDPiA8VTZBN0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqbwxMgorPFU2QURFPiA8VTZBREU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmq54wCis8VTZDODU+IDxVNkM4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ayhTE0NQorPFU2RTcyPiA8VTZFNzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmubIzCis8VTZFOTA+IDxVNkU5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a6kDQ0Nzg3Cis8VTZFOTI+IDxVNkU5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a6kjAKKzxVNzIzMD4gPFU3MjMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54iwMTcKKzxVNzMyOD4gPFU3MzI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54yoMAorPFU3MzJEPiA8VTczMkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjK0wCis8VTczM0Y+IDxVNzMzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eMvzQ0OQorPFU3MzQyPiA8VTczNDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjYIwCis8VTdCMEU+IDxVN0IwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+esjjAKKzxVN0RFMz4gPFU3REUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57ejNzcKKzxVN0UwMT4gPFU3RTAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57iBMAorPFU3RjE4PiA8VTdGMTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvJg2NzU4Cis8VTdGQjE+IDxVN0ZCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e+sTAKKzxVODQ5RD4gPFU4NDlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JKdMAorPFU4NTk3PiA8VTg1OTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolpcwCis8VTg2OTY+IDxVODY5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ialjEKKzxVODc1RD4gPFU4NzVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J2dMAorPFU4NzZGPiA8VTg3NkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPona8wCis8VTg3ODg+IDxVODc4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ieiDMKKzxVODg4MT4gPFU4ODgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KKBMTA4NworPFU4QzlGPiA8VThDOUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosp8wCis8VThEMjA+IDxVOEQyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i0oDAKKzxVOEY0NT4gPFU4RjQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L2FMQorPFU4Rjk1PiA8VThGOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovpUxOTIKKzxVOTA4RD4gPFU5MDhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKNMAorPFU5MEE3PiA8VTkwQTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgqcwCis8VTkzQjE+IDxVOTNCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mOsTAKKzxVOUEzNT4gPFU5QTM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ai1MAorPFU5QjZEPiA8VTlCNkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpra0wCis8VTlEQTI+IDxVOURBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m2ojAKKzxVOURCMD4gPFU5REIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bawMAorPFU5RUZGPiA8VTlFRkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpu78wCis8VTlGMEI+IDxVOUYwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m8izMKKzxVNDZDND4gPFU0NkM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JuEMAorPFU0NkM3PiA8VTQ2Qzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkm4cwCis8VTRBNjk+IDxVNEE2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SpqTAKKzxVNTlCND4gPFU1OUI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aa0MAorPFU3NkY2PiA8VTc2RjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnm7YwCis8VThGREM+IDxVOEZEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i/nDM3ODY0Cis8VTkwM0E+IDxVOTAzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mAujAKKzxVOTA2MD4gPFU5MDYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YGgMjc3Cis8VTM5MkE+IDxVMzkyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OkqjAKKzxVMzk1MD4gPFUzOTUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46WQMAorPFUzQjQ3PiA8VTNCNDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrYcwCis8VTQxNDg+IDxVNDE0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SFiDAKKzxVNDNDRD4gPFU0M0NEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I+NMAorPFU0QjA3PiA8VTRCMDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrIcwCis8VTRCM0M+IDxVNEIzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SsvDAKKzxVNTA4Nj4gPFU1MDg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YKGMAorPFU1NjZFPiA8VTU2NkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlma4wCis8VTU5MTc+IDxVNTkxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WklzAKKzxVNjAyOD4gPFU2MDI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oCoMzgxNQorPFU2MTNGPiA8VTYxM0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhL8xOTAxOQorPFU2M0JFPiA8VTYzQkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjr4yCis8VTc0NTc+IDxVNzQ1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eRlzIKKzxVNzk5MD4gPFU3OTkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56aQMAorPFU4MkQxPiA8VTgyRDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoi5EzMjEKKzxVODg0Rj4gPFU4ODRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KGPMAorPFU4OTExPiA8VTg5MTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopJEwCis8VTg5MjQ+IDxVODkyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ikpDAKKzxVOEIxQz4gPFU4QjFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KycMAorPFU5NjYyPiA8VTk2NjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmaIyNzM1MQorPFU5ODU4PiA8VTk4NTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoZgxMTMKKzxVNjZGMD4gPFU2NkYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5puwMjEyOQorPFU2NkYxPiA8VTY2RjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmm7EwCis8VTdCQjk+IDxVN0JCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+euuTAKKzxVN0VBNj4gPFU3RUE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57qmMjM5MDIKKzxVMzcyNz4gPFUzNzI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45ynMAorPFUzNzMwPiA8VTM3MzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnLAwCis8VTNCMjY+IDxVM0IyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OspjAKKzxVM0MxQj4gPFUzQzFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47CbMAorPFUzRTRBPiA8VTNFNEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuYowCis8VTQyRDA+IDxVNDJEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SLkDAKKzxVNDU4Mz4gPFU0NTgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JaDMAorPFU0N0UwPiA8VTQ3RTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkn6AwCis8VTQ4MkY+IDxVNDgyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SgrzAKKzxVNDg0Nz4gPFU0ODQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KGHMAorPFU0ODgxPiA8VTQ4ODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkooEwCis8VTQ4QjI+IDxVNDhCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SisjAKKzxVNDkyNj4gPFU0OTI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KSmMAorPFU0OTQzPiA8VTQ5NDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpYMwCis8VTREQjM+IDxVNERCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S2szAKKzxVNTIxNj4gPFU1MjE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YiWOQorPFU1OTlDPiA8VTU5OUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlppwwCis8VTVDODQ+IDxVNUM4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WyhDAKKzxVNUNCMz4gPFU1Q0IzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bKzMjYzNAorPFU1REJEPiA8VTVEQkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltr0xCis8VTYwNzE+IDxVNjA3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBsTAKKzxVNjA4NT4gPFU2MDg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oKFMjEKKzxVNjBBNj4gPFU2MEE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oKmMjI2OQorPFU2MjA5PiA8VTYyMDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiIkwCis8VTYyODg+IDxVNjI4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aKiDAKKzxVNjM3Mz4gPFU2MzczPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o2zMAorPFU2NzA4PiA8VTY3MDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnIg2NDU4OAorPFU2NzgyPiA8VTY3ODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnoIwCis8VTZBM0U+IDxVNkEzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aovjUKKzxVNkNFNz4gPFU2Q0U3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rOnMAorPFU3MDM5PiA8VTcwMzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngLkxCis8VTcyMUE+IDxVNzIxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eImjAKKzxVNzJEOD4gPFU3MkQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54uYMAorPFU3M0E1PiA8VTczQTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjqU2OAorPFU3OTNGPiA8VTc5M0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpL8wCis8VTc5QjQ+IDxVNzlCND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+emtDAKKzxVN0JENz4gPFU3QkQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56+XMAorPFU3QzQ2PiA8VTdDNDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsYYxCis8VTdDNjU+IDxVN0M2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+expTAKKzxVN0M3MD4gPFU3QzcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57GwMAorPFU3Q0E0PiA8VTdDQTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsqQyNTYKKzxVN0NCNT4gPFU3Q0I1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57K1MQorPFU4NjI1PiA8VTg2MjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomKUwCis8VTg2OEU+IDxVODY4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iajjAKKzxVODY4Rj4gPFU4NjhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JqPMAorPFU4RDhBPiA8VThEOEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotooyNTMyMgorPFU4REFGPiA8VThEQUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotq8yCis8VThEQzA+IDxVOERDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i3gDAKKzxVOERDMz4gPFU4REMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LeDMzI4MAorPFU4RThEPiA8VThFOEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouo0yMgorPFU5MjA1PiA8VTkyMDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiIUwCis8VTkyNUU+IDxVOTI1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mJnjAKKzxVOTVCMT4gPFU5NUIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZaxMjcKKzxVOTVCMj4gPFU5NUIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZayNQorPFU5NjA1PiA8VTk2MDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmIUzNjMwCis8VTlFMTE+IDxVOUUxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m4kTAKKzxVOUUxOT4gPFU5RTE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6biZMAorPFU5RkEwPiA8VTlGQTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvqA0Cis8VTU5NkI+IDxVNTk2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WlqzAKKzxVNjY1NT4gPFU2NjU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pmVMjM1NQorPFU2Njg4PiA8VTY2ODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmogxNQorPFU2QzMyPiA8VTZDMzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsLI1NworPFU2QzMzPiA8VTZDMzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsLMxCis8VTdFMTU+IDxVN0UxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e4lTAKKzxVODQ4MD4gPFU4NDgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JKAMAorPFU4NDk1PiA8VTg0OTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokpUwCis8VTg3Nzk+IDxVODc3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iduTAKKzxVOEQwNz4gPFU4RDA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LSHMAorPFU4RDVGPiA8VThENUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotZ8xCis8VTM2ODM+IDxVMzY4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OagzAKKzxVMzcwRj4gPFUzNzBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45yPMAorPFU0MjU5PiA8VTQyNTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiZkwCis8VTQ4QjU+IDxVNDhCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SitTAKKzxVNEU5MT4gPFU0RTkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LqRMTYzMDkKKzxVNEYxRD4gPFU0RjFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LydMAorPFU1MkZCPiA8VTUyRkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPli7szCis8VTUzMDA+IDxVNTMwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WMgDEwMjcKKzxVNTk5OD4gPFU1OTk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aaYMAorPFU2MTJBPiA8VTYxMkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhKowCis8VTY2MDA+IDxVNjYwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aYgDEwNjAKKzxVNjc4Mz4gPFU2NzgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p6DMAorPFU2OTg1PiA8VTY5ODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpoU1Cis8VTY5QjI+IDxVNjlCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+amsjAKKzxVNkE1Mj4gPFU2QTUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qmSMAorPFU2Qzg0PiA8VTZDODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsoQwCis8VTZEQTI+IDxVNkRBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a2ojAKKzxVNkVCMz4gPFU2RUIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqzMAorPFU2RjkwPiA8VTZGOTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvpAwCis8VTcxODU+IDxVNzE4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eGhTAKKzxVNzE4OT4gPFU3MTg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54aJMAorPFU3NTQ3PiA8VTc1NDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlYcwCis8VTc3MDM+IDxVNzcwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ecgzAKKzxVNzlEMD4gPFU3OUQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56eQMAorPFU3QjdDPiA8VTdCN0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrbwwCis8VTdCRDQ+IDxVN0JEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+evlDAKKzxVN0QxQz4gPFU3RDFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57ScMAorPFU3RTFDPiA8VTdFMUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuJwwCis8VTdFQUQ+IDxVN0VBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e6rTkyCis8VTgwMTg+IDxVODAxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iAmDEyOAorPFU4MDNBPiA8VTgwM0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogLowCis8VTgyQjg+IDxVODJCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iKuDE0NDIKKzxVODM3QT4gPFU4MzdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I26MAorPFU4NEI3PiA8VTg0Qjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokrcwCis8VTg1NTM+IDxVODU1Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iVkzAKKzxVOTBFNz4gPFU5MEU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YOnMTUKKzxVOTExNj4gPFU5MTE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YSWMAorPFU5MkM2PiA8VTkyQzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpi4YwCis8VTk2RjI+IDxVOTZGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mbsjcwCis8VTk5NDI+IDxVOTk0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mlgjAKKzxVNDFBQz4gPFU0MUFDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IasMAorPFU0MUQ2PiA8VTQxRDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkh5YwCis8VTQ3QUI+IDxVNDdBQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SeqzAKKzxVNDg1RD4gPFU0ODVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KGdMAorPFU0OTFFPiA8VTQ5MUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpJ4wCis8VTQ5QkU+IDxVNDlCRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SmvjAKKzxVNEEzNj4gPFU0QTM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ki2MAorPFU0QUIzPiA8VTRBQjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqrMwCis8VTUwOEE+IDxVNTA4QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WCijAKKzxVNTE0MT4gPFU1MTQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YWBNTI3NworPFU1NTk3PiA8VTU1OTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllpcwCis8VTYyOEU+IDxVNjI4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aKjjAKKzxVNkI5Mj4gPFU2QjkyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q6SMTU4Cis8VTZCOUU+IDxVNkI5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aunjMKKzxVNzJDMT4gPFU3MkMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54uBNworPFU3M0E3PiA8VTczQTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjqcwCis8VTc4RDI+IDxVNzhEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ejkjAKKzxVODkxRT4gPFU4OTFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KSeMAorPFU4Q0YxPiA8VThDRjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPos7EwCis8VThGMTE+IDxVOEYxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i8kTAKKzxVOTIxNz4gPFU5MjE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YiXMAorPFU5NjJEPiA8VTk2MkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmK0wCis8VTk2Njg+IDxVOTY2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mZqDIyMAorPFU5Njk1PiA8VTk2OTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmpUwCis8VTk3MjM+IDxVOTcyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mcozAKKzxVOUY3Mz4gPFU5RjczPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b2zMAorPFUzNkJBPiA8VTM2QkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmrowCis8VTM3OEM+IDxVMzc4Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OejDAKKzxVMzdFNj4gPFUzN0U2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45+mMAorPFU0NjhCPiA8VTQ2OEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmoswCis8VTRBNzU+IDxVNEE3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SptTAKKzxVNENCMD4gPFU0Q0IwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LKwMAorPFU0RDc0PiA8VTRENzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktbQwCis8VTU2RTk+IDxVNTZFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WbqTAKKzxVNTkzRD4gPFU1OTNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aS9MAorPFU1QjU1PiA8VTVCNTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrZUxMjMxCis8VTYwN0Q+IDxVNjA3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBvTI0Cis8VTYwRjI+IDxVNjBGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aDsjAKKzxVNjEyMD4gPFU2MTIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oSgODIKKzxVNjE0RD4gPFU2MTREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oWNMQorPFU2NzlGPiA8VTY3OUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnp8wCis8VTdERjc+IDxVN0RGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3tzAKKzxVODE2QT4gPFU4MTZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IWqMAorPFU4NTc0PiA8VTg1NzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolbQ3NDcKKzxVODU4MD4gPFU4NTgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JaAMAorPFU4NUY0PiA8VTg1RjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPol7QwCis8VTg2MEE+IDxVODYwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iYijMKKzxVOEZEMD4gPFU4RkQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L+QMjQxNjYKKzxVOTA0Qj4gPFU5MDRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YGLMjI2Cis8VTkwRDM+IDxVOTBEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mDkzM5NAorPFU5MTA2PiA8VTkxMDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphIYwCis8VTkxNUQ+IDxVOTE1RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mFnTI3MgorPFU5MTk2PiA8VTkxOTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphpYwCis8VTkxOUU+IDxVOTE5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mGnjUKKzxVOTdERT4gPFU5N0RFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z+eMAorPFU5N0VCPiA8VTk3RUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpn6s2Cis8VTk3RjU+IDxVOTdGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mftTExMzEKKzxVOTdGQj4gPFU5N0ZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z+7OQorPFU5REE0PiA8VTlEQTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptqQwCis8VTUzMUQ+IDxVNTMxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WMnTE0NAorPFU1NDgyPiA8VTU0ODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkoIyNzMKKzxVNUUwMD4gPFU1RTAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5biAMAorPFU2MkI4PiA8VTYyQjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmirgwCis8VTYyRjY+IDxVNjJGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aLtjQ4Cis8VTZDOUU+IDxVNkM5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aynjAKKzxVN0QyRT4gPFU3RDJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57SuOQorPFU4MURDPiA8VTgxREM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoh5wzCis8VTgxRTI+IDxVODFFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iHojEKKzxVOEZDQT4gPFU4RkNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L+KMAorPFU5MjU0PiA8VTkyNTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiZQwCis8VTQ1Nzk+IDxVNDU3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SVuTAKKzxVNDc5OT4gPFU0Nzk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J6ZMAorPFU0QTlFPiA8VTRBOUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqp4wCis8VTUwN0E+IDxVNTA3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WBujMKKzxVNTZEMD4gPFU1NkQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZuQMAorPFU1REJCPiA8VTVEQkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltrswCis8VTY3NDI+IDxVNjc0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+adgjExMjE2Cis8VTc4Mzg+IDxVNzgzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eguDE3OTYKKzxVNzhGQz4gPFU3OEZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56O8MAorPFU4OTREPiA8VTg5NEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopY0wCis8VTk2RDE+IDxVOTZEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mbkTAKKzxVOTZEQz4gPFU5NkRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZucNjIKKzxVOTZFNT4gPFU5NkU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZulMAorPFU5N0Y0PiA8VTk3RjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpn7QwCis8VTlCNzM+IDxVOUI3Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mtszAKKzxVNTQ4Qj4gPFU1NDhCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZKLNjU5Cis8VTlCQkE+IDxVOUJCQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+muujAKKzxVNTRDOT4gPFU1NEM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZOJNjA3Cis8VTY4M0Q+IDxVNjgzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+agvTg5NgorPFU2RTNEPiA8VTZFM0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuL0wCis8VTcwN0Q+IDxVNzA3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eBvTE0Cis8VTcwN0U+IDxVNzA3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eBvjMxMzUKKzxVNzBENj4gPFU3MEQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54OWMAorPFU3NTNFPiA8VTc1M0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlL40Cis8VTgzRDE+IDxVODNEMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPkTAKKzxVOENGMz4gPFU4Q0YzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LOzMAorPFUzN0E4PiA8VTM3QTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnqgwCis8VTNDNzA+IDxVM0M3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OxsDAKKzxVM0QxMz4gPFUzRDEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47STMAorPFU0M0MxPiA8VTQzQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkj4EwCis8VTQ4RUM+IDxVNDhFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SjrDAKKzxVNEJBOD4gPFU0QkE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5K6oMAorPFU0RUQ0PiA8VTRFRDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPku5QyNzU0Cis8VTUxMEU+IDxVNTEwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WEjjAKKzxVNUJCMD4gPFU1QkIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a6wMTE1OAorPFU1RDNEPiA8VTVEM0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltL0zMTQKKzxVN0UyMT4gPFU3RTIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57ihMAorPFU4RjA5PiA8VThGMDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovIk1MAorPFU4RjdEPiA8VThGN0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovb0xODg0MgorPFU0RDY3PiA8VTRENjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPktacwCis8VTRGQTI+IDxVNEZBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+ojAKKzxVNTBBND4gPFU1MEE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YKkMAorPFU1MThEPiA8VTUxOEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlho02ODMwMQorPFU1NzI4PiA8VTU3Mjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnKg1OTQ3OTgKKzxVNjI1Nz4gPFU2MjU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5omXMAorPFU1MTQyPiA8VTUxNDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhYIwCis8VTdDMkE+IDxVN0MyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ewqjI4MAorPFU3QzJFPiA8VTdDMkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsK4wCis8VTdDQ0M+IDxVN0NDQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ezjDEzCis8VTk0MTU+IDxVOTQxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mQlTAKKzxVNTRCMT4gPFU1NEIxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZKxNzQ0OAorPFUzOTMwPiA8VTM5MzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjpLAwCis8VTUxMjc+IDxVNTEyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WEpzAKKzxVNTEzOT4gPFU1MTM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YS5MAorPFU1NTkyPiA8VTU1OTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllpI0Cis8VTVCQzE+IDxVNUJDMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WvgTAKKzxVNjNERD4gPFU2M0REPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+dMAorPFU2NDhEPiA8VTY0OEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmko0xCis8VTY2MUQ+IDxVNjYxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aYnTUKKzxVNjg1QT4gPFU2ODVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qGaMAorPFU2Q0FGPiA8VTZDQUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsq8wCis8VTc5Mzg+IDxVNzkzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ekuDAKKzxVNzlCNj4gPFU3OUI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56a2MAorPFU4REIxPiA8VThEQjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotrExMworPFU4REIyPiA8VThEQjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotrIwCis8VTM3M0E+IDxVMzczQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OcujAKKzxVMzdEQj4gPFUzN0RCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45+bMAorPFUzOEM1PiA8VTM4QzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjo4UwCis8VTU2Q0I+IDxVNTZDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WbizAKKzxVNjY4Mj4gPFU2NjgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pqCNDAxNworPFU2NkFCPiA8VTY2QUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmqs1MgorPFU2QjExPiA8VTZCMTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrJEwCis8VTc0Qzk+IDxVNzRDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eTiTAKKzxVNzREMj4gPFU3NEQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55OSMTEKKzxVNzREQT4gPFU3NERBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55OaMAorPFU3QTczPiA8VTdBNzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqbMwCis8VTg5Nzg+IDxVODk3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iluDAKKzxVOEI4Mz4gPFU4QjgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K6DMAorPFU4QjlBPiA8VThCOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorpoyMQorPFU4Q0RCPiA8VThDREI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPos5szCis8VThEMEE+IDxVOEQwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i0ijIxCis8VThENUU+IDxVOEQ1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i1njQ5NzEKKzxVOTEzQz4gPFU5MTNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YS8MAorPFU5MzNFPiA8VTkzM0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjL45Cis8VTkzRTg+IDxVOTNFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mPqDAKKzxVOTk2MT4gPFU5OTYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aWhMAorPFU3MjQyPiA8VTcyNDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniYIwCis8VTdGOTg+IDxVN0Y5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e+mDAKKzxVODEwRj4gPFU4MTBGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ISPMzEwMgorPFU4MUU3PiA8VTgxRTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoh6c4MQorPFU4Q0NEPiA8VThDQ0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPos40wCis8VThDRDg+IDxVOENEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+izmDAKKzxVOEQxMz4gPFU4RDEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LSTMAorPFU4RDFDPiA8VThEMUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotJwwCis8VThENDM+IDxVOEQ0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i1gzM3NworPFU5MzdBPiA8VTkzN0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjbowCis8VTlBRDI+IDxVOUFEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mrkjE4Cis8VTk5RDQ+IDxVOTlEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mnlDAKKzxVOUE3NT4gPFU5QTc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6am1MQorPFUzNjM4PiA8VTM2Mzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmLgwCis8VTU4NUY+IDxVNTg1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WhnzAKKzxVNTk1OD4gPFU1OTU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aWYOTgKKzxVNUYwOT4gPFU1RjA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5byJMAorPFU4MUQzPiA8VTgxRDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoh5MwCis8VTgxREY+IDxVODFERj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iHnzYKKzxVODQ2Qz4gPFU4NDZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JGsMTkxMworPFU5MkJBPiA8VTkyQkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpirowCis8VTUwQUU+IDxVNTBBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WCrjAKKzxVN0NERj4gPFU3Q0RGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57OfMzAzMgorPFU4RTY3PiA8VThFNjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouacwCis8VTkwNkQ+IDxVOTA2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mBrTYxMzkKKzxVNDk2Mz4gPFU0OTYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KWjMAorPFU1MUZGPiA8VTUxRkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlh782NDIKKzxVOTFBOT4gPFU5MUE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YapMAorPFU5NDdGPiA8VTk0N0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkb8yMworPFU0QzgzPiA8VTRDODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksoMwCis8VTY1RTk+IDxVNjVFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aXqTMxOTEwCis8VTY3QTM+IDxVNjdBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aeozY4NgorPFU2OEQ3PiA8VTY4RDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmo5cyNgorPFU2RkExPiA8VTZGQTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvqExNzUzCis8VTc0QUE+IDxVNzRBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eSqjMKKzxVODVCQj4gPFU4NUJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ja7MAorPFU4NUZCPiA8VTg1RkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPol7syNzIKKzxVODZBND4gPFU4NkE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JqkNDQxCis8VTNDQTc+IDxVM0NBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OypzAKKzxVM0ZGNz4gPFUzRkY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47+3MAorPFU0NzBBPiA8VTQ3MEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknIowCis8VTU1MTU+IDxVNTUxNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WUlTAKKzxVNTUyMz4gPFU1NTIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZSjMTEKKzxVNTY2QT4gPFU1NjZBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZmqNjQ2Cis8VTYxNjU+IDxVNjE2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aFpTAKKzxVNjg4RD4gPFU2ODhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qKNMAorPFU3MDc2PiA8VTcwNzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngbY4MjIKKzxVNzFFNT4gPFU3MUU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54elOTY1Cis8VTc2ODE+IDxVNzY4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eagTAKKzxVNzY4Mj4gPFU3NjgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55qCNjk2Cis8VTdBQzM+IDxVN0FDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ergzAKKzxVN0FDOD4gPFU3QUM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56uIMAorPFU3QzA5PiA8VTdDMDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsIkwCis8VTgyNDE+IDxVODI0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iJgTAKKzxVOEI1Rj4gPFU4QjVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K2fMAorPFU4REFFPiA8VThEQUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotq4wCis8VThFODE+IDxVOEU4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6gTEzODUKKzxVOTAyMD4gPFU5MDIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YCgMjAwNTkKKzxVOUFERT4gPFU5QURFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aueMAorPFUzNUJEPiA8VTM1QkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlr0wCis8VTM4RjE+IDxVMzhGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OjsTAKKzxVM0NGQj4gPFUzQ0ZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47O7MAorPFU0MENFPiA8VTQwQ0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkg44wCis8VTQxRTU+IDxVNDFFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SHpTAKKzxVNDU0OT4gPFU0NTQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JWJMAorPFU0NTZBPiA8VTQ1NkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklaowCis8VTRDMzk+IDxVNEMzOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SwuTAKKzxVNERBNj4gPFU0REE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LamMAorPFU1MjE5PiA8VTUyMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliJkyNjM5MgorPFU1MjQ3PiA8VTUyNDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliYczMTkKKzxVNTU2Nz4gPFU1NTY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZWnNTc0Cis8VTU2MTY+IDxVNTYxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WYljQKKzxVNUQzMT4gPFU1RDMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bSxMAorPFU1RTNCPiA8VTVFM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluLsxMworPFU1RTU4PiA8VTVFNTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluZgwCis8VTYyOUU+IDxVNjI5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aKnjAKKzxVNjJFOT4gPFU2MkU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oupODYzMworPFU2NEM3PiA8VTY0Qzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmk4c1MgorPFU2Q0EyPiA8VTZDQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsqIwCis8VTZDRkQ+IDxVNkNGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+azvTg5OTAKKzxVNkVBRD4gPFU2RUFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqtMAorPFU2RkE0PiA8VTZGQTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvqQzOQorPFU3NjlGPiA8VTc2OUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmp8wCis8VTc3OTQ+IDxVNzc5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eelDAKKzxVN0IyRT4gPFU3QjJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56yuMAorPFU3QkE2PiA8VTdCQTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrqY0Cis8VTgwMkI+IDxVODAyQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iAqzAKKzxVODIzND4gPFU4MjM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ii0MgorPFU4NDM0PiA8VTg0MzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokLQwCis8VTg1MzY+IDxVODUzNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iUtjAKKzxVODgwOD4gPFU4ODA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KCIMAorPFU4ODBDPiA8VTg4MEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooIwwCis8VThBQ0U+IDxVOEFDRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+irjjAKKzxVOEIyRT4gPFU4QjJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KyuMAorPFU4Q0FDPiA8VThDQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosqwxMjIKKzxVOENGRT4gPFU4Q0ZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LO+MAorPFU4RDIzPiA8VThEMjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotKMxMzA2MAorPFU4RDVDPiA8VThENUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotZwyCis8VThGRUU+IDxVOEZFRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i/rjEKKzxVOUMwMj4gPFU5QzAyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bCCMAorPFU5Qzk3PiA8VTlDOTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpspcwCis8VTlGNUE+IDxVOUY1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m9mjAKKzxVM0NDMT4gPFUzQ0MxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47OBMAorPFU0RUM0PiA8VTRFQzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPku4Q2OAorPFU1OTI4PiA8VTU5Mjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpKgwCis8VTVFODI+IDxVNUU4Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W6gjAKKzxVNjYwMz4gPFU2NjAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5piDMQorPFU2NjE3PiA8VTY2MTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmJcwCis8VTZDNDQ+IDxVNkM0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+axhDAKKzxVN0EwND4gPFU3QTA0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56iEMAorPFU2MjFEPiA8VTYyMUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiJ0wCis8VThDQ0E+IDxVOENDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+izijkKKzxVOEQzQz4gPFU4RDNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LS8Mjc5MQorPFU5QzYxPiA8VTlDNjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsaEwCis8VTYwMEU+IDxVNjAwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aAjjUwMDY1Cis8VTRBQzg+IDxVNEFDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SriDAKKzxVOEI1Qj4gPFU4QjVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K2bMAorPFU1ODk3PiA8VTU4OTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlopcxCis8VTU4OUU+IDxVNTg5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WinjEwNTY5Cis8VTYxOEU+IDxVNjE4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aGjjg5MAorPFU2QTY3PiA8VTZBNjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqacwCis8VTcxQjc+IDxVNzFCNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eGtzAKKzxVNzQ5ND4gPFU3NDk0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55KUMAorPFU3N0YwPiA8VTc3RjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnn7AwCis8VTc4RjM+IDxVNzhGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ejszAKKzxVN0U1Mj4gPFU3RTUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57mSMAorPFU3RjdFPiA8VTdGN0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvb40Cis8VThCNDQ+IDxVOEI0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ithDAKKzxVOUE1Mz4gPFU5QTUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6amTMAorPFUzRjZBPiA8VTNGNkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvaowCis8VTQ2NjI+IDxVNDY2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SZojAKKzxVNEMxRD4gPFU0QzFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LCdMAorPFU3NTExPiA8VTc1MTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlJExMQorPFU3RDlDPiA8VTdEOUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntpwxNgorPFU4RDA4PiA8VThEMDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotIg1Cis8VThENjA+IDxVOEQ2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i1oDg5NgorPFU5MkU1PiA8VTkyRTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpi6UwCis8VTk1MDM+IDxVOTUwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mUgzEwOAorPFU1MDY3PiA8VTUwNjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgacwCis8VTU0MTI+IDxVNTQxMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WQkjI0MgorPFU1NEYzPiA8VTU0RjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlk7M0Cis8VTYyNEU+IDxVNjI0RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aJjjU2OTQKKzxVNjJBRj4gPFU2MkFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oqvMAorPFU2MzEzPiA8VTYzMTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjJMwCis8VTYzRjg+IDxVNjNGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aPuDEyCis8VTY0NjM+IDxVNjQ2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aRozAKKzxVNjdFND4gPFU2N0U0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p+kMAorPFU2QTFEPiA8VTZBMUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqJ0wCis8VTZFMjM+IDxVNkUyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a4ozQzMQorPFU3NkI2PiA8VTc2QjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmrYwCis8VTc2QkI+IDxVNzZCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eauzAKKzxVOEIyRj4gPFU4QjJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KyvMAorPFU5RjQ0PiA8VTlGNDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvYQwCis8VTlGNDc+IDxVOUY0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m9hzAKKzxVM0M1Qz4gPFUzQzVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47GcMAorPFUzRDE5PiA8VTNEMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtJkwCis8VTQ5Nzc+IDxVNDk3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SltzAKKzxVNEQ3NT4gPFU0RDc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LW1MAorPFU1Mjg0PiA8VTUyODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlioQwCis8VTYyQzM+IDxVNjJDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aLgzIKKzxVNjcyRD4gPFU2NzJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pytNjcxCis8VTcwQjg+IDxVNzBCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eCuDU5ODMKKzxVNzI1MD4gPFU3MjUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54mQMAorPFU3NTM0PiA8VTc1MzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlLQwCis8VTdEMjU+IDxVN0QyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e0pTAKKzxVODZCQj4gPFU4NkJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Jq7MAorPFU4ODNGPiA8VTg4M0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooL8wCis8VThCNTc+IDxVOEI1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+itlzAKKzxVOTM1OD4gPFU5MzU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y2YMAorPFU5NEUxPiA8VTk0RTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpk6E2NgorPFU5NTk4PiA8VTk1OTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPplpgxCis8VTk1Rjg+IDxVOTVGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mXuDM1NAorPFU5NzA1PiA8VTk3MDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnIUwCis8VTM0ODA+IDxVMzQ4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OSgDAKKzxVMzg3OD4gPFUzODc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46G4MAorPFUzREUyPiA8VTNERTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjt6IwCis8VTQyRkU+IDxVNDJGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SLvjAKKzxVNDU2Mj4gPFU0NTYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JWiMAorPFU0NkZEPiA8VTQ2RkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkm70wCis8VTRENTk+IDxVNEQ1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S1mTAKKzxVNTM4Rj4gPFU1MzhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y6PMAorPFU3NzI4PiA8VTc3Mjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnKgxMzM1Cis8VTc4MUY+IDxVNzgxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+egnzMKKzxVODJGMj4gPFU4MkYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IuyMgorPFU4RTM3PiA8VThFMzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouLcwCis8VTlCOTM+IDxVOUI5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mukzAKKzxVOUM4QT4gPFU5QzhBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bKKMQorPFU5QzlEPiA8VTlDOUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsp0wCis8VTQ1QjM+IDxVNDVCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SWszAKKzxVNDdBMj4gPFU0N0EyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J6iMAorPFU0RTREPiA8VTRFNEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuY01NzgKKzxVNTQ5Qz4gPFU1NDlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZKcMAorPFU1NEE0PiA8VTU0QTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkqQ2NworPFU1QkIxPiA8VTVCQjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrrEwCis8VTY0M0U+IDxVNjQzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aQvjAKKzxVNjdERT4gPFU2N0RFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p+eNTEKKzxVNjdGNT4gPFU2N0Y1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p+1MgorPFU2OUE4PiA8VTY5QTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpqgyMDIKKzxVNkVBMD4gPFU2RUEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rqgMAorPFU3MDc5PiA8VTcwNzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngbkwCis8VTdDMEU+IDxVN0MwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ewjjAKKzxVODFBQT4gPFU4MUFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IaqMQorPFU4NkIxPiA8VTg2QjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPomrE3OAorPFU4QTUwPiA8VThBNTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqZA2Cis8VThCQzg+IDxVOEJDOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iviDgzNworPFU5MUExPiA8VTkxQTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphqEwCis8VTYzNUE+IDxVNjM1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aNmjAKKzxVNjQ1OD4gPFU2NDU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pGYMjY2OQorPFU2NThCPiA8VTY1OEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlosxMTIyCis8VTY1OEU+IDxVNjU4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWjjQKKzxVNjlCOD4gPFU2OUI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qa4MAorPFU5RjRCPiA8VTlGNEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvYszCis8VTM4NkY+IDxVMzg2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OhrzAKKzxVNUI4NT4gPFU1Qjg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a6FMTYxNworPFU3OTBCPiA8VTc5MEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpIswCis8VTVDOUQ+IDxVNUM5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WynTAKKzxVN0E4ND4gPFU3QTg0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56qEMTM5MQorPFU5MjU5PiA8VTkyNTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiZkwCis8VTk4RjU+IDxVOThGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mjtTAKKzxVM0E1Rj4gPFUzQTVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46mfMAorPFU1MDNBPiA8VTUwM0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgLoxMzYxCis8VTUwQjU+IDxVNTBCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WCtTcKKzxVNUJFOD4gPFU1QkU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a+oMTgzNworPFU3NjM1PiA8VTc2MzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmLUwCis8VTc4MjY+IDxVNzgyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+egpjE3Cis8VTU0NkI+IDxVNTQ2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRqzAKKzxVNURBNj4gPFU1REE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bamMAorPFU2NUMzPiA8VTY1QzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPml4MxMAorPFU2NURDPiA8VTY1REM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPml5wwCis8VTY4MzQ+IDxVNjgzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+agtDAKKzxVNkJFMT4gPFU2QkUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q+hNTUwCis8VTZDMDg+IDxVNkMwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+awiDIKKzxVNkMwQT4gPFU2QzBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rCKMAorPFU2Q0JFPiA8VTZDQkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsr4xNzU4Cis8VTc3QkI+IDxVNzdCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eeuzQ5MworPFU4NTlEPiA8VTg1OUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolp0wCis8VThBNDA+IDxVOEE0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ipgDAKKzxVOEE3OT4gPFU4QTc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Km5NTQ2Cis8VThCNjA+IDxVOEI2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+itoDAKKzxVOEI2Qj4gPFU4QjZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K2rMAorPFU4QjlEPiA8VThCOUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorp0wCis8VThDMzU+IDxVOEMzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwtTI3Cis8VThEODg+IDxVOEQ4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i2iDAKKzxVOTA4NT4gPFU5MDg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YKFMAorPFU5MjQ2PiA8VTkyNDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiYYwCis8VTk3MTE+IDxVOTcxMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mckTExCis8VTk5NTg+IDxVOTk1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mlmDAKKzxVOUE1OT4gPFU5QTU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6amZMAorPFU5QzYzPiA8VTlDNjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpsaMwCis8VTlFMDc+IDxVOUUwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m4hzAKKzxVOUU2Rj4gPFU5RTZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bmvMAorPFUzN0ExPiA8VTM3QTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnqEwCis8VTM4MkQ+IDxVMzgyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OgrTAKKzxVNDA3ND4gPFU0MDc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IG0MAorPFU0MzkyPiA8VTQzOTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjpIwCis8VTQ3Q0I+IDxVNDdDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SfizAKKzxVNDg0MD4gPFU0ODQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KGAMAorPFU0QTQ1PiA8VTRBNDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqYUwCis8VTRDN0M+IDxVNEM3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SxvDAKKzxVNUFGOD4gPFU1QUY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5au4MAorPFU1QzU1PiA8VTVDNTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlsZUyNTU1NgorPFU1RDJEPiA8VTVEMkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltK00NDEKKzxVNUQ4Mz4gPFU1RDgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5baDMAorPFU1RDg0PiA8VTVEODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltoQzCis8VTY0MEM+IDxVNjQwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aQjDMKKzxVNjVBOT4gPFU2NUE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5papOTQzCis8VTY1QUM+IDxVNjVBQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWrDQKKzxVNjk5MD4gPFU2OTkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qaQMAorPFU2QTNGPiA8VTZBM0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqL8wCis8VTZBNEY+IDxVNkE0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+apjzAKKzxVNzQxNj4gPFU3NDE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55CWMAorPFU3NkJEPiA8VTc2QkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmr0wCis8VTc2Q0Y+IDxVNzZDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ebjzEyOTIKKzxVNzZERT4gPFU3NkRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55ueOAorPFU4RTREPiA8VThFNEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouY0wCis8VThGM0U+IDxVOEYzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i8vjIKKzxVOTE4Nj4gPFU5MTg2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YaGMAorPFU5OEFEPiA8VTk4QUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoq0wCis8VTk4RDA+IDxVOThEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mjkDAKKzxVOUI1OT4gPFU5QjU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a2ZMAorPFUzN0RFPiA8VTM3REU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjn54wCis8VTNFOTg+IDxVM0U5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O6mDAKKzxVM0VGNT4gPFUzRUY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47u1MAorPFU0MkNFPiA8VTQyQ0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPki44wCis8VTQ1QzM+IDxVNDVDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SXgzAKKzxVNDYzQT4gPFU0NjNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ji6MAorPFU0QThDPiA8VTRBOEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqowwCis8VTRDNjA+IDxVNEM2MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SxoDAKKzxVNEY1ND4gPFU0RjU0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L2UMzgKKzxVNTA2MT4gPFU1MDYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YGhMgorPFU1MzYwPiA8VTUzNjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljaA4MTA2Cis8VTVEOTg+IDxVNUQ5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W2mDAKKzxVNjIxOD4gPFU2MjE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oiYNDY0NDUKKzxVNjIyNj4gPFU2MjI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oimMAorPFU2MjMwPiA8VTYyMzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiLAyNjgKKzxVNjgwOD4gPFU2ODA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qCINjU0Cis8VTY4NUY+IDxVNjg1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ahnzAKKzxVNjhFNz4gPFU2OEU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qOnMTAKKzxVNjkzRT4gPFU2OTNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qS+MQorPFU2RTVCPiA8VTZFNUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuZs1MTYKKzxVN0FEOT4gPFU3QUQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56uZMTkyODQyCis8VTdEQkI+IDxVN0RCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e2uzQKKzxVN0VGRD4gPFU3RUZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57u9NzQwCis8VTgzREE+IDxVODNEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPmjAKKzxVODYzOD4gPFU4NjM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ji4MjUzCis8VTg2NjU+IDxVODY2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iZpTAKKzxVODY2Nj4gPFU4NjY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JmmMAorPFU4OUIxPiA8VTg5QjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoprEwCis8VThFNTQ+IDxVOEU1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i5lDAKKzxVOEYxQT4gPFU4RjFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LyaMAorPFU4RjRGPiA8VThGNEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovY8wCis8VTk4QTQ+IDxVOThBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mipDMwMDAKKzxVOUE0Rj4gPFU5QTRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6amPMAorPFU1MEJEPiA8VTUwQkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgr0wCis8VTU4ODc+IDxVNTg4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WihzAKKzxVNUFEQz4gPFU1QURDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aucMAorPFU1RjIwPiA8VTVGMjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvKA0NTU3OQorPFU1RjM1PiA8VTVGMzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvLU1NTgKKzxVNUY3MD4gPFU1RjcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b2wNDM4Cis8VTYxNUU+IDxVNjE1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aFnjAKKzxVNjZCMj4gPFU2NkIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pqyNDEKKzxVNkExRj4gPFU2QTFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qifODQKKzxVNkYzMz4gPFU2RjMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ryzOTAKKzxVNzM1MD4gPFU3MzUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj542QMjYKKzxVNzQ4Qj4gPFU3NDhCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55KLMTMxCis8VTdBRTA+IDxVN0FFMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eroDIzMjU4Cis8VTg1MDE+IDxVODUwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iUgTAKKzxVODdEMT4gPFU4N0QxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J+RMzIxCis8VTkwNjc+IDxVOTA2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mBpzAKKzxVOTEyMz4gPFU5MTIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YSjMQorPFU5OTI2PiA8VTk5MjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppKYwCis8VTlBM0Y+IDxVOUEzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+movzAKKzxVOUM0Nj4gPFU5QzQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bGGMAorPFU5RTlFPiA8VTlFOUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpup4wCis8VTRFQzk+IDxVNEVDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S7iTEKKzxVNjM4Qz4gPFU2MzhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o6MNjk2NgorPFU2REE4PiA8VTZEQTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtqgxNzk3Cis8VTZGMzI+IDxVNkYzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a8sjYKKzxVNzkwMz4gPFU3OTAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56SDMAorPFU5NzlEPiA8VTk3OUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnp0wCis8VTM1Njk+IDxVMzU2OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OVqTAKKzxVMzY2Mz4gPFUzNjYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45mjMAorPFUzRjc0PiA8VTNGNzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvbQwCis8VTRFMDg+IDxVNEUwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S4iDU4MjIKKzxVNEVENz4gPFU0RUQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LuXMjkxNAorPFU1RDgyPiA8VTVEODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltoIyNQorPFU1RTEwPiA8VTVFMTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluJAzNTA3Cis8VTVFMzM+IDxVNUUzMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W4szI3Cis8VTVFNUI+IDxVNUU1Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W5mzE3Cis8VTYyNTk+IDxVNjI1OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aJmTAKKzxVNjc1Nj4gPFU2NzU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p2WNzgwCis8VTZEQjE+IDxVNkRCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a2sTAKKzxVNzVFRT4gPFU3NUVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55euMAorPFU3NjJDPiA8VTc2MkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmKwwCis8VTc2MzQ+IDxVNzYzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eYtDE0NQorPFU3Nzk1PiA8VTc3OTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnpUwCis8VTdDODA+IDxVN0M4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eygDAKKzxVODBDMD4gPFU4MEMwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IOAMTQwNworPFU4MTM5PiA8VTgxMzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohLkxMgorPFU4Q0VDPiA8VThDRUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPos6wzCis8VThEMjY+IDxVOEQyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i0pjEzNjAKKzxVOTY5Qz4gPFU5NjlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZqcMjY0NworPFU1OUIxPiA8VTU5QjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlprEwCis8VTVERjY+IDxVNURGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W3tjAKKzxVNjJEQj4gPFU2MkRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oubOTU0MgorPFU2NjJEPiA8VTY2MkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmK0xMDc0Cis8VTY3MUQ+IDxVNjcxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+acnTEwMDAwCis8VTY3RDY+IDxVNjdENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+afljAKKzxVNzZDND4gPFU3NkM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55uEMAorPFU5MUQ3PiA8VTkxRDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPph5cwCis8VTkyNEE+IDxVOTI0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mJijAKKzxVOTM2Mz4gPFU5MzYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y2jMAorPFU5NDhBPiA8VTk0OEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkoozNDAKKzxVOTlDQj4gPFU5OUNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aeLMAorPFU5RTNDPiA8VTlFM0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuLwxCis8VTM1NUE+IDxVMzU1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OVmjAKKzxVM0U5MD4gPFUzRTkwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47qQMAorPFU0MjAzPiA8VTQyMDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiIMwCis8VTQ3NTY+IDxVNDc1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SdljAKKzxVNjI3RT4gPFU2MjdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5om+MzU1MzgKKzxVNkNCQz4gPFU2Q0JDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rK8NTY1Cis8VTcyMkE+IDxVNzIyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eIqjk1NworPFU3NDc1PiA8VTc0NzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkbUwCis8VTgzRUM+IDxVODNFQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPrDAKKzxVMzg3RD4gPFUzODdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46G9MAorPFUzQTA0PiA8VTNBMDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqIQwCis8VTNERDY+IDxVM0RENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O3ljAKKzxVNDBDRD4gPFU0MENEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IONMAorPFU0MjA3PiA8VTQyMDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiIcwCis8VTQzNUM+IDxVNDM1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SNnDAKKzxVNDM2RT4gPFU0MzZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I2uMAorPFU0QjkzPiA8VTRCOTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrpMwCis8VTUxNDY+IDxVNTE0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WFhjE1NjIKKzxVNTNFQz4gPFU1M0VDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y+sNDQ4NworPFU1Nzk3PiA8VTU3OTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnpcwCis8VTY1RDA+IDxVNjVEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aXkDAKKzxVNjZDQz4gPFU2NkNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5puMMAorPFU2NzlCPiA8VTY3OUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnpsxMQorPFU2OEY5PiA8VTY4Rjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmo7kzMAorPFU2QUMyPiA8VTZBQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmq4IwCis8VTcwQTQ+IDxVNzBBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eCpDAKKzxVNzE2Nz4gPFU3MTY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54WnMjMxNzgKKzxVNzFGMz4gPFU3MUYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54ezMAorPFU3MkUzPiA8VTcyRTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPni6MwCis8VTc3QkU+IDxVNzdCRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eevjAKKzxVN0IwQT4gPFU3QjBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56yKMTAKKzxVN0I4Qz4gPFU3QjhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj566MMAorPFU3RjY5PiA8VTdGNjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvakyMzg0Cis8VTdGODQ+IDxVN0Y4ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e+hDAKKzxVODA4MT4gPFU4MDgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IKBMAorPFU4MDg3PiA8VTgwODc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogoc0MDQKKzxVODA4OD4gPFU4MDg4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IKIMAorPFU4QTU0PiA8VThBNTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqZQzCis8VThCQ0Y+IDxVOEJDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ivjzY0MAorPFU4RDc1PiA8VThENzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotbU4MTEyCis8VThEOTk+IDxVOEQ5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i2mTgKKzxVOTZGRj4gPFU5NkZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Zu/MAorPFU5RDZCPiA8VTlENkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptaswCis8VTU1RkI+IDxVNTVGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WXuzcKKzxVNUFFQz4gPFU1QUVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ausMAorPFU2NjYyPiA8VTY2NjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmaIwCis8VTY2NjM+IDxVNjY2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aZozAKKzxVODcwNz4gPFU4NzA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JyHNzkKKzxVOTA2RT4gPFU5MDZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YGuMjQxNworPFUzNzhGPiA8VTM3OEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjno8wCis8VTNBQkY+IDxVM0FCRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OqvzAKKzxVM0JGMD4gPFUzQkYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46+wMAorPFU0MjlFPiA8VTQyOUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkip4wCis8VTQzQjI+IDxVNDNCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SOsjAKKzxVNDQxMT4gPFU0NDExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JCRMAorPFU0NDMyPiA8VTQ0MzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkLIwCis8VTQ0QzY+IDxVNDRDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SThjAKKzxVNDc0Mz4gPFU0NzQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J2DMAorPFU0NzU1PiA8VTQ3NTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknZUwCis8VTUzODc+IDxVNTM4Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WOhzAKKzxVNTRGMj4gPFU1NEYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZOyNTYzMQorPFU1NTYwPiA8VTU1NjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllaAwCis8VTU1ODY+IDxVNTU4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WWhjIKKzxVNTY5RT4gPFU1NjlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZqeMAorPFU1N0QxPiA8VTU3RDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPln5EwCis8VTYxNzQ+IDxVNjE3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aFtDAKKzxVNjI5OD4gPFU2Mjk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oqYNjY4NgorPFU2NDdBPiA8VTY0N0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkbo3OAorPFU2QjdEPiA8VTZCN0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrb0wCis8VTc0Q0I+IDxVNzRDQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eTizAKKzxVNzgxMz4gPFU3ODEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56CTMAorPFU3OEQ0PiA8VTc4RDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPno5QxMworPFU3Qzc3PiA8VTdDNzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsbcwCis8VTgwMzQ+IDxVODAzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iAtDAKKzxVODY3ND4gPFU4Njc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Jm0MAorPFU4NkYwPiA8VTg2RjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPom7AxMDIKKzxVODdDND4gPFU4N0M0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J+EMAorPFU4OTc1PiA8VTg5NzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopbUwCis8VThBNUY+IDxVOEE1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ipnzAKKzxVOEIyQj4gPFU4QjJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KyrMAorPFU4QjNBPiA8VThCM0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorLowCis8VThCODE+IDxVOEI4MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iugTAKKzxVOEI4Qj4gPFU4QjhCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K6LMAorPFU4Qjk4PiA8VThCOTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorpgwCis8VThDMkE+IDxVOEMyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iwqjM4Cis8VThGMTI+IDxVOEYxMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i8kjMKKzxVOEYxOT4gPFU4RjE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LyZMAorPFU4Rjg0PiA8VThGODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovoQyNjYKKzxVOEY5OT4gPFU4Rjk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L6ZMzkyCis8VTkyQjg+IDxVOTJCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mKuDAKKzxVOUJCRj4gPFU5QkJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a6/MAorPFU5RTA1PiA8VTlFMDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuIUwCis8VTU1NkI+IDxVNTU2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WVqzAKKzxVNzk4Nz4gPFU3OTg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56aHMAorPFU4MDA1PiA8VTgwMDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogIU2ODgyMgorPFU4OTM2PiA8VTg5MzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopLYyMjYKKzxVOEQ2RD4gPFU4RDZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LWtNTgKKzxVNDA5RT4gPFU0MDlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IKeMAorPFU0M0YzPiA8VTQzRjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkj7MwCis8VTQ1RUE+IDxVNDVFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SXqjAKKzxVNDgyNj4gPFU0ODI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KCmMAorPFU0QTdFPiA8VTRBN0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkqb4wCis8VTRENkQ+IDxVNEQ2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S1rTAKKzxVNjdEOD4gPFU2N0Q4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p+YMTcKKzxVNkFBMT4gPFU2QUExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qqhMAorPFU2RDU5PiA8VTZENTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtZk4NjUKKzxVNzBFMj4gPFU3MEUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54OiMAorPFU4NTE3PiA8VTg1MTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolJc5NworPFU4N0M1PiA8VTg3QzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPon4UwCis8VThGRDk+IDxVOEZEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i/mTQ2Mzk5NQorPFU5MDE5PiA8VTkwMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgJkzMTk3Cis8VTlERDM+IDxVOUREMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m3kzAKKzxVOUU2Nz4gPFU5RTY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bmnMjUKKzxVNzc0MD4gPFU3NzQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj552AMjUwMzExCis8VTRGQTY+IDxVNEZBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S+pjI4ODYKKzxVNTA3NT4gPFU1MDc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YG1NzkKKzxVNTgzQj4gPFU1ODNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aC7MAorPFU1QTlDPiA8VTVBOUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqpwwCis8VTVBQzM+IDxVNUFDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WrgzAKKzxVNUJDQT4gPFU1QkNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a+KMAorPFU1RTJBPiA8VTVFMkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluKoyCis8VTYzQzE+IDxVNjNDMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aPgTAKKzxVNjQzOD4gPFU2NDM4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pC4MAorPFU2NTlGPiA8VTY1OUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlp83ODYKKzxVNjgxNT4gPFU2ODE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qCVMAorPFU2ODYyPiA8VTY4NjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoaI1NAorPFU2OTY4PiA8VTY5Njg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpagwCis8VTY5OUI+IDxVNjk5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ammzMzCis8VTZBM0M+IDxVNkEzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aovDAKKzxVNkI5RD4gPFU2QjlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q6dMAorPFU2RUIxPiA8VTZFQjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmurEwCis8VTZGNjc+IDxVNkY2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a9pzAKKzxVNkZCNT4gPFU2RkI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r61MAorPFU3MzQ5PiA8VTczNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjYkwCis8VTczQ0Q+IDxVNzNDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ePjTQ5MzYKKzxVNzNDRT4gPFU3M0NFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54+OMAorPFU3NDRBPiA8VTc0NEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkYowCis8VTc1MDQ+IDxVNzUwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eUhDM2NgorPFU3NzFFPiA8VTc3MUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnJ4wCis8VTc3MUY+IDxVNzcxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ecnzcxMjMxCis8VTc4Mjc+IDxVNzgyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+egpzcwCis8VTc4QUE+IDxVNzhBQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eiqjEKKzxVNzk2Rj4gPFU3OTZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56WvMzYzCis8VTc5OEU+IDxVNzk4RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+emjjAKKzxVNzk5Qj4gPFU3OTlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56abMQorPFU3QkI0PiA8VTdCQjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrrQ3NgorPFU3QzQ4PiA8VTdDNDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsYgwCis8VTdGMUM+IDxVN0YxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e8nDcxCis8VTgwRDc+IDxVODBENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iDlzkKKzxVODFGQj4gPFU4MUZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ie7MTk2Cis8VTg0OTY+IDxVODQ5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iSljEKKzxVODRBNz4gPFU4NEE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JKnMAorPFU4NEMxPiA8VTg0QzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPok4E3Cis8VTg1QkQ+IDxVODVCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iWvTAKKzxVOEEzQT4gPFU4QTNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ki6MQorPFU4QzlFPiA8VThDOUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosp4xMworPFU4RDFFPiA8VThEMUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotJ4xNDk0Cis8VThGNDM+IDxVOEY0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i9gzAKKzxVOTA0OT4gPFU5MDQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YGJMAorPFU5MTU5PiA8VTkxNTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphZkwCis8VTkxREQ+IDxVOTFERD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mHnTM5Cis8VTkyNDE+IDxVOTI0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mJgTAKKzxVOTMzMT4gPFU5MzMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YyxMAorPFU5MzdDPiA8VTkzN0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjbwxCis8VTk0ODg+IDxVOTQ4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mSiDcxMDQKKzxVOTc1NT4gPFU5NzU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Z2VMAorPFU5OUQ3PiA8VTk5RDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpp5cwCis8VTlDNzU+IDxVOUM3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxtTAKKzxVOURDRj4gPFU5RENGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bePMAorPFUzNDMxPiA8VTM0MzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkLEwCis8VTNBOUI+IDxVM0E5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OqmzAKKzxVNDBBNj4gPFU0MEE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IKmMAorPFU0MEE3PiA8VTQwQTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgqcwCis8VTQ0NTA+IDxVNDQ1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SRkDAKKzxVNEFCND4gPFU0QUI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Kq0MAorPFU0QUVDPiA8VTRBRUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkq6wwCis8VTU5RUI+IDxVNTlFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WnqzAKKzxVNUYyQj4gPFU1RjJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5byrMAorPFU2MjhDPiA8VTYyOEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmiowwCis8VTYyQUU+IDxVNjJBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aKrjAKKzxVNjYyMz4gPFU2NjIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pijMAorPFU2Njc4PiA8VTY2Nzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmbgwCis8VTY3OTU+IDxVNjc5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aelTE2OTMKKzxVNzU1Qj4gPFU3NTVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55WbNQorPFU3NUI5PiA8VTc1Qjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlrkxMDMKKzxVNzcxNT4gPFU3NzE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55yVMQorPFU3OTczPiA8VTc5NzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpbMwCis8VTdBMzk+IDxVN0EzOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eouTMKKzxVN0IwOT4gPFU3QjA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56yJMAorPFU3RDNFPiA8VTdEM0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntL4wCis8VTdEN0M+IDxVN0Q3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e1vDAKKzxVN0UxRD4gPFU3RTFEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57idMAorPFU3RTI1PiA8VTdFMjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuKUwCis8VTgwNDQ+IDxVODA0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iBhDAKKzxVODg5Nz4gPFU4ODk3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KKXMAorPFU4OTk5PiA8VTg5OTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoppkwCis8VThCQ0E+IDxVOEJDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ivijkzMAorPFU4RUVCPiA8VThFRUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPou6swCis8VThGNzg+IDxVOEY3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i9uDI5Cis8VThGQjQ+IDxVOEZCND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i+tDAKKzxVOUIxMj4gPFU5QjEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aySMAorPFU5RUQ1PiA8VTlFRDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpu5UwCis8VTlFRjA+IDxVOUVGMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7sDAKKzxVMzRDND4gPFUzNEM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45OEMAorPFUzOEMwPiA8VTM4QzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjo4AwCis8VTNCQjM+IDxVM0JCMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OuszAKKzxVM0JFMj4gPFUzQkUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46+iMAorPFUzRDI4PiA8VTNEMjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjtKgwCis8VTQyQjY+IDxVNDJCNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SKtjAKKzxVNDNENj4gPFU0M0Q2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I+WMAorPFU0NzY5PiA8VTQ3Njk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknakwCis8VTQ3RjQ+IDxVNDdGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SftDAKKzxVNEEyRj4gPFU0QTJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KivMAorPFU0Q0I0PiA8VTRDQjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksrQwCis8VTRDRjI+IDxVNENGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SzsjAKKzxVNEZCMj4gPFU0RkIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L6yMAorPFU1NzMzPiA8VTU3MzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnLM3ODQKKzxVNTg2Nj4gPFU1ODY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aGmMAorPFU2MzBCPiA8VTYzMEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjIswCis8VTYzMkY+IDxVNjMyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aMrzM0MTQKKzxVNjNENT4gPFU2M0Q1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o+VMAorPFU2NzE1PiA8VTY3MTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnJU0NjMxCis8VTY4MUE+IDxVNjgxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+agmjAKKzxVNjg2RD4gPFU2ODZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qGtMAorPFU3NzM5PiA8VTc3Mzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnLkwCis8VTg3MDQ+IDxVODcwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ichDAKKzxVOEFBQj4gPFU4QUFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KqrMAorPFU4Q0QxPiA8VThDRDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPos5EwCis8VThENDg+IDxVOEQ0OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i1iDE3NworPFU5M0FEPiA8VTkzQUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjq0wCis8VTkzQUU+IDxVOTNBRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mOrjU5Cis8VTk1NDc+IDxVOTU0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mVhzU4OTgKKzxVOTYzNT4gPFU5NjM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Zi1MTI0MDAKKzxVOTY2Mz4gPFU5NjYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZmjMTEwCis8VTk3MDc+IDxVOTcwNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mchzQ1OTIKKzxVOUQwNj4gPFU5RDA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bSGMAorPFU5RTI5PiA8VTlFMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpuKk1MAorPFU0RTg5PiA8VTRFODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuokyMjY0MQorPFU0RjQyPiA8VTRGNDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvYIwCis8VTU3RTk+IDxVNTdFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WfqTAKKzxVNTlDMz4gPFU1OUMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aeDMAorPFU1Q0U1PiA8VTVDRTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPls6UyNTIKKzxVNUQyMj4gPFU1RDIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bSiMAorPFU1RjgxPiA8VTVGODE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvoE2ODM4Cis8VTVGQjA+IDxVNUZCMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W+sDAKKzxVNUZCND4gPFU1RkI0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b60MAorPFU1RkI1PiA8VTVGQjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvrU4MDIKKzxVNjAxND4gPFU2MDE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oCUMTY5NAorPFU2MzIzPiA8VTYzMjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjKMyMzE1Cis8VTYzOTk+IDxVNjM5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aOmTEwCis8VTcwQTE+IDxVNzBBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eCoTAKKzxVNzBERD4gPFU3MEREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54OdMQorPFU3MjJEPiA8VTcyMkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPniK0xMjIKKzxVNzJGMD4gPFU3MkYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54uwMTgzCis8VTczMTk+IDxVNzMxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eMmTQKKzxVNzVDNz4gPFU3NUM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55eHMTc5NAorPFU3NjY1PiA8VTc2NjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmaU0Cis8VTc3MTA+IDxVNzcxMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eckDAKKzxVNzc0MT4gPFU3NzQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj552BMzM4NQorPFU3NzVDPiA8VTc3NUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnZw0MgorPFU3QjVEPiA8VTdCNUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrZ01OTkKKzxVN0I4Rj4gPFU3QjhGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj566PMAorPFU3QkRDPiA8VTdCREM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnr5wwCis8VTgwNDc+IDxVODA0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iBhzAKKzxVODRCOD4gPFU4NEI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JK4MTM5OQorPFU4QUNEPiA8VThBQ0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoq40wCis8VThCRTQ+IDxVOEJFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ivpDI4Cis8VThFMkQ+IDxVOEUyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i4rTAKKzxVOTI2Nj4gPFU5MjY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YmmMAorPFU5MzFBPiA8VTkzMUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjJo5Cis8VTkzRjM+IDxVOTNGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mPszAKKzxVOTRCMj4gPFU5NEIyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZKyMgorPFU5NEVFPiA8VTk0RUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpk64yMjQKKzxVOUIwNz4gPFU5QjA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ayHMAorPFU0ODU1PiA8VTQ4NTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkoZUwCis8VTYxMzg+IDxVNjEzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aEuDAKKzxVNjI4RD4gPFU2MjhEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oqNMAorPFU2MkVGPiA8VTYyRUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmi682MTYKKzxVNjQ5Qz4gPFU2NDlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pKcMAorPFU2NTc0PiA8VTY1NzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlbQyNjQyMgorPFU2QzM2PiA8VTZDMzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsLYwCis8VTdDRkQ+IDxVN0NGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ezvTAKKzxVMzg2MD4gPFUzODYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46GgMAorPFUzODY3PiA8VTM4Njc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoacwCis8VTNDNEY+IDxVM0M0Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OxjzAKKzxVM0Y0MD4gPFUzRjQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj472AMAorPFU0MEJCPiA8VTQwQkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkgrswCis8VTQyMjM+IDxVNDIyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SIozAKKzxVNDZFQj4gPFU0NkVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JurMAorPFU0OTRDPiA8VTQ5NEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpYwwCis8VTQ5NkQ+IDxVNDk2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SlrTAKKzxVNDk5Qj4gPFU0OTlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KabMAorPFU0OUI2PiA8VTQ5QjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkprYwCis8VTVFMjc+IDxVNUUyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W4pzE4NQorPFU1RTQwPiA8VTVFNDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluYAxCis8VTY1M0Y+IDxVNjUzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aUvzQyNDk5Cis8VTZCNjM+IDxVNkI2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+atozc5OTAyCis8VThBM0M+IDxVOEEzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iovDIzCis8VThCNDk+IDxVOEI0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+itiTE1OAorPFU4QkMxPiA8VThCQzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor4EyMzkxNgorPFU5MEQxPiA8VTkwRDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg5EyODg4Cis8VTkxMkQ+IDxVOTEyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mErTQKKzxVOUQwQT4gPFU5RDBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bSKMAorPFU0RTRCPiA8VTRFNEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuYsxMzEyNjMKKzxVNTAwMT4gPFU1MDAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YCBMAorPFU1MzZFPiA8VTUzNkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlja4yMgorPFU1NDMxPiA8VTU0MzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkLExMjYzCis8VTVERjU+IDxVNURGNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W3tTAKKzxVNjNCNz4gPFU2M0I3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o63Nzk4Cis8VTY0MTg+IDxVNjQxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aQmDAKKzxVNjUyRj4gPFU2NTJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pSvMjE5MzQKKzxVNjc5RD4gPFU2NzlEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p6dNDA0OAorPFU2N0IzPiA8VTY3QjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnrMxOQorPFU2ODAwPiA8VTY4MDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoIA5NAorPFU2ODk0PiA8VTY4OTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmopQwCis8VTY5MjU+IDxVNjkyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+akpTAKKzxVNjlCMD4gPFU2OUIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qawMAorPFU2QzQxPiA8VTZDNDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsYExMDcwCis8VTZDNjU+IDxVNkM2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+axpTAKKzxVNkNEQz4gPFU2Q0RDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rOcMAorPFU3N0U1PiA8VTc3RTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnn6UxMDE5OTYKKzxVNzk1Nz4gPFU3OTU3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56WXODgKKzxVNzk2Qz4gPFU3OTZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56WsMAorPFU3OUQzPiA8VTc5RDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnp5MwCis8VTc5RDY+IDxVNzlENj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+enljAKKzxVNzlFQT4gPFU3OUVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56eqMAorPFU3RDk1PiA8VTdEOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntpUwCis8VTdFNTQ+IDxVN0U1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e5lDU3Cis8VTdFQzc+IDxVN0VDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e7hzEwMjk4Cis8VTgwQTI+IDxVODBBMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iCojEwNDIKKzxVODBEMT4gPFU4MEQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IORMAorPFU4MEREPiA8VTgwREQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPog50xOQorPFU4MTAyPiA8VTgxMDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohIIxMzA0Cis8VTgyOUQ+IDxVODI5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iKnTE1MDcKKzxVODcxOD4gPFU4NzE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JyYMzgzCis8VTg4N0M+IDxVODg3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ihvDAKKzxVODlFRj4gPFU4OUVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KevMQorPFU5NkJCPiA8VTk2QkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmrs3MgorPFU5OUI2PiA8VTk5QjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpprYwCis8VTlDRjc+IDxVOUNGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mztzAKKzxVOUQzMj4gPFU5RDMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bSyMQorPFU5RjA1PiA8VTlGMDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvIUwCis8VTM2Nzc+IDxVMzY3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OZtzAKKzxVMzczQz4gPFUzNzNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45y8MAorPFUzQTAxPiA8VTNBMDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqIEwCis8VTQ0MDg+IDxVNDQwOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SQiDAKKzxVNDdDOD4gPFU0N0M4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J+IMAorPFU0QzY1PiA8VTRDNjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPksaUwCis8VTRENDI+IDxVNEQ0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S1gjAKKzxVNEY4ND4gPFU0Rjg0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L6EODA2Cis8VTUwMjQ+IDxVNTAyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WApDAKKzxVNTAzQz4gPFU1MDNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YC8MTQyMDQKKzxVNTEyOD4gPFU1MTI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YSoMAorPFU1NzY3PiA8VTU3Njc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnacwCis8VTU3RjQ+IDxVNTdGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WftDIKKzxVNTdGNz4gPFU1N0Y3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z+3NzgKKzxVNTg4Qz4gPFU1ODhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aKMMAorPFU1OUVBPiA8VTU5RUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlp6o2Cis8VTVCMDI+IDxVNUIwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WsgjAKKzxVNjE3OT4gPFU2MTc5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oW5MAorPFU2MUVCPiA8VTYxRUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmh6swCis8VTYyNjc+IDxVNjI2Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aJpzEyMDc5Cis8VTY0NkQ+IDxVNjQ2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aRrTExCis8VTY0RkY+IDxVNjRGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aTvzEKKzxVNjdFMz4gPFU2N0UzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p+jMAorPFU2ODRFPiA8VTY4NEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoY45MgorPFU2OTBEPiA8VTY5MEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpI0yOTQ5Cis8VTZBMzQ+IDxVNkEzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aotDAKKzxVNkI5Nj4gPFU2Qjk2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q6WMTkxMworPFU2RjEwPiA8VTZGMTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvJAwCis8VTcyODY+IDxVNzI4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eKhjAKKzxVNzRDNj4gPFU3NEM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55OGMAorPFU3NEUxPiA8VTc0RTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnk6EwCis8VTc2RjQ+IDxVNzZGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ebtDQ4NDg4Cis8VTc5ODM+IDxVNzk4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+emgzAKKzxVNzlGNz4gPFU3OUY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56e3MAorPFU3QTE5PiA8VTdBMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqJkwCis8VTdENzc+IDxVN0Q3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e1tzIKKzxVN0UzNj4gPFU3RTM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57i2MAorPFU4MDQwPiA8VTgwNDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogYAwCis8VTgwNEM+IDxVODA0Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iBjDEwMDY3Cis8VTgwNzc+IDxVODA3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iBtzYwCis8VTgxQjE+IDxVODFCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iGsTAKKzxVODYzNT4gPFU4NjM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ji1MAorPFU4N0Q5PiA8VTg3RDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPon5kwCis8VTg5MDE+IDxVODkwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ikgTAKKzxVOERENj4gPFU4REQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LeWNQorPFU4RTJGPiA8VThFMkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouK81NgorPFU4RTYwPiA8VThFNjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouaAwCis8VThFOTE+IDxVOEU5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6kTAKKzxVOEVDND4gPFU4RUM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LuEMAorPFU5MURFPiA8VTkxREU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPph54wCis8VTk5QkQ+IDxVOTlCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mmvTAKKzxVMzlGQj4gPFUzOUZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46e7MAorPFUzQkI5PiA8VTNCQjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjrrkwCis8VTNDOUI+IDxVM0M5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OymzAKKzxVNDE2OT4gPFU0MTY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IWpMAorPFU0MURCPiA8VTQxREI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkh5swCis8VTQzMjQ+IDxVNDMyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SMpDAKKzxVNDNCQT4gPFU0M0JBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I66MAorPFU0NkQ3PiA8VTQ2RDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkm5cwCis8VTRDQzU+IDxVNENDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SzhTAKKzxVNTJBNz4gPFU1MkE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YqnMAorPFU1MzhFPiA8VTUzOEU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPljo4wCis8VTUzRUE+IDxVNTNFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WPqjEwMDAwMAorPFU1NEFCPiA8VTU0QUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkqsxODgKKzxVNTc0MD4gPFU1NzQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z2ANDI4MworPFU1NzQxPiA8VTU3NDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlnYEwCis8VTU5MDI+IDxVNTkwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WkgjAKKzxVNUUwQj4gPFU1RTBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5biLMAorPFU2MDQ5PiA8VTYwNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgYkxCis8VTYyQTc+IDxVNjJBNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aKpzAKKzxVNjMwNz4gPFU2MzA3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oyHNDM2NjEKKzxVNjVFOD4gPFU2NUU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5peoMjk3NAorPFU2NjRBPiA8VTY2NEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmYowCis8VTY4M0E+IDxVNjgzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+agujAKKzxVNkI2Mj4gPFU2QjYyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q2iMTUxNDQKKzxVNkM5QT4gPFU2QzlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rKaMAorPFU2RDE0PiA8VTZEMTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtJQwCis8VTZERkQ+IDxVNkRGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3vTAKKzxVNzVCQj4gPFU3NUJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55a7MAorPFU3ODBCPiA8VTc4MEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoIswCis8VTc5NDk+IDxVNzk0OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eliTExNworPFU3RDE5PiA8VTdEMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntJk3NAorPFU3RUI4PiA8VTdFQjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnurgxMTUxOAorPFU4MkI3PiA8VTgyQjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoirczMjkKKzxVODVFMj4gPFU4NUUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JeiMAorPFU4OTY3PiA8VTg5Njc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPopacwCis8VThBMjg+IDxVOEEyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ioqDAKKzxVOERCRT4gPFU4REJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6La+NDQ0Cis8VThFRjk+IDxVOEVGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i7uTAKKzxVOEY3NT4gPFU4Rjc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L21MQorPFU5MTZGPiA8VTkxNkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpha8xMworPFU5NjJGPiA8VTk2MkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmK8wCis8VTlFRjk+IDxVOUVGOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m7uTQKKzxVMzU0ND4gPFUzNTQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45WEMAorPFUzNUNDPiA8VTM1Q0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjl4wwCis8VTM1RTc+IDxVMzVFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OXpzAKKzxVMzYwOT4gPFUzNjA5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45iJMAorPFUzNkZGPiA8VTM2RkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjm78wCis8VTM3NDI+IDxVMzc0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OdgjAKKzxVMzhFNT4gPFUzOEU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46OlMAorPFUzQTE2PiA8VTNBMTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqJYwCis8VTNEMUI+IDxVM0QxQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O0mzAKKzxVNDEzQT4gPFU0MTNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IS6MAorPFU0MTg4PiA8VTQxODg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhogwCis8VTQxRkQ+IDxVNDFGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SHvTAKKzxVNDI0NT4gPFU0MjQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ImFMAorPFU0MjVDPiA8VTQyNUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiZwwCis8VTQzQzQ+IDxVNDNDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SPhDAKKzxVNDNFRj4gPFU0M0VGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I+vMAorPFU0NDJEPiA8VTQ0MkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkK0wCis8VTQ0NDc+IDxVNDQ0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SRhzAKKzxVNDRDQz4gPFU0NENDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JOMMAorPFU0NTRDPiA8VTQ1NEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklYwwCis8VTQ2QTY+IDxVNDZBNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SapjAKKzxVNDc3Nz4gPFU0Nzc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J23MAorPFU0NzgzPiA8VTQ3ODM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknoMwCis8VTQ4Nzk+IDxVNDg3OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ShuTAKKzxVNDk0RD4gPFU0OTREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KWNMAorPFU0OUFGPiA8VTQ5QUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpq8wCis8VTRBRDU+IDxVNEFENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SrlTAKKzxVNEIzOT4gPFU0QjM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ky5MAorPFU0QjQxPiA8VTRCNDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrYEwCis8VTRDNjg+IDxVNEM2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SxqDAKKzxVNTA2Qj4gPFU1MDZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YGrMAorPFU1MjM2PiA8VTUyMzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliLYzNjY1MQorPFU1Mjk1PiA8VTUyOTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlipUwCis8VTUzOTQ+IDxVNTM5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WOlDAKKzxVNTc4MT4gPFU1NzgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z6BMAorPFU1QTIxPiA8VTVBMjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlqKEwCis8VTVCRDg+IDxVNUJEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WvmDAKKzxVNUQzQj4gPFU1RDNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bS7MAorPFU1RTE5PiA8VTVFMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluJkxOAorPFU1RTFDPiA8VTVFMUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluJw2MTcKKzxVNUU1Rj4gPFU1RTVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bmfNAorPFU1RUEyPiA8VTVFQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluqIwCis8VTVFQTQ+IDxVNUVBND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W6pDAKKzxVNUY1OD4gPFU1RjU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b2YOQorPFU1RjhGPiA8VTVGOEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlvo8wCis8VTVGOUQ+IDxVNUY5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W+nTAKKzxVNUZENz4gPFU1RkQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b+XMTYxNTgKKzxVNUZFRT4gPFU1RkVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b+uNAorPFU2MTg0PiA8VTYxODQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmhoQwCis8VTYxRTU+IDxVNjFFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aHpTAKKzxVNjMwMz4gPFU2MzAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oyDMAorPFU2MzFBPiA8VTYzMUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjJo2NTYKKzxVNjQzMT4gPFU2NDMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pCxMAorPFU2NDZGPiA8VTY0NkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmka80Cis8VTY0RjI+IDxVNjRGMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aTsjE0Cis8VTY1RDg+IDxVNjVEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aXmDAKKzxVNjY3QT4gPFU2NjdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pm6NzkyMgorPFU2OEJEPiA8VTY4QkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmor0wCis8VTZBQ0Q+IDxVNkFDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+arjTAKKzxVNkFEQj4gPFU2QURCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qubMAorPFU2Q0JCPiA8VTZDQkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsrsyMjUxMQorPFU2RDM3PiA8VTZEMzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtLcwCis8VTZEREI+IDxVNkREQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3mzAKKzxVNkVDRD4gPFU2RUNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ruNMAorPFU2RURFPiA8VTZFREU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmu545OTcKKzxVNkVFRj4gPFU2RUVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ruvNgorPFU2RjRDPiA8VTZGNEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvYwwCis8VTcwOTk+IDxVNzA5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eCmTIyNQorPFU3MUFCPiA8VTcxQUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhqswCis8VTcyRkU+IDxVNzJGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eLvjAKKzxVNzMxOD4gPFU3MzE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54yYMAorPFU3NTY0PiA8VTc1NjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlaQyCis8VTc1OTA+IDxVNzU5MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eWkDAKKzxVNzVEND4gPFU3NUQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55eUMTAyCis8VTc1RTM+IDxVNzVFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eXozI0OQorPFU3OTI5PiA8VTc5Mjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpKkwCis8VTc5NTE+IDxVNzk1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+elkTAKKzxVNzlFOT4gPFU3OUU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56epMTM0MgorPFU3OUYyPiA8VTc5RjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnp7IwCis8VTdBMUE+IDxVN0ExQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eomjExMDAKKzxVN0EzQT4gPFU3QTNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56i6MQorPFU3QTkyPiA8VTdBOTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqpI1MjAKKzxVN0I2Qj4gPFU3QjZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj562rMAorPFU3RDI5PiA8VTdEMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntKkwCis8VTdERkI+IDxVN0RGQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3uzcKKzxVN0Y2RT4gPFU3RjZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj572uMTY0OTcKKzxVN0ZEMD4gPFU3RkQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57+QMAorPFU4MEY1PiA8VTgwRjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPog7UwCis8VTgxQTM+IDxVODFBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iGozAKKzxVODFGMz4gPFU4MUYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IezNDA5MzgKKzxVODFGND4gPFU4MUY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ie0MTQ5MTAKKzxVODFGOD4gPFU4MUY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ie4MAorPFU4Mjk2PiA8VTgyOTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoipYwCis8VTg2RUQ+IDxVODZFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ibrTE3Cis8VTg3QjI+IDxVODdCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iesjAKKzxVODg5Rj4gPFU4ODlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KKfMAorPFU4OEEwPiA8VTg4QTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooqAyCis8VTg4RkQ+IDxVODhGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ijvTY0Cis8VTg5OUY+IDxVODk5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+imnzAKKzxVODlENz4gPFU4OUQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KeXMAorPFU4OUUyPiA8VTg5RTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPop6IwCis8VTg5RjY+IDxVODlGNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+intjAKKzxVOEE4Qz4gPFU4QThDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KqMMTUKKzxVOEM1MT4gPFU4QzUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LGRMAorPFU4QzUyPiA8VThDNTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosZIwCis8VThDNzg+IDxVOEM3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ixuDE2Cis8VThDQUQ+IDxVOENBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iyrTAKKzxVOENFQT4gPFU4Q0VBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LOqOTIKKzxVOEQwND4gPFU4RDA0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LSEMAorPFU4RDI4PiA8VThEMjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotKgxOTIwMAorPFU4RDNEPiA8VThEM0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotL0zMgorPFU4REYxPiA8VThERjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPot7EwCis8VThFMkM+IDxVOEUyQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i4rDEwCis8VThFOTM+IDxVOEU5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6kzEKKzxVOEYwQT4gPFU4RjBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LyKMAorPFU4RjdFPiA8VThGN0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovb40Cis8VThGRTM+IDxVOEZFMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i/ozAKKzxVOTA3MD4gPFU5MDcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YGwMAorPFU5MEM1PiA8VTkwQzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg4U0MAorPFU5MjhEPiA8VTkyOEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpio0wCis8VTkyRDU+IDxVOTJENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mLlTAKKzxVOTQ1NT4gPFU5NDU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZGVMAorPFU5NERBPiA8VTk0REE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpk5owCis8VTk1Mjc+IDxVOTUyNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mUpzAKKzxVOTY1Rj4gPFU5NjVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZmfMzgKKzxVOTY2Nj4gPFU5NjY2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZmmMAorPFU5NkIyPiA8VTk2QjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmrIwCis8VTk2Qzk+IDxVOTZDOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mbiTgyCis8VTk5RTQ+IDxVOTlFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mnpDAKKzxVOUEyRD4gPFU5QTJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aitMAorPFU5QTNBPiA8VTlBM0E+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqLowCis8VTlBNDc+IDxVOUE0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mphzAKKzxVOUE5OD4gPFU5QTk4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aqYMjUKKzxVOUQxOT4gPFU5RDE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bSZMAorPFU5RDI5PiA8VTlEMjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptKkwCis8VTlERDk+IDxVOUREOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m3mTAKKzxVOUUzNz4gPFU5RTM3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bi3MjYKKzxVNEUyRD4gPFU0RTJEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LitMjk1NzA5Cis8VTRGMDA+IDxVNEYwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S8gDAKKzxVNTIyMz4gPFU1MjIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YijMAorPFU1OTkwPiA8VTU5OTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlppA0Cis8VTVFNTI+IDxVNUU1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W5kjAKKzxVNUY3OD4gPFU1Rjc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b24MAorPFU1RkUwPiA8VTVGRTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlv6A0MDU1Cis8VTY3Q0E+IDxVNjdDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+afijAKKzxVNkM3Nz4gPFU2Qzc3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rG3MAorPFU2Q0M4PiA8VTZDQzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPms4gwCis8VTZGNjg+IDxVNkY2OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a9qDAKKzxVNzA4Mj4gPFU3MDgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54KCMAorPFU3MTQ0PiA8VTcxNDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhYQwCis8VTc2QzU+IDxVNzZDNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ebhTIwMworPFU3QzY2PiA8VTdDNjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsaYwCis8VTdENDI+IDxVN0Q0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e1gjMyMAorPFU3RUM4PiA8VTdFQzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnu4gyNTQ0NQorPFU4MjJGPiA8VTgyMkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiK8xCis8VTg1MjA+IDxVODUyMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iUoDAKKzxVODdCRD4gPFU4N0JEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J69MQorPFU4ODczPiA8VTg4NzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoobMwCis8VTg4Nzc+IDxVODg3Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ihtzE3MzIKKzxVOEU3MT4gPFU4RTcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LmxNAorPFU5MjIxPiA8VTkyMjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiKEwCis8VTkzN0U+IDxVOTM3RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mNvjgKKzxVOTQxOD4gPFU5NDE4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZCYODYKKzxVOTQ5Rj4gPFU5NDlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZKfMTQyNjMKKzxVOTUzQT4gPFU5NTNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZS6MzAwCis8VTlEMjQ+IDxVOUQyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m0pDAKKzxVMzhFQj4gPFUzOEVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46OrMAorPFU1MUEyPiA8VTUxQTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlhqIxMDMKKzxVNTVBMD4gPFU1NUEwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZagMAorPFU1ODVBPiA8VTU4NUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloZo1Cis8VTVDMzA+IDxVNUMzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WwsDAKKzxVNkI3MT4gPFU2QjcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q2xMAorPFU3NjA3PiA8VTc2MDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmIcwCis8VTc5Q0Q+IDxVNzlDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+enjTYwMDAwCis8VTdBMkU+IDxVN0EyRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eorjg5NAorPFU4MEJGPiA8VTgwQkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogr8xMDMzCis8VTgxNkI+IDxVODE2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iFqzgKKzxVOEUzNT4gPFU4RTM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Li1MTYyCis8VUZBMTA+IDxVRkExMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI++okDAKKzxVMzQzQT4gPFUzNDNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45C6MAorPFUzQ0I0PiA8VTNDQjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsrQwCis8VTRDNzA+IDxVNEM3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SxsDAKKzxVNEU1MT4gPFU0RTUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LmRMAorPFU0RUYyPiA8VTRFRjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPku7I5ODcKKzxVNEYxNz4gPFU0RjE3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LyXMTc0NjQKKzxVNTA0NT4gPFU1MDQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YGFMAorPFU1ODM5PiA8VTU4Mzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloLkwCis8VTU5OTU+IDxVNTk5NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WmlTAKKzxVNUE5MT4gPFU1QTkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aqRMAorPFU2RTY5PiA8VTZFNjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmuakwCis8VTcyQzY+IDxVNzJDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eLhjAKKzxVNzczRT4gPFU3NzNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55y+MjYyCis8VTdCNTc+IDxVN0I1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+etlzAKKzxVN0RERj4gPFU3RERGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57efMgorPFU4MzNEPiA8VTgzM0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojL0wCis8VTg2OUI+IDxVODY5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iamzAKKzxVODg0Nj4gPFU4ODQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KGGMAorPFU4ODc2PiA8VTg4NzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoobYwCis8VThBRTU+IDxVOEFFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+irpTAKKzxVOTFDRD4gPFU5MUNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YeNNTY0MzgKKzxVNEY5Qz4gPFU0RjlDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L6cMAorPFU1NDY4PiA8VTU0Njg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkagyOTA5NgorPFU1NThDPiA8VTU1OEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllowwCis8VTVEREU+IDxVNURERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W3njk1MzMKKzxVNUY5Rj4gPFU1RjlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5b6fMAorPFU2RDAwPiA8VTZEMDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtIAwCis8VTZEMzI+IDxVNkQzMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a0sjgzMTAKKzxVNkRDRD4gPFU2RENEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5reNMAorPFU3MEQwPiA8VTcwRDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPng5AwCis8VTczRDg+IDxVNzNEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ePmDAKKzxVNzZFOT4gPFU3NkU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55upMAorPFU3N0VBPiA8VTc3RUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnn6oxCis8VTdDQTU+IDxVN0NBNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eypTgyNgorPFU4MjFGPiA8VTgyMUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiJ8xNjE4Cis8VThCMDU+IDxVOEIwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ishTEKKzxVOEI3OD4gPFU4Qjc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K24MAorPFU4QkNDPiA8VThCQ0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor4wxMjAKKzxVOEJFQT4gPFU4QkVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K+qMAorPFU4Q0Q5PiA8VThDRDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPos5kwCis8VThENTI+IDxVOEQ1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i1kjUKKzxVOEYwOD4gPFU4RjA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LyIMAorPFU4RjE2PiA8VThGMTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovJYwCis8VThGODA+IDxVOEY4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i+gDAKKzxVOTAzMT4gPFU5MDMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YCxMjAKKzxVOTBFRT4gPFU5MEVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YOuMAorPFU5MjgyPiA8VTkyODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpioIwCis8VTk3MEM+IDxVOTcwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mcjDAKKzxVOUEwNj4gPFU5QTA2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aiGMAorPFU5RDQzPiA8VTlENDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptYMwCis8VTM2RTk+IDxVMzZFOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ObqTAKKzxVNTlBRj4gPFU1OUFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aavMjQKKzxVNzhBMT4gPFU3OEExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56KhMTcKKzxVOEVGOD4gPFU4RUY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Lu4OAorPFU4Rjc0PiA8VThGNzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovbQ4MDUKKzxVNDNCQj4gPFU0M0JCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I67MAorPFU0NTlFPiA8VTQ1OUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklp4wCis8VTVFMUE+IDxVNUUxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W4mjI1NworPFU2NjZEPiA8VTY2NkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmma0wCis8VTc1OUI+IDxVNzU5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eWmzAKKzxVNzc2RD4gPFU3NzZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj552tMAorPFU3QjkyPiA8VTdCOTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrpIwCis8VTgwOTg+IDxVODA5OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iCmDUxOQorPFU4M0Y3PiA8VTgzRjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoj7cwCis8VTlCREU+IDxVOUJERT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mvnjAKKzxVMzQ0Nz4gPFUzNDQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45GHMAorPFUzNDczPiA8VTM0NzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjkbMwCis8VTM1MEM+IDxVMzUwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OUjDAKKzxVMzk2RT4gPFUzOTZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46WuMAorPFUzRjE5PiA8VTNGMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvJkwCis8VTNGQUQ+IDxVM0ZBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O+rTAKKzxVNDFFMD4gPFU0MUUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IegMAorPFU0MjE5PiA8VTQyMTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkiJkwCis8VTQyRDM+IDxVNDJEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SLkzAKKzxVNDQwRD4gPFU0NDBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JCNMAorPFU0NkM2PiA8VTQ2QzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkm4YwCis8VTRBNUM+IDxVNEE1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SpnDAKKzxVNEQ4Nz4gPFU0RDg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LaHMAorPFU0RjM3PiA8VTRGMzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvLcwCis8VTUwRkQ+IDxVNTBGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WDvTAKKzxVNTE5MT4gPFU1MTkxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YaRMQorPFU1NDZBPiA8VTU0NkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkaowCis8VTU0OTI+IDxVNTQ5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WSkjEzOTkKKzxVNTRBRT4gPFU1NEFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZKuMAorPFU1NjYzPiA8VTU2NjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlmaMwCis8VTVCOTk+IDxVNUI5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WumTQ0MDEKKzxVNjAxRT4gPFU2MDFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oCeMAorPFU2NjNDPiA8VTY2M0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmLw4OTgKKzxVNjY1RD4gPFU2NjVEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pmdMTEKKzxVNzUwMz4gPFU3NTAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55SDMQorPFU3NkIxPiA8VTc2QjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmrEyNzgzCis8VTc2QkE+IDxVNzZCQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eaujI1Cis8VTdDNDA+IDxVN0M0MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+exgDEKKzxVN0M1Mj4gPFU3QzUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57GSMAorPFU3QzU1PiA8VTdDNTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsZUwCis8VTdDOTk+IDxVN0M5OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eymTAKKzxVN0QwMj4gPFU3RDAyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57SCMAorPFU3RTEwPiA8VTdFMTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuJAwCis8VTdFQTM+IDxVN0VBMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e6ozEyOAorPFU3RUM5PiA8VTdFQzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnu4kxNjUKKzxVODBDND4gPFU4MEM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IOENjYKKzxVODM2RT4gPFU4MzZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I2uMAorPFU4NDY0PiA8VTg0NjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokaQwCis8VThBNEI+IDxVOEE0Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ipizAKKzxVOTE0RT4gPFU5MTRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YWOMAorPFU5OUNFPiA8VTk5Q0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpp44wCis8VTlBNUY+IDxVOUE1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mpnzkKKzxVOUE3QT4gPFU5QTdBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6am6MTcKKzxVOUFBND4gPFU5QUE0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aqkMTUyMAorPFU0RjhGPiA8VTRGOEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvo8xOTkKKzxVNTJBRj4gPFU1MkFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YqvMAorPFU2NzMxPiA8VTY3MzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnLExMDU3MQorPFU2ODJBPiA8VTY4MkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoKo5NzEKKzxVNjlFMD4gPFU2OUUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qegMjUKKzxVNkE2NT4gPFU2QTY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qmlMQorPFU2QUU3PiA8VTZBRTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmq6cwCis8VTZBRUI+IDxVNkFFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+arqzEKKzxVNkQxOT4gPFU2RDE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rSZNzIKKzxVNkY3ND4gPFU2Rjc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r20MworPFU3MDI2PiA8VTcwMjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngKYwCis8VTczMkE+IDxVNzMyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eMqjU1NjcKKzxVNzNFMD4gPFU3M0UwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54+gNTY4OQorPFU3ODQzPiA8VTc4NDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoYMwCis8VTdENTE+IDxVN0Q1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e1kTAKKzxVODMzMT4gPFU4MzMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IyxNDYKKzxVODZEQj4gPFU4NkRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JubNjMzCis8VTg3NkI+IDxVODc2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+idqzAKKzxVODhCRT4gPFU4OEJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KK+MAorPFU4OUYwPiA8VTg5RjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPop7AwCis8VThBODU+IDxVOEE4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iqhTEKKzxVOEFGOD4gPFU4QUY4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ku4ODcKKzxVOEJEQj4gPFU4QkRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6K+bMjUxCis8VThCRjg+IDxVOEJGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ivuDQyMDMKKzxVOEM2Qz4gPFU4QzZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LGsMjcKKzxVOTBCRT4gPFU5MEJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YK+MAorPFU5Mjk2PiA8VTkyOTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpipYwCis8VTk0RTI+IDxVOTRFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mTojIxCis8VTk5RUY+IDxVOTlFRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mnrzAKKzxVOUJBMj4gPFU5QkEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a6iMAorPFU5RDM4PiA8VTlEMzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptLgwCis8VTlGMDQ+IDxVOUYwND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m8hDAKKzxVRkExNj4gPFVGQTE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj76iWMAorPFVGQTIyPiA8VUZBMjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPvqKIwCis8VTM1MDk+IDxVMzUwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OUiTAKKzxVNDMzNT4gPFU0MzM1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Iy1MAorPFU0NTdEPiA8VTQ1N0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPklb0wCis8VTQ2MUE+IDxVNDYxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SYmjAKKzxVNDdDOT4gPFU0N0M5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J+JMAorPFU0OTZFPiA8VTQ5NkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkpa4wCis8VTRCQjE+IDxVNEJCMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SusTAKKzxVNTI4NT4gPFU1Mjg1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YqFMAorPFU1MjlBPiA8VTUyOUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlipowCis8VTY1Qjg+IDxVNjVCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWuDAKKzxVNjZFRj4gPFU2NkVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5puvMAorPFU2NzJFPiA8VTY3MkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnK44Cis8VTcwNUY+IDxVNzA1Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eBnzAKKzxVNzBBMj4gPFU3MEEyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54KiMAorPFU3MERCPiA8VTcwREI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPng5sxNzcxCis8VTcxRUQ+IDxVNzFFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eHrTEKKzxVNzIyNT4gPFU3MjI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54ilMAorPFU3NjAzPiA8VTc2MDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnmIMwCis8VTdBOEI+IDxVN0E4Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eqizAKKzxVN0FGOT4gPFU3QUY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56u5NDI2MgorPFU3QUZBPiA8VTdBRkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnq7o3NQorPFU3QjAxPiA8VTdCMDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnrIEwCis8VTdCMUM+IDxVN0IxQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+esnDAKKzxVN0JDOT4gPFU3QkM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56+JMTEKKzxVN0JFQj4gPFU3QkVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56+rMAorPFU4MjMzPiA8VTgyMzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoiLMxCis8VTgzM0Y+IDxVODMzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iMvzAKKzxVODRFQj4gPFU4NEVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JOrMAorPFU4ODBCPiA8VTg4MEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooIs1Cis8VTg4M0U+IDxVODgzRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+igvjAKKzxVOEQ4OT4gPFU4RDg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LaJMAorPFU4RTg1PiA8VThFODU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouoU1OAorPFU5MDEwPiA8VTkwMTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpgJA2NDI5Cis8VTlDNDE+IDxVOUM0MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxgTAKKzxVM0Q2RD4gPFUzRDZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47WtMAorPFU0NjIyPiA8VTQ2MjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmKIwCis8VTRDMUU+IDxVNEMxRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SwnjAKKzxVNEUzNj4gPFU0RTM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Li2NzQKKzxVNEUzQj4gPFU0RTNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Li7NzQ0NjgKKzxVNTYzMT4gPFU1NjMxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZixMTE0MAorPFU1NkQxPiA8VTU2RDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlm5E4Cis8VTU4RjQ+IDxVNThGND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WjtDAKKzxVNUI0RT4gPFU1QjRFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a2OMAorPFU1Qjk0PiA8VTVCOTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrpQwCis8VTYyQzQ+IDxVNjJDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aLhDE3OAorPFU2QjE4PiA8VTZCMTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmrJgwCis8VTZFMUE+IDxVNkUxQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a4mjQwCis8VTZGRDA+IDxVNkZEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a/kDAKKzxVNzE1MT4gPFU3MTUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54WRMAorPFU3MTZFPiA8VTcxNkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnha4xMzk3Cis8VTc3MUQ+IDxVNzcxRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ecnTAKKzxVNzdBOT4gPFU3N0E5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj556pMzY1Cis8VTc3REE+IDxVNzdEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+efmjMKKzxVNzgyQj4gPFU3ODJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56CrMAorPFU3RjVDPiA8VTdGNUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvZwwCis8VThBNUQ+IDxVOEE1RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ipnTAKKzxVOENBRj4gPFU4Q0FGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LKvMAorPFU5NjdDPiA8VTk2N0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmbwwCis8VTlFODg+IDxVOUU4OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6iDgKKzxVMzQ0Rj4gPFUzNDRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45GPMAorPFUzNzQ5PiA8VTM3NDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjnYkwCis8VTM5MTY+IDxVMzkxNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OkljAKKzxVMzlFMz4gPFUzOUUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46ejMAorPFUzQUMyPiA8VTNBQzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjq4IwCis8VTNFNjU+IDxVM0U2NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O5pTAKKzxVM0U5Qj4gPFUzRTlCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47qbMAorPFUzRkJCPiA8VTNGQkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjvrswCis8VTNGRkU+IDxVM0ZGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O/vjAKKzxVNDFFMT4gPFU0MUUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IehMAorPFU0MUU3PiA8VTQxRTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkh6cwCis8VTQzNDY+IDxVNDM0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SNhjAKKzxVNDNCNz4gPFU0M0I3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I63MAorPFU0NDIyPiA8VTQ0MjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkkKIwCis8VTQ3NTI+IDxVNDc1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SdkjAKKzxVNDc2Qz4gPFU0NzZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J2sMAorPFU0QjIxPiA8VTRCMjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrKEwCis8VTRCNTY+IDxVNEI1Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+StljAKKzxVNEYyQj4gPFU0RjJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LyrMzExCis8VTRGNDc+IDxVNEY0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+S9hzYKKzxVNEY0Rj4gPFU0RjRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L2PNDc4OTkKKzxVNTJBOT4gPFU1MkE5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YqpMTEzNzUKKzxVNTc3RT4gPFU1NzdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z2+MAorPFU1RDQwPiA8VTVENDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltYAwCis8VTY3N0M+IDxVNjc3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+advDIwCis8VTY3RjE+IDxVNjdGMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+afsTI3MTUKKzxVNjdGNz4gPFU2N0Y3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5p+3MgorPFU2QTI2PiA8VTZBMjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqKYwCis8VTZBRTE+IDxVNkFFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aroTAKKzxVNkJCNj4gPFU2QkI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q62MAorPFU2Q0U4PiA8VTZDRTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPms6gyMTI2NgorPFU3MEI3PiA8VTcwQjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngrc0MgorPFU3NUIwPiA8VTc1QjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnlrAwCis8VTc5NUQ+IDxVNzk1RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+elnTQwMjYKKzxVNzk2OT4gPFU3OTY5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56WpMAorPFU3OUZDPiA8VTc5RkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnp7wwCis8VTdBREE+IDxVN0FEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ermjAKKzxVN0I1MT4gPFU3QjUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj562RMzEwNQorPFU3QjZGPiA8VTdCNkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnra8xCis8VTdCQjg+IDxVN0JCOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+euuDEzMworPFU3RDM1PiA8VTdEMzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntLUzNQorPFU3RDM4PiA8VTdEMzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntLgxCis8VTdFQkI+IDxVN0VCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e6uzQzCis8VTdGOUM+IDxVN0Y5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e+nDAKKzxVN0ZFNT4gPFU3RkU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57+lMTIKKzxVODM4Nz4gPFU4Mzg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I6HMAorPFU4NDU3PiA8VTg0NTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokZcxNzY3MworPFU4NkMwPiA8VTg2QzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPom4A4MAorPFU4QTNCPiA8VThBM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqLsxNTUKKzxVOEFEND4gPFU4QUQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KuUMAorPFU4RDJFPiA8VThEMkU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotK4yMzQKKzxVOEREMz4gPFU4REQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LeTMAorPFU4RUY0PiA8VThFRjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPou7QwCis8VTkyNTI+IDxVOTI1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mJkjAKKzxVOTJGMz4gPFU5MkYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YuzMAorPFU5NDQ0PiA8VTk0NDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkYQzCis8VTk0Rjg+IDxVOTRGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mTuDU1NAorPFU5NzE0PiA8VTk3MTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnJQwCis8VTk4RjM+IDxVOThGMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mjszAKKzxVOTlCNT4gPFU5OUI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aa1MAorPFU5OUQwPiA8VTk5RDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpp5A1MAorPFU5QTdCPiA8VTlBN0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqbs0NDU2Cis8VTlFODY+IDxVOUU4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m6hjAKKzxVNjI5Mz4gPFU2MjkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oqTODkwOAorPFU2QTlCPiA8VTZBOUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqpswCis8VTlBRkQ+IDxVOUFGRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mrvTAKKzxVNjJGRD4gPFU2MkZEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ou9OTkzCis8VThFRTI+IDxVOEVFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i7ojAKKzxVNEUxMz4gPFU0RTEzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LiTMTQ4ODgKKzxVNTg3Qz4gPFU1ODdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aG8MAorPFU1QUU1PiA8VTVBRTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlq6UwCis8VTVDMDI+IDxVNUMwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WwgjAKKzxVNUMwOD4gPFU1QzA4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bCIMTQ4Cis8VTc0N0M+IDxVNzQ3Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eRvDAKKzxVNzUwRT4gPFU3NTBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55SOMAorPFU3ODE2PiA8VTc4MTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnoJYyMDYyCis8VTc4REE+IDxVNzhEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ejmjYKKzxVN0JGRj4gPFU3QkZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56+/MAorPFU4MTlFPiA8VTgxOUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohp4wCis8VTg3RTQ+IDxVODdFND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ifpDAKKzxVOTExRj4gPFU5MTFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YSfMAorPFU5ODUzPiA8VTk4NTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoZMwCis8VTk4OUI+IDxVOTg5Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mimzMyCis8VTlDNDQ+IDxVOUM0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxhDAKKzxVOUREMj4gPFU5REQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6beSMAorPFU0ODcxPiA8VTQ4NzE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkobEwCis8VTU2QzA+IDxVNTZDMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WbgDAKKzxVN0FGMT4gPFU3QUYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56uxMAorPFU4RjQ5PiA8VThGNDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovYkzMDAKKzxVOEY2Qz4gPFU4RjZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L2sMjUyOTcKKzxVNDI3NT4gPFU0Mjc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Im1MAorPFU1MENFPiA8VTUwQ0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlg44wCis8VTU1NkQ+IDxVNTU2RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WVrTM4Cis8VTU4MUY+IDxVNTgxRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WgnzAKKzxVNjRCMD4gPFU2NEIwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pKwMTA2NgorPFU3MDc3PiA8VTcwNzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngbcwCis8VTc0NTE+IDxVNzQ1MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eRkTAKKzxVN0JDNj4gPFU3QkM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56+GOTQKKzxVN0M1MT4gPFU3QzUxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57GRMAorPFU3RTMzPiA8VTdFMzM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuLMwCis8VTg0ODM+IDxVODQ4Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iSgzAKKzxVODk0OD4gPFU4OTQ4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KWIMAorPFU4QjU0PiA8VThCNTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorZQwCis8VThDRkE+IDxVOENGQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+izujE3Cis8VThENUE+IDxVOEQ1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i1mjE3ODAKKzxVOTk0Qz4gPFU5OTRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aWMMAorPFU1OTg2PiA8VTU5ODY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpoYxODAxCis8VTU5OUQ+IDxVNTk5RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WmnTE5Cis8VTVBMjQ+IDxVNUEyND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WopDAKKzxVNUU4ND4gPFU1RTg0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bqENzI4NAorPFU2ODY5PiA8VTY4Njk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoakxMjgxCis8VTY4ODk+IDxVNjg4OT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aiiTAKKzxVNkEwMT4gPFU2QTAxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qiBMgorPFU3Q0E3PiA8VTdDQTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsqcwCis8VTdDREE+IDxVN0NEQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ezmjAKKzxVODM1OD4gPFU4MzU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6I2YMAorPFU4MzhBPiA8VTgzOEE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojoo1OQorPFU4OEM1PiA8VTg4QzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo4UyNTE1NAorPFU4OEREPiA8VTg4REQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoo50xNDMKKzxVNThFRT4gPFU1OEVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5aOuNDM0NAorPFU1OEVGPiA8VTU4RUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlo68zMAorPFU1OEY1PiA8VTU4RjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlo7UwCis8VTY0OUU+IDxVNjQ5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aSnjU5ODYKKzxVNzEwQj4gPFU3MTBCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54SLMAorPFU3MkI2PiA8VTcyQjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnirYxMTMwNgorPFU3MkMwPiA8VTcyQzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPni4AxMjUKKzxVNUEzQT4gPFU1QTNBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ai6MAorPFU4RkZEPiA8VThGRkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPov70xMTE4NQorPFU5MzEwPiA8VTkzMTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjJAyCis8VTk1MjU+IDxVOTUyNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mUpTMyNgorPFU5QTA1PiA8VTlBMDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqIUwCis8VTlBOTM+IDxVOUE5Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mqkzI0Cis8VTlEMkQ+IDxVOUQyRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m0rTAKKzxVOUQ3Qj4gPFU5RDdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bW7MAorPFU2QzlEPiA8VTZDOUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmsp0wCis8VTQxMEM+IDxVNDEwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SEjDAKKzxVNTc2MD4gPFU1NzYwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Z2gMzcwMQorPFU1ODlDPiA8VTU4OUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlopwyMAorPFU2MEY0PiA8VTYwRjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmg7QyMjQKKzxVNzg3RT4gPFU3ODdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56G+MQorPFU3OTA4PiA8VTc5MDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpIgwCis8VTdBQTE+IDxVN0FBMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eqoTAKKzxVN0IwRD4gPFU3QjBEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56yNMAorPFU3REI0PiA8VTdEQjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntrQyCis8VTdFMEI+IDxVN0UwQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e4izAKKzxVN0YwMD4gPFU3RjAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57yANjY3Cis8VTdGMTI+IDxVN0YxMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e8kjUKKzxVODE4Nz4gPFU4MTg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IaHMAorPFU4Qjc1PiA8VThCNzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorbUwCis8VThEMDU+IDxVOEQwNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i0hTIKKzxVOEQ1OD4gPFU4RDU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LWYMzA5Cis8VTkzM0E+IDxVOTMzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mMujAKKzxVOTQ0Nj4gPFU5NDQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ZGGMAorPFU5OTFGPiA8VTk5MUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPppJ8wCis8VTVCOTI+IDxVNUI5Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WukjAKKzxVN0E4MD4gPFU3QTgwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56qAMgorPFU4MEFCPiA8VTgwQUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogqsyMAorPFU4ODYwPiA8VTg4NjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPooaAwCis8VThBMzA+IDxVOEEzMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iosDAKKzxVOEFDND4gPFU4QUM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KuEMgorPFU4QzA2PiA8VThDMDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosIYxNzIKKzxVOEZDRD4gPFU4RkNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L+NMAorPFU1MUM2PiA8VTUxQzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlh4YyMzAzNworPFU1MUQ2PiA8VTUxRDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlh5YwCis8VTZFOTY+IDxVNkU5Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a6ljE1MAorPFU3REE3PiA8VTdEQTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPntqcwCis8VTlEQkQ+IDxVOURCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m2vTAKKzxVN0ExNT4gPFU3QTE1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56iVMAorPFU1MDJDPiA8VTUwMkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgKw0NQorPFU2MkQ5PiA8VTYyRDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmi5k5NDIKKzxVNjM0OT4gPFU2MzQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o2JMzA1MworPFU2ODRDPiA8VTY4NEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoYwxMDU3NgorPFU2REJGPiA8VTZEQkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtr8xOQorPFU3QTVCPiA8VTdBNUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqZswCis8VTk0MkY+IDxVOTQyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mQrzAKKzxVMzhGRj4gPFUzOEZGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46O/MAorPFUzQUFDPiA8VTNBQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjqqwwCis8VTNCNkM+IDxVM0I2Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OtrDAKKzxVM0U5Rj4gPFUzRTlGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47qfMAorPFU0MTc1PiA8VTQxNzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhbUwCis8VTQ1NzQ+IDxVNDU3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SVtDAKKzxVNEQ4Mj4gPFU0RDgyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LaCMAorPFU0RTM1PiA8VTRFMzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkuLUwCis8VTUyNjI+IDxVNTI2Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WJojAKKzxVNTM1Mz4gPFU1MzUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Y2TMTY2OQorPFU1NTQ0PiA8VTU1NDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllYQyMjAKKzxVNTU0NT4gPFU1NTQ1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZWFMAorPFU1OUIwPiA8VTU5QjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlprAwCis8VTVGNzQ+IDxVNUY3ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W9tDAKKzxVNjRBRj4gPFU2NEFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pKvMAorPFU2NEM2PiA8VTY0QzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmk4YwCis8VTY0RTI+IDxVNjRFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aTojQyCis8VTY1ODA+IDxVNjU4MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWgDAKKzxVNjVBQj4gPFU2NUFCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5parMzAKKzxVNjVBRT4gPFU2NUFFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pauMAorPFU2NUIxPiA8VTY1QjE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmlrEwCis8VTY1QjI+IDxVNjVCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aWsjEKKzxVNjVCNT4gPFU2NUI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pa1MAorPFU2NjZCPiA8VTY2NkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmmasxCis8VTY4QjI+IDxVNjhCMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aisjAKKzxVNjhGMz4gPFU2OEYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qOzMAorPFU2OTEzPiA8VTY5MTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpJMwCis8VTY5RDU+IDxVNjlENT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+anlTAKKzxVNkM0Qj4gPFU2QzRCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5rGLMQorPFU2Q0NFPiA8VTZDQ0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPms44wCis8VTZENEE+IDxVNkQ0QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a1ijYyNAorPFU2RDVFPiA8VTZENUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtZ4xCis8VTZGQzE+IDxVNkZDMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a/gTIKKzxVNkZFRj4gPFU2RkVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5r+vNDkKKzxVNzA0Mj4gPFU3MDQyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54GCMAorPFU3MDdDPiA8VTcwN0M+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPngbw5OTgKKzxVNzBBQT4gPFU3MEFBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54KqMAorPFU3MEY1PiA8VTcwRjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPng7UwCis8VTcxMkY+IDxVNzEyRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eErzE2NworPFU3MkIzPiA8VTcyQjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnirMwCis8VTc0MjI+IDxVNzQyMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eQojk5NQorPFU3NDM4PiA8VTc0Mzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnkLgwCis8VTc4N0E+IDxVNzg3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ehujAKKzxVNzk5QT4gPFU3OTlBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56aaMAorPFU3QkU3PiA8VTdCRTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnr6cwCis8VTdDNzE+IDxVN0M3MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+exsTAKKzxVN0Y2Qz4gPFU3RjZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj572sMAorPFU4MzAxPiA8VTgzMDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPojIE4NAorPFU4NzQzPiA8VTg3NDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonYMwCis8VTg4MTc+IDxVODgxNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iglzAKKzxVOEFEMT4gPFU4QUQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KuRMAorPFU4QjM2PiA8VThCMzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorLYwCis8VThCRkM+IDxVOEJGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ivvDYKKzxVOTE0Qz4gPFU5MTRDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YWMNDczCis8VTkyREM+IDxVOTJEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mLnDAKKzxVOTMyMz4gPFU5MzIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YyjMAorPFU5NDMyPiA8VTk0MzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkLIwCis8VTk1NkY+IDxVOTU2Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mVrzIwOQorPFU5RERGPiA8VTlEREY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpt58wCis8VTU0QTg+IDxVNTRBOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WSqDM5NworPFU1NURFPiA8VTU1REU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPll54xNworPFU1OUQ1PiA8VTU5RDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlp5UwCis8VTU5RkY+IDxVNTlGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WnvzQyODcKKzxVNUI1Nj4gPFU1QjU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a2WMQorPFU1QjVDPiA8VTVCNUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlrZwzNDgKKzxVNUI3Mz4gPFU1QjczPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a2zMjgKKzxVNUI3Nj4gPFU1Qjc2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a22MAorPFU1RDMwPiA8VTVEMzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltLAwCis8VTVENkI+IDxVNUQ2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W1qzMKKzxVNjgyNT4gPFU2ODI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qClMAorPFU2OTE0PiA8VTY5MTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmpJQwCis8VTZEQzQ+IDxVNkRDND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a3hDEzCis8VTZFN0Q+IDxVNkU3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a5vTAKKzxVNkVDQj4gPFU2RUNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ruLMjM5MworPFU2RkFDPiA8VTZGQUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvqwwCis8VTczODY+IDxVNzM4Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eOhjAKKzxVNzk4Qz4gPFU3OThDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56aMMAorPFU3OUY2PiA8VTc5RjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnp7YwCis8VTdBMzU+IDxVN0EzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eotTAKKzxVN0QwRT4gPFU3RDBFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57SOMAorPFU3REM3PiA8VTdEQzc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnt4cxCis8VTdGMDE+IDxVN0YwMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e8gTExCis8VTgzMEE+IDxVODMwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iMijAKKzxVODMzMj4gPFU4MzMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IyyOQorPFU4NDU4PiA8VTg0NTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokZgwCis8VTg4MDA+IDxVODgwMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iggDAKKzxVODlEQz4gPFU4OURDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KecMTIKKzxVOEEzRT4gPFU4QTNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Ki+MTEKKzxVOEFFRT4gPFU4QUVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KuuMgorPFU4QzE4PiA8VThDMTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosJg0NgorPFU4Q0IyPiA8VThDQjI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPosrIwCis8VThDQzc+IDxVOENDNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+izhzE2MworPFU4RDQwPiA8VThENDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotYA0Cis8VThENDQ+IDxVOEQ0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i1hDIwNTgzCis8VThEOTE+IDxVOEQ5MT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i2kTYKKzxVOERBNj4gPFU4REE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LamMAorPFU4RjFDPiA8VThGMUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovJwwCis8VThGM0E+IDxVOEYzQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i8ujAKKzxVOEY4RT4gPFU4RjhFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6L6ONDIKKzxVOTExMT4gPFU5MTExPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YSRMAorPFU5MjJEPiA8VTkyMkQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpiK0wCis8VTkzMTk+IDxVOTMxOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mMmTAKKzxVOTM3Rj4gPFU5MzdGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Y2/MAorPFU5M0ExPiA8VTkzQTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjqEwCis8VTk1MzE+IDxVOTUzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mUsTE3Cis8VTk1NDM+IDxVOTU0Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mVgzAKKzxVOTgzRT4gPFU5ODNFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aC+MAorPFU5ODNGPiA8VTk4M0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpoL8wCis8VTlBRUQ+IDxVOUFFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mrrTE1MworPFU5QkQ0PiA8VTlCRDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpr5QwCis8VTlDMjY+IDxVOUMyNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mwpjAKKzxVOUNCQj4gPFU5Q0JCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bK7MAorPFU5RDFDPiA8VTlEMUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPptJwxCis8VTlEODU+IDxVOUQ4NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m2hTAKKzxVOURCRj4gPFU5REJGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6ba/MAorPFU5RjEyPiA8VTlGMTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpvJIwCis8VTlGNUM+IDxVOUY1Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m9nDAKKzxVOUY4Nz4gPFU5Rjg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6b6HMTIxCis8VTM3M0Q+IDxVMzczRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OcvTAKKzxVMzlENz4gPFUzOUQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj46eXMAorPFUzRUFEPiA8VTNFQUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuq0wCis8VTQ1MDI+IDxVNDUwMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SUgjAKKzxVNDYyMz4gPFU0NjIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JijMAorPFU1NDA3PiA8VTU0MDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlkIcwCis8VTU0NzA+IDxVNTQ3MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WRsDAKKzxVNTU1OT4gPFU1NTU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZWZMAorPFU1OUM5PiA8VTU5Qzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlp4kxCis8VTU5Q0E+IDxVNTlDQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WnijExOTAKKzxVNUI1MD4gPFU1QjUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5a2QMTMwNTA0Cis8VTY3NEQ+IDxVNjc0RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+adjTAKKzxVNjg5Mz4gPFU2ODkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qKTMTA1Cis8VTY5OUY+IDxVNjk5Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+amnzAKKzxVNkVEMz4gPFU2RUQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ruTMTAyCis8VTc3Rjc+IDxVNzdGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eftzAKKzxVNzlDND4gPFU3OUM0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56eEMAorPFU3OUVEPiA8VTc5RUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnp60xMgorPFU3QzdEPiA8VTdDN0Q+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnsb00MzEKKzxVN0QyQj4gPFU3RDJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57SrNDUxMQorPFU4MDE0PiA8VTgwMTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPogJQxCis8VTgwQ0Y+IDxVODBDRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iDjzAKKzxVODI5Mz4gPFU4MjkzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IqTMAorPFU4Njc4PiA8VTg2Nzg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPombgwCis8VThBM0Y+IDxVOEEzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iovzAKKzxVOTFFOD4gPFU5MUU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YeoMAorPFUzQzIzPiA8VTNDMjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsKMwCis8VTNDMzc+IDxVM0MzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OwtzAKKzxVM0M3ND4gPFUzQzc0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47G0MAorPFU0MTQ2PiA8VTQxNDY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkhYYwCis8VTQ0MDk+IDxVNDQwOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SQiTAKKzxVNTAzMz4gPFU1MDMzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YCzMAorPFU1MjVBPiA8VTUyNUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPliZowCis8VTVCNTc+IDxVNUI1Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WtlzQ0ODg0Cis8VTYwNjM+IDxVNjA2Mz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aBozIwMAorPFU2MjdCPiA8VTYyN0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmibswCis8VTZFMEQ+IDxVNkUwRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+a4jTI3OQorPFU2RjJDPiA8VTZGMkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmvKw1Cis8VTcyNzg+IDxVNzI3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eJuDIKKzxVNzcyNT4gPFU3NzI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55ylMAorPFU3NzI2PiA8VTc3MjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnnKYyOQorPFU4MEQ0PiA8VTgwRDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPog5QwCis8VTgwRkU+IDxVODBGRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iDvjAKKzxVODFFQT4gPFU4MUVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6IeqMTc1MzIyCis8VTgzMjE+IDxVODMyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iMoTAKKzxVNTAyNz4gPFU1MDI3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YCnMAorPFU1ODJCPiA8VTU4MkI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloKswCis8VTVCOTc+IDxVNUI5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WulzY3NjYKKzxVNUQ0Rj4gPFU1RDRGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bWPMAorPFU1RDU1PiA8VTVENTU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltZUwCis8VTVENzg+IDxVNUQ3OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W1uDAKKzxVNjBGRT4gPFU2MEZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oO+MAorPFU2OEQ1PiA8VTY4RDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmo5U2MzIKKzxVNjkzNj4gPFU2OTM2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qS2MAorPFU3MUE3PiA8VTcxQTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnhqcwCis8VTczMjM+IDxVNzMyMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eMozAKKzxVNzhFQj4gPFU3OEVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj56OrMAorPFU3QTJGPiA8VTdBMkY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnqK8wCis8VTdEQzM+IDxVN0RDMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e3gzAKKzxVN0RGNT4gPFU3REY1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57e1MAorPFU3RTAyPiA8VTdFMDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuIIwCis8VTdFMzE+IDxVN0UzMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e4sTMxCis8VTdFRkM+IDxVN0VGQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e7vDIwOTAKKzxVN0ZFQT4gPFU3RkVBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57+qMAorPFU4MTU5PiA8VTgxNTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPohZkwCis8VTgyNTA+IDxVODI1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iJkDAKKzxVODQ3Qz4gPFU4NDdDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6JG8MAorPFU4NzZDPiA8VTg3NkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPonawwCis8VThDNzU+IDxVOEM3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ixtTAKKzxVOEUyOD4gPFU4RTI4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LioMAorPFU4RTJBPiA8VThFMkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouKozMDA0Cis8VThFNjQ+IDxVOEU2ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i5pDQzCis8VTlBMEM+IDxVOUEwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mojDAKKzxVOUEyMz4gPFU5QTIzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6aijMAorPFU5QTk0PiA8VTlBOTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqpQwCis8VTlCMDM+IDxVOUIwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+msgzExOQorPFU5QjA5PiA8VTlCMDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPprIkwCis8VTlCMzc+IDxVOUIzNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mstzAKKzxVOUJFRT4gPFU5QkVFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6a+uMAorPFU5QkZDPiA8VTlCRkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpr7wwCis8VTM4OTQ+IDxVMzg5ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OilDAKKzxVM0REMz4gPFUzREQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj47eTMAorPFUzRTQ1PiA8VTNFNDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuYUwCis8VTRDMEM+IDxVNEMwQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SwjDAKKzxVNTA2Qz4gPFU1MDZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YGsMTQKKzxVNTBBRj4gPFU1MEFGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5YKvMAorPFU2MDNCPiA8VTYwM0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgLs1NDU0MAorPFU2MEUzPiA8VTYwRTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmg6MwCis8VTYxMjE+IDxVNjEyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aEoTAKKzxVNjE4MT4gPFU2MTgxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5oaBMAorPFU2Mzc0PiA8VTYzNzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmjbQwCis8VTYzRDQ+IDxVNjNEND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aPlDAKKzxVNjQwMz4gPFU2NDAzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pCDMAorPFU2NDYwPiA8VTY0NjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmkaAwCis8VTY3MjE+IDxVNjcyMT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+acoTAKKzxVN0UzRD4gPFU3RTNEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57i9NDg5Cis8VTg0RDc+IDxVODRENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iTlzAKKzxVNDM1Rj4gPFU0MzVGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5I2fMAorPFU0NzRCPiA8VTQ3NEI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknYswCis8VTUwMEE+IDxVNTAwQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WAijAKKzxVNjYyRT4gPFU2NjJFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5piuMAorPFU3MzE0PiA8VTczMTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnjJQwCis8VTc1QUQ+IDxVNzVBRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eWrTAKKzxVNzYzMj4gPFU3NjMyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj55iyMAorPFU3ODgyPiA8VTc4ODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnooIwCis8VTdDQkQ+IDxVN0NCRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eyvTEzNQorPFU3Q0M5PiA8VTdDQzk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPns4kwCis8VTdDRUQ+IDxVN0NFRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ezrTAKKzxVN0UyNj4gPFU3RTI2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57imMAorPFU3RUI1PiA8VTdFQjU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnurU0NTQzCis8VTVBQjA+IDxVNUFCMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WqsDAKKzxVNjNBQj4gPFU2M0FCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o6rMAorPFU2OEY3PiA8VTY4Rjc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmo7cwCis8VTY4Rjg+IDxVNjhGOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ajuDEKKzxVN0I4Mz4gPFU3QjgzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj566DMAorPFU3REM1PiA8VTdEQzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnt4UwCis8VTgzQzY+IDxVODNDNj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iPhjAKKzxVOEFDRj4gPFU4QUNGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6KuPMAorPFU4QkY5PiA8VThCRjk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor7kyCis8VTkwQjk+IDxVOTBCOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mCuTM3NworPFU5MEYwPiA8VTkwRjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpg7AwCis8VTkxMTI+IDxVOTExMj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mEkjAKKzxVOTEzOT4gPFU5MTM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YS5MgorPFU5NjZDPiA8VTk2NkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpmawxMworPFU5QTM2PiA8VTlBMzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpqLYwCis8VTlCRUI+IDxVOUJFQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mvqzAKKzxVOUNCMD4gPFU5Q0IwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bKwMAorPFU5RUMwPiA8VTlFQzA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpu4AwCis8VTlGN0E+IDxVOUY3QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+m9ujAKKzxVOEQ3MD4gPFU4RDcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LWwODEwMTcKKzxVOEQ3MT4gPFU4RDcxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LWxMAorPFUzNTNGPiA8VTM1M0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjlL8wCis8VTNENzU+IDxVM0Q3NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+O1tTAKKzxVNDgyQj4gPFU0ODJCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5KCrMAorPFU1OTRGPiA8VTU5NEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlpY80MTUzCis8VTYzQ0Q+IDxVNjNDRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aPjTYxMworPFU3OURGPiA8VTc5REY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnp58yOTk0Cis8VTg0QTk+IDxVODRBOT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iSqTAKKzxVMzdCQT4gPFUzN0JBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj4566MAorPFUzQzM1PiA8VTNDMzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjsLUwCis8VTNDOUU+IDxVM0M5RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OynjAKKzxVNDE3OD4gPFU0MTc4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IW4MAorPFU0NjlEPiA8VTQ2OUQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkmp0wCis8VTRCRkY+IDxVNEJGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SvvzAKKzxVNEM2Mz4gPFU0QzYzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5LGjMAorPFU1MEI2PiA8VTUwQjY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlgrYwCis8VTUzNDY+IDxVNTM0Nj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WNhjAKKzxVNTRFQj4gPFU1NEVCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5ZOrMAorPFU1RDEyPiA8VTVEMTI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltJIwCis8VTVEMkE+IDxVNUQyQT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W0qjAKKzxVNjM3RD4gPFU2MzdEPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5o29MQorPFU2NUNGPiA8VTY1Q0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPml48xMjMxMgorPFU4REIzPiA8VThEQjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPotrMxODU5NQorPFU4RTI0PiA8VThFMjQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPouKQwCis8VThFM0Y+IDxVOEUzRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i4vzAKKzxVOEU3NT4gPFU4RTc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Lm1MQorPFU5MzkwPiA8VTkzOTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpjpAwCis8VTk1NUU+IDxVOTU1RT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mVnjEwCis8VTQ1MDM+IDxVNDUwMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SUgzAKKzxVNDU5NT4gPFU0NTk1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5JaVMAorPFU0RkNFPiA8VTRGQ0U+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkv441MQorPFU1NTI4PiA8VTU1Mjg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPllKgwCis8VTcyM0M+IDxVNzIzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eIvDAKKzxVNzNDNz4gPFU3M0M3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj54+HMAorPFU3OTU2PiA8VTc5NTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpZY4MjM0Cis8VTdENDQ+IDxVN0Q0ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e1hDE4NworPFU3RUM0PiA8VTdFQzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnu4QyMjg3MAorPFU4QTVCPiA8VThBNUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPoqZsxNQorPFU4QkM1PiA8VThCQzU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPor4U1NDAKKzxVOTYzQj4gPFU5NjNCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Zi7NDE1NQorPFU5NzdCPiA8VTk3N0I+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpnbswCis8VThFOUM+IDxVOEU5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+i6nDYKKzxVOEVBNj4gPFU4RUE2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6LqmMQorPFU5NDVBPiA8VTk0NUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkZowCis8VTk0N0Q+IDxVOTQ3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mRvTExCis8VTk0QkI+IDxVOTRCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mSuzIyNTIKKzxVNDA4RT4gPFU0MDhFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5IKOMAorPFU0MzIzPiA8VTQzMjM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkjKMwCis8VTdDNkI+IDxVN0M2Qj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+exqzEKKzxVN0U2ND4gPFU3RTY0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57mkMAorPFU3RTgyPiA8VTdFODI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuoIxNjQKKzxVN0U4OT4gPFU3RTg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57qJMAorPFU3RTk4PiA8VTdFOTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnupgwCis8VTdGMzU+IDxVN0YzNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e8tTIyCis8VTQ5Mzg+IDxVNDkzOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SkuDAKKzxVNjUyNT4gPFU2NTI1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pSlNDc0Cis8VTUzOUM+IDxVNTM5Qz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WOnDAKKzxVNUQ4OT4gPFU1RDg5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5baJMAorPFU2QTM2PiA8VTZBMzY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqLYwCis8VTdFOTc+IDxVN0U5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e6lzAKKzxVODdENT4gPFU4N0Q1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6J+VMAorPFU0Qjk0PiA8VTRCOTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkrpQwCis8VTU2MzQ+IDxVNTYzND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WYtDE1OTA4Cis8VTU2N0Y+IDxVNTY3Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WZvzAKKzxVNUQ4QT4gPFU1RDhBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5baKMAorPFU2RDA1PiA8VTZEMDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmtIUwCis8VTc0QkI+IDxVNzRCQj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eSuzAKKzxVMzc2MT4gPFUzNzYxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj452hMAorPFUzODExPiA8VTM4MTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjoJEwCis8VTNDMEU+IDxVM0MwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OwjjAKKzxVNDYzOT4gPFU0NjM5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5Ji5MAorPFU1OEFDPiA8VTU4QUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloqwzCis8VTVEQjU+IDxVNURCNT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+W2tTAKKzxVNjY2Qz4gPFU2NjZDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pmsMQorPFU2NzAwPiA8VTY3MDA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmnIA3NjcxOAorPFU2ODJDPiA8VTY4MkM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmoKwwCis8VTY5REM+IDxVNjlEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+annDAKKzxVNkE4Nz4gPFU2QTg3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qqHMAorPFU2QThDPiA8VTZBOEM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmqowwCis8VTc5N0Q+IDxVNzk3RD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+elvTAKKzxVN0Q0QT4gPFU3RDRBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57WKNworPFU3RjZBPiA8VTdGNkE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnvaoxMTQxNQorPFU4NTVFPiA8VTg1NUU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPolZ4yMQorPFU4RkEwPiA8VThGQTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPovqAwCis8VTkxNTQ+IDxVOTE1ND47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mFlDAKKzxVOTE3Qj4gPFU5MTdCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YW7MAorPFU5MTg5PiA8VTkxODk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPphok1NDU1Cis8VTkyRjc+IDxVOTJGNz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mLtzAKKzxVOTMwQT4gPFU5MzBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YyKMAorPFU1OEFCPiA8VTU4QUI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPloqs0Cis8VTU4RkY+IDxVNThGRj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WjvzAKKzxVNUMwQT4gPFU1QzBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bCKNTg4MworPFU1RDlGPiA8VTVEOUY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPltp8wCis8VTZBM0Q+IDxVNkEzRD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aovTEyNAorPFU3RTVDPiA8VTdFNUM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuZwwCis8VTdGNDc+IDxVN0Y0Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+e9hzAKKzxVOTA3NT4gPFU5MDc1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YG1MjEzMQorPFU5NDBGPiA8VTk0MEY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPpkI8wCis8VTlDNTI+IDxVOUM1Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mxkjAKKzxVOUNERj4gPFU5Q0RGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6bOfMjQKKzxVOURGNz4gPFU5REY3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6be3MAorPFU1MEQ0PiA8VTUwRDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPlg5QwCis8VTU2NDI+IDxVNTY0Mj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WZgjAKKzxVNjQ5OT4gPFU2NDk5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5pKZNQorPFU4QjUwPiA8VThCNTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPorZAwCis8VTYzNTg+IDxVNjM1OD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aNmDAKKzxVOTI4Qz4gPFU5MjhDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6YqMMAorPFUzRTMyPiA8VTNFMzI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjuLIwCis8VTQzQjA+IDxVNDNCMD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SOsDAKKzxVNDc2Qj4gPFU0NzZCPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5J2rMAorPFU0N0IwPiA8VTQ3QjA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPknrAwCis8VTY2Mjg+IDxVNjYyOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+aYqDc4MTkKKzxVNjkwQT4gPFU2OTBBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5qSKMAorPFU3OUU4PiA8VTc5RTg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnp6gwCis8VTdBMTM+IDxVN0ExMz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+eokzAKKzxVN0I3MD4gPFU3QjcwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj562wMAorPFU4NDQzPiA8VTg0NDM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokYMwCis8VTkyM0M+IDxVOTIzQz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+mIvDAKKzxVMzc3RT4gPFUzNzdFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj452+MAorPFU0RjUwPiA8VTRGNTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPkvZAxODI2Cis8VTU0OTc+IDxVNTQ5Nz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WSlzIKKzxVNURFNj4gPFU1REU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bemMTE0ODMKKzxVNkJEMT4gPFU2QkQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5q+RMAorPFU3RTUzPiA8VTdFNTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnuZMwCis8VTM0NDU+IDxVMzQ0NT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+ORhTAKKzxVMzYwMD4gPFUzNjAwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj45iAMAorPFUzNjM0PiA8VTM2MzQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPjmLQwCis8VTM2RDc+IDxVMzZENz47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+OblzAKKzxVM0I2RT4gPFUzQjZFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj462uMAorPFU0MkNGPiA8VTQyQ0Y+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPki48wCis8VTQ1MTg+IDxVNDUxOD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+SUmDAKKzxVNEY1Qz4gPFU0RjVDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5L2cMTI3MTY2Cis8VTUwNUE+IDxVNTA1QT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WBmjU5OTA0Cis8VTU3NTA+IDxVNTc1MD47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WdkDM0MzU2Cis8VTU5MEU+IDxVNTkwRT47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+WkjjAKKzxVNUM5RT4gPFU1QzlFPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj5bKeMAorPFU1RUE3PiA8VTVFQTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPluqcxMjcxMgorPFU2MDBEPiA8VTYwMEQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPmgI0xOAorPFU3OTVBPiA8VTc5NUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPnpZoyNjYKKzxVN0NGMz4gPFU3Q0YzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj57OzMAorPFU4MEQ5PiA8VTgwRDk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPog5kyNAorPFU4NDQ0PiA8VTg0NDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCSPokYQwCis8VTg4OEY+IDxVODg4Rj47SUdOT1JFO0lHTk9SRTtJR05PUkUJI+iijzAKKzxVOTYzQz4gPFU5NjNDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQkj6Zi8MAorIworb3JkZXJfZW5kCisjCitFTkQgTENfQ09MTEFURQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvaXRfQ0ggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9pdF9DSApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmRjNTBhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvaXRfQ0gKQEAgLTAsMCArMSwxMzcgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBJdGFsaWFuIExhbmd1YWdlIExvY2FsZSBmb3IgU3dpdHplcmxhbmQKKyUgTGFuZ3VhZ2U6IGl0CislIFRlcnJpdG9yeTogQ0gKKyUgUmV2aXNpb246IC4uLi4uLi4uCislIERhdGU6IDE5OTktMDEtMjEKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMuZHMKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiSXRhbGlhbiBsb2NhbGUgZm9yIFN3aXR6ZXJsYW5kIgorc291cmNlICAgICAiIgorYWRkcmVzcyAgICAiIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkl0YWxpYW4iCit0ZXJyaXRvcnkgICJTd2l0emVybGFuZCIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjkiCislCitjYXRlZ29yeSAgIml0X0NIOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgIml0X0NIOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgIml0X0NIOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiaXRfQ0g6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJpdF9DSDoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgIml0X0NIOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgIml0X0NIOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgIml0X0NIOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgIml0X0NIOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiaXRfQ0g6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJpdF9DSDoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJpdF9JVCIKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCitjb3B5ICJpc28xNDY1MV90MSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA3Mz48VTAwNTM+PFUwMDZBPjxVMDA0QT48VTAwNkY+PFUwMDRGPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQorY29weSAgImRlX0NIIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgICAgIjxVMDAyQz4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICAgICI8VTAwMjc+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAgICAzOzMKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPiI7IjxVMDA2Qz48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsiPFUwMDZEPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNjc+PFUwMDY5PjxVMDA2Rj4iOyI8VTAwNzY+PFUwMDY1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjE+PFUwMDYyPiIKK2RheSAgICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPjxVMDA2NT48VTAwNkU+PFUwMDY5PjxVMDA2Mz48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNkM+PFUwMDc1PjxVMDA2RT48VTAwNjU+PFUwMDY0PjxVMDBFQz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3ND48VTAwNjU+PFUwMDY0PjxVMDBFQz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjU+PFUwMDcyPjxVMDA2Mz48VTAwNkY+PFUwMDZDPjxVMDA2NT48VTAwNjQ+PFUwMEVDPiI7LworICAgICAgICAiPFUwMDY3PjxVMDA2OT48VTAwNkY+PFUwMDc2PjxVMDA2NT48VTAwNjQ+PFUwMEVDPiI7LworICAgICAgICAiPFUwMDc2PjxVMDA2NT48VTAwNkU+PFUwMDY1PjxVMDA3Mj48VTAwNjQ+PFUwMEVDPiI7LworICAgICAgICAiPFUwMDczPjxVMDA2MT48VTAwNjI+PFUwMDYxPjxVMDA3ND48VTAwNkY+IgorYWJtb24gICAiPFUwMDY3PjxVMDA2NT48VTAwNkU+IjsiPFUwMDY2PjxVMDA2NT48VTAwNjI+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNjE+PFUwMDcwPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDY3PiI7IjxVMDA2Nz48VTAwNjk+PFUwMDc1PiI7LworICAgICAgICAiPFUwMDZDPjxVMDA3NT48VTAwNjc+IjsiPFUwMDYxPjxVMDA2Nz48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3ND4iOyI8VTAwNkY+PFUwMDc0PjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PiI7IjxVMDA2ND48VTAwNjk+PFUwMDYzPiIKK21vbiAgICAgIjxVMDA2Nz48VTAwNjU+PFUwMDZFPjxVMDA2RT48VTAwNjE+PFUwMDY5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Nj48VTAwNjU+PFUwMDYyPjxVMDA2Mj48VTAwNzI+PFUwMDYxPjxVMDA2OT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwN0E+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA3MD48VTAwNzI+PFUwMDY5PjxVMDA2Qz48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA2Nz48VTAwNjc+PFUwMDY5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Nz48VTAwNjk+PFUwMDc1PjxVMDA2Nz48VTAwNkU+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDZDPjxVMDA3NT48VTAwNjc+PFUwMDZDPjxVMDA2OT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDY3PjxVMDA2Rj48VTAwNzM+PFUwMDc0PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDc0PjxVMDA3ND48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDZGPjxVMDA3ND48VTAwNzQ+PFUwMDZGPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwNjk+PFUwMDYzPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjA+PFUwMDI1PjxVMDA2RD48VTAwMkU+PFUwMDIwPjxVMDAyNT48VTAwNzk+IgordF9mbXQgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICIiOyIiCit0X2ZtdF9hbXBtICIiCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorJSBGSVhNRQoraGVpZ2h0ICAgMjk3CislIEZJWE1FCit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDM0PjxVMDAzMT4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCislIEZJWE1FCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICI8VTAwNDM+PFUwMDQ4PiIKK2NvdW50cnlfYWIzICI8VTAwNDM+PFUwMDQ4PjxVMDA0NT4iCitjb3VudHJ5X251bSA3NTYKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9pdF9JVCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2l0X0lUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNWY0MGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9pdF9JVApAQCAtMCwwICsxLDE2MSBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIEl0YWxpYW4gTGFuZ3VhZ2UgTG9jYWxlIGZvciBJdGFseQorJSBTb3VyY2U6IFJBUAorJSBBZGRyZXNzOiBTYW5rdCBKby8vcmdlbnMgQWxsZSA4CislICAgIERLLTE2MTUgS28vL2Jlbmhhdm4gViwgRGFubWFyaworJSBDb250YWN0OiBLZWxkIFNpbW9uc2VuCislIEVtYWlsOiBLZWxkLlNpbW9uc2VuQGRrdXVnLmRrCislIFRlbDogKzQ1IC0gMzEyMjY1NDMKKyUgRmF4OiArNDUgLSAzMzI1NjU0MworJSBMYW5ndWFnZTogaXQKKyUgVGVycml0b3J5OiBJVAorJSBSZXZpc2lvbjogNC4zCislIERhdGU6IDE5OTYtMTAtMTUKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiSXRhbGlhbiBsb2NhbGUgZm9yIEl0YWx5Igorc291cmNlICAgICAiUkFQIgorYWRkcmVzcyAgICAiU2Fua3QgSjxVMDBGOD5yZ2VucyBBbGxlIDgsIERLLTE2MTUgSzxVMDBGOD5iZW5oYXZuIFYsIERhbm1hcmsiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiSXRhbGlhbiIKK3RlcnJpdG9yeSAgIkl0YWx5IgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAiaXRfSVQ6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiaXRfSVQ6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiaXRfSVQ6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJpdF9JVDoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgIml0X0lUOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiaXRfSVQ6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiaXRfSVQ6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiaXRfSVQ6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiaXRfSVQ6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJpdF9JVDoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgIml0X0lUOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAiaTE4biIKKwordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA3Mz48VTAwNTM+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAgICI8VTAwNDU+PFUwMDU1PjxVMDA1Mj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICAgICAiPFUyMEFDPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAgICAgIjxVMDAyQz4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgICAgICI8VTAwMkU+IgorbW9uX2dyb3VwaW5nICAgICAgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAgICAgMQorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgICAgIjxVMDAyQz4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICAgICIiCitncm91cGluZyAgICAgICAgICAgICAgICAgIDA7MAorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorYWJkYXkgICAiPFUwMDY0PjxVMDA2Rj48VTAwNkQ+IjsiPFUwMDZDPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNkQ+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2Nz48VTAwNjk+PFUwMDZGPiI7IjxVMDA3Nj48VTAwNjU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDczPjxVMDA2MT48VTAwNjI+IgorZGF5ICAgICAiPFUwMDY0PjxVMDA2Rj48VTAwNkQ+PFUwMDY1PjxVMDA2RT48VTAwNjk+PFUwMDYzPjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwNzU+PFUwMDZFPjxVMDA2NT48VTAwNjQ+PFUwMEVDPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMDc0PjxVMDA2NT48VTAwNjQ+PFUwMEVDPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2NT48VTAwNzI+PFUwMDYzPjxVMDA2Rj48VTAwNkM+PFUwMDY1PjxVMDA2ND48VTAwRUM+IjsvCisgICAgICAgICI8VTAwNjc+PFUwMDY5PjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2ND48VTAwRUM+IjsvCisgICAgICAgICI8VTAwNzY+PFUwMDY1PjxVMDA2RT48VTAwNjU+PFUwMDcyPjxVMDA2ND48VTAwRUM+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDYxPjxVMDA2Mj48VTAwNjE+PFUwMDc0PjxVMDA2Rj4iCithYm1vbiAgICI8VTAwNjc+PFUwMDY1PjxVMDA2RT4iOyI8VTAwNjY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2MT48VTAwNzA+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNjc+IjsiPFUwMDY3PjxVMDA2OT48VTAwNzU+IjsvCisgICAgICAgICI8VTAwNkM+PFUwMDc1PjxVMDA2Nz4iOyI8VTAwNjE+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDc0PiI7IjxVMDA2Rj48VTAwNzQ+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDY0PjxVMDA2OT48VTAwNjM+IgorbW9uICAgICAiPFUwMDY3PjxVMDA2NT48VTAwNkU+PFUwMDZFPjxVMDA2MT48VTAwNjk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDY2PjxVMDA2NT48VTAwNjI+PFUwMDYyPjxVMDA3Mj48VTAwNjE+PFUwMDY5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3QT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDcwPjxVMDA3Mj48VTAwNjk+PFUwMDZDPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDY3PjxVMDA2Nz48VTAwNjk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDY3PjxVMDA2OT48VTAwNzU+PFUwMDY3PjxVMDA2RT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNkM+PFUwMDc1PjxVMDA2Nz48VTAwNkM+PFUwMDY5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNjc+PFUwMDZGPjxVMDA3Mz48VTAwNzQ+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNzQ+PFUwMDc0PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkY+PFUwMDc0PjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA3Nj48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDY0PjxVMDA2OT48VTAwNjM+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iCitkX3RfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNTk+IgordF9mbXQgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICIiOyIiCit0X2ZtdF9hbXBtICIiCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorJSBGSVhNRQoraGVpZ2h0ICAgMjk3CislIEZJWE1FCit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDMzPjxVMDAzOT4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCislIEZJWE1FCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICI8VTAwNDk+PFUwMDU0PiIKK2NvdW50cnlfYWIzICI8VTAwNDk+PFUwMDU0PjxVMDA0MT4iCitjb3VudHJ5X251bSAzODAKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9pdF9JVEBldXJvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvaXRfSVRAZXVybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTk1ZWIzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvaXRfSVRAZXVybwpAQCAtMCwwICsxLDgzIEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgSXRhbGlhbiBMYW5ndWFnZSBMb2NhbGUgZm9yIEl0YWx5IHdpdGggRXVybworJSBMYW5ndWFnZTogaXQKKyUgVGVycml0b3J5OiBJVAorJSBPcHRpb246IGV1cm8KKyUgRGF0ZTogMjAwMC0wOC0yMAorJSBVc2VyczogZ2VuZXJhbAorJSBDaGFyc2V0OiBJU08tODg1OS0xNQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiSXRhbGlhbiBsb2NhbGUgZm9yIEl0YWx5IHdpdGggRXVybyIKK3NvdXJjZSAgICAgIkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiIKK2FkZHJlc3MgICAgIjU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiSXRhbGlhbiIKK3RlcnJpdG9yeSAgIkl0YWx5IgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wOC0yMCIKKyUKK2NhdGVnb3J5ICAiaXRfSVRAZXVybzoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJpdF9JVEBldXJvOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgIml0X0lUQGV1cm86MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJpdF9JVEBldXJvOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAiaXRfSVRAZXVybzoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgIml0X0lUQGV1cm86MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiaXRfSVRAZXVybzoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJpdF9JVEBldXJvOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgIml0X0lUQGV1cm86MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJpdF9JVEBldXJvOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiaXRfSVRAZXVybzoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgIml0X0lUIgorRU5EIExDX0NUWVBFCisKK0xDX01FU1NBR0VTCitjb3B5ICJpdF9JVCIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQorY29weSAiaXRfSVQiCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworY29weSAiaXRfSVQiCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCitjb3B5ICJpdF9JVCIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCitjb3B5ICJpdF9JVCIKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK2NvcHkgIml0X0lUIgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorY29weSAiaXRfSVQiCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorY29weSAiaXRfSVQiCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitjb3B5ICJpdF9JVCIKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9pdV9DQSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2l1X0NBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMDgzNjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9pdV9DQQpAQCAtMCwwICsxLDEzOSBAQAorZXNjYXBlX2NoYXIgLworY29tbWVudF9jaGFyICUKKyUgY2hhcnNldCAiVVRGLTgiCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28gZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAiSW51a3RpdHV0IGxhbmd1YWdlIGxvY2FsZSBmb3IgTnVuYXZ1dCwgQ2FuYWRhIgorc291cmNlICIiCithZGRyZXNzICIiCitjb250YWN0ICJQYWJsbyBTYXJhdHhhZ2EiCitlbWFpbCAicGFibG9AbWFuZHJpdmEuY29tIgordGVsICIiCitmYXggIiIKK2xhbmd1YWdlICJJbnVrdGl0dXQiCit0ZXJyaXRvcnkgIkNBIgorcmV2aXNpb24gIjAuMSIKK2RhdGUgIjIwMDEtMDUtMDQiCisKK2NhdGVnb3J5IGl1X0NBOjIwMDA7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5IGl1X0NBOjIwMDA7TENfQ09MTEFURQorY2F0ZWdvcnkgaXVfQ0E6MjAwMDtMQ19DVFlQRQorY2F0ZWdvcnkgaXVfQ0E6MjAwMDtMQ19NRVNTQUdFUworY2F0ZWdvcnkgaXVfQ0E6MjAwMDtMQ19NT05FVEFSWQorY2F0ZWdvcnkgaXVfQ0E6MjAwMDtMQ19OVU1FUklDCitjYXRlZ29yeSBpdV9DQToyMDAwO0xDX1RJTUUKK2NhdGVnb3J5IGl1X0NBOjIwMDA7TENfUEFQRVIKK2NhdGVnb3J5IGl1X0NBOjIwMDA7TENfTkFNRQorY2F0ZWdvcnkgaXVfQ0E6MjAwMDtMQ19NRUFTVVJFTUVOVAorY2F0ZWdvcnkgaXVfQ0E6MjAwMDtMQ19URUxFUEhPTkUKK2NhdGVnb3J5IGl1X0NBOjIwMDA7TENfQUREUkVTUworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDY4Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDczPjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA3QT48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCislIEZJWE1FIGNvdW50cnlfbmFtZSAiQ2FuYWRhIiBpbiBpbnVrdGl0dXQgPworJSBGSVhNRSBjb3VudHJ5X3Bvc3QgIkNBIiBmb3IgQ2FuYWRhID8gCitjb3VudHJ5X2FiMiAiPFUwMDQzPjxVMDA0MT4iCitjb3VudHJ5X2FiMyAiPFUwMDQzPjxVMDA0MT48VTAwNEU+IgorY291bnRyeV9udW0gMTI0Citjb3VudHJ5X2NhciAiPFUwMDQzPjxVMDA0MT48VTAwNEU+IiAlIEZJWE1FCislIEZJWE1FIGNvdW50cnlfaXNibiBmb3IgQ2FuYWRhL2ludWt0aXR1dCA/CitsYW5nX25hbWUgIjxVMTQwMz48VTE0QzQ+PFUxNDgzPjxVMTQ0RT48VTE0NTA+PFUxNDY2PiIKK2xhbmdfYWIgIjxVMDA2OT48VTAwNzU+IgorbGFuZ190ZXJtICI8VTAwNjk+PFUwMDZCPjxVMDA3NT4iCitsYW5nX2xpYiAgIjxVMDA2OT48VTAwNkI+PFUwMDc1PiIKK0VORCBMQ19BRERSRVNTCisKKyUlJSUlJSUlJSUlJSUKKyUKKyUgVE9ETzogTENfQ09MTEFURSwgTENfVElNRSwgTENfTUVTU0FHRVMKKyUKKyUlJSUlJSUlJSUlJQorCisKK0xDX0NPTExBVEUKKyUgRklYTUU6IGlzIHRoYXQgb3JkZXIgY29ycmVjdCA/Citjb3B5ICJlbl9DQSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJlbl9DQSIKK0VORCBMQ19DVFlQRQorCitMQ19NT05FVEFSWQorY29weSAiZW5fQ0EiCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworY29weSAiZW5fQ0EiCitFTkQgTENfTlVNRVJJQworCitMQ19URUxFUEhPTkUKK2NvcHkgImVuX0NBIgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19USU1FCithYmRheSAgICAgICAiPFUxNEM4PiI7IjxVMTRDNz4iOy8KKyAgICAgICAgICAgICI8VTE0RDU+IjsiPFUxNDMxPiI7LworICAgICAgICAgICAgIjxVMTU3Rj4iOyI8VTE0MDU+IjsvCisgICAgICAgICAgICAiPFUxNEVGPiIKK2RheSAgICAgICAgICI8VTE0Qzg+PFUxNDY2PjxVMTQ0RT48VTE1OTE+PFUxNTJEPjxVMTU1MD48VTE1NTU+PFUxNDgzPiI7LworICAgICAgICAgICAgIjxVMTRDNz48VTE0QTE+PFUxNDkwPjxVMTUzRT48VTE1MkQ+PFUxNDA1PiI7LworICAgICAgICAgICAgIjxVMTRDNz48VTE0QTE+PFUxNDkwPjxVMTUzRT48VTE1MkQ+PFUxNDA1PjxVMTRENT48VTE1ODU+PFUxNDZEPjxVMTQ2Nj4iOy8KKyAgICAgICAgICAgICI8VTE0MzE+PFUxNTkzPjxVMTRGMj48VTE0RDU+PFUxNTg1PjxVMTRFRj48VTE0MDU+PFUxNDY2PiI7LworICAgICAgICAgICAgIjxVMTU3Rj48VTE0NEU+PFUxNTg1PjxVMTQ3MD48VTE0NjY+IjsvCisgICAgICAgICAgICAiPFUxNDA1PjxVMTRFQT48VTE0RDc+PFUxNTQ4PjxVMTREOD48VTE0NTA+PFUxNDAzPjxVMTRDNz48VTE1ODU+IjsvCisgICAgICAgICAgICAiPFUxNEVGPjxVMTU1OT48VTE0NTY+PFUxNTU1PjxVMTQ4Mz4iCithYm1vbiAgICAgICAiPFUxNTJFPjxVMTRDND4iOyI8VTE1NTU+PFUxNTU3PiI7LworICAgICAgICAgICAgIjxVMTRBQT48VTE1MDU+IjsiPFUxNDAzPjxVMTQzMz4iOy8KKyAgICAgICAgICAgICI8VTE0QUE+PFUxNDAzPiI7IjxVMTUyQT48VTE0QzI+IjsvCisgICAgICAgICAgICAiPFUxNTJBPjxVMTREQT4iOyI8VTE0MEE+PFUxNDhCPiI7LworICAgICAgICAgICAgIjxVMTRFRj48VTE0NEU+IjsiPFUxNDBBPjxVMTQ2Nj4iOy8KKyAgICAgICAgICAgICI8VTE0QzQ+PFUxNTU1PiI7IjxVMTQ0RT48VTE0RUY+IgorbW9uICAgICAgICAgIjxVMTUyRT48VTE0QzQ+PFUxNDBBPjxVMTRENT4iOy8KKyAgICAgICAgICAgICI8VTE1NTU+PFUxNTU3PjxVMTQwQT48VTE0RDU+IjsvCisgICAgICAgICAgICAiPFUxNEFBPjxVMTUwNT48VTE0RUY+IjsvCisgICAgICAgICAgICAiPFUxNDAzPjxVMTQzMz48VTE0RDc+IjsvCisgICAgICAgICAgICAiPFUxNEFBPjxVMTQwMz4iOy8KKyAgICAgICAJICAgICI8VTE1MkE+PFUxNEMyPiI7LworICAgICAgICAgICAgIjxVMTUyQT48VTE0REE+PFUxNDAzPiI7LworICAgICAgICAgICAgIjxVMTQwQT48VTE0OEI+PFUxNEVGPiI7LworICAgICAgICAgICAgIjxVMTRFRj48VTE0NEU+PFUxNTU5PiI7LworICAgICAgICAgICAgIjxVMTQwQT48VTE0NjY+PFUxNDUwPjxVMTU1OT4iOy8KKyAgICAgICAgICAgICI8VTE0QzQ+PFUxNTU1PjxVMTU1OT4iOy8KKyAgICAgICAgICAgICI8VTE0NEU+PFUxNEVGPjxVMTU1RD48VTE1NTk+IgorZF90X2ZtdCAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAgICAgIjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNzk+IgordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNzI+IgorYW1fcG0gICAgICAgIjxVMDA0MT48VTAwNEQ+IjsiPFUwMDUwPjxVMDA0RD4iCit0X2ZtdF9hbXBtICAiPFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD4iCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAgICAgIjxVMDA1Qj48VTAwNzk+PFUwMDU5PjxVMDA3Mz48VTAwNTM+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAgICAgIjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCislIERlZmF1bHQgcGFwZXI6IEE0CitMQ19QQVBFUgoraGVpZ2h0IDI5Nword2lkdGggMjEwCitFTkQgTENfUEFQRVIKKworJSBGSVhNRQorTENfTkFNRQorY29weSAiZW5fQ0EiCitFTkQgTENfTkFNRQorCislIE1ldHJpYyBTeXN0ZW0gKElTTyAxMDAwKQorTENfTUVBU1VSRU1FTlQKK21lYXN1cmVtZW50IDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCisKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvaXdfSUwgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9pd19JTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWI4OTNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvaXdfSUwKQEAgLTAsMCArMSwxNjQgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBIZWJyZXcgTGFuZ3VhZ2UgTG9jYWxlIGZvciBJc3JhZWwKKyUgU291cmNlOiBSQVAKKyUgQWRkcmVzczogU2Fua3QgSm8vcmdlbnMgQWxsZSA4CislICAgIERLLTE2MTUgS28vYmVuaGF2biBWLCBEYW5tYXJrCislIENvbnRhY3Q6IEtlbGQgU2ltb25zZW4KKyUgRW1haWw6IEtlbGQuU2ltb25zZW5AZGt1dWcuZGsKKyUgVGVsOiArNDUgLSAzMTIyNjU0MworJSBGYXg6ICs0NSAtIDMzMjU2NTQzCislIExhbmd1YWdlOiBpdworJSBUZXJyaXRvcnk6IElMCislIFJldmlzaW9uOiA0LjQKKyUgRGF0ZTogMTk5Ny0wMy0xOAorJSBVc2VyczogZ2VuZXJhbAorJSBSZXBlcnRvaXJlbWFwOiBtbmVtb25pYy5kcworJSBDaGFyc2V0OiBJU08tODg1OS04CislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCislCislIE9ic29sZXRlIGxvY2FsZS4gIFRoZSBJU08tNjM5IGNvZGUgZm9yIEhlYnJldyB3YXMgY2hhbmdlZCBmcm9tICdpdycKKyUgdG8gJ2hlJyBpbiAxOTg5LCBhY2NvcmRpbmcgdG8gQnJ1bm8gSGFpYmxlIG9uIGxpYmMtYWxwaGEgMjAwMy0wOS0wMS4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkhlYnJldyBsb2NhbGUgZm9yIElzcmFlbCIKK3NvdXJjZSAgICAgIlJBUCIKK2FkZHJlc3MgICAgIlNhbmt0IEpvL3JnZW5zIEFsbGUgOCwgREstMTYxNSBLby9iZW5oYXZuIFYsIERhbm1hcmsiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiSGVicmV3IgordGVycml0b3J5ICAiSXNyYWVsIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAiaXdfSUw6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiaXdfSUw6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiaXdfSUw6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJpd19JTDoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgIml3X0lMOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiaXdfSUw6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiaXdfSUw6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiaXdfSUw6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiaXdfSUw6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJpd19JTDoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgIml3X0lMOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCitjb3B5ICJpc28xNDY1MV90MSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAiPFUwMDQ5PjxVMDA0Qz48VTAwNTM+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICI8VTA1RTk+PFUwNUQ3PiIKK21vbl9kZWNpbWFsX3BvaW50ICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICIiCituZWdhdGl2ZV9zaWduICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgIDIKK2ZyYWNfZGlnaXRzICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgIDEKK25fY3NfcHJlY2VkZXMgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgIDIKK25fc2lnbl9wb3NuICAgICAgIDIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICI8VTAwMkM+IgorZ3JvdXBpbmcgICAgICAgICAgMzszCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICI8VTA1RDA+PFUwMDI3PiI7IjxVMDVEMT48VTAwMjc+IjsiPFUwNUQyPjxVMDAyNz4iOy8KKyAgICAgICAgIjxVMDVEMz48VTAwMjc+IjsiPFUwNUQ0PjxVMDAyNz4iOyI8VTA1RDU+PFUwMDI3PiI7LworCSI8VTA1RTk+PFUwMDI3PiIKK2RheSAgICAgIjxVMDVFOD48VTA1RDA+PFUwNUU5PjxVMDVENT48VTA1REY+IjsvCisgICAgICAgICI8VTA1RTk+PFUwNUUwPjxVMDVEOT4iOy8KKyAgICAgICAgIjxVMDVFOT48VTA1REM+PFUwNUQ5PjxVMDVFOT48VTA1RDk+IjsvCisgICAgICAgICI8VTA1RTg+PFUwNUQxPjxVMDVEOT48VTA1RTI+PFUwNUQ5PiI7LworICAgICAgICAiPFUwNUQ3PjxVMDVERT48VTA1RDk+PFUwNUU5PjxVMDVEOT4iOy8KKyAgICAgICAgIjxVMDVFOT48VTA1RDk+PFUwNUU5PjxVMDVEOT4iOy8KKyAgICAgICAgIjxVMDVFOT48VTA1RDE+PFUwNUVBPiIKK21vbiAgICAgIjxVMDVEOT48VTA1RTA+PFUwNUQ1PjxVMDVEMD48VTA1RTg+IjsvCisgICAgICAgICI8VTA1RTQ+PFUwNUQxPjxVMDVFOD48VTA1RDU+PFUwNUQwPjxVMDVFOD4iOy8KKyAgICAgICAgIjxVMDVERT48VTA1RTg+PFUwNUU1PiI7LworICAgICAgICAiPFUwNUQwPjxVMDVFND48VTA1RTg+PFUwNUQ5PjxVMDVEQz4iOy8KKyAgICAgICAgIjxVMDVERT48VTA1RDA+PFUwNUQ5PiI7LworICAgICAgICAiPFUwNUQ5PjxVMDVENT48VTA1RTA+PFUwNUQ5PiI7LworICAgICAgICAiPFUwNUQ5PjxVMDVENT48VTA1REM+PFUwNUQ5PiI7LworICAgICAgICAiPFUwNUQwPjxVMDVENT48VTA1RDI+PFUwNUQ1PjxVMDVFMT48VTA1RDg+IjsvCisgICAgICAgICI8VTA1RTE+PFUwNUU0PjxVMDVEOD48VTA1REU+PFUwNUQxPjxVMDVFOD4iOy8KKyAgICAgICAgIjxVMDVEMD48VTA1RDU+PFUwNUU3PjxVMDVEOD48VTA1RDU+PFUwNUQxPjxVMDVFOD4iOy8KKyAgICAgICAgIjxVMDVFMD48VTA1RDU+PFUwNUQxPjxVMDVERT48VTA1RDE+PFUwNUU4PiI7LworICAgICAgICAiPFUwNUQzPjxVMDVFNj48VTA1REU+PFUwNUQxPjxVMDVFOD4iCithYm1vbiAgICI8VTA1RDk+PFUwNUUwPjxVMDVENT4iOyI8VTA1RTQ+PFUwNUQxPjxVMDVFOD4iOy8KKyAgICAgICAgIjxVMDVERT48VTA1RTg+PFUwNUU1PiI7IjxVMDVEMD48VTA1RTQ+PFUwNUU4PiI7LworICAgICAgICAiPFUwNURFPjxVMDVEMD48VTA1RDk+IjsiPFUwNUQ5PjxVMDVENT48VTA1RTA+IjsvCisgICAgICAgICI8VTA1RDk+PFUwNUQ1PjxVMDVEQz4iOyI8VTA1RDA+PFUwNUQ1PjxVMDVEMj4iOy8KKyAgICAgICAgIjxVMDVFMT48VTA1RTQ+PFUwNUQ4PiI7IjxVMDVEMD48VTA1RDU+PFUwNUU3PiI7LworICAgICAgICAiPFUwNUUwPjxVMDVENT48VTA1RDE+IjsiPFUwNUQzPjxVMDVFNj48VTA1REU+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2MT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+IgorYW1fcG0gICAiPFUwMDQxPjxVMDA0RD4iOyI8VTAwNTA+PFUwMDREPiIKK3RfZm10X2FtcG0gICI8VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDUwPiIKK2RhdGVfZm10ICAgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA1OT48VTAwNzk+PFUwNURCPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDRFPjxVMDA2RT48VTA1REM+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCislIEZJWE1FCitoZWlnaHQgICAyOTcKKyUgRklYTUUKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzk+PFUwMDM3PjxVMDAzMj4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCislIEZJWE1FCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICI8VTAwNDk+PFUwMDRDPiIKK2NvdW50cnlfYWIzICI8VTAwNDk+PFUwMDUzPjxVMDA1Mj4iCitjb3VudHJ5X251bSAzNzYKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9qYV9KUCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2phX0pQCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZTU1YjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9qYV9KUApAQCAtMCwwICsxLDE1MDYzIEBACitlc2NhcGVfY2hhciAgLworY29tbWVudF9jaGFyICAlCisKKyUgTmFtZTogICAgbG9jYWxlZGVmIGZvciBqYV9KUAorJSBWZXJzaW9uOiAwLjcKKyUgRGF0ZTogICAgMTk5OS0xMi0wNQorJSBXcml0ZTogICBIQU5BVEFLQSwgU2hpbnlhIDxoYW5hdGFrYUBhYnlzcy5yaW0ub3IuanA+CislIENoYXJzZXQ6IEVVQy1KUAorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiSmFwYW5lc2UgbGFuZ3VhZ2UgbG9jYWxlIGZvciBKYXBhbiIKK3NvdXJjZSAgICAgIkhBTkFUQUtBLCBTaGlueWEsIGhhbmF0YWthQGFieXNzLnJpbS5vci5qcCIKK2FkZHJlc3MgICAgIiIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJKYXBhbmVzZSIKK3RlcnJpdG9yeSAgIkphcGFuIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNy0yMCIKKyUKK2NhdGVnb3J5ICAiamFfSlA6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiamFfSlA6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiamFfSlA6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJqYV9KUDoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImphX0pQOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiamFfSlA6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiamFfSlA6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiamFfSlA6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiamFfSlA6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJqYV9KUDoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImphX0pQOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKKyUgVGhpcyBpcyBhIGNvcHkgb2YgdGhlICJpMThuIiBMQ19DVFlQRSB3aXRoIHRoZSBmb2xsb3dpbmcgbW9kaWZpY2F0aW9uczoKKyUgLSBBZGRpdGlvbmFsIGNsYXNzZXM6IGpzcGFjZSBqaGlyYSBqa2F0YSBqa2FuamkgamRpZ2l0CislIC0gQWRkaXRpb25hbCBtYXBzOiB0b2poaXJhIHRvamthdGEKKworY29weSAiaTE4biIKKworY2hhcmNsYXNzCWpzcGFjZTtqaGlyYTtqa2F0YTtqa2Fuamk7amRpZ2l0CisKK2NoYXJjb252CXRvamhpcmE7dG9qa2F0YQorCitqc3BhY2UJPFUzMDAwPgorCitqZGlnaXQJPFVGRjEwPjs8VUZGMTE+OzxVRkYxMj47PFVGRjEzPjs8VUZGMTQ+Oy8KKwk8VUZGMTU+OzxVRkYxNj47PFVGRjE3Pjs8VUZGMTg+OzxVRkYxOT4KKworamhpcmEJPFUzMDQxPjs8VTMwNDI+OzxVMzA0Mz47PFUzMDQ0Pjs8VTMwNDU+OzxVMzA0Nj47PFUzMDQ3Pjs8VTMwNDg+Oy8KKwk8VTMwNDk+OzxVMzA0QT47PFUzMDRCPjs8VTMwNEM+OzxVMzA0RD47PFUzMDRFPjs8VTMwNEY+OzxVMzA1MD47LworCTxVMzA1MT47PFUzMDUyPjs8VTMwNTM+OzxVMzA1ND47PFUzMDU1Pjs8VTMwNTY+OzxVMzA1Nz47PFUzMDU4PjsvCisJPFUzMDU5Pjs8VTMwNUE+OzxVMzA1Qj47PFUzMDVDPjs8VTMwNUQ+OzxVMzA1RT47PFUzMDVGPjs8VTMwNjA+Oy8KKwk8VTMwNjE+OzxVMzA2Mj47PFUzMDYzPjs8VTMwNjQ+OzxVMzA2NT47PFUzMDY2Pjs8VTMwNjc+OzxVMzA2OD47LworCTxVMzA2OT47PFUzMDZBPjs8VTMwNkI+OzxVMzA2Qz47PFUzMDZEPjs8VTMwNkU+OzxVMzA2Rj47PFUzMDcwPjsvCisJPFUzMDcxPjs8VTMwNzI+OzxVMzA3Mz47PFUzMDc0Pjs8VTMwNzU+OzxVMzA3Nj47PFUzMDc3Pjs8VTMwNzg+Oy8KKwk8VTMwNzk+OzxVMzA3QT47PFUzMDdCPjs8VTMwN0M+OzxVMzA3RD47PFUzMDdFPjs8VTMwN0Y+OzxVMzA4MD47LworCTxVMzA4MT47PFUzMDgyPjs8VTMwODM+OzxVMzA4ND47PFUzMDg1Pjs8VTMwODY+OzxVMzA4Nz47PFUzMDg4PjsvCisJPFUzMDg5Pjs8VTMwOEE+OzxVMzA4Qj47PFUzMDhDPjs8VTMwOEQ+OzxVMzA4RT47PFUzMDhGPjs8VTMwOTA+Oy8KKwk8VTMwOTE+OzxVMzA5Mj47PFUzMDkzPjs8VTMwOUI+OzxVMzA5Qz47PFUzMDlEPjs8VTMwOUU+OzxVMzBGQz4KKworamthdGEJPFUzMEExPjs8VTMwQTI+OzxVMzBBMz47PFUzMEE0Pjs8VTMwQTU+OzxVMzBBNj47PFUzMEE3Pjs8VTMwQTg+Oy8KKwk8VTMwQTk+OzxVMzBBQT47PFUzMEFCPjs8VTMwQUM+OzxVMzBBRD47PFUzMEFFPjs8VTMwQUY+OzxVMzBCMD47LworCTxVMzBCMT47PFUzMEIyPjs8VTMwQjM+OzxVMzBCND47PFUzMEI1Pjs8VTMwQjY+OzxVMzBCNz47PFUzMEI4PjsvCisJPFUzMEI5Pjs8VTMwQkE+OzxVMzBCQj47PFUzMEJDPjs8VTMwQkQ+OzxVMzBCRT47PFUzMEJGPjs8VTMwQzA+Oy8KKwk8VTMwQzE+OzxVMzBDMj47PFUzMEMzPjs8VTMwQzQ+OzxVMzBDNT47PFUzMEM2Pjs8VTMwQzc+OzxVMzBDOD47LworCTxVMzBDOT47PFUzMENBPjs8VTMwQ0I+OzxVMzBDQz47PFUzMENEPjs8VTMwQ0U+OzxVMzBDRj47PFUzMEQwPjsvCisJPFUzMEQxPjs8VTMwRDI+OzxVMzBEMz47PFUzMEQ0Pjs8VTMwRDU+OzxVMzBENj47PFUzMEQ3Pjs8VTMwRDg+Oy8KKwk8VTMwRDk+OzxVMzBEQT47PFUzMERCPjs8VTMwREM+OzxVMzBERD47PFUzMERFPjs8VTMwREY+OzxVMzBFMD47LworCTxVMzBFMT47PFUzMEUyPjs8VTMwRTM+OzxVMzBFND47PFUzMEU1Pjs8VTMwRTY+OzxVMzBFNz47PFUzMEU4PjsvCisJPFUzMEU5Pjs8VTMwRUE+OzxVMzBFQj47PFUzMEVDPjs8VTMwRUQ+OzxVMzBFRT47PFUzMEVGPjs8VTMwRjA+Oy8KKwk8VTMwRjE+OzxVMzBGMj47PFUzMEYzPjs8VTMwRjQ+OzxVMzBGNT47PFUzMEY2Pjs8VTMwOUI+OzxVMzA5Qz47LworCTxVMzBGRD47PFUzMEZFPjs8VTMwRkM+Oy8KKwk8VUZGNjY+OzxVRkY2Nz47PFVGRjY4Pjs8VUZGNjk+OzxVRkY2QT47PFVGRjZCPjsvCisJPFVGRjZDPjs8VUZGNkQ+OzxVRkY2RT47PFVGRjZGPjsvCisJPFVGRjcwPjsvCisJPFVGRjcxPjs8VUZGNzI+OzxVRkY3Mz47PFVGRjc0Pjs8VUZGNzU+Oy8KKwk8VUZGNzY+OzxVRkY3Nz47PFVGRjc4Pjs8VUZGNzk+OzxVRkY3QT47LworCTxVRkY3Qj47PFVGRjdDPjs8VUZGN0Q+OzxVRkY3RT47PFVGRjdGPjsvCisJPFVGRjgwPjs8VUZGODE+OzxVRkY4Mj47PFVGRjgzPjs8VUZGODQ+Oy8KKwk8VUZGODU+OzxVRkY4Nj47PFVGRjg3Pjs8VUZGODg+OzxVRkY4OT47LworCTxVRkY4QT47PFVGRjhCPjs8VUZGOEM+OzxVRkY4RD47PFVGRjhFPjsvCisJPFVGRjhGPjs8VUZGOTA+OzxVRkY5MT47PFVGRjkyPjs8VUZGOTM+Oy8KKwk8VUZGOTQ+OzxVRkY5NT47PFVGRjk2PjsvCisJPFVGRjk3Pjs8VUZGOTg+OzxVRkY5OT47PFVGRjlBPjs8VUZGOUI+Oy8KKwk8VUZGOUM+OzxVRkY5RD47LworCTxVRkY5RT47PFVGRjlGPgorCitqa2FuamkJPFU0RTlDPjs8VTU1MTY+OzxVNUEwMz47PFU5NjNGPjs8VTU0QzA+OzxVNjExQj47PFU2MzI4Pjs8VTU5RjY+Oy8KKwk8VTkwMjI+OzxVODQ3NT47PFU4MzFDPjs8VTdBNTA+OzxVNjBBQT47PFU2M0UxPjs8VTZFMjU+OzxVNjVFRD47LworCTxVODQ2Nj47PFU4MkE2Pjs8VTlCRjU+OzxVNjg5Mz47PFU1NzI3Pjs8VTY1QTE+OzxVNjI3MT47PFU1QjlCPjsvCisJPFU1OUQwPjs8VTg2N0I+OzxVOThGND47PFU3RDYyPjs8VTdEQkU+OzxVOUI4RT47PFU2MjE2Pjs8VTdDOUY+Oy8KKwk8VTg4Qjc+OzxVNUI4OT47PFU1RUI1Pjs8VTYzMDk+OzxVNjY5Nz47PFU2ODQ4Pjs8VTk1Qzc+OzxVOTc4RD47LworCTxVNjc0Rj47PFU0RUU1Pjs8VTRGMEE+OzxVNEY0RD47PFU0RjlEPjs8VTUwNDk+OzxVNTZGMj47PFU1OTM3PjsvCisJPFU1OUQ0Pjs8VTVBMDE+OzxVNUMwOT47PFU2MERGPjs8VTYxMEY+OzxVNjE3MD47PFU2NjEzPjs8VTY5MDU+Oy8KKwk8VTcwQkE+OzxVNzU0Rj47PFU3NTcwPjs8VTc5RkI+OzxVN0RBRD47PFU3REVGPjs8VTgwQzM+OzxVODQwRT47LworCTxVODg2Mz47PFU4QjAyPjs8VTkwNTU+OzxVOTA3QT47PFU1MzNCPjs8VTRFOTU+OzxVNEVBNT47PFU1N0RGPjsvCisJPFU4MEIyPjs8VTkwQzE+OzxVNzhFRj47PFU0RTAwPjs8VTU4RjE+OzxVNkVBMj47PFU5MDM4Pjs8VTdBMzI+Oy8KKwk8VTgzMjg+OzxVODI4Qj47PFU5QzJGPjs8VTUxNDE+OzxVNTM3MD47PFU1NEJEPjs8VTU0RTE+OzxVNTZFMD47LworCTxVNTlGQj47PFU1RjE1Pjs8VTk4RjI+OzxVNkRFQj47PFU4MEU0Pjs8VTg1MkQ+OzxVOTY2Mj47PFU5NjcwPjsvCisJPFU5NkEwPjs8VTk3RkI+OzxVNTQwQj47PFU1M0YzPjs8VTVCODc+OzxVNzBDRj47PFU3RkJEPjs8VThGQzI+Oy8KKwk8VTk2RTg+OzxVNTM2Rj47PFU5RDVDPjs8VTdBQkE+OzxVNEUxMT47PFU3ODkzPjs8VTgxRkM+OzxVNkUyNj47LworCTxVNTYxOD47PFU1NTA0Pjs8VTZCMUQ+OzxVODUxQT47PFU5QzNCPjs8VTU5RTU+OzxVNTNBOT47PFU2RDY2PjsvCisJPFU3NERDPjs8VTk1OEY+OzxVNTY0Mj47PFU0RTkxPjs8VTkwNEI+OzxVOTZGMj47PFU4MzRGPjs8VTk5MEM+Oy8KKwk8VTUzRTE+OzxVNTVCNj47PFU1QjMwPjs8VTVGNzE+OzxVNjYyMD47PFU2NkYzPjs8VTY4MDQ+OzxVNkMzOD47LworCTxVNkNGMz47PFU2RDI5Pjs8VTc0NUI+OzxVNzZDOD47PFU3QTRFPjs8VTk4MzQ+OzxVODJGMT47PFU4ODVCPjsvCisJPFU4QTYwPjs8VTkyRUQ+OzxVNkRCMj47PFU3NUFCPjs8VTc2Q0E+OzxVOTlDNT47PFU2MEE2Pjs8VThCMDE+Oy8KKwk8VThEOEE+OzxVOTVCMj47PFU2OThFPjs8VTUzQUQ+OzxVNTE4Nj47PFU1NzEyPjs8VTU4MzA+OzxVNTk0ND47LworCTxVNUJCND47PFU1RUY2Pjs8VTYwMjg+OzxVNjNBOT47PFU2M0Y0Pjs8VTZDQkY+OzxVNkYxND47PFU3MDhFPjsvCisJPFU3MTE0Pjs8VTcxNTk+OzxVNzFENT47PFU3MzNGPjs8VTdFMDE+OzxVODI3Nj47PFU4MkQxPjs8VTg1OTc+Oy8KKwk8VTkwNjA+OzxVOTI1Qj47PFU5RDFCPjs8VTU4Njk+OzxVNjVCQz47PFU2QzVBPjs8VTc1MjU+OzxVNTFGOT47LworCTxVNTkyRT47PFU1OTY1Pjs8VTVGODA+OzxVNUZEQz47PFU2MkJDPjs8VTY1RkE+OzxVNkEyQT47PFU2QjI3PjsvCisJPFU2QkI0Pjs8VTczOEI+OzxVN0ZDMT47PFU4OTU2Pjs8VTlEMkM+OzxVOUQwRT47PFU5RUM0Pjs8VTVDQTE+Oy8KKwk8VTZDOTY+OzxVODM3Qj47PFU1MTA0Pjs8VTVDNEI+OzxVNjFCNj47PFU4MUM2Pjs8VTY4NzY+OzxVNzI2MT47LworCTxVNEU1OT47PFU0RkZBPjs8VTUzNzg+OzxVNjA2OT47PFU2RTI5Pjs8VTdBNEY+OzxVOTdGMz47PFU0RTBCPjsvCisJPFU1MzE2Pjs8VTRFRUU+OzxVNEY1NT47PFU0RjNEPjs8VTRGQTE+OzxVNEY3Mz47PFU1MkEwPjs8VTUzRUY+Oy8KKwk8VTU2MDk+OzxVNTkwRj47PFU1QUMxPjs8VTVCQjY+OzxVNUJFMT47PFU3OUQxPjs8VTY2ODc+OzxVNjc5Qz47LworCTxVNjdCNj47PFU2QjRDPjs8VTZDQjM+OzxVNzA2Qj47PFU3M0MyPjs8VTc5OEQ+OzxVNzlCRT47PFU3QTNDPjsvCisJPFU3Qjg3Pjs8VTgyQjE+OzxVODJEQj47PFU4MzA0Pjs8VTgzNzc+OzxVODNFRj47PFU4M0QzPjs8VTg3NjY+Oy8KKwk8VThBQjI+OzxVNTYyOT47PFU4Q0E4Pjs8VThGRTY+OzxVOTA0RT47PFU5NzFFPjs8VTg2OEE+OzxVNEZDND47LworCTxVNUNFOD47PFU2MjExPjs8VTcyNTk+OzxVNzUzQj47PFU4MUU1Pjs8VTgyQkQ+OzxVODZGRT47PFU4Q0MwPjsvCisJPFU5NkM1Pjs8VTk5MTM+OzxVOTlENT47PFU0RUNCPjs8VTRGMUE+OzxVODlFMz47PFU1NkRFPjs8VTU4NEE+Oy8KKwk8VTU4Q0E+OzxVNUVGQj47PFU1RkVCPjs8VTYwMkE+OzxVNjA5ND47PFU2MDYyPjs8VTYxRDA+OzxVNjIxMj47LworCTxVNjJEMD47PFU2NTM5Pjs8VTlCNDE+OzxVNjY2Nj47PFU2OEIwPjs8VTZENzc+OzxVNzA3MD47PFU3NTRDPjsvCisJPFU3Njg2Pjs8VTdENzU+OzxVODJBNT47PFU4N0Y5Pjs8VTk1OEI+OzxVOTY4RT47PFU4QzlEPjs8VTUxRjE+Oy8KKwk8VTUyQkU+OzxVNTkxNj47PFU1NEIzPjs8VTVCQjM+OzxVNUQxNj47PFU2MTY4Pjs8VTY5ODI+OzxVNkRBRj47LworCTxVNzg4RD47PFU4NENCPjs8VTg4NTc+OzxVOEE3Mj47PFU5M0E3Pjs8VTlBQjg+OzxVNkQ2Qz47PFU5OUE4PjsvCisJPFU4NkQ5Pjs8VTU3QTM+OzxVNjdGRj47PFU4NkNFPjs8VTkyMEU+OzxVNTI4Mz47PFU1Njg3Pjs8VTU0MDQ+Oy8KKwk8VTVFRDM+OzxVNjJFMT47PFU2NEI5Pjs8VTY4M0M+OzxVNjgzOD47PFU2QkJCPjs8VTczNzI+OzxVNzhCQT47LworCTxVN0E2Qj47PFU4OTlBPjs8VTg5RDI+OzxVOEQ2Qj47PFU4RjAzPjs8VTkwRUQ+OzxVOTVBMz47PFU5Njk0PjsvCisJPFU5NzY5Pjs8VTVCNjY+OzxVNUNCMz47PFU2OTdEPjs8VTk4NEQ+OzxVOTg0RT47PFU2MzlCPjs8VTdCMjA+Oy8KKwk8VTZBMkI+OzxVNkE3Rj47PFU2OEI2Pjs8VTlDMEQ+OzxVNkY1Rj47PFU1MjcyPjs8VTU1OUQ+OzxVNjA3MD47LworCTxVNjJFQz47PFU2RDNCPjs8VTZFMDc+OzxVNkVEMT47PFU4NDVCPjs8VTg5MTA+OzxVOEY0ND47PFU0RTE0PjsvCisJPFU5QzM5Pjs8VTUzRjY+OzxVNjkxQj47PFU2QTNBPjs8VTk3ODQ+OzxVNjgyQT47PFU1MTVDPjs8VTdBQzM+Oy8KKwk8VTg0QjI+OzxVOTFEQz47PFU5MzhDPjs8VTU2NUI+OzxVOUQyOD47PFU2ODIyPjs8VTgzMDU+OzxVODQzMT47LworCTxVN0NBNT47PFU1MjA4Pjs8VTgyQzU+OzxVNzRFNj47PFU0RTdFPjs8VTRGODM+OzxVNTFBMD47PFU1QkQyPjsvCisJPFU1MjBBPjs8VTUyRDg+OzxVNTJFNz47PFU1REZCPjs8VTU1OUE+OzxVNTgyQT47PFU1OUU2Pjs8VTVCOEM+Oy8KKwk8VTVCOTg+OzxVNUJEQj47PFU1RTcyPjs8VTVFNzk+OzxVNjBBMz47PFU2MTFGPjs8VTYxNjM+OzxVNjFCRT47LworCTxVNjNEQj47PFU2NTYyPjs8VTY3RDE+OzxVNjg1Mz47PFU2OEZBPjs8VTZCM0U+OzxVNkI1Mz47PFU2QzU3PjsvCisJPFU2RjIyPjs8VTZGOTc+OzxVNkY0NT47PFU3NEIwPjs8VTc1MTg+OzxVNzZFMz47PFU3NzBCPjs8VTdBRkY+Oy8KKwk8VTdCQTE+OzxVN0MyMT47PFU3REU5Pjs8VTdGMzY+OzxVN0ZGMD47PFU4MDlEPjs8VTgyNjY+OzxVODM5RT47LworCTxVODlCMz47PFU4QUNDPjs8VThDQUI+OzxVOTA4ND47PFU5NDUxPjs8VTk1OTM+OzxVOTU5MT47PFU5NUEyPjsvCisJPFU5NjY1Pjs8VTk3RDM+OzxVOTkyOD47PFU4MjE4Pjs8VTRFMzg+OzxVNTQyQj47PFU1Q0I4Pjs8VTVEQ0M+Oy8KKwk8VTczQTk+OzxVNzY0Qz47PFU3NzNDPjs8VTVDQTk+OzxVN0ZFQj47PFU4RDBCPjs8VTk2QzE+OzxVOTgxMT47LworCTxVOTg1ND47PFU5ODU4Pjs8VTRGMDE+OzxVNEYwRT47PFU1MzcxPjs8VTU1OUM+OzxVNTY2OD47PFU1N0ZBPjsvCisJPFU1OTQ3Pjs8VTVCMDk+OzxVNUJDND47PFU1QzkwPjs8VTVFMEM+OzxVNUU3RT47PFU1RkNDPjs8VTYzRUU+Oy8KKwk8VTY3M0E+OzxVNjVENz47PFU2NUUyPjs8VTY3MUY+OzxVNjhDQj47PFU2OEM0Pjs8VTZBNUY+OzxVNUUzMD47LworCTxVNkJDNT47PFU2QzE3Pjs8VTZDN0Q+OzxVNzU3Rj47PFU3OTQ4Pjs8VTVCNjM+OzxVN0EwMD47PFU3RDAwPjsvCisJPFU1RkJEPjs8VTg5OEY+OzxVOEExOD47PFU4Q0I0Pjs8VThENzc+OzxVOEVDQz47PFU4RjFEPjs8VTk4RTI+Oy8KKwk8VTlBMEU+OzxVOUIzQz47PFU0RTgwPjs8VTUwN0Q+OzxVNTEwMD47PFU1OTkzPjs8VTVCOUM+OzxVNjIyRj47LworCTxVNjI4MD47PFU2NEVDPjs8VTZCM0E+OzxVNzJBMD47PFU3NTkxPjs8VTc5NDc+OzxVN0ZBOT47PFU4N0ZCPjsvCisJPFU4QUJDPjs8VThCNzA+OzxVNjNBQz47PFU4M0NBPjs8VTk3QTA+OzxVNTQwOT47PFU1NDAzPjs8VTU1QUI+Oy8KKwk8VTY4NTQ+OzxVNkE1OD47PFU4QTcwPjs8VTc4Mjc+OzxVNjc3NT47PFU5RUNEPjs8VTUzNzQ+OzxVNUJBMj47LworCTxVODExQT47PFU4NjUwPjs8VTkwMDY+OzxVNEUxOD47PFU0RTQ1Pjs8VTRFQzc+OzxVNEYxMT47PFU1M0NBPjsvCisJPFU1NDM4Pjs8VTVCQUU+OzxVNUYxMz47PFU2MDI1Pjs8VTY1NTE+OzxVNjczRD47PFU2QzQyPjs8VTZDNzI+Oy8KKwk8VTZDRTM+OzxVNzA3OD47PFU3NDAzPjs8VTdBNzY+OzxVN0FBRT47PFU3QjA4Pjs8VTdEMUE+OzxVN0NGRT47LworCTxVN0Q2Nj47PFU2NUU3Pjs8VTcyNUI+OzxVNTNCQj47PFU1QzQ1Pjs8VTVERTg+OzxVNjJEMj47PFU2MkUwPjsvCisJPFU2MzE5Pjs8VTZFMjA+OzxVODY1QT47PFU4QTMxPjs8VThEREQ+OzxVOTJGOD47PFU2RjAxPjs8VTc5QTY+Oy8KKwk8VTlCNUE+OzxVNEVBOD47PFU0RUFCPjs8VTRFQUM+OzxVNEY5Qj47PFU0RkEwPjs8VTUwRDE+OzxVNTE0Nz47LworCTxVN0FGNj47PFU1MTcxPjs8VTUxRjY+OzxVNTM1ND47PFU1MzIxPjs8VTUzN0Y+OzxVNTNFQj47PFU1NUFDPjsvCisJPFU1ODgzPjs8VTVDRTE+OzxVNUYzNz47PFU1RjRBPjs8VTYwMkY+OzxVNjA1MD47PFU2MDZEPjs8VTYzMUY+Oy8KKwk8VTY1NTk+OzxVNkE0Qj47PFU2Q0MxPjs8VTcyQzI+OzxVNzJFRD47PFU3N0VGPjs8VTgwRjg+OzxVODEwNT47LworCTxVODIwOD47PFU4NTRFPjs8VTkwRjc+OzxVOTNFMT47PFU5N0ZGPjs8VTk5NTc+OzxVOUE1QT47PFU0RUYwPjsvCisJPFU1MUREPjs8VTVDMkQ+OzxVNjY4MT47PFU2OTZEPjs8VTVDNDA+OzxVNjZGMj47PFU2OTc1Pjs8VTczODk+Oy8KKwk8VTY4NTA+OzxVN0M4MT47PFU1MEM1Pjs8VTUyRTQ+OzxVNTc0Nz47PFU1REZFPjs8VTkzMjY+OzxVNjVBND47LworCTxVNkIyMz47PFU2QjNEPjs8VTc0MzQ+OzxVNzk4MT47PFU3OUJEPjs8VTdCNEI+OzxVN0RDQT47PFU4MkI5PjsvCisJPFU4M0NDPjs8VTg4N0Y+OzxVODk1Rj47PFU4QjM5Pjs8VThGRDE+OzxVOTFEMT47PFU1NDFGPjs8VTkyODA+Oy8KKwk8VTRFNUQ+OzxVNTAzNj47PFU1M0U1Pjs8VTUzM0E+OzxVNzJENz47PFU3Mzk2Pjs8VTc3RTk+OzxVODJFNj47LworCTxVOEVBRj47PFU5OUM2Pjs8VTk5Qzg+OzxVOTlEMj47PFU1MTc3Pjs8VTYxMUE+OzxVODY1RT47PFU1NUIwPjsvCisJPFU3QTdBPjs8VTUwNzY+OzxVNUJEMz47PFU5MDQ3Pjs8VTk2ODU+OzxVNEUzMj47PFU2QURCPjs8VTkxRTc+Oy8KKwk8VTVDNTE+OzxVNUM0OD47PFU2Mzk4Pjs8VTdBOUY+OzxVNkM5Mz47PFU5Nzc0Pjs8VThGNjE+OzxVN0FBQT47LworCTxVNzE4QT47PFU5Njg4Pjs8VTdDODI+OzxVNjgxNz47PFU3RTcwPjs8VTY4NTE+OzxVOTM2Qz47PFU1MkYyPjsvCisJPFU1NDFCPjs8VTg1QUI+OzxVOEExMz47PFU3RkE0Pjs8VThFQ0Q+OzxVOTBFMT47PFU1MzY2Pjs8VTg4ODg+Oy8KKwk8VTc5NDE+OzxVNEZDMj47PFU1MEJFPjs8VTUyMTE+OzxVNTE0ND47PFU1NTUzPjs8VTU3MkQ+OzxVNzNFQT47LworCTxVNTc4Qj47PFU1OTUxPjs8VTVGNjI+OzxVNUY4ND47PFU2MDc1Pjs8VTYxNzY+OzxVNjE2Nz47PFU2MUE5PjsvCisJPFU2M0IyPjs8VTY0M0E+OzxVNjU2Qz47PFU2NjZGPjs8VTY4NDI+OzxVNkUxMz47PFU3NTY2Pjs8VTdBM0Q+Oy8KKwk8VTdDRkI+OzxVN0Q0Qz47PFU3RDk5Pjs8VTdFNEI+OzxVN0Y2Qj47PFU4MzBFPjs8VTgzNEE+OzxVODZDRD47LworCTxVOEEwOD47PFU4QTYzPjs8VThCNjY+OzxVOEVGRD47PFU5ODFBPjs8VTlEOEY+OzxVODJCOD47PFU4RkNFPjsvCisJPFU5QkU4Pjs8VTUyODc+OzxVNjIxRj47PFU2NDgzPjs8VTZGQzA+OzxVOTY5OT47PFU2ODQxPjs8VTUwOTE+Oy8KKwk8VTZCMjA+OzxVNkM3QT47PFU2RjU0Pjs8VTdBNzQ+OzxVN0Q1MD47PFU4ODQwPjs8VThBMjM+OzxVNjcwOD47LworCTxVNEVGNj47PFU1MDM5Pjs8VTUwMjY+OzxVNTA2NT47PFU1MTdDPjs8VTUyMzg+OzxVNTI2Mz47PFU1NUE3PjsvCisJPFU1NzBGPjs8VTU4MDU+OzxVNUFDQz47PFU1RUZBPjs8VTYxQjI+OzxVNjFGOD47PFU2MkYzPjs8VTYzNzI+Oy8KKwk8VTY5MUM+OzxVNkEyOT47PFU3MjdEPjs8VTcyQUM+OzxVNzMyRT47PFU3ODE0Pjs8VTc4NkY+OzxVN0Q3OT47LworCTxVNzcwQz47PFU4MEE5Pjs8VTg5OEI+OzxVOEIxOT47PFU4Q0UyPjs8VThFRDI+OzxVOTA2Mz47PFU5Mzc1PjsvCisJPFU5NjdBPjs8VTk4NTU+OzxVOUExMz47PFU5RTc4Pjs8VTUxNDM+OzxVNTM5Rj47PFU1M0IzPjs8VTVFN0I+Oy8KKwk8VTVGMjY+OzxVNkUxQj47PFU2RTkwPjs8VTczODQ+OzxVNzNGRT47PFU3RDQzPjs8VTgyMzc+OzxVOEEwMD47LworCTxVOEFGQT47PFU5NjUwPjs8VTRFNEU+OzxVNTAwQj47PFU1M0U0Pjs8VTU0N0M+OzxVNTZGQT47PFU1OUQxPjsvCisJPFU1QjY0Pjs8VTVERjE+OzxVNUVBQj47PFU1RjI3Pjs8VTYyMzg+OzxVNjU0NT47PFU2N0FGPjs8VTZFNTY+Oy8KKwk8VTcyRDA+OzxVN0NDQT47PFU4OEI0Pjs8VTgwQTE+OzxVODBFMT47PFU4M0YwPjs8VTg2NEU+OzxVOEE4Nz47LworCTxVOERFOD47PFU5MjM3Pjs8VTk2Qzc+OzxVOTg2Nz47PFU5RjEzPjs8VTRFOTQ+OzxVNEU5Mj47PFU0RjBEPjsvCisJPFU1MzQ4Pjs8VTU0NDk+OzxVNTQzRT47PFU1QTJGPjs8VTVGOEM+OzxVNUZBMT47PFU2MDlGPjs8VTY4QTc+Oy8KKwk8VTZBOEU+OzxVNzQ1QT47PFU3ODgxPjs8VThBOUU+OzxVOEFBND47PFU4Qjc3Pjs8VTkxOTA+OzxVNEU1RT47LworCTxVOUJDOT47PFU0RUE0Pjs8VTRGN0M+OzxVNEZBRj47PFU1MDE5Pjs8VTUwMTY+OzxVNTE0OT47PFU1MTZDPjsvCisJPFU1MjlGPjs8VTUyQjk+OzxVNTJGRT47PFU1MzlBPjs8VTUzRTM+OzxVNTQxMT47PFU1NDBFPjs8VTU1ODk+Oy8KKwk8VTU3NTE+OzxVNTdBMj47PFU1OTdEPjs8VTVCNTQ+OzxVNUI1RD47PFU1QjhGPjs8VTVERTU+OzxVNURFNz47LworCTxVNURGNz47PFU1RTc4Pjs8VTVFODM+OzxVNUU5QT47PFU1RUI3Pjs8VTVGMTg+OzxVNjA1Mj47PFU2MTRDPjsvCisJPFU2Mjk3Pjs8VTYyRDg+OzxVNjNBNz47PFU2NTNCPjs8VTY2MDI+OzxVNjY0Mz47PFU2NkY0Pjs8VTY3NkQ+Oy8KKwk8VTY4MjE+OzxVNjg5Nz47PFU2OUNCPjs8VTZDNUY+OzxVNkQyQT47PFU2RDY5Pjs8VTZFMkY+OzxVNkU5RD47LworCTxVNzUzMj47PFU3Njg3Pjs8VTc4NkM+OzxVN0EzRj47PFU3Q0UwPjs8VTdEMDU+OzxVN0QxOD47PFU3RDVFPjsvCisJPFU3REIxPjs8VTgwMTU+OzxVODAwMz47PFU4MEFGPjs8VTgwQjE+OzxVODE1ND47PFU4MThGPjs8VTgyMkE+Oy8KKwk8VTgzNTI+OzxVODg0Qz47PFU4ODYxPjs8VThCMUI+OzxVOENBMj47PFU4Q0ZDPjs8VTkwQ0E+OzxVOTE3NT47LworCTxVOTI3MT47PFU3ODNGPjs8VTkyRkM+OzxVOTVBND47PFU5NjREPjs8VTk4MDU+OzxVOTk5OT47PFU5QUQ4PjsvCisJPFU5RDNCPjs8VTUyNUI+OzxVNTJBQj47PFU1M0Y3Pjs8VTU0MDg+OzxVNThENT47PFU2MkY3Pjs8VTZGRTA+Oy8KKwk8VThDNkE+OzxVOEY1Rj47PFU5RUI5Pjs8VTUxNEI+OzxVNTIzQj47PFU1NDRBPjs8VTU2RkQ+OzxVN0E0MD47LworCTxVOTE3Nz47PFU5RDYwPjs8VTlFRDI+OzxVNzM0ND47PFU2RjA5Pjs8VTgxNzA+OzxVNzUxMT47PFU1RkZEPjsvCisJPFU2MERBPjs8VTlBQTg+OzxVNzJEQj47PFU4RkJDPjs8VTZCNjQ+OzxVOTgwMz47PFU0RUNBPjs8VTU2RjA+Oy8KKwk8VTU3NjQ+OzxVNThCRT47PFU1QTVBPjs8VTYwNjg+OzxVNjFDNz47PFU2NjBGPjs8VTY2MDY+OzxVNjgzOT47LworCTxVNjhCMT47PFU2REY3Pjs8VTc1RDU+OzxVN0QzQT47PFU4MjZFPjs8VTlCNDI+OzxVNEU5Qj47PFU0RjUwPjsvCisJPFU1M0M5Pjs8VTU1MDY+OzxVNUQ2Rj47PFU1REU2Pjs8VTVERUU+OzxVNjdGQj47PFU2Qzk5Pjs8VTc0NzM+Oy8KKwk8VTc4MDI+OzxVOEE1MD47PFU5Mzk2Pjs8VTg4REY+OzxVNTc1MD47PFU1RUE3Pjs8VTYzMkI+OzxVNTBCNT47LworCTxVNTBBQz47PFU1MThEPjs8VTY3MDA+OzxVNTRDOT47PFU1ODVFPjs8VTU5QkI+OzxVNUJCMD47PFU1RjY5PjsvCisJPFU2MjREPjs8VTYzQTE+OzxVNjgzRD47PFU2QjczPjs8VTZFMDg+OzxVNzA3RD47PFU5MUM3Pjs8VTcyODA+Oy8KKwk8VTc4MTU+OzxVNzgyNj47PFU3OTZEPjs8VTY1OEU+OzxVN0QzMD47PFU4M0RDPjs8VTg4QzE+OzxVOEYwOT47LworCTxVOTY5Qj47PFU1MjY0Pjs8VTU3Mjg+OzxVNjc1MD47PFU3RjZBPjs8VThDQTE+OzxVNTFCND47PFU1NzQyPjsvCisJPFU5NjJBPjs8VTU4M0E+OzxVNjk4QT47PFU4MEI0Pjs8VTU0QjI+OzxVNUQwRT47PFU1N0ZDPjs8VTc4OTU+Oy8KKwk8VTlERkE+OzxVNEY1Qz47PFU1MjRBPjs8VTU0OEI+OzxVNjQzRT47PFU2NjI4Pjs8VTY3MTQ+OzxVNjdGNT47LworCTxVN0E4ND47PFU3QjU2Pjs8VTdEMjI+OzxVOTMyRj47PFU2ODVDPjs8VTlCQUQ+OzxVN0IzOT47PFU1MzE5PjsvCisJPFU1MThBPjs8VTUyMzc+OzxVNUJERj47PFU2MkY2Pjs8VTY0QUU+OzxVNjRFNj47PFU2NzJEPjs8VTZCQkE+Oy8KKwk8VTg1QTk+OzxVOTZEMT47PFU3NjkwPjs8VTlCRDY+OzxVNjM0Qz47PFU5MzA2Pjs8VTlCQUI+OzxVNzZCRj47LworCTxVNjY1Mj47PFU0RTA5Pjs8VTUwOTg+OzxVNTNDMj47PFU1QzcxPjs8VTYwRTg+OzxVNjQ5Mj47PFU2NTYzPjsvCisJPFU2ODVGPjs8VTcxRTY+OzxVNzNDQT47PFU3NTIzPjs8VTdCOTc+OzxVN0U4Mj47PFU4Njk1Pjs8VThCODM+Oy8KKwk8VThDREI+OzxVOTE3OD47PFU5OTEwPjs8VTY1QUM+OzxVNjZBQj47PFU2QjhCPjs8VTRFRDU+OzxVNEVEND47LworCTxVNEYzQT47PFU0RjdGPjs8VTUyM0E+OzxVNTNGOD47PFU1M0YyPjs8VTU1RTM+OzxVNTZEQj47PFU1OEVCPjsvCisJPFU1OUNCPjs8VTU5Qzk+OzxVNTlGRj47PFU1QjUwPjs8VTVDNEQ+OzxVNUUwMj47PFU1RTJCPjs8VTVGRDc+Oy8KKwk8VTYwMUQ+OzxVNjMwNz47PFU2NTJGPjs8VTVCNUM+OzxVNjVBRj47PFU2NUJEPjs8VTY1RTg+OzxVNjc5RD47LworCTxVNkI2Mj47PFU2QjdCPjs8VTZDMEY+OzxVNzM0NT47PFU3OTQ5Pjs8VTc5QzE+OzxVN0NGOD47PFU3RDE5PjsvCisJPFU3RDJCPjs8VTgwQTI+OzxVODEwMj47PFU4MUYzPjs8VTg5OTY+OzxVOEE1RT47PFU4QTY5Pjs8VThBNjY+Oy8KKwk8VThBOEM+OzxVOEFFRT47PFU4Q0M3Pjs8VThDREM+OzxVOTZDQz47PFU5OEZDPjs8VTZCNkY+OzxVNEU4Qj47LworCTxVNEYzQz47PFU0RjhEPjs8VTUxNTA+OzxVNUI1Nz47PFU1QkZBPjs8VTYxNDg+OzxVNjMwMT47PFU2NjQyPjsvCisJPFU2QjIxPjs8VTZFQ0I+OzxVNkNCQj47PFU3MjNFPjs8VTc0QkQ+OzxVNzVEND47PFU3OEMxPjs8VTc5M0E+Oy8KKwk8VTgwMEM+OzxVODAzMz47PFU4MUVBPjs8VTg0OTQ+OzxVOEY5RT47PFU2QzUwPjs8VTlFN0Y+OzxVNUYwRj47LworCTxVOEI1OD47PFU5RDJCPjs8VTdBRkE+OzxVOEVGOD47PFU1QjhEPjs8VTk2RUI+OzxVNEUwMz47PFU1M0YxPjsvCisJPFU1N0Y3Pjs8VTU5MzE+OzxVNUFDOT47PFU1QkE0Pjs8VTYwODk+OzxVNkU3Rj47PFU2RjA2Pjs8VTc1QkU+Oy8KKwk8VThDRUE+OzxVNUI5Rj47PFU4NTAwPjs8VTdCRTA+OzxVNTA3Mj47PFU2N0Y0Pjs8VTgyOUQ+OzxVNUM2MT47LworCTxVODU0QT47PFU3RTFFPjs8VTgyMEU+OzxVNTE5OT47PFU1QzA0Pjs8VTYzNjg+OzxVOEQ2Nj47PFU2NTlDPjsvCisJPFU3MTZFPjs8VTc5M0U+OzxVN0QxNz47PFU4MDA1Pjs8VThCMUQ+OzxVOEVDQT47PFU5MDZFPjs8VTg2Qzc+Oy8KKwk8VTkwQUE+OzxVNTAxRj47PFU1MkZBPjs8VTVDM0E+OzxVNjc1Mz47PFU3MDdDPjs8VTcyMzU+OzxVOTE0Qz47LworCTxVOTFDOD47PFU5MzJCPjs8VTgyRTU+OzxVNUJDMj47PFU1RjMxPjs8VTYwRjk+OzxVNEUzQj47PFU1M0Q2PjsvCisJPFU1Qjg4Pjs8VTYyNEI+OzxVNjczMT47PFU2QjhBPjs8VTcyRTk+OzxVNzNFMD47PFU3QTJFPjs8VTgxNkI+Oy8KKwk8VThEQTM+OzxVOTE1Mj47PFU5OTk2Pjs8VTUxMTI+OzxVNTNENz47PFU1NDZBPjs8VTVCRkY+OzxVNjM4OD47LworCTxVNkEzOT47PFU3REFDPjs8VTk3MDA+OzxVNTZEQT47PFU1M0NFPjs8VTU0Njg+OzxVNUI5Nz47PFU1QzMxPjsvCisJPFU1RERFPjs8VTRGRUU+OzxVNjEwMT47PFU2MkZFPjs8VTZEMzI+OzxVNzlDMD47PFU3OUNCPjs8VTdENDI+Oy8KKwk8VTdFNEQ+OzxVN0ZEMj47PFU4MUVEPjs8VTgyMUY+OzxVODQ5MD47PFU4ODQ2Pjs8VTg5NzI+OzxVOEI5MD47LworCTxVOEU3ND47PFU4RjJGPjs8VTkwMzE+OzxVOTE0Qj47PFU5MTZDPjs8VTk2QzY+OzxVOTE5Qz47PFU0RUMwPjsvCisJPFU0RjRGPjs8VTUxNDU+OzxVNTM0MT47PFU1RjkzPjs8VTYyMEU+OzxVNjdEND47PFU2QzQxPjs8VTZFMEI+Oy8KKwk8VTczNjM+OzxVN0UyNj47PFU5MUNEPjs8VTkyODM+OzxVNTNEND47PFU1OTE5Pjs8VTVCQkY+OzxVNkREMT47LworCTxVNzk1RD47PFU3RTJFPjs8VTdDOUI+OzxVNTg3RT47PFU3MTlGPjs8VTUxRkE+OzxVODg1Mz47PFU4RkYwPjsvCisJPFU0RkNBPjs8VTVDRkI+OzxVNjYyNT47PFU3N0FDPjs8VTdBRTM+OzxVODIxQz47PFU5OUZGPjs8VTUxQzY+Oy8KKwk8VTVGQUE+OzxVNjVFQz47PFU2OTZGPjs8VTZCODk+OzxVNkRGMz47PFU2RTk2Pjs8VTZGNjQ+OzxVNzZGRT47LworCTxVN0QxND47PFU1REUxPjs8VTkwNzU+OzxVOTE4Nz47PFU5ODA2Pjs8VTUxRTY+OzxVNTIxRD47PFU2MjQwPjsvCisJPFU2NjkxPjs8VTY2RDk+OzxVNkUxQT47PFU1RUI2Pjs8VTdERDI+OzxVN0Y3Mj47PFU2NkY4Pjs8VTg1QUY+Oy8KKwk8VTg1Rjc+OzxVOEFGOD47PFU1MkE5Pjs8VTUzRDk+OzxVNTk3Mz47PFU1RThGPjs8VTVGOTA+OzxVNjA1NT47LworCTxVOTJFND47PFU5NjY0Pjs8VTUwQjc+OzxVNTExRj47PFU1MkREPjs8VTUzMjA+OzxVNTM0Nz47PFU1M0VDPjsvCisJPFU1NEU4Pjs8VTU1NDY+OzxVNTUzMT47PFU1NjE3Pjs8VTU5Njg+OzxVNTlCRT47PFU1QTNDPjs8VTVCQjU+Oy8KKwk8VTVDMDY+OzxVNUMwRj47PFU1QzExPjs8VTVDMUE+OzxVNUU4ND47PFU1RThBPjs8VTVFRTA+OzxVNUY3MD47LworCTxVNjI3Rj47PFU2Mjg0Pjs8VTYyREI+OzxVNjM4Qz47PFU2Mzc3Pjs8VTY2MDc+OzxVNjYwQz47PFU2NjJEPjsvCisJPFU2Njc2Pjs8VTY3N0U+OzxVNjhBMj47PFU2QTFGPjs8VTZBMzU+OzxVNkNCQz47PFU2RDg4Pjs8VTZFMDk+Oy8KKwk8VTZFNTg+OzxVNzEzQz47PFU3MTI2Pjs8VTcxNjc+OzxVNzVDNz47PFU3NzAxPjs8VTc4NUQ+OzxVNzkwMT47LworCTxVNzk2NT47PFU3OUYwPjs8VTdBRTA+OzxVN0IxMT47PFU3Q0E3Pjs8VTdEMzk+OzxVODA5Nj47PFU4M0Q2PjsvCisJPFU4NDhCPjs8VTg1NDk+OzxVODg1RD47PFU4OEYzPjs8VThBMUY+OzxVOEEzQz47PFU4QTU0Pjs8VThBNzM+Oy8KKwk8VThDNjE+OzxVOENERT47PFU5MUE0Pjs8VTkyNjY+OzxVOTM3RT47PFU5NDE4Pjs8VTk2OUM+OzxVOTc5OD47LworCTxVNEUwQT47PFU0RTA4Pjs8VTRFMUU+OzxVNEU1Nz47PFU1MTk3Pjs8VTUyNzA+OzxVNTdDRT47PFU1ODM0PjsvCisJPFU1OENDPjs8VTVCMjI+OzxVNUUzOD47PFU2MEM1Pjs8VTY0RkU+OzxVNjc2MT47PFU2NzU2Pjs8VTZENDQ+Oy8KKwk8VTcyQjY+OzxVNzU3Mz47PFU3QTYzPjs8VTg0Qjg+OzxVOEI3Mj47PFU5MUI4Pjs8VTkzMjA+OzxVNTYzMT47LworCTxVNTdGND47PFU5OEZFPjs8VTYyRUQ+OzxVNjkwRD47PFU2Qjk2Pjs8VTcxRUQ+OzxVN0U1ND47PFU4MDc3PjsvCisJPFU4MjcyPjs8VTg5RTY+OzxVOThERj47PFU4NzU1Pjs8VThGQjE+OzxVNUMzQj47PFU0RjM4Pjs8VTRGRTE+Oy8KKwk8VTRGQjU+OzxVNTUwNz47PFU1QTIwPjs8VTVCREQ+OzxVNUJFOT47PFU1RkMzPjs8VTYxNEU+OzxVNjMyRj47LworCTxVNjVCMD47PFU2NjRCPjs8VTY4RUU+OzxVNjk5Qj47PFU2RDc4Pjs8VTZERjE+OzxVNzUzMz47PFU3NUI5PjsvCisJPFU3NzFGPjs8VTc5NUU+OzxVNzlFNj47PFU3RDMzPjs8VTgxRTM+OzxVODJBRj47PFU4NUFBPjs8VTg5QUE+Oy8KKwk8VThBM0E+OzxVOEVBQj47PFU4RjlCPjs8VTkwMzI+OzxVOTFERD47PFU5NzA3Pjs8VTRFQkE+OzxVNEVDMT47LworCTxVNTIwMz47PFU1ODc1Pjs8VTU4RUM+OzxVNUMwQj47PFU3NTFBPjs8VTVDM0Q+OzxVODE0RT47PFU4QTBBPjsvCisJPFU4RkM1Pjs8VTk2NjM+OzxVOTc2RD47PFU3QjI1Pjs8VThBQ0Y+OzxVOTgwOD47PFU5MTYyPjs8VTU2RjM+Oy8KKwk8VTUzQTg+OzxVOTAxNz47PFU1NDM5Pjs8VTU3ODI+OzxVNUUyNT47PFU2M0E4Pjs8VTZDMzQ+OzxVNzA4QT47LworCTxVNzc2MT47PFU3QzhCPjs8VTdGRTA+OzxVODg3MD47PFU5MDQyPjs8VTkxNTQ+OzxVOTMxMD47PFU5MzE4PjsvCisJPFU5NjhGPjs8VTc0NUU+OzxVOUFDND47PFU1RDA3Pjs8VTVENjk+OzxVNjU3MD47PFU2N0EyPjs8VThEQTg+Oy8KKwk8VTk2REI+OzxVNjM2RT47PFU2NzQ5Pjs8VTY5MTk+OzxVODNDNT47PFU5ODE3Pjs8VTk2QzA+OzxVODhGRT47LworCTxVNkY4ND47PFU2NDdBPjs8VTVCRjg+OzxVNEUxNj47PFU3MDJDPjs8VTc1NUQ+OzxVNjYyRj47PFU1MUM0PjsvCisJPFU1MjM2Pjs8VTUyRTI+OzxVNTlEMz47PFU1RjgxPjs8VTYwMjc+OzxVNjIxMD47PFU2NTNGPjs8VTY1NzQ+Oy8KKwk8VTY2MUY+OzxVNjY3ND47PFU2OEYyPjs8VTY4MTY+OzxVNkI2Mz47PFU2RTA1Pjs8VTcyNzI+OzxVNzUxRj47LworCTxVNzZEQj47PFU3Q0JFPjs8VTgwNTY+OzxVNThGMD47PFU4OEZEPjs8VTg5N0Y+OzxVOEFBMD47PFU4QTkzPjsvCisJPFU4QUNCPjs8VTkwMUQ+OzxVOTE5Mj47PFU5NzUyPjs8VTk3NTk+OzxVNjU4OT47PFU3QTBFPjs8VTgxMDY+Oy8KKwk8VTk2QkI+OzxVNUUyRD47PFU2MERDPjs8VTYyMUE+OzxVNjVBNT47PFU2NjE0Pjs8VTY3OTA+OzxVNzdGMz47LworCTxVN0E0RD47PFU3QzREPjs8VTdFM0U+OzxVODEwQT47PFU4Q0FDPjs8VThENjQ+OzxVOERFMT47PFU4RTVGPjsvCisJPFU3OEE5Pjs8VTUyMDc+OzxVNjJEOT47PFU2M0E1Pjs8VTY0NDI+OzxVNjI5OD47PFU4QTJEPjs8VTdBODM+Oy8KKwk8VTdCQzA+OzxVOEFBQz47PFU5NkVBPjs8VTdENzY+OzxVODIwQz47PFU4NzQ5Pjs8VTRFRDk+OzxVNTE0OD47LworCTxVNTM0Mz47PFU1MzYwPjs8VTVCQTM+OzxVNUMwMj47PFU1QzE2Pjs8VTVEREQ+OzxVNjIyNj47PFU2MjQ3PjsvCisJPFU2NEIwPjs8VTY4MTM+OzxVNjgzND47PFU2Q0M5Pjs8VTZENDU+OzxVNkQxNz47PFU2N0QzPjs8VTZGNUM+Oy8KKwk8VTcxNEU+OzxVNzE3RD47PFU2NUNCPjs8VTdBN0Y+OzxVN0JBRD47PFU3RERBPjs8VTdFNEE+OzxVN0ZBOD47LworCTxVODE3QT47PFU4MjFCPjs8VTgyMzk+OzxVODVBNj47PFU4QTZFPjs8VThDQ0U+OzxVOERGNT47PFU5MDc4PjsvCisJPFU5MDc3Pjs8VTkyQUQ+OzxVOTI5MT47PFU5NTgzPjs8VTlCQUU+OzxVNTI0RD47PFU1NTg0Pjs8VTZGMzg+Oy8KKwk8VTcxMzY+OzxVNTE2OD47PFU3OTg1Pjs8VTdFNTU+OzxVODFCMz47PFU3Q0NFPjs8VTU2NEM+OzxVNTg1MT47LworCTxVNUNBOD47PFU2M0FBPjs8VTY2RkU+OzxVNjZGRD47PFU2OTVBPjs8VTcyRDk+OzxVNzU4Rj47PFU3NThFPjsvCisJPFU3OTBFPjs8VTc5NTY+OzxVNzlERj47PFU3Qzk3Pjs8VTdEMjA+OzxVN0Q0ND47PFU4NjA3Pjs8VThBMzQ+Oy8KKwk8VTk2M0I+OzxVOTA2MT47PFU5RjIwPjs8VTUwRTc+OzxVNTI3NT47PFU1M0NDPjs8VTUzRTI+OzxVNTAwOT47LworCTxVNTVBQT47PFU1OEVFPjs8VTU5NEY+OzxVNzIzRD47PFU1QjhCPjs8VTVDNjQ+OzxVNTMxRD47PFU2MEUzPjsvCisJPFU2MEYzPjs8VTYzNUM+OzxVNjM4Mz47PFU2MzNGPjs8VTYzQkI+OzxVNjRDRD47PFU2NUU5Pjs8VTY2Rjk+Oy8KKwk8VTVERTM+OzxVNjlDRD47PFU2OUZEPjs8VTZGMTU+OzxVNzFFNT47PFU0RTg5Pjs8VTc1RTk+OzxVNzZGOD47LworCTxVN0E5Mz47PFU3Q0RGPjs8VTdEQ0Y+OzxVN0Q5Qz47PFU4MDYxPjs8VTgzNDk+OzxVODM1OD47PFU4NDZDPjsvCisJPFU4NEJDPjs8VTg1RkI+OzxVODhDNT47PFU4RDcwPjs8VTkwMDE+OzxVOTA2RD47PFU5Mzk3Pjs8VTk3MUM+Oy8KKwk8VTlBMTI+OzxVNTBDRj47PFU1ODk3Pjs8VTYxOEU+OzxVODFEMz47PFU4NTM1Pjs8VThEMDg+OzxVOTAyMD47LworCTxVNEZDMz47PFU1MDc0Pjs8VTUyNDc+OzxVNTM3Mz47PFU2MDZGPjs8VTYzNDk+OzxVNjc1Rj47PFU2RTJDPjsvCisJPFU4REIzPjs8VTkwMUY+OzxVNEZENz47PFU1QzVFPjs8VThDQ0E+OzxVNjVDRj47PFU3RDlBPjs8VTUzNTI+Oy8KKwk8VTg4OTY+OzxVNTE3Nj47PFU2M0MzPjs8VTVCNTg+OzxVNUI2Qj47PFU1QzBBPjs8VTY0MEQ+OzxVNjc1MT47LworCTxVOTA1Qz47PFU0RUQ2Pjs8VTU5MUE+OzxVNTkyQT47PFU2QzcwPjs8VThBNTE+OzxVNTUzRT47PFU1ODE1PjsvCisJPFU1OUE1Pjs8VTYwRjA+OzxVNjI1Mz47PFU2N0MxPjs8VTgyMzU+OzxVNjk1NT47PFU5NjQwPjs8VTk5QzQ+Oy8KKwk8VTlBMjg+OzxVNEY1Mz47PFU1ODA2Pjs8VTVCRkU+OzxVODAxMD47PFU1Q0IxPjs8VTVFMkY+OzxVNUY4NT47LworCTxVNjAyMD47PFU2MTRCPjs8VTYyMzQ+OzxVNjZGRj47PFU2Q0YwPjs8VTZFREU+OzxVODBDRT47PFU4MTdGPjsvCisJPFU4MkQ0Pjs8VTg4OEI+OzxVOENCOD47PFU5MDAwPjs8VTkwMkU+OzxVOTY4QT47PFU5RURCPjs8VTlCREI+Oy8KKwk8VTRFRTM+OzxVNTNGMD47PFU1OTI3Pjs8VTdCMkM+OzxVOTE4RD47PFU5ODRDPjs8VTlERjk+OzxVNkVERD47LworCTxVNzAyNz47PFU1MzUzPjs8VTU1NDQ+OzxVNUI4NT47PFU2MjU4Pjs8VTYyOUU+OzxVNjJEMz47PFU2Q0EyPjsvCisJPFU2RkVGPjs8VTc0MjI+OzxVOEExNz47PFU5NDM4Pjs8VTZGQzE+OzxVOEFGRT47PFU4MzM4Pjs8VTUxRTc+Oy8KKwk8VTg2Rjg+OzxVNTNFQT47PFU1M0U5Pjs8VTRGNDY+OzxVOTA1ND47PFU4RkIwPjs8VTU5NkE+OzxVODEzMT47LworCTxVNURGRD47PFU3QUVBPjs8VThGQkY+OzxVNjhEQT47PFU4QzM3Pjs8VTcyRjg+OzxVOUM0OD47PFU2QTNEPjsvCisJPFU4QUIwPjs8VTRFMzk+OzxVNTM1OD47PFU1NjA2Pjs8VTU3NjY+OzxVNjJDNT47PFU2M0EyPjs8VTY1RTY+Oy8KKwk8VTZCNEU+OzxVNkRFMT47PFU2RTVCPjs8VTcwQUQ+OzxVNzdFRD47PFU3QUVGPjs8VTdCQUE+OzxVN0RCQj47LworCTxVODAzRD47PFU4MEM2Pjs8VTg2Q0I+OzxVOEE5NT47PFU5MzVCPjs8VTU2RTM+OzxVNThDNz47PFU1RjNFPjsvCisJPFU2NUFEPjs8VTY2OTY+OzxVNkE4MD47PFU2QkI1Pjs8VTc1Mzc+OzxVOEFDNz47PFU1MDI0Pjs8VTc3RTU+Oy8KKwk8VTU3MzA+OzxVNUYxQj47PFU2MDY1Pjs8VTY2N0E+OzxVNkM2MD47PFU3NUY0Pjs8VTdBMUE+OzxVN0Y2RT47LworCTxVODFGND47PFU4NzE4Pjs8VTkwNDU+OzxVOTlCMz47PFU3QkM5Pjs8VTc1NUM+OzxVN0FGOT47PFU3QjUxPjsvCisJPFU4NEM0Pjs8VTkwMTA+OzxVNzlFOT47PFU3QTkyPjs8VTgzMzY+OzxVNUFFMT47PFU3NzQwPjs8VTRFMkQ+Oy8KKwk8VTRFRjI+OzxVNUI5OT47PFU1RkUwPjs8VTYyQkQ+OzxVNjYzQz47PFU2N0YxPjs8VTZDRTg+OzxVODY2Qj47LworCTxVODg3Nz47PFU4QTNCPjs8VTkxNEU+OzxVOTJGMz47PFU5OUQwPjs8VTZBMTc+OzxVNzAyNj47PFU3MzJBPjsvCisJPFU4MkU3Pjs8VTg0NTc+OzxVOENBRj47PFU0RTAxPjs8VTUxNDY+OzxVNTFDQj47PFU1NThCPjs8VTVCRjU+Oy8KKwk8VTVFMTY+OzxVNUUzMz47PFU1RTgxPjs8VTVGMTQ+OzxVNUYzNT47PFU1RjZCPjs8VTVGQjQ+OzxVNjFGMj47LworCTxVNjMxMT47PFU2NkEyPjs8VTY3MUQ+OzxVNkY2RT47PFU3MjUyPjs8VTc1M0E+OzxVNzczQT47PFU4MDc0PjsvCisJPFU4MTM5Pjs8VTgxNzg+OzxVODc3Nj47PFU4QUJGPjs8VThBREM+OzxVOEQ4NT47PFU4REYzPjs8VTkyOUE+Oy8KKwk8VTk1Nzc+OzxVOTgwMj47PFU5Q0U1Pjs8VTUyQzU+OzxVNjM1Nz47PFU3NkY0Pjs8VTY3MTU+OzxVNkM4OD47LworCTxVNzNDRD47PFU4Q0MzPjs8VTkzQUU+OzxVOTY3Mz47PFU2RDI1Pjs8VTU4OUM+OzxVNjkwRT47PFU2OUNDPjsvCisJPFU4RkZEPjs8VTkzOUE+OzxVNzVEQj47PFU5MDFBPjs8VTU4NUE+OzxVNjgwMj47PFU2M0I0Pjs8VTY5RkI+Oy8KKwk8VTRGNDM+OzxVNkYyQz47PFU2N0Q4Pjs8VThGQkI+OzxVODUyNj47PFU3REI0Pjs8VTkzNTQ+OzxVNjkzRj47LworCTxVNkY3MD47PFU1NzZBPjs8VTU4Rjc+OzxVNUIyQz47PFU3RDJDPjs8VTcyMkE+OzxVNTQwQT47PFU5MUUzPjsvCisJPFU5REI0Pjs8VTRFQUQ+OzxVNEY0RT47PFU1MDVDPjs8VTUwNzU+OzxVNTI0Mz47PFU4QzlFPjs8VTU0NDg+Oy8KKwk8VTU4MjQ+OzxVNUI5QT47PFU1RTFEPjs8VTVFOTU+OzxVNUVBRD47PFU1RUY3Pjs8VTVGMUY+OzxVNjA4Qz47LworCTxVNjJCNT47PFU2MzNBPjs8VTYzRDA+OzxVNjhBRj47PFU2QzQwPjs8VTc4ODc+OzxVNzk4RT47PFU3QTBCPjsvCisJPFU3REUwPjs8VTgyNDc+OzxVOEEwMj47PFU4QUU2Pjs8VThFNDQ+OzxVOTAxMz47PFU5MEI4Pjs8VTkxMkQ+Oy8KKwk8VTkxRDg+OzxVOUYwRT47PFU2Q0U1Pjs8VTY0NTg+OzxVNjRFMj47PFU2NTc1Pjs8VTZFRjQ+OzxVNzY4ND47LworCTxVN0IxQj47PFU5MDY5Pjs8VTkzRDE+OzxVNkVCQT47PFU1NEYyPjs8VTVGQjk+OzxVNjRBND47PFU4RjREPjsvCisJPFU4RkVEPjs8VTkyNDQ+OzxVNTE3OD47PFU1ODZCPjs8VTU5Mjk+OzxVNUM1NT47PFU1RTk3Pjs8VTZERkI+Oy8KKwk8VTdFOEY+OzxVNzUxQz47PFU4Q0JDPjs8VThFRTI+OzxVOTg1Qj47PFU3MEI5Pjs8VTRGMUQ+OzxVNkJCRj47LworCTxVNkZCMT47PFU3NTMwPjs8VTk2RkI+OzxVNTE0RT47PFU1NDEwPjs8VTU4MzU+OzxVNTg1Nz47PFU1OUFDPjsvCisJPFU1QzYwPjs8VTVGOTI+OzxVNjU5Nz47PFU2NzVDPjs8VTZFMjE+OzxVNzY3Qj47PFU4M0RGPjs8VThDRUQ+Oy8KKwk8VTkwMTQ+OzxVOTBGRD47PFU5MzREPjs8VTc4MjU+OzxVNzgzQT47PFU1MkFBPjs8VTVFQTY+OzxVNTcxRj47LworCTxVNTk3ND47PFU2MDEyPjs8VTUwMTI+OzxVNTE1QT47PFU1MUFDPjs8VTUxQ0Q+OzxVNTIwMD47PFU1NTEwPjsvCisJPFU1ODU0Pjs8VTU4NTg+OzxVNTk1Nz47PFU1Qjk1Pjs8VTVDRjY+OzxVNUQ4Qj47PFU2MEJDPjs8VTYyOTU+Oy8KKwk8VTY0MkQ+OzxVNjc3MT47PFU2ODQzPjs8VTY4QkM+OzxVNjhERj47PFU3NkQ3Pjs8VTZERDg+OzxVNkU2Rj47LworCTxVNkQ5Qj47PFU3MDZGPjs8VTcxQzg+OzxVNUY1Mz47PFU3NUQ4Pjs8VTc5Nzc+OzxVN0I0OT47PFU3QjU0PjsvCisJPFU3QjUyPjs8VTdDRDY+OzxVN0Q3MT47PFU1MjMwPjs8VTg0NjM+OzxVODU2OT47PFU4NUU0Pjs8VThBMEU+Oy8KKwk8VThCMDQ+OzxVOEM0Nj47PFU4RTBGPjs8VTkwMDM+OzxVOTAwRj47PFU5NDE5Pjs8VTk2NzY+OzxVOTgyRD47LworCTxVOUEzMD47PFU5NUQ4Pjs8VTUwQ0Q+OzxVNTJENT47PFU1NDBDPjs8VTU4MDI+OzxVNUMwRT47PFU2MUE3PjsvCisJPFU2NDlFPjs8VTZEMUU+OzxVNzdCMz47PFU3QUU1Pjs8VTgwRjQ+OzxVODQwND47PFU5MDUzPjs8VTkyODU+Oy8KKwk8VTVDRTA+OzxVOUQwNz47PFU1MzNGPjs8VTVGOTc+OzxVNUZCMz47PFU2RDlDPjs8VTcyNzk+OzxVNzc2Mz47LworCTxVNzlCRj47PFU3QkU0Pjs8VTZCRDI+OzxVNzJFQz47PFU4QUFEPjs8VTY4MDM+OzxVNkE2MT47PFU1MUY4PjsvCisJPFU3QTgxPjs8VTY5MzQ+OzxVNUM0QT47PFU5Q0Y2Pjs8VTgyRUI+OzxVNUJDNT47PFU5MTQ5Pjs8VTcwMUU+Oy8KKwk8VTU2Nzg+OzxVNUM2Rj47PFU2MEM3Pjs8VTY1NjY+OzxVNkM4Qz47PFU4QzVBPjs8VTkwNDE+OzxVOTgxMz47LworCTxVNTQ1MT47PFU2NkM3Pjs8VTkyMEQ+OzxVNTk0OD47PFU5MEEzPjs8VTUxODU+OzxVNEU0RD47PFU1MUVBPjsvCisJPFU4NTk5Pjs8VThCMEU+OzxVNzA1OD47PFU2MzdBPjs8VTkzNEI+OzxVNjk2Mj47PFU5OUI0Pjs8VTdFMDQ+Oy8KKwk8VTc1Nzc+OzxVNTM1Nz47PFU2OTYwPjs8VThFREY+OzxVOTZFMz47PFU2QzVEPjs8VTRFOEM+OzxVNUMzQz47LworCTxVNUYxMD47PFU4RkU5Pjs8VTUzMDI+OzxVOENEMT47PFU4MDg5Pjs8VTg2Nzk+OzxVNUVGRj47PFU2NUU1PjsvCisJPFU0RTczPjs8VTUxNjU+OzxVNTk4Mj47PFU1QzNGPjs8VTk3RUU+OzxVNEVGQj47PFU1OThBPjs8VTVGQ0Q+Oy8KKwk8VThBOEQ+OzxVNkZFMT47PFU3OUIwPjs8VTc5NjI+OzxVNUJFNz47PFU4NDcxPjs8VTczMkI+OzxVNzFCMT47LworCTxVNUU3ND47PFU1RkY1Pjs8VTYzN0I+OzxVNjQ5QT47PFU3MUMzPjs8VTdDOTg+OzxVNEU0Mz47PFU1RUZDPjsvCisJPFU0RTRCPjs8VTU3REM+OzxVNTZBMj47PFU2MEE5Pjs8VTZGQzM+OzxVN0QwRD47PFU4MEZEPjs8VTgxMzM+Oy8KKwk8VTgxQkY+OzxVOEZCMj47PFU4OTk3Pjs8VTg2QTQ+OzxVNURGND47PFU2MjhBPjs8VTY0QUQ+OzxVODk4Nz47LworCTxVNjc3Nz47PFU2Q0UyPjs8VTZEM0U+OzxVNzQzNj47PFU3ODM0Pjs8VTVBNDY+OzxVN0Y3NT47PFU4MkFEPjsvCisJPFU5OUFDPjs8VTRGRjM+OzxVNUVDMz47PFU2MkREPjs8VTYzOTI+OzxVNjU1Nz47PFU2NzZGPjs8VTc2QzM+Oy8KKwk8VTcyNEM+OzxVODBDQz47PFU4MEJBPjs8VThGMjk+OzxVOTE0RD47PFU1MDBEPjs8VTU3Rjk+OzxVNUE5Mj47LworCTxVNjg4NT47PFU2OTczPjs8VTcxNjQ+OzxVNzJGRD47PFU4Q0I3Pjs8VTU4RjI+OzxVOENFMD47PFU5NjZBPjsvCisJPFU5MDE5Pjs8VTg3N0Y+OzxVNzlFND47PFU3N0U3Pjs8VTg0Mjk+OzxVNEYyRj47PFU1MjY1Pjs8VTUzNUE+Oy8KKwk8VTYyQ0Q+OzxVNjdDRj47PFU2Q0NBPjs8VTc2N0Q+OzxVN0I5ND47PFU3Qzk1Pjs8VTgyMzY+OzxVODU4ND47LworCTxVOEZFQj47PFU2NkREPjs8VTZGMjA+OzxVNzIwNj47PFU3RTFCPjs8VTgzQUI+OzxVOTlDMT47PFU5RUE2PjsvCisJPFU1MUZEPjs8VTdCQjE+OzxVNzg3Mj47PFU3QkI4Pjs8VTgwODc+OzxVN0I0OD47PFU2QUU4Pjs8VTVFNjE+Oy8KKwk8VTgwOEM+OzxVNzU1MT47PFU3NTYwPjs8VTUxNkI+OzxVOTI2Mj47PFU2RThDPjs8VTc2N0E+OzxVOTE5Nz47LworCTxVOUFFQT47PFU0RjEwPjs8VTdGNzA+OzxVNjI5Qz47PFU3QjRGPjs8VTk1QTU+OzxVOUNFOT47PFU1NjdBPjsvCisJPFU1ODU5Pjs8VTg2RTQ+OzxVOTZCQz47PFU0RjM0Pjs8VTUyMjQ+OzxVNTM0QT47PFU1M0NEPjs8VTUzREI+Oy8KKwk8VTVFMDY+OzxVNjQyQz47PFU2NTkxPjs8VTY3N0Y+OzxVNkMzRT47PFU2QzRFPjs8VTcyNDg+OzxVNzJBRj47LworCTxVNzNFRD47PFU3NTU0Pjs8VTdFNDE+OzxVODIyQz47PFU4NUU5Pjs8VThDQTk+OzxVN0JDND47PFU5MUM2PjsvCisJPFU3MTY5Pjs8VTk4MTI+OzxVOThFRj47PFU2MzNEPjs8VTY2Njk+OzxVNzU2QT47PFU3NkU0Pjs8VTc4RDA+Oy8KKwk8VTg1NDM+OzxVODZFRT47PFU1MzJBPjs8VTUzNTE+OzxVNTQyNj47PFU1OTgzPjs8VTVFODc+OzxVNUY3Qz47LworCTxVNjBCMj47PFU2MjQ5Pjs8VTYyNzk+OzxVNjJBQj47PFU2NTkwPjs8VTZCRDQ+OzxVNkNDQz47PFU3NUIyPjsvCisJPFU3NkFFPjs8VTc4OTE+OzxVNzlEOD47PFU3RENCPjs8VTdGNzc+OzxVODBBNT47PFU4OEFCPjs8VThBQjk+Oy8KKwk8VThDQkI+OzxVOTA3Rj47PFU5NzVFPjs8VTk4REI+OzxVNkEwQj47PFU3QzM4Pjs8VTUwOTk+OzxVNUMzRT47LworCTxVNUZBRT47PFU2Nzg3Pjs8VTZCRDg+OzxVNzQzNT47PFU3NzA5Pjs8VTdGOEU+OzxVOUYzQj47PFU2N0NBPjsvCisJPFU3QTE3Pjs8VTUzMzk+OzxVNzU4Qj47PFU5QUVEPjs8VTVGNjY+OzxVODE5RD47PFU4M0YxPjs8VTgwOTg+Oy8KKwk8VTVGM0M+OzxVNUZDNT47PFU3NTYyPjs8VTdCNDY+OzxVOTAzQz47PFU2ODY3Pjs8VTU5RUI+OzxVNUE5Qj47LworCTxVN0QxMD47PFU3NjdFPjs8VThCMkM+OzxVNEZGNT47PFU1RjZBPjs8VTZBMTk+OzxVNkMzNz47PFU2RjAyPjsvCisJPFU3NEUyPjs8VTc5Njg+OzxVODg2OD47PFU4QTU1Pjs8VThDNzk+OzxVNUVERj47PFU2M0NGPjs8VTc1QzU+Oy8KKwk8VTc5RDI+OzxVODJENz47PFU5MzI4Pjs8VTkyRjI+OzxVODQ5Qz47PFU4NkVEPjs8VTlDMkQ+OzxVNTRDMT47LworCTxVNUY2Qz47PFU2NThDPjs8VTZENUM+OzxVNzAxNT47PFU4Q0E3Pjs8VThDRDM+OzxVOTgzQj47PFU2NTRGPjsvCisJPFU3NEY2Pjs8VTRFMEQ+OzxVNEVEOD47PFU1N0UwPjs8VTU5MkI+OzxVNUE2Nj47PFU1QkNDPjs8VTUxQTg+Oy8KKwk8VTVFMDM+OzxVNUU5Qz47PFU2MDE2Pjs8VTYyNzY+OzxVNjU3Nz47PFU2NUE3Pjs8VTY2NkU+OzxVNkQ2RT47LworCTxVNzIzNj47PFU3QjI2Pjs8VTgxNTA+OzxVODE5QT47PFU4Mjk5Pjs8VThCNUM+OzxVOENBMD47PFU4Q0U2PjsvCisJPFU4RDc0Pjs8VTk2MUM+OzxVOTY0ND47PFU0RkFFPjs8VTY0QUI+OzxVNkI2Nj47PFU4MjFFPjs8VTg0NjE+Oy8KKwk8VTg1NkE+OzxVOTBFOD47PFU1QzAxPjs8VTY5NTM+OzxVOThBOD47PFU4NDdBPjs8VTg1NTc+OzxVNEYwRj47LworCTxVNTI2Rj47PFU1RkE5Pjs8VTVFNDU+OzxVNjcwRD47PFU3OThGPjs8VTgxNzk+OzxVODkwNz47PFU4OTg2PjsvCisJPFU2REY1Pjs8VTVGMTc+OzxVNjI1NT47PFU2Q0I4Pjs8VTRFQ0Y+OzxVNzI2OT47PFU5QjkyPjs8VTUyMDY+Oy8KKwk8VTU0M0I+OzxVNTY3ND47PFU1OEIzPjs8VTYxQTQ+OzxVNjI2RT47PFU3MTFBPjs8VTU5NkU+OzxVN0M4OT47LworCTxVN0NERT47PFU3RDFCPjs8VTk2RjA+OzxVNjU4Nz47PFU4MDVFPjs8VTRFMTk+OzxVNEY3NT47PFU1MTc1PjsvCisJPFU1ODQwPjs8VTVFNjM+OzxVNUU3Mz47PFU1RjBBPjs8VTY3QzQ+OzxVNEUyNj47PFU4NTNEPjs8VTk1ODk+Oy8KKwk8VTk2NUI+OzxVN0M3Mz47PFU5ODAxPjs8VTUwRkI+OzxVNThDMT47PFU3NjU2Pjs8VTc4QTc+OzxVNTIyNT47LworCTxVNzdBNT47PFU4NTExPjs8VTdCODY+OzxVNTA0Rj47PFU1OTA5Pjs8VTcyNDc+OzxVN0JDNz47PFU3REU4PjsvCisJPFU4RkJBPjs8VThGRDQ+OzxVOTA0RD47PFU0RkJGPjs8VTUyQzk+OzxVNUEyOT47PFU1RjAxPjs8VTk3QUQ+Oy8KKwk8VTRGREQ+OzxVODIxNz47PFU5MkVBPjs8VTU3MDM+OzxVNjM1NT47PFU2QjY5Pjs8VTc1MkI+OzxVODhEQz47LworCTxVOEYxND47PFU3QTQyPjs8VTUyREY+OzxVNTg5Mz47PFU2MTU1Pjs8VTYyMEE+OzxVNjZBRT47PFU2QkNEPjsvCisJPFU3QzNGPjs8VTgzRTk+OzxVNTAyMz47PFU0RkY4Pjs8VTUzMDU+OzxVNTQ0Nj47PFU1ODMxPjs8VTU5NDk+Oy8KKwk8VTVCOUQ+OzxVNUNGMD47PFU1Q0VGPjs8VTVEMjk+OzxVNUU5Nj47PFU2MkIxPjs8VTYzNjc+OzxVNjUzRT47LworCTxVNjVCOT47PFU2NzBCPjs8VTZDRDU+OzxVNkNFMT47PFU3MEY5Pjs8VTc4MzI+OzxVN0UyQj47PFU4MERFPjsvCisJPFU4MkIzPjs8VTg0MEM+OzxVODRFQz47PFU4NzAyPjs8VTg5MTI+OzxVOEEyQT47PFU4QzRBPjs8VTkwQTY+Oy8KKwk8VTkyRDI+OzxVOThGRD47PFU5Q0YzPjs8VTlENkM+OzxVNEU0Rj47PFU0RUExPjs8VTUwOEQ+OzxVNTI1Nj47LworCTxVNTc0QT47PFU1OUE4Pjs8VTVFM0Q+OzxVNUZEOD47PFU1RkQ5Pjs8VTYyM0Y+OzxVNjZCND47PFU2NzFCPjsvCisJPFU2N0QwPjs8VTY4RDI+OzxVNTE5Mj47PFU3RDIxPjs8VTgwQUE+OzxVODFBOD47PFU4QjAwPjs8VThDOEM+Oy8KKwk8VThDQkY+OzxVOTI3RT47PFU5NjMyPjs8VTU0MjA+OzxVOTgyQz47PFU1MzE3Pjs8VTUwRDU+OzxVNTM1Qz47LworCTxVNThBOD47PFU2NEIyPjs8VTY3MzQ+OzxVNzI2Nz47PFU3NzY2Pjs8VTdBNDY+OzxVOTFFNj47PFU1MkMzPjsvCisJPFU2Q0ExPjs8VTZCODY+OzxVNTgwMD47PFU1RTRDPjs8VTU5NTQ+OzxVNjcyQz47PFU3RkZCPjs8VTUxRTE+Oy8KKwk8VTc2QzY+OzxVNjQ2OT47PFU3OEU4Pjs8VTlCNTQ+OzxVOUVCQj47PFU1N0NCPjs8VTU5Qjk+OzxVNjYyNz47LworCTxVNjc5QT47PFU2QkNFPjs8VTU0RTk+OzxVNjlEOT47PFU1RTU1Pjs8VTgxOUM+OzxVNjc5NT47PFU5QkFBPjsvCisJPFU2N0ZFPjs8VTlDNTI+OzxVNjg1RD47PFU0RUE2Pjs8VTRGRTM+OzxVNTNDOD47PFU2MkI5Pjs8VTY3MkI+Oy8KKwk8VTZDQUI+OzxVOEZDND47PFU0RkFEPjs8VTdFNkQ+OzxVOUVCRj47PFU0RTA3Pjs8VTYxNjI+OzxVNkU4MD47LworCTxVNkYyQj47PFU4NTEzPjs8VTU0NzM+OzxVNjcyQT47PFU5QjQ1Pjs8VTVERjM+OzxVN0I5NT47PFU1Q0FDPjsvCisJPFU1QkM2Pjs8VTg3MUM+OzxVNkU0QT47PFU4NEQxPjs8VTdBMTQ+OzxVODEwOD47PFU1OTk5Pjs8VTdDOEQ+Oy8KKwk8VTZDMTE+OzxVNzcyMD47PFU1MkQ5Pjs8VTU5MjI+OzxVNzEyMT47PFU3MjVGPjs8VTc3REI+OzxVOTcyNz47LworCTxVOUQ2MT47PFU2OTBCPjs8VTVBN0Y+OzxVNUExOD47PFU1MUE1Pjs8VTU0MEQ+OzxVNTQ3RD47PFU2NjBFPjsvCisJPFU3NkRGPjs8VThGRjc+OzxVOTI5OD47PFU5Q0Y0Pjs8VTU5RUE+OzxVNzI1RD47PFU2RUM1Pjs8VTUxNEQ+Oy8KKwk8VTY4Qzk+OzxVN0RCRj47PFU3REVDPjs8VTk3NjI+OzxVOUVCQT47PFU2NDc4Pjs8VTZBMjE+OzxVODMwMj47LworCTxVNTk4ND47PFU1QjVGPjs8VTZCREI+OzxVNzMxQj47PFU3NkYyPjs8VTdEQjI+OzxVODAxNz47PFU4NDk5PjsvCisJPFU1MTMyPjs8VTY3Mjg+OzxVOUVEOT47PFU3NkVFPjs8VTY3NjI+OzxVNTJGRj47PFU5OTA1Pjs8VTVDMjQ+Oy8KKwk8VTYyM0I+OzxVN0M3RT47PFU4Q0IwPjs8VTU1NEY+OzxVNjBCNj47PFU3RDBCPjs8VTk1ODA+OzxVNTMwMT47LworCTxVNEU1Rj47PFU1MUI2Pjs8VTU5MUM+OzxVNzIzQT47PFU4MDM2Pjs8VTkxQ0U+OzxVNUYyNT47PFU3N0UyPjsvCisJPFU1Mzg0Pjs8VTVGNzk+OzxVN0QwND47PFU4NUFDPjs8VThBMzM+OzxVOEU4RD47PFU5NzU2Pjs8VTY3RjM+Oy8KKwk8VTg1QUU+OzxVOTQ1Mz47PFU2MTA5Pjs8VTYxMDg+OzxVNkNCOT47PFU3NjUyPjs8VThBRUQ+OzxVOEYzOD47LworCTxVNTUyRj47PFU0RjUxPjs8VTUxMkE+OzxVNTJDNz47PFU1M0NCPjs8VTVCQTU+OzxVNUU3RD47PFU2MEEwPjsvCisJPFU2MTgyPjs8VTYzRDY+OzxVNjcwOT47PFU2N0RBPjs8VTZFNjc+OzxVNkQ4Qz47PFU3MzM2Pjs8VTczMzc+Oy8KKwk8VTc1MzE+OzxVNzk1MD47PFU4OEQ1Pjs8VThBOTg+OzxVOTA0QT47PFU5MDkxPjs8VTkwRjU+OzxVOTZDND47LworCTxVODc4RD47PFU1OTE1Pjs8VTRFODg+OzxVNEY1OT47PFU0RTBFPjs8VThBODk+OzxVOEYzRj47PFU5ODEwPjsvCisJPFU1MEFEPjs8VTVFN0M+OzxVNTk5Nj47PFU1QkI5Pjs8VTVFQjg+OzxVNjNEQT47PFU2M0ZBPjs8VTY0QzE+Oy8KKwk8VTY2REM+OzxVNjk0QT47PFU2OUQ4Pjs8VTZEMEI+OzxVNkVCNj47PFU3MTk0Pjs8VTc1Mjg+OzxVN0FBRj47LworCTxVN0Y4QT47PFU4MDAwPjs8VTg0NDk+OzxVODRDOT47PFU4OTgxPjs8VThCMjE+OzxVOEUwQT47PFU5MDY1PjsvCisJPFU5NjdEPjs8VTk5MEE+OzxVNjE3RT47PFU2MjkxPjs8VTZCMzI+OzxVNkM4Mz47PFU2RDc0Pjs8VTdGQ0M+Oy8KKwk8VTdGRkM+OzxVNkRDMD47PFU3Rjg1Pjs8VTg3QkE+OzxVODhGOD47PFU2NzY1Pjs8VTgzQjE+OzxVOTgzQz47LworCTxVOTZGNz47PFU2RDFCPjs8VTdENjE+OzxVODQzRD47PFU5MTZBPjs8VTRFNzE+OzxVNTM3NT47PFU1RDUwPjsvCisJPFU2QjA0Pjs8VTZGRUI+OzxVODVDRD47PFU4NjJEPjs8VTg5QTc+OzxVNTIyOT47PFU1NDBGPjs8VTVDNjU+Oy8KKwk8VTY3NEU+OzxVNjhBOD47PFU3NDA2Pjs8VTc0ODM+OzxVNzVFMj47PFU4OENGPjs8VTg4RTE+OzxVOTFDQz47LworCTxVOTZFMj47PFU5Njc4Pjs8VTVGOEI+OzxVNzM4Nz47PFU3QUNCPjs8VTg0NEU+OzxVNjNBMD47PFU3NTY1PjsvCisJPFU1Mjg5Pjs8VTZENDE+OzxVNkU5Qz47PFU3NDA5Pjs8VTc1NTk+OzxVNzg2Qj47PFU3QzkyPjs8VTk2ODY+Oy8KKwk8VTdBREM+OzxVOUY4RD47PFU0RkI2Pjs8VTYxNkU+OzxVNjVDNT47PFU4NjVDPjs8VTRFODY+OzxVNEVBRT47LworCTxVNTBEQT47PFU0RTIxPjs8VTUxQ0M+OzxVNUJFRT47PFU2NTk5Pjs8VTY4ODE+OzxVNkRCQz47PFU3MzFGPjsvCisJPFU3NjQyPjs8VTc3QUQ+OzxVN0ExQz47PFU3Q0U3Pjs8VTgyNkY+OzxVOEFEMj47PFU5MDdDPjs8VTkxQ0Y+Oy8KKwk8VTk2NzU+OzxVOTgxOD47PFU1MjlCPjs8VTdERDE+OzxVNTAyQj47PFU1Mzk4Pjs8VTY3OTc+OzxVNkRDQj47LworCTxVNzFEMD47PFU3NDMzPjs8VTgxRTg+OzxVOEYyQT47PFU5NkEzPjs8VTlDNTc+OzxVOUU5Rj47PFU3NDYwPjsvCisJPFU1ODQxPjs8VTZEOTk+OzxVN0QyRj47PFU5ODVFPjs8VTRFRTQ+OzxVNEYzNj47PFU0RjhCPjs8VTUxQjc+Oy8KKwk8VTUyQjE+OzxVNURCQT47PFU2MDFDPjs8VTczQjI+OzxVNzkzQz47PFU4MkQzPjs8VTkyMzQ+OzxVOTZCNz47LworCTxVOTZGNj47PFU5NzBBPjs8VTlFOTc+OzxVOUY2Mj47PFU2NkE2Pjs8VTZCNzQ+OzxVNTIxNz47PFU1MkEzPjsvCisJPFU3MEM4Pjs8VTg4QzI+OzxVNUVDOT47PFU2MDRCPjs8VTYxOTA+OzxVNkYyMz47PFU3MTQ5Pjs8VTdDM0U+Oy8KKwk8VTdERjQ+OzxVODA2Rj47PFU4NEVFPjs8VTkwMjM+OzxVOTMyQz47PFU1NDQyPjs8VTlCNkY+OzxVNkFEMz47LworCTxVNzA4OT47PFU4Q0MyPjs8VThERUY+OzxVOTczMj47PFU1MkI0Pjs8VTVBNDE+OzxVNUVDQT47PFU1RjA0PjsvCisJPFU2NzE3Pjs8VTY5N0M+OzxVNjk5ND47PFU2RDZBPjs8VTZGMEY+OzxVNzI2Mj47PFU3MkZDPjs8VTdCRUQ+Oy8KKwk8VTgwMDE+OzxVODA3RT47PFU4NzRCPjs8VTkwQ0U+OzxVNTE2RD47PFU5RTkzPjs8VTc5ODQ+OzxVODA4Qj47LworCTxVOTMzMj47PFU4QUQ2Pjs8VTUwMkQ+OzxVNTQ4Qz47PFU4QTcxPjs8VTZCNkE+OzxVOENDND47PFU4MTA3PjsvCisJPFU2MEQxPjs8VTY3QTA+OzxVOURGMj47PFU0RTk5Pjs8VTRFOTg+OzxVOUMxMD47PFU4QTZCPjs8VTg1QzE+Oy8KKwk8VTg1Njg+OzxVNjkwMD47PFU2RTdFPjs8VTc4OTc+OzxVODE1NT47PFU1RjBDPjs8VTRFMTA+OzxVNEUxNT47LworCTxVNEUyQT47PFU0RTMxPjs8VTRFMzY+OzxVNEUzQz47PFU0RTNGPjs8VTRFNDI+OzxVNEU1Nj47PFU0RTU4PjsvCisJPFU0RTgyPjs8VTRFODU+OzxVOEM2Qj47PFU0RThBPjs8VTgyMTI+OzxVNUYwRD47PFU0RThFPjs8VTRFOUU+Oy8KKwk8VTRFOUY+OzxVNEVBMD47PFU0RUEyPjs8VTRFQjA+OzxVNEVCMz47PFU0RUI2Pjs8VTRFQ0U+OzxVNEVDRD47LworCTxVNEVDND47PFU0RUM2Pjs8VTRFQzI+OzxVNEVENz47PFU0RURFPjs8VTRFRUQ+OzxVNEVERj47PFU0RUY3PjsvCisJPFU0RjA5Pjs8VTRGNUE+OzxVNEYzMD47PFU0RjVCPjs8VTRGNUQ+OzxVNEY1Nz47PFU0RjQ3Pjs8VTRGNzY+Oy8KKwk8VTRGODg+OzxVNEY4Rj47PFU0Rjk4Pjs8VTRGN0I+OzxVNEY2OT47PFU0RjcwPjs8VTRGOTE+OzxVNEY2Rj47LworCTxVNEY4Nj47PFU0Rjk2Pjs8VTUxMTg+OzxVNEZEND47PFU0RkRGPjs8VTRGQ0U+OzxVNEZEOD47PFU0RkRCPjsvCisJPFU0RkQxPjs8VTRGREE+OzxVNEZEMD47PFU0RkU0Pjs8VTRGRTU+OzxVNTAxQT47PFU1MDI4Pjs8VTUwMTQ+Oy8KKwk8VTUwMkE+OzxVNTAyNT47PFU1MDA1Pjs8VTRGMUM+OzxVNEZGNj47PFU1MDIxPjs8VTUwMjk+OzxVNTAyQz47LworCTxVNEZGRT47PFU0RkVGPjs8VTUwMTE+OzxVNTAwNj47PFU1MDQzPjs8VTUwNDc+OzxVNjcwMz47PFU1MDU1PjsvCisJPFU1MDUwPjs8VTUwNDg+OzxVNTA1QT47PFU1MDU2Pjs8VTUwNkM+OzxVNTA3OD47PFU1MDgwPjs8VTUwOUE+Oy8KKwk8VTUwODU+OzxVNTBCND47PFU1MEIyPjs8VTUwQzk+OzxVNTBDQT47PFU1MEIzPjs8VTUwQzI+OzxVNTBENj47LworCTxVNTBERT47PFU1MEU1Pjs8VTUwRUQ+OzxVNTBFMz47PFU1MEVFPjs8VTUwRjk+OzxVNTBGNT47PFU1MTA5PjsvCisJPFU1MTAxPjs8VTUxMDI+OzxVNTExNj47PFU1MTE1Pjs8VTUxMTQ+OzxVNTExQT47PFU1MTIxPjs8VTUxM0E+Oy8KKwk8VTUxMzc+OzxVNTEzQz47PFU1MTNCPjs8VTUxM0Y+OzxVNTE0MD47PFU1MTUyPjs8VTUxNEM+OzxVNTE1ND47LworCTxVNTE2Mj47PFU3QUY4Pjs8VTUxNjk+OzxVNTE2QT47PFU1MTZFPjs8VTUxODA+OzxVNTE4Mj47PFU1NkQ4PjsvCisJPFU1MThDPjs8VTUxODk+OzxVNTE4Rj47PFU1MTkxPjs8VTUxOTM+OzxVNTE5NT47PFU1MTk2Pjs8VTUxQTQ+Oy8KKwk8VTUxQTY+OzxVNTFBMj47PFU1MUE5Pjs8VTUxQUE+OzxVNTFBQj47PFU1MUIzPjs8VTUxQjE+OzxVNTFCMj47LworCTxVNTFCMD47PFU1MUI1Pjs8VTUxQkQ+OzxVNTFDNT47PFU1MUM5Pjs8VTUxREI+OzxVNTFFMD47PFU4NjU1PjsvCisJPFU1MUU5Pjs8VTUxRUQ+OzxVNTFGMD47PFU1MUY1Pjs8VTUxRkU+OzxVNTIwND47PFU1MjBCPjs8VTUyMTQ+Oy8KKwk8VTUyMEU+OzxVNTIyNz47PFU1MjJBPjs8VTUyMkU+OzxVNTIzMz47PFU1MjM5Pjs8VTUyNEY+OzxVNTI0ND47LworCTxVNTI0Qj47PFU1MjRDPjs8VTUyNUU+OzxVNTI1ND47PFU1MjZBPjs8VTUyNzQ+OzxVNTI2OT47PFU1MjczPjsvCisJPFU1MjdGPjs8VTUyN0Q+OzxVNTI4RD47PFU1Mjk0Pjs8VTUyOTI+OzxVNTI3MT47PFU1Mjg4Pjs8VTUyOTE+Oy8KKwk8VThGQTg+OzxVOEZBNz47PFU1MkFDPjs8VTUyQUQ+OzxVNTJCQz47PFU1MkI1Pjs8VTUyQzE+OzxVNTJDRD47LworCTxVNTJENz47PFU1MkRFPjs8VTUyRTM+OzxVNTJFNj47PFU5OEVEPjs8VTUyRTA+OzxVNTJGMz47PFU1MkY1PjsvCisJPFU1MkY4Pjs8VTUyRjk+OzxVNTMwNj47PFU1MzA4Pjs8VTc1Mzg+OzxVNTMwRD47PFU1MzEwPjs8VTUzMEY+Oy8KKwk8VTUzMTU+OzxVNTMxQT47PFU1MzIzPjs8VTUzMkY+OzxVNTMzMT47PFU1MzMzPjs8VTUzMzg+OzxVNTM0MD47LworCTxVNTM0Nj47PFU1MzQ1Pjs8VTRFMTc+OzxVNTM0OT47PFU1MzREPjs8VTUxRDY+OzxVNTM1RT47PFU1MzY5PjsvCisJPFU1MzZFPjs8VTU5MTg+OzxVNTM3Qj47PFU1Mzc3Pjs8VTUzODI+OzxVNTM5Nj47PFU1M0EwPjs8VTUzQTY+Oy8KKwk8VTUzQTU+OzxVNTNBRT47PFU1M0IwPjs8VTUzQjY+OzxVNTNDMz47PFU3QzEyPjs8VTk2RDk+OzxVNTNERj47LworCTxVNjZGQz47PFU3MUVFPjs8VTUzRUU+OzxVNTNFOD47PFU1M0VEPjs8VTUzRkE+OzxVNTQwMT47PFU1NDNEPjsvCisJPFU1NDQwPjs8VTU0MkM+OzxVNTQyRD47PFU1NDNDPjs8VTU0MkU+OzxVNTQzNj47PFU1NDI5Pjs8VTU0MUQ+Oy8KKwk8VTU0NEU+OzxVNTQ4Rj47PFU1NDc1Pjs8VTU0OEU+OzxVNTQ1Rj47PFU1NDcxPjs8VTU0Nzc+OzxVNTQ3MD47LworCTxVNTQ5Mj47PFU1NDdCPjs8VTU0ODA+OzxVNTQ3Nj47PFU1NDg0Pjs8VTU0OTA+OzxVNTQ4Nj47PFU1NEM3PjsvCisJPFU1NEEyPjs8VTU0Qjg+OzxVNTRBNT47PFU1NEFDPjs8VTU0QzQ+OzxVNTRDOD47PFU1NEE4Pjs8VTU0QUI+Oy8KKwk8VTU0QzI+OzxVNTRBND47PFU1NEJFPjs8VTU0QkM+OzxVNTREOD47PFU1NEU1Pjs8VTU0RTY+OzxVNTUwRj47LworCTxVNTUxND47PFU1NEZEPjs8VTU0RUU+OzxVNTRFRD47PFU1NEZBPjs8VTU0RTI+OzxVNTUzOT47PFU1NTQwPjsvCisJPFU1NTYzPjs8VTU1NEM+OzxVNTUyRT47PFU1NTVDPjs8VTU1NDU+OzxVNTU1Nj47PFU1NTU3Pjs8VTU1Mzg+Oy8KKwk8VTU1MzM+OzxVNTU1RD47PFU1NTk5Pjs8VTU1ODA+OzxVNTRBRj47PFU1NThBPjs8VTU1OUY+OzxVNTU3Qj47LworCTxVNTU3RT47PFU1NTk4Pjs8VTU1OUU+OzxVNTVBRT47PFU1NTdDPjs8VTU1ODM+OzxVNTVBOT47PFU1NTg3PjsvCisJPFU1NUE4Pjs8VTU1REE+OzxVNTVDNT47PFU1NURGPjs8VTU1QzQ+OzxVNTVEQz47PFU1NUU0Pjs8VTU1RDQ+Oy8KKwk8VTU2MTQ+OzxVNTVGNz47PFU1NjE2Pjs8VTU1RkU+OzxVNTVGRD47PFU1NjFCPjs8VTU1Rjk+OzxVNTY0RT47LworCTxVNTY1MD47PFU3MURGPjs8VTU2MzQ+OzxVNTYzNj47PFU1NjMyPjs8VTU2Mzg+OzxVNTY2Qj47PFU1NjY0PjsvCisJPFU1NjJGPjs8VTU2NkM+OzxVNTY2QT47PFU1Njg2Pjs8VTU2ODA+OzxVNTY4QT47PFU1NkEwPjs8VTU2OTQ+Oy8KKwk8VTU2OEY+OzxVNTZBNT47PFU1NkFFPjs8VTU2QjY+OzxVNTZCND47PFU1NkMyPjs8VTU2QkM+OzxVNTZDMT47LworCTxVNTZDMz47PFU1NkMwPjs8VTU2Qzg+OzxVNTZDRT47PFU1NkQxPjs8VTU2RDM+OzxVNTZENz47PFU1NkVFPjsvCisJPFU1NkY5Pjs8VTU3MDA+OzxVNTZGRj47PFU1NzA0Pjs8VTU3MDk+OzxVNTcwOD47PFU1NzBCPjs8VTU3MEQ+Oy8KKwk8VTU3MTM+OzxVNTcxOD47PFU1NzE2Pjs8VTU1Qzc+OzxVNTcxQz47PFU1NzI2Pjs8VTU3Mzc+OzxVNTczOD47LworCTxVNTc0RT47PFU1NzNCPjs8VTU3NDA+OzxVNTc0Rj47PFU1NzY5Pjs8VTU3QzA+OzxVNTc4OD47PFU1NzYxPjsvCisJPFU1NzdGPjs8VTU3ODk+OzxVNTc5Mz47PFU1N0EwPjs8VTU3QjM+OzxVNTdBND47PFU1N0FBPjs8VTU3QjA+Oy8KKwk8VTU3QzM+OzxVNTdDNj47PFU1N0Q0Pjs8VTU3RDI+OzxVNTdEMz47PFU1ODBBPjs8VTU3RDY+OzxVNTdFMz47LworCTxVNTgwQj47PFU1ODE5Pjs8VTU4MUQ+OzxVNTg3Mj47PFU1ODIxPjs8VTU4NjI+OzxVNTg0Qj47PFU1ODcwPjsvCisJPFU2QkMwPjs8VTU4NTI+OzxVNTgzRD47PFU1ODc5Pjs8VTU4ODU+OzxVNThCOT47PFU1ODlGPjs8VTU4QUI+Oy8KKwk8VTU4QkE+OzxVNThERT47PFU1OEJCPjs8VTU4Qjg+OzxVNThBRT47PFU1OEM1Pjs8VTU4RDM+OzxVNThEMT47LworCTxVNThENz47PFU1OEQ5Pjs8VTU4RDg+OzxVNThFNT47PFU1OERDPjs8VTU4RTQ+OzxVNThERj47PFU1OEVGPjsvCisJPFU1OEZBPjs8VTU4Rjk+OzxVNThGQj47PFU1OEZDPjs8VTU4RkQ+OzxVNTkwMj47PFU1OTBBPjs8VTU5MTA+Oy8KKwk8VTU5MUI+OzxVNjhBNj47PFU1OTI1Pjs8VTU5MkM+OzxVNTkyRD47PFU1OTMyPjs8VTU5Mzg+OzxVNTkzRT47LworCTxVN0FEMj47PFU1OTU1Pjs8VTU5NTA+OzxVNTk0RT47PFU1OTVBPjs8VTU5NTg+OzxVNTk2Mj47PFU1OTYwPjsvCisJPFU1OTY3Pjs8VTU5NkM+OzxVNTk2OT47PFU1OTc4Pjs8VTU5ODE+OzxVNTk5RD47PFU0RjVFPjs8VTRGQUI+Oy8KKwk8VTU5QTM+OzxVNTlCMj47PFU1OUM2Pjs8VTU5RTg+OzxVNTlEQz47PFU1OThEPjs8VTU5RDk+OzxVNTlEQT47LworCTxVNUEyNT47PFU1QTFGPjs8VTVBMTE+OzxVNUExQz47PFU1QTA5Pjs8VTVBMUE+OzxVNUE0MD47PFU1QTZDPjsvCisJPFU1QTQ5Pjs8VTVBMzU+OzxVNUEzNj47PFU1QTYyPjs8VTVBNkE+OzxVNUE5QT47PFU1QUJDPjs8VTVBQkU+Oy8KKwk8VTVBQ0I+OzxVNUFDMj47PFU1QUJEPjs8VTVBRTM+OzxVNUFENz47PFU1QUU2Pjs8VTVBRTk+OzxVNUFENj47LworCTxVNUFGQT47PFU1QUZCPjs8VTVCMEM+OzxVNUIwQj47PFU1QjE2Pjs8VTVCMzI+OzxVNUFEMD47PFU1QjJBPjsvCisJPFU1QjM2Pjs8VTVCM0U+OzxVNUI0Mz47PFU1QjQ1Pjs8VTVCNDA+OzxVNUI1MT47PFU1QjU1Pjs8VTVCNUE+Oy8KKwk8VTVCNUI+OzxVNUI2NT47PFU1QjY5Pjs8VTVCNzA+OzxVNUI3Mz47PFU1Qjc1Pjs8VTVCNzg+OzxVNjU4OD47LworCTxVNUI3QT47PFU1QjgwPjs8VTVCODM+OzxVNUJBNj47PFU1QkI4Pjs8VTVCQzM+OzxVNUJDNz47PFU1QkM5PjsvCisJPFU1QkQ0Pjs8VTVCRDA+OzxVNUJFND47PFU1QkU2Pjs8VTVCRTI+OzxVNUJERT47PFU1QkU1Pjs8VTVCRUI+Oy8KKwk8VTVCRjA+OzxVNUJGNj47PFU1QkYzPjs8VTVDMDU+OzxVNUMwNz47PFU1QzA4Pjs8VTVDMEQ+OzxVNUMxMz47LworCTxVNUMyMD47PFU1QzIyPjs8VTVDMjg+OzxVNUMzOD47PFU1QzM5Pjs8VTVDNDE+OzxVNUM0Nj47PFU1QzRFPjsvCisJPFU1QzUzPjs8VTVDNTA+OzxVNUM0Rj47PFU1QjcxPjs8VTVDNkM+OzxVNUM2RT47PFU0RTYyPjs8VTVDNzY+Oy8KKwk8VTVDNzk+OzxVNUM4Qz47PFU1QzkxPjs8VTVDOTQ+OzxVNTk5Qj47PFU1Q0FCPjs8VTVDQkI+OzxVNUNCNj47LworCTxVNUNCQz47PFU1Q0I3Pjs8VTVDQzU+OzxVNUNCRT47PFU1Q0M3Pjs8VTVDRDk+OzxVNUNFOT47PFU1Q0ZEPjsvCisJPFU1Q0ZBPjs8VTVDRUQ+OzxVNUQ4Qz47PFU1Q0VBPjs8VTVEMEI+OzxVNUQxNT47PFU1RDE3Pjs8VTVENUM+Oy8KKwk8VTVEMUY+OzxVNUQxQj47PFU1RDExPjs8VTVEMTQ+OzxVNUQyMj47PFU1RDFBPjs8VTVEMTk+OzxVNUQxOD47LworCTxVNUQ0Qz47PFU1RDUyPjs8VTVENEU+OzxVNUQ0Qj47PFU1RDZDPjs8VTVENzM+OzxVNUQ3Nj47PFU1RDg3PjsvCisJPFU1RDg0Pjs8VTVEODI+OzxVNURBMj47PFU1RDlEPjs8VTVEQUM+OzxVNURBRT47PFU1REJEPjs8VTVEOTA+Oy8KKwk8VTVEQjc+OzxVNURCQz47PFU1REM5Pjs8VTVEQ0Q+OzxVNUREMz47PFU1REQyPjs8VTVERDY+OzxVNUREQj47LworCTxVNURFQj47PFU1REYyPjs8VTVERjU+OzxVNUUwQj47PFU1RTFBPjs8VTVFMTk+OzxVNUUxMT47PFU1RTFCPjsvCisJPFU1RTM2Pjs8VTVFMzc+OzxVNUU0ND47PFU1RTQzPjs8VTVFNDA+OzxVNUU0RT47PFU1RTU3Pjs8VTVFNTQ+Oy8KKwk8VTVFNUY+OzxVNUU2Mj47PFU1RTY0Pjs8VTVFNDc+OzxVNUU3NT47PFU1RTc2Pjs8VTVFN0E+OzxVOUVCQz47LworCTxVNUU3Rj47PFU1RUEwPjs8VTVFQzE+OzxVNUVDMj47PFU1RUM4Pjs8VTVFRDA+OzxVNUVDRj47PFU1RUQ2PjsvCisJPFU1RUUzPjs8VTVFREQ+OzxVNUVEQT47PFU1RURCPjs8VTVFRTI+OzxVNUVFMT47PFU1RUU4Pjs8VTVFRTk+Oy8KKwk8VTVFRUM+OzxVNUVGMT47PFU1RUYzPjs8VTVFRjA+OzxVNUVGND47PFU1RUY4Pjs8VTVFRkU+OzxVNUYwMz47LworCTxVNUYwOT47PFU1RjVEPjs8VTVGNUM+OzxVNUYwQj47PFU1RjExPjs8VTVGMTY+OzxVNUYyOT47PFU1RjJEPjsvCisJPFU1RjM4Pjs8VTVGNDE+OzxVNUY0OD47PFU1RjRDPjs8VTVGNEU+OzxVNUYyRj47PFU1RjUxPjs8VTVGNTY+Oy8KKwk8VTVGNTc+OzxVNUY1OT47PFU1RjYxPjs8VTVGNkQ+OzxVNUY3Mz47PFU1Rjc3Pjs8VTVGODM+OzxVNUY4Mj47LworCTxVNUY3Rj47PFU1RjhBPjs8VTVGODg+OzxVNUY5MT47PFU1Rjg3Pjs8VTVGOUU+OzxVNUY5OT47PFU1Rjk4PjsvCisJPFU1RkEwPjs8VTVGQTg+OzxVNUZBRD47PFU1RkJDPjs8VTVGRDY+OzxVNUZGQj47PFU1RkU0Pjs8VTVGRjg+Oy8KKwk8VTVGRjE+OzxVNUZERD47PFU2MEIzPjs8VTVGRkY+OzxVNjAyMT47PFU2MDYwPjs8VTYwMTk+OzxVNjAxMD47LworCTxVNjAyOT47PFU2MDBFPjs8VTYwMzE+OzxVNjAxQj47PFU2MDE1Pjs8VTYwMkI+OzxVNjAyNj47PFU2MDBGPjsvCisJPFU2MDNBPjs8VTYwNUE+OzxVNjA0MT47PFU2MDZBPjs8VTYwNzc+OzxVNjA1Rj47PFU2MDRBPjs8VTYwNDY+Oy8KKwk8VTYwNEQ+OzxVNjA2Mz47PFU2MDQzPjs8VTYwNjQ+OzxVNjA0Mj47PFU2MDZDPjs8VTYwNkI+OzxVNjA1OT47LworCTxVNjA4MT47PFU2MDhEPjs8VTYwRTc+OzxVNjA4Mz47PFU2MDlBPjs8VTYwODQ+OzxVNjA5Qj47PFU2MDk2PjsvCisJPFU2MDk3Pjs8VTYwOTI+OzxVNjBBNz47PFU2MDhCPjs8VTYwRTE+OzxVNjBCOD47PFU2MEUwPjs8VTYwRDM+Oy8KKwk8VTYwQjQ+OzxVNUZGMD47PFU2MEJEPjs8VTYwQzY+OzxVNjBCNT47PFU2MEQ4Pjs8VTYxNEQ+OzxVNjExNT47LworCTxVNjEwNj47PFU2MEY2Pjs8VTYwRjc+OzxVNjEwMD47PFU2MEY0Pjs8VTYwRkE+OzxVNjEwMz47PFU2MTIxPjsvCisJPFU2MEZCPjs8VTYwRjE+OzxVNjEwRD47PFU2MTBFPjs8VTYxNDc+OzxVNjEzRT47PFU2MTI4Pjs8VTYxMjc+Oy8KKwk8VTYxNEE+OzxVNjEzRj47PFU2MTNDPjs8VTYxMkM+OzxVNjEzND47PFU2MTNEPjs8VTYxNDI+OzxVNjE0ND47LworCTxVNjE3Mz47PFU2MTc3Pjs8VTYxNTg+OzxVNjE1OT47PFU2MTVBPjs8VTYxNkI+OzxVNjE3ND47PFU2MTZGPjsvCisJPFU2MTY1Pjs8VTYxNzE+OzxVNjE1Rj47PFU2MTVEPjs8VTYxNTM+OzxVNjE3NT47PFU2MTk5Pjs8VTYxOTY+Oy8KKwk8VTYxODc+OzxVNjFBQz47PFU2MTk0Pjs8VTYxOUE+OzxVNjE4QT47PFU2MTkxPjs8VTYxQUI+OzxVNjFBRT47LworCTxVNjFDQz47PFU2MUNBPjs8VTYxQzk+OzxVNjFGNz47PFU2MUM4Pjs8VTYxQzM+OzxVNjFDNj47PFU2MUJBPjsvCisJPFU2MUNCPjs8VTdGNzk+OzxVNjFDRD47PFU2MUU2Pjs8VTYxRTM+OzxVNjFGNj47PFU2MUZBPjs8VTYxRjQ+Oy8KKwk8VTYxRkY+OzxVNjFGRD47PFU2MUZDPjs8VTYxRkU+OzxVNjIwMD47PFU2MjA4Pjs8VTYyMDk+OzxVNjIwRD47LworCTxVNjIwQz47PFU2MjE0Pjs8VTYyMUI+OzxVNjIxRT47PFU2MjIxPjs8VTYyMkE+OzxVNjIyRT47PFU2MjMwPjsvCisJPFU2MjMyPjs8VTYyMzM+OzxVNjI0MT47PFU2MjRFPjs8VTYyNUU+OzxVNjI2Mz47PFU2MjVCPjs8VTYyNjA+Oy8KKwk8VTYyNjg+OzxVNjI3Qz47PFU2MjgyPjs8VTYyODk+OzxVNjI3RT47PFU2MjkyPjs8VTYyOTM+OzxVNjI5Nj47LworCTxVNjJEND47PFU2MjgzPjs8VTYyOTQ+OzxVNjJENz47PFU2MkQxPjs8VTYyQkI+OzxVNjJDRj47PFU2MkZGPjsvCisJPFU2MkM2Pjs8VTY0RDQ+OzxVNjJDOD47PFU2MkRDPjs8VTYyQ0M+OzxVNjJDQT47PFU2MkMyPjs8VTYyQzc+Oy8KKwk8VTYyOUI+OzxVNjJDOT47PFU2MzBDPjs8VTYyRUU+OzxVNjJGMT47PFU2MzI3Pjs8VTYzMDI+OzxVNjMwOD47LworCTxVNjJFRj47PFU2MkY1Pjs8VTYzNTA+OzxVNjMzRT47PFU2MzREPjs8VTY0MUM+OzxVNjM0Rj47PFU2Mzk2PjsvCisJPFU2MzhFPjs8VTYzODA+OzxVNjNBQj47PFU2Mzc2Pjs8VTYzQTM+OzxVNjM4Rj47PFU2Mzg5Pjs8VTYzOUY+Oy8KKwk8VTYzQjU+OzxVNjM2Qj47PFU2MzY5Pjs8VTYzQkU+OzxVNjNFOT47PFU2M0MwPjs8VTYzQzY+OzxVNjNFMz47LworCTxVNjNDOT47PFU2M0QyPjs8VTYzRjY+OzxVNjNDND47PFU2NDE2Pjs8VTY0MzQ+OzxVNjQwNj47PFU2NDEzPjsvCisJPFU2NDI2Pjs8VTY0MzY+OzxVNjUxRD47PFU2NDE3Pjs8VTY0Mjg+OzxVNjQwRj47PFU2NDY3Pjs8VTY0NkY+Oy8KKwk8VTY0NzY+OzxVNjQ0RT47PFU2NTJBPjs8VTY0OTU+OzxVNjQ5Mz47PFU2NEE1Pjs8VTY0QTk+OzxVNjQ4OD47LworCTxVNjRCQz47PFU2NERBPjs8VTY0RDI+OzxVNjRDNT47PFU2NEM3Pjs8VTY0QkI+OzxVNjREOD47PFU2NEMyPjsvCisJPFU2NEYxPjs8VTY0RTc+OzxVODIwOT47PFU2NEUwPjs8VTY0RTE+OzxVNjJBQz47PFU2NEUzPjs8VTY0RUY+Oy8KKwk8VTY1MkM+OzxVNjRGNj47PFU2NEY0Pjs8VTY0RjI+OzxVNjRGQT47PFU2NTAwPjs8VTY0RkQ+OzxVNjUxOD47LworCTxVNjUxQz47PFU2NTA1Pjs8VTY1MjQ+OzxVNjUyMz47PFU2NTJCPjs8VTY1MzQ+OzxVNjUzNT47PFU2NTM3PjsvCisJPFU2NTM2Pjs8VTY1Mzg+OzxVNzU0Qj47PFU2NTQ4Pjs8VTY1NTY+OzxVNjU1NT47PFU2NTREPjs8VTY1NTg+Oy8KKwk8VTY1NUU+OzxVNjU1RD47PFU2NTcyPjs8VTY1Nzg+OzxVNjU4Mj47PFU2NTgzPjs8VThCOEE+OzxVNjU5Qj47LworCTxVNjU5Rj47PFU2NUFCPjs8VTY1Qjc+OzxVNjVDMz47PFU2NUM2Pjs8VTY1QzE+OzxVNjVDND47PFU2NUNDPjsvCisJPFU2NUQyPjs8VTY1REI+OzxVNjVEOT47PFU2NUUwPjs8VTY1RTE+OzxVNjVGMT47PFU2NzcyPjs8VTY2MEE+Oy8KKwk8VTY2MDM+OzxVNjVGQj47PFU2NzczPjs8VTY2MzU+OzxVNjYzNj47PFU2NjM0Pjs8VTY2MUM+OzxVNjY0Rj47LworCTxVNjY0ND47PFU2NjQ5Pjs8VTY2NDE+OzxVNjY1RT47PFU2NjVEPjs8VTY2NjQ+OzxVNjY2Nz47PFU2NjY4PjsvCisJPFU2NjVGPjs8VTY2NjI+OzxVNjY3MD47PFU2NjgzPjs8VTY2ODg+OzxVNjY4RT47PFU2Njg5Pjs8VTY2ODQ+Oy8KKwk8VTY2OTg+OzxVNjY5RD47PFU2NkMxPjs8VTY2Qjk+OzxVNjZDOT47PFU2NkJFPjs8VTY2QkM+OzxVNjZDND47LworCTxVNjZCOD47PFU2NkQ2Pjs8VTY2REE+OzxVNjZFMD47PFU2NjNGPjs8VTY2RTY+OzxVNjZFOT47PFU2NkYwPjsvCisJPFU2NkY1Pjs8VTY2Rjc+OzxVNjcwRj47PFU2NzE2Pjs8VTY3MUU+OzxVNjcyNj47PFU2NzI3Pjs8VTk3Mzg+Oy8KKwk8VTY3MkU+OzxVNjczRj47PFU2NzM2Pjs8VTY3NDE+OzxVNjczOD47PFU2NzM3Pjs8VTY3NDY+OzxVNjc1RT47LworCTxVNjc2MD47PFU2NzU5Pjs8VTY3NjM+OzxVNjc2ND47PFU2Nzg5Pjs8VTY3NzA+OzxVNjdBOT47PFU2NzdDPjsvCisJPFU2NzZBPjs8VTY3OEM+OzxVNjc4Qj47PFU2N0E2Pjs8VTY3QTE+OzxVNjc4NT47PFU2N0I3Pjs8VTY3RUY+Oy8KKwk8VTY3QjQ+OzxVNjdFQz47PFU2N0IzPjs8VTY3RTk+OzxVNjdCOD47PFU2N0U0Pjs8VTY3REU+OzxVNjdERD47LworCTxVNjdFMj47PFU2N0VFPjs8VTY3Qjk+OzxVNjdDRT47PFU2N0M2Pjs8VTY3RTc+OzxVNkE5Qz47PFU2ODFFPjsvCisJPFU2ODQ2Pjs8VTY4Mjk+OzxVNjg0MD47PFU2ODREPjs8VTY4MzI+OzxVNjg0RT47PFU2OEIzPjs8VTY4MkI+Oy8KKwk8VTY4NTk+OzxVNjg2Mz47PFU2ODc3Pjs8VTY4N0Y+OzxVNjg5Rj47PFU2ODhGPjs8VTY4QUQ+OzxVNjg5ND47LworCTxVNjg5RD47PFU2ODlCPjs8VTY4ODM+OzxVNkFBRT47PFU2OEI5Pjs8VTY4NzQ+OzxVNjhCNT47PFU2OEEwPjsvCisJPFU2OEJBPjs8VTY5MEY+OzxVNjg4RD47PFU2ODdFPjs8VTY5MDE+OzxVNjhDQT47PFU2OTA4Pjs8VTY4RDg+Oy8KKwk8VTY5MjI+OzxVNjkyNj47PFU2OEUxPjs8VTY5MEM+OzxVNjhDRD47PFU2OEQ0Pjs8VTY4RTc+OzxVNjhENT47LworCTxVNjkzNj47PFU2OTEyPjs8VTY5MDQ+OzxVNjhENz47PFU2OEUzPjs8VTY5MjU+OzxVNjhGOT47PFU2OEUwPjsvCisJPFU2OEVGPjs8VTY5Mjg+OzxVNjkyQT47PFU2OTFBPjs8VTY5MjM+OzxVNjkyMT47PFU2OEM2Pjs8VTY5Nzk+Oy8KKwk8VTY5Nzc+OzxVNjk1Qz47PFU2OTc4Pjs8VTY5NkI+OzxVNjk1ND47PFU2OTdFPjs8VTY5NkU+OzxVNjkzOT47LworCTxVNjk3ND47PFU2OTNEPjs8VTY5NTk+OzxVNjkzMD47PFU2OTYxPjs8VTY5NUU+OzxVNjk1RD47PFU2OTgxPjsvCisJPFU2OTZBPjs8VTY5QjI+OzxVNjlBRT47PFU2OUQwPjs8VTY5QkY+OzxVNjlDMT47PFU2OUQzPjs8VTY5QkU+Oy8KKwk8VTY5Q0U+OzxVNUJFOD47PFU2OUNBPjs8VTY5REQ+OzxVNjlCQj47PFU2OUMzPjs8VTY5QTc+OzxVNkEyRT47LworCTxVNjk5MT47PFU2OUEwPjs8VTY5OUM+OzxVNjk5NT47PFU2OUI0Pjs8VTY5REU+OzxVNjlFOD47PFU2QTAyPjsvCisJPFU2QTFCPjs8VTY5RkY+OzxVNkIwQT47PFU2OUY5Pjs8VTY5RjI+OzxVNjlFNz47PFU2QTA1Pjs8VTY5QjE+Oy8KKwk8VTZBMUU+OzxVNjlFRD47PFU2QTE0Pjs8VTY5RUI+OzxVNkEwQT47PFU2QTEyPjs8VTZBQzE+OzxVNkEyMz47LworCTxVNkExMz47PFU2QTQ0Pjs8VTZBMEM+OzxVNkE3Mj47PFU2QTM2Pjs8VTZBNzg+OzxVNkE0Nz47PFU2QTYyPjsvCisJPFU2QTU5Pjs8VTZBNjY+OzxVNkE0OD47PFU2QTM4Pjs8VTZBMjI+OzxVNkE5MD47PFU2QThEPjs8VTZBQTA+Oy8KKwk8VTZBODQ+OzxVNkFBMj47PFU2QUEzPjs8VTZBOTc+OzxVODYxNz47PFU2QUJCPjs8VTZBQzM+OzxVNkFDMj47LworCTxVNkFCOD47PFU2QUIzPjs8VTZBQUM+OzxVNkFERT47PFU2QUQxPjs8VTZBREY+OzxVNkFBQT47PFU2QURBPjsvCisJPFU2QUVBPjs8VTZBRkI+OzxVNkIwNT47PFU4NjE2Pjs8VTZBRkE+OzxVNkIxMj47PFU2QjE2Pjs8VTlCMzE+Oy8KKwk8VTZCMUY+OzxVNkIzOD47PFU2QjM3Pjs8VTc2REM+OzxVNkIzOT47PFU5OEVFPjs8VTZCNDc+OzxVNkI0Mz47LworCTxVNkI0OT47PFU2QjUwPjs8VTZCNTk+OzxVNkI1ND47PFU2QjVCPjs8VTZCNUY+OzxVNkI2MT47PFU2Qjc4PjsvCisJPFU2Qjc5Pjs8VTZCN0Y+OzxVNkI4MD47PFU2Qjg0Pjs8VTZCODM+OzxVNkI4RD47PFU2Qjk4Pjs8VTZCOTU+Oy8KKwk8VTZCOUU+OzxVNkJBND47PFU2QkFBPjs8VTZCQUI+OzxVNkJBRj47PFU2QkIyPjs8VTZCQjE+OzxVNkJCMz47LworCTxVNkJCNz47PFU2QkJDPjs8VTZCQzY+OzxVNkJDQj47PFU2QkQzPjs8VTZCREY+OzxVNkJFQz47PFU2QkVCPjsvCisJPFU2QkYzPjs8VTZCRUY+OzxVOUVCRT47PFU2QzA4Pjs8VTZDMTM+OzxVNkMxND47PFU2QzFCPjs8VTZDMjQ+Oy8KKwk8VTZDMjM+OzxVNkM1RT47PFU2QzU1Pjs8VTZDNjI+OzxVNkM2QT47PFU2QzgyPjs8VTZDOEQ+OzxVNkM5QT47LworCTxVNkM4MT47PFU2QzlCPjs8VTZDN0U+OzxVNkM2OD47PFU2QzczPjs8VTZDOTI+OzxVNkM5MD47PFU2Q0M0PjsvCisJPFU2Q0YxPjs8VTZDRDM+OzxVNkNCRD47PFU2Q0Q3Pjs8VTZDQzU+OzxVNkNERD47PFU2Q0FFPjs8VTZDQjE+Oy8KKwk8VTZDQkU+OzxVNkNCQT47PFU2Q0RCPjs8VTZDRUY+OzxVNkNEOT47PFU2Q0VBPjs8VTZEMUY+OzxVODg0RD47LworCTxVNkQzNj47PFU2RDJCPjs8VTZEM0Q+OzxVNkQzOD47PFU2RDE5Pjs8VTZEMzU+OzxVNkQzMz47PFU2RDEyPjsvCisJPFU2RDBDPjs8VTZENjM+OzxVNkQ5Mz47PFU2RDY0Pjs8VTZENUE+OzxVNkQ3OT47PFU2RDU5Pjs8VTZEOEU+Oy8KKwk8VTZEOTU+OzxVNkZFND47PFU2RDg1Pjs8VTZERjk+OzxVNkUxNT47PFU2RTBBPjs8VTZEQjU+OzxVNkRDNz47LworCTxVNkRFNj47PFU2REI4Pjs8VTZEQzY+OzxVNkRFQz47PFU2RERFPjs8VTZEQ0M+OzxVNkRFOD47PFU2REQyPjsvCisJPFU2REM1Pjs8VTZERkE+OzxVNkREOT47PFU2REU0Pjs8VTZERDU+OzxVNkRFQT47PFU2REVFPjs8VTZFMkQ+Oy8KKwk8VTZFNkU+OzxVNkUyRT47PFU2RTE5Pjs8VTZFNzI+OzxVNkU1Rj47PFU2RTNFPjs8VTZFMjM+OzxVNkU2Qj47LworCTxVNkUyQj47PFU2RTc2Pjs8VTZFNEQ+OzxVNkUxRj47PFU2RTQzPjs8VTZFM0E+OzxVNkU0RT47PFU2RTI0PjsvCisJPFU2RUZGPjs8VTZFMUQ+OzxVNkUzOD47PFU2RTgyPjs8VTZFQUE+OzxVNkU5OD47PFU2RUM5Pjs8VTZFQjc+Oy8KKwk8VTZFRDM+OzxVNkVCRD47PFU2RUFGPjs8VTZFQzQ+OzxVNkVCMj47PFU2RUQ0Pjs8VTZFRDU+OzxVNkU4Rj47LworCTxVNkVBNT47PFU2RUMyPjs8VTZFOUY+OzxVNkY0MT47PFU2RjExPjs8VTcwNEM+OzxVNkVFQz47PFU2RUY4PjsvCisJPFU2RUZFPjs8VTZGM0Y+OzxVNkVGMj47PFU2RjMxPjs8VTZFRUY+OzxVNkYzMj47PFU2RUNDPjs8VTZGM0U+Oy8KKwk8VTZGMTM+OzxVNkVGNz47PFU2Rjg2Pjs8VTZGN0E+OzxVNkY3OD47PFU2RjgxPjs8VTZGODA+OzxVNkY2Rj47LworCTxVNkY1Qj47PFU2RkYzPjs8VTZGNkQ+OzxVNkY4Mj47PFU2RjdDPjs8VTZGNTg+OzxVNkY4RT47PFU2RjkxPjsvCisJPFU2RkMyPjs8VTZGNjY+OzxVNkZCMz47PFU2RkEzPjs8VTZGQTE+OzxVNkZBND47PFU2RkI5Pjs8VTZGQzY+Oy8KKwk8VTZGQUE+OzxVNkZERj47PFU2RkQ1Pjs8VTZGRUM+OzxVNkZEND47PFU2RkQ4Pjs8VTZGRjE+OzxVNkZFRT47LworCTxVNkZEQj47PFU3MDA5Pjs8VTcwMEI+OzxVNkZGQT47PFU3MDExPjs8VTcwMDE+OzxVNzAwRj47PFU2RkZFPjsvCisJPFU3MDFCPjs8VTcwMUE+OzxVNkY3ND47PFU3MDFEPjs8VTcwMTg+OzxVNzAxRj47PFU3MDMwPjs8VTcwM0U+Oy8KKwk8VTcwMzI+OzxVNzA1MT47PFU3MDYzPjs8VTcwOTk+OzxVNzA5Mj47PFU3MEFGPjs8VTcwRjE+OzxVNzBBQz47LworCTxVNzBCOD47PFU3MEIzPjs8VTcwQUU+OzxVNzBERj47PFU3MENCPjs8VTcwREQ+OzxVNzBEOT47PFU3MTA5PjsvCisJPFU3MEZEPjs8VTcxMUM+OzxVNzExOT47PFU3MTY1Pjs8VTcxNTU+OzxVNzE4OD47PFU3MTY2Pjs8VTcxNjI+Oy8KKwk8VTcxNEM+OzxVNzE1Nj47PFU3MTZDPjs8VTcxOEY+OzxVNzFGQj47PFU3MTg0Pjs8VTcxOTU+OzxVNzFBOD47LworCTxVNzFBQz47PFU3MUQ3Pjs8VTcxQjk+OzxVNzFCRT47PFU3MUQyPjs8VTcxQzk+OzxVNzFEND47PFU3MUNFPjsvCisJPFU3MUUwPjs8VTcxRUM+OzxVNzFFNz47PFU3MUY1Pjs8VTcxRkM+OzxVNzFGOT47PFU3MUZGPjs8VTcyMEQ+Oy8KKwk8VTcyMTA+OzxVNzIxQj47PFU3MjI4Pjs8VTcyMkQ+OzxVNzIyQz47PFU3MjMwPjs8VTcyMzI+OzxVNzIzQj47LworCTxVNzIzQz47PFU3MjNGPjs8VTcyNDA+OzxVNzI0Nj47PFU3MjRCPjs8VTcyNTg+OzxVNzI3ND47PFU3MjdFPjsvCisJPFU3MjgyPjs8VTcyODE+OzxVNzI4Nz47PFU3MjkyPjs8VTcyOTY+OzxVNzJBMj47PFU3MkE3Pjs8VTcyQjk+Oy8KKwk8VTcyQjI+OzxVNzJDMz47PFU3MkM2Pjs8VTcyQzQ+OzxVNzJDRT47PFU3MkQyPjs8VTcyRTI+OzxVNzJFMD47LworCTxVNzJFMT47PFU3MkY5Pjs8VTcyRjc+OzxVNTAwRj47PFU3MzE3Pjs8VTczMEE+OzxVNzMxQz47PFU3MzE2PjsvCisJPFU3MzFEPjs8VTczMzQ+OzxVNzMyRj47PFU3MzI5Pjs8VTczMjU+OzxVNzMzRT47PFU3MzRFPjs8VTczNEY+Oy8KKwk8VTlFRDg+OzxVNzM1Nz47PFU3MzZBPjs8VTczNjg+OzxVNzM3MD47PFU3Mzc4Pjs8VTczNzU+OzxVNzM3Qj47LworCTxVNzM3QT47PFU3M0M4Pjs8VTczQjM+OzxVNzNDRT47PFU3M0JCPjs8VTczQzA+OzxVNzNFNT47PFU3M0VFPjsvCisJPFU3M0RFPjs8VTc0QTI+OzxVNzQwNT47PFU3NDZGPjs8VTc0MjU+OzxVNzNGOD47PFU3NDMyPjs8VTc0M0E+Oy8KKwk8VTc0NTU+OzxVNzQzRj47PFU3NDVGPjs8VTc0NTk+OzxVNzQ0MT47PFU3NDVDPjs8VTc0Njk+OzxVNzQ3MD47LworCTxVNzQ2Mz47PFU3NDZBPjs8VTc0NzY+OzxVNzQ3RT47PFU3NDhCPjs8VTc0OUU+OzxVNzRBNz47PFU3NENBPjsvCisJPFU3NENGPjs8VTc0RDQ+OzxVNzNGMT47PFU3NEUwPjs8VTc0RTM+OzxVNzRFNz47PFU3NEU5Pjs8VTc0RUU+Oy8KKwk8VTc0RjI+OzxVNzRGMD47PFU3NEYxPjs8VTc0Rjg+OzxVNzRGNz47PFU3NTA0Pjs8VTc1MDM+OzxVNzUwNT47LworCTxVNzUwQz47PFU3NTBFPjs8VTc1MEQ+OzxVNzUxNT47PFU3NTEzPjs8VTc1MUU+OzxVNzUyNj47PFU3NTJDPjsvCisJPFU3NTNDPjs8VTc1NDQ+OzxVNzU0RD47PFU3NTRBPjs8VTc1NDk+OzxVNzU1Qj47PFU3NTQ2Pjs8VTc1NUE+Oy8KKwk8VTc1Njk+OzxVNzU2ND47PFU3NTY3Pjs8VTc1NkI+OzxVNzU2RD47PFU3NTc4Pjs8VTc1NzY+OzxVNzU4Nj47LworCTxVNzU4Nz47PFU3NTc0Pjs8VTc1OEE+OzxVNzU4OT47PFU3NTgyPjs8VTc1OTQ+OzxVNzU5QT47PFU3NTlEPjsvCisJPFU3NUE1Pjs8VTc1QTM+OzxVNzVDMj47PFU3NUIzPjs8VTc1QzM+OzxVNzVCNT47PFU3NUJEPjs8VTc1Qjg+Oy8KKwk8VTc1QkM+OzxVNzVCMT47PFU3NUNEPjs8VTc1Q0E+OzxVNzVEMj47PFU3NUQ5Pjs8VTc1RTM+OzxVNzVERT47LworCTxVNzVGRT47PFU3NUZGPjs8VTc1RkM+OzxVNzYwMT47PFU3NUYwPjs8VTc1RkE+OzxVNzVGMj47PFU3NUYzPjsvCisJPFU3NjBCPjs8VTc2MEQ+OzxVNzYwOT47PFU3NjFGPjs8VTc2Mjc+OzxVNzYyMD47PFU3NjIxPjs8VTc2MjI+Oy8KKwk8VTc2MjQ+OzxVNzYzND47PFU3NjMwPjs8VTc2M0I+OzxVNzY0Nz47PFU3NjQ4Pjs8VTc2NDY+OzxVNzY1Qz47LworCTxVNzY1OD47PFU3NjYxPjs8VTc2NjI+OzxVNzY2OD47PFU3NjY5Pjs8VTc2NkE+OzxVNzY2Nz47PFU3NjZDPjsvCisJPFU3NjcwPjs8VTc2NzI+OzxVNzY3Nj47PFU3Njc4Pjs8VTc2N0M+OzxVNzY4MD47PFU3NjgzPjs8VTc2ODg+Oy8KKwk8VTc2OEI+OzxVNzY4RT47PFU3Njk2Pjs8VTc2OTM+OzxVNzY5OT47PFU3NjlBPjs8VTc2QjA+OzxVNzZCND47LworCTxVNzZCOD47PFU3NkI5Pjs8VTc2QkE+OzxVNzZDMj47PFU3NkNEPjs8VTc2RDY+OzxVNzZEMj47PFU3NkRFPjsvCisJPFU3NkUxPjs8VTc2RTU+OzxVNzZFNz47PFU3NkVBPjs8VTg2MkY+OzxVNzZGQj47PFU3NzA4Pjs8VTc3MDc+Oy8KKwk8VTc3MDQ+OzxVNzcyOT47PFU3NzI0Pjs8VTc3MUU+OzxVNzcyNT47PFU3NzI2Pjs8VTc3MUI+OzxVNzczNz47LworCTxVNzczOD47PFU3NzQ3Pjs8VTc3NUE+OzxVNzc2OD47PFU3NzZCPjs8VTc3NUI+OzxVNzc2NT47PFU3NzdGPjsvCisJPFU3NzdFPjs8VTc3Nzk+OzxVNzc4RT47PFU3NzhCPjs8VTc3OTE+OzxVNzdBMD47PFU3NzlFPjs8VTc3QjA+Oy8KKwk8VTc3QjY+OzxVNzdCOT47PFU3N0JGPjs8VTc3QkM+OzxVNzdCRD47PFU3N0JCPjs8VTc3Qzc+OzxVNzdDRD47LworCTxVNzdENz47PFU3N0RBPjs8VTc3REM+OzxVNzdFMz47PFU3N0VFPjs8VTc3RkM+OzxVNzgwQz47PFU3ODEyPjsvCisJPFU3OTI2Pjs8VTc4MjA+OzxVNzkyQT47PFU3ODQ1Pjs8VTc4OEU+OzxVNzg3ND47PFU3ODg2Pjs8VTc4N0M+Oy8KKwk8VTc4OUE+OzxVNzg4Qz47PFU3OEEzPjs8VTc4QjU+OzxVNzhBQT47PFU3OEFGPjs8VTc4RDE+OzxVNzhDNj47LworCTxVNzhDQj47PFU3OEQ0Pjs8VTc4QkU+OzxVNzhCQz47PFU3OEM1Pjs8VTc4Q0E+OzxVNzhFQz47PFU3OEU3PjsvCisJPFU3OERBPjs8VTc4RkQ+OzxVNzhGND47PFU3OTA3Pjs8VTc5MTI+OzxVNzkxMT47PFU3OTE5Pjs8VTc5MkM+Oy8KKwk8VTc5MkI+OzxVNzk0MD47PFU3OTYwPjs8VTc5NTc+OzxVNzk1Rj47PFU3OTVBPjs8VTc5NTU+OzxVNzk1Mz47LworCTxVNzk3QT47PFU3OTdGPjs8VTc5OEE+OzxVNzk5RD47PFU3OUE3Pjs8VTlGNEI+OzxVNzlBQT47PFU3OUFFPjsvCisJPFU3OUIzPjs8VTc5Qjk+OzxVNzlCQT47PFU3OUM5Pjs8VTc5RDU+OzxVNzlFNz47PFU3OUVDPjs8VTc5RTE+Oy8KKwk8VTc5RTM+OzxVN0EwOD47PFU3QTBEPjs8VTdBMTg+OzxVN0ExOT47PFU3QTIwPjs8VTdBMUY+OzxVNzk4MD47LworCTxVN0EzMT47PFU3QTNCPjs8VTdBM0U+OzxVN0EzNz47PFU3QTQzPjs8VTdBNTc+OzxVN0E0OT47PFU3QTYxPjsvCisJPFU3QTYyPjs8VTdBNjk+OzxVOUY5RD47PFU3QTcwPjs8VTdBNzk+OzxVN0E3RD47PFU3QTg4Pjs8VTdBOTc+Oy8KKwk8VTdBOTU+OzxVN0E5OD47PFU3QTk2Pjs8VTdBQTk+OzxVN0FDOD47PFU3QUIwPjs8VTdBQjY+OzxVN0FDNT47LworCTxVN0FDND47PFU3QUJGPjs8VTkwODM+OzxVN0FDNz47PFU3QUNBPjs8VTdBQ0Q+OzxVN0FDRj47PFU3QUQ1PjsvCisJPFU3QUQzPjs8VTdBRDk+OzxVN0FEQT47PFU3QUREPjs8VTdBRTE+OzxVN0FFMj47PFU3QUU2Pjs8VTdBRUQ+Oy8KKwk8VTdBRjA+OzxVN0IwMj47PFU3QjBGPjs8VTdCMEE+OzxVN0IwNj47PFU3QjMzPjs8VTdCMTg+OzxVN0IxOT47LworCTxVN0IxRT47PFU3QjM1Pjs8VTdCMjg+OzxVN0IzNj47PFU3QjUwPjs8VTdCN0E+OzxVN0IwND47PFU3QjREPjsvCisJPFU3QjBCPjs8VTdCNEM+OzxVN0I0NT47PFU3Qjc1Pjs8VTdCNjU+OzxVN0I3ND47PFU3QjY3Pjs8VTdCNzA+Oy8KKwk8VTdCNzE+OzxVN0I2Qz47PFU3QjZFPjs8VTdCOUQ+OzxVN0I5OD47PFU3QjlGPjs8VTdCOEQ+OzxVN0I5Qz47LworCTxVN0I5QT47PFU3QjhCPjs8VTdCOTI+OzxVN0I4Rj47PFU3QjVEPjs8VTdCOTk+OzxVN0JDQj47PFU3QkMxPjsvCisJPFU3QkNDPjs8VTdCQ0Y+OzxVN0JCND47PFU3QkM2Pjs8VTdCREQ+OzxVN0JFOT47PFU3QzExPjs8VTdDMTQ+Oy8KKwk8VTdCRTY+OzxVN0JFNT47PFU3QzYwPjs8VTdDMDA+OzxVN0MwNz47PFU3QzEzPjs8VTdCRjM+OzxVN0JGNz47LworCTxVN0MxNz47PFU3QzBEPjs8VTdCRjY+OzxVN0MyMz47PFU3QzI3Pjs8VTdDMkE+OzxVN0MxRj47PFU3QzM3PjsvCisJPFU3QzJCPjs8VTdDM0Q+OzxVN0M0Qz47PFU3QzQzPjs8VTdDNTQ+OzxVN0M0Rj47PFU3QzQwPjs8VTdDNTA+Oy8KKwk8VTdDNTg+OzxVN0M1Rj47PFU3QzY0Pjs8VTdDNTY+OzxVN0M2NT47PFU3QzZDPjs8VTdDNzU+OzxVN0M4Mz47LworCTxVN0M5MD47PFU3Q0E0Pjs8VTdDQUQ+OzxVN0NBMj47PFU3Q0FCPjs8VTdDQTE+OzxVN0NBOD47PFU3Q0IzPjsvCisJPFU3Q0IyPjs8VTdDQjE+OzxVN0NBRT47PFU3Q0I5Pjs8VTdDQkQ+OzxVN0NDMD47PFU3Q0M1Pjs8VTdDQzI+Oy8KKwk8VTdDRDg+OzxVN0NEMj47PFU3Q0RDPjs8VTdDRTI+OzxVOUIzQj47PFU3Q0VGPjs8VTdDRjI+OzxVN0NGND47LworCTxVN0NGNj47PFU3Q0ZBPjs8VTdEMDY+OzxVN0QwMj47PFU3RDFDPjs8VTdEMTU+OzxVN0QwQT47PFU3RDQ1PjsvCisJPFU3RDRCPjs8VTdEMkU+OzxVN0QzMj47PFU3RDNGPjs8VTdEMzU+OzxVN0Q0Nj47PFU3RDczPjs8VTdENTY+Oy8KKwk8VTdENEU+OzxVN0Q3Mj47PFU3RDY4Pjs8VTdENkU+OzxVN0Q0Rj47PFU3RDYzPjs8VTdEOTM+OzxVN0Q4OT47LworCTxVN0Q1Qj47PFU3RDhGPjs8VTdEN0Q+OzxVN0Q5Qj47PFU3REJBPjs8VTdEQUU+OzxVN0RBMz47PFU3REI1PjsvCisJPFU3REM3Pjs8VTdEQkQ+OzxVN0RBQj47PFU3RTNEPjs8VTdEQTI+OzxVN0RBRj47PFU3RERDPjs8VTdEQjg+Oy8KKwk8VTdEOUY+OzxVN0RCMD47PFU3REQ4Pjs8VTdEREQ+OzxVN0RFND47PFU3RERFPjs8VTdERkI+OzxVN0RGMj47LworCTxVN0RFMT47PFU3RTA1Pjs8VTdFMEE+OzxVN0UyMz47PFU3RTIxPjs8VTdFMTI+OzxVN0UzMT47PFU3RTFGPjsvCisJPFU3RTA5Pjs8VTdFMEI+OzxVN0UyMj47PFU3RTQ2Pjs8VTdFNjY+OzxVN0UzQj47PFU3RTM1Pjs8VTdFMzk+Oy8KKwk8VTdFNDM+OzxVN0UzNz47PFU3RTMyPjs8VTdFM0E+OzxVN0U2Nz47PFU3RTVEPjs8VTdFNTY+OzxVN0U1RT47LworCTxVN0U1OT47PFU3RTVBPjs8VTdFNzk+OzxVN0U2QT47PFU3RTY5Pjs8VTdFN0M+OzxVN0U3Qj47PFU3RTgzPjsvCisJPFU3REQ1Pjs8VTdFN0Q+OzxVOEZBRT47PFU3RTdGPjs8VTdFODg+OzxVN0U4OT47PFU3RThDPjs8VTdFOTI+Oy8KKwk8VTdFOTA+OzxVN0U5Mz47PFU3RTk0Pjs8VTdFOTY+OzxVN0U4RT47PFU3RTlCPjs8VTdFOUM+OzxVN0YzOD47LworCTxVN0YzQT47PFU3RjQ1Pjs8VTdGNEM+OzxVN0Y0RD47PFU3RjRFPjs8VTdGNTA+OzxVN0Y1MT47PFU3RjU1PjsvCisJPFU3RjU0Pjs8VTdGNTg+OzxVN0Y1Rj47PFU3RjYwPjs8VTdGNjg+OzxVN0Y2OT47PFU3RjY3Pjs8VTdGNzg+Oy8KKwk8VTdGODI+OzxVN0Y4Nj47PFU3RjgzPjs8VTdGODg+OzxVN0Y4Nz47PFU3RjhDPjs8VTdGOTQ+OzxVN0Y5RT47LworCTxVN0Y5RD47PFU3RjlBPjs8VTdGQTM+OzxVN0ZBRj47PFU3RkIyPjs8VTdGQjk+OzxVN0ZBRT47PFU3RkI2PjsvCisJPFU3RkI4Pjs8VThCNzE+OzxVN0ZDNT47PFU3RkM2Pjs8VTdGQ0E+OzxVN0ZENT47PFU3RkQ0Pjs8VTdGRTE+Oy8KKwk8VTdGRTY+OzxVN0ZFOT47PFU3RkYzPjs8VTdGRjk+OzxVOThEQz47PFU4MDA2Pjs8VTgwMDQ+OzxVODAwQj47LworCTxVODAxMj47PFU4MDE4Pjs8VTgwMTk+OzxVODAxQz47PFU4MDIxPjs8VTgwMjg+OzxVODAzRj47PFU4MDNCPjsvCisJPFU4MDRBPjs8VTgwNDY+OzxVODA1Mj47PFU4MDU4Pjs8VTgwNUE+OzxVODA1Rj47PFU4MDYyPjs8VTgwNjg+Oy8KKwk8VTgwNzM+OzxVODA3Mj47PFU4MDcwPjs8VTgwNzY+OzxVODA3OT47PFU4MDdEPjs8VTgwN0Y+OzxVODA4ND47LworCTxVODA4Nj47PFU4MDg1Pjs8VTgwOUI+OzxVODA5Mz47PFU4MDlBPjs8VTgwQUQ+OzxVNTE5MD47PFU4MEFDPjsvCisJPFU4MERCPjs8VTgwRTU+OzxVODBEOT47PFU4MEREPjs8VTgwQzQ+OzxVODBEQT47PFU4MEQ2Pjs8VTgxMDk+Oy8KKwk8VTgwRUY+OzxVODBGMT47PFU4MTFCPjs8VTgxMjk+OzxVODEyMz47PFU4MTJGPjs8VTgxNEI+OzxVOTY4Qj47LworCTxVODE0Nj47PFU4MTNFPjs8VTgxNTM+OzxVODE1MT47PFU4MEZDPjs8VTgxNzE+OzxVODE2RT47PFU4MTY1PjsvCisJPFU4MTY2Pjs8VTgxNzQ+OzxVODE4Mz47PFU4MTg4Pjs8VTgxOEE+OzxVODE4MD47PFU4MTgyPjs8VTgxQTA+Oy8KKwk8VTgxOTU+OzxVODFBND47PFU4MUEzPjs8VTgxNUY+OzxVODE5Mz47PFU4MUE5Pjs8VTgxQjA+OzxVODFCNT47LworCTxVODFCRT47PFU4MUI4Pjs8VTgxQkQ+OzxVODFDMD47PFU4MUMyPjs8VTgxQkE+OzxVODFDOT47PFU4MUNEPjsvCisJPFU4MUQxPjs8VTgxRDk+OzxVODFEOD47PFU4MUM4Pjs8VTgxREE+OzxVODFERj47PFU4MUUwPjs8VTgxRTc+Oy8KKwk8VTgxRkE+OzxVODFGQj47PFU4MUZFPjs8VTgyMDE+OzxVODIwMj47PFU4MjA1Pjs8VTgyMDc+OzxVODIwQT47LworCTxVODIwRD47PFU4MjEwPjs8VTgyMTY+OzxVODIyOT47PFU4MjJCPjs8VTgyMzg+OzxVODIzMz47PFU4MjQwPjsvCisJPFU4MjU5Pjs8VTgyNTg+OzxVODI1RD47PFU4MjVBPjs8VTgyNUY+OzxVODI2ND47PFU4MjYyPjs8VTgyNjg+Oy8KKwk8VTgyNkE+OzxVODI2Qj47PFU4MjJFPjs8VTgyNzE+OzxVODI3Nz47PFU4Mjc4Pjs8VTgyN0U+OzxVODI4RD47LworCTxVODI5Mj47PFU4MkFCPjs8VTgyOUY+OzxVODJCQj47PFU4MkFDPjs8VTgyRTE+OzxVODJFMz47PFU4MkRGPjsvCisJPFU4MkQyPjs8VTgyRjQ+OzxVODJGMz47PFU4MkZBPjs8VTgzOTM+OzxVODMwMz47PFU4MkZCPjs8VTgyRjk+Oy8KKwk8VTgyREU+OzxVODMwNj47PFU4MkRDPjs8VTgzMDk+OzxVODJEOT47PFU4MzM1Pjs8VTgzMzQ+OzxVODMxNj47LworCTxVODMzMj47PFU4MzMxPjs8VTgzNDA+OzxVODMzOT47PFU4MzUwPjs8VTgzNDU+OzxVODMyRj47PFU4MzJCPjsvCisJPFU4MzE3Pjs8VTgzMTg+OzxVODM4NT47PFU4MzlBPjs8VTgzQUE+OzxVODM5Rj47PFU4M0EyPjs8VTgzOTY+Oy8KKwk8VTgzMjM+OzxVODM4RT47PFU4Mzg3Pjs8VTgzOEE+OzxVODM3Qz47PFU4M0I1Pjs8VTgzNzM+OzxVODM3NT47LworCTxVODNBMD47PFU4Mzg5Pjs8VTgzQTg+OzxVODNGND47PFU4NDEzPjs8VTgzRUI+OzxVODNDRT47PFU4M0ZEPjsvCisJPFU4NDAzPjs8VTgzRDg+OzxVODQwQj47PFU4M0MxPjs8VTgzRjc+OzxVODQwNz47PFU4M0UwPjs8VTgzRjI+Oy8KKwk8VTg0MEQ+OzxVODQyMj47PFU4NDIwPjs8VTgzQkQ+OzxVODQzOD47PFU4NTA2Pjs8VTgzRkI+OzxVODQ2RD47LworCTxVODQyQT47PFU4NDNDPjs8VTg1NUE+OzxVODQ4ND47PFU4NDc3Pjs8VTg0NkI+OzxVODRBRD47PFU4NDZFPjsvCisJPFU4NDgyPjs8VTg0Njk+OzxVODQ0Nj47PFU4NDJDPjs8VTg0NkY+OzxVODQ3OT47PFU4NDM1Pjs8VTg0Q0E+Oy8KKwk8VTg0NjI+OzxVODRCOT47PFU4NEJGPjs8VTg0OUY+OzxVODREOT47PFU4NENEPjs8VTg0QkI+OzxVODREQT47LworCTxVODREMD47PFU4NEMxPjs8VTg0QzY+OzxVODRENj47PFU4NEExPjs8VTg1MjE+OzxVODRGRj47PFU4NEY0PjsvCisJPFU4NTE3Pjs8VTg1MTg+OzxVODUyQz47PFU4NTFGPjs8VTg1MTU+OzxVODUxND47PFU4NEZDPjs8VTg1NDA+Oy8KKwk8VTg1NjM+OzxVODU1OD47PFU4NTQ4Pjs8VTg1NDE+OzxVODYwMj47PFU4NTRCPjs8VTg1NTU+OzxVODU4MD47LworCTxVODVBND47PFU4NTg4Pjs8VTg1OTE+OzxVODU4QT47PFU4NUE4Pjs8VTg1NkQ+OzxVODU5ND47PFU4NTlCPjsvCisJPFU4NUVBPjs8VTg1ODc+OzxVODU5Qz47PFU4NTc3Pjs8VTg1N0U+OzxVODU5MD47PFU4NUM5Pjs8VTg1QkE+Oy8KKwk8VTg1Q0Y+OzxVODVCOT47PFU4NUQwPjs8VTg1RDU+OzxVODVERD47PFU4NUU1Pjs8VTg1REM+OzxVODVGOT47LworCTxVODYwQT47PFU4NjEzPjs8VTg2MEI+OzxVODVGRT47PFU4NUZBPjs8VTg2MDY+OzxVODYyMj47PFU4NjFBPjsvCisJPFU4NjMwPjs8VTg2M0Y+OzxVODY0RD47PFU0RTU1Pjs8VTg2NTQ+OzxVODY1Rj47PFU4NjY3Pjs8VTg2NzE+Oy8KKwk8VTg2OTM+OzxVODZBMz47PFU4NkE5Pjs8VTg2QUE+OzxVODY4Qj47PFU4NjhDPjs8VTg2QjY+OzxVODZBRj47LworCTxVODZDND47PFU4NkM2Pjs8VTg2QjA+OzxVODZDOT47PFU4ODIzPjs8VTg2QUI+OzxVODZEND47PFU4NkRFPjsvCisJPFU4NkU5Pjs8VTg2RUM+OzxVODZERj47PFU4NkRCPjs8VTg2RUY+OzxVODcxMj47PFU4NzA2Pjs8VTg3MDg+Oy8KKwk8VTg3MDA+OzxVODcwMz47PFU4NkZCPjs8VTg3MTE+OzxVODcwOT47PFU4NzBEPjs8VTg2Rjk+OzxVODcwQT47LworCTxVODczND47PFU4NzNGPjs8VTg3Mzc+OzxVODczQj47PFU4NzI1Pjs8VTg3Mjk+OzxVODcxQT47PFU4NzYwPjsvCisJPFU4NzVGPjs8VTg3Nzg+OzxVODc0Qz47PFU4NzRFPjs8VTg3NzQ+OzxVODc1Nz47PFU4NzY4Pjs8VTg3NkU+Oy8KKwk8VTg3NTk+OzxVODc1Mz47PFU4NzYzPjs8VTg3NkE+OzxVODgwNT47PFU4N0EyPjs8VTg3OUY+OzxVODc4Mj47LworCTxVODdBRj47PFU4N0NCPjs8VTg3QkQ+OzxVODdDMD47PFU4N0QwPjs8VTk2RDY+OzxVODdBQj47PFU4N0M0PjsvCisJPFU4N0IzPjs8VTg3Qzc+OzxVODdDNj47PFU4N0JCPjs8VTg3RUY+OzxVODdGMj47PFU4N0UwPjs8VTg4MEY+Oy8KKwk8VTg4MEQ+OzxVODdGRT47PFU4N0Y2Pjs8VTg3Rjc+OzxVODgwRT47PFU4N0QyPjs8VTg4MTE+OzxVODgxNj47LworCTxVODgxNT47PFU4ODIyPjs8VTg4MjE+OzxVODgzMT47PFU4ODM2Pjs8VTg4Mzk+OzxVODgyNz47PFU4ODNCPjsvCisJPFU4ODQ0Pjs8VTg4NDI+OzxVODg1Mj47PFU4ODU5Pjs8VTg4NUU+OzxVODg2Mj47PFU4ODZCPjs8VTg4ODE+Oy8KKwk8VTg4N0U+OzxVODg5RT47PFU4ODc1Pjs8VTg4N0Q+OzxVODhCNT47PFU4ODcyPjs8VTg4ODI+OzxVODg5Nz47LworCTxVODg5Mj47PFU4OEFFPjs8VTg4OTk+OzxVODhBMj47PFU4ODhEPjs8VTg4QTQ+OzxVODhCMD47PFU4OEJGPjsvCisJPFU4OEIxPjs8VTg4QzM+OzxVODhDND47PFU4OEQ0Pjs8VTg4RDg+OzxVODhEOT47PFU4OEREPjs8VTg4Rjk+Oy8KKwk8VTg5MDI+OzxVODhGQz47PFU4OEY0Pjs8VTg4RTg+OzxVODhGMj47PFU4OTA0Pjs8VTg5MEM+OzxVODkwQT47LworCTxVODkxMz47PFU4OTQzPjs8VTg5MUU+OzxVODkyNT47PFU4OTJBPjs8VTg5MkI+OzxVODk0MT47PFU4OTQ0PjsvCisJPFU4OTNCPjs8VTg5MzY+OzxVODkzOD47PFU4OTRDPjs8VTg5MUQ+OzxVODk2MD47PFU4OTVFPjs8VTg5NjY+Oy8KKwk8VTg5NjQ+OzxVODk2RD47PFU4OTZBPjs8VTg5NkY+OzxVODk3ND47PFU4OTc3Pjs8VTg5N0U+OzxVODk4Mz47LworCTxVODk4OD47PFU4OThBPjs8VTg5OTM+OzxVODk5OD47PFU4OUExPjs8VTg5QTk+OzxVODlBNj47PFU4OUFDPjsvCisJPFU4OUFGPjs8VTg5QjI+OzxVODlCQT47PFU4OUJEPjs8VTg5QkY+OzxVODlDMD47PFU4OURBPjs8VTg5REM+Oy8KKwk8VTg5REQ+OzxVODlFNz47PFU4OUY0Pjs8VTg5Rjg+OzxVOEEwMz47PFU4QTE2Pjs8VThBMTA+OzxVOEEwQz47LworCTxVOEExQj47PFU4QTFEPjs8VThBMjU+OzxVOEEzNj47PFU4QTQxPjs8VThBNUI+OzxVOEE1Mj47PFU4QTQ2PjsvCisJPFU4QTQ4Pjs8VThBN0M+OzxVOEE2RD47PFU4QTZDPjs8VThBNjI+OzxVOEE4NT47PFU4QTgyPjs8VThBODQ+Oy8KKwk8VThBQTg+OzxVOEFBMT47PFU4QTkxPjs8VThBQTU+OzxVOEFBNj47PFU4QTlBPjs8VThBQTM+OzxVOEFDND47LworCTxVOEFDRD47PFU4QUMyPjs8VThBREE+OzxVOEFFQj47PFU4QUYzPjs8VThBRTc+OzxVOEFFND47PFU4QUYxPjsvCisJPFU4QjE0Pjs8VThBRTA+OzxVOEFFMj47PFU4QUY3Pjs8VThBREU+OzxVOEFEQj47PFU4QjBDPjs8VThCMDc+Oy8KKwk8VThCMUE+OzxVOEFFMT47PFU4QjE2Pjs8VThCMTA+OzxVOEIxNz47PFU4QjIwPjs8VThCMzM+OzxVOTdBQj47LworCTxVOEIyNj47PFU4QjJCPjs8VThCM0U+OzxVOEIyOD47PFU4QjQxPjs8VThCNEM+OzxVOEI0Rj47PFU4QjRFPjsvCisJPFU4QjQ5Pjs8VThCNTY+OzxVOEI1Qj47PFU4QjVBPjs8VThCNkI+OzxVOEI1Rj47PFU4QjZDPjs8VThCNkY+Oy8KKwk8VThCNzQ+OzxVOEI3RD47PFU4QjgwPjs8VThCOEM+OzxVOEI4RT47PFU4QjkyPjs8VThCOTM+OzxVOEI5Nj47LworCTxVOEI5OT47PFU4QjlBPjs8VThDM0E+OzxVOEM0MT47PFU4QzNGPjs8VThDNDg+OzxVOEM0Qz47PFU4QzRFPjsvCisJPFU4QzUwPjs8VThDNTU+OzxVOEM2Mj47PFU4QzZDPjs8VThDNzg+OzxVOEM3QT47PFU4QzgyPjs8VThDODk+Oy8KKwk8VThDODU+OzxVOEM4QT47PFU4QzhEPjs8VThDOEU+OzxVOEM5ND47PFU4QzdDPjs8VThDOTg+OzxVNjIxRD47LworCTxVOENBRD47PFU4Q0FBPjs8VThDQkQ+OzxVOENCMj47PFU4Q0IzPjs8VThDQUU+OzxVOENCNj47PFU4Q0M4PjsvCisJPFU4Q0MxPjs8VThDRTQ+OzxVOENFMz47PFU4Q0RBPjs8VThDRkQ+OzxVOENGQT47PFU4Q0ZCPjs8VThEMDQ+Oy8KKwk8VThEMDU+OzxVOEQwQT47PFU4RDA3Pjs8VThEMEY+OzxVOEQwRD47PFU4RDEwPjs8VTlGNEU+OzxVOEQxMz47LworCTxVOENDRD47PFU4RDE0Pjs8VThEMTY+OzxVOEQ2Nz47PFU4RDZEPjs8VThENzE+OzxVOEQ3Mz47PFU4RDgxPjsvCisJPFU4RDk5Pjs8VThEQzI+OzxVOERCRT47PFU4REJBPjs8VThEQ0Y+OzxVOEREQT47PFU4REQ2Pjs8VThEQ0M+Oy8KKwk8VThEREI+OzxVOERDQj47PFU4REVBPjs8VThERUI+OzxVOERERj47PFU4REUzPjs8VThERkM+OzxVOEUwOD47LworCTxVOEUwOT47PFU4REZGPjs8VThFMUQ+OzxVOEUxRT47PFU4RTEwPjs8VThFMUY+OzxVOEU0Mj47PFU4RTM1PjsvCisJPFU4RTMwPjs8VThFMzQ+OzxVOEU0QT47PFU4RTQ3Pjs8VThFNDk+OzxVOEU0Qz47PFU4RTUwPjs8VThFNDg+Oy8KKwk8VThFNTk+OzxVOEU2ND47PFU4RTYwPjs8VThFMkE+OzxVOEU2Mz47PFU4RTU1Pjs8VThFNzY+OzxVOEU3Mj47LworCTxVOEU3Qz47PFU4RTgxPjs8VThFODc+OzxVOEU4NT47PFU4RTg0Pjs8VThFOEI+OzxVOEU4QT47PFU4RTkzPjsvCisJPFU4RTkxPjs8VThFOTQ+OzxVOEU5OT47PFU4RUFBPjs8VThFQTE+OzxVOEVBQz47PFU4RUIwPjs8VThFQzY+Oy8KKwk8VThFQjE+OzxVOEVCRT47PFU4RUM1Pjs8VThFQzg+OzxVOEVDQj47PFU4RURCPjs8VThFRTM+OzxVOEVGQz47LworCTxVOEVGQj47PFU4RUVCPjs8VThFRkU+OzxVOEYwQT47PFU4RjA1Pjs8VThGMTU+OzxVOEYxMj47PFU4RjE5PjsvCisJPFU4RjEzPjs8VThGMUM+OzxVOEYxRj47PFU4RjFCPjs8VThGMEM+OzxVOEYyNj47PFU4RjMzPjs8VThGM0I+Oy8KKwk8VThGMzk+OzxVOEY0NT47PFU4RjQyPjs8VThGM0U+OzxVOEY0Qz47PFU4RjQ5Pjs8VThGNDY+OzxVOEY0RT47LworCTxVOEY1Nz47PFU4RjVDPjs8VThGNjI+OzxVOEY2Mz47PFU4RjY0Pjs8VThGOUM+OzxVOEY5Rj47PFU4RkEzPjsvCisJPFU4RkFEPjs8VThGQUY+OzxVOEZCNz47PFU4RkRBPjs8VThGRTU+OzxVOEZFMj47PFU4RkVBPjs8VThGRUY+Oy8KKwk8VTkwODc+OzxVOEZGND47PFU5MDA1Pjs8VThGRjk+OzxVOEZGQT47PFU5MDExPjs8VTkwMTU+OzxVOTAyMT47LworCTxVOTAwRD47PFU5MDFFPjs8VTkwMTY+OzxVOTAwQj47PFU5MDI3Pjs8VTkwMzY+OzxVOTAzNT47PFU5MDM5PjsvCisJPFU4RkY4Pjs8VTkwNEY+OzxVOTA1MD47PFU5MDUxPjs8VTkwNTI+OzxVOTAwRT47PFU5MDQ5Pjs8VTkwM0U+Oy8KKwk8VTkwNTY+OzxVOTA1OD47PFU5MDVFPjs8VTkwNjg+OzxVOTA2Rj47PFU5MDc2Pjs8VTk2QTg+OzxVOTA3Mj47LworCTxVOTA4Mj47PFU5MDdEPjs8VTkwODE+OzxVOTA4MD47PFU5MDhBPjs8VTkwODk+OzxVOTA4Rj47PFU5MEE4PjsvCisJPFU5MEFGPjs8VTkwQjE+OzxVOTBCNT47PFU5MEUyPjs8VTkwRTQ+OzxVNjI0OD47PFU5MERCPjs8VTkxMDI+Oy8KKwk8VTkxMTI+OzxVOTExOT47PFU5MTMyPjs8VTkxMzA+OzxVOTE0QT47PFU5MTU2Pjs8VTkxNTg+OzxVOTE2Mz47LworCTxVOTE2NT47PFU5MTY5Pjs8VTkxNzM+OzxVOTE3Mj47PFU5MThCPjs8VTkxODk+OzxVOTE4Mj47PFU5MUEyPjsvCisJPFU5MUFCPjs8VTkxQUY+OzxVOTFBQT47PFU5MUI1Pjs8VTkxQjQ+OzxVOTFCQT47PFU5MUMwPjs8VTkxQzE+Oy8KKwk8VTkxQzk+OzxVOTFDQj47PFU5MUQwPjs8VTkxRDY+OzxVOTFERj47PFU5MUUxPjs8VTkxREI+OzxVOTFGQz47LworCTxVOTFGNT47PFU5MUY2Pjs8VTkyMUU+OzxVOTFGRj47PFU5MjE0Pjs8VTkyMkM+OzxVOTIxNT47PFU5MjExPjsvCisJPFU5MjVFPjs8VTkyNTc+OzxVOTI0NT47PFU5MjQ5Pjs8VTkyNjQ+OzxVOTI0OD47PFU5Mjk1Pjs8VTkyM0Y+Oy8KKwk8VTkyNEI+OzxVOTI1MD47PFU5MjlDPjs8VTkyOTY+OzxVOTI5Mz47PFU5MjlCPjs8VTkyNUE+OzxVOTJDRj47LworCTxVOTJCOT47PFU5MkI3Pjs8VTkyRTk+OzxVOTMwRj47PFU5MkZBPjs8VTkzNDQ+OzxVOTMyRT47PFU5MzE5PjsvCisJPFU5MzIyPjs8VTkzMUE+OzxVOTMyMz47PFU5MzNBPjs8VTkzMzU+OzxVOTMzQj47PFU5MzVDPjs8VTkzNjA+Oy8KKwk8VTkzN0M+OzxVOTM2RT47PFU5MzU2Pjs8VTkzQjA+OzxVOTNBQz47PFU5M0FEPjs8VTkzOTQ+OzxVOTNCOT47LworCTxVOTNENj47PFU5M0Q3Pjs8VTkzRTg+OzxVOTNFNT47PFU5M0Q4Pjs8VTkzQzM+OzxVOTNERD47PFU5M0QwPjsvCisJPFU5M0M4Pjs8VTkzRTQ+OzxVOTQxQT47PFU5NDE0Pjs8VTk0MTM+OzxVOTQwMz47PFU5NDA3Pjs8VTk0MTA+Oy8KKwk8VTk0MzY+OzxVOTQyQj47PFU5NDM1Pjs8VTk0MjE+OzxVOTQzQT47PFU5NDQxPjs8VTk0NTI+OzxVOTQ0ND47LworCTxVOTQ1Qj47PFU5NDYwPjs8VTk0NjI+OzxVOTQ1RT47PFU5NDZBPjs8VTkyMjk+OzxVOTQ3MD47PFU5NDc1PjsvCisJPFU5NDc3Pjs8VTk0N0Q+OzxVOTQ1QT47PFU5NDdDPjs8VTk0N0U+OzxVOTQ4MT47PFU5NDdGPjs8VTk1ODI+Oy8KKwk8VTk1ODc+OzxVOTU4QT47PFU5NTk0Pjs8VTk1OTY+OzxVOTU5OD47PFU5NTk5Pjs8VTk1QTA+OzxVOTVBOD47LworCTxVOTVBNz47PFU5NUFEPjs8VTk1QkM+OzxVOTVCQj47PFU5NUI5Pjs8VTk1QkU+OzxVOTVDQT47PFU2RkY2PjsvCisJPFU5NUMzPjs8VTk1Q0Q+OzxVOTVDQz47PFU5NUQ1Pjs8VTk1RDQ+OzxVOTVENj47PFU5NURDPjs8VTk1RTE+Oy8KKwk8VTk1RTU+OzxVOTVFMj47PFU5NjIxPjs8VTk2Mjg+OzxVOTYyRT47PFU5NjJGPjs8VTk2NDI+OzxVOTY0Qz47LworCTxVOTY0Rj47PFU5NjRCPjs8VTk2Nzc+OzxVOTY1Qz47PFU5NjVFPjs8VTk2NUQ+OzxVOTY1Rj47PFU5NjY2PjsvCisJPFU5NjcyPjs8VTk2NkM+OzxVOTY4RD47PFU5Njk4Pjs8VTk2OTU+OzxVOTY5Nz47PFU5NkFBPjs8VTk2QTc+Oy8KKwk8VTk2QjE+OzxVOTZCMj47PFU5NkIwPjs8VTk2QjQ+OzxVOTZCNj47PFU5NkI4Pjs8VTk2Qjk+OzxVOTZDRT47LworCTxVOTZDQj47PFU5NkM5Pjs8VTk2Q0Q+OzxVODk0RD47PFU5NkRDPjs8VTk3MEQ+OzxVOTZENT47PFU5NkY5PjsvCisJPFU5NzA0Pjs8VTk3MDY+OzxVOTcwOD47PFU5NzEzPjs8VTk3MEU+OzxVOTcxMT47PFU5NzBGPjs8VTk3MTY+Oy8KKwk8VTk3MTk+OzxVOTcyND47PFU5NzJBPjs8VTk3MzA+OzxVOTczOT47PFU5NzNEPjs8VTk3M0U+OzxVOTc0ND47LworCTxVOTc0Nj47PFU5NzQ4Pjs8VTk3NDI+OzxVOTc0OT47PFU5NzVDPjs8VTk3NjA+OzxVOTc2ND47PFU5NzY2PjsvCisJPFU5NzY4Pjs8VTUyRDI+OzxVOTc2Qj47PFU5NzcxPjs8VTk3Nzk+OzxVOTc4NT47PFU5NzdDPjs8VTk3ODE+Oy8KKwk8VTk3N0E+OzxVOTc4Nj47PFU5NzhCPjs8VTk3OEY+OzxVOTc5MD47PFU5NzlDPjs8VTk3QTg+OzxVOTdBNj47LworCTxVOTdBMz47PFU5N0IzPjs8VTk3QjQ+OzxVOTdDMz47PFU5N0M2Pjs8VTk3Qzg+OzxVOTdDQj47PFU5N0RDPjsvCisJPFU5N0VEPjs8VTlGNEY+OzxVOTdGMj47PFU3QURGPjs8VTk3RjY+OzxVOTdGNT47PFU5ODBGPjs8VTk4MEM+Oy8KKwk8VTk4Mzg+OzxVOTgyND47PFU5ODIxPjs8VTk4Mzc+OzxVOTgzRD47PFU5ODQ2Pjs8VTk4NEY+OzxVOTg0Qj47LworCTxVOTg2Qj47PFU5ODZGPjs8VTk4NzA+OzxVOTg3MT47PFU5ODc0Pjs8VTk4NzM+OzxVOThBQT47PFU5OEFGPjsvCisJPFU5OEIxPjs8VTk4QjY+OzxVOThDND47PFU5OEMzPjs8VTk4QzY+OzxVOThFOT47PFU5OEVCPjs8VTk5MDM+Oy8KKwk8VTk5MDk+OzxVOTkxMj47PFU5OTE0Pjs8VTk5MTg+OzxVOTkyMT47PFU5OTFEPjs8VTk5MUU+OzxVOTkyND47LworCTxVOTkyMD47PFU5OTJDPjs8VTk5MkU+OzxVOTkzRD47PFU5OTNFPjs8VTk5NDI+OzxVOTk0OT47PFU5OTQ1PjsvCisJPFU5OTUwPjs8VTk5NEI+OzxVOTk1MT47PFU5OTUyPjs8VTk5NEM+OzxVOTk1NT47PFU5OTk3Pjs8VTk5OTg+Oy8KKwk8VTk5QTU+OzxVOTlBRD47PFU5OUFFPjs8VTk5QkM+OzxVOTlERj47PFU5OURCPjs8VTk5REQ+OzxVOTlEOD47LworCTxVOTlEMT47PFU5OUVEPjs8VTk5RUU+OzxVOTlGMT47PFU5OUYyPjs8VTk5RkI+OzxVOTlGOD47PFU5QTAxPjsvCisJPFU5QTBGPjs8VTlBMDU+OzxVOTlFMj47PFU5QTE5Pjs8VTlBMkI+OzxVOUEzNz47PFU5QTQ1Pjs8VTlBNDI+Oy8KKwk8VTlBNDA+OzxVOUE0Mz47PFU5QTNFPjs8VTlBNTU+OzxVOUE0RD47PFU5QTVCPjs8VTlBNTc+OzxVOUE1Rj47LworCTxVOUE2Mj47PFU5QTY1Pjs8VTlBNjQ+OzxVOUE2OT47PFU5QTZCPjs8VTlBNkE+OzxVOUFBRD47PFU5QUIwPjsvCisJPFU5QUJDPjs8VTlBQzA+OzxVOUFDRj47PFU5QUQxPjs8VTlBRDM+OzxVOUFEND47PFU5QURFPjs8VTlBREY+Oy8KKwk8VTlBRTI+OzxVOUFFMz47PFU5QUU2Pjs8VTlBRUY+OzxVOUFFQj47PFU5QUVFPjs8VTlBRjQ+OzxVOUFGMT47LworCTxVOUFGNz47PFU5QUZCPjs8VTlCMDY+OzxVOUIxOD47PFU5QjFBPjs8VTlCMUY+OzxVOUIyMj47PFU5QjIzPjsvCisJPFU5QjI1Pjs8VTlCMjc+OzxVOUIyOD47PFU5QjI5Pjs8VTlCMkE+OzxVOUIyRT47PFU5QjJGPjs8VTlCMzI+Oy8KKwk8VTlCNDQ+OzxVOUI0Mz47PFU5QjRGPjs8VTlCNEQ+OzxVOUI0RT47PFU5QjUxPjs8VTlCNTg+OzxVOUI3ND47LworCTxVOUI5Mz47PFU5QjgzPjs8VTlCOTE+OzxVOUI5Nj47PFU5Qjk3Pjs8VTlCOUY+OzxVOUJBMD47PFU5QkE4PjsvCisJPFU5QkI0Pjs8VTlCQzA+OzxVOUJDQT47PFU5QkI5Pjs8VTlCQzY+OzxVOUJDRj47PFU5QkQxPjs8VTlCRDI+Oy8KKwk8VTlCRTM+OzxVOUJFMj47PFU5QkU0Pjs8VTlCRDQ+OzxVOUJFMT47PFU5QzNBPjs8VTlCRjI+OzxVOUJGMT47LworCTxVOUJGMD47PFU5QzE1Pjs8VTlDMTQ+OzxVOUMwOT47PFU5QzEzPjs8VTlDMEM+OzxVOUMwNj47PFU5QzA4PjsvCisJPFU5QzEyPjs8VTlDMEE+OzxVOUMwND47PFU5QzJFPjs8VTlDMUI+OzxVOUMyNT47PFU5QzI0Pjs8VTlDMjE+Oy8KKwk8VTlDMzA+OzxVOUM0Nz47PFU5QzMyPjs8VTlDNDY+OzxVOUMzRT47PFU5QzVBPjs8VTlDNjA+OzxVOUM2Nz47LworCTxVOUM3Nj47PFU5Qzc4Pjs8VTlDRTc+OzxVOUNFQz47PFU5Q0YwPjs8VTlEMDk+OzxVOUQwOD47PFU5Q0VCPjsvCisJPFU5RDAzPjs8VTlEMDY+OzxVOUQyQT47PFU5RDI2Pjs8VTlEQUY+OzxVOUQyMz47PFU5RDFGPjs8VTlENDQ+Oy8KKwk8VTlEMTU+OzxVOUQxMj47PFU5RDQxPjs8VTlEM0Y+OzxVOUQzRT47PFU5RDQ2Pjs8VTlENDg+OzxVOUQ1RD47LworCTxVOUQ1RT47PFU5RDY0Pjs8VTlENTE+OzxVOUQ1MD47PFU5RDU5Pjs8VTlENzI+OzxVOUQ4OT47PFU5RDg3PjsvCisJPFU5REFCPjs8VTlENkY+OzxVOUQ3QT47PFU5RDlBPjs8VTlEQTQ+OzxVOURBOT47PFU5REIyPjs8VTlEQzQ+Oy8KKwk8VTlEQzE+OzxVOURCQj47PFU5REI4Pjs8VTlEQkE+OzxVOURDNj47PFU5RENGPjs8VTlEQzI+OzxVOUREOT47LworCTxVOUREMz47PFU5REY4Pjs8VTlERTY+OzxVOURFRD47PFU5REVGPjs8VTlERkQ+OzxVOUUxQT47PFU5RTFCPjsvCisJPFU5RTFFPjs8VTlFNzU+OzxVOUU3OT47PFU5RTdEPjs8VTlFODE+OzxVOUU4OD47PFU5RThCPjs8VTlFOEM+Oy8KKwk8VTlFOTI+OzxVOUU5NT47PFU5RTkxPjs8VTlFOUQ+OzxVOUVBNT47PFU5RUE5Pjs8VTlFQjg+OzxVOUVBQT47LworCTxVOUVBRD47PFU5NzYxPjs8VTlFQ0M+OzxVOUVDRT47PFU5RUNGPjs8VTlFRDA+OzxVOUVEND47PFU5RURDPjsvCisJPFU5RURFPjs8VTlFREQ+OzxVOUVFMD47PFU5RUU1Pjs8VTlFRTg+OzxVOUVFRj47PFU5RUY0Pjs8VTlFRjY+Oy8KKwk8VTlFRjc+OzxVOUVGOT47PFU5RUZCPjs8VTlFRkM+OzxVOUVGRD47PFU5RjA3Pjs8VTlGMDg+OzxVNzZCNz47LworCTxVOUYxNT47PFU5RjIxPjs8VTlGMkM+OzxVOUYzRT47PFU5RjRBPjs8VTlGNTI+OzxVOUY1ND47PFU5RjYzPjsvCisJPFU5RjVGPjs8VTlGNjA+OzxVOUY2MT47PFU5RjY2Pjs8VTlGNjc+OzxVOUY2Qz47PFU5RjZBPjs8VTlGNzc+Oy8KKwk8VTlGNzI+OzxVOUY3Nj47PFU5Rjk1Pjs8VTlGOUM+OzxVOUZBMD47PFU1ODJGPjs8VTY5Qzc+OzxVOTA1OT47LworCTxVNzQ2ND47PFU1MURDPjs8VTcxOTk+OzxVNEUwMj47PFU0RTA0Pjs8VTRFMDU+OzxVNEUwQz47PFU0RTEyPjsvCisJPFU0RTFGPjs8VTRFMjM+OzxVNEUyND47PFU0RTI4Pjs8VTRFMkI+OzxVNEUyRT47PFU0RTJGPjs8VTRFMzA+Oy8KKwk8VTRFMzU+OzxVNEU0MD47PFU0RTQxPjs8VTRFNDQ+OzxVNEU0Nz47PFU0RTUxPjs8VTRFNUE+OzxVNEU1Qz47LworCTxVNEU2Mz47PFU0RTY4Pjs8VTRFNjk+OzxVNEU3ND47PFU0RTc1Pjs8VTRFNzk+OzxVNEU3Rj47PFU0RThEPjsvCisJPFU0RTk2Pjs8VTRFOTc+OzxVNEU5RD47PFU0RUFGPjs8VTRFQjk+OzxVNEVDMz47PFU0RUQwPjs8VTRFREE+Oy8KKwk8VTRFREI+OzxVNEVFMD47PFU0RUUxPjs8VTRFRTI+OzxVNEVFOD47PFU0RUVGPjs8VTRFRjE+OzxVNEVGMz47LworCTxVNEVGNT47PFU0RUZEPjs8VTRFRkU+OzxVNEVGRj47PFU0RjAwPjs8VTRGMDI+OzxVNEYwMz47PFU0RjA4PjsvCisJPFU0RjBCPjs8VTRGMEM+OzxVNEYxMj47PFU0RjE1Pjs8VTRGMTY+OzxVNEYxNz47PFU0RjE5Pjs8VTRGMkU+Oy8KKwk8VTRGMzE+OzxVNEY2MD47PFU0RjMzPjs8VTRGMzU+OzxVNEYzNz47PFU0RjM5Pjs8VTRGM0I+OzxVNEYzRT47LworCTxVNEY0MD47PFU0RjQyPjs8VTRGNDg+OzxVNEY0OT47PFU0RjRCPjs8VTRGNEM+OzxVNEY1Mj47PFU0RjU0PjsvCisJPFU0RjU2Pjs8VTRGNTg+OzxVNEY1Rj47PFU0RjYzPjs8VTRGNkE+OzxVNEY2Qz47PFU0RjZFPjs8VTRGNzE+Oy8KKwk8VTRGNzc+OzxVNEY3OD47PFU0Rjc5Pjs8VTRGN0E+OzxVNEY3RD47PFU0RjdFPjs8VTRGODE+OzxVNEY4Mj47LworCTxVNEY4ND47PFU0Rjg1Pjs8VTRGODk+OzxVNEY4QT47PFU0RjhDPjs8VTRGOEU+OzxVNEY5MD47PFU0RjkyPjsvCisJPFU0RjkzPjs8VTRGOTQ+OzxVNEY5Nz47PFU0Rjk5Pjs8VTRGOUE+OzxVNEY5RT47PFU0RjlGPjs8VTRGQjI+Oy8KKwk8VTRGQjc+OzxVNEZCOT47PFU0RkJCPjs8VTRGQkM+OzxVNEZCRD47PFU0RkJFPjs8VTRGQzA+OzxVNEZDMT47LworCTxVNEZDNT47PFU0RkM2Pjs8VTRGQzg+OzxVNEZDOT47PFU0RkNCPjs8VTRGQ0M+OzxVNEZDRD47PFU0RkNGPjsvCisJPFU0RkQyPjs8VTRGREM+OzxVNEZFMD47PFU0RkUyPjs8VTRGRjA+OzxVNEZGMj47PFU0RkZDPjs8VTRGRkQ+Oy8KKwk8VTRGRkY+OzxVNTAwMD47PFU1MDAxPjs8VTUwMDQ+OzxVNTAwNz47PFU1MDBBPjs8VTUwMEM+OzxVNTAwRT47LworCTxVNTAxMD47PFU1MDEzPjs8VTUwMTc+OzxVNTAxOD47PFU1MDFCPjs8VTUwMUM+OzxVNTAxRD47PFU1MDFFPjsvCisJPFU1MDIyPjs8VTUwMjc+OzxVNTAyRT47PFU1MDMwPjs8VTUwMzI+OzxVNTAzMz47PFU1MDM1Pjs8VTUwNDA+Oy8KKwk8VTUwNDE+OzxVNTA0Mj47PFU1MDQ1Pjs8VTUwNDY+OzxVNTA0QT47PFU1MDRDPjs8VTUwNEU+OzxVNTA1MT47LworCTxVNTA1Mj47PFU1MDUzPjs8VTUwNTc+OzxVNTA1OT47PFU1MDVGPjs8VTUwNjA+OzxVNTA2Mj47PFU1MDYzPjsvCisJPFU1MDY2Pjs8VTUwNjc+OzxVNTA2QT47PFU1MDZEPjs8VTUwNzA+OzxVNTA3MT47PFU1MDNCPjs8VTUwODE+Oy8KKwk8VTUwODM+OzxVNTA4ND47PFU1MDg2Pjs8VTUwOEE+OzxVNTA4RT47PFU1MDhGPjs8VTUwOTA+OzxVNTA5Mj47LworCTxVNTA5Mz47PFU1MDk0Pjs8VTUwOTY+OzxVNTA5Qj47PFU1MDlDPjs8VTUwOUU+OzxVNTA5Rj47PFU1MEEwPjsvCisJPFU1MEExPjs8VTUwQTI+OzxVNTBBQT47PFU1MEFGPjs8VTUwQjA+OzxVNTBCOT47PFU1MEJBPjs8VTUwQkQ+Oy8KKwk8VTUwQzA+OzxVNTBDMz47PFU1MEM0Pjs8VTUwQzc+OzxVNTBDQz47PFU1MENFPjs8VTUwRDA+OzxVNTBEMz47LworCTxVNTBEND47PFU1MEQ4Pjs8VTUwREM+OzxVNTBERD47PFU1MERGPjs8VTUwRTI+OzxVNTBFND47PFU1MEU2PjsvCisJPFU1MEU4Pjs8VTUwRTk+OzxVNTBFRj47PFU1MEYxPjs8VTUwRjY+OzxVNTBGQT47PFU1MEZFPjs8VTUxMDM+Oy8KKwk8VTUxMDY+OzxVNTEwNz47PFU1MTA4Pjs8VTUxMEI+OzxVNTEwQz47PFU1MTBEPjs8VTUxMEU+OzxVNTBGMj47LworCTxVNTExMD47PFU1MTE3Pjs8VTUxMTk+OzxVNTExQj47PFU1MTFDPjs8VTUxMUQ+OzxVNTExRT47PFU1MTIzPjsvCisJPFU1MTI3Pjs8VTUxMjg+OzxVNTEyQz47PFU1MTJEPjs8VTUxMkY+OzxVNTEzMT47PFU1MTMzPjs8VTUxMzQ+Oy8KKwk8VTUxMzU+OzxVNTEzOD47PFU1MTM5Pjs8VTUxNDI+OzxVNTE0QT47PFU1MTRGPjs8VTUxNTM+OzxVNTE1NT47LworCTxVNTE1Nz47PFU1MTU4Pjs8VTUxNUY+OzxVNTE2ND47PFU1MTY2Pjs8VTUxN0U+OzxVNTE4Mz47PFU1MTg0PjsvCisJPFU1MThCPjs8VTUxOEU+OzxVNTE5OD47PFU1MTlEPjs8VTUxQTE+OzxVNTFBMz47PFU1MUFEPjs8VTUxQjg+Oy8KKwk8VTUxQkE+OzxVNTFCQz47PFU1MUJFPjs8VTUxQkY+OzxVNTFDMj47PFU1MUM4Pjs8VTUxQ0Y+OzxVNTFEMT47LworCTxVNTFEMj47PFU1MUQzPjs8VTUxRDU+OzxVNTFEOD47PFU1MURFPjs8VTUxRTI+OzxVNTFFNT47PFU1MUVFPjsvCisJPFU1MUYyPjs8VTUxRjM+OzxVNTFGND47PFU1MUY3Pjs8VTUyMDE+OzxVNTIwMj47PFU1MjA1Pjs8VTUyMTI+Oy8KKwk8VTUyMTM+OzxVNTIxNT47PFU1MjE2Pjs8VTUyMTg+OzxVNTIyMj47PFU1MjI4Pjs8VTUyMzE+OzxVNTIzMj47LworCTxVNTIzNT47PFU1MjNDPjs8VTUyNDU+OzxVNTI0OT47PFU1MjU1Pjs8VTUyNTc+OzxVNTI1OD47PFU1MjVBPjsvCisJPFU1MjVDPjs8VTUyNUY+OzxVNTI2MD47PFU1MjYxPjs8VTUyNjY+OzxVNTI2RT47PFU1Mjc3Pjs8VTUyNzg+Oy8KKwk8VTUyNzk+OzxVNTI4MD47PFU1MjgyPjs8VTUyODU+OzxVNTI4QT47PFU1MjhDPjs8VTUyOTM+OzxVNTI5NT47LworCTxVNTI5Nj47PFU1Mjk3Pjs8VTUyOTg+OzxVNTI5QT47PFU1MjlDPjs8VTUyQTQ+OzxVNTJBNT47PFU1MkE2PjsvCisJPFU1MkE3Pjs8VTUyQUY+OzxVNTJCMD47PFU1MkI2Pjs8VTUyQjc+OzxVNTJCOD47PFU1MkJBPjs8VTUyQkI+Oy8KKwk8VTUyQkQ+OzxVNTJDMD47PFU1MkM0Pjs8VTUyQzY+OzxVNTJDOD47PFU1MkNDPjs8VTUyQ0Y+OzxVNTJEMT47LworCTxVNTJEND47PFU1MkQ2Pjs8VTUyREI+OzxVNTJEQz47PFU1MkUxPjs8VTUyRTU+OzxVNTJFOD47PFU1MkU5PjsvCisJPFU1MkVBPjs8VTUyRUM+OzxVNTJGMD47PFU1MkYxPjs8VTUyRjQ+OzxVNTJGNj47PFU1MkY3Pjs8VTUzMDA+Oy8KKwk8VTUzMDM+OzxVNTMwQT47PFU1MzBCPjs8VTUzMEM+OzxVNTMxMT47PFU1MzEzPjs8VTUzMTg+OzxVNTMxQj47LworCTxVNTMxQz47PFU1MzFFPjs8VTUzMUY+OzxVNTMyNT47PFU1MzI3Pjs8VTUzMjg+OzxVNTMyOT47PFU1MzJCPjsvCisJPFU1MzJDPjs8VTUzMkQ+OzxVNTMzMD47PFU1MzMyPjs8VTUzMzU+OzxVNTMzQz47PFU1MzNEPjs8VTUzM0U+Oy8KKwk8VTUzNDI+OzxVNTM0Qz47PFU1MzRCPjs8VTUzNTk+OzxVNTM1Qj47PFU1MzYxPjs8VTUzNjM+OzxVNTM2NT47LworCTxVNTM2Qz47PFU1MzZEPjs8VTUzNzI+OzxVNTM3OT47PFU1MzdFPjs8VTUzODM+OzxVNTM4Nz47PFU1Mzg4PjsvCisJPFU1MzhFPjs8VTUzOTM+OzxVNTM5ND47PFU1Mzk5Pjs8VTUzOUQ+OzxVNTNBMT47PFU1M0E0Pjs8VTUzQUE+Oy8KKwk8VTUzQUI+OzxVNTNBRj47PFU1M0IyPjs8VTUzQjQ+OzxVNTNCNT47PFU1M0I3Pjs8VTUzQjg+OzxVNTNCQT47LworCTxVNTNCRD47PFU1M0MwPjs8VTUzQzU+OzxVNTNDRj47PFU1M0QyPjs8VTUzRDM+OzxVNTNENT47PFU1M0RBPjsvCisJPFU1M0REPjs8VTUzREU+OzxVNTNFMD47PFU1M0U2Pjs8VTUzRTc+OzxVNTNGNT47PFU1NDAyPjs8VTU0MTM+Oy8KKwk8VTU0MUE+OzxVNTQyMT47PFU1NDI3Pjs8VTU0Mjg+OzxVNTQyQT47PFU1NDJGPjs8VTU0MzE+OzxVNTQzND47LworCTxVNTQzNT47PFU1NDQzPjs8VTU0NDQ+OzxVNTQ0Nz47PFU1NDREPjs8VTU0NEY+OzxVNTQ1RT47PFU1NDYyPjsvCisJPFU1NDY0Pjs8VTU0NjY+OzxVNTQ2Nz47PFU1NDY5Pjs8VTU0NkI+OzxVNTQ2RD47PFU1NDZFPjs8VTU0NzQ+Oy8KKwk8VTU0N0Y+OzxVNTQ4MT47PFU1NDgzPjs8VTU0ODU+OzxVNTQ4OD47PFU1NDg5Pjs8VTU0OEQ+OzxVNTQ5MT47LworCTxVNTQ5NT47PFU1NDk2Pjs8VTU0OUM+OzxVNTQ5Rj47PFU1NEExPjs8VTU0QTY+OzxVNTRBNz47PFU1NEE5PjsvCisJPFU1NEFBPjs8VTU0QUQ+OzxVNTRBRT47PFU1NEIxPjs8VTU0Qjc+OzxVNTRCOT47PFU1NEJBPjs8VTU0QkI+Oy8KKwk8VTU0QkY+OzxVNTRDNj47PFU1NENBPjs8VTU0Q0Q+OzxVNTRDRT47PFU1NEUwPjs8VTU0RUE+OzxVNTRFQz47LworCTxVNTRFRj47PFU1NEY2Pjs8VTU0RkM+OzxVNTRGRT47PFU1NEZGPjs8VTU1MDA+OzxVNTUwMT47PFU1NTA1PjsvCisJPFU1NTA4Pjs8VTU1MDk+OzxVNTUwQz47PFU1NTBEPjs8VTU1MEU+OzxVNTUxNT47PFU1NTJBPjs8VTU1MkI+Oy8KKwk8VTU1MzI+OzxVNTUzNT47PFU1NTM2Pjs8VTU1M0I+OzxVNTUzQz47PFU1NTNEPjs8VTU1NDE+OzxVNTU0Nz47LworCTxVNTU0OT47PFU1NTRBPjs8VTU1NEQ+OzxVNTU1MD47PFU1NTUxPjs8VTU1NTg+OzxVNTU1QT47PFU1NTVCPjsvCisJPFU1NTVFPjs8VTU1NjA+OzxVNTU2MT47PFU1NTY0Pjs8VTU1NjY+OzxVNTU3Rj47PFU1NTgxPjs8VTU1ODI+Oy8KKwk8VTU1ODY+OzxVNTU4OD47PFU1NThFPjs8VTU1OEY+OzxVNTU5MT47PFU1NTkyPjs8VTU1OTM+OzxVNTU5ND47LworCTxVNTU5Nz47PFU1NUEzPjs8VTU1QTQ+OzxVNTVBRD47PFU1NUIyPjs8VTU1QkY+OzxVNTVDMT47PFU1NUMzPjsvCisJPFU1NUM2Pjs8VTU1Qzk+OzxVNTVDQj47PFU1NUNDPjs8VTU1Q0U+OzxVNTVEMT47PFU1NUQyPjs8VTU1RDM+Oy8KKwk8VTU1RDc+OzxVNTVEOD47PFU1NURCPjs8VTU1REU+OzxVNTVFMj47PFU1NUU5Pjs8VTU1RjY+OzxVNTVGRj47LworCTxVNTYwNT47PFU1NjA4Pjs8VTU2MEE+OzxVNTYwRD47PFU1NjBFPjs8VTU2MEY+OzxVNTYxMD47PFU1NjExPjsvCisJPFU1NjEyPjs8VTU2MTk+OzxVNTYyQz47PFU1NjMwPjs8VTU2MzM+OzxVNTYzNT47PFU1NjM3Pjs8VTU2Mzk+Oy8KKwk8VTU2M0I+OzxVNTYzQz47PFU1NjNEPjs8VTU2M0Y+OzxVNTY0MD47PFU1NjQxPjs8VTU2NDM+OzxVNTY0ND47LworCTxVNTY0Nj47PFU1NjQ5Pjs8VTU2NEI+OzxVNTY0RD47PFU1NjRGPjs8VTU2NTQ+OzxVNTY1RT47PFU1NjYwPjsvCisJPFU1NjYxPjs8VTU2NjI+OzxVNTY2Mz47PFU1NjY2Pjs8VTU2Njk+OzxVNTY2RD47PFU1NjZGPjs8VTU2NzE+Oy8KKwk8VTU2NzI+OzxVNTY3NT47PFU1Njg0Pjs8VTU2ODU+OzxVNTY4OD47PFU1NjhCPjs8VTU2OEM+OzxVNTY5NT47LworCTxVNTY5OT47PFU1NjlBPjs8VTU2OUQ+OzxVNTY5RT47PFU1NjlGPjs8VTU2QTY+OzxVNTZBNz47PFU1NkE4PjsvCisJPFU1NkE5Pjs8VTU2QUI+OzxVNTZBQz47PFU1NkFEPjs8VTU2QjE+OzxVNTZCMz47PFU1NkI3Pjs8VTU2QkU+Oy8KKwk8VTU2QzU+OzxVNTZDOT47PFU1NkNBPjs8VTU2Q0I+OzxVNTZDRj47PFU1NkQwPjs8VTU2Q0M+OzxVNTZDRD47LworCTxVNTZEOT47PFU1NkRDPjs8VTU2REQ+OzxVNTZERj47PFU1NkUxPjs8VTU2RTQ+OzxVNTZFNT47PFU1NkU2PjsvCisJPFU1NkU3Pjs8VTU2RTg+OzxVNTZGMT47PFU1NkVCPjs8VTU2RUQ+OzxVNTZGNj47PFU1NkY3Pjs8VTU3MDE+Oy8KKwk8VTU3MDI+OzxVNTcwNz47PFU1NzBBPjs8VTU3MEM+OzxVNTcxMT47PFU1NzE1Pjs8VTU3MUE+OzxVNTcxQj47LworCTxVNTcxRD47PFU1NzIwPjs8VTU3MjI+OzxVNTcyMz47PFU1NzI0Pjs8VTU3MjU+OzxVNTcyOT47PFU1NzJBPjsvCisJPFU1NzJDPjs8VTU3MkU+OzxVNTcyRj47PFU1NzMzPjs8VTU3MzQ+OzxVNTczRD47PFU1NzNFPjs8VTU3M0Y+Oy8KKwk8VTU3NDU+OzxVNTc0Nj47PFU1NzRDPjs8VTU3NEQ+OzxVNTc1Mj47PFU1NzYyPjs8VTU3NjU+OzxVNTc2Nz47LworCTxVNTc2OD47PFU1NzZCPjs8VTU3NkQ+OzxVNTc2RT47PFU1NzZGPjs8VTU3NzA+OzxVNTc3MT47PFU1NzczPjsvCisJPFU1Nzc0Pjs8VTU3NzU+OzxVNTc3Nz47PFU1Nzc5Pjs8VTU3N0E+OzxVNTc3Qj47PFU1NzdDPjs8VTU3N0U+Oy8KKwk8VTU3ODE+OzxVNTc4Mz47PFU1NzhDPjs8VTU3OTQ+OzxVNTc5Nz47PFU1Nzk5Pjs8VTU3OUE+OzxVNTc5Qz47LworCTxVNTc5RD47PFU1NzlFPjs8VTU3OUY+OzxVNTdBMT47PFU1Nzk1Pjs8VTU3QTc+OzxVNTdBOD47PFU1N0E5PjsvCisJPFU1N0FDPjs8VTU3Qjg+OzxVNTdCRD47PFU1N0M3Pjs8VTU3Qzg+OzxVNTdDQz47PFU1N0NGPjs8VTU3RDU+Oy8KKwk8VTU3REQ+OzxVNTdERT47PFU1N0U0Pjs8VTU3RTY+OzxVNTdFNz47PFU1N0U5Pjs8VTU3RUQ+OzxVNTdGMD47LworCTxVNTdGNT47PFU1N0Y2Pjs8VTU3Rjg+OzxVNTdGRD47PFU1N0ZFPjs8VTU3RkY+OzxVNTgwMz47PFU1ODA0PjsvCisJPFU1ODA4Pjs8VTU4MDk+OzxVNTdFMT47PFU1ODBDPjs8VTU4MEQ+OzxVNTgxQj47PFU1ODFFPjs8VTU4MUY+Oy8KKwk8VTU4MjA+OzxVNTgyNj47PFU1ODI3Pjs8VTU4MkQ+OzxVNTgzMj47PFU1ODM5Pjs8VTU4M0Y+OzxVNTg0OT47LworCTxVNTg0Qz47PFU1ODREPjs8VTU4NEY+OzxVNTg1MD47PFU1ODU1Pjs8VTU4NUY+OzxVNTg2MT47PFU1ODY0PjsvCisJPFU1ODY3Pjs8VTU4Njg+OzxVNTg3OD47PFU1ODdDPjs8VTU4N0Y+OzxVNTg4MD47PFU1ODgxPjs8VTU4ODc+Oy8KKwk8VTU4ODg+OzxVNTg4OT47PFU1ODhBPjs8VTU4OEM+OzxVNTg4RD47PFU1ODhGPjs8VTU4OTA+OzxVNTg5ND47LworCTxVNTg5Nj47PFU1ODlEPjs8VTU4QTA+OzxVNThBMT47PFU1OEEyPjs8VTU4QTY+OzxVNThBOT47PFU1OEIxPjsvCisJPFU1OEIyPjs8VTU4QzQ+OzxVNThCQz47PFU1OEMyPjs8VTU4Qzg+OzxVNThDRD47PFU1OENFPjs8VTU4RDA+Oy8KKwk8VTU4RDI+OzxVNThEND47PFU1OEQ2Pjs8VTU4REE+OzxVNThERD47PFU1OEUxPjs8VTU4RTI+OzxVNThFOT47LworCTxVNThGMz47PFU1OTA1Pjs8VTU5MDY+OzxVNTkwQj47PFU1OTBDPjs8VTU5MTI+OzxVNTkxMz47PFU1OTE0PjsvCisJPFU4NjQxPjs8VTU5MUQ+OzxVNTkyMT47PFU1OTIzPjs8VTU5MjQ+OzxVNTkyOD47PFU1OTJGPjs8VTU5MzA+Oy8KKwk8VTU5MzM+OzxVNTkzNT47PFU1OTM2Pjs8VTU5M0Y+OzxVNTk0Mz47PFU1OTQ2Pjs8VTU5NTI+OzxVNTk1Mz47LworCTxVNTk1OT47PFU1OTVCPjs8VTU5NUQ+OzxVNTk1RT47PFU1OTVGPjs8VTU5NjE+OzxVNTk2Mz47PFU1OTZCPjsvCisJPFU1OTZEPjs8VTU5NkY+OzxVNTk3Mj47PFU1OTc1Pjs8VTU5NzY+OzxVNTk3OT47PFU1OTdCPjs8VTU5N0M+Oy8KKwk8VTU5OEI+OzxVNTk4Qz47PFU1OThFPjs8VTU5OTI+OzxVNTk5NT47PFU1OTk3Pjs8VTU5OUY+OzxVNTlBND47LworCTxVNTlBNz47PFU1OUFEPjs8VTU5QUU+OzxVNTlBRj47PFU1OUIwPjs8VTU5QjM+OzxVNTlCNz47PFU1OUJBPjsvCisJPFU1OUJDPjs8VTU5QzE+OzxVNTlDMz47PFU1OUM0Pjs8VTU5Qzg+OzxVNTlDQT47PFU1OUNEPjs8VTU5RDI+Oy8KKwk8VTU5REQ+OzxVNTlERT47PFU1OURGPjs8VTU5RTM+OzxVNTlFND47PFU1OUU3Pjs8VTU5RUU+OzxVNTlFRj47LworCTxVNTlGMT47PFU1OUYyPjs8VTU5RjQ+OzxVNTlGNz47PFU1QTAwPjs8VTVBMDQ+OzxVNUEwQz47PFU1QTBEPjsvCisJPFU1QTBFPjs8VTVBMTI+OzxVNUExMz47PFU1QTFFPjs8VTVBMjM+OzxVNUEyND47PFU1QTI3Pjs8VTVBMjg+Oy8KKwk8VTVBMkE+OzxVNUEyRD47PFU1QTMwPjs8VTVBNDQ+OzxVNUE0NT47PFU1QTQ3Pjs8VTVBNDg+OzxVNUE0Qz47LworCTxVNUE1MD47PFU1QTU1Pjs8VTVBNUU+OzxVNUE2Mz47PFU1QTY1Pjs8VTVBNjc+OzxVNUE2RD47PFU1QTc3PjsvCisJPFU1QTdBPjs8VTVBN0I+OzxVNUE3RT47PFU1QThCPjs8VTVBOTA+OzxVNUE5Mz47PFU1QTk2Pjs8VTVBOTk+Oy8KKwk8VTVBOUM+OzxVNUE5RT47PFU1QTlGPjs8VTVBQTA+OzxVNUFBMj47PFU1QUE3Pjs8VTVBQUM+OzxVNUFCMT47LworCTxVNUFCMj47PFU1QUIzPjs8VTVBQjU+OzxVNUFCOD47PFU1QUJBPjs8VTVBQkI+OzxVNUFCRj47PFU1QUM0PjsvCisJPFU1QUM2Pjs8VTVBQzg+OzxVNUFDRj47PFU1QURBPjs8VTVBREM+OzxVNUFFMD47PFU1QUU1Pjs8VTVBRUE+Oy8KKwk8VTVBRUU+OzxVNUFGNT47PFU1QUY2Pjs8VTVBRkQ+OzxVNUIwMD47PFU1QjAxPjs8VTVCMDg+OzxVNUIxNz47LworCTxVNUIzND47PFU1QjE5Pjs8VTVCMUI+OzxVNUIxRD47PFU1QjIxPjs8VTVCMjU+OzxVNUIyRD47PFU1QjM4PjsvCisJPFU1QjQxPjs8VTVCNEI+OzxVNUI0Qz47PFU1QjUyPjs8VTVCNTY+OzxVNUI1RT47PFU1QjY4Pjs8VTVCNkU+Oy8KKwk8VTVCNkY+OzxVNUI3Qz47PFU1QjdEPjs8VTVCN0U+OzxVNUI3Rj47PFU1QjgxPjs8VTVCODQ+OzxVNUI4Nj47LworCTxVNUI4QT47PFU1QjhFPjs8VTVCOTA+OzxVNUI5MT47PFU1QjkzPjs8VTVCOTQ+OzxVNUI5Nj47PFU1QkE4PjsvCisJPFU1QkE5Pjs8VTVCQUM+OzxVNUJBRD47PFU1QkFGPjs8VTVCQjE+OzxVNUJCMj47PFU1QkI3Pjs8VTVCQkE+Oy8KKwk8VTVCQkM+OzxVNUJDMD47PFU1QkMxPjs8VTVCQ0Q+OzxVNUJDRj47PFU1QkQ2Pjs8VTVCRDc+OzxVNUJEOD47LworCTxVNUJEOT47PFU1QkRBPjs8VTVCRTA+OzxVNUJFRj47PFU1QkYxPjs8VTVCRjQ+OzxVNUJGRD47PFU1QzBDPjsvCisJPFU1QzE3Pjs8VTVDMUU+OzxVNUMxRj47PFU1QzIzPjs8VTVDMjY+OzxVNUMyOT47PFU1QzJCPjs8VTVDMkM+Oy8KKwk8VTVDMkU+OzxVNUMzMD47PFU1QzMyPjs8VTVDMzU+OzxVNUMzNj47PFU1QzU5Pjs8VTVDNUE+OzxVNUM1Qz47LworCTxVNUM2Mj47PFU1QzYzPjs8VTVDNjc+OzxVNUM2OD47PFU1QzY5Pjs8VTVDNkQ+OzxVNUM3MD47PFU1Qzc0PjsvCisJPFU1Qzc1Pjs8VTVDN0E+OzxVNUM3Qj47PFU1QzdDPjs8VTVDN0Q+OzxVNUM4Nz47PFU1Qzg4Pjs8VTVDOEE+Oy8KKwk8VTVDOEY+OzxVNUM5Mj47PFU1QzlEPjs8VTVDOUY+OzxVNUNBMD47PFU1Q0EyPjs8VTVDQTM+OzxVNUNBNj47LworCTxVNUNBQT47PFU1Q0IyPjs8VTVDQjQ+OzxVNUNCNT47PFU1Q0JBPjs8VTVDQzk+OzxVNUNDQj47PFU1Q0QyPjsvCisJPFU1Q0REPjs8VTVDRDc+OzxVNUNFRT47PFU1Q0YxPjs8VTVDRjI+OzxVNUNGND47PFU1RDAxPjs8VTVEMDY+Oy8KKwk8VTVEMEQ+OzxVNUQxMj47PFU1RDJCPjs8VTVEMjM+OzxVNUQyND47PFU1RDI2Pjs8VTVEMjc+OzxVNUQzMT47LworCTxVNUQzND47PFU1RDM5Pjs8VTVEM0Q+OzxVNUQzRj47PFU1RDQyPjs8VTVENDM+OzxVNUQ0Nj47PFU1RDQ4PjsvCisJPFU1RDU1Pjs8VTVENTE+OzxVNUQ1OT47PFU1RDRBPjs8VTVENUY+OzxVNUQ2MD47PFU1RDYxPjs8VTVENjI+Oy8KKwk8VTVENjQ+OzxVNUQ2QT47PFU1RDZEPjs8VTVENzA+OzxVNUQ3OT47PFU1RDdBPjs8VTVEN0U+OzxVNUQ3Rj47LworCTxVNUQ4MT47PFU1RDgzPjs8VTVEODg+OzxVNUQ4QT47PFU1RDkyPjs8VTVEOTM+OzxVNUQ5ND47PFU1RDk1PjsvCisJPFU1RDk5Pjs8VTVEOUI+OzxVNUQ5Rj47PFU1REEwPjs8VTVEQTc+OzxVNURBQj47PFU1REIwPjs8VTVEQjQ+Oy8KKwk8VTVEQjg+OzxVNURCOT47PFU1REMzPjs8VTVEQzc+OzxVNURDQj47PFU1REQwPjs8VTVEQ0U+OzxVNUREOD47LworCTxVNUREOT47PFU1REUwPjs8VTVERTQ+OzxVNURFOT47PFU1REY4Pjs8VTVERjk+OzxVNUUwMD47PFU1RTA3PjsvCisJPFU1RTBEPjs8VTVFMTI+OzxVNUUxND47PFU1RTE1Pjs8VTVFMTg+OzxVNUUxRj47PFU1RTIwPjs8VTVFMkU+Oy8KKwk8VTVFMjg+OzxVNUUzMj47PFU1RTM1Pjs8VTVFM0U+OzxVNUU0Qj47PFU1RTUwPjs8VTVFNDk+OzxVNUU1MT47LworCTxVNUU1Nj47PFU1RTU4Pjs8VTVFNUI+OzxVNUU1Qz47PFU1RTVFPjs8VTVFNjg+OzxVNUU2QT47PFU1RTZCPjsvCisJPFU1RTZDPjs8VTVFNkQ+OzxVNUU2RT47PFU1RTcwPjs8VTVFODA+OzxVNUU4Qj47PFU1RThFPjs8VTVFQTI+Oy8KKwk8VTVFQTQ+OzxVNUVBNT47PFU1RUE4Pjs8VTVFQUE+OzxVNUVBQz47PFU1RUIxPjs8VTVFQjM+OzxVNUVCRD47LworCTxVNUVCRT47PFU1RUJGPjs8VTVFQzY+OzxVNUVDQz47PFU1RUNCPjs8VTVFQ0U+OzxVNUVEMT47PFU1RUQyPjsvCisJPFU1RUQ0Pjs8VTVFRDU+OzxVNUVEQz47PFU1RURFPjs8VTVFRTU+OzxVNUVFQj47PFU1RjAyPjs8VTVGMDY+Oy8KKwk8VTVGMDc+OzxVNUYwOD47PFU1RjBFPjs8VTVGMTk+OzxVNUYxQz47PFU1RjFEPjs8VTVGMjE+OzxVNUYyMj47LworCTxVNUYyMz47PFU1RjI0Pjs8VTVGMjg+OzxVNUYyQj47PFU1RjJDPjs8VTVGMkU+OzxVNUYzMD47PFU1RjM0PjsvCisJPFU1RjM2Pjs8VTVGM0I+OzxVNUYzRD47PFU1RjNGPjs8VTVGNDA+OzxVNUY0ND47PFU1RjQ1Pjs8VTVGNDc+Oy8KKwk8VTVGNEQ+OzxVNUY1MD47PFU1RjU0Pjs8VTVGNTg+OzxVNUY1Qj47PFU1RjYwPjs8VTVGNjM+OzxVNUY2ND47LworCTxVNUY2Nz47PFU1RjZGPjs8VTVGNzI+OzxVNUY3ND47PFU1Rjc1Pjs8VTVGNzg+OzxVNUY3QT47PFU1RjdEPjsvCisJPFU1RjdFPjs8VTVGODk+OzxVNUY4RD47PFU1RjhGPjs8VTVGOTY+OzxVNUY5Qz47PFU1RjlEPjs8VTVGQTI+Oy8KKwk8VTVGQTc+OzxVNUZBQj47PFU1RkE0Pjs8VTVGQUM+OzxVNUZBRj47PFU1RkIwPjs8VTVGQjE+OzxVNUZCOD47LworCTxVNUZDND47PFU1RkM3Pjs8VTVGQzg+OzxVNUZDOT47PFU1RkNCPjs8VTVGRDA+OzxVNUZEMT47PFU1RkQyPjsvCisJPFU1RkQzPjs8VTVGRDQ+OzxVNUZERT47PFU1RkUxPjs8VTVGRTI+OzxVNUZFOD47PFU1RkU5Pjs8VTVGRUE+Oy8KKwk8VTVGRUM+OzxVNUZFRD47PFU1RkVFPjs8VTVGRUY+OzxVNUZGMj47PFU1RkYzPjs8VTVGRjY+OzxVNUZGQT47LworCTxVNUZGQz47PFU2MDA3Pjs8VTYwMEE+OzxVNjAwRD47PFU2MDEzPjs8VTYwMTQ+OzxVNjAxNz47PFU2MDE4PjsvCisJPFU2MDFBPjs8VTYwMUY+OzxVNjAyND47PFU2MDJEPjs8VTYwMzM+OzxVNjAzNT47PFU2MDQwPjs8VTYwNDc+Oy8KKwk8VTYwNDg+OzxVNjA0OT47PFU2MDRDPjs8VTYwNTE+OzxVNjA1ND47PFU2MDU2Pjs8VTYwNTc+OzxVNjA1RD47LworCTxVNjA2MT47PFU2MDY3Pjs8VTYwNzE+OzxVNjA3RT47PFU2MDdGPjs8VTYwODI+OzxVNjA4Nj47PFU2MDg4PjsvCisJPFU2MDhBPjs8VTYwOEU+OzxVNjA5MT47PFU2MDkzPjs8VTYwOTU+OzxVNjA5OD47PFU2MDlEPjs8VTYwOUU+Oy8KKwk8VTYwQTI+OzxVNjBBND47PFU2MEE1Pjs8VTYwQTg+OzxVNjBCMD47PFU2MEIxPjs8VTYwQjc+OzxVNjBCQj47LworCTxVNjBCRT47PFU2MEMyPjs8VTYwQzQ+OzxVNjBDOD47PFU2MEM5Pjs8VTYwQ0E+OzxVNjBDQj47PFU2MENFPjsvCisJPFU2MENGPjs8VTYwRDQ+OzxVNjBENT47PFU2MEQ5Pjs8VTYwREI+OzxVNjBERD47PFU2MERFPjs8VTYwRTI+Oy8KKwk8VTYwRTU+OzxVNjBGMj47PFU2MEY1Pjs8VTYwRjg+OzxVNjBGQz47PFU2MEZEPjs8VTYxMDI+OzxVNjEwNz47LworCTxVNjEwQT47PFU2MTBDPjs8VTYxMTA+OzxVNjExMT47PFU2MTEyPjs8VTYxMTM+OzxVNjExND47PFU2MTE2PjsvCisJPFU2MTE3Pjs8VTYxMTk+OzxVNjExQz47PFU2MTFFPjs8VTYxMjI+OzxVNjEyQT47PFU2MTJCPjs8VTYxMzA+Oy8KKwk8VTYxMzE+OzxVNjEzNT47PFU2MTM2Pjs8VTYxMzc+OzxVNjEzOT47PFU2MTQxPjs8VTYxNDU+OzxVNjE0Nj47LworCTxVNjE0OT47PFU2MTVFPjs8VTYxNjA+OzxVNjE2Qz47PFU2MTcyPjs8VTYxNzg+OzxVNjE3Qj47PFU2MTdDPjsvCisJPFU2MTdGPjs8VTYxODA+OzxVNjE4MT47PFU2MTgzPjs8VTYxODQ+OzxVNjE4Qj47PFU2MThEPjs8VTYxOTI+Oy8KKwk8VTYxOTM+OzxVNjE5Nz47PFU2MTk4Pjs8VTYxOUM+OzxVNjE5RD47PFU2MTlGPjs8VTYxQTA+OzxVNjFBNT47LworCTxVNjFBOD47PFU2MUFBPjs8VTYxQUQ+OzxVNjFCOD47PFU2MUI5Pjs8VTYxQkM+OzxVNjFDMD47PFU2MUMxPjsvCisJPFU2MUMyPjs8VTYxQ0U+OzxVNjFDRj47PFU2MUQ1Pjs8VTYxREM+OzxVNjFERD47PFU2MURFPjs8VTYxREY+Oy8KKwk8VTYxRTE+OzxVNjFFMj47PFU2MUU3Pjs8VTYxRTk+OzxVNjFFNT47PFU2MUVDPjs8VTYxRUQ+OzxVNjFFRj47LworCTxVNjIwMT47PFU2MjAzPjs8VTYyMDQ+OzxVNjIwNz47PFU2MjEzPjs8VTYyMTU+OzxVNjIxQz47PFU2MjIwPjsvCisJPFU2MjIyPjs8VTYyMjM+OzxVNjIyNz47PFU2MjI5Pjs8VTYyMkI+OzxVNjIzOT47PFU2MjNEPjs8VTYyNDI+Oy8KKwk8VTYyNDM+OzxVNjI0ND47PFU2MjQ2Pjs8VTYyNEM+OzxVNjI1MD47PFU2MjUxPjs8VTYyNTI+OzxVNjI1ND47LworCTxVNjI1Nj47PFU2MjVBPjs8VTYyNUM+OzxVNjI2ND47PFU2MjZEPjs8VTYyNkY+OzxVNjI3Mz47PFU2MjdBPjsvCisJPFU2MjdEPjs8VTYyOEQ+OzxVNjI4RT47PFU2MjhGPjs8VTYyOTA+OzxVNjJBNj47PFU2MkE4Pjs8VTYyQjM+Oy8KKwk8VTYyQjY+OzxVNjJCNz47PFU2MkJBPjs8VTYyQkU+OzxVNjJCRj47PFU2MkM0Pjs8VTYyQ0U+OzxVNjJENT47LworCTxVNjJENj47PFU2MkRBPjs8VTYyRUE+OzxVNjJGMj47PFU2MkY0Pjs8VTYyRkM+OzxVNjJGRD47PFU2MzAzPjsvCisJPFU2MzA0Pjs8VTYzMEE+OzxVNjMwQj47PFU2MzBEPjs8VTYzMTA+OzxVNjMxMz47PFU2MzE2Pjs8VTYzMTg+Oy8KKwk8VTYzMjk+OzxVNjMyQT47PFU2MzJEPjs8VTYzMzU+OzxVNjMzNj47PFU2MzM5Pjs8VTYzM0M+OzxVNjM0MT47LworCTxVNjM0Mj47PFU2MzQzPjs8VTYzNDQ+OzxVNjM0Nj47PFU2MzRBPjs8VTYzNEI+OzxVNjM0RT47PFU2MzUyPjsvCisJPFU2MzUzPjs8VTYzNTQ+OzxVNjM1OD47PFU2MzVCPjs8VTYzNjU+OzxVNjM2Nj47PFU2MzZDPjs8VTYzNkQ+Oy8KKwk8VTYzNzE+OzxVNjM3ND47PFU2Mzc1Pjs8VTYzNzg+OzxVNjM3Qz47PFU2MzdEPjs8VTYzN0Y+OzxVNjM4Mj47LworCTxVNjM4ND47PFU2Mzg3Pjs8VTYzOEE+OzxVNjM5MD47PFU2Mzk0Pjs8VTYzOTU+OzxVNjM5OT47PFU2MzlBPjsvCisJPFU2MzlFPjs8VTYzQTQ+OzxVNjNBNj47PFU2M0FEPjs8VTYzQUU+OzxVNjNBRj47PFU2M0JEPjs8VTYzQzE+Oy8KKwk8VTYzQzU+OzxVNjNDOD47PFU2M0NFPjs8VTYzRDE+OzxVNjNEMz47PFU2M0Q0Pjs8VTYzRDU+OzxVNjNEQz47LworCTxVNjNFMD47PFU2M0U1Pjs8VTYzRUE+OzxVNjNFQz47PFU2M0YyPjs8VTYzRjM+OzxVNjNGNT47PFU2M0Y4PjsvCisJPFU2M0Y5Pjs8VTY0MDk+OzxVNjQwQT47PFU2NDEwPjs8VTY0MTI+OzxVNjQxND47PFU2NDE4Pjs8VTY0MUU+Oy8KKwk8VTY0MjA+OzxVNjQyMj47PFU2NDI0Pjs8VTY0MjU+OzxVNjQyOT47PFU2NDJBPjs8VTY0MkY+OzxVNjQzMD47LworCTxVNjQzNT47PFU2NDNEPjs8VTY0M0Y+OzxVNjQ0Qj47PFU2NDRGPjs8VTY0NTE+OzxVNjQ1Mj47PFU2NDUzPjsvCisJPFU2NDU0Pjs8VTY0NUE+OzxVNjQ1Qj47PFU2NDVDPjs8VTY0NUQ+OzxVNjQ1Rj47PFU2NDYwPjs8VTY0NjE+Oy8KKwk8VTY0NjM+OzxVNjQ2RD47PFU2NDczPjs8VTY0NzQ+OzxVNjQ3Qj47PFU2NDdEPjs8VTY0ODU+OzxVNjQ4Nz47LworCTxVNjQ4Rj47PFU2NDkwPjs8VTY0OTE+OzxVNjQ5OD47PFU2NDk5Pjs8VTY0OUI+OzxVNjQ5RD47PFU2NDlGPjsvCisJPFU2NEExPjs8VTY0QTM+OzxVNjRBNj47PFU2NEE4Pjs8VTY0QUM+OzxVNjRCMz47PFU2NEJEPjs8VTY0QkU+Oy8KKwk8VTY0QkY+OzxVNjRDND47PFU2NEM5Pjs8VTY0Q0E+OzxVNjRDQj47PFU2NENDPjs8VTY0Q0U+OzxVNjREMD47LworCTxVNjREMT47PFU2NEQ1Pjs8VTY0RDc+OzxVNjRFND47PFU2NEU1Pjs8VTY0RTk+OzxVNjRFQT47PFU2NEVEPjsvCisJPFU2NEYwPjs8VTY0RjU+OzxVNjRGNz47PFU2NEZCPjs8VTY0RkY+OzxVNjUwMT47PFU2NTA0Pjs8VTY1MDg+Oy8KKwk8VTY1MDk+OzxVNjUwQT47PFU2NTBGPjs8VTY1MTM+OzxVNjUxND47PFU2NTE2Pjs8VTY1MTk+OzxVNjUxQj47LworCTxVNjUxRT47PFU2NTFGPjs8VTY1MjI+OzxVNjUyNj47PFU2NTI5Pjs8VTY1MkU+OzxVNjUzMT47PFU2NTNBPjsvCisJPFU2NTNDPjs8VTY1M0Q+OzxVNjU0Mz47PFU2NTQ3Pjs8VTY1NDk+OzxVNjU1MD47PFU2NTUyPjs8VTY1NTQ+Oy8KKwk8VTY1NUY+OzxVNjU2MD47PFU2NTY3Pjs8VTY1NkI+OzxVNjU3QT47PFU2NTdEPjs8VTY1ODE+OzxVNjU4NT47LworCTxVNjU4QT47PFU2NTkyPjs8VTY1OTU+OzxVNjU5OD47PFU2NTlEPjs8VTY1QTA+OzxVNjVBMz47PFU2NUE2PjsvCisJPFU2NUFFPjs8VTY1QjI+OzxVNjVCMz47PFU2NUI0Pjs8VTY1QkY+OzxVNjVDMj47PFU2NUM4Pjs8VTY1Qzk+Oy8KKwk8VTY1Q0U+OzxVNjVEMD47PFU2NUQ0Pjs8VTY1RDY+OzxVNjVEOD47PFU2NURGPjs8VTY1RjA+OzxVNjVGMj47LworCTxVNjVGND47PFU2NUY1Pjs8VTY1Rjk+OzxVNjVGRT47PFU2NUZGPjs8VTY2MDA+OzxVNjYwND47PFU2NjA4PjsvCisJPFU2NjA5Pjs8VTY2MEQ+OzxVNjYxMT47PFU2NjEyPjs8VTY2MTU+OzxVNjYxNj47PFU2NjFEPjs8VTY2MUU+Oy8KKwk8VTY2MjE+OzxVNjYyMj47PFU2NjIzPjs8VTY2MjQ+OzxVNjYyNj47PFU2NjI5Pjs8VTY2MkE+OzxVNjYyQj47LworCTxVNjYyQz47PFU2NjJFPjs8VTY2MzA+OzxVNjYzMT47PFU2NjMzPjs8VTY2Mzk+OzxVNjYzNz47PFU2NjQwPjsvCisJPFU2NjQ1Pjs8VTY2NDY+OzxVNjY0QT47PFU2NjRDPjs8VTY2NTE+OzxVNjY0RT47PFU2NjU3Pjs8VTY2NTg+Oy8KKwk8VTY2NTk+OzxVNjY1Qj47PFU2NjVDPjs8VTY2NjA+OzxVNjY2MT47PFU2NkZCPjs8VTY2NkE+OzxVNjY2Qj47LworCTxVNjY2Qz47PFU2NjdFPjs8VTY2NzM+OzxVNjY3NT47PFU2NjdGPjs8VTY2Nzc+OzxVNjY3OD47PFU2Njc5PjsvCisJPFU2NjdCPjs8VTY2ODA+OzxVNjY3Qz47PFU2NjhCPjs8VTY2OEM+OzxVNjY4RD47PFU2NjkwPjs8VTY2OTI+Oy8KKwk8VTY2OTk+OzxVNjY5QT47PFU2NjlCPjs8VTY2OUM+OzxVNjY5Rj47PFU2NkEwPjs8VTY2QTQ+OzxVNjZBRD47LworCTxVNjZCMT47PFU2NkIyPjs8VTY2QjU+OzxVNjZCQj47PFU2NkJGPjs8VTY2QzA+OzxVNjZDMj47PFU2NkMzPjsvCisJPFU2NkM4Pjs8VTY2Q0M+OzxVNjZDRT47PFU2NkNGPjs8VTY2RDQ+OzxVNjZEQj47PFU2NkRGPjs8VTY2RTg+Oy8KKwk8VTY2RUI+OzxVNjZFQz47PFU2NkVFPjs8VTY2RkE+OzxVNjcwNT47PFU2NzA3Pjs8VTY3MEU+OzxVNjcxMz47LworCTxVNjcxOT47PFU2NzFDPjs8VTY3MjA+OzxVNjcyMj47PFU2NzMzPjs8VTY3M0U+OzxVNjc0NT47PFU2NzQ3PjsvCisJPFU2NzQ4Pjs8VTY3NEM+OzxVNjc1ND47PFU2NzU1Pjs8VTY3NUQ+OzxVNjc2Nj47PFU2NzZDPjs8VTY3NkU+Oy8KKwk8VTY3NzQ+OzxVNjc3Nj47PFU2NzdCPjs8VTY3ODE+OzxVNjc4ND47PFU2NzhFPjs8VTY3OEY+OzxVNjc5MT47LworCTxVNjc5Mz47PFU2Nzk2Pjs8VTY3OTg+OzxVNjc5OT47PFU2NzlCPjs8VTY3QjA+OzxVNjdCMT47PFU2N0IyPjsvCisJPFU2N0I1Pjs8VTY3QkI+OzxVNjdCQz47PFU2N0JEPjs8VTY3Rjk+OzxVNjdDMD47PFU2N0MyPjs8VTY3QzM+Oy8KKwk8VTY3QzU+OzxVNjdDOD47PFU2N0M5Pjs8VTY3RDI+OzxVNjdENz47PFU2N0Q5Pjs8VTY3REM+OzxVNjdFMT47LworCTxVNjdFNj47PFU2N0YwPjs8VTY3RjI+OzxVNjdGNj47PFU2N0Y3Pjs8VTY4NTI+OzxVNjgxND47PFU2ODE5PjsvCisJPFU2ODFEPjs8VTY4MUY+OzxVNjgyOD47PFU2ODI3Pjs8VTY4MkM+OzxVNjgyRD47PFU2ODJGPjs8VTY4MzA+Oy8KKwk8VTY4MzE+OzxVNjgzMz47PFU2ODNCPjs8VTY4M0Y+OzxVNjg0ND47PFU2ODQ1Pjs8VTY4NEE+OzxVNjg0Qz47LworCTxVNjg1NT47PFU2ODU3Pjs8VTY4NTg+OzxVNjg1Qj47PFU2ODZCPjs8VTY4NkU+OzxVNjg2Rj47PFU2ODcwPjsvCisJPFU2ODcxPjs8VTY4NzI+OzxVNjg3NT47PFU2ODc5Pjs8VTY4N0E+OzxVNjg3Qj47PFU2ODdDPjs8VTY4ODI+Oy8KKwk8VTY4ODQ+OzxVNjg4Nj47PFU2ODg4Pjs8VTY4OTY+OzxVNjg5OD47PFU2ODlBPjs8VTY4OUM+OzxVNjhBMT47LworCTxVNjhBMz47PFU2OEE1Pjs8VTY4QTk+OzxVNjhBQT47PFU2OEFFPjs8VTY4QjI+OzxVNjhCQj47PFU2OEM1PjsvCisJPFU2OEM4Pjs8VTY4Q0M+OzxVNjhDRj47PFU2OEQwPjs8VTY4RDE+OzxVNjhEMz47PFU2OEQ2Pjs8VTY4RDk+Oy8KKwk8VTY4REM+OzxVNjhERD47PFU2OEU1Pjs8VTY4RTg+OzxVNjhFQT47PFU2OEVCPjs8VTY4RUM+OzxVNjhFRD47LworCTxVNjhGMD47PFU2OEYxPjs8VTY4RjU+OzxVNjhGNj47PFU2OEZCPjs8VTY4RkM+OzxVNjhGRD47PFU2OTA2PjsvCisJPFU2OTA5Pjs8VTY5MEE+OzxVNjkxMD47PFU2OTExPjs8VTY5MTM+OzxVNjkxNj47PFU2OTE3Pjs8VTY5MzE+Oy8KKwk8VTY5MzM+OzxVNjkzNT47PFU2OTM4Pjs8VTY5M0I+OzxVNjk0Mj47PFU2OTQ1Pjs8VTY5NDk+OzxVNjk0RT47LworCTxVNjk1Nz47PFU2OTVCPjs8VTY5NjM+OzxVNjk2ND47PFU2OTY1Pjs8VTY5NjY+OzxVNjk2OD47PFU2OTY5PjsvCisJPFU2OTZDPjs8VTY5NzA+OzxVNjk3MT47PFU2OTcyPjs8VTY5N0E+OzxVNjk3Qj47PFU2OTdGPjs8VTY5ODA+Oy8KKwk8VTY5OEQ+OzxVNjk5Mj47PFU2OTk2Pjs8VTY5OTg+OzxVNjlBMT47PFU2OUE1Pjs8VTY5QTY+OzxVNjlBOD47LworCTxVNjlBQj47PFU2OUFEPjs8VTY5QUY+OzxVNjlCNz47PFU2OUI4Pjs8VTY5QkE+OzxVNjlCQz47PFU2OUM1PjsvCisJPFU2OUM4Pjs8VTY5RDE+OzxVNjlENj47PFU2OUQ3Pjs8VTY5RTI+OzxVNjlFNT47PFU2OUVFPjs8VTY5RUY+Oy8KKwk8VTY5RjE+OzxVNjlGMz47PFU2OUY1Pjs8VTY5RkU+OzxVNkEwMD47PFU2QTAxPjs8VTZBMDM+OzxVNkEwRj47LworCTxVNkExMT47PFU2QTE1Pjs8VTZBMUE+OzxVNkExRD47PFU2QTIwPjs8VTZBMjQ+OzxVNkEyOD47PFU2QTMwPjsvCisJPFU2QTMyPjs8VTZBMzQ+OzxVNkEzNz47PFU2QTNCPjs8VTZBM0U+OzxVNkEzRj47PFU2QTQ1Pjs8VTZBNDY+Oy8KKwk8VTZBNDk+OzxVNkE0QT47PFU2QTRFPjs8VTZBNTA+OzxVNkE1MT47PFU2QTUyPjs8VTZBNTU+OzxVNkE1Nj47LworCTxVNkE1Qj47PFU2QTY0Pjs8VTZBNjc+OzxVNkE2QT47PFU2QTcxPjs8VTZBNzM+OzxVNkE3RT47PFU2QTgxPjsvCisJPFU2QTgzPjs8VTZBODY+OzxVNkE4Nz47PFU2QTg5Pjs8VTZBOEI+OzxVNkE5MT47PFU2QTlCPjs8VTZBOUQ+Oy8KKwk8VTZBOUU+OzxVNkE5Rj47PFU2QUE1Pjs8VTZBQUI+OzxVNkFBRj47PFU2QUIwPjs8VTZBQjE+OzxVNkFCND47LworCTxVNkFCRD47PFU2QUJFPjs8VTZBQkY+OzxVNkFDNj47PFU2QUM5Pjs8VTZBQzg+OzxVNkFDQz47PFU2QUQwPjsvCisJPFU2QUQ0Pjs8VTZBRDU+OzxVNkFENj47PFU2QURDPjs8VTZBREQ+OzxVNkFFND47PFU2QUU3Pjs8VTZBRUM+Oy8KKwk8VTZBRjA+OzxVNkFGMT47PFU2QUYyPjs8VTZBRkM+OzxVNkFGRD47PFU2QjAyPjs8VTZCMDM+OzxVNkIwNj47LworCTxVNkIwNz47PFU2QjA5Pjs8VTZCMEY+OzxVNkIxMD47PFU2QjExPjs8VTZCMTc+OzxVNkIxQj47PFU2QjFFPjsvCisJPFU2QjI0Pjs8VTZCMjg+OzxVNkIyQj47PFU2QjJDPjs8VTZCMkY+OzxVNkIzNT47PFU2QjM2Pjs8VTZCM0I+Oy8KKwk8VTZCM0Y+OzxVNkI0Nj47PFU2QjRBPjs8VTZCNEQ+OzxVNkI1Mj47PFU2QjU2Pjs8VTZCNTg+OzxVNkI1RD47LworCTxVNkI2MD47PFU2QjY3Pjs8VTZCNkI+OzxVNkI2RT47PFU2QjcwPjs8VTZCNzU+OzxVNkI3RD47PFU2QjdFPjsvCisJPFU2QjgyPjs8VTZCODU+OzxVNkI5Nz47PFU2QjlCPjs8VTZCOUY+OzxVNkJBMD47PFU2QkEyPjs8VTZCQTM+Oy8KKwk8VTZCQTg+OzxVNkJBOT47PFU2QkFDPjs8VTZCQUQ+OzxVNkJBRT47PFU2QkIwPjs8VTZCQjg+OzxVNkJCOT47LworCTxVNkJCRD47PFU2QkJFPjs8VTZCQzM+OzxVNkJDND47PFU2QkM5Pjs8VTZCQ0M+OzxVNkJENj47PFU2QkRBPjsvCisJPFU2QkUxPjs8VTZCRTM+OzxVNkJFNj47PFU2QkU3Pjs8VTZCRUU+OzxVNkJGMT47PFU2QkY3Pjs8VTZCRjk+Oy8KKwk8VTZCRkY+OzxVNkMwMj47PFU2QzA0Pjs8VTZDMDU+OzxVNkMwOT47PFU2QzBEPjs8VTZDMEU+OzxVNkMxMD47LworCTxVNkMxMj47PFU2QzE5Pjs8VTZDMUY+OzxVNkMyNj47PFU2QzI3Pjs8VTZDMjg+OzxVNkMyQz47PFU2QzJFPjsvCisJPFU2QzMzPjs8VTZDMzU+OzxVNkMzNj47PFU2QzNBPjs8VTZDM0I+OzxVNkMzRj47PFU2QzRBPjs8VTZDNEI+Oy8KKwk8VTZDNEQ+OzxVNkM0Rj47PFU2QzUyPjs8VTZDNTQ+OzxVNkM1OT47PFU2QzVCPjs8VTZDNUM+OzxVNkM2Qj47LworCTxVNkM2RD47PFU2QzZGPjs8VTZDNzQ+OzxVNkM3Nj47PFU2Qzc4Pjs8VTZDNzk+OzxVNkM3Qj47PFU2Qzg1PjsvCisJPFU2Qzg2Pjs8VTZDODc+OzxVNkM4OT47PFU2Qzk0Pjs8VTZDOTU+OzxVNkM5Nz47PFU2Qzk4Pjs8VTZDOUM+Oy8KKwk8VTZDOUY+OzxVNkNCMD47PFU2Q0IyPjs8VTZDQjQ+OzxVNkNDMj47PFU2Q0M2Pjs8VTZDQ0Q+OzxVNkNDRj47LworCTxVNkNEMD47PFU2Q0QxPjs8VTZDRDI+OzxVNkNEND47PFU2Q0Q2Pjs8VTZDREE+OzxVNkNEQz47PFU2Q0UwPjsvCisJPFU2Q0U3Pjs8VTZDRTk+OzxVNkNFQj47PFU2Q0VDPjs8VTZDRUU+OzxVNkNGMj47PFU2Q0Y0Pjs8VTZEMDQ+Oy8KKwk8VTZEMDc+OzxVNkQwQT47PFU2RDBFPjs8VTZEMEY+OzxVNkQxMT47PFU2RDEzPjs8VTZEMUE+OzxVNkQyNj47LworCTxVNkQyNz47PFU2RDI4Pjs8VTZDNjc+OzxVNkQyRT47PFU2RDJGPjs8VTZEMzE+OzxVNkQzOT47PFU2RDNDPjsvCisJPFU2RDNGPjs8VTZENTc+OzxVNkQ1RT47PFU2RDVGPjs8VTZENjE+OzxVNkQ2NT47PFU2RDY3Pjs8VTZENkY+Oy8KKwk8VTZENzA+OzxVNkQ3Qz47PFU2RDgyPjs8VTZEODc+OzxVNkQ5MT47PFU2RDkyPjs8VTZEOTQ+OzxVNkQ5Nj47LworCTxVNkQ5Nz47PFU2RDk4Pjs8VTZEQUE+OzxVNkRBQz47PFU2REI0Pjs8VTZEQjc+OzxVNkRCOT47PFU2REJEPjsvCisJPFU2REJGPjs8VTZEQzQ+OzxVNkRDOD47PFU2RENBPjs8VTZEQ0U+OzxVNkRDRj47PFU2REQ2Pjs8VTZEREI+Oy8KKwk8VTZEREQ+OzxVNkRERj47PFU2REUwPjs8VTZERTI+OzxVNkRFNT47PFU2REU5Pjs8VTZERUY+OzxVNkRGMD47LworCTxVNkRGND47PFU2REY2Pjs8VTZERkM+OzxVNkUwMD47PFU2RTA0Pjs8VTZFMUU+OzxVNkUyMj47PFU2RTI3PjsvCisJPFU2RTMyPjs8VTZFMzY+OzxVNkUzOT47PFU2RTNCPjs8VTZFM0M+OzxVNkU0ND47PFU2RTQ1Pjs8VTZFNDg+Oy8KKwk8VTZFNDk+OzxVNkU0Qj47PFU2RTRGPjs8VTZFNTE+OzxVNkU1Mj47PFU2RTUzPjs8VTZFNTQ+OzxVNkU1Nz47LworCTxVNkU1Qz47PFU2RTVEPjs8VTZFNUU+OzxVNkU2Mj47PFU2RTYzPjs8VTZFNjg+OzxVNkU3Mz47PFU2RTdCPjsvCisJPFU2RTdEPjs8VTZFOEQ+OzxVNkU5Mz47PFU2RTk5Pjs8VTZFQTA+OzxVNkVBNz47PFU2RUFEPjs8VTZFQUU+Oy8KKwk8VTZFQjE+OzxVNkVCMz47PFU2RUJCPjs8VTZFQkY+OzxVNkVDMD47PFU2RUMxPjs8VTZFQzM+OzxVNkVDNz47LworCTxVNkVDOD47PFU2RUNBPjs8VTZFQ0Q+OzxVNkVDRT47PFU2RUNGPjs8VTZFRUI+OzxVNkVFRD47PFU2RUVFPjsvCisJPFU2RUY5Pjs8VTZFRkI+OzxVNkVGRD47PFU2RjA0Pjs8VTZGMDg+OzxVNkYwQT47PFU2RjBDPjs8VTZGMEQ+Oy8KKwk8VTZGMTY+OzxVNkYxOD47PFU2RjFBPjs8VTZGMUI+OzxVNkYyNj47PFU2RjI5Pjs8VTZGMkE+OzxVNkYyRj47LworCTxVNkYzMD47PFU2RjMzPjs8VTZGMzY+OzxVNkYzQj47PFU2RjNDPjs8VTZGMkQ+OzxVNkY0Rj47PFU2RjUxPjsvCisJPFU2RjUyPjs8VTZGNTM+OzxVNkY1Nz47PFU2RjU5Pjs8VTZGNUE+OzxVNkY1RD47PFU2RjVFPjs8VTZGNjE+Oy8KKwk8VTZGNjI+OzxVNkY2OD47PFU2RjZDPjs8VTZGN0Q+OzxVNkY3RT47PFU2RjgzPjs8VTZGODc+OzxVNkY4OD47LworCTxVNkY4Qj47PFU2RjhDPjs8VTZGOEQ+OzxVNkY5MD47PFU2RjkyPjs8VTZGOTM+OzxVNkY5ND47PFU2Rjk2PjsvCisJPFU2RjlBPjs8VTZGOUY+OzxVNkZBMD47PFU2RkE1Pjs8VTZGQTY+OzxVNkZBNz47PFU2RkE4Pjs8VTZGQUU+Oy8KKwk8VTZGQUY+OzxVNkZCMD47PFU2RkI1Pjs8VTZGQjY+OzxVNkZCQz47PFU2RkM1Pjs8VTZGQzc+OzxVNkZDOD47LworCTxVNkZDQT47PFU2RkRBPjs8VTZGREU+OzxVNkZFOD47PFU2RkU5Pjs8VTZGRjA+OzxVNkZGNT47PFU2RkY5PjsvCisJPFU2RkZDPjs8VTZGRkQ+OzxVNzAwMD47PFU3MDA1Pjs8VTcwMDY+OzxVNzAwNz47PFU3MDBEPjs8VTcwMTc+Oy8KKwk8VTcwMjA+OzxVNzAyMz47PFU3MDJGPjs8VTcwMzQ+OzxVNzAzNz47PFU3MDM5Pjs8VTcwM0M+OzxVNzA0Mz47LworCTxVNzA0ND47PFU3MDQ4Pjs8VTcwNDk+OzxVNzA0QT47PFU3MDRCPjs8VTcwNTQ+OzxVNzA1NT47PFU3MDVEPjsvCisJPFU3MDVFPjs8VTcwNEU+OzxVNzA2ND47PFU3MDY1Pjs8VTcwNkM+OzxVNzA2RT47PFU3MDc1Pjs8VTcwNzY+Oy8KKwk8VTcwN0U+OzxVNzA4MT47PFU3MDg1Pjs8VTcwODY+OzxVNzA5ND47PFU3MDk1Pjs8VTcwOTY+OzxVNzA5Nz47LworCTxVNzA5OD47PFU3MDlCPjs8VTcwQTQ+OzxVNzBBQj47PFU3MEIwPjs8VTcwQjE+OzxVNzBCND47PFU3MEI3PjsvCisJPFU3MENBPjs8VTcwRDE+OzxVNzBEMz47PFU3MEQ0Pjs8VTcwRDU+OzxVNzBENj47PFU3MEQ4Pjs8VTcwREM+Oy8KKwk8VTcwRTQ+OzxVNzBGQT47PFU3MTAzPjs8VTcxMDQ+OzxVNzEwNT47PFU3MTA2Pjs8VTcxMDc+OzxVNzEwQj47LworCTxVNzEwQz47PFU3MTBGPjs8VTcxMUU+OzxVNzEyMD47PFU3MTJCPjs8VTcxMkQ+OzxVNzEyRj47PFU3MTMwPjsvCisJPFU3MTMxPjs8VTcxMzg+OzxVNzE0MT47PFU3MTQ1Pjs8VTcxNDY+OzxVNzE0Nz47PFU3MTRBPjs8VTcxNEI+Oy8KKwk8VTcxNTA+OzxVNzE1Mj47PFU3MTU3Pjs8VTcxNUE+OzxVNzE1Qz47PFU3MTVFPjs8VTcxNjA+OzxVNzE2OD47LworCTxVNzE3OT47PFU3MTgwPjs8VTcxODU+OzxVNzE4Nz47PFU3MThDPjs8VTcxOTI+OzxVNzE5QT47PFU3MTlCPjsvCisJPFU3MUEwPjs8VTcxQTI+OzxVNzFBRj47PFU3MUIwPjs8VTcxQjI+OzxVNzFCMz47PFU3MUJBPjs8VTcxQkY+Oy8KKwk8VTcxQzA+OzxVNzFDMT47PFU3MUM0Pjs8VTcxQ0I+OzxVNzFDQz47PFU3MUQzPjs8VTcxRDY+OzxVNzFEOT47LworCTxVNzFEQT47PFU3MURDPjs8VTcxRjg+OzxVNzFGRT47PFU3MjAwPjs8VTcyMDc+OzxVNzIwOD47PFU3MjA5PjsvCisJPFU3MjEzPjs8VTcyMTc+OzxVNzIxQT47PFU3MjFEPjs8VTcyMUY+OzxVNzIyND47PFU3MjJCPjs8VTcyMkY+Oy8KKwk8VTcyMzQ+OzxVNzIzOD47PFU3MjM5Pjs8VTcyNDE+OzxVNzI0Mj47PFU3MjQzPjs8VTcyNDU+OzxVNzI0RT47LworCTxVNzI0Rj47PFU3MjUwPjs8VTcyNTM+OzxVNzI1NT47PFU3MjU2Pjs8VTcyNUE+OzxVNzI1Qz47PFU3MjVFPjsvCisJPFU3MjYwPjs8VTcyNjM+OzxVNzI2OD47PFU3MjZCPjs8VTcyNkU+OzxVNzI2Rj47PFU3MjcxPjs8VTcyNzc+Oy8KKwk8VTcyNzg+OzxVNzI3Qj47PFU3MjdDPjs8VTcyN0Y+OzxVNzI4ND47PFU3Mjg5Pjs8VTcyOEQ+OzxVNzI4RT47LworCTxVNzI5Mz47PFU3MjlCPjs8VTcyQTg+OzxVNzJBRD47PFU3MkFFPjs8VTcyQjE+OzxVNzJCND47PFU3MkJFPjsvCisJPFU3MkMxPjs8VTcyQzc+OzxVNzJDOT47PFU3MkNDPjs8VTcyRDU+OzxVNzJENj47PFU3MkQ4Pjs8VTcyREY+Oy8KKwk8VTcyRTU+OzxVNzJGMz47PFU3MkY0Pjs8VTcyRkE+OzxVNzJGQj47PFU3MkZFPjs8VTczMDI+OzxVNzMwND47LworCTxVNzMwNT47PFU3MzA3Pjs8VTczMEI+OzxVNzMwRD47PFU3MzEyPjs8VTczMTM+OzxVNzMxOD47PFU3MzE5PjsvCisJPFU3MzFFPjs8VTczMjI+OzxVNzMyND47PFU3MzI3Pjs8VTczMjg+OzxVNzMyQz47PFU3MzMxPjs8VTczMzI+Oy8KKwk8VTczMzU+OzxVNzMzQT47PFU3MzNCPjs8VTczM0Q+OzxVNzM0Mz47PFU3MzREPjs8VTczNTA+OzxVNzM1Mj47LworCTxVNzM1Nj47PFU3MzU4Pjs8VTczNUQ+OzxVNzM1RT47PFU3MzVGPjs8VTczNjA+OzxVNzM2Nj47PFU3MzY3PjsvCisJPFU3MzY5Pjs8VTczNkI+OzxVNzM2Qz47PFU3MzZFPjs8VTczNkY+OzxVNzM3MT47PFU3Mzc3Pjs8VTczNzk+Oy8KKwk8VTczN0M+OzxVNzM4MD47PFU3MzgxPjs8VTczODM+OzxVNzM4NT47PFU3Mzg2Pjs8VTczOEU+OzxVNzM5MD47LworCTxVNzM5Mz47PFU3Mzk1Pjs8VTczOTc+OzxVNzM5OD47PFU3MzlDPjs8VTczOUU+OzxVNzM5Rj47PFU3M0EwPjsvCisJPFU3M0EyPjs8VTczQTU+OzxVNzNBNj47PFU3M0FBPjs8VTczQUI+OzxVNzNBRD47PFU3M0I1Pjs8VTczQjc+Oy8KKwk8VTczQjk+OzxVNzNCQz47PFU3M0JEPjs8VTczQkY+OzxVNzNDNT47PFU3M0M2Pjs8VTczQzk+OzxVNzNDQj47LworCTxVNzNDQz47PFU3M0NGPjs8VTczRDI+OzxVNzNEMz47PFU3M0Q2Pjs8VTczRDk+OzxVNzNERD47PFU3M0UxPjsvCisJPFU3M0UzPjs8VTczRTY+OzxVNzNFNz47PFU3M0U5Pjs8VTczRjQ+OzxVNzNGNT47PFU3M0Y3Pjs8VTczRjk+Oy8KKwk8VTczRkE+OzxVNzNGQj47PFU3M0ZEPjs8VTczRkY+OzxVNzQwMD47PFU3NDAxPjs8VTc0MDQ+OzxVNzQwNz47LworCTxVNzQwQT47PFU3NDExPjs8VTc0MUE+OzxVNzQxQj47PFU3NDI0Pjs8VTc0MjY+OzxVNzQyOD47PFU3NDI5PjsvCisJPFU3NDJBPjs8VTc0MkI+OzxVNzQyQz47PFU3NDJEPjs8VTc0MkU+OzxVNzQyRj47PFU3NDMwPjs8VTc0MzE+Oy8KKwk8VTc0Mzk+OzxVNzQ0MD47PFU3NDQzPjs8VTc0NDQ+OzxVNzQ0Nj47PFU3NDQ3Pjs8VTc0NEI+OzxVNzQ0RD47LworCTxVNzQ1MT47PFU3NDUyPjs8VTc0NTc+OzxVNzQ1RD47PFU3NDYyPjs8VTc0NjY+OzxVNzQ2Nz47PFU3NDY4PjsvCisJPFU3NDZCPjs8VTc0NkQ+OzxVNzQ2RT47PFU3NDcxPjs8VTc0NzI+OzxVNzQ4MD47PFU3NDgxPjs8VTc0ODU+Oy8KKwk8VTc0ODY+OzxVNzQ4Nz47PFU3NDg5Pjs8VTc0OEY+OzxVNzQ5MD47PFU3NDkxPjs8VTc0OTI+OzxVNzQ5OD47LworCTxVNzQ5OT47PFU3NDlBPjs8VTc0OUM+OzxVNzQ5Rj47PFU3NEEwPjs8VTc0QTE+OzxVNzRBMz47PFU3NEE2PjsvCisJPFU3NEE4Pjs8VTc0QTk+OzxVNzRBQT47PFU3NEFCPjs8VTc0QUU+OzxVNzRBRj47PFU3NEIxPjs8VTc0QjI+Oy8KKwk8VTc0QjU+OzxVNzRCOT47PFU3NEJCPjs8VTc0QkY+OzxVNzRDOD47PFU3NEM5Pjs8VTc0Q0M+OzxVNzREMD47LworCTxVNzREMz47PFU3NEQ4Pjs8VTc0REE+OzxVNzREQj47PFU3NERFPjs8VTc0REY+OzxVNzRFND47PFU3NEU4PjsvCisJPFU3NEVBPjs8VTc0RUI+OzxVNzRFRj47PFU3NEY0Pjs8VTc0RkE+OzxVNzRGQj47PFU3NEZDPjs8VTc0RkY+Oy8KKwk8VTc1MDY+OzxVNzUxMj47PFU3NTE2Pjs8VTc1MTc+OzxVNzUyMD47PFU3NTIxPjs8VTc1MjQ+OzxVNzUyNz47LworCTxVNzUyOT47PFU3NTJBPjs8VTc1MkY+OzxVNzUzNj47PFU3NTM5Pjs8VTc1M0Q+OzxVNzUzRT47PFU3NTNGPjsvCisJPFU3NTQwPjs8VTc1NDM+OzxVNzU0Nz47PFU3NTQ4Pjs8VTc1NEU+OzxVNzU1MD47PFU3NTUyPjs8VTc1NTc+Oy8KKwk8VTc1NUU+OzxVNzU1Rj47PFU3NTYxPjs8VTc1NkY+OzxVNzU3MT47PFU3NTc5Pjs8VTc1N0E+OzxVNzU3Qj47LworCTxVNzU3Qz47PFU3NTdEPjs8VTc1N0U+OzxVNzU4MT47PFU3NTg1Pjs8VTc1OTA+OzxVNzU5Mj47PFU3NTkzPjsvCisJPFU3NTk1Pjs8VTc1OTk+OzxVNzU5Qz47PFU3NUEyPjs8VTc1QTQ+OzxVNzVCND47PFU3NUJBPjs8VTc1QkY+Oy8KKwk8VTc1QzA+OzxVNzVDMT47PFU3NUM0Pjs8VTc1QzY+OzxVNzVDQz47PFU3NUNFPjs8VTc1Q0Y+OzxVNzVENz47LworCTxVNzVEQz47PFU3NURGPjs8VTc1RTA+OzxVNzVFMT47PFU3NUU0Pjs8VTc1RTc+OzxVNzVFQz47PFU3NUVFPjsvCisJPFU3NUVGPjs8VTc1RjE+OzxVNzVGOT47PFU3NjAwPjs8VTc2MDI+OzxVNzYwMz47PFU3NjA0Pjs8VTc2MDc+Oy8KKwk8VTc2MDg+OzxVNzYwQT47PFU3NjBDPjs8VTc2MEY+OzxVNzYxMj47PFU3NjEzPjs8VTc2MTU+OzxVNzYxNj47LworCTxVNzYxOT47PFU3NjFCPjs8VTc2MUM+OzxVNzYxRD47PFU3NjFFPjs8VTc2MjM+OzxVNzYyNT47PFU3NjI2PjsvCisJPFU3NjI5Pjs8VTc2MkQ+OzxVNzYzMj47PFU3NjMzPjs8VTc2MzU+OzxVNzYzOD47PFU3NjM5Pjs8VTc2M0E+Oy8KKwk8VTc2M0M+OzxVNzY0QT47PFU3NjQwPjs8VTc2NDE+OzxVNzY0Mz47PFU3NjQ0Pjs8VTc2NDU+OzxVNzY0OT47LworCTxVNzY0Qj47PFU3NjU1Pjs8VTc2NTk+OzxVNzY1Rj47PFU3NjY0Pjs8VTc2NjU+OzxVNzY2RD47PFU3NjZFPjsvCisJPFU3NjZGPjs8VTc2NzE+OzxVNzY3ND47PFU3NjgxPjs8VTc2ODU+OzxVNzY4Qz47PFU3NjhEPjs8VTc2OTU+Oy8KKwk8VTc2OUI+OzxVNzY5Qz47PFU3NjlEPjs8VTc2OUY+OzxVNzZBMD47PFU3NkEyPjs8VTc2QTM+OzxVNzZBND47LworCTxVNzZBNT47PFU3NkE2Pjs8VTc2QTc+OzxVNzZBOD47PFU3NkFBPjs8VTc2QUQ+OzxVNzZCRD47PFU3NkMxPjsvCisJPFU3NkM1Pjs8VTc2Qzk+OzxVNzZDQj47PFU3NkNDPjs8VTc2Q0U+OzxVNzZEND47PFU3NkQ5Pjs8VTc2RTA+Oy8KKwk8VTc2RTY+OzxVNzZFOD47PFU3NkVDPjs8VTc2RjA+OzxVNzZGMT47PFU3NkY2Pjs8VTc2Rjk+OzxVNzZGQz47LworCTxVNzcwMD47PFU3NzA2Pjs8VTc3MEE+OzxVNzcwRT47PFU3NzEyPjs8VTc3MTQ+OzxVNzcxNT47PFU3NzE3PjsvCisJPFU3NzE5Pjs8VTc3MUE+OzxVNzcxQz47PFU3NzIyPjs8VTc3Mjg+OzxVNzcyRD47PFU3NzJFPjs8VTc3MkY+Oy8KKwk8VTc3MzQ+OzxVNzczNT47PFU3NzM2Pjs8VTc3Mzk+OzxVNzczRD47PFU3NzNFPjs8VTc3NDI+OzxVNzc0NT47LworCTxVNzc0Nj47PFU3NzRBPjs8VTc3NEQ+OzxVNzc0RT47PFU3NzRGPjs8VTc3NTI+OzxVNzc1Nj47PFU3NzU3PjsvCisJPFU3NzVDPjs8VTc3NUU+OzxVNzc1Rj47PFU3NzYwPjs8VTc3NjI+OzxVNzc2ND47PFU3NzY3Pjs8VTc3NkE+Oy8KKwk8VTc3NkM+OzxVNzc3MD47PFU3NzcyPjs8VTc3NzM+OzxVNzc3ND47PFU3NzdBPjs8VTc3N0Q+OzxVNzc4MD47LworCTxVNzc4ND47PFU3NzhDPjs8VTc3OEQ+OzxVNzc5ND47PFU3Nzk1Pjs8VTc3OTY+OzxVNzc5QT47PFU3NzlGPjsvCisJPFU3N0EyPjs8VTc3QTc+OzxVNzdBQT47PFU3N0FFPjs8VTc3QUY+OzxVNzdCMT47PFU3N0I1Pjs8VTc3QkU+Oy8KKwk8VTc3QzM+OzxVNzdDOT47PFU3N0QxPjs8VTc3RDI+OzxVNzdENT47PFU3N0Q5Pjs8VTc3REU+OzxVNzdERj47LworCTxVNzdFMD47PFU3N0U0Pjs8VTc3RTY+OzxVNzdFQT47PFU3N0VDPjs8VTc3RjA+OzxVNzdGMT47PFU3N0Y0PjsvCisJPFU3N0Y4Pjs8VTc3RkI+OzxVNzgwNT47PFU3ODA2Pjs8VTc4MDk+OzxVNzgwRD47PFU3ODBFPjs8VTc4MTE+Oy8KKwk8VTc4MUQ+OzxVNzgyMT47PFU3ODIyPjs8VTc4MjM+OzxVNzgyRD47PFU3ODJFPjs8VTc4MzA+OzxVNzgzNT47LworCTxVNzgzNz47PFU3ODQzPjs8VTc4NDQ+OzxVNzg0Nz47PFU3ODQ4Pjs8VTc4NEM+OzxVNzg0RT47PFU3ODUyPjsvCisJPFU3ODVDPjs8VTc4NUU+OzxVNzg2MD47PFU3ODYxPjs8VTc4NjM+OzxVNzg2ND47PFU3ODY4Pjs8VTc4NkE+Oy8KKwk8VTc4NkU+OzxVNzg3QT47PFU3ODdFPjs8VTc4OEE+OzxVNzg4Rj47PFU3ODk0Pjs8VTc4OTg+OzxVNzhBMT47LworCTxVNzg5RD47PFU3ODlFPjs8VTc4OUY+OzxVNzhBND47PFU3OEE4Pjs8VTc4QUM+OzxVNzhBRD47PFU3OEIwPjsvCisJPFU3OEIxPjs8VTc4QjI+OzxVNzhCMz47PFU3OEJCPjs8VTc4QkQ+OzxVNzhCRj47PFU3OEM3Pjs8VTc4Qzg+Oy8KKwk8VTc4Qzk+OzxVNzhDQz47PFU3OENFPjs8VTc4RDI+OzxVNzhEMz47PFU3OEQ1Pjs8VTc4RDY+OzxVNzhFND47LworCTxVNzhEQj47PFU3OERGPjs8VTc4RTA+OzxVNzhFMT47PFU3OEU2Pjs8VTc4RUE+OzxVNzhGMj47PFU3OEYzPjsvCisJPFU3OTAwPjs8VTc4RjY+OzxVNzhGNz47PFU3OEZBPjs8VTc4RkI+OzxVNzhGRj47PFU3OTA2Pjs8VTc5MEM+Oy8KKwk8VTc5MTA+OzxVNzkxQT47PFU3OTFDPjs8VTc5MUU+OzxVNzkxRj47PFU3OTIwPjs8VTc5MjU+OzxVNzkyNz47LworCTxVNzkyOT47PFU3OTJEPjs8VTc5MzE+OzxVNzkzND47PFU3OTM1Pjs8VTc5M0I+OzxVNzkzRD47PFU3OTNGPjsvCisJPFU3OTQ0Pjs8VTc5NDU+OzxVNzk0Nj47PFU3OTRBPjs8VTc5NEI+OzxVNzk0Rj47PFU3OTUxPjs8VTc5NTQ+Oy8KKwk8VTc5NTg+OzxVNzk1Qj47PFU3OTVDPjs8VTc5Njc+OzxVNzk2OT47PFU3OTZCPjs8VTc5NzI+OzxVNzk3OT47LworCTxVNzk3Qj47PFU3OTdDPjs8VTc5N0U+OzxVNzk4Qj47PFU3OThDPjs8VTc5OTE+OzxVNzk5Mz47PFU3OTk0PjsvCisJPFU3OTk1Pjs8VTc5OTY+OzxVNzk5OD47PFU3OTlCPjs8VTc5OUM+OzxVNzlBMT47PFU3OUE4Pjs8VTc5QTk+Oy8KKwk8VTc5QUI+OzxVNzlBRj47PFU3OUIxPjs8VTc5QjQ+OzxVNzlCOD47PFU3OUJCPjs8VTc5QzI+OzxVNzlDND47LworCTxVNzlDNz47PFU3OUM4Pjs8VTc5Q0E+OzxVNzlDRj47PFU3OUQ0Pjs8VTc5RDY+OzxVNzlEQT47PFU3OUREPjsvCisJPFU3OURFPjs8VTc5RTA+OzxVNzlFMj47PFU3OUU1Pjs8VTc5RUE+OzxVNzlFQj47PFU3OUVEPjs8VTc5RjE+Oy8KKwk8VTc5Rjg+OzxVNzlGQz47PFU3QTAyPjs8VTdBMDM+OzxVN0EwNz47PFU3QTA5Pjs8VTdBMEE+OzxVN0EwQz47LworCTxVN0ExMT47PFU3QTE1Pjs8VTdBMUI+OzxVN0ExRT47PFU3QTIxPjs8VTdBMjc+OzxVN0EyQj47PFU3QTJEPjsvCisJPFU3QTJGPjs8VTdBMzA+OzxVN0EzND47PFU3QTM1Pjs8VTdBMzg+OzxVN0EzOT47PFU3QTNBPjs8VTdBNDQ+Oy8KKwk8VTdBNDU+OzxVN0E0Nz47PFU3QTQ4Pjs8VTdBNEM+OzxVN0E1NT47PFU3QTU2Pjs8VTdBNTk+OzxVN0E1Qz47LworCTxVN0E1RD47PFU3QTVGPjs8VTdBNjA+OzxVN0E2NT47PFU3QTY3Pjs8VTdBNkE+OzxVN0E2RD47PFU3QTc1PjsvCisJPFU3QTc4Pjs8VTdBN0U+OzxVN0E4MD47PFU3QTgyPjs8VTdBODU+OzxVN0E4Nj47PFU3QThBPjs8VTdBOEI+Oy8KKwk8VTdBOTA+OzxVN0E5MT47PFU3QTk0Pjs8VTdBOUU+OzxVN0FBMD47PFU3QUEzPjs8VTdBQUM+OzxVN0FCMz47LworCTxVN0FCNT47PFU3QUI5Pjs8VTdBQkI+OzxVN0FCQz47PFU3QUM2Pjs8VTdBQzk+OzxVN0FDQz47PFU3QUNFPjsvCisJPFU3QUQxPjs8VTdBREI+OzxVN0FFOD47PFU3QUU5Pjs8VTdBRUI+OzxVN0FFQz47PFU3QUYxPjs8VTdBRjQ+Oy8KKwk8VTdBRkI+OzxVN0FGRD47PFU3QUZFPjs8VTdCMDc+OzxVN0IxND47PFU3QjFGPjs8VTdCMjM+OzxVN0IyNz47LworCTxVN0IyOT47PFU3QjJBPjs8VTdCMkI+OzxVN0IyRD47PFU3QjJFPjs8VTdCMkY+OzxVN0IzMD47PFU3QjMxPjsvCisJPFU3QjM0Pjs8VTdCM0Q+OzxVN0IzRj47PFU3QjQwPjs8VTdCNDE+OzxVN0I0Nz47PFU3QjRFPjs8VTdCNTU+Oy8KKwk8VTdCNjA+OzxVN0I2ND47PFU3QjY2Pjs8VTdCNjk+OzxVN0I2QT47PFU3QjZEPjs8VTdCNkY+OzxVN0I3Mj47LworCTxVN0I3Mz47PFU3Qjc3Pjs8VTdCODQ+OzxVN0I4OT47PFU3QjhFPjs8VTdCOTA+OzxVN0I5MT47PFU3Qjk2PjsvCisJPFU3QjlCPjs8VTdCOUU+OzxVN0JBMD47PFU3QkE1Pjs8VTdCQUM+OzxVN0JBRj47PFU3QkIwPjs8VTdCQjI+Oy8KKwk8VTdCQjU+OzxVN0JCNj47PFU3QkJBPjs8VTdCQkI+OzxVN0JCQz47PFU3QkJEPjs8VTdCQzI+OzxVN0JDNT47LworCTxVN0JDOD47PFU3QkNBPjs8VTdCRDQ+OzxVN0JENj47PFU3QkQ3Pjs8VTdCRDk+OzxVN0JEQT47PFU3QkRCPjsvCisJPFU3QkU4Pjs8VTdCRUE+OzxVN0JGMj47PFU3QkY0Pjs8VTdCRjU+OzxVN0JGOD47PFU3QkY5Pjs8VTdCRkE+Oy8KKwk8VTdCRkM+OzxVN0JGRT47PFU3QzAxPjs8VTdDMDI+OzxVN0MwMz47PFU3QzA0Pjs8VTdDMDY+OzxVN0MwOT47LworCTxVN0MwQj47PFU3QzBDPjs8VTdDMEU+OzxVN0MwRj47PFU3QzE5Pjs8VTdDMUI+OzxVN0MyMD47PFU3QzI1PjsvCisJPFU3QzI2Pjs8VTdDMjg+OzxVN0MyQz47PFU3QzMxPjs8VTdDMzM+OzxVN0MzND47PFU3QzM2Pjs8VTdDMzk+Oy8KKwk8VTdDM0E+OzxVN0M0Nj47PFU3QzRBPjs8VTdDNTU+OzxVN0M1MT47PFU3QzUyPjs8VTdDNTM+OzxVN0M1OT47LworCTxVN0M1QT47PFU3QzVCPjs8VTdDNUM+OzxVN0M1RD47PFU3QzVFPjs8VTdDNjE+OzxVN0M2Mz47PFU3QzY3PjsvCisJPFU3QzY5Pjs8VTdDNkQ+OzxVN0M2RT47PFU3QzcwPjs8VTdDNzI+OzxVN0M3OT47PFU3QzdDPjs8VTdDN0Q+Oy8KKwk8VTdDODY+OzxVN0M4Nz47PFU3QzhGPjs8VTdDOTQ+OzxVN0M5RT47PFU3Q0EwPjs8VTdDQTY+OzxVN0NCMD47LworCTxVN0NCNj47PFU3Q0I3Pjs8VTdDQkE+OzxVN0NCQj47PFU3Q0JDPjs8VTdDQkY+OzxVN0NDND47PFU3Q0M3PjsvCisJPFU3Q0M4Pjs8VTdDQzk+OzxVN0NDRD47PFU3Q0NGPjs8VTdDRDM+OzxVN0NEND47PFU3Q0Q1Pjs8VTdDRDc+Oy8KKwk8VTdDRDk+OzxVN0NEQT47PFU3Q0REPjs8VTdDRTY+OzxVN0NFOT47PFU3Q0VCPjs8VTdDRjU+OzxVN0QwMz47LworCTxVN0QwNz47PFU3RDA4Pjs8VTdEMDk+OzxVN0QwRj47PFU3RDExPjs8VTdEMTI+OzxVN0QxMz47PFU3RDE2PjsvCisJPFU3RDFEPjs8VTdEMUU+OzxVN0QyMz47PFU3RDI2Pjs8VTdEMkE+OzxVN0QyRD47PFU3RDMxPjs8VTdEM0M+Oy8KKwk8VTdEM0Q+OzxVN0QzRT47PFU3RDQwPjs8VTdENDE+OzxVN0Q0Nz47PFU3RDQ4Pjs8VTdENEQ+OzxVN0Q1MT47LworCTxVN0Q1Mz47PFU3RDU3Pjs8VTdENTk+OzxVN0Q1QT47PFU3RDVDPjs8VTdENUQ+OzxVN0Q2NT47PFU3RDY3PjsvCisJPFU3RDZBPjs8VTdENzA+OzxVN0Q3OD47PFU3RDdBPjs8VTdEN0I+OzxVN0Q3Rj47PFU3RDgxPjs8VTdEODI+Oy8KKwk8VTdEODM+OzxVN0Q4NT47PFU3RDg2Pjs8VTdEODg+OzxVN0Q4Qj47PFU3RDhDPjs8VTdEOEQ+OzxVN0Q5MT47LworCTxVN0Q5Nj47PFU3RDk3Pjs8VTdEOUQ+OzxVN0Q5RT47PFU3REE2Pjs8VTdEQTc+OzxVN0RBQT47PFU3REIzPjsvCisJPFU3REI2Pjs8VTdEQjc+OzxVN0RCOT47PFU3REMyPjs8VTdEQzM+OzxVN0RDND47PFU3REM1Pjs8VTdEQzY+Oy8KKwk8VTdEQ0M+OzxVN0RDRD47PFU3RENFPjs8VTdERDc+OzxVN0REOT47PFU3RTAwPjs8VTdERTI+OzxVN0RFNT47LworCTxVN0RFNj47PFU3REVBPjs8VTdERUI+OzxVN0RFRD47PFU3REYxPjs8VTdERjU+OzxVN0RGNj47PFU3REY5PjsvCisJPFU3REZBPjs8VTdFMDg+OzxVN0UxMD47PFU3RTExPjs8VTdFMTU+OzxVN0UxNz47PFU3RTFDPjs8VTdFMUQ+Oy8KKwk8VTdFMjA+OzxVN0UyNz47PFU3RTI4Pjs8VTdFMkM+OzxVN0UyRD47PFU3RTJGPjs8VTdFMzM+OzxVN0UzNj47LworCTxVN0UzRj47PFU3RTQ0Pjs8VTdFNDU+OzxVN0U0Nz47PFU3RTRFPjs8VTdFNTA+OzxVN0U1Mj47PFU3RTU4PjsvCisJPFU3RTVGPjs8VTdFNjE+OzxVN0U2Mj47PFU3RTY1Pjs8VTdFNkI+OzxVN0U2RT47PFU3RTZGPjs8VTdFNzM+Oy8KKwk8VTdFNzg+OzxVN0U3RT47PFU3RTgxPjs8VTdFODY+OzxVN0U4Nz47PFU3RThBPjs8VTdFOEQ+OzxVN0U5MT47LworCTxVN0U5NT47PFU3RTk4Pjs8VTdFOUE+OzxVN0U5RD47PFU3RTlFPjs8VTdGM0M+OzxVN0YzQj47PFU3RjNEPjsvCisJPFU3RjNFPjs8VTdGM0Y+OzxVN0Y0Mz47PFU3RjQ0Pjs8VTdGNDc+OzxVN0Y0Rj47PFU3RjUyPjs8VTdGNTM+Oy8KKwk8VTdGNUI+OzxVN0Y1Qz47PFU3RjVEPjs8VTdGNjE+OzxVN0Y2Mz47PFU3RjY0Pjs8VTdGNjU+OzxVN0Y2Nj47LworCTxVN0Y2RD47PFU3RjcxPjs8VTdGN0Q+OzxVN0Y3RT47PFU3RjdGPjs8VTdGODA+OzxVN0Y4Qj47PFU3RjhEPjsvCisJPFU3RjhGPjs8VTdGOTA+OzxVN0Y5MT47PFU3Rjk2Pjs8VTdGOTc+OzxVN0Y5Qz47PFU3RkExPjs8VTdGQTI+Oy8KKwk8VTdGQTY+OzxVN0ZBQT47PFU3RkFEPjs8VTdGQjQ+OzxVN0ZCQz47PFU3RkJGPjs8VTdGQzA+OzxVN0ZDMz47LworCTxVN0ZDOD47PFU3RkNFPjs8VTdGQ0Y+OzxVN0ZEQj47PFU3RkRGPjs8VTdGRTM+OzxVN0ZFNT47PFU3RkU4PjsvCisJPFU3RkVDPjs8VTdGRUU+OzxVN0ZFRj47PFU3RkYyPjs8VTdGRkE+OzxVN0ZGRD47PFU3RkZFPjs8VTdGRkY+Oy8KKwk8VTgwMDc+OzxVODAwOD47PFU4MDBBPjs8VTgwMEQ+OzxVODAwRT47PFU4MDBGPjs8VTgwMTE+OzxVODAxMz47LworCTxVODAxND47PFU4MDE2Pjs8VTgwMUQ+OzxVODAxRT47PFU4MDFGPjs8VTgwMjA+OzxVODAyND47PFU4MDI2PjsvCisJPFU4MDJDPjs8VTgwMkU+OzxVODAzMD47PFU4MDM0Pjs8VTgwMzU+OzxVODAzNz47PFU4MDM5Pjs8VTgwM0E+Oy8KKwk8VTgwM0M+OzxVODAzRT47PFU4MDQwPjs8VTgwNDQ+OzxVODA2MD47PFU4MDY0Pjs8VTgwNjY+OzxVODA2RD47LworCTxVODA3MT47PFU4MDc1Pjs8VTgwODE+OzxVODA4OD47PFU4MDhFPjs8VTgwOUM+OzxVODA5RT47PFU4MEE2PjsvCisJPFU4MEE3Pjs8VTgwQUI+OzxVODBCOD47PFU4MEI5Pjs8VTgwQzg+OzxVODBDRD47PFU4MENGPjs8VTgwRDI+Oy8KKwk8VTgwRDQ+OzxVODBENT47PFU4MEQ3Pjs8VTgwRDg+OzxVODBFMD47PFU4MEVEPjs8VTgwRUU+OzxVODBGMD47LworCTxVODBGMj47PFU4MEYzPjs8VTgwRjY+OzxVODBGOT47PFU4MEZBPjs8VTgwRkU+OzxVODEwMz47PFU4MTBCPjsvCisJPFU4MTE2Pjs8VTgxMTc+OzxVODExOD47PFU4MTFDPjs8VTgxMUU+OzxVODEyMD47PFU4MTI0Pjs8VTgxMjc+Oy8KKwk8VTgxMkM+OzxVODEzMD47PFU4MTM1Pjs8VTgxM0E+OzxVODEzQz47PFU4MTQ1Pjs8VTgxNDc+OzxVODE0QT47LworCTxVODE0Qz47PFU4MTUyPjs8VTgxNTc+OzxVODE2MD47PFU4MTYxPjs8VTgxNjc+OzxVODE2OD47PFU4MTY5PjsvCisJPFU4MTZEPjs8VTgxNkY+OzxVODE3Nz47PFU4MTgxPjs8VTgxOTA+OzxVODE4ND47PFU4MTg1Pjs8VTgxODY+Oy8KKwk8VTgxOEI+OzxVODE4RT47PFU4MTk2Pjs8VTgxOTg+OzxVODE5Qj47PFU4MTlFPjs8VTgxQTI+OzxVODFBRT47LworCTxVODFCMj47PFU4MUI0Pjs8VTgxQkI+OzxVODFDQj47PFU4MUMzPjs8VTgxQzU+OzxVODFDQT47PFU4MUNFPjsvCisJPFU4MUNGPjs8VTgxRDU+OzxVODFENz47PFU4MURCPjs8VTgxREQ+OzxVODFERT47PFU4MUUxPjs8VTgxRTQ+Oy8KKwk8VTgxRUI+OzxVODFFQz47PFU4MUYwPjs8VTgxRjE+OzxVODFGMj47PFU4MUY1Pjs8VTgxRjY+OzxVODFGOD47LworCTxVODFGOT47PFU4MUZEPjs8VTgxRkY+OzxVODIwMD47PFU4MjAzPjs8VTgyMEY+OzxVODIxMz47PFU4MjE0PjsvCisJPFU4MjE5Pjs8VTgyMUE+OzxVODIxRD47PFU4MjIxPjs8VTgyMjI+OzxVODIyOD47PFU4MjMyPjs8VTgyMzQ+Oy8KKwk8VTgyM0E+OzxVODI0Mz47PFU4MjQ0Pjs8VTgyNDU+OzxVODI0Nj47PFU4MjRCPjs8VTgyNEU+OzxVODI0Rj47LworCTxVODI1MT47PFU4MjU2Pjs8VTgyNUM+OzxVODI2MD47PFU4MjYzPjs8VTgyNjc+OzxVODI2RD47PFU4Mjc0PjsvCisJPFU4MjdCPjs8VTgyN0Q+OzxVODI3Rj47PFU4MjgwPjs8VTgyODE+OzxVODI4Mz47PFU4Mjg0Pjs8VTgyODc+Oy8KKwk8VTgyODk+OzxVODI4QT47PFU4MjhFPjs8VTgyOTE+OzxVODI5ND47PFU4Mjk2Pjs8VTgyOTg+OzxVODI5QT47LworCTxVODI5Qj47PFU4MkEwPjs8VTgyQTE+OzxVODJBMz47PFU4MkE0Pjs8VTgyQTc+OzxVODJBOD47PFU4MkE5PjsvCisJPFU4MkFBPjs8VTgyQUU+OzxVODJCMD47PFU4MkIyPjs8VTgyQjQ+OzxVODJCNz47PFU4MkJBPjs8VTgyQkM+Oy8KKwk8VTgyQkU+OzxVODJCRj47PFU4MkM2Pjs8VTgyRDA+OzxVODJENT47PFU4MkRBPjs8VTgyRTA+OzxVODJFMj47LworCTxVODJFND47PFU4MkU4Pjs8VTgyRUE+OzxVODJFRD47PFU4MkVGPjs8VTgyRjY+OzxVODJGNz47PFU4MkZEPjsvCisJPFU4MkZFPjs8VTgzMDA+OzxVODMwMT47PFU4MzA3Pjs8VTgzMDg+OzxVODMwQT47PFU4MzBCPjs8VTgzNTQ+Oy8KKwk8VTgzMUI+OzxVODMxRD47PFU4MzFFPjs8VTgzMUY+OzxVODMyMT47PFU4MzIyPjs8VTgzMkM+OzxVODMyRD47LworCTxVODMyRT47PFU4MzMwPjs8VTgzMzM+OzxVODMzNz47PFU4MzNBPjs8VTgzM0M+OzxVODMzRD47PFU4MzQyPjsvCisJPFU4MzQzPjs8VTgzNDQ+OzxVODM0Nz47PFU4MzREPjs8VTgzNEU+OzxVODM1MT47PFU4MzU1Pjs8VTgzNTY+Oy8KKwk8VTgzNTc+OzxVODM3MD47PFU4Mzc4Pjs8VTgzN0Q+OzxVODM3Rj47PFU4MzgwPjs8VTgzODI+OzxVODM4ND47LworCTxVODM4Nj47PFU4MzhEPjs8VTgzOTI+OzxVODM5ND47PFU4Mzk1Pjs8VTgzOTg+OzxVODM5OT47PFU4MzlCPjsvCisJPFU4MzlDPjs8VTgzOUQ+OzxVODNBNj47PFU4M0E3Pjs8VTgzQTk+OzxVODNBQz47PFU4M0JFPjs8VTgzQkY+Oy8KKwk8VTgzQzA+OzxVODNDNz47PFU4M0M5Pjs8VTgzQ0Y+OzxVODNEMD47PFU4M0QxPjs8VTgzRDQ+OzxVODNERD47LworCTxVODM1Mz47PFU4M0U4Pjs8VTgzRUE+OzxVODNGNj47PFU4M0Y4Pjs8VTgzRjk+OzxVODNGQz47PFU4NDAxPjsvCisJPFU4NDA2Pjs8VTg0MEE+OzxVODQwRj47PFU4NDExPjs8VTg0MTU+OzxVODQxOT47PFU4M0FEPjs8VTg0MkY+Oy8KKwk8VTg0Mzk+OzxVODQ0NT47PFU4NDQ3Pjs8VTg0NDg+OzxVODQ0QT47PFU4NDREPjs8VTg0NEY+OzxVODQ1MT47LworCTxVODQ1Mj47PFU4NDU2Pjs8VTg0NTg+OzxVODQ1OT47PFU4NDVBPjs8VTg0NUM+OzxVODQ2MD47PFU4NDY0PjsvCisJPFU4NDY1Pjs8VTg0Njc+OzxVODQ2QT47PFU4NDcwPjs8VTg0NzM+OzxVODQ3ND47PFU4NDc2Pjs8VTg0Nzg+Oy8KKwk8VTg0N0M+OzxVODQ3RD47PFU4NDgxPjs8VTg0ODU+OzxVODQ5Mj47PFU4NDkzPjs8VTg0OTU+OzxVODQ5RT47LworCTxVODRBNj47PFU4NEE4Pjs8VTg0QTk+OzxVODRBQT47PFU4NEFGPjs8VTg0QjE+OzxVODRCND47PFU4NEJBPjsvCisJPFU4NEJEPjs8VTg0QkU+OzxVODRDMD47PFU4NEMyPjs8VTg0Qzc+OzxVODRDOD47PFU4NENDPjs8VTg0Q0Y+Oy8KKwk8VTg0RDM+OzxVODREQz47PFU4NEU3Pjs8VTg0RUE+OzxVODRFRj47PFU4NEYwPjs8VTg0RjE+OzxVODRGMj47LworCTxVODRGNz47PFU4NTMyPjs8VTg0RkE+OzxVODRGQj47PFU4NEZEPjs8VTg1MDI+OzxVODUwMz47PFU4NTA3PjsvCisJPFU4NTBDPjs8VTg1MEU+OzxVODUxMD47PFU4NTFDPjs8VTg1MUU+OzxVODUyMj47PFU4NTIzPjs8VTg1MjQ+Oy8KKwk8VTg1MjU+OzxVODUyNz47PFU4NTJBPjs8VTg1MkI+OzxVODUyRj47PFU4NTMzPjs8VTg1MzQ+OzxVODUzNj47LworCTxVODUzRj47PFU4NTQ2Pjs8VTg1NEY+OzxVODU1MD47PFU4NTUxPjs8VTg1NTI+OzxVODU1Mz47PFU4NTU2PjsvCisJPFU4NTU5Pjs8VTg1NUM+OzxVODU1RD47PFU4NTVFPjs8VTg1NUY+OzxVODU2MD47PFU4NTYxPjs8VTg1NjI+Oy8KKwk8VTg1NjQ+OzxVODU2Qj47PFU4NTZGPjs8VTg1Nzk+OzxVODU3QT47PFU4NTdCPjs8VTg1N0Q+OzxVODU3Rj47LworCTxVODU4MT47PFU4NTg1Pjs8VTg1ODY+OzxVODU4OT47PFU4NThCPjs8VTg1OEM+OzxVODU4Rj47PFU4NTkzPjsvCisJPFU4NTk4Pjs8VTg1OUQ+OzxVODU5Rj47PFU4NUEwPjs8VTg1QTI+OzxVODVBNT47PFU4NUE3Pjs8VTg1QjQ+Oy8KKwk8VTg1QjY+OzxVODVCNz47PFU4NUI4Pjs8VTg1QkM+OzxVODVCRD47PFU4NUJFPjs8VTg1QkY+OzxVODVDMj47LworCTxVODVDNz47PFU4NUNBPjs8VTg1Q0I+OzxVODVDRT47PFU4NUFEPjs8VTg1RDg+OzxVODVEQT47PFU4NURGPjsvCisJPFU4NUUwPjs8VTg1RTY+OzxVODVFOD47PFU4NUVEPjs8VTg1RjM+OzxVODVGNj47PFU4NUZDPjs8VTg1RkY+Oy8KKwk8VTg2MDA+OzxVODYwND47PFU4NjA1Pjs8VTg2MEQ+OzxVODYwRT47PFU4NjEwPjs8VTg2MTE+OzxVODYxMj47LworCTxVODYxOD47PFU4NjE5Pjs8VTg2MUI+OzxVODYxRT47PFU4NjIxPjs8VTg2Mjc+OzxVODYyOT47PFU4NjM2PjsvCisJPFU4NjM4Pjs8VTg2M0E+OzxVODYzQz47PFU4NjNEPjs8VTg2NDA+OzxVODY0Mj47PFU4NjQ2Pjs8VTg2NTI+Oy8KKwk8VTg2NTM+OzxVODY1Nj47PFU4NjU3Pjs8VTg2NTg+OzxVODY1OT47PFU4NjVEPjs8VTg2NjA+OzxVODY2MT47LworCTxVODY2Mj47PFU4NjYzPjs8VTg2NjQ+OzxVODY2OT47PFU4NjZDPjs8VTg2NkY+OzxVODY3NT47PFU4Njc2PjsvCisJPFU4Njc3Pjs8VTg2N0E+OzxVODY4RD47PFU4NjkxPjs8VTg2OTY+OzxVODY5OD47PFU4NjlBPjs8VTg2OUM+Oy8KKwk8VTg2QTE+OzxVODZBNj47PFU4NkE3Pjs8VTg2QTg+OzxVODZBRD47PFU4NkIxPjs8VTg2QjM+OzxVODZCND47LworCTxVODZCNT47PFU4NkI3Pjs8VTg2Qjg+OzxVODZCOT47PFU4NkJGPjs8VTg2QzA+OzxVODZDMT47PFU4NkMzPjsvCisJPFU4NkM1Pjs8VTg2RDE+OzxVODZEMj47PFU4NkQ1Pjs8VTg2RDc+OzxVODZEQT47PFU4NkRDPjs8VTg2RTA+Oy8KKwk8VTg2RTM+OzxVODZFNT47PFU4NkU3Pjs8VTg2ODg+OzxVODZGQT47PFU4NkZDPjs8VTg2RkQ+OzxVODcwND47LworCTxVODcwNT47PFU4NzA3Pjs8VTg3MEI+OzxVODcwRT47PFU4NzBGPjs8VTg3MTA+OzxVODcxMz47PFU4NzE0PjsvCisJPFU4NzE5Pjs8VTg3MUU+OzxVODcxRj47PFU4NzIxPjs8VTg3MjM+OzxVODcyOD47PFU4NzJFPjs8VTg3MkY+Oy8KKwk8VTg3MzE+OzxVODczMj47PFU4NzM5Pjs8VTg3M0E+OzxVODczQz47PFU4NzNEPjs8VTg3M0U+OzxVODc0MD47LworCTxVODc0Mz47PFU4NzQ1Pjs8VTg3NEQ+OzxVODc1OD47PFU4NzVEPjs8VTg3NjE+OzxVODc2ND47PFU4NzY1PjsvCisJPFU4NzZGPjs8VTg3NzE+OzxVODc3Mj47PFU4NzdCPjs8VTg3ODM+OzxVODc4ND47PFU4Nzg1Pjs8VTg3ODY+Oy8KKwk8VTg3ODc+OzxVODc4OD47PFU4Nzg5Pjs8VTg3OEI+OzxVODc4Qz47PFU4NzkwPjs8VTg3OTM+OzxVODc5NT47LworCTxVODc5Nz47PFU4Nzk4Pjs8VTg3OTk+OzxVODc5RT47PFU4N0EwPjs8VTg3QTM+OzxVODdBNz47PFU4N0FDPjsvCisJPFU4N0FEPjs8VTg3QUU+OzxVODdCMT47PFU4N0I1Pjs8VTg3QkU+OzxVODdCRj47PFU4N0MxPjs8VTg3Qzg+Oy8KKwk8VTg3Qzk+OzxVODdDQT47PFU4N0NFPjs8VTg3RDU+OzxVODdENj47PFU4N0Q5Pjs8VTg3REE+OzxVODdEQz47LworCTxVODdERj47PFU4N0UyPjs8VTg3RTM+OzxVODdFND47PFU4N0VBPjs8VTg3RUI+OzxVODdFRD47PFU4N0YxPjsvCisJPFU4N0YzPjs8VTg3Rjg+OzxVODdGQT47PFU4N0ZGPjs8VTg4MDE+OzxVODgwMz47PFU4ODA2Pjs8VTg4MDk+Oy8KKwk8VTg4MEE+OzxVODgwQj47PFU4ODEwPjs8VTg4MTk+OzxVODgxMj47PFU4ODEzPjs8VTg4MTQ+OzxVODgxOD47LworCTxVODgxQT47PFU4ODFCPjs8VTg4MUM+OzxVODgxRT47PFU4ODFGPjs8VTg4Mjg+OzxVODgyRD47PFU4ODJFPjsvCisJPFU4ODMwPjs8VTg4MzI+OzxVODgzNT47PFU4ODNBPjs8VTg4M0M+OzxVODg0MT47PFU4ODQzPjs8VTg4NDU+Oy8KKwk8VTg4NDg+OzxVODg0OT47PFU4ODRBPjs8VTg4NEI+OzxVODg0RT47PFU4ODUxPjs8VTg4NTU+OzxVODg1Nj47LworCTxVODg1OD47PFU4ODVBPjs8VTg4NUM+OzxVODg1Rj47PFU4ODYwPjs8VTg4NjQ+OzxVODg2OT47PFU4ODcxPjsvCisJPFU4ODc5Pjs8VTg4N0I+OzxVODg4MD47PFU4ODk4Pjs8VTg4OUE+OzxVODg5Qj47PFU4ODlDPjs8VTg4OUY+Oy8KKwk8VTg4QTA+OzxVODhBOD47PFU4OEFBPjs8VTg4QkE+OzxVODhCRD47PFU4OEJFPjs8VTg4QzA+OzxVODhDQT47LworCTxVODhDQj47PFU4OENDPjs8VTg4Q0Q+OzxVODhDRT47PFU4OEQxPjs8VTg4RDI+OzxVODhEMz47PFU4OERCPjsvCisJPFU4OERFPjs8VTg4RTc+OzxVODhFRj47PFU4OEYwPjs8VTg4RjE+OzxVODhGNT47PFU4OEY3Pjs8VTg5MDE+Oy8KKwk8VTg5MDY+OzxVODkwRD47PFU4OTBFPjs8VTg5MEY+OzxVODkxNT47PFU4OTE2Pjs8VTg5MTg+OzxVODkxOT47LworCTxVODkxQT47PFU4OTFDPjs8VTg5MjA+OzxVODkyNj47PFU4OTI3Pjs8VTg5Mjg+OzxVODkzMD47PFU4OTMxPjsvCisJPFU4OTMyPjs8VTg5MzU+OzxVODkzOT47PFU4OTNBPjs8VTg5M0U+OzxVODk0MD47PFU4OTQyPjs8VTg5NDU+Oy8KKwk8VTg5NDY+OzxVODk0OT47PFU4OTRGPjs8VTg5NTI+OzxVODk1Nz47PFU4OTVBPjs8VTg5NUI+OzxVODk1Qz47LworCTxVODk2MT47PFU4OTYyPjs8VTg5NjM+OzxVODk2Qj47PFU4OTZFPjs8VTg5NzA+OzxVODk3Mz47PFU4OTc1PjsvCisJPFU4OTdBPjs8VTg5N0I+OzxVODk3Qz47PFU4OTdEPjs8VTg5ODk+OzxVODk4RD47PFU4OTkwPjs8VTg5OTQ+Oy8KKwk8VTg5OTU+OzxVODk5Qj47PFU4OTlDPjs8VTg5OUY+OzxVODlBMD47PFU4OUE1Pjs8VTg5QjA+OzxVODlCND47LworCTxVODlCNT47PFU4OUI2Pjs8VTg5Qjc+OzxVODlCQz47PFU4OUQ0Pjs8VTg5RDU+OzxVODlENj47PFU4OUQ3PjsvCisJPFU4OUQ4Pjs8VTg5RTU+OzxVODlFOT47PFU4OUVCPjs8VTg5RUQ+OzxVODlGMT47PFU4OUYzPjs8VTg5RjY+Oy8KKwk8VTg5Rjk+OzxVODlGRD47PFU4OUZGPjs8VThBMDQ+OzxVOEEwNT47PFU4QTA3Pjs8VThBMEY+OzxVOEExMT47LworCTxVOEExMj47PFU4QTE0Pjs8VThBMTU+OzxVOEExRT47PFU4QTIwPjs8VThBMjI+OzxVOEEyND47PFU4QTI2PjsvCisJPFU4QTJCPjs8VThBMkM+OzxVOEEyRj47PFU4QTM1Pjs8VThBMzc+OzxVOEEzRD47PFU4QTNFPjs8VThBNDA+Oy8KKwk8VThBNDM+OzxVOEE0NT47PFU4QTQ3Pjs8VThBNDk+OzxVOEE0RD47PFU4QTRFPjs8VThBNTM+OzxVOEE1Nj47LworCTxVOEE1Nz47PFU4QTU4Pjs8VThBNUM+OzxVOEE1RD47PFU4QTYxPjs8VThBNjU+OzxVOEE2Nz47PFU4QTc1PjsvCisJPFU4QTc2Pjs8VThBNzc+OzxVOEE3OT47PFU4QTdBPjs8VThBN0I+OzxVOEE3RT47PFU4QTdGPjs8VThBODA+Oy8KKwk8VThBODM+OzxVOEE4Nj47PFU4QThCPjs8VThBOEY+OzxVOEE5MD47PFU4QTkyPjs8VThBOTY+OzxVOEE5Nz47LworCTxVOEE5OT47PFU4QTlGPjs8VThBQTc+OzxVOEFBOT47PFU4QUFFPjs8VThBQUY+OzxVOEFCMz47PFU4QUI2PjsvCisJPFU4QUI3Pjs8VThBQkI+OzxVOEFCRT47PFU4QUMzPjs8VThBQzY+OzxVOEFDOD47PFU4QUM5Pjs8VThBQ0E+Oy8KKwk8VThBRDE+OzxVOEFEMz47PFU4QUQ0Pjs8VThBRDU+OzxVOEFENz47PFU4QUREPjs8VThBREY+OzxVOEFFQz47LworCTxVOEFGMD47PFU4QUY0Pjs8VThBRjU+OzxVOEFGNj47PFU4QUZDPjs8VThBRkY+OzxVOEIwNT47PFU4QjA2PjsvCisJPFU4QjBCPjs8VThCMTE+OzxVOEIxQz47PFU4QjFFPjs8VThCMUY+OzxVOEIwQT47PFU4QjJEPjs8VThCMzA+Oy8KKwk8VThCMzc+OzxVOEIzQz47PFU4QjQyPjs8VThCNDM+OzxVOEI0ND47PFU4QjQ1Pjs8VThCNDY+OzxVOEI0OD47LworCTxVOEI1Mj47PFU4QjUzPjs8VThCNTQ+OzxVOEI1OT47PFU4QjREPjs8VThCNUU+OzxVOEI2Mz47PFU4QjZEPjsvCisJPFU4Qjc2Pjs8VThCNzg+OzxVOEI3OT47PFU4QjdDPjs8VThCN0U+OzxVOEI4MT47PFU4Qjg0Pjs8VThCODU+Oy8KKwk8VThCOEI+OzxVOEI4RD47PFU4QjhGPjs8VThCOTQ+OzxVOEI5NT47PFU4QjlDPjs8VThCOUU+OzxVOEI5Rj47LworCTxVOEMzOD47PFU4QzM5Pjs8VThDM0Q+OzxVOEMzRT47PFU4QzQ1Pjs8VThDNDc+OzxVOEM0OT47PFU4QzRCPjsvCisJPFU4QzRGPjs8VThDNTE+OzxVOEM1Mz47PFU4QzU0Pjs8VThDNTc+OzxVOEM1OD47PFU4QzVCPjs8VThDNUQ+Oy8KKwk8VThDNTk+OzxVOEM2Mz47PFU4QzY0Pjs8VThDNjY+OzxVOEM2OD47PFU4QzY5Pjs8VThDNkQ+OzxVOEM3Mz47LworCTxVOEM3NT47PFU4Qzc2Pjs8VThDN0I+OzxVOEM3RT47PFU4Qzg2Pjs8VThDODc+OzxVOEM4Qj47PFU4QzkwPjsvCisJPFU4QzkyPjs8VThDOTM+OzxVOEM5OT47PFU4QzlCPjs8VThDOUM+OzxVOENBND47PFU4Q0I5Pjs8VThDQkE+Oy8KKwk8VThDQzU+OzxVOENDNj47PFU4Q0M5Pjs8VThDQ0I+OzxVOENDRj47PFU4Q0Q2Pjs8VThDRDU+OzxVOENEOT47LworCTxVOENERD47PFU4Q0UxPjs8VThDRTg+OzxVOENFQz47PFU4Q0VGPjs8VThDRjA+OzxVOENGMj47PFU4Q0Y1PjsvCisJPFU4Q0Y3Pjs8VThDRjg+OzxVOENGRT47PFU4Q0ZGPjs8VThEMDE+OzxVOEQwMz47PFU4RDA5Pjs8VThEMTI+Oy8KKwk8VThEMTc+OzxVOEQxQj47PFU4RDY1Pjs8VThENjk+OzxVOEQ2Qz47PFU4RDZFPjs8VThEN0Y+OzxVOEQ4Mj47LworCTxVOEQ4ND47PFU4RDg4Pjs8VThEOEQ+OzxVOEQ5MD47PFU4RDkxPjs8VThEOTU+OzxVOEQ5RT47PFU4RDlGPjsvCisJPFU4REEwPjs8VThEQTY+OzxVOERBQj47PFU4REFDPjs8VThEQUY+OzxVOERCMj47PFU4REI1Pjs8VThEQjc+Oy8KKwk8VThEQjk+OzxVOERCQj47PFU4REMwPjs8VThEQzU+OzxVOERDNj47PFU4REM3Pjs8VThEQzg+OzxVOERDQT47LworCTxVOERDRT47PFU4REQxPjs8VThERDQ+OzxVOERENT47PFU4REQ3Pjs8VThERDk+OzxVOERFND47PFU4REU1PjsvCisJPFU4REU3Pjs8VThERUM+OzxVOERGMD47PFU4REJDPjs8VThERjE+OzxVOERGMj47PFU4REY0Pjs8VThERkQ+Oy8KKwk8VThFMDE+OzxVOEUwND47PFU4RTA1Pjs8VThFMDY+OzxVOEUwQj47PFU4RTExPjs8VThFMTQ+OzxVOEUxNj47LworCTxVOEUyMD47PFU4RTIxPjs8VThFMjI+OzxVOEUyMz47PFU4RTI2Pjs8VThFMjc+OzxVOEUzMT47PFU4RTMzPjsvCisJPFU4RTM2Pjs8VThFMzc+OzxVOEUzOD47PFU4RTM5Pjs8VThFM0Q+OzxVOEU0MD47PFU4RTQxPjs8VThFNEI+Oy8KKwk8VThFNEQ+OzxVOEU0RT47PFU4RTRGPjs8VThFNTQ+OzxVOEU1Qj47PFU4RTVDPjs8VThFNUQ+OzxVOEU1RT47LworCTxVOEU2MT47PFU4RTYyPjs8VThFNjk+OzxVOEU2Qz47PFU4RTZEPjs8VThFNkY+OzxVOEU3MD47PFU4RTcxPjsvCisJPFU4RTc5Pjs8VThFN0E+OzxVOEU3Qj47PFU4RTgyPjs8VThFODM+OzxVOEU4OT47PFU4RTkwPjs8VThFOTI+Oy8KKwk8VThFOTU+OzxVOEU5QT47PFU4RTlCPjs8VThFOUQ+OzxVOEU5RT47PFU4RUEyPjs8VThFQTc+OzxVOEVBOT47LworCTxVOEVBRD47PFU4RUFFPjs8VThFQjM+OzxVOEVCNT47PFU4RUJBPjs8VThFQkI+OzxVOEVDMD47PFU4RUMxPjsvCisJPFU4RUMzPjs8VThFQzQ+OzxVOEVDNz47PFU4RUNGPjs8VThFRDE+OzxVOEVEND47PFU4RURDPjs8VThFRTg+Oy8KKwk8VThFRUU+OzxVOEVGMD47PFU4RUYxPjs8VThFRjc+OzxVOEVGOT47PFU4RUZBPjs8VThFRUQ+OzxVOEYwMD47LworCTxVOEYwMj47PFU4RjA3Pjs8VThGMDg+OzxVOEYwRj47PFU4RjEwPjs8VThGMTY+OzxVOEYxNz47PFU4RjE4PjsvCisJPFU4RjFFPjs8VThGMjA+OzxVOEYyMT47PFU4RjIzPjs8VThGMjU+OzxVOEYyNz47PFU4RjI4Pjs8VThGMkM+Oy8KKwk8VThGMkQ+OzxVOEYyRT47PFU4RjM0Pjs8VThGMzU+OzxVOEYzNj47PFU4RjM3Pjs8VThGM0E+OzxVOEY0MD47LworCTxVOEY0MT47PFU4RjQzPjs8VThGNDc+OzxVOEY0Rj47PFU4RjUxPjs8VThGNTI+OzxVOEY1Mz47PFU4RjU0PjsvCisJPFU4RjU1Pjs8VThGNTg+OzxVOEY1RD47PFU4RjVFPjs8VThGNjU+OzxVOEY5RD47PFU4RkEwPjs8VThGQTE+Oy8KKwk8VThGQTQ+OzxVOEZBNT47PFU4RkE2Pjs8VThGQjU+OzxVOEZCNj47PFU4RkI4Pjs8VThGQkU+OzxVOEZDMD47LworCTxVOEZDMT47PFU4RkM2Pjs8VThGQ0E+OzxVOEZDQj47PFU4RkNEPjs8VThGRDA+OzxVOEZEMj47PFU4RkQzPjsvCisJPFU4RkQ1Pjs8VThGRTA+OzxVOEZFMz47PFU4RkU0Pjs8VThGRTg+OzxVOEZFRT47PFU4RkYxPjs8VThGRjU+Oy8KKwk8VThGRjY+OzxVOEZGQj47PFU4RkZFPjs8VTkwMDI+OzxVOTAwND47PFU5MDA4Pjs8VTkwMEM+OzxVOTAxOD47LworCTxVOTAxQj47PFU5MDI4Pjs8VTkwMjk+OzxVOTAyRj47PFU5MDJBPjs8VTkwMkM+OzxVOTAyRD47PFU5MDMzPjsvCisJPFU5MDM0Pjs8VTkwMzc+OzxVOTAzRj47PFU5MDQzPjs8VTkwNDQ+OzxVOTA0Qz47PFU5MDVCPjs8VTkwNUQ+Oy8KKwk8VTkwNjI+OzxVOTA2Nj47PFU5MDY3Pjs8VTkwNkM+OzxVOTA3MD47PFU5MDc0Pjs8VTkwNzk+OzxVOTA4NT47LworCTxVOTA4OD47PFU5MDhCPjs8VTkwOEM+OzxVOTA4RT47PFU5MDkwPjs8VTkwOTU+OzxVOTA5Nz47PFU5MDk4PjsvCisJPFU5MDk5Pjs8VTkwOUI+OzxVOTBBMD47PFU5MEExPjs8VTkwQTI+OzxVOTBBNT47PFU5MEIwPjs8VTkwQjI+Oy8KKwk8VTkwQjM+OzxVOTBCND47PFU5MEI2Pjs8VTkwQkQ+OzxVOTBDQz47PFU5MEJFPjs8VTkwQzM+OzxVOTBDND47LworCTxVOTBDNT47PFU5MEM3Pjs8VTkwQzg+OzxVOTBENT47PFU5MEQ3Pjs8VTkwRDg+OzxVOTBEOT47PFU5MERDPjsvCisJPFU5MEREPjs8VTkwREY+OzxVOTBFNT47PFU5MEQyPjs8VTkwRjY+OzxVOTBFQj47PFU5MEVGPjs8VTkwRjA+Oy8KKwk8VTkwRjQ+OzxVOTBGRT47PFU5MEZGPjs8VTkxMDA+OzxVOTEwND47PFU5MTA1Pjs8VTkxMDY+OzxVOTEwOD47LworCTxVOTEwRD47PFU5MTEwPjs8VTkxMTQ+OzxVOTExNj47PFU5MTE3Pjs8VTkxMTg+OzxVOTExQT47PFU5MTFDPjsvCisJPFU5MTFFPjs8VTkxMjA+OzxVOTEyNT47PFU5MTIyPjs8VTkxMjM+OzxVOTEyNz47PFU5MTI5Pjs8VTkxMkU+Oy8KKwk8VTkxMkY+OzxVOTEzMT47PFU5MTM0Pjs8VTkxMzY+OzxVOTEzNz47PFU5MTM5Pjs8VTkxM0E+OzxVOTEzQz47LworCTxVOTEzRD47PFU5MTQzPjs8VTkxNDc+OzxVOTE0OD47PFU5MTRGPjs8VTkxNTM+OzxVOTE1Nz47PFU5MTU5PjsvCisJPFU5MTVBPjs8VTkxNUI+OzxVOTE2MT47PFU5MTY0Pjs8VTkxNjc+OzxVOTE2RD47PFU5MTc0Pjs8VTkxNzk+Oy8KKwk8VTkxN0E+OzxVOTE3Qj47PFU5MTgxPjs8VTkxODM+OzxVOTE4NT47PFU5MTg2Pjs8VTkxOEE+OzxVOTE4RT47LworCTxVOTE5MT47PFU5MTkzPjs8VTkxOTQ+OzxVOTE5NT47PFU5MTk4Pjs8VTkxOUU+OzxVOTFBMT47PFU5MUE2PjsvCisJPFU5MUE4Pjs8VTkxQUM+OzxVOTFBRD47PFU5MUFFPjs8VTkxQjA+OzxVOTFCMT47PFU5MUIyPjs8VTkxQjM+Oy8KKwk8VTkxQjY+OzxVOTFCQj47PFU5MUJDPjs8VTkxQkQ+OzxVOTFCRj47PFU5MUMyPjs8VTkxQzM+OzxVOTFDNT47LworCTxVOTFEMz47PFU5MUQ0Pjs8VTkxRDc+OzxVOTFEOT47PFU5MURBPjs8VTkxREU+OzxVOTFFND47PFU5MUU1PjsvCisJPFU5MUU5Pjs8VTkxRUE+OzxVOTFFQz47PFU5MUVEPjs8VTkxRUU+OzxVOTFFRj47PFU5MUYwPjs8VTkxRjE+Oy8KKwk8VTkxRjc+OzxVOTFGOT47PFU5MUZCPjs8VTkxRkQ+OzxVOTIwMD47PFU5MjAxPjs8VTkyMDQ+OzxVOTIwNT47LworCTxVOTIwNj47PFU5MjA3Pjs8VTkyMDk+OzxVOTIwQT47PFU5MjBDPjs8VTkyMTA+OzxVOTIxMj47PFU5MjEzPjsvCisJPFU5MjE2Pjs8VTkyMTg+OzxVOTIxQz47PFU5MjFEPjs8VTkyMjM+OzxVOTIyND47PFU5MjI1Pjs8VTkyMjY+Oy8KKwk8VTkyMjg+OzxVOTIyRT47PFU5MjJGPjs8VTkyMzA+OzxVOTIzMz47PFU5MjM1Pjs8VTkyMzY+OzxVOTIzOD47LworCTxVOTIzOT47PFU5MjNBPjs8VTkyM0M+OzxVOTIzRT47PFU5MjQwPjs8VTkyNDI+OzxVOTI0Mz47PFU5MjQ2PjsvCisJPFU5MjQ3Pjs8VTkyNEE+OzxVOTI0RD47PFU5MjRFPjs8VTkyNEY+OzxVOTI1MT47PFU5MjU4Pjs8VTkyNTk+Oy8KKwk8VTkyNUM+OzxVOTI1RD47PFU5MjYwPjs8VTkyNjE+OzxVOTI2NT47PFU5MjY3Pjs8VTkyNjg+OzxVOTI2OT47LworCTxVOTI2RT47PFU5MjZGPjs8VTkyNzA+OzxVOTI3NT47PFU5Mjc2Pjs8VTkyNzc+OzxVOTI3OD47PFU5Mjc5PjsvCisJPFU5MjdCPjs8VTkyN0M+OzxVOTI3RD47PFU5MjdGPjs8VTkyODg+OzxVOTI4OT47PFU5MjhBPjs8VTkyOEQ+Oy8KKwk8VTkyOEU+OzxVOTI5Mj47PFU5Mjk3Pjs8VTkyOTk+OzxVOTI5Rj47PFU5MkEwPjs8VTkyQTQ+OzxVOTJBNT47LworCTxVOTJBNz47PFU5MkE4Pjs8VTkyQUI+OzxVOTJBRj47PFU5MkIyPjs8VTkyQjY+OzxVOTJCOD47PFU5MkJBPjsvCisJPFU5MkJCPjs8VTkyQkM+OzxVOTJCRD47PFU5MkJGPjs8VTkyQzA+OzxVOTJDMT47PFU5MkMyPjs8VTkyQzM+Oy8KKwk8VTkyQzU+OzxVOTJDNj47PFU5MkM3Pjs8VTkyQzg+OzxVOTJDQj47PFU5MkNDPjs8VTkyQ0Q+OzxVOTJDRT47LworCTxVOTJEMD47PFU5MkQzPjs8VTkyRDU+OzxVOTJENz47PFU5MkQ4Pjs8VTkyRDk+OzxVOTJEQz47PFU5MkREPjsvCisJPFU5MkRGPjs8VTkyRTA+OzxVOTJFMT47PFU5MkUzPjs8VTkyRTU+OzxVOTJFNz47PFU5MkU4Pjs8VTkyRUM+Oy8KKwk8VTkyRUU+OzxVOTJGMD47PFU5MkY5Pjs8VTkyRkI+OzxVOTJGRj47PFU5MzAwPjs8VTkzMDI+OzxVOTMwOD47LworCTxVOTMwRD47PFU5MzExPjs8VTkzMTQ+OzxVOTMxNT47PFU5MzFDPjs8VTkzMUQ+OzxVOTMxRT47PFU5MzFGPjsvCisJPFU5MzIxPjs8VTkzMjQ+OzxVOTMyNT47PFU5MzI3Pjs8VTkzMjk+OzxVOTMyQT47PFU5MzMzPjs8VTkzMzQ+Oy8KKwk8VTkzMzY+OzxVOTMzNz47PFU5MzQ3Pjs8VTkzNDg+OzxVOTM0OT47PFU5MzUwPjs8VTkzNTE+OzxVOTM1Mj47LworCTxVOTM1NT47PFU5MzU3Pjs8VTkzNTg+OzxVOTM1QT47PFU5MzVFPjs8VTkzNjQ+OzxVOTM2NT47PFU5MzY3PjsvCisJPFU5MzY5Pjs8VTkzNkE+OzxVOTM2RD47PFU5MzZGPjs8VTkzNzA+OzxVOTM3MT47PFU5MzczPjs8VTkzNzQ+Oy8KKwk8VTkzNzY+OzxVOTM3QT47PFU5MzdEPjs8VTkzN0Y+OzxVOTM4MD47PFU5MzgxPjs8VTkzODI+OzxVOTM4OD47LworCTxVOTM4QT47PFU5MzhCPjs8VTkzOEQ+OzxVOTM4Rj47PFU5MzkyPjs8VTkzOTU+OzxVOTM5OD47PFU5MzlCPjsvCisJPFU5MzlFPjs8VTkzQTE+OzxVOTNBMz47PFU5M0E0Pjs8VTkzQTY+OzxVOTNBOD47PFU5M0FCPjs8VTkzQjQ+Oy8KKwk8VTkzQjU+OzxVOTNCNj47PFU5M0JBPjs8VTkzQTk+OzxVOTNDMT47PFU5M0M0Pjs8VTkzQzU+OzxVOTNDNj47LworCTxVOTNDNz47PFU5M0M5Pjs8VTkzQ0E+OzxVOTNDQj47PFU5M0NDPjs8VTkzQ0Q+OzxVOTNEMz47PFU5M0Q5PjsvCisJPFU5M0RDPjs8VTkzREU+OzxVOTNERj47PFU5M0UyPjs8VTkzRTY+OzxVOTNFNz47PFU5M0Y5Pjs8VTkzRjc+Oy8KKwk8VTkzRjg+OzxVOTNGQT47PFU5M0ZCPjs8VTkzRkQ+OzxVOTQwMT47PFU5NDAyPjs8VTk0MDQ+OzxVOTQwOD47LworCTxVOTQwOT47PFU5NDBEPjs8VTk0MEU+OzxVOTQwRj47PFU5NDE1Pjs8VTk0MTY+OzxVOTQxNz47PFU5NDFGPjsvCisJPFU5NDJFPjs8VTk0MkY+OzxVOTQzMT47PFU5NDMyPjs8VTk0MzM+OzxVOTQzND47PFU5NDNCPjs8VTk0M0Y+Oy8KKwk8VTk0M0Q+OzxVOTQ0Mz47PFU5NDQ1Pjs8VTk0NDg+OzxVOTQ0QT47PFU5NDRDPjs8VTk0NTU+OzxVOTQ1OT47LworCTxVOTQ1Qz47PFU5NDVGPjs8VTk0NjE+OzxVOTQ2Mz47PFU5NDY4Pjs8VTk0NkI+OzxVOTQ2RD47PFU5NDZFPjsvCisJPFU5NDZGPjs8VTk0NzE+OzxVOTQ3Mj47PFU5NDg0Pjs8VTk0ODM+OzxVOTU3OD47PFU5NTc5Pjs8VTk1N0U+Oy8KKwk8VTk1ODQ+OzxVOTU4OD47PFU5NThDPjs8VTk1OEQ+OzxVOTU4RT47PFU5NTlEPjs8VTk1OUU+OzxVOTU5Rj47LworCTxVOTVBMT47PFU5NUE2Pjs8VTk1QTk+OzxVOTVBQj47PFU5NUFDPjs8VTk1QjQ+OzxVOTVCNj47PFU5NUJBPjsvCisJPFU5NUJEPjs8VTk1QkY+OzxVOTVDNj47PFU5NUM4Pjs8VTk1Qzk+OzxVOTVDQj47PFU5NUQwPjs8VTk1RDE+Oy8KKwk8VTk1RDI+OzxVOTVEMz47PFU5NUQ5Pjs8VTk1REE+OzxVOTVERD47PFU5NURFPjs8VTk1REY+OzxVOTVFMD47LworCTxVOTVFND47PFU5NUU2Pjs8VTk2MUQ+OzxVOTYxRT47PFU5NjIyPjs8VTk2MjQ+OzxVOTYyNT47PFU5NjI2PjsvCisJPFU5NjJDPjs8VTk2MzE+OzxVOTYzMz47PFU5NjM3Pjs8VTk2Mzg+OzxVOTYzOT47PFU5NjNBPjs8VTk2M0M+Oy8KKwk8VTk2M0Q+OzxVOTY0MT47PFU5NjUyPjs8VTk2NTQ+OzxVOTY1Nj47PFU5NjU3Pjs8VTk2NTg+OzxVOTY2MT47LworCTxVOTY2RT47PFU5Njc0Pjs8VTk2N0I+OzxVOTY3Qz47PFU5NjdFPjs8VTk2N0Y+OzxVOTY4MT47PFU5NjgyPjsvCisJPFU5NjgzPjs8VTk2ODQ+OzxVOTY4OT47PFU5NjkxPjs8VTk2OTY+OzxVOTY5QT47PFU5NjlEPjs8VTk2OUY+Oy8KKwk8VTk2QTQ+OzxVOTZBNT47PFU5NkE2Pjs8VTk2QTk+OzxVOTZBRT47PFU5NkFGPjs8VTk2QjM+OzxVOTZCQT47LworCTxVOTZDQT47PFU5NkQyPjs8VTVEQjI+OzxVOTZEOD47PFU5NkRBPjs8VTk2REQ+OzxVOTZERT47PFU5NkRGPjsvCisJPFU5NkU5Pjs8VTk2RUY+OzxVOTZGMT47PFU5NkZBPjs8VTk3MDI+OzxVOTcwMz47PFU5NzA1Pjs8VTk3MDk+Oy8KKwk8VTk3MUE+OzxVOTcxQj47PFU5NzFEPjs8VTk3MjE+OzxVOTcyMj47PFU5NzIzPjs8VTk3Mjg+OzxVOTczMT47LworCTxVOTczMz47PFU5NzQxPjs8VTk3NDM+OzxVOTc0QT47PFU5NzRFPjs8VTk3NEY+OzxVOTc1NT47PFU5NzU3PjsvCisJPFU5NzU4Pjs8VTk3NUE+OzxVOTc1Qj47PFU5NzYzPjs8VTk3Njc+OzxVOTc2QT47PFU5NzZFPjs8VTk3NzM+Oy8KKwk8VTk3NzY+OzxVOTc3Nz47PFU5Nzc4Pjs8VTk3N0I+OzxVOTc3RD47PFU5NzdGPjs8VTk3ODA+OzxVOTc4OT47LworCTxVOTc5NT47PFU5Nzk2Pjs8VTk3OTc+OzxVOTc5OT47PFU5NzlBPjs8VTk3OUU+OzxVOTc5Rj47PFU5N0EyPjsvCisJPFU5N0FDPjs8VTk3QUU+OzxVOTdCMT47PFU5N0IyPjs8VTk3QjU+OzxVOTdCNj47PFU5N0I4Pjs8VTk3Qjk+Oy8KKwk8VTk3QkE+OzxVOTdCQz47PFU5N0JFPjs8VTk3QkY+OzxVOTdDMT47PFU5N0M0Pjs8VTk3QzU+OzxVOTdDNz47LworCTxVOTdDOT47PFU5N0NBPjs8VTk3Q0M+OzxVOTdDRD47PFU5N0NFPjs8VTk3RDA+OzxVOTdEMT47PFU5N0Q0PjsvCisJPFU5N0Q3Pjs8VTk3RDg+OzxVOTdEOT47PFU5N0REPjs8VTk3REU+OzxVOTdFMD47PFU5N0RCPjs8VTk3RTE+Oy8KKwk8VTk3RTQ+OzxVOTdFRj47PFU5N0YxPjs8VTk3RjQ+OzxVOTdGNz47PFU5N0Y4Pjs8VTk3RkE+OzxVOTgwNz47LworCTxVOTgwQT47PFU5ODE5Pjs8VTk4MEQ+OzxVOTgwRT47PFU5ODE0Pjs8VTk4MTY+OzxVOTgxQz47PFU5ODFFPjsvCisJPFU5ODIwPjs8VTk4MjM+OzxVOTgyNj47PFU5ODJCPjs8VTk4MkU+OzxVOTgyRj47PFU5ODMwPjs8VTk4MzI+Oy8KKwk8VTk4MzM+OzxVOTgzNT47PFU5ODI1Pjs8VTk4M0U+OzxVOTg0ND47PFU5ODQ3Pjs8VTk4NEE+OzxVOTg1MT47LworCTxVOTg1Mj47PFU5ODUzPjs8VTk4NTY+OzxVOTg1Nz47PFU5ODU5Pjs8VTk4NUE+OzxVOTg2Mj47PFU5ODYzPjsvCisJPFU5ODY1Pjs8VTk4NjY+OzxVOTg2QT47PFU5ODZDPjs8VTk4QUI+OzxVOThBRD47PFU5OEFFPjs8VTk4QjA+Oy8KKwk8VTk4QjQ+OzxVOThCNz47PFU5OEI4Pjs8VTk4QkE+OzxVOThCQj47PFU5OEJGPjs8VTk4QzI+OzxVOThDNT47LworCTxVOThDOD47PFU5OENDPjs8VTk4RTE+OzxVOThFMz47PFU5OEU1Pjs8VTk4RTY+OzxVOThFNz47PFU5OEVBPjsvCisJPFU5OEYzPjs8VTk4RjY+OzxVOTkwMj47PFU5OTA3Pjs8VTk5MDg+OzxVOTkxMT47PFU5OTE1Pjs8VTk5MTY+Oy8KKwk8VTk5MTc+OzxVOTkxQT47PFU5OTFCPjs8VTk5MUM+OzxVOTkxRj47PFU5OTIyPjs8VTk5MjY+OzxVOTkyNz47LworCTxVOTkyQj47PFU5OTMxPjs8VTk5MzI+OzxVOTkzMz47PFU5OTM0Pjs8VTk5MzU+OzxVOTkzOT47PFU5OTNBPjsvCisJPFU5OTNCPjs8VTk5M0M+OzxVOTk0MD47PFU5OTQxPjs8VTk5NDY+OzxVOTk0Nz47PFU5OTQ4Pjs8VTk5NEQ+Oy8KKwk8VTk5NEU+OzxVOTk1ND47PFU5OTU4Pjs8VTk5NTk+OzxVOTk1Qj47PFU5OTVDPjs8VTk5NUU+OzxVOTk1Rj47LworCTxVOTk2MD47PFU5OTlCPjs8VTk5OUQ+OzxVOTk5Rj47PFU5OUE2Pjs8VTk5QjA+OzxVOTlCMT47PFU5OUIyPjsvCisJPFU5OUI1Pjs8VTk5Qjk+OzxVOTlCQT47PFU5OUJEPjs8VTk5QkY+OzxVOTlDMz47PFU5OUM5Pjs8VTk5RDM+Oy8KKwk8VTk5RDQ+OzxVOTlEOT47PFU5OURBPjs8VTk5REM+OzxVOTlERT47PFU5OUU3Pjs8VTk5RUE+OzxVOTlFQj47LworCTxVOTlFQz47PFU5OUYwPjs8VTk5RjQ+OzxVOTlGNT47PFU5OUY5Pjs8VTk5RkQ+OzxVOTlGRT47PFU5QTAyPjsvCisJPFU5QTAzPjs8VTlBMDQ+OzxVOUEwQj47PFU5QTBDPjs8VTlBMTA+OzxVOUExMT47PFU5QTE2Pjs8VTlBMUU+Oy8KKwk8VTlBMjA+OzxVOUEyMj47PFU5QTIzPjs8VTlBMjQ+OzxVOUEyNz47PFU5QTJEPjs8VTlBMkU+OzxVOUEzMz47LworCTxVOUEzNT47PFU5QTM2Pjs8VTlBMzg+OzxVOUE0Nz47PFU5QTQxPjs8VTlBNDQ+OzxVOUE0QT47PFU5QTRCPjsvCisJPFU5QTRDPjs8VTlBNEU+OzxVOUE1MT47PFU5QTU0Pjs8VTlBNTY+OzxVOUE1RD47PFU5QUFBPjs8VTlBQUM+Oy8KKwk8VTlBQUU+OzxVOUFBRj47PFU5QUIyPjs8VTlBQjQ+OzxVOUFCNT47PFU5QUI2Pjs8VTlBQjk+OzxVOUFCQj47LworCTxVOUFCRT47PFU5QUJGPjs8VTlBQzE+OzxVOUFDMz47PFU5QUM2Pjs8VTlBQzg+OzxVOUFDRT47PFU5QUQwPjsvCisJPFU5QUQyPjs8VTlBRDU+OzxVOUFENj47PFU5QUQ3Pjs8VTlBREI+OzxVOUFEQz47PFU5QUUwPjs8VTlBRTQ+Oy8KKwk8VTlBRTU+OzxVOUFFNz47PFU5QUU5Pjs8VTlBRUM+OzxVOUFGMj47PFU5QUYzPjs8VTlBRjU+OzxVOUFGOT47LworCTxVOUFGQT47PFU5QUZEPjs8VTlBRkY+OzxVOUIwMD47PFU5QjAxPjs8VTlCMDI+OzxVOUIwMz47PFU5QjA0PjsvCisJPFU5QjA1Pjs8VTlCMDg+OzxVOUIwOT47PFU5QjBCPjs8VTlCMEM+OzxVOUIwRD47PFU5QjBFPjs8VTlCMTA+Oy8KKwk8VTlCMTI+OzxVOUIxNj47PFU5QjE5Pjs8VTlCMUI+OzxVOUIxQz47PFU5QjIwPjs8VTlCMjY+OzxVOUIyQj47LworCTxVOUIyRD47PFU5QjMzPjs8VTlCMzQ+OzxVOUIzNT47PFU5QjM3Pjs8VTlCMzk+OzxVOUIzQT47PFU5QjNEPjsvCisJPFU5QjQ4Pjs8VTlCNEI+OzxVOUI0Qz47PFU5QjU1Pjs8VTlCNTY+OzxVOUI1Nz47PFU5QjVCPjs8VTlCNUU+Oy8KKwk8VTlCNjE+OzxVOUI2Mz47PFU5QjY1Pjs8VTlCNjY+OzxVOUI2OD47PFU5QjZBPjs8VTlCNkI+OzxVOUI2Qz47LworCTxVOUI2RD47PFU5QjZFPjs8VTlCNzM+OzxVOUI3NT47PFU5Qjc3Pjs8VTlCNzg+OzxVOUI3OT47PFU5QjdGPjsvCisJPFU5QjgwPjs8VTlCODQ+OzxVOUI4NT47PFU5Qjg2Pjs8VTlCODc+OzxVOUI4OT47PFU5QjhBPjs8VTlCOEI+Oy8KKwk8VTlCOEQ+OzxVOUI4Rj47PFU5QjkwPjs8VTlCOTQ+OzxVOUI5QT47PFU5QjlEPjs8VTlCOUU+OzxVOUJBNj47LworCTxVOUJBNz47PFU5QkE5Pjs8VTlCQUM+OzxVOUJCMD47PFU5QkIxPjs8VTlCQjI+OzxVOUJCNz47PFU5QkI4PjsvCisJPFU5QkJCPjs8VTlCQkM+OzxVOUJCRT47PFU5QkJGPjs8VTlCQzE+OzxVOUJDNz47PFU5QkM4Pjs8VTlCQ0U+Oy8KKwk8VTlCRDA+OzxVOUJENz47PFU5QkQ4Pjs8VTlCREQ+OzxVOUJERj47PFU5QkU1Pjs8VTlCRTc+OzxVOUJFQT47LworCTxVOUJFQj47PFU5QkVGPjs8VTlCRjM+OzxVOUJGNz47PFU5QkY4Pjs8VTlCRjk+OzxVOUJGQT47PFU5QkZEPjsvCisJPFU5QkZGPjs8VTlDMDA+OzxVOUMwMj47PFU5QzBCPjs8VTlDMEY+OzxVOUMxMT47PFU5QzE2Pjs8VTlDMTg+Oy8KKwk8VTlDMTk+OzxVOUMxQT47PFU5QzFDPjs8VTlDMUU+OzxVOUMyMj47PFU5QzIzPjs8VTlDMjY+OzxVOUMyNz47LworCTxVOUMyOD47PFU5QzI5Pjs8VTlDMkE+OzxVOUMzMT47PFU5QzM1Pjs8VTlDMzY+OzxVOUMzNz47PFU5QzNEPjsvCisJPFU5QzQxPjs8VTlDNDM+OzxVOUM0ND47PFU5QzQ1Pjs8VTlDNDk+OzxVOUM0QT47PFU5QzRFPjs8VTlDNEY+Oy8KKwk8VTlDNTA+OzxVOUM1Mz47PFU5QzU0Pjs8VTlDNTY+OzxVOUM1OD47PFU5QzVCPjs8VTlDNUQ+OzxVOUM1RT47LworCTxVOUM1Rj47PFU5QzYzPjs8VTlDNjk+OzxVOUM2QT47PFU5QzVDPjs8VTlDNkI+OzxVOUM2OD47PFU5QzZFPjsvCisJPFU5QzcwPjs8VTlDNzI+OzxVOUM3NT47PFU5Qzc3Pjs8VTlDN0I+OzxVOUNFNj47PFU5Q0YyPjs8VTlDRjc+Oy8KKwk8VTlDRjk+OzxVOUQwQj47PFU5RDAyPjs8VTlEMTE+OzxVOUQxNz47PFU5RDE4Pjs8VTlEMUM+OzxVOUQxRD47LworCTxVOUQxRT47PFU5RDJGPjs8VTlEMzA+OzxVOUQzMj47PFU5RDMzPjs8VTlEMzQ+OzxVOUQzQT47PFU5RDNDPjsvCisJPFU5RDQ1Pjs8VTlEM0Q+OzxVOUQ0Mj47PFU5RDQzPjs8VTlENDc+OzxVOUQ0QT47PFU5RDUzPjs8VTlENTQ+Oy8KKwk8VTlENUY+OzxVOUQ2Mz47PFU5RDYyPjs8VTlENjU+OzxVOUQ2OT47PFU5RDZBPjs8VTlENkI+OzxVOUQ3MD47LworCTxVOUQ3Nj47PFU5RDc3Pjs8VTlEN0I+OzxVOUQ3Qz47PFU5RDdFPjs8VTlEODM+OzxVOUQ4ND47PFU5RDg2PjsvCisJPFU5RDhBPjs8VTlEOEQ+OzxVOUQ4RT47PFU5RDkyPjs8VTlEOTM+OzxVOUQ5NT47PFU5RDk2Pjs8VTlEOTc+Oy8KKwk8VTlEOTg+OzxVOURBMT47PFU5REFBPjs8VTlEQUM+OzxVOURBRT47PFU5REIxPjs8VTlEQjU+OzxVOURCOT47LworCTxVOURCQz47PFU5REJGPjs8VTlEQzM+OzxVOURDNz47PFU5REM5Pjs8VTlEQ0E+OzxVOUREND47PFU5REQ1PjsvCisJPFU5REQ2Pjs8VTlERDc+OzxVOUREQT47PFU5RERFPjs8VTlEREY+OzxVOURFMD47PFU5REU1Pjs8VTlERTc+Oy8KKwk8VTlERTk+OzxVOURFQj47PFU5REVFPjs8VTlERjA+OzxVOURGMz47PFU5REY0Pjs8VTlERkU+OzxVOUUwQT47LworCTxVOUUwMj47PFU5RTA3Pjs8VTlFMEU+OzxVOUUxMD47PFU5RTExPjs8VTlFMTI+OzxVOUUxNT47PFU5RTE2PjsvCisJPFU5RTE5Pjs8VTlFMUM+OzxVOUUxRD47PFU5RTdBPjs8VTlFN0I+OzxVOUU3Qz47PFU5RTgwPjs8VTlFODI+Oy8KKwk8VTlFODM+OzxVOUU4ND47PFU5RTg1Pjs8VTlFODc+OzxVOUU4RT47PFU5RThGPjs8VTlFOTY+OzxVOUU5OD47LworCTxVOUU5Qj47PFU5RTlFPjs8VTlFQTQ+OzxVOUVBOD47PFU5RUFDPjs8VTlFQUU+OzxVOUVBRj47PFU5RUIwPjsvCisJPFU5RUIzPjs8VTlFQjQ+OzxVOUVCNT47PFU5RUM2Pjs8VTlFQzg+OzxVOUVDQj47PFU5RUQ1Pjs8VTlFREY+Oy8KKwk8VTlFRTQ+OzxVOUVFNz47PFU5RUVDPjs8VTlFRUQ+OzxVOUVFRT47PFU5RUYwPjs8VTlFRjE+OzxVOUVGMj47LworCTxVOUVGNT47PFU5RUY4Pjs8VTlFRkY+OzxVOUYwMj47PFU5RjAzPjs8VTlGMDk+OzxVOUYwRj47PFU5RjEwPjsvCisJPFU5RjExPjs8VTlGMTI+OzxVOUYxND47PFU5RjE2Pjs8VTlGMTc+OzxVOUYxOT47PFU5RjFBPjs8VTlGMUI+Oy8KKwk8VTlGMUY+OzxVOUYyMj47PFU5RjI2Pjs8VTlGMkE+OzxVOUYyQj47PFU5RjJGPjs8VTlGMzE+OzxVOUYzMj47LworCTxVOUYzND47PFU5RjM3Pjs8VTlGMzk+OzxVOUYzQT47PFU5RjNDPjs8VTlGM0Q+OzxVOUYzRj47PFU5RjQxPjsvCisJPFU5RjQzPjs8VTlGNDQ+OzxVOUY0NT47PFU5RjQ2Pjs8VTlGNDc+OzxVOUY1Mz47PFU5RjU1Pjs8VTlGNTY+Oy8KKwk8VTlGNTc+OzxVOUY1OD47PFU5RjVBPjs8VTlGNUQ+OzxVOUY1RT47PFU5RjY4Pjs8VTlGNjk+OzxVOUY2RD47LworCTxVOUY2RT47PFU5RjZGPjs8VTlGNzA+OzxVOUY3MT47PFU5RjczPjs8VTlGNzU+OzxVOUY3QT47PFU5RjdEPjsvCisJPFU5RjhGPjs8VTlGOTA+OzxVOUY5MT47PFU5RjkyPjs8VTlGOTQ+OzxVOUY5Nj47PFU5Rjk3Pjs8VTlGOUU+Oy8KKwk8VTlGQTE+OzxVOUZBMj47PFU5RkEzPjs8VTlGQTU+OzxVNEVERD47PFUzMDA1Pjs8VTMwMDc+CisKK3RvamhpcmEJKDxVMzBBMT4sPFUzMDQxPik7KDxVMzBBMj4sPFUzMDQyPik7KDxVMzBBMz4sPFUzMDQzPik7LworCSg8VTMwQTQ+LDxVMzA0ND4pOyg8VTMwQTU+LDxVMzA0NT4pOyg8VTMwQTY+LDxVMzA0Nj4pOy8KKwkoPFUzMEE3Piw8VTMwNDc+KTsoPFUzMEE4Piw8VTMwNDg+KTsoPFUzMEE5Piw8VTMwNDk+KTsvCisJKDxVMzBBQT4sPFUzMDRBPik7KDxVMzBBQj4sPFUzMDRCPik7KDxVMzBBQz4sPFUzMDRDPik7LworCSg8VTMwQUQ+LDxVMzA0RD4pOyg8VTMwQUU+LDxVMzA0RT4pOyg8VTMwQUY+LDxVMzA0Rj4pOy8KKwkoPFUzMEIwPiw8VTMwNTA+KTsoPFUzMEIxPiw8VTMwNTE+KTsoPFUzMEIyPiw8VTMwNTI+KTsvCisJKDxVMzBCMz4sPFUzMDUzPik7KDxVMzBCND4sPFUzMDU0Pik7KDxVMzBCNT4sPFUzMDU1Pik7LworCSg8VTMwQjY+LDxVMzA1Nj4pOyg8VTMwQjc+LDxVMzA1Nz4pOyg8VTMwQjg+LDxVMzA1OD4pOy8KKwkoPFUzMEI5Piw8VTMwNTk+KTsoPFUzMEJBPiw8VTMwNUE+KTsoPFUzMEJCPiw8VTMwNUI+KTsvCisJKDxVMzBCQz4sPFUzMDVDPik7KDxVMzBCRD4sPFUzMDVEPik7KDxVMzBCRT4sPFUzMDVFPik7LworCSg8VTMwQkY+LDxVMzA1Rj4pOyg8VTMwQzA+LDxVMzA2MD4pOyg8VTMwQzE+LDxVMzA2MT4pOy8KKwkoPFUzMEMyPiw8VTMwNjI+KTsoPFUzMEMzPiw8VTMwNjM+KTsoPFUzMEM0Piw8VTMwNjQ+KTsvCisJKDxVMzBDNT4sPFUzMDY1Pik7KDxVMzBDNj4sPFUzMDY2Pik7KDxVMzBDNz4sPFUzMDY3Pik7LworCSg8VTMwQzg+LDxVMzA2OD4pOyg8VTMwQzk+LDxVMzA2OT4pOyg8VTMwQ0E+LDxVMzA2QT4pOy8KKwkoPFUzMENCPiw8VTMwNkI+KTsoPFUzMENDPiw8VTMwNkM+KTsoPFUzMENEPiw8VTMwNkQ+KTsvCisJKDxVMzBDRT4sPFUzMDZFPik7KDxVMzBDRj4sPFUzMDZGPik7KDxVMzBEMD4sPFUzMDcwPik7LworCSg8VTMwRDE+LDxVMzA3MT4pOyg8VTMwRDI+LDxVMzA3Mj4pOyg8VTMwRDM+LDxVMzA3Mz4pOy8KKwkoPFUzMEQ0Piw8VTMwNzQ+KTsoPFUzMEQ1Piw8VTMwNzU+KTsoPFUzMEQ2Piw8VTMwNzY+KTsvCisJKDxVMzBENz4sPFUzMDc3Pik7KDxVMzBEOD4sPFUzMDc4Pik7KDxVMzBEOT4sPFUzMDc5Pik7LworCSg8VTMwREE+LDxVMzA3QT4pOyg8VTMwREI+LDxVMzA3Qj4pOyg8VTMwREM+LDxVMzA3Qz4pOy8KKwkoPFUzMEREPiw8VTMwN0Q+KTsoPFUzMERFPiw8VTMwN0U+KTsoPFUzMERGPiw8VTMwN0Y+KTsvCisJKDxVMzBFMD4sPFUzMDgwPik7KDxVMzBFMT4sPFUzMDgxPik7KDxVMzBFMj4sPFUzMDgyPik7LworCSg8VTMwRTM+LDxVMzA4Mz4pOyg8VTMwRTQ+LDxVMzA4ND4pOyg8VTMwRTU+LDxVMzA4NT4pOy8KKwkoPFUzMEU2Piw8VTMwODY+KTsoPFUzMEU3Piw8VTMwODc+KTsoPFUzMEU4Piw8VTMwODg+KTsvCisJKDxVMzBFOT4sPFUzMDg5Pik7KDxVMzBFQT4sPFUzMDhBPik7KDxVMzBFQj4sPFUzMDhCPik7LworCSg8VTMwRUM+LDxVMzA4Qz4pOyg8VTMwRUQ+LDxVMzA4RD4pOyg8VTMwRUU+LDxVMzA4RT4pOy8KKwkoPFUzMEVGPiw8VTMwOEY+KTsoPFUzMEYwPiw8VTMwOTA+KTsoPFUzMEYxPiw8VTMwOTE+KTsvCisJKDxVMzBGMj4sPFUzMDkyPik7KDxVMzBGMz4sPFUzMDkzPik7LworCSg8VTMwRkQ+LDxVMzA5RD4pOyg8VTMwRkU+LDxVMzA5RT4pCisKK3RvamthdGEJKDxVMzA0MT4sPFUzMEExPik7KDxVMzA0Mj4sPFUzMEEyPik7KDxVMzA0Mz4sPFUzMEEzPik7LworCSg8VTMwNDQ+LDxVMzBBND4pOyg8VTMwNDU+LDxVMzBBNT4pOyg8VTMwNDY+LDxVMzBBNj4pOy8KKwkoPFUzMDQ3Piw8VTMwQTc+KTsoPFUzMDQ4Piw8VTMwQTg+KTsoPFUzMDQ5Piw8VTMwQTk+KTsvCisJKDxVMzA0QT4sPFUzMEFBPik7KDxVMzA0Qj4sPFUzMEFCPik7KDxVMzA0Qz4sPFUzMEFDPik7LworCSg8VTMwNEQ+LDxVMzBBRD4pOyg8VTMwNEU+LDxVMzBBRT4pOyg8VTMwNEY+LDxVMzBBRj4pOy8KKwkoPFUzMDUwPiw8VTMwQjA+KTsoPFUzMDUxPiw8VTMwQjE+KTsoPFUzMDUyPiw8VTMwQjI+KTsvCisJKDxVMzA1Mz4sPFUzMEIzPik7KDxVMzA1ND4sPFUzMEI0Pik7KDxVMzA1NT4sPFUzMEI1Pik7LworCSg8VTMwNTY+LDxVMzBCNj4pOyg8VTMwNTc+LDxVMzBCNz4pOyg8VTMwNTg+LDxVMzBCOD4pOy8KKwkoPFUzMDU5Piw8VTMwQjk+KTsoPFUzMDVBPiw8VTMwQkE+KTsoPFUzMDVCPiw8VTMwQkI+KTsvCisJKDxVMzA1Qz4sPFUzMEJDPik7KDxVMzA1RD4sPFUzMEJEPik7KDxVMzA1RT4sPFUzMEJFPik7LworCSg8VTMwNUY+LDxVMzBCRj4pOyg8VTMwNjA+LDxVMzBDMD4pOyg8VTMwNjE+LDxVMzBDMT4pOy8KKwkoPFUzMDYyPiw8VTMwQzI+KTsoPFUzMDYzPiw8VTMwQzM+KTsoPFUzMDY0Piw8VTMwQzQ+KTsvCisJKDxVMzA2NT4sPFUzMEM1Pik7KDxVMzA2Nj4sPFUzMEM2Pik7KDxVMzA2Nz4sPFUzMEM3Pik7LworCSg8VTMwNjg+LDxVMzBDOD4pOyg8VTMwNjk+LDxVMzBDOT4pOyg8VTMwNkE+LDxVMzBDQT4pOy8KKwkoPFUzMDZCPiw8VTMwQ0I+KTsoPFUzMDZDPiw8VTMwQ0M+KTsoPFUzMDZEPiw8VTMwQ0Q+KTsvCisJKDxVMzA2RT4sPFUzMENFPik7KDxVMzA2Rj4sPFUzMENGPik7KDxVMzA3MD4sPFUzMEQwPik7LworCSg8VTMwNzE+LDxVMzBEMT4pOyg8VTMwNzI+LDxVMzBEMj4pOyg8VTMwNzM+LDxVMzBEMz4pOy8KKwkoPFUzMDc0Piw8VTMwRDQ+KTsoPFUzMDc1Piw8VTMwRDU+KTsoPFUzMDc2Piw8VTMwRDY+KTsvCisJKDxVMzA3Nz4sPFUzMEQ3Pik7KDxVMzA3OD4sPFUzMEQ4Pik7KDxVMzA3OT4sPFUzMEQ5Pik7LworCSg8VTMwN0E+LDxVMzBEQT4pOyg8VTMwN0I+LDxVMzBEQj4pOyg8VTMwN0M+LDxVMzBEQz4pOy8KKwkoPFUzMDdEPiw8VTMwREQ+KTsoPFUzMDdFPiw8VTMwREU+KTsoPFUzMDdGPiw8VTMwREY+KTsvCisJKDxVMzA4MD4sPFUzMEUwPik7KDxVMzA4MT4sPFUzMEUxPik7KDxVMzA4Mj4sPFUzMEUyPik7LworCSg8VTMwODM+LDxVMzBFMz4pOyg8VTMwODQ+LDxVMzBFND4pOyg8VTMwODU+LDxVMzBFNT4pOy8KKwkoPFUzMDg2Piw8VTMwRTY+KTsoPFUzMDg3Piw8VTMwRTc+KTsoPFUzMDg4Piw8VTMwRTg+KTsvCisJKDxVMzA4OT4sPFUzMEU5Pik7KDxVMzA4QT4sPFUzMEVBPik7KDxVMzA4Qj4sPFUzMEVCPik7LworCSg8VTMwOEM+LDxVMzBFQz4pOyg8VTMwOEQ+LDxVMzBFRD4pOyg8VTMwOEU+LDxVMzBFRT4pOy8KKwkoPFUzMDhGPiw8VTMwRUY+KTsoPFUzMDkwPiw8VTMwRjA+KTsoPFUzMDkxPiw8VTMwRjE+KTsvCisJKDxVMzA5Mj4sPFUzMEYyPik7KDxVMzA5Mz4sPFUzMEYzPik7LworCSg8VTMwOUQ+LDxVMzBGRD4pOyg8VTMwOUU+LDxVMzBGRT4pCisKK3RyYW5zbGl0X3N0YXJ0CisKK2luY2x1ZGUgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK2luY2x1ZGUgInRyYW5zbGl0X2Nqa192YXJpYW50cyI7IiIKKwordHJhbnNsaXRfZW5kCisKK0VORCBMQ19DVFlQRQorCisKK0xDX0NPTExBVEUKK29yZGVyX3N0YXJ0IGZvcndhcmQKKyUKKyUgQzAKKyUKKzxVMDAwMD4KKzxVMDAwMT4KKzxVMDAwMj4KKzxVMDAwMz4KKzxVMDAwND4KKzxVMDAwNT4KKzxVMDAwNj4KKzxVMDAwNz4KKzxVMDAwOD4KKzxVMDAwOT4KKzxVMDAwQT4KKzxVMDAwQj4KKzxVMDAwQz4KKzxVMDAwRD4KKzxVMDAwRT4KKzxVMDAwRj4KKzxVMDAxMD4KKzxVMDAxMT4KKzxVMDAxMj4KKzxVMDAxMz4KKzxVMDAxND4KKzxVMDAxNT4KKzxVMDAxNj4KKzxVMDAxNz4KKzxVMDAxOD4KKzxVMDAxOT4KKzxVMDAxQT4KKzxVMDAxQj4KKzxVMDAxQz4KKzxVMDAxRD4KKzxVMDAxRT4KKzxVMDAxRj4KKyUKKyUgSVNPIDY0NiBJUlYKKyUKKzxVMDAyMD4KKzxVMDAyMT4KKzxVMDAyMj4KKzxVMDAyMz4KKzxVMDAyND4KKzxVMDAyNT4KKzxVMDAyNj4KKzxVMDAyNz4KKzxVMDAyOD4KKzxVMDAyOT4KKzxVMDAyQT4KKzxVMDAyQj4KKzxVMDAyQz4KKzxVMDAyRD4KKzxVMDAyRT4KKzxVMDAyRj4KKzxVMDAzMD4KKzxVMDAzMT4KKzxVMDAzMj4KKzxVMDAzMz4KKzxVMDAzND4KKzxVMDAzNT4KKzxVMDAzNj4KKzxVMDAzNz4KKzxVMDAzOD4KKzxVMDAzOT4KKzxVMDAzQT4KKzxVMDAzQj4KKzxVMDAzQz4KKzxVMDAzRD4KKzxVMDAzRT4KKzxVMDAzRj4KKzxVMDA0MD4KKzxVMDA0MT4KKzxVMDA0Mj4KKzxVMDA0Mz4KKzxVMDA0ND4KKzxVMDA0NT4KKzxVMDA0Nj4KKzxVMDA0Nz4KKzxVMDA0OD4KKzxVMDA0OT4KKzxVMDA0QT4KKzxVMDA0Qj4KKzxVMDA0Qz4KKzxVMDA0RD4KKzxVMDA0RT4KKzxVMDA0Rj4KKzxVMDA1MD4KKzxVMDA1MT4KKzxVMDA1Mj4KKzxVMDA1Mz4KKzxVMDA1ND4KKzxVMDA1NT4KKzxVMDA1Nj4KKzxVMDA1Nz4KKzxVMDA1OD4KKzxVMDA1OT4KKzxVMDA1QT4KKzxVMDA1Qj4KKzxVMDA1Qz4KKzxVMDA1RD4KKzxVMDA1RT4KKzxVMDA1Rj4KKzxVMDA2MD4KKzxVMDA2MT4KKzxVMDA2Mj4KKzxVMDA2Mz4KKzxVMDA2ND4KKzxVMDA2NT4KKzxVMDA2Nj4KKzxVMDA2Nz4KKzxVMDA2OD4KKzxVMDA2OT4KKzxVMDA2QT4KKzxVMDA2Qj4KKzxVMDA2Qz4KKzxVMDA2RD4KKzxVMDA2RT4KKzxVMDA2Rj4KKzxVMDA3MD4KKzxVMDA3MT4KKzxVMDA3Mj4KKzxVMDA3Mz4KKzxVMDA3ND4KKzxVMDA3NT4KKzxVMDA3Nj4KKzxVMDA3Nz4KKzxVMDA3OD4KKzxVMDA3OT4KKzxVMDA3QT4KKzxVMDA3Qj4KKzxVMDA3Qz4KKzxVMDA3RD4KKzxVMDA3RT4KKzxVMDA3Rj4KKyUKKyUgQzEKKyUKKzxVMDA4MD4KKzxVMDA4MT4KKzxVMDA4Mj4KKzxVMDA4Mz4KKzxVMDA4ND4KKzxVMDA4NT4KKzxVMDA4Nj4KKzxVMDA4Nz4KKzxVMDA4OD4KKzxVMDA4OT4KKzxVMDA4QT4KKzxVMDA4Qj4KKzxVMDA4Qz4KKzxVMDA4RD4KKzxVMDA5MD4KKzxVMDA5MT4KKzxVMDA5Mj4KKzxVMDA5Mz4KKzxVMDA5ND4KKzxVMDA5NT4KKzxVMDA5Nj4KKzxVMDA5Nz4KKzxVMDA5OD4KKzxVMDA5OT4KKzxVMDA5QT4KKzxVMDA5Qj4KKzxVMDA5Qz4KKzxVMDA5RD4KKzxVMDA5RT4KKzxVMDA5Rj4KKyUKKyUgSklTIFggMDIwMSBLQVRBS0FOQQorJQorPFVGRjYxPgorPFVGRjYyPgorPFVGRjYzPgorPFVGRjY0PgorPFVGRjY1PgorPFVGRjY2PgorPFVGRjY3PgorPFVGRjY4PgorPFVGRjY5PgorPFVGRjZBPgorPFVGRjZCPgorPFVGRjZDPgorPFVGRjZEPgorPFVGRjZFPgorPFVGRjZGPgorPFVGRjcwPgorPFVGRjcxPgorPFVGRjcyPgorPFVGRjczPgorPFVGRjc0PgorPFVGRjc1PgorPFVGRjc2PgorPFVGRjc3PgorPFVGRjc4PgorPFVGRjc5PgorPFVGRjdBPgorPFVGRjdCPgorPFVGRjdDPgorPFVGRjdEPgorPFVGRjdFPgorPFVGRjdGPgorPFVGRjgwPgorPFVGRjgxPgorPFVGRjgyPgorPFVGRjgzPgorPFVGRjg0PgorPFVGRjg1PgorPFVGRjg2PgorPFVGRjg3PgorPFVGRjg4PgorPFVGRjg5PgorPFVGRjhBPgorPFVGRjhCPgorPFVGRjhDPgorPFVGRjhEPgorPFVGRjhFPgorPFVGRjhGPgorPFVGRjkwPgorPFVGRjkxPgorPFVGRjkyPgorPFVGRjkzPgorPFVGRjk0PgorPFVGRjk1PgorPFVGRjk2PgorPFVGRjk3PgorPFVGRjk4PgorPFVGRjk5PgorPFVGRjlBPgorPFVGRjlCPgorPFVGRjlDPgorPFVGRjlEPgorPFVGRjlFPgorPFVGRjlGPgorJQorJSBKSVMgWCAwMjA4CislCis8VTMwMDA+Cis8VTMwMDE+Cis8VTMwMDI+Cis8VUZGMEM+Cis8VUZGMEU+Cis8VTMwRkI+Cis8VUZGMUE+Cis8VUZGMUI+Cis8VUZGMUY+Cis8VUZGMDE+Cis8VTMwOUI+Cis8VTMwOUM+Cis8VTAwQjQ+Cis8VUZGNDA+Cis8VTAwQTg+Cis8VUZGM0U+Cis8VUZGRTM+Cis8VUZGM0Y+Cis8VTMwRkQ+Cis8VTMwRkU+Cis8VTMwOUQ+Cis8VTMwOUU+Cis8VTMwMDM+Cis8VTRFREQ+Cis8VTMwMDU+Cis8VTMwMDY+Cis8VTMwMDc+Cis8VTMwRkM+Cis8VTIwMTU+Cis8VTIwMTA+Cis8VUZGMEY+Cis8VUZGM0M+Cis8VTMwMUM+Cis8VTIwMTY+Cis8VUZGNUM+Cis8VTIwMjY+Cis8VTIwMjU+Cis8VTIwMTg+Cis8VTIwMTk+Cis8VTIwMUM+Cis8VTIwMUQ+Cis8VUZGMDg+Cis8VUZGMDk+Cis8VTMwMTQ+Cis8VTMwMTU+Cis8VUZGM0I+Cis8VUZGM0Q+Cis8VUZGNUI+Cis8VUZGNUQ+Cis8VTMwMDg+Cis8VTMwMDk+Cis8VTMwMEE+Cis8VTMwMEI+Cis8VTMwMEM+Cis8VTMwMEQ+Cis8VTMwMEU+Cis8VTMwMEY+Cis8VTMwMTA+Cis8VTMwMTE+Cis8VUZGMEI+Cis8VTIyMTI+Cis8VTAwQjE+Cis8VTAwRDc+Cis8VTAwRjc+Cis8VUZGMUQ+Cis8VTIyNjA+Cis8VUZGMUM+Cis8VUZGMUU+Cis8VTIyNjY+Cis8VTIyNjc+Cis8VTIyMUU+Cis8VTIyMzQ+Cis8VTI2NDI+Cis8VTI2NDA+Cis8VTAwQjA+Cis8VTIwMzI+Cis8VTIwMzM+Cis8VTIxMDM+Cis8VUZGRTU+Cis8VUZGMDQ+Cis8VTAwQTI+Cis8VTAwQTM+Cis8VUZGMDU+Cis8VUZGMDM+Cis8VUZGMDY+Cis8VUZGMEE+Cis8VUZGMjA+Cis8VTAwQTc+Cis8VTI2MDY+Cis8VTI2MDU+Cis8VTI1Q0I+Cis8VTI1Q0Y+Cis8VTI1Q0U+Cis8VTI1Qzc+Cis8VTI1QzY+Cis8VTI1QTE+Cis8VTI1QTA+Cis8VTI1QjM+Cis8VTI1QjI+Cis8VTI1QkQ+Cis8VTI1QkM+Cis8VTIwM0I+Cis8VTMwMTI+Cis8VTIxOTI+Cis8VTIxOTA+Cis8VTIxOTE+Cis8VTIxOTM+Cis8VTMwMTM+Cis8VTIyMDg+Cis8VTIyMEI+Cis8VTIyODY+Cis8VTIyODc+Cis8VTIyODI+Cis8VTIyODM+Cis8VTIyMkE+Cis8VTIyMjk+Cis8VTIyMjc+Cis8VTIyMjg+Cis8VTAwQUM+Cis8VTIxRDI+Cis8VTIxRDQ+Cis8VTIyMDA+Cis8VTIyMDM+Cis8VTIyMjA+Cis8VTIyQTU+Cis8VTIzMTI+Cis8VTIyMDI+Cis8VTIyMDc+Cis8VTIyNjE+Cis8VTIyNTI+Cis8VTIyNkE+Cis8VTIyNkI+Cis8VTIyMUE+Cis8VTIyM0Q+Cis8VTIyMUQ+Cis8VTIyMzU+Cis8VTIyMkI+Cis8VTIyMkM+Cis8VTIxMkI+Cis8VTIwMzA+Cis8VTI2NkY+Cis8VTI2NkQ+Cis8VTI2NkE+Cis8VTIwMjA+Cis8VTIwMjE+Cis8VTAwQjY+Cis8VTI1RUY+Cis8VUZGMTA+Cis8VUZGMTE+Cis8VUZGMTI+Cis8VUZGMTM+Cis8VUZGMTQ+Cis8VUZGMTU+Cis8VUZGMTY+Cis8VUZGMTc+Cis8VUZGMTg+Cis8VUZGMTk+Cis8VUZGMjE+Cis8VUZGMjI+Cis8VUZGMjM+Cis8VUZGMjQ+Cis8VUZGMjU+Cis8VUZGMjY+Cis8VUZGMjc+Cis8VUZGMjg+Cis8VUZGMjk+Cis8VUZGMkE+Cis8VUZGMkI+Cis8VUZGMkM+Cis8VUZGMkQ+Cis8VUZGMkU+Cis8VUZGMkY+Cis8VUZGMzA+Cis8VUZGMzE+Cis8VUZGMzI+Cis8VUZGMzM+Cis8VUZGMzQ+Cis8VUZGMzU+Cis8VUZGMzY+Cis8VUZGMzc+Cis8VUZGMzg+Cis8VUZGMzk+Cis8VUZGM0E+Cis8VUZGNDE+Cis8VUZGNDI+Cis8VUZGNDM+Cis8VUZGNDQ+Cis8VUZGNDU+Cis8VUZGNDY+Cis8VUZGNDc+Cis8VUZGNDg+Cis8VUZGNDk+Cis8VUZGNEE+Cis8VUZGNEI+Cis8VUZGNEM+Cis8VUZGNEQ+Cis8VUZGNEU+Cis8VUZGNEY+Cis8VUZGNTA+Cis8VUZGNTE+Cis8VUZGNTI+Cis8VUZGNTM+Cis8VUZGNTQ+Cis8VUZGNTU+Cis8VUZGNTY+Cis8VUZGNTc+Cis8VUZGNTg+Cis8VUZGNTk+Cis8VUZGNUE+Cis8VTMwNDE+Cis8VTMwNDI+Cis8VTMwNDM+Cis8VTMwNDQ+Cis8VTMwNDU+Cis8VTMwNDY+Cis8VTMwNDc+Cis8VTMwNDg+Cis8VTMwNDk+Cis8VTMwNEE+Cis8VTMwNEI+Cis8VTMwNEM+Cis8VTMwNEQ+Cis8VTMwNEU+Cis8VTMwNEY+Cis8VTMwNTA+Cis8VTMwNTE+Cis8VTMwNTI+Cis8VTMwNTM+Cis8VTMwNTQ+Cis8VTMwNTU+Cis8VTMwNTY+Cis8VTMwNTc+Cis8VTMwNTg+Cis8VTMwNTk+Cis8VTMwNUE+Cis8VTMwNUI+Cis8VTMwNUM+Cis8VTMwNUQ+Cis8VTMwNUU+Cis8VTMwNUY+Cis8VTMwNjA+Cis8VTMwNjE+Cis8VTMwNjI+Cis8VTMwNjM+Cis8VTMwNjQ+Cis8VTMwNjU+Cis8VTMwNjY+Cis8VTMwNjc+Cis8VTMwNjg+Cis8VTMwNjk+Cis8VTMwNkE+Cis8VTMwNkI+Cis8VTMwNkM+Cis8VTMwNkQ+Cis8VTMwNkU+Cis8VTMwNkY+Cis8VTMwNzA+Cis8VTMwNzE+Cis8VTMwNzI+Cis8VTMwNzM+Cis8VTMwNzQ+Cis8VTMwNzU+Cis8VTMwNzY+Cis8VTMwNzc+Cis8VTMwNzg+Cis8VTMwNzk+Cis8VTMwN0E+Cis8VTMwN0I+Cis8VTMwN0M+Cis8VTMwN0Q+Cis8VTMwN0U+Cis8VTMwN0Y+Cis8VTMwODA+Cis8VTMwODE+Cis8VTMwODI+Cis8VTMwODM+Cis8VTMwODQ+Cis8VTMwODU+Cis8VTMwODY+Cis8VTMwODc+Cis8VTMwODg+Cis8VTMwODk+Cis8VTMwOEE+Cis8VTMwOEI+Cis8VTMwOEM+Cis8VTMwOEQ+Cis8VTMwOEU+Cis8VTMwOEY+Cis8VTMwOTA+Cis8VTMwOTE+Cis8VTMwOTI+Cis8VTMwOTM+Cis8VTMwQTE+Cis8VTMwQTI+Cis8VTMwQTM+Cis8VTMwQTQ+Cis8VTMwQTU+Cis8VTMwQTY+Cis8VTMwQTc+Cis8VTMwQTg+Cis8VTMwQTk+Cis8VTMwQUE+Cis8VTMwQUI+Cis8VTMwQUM+Cis8VTMwQUQ+Cis8VTMwQUU+Cis8VTMwQUY+Cis8VTMwQjA+Cis8VTMwQjE+Cis8VTMwQjI+Cis8VTMwQjM+Cis8VTMwQjQ+Cis8VTMwQjU+Cis8VTMwQjY+Cis8VTMwQjc+Cis8VTMwQjg+Cis8VTMwQjk+Cis8VTMwQkE+Cis8VTMwQkI+Cis8VTMwQkM+Cis8VTMwQkQ+Cis8VTMwQkU+Cis8VTMwQkY+Cis8VTMwQzA+Cis8VTMwQzE+Cis8VTMwQzI+Cis8VTMwQzM+Cis8VTMwQzQ+Cis8VTMwQzU+Cis8VTMwQzY+Cis8VTMwQzc+Cis8VTMwQzg+Cis8VTMwQzk+Cis8VTMwQ0E+Cis8VTMwQ0I+Cis8VTMwQ0M+Cis8VTMwQ0Q+Cis8VTMwQ0U+Cis8VTMwQ0Y+Cis8VTMwRDA+Cis8VTMwRDE+Cis8VTMwRDI+Cis8VTMwRDM+Cis8VTMwRDQ+Cis8VTMwRDU+Cis8VTMwRDY+Cis8VTMwRDc+Cis8VTMwRDg+Cis8VTMwRDk+Cis8VTMwREE+Cis8VTMwREI+Cis8VTMwREM+Cis8VTMwREQ+Cis8VTMwREU+Cis8VTMwREY+Cis8VTMwRTA+Cis8VTMwRTE+Cis8VTMwRTI+Cis8VTMwRTM+Cis8VTMwRTQ+Cis8VTMwRTU+Cis8VTMwRTY+Cis8VTMwRTc+Cis8VTMwRTg+Cis8VTMwRTk+Cis8VTMwRUE+Cis8VTMwRUI+Cis8VTMwRUM+Cis8VTMwRUQ+Cis8VTMwRUU+Cis8VTMwRUY+Cis8VTMwRjA+Cis8VTMwRjE+Cis8VTMwRjI+Cis8VTMwRjM+Cis8VTMwRjQ+Cis8VTMwRjU+Cis8VTMwRjY+Cis8VTAzOTE+Cis8VTAzOTI+Cis8VTAzOTM+Cis8VTAzOTQ+Cis8VTAzOTU+Cis8VTAzOTY+Cis8VTAzOTc+Cis8VTAzOTg+Cis8VTAzOTk+Cis8VTAzOUE+Cis8VTAzOUI+Cis8VTAzOUM+Cis8VTAzOUQ+Cis8VTAzOUU+Cis8VTAzOUY+Cis8VTAzQTA+Cis8VTAzQTE+Cis8VTAzQTM+Cis8VTAzQTQ+Cis8VTAzQTU+Cis8VTAzQTY+Cis8VTAzQTc+Cis8VTAzQTg+Cis8VTAzQTk+Cis8VTAzQjE+Cis8VTAzQjI+Cis8VTAzQjM+Cis8VTAzQjQ+Cis8VTAzQjU+Cis8VTAzQjY+Cis8VTAzQjc+Cis8VTAzQjg+Cis8VTAzQjk+Cis8VTAzQkE+Cis8VTAzQkI+Cis8VTAzQkM+Cis8VTAzQkQ+Cis8VTAzQkU+Cis8VTAzQkY+Cis8VTAzQzA+Cis8VTAzQzE+Cis8VTAzQzM+Cis8VTAzQzQ+Cis8VTAzQzU+Cis8VTAzQzY+Cis8VTAzQzc+Cis8VTAzQzg+Cis8VTAzQzk+Cis8VTA0MTA+Cis8VTA0MTE+Cis8VTA0MTI+Cis8VTA0MTM+Cis8VTA0MTQ+Cis8VTA0MTU+Cis8VTA0MDE+Cis8VTA0MTY+Cis8VTA0MTc+Cis8VTA0MTg+Cis8VTA0MTk+Cis8VTA0MUE+Cis8VTA0MUI+Cis8VTA0MUM+Cis8VTA0MUQ+Cis8VTA0MUU+Cis8VTA0MUY+Cis8VTA0MjA+Cis8VTA0MjE+Cis8VTA0MjI+Cis8VTA0MjM+Cis8VTA0MjQ+Cis8VTA0MjU+Cis8VTA0MjY+Cis8VTA0Mjc+Cis8VTA0Mjg+Cis8VTA0Mjk+Cis8VTA0MkE+Cis8VTA0MkI+Cis8VTA0MkM+Cis8VTA0MkQ+Cis8VTA0MkU+Cis8VTA0MkY+Cis8VTA0MzA+Cis8VTA0MzE+Cis8VTA0MzI+Cis8VTA0MzM+Cis8VTA0MzQ+Cis8VTA0MzU+Cis8VTA0NTE+Cis8VTA0MzY+Cis8VTA0Mzc+Cis8VTA0Mzg+Cis8VTA0Mzk+Cis8VTA0M0E+Cis8VTA0M0I+Cis8VTA0M0M+Cis8VTA0M0Q+Cis8VTA0M0U+Cis8VTA0M0Y+Cis8VTA0NDA+Cis8VTA0NDE+Cis8VTA0NDI+Cis8VTA0NDM+Cis8VTA0NDQ+Cis8VTA0NDU+Cis8VTA0NDY+Cis8VTA0NDc+Cis8VTA0NDg+Cis8VTA0NDk+Cis8VTA0NEE+Cis8VTA0NEI+Cis8VTA0NEM+Cis8VTA0NEQ+Cis8VTA0NEU+Cis8VTA0NEY+Cis8VTI1MDA+Cis8VTI1MDI+Cis8VTI1MEM+Cis8VTI1MTA+Cis8VTI1MTg+Cis8VTI1MTQ+Cis8VTI1MUM+Cis8VTI1MkM+Cis8VTI1MjQ+Cis8VTI1MzQ+Cis8VTI1M0M+Cis8VTI1MDE+Cis8VTI1MDM+Cis8VTI1MEY+Cis8VTI1MTM+Cis8VTI1MUI+Cis8VTI1MTc+Cis8VTI1MjM+Cis8VTI1MzM+Cis8VTI1MkI+Cis8VTI1M0I+Cis8VTI1NEI+Cis8VTI1MjA+Cis8VTI1MkY+Cis8VTI1Mjg+Cis8VTI1Mzc+Cis8VTI1M0Y+Cis8VTI1MUQ+Cis8VTI1MzA+Cis8VTI1MjU+Cis8VTI1Mzg+Cis8VTI1NDI+Cis8VTRFOUM+Cis8VTU1MTY+Cis8VTVBMDM+Cis8VTk2M0Y+Cis8VTU0QzA+Cis8VTYxMUI+Cis8VTYzMjg+Cis8VTU5RjY+Cis8VTkwMjI+Cis8VTg0NzU+Cis8VTgzMUM+Cis8VTdBNTA+Cis8VTYwQUE+Cis8VTYzRTE+Cis8VTZFMjU+Cis8VTY1RUQ+Cis8VTg0NjY+Cis8VTgyQTY+Cis8VTlCRjU+Cis8VTY4OTM+Cis8VTU3Mjc+Cis8VTY1QTE+Cis8VTYyNzE+Cis8VTVCOUI+Cis8VTU5RDA+Cis8VTg2N0I+Cis8VTk4RjQ+Cis8VTdENjI+Cis8VTdEQkU+Cis8VTlCOEU+Cis8VTYyMTY+Cis8VTdDOUY+Cis8VTg4Qjc+Cis8VTVCODk+Cis8VTVFQjU+Cis8VTYzMDk+Cis8VTY2OTc+Cis8VTY4NDg+Cis8VTk1Qzc+Cis8VTk3OEQ+Cis8VTY3NEY+Cis8VTRFRTU+Cis8VTRGMEE+Cis8VTRGNEQ+Cis8VTRGOUQ+Cis8VTUwNDk+Cis8VTU2RjI+Cis8VTU5Mzc+Cis8VTU5RDQ+Cis8VTVBMDE+Cis8VTVDMDk+Cis8VTYwREY+Cis8VTYxMEY+Cis8VTYxNzA+Cis8VTY2MTM+Cis8VTY5MDU+Cis8VTcwQkE+Cis8VTc1NEY+Cis8VTc1NzA+Cis8VTc5RkI+Cis8VTdEQUQ+Cis8VTdERUY+Cis8VTgwQzM+Cis8VTg0MEU+Cis8VTg4NjM+Cis8VThCMDI+Cis8VTkwNTU+Cis8VTkwN0E+Cis8VTUzM0I+Cis8VTRFOTU+Cis8VTRFQTU+Cis8VTU3REY+Cis8VTgwQjI+Cis8VTkwQzE+Cis8VTc4RUY+Cis8VTRFMDA+Cis8VTU4RjE+Cis8VTZFQTI+Cis8VTkwMzg+Cis8VTdBMzI+Cis8VTgzMjg+Cis8VTgyOEI+Cis8VTlDMkY+Cis8VTUxNDE+Cis8VTUzNzA+Cis8VTU0QkQ+Cis8VTU0RTE+Cis8VTU2RTA+Cis8VTU5RkI+Cis8VTVGMTU+Cis8VTk4RjI+Cis8VTZERUI+Cis8VTgwRTQ+Cis8VTg1MkQ+Cis8VTk2NjI+Cis8VTk2NzA+Cis8VTk2QTA+Cis8VTk3RkI+Cis8VTU0MEI+Cis8VTUzRjM+Cis8VTVCODc+Cis8VTcwQ0Y+Cis8VTdGQkQ+Cis8VThGQzI+Cis8VTk2RTg+Cis8VTUzNkY+Cis8VTlENUM+Cis8VTdBQkE+Cis8VTRFMTE+Cis8VTc4OTM+Cis8VTgxRkM+Cis8VTZFMjY+Cis8VTU2MTg+Cis8VTU1MDQ+Cis8VTZCMUQ+Cis8VTg1MUE+Cis8VTlDM0I+Cis8VTU5RTU+Cis8VTUzQTk+Cis8VTZENjY+Cis8VTc0REM+Cis8VTk1OEY+Cis8VTU2NDI+Cis8VTRFOTE+Cis8VTkwNEI+Cis8VTk2RjI+Cis8VTgzNEY+Cis8VTk5MEM+Cis8VTUzRTE+Cis8VTU1QjY+Cis8VTVCMzA+Cis8VTVGNzE+Cis8VTY2MjA+Cis8VTY2RjM+Cis8VTY4MDQ+Cis8VTZDMzg+Cis8VTZDRjM+Cis8VTZEMjk+Cis8VTc0NUI+Cis8VTc2Qzg+Cis8VTdBNEU+Cis8VTk4MzQ+Cis8VTgyRjE+Cis8VTg4NUI+Cis8VThBNjA+Cis8VTkyRUQ+Cis8VTZEQjI+Cis8VTc1QUI+Cis8VTc2Q0E+Cis8VTk5QzU+Cis8VTYwQTY+Cis8VThCMDE+Cis8VThEOEE+Cis8VTk1QjI+Cis8VTY5OEU+Cis8VTUzQUQ+Cis8VTUxODY+Cis8VTU3MTI+Cis8VTU4MzA+Cis8VTU5NDQ+Cis8VTVCQjQ+Cis8VTVFRjY+Cis8VTYwMjg+Cis8VTYzQTk+Cis8VTYzRjQ+Cis8VTZDQkY+Cis8VTZGMTQ+Cis8VTcwOEU+Cis8VTcxMTQ+Cis8VTcxNTk+Cis8VTcxRDU+Cis8VTczM0Y+Cis8VTdFMDE+Cis8VTgyNzY+Cis8VTgyRDE+Cis8VTg1OTc+Cis8VTkwNjA+Cis8VTkyNUI+Cis8VTlEMUI+Cis8VTU4Njk+Cis8VTY1QkM+Cis8VTZDNUE+Cis8VTc1MjU+Cis8VTUxRjk+Cis8VTU5MkU+Cis8VTU5NjU+Cis8VTVGODA+Cis8VTVGREM+Cis8VTYyQkM+Cis8VTY1RkE+Cis8VTZBMkE+Cis8VTZCMjc+Cis8VTZCQjQ+Cis8VTczOEI+Cis8VTdGQzE+Cis8VTg5NTY+Cis8VTlEMkM+Cis8VTlEMEU+Cis8VTlFQzQ+Cis8VTVDQTE+Cis8VTZDOTY+Cis8VTgzN0I+Cis8VTUxMDQ+Cis8VTVDNEI+Cis8VTYxQjY+Cis8VTgxQzY+Cis8VTY4NzY+Cis8VTcyNjE+Cis8VTRFNTk+Cis8VTRGRkE+Cis8VTUzNzg+Cis8VTYwNjk+Cis8VTZFMjk+Cis8VTdBNEY+Cis8VTk3RjM+Cis8VTRFMEI+Cis8VTUzMTY+Cis8VTRFRUU+Cis8VTRGNTU+Cis8VTRGM0Q+Cis8VTRGQTE+Cis8VTRGNzM+Cis8VTUyQTA+Cis8VTUzRUY+Cis8VTU2MDk+Cis8VTU5MEY+Cis8VTVBQzE+Cis8VTVCQjY+Cis8VTVCRTE+Cis8VTc5RDE+Cis8VTY2ODc+Cis8VTY3OUM+Cis8VTY3QjY+Cis8VTZCNEM+Cis8VTZDQjM+Cis8VTcwNkI+Cis8VTczQzI+Cis8VTc5OEQ+Cis8VTc5QkU+Cis8VTdBM0M+Cis8VTdCODc+Cis8VTgyQjE+Cis8VTgyREI+Cis8VTgzMDQ+Cis8VTgzNzc+Cis8VTgzRUY+Cis8VTgzRDM+Cis8VTg3NjY+Cis8VThBQjI+Cis8VTU2Mjk+Cis8VThDQTg+Cis8VThGRTY+Cis8VTkwNEU+Cis8VTk3MUU+Cis8VTg2OEE+Cis8VTRGQzQ+Cis8VTVDRTg+Cis8VTYyMTE+Cis8VTcyNTk+Cis8VTc1M0I+Cis8VTgxRTU+Cis8VTgyQkQ+Cis8VTg2RkU+Cis8VThDQzA+Cis8VTk2QzU+Cis8VTk5MTM+Cis8VTk5RDU+Cis8VTRFQ0I+Cis8VTRGMUE+Cis8VTg5RTM+Cis8VTU2REU+Cis8VTU4NEE+Cis8VTU4Q0E+Cis8VTVFRkI+Cis8VTVGRUI+Cis8VTYwMkE+Cis8VTYwOTQ+Cis8VTYwNjI+Cis8VTYxRDA+Cis8VTYyMTI+Cis8VTYyRDA+Cis8VTY1Mzk+Cis8VTlCNDE+Cis8VTY2NjY+Cis8VTY4QjA+Cis8VTZENzc+Cis8VTcwNzA+Cis8VTc1NEM+Cis8VTc2ODY+Cis8VTdENzU+Cis8VTgyQTU+Cis8VTg3Rjk+Cis8VTk1OEI+Cis8VTk2OEU+Cis8VThDOUQ+Cis8VTUxRjE+Cis8VTUyQkU+Cis8VTU5MTY+Cis8VTU0QjM+Cis8VTVCQjM+Cis8VTVEMTY+Cis8VTYxNjg+Cis8VTY5ODI+Cis8VTZEQUY+Cis8VTc4OEQ+Cis8VTg0Q0I+Cis8VTg4NTc+Cis8VThBNzI+Cis8VTkzQTc+Cis8VTlBQjg+Cis8VTZENkM+Cis8VTk5QTg+Cis8VTg2RDk+Cis8VTU3QTM+Cis8VTY3RkY+Cis8VTg2Q0U+Cis8VTkyMEU+Cis8VTUyODM+Cis8VTU2ODc+Cis8VTU0MDQ+Cis8VTVFRDM+Cis8VTYyRTE+Cis8VTY0Qjk+Cis8VTY4M0M+Cis8VTY4Mzg+Cis8VTZCQkI+Cis8VTczNzI+Cis8VTc4QkE+Cis8VTdBNkI+Cis8VTg5OUE+Cis8VTg5RDI+Cis8VThENkI+Cis8VThGMDM+Cis8VTkwRUQ+Cis8VTk1QTM+Cis8VTk2OTQ+Cis8VTk3Njk+Cis8VTVCNjY+Cis8VTVDQjM+Cis8VTY5N0Q+Cis8VTk4NEQ+Cis8VTk4NEU+Cis8VTYzOUI+Cis8VTdCMjA+Cis8VTZBMkI+Cis8VTZBN0Y+Cis8VTY4QjY+Cis8VTlDMEQ+Cis8VTZGNUY+Cis8VTUyNzI+Cis8VTU1OUQ+Cis8VTYwNzA+Cis8VTYyRUM+Cis8VTZEM0I+Cis8VTZFMDc+Cis8VTZFRDE+Cis8VTg0NUI+Cis8VTg5MTA+Cis8VThGNDQ+Cis8VTRFMTQ+Cis8VTlDMzk+Cis8VTUzRjY+Cis8VTY5MUI+Cis8VTZBM0E+Cis8VTk3ODQ+Cis8VTY4MkE+Cis8VTUxNUM+Cis8VTdBQzM+Cis8VTg0QjI+Cis8VTkxREM+Cis8VTkzOEM+Cis8VTU2NUI+Cis8VTlEMjg+Cis8VTY4MjI+Cis8VTgzMDU+Cis8VTg0MzE+Cis8VTdDQTU+Cis8VTUyMDg+Cis8VTgyQzU+Cis8VTc0RTY+Cis8VTRFN0U+Cis8VTRGODM+Cis8VTUxQTA+Cis8VTVCRDI+Cis8VTUyMEE+Cis8VTUyRDg+Cis8VTUyRTc+Cis8VTVERkI+Cis8VTU1OUE+Cis8VTU4MkE+Cis8VTU5RTY+Cis8VTVCOEM+Cis8VTVCOTg+Cis8VTVCREI+Cis8VTVFNzI+Cis8VTVFNzk+Cis8VTYwQTM+Cis8VTYxMUY+Cis8VTYxNjM+Cis8VTYxQkU+Cis8VTYzREI+Cis8VTY1NjI+Cis8VTY3RDE+Cis8VTY4NTM+Cis8VTY4RkE+Cis8VTZCM0U+Cis8VTZCNTM+Cis8VTZDNTc+Cis8VTZGMjI+Cis8VTZGOTc+Cis8VTZGNDU+Cis8VTc0QjA+Cis8VTc1MTg+Cis8VTc2RTM+Cis8VTc3MEI+Cis8VTdBRkY+Cis8VTdCQTE+Cis8VTdDMjE+Cis8VTdERTk+Cis8VTdGMzY+Cis8VTdGRjA+Cis8VTgwOUQ+Cis8VTgyNjY+Cis8VTgzOUU+Cis8VTg5QjM+Cis8VThBQ0M+Cis8VThDQUI+Cis8VTkwODQ+Cis8VTk0NTE+Cis8VTk1OTM+Cis8VTk1OTE+Cis8VTk1QTI+Cis8VTk2NjU+Cis8VTk3RDM+Cis8VTk5Mjg+Cis8VTgyMTg+Cis8VTRFMzg+Cis8VTU0MkI+Cis8VTVDQjg+Cis8VTVEQ0M+Cis8VTczQTk+Cis8VTc2NEM+Cis8VTc3M0M+Cis8VTVDQTk+Cis8VTdGRUI+Cis8VThEMEI+Cis8VTk2QzE+Cis8VTk4MTE+Cis8VTk4NTQ+Cis8VTk4NTg+Cis8VTRGMDE+Cis8VTRGMEU+Cis8VTUzNzE+Cis8VTU1OUM+Cis8VTU2Njg+Cis8VTU3RkE+Cis8VTU5NDc+Cis8VTVCMDk+Cis8VTVCQzQ+Cis8VTVDOTA+Cis8VTVFMEM+Cis8VTVFN0U+Cis8VTVGQ0M+Cis8VTYzRUU+Cis8VTY3M0E+Cis8VTY1RDc+Cis8VTY1RTI+Cis8VTY3MUY+Cis8VTY4Q0I+Cis8VTY4QzQ+Cis8VTZBNUY+Cis8VTVFMzA+Cis8VTZCQzU+Cis8VTZDMTc+Cis8VTZDN0Q+Cis8VTc1N0Y+Cis8VTc5NDg+Cis8VTVCNjM+Cis8VTdBMDA+Cis8VTdEMDA+Cis8VTVGQkQ+Cis8VTg5OEY+Cis8VThBMTg+Cis8VThDQjQ+Cis8VThENzc+Cis8VThFQ0M+Cis8VThGMUQ+Cis8VTk4RTI+Cis8VTlBMEU+Cis8VTlCM0M+Cis8VTRFODA+Cis8VTUwN0Q+Cis8VTUxMDA+Cis8VTU5OTM+Cis8VTVCOUM+Cis8VTYyMkY+Cis8VTYyODA+Cis8VTY0RUM+Cis8VTZCM0E+Cis8VTcyQTA+Cis8VTc1OTE+Cis8VTc5NDc+Cis8VTdGQTk+Cis8VTg3RkI+Cis8VThBQkM+Cis8VThCNzA+Cis8VTYzQUM+Cis8VTgzQ0E+Cis8VTk3QTA+Cis8VTU0MDk+Cis8VTU0MDM+Cis8VTU1QUI+Cis8VTY4NTQ+Cis8VTZBNTg+Cis8VThBNzA+Cis8VTc4Mjc+Cis8VTY3NzU+Cis8VTlFQ0Q+Cis8VTUzNzQ+Cis8VTVCQTI+Cis8VTgxMUE+Cis8VTg2NTA+Cis8VTkwMDY+Cis8VTRFMTg+Cis8VTRFNDU+Cis8VTRFQzc+Cis8VTRGMTE+Cis8VTUzQ0E+Cis8VTU0Mzg+Cis8VTVCQUU+Cis8VTVGMTM+Cis8VTYwMjU+Cis8VTY1NTE+Cis8VTY3M0Q+Cis8VTZDNDI+Cis8VTZDNzI+Cis8VTZDRTM+Cis8VTcwNzg+Cis8VTc0MDM+Cis8VTdBNzY+Cis8VTdBQUU+Cis8VTdCMDg+Cis8VTdEMUE+Cis8VTdDRkU+Cis8VTdENjY+Cis8VTY1RTc+Cis8VTcyNUI+Cis8VTUzQkI+Cis8VTVDNDU+Cis8VTVERTg+Cis8VTYyRDI+Cis8VTYyRTA+Cis8VTYzMTk+Cis8VTZFMjA+Cis8VTg2NUE+Cis8VThBMzE+Cis8VThEREQ+Cis8VTkyRjg+Cis8VTZGMDE+Cis8VTc5QTY+Cis8VTlCNUE+Cis8VTRFQTg+Cis8VTRFQUI+Cis8VTRFQUM+Cis8VTRGOUI+Cis8VTRGQTA+Cis8VTUwRDE+Cis8VTUxNDc+Cis8VTdBRjY+Cis8VTUxNzE+Cis8VTUxRjY+Cis8VTUzNTQ+Cis8VTUzMjE+Cis8VTUzN0Y+Cis8VTUzRUI+Cis8VTU1QUM+Cis8VTU4ODM+Cis8VTVDRTE+Cis8VTVGMzc+Cis8VTVGNEE+Cis8VTYwMkY+Cis8VTYwNTA+Cis8VTYwNkQ+Cis8VTYzMUY+Cis8VTY1NTk+Cis8VTZBNEI+Cis8VTZDQzE+Cis8VTcyQzI+Cis8VTcyRUQ+Cis8VTc3RUY+Cis8VTgwRjg+Cis8VTgxMDU+Cis8VTgyMDg+Cis8VTg1NEU+Cis8VTkwRjc+Cis8VTkzRTE+Cis8VTk3RkY+Cis8VTk5NTc+Cis8VTlBNUE+Cis8VTRFRjA+Cis8VTUxREQ+Cis8VTVDMkQ+Cis8VTY2ODE+Cis8VTY5NkQ+Cis8VTVDNDA+Cis8VTY2RjI+Cis8VTY5NzU+Cis8VTczODk+Cis8VTY4NTA+Cis8VTdDODE+Cis8VTUwQzU+Cis8VTUyRTQ+Cis8VTU3NDc+Cis8VTVERkU+Cis8VTkzMjY+Cis8VTY1QTQ+Cis8VTZCMjM+Cis8VTZCM0Q+Cis8VTc0MzQ+Cis8VTc5ODE+Cis8VTc5QkQ+Cis8VTdCNEI+Cis8VTdEQ0E+Cis8VTgyQjk+Cis8VTgzQ0M+Cis8VTg4N0Y+Cis8VTg5NUY+Cis8VThCMzk+Cis8VThGRDE+Cis8VTkxRDE+Cis8VTU0MUY+Cis8VTkyODA+Cis8VTRFNUQ+Cis8VTUwMzY+Cis8VTUzRTU+Cis8VTUzM0E+Cis8VTcyRDc+Cis8VTczOTY+Cis8VTc3RTk+Cis8VTgyRTY+Cis8VThFQUY+Cis8VTk5QzY+Cis8VTk5Qzg+Cis8VTk5RDI+Cis8VTUxNzc+Cis8VTYxMUE+Cis8VTg2NUU+Cis8VTU1QjA+Cis8VTdBN0E+Cis8VTUwNzY+Cis8VTVCRDM+Cis8VTkwNDc+Cis8VTk2ODU+Cis8VTRFMzI+Cis8VTZBREI+Cis8VTkxRTc+Cis8VTVDNTE+Cis8VTVDNDg+Cis8VTYzOTg+Cis8VTdBOUY+Cis8VTZDOTM+Cis8VTk3NzQ+Cis8VThGNjE+Cis8VTdBQUE+Cis8VTcxOEE+Cis8VTk2ODg+Cis8VTdDODI+Cis8VTY4MTc+Cis8VTdFNzA+Cis8VTY4NTE+Cis8VTkzNkM+Cis8VTUyRjI+Cis8VTU0MUI+Cis8VTg1QUI+Cis8VThBMTM+Cis8VTdGQTQ+Cis8VThFQ0Q+Cis8VTkwRTE+Cis8VTUzNjY+Cis8VTg4ODg+Cis8VTc5NDE+Cis8VTRGQzI+Cis8VTUwQkU+Cis8VTUyMTE+Cis8VTUxNDQ+Cis8VTU1NTM+Cis8VTU3MkQ+Cis8VTczRUE+Cis8VTU3OEI+Cis8VTU5NTE+Cis8VTVGNjI+Cis8VTVGODQ+Cis8VTYwNzU+Cis8VTYxNzY+Cis8VTYxNjc+Cis8VTYxQTk+Cis8VTYzQjI+Cis8VTY0M0E+Cis8VTY1NkM+Cis8VTY2NkY+Cis8VTY4NDI+Cis8VTZFMTM+Cis8VTc1NjY+Cis8VTdBM0Q+Cis8VTdDRkI+Cis8VTdENEM+Cis8VTdEOTk+Cis8VTdFNEI+Cis8VTdGNkI+Cis8VTgzMEU+Cis8VTgzNEE+Cis8VTg2Q0Q+Cis8VThBMDg+Cis8VThBNjM+Cis8VThCNjY+Cis8VThFRkQ+Cis8VTk4MUE+Cis8VTlEOEY+Cis8VTgyQjg+Cis8VThGQ0U+Cis8VTlCRTg+Cis8VTUyODc+Cis8VTYyMUY+Cis8VTY0ODM+Cis8VTZGQzA+Cis8VTk2OTk+Cis8VTY4NDE+Cis8VTUwOTE+Cis8VTZCMjA+Cis8VTZDN0E+Cis8VTZGNTQ+Cis8VTdBNzQ+Cis8VTdENTA+Cis8VTg4NDA+Cis8VThBMjM+Cis8VTY3MDg+Cis8VTRFRjY+Cis8VTUwMzk+Cis8VTUwMjY+Cis8VTUwNjU+Cis8VTUxN0M+Cis8VTUyMzg+Cis8VTUyNjM+Cis8VTU1QTc+Cis8VTU3MEY+Cis8VTU4MDU+Cis8VTVBQ0M+Cis8VTVFRkE+Cis8VTYxQjI+Cis8VTYxRjg+Cis8VTYyRjM+Cis8VTYzNzI+Cis8VTY5MUM+Cis8VTZBMjk+Cis8VTcyN0Q+Cis8VTcyQUM+Cis8VTczMkU+Cis8VTc4MTQ+Cis8VTc4NkY+Cis8VTdENzk+Cis8VTc3MEM+Cis8VTgwQTk+Cis8VTg5OEI+Cis8VThCMTk+Cis8VThDRTI+Cis8VThFRDI+Cis8VTkwNjM+Cis8VTkzNzU+Cis8VTk2N0E+Cis8VTk4NTU+Cis8VTlBMTM+Cis8VTlFNzg+Cis8VTUxNDM+Cis8VTUzOUY+Cis8VTUzQjM+Cis8VTVFN0I+Cis8VTVGMjY+Cis8VTZFMUI+Cis8VTZFOTA+Cis8VTczODQ+Cis8VTczRkU+Cis8VTdENDM+Cis8VTgyMzc+Cis8VThBMDA+Cis8VThBRkE+Cis8VTk2NTA+Cis8VTRFNEU+Cis8VTUwMEI+Cis8VTUzRTQ+Cis8VTU0N0M+Cis8VTU2RkE+Cis8VTU5RDE+Cis8VTVCNjQ+Cis8VTVERjE+Cis8VTVFQUI+Cis8VTVGMjc+Cis8VTYyMzg+Cis8VTY1NDU+Cis8VTY3QUY+Cis8VTZFNTY+Cis8VTcyRDA+Cis8VTdDQ0E+Cis8VTg4QjQ+Cis8VTgwQTE+Cis8VTgwRTE+Cis8VTgzRjA+Cis8VTg2NEU+Cis8VThBODc+Cis8VThERTg+Cis8VTkyMzc+Cis8VTk2Qzc+Cis8VTk4Njc+Cis8VTlGMTM+Cis8VTRFOTQ+Cis8VTRFOTI+Cis8VTRGMEQ+Cis8VTUzNDg+Cis8VTU0NDk+Cis8VTU0M0U+Cis8VTVBMkY+Cis8VTVGOEM+Cis8VTVGQTE+Cis8VTYwOUY+Cis8VTY4QTc+Cis8VTZBOEU+Cis8VTc0NUE+Cis8VTc4ODE+Cis8VThBOUU+Cis8VThBQTQ+Cis8VThCNzc+Cis8VTkxOTA+Cis8VTRFNUU+Cis8VTlCQzk+Cis8VTRFQTQ+Cis8VTRGN0M+Cis8VTRGQUY+Cis8VTUwMTk+Cis8VTUwMTY+Cis8VTUxNDk+Cis8VTUxNkM+Cis8VTUyOUY+Cis8VTUyQjk+Cis8VTUyRkU+Cis8VTUzOUE+Cis8VTUzRTM+Cis8VTU0MTE+Cis8VTU0MEU+Cis8VTU1ODk+Cis8VTU3NTE+Cis8VTU3QTI+Cis8VTU5N0Q+Cis8VTVCNTQ+Cis8VTVCNUQ+Cis8VTVCOEY+Cis8VTVERTU+Cis8VTVERTc+Cis8VTVERjc+Cis8VTVFNzg+Cis8VTVFODM+Cis8VTVFOUE+Cis8VTVFQjc+Cis8VTVGMTg+Cis8VTYwNTI+Cis8VTYxNEM+Cis8VTYyOTc+Cis8VTYyRDg+Cis8VTYzQTc+Cis8VTY1M0I+Cis8VTY2MDI+Cis8VTY2NDM+Cis8VTY2RjQ+Cis8VTY3NkQ+Cis8VTY4MjE+Cis8VTY4OTc+Cis8VTY5Q0I+Cis8VTZDNUY+Cis8VTZEMkE+Cis8VTZENjk+Cis8VTZFMkY+Cis8VTZFOUQ+Cis8VTc1MzI+Cis8VTc2ODc+Cis8VTc4NkM+Cis8VTdBM0Y+Cis8VTdDRTA+Cis8VTdEMDU+Cis8VTdEMTg+Cis8VTdENUU+Cis8VTdEQjE+Cis8VTgwMTU+Cis8VTgwMDM+Cis8VTgwQUY+Cis8VTgwQjE+Cis8VTgxNTQ+Cis8VTgxOEY+Cis8VTgyMkE+Cis8VTgzNTI+Cis8VTg4NEM+Cis8VTg4NjE+Cis8VThCMUI+Cis8VThDQTI+Cis8VThDRkM+Cis8VTkwQ0E+Cis8VTkxNzU+Cis8VTkyNzE+Cis8VTc4M0Y+Cis8VTkyRkM+Cis8VTk1QTQ+Cis8VTk2NEQ+Cis8VTk4MDU+Cis8VTk5OTk+Cis8VTlBRDg+Cis8VTlEM0I+Cis8VTUyNUI+Cis8VTUyQUI+Cis8VTUzRjc+Cis8VTU0MDg+Cis8VTU4RDU+Cis8VTYyRjc+Cis8VTZGRTA+Cis8VThDNkE+Cis8VThGNUY+Cis8VTlFQjk+Cis8VTUxNEI+Cis8VTUyM0I+Cis8VTU0NEE+Cis8VTU2RkQ+Cis8VTdBNDA+Cis8VTkxNzc+Cis8VTlENjA+Cis8VTlFRDI+Cis8VTczNDQ+Cis8VTZGMDk+Cis8VTgxNzA+Cis8VTc1MTE+Cis8VTVGRkQ+Cis8VTYwREE+Cis8VTlBQTg+Cis8VTcyREI+Cis8VThGQkM+Cis8VTZCNjQ+Cis8VTk4MDM+Cis8VTRFQ0E+Cis8VTU2RjA+Cis8VTU3NjQ+Cis8VTU4QkU+Cis8VTVBNUE+Cis8VTYwNjg+Cis8VTYxQzc+Cis8VTY2MEY+Cis8VTY2MDY+Cis8VTY4Mzk+Cis8VTY4QjE+Cis8VTZERjc+Cis8VTc1RDU+Cis8VTdEM0E+Cis8VTgyNkU+Cis8VTlCNDI+Cis8VTRFOUI+Cis8VTRGNTA+Cis8VTUzQzk+Cis8VTU1MDY+Cis8VTVENkY+Cis8VTVERTY+Cis8VTVERUU+Cis8VTY3RkI+Cis8VTZDOTk+Cis8VTc0NzM+Cis8VTc4MDI+Cis8VThBNTA+Cis8VTkzOTY+Cis8VTg4REY+Cis8VTU3NTA+Cis8VTVFQTc+Cis8VTYzMkI+Cis8VTUwQjU+Cis8VTUwQUM+Cis8VTUxOEQ+Cis8VTY3MDA+Cis8VTU0Qzk+Cis8VTU4NUU+Cis8VTU5QkI+Cis8VTVCQjA+Cis8VTVGNjk+Cis8VTYyNEQ+Cis8VTYzQTE+Cis8VTY4M0Q+Cis8VTZCNzM+Cis8VTZFMDg+Cis8VTcwN0Q+Cis8VTkxQzc+Cis8VTcyODA+Cis8VTc4MTU+Cis8VTc4MjY+Cis8VTc5NkQ+Cis8VTY1OEU+Cis8VTdEMzA+Cis8VTgzREM+Cis8VTg4QzE+Cis8VThGMDk+Cis8VTk2OUI+Cis8VTUyNjQ+Cis8VTU3Mjg+Cis8VTY3NTA+Cis8VTdGNkE+Cis8VThDQTE+Cis8VTUxQjQ+Cis8VTU3NDI+Cis8VTk2MkE+Cis8VTU4M0E+Cis8VTY5OEE+Cis8VTgwQjQ+Cis8VTU0QjI+Cis8VTVEMEU+Cis8VTU3RkM+Cis8VTc4OTU+Cis8VTlERkE+Cis8VTRGNUM+Cis8VTUyNEE+Cis8VTU0OEI+Cis8VTY0M0U+Cis8VTY2Mjg+Cis8VTY3MTQ+Cis8VTY3RjU+Cis8VTdBODQ+Cis8VTdCNTY+Cis8VTdEMjI+Cis8VTkzMkY+Cis8VTY4NUM+Cis8VTlCQUQ+Cis8VTdCMzk+Cis8VTUzMTk+Cis8VTUxOEE+Cis8VTUyMzc+Cis8VTVCREY+Cis8VTYyRjY+Cis8VTY0QUU+Cis8VTY0RTY+Cis8VTY3MkQ+Cis8VTZCQkE+Cis8VTg1QTk+Cis8VTk2RDE+Cis8VTc2OTA+Cis8VTlCRDY+Cis8VTYzNEM+Cis8VTkzMDY+Cis8VTlCQUI+Cis8VTc2QkY+Cis8VTY2NTI+Cis8VTRFMDk+Cis8VTUwOTg+Cis8VTUzQzI+Cis8VTVDNzE+Cis8VTYwRTg+Cis8VTY0OTI+Cis8VTY1NjM+Cis8VTY4NUY+Cis8VTcxRTY+Cis8VTczQ0E+Cis8VTc1MjM+Cis8VTdCOTc+Cis8VTdFODI+Cis8VTg2OTU+Cis8VThCODM+Cis8VThDREI+Cis8VTkxNzg+Cis8VTk5MTA+Cis8VTY1QUM+Cis8VTY2QUI+Cis8VTZCOEI+Cis8VTRFRDU+Cis8VTRFRDQ+Cis8VTRGM0E+Cis8VTRGN0Y+Cis8VTUyM0E+Cis8VTUzRjg+Cis8VTUzRjI+Cis8VTU1RTM+Cis8VTU2REI+Cis8VTU4RUI+Cis8VTU5Q0I+Cis8VTU5Qzk+Cis8VTU5RkY+Cis8VTVCNTA+Cis8VTVDNEQ+Cis8VTVFMDI+Cis8VTVFMkI+Cis8VTVGRDc+Cis8VTYwMUQ+Cis8VTYzMDc+Cis8VTY1MkY+Cis8VTVCNUM+Cis8VTY1QUY+Cis8VTY1QkQ+Cis8VTY1RTg+Cis8VTY3OUQ+Cis8VTZCNjI+Cis8VTZCN0I+Cis8VTZDMEY+Cis8VTczNDU+Cis8VTc5NDk+Cis8VTc5QzE+Cis8VTdDRjg+Cis8VTdEMTk+Cis8VTdEMkI+Cis8VTgwQTI+Cis8VTgxMDI+Cis8VTgxRjM+Cis8VTg5OTY+Cis8VThBNUU+Cis8VThBNjk+Cis8VThBNjY+Cis8VThBOEM+Cis8VThBRUU+Cis8VThDQzc+Cis8VThDREM+Cis8VTk2Q0M+Cis8VTk4RkM+Cis8VTZCNkY+Cis8VTRFOEI+Cis8VTRGM0M+Cis8VTRGOEQ+Cis8VTUxNTA+Cis8VTVCNTc+Cis8VTVCRkE+Cis8VTYxNDg+Cis8VTYzMDE+Cis8VTY2NDI+Cis8VTZCMjE+Cis8VTZFQ0I+Cis8VTZDQkI+Cis8VTcyM0U+Cis8VTc0QkQ+Cis8VTc1RDQ+Cis8VTc4QzE+Cis8VTc5M0E+Cis8VTgwMEM+Cis8VTgwMzM+Cis8VTgxRUE+Cis8VTg0OTQ+Cis8VThGOUU+Cis8VTZDNTA+Cis8VTlFN0Y+Cis8VTVGMEY+Cis8VThCNTg+Cis8VTlEMkI+Cis8VTdBRkE+Cis8VThFRjg+Cis8VTVCOEQ+Cis8VTk2RUI+Cis8VTRFMDM+Cis8VTUzRjE+Cis8VTU3Rjc+Cis8VTU5MzE+Cis8VTVBQzk+Cis8VTVCQTQ+Cis8VTYwODk+Cis8VTZFN0Y+Cis8VTZGMDY+Cis8VTc1QkU+Cis8VThDRUE+Cis8VTVCOUY+Cis8VTg1MDA+Cis8VTdCRTA+Cis8VTUwNzI+Cis8VTY3RjQ+Cis8VTgyOUQ+Cis8VTVDNjE+Cis8VTg1NEE+Cis8VTdFMUU+Cis8VTgyMEU+Cis8VTUxOTk+Cis8VTVDMDQ+Cis8VTYzNjg+Cis8VThENjY+Cis8VTY1OUM+Cis8VTcxNkU+Cis8VTc5M0U+Cis8VTdEMTc+Cis8VTgwMDU+Cis8VThCMUQ+Cis8VThFQ0E+Cis8VTkwNkU+Cis8VTg2Qzc+Cis8VTkwQUE+Cis8VTUwMUY+Cis8VTUyRkE+Cis8VTVDM0E+Cis8VTY3NTM+Cis8VTcwN0M+Cis8VTcyMzU+Cis8VTkxNEM+Cis8VTkxQzg+Cis8VTkzMkI+Cis8VTgyRTU+Cis8VTVCQzI+Cis8VTVGMzE+Cis8VTYwRjk+Cis8VTRFM0I+Cis8VTUzRDY+Cis8VTVCODg+Cis8VTYyNEI+Cis8VTY3MzE+Cis8VTZCOEE+Cis8VTcyRTk+Cis8VTczRTA+Cis8VTdBMkU+Cis8VTgxNkI+Cis8VThEQTM+Cis8VTkxNTI+Cis8VTk5OTY+Cis8VTUxMTI+Cis8VTUzRDc+Cis8VTU0NkE+Cis8VTVCRkY+Cis8VTYzODg+Cis8VTZBMzk+Cis8VTdEQUM+Cis8VTk3MDA+Cis8VTU2REE+Cis8VTUzQ0U+Cis8VTU0Njg+Cis8VTVCOTc+Cis8VTVDMzE+Cis8VTVEREU+Cis8VTRGRUU+Cis8VTYxMDE+Cis8VTYyRkU+Cis8VTZEMzI+Cis8VTc5QzA+Cis8VTc5Q0I+Cis8VTdENDI+Cis8VTdFNEQ+Cis8VTdGRDI+Cis8VTgxRUQ+Cis8VTgyMUY+Cis8VTg0OTA+Cis8VTg4NDY+Cis8VTg5NzI+Cis8VThCOTA+Cis8VThFNzQ+Cis8VThGMkY+Cis8VTkwMzE+Cis8VTkxNEI+Cis8VTkxNkM+Cis8VTk2QzY+Cis8VTkxOUM+Cis8VTRFQzA+Cis8VTRGNEY+Cis8VTUxNDU+Cis8VTUzNDE+Cis8VTVGOTM+Cis8VTYyMEU+Cis8VTY3RDQ+Cis8VTZDNDE+Cis8VTZFMEI+Cis8VTczNjM+Cis8VTdFMjY+Cis8VTkxQ0Q+Cis8VTkyODM+Cis8VTUzRDQ+Cis8VTU5MTk+Cis8VTVCQkY+Cis8VTZERDE+Cis8VTc5NUQ+Cis8VTdFMkU+Cis8VTdDOUI+Cis8VTU4N0U+Cis8VTcxOUY+Cis8VTUxRkE+Cis8VTg4NTM+Cis8VThGRjA+Cis8VTRGQ0E+Cis8VTVDRkI+Cis8VTY2MjU+Cis8VTc3QUM+Cis8VTdBRTM+Cis8VTgyMUM+Cis8VTk5RkY+Cis8VTUxQzY+Cis8VTVGQUE+Cis8VTY1RUM+Cis8VTY5NkY+Cis8VTZCODk+Cis8VTZERjM+Cis8VTZFOTY+Cis8VTZGNjQ+Cis8VTc2RkU+Cis8VTdEMTQ+Cis8VTVERTE+Cis8VTkwNzU+Cis8VTkxODc+Cis8VTk4MDY+Cis8VTUxRTY+Cis8VTUyMUQ+Cis8VTYyNDA+Cis8VTY2OTE+Cis8VTY2RDk+Cis8VTZFMUE+Cis8VTVFQjY+Cis8VTdERDI+Cis8VTdGNzI+Cis8VTY2Rjg+Cis8VTg1QUY+Cis8VTg1Rjc+Cis8VThBRjg+Cis8VTUyQTk+Cis8VTUzRDk+Cis8VTU5NzM+Cis8VTVFOEY+Cis8VTVGOTA+Cis8VTYwNTU+Cis8VTkyRTQ+Cis8VTk2NjQ+Cis8VTUwQjc+Cis8VTUxMUY+Cis8VTUyREQ+Cis8VTUzMjA+Cis8VTUzNDc+Cis8VTUzRUM+Cis8VTU0RTg+Cis8VTU1NDY+Cis8VTU1MzE+Cis8VTU2MTc+Cis8VTU5Njg+Cis8VTU5QkU+Cis8VTVBM0M+Cis8VTVCQjU+Cis8VTVDMDY+Cis8VTVDMEY+Cis8VTVDMTE+Cis8VTVDMUE+Cis8VTVFODQ+Cis8VTVFOEE+Cis8VTVFRTA+Cis8VTVGNzA+Cis8VTYyN0Y+Cis8VTYyODQ+Cis8VTYyREI+Cis8VTYzOEM+Cis8VTYzNzc+Cis8VTY2MDc+Cis8VTY2MEM+Cis8VTY2MkQ+Cis8VTY2NzY+Cis8VTY3N0U+Cis8VTY4QTI+Cis8VTZBMUY+Cis8VTZBMzU+Cis8VTZDQkM+Cis8VTZEODg+Cis8VTZFMDk+Cis8VTZFNTg+Cis8VTcxM0M+Cis8VTcxMjY+Cis8VTcxNjc+Cis8VTc1Qzc+Cis8VTc3MDE+Cis8VTc4NUQ+Cis8VTc5MDE+Cis8VTc5NjU+Cis8VTc5RjA+Cis8VTdBRTA+Cis8VTdCMTE+Cis8VTdDQTc+Cis8VTdEMzk+Cis8VTgwOTY+Cis8VTgzRDY+Cis8VTg0OEI+Cis8VTg1NDk+Cis8VTg4NUQ+Cis8VTg4RjM+Cis8VThBMUY+Cis8VThBM0M+Cis8VThBNTQ+Cis8VThBNzM+Cis8VThDNjE+Cis8VThDREU+Cis8VTkxQTQ+Cis8VTkyNjY+Cis8VTkzN0U+Cis8VTk0MTg+Cis8VTk2OUM+Cis8VTk3OTg+Cis8VTRFMEE+Cis8VTRFMDg+Cis8VTRFMUU+Cis8VTRFNTc+Cis8VTUxOTc+Cis8VTUyNzA+Cis8VTU3Q0U+Cis8VTU4MzQ+Cis8VTU4Q0M+Cis8VTVCMjI+Cis8VTVFMzg+Cis8VTYwQzU+Cis8VTY0RkU+Cis8VTY3NjE+Cis8VTY3NTY+Cis8VTZENDQ+Cis8VTcyQjY+Cis8VTc1NzM+Cis8VTdBNjM+Cis8VTg0Qjg+Cis8VThCNzI+Cis8VTkxQjg+Cis8VTkzMjA+Cis8VTU2MzE+Cis8VTU3RjQ+Cis8VTk4RkU+Cis8VTYyRUQ+Cis8VTY5MEQ+Cis8VTZCOTY+Cis8VTcxRUQ+Cis8VTdFNTQ+Cis8VTgwNzc+Cis8VTgyNzI+Cis8VTg5RTY+Cis8VTk4REY+Cis8VTg3NTU+Cis8VThGQjE+Cis8VTVDM0I+Cis8VTRGMzg+Cis8VTRGRTE+Cis8VTRGQjU+Cis8VTU1MDc+Cis8VTVBMjA+Cis8VTVCREQ+Cis8VTVCRTk+Cis8VTVGQzM+Cis8VTYxNEU+Cis8VTYzMkY+Cis8VTY1QjA+Cis8VTY2NEI+Cis8VTY4RUU+Cis8VTY5OUI+Cis8VTZENzg+Cis8VTZERjE+Cis8VTc1MzM+Cis8VTc1Qjk+Cis8VTc3MUY+Cis8VTc5NUU+Cis8VTc5RTY+Cis8VTdEMzM+Cis8VTgxRTM+Cis8VTgyQUY+Cis8VTg1QUE+Cis8VTg5QUE+Cis8VThBM0E+Cis8VThFQUI+Cis8VThGOUI+Cis8VTkwMzI+Cis8VTkxREQ+Cis8VTk3MDc+Cis8VTRFQkE+Cis8VTRFQzE+Cis8VTUyMDM+Cis8VTU4NzU+Cis8VTU4RUM+Cis8VTVDMEI+Cis8VTc1MUE+Cis8VTVDM0Q+Cis8VTgxNEU+Cis8VThBMEE+Cis8VThGQzU+Cis8VTk2NjM+Cis8VTk3NkQ+Cis8VTdCMjU+Cis8VThBQ0Y+Cis8VTk4MDg+Cis8VTkxNjI+Cis8VTU2RjM+Cis8VTUzQTg+Cis8VTkwMTc+Cis8VTU0Mzk+Cis8VTU3ODI+Cis8VTVFMjU+Cis8VTYzQTg+Cis8VTZDMzQ+Cis8VTcwOEE+Cis8VTc3NjE+Cis8VTdDOEI+Cis8VTdGRTA+Cis8VTg4NzA+Cis8VTkwNDI+Cis8VTkxNTQ+Cis8VTkzMTA+Cis8VTkzMTg+Cis8VTk2OEY+Cis8VTc0NUU+Cis8VTlBQzQ+Cis8VTVEMDc+Cis8VTVENjk+Cis8VTY1NzA+Cis8VTY3QTI+Cis8VThEQTg+Cis8VTk2REI+Cis8VTYzNkU+Cis8VTY3NDk+Cis8VTY5MTk+Cis8VTgzQzU+Cis8VTk4MTc+Cis8VTk2QzA+Cis8VTg4RkU+Cis8VTZGODQ+Cis8VTY0N0E+Cis8VTVCRjg+Cis8VTRFMTY+Cis8VTcwMkM+Cis8VTc1NUQ+Cis8VTY2MkY+Cis8VTUxQzQ+Cis8VTUyMzY+Cis8VTUyRTI+Cis8VTU5RDM+Cis8VTVGODE+Cis8VTYwMjc+Cis8VTYyMTA+Cis8VTY1M0Y+Cis8VTY1NzQ+Cis8VTY2MUY+Cis8VTY2NzQ+Cis8VTY4RjI+Cis8VTY4MTY+Cis8VTZCNjM+Cis8VTZFMDU+Cis8VTcyNzI+Cis8VTc1MUY+Cis8VTc2REI+Cis8VTdDQkU+Cis8VTgwNTY+Cis8VTU4RjA+Cis8VTg4RkQ+Cis8VTg5N0Y+Cis8VThBQTA+Cis8VThBOTM+Cis8VThBQ0I+Cis8VTkwMUQ+Cis8VTkxOTI+Cis8VTk3NTI+Cis8VTk3NTk+Cis8VTY1ODk+Cis8VTdBMEU+Cis8VTgxMDY+Cis8VTk2QkI+Cis8VTVFMkQ+Cis8VTYwREM+Cis8VTYyMUE+Cis8VTY1QTU+Cis8VTY2MTQ+Cis8VTY3OTA+Cis8VTc3RjM+Cis8VTdBNEQ+Cis8VTdDNEQ+Cis8VTdFM0U+Cis8VTgxMEE+Cis8VThDQUM+Cis8VThENjQ+Cis8VThERTE+Cis8VThFNUY+Cis8VTc4QTk+Cis8VTUyMDc+Cis8VTYyRDk+Cis8VTYzQTU+Cis8VTY0NDI+Cis8VTYyOTg+Cis8VThBMkQ+Cis8VTdBODM+Cis8VTdCQzA+Cis8VThBQUM+Cis8VTk2RUE+Cis8VTdENzY+Cis8VTgyMEM+Cis8VTg3NDk+Cis8VTRFRDk+Cis8VTUxNDg+Cis8VTUzNDM+Cis8VTUzNjA+Cis8VTVCQTM+Cis8VTVDMDI+Cis8VTVDMTY+Cis8VTVEREQ+Cis8VTYyMjY+Cis8VTYyNDc+Cis8VTY0QjA+Cis8VTY4MTM+Cis8VTY4MzQ+Cis8VTZDQzk+Cis8VTZENDU+Cis8VTZEMTc+Cis8VTY3RDM+Cis8VTZGNUM+Cis8VTcxNEU+Cis8VTcxN0Q+Cis8VTY1Q0I+Cis8VTdBN0Y+Cis8VTdCQUQ+Cis8VTdEREE+Cis8VTdFNEE+Cis8VTdGQTg+Cis8VTgxN0E+Cis8VTgyMUI+Cis8VTgyMzk+Cis8VTg1QTY+Cis8VThBNkU+Cis8VThDQ0U+Cis8VThERjU+Cis8VTkwNzg+Cis8VTkwNzc+Cis8VTkyQUQ+Cis8VTkyOTE+Cis8VTk1ODM+Cis8VTlCQUU+Cis8VTUyNEQ+Cis8VTU1ODQ+Cis8VTZGMzg+Cis8VTcxMzY+Cis8VTUxNjg+Cis8VTc5ODU+Cis8VTdFNTU+Cis8VTgxQjM+Cis8VTdDQ0U+Cis8VTU2NEM+Cis8VTU4NTE+Cis8VTVDQTg+Cis8VTYzQUE+Cis8VTY2RkU+Cis8VTY2RkQ+Cis8VTY5NUE+Cis8VTcyRDk+Cis8VTc1OEY+Cis8VTc1OEU+Cis8VTc5MEU+Cis8VTc5NTY+Cis8VTc5REY+Cis8VTdDOTc+Cis8VTdEMjA+Cis8VTdENDQ+Cis8VTg2MDc+Cis8VThBMzQ+Cis8VTk2M0I+Cis8VTkwNjE+Cis8VTlGMjA+Cis8VTUwRTc+Cis8VTUyNzU+Cis8VTUzQ0M+Cis8VTUzRTI+Cis8VTUwMDk+Cis8VTU1QUE+Cis8VTU4RUU+Cis8VTU5NEY+Cis8VTcyM0Q+Cis8VTVCOEI+Cis8VTVDNjQ+Cis8VTUzMUQ+Cis8VTYwRTM+Cis8VTYwRjM+Cis8VTYzNUM+Cis8VTYzODM+Cis8VTYzM0Y+Cis8VTYzQkI+Cis8VTY0Q0Q+Cis8VTY1RTk+Cis8VTY2Rjk+Cis8VTVERTM+Cis8VTY5Q0Q+Cis8VTY5RkQ+Cis8VTZGMTU+Cis8VTcxRTU+Cis8VTRFODk+Cis8VTc1RTk+Cis8VTc2Rjg+Cis8VTdBOTM+Cis8VTdDREY+Cis8VTdEQ0Y+Cis8VTdEOUM+Cis8VTgwNjE+Cis8VTgzNDk+Cis8VTgzNTg+Cis8VTg0NkM+Cis8VTg0QkM+Cis8VTg1RkI+Cis8VTg4QzU+Cis8VThENzA+Cis8VTkwMDE+Cis8VTkwNkQ+Cis8VTkzOTc+Cis8VTk3MUM+Cis8VTlBMTI+Cis8VTUwQ0Y+Cis8VTU4OTc+Cis8VTYxOEU+Cis8VTgxRDM+Cis8VTg1MzU+Cis8VThEMDg+Cis8VTkwMjA+Cis8VTRGQzM+Cis8VTUwNzQ+Cis8VTUyNDc+Cis8VTUzNzM+Cis8VTYwNkY+Cis8VTYzNDk+Cis8VTY3NUY+Cis8VTZFMkM+Cis8VThEQjM+Cis8VTkwMUY+Cis8VTRGRDc+Cis8VTVDNUU+Cis8VThDQ0E+Cis8VTY1Q0Y+Cis8VTdEOUE+Cis8VTUzNTI+Cis8VTg4OTY+Cis8VTUxNzY+Cis8VTYzQzM+Cis8VTVCNTg+Cis8VTVCNkI+Cis8VTVDMEE+Cis8VTY0MEQ+Cis8VTY3NTE+Cis8VTkwNUM+Cis8VTRFRDY+Cis8VTU5MUE+Cis8VTU5MkE+Cis8VTZDNzA+Cis8VThBNTE+Cis8VTU1M0U+Cis8VTU4MTU+Cis8VTU5QTU+Cis8VTYwRjA+Cis8VTYyNTM+Cis8VTY3QzE+Cis8VTgyMzU+Cis8VTY5NTU+Cis8VTk2NDA+Cis8VTk5QzQ+Cis8VTlBMjg+Cis8VTRGNTM+Cis8VTU4MDY+Cis8VTVCRkU+Cis8VTgwMTA+Cis8VTVDQjE+Cis8VTVFMkY+Cis8VTVGODU+Cis8VTYwMjA+Cis8VTYxNEI+Cis8VTYyMzQ+Cis8VTY2RkY+Cis8VTZDRjA+Cis8VTZFREU+Cis8VTgwQ0U+Cis8VTgxN0Y+Cis8VTgyRDQ+Cis8VTg4OEI+Cis8VThDQjg+Cis8VTkwMDA+Cis8VTkwMkU+Cis8VTk2OEE+Cis8VTlFREI+Cis8VTlCREI+Cis8VTRFRTM+Cis8VTUzRjA+Cis8VTU5Mjc+Cis8VTdCMkM+Cis8VTkxOEQ+Cis8VTk4NEM+Cis8VTlERjk+Cis8VTZFREQ+Cis8VTcwMjc+Cis8VTUzNTM+Cis8VTU1NDQ+Cis8VTVCODU+Cis8VTYyNTg+Cis8VTYyOUU+Cis8VTYyRDM+Cis8VTZDQTI+Cis8VTZGRUY+Cis8VTc0MjI+Cis8VThBMTc+Cis8VTk0Mzg+Cis8VTZGQzE+Cis8VThBRkU+Cis8VTgzMzg+Cis8VTUxRTc+Cis8VTg2Rjg+Cis8VTUzRUE+Cis8VTUzRTk+Cis8VTRGNDY+Cis8VTkwNTQ+Cis8VThGQjA+Cis8VTU5NkE+Cis8VTgxMzE+Cis8VTVERkQ+Cis8VTdBRUE+Cis8VThGQkY+Cis8VTY4REE+Cis8VThDMzc+Cis8VTcyRjg+Cis8VTlDNDg+Cis8VTZBM0Q+Cis8VThBQjA+Cis8VTRFMzk+Cis8VTUzNTg+Cis8VTU2MDY+Cis8VTU3NjY+Cis8VTYyQzU+Cis8VTYzQTI+Cis8VTY1RTY+Cis8VTZCNEU+Cis8VTZERTE+Cis8VTZFNUI+Cis8VTcwQUQ+Cis8VTc3RUQ+Cis8VTdBRUY+Cis8VTdCQUE+Cis8VTdEQkI+Cis8VTgwM0Q+Cis8VTgwQzY+Cis8VTg2Q0I+Cis8VThBOTU+Cis8VTkzNUI+Cis8VTU2RTM+Cis8VTU4Qzc+Cis8VTVGM0U+Cis8VTY1QUQ+Cis8VTY2OTY+Cis8VTZBODA+Cis8VTZCQjU+Cis8VTc1Mzc+Cis8VThBQzc+Cis8VTUwMjQ+Cis8VTc3RTU+Cis8VTU3MzA+Cis8VTVGMUI+Cis8VTYwNjU+Cis8VTY2N0E+Cis8VTZDNjA+Cis8VTc1RjQ+Cis8VTdBMUE+Cis8VTdGNkU+Cis8VTgxRjQ+Cis8VTg3MTg+Cis8VTkwNDU+Cis8VTk5QjM+Cis8VTdCQzk+Cis8VTc1NUM+Cis8VTdBRjk+Cis8VTdCNTE+Cis8VTg0QzQ+Cis8VTkwMTA+Cis8VTc5RTk+Cis8VTdBOTI+Cis8VTgzMzY+Cis8VTVBRTE+Cis8VTc3NDA+Cis8VTRFMkQ+Cis8VTRFRjI+Cis8VTVCOTk+Cis8VTVGRTA+Cis8VTYyQkQ+Cis8VTY2M0M+Cis8VTY3RjE+Cis8VTZDRTg+Cis8VTg2NkI+Cis8VTg4Nzc+Cis8VThBM0I+Cis8VTkxNEU+Cis8VTkyRjM+Cis8VTk5RDA+Cis8VTZBMTc+Cis8VTcwMjY+Cis8VTczMkE+Cis8VTgyRTc+Cis8VTg0NTc+Cis8VThDQUY+Cis8VTRFMDE+Cis8VTUxNDY+Cis8VTUxQ0I+Cis8VTU1OEI+Cis8VTVCRjU+Cis8VTVFMTY+Cis8VTVFMzM+Cis8VTVFODE+Cis8VTVGMTQ+Cis8VTVGMzU+Cis8VTVGNkI+Cis8VTVGQjQ+Cis8VTYxRjI+Cis8VTYzMTE+Cis8VTY2QTI+Cis8VTY3MUQ+Cis8VTZGNkU+Cis8VTcyNTI+Cis8VTc1M0E+Cis8VTc3M0E+Cis8VTgwNzQ+Cis8VTgxMzk+Cis8VTgxNzg+Cis8VTg3NzY+Cis8VThBQkY+Cis8VThBREM+Cis8VThEODU+Cis8VThERjM+Cis8VTkyOUE+Cis8VTk1Nzc+Cis8VTk4MDI+Cis8VTlDRTU+Cis8VTUyQzU+Cis8VTYzNTc+Cis8VTc2RjQ+Cis8VTY3MTU+Cis8VTZDODg+Cis8VTczQ0Q+Cis8VThDQzM+Cis8VTkzQUU+Cis8VTk2NzM+Cis8VTZEMjU+Cis8VTU4OUM+Cis8VTY5MEU+Cis8VTY5Q0M+Cis8VThGRkQ+Cis8VTkzOUE+Cis8VTc1REI+Cis8VTkwMUE+Cis8VTU4NUE+Cis8VTY4MDI+Cis8VTYzQjQ+Cis8VTY5RkI+Cis8VTRGNDM+Cis8VTZGMkM+Cis8VTY3RDg+Cis8VThGQkI+Cis8VTg1MjY+Cis8VTdEQjQ+Cis8VTkzNTQ+Cis8VTY5M0Y+Cis8VTZGNzA+Cis8VTU3NkE+Cis8VTU4Rjc+Cis8VTVCMkM+Cis8VTdEMkM+Cis8VTcyMkE+Cis8VTU0MEE+Cis8VTkxRTM+Cis8VTlEQjQ+Cis8VTRFQUQ+Cis8VTRGNEU+Cis8VTUwNUM+Cis8VTUwNzU+Cis8VTUyNDM+Cis8VThDOUU+Cis8VTU0NDg+Cis8VTU4MjQ+Cis8VTVCOUE+Cis8VTVFMUQ+Cis8VTVFOTU+Cis8VTVFQUQ+Cis8VTVFRjc+Cis8VTVGMUY+Cis8VTYwOEM+Cis8VTYyQjU+Cis8VTYzM0E+Cis8VTYzRDA+Cis8VTY4QUY+Cis8VTZDNDA+Cis8VTc4ODc+Cis8VTc5OEU+Cis8VTdBMEI+Cis8VTdERTA+Cis8VTgyNDc+Cis8VThBMDI+Cis8VThBRTY+Cis8VThFNDQ+Cis8VTkwMTM+Cis8VTkwQjg+Cis8VTkxMkQ+Cis8VTkxRDg+Cis8VTlGMEU+Cis8VTZDRTU+Cis8VTY0NTg+Cis8VTY0RTI+Cis8VTY1NzU+Cis8VTZFRjQ+Cis8VTc2ODQ+Cis8VTdCMUI+Cis8VTkwNjk+Cis8VTkzRDE+Cis8VTZFQkE+Cis8VTU0RjI+Cis8VTVGQjk+Cis8VTY0QTQ+Cis8VThGNEQ+Cis8VThGRUQ+Cis8VTkyNDQ+Cis8VTUxNzg+Cis8VTU4NkI+Cis8VTU5Mjk+Cis8VTVDNTU+Cis8VTVFOTc+Cis8VTZERkI+Cis8VTdFOEY+Cis8VTc1MUM+Cis8VThDQkM+Cis8VThFRTI+Cis8VTk4NUI+Cis8VTcwQjk+Cis8VTRGMUQ+Cis8VTZCQkY+Cis8VTZGQjE+Cis8VTc1MzA+Cis8VTk2RkI+Cis8VTUxNEU+Cis8VTU0MTA+Cis8VTU4MzU+Cis8VTU4NTc+Cis8VTU5QUM+Cis8VTVDNjA+Cis8VTVGOTI+Cis8VTY1OTc+Cis8VTY3NUM+Cis8VTZFMjE+Cis8VTc2N0I+Cis8VTgzREY+Cis8VThDRUQ+Cis8VTkwMTQ+Cis8VTkwRkQ+Cis8VTkzNEQ+Cis8VTc4MjU+Cis8VTc4M0E+Cis8VTUyQUE+Cis8VTVFQTY+Cis8VTU3MUY+Cis8VTU5NzQ+Cis8VTYwMTI+Cis8VTUwMTI+Cis8VTUxNUE+Cis8VTUxQUM+Cis8VTUxQ0Q+Cis8VTUyMDA+Cis8VTU1MTA+Cis8VTU4NTQ+Cis8VTU4NTg+Cis8VTU5NTc+Cis8VTVCOTU+Cis8VTVDRjY+Cis8VTVEOEI+Cis8VTYwQkM+Cis8VTYyOTU+Cis8VTY0MkQ+Cis8VTY3NzE+Cis8VTY4NDM+Cis8VTY4QkM+Cis8VTY4REY+Cis8VTc2RDc+Cis8VTZERDg+Cis8VTZFNkY+Cis8VTZEOUI+Cis8VTcwNkY+Cis8VTcxQzg+Cis8VTVGNTM+Cis8VTc1RDg+Cis8VTc5Nzc+Cis8VTdCNDk+Cis8VTdCNTQ+Cis8VTdCNTI+Cis8VTdDRDY+Cis8VTdENzE+Cis8VTUyMzA+Cis8VTg0NjM+Cis8VTg1Njk+Cis8VTg1RTQ+Cis8VThBMEU+Cis8VThCMDQ+Cis8VThDNDY+Cis8VThFMEY+Cis8VTkwMDM+Cis8VTkwMEY+Cis8VTk0MTk+Cis8VTk2NzY+Cis8VTk4MkQ+Cis8VTlBMzA+Cis8VTk1RDg+Cis8VTUwQ0Q+Cis8VTUyRDU+Cis8VTU0MEM+Cis8VTU4MDI+Cis8VTVDMEU+Cis8VTYxQTc+Cis8VTY0OUU+Cis8VTZEMUU+Cis8VTc3QjM+Cis8VTdBRTU+Cis8VTgwRjQ+Cis8VTg0MDQ+Cis8VTkwNTM+Cis8VTkyODU+Cis8VTVDRTA+Cis8VTlEMDc+Cis8VTUzM0Y+Cis8VTVGOTc+Cis8VTVGQjM+Cis8VTZEOUM+Cis8VTcyNzk+Cis8VTc3NjM+Cis8VTc5QkY+Cis8VTdCRTQ+Cis8VTZCRDI+Cis8VTcyRUM+Cis8VThBQUQ+Cis8VTY4MDM+Cis8VTZBNjE+Cis8VTUxRjg+Cis8VTdBODE+Cis8VTY5MzQ+Cis8VTVDNEE+Cis8VTlDRjY+Cis8VTgyRUI+Cis8VTVCQzU+Cis8VTkxNDk+Cis8VTcwMUU+Cis8VTU2Nzg+Cis8VTVDNkY+Cis8VTYwQzc+Cis8VTY1NjY+Cis8VTZDOEM+Cis8VThDNUE+Cis8VTkwNDE+Cis8VTk4MTM+Cis8VTU0NTE+Cis8VTY2Qzc+Cis8VTkyMEQ+Cis8VTU5NDg+Cis8VTkwQTM+Cis8VTUxODU+Cis8VTRFNEQ+Cis8VTUxRUE+Cis8VTg1OTk+Cis8VThCMEU+Cis8VTcwNTg+Cis8VTYzN0E+Cis8VTkzNEI+Cis8VTY5NjI+Cis8VTk5QjQ+Cis8VTdFMDQ+Cis8VTc1Nzc+Cis8VTUzNTc+Cis8VTY5NjA+Cis8VThFREY+Cis8VTk2RTM+Cis8VTZDNUQ+Cis8VTRFOEM+Cis8VTVDM0M+Cis8VTVGMTA+Cis8VThGRTk+Cis8VTUzMDI+Cis8VThDRDE+Cis8VTgwODk+Cis8VTg2Nzk+Cis8VTVFRkY+Cis8VTY1RTU+Cis8VTRFNzM+Cis8VTUxNjU+Cis8VTU5ODI+Cis8VTVDM0Y+Cis8VTk3RUU+Cis8VTRFRkI+Cis8VTU5OEE+Cis8VTVGQ0Q+Cis8VThBOEQ+Cis8VTZGRTE+Cis8VTc5QjA+Cis8VTc5NjI+Cis8VTVCRTc+Cis8VTg0NzE+Cis8VTczMkI+Cis8VTcxQjE+Cis8VTVFNzQ+Cis8VTVGRjU+Cis8VTYzN0I+Cis8VTY0OUE+Cis8VTcxQzM+Cis8VTdDOTg+Cis8VTRFNDM+Cis8VTVFRkM+Cis8VTRFNEI+Cis8VTU3REM+Cis8VTU2QTI+Cis8VTYwQTk+Cis8VTZGQzM+Cis8VTdEMEQ+Cis8VTgwRkQ+Cis8VTgxMzM+Cis8VTgxQkY+Cis8VThGQjI+Cis8VTg5OTc+Cis8VTg2QTQ+Cis8VTVERjQ+Cis8VTYyOEE+Cis8VTY0QUQ+Cis8VTg5ODc+Cis8VTY3Nzc+Cis8VTZDRTI+Cis8VTZEM0U+Cis8VTc0MzY+Cis8VTc4MzQ+Cis8VTVBNDY+Cis8VTdGNzU+Cis8VTgyQUQ+Cis8VTk5QUM+Cis8VTRGRjM+Cis8VTVFQzM+Cis8VTYyREQ+Cis8VTYzOTI+Cis8VTY1NTc+Cis8VTY3NkY+Cis8VTc2QzM+Cis8VTcyNEM+Cis8VTgwQ0M+Cis8VTgwQkE+Cis8VThGMjk+Cis8VTkxNEQ+Cis8VTUwMEQ+Cis8VTU3Rjk+Cis8VTVBOTI+Cis8VTY4ODU+Cis8VTY5NzM+Cis8VTcxNjQ+Cis8VTcyRkQ+Cis8VThDQjc+Cis8VTU4RjI+Cis8VThDRTA+Cis8VTk2NkE+Cis8VTkwMTk+Cis8VTg3N0Y+Cis8VTc5RTQ+Cis8VTc3RTc+Cis8VTg0Mjk+Cis8VTRGMkY+Cis8VTUyNjU+Cis8VTUzNUE+Cis8VTYyQ0Q+Cis8VTY3Q0Y+Cis8VTZDQ0E+Cis8VTc2N0Q+Cis8VTdCOTQ+Cis8VTdDOTU+Cis8VTgyMzY+Cis8VTg1ODQ+Cis8VThGRUI+Cis8VTY2REQ+Cis8VTZGMjA+Cis8VTcyMDY+Cis8VTdFMUI+Cis8VTgzQUI+Cis8VTk5QzE+Cis8VTlFQTY+Cis8VTUxRkQ+Cis8VTdCQjE+Cis8VTc4NzI+Cis8VTdCQjg+Cis8VTgwODc+Cis8VTdCNDg+Cis8VTZBRTg+Cis8VTVFNjE+Cis8VTgwOEM+Cis8VTc1NTE+Cis8VTc1NjA+Cis8VTUxNkI+Cis8VTkyNjI+Cis8VTZFOEM+Cis8VTc2N0E+Cis8VTkxOTc+Cis8VTlBRUE+Cis8VTRGMTA+Cis8VTdGNzA+Cis8VTYyOUM+Cis8VTdCNEY+Cis8VTk1QTU+Cis8VTlDRTk+Cis8VTU2N0E+Cis8VTU4NTk+Cis8VTg2RTQ+Cis8VTk2QkM+Cis8VTRGMzQ+Cis8VTUyMjQ+Cis8VTUzNEE+Cis8VTUzQ0Q+Cis8VTUzREI+Cis8VTVFMDY+Cis8VTY0MkM+Cis8VTY1OTE+Cis8VTY3N0Y+Cis8VTZDM0U+Cis8VTZDNEU+Cis8VTcyNDg+Cis8VTcyQUY+Cis8VTczRUQ+Cis8VTc1NTQ+Cis8VTdFNDE+Cis8VTgyMkM+Cis8VTg1RTk+Cis8VThDQTk+Cis8VTdCQzQ+Cis8VTkxQzY+Cis8VTcxNjk+Cis8VTk4MTI+Cis8VTk4RUY+Cis8VTYzM0Q+Cis8VTY2Njk+Cis8VTc1NkE+Cis8VTc2RTQ+Cis8VTc4RDA+Cis8VTg1NDM+Cis8VTg2RUU+Cis8VTUzMkE+Cis8VTUzNTE+Cis8VTU0MjY+Cis8VTU5ODM+Cis8VTVFODc+Cis8VTVGN0M+Cis8VTYwQjI+Cis8VTYyNDk+Cis8VTYyNzk+Cis8VTYyQUI+Cis8VTY1OTA+Cis8VTZCRDQ+Cis8VTZDQ0M+Cis8VTc1QjI+Cis8VTc2QUU+Cis8VTc4OTE+Cis8VTc5RDg+Cis8VTdEQ0I+Cis8VTdGNzc+Cis8VTgwQTU+Cis8VTg4QUI+Cis8VThBQjk+Cis8VThDQkI+Cis8VTkwN0Y+Cis8VTk3NUU+Cis8VTk4REI+Cis8VTZBMEI+Cis8VTdDMzg+Cis8VTUwOTk+Cis8VTVDM0U+Cis8VTVGQUU+Cis8VTY3ODc+Cis8VTZCRDg+Cis8VTc0MzU+Cis8VTc3MDk+Cis8VTdGOEU+Cis8VTlGM0I+Cis8VTY3Q0E+Cis8VTdBMTc+Cis8VTUzMzk+Cis8VTc1OEI+Cis8VTlBRUQ+Cis8VTVGNjY+Cis8VTgxOUQ+Cis8VTgzRjE+Cis8VTgwOTg+Cis8VTVGM0M+Cis8VTVGQzU+Cis8VTc1NjI+Cis8VTdCNDY+Cis8VTkwM0M+Cis8VTY4Njc+Cis8VTU5RUI+Cis8VTVBOUI+Cis8VTdEMTA+Cis8VTc2N0U+Cis8VThCMkM+Cis8VTRGRjU+Cis8VTVGNkE+Cis8VTZBMTk+Cis8VTZDMzc+Cis8VTZGMDI+Cis8VTc0RTI+Cis8VTc5Njg+Cis8VTg4Njg+Cis8VThBNTU+Cis8VThDNzk+Cis8VTVFREY+Cis8VTYzQ0Y+Cis8VTc1QzU+Cis8VTc5RDI+Cis8VTgyRDc+Cis8VTkzMjg+Cis8VTkyRjI+Cis8VTg0OUM+Cis8VTg2RUQ+Cis8VTlDMkQ+Cis8VTU0QzE+Cis8VTVGNkM+Cis8VTY1OEM+Cis8VTZENUM+Cis8VTcwMTU+Cis8VThDQTc+Cis8VThDRDM+Cis8VTk4M0I+Cis8VTY1NEY+Cis8VTc0RjY+Cis8VTRFMEQ+Cis8VTRFRDg+Cis8VTU3RTA+Cis8VTU5MkI+Cis8VTVBNjY+Cis8VTVCQ0M+Cis8VTUxQTg+Cis8VTVFMDM+Cis8VTVFOUM+Cis8VTYwMTY+Cis8VTYyNzY+Cis8VTY1Nzc+Cis8VTY1QTc+Cis8VTY2NkU+Cis8VTZENkU+Cis8VTcyMzY+Cis8VTdCMjY+Cis8VTgxNTA+Cis8VTgxOUE+Cis8VTgyOTk+Cis8VThCNUM+Cis8VThDQTA+Cis8VThDRTY+Cis8VThENzQ+Cis8VTk2MUM+Cis8VTk2NDQ+Cis8VTRGQUU+Cis8VTY0QUI+Cis8VTZCNjY+Cis8VTgyMUU+Cis8VTg0NjE+Cis8VTg1NkE+Cis8VTkwRTg+Cis8VTVDMDE+Cis8VTY5NTM+Cis8VTk4QTg+Cis8VTg0N0E+Cis8VTg1NTc+Cis8VTRGMEY+Cis8VTUyNkY+Cis8VTVGQTk+Cis8VTVFNDU+Cis8VTY3MEQ+Cis8VTc5OEY+Cis8VTgxNzk+Cis8VTg5MDc+Cis8VTg5ODY+Cis8VTZERjU+Cis8VTVGMTc+Cis8VTYyNTU+Cis8VTZDQjg+Cis8VTRFQ0Y+Cis8VTcyNjk+Cis8VTlCOTI+Cis8VTUyMDY+Cis8VTU0M0I+Cis8VTU2NzQ+Cis8VTU4QjM+Cis8VTYxQTQ+Cis8VTYyNkU+Cis8VTcxMUE+Cis8VTU5NkU+Cis8VTdDODk+Cis8VTdDREU+Cis8VTdEMUI+Cis8VTk2RjA+Cis8VTY1ODc+Cis8VTgwNUU+Cis8VTRFMTk+Cis8VTRGNzU+Cis8VTUxNzU+Cis8VTU4NDA+Cis8VTVFNjM+Cis8VTVFNzM+Cis8VTVGMEE+Cis8VTY3QzQ+Cis8VTRFMjY+Cis8VTg1M0Q+Cis8VTk1ODk+Cis8VTk2NUI+Cis8VTdDNzM+Cis8VTk4MDE+Cis8VTUwRkI+Cis8VTU4QzE+Cis8VTc2NTY+Cis8VTc4QTc+Cis8VTUyMjU+Cis8VTc3QTU+Cis8VTg1MTE+Cis8VTdCODY+Cis8VTUwNEY+Cis8VTU5MDk+Cis8VTcyNDc+Cis8VTdCQzc+Cis8VTdERTg+Cis8VThGQkE+Cis8VThGRDQ+Cis8VTkwNEQ+Cis8VTRGQkY+Cis8VTUyQzk+Cis8VTVBMjk+Cis8VTVGMDE+Cis8VTk3QUQ+Cis8VTRGREQ+Cis8VTgyMTc+Cis8VTkyRUE+Cis8VTU3MDM+Cis8VTYzNTU+Cis8VTZCNjk+Cis8VTc1MkI+Cis8VTg4REM+Cis8VThGMTQ+Cis8VTdBNDI+Cis8VTUyREY+Cis8VTU4OTM+Cis8VTYxNTU+Cis8VTYyMEE+Cis8VTY2QUU+Cis8VTZCQ0Q+Cis8VTdDM0Y+Cis8VTgzRTk+Cis8VTUwMjM+Cis8VTRGRjg+Cis8VTUzMDU+Cis8VTU0NDY+Cis8VTU4MzE+Cis8VTU5NDk+Cis8VTVCOUQ+Cis8VTVDRjA+Cis8VTVDRUY+Cis8VTVEMjk+Cis8VTVFOTY+Cis8VTYyQjE+Cis8VTYzNjc+Cis8VTY1M0U+Cis8VTY1Qjk+Cis8VTY3MEI+Cis8VTZDRDU+Cis8VTZDRTE+Cis8VTcwRjk+Cis8VTc4MzI+Cis8VTdFMkI+Cis8VTgwREU+Cis8VTgyQjM+Cis8VTg0MEM+Cis8VTg0RUM+Cis8VTg3MDI+Cis8VTg5MTI+Cis8VThBMkE+Cis8VThDNEE+Cis8VTkwQTY+Cis8VTkyRDI+Cis8VTk4RkQ+Cis8VTlDRjM+Cis8VTlENkM+Cis8VTRFNEY+Cis8VTRFQTE+Cis8VTUwOEQ+Cis8VTUyNTY+Cis8VTU3NEE+Cis8VTU5QTg+Cis8VTVFM0Q+Cis8VTVGRDg+Cis8VTVGRDk+Cis8VTYyM0Y+Cis8VTY2QjQ+Cis8VTY3MUI+Cis8VTY3RDA+Cis8VTY4RDI+Cis8VTUxOTI+Cis8VTdEMjE+Cis8VTgwQUE+Cis8VTgxQTg+Cis8VThCMDA+Cis8VThDOEM+Cis8VThDQkY+Cis8VTkyN0U+Cis8VTk2MzI+Cis8VTU0MjA+Cis8VTk4MkM+Cis8VTUzMTc+Cis8VTUwRDU+Cis8VTUzNUM+Cis8VTU4QTg+Cis8VTY0QjI+Cis8VTY3MzQ+Cis8VTcyNjc+Cis8VTc3NjY+Cis8VTdBNDY+Cis8VTkxRTY+Cis8VTUyQzM+Cis8VTZDQTE+Cis8VTZCODY+Cis8VTU4MDA+Cis8VTVFNEM+Cis8VTU5NTQ+Cis8VTY3MkM+Cis8VTdGRkI+Cis8VTUxRTE+Cis8VTc2QzY+Cis8VTY0Njk+Cis8VTc4RTg+Cis8VTlCNTQ+Cis8VTlFQkI+Cis8VTU3Q0I+Cis8VTU5Qjk+Cis8VTY2Mjc+Cis8VTY3OUE+Cis8VTZCQ0U+Cis8VTU0RTk+Cis8VTY5RDk+Cis8VTVFNTU+Cis8VTgxOUM+Cis8VTY3OTU+Cis8VTlCQUE+Cis8VTY3RkU+Cis8VTlDNTI+Cis8VTY4NUQ+Cis8VTRFQTY+Cis8VTRGRTM+Cis8VTUzQzg+Cis8VTYyQjk+Cis8VTY3MkI+Cis8VTZDQUI+Cis8VThGQzQ+Cis8VTRGQUQ+Cis8VTdFNkQ+Cis8VTlFQkY+Cis8VTRFMDc+Cis8VTYxNjI+Cis8VTZFODA+Cis8VTZGMkI+Cis8VTg1MTM+Cis8VTU0NzM+Cis8VTY3MkE+Cis8VTlCNDU+Cis8VTVERjM+Cis8VTdCOTU+Cis8VTVDQUM+Cis8VTVCQzY+Cis8VTg3MUM+Cis8VTZFNEE+Cis8VTg0RDE+Cis8VTdBMTQ+Cis8VTgxMDg+Cis8VTU5OTk+Cis8VTdDOEQ+Cis8VTZDMTE+Cis8VTc3MjA+Cis8VTUyRDk+Cis8VTU5MjI+Cis8VTcxMjE+Cis8VTcyNUY+Cis8VTc3REI+Cis8VTk3Mjc+Cis8VTlENjE+Cis8VTY5MEI+Cis8VTVBN0Y+Cis8VTVBMTg+Cis8VTUxQTU+Cis8VTU0MEQ+Cis8VTU0N0Q+Cis8VTY2MEU+Cis8VTc2REY+Cis8VThGRjc+Cis8VTkyOTg+Cis8VTlDRjQ+Cis8VTU5RUE+Cis8VTcyNUQ+Cis8VTZFQzU+Cis8VTUxNEQ+Cis8VTY4Qzk+Cis8VTdEQkY+Cis8VTdERUM+Cis8VTk3NjI+Cis8VTlFQkE+Cis8VTY0Nzg+Cis8VTZBMjE+Cis8VTgzMDI+Cis8VTU5ODQ+Cis8VTVCNUY+Cis8VTZCREI+Cis8VTczMUI+Cis8VTc2RjI+Cis8VTdEQjI+Cis8VTgwMTc+Cis8VTg0OTk+Cis8VTUxMzI+Cis8VTY3Mjg+Cis8VTlFRDk+Cis8VTc2RUU+Cis8VTY3NjI+Cis8VTUyRkY+Cis8VTk5MDU+Cis8VTVDMjQ+Cis8VTYyM0I+Cis8VTdDN0U+Cis8VThDQjA+Cis8VTU1NEY+Cis8VTYwQjY+Cis8VTdEMEI+Cis8VTk1ODA+Cis8VTUzMDE+Cis8VTRFNUY+Cis8VTUxQjY+Cis8VTU5MUM+Cis8VTcyM0E+Cis8VTgwMzY+Cis8VTkxQ0U+Cis8VTVGMjU+Cis8VTc3RTI+Cis8VTUzODQ+Cis8VTVGNzk+Cis8VTdEMDQ+Cis8VTg1QUM+Cis8VThBMzM+Cis8VThFOEQ+Cis8VTk3NTY+Cis8VTY3RjM+Cis8VTg1QUU+Cis8VTk0NTM+Cis8VTYxMDk+Cis8VTYxMDg+Cis8VTZDQjk+Cis8VTc2NTI+Cis8VThBRUQ+Cis8VThGMzg+Cis8VTU1MkY+Cis8VTRGNTE+Cis8VTUxMkE+Cis8VTUyQzc+Cis8VTUzQ0I+Cis8VTVCQTU+Cis8VTVFN0Q+Cis8VTYwQTA+Cis8VTYxODI+Cis8VTYzRDY+Cis8VTY3MDk+Cis8VTY3REE+Cis8VTZFNjc+Cis8VTZEOEM+Cis8VTczMzY+Cis8VTczMzc+Cis8VTc1MzE+Cis8VTc5NTA+Cis8VTg4RDU+Cis8VThBOTg+Cis8VTkwNEE+Cis8VTkwOTE+Cis8VTkwRjU+Cis8VTk2QzQ+Cis8VTg3OEQ+Cis8VTU5MTU+Cis8VTRFODg+Cis8VTRGNTk+Cis8VTRFMEU+Cis8VThBODk+Cis8VThGM0Y+Cis8VTk4MTA+Cis8VTUwQUQ+Cis8VTVFN0M+Cis8VTU5OTY+Cis8VTVCQjk+Cis8VTVFQjg+Cis8VTYzREE+Cis8VTYzRkE+Cis8VTY0QzE+Cis8VTY2REM+Cis8VTY5NEE+Cis8VTY5RDg+Cis8VTZEMEI+Cis8VTZFQjY+Cis8VTcxOTQ+Cis8VTc1Mjg+Cis8VTdBQUY+Cis8VTdGOEE+Cis8VTgwMDA+Cis8VTg0NDk+Cis8VTg0Qzk+Cis8VTg5ODE+Cis8VThCMjE+Cis8VThFMEE+Cis8VTkwNjU+Cis8VTk2N0Q+Cis8VTk5MEE+Cis8VTYxN0U+Cis8VTYyOTE+Cis8VTZCMzI+Cis8VTZDODM+Cis8VTZENzQ+Cis8VTdGQ0M+Cis8VTdGRkM+Cis8VTZEQzA+Cis8VTdGODU+Cis8VTg3QkE+Cis8VTg4Rjg+Cis8VTY3NjU+Cis8VTgzQjE+Cis8VTk4M0M+Cis8VTk2Rjc+Cis8VTZEMUI+Cis8VTdENjE+Cis8VTg0M0Q+Cis8VTkxNkE+Cis8VTRFNzE+Cis8VTUzNzU+Cis8VTVENTA+Cis8VTZCMDQ+Cis8VTZGRUI+Cis8VTg1Q0Q+Cis8VTg2MkQ+Cis8VTg5QTc+Cis8VTUyMjk+Cis8VTU0MEY+Cis8VTVDNjU+Cis8VTY3NEU+Cis8VTY4QTg+Cis8VTc0MDY+Cis8VTc0ODM+Cis8VTc1RTI+Cis8VTg4Q0Y+Cis8VTg4RTE+Cis8VTkxQ0M+Cis8VTk2RTI+Cis8VTk2Nzg+Cis8VTVGOEI+Cis8VTczODc+Cis8VTdBQ0I+Cis8VTg0NEU+Cis8VTYzQTA+Cis8VTc1NjU+Cis8VTUyODk+Cis8VTZENDE+Cis8VTZFOUM+Cis8VTc0MDk+Cis8VTc1NTk+Cis8VTc4NkI+Cis8VTdDOTI+Cis8VTk2ODY+Cis8VTdBREM+Cis8VTlGOEQ+Cis8VTRGQjY+Cis8VTYxNkU+Cis8VTY1QzU+Cis8VTg2NUM+Cis8VTRFODY+Cis8VTRFQUU+Cis8VTUwREE+Cis8VTRFMjE+Cis8VTUxQ0M+Cis8VTVCRUU+Cis8VTY1OTk+Cis8VTY4ODE+Cis8VTZEQkM+Cis8VTczMUY+Cis8VTc2NDI+Cis8VTc3QUQ+Cis8VTdBMUM+Cis8VTdDRTc+Cis8VTgyNkY+Cis8VThBRDI+Cis8VTkwN0M+Cis8VTkxQ0Y+Cis8VTk2NzU+Cis8VTk4MTg+Cis8VTUyOUI+Cis8VTdERDE+Cis8VTUwMkI+Cis8VTUzOTg+Cis8VTY3OTc+Cis8VTZEQ0I+Cis8VTcxRDA+Cis8VTc0MzM+Cis8VTgxRTg+Cis8VThGMkE+Cis8VTk2QTM+Cis8VTlDNTc+Cis8VTlFOUY+Cis8VTc0NjA+Cis8VTU4NDE+Cis8VTZEOTk+Cis8VTdEMkY+Cis8VTk4NUU+Cis8VTRFRTQ+Cis8VTRGMzY+Cis8VTRGOEI+Cis8VTUxQjc+Cis8VTUyQjE+Cis8VTVEQkE+Cis8VTYwMUM+Cis8VTczQjI+Cis8VTc5M0M+Cis8VTgyRDM+Cis8VTkyMzQ+Cis8VTk2Qjc+Cis8VTk2RjY+Cis8VTk3MEE+Cis8VTlFOTc+Cis8VTlGNjI+Cis8VTY2QTY+Cis8VTZCNzQ+Cis8VTUyMTc+Cis8VTUyQTM+Cis8VTcwQzg+Cis8VTg4QzI+Cis8VTVFQzk+Cis8VTYwNEI+Cis8VTYxOTA+Cis8VTZGMjM+Cis8VTcxNDk+Cis8VTdDM0U+Cis8VTdERjQ+Cis8VTgwNkY+Cis8VTg0RUU+Cis8VTkwMjM+Cis8VTkzMkM+Cis8VTU0NDI+Cis8VTlCNkY+Cis8VTZBRDM+Cis8VTcwODk+Cis8VThDQzI+Cis8VThERUY+Cis8VTk3MzI+Cis8VTUyQjQ+Cis8VTVBNDE+Cis8VTVFQ0E+Cis8VTVGMDQ+Cis8VTY3MTc+Cis8VTY5N0M+Cis8VTY5OTQ+Cis8VTZENkE+Cis8VTZGMEY+Cis8VTcyNjI+Cis8VTcyRkM+Cis8VTdCRUQ+Cis8VTgwMDE+Cis8VTgwN0U+Cis8VTg3NEI+Cis8VTkwQ0U+Cis8VTUxNkQ+Cis8VTlFOTM+Cis8VTc5ODQ+Cis8VTgwOEI+Cis8VTkzMzI+Cis8VThBRDY+Cis8VTUwMkQ+Cis8VTU0OEM+Cis8VThBNzE+Cis8VTZCNkE+Cis8VThDQzQ+Cis8VTgxMDc+Cis8VTYwRDE+Cis8VTY3QTA+Cis8VTlERjI+Cis8VTRFOTk+Cis8VTRFOTg+Cis8VTlDMTA+Cis8VThBNkI+Cis8VTg1QzE+Cis8VTg1Njg+Cis8VTY5MDA+Cis8VTZFN0U+Cis8VTc4OTc+Cis8VTgxNTU+Cis8VTVGMEM+Cis8VTRFMTA+Cis8VTRFMTU+Cis8VTRFMkE+Cis8VTRFMzE+Cis8VTRFMzY+Cis8VTRFM0M+Cis8VTRFM0Y+Cis8VTRFNDI+Cis8VTRFNTY+Cis8VTRFNTg+Cis8VTRFODI+Cis8VTRFODU+Cis8VThDNkI+Cis8VTRFOEE+Cis8VTgyMTI+Cis8VTVGMEQ+Cis8VTRFOEU+Cis8VTRFOUU+Cis8VTRFOUY+Cis8VTRFQTA+Cis8VTRFQTI+Cis8VTRFQjA+Cis8VTRFQjM+Cis8VTRFQjY+Cis8VTRFQ0U+Cis8VTRFQ0Q+Cis8VTRFQzQ+Cis8VTRFQzY+Cis8VTRFQzI+Cis8VTRFRDc+Cis8VTRFREU+Cis8VTRFRUQ+Cis8VTRFREY+Cis8VTRFRjc+Cis8VTRGMDk+Cis8VTRGNUE+Cis8VTRGMzA+Cis8VTRGNUI+Cis8VTRGNUQ+Cis8VTRGNTc+Cis8VTRGNDc+Cis8VTRGNzY+Cis8VTRGODg+Cis8VTRGOEY+Cis8VTRGOTg+Cis8VTRGN0I+Cis8VTRGNjk+Cis8VTRGNzA+Cis8VTRGOTE+Cis8VTRGNkY+Cis8VTRGODY+Cis8VTRGOTY+Cis8VTUxMTg+Cis8VTRGRDQ+Cis8VTRGREY+Cis8VTRGQ0U+Cis8VTRGRDg+Cis8VTRGREI+Cis8VTRGRDE+Cis8VTRGREE+Cis8VTRGRDA+Cis8VTRGRTQ+Cis8VTRGRTU+Cis8VTUwMUE+Cis8VTUwMjg+Cis8VTUwMTQ+Cis8VTUwMkE+Cis8VTUwMjU+Cis8VTUwMDU+Cis8VTRGMUM+Cis8VTRGRjY+Cis8VTUwMjE+Cis8VTUwMjk+Cis8VTUwMkM+Cis8VTRGRkU+Cis8VTRGRUY+Cis8VTUwMTE+Cis8VTUwMDY+Cis8VTUwNDM+Cis8VTUwNDc+Cis8VTY3MDM+Cis8VTUwNTU+Cis8VTUwNTA+Cis8VTUwNDg+Cis8VTUwNUE+Cis8VTUwNTY+Cis8VTUwNkM+Cis8VTUwNzg+Cis8VTUwODA+Cis8VTUwOUE+Cis8VTUwODU+Cis8VTUwQjQ+Cis8VTUwQjI+Cis8VTUwQzk+Cis8VTUwQ0E+Cis8VTUwQjM+Cis8VTUwQzI+Cis8VTUwRDY+Cis8VTUwREU+Cis8VTUwRTU+Cis8VTUwRUQ+Cis8VTUwRTM+Cis8VTUwRUU+Cis8VTUwRjk+Cis8VTUwRjU+Cis8VTUxMDk+Cis8VTUxMDE+Cis8VTUxMDI+Cis8VTUxMTY+Cis8VTUxMTU+Cis8VTUxMTQ+Cis8VTUxMUE+Cis8VTUxMjE+Cis8VTUxM0E+Cis8VTUxMzc+Cis8VTUxM0M+Cis8VTUxM0I+Cis8VTUxM0Y+Cis8VTUxNDA+Cis8VTUxNTI+Cis8VTUxNEM+Cis8VTUxNTQ+Cis8VTUxNjI+Cis8VTdBRjg+Cis8VTUxNjk+Cis8VTUxNkE+Cis8VTUxNkU+Cis8VTUxODA+Cis8VTUxODI+Cis8VTU2RDg+Cis8VTUxOEM+Cis8VTUxODk+Cis8VTUxOEY+Cis8VTUxOTE+Cis8VTUxOTM+Cis8VTUxOTU+Cis8VTUxOTY+Cis8VTUxQTQ+Cis8VTUxQTY+Cis8VTUxQTI+Cis8VTUxQTk+Cis8VTUxQUE+Cis8VTUxQUI+Cis8VTUxQjM+Cis8VTUxQjE+Cis8VTUxQjI+Cis8VTUxQjA+Cis8VTUxQjU+Cis8VTUxQkQ+Cis8VTUxQzU+Cis8VTUxQzk+Cis8VTUxREI+Cis8VTUxRTA+Cis8VTg2NTU+Cis8VTUxRTk+Cis8VTUxRUQ+Cis8VTUxRjA+Cis8VTUxRjU+Cis8VTUxRkU+Cis8VTUyMDQ+Cis8VTUyMEI+Cis8VTUyMTQ+Cis8VTUyMEU+Cis8VTUyMjc+Cis8VTUyMkE+Cis8VTUyMkU+Cis8VTUyMzM+Cis8VTUyMzk+Cis8VTUyNEY+Cis8VTUyNDQ+Cis8VTUyNEI+Cis8VTUyNEM+Cis8VTUyNUU+Cis8VTUyNTQ+Cis8VTUyNkE+Cis8VTUyNzQ+Cis8VTUyNjk+Cis8VTUyNzM+Cis8VTUyN0Y+Cis8VTUyN0Q+Cis8VTUyOEQ+Cis8VTUyOTQ+Cis8VTUyOTI+Cis8VTUyNzE+Cis8VTUyODg+Cis8VTUyOTE+Cis8VThGQTg+Cis8VThGQTc+Cis8VTUyQUM+Cis8VTUyQUQ+Cis8VTUyQkM+Cis8VTUyQjU+Cis8VTUyQzE+Cis8VTUyQ0Q+Cis8VTUyRDc+Cis8VTUyREU+Cis8VTUyRTM+Cis8VTUyRTY+Cis8VTk4RUQ+Cis8VTUyRTA+Cis8VTUyRjM+Cis8VTUyRjU+Cis8VTUyRjg+Cis8VTUyRjk+Cis8VTUzMDY+Cis8VTUzMDg+Cis8VTc1Mzg+Cis8VTUzMEQ+Cis8VTUzMTA+Cis8VTUzMEY+Cis8VTUzMTU+Cis8VTUzMUE+Cis8VTUzMjM+Cis8VTUzMkY+Cis8VTUzMzE+Cis8VTUzMzM+Cis8VTUzMzg+Cis8VTUzNDA+Cis8VTUzNDY+Cis8VTUzNDU+Cis8VTRFMTc+Cis8VTUzNDk+Cis8VTUzNEQ+Cis8VTUxRDY+Cis8VTUzNUU+Cis8VTUzNjk+Cis8VTUzNkU+Cis8VTU5MTg+Cis8VTUzN0I+Cis8VTUzNzc+Cis8VTUzODI+Cis8VTUzOTY+Cis8VTUzQTA+Cis8VTUzQTY+Cis8VTUzQTU+Cis8VTUzQUU+Cis8VTUzQjA+Cis8VTUzQjY+Cis8VTUzQzM+Cis8VTdDMTI+Cis8VTk2RDk+Cis8VTUzREY+Cis8VTY2RkM+Cis8VTcxRUU+Cis8VTUzRUU+Cis8VTUzRTg+Cis8VTUzRUQ+Cis8VTUzRkE+Cis8VTU0MDE+Cis8VTU0M0Q+Cis8VTU0NDA+Cis8VTU0MkM+Cis8VTU0MkQ+Cis8VTU0M0M+Cis8VTU0MkU+Cis8VTU0MzY+Cis8VTU0Mjk+Cis8VTU0MUQ+Cis8VTU0NEU+Cis8VTU0OEY+Cis8VTU0NzU+Cis8VTU0OEU+Cis8VTU0NUY+Cis8VTU0NzE+Cis8VTU0Nzc+Cis8VTU0NzA+Cis8VTU0OTI+Cis8VTU0N0I+Cis8VTU0ODA+Cis8VTU0NzY+Cis8VTU0ODQ+Cis8VTU0OTA+Cis8VTU0ODY+Cis8VTU0Qzc+Cis8VTU0QTI+Cis8VTU0Qjg+Cis8VTU0QTU+Cis8VTU0QUM+Cis8VTU0QzQ+Cis8VTU0Qzg+Cis8VTU0QTg+Cis8VTU0QUI+Cis8VTU0QzI+Cis8VTU0QTQ+Cis8VTU0QkU+Cis8VTU0QkM+Cis8VTU0RDg+Cis8VTU0RTU+Cis8VTU0RTY+Cis8VTU1MEY+Cis8VTU1MTQ+Cis8VTU0RkQ+Cis8VTU0RUU+Cis8VTU0RUQ+Cis8VTU0RkE+Cis8VTU0RTI+Cis8VTU1Mzk+Cis8VTU1NDA+Cis8VTU1NjM+Cis8VTU1NEM+Cis8VTU1MkU+Cis8VTU1NUM+Cis8VTU1NDU+Cis8VTU1NTY+Cis8VTU1NTc+Cis8VTU1Mzg+Cis8VTU1MzM+Cis8VTU1NUQ+Cis8VTU1OTk+Cis8VTU1ODA+Cis8VTU0QUY+Cis8VTU1OEE+Cis8VTU1OUY+Cis8VTU1N0I+Cis8VTU1N0U+Cis8VTU1OTg+Cis8VTU1OUU+Cis8VTU1QUU+Cis8VTU1N0M+Cis8VTU1ODM+Cis8VTU1QTk+Cis8VTU1ODc+Cis8VTU1QTg+Cis8VTU1REE+Cis8VTU1QzU+Cis8VTU1REY+Cis8VTU1QzQ+Cis8VTU1REM+Cis8VTU1RTQ+Cis8VTU1RDQ+Cis8VTU2MTQ+Cis8VTU1Rjc+Cis8VTU2MTY+Cis8VTU1RkU+Cis8VTU1RkQ+Cis8VTU2MUI+Cis8VTU1Rjk+Cis8VTU2NEU+Cis8VTU2NTA+Cis8VTcxREY+Cis8VTU2MzQ+Cis8VTU2MzY+Cis8VTU2MzI+Cis8VTU2Mzg+Cis8VTU2NkI+Cis8VTU2NjQ+Cis8VTU2MkY+Cis8VTU2NkM+Cis8VTU2NkE+Cis8VTU2ODY+Cis8VTU2ODA+Cis8VTU2OEE+Cis8VTU2QTA+Cis8VTU2OTQ+Cis8VTU2OEY+Cis8VTU2QTU+Cis8VTU2QUU+Cis8VTU2QjY+Cis8VTU2QjQ+Cis8VTU2QzI+Cis8VTU2QkM+Cis8VTU2QzE+Cis8VTU2QzM+Cis8VTU2QzA+Cis8VTU2Qzg+Cis8VTU2Q0U+Cis8VTU2RDE+Cis8VTU2RDM+Cis8VTU2RDc+Cis8VTU2RUU+Cis8VTU2Rjk+Cis8VTU3MDA+Cis8VTU2RkY+Cis8VTU3MDQ+Cis8VTU3MDk+Cis8VTU3MDg+Cis8VTU3MEI+Cis8VTU3MEQ+Cis8VTU3MTM+Cis8VTU3MTg+Cis8VTU3MTY+Cis8VTU1Qzc+Cis8VTU3MUM+Cis8VTU3MjY+Cis8VTU3Mzc+Cis8VTU3Mzg+Cis8VTU3NEU+Cis8VTU3M0I+Cis8VTU3NDA+Cis8VTU3NEY+Cis8VTU3Njk+Cis8VTU3QzA+Cis8VTU3ODg+Cis8VTU3NjE+Cis8VTU3N0Y+Cis8VTU3ODk+Cis8VTU3OTM+Cis8VTU3QTA+Cis8VTU3QjM+Cis8VTU3QTQ+Cis8VTU3QUE+Cis8VTU3QjA+Cis8VTU3QzM+Cis8VTU3QzY+Cis8VTU3RDQ+Cis8VTU3RDI+Cis8VTU3RDM+Cis8VTU4MEE+Cis8VTU3RDY+Cis8VTU3RTM+Cis8VTU4MEI+Cis8VTU4MTk+Cis8VTU4MUQ+Cis8VTU4NzI+Cis8VTU4MjE+Cis8VTU4NjI+Cis8VTU4NEI+Cis8VTU4NzA+Cis8VTZCQzA+Cis8VTU4NTI+Cis8VTU4M0Q+Cis8VTU4Nzk+Cis8VTU4ODU+Cis8VTU4Qjk+Cis8VTU4OUY+Cis8VTU4QUI+Cis8VTU4QkE+Cis8VTU4REU+Cis8VTU4QkI+Cis8VTU4Qjg+Cis8VTU4QUU+Cis8VTU4QzU+Cis8VTU4RDM+Cis8VTU4RDE+Cis8VTU4RDc+Cis8VTU4RDk+Cis8VTU4RDg+Cis8VTU4RTU+Cis8VTU4REM+Cis8VTU4RTQ+Cis8VTU4REY+Cis8VTU4RUY+Cis8VTU4RkE+Cis8VTU4Rjk+Cis8VTU4RkI+Cis8VTU4RkM+Cis8VTU4RkQ+Cis8VTU5MDI+Cis8VTU5MEE+Cis8VTU5MTA+Cis8VTU5MUI+Cis8VTY4QTY+Cis8VTU5MjU+Cis8VTU5MkM+Cis8VTU5MkQ+Cis8VTU5MzI+Cis8VTU5Mzg+Cis8VTU5M0U+Cis8VTdBRDI+Cis8VTU5NTU+Cis8VTU5NTA+Cis8VTU5NEU+Cis8VTU5NUE+Cis8VTU5NTg+Cis8VTU5NjI+Cis8VTU5NjA+Cis8VTU5Njc+Cis8VTU5NkM+Cis8VTU5Njk+Cis8VTU5Nzg+Cis8VTU5ODE+Cis8VTU5OUQ+Cis8VTRGNUU+Cis8VTRGQUI+Cis8VTU5QTM+Cis8VTU5QjI+Cis8VTU5QzY+Cis8VTU5RTg+Cis8VTU5REM+Cis8VTU5OEQ+Cis8VTU5RDk+Cis8VTU5REE+Cis8VTVBMjU+Cis8VTVBMUY+Cis8VTVBMTE+Cis8VTVBMUM+Cis8VTVBMDk+Cis8VTVBMUE+Cis8VTVBNDA+Cis8VTVBNkM+Cis8VTVBNDk+Cis8VTVBMzU+Cis8VTVBMzY+Cis8VTVBNjI+Cis8VTVBNkE+Cis8VTVBOUE+Cis8VTVBQkM+Cis8VTVBQkU+Cis8VTVBQ0I+Cis8VTVBQzI+Cis8VTVBQkQ+Cis8VTVBRTM+Cis8VTVBRDc+Cis8VTVBRTY+Cis8VTVBRTk+Cis8VTVBRDY+Cis8VTVBRkE+Cis8VTVBRkI+Cis8VTVCMEM+Cis8VTVCMEI+Cis8VTVCMTY+Cis8VTVCMzI+Cis8VTVBRDA+Cis8VTVCMkE+Cis8VTVCMzY+Cis8VTVCM0U+Cis8VTVCNDM+Cis8VTVCNDU+Cis8VTVCNDA+Cis8VTVCNTE+Cis8VTVCNTU+Cis8VTVCNUE+Cis8VTVCNUI+Cis8VTVCNjU+Cis8VTVCNjk+Cis8VTVCNzA+Cis8VTVCNzM+Cis8VTVCNzU+Cis8VTVCNzg+Cis8VTY1ODg+Cis8VTVCN0E+Cis8VTVCODA+Cis8VTVCODM+Cis8VTVCQTY+Cis8VTVCQjg+Cis8VTVCQzM+Cis8VTVCQzc+Cis8VTVCQzk+Cis8VTVCRDQ+Cis8VTVCRDA+Cis8VTVCRTQ+Cis8VTVCRTY+Cis8VTVCRTI+Cis8VTVCREU+Cis8VTVCRTU+Cis8VTVCRUI+Cis8VTVCRjA+Cis8VTVCRjY+Cis8VTVCRjM+Cis8VTVDMDU+Cis8VTVDMDc+Cis8VTVDMDg+Cis8VTVDMEQ+Cis8VTVDMTM+Cis8VTVDMjA+Cis8VTVDMjI+Cis8VTVDMjg+Cis8VTVDMzg+Cis8VTVDMzk+Cis8VTVDNDE+Cis8VTVDNDY+Cis8VTVDNEU+Cis8VTVDNTM+Cis8VTVDNTA+Cis8VTVDNEY+Cis8VTVCNzE+Cis8VTVDNkM+Cis8VTVDNkU+Cis8VTRFNjI+Cis8VTVDNzY+Cis8VTVDNzk+Cis8VTVDOEM+Cis8VTVDOTE+Cis8VTVDOTQ+Cis8VTU5OUI+Cis8VTVDQUI+Cis8VTVDQkI+Cis8VTVDQjY+Cis8VTVDQkM+Cis8VTVDQjc+Cis8VTVDQzU+Cis8VTVDQkU+Cis8VTVDQzc+Cis8VTVDRDk+Cis8VTVDRTk+Cis8VTVDRkQ+Cis8VTVDRkE+Cis8VTVDRUQ+Cis8VTVEOEM+Cis8VTVDRUE+Cis8VTVEMEI+Cis8VTVEMTU+Cis8VTVEMTc+Cis8VTVENUM+Cis8VTVEMUY+Cis8VTVEMUI+Cis8VTVEMTE+Cis8VTVEMTQ+Cis8VTVEMjI+Cis8VTVEMUE+Cis8VTVEMTk+Cis8VTVEMTg+Cis8VTVENEM+Cis8VTVENTI+Cis8VTVENEU+Cis8VTVENEI+Cis8VTVENkM+Cis8VTVENzM+Cis8VTVENzY+Cis8VTVEODc+Cis8VTVEODQ+Cis8VTVEODI+Cis8VTVEQTI+Cis8VTVEOUQ+Cis8VTVEQUM+Cis8VTVEQUU+Cis8VTVEQkQ+Cis8VTVEOTA+Cis8VTVEQjc+Cis8VTVEQkM+Cis8VTVEQzk+Cis8VTVEQ0Q+Cis8VTVERDM+Cis8VTVERDI+Cis8VTVERDY+Cis8VTVEREI+Cis8VTVERUI+Cis8VTVERjI+Cis8VTVERjU+Cis8VTVFMEI+Cis8VTVFMUE+Cis8VTVFMTk+Cis8VTVFMTE+Cis8VTVFMUI+Cis8VTVFMzY+Cis8VTVFMzc+Cis8VTVFNDQ+Cis8VTVFNDM+Cis8VTVFNDA+Cis8VTVFNEU+Cis8VTVFNTc+Cis8VTVFNTQ+Cis8VTVFNUY+Cis8VTVFNjI+Cis8VTVFNjQ+Cis8VTVFNDc+Cis8VTVFNzU+Cis8VTVFNzY+Cis8VTVFN0E+Cis8VTlFQkM+Cis8VTVFN0Y+Cis8VTVFQTA+Cis8VTVFQzE+Cis8VTVFQzI+Cis8VTVFQzg+Cis8VTVFRDA+Cis8VTVFQ0Y+Cis8VTVFRDY+Cis8VTVFRTM+Cis8VTVFREQ+Cis8VTVFREE+Cis8VTVFREI+Cis8VTVFRTI+Cis8VTVFRTE+Cis8VTVFRTg+Cis8VTVFRTk+Cis8VTVFRUM+Cis8VTVFRjE+Cis8VTVFRjM+Cis8VTVFRjA+Cis8VTVFRjQ+Cis8VTVFRjg+Cis8VTVFRkU+Cis8VTVGMDM+Cis8VTVGMDk+Cis8VTVGNUQ+Cis8VTVGNUM+Cis8VTVGMEI+Cis8VTVGMTE+Cis8VTVGMTY+Cis8VTVGMjk+Cis8VTVGMkQ+Cis8VTVGMzg+Cis8VTVGNDE+Cis8VTVGNDg+Cis8VTVGNEM+Cis8VTVGNEU+Cis8VTVGMkY+Cis8VTVGNTE+Cis8VTVGNTY+Cis8VTVGNTc+Cis8VTVGNTk+Cis8VTVGNjE+Cis8VTVGNkQ+Cis8VTVGNzM+Cis8VTVGNzc+Cis8VTVGODM+Cis8VTVGODI+Cis8VTVGN0Y+Cis8VTVGOEE+Cis8VTVGODg+Cis8VTVGOTE+Cis8VTVGODc+Cis8VTVGOUU+Cis8VTVGOTk+Cis8VTVGOTg+Cis8VTVGQTA+Cis8VTVGQTg+Cis8VTVGQUQ+Cis8VTVGQkM+Cis8VTVGRDY+Cis8VTVGRkI+Cis8VTVGRTQ+Cis8VTVGRjg+Cis8VTVGRjE+Cis8VTVGREQ+Cis8VTYwQjM+Cis8VTVGRkY+Cis8VTYwMjE+Cis8VTYwNjA+Cis8VTYwMTk+Cis8VTYwMTA+Cis8VTYwMjk+Cis8VTYwMEU+Cis8VTYwMzE+Cis8VTYwMUI+Cis8VTYwMTU+Cis8VTYwMkI+Cis8VTYwMjY+Cis8VTYwMEY+Cis8VTYwM0E+Cis8VTYwNUE+Cis8VTYwNDE+Cis8VTYwNkE+Cis8VTYwNzc+Cis8VTYwNUY+Cis8VTYwNEE+Cis8VTYwNDY+Cis8VTYwNEQ+Cis8VTYwNjM+Cis8VTYwNDM+Cis8VTYwNjQ+Cis8VTYwNDI+Cis8VTYwNkM+Cis8VTYwNkI+Cis8VTYwNTk+Cis8VTYwODE+Cis8VTYwOEQ+Cis8VTYwRTc+Cis8VTYwODM+Cis8VTYwOUE+Cis8VTYwODQ+Cis8VTYwOUI+Cis8VTYwOTY+Cis8VTYwOTc+Cis8VTYwOTI+Cis8VTYwQTc+Cis8VTYwOEI+Cis8VTYwRTE+Cis8VTYwQjg+Cis8VTYwRTA+Cis8VTYwRDM+Cis8VTYwQjQ+Cis8VTVGRjA+Cis8VTYwQkQ+Cis8VTYwQzY+Cis8VTYwQjU+Cis8VTYwRDg+Cis8VTYxNEQ+Cis8VTYxMTU+Cis8VTYxMDY+Cis8VTYwRjY+Cis8VTYwRjc+Cis8VTYxMDA+Cis8VTYwRjQ+Cis8VTYwRkE+Cis8VTYxMDM+Cis8VTYxMjE+Cis8VTYwRkI+Cis8VTYwRjE+Cis8VTYxMEQ+Cis8VTYxMEU+Cis8VTYxNDc+Cis8VTYxM0U+Cis8VTYxMjg+Cis8VTYxMjc+Cis8VTYxNEE+Cis8VTYxM0Y+Cis8VTYxM0M+Cis8VTYxMkM+Cis8VTYxMzQ+Cis8VTYxM0Q+Cis8VTYxNDI+Cis8VTYxNDQ+Cis8VTYxNzM+Cis8VTYxNzc+Cis8VTYxNTg+Cis8VTYxNTk+Cis8VTYxNUE+Cis8VTYxNkI+Cis8VTYxNzQ+Cis8VTYxNkY+Cis8VTYxNjU+Cis8VTYxNzE+Cis8VTYxNUY+Cis8VTYxNUQ+Cis8VTYxNTM+Cis8VTYxNzU+Cis8VTYxOTk+Cis8VTYxOTY+Cis8VTYxODc+Cis8VTYxQUM+Cis8VTYxOTQ+Cis8VTYxOUE+Cis8VTYxOEE+Cis8VTYxOTE+Cis8VTYxQUI+Cis8VTYxQUU+Cis8VTYxQ0M+Cis8VTYxQ0E+Cis8VTYxQzk+Cis8VTYxRjc+Cis8VTYxQzg+Cis8VTYxQzM+Cis8VTYxQzY+Cis8VTYxQkE+Cis8VTYxQ0I+Cis8VTdGNzk+Cis8VTYxQ0Q+Cis8VTYxRTY+Cis8VTYxRTM+Cis8VTYxRjY+Cis8VTYxRkE+Cis8VTYxRjQ+Cis8VTYxRkY+Cis8VTYxRkQ+Cis8VTYxRkM+Cis8VTYxRkU+Cis8VTYyMDA+Cis8VTYyMDg+Cis8VTYyMDk+Cis8VTYyMEQ+Cis8VTYyMEM+Cis8VTYyMTQ+Cis8VTYyMUI+Cis8VTYyMUU+Cis8VTYyMjE+Cis8VTYyMkE+Cis8VTYyMkU+Cis8VTYyMzA+Cis8VTYyMzI+Cis8VTYyMzM+Cis8VTYyNDE+Cis8VTYyNEU+Cis8VTYyNUU+Cis8VTYyNjM+Cis8VTYyNUI+Cis8VTYyNjA+Cis8VTYyNjg+Cis8VTYyN0M+Cis8VTYyODI+Cis8VTYyODk+Cis8VTYyN0U+Cis8VTYyOTI+Cis8VTYyOTM+Cis8VTYyOTY+Cis8VTYyRDQ+Cis8VTYyODM+Cis8VTYyOTQ+Cis8VTYyRDc+Cis8VTYyRDE+Cis8VTYyQkI+Cis8VTYyQ0Y+Cis8VTYyRkY+Cis8VTYyQzY+Cis8VTY0RDQ+Cis8VTYyQzg+Cis8VTYyREM+Cis8VTYyQ0M+Cis8VTYyQ0E+Cis8VTYyQzI+Cis8VTYyQzc+Cis8VTYyOUI+Cis8VTYyQzk+Cis8VTYzMEM+Cis8VTYyRUU+Cis8VTYyRjE+Cis8VTYzMjc+Cis8VTYzMDI+Cis8VTYzMDg+Cis8VTYyRUY+Cis8VTYyRjU+Cis8VTYzNTA+Cis8VTYzM0U+Cis8VTYzNEQ+Cis8VTY0MUM+Cis8VTYzNEY+Cis8VTYzOTY+Cis8VTYzOEU+Cis8VTYzODA+Cis8VTYzQUI+Cis8VTYzNzY+Cis8VTYzQTM+Cis8VTYzOEY+Cis8VTYzODk+Cis8VTYzOUY+Cis8VTYzQjU+Cis8VTYzNkI+Cis8VTYzNjk+Cis8VTYzQkU+Cis8VTYzRTk+Cis8VTYzQzA+Cis8VTYzQzY+Cis8VTYzRTM+Cis8VTYzQzk+Cis8VTYzRDI+Cis8VTYzRjY+Cis8VTYzQzQ+Cis8VTY0MTY+Cis8VTY0MzQ+Cis8VTY0MDY+Cis8VTY0MTM+Cis8VTY0MjY+Cis8VTY0MzY+Cis8VTY1MUQ+Cis8VTY0MTc+Cis8VTY0Mjg+Cis8VTY0MEY+Cis8VTY0Njc+Cis8VTY0NkY+Cis8VTY0NzY+Cis8VTY0NEU+Cis8VTY1MkE+Cis8VTY0OTU+Cis8VTY0OTM+Cis8VTY0QTU+Cis8VTY0QTk+Cis8VTY0ODg+Cis8VTY0QkM+Cis8VTY0REE+Cis8VTY0RDI+Cis8VTY0QzU+Cis8VTY0Qzc+Cis8VTY0QkI+Cis8VTY0RDg+Cis8VTY0QzI+Cis8VTY0RjE+Cis8VTY0RTc+Cis8VTgyMDk+Cis8VTY0RTA+Cis8VTY0RTE+Cis8VTYyQUM+Cis8VTY0RTM+Cis8VTY0RUY+Cis8VTY1MkM+Cis8VTY0RjY+Cis8VTY0RjQ+Cis8VTY0RjI+Cis8VTY0RkE+Cis8VTY1MDA+Cis8VTY0RkQ+Cis8VTY1MTg+Cis8VTY1MUM+Cis8VTY1MDU+Cis8VTY1MjQ+Cis8VTY1MjM+Cis8VTY1MkI+Cis8VTY1MzQ+Cis8VTY1MzU+Cis8VTY1Mzc+Cis8VTY1MzY+Cis8VTY1Mzg+Cis8VTc1NEI+Cis8VTY1NDg+Cis8VTY1NTY+Cis8VTY1NTU+Cis8VTY1NEQ+Cis8VTY1NTg+Cis8VTY1NUU+Cis8VTY1NUQ+Cis8VTY1NzI+Cis8VTY1Nzg+Cis8VTY1ODI+Cis8VTY1ODM+Cis8VThCOEE+Cis8VTY1OUI+Cis8VTY1OUY+Cis8VTY1QUI+Cis8VTY1Qjc+Cis8VTY1QzM+Cis8VTY1QzY+Cis8VTY1QzE+Cis8VTY1QzQ+Cis8VTY1Q0M+Cis8VTY1RDI+Cis8VTY1REI+Cis8VTY1RDk+Cis8VTY1RTA+Cis8VTY1RTE+Cis8VTY1RjE+Cis8VTY3NzI+Cis8VTY2MEE+Cis8VTY2MDM+Cis8VTY1RkI+Cis8VTY3NzM+Cis8VTY2MzU+Cis8VTY2MzY+Cis8VTY2MzQ+Cis8VTY2MUM+Cis8VTY2NEY+Cis8VTY2NDQ+Cis8VTY2NDk+Cis8VTY2NDE+Cis8VTY2NUU+Cis8VTY2NUQ+Cis8VTY2NjQ+Cis8VTY2Njc+Cis8VTY2Njg+Cis8VTY2NUY+Cis8VTY2NjI+Cis8VTY2NzA+Cis8VTY2ODM+Cis8VTY2ODg+Cis8VTY2OEU+Cis8VTY2ODk+Cis8VTY2ODQ+Cis8VTY2OTg+Cis8VTY2OUQ+Cis8VTY2QzE+Cis8VTY2Qjk+Cis8VTY2Qzk+Cis8VTY2QkU+Cis8VTY2QkM+Cis8VTY2QzQ+Cis8VTY2Qjg+Cis8VTY2RDY+Cis8VTY2REE+Cis8VTY2RTA+Cis8VTY2M0Y+Cis8VTY2RTY+Cis8VTY2RTk+Cis8VTY2RjA+Cis8VTY2RjU+Cis8VTY2Rjc+Cis8VTY3MEY+Cis8VTY3MTY+Cis8VTY3MUU+Cis8VTY3MjY+Cis8VTY3Mjc+Cis8VTk3Mzg+Cis8VTY3MkU+Cis8VTY3M0Y+Cis8VTY3MzY+Cis8VTY3NDE+Cis8VTY3Mzg+Cis8VTY3Mzc+Cis8VTY3NDY+Cis8VTY3NUU+Cis8VTY3NjA+Cis8VTY3NTk+Cis8VTY3NjM+Cis8VTY3NjQ+Cis8VTY3ODk+Cis8VTY3NzA+Cis8VTY3QTk+Cis8VTY3N0M+Cis8VTY3NkE+Cis8VTY3OEM+Cis8VTY3OEI+Cis8VTY3QTY+Cis8VTY3QTE+Cis8VTY3ODU+Cis8VTY3Qjc+Cis8VTY3RUY+Cis8VTY3QjQ+Cis8VTY3RUM+Cis8VTY3QjM+Cis8VTY3RTk+Cis8VTY3Qjg+Cis8VTY3RTQ+Cis8VTY3REU+Cis8VTY3REQ+Cis8VTY3RTI+Cis8VTY3RUU+Cis8VTY3Qjk+Cis8VTY3Q0U+Cis8VTY3QzY+Cis8VTY3RTc+Cis8VTZBOUM+Cis8VTY4MUU+Cis8VTY4NDY+Cis8VTY4Mjk+Cis8VTY4NDA+Cis8VTY4NEQ+Cis8VTY4MzI+Cis8VTY4NEU+Cis8VTY4QjM+Cis8VTY4MkI+Cis8VTY4NTk+Cis8VTY4NjM+Cis8VTY4Nzc+Cis8VTY4N0Y+Cis8VTY4OUY+Cis8VTY4OEY+Cis8VTY4QUQ+Cis8VTY4OTQ+Cis8VTY4OUQ+Cis8VTY4OUI+Cis8VTY4ODM+Cis8VTZBQUU+Cis8VTY4Qjk+Cis8VTY4NzQ+Cis8VTY4QjU+Cis8VTY4QTA+Cis8VTY4QkE+Cis8VTY5MEY+Cis8VTY4OEQ+Cis8VTY4N0U+Cis8VTY5MDE+Cis8VTY4Q0E+Cis8VTY5MDg+Cis8VTY4RDg+Cis8VTY5MjI+Cis8VTY5MjY+Cis8VTY4RTE+Cis8VTY5MEM+Cis8VTY4Q0Q+Cis8VTY4RDQ+Cis8VTY4RTc+Cis8VTY4RDU+Cis8VTY5MzY+Cis8VTY5MTI+Cis8VTY5MDQ+Cis8VTY4RDc+Cis8VTY4RTM+Cis8VTY5MjU+Cis8VTY4Rjk+Cis8VTY4RTA+Cis8VTY4RUY+Cis8VTY5Mjg+Cis8VTY5MkE+Cis8VTY5MUE+Cis8VTY5MjM+Cis8VTY5MjE+Cis8VTY4QzY+Cis8VTY5Nzk+Cis8VTY5Nzc+Cis8VTY5NUM+Cis8VTY5Nzg+Cis8VTY5NkI+Cis8VTY5NTQ+Cis8VTY5N0U+Cis8VTY5NkU+Cis8VTY5Mzk+Cis8VTY5NzQ+Cis8VTY5M0Q+Cis8VTY5NTk+Cis8VTY5MzA+Cis8VTY5NjE+Cis8VTY5NUU+Cis8VTY5NUQ+Cis8VTY5ODE+Cis8VTY5NkE+Cis8VTY5QjI+Cis8VTY5QUU+Cis8VTY5RDA+Cis8VTY5QkY+Cis8VTY5QzE+Cis8VTY5RDM+Cis8VTY5QkU+Cis8VTY5Q0U+Cis8VTVCRTg+Cis8VTY5Q0E+Cis8VTY5REQ+Cis8VTY5QkI+Cis8VTY5QzM+Cis8VTY5QTc+Cis8VTZBMkU+Cis8VTY5OTE+Cis8VTY5QTA+Cis8VTY5OUM+Cis8VTY5OTU+Cis8VTY5QjQ+Cis8VTY5REU+Cis8VTY5RTg+Cis8VTZBMDI+Cis8VTZBMUI+Cis8VTY5RkY+Cis8VTZCMEE+Cis8VTY5Rjk+Cis8VTY5RjI+Cis8VTY5RTc+Cis8VTZBMDU+Cis8VTY5QjE+Cis8VTZBMUU+Cis8VTY5RUQ+Cis8VTZBMTQ+Cis8VTY5RUI+Cis8VTZBMEE+Cis8VTZBMTI+Cis8VTZBQzE+Cis8VTZBMjM+Cis8VTZBMTM+Cis8VTZBNDQ+Cis8VTZBMEM+Cis8VTZBNzI+Cis8VTZBMzY+Cis8VTZBNzg+Cis8VTZBNDc+Cis8VTZBNjI+Cis8VTZBNTk+Cis8VTZBNjY+Cis8VTZBNDg+Cis8VTZBMzg+Cis8VTZBMjI+Cis8VTZBOTA+Cis8VTZBOEQ+Cis8VTZBQTA+Cis8VTZBODQ+Cis8VTZBQTI+Cis8VTZBQTM+Cis8VTZBOTc+Cis8VTg2MTc+Cis8VTZBQkI+Cis8VTZBQzM+Cis8VTZBQzI+Cis8VTZBQjg+Cis8VTZBQjM+Cis8VTZBQUM+Cis8VTZBREU+Cis8VTZBRDE+Cis8VTZBREY+Cis8VTZBQUE+Cis8VTZBREE+Cis8VTZBRUE+Cis8VTZBRkI+Cis8VTZCMDU+Cis8VTg2MTY+Cis8VTZBRkE+Cis8VTZCMTI+Cis8VTZCMTY+Cis8VTlCMzE+Cis8VTZCMUY+Cis8VTZCMzg+Cis8VTZCMzc+Cis8VTc2REM+Cis8VTZCMzk+Cis8VTk4RUU+Cis8VTZCNDc+Cis8VTZCNDM+Cis8VTZCNDk+Cis8VTZCNTA+Cis8VTZCNTk+Cis8VTZCNTQ+Cis8VTZCNUI+Cis8VTZCNUY+Cis8VTZCNjE+Cis8VTZCNzg+Cis8VTZCNzk+Cis8VTZCN0Y+Cis8VTZCODA+Cis8VTZCODQ+Cis8VTZCODM+Cis8VTZCOEQ+Cis8VTZCOTg+Cis8VTZCOTU+Cis8VTZCOUU+Cis8VTZCQTQ+Cis8VTZCQUE+Cis8VTZCQUI+Cis8VTZCQUY+Cis8VTZCQjI+Cis8VTZCQjE+Cis8VTZCQjM+Cis8VTZCQjc+Cis8VTZCQkM+Cis8VTZCQzY+Cis8VTZCQ0I+Cis8VTZCRDM+Cis8VTZCREY+Cis8VTZCRUM+Cis8VTZCRUI+Cis8VTZCRjM+Cis8VTZCRUY+Cis8VTlFQkU+Cis8VTZDMDg+Cis8VTZDMTM+Cis8VTZDMTQ+Cis8VTZDMUI+Cis8VTZDMjQ+Cis8VTZDMjM+Cis8VTZDNUU+Cis8VTZDNTU+Cis8VTZDNjI+Cis8VTZDNkE+Cis8VTZDODI+Cis8VTZDOEQ+Cis8VTZDOUE+Cis8VTZDODE+Cis8VTZDOUI+Cis8VTZDN0U+Cis8VTZDNjg+Cis8VTZDNzM+Cis8VTZDOTI+Cis8VTZDOTA+Cis8VTZDQzQ+Cis8VTZDRjE+Cis8VTZDRDM+Cis8VTZDQkQ+Cis8VTZDRDc+Cis8VTZDQzU+Cis8VTZDREQ+Cis8VTZDQUU+Cis8VTZDQjE+Cis8VTZDQkU+Cis8VTZDQkE+Cis8VTZDREI+Cis8VTZDRUY+Cis8VTZDRDk+Cis8VTZDRUE+Cis8VTZEMUY+Cis8VTg4NEQ+Cis8VTZEMzY+Cis8VTZEMkI+Cis8VTZEM0Q+Cis8VTZEMzg+Cis8VTZEMTk+Cis8VTZEMzU+Cis8VTZEMzM+Cis8VTZEMTI+Cis8VTZEMEM+Cis8VTZENjM+Cis8VTZEOTM+Cis8VTZENjQ+Cis8VTZENUE+Cis8VTZENzk+Cis8VTZENTk+Cis8VTZEOEU+Cis8VTZEOTU+Cis8VTZGRTQ+Cis8VTZEODU+Cis8VTZERjk+Cis8VTZFMTU+Cis8VTZFMEE+Cis8VTZEQjU+Cis8VTZEQzc+Cis8VTZERTY+Cis8VTZEQjg+Cis8VTZEQzY+Cis8VTZERUM+Cis8VTZEREU+Cis8VTZEQ0M+Cis8VTZERTg+Cis8VTZERDI+Cis8VTZEQzU+Cis8VTZERkE+Cis8VTZERDk+Cis8VTZERTQ+Cis8VTZERDU+Cis8VTZERUE+Cis8VTZERUU+Cis8VTZFMkQ+Cis8VTZFNkU+Cis8VTZFMkU+Cis8VTZFMTk+Cis8VTZFNzI+Cis8VTZFNUY+Cis8VTZFM0U+Cis8VTZFMjM+Cis8VTZFNkI+Cis8VTZFMkI+Cis8VTZFNzY+Cis8VTZFNEQ+Cis8VTZFMUY+Cis8VTZFNDM+Cis8VTZFM0E+Cis8VTZFNEU+Cis8VTZFMjQ+Cis8VTZFRkY+Cis8VTZFMUQ+Cis8VTZFMzg+Cis8VTZFODI+Cis8VTZFQUE+Cis8VTZFOTg+Cis8VTZFQzk+Cis8VTZFQjc+Cis8VTZFRDM+Cis8VTZFQkQ+Cis8VTZFQUY+Cis8VTZFQzQ+Cis8VTZFQjI+Cis8VTZFRDQ+Cis8VTZFRDU+Cis8VTZFOEY+Cis8VTZFQTU+Cis8VTZFQzI+Cis8VTZFOUY+Cis8VTZGNDE+Cis8VTZGMTE+Cis8VTcwNEM+Cis8VTZFRUM+Cis8VTZFRjg+Cis8VTZFRkU+Cis8VTZGM0Y+Cis8VTZFRjI+Cis8VTZGMzE+Cis8VTZFRUY+Cis8VTZGMzI+Cis8VTZFQ0M+Cis8VTZGM0U+Cis8VTZGMTM+Cis8VTZFRjc+Cis8VTZGODY+Cis8VTZGN0E+Cis8VTZGNzg+Cis8VTZGODE+Cis8VTZGODA+Cis8VTZGNkY+Cis8VTZGNUI+Cis8VTZGRjM+Cis8VTZGNkQ+Cis8VTZGODI+Cis8VTZGN0M+Cis8VTZGNTg+Cis8VTZGOEU+Cis8VTZGOTE+Cis8VTZGQzI+Cis8VTZGNjY+Cis8VTZGQjM+Cis8VTZGQTM+Cis8VTZGQTE+Cis8VTZGQTQ+Cis8VTZGQjk+Cis8VTZGQzY+Cis8VTZGQUE+Cis8VTZGREY+Cis8VTZGRDU+Cis8VTZGRUM+Cis8VTZGRDQ+Cis8VTZGRDg+Cis8VTZGRjE+Cis8VTZGRUU+Cis8VTZGREI+Cis8VTcwMDk+Cis8VTcwMEI+Cis8VTZGRkE+Cis8VTcwMTE+Cis8VTcwMDE+Cis8VTcwMEY+Cis8VTZGRkU+Cis8VTcwMUI+Cis8VTcwMUE+Cis8VTZGNzQ+Cis8VTcwMUQ+Cis8VTcwMTg+Cis8VTcwMUY+Cis8VTcwMzA+Cis8VTcwM0U+Cis8VTcwMzI+Cis8VTcwNTE+Cis8VTcwNjM+Cis8VTcwOTk+Cis8VTcwOTI+Cis8VTcwQUY+Cis8VTcwRjE+Cis8VTcwQUM+Cis8VTcwQjg+Cis8VTcwQjM+Cis8VTcwQUU+Cis8VTcwREY+Cis8VTcwQ0I+Cis8VTcwREQ+Cis8VTcwRDk+Cis8VTcxMDk+Cis8VTcwRkQ+Cis8VTcxMUM+Cis8VTcxMTk+Cis8VTcxNjU+Cis8VTcxNTU+Cis8VTcxODg+Cis8VTcxNjY+Cis8VTcxNjI+Cis8VTcxNEM+Cis8VTcxNTY+Cis8VTcxNkM+Cis8VTcxOEY+Cis8VTcxRkI+Cis8VTcxODQ+Cis8VTcxOTU+Cis8VTcxQTg+Cis8VTcxQUM+Cis8VTcxRDc+Cis8VTcxQjk+Cis8VTcxQkU+Cis8VTcxRDI+Cis8VTcxQzk+Cis8VTcxRDQ+Cis8VTcxQ0U+Cis8VTcxRTA+Cis8VTcxRUM+Cis8VTcxRTc+Cis8VTcxRjU+Cis8VTcxRkM+Cis8VTcxRjk+Cis8VTcxRkY+Cis8VTcyMEQ+Cis8VTcyMTA+Cis8VTcyMUI+Cis8VTcyMjg+Cis8VTcyMkQ+Cis8VTcyMkM+Cis8VTcyMzA+Cis8VTcyMzI+Cis8VTcyM0I+Cis8VTcyM0M+Cis8VTcyM0Y+Cis8VTcyNDA+Cis8VTcyNDY+Cis8VTcyNEI+Cis8VTcyNTg+Cis8VTcyNzQ+Cis8VTcyN0U+Cis8VTcyODI+Cis8VTcyODE+Cis8VTcyODc+Cis8VTcyOTI+Cis8VTcyOTY+Cis8VTcyQTI+Cis8VTcyQTc+Cis8VTcyQjk+Cis8VTcyQjI+Cis8VTcyQzM+Cis8VTcyQzY+Cis8VTcyQzQ+Cis8VTcyQ0U+Cis8VTcyRDI+Cis8VTcyRTI+Cis8VTcyRTA+Cis8VTcyRTE+Cis8VTcyRjk+Cis8VTcyRjc+Cis8VTUwMEY+Cis8VTczMTc+Cis8VTczMEE+Cis8VTczMUM+Cis8VTczMTY+Cis8VTczMUQ+Cis8VTczMzQ+Cis8VTczMkY+Cis8VTczMjk+Cis8VTczMjU+Cis8VTczM0U+Cis8VTczNEU+Cis8VTczNEY+Cis8VTlFRDg+Cis8VTczNTc+Cis8VTczNkE+Cis8VTczNjg+Cis8VTczNzA+Cis8VTczNzg+Cis8VTczNzU+Cis8VTczN0I+Cis8VTczN0E+Cis8VTczQzg+Cis8VTczQjM+Cis8VTczQ0U+Cis8VTczQkI+Cis8VTczQzA+Cis8VTczRTU+Cis8VTczRUU+Cis8VTczREU+Cis8VTc0QTI+Cis8VTc0MDU+Cis8VTc0NkY+Cis8VTc0MjU+Cis8VTczRjg+Cis8VTc0MzI+Cis8VTc0M0E+Cis8VTc0NTU+Cis8VTc0M0Y+Cis8VTc0NUY+Cis8VTc0NTk+Cis8VTc0NDE+Cis8VTc0NUM+Cis8VTc0Njk+Cis8VTc0NzA+Cis8VTc0NjM+Cis8VTc0NkE+Cis8VTc0NzY+Cis8VTc0N0U+Cis8VTc0OEI+Cis8VTc0OUU+Cis8VTc0QTc+Cis8VTc0Q0E+Cis8VTc0Q0Y+Cis8VTc0RDQ+Cis8VTczRjE+Cis8VTc0RTA+Cis8VTc0RTM+Cis8VTc0RTc+Cis8VTc0RTk+Cis8VTc0RUU+Cis8VTc0RjI+Cis8VTc0RjA+Cis8VTc0RjE+Cis8VTc0Rjg+Cis8VTc0Rjc+Cis8VTc1MDQ+Cis8VTc1MDM+Cis8VTc1MDU+Cis8VTc1MEM+Cis8VTc1MEU+Cis8VTc1MEQ+Cis8VTc1MTU+Cis8VTc1MTM+Cis8VTc1MUU+Cis8VTc1MjY+Cis8VTc1MkM+Cis8VTc1M0M+Cis8VTc1NDQ+Cis8VTc1NEQ+Cis8VTc1NEE+Cis8VTc1NDk+Cis8VTc1NUI+Cis8VTc1NDY+Cis8VTc1NUE+Cis8VTc1Njk+Cis8VTc1NjQ+Cis8VTc1Njc+Cis8VTc1NkI+Cis8VTc1NkQ+Cis8VTc1Nzg+Cis8VTc1NzY+Cis8VTc1ODY+Cis8VTc1ODc+Cis8VTc1NzQ+Cis8VTc1OEE+Cis8VTc1ODk+Cis8VTc1ODI+Cis8VTc1OTQ+Cis8VTc1OUE+Cis8VTc1OUQ+Cis8VTc1QTU+Cis8VTc1QTM+Cis8VTc1QzI+Cis8VTc1QjM+Cis8VTc1QzM+Cis8VTc1QjU+Cis8VTc1QkQ+Cis8VTc1Qjg+Cis8VTc1QkM+Cis8VTc1QjE+Cis8VTc1Q0Q+Cis8VTc1Q0E+Cis8VTc1RDI+Cis8VTc1RDk+Cis8VTc1RTM+Cis8VTc1REU+Cis8VTc1RkU+Cis8VTc1RkY+Cis8VTc1RkM+Cis8VTc2MDE+Cis8VTc1RjA+Cis8VTc1RkE+Cis8VTc1RjI+Cis8VTc1RjM+Cis8VTc2MEI+Cis8VTc2MEQ+Cis8VTc2MDk+Cis8VTc2MUY+Cis8VTc2Mjc+Cis8VTc2MjA+Cis8VTc2MjE+Cis8VTc2MjI+Cis8VTc2MjQ+Cis8VTc2MzQ+Cis8VTc2MzA+Cis8VTc2M0I+Cis8VTc2NDc+Cis8VTc2NDg+Cis8VTc2NDY+Cis8VTc2NUM+Cis8VTc2NTg+Cis8VTc2NjE+Cis8VTc2NjI+Cis8VTc2Njg+Cis8VTc2Njk+Cis8VTc2NkE+Cis8VTc2Njc+Cis8VTc2NkM+Cis8VTc2NzA+Cis8VTc2NzI+Cis8VTc2NzY+Cis8VTc2Nzg+Cis8VTc2N0M+Cis8VTc2ODA+Cis8VTc2ODM+Cis8VTc2ODg+Cis8VTc2OEI+Cis8VTc2OEU+Cis8VTc2OTY+Cis8VTc2OTM+Cis8VTc2OTk+Cis8VTc2OUE+Cis8VTc2QjA+Cis8VTc2QjQ+Cis8VTc2Qjg+Cis8VTc2Qjk+Cis8VTc2QkE+Cis8VTc2QzI+Cis8VTc2Q0Q+Cis8VTc2RDY+Cis8VTc2RDI+Cis8VTc2REU+Cis8VTc2RTE+Cis8VTc2RTU+Cis8VTc2RTc+Cis8VTc2RUE+Cis8VTg2MkY+Cis8VTc2RkI+Cis8VTc3MDg+Cis8VTc3MDc+Cis8VTc3MDQ+Cis8VTc3Mjk+Cis8VTc3MjQ+Cis8VTc3MUU+Cis8VTc3MjU+Cis8VTc3MjY+Cis8VTc3MUI+Cis8VTc3Mzc+Cis8VTc3Mzg+Cis8VTc3NDc+Cis8VTc3NUE+Cis8VTc3Njg+Cis8VTc3NkI+Cis8VTc3NUI+Cis8VTc3NjU+Cis8VTc3N0Y+Cis8VTc3N0U+Cis8VTc3Nzk+Cis8VTc3OEU+Cis8VTc3OEI+Cis8VTc3OTE+Cis8VTc3QTA+Cis8VTc3OUU+Cis8VTc3QjA+Cis8VTc3QjY+Cis8VTc3Qjk+Cis8VTc3QkY+Cis8VTc3QkM+Cis8VTc3QkQ+Cis8VTc3QkI+Cis8VTc3Qzc+Cis8VTc3Q0Q+Cis8VTc3RDc+Cis8VTc3REE+Cis8VTc3REM+Cis8VTc3RTM+Cis8VTc3RUU+Cis8VTc3RkM+Cis8VTc4MEM+Cis8VTc4MTI+Cis8VTc5MjY+Cis8VTc4MjA+Cis8VTc5MkE+Cis8VTc4NDU+Cis8VTc4OEU+Cis8VTc4NzQ+Cis8VTc4ODY+Cis8VTc4N0M+Cis8VTc4OUE+Cis8VTc4OEM+Cis8VTc4QTM+Cis8VTc4QjU+Cis8VTc4QUE+Cis8VTc4QUY+Cis8VTc4RDE+Cis8VTc4QzY+Cis8VTc4Q0I+Cis8VTc4RDQ+Cis8VTc4QkU+Cis8VTc4QkM+Cis8VTc4QzU+Cis8VTc4Q0E+Cis8VTc4RUM+Cis8VTc4RTc+Cis8VTc4REE+Cis8VTc4RkQ+Cis8VTc4RjQ+Cis8VTc5MDc+Cis8VTc5MTI+Cis8VTc5MTE+Cis8VTc5MTk+Cis8VTc5MkM+Cis8VTc5MkI+Cis8VTc5NDA+Cis8VTc5NjA+Cis8VTc5NTc+Cis8VTc5NUY+Cis8VTc5NUE+Cis8VTc5NTU+Cis8VTc5NTM+Cis8VTc5N0E+Cis8VTc5N0Y+Cis8VTc5OEE+Cis8VTc5OUQ+Cis8VTc5QTc+Cis8VTlGNEI+Cis8VTc5QUE+Cis8VTc5QUU+Cis8VTc5QjM+Cis8VTc5Qjk+Cis8VTc5QkE+Cis8VTc5Qzk+Cis8VTc5RDU+Cis8VTc5RTc+Cis8VTc5RUM+Cis8VTc5RTE+Cis8VTc5RTM+Cis8VTdBMDg+Cis8VTdBMEQ+Cis8VTdBMTg+Cis8VTdBMTk+Cis8VTdBMjA+Cis8VTdBMUY+Cis8VTc5ODA+Cis8VTdBMzE+Cis8VTdBM0I+Cis8VTdBM0U+Cis8VTdBMzc+Cis8VTdBNDM+Cis8VTdBNTc+Cis8VTdBNDk+Cis8VTdBNjE+Cis8VTdBNjI+Cis8VTdBNjk+Cis8VTlGOUQ+Cis8VTdBNzA+Cis8VTdBNzk+Cis8VTdBN0Q+Cis8VTdBODg+Cis8VTdBOTc+Cis8VTdBOTU+Cis8VTdBOTg+Cis8VTdBOTY+Cis8VTdBQTk+Cis8VTdBQzg+Cis8VTdBQjA+Cis8VTdBQjY+Cis8VTdBQzU+Cis8VTdBQzQ+Cis8VTdBQkY+Cis8VTkwODM+Cis8VTdBQzc+Cis8VTdBQ0E+Cis8VTdBQ0Q+Cis8VTdBQ0Y+Cis8VTdBRDU+Cis8VTdBRDM+Cis8VTdBRDk+Cis8VTdBREE+Cis8VTdBREQ+Cis8VTdBRTE+Cis8VTdBRTI+Cis8VTdBRTY+Cis8VTdBRUQ+Cis8VTdBRjA+Cis8VTdCMDI+Cis8VTdCMEY+Cis8VTdCMEE+Cis8VTdCMDY+Cis8VTdCMzM+Cis8VTdCMTg+Cis8VTdCMTk+Cis8VTdCMUU+Cis8VTdCMzU+Cis8VTdCMjg+Cis8VTdCMzY+Cis8VTdCNTA+Cis8VTdCN0E+Cis8VTdCMDQ+Cis8VTdCNEQ+Cis8VTdCMEI+Cis8VTdCNEM+Cis8VTdCNDU+Cis8VTdCNzU+Cis8VTdCNjU+Cis8VTdCNzQ+Cis8VTdCNjc+Cis8VTdCNzA+Cis8VTdCNzE+Cis8VTdCNkM+Cis8VTdCNkU+Cis8VTdCOUQ+Cis8VTdCOTg+Cis8VTdCOUY+Cis8VTdCOEQ+Cis8VTdCOUM+Cis8VTdCOUE+Cis8VTdCOEI+Cis8VTdCOTI+Cis8VTdCOEY+Cis8VTdCNUQ+Cis8VTdCOTk+Cis8VTdCQ0I+Cis8VTdCQzE+Cis8VTdCQ0M+Cis8VTdCQ0Y+Cis8VTdCQjQ+Cis8VTdCQzY+Cis8VTdCREQ+Cis8VTdCRTk+Cis8VTdDMTE+Cis8VTdDMTQ+Cis8VTdCRTY+Cis8VTdCRTU+Cis8VTdDNjA+Cis8VTdDMDA+Cis8VTdDMDc+Cis8VTdDMTM+Cis8VTdCRjM+Cis8VTdCRjc+Cis8VTdDMTc+Cis8VTdDMEQ+Cis8VTdCRjY+Cis8VTdDMjM+Cis8VTdDMjc+Cis8VTdDMkE+Cis8VTdDMUY+Cis8VTdDMzc+Cis8VTdDMkI+Cis8VTdDM0Q+Cis8VTdDNEM+Cis8VTdDNDM+Cis8VTdDNTQ+Cis8VTdDNEY+Cis8VTdDNDA+Cis8VTdDNTA+Cis8VTdDNTg+Cis8VTdDNUY+Cis8VTdDNjQ+Cis8VTdDNTY+Cis8VTdDNjU+Cis8VTdDNkM+Cis8VTdDNzU+Cis8VTdDODM+Cis8VTdDOTA+Cis8VTdDQTQ+Cis8VTdDQUQ+Cis8VTdDQTI+Cis8VTdDQUI+Cis8VTdDQTE+Cis8VTdDQTg+Cis8VTdDQjM+Cis8VTdDQjI+Cis8VTdDQjE+Cis8VTdDQUU+Cis8VTdDQjk+Cis8VTdDQkQ+Cis8VTdDQzA+Cis8VTdDQzU+Cis8VTdDQzI+Cis8VTdDRDg+Cis8VTdDRDI+Cis8VTdDREM+Cis8VTdDRTI+Cis8VTlCM0I+Cis8VTdDRUY+Cis8VTdDRjI+Cis8VTdDRjQ+Cis8VTdDRjY+Cis8VTdDRkE+Cis8VTdEMDY+Cis8VTdEMDI+Cis8VTdEMUM+Cis8VTdEMTU+Cis8VTdEMEE+Cis8VTdENDU+Cis8VTdENEI+Cis8VTdEMkU+Cis8VTdEMzI+Cis8VTdEM0Y+Cis8VTdEMzU+Cis8VTdENDY+Cis8VTdENzM+Cis8VTdENTY+Cis8VTdENEU+Cis8VTdENzI+Cis8VTdENjg+Cis8VTdENkU+Cis8VTdENEY+Cis8VTdENjM+Cis8VTdEOTM+Cis8VTdEODk+Cis8VTdENUI+Cis8VTdEOEY+Cis8VTdEN0Q+Cis8VTdEOUI+Cis8VTdEQkE+Cis8VTdEQUU+Cis8VTdEQTM+Cis8VTdEQjU+Cis8VTdEQzc+Cis8VTdEQkQ+Cis8VTdEQUI+Cis8VTdFM0Q+Cis8VTdEQTI+Cis8VTdEQUY+Cis8VTdEREM+Cis8VTdEQjg+Cis8VTdEOUY+Cis8VTdEQjA+Cis8VTdERDg+Cis8VTdEREQ+Cis8VTdERTQ+Cis8VTdEREU+Cis8VTdERkI+Cis8VTdERjI+Cis8VTdERTE+Cis8VTdFMDU+Cis8VTdFMEE+Cis8VTdFMjM+Cis8VTdFMjE+Cis8VTdFMTI+Cis8VTdFMzE+Cis8VTdFMUY+Cis8VTdFMDk+Cis8VTdFMEI+Cis8VTdFMjI+Cis8VTdFNDY+Cis8VTdFNjY+Cis8VTdFM0I+Cis8VTdFMzU+Cis8VTdFMzk+Cis8VTdFNDM+Cis8VTdFMzc+Cis8VTdFMzI+Cis8VTdFM0E+Cis8VTdFNjc+Cis8VTdFNUQ+Cis8VTdFNTY+Cis8VTdFNUU+Cis8VTdFNTk+Cis8VTdFNUE+Cis8VTdFNzk+Cis8VTdFNkE+Cis8VTdFNjk+Cis8VTdFN0M+Cis8VTdFN0I+Cis8VTdFODM+Cis8VTdERDU+Cis8VTdFN0Q+Cis8VThGQUU+Cis8VTdFN0Y+Cis8VTdFODg+Cis8VTdFODk+Cis8VTdFOEM+Cis8VTdFOTI+Cis8VTdFOTA+Cis8VTdFOTM+Cis8VTdFOTQ+Cis8VTdFOTY+Cis8VTdFOEU+Cis8VTdFOUI+Cis8VTdFOUM+Cis8VTdGMzg+Cis8VTdGM0E+Cis8VTdGNDU+Cis8VTdGNEM+Cis8VTdGNEQ+Cis8VTdGNEU+Cis8VTdGNTA+Cis8VTdGNTE+Cis8VTdGNTU+Cis8VTdGNTQ+Cis8VTdGNTg+Cis8VTdGNUY+Cis8VTdGNjA+Cis8VTdGNjg+Cis8VTdGNjk+Cis8VTdGNjc+Cis8VTdGNzg+Cis8VTdGODI+Cis8VTdGODY+Cis8VTdGODM+Cis8VTdGODg+Cis8VTdGODc+Cis8VTdGOEM+Cis8VTdGOTQ+Cis8VTdGOUU+Cis8VTdGOUQ+Cis8VTdGOUE+Cis8VTdGQTM+Cis8VTdGQUY+Cis8VTdGQjI+Cis8VTdGQjk+Cis8VTdGQUU+Cis8VTdGQjY+Cis8VTdGQjg+Cis8VThCNzE+Cis8VTdGQzU+Cis8VTdGQzY+Cis8VTdGQ0E+Cis8VTdGRDU+Cis8VTdGRDQ+Cis8VTdGRTE+Cis8VTdGRTY+Cis8VTdGRTk+Cis8VTdGRjM+Cis8VTdGRjk+Cis8VTk4REM+Cis8VTgwMDY+Cis8VTgwMDQ+Cis8VTgwMEI+Cis8VTgwMTI+Cis8VTgwMTg+Cis8VTgwMTk+Cis8VTgwMUM+Cis8VTgwMjE+Cis8VTgwMjg+Cis8VTgwM0Y+Cis8VTgwM0I+Cis8VTgwNEE+Cis8VTgwNDY+Cis8VTgwNTI+Cis8VTgwNTg+Cis8VTgwNUE+Cis8VTgwNUY+Cis8VTgwNjI+Cis8VTgwNjg+Cis8VTgwNzM+Cis8VTgwNzI+Cis8VTgwNzA+Cis8VTgwNzY+Cis8VTgwNzk+Cis8VTgwN0Q+Cis8VTgwN0Y+Cis8VTgwODQ+Cis8VTgwODY+Cis8VTgwODU+Cis8VTgwOUI+Cis8VTgwOTM+Cis8VTgwOUE+Cis8VTgwQUQ+Cis8VTUxOTA+Cis8VTgwQUM+Cis8VTgwREI+Cis8VTgwRTU+Cis8VTgwRDk+Cis8VTgwREQ+Cis8VTgwQzQ+Cis8VTgwREE+Cis8VTgwRDY+Cis8VTgxMDk+Cis8VTgwRUY+Cis8VTgwRjE+Cis8VTgxMUI+Cis8VTgxMjk+Cis8VTgxMjM+Cis8VTgxMkY+Cis8VTgxNEI+Cis8VTk2OEI+Cis8VTgxNDY+Cis8VTgxM0U+Cis8VTgxNTM+Cis8VTgxNTE+Cis8VTgwRkM+Cis8VTgxNzE+Cis8VTgxNkU+Cis8VTgxNjU+Cis8VTgxNjY+Cis8VTgxNzQ+Cis8VTgxODM+Cis8VTgxODg+Cis8VTgxOEE+Cis8VTgxODA+Cis8VTgxODI+Cis8VTgxQTA+Cis8VTgxOTU+Cis8VTgxQTQ+Cis8VTgxQTM+Cis8VTgxNUY+Cis8VTgxOTM+Cis8VTgxQTk+Cis8VTgxQjA+Cis8VTgxQjU+Cis8VTgxQkU+Cis8VTgxQjg+Cis8VTgxQkQ+Cis8VTgxQzA+Cis8VTgxQzI+Cis8VTgxQkE+Cis8VTgxQzk+Cis8VTgxQ0Q+Cis8VTgxRDE+Cis8VTgxRDk+Cis8VTgxRDg+Cis8VTgxQzg+Cis8VTgxREE+Cis8VTgxREY+Cis8VTgxRTA+Cis8VTgxRTc+Cis8VTgxRkE+Cis8VTgxRkI+Cis8VTgxRkU+Cis8VTgyMDE+Cis8VTgyMDI+Cis8VTgyMDU+Cis8VTgyMDc+Cis8VTgyMEE+Cis8VTgyMEQ+Cis8VTgyMTA+Cis8VTgyMTY+Cis8VTgyMjk+Cis8VTgyMkI+Cis8VTgyMzg+Cis8VTgyMzM+Cis8VTgyNDA+Cis8VTgyNTk+Cis8VTgyNTg+Cis8VTgyNUQ+Cis8VTgyNUE+Cis8VTgyNUY+Cis8VTgyNjQ+Cis8VTgyNjI+Cis8VTgyNjg+Cis8VTgyNkE+Cis8VTgyNkI+Cis8VTgyMkU+Cis8VTgyNzE+Cis8VTgyNzc+Cis8VTgyNzg+Cis8VTgyN0U+Cis8VTgyOEQ+Cis8VTgyOTI+Cis8VTgyQUI+Cis8VTgyOUY+Cis8VTgyQkI+Cis8VTgyQUM+Cis8VTgyRTE+Cis8VTgyRTM+Cis8VTgyREY+Cis8VTgyRDI+Cis8VTgyRjQ+Cis8VTgyRjM+Cis8VTgyRkE+Cis8VTgzOTM+Cis8VTgzMDM+Cis8VTgyRkI+Cis8VTgyRjk+Cis8VTgyREU+Cis8VTgzMDY+Cis8VTgyREM+Cis8VTgzMDk+Cis8VTgyRDk+Cis8VTgzMzU+Cis8VTgzMzQ+Cis8VTgzMTY+Cis8VTgzMzI+Cis8VTgzMzE+Cis8VTgzNDA+Cis8VTgzMzk+Cis8VTgzNTA+Cis8VTgzNDU+Cis8VTgzMkY+Cis8VTgzMkI+Cis8VTgzMTc+Cis8VTgzMTg+Cis8VTgzODU+Cis8VTgzOUE+Cis8VTgzQUE+Cis8VTgzOUY+Cis8VTgzQTI+Cis8VTgzOTY+Cis8VTgzMjM+Cis8VTgzOEU+Cis8VTgzODc+Cis8VTgzOEE+Cis8VTgzN0M+Cis8VTgzQjU+Cis8VTgzNzM+Cis8VTgzNzU+Cis8VTgzQTA+Cis8VTgzODk+Cis8VTgzQTg+Cis8VTgzRjQ+Cis8VTg0MTM+Cis8VTgzRUI+Cis8VTgzQ0U+Cis8VTgzRkQ+Cis8VTg0MDM+Cis8VTgzRDg+Cis8VTg0MEI+Cis8VTgzQzE+Cis8VTgzRjc+Cis8VTg0MDc+Cis8VTgzRTA+Cis8VTgzRjI+Cis8VTg0MEQ+Cis8VTg0MjI+Cis8VTg0MjA+Cis8VTgzQkQ+Cis8VTg0Mzg+Cis8VTg1MDY+Cis8VTgzRkI+Cis8VTg0NkQ+Cis8VTg0MkE+Cis8VTg0M0M+Cis8VTg1NUE+Cis8VTg0ODQ+Cis8VTg0Nzc+Cis8VTg0NkI+Cis8VTg0QUQ+Cis8VTg0NkU+Cis8VTg0ODI+Cis8VTg0Njk+Cis8VTg0NDY+Cis8VTg0MkM+Cis8VTg0NkY+Cis8VTg0Nzk+Cis8VTg0MzU+Cis8VTg0Q0E+Cis8VTg0NjI+Cis8VTg0Qjk+Cis8VTg0QkY+Cis8VTg0OUY+Cis8VTg0RDk+Cis8VTg0Q0Q+Cis8VTg0QkI+Cis8VTg0REE+Cis8VTg0RDA+Cis8VTg0QzE+Cis8VTg0QzY+Cis8VTg0RDY+Cis8VTg0QTE+Cis8VTg1MjE+Cis8VTg0RkY+Cis8VTg0RjQ+Cis8VTg1MTc+Cis8VTg1MTg+Cis8VTg1MkM+Cis8VTg1MUY+Cis8VTg1MTU+Cis8VTg1MTQ+Cis8VTg0RkM+Cis8VTg1NDA+Cis8VTg1NjM+Cis8VTg1NTg+Cis8VTg1NDg+Cis8VTg1NDE+Cis8VTg2MDI+Cis8VTg1NEI+Cis8VTg1NTU+Cis8VTg1ODA+Cis8VTg1QTQ+Cis8VTg1ODg+Cis8VTg1OTE+Cis8VTg1OEE+Cis8VTg1QTg+Cis8VTg1NkQ+Cis8VTg1OTQ+Cis8VTg1OUI+Cis8VTg1RUE+Cis8VTg1ODc+Cis8VTg1OUM+Cis8VTg1Nzc+Cis8VTg1N0U+Cis8VTg1OTA+Cis8VTg1Qzk+Cis8VTg1QkE+Cis8VTg1Q0Y+Cis8VTg1Qjk+Cis8VTg1RDA+Cis8VTg1RDU+Cis8VTg1REQ+Cis8VTg1RTU+Cis8VTg1REM+Cis8VTg1Rjk+Cis8VTg2MEE+Cis8VTg2MTM+Cis8VTg2MEI+Cis8VTg1RkU+Cis8VTg1RkE+Cis8VTg2MDY+Cis8VTg2MjI+Cis8VTg2MUE+Cis8VTg2MzA+Cis8VTg2M0Y+Cis8VTg2NEQ+Cis8VTRFNTU+Cis8VTg2NTQ+Cis8VTg2NUY+Cis8VTg2Njc+Cis8VTg2NzE+Cis8VTg2OTM+Cis8VTg2QTM+Cis8VTg2QTk+Cis8VTg2QUE+Cis8VTg2OEI+Cis8VTg2OEM+Cis8VTg2QjY+Cis8VTg2QUY+Cis8VTg2QzQ+Cis8VTg2QzY+Cis8VTg2QjA+Cis8VTg2Qzk+Cis8VTg4MjM+Cis8VTg2QUI+Cis8VTg2RDQ+Cis8VTg2REU+Cis8VTg2RTk+Cis8VTg2RUM+Cis8VTg2REY+Cis8VTg2REI+Cis8VTg2RUY+Cis8VTg3MTI+Cis8VTg3MDY+Cis8VTg3MDg+Cis8VTg3MDA+Cis8VTg3MDM+Cis8VTg2RkI+Cis8VTg3MTE+Cis8VTg3MDk+Cis8VTg3MEQ+Cis8VTg2Rjk+Cis8VTg3MEE+Cis8VTg3MzQ+Cis8VTg3M0Y+Cis8VTg3Mzc+Cis8VTg3M0I+Cis8VTg3MjU+Cis8VTg3Mjk+Cis8VTg3MUE+Cis8VTg3NjA+Cis8VTg3NUY+Cis8VTg3Nzg+Cis8VTg3NEM+Cis8VTg3NEU+Cis8VTg3NzQ+Cis8VTg3NTc+Cis8VTg3Njg+Cis8VTg3NkU+Cis8VTg3NTk+Cis8VTg3NTM+Cis8VTg3NjM+Cis8VTg3NkE+Cis8VTg4MDU+Cis8VTg3QTI+Cis8VTg3OUY+Cis8VTg3ODI+Cis8VTg3QUY+Cis8VTg3Q0I+Cis8VTg3QkQ+Cis8VTg3QzA+Cis8VTg3RDA+Cis8VTk2RDY+Cis8VTg3QUI+Cis8VTg3QzQ+Cis8VTg3QjM+Cis8VTg3Qzc+Cis8VTg3QzY+Cis8VTg3QkI+Cis8VTg3RUY+Cis8VTg3RjI+Cis8VTg3RTA+Cis8VTg4MEY+Cis8VTg4MEQ+Cis8VTg3RkU+Cis8VTg3RjY+Cis8VTg3Rjc+Cis8VTg4MEU+Cis8VTg3RDI+Cis8VTg4MTE+Cis8VTg4MTY+Cis8VTg4MTU+Cis8VTg4MjI+Cis8VTg4MjE+Cis8VTg4MzE+Cis8VTg4MzY+Cis8VTg4Mzk+Cis8VTg4Mjc+Cis8VTg4M0I+Cis8VTg4NDQ+Cis8VTg4NDI+Cis8VTg4NTI+Cis8VTg4NTk+Cis8VTg4NUU+Cis8VTg4NjI+Cis8VTg4NkI+Cis8VTg4ODE+Cis8VTg4N0U+Cis8VTg4OUU+Cis8VTg4NzU+Cis8VTg4N0Q+Cis8VTg4QjU+Cis8VTg4NzI+Cis8VTg4ODI+Cis8VTg4OTc+Cis8VTg4OTI+Cis8VTg4QUU+Cis8VTg4OTk+Cis8VTg4QTI+Cis8VTg4OEQ+Cis8VTg4QTQ+Cis8VTg4QjA+Cis8VTg4QkY+Cis8VTg4QjE+Cis8VTg4QzM+Cis8VTg4QzQ+Cis8VTg4RDQ+Cis8VTg4RDg+Cis8VTg4RDk+Cis8VTg4REQ+Cis8VTg4Rjk+Cis8VTg5MDI+Cis8VTg4RkM+Cis8VTg4RjQ+Cis8VTg4RTg+Cis8VTg4RjI+Cis8VTg5MDQ+Cis8VTg5MEM+Cis8VTg5MEE+Cis8VTg5MTM+Cis8VTg5NDM+Cis8VTg5MUU+Cis8VTg5MjU+Cis8VTg5MkE+Cis8VTg5MkI+Cis8VTg5NDE+Cis8VTg5NDQ+Cis8VTg5M0I+Cis8VTg5MzY+Cis8VTg5Mzg+Cis8VTg5NEM+Cis8VTg5MUQ+Cis8VTg5NjA+Cis8VTg5NUU+Cis8VTg5NjY+Cis8VTg5NjQ+Cis8VTg5NkQ+Cis8VTg5NkE+Cis8VTg5NkY+Cis8VTg5NzQ+Cis8VTg5Nzc+Cis8VTg5N0U+Cis8VTg5ODM+Cis8VTg5ODg+Cis8VTg5OEE+Cis8VTg5OTM+Cis8VTg5OTg+Cis8VTg5QTE+Cis8VTg5QTk+Cis8VTg5QTY+Cis8VTg5QUM+Cis8VTg5QUY+Cis8VTg5QjI+Cis8VTg5QkE+Cis8VTg5QkQ+Cis8VTg5QkY+Cis8VTg5QzA+Cis8VTg5REE+Cis8VTg5REM+Cis8VTg5REQ+Cis8VTg5RTc+Cis8VTg5RjQ+Cis8VTg5Rjg+Cis8VThBMDM+Cis8VThBMTY+Cis8VThBMTA+Cis8VThBMEM+Cis8VThBMUI+Cis8VThBMUQ+Cis8VThBMjU+Cis8VThBMzY+Cis8VThBNDE+Cis8VThBNUI+Cis8VThBNTI+Cis8VThBNDY+Cis8VThBNDg+Cis8VThBN0M+Cis8VThBNkQ+Cis8VThBNkM+Cis8VThBNjI+Cis8VThBODU+Cis8VThBODI+Cis8VThBODQ+Cis8VThBQTg+Cis8VThBQTE+Cis8VThBOTE+Cis8VThBQTU+Cis8VThBQTY+Cis8VThBOUE+Cis8VThBQTM+Cis8VThBQzQ+Cis8VThBQ0Q+Cis8VThBQzI+Cis8VThBREE+Cis8VThBRUI+Cis8VThBRjM+Cis8VThBRTc+Cis8VThBRTQ+Cis8VThBRjE+Cis8VThCMTQ+Cis8VThBRTA+Cis8VThBRTI+Cis8VThBRjc+Cis8VThBREU+Cis8VThBREI+Cis8VThCMEM+Cis8VThCMDc+Cis8VThCMUE+Cis8VThBRTE+Cis8VThCMTY+Cis8VThCMTA+Cis8VThCMTc+Cis8VThCMjA+Cis8VThCMzM+Cis8VTk3QUI+Cis8VThCMjY+Cis8VThCMkI+Cis8VThCM0U+Cis8VThCMjg+Cis8VThCNDE+Cis8VThCNEM+Cis8VThCNEY+Cis8VThCNEU+Cis8VThCNDk+Cis8VThCNTY+Cis8VThCNUI+Cis8VThCNUE+Cis8VThCNkI+Cis8VThCNUY+Cis8VThCNkM+Cis8VThCNkY+Cis8VThCNzQ+Cis8VThCN0Q+Cis8VThCODA+Cis8VThCOEM+Cis8VThCOEU+Cis8VThCOTI+Cis8VThCOTM+Cis8VThCOTY+Cis8VThCOTk+Cis8VThCOUE+Cis8VThDM0E+Cis8VThDNDE+Cis8VThDM0Y+Cis8VThDNDg+Cis8VThDNEM+Cis8VThDNEU+Cis8VThDNTA+Cis8VThDNTU+Cis8VThDNjI+Cis8VThDNkM+Cis8VThDNzg+Cis8VThDN0E+Cis8VThDODI+Cis8VThDODk+Cis8VThDODU+Cis8VThDOEE+Cis8VThDOEQ+Cis8VThDOEU+Cis8VThDOTQ+Cis8VThDN0M+Cis8VThDOTg+Cis8VTYyMUQ+Cis8VThDQUQ+Cis8VThDQUE+Cis8VThDQkQ+Cis8VThDQjI+Cis8VThDQjM+Cis8VThDQUU+Cis8VThDQjY+Cis8VThDQzg+Cis8VThDQzE+Cis8VThDRTQ+Cis8VThDRTM+Cis8VThDREE+Cis8VThDRkQ+Cis8VThDRkE+Cis8VThDRkI+Cis8VThEMDQ+Cis8VThEMDU+Cis8VThEMEE+Cis8VThEMDc+Cis8VThEMEY+Cis8VThEMEQ+Cis8VThEMTA+Cis8VTlGNEU+Cis8VThEMTM+Cis8VThDQ0Q+Cis8VThEMTQ+Cis8VThEMTY+Cis8VThENjc+Cis8VThENkQ+Cis8VThENzE+Cis8VThENzM+Cis8VThEODE+Cis8VThEOTk+Cis8VThEQzI+Cis8VThEQkU+Cis8VThEQkE+Cis8VThEQ0Y+Cis8VThEREE+Cis8VThERDY+Cis8VThEQ0M+Cis8VThEREI+Cis8VThEQ0I+Cis8VThERUE+Cis8VThERUI+Cis8VThEREY+Cis8VThERTM+Cis8VThERkM+Cis8VThFMDg+Cis8VThFMDk+Cis8VThERkY+Cis8VThFMUQ+Cis8VThFMUU+Cis8VThFMTA+Cis8VThFMUY+Cis8VThFNDI+Cis8VThFMzU+Cis8VThFMzA+Cis8VThFMzQ+Cis8VThFNEE+Cis8VThFNDc+Cis8VThFNDk+Cis8VThFNEM+Cis8VThFNTA+Cis8VThFNDg+Cis8VThFNTk+Cis8VThFNjQ+Cis8VThFNjA+Cis8VThFMkE+Cis8VThFNjM+Cis8VThFNTU+Cis8VThFNzY+Cis8VThFNzI+Cis8VThFN0M+Cis8VThFODE+Cis8VThFODc+Cis8VThFODU+Cis8VThFODQ+Cis8VThFOEI+Cis8VThFOEE+Cis8VThFOTM+Cis8VThFOTE+Cis8VThFOTQ+Cis8VThFOTk+Cis8VThFQUE+Cis8VThFQTE+Cis8VThFQUM+Cis8VThFQjA+Cis8VThFQzY+Cis8VThFQjE+Cis8VThFQkU+Cis8VThFQzU+Cis8VThFQzg+Cis8VThFQ0I+Cis8VThFREI+Cis8VThFRTM+Cis8VThFRkM+Cis8VThFRkI+Cis8VThFRUI+Cis8VThFRkU+Cis8VThGMEE+Cis8VThGMDU+Cis8VThGMTU+Cis8VThGMTI+Cis8VThGMTk+Cis8VThGMTM+Cis8VThGMUM+Cis8VThGMUY+Cis8VThGMUI+Cis8VThGMEM+Cis8VThGMjY+Cis8VThGMzM+Cis8VThGM0I+Cis8VThGMzk+Cis8VThGNDU+Cis8VThGNDI+Cis8VThGM0U+Cis8VThGNEM+Cis8VThGNDk+Cis8VThGNDY+Cis8VThGNEU+Cis8VThGNTc+Cis8VThGNUM+Cis8VThGNjI+Cis8VThGNjM+Cis8VThGNjQ+Cis8VThGOUM+Cis8VThGOUY+Cis8VThGQTM+Cis8VThGQUQ+Cis8VThGQUY+Cis8VThGQjc+Cis8VThGREE+Cis8VThGRTU+Cis8VThGRTI+Cis8VThGRUE+Cis8VThGRUY+Cis8VTkwODc+Cis8VThGRjQ+Cis8VTkwMDU+Cis8VThGRjk+Cis8VThGRkE+Cis8VTkwMTE+Cis8VTkwMTU+Cis8VTkwMjE+Cis8VTkwMEQ+Cis8VTkwMUU+Cis8VTkwMTY+Cis8VTkwMEI+Cis8VTkwMjc+Cis8VTkwMzY+Cis8VTkwMzU+Cis8VTkwMzk+Cis8VThGRjg+Cis8VTkwNEY+Cis8VTkwNTA+Cis8VTkwNTE+Cis8VTkwNTI+Cis8VTkwMEU+Cis8VTkwNDk+Cis8VTkwM0U+Cis8VTkwNTY+Cis8VTkwNTg+Cis8VTkwNUU+Cis8VTkwNjg+Cis8VTkwNkY+Cis8VTkwNzY+Cis8VTk2QTg+Cis8VTkwNzI+Cis8VTkwODI+Cis8VTkwN0Q+Cis8VTkwODE+Cis8VTkwODA+Cis8VTkwOEE+Cis8VTkwODk+Cis8VTkwOEY+Cis8VTkwQTg+Cis8VTkwQUY+Cis8VTkwQjE+Cis8VTkwQjU+Cis8VTkwRTI+Cis8VTkwRTQ+Cis8VTYyNDg+Cis8VTkwREI+Cis8VTkxMDI+Cis8VTkxMTI+Cis8VTkxMTk+Cis8VTkxMzI+Cis8VTkxMzA+Cis8VTkxNEE+Cis8VTkxNTY+Cis8VTkxNTg+Cis8VTkxNjM+Cis8VTkxNjU+Cis8VTkxNjk+Cis8VTkxNzM+Cis8VTkxNzI+Cis8VTkxOEI+Cis8VTkxODk+Cis8VTkxODI+Cis8VTkxQTI+Cis8VTkxQUI+Cis8VTkxQUY+Cis8VTkxQUE+Cis8VTkxQjU+Cis8VTkxQjQ+Cis8VTkxQkE+Cis8VTkxQzA+Cis8VTkxQzE+Cis8VTkxQzk+Cis8VTkxQ0I+Cis8VTkxRDA+Cis8VTkxRDY+Cis8VTkxREY+Cis8VTkxRTE+Cis8VTkxREI+Cis8VTkxRkM+Cis8VTkxRjU+Cis8VTkxRjY+Cis8VTkyMUU+Cis8VTkxRkY+Cis8VTkyMTQ+Cis8VTkyMkM+Cis8VTkyMTU+Cis8VTkyMTE+Cis8VTkyNUU+Cis8VTkyNTc+Cis8VTkyNDU+Cis8VTkyNDk+Cis8VTkyNjQ+Cis8VTkyNDg+Cis8VTkyOTU+Cis8VTkyM0Y+Cis8VTkyNEI+Cis8VTkyNTA+Cis8VTkyOUM+Cis8VTkyOTY+Cis8VTkyOTM+Cis8VTkyOUI+Cis8VTkyNUE+Cis8VTkyQ0Y+Cis8VTkyQjk+Cis8VTkyQjc+Cis8VTkyRTk+Cis8VTkzMEY+Cis8VTkyRkE+Cis8VTkzNDQ+Cis8VTkzMkU+Cis8VTkzMTk+Cis8VTkzMjI+Cis8VTkzMUE+Cis8VTkzMjM+Cis8VTkzM0E+Cis8VTkzMzU+Cis8VTkzM0I+Cis8VTkzNUM+Cis8VTkzNjA+Cis8VTkzN0M+Cis8VTkzNkU+Cis8VTkzNTY+Cis8VTkzQjA+Cis8VTkzQUM+Cis8VTkzQUQ+Cis8VTkzOTQ+Cis8VTkzQjk+Cis8VTkzRDY+Cis8VTkzRDc+Cis8VTkzRTg+Cis8VTkzRTU+Cis8VTkzRDg+Cis8VTkzQzM+Cis8VTkzREQ+Cis8VTkzRDA+Cis8VTkzQzg+Cis8VTkzRTQ+Cis8VTk0MUE+Cis8VTk0MTQ+Cis8VTk0MTM+Cis8VTk0MDM+Cis8VTk0MDc+Cis8VTk0MTA+Cis8VTk0MzY+Cis8VTk0MkI+Cis8VTk0MzU+Cis8VTk0MjE+Cis8VTk0M0E+Cis8VTk0NDE+Cis8VTk0NTI+Cis8VTk0NDQ+Cis8VTk0NUI+Cis8VTk0NjA+Cis8VTk0NjI+Cis8VTk0NUU+Cis8VTk0NkE+Cis8VTkyMjk+Cis8VTk0NzA+Cis8VTk0NzU+Cis8VTk0Nzc+Cis8VTk0N0Q+Cis8VTk0NUE+Cis8VTk0N0M+Cis8VTk0N0U+Cis8VTk0ODE+Cis8VTk0N0Y+Cis8VTk1ODI+Cis8VTk1ODc+Cis8VTk1OEE+Cis8VTk1OTQ+Cis8VTk1OTY+Cis8VTk1OTg+Cis8VTk1OTk+Cis8VTk1QTA+Cis8VTk1QTg+Cis8VTk1QTc+Cis8VTk1QUQ+Cis8VTk1QkM+Cis8VTk1QkI+Cis8VTk1Qjk+Cis8VTk1QkU+Cis8VTk1Q0E+Cis8VTZGRjY+Cis8VTk1QzM+Cis8VTk1Q0Q+Cis8VTk1Q0M+Cis8VTk1RDU+Cis8VTk1RDQ+Cis8VTk1RDY+Cis8VTk1REM+Cis8VTk1RTE+Cis8VTk1RTU+Cis8VTk1RTI+Cis8VTk2MjE+Cis8VTk2Mjg+Cis8VTk2MkU+Cis8VTk2MkY+Cis8VTk2NDI+Cis8VTk2NEM+Cis8VTk2NEY+Cis8VTk2NEI+Cis8VTk2Nzc+Cis8VTk2NUM+Cis8VTk2NUU+Cis8VTk2NUQ+Cis8VTk2NUY+Cis8VTk2NjY+Cis8VTk2NzI+Cis8VTk2NkM+Cis8VTk2OEQ+Cis8VTk2OTg+Cis8VTk2OTU+Cis8VTk2OTc+Cis8VTk2QUE+Cis8VTk2QTc+Cis8VTk2QjE+Cis8VTk2QjI+Cis8VTk2QjA+Cis8VTk2QjQ+Cis8VTk2QjY+Cis8VTk2Qjg+Cis8VTk2Qjk+Cis8VTk2Q0U+Cis8VTk2Q0I+Cis8VTk2Qzk+Cis8VTk2Q0Q+Cis8VTg5NEQ+Cis8VTk2REM+Cis8VTk3MEQ+Cis8VTk2RDU+Cis8VTk2Rjk+Cis8VTk3MDQ+Cis8VTk3MDY+Cis8VTk3MDg+Cis8VTk3MTM+Cis8VTk3MEU+Cis8VTk3MTE+Cis8VTk3MEY+Cis8VTk3MTY+Cis8VTk3MTk+Cis8VTk3MjQ+Cis8VTk3MkE+Cis8VTk3MzA+Cis8VTk3Mzk+Cis8VTk3M0Q+Cis8VTk3M0U+Cis8VTk3NDQ+Cis8VTk3NDY+Cis8VTk3NDg+Cis8VTk3NDI+Cis8VTk3NDk+Cis8VTk3NUM+Cis8VTk3NjA+Cis8VTk3NjQ+Cis8VTk3NjY+Cis8VTk3Njg+Cis8VTUyRDI+Cis8VTk3NkI+Cis8VTk3NzE+Cis8VTk3Nzk+Cis8VTk3ODU+Cis8VTk3N0M+Cis8VTk3ODE+Cis8VTk3N0E+Cis8VTk3ODY+Cis8VTk3OEI+Cis8VTk3OEY+Cis8VTk3OTA+Cis8VTk3OUM+Cis8VTk3QTg+Cis8VTk3QTY+Cis8VTk3QTM+Cis8VTk3QjM+Cis8VTk3QjQ+Cis8VTk3QzM+Cis8VTk3QzY+Cis8VTk3Qzg+Cis8VTk3Q0I+Cis8VTk3REM+Cis8VTk3RUQ+Cis8VTlGNEY+Cis8VTk3RjI+Cis8VTdBREY+Cis8VTk3RjY+Cis8VTk3RjU+Cis8VTk4MEY+Cis8VTk4MEM+Cis8VTk4Mzg+Cis8VTk4MjQ+Cis8VTk4MjE+Cis8VTk4Mzc+Cis8VTk4M0Q+Cis8VTk4NDY+Cis8VTk4NEY+Cis8VTk4NEI+Cis8VTk4NkI+Cis8VTk4NkY+Cis8VTk4NzA+Cis8VTk4NzE+Cis8VTk4NzQ+Cis8VTk4NzM+Cis8VTk4QUE+Cis8VTk4QUY+Cis8VTk4QjE+Cis8VTk4QjY+Cis8VTk4QzQ+Cis8VTk4QzM+Cis8VTk4QzY+Cis8VTk4RTk+Cis8VTk4RUI+Cis8VTk5MDM+Cis8VTk5MDk+Cis8VTk5MTI+Cis8VTk5MTQ+Cis8VTk5MTg+Cis8VTk5MjE+Cis8VTk5MUQ+Cis8VTk5MUU+Cis8VTk5MjQ+Cis8VTk5MjA+Cis8VTk5MkM+Cis8VTk5MkU+Cis8VTk5M0Q+Cis8VTk5M0U+Cis8VTk5NDI+Cis8VTk5NDk+Cis8VTk5NDU+Cis8VTk5NTA+Cis8VTk5NEI+Cis8VTk5NTE+Cis8VTk5NTI+Cis8VTk5NEM+Cis8VTk5NTU+Cis8VTk5OTc+Cis8VTk5OTg+Cis8VTk5QTU+Cis8VTk5QUQ+Cis8VTk5QUU+Cis8VTk5QkM+Cis8VTk5REY+Cis8VTk5REI+Cis8VTk5REQ+Cis8VTk5RDg+Cis8VTk5RDE+Cis8VTk5RUQ+Cis8VTk5RUU+Cis8VTk5RjE+Cis8VTk5RjI+Cis8VTk5RkI+Cis8VTk5Rjg+Cis8VTlBMDE+Cis8VTlBMEY+Cis8VTlBMDU+Cis8VTk5RTI+Cis8VTlBMTk+Cis8VTlBMkI+Cis8VTlBMzc+Cis8VTlBNDU+Cis8VTlBNDI+Cis8VTlBNDA+Cis8VTlBNDM+Cis8VTlBM0U+Cis8VTlBNTU+Cis8VTlBNEQ+Cis8VTlBNUI+Cis8VTlBNTc+Cis8VTlBNUY+Cis8VTlBNjI+Cis8VTlBNjU+Cis8VTlBNjQ+Cis8VTlBNjk+Cis8VTlBNkI+Cis8VTlBNkE+Cis8VTlBQUQ+Cis8VTlBQjA+Cis8VTlBQkM+Cis8VTlBQzA+Cis8VTlBQ0Y+Cis8VTlBRDE+Cis8VTlBRDM+Cis8VTlBRDQ+Cis8VTlBREU+Cis8VTlBREY+Cis8VTlBRTI+Cis8VTlBRTM+Cis8VTlBRTY+Cis8VTlBRUY+Cis8VTlBRUI+Cis8VTlBRUU+Cis8VTlBRjQ+Cis8VTlBRjE+Cis8VTlBRjc+Cis8VTlBRkI+Cis8VTlCMDY+Cis8VTlCMTg+Cis8VTlCMUE+Cis8VTlCMUY+Cis8VTlCMjI+Cis8VTlCMjM+Cis8VTlCMjU+Cis8VTlCMjc+Cis8VTlCMjg+Cis8VTlCMjk+Cis8VTlCMkE+Cis8VTlCMkU+Cis8VTlCMkY+Cis8VTlCMzI+Cis8VTlCNDQ+Cis8VTlCNDM+Cis8VTlCNEY+Cis8VTlCNEQ+Cis8VTlCNEU+Cis8VTlCNTE+Cis8VTlCNTg+Cis8VTlCNzQ+Cis8VTlCOTM+Cis8VTlCODM+Cis8VTlCOTE+Cis8VTlCOTY+Cis8VTlCOTc+Cis8VTlCOUY+Cis8VTlCQTA+Cis8VTlCQTg+Cis8VTlCQjQ+Cis8VTlCQzA+Cis8VTlCQ0E+Cis8VTlCQjk+Cis8VTlCQzY+Cis8VTlCQ0Y+Cis8VTlCRDE+Cis8VTlCRDI+Cis8VTlCRTM+Cis8VTlCRTI+Cis8VTlCRTQ+Cis8VTlCRDQ+Cis8VTlCRTE+Cis8VTlDM0E+Cis8VTlCRjI+Cis8VTlCRjE+Cis8VTlCRjA+Cis8VTlDMTU+Cis8VTlDMTQ+Cis8VTlDMDk+Cis8VTlDMTM+Cis8VTlDMEM+Cis8VTlDMDY+Cis8VTlDMDg+Cis8VTlDMTI+Cis8VTlDMEE+Cis8VTlDMDQ+Cis8VTlDMkU+Cis8VTlDMUI+Cis8VTlDMjU+Cis8VTlDMjQ+Cis8VTlDMjE+Cis8VTlDMzA+Cis8VTlDNDc+Cis8VTlDMzI+Cis8VTlDNDY+Cis8VTlDM0U+Cis8VTlDNUE+Cis8VTlDNjA+Cis8VTlDNjc+Cis8VTlDNzY+Cis8VTlDNzg+Cis8VTlDRTc+Cis8VTlDRUM+Cis8VTlDRjA+Cis8VTlEMDk+Cis8VTlEMDg+Cis8VTlDRUI+Cis8VTlEMDM+Cis8VTlEMDY+Cis8VTlEMkE+Cis8VTlEMjY+Cis8VTlEQUY+Cis8VTlEMjM+Cis8VTlEMUY+Cis8VTlENDQ+Cis8VTlEMTU+Cis8VTlEMTI+Cis8VTlENDE+Cis8VTlEM0Y+Cis8VTlEM0U+Cis8VTlENDY+Cis8VTlENDg+Cis8VTlENUQ+Cis8VTlENUU+Cis8VTlENjQ+Cis8VTlENTE+Cis8VTlENTA+Cis8VTlENTk+Cis8VTlENzI+Cis8VTlEODk+Cis8VTlEODc+Cis8VTlEQUI+Cis8VTlENkY+Cis8VTlEN0E+Cis8VTlEOUE+Cis8VTlEQTQ+Cis8VTlEQTk+Cis8VTlEQjI+Cis8VTlEQzQ+Cis8VTlEQzE+Cis8VTlEQkI+Cis8VTlEQjg+Cis8VTlEQkE+Cis8VTlEQzY+Cis8VTlEQ0Y+Cis8VTlEQzI+Cis8VTlERDk+Cis8VTlERDM+Cis8VTlERjg+Cis8VTlERTY+Cis8VTlERUQ+Cis8VTlERUY+Cis8VTlERkQ+Cis8VTlFMUE+Cis8VTlFMUI+Cis8VTlFMUU+Cis8VTlFNzU+Cis8VTlFNzk+Cis8VTlFN0Q+Cis8VTlFODE+Cis8VTlFODg+Cis8VTlFOEI+Cis8VTlFOEM+Cis8VTlFOTI+Cis8VTlFOTU+Cis8VTlFOTE+Cis8VTlFOUQ+Cis8VTlFQTU+Cis8VTlFQTk+Cis8VTlFQjg+Cis8VTlFQUE+Cis8VTlFQUQ+Cis8VTk3NjE+Cis8VTlFQ0M+Cis8VTlFQ0U+Cis8VTlFQ0Y+Cis8VTlFRDA+Cis8VTlFRDQ+Cis8VTlFREM+Cis8VTlFREU+Cis8VTlFREQ+Cis8VTlFRTA+Cis8VTlFRTU+Cis8VTlFRTg+Cis8VTlFRUY+Cis8VTlFRjQ+Cis8VTlFRjY+Cis8VTlFRjc+Cis8VTlFRjk+Cis8VTlFRkI+Cis8VTlFRkM+Cis8VTlFRkQ+Cis8VTlGMDc+Cis8VTlGMDg+Cis8VTc2Qjc+Cis8VTlGMTU+Cis8VTlGMjE+Cis8VTlGMkM+Cis8VTlGM0U+Cis8VTlGNEE+Cis8VTlGNTI+Cis8VTlGNTQ+Cis8VTlGNjM+Cis8VTlGNUY+Cis8VTlGNjA+Cis8VTlGNjE+Cis8VTlGNjY+Cis8VTlGNjc+Cis8VTlGNkM+Cis8VTlGNkE+Cis8VTlGNzc+Cis8VTlGNzI+Cis8VTlGNzY+Cis8VTlGOTU+Cis8VTlGOUM+Cis8VTlGQTA+Cis8VTU4MkY+Cis8VTY5Qzc+Cis8VTkwNTk+Cis8VTc0NjQ+Cis8VTUxREM+Cis8VTcxOTk+CislCislIEpJUyBYIDAyMTIKKyUKKzxVMDJEOD4KKzxVMDJDNz4KKzxVMDBCOD4KKzxVMDJEOT4KKzxVMDJERD4KKzxVMDBBRj4KKzxVMDJEQj4KKzxVMDJEQT4KKzxVRkY1RT4KKzxVMDM4ND4KKzxVMDM4NT4KKzxVMDBBMT4KKzxVMDBBNj4KKzxVMDBCRj4KKzxVMDBCQT4KKzxVMDBBQT4KKzxVMDBBOT4KKzxVMDBBRT4KKzxVMjEyMj4KKzxVMDBBND4KKzxVMjExNj4KKzxVMDM4Nj4KKzxVMDM4OD4KKzxVMDM4OT4KKzxVMDM4QT4KKzxVMDNBQT4KKzxVMDM4Qz4KKzxVMDM4RT4KKzxVMDNBQj4KKzxVMDM4Rj4KKzxVMDNBQz4KKzxVMDNBRD4KKzxVMDNBRT4KKzxVMDNBRj4KKzxVMDNDQT4KKzxVMDM5MD4KKzxVMDNDQz4KKzxVMDNDMj4KKzxVMDNDRD4KKzxVMDNDQj4KKzxVMDNCMD4KKzxVMDNDRT4KKzxVMDQwMj4KKzxVMDQwMz4KKzxVMDQwND4KKzxVMDQwNT4KKzxVMDQwNj4KKzxVMDQwNz4KKzxVMDQwOD4KKzxVMDQwOT4KKzxVMDQwQT4KKzxVMDQwQj4KKzxVMDQwQz4KKzxVMDQwRT4KKzxVMDQwRj4KKzxVMDQ1Mj4KKzxVMDQ1Mz4KKzxVMDQ1ND4KKzxVMDQ1NT4KKzxVMDQ1Nj4KKzxVMDQ1Nz4KKzxVMDQ1OD4KKzxVMDQ1OT4KKzxVMDQ1QT4KKzxVMDQ1Qj4KKzxVMDQ1Qz4KKzxVMDQ1RT4KKzxVMDQ1Rj4KKzxVMDBDNj4KKzxVMDExMD4KKzxVMDEyNj4KKzxVMDEzMj4KKzxVMDE0MT4KKzxVMDEzRj4KKzxVMDE0QT4KKzxVMDBEOD4KKzxVMDE1Mj4KKzxVMDE2Nj4KKzxVMDBERT4KKzxVMDBFNj4KKzxVMDExMT4KKzxVMDBGMD4KKzxVMDEyNz4KKzxVMDEzMT4KKzxVMDEzMz4KKzxVMDEzOD4KKzxVMDE0Mj4KKzxVMDE0MD4KKzxVMDE0OT4KKzxVMDE0Qj4KKzxVMDBGOD4KKzxVMDE1Mz4KKzxVMDBERj4KKzxVMDE2Nz4KKzxVMDBGRT4KKzxVMDBDMT4KKzxVMDBDMD4KKzxVMDBDND4KKzxVMDBDMj4KKzxVMDEwMj4KKzxVMDFDRD4KKzxVMDEwMD4KKzxVMDEwND4KKzxVMDBDNT4KKzxVMDBDMz4KKzxVMDEwNj4KKzxVMDEwOD4KKzxVMDEwQz4KKzxVMDBDNz4KKzxVMDEwQT4KKzxVMDEwRT4KKzxVMDBDOT4KKzxVMDBDOD4KKzxVMDBDQj4KKzxVMDBDQT4KKzxVMDExQT4KKzxVMDExNj4KKzxVMDExMj4KKzxVMDExOD4KKzxVMDExQz4KKzxVMDExRT4KKzxVMDEyMj4KKzxVMDEyMD4KKzxVMDEyND4KKzxVMDBDRD4KKzxVMDBDQz4KKzxVMDBDRj4KKzxVMDBDRT4KKzxVMDFDRj4KKzxVMDEzMD4KKzxVMDEyQT4KKzxVMDEyRT4KKzxVMDEyOD4KKzxVMDEzND4KKzxVMDEzNj4KKzxVMDEzOT4KKzxVMDEzRD4KKzxVMDEzQj4KKzxVMDE0Mz4KKzxVMDE0Nz4KKzxVMDE0NT4KKzxVMDBEMT4KKzxVMDBEMz4KKzxVMDBEMj4KKzxVMDBENj4KKzxVMDBEND4KKzxVMDFEMT4KKzxVMDE1MD4KKzxVMDE0Qz4KKzxVMDBENT4KKzxVMDE1ND4KKzxVMDE1OD4KKzxVMDE1Nj4KKzxVMDE1QT4KKzxVMDE1Qz4KKzxVMDE2MD4KKzxVMDE1RT4KKzxVMDE2ND4KKzxVMDE2Mj4KKzxVMDBEQT4KKzxVMDBEOT4KKzxVMDBEQz4KKzxVMDBEQj4KKzxVMDE2Qz4KKzxVMDFEMz4KKzxVMDE3MD4KKzxVMDE2QT4KKzxVMDE3Mj4KKzxVMDE2RT4KKzxVMDE2OD4KKzxVMDFENz4KKzxVMDFEQj4KKzxVMDFEOT4KKzxVMDFENT4KKzxVMDE3ND4KKzxVMDBERD4KKzxVMDE3OD4KKzxVMDE3Nj4KKzxVMDE3OT4KKzxVMDE3RD4KKzxVMDE3Qj4KKzxVMDBFMT4KKzxVMDBFMD4KKzxVMDBFND4KKzxVMDBFMj4KKzxVMDEwMz4KKzxVMDFDRT4KKzxVMDEwMT4KKzxVMDEwNT4KKzxVMDBFNT4KKzxVMDBFMz4KKzxVMDEwNz4KKzxVMDEwOT4KKzxVMDEwRD4KKzxVMDBFNz4KKzxVMDEwQj4KKzxVMDEwRj4KKzxVMDBFOT4KKzxVMDBFOD4KKzxVMDBFQj4KKzxVMDBFQT4KKzxVMDExQj4KKzxVMDExNz4KKzxVMDExMz4KKzxVMDExOT4KKzxVMDFGNT4KKzxVMDExRD4KKzxVMDExRj4KKzxVMDEyMT4KKzxVMDEyNT4KKzxVMDBFRD4KKzxVMDBFQz4KKzxVMDBFRj4KKzxVMDBFRT4KKzxVMDFEMD4KKzxVMDEyQj4KKzxVMDEyRj4KKzxVMDEyOT4KKzxVMDEzNT4KKzxVMDEzNz4KKzxVMDEzQT4KKzxVMDEzRT4KKzxVMDEzQz4KKzxVMDE0ND4KKzxVMDE0OD4KKzxVMDE0Nj4KKzxVMDBGMT4KKzxVMDBGMz4KKzxVMDBGMj4KKzxVMDBGNj4KKzxVMDBGND4KKzxVMDFEMj4KKzxVMDE1MT4KKzxVMDE0RD4KKzxVMDBGNT4KKzxVMDE1NT4KKzxVMDE1OT4KKzxVMDE1Nz4KKzxVMDE1Qj4KKzxVMDE1RD4KKzxVMDE2MT4KKzxVMDE1Rj4KKzxVMDE2NT4KKzxVMDE2Mz4KKzxVMDBGQT4KKzxVMDBGOT4KKzxVMDBGQz4KKzxVMDBGQj4KKzxVMDE2RD4KKzxVMDFEND4KKzxVMDE3MT4KKzxVMDE2Qj4KKzxVMDE3Mz4KKzxVMDE2Rj4KKzxVMDE2OT4KKzxVMDFEOD4KKzxVMDFEQz4KKzxVMDFEQT4KKzxVMDFENj4KKzxVMDE3NT4KKzxVMDBGRD4KKzxVMDBGRj4KKzxVMDE3Nz4KKzxVMDE3QT4KKzxVMDE3RT4KKzxVMDE3Qz4KKzxVNEUwMj4KKzxVNEUwND4KKzxVNEUwNT4KKzxVNEUwQz4KKzxVNEUxMj4KKzxVNEUxRj4KKzxVNEUyMz4KKzxVNEUyND4KKzxVNEUyOD4KKzxVNEUyQj4KKzxVNEUyRT4KKzxVNEUyRj4KKzxVNEUzMD4KKzxVNEUzNT4KKzxVNEU0MD4KKzxVNEU0MT4KKzxVNEU0ND4KKzxVNEU0Nz4KKzxVNEU1MT4KKzxVNEU1QT4KKzxVNEU1Qz4KKzxVNEU2Mz4KKzxVNEU2OD4KKzxVNEU2OT4KKzxVNEU3ND4KKzxVNEU3NT4KKzxVNEU3OT4KKzxVNEU3Rj4KKzxVNEU4RD4KKzxVNEU5Nj4KKzxVNEU5Nz4KKzxVNEU5RD4KKzxVNEVBRj4KKzxVNEVCOT4KKzxVNEVDMz4KKzxVNEVEMD4KKzxVNEVEQT4KKzxVNEVEQj4KKzxVNEVFMD4KKzxVNEVFMT4KKzxVNEVFMj4KKzxVNEVFOD4KKzxVNEVFRj4KKzxVNEVGMT4KKzxVNEVGMz4KKzxVNEVGNT4KKzxVNEVGRD4KKzxVNEVGRT4KKzxVNEVGRj4KKzxVNEYwMD4KKzxVNEYwMj4KKzxVNEYwMz4KKzxVNEYwOD4KKzxVNEYwQj4KKzxVNEYwQz4KKzxVNEYxMj4KKzxVNEYxNT4KKzxVNEYxNj4KKzxVNEYxNz4KKzxVNEYxOT4KKzxVNEYyRT4KKzxVNEYzMT4KKzxVNEY2MD4KKzxVNEYzMz4KKzxVNEYzNT4KKzxVNEYzNz4KKzxVNEYzOT4KKzxVNEYzQj4KKzxVNEYzRT4KKzxVNEY0MD4KKzxVNEY0Mj4KKzxVNEY0OD4KKzxVNEY0OT4KKzxVNEY0Qj4KKzxVNEY0Qz4KKzxVNEY1Mj4KKzxVNEY1ND4KKzxVNEY1Nj4KKzxVNEY1OD4KKzxVNEY1Rj4KKzxVNEY2Mz4KKzxVNEY2QT4KKzxVNEY2Qz4KKzxVNEY2RT4KKzxVNEY3MT4KKzxVNEY3Nz4KKzxVNEY3OD4KKzxVNEY3OT4KKzxVNEY3QT4KKzxVNEY3RD4KKzxVNEY3RT4KKzxVNEY4MT4KKzxVNEY4Mj4KKzxVNEY4ND4KKzxVNEY4NT4KKzxVNEY4OT4KKzxVNEY4QT4KKzxVNEY4Qz4KKzxVNEY4RT4KKzxVNEY5MD4KKzxVNEY5Mj4KKzxVNEY5Mz4KKzxVNEY5ND4KKzxVNEY5Nz4KKzxVNEY5OT4KKzxVNEY5QT4KKzxVNEY5RT4KKzxVNEY5Rj4KKzxVNEZCMj4KKzxVNEZCNz4KKzxVNEZCOT4KKzxVNEZCQj4KKzxVNEZCQz4KKzxVNEZCRD4KKzxVNEZCRT4KKzxVNEZDMD4KKzxVNEZDMT4KKzxVNEZDNT4KKzxVNEZDNj4KKzxVNEZDOD4KKzxVNEZDOT4KKzxVNEZDQj4KKzxVNEZDQz4KKzxVNEZDRD4KKzxVNEZDRj4KKzxVNEZEMj4KKzxVNEZEQz4KKzxVNEZFMD4KKzxVNEZFMj4KKzxVNEZGMD4KKzxVNEZGMj4KKzxVNEZGQz4KKzxVNEZGRD4KKzxVNEZGRj4KKzxVNTAwMD4KKzxVNTAwMT4KKzxVNTAwND4KKzxVNTAwNz4KKzxVNTAwQT4KKzxVNTAwQz4KKzxVNTAwRT4KKzxVNTAxMD4KKzxVNTAxMz4KKzxVNTAxNz4KKzxVNTAxOD4KKzxVNTAxQj4KKzxVNTAxQz4KKzxVNTAxRD4KKzxVNTAxRT4KKzxVNTAyMj4KKzxVNTAyNz4KKzxVNTAyRT4KKzxVNTAzMD4KKzxVNTAzMj4KKzxVNTAzMz4KKzxVNTAzNT4KKzxVNTA0MD4KKzxVNTA0MT4KKzxVNTA0Mj4KKzxVNTA0NT4KKzxVNTA0Nj4KKzxVNTA0QT4KKzxVNTA0Qz4KKzxVNTA0RT4KKzxVNTA1MT4KKzxVNTA1Mj4KKzxVNTA1Mz4KKzxVNTA1Nz4KKzxVNTA1OT4KKzxVNTA1Rj4KKzxVNTA2MD4KKzxVNTA2Mj4KKzxVNTA2Mz4KKzxVNTA2Nj4KKzxVNTA2Nz4KKzxVNTA2QT4KKzxVNTA2RD4KKzxVNTA3MD4KKzxVNTA3MT4KKzxVNTAzQj4KKzxVNTA4MT4KKzxVNTA4Mz4KKzxVNTA4ND4KKzxVNTA4Nj4KKzxVNTA4QT4KKzxVNTA4RT4KKzxVNTA4Rj4KKzxVNTA5MD4KKzxVNTA5Mj4KKzxVNTA5Mz4KKzxVNTA5ND4KKzxVNTA5Nj4KKzxVNTA5Qj4KKzxVNTA5Qz4KKzxVNTA5RT4KKzxVNTA5Rj4KKzxVNTBBMD4KKzxVNTBBMT4KKzxVNTBBMj4KKzxVNTBBQT4KKzxVNTBBRj4KKzxVNTBCMD4KKzxVNTBCOT4KKzxVNTBCQT4KKzxVNTBCRD4KKzxVNTBDMD4KKzxVNTBDMz4KKzxVNTBDND4KKzxVNTBDNz4KKzxVNTBDQz4KKzxVNTBDRT4KKzxVNTBEMD4KKzxVNTBEMz4KKzxVNTBEND4KKzxVNTBEOD4KKzxVNTBEQz4KKzxVNTBERD4KKzxVNTBERj4KKzxVNTBFMj4KKzxVNTBFND4KKzxVNTBFNj4KKzxVNTBFOD4KKzxVNTBFOT4KKzxVNTBFRj4KKzxVNTBGMT4KKzxVNTBGNj4KKzxVNTBGQT4KKzxVNTBGRT4KKzxVNTEwMz4KKzxVNTEwNj4KKzxVNTEwNz4KKzxVNTEwOD4KKzxVNTEwQj4KKzxVNTEwQz4KKzxVNTEwRD4KKzxVNTEwRT4KKzxVNTBGMj4KKzxVNTExMD4KKzxVNTExNz4KKzxVNTExOT4KKzxVNTExQj4KKzxVNTExQz4KKzxVNTExRD4KKzxVNTExRT4KKzxVNTEyMz4KKzxVNTEyNz4KKzxVNTEyOD4KKzxVNTEyQz4KKzxVNTEyRD4KKzxVNTEyRj4KKzxVNTEzMT4KKzxVNTEzMz4KKzxVNTEzND4KKzxVNTEzNT4KKzxVNTEzOD4KKzxVNTEzOT4KKzxVNTE0Mj4KKzxVNTE0QT4KKzxVNTE0Rj4KKzxVNTE1Mz4KKzxVNTE1NT4KKzxVNTE1Nz4KKzxVNTE1OD4KKzxVNTE1Rj4KKzxVNTE2ND4KKzxVNTE2Nj4KKzxVNTE3RT4KKzxVNTE4Mz4KKzxVNTE4ND4KKzxVNTE4Qj4KKzxVNTE4RT4KKzxVNTE5OD4KKzxVNTE5RD4KKzxVNTFBMT4KKzxVNTFBMz4KKzxVNTFBRD4KKzxVNTFCOD4KKzxVNTFCQT4KKzxVNTFCQz4KKzxVNTFCRT4KKzxVNTFCRj4KKzxVNTFDMj4KKzxVNTFDOD4KKzxVNTFDRj4KKzxVNTFEMT4KKzxVNTFEMj4KKzxVNTFEMz4KKzxVNTFENT4KKzxVNTFEOD4KKzxVNTFERT4KKzxVNTFFMj4KKzxVNTFFNT4KKzxVNTFFRT4KKzxVNTFGMj4KKzxVNTFGMz4KKzxVNTFGND4KKzxVNTFGNz4KKzxVNTIwMT4KKzxVNTIwMj4KKzxVNTIwNT4KKzxVNTIxMj4KKzxVNTIxMz4KKzxVNTIxNT4KKzxVNTIxNj4KKzxVNTIxOD4KKzxVNTIyMj4KKzxVNTIyOD4KKzxVNTIzMT4KKzxVNTIzMj4KKzxVNTIzNT4KKzxVNTIzQz4KKzxVNTI0NT4KKzxVNTI0OT4KKzxVNTI1NT4KKzxVNTI1Nz4KKzxVNTI1OD4KKzxVNTI1QT4KKzxVNTI1Qz4KKzxVNTI1Rj4KKzxVNTI2MD4KKzxVNTI2MT4KKzxVNTI2Nj4KKzxVNTI2RT4KKzxVNTI3Nz4KKzxVNTI3OD4KKzxVNTI3OT4KKzxVNTI4MD4KKzxVNTI4Mj4KKzxVNTI4NT4KKzxVNTI4QT4KKzxVNTI4Qz4KKzxVNTI5Mz4KKzxVNTI5NT4KKzxVNTI5Nj4KKzxVNTI5Nz4KKzxVNTI5OD4KKzxVNTI5QT4KKzxVNTI5Qz4KKzxVNTJBND4KKzxVNTJBNT4KKzxVNTJBNj4KKzxVNTJBNz4KKzxVNTJBRj4KKzxVNTJCMD4KKzxVNTJCNj4KKzxVNTJCNz4KKzxVNTJCOD4KKzxVNTJCQT4KKzxVNTJCQj4KKzxVNTJCRD4KKzxVNTJDMD4KKzxVNTJDND4KKzxVNTJDNj4KKzxVNTJDOD4KKzxVNTJDQz4KKzxVNTJDRj4KKzxVNTJEMT4KKzxVNTJEND4KKzxVNTJENj4KKzxVNTJEQj4KKzxVNTJEQz4KKzxVNTJFMT4KKzxVNTJFNT4KKzxVNTJFOD4KKzxVNTJFOT4KKzxVNTJFQT4KKzxVNTJFQz4KKzxVNTJGMD4KKzxVNTJGMT4KKzxVNTJGND4KKzxVNTJGNj4KKzxVNTJGNz4KKzxVNTMwMD4KKzxVNTMwMz4KKzxVNTMwQT4KKzxVNTMwQj4KKzxVNTMwQz4KKzxVNTMxMT4KKzxVNTMxMz4KKzxVNTMxOD4KKzxVNTMxQj4KKzxVNTMxQz4KKzxVNTMxRT4KKzxVNTMxRj4KKzxVNTMyNT4KKzxVNTMyNz4KKzxVNTMyOD4KKzxVNTMyOT4KKzxVNTMyQj4KKzxVNTMyQz4KKzxVNTMyRD4KKzxVNTMzMD4KKzxVNTMzMj4KKzxVNTMzNT4KKzxVNTMzQz4KKzxVNTMzRD4KKzxVNTMzRT4KKzxVNTM0Mj4KKzxVNTM0Qz4KKzxVNTM0Qj4KKzxVNTM1OT4KKzxVNTM1Qj4KKzxVNTM2MT4KKzxVNTM2Mz4KKzxVNTM2NT4KKzxVNTM2Qz4KKzxVNTM2RD4KKzxVNTM3Mj4KKzxVNTM3OT4KKzxVNTM3RT4KKzxVNTM4Mz4KKzxVNTM4Nz4KKzxVNTM4OD4KKzxVNTM4RT4KKzxVNTM5Mz4KKzxVNTM5ND4KKzxVNTM5OT4KKzxVNTM5RD4KKzxVNTNBMT4KKzxVNTNBND4KKzxVNTNBQT4KKzxVNTNBQj4KKzxVNTNBRj4KKzxVNTNCMj4KKzxVNTNCND4KKzxVNTNCNT4KKzxVNTNCNz4KKzxVNTNCOD4KKzxVNTNCQT4KKzxVNTNCRD4KKzxVNTNDMD4KKzxVNTNDNT4KKzxVNTNDRj4KKzxVNTNEMj4KKzxVNTNEMz4KKzxVNTNENT4KKzxVNTNEQT4KKzxVNTNERD4KKzxVNTNERT4KKzxVNTNFMD4KKzxVNTNFNj4KKzxVNTNFNz4KKzxVNTNGNT4KKzxVNTQwMj4KKzxVNTQxMz4KKzxVNTQxQT4KKzxVNTQyMT4KKzxVNTQyNz4KKzxVNTQyOD4KKzxVNTQyQT4KKzxVNTQyRj4KKzxVNTQzMT4KKzxVNTQzND4KKzxVNTQzNT4KKzxVNTQ0Mz4KKzxVNTQ0ND4KKzxVNTQ0Nz4KKzxVNTQ0RD4KKzxVNTQ0Rj4KKzxVNTQ1RT4KKzxVNTQ2Mj4KKzxVNTQ2ND4KKzxVNTQ2Nj4KKzxVNTQ2Nz4KKzxVNTQ2OT4KKzxVNTQ2Qj4KKzxVNTQ2RD4KKzxVNTQ2RT4KKzxVNTQ3ND4KKzxVNTQ3Rj4KKzxVNTQ4MT4KKzxVNTQ4Mz4KKzxVNTQ4NT4KKzxVNTQ4OD4KKzxVNTQ4OT4KKzxVNTQ4RD4KKzxVNTQ5MT4KKzxVNTQ5NT4KKzxVNTQ5Nj4KKzxVNTQ5Qz4KKzxVNTQ5Rj4KKzxVNTRBMT4KKzxVNTRBNj4KKzxVNTRBNz4KKzxVNTRBOT4KKzxVNTRBQT4KKzxVNTRBRD4KKzxVNTRBRT4KKzxVNTRCMT4KKzxVNTRCNz4KKzxVNTRCOT4KKzxVNTRCQT4KKzxVNTRCQj4KKzxVNTRCRj4KKzxVNTRDNj4KKzxVNTRDQT4KKzxVNTRDRD4KKzxVNTRDRT4KKzxVNTRFMD4KKzxVNTRFQT4KKzxVNTRFQz4KKzxVNTRFRj4KKzxVNTRGNj4KKzxVNTRGQz4KKzxVNTRGRT4KKzxVNTRGRj4KKzxVNTUwMD4KKzxVNTUwMT4KKzxVNTUwNT4KKzxVNTUwOD4KKzxVNTUwOT4KKzxVNTUwQz4KKzxVNTUwRD4KKzxVNTUwRT4KKzxVNTUxNT4KKzxVNTUyQT4KKzxVNTUyQj4KKzxVNTUzMj4KKzxVNTUzNT4KKzxVNTUzNj4KKzxVNTUzQj4KKzxVNTUzQz4KKzxVNTUzRD4KKzxVNTU0MT4KKzxVNTU0Nz4KKzxVNTU0OT4KKzxVNTU0QT4KKzxVNTU0RD4KKzxVNTU1MD4KKzxVNTU1MT4KKzxVNTU1OD4KKzxVNTU1QT4KKzxVNTU1Qj4KKzxVNTU1RT4KKzxVNTU2MD4KKzxVNTU2MT4KKzxVNTU2ND4KKzxVNTU2Nj4KKzxVNTU3Rj4KKzxVNTU4MT4KKzxVNTU4Mj4KKzxVNTU4Nj4KKzxVNTU4OD4KKzxVNTU4RT4KKzxVNTU4Rj4KKzxVNTU5MT4KKzxVNTU5Mj4KKzxVNTU5Mz4KKzxVNTU5ND4KKzxVNTU5Nz4KKzxVNTVBMz4KKzxVNTVBND4KKzxVNTVBRD4KKzxVNTVCMj4KKzxVNTVCRj4KKzxVNTVDMT4KKzxVNTVDMz4KKzxVNTVDNj4KKzxVNTVDOT4KKzxVNTVDQj4KKzxVNTVDQz4KKzxVNTVDRT4KKzxVNTVEMT4KKzxVNTVEMj4KKzxVNTVEMz4KKzxVNTVENz4KKzxVNTVEOD4KKzxVNTVEQj4KKzxVNTVERT4KKzxVNTVFMj4KKzxVNTVFOT4KKzxVNTVGNj4KKzxVNTVGRj4KKzxVNTYwNT4KKzxVNTYwOD4KKzxVNTYwQT4KKzxVNTYwRD4KKzxVNTYwRT4KKzxVNTYwRj4KKzxVNTYxMD4KKzxVNTYxMT4KKzxVNTYxMj4KKzxVNTYxOT4KKzxVNTYyQz4KKzxVNTYzMD4KKzxVNTYzMz4KKzxVNTYzNT4KKzxVNTYzNz4KKzxVNTYzOT4KKzxVNTYzQj4KKzxVNTYzQz4KKzxVNTYzRD4KKzxVNTYzRj4KKzxVNTY0MD4KKzxVNTY0MT4KKzxVNTY0Mz4KKzxVNTY0ND4KKzxVNTY0Nj4KKzxVNTY0OT4KKzxVNTY0Qj4KKzxVNTY0RD4KKzxVNTY0Rj4KKzxVNTY1ND4KKzxVNTY1RT4KKzxVNTY2MD4KKzxVNTY2MT4KKzxVNTY2Mj4KKzxVNTY2Mz4KKzxVNTY2Nj4KKzxVNTY2OT4KKzxVNTY2RD4KKzxVNTY2Rj4KKzxVNTY3MT4KKzxVNTY3Mj4KKzxVNTY3NT4KKzxVNTY4ND4KKzxVNTY4NT4KKzxVNTY4OD4KKzxVNTY4Qj4KKzxVNTY4Qz4KKzxVNTY5NT4KKzxVNTY5OT4KKzxVNTY5QT4KKzxVNTY5RD4KKzxVNTY5RT4KKzxVNTY5Rj4KKzxVNTZBNj4KKzxVNTZBNz4KKzxVNTZBOD4KKzxVNTZBOT4KKzxVNTZBQj4KKzxVNTZBQz4KKzxVNTZBRD4KKzxVNTZCMT4KKzxVNTZCMz4KKzxVNTZCNz4KKzxVNTZCRT4KKzxVNTZDNT4KKzxVNTZDOT4KKzxVNTZDQT4KKzxVNTZDQj4KKzxVNTZDRj4KKzxVNTZEMD4KKzxVNTZDQz4KKzxVNTZDRD4KKzxVNTZEOT4KKzxVNTZEQz4KKzxVNTZERD4KKzxVNTZERj4KKzxVNTZFMT4KKzxVNTZFND4KKzxVNTZFNT4KKzxVNTZFNj4KKzxVNTZFNz4KKzxVNTZFOD4KKzxVNTZGMT4KKzxVNTZFQj4KKzxVNTZFRD4KKzxVNTZGNj4KKzxVNTZGNz4KKzxVNTcwMT4KKzxVNTcwMj4KKzxVNTcwNz4KKzxVNTcwQT4KKzxVNTcwQz4KKzxVNTcxMT4KKzxVNTcxNT4KKzxVNTcxQT4KKzxVNTcxQj4KKzxVNTcxRD4KKzxVNTcyMD4KKzxVNTcyMj4KKzxVNTcyMz4KKzxVNTcyND4KKzxVNTcyNT4KKzxVNTcyOT4KKzxVNTcyQT4KKzxVNTcyQz4KKzxVNTcyRT4KKzxVNTcyRj4KKzxVNTczMz4KKzxVNTczND4KKzxVNTczRD4KKzxVNTczRT4KKzxVNTczRj4KKzxVNTc0NT4KKzxVNTc0Nj4KKzxVNTc0Qz4KKzxVNTc0RD4KKzxVNTc1Mj4KKzxVNTc2Mj4KKzxVNTc2NT4KKzxVNTc2Nz4KKzxVNTc2OD4KKzxVNTc2Qj4KKzxVNTc2RD4KKzxVNTc2RT4KKzxVNTc2Rj4KKzxVNTc3MD4KKzxVNTc3MT4KKzxVNTc3Mz4KKzxVNTc3ND4KKzxVNTc3NT4KKzxVNTc3Nz4KKzxVNTc3OT4KKzxVNTc3QT4KKzxVNTc3Qj4KKzxVNTc3Qz4KKzxVNTc3RT4KKzxVNTc4MT4KKzxVNTc4Mz4KKzxVNTc4Qz4KKzxVNTc5ND4KKzxVNTc5Nz4KKzxVNTc5OT4KKzxVNTc5QT4KKzxVNTc5Qz4KKzxVNTc5RD4KKzxVNTc5RT4KKzxVNTc5Rj4KKzxVNTdBMT4KKzxVNTc5NT4KKzxVNTdBNz4KKzxVNTdBOD4KKzxVNTdBOT4KKzxVNTdBQz4KKzxVNTdCOD4KKzxVNTdCRD4KKzxVNTdDNz4KKzxVNTdDOD4KKzxVNTdDQz4KKzxVNTdDRj4KKzxVNTdENT4KKzxVNTdERD4KKzxVNTdERT4KKzxVNTdFND4KKzxVNTdFNj4KKzxVNTdFNz4KKzxVNTdFOT4KKzxVNTdFRD4KKzxVNTdGMD4KKzxVNTdGNT4KKzxVNTdGNj4KKzxVNTdGOD4KKzxVNTdGRD4KKzxVNTdGRT4KKzxVNTdGRj4KKzxVNTgwMz4KKzxVNTgwND4KKzxVNTgwOD4KKzxVNTgwOT4KKzxVNTdFMT4KKzxVNTgwQz4KKzxVNTgwRD4KKzxVNTgxQj4KKzxVNTgxRT4KKzxVNTgxRj4KKzxVNTgyMD4KKzxVNTgyNj4KKzxVNTgyNz4KKzxVNTgyRD4KKzxVNTgzMj4KKzxVNTgzOT4KKzxVNTgzRj4KKzxVNTg0OT4KKzxVNTg0Qz4KKzxVNTg0RD4KKzxVNTg0Rj4KKzxVNTg1MD4KKzxVNTg1NT4KKzxVNTg1Rj4KKzxVNTg2MT4KKzxVNTg2ND4KKzxVNTg2Nz4KKzxVNTg2OD4KKzxVNTg3OD4KKzxVNTg3Qz4KKzxVNTg3Rj4KKzxVNTg4MD4KKzxVNTg4MT4KKzxVNTg4Nz4KKzxVNTg4OD4KKzxVNTg4OT4KKzxVNTg4QT4KKzxVNTg4Qz4KKzxVNTg4RD4KKzxVNTg4Rj4KKzxVNTg5MD4KKzxVNTg5ND4KKzxVNTg5Nj4KKzxVNTg5RD4KKzxVNThBMD4KKzxVNThBMT4KKzxVNThBMj4KKzxVNThBNj4KKzxVNThBOT4KKzxVNThCMT4KKzxVNThCMj4KKzxVNThDND4KKzxVNThCQz4KKzxVNThDMj4KKzxVNThDOD4KKzxVNThDRD4KKzxVNThDRT4KKzxVNThEMD4KKzxVNThEMj4KKzxVNThEND4KKzxVNThENj4KKzxVNThEQT4KKzxVNThERD4KKzxVNThFMT4KKzxVNThFMj4KKzxVNThFOT4KKzxVNThGMz4KKzxVNTkwNT4KKzxVNTkwNj4KKzxVNTkwQj4KKzxVNTkwQz4KKzxVNTkxMj4KKzxVNTkxMz4KKzxVNTkxND4KKzxVODY0MT4KKzxVNTkxRD4KKzxVNTkyMT4KKzxVNTkyMz4KKzxVNTkyND4KKzxVNTkyOD4KKzxVNTkyRj4KKzxVNTkzMD4KKzxVNTkzMz4KKzxVNTkzNT4KKzxVNTkzNj4KKzxVNTkzRj4KKzxVNTk0Mz4KKzxVNTk0Nj4KKzxVNTk1Mj4KKzxVNTk1Mz4KKzxVNTk1OT4KKzxVNTk1Qj4KKzxVNTk1RD4KKzxVNTk1RT4KKzxVNTk1Rj4KKzxVNTk2MT4KKzxVNTk2Mz4KKzxVNTk2Qj4KKzxVNTk2RD4KKzxVNTk2Rj4KKzxVNTk3Mj4KKzxVNTk3NT4KKzxVNTk3Nj4KKzxVNTk3OT4KKzxVNTk3Qj4KKzxVNTk3Qz4KKzxVNTk4Qj4KKzxVNTk4Qz4KKzxVNTk4RT4KKzxVNTk5Mj4KKzxVNTk5NT4KKzxVNTk5Nz4KKzxVNTk5Rj4KKzxVNTlBND4KKzxVNTlBNz4KKzxVNTlBRD4KKzxVNTlBRT4KKzxVNTlBRj4KKzxVNTlCMD4KKzxVNTlCMz4KKzxVNTlCNz4KKzxVNTlCQT4KKzxVNTlCQz4KKzxVNTlDMT4KKzxVNTlDMz4KKzxVNTlDND4KKzxVNTlDOD4KKzxVNTlDQT4KKzxVNTlDRD4KKzxVNTlEMj4KKzxVNTlERD4KKzxVNTlERT4KKzxVNTlERj4KKzxVNTlFMz4KKzxVNTlFND4KKzxVNTlFNz4KKzxVNTlFRT4KKzxVNTlFRj4KKzxVNTlGMT4KKzxVNTlGMj4KKzxVNTlGND4KKzxVNTlGNz4KKzxVNUEwMD4KKzxVNUEwND4KKzxVNUEwQz4KKzxVNUEwRD4KKzxVNUEwRT4KKzxVNUExMj4KKzxVNUExMz4KKzxVNUExRT4KKzxVNUEyMz4KKzxVNUEyND4KKzxVNUEyNz4KKzxVNUEyOD4KKzxVNUEyQT4KKzxVNUEyRD4KKzxVNUEzMD4KKzxVNUE0ND4KKzxVNUE0NT4KKzxVNUE0Nz4KKzxVNUE0OD4KKzxVNUE0Qz4KKzxVNUE1MD4KKzxVNUE1NT4KKzxVNUE1RT4KKzxVNUE2Mz4KKzxVNUE2NT4KKzxVNUE2Nz4KKzxVNUE2RD4KKzxVNUE3Nz4KKzxVNUE3QT4KKzxVNUE3Qj4KKzxVNUE3RT4KKzxVNUE4Qj4KKzxVNUE5MD4KKzxVNUE5Mz4KKzxVNUE5Nj4KKzxVNUE5OT4KKzxVNUE5Qz4KKzxVNUE5RT4KKzxVNUE5Rj4KKzxVNUFBMD4KKzxVNUFBMj4KKzxVNUFBNz4KKzxVNUFBQz4KKzxVNUFCMT4KKzxVNUFCMj4KKzxVNUFCMz4KKzxVNUFCNT4KKzxVNUFCOD4KKzxVNUFCQT4KKzxVNUFCQj4KKzxVNUFCRj4KKzxVNUFDND4KKzxVNUFDNj4KKzxVNUFDOD4KKzxVNUFDRj4KKzxVNUFEQT4KKzxVNUFEQz4KKzxVNUFFMD4KKzxVNUFFNT4KKzxVNUFFQT4KKzxVNUFFRT4KKzxVNUFGNT4KKzxVNUFGNj4KKzxVNUFGRD4KKzxVNUIwMD4KKzxVNUIwMT4KKzxVNUIwOD4KKzxVNUIxNz4KKzxVNUIzND4KKzxVNUIxOT4KKzxVNUIxQj4KKzxVNUIxRD4KKzxVNUIyMT4KKzxVNUIyNT4KKzxVNUIyRD4KKzxVNUIzOD4KKzxVNUI0MT4KKzxVNUI0Qj4KKzxVNUI0Qz4KKzxVNUI1Mj4KKzxVNUI1Nj4KKzxVNUI1RT4KKzxVNUI2OD4KKzxVNUI2RT4KKzxVNUI2Rj4KKzxVNUI3Qz4KKzxVNUI3RD4KKzxVNUI3RT4KKzxVNUI3Rj4KKzxVNUI4MT4KKzxVNUI4ND4KKzxVNUI4Nj4KKzxVNUI4QT4KKzxVNUI4RT4KKzxVNUI5MD4KKzxVNUI5MT4KKzxVNUI5Mz4KKzxVNUI5ND4KKzxVNUI5Nj4KKzxVNUJBOD4KKzxVNUJBOT4KKzxVNUJBQz4KKzxVNUJBRD4KKzxVNUJBRj4KKzxVNUJCMT4KKzxVNUJCMj4KKzxVNUJCNz4KKzxVNUJCQT4KKzxVNUJCQz4KKzxVNUJDMD4KKzxVNUJDMT4KKzxVNUJDRD4KKzxVNUJDRj4KKzxVNUJENj4KKzxVNUJENz4KKzxVNUJEOD4KKzxVNUJEOT4KKzxVNUJEQT4KKzxVNUJFMD4KKzxVNUJFRj4KKzxVNUJGMT4KKzxVNUJGND4KKzxVNUJGRD4KKzxVNUMwQz4KKzxVNUMxNz4KKzxVNUMxRT4KKzxVNUMxRj4KKzxVNUMyMz4KKzxVNUMyNj4KKzxVNUMyOT4KKzxVNUMyQj4KKzxVNUMyQz4KKzxVNUMyRT4KKzxVNUMzMD4KKzxVNUMzMj4KKzxVNUMzNT4KKzxVNUMzNj4KKzxVNUM1OT4KKzxVNUM1QT4KKzxVNUM1Qz4KKzxVNUM2Mj4KKzxVNUM2Mz4KKzxVNUM2Nz4KKzxVNUM2OD4KKzxVNUM2OT4KKzxVNUM2RD4KKzxVNUM3MD4KKzxVNUM3ND4KKzxVNUM3NT4KKzxVNUM3QT4KKzxVNUM3Qj4KKzxVNUM3Qz4KKzxVNUM3RD4KKzxVNUM4Nz4KKzxVNUM4OD4KKzxVNUM4QT4KKzxVNUM4Rj4KKzxVNUM5Mj4KKzxVNUM5RD4KKzxVNUM5Rj4KKzxVNUNBMD4KKzxVNUNBMj4KKzxVNUNBMz4KKzxVNUNBNj4KKzxVNUNBQT4KKzxVNUNCMj4KKzxVNUNCND4KKzxVNUNCNT4KKzxVNUNCQT4KKzxVNUNDOT4KKzxVNUNDQj4KKzxVNUNEMj4KKzxVNUNERD4KKzxVNUNENz4KKzxVNUNFRT4KKzxVNUNGMT4KKzxVNUNGMj4KKzxVNUNGND4KKzxVNUQwMT4KKzxVNUQwNj4KKzxVNUQwRD4KKzxVNUQxMj4KKzxVNUQyQj4KKzxVNUQyMz4KKzxVNUQyND4KKzxVNUQyNj4KKzxVNUQyNz4KKzxVNUQzMT4KKzxVNUQzND4KKzxVNUQzOT4KKzxVNUQzRD4KKzxVNUQzRj4KKzxVNUQ0Mj4KKzxVNUQ0Mz4KKzxVNUQ0Nj4KKzxVNUQ0OD4KKzxVNUQ1NT4KKzxVNUQ1MT4KKzxVNUQ1OT4KKzxVNUQ0QT4KKzxVNUQ1Rj4KKzxVNUQ2MD4KKzxVNUQ2MT4KKzxVNUQ2Mj4KKzxVNUQ2ND4KKzxVNUQ2QT4KKzxVNUQ2RD4KKzxVNUQ3MD4KKzxVNUQ3OT4KKzxVNUQ3QT4KKzxVNUQ3RT4KKzxVNUQ3Rj4KKzxVNUQ4MT4KKzxVNUQ4Mz4KKzxVNUQ4OD4KKzxVNUQ4QT4KKzxVNUQ5Mj4KKzxVNUQ5Mz4KKzxVNUQ5ND4KKzxVNUQ5NT4KKzxVNUQ5OT4KKzxVNUQ5Qj4KKzxVNUQ5Rj4KKzxVNURBMD4KKzxVNURBNz4KKzxVNURBQj4KKzxVNURCMD4KKzxVNURCND4KKzxVNURCOD4KKzxVNURCOT4KKzxVNURDMz4KKzxVNURDNz4KKzxVNURDQj4KKzxVNUREMD4KKzxVNURDRT4KKzxVNUREOD4KKzxVNUREOT4KKzxVNURFMD4KKzxVNURFND4KKzxVNURFOT4KKzxVNURGOD4KKzxVNURGOT4KKzxVNUUwMD4KKzxVNUUwNz4KKzxVNUUwRD4KKzxVNUUxMj4KKzxVNUUxND4KKzxVNUUxNT4KKzxVNUUxOD4KKzxVNUUxRj4KKzxVNUUyMD4KKzxVNUUyRT4KKzxVNUUyOD4KKzxVNUUzMj4KKzxVNUUzNT4KKzxVNUUzRT4KKzxVNUU0Qj4KKzxVNUU1MD4KKzxVNUU0OT4KKzxVNUU1MT4KKzxVNUU1Nj4KKzxVNUU1OD4KKzxVNUU1Qj4KKzxVNUU1Qz4KKzxVNUU1RT4KKzxVNUU2OD4KKzxVNUU2QT4KKzxVNUU2Qj4KKzxVNUU2Qz4KKzxVNUU2RD4KKzxVNUU2RT4KKzxVNUU3MD4KKzxVNUU4MD4KKzxVNUU4Qj4KKzxVNUU4RT4KKzxVNUVBMj4KKzxVNUVBND4KKzxVNUVBNT4KKzxVNUVBOD4KKzxVNUVBQT4KKzxVNUVBQz4KKzxVNUVCMT4KKzxVNUVCMz4KKzxVNUVCRD4KKzxVNUVCRT4KKzxVNUVCRj4KKzxVNUVDNj4KKzxVNUVDQz4KKzxVNUVDQj4KKzxVNUVDRT4KKzxVNUVEMT4KKzxVNUVEMj4KKzxVNUVEND4KKzxVNUVENT4KKzxVNUVEQz4KKzxVNUVERT4KKzxVNUVFNT4KKzxVNUVFQj4KKzxVNUYwMj4KKzxVNUYwNj4KKzxVNUYwNz4KKzxVNUYwOD4KKzxVNUYwRT4KKzxVNUYxOT4KKzxVNUYxQz4KKzxVNUYxRD4KKzxVNUYyMT4KKzxVNUYyMj4KKzxVNUYyMz4KKzxVNUYyND4KKzxVNUYyOD4KKzxVNUYyQj4KKzxVNUYyQz4KKzxVNUYyRT4KKzxVNUYzMD4KKzxVNUYzND4KKzxVNUYzNj4KKzxVNUYzQj4KKzxVNUYzRD4KKzxVNUYzRj4KKzxVNUY0MD4KKzxVNUY0ND4KKzxVNUY0NT4KKzxVNUY0Nz4KKzxVNUY0RD4KKzxVNUY1MD4KKzxVNUY1ND4KKzxVNUY1OD4KKzxVNUY1Qj4KKzxVNUY2MD4KKzxVNUY2Mz4KKzxVNUY2ND4KKzxVNUY2Nz4KKzxVNUY2Rj4KKzxVNUY3Mj4KKzxVNUY3ND4KKzxVNUY3NT4KKzxVNUY3OD4KKzxVNUY3QT4KKzxVNUY3RD4KKzxVNUY3RT4KKzxVNUY4OT4KKzxVNUY4RD4KKzxVNUY4Rj4KKzxVNUY5Nj4KKzxVNUY5Qz4KKzxVNUY5RD4KKzxVNUZBMj4KKzxVNUZBNz4KKzxVNUZBQj4KKzxVNUZBND4KKzxVNUZBQz4KKzxVNUZBRj4KKzxVNUZCMD4KKzxVNUZCMT4KKzxVNUZCOD4KKzxVNUZDND4KKzxVNUZDNz4KKzxVNUZDOD4KKzxVNUZDOT4KKzxVNUZDQj4KKzxVNUZEMD4KKzxVNUZEMT4KKzxVNUZEMj4KKzxVNUZEMz4KKzxVNUZEND4KKzxVNUZERT4KKzxVNUZFMT4KKzxVNUZFMj4KKzxVNUZFOD4KKzxVNUZFOT4KKzxVNUZFQT4KKzxVNUZFQz4KKzxVNUZFRD4KKzxVNUZFRT4KKzxVNUZFRj4KKzxVNUZGMj4KKzxVNUZGMz4KKzxVNUZGNj4KKzxVNUZGQT4KKzxVNUZGQz4KKzxVNjAwNz4KKzxVNjAwQT4KKzxVNjAwRD4KKzxVNjAxMz4KKzxVNjAxND4KKzxVNjAxNz4KKzxVNjAxOD4KKzxVNjAxQT4KKzxVNjAxRj4KKzxVNjAyND4KKzxVNjAyRD4KKzxVNjAzMz4KKzxVNjAzNT4KKzxVNjA0MD4KKzxVNjA0Nz4KKzxVNjA0OD4KKzxVNjA0OT4KKzxVNjA0Qz4KKzxVNjA1MT4KKzxVNjA1ND4KKzxVNjA1Nj4KKzxVNjA1Nz4KKzxVNjA1RD4KKzxVNjA2MT4KKzxVNjA2Nz4KKzxVNjA3MT4KKzxVNjA3RT4KKzxVNjA3Rj4KKzxVNjA4Mj4KKzxVNjA4Nj4KKzxVNjA4OD4KKzxVNjA4QT4KKzxVNjA4RT4KKzxVNjA5MT4KKzxVNjA5Mz4KKzxVNjA5NT4KKzxVNjA5OD4KKzxVNjA5RD4KKzxVNjA5RT4KKzxVNjBBMj4KKzxVNjBBND4KKzxVNjBBNT4KKzxVNjBBOD4KKzxVNjBCMD4KKzxVNjBCMT4KKzxVNjBCNz4KKzxVNjBCQj4KKzxVNjBCRT4KKzxVNjBDMj4KKzxVNjBDND4KKzxVNjBDOD4KKzxVNjBDOT4KKzxVNjBDQT4KKzxVNjBDQj4KKzxVNjBDRT4KKzxVNjBDRj4KKzxVNjBEND4KKzxVNjBENT4KKzxVNjBEOT4KKzxVNjBEQj4KKzxVNjBERD4KKzxVNjBERT4KKzxVNjBFMj4KKzxVNjBFNT4KKzxVNjBGMj4KKzxVNjBGNT4KKzxVNjBGOD4KKzxVNjBGQz4KKzxVNjBGRD4KKzxVNjEwMj4KKzxVNjEwNz4KKzxVNjEwQT4KKzxVNjEwQz4KKzxVNjExMD4KKzxVNjExMT4KKzxVNjExMj4KKzxVNjExMz4KKzxVNjExND4KKzxVNjExNj4KKzxVNjExNz4KKzxVNjExOT4KKzxVNjExQz4KKzxVNjExRT4KKzxVNjEyMj4KKzxVNjEyQT4KKzxVNjEyQj4KKzxVNjEzMD4KKzxVNjEzMT4KKzxVNjEzNT4KKzxVNjEzNj4KKzxVNjEzNz4KKzxVNjEzOT4KKzxVNjE0MT4KKzxVNjE0NT4KKzxVNjE0Nj4KKzxVNjE0OT4KKzxVNjE1RT4KKzxVNjE2MD4KKzxVNjE2Qz4KKzxVNjE3Mj4KKzxVNjE3OD4KKzxVNjE3Qj4KKzxVNjE3Qz4KKzxVNjE3Rj4KKzxVNjE4MD4KKzxVNjE4MT4KKzxVNjE4Mz4KKzxVNjE4ND4KKzxVNjE4Qj4KKzxVNjE4RD4KKzxVNjE5Mj4KKzxVNjE5Mz4KKzxVNjE5Nz4KKzxVNjE5OD4KKzxVNjE5Qz4KKzxVNjE5RD4KKzxVNjE5Rj4KKzxVNjFBMD4KKzxVNjFBNT4KKzxVNjFBOD4KKzxVNjFBQT4KKzxVNjFBRD4KKzxVNjFCOD4KKzxVNjFCOT4KKzxVNjFCQz4KKzxVNjFDMD4KKzxVNjFDMT4KKzxVNjFDMj4KKzxVNjFDRT4KKzxVNjFDRj4KKzxVNjFENT4KKzxVNjFEQz4KKzxVNjFERD4KKzxVNjFERT4KKzxVNjFERj4KKzxVNjFFMT4KKzxVNjFFMj4KKzxVNjFFNz4KKzxVNjFFOT4KKzxVNjFFNT4KKzxVNjFFQz4KKzxVNjFFRD4KKzxVNjFFRj4KKzxVNjIwMT4KKzxVNjIwMz4KKzxVNjIwND4KKzxVNjIwNz4KKzxVNjIxMz4KKzxVNjIxNT4KKzxVNjIxQz4KKzxVNjIyMD4KKzxVNjIyMj4KKzxVNjIyMz4KKzxVNjIyNz4KKzxVNjIyOT4KKzxVNjIyQj4KKzxVNjIzOT4KKzxVNjIzRD4KKzxVNjI0Mj4KKzxVNjI0Mz4KKzxVNjI0ND4KKzxVNjI0Nj4KKzxVNjI0Qz4KKzxVNjI1MD4KKzxVNjI1MT4KKzxVNjI1Mj4KKzxVNjI1ND4KKzxVNjI1Nj4KKzxVNjI1QT4KKzxVNjI1Qz4KKzxVNjI2ND4KKzxVNjI2RD4KKzxVNjI2Rj4KKzxVNjI3Mz4KKzxVNjI3QT4KKzxVNjI3RD4KKzxVNjI4RD4KKzxVNjI4RT4KKzxVNjI4Rj4KKzxVNjI5MD4KKzxVNjJBNj4KKzxVNjJBOD4KKzxVNjJCMz4KKzxVNjJCNj4KKzxVNjJCNz4KKzxVNjJCQT4KKzxVNjJCRT4KKzxVNjJCRj4KKzxVNjJDND4KKzxVNjJDRT4KKzxVNjJENT4KKzxVNjJENj4KKzxVNjJEQT4KKzxVNjJFQT4KKzxVNjJGMj4KKzxVNjJGND4KKzxVNjJGQz4KKzxVNjJGRD4KKzxVNjMwMz4KKzxVNjMwND4KKzxVNjMwQT4KKzxVNjMwQj4KKzxVNjMwRD4KKzxVNjMxMD4KKzxVNjMxMz4KKzxVNjMxNj4KKzxVNjMxOD4KKzxVNjMyOT4KKzxVNjMyQT4KKzxVNjMyRD4KKzxVNjMzNT4KKzxVNjMzNj4KKzxVNjMzOT4KKzxVNjMzQz4KKzxVNjM0MT4KKzxVNjM0Mj4KKzxVNjM0Mz4KKzxVNjM0ND4KKzxVNjM0Nj4KKzxVNjM0QT4KKzxVNjM0Qj4KKzxVNjM0RT4KKzxVNjM1Mj4KKzxVNjM1Mz4KKzxVNjM1ND4KKzxVNjM1OD4KKzxVNjM1Qj4KKzxVNjM2NT4KKzxVNjM2Nj4KKzxVNjM2Qz4KKzxVNjM2RD4KKzxVNjM3MT4KKzxVNjM3ND4KKzxVNjM3NT4KKzxVNjM3OD4KKzxVNjM3Qz4KKzxVNjM3RD4KKzxVNjM3Rj4KKzxVNjM4Mj4KKzxVNjM4ND4KKzxVNjM4Nz4KKzxVNjM4QT4KKzxVNjM5MD4KKzxVNjM5ND4KKzxVNjM5NT4KKzxVNjM5OT4KKzxVNjM5QT4KKzxVNjM5RT4KKzxVNjNBND4KKzxVNjNBNj4KKzxVNjNBRD4KKzxVNjNBRT4KKzxVNjNBRj4KKzxVNjNCRD4KKzxVNjNDMT4KKzxVNjNDNT4KKzxVNjNDOD4KKzxVNjNDRT4KKzxVNjNEMT4KKzxVNjNEMz4KKzxVNjNEND4KKzxVNjNENT4KKzxVNjNEQz4KKzxVNjNFMD4KKzxVNjNFNT4KKzxVNjNFQT4KKzxVNjNFQz4KKzxVNjNGMj4KKzxVNjNGMz4KKzxVNjNGNT4KKzxVNjNGOD4KKzxVNjNGOT4KKzxVNjQwOT4KKzxVNjQwQT4KKzxVNjQxMD4KKzxVNjQxMj4KKzxVNjQxND4KKzxVNjQxOD4KKzxVNjQxRT4KKzxVNjQyMD4KKzxVNjQyMj4KKzxVNjQyND4KKzxVNjQyNT4KKzxVNjQyOT4KKzxVNjQyQT4KKzxVNjQyRj4KKzxVNjQzMD4KKzxVNjQzNT4KKzxVNjQzRD4KKzxVNjQzRj4KKzxVNjQ0Qj4KKzxVNjQ0Rj4KKzxVNjQ1MT4KKzxVNjQ1Mj4KKzxVNjQ1Mz4KKzxVNjQ1ND4KKzxVNjQ1QT4KKzxVNjQ1Qj4KKzxVNjQ1Qz4KKzxVNjQ1RD4KKzxVNjQ1Rj4KKzxVNjQ2MD4KKzxVNjQ2MT4KKzxVNjQ2Mz4KKzxVNjQ2RD4KKzxVNjQ3Mz4KKzxVNjQ3ND4KKzxVNjQ3Qj4KKzxVNjQ3RD4KKzxVNjQ4NT4KKzxVNjQ4Nz4KKzxVNjQ4Rj4KKzxVNjQ5MD4KKzxVNjQ5MT4KKzxVNjQ5OD4KKzxVNjQ5OT4KKzxVNjQ5Qj4KKzxVNjQ5RD4KKzxVNjQ5Rj4KKzxVNjRBMT4KKzxVNjRBMz4KKzxVNjRBNj4KKzxVNjRBOD4KKzxVNjRBQz4KKzxVNjRCMz4KKzxVNjRCRD4KKzxVNjRCRT4KKzxVNjRCRj4KKzxVNjRDND4KKzxVNjRDOT4KKzxVNjRDQT4KKzxVNjRDQj4KKzxVNjRDQz4KKzxVNjRDRT4KKzxVNjREMD4KKzxVNjREMT4KKzxVNjRENT4KKzxVNjRENz4KKzxVNjRFND4KKzxVNjRFNT4KKzxVNjRFOT4KKzxVNjRFQT4KKzxVNjRFRD4KKzxVNjRGMD4KKzxVNjRGNT4KKzxVNjRGNz4KKzxVNjRGQj4KKzxVNjRGRj4KKzxVNjUwMT4KKzxVNjUwND4KKzxVNjUwOD4KKzxVNjUwOT4KKzxVNjUwQT4KKzxVNjUwRj4KKzxVNjUxMz4KKzxVNjUxND4KKzxVNjUxNj4KKzxVNjUxOT4KKzxVNjUxQj4KKzxVNjUxRT4KKzxVNjUxRj4KKzxVNjUyMj4KKzxVNjUyNj4KKzxVNjUyOT4KKzxVNjUyRT4KKzxVNjUzMT4KKzxVNjUzQT4KKzxVNjUzQz4KKzxVNjUzRD4KKzxVNjU0Mz4KKzxVNjU0Nz4KKzxVNjU0OT4KKzxVNjU1MD4KKzxVNjU1Mj4KKzxVNjU1ND4KKzxVNjU1Rj4KKzxVNjU2MD4KKzxVNjU2Nz4KKzxVNjU2Qj4KKzxVNjU3QT4KKzxVNjU3RD4KKzxVNjU4MT4KKzxVNjU4NT4KKzxVNjU4QT4KKzxVNjU5Mj4KKzxVNjU5NT4KKzxVNjU5OD4KKzxVNjU5RD4KKzxVNjVBMD4KKzxVNjVBMz4KKzxVNjVBNj4KKzxVNjVBRT4KKzxVNjVCMj4KKzxVNjVCMz4KKzxVNjVCND4KKzxVNjVCRj4KKzxVNjVDMj4KKzxVNjVDOD4KKzxVNjVDOT4KKzxVNjVDRT4KKzxVNjVEMD4KKzxVNjVEND4KKzxVNjVENj4KKzxVNjVEOD4KKzxVNjVERj4KKzxVNjVGMD4KKzxVNjVGMj4KKzxVNjVGND4KKzxVNjVGNT4KKzxVNjVGOT4KKzxVNjVGRT4KKzxVNjVGRj4KKzxVNjYwMD4KKzxVNjYwND4KKzxVNjYwOD4KKzxVNjYwOT4KKzxVNjYwRD4KKzxVNjYxMT4KKzxVNjYxMj4KKzxVNjYxNT4KKzxVNjYxNj4KKzxVNjYxRD4KKzxVNjYxRT4KKzxVNjYyMT4KKzxVNjYyMj4KKzxVNjYyMz4KKzxVNjYyND4KKzxVNjYyNj4KKzxVNjYyOT4KKzxVNjYyQT4KKzxVNjYyQj4KKzxVNjYyQz4KKzxVNjYyRT4KKzxVNjYzMD4KKzxVNjYzMT4KKzxVNjYzMz4KKzxVNjYzOT4KKzxVNjYzNz4KKzxVNjY0MD4KKzxVNjY0NT4KKzxVNjY0Nj4KKzxVNjY0QT4KKzxVNjY0Qz4KKzxVNjY1MT4KKzxVNjY0RT4KKzxVNjY1Nz4KKzxVNjY1OD4KKzxVNjY1OT4KKzxVNjY1Qj4KKzxVNjY1Qz4KKzxVNjY2MD4KKzxVNjY2MT4KKzxVNjZGQj4KKzxVNjY2QT4KKzxVNjY2Qj4KKzxVNjY2Qz4KKzxVNjY3RT4KKzxVNjY3Mz4KKzxVNjY3NT4KKzxVNjY3Rj4KKzxVNjY3Nz4KKzxVNjY3OD4KKzxVNjY3OT4KKzxVNjY3Qj4KKzxVNjY4MD4KKzxVNjY3Qz4KKzxVNjY4Qj4KKzxVNjY4Qz4KKzxVNjY4RD4KKzxVNjY5MD4KKzxVNjY5Mj4KKzxVNjY5OT4KKzxVNjY5QT4KKzxVNjY5Qj4KKzxVNjY5Qz4KKzxVNjY5Rj4KKzxVNjZBMD4KKzxVNjZBND4KKzxVNjZBRD4KKzxVNjZCMT4KKzxVNjZCMj4KKzxVNjZCNT4KKzxVNjZCQj4KKzxVNjZCRj4KKzxVNjZDMD4KKzxVNjZDMj4KKzxVNjZDMz4KKzxVNjZDOD4KKzxVNjZDQz4KKzxVNjZDRT4KKzxVNjZDRj4KKzxVNjZEND4KKzxVNjZEQj4KKzxVNjZERj4KKzxVNjZFOD4KKzxVNjZFQj4KKzxVNjZFQz4KKzxVNjZFRT4KKzxVNjZGQT4KKzxVNjcwNT4KKzxVNjcwNz4KKzxVNjcwRT4KKzxVNjcxMz4KKzxVNjcxOT4KKzxVNjcxQz4KKzxVNjcyMD4KKzxVNjcyMj4KKzxVNjczMz4KKzxVNjczRT4KKzxVNjc0NT4KKzxVNjc0Nz4KKzxVNjc0OD4KKzxVNjc0Qz4KKzxVNjc1ND4KKzxVNjc1NT4KKzxVNjc1RD4KKzxVNjc2Nj4KKzxVNjc2Qz4KKzxVNjc2RT4KKzxVNjc3ND4KKzxVNjc3Nj4KKzxVNjc3Qj4KKzxVNjc4MT4KKzxVNjc4ND4KKzxVNjc4RT4KKzxVNjc4Rj4KKzxVNjc5MT4KKzxVNjc5Mz4KKzxVNjc5Nj4KKzxVNjc5OD4KKzxVNjc5OT4KKzxVNjc5Qj4KKzxVNjdCMD4KKzxVNjdCMT4KKzxVNjdCMj4KKzxVNjdCNT4KKzxVNjdCQj4KKzxVNjdCQz4KKzxVNjdCRD4KKzxVNjdGOT4KKzxVNjdDMD4KKzxVNjdDMj4KKzxVNjdDMz4KKzxVNjdDNT4KKzxVNjdDOD4KKzxVNjdDOT4KKzxVNjdEMj4KKzxVNjdENz4KKzxVNjdEOT4KKzxVNjdEQz4KKzxVNjdFMT4KKzxVNjdFNj4KKzxVNjdGMD4KKzxVNjdGMj4KKzxVNjdGNj4KKzxVNjdGNz4KKzxVNjg1Mj4KKzxVNjgxND4KKzxVNjgxOT4KKzxVNjgxRD4KKzxVNjgxRj4KKzxVNjgyOD4KKzxVNjgyNz4KKzxVNjgyQz4KKzxVNjgyRD4KKzxVNjgyRj4KKzxVNjgzMD4KKzxVNjgzMT4KKzxVNjgzMz4KKzxVNjgzQj4KKzxVNjgzRj4KKzxVNjg0ND4KKzxVNjg0NT4KKzxVNjg0QT4KKzxVNjg0Qz4KKzxVNjg1NT4KKzxVNjg1Nz4KKzxVNjg1OD4KKzxVNjg1Qj4KKzxVNjg2Qj4KKzxVNjg2RT4KKzxVNjg2Rj4KKzxVNjg3MD4KKzxVNjg3MT4KKzxVNjg3Mj4KKzxVNjg3NT4KKzxVNjg3OT4KKzxVNjg3QT4KKzxVNjg3Qj4KKzxVNjg3Qz4KKzxVNjg4Mj4KKzxVNjg4ND4KKzxVNjg4Nj4KKzxVNjg4OD4KKzxVNjg5Nj4KKzxVNjg5OD4KKzxVNjg5QT4KKzxVNjg5Qz4KKzxVNjhBMT4KKzxVNjhBMz4KKzxVNjhBNT4KKzxVNjhBOT4KKzxVNjhBQT4KKzxVNjhBRT4KKzxVNjhCMj4KKzxVNjhCQj4KKzxVNjhDNT4KKzxVNjhDOD4KKzxVNjhDQz4KKzxVNjhDRj4KKzxVNjhEMD4KKzxVNjhEMT4KKzxVNjhEMz4KKzxVNjhENj4KKzxVNjhEOT4KKzxVNjhEQz4KKzxVNjhERD4KKzxVNjhFNT4KKzxVNjhFOD4KKzxVNjhFQT4KKzxVNjhFQj4KKzxVNjhFQz4KKzxVNjhFRD4KKzxVNjhGMD4KKzxVNjhGMT4KKzxVNjhGNT4KKzxVNjhGNj4KKzxVNjhGQj4KKzxVNjhGQz4KKzxVNjhGRD4KKzxVNjkwNj4KKzxVNjkwOT4KKzxVNjkwQT4KKzxVNjkxMD4KKzxVNjkxMT4KKzxVNjkxMz4KKzxVNjkxNj4KKzxVNjkxNz4KKzxVNjkzMT4KKzxVNjkzMz4KKzxVNjkzNT4KKzxVNjkzOD4KKzxVNjkzQj4KKzxVNjk0Mj4KKzxVNjk0NT4KKzxVNjk0OT4KKzxVNjk0RT4KKzxVNjk1Nz4KKzxVNjk1Qj4KKzxVNjk2Mz4KKzxVNjk2ND4KKzxVNjk2NT4KKzxVNjk2Nj4KKzxVNjk2OD4KKzxVNjk2OT4KKzxVNjk2Qz4KKzxVNjk3MD4KKzxVNjk3MT4KKzxVNjk3Mj4KKzxVNjk3QT4KKzxVNjk3Qj4KKzxVNjk3Rj4KKzxVNjk4MD4KKzxVNjk4RD4KKzxVNjk5Mj4KKzxVNjk5Nj4KKzxVNjk5OD4KKzxVNjlBMT4KKzxVNjlBNT4KKzxVNjlBNj4KKzxVNjlBOD4KKzxVNjlBQj4KKzxVNjlBRD4KKzxVNjlBRj4KKzxVNjlCNz4KKzxVNjlCOD4KKzxVNjlCQT4KKzxVNjlCQz4KKzxVNjlDNT4KKzxVNjlDOD4KKzxVNjlEMT4KKzxVNjlENj4KKzxVNjlENz4KKzxVNjlFMj4KKzxVNjlFNT4KKzxVNjlFRT4KKzxVNjlFRj4KKzxVNjlGMT4KKzxVNjlGMz4KKzxVNjlGNT4KKzxVNjlGRT4KKzxVNkEwMD4KKzxVNkEwMT4KKzxVNkEwMz4KKzxVNkEwRj4KKzxVNkExMT4KKzxVNkExNT4KKzxVNkExQT4KKzxVNkExRD4KKzxVNkEyMD4KKzxVNkEyND4KKzxVNkEyOD4KKzxVNkEzMD4KKzxVNkEzMj4KKzxVNkEzND4KKzxVNkEzNz4KKzxVNkEzQj4KKzxVNkEzRT4KKzxVNkEzRj4KKzxVNkE0NT4KKzxVNkE0Nj4KKzxVNkE0OT4KKzxVNkE0QT4KKzxVNkE0RT4KKzxVNkE1MD4KKzxVNkE1MT4KKzxVNkE1Mj4KKzxVNkE1NT4KKzxVNkE1Nj4KKzxVNkE1Qj4KKzxVNkE2ND4KKzxVNkE2Nz4KKzxVNkE2QT4KKzxVNkE3MT4KKzxVNkE3Mz4KKzxVNkE3RT4KKzxVNkE4MT4KKzxVNkE4Mz4KKzxVNkE4Nj4KKzxVNkE4Nz4KKzxVNkE4OT4KKzxVNkE4Qj4KKzxVNkE5MT4KKzxVNkE5Qj4KKzxVNkE5RD4KKzxVNkE5RT4KKzxVNkE5Rj4KKzxVNkFBNT4KKzxVNkFBQj4KKzxVNkFBRj4KKzxVNkFCMD4KKzxVNkFCMT4KKzxVNkFCND4KKzxVNkFCRD4KKzxVNkFCRT4KKzxVNkFCRj4KKzxVNkFDNj4KKzxVNkFDOT4KKzxVNkFDOD4KKzxVNkFDQz4KKzxVNkFEMD4KKzxVNkFEND4KKzxVNkFENT4KKzxVNkFENj4KKzxVNkFEQz4KKzxVNkFERD4KKzxVNkFFND4KKzxVNkFFNz4KKzxVNkFFQz4KKzxVNkFGMD4KKzxVNkFGMT4KKzxVNkFGMj4KKzxVNkFGQz4KKzxVNkFGRD4KKzxVNkIwMj4KKzxVNkIwMz4KKzxVNkIwNj4KKzxVNkIwNz4KKzxVNkIwOT4KKzxVNkIwRj4KKzxVNkIxMD4KKzxVNkIxMT4KKzxVNkIxNz4KKzxVNkIxQj4KKzxVNkIxRT4KKzxVNkIyND4KKzxVNkIyOD4KKzxVNkIyQj4KKzxVNkIyQz4KKzxVNkIyRj4KKzxVNkIzNT4KKzxVNkIzNj4KKzxVNkIzQj4KKzxVNkIzRj4KKzxVNkI0Nj4KKzxVNkI0QT4KKzxVNkI0RD4KKzxVNkI1Mj4KKzxVNkI1Nj4KKzxVNkI1OD4KKzxVNkI1RD4KKzxVNkI2MD4KKzxVNkI2Nz4KKzxVNkI2Qj4KKzxVNkI2RT4KKzxVNkI3MD4KKzxVNkI3NT4KKzxVNkI3RD4KKzxVNkI3RT4KKzxVNkI4Mj4KKzxVNkI4NT4KKzxVNkI5Nz4KKzxVNkI5Qj4KKzxVNkI5Rj4KKzxVNkJBMD4KKzxVNkJBMj4KKzxVNkJBMz4KKzxVNkJBOD4KKzxVNkJBOT4KKzxVNkJBQz4KKzxVNkJBRD4KKzxVNkJBRT4KKzxVNkJCMD4KKzxVNkJCOD4KKzxVNkJCOT4KKzxVNkJCRD4KKzxVNkJCRT4KKzxVNkJDMz4KKzxVNkJDND4KKzxVNkJDOT4KKzxVNkJDQz4KKzxVNkJENj4KKzxVNkJEQT4KKzxVNkJFMT4KKzxVNkJFMz4KKzxVNkJFNj4KKzxVNkJFNz4KKzxVNkJFRT4KKzxVNkJGMT4KKzxVNkJGNz4KKzxVNkJGOT4KKzxVNkJGRj4KKzxVNkMwMj4KKzxVNkMwND4KKzxVNkMwNT4KKzxVNkMwOT4KKzxVNkMwRD4KKzxVNkMwRT4KKzxVNkMxMD4KKzxVNkMxMj4KKzxVNkMxOT4KKzxVNkMxRj4KKzxVNkMyNj4KKzxVNkMyNz4KKzxVNkMyOD4KKzxVNkMyQz4KKzxVNkMyRT4KKzxVNkMzMz4KKzxVNkMzNT4KKzxVNkMzNj4KKzxVNkMzQT4KKzxVNkMzQj4KKzxVNkMzRj4KKzxVNkM0QT4KKzxVNkM0Qj4KKzxVNkM0RD4KKzxVNkM0Rj4KKzxVNkM1Mj4KKzxVNkM1ND4KKzxVNkM1OT4KKzxVNkM1Qj4KKzxVNkM1Qz4KKzxVNkM2Qj4KKzxVNkM2RD4KKzxVNkM2Rj4KKzxVNkM3ND4KKzxVNkM3Nj4KKzxVNkM3OD4KKzxVNkM3OT4KKzxVNkM3Qj4KKzxVNkM4NT4KKzxVNkM4Nj4KKzxVNkM4Nz4KKzxVNkM4OT4KKzxVNkM5ND4KKzxVNkM5NT4KKzxVNkM5Nz4KKzxVNkM5OD4KKzxVNkM5Qz4KKzxVNkM5Rj4KKzxVNkNCMD4KKzxVNkNCMj4KKzxVNkNCND4KKzxVNkNDMj4KKzxVNkNDNj4KKzxVNkNDRD4KKzxVNkNDRj4KKzxVNkNEMD4KKzxVNkNEMT4KKzxVNkNEMj4KKzxVNkNEND4KKzxVNkNENj4KKzxVNkNEQT4KKzxVNkNEQz4KKzxVNkNFMD4KKzxVNkNFNz4KKzxVNkNFOT4KKzxVNkNFQj4KKzxVNkNFQz4KKzxVNkNFRT4KKzxVNkNGMj4KKzxVNkNGND4KKzxVNkQwND4KKzxVNkQwNz4KKzxVNkQwQT4KKzxVNkQwRT4KKzxVNkQwRj4KKzxVNkQxMT4KKzxVNkQxMz4KKzxVNkQxQT4KKzxVNkQyNj4KKzxVNkQyNz4KKzxVNkQyOD4KKzxVNkM2Nz4KKzxVNkQyRT4KKzxVNkQyRj4KKzxVNkQzMT4KKzxVNkQzOT4KKzxVNkQzQz4KKzxVNkQzRj4KKzxVNkQ1Nz4KKzxVNkQ1RT4KKzxVNkQ1Rj4KKzxVNkQ2MT4KKzxVNkQ2NT4KKzxVNkQ2Nz4KKzxVNkQ2Rj4KKzxVNkQ3MD4KKzxVNkQ3Qz4KKzxVNkQ4Mj4KKzxVNkQ4Nz4KKzxVNkQ5MT4KKzxVNkQ5Mj4KKzxVNkQ5ND4KKzxVNkQ5Nj4KKzxVNkQ5Nz4KKzxVNkQ5OD4KKzxVNkRBQT4KKzxVNkRBQz4KKzxVNkRCND4KKzxVNkRCNz4KKzxVNkRCOT4KKzxVNkRCRD4KKzxVNkRCRj4KKzxVNkRDND4KKzxVNkRDOD4KKzxVNkRDQT4KKzxVNkRDRT4KKzxVNkRDRj4KKzxVNkRENj4KKzxVNkREQj4KKzxVNkRERD4KKzxVNkRERj4KKzxVNkRFMD4KKzxVNkRFMj4KKzxVNkRFNT4KKzxVNkRFOT4KKzxVNkRFRj4KKzxVNkRGMD4KKzxVNkRGND4KKzxVNkRGNj4KKzxVNkRGQz4KKzxVNkUwMD4KKzxVNkUwND4KKzxVNkUxRT4KKzxVNkUyMj4KKzxVNkUyNz4KKzxVNkUzMj4KKzxVNkUzNj4KKzxVNkUzOT4KKzxVNkUzQj4KKzxVNkUzQz4KKzxVNkU0ND4KKzxVNkU0NT4KKzxVNkU0OD4KKzxVNkU0OT4KKzxVNkU0Qj4KKzxVNkU0Rj4KKzxVNkU1MT4KKzxVNkU1Mj4KKzxVNkU1Mz4KKzxVNkU1ND4KKzxVNkU1Nz4KKzxVNkU1Qz4KKzxVNkU1RD4KKzxVNkU1RT4KKzxVNkU2Mj4KKzxVNkU2Mz4KKzxVNkU2OD4KKzxVNkU3Mz4KKzxVNkU3Qj4KKzxVNkU3RD4KKzxVNkU4RD4KKzxVNkU5Mz4KKzxVNkU5OT4KKzxVNkVBMD4KKzxVNkVBNz4KKzxVNkVBRD4KKzxVNkVBRT4KKzxVNkVCMT4KKzxVNkVCMz4KKzxVNkVCQj4KKzxVNkVCRj4KKzxVNkVDMD4KKzxVNkVDMT4KKzxVNkVDMz4KKzxVNkVDNz4KKzxVNkVDOD4KKzxVNkVDQT4KKzxVNkVDRD4KKzxVNkVDRT4KKzxVNkVDRj4KKzxVNkVFQj4KKzxVNkVFRD4KKzxVNkVFRT4KKzxVNkVGOT4KKzxVNkVGQj4KKzxVNkVGRD4KKzxVNkYwND4KKzxVNkYwOD4KKzxVNkYwQT4KKzxVNkYwQz4KKzxVNkYwRD4KKzxVNkYxNj4KKzxVNkYxOD4KKzxVNkYxQT4KKzxVNkYxQj4KKzxVNkYyNj4KKzxVNkYyOT4KKzxVNkYyQT4KKzxVNkYyRj4KKzxVNkYzMD4KKzxVNkYzMz4KKzxVNkYzNj4KKzxVNkYzQj4KKzxVNkYzQz4KKzxVNkYyRD4KKzxVNkY0Rj4KKzxVNkY1MT4KKzxVNkY1Mj4KKzxVNkY1Mz4KKzxVNkY1Nz4KKzxVNkY1OT4KKzxVNkY1QT4KKzxVNkY1RD4KKzxVNkY1RT4KKzxVNkY2MT4KKzxVNkY2Mj4KKzxVNkY2OD4KKzxVNkY2Qz4KKzxVNkY3RD4KKzxVNkY3RT4KKzxVNkY4Mz4KKzxVNkY4Nz4KKzxVNkY4OD4KKzxVNkY4Qj4KKzxVNkY4Qz4KKzxVNkY4RD4KKzxVNkY5MD4KKzxVNkY5Mj4KKzxVNkY5Mz4KKzxVNkY5ND4KKzxVNkY5Nj4KKzxVNkY5QT4KKzxVNkY5Rj4KKzxVNkZBMD4KKzxVNkZBNT4KKzxVNkZBNj4KKzxVNkZBNz4KKzxVNkZBOD4KKzxVNkZBRT4KKzxVNkZBRj4KKzxVNkZCMD4KKzxVNkZCNT4KKzxVNkZCNj4KKzxVNkZCQz4KKzxVNkZDNT4KKzxVNkZDNz4KKzxVNkZDOD4KKzxVNkZDQT4KKzxVNkZEQT4KKzxVNkZERT4KKzxVNkZFOD4KKzxVNkZFOT4KKzxVNkZGMD4KKzxVNkZGNT4KKzxVNkZGOT4KKzxVNkZGQz4KKzxVNkZGRD4KKzxVNzAwMD4KKzxVNzAwNT4KKzxVNzAwNj4KKzxVNzAwNz4KKzxVNzAwRD4KKzxVNzAxNz4KKzxVNzAyMD4KKzxVNzAyMz4KKzxVNzAyRj4KKzxVNzAzND4KKzxVNzAzNz4KKzxVNzAzOT4KKzxVNzAzQz4KKzxVNzA0Mz4KKzxVNzA0ND4KKzxVNzA0OD4KKzxVNzA0OT4KKzxVNzA0QT4KKzxVNzA0Qj4KKzxVNzA1ND4KKzxVNzA1NT4KKzxVNzA1RD4KKzxVNzA1RT4KKzxVNzA0RT4KKzxVNzA2ND4KKzxVNzA2NT4KKzxVNzA2Qz4KKzxVNzA2RT4KKzxVNzA3NT4KKzxVNzA3Nj4KKzxVNzA3RT4KKzxVNzA4MT4KKzxVNzA4NT4KKzxVNzA4Nj4KKzxVNzA5ND4KKzxVNzA5NT4KKzxVNzA5Nj4KKzxVNzA5Nz4KKzxVNzA5OD4KKzxVNzA5Qj4KKzxVNzBBND4KKzxVNzBBQj4KKzxVNzBCMD4KKzxVNzBCMT4KKzxVNzBCND4KKzxVNzBCNz4KKzxVNzBDQT4KKzxVNzBEMT4KKzxVNzBEMz4KKzxVNzBEND4KKzxVNzBENT4KKzxVNzBENj4KKzxVNzBEOD4KKzxVNzBEQz4KKzxVNzBFND4KKzxVNzBGQT4KKzxVNzEwMz4KKzxVNzEwND4KKzxVNzEwNT4KKzxVNzEwNj4KKzxVNzEwNz4KKzxVNzEwQj4KKzxVNzEwQz4KKzxVNzEwRj4KKzxVNzExRT4KKzxVNzEyMD4KKzxVNzEyQj4KKzxVNzEyRD4KKzxVNzEyRj4KKzxVNzEzMD4KKzxVNzEzMT4KKzxVNzEzOD4KKzxVNzE0MT4KKzxVNzE0NT4KKzxVNzE0Nj4KKzxVNzE0Nz4KKzxVNzE0QT4KKzxVNzE0Qj4KKzxVNzE1MD4KKzxVNzE1Mj4KKzxVNzE1Nz4KKzxVNzE1QT4KKzxVNzE1Qz4KKzxVNzE1RT4KKzxVNzE2MD4KKzxVNzE2OD4KKzxVNzE3OT4KKzxVNzE4MD4KKzxVNzE4NT4KKzxVNzE4Nz4KKzxVNzE4Qz4KKzxVNzE5Mj4KKzxVNzE5QT4KKzxVNzE5Qj4KKzxVNzFBMD4KKzxVNzFBMj4KKzxVNzFBRj4KKzxVNzFCMD4KKzxVNzFCMj4KKzxVNzFCMz4KKzxVNzFCQT4KKzxVNzFCRj4KKzxVNzFDMD4KKzxVNzFDMT4KKzxVNzFDND4KKzxVNzFDQj4KKzxVNzFDQz4KKzxVNzFEMz4KKzxVNzFENj4KKzxVNzFEOT4KKzxVNzFEQT4KKzxVNzFEQz4KKzxVNzFGOD4KKzxVNzFGRT4KKzxVNzIwMD4KKzxVNzIwNz4KKzxVNzIwOD4KKzxVNzIwOT4KKzxVNzIxMz4KKzxVNzIxNz4KKzxVNzIxQT4KKzxVNzIxRD4KKzxVNzIxRj4KKzxVNzIyND4KKzxVNzIyQj4KKzxVNzIyRj4KKzxVNzIzND4KKzxVNzIzOD4KKzxVNzIzOT4KKzxVNzI0MT4KKzxVNzI0Mj4KKzxVNzI0Mz4KKzxVNzI0NT4KKzxVNzI0RT4KKzxVNzI0Rj4KKzxVNzI1MD4KKzxVNzI1Mz4KKzxVNzI1NT4KKzxVNzI1Nj4KKzxVNzI1QT4KKzxVNzI1Qz4KKzxVNzI1RT4KKzxVNzI2MD4KKzxVNzI2Mz4KKzxVNzI2OD4KKzxVNzI2Qj4KKzxVNzI2RT4KKzxVNzI2Rj4KKzxVNzI3MT4KKzxVNzI3Nz4KKzxVNzI3OD4KKzxVNzI3Qj4KKzxVNzI3Qz4KKzxVNzI3Rj4KKzxVNzI4ND4KKzxVNzI4OT4KKzxVNzI4RD4KKzxVNzI4RT4KKzxVNzI5Mz4KKzxVNzI5Qj4KKzxVNzJBOD4KKzxVNzJBRD4KKzxVNzJBRT4KKzxVNzJCMT4KKzxVNzJCND4KKzxVNzJCRT4KKzxVNzJDMT4KKzxVNzJDNz4KKzxVNzJDOT4KKzxVNzJDQz4KKzxVNzJENT4KKzxVNzJENj4KKzxVNzJEOD4KKzxVNzJERj4KKzxVNzJFNT4KKzxVNzJGMz4KKzxVNzJGND4KKzxVNzJGQT4KKzxVNzJGQj4KKzxVNzJGRT4KKzxVNzMwMj4KKzxVNzMwND4KKzxVNzMwNT4KKzxVNzMwNz4KKzxVNzMwQj4KKzxVNzMwRD4KKzxVNzMxMj4KKzxVNzMxMz4KKzxVNzMxOD4KKzxVNzMxOT4KKzxVNzMxRT4KKzxVNzMyMj4KKzxVNzMyND4KKzxVNzMyNz4KKzxVNzMyOD4KKzxVNzMyQz4KKzxVNzMzMT4KKzxVNzMzMj4KKzxVNzMzNT4KKzxVNzMzQT4KKzxVNzMzQj4KKzxVNzMzRD4KKzxVNzM0Mz4KKzxVNzM0RD4KKzxVNzM1MD4KKzxVNzM1Mj4KKzxVNzM1Nj4KKzxVNzM1OD4KKzxVNzM1RD4KKzxVNzM1RT4KKzxVNzM1Rj4KKzxVNzM2MD4KKzxVNzM2Nj4KKzxVNzM2Nz4KKzxVNzM2OT4KKzxVNzM2Qj4KKzxVNzM2Qz4KKzxVNzM2RT4KKzxVNzM2Rj4KKzxVNzM3MT4KKzxVNzM3Nz4KKzxVNzM3OT4KKzxVNzM3Qz4KKzxVNzM4MD4KKzxVNzM4MT4KKzxVNzM4Mz4KKzxVNzM4NT4KKzxVNzM4Nj4KKzxVNzM4RT4KKzxVNzM5MD4KKzxVNzM5Mz4KKzxVNzM5NT4KKzxVNzM5Nz4KKzxVNzM5OD4KKzxVNzM5Qz4KKzxVNzM5RT4KKzxVNzM5Rj4KKzxVNzNBMD4KKzxVNzNBMj4KKzxVNzNBNT4KKzxVNzNBNj4KKzxVNzNBQT4KKzxVNzNBQj4KKzxVNzNBRD4KKzxVNzNCNT4KKzxVNzNCNz4KKzxVNzNCOT4KKzxVNzNCQz4KKzxVNzNCRD4KKzxVNzNCRj4KKzxVNzNDNT4KKzxVNzNDNj4KKzxVNzNDOT4KKzxVNzNDQj4KKzxVNzNDQz4KKzxVNzNDRj4KKzxVNzNEMj4KKzxVNzNEMz4KKzxVNzNENj4KKzxVNzNEOT4KKzxVNzNERD4KKzxVNzNFMT4KKzxVNzNFMz4KKzxVNzNFNj4KKzxVNzNFNz4KKzxVNzNFOT4KKzxVNzNGND4KKzxVNzNGNT4KKzxVNzNGNz4KKzxVNzNGOT4KKzxVNzNGQT4KKzxVNzNGQj4KKzxVNzNGRD4KKzxVNzNGRj4KKzxVNzQwMD4KKzxVNzQwMT4KKzxVNzQwND4KKzxVNzQwNz4KKzxVNzQwQT4KKzxVNzQxMT4KKzxVNzQxQT4KKzxVNzQxQj4KKzxVNzQyND4KKzxVNzQyNj4KKzxVNzQyOD4KKzxVNzQyOT4KKzxVNzQyQT4KKzxVNzQyQj4KKzxVNzQyQz4KKzxVNzQyRD4KKzxVNzQyRT4KKzxVNzQyRj4KKzxVNzQzMD4KKzxVNzQzMT4KKzxVNzQzOT4KKzxVNzQ0MD4KKzxVNzQ0Mz4KKzxVNzQ0ND4KKzxVNzQ0Nj4KKzxVNzQ0Nz4KKzxVNzQ0Qj4KKzxVNzQ0RD4KKzxVNzQ1MT4KKzxVNzQ1Mj4KKzxVNzQ1Nz4KKzxVNzQ1RD4KKzxVNzQ2Mj4KKzxVNzQ2Nj4KKzxVNzQ2Nz4KKzxVNzQ2OD4KKzxVNzQ2Qj4KKzxVNzQ2RD4KKzxVNzQ2RT4KKzxVNzQ3MT4KKzxVNzQ3Mj4KKzxVNzQ4MD4KKzxVNzQ4MT4KKzxVNzQ4NT4KKzxVNzQ4Nj4KKzxVNzQ4Nz4KKzxVNzQ4OT4KKzxVNzQ4Rj4KKzxVNzQ5MD4KKzxVNzQ5MT4KKzxVNzQ5Mj4KKzxVNzQ5OD4KKzxVNzQ5OT4KKzxVNzQ5QT4KKzxVNzQ5Qz4KKzxVNzQ5Rj4KKzxVNzRBMD4KKzxVNzRBMT4KKzxVNzRBMz4KKzxVNzRBNj4KKzxVNzRBOD4KKzxVNzRBOT4KKzxVNzRBQT4KKzxVNzRBQj4KKzxVNzRBRT4KKzxVNzRBRj4KKzxVNzRCMT4KKzxVNzRCMj4KKzxVNzRCNT4KKzxVNzRCOT4KKzxVNzRCQj4KKzxVNzRCRj4KKzxVNzRDOD4KKzxVNzRDOT4KKzxVNzRDQz4KKzxVNzREMD4KKzxVNzREMz4KKzxVNzREOD4KKzxVNzREQT4KKzxVNzREQj4KKzxVNzRERT4KKzxVNzRERj4KKzxVNzRFND4KKzxVNzRFOD4KKzxVNzRFQT4KKzxVNzRFQj4KKzxVNzRFRj4KKzxVNzRGND4KKzxVNzRGQT4KKzxVNzRGQj4KKzxVNzRGQz4KKzxVNzRGRj4KKzxVNzUwNj4KKzxVNzUxMj4KKzxVNzUxNj4KKzxVNzUxNz4KKzxVNzUyMD4KKzxVNzUyMT4KKzxVNzUyND4KKzxVNzUyNz4KKzxVNzUyOT4KKzxVNzUyQT4KKzxVNzUyRj4KKzxVNzUzNj4KKzxVNzUzOT4KKzxVNzUzRD4KKzxVNzUzRT4KKzxVNzUzRj4KKzxVNzU0MD4KKzxVNzU0Mz4KKzxVNzU0Nz4KKzxVNzU0OD4KKzxVNzU0RT4KKzxVNzU1MD4KKzxVNzU1Mj4KKzxVNzU1Nz4KKzxVNzU1RT4KKzxVNzU1Rj4KKzxVNzU2MT4KKzxVNzU2Rj4KKzxVNzU3MT4KKzxVNzU3OT4KKzxVNzU3QT4KKzxVNzU3Qj4KKzxVNzU3Qz4KKzxVNzU3RD4KKzxVNzU3RT4KKzxVNzU4MT4KKzxVNzU4NT4KKzxVNzU5MD4KKzxVNzU5Mj4KKzxVNzU5Mz4KKzxVNzU5NT4KKzxVNzU5OT4KKzxVNzU5Qz4KKzxVNzVBMj4KKzxVNzVBND4KKzxVNzVCND4KKzxVNzVCQT4KKzxVNzVCRj4KKzxVNzVDMD4KKzxVNzVDMT4KKzxVNzVDND4KKzxVNzVDNj4KKzxVNzVDQz4KKzxVNzVDRT4KKzxVNzVDRj4KKzxVNzVENz4KKzxVNzVEQz4KKzxVNzVERj4KKzxVNzVFMD4KKzxVNzVFMT4KKzxVNzVFND4KKzxVNzVFNz4KKzxVNzVFQz4KKzxVNzVFRT4KKzxVNzVFRj4KKzxVNzVGMT4KKzxVNzVGOT4KKzxVNzYwMD4KKzxVNzYwMj4KKzxVNzYwMz4KKzxVNzYwND4KKzxVNzYwNz4KKzxVNzYwOD4KKzxVNzYwQT4KKzxVNzYwQz4KKzxVNzYwRj4KKzxVNzYxMj4KKzxVNzYxMz4KKzxVNzYxNT4KKzxVNzYxNj4KKzxVNzYxOT4KKzxVNzYxQj4KKzxVNzYxQz4KKzxVNzYxRD4KKzxVNzYxRT4KKzxVNzYyMz4KKzxVNzYyNT4KKzxVNzYyNj4KKzxVNzYyOT4KKzxVNzYyRD4KKzxVNzYzMj4KKzxVNzYzMz4KKzxVNzYzNT4KKzxVNzYzOD4KKzxVNzYzOT4KKzxVNzYzQT4KKzxVNzYzQz4KKzxVNzY0QT4KKzxVNzY0MD4KKzxVNzY0MT4KKzxVNzY0Mz4KKzxVNzY0ND4KKzxVNzY0NT4KKzxVNzY0OT4KKzxVNzY0Qj4KKzxVNzY1NT4KKzxVNzY1OT4KKzxVNzY1Rj4KKzxVNzY2ND4KKzxVNzY2NT4KKzxVNzY2RD4KKzxVNzY2RT4KKzxVNzY2Rj4KKzxVNzY3MT4KKzxVNzY3ND4KKzxVNzY4MT4KKzxVNzY4NT4KKzxVNzY4Qz4KKzxVNzY4RD4KKzxVNzY5NT4KKzxVNzY5Qj4KKzxVNzY5Qz4KKzxVNzY5RD4KKzxVNzY5Rj4KKzxVNzZBMD4KKzxVNzZBMj4KKzxVNzZBMz4KKzxVNzZBND4KKzxVNzZBNT4KKzxVNzZBNj4KKzxVNzZBNz4KKzxVNzZBOD4KKzxVNzZBQT4KKzxVNzZBRD4KKzxVNzZCRD4KKzxVNzZDMT4KKzxVNzZDNT4KKzxVNzZDOT4KKzxVNzZDQj4KKzxVNzZDQz4KKzxVNzZDRT4KKzxVNzZEND4KKzxVNzZEOT4KKzxVNzZFMD4KKzxVNzZFNj4KKzxVNzZFOD4KKzxVNzZFQz4KKzxVNzZGMD4KKzxVNzZGMT4KKzxVNzZGNj4KKzxVNzZGOT4KKzxVNzZGQz4KKzxVNzcwMD4KKzxVNzcwNj4KKzxVNzcwQT4KKzxVNzcwRT4KKzxVNzcxMj4KKzxVNzcxND4KKzxVNzcxNT4KKzxVNzcxNz4KKzxVNzcxOT4KKzxVNzcxQT4KKzxVNzcxQz4KKzxVNzcyMj4KKzxVNzcyOD4KKzxVNzcyRD4KKzxVNzcyRT4KKzxVNzcyRj4KKzxVNzczND4KKzxVNzczNT4KKzxVNzczNj4KKzxVNzczOT4KKzxVNzczRD4KKzxVNzczRT4KKzxVNzc0Mj4KKzxVNzc0NT4KKzxVNzc0Nj4KKzxVNzc0QT4KKzxVNzc0RD4KKzxVNzc0RT4KKzxVNzc0Rj4KKzxVNzc1Mj4KKzxVNzc1Nj4KKzxVNzc1Nz4KKzxVNzc1Qz4KKzxVNzc1RT4KKzxVNzc1Rj4KKzxVNzc2MD4KKzxVNzc2Mj4KKzxVNzc2ND4KKzxVNzc2Nz4KKzxVNzc2QT4KKzxVNzc2Qz4KKzxVNzc3MD4KKzxVNzc3Mj4KKzxVNzc3Mz4KKzxVNzc3ND4KKzxVNzc3QT4KKzxVNzc3RD4KKzxVNzc4MD4KKzxVNzc4ND4KKzxVNzc4Qz4KKzxVNzc4RD4KKzxVNzc5ND4KKzxVNzc5NT4KKzxVNzc5Nj4KKzxVNzc5QT4KKzxVNzc5Rj4KKzxVNzdBMj4KKzxVNzdBNz4KKzxVNzdBQT4KKzxVNzdBRT4KKzxVNzdBRj4KKzxVNzdCMT4KKzxVNzdCNT4KKzxVNzdCRT4KKzxVNzdDMz4KKzxVNzdDOT4KKzxVNzdEMT4KKzxVNzdEMj4KKzxVNzdENT4KKzxVNzdEOT4KKzxVNzdERT4KKzxVNzdERj4KKzxVNzdFMD4KKzxVNzdFND4KKzxVNzdFNj4KKzxVNzdFQT4KKzxVNzdFQz4KKzxVNzdGMD4KKzxVNzdGMT4KKzxVNzdGND4KKzxVNzdGOD4KKzxVNzdGQj4KKzxVNzgwNT4KKzxVNzgwNj4KKzxVNzgwOT4KKzxVNzgwRD4KKzxVNzgwRT4KKzxVNzgxMT4KKzxVNzgxRD4KKzxVNzgyMT4KKzxVNzgyMj4KKzxVNzgyMz4KKzxVNzgyRD4KKzxVNzgyRT4KKzxVNzgzMD4KKzxVNzgzNT4KKzxVNzgzNz4KKzxVNzg0Mz4KKzxVNzg0ND4KKzxVNzg0Nz4KKzxVNzg0OD4KKzxVNzg0Qz4KKzxVNzg0RT4KKzxVNzg1Mj4KKzxVNzg1Qz4KKzxVNzg1RT4KKzxVNzg2MD4KKzxVNzg2MT4KKzxVNzg2Mz4KKzxVNzg2ND4KKzxVNzg2OD4KKzxVNzg2QT4KKzxVNzg2RT4KKzxVNzg3QT4KKzxVNzg3RT4KKzxVNzg4QT4KKzxVNzg4Rj4KKzxVNzg5ND4KKzxVNzg5OD4KKzxVNzhBMT4KKzxVNzg5RD4KKzxVNzg5RT4KKzxVNzg5Rj4KKzxVNzhBND4KKzxVNzhBOD4KKzxVNzhBQz4KKzxVNzhBRD4KKzxVNzhCMD4KKzxVNzhCMT4KKzxVNzhCMj4KKzxVNzhCMz4KKzxVNzhCQj4KKzxVNzhCRD4KKzxVNzhCRj4KKzxVNzhDNz4KKzxVNzhDOD4KKzxVNzhDOT4KKzxVNzhDQz4KKzxVNzhDRT4KKzxVNzhEMj4KKzxVNzhEMz4KKzxVNzhENT4KKzxVNzhENj4KKzxVNzhFND4KKzxVNzhEQj4KKzxVNzhERj4KKzxVNzhFMD4KKzxVNzhFMT4KKzxVNzhFNj4KKzxVNzhFQT4KKzxVNzhGMj4KKzxVNzhGMz4KKzxVNzkwMD4KKzxVNzhGNj4KKzxVNzhGNz4KKzxVNzhGQT4KKzxVNzhGQj4KKzxVNzhGRj4KKzxVNzkwNj4KKzxVNzkwQz4KKzxVNzkxMD4KKzxVNzkxQT4KKzxVNzkxQz4KKzxVNzkxRT4KKzxVNzkxRj4KKzxVNzkyMD4KKzxVNzkyNT4KKzxVNzkyNz4KKzxVNzkyOT4KKzxVNzkyRD4KKzxVNzkzMT4KKzxVNzkzND4KKzxVNzkzNT4KKzxVNzkzQj4KKzxVNzkzRD4KKzxVNzkzRj4KKzxVNzk0ND4KKzxVNzk0NT4KKzxVNzk0Nj4KKzxVNzk0QT4KKzxVNzk0Qj4KKzxVNzk0Rj4KKzxVNzk1MT4KKzxVNzk1ND4KKzxVNzk1OD4KKzxVNzk1Qj4KKzxVNzk1Qz4KKzxVNzk2Nz4KKzxVNzk2OT4KKzxVNzk2Qj4KKzxVNzk3Mj4KKzxVNzk3OT4KKzxVNzk3Qj4KKzxVNzk3Qz4KKzxVNzk3RT4KKzxVNzk4Qj4KKzxVNzk4Qz4KKzxVNzk5MT4KKzxVNzk5Mz4KKzxVNzk5ND4KKzxVNzk5NT4KKzxVNzk5Nj4KKzxVNzk5OD4KKzxVNzk5Qj4KKzxVNzk5Qz4KKzxVNzlBMT4KKzxVNzlBOD4KKzxVNzlBOT4KKzxVNzlBQj4KKzxVNzlBRj4KKzxVNzlCMT4KKzxVNzlCND4KKzxVNzlCOD4KKzxVNzlCQj4KKzxVNzlDMj4KKzxVNzlDND4KKzxVNzlDNz4KKzxVNzlDOD4KKzxVNzlDQT4KKzxVNzlDRj4KKzxVNzlEND4KKzxVNzlENj4KKzxVNzlEQT4KKzxVNzlERD4KKzxVNzlERT4KKzxVNzlFMD4KKzxVNzlFMj4KKzxVNzlFNT4KKzxVNzlFQT4KKzxVNzlFQj4KKzxVNzlFRD4KKzxVNzlGMT4KKzxVNzlGOD4KKzxVNzlGQz4KKzxVN0EwMj4KKzxVN0EwMz4KKzxVN0EwNz4KKzxVN0EwOT4KKzxVN0EwQT4KKzxVN0EwQz4KKzxVN0ExMT4KKzxVN0ExNT4KKzxVN0ExQj4KKzxVN0ExRT4KKzxVN0EyMT4KKzxVN0EyNz4KKzxVN0EyQj4KKzxVN0EyRD4KKzxVN0EyRj4KKzxVN0EzMD4KKzxVN0EzND4KKzxVN0EzNT4KKzxVN0EzOD4KKzxVN0EzOT4KKzxVN0EzQT4KKzxVN0E0ND4KKzxVN0E0NT4KKzxVN0E0Nz4KKzxVN0E0OD4KKzxVN0E0Qz4KKzxVN0E1NT4KKzxVN0E1Nj4KKzxVN0E1OT4KKzxVN0E1Qz4KKzxVN0E1RD4KKzxVN0E1Rj4KKzxVN0E2MD4KKzxVN0E2NT4KKzxVN0E2Nz4KKzxVN0E2QT4KKzxVN0E2RD4KKzxVN0E3NT4KKzxVN0E3OD4KKzxVN0E3RT4KKzxVN0E4MD4KKzxVN0E4Mj4KKzxVN0E4NT4KKzxVN0E4Nj4KKzxVN0E4QT4KKzxVN0E4Qj4KKzxVN0E5MD4KKzxVN0E5MT4KKzxVN0E5ND4KKzxVN0E5RT4KKzxVN0FBMD4KKzxVN0FBMz4KKzxVN0FBQz4KKzxVN0FCMz4KKzxVN0FCNT4KKzxVN0FCOT4KKzxVN0FCQj4KKzxVN0FCQz4KKzxVN0FDNj4KKzxVN0FDOT4KKzxVN0FDQz4KKzxVN0FDRT4KKzxVN0FEMT4KKzxVN0FEQj4KKzxVN0FFOD4KKzxVN0FFOT4KKzxVN0FFQj4KKzxVN0FFQz4KKzxVN0FGMT4KKzxVN0FGND4KKzxVN0FGQj4KKzxVN0FGRD4KKzxVN0FGRT4KKzxVN0IwNz4KKzxVN0IxND4KKzxVN0IxRj4KKzxVN0IyMz4KKzxVN0IyNz4KKzxVN0IyOT4KKzxVN0IyQT4KKzxVN0IyQj4KKzxVN0IyRD4KKzxVN0IyRT4KKzxVN0IyRj4KKzxVN0IzMD4KKzxVN0IzMT4KKzxVN0IzND4KKzxVN0IzRD4KKzxVN0IzRj4KKzxVN0I0MD4KKzxVN0I0MT4KKzxVN0I0Nz4KKzxVN0I0RT4KKzxVN0I1NT4KKzxVN0I2MD4KKzxVN0I2ND4KKzxVN0I2Nj4KKzxVN0I2OT4KKzxVN0I2QT4KKzxVN0I2RD4KKzxVN0I2Rj4KKzxVN0I3Mj4KKzxVN0I3Mz4KKzxVN0I3Nz4KKzxVN0I4ND4KKzxVN0I4OT4KKzxVN0I4RT4KKzxVN0I5MD4KKzxVN0I5MT4KKzxVN0I5Nj4KKzxVN0I5Qj4KKzxVN0I5RT4KKzxVN0JBMD4KKzxVN0JBNT4KKzxVN0JBQz4KKzxVN0JBRj4KKzxVN0JCMD4KKzxVN0JCMj4KKzxVN0JCNT4KKzxVN0JCNj4KKzxVN0JCQT4KKzxVN0JCQj4KKzxVN0JCQz4KKzxVN0JCRD4KKzxVN0JDMj4KKzxVN0JDNT4KKzxVN0JDOD4KKzxVN0JDQT4KKzxVN0JEND4KKzxVN0JENj4KKzxVN0JENz4KKzxVN0JEOT4KKzxVN0JEQT4KKzxVN0JEQj4KKzxVN0JFOD4KKzxVN0JFQT4KKzxVN0JGMj4KKzxVN0JGND4KKzxVN0JGNT4KKzxVN0JGOD4KKzxVN0JGOT4KKzxVN0JGQT4KKzxVN0JGQz4KKzxVN0JGRT4KKzxVN0MwMT4KKzxVN0MwMj4KKzxVN0MwMz4KKzxVN0MwND4KKzxVN0MwNj4KKzxVN0MwOT4KKzxVN0MwQj4KKzxVN0MwQz4KKzxVN0MwRT4KKzxVN0MwRj4KKzxVN0MxOT4KKzxVN0MxQj4KKzxVN0MyMD4KKzxVN0MyNT4KKzxVN0MyNj4KKzxVN0MyOD4KKzxVN0MyQz4KKzxVN0MzMT4KKzxVN0MzMz4KKzxVN0MzND4KKzxVN0MzNj4KKzxVN0MzOT4KKzxVN0MzQT4KKzxVN0M0Nj4KKzxVN0M0QT4KKzxVN0M1NT4KKzxVN0M1MT4KKzxVN0M1Mj4KKzxVN0M1Mz4KKzxVN0M1OT4KKzxVN0M1QT4KKzxVN0M1Qj4KKzxVN0M1Qz4KKzxVN0M1RD4KKzxVN0M1RT4KKzxVN0M2MT4KKzxVN0M2Mz4KKzxVN0M2Nz4KKzxVN0M2OT4KKzxVN0M2RD4KKzxVN0M2RT4KKzxVN0M3MD4KKzxVN0M3Mj4KKzxVN0M3OT4KKzxVN0M3Qz4KKzxVN0M3RD4KKzxVN0M4Nj4KKzxVN0M4Nz4KKzxVN0M4Rj4KKzxVN0M5ND4KKzxVN0M5RT4KKzxVN0NBMD4KKzxVN0NBNj4KKzxVN0NCMD4KKzxVN0NCNj4KKzxVN0NCNz4KKzxVN0NCQT4KKzxVN0NCQj4KKzxVN0NCQz4KKzxVN0NCRj4KKzxVN0NDND4KKzxVN0NDNz4KKzxVN0NDOD4KKzxVN0NDOT4KKzxVN0NDRD4KKzxVN0NDRj4KKzxVN0NEMz4KKzxVN0NEND4KKzxVN0NENT4KKzxVN0NENz4KKzxVN0NEOT4KKzxVN0NEQT4KKzxVN0NERD4KKzxVN0NFNj4KKzxVN0NFOT4KKzxVN0NFQj4KKzxVN0NGNT4KKzxVN0QwMz4KKzxVN0QwNz4KKzxVN0QwOD4KKzxVN0QwOT4KKzxVN0QwRj4KKzxVN0QxMT4KKzxVN0QxMj4KKzxVN0QxMz4KKzxVN0QxNj4KKzxVN0QxRD4KKzxVN0QxRT4KKzxVN0QyMz4KKzxVN0QyNj4KKzxVN0QyQT4KKzxVN0QyRD4KKzxVN0QzMT4KKzxVN0QzQz4KKzxVN0QzRD4KKzxVN0QzRT4KKzxVN0Q0MD4KKzxVN0Q0MT4KKzxVN0Q0Nz4KKzxVN0Q0OD4KKzxVN0Q0RD4KKzxVN0Q1MT4KKzxVN0Q1Mz4KKzxVN0Q1Nz4KKzxVN0Q1OT4KKzxVN0Q1QT4KKzxVN0Q1Qz4KKzxVN0Q1RD4KKzxVN0Q2NT4KKzxVN0Q2Nz4KKzxVN0Q2QT4KKzxVN0Q3MD4KKzxVN0Q3OD4KKzxVN0Q3QT4KKzxVN0Q3Qj4KKzxVN0Q3Rj4KKzxVN0Q4MT4KKzxVN0Q4Mj4KKzxVN0Q4Mz4KKzxVN0Q4NT4KKzxVN0Q4Nj4KKzxVN0Q4OD4KKzxVN0Q4Qj4KKzxVN0Q4Qz4KKzxVN0Q4RD4KKzxVN0Q5MT4KKzxVN0Q5Nj4KKzxVN0Q5Nz4KKzxVN0Q5RD4KKzxVN0Q5RT4KKzxVN0RBNj4KKzxVN0RBNz4KKzxVN0RBQT4KKzxVN0RCMz4KKzxVN0RCNj4KKzxVN0RCNz4KKzxVN0RCOT4KKzxVN0RDMj4KKzxVN0RDMz4KKzxVN0RDND4KKzxVN0RDNT4KKzxVN0RDNj4KKzxVN0RDQz4KKzxVN0RDRD4KKzxVN0RDRT4KKzxVN0RENz4KKzxVN0REOT4KKzxVN0UwMD4KKzxVN0RFMj4KKzxVN0RFNT4KKzxVN0RFNj4KKzxVN0RFQT4KKzxVN0RFQj4KKzxVN0RFRD4KKzxVN0RGMT4KKzxVN0RGNT4KKzxVN0RGNj4KKzxVN0RGOT4KKzxVN0RGQT4KKzxVN0UwOD4KKzxVN0UxMD4KKzxVN0UxMT4KKzxVN0UxNT4KKzxVN0UxNz4KKzxVN0UxQz4KKzxVN0UxRD4KKzxVN0UyMD4KKzxVN0UyNz4KKzxVN0UyOD4KKzxVN0UyQz4KKzxVN0UyRD4KKzxVN0UyRj4KKzxVN0UzMz4KKzxVN0UzNj4KKzxVN0UzRj4KKzxVN0U0ND4KKzxVN0U0NT4KKzxVN0U0Nz4KKzxVN0U0RT4KKzxVN0U1MD4KKzxVN0U1Mj4KKzxVN0U1OD4KKzxVN0U1Rj4KKzxVN0U2MT4KKzxVN0U2Mj4KKzxVN0U2NT4KKzxVN0U2Qj4KKzxVN0U2RT4KKzxVN0U2Rj4KKzxVN0U3Mz4KKzxVN0U3OD4KKzxVN0U3RT4KKzxVN0U4MT4KKzxVN0U4Nj4KKzxVN0U4Nz4KKzxVN0U4QT4KKzxVN0U4RD4KKzxVN0U5MT4KKzxVN0U5NT4KKzxVN0U5OD4KKzxVN0U5QT4KKzxVN0U5RD4KKzxVN0U5RT4KKzxVN0YzQz4KKzxVN0YzQj4KKzxVN0YzRD4KKzxVN0YzRT4KKzxVN0YzRj4KKzxVN0Y0Mz4KKzxVN0Y0ND4KKzxVN0Y0Nz4KKzxVN0Y0Rj4KKzxVN0Y1Mj4KKzxVN0Y1Mz4KKzxVN0Y1Qj4KKzxVN0Y1Qz4KKzxVN0Y1RD4KKzxVN0Y2MT4KKzxVN0Y2Mz4KKzxVN0Y2ND4KKzxVN0Y2NT4KKzxVN0Y2Nj4KKzxVN0Y2RD4KKzxVN0Y3MT4KKzxVN0Y3RD4KKzxVN0Y3RT4KKzxVN0Y3Rj4KKzxVN0Y4MD4KKzxVN0Y4Qj4KKzxVN0Y4RD4KKzxVN0Y4Rj4KKzxVN0Y5MD4KKzxVN0Y5MT4KKzxVN0Y5Nj4KKzxVN0Y5Nz4KKzxVN0Y5Qz4KKzxVN0ZBMT4KKzxVN0ZBMj4KKzxVN0ZBNj4KKzxVN0ZBQT4KKzxVN0ZBRD4KKzxVN0ZCND4KKzxVN0ZCQz4KKzxVN0ZCRj4KKzxVN0ZDMD4KKzxVN0ZDMz4KKzxVN0ZDOD4KKzxVN0ZDRT4KKzxVN0ZDRj4KKzxVN0ZEQj4KKzxVN0ZERj4KKzxVN0ZFMz4KKzxVN0ZFNT4KKzxVN0ZFOD4KKzxVN0ZFQz4KKzxVN0ZFRT4KKzxVN0ZFRj4KKzxVN0ZGMj4KKzxVN0ZGQT4KKzxVN0ZGRD4KKzxVN0ZGRT4KKzxVN0ZGRj4KKzxVODAwNz4KKzxVODAwOD4KKzxVODAwQT4KKzxVODAwRD4KKzxVODAwRT4KKzxVODAwRj4KKzxVODAxMT4KKzxVODAxMz4KKzxVODAxND4KKzxVODAxNj4KKzxVODAxRD4KKzxVODAxRT4KKzxVODAxRj4KKzxVODAyMD4KKzxVODAyND4KKzxVODAyNj4KKzxVODAyQz4KKzxVODAyRT4KKzxVODAzMD4KKzxVODAzND4KKzxVODAzNT4KKzxVODAzNz4KKzxVODAzOT4KKzxVODAzQT4KKzxVODAzQz4KKzxVODAzRT4KKzxVODA0MD4KKzxVODA0ND4KKzxVODA2MD4KKzxVODA2ND4KKzxVODA2Nj4KKzxVODA2RD4KKzxVODA3MT4KKzxVODA3NT4KKzxVODA4MT4KKzxVODA4OD4KKzxVODA4RT4KKzxVODA5Qz4KKzxVODA5RT4KKzxVODBBNj4KKzxVODBBNz4KKzxVODBBQj4KKzxVODBCOD4KKzxVODBCOT4KKzxVODBDOD4KKzxVODBDRD4KKzxVODBDRj4KKzxVODBEMj4KKzxVODBEND4KKzxVODBENT4KKzxVODBENz4KKzxVODBEOD4KKzxVODBFMD4KKzxVODBFRD4KKzxVODBFRT4KKzxVODBGMD4KKzxVODBGMj4KKzxVODBGMz4KKzxVODBGNj4KKzxVODBGOT4KKzxVODBGQT4KKzxVODBGRT4KKzxVODEwMz4KKzxVODEwQj4KKzxVODExNj4KKzxVODExNz4KKzxVODExOD4KKzxVODExQz4KKzxVODExRT4KKzxVODEyMD4KKzxVODEyND4KKzxVODEyNz4KKzxVODEyQz4KKzxVODEzMD4KKzxVODEzNT4KKzxVODEzQT4KKzxVODEzQz4KKzxVODE0NT4KKzxVODE0Nz4KKzxVODE0QT4KKzxVODE0Qz4KKzxVODE1Mj4KKzxVODE1Nz4KKzxVODE2MD4KKzxVODE2MT4KKzxVODE2Nz4KKzxVODE2OD4KKzxVODE2OT4KKzxVODE2RD4KKzxVODE2Rj4KKzxVODE3Nz4KKzxVODE4MT4KKzxVODE5MD4KKzxVODE4ND4KKzxVODE4NT4KKzxVODE4Nj4KKzxVODE4Qj4KKzxVODE4RT4KKzxVODE5Nj4KKzxVODE5OD4KKzxVODE5Qj4KKzxVODE5RT4KKzxVODFBMj4KKzxVODFBRT4KKzxVODFCMj4KKzxVODFCND4KKzxVODFCQj4KKzxVODFDQj4KKzxVODFDMz4KKzxVODFDNT4KKzxVODFDQT4KKzxVODFDRT4KKzxVODFDRj4KKzxVODFENT4KKzxVODFENz4KKzxVODFEQj4KKzxVODFERD4KKzxVODFERT4KKzxVODFFMT4KKzxVODFFND4KKzxVODFFQj4KKzxVODFFQz4KKzxVODFGMD4KKzxVODFGMT4KKzxVODFGMj4KKzxVODFGNT4KKzxVODFGNj4KKzxVODFGOD4KKzxVODFGOT4KKzxVODFGRD4KKzxVODFGRj4KKzxVODIwMD4KKzxVODIwMz4KKzxVODIwRj4KKzxVODIxMz4KKzxVODIxND4KKzxVODIxOT4KKzxVODIxQT4KKzxVODIxRD4KKzxVODIyMT4KKzxVODIyMj4KKzxVODIyOD4KKzxVODIzMj4KKzxVODIzND4KKzxVODIzQT4KKzxVODI0Mz4KKzxVODI0ND4KKzxVODI0NT4KKzxVODI0Nj4KKzxVODI0Qj4KKzxVODI0RT4KKzxVODI0Rj4KKzxVODI1MT4KKzxVODI1Nj4KKzxVODI1Qz4KKzxVODI2MD4KKzxVODI2Mz4KKzxVODI2Nz4KKzxVODI2RD4KKzxVODI3ND4KKzxVODI3Qj4KKzxVODI3RD4KKzxVODI3Rj4KKzxVODI4MD4KKzxVODI4MT4KKzxVODI4Mz4KKzxVODI4ND4KKzxVODI4Nz4KKzxVODI4OT4KKzxVODI4QT4KKzxVODI4RT4KKzxVODI5MT4KKzxVODI5ND4KKzxVODI5Nj4KKzxVODI5OD4KKzxVODI5QT4KKzxVODI5Qj4KKzxVODJBMD4KKzxVODJBMT4KKzxVODJBMz4KKzxVODJBND4KKzxVODJBNz4KKzxVODJBOD4KKzxVODJBOT4KKzxVODJBQT4KKzxVODJBRT4KKzxVODJCMD4KKzxVODJCMj4KKzxVODJCND4KKzxVODJCNz4KKzxVODJCQT4KKzxVODJCQz4KKzxVODJCRT4KKzxVODJCRj4KKzxVODJDNj4KKzxVODJEMD4KKzxVODJENT4KKzxVODJEQT4KKzxVODJFMD4KKzxVODJFMj4KKzxVODJFND4KKzxVODJFOD4KKzxVODJFQT4KKzxVODJFRD4KKzxVODJFRj4KKzxVODJGNj4KKzxVODJGNz4KKzxVODJGRD4KKzxVODJGRT4KKzxVODMwMD4KKzxVODMwMT4KKzxVODMwNz4KKzxVODMwOD4KKzxVODMwQT4KKzxVODMwQj4KKzxVODM1ND4KKzxVODMxQj4KKzxVODMxRD4KKzxVODMxRT4KKzxVODMxRj4KKzxVODMyMT4KKzxVODMyMj4KKzxVODMyQz4KKzxVODMyRD4KKzxVODMyRT4KKzxVODMzMD4KKzxVODMzMz4KKzxVODMzNz4KKzxVODMzQT4KKzxVODMzQz4KKzxVODMzRD4KKzxVODM0Mj4KKzxVODM0Mz4KKzxVODM0ND4KKzxVODM0Nz4KKzxVODM0RD4KKzxVODM0RT4KKzxVODM1MT4KKzxVODM1NT4KKzxVODM1Nj4KKzxVODM1Nz4KKzxVODM3MD4KKzxVODM3OD4KKzxVODM3RD4KKzxVODM3Rj4KKzxVODM4MD4KKzxVODM4Mj4KKzxVODM4ND4KKzxVODM4Nj4KKzxVODM4RD4KKzxVODM5Mj4KKzxVODM5ND4KKzxVODM5NT4KKzxVODM5OD4KKzxVODM5OT4KKzxVODM5Qj4KKzxVODM5Qz4KKzxVODM5RD4KKzxVODNBNj4KKzxVODNBNz4KKzxVODNBOT4KKzxVODNBQz4KKzxVODNCRT4KKzxVODNCRj4KKzxVODNDMD4KKzxVODNDNz4KKzxVODNDOT4KKzxVODNDRj4KKzxVODNEMD4KKzxVODNEMT4KKzxVODNEND4KKzxVODNERD4KKzxVODM1Mz4KKzxVODNFOD4KKzxVODNFQT4KKzxVODNGNj4KKzxVODNGOD4KKzxVODNGOT4KKzxVODNGQz4KKzxVODQwMT4KKzxVODQwNj4KKzxVODQwQT4KKzxVODQwRj4KKzxVODQxMT4KKzxVODQxNT4KKzxVODQxOT4KKzxVODNBRD4KKzxVODQyRj4KKzxVODQzOT4KKzxVODQ0NT4KKzxVODQ0Nz4KKzxVODQ0OD4KKzxVODQ0QT4KKzxVODQ0RD4KKzxVODQ0Rj4KKzxVODQ1MT4KKzxVODQ1Mj4KKzxVODQ1Nj4KKzxVODQ1OD4KKzxVODQ1OT4KKzxVODQ1QT4KKzxVODQ1Qz4KKzxVODQ2MD4KKzxVODQ2ND4KKzxVODQ2NT4KKzxVODQ2Nz4KKzxVODQ2QT4KKzxVODQ3MD4KKzxVODQ3Mz4KKzxVODQ3ND4KKzxVODQ3Nj4KKzxVODQ3OD4KKzxVODQ3Qz4KKzxVODQ3RD4KKzxVODQ4MT4KKzxVODQ4NT4KKzxVODQ5Mj4KKzxVODQ5Mz4KKzxVODQ5NT4KKzxVODQ5RT4KKzxVODRBNj4KKzxVODRBOD4KKzxVODRBOT4KKzxVODRBQT4KKzxVODRBRj4KKzxVODRCMT4KKzxVODRCND4KKzxVODRCQT4KKzxVODRCRD4KKzxVODRCRT4KKzxVODRDMD4KKzxVODRDMj4KKzxVODRDNz4KKzxVODRDOD4KKzxVODRDQz4KKzxVODRDRj4KKzxVODREMz4KKzxVODREQz4KKzxVODRFNz4KKzxVODRFQT4KKzxVODRFRj4KKzxVODRGMD4KKzxVODRGMT4KKzxVODRGMj4KKzxVODRGNz4KKzxVODUzMj4KKzxVODRGQT4KKzxVODRGQj4KKzxVODRGRD4KKzxVODUwMj4KKzxVODUwMz4KKzxVODUwNz4KKzxVODUwQz4KKzxVODUwRT4KKzxVODUxMD4KKzxVODUxQz4KKzxVODUxRT4KKzxVODUyMj4KKzxVODUyMz4KKzxVODUyND4KKzxVODUyNT4KKzxVODUyNz4KKzxVODUyQT4KKzxVODUyQj4KKzxVODUyRj4KKzxVODUzMz4KKzxVODUzND4KKzxVODUzNj4KKzxVODUzRj4KKzxVODU0Nj4KKzxVODU0Rj4KKzxVODU1MD4KKzxVODU1MT4KKzxVODU1Mj4KKzxVODU1Mz4KKzxVODU1Nj4KKzxVODU1OT4KKzxVODU1Qz4KKzxVODU1RD4KKzxVODU1RT4KKzxVODU1Rj4KKzxVODU2MD4KKzxVODU2MT4KKzxVODU2Mj4KKzxVODU2ND4KKzxVODU2Qj4KKzxVODU2Rj4KKzxVODU3OT4KKzxVODU3QT4KKzxVODU3Qj4KKzxVODU3RD4KKzxVODU3Rj4KKzxVODU4MT4KKzxVODU4NT4KKzxVODU4Nj4KKzxVODU4OT4KKzxVODU4Qj4KKzxVODU4Qz4KKzxVODU4Rj4KKzxVODU5Mz4KKzxVODU5OD4KKzxVODU5RD4KKzxVODU5Rj4KKzxVODVBMD4KKzxVODVBMj4KKzxVODVBNT4KKzxVODVBNz4KKzxVODVCND4KKzxVODVCNj4KKzxVODVCNz4KKzxVODVCOD4KKzxVODVCQz4KKzxVODVCRD4KKzxVODVCRT4KKzxVODVCRj4KKzxVODVDMj4KKzxVODVDNz4KKzxVODVDQT4KKzxVODVDQj4KKzxVODVDRT4KKzxVODVBRD4KKzxVODVEOD4KKzxVODVEQT4KKzxVODVERj4KKzxVODVFMD4KKzxVODVFNj4KKzxVODVFOD4KKzxVODVFRD4KKzxVODVGMz4KKzxVODVGNj4KKzxVODVGQz4KKzxVODVGRj4KKzxVODYwMD4KKzxVODYwND4KKzxVODYwNT4KKzxVODYwRD4KKzxVODYwRT4KKzxVODYxMD4KKzxVODYxMT4KKzxVODYxMj4KKzxVODYxOD4KKzxVODYxOT4KKzxVODYxQj4KKzxVODYxRT4KKzxVODYyMT4KKzxVODYyNz4KKzxVODYyOT4KKzxVODYzNj4KKzxVODYzOD4KKzxVODYzQT4KKzxVODYzQz4KKzxVODYzRD4KKzxVODY0MD4KKzxVODY0Mj4KKzxVODY0Nj4KKzxVODY1Mj4KKzxVODY1Mz4KKzxVODY1Nj4KKzxVODY1Nz4KKzxVODY1OD4KKzxVODY1OT4KKzxVODY1RD4KKzxVODY2MD4KKzxVODY2MT4KKzxVODY2Mj4KKzxVODY2Mz4KKzxVODY2ND4KKzxVODY2OT4KKzxVODY2Qz4KKzxVODY2Rj4KKzxVODY3NT4KKzxVODY3Nj4KKzxVODY3Nz4KKzxVODY3QT4KKzxVODY4RD4KKzxVODY5MT4KKzxVODY5Nj4KKzxVODY5OD4KKzxVODY5QT4KKzxVODY5Qz4KKzxVODZBMT4KKzxVODZBNj4KKzxVODZBNz4KKzxVODZBOD4KKzxVODZBRD4KKzxVODZCMT4KKzxVODZCMz4KKzxVODZCND4KKzxVODZCNT4KKzxVODZCNz4KKzxVODZCOD4KKzxVODZCOT4KKzxVODZCRj4KKzxVODZDMD4KKzxVODZDMT4KKzxVODZDMz4KKzxVODZDNT4KKzxVODZEMT4KKzxVODZEMj4KKzxVODZENT4KKzxVODZENz4KKzxVODZEQT4KKzxVODZEQz4KKzxVODZFMD4KKzxVODZFMz4KKzxVODZFNT4KKzxVODZFNz4KKzxVODY4OD4KKzxVODZGQT4KKzxVODZGQz4KKzxVODZGRD4KKzxVODcwND4KKzxVODcwNT4KKzxVODcwNz4KKzxVODcwQj4KKzxVODcwRT4KKzxVODcwRj4KKzxVODcxMD4KKzxVODcxMz4KKzxVODcxND4KKzxVODcxOT4KKzxVODcxRT4KKzxVODcxRj4KKzxVODcyMT4KKzxVODcyMz4KKzxVODcyOD4KKzxVODcyRT4KKzxVODcyRj4KKzxVODczMT4KKzxVODczMj4KKzxVODczOT4KKzxVODczQT4KKzxVODczQz4KKzxVODczRD4KKzxVODczRT4KKzxVODc0MD4KKzxVODc0Mz4KKzxVODc0NT4KKzxVODc0RD4KKzxVODc1OD4KKzxVODc1RD4KKzxVODc2MT4KKzxVODc2ND4KKzxVODc2NT4KKzxVODc2Rj4KKzxVODc3MT4KKzxVODc3Mj4KKzxVODc3Qj4KKzxVODc4Mz4KKzxVODc4ND4KKzxVODc4NT4KKzxVODc4Nj4KKzxVODc4Nz4KKzxVODc4OD4KKzxVODc4OT4KKzxVODc4Qj4KKzxVODc4Qz4KKzxVODc5MD4KKzxVODc5Mz4KKzxVODc5NT4KKzxVODc5Nz4KKzxVODc5OD4KKzxVODc5OT4KKzxVODc5RT4KKzxVODdBMD4KKzxVODdBMz4KKzxVODdBNz4KKzxVODdBQz4KKzxVODdBRD4KKzxVODdBRT4KKzxVODdCMT4KKzxVODdCNT4KKzxVODdCRT4KKzxVODdCRj4KKzxVODdDMT4KKzxVODdDOD4KKzxVODdDOT4KKzxVODdDQT4KKzxVODdDRT4KKzxVODdENT4KKzxVODdENj4KKzxVODdEOT4KKzxVODdEQT4KKzxVODdEQz4KKzxVODdERj4KKzxVODdFMj4KKzxVODdFMz4KKzxVODdFND4KKzxVODdFQT4KKzxVODdFQj4KKzxVODdFRD4KKzxVODdGMT4KKzxVODdGMz4KKzxVODdGOD4KKzxVODdGQT4KKzxVODdGRj4KKzxVODgwMT4KKzxVODgwMz4KKzxVODgwNj4KKzxVODgwOT4KKzxVODgwQT4KKzxVODgwQj4KKzxVODgxMD4KKzxVODgxOT4KKzxVODgxMj4KKzxVODgxMz4KKzxVODgxND4KKzxVODgxOD4KKzxVODgxQT4KKzxVODgxQj4KKzxVODgxQz4KKzxVODgxRT4KKzxVODgxRj4KKzxVODgyOD4KKzxVODgyRD4KKzxVODgyRT4KKzxVODgzMD4KKzxVODgzMj4KKzxVODgzNT4KKzxVODgzQT4KKzxVODgzQz4KKzxVODg0MT4KKzxVODg0Mz4KKzxVODg0NT4KKzxVODg0OD4KKzxVODg0OT4KKzxVODg0QT4KKzxVODg0Qj4KKzxVODg0RT4KKzxVODg1MT4KKzxVODg1NT4KKzxVODg1Nj4KKzxVODg1OD4KKzxVODg1QT4KKzxVODg1Qz4KKzxVODg1Rj4KKzxVODg2MD4KKzxVODg2ND4KKzxVODg2OT4KKzxVODg3MT4KKzxVODg3OT4KKzxVODg3Qj4KKzxVODg4MD4KKzxVODg5OD4KKzxVODg5QT4KKzxVODg5Qj4KKzxVODg5Qz4KKzxVODg5Rj4KKzxVODhBMD4KKzxVODhBOD4KKzxVODhBQT4KKzxVODhCQT4KKzxVODhCRD4KKzxVODhCRT4KKzxVODhDMD4KKzxVODhDQT4KKzxVODhDQj4KKzxVODhDQz4KKzxVODhDRD4KKzxVODhDRT4KKzxVODhEMT4KKzxVODhEMj4KKzxVODhEMz4KKzxVODhEQj4KKzxVODhERT4KKzxVODhFNz4KKzxVODhFRj4KKzxVODhGMD4KKzxVODhGMT4KKzxVODhGNT4KKzxVODhGNz4KKzxVODkwMT4KKzxVODkwNj4KKzxVODkwRD4KKzxVODkwRT4KKzxVODkwRj4KKzxVODkxNT4KKzxVODkxNj4KKzxVODkxOD4KKzxVODkxOT4KKzxVODkxQT4KKzxVODkxQz4KKzxVODkyMD4KKzxVODkyNj4KKzxVODkyNz4KKzxVODkyOD4KKzxVODkzMD4KKzxVODkzMT4KKzxVODkzMj4KKzxVODkzNT4KKzxVODkzOT4KKzxVODkzQT4KKzxVODkzRT4KKzxVODk0MD4KKzxVODk0Mj4KKzxVODk0NT4KKzxVODk0Nj4KKzxVODk0OT4KKzxVODk0Rj4KKzxVODk1Mj4KKzxVODk1Nz4KKzxVODk1QT4KKzxVODk1Qj4KKzxVODk1Qz4KKzxVODk2MT4KKzxVODk2Mj4KKzxVODk2Mz4KKzxVODk2Qj4KKzxVODk2RT4KKzxVODk3MD4KKzxVODk3Mz4KKzxVODk3NT4KKzxVODk3QT4KKzxVODk3Qj4KKzxVODk3Qz4KKzxVODk3RD4KKzxVODk4OT4KKzxVODk4RD4KKzxVODk5MD4KKzxVODk5ND4KKzxVODk5NT4KKzxVODk5Qj4KKzxVODk5Qz4KKzxVODk5Rj4KKzxVODlBMD4KKzxVODlBNT4KKzxVODlCMD4KKzxVODlCND4KKzxVODlCNT4KKzxVODlCNj4KKzxVODlCNz4KKzxVODlCQz4KKzxVODlEND4KKzxVODlENT4KKzxVODlENj4KKzxVODlENz4KKzxVODlEOD4KKzxVODlFNT4KKzxVODlFOT4KKzxVODlFQj4KKzxVODlFRD4KKzxVODlGMT4KKzxVODlGMz4KKzxVODlGNj4KKzxVODlGOT4KKzxVODlGRD4KKzxVODlGRj4KKzxVOEEwND4KKzxVOEEwNT4KKzxVOEEwNz4KKzxVOEEwRj4KKzxVOEExMT4KKzxVOEExMj4KKzxVOEExND4KKzxVOEExNT4KKzxVOEExRT4KKzxVOEEyMD4KKzxVOEEyMj4KKzxVOEEyND4KKzxVOEEyNj4KKzxVOEEyQj4KKzxVOEEyQz4KKzxVOEEyRj4KKzxVOEEzNT4KKzxVOEEzNz4KKzxVOEEzRD4KKzxVOEEzRT4KKzxVOEE0MD4KKzxVOEE0Mz4KKzxVOEE0NT4KKzxVOEE0Nz4KKzxVOEE0OT4KKzxVOEE0RD4KKzxVOEE0RT4KKzxVOEE1Mz4KKzxVOEE1Nj4KKzxVOEE1Nz4KKzxVOEE1OD4KKzxVOEE1Qz4KKzxVOEE1RD4KKzxVOEE2MT4KKzxVOEE2NT4KKzxVOEE2Nz4KKzxVOEE3NT4KKzxVOEE3Nj4KKzxVOEE3Nz4KKzxVOEE3OT4KKzxVOEE3QT4KKzxVOEE3Qj4KKzxVOEE3RT4KKzxVOEE3Rj4KKzxVOEE4MD4KKzxVOEE4Mz4KKzxVOEE4Nj4KKzxVOEE4Qj4KKzxVOEE4Rj4KKzxVOEE5MD4KKzxVOEE5Mj4KKzxVOEE5Nj4KKzxVOEE5Nz4KKzxVOEE5OT4KKzxVOEE5Rj4KKzxVOEFBNz4KKzxVOEFBOT4KKzxVOEFBRT4KKzxVOEFBRj4KKzxVOEFCMz4KKzxVOEFCNj4KKzxVOEFCNz4KKzxVOEFCQj4KKzxVOEFCRT4KKzxVOEFDMz4KKzxVOEFDNj4KKzxVOEFDOD4KKzxVOEFDOT4KKzxVOEFDQT4KKzxVOEFEMT4KKzxVOEFEMz4KKzxVOEFEND4KKzxVOEFENT4KKzxVOEFENz4KKzxVOEFERD4KKzxVOEFERj4KKzxVOEFFQz4KKzxVOEFGMD4KKzxVOEFGND4KKzxVOEFGNT4KKzxVOEFGNj4KKzxVOEFGQz4KKzxVOEFGRj4KKzxVOEIwNT4KKzxVOEIwNj4KKzxVOEIwQj4KKzxVOEIxMT4KKzxVOEIxQz4KKzxVOEIxRT4KKzxVOEIxRj4KKzxVOEIwQT4KKzxVOEIyRD4KKzxVOEIzMD4KKzxVOEIzNz4KKzxVOEIzQz4KKzxVOEI0Mj4KKzxVOEI0Mz4KKzxVOEI0ND4KKzxVOEI0NT4KKzxVOEI0Nj4KKzxVOEI0OD4KKzxVOEI1Mj4KKzxVOEI1Mz4KKzxVOEI1ND4KKzxVOEI1OT4KKzxVOEI0RD4KKzxVOEI1RT4KKzxVOEI2Mz4KKzxVOEI2RD4KKzxVOEI3Nj4KKzxVOEI3OD4KKzxVOEI3OT4KKzxVOEI3Qz4KKzxVOEI3RT4KKzxVOEI4MT4KKzxVOEI4ND4KKzxVOEI4NT4KKzxVOEI4Qj4KKzxVOEI4RD4KKzxVOEI4Rj4KKzxVOEI5ND4KKzxVOEI5NT4KKzxVOEI5Qz4KKzxVOEI5RT4KKzxVOEI5Rj4KKzxVOEMzOD4KKzxVOEMzOT4KKzxVOEMzRD4KKzxVOEMzRT4KKzxVOEM0NT4KKzxVOEM0Nz4KKzxVOEM0OT4KKzxVOEM0Qj4KKzxVOEM0Rj4KKzxVOEM1MT4KKzxVOEM1Mz4KKzxVOEM1ND4KKzxVOEM1Nz4KKzxVOEM1OD4KKzxVOEM1Qj4KKzxVOEM1RD4KKzxVOEM1OT4KKzxVOEM2Mz4KKzxVOEM2ND4KKzxVOEM2Nj4KKzxVOEM2OD4KKzxVOEM2OT4KKzxVOEM2RD4KKzxVOEM3Mz4KKzxVOEM3NT4KKzxVOEM3Nj4KKzxVOEM3Qj4KKzxVOEM3RT4KKzxVOEM4Nj4KKzxVOEM4Nz4KKzxVOEM4Qj4KKzxVOEM5MD4KKzxVOEM5Mj4KKzxVOEM5Mz4KKzxVOEM5OT4KKzxVOEM5Qj4KKzxVOEM5Qz4KKzxVOENBND4KKzxVOENCOT4KKzxVOENCQT4KKzxVOENDNT4KKzxVOENDNj4KKzxVOENDOT4KKzxVOENDQj4KKzxVOENDRj4KKzxVOENENj4KKzxVOENENT4KKzxVOENEOT4KKzxVOENERD4KKzxVOENFMT4KKzxVOENFOD4KKzxVOENFQz4KKzxVOENFRj4KKzxVOENGMD4KKzxVOENGMj4KKzxVOENGNT4KKzxVOENGNz4KKzxVOENGOD4KKzxVOENGRT4KKzxVOENGRj4KKzxVOEQwMT4KKzxVOEQwMz4KKzxVOEQwOT4KKzxVOEQxMj4KKzxVOEQxNz4KKzxVOEQxQj4KKzxVOEQ2NT4KKzxVOEQ2OT4KKzxVOEQ2Qz4KKzxVOEQ2RT4KKzxVOEQ3Rj4KKzxVOEQ4Mj4KKzxVOEQ4ND4KKzxVOEQ4OD4KKzxVOEQ4RD4KKzxVOEQ5MD4KKzxVOEQ5MT4KKzxVOEQ5NT4KKzxVOEQ5RT4KKzxVOEQ5Rj4KKzxVOERBMD4KKzxVOERBNj4KKzxVOERBQj4KKzxVOERBQz4KKzxVOERBRj4KKzxVOERCMj4KKzxVOERCNT4KKzxVOERCNz4KKzxVOERCOT4KKzxVOERCQj4KKzxVOERDMD4KKzxVOERDNT4KKzxVOERDNj4KKzxVOERDNz4KKzxVOERDOD4KKzxVOERDQT4KKzxVOERDRT4KKzxVOEREMT4KKzxVOEREND4KKzxVOERENT4KKzxVOERENz4KKzxVOEREOT4KKzxVOERFND4KKzxVOERFNT4KKzxVOERFNz4KKzxVOERFQz4KKzxVOERGMD4KKzxVOERCQz4KKzxVOERGMT4KKzxVOERGMj4KKzxVOERGND4KKzxVOERGRD4KKzxVOEUwMT4KKzxVOEUwND4KKzxVOEUwNT4KKzxVOEUwNj4KKzxVOEUwQj4KKzxVOEUxMT4KKzxVOEUxND4KKzxVOEUxNj4KKzxVOEUyMD4KKzxVOEUyMT4KKzxVOEUyMj4KKzxVOEUyMz4KKzxVOEUyNj4KKzxVOEUyNz4KKzxVOEUzMT4KKzxVOEUzMz4KKzxVOEUzNj4KKzxVOEUzNz4KKzxVOEUzOD4KKzxVOEUzOT4KKzxVOEUzRD4KKzxVOEU0MD4KKzxVOEU0MT4KKzxVOEU0Qj4KKzxVOEU0RD4KKzxVOEU0RT4KKzxVOEU0Rj4KKzxVOEU1ND4KKzxVOEU1Qj4KKzxVOEU1Qz4KKzxVOEU1RD4KKzxVOEU1RT4KKzxVOEU2MT4KKzxVOEU2Mj4KKzxVOEU2OT4KKzxVOEU2Qz4KKzxVOEU2RD4KKzxVOEU2Rj4KKzxVOEU3MD4KKzxVOEU3MT4KKzxVOEU3OT4KKzxVOEU3QT4KKzxVOEU3Qj4KKzxVOEU4Mj4KKzxVOEU4Mz4KKzxVOEU4OT4KKzxVOEU5MD4KKzxVOEU5Mj4KKzxVOEU5NT4KKzxVOEU5QT4KKzxVOEU5Qj4KKzxVOEU5RD4KKzxVOEU5RT4KKzxVOEVBMj4KKzxVOEVBNz4KKzxVOEVBOT4KKzxVOEVBRD4KKzxVOEVBRT4KKzxVOEVCMz4KKzxVOEVCNT4KKzxVOEVCQT4KKzxVOEVCQj4KKzxVOEVDMD4KKzxVOEVDMT4KKzxVOEVDMz4KKzxVOEVDND4KKzxVOEVDNz4KKzxVOEVDRj4KKzxVOEVEMT4KKzxVOEVEND4KKzxVOEVEQz4KKzxVOEVFOD4KKzxVOEVFRT4KKzxVOEVGMD4KKzxVOEVGMT4KKzxVOEVGNz4KKzxVOEVGOT4KKzxVOEVGQT4KKzxVOEVFRD4KKzxVOEYwMD4KKzxVOEYwMj4KKzxVOEYwNz4KKzxVOEYwOD4KKzxVOEYwRj4KKzxVOEYxMD4KKzxVOEYxNj4KKzxVOEYxNz4KKzxVOEYxOD4KKzxVOEYxRT4KKzxVOEYyMD4KKzxVOEYyMT4KKzxVOEYyMz4KKzxVOEYyNT4KKzxVOEYyNz4KKzxVOEYyOD4KKzxVOEYyQz4KKzxVOEYyRD4KKzxVOEYyRT4KKzxVOEYzND4KKzxVOEYzNT4KKzxVOEYzNj4KKzxVOEYzNz4KKzxVOEYzQT4KKzxVOEY0MD4KKzxVOEY0MT4KKzxVOEY0Mz4KKzxVOEY0Nz4KKzxVOEY0Rj4KKzxVOEY1MT4KKzxVOEY1Mj4KKzxVOEY1Mz4KKzxVOEY1ND4KKzxVOEY1NT4KKzxVOEY1OD4KKzxVOEY1RD4KKzxVOEY1RT4KKzxVOEY2NT4KKzxVOEY5RD4KKzxVOEZBMD4KKzxVOEZBMT4KKzxVOEZBND4KKzxVOEZBNT4KKzxVOEZBNj4KKzxVOEZCNT4KKzxVOEZCNj4KKzxVOEZCOD4KKzxVOEZCRT4KKzxVOEZDMD4KKzxVOEZDMT4KKzxVOEZDNj4KKzxVOEZDQT4KKzxVOEZDQj4KKzxVOEZDRD4KKzxVOEZEMD4KKzxVOEZEMj4KKzxVOEZEMz4KKzxVOEZENT4KKzxVOEZFMD4KKzxVOEZFMz4KKzxVOEZFND4KKzxVOEZFOD4KKzxVOEZFRT4KKzxVOEZGMT4KKzxVOEZGNT4KKzxVOEZGNj4KKzxVOEZGQj4KKzxVOEZGRT4KKzxVOTAwMj4KKzxVOTAwND4KKzxVOTAwOD4KKzxVOTAwQz4KKzxVOTAxOD4KKzxVOTAxQj4KKzxVOTAyOD4KKzxVOTAyOT4KKzxVOTAyRj4KKzxVOTAyQT4KKzxVOTAyQz4KKzxVOTAyRD4KKzxVOTAzMz4KKzxVOTAzND4KKzxVOTAzNz4KKzxVOTAzRj4KKzxVOTA0Mz4KKzxVOTA0ND4KKzxVOTA0Qz4KKzxVOTA1Qj4KKzxVOTA1RD4KKzxVOTA2Mj4KKzxVOTA2Nj4KKzxVOTA2Nz4KKzxVOTA2Qz4KKzxVOTA3MD4KKzxVOTA3ND4KKzxVOTA3OT4KKzxVOTA4NT4KKzxVOTA4OD4KKzxVOTA4Qj4KKzxVOTA4Qz4KKzxVOTA4RT4KKzxVOTA5MD4KKzxVOTA5NT4KKzxVOTA5Nz4KKzxVOTA5OD4KKzxVOTA5OT4KKzxVOTA5Qj4KKzxVOTBBMD4KKzxVOTBBMT4KKzxVOTBBMj4KKzxVOTBBNT4KKzxVOTBCMD4KKzxVOTBCMj4KKzxVOTBCMz4KKzxVOTBCND4KKzxVOTBCNj4KKzxVOTBCRD4KKzxVOTBDQz4KKzxVOTBCRT4KKzxVOTBDMz4KKzxVOTBDND4KKzxVOTBDNT4KKzxVOTBDNz4KKzxVOTBDOD4KKzxVOTBENT4KKzxVOTBENz4KKzxVOTBEOD4KKzxVOTBEOT4KKzxVOTBEQz4KKzxVOTBERD4KKzxVOTBERj4KKzxVOTBFNT4KKzxVOTBEMj4KKzxVOTBGNj4KKzxVOTBFQj4KKzxVOTBFRj4KKzxVOTBGMD4KKzxVOTBGND4KKzxVOTBGRT4KKzxVOTBGRj4KKzxVOTEwMD4KKzxVOTEwND4KKzxVOTEwNT4KKzxVOTEwNj4KKzxVOTEwOD4KKzxVOTEwRD4KKzxVOTExMD4KKzxVOTExND4KKzxVOTExNj4KKzxVOTExNz4KKzxVOTExOD4KKzxVOTExQT4KKzxVOTExQz4KKzxVOTExRT4KKzxVOTEyMD4KKzxVOTEyNT4KKzxVOTEyMj4KKzxVOTEyMz4KKzxVOTEyNz4KKzxVOTEyOT4KKzxVOTEyRT4KKzxVOTEyRj4KKzxVOTEzMT4KKzxVOTEzND4KKzxVOTEzNj4KKzxVOTEzNz4KKzxVOTEzOT4KKzxVOTEzQT4KKzxVOTEzQz4KKzxVOTEzRD4KKzxVOTE0Mz4KKzxVOTE0Nz4KKzxVOTE0OD4KKzxVOTE0Rj4KKzxVOTE1Mz4KKzxVOTE1Nz4KKzxVOTE1OT4KKzxVOTE1QT4KKzxVOTE1Qj4KKzxVOTE2MT4KKzxVOTE2ND4KKzxVOTE2Nz4KKzxVOTE2RD4KKzxVOTE3ND4KKzxVOTE3OT4KKzxVOTE3QT4KKzxVOTE3Qj4KKzxVOTE4MT4KKzxVOTE4Mz4KKzxVOTE4NT4KKzxVOTE4Nj4KKzxVOTE4QT4KKzxVOTE4RT4KKzxVOTE5MT4KKzxVOTE5Mz4KKzxVOTE5ND4KKzxVOTE5NT4KKzxVOTE5OD4KKzxVOTE5RT4KKzxVOTFBMT4KKzxVOTFBNj4KKzxVOTFBOD4KKzxVOTFBQz4KKzxVOTFBRD4KKzxVOTFBRT4KKzxVOTFCMD4KKzxVOTFCMT4KKzxVOTFCMj4KKzxVOTFCMz4KKzxVOTFCNj4KKzxVOTFCQj4KKzxVOTFCQz4KKzxVOTFCRD4KKzxVOTFCRj4KKzxVOTFDMj4KKzxVOTFDMz4KKzxVOTFDNT4KKzxVOTFEMz4KKzxVOTFEND4KKzxVOTFENz4KKzxVOTFEOT4KKzxVOTFEQT4KKzxVOTFERT4KKzxVOTFFND4KKzxVOTFFNT4KKzxVOTFFOT4KKzxVOTFFQT4KKzxVOTFFQz4KKzxVOTFFRD4KKzxVOTFFRT4KKzxVOTFFRj4KKzxVOTFGMD4KKzxVOTFGMT4KKzxVOTFGNz4KKzxVOTFGOT4KKzxVOTFGQj4KKzxVOTFGRD4KKzxVOTIwMD4KKzxVOTIwMT4KKzxVOTIwND4KKzxVOTIwNT4KKzxVOTIwNj4KKzxVOTIwNz4KKzxVOTIwOT4KKzxVOTIwQT4KKzxVOTIwQz4KKzxVOTIxMD4KKzxVOTIxMj4KKzxVOTIxMz4KKzxVOTIxNj4KKzxVOTIxOD4KKzxVOTIxQz4KKzxVOTIxRD4KKzxVOTIyMz4KKzxVOTIyND4KKzxVOTIyNT4KKzxVOTIyNj4KKzxVOTIyOD4KKzxVOTIyRT4KKzxVOTIyRj4KKzxVOTIzMD4KKzxVOTIzMz4KKzxVOTIzNT4KKzxVOTIzNj4KKzxVOTIzOD4KKzxVOTIzOT4KKzxVOTIzQT4KKzxVOTIzQz4KKzxVOTIzRT4KKzxVOTI0MD4KKzxVOTI0Mj4KKzxVOTI0Mz4KKzxVOTI0Nj4KKzxVOTI0Nz4KKzxVOTI0QT4KKzxVOTI0RD4KKzxVOTI0RT4KKzxVOTI0Rj4KKzxVOTI1MT4KKzxVOTI1OD4KKzxVOTI1OT4KKzxVOTI1Qz4KKzxVOTI1RD4KKzxVOTI2MD4KKzxVOTI2MT4KKzxVOTI2NT4KKzxVOTI2Nz4KKzxVOTI2OD4KKzxVOTI2OT4KKzxVOTI2RT4KKzxVOTI2Rj4KKzxVOTI3MD4KKzxVOTI3NT4KKzxVOTI3Nj4KKzxVOTI3Nz4KKzxVOTI3OD4KKzxVOTI3OT4KKzxVOTI3Qj4KKzxVOTI3Qz4KKzxVOTI3RD4KKzxVOTI3Rj4KKzxVOTI4OD4KKzxVOTI4OT4KKzxVOTI4QT4KKzxVOTI4RD4KKzxVOTI4RT4KKzxVOTI5Mj4KKzxVOTI5Nz4KKzxVOTI5OT4KKzxVOTI5Rj4KKzxVOTJBMD4KKzxVOTJBND4KKzxVOTJBNT4KKzxVOTJBNz4KKzxVOTJBOD4KKzxVOTJBQj4KKzxVOTJBRj4KKzxVOTJCMj4KKzxVOTJCNj4KKzxVOTJCOD4KKzxVOTJCQT4KKzxVOTJCQj4KKzxVOTJCQz4KKzxVOTJCRD4KKzxVOTJCRj4KKzxVOTJDMD4KKzxVOTJDMT4KKzxVOTJDMj4KKzxVOTJDMz4KKzxVOTJDNT4KKzxVOTJDNj4KKzxVOTJDNz4KKzxVOTJDOD4KKzxVOTJDQj4KKzxVOTJDQz4KKzxVOTJDRD4KKzxVOTJDRT4KKzxVOTJEMD4KKzxVOTJEMz4KKzxVOTJENT4KKzxVOTJENz4KKzxVOTJEOD4KKzxVOTJEOT4KKzxVOTJEQz4KKzxVOTJERD4KKzxVOTJERj4KKzxVOTJFMD4KKzxVOTJFMT4KKzxVOTJFMz4KKzxVOTJFNT4KKzxVOTJFNz4KKzxVOTJFOD4KKzxVOTJFQz4KKzxVOTJFRT4KKzxVOTJGMD4KKzxVOTJGOT4KKzxVOTJGQj4KKzxVOTJGRj4KKzxVOTMwMD4KKzxVOTMwMj4KKzxVOTMwOD4KKzxVOTMwRD4KKzxVOTMxMT4KKzxVOTMxND4KKzxVOTMxNT4KKzxVOTMxQz4KKzxVOTMxRD4KKzxVOTMxRT4KKzxVOTMxRj4KKzxVOTMyMT4KKzxVOTMyND4KKzxVOTMyNT4KKzxVOTMyNz4KKzxVOTMyOT4KKzxVOTMyQT4KKzxVOTMzMz4KKzxVOTMzND4KKzxVOTMzNj4KKzxVOTMzNz4KKzxVOTM0Nz4KKzxVOTM0OD4KKzxVOTM0OT4KKzxVOTM1MD4KKzxVOTM1MT4KKzxVOTM1Mj4KKzxVOTM1NT4KKzxVOTM1Nz4KKzxVOTM1OD4KKzxVOTM1QT4KKzxVOTM1RT4KKzxVOTM2ND4KKzxVOTM2NT4KKzxVOTM2Nz4KKzxVOTM2OT4KKzxVOTM2QT4KKzxVOTM2RD4KKzxVOTM2Rj4KKzxVOTM3MD4KKzxVOTM3MT4KKzxVOTM3Mz4KKzxVOTM3ND4KKzxVOTM3Nj4KKzxVOTM3QT4KKzxVOTM3RD4KKzxVOTM3Rj4KKzxVOTM4MD4KKzxVOTM4MT4KKzxVOTM4Mj4KKzxVOTM4OD4KKzxVOTM4QT4KKzxVOTM4Qj4KKzxVOTM4RD4KKzxVOTM4Rj4KKzxVOTM5Mj4KKzxVOTM5NT4KKzxVOTM5OD4KKzxVOTM5Qj4KKzxVOTM5RT4KKzxVOTNBMT4KKzxVOTNBMz4KKzxVOTNBND4KKzxVOTNBNj4KKzxVOTNBOD4KKzxVOTNBQj4KKzxVOTNCND4KKzxVOTNCNT4KKzxVOTNCNj4KKzxVOTNCQT4KKzxVOTNBOT4KKzxVOTNDMT4KKzxVOTNDND4KKzxVOTNDNT4KKzxVOTNDNj4KKzxVOTNDNz4KKzxVOTNDOT4KKzxVOTNDQT4KKzxVOTNDQj4KKzxVOTNDQz4KKzxVOTNDRD4KKzxVOTNEMz4KKzxVOTNEOT4KKzxVOTNEQz4KKzxVOTNERT4KKzxVOTNERj4KKzxVOTNFMj4KKzxVOTNFNj4KKzxVOTNFNz4KKzxVOTNGOT4KKzxVOTNGNz4KKzxVOTNGOD4KKzxVOTNGQT4KKzxVOTNGQj4KKzxVOTNGRD4KKzxVOTQwMT4KKzxVOTQwMj4KKzxVOTQwND4KKzxVOTQwOD4KKzxVOTQwOT4KKzxVOTQwRD4KKzxVOTQwRT4KKzxVOTQwRj4KKzxVOTQxNT4KKzxVOTQxNj4KKzxVOTQxNz4KKzxVOTQxRj4KKzxVOTQyRT4KKzxVOTQyRj4KKzxVOTQzMT4KKzxVOTQzMj4KKzxVOTQzMz4KKzxVOTQzND4KKzxVOTQzQj4KKzxVOTQzRj4KKzxVOTQzRD4KKzxVOTQ0Mz4KKzxVOTQ0NT4KKzxVOTQ0OD4KKzxVOTQ0QT4KKzxVOTQ0Qz4KKzxVOTQ1NT4KKzxVOTQ1OT4KKzxVOTQ1Qz4KKzxVOTQ1Rj4KKzxVOTQ2MT4KKzxVOTQ2Mz4KKzxVOTQ2OD4KKzxVOTQ2Qj4KKzxVOTQ2RD4KKzxVOTQ2RT4KKzxVOTQ2Rj4KKzxVOTQ3MT4KKzxVOTQ3Mj4KKzxVOTQ4ND4KKzxVOTQ4Mz4KKzxVOTU3OD4KKzxVOTU3OT4KKzxVOTU3RT4KKzxVOTU4ND4KKzxVOTU4OD4KKzxVOTU4Qz4KKzxVOTU4RD4KKzxVOTU4RT4KKzxVOTU5RD4KKzxVOTU5RT4KKzxVOTU5Rj4KKzxVOTVBMT4KKzxVOTVBNj4KKzxVOTVBOT4KKzxVOTVBQj4KKzxVOTVBQz4KKzxVOTVCND4KKzxVOTVCNj4KKzxVOTVCQT4KKzxVOTVCRD4KKzxVOTVCRj4KKzxVOTVDNj4KKzxVOTVDOD4KKzxVOTVDOT4KKzxVOTVDQj4KKzxVOTVEMD4KKzxVOTVEMT4KKzxVOTVEMj4KKzxVOTVEMz4KKzxVOTVEOT4KKzxVOTVEQT4KKzxVOTVERD4KKzxVOTVERT4KKzxVOTVERj4KKzxVOTVFMD4KKzxVOTVFND4KKzxVOTVFNj4KKzxVOTYxRD4KKzxVOTYxRT4KKzxVOTYyMj4KKzxVOTYyND4KKzxVOTYyNT4KKzxVOTYyNj4KKzxVOTYyQz4KKzxVOTYzMT4KKzxVOTYzMz4KKzxVOTYzNz4KKzxVOTYzOD4KKzxVOTYzOT4KKzxVOTYzQT4KKzxVOTYzQz4KKzxVOTYzRD4KKzxVOTY0MT4KKzxVOTY1Mj4KKzxVOTY1ND4KKzxVOTY1Nj4KKzxVOTY1Nz4KKzxVOTY1OD4KKzxVOTY2MT4KKzxVOTY2RT4KKzxVOTY3ND4KKzxVOTY3Qj4KKzxVOTY3Qz4KKzxVOTY3RT4KKzxVOTY3Rj4KKzxVOTY4MT4KKzxVOTY4Mj4KKzxVOTY4Mz4KKzxVOTY4ND4KKzxVOTY4OT4KKzxVOTY5MT4KKzxVOTY5Nj4KKzxVOTY5QT4KKzxVOTY5RD4KKzxVOTY5Rj4KKzxVOTZBND4KKzxVOTZBNT4KKzxVOTZBNj4KKzxVOTZBOT4KKzxVOTZBRT4KKzxVOTZBRj4KKzxVOTZCMz4KKzxVOTZCQT4KKzxVOTZDQT4KKzxVOTZEMj4KKzxVNURCMj4KKzxVOTZEOD4KKzxVOTZEQT4KKzxVOTZERD4KKzxVOTZERT4KKzxVOTZERj4KKzxVOTZFOT4KKzxVOTZFRj4KKzxVOTZGMT4KKzxVOTZGQT4KKzxVOTcwMj4KKzxVOTcwMz4KKzxVOTcwNT4KKzxVOTcwOT4KKzxVOTcxQT4KKzxVOTcxQj4KKzxVOTcxRD4KKzxVOTcyMT4KKzxVOTcyMj4KKzxVOTcyMz4KKzxVOTcyOD4KKzxVOTczMT4KKzxVOTczMz4KKzxVOTc0MT4KKzxVOTc0Mz4KKzxVOTc0QT4KKzxVOTc0RT4KKzxVOTc0Rj4KKzxVOTc1NT4KKzxVOTc1Nz4KKzxVOTc1OD4KKzxVOTc1QT4KKzxVOTc1Qj4KKzxVOTc2Mz4KKzxVOTc2Nz4KKzxVOTc2QT4KKzxVOTc2RT4KKzxVOTc3Mz4KKzxVOTc3Nj4KKzxVOTc3Nz4KKzxVOTc3OD4KKzxVOTc3Qj4KKzxVOTc3RD4KKzxVOTc3Rj4KKzxVOTc4MD4KKzxVOTc4OT4KKzxVOTc5NT4KKzxVOTc5Nj4KKzxVOTc5Nz4KKzxVOTc5OT4KKzxVOTc5QT4KKzxVOTc5RT4KKzxVOTc5Rj4KKzxVOTdBMj4KKzxVOTdBQz4KKzxVOTdBRT4KKzxVOTdCMT4KKzxVOTdCMj4KKzxVOTdCNT4KKzxVOTdCNj4KKzxVOTdCOD4KKzxVOTdCOT4KKzxVOTdCQT4KKzxVOTdCQz4KKzxVOTdCRT4KKzxVOTdCRj4KKzxVOTdDMT4KKzxVOTdDND4KKzxVOTdDNT4KKzxVOTdDNz4KKzxVOTdDOT4KKzxVOTdDQT4KKzxVOTdDQz4KKzxVOTdDRD4KKzxVOTdDRT4KKzxVOTdEMD4KKzxVOTdEMT4KKzxVOTdEND4KKzxVOTdENz4KKzxVOTdEOD4KKzxVOTdEOT4KKzxVOTdERD4KKzxVOTdERT4KKzxVOTdFMD4KKzxVOTdEQj4KKzxVOTdFMT4KKzxVOTdFND4KKzxVOTdFRj4KKzxVOTdGMT4KKzxVOTdGND4KKzxVOTdGNz4KKzxVOTdGOD4KKzxVOTdGQT4KKzxVOTgwNz4KKzxVOTgwQT4KKzxVOTgxOT4KKzxVOTgwRD4KKzxVOTgwRT4KKzxVOTgxND4KKzxVOTgxNj4KKzxVOTgxQz4KKzxVOTgxRT4KKzxVOTgyMD4KKzxVOTgyMz4KKzxVOTgyNj4KKzxVOTgyQj4KKzxVOTgyRT4KKzxVOTgyRj4KKzxVOTgzMD4KKzxVOTgzMj4KKzxVOTgzMz4KKzxVOTgzNT4KKzxVOTgyNT4KKzxVOTgzRT4KKzxVOTg0ND4KKzxVOTg0Nz4KKzxVOTg0QT4KKzxVOTg1MT4KKzxVOTg1Mj4KKzxVOTg1Mz4KKzxVOTg1Nj4KKzxVOTg1Nz4KKzxVOTg1OT4KKzxVOTg1QT4KKzxVOTg2Mj4KKzxVOTg2Mz4KKzxVOTg2NT4KKzxVOTg2Nj4KKzxVOTg2QT4KKzxVOTg2Qz4KKzxVOThBQj4KKzxVOThBRD4KKzxVOThBRT4KKzxVOThCMD4KKzxVOThCND4KKzxVOThCNz4KKzxVOThCOD4KKzxVOThCQT4KKzxVOThCQj4KKzxVOThCRj4KKzxVOThDMj4KKzxVOThDNT4KKzxVOThDOD4KKzxVOThDQz4KKzxVOThFMT4KKzxVOThFMz4KKzxVOThFNT4KKzxVOThFNj4KKzxVOThFNz4KKzxVOThFQT4KKzxVOThGMz4KKzxVOThGNj4KKzxVOTkwMj4KKzxVOTkwNz4KKzxVOTkwOD4KKzxVOTkxMT4KKzxVOTkxNT4KKzxVOTkxNj4KKzxVOTkxNz4KKzxVOTkxQT4KKzxVOTkxQj4KKzxVOTkxQz4KKzxVOTkxRj4KKzxVOTkyMj4KKzxVOTkyNj4KKzxVOTkyNz4KKzxVOTkyQj4KKzxVOTkzMT4KKzxVOTkzMj4KKzxVOTkzMz4KKzxVOTkzND4KKzxVOTkzNT4KKzxVOTkzOT4KKzxVOTkzQT4KKzxVOTkzQj4KKzxVOTkzQz4KKzxVOTk0MD4KKzxVOTk0MT4KKzxVOTk0Nj4KKzxVOTk0Nz4KKzxVOTk0OD4KKzxVOTk0RD4KKzxVOTk0RT4KKzxVOTk1ND4KKzxVOTk1OD4KKzxVOTk1OT4KKzxVOTk1Qj4KKzxVOTk1Qz4KKzxVOTk1RT4KKzxVOTk1Rj4KKzxVOTk2MD4KKzxVOTk5Qj4KKzxVOTk5RD4KKzxVOTk5Rj4KKzxVOTlBNj4KKzxVOTlCMD4KKzxVOTlCMT4KKzxVOTlCMj4KKzxVOTlCNT4KKzxVOTlCOT4KKzxVOTlCQT4KKzxVOTlCRD4KKzxVOTlCRj4KKzxVOTlDMz4KKzxVOTlDOT4KKzxVOTlEMz4KKzxVOTlEND4KKzxVOTlEOT4KKzxVOTlEQT4KKzxVOTlEQz4KKzxVOTlERT4KKzxVOTlFNz4KKzxVOTlFQT4KKzxVOTlFQj4KKzxVOTlFQz4KKzxVOTlGMD4KKzxVOTlGND4KKzxVOTlGNT4KKzxVOTlGOT4KKzxVOTlGRD4KKzxVOTlGRT4KKzxVOUEwMj4KKzxVOUEwMz4KKzxVOUEwND4KKzxVOUEwQj4KKzxVOUEwQz4KKzxVOUExMD4KKzxVOUExMT4KKzxVOUExNj4KKzxVOUExRT4KKzxVOUEyMD4KKzxVOUEyMj4KKzxVOUEyMz4KKzxVOUEyND4KKzxVOUEyNz4KKzxVOUEyRD4KKzxVOUEyRT4KKzxVOUEzMz4KKzxVOUEzNT4KKzxVOUEzNj4KKzxVOUEzOD4KKzxVOUE0Nz4KKzxVOUE0MT4KKzxVOUE0ND4KKzxVOUE0QT4KKzxVOUE0Qj4KKzxVOUE0Qz4KKzxVOUE0RT4KKzxVOUE1MT4KKzxVOUE1ND4KKzxVOUE1Nj4KKzxVOUE1RD4KKzxVOUFBQT4KKzxVOUFBQz4KKzxVOUFBRT4KKzxVOUFBRj4KKzxVOUFCMj4KKzxVOUFCND4KKzxVOUFCNT4KKzxVOUFCNj4KKzxVOUFCOT4KKzxVOUFCQj4KKzxVOUFCRT4KKzxVOUFCRj4KKzxVOUFDMT4KKzxVOUFDMz4KKzxVOUFDNj4KKzxVOUFDOD4KKzxVOUFDRT4KKzxVOUFEMD4KKzxVOUFEMj4KKzxVOUFENT4KKzxVOUFENj4KKzxVOUFENz4KKzxVOUFEQj4KKzxVOUFEQz4KKzxVOUFFMD4KKzxVOUFFND4KKzxVOUFFNT4KKzxVOUFFNz4KKzxVOUFFOT4KKzxVOUFFQz4KKzxVOUFGMj4KKzxVOUFGMz4KKzxVOUFGNT4KKzxVOUFGOT4KKzxVOUFGQT4KKzxVOUFGRD4KKzxVOUFGRj4KKzxVOUIwMD4KKzxVOUIwMT4KKzxVOUIwMj4KKzxVOUIwMz4KKzxVOUIwND4KKzxVOUIwNT4KKzxVOUIwOD4KKzxVOUIwOT4KKzxVOUIwQj4KKzxVOUIwQz4KKzxVOUIwRD4KKzxVOUIwRT4KKzxVOUIxMD4KKzxVOUIxMj4KKzxVOUIxNj4KKzxVOUIxOT4KKzxVOUIxQj4KKzxVOUIxQz4KKzxVOUIyMD4KKzxVOUIyNj4KKzxVOUIyQj4KKzxVOUIyRD4KKzxVOUIzMz4KKzxVOUIzND4KKzxVOUIzNT4KKzxVOUIzNz4KKzxVOUIzOT4KKzxVOUIzQT4KKzxVOUIzRD4KKzxVOUI0OD4KKzxVOUI0Qj4KKzxVOUI0Qz4KKzxVOUI1NT4KKzxVOUI1Nj4KKzxVOUI1Nz4KKzxVOUI1Qj4KKzxVOUI1RT4KKzxVOUI2MT4KKzxVOUI2Mz4KKzxVOUI2NT4KKzxVOUI2Nj4KKzxVOUI2OD4KKzxVOUI2QT4KKzxVOUI2Qj4KKzxVOUI2Qz4KKzxVOUI2RD4KKzxVOUI2RT4KKzxVOUI3Mz4KKzxVOUI3NT4KKzxVOUI3Nz4KKzxVOUI3OD4KKzxVOUI3OT4KKzxVOUI3Rj4KKzxVOUI4MD4KKzxVOUI4ND4KKzxVOUI4NT4KKzxVOUI4Nj4KKzxVOUI4Nz4KKzxVOUI4OT4KKzxVOUI4QT4KKzxVOUI4Qj4KKzxVOUI4RD4KKzxVOUI4Rj4KKzxVOUI5MD4KKzxVOUI5ND4KKzxVOUI5QT4KKzxVOUI5RD4KKzxVOUI5RT4KKzxVOUJBNj4KKzxVOUJBNz4KKzxVOUJBOT4KKzxVOUJBQz4KKzxVOUJCMD4KKzxVOUJCMT4KKzxVOUJCMj4KKzxVOUJCNz4KKzxVOUJCOD4KKzxVOUJCQj4KKzxVOUJCQz4KKzxVOUJCRT4KKzxVOUJCRj4KKzxVOUJDMT4KKzxVOUJDNz4KKzxVOUJDOD4KKzxVOUJDRT4KKzxVOUJEMD4KKzxVOUJENz4KKzxVOUJEOD4KKzxVOUJERD4KKzxVOUJERj4KKzxVOUJFNT4KKzxVOUJFNz4KKzxVOUJFQT4KKzxVOUJFQj4KKzxVOUJFRj4KKzxVOUJGMz4KKzxVOUJGNz4KKzxVOUJGOD4KKzxVOUJGOT4KKzxVOUJGQT4KKzxVOUJGRD4KKzxVOUJGRj4KKzxVOUMwMD4KKzxVOUMwMj4KKzxVOUMwQj4KKzxVOUMwRj4KKzxVOUMxMT4KKzxVOUMxNj4KKzxVOUMxOD4KKzxVOUMxOT4KKzxVOUMxQT4KKzxVOUMxQz4KKzxVOUMxRT4KKzxVOUMyMj4KKzxVOUMyMz4KKzxVOUMyNj4KKzxVOUMyNz4KKzxVOUMyOD4KKzxVOUMyOT4KKzxVOUMyQT4KKzxVOUMzMT4KKzxVOUMzNT4KKzxVOUMzNj4KKzxVOUMzNz4KKzxVOUMzRD4KKzxVOUM0MT4KKzxVOUM0Mz4KKzxVOUM0ND4KKzxVOUM0NT4KKzxVOUM0OT4KKzxVOUM0QT4KKzxVOUM0RT4KKzxVOUM0Rj4KKzxVOUM1MD4KKzxVOUM1Mz4KKzxVOUM1ND4KKzxVOUM1Nj4KKzxVOUM1OD4KKzxVOUM1Qj4KKzxVOUM1RD4KKzxVOUM1RT4KKzxVOUM1Rj4KKzxVOUM2Mz4KKzxVOUM2OT4KKzxVOUM2QT4KKzxVOUM1Qz4KKzxVOUM2Qj4KKzxVOUM2OD4KKzxVOUM2RT4KKzxVOUM3MD4KKzxVOUM3Mj4KKzxVOUM3NT4KKzxVOUM3Nz4KKzxVOUM3Qj4KKzxVOUNFNj4KKzxVOUNGMj4KKzxVOUNGNz4KKzxVOUNGOT4KKzxVOUQwQj4KKzxVOUQwMj4KKzxVOUQxMT4KKzxVOUQxNz4KKzxVOUQxOD4KKzxVOUQxQz4KKzxVOUQxRD4KKzxVOUQxRT4KKzxVOUQyRj4KKzxVOUQzMD4KKzxVOUQzMj4KKzxVOUQzMz4KKzxVOUQzND4KKzxVOUQzQT4KKzxVOUQzQz4KKzxVOUQ0NT4KKzxVOUQzRD4KKzxVOUQ0Mj4KKzxVOUQ0Mz4KKzxVOUQ0Nz4KKzxVOUQ0QT4KKzxVOUQ1Mz4KKzxVOUQ1ND4KKzxVOUQ1Rj4KKzxVOUQ2Mz4KKzxVOUQ2Mj4KKzxVOUQ2NT4KKzxVOUQ2OT4KKzxVOUQ2QT4KKzxVOUQ2Qj4KKzxVOUQ3MD4KKzxVOUQ3Nj4KKzxVOUQ3Nz4KKzxVOUQ3Qj4KKzxVOUQ3Qz4KKzxVOUQ3RT4KKzxVOUQ4Mz4KKzxVOUQ4ND4KKzxVOUQ4Nj4KKzxVOUQ4QT4KKzxVOUQ4RD4KKzxVOUQ4RT4KKzxVOUQ5Mj4KKzxVOUQ5Mz4KKzxVOUQ5NT4KKzxVOUQ5Nj4KKzxVOUQ5Nz4KKzxVOUQ5OD4KKzxVOURBMT4KKzxVOURBQT4KKzxVOURBQz4KKzxVOURBRT4KKzxVOURCMT4KKzxVOURCNT4KKzxVOURCOT4KKzxVOURCQz4KKzxVOURCRj4KKzxVOURDMz4KKzxVOURDNz4KKzxVOURDOT4KKzxVOURDQT4KKzxVOUREND4KKzxVOURENT4KKzxVOURENj4KKzxVOURENz4KKzxVOUREQT4KKzxVOURERT4KKzxVOURERj4KKzxVOURFMD4KKzxVOURFNT4KKzxVOURFNz4KKzxVOURFOT4KKzxVOURFQj4KKzxVOURFRT4KKzxVOURGMD4KKzxVOURGMz4KKzxVOURGND4KKzxVOURGRT4KKzxVOUUwQT4KKzxVOUUwMj4KKzxVOUUwNz4KKzxVOUUwRT4KKzxVOUUxMD4KKzxVOUUxMT4KKzxVOUUxMj4KKzxVOUUxNT4KKzxVOUUxNj4KKzxVOUUxOT4KKzxVOUUxQz4KKzxVOUUxRD4KKzxVOUU3QT4KKzxVOUU3Qj4KKzxVOUU3Qz4KKzxVOUU4MD4KKzxVOUU4Mj4KKzxVOUU4Mz4KKzxVOUU4ND4KKzxVOUU4NT4KKzxVOUU4Nz4KKzxVOUU4RT4KKzxVOUU4Rj4KKzxVOUU5Nj4KKzxVOUU5OD4KKzxVOUU5Qj4KKzxVOUU5RT4KKzxVOUVBND4KKzxVOUVBOD4KKzxVOUVBQz4KKzxVOUVBRT4KKzxVOUVBRj4KKzxVOUVCMD4KKzxVOUVCMz4KKzxVOUVCND4KKzxVOUVCNT4KKzxVOUVDNj4KKzxVOUVDOD4KKzxVOUVDQj4KKzxVOUVENT4KKzxVOUVERj4KKzxVOUVFND4KKzxVOUVFNz4KKzxVOUVFQz4KKzxVOUVFRD4KKzxVOUVFRT4KKzxVOUVGMD4KKzxVOUVGMT4KKzxVOUVGMj4KKzxVOUVGNT4KKzxVOUVGOD4KKzxVOUVGRj4KKzxVOUYwMj4KKzxVOUYwMz4KKzxVOUYwOT4KKzxVOUYwRj4KKzxVOUYxMD4KKzxVOUYxMT4KKzxVOUYxMj4KKzxVOUYxND4KKzxVOUYxNj4KKzxVOUYxNz4KKzxVOUYxOT4KKzxVOUYxQT4KKzxVOUYxQj4KKzxVOUYxRj4KKzxVOUYyMj4KKzxVOUYyNj4KKzxVOUYyQT4KKzxVOUYyQj4KKzxVOUYyRj4KKzxVOUYzMT4KKzxVOUYzMj4KKzxVOUYzND4KKzxVOUYzNz4KKzxVOUYzOT4KKzxVOUYzQT4KKzxVOUYzQz4KKzxVOUYzRD4KKzxVOUYzRj4KKzxVOUY0MT4KKzxVOUY0Mz4KKzxVOUY0ND4KKzxVOUY0NT4KKzxVOUY0Nj4KKzxVOUY0Nz4KKzxVOUY1Mz4KKzxVOUY1NT4KKzxVOUY1Nj4KKzxVOUY1Nz4KKzxVOUY1OD4KKzxVOUY1QT4KKzxVOUY1RD4KKzxVOUY1RT4KKzxVOUY2OD4KKzxVOUY2OT4KKzxVOUY2RD4KKzxVOUY2RT4KKzxVOUY2Rj4KKzxVOUY3MD4KKzxVOUY3MT4KKzxVOUY3Mz4KKzxVOUY3NT4KKzxVOUY3QT4KKzxVOUY3RD4KKzxVOUY4Rj4KKzxVOUY5MD4KKzxVOUY5MT4KKzxVOUY5Mj4KKzxVOUY5ND4KKzxVOUY5Nj4KKzxVOUY5Nz4KKzxVOUY5RT4KKzxVOUZBMT4KKzxVOUZBMj4KKzxVOUZBMz4KKzxVOUZBNT4KK1VOREVGSU5FRAorb3JkZXJfZW5kCitFTkQgTENfQ09MTEFURQorCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDI4PjxVMDA1Qj48VTAwNzk+PFUwMDU5PjxVRkY1OT48VUZGMzk+PFUwMDVEPi8KKzxVMDA3Qz48VTMwNkY+PFUzMDQ0PjxVMDA3Qz48VTMwQ0Y+PFUzMEE0PjxVMDAyOT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDI4PjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVRkY0RT48VUZGMkU+PFUwMDVEPi8KKzxVMDA3Qz48VTMwNDQ+PFUzMDQ0PjxVMzA0OD48VTAwN0M+PFUzMEE0PjxVMzBBND48VTMwQTg+PFUwMDI5PiIKK3llc3N0ciAgIjxVMzA2Rj48VTMwNDQ+Igorbm9zdHIgICAiPFUzMDQ0PjxVMzA0ND48VTMwNDg+IgorRU5EIExDX01FU1NBR0VTCisKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbAkJIjxVMDA0QT48VTAwNTA+PFUwMDU5PjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wJCSI8VUZGRTU+IgorbW9uX2RlY2ltYWxfcG9pbnQJIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcAkiPFUwMDJDPiIKK21vbl9ncm91cGluZwkJMworcG9zaXRpdmVfc2lnbgkJIiIKK25lZ2F0aXZlX3NpZ24JCSI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzCQkwCitmcmFjX2RpZ2l0cwkJMAorcF9jc19wcmVjZWRlcwkJMQorcF9zZXBfYnlfc3BhY2UJCTAKK25fY3NfcHJlY2VkZXMJCTEKK25fc2VwX2J5X3NwYWNlCQkwCitwX3NpZ25fcG9zbgkJNAorbl9zaWduX3Bvc24JCTQKK2ludF9wX3NlcF9ieV9zcGFjZQkyCitpbnRfbl9zZXBfYnlfc3BhY2UJMgorRU5EIExDX01PTkVUQVJZCisKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludAkJIjxVMDAyRT4iCit0aG91c2FuZHNfc2VwCQkiPFUwMDJDPiIKK2dyb3VwaW5nCQkzCitFTkQgTENfTlVNRVJJQworCisKK0xDX1RJTUUKK2FiZGF5CSI8VTY1RTU+IjsiPFU2NzA4PiI7IjxVNzA2Qj4iOyI8VTZDMzQ+IjsiPFU2NzI4PiI7IjxVOTFEMT4iOyI8VTU3MUY+IgorCitkYXkJIjxVNjVFNT48VTY2REM+PFU2NUU1PiI7IjxVNjcwOD48VTY2REM+PFU2NUU1PiI7LworCSI8VTcwNkI+PFU2NkRDPjxVNjVFNT4iOyI8VTZDMzQ+PFU2NkRDPjxVNjVFNT4iOy8KKwkiPFU2NzI4PjxVNjZEQz48VTY1RTU+IjsiPFU5MUQxPjxVNjZEQz48VTY1RTU+IjsvCisJIjxVNTcxRj48VTY2REM+PFU2NUU1PiIKKworYWJtb24JIjxVMDAyMD48VTAwMzE+PFU2NzA4PiI7IjxVMDAyMD48VTAwMzI+PFU2NzA4PiI7LworCSI8VTAwMjA+PFUwMDMzPjxVNjcwOD4iOyI8VTAwMjA+PFUwMDM0PjxVNjcwOD4iOy8KKwkiPFUwMDIwPjxVMDAzNT48VTY3MDg+IjsiPFUwMDIwPjxVMDAzNj48VTY3MDg+IjsvCisJIjxVMDAyMD48VTAwMzc+PFU2NzA4PiI7IjxVMDAyMD48VTAwMzg+PFU2NzA4PiI7LworCSI8VTAwMjA+PFUwMDM5PjxVNjcwOD4iOyI8VTAwMzE+PFUwMDMwPjxVNjcwOD4iOy8KKwkiPFUwMDMxPjxVMDAzMT48VTY3MDg+IjsiPFUwMDMxPjxVMDAzMj48VTY3MDg+IgorCittb24JIjxVMDAzMT48VTY3MDg+IjsiPFUwMDMyPjxVNjcwOD4iOy8KKwkiPFUwMDMzPjxVNjcwOD4iOyI8VTAwMzQ+PFU2NzA4PiI7LworCSI8VTAwMzU+PFU2NzA4PiI7IjxVMDAzNj48VTY3MDg+IjsvCisJIjxVMDAzNz48VTY3MDg+IjsiPFUwMDM4PjxVNjcwOD4iOy8KKwkiPFUwMDM5PjxVNjcwOD4iOyI8VTAwMzE+PFUwMDMwPjxVNjcwOD4iOy8KKwkiPFUwMDMxPjxVMDAzMT48VTY3MDg+IjsiPFUwMDMxPjxVMDAzMj48VTY3MDg+IgorCitkX3RfZm10CSI8VTAwMjU+PFUwMDU5PjxVNUU3ND48VTAwMjU+PFUwMDZEPjxVNjcwOD48VTAwMjU+PFUwMDY0PjxVNjVFNT48VTAwMjA+PFUwMDI1PjxVMDA0OD48VTY2NDI+PFUwMDI1PjxVMDA0RD48VTUyMDY+PFUwMDI1PjxVMDA1Mz48VTc5RDI+IgorCitkX2ZtdAkiPFUwMDI1PjxVMDA1OT48VTVFNzQ+PFUwMDI1PjxVMDA2RD48VTY3MDg+PFUwMDI1PjxVMDA2ND48VTY1RTU+IgorCit0X2ZtdAkiPFUwMDI1PjxVMDA0OD48VTY2NDI+PFUwMDI1PjxVMDA0RD48VTUyMDY+PFUwMDI1PjxVMDA1Mz48VTc5RDI+IgorCithbV9wbQkiPFU1MzQ4PjxVNTI0RD4iOyI8VTUzNDg+PFU1RjhDPiIKKwordF9mbXRfYW1wbSAiPFUwMDI1PjxVMDA3MD48VTAwMjU+PFUwMDQ5PjxVNjY0Mj48VTAwMjU+PFUwMDREPjxVNTIwNj48VTAwMjU+PFUwMDUzPjxVNzlEMj4iCisKK2VyYQkiPFUwMDJCPjxVMDAzQT48VTAwMzI+PFUwMDNBPjxVMDAzMT48VTAwMzk+PFUwMDM5PjxVMDAzMD48VTAwMkY+PFUwMDMwPjxVMDAzMT48VTAwMkY+PFUwMDMwPjxVMDAzMT48VTAwM0E+PFUwMDJCPjxVMDAyQT48VTAwM0E+PFU1RTczPjxVNjIxMD48VTAwM0E+PFUwMDI1PjxVMDA0NT48VTAwNDM+PFUwMDI1PjxVMDA0NT48VTAwNzk+PFU1RTc0PiI7LworCSI8VTAwMkI+PFUwMDNBPjxVMDAzMT48VTAwM0E+PFUwMDMxPjxVMDAzOT48VTAwMzg+PFUwMDM5PjxVMDAyRj48VTAwMzA+PFUwMDMxPjxVMDAyRj48VTAwMzA+PFUwMDM4PjxVMDAzQT48VTAwMzE+PFUwMDM5PjxVMDAzOD48VTAwMzk+PFUwMDJGPjxVMDAzMT48VTAwMzI+PFUwMDJGPjxVMDAzMz48VTAwMzE+PFUwMDNBPjxVNUU3Mz48VTYyMTA+PFUwMDNBPjxVMDAyNT48VTAwNDU+PFUwMDQzPjxVNTE0Mz48VTVFNzQ+IjsvCisJIjxVMDAyQj48VTAwM0E+PFUwMDMyPjxVMDAzQT48VTAwMzE+PFUwMDM5PjxVMDAzMj48VTAwMzc+PFUwMDJGPjxVMDAzMD48VTAwMzE+PFUwMDJGPjxVMDAzMD48VTAwMzE+PFUwMDNBPjxVMDAzMT48VTAwMzk+PFUwMDM4PjxVMDAzOT48VTAwMkY+PFUwMDMwPjxVMDAzMT48VTAwMkY+PFUwMDMwPjxVMDAzNz48VTAwM0E+PFU2NjJEPjxVNTQ4Qz48VTAwM0E+PFUwMDI1PjxVMDA0NT48VTAwNDM+PFUwMDI1PjxVMDA0NT48VTAwNzk+PFU1RTc0PiI7LworCSI8VTAwMkI+PFUwMDNBPjxVMDAzMT48VTAwM0E+PFUwMDMxPjxVMDAzOT48VTAwMzI+PFUwMDM2PjxVMDAyRj48VTAwMzE+PFUwMDMyPjxVMDAyRj48VTAwMzI+PFUwMDM1PjxVMDAzQT48VTAwMzE+PFUwMDM5PjxVMDAzMj48VTAwMzY+PFUwMDJGPjxVMDAzMT48VTAwMzI+PFUwMDJGPjxVMDAzMz48VTAwMzE+PFUwMDNBPjxVNjYyRD48VTU0OEM+PFUwMDNBPjxVMDAyNT48VTAwNDU+PFUwMDQzPjxVNTE0Mz48VTVFNzQ+IjsvCisJIjxVMDAyQj48VTAwM0E+PFUwMDMyPjxVMDAzQT48VTAwMzE+PFUwMDM5PjxVMDAzMT48VTAwMzM+PFUwMDJGPjxVMDAzMD48VTAwMzE+PFUwMDJGPjxVMDAzMD48VTAwMzE+PFUwMDNBPjxVMDAzMT48VTAwMzk+PFUwMDMyPjxVMDAzNj48VTAwMkY+PFUwMDMxPjxVMDAzMj48VTAwMkY+PFUwMDMyPjxVMDAzND48VTAwM0E+PFU1OTI3PjxVNkI2Mz48VTAwM0E+PFUwMDI1PjxVMDA0NT48VTAwNDM+PFUwMDI1PjxVMDA0NT48VTAwNzk+PFU1RTc0PiI7LworCSI8VTAwMkI+PFUwMDNBPjxVMDAzMj48VTAwM0E+PFUwMDMxPjxVMDAzOT48VTAwMzE+PFUwMDMyPjxVMDAyRj48VTAwMzA+PFUwMDM3PjxVMDAyRj48VTAwMzM+PFUwMDMwPjxVMDAzQT48VTAwMzE+PFUwMDM5PjxVMDAzMT48VTAwMzI+PFUwMDJGPjxVMDAzMT48VTAwMzI+PFUwMDJGPjxVMDAzMz48VTAwMzE+PFUwMDNBPjxVNTkyNz48VTZCNjM+PFUwMDNBPjxVMDAyNT48VTAwNDU+PFUwMDQzPjxVNTE0Mz48VTVFNzQ+IjsvCisJIjxVMDAyQj48VTAwM0E+PFUwMDM2PjxVMDAzQT48VTAwMzE+PFUwMDM4PjxVMDAzNz48VTAwMzM+PFUwMDJGPjxVMDAzMD48VTAwMzE+PFUwMDJGPjxVMDAzMD48VTAwMzE+PFUwMDNBPjxVMDAzMT48VTAwMzk+PFUwMDMxPjxVMDAzMj48VTAwMkY+PFUwMDMwPjxVMDAzNz48VTAwMkY+PFUwMDMyPjxVMDAzOT48VTAwM0E+PFU2NjBFPjxVNkNCQj48VTAwM0E+PFUwMDI1PjxVMDA0NT48VTAwNDM+PFUwMDI1PjxVMDA0NT48VTAwNzk+PFU1RTc0PiI7LworCSI8VTAwMkI+PFUwMDNBPjxVMDAzMT48VTAwM0E+PFUwMDMwPjxVMDAzMD48VTAwMzA+PFUwMDMxPjxVMDAyRj48VTAwMzA+PFUwMDMxPjxVMDAyRj48VTAwMzA+PFUwMDMxPjxVMDAzQT48VTAwMzE+PFUwMDM4PjxVMDAzNz48VTAwMzI+PFUwMDJGPjxVMDAzMT48VTAwMzI+PFUwMDJGPjxVMDAzMz48VTAwMzE+PFUwMDNBPjxVODk3Rj48VTY2QTY+PFUwMDNBPjxVMDAyNT48VTAwNDU+PFUwMDQzPjxVMDAyNT48VTAwNDU+PFUwMDc5PjxVNUU3ND4iOy8KKwkiPFUwMDJCPjxVMDAzQT48VTAwMzE+PFUwMDNBPjxVMDAyRD48VTAwMzA+PFUwMDMwPjxVMDAzMD48VTAwMzE+PFUwMDJGPjxVMDAzMT48VTAwMzI+PFUwMDJGPjxVMDAzMz48VTAwMzE+PFUwMDNBPjxVMDAyRD48VTAwMkE+PFUwMDNBPjxVN0QwMD48VTUxNDM+PFU1MjREPjxVMDAzQT48VTAwMjU+PFUwMDQ1PjxVMDA0Mz48VTAwMjU+PFUwMDQ1PjxVMDA3OT48VTVFNzQ+IgorCitlcmFfZF9mbXQJIjxVMDAyNT48VTAwNDU+PFUwMDU5PjxVMDAyNT48VTAwNmQ+PFU2NzA4PjxVMDAyNT48VTAwNjQ+PFU2NUU1PiIKKworZXJhX2RfdF9mbXQJIjxVMDAyNT48VTAwNDU+PFUwMDU5PjxVMDAyNT48VTAwNkQ+PFU2NzA4PjxVMDAyNT48VTAwNjQ+PFU2NUU1PjxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVNjY0Mj48VTAwMjU+PFUwMDREPjxVNTIwNj48VTAwMjU+PFUwMDUzPjxVNzlEMj4iCisKKyUgIiVZPE5FTj4gJWIgJWU8TklDSEk+ICVBICVIOiVNOiVTICVaIgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNTk+PFU1RTc0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+LworPFUwMDY1PjxVNjVFNT48VTAwMjA+PFUwMDI1PjxVMDA0MT48VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1Pi8KKzxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCisKK2FsdF9kaWdpdHMJIjxVMzAwNz4iOyI8VTRFMDA+IjsiPFU0RThDPiI7IjxVNEUwOT4iOyI8VTU2REI+IjsiPFU0RTk0PiI7LworCQkiPFU1MTZEPiI7IjxVNEUwMz4iOyI8VTUxNkI+IjsiPFU0RTVEPiI7IjxVNTM0MT4iOy8KKwkJIjxVNTM0MT48VTRFMDA+IjsiPFU1MzQxPjxVNEU4Qz4iOyI8VTUzNDE+PFU0RTA5PiI7LworCQkiPFU1MzQxPjxVNTZEQj4iOyI8VTUzNDE+PFU0RTk0PiI7IjxVNTM0MT48VTUxNkQ+IjsvCisJCSI8VTUzNDE+PFU0RTAzPiI7IjxVNTM0MT48VTUxNkI+IjsiPFU1MzQxPjxVNEU1RD4iOy8KKwkJIjxVNEU4Qz48VTUzNDE+IjsiPFU0RThDPjxVNTM0MT48VTRFMDA+IjsvCisJCSI8VTRFOEM+PFU1MzQxPjxVNEU4Qz4iOyI8VTRFOEM+PFU1MzQxPjxVNEUwOT4iOy8KKwkJIjxVNEU4Qz48VTUzNDE+PFU1NkRCPiI7IjxVNEU4Qz48VTUzNDE+PFU0RTk0PiI7LworCQkiPFU0RThDPjxVNTM0MT48VTUxNkQ+IjsiPFU0RThDPjxVNTM0MT48VTRFMDM+IjsvCisJCSI8VTRFOEM+PFU1MzQxPjxVNTE2Qj4iOyI8VTRFOEM+PFU1MzQxPjxVNEU1RD4iOy8KKwkJIjxVNEUwOT48VTUzNDE+IjsiPFU0RTA5PjxVNTM0MT48VTRFMDA+IjsvCisJCSI8VTRFMDk+PFU1MzQxPjxVNEU4Qz4iOyI8VTRFMDk+PFU1MzQxPjxVNEUwOT4iOy8KKwkJIjxVNEUwOT48VTUzNDE+PFU1NkRCPiI7IjxVNEUwOT48VTUzNDE+PFU0RTk0PiI7LworCQkiPFU0RTA5PjxVNTM0MT48VTUxNkQ+IjsiPFU0RTA5PjxVNTM0MT48VTRFMDM+IjsvCisJCSI8VTRFMDk+PFU1MzQxPjxVNTE2Qj4iOyI8VTRFMDk+PFU1MzQxPjxVNEU1RD4iOy8KKwkJIjxVNTZEQj48VTUzNDE+IjsiPFU1NkRCPjxVNTM0MT48VTRFMDA+IjsvCisJCSI8VTU2REI+PFU1MzQxPjxVNEU4Qz4iOyI8VTU2REI+PFU1MzQxPjxVNEUwOT4iOy8KKwkJIjxVNTZEQj48VTUzNDE+PFU1NkRCPiI7IjxVNTZEQj48VTUzNDE+PFU0RTk0PiI7LworCQkiPFU1NkRCPjxVNTM0MT48VTUxNkQ+IjsiPFU1NkRCPjxVNTM0MT48VTRFMDM+IjsvCisJCSI8VTU2REI+PFU1MzQxPjxVNTE2Qj4iOyI8VTU2REI+PFU1MzQxPjxVNEU1RD4iOy8KKwkJIjxVNEU5ND48VTUzNDE+IjsiPFU0RTk0PjxVNTM0MT48VTRFMDA+IjsvCisJCSI8VTRFOTQ+PFU1MzQxPjxVNEU4Qz4iOyI8VTRFOTQ+PFU1MzQxPjxVNEUwOT4iOy8KKwkJIjxVNEU5ND48VTUzNDE+PFU1NkRCPiI7IjxVNEU5ND48VTUzNDE+PFU0RTk0PiI7LworCQkiPFU0RTk0PjxVNTM0MT48VTUxNkQ+IjsiPFU0RTk0PjxVNTM0MT48VTRFMDM+IjsvCisJCSI8VTRFOTQ+PFU1MzQxPjxVNTE2Qj4iOyI8VTRFOTQ+PFU1MzQxPjxVNEU1RD4iOy8KKwkJIjxVNTE2RD48VTUzNDE+IjsiPFU1MTZEPjxVNTM0MT48VTRFMDA+IjsvCisJCSI8VTUxNkQ+PFU1MzQxPjxVNEU4Qz4iOyI8VTUxNkQ+PFU1MzQxPjxVNEUwOT4iOy8KKwkJIjxVNTE2RD48VTUzNDE+PFU1NkRCPiI7IjxVNTE2RD48VTUzNDE+PFU0RTk0PiI7LworCQkiPFU1MTZEPjxVNTM0MT48VTUxNkQ+IjsiPFU1MTZEPjxVNTM0MT48VTRFMDM+IjsvCisJCSI8VTUxNkQ+PFU1MzQxPjxVNTE2Qj4iOyI8VTUxNkQ+PFU1MzQxPjxVNEU1RD4iOy8KKwkJIjxVNEUwMz48VTUzNDE+IjsiPFU0RTAzPjxVNTM0MT48VTRFMDA+IjsvCisJCSI8VTRFMDM+PFU1MzQxPjxVNEU4Qz4iOyI8VTRFMDM+PFU1MzQxPjxVNEUwOT4iOy8KKwkJIjxVNEUwMz48VTUzNDE+PFU1NkRCPiI7IjxVNEUwMz48VTUzNDE+PFU0RTk0PiI7LworCQkiPFU0RTAzPjxVNTM0MT48VTUxNkQ+IjsiPFU0RTAzPjxVNTM0MT48VTRFMDM+IjsvCisJCSI8VTRFMDM+PFU1MzQxPjxVNTE2Qj4iOyI8VTRFMDM+PFU1MzQxPjxVNEU1RD4iOy8KKwkJIjxVNTE2Qj48VTUzNDE+IjsiPFU1MTZCPjxVNTM0MT48VTRFMDA+IjsvCisJCSI8VTUxNkI+PFU1MzQxPjxVNEU4Qz4iOyI8VTUxNkI+PFU1MzQxPjxVNEUwOT4iOy8KKwkJIjxVNTE2Qj48VTUzNDE+PFU1NkRCPiI7IjxVNTE2Qj48VTUzNDE+PFU0RTk0PiI7LworCQkiPFU1MTZCPjxVNTM0MT48VTUxNkQ+IjsiPFU1MTZCPjxVNTM0MT48VTRFMDM+IjsvCisJCSI8VTUxNkI+PFU1MzQxPjxVNTE2Qj4iOyI8VTUxNkI+PFU1MzQxPjxVNEU1RD4iOy8KKwkJIjxVNEU1RD48VTUzNDE+IjsiPFU0RTVEPjxVNTM0MT48VTRFMDA+IjsvCisJCSI8VTRFNUQ+PFU1MzQxPjxVNEU4Qz4iOyI8VTRFNUQ+PFU1MzQxPjxVNEUwOT4iOy8KKwkJIjxVNEU1RD48VTUzNDE+PFU1NkRCPiI7IjxVNEU1RD48VTUzNDE+PFU0RTk0PiI7LworCQkiPFU0RTVEPjxVNTM0MT48VTUxNkQ+IjsiPFU0RTVEPjxVNTM0MT48VTRFMDM+IjsvCisJCSI8VTRFNUQ+PFU1MzQxPjxVNTE2Qj4iOyI8VTRFNUQ+PFU1MzQxPjxVNEU1RD4iCitFTkQgTENfVElNRQorCisKK0xDX1BBUEVSCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislIExDX1BBUEVSIGNhdGVnb3J5CitoZWlnaHQgICAgICAyOTcKK3dpZHRoICAgICAgIDIxMAorCitFTkQgTENfUEFQRVIKKworCitMQ19OQU1FCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislIExDX05BTUUgY2F0ZWdvcnkuCislCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA3MD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDY3PiIKK25hbWVfZ2VuICAgICI8VTY5RDg+IgorbmFtZV9tciAgICAgIjxVMDA0RD48VTAwNzI+PFUwMDJFPiIKK25hbWVfbXJzICAgICI8VTAwNEQ+PFUwMDcyPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9taXNzICAgIjxVMDA0RD48VTAwNjk+PFUwMDczPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9tcyAgICAgIjxVMDA0RD48VTAwNzM+PFUwMDJFPiIKKworRU5EIExDX05BTUUKKworCitMQ19BRERSRVNTCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislIExDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICI8VTAwMjU+PFUwMDdBPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDczPi8KKzxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA2NT48VTAwMjU+PFUwMDcyPiIKKworY291bnRyeV9hYjIgIjxVMDA0QT48VTAwNTA+IgorY291bnRyeV9hYjMgIjxVMDA0QT48VTAwNTA+PFUwMDRFPiIKK2NvdW50cnlfbnVtIDM5MgorRU5EIExDX0FERFJFU1MKKworCitMQ19URUxFUEhPTkUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUKK3RlbF9pbnRfZm10ICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDNCPjxVMDAyNT48VTAwNjE+PFUwMDIwPi8KKzxVMDAzQj48VTAwMjU+PFUwMDZDPiIKK2ludF9wcmVmaXggICI8VTAwMzg+PFUwMDMxPiIKKworRU5EIExDX1RFTEVQSE9ORQorCisKK0xDX01FQVNVUkVNRU5UCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislCittZWFzdXJlbWVudCAxCisKK0VORCBMQ19NRUFTVVJFTUVOVApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMva2FfR0UgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9rYV9HRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTM1OTE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMva2FfR0UKQEAgLTAsMCArMSwxNjUgQEAKK2VzY2FwZV9jaGFyIC8KK2NvbW1lbnRfY2hhciAlCislIGNoYXJzZXQgIkdFT1JHSUFOLVBTIgorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgIkdlb3JnaWFuIGxhbmd1YWdlIGxvY2FsZSBmb3IgR2VvcmdpYSIKK3NvdXJjZSAiIgorYWRkcmVzcyAiIgorY29udGFjdCAiUGFibG8gU2FyYXR4YWdhIgorZW1haWwgInNydHhnQGNoYW5hZS5hbHBoYW5ldC5jaCIKK3RlbCAiIgorZmF4ICIiCitsYW5ndWFnZSAiR2VvcmdpYW4iCit0ZXJyaXRvcnkgIkdlb3JnaWEiCityZXZpc2lvbiAiMC42IgorZGF0ZSAiMjAwMS0wMS0yNiIKKworY2F0ZWdvcnkga2FfR0U6MjAwMDtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkga2FfR0U6MjAwMDtMQ19DVFlQRQorY2F0ZWdvcnkga2FfR0U6MjAwMDtMQ19DT0xMQVRFCitjYXRlZ29yeSBrYV9HRToyMDAwO0xDX1RJTUUKK2NhdGVnb3J5IGthX0dFOjIwMDA7TENfTlVNRVJJQworY2F0ZWdvcnkga2FfR0U6MjAwMDtMQ19QQVBFUgorY2F0ZWdvcnkga2FfR0U6MjAwMDtMQ19OQU1FCitjYXRlZ29yeSBrYV9HRToyMDAwO0xDX0FERFJFU1MKK2NhdGVnb3J5IGthX0dFOjIwMDA7TENfVEVMRVBIT05FCitjYXRlZ29yeSBrYV9HRToyMDAwO0xDX01FQVNVUkVNRU5UCitjYXRlZ29yeSBrYV9HRToyMDAwO0xDX01FU1NBR0VTCitjYXRlZ29yeSBrYV9HRToyMDAwO0xDX01PTkVUQVJZCisKKyUgSVNPL0lFQyAxNDY1MjogQ29udmVydGVkIGNvbW1lbnRzIHRvIExDX0lERU5USUZJQ0FUSU9OCislICBhZGRlZCBMQ19QQVBFUiwgTENfTUVBU1VSRU1FTlQsIExDX1RFTEVQSE9ORSwgTENfQUREUkVTUworJSAtLSBtY2tpbnN0cnlAY29tcHV0ZXIub3JnLCAyMDAwLTA2LTIwCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA3Mz48VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDM1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNDM+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCislIEZJWE1FIGNvdW50cnlfbmFtZSAgJ0dlb3JnaWEnIGluIEdlb3JnaWFuCislIGNvdW50cnlfcG9zdCAiR0UiIGZvciBHZW9yZ2lhID8KK2NvdW50cnlfYWIyICJHRSIKK2NvdW50cnlfYWIzICJHRU8iCitjb3VudHJ5X251bSAyNjgKK2NvdW50cnlfY2FyICJHRSIKK2NvdW50cnlfaXNibiAiOTk5MjgiCislIGxhbmdfbmFtZSBGSVhNRSBHZW9yZ2lhbiBpbiBHZW9yZ2lhbgorbGFuZ19hYiAia2EiCitsYW5nX3Rlcm0gImthdCIKK2xhbmdfbGliICJnZW8iCitFTkQgTENfQUREUkVTUworCitMQ19DT0xMQVRFCitjb3B5ICJpc28xNDY1MV90MSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJlbl9ESyIKK0VORCBMQ19DVFlQRQorCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgIjxVMDA0Nz48VTAwNDU+PFUwMDRDPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAiPFUxMERBPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICI8VTAwMkM+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgIjxVMDAyRT4iCittb25fZ3JvdXBpbmcgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgIDAKK25fY3NfcHJlY2VkZXMgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgIDAKK3Bfc2lnbl9wb3NuICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICI8VTAwMkU+IgorZ3JvdXBpbmcgICAgICAgICAgICAgMzszCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheQkvCisiPFUxMEQ5PjxVMTBENT48VTEwRDg+IjsvCisiPFUxMEREPjxVMTBFMD48VTEwRTg+IjsvCisiPFUxMEUxPjxVMTBEMD48VTEwREI+IjsvCisiPFUxMEREPjxVMTBENz48VTEwRUU+IjsvCisiPFUxMEVFPjxVMTBFMz48VTEwRDc+IjsvCisiPFUxMERFPjxVMTBEMD48VTEwRTA+IjsvCisiPFUxMEU4PjxVMTBEMD48VTEwRDE+IgorZGF5CS8KKyI8VTEwRDk+PFUxMEQ1PjxVMTBEOD48VTEwRTA+PFUxMEQwPiI7LworIjxVMTBERD48VTEwRTA+PFUxMEU4PjxVMTBEMD48VTEwRDE+PFUxMEQwPjxVMTBENz48VTEwRDg+IjsvCisiPFUxMEUxPjxVMTBEMD48VTEwREI+PFUxMEU4PjxVMTBEMD48VTEwRDE+PFUxMEQwPjxVMTBENz48VTEwRDg+IjsvCisiPFUxMEREPjxVMTBENz48VTEwRUU+PFUxMEU4PjxVMTBEMD48VTEwRDE+PFUxMEQwPjxVMTBENz48VTEwRDg+IjsvCisiPFUxMEVFPjxVMTBFMz48VTEwRDc+PFUxMEU4PjxVMTBEMD48VTEwRDE+PFUxMEQwPjxVMTBENz48VTEwRDg+IjsvCisiPFUxMERFPjxVMTBEMD48VTEwRTA+PFUxMEQwPjxVMTBFMT48VTEwRDk+PFUxMEQ0PjxVMTBENT48VTEwRDg+IjsvCisiPFUxMEU4PjxVMTBEMD48VTEwRDE+PFUxMEQwPjxVMTBENz48VTEwRDg+IgorYWJtb24JLworIjxVMTBEOD48VTEwRDA+PFUxMERDPiI7LworIjxVMTBENz48VTEwRDQ+PFUxMEQxPiI7LworIjxVMTBEQj48VTEwRDA+PFUxMEUwPiI7LworIjxVMTBEMD48VTEwREU+PFUxMEUwPiI7LworIjxVMTBEQj48VTEwRDA+PFUxMEQ4PiI7LworIjxVMTBEOD48VTEwRDU+PFUxMERDPiI7LworIjxVMTBEOD48VTEwRDU+PFUxMERBPiI7LworIjxVMTBEMD48VTEwRDI+PFUxMEQ1PiI7LworIjxVMTBFMT48VTEwRDQ+PFUxMEU1PiI7LworIjxVMTBERD48VTEwRTU+PFUxMEUyPiI7LworIjxVMTBEQz48VTEwREQ+PFUxMEQ0PiI7LworIjxVMTBEMz48VTEwRDQ+PFUxMEQ5PiIKK21vbgkvCisiPFUxMEQ4PjxVMTBEMD48VTEwREM+PFUxMEQ1PjxVMTBEMD48VTEwRTA+PFUxMEQ4PiI7LworIjxVMTBENz48VTEwRDQ+PFUxMEQxPjxVMTBEND48VTEwRTA+PFUxMEQ1PjxVMTBEMD48VTEwREE+PFUxMEQ4PiI7LworIjxVMTBEQj48VTEwRDA+PFUxMEUwPjxVMTBFMj48VTEwRDg+IjsvCisiPFUxMEQwPjxVMTBERT48VTEwRTA+PFUxMEQ4PjxVMTBEQT48VTEwRDg+IjsvCisiPFUxMERCPjxVMTBEMD48VTEwRDg+PFUxMEUxPjxVMTBEOD4iOy8KKyI8VTEwRDg+PFUxMEQ1PjxVMTBEQz48VTEwRDg+PFUxMEUxPjxVMTBEOD4iOy8KKyI8VTEwRDg+PFUxMEQ1PjxVMTBEQT48VTEwRDg+PFUxMEUxPjxVMTBEOD4iOy8KKyI8VTEwRDA+PFUxMEQyPjxVMTBENT48VTEwRDg+PFUxMEUxPjxVMTBFMj48VTEwREQ+IjsvCisiPFUxMEUxPjxVMTBEND48VTEwRTU+PFUxMEUyPjxVMTBEND48VTEwREI+PFUxMEQxPjxVMTBEND48VTEwRTA+PFUxMEQ4PiI7LworIjxVMTBERD48VTEwRTU+PFUxMEUyPjxVMTBERD48VTEwREI+PFUxMEQxPjxVMTBEND48VTEwRTA+PFUxMEQ4PiI7LworIjxVMTBEQz48VTEwREQ+PFUxMEQ0PjxVMTBEQj48VTEwRDE+PFUxMEQ0PjxVMTBFMD48VTEwRDg+IjsvCisiPFUxMEQzPjxVMTBEND48VTEwRDk+PFUxMEQ0PjxVMTBEQj48VTEwRDE+PFUxMEQ0PjxVMTBFMD48VTEwRDg+IgorCislIiVZINzKyNEgJWQgJUIiCitkX3RfZm10ICAiPFUwMDI1PjxVMDA1OT48VTAwMjA+PFUxMEVDPjxVMTBEQT48VTEwRDg+PFUxMEUxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDQyPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICAiPFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA1OT4iCit0X2ZtdCAgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICAiIjsiIgordF9mbXRfYW1wbSAgIiIKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCit5ZXNleHByICAiPFUwMDVFPjxVMDA1Qj48VTAwMzE+PFUwMDc5PjxVMDA1OT48VTAwNkI+PFUwMDRCPjxVMDA3OD48VTAwNTg+PFUxMEVFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgICI8VTAwNUU+PFUwMDVCPjxVMDAzMD48VTAwNkU+PFUwMDRFPjxVMDA2MT48VTAwNDE+PFUxMEQwPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCislIE1ldHJpYyBNZWFzdXJlbWVudCBzeXN0ZW0gKElTTyAxMDAwKQorTENfTUVBU1VSRU1FTlQKK21lYXN1cmVtZW50IDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCislIERlZmF1bHQgcGFwZXI6IEE0CitMQ19QQVBFUgoraGVpZ2h0IDI5Nword2lkdGggMjEwCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNkM+IgorJSBGSVhNRSBGaW5kIHRlbF9kb21fZm10CitpbnRfc2VsZWN0ICI8VTAwMzg+PFUwMDdFPjxVMDAzMT48VTAwMzA+IgoraW50X3ByZWZpeCAiPFUwMDM5PjxVMDAzOT48VTAwMzU+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19OQU1FCislIEZJWE1FCitjb3B5ICJlbl9ESyIKK0VORCBMQ19OQU1FCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ra19LWiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2trX0taCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYzM4OTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ra19LWgpAQCAtMCwwICsxLDI2NCBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIEthemFraCBMYW5ndWFnZSBMb2NhbGUgZm9yIEthemFraHN0YW4KKyUgU291cmNlOiBOSVBJLCBLYXpha2hzdGFuIENvcHBlciBDb3Jwb3JhdGlvbgorJSBBZGRyZXNzOiA2LCBHYWdhcmluLCA0NzcwMDAsIFpoZXprYXpnYW4sIEthemFraHN0YW4KKyUgQ29udGFjdDogVGltdXIgQmlyc2gKKyUgRW1haWw6IGJpcnNoQG1haWwua3oKKyUgVGVsOiArNyAoMzEwLTIpIDc0LTgwLTEyCislIEZheDoKKyUgTGFuZ3VhZ2U6IGtrCislIFRlcnJpdG9yeTogS1oKKyUgUmV2aXNpb246IDEuMAorJSBEYXRlOiAyMDAzLTA2LTA2CislIEFwcGxpY2F0aW9uOiBnZW5lcmFsCislIFVzZXJzOiBnZW5lcmFsCislIENoYXJzZXQ6IFBUMTU0CislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJLYXpha2ggbG9jYWxlIGZvciBLYXpha2hzdGFuIgorc291cmNlICAgICAiTklQSSwgS2F6YWtoc3RhbiBDb3BwZXIgQ29ycG9yYXRpb24iCithZGRyZXNzICAgICIiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiS2F6YWtoIgordGVycml0b3J5ICAiS2F6YWtoc3RhbiIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDMtMDYtMDYiCislCitjYXRlZ29yeSAgImtrX0taOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImtrX0taOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImtrX0taOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAia2tfS1o6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJra19LWjoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImtrX0taOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImtrX0taOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImtrX0taOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImtrX0taOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAia2tfS1o6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJra19LWjoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorCislIGlzbzE0NjUxX3QxIGlzIG1pc3NpbmcgVWtyYWluaWFuIGdoZQorY29sbGF0aW5nLXN5bWJvbCA8VUtSLUdIRT4KK2NvbGxhdGluZy1zeW1ib2wgPENZUi1TQ0hXQT4KK2NvbGxhdGluZy1zeW1ib2wgPENZUi1HSEUtV0lUSC1TVFJPS0U+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItS0EtV0lUSC1ERVNDRU5ERVI+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItRU4tV0lUSC1ERVNDRU5ERVI+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItQkFSUkVELU8+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItU1RSQUlHSFQtVS1XSVRILVNUUk9LRT4KK2NvbGxhdGluZy1zeW1ib2wgPENZUi1TVFJBSUdIVC1VPgorY29sbGF0aW5nLXN5bWJvbCA8Q1lSLVNISEE+Citjb2xsYXRpbmctc3ltYm9sIDxDWVItQkVMLVVLUi1JPgorCityZW9yZGVyLWFmdGVyIDxDWVItR1pIRT4KKzxVS1ItR0hFPgorCityZW9yZGVyLWFmdGVyIDxVMDQ1Mz4KKzxVMDQ5MT4gPFVLUi1HSEU+OzxCQVM+OzxNSU4+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDQwMz4KKzxVMDQ5MD4gPFVLUi1HSEU+OzxCQVM+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxDWVItQT4KKzxDWVItU0NIV0E+CisKK3Jlb3JkZXItYWZ0ZXIgPFUwNDMwPgorPFUwNEQ5PiA8Q1lSLVNDSFdBPjs8QkFTPjs8TUlOPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTA0MTA+Cis8VTA0RDg+IDxDWVItU0NIV0E+OzxCQVM+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxDWVItR0hFPgorPENZUi1HSEUtV0lUSC1TVFJPS0U+CisKK3Jlb3JkZXItYWZ0ZXIgPFUwNDMzPgorPFUwNDkzPiA8Q1lSLUdIRS1XSVRILVNUUk9LRT47PEJBUz47PE1JTj47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwNDEzPgorPFUwNDkyPiA8Q1lSLUdIRS1XSVRILVNUUk9LRT47PEJBUz47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPENZUi1LQT4KKzxDWVItS0EtV0lUSC1ERVNDRU5ERVI+CisKK3Jlb3JkZXItYWZ0ZXIgPFUwNDNBPgorPFUwNDlCPiA8Q1lSLUtBLVdJVEgtREVTQ0VOREVSPjs8QkFTPjs8TUlOPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTA0MUE+Cis8VTA0OUE+IDxDWVItS0EtV0lUSC1ERVNDRU5ERVI+OzxCQVM+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxDWVItRU4+Cis8Q1lSLUVOLVdJVEgtREVTQ0VOREVSPgorCityZW9yZGVyLWFmdGVyIDxVMDQzRD4KKzxVMDRBMz4gPENZUi1FTi1XSVRILURFU0NFTkRFUj47PEJBUz47PE1JTj47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwNDFEPgorPFUwNEEyPiA8Q1lSLUVOLVdJVEgtREVTQ0VOREVSPjs8QkFTPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8Q1lSLU8+Cis8Q1lSLUJBUlJFRC1PPgorCityZW9yZGVyLWFmdGVyIDxVMDQzRT4KKzxVMDRFOT4gPENZUi1CQVJSRUQtTz47PEJBUz47PE1JTj47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwNDFFPgorPFUwNEU4PiA8Q1lSLUJBUlJFRC1PPjs8QkFTPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8Q1lSLU9VPgorPENZUi1TVFJBSUdIVC1VPgorPENZUi1TVFJBSUdIVC1VLVdJVEgtU1RST0tFPgorCityZW9yZGVyLWFmdGVyIDxVMDQ0Mz4KKzxVMDRBRj4gPENZUi1TVFJBSUdIVC1VPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDRCMT4gPENZUi1TVFJBSUdIVC1VLVdJVEgtU1RST0tFPjs8QkFTPjs8TUlOPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTA0MjM+Cis8VTA0QUU+IDxDWVItU1RSQUlHSFQtVT47PEJBUz47PENBUD47SUdOT1JFCis8VTA0QjA+IDxDWVItU1RSQUlHSFQtVS1XSVRILVNUUk9LRT47PEJBUz47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPENZUi1IQT4KKzxDWVItU0hIQT4KKworcmVvcmRlci1hZnRlciA8VTA0NDU+Cis8VTA0QkI+IDxDWVItU0hIQT47PEJBUz47PE1JTj47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwNDI1PgorPFUwNEJBPiA8Q1lSLVNISEE+OzxCQVM+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxDWVItST4KKzxDWVItQkVMLVVLUi1JPgorCityZW9yZGVyLWFmdGVyIDxVMDQzOD4KKzxVMDQ1Nj4gPENZUi1CRUwtVUtSLUk+OzxCQVM+OzxNSU4+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDQxOD4KKzxVMDQwNj4gPENZUi1CRUwtVUtSLUk+OzxCQVM+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWVuZAorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTA0MTg+PFUwNDM4PjxVMDA1OT48VTAwNzk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTA0MTY+PFUwNDM2PjxVMDA0RT48VTAwNkU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAgICI8VTAwNEI+PFUwMDVBPjxVMDA1ND48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICAgICAiPFUwNDQyPjxVMDQzMz4iCittb25fZGVjaW1hbF9wb2ludCAgICAgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgICAiPFUwMDIwPiIKK21vbl9ncm91cGluZyAgICAgICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAgICAgMAorcF9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDAKK25fc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAgICAgICI8VTAwMkM+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAgICAiPFUwMDJFPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgICAgMzszCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCitkYXkgICAgICI8VTA0MTY+PFUwNDM1PjxVMDQzQT48VTA0NDE+PFUwNDM1PjxVMDQzRD48VTA0MzE+PFUwNDU2PiI7LworICAgICAgICAiPFUwNDE0PjxVMDRBRj48VTA0Mzk+PFUwNDQxPjxVMDQzNT48VTA0M0Q+PFUwNDMxPjxVMDQ1Nj4iOy8KKyAgICAgICAgIjxVMDQyMT48VTA0MzU+PFUwNDM5PjxVMDQ0MT48VTA0MzU+PFUwNDNEPjxVMDQzMT48VTA0NTY+IjsvCisgICAgICAgICI8VTA0MjE+PFUwNEQ5PjxVMDQ0MD48VTA0NDE+PFUwNDM1PjxVMDQzRD48VTA0MzE+PFUwNDU2PiI7LworICAgICAgICAiPFUwNDExPjxVMDQzNT48VTA0Mzk+PFUwNDQxPjxVMDQzNT48VTA0M0Q+PFUwNDMxPjxVMDQ1Nj4iOy8KKyAgICAgICAgIjxVMDQxNj48VTA0QjE+PFUwNDNDPjxVMDQzMD4iOy8KKyAgICAgICAgIjxVMDQyMT48VTA0MzU+PFUwNDNEPjxVMDQzMT48VTA0NTY+IgorYWJkYXkgICAiPFUwNDE2PjxVMDQzQT4iOy8KKyAgICAgICAgIjxVMDQxND48VTA0NDE+IjsvCisgICAgICAgICI8VTA0MjE+PFUwNDQxPiI7LworICAgICAgICAiPFUwNDIxPjxVMDQ0MD4iOy8KKyAgICAgICAgIjxVMDQxMT48VTA0NDE+IjsvCisgICAgICAgICI8VTA0MTY+PFUwNDNDPiI7LworICAgICAgICAiPFUwNDIxPjxVMDQzRD4iCittb24gICAgICI8VTA0OUE+PFUwNDMwPjxVMDRBMz48VTA0NDI+PFUwNDMwPjxVMDQ0MD4iOy8KKyAgICAgICAgIjxVMDQxMD48VTA0OUI+PFUwNDNGPjxVMDQzMD48VTA0M0Q+IjsvCisgICAgICAgICI8VTA0MUQ+PFUwNDMwPjxVMDQ0Mz48VTA0NDA+PFUwNDRCPjxVMDQzNz4iOy8KKyAgICAgICAgIjxVMDQyMT48VTA0RDk+PFUwNDQzPjxVMDQ1Nj48VTA0NDA+IjsvCisgICAgICAgICI8VTA0MUM+PFUwNDMwPjxVMDQzQz48VTA0NEI+PFUwNDQwPiI7LworICAgICAgICAiPFUwNDFDPjxVMDQzMD48VTA0NDM+PFUwNDQxPjxVMDQ0Qj48VTA0M0M+IjsvCisgICAgICAgICI8VTA0Mjg+PFUwNDU2PjxVMDQzQj48VTA0MzQ+PFUwNDM1PiI7LworICAgICAgICAiPFUwNDIyPjxVMDQzMD48VTA0M0M+PFUwNDRCPjxVMDQzNz4iOy8KKyAgICAgICAgIjxVMDQ5QT48VTA0NEI+PFUwNDQwPjxVMDQzQT48VTA0QUY+PFUwNDM5PjxVMDQzNT48VTA0M0E+IjsvCisgICAgICAgICI8VTA0OUE+PFUwNDMwPjxVMDQzNz48VTA0MzA+PFUwNDNEPiI7LworICAgICAgICAiPFUwNDlBPjxVMDQzMD48VTA0NDA+PFUwNDMwPjxVMDQ0OD48VTA0MzA+IjsvCisgICAgICAgICI8VTA0MTY+PFUwNDM1PjxVMDQzQj48VTA0NDI+PFUwNDNFPjxVMDQ5Qj48VTA0NDE+PFUwNDMwPjxVMDQzRD4iCithYm1vbiAgICI8VTA0OUE+PFUwNDMwPjxVMDRBMz4iOy8KKyAgICAgICAgIjxVMDQxMD48VTA0OUI+PFUwNDNGPiI7LworICAgICAgICAiPFUwNDFEPjxVMDQzMD48VTA0NDM+IjsvCisgICAgICAgICI8VTA0MjE+PFUwNEQ5PjxVMDQ0Mz4iOy8KKyAgICAgICAgIjxVMDQxQz48VTA0MzA+PFUwNDNDPiI7LworICAgICAgICAiPFUwNDFDPjxVMDQzMD48VTA0NDM+IjsvCisgICAgICAgICI8VTA0Mjg+PFUwNDU2PjxVMDQzQj4iOy8KKyAgICAgICAgIjxVMDQyMj48VTA0MzA+PFUwNDNDPiI7LworICAgICAgICAiPFUwNDlBPjxVMDQ0Qj48VTA0NDA+IjsvCisgICAgICAgICI8VTA0OUE+PFUwNDMwPjxVMDQzNz4iOy8KKyAgICAgICAgIjxVMDQ5QT48VTA0MzA+PFUwNDQwPiI7LworICAgICAgICAiPFUwNDE2PjxVMDQzNT48VTA0M0I+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj4vCis8VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND4iCitkX2ZtdCAgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJFPjxVMDAyNT48VTAwNkQ+PFUwMDJFPjxVMDAyNT48VTAwNTk+IgordF9mbXQgICAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgICAiIjsiIgordF9mbXRfYW1wbSAiIgorZGF0ZV9mbXQgICAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworTENfUEFQRVIKK2hlaWdodCAgIDI5Nword2lkdGggICAgMjEwCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzNz4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCislIEZJWE1FCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9rbF9HTCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2tsX0dMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ODk1MGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9rbF9HTApAQCAtMCwwICsxLDE0NiBAQAorZXNjYXBlX2NoYXIgLworY29tbWVudF9jaGFyICUKKworJSBHcmVlbmxhbmRpYyBsYW5ndWFnZSBsb2NhbGUgZm9yIEdyZWVubGFuZAorJSBTb3VyY2U6IERhbmlzaCBTdGFuZGFyZHMgQXNzb2NpYXRpb24KKyUgQWRkcmVzczogS29sbGVnaWV2ZWogNgorJSAgREstMjkyMCBDaGFybG90dGVubHVuZCwgRGFubWFyaworJSBDb250YWN0OiBLZWxkIFNpbW9uc2VuCislIEVtYWlsOiBLZWxkLlNpbW9uc2VuQGRrdXVnLmRrCislIFRlbDogKzQ1IC0gMzk5NjYxMDEKKyUgRmF4OiArNDUgLSAzOTk2NjEwMgorJSBMYW5ndWFnZToga2wKKyUgVGVycml0b3J5OiBHTAorJSBSZXZpc2lvbjogNC4zCislIERhdGU6IDE5OTYtMTAtMTUKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMuZHMKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorJQorJSBPbmx5IExDX1RJTUUgYW5kIExDX01FU1NBR0VTIGFyZQorJSBzcGVjaWZpZWQgaGVyZSwgZWxzZSB0aGUgZGFfREsgbG9jYWxlCislIGlzIHVzZWQuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJHcmVlbmxhbmRpYyBsb2NhbGUgZm9yIEdyZWVubGFuZCIKK3NvdXJjZSAgICAgIkRhbmlzaCBTdGFuZGFyZHMgQXNzb2NpYXRpb24iCithZGRyZXNzICAgICJLb2xsZWdpZXZlaiA2LCBESy0yOTIwIENoYXJsb3R0ZW5sdW5kLCBEYW5tYXJrIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkdyZWVubGFuZGljIgordGVycml0b3J5ICAiR3JlZW5sYW5kIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAia2xfR0w6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAia2xfR0w6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAia2xfR0w6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJrbF9HTDoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImtsX0dMOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAia2xfR0w6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAia2xfR0w6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAia2xfR0w6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAia2xfR0w6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJrbF9HTDoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImtsX0dMOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImRhX0RLIgorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKK2NvcHkgImRhX0RLIgorRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKK2NvcHkgImRhX0RLIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgImRhX0RLIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorYWJkYXkgICAgIjxVMDA3Mz48VTAwNjE+PFUwMDYyPiI7IjxVMDA2MT48VTAwNzQ+PFUwMDYxPiI7LworICAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA3MD48VTAwNjk+PFUwMDZFPiI7LworICAgICAgICAgIjxVMDA3Mz48VTAwNjk+PFUwMDczPiI7IjxVMDA3ND48VTAwNjE+PFUwMDZDPiI7LworICAgICAgICAgIjxVMDA2MT48VTAwNzI+PFUwMDY2PiIKK2RheSAgICAgICI8VTAwNzM+PFUwMDYxPjxVMDA2Mj48VTAwNjE+PFUwMDYxPjxVMDA3ND4iOy8KKyAgICAgICAgICI8VTAwNjE+PFUwMDc0PjxVMDA2MT48VTAwNjE+PFUwMDczPjxVMDA2OT48VTAwNkU+PFUwMDZFPjxVMDA2Nz48VTAwNkY+PFUwMDcyPjxVMDA2RT48VTAwNjU+PFUwMDcxPiI7LworICAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA2Qz48VTAwNzU+PFUwMDZFPjxVMDA2RT48VTAwNjc+PFUwMDZGPjxVMDA3Mj48VTAwNkU+PFUwMDY1PjxVMDA3MT4iOy8KKyAgICAgICAgICI8VTAwNzA+PFUwMDY5PjxVMDA2RT48VTAwNjc+PFUwMDYxPjxVMDA3Mz48VTAwNzU+PFUwMDZFPjxVMDA2RT48VTAwNjc+PFUwMDZGPjxVMDA3Mj48VTAwNkU+PFUwMDY1PjxVMDA3MT4iOy8KKyAgICAgICAgICI8VTAwNzM+PFUwMDY5PjxVMDA3Mz48VTAwNjE+PFUwMDZEPjxVMDA2MT48VTAwNkU+PFUwMDZFPjxVMDA2Nz48VTAwNkY+PFUwMDcyPjxVMDA2RT48VTAwNjU+PFUwMDcxPiI7LworICAgICAgICAgIjxVMDA3ND48VTAwNjE+PFUwMDZDPjxVMDA2Qz48VTAwNjk+PFUwMDZEPjxVMDA2MT48VTAwNkU+PFUwMDZFPjxVMDA2Nz48VTAwNkY+PFUwMDcyPjxVMDA2RT48VTAwNjU+PFUwMDcxPiI7LworICAgICAgICAgIjxVMDA2MT48VTAwNzI+PFUwMDY2PjxVMDA2OT48VTAwNkU+PFUwMDY5PjxVMDA2RT48VTAwNkU+PFUwMDY3PjxVMDA2Rj48VTAwNzI+PFUwMDZFPjxVMDA2NT48VTAwNzE+IgorYWJtb24gICAgIjxVMDA2QT48VTAwNjE+PFUwMDZFPiI7IjxVMDA2Nj48VTAwNjU+PFUwMDYyPiI7LworICAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2MT48VTAwNzA+PFUwMDcyPiI7LworICAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDZBPiI7IjxVMDA2QT48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPiI7IjxVMDA2MT48VTAwNzU+PFUwMDY3PiI7LworICAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA2Rj48VTAwNkI+PFUwMDc0PiI7LworICAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PiI7IjxVMDA2ND48VTAwNjU+PFUwMDYzPiIKK21vbiAgICAgICI8VTAwNkE+PFUwMDYxPjxVMDA2RT48VTAwNzU+PFUwMDYxPjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICAiPFUwMDY2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA3NT48VTAwNjE+PFUwMDcyPjxVMDA2OT4iOy8KKyAgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNzQ+PFUwMDczPjxVMDA2OT4iOy8KKyAgICAgICAgICI8VTAwNjE+PFUwMDcwPjxVMDA3Mj48VTAwNjk+PFUwMDZDPjxVMDA2OT4iOy8KKyAgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA2QT48VTAwNjk+IjsvCisgICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkU+PFUwMDY5PiI7LworICAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPjxVMDA2OT4iOy8KKyAgICAgICAgICI8VTAwNjE+PFUwMDc1PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND48VTAwNzU+PFUwMDczPjxVMDA2OT4iOy8KKyAgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICAiPFUwMDZGPjxVMDA2Qj48VTAwNzQ+PFUwMDZGPjxVMDA2Mj48VTAwNjU+PFUwMDcyPjxVMDA2OT4iOy8KKyAgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA3Nj48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPjxVMDA2OT4iOy8KKyAgICAgICAgICI8VTAwNjQ+PFUwMDY1PjxVMDA2Mz48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPjxVMDA2OT4iCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCit0X2ZtdCAgICAgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICAgICAiIjsiIgordF9mbXRfYW1wbSAgIiIKK2RhdGVfZm10ICAgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCit5ZXNleHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNEE+PFUwMDZBPjxVMDA1OT48VTAwNzk+PFUwMDQxPjxVMDA2MT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICAiPFUwMDVFPjxVMDA1Qj48VTAwNEU+PFUwMDZFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19QQVBFUgorJSBGSVhNRQoraGVpZ2h0ICAgMjk3CislIEZJWE1FCit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDMyPjxVMDAzOT48VTAwMzk+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorJSBGSVhNRQorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAiPFUwMDQ3PjxVMDA0Qz4iCitjb3VudHJ5X2FiMyAiPFUwMDQ3PjxVMDA1Mj48VTAwNEM+IgorY291bnRyeV9udW0gMzA0CitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMva21fS0ggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9rbV9LSApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODhlNTNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMva21fS0gKQEAgLTAsMCArMSwxOTA0IEBACitlc2NhcGVfY2hhciAvCitjb21tZW50X2NoYXIgJQorCislCislIEtobWVyIExhbmd1YWdlIExvY2FsZSBmb3IgQ2FtYm9kaWEKKyUKKyUgTmFtZTogICAgICAgICBrbV9LSAorJSBBdXRob3I6ICAgICAgIEplbnMgSGVyZGVuCislIENvbnRhY3Q6CislIEUtbWFpbDogICAgICAgamVuc0BraG1lcm9zLmluZm8KKyUgTGFuZ3VhZ2U6ICAgICBLaG1lcgorJSBUZXJyaXRvcnk6ICAgIENhbWJvZGlhCislIENoYXJzZXQ6ICAgICAgVVRGLTgKKyUgUmV2aXNpb246ICAgICAxLjAKKyUgRGF0ZTogICAgICAgICAyMDA1LTAzLTE1CislCisKKyUKKyUgQ29weXJpZ2h0IChDKSAyMDA1IE9wZW4gRm9ydW0gb2YgQ2FtYm9kaWEgKHd3dy5mb3J1bS5vcmcua2gpCisKKyUKKyUgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCislIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyUgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorJSB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyUgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCislIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CislCislIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCislIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorJQorJSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorJSBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyUgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyUgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyUgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCislIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorJSBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCislCislCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJLaG1lciBsb2NhbGUgZm9yIENhbWJvZGlhIgorc291cmNlICAgICAiIgorYWRkcmVzcyAgICAiIgorY29udGFjdCAgICAiSmVucyBIZXJkZW4gYXQ6IGplbnNAa2htZXJvcy5pbmZvIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIktobWVyIgordGVycml0b3J5ICAiQ2FtYm9kaWEiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDA1LTMtMTUiCislCitjYXRlZ29yeSAgImttX0tIOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImttX0tIOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImttX0tIOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAia21fS0g6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJrbV9LSDoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImttX0tIOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImttX0tIOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImttX0tIOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImttX0tIOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAia21fS0g6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJrbV9LSDoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCislY29weSAiaTE4biIKKwordXBwZXIJPFUwMDQxPjsvCisJPFUwMDQyPjsvCisJPFUwMDQzPjsvCisJPFUwMDQ0PjsvCisJPFUwMDQ1PjsvCisJPFUwMDQ2PjsvCisJPFUwMDQ3PjsvCisJPFUwMDQ4PjsvCisJPFUwMDQ5PjsvCisJPFUwMDRBPjsvCisJPFUwMDRCPjsvCisJPFUwMDRDPjsvCisJPFUwMDREPjsvCisJPFUwMDRFPjsvCisJPFUwMDRGPjsvCisJPFUwMDUwPjsvCisJPFUwMDUxPjsvCisJPFUwMDUyPjsvCisJPFUwMDUzPjsvCisJPFUwMDU0PjsvCisJPFUwMDU1PjsvCisJPFUwMDU2PjsvCisJPFUwMDU3PjsvCisJPFUwMDU4PjsvCisJPFUwMDU5PjsvCisJPFUwMDVBPgorCitsb3dlcgk8VTAwNjE+Oy8KKwk8VTAwNjI+Oy8KKwk8VTAwNjM+Oy8KKwk8VTAwNjQ+Oy8KKwk8VTAwNjU+Oy8KKwk8VTAwNjY+Oy8KKwk8VTAwNjc+Oy8KKwk8VTAwNjg+Oy8KKwk8VTAwNjk+Oy8KKwk8VTAwNkE+Oy8KKwk8VTAwNkI+Oy8KKwk8VTAwNkM+Oy8KKwk8VTAwNkQ+Oy8KKwk8VTAwNkU+Oy8KKwk8VTAwNkY+Oy8KKwk8VTAwNzA+Oy8KKwk8VTAwNzE+Oy8KKwk8VTAwNzI+Oy8KKwk8VTAwNzM+Oy8KKwk8VTAwNzQ+Oy8KKwk8VTAwNzU+Oy8KKwk8VTAwNzY+Oy8KKwk8VTAwNzc+Oy8KKwk8VTAwNzg+Oy8KKwk8VTAwNzk+Oy8KKwk8VTAwN0E+CisKK2FscGhhCTxVMDA0MT47LworCTxVMDA0Mj47LworCTxVMDA0Mz47LworCTxVMDA0ND47LworCTxVMDA0NT47LworCTxVMDA0Nj47LworCTxVMDA0Nz47LworCTxVMDA0OD47LworCTxVMDA0OT47LworCTxVMDA0QT47LworCTxVMDA0Qj47LworCTxVMDA0Qz47LworCTxVMDA0RD47LworCTxVMDA0RT47LworCTxVMDA0Rj47LworCTxVMDA1MD47LworCTxVMDA1MT47LworCTxVMDA1Mj47LworCTxVMDA1Mz47LworCTxVMDA1ND47LworCTxVMDA1NT47LworCTxVMDA1Nj47LworCTxVMDA1Nz47LworCTxVMDA1OD47LworCTxVMDA1OT47LworCTxVMDA1QT47LworCTxVMDA2MT47LworCTxVMDA2Mj47LworCTxVMDA2Mz47LworCTxVMDA2ND47LworCTxVMDA2NT47LworCTxVMDA2Nj47LworCTxVMDA2Nz47LworCTxVMDA2OD47LworCTxVMDA2OT47LworCTxVMDA2QT47LworCTxVMDA2Qj47LworCTxVMDA2Qz47LworCTxVMDA2RD47LworCTxVMDA2RT47LworCTxVMDA2Rj47LworCTxVMDA3MD47LworCTxVMDA3MT47LworCTxVMDA3Mj47LworCTxVMDA3Mz47LworCTxVMDA3ND47LworCTxVMDA3NT47LworCTxVMDA3Nj47LworCTxVMDA3Nz47LworCTxVMDA3OD47LworCTxVMDA3OT47LworCTxVMDA3QT47LworCTxVMTc4MD47LworCTxVMTc4MT47LworCTxVMTc4Mj47LworCTxVMTc4Mz47LworCTxVMTc4ND47LworCTxVMTc4NT47LworCTxVMTc4Nj47LworCTxVMTc4Nz47LworCTxVMTc4OD47LworCTxVMTc4OT47LworCTxVMTc4QT47LworCTxVMTc4Qj47LworCTxVMTc4Qz47LworCTxVMTc4RD47LworCTxVMTc4RT47LworCTxVMTc4Rj47LworCTxVMTc5MD47LworCTxVMTc5MT47LworCTxVMTc5Mj47LworCTxVMTc5Mz47LworCTxVMTc5ND47LworCTxVMTc5NT47LworCTxVMTc5Nj47LworCTxVMTc5Nz47LworCTxVMTc5OD47LworCTxVMTc5OT47LworCTxVMTc5QT47LworCTxVMTc5Qj47LworCTxVMTc5Qz47LworCTxVMTc5RD47LworCTxVMTc5RT47LworCTxVMTc5Rj47LworCTxVMTdBMD47LworCTxVMTdBMT47LworCTxVMTdBMj47LworCTxVMTdBMz47LworCTxVMTdBND47LworCTxVMTdBNT47LworCTxVMTdBNj47LworCTxVMTdBNz47LworCTxVMTdBOD47LworCTxVMTdBOT47LworCTxVMTdBQT47LworCTxVMTdBQj47LworCTxVMTdBQz47LworCTxVMTdBRD47LworCTxVMTdBRT47LworCTxVMTdBRj47LworCTxVMTdCMD47LworCTxVMTdCMT47LworCTxVMTdCMj47LworCTxVMTdCMz47LworCTxVMTdCNj47LworCTxVMTdCNz47LworCTxVMTdCOD47LworCTxVMTdCOT47LworCTxVMTdCQT47LworCTxVMTdCQj47LworCTxVMTdCQz47LworCTxVMTdCRD47LworCTxVMTdCRT47LworCTxVMTdCRj47LworCTxVMTdDMD47LworCTxVMTdDMT47LworCTxVMTdDMj47LworCTxVMTdDMz47LworCTxVMTdDND47LworCTxVMTdDNT47LworCTxVMTdDNj47LworCTxVMTdDNz47LworCTxVMTdDOD47LworCTxVMTdENz47LworCTxVMTdEQz4KKworc3BhY2UJPFUwMDA5PjsvCisJPFUwMDBBPjsvCisJPFUwMDBCPjsvCisJPFUwMDBDPjsvCisJPFUwMDBEPjsvCisJPFUwMDIwPgorCitjbnRybAk8VTAwMDA+Oy8KKwk8VTAwMDE+Oy8KKwk8VTAwMDI+Oy8KKwk8VTAwMDM+Oy8KKwk8VTAwMDQ+Oy8KKwk8VTAwMDU+Oy8KKwk8VTAwMDY+Oy8KKwk8VTAwMDc+Oy8KKwk8VTAwMDg+Oy8KKwk8VTAwMDk+Oy8KKwk8VTAwMEE+Oy8KKwk8VTAwMEI+Oy8KKwk8VTAwMEM+Oy8KKwk8VTAwMEQ+Oy8KKwk8VTAwMEU+Oy8KKwk8VTAwMEY+Oy8KKwk8VTAwMTA+Oy8KKwk8VTAwMTE+Oy8KKwk8VTAwMTI+Oy8KKwk8VTAwMTM+Oy8KKwk8VTAwMTQ+Oy8KKwk8VTAwMTU+Oy8KKwk8VTAwMTY+Oy8KKwk8VTAwMTc+Oy8KKwk8VTAwMTg+Oy8KKwk8VTAwMTk+Oy8KKwk8VTAwMUE+Oy8KKwk8VTAwMUI+Oy8KKwk8VTAwMUM+Oy8KKwk8VTAwMUQ+Oy8KKwk8VTAwMUU+Oy8KKwk8VTAwMUY+Oy8KKwk8VTAwN0Y+CisKK2dyYXBoCTxVMDAyMT47LworCTxVMDAyMj47LworCTxVMDAyMz47LworCTxVMDAyND47LworCTxVMDAyNT47LworCTxVMDAyNj47LworCTxVMDAyNz47LworCTxVMDAyOD47LworCTxVMDAyOT47LworCTxVMDAyQT47LworCTxVMDAyQj47LworCTxVMDAyQz47LworCTxVMDAyRD47LworCTxVMDAyRT47LworCTxVMDAyRj47LworCTxVMDAzMD47LworCTxVMDAzMT47LworCTxVMDAzMj47LworCTxVMDAzMz47LworCTxVMDAzND47LworCTxVMDAzNT47LworCTxVMDAzNj47LworCTxVMDAzNz47LworCTxVMDAzOD47LworCTxVMDAzOT47LworCTxVMDAzQT47LworCTxVMDAzQj47LworCTxVMDAzQz47LworCTxVMDAzRD47LworCTxVMDAzRT47LworCTxVMDAzRj47LworCTxVMDA0MD47LworCTxVMDA0MT47LworCTxVMDA0Mj47LworCTxVMDA0Mz47LworCTxVMDA0ND47LworCTxVMDA0NT47LworCTxVMDA0Nj47LworCTxVMDA0Nz47LworCTxVMDA0OD47LworCTxVMDA0OT47LworCTxVMDA0QT47LworCTxVMDA0Qj47LworCTxVMDA0Qz47LworCTxVMDA0RD47LworCTxVMDA0RT47LworCTxVMDA0Rj47LworCTxVMDA1MD47LworCTxVMDA1MT47LworCTxVMDA1Mj47LworCTxVMDA1Mz47LworCTxVMDA1ND47LworCTxVMDA1NT47LworCTxVMDA1Nj47LworCTxVMDA1Nz47LworCTxVMDA1OD47LworCTxVMDA1OT47LworCTxVMDA1QT47LworCTxVMDA1Qj47LworCTxVMDA1Qz47LworCTxVMDA1RD47LworCTxVMDA1RT47LworCTxVMDA1Rj47LworCTxVMDA2MD47LworCTxVMDA2MT47LworCTxVMDA2Mj47LworCTxVMDA2Mz47LworCTxVMDA2ND47LworCTxVMDA2NT47LworCTxVMDA2Nj47LworCTxVMDA2Nz47LworCTxVMDA2OD47LworCTxVMDA2OT47LworCTxVMDA2QT47LworCTxVMDA2Qj47LworCTxVMDA2Qz47LworCTxVMDA2RD47LworCTxVMDA2RT47LworCTxVMDA2Rj47LworCTxVMDA3MD47LworCTxVMDA3MT47LworCTxVMDA3Mj47LworCTxVMDA3Mz47LworCTxVMDA3ND47LworCTxVMDA3NT47LworCTxVMDA3Nj47LworCTxVMDA3Nz47LworCTxVMDA3OD47LworCTxVMDA3OT47LworCTxVMDA3QT47LworCTxVMDA3Qj47LworCTxVMDA3Qz47LworCTxVMDA3RD47LworCTxVMDA3RT47LworCTxVMTc4MD47LworCTxVMTc4MT47LworCTxVMTc4Mj47LworCTxVMTc4Mz47LworCTxVMTc4ND47LworCTxVMTc4NT47LworCTxVMTc4Nj47LworCTxVMTc4Nz47LworCTxVMTc4OD47LworCTxVMTc4OT47LworCTxVMTc4QT47LworCTxVMTc4Qj47LworCTxVMTc4Qz47LworCTxVMTc4RD47LworCTxVMTc4RT47LworCTxVMTc4Rj47LworCTxVMTc5MD47LworCTxVMTc5MT47LworCTxVMTc5Mj47LworCTxVMTc5Mz47LworCTxVMTc5ND47LworCTxVMTc5NT47LworCTxVMTc5Nj47LworCTxVMTc5Nz47LworCTxVMTc5OD47LworCTxVMTc5OT47LworCTxVMTc5QT47LworCTxVMTc5Qj47LworCTxVMTc5Qz47LworCTxVMTc5RD47LworCTxVMTc5RT47LworCTxVMTc5Rj47LworCTxVMTdBMD47LworCTxVMTdBMT47LworCTxVMTdBMj47LworCTxVMTdBMz47LworCTxVMTdBND47LworCTxVMTdBNT47LworCTxVMTdBNj47LworCTxVMTdBNz47LworCTxVMTdBOD47LworCTxVMTdBOT47LworCTxVMTdBQT47LworCTxVMTdBQj47LworCTxVMTdBQz47LworCTxVMTdBRD47LworCTxVMTdBRT47LworCTxVMTdBRj47LworCTxVMTdCMD47LworCTxVMTdCMT47LworCTxVMTdCMj47LworCTxVMTdCMz47LworCTxVMTdCNj47LworCTxVMTdCNz47LworCTxVMTdCOD47LworCTxVMTdCOT47LworCTxVMTdCQT47LworCTxVMTdCQj47LworCTxVMTdCQz47LworCTxVMTdCRD47LworCTxVMTdCRT47LworCTxVMTdCRj47LworCTxVMTdDMD47LworCTxVMTdDMT47LworCTxVMTdDMj47LworCTxVMTdDMz47LworCTxVMTdDND47LworCTxVMTdDNT47LworCTxVMTdDNj47LworCTxVMTdDNz47LworCTxVMTdDOD47LworCTxVMTdDOT47LworCTxVMTdDQT47LworCTxVMTdDQj47LworCTxVMTdDQz47LworCTxVMTdDRD47LworCTxVMTdDRT47LworCTxVMTdDRj47LworCTxVMTdEMD47LworCTxVMTdEMT47LworCTxVMTdEMj47LworCTxVMTdEMz47LworCTxVMTdEND47LworCTxVMTdENT47LworCTxVMTdENj47LworCTxVMTdENz47LworCTxVMTdEOD47LworCTxVMTdEOT47LworCTxVMTdEQT47LworCTxVMTdEQj47LworCTxVMTdEQz47LworCTxVMTdERD47LworCTxVMTdFMD47LworCTxVMTdFMT47LworCTxVMTdFMj47LworCTxVMTdFMz47LworCTxVMTdFND47LworCTxVMTdFNT47LworCTxVMTdFNj47LworCTxVMTdFNz47LworCTxVMTdFOD47LworCTxVMTdFOT47LworCTxVMTdGMD47LworCTxVMTdGMT47LworCTxVMTdGMj47LworCTxVMTdGMz47LworCTxVMTdGND47LworCTxVMTdGNT47LworCTxVMTdGNj47LworCTxVMTdGNz47LworCTxVMTdGOD47LworCTxVMTdGOT47LworCTxVMTlFMD47LworCTxVMTlFMT47LworCTxVMTlFMj47LworCTxVMTlFMz47LworCTxVMTlFND47LworCTxVMTlFNT47LworCTxVMTlFNj47LworCTxVMTlFNz47LworCTxVMTlFOD47LworCTxVMTlFOT47LworCTxVMTlFQT47LworCTxVMTlFQj47LworCTxVMTlFQz47LworCTxVMTlFRD47LworCTxVMTlFRT47LworCTxVMTlFRj47LworCTxVMTlGMD47LworCTxVMTlGMT47LworCTxVMTlGMj47LworCTxVMTlGMz47LworCTxVMTlGND47LworCTxVMTlGNT47LworCTxVMTlGNj47LworCTxVMTlGNz47LworCTxVMTlGOD47LworCTxVMTlGOT47LworCTxVMTlGQT47LworCTxVMTlGQj47LworCTxVMTlGQz47LworCTxVMTlGRD47LworCTxVMTlGRT47LworCTxVMTlGRj4KKworcHJpbnQJPFUwMDIwPjsvCisJPFUwMDIxPjsvCisJPFUwMDIyPjsvCisJPFUwMDIzPjsvCisJPFUwMDI0PjsvCisJPFUwMDI1PjsvCisJPFUwMDI2PjsvCisJPFUwMDI3PjsvCisJPFUwMDI4PjsvCisJPFUwMDI5PjsvCisJPFUwMDJBPjsvCisJPFUwMDJCPjsvCisJPFUwMDJDPjsvCisJPFUwMDJEPjsvCisJPFUwMDJFPjsvCisJPFUwMDJGPjsvCisJPFUwMDMwPjsvCisJPFUwMDMxPjsvCisJPFUwMDMyPjsvCisJPFUwMDMzPjsvCisJPFUwMDM0PjsvCisJPFUwMDM1PjsvCisJPFUwMDM2PjsvCisJPFUwMDM3PjsvCisJPFUwMDM4PjsvCisJPFUwMDM5PjsvCisJPFUwMDNBPjsvCisJPFUwMDNCPjsvCisJPFUwMDNDPjsvCisJPFUwMDNEPjsvCisJPFUwMDNFPjsvCisJPFUwMDNGPjsvCisJPFUwMDQwPjsvCisJPFUwMDQxPjsvCisJPFUwMDQyPjsvCisJPFUwMDQzPjsvCisJPFUwMDQ0PjsvCisJPFUwMDQ1PjsvCisJPFUwMDQ2PjsvCisJPFUwMDQ3PjsvCisJPFUwMDQ4PjsvCisJPFUwMDQ5PjsvCisJPFUwMDRBPjsvCisJPFUwMDRCPjsvCisJPFUwMDRDPjsvCisJPFUwMDREPjsvCisJPFUwMDRFPjsvCisJPFUwMDRGPjsvCisJPFUwMDUwPjsvCisJPFUwMDUxPjsvCisJPFUwMDUyPjsvCisJPFUwMDUzPjsvCisJPFUwMDU0PjsvCisJPFUwMDU1PjsvCisJPFUwMDU2PjsvCisJPFUwMDU3PjsvCisJPFUwMDU4PjsvCisJPFUwMDU5PjsvCisJPFUwMDVBPjsvCisJPFUwMDVCPjsvCisJPFUwMDVDPjsvCisJPFUwMDVEPjsvCisJPFUwMDVFPjsvCisJPFUwMDVGPjsvCisJPFUwMDYwPjsvCisJPFUwMDYxPjsvCisJPFUwMDYyPjsvCisJPFUwMDYzPjsvCisJPFUwMDY0PjsvCisJPFUwMDY1PjsvCisJPFUwMDY2PjsvCisJPFUwMDY3PjsvCisJPFUwMDY4PjsvCisJPFUwMDY5PjsvCisJPFUwMDZBPjsvCisJPFUwMDZCPjsvCisJPFUwMDZDPjsvCisJPFUwMDZEPjsvCisJPFUwMDZFPjsvCisJPFUwMDZGPjsvCisJPFUwMDcwPjsvCisJPFUwMDcxPjsvCisJPFUwMDcyPjsvCisJPFUwMDczPjsvCisJPFUwMDc0PjsvCisJPFUwMDc1PjsvCisJPFUwMDc2PjsvCisJPFUwMDc3PjsvCisJPFUwMDc4PjsvCisJPFUwMDc5PjsvCisJPFUwMDdBPjsvCisJPFUwMDdCPjsvCisJPFUwMDdDPjsvCisJPFUwMDdEPjsvCisJPFUwMDdFPjsvCisJPFUxNzgwPjsvCisJPFUxNzgxPjsvCisJPFUxNzgyPjsvCisJPFUxNzgzPjsvCisJPFUxNzg0PjsvCisJPFUxNzg1PjsvCisJPFUxNzg2PjsvCisJPFUxNzg3PjsvCisJPFUxNzg4PjsvCisJPFUxNzg5PjsvCisJPFUxNzhBPjsvCisJPFUxNzhCPjsvCisJPFUxNzhDPjsvCisJPFUxNzhEPjsvCisJPFUxNzhFPjsvCisJPFUxNzhGPjsvCisJPFUxNzkwPjsvCisJPFUxNzkxPjsvCisJPFUxNzkyPjsvCisJPFUxNzkzPjsvCisJPFUxNzk0PjsvCisJPFUxNzk1PjsvCisJPFUxNzk2PjsvCisJPFUxNzk3PjsvCisJPFUxNzk4PjsvCisJPFUxNzk5PjsvCisJPFUxNzlBPjsvCisJPFUxNzlCPjsvCisJPFUxNzlDPjsvCisJPFUxNzlEPjsvCisJPFUxNzlFPjsvCisJPFUxNzlGPjsvCisJPFUxN0EwPjsvCisJPFUxN0ExPjsvCisJPFUxN0EyPjsvCisJPFUxN0EzPjsvCisJPFUxN0E0PjsvCisJPFUxN0E1PjsvCisJPFUxN0E2PjsvCisJPFUxN0E3PjsvCisJPFUxN0E4PjsvCisJPFUxN0E5PjsvCisJPFUxN0FBPjsvCisJPFUxN0FCPjsvCisJPFUxN0FDPjsvCisJPFUxN0FEPjsvCisJPFUxN0FFPjsvCisJPFUxN0FGPjsvCisJPFUxN0IwPjsvCisJPFUxN0IxPjsvCisJPFUxN0IyPjsvCisJPFUxN0IzPjsvCisJPFUxN0I2PjsvCisJPFUxN0I3PjsvCisJPFUxN0I4PjsvCisJPFUxN0I5PjsvCisJPFUxN0JBPjsvCisJPFUxN0JCPjsvCisJPFUxN0JDPjsvCisJPFUxN0JEPjsvCisJPFUxN0JFPjsvCisJPFUxN0JGPjsvCisJPFUxN0MwPjsvCisJPFUxN0MxPjsvCisJPFUxN0MyPjsvCisJPFUxN0MzPjsvCisJPFUxN0M0PjsvCisJPFUxN0M1PjsvCisJPFUxN0M2PjsvCisJPFUxN0M3PjsvCisJPFUxN0M4PjsvCisJPFUxN0M5PjsvCisJPFUxN0NBPjsvCisJPFUxN0NCPjsvCisJPFUxN0NDPjsvCisJPFUxN0NEPjsvCisJPFUxN0NFPjsvCisJPFUxN0NGPjsvCisJPFUxN0QwPjsvCisJPFUxN0QxPjsvCisJPFUxN0QyPjsvCisJPFUxN0QzPjsvCisJPFUxN0Q0PjsvCisJPFUxN0Q1PjsvCisJPFUxN0Q2PjsvCisJPFUxN0Q3PjsvCisJPFUxN0Q4PjsvCisJPFUxN0Q5PjsvCisJPFUxN0RBPjsvCisJPFUxN0RCPjsvCisJPFUxN0RDPjsvCisJPFUxN0REPjsvCisJPFUxN0UwPjsvCisJPFUxN0UxPjsvCisJPFUxN0UyPjsvCisJPFUxN0UzPjsvCisJPFUxN0U0PjsvCisJPFUxN0U1PjsvCisJPFUxN0U2PjsvCisJPFUxN0U3PjsvCisJPFUxN0U4PjsvCisJPFUxN0U5PjsvCisJPFUxN0YwPjsvCisJPFUxN0YxPjsvCisJPFUxN0YyPjsvCisJPFUxN0YzPjsvCisJPFUxN0Y0PjsvCisJPFUxN0Y1PjsvCisJPFUxN0Y2PjsvCisJPFUxN0Y3PjsvCisJPFUxN0Y4PjsvCisJPFUxN0Y5PjsvCisJPFUxOUUwPjsvCisJPFUxOUUxPjsvCisJPFUxOUUyPjsvCisJPFUxOUUzPjsvCisJPFUxOUU0PjsvCisJPFUxOUU1PjsvCisJPFUxOUU2PjsvCisJPFUxOUU3PjsvCisJPFUxOUU4PjsvCisJPFUxOUU5PjsvCisJPFUxOUVBPjsvCisJPFUxOUVCPjsvCisJPFUxOUVDPjsvCisJPFUxOUVEPjsvCisJPFUxOUVFPjsvCisJPFUxOUVGPjsvCisJPFUxOUYwPjsvCisJPFUxOUYxPjsvCisJPFUxOUYyPjsvCisJPFUxOUYzPjsvCisJPFUxOUY0PjsvCisJPFUxOUY1PjsvCisJPFUxOUY2PjsvCisJPFUxOUY3PjsvCisJPFUxOUY4PjsvCisJPFUxOUY5PjsvCisJPFUxOUZBPjsvCisJPFUxOUZCPjsvCisJPFUxOUZDPjsvCisJPFUxOUZEPjsvCisJPFUxOUZFPjsvCisJPFUxOUZGPgorCitwdW5jdAk8VTAwMjE+Oy8KKwk8VTAwMjI+Oy8KKwk8VTAwMjM+Oy8KKwk8VTAwMjU+Oy8KKwk8VTAwMjY+Oy8KKwk8VTAwMjc+Oy8KKwk8VTAwMjg+Oy8KKwk8VTAwMjk+Oy8KKwk8VTAwMkE+Oy8KKwk8VTAwMkM+Oy8KKwk8VTAwMkQ+Oy8KKwk8VTAwMkU+Oy8KKwk8VTAwMkY+Oy8KKwk8VTAwM0E+Oy8KKwk8VTAwM0I+Oy8KKwk8VTAwM0Y+Oy8KKwk8VTAwNDA+Oy8KKwk8VTAwNUI+Oy8KKwk8VTAwNUM+Oy8KKwk8VTAwNUQ+Oy8KKwk8VTAwNUY+Oy8KKwk8VTAwN0I+Oy8KKwk8VTAwN0Q+Oy8KKwk8VTE3RDQ+Oy8KKwk8VTE3RDU+Oy8KKwk8VTE3RDY+Oy8KKwk8VTE3RDg+Oy8KKwk8VTE3RDk+Oy8KKwk8VTE3REE+CisKK2RpZ2l0CTxVMDAzMD47LworCTxVMDAzMT47LworCTxVMDAzMj47LworCTxVMDAzMz47LworCTxVMDAzND47LworCTxVMDAzNT47LworCTxVMDAzNj47LworCTxVMDAzNz47LworCTxVMDAzOD47LworCTxVMDAzOT4KKworeGRpZ2l0CTxVMDAzMD47LworCTxVMDAzMT47LworCTxVMDAzMj47LworCTxVMDAzMz47LworCTxVMDAzND47LworCTxVMDAzNT47LworCTxVMDAzNj47LworCTxVMDAzNz47LworCTxVMDAzOD47LworCTxVMDAzOT47LworCTxVMDA0MT47LworCTxVMDA0Mj47LworCTxVMDA0Mz47LworCTxVMDA0ND47LworCTxVMDA0NT47LworCTxVMDA0Nj47LworCTxVMDA2MT47LworCTxVMDA2Mj47LworCTxVMDA2Mz47LworCTxVMDA2ND47LworCTxVMDA2NT47LworCTxVMDA2Nj4KKworYmxhbmsJPFUwMDA5PjsvCisJPFUwMDIwPgorCit0b3VwcGVyCSg8VTAwNjE+LDxVMDA0MT4pOy8KKwkoPFUwMDYyPiw8VTAwNDI+KTsvCisJKDxVMDA2Mz4sPFUwMDQzPik7LworCSg8VTAwNjQ+LDxVMDA0ND4pOy8KKwkoPFUwMDY1Piw8VTAwNDU+KTsvCisJKDxVMDA2Nj4sPFUwMDQ2Pik7LworCSg8VTAwNjc+LDxVMDA0Nz4pOy8KKwkoPFUwMDY4Piw8VTAwNDg+KTsvCisJKDxVMDA2OT4sPFUwMDQ5Pik7LworCSg8VTAwNkE+LDxVMDA0QT4pOy8KKwkoPFUwMDZCPiw8VTAwNEI+KTsvCisJKDxVMDA2Qz4sPFUwMDRDPik7LworCSg8VTAwNkQ+LDxVMDA0RD4pOy8KKwkoPFUwMDZFPiw8VTAwNEU+KTsvCisJKDxVMDA2Rj4sPFUwMDRGPik7LworCSg8VTAwNzA+LDxVMDA1MD4pOy8KKwkoPFUwMDcxPiw8VTAwNTE+KTsvCisJKDxVMDA3Mj4sPFUwMDUyPik7LworCSg8VTAwNzM+LDxVMDA1Mz4pOy8KKwkoPFUwMDc0Piw8VTAwNTQ+KTsvCisJKDxVMDA3NT4sPFUwMDU1Pik7LworCSg8VTAwNzY+LDxVMDA1Nj4pOy8KKwkoPFUwMDc3Piw8VTAwNTc+KTsvCisJKDxVMDA3OD4sPFUwMDU4Pik7LworCSg8VTAwNzk+LDxVMDA1OT4pOy8KKwkoPFUwMDdBPiw8VTAwNUE+KQorCit0b2xvd2VyCSg8VTAwNDE+LDxVMDA2MT4pOy8KKwkoPFUwMDQyPiw8VTAwNjI+KTsvCisJKDxVMDA0Mz4sPFUwMDYzPik7LworCSg8VTAwNDQ+LDxVMDA2ND4pOy8KKwkoPFUwMDQ1Piw8VTAwNjU+KTsvCisJKDxVMDA0Nj4sPFUwMDY2Pik7LworCSg8VTAwNDc+LDxVMDA2Nz4pOy8KKwkoPFUwMDQ4Piw8VTAwNjg+KTsvCisJKDxVMDA0OT4sPFUwMDY5Pik7LworCSg8VTAwNEE+LDxVMDA2QT4pOy8KKwkoPFUwMDRCPiw8VTAwNkI+KTsvCisJKDxVMDA0Qz4sPFUwMDZDPik7LworCSg8VTAwNEQ+LDxVMDA2RD4pOy8KKwkoPFUwMDRFPiw8VTAwNkU+KTsvCisJKDxVMDA0Rj4sPFUwMDZGPik7LworCSg8VTAwNTA+LDxVMDA3MD4pOy8KKwkoPFUwMDUxPiw8VTAwNzE+KTsvCisJKDxVMDA1Mj4sPFUwMDcyPik7LworCSg8VTAwNTM+LDxVMDA3Mz4pOy8KKwkoPFUwMDU0Piw8VTAwNzQ+KTsvCisJKDxVMDA1NT4sPFUwMDc1Pik7LworCSg8VTAwNTY+LDxVMDA3Nj4pOy8KKwkoPFUwMDU3Piw8VTAwNzc+KTsvCisJKDxVMDA1OD4sPFUwMDc4Pik7LworCSg8VTAwNTk+LDxVMDA3OT4pOy8KKwkoPFUwMDVBPiw8VTAwN0E+KQorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorCislCisKK2NvbGxhdGluZy1lbGVtZW50IDxLSE1FUl9MRVRURVJfS0EtS0hNRVJfU0lHTl9ST0JBVD4gZnJvbSAiPFUxNzgwPjxVMTdDQz4iCitjb2xsYXRpbmctZWxlbWVudCA8S0hNRVJfTEVUVEVSX0tIQS1LSE1FUl9TSUdOX1JPQkFUPiBmcm9tICI8VTE3ODE+PFUxN0NDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxLSE1FUl9MRVRURVJfS08tS0hNRVJfU0lHTl9ST0JBVD4gZnJvbSAiPFUxNzgyPjxVMTdDQz4iCitjb2xsYXRpbmctZWxlbWVudCA8S0hNRVJfTEVUVEVSX0tITy1LSE1FUl9TSUdOX1JPQkFUPiBmcm9tICI8VTE3ODM+PFUxN0NDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxLSE1FUl9MRVRURVJfTkdPLUtITUVSX1NJR05fUk9CQVQ+IGZyb20gIjxVMTc4ND48VTE3Q0M+IgorY29sbGF0aW5nLWVsZW1lbnQgPEtITUVSX0xFVFRFUl9DQS1LSE1FUl9TSUdOX1JPQkFUPiBmcm9tICI8VTE3ODU+PFUxN0NDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxLSE1FUl9MRVRURVJfQ0hBLUtITUVSX1NJR05fUk9CQVQ+IGZyb20gIjxVMTc4Nj48VTE3Q0M+IgorY29sbGF0aW5nLWVsZW1lbnQgPEtITUVSX0xFVFRFUl9DTy1LSE1FUl9TSUdOX1JPQkFUPiBmcm9tICI8VTE3ODc+PFUxN0NDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxLSE1FUl9MRVRURVJfQ0hPLUtITUVSX1NJR05fUk9CQVQ+IGZyb20gIjxVMTc4OD48VTE3Q0M+IgorY29sbGF0aW5nLWVsZW1lbnQgPEtITUVSX0xFVFRFUl9OWU8tS0hNRVJfU0lHTl9ST0JBVD4gZnJvbSAiPFUxNzg5PjxVMTdDQz4iCitjb2xsYXRpbmctZWxlbWVudCA8S0hNRVJfTEVUVEVSX0RBLUtITUVSX1NJR05fUk9CQVQ+IGZyb20gIjxVMTc4QT48VTE3Q0M+IgorY29sbGF0aW5nLWVsZW1lbnQgPEtITUVSX0xFVFRFUl9UVEhBLUtITUVSX1NJR05fUk9CQVQ+IGZyb20gIjxVMTc4Qj48VTE3Q0M+IgorY29sbGF0aW5nLWVsZW1lbnQgPEtITUVSX0xFVFRFUl9ETy1LSE1FUl9TSUdOX1JPQkFUPiBmcm9tICI8VTE3OEM+PFUxN0NDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxLSE1FUl9MRVRURVJfVFRITy1LSE1FUl9TSUdOX1JPQkFUPiBmcm9tICI8VTE3OEQ+PFUxN0NDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxLSE1FUl9MRVRURVJfTk5PLUtITUVSX1NJR05fUk9CQVQ+IGZyb20gIjxVMTc4RT48VTE3Q0M+IgorY29sbGF0aW5nLWVsZW1lbnQgPEtITUVSX0xFVFRFUl9UQS1LSE1FUl9TSUdOX1JPQkFUPiBmcm9tICI8VTE3OEY+PFUxN0NDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxLSE1FUl9MRVRURVJfVEhBLUtITUVSX1NJR05fUk9CQVQ+IGZyb20gIjxVMTc5MD48VTE3Q0M+IgorY29sbGF0aW5nLWVsZW1lbnQgPEtITUVSX0xFVFRFUl9UTy1LSE1FUl9TSUdOX1JPQkFUPiBmcm9tICI8VTE3OTE+PFUxN0NDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxLSE1FUl9MRVRURVJfVEhPLUtITUVSX1NJR05fUk9CQVQ+IGZyb20gIjxVMTc5Mj48VTE3Q0M+IgorY29sbGF0aW5nLWVsZW1lbnQgPEtITUVSX0xFVFRFUl9OTy1LSE1FUl9TSUdOX1JPQkFUPiBmcm9tICI8VTE3OTM+PFUxN0NDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxLSE1FUl9MRVRURVJfQkEtS0hNRVJfU0lHTl9ST0JBVD4gZnJvbSAiPFUxNzk0PjxVMTdDQz4iCitjb2xsYXRpbmctZWxlbWVudCA8S0hNRVJfTEVUVEVSX1BIQS1LSE1FUl9TSUdOX1JPQkFUPiBmcm9tICI8VTE3OTU+PFUxN0NDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxLSE1FUl9MRVRURVJfUE8tS0hNRVJfU0lHTl9ST0JBVD4gZnJvbSAiPFUxNzk2PjxVMTdDQz4iCitjb2xsYXRpbmctZWxlbWVudCA8S0hNRVJfTEVUVEVSX1BITy1LSE1FUl9TSUdOX1JPQkFUPiBmcm9tICI8VTE3OTc+PFUxN0NDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxLSE1FUl9MRVRURVJfTU8tS0hNRVJfU0lHTl9ST0JBVD4gZnJvbSAiPFUxNzk4PjxVMTdDQz4iCitjb2xsYXRpbmctZWxlbWVudCA8S0hNRVJfTEVUVEVSX1lPLUtITUVSX1NJR05fUk9CQVQ+IGZyb20gIjxVMTc5OT48VTE3Q0M+IgorY29sbGF0aW5nLWVsZW1lbnQgPEtITUVSX0xFVFRFUl9STy1LSE1FUl9TSUdOX1JPQkFUPiBmcm9tICI8VTE3OUE+PFUxN0NDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxLSE1FUl9JTkRFUEVOREVOVF9WT1dFTF9SWS1LSE1FUl9TSUdOX1JPQkFUPiBmcm9tICI8VTE3QUI+PFUxN0NDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxLSE1FUl9JTkRFUEVOREVOVF9WT1dFTF9SWVktS0hNRVJfU0lHTl9ST0JBVD4gZnJvbSAiPFUxN0FDPjxVMTdDQz4iCitjb2xsYXRpbmctZWxlbWVudCA8S0hNRVJfTEVUVEVSX0xPLUtITUVSX1NJR05fUk9CQVQ+IGZyb20gIjxVMTc5Qj48VTE3Q0M+IgorY29sbGF0aW5nLWVsZW1lbnQgPEtITUVSX0lOREVQRU5ERU5UX1ZPV0VMX0xZLUtITUVSX1NJR05fUk9CQVQ+IGZyb20gIjxVMTdBRD48VTE3Q0M+IgorY29sbGF0aW5nLWVsZW1lbnQgPEtITUVSX0lOREVQRU5ERU5UX1ZPV0VMX0xZWS1LSE1FUl9TSUdOX1JPQkFUPiBmcm9tICI8VTE3QUU+PFUxN0NDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxLSE1FUl9MRVRURVJfVk8tS0hNRVJfU0lHTl9ST0JBVD4gZnJvbSAiPFUxNzlDPjxVMTdDQz4iCitjb2xsYXRpbmctZWxlbWVudCA8S0hNRVJfTEVUVEVSX1NIQS1LSE1FUl9TSUdOX1JPQkFUPiBmcm9tICI8VTE3OUQ+PFUxN0NDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxLSE1FUl9MRVRURVJfU1NPLUtITUVSX1NJR05fUk9CQVQ+IGZyb20gIjxVMTc5RT48VTE3Q0M+IgorY29sbGF0aW5nLWVsZW1lbnQgPEtITUVSX0xFVFRFUl9TQS1LSE1FUl9TSUdOX1JPQkFUPiBmcm9tICI8VTE3OUY+PFUxN0NDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxLSE1FUl9MRVRURVJfSEEtS0hNRVJfU0lHTl9ST0JBVD4gZnJvbSAiPFUxN0EwPjxVMTdDQz4iCitjb2xsYXRpbmctZWxlbWVudCA8S0hNRVJfTEVUVEVSX0xBLUtITUVSX1NJR05fUk9CQVQ+IGZyb20gIjxVMTdBMT48VTE3Q0M+IgorY29sbGF0aW5nLWVsZW1lbnQgPEtITUVSX0xFVFRFUl9RQS1LSE1FUl9TSUdOX1JPQkFUPiBmcm9tICI8VTE3QTI+PFUxN0NDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxLSE1FUl9JTkRFUEVOREVOVF9WT1dFTF9RQVEtS0hNRVJfU0lHTl9ST0JBVD4gZnJvbSAiPFUxN0EzPjxVMTdDQz4iCitjb2xsYXRpbmctZWxlbWVudCA8S0hNRVJfVk9XRUxfU0lHTl9VLUtITUVSX1NJR05fTklLQUhJVD4gZnJvbSAiPFUxN0JCPjxVMTdDNj4iCitjb2xsYXRpbmctZWxlbWVudCA8S0hNRVJfVk9XRUxfU0lHTl9BQS1LSE1FUl9TSUdOX05JS0FISVQ+IGZyb20gIjxVMTdCNj48VTE3QzY+IgorCisKKyUgRGVmaW5lIGNvbGxhdGlvbiB3ZWlnaHRzIGFzIHN5bWJvbHMKKworY29sbGF0aW5nLXN5bWJvbCA8WDAwMDE+Citjb2xsYXRpbmctc3ltYm9sIDxYMDAwNT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMDA2PgorY29sbGF0aW5nLXN5bWJvbCA8WDAwMDc+Citjb2xsYXRpbmctc3ltYm9sIDxYMDAwOD4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMDE1PgorY29sbGF0aW5nLXN5bWJvbCA8WDAwMTk+Citjb2xsYXRpbmctc3ltYm9sIDxYMDAyNT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMDg3PgorY29sbGF0aW5nLXN5bWJvbCA8WDAwODg+Citjb2xsYXRpbmctc3ltYm9sIDxYMDA4OT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMDhBPgorY29sbGF0aW5nLXN5bWJvbCA8WDAwOEI+Citjb2xsYXRpbmctc3ltYm9sIDxYMDA4Qz4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMDhEPgorY29sbGF0aW5nLXN5bWJvbCA8WDAwOEU+Citjb2xsYXRpbmctc3ltYm9sIDxYMDA4Rj4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMDkwPgorY29sbGF0aW5nLXN5bWJvbCA8WDAwOTE+Citjb2xsYXRpbmctc3ltYm9sIDxYMDA5Mj4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMDkzPgorY29sbGF0aW5nLXN5bWJvbCA8WDAwOTQ+Citjb2xsYXRpbmctc3ltYm9sIDxYMDA5NT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMDk2PgorY29sbGF0aW5nLXN5bWJvbCA8WDAwOTc+Citjb2xsYXRpbmctc3ltYm9sIDxYMDA5OD4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMDk5PgorY29sbGF0aW5nLXN5bWJvbCA8WDAwOUE+Citjb2xsYXRpbmctc3ltYm9sIDxYMDA5Qj4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMDlDPgorY29sbGF0aW5nLXN5bWJvbCA8WDAwOUQ+Citjb2xsYXRpbmctc3ltYm9sIDxYMDA5RT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMDlGPgorY29sbGF0aW5nLXN5bWJvbCA8WDAwQTA+Citjb2xsYXRpbmctc3ltYm9sIDxYMDBBMT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMEEyPgorY29sbGF0aW5nLXN5bWJvbCA8WDAwQTM+Citjb2xsYXRpbmctc3ltYm9sIDxYMDBBND4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMEE1PgorY29sbGF0aW5nLXN5bWJvbCA8WDAwQTY+Citjb2xsYXRpbmctc3ltYm9sIDxYMDBBNz4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMEE4PgorY29sbGF0aW5nLXN5bWJvbCA8WDAwQTk+Citjb2xsYXRpbmctc3ltYm9sIDxYMDBBQT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMEFCPgorY29sbGF0aW5nLXN5bWJvbCA8WDAwQUM+Citjb2xsYXRpbmctc3ltYm9sIDxYMDBBRD4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMEMwPgorY29sbGF0aW5nLXN5bWJvbCA8WDAwRDY+Citjb2xsYXRpbmctc3ltYm9sIDxYMDBENz4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMEQ4PgorY29sbGF0aW5nLXN5bWJvbCA8WDAwRDk+Citjb2xsYXRpbmctc3ltYm9sIDxYMDBEQT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMERCPgorY29sbGF0aW5nLXN5bWJvbCA8WDAwREM+Citjb2xsYXRpbmctc3ltYm9sIDxYMDBERD4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMERFPgorY29sbGF0aW5nLXN5bWJvbCA8WDAwREY+Citjb2xsYXRpbmctc3ltYm9sIDxYMDBFMj4KK2NvbGxhdGluZy1zeW1ib2wgPFgwNDAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDA1MDA+Citjb2xsYXRpbmctc3ltYm9sIDxYMDUwNz4KK2NvbGxhdGluZy1zeW1ib2wgPFgwNTA5PgorY29sbGF0aW5nLXN5bWJvbCA8WDA1MEI+Citjb2xsYXRpbmctc3ltYm9sIDxYMDUwRD4KK2NvbGxhdGluZy1zeW1ib2wgPFgwNTBGPgorY29sbGF0aW5nLXN5bWJvbCA8WDA2MDA+Citjb2xsYXRpbmctc3ltYm9sIDxYMDcwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFgwNzY0PgorY29sbGF0aW5nLXN5bWJvbCA8WDA3NkE+Citjb2xsYXRpbmctc3ltYm9sIDxYMDc4Mj4KK2NvbGxhdGluZy1zeW1ib2wgPFgwNzhFPgorY29sbGF0aW5nLXN5bWJvbCA8WDA3QUE+Citjb2xsYXRpbmctc3ltYm9sIDxYMDdDMD4KK2NvbGxhdGluZy1zeW1ib2wgPFgwN0M2PgorY29sbGF0aW5nLXN5bWJvbCA8WDA3RUU+Citjb2xsYXRpbmctc3ltYm9sIDxYMDdGNj4KK2NvbGxhdGluZy1zeW1ib2wgPFgwODAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDA4MEI+Citjb2xsYXRpbmctc3ltYm9sIDxYMDgyRT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwODNGPgorY29sbGF0aW5nLXN5bWJvbCA8WDA4NEQ+Citjb2xsYXRpbmctc3ltYm9sIDxYMDg2MT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwODYzPgorY29sbGF0aW5nLXN5bWJvbCA8WDA4NjU+Citjb2xsYXRpbmctc3ltYm9sIDxYMDg2Nz4KK2NvbGxhdGluZy1zeW1ib2wgPFgwODY5PgorY29sbGF0aW5nLXN5bWJvbCA8WDA4NkI+Citjb2xsYXRpbmctc3ltYm9sIDxYMDhERj4KK2NvbGxhdGluZy1zeW1ib2wgPFgwOEUxPgorY29sbGF0aW5nLXN5bWJvbCA8WDA4RTk+Citjb2xsYXRpbmctc3ltYm9sIDxYMDhFRD4KK2NvbGxhdGluZy1zeW1ib2wgPFgwOEVGPgorY29sbGF0aW5nLXN5bWJvbCA8WDA4RjU+Citjb2xsYXRpbmctc3ltYm9sIDxYMDhGNz4KK2NvbGxhdGluZy1zeW1ib2wgPFgwOTAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDBBMDA+Citjb2xsYXRpbmctc3ltYm9sIDxYMEE1Mz4KK2NvbGxhdGluZy1zeW1ib2wgPFgwQTU1PgorY29sbGF0aW5nLXN5bWJvbCA8WDBBNTc+Citjb2xsYXRpbmctc3ltYm9sIDxYMEE1OT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwQTVCPgorY29sbGF0aW5nLXN5bWJvbCA8WDBBNUQ+Citjb2xsYXRpbmctc3ltYm9sIDxYMEE1Rj4KK2NvbGxhdGluZy1zeW1ib2wgPFgwQTYxPgorY29sbGF0aW5nLXN5bWJvbCA8WDBBNjM+Citjb2xsYXRpbmctc3ltYm9sIDxYMEE2NT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwQTY3PgorY29sbGF0aW5nLXN5bWJvbCA8WDBBNjk+Citjb2xsYXRpbmctc3ltYm9sIDxYMEE2Qj4KK2NvbGxhdGluZy1zeW1ib2wgPFgwQTZEPgorY29sbGF0aW5nLXN5bWJvbCA8WDBBNkY+Citjb2xsYXRpbmctc3ltYm9sIDxYMEE3MT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwQTczPgorY29sbGF0aW5nLXN5bWJvbCA8WDBBNzU+Citjb2xsYXRpbmctc3ltYm9sIDxYMEE3Nz4KK2NvbGxhdGluZy1zeW1ib2wgPFgwQTc5PgorY29sbGF0aW5nLXN5bWJvbCA8WDBBN0I+Citjb2xsYXRpbmctc3ltYm9sIDxYMEE3RD4KK2NvbGxhdGluZy1zeW1ib2wgPFgwQTdGPgorY29sbGF0aW5nLXN5bWJvbCA8WDBBODE+Citjb2xsYXRpbmctc3ltYm9sIDxYMEE4Mz4KK2NvbGxhdGluZy1zeW1ib2wgPFgwQTg1PgorY29sbGF0aW5nLXN5bWJvbCA8WDBBODc+Citjb2xsYXRpbmctc3ltYm9sIDxYMEE4OT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwQThCPgorY29sbGF0aW5nLXN5bWJvbCA8WDBBOEQ+Citjb2xsYXRpbmctc3ltYm9sIDxYMEE4Rj4KK2NvbGxhdGluZy1zeW1ib2wgPFgwQTkxPgorY29sbGF0aW5nLXN5bWJvbCA8WDBCMDA+Citjb2xsYXRpbmctc3ltYm9sIDxYMEJCMz4KK2NvbGxhdGluZy1zeW1ib2wgPFgwQkJCPgorY29sbGF0aW5nLXN5bWJvbCA8WDBCQkQ+Citjb2xsYXRpbmctc3ltYm9sIDxYMEJCRj4KK2NvbGxhdGluZy1zeW1ib2wgPFgwQkMzPgorY29sbGF0aW5nLXN5bWJvbCA8WDBCQzk+Citjb2xsYXRpbmctc3ltYm9sIDxYMEMwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFgyMzNDPgorY29sbGF0aW5nLXN5bWJvbCA8WDIzNEM+Citjb2xsYXRpbmctc3ltYm9sIDxYMjM3MD4KK2NvbGxhdGluZy1zeW1ib2wgPFgyMzcyPgorY29sbGF0aW5nLXN5bWJvbCA8WDIzNzQ+Citjb2xsYXRpbmctc3ltYm9sIDxYMjM3Nj4KK2NvbGxhdGluZy1zeW1ib2wgPFgyMzc4PgorY29sbGF0aW5nLXN5bWJvbCA8WDIzN0E+Citjb2xsYXRpbmctc3ltYm9sIDxYMjM3Qz4KK2NvbGxhdGluZy1zeW1ib2wgPFgyMzdFPgorY29sbGF0aW5nLXN5bWJvbCA8WDIzODA+Citjb2xsYXRpbmctc3ltYm9sIDxYMjM4Mj4KK2NvbGxhdGluZy1zeW1ib2wgPFgyNjAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDI4MDA+Citjb2xsYXRpbmctc3ltYm9sIDxYMkEwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFgyQzAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDJFMDA+Citjb2xsYXRpbmctc3ltYm9sIDxYMzAwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFgzMjAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDM0MDA+Citjb2xsYXRpbmctc3ltYm9sIDxYMzYwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFgzODAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDNBMDA+Citjb2xsYXRpbmctc3ltYm9sIDxYM0MwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFgzRTAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDQwMDA+Citjb2xsYXRpbmctc3ltYm9sIDxYNDIwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFg0NDAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDQ2MDA+Citjb2xsYXRpbmctc3ltYm9sIDxYNDgwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFg0QTAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDRDMDA+Citjb2xsYXRpbmctc3ltYm9sIDxYNEUwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFg1MDAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDUyMDA+Citjb2xsYXRpbmctc3ltYm9sIDxYNTQwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFg1NjAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDU4MDA+Citjb2xsYXRpbmctc3ltYm9sIDxYN0EyMD4KK2NvbGxhdGluZy1zeW1ib2wgPFg3QTIyPgorY29sbGF0aW5nLXN5bWJvbCA8WDdBMjQ+Citjb2xsYXRpbmctc3ltYm9sIDxYN0EyNj4KK2NvbGxhdGluZy1zeW1ib2wgPFg3QTI4PgorY29sbGF0aW5nLXN5bWJvbCA8WDdBMkE+Citjb2xsYXRpbmctc3ltYm9sIDxYN0EyQz4KK2NvbGxhdGluZy1zeW1ib2wgPFg3QTJFPgorY29sbGF0aW5nLXN5bWJvbCA8WDdBMzA+Citjb2xsYXRpbmctc3ltYm9sIDxYN0EzMj4KK2NvbGxhdGluZy1zeW1ib2wgPFg3QTM0PgorY29sbGF0aW5nLXN5bWJvbCA8WDdBMzY+Citjb2xsYXRpbmctc3ltYm9sIDxYN0EzOD4KK2NvbGxhdGluZy1zeW1ib2wgPFg3QTNBPgorY29sbGF0aW5nLXN5bWJvbCA8WDdBM0M+Citjb2xsYXRpbmctc3ltYm9sIDxYN0EzRT4KK2NvbGxhdGluZy1zeW1ib2wgPFg3QTQwPgorY29sbGF0aW5nLXN5bWJvbCA8WDdBNDI+Citjb2xsYXRpbmctc3ltYm9sIDxYN0E0ND4KK2NvbGxhdGluZy1zeW1ib2wgPFg3QTQ2PgorY29sbGF0aW5nLXN5bWJvbCA8WDdBNDg+Citjb2xsYXRpbmctc3ltYm9sIDxYN0E0QT4KK2NvbGxhdGluZy1zeW1ib2wgPFg3QTRDPgorY29sbGF0aW5nLXN5bWJvbCA8WDdBNEU+Citjb2xsYXRpbmctc3ltYm9sIDxYN0E1MD4KK2NvbGxhdGluZy1zeW1ib2wgPFg3QTUyPgorY29sbGF0aW5nLXN5bWJvbCA8WDdBNTQ+Citjb2xsYXRpbmctc3ltYm9sIDxYN0E1NT4KK2NvbGxhdGluZy1zeW1ib2wgPFg3QTU2PgorY29sbGF0aW5nLXN5bWJvbCA8WDdBNTc+Citjb2xsYXRpbmctc3ltYm9sIDxYN0E1OD4KK2NvbGxhdGluZy1zeW1ib2wgPFg3QTVBPgorY29sbGF0aW5nLXN5bWJvbCA8WDdBNUM+Citjb2xsYXRpbmctc3ltYm9sIDxYN0E1RT4KK2NvbGxhdGluZy1zeW1ib2wgPFg3QTYwPgorY29sbGF0aW5nLXN5bWJvbCA8WDdBNjI+Citjb2xsYXRpbmctc3ltYm9sIDxYN0E2ND4KK2NvbGxhdGluZy1zeW1ib2wgPFg3QThFPgorY29sbGF0aW5nLXN5bWJvbCA8WDdBOTA+Citjb2xsYXRpbmctc3ltYm9sIDxYN0E5Mj4KK2NvbGxhdGluZy1zeW1ib2wgPFg3QTk0PgorY29sbGF0aW5nLXN5bWJvbCA8WDdBOTY+Citjb2xsYXRpbmctc3ltYm9sIDxYN0E5OD4KK2NvbGxhdGluZy1zeW1ib2wgPFg3QTlBPgorY29sbGF0aW5nLXN5bWJvbCA8WDdBOUM+Citjb2xsYXRpbmctc3ltYm9sIDxYN0E5RT4KK2NvbGxhdGluZy1zeW1ib2wgPFg3QUEwPgorY29sbGF0aW5nLXN5bWJvbCA8WDdBQTI+Citjb2xsYXRpbmctc3ltYm9sIDxYN0FBND4KK2NvbGxhdGluZy1zeW1ib2wgPFg3QUE2PgorY29sbGF0aW5nLXN5bWJvbCA8WDdBQTg+Citjb2xsYXRpbmctc3ltYm9sIDxYN0FBQT4KK2NvbGxhdGluZy1zeW1ib2wgPFg3QUFDPgorY29sbGF0aW5nLXN5bWJvbCA8WDdBQUQ+Citjb2xsYXRpbmctc3ltYm9sIDxYN0FBRT4KKworb3JkZXJfc3RhcnQgZm9yd2FyZDtmb3J3YXJkO2ZvcndhcmQ7Zm9yd2FyZAorCisKKyUgY29sbGF0aW9uIHdlaWdodHMgaW4gb3JkZXIKKworPFgwMDAxPgorPFgwMDA1PgorPFgwMDA2PgorPFgwMDA3PgorPFgwMDA4PgorPFgwMDE1PgorPFgwMDE5PgorPFgwMDI1PgorPFgwMDg3PgorPFgwMDg4PgorPFgwMDg5PgorPFgwMDhBPgorPFgwMDhCPgorPFgwMDhDPgorPFgwMDhEPgorPFgwMDhFPgorPFgwMDhGPgorPFgwMDkwPgorPFgwMDkxPgorPFgwMDkyPgorPFgwMDkzPgorPFgwMDk0PgorPFgwMDk1PgorPFgwMDk2PgorPFgwMDk3PgorPFgwMDk4PgorPFgwMDk5PgorPFgwMDlBPgorPFgwMDlCPgorPFgwMDlDPgorPFgwMDlEPgorPFgwMDlFPgorPFgwMDlGPgorPFgwMEEwPgorPFgwMEExPgorPFgwMEEyPgorPFgwMEEzPgorPFgwMEE0PgorPFgwMEE1PgorPFgwMEE2PgorPFgwMEE3PgorPFgwMEE4PgorPFgwMEE5PgorPFgwMEFBPgorPFgwMEFCPgorPFgwMEFDPgorPFgwMEFEPgorPFgwMEMwPgorPFgwMEQ2PgorPFgwMEQ3PgorPFgwMEQ4PgorPFgwMEQ5PgorPFgwMERBPgorPFgwMERCPgorPFgwMERDPgorPFgwMEREPgorPFgwMERFPgorPFgwMERGPgorPFgwMEUyPgorPFgwNDAwPgorPFgwNTAwPgorPFgwNTA3PgorPFgwNTA5PgorPFgwNTBCPgorPFgwNTBEPgorPFgwNTBGPgorPFgwNjAwPgorPFgwNzAwPgorPFgwNzY0PgorPFgwNzZBPgorPFgwNzgyPgorPFgwNzhFPgorPFgwN0FBPgorPFgwN0MwPgorPFgwN0M2PgorPFgwN0VFPgorPFgwN0Y2PgorPFgwODAwPgorPFgwODBCPgorPFgwODJFPgorPFgwODNGPgorPFgwODREPgorPFgwODYxPgorPFgwODYzPgorPFgwODY1PgorPFgwODY3PgorPFgwODY5PgorPFgwODZCPgorPFgwOERGPgorPFgwOEUxPgorPFgwOEU5PgorPFgwOEVEPgorPFgwOEVGPgorPFgwOEY1PgorPFgwOEY3PgorPFgwOTAwPgorPFgwQTAwPgorPFgwQTUzPgorPFgwQTU1PgorPFgwQTU3PgorPFgwQTU5PgorPFgwQTVCPgorPFgwQTVEPgorPFgwQTVGPgorPFgwQTYxPgorPFgwQTYzPgorPFgwQTY1PgorPFgwQTY3PgorPFgwQTY5PgorPFgwQTZCPgorPFgwQTZEPgorPFgwQTZGPgorPFgwQTcxPgorPFgwQTczPgorPFgwQTc1PgorPFgwQTc3PgorPFgwQTc5PgorPFgwQTdCPgorPFgwQTdEPgorPFgwQTdGPgorPFgwQTgxPgorPFgwQTgzPgorPFgwQTg1PgorPFgwQTg3PgorPFgwQTg5PgorPFgwQThCPgorPFgwQThEPgorPFgwQThGPgorPFgwQTkxPgorPFgwQjAwPgorPFgwQkIzPgorPFgwQkJCPgorPFgwQkJEPgorPFgwQkJGPgorPFgwQkMzPgorPFgwQkM5PgorPFgwQzAwPgorPFgyMzNDPgorPFgyMzRDPgorPFgyMzcwPgorPFgyMzcyPgorPFgyMzc0PgorPFgyMzc2PgorPFgyMzc4PgorPFgyMzdBPgorPFgyMzdDPgorPFgyMzdFPgorPFgyMzgwPgorPFgyMzgyPgorPFgyNjAwPgorPFgyODAwPgorPFgyQTAwPgorPFgyQzAwPgorPFgyRTAwPgorPFgzMDAwPgorPFgzMjAwPgorPFgzNDAwPgorPFgzNjAwPgorPFgzODAwPgorPFgzQTAwPgorPFgzQzAwPgorPFgzRTAwPgorPFg0MDAwPgorPFg0MjAwPgorPFg0NDAwPgorPFg0NjAwPgorPFg0ODAwPgorPFg0QTAwPgorPFg0QzAwPgorPFg0RTAwPgorPFg1MDAwPgorPFg1MjAwPgorPFg1NDAwPgorPFg1NjAwPgorPFg1ODAwPgorPFg3QTIwPgorPFg3QTIyPgorPFg3QTI0PgorPFg3QTI2PgorPFg3QTI4PgorPFg3QTJBPgorPFg3QTJDPgorPFg3QTJFPgorPFg3QTMwPgorPFg3QTMyPgorPFg3QTM0PgorPFg3QTM2PgorPFg3QTM4PgorPFg3QTNBPgorPFg3QTNDPgorPFg3QTNFPgorPFg3QTQwPgorPFg3QTQyPgorPFg3QTQ0PgorPFg3QTQ2PgorPFg3QTQ4PgorPFg3QTRBPgorPFg3QTRDPgorPFg3QTRFPgorPFg3QTUwPgorPFg3QTUyPgorPFg3QTU0PgorPFg3QTU1PgorPFg3QTU2PgorPFg3QTU3PgorPFg3QTU4PgorPFg3QTVBPgorPFg3QTVDPgorPFg3QTVFPgorPFg3QTYwPgorPFg3QTYyPgorPFg3QTY0PgorPFg3QThFPgorPFg3QTkwPgorPFg3QTkyPgorPFg3QTk0PgorPFg3QTk2PgorPFg3QTk4PgorPFg3QTlBPgorPFg3QTlDPgorPFg3QTlFPgorPFg3QUEwPgorPFg3QUEyPgorPFg3QUE0PgorPFg3QUE2PgorPFg3QUE4PgorPFg3QUFBPgorPFg3QUFDPgorPFg3QUFEPgorPFg3QUFFPgorCislIGFzc2lnbm1lbnQgb2YgY2hhcmFjdGVycyB0byB3ZWlnaHRzCisKKzxVMDAwRj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwRj4KKzxVMDAxRT4gICAgICAgICAgICBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMUU+Cis8VTAwMDg+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwOD4KKzxVMDAxNz4gICAgICAgICAgICBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTc+Cis8VTAwMUY+ICAgICAgICAgICAgSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFGPgorPFUwMDEwPiAgICAgICAgICAgICAgICAgICAgIElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxMD4KKzxVMTdCNT4gICAgICAgICAgICAgIElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMTdCNT4KKzxVMDAwNz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDc+Cis8VTAwMTY+ICAgICAgICAgICAgICAgICAgICAgSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE2PgorPFUwMDE1PiAgICAgICAgICAgICAgICAgSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE1PgorPFUwMDA2PiAgICAgICAgICAgICAgICAgICAgICAgICAgSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA2PgorPFUyNDAxPiAgICAgICAgICAgICAgICAgICAgIElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQwMT4KKzxVMDAxRD4gICAgICAgICAgSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFEPgorPFUwMDBFPiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMEU+Cis8VTAwMTg+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxOD4KKzxVMDAwND4gICAgICAgICAgICAgICAgICBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDQ+Cis8VTAwMTM+ICAgICAgICAgICAgICAgICBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTM+Cis8VTAwMUE+ICAgICAgICAgICAgICAgICAgICAgICAgICAgSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFBPgorPFUxN0I0PiAgICAgICAgICAgICAgSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxN0I0PgorPFUwMDdGPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwN0Y+Cis8VTAwMTI+ICAgICAgICAgICAgICAgICAgIElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxMj4KKzxVMDAwMz4gICAgICAgICAgICAgICAgICAgICAgICAgIElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwMz4KKzxVMDAxQj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFCPgorPFUwMDExPiAgICAgICAgICAgICAgICAgICBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTE+Cis8VTAwMDI+ICAgICAgICAgICAgICAgICAgICAgICAgSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDAyPgorPFUwMDFDPiAgICAgICAgICAgSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFDPgorPFUwMDE0PiAgICAgICAgICAgICAgICAgIElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxND4KKzxVMDAxOT4gICAgICAgICAgICAgICAgICAgICAgICBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTk+Cis8VTAwMDU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA1PgorPFUwMDAwPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwMD4KKzxVMTdDRT4gICAgICAgICAgICAgICAgICAgSUdOT1JFOyI8WDAwREE+PFgwMEQ2PiI7IjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMTdDRj4gICAgICAgICAgICAgICAgICAgICBJR05PUkU7IjxYMDBEQT48WDAwRDc+IjsiPFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPFUxN0QxPiAgICAgICAgICAgICAgICAgICAgSUdOT1JFOyI8WDAwREE+PFgwMEQ4PiI7IjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMTdEMD4gICAgICAgICAgICAgSUdOT1JFOyI8WDAwREE+PFgwMEQ5PiI7IjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMTdDOD4gICAgICAgICAgICAgSUdOT1JFOyI8WDAwREE+PFgwMERBPiI7IjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMTdERD4gICAgICAgICAgICAgICAgICBJR05PUkU7IjxYMDBEQT48WDAwREI+IjsiPFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPFUxN0NCPiAgICAgICAgICAgICAgICAgICAgSUdOT1JFOyI8WDAwREE+PFgwMERDPiI7IjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMTdDOT4gICAgICAgICAgICAgICBJR05PUkU7IjxYMDBEQT48WDAwREQ+IjsiPFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPFUxN0NBPiAgICAgICAgICAgICAgICAgICBJR05PUkU7IjxYMDBEQT48WDAwREU+IjsiPFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPFUxN0NEPiAgICAgICAgICAgICAgIElHTk9SRTsiPFgwMERBPjxYMDBERj4iOyI8WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTE3Q0M+ICAgICAgICAgICAgICAgICAgICAgSUdOT1JFOyI8WDAwREI+PFgwMDE5PiI7IjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMDAwOT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFgwNTA3Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwMEE+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFgwNTA5Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwMEI+ICAgICAgICAgICAgICAgICAgICAgICAgIDxYMDUwQj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDBDPiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8WDA1MEQ+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAwRD4gICAgICAgICAgICAgICAgICAgICAgPFgwNTBGPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwMjA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8WDA2MDA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA2MD4gICAgICAgICAgICAgICAgICAgICAgICAgPFgwNzY0Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNUU+ICAgICAgICAgICAgICAgICAgICA8WDA3NkE+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA1Rj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMDc4Mj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDJEPiAgICAgICAgICAgICAgICAgICAgICAgICA8WDA3OEU+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAyQz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMDdBQT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDNCPiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8WDA3QzA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAzQT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMDdDNj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDIxPiAgICAgICAgICAgICAgICAgICAgIDxYMDdFRT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDNGPiAgICAgICAgICAgICAgICAgICAgICAgIDxYMDdGNj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDJFPiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8WDA4MEI+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTdENz4gICAgICAgICAgICAgICAgICAgIjxYMDgyRT48WDA0MDA+Ijs8WDAwMDU+OyI8WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTE3RDM+ICAgICAgICAgICAgICAgICI8WDA4MkU+PFgwNTAwPiI7PFgwMDA1PjsiPFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPFUxN0Q0PiAgICAgICAgICAgICAgICAgICAgICAiPFgwODJFPjxYMDYwMD4iOzxYMDAwNT47IjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMTdENT4gICAgICAgICAgICAgICAgIjxYMDgyRT48WDA3MDA+Ijs8WDAwMDU+OyI8WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTE3RDY+ICAgICAgICAgICAiPFgwODJFPjxYMDgwMD4iOzxYMDAwNT47IjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMTdEOD4gICAgICAgICAgICAgICAgICAgICI8WDA4MkU+PFgwOTAwPiI7PFgwMDA1PjsiPFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPFUxN0Q5PiAgICAgICAgICAgICAgICI8WDA4MkU+PFgwQTAwPiI7PFgwMDA1PjsiPFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPFUxN0RBPiAgICAgICAgICAgICAgICAgICAiPFgwODJFPjxYMEIwMD4iOzxYMDAwNT47IjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMTdEQz4gICAgICAgICAgICAgIjxYMDgyRT48WDBDMDA+Ijs8WDAwMDU+OyI8WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTAwMjc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgPFgwODNGPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwMjI+ICAgICAgICAgICAgICAgICAgICAgICA8WDA4NEQ+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAyOD4gICAgICAgICAgICAgICAgICAgICA8WDA4NjE+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAyOT4gICAgICAgICAgICAgICAgICAgIDxYMDg2Mz47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDVCPiAgICAgICAgICAgICAgICAgIDxYMDg2NT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDVEPiAgICAgICAgICAgICAgICAgPFgwODY3Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwN0I+ICAgICAgICAgICAgICAgICAgIDxYMDg2OT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDdEPiAgICAgICAgICAgICAgICAgIDxYMDg2Qj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDQwPiAgICAgICAgICAgICAgICAgICAgICAgIDxYMDhERj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDJBPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFgwOEUxPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwMkY+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFgwOEU5Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNUM+ICAgICAgICAgICAgICAgICAgICAgIDxYMDhFRD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDI2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8WDA4RUY+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAyMz4gICAgICAgICAgICAgICAgICAgICAgICAgIDxYMDhGNT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDI1PiAgICAgICAgICAgICAgICAgICAgICAgICA8WDA4Rjc+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTlFMD4gICAgICAgICAgICAgIDxYMEE1Mz47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxOUUxPiAgICAgICAgICAgICAgIDxYMEE1NT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxOUUyPiAgICAgICAgICAgICAgICA8WDBBNTc+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTlFMz4gICAgICAgICAgICAgICAgPFgwQTU5Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE5RTQ+ICAgICAgICAgICAgICAgPFgwQTVCPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE5RTU+ICAgICAgICAgICAgICAgPFgwQTVEPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE5RTY+ICAgICAgICAgIDxYMEE1Rj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxOUU3PiAgICAgICAgICAgPFgwQTYxPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE5RTg+ICAgICAgICAgICA8WDBBNjM+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTlFOT4gICAgICAgICAgPFgwQTY1Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE5RUE+ICAgICAgICAgICAgICAgIDxYMEE2Nz47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxOUVCPiAgICAgICAgICAgPFgwQTY5Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE5RUM+ICAgICAgICAgICAgPFgwQTZCPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE5RUQ+ICAgICAgICAgICAgPFgwQTZEPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE5RUU+ICAgICAgICAgICA8WDBBNkY+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTlFRj4gICAgICAgICAgIDxYMEE3MT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxOUYwPiAgICAgICAgICAgICAgIDxYMEE3Mz47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxOUYxPiAgICAgICAgICAgICAgICA8WDBBNzU+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTlGMj4gICAgICAgICAgICAgICAgIDxYMEE3Nz47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxOUYzPiAgICAgICAgICAgICAgICAgPFgwQTc5Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE5RjQ+ICAgICAgICAgICAgICAgIDxYMEE3Qj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxOUY1PiAgICAgICAgICAgICAgICA8WDBBN0Q+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTlGNj4gICAgICAgICAgIDxYMEE3Rj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxOUY3PiAgICAgICAgICAgIDxYMEE4MT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxOUY4PiAgICAgICAgICAgIDxYMEE4Mz47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxOUY5PiAgICAgICAgICAgPFgwQTg1Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE5RkE+ICAgICAgICAgICAgICAgICA8WDBBODc+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTlGQj4gICAgICAgICAgICA8WDBBODk+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTlGQz4gICAgICAgICAgICAgPFgwQThCPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE5RkQ+ICAgICAgICAgICAgIDxYMEE4RD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxOUZFPiAgICAgICAgICAgIDxYMEE4Rj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxOUZGPiAgICAgICAgICAgIDxYMEE5MT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDJCPiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8WDBCQjM+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAzQz4gICAgICAgICAgICAgICAgICAgICAgIDxYMEJCQj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDNEPiAgICAgICAgICAgICAgICAgICAgICAgICAgPFgwQkJEPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwM0U+ICAgICAgICAgICAgICAgICAgICA8WDBCQkY+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA3Qz4gICAgICAgICAgICAgICAgICAgICAgICA8WDBCQzM+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA3RT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMEJDOT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDI0PiAgICAgICAgICAgICAgICAgICAgICAgICAgPFgyMzNDPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE3REI+ICAgICAgICAgICA8WDIzNEM+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAzMD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8WDIzNzA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTdFMD4gICAgICAgICAgICAgICAgICAgICA8WDIzNzA+OyI8WDAwMDU+PFgwMEUyPjxYMDAxNT4iOyI8WDAwMDU+PFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPFUxN0YwPiAgICAgICAgICAgPFgyMzcwPjsiPFgwMDA1PjxYMDBFMj48WDAwMjU+IjsiPFgwMDA1PjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMDAzMT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFgyMzcyPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE3RTE+ICAgICAgICAgICAgICAgICAgICAgIDxYMjM3Mj47IjxYMDAwNT48WDAwRTI+PFgwMDE1PiI7IjxYMDAwNT48WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTE3RjE+ICAgICAgICAgIDxYMjM3Mj47IjxYMDAwNT48WDAwRTI+PFgwMDI1PiI7IjxYMDAwNT48WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTAwMzI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMjM3ND47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxN0UyPiAgICAgICAgICAgICAgICAgICAgICA8WDIzNzQ+OyI8WDAwMDU+PFgwMEUyPjxYMDAxNT4iOyI8WDAwMDU+PFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPFUxN0YyPiAgICAgICAgICAgPFgyMzc0PjsiPFgwMDA1PjxYMDBFMj48WDAwMjU+IjsiPFgwMDA1PjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMDAzMz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMjM3Nj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxN0UzPiAgICAgICAgICAgICAgICAgICAgPFgyMzc2PjsiPFgwMDA1PjxYMDBFMj48WDAwMTU+IjsiPFgwMDA1PjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMTdGMz4gICAgICAgICAgIDxYMjM3Nj47IjxYMDAwNT48WDAwRTI+PFgwMDI1PiI7IjxYMDAwNT48WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTAwMzQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFgyMzc4Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE3RTQ+ICAgICAgICAgICAgICAgICAgICAgPFgyMzc4PjsiPFgwMDA1PjxYMDBFMj48WDAwMTU+IjsiPFgwMDA1PjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMTdGND4gICAgICAgICAgPFgyMzc4PjsiPFgwMDA1PjxYMDBFMj48WDAwMjU+IjsiPFgwMDA1PjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMDAzNT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8WDIzN0E+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTdFNT4gICAgICAgICAgICAgICAgICAgICA8WDIzN0E+OyI8WDAwMDU+PFgwMEUyPjxYMDAxNT4iOyI8WDAwMDU+PFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPFUxN0Y1PiAgICAgICAgICA8WDIzN0E+OyI8WDAwMDU+PFgwMEUyPjxYMDAyNT4iOyI8WDAwMDU+PFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPFUwMDM2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8WDIzN0M+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTdFNj4gICAgICAgICAgICAgICAgICAgICAgPFgyMzdDPjsiPFgwMDA1PjxYMDBFMj48WDAwMTU+IjsiPFgwMDA1PjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMTdGNj4gICAgIDxYMjM3Qz47IjxYMDAwNT48WDAwRTI+PFgwMDI1PiI7IjxYMDAwNT48WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTAwMzc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8WDIzN0U+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTdFNz4gICAgICAgICAgICAgICAgICAgIDxYMjM3RT47IjxYMDAwNT48WDAwRTI+PFgwMDE1PiI7IjxYMDAwNT48WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTE3Rjc+ICAgICAgPFgyMzdFPjsiPFgwMDA1PjxYMDBFMj48WDAwMjU+IjsiPFgwMDA1PjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMDAzOD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMjM4MD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxN0U4PiAgICAgICAgICAgICAgICAgICAgPFgyMzgwPjsiPFgwMDA1PjxYMDBFMj48WDAwMTU+IjsiPFgwMDA1PjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMTdGOD4gICAgICA8WDIzODA+OyI8WDAwMDU+PFgwMEUyPjxYMDAyNT4iOyI8WDAwMDU+PFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPFUwMDM5PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMjM4Mj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxN0U5PiAgICAgICAgICAgICAgICAgICAgIDxYMjM4Mj47IjxYMDAwNT48WDAwRTI+PFgwMDE1PiI7IjxYMDAwNT48WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTE3Rjk+ICAgICA8WDIzODI+OyI8WDAwMDU+PFgwMEUyPjxYMDAyNT4iOyI8WDAwMDU+PFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPFUwMDYxPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMjYwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDQxPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMjYwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDYyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMjgwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDQyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMjgwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDYzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMkEwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDQzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMkEwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDY0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMkMwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDQ0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMkMwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDY1PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMkUwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDQ1PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMkUwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDY2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMzAwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDQ2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMzAwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDY3PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMzIwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDQ3PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMzIwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDY4PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMzQwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDQ4PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMzQwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDY5PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMzYwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDQ5PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMzYwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDZBPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMzgwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDRBPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYMzgwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDZCPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYM0EwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDRCPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYM0EwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDZDPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYM0MwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDRDPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYM0MwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDZEPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYM0UwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDREPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYM0UwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDZFPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNDAwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDRFPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNDAwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDZGPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNDIwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDRGPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNDIwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDcwPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNDQwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDUwPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNDQwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDcxPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNDYwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDUxPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNDYwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDcyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNDgwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDUyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNDgwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDczPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNEEwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDUzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNEEwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDc0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNEMwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDU0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNEMwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDc1PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNEUwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDU1PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNEUwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDc2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNTAwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDU2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNTAwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDc3PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNTIwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDU3PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNTIwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDc4PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNTQwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDU4PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNTQwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDc5PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNTYwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDU5PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNTYwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDdBPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNTgwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDVBPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxYNTgwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUxNzgwPiAgICAgICAgICAgICAgICAgICAgICA8WDdBMjA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTc4MT4gICAgICAgICAgICAgICAgICAgICA8WDdBMjI+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTc4Mj4gICAgICAgICAgICAgICAgICAgICAgPFg3QTI0Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE3ODM+ICAgICAgICAgICAgICAgICAgICAgPFg3QTI2Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE3ODQ+ICAgICAgICAgICAgICAgICAgICAgPFg3QTI4Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE3ODU+ICAgICAgICAgICAgICAgICAgICAgIDxYN0EyQT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxNzg2PiAgICAgICAgICAgICAgICAgICAgIDxYN0EyQz47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxNzg3PiAgICAgICAgICAgICAgICAgICAgICA8WDdBMkU+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTc4OD4gICAgICAgICAgICAgICAgICAgICA8WDdBMzA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTc4OT4gICAgICAgICAgICAgICAgICAgICA8WDdBMzI+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTc4QT4gICAgICAgICAgICAgICAgICAgICAgPFg3QTM0Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE3OEI+ICAgICAgICAgICAgICAgICAgICA8WDdBMzY+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTc4Qz4gICAgICAgICAgICAgICAgICAgICAgPFg3QTM4Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE3OEQ+ICAgICAgICAgICAgICAgICAgICA8WDdBM0E+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTc4RT4gICAgICAgICAgICAgICAgICAgICA8WDdBM0M+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTc4Rj4gICAgICAgICAgICAgICAgICAgICAgPFg3QTNFPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE3OTA+ICAgICAgICAgICAgICAgICAgICAgPFg3QTQwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE3OTE+ICAgICAgICAgICAgICAgICAgICAgIDxYN0E0Mj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxNzkyPiAgICAgICAgICAgICAgICAgICAgIDxYN0E0ND47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxNzkzPiAgICAgICAgICAgICAgICAgICAgICA8WDdBNDY+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTc5ND4gICAgICAgICAgICAgICAgICAgICAgPFg3QTQ4Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE3OTU+ICAgICAgICAgICAgICAgICAgICAgPFg3QTRBPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE3OTY+ICAgICAgICAgICAgICAgICAgICAgIDxYN0E0Qz47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxNzk3PiAgICAgICAgICAgICAgICAgICAgIDxYN0E0RT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxNzk4PiAgICAgICAgICAgICAgICAgICAgICA8WDdBNTA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTc5OT4gICAgICAgICAgICAgICAgICAgICAgPFg3QTUyPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE3OUE+ICAgICAgICAgICAgICAgICAgICAgIDxYN0E1ND47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPEtITUVSX0xFVFRFUl9LQS1LSE1FUl9TSUdOX1JPQkFUPiAgICAgIjxYN0E1ND48WDdBQUU+PFg3QTIwPiI7IjxYMDBBRD48WDAwMDU+PFgwMDA1PiI7IjxYMDAwNT48WDAwMDU+PFgwMDA1PiI7SUdOT1JFCis8S0hNRVJfTEVUVEVSX0tIQS1LSE1FUl9TSUdOX1JPQkFUPiAgICAiPFg3QTU0PjxYN0FBRT48WDdBMjI+IjsiPFgwMEFDPjxYMDAwNT48WDAwMDU+IjsiPFgwMDA1PjxYMDAwNT48WDAwMDU+IjtJR05PUkUKKzxLSE1FUl9MRVRURVJfS08tS0hNRVJfU0lHTl9ST0JBVD4gICAgICI8WDdBNTQ+PFg3QUFFPjxYN0EyND4iOyI8WDAwQUI+PFgwMDA1PjxYMDAwNT4iOyI8WDAwMDU+PFgwMDA1PjxYMDAwNT4iO0lHTk9SRQorPEtITUVSX0xFVFRFUl9LSE8tS0hNRVJfU0lHTl9ST0JBVD4gICAgIjxYN0E1ND48WDdBQUU+PFg3QTI2PiI7IjxYMDBBQT48WDAwMDU+PFgwMDA1PiI7IjxYMDAwNT48WDAwMDU+PFgwMDA1PiI7SUdOT1JFCis8S0hNRVJfTEVUVEVSX05HTy1LSE1FUl9TSUdOX1JPQkFUPiAgICAiPFg3QTU0PjxYN0FBRT48WDdBMjg+IjsiPFgwMEE5PjxYMDAwNT48WDAwMDU+IjsiPFgwMDA1PjxYMDAwNT48WDAwMDU+IjtJR05PUkUKKzxLSE1FUl9MRVRURVJfQ0EtS0hNRVJfU0lHTl9ST0JBVD4gICAgICI8WDdBNTQ+PFg3QUFFPjxYN0EyQT4iOyI8WDAwQTg+PFgwMDA1PjxYMDAwNT4iOyI8WDAwMDU+PFgwMDA1PjxYMDAwNT4iO0lHTk9SRQorPEtITUVSX0xFVFRFUl9DSEEtS0hNRVJfU0lHTl9ST0JBVD4gICAgIjxYN0E1ND48WDdBQUU+PFg3QTJDPiI7IjxYMDBBNz48WDAwMDU+PFgwMDA1PiI7IjxYMDAwNT48WDAwMDU+PFgwMDA1PiI7SUdOT1JFCis8S0hNRVJfTEVUVEVSX0NPLUtITUVSX1NJR05fUk9CQVQ+ICAgICAiPFg3QTU0PjxYN0FBRT48WDdBMkU+IjsiPFgwMEE2PjxYMDAwNT48WDAwMDU+IjsiPFgwMDA1PjxYMDAwNT48WDAwMDU+IjtJR05PUkUKKzxLSE1FUl9MRVRURVJfQ0hPLUtITUVSX1NJR05fUk9CQVQ+ICAgICI8WDdBNTQ+PFg3QUFFPjxYN0EzMD4iOyI8WDAwQTU+PFgwMDA1PjxYMDAwNT4iOyI8WDAwMDU+PFgwMDA1PjxYMDAwNT4iO0lHTk9SRQorPEtITUVSX0xFVFRFUl9OWU8tS0hNRVJfU0lHTl9ST0JBVD4gICAgIjxYN0E1ND48WDdBQUU+PFg3QTMyPiI7IjxYMDBBND48WDAwMDU+PFgwMDA1PiI7IjxYMDAwNT48WDAwMDU+PFgwMDA1PiI7SUdOT1JFCis8S0hNRVJfTEVUVEVSX0RBLUtITUVSX1NJR05fUk9CQVQ+ICAgICAiPFg3QTU0PjxYN0FBRT48WDdBMzQ+IjsiPFgwMEEzPjxYMDAwNT48WDAwMDU+IjsiPFgwMDA1PjxYMDAwNT48WDAwMDU+IjtJR05PUkUKKzxLSE1FUl9MRVRURVJfVFRIQS1LSE1FUl9TSUdOX1JPQkFUPiAgICI8WDdBNTQ+PFg3QUFFPjxYN0EzNj4iOyI8WDAwQTI+PFgwMDA1PjxYMDAwNT4iOyI8WDAwMDU+PFgwMDA1PjxYMDAwNT4iO0lHTk9SRQorPEtITUVSX0xFVFRFUl9ETy1LSE1FUl9TSUdOX1JPQkFUPiAgICAgIjxYN0E1ND48WDdBQUU+PFg3QTM4PiI7IjxYMDBBMT48WDAwMDU+PFgwMDA1PiI7IjxYMDAwNT48WDAwMDU+PFgwMDA1PiI7SUdOT1JFCis8S0hNRVJfTEVUVEVSX1RUSE8tS0hNRVJfU0lHTl9ST0JBVD4gICAiPFg3QTU0PjxYN0FBRT48WDdBM0E+IjsiPFgwMEEwPjxYMDAwNT48WDAwMDU+IjsiPFgwMDA1PjxYMDAwNT48WDAwMDU+IjtJR05PUkUKKzxLSE1FUl9MRVRURVJfTk5PLUtITUVSX1NJR05fUk9CQVQ+ICAgICI8WDdBNTQ+PFg3QUFFPjxYN0EzQz4iOyI8WDAwOUY+PFgwMDA1PjxYMDAwNT4iOyI8WDAwMDU+PFgwMDA1PjxYMDAwNT4iO0lHTk9SRQorPEtITUVSX0xFVFRFUl9UQS1LSE1FUl9TSUdOX1JPQkFUPiAgICAgIjxYN0E1ND48WDdBQUU+PFg3QTNFPiI7IjxYMDA5RT48WDAwMDU+PFgwMDA1PiI7IjxYMDAwNT48WDAwMDU+PFgwMDA1PiI7SUdOT1JFCis8S0hNRVJfTEVUVEVSX1RIQS1LSE1FUl9TSUdOX1JPQkFUPiAgICAiPFg3QTU0PjxYN0FBRT48WDdBNDA+IjsiPFgwMDlEPjxYMDAwNT48WDAwMDU+IjsiPFgwMDA1PjxYMDAwNT48WDAwMDU+IjtJR05PUkUKKzxLSE1FUl9MRVRURVJfVE8tS0hNRVJfU0lHTl9ST0JBVD4gICAgICI8WDdBNTQ+PFg3QUFFPjxYN0E0Mj4iOyI8WDAwOUM+PFgwMDA1PjxYMDAwNT4iOyI8WDAwMDU+PFgwMDA1PjxYMDAwNT4iO0lHTk9SRQorPEtITUVSX0xFVFRFUl9USE8tS0hNRVJfU0lHTl9ST0JBVD4gICAgIjxYN0E1ND48WDdBQUU+PFg3QTQ0PiI7IjxYMDA5Qj48WDAwMDU+PFgwMDA1PiI7IjxYMDAwNT48WDAwMDU+PFgwMDA1PiI7SUdOT1JFCis8S0hNRVJfTEVUVEVSX05PLUtITUVSX1NJR05fUk9CQVQ+ICAgICAiPFg3QTU0PjxYN0FBRT48WDdBNDY+IjsiPFgwMDlBPjxYMDAwNT48WDAwMDU+IjsiPFgwMDA1PjxYMDAwNT48WDAwMDU+IjtJR05PUkUKKzxLSE1FUl9MRVRURVJfQkEtS0hNRVJfU0lHTl9ST0JBVD4gICAgICI8WDdBNTQ+PFg3QUFFPjxYN0E0OD4iOyI8WDAwOTk+PFgwMDA1PjxYMDAwNT4iOyI8WDAwMDU+PFgwMDA1PjxYMDAwNT4iO0lHTk9SRQorPEtITUVSX0xFVFRFUl9QSEEtS0hNRVJfU0lHTl9ST0JBVD4gICAgIjxYN0E1ND48WDdBQUU+PFg3QTRBPiI7IjxYMDA5OD48WDAwMDU+PFgwMDA1PiI7IjxYMDAwNT48WDAwMDU+PFgwMDA1PiI7SUdOT1JFCis8S0hNRVJfTEVUVEVSX1BPLUtITUVSX1NJR05fUk9CQVQ+ICAgICAiPFg3QTU0PjxYN0FBRT48WDdBNEM+IjsiPFgwMDk3PjxYMDAwNT48WDAwMDU+IjsiPFgwMDA1PjxYMDAwNT48WDAwMDU+IjtJR05PUkUKKzxLSE1FUl9MRVRURVJfUEhPLUtITUVSX1NJR05fUk9CQVQ+ICAgICI8WDdBNTQ+PFg3QUFFPjxYN0E0RT4iOyI8WDAwOTY+PFgwMDA1PjxYMDAwNT4iOyI8WDAwMDU+PFgwMDA1PjxYMDAwNT4iO0lHTk9SRQorPEtITUVSX0xFVFRFUl9NTy1LSE1FUl9TSUdOX1JPQkFUPiAgICAgIjxYN0E1ND48WDdBQUU+PFg3QTUwPiI7IjxYMDA5NT48WDAwMDU+PFgwMDA1PiI7IjxYMDAwNT48WDAwMDU+PFgwMDA1PiI7SUdOT1JFCis8S0hNRVJfTEVUVEVSX1lPLUtITUVSX1NJR05fUk9CQVQ+ICAgICAiPFg3QTU0PjxYN0FBRT48WDdBNTI+IjsiPFgwMDk0PjxYMDAwNT48WDAwMDU+IjsiPFgwMDA1PjxYMDAwNT48WDAwMDU+IjtJR05PUkUKKzxLSE1FUl9MRVRURVJfUk8tS0hNRVJfU0lHTl9ST0JBVD4gICAgICI8WDdBNTQ+PFg3QUFFPjxYN0E1ND4iOyI8WDAwOTM+PFgwMDA1PjxYMDAwNT4iOyI8WDAwMDU+PFgwMDA1PjxYMDAwNT4iO0lHTk9SRQorPEtITUVSX0lOREVQRU5ERU5UX1ZPV0VMX1JZLUtITUVSX1NJR05fUk9CQVQ+ICI8WDdBNTQ+PFg3QUFFPjxYN0E1NT48WDA0MDA+IjsiPFgwMDkyPjxYMDAwNT48WDAwMDU+IjsiPFgwMDA1PjxYMDAwNT48WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8S0hNRVJfSU5ERVBFTkRFTlRfVk9XRUxfUllZLUtITUVSX1NJR05fUk9CQVQ+ICI8WDdBNTQ+PFg3QUFFPjxYN0E1NT48WDA1MDA+IjsiPFgwMDkxPjxYMDAwNT48WDAwMDU+IjsiPFgwMDA1PjxYMDAwNT48WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8S0hNRVJfTEVUVEVSX0xPLUtITUVSX1NJR05fUk9CQVQ+ICAgICAiPFg3QTU0PjxYN0FBRT48WDdBNTY+IjsiPFgwMDkwPjxYMDAwNT48WDAwMDU+IjsiPFgwMDA1PjxYMDAwNT48WDAwMDU+IjtJR05PUkUKKzxLSE1FUl9JTkRFUEVOREVOVF9WT1dFTF9MWS1LSE1FUl9TSUdOX1JPQkFUPiAiPFg3QTU0PjxYN0FBRT48WDdBNTc+PFgwNDAwPiI7IjxYMDA4Rj48WDAwMDU+PFgwMDA1PiI7IjxYMDAwNT48WDAwMDU+PFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPEtITUVSX0lOREVQRU5ERU5UX1ZPV0VMX0xZWS1LSE1FUl9TSUdOX1JPQkFUPiAiPFg3QTU0PjxYN0FBRT48WDdBNTc+PFgwNTAwPiI7IjxYMDA4RT48WDAwMDU+PFgwMDA1PiI7IjxYMDAwNT48WDAwMDU+PFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPEtITUVSX0xFVFRFUl9WTy1LSE1FUl9TSUdOX1JPQkFUPiAgICAgIjxYN0E1ND48WDdBQUU+PFg3QTU4PiI7IjxYMDA4RD48WDAwMDU+PFgwMDA1PiI7IjxYMDAwNT48WDAwMDU+PFgwMDA1PiI7SUdOT1JFCis8S0hNRVJfTEVUVEVSX1NIQS1LSE1FUl9TSUdOX1JPQkFUPiAgICAiPFg3QTU0PjxYN0FBRT48WDdBNUE+IjsiPFgwMDhDPjxYMDAwNT48WDAwMDU+IjsiPFgwMDA1PjxYMDAwNT48WDAwMDU+IjtJR05PUkUKKzxLSE1FUl9MRVRURVJfU1NPLUtITUVSX1NJR05fUk9CQVQ+ICAgICI8WDdBNTQ+PFg3QUFFPjxYN0E1Qz4iOyI8WDAwOEI+PFgwMDA1PjxYMDAwNT4iOyI8WDAwMDU+PFgwMDA1PjxYMDAwNT4iO0lHTk9SRQorPEtITUVSX0xFVFRFUl9TQS1LSE1FUl9TSUdOX1JPQkFUPiAgICAgIjxYN0E1ND48WDdBQUU+PFg3QTVFPiI7IjxYMDA4QT48WDAwMDU+PFgwMDA1PiI7IjxYMDAwNT48WDAwMDU+PFgwMDA1PiI7SUdOT1JFCis8S0hNRVJfTEVUVEVSX0hBLUtITUVSX1NJR05fUk9CQVQ+ICAgICAiPFg3QTU0PjxYN0FBRT48WDdBNjA+IjsiPFgwMDg5PjxYMDAwNT48WDAwMDU+IjsiPFgwMDA1PjxYMDAwNT48WDAwMDU+IjtJR05PUkUKKzxLSE1FUl9MRVRURVJfTEEtS0hNRVJfU0lHTl9ST0JBVD4gICAgICI8WDdBNTQ+PFg3QUFFPjxYN0E2Mj4iOyI8WDAwODg+PFgwMDA1PjxYMDAwNT4iOyI8WDAwMDU+PFgwMDA1PjxYMDAwNT4iO0lHTk9SRQorPEtITUVSX0xFVFRFUl9RQS1LSE1FUl9TSUdOX1JPQkFUPiAgICAgIjxYN0E1ND48WDdBQUU+PFg3QTY0PiI7IjxYMDA4Nz48WDAwMDU+PFgwMDA1PiI7IjxYMDAwNT48WDAwMDU+PFgwMDA1PiI7SUdOT1JFCis8S0hNRVJfSU5ERVBFTkRFTlRfVk9XRUxfUUFRLUtITUVSX1NJR05fUk9CQVQ+ICI8WDdBNTQ+PFg3QUFFPjxYN0E2ND4iOyI8WDAwODc+PFgwMDA1PjxYMDAwNT4iOyI8WDAwMDY+PFgwMDA1PjxYMDAwNT4iO0lHTk9SRQorPFUxN0FCPiAgICAgICAgICAgIjxYN0E1NT48WDA0MDA+Ijs8WDAwMDU+OyI8WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTE3QUM+ICAgICAgICAgICI8WDdBNTU+PFgwNTAwPiI7PFgwMDA1PjsiPFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPFUxNzlCPiAgICAgICAgICAgICAgICAgICAgICA8WDdBNTY+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTdBRD4gICAgICAgICAgICI8WDdBNTc+PFgwNDAwPiI7PFgwMDA1PjsiPFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPFUxN0FFPiAgICAgICAgICAiPFg3QTU3PjxYMDUwMD4iOzxYMDAwNT47IjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMTc5Qz4gICAgICAgICAgICAgICAgICAgICAgPFg3QTU4Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE3OUQ+ICAgICAgICAgICAgICAgICAgICAgPFg3QTVBPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE3OUU+ICAgICAgICAgICAgICAgICAgICAgPFg3QTVDPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE3OUY+ICAgICAgICAgICAgICAgICAgICAgIDxYN0E1RT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxN0EwPiAgICAgICAgICAgICAgICAgICAgICA8WDdBNjA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTdBMT4gICAgICAgICAgICAgICAgICAgICAgPFg3QTYyPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE3QTI+ICAgICAgICAgICAgICAgICAgICAgIDxYN0E2ND47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxN0EzPiAgICAgICAgICA8WDdBNjQ+OzxYMDAwNT47PFgwMDA4PjtJR05PUkUKKzxVMTdBND4gICAgICAgICAgIjxYN0E2ND48WDdBOEU+IjsiPFgwMDA1PjxYMDAwNT4iOyI8WDAwMDU+PFgwMDA1PiI7SUdOT1JFCis8VTE3QTU+ICAgICAgICAgICAiPFg3QTY0PjxYN0E5MD4iOyI8WDAwMDU+PFgwMDA1PiI7IjxYMDAwNT48WDAwMDU+IjtJR05PUkUKKzxVMTdBNj4gICAgICAgICAgIjxYN0E2ND48WDdBOTI+IjsiPFgwMDA1PjxYMDAwNT4iOyI8WDAwMDU+PFgwMDA1PiI7SUdOT1JFCis8VTE3QTc+ICAgICAgICAgICAiPFg3QTY0PjxYN0E5OD4iOyI8WDAwMDU+PFgwMDA1PiI7IjxYMDAwNT48WDAwMDU+IjtJR05PUkUKKzxVMTdBOD4gICAgICAgICAgIjxYN0E2ND48WDdBOTg+IjsiPFgwMDA1PjxYMDAwNT4iOyI8WDAwMDc+PFgwMDA1PiI7SUdOT1JFCis8VTE3QUE+ICAgICAgICAgIjxYN0E2ND48WDdBOTg+PFg3QTY0PiI7IjxYMDAwNT48WDAwMDU+PFgwMDA1PiI7IjxYMDAwNT48WDAwMDU+PFgwMDA1PiI7SUdOT1JFCis8VTE3QTk+ICAgICAgICAgICI8WDdBNjQ+PFg3QTlBPiI7IjxYMDAwNT48WDAwMDU+IjsiPFgwMDA1PjxYMDAwNT4iO0lHTk9SRQorPFUxN0FGPiAgICAgICAgICAgIjxYN0E2ND48WDdBQTY+IjsiPFgwMDA1PjxYMDAwNT4iOyI8WDAwMDU+PFgwMDA1PiI7SUdOT1JFCis8VTE3QjA+ICAgICAgICAgICI8WDdBNjQ+PFg3QUE4PiI7IjxYMDAwNT48WDAwMDU+IjsiPFgwMDA1PjxYMDAwNT4iO0lHTk9SRQorPFUxN0IxPiAiPFg3QTY0PjxYN0FBQT4iOyI8WDAwMDU+PFgwMDA1PiI7IjxYMDAwNT48WDAwMDU+IjtJR05PUkUKKzxVMTdCMj4gIjxYN0E2ND48WDdBQUE+IjsiPFgwMDA1PjxYMDAwNT4iOyI8WDAwMDY+PFgwMDA1PiI7SUdOT1JFCis8VTE3QjM+ICAgICAgICAgICI8WDdBNjQ+PFg3QUFDPiI7IjxYMDAwNT48WDAwMDU+IjsiPFgwMDA1PjxYMDAwNT4iO0lHTk9SRQorPFUxN0I2PiAgICAgICAgICAgICAgICAgIDxYN0E4RT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxN0I3PiAgICAgICAgICAgICAgICAgICA8WDdBOTA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTdCOD4gICAgICAgICAgICAgICAgICA8WDdBOTI+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTdCOT4gICAgICAgICAgICAgICAgICAgPFg3QTk0Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE3QkE+ICAgICAgICAgICAgICAgICAgPFg3QTk2Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTE3QkI+ICAgICAgICAgICAgICAgICAgIDxYN0E5OD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxN0JDPiAgICAgICAgICAgICAgICAgIDxYN0E5QT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxN0JEPiAgICAgICAgICAgICAgICAgIDxYN0E5Qz47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxN0JFPiAgICAgICAgICAgICAgICAgIDxYN0E5RT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxN0JGPiAgICAgICAgICAgICAgICAgIDxYN0FBMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxN0MwPiAgICAgICAgICAgICAgICAgIDxYN0FBMj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUxN0MxPiAgICAgICAgICAgICAgICAgICA8WDdBQTQ+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTdDMj4gICAgICAgICAgICAgICAgICA8WDdBQTY+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTdDMz4gICAgICAgICAgICAgICAgICA8WDdBQTg+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTdDND4gICAgICAgICAgICAgICAgICA8WDdBQUE+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMTdDNT4gICAgICAgICAgICAgICAgICA8WDdBQUM+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxLSE1FUl9WT1dFTF9TSUdOX1UtS0hNRVJfU0lHTl9OSUtBSElUPiAiPFg3QUFEPjxYMDQwMD4iOzxYMDAwNT47IjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMTdDNj4gICAgICAgICAgICAgICAgICAgIjxYN0FBRD48WDA1MDA+Ijs8WDAwMDU+OyI8WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8S0hNRVJfVk9XRUxfU0lHTl9BQS1LSE1FUl9TSUdOX05JS0FISVQ+ICI8WDdBQUQ+PFgwNjAwPiI7PFgwMDA1PjsiPFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPFUxN0M3PiAgICAgICAgICAgICAgICAgICAiPFg3QUFEPjxYMDcwMD4iOzxYMDAwNT47IjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMTdEMj4gICAgICAgICAgICAgICAgICAgICA8WDdBQUU+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKK1VOREVGSU5FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElHTk9SRTtJR05PUkU7SUdOT1JFO0lHTk9SRQorCitvcmRlcl9lbmQKKworRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKKworaW50X2N1cnJfc3ltYm9sICAgICAgIjxVMDA0Qj48VTAwNDg+PFUwMDUyPjxVMDAyMD4iCisKKyUgbW9uZXRhcnkgdW5pdDogUmllbAorY3VycmVuY3lfc3ltYm9sICAgICAgIjxVMTdEQj4iCittb25fZGVjaW1hbF9wb2ludCAgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAwCitwX3NlcF9ieV9zcGFjZSAgICAgICAgMAorbl9jc19wcmVjZWRlcyAgICAgICAgIDAKK25fc2VwX2J5X3NwYWNlICAgICAgICAwCitwX3NpZ25fcG9zbiAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgIDEKK2ludF9wX2NzX3ByZWNlZGVzICAgICAwCitpbnRfcF9zZXBfYnlfc3BhY2UgICAgMAoraW50X25fY3NfcHJlY2VkZXMgICAgIDAKK2ludF9uX3NlcF9ieV9zcGFjZSAgICAwCitpbnRfcF9zaWduX3Bvc24gICAgICAgMQoraW50X25fc2lnbl9wb3NuICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCisKK0xDX05VTUVSSUMKKworZGVjaW1hbF9wb2ludCAgICAgICAgICAgIjxVMDAyRT4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICAiPFUwMDJDPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgIDMKKworRU5EIExDX05VTUVSSUMKKworTENfVElNRQorCithYmRheSAgICI8VTE3QTI+PFUxN0I2PiI7LworICAgICAgICAiPFUxNzg1PiI7LworICAgICAgICAiPFUxN0EyPiI7LworICAgICAgICAiPFUxNzk2PjxVMTdCQj4iOy8KKyAgICAgICAgIjxVMTc5Nj48VTE3RDI+PFUxNzlBPiI7LworICAgICAgICAiPFUxNzlGPjxVMTdCQj4iOy8KKyAgICAgICAgIjxVMTc5Rj4iCisKK2RheSAgICAgIjxVMTc5MD48VTE3RDI+PFUxNzg0PjxVMTdDMz48VTIwMEI+PFUxN0EyPjxVMTdCNj48VTE3OTE+PFUxN0I3PjxVMTc4Rj48VTE3RDI+PFUxNzk5PiI7LworICAgICAgICAiPFUxNzkwPjxVMTdEMj48VTE3ODQ+PFUxN0MzPjxVMjAwQj48VTE3ODU+PFUxN0QwPjxVMTc5Mz48VTE3RDI+PFUxNzkxPiI7LworICAgICAgICAiPFUxNzkwPjxVMTdEMj48VTE3ODQ+PFUxN0MzPjxVMjAwQj48VTE3QTI+PFUxNzg0PjxVMTdEMj48VTE3ODI+PFUxN0I2PjxVMTc5QT4iOy8KKyAgICAgICAgIjxVMTc5MD48VTE3RDI+PFUxNzg0PjxVMTdDMz48VTIwMEI+PFUxNzk2PjxVMTdCQj48VTE3OTI+IjsvCisgICAgICAgICI8VTE3OTA+PFUxN0QyPjxVMTc4ND48VTE3QzM+PFUyMDBCPjxVMTc5Nj48VTE3RDI+PFUxNzlBPjxVMTdBMD48VTE3OUY+PFUxN0QyPjxVMTc5ND48VTE3OEY+PFUxN0I3PjxVMTdDRD4iOy8KKyAgICAgICAgIjxVMTc5MD48VTE3RDI+PFUxNzg0PjxVMTdDMz48VTIwMEI+PFUxNzlGPjxVMTdCQj48VTE3ODA+PFUxN0QyPjxVMTc5QT4iOy8KKyAgICAgICAgIjxVMTc5MD48VTE3RDI+PFUxNzg0PjxVMTdDMz48VTIwMEI+PFUxNzlGPjxVMTdDNT48VTE3OUE+PFUxN0NEPiIKKworYWJtb24gICAiPFUxN0UxPiI7LworICAgICAgICAiPFUxN0UyPiI7LworICAgICAgICAiPFUxN0UzPiI7LworICAgICAgICAiPFUxN0U0PiI7LworICAgICAgICAiPFUxN0U1PiI7LworICAgICAgICAiPFUxN0U2PiI7LworICAgICAgICAiPFUxN0U3PiI7LworICAgICAgICAiPFUxN0U4PiI7LworICAgICAgICAiPFUxN0U5PiI7LworICAgICAgICAiPFUxN0UxPjxVMTdFMD4iOy8KKyAgICAgICAgIjxVMTdFMT48VTE3RTE+IjsvCisgICAgICAgICI8VTE3RTE+PFUxN0UyPiIKKworbW9uICAgICAiPFUxNzk4PjxVMTc4MD48VTE3OUE+PFUxN0I2PiI7LworICAgICAgICAiPFUxNzgwPjxVMTdCQj48VTE3OTg+PFUxN0QyPjxVMTc5Nz48VTE3Qzg+IjsvCisgICAgICAgICI8VTE3OTg+PFUxN0I3PjxVMTc5Mz48VTE3QjY+IjsvCisgICAgICAgICI8VTE3OTg+PFUxN0MxPjxVMTc5Rj48VTE3QjY+IjsvCisgICAgICAgICI8VTE3QTc+PFUxNzlGPjxVMTc5Nz48VTE3QjY+IjsvCisgICAgICAgICI8VTE3OTg+PFUxN0I3PjxVMTc5MD48VTE3QkI+PFUxNzkzPjxVMTdCNj4iOy8KKyAgICAgICAgIjxVMTc4MD48VTE3ODA+PFUxN0QyPjxVMTc4MD48VTE3OEE+PFUxN0I2PiI7LworICAgICAgICAiPFUxNzlGPjxVMTdCOD48VTE3QTA+PFUxN0I2PiI7LworICAgICAgICAiPFUxNzgwPjxVMTc4OT48VTE3RDI+PFUxNzg5PjxVMTdCNj4iOy8KKyAgICAgICAgIjxVMTc4Rj48VTE3QkI+PFUxNzlCPjxVMTdCNj4iOy8KKyAgICAgICAgIjxVMTc5Qz48VTE3Qjc+PFUxNzg1PjxVMTdEMj48VTE3ODY+PFUxN0I3PjxVMTc4MD48VTE3QjY+IjsvCisgICAgICAgICI8VTE3OTI+PFUxN0QyPjxVMTc5Mz48VTE3QkM+IgorCitkX3RfZm10ICAiJUEgPFUxNzkwPjxVMTdEMj48VTE3ODQ+PFUxN0MzPiAlZSA8VTE3ODE+PFUxN0MyPiAlQiA8VTE3ODY+PFUxN0QyPjxVMTc5Mz48VTE3QjY+PFUxN0M2PiAgJVksICVIIDxVMTc5OD48VTE3Qzk+PFUxN0M0PjxVMTc4ND4gbSA8VTE3OTM+PFUxN0I2PjxVMTc5MT48VTE3Qjg+ICVTIDxVMTc5Qz48VTE3Qjc+PFUxNzkzPjxVMTdCNj48VTE3OTE+PFUxN0I4PjxVMjAwQj4iCisKK2RfZm10ICAgICIlZSAlQiAlWSIKKwordF9mbXQgICAgIiVIOiVNOiVTIgorCithbV9wbSAgICAiPFUxNzk2PjxVMTdEMj48VTE3OUE+PFUxN0I5PjxVMTc4MD4iOyI8VTE3OUI+PFUxN0QyPjxVMTc4ND48VTE3QjY+PFUxNzg1PiIKKworJSBBcHByb3ByaWF0ZSAxMi1ob3VyIGNsb2NrIHJlcHJlc2VudGF0aW9uICAiJUk6JU06JVMgJXAiCisldF9mbXRfYW1wbSAgIiVJPFUwMDNBPiVNPFUwMDNBPiVTPFUwMDIwPiVwIgorCislIEVyYSA6IEJ1ZGRoaXN0IEVyYQorJWVyYSAgICAgIis6MTotNTQzPFUwMDJGPjAxPFUwMDJGPjAxOisqOjxVMEU5RT48VTAwMkU+PFUwRUFBPjxVMDAyRT46JUVDPFUwMDIwPiVFeSIKKyVlcmFfZF9mbXQgICAgICAgIiVlPFUwMDIwPiViPFUwMDIwPiVFeSIKKyVlcmFfdF9mbXQgICAgICAgIiVIPFUwMDJFPiVNPFUwMDJFPiVTPFUwMDIwPjxVMEU5OT48VTAwMkU+IgorJWVyYV9kX3RfZm10ICAgICAiPFUwRUE3PjxVMEVCMT48VTBFOTk+JUE8VTBFOTc+PFUwRUI1PjxVMEVDOD48VTAwMjA+JWU8VTAwMjA+JUI8VTAwMjA+JUVDPFUwMDIwPiVFeTxVMDAyQz48VTAwMjA+JUg8VTAwMkU+JU08VTAwMkU+JVM8VTAwMjA+PFUwRTk5PjxVMDAyRT4iCisKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbiAoZGF0ZSgxKSkgICAiJWEgJWUgJWIgJUV5ICVIOiVNOiVTICVaIgorJWRhdGVfZm10ICAgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDYyPi8KKyU8VTAwMjA+PFUwMDI1PjxVMDA0NT48VTAwNzk+PFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+LworJTxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUgSUNULTdJQ1QtNworJXRpbWV6b25lCSI8VTAwNDk+PFUwMDQzPjxVMDA1ND48VTAwMkQ+PFUwMDM3PjxVMDA0OT48VTAwNDM+PFUwMDU0PjxVMDAyZD48VTAwMzc+IgorCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworCit5ZXNzdHIgICAieWVzOllFUzp5OlkiCisKK25vc3RyICAgICJubzpOTzpuOk4iCisKK3llc2V4cHIgICJeW3lZXShbZUVdW3NTXSk/IgorCitub2V4cHIgICAiXltuTl1bb09dPyIKKworRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCitoZWlnaHQgICAyOTcKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK3RlbF9kb21fZm10ICAgICI8VTAwMjg+PFUwMDI1PjxVMDA0MT48VTAwMjk+PFUwMDI1PjxVMDA2Qz4iCitpbnRfc2VsZWN0ICAgICAiPFUwMDMwPjxVMDAzMD48VTAwMzE+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzOD48VTAwMzU+PFUwMDM2PiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKKyUgRklYTUUKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCisKK25hbWVfbXIgICAgICI8VTBFOTc+LiIKK25hbWVfbXJzICAgICI8VTBFOTk+LiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKKyUgICAgIiVmJU4lYSVOJWQlTiVyJXQlZSV0JWIlTiVoJXQlcyVOJVQlTiVTJU4leiVjJU4iCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDcyPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDY4PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA3Mz48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDUzPi8KKzxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9uYW1lICAiPFUwRUE1PjxVMEVCMj48VTBFQTc+IgorJUZJWE1FCislY291bnRyeV9wb3N0ICAiIgorY291bnRyeV9hYjIgICAiPFUwMDRDPjxVMDA0MT4iCitjb3VudHJ5X2FiMyAgICI8VTAwNEM+PFUwMDQxPjxVMDA0Rj4iCitjb3VudHJ5X251bSAgIDQxOAorY291bnRyeV9jYXIgICAiPFUwMDRDPjxVMDA0MT48VTAwNEY+IgorJUZJWE1FCislY291bnRyeV9pc2JuICAiIgorbGFuZ19uYW1lICAgICAiPFUwRUE1PjxVMEVCMj48VTBFQTc+IgorbGFuZ19hYiAgICAgICAiPFUwMDZDPjxVMDA2Rj4iCitsYW5nX3Rlcm0gICAgICI8VTAwNmM+PFUwMDYxPjxVMDA2Rj4iCitsYW5nX2xpYiAgICAgICI8VTAwNkM+PFUwMDYxPjxVMDA2Rj4iCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMva25fSU4gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9rbl9JTgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2M1ZmNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMva25fSU4KQEAgLTAsMCArMSwyMTYgQEAKK2NvbW1lbnRfY2hhciAgICAlCitlc2NhcGVfY2hhciAgICAgLworJSBLYW5uYWRhIGxhbmd1YWdlIGxvY2FsZSBmb3IgSW5kaWEuCislIENvcGllZCBmcm9uIGhpX0lOIG9uZSwgRyBLYXJ1bmFrYXIgPGthcnVuYWthckBmcmVlZG9taW5rLm9yZz4gLiBLYW5uYWRhIFRyYW5zbGF0aW9ucyBieSBBcnVuIFNoYXJtYSA8YXJ1bkBzaGFybWEtaG9tZS5uZXQ+CisKKyUgKioqIEJlbG93IGp1c3QgbW9kaWZ5IHRvIHN1aXQgeW91ciBsYW5ndWFnZS4gSSBoYXZlIG1vZGlmaWVkIGZvciBLYW5uYWRhCislICoqKiBvdGhlciBsYW5ndWFnZSBjb2RlcyAtIEd1amFyYXRpIC0gZ3UsIFB1bmphYmkgLSBwYSwgT3JpeWEgLSBvcgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiS2FubmFkYSBsYW5ndWFnZSBsb2NhbGUgZm9yIEluZGlhIgorc291cmNlICAgICAiSW5kTGludXgub3JnIgorYWRkcmVzcyAgICAiIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkthbm5hZGEiCit0ZXJyaXRvcnkgICJJbmRpYSIKK3JldmlzaW9uICAgIjAuMSIKK2RhdGUgICAgICAgIjIwMDItMTEtMjgiCislCitjYXRlZ29yeSAgImtuX0lOOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImtuX0lOOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImtuX0lOOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAia25fSU46MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJrbl9JTjoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImtuX0lOOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImtuX0lOOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImtuX0lOOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImtuX0lOOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAia25fSU46MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJrbl9JTjoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKKworJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEKK2NvcHkgImlzbzE0NjUxX3QxIgorCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiB0aGUgTENfTU9ORVRBUlkgY2F0ZWdvcnkuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRpZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUvSmF2YQorJQoraW50X2N1cnJfc3ltYm9sICAgICAgICI8VTAwNDk+PFUwMDRFPjxVMDA1Mj48VTAwMjA+IgorJSAqKiogQ2hhbmdlIHRoaXMgdG8gcmVmbGVjdCBLYW5uYWRhICwgaW4gRGV2IGl0IGlzIFJBIHdpdGggVlMgVSBhdHRhY2hlZAorY3VycmVuY3lfc3ltYm9sICAgICAgICI8VTBDQjA+PFUwQ0MyPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgICAzCitwb3NpdGl2ZV9zaWduICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24JICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgIDEKKyUKK0VORCBMQ19NT05FVEFSWQorCisKK0xDX05VTUVSSUMKK2NvcHkgImhpX0lOIgorRU5EIExDX05VTUVSSUMKKworCislICoqKiBNb2RpZnkgdGhlbSBmb3IgS2FubmFkYSAtIGVnIHdyaXRlIGRvd24gb24gcGFwZXIgLSBzZWUgd2hhdCBhbGwgdW5pY29kZQorJSAqKiogY2hhcmFjdGVycyBhcmUgbmVlZGVkLCBsb29rIHVwIHRoZWlyIGNvZGVzICYgcHV0IHRoZW0gaGVyZSAtIEthbm5hZGEKKworTENfVElNRQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX1RJTUUgY2F0ZWdvcnkuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRpZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUvSmF2YQorJQorJSBBYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWVzICglYSkKK2FiZGF5ICAgICAgICI8VTBDQjA+IjsvCisgICAgICAgICAgICAiPFUwQ0I4PjxVMENDQj4iOy8KKyAgICAgICAgICAgICI8VTBDQUU+PFUwQzgyPiI7LworICAgICAgICAgICAgIjxVMENBQz48VTBDQzE+IjsvCisgICAgICAgICAgICAiPFUwQzk3PjxVMENDMT4iOy8KKyAgICAgICAgICAgICI8VTBDQjY+PFUwQ0MxPiI7LworICAgICAgICAgICAgIjxVMENCNj4iCislCislIEZ1bGwgd2Vla2RheSBuYW1lcyAoJUEpCitkYXkgICAgICAiPFUwQ0IwPjxVMENCNT48VTBDQkY+PFUwQ0I1PjxVMENCRT48VTBDQjA+IjsvCisgICAgICAgICAgICAiPFUwQ0I4PjxVMENDQj48VTBDQUU+PFUwQ0I1PjxVMENCRT48VTBDQjA+IjsvCisgICAgICAgICAgICAiPFUwQ0FFPjxVMEM4Mj48VTBDOTc+PFUwQ0IzPjxVMENCNT48VTBDQkU+PFUwQ0IwPiI7LworICAgICAgICAgICAgIjxVMENBQz48VTBDQzE+PFUwQ0E3PjxVMENCNT48VTBDQkU+PFUwQ0IwPiI7LworICAgICAgICAgICAgIjxVMEM5Nz48VTBDQzE+PFUwQ0IwPjxVMENDMT48VTBDQjU+PFUwQ0JFPjxVMENCMD4iOy8KKyAgICAgICAgICAgICI8VTBDQjY+PFUwQ0MxPjxVMEM5NT48VTBDQ0Q+PFUwQ0IwPjxVMENCNT48VTBDQkU+PFUwQ0IwPiI7LworICAgICAgICAgICAgIjxVMENCNj48VTBDQTg+PFUwQ0JGPjxVMENCNT48VTBDQkU+PFUwQ0IwPiIKKworJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCithYm1vbiAgICAgICAJIjxVMEM5Qz4iOy8KKwkiPFUwQ0FCPjxVMENDNj4iOy8KKwkiPFUwQ0FFPjxVMENCRT4iOy8KKwkiPFUwQzhGPiI7LworCSI8VTBDQUU+PFUwQ0M3PiI7LworCSI8VTBDOUM+PFUwQ0MyPiI7LworCSI8VTBDOUM+PFUwQ0MxPiI7LworCSI8VTBDODY+IjsvCisJIjxVMENCOD48VTBDQzY+IjsvCisJIjxVMEM4NT4iOy8KKwkiPFUwQ0E4PiI7LworCSI8VTBDQTY+IgorCislCislIEZ1bGwgbW9udGggbmFtZXMgKCVCKQorbW9uICAgICAgCSI8VTBDOUM+PFUwQ0E4PjxVMENCNT48VTBDQjA+PFUwQ0JGPiI7LworCSI8VTBDQUI+PFUwQ0M2PjxVMENBQz48VTBDQ0Q+PFUwQ0IwPjxVMENCNT48VTBDQjA+PFUwQ0JGPiI7LworCSI8VTBDQUU+PFUwQ0JFPjxVMENCMD48VTBDQ0Q+PFUwQzlBPiI7LworCSI8VTBDOEY+PFUwQ0FBPjxVMENDRD48VTBDQjA+PFUwQ0JGPjxVMENCMj48VTBDQ0Q+IjsvCisJIjxVMENBRT48VTBDQzc+IjsvCisJIjxVMEM5Qz48VTBDQzI+PFUwQ0E4PjxVMENDRD4iOy8KKwkiPFUwQzlDPjxVMENDMT48VTBDQjI+PFUwQ0JFPjxVMENBRj48VTBDQkY+IjsvCisJIjxVMEM4Nj48VTBDOTc+PFUwQ0I4PjxVMENDRD48VTBDQTQ+PFUwQ0MxPiI7LworCSI8VTBDQjg+PFUwQ0M2PjxVMENBQT48VTBDQ0Q+PFUwQzlGPjxVMENDNj48VTBDODI+PFUwQ0FDPjxVMENCMD4iOy8KKwkiPFUwQzg1PjxVMEM5NT48VTBDQ0Q+PFUwQ0E0PjxVMENDMj48VTBDQUM+PFUwQ0IwPiI7LworCSI8VTBDQTg+PFUwQ0I1PjxVMENDNj48VTBDODI+PFUwQ0FDPjxVMENCMD4iOy8KKwkiPFUwQ0E2PjxVMENCNj48VTBDODI+PFUwQ0FDPjxVMENCMD4iCislCislIEVxdWl2YWxlbnQgb2YgQU0gUE0KK2FtX3BtICAgICAgIAkiPFUwQ0FBPjxVMENDMj48VTBDQjA+PFUwQ0NEPjxVMENCNT48VTBDQkU+PFUwQ0I5PjxVMENDRD48VTBDQTg+IjsvCisgICAgICAgICAgICAJIjxVMEM4NT48VTBDQUE+PFUwQ0IwPjxVMENCRT48VTBDQjk+PFUwQ0NEPjxVMENBOD4iCisKKyUgKioqIFRoZXJlIGFyZW50IGFueSBEZXZhbmFnYXJpIGNoYXJhY3RlcnMgYmVsb3csIHNvIGZvciB0aW1lIGJlaW5nCislICoqKiBtYWludGFpbiBzYW1lIGZvciBLYW5uYWRhIGFsc28sICBLYXJ1bmFrYXIKKworJQorJSBBcHByb3ByaWF0ZSBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uCislICVBICVkICViICVZJUk6JU06JVMgICVaCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA0MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj4vCis8VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+LworPFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24KKyUgJUEgJWQgJWIgJVkKK2RfZm10ICAgICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPi8KKzxVMDAyMD48VTAwMjU+PFUwMDU5PiIKKyUKKyUgQXBwcm9wcmlhdGUgdGltZSByZXByZXNlbnRhdGlvbgorJSAlSTolTTolUyAgJVoKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPi8KKzxVMDAyMD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIDEyIGggdGltZSByZXByZXNlbnRhdGlvbiAoJXIpCit0X2ZtdF9hbXBtICAiPFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA3MD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCisKK0xDX1BBUEVSCitjb3B5ICJoaV9JTiIKK0VORCBMQ19QQVBFUgorCisKK0xDX05BTUUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUgTENfTkFNRSBjYXRlZ29yeS4KKyUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDcwPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNjc+IgorbmFtZV9nZW4gICAgIiIKK25hbWVfbXIgICAgICI8VTAwNEQ+PFUwMDcyPjxVMDAyRT4iCituYW1lX21ycyAgICAiPFUwMDREPjxVMDA3Mj48VTAwNzM+PFUwMDJFPiIKK25hbWVfbWlzcyAgICI8VTAwNEQ+PFUwMDY5PjxVMDA3Mz48VTAwNzM+PFUwMDJFPiIKK25hbWVfbXMgICAgICI8VTAwNEQ+PFUwMDczPjxVMDAyRT4iCisKK0VORCBMQ19OQU1FCisKKworTENfQUREUkVTUworJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19BRERSRVNTCitwb3N0YWxfZm10ICAiPFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3Mj4iCisKK2NvdW50cnlfYWIyICI8VTAwNDk+PFUwMDRFPiIKK2NvdW50cnlfYWIzICI8VTAwNDk+PFUwMDRFPjxVMDA0ND4iCitjb3VudHJ5X251bSAzNTYKK0VORCBMQ19BRERSRVNTCisKKworTENfVEVMRVBIT05FCitjb3B5ICJoaV9JTiIKK0VORCBMQ19URUxFUEhPTkUKKworCitMQ19NRUFTVVJFTUVOVAorY29weSAiaGlfSU4iCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2tvX0tSIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMva29fS1IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM5MTVjMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2tvX0tSCkBAIC0wLDAgKzEsNjI0OCBAQAorZXNjYXBlX2NoYXIgLworY29tbWVudF9jaGFyICUKKworJSBLb3JlYW4gbGFuZ3VhZ2UgbG9jYWxlIGZvciBSZXB1YmxpYyBvZiBLb3JlYSAoU291dGggS29yZWEpCislIFNvdXJjZToKKyUgQWRkcmVzczoKKyUgQ29udGFjdDogV29uLWt5dSBQYXJrCislIEVtYWlsOiAgIHdrcGFya0BjaGVtLnNra3UuYWMua3IKKyUgRmF4OgorJSBMYW5ndWFnZToga28KKyUgVGVycml0b3J5OiBLUgorJSBSZXZpc2lvbjogMS4xCislIERhdGU6IDIwMDAtMTEtMDkKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMuZHMKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbyBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworJUNoYW5nZXM6CislIDE5OTktMDYtMDc6IFdvbi1reXUgUGFyayA8d2twYXJrQGNoZW0uc2trdS5hYy5rcj4KKyUJSW5pdGlhbCBjdXQuIE1vbiBKdW4gIDcgMTE6MjU6NDUgS1NUIDE5OTkKKyUgMTk5OS0wNy0wNzogV29uLWt5dSBQYXJrIDx3a3BhcmtAY2hlbS5za2t1LmFjLmtyPgorJQlGaXhlZCBsY19jb2xsYXRlIHByb2JsZW0gd2l0aCBiYXNoLTIueCBKdWwgNyAxOTk5CislIDE5OTktMTEtMjc6IFdvbi1reXUgUGFyayA8d2twYXJrQGNoZW0uc2trdS5hYy5rcj4KKyUJQWRqdXN0aW5nIGZvciBnbGliYy0yLjIgbG9jYWxlIGRlZmluaXRpb24KKyUgMjAwMC0wMi0wOTogV29uLWt5dSBQYXJrIDx3a3BhcmtAY2hlbS5za2t1LmFjLmtyPgorJQlDaGFuZ2VkIGNvbGxhdGlvbiBvZiBjaGFyc2V0LgorJSAyMDAwLTA4LTIxOiBXb24ta3l1IFBhcmsgPHdrcGFya0BjaGVtLnNra3UuYWMua3I+CislCUZpeGVkIExDX0NUWVBFIHR5cG8KKyUJQWRqdXN0ZWQgdG8gbmV3IGdsaWJjLTIuMiBtbmVtb25pYyBmb3JtYXQgPFV4eHh4PgorJSAyMDAwLTExLTA5OiBKdW5nc2hpayBTaGluIDxqc2hpbkBwYW50aGVvbi55YWxlLmVkdT4KKyUgICAgICAgICAgICAgV29uLWt5dSBQYXJrIDx3a3BhcmtAY2hlbS5za2t1LmFjLmtyPgorJSAgICAgICBDaGFuZ2VkIExDX0lERU5USUZJQ0FUSU9OIHRlcnJpdG9yeSBmaWVsZCB0byBSZXB1YmxpYyBvZiBLb3JlYQorJSAgICAgICBTdHJlYW1saW5lZCBoYW5ndWwgYW5kIGhhbmphIGNsYXNzIGRlZmluaXRpb24gaW4gTENfQ1RZUEUKKyUgICAgICAgICAgYW5kIGhhbmd1bCBwb3J0aW9uIG9mIExDX0NPTExBVEUKKyUgICAgICAgU2V2ZXJhbCBjaGFuZ2VzIGluIExDX1RJTUUKKyUgICAgICAgQWRkZWQgdGVsX2RvbV9mbXQgdG8gTENfVEVMRVBIT05FCislICAgICAgIFNvbWUgY29zbWV0aWMgY2hhbmdlcworJSAyMDAxLTEwLTA4OiBXb24ta3l1IFBhcmsgPHdrcGFya0BjaGVtLnNra3UuYWMua3I+CislICAgICAgIEZpeGVkIGEgdHlwbyBpbiBIYW5ndWwgcG9ydGlvbiBvZiBMQ19DT0xMQVRFCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJLb3JlYW4gbG9jYWxlIGZvciBSZXB1YmxpYyBvZiBLb3JlYSIKK3NvdXJjZSAgICAgIiIKK2FkZHJlc3MgICAgIiIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJLb3JlYW4iCit0ZXJyaXRvcnkgICJSZXB1YmxpYyBvZiBLb3JlYSIKK3JldmlzaW9uICAgIjEuMSIKK2RhdGUgICAgICAgIjIwMDAtMTEtMDkiCislCitjYXRlZ29yeSAgImtvX0tSOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImtvX0tSOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImtvX0tSOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAia29fS1I6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJrb19LUjoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImtvX0tSOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImtvX0tSOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImtvX0tSOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImtvX0tSOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAia29fS1I6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJrb19LUjoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKK29yZGVyX3N0YXJ0IGZvcndhcmQKKzxVMDAwMD4KKzxVMDAwMT4KKzxVMDAwMj4KKzxVMDAwNT4KKzxVMDAwNj4KKzxVMDAwNz4KKzxVMDAwOD4KKzxVMDAwOT4KKzxVMDAwQT4KKzxVMDAwQj4KKzxVMDAwQz4KKzxVMDAwRD4KKzxVMDAwRT4KKzxVMDAwRj4KKzxVMDAxMD4KKzxVMDAxMT4KKzxVMDAxMj4KKzxVMDAxMz4KKzxVMDAxND4KKzxVMDAxNT4KKzxVMDAxNj4KKzxVMDAxOD4KKzxVMDAxQT4KKzxVMDAxQj4KKzxVMDAxQz4KKzxVMDAxRD4KKzxVMDAxRT4KKzxVMDAxRj4KKzxVMDAyMD4KKzxVMDAyMT4KKzxVMDAyMj4KKzxVMDAyMz4KKzxVMDAyND4KKzxVMDAyNT4KKzxVMDAyNj4KKzxVMDAyNz4KKzxVMDAyOD4KKzxVMDAyOT4KKzxVMDAyQT4KKzxVMDAyQj4KKzxVMDAyQz4KKzxVMDAyRD4KKzxVMDAyRT4KKzxVMDAyRj4KKzxVMDAzMD4KKzxVMDAzMT4KKzxVMDAzMj4KKzxVMDAzMz4KKzxVMDAzND4KKzxVMDAzNT4KKzxVMDAzNj4KKzxVMDAzNz4KKzxVMDAzOD4KKzxVMDAzOT4KKzxVMDAzQT4KKzxVMDAzQj4KKzxVMDAzQz4KKzxVMDAzRD4KKzxVMDAzRT4KKzxVMDAzRj4KKzxVMDA0MD4KKzxVMDA0MT4KKzxVMDA0Mj4KKzxVMDA0Mz4KKzxVMDA0ND4KKzxVMDA0NT4KKzxVMDA0Nj4KKzxVMDA0Nz4KKzxVMDA0OD4KKzxVMDA0OT4KKzxVMDA0QT4KKzxVMDA0Qj4KKzxVMDA0Qz4KKzxVMDA0RD4KKzxVMDA0RT4KKzxVMDA0Rj4KKzxVMDA1MD4KKzxVMDA1MT4KKzxVMDA1Mj4KKzxVMDA1Mz4KKzxVMDA1ND4KKzxVMDA1NT4KKzxVMDA1Nj4KKzxVMDA1Nz4KKzxVMDA1OD4KKzxVMDA1OT4KKzxVMDA1QT4KKzxVMDA1Qj4KKzxVMjBBOT4KKzxVMDA1RD4KKzxVMDA1RT4KKzxVMDA1Rj4KKzxVMDA2MD4KKzxVMDA2MT4KKzxVMDA2Mj4KKzxVMDA2Mz4KKzxVMDA2ND4KKzxVMDA2NT4KKzxVMDA2Nj4KKzxVMDA2Nz4KKzxVMDA2OD4KKzxVMDA2OT4KKzxVMDA2QT4KKzxVMDA2Qj4KKzxVMDA2Qz4KKzxVMDA2RD4KKzxVMDA2RT4KKzxVMDA2Rj4KKzxVMDA3MD4KKzxVMDA3MT4KKzxVMDA3Mj4KKzxVMDA3Mz4KKzxVMDA3ND4KKzxVMDA3NT4KKzxVMDA3Nj4KKzxVMDA3Nz4KKzxVMDA3OD4KKzxVMDA3OT4KKzxVMDA3QT4KKzxVMDA3Qj4KKzxVMDA3Qz4KKzxVMDA3RD4KKzxVMDA3RT4KKzxVMDA3Rj4KKzxVMzAwMD4KKzxVMzAwMT4KKzxVMzAwMj4KKzxVMDBCNz4KKzxVMjAyNT4KKzxVMjAyNj4KKzxVMDBBOD4KKzxVMzAwMz4KKzxVMDBBRD4KKzxVMjAxNT4KKzxVMjIyNT4KKzxVRkYzQz4KKzxVMjIzQz4KKzxVMjAxOD4KKzxVMjAxOT4KKzxVMjAxQz4KKzxVMjAxRD4KKzxVMzAxND4KKzxVMzAxNT4KKzxVMzAwOD4KKzxVMzAwOT4KKzxVMzAwQT4KKzxVMzAwQj4KKzxVMzAwQz4KKzxVMzAwRD4KKzxVMzAwRT4KKzxVMzAwRj4KKzxVMzAxMD4KKzxVMzAxMT4KKzxVMDBCMT4KKzxVMDBENz4KKzxVMDBGNz4KKzxVMjI2MD4KKzxVMjI2ND4KKzxVMjI2NT4KKzxVMjIxRT4KKzxVMjIzND4KKzxVMDBCMD4KKzxVMjAzMj4KKzxVMjAzMz4KKzxVMjEwMz4KKzxVMjEyQj4KKzxVRkZFMD4KKzxVRkZFMT4KKzxVRkZFNT4KKzxVMjY0Mj4KKzxVMjY0MD4KKzxVMjIyMD4KKzxVMjJBNT4KKzxVMjMxMj4KKzxVMjIwMj4KKzxVMjIwNz4KKzxVMjI2MT4KKzxVMjI1Mj4KKzxVMDBBNz4KKzxVMjAzQj4KKzxVMjYwNj4KKzxVMjYwNT4KKzxVMjVDQj4KKzxVMjVDRj4KKzxVMjVDRT4KKzxVMjVDNz4KKzxVMjVDNj4KKzxVMjVBMT4KKzxVMjVBMD4KKzxVMjVCMz4KKzxVMjVCMj4KKzxVMjVCRD4KKzxVMjVCQz4KKzxVMjE5Mj4KKzxVMjE5MD4KKzxVMjE5MT4KKzxVMjE5Mz4KKzxVMjE5ND4KKzxVMzAxMz4KKzxVMjI2QT4KKzxVMjI2Qj4KKzxVMjIxQT4KKzxVMjIzRD4KKzxVMjIxRD4KKzxVMjIzNT4KKzxVMjIyQj4KKzxVMjIyQz4KKzxVMjIwOD4KKzxVMjIwQj4KKzxVMjI4Nj4KKzxVMjI4Nz4KKzxVMjI4Mj4KKzxVMjI4Mz4KKzxVMjIyQT4KKzxVMjIyOT4KKzxVMjIyNz4KKzxVMjIyOD4KKzxVRkZFMj4KKzxVMjFEMj4KKzxVMjFEND4KKzxVMjIwMD4KKzxVMjIwMz4KKzxVMDBCND4KKzxVRkY1RT4KKzxVMDJDNz4KKzxVMDJEOD4KKzxVMDJERD4KKzxVMDJEQT4KKzxVMDJEOT4KKzxVMDBCOD4KKzxVMDJEQj4KKzxVMDBBMT4KKzxVMDBCRj4KKzxVMDJEMD4KKzxVMjIyRT4KKzxVMjIxMT4KKzxVMjIwRj4KKzxVMDBBND4KKzxVMjEwOT4KKzxVMjAzMD4KKzxVMjVDMT4KKzxVMjVDMD4KKzxVMjVCNz4KKzxVMjVCNj4KKzxVMjY2ND4KKzxVMjY2MD4KKzxVMjY2MT4KKzxVMjY2NT4KKzxVMjY2Nz4KKzxVMjY2Mz4KKzxVMjI5OT4KKzxVMjVDOD4KKzxVMjVBMz4KKzxVMjVEMD4KKzxVMjVEMT4KKzxVMjU5Mj4KKzxVMjVBND4KKzxVMjVBNT4KKzxVMjVBOD4KKzxVMjVBNz4KKzxVMjVBNj4KKzxVMjVBOT4KKzxVMjY2OD4KKzxVMjYwRj4KKzxVMjYwRT4KKzxVMjYxQz4KKzxVMjYxRT4KKzxVMDBCNj4KKzxVMjAyMD4KKzxVMjAyMT4KKzxVMjE5NT4KKzxVMjE5Nz4KKzxVMjE5OT4KKzxVMjE5Nj4KKzxVMjE5OD4KKzxVMjY2RD4KKzxVMjY2OT4KKzxVMjY2QT4KKzxVMjY2Qz4KKzxVMzI3Rj4KKzxVMzIxQz4KKzxVMjExNj4KKzxVMzNDNz4KKzxVMjEyMj4KKzxVMzNDMj4KKzxVMzNEOD4KKzxVMjEyMT4KKzxVRkYwMT4KKzxVRkYwMj4KKzxVRkYwMz4KKzxVRkYwND4KKzxVRkYwNT4KKzxVRkYwNj4KKzxVRkYwNz4KKzxVRkYwOD4KKzxVRkYwOT4KKzxVRkYwQT4KKzxVRkYwQj4KKzxVRkYwQz4KKzxVRkYwRD4KKzxVRkYwRT4KKzxVRkYwRj4KKzxVRkYxMD4KKzxVRkYxMT4KKzxVRkYxMj4KKzxVRkYxMz4KKzxVRkYxND4KKzxVRkYxNT4KKzxVRkYxNj4KKzxVRkYxNz4KKzxVRkYxOD4KKzxVRkYxOT4KKzxVRkYxQT4KKzxVRkYxQj4KKzxVRkYxQz4KKzxVRkYxRD4KKzxVRkYxRT4KKzxVRkYxRj4KKzxVRkYyMD4KKzxVRkYyMT4KKzxVRkYyMj4KKzxVRkYyMz4KKzxVRkYyND4KKzxVRkYyNT4KKzxVRkYyNj4KKzxVRkYyNz4KKzxVRkYyOD4KKzxVRkYyOT4KKzxVRkYyQT4KKzxVRkYyQj4KKzxVRkYyQz4KKzxVRkYyRD4KKzxVRkYyRT4KKzxVRkYyRj4KKzxVRkYzMD4KKzxVRkYzMT4KKzxVRkYzMj4KKzxVRkYzMz4KKzxVRkYzND4KKzxVRkYzNT4KKzxVRkYzNj4KKzxVRkYzNz4KKzxVRkYzOD4KKzxVRkYzOT4KKzxVRkYzQT4KKzxVRkYzQj4KKzxVRkZFNj4KKzxVRkYzRD4KKzxVRkYzRT4KKzxVRkYzRj4KKzxVRkY0MD4KKzxVRkY0MT4KKzxVRkY0Mj4KKzxVRkY0Mz4KKzxVRkY0ND4KKzxVRkY0NT4KKzxVRkY0Nj4KKzxVRkY0Nz4KKzxVRkY0OD4KKzxVRkY0OT4KKzxVRkY0QT4KKzxVRkY0Qj4KKzxVRkY0Qz4KKzxVRkY0RD4KKzxVRkY0RT4KKzxVRkY0Rj4KKzxVRkY1MD4KKzxVRkY1MT4KKzxVRkY1Mj4KKzxVRkY1Mz4KKzxVRkY1ND4KKzxVRkY1NT4KKzxVRkY1Nj4KKzxVRkY1Nz4KKzxVRkY1OD4KKzxVRkY1OT4KKzxVRkY1QT4KKzxVRkY1Qj4KKzxVRkY1Qz4KKzxVRkY1RD4KKzxVRkZFMz4KKzxVMzEzMT4KKzxVMzEzMj4KKzxVMzEzMz4KKzxVMzEzND4KKzxVMzEzNT4KKzxVMzEzNj4KKzxVMzEzNz4KKzxVMzEzOD4KKzxVMzEzOT4KKzxVMzEzQT4KKzxVMzEzQj4KKzxVMzEzQz4KKzxVMzEzRD4KKzxVMzEzRT4KKzxVMzEzRj4KKzxVMzE0MD4KKzxVMzE0MT4KKzxVMzE0Mj4KKzxVMzE0Mz4KKzxVMzE0ND4KKzxVMzE0NT4KKzxVMzE0Nj4KKzxVMzE0Nz4KKzxVMzE0OD4KKzxVMzE0OT4KKzxVMzE0QT4KKzxVMzE0Qj4KKzxVMzE0Qz4KKzxVMzE0RD4KKzxVMzE0RT4KKzxVMzE0Rj4KKzxVMzE1MD4KKzxVMzE1MT4KKzxVMzE1Mj4KKzxVMzE1Mz4KKzxVMzE1ND4KKzxVMzE1NT4KKzxVMzE1Nj4KKzxVMzE1Nz4KKzxVMzE1OD4KKzxVMzE1OT4KKzxVMzE1QT4KKzxVMzE1Qj4KKzxVMzE1Qz4KKzxVMzE1RD4KKzxVMzE1RT4KKzxVMzE1Rj4KKzxVMzE2MD4KKzxVMzE2MT4KKzxVMzE2Mj4KKzxVMzE2Mz4KKzxVMzE2ND4KKzxVMzE2NT4KKzxVMzE2Nj4KKzxVMzE2Nz4KKzxVMzE2OD4KKzxVMzE2OT4KKzxVMzE2QT4KKzxVMzE2Qj4KKzxVMzE2Qz4KKzxVMzE2RD4KKzxVMzE2RT4KKzxVMzE2Rj4KKzxVMzE3MD4KKzxVMzE3MT4KKzxVMzE3Mj4KKzxVMzE3Mz4KKzxVMzE3ND4KKzxVMzE3NT4KKzxVMzE3Nj4KKzxVMzE3Nz4KKzxVMzE3OD4KKzxVMzE3OT4KKzxVMzE3QT4KKzxVMzE3Qj4KKzxVMzE3Qz4KKzxVMzE3RD4KKzxVMzE3RT4KKzxVMzE3Rj4KKzxVMzE4MD4KKzxVMzE4MT4KKzxVMzE4Mj4KKzxVMzE4Mz4KKzxVMzE4ND4KKzxVMzE4NT4KKzxVMzE4Nj4KKzxVMzE4Nz4KKzxVMzE4OD4KKzxVMzE4OT4KKzxVMzE4QT4KKzxVMzE4Qj4KKzxVMzE4Qz4KKzxVMzE4RD4KKzxVMzE4RT4KKzxVMjE3MD4KKzxVMjE3MT4KKzxVMjE3Mj4KKzxVMjE3Mz4KKzxVMjE3ND4KKzxVMjE3NT4KKzxVMjE3Nj4KKzxVMjE3Nz4KKzxVMjE3OD4KKzxVMjE3OT4KKzxVMjE2MD4KKzxVMjE2MT4KKzxVMjE2Mj4KKzxVMjE2Mz4KKzxVMjE2ND4KKzxVMjE2NT4KKzxVMjE2Nj4KKzxVMjE2Nz4KKzxVMjE2OD4KKzxVMjE2OT4KKzxVMDM5MT4KKzxVMDM5Mj4KKzxVMDM5Mz4KKzxVMDM5ND4KKzxVMDM5NT4KKzxVMDM5Nj4KKzxVMDM5Nz4KKzxVMDM5OD4KKzxVMDM5OT4KKzxVMDM5QT4KKzxVMDM5Qj4KKzxVMDM5Qz4KKzxVMDM5RD4KKzxVMDM5RT4KKzxVMDM5Rj4KKzxVMDNBMD4KKzxVMDNBMT4KKzxVMDNBMz4KKzxVMDNBND4KKzxVMDNBNT4KKzxVMDNBNj4KKzxVMDNBNz4KKzxVMDNBOD4KKzxVMDNBOT4KKzxVMDNCMT4KKzxVMDNCMj4KKzxVMDNCMz4KKzxVMDNCND4KKzxVMDNCNT4KKzxVMDNCNj4KKzxVMDNCNz4KKzxVMDNCOD4KKzxVMDNCOT4KKzxVMDNCQT4KKzxVMDNCQj4KKzxVMDNCQz4KKzxVMDNCRD4KKzxVMDNCRT4KKzxVMDNCRj4KKzxVMDNDMD4KKzxVMDNDMT4KKzxVMDNDMz4KKzxVMDNDND4KKzxVMDNDNT4KKzxVMDNDNj4KKzxVMDNDNz4KKzxVMDNDOD4KKzxVMDNDOT4KKzxVMjUwMD4KKzxVMjUwMj4KKzxVMjUwQz4KKzxVMjUxMD4KKzxVMjUxOD4KKzxVMjUxND4KKzxVMjUxQz4KKzxVMjUyQz4KKzxVMjUyND4KKzxVMjUzND4KKzxVMjUzQz4KKzxVMjUwMT4KKzxVMjUwMz4KKzxVMjUwRj4KKzxVMjUxMz4KKzxVMjUxQj4KKzxVMjUxNz4KKzxVMjUyMz4KKzxVMjUzMz4KKzxVMjUyQj4KKzxVMjUzQj4KKzxVMjU0Qj4KKzxVMjUyMD4KKzxVMjUyRj4KKzxVMjUyOD4KKzxVMjUzNz4KKzxVMjUzRj4KKzxVMjUxRD4KKzxVMjUzMD4KKzxVMjUyNT4KKzxVMjUzOD4KKzxVMjU0Mj4KKzxVMjUxMj4KKzxVMjUxMT4KKzxVMjUxQT4KKzxVMjUxOT4KKzxVMjUxNj4KKzxVMjUxNT4KKzxVMjUwRT4KKzxVMjUwRD4KKzxVMjUxRT4KKzxVMjUxRj4KKzxVMjUyMT4KKzxVMjUyMj4KKzxVMjUyNj4KKzxVMjUyNz4KKzxVMjUyOT4KKzxVMjUyQT4KKzxVMjUyRD4KKzxVMjUyRT4KKzxVMjUzMT4KKzxVMjUzMj4KKzxVMjUzNT4KKzxVMjUzNj4KKzxVMjUzOT4KKzxVMjUzQT4KKzxVMjUzRD4KKzxVMjUzRT4KKzxVMjU0MD4KKzxVMjU0MT4KKzxVMjU0Mz4KKzxVMjU0ND4KKzxVMjU0NT4KKzxVMjU0Nj4KKzxVMjU0Nz4KKzxVMjU0OD4KKzxVMjU0OT4KKzxVMjU0QT4KKzxVMzM5NT4KKzxVMzM5Nj4KKzxVMzM5Nz4KKzxVMjExMz4KKzxVMzM5OD4KKzxVMzNDND4KKzxVMzNBMz4KKzxVMzNBND4KKzxVMzNBNT4KKzxVMzNBNj4KKzxVMzM5OT4KKzxVMzM5QT4KKzxVMzM5Qj4KKzxVMzM5Qz4KKzxVMzM5RD4KKzxVMzM5RT4KKzxVMzM5Rj4KKzxVMzNBMD4KKzxVMzNBMT4KKzxVMzNBMj4KKzxVMzNDQT4KKzxVMzM4RD4KKzxVMzM4RT4KKzxVMzM4Rj4KKzxVMzNDRj4KKzxVMzM4OD4KKzxVMzM4OT4KKzxVMzNDOD4KKzxVMzNBNz4KKzxVMzNBOD4KKzxVMzNCMD4KKzxVMzNCMT4KKzxVMzNCMj4KKzxVMzNCMz4KKzxVMzNCND4KKzxVMzNCNT4KKzxVMzNCNj4KKzxVMzNCNz4KKzxVMzNCOD4KKzxVMzNCOT4KKzxVMzM4MD4KKzxVMzM4MT4KKzxVMzM4Mj4KKzxVMzM4Mz4KKzxVMzM4ND4KKzxVMzNCQT4KKzxVMzNCQj4KKzxVMzNCQz4KKzxVMzNCRD4KKzxVMzNCRT4KKzxVMzNCRj4KKzxVMzM5MD4KKzxVMzM5MT4KKzxVMzM5Mj4KKzxVMzM5Mz4KKzxVMzM5ND4KKzxVMjEyNj4KKzxVMzNDMD4KKzxVMzNDMT4KKzxVMzM4QT4KKzxVMzM4Qj4KKzxVMzM4Qz4KKzxVMzNENj4KKzxVMzNDNT4KKzxVMzNBRD4KKzxVMzNBRT4KKzxVMzNBRj4KKzxVMzNEQj4KKzxVMzNBOT4KKzxVMzNBQT4KKzxVMzNBQj4KKzxVMzNBQz4KKzxVMzNERD4KKzxVMzNEMD4KKzxVMzNEMz4KKzxVMzNDMz4KKzxVMzNDOT4KKzxVMzNEQz4KKzxVMzNDNj4KKzxVMDBDNj4KKzxVMDBEMD4KKzxVMDBBQT4KKzxVMDEyNj4KKzxVMDEzMj4KKzxVMDEzRj4KKzxVMDE0MT4KKzxVMDBEOD4KKzxVMDE1Mj4KKzxVMDBCQT4KKzxVMDBERT4KKzxVMDE2Nj4KKzxVMDE0QT4KKzxVMzI2MD4KKzxVMzI2MT4KKzxVMzI2Mj4KKzxVMzI2Mz4KKzxVMzI2ND4KKzxVMzI2NT4KKzxVMzI2Nj4KKzxVMzI2Nz4KKzxVMzI2OD4KKzxVMzI2OT4KKzxVMzI2QT4KKzxVMzI2Qj4KKzxVMzI2Qz4KKzxVMzI2RD4KKzxVMzI2RT4KKzxVMzI2Rj4KKzxVMzI3MD4KKzxVMzI3MT4KKzxVMzI3Mj4KKzxVMzI3Mz4KKzxVMzI3ND4KKzxVMzI3NT4KKzxVMzI3Nj4KKzxVMzI3Nz4KKzxVMzI3OD4KKzxVMzI3OT4KKzxVMzI3QT4KKzxVMzI3Qj4KKzxVMjREMD4KKzxVMjREMT4KKzxVMjREMj4KKzxVMjREMz4KKzxVMjREND4KKzxVMjRENT4KKzxVMjRENj4KKzxVMjRENz4KKzxVMjREOD4KKzxVMjREOT4KKzxVMjREQT4KKzxVMjREQj4KKzxVMjREQz4KKzxVMjRERD4KKzxVMjRERT4KKzxVMjRERj4KKzxVMjRFMD4KKzxVMjRFMT4KKzxVMjRFMj4KKzxVMjRFMz4KKzxVMjRFND4KKzxVMjRFNT4KKzxVMjRFNj4KKzxVMjRFNz4KKzxVMjRFOD4KKzxVMjRFOT4KKzxVMjQ2MD4KKzxVMjQ2MT4KKzxVMjQ2Mj4KKzxVMjQ2Mz4KKzxVMjQ2ND4KKzxVMjQ2NT4KKzxVMjQ2Nj4KKzxVMjQ2Nz4KKzxVMjQ2OD4KKzxVMjQ2OT4KKzxVMjQ2QT4KKzxVMjQ2Qj4KKzxVMjQ2Qz4KKzxVMjQ2RD4KKzxVMjQ2RT4KKzxVMDBCRD4KKzxVMjE1Mz4KKzxVMjE1ND4KKzxVMDBCQz4KKzxVMDBCRT4KKzxVMjE1Qj4KKzxVMjE1Qz4KKzxVMjE1RD4KKzxVMjE1RT4KKzxVMDBFNj4KKzxVMDExMT4KKzxVMDBGMD4KKzxVMDEyNz4KKzxVMDEzMT4KKzxVMDEzMz4KKzxVMDEzOD4KKzxVMDE0MD4KKzxVMDE0Mj4KKzxVMDBGOD4KKzxVMDE1Mz4KKzxVMDBERj4KKzxVMDBGRT4KKzxVMDE2Nz4KKzxVMDE0Qj4KKzxVMDE0OT4KKzxVMzIwMD4KKzxVMzIwMT4KKzxVMzIwMj4KKzxVMzIwMz4KKzxVMzIwND4KKzxVMzIwNT4KKzxVMzIwNj4KKzxVMzIwNz4KKzxVMzIwOD4KKzxVMzIwOT4KKzxVMzIwQT4KKzxVMzIwQj4KKzxVMzIwQz4KKzxVMzIwRD4KKzxVMzIwRT4KKzxVMzIwRj4KKzxVMzIxMD4KKzxVMzIxMT4KKzxVMzIxMj4KKzxVMzIxMz4KKzxVMzIxND4KKzxVMzIxNT4KKzxVMzIxNj4KKzxVMzIxNz4KKzxVMzIxOD4KKzxVMzIxOT4KKzxVMzIxQT4KKzxVMzIxQj4KKzxVMjQ5Qz4KKzxVMjQ5RD4KKzxVMjQ5RT4KKzxVMjQ5Rj4KKzxVMjRBMD4KKzxVMjRBMT4KKzxVMjRBMj4KKzxVMjRBMz4KKzxVMjRBND4KKzxVMjRBNT4KKzxVMjRBNj4KKzxVMjRBNz4KKzxVMjRBOD4KKzxVMjRBOT4KKzxVMjRBQT4KKzxVMjRBQj4KKzxVMjRBQz4KKzxVMjRBRD4KKzxVMjRBRT4KKzxVMjRBRj4KKzxVMjRCMD4KKzxVMjRCMT4KKzxVMjRCMj4KKzxVMjRCMz4KKzxVMjRCND4KKzxVMjRCNT4KKzxVMjQ3ND4KKzxVMjQ3NT4KKzxVMjQ3Nj4KKzxVMjQ3Nz4KKzxVMjQ3OD4KKzxVMjQ3OT4KKzxVMjQ3QT4KKzxVMjQ3Qj4KKzxVMjQ3Qz4KKzxVMjQ3RD4KKzxVMjQ3RT4KKzxVMjQ3Rj4KKzxVMjQ4MD4KKzxVMjQ4MT4KKzxVMjQ4Mj4KKzxVMDBCOT4KKzxVMDBCMj4KKzxVMDBCMz4KKzxVMjA3ND4KKzxVMjA3Rj4KKzxVMjA4MT4KKzxVMjA4Mj4KKzxVMjA4Mz4KKzxVMjA4ND4KKzxVMzA0MT4KKzxVMzA0Mj4KKzxVMzA0Mz4KKzxVMzA0ND4KKzxVMzA0NT4KKzxVMzA0Nj4KKzxVMzA0Nz4KKzxVMzA0OD4KKzxVMzA0OT4KKzxVMzA0QT4KKzxVMzA0Qj4KKzxVMzA0Qz4KKzxVMzA0RD4KKzxVMzA0RT4KKzxVMzA0Rj4KKzxVMzA1MD4KKzxVMzA1MT4KKzxVMzA1Mj4KKzxVMzA1Mz4KKzxVMzA1ND4KKzxVMzA1NT4KKzxVMzA1Nj4KKzxVMzA1Nz4KKzxVMzA1OD4KKzxVMzA1OT4KKzxVMzA1QT4KKzxVMzA1Qj4KKzxVMzA1Qz4KKzxVMzA1RD4KKzxVMzA1RT4KKzxVMzA1Rj4KKzxVMzA2MD4KKzxVMzA2MT4KKzxVMzA2Mj4KKzxVMzA2Mz4KKzxVMzA2ND4KKzxVMzA2NT4KKzxVMzA2Nj4KKzxVMzA2Nz4KKzxVMzA2OD4KKzxVMzA2OT4KKzxVMzA2QT4KKzxVMzA2Qj4KKzxVMzA2Qz4KKzxVMzA2RD4KKzxVMzA2RT4KKzxVMzA2Rj4KKzxVMzA3MD4KKzxVMzA3MT4KKzxVMzA3Mj4KKzxVMzA3Mz4KKzxVMzA3ND4KKzxVMzA3NT4KKzxVMzA3Nj4KKzxVMzA3Nz4KKzxVMzA3OD4KKzxVMzA3OT4KKzxVMzA3QT4KKzxVMzA3Qj4KKzxVMzA3Qz4KKzxVMzA3RD4KKzxVMzA3RT4KKzxVMzA3Rj4KKzxVMzA4MD4KKzxVMzA4MT4KKzxVMzA4Mj4KKzxVMzA4Mz4KKzxVMzA4ND4KKzxVMzA4NT4KKzxVMzA4Nj4KKzxVMzA4Nz4KKzxVMzA4OD4KKzxVMzA4OT4KKzxVMzA4QT4KKzxVMzA4Qj4KKzxVMzA4Qz4KKzxVMzA4RD4KKzxVMzA4RT4KKzxVMzA4Rj4KKzxVMzA5MD4KKzxVMzA5MT4KKzxVMzA5Mj4KKzxVMzA5Mz4KKzxVMzBBMT4KKzxVMzBBMj4KKzxVMzBBMz4KKzxVMzBBND4KKzxVMzBBNT4KKzxVMzBBNj4KKzxVMzBBNz4KKzxVMzBBOD4KKzxVMzBBOT4KKzxVMzBBQT4KKzxVMzBBQj4KKzxVMzBBQz4KKzxVMzBBRD4KKzxVMzBBRT4KKzxVMzBBRj4KKzxVMzBCMD4KKzxVMzBCMT4KKzxVMzBCMj4KKzxVMzBCMz4KKzxVMzBCND4KKzxVMzBCNT4KKzxVMzBCNj4KKzxVMzBCNz4KKzxVMzBCOD4KKzxVMzBCOT4KKzxVMzBCQT4KKzxVMzBCQj4KKzxVMzBCQz4KKzxVMzBCRD4KKzxVMzBCRT4KKzxVMzBCRj4KKzxVMzBDMD4KKzxVMzBDMT4KKzxVMzBDMj4KKzxVMzBDMz4KKzxVMzBDND4KKzxVMzBDNT4KKzxVMzBDNj4KKzxVMzBDNz4KKzxVMzBDOD4KKzxVMzBDOT4KKzxVMzBDQT4KKzxVMzBDQj4KKzxVMzBDQz4KKzxVMzBDRD4KKzxVMzBDRT4KKzxVMzBDRj4KKzxVMzBEMD4KKzxVMzBEMT4KKzxVMzBEMj4KKzxVMzBEMz4KKzxVMzBEND4KKzxVMzBENT4KKzxVMzBENj4KKzxVMzBENz4KKzxVMzBEOD4KKzxVMzBEOT4KKzxVMzBEQT4KKzxVMzBEQj4KKzxVMzBEQz4KKzxVMzBERD4KKzxVMzBERT4KKzxVMzBERj4KKzxVMzBFMD4KKzxVMzBFMT4KKzxVMzBFMj4KKzxVMzBFMz4KKzxVMzBFND4KKzxVMzBFNT4KKzxVMzBFNj4KKzxVMzBFNz4KKzxVMzBFOD4KKzxVMzBFOT4KKzxVMzBFQT4KKzxVMzBFQj4KKzxVMzBFQz4KKzxVMzBFRD4KKzxVMzBFRT4KKzxVMzBFRj4KKzxVMzBGMD4KKzxVMzBGMT4KKzxVMzBGMj4KKzxVMzBGMz4KKzxVMzBGND4KKzxVMzBGNT4KKzxVMzBGNj4KKzxVMDQxMD4KKzxVMDQxMT4KKzxVMDQxMj4KKzxVMDQxMz4KKzxVMDQxND4KKzxVMDQxNT4KKzxVMDQwMT4KKzxVMDQxNj4KKzxVMDQxNz4KKzxVMDQxOD4KKzxVMDQxOT4KKzxVMDQxQT4KKzxVMDQxQj4KKzxVMDQxQz4KKzxVMDQxRD4KKzxVMDQxRT4KKzxVMDQxRj4KKzxVMDQyMD4KKzxVMDQyMT4KKzxVMDQyMj4KKzxVMDQyMz4KKzxVMDQyND4KKzxVMDQyNT4KKzxVMDQyNj4KKzxVMDQyNz4KKzxVMDQyOD4KKzxVMDQyOT4KKzxVMDQyQT4KKzxVMDQyQj4KKzxVMDQyQz4KKzxVMDQyRD4KKzxVMDQyRT4KKzxVMDQyRj4KKzxVMDQzMD4KKzxVMDQzMT4KKzxVMDQzMj4KKzxVMDQzMz4KKzxVMDQzND4KKzxVMDQzNT4KKzxVMDQ1MT4KKzxVMDQzNj4KKzxVMDQzNz4KKzxVMDQzOD4KKzxVMDQzOT4KKzxVMDQzQT4KKzxVMDQzQj4KKzxVMDQzQz4KKzxVMDQzRD4KKzxVMDQzRT4KKzxVMDQzRj4KKzxVMDQ0MD4KKzxVMDQ0MT4KKzxVMDQ0Mj4KKzxVMDQ0Mz4KKzxVMDQ0ND4KKzxVMDQ0NT4KKzxVMDQ0Nj4KKzxVMDQ0Nz4KKzxVMDQ0OD4KKzxVMDQ0OT4KKzxVMDQ0QT4KKzxVMDQ0Qj4KKzxVMDQ0Qz4KKzxVMDQ0RD4KKzxVMDQ0RT4KKzxVMDQ0Rj4KKyUlJQorJSBIQU5HVUwgU1lMTEFCTEVTCis8VUFDMDA+CisuLgorPFVEN0EzPgorJSUlCislIEhBTkpBLiBGb3IgdGhlIG1vbWVudCwgSGFuamFzIGRlZmluZWQgaW4gS1MgWCAxMDAxCislIGFyZSBlbnVtZXJhdGVkIGluIHRoZSBvcmRlciB0aGV5J3JlIGxpc3RlZCBpbiBLUyBYIDEwMDEuCis8VTRGM0Q+Cis8VTRGNzM+Cis8VTUwNDc+Cis8VTUwRjk+Cis8VTUyQTA+Cis8VTUzRUY+Cis8VTU0NzU+Cis8VTU0RTU+Cis8VTU2MDk+Cis8VTVBQzE+Cis8VTVCQjY+Cis8VTY2ODc+Cis8VTY3QjY+Cis8VTY3Qjc+Cis8VTY3RUY+Cis8VTZCNEM+Cis8VTczQzI+Cis8VTc1QzI+Cis8VTdBM0M+Cis8VTgyREI+Cis8VTgzMDQ+Cis8VTg4NTc+Cis8VTg4ODg+Cis8VThBMzY+Cis8VThDQzg+Cis8VThEQ0Y+Cis8VThFRkI+Cis8VThGRTY+Cis8VTk5RDU+Cis8VTUyM0I+Cis8VTUzNzQ+Cis8VTU0MDQ+Cis8VTYwNkE+Cis8VTYxNjQ+Cis8VTZCQkM+Cis8VTczQ0Y+Cis8VTgxMUE+Cis8VTg5QkE+Cis8VTg5RDI+Cis8VTk1QTM+Cis8VTRGODM+Cis8VTUyMEE+Cis8VTU4QkU+Cis8VTU5Nzg+Cis8VTU5RTY+Cis8VTVFNzI+Cis8VTVFNzk+Cis8VTYxQzc+Cis8VTYzQzA+Cis8VTY3NDY+Cis8VTY3RUM+Cis8VTY4N0Y+Cis8VTZGOTc+Cis8VTc2NEU+Cis8VTc3MEI+Cis8VTc4RjU+Cis8VTdBMDg+Cis8VTdBRkY+Cis8VTdDMjE+Cis8VTgwOUQ+Cis8VTgyNkU+Cis8VTgyNzE+Cis8VThBRUI+Cis8VTk1OTM+Cis8VTRFNkI+Cis8VTU1OUQ+Cis8VTY2Rjc+Cis8VTZFMzQ+Cis8VTc4QTM+Cis8VTdBRUQ+Cis8VTg0NUI+Cis8VTg5MTA+Cis8VTg3NEU+Cis8VTk3QTg+Cis8VTUyRDg+Cis8VTU3NEU+Cis8VTU4MkE+Cis8VTVENEM+Cis8VTYxMUY+Cis8VTYxQkU+Cis8VTYyMjE+Cis8VTY1NjI+Cis8VTY3RDE+Cis8VTZBNDQ+Cis8VTZFMUI+Cis8VTc1MTg+Cis8VTc1QjM+Cis8VTc2RTM+Cis8VTc3QjA+Cis8VTdEM0E+Cis8VTkwQUY+Cis8VTk0NTE+Cis8VTk0NTI+Cis8VTlGOTU+Cis8VTUzMjM+Cis8VTVDQUM+Cis8VTc1MzI+Cis8VTgwREI+Cis8VTkyNDA+Cis8VTk1OTg+Cis8VTUyNUI+Cis8VTU4MDg+Cis8VTU5REM+Cis8VTVDQTE+Cis8VTVEMTc+Cis8VTVFQjc+Cis8VTVGM0E+Cis8VTVGNEE+Cis8VTYxNzc+Cis8VTZDNUY+Cis8VTc1N0E+Cis8VTc1ODY+Cis8VTdDRTA+Cis8VTdENzM+Cis8VTdEQjE+Cis8VTdGOEM+Cis8VTgxNTQ+Cis8VTgyMjE+Cis8VTg1OTE+Cis8VTg5NDE+Cis8VThCMUI+Cis8VTkyRkM+Cis8VTk2NEQ+Cis8VTlDNDc+Cis8VTRFQ0I+Cis8VTRFRjc+Cis8VTUwMEI+Cis8VTUxRjE+Cis8VTU4NEY+Cis8VTYxMzc+Cis8VTYxM0U+Cis8VTYxNjg+Cis8VTY1Mzk+Cis8VTY5RUE+Cis8VTZGMTE+Cis8VTc1QTU+Cis8VTc2ODY+Cis8VTc2RDY+Cis8VTdCODc+Cis8VTgyQTU+Cis8VTg0Q0I+Cis8VUY5MDA+Cis8VTkzQTc+Cis8VTk1OEI+Cis8VTU1ODA+Cis8VTVCQTI+Cis8VTU3NTE+Cis8VUY5MDE+Cis8VTdDQjM+Cis8VTdGQjk+Cis8VTkxQjU+Cis8VTUwMjg+Cis8VTUzQkI+Cis8VTVDNDU+Cis8VTVERTg+Cis8VTYyRDI+Cis8VTYzNkU+Cis8VTY0REE+Cis8VTY0RTc+Cis8VTZFMjA+Cis8VTcwQUM+Cis8VTc5NUI+Cis8VThEREQ+Cis8VThFMUU+Cis8VUY5MDI+Cis8VTkwN0Q+Cis8VTkyNDU+Cis8VTkyRjg+Cis8VTRFN0U+Cis8VTRFRjY+Cis8VTUwNjU+Cis8VTVERkU+Cis8VTVFRkE+Cis8VTYxMDY+Cis8VTY5NTc+Cis8VTgxNzE+Cis8VTg2NTQ+Cis8VThFNDc+Cis8VTkzNzU+Cis8VTlBMkI+Cis8VTRFNUU+Cis8VTUwOTE+Cis8VTY3NzA+Cis8VTY4NDA+Cis8VTUxMDk+Cis8VTUyOEQ+Cis8VTUyOTI+Cis8VTZBQTI+Cis8VTc3QkM+Cis8VTkyMTA+Cis8VTlFRDQ+Cis8VTUyQUI+Cis8VTYwMkY+Cis8VThGRjI+Cis8VTUwNDg+Cis8VTYxQTk+Cis8VTYzRUQ+Cis8VTY0Q0E+Cis8VTY4M0M+Cis8VTZBODQ+Cis8VTZGQzA+Cis8VTgxODg+Cis8VTg5QTE+Cis8VTk2OTQ+Cis8VTU4MDU+Cis8VTcyN0Q+Cis8VTcyQUM+Cis8VTc1MDQ+Cis8VTdENzk+Cis8VTdFNkQ+Cis8VTgwQTk+Cis8VTg5OEI+Cis8VThCNzQ+Cis8VTkwNjM+Cis8VTlENTE+Cis8VTYyODk+Cis8VTZDN0E+Cis8VTZGNTQ+Cis8VTdENTA+Cis8VTdGM0E+Cis8VThBMjM+Cis8VTUxN0M+Cis8VTYxNEE+Cis8VTdCOUQ+Cis8VThCMTk+Cis8VTkyNTc+Cis8VTkzOEM+Cis8VTRFQUM+Cis8VTRGRDM+Cis8VTUwMUU+Cis8VTUwQkU+Cis8VTUxMDY+Cis8VTUyQzE+Cis8VTUyQ0Q+Cis8VTUzN0Y+Cis8VTU3NzA+Cis8VTU4ODM+Cis8VTVFOUE+Cis8VTVGOTE+Cis8VTYxNzY+Cis8VTYxQUM+Cis8VTY0Q0U+Cis8VTY1NkM+Cis8VTY2NkY+Cis8VTY2QkI+Cis8VTY2RjQ+Cis8VTY4OTc+Cis8VTZEODc+Cis8VTcwODU+Cis8VTcwRjE+Cis8VTc0OUY+Cis8VTc0QTU+Cis8VTc0Q0E+Cis8VTc1RDk+Cis8VTc4NkM+Cis8VTc4RUM+Cis8VTdBREY+Cis8VTdBRjY+Cis8VTdENDU+Cis8VTdEOTM+Cis8VTgwMTU+Cis8VTgwM0Y+Cis8VTgxMUI+Cis8VTgzOTY+Cis8VThCNjY+Cis8VThGMTU+Cis8VTkwMTU+Cis8VTkzRTE+Cis8VTk4MDM+Cis8VTk4Mzg+Cis8VTlBNUE+Cis8VTlCRTg+Cis8VTRGQzI+Cis8VTU1NTM+Cis8VTU4M0E+Cis8VTU5NTE+Cis8VTVCNjM+Cis8VTVDNDY+Cis8VTYwQjg+Cis8VTYyMTI+Cis8VTY4NDI+Cis8VTY4QjA+Cis8VTY4RTg+Cis8VTZFQUE+Cis8VTc1NEM+Cis8VTc2Nzg+Cis8VTc4Q0U+Cis8VTdBM0Q+Cis8VTdDRkI+Cis8VTdFNkI+Cis8VTdFN0M+Cis8VThBMDg+Cis8VThBQTE+Cis8VThDM0Y+Cis8VTk2OEU+Cis8VTlEQzQ+Cis8VTUzRTQ+Cis8VTUzRTk+Cis8VTU0NEE+Cis8VTU0NzE+Cis8VTU2RkE+Cis8VTU5RDE+Cis8VTVCNjQ+Cis8VTVDM0I+Cis8VTVFQUI+Cis8VTYyRjc+Cis8VTY1Mzc+Cis8VTY1NDU+Cis8VTY1NzI+Cis8VTY2QTA+Cis8VTY3QUY+Cis8VTY5QzE+Cis8VTZDQkQ+Cis8VTc1RkM+Cis8VTc2OTA+Cis8VTc3N0U+Cis8VTdBM0Y+Cis8VTdGOTQ+Cis8VTgwMDM+Cis8VTgwQTE+Cis8VTgxOEY+Cis8VTgyRTY+Cis8VTgyRkQ+Cis8VTgzRjA+Cis8VTg1QzE+Cis8VTg4MzE+Cis8VTg4QjQ+Cis8VThBQTU+Cis8VUY5MDM+Cis8VThGOUM+Cis8VTkzMkU+Cis8VTk2Qzc+Cis8VTk4Njc+Cis8VTlBRDg+Cis8VTlGMTM+Cis8VTU0RUQ+Cis8VTY1OUI+Cis8VTY2RjI+Cis8VTY4OEY+Cis8VTdBNDA+Cis8VThDMzc+Cis8VTlENjA+Cis8VTU2RjA+Cis8VTU3NjQ+Cis8VTVEMTE+Cis8VTY2MDY+Cis8VTY4QjE+Cis8VTY4Q0Q+Cis8VTZFRkU+Cis8VTc0Mjg+Cis8VTg4OUU+Cis8VTlCRTQ+Cis8VTZDNjg+Cis8VUY5MDQ+Cis8VTlBQTg+Cis8VTRGOUI+Cis8VTUxNkM+Cis8VTUxNzE+Cis8VTUyOUY+Cis8VTVCNTQ+Cis8VTVERTU+Cis8VTYwNTA+Cis8VTYwNkQ+Cis8VTYyRjE+Cis8VTYzQTc+Cis8VTY1M0I+Cis8VTczRDk+Cis8VTdBN0E+Cis8VTg2QTM+Cis8VThDQTI+Cis8VTk3OEY+Cis8VTRFMzI+Cis8VTVCRTE+Cis8VTYyMDg+Cis8VTY3OUM+Cis8VTc0REM+Cis8VTc5RDE+Cis8VTgzRDM+Cis8VThBODc+Cis8VThBQjI+Cis8VThERTg+Cis8VTkwNEU+Cis8VTkzNEI+Cis8VTk4NDY+Cis8VTVFRDM+Cis8VTY5RTg+Cis8VTg1RkY+Cis8VTkwRUQ+Cis8VUY5MDU+Cis8VTUxQTA+Cis8VTVCOTg+Cis8VTVCRUM+Cis8VTYxNjM+Cis8VTY4RkE+Cis8VTZCM0U+Cis8VTcwNEM+Cis8VTc0MkY+Cis8VTc0RDg+Cis8VTdCQTE+Cis8VTdGNTA+Cis8VTgzQzU+Cis8VTg5QzA+Cis8VThDQUI+Cis8VTk1REM+Cis8VTk5Mjg+Cis8VTUyMkU+Cis8VTYwNUQ+Cis8VTYyRUM+Cis8VTkwMDI+Cis8VTRGOEE+Cis8VTUxNDk+Cis8VTUzMjE+Cis8VTU4RDk+Cis8VTVFRTM+Cis8VTY2RTA+Cis8VTZEMzg+Cis8VTcwOUE+Cis8VTcyQzI+Cis8VTczRDY+Cis8VTdCNTA+Cis8VTgwRjE+Cis8VTk0NUI+Cis8VTUzNjY+Cis8VTYzOUI+Cis8VTdGNkI+Cis8VTRFNTY+Cis8VTUwODA+Cis8VTU4NEE+Cis8VTU4REU+Cis8VTYwMkE+Cis8VTYxMjc+Cis8VTYyRDA+Cis8VTY5RDA+Cis8VTlCNDE+Cis8VTVCOEY+Cis8VTdEMTg+Cis8VTgwQjE+Cis8VThGNUY+Cis8VTRFQTQ+Cis8VTUwRDE+Cis8VTU0QUM+Cis8VTU1QUM+Cis8VTVCMEM+Cis8VTVEQTA+Cis8VTVERTc+Cis8VTY1MkE+Cis8VTY1NEU+Cis8VTY4MjE+Cis8VTZBNEI+Cis8VTcyRTE+Cis8VTc2OEU+Cis8VTc3RUY+Cis8VTdENUU+Cis8VTdGRjk+Cis8VTgxQTA+Cis8VTg1NEU+Cis8VTg2REY+Cis8VThGMDM+Cis8VThGNEU+Cis8VTkwQ0E+Cis8VTk5MDM+Cis8VTlBNTU+Cis8VTlCQUI+Cis8VTRFMTg+Cis8VTRFNDU+Cis8VTRFNUQ+Cis8VTRFQzc+Cis8VTRGRjE+Cis8VTUxNzc+Cis8VTUyRkU+Cis8VTUzNDA+Cis8VTUzRTM+Cis8VTUzRTU+Cis8VTU0OEU+Cis8VTU2MTQ+Cis8VTU3NzU+Cis8VTU3QTI+Cis8VTVCQzc+Cis8VTVEODc+Cis8VTVFRDA+Cis8VTYxRkM+Cis8VTYyRDg+Cis8VTY1NTE+Cis8VTY3Qjg+Cis8VTY3RTk+Cis8VTY5Q0I+Cis8VTZCNTA+Cis8VTZCQzY+Cis8VTZCRUM+Cis8VTZDNDI+Cis8VTZFOUQ+Cis8VTcwNzg+Cis8VTcyRDc+Cis8VTczOTY+Cis8VTc0MDM+Cis8VTc3QkY+Cis8VTc3RTk+Cis8VTdBNzY+Cis8VTdEN0Y+Cis8VTgwMDk+Cis8VTgxRkM+Cis8VTgyMDU+Cis8VTgyMEE+Cis8VTgyREY+Cis8VTg4NjI+Cis8VThCMzM+Cis8VThDRkM+Cis8VThFQzA+Cis8VTkwMTE+Cis8VTkwQjE+Cis8VTkyNjQ+Cis8VTkyQjY+Cis8VTk5RDI+Cis8VTlBNDU+Cis8VTlDRTk+Cis8VTlERDc+Cis8VTlGOUM+Cis8VTU3MEI+Cis8VTVDNDA+Cis8VTgzQ0E+Cis8VTk3QTA+Cis8VTk3QUI+Cis8VTlFQjQ+Cis8VTU0MUI+Cis8VTdBOTg+Cis8VTdGQTQ+Cis8VTg4RDk+Cis8VThFQ0Q+Cis8VTkwRTE+Cis8VTU4MDA+Cis8VTVDNDg+Cis8VTYzOTg+Cis8VTdBOUY+Cis8VTVCQUU+Cis8VTVGMTM+Cis8VTdBNzk+Cis8VTdBQUU+Cis8VTgyOEU+Cis8VThFQUM+Cis8VTUwMjY+Cis8VTUyMzg+Cis8VTUyRjg+Cis8VTUzNzc+Cis8VTU3MDg+Cis8VTYyRjM+Cis8VTYzNzI+Cis8VTZCMEE+Cis8VTZEQzM+Cis8VTc3Mzc+Cis8VTUzQTU+Cis8VTczNTc+Cis8VTg1Njg+Cis8VThFNzY+Cis8VTk1RDU+Cis8VTY3M0E+Cis8VTZBQzM+Cis8VTZGNzA+Cis8VThBNkQ+Cis8VThFQ0M+Cis8VTk5NEI+Cis8VUY5MDY+Cis8VTY2Nzc+Cis8VTZCNzg+Cis8VThDQjQ+Cis8VTlCM0M+Cis8VUY5MDc+Cis8VTUzRUI+Cis8VTU3MkQ+Cis8VTU5NEU+Cis8VTYzQzY+Cis8VTY5RkI+Cis8VTczRUE+Cis8VTc4NDU+Cis8VTdBQkE+Cis8VTdBQzU+Cis8VTdDRkU+Cis8VTg0NzU+Cis8VTg5OEY+Cis8VThENzM+Cis8VTkwMzU+Cis8VTk1QTg+Cis8VTUyRkI+Cis8VTU3NDc+Cis8VTc1NDc+Cis8VTdCNjA+Cis8VTgzQ0M+Cis8VTkyMUU+Cis8VUY5MDg+Cis8VTZBNTg+Cis8VTUxNEI+Cis8VTUyNEI+Cis8VTUyODc+Cis8VTYyMUY+Cis8VTY4RDg+Cis8VTY5NzU+Cis8VTk2OTk+Cis8VTUwQzU+Cis8VTUyQTQ+Cis8VTUyRTQ+Cis8VTYxQzM+Cis8VTY1QTQ+Cis8VTY4Mzk+Cis8VTY5RkY+Cis8VTc0N0U+Cis8VTdCNEI+Cis8VTgyQjk+Cis8VTgzRUI+Cis8VTg5QjI+Cis8VThCMzk+Cis8VThGRDE+Cis8VTk5NDk+Cis8VUY5MDk+Cis8VTRFQ0E+Cis8VTU5OTc+Cis8VTY0RDI+Cis8VTY2MTE+Cis8VTZBOEU+Cis8VTc0MzQ+Cis8VTc5ODE+Cis8VTc5QkQ+Cis8VTgyQTk+Cis8VTg4N0U+Cis8VTg4N0Y+Cis8VTg5NUY+Cis8VUY5MEE+Cis8VTkzMjY+Cis8VTRGMEI+Cis8VTUzQ0E+Cis8VTYwMjU+Cis8VTYyNzE+Cis8VTZDNzI+Cis8VTdEMUE+Cis8VTdENjY+Cis8VTRFOTg+Cis8VTUxNjI+Cis8VTc3REM+Cis8VTgwQUY+Cis8VTRGMDE+Cis8VTRGMEU+Cis8VTUxNzY+Cis8VTUxODA+Cis8VTU1REM+Cis8VTU2Njg+Cis8VTU3M0I+Cis8VTU3RkE+Cis8VTU3RkM+Cis8VTU5MTQ+Cis8VTU5NDc+Cis8VTU5OTM+Cis8VTVCQzQ+Cis8VTVDOTA+Cis8VTVEMEU+Cis8VTVERjE+Cis8VTVFN0U+Cis8VTVGQ0M+Cis8VTYyODA+Cis8VTY1RDc+Cis8VTY1RTM+Cis8VTY3MUU+Cis8VTY3MUY+Cis8VTY3NUU+Cis8VTY4Q0I+Cis8VTY4QzQ+Cis8VTZBNUY+Cis8VTZCM0E+Cis8VTZDMjM+Cis8VTZDN0Q+Cis8VTZDODI+Cis8VTZEQzc+Cis8VTczOTg+Cis8VTc0MjY+Cis8VTc0MkE+Cis8VTc0ODI+Cis8VTc0QTM+Cis8VTc1Nzg+Cis8VTc1N0Y+Cis8VTc4ODE+Cis8VTc4RUY+Cis8VTc5NDE+Cis8VTc5NDc+Cis8VTc5NDg+Cis8VTc5N0E+Cis8VTdCOTU+Cis8VTdEMDA+Cis8VTdEQkE+Cis8VTdGODg+Cis8VTgwMDY+Cis8VTgwMkQ+Cis8VTgwOEM+Cis8VThBMTg+Cis8VThCNEY+Cis8VThDNDg+Cis8VThENzc+Cis8VTkzMjE+Cis8VTkzMjQ+Cis8VTk4RTI+Cis8VTk5NTE+Cis8VTlBMEU+Cis8VTlBMEY+Cis8VTlBNjU+Cis8VTlFOTI+Cis8VTdEQ0E+Cis8VTRGNzY+Cis8VTU0MDk+Cis8VTYyRUU+Cis8VTY4NTQ+Cis8VTkxRDE+Cis8VTU1QUI+Cis8VTUxM0E+Cis8VUY5MEI+Cis8VUY5MEM+Cis8VTVBMUM+Cis8VTYxRTY+Cis8VUY5MEQ+Cis8VTYyQ0Y+Cis8VTYyRkY+Cis8VUY5MEU+Cis8VUY5MEY+Cis8VUY5MTA+Cis8VUY5MTE+Cis8VUY5MTI+Cis8VUY5MTM+Cis8VTkwQTM+Cis8VUY5MTQ+Cis8VUY5MTU+Cis8VUY5MTY+Cis8VUY5MTc+Cis8VUY5MTg+Cis8VThBRkU+Cis8VUY5MTk+Cis8VUY5MUE+Cis8VUY5MUI+Cis8VUY5MUM+Cis8VTY2OTY+Cis8VUY5MUQ+Cis8VTcxNTY+Cis8VUY5MUU+Cis8VUY5MUY+Cis8VTk2RTM+Cis8VUY5MjA+Cis8VTYzNEY+Cis8VTYzN0E+Cis8VTUzNTc+Cis8VUY5MjE+Cis8VTY3OEY+Cis8VTY5NjA+Cis8VTZFNzM+Cis8VUY5MjI+Cis8VTc1Mzc+Cis8VUY5MjM+Cis8VUY5MjQ+Cis8VUY5MjU+Cis8VTdEMEQ+Cis8VUY5MjY+Cis8VUY5Mjc+Cis8VTg4NzI+Cis8VTU2Q0E+Cis8VTVBMTg+Cis8VUY5Mjg+Cis8VUY5Mjk+Cis8VUY5MkE+Cis8VUY5MkI+Cis8VUY5MkM+Cis8VTRFNDM+Cis8VUY5MkQ+Cis8VTUxNjc+Cis8VTU5NDg+Cis8VTY3RjA+Cis8VTgwMTA+Cis8VUY5MkU+Cis8VTU5NzM+Cis8VTVFNzQ+Cis8VTY0OUE+Cis8VTc5Q0E+Cis8VTVGRjU+Cis8VTYwNkM+Cis8VTYyQzg+Cis8VTYzN0I+Cis8VTVCRTc+Cis8VTVCRDc+Cis8VTUyQUE+Cis8VUY5MkY+Cis8VTU5NzQ+Cis8VTVGMjk+Cis8VTYwMTI+Cis8VUY5MzA+Cis8VUY5MzE+Cis8VUY5MzI+Cis8VTc0NTk+Cis8VUY5MzM+Cis8VUY5MzQ+Cis8VUY5MzU+Cis8VUY5MzY+Cis8VUY5Mzc+Cis8VUY5Mzg+Cis8VTk5RDE+Cis8VUY5Mzk+Cis8VUY5M0E+Cis8VUY5M0I+Cis8VUY5M0M+Cis8VUY5M0Q+Cis8VUY5M0U+Cis8VUY5M0Y+Cis8VUY5NDA+Cis8VUY5NDE+Cis8VUY5NDI+Cis8VUY5NDM+Cis8VTZGQzM+Cis8VUY5NDQ+Cis8VUY5NDU+Cis8VTgxQkY+Cis8VThGQjI+Cis8VTYwRjE+Cis8VUY5NDY+Cis8VUY5NDc+Cis8VTgxNjY+Cis8VUY5NDg+Cis8VUY5NDk+Cis8VTVDM0Y+Cis8VUY5NEE+Cis8VUY5NEI+Cis8VUY5NEM+Cis8VUY5NEQ+Cis8VUY5NEU+Cis8VUY5NEY+Cis8VUY5NTA+Cis8VUY5NTE+Cis8VTVBRTk+Cis8VThBMjU+Cis8VTY3N0I+Cis8VTdEMTA+Cis8VUY5NTI+Cis8VUY5NTM+Cis8VUY5NTQ+Cis8VUY5NTU+Cis8VUY5NTY+Cis8VUY5NTc+Cis8VTgwRkQ+Cis8VUY5NTg+Cis8VUY5NTk+Cis8VTVDM0M+Cis8VTZDRTU+Cis8VTUzM0Y+Cis8VTZFQkE+Cis8VTU5MUE+Cis8VTgzMzY+Cis8VTRFMzk+Cis8VTRFQjY+Cis8VTRGNDY+Cis8VTU1QUU+Cis8VTU3MTg+Cis8VTU4Qzc+Cis8VTVGNTY+Cis8VTY1Qjc+Cis8VTY1RTY+Cis8VTZBODA+Cis8VTZCQjU+Cis8VTZFNEQ+Cis8VTc3RUQ+Cis8VTdBRUY+Cis8VTdDMUU+Cis8VTdEREU+Cis8VTg2Q0I+Cis8VTg4OTI+Cis8VTkxMzI+Cis8VTkzNUI+Cis8VTY0QkI+Cis8VTZGQkU+Cis8VTczN0E+Cis8VTc1Qjg+Cis8VTkwNTQ+Cis8VTU1NTY+Cis8VTU3NEQ+Cis8VTYxQkE+Cis8VTY0RDQ+Cis8VTY2Qzc+Cis8VTZERTE+Cis8VTZFNUI+Cis8VTZGNkQ+Cis8VTZGQjk+Cis8VTc1RjA+Cis8VTgwNDM+Cis8VTgxQkQ+Cis8VTg1NDE+Cis8VTg5ODM+Cis8VThBQzc+Cis8VThCNUE+Cis8VTkzMUY+Cis8VTZDOTM+Cis8VTc1NTM+Cis8VTdCNTQ+Cis8VThFMEY+Cis8VTkwNUQ+Cis8VTU1MTA+Cis8VTU4MDI+Cis8VTU4NTg+Cis8VTVFNjI+Cis8VTYyMDc+Cis8VTY0OUU+Cis8VTY4RTA+Cis8VTc1NzY+Cis8VTdDRDY+Cis8VTg3QjM+Cis8VTlFRTg+Cis8VTRFRTM+Cis8VTU3ODg+Cis8VTU3NkU+Cis8VTU5Mjc+Cis8VTVDMEQ+Cis8VTVDQjE+Cis8VTVFMzY+Cis8VTVGODU+Cis8VTYyMzQ+Cis8VTY0RTE+Cis8VTczQjM+Cis8VTgxRkE+Cis8VTg4OEI+Cis8VThDQjg+Cis8VTk2OEE+Cis8VTlFREI+Cis8VTVCODU+Cis8VTVGQjc+Cis8VTYwQjM+Cis8VTUwMTI+Cis8VTUyMDA+Cis8VTUyMzA+Cis8VTU3MTY+Cis8VTU4MzU+Cis8VTU4NTc+Cis8VTVDMEU+Cis8VTVDNjA+Cis8VTVDRjY+Cis8VTVEOEI+Cis8VTVFQTY+Cis8VTVGOTI+Cis8VTYwQkM+Cis8VTYzMTE+Cis8VTYzODk+Cis8VTY0MTc+Cis8VTY4NDM+Cis8VTY4Rjk+Cis8VTZBQzI+Cis8VTZERDg+Cis8VTZFMjE+Cis8VTZFRDQ+Cis8VTZGRTQ+Cis8VTcxRkU+Cis8VTc2REM+Cis8VTc3Nzk+Cis8VTc5QjE+Cis8VTdBM0I+Cis8VTg0MDQ+Cis8VTg5QTk+Cis8VThDRUQ+Cis8VThERjM+Cis8VThFNDg+Cis8VTkwMDM+Cis8VTkwMTQ+Cis8VTkwNTM+Cis8VTkwRkQ+Cis8VTkzNEQ+Cis8VTk2NzY+Cis8VTk3REM+Cis8VTZCRDI+Cis8VTcwMDY+Cis8VTcyNTg+Cis8VTcyQTI+Cis8VTczNjg+Cis8VTc3NjM+Cis8VTc5QkY+Cis8VTdCRTQ+Cis8VTdFOUI+Cis8VThCODA+Cis8VTU4QTk+Cis8VTYwQzc+Cis8VTY1NjY+Cis8VTY1RkQ+Cis8VTY2QkU+Cis8VTZDOEM+Cis8VTcxMUU+Cis8VTcxQzk+Cis8VThDNUE+Cis8VTk4MTM+Cis8VTRFNkQ+Cis8VTdBODE+Cis8VTRFREQ+Cis8VTUxQUM+Cis8VTUxQ0Q+Cis8VTUyRDU+Cis8VTU0MEM+Cis8VTYxQTc+Cis8VTY3NzE+Cis8VTY4NTA+Cis8VTY4REY+Cis8VTZEMUU+Cis8VTZGN0M+Cis8VTc1QkM+Cis8VTc3QjM+Cis8VTdBRTU+Cis8VTgwRjQ+Cis8VTg0NjM+Cis8VTkyODU+Cis8VTUxNUM+Cis8VTY1OTc+Cis8VTY3NUM+Cis8VTY3OTM+Cis8VTc1RDg+Cis8VTdBQzc+Cis8VTgzNzM+Cis8VUY5NUE+Cis8VThDNDY+Cis8VTkwMTc+Cis8VTk4MkQ+Cis8VTVDNkY+Cis8VTgxQzA+Cis8VTgyOUE+Cis8VTkwNDE+Cis8VTkwNkY+Cis8VTkyMEQ+Cis8VTVGOTc+Cis8VTVEOUQ+Cis8VTZBNTk+Cis8VTcxQzg+Cis8VTc2N0I+Cis8VTdCNDk+Cis8VTg1RTQ+Cis8VThCMDQ+Cis8VTkxMjc+Cis8VTlBMzA+Cis8VTU1ODc+Cis8VTYxRjY+Cis8VUY5NUI+Cis8VTc2Njk+Cis8VTdGODU+Cis8VTg2M0Y+Cis8VTg3QkE+Cis8VTg4Rjg+Cis8VTkwOEY+Cis8VUY5NUM+Cis8VTZEMUI+Cis8VTcwRDk+Cis8VTczREU+Cis8VTdENjE+Cis8VTg0M0Q+Cis8VUY5NUQ+Cis8VTkxNkE+Cis8VTk5RjE+Cis8VUY5NUU+Cis8VTRFODI+Cis8VTUzNzU+Cis8VTZCMDQ+Cis8VTZCMTI+Cis8VTcwM0U+Cis8VTcyMUI+Cis8VTg2MkQ+Cis8VTlFMUU+Cis8VTUyNEM+Cis8VThGQTM+Cis8VTVENTA+Cis8VTY0RTU+Cis8VTY1MkM+Cis8VTZCMTY+Cis8VTZGRUI+Cis8VTdDNDM+Cis8VTdFOUM+Cis8VTg1Q0Q+Cis8VTg5NjQ+Cis8VTg5QkQ+Cis8VTYyQzk+Cis8VTgxRDg+Cis8VTg4MUY+Cis8VTVFQ0E+Cis8VTY3MTc+Cis8VTZENkE+Cis8VTcyRkM+Cis8VTc0MDU+Cis8VTc0NkY+Cis8VTg3ODI+Cis8VTkwREU+Cis8VTRGODY+Cis8VTVEMEQ+Cis8VTVGQTA+Cis8VTg0MEE+Cis8VTUxQjc+Cis8VTYzQTA+Cis8VTc1NjU+Cis8VTRFQUU+Cis8VTUwMDY+Cis8VTUxNjk+Cis8VTUxQzk+Cis8VTY4ODE+Cis8VTZBMTE+Cis8VTdDQUU+Cis8VTdDQjE+Cis8VTdDRTc+Cis8VTgyNkY+Cis8VThBRDI+Cis8VThGMUI+Cis8VTkxQ0Y+Cis8VTRGQjY+Cis8VTUxMzc+Cis8VTUyRjU+Cis8VTU0NDI+Cis8VTVFRUM+Cis8VTYxNkU+Cis8VTYyM0U+Cis8VTY1QzU+Cis8VTZBREE+Cis8VTZGRkU+Cis8VTc5MkE+Cis8VTg1REM+Cis8VTg4MjM+Cis8VTk1QUQ+Cis8VTlBNjI+Cis8VTlBNkE+Cis8VTlFOTc+Cis8VTlFQ0U+Cis8VTUyOUI+Cis8VTY2QzY+Cis8VTZCNzc+Cis8VTcwMUQ+Cis8VTc5MkI+Cis8VThGNjI+Cis8VTk3NDI+Cis8VTYxOTA+Cis8VTYyMDA+Cis8VTY1MjM+Cis8VTZGMjM+Cis8VTcxNDk+Cis8VTc0ODk+Cis8VTdERjQ+Cis8VTgwNkY+Cis8VTg0RUU+Cis8VThGMjY+Cis8VTkwMjM+Cis8VTkzNEE+Cis8VTUxQkQ+Cis8VTUyMTc+Cis8VTUyQTM+Cis8VTZEMEM+Cis8VTcwQzg+Cis8VTg4QzI+Cis8VTVFQzk+Cis8VTY1ODI+Cis8VTZCQUU+Cis8VTZGQzI+Cis8VTdDM0U+Cis8VTczNzU+Cis8VTRFRTQ+Cis8VTRGMzY+Cis8VTU2Rjk+Cis8VUY5NUY+Cis8VTVDQkE+Cis8VTVEQkE+Cis8VTYwMUM+Cis8VTczQjI+Cis8VTdCMkQ+Cis8VTdGOUE+Cis8VTdGQ0U+Cis8VTgwNDY+Cis8VTkwMUU+Cis8VTkyMzQ+Cis8VTk2RjY+Cis8VTk3NDg+Cis8VTk4MTg+Cis8VTlGNjE+Cis8VTRGOEI+Cis8VTZGQTc+Cis8VTc5QUU+Cis8VTkxQjQ+Cis8VTk2Qjc+Cis8VTUyREU+Cis8VUY5NjA+Cis8VTY0ODg+Cis8VTY0QzQ+Cis8VTZBRDM+Cis8VTZGNUU+Cis8VTcwMTg+Cis8VTcyMTA+Cis8VTc2RTc+Cis8VTgwMDE+Cis8VTg2MDY+Cis8VTg2NUM+Cis8VThERUY+Cis8VThGMDU+Cis8VTk3MzI+Cis8VTlCNkY+Cis8VTlERkE+Cis8VTlFNzU+Cis8VTc4OEM+Cis8VTc5N0Y+Cis8VTdEQTA+Cis8VTgzQzk+Cis8VTkzMDQ+Cis8VTlFN0Y+Cis8VTlFOTM+Cis8VThBRDY+Cis8VTU4REY+Cis8VTVGMDQ+Cis8VTY3Mjc+Cis8VTcwMjc+Cis8VTc0Q0Y+Cis8VTdDNjA+Cis8VTgwN0U+Cis8VTUxMjE+Cis8VTcwMjg+Cis8VTcyNjI+Cis8VTc4Q0E+Cis8VThDQzI+Cis8VThDREE+Cis8VThDRjQ+Cis8VTk2Rjc+Cis8VTRFODY+Cis8VTUwREE+Cis8VTVCRUU+Cis8VTVFRDY+Cis8VTY1OTk+Cis8VTcxQ0U+Cis8VTc2NDI+Cis8VTc3QUQ+Cis8VTgwNEE+Cis8VTg0RkM+Cis8VTkwN0M+Cis8VTlCMjc+Cis8VTlGOEQ+Cis8VTU4RDg+Cis8VTVBNDE+Cis8VTVDNjI+Cis8VTZBMTM+Cis8VTZEREE+Cis8VTZGMEY+Cis8VTc2M0I+Cis8VTdEMkY+Cis8VTdFMzc+Cis8VTg1MUU+Cis8VTg5Mzg+Cis8VTkzRTQ+Cis8VTk2NEI+Cis8VTUyODk+Cis8VTY1RDI+Cis8VTY3RjM+Cis8VTY5QjQ+Cis8VTZENDE+Cis8VTZFOUM+Cis8VTcwMEY+Cis8VTc0MDk+Cis8VTc0NjA+Cis8VTc1NTk+Cis8VTc2MjQ+Cis8VTc4NkI+Cis8VThCMkM+Cis8VTk4NUU+Cis8VTUxNkQ+Cis8VTYyMkU+Cis8VTk2Nzg+Cis8VTRGOTY+Cis8VTUwMkI+Cis8VTVEMTk+Cis8VTZERUE+Cis8VTdEQjg+Cis8VThGMkE+Cis8VTVGOEI+Cis8VTYxNDQ+Cis8VTY4MTc+Cis8VUY5NjE+Cis8VTk2ODY+Cis8VTUyRDI+Cis8VTgwOEI+Cis8VTUxREM+Cis8VTUxQ0M+Cis8VTY5NUU+Cis8VTdBMUM+Cis8VTdEQkU+Cis8VTgzRjE+Cis8VTk2NzU+Cis8VTRGREE+Cis8VTUyMjk+Cis8VTUzOTg+Cis8VTU0MEY+Cis8VTU1MEU+Cis8VTVDNjU+Cis8VTYwQTc+Cis8VTY3NEU+Cis8VTY4QTg+Cis8VTZENkM+Cis8VTcyODE+Cis8VTcyRjg+Cis8VTc0MDY+Cis8VTc0ODM+Cis8VUY5NjI+Cis8VTc1RTI+Cis8VTdDNkM+Cis8VTdGNzk+Cis8VTdGQjg+Cis8VTgzODk+Cis8VTg4Q0Y+Cis8VTg4RTE+Cis8VTkxQ0M+Cis8VTkxRDA+Cis8VTk2RTI+Cis8VTlCQzk+Cis8VTU0MUQ+Cis8VTZGN0U+Cis8VTcxRDA+Cis8VTc0OTg+Cis8VTg1RkE+Cis8VThFQUE+Cis8VTk2QTM+Cis8VTlDNTc+Cis8VTlFOUY+Cis8VTY3OTc+Cis8VTZEQ0I+Cis8VTc0MzM+Cis8VTgxRTg+Cis8VTk3MTY+Cis8VTc4MkM+Cis8VTdBQ0I+Cis8VTdCMjA+Cis8VTdDOTI+Cis8VTY0Njk+Cis8VTc0NkE+Cis8VTc1RjI+Cis8VTc4QkM+Cis8VTc4RTg+Cis8VTk5QUM+Cis8VTlCNTQ+Cis8VTlFQkI+Cis8VTVCREU+Cis8VTVFNTU+Cis8VTZGMjA+Cis8VTgxOUM+Cis8VTgzQUI+Cis8VTkwODg+Cis8VTRFMDc+Cis8VTUzNEQ+Cis8VTVBMjk+Cis8VTVERDI+Cis8VTVGNEU+Cis8VTYxNjI+Cis8VTYzM0Q+Cis8VTY2Njk+Cis8VTY2RkM+Cis8VTZFRkY+Cis8VTZGMkI+Cis8VTcwNjM+Cis8VTc3OUU+Cis8VTg0MkM+Cis8VTg1MTM+Cis8VTg4M0I+Cis8VThGMTM+Cis8VTk5NDU+Cis8VTlDM0I+Cis8VTU1MUM+Cis8VTYyQjk+Cis8VTY3MkI+Cis8VTZDQUI+Cis8VTgzMDk+Cis8VTg5NkE+Cis8VTk3N0E+Cis8VTRFQTE+Cis8VTU5ODQ+Cis8VTVGRDg+Cis8VTVGRDk+Cis8VTY3MUI+Cis8VTdEQjI+Cis8VTdGNTQ+Cis8VTgyOTI+Cis8VTgzMkI+Cis8VTgzQkQ+Cis8VThGMUU+Cis8VTkwOTk+Cis8VTU3Q0I+Cis8VTU5Qjk+Cis8VTVBOTI+Cis8VTVCRDA+Cis8VTY2Mjc+Cis8VTY3OUE+Cis8VTY4ODU+Cis8VTZCQ0Y+Cis8VTcxNjQ+Cis8VTdGNzU+Cis8VThDQjc+Cis8VThDRTM+Cis8VTkwODE+Cis8VTlCNDU+Cis8VTgxMDg+Cis8VThDOEE+Cis8VTk2NEM+Cis8VTlBNDA+Cis8VTlFQTU+Cis8VTVCNUY+Cis8VTZDMTM+Cis8VTczMUI+Cis8VTc2RjI+Cis8VTc2REY+Cis8VTg0MEM+Cis8VTUxQUE+Cis8VTg5OTM+Cis8VTUxNEQ+Cis8VTUxOTU+Cis8VTUyQzk+Cis8VTY4Qzk+Cis8VTZDOTQ+Cis8VTc3MDQ+Cis8VTc3MjA+Cis8VTdEQkY+Cis8VTdERUM+Cis8VTk3NjI+Cis8VTlFQjU+Cis8VTZFQzU+Cis8VTg1MTE+Cis8VTUxQTU+Cis8VTU0MEQ+Cis8VTU0N0Q+Cis8VTY2MEU+Cis8VTY2OUQ+Cis8VTY5Mjc+Cis8VTZFOUY+Cis8VTc2QkY+Cis8VTc3OTE+Cis8VTgzMTc+Cis8VTg0QzI+Cis8VTg3OUY+Cis8VTkxNjk+Cis8VTkyOTg+Cis8VTlDRjQ+Cis8VTg4ODI+Cis8VTRGQUU+Cis8VTUxOTI+Cis8VTUyREY+Cis8VTU5QzY+Cis8VTVFM0Q+Cis8VTYxNTU+Cis8VTY0Nzg+Cis8VTY0Nzk+Cis8VTY2QUU+Cis8VTY3RDA+Cis8VTZBMjE+Cis8VTZCQ0Q+Cis8VTZCREI+Cis8VTcyNUY+Cis8VTcyNjE+Cis8VTc0NDE+Cis8VTc3Mzg+Cis8VTc3REI+Cis8VTgwMTc+Cis8VTgyQkM+Cis8VTgzMDU+Cis8VThCMDA+Cis8VThCMjg+Cis8VThDOEM+Cis8VTY3Mjg+Cis8VTZDOTA+Cis8VTcyNjc+Cis8VTc2RUU+Cis8VTc3NjY+Cis8VTdBNDY+Cis8VTlEQTk+Cis8VTZCN0Y+Cis8VTZDOTI+Cis8VTU5MjI+Cis8VTY3MjY+Cis8VTg0OTk+Cis8VTUzNkY+Cis8VTU4OTM+Cis8VTU5OTk+Cis8VTVFREY+Cis8VTYzQ0Y+Cis8VTY2MzQ+Cis8VTY3NzM+Cis8VTZFM0E+Cis8VTczMkI+Cis8VTdBRDc+Cis8VTgyRDc+Cis8VTkzMjg+Cis8VTUyRDk+Cis8VTVERUI+Cis8VTYxQUU+Cis8VTYxQ0I+Cis8VTYyMEE+Cis8VTYyQzc+Cis8VTY0QUI+Cis8VTY1RTA+Cis8VTY5NTk+Cis8VTZCNjY+Cis8VTZCQ0I+Cis8VTcxMjE+Cis8VTczRjc+Cis8VTc1NUQ+Cis8VTdFNDY+Cis8VTgyMUU+Cis8VTgzMDI+Cis8VTg1NkE+Cis8VThBQTM+Cis8VThDQkY+Cis8VTk3Mjc+Cis8VTlENjE+Cis8VTU4QTg+Cis8VTlFRDg+Cis8VTUwMTE+Cis8VTUyMEU+Cis8VTU0M0I+Cis8VTU1NEY+Cis8VTY1ODc+Cis8VTZDNzY+Cis8VTdEMEE+Cis8VTdEMEI+Cis8VTgwNUU+Cis8VTg2OEE+Cis8VTk1ODA+Cis8VTk2RUY+Cis8VTUyRkY+Cis8VTZDOTU+Cis8VTcyNjk+Cis8VTU0NzM+Cis8VTVBOUE+Cis8VTVDM0U+Cis8VTVENEI+Cis8VTVGNEM+Cis8VTVGQUU+Cis8VTY3MkE+Cis8VTY4QjY+Cis8VTY5NjM+Cis8VTZFM0M+Cis8VTZFNDQ+Cis8VTc3MDk+Cis8VTdDNzM+Cis8VTdGOEU+Cis8VTg1ODc+Cis8VThCMEU+Cis8VThGRjc+Cis8VTk3NjE+Cis8VTlFRjQ+Cis8VTVDQjc+Cis8VTYwQjY+Cis8VTYxMEQ+Cis8VTYxQUI+Cis8VTY1NEY+Cis8VTY1RkI+Cis8VTY1RkM+Cis8VTZDMTE+Cis8VTZDRUY+Cis8VTczOUY+Cis8VTczQzk+Cis8VTdERTE+Cis8VTk1OTQ+Cis8VTVCQzY+Cis8VTg3MUM+Cis8VThCMTA+Cis8VTUyNUQ+Cis8VTUzNUE+Cis8VTYyQ0Q+Cis8VTY0MEY+Cis8VTY0QjI+Cis8VTY3MzQ+Cis8VTZBMzg+Cis8VTZDQ0E+Cis8VTczQzA+Cis8VTc0OUU+Cis8VTdCOTQ+Cis8VTdDOTU+Cis8VTdFMUI+Cis8VTgxOEE+Cis8VTgyMzY+Cis8VTg1ODQ+Cis8VThGRUI+Cis8VTk2Rjk+Cis8VTk5QzE+Cis8VTRGMzQ+Cis8VTUzNEE+Cis8VTUzQ0Q+Cis8VTUzREI+Cis8VTYyQ0M+Cis8VTY0MkM+Cis8VTY1MDA+Cis8VTY1OTE+Cis8VTY5QzM+Cis8VTZDRUU+Cis8VTZGNTg+Cis8VTczRUQ+Cis8VTc1NTQ+Cis8VTc2MjI+Cis8VTc2RTQ+Cis8VTc2RkM+Cis8VTc4RDA+Cis8VTc4RkI+Cis8VTc5MkM+Cis8VTdENDY+Cis8VTgyMkM+Cis8VTg3RTA+Cis8VThGRDQ+Cis8VTk4MTI+Cis8VTk4RUY+Cis8VTUyQzM+Cis8VTYyRDQ+Cis8VTY0QTU+Cis8VTZFMjQ+Cis8VTZGNTE+Cis8VTc2N0M+Cis8VThEQ0I+Cis8VTkxQjE+Cis8VTkyNjI+Cis8VTlBRUU+Cis8VTlCNDM+Cis8VTUwMjM+Cis8VTUwOEQ+Cis8VTU3NEE+Cis8VTU5QTg+Cis8VTVDMjg+Cis8VTVFNDc+Cis8VTVGNzc+Cis8VTYyM0Y+Cis8VTY1M0U+Cis8VTY1Qjk+Cis8VTY1QzE+Cis8VTY2MDk+Cis8VTY3OEI+Cis8VTY5OUM+Cis8VTZFQzI+Cis8VTc4QzU+Cis8VTdEMjE+Cis8VTgwQUE+Cis8VTgxODA+Cis8VTgyMkI+Cis8VTgyQjM+Cis8VTg0QTE+Cis8VTg2OEM+Cis8VThBMkE+Cis8VThCMTc+Cis8VTkwQTY+Cis8VTk2MzI+Cis8VTlGOTA+Cis8VTUwMEQ+Cis8VTRGRjM+Cis8VUY5NjM+Cis8VTU3Rjk+Cis8VTVGOTg+Cis8VTYyREM+Cis8VTYzOTI+Cis8VTY3NkY+Cis8VTZFNDM+Cis8VTcxMTk+Cis8VTc2QzM+Cis8VTgwQ0M+Cis8VTgwREE+Cis8VTg4RjQ+Cis8VTg4RjU+Cis8VTg5MTk+Cis8VThDRTA+Cis8VThGMjk+Cis8VTkxNEQ+Cis8VTk2NkE+Cis8VTRGMkY+Cis8VTRGNzA+Cis8VTVFMUI+Cis8VTY3Q0Y+Cis8VTY4MjI+Cis8VTc2N0Q+Cis8VTc2N0U+Cis8VTlCNDQ+Cis8VTVFNjE+Cis8VTZBMEE+Cis8VTcxNjk+Cis8VTcxRDQ+Cis8VTc1NkE+Cis8VUY5NjQ+Cis8VTdFNDE+Cis8VTg1NDM+Cis8VTg1RTk+Cis8VTk4REM+Cis8VTRGMTA+Cis8VTdCNEY+Cis8VTdGNzA+Cis8VTk1QTU+Cis8VTUxRTE+Cis8VTVFMDY+Cis8VTY4QjU+Cis8VTZDM0U+Cis8VTZDNEU+Cis8VTZDREI+Cis8VTcyQUY+Cis8VTdCQzQ+Cis8VTgzMDM+Cis8VTZDRDU+Cis8VTc0M0E+Cis8VTUwRkI+Cis8VTUyODg+Cis8VTU4QzE+Cis8VTY0RDg+Cis8VTZBOTc+Cis8VTc0QTc+Cis8VTc2NTY+Cis8VTc4QTc+Cis8VTg2MTc+Cis8VTk1RTI+Cis8VTk3Mzk+Cis8VUY5NjU+Cis8VTUzNUU+Cis8VTVGMDE+Cis8VThCOEE+Cis8VThGQTg+Cis8VThGQUY+Cis8VTkwOEE+Cis8VTUyMjU+Cis8VTc3QTU+Cis8VTlDNDk+Cis8VTlGMDg+Cis8VTRFMTk+Cis8VTUwMDI+Cis8VTUxNzU+Cis8VTVDNUI+Cis8VTVFNzc+Cis8VTY2MUU+Cis8VTY2M0E+Cis8VTY3QzQ+Cis8VTY4QzU+Cis8VTcwQjM+Cis8VTc1MDE+Cis8VTc1QzU+Cis8VTc5Qzk+Cis8VTdBREQ+Cis8VThGMjc+Cis8VTk5MjA+Cis8VTlBMDg+Cis8VTRGREQ+Cis8VTU4MjE+Cis8VTU4MzE+Cis8VTVCRjY+Cis8VTY2NkU+Cis8VTZCNjU+Cis8VTZEMTE+Cis8VTZFN0E+Cis8VTZGN0Q+Cis8VTczRTQ+Cis8VTc1MkI+Cis8VTgzRTk+Cis8VTg4REM+Cis8VTg5MTM+Cis8VThCNUM+Cis8VThGMTQ+Cis8VTRGMEY+Cis8VTUwRDU+Cis8VTUzMTA+Cis8VTUzNUM+Cis8VTVCOTM+Cis8VTVGQTk+Cis8VTY3MEQ+Cis8VTc5OEY+Cis8VTgxNzk+Cis8VTgzMkY+Cis8VTg1MTQ+Cis8VTg5MDc+Cis8VTg5ODY+Cis8VThGMzk+Cis8VThGM0I+Cis8VTk5QTU+Cis8VTlDMTI+Cis8VTY3MkM+Cis8VTRFNzY+Cis8VTRGRjg+Cis8VTU5NDk+Cis8VTVDMDE+Cis8VTVDRUY+Cis8VTVDRjA+Cis8VTYzNjc+Cis8VTY4RDI+Cis8VTcwRkQ+Cis8VTcxQTI+Cis8VTc0MkI+Cis8VTdFMkI+Cis8VTg0RUM+Cis8VTg3MDI+Cis8VTkwMjI+Cis8VTkyRDI+Cis8VTlDRjM+Cis8VTRFMEQ+Cis8VTRFRDg+Cis8VTRGRUY+Cis8VTUwODU+Cis8VTUyNTY+Cis8VTUyNkY+Cis8VTU0MjY+Cis8VTU0OTA+Cis8VTU3RTA+Cis8VTU5MkI+Cis8VTVBNjY+Cis8VTVCNUE+Cis8VTVCNzU+Cis8VTVCQ0M+Cis8VTVFOUM+Cis8VUY5NjY+Cis8VTYyNzY+Cis8VTY1Nzc+Cis8VTY1QTc+Cis8VTZENkU+Cis8VTZFQTU+Cis8VTcyMzY+Cis8VTdCMjY+Cis8VTdDM0Y+Cis8VTdGMzY+Cis8VTgxNTA+Cis8VTgxNTE+Cis8VTgxOUE+Cis8VTgyNDA+Cis8VTgyOTk+Cis8VTgzQTk+Cis8VThBMDM+Cis8VThDQTA+Cis8VThDRTY+Cis8VThDRkI+Cis8VThENzQ+Cis8VThEQkE+Cis8VTkwRTg+Cis8VTkxREM+Cis8VTk2MUM+Cis8VTk2NDQ+Cis8VTk5RDk+Cis8VTlDRTc+Cis8VTUzMTc+Cis8VTUyMDY+Cis8VTU0Mjk+Cis8VTU2NzQ+Cis8VTU4QjM+Cis8VTU5NTQ+Cis8VTU5NkU+Cis8VTVGRkY+Cis8VTYxQTQ+Cis8VTYyNkU+Cis8VTY2MTA+Cis8VTZDN0U+Cis8VTcxMUE+Cis8VTc2QzY+Cis8VTdDODk+Cis8VTdDREU+Cis8VTdEMUI+Cis8VTgyQUM+Cis8VThDQzE+Cis8VTk2RjA+Cis8VUY5Njc+Cis8VTRGNUI+Cis8VTVGMTc+Cis8VTVGN0Y+Cis8VTYyQzI+Cis8VTVEMjk+Cis8VTY3MEI+Cis8VTY4REE+Cis8VTc4N0M+Cis8VTdFNDM+Cis8VTlENkM+Cis8VTRFMTU+Cis8VTUwOTk+Cis8VTUzMTU+Cis8VTUzMkE+Cis8VTUzNTE+Cis8VTU5ODM+Cis8VTVBNjI+Cis8VTVFODc+Cis8VTYwQjI+Cis8VTYxOEE+Cis8VTYyNDk+Cis8VTYyNzk+Cis8VTY1OTA+Cis8VTY3ODc+Cis8VTY5QTc+Cis8VTZCRDQ+Cis8VTZCRDY+Cis8VTZCRDc+Cis8VTZCRDg+Cis8VTZDQjg+Cis8VUY5Njg+Cis8VTc0MzU+Cis8VTc1RkE+Cis8VTc4MTI+Cis8VTc4OTE+Cis8VTc5RDU+Cis8VTc5RDg+Cis8VTdDODM+Cis8VTdEQ0I+Cis8VTdGRTE+Cis8VTgwQTU+Cis8VTgxM0U+Cis8VTgxQzI+Cis8VTgzRjI+Cis8VTg3MUE+Cis8VTg4RTg+Cis8VThBQjk+Cis8VThCNkM+Cis8VThDQkI+Cis8VTkxMTk+Cis8VTk3NUU+Cis8VTk4REI+Cis8VTlGM0I+Cis8VTU2QUM+Cis8VTVCMkE+Cis8VTVGNkM+Cis8VTY1OEM+Cis8VTZBQjM+Cis8VTZCQUY+Cis8VTZENUM+Cis8VTZGRjE+Cis8VTcwMTU+Cis8VTcyNUQ+Cis8VTczQUQ+Cis8VThDQTc+Cis8VThDRDM+Cis8VTk4M0I+Cis8VTYxOTE+Cis8VTZDMzc+Cis8VTgwNTg+Cis8VTlBMDE+Cis8VTRFNEQ+Cis8VTRFOEI+Cis8VTRFOUI+Cis8VTRFRDU+Cis8VTRGM0E+Cis8VTRGM0M+Cis8VTRGN0Y+Cis8VTRGREY+Cis8VTUwRkY+Cis8VTUzRjI+Cis8VTUzRjg+Cis8VTU1MDY+Cis8VTU1RTM+Cis8VTU2REI+Cis8VTU4RUI+Cis8VTU5NjI+Cis8VTVBMTE+Cis8VTVCRUI+Cis8VTVCRkE+Cis8VTVDMDQ+Cis8VTVERjM+Cis8VTVFMkI+Cis8VTVGOTk+Cis8VTYwMUQ+Cis8VTYzNjg+Cis8VTY1OUM+Cis8VTY1QUY+Cis8VTY3RjY+Cis8VTY3RkI+Cis8VTY4QUQ+Cis8VTZCN0I+Cis8VTZDOTk+Cis8VTZDRDc+Cis8VTZFMjM+Cis8VTcwMDk+Cis8VTczNDU+Cis8VTc4MDI+Cis8VTc5M0U+Cis8VTc5NDA+Cis8VTc5NjA+Cis8VTc5QzE+Cis8VTdCRTk+Cis8VTdEMTc+Cis8VTdENzI+Cis8VTgwODY+Cis8VTgyMEQ+Cis8VTgzOEU+Cis8VTg0RDE+Cis8VTg2Qzc+Cis8VTg4REY+Cis8VThBNTA+Cis8VThBNUU+Cis8VThCMUQ+Cis8VThDREM+Cis8VThENjY+Cis8VThGQUQ+Cis8VTkwQUE+Cis8VTk4RkM+Cis8VTk5REY+Cis8VTlFOUQ+Cis8VTUyNEE+Cis8VUY5Njk+Cis8VTY3MTQ+Cis8VUY5NkE+Cis8VTUwOTg+Cis8VTUyMkE+Cis8VTVDNzE+Cis8VTY1NjM+Cis8VTZDNTU+Cis8VTczQ0E+Cis8VTc1MjM+Cis8VTc1OUQ+Cis8VTdCOTc+Cis8VTg0OUM+Cis8VTkxNzg+Cis8VTk3MzA+Cis8VTRFNzc+Cis8VTY0OTI+Cis8VTZCQkE+Cis8VTcxNUU+Cis8VTg1QTk+Cis8VTRFMDk+Cis8VUY5NkI+Cis8VTY3NDk+Cis8VTY4RUU+Cis8VTZFMTc+Cis8VTgyOUY+Cis8VTg1MTg+Cis8VTg4NkI+Cis8VTYzRjc+Cis8VTZGODE+Cis8VTkyMTI+Cis8VTk4QUY+Cis8VTRFMEE+Cis8VTUwQjc+Cis8VTUwQ0Y+Cis8VTUxMUY+Cis8VTU1NDY+Cis8VTU1QUE+Cis8VTU2MTc+Cis8VTVCNDA+Cis8VTVDMTk+Cis8VTVDRTA+Cis8VTVFMzg+Cis8VTVFOEE+Cis8VTVFQTA+Cis8VTVFQzI+Cis8VTYwRjM+Cis8VTY4NTE+Cis8VTZBNjE+Cis8VTZFNTg+Cis8VTcyM0Q+Cis8VTcyNDA+Cis8VTcyQzA+Cis8VTc2Rjg+Cis8VTc5NjU+Cis8VTdCQjE+Cis8VTdGRDQ+Cis8VTg4RjM+Cis8VTg5RjQ+Cis8VThBNzM+Cis8VThDNjE+Cis8VThDREU+Cis8VTk3MUM+Cis8VTU4NUU+Cis8VTc0QkQ+Cis8VThDRkQ+Cis8VTU1Qzc+Cis8VUY5NkM+Cis8VTdBNjE+Cis8VTdEMjI+Cis8VTgyNzI+Cis8VTcyNzI+Cis8VTc1MUY+Cis8VTc1MjU+Cis8VUY5NkQ+Cis8VTdCMTk+Cis8VTU4ODU+Cis8VTU4RkI+Cis8VTVEQkM+Cis8VTVFOEY+Cis8VTVFQjY+Cis8VTVGOTA+Cis8VTYwNTU+Cis8VTYyOTI+Cis8VTYzN0Y+Cis8VTY1NEQ+Cis8VTY2OTE+Cis8VTY2RDk+Cis8VTY2Rjg+Cis8VTY4MTY+Cis8VTY4RjI+Cis8VTcyODA+Cis8VTc0NUU+Cis8VTdCNkU+Cis8VTdENkU+Cis8VTdERDY+Cis8VTdGNzI+Cis8VTgwRTU+Cis8VTgyMTI+Cis8VTg1QUY+Cis8VTg5N0Y+Cis8VThBOTM+Cis8VTkwMUQ+Cis8VTkyRTQ+Cis8VTlFQ0Q+Cis8VTlGMjA+Cis8VTU5MTU+Cis8VTU5NkQ+Cis8VTVFMkQ+Cis8VTYwREM+Cis8VTY2MTQ+Cis8VTY2NzM+Cis8VTY3OTA+Cis8VTZDNTA+Cis8VTZEQzU+Cis8VTZGNUY+Cis8VTc3RjM+Cis8VTc4QTk+Cis8VTg0QzY+Cis8VTkxQ0I+Cis8VTkzMkI+Cis8VTRFRDk+Cis8VTUwQ0E+Cis8VTUxNDg+Cis8VTU1ODQ+Cis8VTVCMEI+Cis8VTVCQTM+Cis8VTYyNDc+Cis8VTY1N0U+Cis8VTY1Q0I+Cis8VTZFMzI+Cis8VTcxN0Q+Cis8VTc0MDE+Cis8VTc0NDQ+Cis8VTc0ODc+Cis8VTc0QkY+Cis8VTc2NkM+Cis8VTc5QUE+Cis8VTdEREE+Cis8VTdFNTU+Cis8VTdGQTg+Cis8VTgxN0E+Cis8VTgxQjM+Cis8VTgyMzk+Cis8VTg2MUE+Cis8VTg3RUM+Cis8VThBNzU+Cis8VThERTM+Cis8VTkwNzg+Cis8VTkyOTE+Cis8VTk0MjU+Cis8VTk5NEQ+Cis8VTlCQUU+Cis8VTUzNjg+Cis8VTVDNTE+Cis8VTY5NTQ+Cis8VTZDQzQ+Cis8VTZEMjk+Cis8VTZFMkI+Cis8VTgyMEM+Cis8VTg1OUI+Cis8VTg5M0I+Cis8VThBMkQ+Cis8VThBQUE+Cis8VTk2RUE+Cis8VTlGNjc+Cis8VTUyNjE+Cis8VTY2Qjk+Cis8VTZCQjI+Cis8VTdFOTY+Cis8VTg3RkU+Cis8VThEMEQ+Cis8VTk1ODM+Cis8VTk2NUQ+Cis8VTY1MUQ+Cis8VTZEODk+Cis8VTcxRUU+Cis8VUY5NkU+Cis8VTU3Q0U+Cis8VTU5RDM+Cis8VTVCQUM+Cis8VTYwMjc+Cis8VTYwRkE+Cis8VTYyMTA+Cis8VTY2MUY+Cis8VTY2NUY+Cis8VTczMjk+Cis8VTczRjk+Cis8VTc2REI+Cis8VTc3MDE+Cis8VTdCNkM+Cis8VTgwNTY+Cis8VTgwNzI+Cis8VTgxNjU+Cis8VThBQTA+Cis8VTkxOTI+Cis8VTRFMTY+Cis8VTUyRTI+Cis8VTZCNzI+Cis8VTZEMTc+Cis8VTdBMDU+Cis8VTdCMzk+Cis8VTdEMzA+Cis8VUY5NkY+Cis8VThDQjA+Cis8VTUzRUM+Cis8VTU2MkY+Cis8VTU4NTE+Cis8VTVCQjU+Cis8VTVDMEY+Cis8VTVDMTE+Cis8VTVERTI+Cis8VTYyNDA+Cis8VTYzODM+Cis8VTY0MTQ+Cis8VTY2MkQ+Cis8VTY4QjM+Cis8VTZDQkM+Cis8VTZEODg+Cis8VTZFQUY+Cis8VTcwMUY+Cis8VTcwQTQ+Cis8VTcxRDI+Cis8VTc1MjY+Cis8VTc1OEY+Cis8VTc1OEU+Cis8VTc2MTk+Cis8VTdCMTE+Cis8VTdCRTA+Cis8VTdDMkI+Cis8VTdEMjA+Cis8VTdEMzk+Cis8VTg1MkM+Cis8VTg1NkQ+Cis8VTg2MDc+Cis8VThBMzQ+Cis8VTkwMEQ+Cis8VTkwNjE+Cis8VTkwQjU+Cis8VTkyQjc+Cis8VTk3RjY+Cis8VTlBMzc+Cis8VTRGRDc+Cis8VTVDNkM+Cis8VTY3NUY+Cis8VTZEOTE+Cis8VTdDOUY+Cis8VTdFOEM+Cis8VThCMTY+Cis8VThEMTY+Cis8VTkwMUY+Cis8VTVCNkI+Cis8VTVERkQ+Cis8VTY0MEQ+Cis8VTg0QzA+Cis8VTkwNUM+Cis8VTk4RTE+Cis8VTczODc+Cis8VTVCOEI+Cis8VTYwOUE+Cis8VTY3N0U+Cis8VTZEREU+Cis8VThBMUY+Cis8VThBQTY+Cis8VTkwMDE+Cis8VTk4MEM+Cis8VTUyMzc+Cis8VUY5NzA+Cis8VTcwNTE+Cis8VTc4OEU+Cis8VTkzOTY+Cis8VTg4NzA+Cis8VTkxRDc+Cis8VTRGRUU+Cis8VTUzRDc+Cis8VTU1RkQ+Cis8VTU2REE+Cis8VTU3ODI+Cis8VTU4RkQ+Cis8VTVBQzI+Cis8VTVCODg+Cis8VTVDQUI+Cis8VTVDQzA+Cis8VTVFMjU+Cis8VTYxMDE+Cis8VTYyMEQ+Cis8VTYyNEI+Cis8VTYzODg+Cis8VTY0MUM+Cis8VTY1MzY+Cis8VTY1Nzg+Cis8VTZBMzk+Cis8VTZCOEE+Cis8VTZDMzQ+Cis8VTZEMTk+Cis8VTZGMzE+Cis8VTcxRTc+Cis8VTcyRTk+Cis8VTczNzg+Cis8VTc0MDc+Cis8VTc0QjI+Cis8VTc2MjY+Cis8VTc3NjE+Cis8VTc5QzA+Cis8VTdBNTc+Cis8VTdBRUE+Cis8VTdDQjk+Cis8VTdEOEY+Cis8VTdEQUM+Cis8VTdFNjE+Cis8VTdGOUU+Cis8VTgxMjk+Cis8VTgzMzE+Cis8VTg0OTA+Cis8VTg0REE+Cis8VTg1RUE+Cis8VTg4OTY+Cis8VThBQjA+Cis8VThCOTA+Cis8VThGMzg+Cis8VTkwNDI+Cis8VTkwODM+Cis8VTkxNkM+Cis8VTkyOTY+Cis8VTkyQjk+Cis8VTk2OEI+Cis8VTk2QTc+Cis8VTk2QTg+Cis8VTk2RDY+Cis8VTk3MDA+Cis8VTk4MDg+Cis8VTk5OTY+Cis8VTlBRDM+Cis8VTlCMUE+Cis8VTUzRDQ+Cis8VTU4N0U+Cis8VTU5MTk+Cis8VTVCNzA+Cis8VTVCQkY+Cis8VTZERDE+Cis8VTZGNUE+Cis8VTcxOUY+Cis8VTc0MjE+Cis8VTc0Qjk+Cis8VTgwODU+Cis8VTgzRkQ+Cis8VTVERTE+Cis8VTVGODc+Cis8VTVGQUE+Cis8VTYwNDI+Cis8VTY1RUM+Cis8VTY4MTI+Cis8VTY5NkY+Cis8VTZBNTM+Cis8VTZCODk+Cis8VTZEMzU+Cis8VTZERjM+Cis8VTczRTM+Cis8VTc2RkU+Cis8VTc3QUM+Cis8VTdCNEQ+Cis8VTdEMTQ+Cis8VTgxMjM+Cis8VTgyMUM+Cis8VTgzNDA+Cis8VTg0RjQ+Cis8VTg1NjM+Cis8VThBNjI+Cis8VThBQzQ+Cis8VTkxODc+Cis8VTkzMUU+Cis8VTk4MDY+Cis8VTk5QjQ+Cis8VTYyMEM+Cis8VTg4NTM+Cis8VThGRjA+Cis8VTkyNjU+Cis8VTVEMDc+Cis8VTVEMjc+Cis8VTVENjk+Cis8VTc0NUY+Cis8VTgxOUQ+Cis8VTg3Njg+Cis8VTZGRDU+Cis8VTYyRkU+Cis8VTdGRDI+Cis8VTg5MzY+Cis8VTg5NzI+Cis8VTRFMUU+Cis8VTRFNTg+Cis8VTUwRTc+Cis8VTUyREQ+Cis8VTUzNDc+Cis8VTYyN0Y+Cis8VTY2MDc+Cis8VTdFNjk+Cis8VTg4MDU+Cis8VTk2NUU+Cis8VTRGOEQ+Cis8VTUzMTk+Cis8VTU2MzY+Cis8VTU5Q0I+Cis8VTVBQTQ+Cis8VTVDMzg+Cis8VTVDNEU+Cis8VTVDNEQ+Cis8VTVFMDI+Cis8VTVGMTE+Cis8VTYwNDM+Cis8VTY1QkQ+Cis8VTY2MkY+Cis8VTY2NDI+Cis8VTY3QkU+Cis8VTY3RjQ+Cis8VTczMUM+Cis8VTc3RTI+Cis8VTc5M0E+Cis8VTdGQzU+Cis8VTg0OTQ+Cis8VTg0Q0Q+Cis8VTg5OTY+Cis8VThBNjY+Cis8VThBNjk+Cis8VThBRTE+Cis8VThDNTU+Cis8VThDN0E+Cis8VTU3RjQ+Cis8VTVCRDQ+Cis8VTVGMEY+Cis8VTYwNkY+Cis8VTYyRUQ+Cis8VTY5MEQ+Cis8VTZCOTY+Cis8VTZFNUM+Cis8VTcxODQ+Cis8VTdCRDI+Cis8VTg3NTU+Cis8VThCNTg+Cis8VThFRkU+Cis8VTk4REY+Cis8VTk4RkU+Cis8VTRGMzg+Cis8VTRGODE+Cis8VTRGRTE+Cis8VTU0N0I+Cis8VTVBMjA+Cis8VTVCQjg+Cis8VTYxM0M+Cis8VTY1QjA+Cis8VTY2Njg+Cis8VTcxRkM+Cis8VTc1MzM+Cis8VTc5NUU+Cis8VTdEMzM+Cis8VTgxNEU+Cis8VTgxRTM+Cis8VTgzOTg+Cis8VTg1QUE+Cis8VTg1Q0U+Cis8VTg3MDM+Cis8VThBMEE+Cis8VThFQUI+Cis8VThGOUI+Cis8VUY5NzE+Cis8VThGQzU+Cis8VTU5MzE+Cis8VTVCQTQ+Cis8VTVCRTY+Cis8VTYwODk+Cis8VTVCRTk+Cis8VTVDMEI+Cis8VTVGQzM+Cis8VTZDODE+Cis8VUY5NzI+Cis8VTZERjE+Cis8VTcwMEI+Cis8VTc1MUE+Cis8VTgyQUY+Cis8VThBRjY+Cis8VTRFQzA+Cis8VTUzNDE+Cis8VUY5NzM+Cis8VTk2RDk+Cis8VTZDMEY+Cis8VTRFOUU+Cis8VTRGQzQ+Cis8VTUxNTI+Cis8VTU1NUU+Cis8VTVBMjU+Cis8VTVDRTg+Cis8VTYyMTE+Cis8VTcyNTk+Cis8VTgyQkQ+Cis8VTgzQUE+Cis8VTg2RkU+Cis8VTg4NTk+Cis8VThBMUQ+Cis8VTk2M0Y+Cis8VTk2QzU+Cis8VTk5MTM+Cis8VTlEMDk+Cis8VTlENUQ+Cis8VTU4MEE+Cis8VTVDQjM+Cis8VTVEQkQ+Cis8VTVFNDQ+Cis8VTYwRTE+Cis8VTYxMTU+Cis8VTYzRTE+Cis8VTZBMDI+Cis8VTZFMjU+Cis8VTkxMDI+Cis8VTkzNTQ+Cis8VTk4NEU+Cis8VTlDMTA+Cis8VTlGNzc+Cis8VTVCODk+Cis8VTVDQjg+Cis8VTYzMDk+Cis8VTY2NEY+Cis8VTY4NDg+Cis8VTc3M0M+Cis8VTk2QzE+Cis8VTk3OEQ+Cis8VTk4NTQ+Cis8VTlCOUY+Cis8VTY1QTE+Cis8VThCMDE+Cis8VThFQ0I+Cis8VTk1QkM+Cis8VTU1MzU+Cis8VTVDQTk+Cis8VTVERDY+Cis8VTVFQjU+Cis8VTY2OTc+Cis8VTc2NEM+Cis8VTgzRjQ+Cis8VTk1Qzc+Cis8VTU4RDM+Cis8VTYyQkM+Cis8VTcyQ0U+Cis8VTlEMjg+Cis8VTRFRjA+Cis8VTU5MkU+Cis8VTYwMEY+Cis8VTY2M0I+Cis8VTZCODM+Cis8VTc5RTc+Cis8VTlEMjY+Cis8VTUzOTM+Cis8VTU0QzA+Cis8VTU3QzM+Cis8VTVEMTY+Cis8VTYxMUI+Cis8VTY2RDY+Cis8VTZEQUY+Cis8VTc4OEQ+Cis8VTgyN0U+Cis8VTk2OTg+Cis8VTk3NDQ+Cis8VTUzODQ+Cis8VTYyN0M+Cis8VTYzOTY+Cis8VTZEQjI+Cis8VTdFMEE+Cis8VTgxNEI+Cis8VTk4NEQ+Cis8VTZBRkI+Cis8VTdGNEM+Cis8VTlEQUY+Cis8VTlFMUE+Cis8VTRFNUY+Cis8VTUwM0I+Cis8VTUxQjY+Cis8VTU5MUM+Cis8VTYwRjk+Cis8VTYzRjY+Cis8VTY5MzA+Cis8VTcyM0E+Cis8VTgwMzY+Cis8VUY5NzQ+Cis8VTkxQ0U+Cis8VTVGMzE+Cis8VUY5NzU+Cis8VUY5NzY+Cis8VTdEMDQ+Cis8VTgyRTU+Cis8VTg0NkY+Cis8VTg0QkI+Cis8VTg1RTU+Cis8VThFOEQ+Cis8VUY5Nzc+Cis8VTRGNkY+Cis8VUY5Nzg+Cis8VUY5Nzk+Cis8VTU4RTQ+Cis8VTVCNDM+Cis8VTYwNTk+Cis8VTYzREE+Cis8VTY1MTg+Cis8VTY1NkQ+Cis8VTY2OTg+Cis8VUY5N0E+Cis8VTY5NEE+Cis8VTZBMjM+Cis8VTZEMEI+Cis8VTcwMDE+Cis8VTcxNkM+Cis8VTc1RDI+Cis8VTc2MEQ+Cis8VTc5QjM+Cis8VTdBNzA+Cis8VUY5N0I+Cis8VTdGOEE+Cis8VUY5N0M+Cis8VTg5NDQ+Cis8VUY5N0Q+Cis8VThCOTM+Cis8VTkxQzA+Cis8VTk2N0Q+Cis8VUY5N0U+Cis8VTk5MEE+Cis8VTU3MDQ+Cis8VTVGQTE+Cis8VTY1QkM+Cis8VTZGMDE+Cis8VTc2MDA+Cis8VTc5QTY+Cis8VThBOUU+Cis8VTk5QUQ+Cis8VTlCNUE+Cis8VTlGNkM+Cis8VTUxMDQ+Cis8VTYxQjY+Cis8VTYyOTE+Cis8VTZBOEQ+Cis8VTgxQzY+Cis8VTUwNDM+Cis8VTU4MzA+Cis8VTVGNjY+Cis8VTcxMDk+Cis8VThBMDA+Cis8VThBRkE+Cis8VTVCN0M+Cis8VTg2MTY+Cis8VTRGRkE+Cis8VTUxM0M+Cis8VTU2QjQ+Cis8VTU5NDQ+Cis8VTYzQTk+Cis8VTZERjk+Cis8VTVEQUE+Cis8VTY5NkQ+Cis8VTUxODY+Cis8VTRFODg+Cis8VTRGNTk+Cis8VUY5N0Y+Cis8VUY5ODA+Cis8VUY5ODE+Cis8VTU5ODI+Cis8VUY5ODI+Cis8VUY5ODM+Cis8VTZCNUY+Cis8VTZDNUQ+Cis8VUY5ODQ+Cis8VTc0QjU+Cis8VTc5MTY+Cis8VUY5ODU+Cis8VTgyMDc+Cis8VTgyNDU+Cis8VTgzMzk+Cis8VThGM0Y+Cis8VThGNUQ+Cis8VUY5ODY+Cis8VTk5MTg+Cis8VUY5ODc+Cis8VUY5ODg+Cis8VUY5ODk+Cis8VTRFQTY+Cis8VUY5OEE+Cis8VTU3REY+Cis8VTVGNzk+Cis8VTY2MTM+Cis8VUY5OEI+Cis8VUY5OEM+Cis8VTc1QUI+Cis8VTdFNzk+Cis8VThCNkY+Cis8VUY5OEQ+Cis8VTkwMDY+Cis8VTlBNUI+Cis8VTU2QTU+Cis8VTU4Mjc+Cis8VTU5Rjg+Cis8VTVBMUY+Cis8VTVCQjQ+Cis8VUY5OEU+Cis8VTVFRjY+Cis8VUY5OEY+Cis8VUY5OTA+Cis8VTYzNTA+Cis8VTYzM0I+Cis8VUY5OTE+Cis8VTY5M0Q+Cis8VTZDODc+Cis8VTZDQkY+Cis8VTZEOEU+Cis8VTZEOTM+Cis8VTZERjU+Cis8VTZGMTQ+Cis8VUY5OTI+Cis8VTcwREY+Cis8VTcxMzY+Cis8VTcxNTk+Cis8VUY5OTM+Cis8VTcxQzM+Cis8VTcxRDU+Cis8VUY5OTQ+Cis8VTc4NEY+Cis8VTc4NkY+Cis8VUY5OTU+Cis8VTdCNzU+Cis8VTdERTM+Cis8VUY5OTY+Cis8VTdFMkY+Cis8VUY5OTc+Cis8VTg4NEQ+Cis8VThFREY+Cis8VUY5OTg+Cis8VUY5OTk+Cis8VUY5OUE+Cis8VTkyNUI+Cis8VUY5OUI+Cis8VTlDRjY+Cis8VUY5OUM+Cis8VUY5OUQ+Cis8VUY5OUU+Cis8VTYwODU+Cis8VTZEODU+Cis8VUY5OUY+Cis8VTcxQjE+Cis8VUY5QTA+Cis8VUY5QTE+Cis8VTk1QjE+Cis8VTUzQUQ+Cis8VUY5QTI+Cis8VUY5QTM+Cis8VUY5QTQ+Cis8VTY3RDM+Cis8VUY5QTU+Cis8VTcwOEU+Cis8VTcxMzA+Cis8VTc0MzA+Cis8VTgyNzY+Cis8VTgyRDI+Cis8VUY5QTY+Cis8VTk1QkI+Cis8VTlBRTU+Cis8VTlFN0Q+Cis8VTY2QzQ+Cis8VUY5QTc+Cis8VTcxQzE+Cis8VTg0NDk+Cis8VUY5QTg+Cis8VUY5QTk+Cis8VTU4NEI+Cis8VUY5QUE+Cis8VUY5QUI+Cis8VTVEQjg+Cis8VTVGNzE+Cis8VUY5QUM+Cis8VTY2MjA+Cis8VTY2OEU+Cis8VTY5Nzk+Cis8VTY5QUU+Cis8VTZDMzg+Cis8VTZDRjM+Cis8VTZFMzY+Cis8VTZGNDE+Cis8VTZGREE+Cis8VTcwMUI+Cis8VTcwMkY+Cis8VTcxNTA+Cis8VTcxREY+Cis8VTczNzA+Cis8VUY5QUQ+Cis8VTc0NUI+Cis8VUY5QUU+Cis8VTc0RDQ+Cis8VTc2Qzg+Cis8VTdBNEU+Cis8VTdFOTM+Cis8VUY5QUY+Cis8VUY5QjA+Cis8VTgyRjE+Cis8VThBNjA+Cis8VThGQ0U+Cis8VUY5QjE+Cis8VTkzNDg+Cis8VUY5QjI+Cis8VTk3MTk+Cis8VUY5QjM+Cis8VUY5QjQ+Cis8VTRFNDI+Cis8VTUwMkE+Cis8VUY5QjU+Cis8VTUyMDg+Cis8VTUzRTE+Cis8VTY2RjM+Cis8VTZDNkQ+Cis8VTZGQ0E+Cis8VTczMEE+Cis8VTc3N0Y+Cis8VTdBNjI+Cis8VTgyQUU+Cis8VTg1REQ+Cis8VTg2MDI+Cis8VUY5QjY+Cis8VTg4RDQ+Cis8VThBNjM+Cis8VThCN0Q+Cis8VThDNkI+Cis8VUY5Qjc+Cis8VTkyQjM+Cis8VUY5Qjg+Cis8VTk3MTM+Cis8VTk4MTA+Cis8VTRFOTQ+Cis8VTRGMEQ+Cis8VTRGQzk+Cis8VTUwQjI+Cis8VTUzNDg+Cis8VTU0M0U+Cis8VTU0MzM+Cis8VTU1REE+Cis8VTU4NjI+Cis8VTU4QkE+Cis8VTU5Njc+Cis8VTVBMUI+Cis8VTVCRTQ+Cis8VTYwOUY+Cis8VUY5Qjk+Cis8VTYxQ0E+Cis8VTY1NTY+Cis8VTY1RkY+Cis8VTY2NjQ+Cis8VTY4QTc+Cis8VTZDNUE+Cis8VTZGQjM+Cis8VTcwQ0Y+Cis8VTcxQUM+Cis8VTczNTI+Cis8VTdCN0Q+Cis8VTg3MDg+Cis8VThBQTQ+Cis8VTlDMzI+Cis8VTlGMDc+Cis8VTVDNEI+Cis8VTZDODM+Cis8VTczNDQ+Cis8VTczODk+Cis8VTkyM0E+Cis8VTZFQUI+Cis8VTc0NjU+Cis8VTc2MUY+Cis8VTdBNjk+Cis8VTdFMTU+Cis8VTg2MEE+Cis8VTUxNDA+Cis8VTU4QzU+Cis8VTY0QzE+Cis8VTc0RUU+Cis8VTc1MTU+Cis8VTc2NzA+Cis8VTdGQzE+Cis8VTkwOTU+Cis8VTk2Q0Q+Cis8VTk5NTQ+Cis8VTZFMjY+Cis8VTc0RTY+Cis8VTdBQTk+Cis8VTdBQUE+Cis8VTgxRTU+Cis8VTg2RDk+Cis8VTg3Nzg+Cis8VThBMUI+Cis8VTVBNDk+Cis8VTVCOEM+Cis8VTVCOUI+Cis8VTY4QTE+Cis8VTY5MDA+Cis8VTZENjM+Cis8VTczQTk+Cis8VTc0MTM+Cis8VTc0MkM+Cis8VTc4OTc+Cis8VTdERTk+Cis8VTdGRUI+Cis8VTgxMTg+Cis8VTgxNTU+Cis8VTgzOUU+Cis8VThDNEM+Cis8VTk2MkU+Cis8VTk4MTE+Cis8VTY2RjA+Cis8VTVGODA+Cis8VTY1RkE+Cis8VTY3ODk+Cis8VTZDNkE+Cis8VTczOEI+Cis8VTUwMkQ+Cis8VTVBMDM+Cis8VTZCNkE+Cis8VTc3RUU+Cis8VTU5MTY+Cis8VTVENkM+Cis8VTVEQ0Q+Cis8VTczMjU+Cis8VTc1NEY+Cis8VUY5QkE+Cis8VUY5QkI+Cis8VTUwRTU+Cis8VTUxRjk+Cis8VTU4MkY+Cis8VTU5MkQ+Cis8VTU5OTY+Cis8VTU5REE+Cis8VTVCRTU+Cis8VUY5QkM+Cis8VUY5QkQ+Cis8VTVEQTI+Cis8VTYyRDc+Cis8VTY0MTY+Cis8VTY0OTM+Cis8VTY0RkU+Cis8VUY5QkU+Cis8VTY2REM+Cis8VUY5QkY+Cis8VTZBNDg+Cis8VUY5QzA+Cis8VTcxRkY+Cis8VTc0NjQ+Cis8VUY5QzE+Cis8VTdBODg+Cis8VTdBQUY+Cis8VTdFNDc+Cis8VTdFNUU+Cis8VTgwMDA+Cis8VTgxNzA+Cis8VUY5QzI+Cis8VTg3RUY+Cis8VTg5ODE+Cis8VThCMjA+Cis8VTkwNTk+Cis8VUY5QzM+Cis8VTkwODA+Cis8VTk5NTI+Cis8VTYxN0U+Cis8VTZCMzI+Cis8VTZENzQ+Cis8VTdFMUY+Cis8VTg5MjU+Cis8VThGQjE+Cis8VTRGRDE+Cis8VTUwQUQ+Cis8VTUxOTc+Cis8VTUyQzc+Cis8VTU3Qzc+Cis8VTU4ODk+Cis8VTVCQjk+Cis8VTVFQjg+Cis8VTYxNDI+Cis8VTY5OTU+Cis8VTZEOEM+Cis8VTZFNjc+Cis8VTZFQjY+Cis8VTcxOTQ+Cis8VTc0NjI+Cis8VTc1Mjg+Cis8VTc1MkM+Cis8VTgwNzM+Cis8VTgzMzg+Cis8VTg0Qzk+Cis8VThFMEE+Cis8VTkzOTQ+Cis8VTkzREU+Cis8VUY5QzQ+Cis8VTRFOEU+Cis8VTRGNTE+Cis8VTUwNzY+Cis8VTUxMkE+Cis8VTUzQzg+Cis8VTUzQ0I+Cis8VTUzRjM+Cis8VTVCODc+Cis8VTVCRDM+Cis8VTVDMjQ+Cis8VTYxMUE+Cis8VTYxODI+Cis8VTY1RjQ+Cis8VTcyNUI+Cis8VTczOTc+Cis8VTc0NDA+Cis8VTc2QzI+Cis8VTc5NTA+Cis8VTc5OTE+Cis8VTc5Qjk+Cis8VTdEMDY+Cis8VTdGQkQ+Cis8VTgyOEI+Cis8VTg1RDU+Cis8VTg2NUU+Cis8VThGQzI+Cis8VTkwNDc+Cis8VTkwRjU+Cis8VTkxRUE+Cis8VTk2ODU+Cis8VTk2RTg+Cis8VTk2RTk+Cis8VTUyRDY+Cis8VTVGNjc+Cis8VTY1RUQ+Cis8VTY2MzE+Cis8VTY4MkY+Cis8VTcxNUM+Cis8VTdBMzY+Cis8VTkwQzE+Cis8VTk4MEE+Cis8VTRFOTE+Cis8VUY5QzU+Cis8VTZBNTI+Cis8VTZCOUU+Cis8VTZGOTA+Cis8VTcxODk+Cis8VTgwMTg+Cis8VTgyQjg+Cis8VTg1NTM+Cis8VTkwNEI+Cis8VTk2OTU+Cis8VTk2RjI+Cis8VTk3RkI+Cis8VTg1MUE+Cis8VTlCMzE+Cis8VTRFOTA+Cis8VTcxOEE+Cis8VTk2QzQ+Cis8VTUxNDM+Cis8VTUzOUY+Cis8VTU0RTE+Cis8VTU3MTM+Cis8VTU3MTI+Cis8VTU3QTM+Cis8VTVBOUI+Cis8VTVBQzQ+Cis8VTVCQzM+Cis8VTYwMjg+Cis8VTYxM0Y+Cis8VTYzRjQ+Cis8VTZDODU+Cis8VTZEMzk+Cis8VTZFNzI+Cis8VTZFOTA+Cis8VTcyMzA+Cis8VTczM0Y+Cis8VTc0NTc+Cis8VTgyRDE+Cis8VTg4ODE+Cis8VThGNDU+Cis8VTkwNjA+Cis8VUY5QzY+Cis8VTk2NjI+Cis8VTk4NTg+Cis8VTlEMUI+Cis8VTY3MDg+Cis8VThEOEE+Cis8VTkyNUU+Cis8VTRGNEQ+Cis8VTUwNDk+Cis8VTUwREU+Cis8VTUzNzE+Cis8VTU3MEQ+Cis8VTU5RDQ+Cis8VTVBMDE+Cis8VTVDMDk+Cis8VTYxNzA+Cis8VTY2OTA+Cis8VTZFMkQ+Cis8VTcyMzI+Cis8VTc0NEI+Cis8VTdERUY+Cis8VTgwQzM+Cis8VTg0MEU+Cis8VTg0NjY+Cis8VTg1M0Y+Cis8VTg3NUY+Cis8VTg4NUI+Cis8VTg5MTg+Cis8VThCMDI+Cis8VTkwNTU+Cis8VTk3Q0I+Cis8VTlCNEY+Cis8VTRFNzM+Cis8VTRGOTE+Cis8VTUxMTI+Cis8VTUxNkE+Cis8VUY5Qzc+Cis8VTU1MkY+Cis8VTU1QTk+Cis8VTVCN0E+Cis8VTVCQTU+Cis8VTVFN0M+Cis8VTVFN0Q+Cis8VTVFQkU+Cis8VTYwQTA+Cis8VTYwREY+Cis8VTYxMDg+Cis8VTYxMDk+Cis8VTYzQzQ+Cis8VTY1Mzg+Cis8VTY3MDk+Cis8VUY5Qzg+Cis8VTY3RDQ+Cis8VTY3REE+Cis8VUY5Qzk+Cis8VTY5NjE+Cis8VTY5NjI+Cis8VTZDQjk+Cis8VTZEMjc+Cis8VUY5Q0E+Cis8VTZFMzg+Cis8VUY5Q0I+Cis8VTZGRTE+Cis8VTczMzY+Cis8VTczMzc+Cis8VUY5Q0M+Cis8VTc0NUM+Cis8VTc1MzE+Cis8VUY5Q0Q+Cis8VTc2NTI+Cis8VUY5Q0U+Cis8VUY5Q0Y+Cis8VTdEQUQ+Cis8VTgxRkU+Cis8VTg0Mzg+Cis8VTg4RDU+Cis8VThBOTg+Cis8VThBREI+Cis8VThBRUQ+Cis8VThFMzA+Cis8VThFNDI+Cis8VTkwNEE+Cis8VTkwM0U+Cis8VTkwN0E+Cis8VTkxNDk+Cis8VTkxQzk+Cis8VTkzNkU+Cis8VUY5RDA+Cis8VUY5RDE+Cis8VTU4MDk+Cis8VUY5RDI+Cis8VTZCRDM+Cis8VTgwODk+Cis8VTgwQjI+Cis8VUY5RDM+Cis8VUY5RDQ+Cis8VTUxNDE+Cis8VTU5NkI+Cis8VTVDMzk+Cis8VUY5RDU+Cis8VUY5RDY+Cis8VTZGNjQ+Cis8VTczQTc+Cis8VTgwRTQ+Cis8VThEMDc+Cis8VUY5RDc+Cis8VTkyMTc+Cis8VTk1OEY+Cis8VUY5RDg+Cis8VUY5RDk+Cis8VUY5REE+Cis8VUY5REI+Cis8VTgwN0Y+Cis8VTYyMEU+Cis8VTcwMUM+Cis8VTdENjg+Cis8VTg3OEQ+Cis8VUY5REM+Cis8VTU3QTA+Cis8VTYwNjk+Cis8VTYxNDc+Cis8VTZCQjc+Cis8VThBQkU+Cis8VTkyODA+Cis8VTk2QjE+Cis8VTRFNTk+Cis8VTU0MUY+Cis8VTZERUI+Cis8VTg1MkQ+Cis8VTk2NzA+Cis8VTk3RjM+Cis8VTk4RUU+Cis8VTYzRDY+Cis8VTZDRTM+Cis8VTkwOTE+Cis8VTUxREQ+Cis8VTYxQzk+Cis8VTgxQkE+Cis8VTlERjk+Cis8VTRGOUQ+Cis8VTUwMUE+Cis8VTUxMDA+Cis8VTVCOUM+Cis8VTYxMEY+Cis8VTYxRkY+Cis8VTY0RUM+Cis8VTY5MDU+Cis8VTZCQzU+Cis8VTc1OTE+Cis8VTc3RTM+Cis8VTdGQTk+Cis8VTgyNjQ+Cis8VTg1OEY+Cis8VTg3RkI+Cis8VTg4NjM+Cis8VThBQkM+Cis8VThCNzA+Cis8VTkxQUI+Cis8VTRFOEM+Cis8VTRFRTU+Cis8VTRGMEE+Cis8VUY5REQ+Cis8VUY5REU+Cis8VTU5Mzc+Cis8VTU5RTg+Cis8VUY5REY+Cis8VTVERjI+Cis8VTVGMUI+Cis8VTVGNUI+Cis8VTYwMjE+Cis8VUY5RTA+Cis8VUY5RTE+Cis8VUY5RTI+Cis8VUY5RTM+Cis8VTcyM0U+Cis8VTczRTU+Cis8VUY5RTQ+Cis8VTc1NzA+Cis8VTc1Q0Q+Cis8VUY5RTU+Cis8VTc5RkI+Cis8VUY5RTY+Cis8VTgwMEM+Cis8VTgwMzM+Cis8VTgwODQ+Cis8VTgyRTE+Cis8VTgzNTE+Cis8VUY5RTc+Cis8VUY5RTg+Cis8VThDQkQ+Cis8VThDQjM+Cis8VTkwODc+Cis8VUY5RTk+Cis8VUY5RUE+Cis8VTk4RjQ+Cis8VTk5MEM+Cis8VUY5RUI+Cis8VUY5RUM+Cis8VTcwMzc+Cis8VTc2Q0E+Cis8VTdGQ0E+Cis8VTdGQ0M+Cis8VTdGRkM+Cis8VThCMUE+Cis8VTRFQkE+Cis8VTRFQzE+Cis8VTUyMDM+Cis8VTUzNzA+Cis8VUY5RUQ+Cis8VTU0QkQ+Cis8VTU2RTA+Cis8VTU5RkI+Cis8VTVCQzU+Cis8VTVGMTU+Cis8VTVGQ0Q+Cis8VTZFNkU+Cis8VUY5RUU+Cis8VUY5RUY+Cis8VTdENkE+Cis8VTgzMzU+Cis8VUY5RjA+Cis8VTg2OTM+Cis8VThBOEQ+Cis8VUY5RjE+Cis8VTk3NkQ+Cis8VTk3Nzc+Cis8VUY5RjI+Cis8VUY5RjM+Cis8VTRFMDA+Cis8VTRGNUE+Cis8VTRGN0U+Cis8VTU4Rjk+Cis8VTY1RTU+Cis8VTZFQTI+Cis8VTkwMzg+Cis8VTkzQjA+Cis8VTk5Qjk+Cis8VTRFRkI+Cis8VTU4RUM+Cis8VTU5OEE+Cis8VTU5RDk+Cis8VTYwNDE+Cis8VUY5RjQ+Cis8VUY5RjU+Cis8VTdBMTQ+Cis8VUY5RjY+Cis8VTgzNEY+Cis8VThDQzM+Cis8VTUxNjU+Cis8VTUzNDQ+Cis8VUY5Rjc+Cis8VUY5Rjg+Cis8VUY5Rjk+Cis8VTRFQ0Q+Cis8VTUyNjk+Cis8VTVCNTU+Cis8VTgyQkY+Cis8VTRFRDQ+Cis8VTUyM0E+Cis8VTU0QTg+Cis8VTU5Qzk+Cis8VTU5RkY+Cis8VTVCNTA+Cis8VTVCNTc+Cis8VTVCNUM+Cis8VTYwNjM+Cis8VTYxNDg+Cis8VTZFQ0I+Cis8VTcwOTk+Cis8VTcxNkU+Cis8VTczODY+Cis8VTc0Rjc+Cis8VTc1QjU+Cis8VTc4QzE+Cis8VTdEMkI+Cis8VTgwMDU+Cis8VTgxRUE+Cis8VTgzMjg+Cis8VTg1MTc+Cis8VTg1Qzk+Cis8VThBRUU+Cis8VThDQzc+Cis8VTk2Q0M+Cis8VTRGNUM+Cis8VTUyRkE+Cis8VTU2QkM+Cis8VTY1QUI+Cis8VTY2Mjg+Cis8VTcwN0M+Cis8VTcwQjg+Cis8VTcyMzU+Cis8VTdEQkQ+Cis8VTgyOEQ+Cis8VTkxNEM+Cis8VTk2QzA+Cis8VTlENzI+Cis8VTVCNzE+Cis8VTY4RTc+Cis8VTZCOTg+Cis8VTZGN0E+Cis8VTc2REU+Cis8VTVDOTE+Cis8VTY2QUI+Cis8VTZGNUI+Cis8VTdCQjQ+Cis8VTdDMkE+Cis8VTg4MzY+Cis8VTk2REM+Cis8VTRFMDg+Cis8VTRFRDc+Cis8VTUzMjA+Cis8VTU4MzQ+Cis8VTU4QkI+Cis8VTU4RUY+Cis8VTU5NkM+Cis8VTVDMDc+Cis8VTVFMzM+Cis8VTVFODQ+Cis8VTVGMzU+Cis8VTYzOEM+Cis8VTY2QjI+Cis8VTY3NTY+Cis8VTZBMUY+Cis8VTZBQTM+Cis8VTZCMEM+Cis8VTZGM0Y+Cis8VTcyNDY+Cis8VUY5RkE+Cis8VTczNTA+Cis8VTc0OEI+Cis8VTdBRTA+Cis8VTdDQTc+Cis8VTgxNzg+Cis8VTgxREY+Cis8VTgxRTc+Cis8VTgzOEE+Cis8VTg0NkM+Cis8VTg1MjM+Cis8VTg1OTQ+Cis8VTg1Q0Y+Cis8VTg4REQ+Cis8VThEMTM+Cis8VTkxQUM+Cis8VTk1Nzc+Cis8VTk2OUM+Cis8VTUxOEQ+Cis8VTU0Qzk+Cis8VTU3Mjg+Cis8VTVCQjA+Cis8VTYyNEQ+Cis8VTY3NTA+Cis8VTY4M0Q+Cis8VTY4OTM+Cis8VTZFM0Q+Cis8VTZFRDM+Cis8VTcwN0Q+Cis8VTdFMjE+Cis8VTg4QzE+Cis8VThDQTE+Cis8VThGMDk+Cis8VTlGNEI+Cis8VTlGNEU+Cis8VTcyMkQ+Cis8VTdCOEY+Cis8VThBQ0Q+Cis8VTkzMUE+Cis8VTRGNDc+Cis8VTRGNEU+Cis8VTUxMzI+Cis8VTU0ODA+Cis8VTU5RDA+Cis8VTVFOTU+Cis8VTYyQjU+Cis8VTY3NzU+Cis8VTY5NkU+Cis8VTZBMTc+Cis8VTZDQUU+Cis8VTZFMUE+Cis8VTcyRDk+Cis8VTczMkE+Cis8VTc1QkQ+Cis8VTdCQjg+Cis8VTdEMzU+Cis8VTgyRTc+Cis8VTgzRjk+Cis8VTg0NTc+Cis8VTg1Rjc+Cis8VThBNUI+Cis8VThDQUY+Cis8VThFODc+Cis8VTkwMTk+Cis8VTkwQjg+Cis8VTk2Q0U+Cis8VTlGNUY+Cis8VTUyRTM+Cis8VTU0MEE+Cis8VTVBRTE+Cis8VTVCQzI+Cis8VTY0NTg+Cis8VTY1NzU+Cis8VTZFRjQ+Cis8VTcyQzQ+Cis8VUY5RkI+Cis8VTc2ODQ+Cis8VTdBNEQ+Cis8VTdCMUI+Cis8VTdDNEQ+Cis8VTdFM0U+Cis8VTdGREY+Cis8VTgzN0I+Cis8VThCMkI+Cis8VThDQ0E+Cis8VThENjQ+Cis8VThERTE+Cis8VThFNUY+Cis8VThGRUE+Cis8VThGRjk+Cis8VTkwNjk+Cis8VTkzRDE+Cis8VTRGNDM+Cis8VTRGN0E+Cis8VTUwQjM+Cis8VTUxNjg+Cis8VTUxNzg+Cis8VTUyNEQ+Cis8VTUyNkE+Cis8VTU4NjE+Cis8VTU4N0M+Cis8VTU5NjA+Cis8VTVDMDg+Cis8VTVDNTU+Cis8VTVFREI+Cis8VTYwOUI+Cis8VTYyMzA+Cis8VTY4MTM+Cis8VTZCQkY+Cis8VTZDMDg+Cis8VTZGQjE+Cis8VTcxNEU+Cis8VTc0MjA+Cis8VTc1MzA+Cis8VTc1Mzg+Cis8VTc1NTE+Cis8VTc2NzI+Cis8VTdCNEM+Cis8VTdCOEI+Cis8VTdCQUQ+Cis8VTdCQzY+Cis8VTdFOEY+Cis8VThBNkU+Cis8VThGM0U+Cis8VThGNDk+Cis8VTkyM0Y+Cis8VTkyOTM+Cis8VTkzMjI+Cis8VTk0MkI+Cis8VTk2RkI+Cis8VTk4NUE+Cis8VTk4NkI+Cis8VTk5MUU+Cis8VTUyMDc+Cis8VTYyMkE+Cis8VTYyOTg+Cis8VTZENTk+Cis8VTc2NjQ+Cis8VTdBQ0E+Cis8VTdCQzA+Cis8VTdENzY+Cis8VTUzNjA+Cis8VTVDQkU+Cis8VTVFOTc+Cis8VTZGMzg+Cis8VTcwQjk+Cis8VTdDOTg+Cis8VTk3MTE+Cis8VTlCOEU+Cis8VTlFREU+Cis8VTYzQTU+Cis8VTY0N0E+Cis8VTg3NzY+Cis8VTRFMDE+Cis8VTRFOTU+Cis8VTRFQUQ+Cis8VTUwNUM+Cis8VTUwNzU+Cis8VTU0NDg+Cis8VTU5QzM+Cis8VTVCOUE+Cis8VTVFNDA+Cis8VTVFQUQ+Cis8VTVFRjc+Cis8VTVGODE+Cis8VTYwQzU+Cis8VTYzM0E+Cis8VTY1M0Y+Cis8VTY1NzQ+Cis8VTY1Q0M+Cis8VTY2NzY+Cis8VTY2Nzg+Cis8VTY3RkU+Cis8VTY5Njg+Cis8VTZBODk+Cis8VTZCNjM+Cis8VTZDNDA+Cis8VTZEQzA+Cis8VTZERTg+Cis8VTZFMUY+Cis8VTZFNUU+Cis8VTcwMUU+Cis8VTcwQTE+Cis8VTczOEU+Cis8VTczRkQ+Cis8VTc1M0E+Cis8VTc3NUI+Cis8VTc4ODc+Cis8VTc5OEU+Cis8VTdBMEI+Cis8VTdBN0Q+Cis8VTdDQkU+Cis8VTdEOEU+Cis8VTgyNDc+Cis8VThBMDI+Cis8VThBRUE+Cis8VThDOUU+Cis8VTkxMkQ+Cis8VTkxNEE+Cis8VTkxRDg+Cis8VTkyNjY+Cis8VTkyQ0M+Cis8VTkzMjA+Cis8VTk3MDY+Cis8VTk3NTY+Cis8VTk3NUM+Cis8VTk4MDI+Cis8VTlGMEU+Cis8VTUyMzY+Cis8VTUyOTE+Cis8VTU1N0M+Cis8VTU4MjQ+Cis8VTVFMUQ+Cis8VTVGMUY+Cis8VTYwOEM+Cis8VTYzRDA+Cis8VTY4QUY+Cis8VTZGREY+Cis8VTc5NkQ+Cis8VTdCMkM+Cis8VTgxQ0Q+Cis8VTg1QkE+Cis8VTg4RkQ+Cis8VThBRjg+Cis8VThFNDQ+Cis8VTkxOEQ+Cis8VTk2NjQ+Cis8VTk2OUI+Cis8VTk3M0Q+Cis8VTk4NEM+Cis8VTlGNEE+Cis8VTRGQ0U+Cis8VTUxNDY+Cis8VTUxQ0I+Cis8VTUyQTk+Cis8VTU2MzI+Cis8VTVGMTQ+Cis8VTVGNkI+Cis8VTYzQUE+Cis8VTY0Q0Q+Cis8VTY1RTk+Cis8VTY2NDE+Cis8VTY2RkE+Cis8VTY2Rjk+Cis8VTY3MUQ+Cis8VTY4OUQ+Cis8VTY4RDc+Cis8VTY5RkQ+Cis8VTZGMTU+Cis8VTZGNkU+Cis8VTcxNjc+Cis8VTcxRTU+Cis8VTcyMkE+Cis8VTc0QUE+Cis8VTc3M0E+Cis8VTc5NTY+Cis8VTc5NUE+Cis8VTc5REY+Cis8VTdBMjA+Cis8VTdBOTU+Cis8VTdDOTc+Cis8VTdDREY+Cis8VTdENDQ+Cis8VTdFNzA+Cis8VTgwODc+Cis8VTg1RkI+Cis8VTg2QTQ+Cis8VThBNTQ+Cis8VThBQkY+Cis8VThEOTk+Cis8VThFODE+Cis8VTkwMjA+Cis8VTkwNkQ+Cis8VTkxRTM+Cis8VTk2M0I+Cis8VTk2RDU+Cis8VTlDRTU+Cis8VTY1Q0Y+Cis8VTdDMDc+Cis8VThEQjM+Cis8VTkzQzM+Cis8VTVCNTg+Cis8VTVDMEE+Cis8VTUzNTI+Cis8VTYyRDk+Cis8VTczMUQ+Cis8VTUwMjc+Cis8VTVCOTc+Cis8VTVGOUU+Cis8VTYwQjA+Cis8VTYxNkI+Cis8VTY4RDU+Cis8VTZERDk+Cis8VTc0MkU+Cis8VTdBMkU+Cis8VTdENDI+Cis8VTdEOUM+Cis8VTdFMzE+Cis8VTgxNkI+Cis8VThFMkE+Cis8VThFMzU+Cis8VTkzN0U+Cis8VTk0MTg+Cis8VTRGNTA+Cis8VTU3NTA+Cis8VTVERTY+Cis8VTVFQTc+Cis8VTYzMkI+Cis8VTdGNkE+Cis8VTRFM0I+Cis8VTRGNEY+Cis8VTRGOEY+Cis8VTUwNUE+Cis8VTU5REQ+Cis8VTgwQzQ+Cis8VTU0NkE+Cis8VTU0Njg+Cis8VTU1RkU+Cis8VTU5NEY+Cis8VTVCOTk+Cis8VTVEREU+Cis8VTVFREE+Cis8VTY2NUQ+Cis8VTY3MzE+Cis8VTY3RjE+Cis8VTY4MkE+Cis8VTZDRTg+Cis8VTZEMzI+Cis8VTZFNEE+Cis8VTZGOEQ+Cis8VTcwQjc+Cis8VTczRTA+Cis8VTc1ODc+Cis8VTdDNEM+Cis8VTdEMDI+Cis8VTdEMkM+Cis8VTdEQTI+Cis8VTgyMUY+Cis8VTg2REI+Cis8VThBM0I+Cis8VThBODU+Cis8VThENzA+Cis8VThFOEE+Cis8VThGMzM+Cis8VTkwMzE+Cis8VTkxNEU+Cis8VTkxNTI+Cis8VTk0NDQ+Cis8VTk5RDA+Cis8VTdBRjk+Cis8VTdDQTU+Cis8VTRGQ0E+Cis8VTUxMDE+Cis8VTUxQzY+Cis8VTU3Qzg+Cis8VTVCRUY+Cis8VTVDRkI+Cis8VTY2NTk+Cis8VTZBM0Q+Cis8VTZENUE+Cis8VTZFOTY+Cis8VTZGRUM+Cis8VTcxMEM+Cis8VTc1NkY+Cis8VTdBRTM+Cis8VTg4MjI+Cis8VTkwMjE+Cis8VTkwNzU+Cis8VTk2Q0I+Cis8VTk5RkY+Cis8VTgzMDE+Cis8VTRFMkQ+Cis8VTRFRjI+Cis8VTg4NDY+Cis8VTkxQ0Q+Cis8VTUzN0Q+Cis8VTZBREI+Cis8VTY5NkI+Cis8VTZDNDE+Cis8VTg0N0E+Cis8VTU4OUU+Cis8VTYxOEU+Cis8VTY2RkU+Cis8VTYyRUY+Cis8VTcwREQ+Cis8VTc1MTE+Cis8VTc1Qzc+Cis8VTdFNTI+Cis8VTg0Qjg+Cis8VThCNDk+Cis8VThEMDg+Cis8VTRFNEI+Cis8VTUzRUE+Cis8VTU0QUI+Cis8VTU3MzA+Cis8VTU3NDA+Cis8VTVGRDc+Cis8VTYzMDE+Cis8VTYzMDc+Cis8VTY0NkY+Cis8VTY1MkY+Cis8VTY1RTg+Cis8VTY2N0E+Cis8VTY3OUQ+Cis8VTY3QjM+Cis8VTZCNjI+Cis8VTZDNjA+Cis8VTZDOUE+Cis8VTZGMkM+Cis8VTc3RTU+Cis8VTc4MjU+Cis8VTc5NDk+Cis8VTc5NTc+Cis8VTdEMTk+Cis8VTgwQTI+Cis8VTgxMDI+Cis8VTgxRjM+Cis8VTgyOUQ+Cis8VTgyQjc+Cis8VTg3MTg+Cis8VThBOEM+Cis8VUY5RkM+Cis8VThEMDQ+Cis8VThEQkU+Cis8VTkwNzI+Cis8VTc2RjQ+Cis8VTdBMTk+Cis8VTdBMzc+Cis8VTdFNTQ+Cis8VTgwNzc+Cis8VTU1MDc+Cis8VTU1RDQ+Cis8VTU4NzU+Cis8VTYzMkY+Cis8VTY0MjI+Cis8VTY2NDk+Cis8VTY2NEI+Cis8VTY4NkQ+Cis8VTY5OUI+Cis8VTZCODQ+Cis8VTZEMjU+Cis8VTZFQjE+Cis8VTczQ0Q+Cis8VTc0Njg+Cis8VTc0QTE+Cis8VTc1NUI+Cis8VTc1Qjk+Cis8VTc2RTE+Cis8VTc3MUU+Cis8VTc3OEI+Cis8VTc5RTY+Cis8VTdFMDk+Cis8VTdFMUQ+Cis8VTgxRkI+Cis8VTg1MkY+Cis8VTg4OTc+Cis8VThBM0E+Cis8VThDRDE+Cis8VThFRUI+Cis8VThGQjA+Cis8VTkwMzI+Cis8VTkzQUQ+Cis8VTk2NjM+Cis8VTk2NzM+Cis8VTk3MDc+Cis8VTRGODQ+Cis8VTUzRjE+Cis8VTU5RUE+Cis8VTVBQzk+Cis8VTVFMTk+Cis8VTY4NEU+Cis8VTc0QzY+Cis8VTc1QkU+Cis8VTc5RTk+Cis8VTdBOTI+Cis8VTgxQTM+Cis8VTg2RUQ+Cis8VThDRUE+Cis8VThEQ0M+Cis8VThGRUQ+Cis8VTY1OUY+Cis8VTY3MTU+Cis8VUY5RkQ+Cis8VTU3Rjc+Cis8VTZGNTc+Cis8VTdEREQ+Cis8VThGMkY+Cis8VTkzRjY+Cis8VTk2QzY+Cis8VTVGQjU+Cis8VTYxRjI+Cis8VTZGODQ+Cis8VTRFMTQ+Cis8VTRGOTg+Cis8VTUwMUY+Cis8VTUzQzk+Cis8VTU1REY+Cis8VTVENkY+Cis8VTVERUU+Cis8VTZCMjE+Cis8VTZCNjQ+Cis8VTc4Q0I+Cis8VTdCOUE+Cis8VUY5RkU+Cis8VThFNDk+Cis8VThFQ0E+Cis8VTkwNkU+Cis8VTYzNDk+Cis8VTY0M0U+Cis8VTc3NDA+Cis8VTdBODQ+Cis8VTkzMkY+Cis8VTk0N0Y+Cis8VTlGNkE+Cis8VTY0QjA+Cis8VTZGQUY+Cis8VTcxRTY+Cis8VTc0QTg+Cis8VTc0REE+Cis8VTdBQzQ+Cis8VTdDMTI+Cis8VTdFODI+Cis8VTdDQjI+Cis8VTdFOTg+Cis8VThCOUE+Cis8VThEMEE+Cis8VTk0N0Q+Cis8VTk5MTA+Cis8VTk5NEM+Cis8VTUyMzk+Cis8VTVCREY+Cis8VTY0RTY+Cis8VTY3MkQ+Cis8VTdEMkU+Cis8VTUwRUQ+Cis8VTUzQzM+Cis8VTU4Nzk+Cis8VTYxNTg+Cis8VTYxNTk+Cis8VTYxRkE+Cis8VTY1QUM+Cis8VTdBRDk+Cis8VThCOTI+Cis8VThCOTY+Cis8VTUwMDk+Cis8VTUwMjE+Cis8VTUyNzU+Cis8VTU1MzE+Cis8VTVBM0M+Cis8VTVFRTA+Cis8VTVGNzA+Cis8VTYxMzQ+Cis8VTY1NUU+Cis8VTY2MEM+Cis8VTY2MzY+Cis8VTY2QTI+Cis8VTY5Q0Q+Cis8VTZFQzQ+Cis8VTZGMzI+Cis8VTczMTY+Cis8VTc2MjE+Cis8VTdBOTM+Cis8VTgxMzk+Cis8VTgyNTk+Cis8VTgzRDY+Cis8VTg0QkM+Cis8VTUwQjU+Cis8VTU3RjA+Cis8VTVCQzA+Cis8VTVCRTg+Cis8VTVGNjk+Cis8VTYzQTE+Cis8VTc4MjY+Cis8VTdEQjU+Cis8VTgzREM+Cis8VTg1MjE+Cis8VTkxQzc+Cis8VTkxRjU+Cis8VTUxOEE+Cis8VTY3RjU+Cis8VTdCNTY+Cis8VThDQUM+Cis8VTUxQzQ+Cis8VTU5QkI+Cis8VTYwQkQ+Cis8VTg2NTU+Cis8VTUwMUM+Cis8VUY5RkY+Cis8VTUyNTQ+Cis8VTVDM0E+Cis8VTYxN0Q+Cis8VTYyMUE+Cis8VTYyRDM+Cis8VTY0RjI+Cis8VTY1QTU+Cis8VTZFQ0M+Cis8VTc2MjA+Cis8VTgxMEE+Cis8VThFNjA+Cis8VTk2NUY+Cis8VTk2QkI+Cis8VTRFREY+Cis8VTUzNDM+Cis8VTU1OTg+Cis8VTU5Mjk+Cis8VTVEREQ+Cis8VTY0QzU+Cis8VTZDQzk+Cis8VTZERkE+Cis8VTczOTQ+Cis8VTdBN0Y+Cis8VTgyMUI+Cis8VTg1QTY+Cis8VThDRTQ+Cis8VThFMTA+Cis8VTkwNzc+Cis8VTkxRTc+Cis8VTk1RTE+Cis8VTk2MjE+Cis8VTk3QzY+Cis8VTUxRjg+Cis8VTU0RjI+Cis8VTU1ODY+Cis8VTVGQjk+Cis8VTY0QTQ+Cis8VTZGODg+Cis8VTdEQjQ+Cis8VThGMUY+Cis8VThGNEQ+Cis8VTk0MzU+Cis8VTUwQzk+Cis8VTVDMTY+Cis8VTZDQkU+Cis8VTZERkI+Cis8VTc1MUI+Cis8VTc3QkI+Cis8VTdDM0Q+Cis8VTdDNjQ+Cis8VThBNzk+Cis8VThBQzI+Cis8VTU4MUU+Cis8VTU5QkU+Cis8VTVFMTY+Cis8VTYzNzc+Cis8VTcyNTI+Cis8VTc1OEE+Cis8VTc3NkI+Cis8VThBREM+Cis8VThDQkM+Cis8VThGMTI+Cis8VTVFRjM+Cis8VTY2NzQ+Cis8VTZERjg+Cis8VTgwN0Q+Cis8VTgzQzE+Cis8VThBQ0I+Cis8VTk3NTE+Cis8VTlCRDY+Cis8VUZBMDA+Cis8VTUyNDM+Cis8VTY2RkY+Cis8VTZEOTU+Cis8VTZFRUY+Cis8VTdERTA+Cis8VThBRTY+Cis8VTkwMkU+Cis8VTkwNUU+Cis8VTlBRDQ+Cis8VTUyMUQ+Cis8VTUyN0Y+Cis8VTU0RTg+Cis8VTYxOTQ+Cis8VTYyODQ+Cis8VTYyREI+Cis8VTY4QTI+Cis8VTY5MTI+Cis8VTY5NUE+Cis8VTZBMzU+Cis8VTcwOTI+Cis8VTcxMjY+Cis8VTc4NUQ+Cis8VTc5MDE+Cis8VTc5MEU+Cis8VTc5RDI+Cis8VTdBMEQ+Cis8VTgwOTY+Cis8VTgyNzg+Cis8VTgyRDU+Cis8VTgzNDk+Cis8VTg1NDk+Cis8VThDODI+Cis8VThEODU+Cis8VTkxNjI+Cis8VTkxOEI+Cis8VTkxQUU+Cis8VTRGQzM+Cis8VTU2RDE+Cis8VTcxRUQ+Cis8VTc3RDc+Cis8VTg3MDA+Cis8VTg5Rjg+Cis8VTVCRjg+Cis8VTVGRDY+Cis8VTY3NTE+Cis8VTkwQTg+Cis8VTUzRTI+Cis8VTU4NUE+Cis8VTVCRjU+Cis8VTYwQTQ+Cis8VTYxODE+Cis8VTY0NjA+Cis8VTdFM0Q+Cis8VTgwNzA+Cis8VTg1MjU+Cis8VTkyODM+Cis8VTY0QUU+Cis8VTUwQUM+Cis8VTVEMTQ+Cis8VTY3MDA+Cis8VTU4OUM+Cis8VTYyQkQ+Cis8VTYzQTg+Cis8VTY5MEU+Cis8VTY5Nzg+Cis8VTZBMUU+Cis8VTZFNkI+Cis8VTc2QkE+Cis8VTc5Q0I+Cis8VTgyQkI+Cis8VTg0Mjk+Cis8VThBQ0Y+Cis8VThEQTg+Cis8VThGRkQ+Cis8VTkxMTI+Cis8VTkxNEI+Cis8VTkxOUM+Cis8VTkzMTA+Cis8VTkzMTg+Cis8VTkzOUE+Cis8VTk2REI+Cis8VTlBMzY+Cis8VTlDMEQ+Cis8VTRFMTE+Cis8VTc1NUM+Cis8VTc5NUQ+Cis8VTdBRkE+Cis8VTdCNTE+Cis8VTdCQzk+Cis8VTdFMkU+Cis8VTg0QzQ+Cis8VThFNTk+Cis8VThFNzQ+Cis8VThFRjg+Cis8VTkwMTA+Cis8VTY2MjU+Cis8VTY5M0Y+Cis8VTc0NDM+Cis8VTUxRkE+Cis8VTY3MkU+Cis8VTlFREM+Cis8VTUxNDU+Cis8VTVGRTA+Cis8VTZDOTY+Cis8VTg3RjI+Cis8VTg4NUQ+Cis8VTg4Nzc+Cis8VTYwQjQ+Cis8VTgxQjU+Cis8VTg0MDM+Cis8VThEMDU+Cis8VTUzRDY+Cis8VTU0Mzk+Cis8VTU2MzQ+Cis8VTVBMzY+Cis8VTVDMzE+Cis8VTcwOEE+Cis8VTdGRTA+Cis8VTgwNUE+Cis8VTgxMDY+Cis8VTgxRUQ+Cis8VThEQTM+Cis8VTkxODk+Cis8VTlBNUY+Cis8VTlERjI+Cis8VTUwNzQ+Cis8VTRFQzQ+Cis8VTUzQTA+Cis8VTYwRkI+Cis8VTZFMkM+Cis8VTVDNjQ+Cis8VTRGODg+Cis8VTUwMjQ+Cis8VTU1RTQ+Cis8VTVDRDk+Cis8VTVFNUY+Cis8VTYwNjU+Cis8VTY4OTQ+Cis8VTZDQkI+Cis8VTZEQzQ+Cis8VTcxQkU+Cis8VTc1RDQ+Cis8VTc1RjQ+Cis8VTc2NjE+Cis8VTdBMUE+Cis8VTdBNDk+Cis8VTdEQzc+Cis8VTdERkI+Cis8VTdGNkU+Cis8VTgxRjQ+Cis8VTg2QTk+Cis8VThGMUM+Cis8VTk2Qzk+Cis8VTk5QjM+Cis8VTlGNTI+Cis8VTUyNDc+Cis8VTUyQzU+Cis8VTk4RUQ+Cis8VTg5QUE+Cis8VTRFMDM+Cis8VTY3RDI+Cis8VTZGMDY+Cis8VTRGQjU+Cis8VTVCRTI+Cis8VTY3OTU+Cis8VTZDODg+Cis8VTZENzg+Cis8VTc0MUI+Cis8VTc4Mjc+Cis8VTkxREQ+Cis8VTkzN0M+Cis8VTg3QzQ+Cis8VTc5RTQ+Cis8VTdBMzE+Cis8VTVGRUI+Cis8VTRFRDY+Cis8VTU0QTQ+Cis8VTU1M0U+Cis8VTU4QUU+Cis8VTU5QTU+Cis8VTYwRjA+Cis8VTYyNTM+Cis8VTYyRDY+Cis8VTY3MzY+Cis8VTY5NTU+Cis8VTgyMzU+Cis8VTk2NDA+Cis8VTk5QjE+Cis8VTk5REQ+Cis8VTUwMkM+Cis8VTUzNTM+Cis8VTU1NDQ+Cis8VTU3N0M+Cis8VUZBMDE+Cis8VTYyNTg+Cis8VUZBMDI+Cis8VTY0RTI+Cis8VTY2NkI+Cis8VTY3REQ+Cis8VTZGQzE+Cis8VTZGRUY+Cis8VTc0MjI+Cis8VTc0Mzg+Cis8VThBMTc+Cis8VTk0Mzg+Cis8VTU0NTE+Cis8VTU2MDY+Cis8VTU3NjY+Cis8VTVGNDg+Cis8VTYxOUE+Cis8VTZCNEU+Cis8VTcwNTg+Cis8VTcwQUQ+Cis8VTdEQkI+Cis8VThBOTU+Cis8VTU5NkE+Cis8VTgxMkI+Cis8VTYzQTI+Cis8VTc3MDg+Cis8VTgwM0Q+Cis8VThDQUE+Cis8VTU4NTQ+Cis8VTY0MkQ+Cis8VTY5QkI+Cis8VTVCOTU+Cis8VTVFMTE+Cis8VTZFNkY+Cis8VUZBMDM+Cis8VTg1Njk+Cis8VTUxNEM+Cis8VTUzRjA+Cis8VTU5MkE+Cis8VTYwMjA+Cis8VTYxNEI+Cis8VTZCODY+Cis8VTZDNzA+Cis8VTZDRjA+Cis8VTdCMUU+Cis8VTgwQ0U+Cis8VTgyRDQ+Cis8VThEQzY+Cis8VTkwQjA+Cis8VTk4QjE+Cis8VUZBMDQ+Cis8VTY0Qzc+Cis8VTZGQTQ+Cis8VTY0OTE+Cis8VTY1MDQ+Cis8VTUxNEU+Cis8VTU0MTA+Cis8VTU3MUY+Cis8VThBMEU+Cis8VTYxNUY+Cis8VTY4NzY+Cis8VUZBMDU+Cis8VTc1REI+Cis8VTdCNTI+Cis8VTdENzE+Cis8VTkwMUE+Cis8VTU4MDY+Cis8VTY5Q0M+Cis8VTgxN0Y+Cis8VTg5MkE+Cis8VTkwMDA+Cis8VTk4Mzk+Cis8VTUwNzg+Cis8VTU5NTc+Cis8VTU5QUM+Cis8VTYyOTU+Cis8VTkwMEY+Cis8VTlCMkE+Cis8VTYxNUQ+Cis8VTcyNzk+Cis8VTk1RDY+Cis8VTU3NjE+Cis8VTVBNDY+Cis8VTVERjQ+Cis8VTYyOEE+Cis8VTY0QUQ+Cis8VTY0RkE+Cis8VTY3Nzc+Cis8VTZDRTI+Cis8VTZEM0U+Cis8VTcyMkM+Cis8VTc0MzY+Cis8VTc4MzQ+Cis8VTdGNzc+Cis8VTgyQUQ+Cis8VThEREI+Cis8VTk4MTc+Cis8VTUyMjQ+Cis8VTU3NDI+Cis8VTY3N0Y+Cis8VTcyNDg+Cis8VTc0RTM+Cis8VThDQTk+Cis8VThGQTY+Cis8VTkyMTE+Cis8VTk2MkE+Cis8VTUxNkI+Cis8VTUzRUQ+Cis8VTYzNEM+Cis8VTRGNjk+Cis8VTU1MDQ+Cis8VTYwOTY+Cis8VTY1NTc+Cis8VTZDOUI+Cis8VTZEN0Y+Cis8VTcyNEM+Cis8VTcyRkQ+Cis8VTdBMTc+Cis8VTg5ODc+Cis8VThDOUQ+Cis8VTVGNkQ+Cis8VTZGOEU+Cis8VTcwRjk+Cis8VTgxQTg+Cis8VTYxMEU+Cis8VTRGQkY+Cis8VTUwNEY+Cis8VTYyNDE+Cis8VTcyNDc+Cis8VTdCQzc+Cis8VTdERTg+Cis8VTdGRTk+Cis8VTkwNEQ+Cis8VTk3QUQ+Cis8VTlBMTk+Cis8VThDQjY+Cis8VTU3NkE+Cis8VTVFNzM+Cis8VTY3QjA+Cis8VTg0MEQ+Cis8VThBNTU+Cis8VTU0MjA+Cis8VTVCMTY+Cis8VTVFNjM+Cis8VTVFRTI+Cis8VTVGMEE+Cis8VTY1ODM+Cis8VTgwQkE+Cis8VTg1M0Q+Cis8VTk1ODk+Cis8VTk2NUI+Cis8VTRGNDg+Cis8VTUzMDU+Cis8VTUzMEQ+Cis8VTUzMEY+Cis8VTU0ODY+Cis8VTU0RkE+Cis8VTU3MDM+Cis8VTVFMDM+Cis8VTYwMTY+Cis8VTYyOUI+Cis8VTYyQjE+Cis8VTYzNTU+Cis8VUZBMDY+Cis8VTZDRTE+Cis8VTZENjY+Cis8VTc1QjE+Cis8VTc4MzI+Cis8VTgwREU+Cis8VTgxMkY+Cis8VTgyREU+Cis8VTg0NjE+Cis8VTg0QjI+Cis8VTg4OEQ+Cis8VTg5MTI+Cis8VTkwMEI+Cis8VTkyRUE+Cis8VTk4RkQ+Cis8VTlCOTE+Cis8VTVFNDU+Cis8VTY2QjQ+Cis8VTY2REQ+Cis8VTcwMTE+Cis8VTcyMDY+Cis8VUZBMDc+Cis8VTRGRjU+Cis8VTUyN0Q+Cis8VTVGNkE+Cis8VTYxNTM+Cis8VTY3NTM+Cis8VTZBMTk+Cis8VTZGMDI+Cis8VTc0RTI+Cis8VTc5Njg+Cis8VTg4Njg+Cis8VThDNzk+Cis8VTk4Qzc+Cis8VTk4QzQ+Cis8VTlBNDM+Cis8VTU0QzE+Cis8VTdBMUY+Cis8VTY5NTM+Cis8VThBRjc+Cis8VThDNEE+Cis8VTk4QTg+Cis8VTk5QUU+Cis8VTVGN0M+Cis8VTYyQUI+Cis8VTc1QjI+Cis8VTc2QUU+Cis8VTg4QUI+Cis8VTkwN0Y+Cis8VTk2NDI+Cis8VTUzMzk+Cis8VTVGM0M+Cis8VTVGQzU+Cis8VTZDQ0M+Cis8VTczQ0M+Cis8VTc1NjI+Cis8VTc1OEI+Cis8VTdCNDY+Cis8VTgyRkU+Cis8VTk5OUQ+Cis8VTRFNEY+Cis8VTkwM0M+Cis8VTRFMEI+Cis8VTRGNTU+Cis8VTUzQTY+Cis8VTU5MEY+Cis8VTVFQzg+Cis8VTY2MzA+Cis8VTZDQjM+Cis8VTc0NTU+Cis8VTgzNzc+Cis8VTg3NjY+Cis8VThDQzA+Cis8VTkwNTA+Cis8VTk3MUU+Cis8VTlDMTU+Cis8VTU4RDE+Cis8VTVCNzg+Cis8VTg2NTA+Cis8VThCMTQ+Cis8VTlEQjQ+Cis8VTVCRDI+Cis8VTYwNjg+Cis8VTYwOEQ+Cis8VTY1RjE+Cis8VTZDNTc+Cis8VTZGMjI+Cis8VTZGQTM+Cis8VTcwMUE+Cis8VTdGNTU+Cis8VTdGRjA+Cis8VTk1OTE+Cis8VTk1OTI+Cis8VTk2NTA+Cis8VTk3RDM+Cis8VTUyNzI+Cis8VThGNDQ+Cis8VTUxRkQ+Cis8VTU0MkI+Cis8VTU0Qjg+Cis8VTU1NjM+Cis8VTU1OEE+Cis8VTZBQkI+Cis8VTZEQjU+Cis8VTdERDg+Cis8VTgyNjY+Cis8VTkyOUM+Cis8VTk2Nzc+Cis8VTlFNzk+Cis8VTU0MDg+Cis8VTU0Qzg+Cis8VTc2RDI+Cis8VTg2RTQ+Cis8VTk1QTQ+Cis8VTk1RDQ+Cis8VTk2NUM+Cis8VTRFQTI+Cis8VTRGMDk+Cis8VTU5RUU+Cis8VTVBRTY+Cis8VTVERjc+Cis8VTYwNTI+Cis8VTYyOTc+Cis8VTY3NkQ+Cis8VTY4NDE+Cis8VTZDODY+Cis8VTZFMkY+Cis8VTdGMzg+Cis8VTgwOUI+Cis8VTgyMkE+Cis8VUZBMDg+Cis8VUZBMDk+Cis8VTk4MDU+Cis8VTRFQTU+Cis8VTUwNTU+Cis8VTU0QjM+Cis8VTU3OTM+Cis8VTU5NUE+Cis8VTVCNjk+Cis8VTVCQjM+Cis8VTYxQzg+Cis8VTY5Nzc+Cis8VTZENzc+Cis8VTcwMjM+Cis8VTg3Rjk+Cis8VTg5RTM+Cis8VThBNzI+Cis8VThBRTc+Cis8VTkwODI+Cis8VTk5RUQ+Cis8VTlBQjg+Cis8VTUyQkU+Cis8VTY4Mzg+Cis8VTUwMTY+Cis8VTVFNzg+Cis8VTY3NEY+Cis8VTgzNDc+Cis8VTg4NEM+Cis8VTRFQUI+Cis8VTU0MTE+Cis8VTU2QUU+Cis8VTczRTY+Cis8VTkxMTU+Cis8VTk3RkY+Cis8VTk5MDk+Cis8VTk5NTc+Cis8VTk5OTk+Cis8VTU2NTM+Cis8VTU4OUY+Cis8VTg2NUI+Cis8VThBMzE+Cis8VTYxQjI+Cis8VTZBRjY+Cis8VTczN0I+Cis8VThFRDI+Cis8VTZCNDc+Cis8VTk2QUE+Cis8VTlBNTc+Cis8VTU5NTU+Cis8VTcyMDA+Cis8VThENkI+Cis8VTk3Njk+Cis8VTRGRDQ+Cis8VTVDRjQ+Cis8VTVGMjY+Cis8VTYxRjg+Cis8VTY2NUI+Cis8VTZDRUI+Cis8VTcwQUI+Cis8VTczODQ+Cis8VTczQjk+Cis8VTczRkU+Cis8VTc3Mjk+Cis8VTc3NEQ+Cis8VTdENDM+Cis8VTdENjI+Cis8VTdFMjM+Cis8VTgyMzc+Cis8VTg4NTI+Cis8VUZBMEE+Cis8VThDRTI+Cis8VTkyNDk+Cis8VTk4NkY+Cis8VTVCNTE+Cis8VTdBNzQ+Cis8VTg4NDA+Cis8VTk4MDE+Cis8VTVBQ0M+Cis8VTRGRTA+Cis8VTUzNTQ+Cis8VTU5M0U+Cis8VTVDRkQ+Cis8VTYzM0U+Cis8VTZENzk+Cis8VTcyRjk+Cis8VTgxMDU+Cis8VTgxMDc+Cis8VTgzQTI+Cis8VTkyQ0Y+Cis8VTk4MzA+Cis8VTRFQTg+Cis8VTUxNDQ+Cis8VTUyMTE+Cis8VTU3OEI+Cis8VTVGNjI+Cis8VTZDQzI+Cis8VTZFQ0U+Cis8VTcwMDU+Cis8VTcwNTA+Cis8VTcwQUY+Cis8VTcxOTI+Cis8VTczRTk+Cis8VTc0Njk+Cis8VTgzNEE+Cis8VTg3QTI+Cis8VTg4NjE+Cis8VTkwMDg+Cis8VTkwQTI+Cis8VTkzQTM+Cis8VTk5QTg+Cis8VTUxNkU+Cis8VTVGNTc+Cis8VTYwRTA+Cis8VTYxNjc+Cis8VTY2QjM+Cis8VTg1NTk+Cis8VThFNEE+Cis8VTkxQUY+Cis8VTk3OEI+Cis8VTRFNEU+Cis8VTRFOTI+Cis8VTU0N0M+Cis8VTU4RDU+Cis8VTU4RkE+Cis8VTU5N0Q+Cis8VTVDQjU+Cis8VTVGMjc+Cis8VTYyMzY+Cis8VTYyNDg+Cis8VTY2MEE+Cis8VTY2Njc+Cis8VTZCRUI+Cis8VTZENjk+Cis8VTZEQ0Y+Cis8VTZFNTY+Cis8VTZFRjg+Cis8VTZGOTQ+Cis8VTZGRTA+Cis8VTZGRTk+Cis8VTcwNUQ+Cis8VTcyRDA+Cis8VTc0MjU+Cis8VTc0NUE+Cis8VTc0RTA+Cis8VTc2OTM+Cis8VTc5NUM+Cis8VTdDQ0E+Cis8VTdFMUU+Cis8VTgwRTE+Cis8VTgyQTY+Cis8VTg0NkI+Cis8VTg0QkY+Cis8VTg2NEU+Cis8VTg2NUY+Cis8VTg3NzQ+Cis8VThCNzc+Cis8VThDNkE+Cis8VTkzQUM+Cis8VTk4MDA+Cis8VTk4NjU+Cis8VTYwRDE+Cis8VTYyMTY+Cis8VTkxNzc+Cis8VTVBNUE+Cis8VTY2MEY+Cis8VTZERjc+Cis8VTZFM0U+Cis8VTc0M0Y+Cis8VTlCNDI+Cis8VTVGRkQ+Cis8VTYwREE+Cis8VTdCMEY+Cis8VTU0QzQ+Cis8VTVGMTg+Cis8VTZDNUU+Cis8VTZDRDM+Cis8VTZEMkE+Cis8VTcwRDg+Cis8VTdEMDU+Cis8VTg2Nzk+Cis8VThBMEM+Cis8VTlEM0I+Cis8VTUzMTY+Cis8VTU0OEM+Cis8VTVCMDU+Cis8VTZBM0E+Cis8VTcwNkI+Cis8VTc1NzU+Cis8VTc5OEQ+Cis8VTc5QkU+Cis8VTgyQjE+Cis8VTgzRUY+Cis8VThBNzE+Cis8VThCNDE+Cis8VThDQTg+Cis8VTk3NzQ+Cis8VUZBMEI+Cis8VTY0RjQ+Cis8VTY1MkI+Cis8VTc4QkE+Cis8VTc4QkI+Cis8VTdBNkI+Cis8VTRFMzg+Cis8VTU1OUE+Cis8VTU5NTA+Cis8VTVCQTY+Cis8VTVFN0I+Cis8VTYwQTM+Cis8VTYzREI+Cis8VTZCNjE+Cis8VTY2NjU+Cis8VTY4NTM+Cis8VTZFMTk+Cis8VTcxNjU+Cis8VTc0QjA+Cis8VTdEMDg+Cis8VTkwODQ+Cis8VTlBNjk+Cis8VTlDMjU+Cis8VTZEM0I+Cis8VTZFRDE+Cis8VTczM0U+Cis8VThDNDE+Cis8VTk1Q0E+Cis8VTUxRjA+Cis8VTVFNEM+Cis8VTVGQTg+Cis8VTYwNEQ+Cis8VTYwRjY+Cis8VTYxMzA+Cis8VTYxNEM+Cis8VTY2NDM+Cis8VTY2NDQ+Cis8VTY5QTU+Cis8VTZDQzE+Cis8VTZFNUY+Cis8VTZFQzk+Cis8VTZGNjI+Cis8VTcxNEM+Cis8VTc0OUM+Cis8VTc2ODc+Cis8VTdCQzE+Cis8VTdDMjc+Cis8VTgzNTI+Cis8VTg3NTc+Cis8VTkwNTE+Cis8VTk2OEQ+Cis8VTlFQzM+Cis8VTUzMkY+Cis8VTU2REU+Cis8VTVFRkI+Cis8VTVGOEE+Cis8VTYwNjI+Cis8VTYwOTQ+Cis8VTYxRjc+Cis8VTY2NjY+Cis8VTY3MDM+Cis8VTZBOUM+Cis8VTZERUU+Cis8VTZGQUU+Cis8VTcwNzA+Cis8VTczNkE+Cis8VTdFNkE+Cis8VTgxQkU+Cis8VTgzMzQ+Cis8VTg2RDQ+Cis8VThBQTg+Cis8VThDQzQ+Cis8VTUyODM+Cis8VTczNzI+Cis8VTVCOTY+Cis8VTZBNkI+Cis8VTk0MDQ+Cis8VTU0RUU+Cis8VTU2ODY+Cis8VTVCNUQ+Cis8VTY1NDg+Cis8VTY1ODU+Cis8VTY2Qzk+Cis8VTY4OUY+Cis8VTZEOEQ+Cis8VTZEQzY+Cis8VTcyM0I+Cis8VTgwQjQ+Cis8VTkxNzU+Cis8VTlBNEQ+Cis8VTRGQUY+Cis8VTUwMTk+Cis8VTUzOUE+Cis8VTU0MEU+Cis8VTU0M0M+Cis8VTU1ODk+Cis8VTU1QzU+Cis8VTVFM0Y+Cis8VTVGOEM+Cis8VTY3M0Q+Cis8VTcxNjY+Cis8VTczREQ+Cis8VTkwMDU+Cis8VTUyREI+Cis8VTUyRjM+Cis8VTU4NjQ+Cis8VTU4Q0U+Cis8VTcxMDQ+Cis8VTcxOEY+Cis8VTcxRkI+Cis8VTg1QjA+Cis8VThBMTM+Cis8VTY2ODg+Cis8VTg1QTg+Cis8VTU1QTc+Cis8VTY2ODQ+Cis8VTcxNEE+Cis8VTg0MzE+Cis8VTUzNDk+Cis8VTU1OTk+Cis8VTZCQzE+Cis8VTVGNTk+Cis8VTVGQkQ+Cis8VTYzRUU+Cis8VTY2ODk+Cis8VTcxNDc+Cis8VThBRjE+Cis8VThGMUQ+Cis8VTlFQkU+Cis8VTRGMTE+Cis8VTY0M0E+Cis8VTcwQ0I+Cis8VTc1NjY+Cis8VTg2Njc+Cis8VTYwNjQ+Cis8VThCNEU+Cis8VTlERjg+Cis8VTUxNDc+Cis8VTUxRjY+Cis8VTUzMDg+Cis8VTZEMzY+Cis8VTgwRjg+Cis8VTlFRDE+Cis8VTY2MTU+Cis8VTZCMjM+Cis8VTcwOTg+Cis8VTc1RDU+Cis8VTU0MDM+Cis8VTVDNzk+Cis8VTdEMDc+Cis8VThBMTY+Cis8VTZCMjA+Cis8VTZCM0Q+Cis8VTZCNDY+Cis8VTU0Mzg+Cis8VTYwNzA+Cis8VTZEM0Q+Cis8VTdGRDU+Cis8VTgyMDg+Cis8VTUwRDY+Cis8VTUxREU+Cis8VTU1OUM+Cis8VTU2NkI+Cis8VTU2Q0Q+Cis8VTU5RUM+Cis8VTVCMDk+Cis8VTVFMEM+Cis8VTYxOTk+Cis8VTYxOTg+Cis8VTYyMzE+Cis8VTY2NUU+Cis8VTY2RTY+Cis8VTcxOTk+Cis8VTcxQjk+Cis8VTcxQkE+Cis8VTcyQTc+Cis8VTc5QTc+Cis8VTdBMDA+Cis8VTdGQjI+Cis8VThBNzA+CitVTkRFRklORUQKK29yZGVyX2VuZAorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKKyUgVGhpcyBpcyBhIGNvcHkgb2YgdGhlICJpMThuIiBMQ19DVFlQRSB3aXRoIHRoZSBmb2xsb3dpbmcgbW9kaWZpY2F0aW9uczoKKyUgLSBBZGRpdGlvbmFsIGNsYXNzZXM6IGhhbmd1bCBoYW5qYQorCitjb3B5ICJpMThuIgorCitjaGFyY2xhc3MgaGFuZ3VsO2hhbmphCisKK2hhbmd1bAk8VUFDMDA+Li48VUQ3QTM+CitoYW5qYQk8VTM0MDA+Li48VTREQjU+OzxVNEUwMD4uLjxVOUZBNT47PFVGOTAwPi4uPFVGQTBCPjs8VUZBMEM+Li48VUZBMkQ+CisKK3RyYW5zbGl0X3N0YXJ0CisKK2luY2x1ZGUgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK2luY2x1ZGUgInRyYW5zbGl0X2hhbmd1bCI7IiIKKwordHJhbnNsaXRfZW5kCisKK0VORCBMQ19DVFlQRQorCitMQ19NT05FVEFSWQorCitpbnRfY3Vycl9zeW1ib2wJCSI8VTAwNEI+PFUwMDUyPjxVMDA1Nz48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sCQkiPFVGRkU2PiIKK21vbl9kZWNpbWFsX3BvaW50CSI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAJIjxVMDAyQz4iCittb25fZ3JvdXBpbmcJCTM7MworcG9zaXRpdmVfc2lnbgkJIiIKK25lZ2F0aXZlX3NpZ24JCSI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzCQkwCitmcmFjX2RpZ2l0cwkJMAorcF9jc19wcmVjZWRlcwkJMQorcF9zZXBfYnlfc3BhY2UJCTAKK25fY3NfcHJlY2VkZXMJCTEKK25fc2VwX2J5X3NwYWNlCQkwCitwX3NpZ25fcG9zbgkJMQorbl9zaWduX3Bvc24JCTQKKworRU5EIExDX01PTkVUQVJZCisKKyUgTm90ZXMgZm9yIExDX05VTUVSSUMKKyUgS29yZWEgbnVtZXJpYyByZXByZXNlbnRhdGlvbiBpcyBvbmUgaW1wb3J0ZWQgZnJvbSBVLlMuCislIGluIGxhdGUgMTl0aCBjZW50dXJ5LiBTbyB0aGUgZm9sbG93aW5nIGRlZmluaXRpb24gaXMKKyUgZXhhY3RseSB0aGUgc2FtZSB0byBVLlMuCisKK0xDX05VTUVSSUMKKworZGVjaW1hbF9wb2ludAkJIjxVMDAyRT4iCit0aG91c2FuZHNfc2VwCQkiPFUwMDJDPiIKK2dyb3VwaW5nCQkzOzMKKworRU5EIExDX05VTUVSSUMKKworTENfVElNRQorCithYmRheSAgICAiPFVDNzdDPiI7LworCSAiPFVDNkQ0PiI7IjxVRDY1ND4iOy8KKyAgICAgICAgICI8VUMyMTg+IjsiPFVCQUE5PiI7LworICAgICAgICAgIjxVQUUwOD4iOyI8VUQxQTA+IgorZGF5ICAgICAgIjxVQzc3Qz48VUM2OTQ+PFVDNzdDPiI7LworICAgICAgICAgIjxVQzZEND48VUM2OTQ+PFVDNzdDPiI7LworICAgICAgICAgIjxVRDY1ND48VUM2OTQ+PFVDNzdDPiI7LworICAgICAgICAgIjxVQzIxOD48VUM2OTQ+PFVDNzdDPiI7LworICAgICAgICAgIjxVQkFBOT48VUM2OTQ+PFVDNzdDPiI7LworICAgICAgICAgIjxVQUUwOD48VUM2OTQ+PFVDNzdDPiI7LworICAgICAgICAgIjxVRDFBMD48VUM2OTQ+PFVDNzdDPiIKKworJSAoJWIpICIlbVdFT0wiIHdoZXJlICVtIGlzIHNwYWNlLWZpbGxlZCBpbnN0ZWFkIG9mIHplcm8tZmlsbGVkCisKK2FibW9uICAgICI8VTAwMjA+PFUwMDMxPjxVQzZEND4iOyI8VTAwMjA+PFUwMDMyPjxVQzZEND4iOy8KKyAgICAgICAgICI8VTAwMjA+PFUwMDMzPjxVQzZEND4iOyI8VTAwMjA+PFUwMDM0PjxVQzZEND4iOy8KKyAgICAgICAgICI8VTAwMjA+PFUwMDM1PjxVQzZEND4iOyI8VTAwMjA+PFUwMDM2PjxVQzZEND4iOy8KKyAgICAgICAgICI8VTAwMjA+PFUwMDM3PjxVQzZEND4iOyI8VTAwMjA+PFUwMDM4PjxVQzZEND4iOy8KKyAgICAgICAgICI8VTAwMjA+PFUwMDM5PjxVQzZEND4iOyI8VTAwMzE+PFUwMDMwPjxVQzZEND4iOy8KKyAgICAgICAgICI8VTAwMzE+PFUwMDMxPjxVQzZEND4iOyI8VTAwMzE+PFUwMDMyPjxVQzZEND4iCisKK21vbiAgICAgICI8VTAwMzE+PFVDNkQ0PiI7IjxVMDAzMj48VUM2RDQ+IjsvCisgICAgICAgICAiPFUwMDMzPjxVQzZEND4iOyI8VTAwMzQ+PFVDNkQ0PiI7LworICAgICAgICAgIjxVMDAzNT48VUM2RDQ+IjsiPFUwMDM2PjxVQzZEND4iOy8KKyAgICAgICAgICI8VTAwMzc+PFVDNkQ0PiI7IjxVMDAzOD48VUM2RDQ+IjsvCisgICAgICAgICAiPFUwMDM5PjxVQzZEND4iOyI8VTAwMzE+PFUwMDMwPjxVQzZEND4iOy8KKyAgICAgICAgICI8VTAwMzE+PFUwMDMxPjxVQzZEND4iOyI8VTAwMzE+PFUwMDMyPjxVQzZEND4iCisKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbiAoJWMpCislICIleCAoJWEpICVyIgorZF90X2ZtdCAiPFUwMDI1PjxVMDA3OD48VTAwMjA+PFUwMDI4PjxVMDAyNT48VTAwNjE+PFUwMDI5PjxVMDAyMD48VTAwMjU+PFUwMDcyPiIKKworJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uICgleCkKKyUgIiVZPE5ZRU9OPiAlbTxXRU9MPiAlZDxJTD4KK2RfZm10IC8KKyI8VTAwMjU+PFUwMDU5PjxVQjE0ND48VTAwMjA+PFUwMDI1PjxVMDA2RD48VUM2RDQ+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFVDNzdDPiIKKyVkX2ZtdAkiPFUwMDI1PjxVMDA1OT48VUIxNDQ+PFUwMDIwPjxVMDAyNT48VTAwNkQ+PFVDNkQ0PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVQzc3Qz4iCisKKyUgQXBwcm9wcmlhdGUgdGltZSByZXByZXNlbnRhdGlvbiAoJVgpCislICAiJUg8U0k+ICVNPEJVTj4gJVM8Q0hPPiIKK3RfZm10ICAgICI8VTAwMjU+PFUwMDQ4PjxVQzJEQz48VTAwMjA+PFUwMDI1PjxVMDA0RD48VUJEODQ+PFUwMDIwPjxVMDAyNT48VTAwNTM+PFVDRDA4PiIKKworJSBTdHJpbmdzIGZvciBBTS9QTSAoJXApCislICI8Tz48SkVPTj4iOyI8Tz48SFU+IgorYW1fcG0JIjxVQzYyND48VUM4MDQ+IjsiPFVDNjI0PjxVRDZDND4iCisKKyUgQXBwcm9wcmlhdGUgQU0vUE0gdGltZSByZXByZXNlbnRhdGlvbiAoJXIpCislICAiJXAgJUg8U0k+ICVNPEJVTj4gJVM8Q0hPPiIKK3RfZm10X2FtcG0gIjxVMDAyNT48VTAwNzA+PFUwMDIwPjxVMDAyNT48VTAwNDk+PFVDMkRDPjxVMDAyMD48VTAwMjU+PFUwMDREPjxVQkQ4ND48VTAwMjA+PFUwMDI1PjxVMDA1Mz48VUNEMDg+IgorCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKGRhdGUoMSkpICAiJVkuICVtLiAlZC4gKCVhKSAlSDolTTolUyAlWiIKK2RhdGVfZm10ICAvCisiPFUwMDI1PjxVMDA1OT48VTAwMkU+PFUwMDIwPjxVMDAyNT48VTAwNkQ+PFUwMDJFPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyRT4vCis8VTAwMjA+PFUwMDI4PjxVMDAyNT48VTAwNjE+PFUwMDI5Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPi8KKzxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKworRU5EIExDX1RJTUUKKworJSBOT1RFUyBvbiBMQ19NRVNTQUdFUworJQorJSBBbnkgc3RyaW5nIHN0YXJ0aW5nIHdpdGggYW55IGZvcm0gb2YgTGF0aW4gWSBhbmQgS29yZWEKKyUgYFllYScgYXJlIHJlY29nbml6ZWQgYXMgYWZmaXJtYXRpdmUgYW5zd2VyLiAgTmVnYXRpdmUgYW5zd2VyIGlzCislIHJlY29nbml6ZWQgYnkgTGF0aW4gTiBhbmQgSGFuZ3VsIGBBJyAod2hpY2ggc3RhbmRzIGZvciBgYEFuaW8nJykuCisKK0xDX01FU1NBR0VTCisKK3llc2V4cHIJIjxVMDA1RT48VTAwNUI+PFUwMDc5PjxVMDA1OT48VUM2MDg+PFUwMDVEPiIKKworbm9leHByCSI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFVDNTQ0PjxVQjJDOD48VUM2MjQ+PFUwMDVEPiIKKworRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCislIEZJWE1FCitoZWlnaHQgICAyOTcKKyUgRklYTUUKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQorJSAiKyVjICVhICVsIgordGVsX2ludF9mbXQgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDZDPiIKKyUgQWx0ZXJuYXRpdmUgZm9ybTogICIrJWMgKDApJWEtJWwiCisKKyUgICAgIiglQSkgJWwiICA6IChhcmVhY29kZSkgbG9jYWxfbnVtYmVyCit0ZWxfZG9tX2ZtdCAgICAiPFUwMDI4PjxVMDAyNT48VTAwNDE+PFUwMDI5PjxVMDAyMD48VTAwMjU+PFUwMDZDPiIKKyUgICAgQWx0ZXJuYXRpdmUgZm9ybSA6CislICAgICIlQS0lbCIgIDogYXJlYWNvZGUtbG9jYWxfbnVtYmVyCisldGVsX2RvbV9mbXQgICAgIjxVMDAyNT48VTAwNDE+PFUwMDJEPjxVMDAyMD48VTAwMjU+PFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzg+PFUwMDMyPiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKKyUgRklYTUUKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgIjxVMDA0Qj48VTAwNTI+IgorY291bnRyeV9hYjMgIjxVMDA0Qj48VTAwNEY+PFUwMDUyPiIKK2NvdW50cnlfbnVtIDQxMAorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2tzX0lOQGRldmFuYWdhcmkgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9rc19JTkBkZXZhbmFnYXJpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNTVkZTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9rc19JTkBkZXZhbmFnYXJpCkBAIC0wLDAgKzEsMjA0IEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKyUgS2FzaG1pcmkgbGFuZ3VhZ2UgbG9jYWxlIGZvciBJbmRpYS4KKyUgQ29udHJpYnV0ZWQgYnkgUmFrZXNoIFBhbmRpdCA8cmFrZXNoLnBhbmRpdEBnbWFpbC5jb20+IGFuZCAKKyUgUHJhdmluIFNhdHB1dGUgPHBzYXRwdXRlQHJlZGhhdC5jb20+CisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJLYXNobWlyaSBsYW5ndWFnZSBsb2NhbGUgZm9yIEluZGlhIgorc291cmNlICAgICAiIgorYWRkcmVzcyAgICAiIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAia3MtZ25vbWUtdHJhbnMtY29tbWl0c0BsaXN0cy5jb2RlLmluZGxpbnV4Lm5ldCIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkthc2htaXJpIgordGVycml0b3J5ICAiSW5kaWEiCityZXZpc2lvbiAgICIwLjEiCitkYXRlICAgICAgICIyMDA4LTA4LTI2IgorJQorY2F0ZWdvcnkgICJrc19JTkBkZXZhbmFnYXJpOjIwMDgiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImtzX0lOQGRldmFuYWdhcmk6MjAwOCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAia3NfSU5AZGV2YW5hZ2FyaToyMDA4IjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImtzX0lOQGRldmFuYWdhcmk6MjAwOCI7TENfVElNRQorY2F0ZWdvcnkgICJrc19JTkBkZXZhbmFnYXJpOjIwMDgiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAia3NfSU5AZGV2YW5hZ2FyaToyMDA4IjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJrc19JTkBkZXZhbmFnYXJpOjIwMDgiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImtzX0lOQGRldmFuYWdhcmk6MjAwOCI7TENfUEFQRVIKK2NhdGVnb3J5ICAia3NfSU5AZGV2YW5hZ2FyaToyMDA4IjtMQ19OQU1FCitjYXRlZ29yeSAgImtzX0lOQGRldmFuYWdhcmk6MjAwOCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJrc19JTkBkZXZhbmFnYXJpOjIwMDgiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCisKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxCitjb3B5ICJpc28xNDY1MV90MSIKKworRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gdGhlIExDX01PTkVUQVJZIGNhdGVnb3J5LgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkaWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlL0phdmEKKyUKK2ludF9jdXJyX3N5bWJvbCAgICAgICAiPFUwMDQ5PjxVMDA0RT48VTAwNTI+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAiPFUwOTMwPjxVMDk0Mj4iCittb25fZGVjaW1hbF9wb2ludCAgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAgMworcG9zaXRpdmVfc2lnbiAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgIDEKKyUKK0VORCBMQ19NT05FVEFSWQorCisKK0xDX05VTUVSSUMKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OVU1FUklDICBjYXRlZ29yeS4KKyUKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgIjxVMDAyRT4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICI8VTAwMkM+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAzCislCitFTkQgTENfTlVNRVJJQworCisKK0xDX1RJTUUKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19USU1FIGNhdGVnb3J5LgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkaWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlL0phdmEKKyUKKyUgQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyAoJWEpCithYmRheSAgICAgICAiPFUwOTA2PjxVMDkyNT48VTA5NEQ+IjsvCisgICAgICAgICAgICAiPFUwOTFBPjxVMDkyOD48VTA5NEQ+PFUwOTI2PjxVMDkzMD48VTA5NEQ+IjsvCisgIAkgICAgIjxVMDkyQz48VTA5NEI+PFUwOTJFPjxVMDk0RD4iOy8KKyAgICAgICAgICAgICI8VTA5MkM+PFUwOTRCPjxVMDkxOD4iOy8KKyAgICAgICAgICAgICI8VTA5MkM+PFUwOTREPjxVMDkzMD48VTA5Mzg+PFUwOTREPjxVMDk0RD4iOy8KKyAgICAgICAgICAgICI8VTA5MUM+PFUwOTQxPjxVMDkyRT4iOy8KKyAgICAgICAgICAgICI8VTA5MkM+PFUwOTFGPiIKKyUKKyUgRnVsbCB3ZWVrZGF5IG5hbWVzICglQSkKK2RheSAgICAgICAgICI8VTA5MDY+PFUwOTI1PjxVMDk0RD48VTA5NEQ+PFUwOTM1PjxVMDkzRT48VTA5MzA+PFUwOTREPiI7LworICAgICAgICAgICAgIjxVMDkxQT48VTA5Mjg+PFUwOTREPjxVMDkyNj48VTA5NEQ+PFUwOTMwPjxVMDkzNT48VTA5M0U+PFUwOTMwPjxVMDk0RD4iOy8KKyAgICAgICAgICAgICI8VTA5MkM+PFUwOTRCPjxVMDkyRT48VTA5NEQ+PFUwOTM1PjxVMDkzRT48VTA5MzA+PFUwOTQwPjxVMDk0RD4iOy8KKyAgICAgICAgICAgICI8VTA5MkM+PFUwOTRCPjxVMDkxOD48VTA5MzU+PFUwOTNFPjxVMDkzMD48VTA5NDA+PFUwOTREPiI7LworICAgICAgICAgICAgIjxVMDkyQz48VTA5NEQ+PFUwOTMwPjxVMDkzOD48VTA5NEQ+PFUwOTREPjxVMDkzNT48VTA5M0U+PFUwOTMwPjxVMDk0RD4iOy8KKyAgICAgICAgICAgICI8VTA5MUM+PFUwOTQxPjxVMDkyRT48VTA5M0U+PFUwOTM5PjxVMDk0RD4iOy8KKyAgICAgICAgICAgICI8VTA5MkM+PFUwOTFGPjxVMDkzNT48VTA5M0U+PFUwOTMwPjxVMDk0RD4iCislCislIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzICglYikKK2FibW9uICAgICAgICI8VTA5MUM+PFUwOTI4PjxVMDkzNT48VTA5MzA+PFUwOTQwPiI7LworICAgICAgICAgICAgIjxVMDkyQj48VTA5M0M+PFUwOTMwPjxVMDkzNT48VTA5MzA+PFUwOTQwPiI7LworICAgICAgICAgICAgIjxVMDkyRT48VTA5M0U+PFUwOTMwPjxVMDk0RD48VTA5MUE+IjsvCisgICAgICAgICAgICAiPFUwOTA1PjxVMDkyQT48VTA5NEQ+PFUwOTMwPjxVMDk0Nz48VTA5MzI+IjsvCisgICAgICAgICAgICAiPFUwOTJFPjxVMDkwOD4iOyI8VTA5MUM+PFUwOTQyPjxVMDkyOD4iOy8KKyAgICAgICAgICAgICI8VTA5MUM+PFUwOTQxPjxVMDkzMj48VTA5M0U+PFUwOTA4PiI7LworICAgICAgICAgICAgIjxVMDkwNT48VTA5MTc+PFUwOTM4PjxVMDk0RD48VTA5MjQ+IjsvCisgICAgICAgICAgICAiPFUwOTM4PjxVMDkzRj48VTA5MjQ+PFUwOTJFPjxVMDk0RD48VTA5MkM+PFUwOTMwPiI7LworICAgICAgICAgICAgIjxVMDkwNT48VTA5MTU+PFUwOTREPjxVMDkxRj48VTA5NDI+PFUwOTJDPjxVMDkzMD4iOy8KKyAgICAgICAgICAgICI8VTA5Mjg+PFUwOTM1PjxVMDkyRT48VTA5NEQ+PFUwOTJDPjxVMDkzMD4iOy8KKyAgICAgICAgICAgICI8VTA5MjY+PFUwOTNGPjxVMDkzOD48VTA5MkU+PFUwOTREPjxVMDkyQz48VTA5MzA+IgorJQorJSBGdWxsIG1vbnRoIG5hbWVzICglQikKK21vbiAgICAgICAgICI8VTA5MUM+PFUwOTI4PjxVMDkzNT48VTA5MzA+PFUwOTQwPiI7LworICAgICAgICAgICAgIjxVMDkyQj48VTA5M0M+PFUwOTMwPjxVMDkzNT48VTA5MzA+PFUwOTQwPiI7LworICAgICAgICAgICAgIjxVMDkyRT48VTA5M0U+PFUwOTMwPjxVMDk0RD48VTA5MUE+IjsvCisgICAgICAgICAgICAiPFUwOTA1PjxVMDkyQT48VTA5NEQ+PFUwOTMwPjxVMDk0Nz48VTA5MzI+IjsvCisgICAgICAgICAgICAiPFUwOTJFPjxVMDkwOD4iOyI8VTA5MUM+PFUwOTQyPjxVMDkyOD4iOy8KKyAgICAgICAgICAgICI8VTA5MUM+PFUwOTQxPjxVMDkzMj48VTA5M0U+PFUwOTA4PiI7LworICAgICAgICAgICAgIjxVMDkwNT48VTA5MTc+PFUwOTM4PjxVMDk0RD48VTA5MjQ+IjsvCisgICAgICAgICAgICAiPFUwOTM4PjxVMDkzRj48VTA5MjQ+PFUwOTJFPjxVMDk0RD48VTA5MkM+PFUwOTMwPiI7LworICAgICAgICAgICAgIjxVMDkwNT48VTA5MTU+PFUwOTREPjxVMDkxRj48VTA5NDI+PFUwOTJDPjxVMDkzMD4iOy8KKyAgICAgICAgICAgICI8VTA5Mjg+PFUwOTM1PjxVMDkyRT48VTA5NEQ+PFUwOTJDPjxVMDkzMD4iOy8KKyAgICAgICAgICAgICI8VTA5MjY+PFUwOTNGPjxVMDkzOD48VTA5MkU+PFUwOTREPjxVMDkyQz48VTA5MzA+IgorJQorJSBFcXVpdmFsZW50IG9mIEFNIFBNCithbV9wbSAgICAgICAiPFUwOTJBPjxVMDk0Mj48VTA5MzA+PFUwOTREPjxVMDkzNT48VTA5M0U+PFUwOTM5PjxVMDk0RD48VTA5Mjg+IjsvCisgICAgICAgICAgICAiPFUwOTA1PjxVMDkyQT48VTA5MzA+PFUwOTNFPjxVMDkzOT48VTA5NEQ+PFUwOTI4PiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbgorJSAlQSAlZCAlYiAlWSVJOiVNOiVTICAlWgorZF90X2ZtdCAgICAgIjxVMDAyNT48VTAwNDE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+LworPFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPi8KKzxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNzA+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uCislICVBICVkICViICVZCitkX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA0MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj4vCis8VTAwMjA+PFUwMDI1PjxVMDA1OT4iCislCislIEFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJUk6JU06JVMgICVaCit0X2ZtdCAgICAgICAiPFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4vCis8VTAwMjA+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorJSBBcHByb3ByaWF0ZSAxMiBoIHRpbWUgcmVwcmVzZW50YXRpb24gKCVyKQordF9mbXRfYW1wbSAgIjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+LworPFUwMDIwPjxVMDAyNT48VTAwNzA+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorZGF0ZV9mbXQgICAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorJQorZmlyc3Rfd2Vla2RheSAxCitFTkQgTENfVElNRQorCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCisKK0xDX1BBUEVSCitjb3B5ICJoaV9JTiIKK0VORCBMQ19QQVBFUgorCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDcwPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNjc+IgorbmFtZV9nZW4gICAgIiIKK25hbWVfbXIgICAgICI8VTA5MzY+PFUwOTREPjxVMDkzMD48VTA5NDA+PFUwMDJFPiIKK25hbWVfbXJzICAgICI8VTA5MzY+PFUwOTREPjxVMDkzMD48VTA5NDA+PFUwOTJFPjxVMDkyND48VTA5NDA+PFUwMDJFPiIKK25hbWVfbWlzcyAgICI8VTA5MTU+PFUwOTQxPjxVMDkyRT48VTA5M0U+PFUwOTMwPjxVMDk0MD48VTAwMkU+IgorbmFtZV9tcyAgICAgIjxVMDkxNT48VTA5NDE+PFUwOTJFPjxVMDkzRT48VTA5MzA+PFUwMDJFPiIKKworRU5EIExDX05BTUUKKworCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAiPFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3Mj4iCisKK2NvdW50cnlfYWIyICI8VTAwNDk+PFUwMDRFPiIKK2NvdW50cnlfYWIzICI8VTAwNDk+PFUwMDRFPjxVMDA0ND4iCitjb3VudHJ5X251bSAzNTYKK0VORCBMQ19BRERSRVNTCisKKworTENfVEVMRVBIT05FCitjb3B5ICJoaV9JTiIKK0VORCBMQ19URUxFUEhPTkUKKworCitMQ19NRUFTVVJFTUVOVAorY29weSAiaGlfSU4iCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2t1X1RSIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMva3VfVFIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYzOWUyNgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2t1X1RSCkBAIC0wLDAgKzEsMjE1IEBACitlc2NhcGVfY2hhciAgLworY29tbWVudF9jaGFyICAlCisKKyUgS3VyZGlzaCAobGF0aW4pIGxhbmd1YWdlIGxvY2FsZSBmb3IgVHVya2V5CislIFNvdXJjZTogS2FkZXIgRElMU0laCislIENvbnRhY3Q6IEthZGVyIERJTFNJWiwgUGFibG8gU2FyYXR4YWdhCislIEVtYWlsOiBrYWRlckBpa2FkZXIuY29tLCBwYWJsb0BtYW5kcmFrZXNvZnQuY29tCislIFRlbDoKKyUgRmF4OgorJSBMYW5ndWFnZToga3UKKyUgVGVycml0b3J5OiBUUgorJSBSZXZpc2lvbjogMC4xCislIERhdGU6IDIwMDMtMDctMjcKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogVVRGLTgKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKyUgSGlzdG9yeToKKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkt1cmRpc2ggKGxhdGluKSBsb2NhbGUgZm9yIFR1cmtleSIKK3NvdXJjZSAgICAgIkthZGVyIERJTFNJWiIKK2FkZHJlc3MgICAgIiIKK2NvbnRhY3QgICAgIkthZGVyIERJTFNJWiwgUGFibG8gU2FyYXR4YWdhIgorZW1haWwgICAgICAia2FkZXJAaWthZGVyLmNvbSwgcGFibG9AbWFuZHJha2Vzb2Z0LmNvbSIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkt1cmRpc2giCit0ZXJyaXRvcnkgICJUdXJrZXkiCityZXZpc2lvbiAgICIwLjEiCitkYXRlICAgICAgICIyMDAzLTA3LTI3IgorJQorY2F0ZWdvcnkgICJrdV9UUjoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJrdV9UUjoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJrdV9UUjoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImt1X1RSOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAia3VfVFI6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJrdV9UUjoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJrdV9UUjoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJrdV9UUjoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJrdV9UUjoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImt1X1RSOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAia3VfVFI6MjAwMCI7TENfVEVMRVBIT05FCitjYXRlZ29yeSAgImt1X1RSOjIwMDAiO0xDX01FQVNVUkVNRU5UCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAidHJfVFIiCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCisKKyUlIGEgYiBjIGMsIGQgZSBlPiBmIGcgaCBpIGk+IGogayBsIG0gbiBvIHAgcSByIHMgcywgdCB1IHU+IHYgdyB4IHkgegorCitjb2xsYXRpbmctc3ltYm9sIDxjLD4KK2NvbGxhdGluZy1zeW1ib2wgPGUvPj4KK2NvbGxhdGluZy1zeW1ib2wgPGkuPgorY29sbGF0aW5nLXN5bWJvbCA8aS8+PgorY29sbGF0aW5nLXN5bWJvbCA8cyw+Citjb2xsYXRpbmctc3ltYm9sIDx1Lz4+CisKK3Jlb3JkZXItYWZ0ZXIgPGM+Cis8Yyw+CityZW9yZGVyLWFmdGVyIDxlPgorPGUvPj4KK3Jlb3JkZXItYWZ0ZXIgPGg+Cis8aT4KKzxpLj4KKzxpLz4+CityZW9yZGVyLWFmdGVyIDxzPgorPHMsPgorcmVvcmRlci1hZnRlciA8dT4KKzx1Lz4+CisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDYzPgorPFUwMEU3PiA8Yyw+OzxDREk+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNDM+Cis8VTAwQzc+IDxjLD47PENEST47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDY1PgorPFUwMEVBPiA8ZS8+Pjs8Q0lSPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDQ1PgorPFUwMENBPiA8ZS8+Pjs8Q0lSPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNjg+Cis8VTAxMzE+IDxpPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDA2OT4gPGkuPjs8UENUPjs8TUlOPjtJR05PUkUKKzxVMDBFRT4gPGkvPj47PENJUj47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0OD4KKzxVMDA0OT4gPGk+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwMTMwPiA8aS4+OzxQQ1Q+OzxDQVA+O0lHTk9SRQorPFUwMENFPiA8aS8+Pjs8Q0lSPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNzM+Cis8VTAxNUY+IDxzLD47PENEST47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA1Mz4KKzxVMDE1RT4gPHMsPjs8Q0RJPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNzU+Cis8VTAwRkI+IDx1Lz4+OzxDSVI+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNTU+Cis8VTAwREI+IDx1Lz4+OzxDSVI+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWVuZAorCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQorY29weSAidHJfVFIiCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworY29weSAidHJfVFIiCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICAgICAiPFUwMDc5PjxVMDBFQT48VTAwNkI+IjsiPFUwMDY0PjxVMDA3NT48VTAwNzM+IjsvCisgICAgICAgICAgICAiPFUwMDczPjxVMDBFQT48VTAwNzM+IjsiPFUwMEU3PjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDcwPjxVMDBFQT48VTAwNkU+IjsiPFUwMEVFPjxVMDA2RT48VTAwRUU+IjsvCisgICAgICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNzA+IgorZGF5ICAgICAgICAgIjxVMDA3OT48VTAwRUE+PFUwMDZCPjxVMDA3Mz48VTAwRUE+PFUwMDZEPiI7LworICAgICAgICAgICAgIjxVMDA2ND48VTAwNzU+PFUwMDczPjxVMDBFQT48VTAwNkQ+IjsvCisgICAgICAgICAgICAiPFUwMDczPjxVMDBFQT48VTAwNzM+PFUwMEVBPjxVMDA2RD4iOy8KKyAgICAgICAgICAgICI8VTAwRTc+PFUwMDYxPjxVMDA3Mj48VTAwNzM+PFUwMEVBPjxVMDA2RD4iOy8KKyAgICAgICAgICAgICI8VTAwNzA+PFUwMEVBPjxVMDA2RT48VTAwNjM+PFUwMDczPjxVMDBFQT48VTAwNkQ+IjsvCisgICAgICAgICAgICAiPFUwMEVFPjxVMDA2RT48VTAwRUU+IjsvCisgICAgICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNzA+PFUwMDc0PiIKK2FibW9uICAgICAgICI8VTAwQzc+PFUwMDY5PjxVMDA2Qz4iOyI8VTAwNTM+PFUwMDY5PjxVMDA2Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNDE+PFUwMDY0PjxVMDA2MT4iOyI8VTAwNEU+PFUwMEVFPjxVMDA3Mz4iOy8KKyAgICAgICAgICAgICI8VTAwNDc+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNDg+PFUwMDY1PjxVMDA3QT4iOy8KKyAgICAgICAgICAgICI8VTAwNTQ+PFUwMEVFPjxVMDA3Mj4iOyI8VTAwNTQ+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgICAgICI8VTAwQ0U+PFUwMDZDPjxVMDA2Rj4iOyI8VTAwNDM+PFUwMDZGPjxVMDA3ND4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDY5PjxVMDA2QT4iOyI8VTAwNEI+PFUwMDYxPjxVMDA2RT4iCittb24gICAgICAgICAiPFUwMEM3PjxVMDA2OT48VTAwNkM+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjk+PFUwMDYyPjxVMDA2MT48VTAwNzQ+IjsvCisgICAgICAgICAgICAiPFUwMDQxPjxVMDA2ND48VTAwNjE+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA0RT48VTAwRUU+PFUwMDczPjxVMDA2MT48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDQ3PjxVMDA3NT48VTAwNkM+PFUwMDYxPjxVMDA2RT4iOy8KKyAgICAgICAgICAgICI8VTAwNDg+PFUwMDY1PjxVMDA3QT48VTAwRUU+PFUwMDcyPjxVMDA2MT48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDBFRT48VTAwNzI+PFUwMDZEPjxVMDA2NT48VTAwNjg+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA2NT48VTAwNjI+PFUwMDYxPjxVMDA3OD4iOy8KKyAgICAgICAgICAgICI8VTAwQ0U+PFUwMDZDPjxVMDA2Rj48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDQzPjxVMDA2Rj48VTAwNzQ+PFUwMDZEPjxVMDA2NT48VTAwNjg+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2OT48VTAwNkE+PFUwMDY0PjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDRCPjxVMDA2MT48VTAwNkU+PFUwMEZCPjxVMDA2RT4iCislIGZvcm1hdDogJUEgJWQgJUIgJVkgJVQgJVoKK2RfdF9mbXQgICI8VTAwMjU+PFUwMDQxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDQyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUgZm9ybWF0OiAlZC8lbS8lWQorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA1OT4iCit0X2ZtdCAgICAgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICAgICAiIjsiIgordF9mbXRfYW1wbSAgIiIKKyUgZm9ybWF0OiAlQSAlZCAlQiAlWQorZGF0ZV9mbXQgICI8VTAwMjU+PFUwMDQxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDQyPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCit5ZXNzdHIJIjxVMDA2NT48VTAwNzI+PFUwMEVBPiIKK25vc3RyCSI8VTAwNkU+PFUwMEUyPiIKKyUgZUVkRHlZCit5ZXNleHByCSI8VTAwNUU+PFUwMDVCPjxVMDA2NT48VTAwNDU+PFUwMDY0PjxVMDA0ND48VTAwNzk+PFUwMDU5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKKyUgbk4KK25vZXhwcgkiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19QQVBFUgorY29weSAidHJfVFIiCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCitjb3B5ICJ0cl9UUiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgInRyX1RSIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKKyUgZm9ybWF0OiAlZCV0JWcldCVtJXQlZgorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorJSBUT0RPCislIFNhef1uCituYW1lX2dlbiAgICAiPFUwMDUzPjxVMDA2MT48VTAwNzk+PFUwMTMxPjxVMDA2RT4iCislICJNLiIKK25hbWVfbXIgICAgICI8VTAwNEQ+PFUwMDJFPiIKKyUgIkpuZSIKK25hbWVfbXJzICAgICI8VTAwNEE+PFUwMDZFPjxVMDA2NT4iCituYW1lX21zICAgICAiPFUwMDRBPjxVMDA2RT48VTAwNjU+IgorJSAiS2MsayIKK25hbWVfbWlzcyAgICI8VTAwNEI+PFUwMEU3PjxVMDA2Qj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorJSBUT0RPCitjb3VudHJ5X25hbWUJIjxVMDA1ND48VTAwNzU+PFUwMDcyPjxVMDA2Qj48VTAwNjU+PFUwMDc5PiIKK2NvdW50cnlfcG9zdCAiVFIiCitjb3VudHJ5X2FiMiAgIlRSIgorY291bnRyeV9hYjMgICJUVVIiCitjb3VudHJ5X251bSAgNzkyCitjb3VudHJ5X2lzYm4gOTc1Citjb3VudHJ5X2NhciAiVFIiCislICJrdXJkaSIKK2xhbmdfbmFtZSAgICI8VTAwNkI+PFUwMDc1PjxVMDA3Mj48VTAwNjQ+PFUwMDY5PiIKK2xhbmdfYWIgICAgICJrdSIKK2xhbmdfdGVybSAgICJrdXIiCitsYW5nX2xpYiAgICAia3VyIgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2t3X0dCIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMva3dfR0IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkN2M4MwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2t3X0dCCkBAIC0wLDAgKzEsMTY1IEBACitlc2NhcGVfY2hhciAgLworY29tbWVudF9jaGFyICAlCisKKyUgQ29ybmlzaCBsYW5ndWFnZSBsb2NhbGUgZm9yIEJyaXRhaW4KKyUgV0FSTklORzogVU5PRkZJQ0lBTDsgRVhQRVJJTUVOVEFMLiBDSEVDSyBXSVRIIEtlbGQgU2ltb25zZW4KKyUgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIG9mZmljYWwgcmVsZWFzZS4KKworJSBDb3JuaXNoIGxhbmd1YWdlIGxvY2FsZSBmb3IgQnJpdGFpbgorJSBTb3VyY2U6IEFsYXN0YWlyIE1jS2luc3RyeQorJSBBZGRyZXNzOiBDcm/tIEzhciwgQmFsbGluYWhhbGxhLCBNYWlnaCBDdWlsaW5uLAorJSAgICBDby4gR2FpbGxpbWgsIElyZWxhbmQKKyUgQ29udGFjdDogQWxhc3RhaXIgTWNLaW5zdHJ5CislIEVtYWlsOiBtY2tpbnN0cnlAY29tcHV0ZXIub3JnCislIFRlbDogKzM1MyA5MSA1NTYxNzcKKyUgTGFuZ3VhZ2U6IGtsCislIFRlcnJpdG9yeTogR0IKKyUgUmV2aXNpb246IDEuMAorJSBEYXRlOiAxOTk5LTA4LTA5CislIFVzZXJzOiBnZW5lcmFsCislIFJlcGVydG9pcmVtYXA6IG1uZW1vbmljLGRzCislIENoYXJzZXQ6IElTTy04ODU5LTEKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkNvcm5pc2ggbG9jYWxlIGZvciBCcml0YWluIgorc291cmNlICAgICAiQWxhc3RhaXIgTWNLaW5zdHJ5IgorYWRkcmVzcyAgICAiQ3Jv7SBM4XIsIEJhbGxpbmFoYWxsYSwgTWFpZ2ggQ3VpbGlubiwsIENvLiBHYWlsbGltaCwgSXJlbGFuZCIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJDb3JuaXNoIgordGVycml0b3J5ICAiQnJpdGFpbiIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjkiCislCitjYXRlZ29yeSAgImt3X0dCOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImt3X0dCOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImt3X0dCOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAia3dfR0I6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJrd19HQjoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImt3X0dCOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImt3X0dCOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImt3X0dCOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImt3X0dCOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAia3dfR0I6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJrd19HQjoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgICAgICI8VTAwNDc+PFUwMDQyPjxVMDA1MD48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICAgIjxVMDBBMz4iCittb25fZGVjaW1hbF9wb2ludCAgICAgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgICAwCituX2NzX3ByZWNlZGVzICAgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgICAwCitwX3NpZ25fcG9zbiAgICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgICAxCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludCAgICAgICAgICAgIjxVMDAyRT4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICAiPFUwMDJDPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgIDM7MworRU5EIExDX05VTUVSSUMKKworTENfVElNRQorYWJkYXkgICAgICAgIjxVMDA1Mz48VTAwNzU+PFUwMDZDPiI7IjxVMDA0Qz48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNzQ+PFUwMDY4PiI7IjxVMDA0RD48VTAwNjg+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA1OT48VTAwNkY+PFUwMDc3PiI7IjxVMDA0Nz48VTAwNzc+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDY0PiIKK2RheSAgICAgICAgICI8VTAwNDQ+PFUwMDY1PjxVMDAyMD48VTAwNTM+PFUwMDc1PjxVMDA2Qz4iOy8KKyAgICAgICAgICAgICI8VTAwNDQ+PFUwMDY1PjxVMDAyMD48VTAwNEM+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgICAgICI8VTAwNDQ+PFUwMDY1PjxVMDAyMD48VTAwNEQ+PFUwMDY1PjxVMDA3Mj48VTAwNzQ+PFUwMDY4PiI7LworICAgICAgICAgICAgIjxVMDA0ND48VTAwNjU+PFUwMDIwPjxVMDA0RD48VTAwNjU+PFUwMDcyPjxVMDA2OD48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA0ND48VTAwNjU+PFUwMDIwPjxVMDA1OT48VTAwNkY+PFUwMDc3PiI7LworICAgICAgICAgICAgIjxVMDA0ND48VTAwNjU+PFUwMDIwPjxVMDA0Nz48VTAwNzc+PFUwMDY1PjxVMDA2RT48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA0ND48VTAwNjU+PFUwMDIwPjxVMDA1Mz48VTAwNjE+PFUwMDY0PjxVMDA2Rj48VTAwNzI+PFUwMDZFPiIKK2FibW9uICAgICAgICI8VTAwNDc+PFUwMDY1PjxVMDA2RT4iOyI8VTAwNTc+PFUwMDY4PjxVMDA2NT4+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2NT48VTAwNzI+IjsiPFUwMDQ1PjxVMDA2Mj48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2NT4iOyI8VTAwNDU+PFUwMDc2PjxVMDA2RT4iOy8KKyAgICAgICAgICAgICI8VTAwNDc+PFUwMDZGPjxVMDA3Mj4iOyI8VTAwNDU+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICAgICAgICI8VTAwNDc+PFUwMDc3PjxVMDA2RT4iOyI8VTAwNDg+PFUwMDY1PjxVMDA2ND4iOy8KKyAgICAgICAgICAgICI8VTAwNDQ+PFUwMDc1PiI7IjxVMDA0Qj48VTAwNjU+PFUwMDc2PiIKK21vbiAgICAgICAgICI8VTAwNEQ+PFUwMDc5PjxVMDA3Mz48VTAwMjA+PFUwMDQ3PjxVMDA2NT48VTAwNkU+PFUwMDc2PjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA3OT48VTAwNzM+PFUwMDIwPjxVMDA1Nz48VTAwNjg+PFUwMDY1PjxVMDA3Nj48VTAwNzI+PFUwMDY1PjxVMDA2Qz4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDc5PjxVMDA3Mz48VTAwMjA+PFUwMDREPjxVMDA2NT48VTAwNzI+PFUwMDc0PjxVMDA2OD4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDc5PjxVMDA3Mz48VTAwMjA+PFUwMDQ1PjxVMDA2Mj48VTAwNzI+PFUwMDY1PjxVMDA2Qz4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDc5PjxVMDA3Mz48VTAwMjA+PFUwMDREPjxVMDA2NT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDc5PjxVMDA3Mz48VTAwMjA+PFUwMDQ1PjxVMDA3Nj48VTAwNjE+PFUwMDZFPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNzk+PFUwMDczPjxVMDAyMD48VTAwNDc+PFUwMDZGPjxVMDA3Mj48VTAwNzQ+PFUwMDY4PjxVMDA2NT48VTAwNzI+PFUwMDY1PjxVMDA2RT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDc5PjxVMDA2NT48VTAwMjA+PFUwMDQ1PjxVMDA3Mz48VTAwNzQ+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA3OT48VTAwNzM+PFUwMDIwPjxVMDA0Nz48VTAwNzc+PFUwMDc5PjxVMDA2RT48VTAwNjc+PFUwMDYxPjxVMDA2Qz48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA3OT48VTAwNzM+PFUwMDIwPjxVMDA0OD48VTAwNjU+PFUwMDY0PjxVMDA3Mj48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA3OT48VTAwNzM+PFUwMDIwPjxVMDA0ND48VTAwNzU+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA3OT48VTAwNzM+PFUwMDIwPjxVMDA0Qj48VTAwNjU+PFUwMDc2PjxVMDA2MT48VTAwNzI+PFUwMDY0PjxVMDA2OD48VTAwNzU+IgorZF90X2ZtdCAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNzk+IgordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAgICAgIiI7IiIKK3RfZm10X2FtcG0gICIiCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDY1PjxVMDA0NT48VTAwNzk+PFUwMDU5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCislIEZJWE1FCitoZWlnaHQgICAyOTcKKyUgRklYTUUKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzQ+PFUwMDM0PiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKKyUgRklYTUUKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgIjxVMDA0Nz48VTAwNDI+IgorY291bnRyeV9hYjMgIjxVMDA0Nz48VTAwNDI+PFUwMDUyPiIKK2NvdW50cnlfbnVtIDgyNgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2t5X0tHIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMva3lfS0cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY1NmQxYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2t5X0tHCkBAIC0wLDAgKzEsMjA3IEBACitlc2NhcGVfY2hhciAvCitjb21tZW50X2NoYXIgJQorJSBjaGFyc2V0ICJVVEYtOCIKKworJQorJQorJSBuZWVkZWQgZXh0cmEgY2hhcnM6IDxVMDRBMj4sIDxVMDRBMz4sIDxVMDRFOD4sIDxVMDRFOT4sIDxVMDRBRT4sIDxVMDRBRj4KKyUKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAiS3lyZ3l6IExhbmd1YWdlIExvY2FsZSBmb3IgS3lyZ3l6c3RhbiIKK3NvdXJjZSAiVGltdXIgSmFtYWtlZXYiCithZGRyZXNzICIiCitjb250YWN0ICJQYWJsbyBTYXJhdHhhZ2EsIFRpbXVyIEphbWFrZWV2IgorZW1haWwgInNydHhnQG1hbmRyYWtlc29mdC5jb20sIHp0aW11ckBtYWlsLnJ1IgordGVsICIiCitmYXggIiIKK2xhbmd1YWdlICJLeXJneXoiCit0ZXJyaXRvcnkgIkt5cmd5enN0YW4iCityZXZpc2lvbiAiMC4yIgorZGF0ZSAiMjAwNC0xMC0xNCIKKyUKK2NhdGVnb3J5ICAia3lfS0c6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAia3lfS0c6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAia3lfS0c6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJreV9LRzoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImt5X0tHOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAia3lfS0c6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAia3lfS0c6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAia3lfS0c6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAia3lfS0c6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJreV9LRzoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImt5X0tHOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ09MTEFURQorCislIFRoZSBreXJneXogY3lyaWxsaWMgYWxwaGFiZXQgaXM6CislIGE9LCBiPSwgdj0sIGc9LCBkPSwgZT0sIGlvLCB6JSwgej0sIGk9LCBqPSwgaz0sIGw9LCBtPSwgbj0sIG4sPSwKKyUgbz0sIG8tPSwgcD0sIHI9LCBzPSwgdD0sIHU9LCB1Jz0sIGY9LCBoPSwgYz0sIGMlLCBzJSwgc2MsID0nLCB5PSwgJScsCislIGplLCBqdSwgamEKKyUKKyUgc3BlY2lhbCBsZXR0ZXJzIGFyZToKKyUgbiw9OiA8VTA0QTI+LCA8VTA0QTM+CislIG8tPTogPFUwNEU4PiwgPFUwNEU5PgorJSB1Jz06IDxVMDRBRT4sIDxVMDRBRj4KKworY29weSAiPFUwMDY5PjxVMDA3Mz48VTAwNkY+PFUwMDMxPjxVMDAzND48VTAwMzY+PFUwMDM1PjxVMDAzMT48VTAwNUY+PFUwMDc0PjxVMDAzMT4iCisKK2NvbGxhdGluZy1zeW1ib2wgPG8tPT4KK2NvbGxhdGluZy1zeW1ib2wgPHUnPT4KK2NvbGxhdGluZy1zeW1ib2wgPG4sPT4KKworcmVvcmRlci1hZnRlciA8Q1lSLUVOPgorPG4sPT4KK3Jlb3JkZXItYWZ0ZXIgPENZUi1PPgorPG8tPT4KK3Jlb3JkZXItYWZ0ZXIgPENZUi1PVUJSRT4KKzx1Jz0+CisKK3Jlb3JkZXItYWZ0ZXIgPFUwNDNEPgorPFUwNEEzPiA8biw9Pjs8UENMPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwNDFEPgorPFUwNEEyPiA8biw9Pjs8UENMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTA0M0U+Cis8VTA0RTk+IDxvLT0+OzxQQ0w+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTA0MUU+Cis8VTA0RTg+IDxvLT0+OzxQQ0w+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDQ0Mz4KKzxVMDRBRj4gPHUnPT47PFBDTD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDQyMz4KKzxVMDRBRT4gPHUnPT47PFBDTD47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItZW5kCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKK0xDX01FU1NBR0VTCislIEZJWEVEIEFORCBDSEVDS0VEIGJ5IFRpbXVyIDIwMDQvMTAvMTQKK3llc3N0ciAgIjxVMDQxRT48VTA0M0U+PFUwNDMxPjxVMDQzMD4iCitub3N0ciAgICI8VTA0MTY+PFUwNDNFPjxVMDQzQT4iCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDQxRT48VTA0M0U+PFUwMDU5PjxVMDA3OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDQxNj48VTA0MzY+PFUwMDRFPjxVMDA2RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKKyUgRklYRUQgQU5EIENIRUNLRUQgYnkgVGltdXIgMjAwNC8xMC8xNAoraW50X2N1cnJfc3ltYm9sICAgICAgICAgICAiPFUwMDRCPjxVMDA0Nz48VTAwNTM+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICAgIjxVMDQ0MT48VTA0M0U+PFUwNDNDPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgICAgICI8VTAwMjA+IgorbW9uX2dyb3VwaW5nICAgICAgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgICAgICAwCitwX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAgICAgMAorbl9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAgICAgMQorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgICAgIjxVMDAyQz4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICAgICI8VTAwMjA+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAgICAzOzMKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2RheSAgICAgIjxVMDQzNj48VTA0MzU+PFUwNDNBPjxVMDQ0OD48VTA0MzU+PFUwNDNDPjxVMDQzMT48VTA0Mzg+IjsvCisgICAgICAgICI8VTA0MzQ+PFUwNEFGPjxVMDQzOT48VTA0NDg+PFUwNEU5PjxVMDQzQz48VTA0MzE+PFUwNEFGPiI7LworICAgICAgICAiPFUwNDQ4PjxVMDQzNT48VTA0Mzk+PFUwNDQ4PjxVMDQzNT48VTA0M0M+PFUwNDMxPjxVMDQzOD4iOy8KKyAgICAgICAgIjxVMDQ0OD48VTA0MzA+PFUwNDQwPjxVMDQ0OD48VTA0MzU+PFUwNDNDPjxVMDQzMT48VTA0Mzg+IjsvCisgICAgICAgICI8VTA0MzE+PFUwNDM1PjxVMDQzOT48VTA0NDg+PFUwNDM1PjxVMDQzQz48VTA0MzE+PFUwNDM4PiI7LworICAgICAgICAiPFUwNDM2PjxVMDQ0Mz48VTA0M0M+PFUwNDMwPiI7LworICAgICAgICAiPFUwNDM4PjxVMDQ0OD48VTA0MzU+PFUwNDNDPjxVMDQzMT48VTA0Mzg+IgorJSBGSVhFRCBieSBUaW11ciAyMDA0LzEwLzEyCithYmRheSAgICI8VTA0MzY+PFUwNDNBPiI7LworICAgICAgICAiPFUwNDM0PjxVMDQ0OD4iOy8KKyAgICAgICAgIjxVMDQ0OD48VTA0MzU+IjsvCisgICAgICAgICI8VTA0NDg+PFUwNDMwPiI7LworICAgICAgICAiPFUwNDMxPjxVMDQ0OD4iOy8KKyAgICAgICAgIjxVMDQzNj48VTA0M0M+IjsvCisgICAgICAgICI8VTA0Mzg+PFUwNDQ4PiIKK21vbiAgICAgIjxVMDQ0Rj48VTA0M0Q+PFUwNDMyPjxVMDQzMD48VTA0NDA+PFUwNDRDPiI7LworICAgICAgICAiPFUwNDQ0PjxVMDQzNT48VTA0MzI+PFUwNDQwPjxVMDQzMD48VTA0M0I+PFUwNDRDPiI7LworICAgICAgICAiPFUwNDNDPjxVMDQzMD48VTA0NDA+PFUwNDQyPiI7LworICAgICAgICAiPFUwNDMwPjxVMDQzRj48VTA0NDA+PFUwNDM1PjxVMDQzQj48VTA0NEM+IjsvCisgICAgICAgICI8VTA0M0M+PFUwNDMwPjxVMDQzOT4iOy8KKyAgICAgICAgIjxVMDQzOD48VTA0NEU+PFUwNDNEPjxVMDQ0Qz4iOy8KKyAgICAgICAgIjxVMDQzOD48VTA0NEU+PFUwNDNCPjxVMDQ0Qz4iOy8KKyAgICAgICAgIjxVMDQzMD48VTA0MzI+PFUwNDMzPjxVMDQ0Mz48VTA0NDE+PFUwNDQyPiI7LworICAgICAgICAiPFUwNDQxPjxVMDQzNT48VTA0M0Q+PFUwNDQyPjxVMDQ0Rj48VTA0MzE+PFUwNDQwPjxVMDQ0Qz4iOy8KKyAgICAgICAgIjxVMDQzRT48VTA0M0E+PFUwNDQyPjxVMDQ0Rj48VTA0MzE+PFUwNDQwPjxVMDQ0Qz4iOy8KKyAgICAgICAgIjxVMDQzRD48VTA0M0U+PFUwNDRGPjxVMDQzMT48VTA0NDA+PFUwNDRDPiI7LworICAgICAgICAiPFUwNDM0PjxVMDQzNT48VTA0M0E+PFUwNDMwPjxVMDQzMT48VTA0NDA+PFUwNDRDPiIKK2FibW9uICAgIjxVMDQ0Rj48VTA0M0Q+PFUwNDMyPiI7LworICAgICAgICAiPFUwNDQ0PjxVMDQzNT48VTA0MzI+IjsvCisgICAgICAgICI8VTA0M0M+PFUwNDMwPjxVMDQ0MD4iOy8KKyAgICAgICAgIjxVMDQzMD48VTA0M0Y+PFUwNDQwPiI7LworICAgICAgICAiPFUwNDNDPjxVMDQzMD48VTA0Mzk+IjsvCisgICAgICAgICI8VTA0Mzg+PFUwNDRFPjxVMDQzRD4iOy8KKyAgICAgICAgIjxVMDQzOD48VTA0NEU+PFUwNDNCPiI7LworICAgICAgICAiPFUwNDMwPjxVMDQzMj48VTA0MzM+IjsvCisgICAgICAgICI8VTA0NDE+PFUwNDM1PjxVMDQzRD4iOy8KKyAgICAgICAgIjxVMDQzRT48VTA0M0E+PFUwNDQyPiI7LworICAgICAgICAiPFUwNDNEPjxVMDQzRT48VTA0NEY+IjsvCisgICAgICAgICI8VTA0MzQ+PFUwNDM1PjxVMDQzQT4iCislIENIRUNLRUQgQU5EIEZJWEVEIGJ5IFRpbXVyCitkX3RfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPi8KKzxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PiIKKyUgJWQuJW0uJVkgRklYRUQgYnkgVGltdXIgMjAwNC4xMC4xMQorZF9mbXQgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjU+PFUwMDZEPjxVMDAyRT48VTAwMjU+PFUwMDU5PiIKKyUgJVQKK3RfZm10ICAgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICAgIiI7IiIKK3RfZm10X2FtcG0gIiIKKyUgJWQtJUIsICVZLTxVMDQzNj4sICVBCislZGF0ZV9mbXQgICAgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJEPjxVMDAyNT48VTAwNDI+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDU5Pi8KKyU8VTAwMkQ+PFUwNDM2PjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA0MT4iCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDJEPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDQzNj4vCis8VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+IgorRU5EIExDX1RJTUUKKworTENfUEFQRVIKK2hlaWdodCAgIDI5Nword2lkdGggICAgMjEwCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzOT48VTAwMzk+PFUwMDM2PiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgIjxVMDA0Qj48VTAwNTk+IgorY291bnRyeV9hYjMgIjxVMDA0Qj48VTAwNTk+PFUwMDUyPiIKKyVjb3VudHJ5X251bSA2NDMKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9sZ19VRyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2xnX1VHCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYjlhNzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9sZ19VRwpAQCAtMCwwICsxLDMzMyBAQAorZXNjYXBlX2NoYXIgIC8KK2NvbW1lbnRfY2hhciAgJQorCislIEx1Z2FuZGEgbGFuZ3VhZ2UgbG9jYWxlIGZvciBVZ2FuZGEKKyUgU291cmNlOiBBa2FkZW1lIHlhIEx1Z2FuZGEKKyUgQWRkcmVzczogYy9vIFAuTy4gQm94IDUxOTAgS2FtcGFsYSwKKyUgICAgICAgICAgVWdhbmRhCislIENvbnRhY3Q6IEtpeml0byBCaXJhYndhCislIEVtYWlsOiBrb21weXV0YUBraXppdG8udWtsaW51eC5uZXQKKyUgVGVsOiArNDEgLSAoMCkxNzcyIDcyNDMyNQorJSBGYXg6CislIExhbmd1YWdlOiBsZworJSBUZXJyaXRvcnk6IFVHCislIFJldmlzaW9uOiAxLjAKKyUgRGF0ZTogMjAwMS0xMS0wNAorJSBVc2VyczogZ2VuZXJhbAorJSBSZXBlcnRvaXJlbWFwOiBtbmVtb25pYy5kcworJSBDaGFyc2V0OiBJU08tODg1OS0xMAorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiTHVnYW5kYSBsb2NhbGUgZm9yIFVnYW5kYSIKK3NvdXJjZSAgICAgIkFrYWRlbWUgeWEgTHVnYW5kYSIKK2FkZHJlc3MgICAgImMvbyBQLk8uIEJveCA1MTkwIEthbXBhbGEsIFVnYW5kYSIKK2NvbnRhY3QgICAgIktpeml0byBCaXJhYndhIgorZW1haWwgICAgICAia29tcHl1dGFAa2l6aXRvLnVrbGludXgubmV0IgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiTHVnYW5kYSIKK3RlcnJpdG9yeSAgIlVnYW5kYSIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDEtMTEtMDQiCislCitjYXRlZ29yeSAgImxnX1VHOjIwMDEiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImxnX1VHOjIwMDEiO0xDX0NUWVBFCitjYXRlZ29yeSAgImxnX1VHOjIwMDEiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAibGdfVUc6MjAwMSI7TENfVElNRQorY2F0ZWdvcnkgICJsZ19VRzoyMDAxIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImxnX1VHOjIwMDEiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImxnX1VHOjIwMDEiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImxnX1VHOjIwMDEiO0xDX1BBUEVSCitjYXRlZ29yeSAgImxnX1VHOjIwMDEiO0xDX05BTUUKK2NhdGVnb3J5ICAibGdfVUc6MjAwMSI7TENfQUREUkVTUworY2F0ZWdvcnkgICJsZ19VRzoyMDAxIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCislIFVzZSB0aGUgY2hhcmFjdGVycyBkZXNjcmliZWQgaW4gdGhlIGNoYXJtYXAgZmlsZSAiaTE4bi50Z3oiCislCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxIGkuZS4KKyUgdXNlIHRoZSBydWxlcyB0aGVyZSB3aGVuIG1ha2luZyBvcmRlcmVkIGxpc3RzIG9mIHdvcmRzLgorJQorY29weSAiaXNvMTQ2NTFfdDEiCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgICAgIjxVMDA1NT48VTAwNDc+PFUwMDU4PjxVMDAyMD4iCislIEludGVybmF0aW9uYWwgY3VycmVuY3kgc3ltYm9sICJVR1giCislCitjdXJyZW5jeV9zeW1ib2wgICAgICAgICAiPFUwMDJGPjxVMDAyRD4iCislIExvY2FsIGN1cnJlbmN5IHN5bWJvbCAiLy0iCislCittb25fZGVjaW1hbF9wb2ludCAgICAgICAiPFUwMDJFPiIKKyUgU2lnbiBmb3IgYSBtb25ldGFyeSBkZWNpbWFsIHBvaW50ICIuIgorJQorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgIjxVMDAyQz4iCislIFNpZ24gZm9yIHRob3VzYW5kcyBzZXBhcmF0b3IgaW4gbW9uZXkgIiwiCislCittb25fZ3JvdXBpbmcgICAgICAgICAgICAzOzMKKyUgRm9yIG1vbmV5IHRoZXJlIGFyZSB0aHJlZSBudW1iZXJzIHRvIHRoZSBiZXR3ZWVuIGVhY2gKKyUgcGFpciBvZiB0aG91c2FuZHMgc2VwYXJhdG9ycywgZS5nLiAiMTIzLDQ1Niw3ODYiCislCitwb3NpdGl2ZV9zaWduICAgICAgICAgICAiIgorJSBObyBzaWduIGluIGZyb250IG9mIHBvc2l0aXZlIG1vbmV5IHZhbHVlcy4KKyUKK25lZ2F0aXZlX3NpZ24gICAgICAgICAgICI8VTAwMkQ+IgorJSAiLSIgaW4gZnJvbnQgb2YgbmVnYXRpdmUgbW9uZXkgdmFsdWVzLgorJQoraW50X2ZyYWNfZGlnaXRzICAgICAgICAgMgorJSBBbGxvdyAyIGRlY2ltYWwgcGxhY2VzIGZvciBpbnRlcm5hdGlvbmFsCislIHJlcHJlc2VudGF0aW9uIG9mIGZyYWN0aW9uYWwgbW9uZXkgdmFsdWVzLgorJQorZnJhY19kaWdpdHMgICAgICAgICAgICAgMgorJSBBbGxvdyAyIGRlY2ltYWwgcGxhY2VzIGZvciBsb2NhbAorJSByZXByZXNlbnRhdGlvbiBvZiBmcmFjdGlvbmFsIG1vbmV5IHZhbHVlcy4KKyUKK3BfY3NfcHJlY2VkZXMgICAgICAgICAgIDAKKyUgVGhlICIwIiBtZWFucyB0aGF0IHRoZSAiLy0iIGNvbWVzIGFmdGVyIHBvc2l0aXZlIG1vbmV0YXJ5CislIHZhbHVlcy4KKyUKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgIDAKKyUgVGhlICIwIiBtZWFucyB0aGF0IHRoZXJlIGlzIG5vIHNwYWNlIGJldHdlZW4gdGhlIG51bWJlcnMgYW5kCislIHRoZSAiLy0iIHNpZ24gZm9yIHBvc2l0aXZlIG1vbmV0YXJ5IHZhbHVlcy4KKyUKK25fY3NfcHJlY2VkZXMgICAgICAgICAgIDAKKyUgVGhlICIwIiBtZWFucyB0aGF0IHRoZSAiLy0iIGNvbWVzIGFmdGVyIG5lZ2F0aXZlIG1vbmV0YXJ5CislIHZhbHVlcy4KKyUKK25fc2VwX2J5X3NwYWNlICAgICAgICAgIDAKKyUgVGhlICIwIiBtZWFucyB0aGF0IHRoZXJlIGlzIG5vIHNwYWNlIGJldHdlZW4gdGhlIG51bWJlcnMgYW5kCislIHRoZSAiLy0iIHNpZ24gZm9yIG5lZ2F0aXZlIG1vbmV0YXJ5IHZhbHVlcy4KKyUKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgIDEKKyUgVGhlICIxIiBtZWFucyB0aGF0LCBpZiBhICIrIiBzaWduIGlzIHByZXNlbnQgaW4gYSBtb25ldGFyeQorJSB2YWx1ZSxpdCBjb21lcyBiZWZvcmUgdGhlICUgIlVTaCIsICIvLSIsIGFuZCB0aGUgbnVtYmVycy4KKyUKK25fc2lnbl9wb3NuICAgICAgICAgICAgIDEKKyUgVGhlICIxIiBtZWFucyB0aGF0LCBpZiBhICItIiBzaWduIGlzIHByZXNlbnQgaW4gYSBtb25ldGFyeQorJSB2YWx1ZSxpdCBjb21lcyBiZWZvcmUgdGhlICUgIlVTaCIsICIvLSIsIGFuZCB0aGUgbnVtYmVycy4KKyUKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAgICAiPFUwMDJFPiIKKyUgRm9yIG5vcm1hbCBudW1iZXJzLCB0aGUgZGVjb21hbCBwb2ludCBpcyBhICIuIgorJQordGhvdXNhbmRzX3NlcCAgICAgICAgICAgIjxVMDAyQz4iCislIEZvciBub3JtYWwgbnVtYmVycywgdGhlIHRob3VzYW5kcyBzZXBhcmF0b3IgaXMgYSAiLCIKKyUKK2dyb3VwaW5nICAgICAgICAgICAgICAgIDM7MworJSBGb3Igbm9ybWFsIG51bWJlcnMsIHRoZXJlIGFyZSB0aHJlZSBudW1iZXJzIGJldHdlZW4gZWFjaAorJSBwYWlyIG9mIHRob3VzYW5kcyBzZXBhcmF0b3JzLCBlLmcuIDEyMyw0NTYsNzg5CislCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNjI+IjsiPFUwMDQyPjxVMDA2MT48VTAwNkM+IjsvCisgICAgICAgICAgICAiPFUwMDRDPjxVMDA3Nz48VTAwMzI+IjsiPFUwMDRDPjxVMDA3Nz48VTAwMzM+IjsvCisgICAgICAgICAgICAiPFUwMDRDPjxVMDA3Nz48VTAwMzQ+IjsiPFUwMDRDPjxVMDA3Nz48VTAwMzU+IjsvCisgICAgICAgICAgICAiPFUwMDRDPjxVMDA3Nz48VTAwMzY+IgorJSBUaGUgYWJicmV2aWF0aW9ucyBmb3IgdGhlIHdlZWsgZGF5cyAtIFNhYiwgQmFsLCBMdzIsIEx3MywgTHc0LAorJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTHc1LCBMdzYKKyUKK2RheSAgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA2Mj48VTAwNjk+PFUwMDY5PjxVMDA3ND48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDQyPjxVMDA2MT48VTAwNkM+PFUwMDYxPjxVMDA3QT48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDRDPjxVMDA3Nz48VTAwNjE+PFUwMDZCPjxVMDA3NT48VTAwNjI+PFUwMDY5PjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDRDPjxVMDA3Nz48VTAwNjE+PFUwMDZCPjxVMDA3NT48VTAwNzM+PFUwMDYxPjxVMDA3ND48VTAwNzU+IjsvCisgICAgICAgICAgICAiPFUwMDRDPjxVMDA3Nz48VTAwNjE+PFUwMDZCPjxVMDA3NT48VTAwNkU+PFUwMDYxPiI7LworICAgICAgICAgICAgIjxVMDA0Qz48VTAwNzc+PFUwMDYxPjxVMDA2Qj48VTAwNzU+PFUwMDc0PjxVMDA2MT48VTAwNjE+PFUwMDZFPjxVMDA2Rj4iOy8KKyAgICAgICAgICAgICI8VTAwNEM+PFUwMDc3PjxVMDA2MT48VTAwNkQ+PFUwMDc1PjxVMDA2Qj48VTAwNjE+PFUwMDYxPjxVMDA2Nz48VTAwNjE+IgorJSBUaGUgZnVsbCBuYW1lcyBvZiB0aGUgd2VlayBkYXlzIC0gU2FiaWl0aSwgQmFsYXphLCBMd2FrdWJpcmksIEx3YWt1c2F0dSwgTHdha3VuYQorJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTHdha3V0YWFubywgTHdhbXVrYWFnYS4KKyUKK2FibW9uICAgICAgICI8VTAwNEE+PFUwMDYxPjxVMDA2RT4iOyI8VTAwNDY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNDE+PFUwMDcwPjxVMDA3NT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA2MT4iOyI8VTAwNEE+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNDE+PFUwMDY3PjxVMDA3NT4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA2Mj4iOyI8VTAwNEY+PFUwMDZCPjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNEU+PFUwMDZGPjxVMDA3Nj4iOyI8VTAwNDQ+PFUwMDY1PjxVMDA3Mz4iCislIFRoZSBhYmJyZXZpYXRpb25zIGZvciB0aGUgbW9udGhzIC0gSmFuLCBGZWIsIE1hciwgQXB1LCBNYWEsCislICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSnV1LCBKdWwsIEFndSwgU2ViLCBPa2ksCislICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm92LCBEZXMKKyUKK21vbiAgICAgICAgICI8VTAwNEE+PFUwMDYxPjxVMDA2RT48VTAwNzc+PFUwMDYxPjxVMDA2Qz48VTAwNjk+PFUwMDc5PjxVMDA2Rj4iOy8KKyAgICAgICAgICAgICI8VTAwNDY+PFUwMDY1PjxVMDA2Mj48VTAwNzc+PFUwMDYxPjxVMDA2Qz48VTAwNjk+PFUwMDc5PjxVMDA2Rj4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Mj48VTAwNjk+PFUwMDczPjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNDE+PFUwMDcwPjxVMDA3NT48VTAwNkM+PFUwMDY5PiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDYxPjxVMDA3OT48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNzU+PFUwMDZFPjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2Qz48VTAwNjE+PFUwMDYxPjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNDE+PFUwMDY3PjxVMDA3NT48VTAwNzM+PFUwMDY5PjxVMDA3ND48VTAwNkY+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNjI+PFUwMDc1PjxVMDA3ND48VTAwNzQ+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDYxPiI7LworICAgICAgICAgICAgIjxVMDA0Rj48VTAwNkI+PFUwMDY5PjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA2Mj48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDYxPiI7LworICAgICAgICAgICAgIjxVMDA0ND48VTAwNjU+PFUwMDczPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2MT4iCislIFRoZSBmdWxsIG5hbWVzIG9mIHRoZSBtb250aHMgLSBKYW53YWxpeW8sIEZlYndhbGl5bywgTWFyaXNpLCBBcHVsaSwgTWFheWksCislICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSnV1bmksIEp1bGFheWksIEFndXNpdG8sIFNlYnV0dGVtYmEsCislICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2tpdG9iYmEsIE5vdmVtYmEsIERlc2VtYmEKKyUKK2RfdF9mbXQgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUgQWJyZXZpYXRlZCBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uIHRvIGJlIHJlZmVyZW5jZWQgYnkgdGhlICIlYyIgZmllbGQgZGVzY3JpcHRvciAtCislICIlYSIgKHdlZWtkYXkgbmFtZSksCislICIlZCIgKGRheSBvZiBtb250aCBhcyBhIGRlY2ltYWwgbnVtYmVyKSwKKyUgIiViIiAobW9udGggbmFtZSksCislICIlWSIgKHllYXIgd2l0aCBjZW50dXJ5IGFzIGEgZGVjaW1hbCBudW1iZXIpLAorJSAiJVQiICgyNC1ob3VyIGNsb2NrIHRpbWUgaW4gZm9ybWF0IEhIOk1NOlNTKSwKKyUgIiVaIiAoVGltZSB6b25lIG5hbWUpCislCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDc5PiIKKyUgRGF0ZSByZXByZXNlbnRhdGlvbiB0byBiZSByZWZlcmVuY2VkIGJ5IHRoZSAiJXgiIGZpZWxkICUgZGVzY3JpcHRvciAtCislICIlZC8lbS8leSIsIGRheS9tb250aC95ZWFyIGFzIGRlY2ltYWwgbnVtYmVycyAoMDEvMDEvMDAgdG8gMzEvMTIvOTkpLgorJQordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNTQ+IgorJSBUaW1lIHJlcHJlc2VudGF0aW9uIHRvIGJlIHJlZmVyZW5jZWQgYnkgdGhlICIlWCIgZmllbGQgZGVzY3JpcHRvciAtCislICIlVCIgKDI0LWhvdXIgY2xvY2sgdGltZSBpbiBmb3JtYXQgSEg6TU06U1MpCislCithbV9wbSAgICAgICAiIjsiIgorJSBEZWZpbmUgcmVwcmVzZW50YXRpb24gb2YgYW50ZSBtZXJpZGllbSBhbmQgcG9zdCBtZXJpZGllbSBzdHJpbmdzIC0KKyUgVGhlICIicyBtZWFuICdkZWZhdWx0IHRvICJBTSIgYW5kICJQTSIuCislCit0X2ZtdF9hbXBtICAiIgorJSBEZWZpbmUgdGltZSByZXByZXNlbnRhdGlvbiBpbiAxMi1ob3VyIGZvcm1hdCB3aXRoICJhbV9wbSIsIHRvIGJlIHJlZmVyZW5jZWQgYnkgdGhlICIlciIKKyUgZmllbGQgZGVzY3JpcHRvciAtCislIFRoZSAiIiBtZWFucyB0aGF0IHRoaXMgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuCislCitkYXRlX2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCislIERhdGUgcmVwcmVzZW50YXRpb24gbm90IGRlc2NyaWJlZCBpbiBJU08vSUVDIDE0NjUyLiBDb21lcyBvdXQgYXMgLQorJSAiJWEgJWIgJWUgJUg6JU06JVMgJVogJVkiIHdoaWNoIGlzCislIGFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZSwKKyUgZGF5IG9mIG1vbnRoIGFzIGEgZGVjaW1hbCBudW1iZXIgKDAxIHRvIDMxKSwKKyUgZGF5IG9mIG1vbnRoIGFzIGEgZGVjaW1hbCBudW1iZXIgd2l0aCBsZWFkaW5nIHNwYWNlICgxIHRvIDMxKSwKKyUgaG91ciAoMjQtaG91ciBjbG9jaykgYXMgYSBkZWNpbWFsIG51bWJlciAoMDAgdG8gMjMpLAorJSBtaW51dGUgYXMgYSBkZWNpbWFsIG51bWJlciAoMDAgdG8gNTkpLAorJSBzZWNvbmRzIGFzIGEgZGVjaW1hbCBudW1iZXIgKDAwIHRvIDU5KSwKKyUgdGltZS16b25lIG5hbWUsCislIHllYXIgd2l0aCBjZW50dXJ5IGFzIGEgZGVjaW1hbCBudW1iZXIsZS5nLiAyMDAxLgorJQorRU5EIExDX1RJTUUKKworTENfTUVTU0FHRVMKK3llc2V4cHIgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA3OT48VTAwNTk+PFUwMDVEPiIKKyUgVGhlIGFmZmlybWF0aXZlIHJlc3BvbnNlIC0KKyUgIl5beVldIgorJQorbm9leHByICAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+IgorJSBUaGUgbmVnYXRpdmUgcmVzcG9uc2UgLQorJSAiXltuTl0iCislCitFTkQgTENfTUVTU0FHRVMKKworTENfUEFQRVIKK2hlaWdodCAgIDI5Nword2lkdGggICAgMjEwCislIERlZmF1bHQgcGFwZXIgc2l6ZSAtIEE0CislCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgorJSBSZXByZXNlbnRhdGlvbiBvZiB0ZWxlcGhvbmUgbnVtYmVyIGZvciBpbnRlcm5hdGlvbmFsIHVzZSAtCislICIrJWMgJWEgJWwiLCB3aGljaCBpcworJSAiK2NvdW50cnkgY29kZSIsCislICJhcmVhIGNvZGUgd2l0aG91dCB0aGUgcHJlZml4IChvZnRlbiAwKSIsCislICJsb2NhbCBudW1iZXIiLgorJQordGVsX2RvbV9mbXQgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNkM+IgorJSBSZXByZXNudGF0aW9uIG9mIHRlbGVwaG9uZSBudW1iZXIgZm9yIGRvbWVzdGljIHVzZSAtCislICIlYSAlbCIsIHdoaWNoIGlzCislICJhcmVhIGNvZGUsIGxvY2FsIG51bWJlciIuCislCitpbnRfc2VsZWN0ICAgICAiPFUwMDMwPjxVMDAzMD4iCislIERpZ2l0cyB1c2VkIGluIFVnYW5kYSB0byBkaWFsIGludGVybmF0aW9uYWwgLSAiMDAiLgorJQoraW50X3ByZWZpeCAgICAgIjxVMDAzMj48VTAwMzU+PFUwMDM2PiIKKyUgSW50ZXJuYXRpb25hbCBwcmVmaXggZm9yIFVnYW5kYSAtICIyNTYiCislCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorJSBGb3JtYXQgZm9yIGFkZHJlc3NpbmcgYSBwZXJzb24uCislICIlZCV0JWcldCVtJXQlZiIKKyUgIlNhbHV0YXRpb24iLAorJSAiRW1wdHkgc3RyaW5nLCBvciA8U3BhY2U+IiwKKyUgIkZpcnN0IGdpdmVuIG5hbWUiLAorJSAiRW1wdHkgc3RyaW5nLCBvciA8U3BhY2U+IiwKKyUgIk1pZGRsZSBuYW1lcyIsCislICJFbXB0eSBzdHJpbmcsIG9yIDxTcGFjZT4iLAorJSAiQ2xhbiBuYW1lcyIKKyUKK25hbWVfbWlzcyAgICI8VTAwNEQ+PFUwMDZDPjxVMDA2MT4iCislIFNhbHV0YXRpb24gZm9yIHVubWFycmllZCBmZW1hbGVzIC0gIk1sYSIKKyUKK25hbWVfbXIgICAgICI8VTAwNEQ+PFUwMDc3PiIKKyUgU2FsdXRhdGlvbiBmb3IgbWFsZXMgLSAiTXciCislCituYW1lX21ycyAgICAiPFUwMDREPjxVMDA2Qz48VTAwNjE+IgorJSBTYWx1dGF0aW9uIGZvciBtYXJyaWVkIGZlbWFsZXMgLSAiTWxhIgorJQorbmFtZV9tcyAgICAgIjxVMDA0RD48VTAwNkM+PFUwMDYxPiIKKyUgU2FsdXRhdGlvbiB2YWxpZCBmb3IgYWxsIGZlbWFsZXMgLSAiTWxhIgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworY291bnRyeV9uYW1lICI8VTAwNTk+PFUwMDc1PjxVMDA2Nz48VTAwNjE+PFUwMDZFPjxVMDA2ND48VTAwNjE+IgorJSBDb3VudHJ5IG5hbWUgaW4gTHVnYW5kYSAtICJZdWdhbmRhIgorJQorY291bnRyeV9wb3N0ICI8VTAwNTU+PFUwMDQ3PiIKKyUgQWJicmV2aWF0ZWQgY291bnRyeSBwb3N0YWwgbmFtZSAtICJVRyIKKyUKK2NvdW50cnlfYWIyICI8VTAwNTU+PFUwMDQ3PiIKKyUgSVNPIDMxNjYgdHdvIGxldHRlciBjb3VudHJ5IGFiYnJldmlhdGlvbiAtICJVRyIKKyUKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCislIFJlcHJlc2VudGF0aW9uIG9mIHBvc3RhbCBhZGRyZXNzZXMgKG1pbnVzIHRoZSBhZGRyZXNzZWUncyBuYW1lKSBpbiBVZ2FuZGEuCislICIlZiVOJWElTiVkJU4lYiVOJXMgJWggJWUgJXIlTiV6ICVUJU4lYyVOIiwgd2hpY2ggZ2l2ZXMgLQorJSAiZmlybSBuYW1lIiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgIkMvTyBhZGRyZXNzIiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgImRlcGFydG1lbnQgbmFtZSIsCislICJCdWlsZGluZyBuYW1lIiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgInN0cmVldCBvciBibG9jayBuYW1lIiwKKyUgInNwYWNlIiwKKyUgImhvdXNlIG51bWJlciBvciBkZXNpZ25hdGlvbiIsCislICJzcGFjZSIsCislICJmbG9vciBudW1iZXIiLAorJSAic3BhY2UiLAorJSAicm9vbSBudW1iZXIsIGRvb3IgZGVzaWduYXRpb24iLAorJSAiZW5kIG9mIGxpbmUiLAorJSAicG9zdGFsIGNvZGUiLAorJSAic3BhY2UiLAorJSAidG93biwgY2l0eSIsCislICJlbmQgb2YgbGluZSIsCislICJjb3VudHJ5IGRlc2lnbmF0aW9uIGZvciB0aGUgPGNvdW50cnlfcG9zdD4ga2V5d29yZCIsCislICJlbmQgb2YgbGluZQorJQorY291bnRyeV9hYjMgIjxVMDA1NT48VTAwNDc+PFUwMDQxPiIKK2NvdW50cnlfbnVtIDgwMAorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2xpX0JFIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvbGlfQkUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVhNmJkYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL2xpX0JFCkBAIC0wLDAgKzEsMTMyIEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMKKworTENfSURFTlRJRklDQVRJT04gCit0aXRsZSAiTGltYnVyZ2lzaCBMYW5ndWFnZSBMb2NhbGUgZm9yIEJlbGdpdW0iCitzb3VyY2UgImluZm9ybWF0aW9uIGZyb20gS2VubmV0aCBDaHJpc3RpYW5zZW4iCithZGRyZXNzICIiCitjb250YWN0ICJLZW5uZXRoIENocmlzdGlhbnNlbiwgUGFibG8gU2FyYXR4YWdhIgorZW1haWwgImtlbm5ldGhAZ251Lm9yZywgcGFibG9AbWFuZHJpdmEuY29tIgordGVsICIiCislIEZheAorbGFuZ3VhZ2UgImxpIgordGVycml0b3J5ICJCRSIKK3JldmlzaW9uICIwLjEiCitkYXRlICIyMDAzLTExLTMwIgorCitjYXRlZ29yeSBpMThuOjIwMDA7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19DT0xMQVRFCitjYXRlZ29yeSBpMThuOjIwMDA7TENfQ1RZUEUKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19NRVNTQUdFUworY2F0ZWdvcnkgaTE4bjoyMDAwO0xDX01PTkVUQVJZCitjYXRlZ29yeSBpMThuOjIwMDA7TENfTlVNRVJJQworY2F0ZWdvcnkgaTE4bjoyMDAwO0xDX1RJTUUKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19QQVBFUgorY2F0ZWdvcnkgaTE4bjoyMDAwO0xDX05BTUUKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19NRUFTVVJFTUVOVAorY2F0ZWdvcnkgaTE4bjoyMDAwO0xDX1RFTEVQSE9ORQorY2F0ZWdvcnkgaTE4bjoyMDAwO0xDX0FERFJFU1MKKworJSBJU08vSUVDIDE0NjUyOiBDb252ZXJ0ZWQgY29tbWVudHMgdG8gTENfSURFTlRJRklDQVRJT04KKyUgIGFkZGVkIExDX1BBUEVSLCBMQ19NRUFTVVJFTUVOVCwgTENfVEVMRVBIT05FLCBMQ19BRERSRVNTCislICBjb3BpZWQgTENfTU9ORVRBUlksIExDX05VTUVSSUMgZnJvbSBkZV9ERSBmb3Igc2ltcGxpY2l0eQorJSAtLSBtY2tpbnN0cnlAY29tcHV0ZXIub3JnLCAyMDAwLTA3LTAzCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorJUZJWE1FIGNvdW50cnlfbmFtZSAiQmVsZ2llIgorY291bnRyeV9wb3N0ICAiPFUwMDQyPiIKK2NvdW50cnlfYWIyICAgIjxVMDA0Mj48VTAwNDU+IgorY291bnRyeV9hYjMgICAiPFUwMDQyPjxVMDA0NT48VTAwNEM+IgorY291bnRyeV9jYXIgICAiPFUwMDQyPiIKK2NvdW50cnlfbnVtIDU2CislRklYTUUgY291bnRyeV9pc2JuICIyIgorbGFuZ19uYW1lICI8VTAwNEM+PFUwMDY5PjxVMDA2RD48VTAwNjI+PFUwMDc1PjxVMDA3Mj48VTAwNjc+PFUwMDczPiIKK2xhbmdfYWIgIjxVMDA2Qz48VTAwNjk+IgorbGFuZ190ZXJtICI8VTAwNkM+PFUwMDY5PjxVMDA2RD4iCitsYW5nX2xpYiAiPFUwMDZDPjxVMDA2OT48VTAwNkQ+IgorRU5EIExDX0FERFJFU1MKKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAiZW5fREsiCitFTkQgTENfQ1RZUEUKKworTENfTUVTU0FHRVMKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDZBPjxVMDA0QT48VTAwNzk+PFUwMDU5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2NvcHkgIm5sX0JFIgorRU5EIExDX01PTkVUQVJZCisKK0xDX1BBUEVSCitjb3B5ICJubF9CRSIKK0VORCBMQ19QQVBFUgorCitMQ19OQU1FCitjb3B5ICJubF9CRSIKK0VORCBMQ19OQU1FCisKK0xDX1RFTEVQSE9ORQorY29weSAibmxfQkUiCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJubF9CRSIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OVU1FUklDCitjb3B5ICJubF9CRSIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA3QT48VTAwRjM+PFUwMDZFPiI7IjxVMDA2RD48VTAwNjE+PFUwMDZGPiI7LworCSI8VTAwNjQ+PFUwMDYxPjxVMDA2NT4iOyI8VTAwNjc+PFUwMDZGPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwRjM+PFUwMDZFPiI7IjxVMDA3Nj48VTAwNzI+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDdBPjxVMDA5MT48VTAwNkY+IgorZGF5ICAgICAiPFUwMDdBPjxVMDBGMz48VTAwNkU+PFUwMDY0PjxVMDA2OT48VTAwNjc+IjsvCisJIjxVMDA2RD48VTAwNjE+PFUwMDZGPjxVMDA2RT48VTAwNjQ+PFUwMDY5PjxVMDA2Nz4iOy8KKwkiPFUwMDY0PjxVMDA2MT48VTAwNjU+PFUwMDZFPjxVMDA3Mz48VTAwNjQ+PFUwMDY5PjxVMDA2Nz4iOy8KKwkiPFUwMDY3PjxVMDA2Rj48VTAwNkY+PFUwMDZFPjxVMDA3Mz48VTAwNjQ+PFUwMDY5PjxVMDA2Nz4iOy8KKwkiPFUwMDY0PjxVMDBGMz48VTAwNkU+PFUwMDY0PjxVMDA2NT48VTAwNzI+PFUwMDY0PjxVMDA2OT48VTAwNjc+IjsvCisJIjxVMDA3Nj48VTAwNzI+PFUwMDY5PjxVMDA2NT48VTAwNjQ+PFUwMDY5PjxVMDA2Nz4iOy8KKwkiPFUwMDdBPjxVMDA2MT48VTAwNkY+PFUwMDc0PjxVMDA2NT48VTAwNzI+PFUwMDY0PjxVMDA2OT48VTAwNjc+IgorYWJtb24gICAiPFUwMDZBPjxVMDA2MT48VTAwNkU+IjsiPFUwMDY2PjxVMDA2OT48VTAwNjI+IjsvCisJIjxVMDA2RD48VTAwNjk+PFUwMDY1PiI7IjxVMDA2NT48VTAwNzA+PFUwMDcyPiI7LworCSI8VTAwNkQ+PFUwMDY1PjxVMDA2OT4iOyI8VTAwNkE+PFUwMDc1PjxVMDA2RT4iOy8KKwkiPFUwMDZBPjxVMDA3NT48VTAwNkM+IjsiPFUwMDYxPjxVMDA3NT48VTAwNjc+IjsvCisJIjxVMDA3Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA2Rj48VTAwNkI+PFUwMDc0PiI7LworCSI8VTAwNkU+PFUwMDZGPjxVMDA3Nj4iOyI8VTAwNjQ+PFUwMDY1PjxVMDA3Mz4iCittb24gICAgICI8VTAwNkE+PFUwMDYxPjxVMDA2RT48VTAwNkU+PFUwMDY1PjxVMDA3Nz48VTAwNjE+PFUwMDcyPjxVMDA2OT48VTAwNjU+IjsvCisJIjxVMDA2Nj48VTAwNjk+PFUwMDYyPjxVMDA2Mj48VTAwNjU+PFUwMDcyPjxVMDA3Nz48VTAwNjE+PFUwMDcyPjxVMDA2OT48VTAwNjU+IjsvCisJIjxVMDA2RD48VTAwNjk+PFUwMDY1PjxVMDA3Mj48VTAwNzQ+IjsvCisJIjxVMDA2NT48VTAwNzA+PFUwMDcyPjxVMDBFOD48VTAwNkM+IjsvCisJIjxVMDA2RD48VTAwNjU+PFUwMDY5PjxVMDA2QT4iOy8KKwkiPFUwMDZBPjxVMDA3NT48VTAwNkU+PFUwMDY5PjxVMDA2NT4iOy8KKwkiPFUwMDZBPjxVMDA3NT48VTAwNkM+PFUwMDY5PjxVMDA2NT4iOy8KKwkiPFUwMDYxPjxVMDA3NT48VTAwNjc+PFUwMDc1PjxVMDA3Mz48VTAwNzQ+PFUwMDc1PjxVMDA3Mz4iOy8KKwkiPFUwMDczPjxVMDA2NT48VTAwNzA+PFUwMDc0PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisJIjxVMDA2Rj48VTAwNkI+PFUwMDc0PjxVMDA2Rj48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKwkiPFUwMDZFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKwkiPFUwMDY0PjxVMDA2NT48VTAwNzM+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iCitkX3RfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjU+PFUwMDZEPjxVMDAyRT48VTAwMjU+PFUwMDU5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAiIjsiIgordF9mbXRfYW1wbSAiIgord2Vlawk3OzE5OTcxMjAxOzQKK2ZpcnN0X3dlZWtkYXkJMQorZmlyc3Rfd29ya2RheQkxCitFTkQgTENfVElNRQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvbGlfTkwgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9saV9OTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWM1MDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvbGlfTkwKQEAgLTAsMCArMSwxMzMgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcworCitMQ19JREVOVElGSUNBVElPTiAKK3RpdGxlICJMaW1idXJnaXNoIExhbmd1YWdlIExvY2FsZSBmb3IgdGhlIE5ldGhlcmxhbmRzIgorc291cmNlICJpbmZvcm1hdGlvbiBmcm9tIEtlbm5ldGggQ2hyaXN0aWFuc2VuIgorYWRkcmVzcyAiIgorY29udGFjdCAiS2VubmV0aCBDaHJpc3RpYW5zZW4sIFBhYmxvIFNhcmF0eGFnYSIKK2VtYWlsICJrZW5uZXRoQGdudS5vcmcsIHBhYmxvQG1hbmRyaXZhLmNvbSIKK3RlbCAiIgorJSBGYXgKK2xhbmd1YWdlICJsaSIKK3RlcnJpdG9yeSAiTkwiCityZXZpc2lvbiAiMC4xIgorZGF0ZSAiMjAwMy0xMS0zMCIKKworY2F0ZWdvcnkgaTE4bjoyMDAwO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSBpMThuOjIwMDA7TENfQ09MTEFURQorY2F0ZWdvcnkgaTE4bjoyMDAwO0xDX0NUWVBFCitjYXRlZ29yeSBpMThuOjIwMDA7TENfTUVTU0FHRVMKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19NT05FVEFSWQorY2F0ZWdvcnkgaTE4bjoyMDAwO0xDX05VTUVSSUMKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19USU1FCitjYXRlZ29yeSBpMThuOjIwMDA7TENfUEFQRVIKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19OQU1FCitjYXRlZ29yeSBpMThuOjIwMDA7TENfTUVBU1VSRU1FTlQKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19URUxFUEhPTkUKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19BRERSRVNTCisKKyUgSVNPL0lFQyAxNDY1MjogQ29udmVydGVkIGNvbW1lbnRzIHRvIExDX0lERU5USUZJQ0FUSU9OCislICBhZGRlZCBMQ19QQVBFUiwgTENfTUVBU1VSRU1FTlQsIExDX1RFTEVQSE9ORSwgTENfQUREUkVTUworJSAgY29waWVkIExDX01PTkVUQVJZLCBMQ19OVU1FUklDIGZyb20gZGVfREUgZm9yIHNpbXBsaWNpdHkKKyUgLS0gbWNraW5zdHJ5QGNvbXB1dGVyLm9yZywgMjAwMC0wNy0wMworCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKKyVGSVhNRSBjb3VudHJ5X25hbWUgIk5lZGVybGFuZCIKK2NvdW50cnlfcG9zdCAgIjxVMDA0RT48VTAwNEM+IgorY291bnRyeV9hYjIgICAiPFUwMDRFPjxVMDA0Qz4iCitjb3VudHJ5X2FiMyAgICI8VTAwNEU+PFUwMDRDPjxVMDA0ND4iCitjb3VudHJ5X2NhciAgICI8VTAwNEU+PFUwMDRDPiIKK2NvdW50cnlfbnVtIDUyOAorJUZJWE1FIGNvdW50cnlfaXNibiAiMiIKK2xhbmdfbmFtZSAiPFUwMDRDPjxVMDA2OT48VTAwNkQ+PFUwMDYyPjxVMDA3NT48VTAwNzI+PFUwMDY3PjxVMDA3Mz4iCitsYW5nX2FiICI8VTAwNkM+PFUwMDY5PiIKK2xhbmdfdGVybSAiPFUwMDZDPjxVMDA2OT48VTAwNkQ+IgorbGFuZ19saWIgIjxVMDA2Qz48VTAwNjk+PFUwMDZEPiIKK0VORCBMQ19BRERSRVNTCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImVuX0RLIgorRU5EIExDX0NUWVBFCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA2QT48VTAwNEE+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitjb3B5ICJubF9OTCIKK0VORCBMQ19NT05FVEFSWQorCitMQ19QQVBFUgorY29weSAibmxfTkwiCitFTkQgTENfUEFQRVIKKworTENfTkFNRQorY29weSAibmxfTkwiCitFTkQgTENfTkFNRQorCitMQ19URUxFUEhPTkUKK2NvcHkgIm5sX05MIgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorY29weSAibmxfTkwiCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTlVNRVJJQworY29weSAibmxfTkwiCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCisKK2FiZGF5ICAgIjxVMDA3QT48VTAwRjM+PFUwMDZFPiI7IjxVMDA2RD48VTAwNjE+PFUwMDZGPiI7LworCSI8VTAwNjQ+PFUwMDYxPjxVMDA2NT4iOyI8VTAwNjc+PFUwMDZGPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwRjM+PFUwMDZFPiI7IjxVMDA3Nj48VTAwNzI+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDdBPjxVMDA5MT48VTAwNkY+IgorZGF5ICAgICAiPFUwMDdBPjxVMDBGMz48VTAwNkU+PFUwMDY0PjxVMDA2OT48VTAwNjc+IjsvCisJIjxVMDA2RD48VTAwNjE+PFUwMDZGPjxVMDA2RT48VTAwNjQ+PFUwMDY5PjxVMDA2Nz4iOy8KKwkiPFUwMDY0PjxVMDA2MT48VTAwNjU+PFUwMDZFPjxVMDA3Mz48VTAwNjQ+PFUwMDY5PjxVMDA2Nz4iOy8KKwkiPFUwMDY3PjxVMDA2Rj48VTAwNkY+PFUwMDZFPjxVMDA3Mz48VTAwNjQ+PFUwMDY5PjxVMDA2Nz4iOy8KKwkiPFUwMDY0PjxVMDBGMz48VTAwNkU+PFUwMDY0PjxVMDA2NT48VTAwNzI+PFUwMDY0PjxVMDA2OT48VTAwNjc+IjsvCisJIjxVMDA3Nj48VTAwNzI+PFUwMDY5PjxVMDA2NT48VTAwNjQ+PFUwMDY5PjxVMDA2Nz4iOy8KKwkiPFUwMDdBPjxVMDA2MT48VTAwNkY+PFUwMDc0PjxVMDA2NT48VTAwNzI+PFUwMDY0PjxVMDA2OT48VTAwNjc+IgorYWJtb24gICAiPFUwMDZBPjxVMDA2MT48VTAwNkU+IjsiPFUwMDY2PjxVMDA2OT48VTAwNjI+IjsvCisJIjxVMDA2RD48VTAwNjk+PFUwMDY1PiI7IjxVMDA2NT48VTAwNzA+PFUwMDcyPiI7LworCSI8VTAwNkQ+PFUwMDY1PjxVMDA2OT4iOyI8VTAwNkE+PFUwMDc1PjxVMDA2RT4iOy8KKwkiPFUwMDZBPjxVMDA3NT48VTAwNkM+IjsiPFUwMDYxPjxVMDA3NT48VTAwNjc+IjsvCisJIjxVMDA3Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA2Rj48VTAwNkI+PFUwMDc0PiI7LworCSI8VTAwNkU+PFUwMDZGPjxVMDA3Nj4iOyI8VTAwNjQ+PFUwMDY1PjxVMDA3Mz4iCittb24gICAgICI8VTAwNkE+PFUwMDYxPjxVMDA2RT48VTAwNkU+PFUwMDY1PjxVMDA3Nz48VTAwNjE+PFUwMDcyPjxVMDA2OT48VTAwNjU+IjsvCisJIjxVMDA2Nj48VTAwNjk+PFUwMDYyPjxVMDA2Mj48VTAwNjU+PFUwMDcyPjxVMDA3Nz48VTAwNjE+PFUwMDcyPjxVMDA2OT48VTAwNjU+IjsvCisJIjxVMDA2RD48VTAwNjk+PFUwMDY1PjxVMDA3Mj48VTAwNzQ+IjsvCisJIjxVMDA2NT48VTAwNzA+PFUwMDcyPjxVMDBFOD48VTAwNkM+IjsvCisJIjxVMDA2RD48VTAwNjU+PFUwMDY5PjxVMDA2QT4iOy8KKwkiPFUwMDZBPjxVMDA3NT48VTAwNkU+PFUwMDY5PjxVMDA2NT4iOy8KKwkiPFUwMDZBPjxVMDA3NT48VTAwNkM+PFUwMDY5PjxVMDA2NT4iOy8KKwkiPFUwMDYxPjxVMDA3NT48VTAwNjc+PFUwMDc1PjxVMDA3Mz48VTAwNzQ+PFUwMDc1PjxVMDA3Mz4iOy8KKwkiPFUwMDczPjxVMDA2NT48VTAwNzA+PFUwMDc0PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisJIjxVMDA2Rj48VTAwNkI+PFUwMDc0PjxVMDA2Rj48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKwkiPFUwMDZFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKwkiPFUwMDY0PjxVMDA2NT48VTAwNzM+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iCitkX3RfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjU+PFUwMDZEPjxVMDAyRT48VTAwMjU+PFUwMDU5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAiIjsiIgordF9mbXRfYW1wbSAiIgord2Vlawk3OzE5OTcxMjAxOzQKK2ZpcnN0X3dlZWtkYXkJMQorZmlyc3Rfd29ya2RheQkxCitFTkQgTENfVElNRQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvbG9fTEEgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9sb19MQQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWFiM2YzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvbG9fTEEKQEAgLTAsMCArMSw3ODMgQEAKK2VzY2FwZV9jaGFyIC8KK2NvbW1lbnRfY2hhciAlCisKKyUKKyUgTGFvIExhbnVhZ2UgTG9jYWxlIGZvciBMYW9zCislCislIE5hbWU6ICAgICAgICAgbG9fTEEKKyUgQXV0aG9yOiAgICAgICBBbm91c2FrIFNvdXBoYXZhbmgKKyUgQ29udGFjdDoKKyUgRS1tYWlsOiAgICAgICBBbm91c2FrQG11YW5nbGFvLmNvbQorJSBMYW5ndWFnZTogICAgIExhbworJSBUZXJyaXRvcnk6ICAgIExhb3MKKyUgQ2hhcnNldDogICAgICBVVEYtOAorJSBSZXZpc2lvbjogICAgIDEuMgorJSBEYXRlOiAgICAgICAgIDIwMDMtMTUtMDkKKyUKKworJQorJSBDb3B5cmlnaHQgKEMpIDIwMDIgQW5vdXNhayBTb3VwaGF2YW5oCisKKyUKKyUgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCislIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyUgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorJSB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyUgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCislIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CislCislIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCislIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorJQorJSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorJSBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyUgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyUgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyUgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCislIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorJSBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCislCislCislCislICBOb3RlOiBJIHdvdWxkIGxpa2UgdG8gZ2l2ZSBhIHNwZWNpYWwgdGhhbmsgdG8gTXIuIFBhYmxvIFNhbGF0eGFnYSBAIE1hbmRyYWtlICwgZW1haWwgInNydHhnQGNoYW5hZS5hbHBoYW5ldC5jaCIKKyUgICAgICAgICYgVGhlcHBpdGFrIEthcm9vbmJvb255YW5hbiwgZW1haWw6ICd0aGVwQGxpbnV4LnRoYWkubmV0JywgYWxsIGhhZCBndWlkZWQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkxhbyBsb2NhbGUgZm9yIExhb3MiCitzb3VyY2UgICAgICIiCithZGRyZXNzICAgICIiCitjb250YWN0ICAgICJBbm91c2FrIFNvdXBoYXZhbmggYXQ6IGFub3VzYWtAbXVhbmdsYW8uY29tIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkxhbyIKK3RlcnJpdG9yeSAgIkxhb3MiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAzLTQtMSIKKyUKK2NhdGVnb3J5ICAibG9fTEE6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAibG9fTEE6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAibG9fTEE6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJsb19MQToyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgImxvX0xBOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAibG9fTEE6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAibG9fTEE6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAibG9fTEE6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAibG9fTEE6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJsb19MQToyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImxvX0xBOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKKworJQorCitjb2xsYXRpbmctZWxlbWVudCA8a28tZT4gZnJvbSAiPFUwRUMwPjxVMEU4MT4iCitjb2xsYXRpbmctZWxlbWVudCA8a28tYWU+IGZyb20gIjxVMEVDMT48VTBFODE+IgorY29sbGF0aW5nLWVsZW1lbnQgPGtvLW8+IGZyb20gIjxVMEVDMj48VTBFODE+IgorY29sbGF0aW5nLWVsZW1lbnQgPGtvLWFpLW1haW11YW4+IGZyb20gIjxVMEVDMz48VTBFODE+IgorY29sbGF0aW5nLWVsZW1lbnQgPGtvLWFpLW1haW1hbGFpPiBmcm9tICI8VTBFQzQ+PFUwRTgxPiIKKworY29sbGF0aW5nLWVsZW1lbnQgPGtoby1zdW5nLWU+IGZyb20gIjxVMEVDMD48VTBFODI+IgorY29sbGF0aW5nLWVsZW1lbnQgPGtoby1zdW5nLWFlPiBmcm9tICI8VTBFQzE+PFUwRTgyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxraG8tc3VuZy1vPiBmcm9tICI8VTBFQzI+PFUwRTgyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxraG8tc3VuZy1haS1tYWltdWFuPiBmcm9tICI8VTBFQzM+PFUwRTgyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxraG8tc3VuZy1haS1tYWltYWxhaT4gZnJvbSAiPFUwRUM0PjxVMEU4Mj4iCisKK2NvbGxhdGluZy1lbGVtZW50IDxraG8tdGFtLWU+IGZyb20gIjxVMEVDMD48VTBFODQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPGtoby10YW0tYWU+IGZyb20gIjxVMEVDMT48VTBFODQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPGtoby10YW0tbz4gZnJvbSAiPFUwRUMyPjxVMEU4ND4iCitjb2xsYXRpbmctZWxlbWVudCA8a2hvLXRhbS1haS1tYWltdWFuPiBmcm9tICI8VTBFQzM+PFUwRTg0PiIKK2NvbGxhdGluZy1lbGVtZW50IDxraG8tdGFtLWFpLW1haW1hbGFpPiBmcm9tICI8VTBFQzQ+PFUwRTg0PiIKKworY29sbGF0aW5nLWVsZW1lbnQgPG5nby1lPiBmcm9tICI8VTBFQzA+PFUwRTg3PiIKK2NvbGxhdGluZy1lbGVtZW50IDxuZ28tYWU+IGZyb20gIjxVMEVDMT48VTBFODc+IgorY29sbGF0aW5nLWVsZW1lbnQgPG5nby1vPiBmcm9tICI8VTBFQzI+PFUwRTg3PiIKK2NvbGxhdGluZy1lbGVtZW50IDxuZ28tYWktbWFpbXVhbj4gZnJvbSAiPFUwRUMzPjxVMEU4Nz4iCitjb2xsYXRpbmctZWxlbWVudCA8bmdvLWFpLW1haW1hbGFpPiBmcm9tICI8VTBFQzQ+PFUwRTg3PiIKKworY29sbGF0aW5nLWVsZW1lbnQgPGNoby1lPiBmcm9tICI8VTBFQzA+PFUwRTg4PiIKK2NvbGxhdGluZy1lbGVtZW50IDxjaG8tYWU+IGZyb20gIjxVMEVDMT48VTBFODg+IgorY29sbGF0aW5nLWVsZW1lbnQgPGNoby1vPiBmcm9tICI8VTBFQzI+PFUwRTg4PiIKK2NvbGxhdGluZy1lbGVtZW50IDxjaG8tYWktbWFpbXVhbj4gZnJvbSAiPFUwRUMzPjxVMEU4OD4iCitjb2xsYXRpbmctZWxlbWVudCA8Y2hvLWFpLW1haW1hbGFpPiBmcm9tICI8VTBFQzQ+PFUwRTg4PiIKKworY29sbGF0aW5nLWVsZW1lbnQgPHhvLWU+IGZyb20gIjxVMEVDMD48VTBFOEE+IgorY29sbGF0aW5nLWVsZW1lbnQgPHhvLWFlPiBmcm9tICI8VTBFQzE+PFUwRThBPiIKK2NvbGxhdGluZy1lbGVtZW50IDx4by1vPiBmcm9tICI8VTBFQzI+PFUwRThBPiIKK2NvbGxhdGluZy1lbGVtZW50IDx4by1haS1tYWltdWFuPiBmcm9tICI8VTBFQzM+PFUwRThBPiIKK2NvbGxhdGluZy1lbGVtZW50IDx4by1haS1tYWltYWxhaT4gZnJvbSAiPFUwRUM0PjxVMEU4QT4iCisKK2NvbGxhdGluZy1lbGVtZW50IDxueW8tZT4gZnJvbSAiPFUwRUMwPjxVMEU4RD4iCitjb2xsYXRpbmctZWxlbWVudCA8bnlvLWFlPiBmcm9tICI8VTBFQzE+PFUwRThEPiIKK2NvbGxhdGluZy1lbGVtZW50IDxueW8tbz4gZnJvbSAiPFUwRUMyPjxVMEU4RD4iCitjb2xsYXRpbmctZWxlbWVudCA8bnlvLWFpLW1haW11YW4+IGZyb20gIjxVMEVDMz48VTBFOEQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPG55by1haS1tYWltYWxhaT4gZnJvbSAiPFUwRUM0PjxVMEU4RD4iCisKK2NvbGxhdGluZy1lbGVtZW50IDxkby1lPiBmcm9tICI8VTBFQzA+PFUwRTk0PiIKK2NvbGxhdGluZy1lbGVtZW50IDxkby1hZT4gZnJvbSAiPFUwRUMxPjxVMEU5ND4iCitjb2xsYXRpbmctZWxlbWVudCA8ZG8tbz4gZnJvbSAiPFUwRUMyPjxVMEU5ND4iCitjb2xsYXRpbmctZWxlbWVudCA8ZG8tYWktbWFpbXVhbj4gZnJvbSAiPFUwRUMzPjxVMEU5ND4iCitjb2xsYXRpbmctZWxlbWVudCA8ZG8tYWktbWFpbWFsYWk+IGZyb20gIjxVMEVDND48VTBFOTQ+IgorCitjb2xsYXRpbmctZWxlbWVudCA8dG8tZT4gZnJvbSAiPFUwRUMwPjxVMEU5NT4iCitjb2xsYXRpbmctZWxlbWVudCA8dG8tYWU+IGZyb20gIjxVMEVDMT48VTBFOTU+IgorY29sbGF0aW5nLWVsZW1lbnQgPHRvLW8+IGZyb20gIjxVMEVDMj48VTBFOTU+IgorY29sbGF0aW5nLWVsZW1lbnQgPHRvLWFpLW1haW11YW4+IGZyb20gIjxVMEVDMz48VTBFOTU+IgorY29sbGF0aW5nLWVsZW1lbnQgPHRvLWFpLW1haW1hbGFpPiBmcm9tICI8VTBFQzQ+PFUwRTk1PiIKKworY29sbGF0aW5nLWVsZW1lbnQgPHRoby1zdW5nLWU+IGZyb20gIjxVMEVDMD48VTBFOTY+IgorY29sbGF0aW5nLWVsZW1lbnQgPHRoby1zdW5nLWFlPiBmcm9tICI8VTBFQzE+PFUwRTk2PiIKK2NvbGxhdGluZy1lbGVtZW50IDx0aG8tc3VuZy1vPiBmcm9tICI8VTBFQzI+PFUwRTk2PiIKK2NvbGxhdGluZy1lbGVtZW50IDx0aG8tc3VuZy1haS1tYWltdWFuPiBmcm9tICI8VTBFQzM+PFUwRTk2PiIKK2NvbGxhdGluZy1lbGVtZW50IDx0aG8tc3VuZy1haS1tYWltYWxhaT4gZnJvbSAiPFUwRUM0PjxVMEU5Nj4iCisKK2NvbGxhdGluZy1lbGVtZW50IDx0aG8tdGFtLWU+IGZyb20gIjxVMEVDMD48VTBFOTc+IgorY29sbGF0aW5nLWVsZW1lbnQgPHRoby10YW0tYWU+IGZyb20gIjxVMEVDMT48VTBFOTc+IgorY29sbGF0aW5nLWVsZW1lbnQgPHRoby10YW0tbz4gZnJvbSAiPFUwRUMyPjxVMEU5Nz4iCitjb2xsYXRpbmctZWxlbWVudCA8dGhvLXRhbS1haS1tYWltdWFuPiBmcm9tICI8VTBFQzM+PFUwRTk3PiIKK2NvbGxhdGluZy1lbGVtZW50IDx0aG8tdGFtLWFpLW1haW1hbGFpPiBmcm9tICI8VTBFQzQ+PFUwRTk3PiIKKworY29sbGF0aW5nLWVsZW1lbnQgPG5vLWU+IGZyb20gIjxVMEVDMD48VTBFOTk+IgorY29sbGF0aW5nLWVsZW1lbnQgPG5vLWFlPiBmcm9tICI8VTBFQzE+PFUwRTk5PiIKK2NvbGxhdGluZy1lbGVtZW50IDxuby1vPiBmcm9tICI8VTBFQzI+PFUwRTk5PiIKK2NvbGxhdGluZy1lbGVtZW50IDxuby1haS1tYWltdWFuPiBmcm9tICI8VTBFQzM+PFUwRTk5PiIKK2NvbGxhdGluZy1lbGVtZW50IDxuby1haS1tYWltYWxhaT4gZnJvbSAiPFUwRUM0PjxVMEU5OT4iCisKK2NvbGxhdGluZy1lbGVtZW50IDxiby1lPiBmcm9tICI8VTBFQzA+PFUwRTlBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxiby1hZT4gZnJvbSAiPFUwRUMxPjxVMEU5QT4iCitjb2xsYXRpbmctZWxlbWVudCA8Ym8tbz4gZnJvbSAiPFUwRUMyPjxVMEU5QT4iCitjb2xsYXRpbmctZWxlbWVudCA8Ym8tYWktbWFpbXVhbj4gZnJvbSAiPFUwRUMzPjxVMEU5QT4iCitjb2xsYXRpbmctZWxlbWVudCA8Ym8tYWktbWFpbWFsYWk+IGZyb20gIjxVMEVDND48VTBFOUE+IgorCitjb2xsYXRpbmctZWxlbWVudCA8cG8tZT4gZnJvbSAiPFUwRUMwPjxVMEU5Qj4iCitjb2xsYXRpbmctZWxlbWVudCA8cG8tYWU+IGZyb20gIjxVMEVDMT48VTBFOUI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHBvLW8+IGZyb20gIjxVMEVDMj48VTBFOUI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHBvLWFpLW1haW11YW4+IGZyb20gIjxVMEVDMz48VTBFOUI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHBvLWFpLW1haW1hbGFpPiBmcm9tICI8VTBFQzQ+PFUwRTlCPiIKKworY29sbGF0aW5nLWVsZW1lbnQgPHBoby1zdW5nLWU+IGZyb20gIjxVMEVDMD48VTBFOUM+IgorY29sbGF0aW5nLWVsZW1lbnQgPHBoby1zdW5nLWFlPiBmcm9tICI8VTBFQzE+PFUwRTlDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxwaG8tc3VuZy1vPiBmcm9tICI8VTBFQzI+PFUwRTlDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxwaG8tc3VuZy1haS1tYWltdWFuPiBmcm9tICI8VTBFQzM+PFUwRTlDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxwaG8tc3VuZy1haS1tYWltYWxhaT4gZnJvbSAiPFUwRUM0PjxVMEU5Qz4iCisKK2NvbGxhdGluZy1lbGVtZW50IDxmby10YW0tZT4gZnJvbSAiPFUwRUMwPjxVMEU5RD4iCitjb2xsYXRpbmctZWxlbWVudCA8Zm8tdGFtLWFlPiBmcm9tICI8VTBFQzE+PFUwRTlEPiIKK2NvbGxhdGluZy1lbGVtZW50IDxmby10YW0tbz4gZnJvbSAiPFUwRUMyPjxVMEU5RD4iCitjb2xsYXRpbmctZWxlbWVudCA8Zm8tdGFtLWFpLW1haW11YW4+IGZyb20gIjxVMEVDMz48VTBFOUQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPGZvLXRhbS1haS1tYWltYWxhaT4gZnJvbSAiPFUwRUM0PjxVMEU5RD4iCisKK2NvbGxhdGluZy1lbGVtZW50IDxwaG8tdGFtLWU+IGZyb20gIjxVMEVDMD48VTBFOUU+IgorY29sbGF0aW5nLWVsZW1lbnQgPHBoby10YW0tYWU+IGZyb20gIjxVMEVDMT48VTBFOUU+IgorY29sbGF0aW5nLWVsZW1lbnQgPHBoby10YW0tbz4gZnJvbSAiPFUwRUMyPjxVMEU5RT4iCitjb2xsYXRpbmctZWxlbWVudCA8cGhvLXRhbS1haS1tYWltdWFuPiBmcm9tICI8VTBFQzM+PFUwRTlFPiIKK2NvbGxhdGluZy1lbGVtZW50IDxwaG8tdGFtLWFpLW1haW1hbGFpPiBmcm9tICI8VTBFQzQ+PFUwRTlFPiIKKworY29sbGF0aW5nLWVsZW1lbnQgPGZvLXN1bmctZT4gZnJvbSAiPFUwRUMwPjxVMEU5Rj4iCitjb2xsYXRpbmctZWxlbWVudCA8Zm8tc3VuZy1hZT4gZnJvbSAiPFUwRUMxPjxVMEU5Rj4iCitjb2xsYXRpbmctZWxlbWVudCA8Zm8tc3VuZy1vPiBmcm9tICI8VTBFQzI+PFUwRTlGPiIKK2NvbGxhdGluZy1lbGVtZW50IDxmby1zdW5nLWFpLW1haW11YW4+IGZyb20gIjxVMEVDMz48VTBFOUY+IgorY29sbGF0aW5nLWVsZW1lbnQgPGZvLXN1bmctYWktbWFpbWFsYWk+IGZyb20gIjxVMEVDND48VTBFOUY+IgorCitjb2xsYXRpbmctZWxlbWVudCA8bW8tZT4gZnJvbSAiPFUwRUMwPjxVMEVBMT4iCitjb2xsYXRpbmctZWxlbWVudCA8bW8tYWU+IGZyb20gIjxVMEVDMT48VTBFQTE+IgorY29sbGF0aW5nLWVsZW1lbnQgPG1vLW8+IGZyb20gIjxVMEVDMj48VTBFQTE+IgorY29sbGF0aW5nLWVsZW1lbnQgPG1vLWFpLW1haW11YW4+IGZyb20gIjxVMEVDMz48VTBFQTE+IgorY29sbGF0aW5nLWVsZW1lbnQgPG1vLWFpLW1haW1hbGFpPiBmcm9tICI8VTBFQzQ+PFUwRUExPiIKKworY29sbGF0aW5nLWVsZW1lbnQgPHlvLWU+IGZyb20gIjxVMEVDMD48VTBFQTI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHlvLWFlPiBmcm9tICI8VTBFQzE+PFUwRUEyPiIKK2NvbGxhdGluZy1lbGVtZW50IDx5by1vPiBmcm9tICI8VTBFQzI+PFUwRUEyPiIKK2NvbGxhdGluZy1lbGVtZW50IDx5by1haS1tYWltdWFuPiBmcm9tICI8VTBFQzM+PFUwRUEyPiIKK2NvbGxhdGluZy1lbGVtZW50IDx5by1haS1tYWltYWxhaT4gZnJvbSAiPFUwRUM0PjxVMEVBMj4iCisKK2NvbGxhdGluZy1lbGVtZW50IDxyby1lPiBmcm9tICI8VTBFQzA+PFUwRUEzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyby1hZT4gZnJvbSAiPFUwRUMxPjxVMEVBMz4iCitjb2xsYXRpbmctZWxlbWVudCA8cm8tbz4gZnJvbSAiPFUwRUMyPjxVMEVBMz4iCitjb2xsYXRpbmctZWxlbWVudCA8cm8tYWktbWFpbXVhbj4gZnJvbSAiPFUwRUMzPjxVMEVBMz4iCitjb2xsYXRpbmctZWxlbWVudCA8cm8tYWktbWFpbWFsYWk+IGZyb20gIjxVMEVDND48VTBFQTM+IgorCitjb2xsYXRpbmctZWxlbWVudCA8bG8tZT4gZnJvbSAiPFUwRUMwPjxVMEVBNT4iCitjb2xsYXRpbmctZWxlbWVudCA8bG8tYWU+IGZyb20gIjxVMEVDMT48VTBFQTU+IgorY29sbGF0aW5nLWVsZW1lbnQgPGxvLW8+IGZyb20gIjxVMEVDMj48VTBFQTU+IgorY29sbGF0aW5nLWVsZW1lbnQgPGxvLWFpLW1haW11YW4+IGZyb20gIjxVMEVDMz48VTBFQTU+IgorY29sbGF0aW5nLWVsZW1lbnQgPGxvLWFpLW1haW1hbGFpPiBmcm9tICI8VTBFQzQ+PFUwRUE1PiIKKworY29sbGF0aW5nLWVsZW1lbnQgPHdvLWU+IGZyb20gIjxVMEVDMD48VTBFQTc+IgorY29sbGF0aW5nLWVsZW1lbnQgPHdvLWFlPiBmcm9tICI8VTBFQzE+PFUwRUE3PiIKK2NvbGxhdGluZy1lbGVtZW50IDx3by1vPiBmcm9tICI8VTBFQzI+PFUwRUE3PiIKK2NvbGxhdGluZy1lbGVtZW50IDx3by1haS1tYWltdWFuPiBmcm9tICI8VTBFQzM+PFUwRUE3PiIKK2NvbGxhdGluZy1lbGVtZW50IDx3by1haS1tYWltYWxhaT4gZnJvbSAiPFUwRUM0PjxVMEVBNz4iCisKK2NvbGxhdGluZy1lbGVtZW50IDxzby1lPiBmcm9tICI8VTBFQzA+PFUwRUFBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxzby1hZT4gZnJvbSAiPFUwRUMxPjxVMEVBQT4iCitjb2xsYXRpbmctZWxlbWVudCA8c28tbz4gZnJvbSAiPFUwRUMyPjxVMEVBQT4iCitjb2xsYXRpbmctZWxlbWVudCA8c28tYWktbWFpbXVhbj4gZnJvbSAiPFUwRUMzPjxVMEVBQT4iCitjb2xsYXRpbmctZWxlbWVudCA8c28tYWktbWFpbWFsYWk+IGZyb20gIjxVMEVDND48VTBFQUE+IgorCitjb2xsYXRpbmctZWxlbWVudCA8aG8tZT4gZnJvbSAiPFUwRUMwPjxVMEVBQj4iCitjb2xsYXRpbmctZWxlbWVudCA8aG8tYWU+IGZyb20gIjxVMEVDMT48VTBFQUI+IgorY29sbGF0aW5nLWVsZW1lbnQgPGhvLW8+IGZyb20gIjxVMEVDMj48VTBFQUI+IgorY29sbGF0aW5nLWVsZW1lbnQgPGhvLWFpLW1haW11YW4+IGZyb20gIjxVMEVDMz48VTBFQUI+IgorY29sbGF0aW5nLWVsZW1lbnQgPGhvLWFpLW1haW1hbGFpPiBmcm9tICI8VTBFQzQ+PFUwRUFCPiIKKworY29sbGF0aW5nLWVsZW1lbnQgPG8tZT4gZnJvbSAiPFUwRUMwPjxVMEVBRD4iCitjb2xsYXRpbmctZWxlbWVudCA8by1hZT4gZnJvbSAiPFUwRUMxPjxVMEVBRD4iCitjb2xsYXRpbmctZWxlbWVudCA8by1vPiBmcm9tICI8VTBFQzI+PFUwRUFEPiIKK2NvbGxhdGluZy1lbGVtZW50IDxvLWFpLW1haW11YW4+IGZyb20gIjxVMEVDMz48VTBFQUQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPG8tYWktbWFpbWFsYWk+IGZyb20gIjxVMEVDND48VTBFQUQ+IgorCitjb2xsYXRpbmctZWxlbWVudCA8aG9yLWU+IGZyb20gIjxVMEVDMD48VTBFQUU+IgorY29sbGF0aW5nLWVsZW1lbnQgPGhvci1hZT4gZnJvbSAiPFUwRUMxPjxVMEVBRT4iCitjb2xsYXRpbmctZWxlbWVudCA8aG9yLW8+IGZyb20gIjxVMEVDMj48VTBFQUU+IgorY29sbGF0aW5nLWVsZW1lbnQgPGhvci1haS1tYWltdWFuPiBmcm9tICI8VTBFQzM+PFUwRUFFPiIKK2NvbGxhdGluZy1lbGVtZW50IDxob3ItYWktbWFpbWFsYWk+IGZyb20gIjxVMEVDND48VTBFQUU+IgorCitjb2xsYXRpbmctZWxlbWVudCA8bmhvci1lPiBmcm9tICI8VTBFQzA+PFUwRURDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxuaG9yLWFlPiBmcm9tICI8VTBFQzE+PFUwRURDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxuaG9yLW8+IGZyb20gIjxVMEVDMj48VTBFREM+IgorY29sbGF0aW5nLWVsZW1lbnQgPG5ob3ItYWktbWFpbXVhbj4gZnJvbSAiPFUwRUMzPjxVMEVEQz4iCitjb2xsYXRpbmctZWxlbWVudCA8bmhvci1haS1tYWltYWxhaT4gZnJvbSAiPFUwRUM0PjxVMEVEQz4iCisKK2NvbGxhdGluZy1lbGVtZW50IDxtaG9yLWU+IGZyb20gIjxVMEVDMD48VTBFREQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPG1ob3ItYWU+IGZyb20gIjxVMEVDMT48VTBFREQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPG1ob3Itbz4gZnJvbSAiPFUwRUMyPjxVMEVERD4iCitjb2xsYXRpbmctZWxlbWVudCA8bWhvci1haS1tYWltdWFuPiBmcm9tICI8VTBFQzM+PFUwRUREPiIKK2NvbGxhdGluZy1lbGVtZW50IDxtaG9yLWFpLW1haW1hbGFpPiBmcm9tICI8VTBFQzQ+PFUwRUREPiIKKworCitjb2xsYXRpbmctc3ltYm9sICA8QkxBTks+Citjb2xsYXRpbmctc3ltYm9sICA8TGFvST4KK2NvbGxhdGluZy1zeW1ib2wgIDxDQVA+Citjb2xsYXRpbmctc3ltYm9sICA8TUlOPgorY29sbGF0aW5nLXN5bWJvbCAgPEVYVFJBPgorCitvcmRlcl9zdGFydCAgIGZvcndhcmQ7Zm9yd2FyZDtmb3J3YXJkO2ZvcndhcmQKKworJSBkZWZpbml0aW9ucyBvZiBleHRyYSBjb2xsYXRpbmcgc3ltYm9scworPEJMQU5LPgorPExhb0k+Cis8Q0FQPgorPE1JTj4KKzxFWFRSQT4KKworVU5ERUZJTkVEICAgICAgSUdOT1JFO0lHTk9SRTtJR05PUkU7SUdOT1JFCisKKyUgcHVuY3R1YXRpb24gbWFya3MsIG9yZGVyZWQgYWZ0ZXIgSVNPL0lFQyAxNDY1MQorPFUwMDIwPiAgICAgICAgSUdOT1JFO0lHTk9SRTs8VTAwMjA+O0lHTk9SRSAgICAgICAgICAlIFNQQUNFCis8VTAwNUY+ICAgSUdOT1JFO0lHTk9SRTs8VTAwNUY+O0lHTk9SRSAgICAgJSBMT1cgTElORQorPFUwMDJEPiAgICAgICBJR05PUkU7SUdOT1JFOzxVMDAyRD47SUdOT1JFICAgICAgICAgJSBIWVBIRU4tTUlOVVMKKzxVMDAyQz4gICAgICAgIElHTk9SRTtJR05PUkU7PFUwMDJDPjtJR05PUkUgICAgICAgICAgJSBDT01NQQorPFUwMDNCPiAgICBJR05PUkU7SUdOT1JFOzxVMDAzQj47SUdOT1JFICAgICAgJSBTRU1JQ09MT04KKzxVMDAzQT4gICAgICAgIElHTk9SRTtJR05PUkU7PFUwMDNBPjtJR05PUkUgICAgICAgICAgJSBDT0xPTgorPFUwMDIxPiBJR05PUkU7SUdOT1JFOzxVMDAyMT47SUdOT1JFICAlIEVYQ0xBTUFUSU9OIE1BUksKKzxVMDAzRj4gICAgSUdOT1JFO0lHTk9SRTs8VTAwM0Y+O0lHTk9SRSAgICAgJSBRVUVTVElPTiBNQVJLCis8VTAwMkY+ICAgICAgICBJR05PUkU7SUdOT1JFOzxVMDAyRj47SUdOT1JFICAgICAgICAgICUgU09MSURVUworPFUwMDJFPiAgICAgICBJR05PUkU7SUdOT1JFOzxVMDAyRT47SUdOT1JFICAgICAgICAgJSBGVUxMIFNUT1AKKzxVMEVBRj4gICAgICAgIElHTk9SRTtJR05PUkU7PFUwRUFGPjtJR05PUkUgICAgICAgICAgJSBMYW8gQ0hBUkFDVEVSIExhbyBFbGxpcHNlCis8VTAwNjA+IElHTk9SRTtJR05PUkU7PFUwMDYwPjtJR05PUkUgICAlIEdSQVZFIEFDQ0VOVAorPFUwMDVFPiAgIElHTk9SRTtJR05PUkU7PFUwMDVFPjtJR05PUkUgICAgICUgQ0lSQ1VNRkxFWAorPFUwMDdFPiAgICAgICAgSUdOT1JFO0lHTk9SRTs8VTAwN0U+O0lHTk9SRSAgICAgICAgICAlIFRJTERFCis8VTAwMjc+ICAgICAgICBJR05PUkU7SUdOT1JFOzxVMDAyNz47SUdOT1JFICAgICUgQVBPU1RST1BIRQorPFUwMDIyPiAgICBJR05PUkU7SUdOT1JFOzxVMDAyMj47SUdOT1JFICAgICUgUVVPVEFUSU9OIE1BUksKKzxVMDAyOD4gIElHTk9SRTtJR05PUkU7PFUwMDI4PjtJR05PUkUgICUgTEVGVCBQQVJFTi4KKzxVMDA1Qj4gSUdOT1JFO0lHTk9SRTs8VTAwNUI+O0lHTk9SRSAgJSBMVCBCUkFDS0VUCis8VTAwN0I+ICAgICAgICBJR05PUkU7SUdOT1JFOzxVMDA3Qj47SUdOT1JFICAgICUgTEVGVCBDVVJMWSBCUkFDS0VUCis8VTAwN0Q+ICAgICAgIElHTk9SRTtJR05PUkU7PFUwMDdEPjtJR05PUkUgICAlIFJJR0hUIENVUkxZIEJSQUNLRVQKKzxVMDA1RD4gSUdOT1JFO0lHTk9SRTs8VTAwNUQ+O0lHTk9SRSAlIFJUIEJSQUNLRVQKKzxVMDAyOT4gSUdOT1JFO0lHTk9SRTs8VTAwMjk+O0lHTk9SRSAlIFJJR0hUIFBBUkVOLgorPFUwMDQwPiAgICAgSUdOT1JFO0lHTk9SRTs8VTAwNDA+O0lHTk9SRSAgICAgJSBDT01NRVJDSUFMIEFUCis8VTIwQUQ+ICAgICAgICAgICAgIElHTk9SRTtJR05PUkU7PFUyMEFEPjtJR05PUkUgICUgTGFvIENIQVJBQ1RFUiBTWU1CT0wgS0lQCis8VTAwMjQ+ICAgICAgIElHTk9SRTtJR05PUkU7PFUwMDI0PjtJR05PUkUgICAlIERPTExBUiBTSUdOCis8VTAwMkE+ICAgICAgICAgIElHTk9SRTtJR05PUkU7PFUwMDJBPjtJR05PUkUgICAgICAlIEFTVEVSSVNLCis8VTAwNUM+ICAgICAgICAgSUdOT1JFO0lHTk9SRTs8VTAwNUM+O0lHTk9SRSAgICAgJSBCQUNLIFNPTElEVVMKKzxVMDAyNj4gICAgICAgICBJR05PUkU7SUdOT1JFOzxVMDAyNj47SUdOT1JFICAgICAlIEFNUEVSU0FORAorPFUwMDIzPiAgICAgICBJR05PUkU7SUdOT1JFOzxVMDAyMz47SUdOT1JFICAgJSBOVU1CRVIgU0lHTgorPFUwMDI1PiAgICAgIElHTk9SRTtJR05PUkU7PFUwMDI1PjtJR05PUkUgICUgUEVSQ0VOVAorPFUwMDJCPiAgICAgICAgIElHTk9SRTtJR05PUkU7PFUwMDJCPjtJR05PUkUgICAgICUgUExVUworPFUwMDNDPiAgICBJR05PUkU7SUdOT1JFOzxVMDAzQz47SUdOT1JFICAgICAlIExFU1MgVEhBTgorPFUwMDNEPiAgICAgICBJR05PUkU7SUdOT1JFOzxVMDAzRD47SUdOT1JFICAgJSBFUVVBTAorPFUwMDNFPiBJR05PUkU7SUdOT1JFOzxVMDAzRT47SUdOT1JFICAlIEdSRUFURVIgVEhBTgorPFUwMDdDPiAgICAgSUdOT1JFO0lHTk9SRTs8VTAwN0M+O0lHTk9SRSAlIFZFUlRJQ0FMIExJTkUKKworJSBMYW8gdG9uZSBtYXJrcyBhbmQgZGlhY3JpdGljcworCis8VTBFQ0M+ICAgICAgICBJR05PUkU7PFUwRUNDPjs8QkxBTks+OzxCTEFOSz4gICUgTGFvIENIQVJBQ1RFUiBUSEFOVEhBS0hBVCBPciBDYW5jZWxsYXRpb24gTWFyaworPFUwRUM4PiAgICAgICAgSUdOT1JFOzxVMEVDOD47PEJMQU5LPjs8QkxBTks+ICAlIExhbyBDSEFSQUNURVIgTUFJIEVLCis8VTBFQzk+ICAgICAgICBJR05PUkU7PFUwRUM5Pjs8QkxBTks+OzxCTEFOSz4gICUgTGFvIENIQVJBQ1RFUiBNQUkgVEhPCis8VTBFQ0E+ICAgICAgICBJR05PUkU7PFUwRUNBPjs8QkxBTks+OzxCTEFOSz4gICUgTGFvIENIQVJBQ1RFUiBNQUkgVEkKKzxVMEVDQj4gICAgICAgIElHTk9SRTs8VTBFQ0I+OzxCTEFOSz47PEJMQU5LPiAgJSBMYW8gQ0hBUkFDVEVSIE1BSSBDSEFUVEFXQQorPFUwRUJCPiAgICAgICAgSUdOT1JFOzxVMEVDQT47PEJMQU5LPjs8QkxBTks+ICAlIExhbyBDSEFSQUNURVIgTUFJIEtvbgorPFUwRUNEPiAgICAgICAgSUdOT1JFOzxVMEVDQT47PEJMQU5LPjs8QkxBTks+ICAlIExhbyBDSEFSQUNURVIgTUFJIE5pZ2dhaGl0YQorPFUwRUM2PiAgICAgICAgSUdOT1JFOzxVMEVDQT47PEJMQU5LPjs8QkxBTks+ICAlIExhbyBDSEFSQUNURVIgTUFJIEtvIExhbworCisKKworCislIEFyYWJpYyBhbmQgTGFvIGRlY2ltYWwgZGlnaXRzCis8VTAwMzA+ICA8VTAwMzA+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICAgJSBESUdJVCBaRVJPCis8VTBFRDA+IDxVMDAzMD47PExhb0k+OzxCTEFOSz47PEJMQU5LPiAgICUgTGFvIERJR0lUIFpFUk8KKzxVMDAzMT4gICA8VTAwMzE+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICAgICUgRElHSVQgT05FCis8VTBFRDE+IDxVMDAzMT47PExhb0k+OzxCTEFOSz47PEJMQU5LPiAgICAlIExhbyBESUdJVCBPTkUKKzxVMDAzMj4gICA8VTAwMzI+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICAgICUgRElHSVQgVFdPCis8VTBFRDI+IDxVMDAzMj47PExhb0k+OzxCTEFOSz47PEJMQU5LPiAgICAlIExhbyBESUdJVCBUV08KKzxVMDAzMz4gPFUwMDMzPjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAgJSBESUdJVCBUSFJFRQorPFUwRUQzPiA8VTAwMzM+OzxMYW9JPjs8QkxBTks+OzxCTEFOSz4gICUgTGFvIERJR0lUIFRIUkVFCis8VTAwMzQ+ICA8VTAwMzQ+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICAgJSBESUdJVCBGT1VSCis8VTBFRDQ+IDxVMDAzND47PExhb0k+OzxCTEFOSz47PEJMQU5LPiAgICUgTGFvIERJR0lUIEZPVVIKKzxVMDAzNT4gIDxVMDAzNT47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gICAlIERJR0lUIEZJVkUKKzxVMEVENT4gPFUwMDM1Pjs8TGFvST47PEJMQU5LPjs8QkxBTks+ICAgJSBMYW8gRElHSVQgRklWRQorPFUwMDM2PiAgIDxVMDAzNj47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gICAgJSBESUdJVCBTSVgKKzxVMEVENj4gPFUwMDM2Pjs8TGFvST47PEJMQU5LPjs8QkxBTks+ICAgICUgTGFvIERJR0lUIFNJWAorPFUwMDM3PiA8VTAwMzc+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICAlIERJR0lUIFNFVkVOCis8VTBFRDc+IDxVMDAzNz47PExhb0k+OzxCTEFOSz47PEJMQU5LPiAgJSBMYW8gRElHSVQgU0VWRU4KKzxVMDAzOD4gPFUwMDM4Pjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAgJSBESUdJVCBFSUdIVAorPFUwRUQ4PiA8VTAwMzg+OzxMYW9JPjs8QkxBTks+OzxCTEFOSz4gICUgTGFvIERJR0lUIEVJR0hUCis8VTAwMzk+ICA8VTAwMzk+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICAgJSBESUdJVCBOSU5FCis8VTBFRDk+IDxVMDAzOT47PExhb0k+OzxCTEFOSz47PEJMQU5LPiAgICUgTGFvIERJR0lUIE5JTkUKKworJSBMYXRpbiBhbHBoYWJldAorPFUwMDQxPiA8VTAwNDE+OzxCTEFOSz47PEJMQU5LPjs8Q0FQPiAgJSBBCis8VTAwNjE+IDxVMDA0MT47PEJMQU5LPjs8QkxBTks+OzxNSU4+ICAlIGEKKzxVMDA0Mj4gPFUwMDQyPjs8QkxBTks+OzxCTEFOSz47PENBUD4gICUgQgorPFUwMDYyPiA8VTAwNDI+OzxCTEFOSz47PEJMQU5LPjs8TUlOPiAgJSBiCis8VTAwNDM+IDxVMDA0Mz47PEJMQU5LPjs8QkxBTks+OzxDQVA+ICAlIEMKKzxVMDA2Mz4gPFUwMDQzPjs8QkxBTks+OzxCTEFOSz47PE1JTj4gICUgYworPFUwMDQ0PiA8VTAwNDQ+OzxCTEFOSz47PEJMQU5LPjs8Q0FQPiAgJSBECis8VTAwNjQ+IDxVMDA0ND47PEJMQU5LPjs8QkxBTks+OzxNSU4+ICAlIGQKKzxVMDA0NT4gPFUwMDQ1Pjs8QkxBTks+OzxCTEFOSz47PENBUD4gICUgRQorPFUwMDY1PiA8VTAwNDU+OzxCTEFOSz47PEJMQU5LPjs8TUlOPiAgJSBlCis8VTAwNDY+IDxVMDA0Nj47PEJMQU5LPjs8QkxBTks+OzxDQVA+ICAlIEYKKzxVMDA2Nj4gPFUwMDQ2Pjs8QkxBTks+OzxCTEFOSz47PE1JTj4gICUgZgorPFUwMDQ3PiA8VTAwNDc+OzxCTEFOSz47PEJMQU5LPjs8Q0FQPiAgJSBHCis8VTAwNjc+IDxVMDA0Nz47PEJMQU5LPjs8QkxBTks+OzxNSU4+ICAlIGcKKzxVMDA0OD4gPFUwMDQ4Pjs8QkxBTks+OzxCTEFOSz47PENBUD4gICUgSAorPFUwMDY4PiA8VTAwNDg+OzxCTEFOSz47PEJMQU5LPjs8TUlOPiAgJSBoCis8VTAwNDk+IDxVMDA0OT47PEJMQU5LPjs8QkxBTks+OzxDQVA+ICAlIEkKKzxVMDA2OT4gPFUwMDQ5Pjs8QkxBTks+OzxCTEFOSz47PE1JTj4gICUgaQorPFUwMDRBPiA8VTAwNEE+OzxCTEFOSz47PEJMQU5LPjs8Q0FQPiAgJSBKCis8VTAwNkE+IDxVMDA0QT47PEJMQU5LPjs8QkxBTks+OzxNSU4+ICAlIGoKKzxVMDA0Qj4gPFUwMDRCPjs8QkxBTks+OzxCTEFOSz47PENBUD4gICUgSworPFUwMDZCPiA8VTAwNEI+OzxCTEFOSz47PEJMQU5LPjs8TUlOPiAgJSBrCis8VTAwNEM+IDxVMDA0Qz47PEJMQU5LPjs8QkxBTks+OzxDQVA+ICAlIEwKKzxVMDA2Qz4gPFUwMDRDPjs8QkxBTks+OzxCTEFOSz47PE1JTj4gICUgbAorPFUwMDREPiA8VTAwNEQ+OzxCTEFOSz47PEJMQU5LPjs8Q0FQPiAgJSBNCis8VTAwNkQ+IDxVMDA0RD47PEJMQU5LPjs8QkxBTks+OzxNSU4+ICAlIG0KKzxVMDA0RT4gPFUwMDRFPjs8QkxBTks+OzxCTEFOSz47PENBUD4gICUgTgorPFUwMDZFPiA8VTAwNEU+OzxCTEFOSz47PEJMQU5LPjs8TUlOPiAgJSBuCis8VTAwNEY+IDxVMDA0Rj47PEJMQU5LPjs8QkxBTks+OzxDQVA+ICAlIE8KKzxVMDA2Rj4gPFUwMDRGPjs8QkxBTks+OzxCTEFOSz47PE1JTj4gICUgbworPFUwMDUwPiA8VTAwNTA+OzxCTEFOSz47PEJMQU5LPjs8Q0FQPiAgJSBQCis8VTAwNzA+IDxVMDA1MD47PEJMQU5LPjs8QkxBTks+OzxNSU4+ICAlIHAKKzxVMDA1MT4gPFUwMDUxPjs8QkxBTks+OzxCTEFOSz47PENBUD4gICUgUQorPFUwMDcxPiA8VTAwNTE+OzxCTEFOSz47PEJMQU5LPjs8TUlOPiAgJSBxCis8VTAwNTI+IDxVMDA1Mj47PEJMQU5LPjs8QkxBTks+OzxDQVA+ICAlIFIKKzxVMDA3Mj4gPFUwMDUyPjs8QkxBTks+OzxCTEFOSz47PE1JTj4gICUgcgorPFUwMDUzPiA8VTAwNTM+OzxCTEFOSz47PEJMQU5LPjs8Q0FQPiAgJSBTCis8VTAwNzM+IDxVMDA1Mz47PEJMQU5LPjs8QkxBTks+OzxNSU4+ICAlIHMKKzxVMDA1ND4gPFUwMDU0Pjs8QkxBTks+OzxCTEFOSz47PENBUD4gICUgVAorPFUwMDc0PiA8VTAwNTQ+OzxCTEFOSz47PEJMQU5LPjs8TUlOPiAgJSB0Cis8VTAwNTU+IDxVMDA1NT47PEJMQU5LPjs8QkxBTks+OzxDQVA+ICAlIFUKKzxVMDA3NT4gPFUwMDU1Pjs8QkxBTks+OzxCTEFOSz47PE1JTj4gICUgdQorPFUwMDU2PiA8VTAwNTY+OzxCTEFOSz47PEJMQU5LPjs8Q0FQPiAgJSBWCis8VTAwNzY+IDxVMDA1Nj47PEJMQU5LPjs8QkxBTks+OzxNSU4+ICAlIHYKKzxVMDA1Nz4gPFUwMDU3Pjs8QkxBTks+OzxCTEFOSz47PENBUD4gICUgVworPFUwMDc3PiA8VTAwNTc+OzxCTEFOSz47PEJMQU5LPjs8TUlOPiAgJSB3Cis8VTAwNTg+IDxVMDA1OD47PEJMQU5LPjs8QkxBTks+OzxDQVA+ICAlIFgKKzxVMDA3OD4gPFUwMDU4Pjs8QkxBTks+OzxCTEFOSz47PE1JTj4gICUgeAorPFUwMDU5PiA8VTAwNTk+OzxCTEFOSz47PEJMQU5LPjs8Q0FQPiAgJSBZCis8VTAwNzk+IDxVMDA1OT47PEJMQU5LPjs8QkxBTks+OzxNSU4+ICAlIHkKKzxVMDA1QT4gPFUwMDVBPjs8QkxBTks+OzxCTEFOSz47PENBUD4gICUgWgorPFUwMDdBPiA8VTAwNUE+OzxCTEFOSz47PEJMQU5LPjs8TUlOPiAgJSB6CisKKyUKKyUgTGFvIGNvbnNvbmFudHMsIHdpdGggbGVhZGluZyB2b3dlbHMgcmVhcnJhbmdlbWVudAorJQorPFUwRTgxPiAgICAgICAgPFUwRTgxPjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAlIExhbyBDSEFSQUNURVIgS08KKzxrby1lPiAgICAgICAgICAgIjxVMEU4MT48VTBFQzA+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGtvLWFlPiAgICAgICAgICAiPFUwRTgxPjxVMEVDMT4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8a28tbz4gICAgICAgICAgICI8VTBFODE+PFUwRUMyPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxrby1haS1tYWltdWFuPiAgIjxVMEU4MT48VTBFQzM+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGtvLWFpLW1haW1hbGFpPiAiPFUwRTgxPjxVMEVDND4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+CisKKzxVMEU4Mj4gICAgICAgIDxVMEU4Mj47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gJSBMYW8gQ0hBUkFDVEVSIEtITyBzdW5nCis8a2hvLXN1bmctZT4gICAgICAgICAgICI8VTBFODI+PFUwRUMwPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxraG8tc3VuZy1hZT4gICAgICAgICAgIjxVMEU4Mj48VTBFQzE+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGtoby1zdW5nLW8+ICAgICAgICAgICAiPFUwRTgyPjxVMEVDMj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8a2hvLXN1bmctYWktbWFpbXVhbj4gICI8VTBFODI+PFUwRUMzPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxraG8tc3VuZy1haS1tYWltYWxhaT4gIjxVMEU4Mj48VTBFQzQ+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorCis8VTBFODQ+ICAgICAgICA8VTBFODQ+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICUgTGFvIENIQVJBQ1RFUiBLSE8gdGFtCis8a2hvLXRhbS1lPiAgICAgICAgICAgIjxVMEU4ND48VTBFQzA+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGtoby10YW0tYWU+ICAgICAgICAgICI8VTBFODQ+PFUwRUMxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxraG8tdGFtLW8+ICAgICAgICAgICAiPFUwRTg0PjxVMEVDMj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8a2hvLXRhbS1haS1tYWltdWFuPiAgIjxVMEU4ND48VTBFQzM+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGtoby10YW0tYWktbWFpbWFsYWk+ICI8VTBFODQ+PFUwRUM0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworPFUwRTg3PiAgICAgICAgPFUwRTg3Pjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAlIExhbyBDSEFSQUNURVIgTkdPCis8bmdvLWU+ICAgICAgICAgICAiPFUwRTg3PjxVMEVDMD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8bmdvLWFlPiAgICAgICAgICAiPFUwRTg3PjxVMEVDMT4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8bmdvLW8+ICAgICAgICAgICAiPFUwRTg3PjxVMEVDMj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8bmdvLWFpLW1haW11YW4+ICAiPFUwRTg3PjxVMEVDMz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8bmdvLWFpLW1haW1hbGFpPiAiPFUwRTg3PjxVMEVDND4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+CisKKzxVMEU4OD4gICAgICAgIDxVMEU4OD47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gJSBMYW8gQ0hBUkFDVEVSIENITworPGNoby1lPiAgICAgICAgICAgIjxVMEU4OD48VTBFQzA+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGNoby1hZT4gICAgICAgICAgIjxVMEU4OD48VTBFQzE+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGNoby1vPiAgICAgICAgICAgIjxVMEU4OD48VTBFQzI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGNoby1haS1tYWltdWFuPiAgIjxVMEU4OD48VTBFQzM+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGNoby1haS1tYWltYWxhaT4gIjxVMEU4OD48VTBFQzQ+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorCis8VTBFOEE+ICAgICAgICA8VTBFOEE+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICUgTGFvIENIQVJBQ1RFUiBTTworPHhvLWU+ICAgICAgICAgICAiPFUwRThBPjxVMEVDMD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8eG8tYWU+ICAgICAgICAgICI8VTBFOEE+PFUwRUMxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzx4by1vPiAgICAgICAgICAgIjxVMEU4QT48VTBFQzI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHhvLWFpLW1haW11YW4+ICAiPFUwRThBPjxVMEVDMz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8eG8tYWktbWFpbWFsYWk+ICI8VTBFOEE+PFUwRUM0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworPFUwRThEPiAgICAgICAgPFUwRThEPjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAlIExhbyBDSEFSQUNURVIgTnlvCis8bnlvLWU+ICAgICAgICAgICAiPFUwRThEPjxVMEVDMD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8bnlvLWFlPiAgICAgICAgICAiPFUwRThEPjxVMEVDMT4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8bnlvLW8+ICAgICAgICAgICAiPFUwRThEPjxVMEVDMj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8bnlvLWFpLW1haW11YW4+ICAiPFUwRThEPjxVMEVDMz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8bnlvLWFpLW1haW1hbGFpPiAiPFUwRThEPjxVMEVDND4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+CisKKzxVMEU5ND4gICAgICAgIDxVMEU5ND47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gJSBMYW8gQ0hBUkFDVEVSIERPCis8ZG8tZT4gICAgICAgICAgICI8VTBFOTQ+PFUwRUMwPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxkby1hZT4gICAgICAgICAgIjxVMEU5ND48VTBFQzE+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGRvLW8+ICAgICAgICAgICAiPFUwRTk0PjxVMEVDMj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8ZG8tYWktbWFpbXVhbj4gICI8VTBFOTQ+PFUwRUMzPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxkby1haS1tYWltYWxhaT4gIjxVMEU5ND48VTBFQzQ+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorCis8VTBFOTU+ICAgICAgICA8VTBFOTU+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICUgTGFvIENIQVJBQ1RFUiBUTworPHRvLWU+ICAgICAgICAgICAiPFUwRTk1PjxVMEVDMD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8dG8tYWU+ICAgICAgICAgICI8VTBFOTU+PFUwRUMxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzx0by1vPiAgICAgICAgICAgIjxVMEU5NT48VTBFQzI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHRvLWFpLW1haW11YW4+ICAiPFUwRTk1PjxVMEVDMz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8dG8tYWktbWFpbWFsYWk+ICI8VTBFOTU+PFUwRUM0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworPFUwRTk2PiAgICAgICAgPFUwRTk2Pjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAlIExhbyBDSEFSQUNURVIgVEhPIFN1bmcKKzx0aG8tc3VuZy1lPiAgICAgICAgICAgIjxVMEU5Nj48VTBFQzA+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHRoby1zdW5nLWFlPiAgICAgICAgICAiPFUwRTk2PjxVMEVDMT4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8dGhvLXN1bmctbz4gICAgICAgICAgICI8VTBFOTY+PFUwRUMyPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzx0aG8tc3VuZy1haS1tYWltdWFuPiAgIjxVMEU5Nj48VTBFQzM+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHRoby1zdW5nLWFpLW1haW1hbGFpPiAiPFUwRTk2PjxVMEVDND4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+CisKKzxVMEU5Nz4gICAgICAgIDxVMEU5Nz47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gJSBMYW8gQ0hBUkFDVEVSIFRITyBUYW0KKzx0aG8tdGFtLWU+ICAgICAgICAgICAiPFUwRTk3PjxVMEVDMD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8dGhvLXRhbS1hZT4gICAgICAgICAgIjxVMEU5Nz48VTBFQzE+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHRoby10YW0tbz4gICAgICAgICAgICI8VTBFOTc+PFUwRUMyPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzx0aG8tdGFtLWFpLW1haW11YW4+ICAiPFUwRTk3PjxVMEVDMz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8dGhvLXRhbS1haS1tYWltYWxhaT4gIjxVMEU5Nz48VTBFQzQ+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorCis8VTBFOTk+ICAgICAgICA8VTBFOTk+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICUgTGFvIENIQVJBQ1RFUiBOTworPG5vLWU+ICAgICAgICAgICAiPFUwRTk5PjxVMEVDMD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8bm8tYWU+ICAgICAgICAgICI8VTBFOTk+PFUwRUMxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxuby1vPiAgICAgICAgICAgIjxVMEU5OT48VTBFQzI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPG5vLWFpLW1haW11YW4+ICAiPFUwRTk5PjxVMEVDMz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8bm8tYWktbWFpbWFsYWk+ICI8VTBFOTk+PFUwRUM0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworPFUwRTlBPiAgICAgICAgPFUwRTlBPjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAlIExhbyBDSEFSQUNURVIgQk8KKzxiby1lPiAgICAgICAgICAgIjxVMEU5QT48VTBFQzA+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGJvLWFlPiAgICAgICAgICAiPFUwRTlBPjxVMEVDMT4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8Ym8tbz4gICAgICAgICAgICI8VTBFOUE+PFUwRUMyPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxiby1haS1tYWltdWFuPiAgIjxVMEU5QT48VTBFQzM+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGJvLWFpLW1haW1hbGFpPiAiPFUwRTlBPjxVMEVDND4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+CisKKzxVMEU5Qj4gICAgICAgIDxVMEU5Qj47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gJSBMYW8gQ0hBUkFDVEVSIFBPCis8cG8tZT4gICAgICAgICAgICI8VTBFOUI+PFUwRUMwPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxwby1hZT4gICAgICAgICAgIjxVMEU5Qj48VTBFQzE+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHBvLW8+ICAgICAgICAgICAiPFUwRTlCPjxVMEVDMj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8cG8tYWktbWFpbXVhbj4gICI8VTBFOUI+PFUwRUMzPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxwby1haS1tYWltYWxhaT4gIjxVMEU5Qj48VTBFQzQ+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorCis8VTBFOUM+ICAgICAgICA8VTBFOUM+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICUgTGFvIENIQVJBQ1RFUiBQSE8gc1VORworPHBoby1zdW5nLWU+ICAgICAgICAgICAiPFUwRTlDPjxVMEVDMD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8cGhvLXN1bmctYWU+ICAgICAgICAgICI8VTBFOUM+PFUwRUMxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxwaG8tc3VuZy1vPiAgICAgICAgICAgIjxVMEU5Qz48VTBFQzI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHBoby1zdW5nLWFpLW1haW11YW4+ICAiPFUwRTlDPjxVMEVDMz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8cGhvLXN1bmctYWktbWFpbWFsYWk+ICI8VTBFOUM+PFUwRUM0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworPFUwRTlEPiAgICAgICAgPFUwRTlEPjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAlIExhbyBDSEFSQUNURVIgRk8gdGFtCis8Zm8tdGFtLWU+ICAgICAgICAgICAiPFUwRTlEPjxVMEVDMD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8Zm8tdGFtLWFlPiAgICAgICAgICAiPFUwRTlEPjxVMEVDMT4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8Zm8tdGFtLW8+ICAgICAgICAgICAiPFUwRTlEPjxVMEVDMj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8Zm8tdGFtLWFpLW1haW11YW4+ICAiPFUwRTlEPjxVMEVDMz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8Zm8tdGFtLWFpLW1haW1hbGFpPiAiPFUwRTlEPjxVMEVDND4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+CisKKzxVMEU5RT4gICAgICAgIDxVMEU5RT47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gJSBMYW8gQ0hBUkFDVEVSIHBobyB0YW0KKzxwaG8tdGFtLWU+ICAgICAgICAgICAiPFUwRTlFPjxVMEVDMD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8cGhvLXRhbS1hZT4gICAgICAgICAgIjxVMEU5RT48VTBFQzE+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHBoby10YW0tbz4gICAgICAgICAgICI8VTBFOUU+PFUwRUMyPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxwaG8tdGFtLWFpLW1haW11YW4+ICAiPFUwRTlFPjxVMEVDMz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8cGhvLXRhbS1haS1tYWltYWxhaT4gIjxVMEU5RT48VTBFQzQ+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorCis8VTBFOUY+ICAgICAgICA8VTBFOUY+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICUgTGFvIENIQVJBQ1RFUiBmbyBzdW5nCis8Zm8tc3VuZy1lPiAgICAgICAgICAgIjxVMEU5Rj48VTBFQzA+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGZvLXN1bmctYWU+ICAgICAgICAgICI8VTBFOUY+PFUwRUMxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxmby1zdW5nLW8+ICAgICAgICAgICAiPFUwRTlGPjxVMEVDMj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8Zm8tc3VuZy1haS1tYWltdWFuPiAgIjxVMEU5Rj48VTBFQzM+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGZvLXN1bmctYWktbWFpbWFsYWk+ICI8VTBFOUY+PFUwRUM0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworPFUwRUExPiAgICAgICAgPFUwRUExPjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAlIExhbyBDSEFSQUNURVIgTU8KKzxtby1lPiAgICAgICAgICAgIjxVMEVBMT48VTBFQzA+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPG1vLWFlPiAgICAgICAgICAiPFUwRUExPjxVMEVDMT4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8bW8tbz4gICAgICAgICAgICI8VTBFQTE+PFUwRUMyPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxtby1haS1tYWltdWFuPiAgIjxVMEVBMT48VTBFQzM+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPG1vLWFpLW1haW1hbGFpPiAiPFUwRUExPjxVMEVDND4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+CisKKzxVMEVBMj4gICAgICAgIDxVMEVBMj47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gJSBMYW8gQ0hBUkFDVEVSIFlPCis8eW8tZT4gICAgICAgICAgICI8VTBFQTI+PFUwRUMwPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzx5by1hZT4gICAgICAgICAgIjxVMEVBMj48VTBFQzE+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHlvLW8+ICAgICAgICAgICAiPFUwRUEyPjxVMEVDMj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8eW8tYWktbWFpbXVhbj4gICI8VTBFQTI+PFUwRUMzPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzx5by1haS1tYWltYWxhaT4gIjxVMEVBMj48VTBFQzQ+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorCis8VTBFQTM+ICAgICAgICA8VTBFQTM+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICUgTGFvIENIQVJBQ1RFUiBSTworPHJvLWU+ICAgICAgICAgICAiPFUwRUEzPjxVMEVDMD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8cm8tYWU+ICAgICAgICAgICI8VTBFQTM+PFUwRUMxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxyby1vPiAgICAgICAgICAgIjxVMEVBMz48VTBFQzI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHJvLWFpLW1haW11YW4+ICAiPFUwRUEzPjxVMEVDMz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8cm8tYWktbWFpbWFsYWk+ICI8VTBFQTM+PFUwRUM0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworPFUwRUE1PiAgICAgICAgPFUwRUE1Pjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAlIExhbyBDSEFSQUNURVIgTE8KKzxsby1lPiAgICAgICAgICAgIjxVMEVBNT48VTBFQzA+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGxvLWFlPiAgICAgICAgICAiPFUwRUE1PjxVMEVDMT4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8bG8tbz4gICAgICAgICAgICI8VTBFQTU+PFUwRUMyPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxsby1haS1tYWltdWFuPiAgIjxVMEVBNT48VTBFQzM+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGxvLWFpLW1haW1hbGFpPiAiPFUwRUE1PjxVMEVDND4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+CisKKzxVMEVBNz4gICAgICAgIDxVMEVBNz47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gJSBMYW8gQ0hBUkFDVEVSIFdPCis8d28tZT4gICAgICAgICAgICI8VTBFQTc+PFUwRUMwPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzx3by1hZT4gICAgICAgICAgIjxVMEVBNz48VTBFQzE+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHdvLW8+ICAgICAgICAgICAiPFUwRUE3PjxVMEVDMj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8d28tYWktbWFpbXVhbj4gICI8VTBFQTc+PFUwRUMzPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzx3by1haS1tYWltYWxhaT4gIjxVMEVBNz48VTBFQzQ+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorCis8VTBFQUE+ICAgICAgICA8VTBFQUE+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICUgTGFvIENIQVJBQ1RFUiBTTworPHNvLWU+ICAgICAgICAgICAiPFUwRUFBPjxVMEVDMD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8c28tYWU+ICAgICAgICAgICI8VTBFQUE+PFUwRUMxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxzby1vPiAgICAgICAgICAgIjxVMEVBQT48VTBFQzI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHNvLWFpLW1haW11YW4+ICAiPFUwRUFBPjxVMEVDMz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8c28tYWktbWFpbWFsYWk+ICI8VTBFQUE+PFUwRUM0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworPFUwRUFCPiAgICAgICAgPFUwRUFCPjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAlIExhbyBDSEFSQUNURVIgSE8KKzxoby1lPiAgICAgICAgICAgIjxVMEVBQj48VTBFQzA+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGhvLWFlPiAgICAgICAgICAiPFUwRUFCPjxVMEVDMT4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8aG8tbz4gICAgICAgICAgICI8VTBFQUI+PFUwRUMyPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxoby1haS1tYWltdWFuPiAgIjxVMEVBQj48VTBFQzM+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGhvLWFpLW1haW1hbGFpPiAiPFUwRUFCPjxVMEVDND4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+CisKKzxVMEVBRD4gICAgICAgIDxVMEVBRD47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gJSBMYW8gQ0hBUkFDVEVSIE8KKzxvLWU+ICAgICAgICAgICAiPFUwRUFEPjxVMEVDMD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8by1hZT4gICAgICAgICAgIjxVMEVBRD48VTBFQzE+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPG8tbz4gICAgICAgICAgICI8VTBFQUQ+PFUwRUMyPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxvLWFpLW1haW11YW4+ICAiPFUwRUFEPjxVMEVDMz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8by1haS1tYWltYWxhaT4gIjxVMEVBRD48VTBFQzQ+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorCis8VTBFQUU+ICAgICAgICA8VTBFQUU+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICUgTGFvIENIQVJBQ1RFUiBIT3IKKzxob3ItZT4gICAgICAgICAgICI8VTBFQUU+PFUwRUMwPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxob3ItYWU+ICAgICAgICAgICI8VTBFQUU+PFUwRUMxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxob3Itbz4gICAgICAgICAgICI8VTBFQUU+PFUwRUMyPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxob3ItYWktbWFpbXVhbj4gICI8VTBFQUU+PFUwRUMzPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxob3ItYWktbWFpbWFsYWk+ICI8VTBFQUU+PFUwRUM0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworCis8VTBFREM+ICAgICAgICA8VTBFREM+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICUgTGFvIENIQVJBQ1RFUiBOSE9yCis8bmhvci1lPiAgICAgICAgICAgIjxVMEVEQz48VTBFQzA+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPG5ob3ItYWU+ICAgICAgICAgICI8VTBFREM+PFUwRUMxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxuaG9yLW8+ICAgICAgICAgICAiPFUwRURDPjxVMEVDMj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8bmhvci1haS1tYWltdWFuPiAgIjxVMEVEQz48VTBFQzM+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPG5ob3ItYWktbWFpbWFsYWk+ICI8VTBFREM+PFUwRUM0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworCis8VTBFREQ+ICAgICAgICA8VTBFREM+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICUgTGFvIENIQVJBQ1RFUiBISE9yCis8bWhvci1lPiAgICAgICAgICAgIjxVMEVERD48VTBFQzA+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPG1ob3ItYWU+ICAgICAgICAgICI8VTBFREQ+PFUwRUMxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxtaG9yLW8+ICAgICAgICAgICAiPFUwRUREPjxVMEVDMj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8bWhvci1haS1tYWltdWFuPiAgIjxVMEVERD48VTBFQzM+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPG1ob3ItYWktbWFpbWFsYWk+ICI8VTBFREQ+PFUwRUM0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworCislIG9yZGVyIG9mIExhbyB2b3dlbHMKKzxVMEVCMD4gPFUwRUIwPjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAgJSBMYW8gQ0hBUkFDVEVSIFNBbEEgQQorPFUwRUIxPiA8VTBFQjE+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICAlIExhbyBDSEFSQUNURVIgTUFJIEhBTi1BS0FUCis8VTBFQjI+IDxVMEVCMj47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gICUgTGFvIENIQVJBQ1RFUiBTQWxBIEFBCis8VTBFQjM+IDxVMEVCMz47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gICUgTGFvIENIQVJBQ1RFUiBTYWxhIEFNCis8VTBFQjQ+IDxVMEVCND47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gICUgTGFvIENIQVJBQ1RFUiBTYWxhIEkKKzxVMEVCNT4gPFUwRUI1Pjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAgJSBMYW8gQ0hBUkFDVEVSIFNhbGEgSUkKKzxVMEVCNj4gPFUwRUI2Pjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAgJSBMYW8gQ0hBUkFDVEVSIFNhbGEgVUUKKzxVMEVCNz4gPFUwRUI3Pjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAgJSBMYW8gQ0hBUkFDVEVSIFNhbGEgVUVFCis8VTBFQjg+IDxVMEVCOD47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gICUgTGFvIENIQVJBQ1RFUiBTYWxhIFUKKzxVMEVCOT4gPFUwRUI5Pjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAgJSBMYW8gQ0hBUkFDVEVSIFNhbGEgVVUKKzxVMEVCQz4gPFUwRUI5Pjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAgJSBMYW8gQ0hBUkFDVEVSIFNhbGEgTG8KKzxVMEVCRD4gPFUwRUI5Pjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAgJSBMYW8gQ0hBUkFDVEVSIFNhbGEgT3kKKzxVMEVDMD4gPFUwRUMwPjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAgJSBMYW8gQ0hBUkFDVEVSIFNhbGEgRQorPFUwRUMxPiA8VTBFQzE+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICAlIExhbyBDSEFSQUNURVIgU2FsYSBBRQorPFUwRUMyPiA8VTBFQzI+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICAlIExhbyBDSEFSQUNURVIgU2FsYSBPCis8VTBFQzM+IDxVMEVDMz47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gICUgTGFvIENIQVJBQ1RFUiBTYWxhIEFJIE1BSU1VQU4KKzxVMEVDND4gPFUwRUM0Pjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAgJSBMYW8gQ0hBUkFDVEVSIFNhbGEgQUkgTUFJTUFMQUkKKworb3JkZXJfZW5kCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCisKK2ludF9jdXJyX3N5bWJvbCAgICAgICI8VTAwNEM+PFUwMDQxPjxVMDA0Qj48VTAwMjA+IgorCislIG1vbmV0YXJ5IHVuaXQ6IEtpcAorY3VycmVuY3lfc3ltYm9sICAgICAgIjxVMjBBRD4iCittb25fZGVjaW1hbF9wb2ludCAgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAyCituX2NzX3ByZWNlZGVzICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAyCitwX3NpZ25fcG9zbiAgICAgICAgICA0CituX3NpZ25fcG9zbiAgICAgICAgICA0CitFTkQgTENfTU9ORVRBUlkKKworCitMQ19OVU1FUklDCisKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAgIjxVMDAyQz4iCitncm91cGluZyAgICAgICAgICAgICAgICAzCisKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKKworYWJkYXkgICAiPFUwRUFEPjxVMEVCMj48VTAwMkU+IjsiPFUwRTg4PjxVMDAyRT4iOyI8VTBFODQ+PFUwMDJFPiI7LworICAgICAgICAiPFUwRTlFPjxVMDAyRT4iOyI8VTBFOUU+PFUwRUFCPjxVMDAyRT4iOyI8VTBFQUE+PFUwMDJFPiI7LworICAgICAgICAiPFUwRUFBPjxVMDAyRT4iCitkYXkgICAgICI8VTBFQUQ+PFUwRUIyPjxVMEU5Nz48VTBFQjQ+PFUwRTk0PiI7LworICAgICAgICAiPFUwRTg4PjxVMEVCMT48VTBFOTk+IjsvCisgICAgICAgICI8VTBFQUQ+PFUwRUIxPjxVMEU4Nz48VTBFODQ+PFUwRUIyPjxVMEU5OT4iOy8KKyAgICAgICAgIjxVMEU5RT48VTBFQjg+PFUwRTk0PiI7LworICAgICAgICAiPFUwRTlFPjxVMEVCMD48VTBFQUI+PFUwRUIxPjxVMEU5ND4iOy8KKyAgICAgICAgIjxVMEVBQT48VTBFQjg+PFUwRTgxPiI7LworICAgICAgICAiPFUwRUMwPjxVMEVBQT48VTBFQkI+PFUwRUIyPiIKK2FibW9uICAgIjxVMEVBMT48VTAwMkU+PFUwRTgxPjxVMDAyRT4iOy8KKyAgICAgICAgIjxVMEU4MT48VTAwMkU+PFUwRTlFPjxVMDAyRT4iOy8KKyAgICAgICAgIjxVMEVBMT48VTAwMkU+PFUwRTk5PjxVMDAyRT4iOy8KKyAgICAgICAgIjxVMEVBMT48VTAwMkU+PFUwRUFBPjxVMDAyRT4iOy8KKyAgICAgICAgIjxVMEU5RT48VTAwMkU+PFUwRTlFPjxVMDAyRT4iOy8KKyAgICAgICAgIjxVMEVBMT48VTBFQjQ+PFUwMDJFPjxVMEU5Nj48VTAwMkU+IjsvCisgICAgICAgICI8VTBFODE+PFUwMDJFPjxVMEVBNT48VTAwMkU+IjsvCisgICAgICAgICI8VTBFQUE+PFUwMDJFPjxVMEVBQj48VTAwMkU+IjsvCisgICAgICAgICI8VTBFODE+PFUwMDJFPjxVMEU4RD48VTAwMkU+IjsvCisgICAgICAgICI8VTBFOTU+PFUwMDJFPjxVMEVBNT48VTAwMkU+IjsvCisgICAgICAgICI8VTBFOUU+PFUwMDJFPjxVMEU4OD48VTAwMkU+IjsvCisgICAgICAgICI8VTBFOTc+PFUwMDJFPjxVMEVBNz48VTAwMkU+IgorbW9uICAgICAiPFUwRUExPjxVMEVCMT48VTBFODc+PFUwRTgxPjxVMEVBRD48VTBFOTk+IjsvCisgICAgICAgICI8VTBFODE+PFUwRUI4PjxVMEVBMT48VTBFOUY+PFUwRUIyPiI7LworICAgICAgICAiPFUwRUExPjxVMEVCNT48VTBFOTk+PFUwRUIyPiI7LworICAgICAgICAiPFUwRUMwPjxVMEVBMT48VTBFQUE+PFUwRUIyPiI7LworICAgICAgICAiPFUwRTlFPjxVMEVCNj48VTBFOTQ+PFUwRUFBPjxVMEVCMD48VTBFOUU+PFUwRUIyPiI7LworICAgICAgICAiPFUwRUExPjxVMEVCND48VTBFOTY+PFUwRUI4PjxVMEU5OT48VTBFQjI+IjsvCisgICAgICAgICI8VTBFODE+PFUwRUNEPjxVMEVBNT48VTBFQjA+PFUwRTgxPjxVMEVCQj48VTBFOTQ+IjsvCisgICAgICAgICI8VTBFQUE+PFUwRUI0PjxVMEU4Nz48VTBFQUI+PFUwRUIyPiI7LworICAgICAgICAiPFUwRTgxPjxVMEVCMT48VTBFOTk+PFUwRThEPjxVMEVCMj4iOy8KKyAgICAgICAgIjxVMEU5NT48VTBFQjg+PFUwRUE1PjxVMEVCMj4iOy8KKyAgICAgICAgIjxVMEU5RT48VTBFQjA+PFUwRTg4PjxVMEVCND48VTBFODE+IjsvCisgICAgICAgICI8VTBFOTc+PFUwRUIxPjxVMEU5OT48VTBFQTc+PFUwRUIyPiIKKyUgQXBwcm9wcmlhdGUgZGF0ZSAmIHRpbWUgcmVwcmVzZW50YXRpb24gICIlYSAlZSAlYiAlRXksICVIOiVNOiVTIgorZF90X2ZtdCAiJWE8VTAwMjA+JWU8VTAwMjA+JWI8VTAwMjA+JUV5PFUwMDJDPjxVMDAyMD4lSDxVMDAzQT4lTTxVMDAzQT4lUyIKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbiAgIiVkLyVtLyVFeSIKK2RfZm10ICAgIiVkPFUwMDJGPiVtPFUwMDJGPiVFeSIKKyUgQXBwcm9wcmlhdGUgdGltZSByZXByZXNlbnRhdGlvbiAgIiVIOiVNOiVTIgordF9mbXQgICAiJUg8VTAwM0E+JU08VTAwM0E+JVMiCislIEFNL1BNIHNpZ25zCithbV9wbSAgICI8VTAwNDE+PFUwMDREPiI7IjxVMDA1MD48VTAwNEQ+IgorJSBBcHByb3ByaWF0ZSAxMi1ob3VyIGNsb2NrIHJlcHJlc2VudGF0aW9uICAiJUk6JU06JVMgJXAiCit0X2ZtdF9hbXBtICAiJUk8VTAwM0E+JU08VTAwM0E+JVM8VTAwMjA+JXAiCislIEVyYSA6IEJ1ZGRoaXN0IEVyYQorZXJhICAgICAiKzoxOi01NDM8VTAwMkY+MDE8VTAwMkY+MDE6Kyo6PFUwRTlFPjxVMDAyRT48VTBFQUE+PFUwMDJFPjolRUM8VTAwMjA+JUV5IgorZXJhX2RfZm10ICAgICAgICIlZTxVMDAyMD4lYjxVMDAyMD4lRXkiCitlcmFfdF9mbXQgICAgICAgIiVIPFUwMDJFPiVNPFUwMDJFPiVTPFUwMDIwPjxVMEU5OT48VTAwMkU+IgorZXJhX2RfdF9mbXQgICAgICI8VTBFQTc+PFUwRUIxPjxVMEU5OT4lQTxVMEU5Nz48VTBFQjU+PFUwRUM4PjxVMDAyMD4lZTxVMDAyMD4lQjxVMDAyMD4lRUM8VTAwMjA+JUV5PFUwMDJDPjxVMDAyMD4lSDxVMDAyRT4lTTxVMDAyRT4lUzxVMDAyMD48VTBFOTk+PFUwMDJFPiIKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbiAoZGF0ZSgxKSkgICAiJWEgJWUgJWIgJUV5ICVIOiVNOiVTICVaIgorZGF0ZV9mbXQgICAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNjI+LworPFUwMDIwPjxVMDAyNT48VTAwNDU+PFUwMDc5PjxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPi8KKzxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUgSUNULTdJQ1QtNwordGltZXpvbmUJIjxVMDA0OT48VTAwNDM+PFUwMDU0PjxVMDAyRD48VTAwMzc+PFUwMDQ5PjxVMDA0Mz48VTAwNTQ+PFUwMDJkPjxVMDAzNz4iCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworCislIHllc2V4cHIgOiBiZWdpbnMgd2l0aCAieSIsICJZIiwgb3IgbW8KKyUgbm9leHByIDogYmVnaW5zIHdpdGggIm4iLCAiTiIsIG9yIEJvCislIHllc3N0ciA9ICJtZW4iID0gU2FsYSBhZSArIE1vICsgTUFJIEVLICsgTm8KKyUgbm9zdHIgPSAiQm8gTWVuIiA9IExldHRlciBCbyArc2FsbyBPcisgTUFJIEVLICsgbW8rIE1hIEVrKyBObworCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA3OT48VTAwNTk+PFUwRUExPjxVMDA1RD4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwRTlBPjxVMDA1RD4iCit5ZXNzdHIgICI8VTBFQzE+PFUwRUExPjxVMEVDOD48VTBFOTk+Igorbm9zdHIgICAiPFUwRTlBPjxVMEVDRD48VTBFQzg+PFUwRUMxPjxVMEVBMT48VTBFQzg+PFUwRTk5PiIKKworRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCitoZWlnaHQgICAyOTcKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK3RlbF9kb21fZm10ICAgICI8VTAwMjg+PFUwMDI1PjxVMDA0MT48VTAwMjk+PFUwMDI1PjxVMDA2Qz4iCitpbnRfc2VsZWN0ICAgICAiPFUwMDMwPjxVMDAzMD48VTAwMzE+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzOD48VTAwMzU+PFUwMDM2PiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKKyUgRklYTUUKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCisKK25hbWVfbXIgICAgICI8VTBFOTc+LiIKK25hbWVfbXJzICAgICI8VTBFOTk+LiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKKyUgICAgIiVmJU4lYSVOJWQlTiVyJXQlZSV0JWIlTiVoJXQlcyVOJVQlTiVTJU4leiVjJU4iCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDcyPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDY4PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA3Mz48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDUzPi8KKzxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9uYW1lICAiPFUwRUE1PjxVMEVCMj48VTBFQTc+IgorJUZJWE1FCislY291bnRyeV9wb3N0ICAiIgorY291bnRyeV9hYjIgICAiPFUwMDRDPjxVMDA0MT4iCitjb3VudHJ5X2FiMyAgICI8VTAwNEM+PFUwMDQxPjxVMDA0Rj4iCitjb3VudHJ5X251bSAgIDQxOAorY291bnRyeV9jYXIgICAiPFUwMDRDPjxVMDA0MT48VTAwNEY+IgorJUZJWE1FCislY291bnRyeV9pc2JuICAiIgorbGFuZ19uYW1lICAgICAiPFUwRUE1PjxVMEVCMj48VTBFQTc+IgorbGFuZ19hYiAgICAgICAiPFUwMDZDPjxVMDA2Rj4iCitsYW5nX3Rlcm0gICAgICI8VTAwNmM+PFUwMDYxPjxVMDA2Rj4iCitsYW5nX2xpYiAgICAgICI8VTAwNkM+PFUwMDYxPjxVMDA2Rj4iCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvbHRfTFQgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9sdF9MVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzA5ZDgzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvbHRfTFQKQEAgLTAsMCArMSwyMjMzIEBACitlc2NhcGVfY2hhciAvCitjb21tZW50X2NoYXIgJQorCislIExpdGh1YW5pYW4gbGFuZ3VhZ2UgbG9jYWxlIGZvciBMaXRodWFuaWEKKyUgQ3JlYXRlZCBvbiBKYW51YXJ5IDMwLCAxOTkyCislICBieSBFZG11bmRhcyBNaXNlaWtpcywgQWxnaW1hbnRhcworJSAgT3NraW5pcyBhbmQgRXZhbGRhcyBLdWxib2thcworJSBSZXZpc2VkIG9uIEFwcmlsIDEwLCAxOTkyCislIFJldmlzZWQgb24gRmVicnVhcnkgOCwgMTk5MworJSBSZXZpc2VkIG9uIEFwcmlsIDMsIDE5OTMKKyUgUmV2aXNlZCBvbiBNYXkgMjIsIDE5OTMKKyUgUmV2aXNlZCBvbiBOb3ZlbWJlciAyMSwgMTk5MworJSBSZXZpc2VkIG9uIERlY2VtYmVyIDEsIDE5OTMKKyUgU291cmNlOiBMaXRodWFuaWFuIENvbXB1dGVyIFNvY2lldHkgYW5kCislICAgVGVjaG5pY2FsIGNvbW1pdHRlZSBmb3IgSVQgc3RhbmRhcmRpc2F0aW9uCislIEFkZHJlc3M6IFAuTyBCb3ggMTE0NywgRG9uZWxhaWM8aW8gNjAKKyUgICAzMDAwIEthdW5hcywgTGl0aHVhbmlhCislIFRlbDogKzM3MCAtIDcgLSAyMjM1MTAKKyUgRmF4OiArMzcwIC0gNyAtIDIyODUwMAorJSBDb250YWN0OiBFdmFsZGFzIEt1bGJva2FzCislIEVtYWlsOiBjb29sYm94QHNla2Eua3R1Lmx0CislIExhbmd1YWdlOiBsdAorJSBUZXJyaXRvcnk6IExUCislIFJldmlzaW9uOiA0LjAKKyUgRGF0ZTogMTk5NS0wOC0yOAorJSBBcHBsaWNhdGlvbjogZ2VuZXJhbAorJSBVc2VyczogZ2VuZXJhbAorJSBSZXBlcnRvaXJlbWFwOiBtbmVtb25pYy5kcworJSBDaGFyc2V0OiBCQUxUSUMKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkxpdGh1YW5pYW4gbG9jYWxlIGZvciBMaXRodWFuaWEiCitzb3VyY2UgICAgICJMaXRodWFuaWFuIENvbXB1dGVyIFNvY2lldHkgYW5kIgorYWRkcmVzcyAgICAiUC5PIEJveCAxMTQ3LCBEb25lbGFpY2lvIDYwLCAzMDAwIEthdW5hcywgTGl0aHVhbmlhIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkxpdGh1YW5pYW4iCit0ZXJyaXRvcnkgICJMaXRodWFuaWEiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA2LTI5IgorJQorY2F0ZWdvcnkgICJsdF9MVDoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJsdF9MVDoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJsdF9MVDoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImx0X0xUOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAibHRfTFQ6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJsdF9MVDoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJsdF9MVDoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJsdF9MVDoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJsdF9MVDoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImx0X0xUOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAibHRfTFQ6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DT0xMQVRFCisKKyUgQmFzZSBjb2xsYXRpb24gc2NoZW1lOiAxOTk0LTAzLTIyCisKKyUgT3JkZXJpbmcgYWxnb3JpdGhtOgorJSAgMS4gU3BhY2VzIGFuZCBoeXBoZW4gKGJ1dCBub3Qgc29mdAorJSAgICAgaHlwaGVuKSBiZWZvcmUgcHVuY3R1YXRpb24KKyUgICAgIGNoYXJhY3RlcnMsIHB1bmN0dWF0aW9uIGNoYXJhY3RlcnMKKyUgICAgIGJlZm9yZSBudW1iZXJzLAorJSAgICAgbnVtYmVycyBiZWZvcmUgbGV0dGVycy4KKyUgIDIuIExldHRlcnMgd2l0aCBkaWFjcml0aWNhbCBtYXJrcyBhcmUKKyUgICAgIG1lbWJlcnMgb2YgZXF1aXZhbGVuY2UgY2xhc3NlcworJSAgMy4gQSBkaXN0aW5jdGlvbiBpcyBtYWRlIHdpdGggcmVnYXJkcworJSAgICAgdG8gY2FzZSBhcyBub3RlZCBiZWxvdy4KKyUgIDQuIFNwZWNpYWwgY2hhcmFjdGVycyBhcmUgaWdub3JlZAorJSAgICAgd2hlbiBjb21wYXJpbmcgbGV0dGVycywgYnV0IHRoZW4KKyUgICAgIHRoZXkgYXJlIGNvbnNpZGVyZWQKKyUgIDUuIFRoZSBhbHBoYWJldHMgYXJlIHNvcnRlZCBpbiBvcmRlcgorJSAgICAgb2YgZmlyc3QgYXBwZWFyYW5jZSBpbiBJU08gMTA2NDY6CislICAgICBMYXRpbiwgR3JlZWssIEN5cmlsbGljLCBldGMuCislCislIEFjY29yZGluZyB0byBHcmVlayBzcGVjaWZpY2F0aW9ucywKKyUgdGhlIHN0ZXBzIDIuIGFuZCAzLiBhYm92ZSBhcmUgcmV2ZXJzZWQKKyUgZm9yIHRoZSBHcmVlayBzY3JpcHQKKworJSBjb2xsYXRpbmcgc3ltYm9scworCislIFRoZSBjb2xsYXRpbmcgc3ltYm9sIG5hbWluZyBpcworJSBtb3N0bHkgdGFrZW4gZnJvbSBJU08gMTA2NDYtMSwKKyUgZm9yIGV4YW1wbGUgdGhlIGNhc2UgYW5kIGFjY2VudAorJSBuYW1lcyBhcmUgZnJvbSB0aGlzIHN0YW5kYXJkLgorCitjb2xsYXRpbmctc3ltYm9sIDxDQVBJVEFMPgorY29sbGF0aW5nLXN5bWJvbCA8Q0FQSVRBTC1TTUFMTD4KK2NvbGxhdGluZy1zeW1ib2wgPFNNQUxMLUNBUElUQUw+Citjb2xsYXRpbmctc3ltYm9sIDxTTUFMTD4KKworJSA8Q0FQSVRBTC1TTUFMTD4gYW5kIDxTTUFMTC1DQVBJVEFMPgorJSBhcmUgZm9yIGNhc2VzIGxpa2UgRGFuaXNoIDxVMDA0MT48VTAwNjE+CislIGFuZCBTcGFuaXNoIDxVMDA0Mz48VTAwNjg+IGJlaW5nIHRyZWF0ZWQKKyUgYXMgb25lIGxldHRlci4KKworJSBUaGUgPGE4PiAuLi4uLi4gPHo4PiBjb2xsYXRpbmcKKyUgc3ltYm9scyBoYXZlIGRlZmluZWQgd2VpZ2h0cyBhcworJSB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gYSBncm91cCBvZgorJSBMYXRpbiBsZXR0ZXJzLiBUaGV5IGFyZSB1c2VkCislIHRvIHNwZWNpZnkgZGVsdGFzIGJ5IGxvY2FsZXMgdXNpbmcKKyUgYSBsb2NhbGUgYXMgdGhlIGRlZmF1bHQgb3JkZXJpbmcKKyUgYW5kIGJ5ICJyZXBsYWNlLWFmdGVyIiBzdGF0ZW1lbnRzCislIHNwZWNpZnlpbmcgdGhlIGNoYW5nZWQgcGxhY2VtZW50CislIGluIGFuIG9yZGVyaW5nIG9mIGEgY2hhcmFjdGVyLgorCitjb2xsYXRpbmctc3ltYm9sIDxhOD4KK2NvbGxhdGluZy1zeW1ib2wgPGI4PgorY29sbGF0aW5nLXN5bWJvbCA8Yzg+Citjb2xsYXRpbmctc3ltYm9sIDxkOD4KK2NvbGxhdGluZy1zeW1ib2wgPGU4PgorY29sbGF0aW5nLXN5bWJvbCA8Zjg+Citjb2xsYXRpbmctc3ltYm9sIDxnOD4KK2NvbGxhdGluZy1zeW1ib2wgPGg4PgorY29sbGF0aW5nLXN5bWJvbCA8aTg+Citjb2xsYXRpbmctc3ltYm9sIDxqOD4KK2NvbGxhdGluZy1zeW1ib2wgPGs4PgorY29sbGF0aW5nLXN5bWJvbCA8bDg+Citjb2xsYXRpbmctc3ltYm9sIDxtOD4KK2NvbGxhdGluZy1zeW1ib2wgPG44PgorY29sbGF0aW5nLXN5bWJvbCA8bzg+Citjb2xsYXRpbmctc3ltYm9sIDxwOD4KK2NvbGxhdGluZy1zeW1ib2wgPHE4PgorY29sbGF0aW5nLXN5bWJvbCA8cjg+Citjb2xsYXRpbmctc3ltYm9sIDxzOD4KK2NvbGxhdGluZy1zeW1ib2wgPHQ4PgorY29sbGF0aW5nLXN5bWJvbCA8dTg+Citjb2xsYXRpbmctc3ltYm9sIDx2OD4KK2NvbGxhdGluZy1zeW1ib2wgPHc4PgorY29sbGF0aW5nLXN5bWJvbCA8eDg+Citjb2xsYXRpbmctc3ltYm9sIDx5OD4KK2NvbGxhdGluZy1zeW1ib2wgPHo4PgorCitjb2xsYXRpbmctc3ltYm9sIDxOT05FPgorY29sbGF0aW5nLXN5bWJvbCA8QUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxBQ1VURStET1Q+Citjb2xsYXRpbmctc3ltYm9sIDxHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPERPVUJMRS1HUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkUrQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxCUkVWRStHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFK01BQ1JPTj4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFK0hPT0s+Citjb2xsYXRpbmctc3ltYm9sIDxCUkVWRStUSUxERT4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFK0RPVC1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFLUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8SU5WRVJURUQtQlJFVkU+Citjb2xsYXRpbmctc3ltYm9sIDxDSVJDVU1GTEVYPgorY29sbGF0aW5nLXN5bWJvbCA8Q0lSQ1VNRkxFWCtBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPENJUkNVTUZMRVgrR1JBVkU+Citjb2xsYXRpbmctc3ltYm9sIDxDSVJDVU1GTEVYK0hPT0s+Citjb2xsYXRpbmctc3ltYm9sIDxDSVJDVU1GTEVYK1RJTERFPgorY29sbGF0aW5nLXN5bWJvbCA8Q0lSQ1VNRkxFWCtET1QtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxDQVJPTj4KK2NvbGxhdGluZy1zeW1ib2wgPENBUk9OK0RJQUVSRVNJUz4KK2NvbGxhdGluZy1zeW1ib2wgPENBUk9OK0RPVD4KK2NvbGxhdGluZy1zeW1ib2wgPFJJTkc+Citjb2xsYXRpbmctc3ltYm9sIDxSSU5HK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8UklORy1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPERJQUVSRVNJUz4KK2NvbGxhdGluZy1zeW1ib2wgPERJQUVSRVNJUytNQUNST04+Citjb2xsYXRpbmctc3ltYm9sIDxESUFFUkVTSVMrQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxESUFFUkVTSVMrR1JBVkU+Citjb2xsYXRpbmctc3ltYm9sIDxESUFFUkVTSVMrQ0FST04+Citjb2xsYXRpbmctc3ltYm9sIDxET1VCTEUtQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxIT09LPgorY29sbGF0aW5nLXN5bWJvbCA8VElMREU+Citjb2xsYXRpbmctc3ltYm9sIDxUSUxERStBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPFRJTERFK0RJQUVSRVNJUz4KK2NvbGxhdGluZy1zeW1ib2wgPFRJTERFLUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8RE9UPgorY29sbGF0aW5nLXN5bWJvbCA8RE9ULUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8RE9UK0RPVC1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPFNUUk9LRT4KK2NvbGxhdGluZy1zeW1ib2wgPFNUUk9LRStBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPENFRElMTEE+Citjb2xsYXRpbmctc3ltYm9sIDxDRURJTExBK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8Q0VESUxMQStHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPENFRElMTEErQlJFVkU+Citjb2xsYXRpbmctc3ltYm9sIDxPR09ORUs+Citjb2xsYXRpbmctc3ltYm9sIDxPR09ORUsrTUFDUk9OPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0dSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0RJQUVSRVNJUz4KK2NvbGxhdGluZy1zeW1ib2wgPE1BQ1JPTitESUFFUkVTSVMtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04rRE9UPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0RPVC1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPE1BQ1JPTitDSVJDVU1GTEVYPgorY29sbGF0aW5nLXN5bWJvbCA8TElORS1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPEhPUk4+Citjb2xsYXRpbmctc3ltYm9sIDxIT1JOK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8SE9STitHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPEhPUk4rSE9PSz4KK2NvbGxhdGluZy1zeW1ib2wgPEhPUk4rVElMREU+Citjb2xsYXRpbmctc3ltYm9sIDxIT1JOK0RPVC1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPFBSRUNFREVELUJZLUFQT1NUUk9QSEU+Citjb2xsYXRpbmctc3ltYm9sIDxHUkVFSz4KK2NvbGxhdGluZy1zeW1ib2wgPFRPTk9TPgorY29sbGF0aW5nLXN5bWJvbCA8RElBTFlUSUNBPgorY29sbGF0aW5nLXN5bWJvbCA8RElBTFlUSUNBK1RPTk9TPgorY29sbGF0aW5nLXN5bWJvbCA8Q1lSSUxMSUM+Citjb2xsYXRpbmctc3ltYm9sIDxISVJBR0FOQT4KK2NvbGxhdGluZy1zeW1ib2wgPEtBVEFLQU5BPgorY29sbGF0aW5nLXN5bWJvbCA8U1BFQ0lBTD4KKworJSBsZXR0ZXI7YWNjZW50O2Nhc2U7c3BlY2lhbHMKKworb3JkZXJfc3RhcnQgZm9yd2FyZDtiYWNrd2FyZC8KKyAgICAgICAgICAgIDtmb3J3YXJkO3Bvc2l0aW9uCisKKyUgPENBUElUQUw+IG9yIDxTTUFMTD4gbGV0dGVycyBmaXJzdDoKKworPENBUElUQUw+Cis8Q0FQSVRBTC1TTUFMTD4KKzxTTUFMTC1DQVBJVEFMPgorPFNNQUxMPgorCislIEFjY2VudHM6CisKKzxOT05FPgorPEFDVVRFPgorPEFDVVRFK0RPVD4KKzxHUkFWRT4KKzxET1VCTEUtR1JBVkU+Cis8QlJFVkU+Cis8QlJFVkUrQUNVVEU+Cis8QlJFVkUrR1JBVkU+Cis8QlJFVkUrTUFDUk9OPgorPEJSRVZFK0hPT0s+Cis8QlJFVkUrVElMREU+Cis8QlJFVkUrRE9ULUJFTE9XPgorPEJSRVZFLUJFTE9XPgorPElOVkVSVEVELUJSRVZFPgorPENJUkNVTUZMRVg+Cis8Q0lSQ1VNRkxFWCtBQ1VURT4KKzxDSVJDVU1GTEVYK0dSQVZFPgorPENJUkNVTUZMRVgrSE9PSz4KKzxDSVJDVU1GTEVYK1RJTERFPgorPENJUkNVTUZMRVgrRE9ULUJFTE9XPgorPENBUk9OPgorPENBUk9OK0RJQUVSRVNJUz4KKzxDQVJPTitET1Q+Cis8UklORz4KKzxSSU5HK0FDVVRFPgorPFJJTkctQkVMT1c+Cis8RElBRVJFU0lTPgorPERJQUVSRVNJUytNQUNST04+Cis8RElBRVJFU0lTK0FDVVRFPgorPERJQUVSRVNJUytHUkFWRT4KKzxESUFFUkVTSVMrQ0FST04+Cis8RE9VQkxFLUFDVVRFPgorPEhPT0s+Cis8VElMREU+Cis8VElMREUrQUNVVEU+Cis8VElMREUrRElBRVJFU0lTPgorPFRJTERFLUJFTE9XPgorPERPVD4KKzxET1QtQkVMT1c+Cis8RE9UK0RPVC1CRUxPVz4KKzxTVFJPS0U+Cis8U1RST0tFK0FDVVRFPgorPENFRElMTEE+Cis8Q0VESUxMQStBQ1VURT4KKzxDRURJTExBK0dSQVZFPgorPENFRElMTEErQlJFVkU+Cis8T0dPTkVLPgorPE9HT05FSytNQUNST04+Cis8TUFDUk9OPgorPE1BQ1JPTitBQ1VURT4KKzxNQUNST04rR1JBVkU+Cis8TUFDUk9OK0RJQUVSRVNJUz4KKzxNQUNST04rRElBRVJFU0lTLUJFTE9XPgorPE1BQ1JPTitET1Q+Cis8TUFDUk9OK0RPVC1CRUxPVz4KKzxNQUNST04rQ0lSQ1VNRkxFWD4KKzxMSU5FLUJFTE9XPgorPEhPUk4+Cis8SE9STitBQ1VURT4KKzxIT1JOK0dSQVZFPgorPEhPUk4rSE9PSz4KKzxIT1JOK1RJTERFPgorPEhPUk4rRE9ULUJFTE9XPgorPFBSRUNFREVELUJZLUFQT1NUUk9QSEU+Cis8R1JFRUs+Cis8VE9OT1M+Cis8RElBTFlUSUNBPgorPERJQUxZVElDQStUT05PUz4KKzxDWVJJTExJQz4KKzxISVJBR0FOQT4KKzxLQVRBS0FOQT4KKzxTUEVDSUFMPgorCis8VTAwQTA+CTxVMDBBMD47PFUwMEEwPjs8VTAwQTA+O0lHTk9SRQorPFUwMDIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjA+Cis8VTAwMDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwOT4KKzxVMDAwQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBCPgorPFUwMDBEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMEQ+Cis8VTAwMEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwQT4KKzxVMDAwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBDPgorPFUwMDVGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNUY+Cis8VTAwQUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBRj4KKzxVMDBBRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEFEPgorPFUwMDJEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMkQ+Cis8VTAwMkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyQz4KKzxVMDAzQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDNCPgorPFUwMDNBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwM0E+Cis8VTAwMjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyMT4KKzxVMDBBMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEExPgorPFUwMDNGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwM0Y+Cis8VTAwQkY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCRj4KKzxVMDAyRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDJGPgorPFUwMDJFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMkU+Cis8VTAwQjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCND4KKzxVMDA2MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDYwPgorPFUwMDVFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNUU+Cis8VTAwQTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBOD4KKzxVMDA3RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDdFPgorPFUwMEI3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjc+Cis8VTAwQjg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCOD4KKzxVMDAyNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDI3PgorPFUyMDE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTg+Cis8VTIwMTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxOT4KKzxVMDAyMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDIyPgorPFUyMDFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMUM+Cis8VTIwMUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxRD4KKzxVMDBBQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEFCPgorPFUwMEJCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQkI+Cis8VTAwMjg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyOD4KKzxVMjA3RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDdEPgorPFUwMDI5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjk+Cis8VTIwN0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA3RT4KKzxVMDA1Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDVCPgorPFUwMDVEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNUQ+Cis8VTAwN0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA3Qj4KKzxVMDA3RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDdEPgorPFUwMEE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTc+Cis8VTAwQjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCNj4KKzxVMDBBOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEE5PgorPFUwMEFFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQUU+Cis8VTAwNDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA0MD4KKzxVMDBBND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEE0PgorPFUwMEEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTI+Cis8VTAwMjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyND4KKzxVMDBBMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEEzPgorPFUwMEE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTU+Cis8VTAwMkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyQT4KKzxVMDA1Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDVDPgorPFUwMDI2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjY+Cis8VTAwMjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyMz4KKzxVMDAyNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDI1PgorPFUyMDdCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwN0I+Cis8VTAwMkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyQj4KKzxVMjA3QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDdBPgorPFUwMEIxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjE+Cis8VTAwRjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBGNz4KKzxVMDBENz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEQ3PgorPFUyMjYwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNjA+Cis8VTAwM0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAzQz4KKzxVMjI2ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjY0PgorPFUwMDNEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwM0Q+Cis8VTIyNjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2NT4KKzxVMDAzRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDNFPgorPFUwMEFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQUM+Cis8VTAwN0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA3Qz4KKzxVMDBBNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEE2PgorPFUwMEIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjA+Cis8VTAwQjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCNT4KKzxVMDJDNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkM3PgorPFUwMkQ4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAyRDg+Cis8VTAyRDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDJEOT4KKzxVMDJEQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkRBPgorPFUwMkRCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAyREI+Cis8VTAyREM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDJEQz4KKzxVMDJERD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkREPgorPFUwMzc0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzNzQ+Cis8VTAzNzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDM3NT4KKzxVMDM3QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzdBPgorPFUwMzdFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzN0U+Cis8VTAzODQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDM4ND4KKzxVMDM4NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzg1PgorPFUwMzg3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzODc+Cis8VTAzRDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDNEMD4KKzxVMUZCRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkJGPgorPFUxRkMwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGQzA+Cis8VTFGQzE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZDMT4KKzxVMUZDRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkNEPgorPFUxRkNFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGQ0U+Cis8VTFGQ0Y+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZDRj4KKzxVMUZERD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkREPgorPFUxRkRFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGREU+Cis8VTFGREY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZERj4KKzxVMUZFRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkVEPgorPFUxRkVGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGRUY+Cis8VTFGRkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZGRT4KKzxVMjAwMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDAyPgorPFUyMDAzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMDM+Cis8VTIwMDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwND4KKzxVMjAwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDA1PgorPFUyMDA2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMDY+Cis8VTIwMEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwRT4KKzxVMjAwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDBGPgorPFUyMDA5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMDk+Cis8VTIwMEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwQT4KKzxVMjAxMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDEwPgorPFUyMDEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTM+Cis8VTIwMTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxND4KKzxVMjAxNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDE1PgorPFUyMDE2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTY+Cis8VTIwMTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxNz4KKzxVMjAxQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDFBPgorPFUyMDFCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMUI+Cis8VTIwMUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxRT4KKzxVMjAxRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDFGPgorPFUyMDIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMjA+Cis8VTIwMjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAyMT4KKzxVMjIxOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjE5PgorPFUyMDI1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMjU+Cis8VTIwMjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAyNj4KKzxVMjAzMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDMwPgorPFUyMDMyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzI+Cis8VTIwMzM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzMz4KKzxVMjAzND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDM0PgorPFUyMDM1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzU+Cis8VTIwMzY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzNj4KKzxVMjAzNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDM3PgorPFUyMDM4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzg+Cis8VTIwMzk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzOT4KKzxVMjAzQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDNBPgorPFUyMDNCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwM0I+Cis8VTIwM0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzQz4KKzxVMjAzRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDNFPgorPFUyMDdDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwN0M+Cis8VTIwODA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4MD4KKzxVMjA4MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDgxPgorPFUyMDgyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODI+Cis8VTIwODM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4Mz4KKzxVMjA4ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDg0PgorPFUyMDg1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODU+Cis8VTIwODY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4Nj4KKzxVMjA4Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDg3PgorPFUyMDg4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODg+Cis8VTIwODk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4OT4KKzxVMjA4QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDhBPgorPFUyMDhCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwOEI+Cis8VTIwOEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4Qz4KKzxVMjA4RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDhEPgorPFUyMDhFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwOEU+Cis8VTIwQTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjBBMz4KKzxVMjBBND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMEE0PgorPFUyMEE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwQTc+Cis8VTIwQTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjBBOT4KKzxVMjEwMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTAzPgorPFUyMTA1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMDU+Cis8VTIxMDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjEwOT4KKzxVMjExNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTE2PgorPFUyMTE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMTc+Cis8VTIxMUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjExRT4KKzxVMjEyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTIwPgorPFUyMTIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMjI+Cis8VTIxMjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjEyNj4KKzxVMjEyQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTJCPgorPFUyMTUzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTM+Cis8VTIxNTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1ND4KKzxVMjE1NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTU1PgorPFUyMTU2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTY+Cis8VTIxNTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1Nz4KKzxVMjE1OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTU4PgorPFUyMTU5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTk+Cis8VTIxNUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1QT4KKzxVMjE2MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTYwPgorPFUyMTYxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjE+Cis8VTIxNjI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2Mj4KKzxVMjE2Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTYzPgorPFUyMTY0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjQ+Cis8VTIxNjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2NT4KKzxVMjE2Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTY2PgorPFUyMTY3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjc+Cis8VTIxNjg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2OD4KKzxVMjE2OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTY5PgorPFUyMTZBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNkE+Cis8VTIxNkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2Qj4KKzxVMjE2Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTZDPgorPFUyMTZEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNkQ+Cis8VTIxNkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2RT4KKzxVMjE2Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTZGPgorPFUyMTcwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzA+Cis8VTIxNzE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3MT4KKzxVMjE3Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTcyPgorPFUyMTczPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzM+Cis8VTIxNzQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3ND4KKzxVMjE3NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTc1PgorPFUyMTc2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzY+Cis8VTIxNzc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3Nz4KKzxVMjE3OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTc4PgorPFUyMTc5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzk+Cis8VTIxN0E+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3QT4KKzxVMjE3Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTdCPgorPFUyMTdDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxN0M+Cis8VTIxN0Q+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3RD4KKzxVMjE3RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTdFPgorPFUyMTdGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxN0Y+Cis8VTIxODA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE4MD4KKzxVMjE4MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTgxPgorPFUyMTgyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxODI+Cis8VTIxOTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5MT4KKzxVMjE5Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTkzPgorPFUyMTk0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxOTQ+Cis8VTIxOTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5NT4KKzxVMjE5Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTk2PgorPFUyMTk3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxOTc+Cis8VTIxOTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5OD4KKzxVMjE5OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTk5PgorPFUyMUE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxQTg+Cis8VTIxQzA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjFDMD4KKzxVMjFEMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMUQwPgorPFUyMUQyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxRDI+Cis8VTIxRDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjFEND4KKzxVMjIwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjAwPgorPFUyMjAyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMDI+Cis8VTIyMDM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwMz4KKzxVMjIwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjA1PgorPFUyMjA2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMDY+Cis8VTIyMDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwNz4KKzxVMjIwOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjA4PgorPFUyMjBCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMEI+Cis8VTIyMEY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwRj4KKzxVMjIxMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjExPgorPFUyMjEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMTI+Cis8VTIyMTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxMz4KKzxVMjIxND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjE0PgorPFUyMDQ0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwNDQ+Cis8VTIyMTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxNz4KKzxVMjIxOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjE4PgorPFUyMDIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMjI+Cis8VTIyMUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxQT4KKzxVMjIxRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjFEPgorPFUyMjFFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMUU+Cis8VTIyMUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxRj4KKzxVMjIyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjIwPgorPFUyMjI1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMjU+Cis8VTIyMjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyNz4KKzxVMjIyOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjI4PgorPFUyMjI5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMjk+Cis8VTIyMkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyQT4KKzxVMjIyQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjJCPgorPFUyMjJDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMkM+Cis8VTIyMkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyRT4KKzxVMjIzND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjM0PgorPFUyMjM1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMzU+Cis8VTIyMzY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIzNj4KKzxVMjIzNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjM3PgorPFUyMjNDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyM0M+Cis8VTIyM0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIzRT4KKzxVMjI0Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjQzPgorPFUyMjQ1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNDU+Cis8VTIyNDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI0OD4KKzxVMjI0Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjRDPgorPFUyMjUzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNTM+Cis8VTIyNjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2MT4KKzxVMjI2QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjZBPgorPFUyMjZCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNkI+Cis8VTIyNkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2RT4KKzxVMjI2Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjZGPgorPFUyMjgyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyODI+Cis8VTIyODM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI4Mz4KKzxVMjI4Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjg2PgorPFUyMjg3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyODc+Cis8VTIyOTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI5OT4KKzxVMjI5QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjlBPgorPFUyMkE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyQTU+Cis8VTIyQzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjJDNT4KKzxVMjJFRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMkVFPgorPFUyMzAyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMDI+Cis8VTIzMDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMwOD4KKzxVMjMwOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzA5PgorPFUyMzBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMEE+Cis8VTIzMEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMwQj4KKzxVMjMxMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzEwPgorPFUyMzEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMTI+Cis8VTIzMTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMxNT4KKzxVMjMyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzIwPgorPFUyMzIxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMjE+Cis8VTI0MjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQyMz4KKzxVMjQ0MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQwPgorPFUyNDQxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDE+Cis8VTI0NDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ0Mj4KKzxVMjQ0Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQzPgorPFUyNDQ2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDY+Cis8VTI0NDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ0Nz4KKzxVMjQ0OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQ4PgorPFUyNDQ5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDk+Cis8VTI0NjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2MD4KKzxVMjQ2MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDYxPgorPFUyNDYyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NjI+Cis8VTI0NjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Mz4KKzxVMjQ2ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDY0PgorPFUyNDY1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NjU+Cis8VTI0NjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Nj4KKzxVMjQ2Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDY3PgorPFUyNDY4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0Njg+Cis8VTI0Njk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2OT4KKzxVMjQ2QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDZBPgorPFUyNDZCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NkI+Cis8VTI0NkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Qz4KKzxVMjQ2RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDZEPgorPFUyNDZFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NkU+Cis8VTI0NkY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Rj4KKzxVMjQ3MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDcwPgorPFUyNDcxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NzE+Cis8VTI0NzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3Mj4KKzxVMjQ3Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDczPgorPFUyNDc0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NzQ+Cis8VTI0NzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3NT4KKzxVMjQ3Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDc2PgorPFUyNDc3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0Nzc+Cis8VTI0Nzg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3OD4KKzxVMjQ3OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDc5PgorPFUyNDdBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0N0E+Cis8VTI0N0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3Qj4KKzxVMjQ3Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDdDPgorPFUyNDdEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0N0Q+Cis8VTI0N0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3RT4KKzxVMjQ3Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDdGPgorPFUyNDgwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODA+Cis8VTI0ODE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4MT4KKzxVMjQ4Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDgyPgorPFUyNDgzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODM+Cis8VTI0ODQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4ND4KKzxVMjQ4NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDg1PgorPFUyNDg2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODY+Cis8VTI0ODc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4Nz4KKzxVMjQ4OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDg4PgorPFUyNDg5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODk+Cis8VTI0OEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4QT4KKzxVMjQ4Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDhCPgorPFUyNDhDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OEM+Cis8VTI0OEQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4RD4KKzxVMjQ4RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDhFPgorPFUyNDhGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OEY+Cis8VTI0OTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5MD4KKzxVMjQ5MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDkxPgorPFUyNDkyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTI+Cis8VTI0OTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5Mz4KKzxVMjQ5ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDk0PgorPFUyNDk1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTU+Cis8VTI0OTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5Nj4KKzxVMjQ5Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDk3PgorPFUyNDk4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTg+Cis8VTI0OTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5OT4KKzxVMjQ5QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDlBPgorPFUyNDlCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OUI+Cis8VTI0RUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjRFQT4KKzxVMjUwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTAwPgorPFUyNTUwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTA+Cis8VTI1MDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwMj4KKzxVMjU1MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTUxPgorPFUyNTA0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MDQ+Cis8VTI1MDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwNT4KKzxVMjUwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTA2PgorPFUyNTA3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MDc+Cis8VTI1MDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwOD4KKzxVMjUwOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTA5PgorPFUyNTBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MEE+Cis8VTI1MEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwQj4KKzxVMjUwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTBDPgorPFUyNTUyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTI+Cis8VTI1NTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Mz4KKzxVMjU1ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTU0PgorPFUyNTEwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MTA+Cis8VTI1NTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1NT4KKzxVMjU1Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTU2PgorPFUyNTU3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTc+Cis8VTI1MTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUxND4KKzxVMjU1OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTU4PgorPFUyNTU5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTk+Cis8VTI1NUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1QT4KKzxVMjUxOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTE4PgorPFUyNTVCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NUI+Cis8VTI1NUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Qz4KKzxVMjU1RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTVEPgorPFUyNTFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MUM+Cis8VTI1NUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1RT4KKzxVMjUxRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTFFPgorPFUyNTFGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MUY+Cis8VTI1NUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Rj4KKzxVMjUyMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTIxPgorPFUyNTIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MjI+Cis8VTI1NjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2MD4KKzxVMjUyND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTI0PgorPFUyNTYxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjE+Cis8VTI1MjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyNj4KKzxVMjUyNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTI3PgorPFUyNTYyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjI+Cis8VTI1Mjk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyOT4KKzxVMjUyQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTJBPgorPFUyNTYzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjM+Cis8VTI1MkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyQz4KKzxVMjUyRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTJEPgorPFUyNTJFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MkU+Cis8VTI1NjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2ND4KKzxVMjU2NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTY1PgorPFUyNTMxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MzE+Cis8VTI1MzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzMj4KKzxVMjU2Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTY2PgorPFUyNTM0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MzQ+Cis8VTI1MzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzNT4KKzxVMjUzNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTM2PgorPFUyNTY3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Njc+Cis8VTI1Njg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2OD4KKzxVMjUzOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTM5PgorPFUyNTNBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1M0E+Cis8VTI1Njk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2OT4KKzxVMjUzQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTNDPgorPFUyNTNEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1M0Q+Cis8VTI1M0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzRT4KKzxVMjU2QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTZBPgorPFUyNTQwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDA+Cis8VTI1NDE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0MT4KKzxVMjU2Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTZCPgorPFUyNTQzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDM+Cis8VTI1NDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0ND4KKzxVMjU0NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTQ1PgorPFUyNTQ2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDY+Cis8VTI1NDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0Nz4KKzxVMjU0OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTQ4PgorPFUyNTQ5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDk+Cis8VTI1NEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0QT4KKzxVMjU2Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTZDPgorPFUyNTcxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NzE+Cis8VTI1NzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU3Mj4KKzxVMjU4MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTgwPgorPFUyNTg0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1ODQ+Cis8VTI1ODg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU4OD4KKzxVMjU4Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNThDPgorPFUyNTkwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1OTA+Cis8VTI1OTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU5MT4KKzxVMjU5Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTkyPgorPFUyNTkzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1OTM+Cis8VTI1QTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBMD4KKzxVMjVBMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUExPgorPFUyNUEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTI+Cis8VTI1QTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBMz4KKzxVMjVBND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUE0PgorPFUyNUE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTU+Cis8VTI1QTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBNj4KKzxVMjVBNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUE3PgorPFUyNUE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTg+Cis8VTI1QTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBOT4KKzxVMjVBQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUFBPgorPFUyNUFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QUM+Cis8VTI1QUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBRD4KKzxVMjVCMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUIyPgorPFUyNUIzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QjM+Cis8VTI1Qjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVCNz4KKzxVMjVCQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUJBPgorPFUyNUJDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QkM+Cis8VTI1QkQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVCRD4KKzxVMjVDMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUMxPgorPFUyNUM0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QzQ+Cis8VTI1QzY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVDNj4KKzxVMjVDNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUM3PgorPFUyNUNBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Q0E+Cis8VTI1Q0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVDQj4KKzxVMjVDRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUNFPgorPFUyNUNGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Q0Y+Cis8VTI1RDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVEMD4KKzxVMjVEMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUQxPgorPFUyNUQ4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1RDg+Cis8VTI1RDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVEOT4KKzxVMjVFMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUUyPgorPFUyNUUzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1RTM+Cis8VTI1RUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVFRj4KKzxVMjYwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjA1PgorPFUyNjA2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2MDY+Cis8VTI2MEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYwRT4KKzxVMjYwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjBGPgorPFUyNjFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2MUM+Cis8VTI2MUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYxRT4KKzxVMjYzQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjNBPgorPFUyNjNCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2M0I+Cis8VTI2M0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYzQz4KKzxVMjY0MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjQwPgorPFUyNjQyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NDI+Cis8VTI2NjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2MD4KKzxVMjY2MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjYxPgorPFUyNjYyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NjI+Cis8VTI2NjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2Mz4KKzxVMjY2ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjY0PgorPFUyNjY1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NjU+Cis8VTI2NjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2Nj4KKzxVMjY2Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjY3PgorPFUyNjY5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2Njk+Cis8VTI2NkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2QT4KKzxVMjY2Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjZCPgorPFUyNjZDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NkM+Cis8VTI2NkQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2RD4KKzxVMjY2RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjZFPgorPFUyNjZGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NkY+Cis8VTI3MTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjcxMz4KKzxVMjcxNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNzE3PgorPFUyNzIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI3MjA+Cis8VTMwMDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwMD4KKzxVMzAwMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDAxPgorPFUzMDAyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMDI+Cis8VTMwMDM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwMz4KKzxVMzAwND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDA0PgorPFUzMDA1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMDU+Cis8VTMwMDY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwNj4KKzxVMzAwNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDA3PgorPFUzMDBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMEE+Cis8VTMwMEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwQj4KKzxVMzAwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDBDPgorPFUzMDBEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMEQ+Cis8VTMwMEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwRT4KKzxVMzAwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDBGPgorPFUzMDEwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTA+Cis8VTMwMTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxMT4KKzxVMzAxMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDEyPgorPFUzMDEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTM+Cis8VTMwMTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxND4KKzxVMzAxNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDE1PgorPFUzMDE2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTY+Cis8VTMwMTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxNz4KKzxVMzAxQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDFDPgorPFUzMDIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMjA+Cis8VTMwOUI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzA5Qj4KKzxVMzA5Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDlDPgorPFUzMDlEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwOUQ+Cis8VTMwOUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzA5RT4KKzxVMzBGQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMEZCPgorPFUzMEZDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwRkM+Cis8VTMwRkQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzBGRD4KKzxVMzBGRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMEZFPgorPFUzMjFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMUM+Cis8VTMyMjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyMD4KKzxVMzIyMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjIxPgorPFUzMjIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjI+Cis8VTMyMjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyMz4KKzxVMzIyND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjI0PgorPFUzMjI1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjU+Cis8VTMyMjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyNj4KKzxVMzIyNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjI3PgorPFUzMjI4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjg+Cis8VTMyMjk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyOT4KKzxVMzI3Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjdGPgorPFUzM0MyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMzQzI+Cis8VTMzRDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzNEOD4KKzxVMDAwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDAwPgorPFUwMDAxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDE+Cis8VTAwMDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwMj4KKzxVMDAwMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDAzPgorPFUwMDA0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDQ+Cis8VTAwMDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwNT4KKzxVMDAwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA2PgorPFUwMDA3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDc+Cis8VTAwMDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwOD4KKzxVMDAwRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBFPgorPFUwMDBGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMEY+Cis8VTAwMTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxMD4KKzxVMDAxMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDExPgorPFUwMDEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTI+Cis8VTAwMTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxMz4KKzxVMDAxND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE0PgorPFUwMDE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTU+Cis8VTAwMTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxNj4KKzxVMDAxNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE3PgorPFUwMDE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTg+Cis8VTAwMTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxOT4KKzxVMDAxQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFBPgorPFUwMDFCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMUI+Cis8VTAwMUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxQz4KKzxVMDAxRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFEPgorPFUwMDFFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMUU+Cis8VTAwMUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxRj4KKzxVMDA3Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDdGPgorPFUwMDgwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODA+Cis8VTAwODE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4MT4KKzxVMDA4Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDgyPgorPFUwMDgzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODM+Cis8VTAwODQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4ND4KKzxVMDA4NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDg1PgorPFUwMDg2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODY+Cis8VTAwODc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4Nz4KKzxVMDA4OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDg4PgorPFUwMDg5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODk+Cis8VTAwOEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4QT4KKzxVMDA4Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDhCPgorPFUwMDhDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOEM+Cis8VTAwOEQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4RD4KKzxVMDA4RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDhFPgorPFUwMDhGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOEY+Cis8VTAwOTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5MD4KKzxVMDA5MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDkxPgorPFUwMDkyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTI+Cis8VTAwOTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Mz4KKzxVMDA5ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDk0PgorPFUwMDk1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTU+Cis8VTAwOTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Nj4KKzxVMDA5Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDk3PgorPFUwMDk4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTg+Cis8VTAwOTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5OT4KKzxVMDA5QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDlBPgorPFUwMDlCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOUI+Cis8VTAwOUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Qz4KKzxVMDA5RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDlEPgorPFUwMDlFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOUU+Cis8VTAwOUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Rj4KKzxVRTAwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDAwPgorPFVFMDAxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDE+Cis8VUUwMDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwMj4KKzxVMDMwMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzAxPgorPFVFMDA0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDQ+Cis8VUUwMDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwNT4KKzxVRTAwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDA2PgorPFVFMDA3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDc+Cis8VUUwMDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwOD4KKzxVRTAwOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDA5PgorPFVFMDBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMEE+Cis8VUUwMEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwQj4KKzxVRTAwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDBDPgorPFVFMDBEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMEQ+Cis8VUUwMEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwRT4KKzxVRTAwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDBGPgorPCI9PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8Ij0+Cis8VUUwMTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxMT4KKzxVRTAxMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDEyPgorPFVFMDEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMTM+Cis8VUUwMTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxND4KKzxVRTAxNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDE1PgorPFVFMDE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMTc+Cis8VUUwMTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxOD4KKzxVRTAxOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDE5PgorVU5ERUZJTkVECUlHTk9SRTtJR05PUkU7SUdOT1JFCisKKzxVMDAzMD4JPFUwMDMwPjs8VTAwMzA+O0lHTk9SRTtJR05PUkUKKzxVMjA3MD4JPFUwMDMwPjs8VTIwNzA+O0lHTk9SRTtJR05PUkUKKzxVMjE1Qj4JPFUwMDMwPjs8VTIxNUI+O0lHTk9SRTtJR05PUkUKKzxVMDBCQz4JPFUwMDMwPjs8VTAwQkM+O0lHTk9SRTtJR05PUkUKKzxVMjE1Qz4JPFUwMDMwPjs8VTIxNUM+O0lHTk9SRTtJR05PUkUKKzxVMDBCRD4JPFUwMDMwPjs8VTAwQkQ+O0lHTk9SRTtJR05PUkUKKzxVMjE1RD4JPFUwMDMwPjs8VTIxNUQ+O0lHTk9SRTtJR05PUkUKKzxVMDBCRT4JPFUwMDMwPjs8VTAwQkU+O0lHTk9SRTtJR05PUkUKKzxVMjE1RT4JPFUwMDMwPjs8VTIxNUU+O0lHTk9SRTtJR05PUkUKKzxVMDAzMT4JPFUwMDMxPjs8VTAwMzE+O0lHTk9SRTtJR05PUkUKKzxVMDAzMj4JPFUwMDMyPjs8VTAwMzI+O0lHTk9SRTtJR05PUkUKKzxVMDAzMz4JPFUwMDMzPjs8VTAwMzM+O0lHTk9SRTtJR05PUkUKKzxVMDAzND4JPFUwMDM0Pjs8VTAwMzQ+O0lHTk9SRTtJR05PUkUKKzxVMDAzNT4JPFUwMDM1Pjs8VTAwMzU+O0lHTk9SRTtJR05PUkUKKzxVMDAzNj4JPFUwMDM2Pjs8VTAwMzY+O0lHTk9SRTtJR05PUkUKKzxVMDAzNz4JPFUwMDM3Pjs8VTAwMzc+O0lHTk9SRTtJR05PUkUKKzxVMDAzOD4JPFUwMDM4Pjs8VTAwMzg+O0lHTk9SRTtJR05PUkUKKzxVMDAzOT4JPFUwMDM5Pjs8VTAwMzk+O0lHTk9SRTtJR05PUkUKKzxVMDBCOT4JPFUwMDMxPjs8VTAwQjk+O0lHTk9SRTtJR05PUkUKKzxVMDBCMj4JPFUwMDMyPjs8VTAwQjI+O0lHTk9SRTtJR05PUkUKKzxVMDBCMz4JPFUwMDMzPjs8VTAwQjM+O0lHTk9SRTtJR05PUkUKKzxVMjA3ND4JPFUwMDM0Pjs8VTIwNzQ+O0lHTk9SRTtJR05PUkUKKzxVMjA3NT4JPFUwMDM1Pjs8VTIwNzU+O0lHTk9SRTtJR05PUkUKKzxVMjA3Nj4JPFUwMDM2Pjs8VTIwNzY+O0lHTk9SRTtJR05PUkUKKzxVMjA3Nz4JPFUwMDM3Pjs8VTIwNzc+O0lHTk9SRTtJR05PUkUKKzxVMjA3OD4JPFUwMDM4Pjs8VTIwNzg+O0lHTk9SRTtJR05PUkUKKzxVMjA3OT4JPFUwMDM5Pjs8VTIwNzk+O0lHTk9SRTtJR05PUkUKKzxVMDA0MT4JPFUwMDQxPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDYxPgk8VTAwNDE+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMEFBPgk8VTAwNDE+OzxOT05FPjs8VTAwQUE+O0lHTk9SRQorPFUwMEMxPgk8VTAwNDE+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMEUxPgk8VTAwNDE+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDBDMD4JPFUwMDQxPjs8R1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFMD4JPFUwMDQxPjs8R1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMDA+CTxVMDA0MT47PERPVUJMRS1HUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjAxPgk8VTAwNDE+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMDI+CTxVMDA0MT47PEJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMDM+CTxVMDA0MT47PEJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRUFFPgk8VTAwNDE+OzxCUkVWRStBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRUFGPgk8VTAwNDE+OzxCUkVWRStBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVCMD4JPFUwMDQxPjs8QlJFVkUrR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCMT4JPFUwMDQxPjs8QlJFVkUrR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFQjI+CTxVMDA0MT47PEJSRVZFK0hPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCMz4JPFUwMDQxPjs8QlJFVkUrSE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVCND4JPFUwMDQxPjs8QlJFVkUrVElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCNT4JPFUwMDQxPjs8QlJFVkUrVElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFQjY+CTxVMDA0MT47PEJSRVZFK0RPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUI3Pgk8VTAwNDE+OzxCUkVWRStET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAyMDI+CTxVMDA0MT47PElOVkVSVEVELUJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMDM+CTxVMDA0MT47PElOVkVSVEVELUJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMEMyPgk8VTAwNDE+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTI+CTxVMDA0MT47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFQTQ+CTxVMDA0MT47PENJUkNVTUZMRVgrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVBNT4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVBNj4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRUE3Pgk8VTAwNDE+OzxDSVJDVU1GTEVYK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRUE4Pgk8VTAwNDE+OzxDSVJDVU1GTEVYK0hPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVBOT4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRUFBPgk8VTAwNDE+OzxDSVJDVU1GTEVYK1RJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQUI+CTxVMDA0MT47PENJUkNVTUZMRVgrVElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFQUM+CTxVMDA0MT47PENJUkNVTUZMRVgrRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQUQ+CTxVMDA0MT47PENJUkNVTUZMRVgrRE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMUNEPgk8VTAwNDE+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUNFPgk8VTAwNDE+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDBDNT4JPFUwMDQxPjs8UklORz47PENBUElUQUw+O0lHTk9SRQorPFUwMEU1Pgk8VTAwNDE+OzxSSU5HPjs8U01BTEw+O0lHTk9SRQorPFUwMUZBPgk8VTAwNDE+OzxSSU5HK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRkI+CTxVMDA0MT47PFJJTkcrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFMDA+CTxVMDA0MT47PFJJTkctQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwMT4JPFUwMDQxPjs8UklORy1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDBDND4JPFUwMDQxPjs8RElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTQ+CTxVMDA0MT47PERJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMDFERT4JPFUwMDQxPjs8RElBRVJFU0lTK01BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMURGPgk8VTAwNDE+OzxESUFFUkVTSVMrTUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRUEyPgk8VTAwNDE+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQTM+CTxVMDA0MT47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTAwQzM+CTxVMDA0MT47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTM+CTxVMDA0MT47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRUEwPgk8VTAwNDE+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVBMT4JPFUwMDQxPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTA0Pgk8VTAwNDE+OzxPR09ORUs+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEwNT4JPFUwMDQxPjs8T0dPTkVLPjs8U01BTEw+O0lHTk9SRQorPFUwMTAwPgk8VTAwNDE+OzxNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEwMT4JPFUwMDQxPjs8TUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMUUwPgk8VTAwNDE+OzxNQUNST04rRE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRTE+CTxVMDA0MT47PE1BQ1JPTitET1Q+OzxTTUFMTD47SUdOT1JFCis8YTg+Cis8VTAwQzY+CSI8VTAwNDE+PFUwMDQ1PiI7IjxVMDBDNj48VTAwQzY+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDBFNj4JIjxVMDA0MT48VTAwNDU+IjsiPFUwMEM2PjxVMDBDNj4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAxRkM+CSI8VTAwNDE+PFUwMDQ1PiI7IjxVMDFGQz48VTAxRkM+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDFGRD4JIjxVMDA0MT48VTAwNDU+IjsiPFUwMUZDPjxVMDFGQz4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAxRTI+CSI8VTAwNDE+PFUwMDQ1PiI7IjxVMDFFMj48VTAxRTI+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDFFMz4JIjxVMDA0MT48VTAwNDU+IjsiPFUwMUUyPjxVMDFFMj4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAwNDI+CTxVMDA0Mj47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2Mj4JPFUwMDQyPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMUUwMj4JPFUwMDQyPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMDM+CTxVMDA0Mj47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUUwND4JPFUwMDQyPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMDU+CTxVMDA0Mj47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUUwNj4JPFUwMDQyPjs8TElORS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTA3Pgk8VTAwNDI+OzxMSU5FLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPGI4PgorPFUwMDQzPgk8VTAwNDM+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjM+CTxVMDA0Mz47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMDY+CTxVMDA0Mz47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMDc+CTxVMDA0Mz47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMTA4Pgk8VTAwNDM+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMDk+CTxVMDA0Mz47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTAxMEM+CTxVMDA0Mz47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMEQ+CTxVMDA0Mz47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMTg3Pgk8VTAwNDM+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxODg+CTxVMDA0Mz47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTAxMEE+CTxVMDA0Mz47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUwMTBCPgk8VTAwNDM+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTAwQzc+CTxVMDA0Mz47PENFRElMTEE+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFNz4JPFUwMDQzPjs8Q0VESUxMQT47PFNNQUxMPjtJR05PUkUKKzxVMUUwOD4JPFUwMDQzPjs8Q0VESUxMQStBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTA5Pgk8VTAwNDM+OzxDRURJTExBK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPGM4PgorPFUwMDQ0Pgk8VTAwNDQ+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjQ+CTxVMDA0ND47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMEU+CTxVMDA0ND47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMEY+CTxVMDA0ND47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRTBBPgk8VTAwNDQ+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwQj4JPFUwMDQ0Pjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTBDPgk8VTAwNDQ+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwRD4JPFUwMDQ0Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTEwPgk8VTAwNDQ+OzxTVFJPS0U+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExMT4JPFUwMDQ0Pjs8U1RST0tFPjs8U01BTEw+O0lHTk9SRQorPFUxRTEwPgk8VTAwNDQ+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMTE+CTxVMDA0ND47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFMTI+CTxVMDA0ND47PE1BQ1JPTitDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMTM+CTxVMDA0ND47PE1BQ1JPTitDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRTBFPgk8VTAwNDQ+OzxMSU5FLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMEY+CTxVMDA0ND47PExJTkUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8ZDg+Cis8VTAwNDU+CTxVMDA0NT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2NT4JPFUwMDQ1Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDBDOT4JPFUwMDQ1Pjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFOT4JPFUwMDQ1Pjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAwQzg+CTxVMDA0NT47PEdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTg+CTxVMDA0NT47PEdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjA0Pgk8VTAwNDU+OzxET1VCTEUtR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIwNT4JPFUwMDQ1Pjs8RE9VQkxFLUdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTE0Pgk8VTAwNDU+OzxCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTE1Pgk8VTAwNDU+OzxCUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIwNj4JPFUwMDQ1Pjs8SU5WRVJURUQtQlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIwNz4JPFUwMDQ1Pjs8SU5WRVJURUQtQlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAwQ0E+CTxVMDA0NT47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFQT4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMUVCRT4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRUJGPgk8VTAwNDU+OzxDSVJDVU1GTEVYK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRUMwPgk8VTAwNDU+OzxDSVJDVU1GTEVYK0dSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQzE+CTxVMDA0NT47PENJUkNVTUZMRVgrR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFQzI+CTxVMDA0NT47PENJUkNVTUZMRVgrSE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUMzPgk8VTAwNDU+OzxDSVJDVU1GTEVYK0hPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFQzQ+CTxVMDA0NT47PENJUkNVTUZMRVgrVElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDNT4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUVDNj4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDNz4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxMUE+CTxVMDA0NT47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMUI+CTxVMDA0NT47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMENCPgk8VTAwNDU+OzxESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFQj4JPFUwMDQ1Pjs8RElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUxRUJBPgk8VTAwNDU+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQkI+CTxVMDA0NT47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFQkM+CTxVMDA0NT47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQkQ+CTxVMDA0NT47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRTFBPgk8VTAwNDU+OzxUSUxERS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTFCPgk8VTAwNDU+OzxUSUxERS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDExNj4JPFUwMDQ1Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMTc+CTxVMDA0NT47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUVCOD4JPFUwMDQ1Pjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQjk+CTxVMDA0NT47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUUxQz4JPFUwMDQ1Pjs8Q0VESUxMQStCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRTFEPgk8VTAwNDU+OzxDRURJTExBK0JSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTE4Pgk8VTAwNDU+OzxPR09ORUs+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExOT4JPFUwMDQ1Pjs8T0dPTkVLPjs8U01BTEw+O0lHTk9SRQorPFUwMTEyPgk8VTAwNDU+OzxNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExMz4JPFUwMDQ1Pjs8TUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRTE2Pgk8VTAwNDU+OzxNQUNST04rQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUxNz4JPFUwMDQ1Pjs8TUFDUk9OK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTE0Pgk8VTAwNDU+OzxNQUNST04rR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUxNT4JPFUwMDQ1Pjs8TUFDUk9OK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRTE4Pgk8VTAwNDU+OzxNQUNST04rQ0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUxRTE5Pgk8VTAwNDU+OzxNQUNST04rQ0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxlOD4KKzxVMDA0Nj4JPFUwMDQ2Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDY2Pgk8VTAwNDY+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTkxPgk8VTAwNDY+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxOTI+CTxVMDA0Nj47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFMUU+CTxVMDA0Nj47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTFGPgk8VTAwNDY+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8Zjg+Cis8VUZCMDA+CSI8VTAwNDY+PFUwMDQ2PiI7IjxOT05FPjxOT05FPiI7IjxVRkIwMD48VUZCMDA+IjtJR05PUkUKKzxVRkIwMT4JIjxVMDA0Nj48VTAwNDk+IjsiPE5PTkU+PE5PTkU+IjsiPFVGQjAxPjxVRkIwMT4iO0lHTk9SRQorPFVGQjAyPgkiPFUwMDQ2PjxVMDA0Qz4iOyI8Tk9ORT48Tk9ORT4iOyI8VUZCMDI+PFVGQjAyPiI7SUdOT1JFCis8VUZCMDM+CSI8VTAwNDY+PFUwMDQ2PjxVMDA0OT4iOyI8Tk9ORT48Tk9ORT48Tk9ORT4iOyI8VUZCMDM+PFVGQjAzPjxVRkIwMz4iO0lHTk9SRQorPFVGQjA0PgkiPFUwMDQ2PjxVMDA0Nj48VTAwNEM+IjsiPE5PTkU+PE5PTkU+PE5PTkU+IjsiPFVGQjA0PjxVRkIwND48VUZCMDQ+IjtJR05PUkUKKzxVMDA0Nz4JPFUwMDQ3Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDY3Pgk8VTAwNDc+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMUY0Pgk8VTAwNDc+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMUY1Pgk8VTAwNDc+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDExRT4JPFUwMDQ3Pjs8QlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExRj4JPFUwMDQ3Pjs8QlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMUM+CTxVMDA0Nz47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExRD4JPFUwMDQ3Pjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMDFFNj4JPFUwMDQ3Pjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFFNz4JPFUwMDQ3Pjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAxMjA+CTxVMDA0Nz47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUwMTIxPgk8VTAwNDc+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTAxRTQ+CTxVMDA0Nz47PFNUUk9LRT47PENBUElUQUw+O0lHTk9SRQorPFUwMUU1Pgk8VTAwNDc+OzxTVFJPS0U+OzxTTUFMTD47SUdOT1JFCis8VTAxMjI+CTxVMDA0Nz47PENFRElMTEE+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEyMz4JPFUwMDQ3Pjs8Q0VESUxMQT47PFNNQUxMPjtJR05PUkUKKzxVMUUyMD4JPFUwMDQ3Pjs8TUFDUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMjE+CTxVMDA0Nz47PE1BQ1JPTj47PFNNQUxMPjtJR05PUkUKKzxnOD4KKzxVMDA0OD4JPFUwMDQ4Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDY4Pgk8VTAwNDg+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUxRTJBPgk8VTAwNDg+OzxCUkVWRS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTJCPgk8VTAwNDg+OzxCUkVWRS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDEyND4JPFUwMDQ4Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMTI1Pgk8VTAwNDg+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRTI2Pgk8VTAwNDg+OzxESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUyNz4JPFUwMDQ4Pjs8RElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUxRTIyPgk8VTAwNDg+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUyMz4JPFUwMDQ4Pjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTI0Pgk8VTAwNDg+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUyNT4JPFUwMDQ4Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTI2Pgk8VTAwNDg+OzxTVFJPS0U+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEyNz4JPFUwMDQ4Pjs8U1RST0tFPjs8U01BTEw+O0lHTk9SRQorPFUxRTI4Pgk8VTAwNDg+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMjk+CTxVMDA0OD47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8aDg+Cis8VTAwNDk+CTxVMDA0OT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2OT4JPFUwMDQ5Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDBDRD4JPFUwMDQ5Pjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFRD4JPFUwMDQ5Pjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAwQ0M+CTxVMDA0OT47PEdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRUM+CTxVMDA0OT47PEdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjA4Pgk8VTAwNDk+OzxET1VCTEUtR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIwOT4JPFUwMDQ5Pjs8RE9VQkxFLUdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTJDPgk8VTAwNDk+OzxCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTJEPgk8VTAwNDk+OzxCUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIwQT4JPFUwMDQ5Pjs8SU5WRVJURUQtQlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIwQj4JPFUwMDQ5Pjs8SU5WRVJURUQtQlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAwQ0U+CTxVMDA0OT47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFRT4JPFUwMDQ5Pjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMDFDRj4JPFUwMDQ5Pjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFEMD4JPFUwMDQ5Pjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAwQ0Y+CTxVMDA0OT47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUwMEVGPgk8VTAwNDk+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFMkU+CTxVMDA0OT47PERJQUVSRVNJUytBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTJGPgk8VTAwNDk+OzxESUFFUkVTSVMrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFQzg+CTxVMDA0OT47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDOT4JPFUwMDQ5Pjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMDEyOD4JPFUwMDQ5Pjs8VElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEyOT4JPFUwMDQ5Pjs8VElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFMkM+CTxVMDA0OT47PFRJTERFLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMkQ+CTxVMDA0OT47PFRJTERFLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTMwPgk8VTAwNDk+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEzMT4JPFUwMDQ5Pjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRUNBPgk8VTAwNDk+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDQj4JPFUwMDQ5Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTJFPgk8VTAwNDk+OzxPR09ORUs+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEyRj4JPFUwMDQ5Pjs8T0dPTkVLPjs8U01BTEw+O0lHTk9SRQorPFUwMTJBPgk8VTAwNDk+OzxNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEyQj4JPFUwMDQ5Pjs8TUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPGk4PgorPFUwMDU5PiA8VTAwNTk+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzk+IDxVMDA1OT47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMzI+CSI8VTAwNDk+PFUwMDRBPiI7IjxVMDEzMj48VTAxMzI+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDEzMz4JIjxVMDA0OT48VTAwNEE+IjsiPFUwMTMyPjxVMDEzMj4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAwNEE+CTxVMDA0QT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2QT4JPFUwMDRBPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDEzND4JPFUwMDRBPjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMTM1Pgk8VTAwNEE+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPGo4PgorPFUwMDRCPgk8VTAwNEI+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNkI+CTxVMDA0Qj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFMzA+CTxVMDA0Qj47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMzE+CTxVMDA0Qj47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMUU4Pgk8VTAwNEI+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUU5Pgk8VTAwNEI+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDE5OD4JPFUwMDRCPjs8SE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUwMTk5Pgk8VTAwNEI+OzxIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRTMyPgk8VTAwNEI+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzMz4JPFUwMDRCPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTM2Pgk8VTAwNEI+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMzc+CTxVMDA0Qj47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFMzQ+CTxVMDA0Qj47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzNT4JPFUwMDRCPjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxrOD4KKzxVMDEzOD4JPFUwMDRCPjs8VTAxMzg+OzxTTUFMTD47SUdOT1JFCis8VTAwNEM+CTxVMDA0Qz47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2Qz4JPFUwMDRDPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDEzOT4JPFUwMDRDPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEzQT4JPFUwMDRDPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAxM0Q+CTxVMDA0Qz47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxM0U+CTxVMDA0Qz47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMTNGPgk8VTAwNEM+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0MD4JPFUwMDRDPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTM2Pgk8VTAwNEM+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzNz4JPFUwMDRDPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTQxPgk8VTAwNEM+OzxTVFJPS0U+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0Mj4JPFUwMDRDPjs8U1RST0tFPjs8U01BTEw+O0lHTk9SRQorPFUwMTNCPgk8VTAwNEM+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxM0M+CTxVMDA0Qz47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFMzg+CTxVMDA0Qz47PE1BQ1JPTitET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzOT4JPFUwMDRDPjs8TUFDUk9OK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUUzQz4JPFUwMDRDPjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzRD4JPFUwMDRDPjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFM0E+CTxVMDA0Qz47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzQj4JPFUwMDRDPjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxsOD4KKzxVMDA0RD4JPFUwMDREPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDZEPgk8VTAwNEQ+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUxRTNFPgk8VTAwNEQ+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTNGPgk8VTAwNEQ+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUU0MD4JPFUwMDREPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNDE+CTxVMDA0RD47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUU0Mj4JPFUwMDREPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNDM+CTxVMDA0RD47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxtOD4KKzxVMDA0RT4JPFUwMDRFPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDZFPgk8VTAwNEU+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTQzPgk8VTAwNEU+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMTQ0Pgk8VTAwNEU+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDE0Nz4JPFUwMDRFPjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0OD4JPFUwMDRFPjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAwRDE+CTxVMDA0RT47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRjE+CTxVMDA0RT47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRTQ0Pgk8VTAwNEU+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU0NT4JPFUwMDRFPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTQ2Pgk8VTAwNEU+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU0Nz4JPFUwMDRFPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTQ1Pgk8VTAwNEU+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNDY+CTxVMDA0RT47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFNEE+CTxVMDA0RT47PE1BQ1JPTitDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNEI+CTxVMDA0RT47PE1BQ1JPTitDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRTQ4Pgk8VTAwNEU+OzxMSU5FLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNDk+CTxVMDA0RT47PExJTkUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxNDk+CTxVMDA0RT47PFBSRUNFREVELUJZLUFQT1NUUk9QSEU+OzxTTUFMTD47SUdOT1JFCis8bjg+Cis8VTAxNEE+CSI8VTAwNEU+PFUwMDQ3PiI7IjxVMDE0QT48VTAxNEE+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDE0Qj4JIjxVMDA0RT48VTAwNDc+IjsiPFUwMTRBPjxVMDE0QT4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAwNEY+CTxVMDA0Rj47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2Rj4JPFUwMDRGPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDBCQT4JPFUwMDRGPjs8Tk9ORT47PFUwMEJBPjtJR05PUkUKKzxVMDBEMz4JPFUwMDRGPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGMz4JPFUwMDRGPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAwRDI+CTxVMDA0Rj47PEdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRjI+CTxVMDA0Rj47PEdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjBDPgk8VTAwNEY+OzxET1VCTEUtR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIwRD4JPFUwMDRGPjs8RE9VQkxFLUdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTRFPgk8VTAwNEY+OzxCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTRGPgk8VTAwNEY+OzxCUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIwRT4JPFUwMDRGPjs8SU5WRVJURUQtQlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIwRj4JPFUwMDRGPjs8SU5WRVJURUQtQlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAwRDQ+CTxVMDA0Rj47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGND4JPFUwMDRGPjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMUVEMD4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRUQxPgk8VTAwNEY+OzxDSVJDVU1GTEVYK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRUQyPgk8VTAwNEY+OzxDSVJDVU1GTEVYK0dSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRDM+CTxVMDA0Rj47PENJUkNVTUZMRVgrR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFRDQ+CTxVMDA0Rj47PENJUkNVTUZMRVgrSE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUQ1Pgk8VTAwNEY+OzxDSVJDVU1GTEVYK0hPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFRDY+CTxVMDA0Rj47PENJUkNVTUZMRVgrVElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVENz4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUVEOD4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVEOT4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxRDE+CTxVMDA0Rj47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRDI+CTxVMDA0Rj47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMEQ2Pgk8VTAwNEY+OzxESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGNj4JPFUwMDRGPjs8RElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUwMTUwPgk8VTAwNEY+OzxET1VCTEUtQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE1MT4JPFUwMDRGPjs8RE9VQkxFLUFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRUNFPgk8VTAwNEY+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQ0Y+CTxVMDA0Rj47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTAwRDU+CTxVMDA0Rj47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRjU+CTxVMDA0Rj47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRTRDPgk8VTAwNEY+OzxUSUxERStBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTREPgk8VTAwNEY+OzxUSUxERStBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUU0RT4JPFUwMDRGPjs8VElMREUrRElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNEY+CTxVMDA0Rj47PFRJTERFK0RJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMUVDQz4JPFUwMDRGPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQ0Q+CTxVMDA0Rj47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDBEOD4JPFUwMDRGPjs8U1RST0tFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRjg+CTxVMDA0Rj47PFNUUk9LRT47PFNNQUxMPjtJR05PUkUKKzxVMDFGRT4JPFUwMDRGPjs8U1RST0tFK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRkY+CTxVMDA0Rj47PFNUUk9LRStBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDFFQT4JPFUwMDRGPjs8T0dPTkVLPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRUI+CTxVMDA0Rj47PE9HT05FSz47PFNNQUxMPjtJR05PUkUKKzxVMDFFQz4JPFUwMDRGPjs8T0dPTkVLK01BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUVEPgk8VTAwNEY+OzxPR09ORUsrTUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMTRDPgk8VTAwNEY+OzxNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0RD4JPFUwMDRGPjs8TUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRTUyPgk8VTAwNEY+OzxNQUNST04rQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU1Mz4JPFUwMDRGPjs8TUFDUk9OK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTUwPgk8VTAwNEY+OzxNQUNST04rR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU1MT4JPFUwMDRGPjs8TUFDUk9OK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMUEwPgk8VTAwNEY+OzxIT1JOPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxQTE+CTxVMDA0Rj47PEhPUk4+OzxTTUFMTD47SUdOT1JFCis8VTFFREE+CTxVMDA0Rj47PEhPUk4rQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVEQj4JPFUwMDRGPjs8SE9STitBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVEQz4JPFUwMDRGPjs8SE9STitHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRUREPgk8VTAwNEY+OzxIT1JOK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRURFPgk8VTAwNEY+OzxIT1JOK0hPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVERj4JPFUwMDRGPjs8SE9STitIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRUUwPgk8VTAwNEY+OzxIT1JOK1RJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRTE+CTxVMDA0Rj47PEhPUk4rVElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFRTI+CTxVMDA0Rj47PEhPUk4rRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRTM+CTxVMDA0Rj47PEhPUk4rRE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPG84PgorPFUwMTUyPgkiPFUwMDRGPjxVMDA0NT4iOyI8VTAxNTI+PFUwMTUyPiI7IjxDQVBJVEFMPjxDQVBJVEFMPiI7SUdOT1JFCis8VTAxNTM+CSI8VTAwNEY+PFUwMDQ1PiI7IjxVMDE1Mj48VTAxNTI+IjsiPFNNQUxMPjxTTUFMTD4iO0lHTk9SRQorPFUwMDUwPgk8VTAwNTA+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzA+CTxVMDA1MD47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFNTQ+CTxVMDA1MD47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNTU+CTxVMDA1MD47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTU2Pgk8VTAwNTA+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU1Nz4JPFUwMDUwPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPHA4PgorPFUwMDUxPgk8VTAwNTE+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzE+CTxVMDA1MT47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8cTg+Cis8VTAwNTI+CTxVMDA1Mj47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3Mj4JPFUwMDUyPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDE1ND4JPFUwMDUyPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE1NT4JPFUwMDUyPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAyMTA+CTxVMDA1Mj47PERPVUJMRS1HUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjExPgk8VTAwNTI+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMTI+CTxVMDA1Mj47PElOVkVSVEVELUJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMTM+CTxVMDA1Mj47PElOVkVSVEVELUJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTU4Pgk8VTAwNTI+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTU5Pgk8VTAwNTI+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMUU1OD4JPFUwMDUyPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNTk+CTxVMDA1Mj47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUU1QT4JPFUwMDUyPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNUI+CTxVMDA1Mj47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDE1Nj4JPFUwMDUyPjs8Q0VESUxMQT47PENBUElUQUw+O0lHTk9SRQorPFUwMTU3Pgk8VTAwNTI+OzxDRURJTExBPjs8U01BTEw+O0lHTk9SRQorPFUxRTVDPgk8VTAwNTI+OzxNQUNST04rRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNUQ+CTxVMDA1Mj47PE1BQ1JPTitET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTFFNUU+CTxVMDA1Mj47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU1Rj4JPFUwMDUyPjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxyOD4KKzxVMDA1Mz4JPFUwMDUzPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDczPgk8VTAwNTM+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFVGQjA2PgkiPFUwMDUzPjxVMDA1ND4iOyI8Tk9ORT48Tk9ORT4iOyI8VUZCMDY+PFVGQjA2PiI7SUdOT1JFCis8VTAxNUE+CTxVMDA1Mz47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNUI+CTxVMDA1Mz47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTY0Pgk8VTAwNTM+OzxBQ1VURStET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2NT4JPFUwMDUzPjs8QUNVVEUrRE9UPjs8U01BTEw+O0lHTk9SRQorPFUwMTVDPgk8VTAwNTM+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNUQ+CTxVMDA1Mz47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTAxNjA+CTxVMDA1Mz47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNjE+CTxVMDA1Mz47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRTY2Pgk8VTAwNTM+OzxDQVJPTitET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2Nz4JPFUwMDUzPjs8Q0FST04rRE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTYwPgk8VTAwNTM+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2MT4JPFUwMDUzPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTYyPgk8VTAwNTM+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2Mz4JPFUwMDUzPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUxRTY4Pgk8VTAwNTM+OzxET1QrRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNjk+CTxVMDA1Mz47PERPVCtET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxNUU+CTxVMDA1Mz47PENFRElMTEE+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE1Rj4JPFUwMDUzPjs8Q0VESUxMQT47PFNNQUxMPjtJR05PUkUKKzxzOD4KKzxVMDE3Rj4JPFUwMDUzPjs8VTAxN0Y+OzxTTUFMTD47SUdOT1JFCis8VTAwREY+CSI8VTAwNTM+PFUwMDUzPiI7IjxOT05FPjxOT05FPiI7IjxTTUFMTD48VTAwREY+IjtJR05PUkUKKzxVRkIwNT4JIjxVMDA1Mz48VTAwNTQ+IjsiPE5PTkU+PE5PTkU+IjsiPFVGQjA1PjxVRkIwNT4iO0lHTk9SRQorPFUwMDU0Pgk8VTAwNTQ+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzQ+CTxVMDA1ND47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxNjQ+CTxVMDA1ND47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNjU+CTxVMDA1ND47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRTZBPgk8VTAwNTQ+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2Qj4JPFUwMDU0Pjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTZDPgk8VTAwNTQ+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2RD4JPFUwMDU0Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTY2Pgk8VTAwNTQ+OzxTVFJPS0U+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE2Nz4JPFUwMDU0Pjs8U1RST0tFPjs8U01BTEw+O0lHTk9SRQorPFUwMTYyPgk8VTAwNTQ+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNjM+CTxVMDA1ND47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFNzA+CTxVMDA1ND47PE1BQ1JPTitDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNzE+CTxVMDA1ND47PE1BQ1JPTitDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRTZFPgk8VTAwNTQ+OzxMSU5FLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNkY+CTxVMDA1ND47PExJTkUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8dDg+Cis8VTAwREU+CSI8VTAwNTQ+PFUwMDQ4PiI7IjxVMDBERT48VTAwREU+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDBGRT4JIjxVMDA1ND48VTAwNDg+IjsiPFUwMERFPjxVMDBERT4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAwNTU+CTxVMDA1NT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3NT4JPFUwMDU1Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDBEQT4JPFUwMDU1Pjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGQT4JPFUwMDU1Pjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAwRDk+CTxVMDA1NT47PEdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRjk+CTxVMDA1NT47PEdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjE0Pgk8VTAwNTU+OzxET1VCTEUtR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIxNT4JPFUwMDU1Pjs8RE9VQkxFLUdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTZDPgk8VTAwNTU+OzxCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTZEPgk8VTAwNTU+OzxCUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIxNj4JPFUwMDU1Pjs8SU5WRVJURUQtQlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIxNz4JPFUwMDU1Pjs8SU5WRVJURUQtQlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAwREI+CTxVMDA1NT47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGQj4JPFUwMDU1Pjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMDFEMz4JPFUwMDU1Pjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFEND4JPFUwMDU1Pjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAxNkU+CTxVMDA1NT47PFJJTkc+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE2Rj4JPFUwMDU1Pjs8UklORz47PFNNQUxMPjtJR05PUkUKKzxVMDBEQz4JPFUwMDU1Pjs8RElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRkM+CTxVMDA1NT47PERJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMDFENT4JPFUwMDU1Pjs8RElBRVJFU0lTK01BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUQ2Pgk8VTAwNTU+OzxESUFFUkVTSVMrTUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMUQ3Pgk8VTAwNTU+OzxESUFFUkVTSVMrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFEOD4JPFUwMDU1Pjs8RElBRVJFU0lTK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMURCPgk8VTAwNTU+OzxESUFFUkVTSVMrR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFEQz4JPFUwMDU1Pjs8RElBRVJFU0lTK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMUQ5Pgk8VTAwNTU+OzxESUFFUkVTSVMrQ0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFEQT4JPFUwMDU1Pjs8RElBRVJFU0lTK0NBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMTcwPgk8VTAwNTU+OzxET1VCTEUtQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE3MT4JPFUwMDU1Pjs8RE9VQkxFLUFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRUU2Pgk8VTAwNTU+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRTc+CTxVMDA1NT47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTAxNjg+CTxVMDA1NT47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNjk+CTxVMDA1NT47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRTc4Pgk8VTAwNTU+OzxUSUxERStBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTc5Pgk8VTAwNTU+OzxUSUxERStBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUU3ND4JPFUwMDU1Pjs8VElMREUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU3NT4JPFUwMDU1Pjs8VElMREUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTFFRTQ+CTxVMDA1NT47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUU1Pgk8VTAwNTU+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxNzI+CTxVMDA1NT47PE9HT05FSz47PENBUElUQUw+O0lHTk9SRQorPFUwMTczPgk8VTAwNTU+OzxPR09ORUs+OzxTTUFMTD47SUdOT1JFCis8VTAxNkE+CTxVMDA1NT47PE1BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTZCPgk8VTAwNTU+OzxNQUNST04+OzxTTUFMTD47SUdOT1JFCis8VTFFN0E+CTxVMDA1NT47PE1BQ1JPTitESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU3Qj4JPFUwMDU1Pjs8TUFDUk9OK0RJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMUU3Mj4JPFUwMDU1Pjs8TUFDUk9OK0RJQUVSRVNJUy1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTczPgk8VTAwNTU+OzxNQUNST04rRElBRVJFU0lTLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUxRTc2Pgk8VTAwNTU+OzxNQUNST04rQ0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUxRTc3Pgk8VTAwNTU+OzxNQUNST04rQ0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMDFBRj4JPFUwMDU1Pjs8SE9STj47PENBUElUQUw+O0lHTk9SRQorPFUwMUIwPgk8VTAwNTU+OzxIT1JOPjs8U01BTEw+O0lHTk9SRQorPFUxRUU4Pgk8VTAwNTU+OzxIT1JOK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRTk+CTxVMDA1NT47PEhPUk4rQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFRUE+CTxVMDA1NT47PEhPUk4rR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFQj4JPFUwMDU1Pjs8SE9STitHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMUVFQz4JPFUwMDU1Pjs8SE9STitIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRUQ+CTxVMDA1NT47PEhPUk4rSE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVFRT4JPFUwMDU1Pjs8SE9STitUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUxRUVGPgk8VTAwNTU+OzxIT1JOK1RJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRUYwPgk8VTAwNTU+OzxIT1JOK0RPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUYxPgk8VTAwNTU+OzxIT1JOK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzx1OD4KKzxVMDA1Nj4JPFUwMDU2Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDc2Pgk8VTAwNTY+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUxRTdDPgk8VTAwNTY+OzxUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUxRTdEPgk8VTAwNTY+OzxUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUU3RT4JPFUwMDU2Pjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFN0Y+CTxVMDA1Nj47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzx2OD4KKzxVMDA1Nz4JPFUwMDU3Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDc3Pgk8VTAwNTc+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUxRTgyPgk8VTAwNTc+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTgzPgk8VTAwNTc+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUU4MD4JPFUwMDU3Pjs8R1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU4MT4JPFUwMDU3Pjs8R1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxNzQ+CTxVMDA1Nz47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE3NT4JPFUwMDU3Pjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMUU4ND4JPFUwMDU3Pjs8RElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFODU+CTxVMDA1Nz47PERJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMUU4Nj4JPFUwMDU3Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFODc+CTxVMDA1Nz47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUU4OD4JPFUwMDU3Pjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFODk+CTxVMDA1Nz47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzx3OD4KKzxVMDA1OD4JPFUwMDU4Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDc4Pgk8VTAwNTg+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUxRThDPgk8VTAwNTg+OzxESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU4RD4JPFUwMDU4Pjs8RElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUxRThBPgk8VTAwNTg+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU4Qj4JPFUwMDU4Pjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPHg4PgorPFUwMEREPgk8VTAwNTk+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMEZEPgk8VTAwNTk+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVGMj4JPFUwMDU5Pjs8R1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVGMz4JPFUwMDU5Pjs8R1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxNzY+CTxVMDA1OT47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE3Nz4JPFUwMDU5Pjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMDE3OD4JPFUwMDU5Pjs8RElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRkY+CTxVMDA1OT47PERJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMUVGNj4JPFUwMDU5Pjs8SE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUY3Pgk8VTAwNTk+OzxIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRUY4Pgk8VTAwNTk+OzxUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUxRUY5Pgk8VTAwNTk+OzxUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUU4RT4JPFUwMDU5Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFOEY+CTxVMDA1OT47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUVGND4JPFUwMDU5Pjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRjU+CTxVMDA1OT47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzx5OD4KKzxVMDA1QT4JPFUwMDVBPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDdBPgk8VTAwNUE+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTc5Pgk8VTAwNUE+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMTdBPgk8VTAwNUE+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUU5MD4JPFUwMDVBPjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUxRTkxPgk8VTAwNUE+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUwMTdEPgk8VTAwNUE+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTdFPgk8VTAwNUE+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDE3Qj4JPFUwMDVBPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxN0M+CTxVMDA1QT47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUU5Mj4JPFUwMDVBPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFOTM+CTxVMDA1QT47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDFCNT4JPFUwMDVBPjs8U1RST0tFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxQjY+CTxVMDA1QT47PFNUUk9LRT47PFNNQUxMPjtJR05PUkUKKzxVMUU5ND4JPFUwMDVBPjs8TElORS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTk1Pgk8VTAwNUE+OzxMSU5FLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPHo4PgorPFUwMzkxPgk8VTAzOTE+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzg2Pgk8VTAzOTE+OzxDQVBJVEFMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0IxPgk8VTAzOTE+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBQz4JPFUwMzkxPjs8U01BTEw+OzxUT05PUz47SUdOT1JFCis8VTAzOTI+CTxVMDM5Mj47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQjI+CTxVMDM5Mj47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzkzPgk8VTAzOTM+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0IzPgk8VTAzOTM+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDM5ND4JPFUwMzk0Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCND4JPFUwMzk0Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOTU+CTxVMDM5NT47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzODg+CTxVMDM5NT47PENBUElUQUw+OzxUT05PUz47SUdOT1JFCis8VTAzQjU+CTxVMDM5NT47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0FEPgk8VTAzOTU+OzxTTUFMTD47PFRPTk9TPjtJR05PUkUKKzxVMDM5Nj4JPFUwMzk2Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCNj4JPFUwMzk2Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOTc+CTxVMDM5Nz47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzODk+CTxVMDM5Nz47PENBUElUQUw+OzxUT05PUz47SUdOT1JFCis8VTAzQjc+CTxVMDM5Nz47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0FFPgk8VTAzOTc+OzxTTUFMTD47PFRPTk9TPjtJR05PUkUKKzxVMDM5OD4JPFUwMzk4Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCOD4JPFUwMzk4Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOTk+CTxVMDM5OT47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzOEE+CTxVMDM5OT47PENBUElUQUw+OzxUT05PUz47SUdOT1JFCis8VTAzQUE+CTxVMDM5OT47PENBUElUQUw+OzxESUFMWVRJQ0E+O0lHTk9SRQorPFUwM0I5Pgk8VTAzOTk+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBRj4JPFUwMzk5Pjs8U01BTEw+OzxUT05PUz47SUdOT1JFCis8VTAzQ0E+CTxVMDM5OT47PFNNQUxMPjs8RElBTFlUSUNBPjtJR05PUkUKKzxVMDM5MD4JPFUwMzk5Pjs8U01BTEw+OzxESUFMWVRJQ0ErVE9OT1M+O0lHTk9SRQorPFUwMzlBPgk8VTAzOUE+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0JBPgk8VTAzOUE+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDM5Qj4JPFUwMzlCPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCQj4JPFUwMzlCPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOUM+CTxVMDM5Qz47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQkM+CTxVMDM5Qz47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzlEPgk8VTAzOUQ+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0JEPgk8VTAzOUQ+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDM5RT4JPFUwMzlFPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCRT4JPFUwMzlFPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOUY+CTxVMDM5Rj47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzOEM+CTxVMDM5Rj47PENBUElUQUw+OzxUT05PUz47SUdOT1JFCis8VTAzQkY+CTxVMDM5Rj47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0NDPgk8VTAzOUY+OzxTTUFMTD47PFRPTk9TPjtJR05PUkUKKzxVMDNBMD4JPFUwM0EwPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDMD4JPFUwM0EwPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQTE+CTxVMDNBMT47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzE+CTxVMDNBMT47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0EzPgk8VTAzQTM+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0MzPgk8VTAzQTM+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDMj4JPFUwM0EzPjs8U01BTEw+OzxVMDNDMj47SUdOT1JFCis8VTAzQTQ+CTxVMDNBND47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzQ+CTxVMDNBND47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0E1Pgk8VTAzQTU+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzhFPgk8VTAzQTU+OzxDQVBJVEFMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0FCPgk8VTAzQTU+OzxDQVBJVEFMPjs8RElBTFlUSUNBPjtJR05PUkUKKzxVMDNDNT4JPFUwM0E1Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQ0Q+CTxVMDNBNT47PFNNQUxMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0NCPgk8VTAzQTU+OzxTTUFMTD47PERJQUxZVElDQT47SUdOT1JFCis8VTAzQjA+CTxVMDNBNT47PFNNQUxMPjs8RElBTFlUSUNBK1RPTk9TPjtJR05PUkUKKzxVMDNBNj4JPFUwM0E2Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDNj4JPFUwM0E2Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQTc+CTxVMDNBNz47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzc+CTxVMDNBNz47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0E4Pgk8VTAzQTg+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0M4Pgk8VTAzQTg+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBOT4JPFUwM0E5Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDM4Rj4JPFUwM0E5Pjs8Q0FQSVRBTD47PFRPTk9TPjtJR05PUkUKKzxVMDNDOT4JPFUwM0E5Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQ0U+CTxVMDNBOT47PFNNQUxMPjs8VE9OT1M+O0lHTk9SRQorPFUwNDEwPgk8VTA0MTA+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDMwPgk8VTA0MTA+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxMT4JPFUwNDExPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzMT4JPFUwNDExPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTI+CTxVMDQxMj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0MzI+CTxVMDQxMj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDEzPgk8VTA0MTM+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDMzPgk8VTA0MTM+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwMz4JPFUwNDAzPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1Mz4JPFUwNDAzPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0OTA+CTxVMDQ5MD47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0OTE+CTxVMDQ5MD47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDE0Pgk8VTA0MTQ+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDM0Pgk8VTA0MTQ+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwMj4JPFUwNDAyPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1Mj4JPFUwNDAyPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTU+CTxVMDQxNT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0MzU+CTxVMDQxNT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDAxPgk8VTA0MDE+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDUxPgk8VTA0MDE+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwND4JPFUwNDA0Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1ND4JPFUwNDA0Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTY+CTxVMDQxNj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0MzY+CTxVMDQxNj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDE3Pgk8VTA0MTc+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDM3Pgk8VTA0MTc+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxOD4JPFUwNDE4Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzOD4JPFUwNDE4Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MDY+CTxVMDQwNj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NTY+CTxVMDQwNj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDA3Pgk8VTA0MDc+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDU3Pgk8VTA0MDc+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwOD4JPFUwNDA4Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1OD4JPFUwNDA4Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTk+CTxVMDQxOT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0Mzk+CTxVMDQxOT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDFBPgk8VTA0MUE+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDNBPgk8VTA0MUE+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwQz4JPFUwNDBDPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1Qz4JPFUwNDBDPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MUI+CTxVMDQxQj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0M0I+CTxVMDQxQj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDA5Pgk8VTA0MDk+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDU5Pgk8VTA0MDk+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxQz4JPFUwNDFDPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzQz4JPFUwNDFDPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MUQ+CTxVMDQxRD47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0M0Q+CTxVMDQxRD47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDBBPgk8VTA0MEE+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDVBPgk8VTA0MEE+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxRT4JPFUwNDFFPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzRT4JPFUwNDFFPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MUY+CTxVMDQxRj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0M0Y+CTxVMDQxRj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDIwPgk8VTA0MjA+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDQwPgk8VTA0MjA+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyMT4JPFUwNDIxPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0MT4JPFUwNDIxPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MjI+CTxVMDQyMj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDI+CTxVMDQyMj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDBCPgk8VTA0MEI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDVCPgk8VTA0MEI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyMz4JPFUwNDIzPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0Mz4JPFUwNDIzPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MEU+CTxVMDQwRT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NUU+CTxVMDQwRT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDI0Pgk8VTA0MjQ+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDQ0Pgk8VTA0MjQ+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyNT4JPFUwNDI1Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0NT4JPFUwNDI1Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MjY+CTxVMDQyNj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDY+CTxVMDQyNj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDA1Pgk8VTA0MDU+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDU1Pgk8VTA0MDU+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyNz4JPFUwNDI3Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0Nz4JPFUwNDI3Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MEY+CTxVMDQwRj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NUY+CTxVMDQwRj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDI4Pgk8VTA0Mjg+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDQ4Pgk8VTA0Mjg+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyOT4JPFUwNDI5Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0OT4JPFUwNDI5Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0NEE+CTxVMDQ0QT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDJBPgk8VTA0NEE+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDJCPgk8VTA0MkI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDRCPgk8VTA0MkI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQ0Qz4JPFUwNDRDPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MkM+CTxVMDQ0Qz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0MkQ+CTxVMDQyRD47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NEQ+CTxVMDQyRD47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDJFPgk8VTA0MkU+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDRFPgk8VTA0MkU+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyRj4JPFUwNDJGPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0Rj4JPFUwNDJGPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0NjI+CTxVMDQ2Mj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NjM+CTxVMDQ2Mj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDZBPgk8VTA0NkE+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDZCPgk8VTA0NkE+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQ3Mj4JPFUwNDcyPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ3Mz4JPFUwNDcyPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0NzQ+CTxVMDQ3ND47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NzU+CTxVMDQ3ND47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDgwPgk8VTA0ODA+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDgxPgk8VTA0ODA+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDVEMD4JPFUwNUQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQxPgk8VTA1RDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDI+CTxVMDVEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEMz4JPFUwNUQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQ0Pgk8VTA1RDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDU+CTxVMDVENT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVENj4JPFUwNUQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQ3Pgk8VTA1RDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDg+CTxVMDVEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEOT4JPFUwNUQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNURBPgk8VTA1REE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1REI+CTxVMDVEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEQz4JPFUwNURDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUREPgk8VTA1REQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1REU+CTxVMDVERT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVERj4JPFUwNURGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUUwPgk8VTA1RTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTE+CTxVMDVFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFMj4JPFUwNUUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUUzPgk8VTA1RTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTQ+CTxVMDVFND47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFNT4JPFUwNUU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUU2Pgk8VTA1RTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTc+CTxVMDVFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFOD4JPFUwNUU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUU5Pgk8VTA1RTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RUE+CTxVMDVFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKworJSBBcmFiaWMgY29sbGF0aW5nCisKKzxVMDYwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNjBDPgorPFUwNjFCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA2MUI+Cis8VTA2MUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDYxRj4KKzxVMDY0MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNjQwPgorCis8VTA2MjE+CTxVMDYyMT47PFUwNjIxPjtJR05PUkU7SUdOT1JFCis8VTA2MjI+CTxVMDYyMj47PFUwNjIyPjtJR05PUkU7SUdOT1JFCis8VUZFODI+CTxVMDYyMj47PFVGRTgyPjtJR05PUkU7SUdOT1JFCis8VTA2MjM+CTxVMDYyMT47PFUwNjIzPjtJR05PUkU7SUdOT1JFCis8VUZFODQ+CTxVMDYyMT47PFVGRTg0PjtJR05PUkU7SUdOT1JFCis8VTA2MjQ+CTxVMDYyMT47PFUwNjI0PjtJR05PUkU7SUdOT1JFCis8VTA2MjU+CTxVMDYyMT47PFUwNjI1PjtJR05PUkU7SUdOT1JFCis8VUZFODg+CTxVMDYyMT47PFVGRTg4PjtJR05PUkU7SUdOT1JFCis8VTA2MjY+CTxVMDYyMT47PFUwNjI2PjtJR05PUkU7SUdOT1JFCis8VTA2NzA+CTxVMDY3MD47PFUwNjcwPjtJR05PUkU7SUdOT1JFCis8VTA2Mjc+CTxVMDYyNz47PFUwNjI3PjtJR05PUkU7SUdOT1JFCis8VUZFOEQ+CTxVMDYyNz47PFVGRThEPjtJR05PUkU7SUdOT1JFCis8VUZFOEU+CTxVMDYyNz47PFVGRThFPjtJR05PUkU7SUdOT1JFCis8VUUwMTY+CTxVMDYyNz47PFVFMDE2PjtJR05PUkU7SUdOT1JFCis8VTA2Mjg+CTxVMDYyOD47PFUwNjI4PjtJR05PUkU7SUdOT1JFCis8VUZFOEY+CTxVMDYyOD47PFVGRThGPjtJR05PUkU7SUdOT1JFCis8VUZFOTA+CTxVMDYyOD47PFVGRTkwPjtJR05PUkU7SUdOT1JFCis8VUZFOTE+CTxVMDYyOD47PFVGRTkxPjtJR05PUkU7SUdOT1JFCis8VUZFOTI+CTxVMDYyOD47PFVGRTkyPjtJR05PUkU7SUdOT1JFCis8VTA2N0U+CTxVMDY3RT47PFUwNjdFPjtJR05PUkU7SUdOT1JFCis8VTA2QTQ+CTxVMDZBND47PFUwNkE0PjtJR05PUkU7SUdOT1JFCis8VTA2Mjk+CTxVMDYyOT47PFUwNjI5PjtJR05PUkU7SUdOT1JFCis8VUZFOTM+CTxVMDYyOT47PFVGRTkzPjtJR05PUkU7SUdOT1JFCis8VUZFOTQ+CTxVMDYyOT47PFVGRTk0PjtJR05PUkU7SUdOT1JFCis8VTA2MkE+CTxVMDYyOT47PFUwNjJBPjtJR05PUkU7SUdOT1JFCis8VUZFOTU+CTxVMDYyOT47PFVGRTk1PjtJR05PUkU7SUdOT1JFCis8VUZFOTY+CTxVMDYyOT47PFVGRTk2PjtJR05PUkU7SUdOT1JFCis8VUZFOTc+CTxVMDYyOT47PFVGRTk3PjtJR05PUkU7SUdOT1JFCis8VUZFOTg+CTxVMDYyOT47PFVGRTk4PjtJR05PUkU7SUdOT1JFCis8VTA2MkI+CTxVMDYyQj47PFUwNjJCPjtJR05PUkU7SUdOT1JFCis8VUZFOTk+CTxVMDYyQj47PFVGRTk5PjtJR05PUkU7SUdOT1JFCis8VUZFOUE+CTxVMDYyQj47PFVGRTlBPjtJR05PUkU7SUdOT1JFCis8VUZFOUI+CTxVMDYyQj47PFVGRTlCPjtJR05PUkU7SUdOT1JFCis8VUZFOUM+CTxVMDYyQj47PFVGRTlDPjtJR05PUkU7SUdOT1JFCis8VTA2MkM+CTxVMDYyQz47PFUwNjJDPjtJR05PUkU7SUdOT1JFCis8VUZFOUQ+CTxVMDYyQz47PFVGRTlEPjtJR05PUkU7SUdOT1JFCis8VUZFOUU+CTxVMDYyQz47PFVGRTlFPjtJR05PUkU7SUdOT1JFCis8VUZFOUY+CTxVMDYyQz47PFVGRTlGPjtJR05PUkU7SUdOT1JFCis8VUZFQTA+CTxVMDYyQz47PFVGRUEwPjtJR05PUkU7SUdOT1JFCis8VTA2MkQ+CTxVMDYyRD47PFUwNjJEPjtJR05PUkU7SUdOT1JFCis8VUZFQTE+CTxVMDYyRD47PFVGRUExPjtJR05PUkU7SUdOT1JFCis8VUZFQTI+CTxVMDYyRD47PFVGRUEyPjtJR05PUkU7SUdOT1JFCis8VUZFQTM+CTxVMDYyRD47PFVGRUEzPjtJR05PUkU7SUdOT1JFCis8VUZFQTQ+CTxVMDYyRD47PFVGRUE0PjtJR05PUkU7SUdOT1JFCis8VTA2MkU+CTxVMDYyRT47PFUwNjJFPjtJR05PUkU7SUdOT1JFCis8VUZFQTU+CTxVMDYyRT47PFVGRUE1PjtJR05PUkU7SUdOT1JFCis8VUZFQTY+CTxVMDYyRT47PFVGRUE2PjtJR05PUkU7SUdOT1JFCis8VUZFQTc+CTxVMDYyRT47PFVGRUE3PjtJR05PUkU7SUdOT1JFCis8VUZFQTg+CTxVMDYyRT47PFVGRUE4PjtJR05PUkU7SUdOT1JFCis8VTA2MkY+CTxVMDYyRj47PFUwNjJGPjtJR05PUkU7SUdOT1JFCis8VUZFQTk+CTxVMDYyRj47PFVGRUE5PjtJR05PUkU7SUdOT1JFCis8VUZFQUE+CTxVMDYyRj47PFVGRUFBPjtJR05PUkU7SUdOT1JFCis8VTA2MzA+CTxVMDYzMD47PFUwNjMwPjtJR05PUkU7SUdOT1JFCis8VUZFQUI+CTxVMDYzMD47PFVGRUFCPjtJR05PUkU7SUdOT1JFCis8VUZFQUM+CTxVMDYzMD47PFVGRUFDPjtJR05PUkU7SUdOT1JFCis8VTA2MzE+CTxVMDYzMT47PFUwNjMxPjtJR05PUkU7SUdOT1JFCis8VUZFQUQ+CTxVMDYzMT47PFVGRUFEPjtJR05PUkU7SUdOT1JFCis8VUZFQUU+CTxVMDYzMT47PFVGRUFFPjtJR05PUkU7SUdOT1JFCis8VTA2MzI+CTxVMDYzMj47PFUwNjMyPjtJR05PUkU7SUdOT1JFCis8VUZFQUY+CTxVMDYzMj47PFVGRUFGPjtJR05PUkU7SUdOT1JFCis8VUZFQjA+CTxVMDYzMj47PFVGRUIwPjtJR05PUkU7SUdOT1JFCis8VTA2MzM+CTxVMDYzMz47PFUwNjMzPjtJR05PUkU7SUdOT1JFCis8VUZFQjE+CTxVMDYzMz47PFVGRUIxPjtJR05PUkU7SUdOT1JFCis8VUZFQjI+CTxVMDYzMz47PFVGRUIyPjtJR05PUkU7SUdOT1JFCis8VUZFQjM+CTxVMDYzMz47PFVGRUIzPjtJR05PUkU7SUdOT1JFCis8VUZFQjQ+CTxVMDYzMz47PFVGRUI0PjtJR05PUkU7SUdOT1JFCis8VTA2MzQ+CTxVMDYzND47PFUwNjM0PjtJR05PUkU7SUdOT1JFCis8VUZFQjU+CTxVMDYzND47PFVGRUI1PjtJR05PUkU7SUdOT1JFCis8VUZFQjY+CTxVMDYzND47PFVGRUI2PjtJR05PUkU7SUdOT1JFCis8VUZFQjc+CTxVMDYzND47PFVGRUI3PjtJR05PUkU7SUdOT1JFCis8VUZFQjg+CTxVMDYzND47PFVGRUI4PjtJR05PUkU7SUdOT1JFCis8VTA2MzU+CTxVMDYzNT47PFUwNjM1PjtJR05PUkU7SUdOT1JFCis8VUZFQjk+CTxVMDYzNT47PFVGRUI5PjtJR05PUkU7SUdOT1JFCis8VUZFQkE+CTxVMDYzNT47PFVGRUJBPjtJR05PUkU7SUdOT1JFCis8VUZFQkI+CTxVMDYzNT47PFVGRUJCPjtJR05PUkU7SUdOT1JFCis8VUZFQkM+CTxVMDYzNT47PFVGRUJDPjtJR05PUkU7SUdOT1JFCis8VTA2MzY+CTxVMDYzNj47PFUwNjM2PjtJR05PUkU7SUdOT1JFCis8VUZFQkQ+CTxVMDYzNj47PFVGRUJEPjtJR05PUkU7SUdOT1JFCis8VUZFQkU+CTxVMDYzNj47PFVGRUJFPjtJR05PUkU7SUdOT1JFCis8VUZFQkY+CTxVMDYzNj47PFVGRUJGPjtJR05PUkU7SUdOT1JFCis8VUZFQzA+CTxVMDYzNj47PFVGRUMwPjtJR05PUkU7SUdOT1JFCis8VTA2Mzc+CTxVMDYzNz47PFUwNjM3PjtJR05PUkU7SUdOT1JFCis8VUZFQzE+CTxVMDYzNz47PFVGRUMxPjtJR05PUkU7SUdOT1JFCis8VUZFQzI+CTxVMDYzNz47PFVGRUMyPjtJR05PUkU7SUdOT1JFCis8VUZFQzM+CTxVMDYzNz47PFVGRUMzPjtJR05PUkU7SUdOT1JFCis8VUZFQzQ+CTxVMDYzNz47PFVGRUM0PjtJR05PUkU7SUdOT1JFCis8VTA2Mzg+CTxVMDYzOD47PFUwNjM4PjtJR05PUkU7SUdOT1JFCis8VUZFQzU+CTxVMDYzOD47PFVGRUM1PjtJR05PUkU7SUdOT1JFCis8VUZFQzY+CTxVMDYzOD47PFVGRUM2PjtJR05PUkU7SUdOT1JFCis8VUZFQzc+CTxVMDYzOD47PFVGRUM3PjtJR05PUkU7SUdOT1JFCis8VUZFQzg+CTxVMDYzOD47PFVGRUM4PjtJR05PUkU7SUdOT1JFCis8VTA2Mzk+CTxVMDYzOT47PFUwNjM5PjtJR05PUkU7SUdOT1JFCis8VUZFQzk+CTxVMDYzOT47PFVGRUM5PjtJR05PUkU7SUdOT1JFCis8VUZFQ0E+CTxVMDYzOT47PFVGRUNBPjtJR05PUkU7SUdOT1JFCis8VUZFQ0I+CTxVMDYzOT47PFVGRUNCPjtJR05PUkU7SUdOT1JFCis8VUZFQ0M+CTxVMDYzOT47PFVGRUNDPjtJR05PUkU7SUdOT1JFCis8VTA2M0E+CTxVMDYzQT47PFUwNjNBPjtJR05PUkU7SUdOT1JFCis8VUZFQ0Q+CTxVMDYzQT47PFVGRUNEPjtJR05PUkU7SUdOT1JFCis8VUZFQ0U+CTxVMDYzQT47PFVGRUNFPjtJR05PUkU7SUdOT1JFCis8VUZFQ0Y+CTxVMDYzQT47PFVGRUNGPjtJR05PUkU7SUdOT1JFCis8VUZFRDA+CTxVMDYzQT47PFVGRUQwPjtJR05PUkU7SUdOT1JFCis8VTA2NDE+CTxVMDY0MT47PFUwNjQxPjtJR05PUkU7SUdOT1JFCis8VUZFRDE+CTxVMDY0MT47PFVGRUQxPjtJR05PUkU7SUdOT1JFCis8VUZFRDI+CTxVMDY0MT47PFVGRUQyPjtJR05PUkU7SUdOT1JFCis8VUZFRDM+CTxVMDY0MT47PFVGRUQzPjtJR05PUkU7SUdOT1JFCis8VUZFRDQ+CTxVMDY0MT47PFVGRUQ0PjtJR05PUkU7SUdOT1JFCis8VTA2NDI+CTxVMDY0Mj47PFUwNjQyPjtJR05PUkU7SUdOT1JFCis8VUZFRDU+CTxVMDY0Mj47PFVGRUQ1PjtJR05PUkU7SUdOT1JFCis8VUZFRDY+CTxVMDY0Mj47PFVGRUQ2PjtJR05PUkU7SUdOT1JFCis8VUZFRDc+CTxVMDY0Mj47PFVGRUQ3PjtJR05PUkU7SUdOT1JFCis8VUZFRDg+CTxVMDY0Mj47PFVGRUQ4PjtJR05PUkU7SUdOT1JFCis8VTA2NDM+CTxVMDY0Mz47PFUwNjQzPjtJR05PUkU7SUdOT1JFCis8VUZFRDk+CTxVMDY0Mz47PFVGRUQ5PjtJR05PUkU7SUdOT1JFCis8VUZFREE+CTxVMDY0Mz47PFVGRURBPjtJR05PUkU7SUdOT1JFCis8VUZFREI+CTxVMDY0Mz47PFVGRURCPjtJR05PUkU7SUdOT1JFCis8VUZFREM+CTxVMDY0Mz47PFVGRURDPjtJR05PUkU7SUdOT1JFCis8VTA2NDQ+CTxVMDY0ND47PFUwNjQ0PjtJR05PUkU7SUdOT1JFCis8VUZFREQ+CTxVMDY0ND47PFVGRUREPjtJR05PUkU7SUdOT1JFCis8VUZFREU+CTxVMDY0ND47PFVGRURFPjtJR05PUkU7SUdOT1JFCis8VUZFREY+CTxVMDY0ND47PFVGRURGPjtJR05PUkU7SUdOT1JFCis8VUZFRTA+CTxVMDY0ND47PFVGRUUwPjtJR05PUkU7SUdOT1JFCis8VTA2NDU+CTxVMDY0NT47PFUwNjQ1PjtJR05PUkU7SUdOT1JFCis8VUZFRTE+CTxVMDY0NT47PFVGRUUxPjtJR05PUkU7SUdOT1JFCis8VUZFRTI+CTxVMDY0NT47PFVGRUUyPjtJR05PUkU7SUdOT1JFCis8VUZFRTM+CTxVMDY0NT47PFVGRUUzPjtJR05PUkU7SUdOT1JFCis8VUZFRTQ+CTxVMDY0NT47PFVGRUU0PjtJR05PUkU7SUdOT1JFCis8VTA2NDY+CTxVMDY0Nj47PFUwNjQ2PjtJR05PUkU7SUdOT1JFCis8VUZFRTU+CTxVMDY0Nj47PFVGRUU1PjtJR05PUkU7SUdOT1JFCis8VUZFRTY+CTxVMDY0Nj47PFVGRUU2PjtJR05PUkU7SUdOT1JFCis8VUZFRTc+CTxVMDY0Nj47PFVGRUU3PjtJR05PUkU7SUdOT1JFCis8VUZFRTg+CTxVMDY0Nj47PFVGRUU4PjtJR05PUkU7SUdOT1JFCis8VTA2NDc+CTxVMDY0Nz47PFUwNjQ3PjtJR05PUkU7SUdOT1JFCis8VUZFRTk+CTxVMDY0Nz47PFVGRUU5PjtJR05PUkU7SUdOT1JFCis8VUZFRUE+CTxVMDY0Nz47PFVGRUVBPjtJR05PUkU7SUdOT1JFCis8VUZFRUI+CTxVMDY0Nz47PFVGRUVCPjtJR05PUkU7SUdOT1JFCis8VUZFRUM+CTxVMDY0Nz47PFVGRUVDPjtJR05PUkU7SUdOT1JFCis8VTA2NDg+CTxVMDY0OD47PFUwNjQ4PjtJR05PUkU7SUdOT1JFCis8VUZFRUQ+CTxVMDY0OD47PFVGRUVEPjtJR05PUkU7SUdOT1JFCis8VUZFRUU+CTxVMDY0OD47PFVGRUVFPjtJR05PUkU7SUdOT1JFCis8VTA2NDk+CTxVMDY0OT47PFUwNjQ5PjtJR05PUkU7SUdOT1JFCis8VUZFRUY+CTxVMDY0OT47PFVGRUVGPjtJR05PUkU7SUdOT1JFCis8VUZFRjA+CTxVMDY0OT47PFVGRUYwPjtJR05PUkU7SUdOT1JFCis8VTA2NEE+CTxVMDY0QT47PFUwNjRBPjtJR05PUkU7SUdOT1JFCis8VUZFRjE+CTxVMDY0QT47PFVGRUYxPjtJR05PUkU7SUdOT1JFCis8VUZFRjI+CTxVMDY0QT47PFVGRUYyPjtJR05PUkU7SUdOT1JFCis8VUZFRjM+CTxVMDY0QT47PFVGRUYzPjtJR05PUkU7SUdOT1JFCis8VUZFRjQ+CTxVMDY0QT47PFVGRUY0PjtJR05PUkU7SUdOT1JFCisKKzxVMDY0Qj4JSUdOT1JFO0lHTk9SRTs8VTA2NEI+O0lHTk9SRQorPFUwNjRDPglJR05PUkU7SUdOT1JFOzxVMDY0Qz47SUdOT1JFCis8VTA2NEQ+CUlHTk9SRTtJR05PUkU7PFUwNjREPjtJR05PUkUKKzxVMDY0RT4JSUdOT1JFO0lHTk9SRTs8VTA2NEU+O0lHTk9SRQorPFUwNjRGPglJR05PUkU7SUdOT1JFOzxVMDY0Rj47SUdOT1JFCis8VTA2NTA+CUlHTk9SRTtJR05PUkU7PFUwNjUwPjtJR05PUkUKKzxVMDY1MT4JSUdOT1JFO0lHTk9SRTs8VTA2NTE+O0lHTk9SRQorPFVGRTdEPglJR05PUkU7SUdOT1JFOzxVRkU3RD47SUdOT1JFCis8VTA2NTI+CUlHTk9SRTtJR05PUkU7PFUwNjUyPjtJR05PUkUKKworPFUwNjYwPgk8VTAwMzA+OzxVMDY2MD47SUdOT1JFO0lHTk9SRQorPFUwNjYxPgk8VTAwMzE+OzxVMDY2MT47SUdOT1JFO0lHTk9SRQorPFUwNjYyPgk8VTAwMzI+OzxVMDY2Mj47SUdOT1JFO0lHTk9SRQorPFUwNjYzPgk8VTAwMzM+OzxVMDY2Mz47SUdOT1JFO0lHTk9SRQorPFUwNjY0Pgk8VTAwMzQ+OzxVMDY2ND47SUdOT1JFO0lHTk9SRQorPFUwNjY1Pgk8VTAwMzU+OzxVMDY2NT47SUdOT1JFO0lHTk9SRQorPFUwNjY2Pgk8VTAwMzY+OzxVMDY2Nj47SUdOT1JFO0lHTk9SRQorPFUwNjY3Pgk8VTAwMzc+OzxVMDY2Nz47SUdOT1JFO0lHTk9SRQorPFUwNjY4Pgk8VTAwMzg+OzxVMDY2OD47SUdOT1JFO0lHTk9SRQorPFUwNjY5Pgk8VTAwMzk+OzxVMDY2OT47SUdOT1JFO0lHTk9SRQorCis8VUZFRjU+CSI8VTA2NDQ+PFUwNjIyPiI7IjxVMDY0ND48VTA2MjI+IjsiPFVGRUY1PjxVRkVGNT4iO0lHTk9SRQorPFVGRUY2PgkiPFUwNjQ0PjxVMDYyMj4iOyI8VTA2NDQ+PFVGRTgyPiI7IjxVRkVGNj48VUZFRjY+IjtJR05PUkUKKzxVRkVGNz4JIjxVMDY0ND48VTA2MjM+IjsiPFUwNjQ0PjxVMDYyMz4iOyI8VUZFRjc+PFVGRUY3PiI7SUdOT1JFCis8VUZFRjg+CSI8VTA2NDQ+PFUwNjIzPiI7IjxVMDY0ND48VUZFODQ+IjsiPFVGRUY4PjxVRkVGOD4iO0lHTk9SRQorPFVGRUY5PgkiPFUwNjQ0PjxVMDYyNT4iOyI8VTA2NDQ+PFUwNjI1PiI7IjxVRkVGOT48VUZFRjk+IjtJR05PUkUKKzxVRkVGQT4JIjxVMDY0ND48VTA2MjU+IjsiPFUwNjQ0PjxVRkU4OD4iOyI8VUZFRkE+PFVGRUZBPiI7SUdOT1JFCis8VUZFRkI+CSI8VTA2NDQ+PFUwNjI3PiI7IjxVMDY0ND48VUZFOEQ+IjsiPFVGRUZCPjxVRkVGQj4iO0lHTk9SRQorPFVGRUZDPgkiPFUwNjQ0PjxVMDYyNz4iOyI8VTA2NDQ+PFVGRThFPiI7IjxVRkVGQz48VUZFRkM+IjtJR05PUkUKKworJSBrYXRha2FuYS9oaXJhZ2FuYSBzb3J0aW5nCislIGJhc2UgaXMga2F0YWthbmEsIGFzIHRoaXMgaXMgcHJlc2VudCBpbiBtb3N0IGNoYXJzZXRzCislIG5vcm1hbCBiZWZvcmUgdm9pY2VkIGJlZm9yZSBzZW1pLXZvaWNlZAorJSBzbWFsbCB2b2NhbHMgYmVmb3JlIG5vcm1hbCB2b2NhbHMKKyUga2F0YWthbmEgYmVmb3JlIGhpcmFnYW5hCisKKzxVMzBBMT4JPFUzMEExPjs8VTMwQTE+O0lHTk9SRTtJR05PUkUKKzxVMzA0MT4JPFUzMEExPjs8VTMwNDE+O0lHTk9SRTtJR05PUkUKKzxVMzBBMj4JPFUzMEExPjs8VTMwQTI+O0lHTk9SRTtJR05PUkUKKzxVMzA0Mj4JPFUzMEExPjs8VTMwNDI+O0lHTk9SRTtJR05PUkUKKzxVMzBBMz4JPFUzMEEzPjs8VTMwQTM+O0lHTk9SRTtJR05PUkUKKzxVMzA0Mz4JPFUzMEEzPjs8VTMwNDM+O0lHTk9SRTtJR05PUkUKKzxVMzBBND4JPFUzMEEzPjs8VTMwQTQ+O0lHTk9SRTtJR05PUkUKKzxVMzA0ND4JPFUzMEEzPjs8VTMwNDQ+O0lHTk9SRTtJR05PUkUKKzxVMzBBNT4JPFUzMEE1Pjs8VTMwQTU+O0lHTk9SRTtJR05PUkUKKzxVMzA0NT4JPFUzMEE1Pjs8VTMwNDU+O0lHTk9SRTtJR05PUkUKKzxVMzBBNj4JPFUzMEE1Pjs8VTMwQTY+O0lHTk9SRTtJR05PUkUKKzxVMzA0Nj4JPFUzMEE1Pjs8VTMwNDY+O0lHTk9SRTtJR05PUkUKKzxVMzBGND4JPFUzMEE1Pjs8VTMwRjQ+O0lHTk9SRTtJR05PUkUKKzxVMzBBNz4JPFUzMEE3Pjs8VTMwQTc+O0lHTk9SRTtJR05PUkUKKzxVMzA0Nz4JPFUzMEE3Pjs8VTMwNDc+O0lHTk9SRTtJR05PUkUKKzxVMzBBOD4JPFUzMEE3Pjs8VTMwQTg+O0lHTk9SRTtJR05PUkUKKzxVMzA0OD4JPFUzMEE3Pjs8VTMwNDg+O0lHTk9SRTtJR05PUkUKKzxVMzBBOT4JPFUzMEE5Pjs8VTMwQTk+O0lHTk9SRTtJR05PUkUKKzxVMzA0OT4JPFUzMEE5Pjs8VTMwNDk+O0lHTk9SRTtJR05PUkUKKzxVMzBBQT4JPFUzMEE5Pjs8VTMwQUE+O0lHTk9SRTtJR05PUkUKKzxVMzA0QT4JPFUzMEE5Pjs8VTMwNEE+O0lHTk9SRTtJR05PUkUKKzxVMzBGNT4JPFUzMEY1Pjs8VTMwRjU+O0lHTk9SRTtJR05PUkUKKzxVMzBBQj4JPFUzMEY1Pjs8VTMwQUI+O0lHTk9SRTtJR05PUkUKKzxVMzA0Qj4JPFUzMEY1Pjs8VTMwNEI+O0lHTk9SRTtJR05PUkUKKzxVMzBBQz4JPFUzMEY1Pjs8VTMwQUM+O0lHTk9SRTtJR05PUkUKKzxVMzA0Qz4JPFUzMEY1Pjs8VTMwNEM+O0lHTk9SRTtJR05PUkUKKzxVMzBBRD4JPFUzMEFEPjs8VTMwQUQ+O0lHTk9SRTtJR05PUkUKKzxVMzA0RD4JPFUzMEFEPjs8VTMwNEQ+O0lHTk9SRTtJR05PUkUKKzxVMzBBRT4JPFUzMEFEPjs8VTMwQUU+O0lHTk9SRTtJR05PUkUKKzxVMzA0RT4JPFUzMEFEPjs8VTMwNEU+O0lHTk9SRTtJR05PUkUKKzxVMzBBRj4JPFUzMEFGPjs8VTMwQUY+O0lHTk9SRTtJR05PUkUKKzxVMzA0Rj4JPFUzMEFGPjs8VTMwNEY+O0lHTk9SRTtJR05PUkUKKzxVMzBCMD4JPFUzMEFGPjs8VTMwQjA+O0lHTk9SRTtJR05PUkUKKzxVMzA1MD4JPFUzMEFGPjs8VTMwNTA+O0lHTk9SRTtJR05PUkUKKzxVMzBGNj4JPFUzMEY2Pjs8VTMwRjY+O0lHTk9SRTtJR05PUkUKKzxVMzBCMT4JPFUzMEY2Pjs8VTMwQjE+O0lHTk9SRTtJR05PUkUKKzxVMzA1MT4JPFUzMEY2Pjs8VTMwNTE+O0lHTk9SRTtJR05PUkUKKzxVMzBCMj4JPFUzMEY2Pjs8VTMwQjI+O0lHTk9SRTtJR05PUkUKKzxVMzA1Mj4JPFUzMEY2Pjs8VTMwNTI+O0lHTk9SRTtJR05PUkUKKzxVMzBCMz4JPFUzMEIzPjs8VTMwQjM+O0lHTk9SRTtJR05PUkUKKzxVMzA1Mz4JPFUzMEIzPjs8VTMwNTM+O0lHTk9SRTtJR05PUkUKKzxVMzBCND4JPFUzMEIzPjs8VTMwQjQ+O0lHTk9SRTtJR05PUkUKKzxVMzA1ND4JPFUzMEIzPjs8VTMwNTQ+O0lHTk9SRTtJR05PUkUKKzxVMzBCNT4JPFUzMEI1Pjs8VTMwQjU+O0lHTk9SRTtJR05PUkUKKzxVMzA1NT4JPFUzMEI1Pjs8VTMwNTU+O0lHTk9SRTtJR05PUkUKKzxVMzBCNj4JPFUzMEI1Pjs8VTMwQjY+O0lHTk9SRTtJR05PUkUKKzxVMzA1Nj4JPFUzMEI1Pjs8VTMwNTY+O0lHTk9SRTtJR05PUkUKKzxVMzBCNz4JPFUzMEI3Pjs8VTMwQjc+O0lHTk9SRTtJR05PUkUKKzxVMzA1Nz4JPFUzMEI3Pjs8VTMwNTc+O0lHTk9SRTtJR05PUkUKKzxVMzBCOD4JPFUzMEI3Pjs8VTMwQjg+O0lHTk9SRTtJR05PUkUKKzxVMzA1OD4JPFUzMEI3Pjs8VTMwNTg+O0lHTk9SRTtJR05PUkUKKzxVMzBCOT4JPFUzMEI5Pjs8VTMwQjk+O0lHTk9SRTtJR05PUkUKKzxVMzA1OT4JPFUzMEI5Pjs8VTMwNTk+O0lHTk9SRTtJR05PUkUKKzxVMzBCQT4JPFUzMEI5Pjs8VTMwQkE+O0lHTk9SRTtJR05PUkUKKzxVMzA1QT4JPFUzMEI5Pjs8VTMwNUE+O0lHTk9SRTtJR05PUkUKKzxVMzBCQj4JPFUzMEJCPjs8VTMwQkI+O0lHTk9SRTtJR05PUkUKKzxVMzA1Qj4JPFUzMEJCPjs8VTMwNUI+O0lHTk9SRTtJR05PUkUKKzxVMzBCQz4JPFUzMEJCPjs8VTMwQkM+O0lHTk9SRTtJR05PUkUKKzxVMzA1Qz4JPFUzMEJCPjs8VTMwNUM+O0lHTk9SRTtJR05PUkUKKzxVMzBCRD4JPFUzMEJEPjs8VTMwQkQ+O0lHTk9SRTtJR05PUkUKKzxVMzA1RD4JPFUzMEJEPjs8VTMwNUQ+O0lHTk9SRTtJR05PUkUKKzxVMzBCRT4JPFUzMEJEPjs8VTMwQkU+O0lHTk9SRTtJR05PUkUKKzxVMzA1RT4JPFUzMEJEPjs8VTMwNUU+O0lHTk9SRTtJR05PUkUKKzxVMzBCRj4JPFUzMEJGPjs8VTMwQkY+O0lHTk9SRTtJR05PUkUKKzxVMzA1Rj4JPFUzMEJGPjs8VTMwNUY+O0lHTk9SRTtJR05PUkUKKzxVMzBDMD4JPFUzMEJGPjs8VTMwQzA+O0lHTk9SRTtJR05PUkUKKzxVMzA2MD4JPFUzMEJGPjs8VTMwNjA+O0lHTk9SRTtJR05PUkUKKzxVMzBDMT4JPFUzMEMxPjs8VTMwQzE+O0lHTk9SRTtJR05PUkUKKzxVMzA2MT4JPFUzMEMxPjs8VTMwNjE+O0lHTk9SRTtJR05PUkUKKzxVMzBDMj4JPFUzMEMxPjs8VTMwQzI+O0lHTk9SRTtJR05PUkUKKzxVMzA2Mj4JPFUzMEMxPjs8VTMwNjI+O0lHTk9SRTtJR05PUkUKKzxVMzBDMz4JPFUzMEMzPjs8VTMwQzM+O0lHTk9SRTtJR05PUkUKKzxVMzA2Mz4JPFUzMEMzPjs8VTMwNjM+O0lHTk9SRTtJR05PUkUKKzxVMzBDND4JPFUzMEMzPjs8VTMwQzQ+O0lHTk9SRTtJR05PUkUKKzxVMzA2ND4JPFUzMEMzPjs8VTMwNjQ+O0lHTk9SRTtJR05PUkUKKzxVMzBDNT4JPFUzMEMzPjs8VTMwQzU+O0lHTk9SRTtJR05PUkUKKzxVMzA2NT4JPFUzMEMzPjs8VTMwNjU+O0lHTk9SRTtJR05PUkUKKzxVMzBDNj4JPFUzMEM2Pjs8VTMwQzY+O0lHTk9SRTtJR05PUkUKKzxVMzA2Nj4JPFUzMEM2Pjs8VTMwNjY+O0lHTk9SRTtJR05PUkUKKzxVMzBDNz4JPFUzMEM2Pjs8VTMwQzc+O0lHTk9SRTtJR05PUkUKKzxVMzA2Nz4JPFUzMEM2Pjs8VTMwNjc+O0lHTk9SRTtJR05PUkUKKzxVMzBDOD4JPFUzMEM4Pjs8VTMwQzg+O0lHTk9SRTtJR05PUkUKKzxVMzA2OD4JPFUzMEM4Pjs8VTMwNjg+O0lHTk9SRTtJR05PUkUKKzxVMzBDOT4JPFUzMEM4Pjs8VTMwQzk+O0lHTk9SRTtJR05PUkUKKzxVMzA2OT4JPFUzMEM4Pjs8VTMwNjk+O0lHTk9SRTtJR05PUkUKKzxVMzBDQT4JPFUzMENBPjs8VTMwQ0E+O0lHTk9SRTtJR05PUkUKKzxVMzA2QT4JPFUzMENBPjs8VTMwNkE+O0lHTk9SRTtJR05PUkUKKzxVMzBDQj4JPFUzMENCPjs8VTMwQ0I+O0lHTk9SRTtJR05PUkUKKzxVMzA2Qj4JPFUzMENCPjs8VTMwNkI+O0lHTk9SRTtJR05PUkUKKzxVMzBDQz4JPFUzMENDPjs8VTMwQ0M+O0lHTk9SRTtJR05PUkUKKzxVMzA2Qz4JPFUzMENDPjs8VTMwNkM+O0lHTk9SRTtJR05PUkUKKzxVMzBDRD4JPFUzMENEPjs8VTMwQ0Q+O0lHTk9SRTtJR05PUkUKKzxVMzA2RD4JPFUzMENEPjs8VTMwNkQ+O0lHTk9SRTtJR05PUkUKKzxVMzBDRT4JPFUzMENFPjs8VTMwQ0U+O0lHTk9SRTtJR05PUkUKKzxVMzA2RT4JPFUzMENFPjs8VTMwNkU+O0lHTk9SRTtJR05PUkUKKzxVMzBDRj4JPFUzMENGPjs8VTMwQ0Y+O0lHTk9SRTtJR05PUkUKKzxVMzA2Rj4JPFUzMENGPjs8VTMwNkY+O0lHTk9SRTtJR05PUkUKKzxVMzBEMD4JPFUzMENGPjs8VTMwRDA+O0lHTk9SRTtJR05PUkUKKzxVMzA3MD4JPFUzMENGPjs8VTMwNzA+O0lHTk9SRTtJR05PUkUKKzxVMzBEMT4JPFUzMENGPjs8VTMwRDE+O0lHTk9SRTtJR05PUkUKKzxVMzA3MT4JPFUzMENGPjs8VTMwNzE+O0lHTk9SRTtJR05PUkUKKzxVMzBEMj4JPFUzMEQyPjs8VTMwRDI+O0lHTk9SRTtJR05PUkUKKzxVMzA3Mj4JPFUzMEQyPjs8VTMwNzI+O0lHTk9SRTtJR05PUkUKKzxVMzBEMz4JPFUzMEQyPjs8VTMwRDM+O0lHTk9SRTtJR05PUkUKKzxVMzA3Mz4JPFUzMEQyPjs8VTMwNzM+O0lHTk9SRTtJR05PUkUKKzxVMzBEND4JPFUzMEQyPjs8VTMwRDQ+O0lHTk9SRTtJR05PUkUKKzxVMzA3ND4JPFUzMEQyPjs8VTMwNzQ+O0lHTk9SRTtJR05PUkUKKzxVMzBENT4JPFUzMEQ1Pjs8VTMwRDU+O0lHTk9SRTtJR05PUkUKKzxVMzA3NT4JPFUzMEQ1Pjs8VTMwNzU+O0lHTk9SRTtJR05PUkUKKzxVMzBENj4JPFUzMEQ1Pjs8VTMwRDY+O0lHTk9SRTtJR05PUkUKKzxVMzA3Nj4JPFUzMEQ1Pjs8VTMwNzY+O0lHTk9SRTtJR05PUkUKKzxVMzBENz4JPFUzMEQ1Pjs8VTMwRDc+O0lHTk9SRTtJR05PUkUKKzxVMzA3Nz4JPFUzMEQ1Pjs8VTMwNzc+O0lHTk9SRTtJR05PUkUKKzxVMzBEOD4JPFUzMEQ4Pjs8VTMwRDg+O0lHTk9SRTtJR05PUkUKKzxVMzA3OD4JPFUzMEQ4Pjs8VTMwNzg+O0lHTk9SRTtJR05PUkUKKzxVMzBEOT4JPFUzMEQ4Pjs8VTMwRDk+O0lHTk9SRTtJR05PUkUKKzxVMzA3OT4JPFUzMEQ4Pjs8VTMwNzk+O0lHTk9SRTtJR05PUkUKKzxVMzBEQT4JPFUzMEQ4Pjs8VTMwREE+O0lHTk9SRTtJR05PUkUKKzxVMzA3QT4JPFUzMEQ4Pjs8VTMwN0E+O0lHTk9SRTtJR05PUkUKKzxVMzBEQj4JPFUzMERCPjs8VTMwREI+O0lHTk9SRTtJR05PUkUKKzxVMzA3Qj4JPFUzMERCPjs8VTMwN0I+O0lHTk9SRTtJR05PUkUKKzxVMzBEQz4JPFUzMERCPjs8VTMwREM+O0lHTk9SRTtJR05PUkUKKzxVMzA3Qz4JPFUzMERCPjs8VTMwN0M+O0lHTk9SRTtJR05PUkUKKzxVMzBERD4JPFUzMERCPjs8VTMwREQ+O0lHTk9SRTtJR05PUkUKKzxVMzA3RD4JPFUzMERCPjs8VTMwN0Q+O0lHTk9SRTtJR05PUkUKKzxVMzBERT4JPFUzMERFPjs8VTMwREU+O0lHTk9SRTtJR05PUkUKKzxVMzA3RT4JPFUzMERFPjs8VTMwN0U+O0lHTk9SRTtJR05PUkUKKzxVMzBERj4JPFUzMERGPjs8VTMwREY+O0lHTk9SRTtJR05PUkUKKzxVMzA3Rj4JPFUzMERGPjs8VTMwN0Y+O0lHTk9SRTtJR05PUkUKKzxVMzBFMD4JPFUzMEUwPjs8VTMwRTA+O0lHTk9SRTtJR05PUkUKKzxVMzA4MD4JPFUzMEUwPjs8VTMwODA+O0lHTk9SRTtJR05PUkUKKzxVMzBFMT4JPFUzMEUxPjs8VTMwRTE+O0lHTk9SRTtJR05PUkUKKzxVMzA4MT4JPFUzMEUxPjs8VTMwODE+O0lHTk9SRTtJR05PUkUKKzxVMzBFMj4JPFUzMEUyPjs8VTMwRTI+O0lHTk9SRTtJR05PUkUKKzxVMzA4Mj4JPFUzMEUyPjs8VTMwODI+O0lHTk9SRTtJR05PUkUKKzxVMzBFMz4JPFUzMEUzPjs8VTMwRTM+O0lHTk9SRTtJR05PUkUKKzxVMzA4Mz4JPFUzMEUzPjs8VTMwODM+O0lHTk9SRTtJR05PUkUKKzxVMzBFND4JPFUzMEUzPjs8VTMwRTQ+O0lHTk9SRTtJR05PUkUKKzxVMzA4ND4JPFUzMEUzPjs8VTMwODQ+O0lHTk9SRTtJR05PUkUKKzxVMzBFNT4JPFUzMEU1Pjs8VTMwRTU+O0lHTk9SRTtJR05PUkUKKzxVMzA4NT4JPFUzMEU1Pjs8VTMwODU+O0lHTk9SRTtJR05PUkUKKzxVMzBFNj4JPFUzMEU1Pjs8VTMwRTY+O0lHTk9SRTtJR05PUkUKKzxVMzA4Nj4JPFUzMEU1Pjs8VTMwODY+O0lHTk9SRTtJR05PUkUKKzxVMzBFNz4JPFUzMEU3Pjs8VTMwRTc+O0lHTk9SRTtJR05PUkUKKzxVMzA4Nz4JPFUzMEU3Pjs8VTMwODc+O0lHTk9SRTtJR05PUkUKKzxVMzBFOD4JPFUzMEU3Pjs8VTMwRTg+O0lHTk9SRTtJR05PUkUKKzxVMzA4OD4JPFUzMEU3Pjs8VTMwODg+O0lHTk9SRTtJR05PUkUKKzxVMzBFOT4JPFUzMEU5Pjs8VTMwRTk+O0lHTk9SRTtJR05PUkUKKzxVMzA4OT4JPFUzMEU5Pjs8VTMwODk+O0lHTk9SRTtJR05PUkUKKzxVMzBFQT4JPFUzMEVBPjs8VTMwRUE+O0lHTk9SRTtJR05PUkUKKzxVMzA4QT4JPFUzMEVBPjs8VTMwOEE+O0lHTk9SRTtJR05PUkUKKzxVMzBFQj4JPFUzMEVCPjs8VTMwRUI+O0lHTk9SRTtJR05PUkUKKzxVMzA4Qj4JPFUzMEVCPjs8VTMwOEI+O0lHTk9SRTtJR05PUkUKKzxVMzBFQz4JPFUzMEVDPjs8VTMwRUM+O0lHTk9SRTtJR05PUkUKKzxVMzA4Qz4JPFUzMEVDPjs8VTMwOEM+O0lHTk9SRTtJR05PUkUKKzxVMzBFRD4JPFUzMEVEPjs8VTMwRUQ+O0lHTk9SRTtJR05PUkUKKzxVMzA4RD4JPFUzMEVEPjs8VTMwOEQ+O0lHTk9SRTtJR05PUkUKKzxVMzBFRT4JPFUzMEVFPjs8VTMwRUU+O0lHTk9SRTtJR05PUkUKKzxVMzA4RT4JPFUzMEVFPjs8VTMwOEU+O0lHTk9SRTtJR05PUkUKKzxVMzBFRj4JPFUzMEVFPjs8VTMwRUY+O0lHTk9SRTtJR05PUkUKKzxVMzA4Rj4JPFUzMEVFPjs8VTMwOEY+O0lHTk9SRTtJR05PUkUKKzxVMzBGMD4JPFUzMEYwPjs8VTMwRjA+O0lHTk9SRTtJR05PUkUKKzxVMzA5MD4JPFUzMEYwPjs8VTMwOTA+O0lHTk9SRTtJR05PUkUKKzxVMzBGMT4JPFUzMEYxPjs8VTMwRjE+O0lHTk9SRTtJR05PUkUKKzxVMzA5MT4JPFUzMEYxPjs8VTMwOTE+O0lHTk9SRTtJR05PUkUKKzxVMzBGMj4JPFUzMEYyPjs8VTMwRjI+O0lHTk9SRTtJR05PUkUKKzxVMzA5Mj4JPFUzMEYyPjs8VTMwOTI+O0lHTk9SRTtJR05PUkUKKzxVMzBGMz4JPFUzMEYzPjs8VTMwRjM+O0lHTk9SRTtJR05PUkUKKzxVMzA5Mz4JPFUzMEYzPjs8VTMwOTM+O0lHTk9SRTtJR05PUkUKKworb3JkZXJfZW5kCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICI8VTAwNEM+PFUwMDU0PjxVMDA0Qz48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAiPFUwMDRDPjxVMDA3ND4iCittb25fZGVjaW1hbF9wb2ludCAgICI8VTAwMkM+IgorbW9uX3Rob3VzYW5kc19zZXAgICAiPFUwMDJFPiIKK21vbl9ncm91cGluZyAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgMAorcF9zZXBfYnlfc3BhY2UgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgIDAKK25fc2VwX2J5X3NwYWNlICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICI8VTAwMkM+IgordGhvdXNhbmRzX3NlcCAgICAgICAiPFUwMDJFPiIKK2dyb3VwaW5nICAgICAgICAgICAgMzszCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICAgIjxVMDA1Mz48VTAwNkI+IjsiPFUwMDUwPjxVMDA3Mj4iOyI8VTAwNDE+PFUwMDZFPiI7LworICAgICAgICAgICI8VTAwNTQ+PFUwMDcyPiI7IjxVMDA0Qj48VTAwNzQ+IjsiPFUwMDUwPjxVMDA2RT4iOy8KKyAgICAgICAgICAiPFUwMTYwPjxVMDA3ND4iCitkYXkgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDZCPjxVMDA2RD48VTAwNjE+PFUwMDY0PjxVMDA2OT48VTAwNjU+PFUwMDZFPjxVMDA2OT48VTAwNzM+IjsvCisgICAgICAgICAgIjxVMDA1MD48VTAwNjk+PFUwMDcyPjxVMDA2RD48VTAwNjE+PFUwMDY0PjxVMDA2OT48VTAwNjU+PFUwMDZFPjxVMDA2OT48VTAwNzM+IjsvCisgICAgICAgICAgIjxVMDA0MT48VTAwNkU+PFUwMDc0PjxVMDA3Mj48VTAwNjE+PFUwMDY0PjxVMDA2OT48VTAwNjU+PFUwMDZFPjxVMDA2OT48VTAwNzM+IjsvCisgICAgICAgICAgIjxVMDA1ND48VTAwNzI+PFUwMDY1PjxVMDEwRD48VTAwNjk+PFUwMDYxPjxVMDA2ND48VTAwNjk+PFUwMDY1PjxVMDA2RT48VTAwNjk+PFUwMDczPiI7LworICAgICAgICAgICI8VTAwNEI+PFUwMDY1PjxVMDA3ND48VTAwNzY+PFUwMDY5PjxVMDA3Mj48VTAwNzQ+PFUwMDYxPjxVMDA2ND48VTAwNjk+PFUwMDY1PjxVMDA2RT48VTAwNjk+PFUwMDczPiI7LworICAgICAgICAgICI8VTAwNTA+PFUwMDY1PjxVMDA2RT48VTAwNkI+PFUwMDc0PjxVMDA2MT48VTAwNjQ+PFUwMDY5PjxVMDA2NT48VTAwNkU+PFUwMDY5PjxVMDA3Mz4iOy8KKyAgICAgICAgICAiPFUwMTYwPjxVMDA2NT48VTAxNjE+PFUwMDc0PjxVMDA2MT48VTAwNjQ+PFUwMDY5PjxVMDA2NT48VTAwNkU+PFUwMDY5PjxVMDA3Mz4iCithYm1vbiAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDc1PiI7IjxVMDA1Nj48VTAwNjE+PFUwMDczPiI7LworICAgICAgICAgICI8VTAwNEI+PFUwMDZGPjxVMDA3Nj4iOyI8VTAwNDI+PFUwMDYxPjxVMDA2Qz4iOy8KKyAgICAgICAgICAiPFUwMDQ3PjxVMDA2NT48VTAwNjc+IjsiPFUwMDQyPjxVMDA2OT48VTAwNzI+IjsvCisgICAgICAgICAgIjxVMDA0Qz48VTAwNjk+PFUwMDY1PiI7IjxVMDA1Mj48VTAwNjc+PFUwMDcwPiI7LworICAgICAgICAgICI8VTAwNTI+PFUwMDY3PjxVMDA3Mz4iOyI8VTAwNTM+PFUwMDcwPjxVMDA2MT4iOy8KKyAgICAgICAgICAiPFUwMDRDPjxVMDA2MT48VTAwNzA+IjsiPFUwMDQ3PjxVMDA3Mj48VTAwNjQ+IgorbW9uICAgICAgICI8VTAwNzM+PFUwMDYxPjxVMDA3NT48VTAwNzM+PFUwMDY5PjxVMDA2Rj4iOy8KKyAgICAgICAgICAiPFUwMDc2PjxVMDA2MT48VTAwNzM+PFUwMDYxPjxVMDA3Mj48VTAwNjk+PFUwMDZGPiI7LworICAgICAgICAgICI8VTAwNkI+PFUwMDZGPjxVMDA3Nj48VTAwNkY+IjsvCisgICAgICAgICAgIjxVMDA2Mj48VTAwNjE+PFUwMDZDPjxVMDA2MT48VTAwNkU+PFUwMDY0PjxVMDE3RT48VTAwNjk+PFUwMDZGPiI7LworICAgICAgICAgICI8VTAwNjc+PFUwMDY1PjxVMDA2Nz48VTAwNzU+PFUwMTdFPjxVMDExNz48VTAwNzM+IjsvCisgICAgICAgICAgIjxVMDA2Mj48VTAwNjk+PFUwMDcyPjxVMDE3RT48VTAwNjU+PFUwMDZDPjxVMDA2OT48VTAwNkY+IjsvCisgICAgICAgICAgIjxVMDA2Qz48VTAwNjk+PFUwMDY1PjxVMDA3MD48VTAwNkY+PFUwMDczPiI7LworICAgICAgICAgICI8VTAwNzI+PFUwMDc1PjxVMDA2Nz48VTAwNzA+PFUwMDZBPjxVMDE2Qj48VTAxMEQ+PFUwMDY5PjxVMDA2Rj4iOy8KKyAgICAgICAgICAiPFUwMDcyPjxVMDA3NT48VTAwNjc+PFUwMDczPjxVMDExNz48VTAwNkE+PFUwMDZGPiI7LworICAgICAgICAgICI8VTAwNzM+PFUwMDcwPjxVMDA2MT48VTAwNkM+PFUwMDY5PjxVMDA2Rj4iOy8KKyAgICAgICAgICAiPFUwMDZDPjxVMDA2MT48VTAwNzA+PFUwMDZCPjxVMDA3Mj48VTAwNjk+PFUwMTBEPjxVMDA2OT48VTAwNkY+IjsvCisgICAgICAgICAgIjxVMDA2Nz48VTAwNzI+PFUwMDc1PjxVMDA2Rj48VTAwNjQ+PFUwMTdFPjxVMDA2OT48VTAwNkY+IgorZF90X2ZtdCAgICI8VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwNkQ+PFUwMDJFPjxVMDAyMD48VTAwMjU+PFUwMDQyPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwNjQ+PFUwMDJFPjxVMDAyMD48VTAwMjU+PFUwMDU0PiIKK2RfZm10ICAgICAiPFUwMDI1PjxVMDA1OT48VTAwMkU+PFUwMDI1PjxVMDA2RD48VTAwMkU+PFUwMDI1PjxVMDA2ND4iCit0X2ZtdCAgICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAgICIiOyIiCit0X2ZtdF9hbXBtICIiCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNTQ+PFUwMDc0PjxVMDA1OT48VTAwNzk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNEU+PFUwMDZFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19QQVBFUgorJSBGSVhNRQoraGVpZ2h0ICAgMjk3CislIEZJWE1FCit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDMzPjxVMDAzNz48VTAwMzA+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorJSBGSVhNRQorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAiPFUwMDRDPjxVMDA1ND4iCitjb3VudHJ5X2FiMyAiPFUwMDRDPjxVMDA1ND48VTAwNTU+IgorY291bnRyeV9udW0gNDQwCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvbHZfTFYgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9sdl9MVgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGYwZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvbHZfTFYKQEAgLTAsMCArMSwyMjI1IEBACitlc2NhcGVfY2hhciAvCitjb21tZW50X2NoYXIgJQorCislIExhdHZpYW4gbGFuZ3VhZ2UgbG9jYWxlIGZvciBMYXR2aWEKKyUgU291cmNlOiBMYXR2aWFuIFN0YW5kYXJkIExWUyAyNC05MworJSBBZGRyZXNzOiBMVSBNSUksIFJhaW5pcyBib3VsLiAyOQorJSAgICBMVi0xNDU5IFJpZ2EsIExhdHZpYQorJSBDb250YWN0OiBJbWFudHMgTWV0cmEKKyUgRW1haWw6IG1ldHJhQG1paS5sdS5sdgorJSBUZWw6ICszNzEgLSAyIC0gMjEwMTE2CislIEZheDogKzM3MSAtIDIgLSAyMjUzNDMKKyUgTGFuZ3VhZ2U6IGx2CislIFRlcnJpdG9yeTogTFYKKyUgUmV2aXNpb246IDQuMAorJSBEYXRlOiAxOTk1LTA4LTI4CislIEFwcGxpY2F0aW9uOiBnZW5lcmFsCislIFVzZXJzOiBnZW5lcmFsCislIFJlcGVydG9pcmVtYXA6IG1uZW1vbmljLmRzCislIENoYXJzZXQ6IEJBTFRJQworJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCislIDxDQVBJVEFMPiBiZWZvcmUgPFNNQUxMPiBsZXR0ZXJzCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJMYXR2aWFuIGxvY2FsZSBmb3IgTGF0dmlhIgorc291cmNlICAgICAiTGF0dmlhbiBTdGFuZGFyZCBMVlMgMjQtOTMiCithZGRyZXNzICAgICJMVSBNSUksIFJhaW5pcyBib3VsLiAyOSwgTFYtMTQ1OSBSaWdhLCBMYXR2aWEiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiTGF0dmlhbiIKK3RlcnJpdG9yeSAgIkxhdHZpYSIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjkiCislCitjYXRlZ29yeSAgImx2X0xWOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImx2X0xWOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImx2X0xWOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAibHZfTFY6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJsdl9MVjoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImx2X0xWOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImx2X0xWOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImx2X0xWOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImx2X0xWOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAibHZfTFY6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJsdl9MVjoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKKworJSBCYXNlIGNvbGxhdGlvbiBzY2hlbWU6IDE5OTQtMDMtMjIKKworJSBPcmRlcmluZyBhbGdvcml0aG06CislICAxLiBTcGFjZXMgYW5kIGh5cGhlbiAoYnV0IG5vdCBzb2Z0CislICAgICBoeXBoZW4pIGJlZm9yZSBwdW5jdHVhdGlvbgorJSAgICAgY2hhcmFjdGVycywgcHVuY3R1YXRpb24gY2hhcmFjdGVycworJSAgICAgYmVmb3JlIG51bWJlcnMsCislICAgICBudW1iZXJzIGJlZm9yZSBsZXR0ZXJzLgorJSAgMi4gTGV0dGVycyB3aXRoIGRpYWNyaXRpY2FsIG1hcmtzIGFyZQorJSAgICAgbWVtYmVycyBvZiBlcXVpdmFsZW5jZSBjbGFzc2VzCislICAzLiBBIGRpc3RpbmN0aW9uIGlzIG1hZGUgd2l0aCByZWdhcmRzCislICAgICB0byBjYXNlIGFzIG5vdGVkIGJlbG93LgorJSAgNC4gU3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSBpZ25vcmVkCislICAgICB3aGVuIGNvbXBhcmluZyBsZXR0ZXJzLCBidXQgdGhlbgorJSAgICAgdGhleSBhcmUgY29uc2lkZXJlZAorJSAgNS4gVGhlIGFscGhhYmV0cyBhcmUgc29ydGVkIGluIG9yZGVyCislICAgICBvZiBmaXJzdCBhcHBlYXJhbmNlIGluIElTTyAxMDY0NjoKKyUgICAgIExhdGluLCBHcmVlaywgQ3lyaWxsaWMsIGV0Yy4KKyUKKyUgQWNjb3JkaW5nIHRvIEdyZWVrIHNwZWNpZmljYXRpb25zLAorJSB0aGUgc3RlcHMgMi4gYW5kIDMuIGFib3ZlIGFyZSByZXZlcnNlZAorJSBmb3IgdGhlIEdyZWVrIHNjcmlwdAorCislIGNvbGxhdGluZyBzeW1ib2xzCisKKyUgVGhlIGNvbGxhdGluZyBzeW1ib2wgbmFtaW5nIGlzCislIG1vc3RseSB0YWtlbiBmcm9tIElTTyAxMDY0Ni0xLAorJSBmb3IgZXhhbXBsZSB0aGUgY2FzZSBhbmQgYWNjZW50CislIG5hbWVzIGFyZSBmcm9tIHRoaXMgc3RhbmRhcmQuCisKK2NvbGxhdGluZy1zeW1ib2wgPENBUElUQUw+Citjb2xsYXRpbmctc3ltYm9sIDxDQVBJVEFMLVNNQUxMPgorY29sbGF0aW5nLXN5bWJvbCA8U01BTEwtQ0FQSVRBTD4KK2NvbGxhdGluZy1zeW1ib2wgPFNNQUxMPgorCislIDxDQVBJVEFMLVNNQUxMPiBhbmQgPFNNQUxMLUNBUElUQUw+CislIGFyZSBmb3IgY2FzZXMgbGlrZSBEYW5pc2ggPFUwMDQxPjxVMDA2MT4KKyUgYW5kIFNwYW5pc2ggPFUwMDQzPjxVMDA2OD4gYmVpbmcgdHJlYXRlZAorJSBhcyBvbmUgbGV0dGVyLgorCislIFRoZSA8YTg+IC4uLi4uLiA8ejg+IGNvbGxhdGluZworJSBzeW1ib2xzIGhhdmUgZGVmaW5lZCB3ZWlnaHRzIGFzCislIHRoZSBsYXN0IGNoYXJhY3RlciBpbiBhIGdyb3VwIG9mCislIExhdGluIGxldHRlcnMuIFRoZXkgYXJlIHVzZWQKKyUgdG8gc3BlY2lmeSBkZWx0YXMgYnkgbG9jYWxlcyB1c2luZworJSBhIGxvY2FsZSBhcyB0aGUgZGVmYXVsdCBvcmRlcmluZworJSBhbmQgYnkgInJlcGxhY2UtYWZ0ZXIiIHN0YXRlbWVudHMKKyUgc3BlY2lmeWluZyB0aGUgY2hhbmdlZCBwbGFjZW1lbnQKKyUgaW4gYW4gb3JkZXJpbmcgb2YgYSBjaGFyYWN0ZXIuCisKK2NvbGxhdGluZy1zeW1ib2wgPGE4PgorY29sbGF0aW5nLXN5bWJvbCA8Yjg+Citjb2xsYXRpbmctc3ltYm9sIDxjOD4KK2NvbGxhdGluZy1zeW1ib2wgPGQ4PgorY29sbGF0aW5nLXN5bWJvbCA8ZTg+Citjb2xsYXRpbmctc3ltYm9sIDxmOD4KK2NvbGxhdGluZy1zeW1ib2wgPGc4PgorY29sbGF0aW5nLXN5bWJvbCA8aDg+Citjb2xsYXRpbmctc3ltYm9sIDxpOD4KK2NvbGxhdGluZy1zeW1ib2wgPGo4PgorY29sbGF0aW5nLXN5bWJvbCA8azg+Citjb2xsYXRpbmctc3ltYm9sIDxsOD4KK2NvbGxhdGluZy1zeW1ib2wgPG04PgorY29sbGF0aW5nLXN5bWJvbCA8bjg+Citjb2xsYXRpbmctc3ltYm9sIDxvOD4KK2NvbGxhdGluZy1zeW1ib2wgPHA4PgorY29sbGF0aW5nLXN5bWJvbCA8cTg+Citjb2xsYXRpbmctc3ltYm9sIDxyOD4KK2NvbGxhdGluZy1zeW1ib2wgPHM4PgorY29sbGF0aW5nLXN5bWJvbCA8dDg+Citjb2xsYXRpbmctc3ltYm9sIDx1OD4KK2NvbGxhdGluZy1zeW1ib2wgPHY4PgorY29sbGF0aW5nLXN5bWJvbCA8dzg+Citjb2xsYXRpbmctc3ltYm9sIDx4OD4KK2NvbGxhdGluZy1zeW1ib2wgPHk4PgorY29sbGF0aW5nLXN5bWJvbCA8ejg+CisKK2NvbGxhdGluZy1zeW1ib2wgPE5PTkU+Citjb2xsYXRpbmctc3ltYm9sIDxBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPEFDVVRFK0RPVD4KK2NvbGxhdGluZy1zeW1ib2wgPEdSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8RE9VQkxFLUdSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkU+Citjb2xsYXRpbmctc3ltYm9sIDxCUkVWRStBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFK0dSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkUrTUFDUk9OPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkUrSE9PSz4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFK1RJTERFPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkUrRE9ULUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkUtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxJTlZFUlRFRC1CUkVWRT4KK2NvbGxhdGluZy1zeW1ib2wgPENJUkNVTUZMRVg+Citjb2xsYXRpbmctc3ltYm9sIDxDSVJDVU1GTEVYK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8Q0lSQ1VNRkxFWCtHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPENJUkNVTUZMRVgrSE9PSz4KK2NvbGxhdGluZy1zeW1ib2wgPENJUkNVTUZMRVgrVElMREU+Citjb2xsYXRpbmctc3ltYm9sIDxDSVJDVU1GTEVYK0RPVC1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPENBUk9OPgorY29sbGF0aW5nLXN5bWJvbCA8Q0FST04rRElBRVJFU0lTPgorY29sbGF0aW5nLXN5bWJvbCA8Q0FST04rRE9UPgorY29sbGF0aW5nLXN5bWJvbCA8UklORz4KK2NvbGxhdGluZy1zeW1ib2wgPFJJTkcrQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxSSU5HLUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8RElBRVJFU0lTPgorY29sbGF0aW5nLXN5bWJvbCA8RElBRVJFU0lTK01BQ1JPTj4KK2NvbGxhdGluZy1zeW1ib2wgPERJQUVSRVNJUytBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPERJQUVSRVNJUytHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPERJQUVSRVNJUytDQVJPTj4KK2NvbGxhdGluZy1zeW1ib2wgPERPVUJMRS1BQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPEhPT0s+Citjb2xsYXRpbmctc3ltYm9sIDxUSUxERT4KK2NvbGxhdGluZy1zeW1ib2wgPFRJTERFK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8VElMREUrRElBRVJFU0lTPgorY29sbGF0aW5nLXN5bWJvbCA8VElMREUtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxET1Q+Citjb2xsYXRpbmctc3ltYm9sIDxET1QtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxET1QrRE9ULUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8U1RST0tFPgorY29sbGF0aW5nLXN5bWJvbCA8U1RST0tFK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8Q0VESUxMQT4KK2NvbGxhdGluZy1zeW1ib2wgPENFRElMTEErQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxDRURJTExBK0dSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8Q0VESUxMQStCUkVWRT4KK2NvbGxhdGluZy1zeW1ib2wgPE9HT05FSz4KK2NvbGxhdGluZy1zeW1ib2wgPE9HT05FSytNQUNST04+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04rQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04rR1JBVkU+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04rRElBRVJFU0lTPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0RJQUVSRVNJUy1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPE1BQ1JPTitET1Q+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04rRE9ULUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0NJUkNVTUZMRVg+Citjb2xsYXRpbmctc3ltYm9sIDxMSU5FLUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8SE9STj4KK2NvbGxhdGluZy1zeW1ib2wgPEhPUk4rQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxIT1JOK0dSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8SE9STitIT09LPgorY29sbGF0aW5nLXN5bWJvbCA8SE9STitUSUxERT4KK2NvbGxhdGluZy1zeW1ib2wgPEhPUk4rRE9ULUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8UFJFQ0VERUQtQlktQVBPU1RST1BIRT4KK2NvbGxhdGluZy1zeW1ib2wgPEdSRUVLPgorY29sbGF0aW5nLXN5bWJvbCA8VE9OT1M+Citjb2xsYXRpbmctc3ltYm9sIDxESUFMWVRJQ0E+Citjb2xsYXRpbmctc3ltYm9sIDxESUFMWVRJQ0ErVE9OT1M+Citjb2xsYXRpbmctc3ltYm9sIDxDWVJJTExJQz4KK2NvbGxhdGluZy1zeW1ib2wgPEhJUkFHQU5BPgorY29sbGF0aW5nLXN5bWJvbCA8S0FUQUtBTkE+Citjb2xsYXRpbmctc3ltYm9sIDxTUEVDSUFMPgorCislIGxldHRlcjthY2NlbnQ7Y2FzZTtzcGVjaWFscworCitvcmRlcl9zdGFydCBmb3J3YXJkO2JhY2t3YXJkLworICAgICAgICAgICAgO2ZvcndhcmQ7cG9zaXRpb24KKworJSA8Q0FQSVRBTD4gb3IgPFNNQUxMPiBsZXR0ZXJzIGZpcnN0OgorCis8Q0FQSVRBTD4KKzxDQVBJVEFMLVNNQUxMPgorPFNNQUxMLUNBUElUQUw+Cis8U01BTEw+CisKKyUgQWNjZW50czoKKworPE5PTkU+Cis8QUNVVEU+Cis8QUNVVEUrRE9UPgorPEdSQVZFPgorPERPVUJMRS1HUkFWRT4KKzxCUkVWRT4KKzxCUkVWRStBQ1VURT4KKzxCUkVWRStHUkFWRT4KKzxCUkVWRStNQUNST04+Cis8QlJFVkUrSE9PSz4KKzxCUkVWRStUSUxERT4KKzxCUkVWRStET1QtQkVMT1c+Cis8QlJFVkUtQkVMT1c+Cis8SU5WRVJURUQtQlJFVkU+Cis8Q0lSQ1VNRkxFWD4KKzxDSVJDVU1GTEVYK0FDVVRFPgorPENJUkNVTUZMRVgrR1JBVkU+Cis8Q0lSQ1VNRkxFWCtIT09LPgorPENJUkNVTUZMRVgrVElMREU+Cis8Q0lSQ1VNRkxFWCtET1QtQkVMT1c+Cis8Q0FST04+Cis8Q0FST04rRElBRVJFU0lTPgorPENBUk9OK0RPVD4KKzxSSU5HPgorPFJJTkcrQUNVVEU+Cis8UklORy1CRUxPVz4KKzxESUFFUkVTSVM+Cis8RElBRVJFU0lTK01BQ1JPTj4KKzxESUFFUkVTSVMrQUNVVEU+Cis8RElBRVJFU0lTK0dSQVZFPgorPERJQUVSRVNJUytDQVJPTj4KKzxET1VCTEUtQUNVVEU+Cis8SE9PSz4KKzxUSUxERT4KKzxUSUxERStBQ1VURT4KKzxUSUxERStESUFFUkVTSVM+Cis8VElMREUtQkVMT1c+Cis8RE9UPgorPERPVC1CRUxPVz4KKzxET1QrRE9ULUJFTE9XPgorPFNUUk9LRT4KKzxTVFJPS0UrQUNVVEU+Cis8Q0VESUxMQT4KKzxDRURJTExBK0FDVVRFPgorPENFRElMTEErR1JBVkU+Cis8Q0VESUxMQStCUkVWRT4KKzxPR09ORUs+Cis8T0dPTkVLK01BQ1JPTj4KKzxNQUNST04+Cis8TUFDUk9OK0FDVVRFPgorPE1BQ1JPTitHUkFWRT4KKzxNQUNST04rRElBRVJFU0lTPgorPE1BQ1JPTitESUFFUkVTSVMtQkVMT1c+Cis8TUFDUk9OK0RPVD4KKzxNQUNST04rRE9ULUJFTE9XPgorPE1BQ1JPTitDSVJDVU1GTEVYPgorPExJTkUtQkVMT1c+Cis8SE9STj4KKzxIT1JOK0FDVVRFPgorPEhPUk4rR1JBVkU+Cis8SE9STitIT09LPgorPEhPUk4rVElMREU+Cis8SE9STitET1QtQkVMT1c+Cis8UFJFQ0VERUQtQlktQVBPU1RST1BIRT4KKzxHUkVFSz4KKzxUT05PUz4KKzxESUFMWVRJQ0E+Cis8RElBTFlUSUNBK1RPTk9TPgorPENZUklMTElDPgorPEhJUkFHQU5BPgorPEtBVEFLQU5BPgorPFNQRUNJQUw+CisKKzxVMDBBMD4JPFUwMEEwPjs8VTAwQTA+OzxVMDBBMD47SUdOT1JFCis8VTAwMjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyMD4KKzxVMDAwOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA5PgorPFUwMDBCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMEI+Cis8VTAwMEQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwRD4KKzxVMDAwQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBBPgorPFUwMDBDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMEM+Cis8VTAwNUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA1Rj4KKzxVMDBBRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEFGPgorPFUwMEFEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQUQ+Cis8VTAwMkQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyRD4KKzxVMDAyQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDJDPgorPFUwMDNCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwM0I+Cis8VTAwM0E+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAzQT4KKzxVMDAyMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDIxPgorPFUwMEExPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTE+Cis8VTAwM0Y+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAzRj4KKzxVMDBCRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEJGPgorPFUwMDJGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMkY+Cis8VTAwMkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyRT4KKzxVMDBCND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEI0PgorPFUwMDYwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNjA+Cis8VTAwNUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA1RT4KKzxVMDBBOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEE4PgorPFUwMDdFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwN0U+Cis8VTAwQjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCNz4KKzxVMDBCOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEI4PgorPFUwMDI3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjc+Cis8VTIwMTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxOD4KKzxVMjAxOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDE5PgorPFUwMDIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjI+Cis8VTIwMUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxQz4KKzxVMjAxRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDFEPgorPFUwMEFCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQUI+Cis8VTAwQkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCQj4KKzxVMDAyOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDI4PgorPFUyMDdEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwN0Q+Cis8VTAwMjk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyOT4KKzxVMjA3RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDdFPgorPFUwMDVCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNUI+Cis8VTAwNUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA1RD4KKzxVMDA3Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDdCPgorPFUwMDdEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwN0Q+Cis8VTAwQTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBNz4KKzxVMDBCNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEI2PgorPFUwMEE5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTk+Cis8VTAwQUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBRT4KKzxVMDA0MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDQwPgorPFUwMEE0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTQ+Cis8VTAwQTI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBMj4KKzxVMDAyND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDI0PgorPFUwMEEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTM+Cis8VTAwQTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBNT4KKzxVMDAyQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDJBPgorPFUwMDVDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNUM+Cis8VTAwMjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyNj4KKzxVMDAyMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDIzPgorPFUwMDI1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjU+Cis8VTIwN0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA3Qj4KKzxVMDAyQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDJCPgorPFUyMDdBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwN0E+Cis8VTAwQjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCMT4KKzxVMDBGNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEY3PgorPFUwMEQ3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwRDc+Cis8VTIyNjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2MD4KKzxVMDAzQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDNDPgorPFUyMjY0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNjQ+Cis8VTAwM0Q+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAzRD4KKzxVMjI2NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjY1PgorPFUwMDNFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwM0U+Cis8VTAwQUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBQz4KKzxVMDA3Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDdDPgorPFUwMEE2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTY+Cis8VTAwQjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCMD4KKzxVMDBCNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEI1PgorPFUwMkM3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAyQzc+Cis8VTAyRDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDJEOD4KKzxVMDJEOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkQ5PgorPFUwMkRBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAyREE+Cis8VTAyREI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDJEQj4KKzxVMDJEQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkRDPgorPFUwMkREPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAyREQ+Cis8VTAzNzQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDM3ND4KKzxVMDM3NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzc1PgorPFUwMzdBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzN0E+Cis8VTAzN0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDM3RT4KKzxVMDM4ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzg0PgorPFUwMzg1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzODU+Cis8VTAzODc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDM4Nz4KKzxVMDNEMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwM0QwPgorPFUxRkJGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGQkY+Cis8VTFGQzA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZDMD4KKzxVMUZDMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkMxPgorPFUxRkNEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGQ0Q+Cis8VTFGQ0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZDRT4KKzxVMUZDRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkNGPgorPFUxRkREPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGREQ+Cis8VTFGREU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZERT4KKzxVMUZERj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkRGPgorPFUxRkVEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGRUQ+Cis8VTFGRUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZFRj4KKzxVMUZGRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkZFPgorPFUyMDAyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMDI+Cis8VTIwMDM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwMz4KKzxVMjAwND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDA0PgorPFUyMDA1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMDU+Cis8VTIwMDY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwNj4KKzxVMjAwRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDBFPgorPFUyMDBGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMEY+Cis8VTIwMDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwOT4KKzxVMjAwQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDBBPgorPFUyMDEwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTA+Cis8VTIwMTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxMz4KKzxVMjAxND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDE0PgorPFUyMDE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTU+Cis8VTIwMTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxNj4KKzxVMjAxNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDE3PgorPFUyMDFBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMUE+Cis8VTIwMUI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxQj4KKzxVMjAxRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDFFPgorPFUyMDFGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMUY+Cis8VTIwMjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAyMD4KKzxVMjAyMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDIxPgorPFUyMjE5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMTk+Cis8VTIwMjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAyNT4KKzxVMjAyNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDI2PgorPFUyMDMwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzA+Cis8VTIwMzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzMj4KKzxVMjAzMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDMzPgorPFUyMDM0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzQ+Cis8VTIwMzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzNT4KKzxVMjAzNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDM2PgorPFUyMDM3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzc+Cis8VTIwMzg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzOD4KKzxVMjAzOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDM5PgorPFUyMDNBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwM0E+Cis8VTIwM0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzQj4KKzxVMjAzQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDNDPgorPFUyMDNFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwM0U+Cis8VTIwN0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA3Qz4KKzxVMjA4MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDgwPgorPFUyMDgxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODE+Cis8VTIwODI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4Mj4KKzxVMjA4Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDgzPgorPFUyMDg0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODQ+Cis8VTIwODU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4NT4KKzxVMjA4Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDg2PgorPFUyMDg3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODc+Cis8VTIwODg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4OD4KKzxVMjA4OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDg5PgorPFUyMDhBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwOEE+Cis8VTIwOEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4Qj4KKzxVMjA4Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDhDPgorPFUyMDhEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwOEQ+Cis8VTIwOEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4RT4KKzxVMjBBMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMEEzPgorPFUyMEE0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwQTQ+Cis8VTIwQTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjBBNz4KKzxVMjBBOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMEE5PgorPFUyMTAzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMDM+Cis8VTIxMDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjEwNT4KKzxVMjEwOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTA5PgorPFUyMTE2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMTY+Cis8VTIxMTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjExNz4KKzxVMjExRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTFFPgorPFUyMTIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMjA+Cis8VTIxMjI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjEyMj4KKzxVMjEyNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTI2PgorPFUyMTJCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMkI+Cis8VTIxNTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1Mz4KKzxVMjE1ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTU0PgorPFUyMTU1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTU+Cis8VTIxNTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1Nj4KKzxVMjE1Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTU3PgorPFUyMTU4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTg+Cis8VTIxNTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1OT4KKzxVMjE1QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTVBPgorPFUyMTYwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjA+Cis8VTIxNjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2MT4KKzxVMjE2Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTYyPgorPFUyMTYzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjM+Cis8VTIxNjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2ND4KKzxVMjE2NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTY1PgorPFUyMTY2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjY+Cis8VTIxNjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2Nz4KKzxVMjE2OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTY4PgorPFUyMTY5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjk+Cis8VTIxNkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2QT4KKzxVMjE2Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTZCPgorPFUyMTZDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNkM+Cis8VTIxNkQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2RD4KKzxVMjE2RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTZFPgorPFUyMTZGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNkY+Cis8VTIxNzA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3MD4KKzxVMjE3MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTcxPgorPFUyMTcyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzI+Cis8VTIxNzM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3Mz4KKzxVMjE3ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTc0PgorPFUyMTc1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzU+Cis8VTIxNzY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3Nj4KKzxVMjE3Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTc3PgorPFUyMTc4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzg+Cis8VTIxNzk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3OT4KKzxVMjE3QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTdBPgorPFUyMTdCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxN0I+Cis8VTIxN0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3Qz4KKzxVMjE3RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTdEPgorPFUyMTdFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxN0U+Cis8VTIxN0Y+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3Rj4KKzxVMjE4MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTgwPgorPFUyMTgxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxODE+Cis8VTIxODI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE4Mj4KKzxVMjE5MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTkxPgorPFUyMTkzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxOTM+Cis8VTIxOTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5ND4KKzxVMjE5NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTk1PgorPFUyMTk2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxOTY+Cis8VTIxOTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5Nz4KKzxVMjE5OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTk4PgorPFUyMTk5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxOTk+Cis8VTIxQTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjFBOD4KKzxVMjFDMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMUMwPgorPFUyMUQwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxRDA+Cis8VTIxRDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjFEMj4KKzxVMjFEND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMUQ0PgorPFUyMjAwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMDA+Cis8VTIyMDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwMj4KKzxVMjIwMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjAzPgorPFUyMjA1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMDU+Cis8VTIyMDY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwNj4KKzxVMjIwNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjA3PgorPFUyMjA4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMDg+Cis8VTIyMEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwQj4KKzxVMjIwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjBGPgorPFUyMjExPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMTE+Cis8VTIyMTI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxMj4KKzxVMjIxMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjEzPgorPFUyMjE0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMTQ+Cis8VTIwNDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA0ND4KKzxVMjIxNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjE3PgorPFUyMjE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMTg+Cis8VTIwMjI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAyMj4KKzxVMjIxQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjFBPgorPFUyMjFEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMUQ+Cis8VTIyMUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxRT4KKzxVMjIxRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjFGPgorPFUyMjIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMjA+Cis8VTIyMjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyNT4KKzxVMjIyNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjI3PgorPFUyMjI4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMjg+Cis8VTIyMjk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyOT4KKzxVMjIyQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjJBPgorPFUyMjJCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMkI+Cis8VTIyMkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyQz4KKzxVMjIyRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjJFPgorPFUyMjM0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMzQ+Cis8VTIyMzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIzNT4KKzxVMjIzNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjM2PgorPFUyMjM3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMzc+Cis8VTIyM0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIzQz4KKzxVMjIzRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjNFPgorPFUyMjQzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNDM+Cis8VTIyNDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI0NT4KKzxVMjI0OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjQ4PgorPFUyMjRDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNEM+Cis8VTIyNTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI1Mz4KKzxVMjI2MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjYxPgorPFUyMjZBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNkE+Cis8VTIyNkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2Qj4KKzxVMjI2RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjZFPgorPFUyMjZGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNkY+Cis8VTIyODI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI4Mj4KKzxVMjI4Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjgzPgorPFUyMjg2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyODY+Cis8VTIyODc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI4Nz4KKzxVMjI5OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjk5PgorPFUyMjlBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyOUE+Cis8VTIyQTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjJBNT4KKzxVMjJDNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMkM1PgorPFUyMkVFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyRUU+Cis8VTIzMDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMwMj4KKzxVMjMwOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzA4PgorPFUyMzA5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMDk+Cis8VTIzMEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMwQT4KKzxVMjMwQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzBCPgorPFUyMzEwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMTA+Cis8VTIzMTI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMxMj4KKzxVMjMxNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzE1PgorPFUyMzIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMjA+Cis8VTIzMjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMyMT4KKzxVMjQyMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDIzPgorPFUyNDQwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDA+Cis8VTI0NDE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ0MT4KKzxVMjQ0Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQyPgorPFUyNDQzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDM+Cis8VTI0NDY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ0Nj4KKzxVMjQ0Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQ3PgorPFUyNDQ4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDg+Cis8VTI0NDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ0OT4KKzxVMjQ2MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDYwPgorPFUyNDYxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NjE+Cis8VTI0NjI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Mj4KKzxVMjQ2Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDYzPgorPFUyNDY0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NjQ+Cis8VTI0NjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2NT4KKzxVMjQ2Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDY2PgorPFUyNDY3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0Njc+Cis8VTI0Njg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2OD4KKzxVMjQ2OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDY5PgorPFUyNDZBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NkE+Cis8VTI0NkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Qj4KKzxVMjQ2Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDZDPgorPFUyNDZEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NkQ+Cis8VTI0NkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2RT4KKzxVMjQ2Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDZGPgorPFUyNDcwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NzA+Cis8VTI0NzE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3MT4KKzxVMjQ3Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDcyPgorPFUyNDczPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NzM+Cis8VTI0NzQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3ND4KKzxVMjQ3NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDc1PgorPFUyNDc2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NzY+Cis8VTI0Nzc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3Nz4KKzxVMjQ3OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDc4PgorPFUyNDc5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0Nzk+Cis8VTI0N0E+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3QT4KKzxVMjQ3Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDdCPgorPFUyNDdDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0N0M+Cis8VTI0N0Q+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3RD4KKzxVMjQ3RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDdFPgorPFUyNDdGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0N0Y+Cis8VTI0ODA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4MD4KKzxVMjQ4MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDgxPgorPFUyNDgyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODI+Cis8VTI0ODM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4Mz4KKzxVMjQ4ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDg0PgorPFUyNDg1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODU+Cis8VTI0ODY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4Nj4KKzxVMjQ4Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDg3PgorPFUyNDg4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODg+Cis8VTI0ODk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4OT4KKzxVMjQ4QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDhBPgorPFUyNDhCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OEI+Cis8VTI0OEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4Qz4KKzxVMjQ4RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDhEPgorPFUyNDhFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OEU+Cis8VTI0OEY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4Rj4KKzxVMjQ5MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDkwPgorPFUyNDkxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTE+Cis8VTI0OTI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5Mj4KKzxVMjQ5Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDkzPgorPFUyNDk0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTQ+Cis8VTI0OTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5NT4KKzxVMjQ5Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDk2PgorPFUyNDk3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTc+Cis8VTI0OTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5OD4KKzxVMjQ5OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDk5PgorPFUyNDlBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OUE+Cis8VTI0OUI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5Qj4KKzxVMjRFQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNEVBPgorPFUyNTAwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MDA+Cis8VTI1NTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1MD4KKzxVMjUwMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTAyPgorPFUyNTUxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTE+Cis8VTI1MDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwND4KKzxVMjUwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTA1PgorPFUyNTA2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MDY+Cis8VTI1MDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwNz4KKzxVMjUwOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTA4PgorPFUyNTA5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MDk+Cis8VTI1MEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwQT4KKzxVMjUwQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTBCPgorPFUyNTBDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MEM+Cis8VTI1NTI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Mj4KKzxVMjU1Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTUzPgorPFUyNTU0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTQ+Cis8VTI1MTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUxMD4KKzxVMjU1NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTU1PgorPFUyNTU2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTY+Cis8VTI1NTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Nz4KKzxVMjUxND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTE0PgorPFUyNTU4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTg+Cis8VTI1NTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1OT4KKzxVMjU1QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTVBPgorPFUyNTE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MTg+Cis8VTI1NUI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Qj4KKzxVMjU1Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTVDPgorPFUyNTVEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NUQ+Cis8VTI1MUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUxQz4KKzxVMjU1RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTVFPgorPFUyNTFFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MUU+Cis8VTI1MUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUxRj4KKzxVMjU1Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTVGPgorPFUyNTIxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MjE+Cis8VTI1MjI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyMj4KKzxVMjU2MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTYwPgorPFUyNTI0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MjQ+Cis8VTI1NjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2MT4KKzxVMjUyNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTI2PgorPFUyNTI3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Mjc+Cis8VTI1NjI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2Mj4KKzxVMjUyOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTI5PgorPFUyNTJBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MkE+Cis8VTI1NjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2Mz4KKzxVMjUyQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTJDPgorPFUyNTJEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MkQ+Cis8VTI1MkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyRT4KKzxVMjU2ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTY0PgorPFUyNTY1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjU+Cis8VTI1MzE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzMT4KKzxVMjUzMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTMyPgorPFUyNTY2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjY+Cis8VTI1MzQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzND4KKzxVMjUzNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTM1PgorPFUyNTM2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MzY+Cis8VTI1Njc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2Nz4KKzxVMjU2OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTY4PgorPFUyNTM5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Mzk+Cis8VTI1M0E+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzQT4KKzxVMjU2OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTY5PgorPFUyNTNDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1M0M+Cis8VTI1M0Q+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzRD4KKzxVMjUzRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTNFPgorPFUyNTZBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NkE+Cis8VTI1NDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0MD4KKzxVMjU0MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTQxPgorPFUyNTZCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NkI+Cis8VTI1NDM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0Mz4KKzxVMjU0ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTQ0PgorPFUyNTQ1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDU+Cis8VTI1NDY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0Nj4KKzxVMjU0Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTQ3PgorPFUyNTQ4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDg+Cis8VTI1NDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0OT4KKzxVMjU0QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTRBPgorPFUyNTZDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NkM+Cis8VTI1NzE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU3MT4KKzxVMjU3Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTcyPgorPFUyNTgwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1ODA+Cis8VTI1ODQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU4ND4KKzxVMjU4OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTg4PgorPFUyNThDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1OEM+Cis8VTI1OTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU5MD4KKzxVMjU5MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTkxPgorPFUyNTkyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1OTI+Cis8VTI1OTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU5Mz4KKzxVMjVBMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUEwPgorPFUyNUExPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTE+Cis8VTI1QTI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBMj4KKzxVMjVBMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUEzPgorPFUyNUE0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTQ+Cis8VTI1QTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBNT4KKzxVMjVBNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUE2PgorPFUyNUE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTc+Cis8VTI1QTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBOD4KKzxVMjVBOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUE5PgorPFUyNUFBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QUE+Cis8VTI1QUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBQz4KKzxVMjVBRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUFEPgorPFUyNUIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QjI+Cis8VTI1QjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVCMz4KKzxVMjVCNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUI3PgorPFUyNUJBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QkE+Cis8VTI1QkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVCQz4KKzxVMjVCRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUJEPgorPFUyNUMxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QzE+Cis8VTI1QzQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVDND4KKzxVMjVDNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUM2PgorPFUyNUM3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Qzc+Cis8VTI1Q0E+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVDQT4KKzxVMjVDQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUNCPgorPFUyNUNFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Q0U+Cis8VTI1Q0Y+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVDRj4KKzxVMjVEMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUQwPgorPFUyNUQxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1RDE+Cis8VTI1RDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVEOD4KKzxVMjVEOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUQ5PgorPFUyNUUyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1RTI+Cis8VTI1RTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVFMz4KKzxVMjVFRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUVGPgorPFUyNjA1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2MDU+Cis8VTI2MDY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYwNj4KKzxVMjYwRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjBFPgorPFUyNjBGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2MEY+Cis8VTI2MUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYxQz4KKzxVMjYxRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjFFPgorPFUyNjNBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2M0E+Cis8VTI2M0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYzQj4KKzxVMjYzQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjNDPgorPFUyNjQwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NDA+Cis8VTI2NDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY0Mj4KKzxVMjY2MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjYwPgorPFUyNjYxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NjE+Cis8VTI2NjI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2Mj4KKzxVMjY2Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjYzPgorPFUyNjY0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NjQ+Cis8VTI2NjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2NT4KKzxVMjY2Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjY2PgorPFUyNjY3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2Njc+Cis8VTI2Njk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2OT4KKzxVMjY2QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjZBPgorPFUyNjZCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NkI+Cis8VTI2NkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2Qz4KKzxVMjY2RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjZEPgorPFUyNjZFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NkU+Cis8VTI2NkY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2Rj4KKzxVMjcxMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNzEzPgorPFUyNzE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI3MTc+Cis8VTI3MjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjcyMD4KKzxVMzAwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDAwPgorPFUzMDAxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMDE+Cis8VTMwMDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwMj4KKzxVMzAwMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDAzPgorPFUzMDA0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMDQ+Cis8VTMwMDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwNT4KKzxVMzAwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDA2PgorPFUzMDA3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMDc+Cis8VTMwMEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwQT4KKzxVMzAwQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDBCPgorPFUzMDBDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMEM+Cis8VTMwMEQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwRD4KKzxVMzAwRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDBFPgorPFUzMDBGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMEY+Cis8VTMwMTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxMD4KKzxVMzAxMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDExPgorPFUzMDEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTI+Cis8VTMwMTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxMz4KKzxVMzAxND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDE0PgorPFUzMDE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTU+Cis8VTMwMTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxNj4KKzxVMzAxNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDE3PgorPFUzMDFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMUM+Cis8VTMwMjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAyMD4KKzxVMzA5Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDlCPgorPFUzMDlDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwOUM+Cis8VTMwOUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzA5RD4KKzxVMzA5RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDlFPgorPFUzMEZCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwRkI+Cis8VTMwRkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzBGQz4KKzxVMzBGRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMEZEPgorPFUzMEZFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwRkU+Cis8VTMyMUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIxQz4KKzxVMzIyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjIwPgorPFUzMjIxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjE+Cis8VTMyMjI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyMj4KKzxVMzIyMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjIzPgorPFUzMjI0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjQ+Cis8VTMyMjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyNT4KKzxVMzIyNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjI2PgorPFUzMjI3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjc+Cis8VTMyMjg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyOD4KKzxVMzIyOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjI5PgorPFUzMjdGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyN0Y+Cis8VTMzQzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzNDMj4KKzxVMzNEOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzM0Q4PgorPFUwMDAwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDA+Cis8VTAwMDE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwMT4KKzxVMDAwMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDAyPgorPFUwMDAzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDM+Cis8VTAwMDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwND4KKzxVMDAwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA1PgorPFUwMDA2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDY+Cis8VTAwMDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwNz4KKzxVMDAwOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA4PgorPFUwMDBFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMEU+Cis8VTAwMEY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwRj4KKzxVMDAxMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDEwPgorPFUwMDExPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTE+Cis8VTAwMTI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxMj4KKzxVMDAxMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDEzPgorPFUwMDE0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTQ+Cis8VTAwMTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxNT4KKzxVMDAxNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE2PgorPFUwMDE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTc+Cis8VTAwMTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxOD4KKzxVMDAxOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE5PgorPFUwMDFBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMUE+Cis8VTAwMUI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxQj4KKzxVMDAxQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFDPgorPFUwMDFEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMUQ+Cis8VTAwMUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxRT4KKzxVMDAxRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFGPgorPFUwMDdGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwN0Y+Cis8VTAwODA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4MD4KKzxVMDA4MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDgxPgorPFUwMDgyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODI+Cis8VTAwODM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4Mz4KKzxVMDA4ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDg0PgorPFUwMDg1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODU+Cis8VTAwODY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4Nj4KKzxVMDA4Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDg3PgorPFUwMDg4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODg+Cis8VTAwODk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4OT4KKzxVMDA4QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDhBPgorPFUwMDhCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOEI+Cis8VTAwOEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4Qz4KKzxVMDA4RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDhEPgorPFUwMDhFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOEU+Cis8VTAwOEY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4Rj4KKzxVMDA5MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDkwPgorPFUwMDkxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTE+Cis8VTAwOTI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Mj4KKzxVMDA5Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDkzPgorPFUwMDk0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTQ+Cis8VTAwOTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5NT4KKzxVMDA5Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDk2PgorPFUwMDk3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTc+Cis8VTAwOTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5OD4KKzxVMDA5OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDk5PgorPFUwMDlBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOUE+Cis8VTAwOUI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Qj4KKzxVMDA5Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDlDPgorPFUwMDlEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOUQ+Cis8VTAwOUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5RT4KKzxVMDA5Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDlGPgorPFVFMDAwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDA+Cis8VUUwMDE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwMT4KKzxVRTAwMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDAyPgorPFUwMzAxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzMDE+Cis8VUUwMDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwND4KKzxVRTAwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDA1PgorPFVFMDA2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDY+Cis8VUUwMDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwNz4KKzxVRTAwOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDA4PgorPFVFMDA5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDk+Cis8VUUwMEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwQT4KKzxVRTAwQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDBCPgorPFVFMDBDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMEM+Cis8VUUwMEQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwRD4KKzxVRTAwRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDBFPgorPFVFMDBGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMEY+Cis8VUUwMTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxMT4KKzxVRTAxMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDEyPgorPFVFMDEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMTM+Cis8VUUwMTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxND4KKzxVRTAxNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDE1PgorPFVFMDE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMTc+Cis8VUUwMTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxOD4KKzxVRTAxOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDE5PgorVU5ERUZJTkVECUlHTk9SRTtJR05PUkU7SUdOT1JFCisKKzxVMDAzMD4JPFUwMDMwPjs8VTAwMzA+O0lHTk9SRTtJR05PUkUKKzxVMjA3MD4JPFUwMDMwPjs8VTIwNzA+O0lHTk9SRTtJR05PUkUKKzxVMjE1Qj4JPFUwMDMwPjs8VTIxNUI+O0lHTk9SRTtJR05PUkUKKzxVMDBCQz4JPFUwMDMwPjs8VTAwQkM+O0lHTk9SRTtJR05PUkUKKzxVMjE1Qz4JPFUwMDMwPjs8VTIxNUM+O0lHTk9SRTtJR05PUkUKKzxVMDBCRD4JPFUwMDMwPjs8VTAwQkQ+O0lHTk9SRTtJR05PUkUKKzxVMjE1RD4JPFUwMDMwPjs8VTIxNUQ+O0lHTk9SRTtJR05PUkUKKzxVMDBCRT4JPFUwMDMwPjs8VTAwQkU+O0lHTk9SRTtJR05PUkUKKzxVMjE1RT4JPFUwMDMwPjs8VTIxNUU+O0lHTk9SRTtJR05PUkUKKzxVMDAzMT4JPFUwMDMxPjs8VTAwMzE+O0lHTk9SRTtJR05PUkUKKzxVMDAzMj4JPFUwMDMyPjs8VTAwMzI+O0lHTk9SRTtJR05PUkUKKzxVMDAzMz4JPFUwMDMzPjs8VTAwMzM+O0lHTk9SRTtJR05PUkUKKzxVMDAzND4JPFUwMDM0Pjs8VTAwMzQ+O0lHTk9SRTtJR05PUkUKKzxVMDAzNT4JPFUwMDM1Pjs8VTAwMzU+O0lHTk9SRTtJR05PUkUKKzxVMDAzNj4JPFUwMDM2Pjs8VTAwMzY+O0lHTk9SRTtJR05PUkUKKzxVMDAzNz4JPFUwMDM3Pjs8VTAwMzc+O0lHTk9SRTtJR05PUkUKKzxVMDAzOD4JPFUwMDM4Pjs8VTAwMzg+O0lHTk9SRTtJR05PUkUKKzxVMDAzOT4JPFUwMDM5Pjs8VTAwMzk+O0lHTk9SRTtJR05PUkUKKzxVMDBCOT4JPFUwMDMxPjs8VTAwQjk+O0lHTk9SRTtJR05PUkUKKzxVMDBCMj4JPFUwMDMyPjs8VTAwQjI+O0lHTk9SRTtJR05PUkUKKzxVMDBCMz4JPFUwMDMzPjs8VTAwQjM+O0lHTk9SRTtJR05PUkUKKzxVMjA3ND4JPFUwMDM0Pjs8VTIwNzQ+O0lHTk9SRTtJR05PUkUKKzxVMjA3NT4JPFUwMDM1Pjs8VTIwNzU+O0lHTk9SRTtJR05PUkUKKzxVMjA3Nj4JPFUwMDM2Pjs8VTIwNzY+O0lHTk9SRTtJR05PUkUKKzxVMjA3Nz4JPFUwMDM3Pjs8VTIwNzc+O0lHTk9SRTtJR05PUkUKKzxVMjA3OD4JPFUwMDM4Pjs8VTIwNzg+O0lHTk9SRTtJR05PUkUKKzxVMjA3OT4JPFUwMDM5Pjs8VTIwNzk+O0lHTk9SRTtJR05PUkUKKzxVMDA0MT4JPFUwMDQxPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDYxPgk8VTAwNDE+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMEFBPgk8VTAwNDE+OzxOT05FPjs8VTAwQUE+O0lHTk9SRQorPFUwMEMxPgk8VTAwNDE+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMEUxPgk8VTAwNDE+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDBDMD4JPFUwMDQxPjs8R1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFMD4JPFUwMDQxPjs8R1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMDA+CTxVMDA0MT47PERPVUJMRS1HUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjAxPgk8VTAwNDE+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMDI+CTxVMDA0MT47PEJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMDM+CTxVMDA0MT47PEJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRUFFPgk8VTAwNDE+OzxCUkVWRStBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRUFGPgk8VTAwNDE+OzxCUkVWRStBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVCMD4JPFUwMDQxPjs8QlJFVkUrR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCMT4JPFUwMDQxPjs8QlJFVkUrR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFQjI+CTxVMDA0MT47PEJSRVZFK0hPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCMz4JPFUwMDQxPjs8QlJFVkUrSE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVCND4JPFUwMDQxPjs8QlJFVkUrVElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCNT4JPFUwMDQxPjs8QlJFVkUrVElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFQjY+CTxVMDA0MT47PEJSRVZFK0RPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUI3Pgk8VTAwNDE+OzxCUkVWRStET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAyMDI+CTxVMDA0MT47PElOVkVSVEVELUJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMDM+CTxVMDA0MT47PElOVkVSVEVELUJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMEMyPgk8VTAwNDE+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTI+CTxVMDA0MT47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFQTQ+CTxVMDA0MT47PENJUkNVTUZMRVgrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVBNT4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVBNj4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRUE3Pgk8VTAwNDE+OzxDSVJDVU1GTEVYK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRUE4Pgk8VTAwNDE+OzxDSVJDVU1GTEVYK0hPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVBOT4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRUFBPgk8VTAwNDE+OzxDSVJDVU1GTEVYK1RJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQUI+CTxVMDA0MT47PENJUkNVTUZMRVgrVElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFQUM+CTxVMDA0MT47PENJUkNVTUZMRVgrRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQUQ+CTxVMDA0MT47PENJUkNVTUZMRVgrRE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMUNEPgk8VTAwNDE+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUNFPgk8VTAwNDE+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDBDNT4JPFUwMDQxPjs8UklORz47PENBUElUQUw+O0lHTk9SRQorPFUwMEU1Pgk8VTAwNDE+OzxSSU5HPjs8U01BTEw+O0lHTk9SRQorPFUwMUZBPgk8VTAwNDE+OzxSSU5HK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRkI+CTxVMDA0MT47PFJJTkcrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFMDA+CTxVMDA0MT47PFJJTkctQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwMT4JPFUwMDQxPjs8UklORy1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDBDND4JPFUwMDQxPjs8RElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTQ+CTxVMDA0MT47PERJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMDFERT4JPFUwMDQxPjs8RElBRVJFU0lTK01BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMURGPgk8VTAwNDE+OzxESUFFUkVTSVMrTUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRUEyPgk8VTAwNDE+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQTM+CTxVMDA0MT47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTAwQzM+CTxVMDA0MT47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTM+CTxVMDA0MT47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRUEwPgk8VTAwNDE+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVBMT4JPFUwMDQxPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTA0Pgk8VTAwNDE+OzxPR09ORUs+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEwNT4JPFUwMDQxPjs8T0dPTkVLPjs8U01BTEw+O0lHTk9SRQorPFUwMUUwPgk8VTAwNDE+OzxNQUNST04rRE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRTE+CTxVMDA0MT47PE1BQ1JPTitET1Q+OzxTTUFMTD47SUdOT1JFCis8YTg+Cis8VTAxMDA+ICAgPFUwMTAwPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMTAxPiAgIDxVMDEwMD47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAwQzY+CSI8VTAwNDE+PFUwMDQ1PiI7IjxVMDBDNj48VTAwQzY+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDBFNj4JIjxVMDA0MT48VTAwNDU+IjsiPFUwMEM2PjxVMDBDNj4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAxRkM+CSI8VTAwNDE+PFUwMDQ1PiI7IjxVMDFGQz48VTAxRkM+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDFGRD4JIjxVMDA0MT48VTAwNDU+IjsiPFUwMUZDPjxVMDFGQz4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAxRTI+CSI8VTAwNDE+PFUwMDQ1PiI7IjxVMDFFMj48VTAxRTI+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDFFMz4JIjxVMDA0MT48VTAwNDU+IjsiPFUwMUUyPjxVMDFFMj4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAwNDI+CTxVMDA0Mj47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2Mj4JPFUwMDQyPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMUUwMj4JPFUwMDQyPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMDM+CTxVMDA0Mj47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUUwND4JPFUwMDQyPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMDU+CTxVMDA0Mj47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUUwNj4JPFUwMDQyPjs8TElORS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTA3Pgk8VTAwNDI+OzxMSU5FLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPGI4PgorPFUwMDQzPgk8VTAwNDM+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjM+CTxVMDA0Mz47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMDY+CTxVMDA0Mz47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMDc+CTxVMDA0Mz47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMTA4Pgk8VTAwNDM+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMDk+CTxVMDA0Mz47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTAxODc+CTxVMDA0Mz47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE4OD4JPFUwMDQzPjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMDEwQT4JPFUwMDQzPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMEI+CTxVMDA0Mz47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMDBDNz4JPFUwMDQzPjs8Q0VESUxMQT47PENBUElUQUw+O0lHTk9SRQorPFUwMEU3Pgk8VTAwNDM+OzxDRURJTExBPjs8U01BTEw+O0lHTk9SRQorPFUxRTA4Pgk8VTAwNDM+OzxDRURJTExBK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMDk+CTxVMDA0Mz47PENFRElMTEErQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8Yzg+Cis8VTAxMEM+ICAgPFUwMTBDPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMTBEPiAgIDxVMDEwQz47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAwNDQ+CTxVMDA0ND47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2ND4JPFUwMDQ0Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDEwRT4JPFUwMDQ0Pjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEwRj4JPFUwMDQ0Pjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTFFMEE+CTxVMDA0ND47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTBCPgk8VTAwNDQ+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFMEM+CTxVMDA0ND47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTBEPgk8VTAwNDQ+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxMTA+CTxVMDA0ND47PFNUUk9LRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTExPgk8VTAwNDQ+OzxTVFJPS0U+OzxTTUFMTD47SUdOT1JFCis8VTFFMTA+CTxVMDA0ND47PENFRElMTEE+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUxMT4JPFUwMDQ0Pjs8Q0VESUxMQT47PFNNQUxMPjtJR05PUkUKKzxVMUUxMj4JPFUwMDQ0Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUxMz4JPFUwMDQ0Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFMEU+CTxVMDA0ND47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwRj4JPFUwMDQ0Pjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxkOD4KKzxVMDA0NT4JPFUwMDQ1Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDY1Pgk8VTAwNDU+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMEM5Pgk8VTAwNDU+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMEU5Pgk8VTAwNDU+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDBDOD4JPFUwMDQ1Pjs8R1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFOD4JPFUwMDQ1Pjs8R1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMDQ+CTxVMDA0NT47PERPVUJMRS1HUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjA1Pgk8VTAwNDU+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMTQ+CTxVMDA0NT47PEJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMTU+CTxVMDA0NT47PEJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjA2Pgk8VTAwNDU+OzxJTlZFUlRFRC1CUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjA3Pgk8VTAwNDU+OzxJTlZFUlRFRC1CUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDBDQT4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMEVBPgk8VTAwNDU+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRUJFPgk8VTAwNDU+OzxDSVJDVU1GTEVYK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQkY+CTxVMDA0NT47PENJUkNVTUZMRVgrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFQzA+CTxVMDA0NT47PENJUkNVTUZMRVgrR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDMT4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMUVDMj4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQzM+CTxVMDA0NT47PENJUkNVTUZMRVgrSE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVDND4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUxRUM1Pgk8VTAwNDU+OzxDSVJDVU1GTEVYK1RJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRUM2Pgk8VTAwNDU+OzxDSVJDVU1GTEVYK0RPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUM3Pgk8VTAwNDU+OzxDSVJDVU1GTEVYK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDExQT4JPFUwMDQ1Pjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExQj4JPFUwMDQ1Pjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAwQ0I+CTxVMDA0NT47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUwMEVCPgk8VTAwNDU+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFQkE+CTxVMDA0NT47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCQj4JPFUwMDQ1Pjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVCQz4JPFUwMDQ1Pjs8VElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCRD4JPFUwMDQ1Pjs8VElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFMUE+CTxVMDA0NT47PFRJTERFLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMUI+CTxVMDA0NT47PFRJTERFLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTE2Pgk8VTAwNDU+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExNz4JPFUwMDQ1Pjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRUI4Pgk8VTAwNDU+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCOT4JPFUwMDQ1Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUxRTFDPgk8VTAwNDU+OzxDRURJTExBK0JSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMUQ+CTxVMDA0NT47PENFRElMTEErQlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMTg+CTxVMDA0NT47PE9HT05FSz47PENBUElUQUw+O0lHTk9SRQorPFUwMTE5Pgk8VTAwNDU+OzxPR09ORUs+OzxTTUFMTD47SUdOT1JFCis8VTFFMTY+CTxVMDA0NT47PE1BQ1JPTitBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTE3Pgk8VTAwNDU+OzxNQUNST04rQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFMTQ+CTxVMDA0NT47PE1BQ1JPTitHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRTE1Pgk8VTAwNDU+OzxNQUNST04rR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFMTg+CTxVMDA0NT47PE1BQ1JPTitDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMTk+CTxVMDA0NT47PE1BQ1JPTitDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPGU4PgorPFUwMTEyPiAgIDxVMDExMj47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExMz4gICA8VTAxMTI+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMDQ2Pgk8VTAwNDY+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjY+CTxVMDA0Nj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxOTE+CTxVMDA0Nj47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE5Mj4JPFUwMDQ2Pjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUUxRT4JPFUwMDQ2Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMUY+CTxVMDA0Nj47PERPVD47PFNNQUxMPjtJR05PUkUKKzxmOD4KKzxVRkIwMD4JIjxVMDA0Nj48VTAwNDY+IjsiPE5PTkU+PE5PTkU+IjsiPFVGQjAwPjxVRkIwMD4iO0lHTk9SRQorPFVGQjAxPgkiPFUwMDQ2PjxVMDA0OT4iOyI8Tk9ORT48Tk9ORT4iOyI8VUZCMDE+PFVGQjAxPiI7SUdOT1JFCis8VUZCMDI+CSI8VTAwNDY+PFUwMDRDPiI7IjxOT05FPjxOT05FPiI7IjxVRkIwMj48VUZCMDI+IjtJR05PUkUKKzxVRkIwMz4JIjxVMDA0Nj48VTAwNDY+PFUwMDQ5PiI7IjxOT05FPjxOT05FPjxOT05FPiI7IjxVRkIwMz48VUZCMDM+PFVGQjAzPiI7SUdOT1JFCis8VUZCMDQ+CSI8VTAwNDY+PFUwMDQ2PjxVMDA0Qz4iOyI8Tk9ORT48Tk9ORT48Tk9ORT4iOyI8VUZCMDQ+PFVGQjA0PjxVRkIwND4iO0lHTk9SRQorPFUwMDQ3Pgk8VTAwNDc+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjc+CTxVMDA0Nz47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxRjQ+CTxVMDA0Nz47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRjU+CTxVMDA0Nz47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMTFFPgk8VTAwNDc+OzxCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTFGPgk8VTAwNDc+OzxCUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDExQz4JPFUwMDQ3Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMTFEPgk8VTAwNDc+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUwMUU2Pgk8VTAwNDc+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUU3Pgk8VTAwNDc+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDEyMD4JPFUwMDQ3Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMjE+CTxVMDA0Nz47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMDFFND4JPFUwMDQ3Pjs8U1RST0tFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRTU+CTxVMDA0Nz47PFNUUk9LRT47PFNNQUxMPjtJR05PUkUKKzxVMUUyMD4JPFUwMDQ3Pjs8TUFDUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMjE+CTxVMDA0Nz47PE1BQ1JPTj47PFNNQUxMPjtJR05PUkUKKzxnOD4KKzxVMDEyMj4gICA8VTAxMjI+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMjM+ICAgPFUwMTIyPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDA0OD4JPFUwMDQ4Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDY4Pgk8VTAwNDg+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUxRTJBPgk8VTAwNDg+OzxCUkVWRS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTJCPgk8VTAwNDg+OzxCUkVWRS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDEyND4JPFUwMDQ4Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMTI1Pgk8VTAwNDg+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRTI2Pgk8VTAwNDg+OzxESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUyNz4JPFUwMDQ4Pjs8RElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUxRTIyPgk8VTAwNDg+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUyMz4JPFUwMDQ4Pjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTI0Pgk8VTAwNDg+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUyNT4JPFUwMDQ4Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTI2Pgk8VTAwNDg+OzxTVFJPS0U+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEyNz4JPFUwMDQ4Pjs8U1RST0tFPjs8U01BTEw+O0lHTk9SRQorPFUxRTI4Pgk8VTAwNDg+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMjk+CTxVMDA0OD47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8aDg+Cis8VTAwNDk+CTxVMDA0OT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2OT4JPFUwMDQ5Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDBDRD4JPFUwMDQ5Pjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFRD4JPFUwMDQ5Pjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAwQ0M+CTxVMDA0OT47PEdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRUM+CTxVMDA0OT47PEdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjA4Pgk8VTAwNDk+OzxET1VCTEUtR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIwOT4JPFUwMDQ5Pjs8RE9VQkxFLUdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTJDPgk8VTAwNDk+OzxCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTJEPgk8VTAwNDk+OzxCUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIwQT4JPFUwMDQ5Pjs8SU5WRVJURUQtQlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIwQj4JPFUwMDQ5Pjs8SU5WRVJURUQtQlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAwQ0U+CTxVMDA0OT47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFRT4JPFUwMDQ5Pjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMDFDRj4JPFUwMDQ5Pjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFEMD4JPFUwMDQ5Pjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAwQ0Y+CTxVMDA0OT47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUwMEVGPgk8VTAwNDk+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFMkU+CTxVMDA0OT47PERJQUVSRVNJUytBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTJGPgk8VTAwNDk+OzxESUFFUkVTSVMrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFQzg+CTxVMDA0OT47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDOT4JPFUwMDQ5Pjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMDEyOD4JPFUwMDQ5Pjs8VElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEyOT4JPFUwMDQ5Pjs8VElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFMkM+CTxVMDA0OT47PFRJTERFLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMkQ+CTxVMDA0OT47PFRJTERFLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTMwPgk8VTAwNDk+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEzMT4JPFUwMDQ5Pjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRUNBPgk8VTAwNDk+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDQj4JPFUwMDQ5Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTJFPgk8VTAwNDk+OzxPR09ORUs+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEyRj4JPFUwMDQ5Pjs8T0dPTkVLPjs8U01BTEw+O0lHTk9SRQorPGk4PgorPFUwMDU5PiAgICA8VTAwNTk+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzk+ICAgIDxVMDA1OT47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAwREQ+ICAgPFUwMDU5Pjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGRD4gICA8VTAwNTk+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzx5OD4KKzxVMDEyQT4gICA8VTAxMkE+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMkI+ICAgPFUwMTJBPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDEzMj4JIjxVMDA0OT48VTAwNEE+IjsiPFUwMTMyPjxVMDEzMj4iOyI8Q0FQSVRBTD48Q0FQSVRBTD4iO0lHTk9SRQorPFUwMTMzPgkiPFUwMDQ5PjxVMDA0QT4iOyI8VTAxMzI+PFUwMTMyPiI7IjxTTUFMTD48U01BTEw+IjtJR05PUkUKKzxVMDA0QT4JPFUwMDRBPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDZBPgk8VTAwNEE+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTM0Pgk8VTAwNEE+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMzU+CTxVMDA0QT47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8ajg+Cis8VTAwNEI+CTxVMDA0Qj47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2Qj4JPFUwMDRCPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMUUzMD4JPFUwMDRCPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzMT4JPFUwMDRCPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAxRTg+CTxVMDA0Qj47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRTk+CTxVMDA0Qj47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMTk4Pgk8VTAwNEI+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxOTk+CTxVMDA0Qj47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFMzI+CTxVMDA0Qj47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTMzPgk8VTAwNEI+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTFFMzQ+CTxVMDA0Qj47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzNT4JPFUwMDRCPjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxrOD4KKzxVMDEzNj4gICA8VTAxMzY+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMzc+ICAgPFUwMTM2Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDEzOD4JPFUwMDRCPjs8VTAxMzg+OzxTTUFMTD47SUdOT1JFCis8VTAwNEM+CTxVMDA0Qz47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2Qz4JPFUwMDRDPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDEzOT4JPFUwMDRDPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEzQT4JPFUwMDRDPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAxM0Q+CTxVMDA0Qz47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxM0U+CTxVMDA0Qz47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMTNGPgk8VTAwNEM+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0MD4JPFUwMDRDPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTM2Pgk8VTAwNEM+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzNz4JPFUwMDRDPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTQxPgk8VTAwNEM+OzxTVFJPS0U+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0Mj4JPFUwMDRDPjs8U1RST0tFPjs8U01BTEw+O0lHTk9SRQorPFUxRTM4Pgk8VTAwNEM+OzxNQUNST04rRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMzk+CTxVMDA0Qz47PE1BQ1JPTitET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTFFM0M+CTxVMDA0Qz47PE1BQ1JPTitDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFM0Q+CTxVMDA0Qz47PE1BQ1JPTitDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRTNBPgk8VTAwNEM+OzxMSU5FLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFM0I+CTxVMDA0Qz47PExJTkUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8bDg+Cis8VTAxM0I+ICAgPFUwMTNCPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMTNDPiAgIDxVMDEzQj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAwNEQ+CTxVMDA0RD47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2RD4JPFUwMDREPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMUUzRT4JPFUwMDREPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzRj4JPFUwMDREPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFNDA+CTxVMDA0RD47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTQxPgk8VTAwNEQ+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFNDI+CTxVMDA0RD47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTQzPgk8VTAwNEQ+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8bTg+Cis8VTAwNEU+CTxVMDA0RT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2RT4JPFUwMDRFPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDE0Mz4JPFUwMDRFPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0ND4JPFUwMDRFPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAxNDc+CTxVMDA0RT47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNDg+CTxVMDA0RT47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMEQxPgk8VTAwNEU+OzxUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUwMEYxPgk8VTAwNEU+OzxUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUU0ND4JPFUwMDRFPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNDU+CTxVMDA0RT47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUU0Nj4JPFUwMDRFPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNDc+CTxVMDA0RT47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUU0QT4JPFUwMDRFPjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU0Qj4JPFUwMDRFPjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFNDg+CTxVMDA0RT47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU0OT4JPFUwMDRFPjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDE0OT4JPFUwMDRFPjs8UFJFQ0VERUQtQlktQVBPU1RST1BIRT47PFNNQUxMPjtJR05PUkUKKzxuOD4KKzxVMDE0NT4gICA8VTAxNDU+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNDY+ICAgPFUwMTQ1Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDE0QT4JIjxVMDA0RT48VTAwNDc+IjsiPFUwMTRBPjxVMDE0QT4iOyI8Q0FQSVRBTD48Q0FQSVRBTD4iO0lHTk9SRQorPFUwMTRCPgkiPFUwMDRFPjxVMDA0Nz4iOyI8VTAxNEE+PFUwMTRBPiI7IjxTTUFMTD48U01BTEw+IjtJR05PUkUKKzxVMDA0Rj4JPFUwMDRGPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDZGPgk8VTAwNEY+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMEJBPgk8VTAwNEY+OzxOT05FPjs8VTAwQkE+O0lHTk9SRQorPFUwMEQzPgk8VTAwNEY+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMEYzPgk8VTAwNEY+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDBEMj4JPFUwMDRGPjs8R1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGMj4JPFUwMDRGPjs8R1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMEM+CTxVMDA0Rj47PERPVUJMRS1HUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjBEPgk8VTAwNEY+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxNEU+CTxVMDA0Rj47PEJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNEY+CTxVMDA0Rj47PEJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjBFPgk8VTAwNEY+OzxJTlZFUlRFRC1CUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjBGPgk8VTAwNEY+OzxJTlZFUlRFRC1CUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDBEND4JPFUwMDRGPjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMEY0Pgk8VTAwNEY+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRUQwPgk8VTAwNEY+OzxDSVJDVU1GTEVYK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRDE+CTxVMDA0Rj47PENJUkNVTUZMRVgrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFRDI+CTxVMDA0Rj47PENJUkNVTUZMRVgrR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVEMz4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMUVEND4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRDU+CTxVMDA0Rj47PENJUkNVTUZMRVgrSE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVENj4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUxRUQ3Pgk8VTAwNEY+OzxDSVJDVU1GTEVYK1RJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRUQ4Pgk8VTAwNEY+OzxDSVJDVU1GTEVYK0RPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUQ5Pgk8VTAwNEY+OzxDSVJDVU1GTEVYK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDFEMT4JPFUwMDRGPjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFEMj4JPFUwMDRGPjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAwRDY+CTxVMDA0Rj47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUwMEY2Pgk8VTAwNEY+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTAxNTA+CTxVMDA0Rj47PERPVUJMRS1BQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMTUxPgk8VTAwNEY+OzxET1VCTEUtQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFQ0U+CTxVMDA0Rj47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDRj4JPFUwMDRGPjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMDBENT4JPFUwMDRGPjs8VElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGNT4JPFUwMDRGPjs8VElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFNEM+CTxVMDA0Rj47PFRJTERFK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNEQ+CTxVMDA0Rj47PFRJTERFK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTRFPgk8VTAwNEY+OzxUSUxERStESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU0Rj4JPFUwMDRGPjs8VElMREUrRElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUxRUNDPgk8VTAwNEY+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDRD4JPFUwMDRGPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMEQ4Pgk8VTAwNEY+OzxTVFJPS0U+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGOD4JPFUwMDRGPjs8U1RST0tFPjs8U01BTEw+O0lHTk9SRQorPFUwMUZFPgk8VTAwNEY+OzxTVFJPS0UrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFGRj4JPFUwMDRGPjs8U1RST0tFK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMUVBPgk8VTAwNEY+OzxPR09ORUs+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFFQj4JPFUwMDRGPjs8T0dPTkVLPjs8U01BTEw+O0lHTk9SRQorPFUwMUVDPgk8VTAwNEY+OzxPR09ORUsrTUFDUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRUQ+CTxVMDA0Rj47PE9HT05FSytNQUNST04+OzxTTUFMTD47SUdOT1JFCis8VTFFNTI+CTxVMDA0Rj47PE1BQ1JPTitBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTUzPgk8VTAwNEY+OzxNQUNST04rQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFNTA+CTxVMDA0Rj47PE1BQ1JPTitHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRTUxPgk8VTAwNEY+OzxNQUNST04rR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxQTA+CTxVMDA0Rj47PEhPUk4+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFBMT4JPFUwMDRGPjs8SE9STj47PFNNQUxMPjtJR05PUkUKKzxVMUVEQT4JPFUwMDRGPjs8SE9STitBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRURCPgk8VTAwNEY+OzxIT1JOK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRURDPgk8VTAwNEY+OzxIT1JOK0dSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFREQ+CTxVMDA0Rj47PEhPUk4rR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFREU+CTxVMDA0Rj47PEhPUk4rSE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRURGPgk8VTAwNEY+OzxIT1JOK0hPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFRTA+CTxVMDA0Rj47PEhPUk4rVElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFMT4JPFUwMDRGPjs8SE9STitUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUVFMj4JPFUwMDRGPjs8SE9STitET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFMz4JPFUwMDRGPjs8SE9STitET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8bzg+Cis8VTAxNEM+ICAgPFUwMTRDPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMTREPiAgIDxVMDE0Qz47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxNTI+CSI8VTAwNEY+PFUwMDQ1PiI7IjxVMDE1Mj48VTAxNTI+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDE1Mz4JIjxVMDA0Rj48VTAwNDU+IjsiPFUwMTUyPjxVMDE1Mj4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAwNTA+CTxVMDA1MD47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3MD4JPFUwMDUwPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMUU1ND4JPFUwMDUwPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU1NT4JPFUwMDUwPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFNTY+CTxVMDA1MD47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTU3Pgk8VTAwNTA+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8cDg+Cis8VTAwNTE+CTxVMDA1MT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3MT4JPFUwMDUxPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxxOD4KKzxVMDA1Mj4JPFUwMDUyPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDcyPgk8VTAwNTI+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTU0Pgk8VTAwNTI+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMTU1Pgk8VTAwNTI+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDIxMD4JPFUwMDUyPjs8RE9VQkxFLUdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMTE+CTxVMDA1Mj47PERPVUJMRS1HUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIxMj4JPFUwMDUyPjs8SU5WRVJURUQtQlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIxMz4JPFUwMDUyPjs8SU5WRVJURUQtQlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxNTg+CTxVMDA1Mj47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNTk+CTxVMDA1Mj47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRTU4Pgk8VTAwNTI+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU1OT4JPFUwMDUyPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTVBPgk8VTAwNTI+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU1Qj4JPFUwMDUyPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUxRTVDPgk8VTAwNTI+OzxNQUNST04rRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNUQ+CTxVMDA1Mj47PE1BQ1JPTitET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTFFNUU+CTxVMDA1Mj47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU1Rj4JPFUwMDUyPjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxyOD4KKzxVMDE1Nj4gICA8VTAxNTY+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNTc+ICAgPFUwMTU2Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDA1Mz4JPFUwMDUzPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDczPgk8VTAwNTM+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFVGQjA2PgkiPFUwMDUzPjxVMDA1ND4iOyI8Tk9ORT48Tk9ORT4iOyI8VUZCMDY+PFVGQjA2PiI7SUdOT1JFCis8VTAxNUE+CTxVMDA1Mz47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNUI+CTxVMDA1Mz47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTY0Pgk8VTAwNTM+OzxBQ1VURStET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2NT4JPFUwMDUzPjs8QUNVVEUrRE9UPjs8U01BTEw+O0lHTk9SRQorPFUwMTVDPgk8VTAwNTM+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNUQ+CTxVMDA1Mz47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFNjY+CTxVMDA1Mz47PENBUk9OK0RPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTY3Pgk8VTAwNTM+OzxDQVJPTitET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFNjA+CTxVMDA1Mz47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTYxPgk8VTAwNTM+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFNjI+CTxVMDA1Mz47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTYzPgk8VTAwNTM+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTFFNjg+CTxVMDA1Mz47PERPVCtET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2OT4JPFUwMDUzPjs8RE9UK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDE1RT4JPFUwMDUzPjs8Q0VESUxMQT47PENBUElUQUw+O0lHTk9SRQorPFUwMTVGPgk8VTAwNTM+OzxDRURJTExBPjs8U01BTEw+O0lHTk9SRQorPHM4PgorPFUwMTYwPiAgIDxVMDE2MD47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE2MT4gICA8VTAxNjA+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTdGPgk8VTAwNTM+OzxVMDE3Rj47PFNNQUxMPjtJR05PUkUKKzxVMDBERj4JIjxVMDA1Mz48VTAwNTM+IjsiPE5PTkU+PE5PTkU+IjsiPFNNQUxMPjxVMDBERj4iO0lHTk9SRQorPFVGQjA1PgkiPFUwMDUzPjxVMDA1ND4iOyI8Tk9ORT48Tk9ORT4iOyI8VUZCMDU+PFVGQjA1PiI7SUdOT1JFCis8VTAwNTQ+CTxVMDA1ND47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3ND4JPFUwMDU0Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDE2ND4JPFUwMDU0Pjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE2NT4JPFUwMDU0Pjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTFFNkE+CTxVMDA1ND47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTZCPgk8VTAwNTQ+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFNkM+CTxVMDA1ND47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTZEPgk8VTAwNTQ+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxNjY+CTxVMDA1ND47PFNUUk9LRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTY3Pgk8VTAwNTQ+OzxTVFJPS0U+OzxTTUFMTD47SUdOT1JFCis8VTAxNjI+CTxVMDA1ND47PENFRElMTEE+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE2Mz4JPFUwMDU0Pjs8Q0VESUxMQT47PFNNQUxMPjtJR05PUkUKKzxVMUU3MD4JPFUwMDU0Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU3MT4JPFUwMDU0Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFNkU+CTxVMDA1ND47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2Rj4JPFUwMDU0Pjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzx0OD4KKzxVMDBERT4JIjxVMDA1ND48VTAwNDg+IjsiPFUwMERFPjxVMDBERT4iOyI8Q0FQSVRBTD48Q0FQSVRBTD4iO0lHTk9SRQorPFUwMEZFPgkiPFUwMDU0PjxVMDA0OD4iOyI8VTAwREU+PFUwMERFPiI7IjxTTUFMTD48U01BTEw+IjtJR05PUkUKKzxVMDA1NT4JPFUwMDU1Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDc1Pgk8VTAwNTU+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMERBPgk8VTAwNTU+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMEZBPgk8VTAwNTU+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDBEOT4JPFUwMDU1Pjs8R1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGOT4JPFUwMDU1Pjs8R1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMTQ+CTxVMDA1NT47PERPVUJMRS1HUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjE1Pgk8VTAwNTU+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxNkM+CTxVMDA1NT47PEJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNkQ+CTxVMDA1NT47PEJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjE2Pgk8VTAwNTU+OzxJTlZFUlRFRC1CUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjE3Pgk8VTAwNTU+OzxJTlZFUlRFRC1CUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDBEQj4JPFUwMDU1Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMEZCPgk8VTAwNTU+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUwMUQzPgk8VTAwNTU+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUQ0Pgk8VTAwNTU+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDE2RT4JPFUwMDU1Pjs8UklORz47PENBUElUQUw+O0lHTk9SRQorPFUwMTZGPgk8VTAwNTU+OzxSSU5HPjs8U01BTEw+O0lHTk9SRQorPFUwMERDPgk8VTAwNTU+OzxESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGQz4JPFUwMDU1Pjs8RElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUwMUQ1Pgk8VTAwNTU+OzxESUFFUkVTSVMrTUFDUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRDY+CTxVMDA1NT47PERJQUVSRVNJUytNQUNST04+OzxTTUFMTD47SUdOT1JFCis8VTAxRDc+CTxVMDA1NT47PERJQUVSRVNJUytBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMUQ4Pgk8VTAwNTU+OzxESUFFUkVTSVMrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAxREI+CTxVMDA1NT47PERJQUVSRVNJUytHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMURDPgk8VTAwNTU+OzxESUFFUkVTSVMrR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxRDk+CTxVMDA1NT47PERJQUVSRVNJUytDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMURBPgk8VTAwNTU+OzxESUFFUkVTSVMrQ0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAxNzA+CTxVMDA1NT47PERPVUJMRS1BQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMTcxPgk8VTAwNTU+OzxET1VCTEUtQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFRTY+CTxVMDA1NT47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFNz4JPFUwMDU1Pjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMDE2OD4JPFUwMDU1Pjs8VElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE2OT4JPFUwMDU1Pjs8VElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFNzg+CTxVMDA1NT47PFRJTERFK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNzk+CTxVMDA1NT47PFRJTERFK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTc0Pgk8VTAwNTU+OzxUSUxERS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTc1Pgk8VTAwNTU+OzxUSUxERS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUVFND4JPFUwMDU1Pjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRTU+CTxVMDA1NT47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDE3Mj4JPFUwMDU1Pjs8T0dPTkVLPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNzM+CTxVMDA1NT47PE9HT05FSz47PFNNQUxMPjtJR05PUkUKKzxVMUU3QT4JPFUwMDU1Pjs8TUFDUk9OK0RJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUxRTdCPgk8VTAwNTU+OzxNQUNST04rRElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUxRTcyPgk8VTAwNTU+OzxNQUNST04rRElBRVJFU0lTLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNzM+CTxVMDA1NT47PE1BQ1JPTitESUFFUkVTSVMtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTFFNzY+CTxVMDA1NT47PE1BQ1JPTitDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNzc+CTxVMDA1NT47PE1BQ1JPTitDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUwMUFGPgk8VTAwNTU+OzxIT1JOPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxQjA+CTxVMDA1NT47PEhPUk4+OzxTTUFMTD47SUdOT1JFCis8VTFFRTg+CTxVMDA1NT47PEhPUk4rQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFOT4JPFUwMDU1Pjs8SE9STitBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVFQT4JPFUwMDU1Pjs8SE9STitHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRUVCPgk8VTAwNTU+OzxIT1JOK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRUVDPgk8VTAwNTU+OzxIT1JOK0hPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFRD4JPFUwMDU1Pjs8SE9STitIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRUVFPgk8VTAwNTU+OzxIT1JOK1RJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRUY+CTxVMDA1NT47PEhPUk4rVElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFRjA+CTxVMDA1NT47PEhPUk4rRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRjE+CTxVMDA1NT47PEhPUk4rRE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPHU4PgorPFUwMTZBPiAgIDxVMDE2QT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE2Qj4gICA8VTAxNkE+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMDU2Pgk8VTAwNTY+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzY+CTxVMDA1Nj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFN0M+CTxVMDA1Nj47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFN0Q+CTxVMDA1Nj47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRTdFPgk8VTAwNTY+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU3Rj4JPFUwMDU2Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPHY4PgorPFUwMDU3Pgk8VTAwNTc+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzc+CTxVMDA1Nz47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFODI+CTxVMDA1Nz47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFODM+CTxVMDA1Nz47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTgwPgk8VTAwNTc+OzxHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRTgxPgk8VTAwNTc+OzxHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDE3ND4JPFUwMDU3Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMTc1Pgk8VTAwNTc+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRTg0Pgk8VTAwNTc+OzxESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU4NT4JPFUwMDU3Pjs8RElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUxRTg2Pgk8VTAwNTc+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU4Nz4JPFUwMDU3Pjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTg4Pgk8VTAwNTc+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU4OT4JPFUwMDU3Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPHc4PgorPFUwMDU4Pgk8VTAwNTg+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzg+CTxVMDA1OD47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFOEM+CTxVMDA1OD47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUxRThEPgk8VTAwNTg+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFOEE+CTxVMDA1OD47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRThCPgk8VTAwNTg+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8eDg+Cis8VTFFRjI+CTxVMDA1OT47PEdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRjM+CTxVMDA1OT47PEdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTc2Pgk8VTAwNTk+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNzc+CTxVMDA1OT47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTAxNzg+CTxVMDA1OT47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUwMEZGPgk8VTAwNTk+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFRjY+CTxVMDA1OT47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVGNz4JPFUwMDU5Pjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVGOD4JPFUwMDU5Pjs8VElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVGOT4JPFUwMDU5Pjs8VElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFOEU+CTxVMDA1OT47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRThGPgk8VTAwNTk+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFRjQ+CTxVMDA1OT47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUY1Pgk8VTAwNTk+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAwNUE+CTxVMDA1QT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3QT4JPFUwMDVBPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDE3OT4JPFUwMDVBPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE3QT4JPFUwMDVBPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFOTA+CTxVMDA1QT47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU5MT4JPFUwMDVBPjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMDE3Qj4JPFUwMDVBPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxN0M+CTxVMDA1QT47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUU5Mj4JPFUwMDVBPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFOTM+CTxVMDA1QT47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDFCNT4JPFUwMDVBPjs8U1RST0tFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxQjY+CTxVMDA1QT47PFNUUk9LRT47PFNNQUxMPjtJR05PUkUKKzxVMUU5ND4JPFUwMDVBPjs8TElORS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTk1Pgk8VTAwNUE+OzxMSU5FLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPHo4PgorPFUwMTdEPiAgIDxVMDE3RD47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE3RT4gICA8VTAxN0Q+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMzkxPgk8VTAzOTE+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzg2Pgk8VTAzOTE+OzxDQVBJVEFMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0IxPgk8VTAzOTE+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBQz4JPFUwMzkxPjs8U01BTEw+OzxUT05PUz47SUdOT1JFCis8VTAzOTI+CTxVMDM5Mj47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQjI+CTxVMDM5Mj47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzkzPgk8VTAzOTM+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0IzPgk8VTAzOTM+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDM5ND4JPFUwMzk0Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCND4JPFUwMzk0Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOTU+CTxVMDM5NT47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzODg+CTxVMDM5NT47PENBUElUQUw+OzxUT05PUz47SUdOT1JFCis8VTAzQjU+CTxVMDM5NT47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0FEPgk8VTAzOTU+OzxTTUFMTD47PFRPTk9TPjtJR05PUkUKKzxVMDM5Nj4JPFUwMzk2Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCNj4JPFUwMzk2Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOTc+CTxVMDM5Nz47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzODk+CTxVMDM5Nz47PENBUElUQUw+OzxUT05PUz47SUdOT1JFCis8VTAzQjc+CTxVMDM5Nz47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0FFPgk8VTAzOTc+OzxTTUFMTD47PFRPTk9TPjtJR05PUkUKKzxVMDM5OD4JPFUwMzk4Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCOD4JPFUwMzk4Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOTk+CTxVMDM5OT47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzOEE+CTxVMDM5OT47PENBUElUQUw+OzxUT05PUz47SUdOT1JFCis8VTAzQUE+CTxVMDM5OT47PENBUElUQUw+OzxESUFMWVRJQ0E+O0lHTk9SRQorPFUwM0I5Pgk8VTAzOTk+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBRj4JPFUwMzk5Pjs8U01BTEw+OzxUT05PUz47SUdOT1JFCis8VTAzQ0E+CTxVMDM5OT47PFNNQUxMPjs8RElBTFlUSUNBPjtJR05PUkUKKzxVMDM5MD4JPFUwMzk5Pjs8U01BTEw+OzxESUFMWVRJQ0ErVE9OT1M+O0lHTk9SRQorPFUwMzlBPgk8VTAzOUE+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0JBPgk8VTAzOUE+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDM5Qj4JPFUwMzlCPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCQj4JPFUwMzlCPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOUM+CTxVMDM5Qz47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQkM+CTxVMDM5Qz47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzlEPgk8VTAzOUQ+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0JEPgk8VTAzOUQ+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDM5RT4JPFUwMzlFPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCRT4JPFUwMzlFPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOUY+CTxVMDM5Rj47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzOEM+CTxVMDM5Rj47PENBUElUQUw+OzxUT05PUz47SUdOT1JFCis8VTAzQkY+CTxVMDM5Rj47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0NDPgk8VTAzOUY+OzxTTUFMTD47PFRPTk9TPjtJR05PUkUKKzxVMDNBMD4JPFUwM0EwPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDMD4JPFUwM0EwPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQTE+CTxVMDNBMT47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzE+CTxVMDNBMT47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0EzPgk8VTAzQTM+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0MzPgk8VTAzQTM+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDMj4JPFUwM0EzPjs8U01BTEw+OzxVMDNDMj47SUdOT1JFCis8VTAzQTQ+CTxVMDNBND47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzQ+CTxVMDNBND47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0E1Pgk8VTAzQTU+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzhFPgk8VTAzQTU+OzxDQVBJVEFMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0FCPgk8VTAzQTU+OzxDQVBJVEFMPjs8RElBTFlUSUNBPjtJR05PUkUKKzxVMDNDNT4JPFUwM0E1Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQ0Q+CTxVMDNBNT47PFNNQUxMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0NCPgk8VTAzQTU+OzxTTUFMTD47PERJQUxZVElDQT47SUdOT1JFCis8VTAzQjA+CTxVMDNBNT47PFNNQUxMPjs8RElBTFlUSUNBK1RPTk9TPjtJR05PUkUKKzxVMDNBNj4JPFUwM0E2Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDNj4JPFUwM0E2Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQTc+CTxVMDNBNz47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzc+CTxVMDNBNz47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0E4Pgk8VTAzQTg+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0M4Pgk8VTAzQTg+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBOT4JPFUwM0E5Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDM4Rj4JPFUwM0E5Pjs8Q0FQSVRBTD47PFRPTk9TPjtJR05PUkUKKzxVMDNDOT4JPFUwM0E5Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQ0U+CTxVMDNBOT47PFNNQUxMPjs8VE9OT1M+O0lHTk9SRQorPFUwNDEwPgk8VTA0MTA+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDMwPgk8VTA0MTA+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxMT4JPFUwNDExPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzMT4JPFUwNDExPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTI+CTxVMDQxMj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0MzI+CTxVMDQxMj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDEzPgk8VTA0MTM+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDMzPgk8VTA0MTM+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwMz4JPFUwNDAzPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1Mz4JPFUwNDAzPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0OTA+CTxVMDQ5MD47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0OTE+CTxVMDQ5MD47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDE0Pgk8VTA0MTQ+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDM0Pgk8VTA0MTQ+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwMj4JPFUwNDAyPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1Mj4JPFUwNDAyPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTU+CTxVMDQxNT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0MzU+CTxVMDQxNT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDAxPgk8VTA0MDE+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDUxPgk8VTA0MDE+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwND4JPFUwNDA0Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1ND4JPFUwNDA0Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTY+CTxVMDQxNj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0MzY+CTxVMDQxNj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDE3Pgk8VTA0MTc+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDM3Pgk8VTA0MTc+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxOD4JPFUwNDE4Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzOD4JPFUwNDE4Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MDY+CTxVMDQwNj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NTY+CTxVMDQwNj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDA3Pgk8VTA0MDc+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDU3Pgk8VTA0MDc+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwOD4JPFUwNDA4Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1OD4JPFUwNDA4Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTk+CTxVMDQxOT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0Mzk+CTxVMDQxOT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDFBPgk8VTA0MUE+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDNBPgk8VTA0MUE+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwQz4JPFUwNDBDPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1Qz4JPFUwNDBDPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MUI+CTxVMDQxQj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0M0I+CTxVMDQxQj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDA5Pgk8VTA0MDk+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDU5Pgk8VTA0MDk+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxQz4JPFUwNDFDPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzQz4JPFUwNDFDPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MUQ+CTxVMDQxRD47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0M0Q+CTxVMDQxRD47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDBBPgk8VTA0MEE+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDVBPgk8VTA0MEE+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxRT4JPFUwNDFFPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzRT4JPFUwNDFFPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MUY+CTxVMDQxRj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0M0Y+CTxVMDQxRj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDIwPgk8VTA0MjA+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDQwPgk8VTA0MjA+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyMT4JPFUwNDIxPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0MT4JPFUwNDIxPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MjI+CTxVMDQyMj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDI+CTxVMDQyMj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDBCPgk8VTA0MEI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDVCPgk8VTA0MEI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyMz4JPFUwNDIzPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0Mz4JPFUwNDIzPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MEU+CTxVMDQwRT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NUU+CTxVMDQwRT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDI0Pgk8VTA0MjQ+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDQ0Pgk8VTA0MjQ+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyNT4JPFUwNDI1Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0NT4JPFUwNDI1Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MjY+CTxVMDQyNj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDY+CTxVMDQyNj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDA1Pgk8VTA0MDU+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDU1Pgk8VTA0MDU+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyNz4JPFUwNDI3Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0Nz4JPFUwNDI3Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MEY+CTxVMDQwRj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NUY+CTxVMDQwRj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDI4Pgk8VTA0Mjg+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDQ4Pgk8VTA0Mjg+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyOT4JPFUwNDI5Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0OT4JPFUwNDI5Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0NEE+CTxVMDQ0QT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDJBPgk8VTA0NEE+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDJCPgk8VTA0MkI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDRCPgk8VTA0MkI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQ0Qz4JPFUwNDRDPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MkM+CTxVMDQ0Qz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0MkQ+CTxVMDQyRD47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NEQ+CTxVMDQyRD47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDJFPgk8VTA0MkU+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDRFPgk8VTA0MkU+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyRj4JPFUwNDJGPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0Rj4JPFUwNDJGPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0NjI+CTxVMDQ2Mj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NjM+CTxVMDQ2Mj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDZBPgk8VTA0NkE+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDZCPgk8VTA0NkE+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQ3Mj4JPFUwNDcyPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ3Mz4JPFUwNDcyPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0NzQ+CTxVMDQ3ND47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NzU+CTxVMDQ3ND47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDgwPgk8VTA0ODA+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDgxPgk8VTA0ODA+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDVEMD4JPFUwNUQwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQxPgk8VTA1RDE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDI+CTxVMDVEMj47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEMz4JPFUwNUQzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQ0Pgk8VTA1RDQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDU+CTxVMDVENT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVENj4JPFUwNUQ2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQ3Pgk8VTA1RDc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDg+CTxVMDVEOD47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEOT4JPFUwNUQ5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNURBPgk8VTA1REE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1REI+CTxVMDVEQj47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEQz4JPFUwNURDPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUREPgk8VTA1REQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1REU+CTxVMDVERT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVERj4JPFUwNURGPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUUwPgk8VTA1RTA+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTE+CTxVMDVFMT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFMj4JPFUwNUUyPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUUzPgk8VTA1RTM+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTQ+CTxVMDVFND47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFNT4JPFUwNUU1PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUU2Pgk8VTA1RTY+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTc+CTxVMDVFNz47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFOD4JPFUwNUU4PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUU5Pgk8VTA1RTk+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RUE+CTxVMDVFQT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKworJSBBcmFiaWMgY29sbGF0aW5nCisKKzxVMDYwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNjBDPgorPFUwNjFCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA2MUI+Cis8VTA2MUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDYxRj4KKzxVMDY0MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNjQwPgorCis8VTA2MjE+CTxVMDYyMT47PFUwNjIxPjtJR05PUkU7SUdOT1JFCis8VTA2MjI+CTxVMDYyMj47PFUwNjIyPjtJR05PUkU7SUdOT1JFCis8VUZFODI+CTxVMDYyMj47PFVGRTgyPjtJR05PUkU7SUdOT1JFCis8VTA2MjM+CTxVMDYyMT47PFUwNjIzPjtJR05PUkU7SUdOT1JFCis8VUZFODQ+CTxVMDYyMT47PFVGRTg0PjtJR05PUkU7SUdOT1JFCis8VTA2MjQ+CTxVMDYyMT47PFUwNjI0PjtJR05PUkU7SUdOT1JFCis8VTA2MjU+CTxVMDYyMT47PFUwNjI1PjtJR05PUkU7SUdOT1JFCis8VUZFODg+CTxVMDYyMT47PFVGRTg4PjtJR05PUkU7SUdOT1JFCis8VTA2MjY+CTxVMDYyMT47PFUwNjI2PjtJR05PUkU7SUdOT1JFCis8VTA2NzA+CTxVMDY3MD47PFUwNjcwPjtJR05PUkU7SUdOT1JFCis8VTA2Mjc+CTxVMDYyNz47PFUwNjI3PjtJR05PUkU7SUdOT1JFCis8VUZFOEQ+CTxVMDYyNz47PFVGRThEPjtJR05PUkU7SUdOT1JFCis8VUZFOEU+CTxVMDYyNz47PFVGRThFPjtJR05PUkU7SUdOT1JFCis8VUUwMTY+CTxVMDYyNz47PFVFMDE2PjtJR05PUkU7SUdOT1JFCis8VTA2Mjg+CTxVMDYyOD47PFUwNjI4PjtJR05PUkU7SUdOT1JFCis8VUZFOEY+CTxVMDYyOD47PFVGRThGPjtJR05PUkU7SUdOT1JFCis8VUZFOTA+CTxVMDYyOD47PFVGRTkwPjtJR05PUkU7SUdOT1JFCis8VUZFOTE+CTxVMDYyOD47PFVGRTkxPjtJR05PUkU7SUdOT1JFCis8VUZFOTI+CTxVMDYyOD47PFVGRTkyPjtJR05PUkU7SUdOT1JFCis8VTA2N0U+CTxVMDY3RT47PFUwNjdFPjtJR05PUkU7SUdOT1JFCis8VTA2QTQ+CTxVMDZBND47PFUwNkE0PjtJR05PUkU7SUdOT1JFCis8VTA2Mjk+CTxVMDYyOT47PFUwNjI5PjtJR05PUkU7SUdOT1JFCis8VUZFOTM+CTxVMDYyOT47PFVGRTkzPjtJR05PUkU7SUdOT1JFCis8VUZFOTQ+CTxVMDYyOT47PFVGRTk0PjtJR05PUkU7SUdOT1JFCis8VTA2MkE+CTxVMDYyOT47PFUwNjJBPjtJR05PUkU7SUdOT1JFCis8VUZFOTU+CTxVMDYyOT47PFVGRTk1PjtJR05PUkU7SUdOT1JFCis8VUZFOTY+CTxVMDYyOT47PFVGRTk2PjtJR05PUkU7SUdOT1JFCis8VUZFOTc+CTxVMDYyOT47PFVGRTk3PjtJR05PUkU7SUdOT1JFCis8VUZFOTg+CTxVMDYyOT47PFVGRTk4PjtJR05PUkU7SUdOT1JFCis8VTA2MkI+CTxVMDYyQj47PFUwNjJCPjtJR05PUkU7SUdOT1JFCis8VUZFOTk+CTxVMDYyQj47PFVGRTk5PjtJR05PUkU7SUdOT1JFCis8VUZFOUE+CTxVMDYyQj47PFVGRTlBPjtJR05PUkU7SUdOT1JFCis8VUZFOUI+CTxVMDYyQj47PFVGRTlCPjtJR05PUkU7SUdOT1JFCis8VUZFOUM+CTxVMDYyQj47PFVGRTlDPjtJR05PUkU7SUdOT1JFCis8VTA2MkM+CTxVMDYyQz47PFUwNjJDPjtJR05PUkU7SUdOT1JFCis8VUZFOUQ+CTxVMDYyQz47PFVGRTlEPjtJR05PUkU7SUdOT1JFCis8VUZFOUU+CTxVMDYyQz47PFVGRTlFPjtJR05PUkU7SUdOT1JFCis8VUZFOUY+CTxVMDYyQz47PFVGRTlGPjtJR05PUkU7SUdOT1JFCis8VUZFQTA+CTxVMDYyQz47PFVGRUEwPjtJR05PUkU7SUdOT1JFCis8VTA2MkQ+CTxVMDYyRD47PFUwNjJEPjtJR05PUkU7SUdOT1JFCis8VUZFQTE+CTxVMDYyRD47PFVGRUExPjtJR05PUkU7SUdOT1JFCis8VUZFQTI+CTxVMDYyRD47PFVGRUEyPjtJR05PUkU7SUdOT1JFCis8VUZFQTM+CTxVMDYyRD47PFVGRUEzPjtJR05PUkU7SUdOT1JFCis8VUZFQTQ+CTxVMDYyRD47PFVGRUE0PjtJR05PUkU7SUdOT1JFCis8VTA2MkU+CTxVMDYyRT47PFUwNjJFPjtJR05PUkU7SUdOT1JFCis8VUZFQTU+CTxVMDYyRT47PFVGRUE1PjtJR05PUkU7SUdOT1JFCis8VUZFQTY+CTxVMDYyRT47PFVGRUE2PjtJR05PUkU7SUdOT1JFCis8VUZFQTc+CTxVMDYyRT47PFVGRUE3PjtJR05PUkU7SUdOT1JFCis8VUZFQTg+CTxVMDYyRT47PFVGRUE4PjtJR05PUkU7SUdOT1JFCis8VTA2MkY+CTxVMDYyRj47PFUwNjJGPjtJR05PUkU7SUdOT1JFCis8VUZFQTk+CTxVMDYyRj47PFVGRUE5PjtJR05PUkU7SUdOT1JFCis8VUZFQUE+CTxVMDYyRj47PFVGRUFBPjtJR05PUkU7SUdOT1JFCis8VTA2MzA+CTxVMDYzMD47PFUwNjMwPjtJR05PUkU7SUdOT1JFCis8VUZFQUI+CTxVMDYzMD47PFVGRUFCPjtJR05PUkU7SUdOT1JFCis8VUZFQUM+CTxVMDYzMD47PFVGRUFDPjtJR05PUkU7SUdOT1JFCis8VTA2MzE+CTxVMDYzMT47PFUwNjMxPjtJR05PUkU7SUdOT1JFCis8VUZFQUQ+CTxVMDYzMT47PFVGRUFEPjtJR05PUkU7SUdOT1JFCis8VUZFQUU+CTxVMDYzMT47PFVGRUFFPjtJR05PUkU7SUdOT1JFCis8VTA2MzI+CTxVMDYzMj47PFUwNjMyPjtJR05PUkU7SUdOT1JFCis8VUZFQUY+CTxVMDYzMj47PFVGRUFGPjtJR05PUkU7SUdOT1JFCis8VUZFQjA+CTxVMDYzMj47PFVGRUIwPjtJR05PUkU7SUdOT1JFCis8VTA2MzM+CTxVMDYzMz47PFUwNjMzPjtJR05PUkU7SUdOT1JFCis8VUZFQjE+CTxVMDYzMz47PFVGRUIxPjtJR05PUkU7SUdOT1JFCis8VUZFQjI+CTxVMDYzMz47PFVGRUIyPjtJR05PUkU7SUdOT1JFCis8VUZFQjM+CTxVMDYzMz47PFVGRUIzPjtJR05PUkU7SUdOT1JFCis8VUZFQjQ+CTxVMDYzMz47PFVGRUI0PjtJR05PUkU7SUdOT1JFCis8VTA2MzQ+CTxVMDYzND47PFUwNjM0PjtJR05PUkU7SUdOT1JFCis8VUZFQjU+CTxVMDYzND47PFVGRUI1PjtJR05PUkU7SUdOT1JFCis8VUZFQjY+CTxVMDYzND47PFVGRUI2PjtJR05PUkU7SUdOT1JFCis8VUZFQjc+CTxVMDYzND47PFVGRUI3PjtJR05PUkU7SUdOT1JFCis8VUZFQjg+CTxVMDYzND47PFVGRUI4PjtJR05PUkU7SUdOT1JFCis8VTA2MzU+CTxVMDYzNT47PFUwNjM1PjtJR05PUkU7SUdOT1JFCis8VUZFQjk+CTxVMDYzNT47PFVGRUI5PjtJR05PUkU7SUdOT1JFCis8VUZFQkE+CTxVMDYzNT47PFVGRUJBPjtJR05PUkU7SUdOT1JFCis8VUZFQkI+CTxVMDYzNT47PFVGRUJCPjtJR05PUkU7SUdOT1JFCis8VUZFQkM+CTxVMDYzNT47PFVGRUJDPjtJR05PUkU7SUdOT1JFCis8VTA2MzY+CTxVMDYzNj47PFUwNjM2PjtJR05PUkU7SUdOT1JFCis8VUZFQkQ+CTxVMDYzNj47PFVGRUJEPjtJR05PUkU7SUdOT1JFCis8VUZFQkU+CTxVMDYzNj47PFVGRUJFPjtJR05PUkU7SUdOT1JFCis8VUZFQkY+CTxVMDYzNj47PFVGRUJGPjtJR05PUkU7SUdOT1JFCis8VUZFQzA+CTxVMDYzNj47PFVGRUMwPjtJR05PUkU7SUdOT1JFCis8VTA2Mzc+CTxVMDYzNz47PFUwNjM3PjtJR05PUkU7SUdOT1JFCis8VUZFQzE+CTxVMDYzNz47PFVGRUMxPjtJR05PUkU7SUdOT1JFCis8VUZFQzI+CTxVMDYzNz47PFVGRUMyPjtJR05PUkU7SUdOT1JFCis8VUZFQzM+CTxVMDYzNz47PFVGRUMzPjtJR05PUkU7SUdOT1JFCis8VUZFQzQ+CTxVMDYzNz47PFVGRUM0PjtJR05PUkU7SUdOT1JFCis8VTA2Mzg+CTxVMDYzOD47PFUwNjM4PjtJR05PUkU7SUdOT1JFCis8VUZFQzU+CTxVMDYzOD47PFVGRUM1PjtJR05PUkU7SUdOT1JFCis8VUZFQzY+CTxVMDYzOD47PFVGRUM2PjtJR05PUkU7SUdOT1JFCis8VUZFQzc+CTxVMDYzOD47PFVGRUM3PjtJR05PUkU7SUdOT1JFCis8VUZFQzg+CTxVMDYzOD47PFVGRUM4PjtJR05PUkU7SUdOT1JFCis8VTA2Mzk+CTxVMDYzOT47PFUwNjM5PjtJR05PUkU7SUdOT1JFCis8VUZFQzk+CTxVMDYzOT47PFVGRUM5PjtJR05PUkU7SUdOT1JFCis8VUZFQ0E+CTxVMDYzOT47PFVGRUNBPjtJR05PUkU7SUdOT1JFCis8VUZFQ0I+CTxVMDYzOT47PFVGRUNCPjtJR05PUkU7SUdOT1JFCis8VUZFQ0M+CTxVMDYzOT47PFVGRUNDPjtJR05PUkU7SUdOT1JFCis8VTA2M0E+CTxVMDYzQT47PFUwNjNBPjtJR05PUkU7SUdOT1JFCis8VUZFQ0Q+CTxVMDYzQT47PFVGRUNEPjtJR05PUkU7SUdOT1JFCis8VUZFQ0U+CTxVMDYzQT47PFVGRUNFPjtJR05PUkU7SUdOT1JFCis8VUZFQ0Y+CTxVMDYzQT47PFVGRUNGPjtJR05PUkU7SUdOT1JFCis8VUZFRDA+CTxVMDYzQT47PFVGRUQwPjtJR05PUkU7SUdOT1JFCis8VTA2NDE+CTxVMDY0MT47PFUwNjQxPjtJR05PUkU7SUdOT1JFCis8VUZFRDE+CTxVMDY0MT47PFVGRUQxPjtJR05PUkU7SUdOT1JFCis8VUZFRDI+CTxVMDY0MT47PFVGRUQyPjtJR05PUkU7SUdOT1JFCis8VUZFRDM+CTxVMDY0MT47PFVGRUQzPjtJR05PUkU7SUdOT1JFCis8VUZFRDQ+CTxVMDY0MT47PFVGRUQ0PjtJR05PUkU7SUdOT1JFCis8VTA2NDI+CTxVMDY0Mj47PFUwNjQyPjtJR05PUkU7SUdOT1JFCis8VUZFRDU+CTxVMDY0Mj47PFVGRUQ1PjtJR05PUkU7SUdOT1JFCis8VUZFRDY+CTxVMDY0Mj47PFVGRUQ2PjtJR05PUkU7SUdOT1JFCis8VUZFRDc+CTxVMDY0Mj47PFVGRUQ3PjtJR05PUkU7SUdOT1JFCis8VUZFRDg+CTxVMDY0Mj47PFVGRUQ4PjtJR05PUkU7SUdOT1JFCis8VTA2NDM+CTxVMDY0Mz47PFUwNjQzPjtJR05PUkU7SUdOT1JFCis8VUZFRDk+CTxVMDY0Mz47PFVGRUQ5PjtJR05PUkU7SUdOT1JFCis8VUZFREE+CTxVMDY0Mz47PFVGRURBPjtJR05PUkU7SUdOT1JFCis8VUZFREI+CTxVMDY0Mz47PFVGRURCPjtJR05PUkU7SUdOT1JFCis8VUZFREM+CTxVMDY0Mz47PFVGRURDPjtJR05PUkU7SUdOT1JFCis8VTA2NDQ+CTxVMDY0ND47PFUwNjQ0PjtJR05PUkU7SUdOT1JFCis8VUZFREQ+CTxVMDY0ND47PFVGRUREPjtJR05PUkU7SUdOT1JFCis8VUZFREU+CTxVMDY0ND47PFVGRURFPjtJR05PUkU7SUdOT1JFCis8VUZFREY+CTxVMDY0ND47PFVGRURGPjtJR05PUkU7SUdOT1JFCis8VUZFRTA+CTxVMDY0ND47PFVGRUUwPjtJR05PUkU7SUdOT1JFCis8VTA2NDU+CTxVMDY0NT47PFUwNjQ1PjtJR05PUkU7SUdOT1JFCis8VUZFRTE+CTxVMDY0NT47PFVGRUUxPjtJR05PUkU7SUdOT1JFCis8VUZFRTI+CTxVMDY0NT47PFVGRUUyPjtJR05PUkU7SUdOT1JFCis8VUZFRTM+CTxVMDY0NT47PFVGRUUzPjtJR05PUkU7SUdOT1JFCis8VUZFRTQ+CTxVMDY0NT47PFVGRUU0PjtJR05PUkU7SUdOT1JFCis8VTA2NDY+CTxVMDY0Nj47PFUwNjQ2PjtJR05PUkU7SUdOT1JFCis8VUZFRTU+CTxVMDY0Nj47PFVGRUU1PjtJR05PUkU7SUdOT1JFCis8VUZFRTY+CTxVMDY0Nj47PFVGRUU2PjtJR05PUkU7SUdOT1JFCis8VUZFRTc+CTxVMDY0Nj47PFVGRUU3PjtJR05PUkU7SUdOT1JFCis8VUZFRTg+CTxVMDY0Nj47PFVGRUU4PjtJR05PUkU7SUdOT1JFCis8VTA2NDc+CTxVMDY0Nz47PFUwNjQ3PjtJR05PUkU7SUdOT1JFCis8VUZFRTk+CTxVMDY0Nz47PFVGRUU5PjtJR05PUkU7SUdOT1JFCis8VUZFRUE+CTxVMDY0Nz47PFVGRUVBPjtJR05PUkU7SUdOT1JFCis8VUZFRUI+CTxVMDY0Nz47PFVGRUVCPjtJR05PUkU7SUdOT1JFCis8VUZFRUM+CTxVMDY0Nz47PFVGRUVDPjtJR05PUkU7SUdOT1JFCis8VTA2NDg+CTxVMDY0OD47PFUwNjQ4PjtJR05PUkU7SUdOT1JFCis8VUZFRUQ+CTxVMDY0OD47PFVGRUVEPjtJR05PUkU7SUdOT1JFCis8VUZFRUU+CTxVMDY0OD47PFVGRUVFPjtJR05PUkU7SUdOT1JFCis8VTA2NDk+CTxVMDY0OT47PFUwNjQ5PjtJR05PUkU7SUdOT1JFCis8VUZFRUY+CTxVMDY0OT47PFVGRUVGPjtJR05PUkU7SUdOT1JFCis8VUZFRjA+CTxVMDY0OT47PFVGRUYwPjtJR05PUkU7SUdOT1JFCis8VTA2NEE+CTxVMDY0QT47PFUwNjRBPjtJR05PUkU7SUdOT1JFCis8VUZFRjE+CTxVMDY0QT47PFVGRUYxPjtJR05PUkU7SUdOT1JFCis8VUZFRjI+CTxVMDY0QT47PFVGRUYyPjtJR05PUkU7SUdOT1JFCis8VUZFRjM+CTxVMDY0QT47PFVGRUYzPjtJR05PUkU7SUdOT1JFCis8VUZFRjQ+CTxVMDY0QT47PFVGRUY0PjtJR05PUkU7SUdOT1JFCisKKzxVMDY0Qj4JSUdOT1JFO0lHTk9SRTs8VTA2NEI+O0lHTk9SRQorPFUwNjRDPglJR05PUkU7SUdOT1JFOzxVMDY0Qz47SUdOT1JFCis8VTA2NEQ+CUlHTk9SRTtJR05PUkU7PFUwNjREPjtJR05PUkUKKzxVMDY0RT4JSUdOT1JFO0lHTk9SRTs8VTA2NEU+O0lHTk9SRQorPFUwNjRGPglJR05PUkU7SUdOT1JFOzxVMDY0Rj47SUdOT1JFCis8VTA2NTA+CUlHTk9SRTtJR05PUkU7PFUwNjUwPjtJR05PUkUKKzxVMDY1MT4JSUdOT1JFO0lHTk9SRTs8VTA2NTE+O0lHTk9SRQorPFVGRTdEPglJR05PUkU7SUdOT1JFOzxVRkU3RD47SUdOT1JFCis8VTA2NTI+CUlHTk9SRTtJR05PUkU7PFUwNjUyPjtJR05PUkUKKworPFUwNjYwPgk8VTAwMzA+OzxVMDY2MD47SUdOT1JFO0lHTk9SRQorPFUwNjYxPgk8VTAwMzE+OzxVMDY2MT47SUdOT1JFO0lHTk9SRQorPFUwNjYyPgk8VTAwMzI+OzxVMDY2Mj47SUdOT1JFO0lHTk9SRQorPFUwNjYzPgk8VTAwMzM+OzxVMDY2Mz47SUdOT1JFO0lHTk9SRQorPFUwNjY0Pgk8VTAwMzQ+OzxVMDY2ND47SUdOT1JFO0lHTk9SRQorPFUwNjY1Pgk8VTAwMzU+OzxVMDY2NT47SUdOT1JFO0lHTk9SRQorPFUwNjY2Pgk8VTAwMzY+OzxVMDY2Nj47SUdOT1JFO0lHTk9SRQorPFUwNjY3Pgk8VTAwMzc+OzxVMDY2Nz47SUdOT1JFO0lHTk9SRQorPFUwNjY4Pgk8VTAwMzg+OzxVMDY2OD47SUdOT1JFO0lHTk9SRQorPFUwNjY5Pgk8VTAwMzk+OzxVMDY2OT47SUdOT1JFO0lHTk9SRQorCis8VUZFRjU+CSI8VTA2NDQ+PFUwNjIyPiI7IjxVMDY0ND48VTA2MjI+IjsiPFVGRUY1PjxVRkVGNT4iO0lHTk9SRQorPFVGRUY2PgkiPFUwNjQ0PjxVMDYyMj4iOyI8VTA2NDQ+PFVGRTgyPiI7IjxVRkVGNj48VUZFRjY+IjtJR05PUkUKKzxVRkVGNz4JIjxVMDY0ND48VTA2MjM+IjsiPFUwNjQ0PjxVMDYyMz4iOyI8VUZFRjc+PFVGRUY3PiI7SUdOT1JFCis8VUZFRjg+CSI8VTA2NDQ+PFUwNjIzPiI7IjxVMDY0ND48VUZFODQ+IjsiPFVGRUY4PjxVRkVGOD4iO0lHTk9SRQorPFVGRUY5PgkiPFUwNjQ0PjxVMDYyNT4iOyI8VTA2NDQ+PFUwNjI1PiI7IjxVRkVGOT48VUZFRjk+IjtJR05PUkUKKzxVRkVGQT4JIjxVMDY0ND48VTA2MjU+IjsiPFUwNjQ0PjxVRkU4OD4iOyI8VUZFRkE+PFVGRUZBPiI7SUdOT1JFCis8VUZFRkI+CSI8VTA2NDQ+PFUwNjI3PiI7IjxVMDY0ND48VUZFOEQ+IjsiPFVGRUZCPjxVRkVGQj4iO0lHTk9SRQorPFVGRUZDPgkiPFUwNjQ0PjxVMDYyNz4iOyI8VTA2NDQ+PFVGRThFPiI7IjxVRkVGQz48VUZFRkM+IjtJR05PUkUKKworJSBrYXRha2FuYS9oaXJhZ2FuYSBzb3J0aW5nCislIGJhc2UgaXMga2F0YWthbmEsIGFzIHRoaXMgaXMgcHJlc2VudCBpbiBtb3N0IGNoYXJzZXRzCislIG5vcm1hbCBiZWZvcmUgdm9pY2VkIGJlZm9yZSBzZW1pLXZvaWNlZAorJSBzbWFsbCB2b2NhbHMgYmVmb3JlIG5vcm1hbCB2b2NhbHMKKyUga2F0YWthbmEgYmVmb3JlIGhpcmFnYW5hCisKKzxVMzBBMT4JPFUzMEExPjs8VTMwQTE+O0lHTk9SRTtJR05PUkUKKzxVMzA0MT4JPFUzMEExPjs8VTMwNDE+O0lHTk9SRTtJR05PUkUKKzxVMzBBMj4JPFUzMEExPjs8VTMwQTI+O0lHTk9SRTtJR05PUkUKKzxVMzA0Mj4JPFUzMEExPjs8VTMwNDI+O0lHTk9SRTtJR05PUkUKKzxVMzBBMz4JPFUzMEEzPjs8VTMwQTM+O0lHTk9SRTtJR05PUkUKKzxVMzA0Mz4JPFUzMEEzPjs8VTMwNDM+O0lHTk9SRTtJR05PUkUKKzxVMzBBND4JPFUzMEEzPjs8VTMwQTQ+O0lHTk9SRTtJR05PUkUKKzxVMzA0ND4JPFUzMEEzPjs8VTMwNDQ+O0lHTk9SRTtJR05PUkUKKzxVMzBBNT4JPFUzMEE1Pjs8VTMwQTU+O0lHTk9SRTtJR05PUkUKKzxVMzA0NT4JPFUzMEE1Pjs8VTMwNDU+O0lHTk9SRTtJR05PUkUKKzxVMzBBNj4JPFUzMEE1Pjs8VTMwQTY+O0lHTk9SRTtJR05PUkUKKzxVMzA0Nj4JPFUzMEE1Pjs8VTMwNDY+O0lHTk9SRTtJR05PUkUKKzxVMzBGND4JPFUzMEE1Pjs8VTMwRjQ+O0lHTk9SRTtJR05PUkUKKzxVMzBBNz4JPFUzMEE3Pjs8VTMwQTc+O0lHTk9SRTtJR05PUkUKKzxVMzA0Nz4JPFUzMEE3Pjs8VTMwNDc+O0lHTk9SRTtJR05PUkUKKzxVMzBBOD4JPFUzMEE3Pjs8VTMwQTg+O0lHTk9SRTtJR05PUkUKKzxVMzA0OD4JPFUzMEE3Pjs8VTMwNDg+O0lHTk9SRTtJR05PUkUKKzxVMzBBOT4JPFUzMEE5Pjs8VTMwQTk+O0lHTk9SRTtJR05PUkUKKzxVMzA0OT4JPFUzMEE5Pjs8VTMwNDk+O0lHTk9SRTtJR05PUkUKKzxVMzBBQT4JPFUzMEE5Pjs8VTMwQUE+O0lHTk9SRTtJR05PUkUKKzxVMzA0QT4JPFUzMEE5Pjs8VTMwNEE+O0lHTk9SRTtJR05PUkUKKzxVMzBGNT4JPFUzMEY1Pjs8VTMwRjU+O0lHTk9SRTtJR05PUkUKKzxVMzBBQj4JPFUzMEY1Pjs8VTMwQUI+O0lHTk9SRTtJR05PUkUKKzxVMzA0Qj4JPFUzMEY1Pjs8VTMwNEI+O0lHTk9SRTtJR05PUkUKKzxVMzBBQz4JPFUzMEY1Pjs8VTMwQUM+O0lHTk9SRTtJR05PUkUKKzxVMzA0Qz4JPFUzMEY1Pjs8VTMwNEM+O0lHTk9SRTtJR05PUkUKKzxVMzBBRD4JPFUzMEFEPjs8VTMwQUQ+O0lHTk9SRTtJR05PUkUKKzxVMzA0RD4JPFUzMEFEPjs8VTMwNEQ+O0lHTk9SRTtJR05PUkUKKzxVMzBBRT4JPFUzMEFEPjs8VTMwQUU+O0lHTk9SRTtJR05PUkUKKzxVMzA0RT4JPFUzMEFEPjs8VTMwNEU+O0lHTk9SRTtJR05PUkUKKzxVMzBBRj4JPFUzMEFGPjs8VTMwQUY+O0lHTk9SRTtJR05PUkUKKzxVMzA0Rj4JPFUzMEFGPjs8VTMwNEY+O0lHTk9SRTtJR05PUkUKKzxVMzBCMD4JPFUzMEFGPjs8VTMwQjA+O0lHTk9SRTtJR05PUkUKKzxVMzA1MD4JPFUzMEFGPjs8VTMwNTA+O0lHTk9SRTtJR05PUkUKKzxVMzBGNj4JPFUzMEY2Pjs8VTMwRjY+O0lHTk9SRTtJR05PUkUKKzxVMzBCMT4JPFUzMEY2Pjs8VTMwQjE+O0lHTk9SRTtJR05PUkUKKzxVMzA1MT4JPFUzMEY2Pjs8VTMwNTE+O0lHTk9SRTtJR05PUkUKKzxVMzBCMj4JPFUzMEY2Pjs8VTMwQjI+O0lHTk9SRTtJR05PUkUKKzxVMzA1Mj4JPFUzMEY2Pjs8VTMwNTI+O0lHTk9SRTtJR05PUkUKKzxVMzBCMz4JPFUzMEIzPjs8VTMwQjM+O0lHTk9SRTtJR05PUkUKKzxVMzA1Mz4JPFUzMEIzPjs8VTMwNTM+O0lHTk9SRTtJR05PUkUKKzxVMzBCND4JPFUzMEIzPjs8VTMwQjQ+O0lHTk9SRTtJR05PUkUKKzxVMzA1ND4JPFUzMEIzPjs8VTMwNTQ+O0lHTk9SRTtJR05PUkUKKzxVMzBCNT4JPFUzMEI1Pjs8VTMwQjU+O0lHTk9SRTtJR05PUkUKKzxVMzA1NT4JPFUzMEI1Pjs8VTMwNTU+O0lHTk9SRTtJR05PUkUKKzxVMzBCNj4JPFUzMEI1Pjs8VTMwQjY+O0lHTk9SRTtJR05PUkUKKzxVMzA1Nj4JPFUzMEI1Pjs8VTMwNTY+O0lHTk9SRTtJR05PUkUKKzxVMzBCNz4JPFUzMEI3Pjs8VTMwQjc+O0lHTk9SRTtJR05PUkUKKzxVMzA1Nz4JPFUzMEI3Pjs8VTMwNTc+O0lHTk9SRTtJR05PUkUKKzxVMzBCOD4JPFUzMEI3Pjs8VTMwQjg+O0lHTk9SRTtJR05PUkUKKzxVMzA1OD4JPFUzMEI3Pjs8VTMwNTg+O0lHTk9SRTtJR05PUkUKKzxVMzBCOT4JPFUzMEI5Pjs8VTMwQjk+O0lHTk9SRTtJR05PUkUKKzxVMzA1OT4JPFUzMEI5Pjs8VTMwNTk+O0lHTk9SRTtJR05PUkUKKzxVMzBCQT4JPFUzMEI5Pjs8VTMwQkE+O0lHTk9SRTtJR05PUkUKKzxVMzA1QT4JPFUzMEI5Pjs8VTMwNUE+O0lHTk9SRTtJR05PUkUKKzxVMzBCQj4JPFUzMEJCPjs8VTMwQkI+O0lHTk9SRTtJR05PUkUKKzxVMzA1Qj4JPFUzMEJCPjs8VTMwNUI+O0lHTk9SRTtJR05PUkUKKzxVMzBCQz4JPFUzMEJCPjs8VTMwQkM+O0lHTk9SRTtJR05PUkUKKzxVMzA1Qz4JPFUzMEJCPjs8VTMwNUM+O0lHTk9SRTtJR05PUkUKKzxVMzBCRD4JPFUzMEJEPjs8VTMwQkQ+O0lHTk9SRTtJR05PUkUKKzxVMzA1RD4JPFUzMEJEPjs8VTMwNUQ+O0lHTk9SRTtJR05PUkUKKzxVMzBCRT4JPFUzMEJEPjs8VTMwQkU+O0lHTk9SRTtJR05PUkUKKzxVMzA1RT4JPFUzMEJEPjs8VTMwNUU+O0lHTk9SRTtJR05PUkUKKzxVMzBCRj4JPFUzMEJGPjs8VTMwQkY+O0lHTk9SRTtJR05PUkUKKzxVMzA1Rj4JPFUzMEJGPjs8VTMwNUY+O0lHTk9SRTtJR05PUkUKKzxVMzBDMD4JPFUzMEJGPjs8VTMwQzA+O0lHTk9SRTtJR05PUkUKKzxVMzA2MD4JPFUzMEJGPjs8VTMwNjA+O0lHTk9SRTtJR05PUkUKKzxVMzBDMT4JPFUzMEMxPjs8VTMwQzE+O0lHTk9SRTtJR05PUkUKKzxVMzA2MT4JPFUzMEMxPjs8VTMwNjE+O0lHTk9SRTtJR05PUkUKKzxVMzBDMj4JPFUzMEMxPjs8VTMwQzI+O0lHTk9SRTtJR05PUkUKKzxVMzA2Mj4JPFUzMEMxPjs8VTMwNjI+O0lHTk9SRTtJR05PUkUKKzxVMzBDMz4JPFUzMEMzPjs8VTMwQzM+O0lHTk9SRTtJR05PUkUKKzxVMzA2Mz4JPFUzMEMzPjs8VTMwNjM+O0lHTk9SRTtJR05PUkUKKzxVMzBDND4JPFUzMEMzPjs8VTMwQzQ+O0lHTk9SRTtJR05PUkUKKzxVMzA2ND4JPFUzMEMzPjs8VTMwNjQ+O0lHTk9SRTtJR05PUkUKKzxVMzBDNT4JPFUzMEMzPjs8VTMwQzU+O0lHTk9SRTtJR05PUkUKKzxVMzA2NT4JPFUzMEMzPjs8VTMwNjU+O0lHTk9SRTtJR05PUkUKKzxVMzBDNj4JPFUzMEM2Pjs8VTMwQzY+O0lHTk9SRTtJR05PUkUKKzxVMzA2Nj4JPFUzMEM2Pjs8VTMwNjY+O0lHTk9SRTtJR05PUkUKKzxVMzBDNz4JPFUzMEM2Pjs8VTMwQzc+O0lHTk9SRTtJR05PUkUKKzxVMzA2Nz4JPFUzMEM2Pjs8VTMwNjc+O0lHTk9SRTtJR05PUkUKKzxVMzBDOD4JPFUzMEM4Pjs8VTMwQzg+O0lHTk9SRTtJR05PUkUKKzxVMzA2OD4JPFUzMEM4Pjs8VTMwNjg+O0lHTk9SRTtJR05PUkUKKzxVMzBDOT4JPFUzMEM4Pjs8VTMwQzk+O0lHTk9SRTtJR05PUkUKKzxVMzA2OT4JPFUzMEM4Pjs8VTMwNjk+O0lHTk9SRTtJR05PUkUKKzxVMzBDQT4JPFUzMENBPjs8VTMwQ0E+O0lHTk9SRTtJR05PUkUKKzxVMzA2QT4JPFUzMENBPjs8VTMwNkE+O0lHTk9SRTtJR05PUkUKKzxVMzBDQj4JPFUzMENCPjs8VTMwQ0I+O0lHTk9SRTtJR05PUkUKKzxVMzA2Qj4JPFUzMENCPjs8VTMwNkI+O0lHTk9SRTtJR05PUkUKKzxVMzBDQz4JPFUzMENDPjs8VTMwQ0M+O0lHTk9SRTtJR05PUkUKKzxVMzA2Qz4JPFUzMENDPjs8VTMwNkM+O0lHTk9SRTtJR05PUkUKKzxVMzBDRD4JPFUzMENEPjs8VTMwQ0Q+O0lHTk9SRTtJR05PUkUKKzxVMzA2RD4JPFUzMENEPjs8VTMwNkQ+O0lHTk9SRTtJR05PUkUKKzxVMzBDRT4JPFUzMENFPjs8VTMwQ0U+O0lHTk9SRTtJR05PUkUKKzxVMzA2RT4JPFUzMENFPjs8VTMwNkU+O0lHTk9SRTtJR05PUkUKKzxVMzBDRj4JPFUzMENGPjs8VTMwQ0Y+O0lHTk9SRTtJR05PUkUKKzxVMzA2Rj4JPFUzMENGPjs8VTMwNkY+O0lHTk9SRTtJR05PUkUKKzxVMzBEMD4JPFUzMENGPjs8VTMwRDA+O0lHTk9SRTtJR05PUkUKKzxVMzA3MD4JPFUzMENGPjs8VTMwNzA+O0lHTk9SRTtJR05PUkUKKzxVMzBEMT4JPFUzMENGPjs8VTMwRDE+O0lHTk9SRTtJR05PUkUKKzxVMzA3MT4JPFUzMENGPjs8VTMwNzE+O0lHTk9SRTtJR05PUkUKKzxVMzBEMj4JPFUzMEQyPjs8VTMwRDI+O0lHTk9SRTtJR05PUkUKKzxVMzA3Mj4JPFUzMEQyPjs8VTMwNzI+O0lHTk9SRTtJR05PUkUKKzxVMzBEMz4JPFUzMEQyPjs8VTMwRDM+O0lHTk9SRTtJR05PUkUKKzxVMzA3Mz4JPFUzMEQyPjs8VTMwNzM+O0lHTk9SRTtJR05PUkUKKzxVMzBEND4JPFUzMEQyPjs8VTMwRDQ+O0lHTk9SRTtJR05PUkUKKzxVMzA3ND4JPFUzMEQyPjs8VTMwNzQ+O0lHTk9SRTtJR05PUkUKKzxVMzBENT4JPFUzMEQ1Pjs8VTMwRDU+O0lHTk9SRTtJR05PUkUKKzxVMzA3NT4JPFUzMEQ1Pjs8VTMwNzU+O0lHTk9SRTtJR05PUkUKKzxVMzBENj4JPFUzMEQ1Pjs8VTMwRDY+O0lHTk9SRTtJR05PUkUKKzxVMzA3Nj4JPFUzMEQ1Pjs8VTMwNzY+O0lHTk9SRTtJR05PUkUKKzxVMzBENz4JPFUzMEQ1Pjs8VTMwRDc+O0lHTk9SRTtJR05PUkUKKzxVMzA3Nz4JPFUzMEQ1Pjs8VTMwNzc+O0lHTk9SRTtJR05PUkUKKzxVMzBEOD4JPFUzMEQ4Pjs8VTMwRDg+O0lHTk9SRTtJR05PUkUKKzxVMzA3OD4JPFUzMEQ4Pjs8VTMwNzg+O0lHTk9SRTtJR05PUkUKKzxVMzBEOT4JPFUzMEQ4Pjs8VTMwRDk+O0lHTk9SRTtJR05PUkUKKzxVMzA3OT4JPFUzMEQ4Pjs8VTMwNzk+O0lHTk9SRTtJR05PUkUKKzxVMzBEQT4JPFUzMEQ4Pjs8VTMwREE+O0lHTk9SRTtJR05PUkUKKzxVMzA3QT4JPFUzMEQ4Pjs8VTMwN0E+O0lHTk9SRTtJR05PUkUKKzxVMzBEQj4JPFUzMERCPjs8VTMwREI+O0lHTk9SRTtJR05PUkUKKzxVMzA3Qj4JPFUzMERCPjs8VTMwN0I+O0lHTk9SRTtJR05PUkUKKzxVMzBEQz4JPFUzMERCPjs8VTMwREM+O0lHTk9SRTtJR05PUkUKKzxVMzA3Qz4JPFUzMERCPjs8VTMwN0M+O0lHTk9SRTtJR05PUkUKKzxVMzBERD4JPFUzMERCPjs8VTMwREQ+O0lHTk9SRTtJR05PUkUKKzxVMzA3RD4JPFUzMERCPjs8VTMwN0Q+O0lHTk9SRTtJR05PUkUKKzxVMzBERT4JPFUzMERFPjs8VTMwREU+O0lHTk9SRTtJR05PUkUKKzxVMzA3RT4JPFUzMERFPjs8VTMwN0U+O0lHTk9SRTtJR05PUkUKKzxVMzBERj4JPFUzMERGPjs8VTMwREY+O0lHTk9SRTtJR05PUkUKKzxVMzA3Rj4JPFUzMERGPjs8VTMwN0Y+O0lHTk9SRTtJR05PUkUKKzxVMzBFMD4JPFUzMEUwPjs8VTMwRTA+O0lHTk9SRTtJR05PUkUKKzxVMzA4MD4JPFUzMEUwPjs8VTMwODA+O0lHTk9SRTtJR05PUkUKKzxVMzBFMT4JPFUzMEUxPjs8VTMwRTE+O0lHTk9SRTtJR05PUkUKKzxVMzA4MT4JPFUzMEUxPjs8VTMwODE+O0lHTk9SRTtJR05PUkUKKzxVMzBFMj4JPFUzMEUyPjs8VTMwRTI+O0lHTk9SRTtJR05PUkUKKzxVMzA4Mj4JPFUzMEUyPjs8VTMwODI+O0lHTk9SRTtJR05PUkUKKzxVMzBFMz4JPFUzMEUzPjs8VTMwRTM+O0lHTk9SRTtJR05PUkUKKzxVMzA4Mz4JPFUzMEUzPjs8VTMwODM+O0lHTk9SRTtJR05PUkUKKzxVMzBFND4JPFUzMEUzPjs8VTMwRTQ+O0lHTk9SRTtJR05PUkUKKzxVMzA4ND4JPFUzMEUzPjs8VTMwODQ+O0lHTk9SRTtJR05PUkUKKzxVMzBFNT4JPFUzMEU1Pjs8VTMwRTU+O0lHTk9SRTtJR05PUkUKKzxVMzA4NT4JPFUzMEU1Pjs8VTMwODU+O0lHTk9SRTtJR05PUkUKKzxVMzBFNj4JPFUzMEU1Pjs8VTMwRTY+O0lHTk9SRTtJR05PUkUKKzxVMzA4Nj4JPFUzMEU1Pjs8VTMwODY+O0lHTk9SRTtJR05PUkUKKzxVMzBFNz4JPFUzMEU3Pjs8VTMwRTc+O0lHTk9SRTtJR05PUkUKKzxVMzA4Nz4JPFUzMEU3Pjs8VTMwODc+O0lHTk9SRTtJR05PUkUKKzxVMzBFOD4JPFUzMEU3Pjs8VTMwRTg+O0lHTk9SRTtJR05PUkUKKzxVMzA4OD4JPFUzMEU3Pjs8VTMwODg+O0lHTk9SRTtJR05PUkUKKzxVMzBFOT4JPFUzMEU5Pjs8VTMwRTk+O0lHTk9SRTtJR05PUkUKKzxVMzA4OT4JPFUzMEU5Pjs8VTMwODk+O0lHTk9SRTtJR05PUkUKKzxVMzBFQT4JPFUzMEVBPjs8VTMwRUE+O0lHTk9SRTtJR05PUkUKKzxVMzA4QT4JPFUzMEVBPjs8VTMwOEE+O0lHTk9SRTtJR05PUkUKKzxVMzBFQj4JPFUzMEVCPjs8VTMwRUI+O0lHTk9SRTtJR05PUkUKKzxVMzA4Qj4JPFUzMEVCPjs8VTMwOEI+O0lHTk9SRTtJR05PUkUKKzxVMzBFQz4JPFUzMEVDPjs8VTMwRUM+O0lHTk9SRTtJR05PUkUKKzxVMzA4Qz4JPFUzMEVDPjs8VTMwOEM+O0lHTk9SRTtJR05PUkUKKzxVMzBFRD4JPFUzMEVEPjs8VTMwRUQ+O0lHTk9SRTtJR05PUkUKKzxVMzA4RD4JPFUzMEVEPjs8VTMwOEQ+O0lHTk9SRTtJR05PUkUKKzxVMzBFRT4JPFUzMEVFPjs8VTMwRUU+O0lHTk9SRTtJR05PUkUKKzxVMzA4RT4JPFUzMEVFPjs8VTMwOEU+O0lHTk9SRTtJR05PUkUKKzxVMzBFRj4JPFUzMEVFPjs8VTMwRUY+O0lHTk9SRTtJR05PUkUKKzxVMzA4Rj4JPFUzMEVFPjs8VTMwOEY+O0lHTk9SRTtJR05PUkUKKzxVMzBGMD4JPFUzMEYwPjs8VTMwRjA+O0lHTk9SRTtJR05PUkUKKzxVMzA5MD4JPFUzMEYwPjs8VTMwOTA+O0lHTk9SRTtJR05PUkUKKzxVMzBGMT4JPFUzMEYxPjs8VTMwRjE+O0lHTk9SRTtJR05PUkUKKzxVMzA5MT4JPFUzMEYxPjs8VTMwOTE+O0lHTk9SRTtJR05PUkUKKzxVMzBGMj4JPFUzMEYyPjs8VTMwRjI+O0lHTk9SRTtJR05PUkUKKzxVMzA5Mj4JPFUzMEYyPjs8VTMwOTI+O0lHTk9SRTtJR05PUkUKKzxVMzBGMz4JPFUzMEYzPjs8VTMwRjM+O0lHTk9SRTtJR05PUkUKKzxVMzA5Mz4JPFUzMEYzPjs8VTMwOTM+O0lHTk9SRTtJR05PUkUKKworb3JkZXJfZW5kCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAiPFUwMDRDPjxVMDA1Nj48VTAwNEM+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICI8VTAwNEM+PFUwMDczPiIKK21vbl9kZWNpbWFsX3BvaW50ICI8VTAwMkM+IgorbW9uX3Rob3VzYW5kc19zZXAgIjxVMDBBMD4iCittb25fZ3JvdXBpbmcgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICIiCituZWdhdGl2ZV9zaWduICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgIDIKK2ZyYWNfZGlnaXRzICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgIDEKK25fY3NfcHJlY2VkZXMgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgIDMKK25fc2lnbl9wb3NuICAgICAgIDMKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICI8VTAwQTA+IgorZ3JvdXBpbmcgICAgICAgICAgMzszCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICAiPFUwMDUzPjxVMDA3Nj4iOyI8VTAwNTA+PFUwMEEwPiI7LworICAgICAgICAgIjxVMDA0Rj48VTAwQTA+IjsiPFUwMDU0PjxVMDBBMD4iOy8KKyAgICAgICAgICI8VTAwNDM+PFUwMEEwPiI7IjxVMDA1MD48VTAwNkI+IjsvCisgICAgICAgICAiPFUwMDUzPjxVMDBBMD4iCitkYXkgICAgICAiPFUwMDczPjxVMDA3Nj48VTAxMTM+PFUwMDc0PjxVMDA2ND48VTAwNjk+PFUwMDY1PjxVMDA2RT48VTAwNjE+IjsvCisgICAgICAgICAiPFUwMDcwPjxVMDA2OT48VTAwNzI+PFUwMDZEPjxVMDA2ND48VTAwNjk+PFUwMDY1PjxVMDA2RT48VTAwNjE+IjsvCisgICAgICAgICAiPFUwMDZGPjxVMDA3ND48VTAwNzI+PFUwMDY0PjxVMDA2OT48VTAwNjU+PFUwMDZFPjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNzQ+PFUwMDcyPjxVMDA2NT48VTAxNjE+PFUwMDY0PjxVMDA2OT48VTAwNjU+PFUwMDZFPjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNjM+PFUwMDY1PjxVMDA3ND48VTAwNzU+PFUwMDcyPjxVMDA3ND48VTAwNjQ+PFUwMDY5PjxVMDA2NT48VTAwNkU+PFUwMDYxPiI7LworICAgICAgICAgIjxVMDA3MD48VTAwNjk+PFUwMDY1PjxVMDA2Qj48VTAwNzQ+PFUwMDY0PjxVMDA2OT48VTAwNjU+PFUwMDZFPjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3Mz48VTAwNzQ+PFUwMDY0PjxVMDA2OT48VTAwNjU+PFUwMDZFPjxVMDA2MT4iCithYm1vbiAgICAiPFUwMDZBPjxVMDA2MT48VTAwNkU+IjsiPFUwMDY2PjxVMDA2NT48VTAwNjI+IjsvCisgICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsiPFUwMDYxPjxVMDA3MD48VTAwNzI+IjsvCisgICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNjk+IjsiPFUwMDZBPjxVMDE2Qj48VTAwNkU+IjsvCisgICAgICAgICAiPFUwMDZBPjxVMDE2Qj48VTAwNkM+IjsiPFUwMDYxPjxVMDA3NT48VTAwNjc+IjsvCisgICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNzA+IjsiPFUwMDZGPjxVMDA2Qj48VTAwNzQ+IjsvCisgICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDY0PjxVMDA2NT48VTAwNjM+IgorbW9uICAgICAgIjxVMDA2QT48VTAwNjE+PFUwMDZFPjxVMDA3Nj48VTAxMDE+PFUwMDcyPjxVMDA2OT48VTAwNzM+IjsvCisgICAgICAgICAiPFUwMDY2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA3NT48VTAxMDE+PFUwMDcyPjxVMDA2OT48VTAwNzM+IjsvCisgICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMDc0PjxVMDA3Mz4iOy8KKyAgICAgICAgICI8VTAwNjE+PFUwMDcwPjxVMDA3Mj48VTAxMkI+PFUwMDZDPjxVMDA2OT48VTAwNzM+IjsvCisgICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNjk+PFUwMDZBPjxVMDA3Mz4iOy8KKyAgICAgICAgICI8VTAwNkE+PFUwMTZCPjxVMDA2RT48VTAwNjk+PFUwMDZBPjxVMDA3Mz4iOy8KKyAgICAgICAgICI8VTAwNkE+PFUwMTZCPjxVMDA2Qz48VTAwNjk+PFUwMDZBPjxVMDA3Mz4iOy8KKyAgICAgICAgICI8VTAwNjE+PFUwMDc1PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND48VTAwNzM+IjsvCisgICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNzA+PFUwMDc0PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjk+PFUwMDczPiI7LworICAgICAgICAgIjxVMDA2Rj48VTAwNkI+PFUwMDc0PjxVMDA2Rj48VTAwNjI+PFUwMDcyPjxVMDA2OT48VTAwNzM+IjsvCisgICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2OT48VTAwNzM+IjsvCisgICAgICAgICAiPFUwMDY0PjxVMDA2NT48VTAwNjM+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2OT48VTAwNzM+IgorZF90X2ZtdCAgIiVBPFUwMDJDPiAlWTxVMDAyRT4gPFUwMDY3PjxVMDA2MT48VTAwNjQ+PFUwMDYxPiAlZTxVMDAyRT4gJUI8VTAwMkM+IDxVMDA3MD48VTAwNkM+PFUwMDZCPjxVMDA3Mz48VTAwNzQ+PFUwMDJFPiAlSCA8VTAwNzU+PFUwMDZFPiAlTSIKK2RfZm10ICAgICI8VTAwMjU+PFUwMDU5PjxVMDAyRT48VTAwMjU+PFUwMDZEPjxVMDAyRT48VTAwMjU+PFUwMDY0PjxVMDAyRT4iCit0X2ZtdCAgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICAiIjsiIgordF9mbXRfYW1wbSAgIiIKK2RhdGVfZm10ICAgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCit5ZXNleHByICAgICI8VTAwNUU+PFUwMDVCPjxVMDA0QT48VTAwNkE+PFUwMDU5PjxVMDA3OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA0RT48VTAwNkU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCislIEZJWE1FCitoZWlnaHQgICAyOTcKKyUgRklYTUUKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzM+PFUwMDM3PjxVMDAzMT4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCislIEZJWE1FCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICI8VTAwNEM+PFUwMDU2PiIKK2NvdW50cnlfYWIzICI8VTAwNEM+PFUwMDU2PjxVMDA0MT4iCitjb3VudHJ5X251bSA0MjgKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9tYWlfSU4gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9tYWlfSU4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJiZDEyNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL21haV9JTgpAQCAtMCwwICsxLDg0IEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKyUgTWFpdGhpbGkgbGFuZ3VhZ2UgbG9jYWxlIGZvciBJbmRpYS4KKyUgQ29udHJpYnV0ZWQgYnkgUmFqZXNoIFJhbmphbiA8cmFqZXNoa2FqaGFAeWFob28uY29tPiBhbmQKKyUgU2FuZ2VldGEgS3VtYXJpIDxzYW5nZWV0YTA5QGdtYWlsLmNvbT4uCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJNYWl0aGlsaSBsYW5ndWFnZSBsb2NhbGUgZm9yIEluZGlhIgorc291cmNlICAgICAiTWFpdGhpbGkgQ29tcHV0aW5nIFJlc2VhcmNoIENlbnRlciwgUHVuZSwgSW5kaWEiCithZGRyZXNzICAgICJCLTMvMzAyLCBMdW5rYWQgRGFmZm9kaWxscywgVmltYW4gTmFnYXIsIFB1bmUsIEluZGlhIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAicmFqZXNoa2FqaGFAeWFob28uY29tIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiTWFpdGhpbGkiCit0ZXJyaXRvcnkgICJJbmRpYSIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDYtMTEtMDEiCislCitjYXRlZ29yeSAgIm1haV9JTjoyMDA2IjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJtYWlfSU46MjAwNiI7TENfQ1RZUEUKK2NhdGVnb3J5ICAibWFpX0lOOjIwMDYiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAibWFpX0lOOjIwMDYiO0xDX1RJTUUKK2NhdGVnb3J5ICAibWFpX0lOOjIwMDYiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAibWFpX0lOOjIwMDYiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgIm1haV9JTjoyMDA2IjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJtYWlfSU46MjAwNiI7TENfUEFQRVIKK2NhdGVnb3J5ICAibWFpX0lOOjIwMDYiO0xDX05BTUUKK2NhdGVnb3J5ICAibWFpX0lOOjIwMDYiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAibWFpX0lOOjIwMDYiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImhpX0lOIgorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKK2NvcHkgImhpX0lOIgorRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKK2NvcHkgImhpX0lOIgorRU5EIExDX01PTkVUQVJZCisKKworTENfTlVNRVJJQworY29weSAiaGlfSU4iCitFTkQgTENfTlVNRVJJQworCisKK0xDX1RJTUUKK2NvcHkgImhpX0lOIgorRU5EIExDX1RJTUUKKworCitMQ19NRVNTQUdFUworY29weSAiaGlfSU4iCitFTkQgTENfTUVTU0FHRVMKKworCitMQ19QQVBFUgorY29weSAiaGlfSU4iCitFTkQgTENfUEFQRVIKKworCitMQ19OQU1FCitjb3B5ICJoaV9JTiIKK0VORCBMQ19OQU1FCisKKworTENfQUREUkVTUworY29weSAiaGlfSU4iCitFTkQgTENfQUREUkVTUworCisKK0xDX1RFTEVQSE9ORQorY29weSAiaGlfSU4iCitFTkQgTENfVEVMRVBIT05FCisKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgImhpX0lOIgorRU5EIExDX01FQVNVUkVNRU5UCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9tZ19NRyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL21nX01HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NmYyYzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9tZ19NRwpAQCAtMCwwICsxLDE4MSBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIE1hbGFnYXN5IExhbmd1YWdlIExvY2FsZSBmb3IgTWFkYWdhc2NhcgorJSBTb3VyY2U6IFRoZSBEZWJpYW4gUHJvamVjdCBtb2RpZmllZCBieSBodHRwOi8vbGludXhtZy5vcmcKKyUgQ29udGFjdDogQ2hyaXN0aWFuIFBlcnJpZXIKKyUgRW1haWw6IGJ1YnVsbGVAZGViaWFuLm9yZywgbGludXhAbGludXhtZy5vcmcKKyUgVGVsOiArMzMgLSAxMzA2OTkyMjIKKyUgTGFuZ3VhZ2U6IG1nCislIFRlcnJpdG9yeTogTUcKKyUgUmV2aXNpb246IDEuMAorJSBEYXRlOiAyMDA0LTA5LTA4CislIFVzZXJzOiBnZW5lcmFsCislIENoYXJzZXQ6IElTTy04ODU5LTE1CislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJNYWxhZ2FzeSBsb2NhbGUgZm9yIE1hZGFnYXNjYXIiCitzb3VyY2UgICAgICJUaGUgRGViaWFuIFByb2plY3QgbW9kaWZpZWQgYnkgR05VL0xpbnV4IE1hbGFnYXN5IgorYWRkcmVzcyAgICAiIgorY29udGFjdCAgICAiUmFkbyBSYW1hcm90YWZpa2EsRG8tUmlzaWthIFJBRklFRkVSQU5UU0lBUk9OSlkiCitlbWFpbCAgICAgICJyYWRvQGxpbnV4bWcub3JnLGRvdXJpeEBmcmVlLmZyIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiTWFsYWdhc3kiCit0ZXJyaXRvcnkgICJNYWRhZ2FzY2FyIgorcmV2aXNpb24gICAiMS4xIgorZGF0ZSAgICAgICAiMjAwNS0wMi0wMiIKKyUKK2NhdGVnb3J5ICAibWdfTUc6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAibWdfTUc6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAibWdfTUc6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJtZ19NRzoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgIm1nX01HOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAibWdfTUc6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAibWdfTUc6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAibWdfTUc6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAibWdfTUc6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJtZ19NRzoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgIm1nX01HOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CisKKyUgQWNjZW50cyBhcmUgc2ltcGx5IG9taXR0ZWQgaWYgdGhleSBjYW5ub3QgYmUgcmVwcmVzZW50ZWQuCitpbmNsdWRlICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCisKK3RyYW5zbGl0X2VuZAorCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEKK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfTUVTU0FHRVMKKyUgWWVzPUVueSAtLT4gRWVZeSBhcyBwb3NzaWJsZSBZZXMgY2hhcnMKKyUgTm89VHNpYSAtLT5UdE5uCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA2NT48VTAwNDU+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA3ND48VTAwNTQ+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgICAgICAgIjxVMDA0RD48VTAwNDc+PFUwMDQxPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgICAgICI8VTAwNDE+PFUwMDUyPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAgICAgIjxVMDAyQz4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgICAgICI8VTAwMjA+IgorbW9uX2dyb3VwaW5nICAgICAgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgICAgICAwCitwX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAgICAgMAorbl9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAgICAgMQorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgICAgIjxVMDAyQz4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICAgICIiCitncm91cGluZyAgICAgICAgICAgICAgICAgIDA7MAorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorJSBBYmJyZXYuIGRheXM6IGxhaCxsYXQsdGFsLGxhcixsYWssem9tLHNhYgorJSBBYmJyZXYuIGRheXM6IGxoZCxsdHMsIHRsdCxscmIsbGttLHpvbSxzYWIKK2FiZGF5ICAgIjxVMDA2Qz48VTAwNjg+PFUwMDY0PiI7IjxVMDA2Qz48VTAwNzQ+PFUwMDczPiI7LworICAgICAgICAiPFUwMDc0PjxVMDA2Qz48VTAwNzQ+IjsiPFUwMDZDPjxVMDA3Mj48VTAwNjI+IjsvCisgICAgICAgICI8VTAwNkM+PFUwMDZCPjxVMDA2RD4iOyI8VTAwN0E+PFUwMDZGPjxVMDA2RD4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjE+PFUwMDYyPiIKKyUgZGF5cyBpbiBNYWxhZ2FzeToKKyUgYWxhaGFkeSxhbGF0c2luYWlueSx0YWxhdGEsYWxhcm9iaWEsYWxha2FtaXN5LHpvbWEsYXNhYm90c3kKKyUgU3VuZGF5LCBNb25kYXkuLi4uCitkYXkgICAgICI8VTAwNjE+PFUwMDZDPjxVMDA2MT48VTAwNjg+PFUwMDYxPjxVMDA2ND48VTAwNzk+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDZDPjxVMDA2MT48VTAwNzQ+PFUwMDczPjxVMDA2OT48VTAwNkU+PFUwMDYxPjxVMDA2OT48VTAwNkU+PFUwMDc5PiI7LworICAgICAgICAiPFUwMDc0PjxVMDA2MT48VTAwNkM+PFUwMDYxPjxVMDA3ND48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDZDPjxVMDA2MT48VTAwNzI+PFUwMDZGPjxVMDA2Mj48VTAwNjk+PFUwMDYxPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA2Qz48VTAwNjE+PFUwMDZCPjxVMDA2MT48VTAwNkQ+PFUwMDY5PjxVMDA3Mz48VTAwNzk+IjsvCisgICAgICAgICI8VTAwN0E+PFUwMDZGPjxVMDA2RD48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDYxPjxVMDA2Mj48VTAwNkY+PFUwMDc0PjxVMDA3Mz48VTAwNzk+IgorJWphbm9hcnksZmVicm9hcnksbWFydHNhLGFwcmlseSxtZXksam9uYSxqb2xheSxhb2dvc2l0cmEsc2VwdGFtYnJhLG9rdG9icmEKKyVub3ZhbWJyYSxkZXNhbWJyYQorYWJtb24gICAiPFUwMDZBPjxVMDA2MT48VTAwNkU+IjsiPFUwMDY2PjxVMDA2NT48VTAwNjI+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNjE+PFUwMDcwPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjU+PFUwMDc5PiI7IjxVMDA2QT48VTAwNkY+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA2Rj48VTAwNkM+IjsiPFUwMDYxPjxVMDA2Rj48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD4iOyI8VTAwNkY+PFUwMDZCPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PiI7IjxVMDA2ND48VTAwNjU+PFUwMDczPiIKK21vbiAgICAgIjxVMDA2QT48VTAwNjE+PFUwMDZFPjxVMDA2Rj48VTAwNjE+PFUwMDcyPjxVMDA3OT4iOy8KKyAgICAgICAgIjxVMDA2Nj48VTAwNjU+PFUwMDYyPjxVMDA3Mj48VTAwNkY+PFUwMDYxPjxVMDA3Mj48VTAwNzk+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNzQ+PFUwMDczPjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNzA+PFUwMDcyPjxVMDA2OT48VTAwNkM+PFUwMDc5PiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2NT48VTAwNzk+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDZGPjxVMDA2RT48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDZGPjxVMDA2Qz48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAiPFUwMDYxPjxVMDA2Rj48VTAwNjc+PFUwMDZGPjxVMDA3Mz48VTAwNjk+PFUwMDc0PjxVMDA3Mj48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDYxPjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA2Rj48VTAwNkI+PFUwMDc0PjxVMDA2Rj48VTAwNjI+PFUwMDcyPjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PjxVMDA2MT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNjQ+PFUwMDY1PjxVMDA3Mz48VTAwNjE+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDYxPiIKKyUgJWEgJWQgJWIgJVkgJVQgJVoKK2RfdF9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJSAlZC4lbS4lWQorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkU+PFUwMDI1PjxVMDA2RD48VTAwMkU+PFUwMDI1PjxVMDA1OT4iCislICVUCit0X2ZtdCAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgIiI7IiIKK3RfZm10X2FtcG0gIiIKKyUgJWEgJWIgJWUgJUg6JU06JVMgJVogJVkKK2RhdGVfZm10ICAgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCitoZWlnaHQgICAyOTcKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQorJSArJUMgJWEgJWwKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCislICVhICVsCit0ZWxfZG9tX2ZtdCAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Qz4iCislIDI2MQoraW50X3ByZWZpeCAgICAgIjxVMDAzMj48VTAwMzY+PFUwMDMxPiIKKyUgMDAgCitpbnRfc2VsZWN0ICAgICAiPFUwMDMwPjxVMDAzMD4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorJSAlZCV0JWcldCVtJXQlZgorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworJSAlZiVOJWElTiVkJU4lYiVOJXMgJWggJWUgJXIlTiV6ICVUJU4lYyVOCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgIjxVMDA0RD48VTAwNDc+IgorY291bnRyeV9hYjMgIjxVMDA0RD48VTAwNDQ+PFUwMDQ3PiIKK2NvdW50cnlfbnVtIDQ1MAorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL21pX05aIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvbWlfTloKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FlYTY2NAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL21pX05aCkBAIC0wLDAgKzEsMTY5IEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgTWFvcmkgbGFuZ3VhZ2UgbG9jYWxlIGZvciBOZXcgWmVhbGFuZAorJSBTb3VyY2U6IEphbWVzIEdhc3NvbgorJSBDb250YWN0OiBKYW1lcyBHYXNzb24sIFBhYmxvIFNhcmF0eGFnYQorJSBFbWFpbDogPGphbWVzLmdhc3NvbkBjbGVhci5uZXQubno+LCA8cGFibG9AbWFuZHJha2Vzb2Z0LmNvbT4KKyUgTGFuZ3VhZ2U6IG1pCislIFRlcnJpdG9yeTogTloKKyUgUmV2aXNpb246IDAuMworJSBEYXRlOiAyMDAxLTAxLTI4CislIFVzZXJzOiBnZW5lcmFsCislIFJlcGVydG9pcmVtYXA6IG1uZW1vbmljLGRzCislIENoYXJzZXQ6IElTTy04ODU5LTEzCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAiTWFvcmkgbGFuZ3VhZ2UgbG9jYWxlIGZvciBOZXcgWmVhbGFuZCIKK3NvdXJjZSAiSmFtZXMgR2Fzc29uIgorYWRkcmVzcyAiIgorY29udGFjdCAiSmFtZXMgR2Fzc29uLCBQYWJsbyBTYXJhdHhhZ2EiCitlbWFpbCAiamFtZXMuZ2Fzc29uQGNsZWFyLm5ldC5ueiwgcGFibG9AbWFuZHJha2Vzb2Z0LmNvbSIKK3RlbCAiIgorZmF4ICIiCitsYW5ndWFnZSAiTWFvcmkiCit0ZXJyaXRvcnkgIk5ldyBaZWFsYW5kIgorcmV2aXNpb24gIjAuMyIKK2RhdGUgIjIwMDEtMDEtMjgiCisKK2NhdGVnb3J5IG1pX05aOjIwMDA7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5IG1pX05aOjIwMDA7TENfQ1RZUEUKK2NhdGVnb3J5IG1pX05aOjIwMDA7TENfQ09MTEFURQorY2F0ZWdvcnkgbWlfTlo6MjAwMDtMQ19USU1FCitjYXRlZ29yeSBtaV9OWjoyMDAwO0xDX05VTUVSSUMKK2NhdGVnb3J5IG1pX05aOjIwMDA7TENfUEFQRVIKK2NhdGVnb3J5IG1pX05aOjIwMDA7TENfVEVMRVBIT05FCitjYXRlZ29yeSBtaV9OWjoyMDAwO0xDX01FQVNVUkVNRU5UCitjYXRlZ29yeSBtaV9OWjoyMDAwO0xDX0FERFJFU1MKK2NhdGVnb3J5IG1pX05aOjIwMDA7TENfTUVTU0FHRVMKK2NhdGVnb3J5IG1pX05aOjIwMDA7TENfTU9ORVRBUlkKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJlbl9ESyIKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCitjb3B5ICJpc28xNDY1MV90MSIKKworJSUgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG5nIG8gcCBxIHIgcyB0IHUgdiB3IHdoIHggeSB6CisKK2NvbGxhdGluZy1zeW1ib2wgIDxuLWctbWk+Citjb2xsYXRpbmctZWxlbWVudCA8Ti1HPiBmcm9tICI8VTAwNEU+PFUwMDQ3PiIKK2NvbGxhdGluZy1lbGVtZW50IDxuLWc+IGZyb20gIjxVMDA2RT48VTAwNjc+IgorY29sbGF0aW5nLWVsZW1lbnQgPE4tZz4gZnJvbSAiPFUwMDRFPjxVMDA2Nz4iCitjb2xsYXRpbmctZWxlbWVudCA8bi1HPiBmcm9tICI8VTAwNkU+PFUwMDQ3PiIKK2NvbGxhdGluZy1zeW1ib2wgIDx3LWgtbWk+Citjb2xsYXRpbmctZWxlbWVudCA8Vy1IPiBmcm9tICI8VTAwNTc+PFUwMDQ4PiIKK2NvbGxhdGluZy1lbGVtZW50IDx3LWg+IGZyb20gIjxVMDA3Nz48VTAwNjg+IgorY29sbGF0aW5nLWVsZW1lbnQgPFctaD4gZnJvbSAiPFUwMDU3PjxVMDA2OD4iCitjb2xsYXRpbmctZWxlbWVudCA8dy1IPiBmcm9tICI8VTAwNzc+PFUwMDQ4PiIKKworY29sbGF0aW5nLXN5bWJvbCA8Q0FQLU1JTj4KK2NvbGxhdGluZy1zeW1ib2wgPE1JTi1DQVA+CisKK3Jlb3JkZXItYWZ0ZXIgPE1JTj4KKzxNSU4tQ0FQPgorcmVvcmRlci1hZnRlciA8Q0FQPgorPENBUC1NSU4+CisKK3Jlb3JkZXItYWZ0ZXIgPG4+Cis8bi1nLW1pPgorcmVvcmRlci1hZnRlciA8dz4KKzx3LWgtbWk+CisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDZFPgorPG4tZz4JPG4tZy1taT47PFBDVD47PE1JTj47SUdOT1JFCis8bi1HPgk8bi1nLW1pPjs8UENUPjs8TUlOLUNBUD47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0RT4KKzxOLUc+CTxuLWctbWk+OzxQQ1Q+OzxDQVA+O0lHTk9SRQorPE4tZz4JPG4tZy1taT47PFBDVD47PENBUC1NSU4+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA3Nz4KKzx3LWg+CTx3LWgtbWk+OzxQQ1Q+OzxNSU4+O0lHTk9SRQorPHctSD4JPHctaC1taT47PFBDVD47PE1JTi1DQVA+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNTc+Cis8Vy1IPgk8dy1oLW1pPjs8UENUPjs8Q0FQPjtJR05PUkUKKzxXLWg+CTx3LWgtbWk+OzxQQ1Q+OzxDQVAtTUlOPjtJR05PUkUKKworcmVvcmRlci1lbmQKKworRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKK2NvcHkgImVuX05aIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgImVuX05aIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorYWJkYXkgICAgIjxVMDA1ND48VTAwNjE+IjsiPFUwMDREPjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNTQ+PFUwMTZCPiI7IjxVMDA1Nz48VTAwNjU+IjsvCisgICAgICAgICAiPFUwMDU0PjxVMDEwMT48VTAwNjk+IjsiPFUwMDUwPjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNDg+PFUwMTAxPiIKK2RheSAgICAgICI8VTAwNTI+PFUwMTAxPjxVMDA3ND48VTAwNjE+PFUwMDcwPjxVMDA3NT4iOy8KKyAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA2RT48VTAwNjU+IjsvCisgICAgICAgICAiPFUwMDU0PjxVMDE2Qj48VTAwNzI+PFUwMDY1PjxVMDA2OT4iOy8KKyAgICAgICAgICI8VTAwNTc+PFUwMDY1PjxVMDA2RT48VTAwNjU+PFUwMDcyPjxVMDA2NT48VTAwNjk+IjsvCisgICAgICAgICAiPFUwMDU0PjxVMDEwMT48VTAwNjk+PFUwMDc0PjxVMDA2NT4iOy8KKyAgICAgICAgICI8VTAwNTA+PFUwMDYxPjxVMDA3Mj48VTAwNjE+PFUwMDY5PjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICAiPFUwMDQ4PjxVMDEwMT48VTAwNzQ+PFUwMDYxPjxVMDA3Mj48VTAwNjU+PFUwMDY5PiIKK2FibW9uICAgICI8VTAwNEI+PFUwMDZGPjxVMDA2OD48VTAwNjk+IjsiPFUwMDQ4PjxVMDA3NT48VTAwNjk+IjsvCisgICAgICAgICAiPFUwMDUwPjxVMDA2Rj48VTAwNzU+IjsiPFUwMDUwPjxVMDA2MT48VTAwNjU+IjsvCisgICAgICAgICAiPFUwMDQ4PjxVMDA2MT48VTAwNzI+PFUwMDYxPiI7IjxVMDA1MD48VTAwNjk+PFUwMDcwPjxVMDA2OT4iOy8KKyAgICAgICAgICI8VTAwNDg+PFUwMTREPjxVMDA2RT48VTAwNjc+PFUwMDZGPjxVMDA2OT4iOyI8VTAwNDg+PFUwMDY1PjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNjg+PFUwMDc1PiI7IjxVMDA1Nz48VTAwNjg+PFUwMDY5PjxVMDAyRD48VTAwNkU+PFUwMDc1PiI7LworICAgICAgICAgIjxVMDA1Nz48VTAwNjg+PFUwMDY5PjxVMDAyRD48VTAwNzI+PFUwMDYxPiI7IjxVMDA0OD48VTAwNjE+PFUwMDZCPjxVMDA2OT4iCittb24gICAgICAiPFUwMDRCPjxVMDA2Rj48VTAwNjg+PFUwMDY5PjxVMDAyRD48VTAwNzQ+PFUwMTAxPjxVMDA3ND48VTAwNjU+PFUwMDYxPiI7LworICAgICAgICAgIjxVMDA0OD48VTAwNzU+PFUwMDY5PjxVMDAyRD48VTAwNzQ+PFUwMDYxPjxVMDA2RT48VTAwNjc+PFUwMDc1PjxVMDA3Mj48VTAwNzU+IjsvCisgICAgICAgICAiPFUwMDUwPjxVMDA2Rj48VTAwNzU+PFUwMDc0PjxVMDE2Qj48VTAwMkQ+PFUwMDc0PjxVMDA2NT48VTAwMkQ+PFUwMDcyPjxVMDA2MT48VTAwNkU+PFUwMDY3PjxVMDA2OT4iOy8KKyAgICAgICAgICI8VTAwNTA+PFUwMDYxPjxVMDA2NT48VTAwNkU+PFUwMDY3PjxVMDA2MT48VTAwMkQ+PFUwMDc3PjxVMDA2OD48VTAxMDE+PFUwMDc3PjxVMDA2OD48VTAxMDE+IjsvCisgICAgICAgICAiPFUwMDQ4PjxVMDA2MT48VTAwNzI+PFUwMDYxPjxVMDA3ND48VTAwNzU+PFUwMDYxPiI7LworICAgICAgICAgIjxVMDA1MD48VTAwNjk+PFUwMDcwPjxVMDA2OT48VTAwNzI+PFUwMDY5PiI7LworICAgICAgICAgIjxVMDA0OD48VTAxNEQ+PFUwMDZFPjxVMDA2Nz48VTAwNkY+PFUwMDY5PjxVMDA2RT48VTAwNjc+PFUwMDZGPjxVMDA2OT4iOy8KKyAgICAgICAgICI8VTAwNDg+PFUwMDY1PjxVMDA3Mj48VTAwNjU+PFUwMDJEPjxVMDA3ND48VTAwNzU+PFUwMDcyPjxVMDA2OT48VTAwMkQ+PFUwMDZCPjxVMDE0RD48VTAwNkI+PFUwMTAxPiI7LworICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDY4PjxVMDA3NT48VTAwNzI+PFUwMDc1PiI7LworICAgICAgICAgIjxVMDA1Nz48VTAwNjg+PFUwMDY5PjxVMDA3Mj48VTAwNjk+PFUwMDZFPjxVMDA2Nz48VTAwNjE+PFUwMDJEPjxVMDEwMT48VTAwMkQ+PFUwMDZFPjxVMDA3NT48VTAwNkI+PFUwMDc1PiI7LworICAgICAgICAgIjxVMDA1Nz48VTAwNjg+PFUwMDY5PjxVMDA3Mj48VTAwNjk+PFUwMDZFPjxVMDA2Nz48VTAwNjE+PFUwMDJEPjxVMDEwMT48VTAwMkQ+PFUwMDcyPjxVMDA2MT48VTAwNkU+PFUwMDY3PjxVMDA2OT4iOy8KKyAgICAgICAgICI8VTAwNDg+PFUwMDYxPjxVMDA2Qj48VTAwNjk+PFUwMDY4PjxVMDA2NT48VTAwNjE+IgorZF90X2ZtdCAgICAgIjxVMDA1ND48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNDE+PFUwMDJDPjxVMDAyMD48VTAwNzQ+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwNkY+PFUwMDIwPjxVMDAyNT48VTAwNDI+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgICAgICIiOyIiCit0X2ZtdF9hbXBtICAiIgorRU5EIExDX1RJTUUKKworTENfTUVTU0FHRVMKK3llc3N0ciAgIjxVMDEwMT48VTAwNjU+Igorbm9zdHIgICAgIjxVMDA2Qj48VTAxMDE+PFUwMDZGPjxVMDA3Mj48VTAwNjU+IgoreWVzZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDMxPjxVMDA3OT48VTAwNTk+PFUwMTAxPjxVMDEwMD48VTAwRTQ+PFUwMEM0PjxVMDA2MT48VTAwNDE+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAgIjxVMDA1RT48VTAwNUI+PFUwMDMwPjxVMDA2RT48VTAwNEU+PFUwMDZCPjxVMDA0Qj48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfUEFQRVIKK2NvcHkgImVuX05aIgorRU5EIExDX1BBUEVSCisKK0xDX01FQVNVUkVNRU5UCittZWFzdXJlbWVudCAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorJSBGSVhNRQorY29weSAiZW5fTloiCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCislIEZJWE1FCitjb3B5ICJlbl9OWiIKK0VORCBMQ19BRERSRVNTCisKK0xDX1RFTEVQSE9ORQorJSBGSVhNRQorY29weSAiZW5fTloiCitFTkQgTENfVEVMRVBIT05FCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ta19NSyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL21rX01LCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNTdiNDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ta19NSwpAQCAtMCwwICsxLDE3MCBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyIC8KKyUgTWFjZWRvbmlhbiBsYW5ndWFnZSBsb2NhbGUgZm9yIE1hY2Vkb25pYQorJSBEYW1qYW4gR2VvcmdpZXZza2kgeyBnZGFtamFuICUlIGdtYWlsLmNvbSB9CislIFJldmlzaW9uOiAyLjIgKDIwMDYtMDktMTIpCislIENoYXJzZXRzOiBVVEYtOCwgSVNPLTg4NTktNSwgQ1AxMjUxCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJNYWNlZG9uaWFuIGxvY2FsZSBmb3IgTWFjZWRvbmlhIgorc291cmNlICAgICAiIgorYWRkcmVzcyAgICAiIgorY29udGFjdCAgICAiRGFtamFuIEdlb3JnaWV2c2tpIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIk1hY2Vkb25pYW4iCit0ZXJyaXRvcnkgICJNYWNlZG9uaWEiCityZXZpc2lvbiAgICIyLjIiCitkYXRlICAgICAgICIyMDA2LTA5LTEyIgorJQorY2F0ZWdvcnkgICJta19NSzoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJta19NSzoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJta19NSzoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgIm1rX01LOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAibWtfTUs6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJta19NSzoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJta19NSzoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJta19NSzoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJta19NSzoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgIm1rX01LOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAibWtfTUs6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DT0xMQVRFCitjb3B5ICJpc28xNDY1MV90MSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKK0xDX1RJTUUKK2FiZGF5ICI8VTA0M0Q+PFUwNDM1PjxVMDQzND4iOyI8VTA0M0Y+PFUwNDNFPjxVMDQzRD4iOy8KKyI8VTA0MzI+PFUwNDQyPjxVMDQzRT4iOyI8VTA0NDE+PFUwNDQwPjxVMDQzNT4iOy8KKyI8VTA0NDc+PFUwNDM1PjxVMDQ0Mj4iOyI8VTA0M0Y+PFUwNDM1PjxVMDQ0Mj4iOy8KKyI8VTA0NDE+PFUwNDMwPjxVMDQzMT4iCitkYXkgIjxVMDQzRD48VTA0MzU+PFUwNDM0PjxVMDQzNT48VTA0M0I+PFUwNDMwPiI7LworIjxVMDQzRj48VTA0M0U+PFUwNDNEPjxVMDQzNT48VTA0MzQ+PFUwNDM1PjxVMDQzQj48VTA0M0Q+PFUwNDM4PjxVMDQzQT4iOy8KKyI8VTA0MzI+PFUwNDQyPjxVMDQzRT48VTA0NDA+PFUwNDNEPjxVMDQzOD48VTA0M0E+IjsvCisiPFUwNDQxPjxVMDQ0MD48VTA0MzU+PFUwNDM0PjxVMDQzMD4iOy8KKyI8VTA0NDc+PFUwNDM1PjxVMDQ0Mj48VTA0MzI+PFUwNDQwPjxVMDQ0Mj48VTA0M0U+PFUwNDNBPiI7LworIjxVMDQzRj48VTA0MzU+PFUwNDQyPjxVMDQzRT48VTA0M0E+IjsvCisiPFUwNDQxPjxVMDQzMD48VTA0MzE+PFUwNDNFPjxVMDQ0Mj48VTA0MzA+IgorYWJtb24gIjxVMDQ1OD48VTA0MzA+PFUwNDNEPiI7IjxVMDQ0ND48VTA0MzU+PFUwNDMyPiI7LworIjxVMDQzQz48VTA0MzA+PFUwNDQwPiI7IjxVMDQzMD48VTA0M0Y+PFUwNDQwPiI7LworIjxVMDQzQz48VTA0MzA+PFUwNDU4PiI7IjxVMDQ1OD48VTA0NDM+PFUwNDNEPiI7LworIjxVMDQ1OD48VTA0NDM+PFUwNDNCPiI7IjxVMDQzMD48VTA0MzI+PFUwNDMzPiI7LworIjxVMDQ0MT48VTA0MzU+PFUwNDNGPiI7IjxVMDQzRT48VTA0M0E+PFUwNDQyPiI7LworIjxVMDQzRD48VTA0M0U+PFUwNDM1PiI7IjxVMDQzND48VTA0MzU+PFUwNDNBPiIKK21vbiAiPFUwNDU4PjxVMDQzMD48VTA0M0Q+PFUwNDQzPjxVMDQzMD48VTA0NDA+PFUwNDM4PiI7LworIjxVMDQ0ND48VTA0MzU+PFUwNDMyPjxVMDQ0MD48VTA0NDM+PFUwNDMwPjxVMDQ0MD48VTA0Mzg+IjsvCisiPFUwNDNDPjxVMDQzMD48VTA0NDA+PFUwNDQyPiI7LworIjxVMDQzMD48VTA0M0Y+PFUwNDQwPjxVMDQzOD48VTA0M0I+IjsvCisiPFUwNDNDPjxVMDQzMD48VTA0NTg+IjsvCisiPFUwNDU4PjxVMDQ0Mz48VTA0M0Q+PFUwNDM4PiI7LworIjxVMDQ1OD48VTA0NDM+PFUwNDNCPjxVMDQzOD4iOy8KKyI8VTA0MzA+PFUwNDMyPjxVMDQzMz48VTA0NDM+PFUwNDQxPjxVMDQ0Mj4iOy8KKyI8VTA0NDE+PFUwNDM1PjxVMDQzRj48VTA0NDI+PFUwNDM1PjxVMDQzQz48VTA0MzI+PFUwNDQwPjxVMDQzOD4iOy8KKyI8VTA0M0U+PFUwNDNBPjxVMDQ0Mj48VTA0M0U+PFUwNDNDPjxVMDQzMj48VTA0NDA+PFUwNDM4PiI7LworIjxVMDQzRD48VTA0M0U+PFUwNDM1PjxVMDQzQz48VTA0MzI+PFUwNDQwPjxVMDQzOD4iOy8KKyI8VTA0MzQ+PFUwNDM1PjxVMDQzQT48VTA0MzU+PFUwNDNDPjxVMDQzMj48VTA0NDA+PFUwNDM4PiIKK2RfdF9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPi8KKzxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJFPjxVMDAyNT48VTAwNkQ+PFUwMDJFPjxVMDAyNT48VTAwNTk+IgordF9mbXQgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICIiOyIiCit0X2ZtdF9hbXBtICIiCitkYXRlX2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+Igord2VlayAgICA3OzE5OTcxMjAxOzQKK2ZpcnN0X3dlZWtkYXkgMSAlIE1vbmRheQorZmlyc3Rfd29ya2RheSAxICUgTW9uZGF5CitFTkQgTENfVElNRQorCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgICAgICAiPFUwMDREPjxVMDA0Qj48VTAwNDQ+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICAgIjxVMDQzND48VTA0MzU+PFUwNDNEPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAgICAgIjxVMDAyQz4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgICAgICI8VTAwMjA+IgorbW9uX2dyb3VwaW5nICAgICAgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgICAgICAwCitwX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAgICAgMAorbl9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAgICAgMQorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgICAgIjxVMDAyQz4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICAgICI8VTAwMjA+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAgICAzOzMKK0VORCBMQ19OVU1FUklDCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDQxND48VTA0MzQ+PFUwMDQ0PjxVMDA2ND48VTAwNTk+PFUwMDc5Pi8KKzxVMDAzMT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDQxRD48VTA0M0Q+PFUwMDRFPjxVMDA2RT48VTAwMzA+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgoreWVzc3RyICAiPFUwNDM0PjxVMDQzMD4iCitub3N0ciAgICI8VTA0M0Q+PFUwNDM1PiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+LworPFUwMDI1PjxVMDA2Qz4iCit0ZWxfZG9tX2ZtdCAgICAgIjxVMDAyNT48VTAwNDE+PFUwMDIwPjxVMDAyNT48VTAwNkM+IgoraW50X3ByZWZpeCAgICAgICI8VTAwMzM+PFUwMDM4PjxVMDAzOT4iCitpbnRfc2VsZWN0ICAgICAgIjxVMDAzMD48VTAwMzA+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19OQU1FCituYW1lX2ZtdCAgIjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK25hbWVfbXIgICAiPFUwNDMzPjxVMDAyRD48VTA0MzQ+PFUwNDM4PjxVMDQzRD4iCituYW1lX21ycyAgIjxVMDQzMz48VTAwMmQ+PFUwNDUzPjxVMDQzMD4iCituYW1lX21pc3MgIjxVMDQzMz48VTAwMmQ+PFUwNDUzPjxVMDQzOD48VTA0NDY+PFUwNDMwPiIKK25hbWVfbXMgICAiPFUwNDMzPjxVMDAyZD48VTA0NTM+PFUwNDMwPiIKK25hbWVfZ2VuICAiPFUwNDNmPjxVMDQzZT48VTA0NDc+PFUwNDM4PjxVMDQ0Mj48VTA0NDM+PFUwNDMyPjxVMDQzMD48VTA0M2Q+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfbmFtZSAiPFUwMDRkPjxVMDA2MT48VTAwNjM+PFUwMDY1PjxVMDA2ND4vCis8VTAwNmY+PFUwMDZlPjxVMDA2OT48VTAwNjE+IgorY291bnRyeV9wb3N0ICAiPFUwMDRkPjxVMDA0Yj4iCitjb3VudHJ5X2FiMiAiPFUwMDRkPjxVMDA0Yj4iCitjb3VudHJ5X2FiMyAiPFUwMDRkPjxVMDA0Yj48VTAwNDQ+IgorY291bnRyeV9jYXIgIjxVMDA0ZD48VTAwNGI+IgorY291bnRyeV9udW0gODA3Citjb3VudHJ5X2lzYm4gIjk5ODkiCitsYW5nX25hbWUgIjxVMDA0ZD48VTAwNjE+PFUwMDYzPjxVMDA2NT48VTAwNjQ+PFUwMDZmPi8KKzxVMDA2ZT48VTAwNjk+PFUwMDYxPjxVMDA2ZT4iCitsYW5nX2FiICI8VTAwNmQ+PFUwMDZiPiIKK2xhbmdfdGVybSAiPFUwMDZkPjxVMDA2Yj48VTAwNjQ+IgorbGFuZ19saWIgIjxVMDA2ZD48VTAwNjE+PFUwMDYzPiIKK0VORCBMQ19BRERSRVNTCisKK0xDX1BBUEVSCitoZWlnaHQgICAyOTcKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX01FQVNVUkVNRU5UCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL21sX0lOIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvbWxfSU4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY1Nzg0NQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL21sX0lOCkBAIC0wLDAgKzEsMjAzIEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKyUgTWFsYXlhbGFtIGxhbmd1YWdlIGxvY2FsZSBmb3IgSW5kaWEuCislIENvbnRyaWJ1dGVkIGJ5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBvZiBJbmRpYSBodHRwOi8vZ251Lm9yZy5pbgorJSBFLU1haWwgOiBnbnVAZ251Lm9yZy5pbgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICJNYWxheWFsYW0gbGFuZ3VhZ2UgbG9jYWxlIGZvciBJbmRpYSIKK3NvdXJjZSAgICAgIkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBvZiBJbmRpYSwgVHJpdmFuZHJ1bSIKK2FkZHJlc3MgICAgICIiCitjb250YWN0ICAgICAiIgorZW1haWwgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAiIgorZmF4ICAgICAiIgorbGFuZ3VhZ2UgICAgICJNYWxheWFsYW0iCit0ZXJyaXRvcnkgICAgICJJbmRpYSIKK3JldmlzaW9uICAgICAiMC4xIgorZGF0ZSAgICAgIjIwMDMtRmVicnVhcnktMDEiCislCitjYXRlZ29yeSAgICAgIm1sX0lOOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgICAgIm1sX0lOOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgICAgIm1sX0lOOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAgICAibWxfSU46MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICAgICJtbF9JTjoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgICAgIm1sX0lOOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgICAgIm1sX0lOOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgICAgIm1sX0lOOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgICAgIm1sX0lOOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAgICAibWxfSU46MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICAgICJtbF9JTjoyMDAwIjtMQ19URUxFUEhPTkUKK2NhdGVnb3J5ICAgICAibWxfSU46MjAwMCI7TENfTUVBU1VSRU1FTlQKK0VORCBMQ19JREVOVElGSUNBVElPTgorTENfQ1RZUEUKK2NvcHkJImkxOG4iCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAgICAgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCislCislCitMQ19DT0xMQVRFCisKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxCitjb3B5ICJpc28xNDY1MV90MSIKKworRU5EIExDX0NPTExBVEUKK0xDX01PTkVUQVJZCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIHRoZSBMQ19NT05FVEFSWSBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkZWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlLgorJQoraW50X2N1cnJfc3ltYm9sICAgICAiPFUwMDQ5PjxVMDA0RT48VTAwNTI+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgIjxVMEQzMD48VTBENDI+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgIDM7MgorcG9zaXRpdmVfc2lnbiAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAxCislCitFTkQgTENfTU9ORVRBUlkKKyUKK0xDX05VTUVSSUMKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OVU1FUklDICBjYXRlZ29yeS4KKyUKK2RlY2ltYWxfcG9pbnQgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgIjxVMDAyQz4iCitncm91cGluZyAgICAgICAgICAgICAgIDM7MgorJQorRU5EIExDX05VTUVSSUMKKyUKK0xDX1RJTUUKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19USU1FIGNhdGVnb3J5CislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRpZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUuCislCislIEFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZXMgKCVhKQorYWJkYXkgICAgICI8VTBEMUU+PFUwRDNFPiI7IjxVMEQyND48VTBEM0Y+IjsvCisiPFUwRDFBPjxVMEQ0QT4iOyI8VTBEMkM+PFUwRDQxPiI7LworIjxVMEQzNT48VTBENEQ+PFUwRDJGPjxVMEQzRT4iOyI8VTBEMzU+PFUwRDQ2PiI7LworIjxVMEQzNj4iCislCislIEZ1bGwgd2Vla2RheSBuYW1lcyAoJUEpCitkYXkgICAgICI8VTBEMUU+PFUwRDNFPjxVMEQyRj48VTBEMzA+PFUwRDREPjxVMjAwRD4iOy8KKyI8VTBEMjQ+PFUwRDNGPjxVMEQxOT48VTBENEQ+PFUwRDE1PjxVMEQzMz48VTBENEQ+PFUyMDBEPiI7LworIjxVMEQxQT48VTBENEE+PFUwRDM1PjxVMEQ0RD48VTBEMzU+IjsvCisiPFUwRDJDPjxVMEQ0MT48VTBEMjc+PFUwRDI4PjxVMEQ0RD48VTIwMEQ+IjsvCisiPFUwRDM1PjxVMEQ0RD48VTBEMkY+PFUwRDNFPjxVMEQzND48VTBEMDI+IjsvCisiPFUwRDM1PjxVMEQ0Nj48VTBEMzM+PFUwRDREPjxVMEQzMz48VTBEM0Y+IjsvCisiPFUwRDM2PjxVMEQyOD48VTBEM0Y+IgorJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCithYm1vbiAgICAgIjxVMEQxQz48VTBEMjg+PFUwRDQxPiI7LworIjxVMEQyQj48VTBENDY+PFUwRDJDPjxVMEQ0RD4iOy8KKyI8VTBEMkU+PFUwRDNFPjxVMEQzMD48VTBENEQ+PFUyMDBEPiI7LworIjxVMEQwRj48VTBEMkE+PFUwRDREPjxVMEQzMD4iOy8KKyI8VTBEMkU+PFUwRDQ2PiI7LworIjxVMEQxQz48VTBENDI+PFUwRDIzPjxVMEQ0RD48VTIwMEQ+IjsvCisiPFUwRDFDPjxVMEQ0Mj48VTBEMzI+PFUwRDQ4PiI7LworIjxVMEQwNj48VTBEMTc+PFUwRDREPiI7LworIjxVMEQzOD48VTBENDY+PFUwRDJBPjxVMEQ0RD4iOy8KKyI8VTBEMTI+PFUwRDE1PjxVMEQ0RD48VTBEMUY+PFUwRDRCPiI7LworIjxVMEQyOD48VTBEMzU+PFUwRDAyPiI7LworIjxVMEQyMT48VTBEM0Y+PFUwRDM4PjxVMEQwMj4iCislCislIEZVTEwgbW9udGggbmFtZXMgKCVCKQorbW9uICAgICAiPFUwRDFDPjxVMEQyOD48VTBENDE+PFUwRDM1PjxVMEQzMD48VTBEM0Y+IjsvCisiPFUwRDJCPjxVMEQ0Nj48VTBEMkM+PFUwRDREPjxVMEQzMD48VTBENDE+PFUwRDM1PjxVMEQzMD48VTBEM0Y+IjsvCisiPFUwRDJFPjxVMEQzRT48VTBEMzA+PFUwRDREPjxVMjAwRD48VTBEMUE+PFUwRDREPjxVMEQxQT48VTBENEQ+IjsvCisiPFUwRDBGPjxVMEQyQT48VTBENEQ+PFUwRDMwPjxVMEQzRj48VTBEMzI+PFUwRDREPjxVMjAwRD48VTAwMjA+IjsvCisiPFUwRDJFPjxVMEQ0Nj48VTBEMkY+PFUwRDREPiI7LworIjxVMEQxQz48VTBENDI+PFUwRDIzPjxVMEQ0RD48VTIwMEQ+IjsvCisiPFUwRDFDPjxVMEQ0Mj48VTBEMzI+PFUwRDQ4PiI7LworIjxVMEQwNj48VTBEMTc+PFUwRDM4PjxVMEQ0RD48VTBEMzE+PFUwRDREPjxVMEQzMT48VTBENEQ+IjsvCisiPFUwRDM4PjxVMEQ0Nj48VTBEMkE+PFUwRDREPjxVMEQzMT48VTBENEQ+PFUwRDMxPjxVMEQwMj48VTBEMkM+PFUwRDMwPjxVMEQ0RD48VTIwMEQ+IjsvCisiPFUwRDEyPjxVMEQxNT48VTBENEQ+PFUwRDFGPjxVMEQ0Qj48VTBEMkM+PFUwRDMwPjxVMEQ0RD48VTIwMEQ+IjsvCisiPFUwRDI4PjxVMEQzNT48VTBEMDI+PFUwRDJDPjxVMEQzMD48VTBENEQ+PFUyMDBEPiI7LworIjxVMEQyMT48VTBEM0Y+PFUwRDM4PjxVMEQwMj48VTBEMkM+PFUwRDMwPjxVMEQ0RD48VTIwMEQ+IgorJQorJQorJSBFcXVpdmFsZW50IG9mIEFNIFBNCithbV9wbSAgICAgIjxVMEQzMD48VTBEM0U+PFUwRDM1PjxVMEQzRj48VTBEMzI+PFUwRDQ2PiI7IjxVMEQzNT48VTBENDg+PFUwRDE1PjxVMEQ0MT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJUEgJWQgJUIgJVkgJUk6JU06JVMgICVaCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA0MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24KKyUgJUEgJWQgJUIgJVkKK2RfZm10ICAgICAiPFUwMDI1PjxVMDA0MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCislCislIEFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJUk6JU06JVMgICVaCit0X2ZtdCAgICAgIjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKKyUgQXBwcm9wcmlhdGUgMTIgaCB0aW1lIHJlcHJlc2VudGF0aW9uICglcikKK3RfZm10X2FtcG0gICAgICI8VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKK0VORCBMQ19USU1FCislCitMQ19NRVNTQUdFUworJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX01FU1NBR0VTIGNhdGVnb3J5CislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRpZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUuCislCislIF5bXHUwZDA1XHUwZDI0XHUwZDQ2XQoreWVzZXhwciAgICAgIjxVMDA1RT48VTAwNUI+PFUwRDA1PjxVMEQyND48VTBENDY+PFUwMDc5PjxVMDA1OT48VTAwNUQ+IgorJQorJQorJSBeW1x1MGQwNVx1MGQzMlx1MGQ0ZFx1MGQzMl0KK25vZXhwciAgICAgIjxVMDA1RT48VTAwNUI+PFUwRDA1PjxVMEQzMj48VTBENEQ+PFUwRDMyPjxVMDA2RT48VTAwNEU+PFUwMDVEPiIKKyUKKyUgXHUwZDA1XHUwZDI0XHUwZDQ2Cit5ZXNzdHIgICAgICI8VTBEMDU+PFUwRDI0PjxVMEQ0Nj4iCislCislIFx1MGQwNVx1MGQzMlx1MGQ0ZFx1MGQzMgorbm9zdHIgICAgICI8VTBEMDU+PFUwRDMyPjxVMEQ0RD48VTBEMzI+IgorJQorRU5EIExDX01FU1NBR0VTCislCitMQ19QQVBFUgorY29weSAiaGlfSU4iCitFTkQgTENfUEFQRVIKKyUKK0xDX05BTUUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTkFNRSBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorJQorJQorbmFtZV9mbXQgICAgICI8VTAwMjU+PFUwMDcwPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+IgorbmFtZV9nZW4gICAgICI8VTBEMzY+PFUwRDREPjxVMEQzMD48VTBENDA+IgorbmFtZV9tciAgICAgICI8VTBEMzY+PFUwRDREPjxVMEQzMD48VTBENDA+PFUwRDJFPjxVMEQzRT48VTBEMjg+PFUwRDQxPjxVMEQ0RD4iCituYW1lX21ycyAgICAgIjxVMEQzNj48VTBENEQ+PFUwRDMwPjxVMEQ0MD48VTBEMkU+PFUwRDI0PjxVMEQzRj4iCituYW1lX21pc3MgICAgIjxVMEQxNT48VTBENDE+PFUwRDJFPjxVMEQzRT48VTBEMzA+PFUwRDNGPiIKK25hbWVfbXMgICAgICAiPFUwRDM2PjxVMEQ0RD48VTBEMzA+PFUwRDQwPjxVMEQyRT48VTBEMjQ+PFUwRDNGPiIKK0VORCBMQ19OQU1FCitMQ19BRERSRVNTCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX0FERFJFU1MgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KK3Bvc3RhbF9mbXQgICAgICI8VTAwMjU+PFUwMDdBPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDczPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA2NT48VTAwMjU+PFUwMDcyPiIKK2NvdW50cnlfYWIyICI8VTAwNDk+PFUwMDRFPiIKK2NvdW50cnlfYWIzICI8VTAwNDk+PFUwMDRFPjxVMDA0ND4iCitjb3VudHJ5X251bSAzNTYKK0VORCBMQ19BRERSRVNTCislCitMQ19URUxFUEhPTkUKK2NvcHkgImhpX0lOIgorRU5EIExDX1RFTEVQSE9ORQorJQorTENfTUVBU1VSRU1FTlQKK2NvcHkgImhpX0lOIgorRU5EIExDX01FQVNVUkVNRU5UCislCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9tbl9NTiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL21uX01OCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYTM4NzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9tbl9NTgpAQCAtMCwwICsxLDI3MyBAQAorZXNjYXBlX2NoYXIgLworY29tbWVudF9jaGFyICUKKyUgTW9uZ29saWFuIGxhbmd1YWdlIChjeXJpbGxpYykgbG9jYWxlIGZvciBNb25nb2xpYQorJSBTYW5saWcgQmFkcmFsIDxiYWRyYWxAY2hpbmdnaXMuY29tPgorJSBSZXZpc2lvbjogMS4wICgyMDA1LTUtMjEpCislIENoYXJzZXRzOiBVVEYtOAorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiTW9uZ29saWFuIGxvY2FsZSBmb3IgTW9uZ29saWEiCitzb3VyY2UgICAgICJTYW5saWcgQmFkcmFsIgorYWRkcmVzcyAgICAiIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYmFkcmFsQGNoaW5nZ2lzLmNvbSIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIk1vbmdvbGlhbiIKK3RlcnJpdG9yeSAgIk1vbmdvbGlhIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwNS0wNS0yMSIKK2F1ZGllbmNlICAgImdlbmVyYWwiCithcHBsaWNhdGlvbiAgICJHTlUgbG9jYWxlIgorJQorY2F0ZWdvcnkgICJtbl9NTjoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJtbl9NTjoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJtbl9NTjoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgIm1uX01OOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAibW5fTU46MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJtbl9NTjoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJtbl9NTjoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJtbl9NTjoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJtbl9NTjoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgIm1uX01OOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAibW5fTU46MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DT0xMQVRFCitjb3B5ICJpc28xNDY1MV90MSIKKworJSBpc28xNDY1MV90MSBpcyBtaXNzaW5nIE1vbmdvbGlhbiB1ZShzdHJhaWdodCB1KSwgb2UoYmFycmVkIG8pCislIGxpa2UgcnVzc2lhbiwgYnV0IHdpdGggPG8tPT4gKDxiYXJyZWQtbz4pIGFmdGVyIDxvPT4gYW5kCislIDx1Jz0+KHN0cmFpZ2h0IHUpIGFmdGVyIDx1PT4KKworY29sbGF0aW5nLXN5bWJvbCA8by09PgorY29sbGF0aW5nLXN5bWJvbCA8dSc9PgorCityZW9yZGVyLWFmdGVyIDxDWVItTz4KKzxvLT0+CityZW9yZGVyLWFmdGVyIDxDWVItT1VCUkU+Cis8dSc9PgorCityZW9yZGVyLWFmdGVyIDxVMDQzRT4KKzxVMDRFOT4gPG8tPT47PFBDTD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDQxRT4KKzxVMDRFOD4gPG8tPT47PFBDTD47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwNDQzPgorPFUwNEFGPiA8dSc9Pjs8UENMPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwNDIzPgorPFUwNEFFPiA8dSc9Pjs8UENMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1lbmQKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKKyUgY3lyaWxsaWMgLT4gbGF0aW4gZm9yIG1vbmdvbGlhbgorJSBDWVJJTExJQyBDQVBJVEFMIExFVFRFUlMgSU4gQUxQSEFCRVRJQ0FMIE9SREVSLgorPFUwNDEwPiAiPFUwMDQxPiIKKzxVMDQxMT4gIjxVMDA0Mj4iCis8VTA0MTI+ICI8VTAwNTY+IgorPFUwNDEzPiAiPFUwMDQ3PiIKKzxVMDQxND4gIjxVMDA0ND4iCis8VTA0MTU+ICI8VTAwNTk+PFUwMDY1PiIgJSBZZQorPFUwNDAxPiAiPFUwMDU5PjxVMDA2Rj4iICUgWW8KKzxVMDQxNj4gIjxVMDA0QT4iCis8VTA0MTc+ICI8VTAwNUE+IgorPFUwNDE4PiAiPFUwMDQ5PiIKKzxVMDQxOT4gIjxVMDA0OT4iCis8VTA0MUE+ICI8VTAwNEI+IgorPFUwNDFCPiAiPFUwMDRDPiIKKzxVMDQxQz4gIjxVMDA0RD4iCis8VTA0MUQ+ICI8VTAwNEU+IgorPFUwNDFFPiAiPFUwMDRGPiIKKzxVMDRFOD4gIjxVMDA0Rj48VTAwNjU+IiAlIE9lCis8VTA0MUY+ICI8VTAwNTA+IgorPFUwNDIwPiAiPFUwMDUyPiIKKzxVMDQyMT4gIjxVMDA1Mz4iCis8VTA0MjI+ICI8VTAwNTQ+IgorPFUwNDIzPiAiPFUwMDU1PiIKKzxVMDRBRT4gIjxVMDA1NT48VTAwNjU+IiAlIFVlCis8VTA0MjQ+ICI8VTAwNDY+IgorPFUwNDI1PiAiPFUwMDQ4PiIKKzxVMDQyNj4gIjxVMDA0Mz4iCis8VTA0Mjc+ICI8VTAwNDM+PFUwMDY4PiIgJSBDaAorPFUwNDI4PiAiPFUwMDUzPjxVMDA2OD4iICUgU2gKKzxVMDQyOT4gIjxVMDA1Mz48VTAwNjg+IiAlIFNoCis8VTA0MkE+ICI8VTAwMjI+IiAlICIKKzxVMDQyQj4gIjxVMDA1OT4iCis8VTA0MkM+ICI8VTAwMjc+IiAlICcKKzxVMDQyRD4gIjxVMDA0NT4iCis8VTA0MkU+ICI8VTAwNTk+PFUwMDc1PiIgJSBZdQorPFUwNDJGPiAiPFUwMDU5PjxVMDA2MT4iICUgWWEKKyUgQ1lSSUxMSUMgU01BTEwgTEVUVEVSUyBJTiBBTFBIQUJFVElDQUwgT1JERVIuCis8VTA0MzA+ICI8VTAwNjE+IgorPFUwNDMxPiAiPFUwMDYyPiIKKzxVMDQzMj4gIjxVMDA3Nj4iCis8VTA0MzM+ICI8VTAwNjc+IgorPFUwNDM0PiAiPFUwMDY0PiIKKzxVMDQzNT4gIjxVMDA3OT48VTAwNjU+IiAleWUKKzxVMDQ1MT4gIjxVMDA3OT48VTAwNkY+IiAleW8KKzxVMDQzNj4gIjxVMDA2QT4iCis8VTA0Mzc+ICI8VTAwN0E+IgorPFUwNDM4PiAiPFUwMDY5PiIKKzxVMDQzOT4gIjxVMDA2OT4iCis8VTA0M0E+ICI8VTAwNkI+IgorPFUwNDNCPiAiPFUwMDZDPiIKKzxVMDQzQz4gIjxVMDA2RD4iCis8VTA0M0Q+ICI8VTAwNkU+IgorPFUwNDNFPiAiPFUwMDZGPiIKKzxVMDRFOT4gIjxVMDA2Rj48VTAwNjU+IiAlIG9lCis8VTA0M0Y+ICI8VTAwNzA+IgorPFUwNDQwPiAiPFUwMDcyPiIKKzxVMDQ0MT4gIjxVMDA3Mz4iCis8VTA0NDI+ICI8VTAwNzQ+IgorPFUwNDQzPiAiPFUwMDc1PiIKKzxVMDRBRj4gIjxVMDA3NT48VTAwNjU+IiAlIHVlCis8VTA0NDQ+ICI8VTAwNjY+IgorPFUwNDQ1PiAiPFUwMDY4PiIKKzxVMDQ0Nj4gIjxVMDA0Mz4iCis8VTA0NDc+ICI8VTAwNjM+PFUwMDY4PiIgJSBjaAorPFUwNDQ4PiAiPFUwMDczPjxVMDA2OD4iICUgc2gKKzxVMDQ0OT4gIjxVMDA3Mz48VTAwNjg+IiAlIHNoCis8VTA0NEE+ICI8VTAwMjI+IiAlICIKKzxVMDQ0Qj4gIjxVMDA3OT4iCis8VTA0NEM+ICI8VTAwMjc+IiAlICcKKzxVMDQ0RD4gIjxVMDA2NT4iCis8VTA0NEU+ICI8VTAwNzk+PFUwMDc1PiIgJSB5dQorPFUwNDRGPiAiPFUwMDc5PjxVMDA2MT4iICUgeWEKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICI8VTAwNEQ+PFUwMDRFPjxVMDA1ND48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAiPFUyMEFFPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICI8VTAwMjA+IgorbW9uX2dyb3VwaW5nICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAwCitwX3NlcF9ieV9zcGFjZSAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgMAorbl9zZXBfYnlfc3BhY2UgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgMQorCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludCAgICI8VTAwMkM+IgordGhvdXNhbmRzX3NlcCAgICI8VTAwMkU+IgorZ3JvdXBpbmcgICAgICAgIDM7MworRU5EIExDX05VTUVSSUMKKworTENfVElNRQorJSBBYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWVzICglYSkKK2FiZGF5ICI8VTA0MUQ+PFUwNDRGPiI7IjxVMDQxND48VTA0MzA+IjsvCisgICAgICAiPFUwNDFDPjxVMDQ0Rj4iOyI8VTA0MUI+PFUwNDQ1PiI7LworICAgICAgIjxVMDQxRj48VTA0QUY+IjsiPFUwNDExPjxVMDQzMD4iOy8KKyAgICAgICI8VTA0MTE+PFUwNDRGPiIKKyUgRnVsbCB3ZWVrZGF5IG5hbWVzICglQSkKK2RheSAgICI8VTA0MUQ+PFUwNDRGPjxVMDQzQz4iOy8KKyAgICAgICI8VTA0MTQ+PFUwNDMwPjxVMDQzMj48VTA0MzA+PFUwNDMwPiI7LworICAgICAgIjxVMDQxQz48VTA0NEY+PFUwNDMzPjxVMDQzQz48VTA0MzA+PFUwNDQwPiI7LworICAgICAgIjxVMDQxQj48VTA0NDU+PFUwNDMwPjxVMDQzMz48VTA0MzI+PFUwNDMwPiI7LworICAgICAgIjxVMDQxRj48VTA0QUY+PFUwNDQwPjxVMDQ0RD48VTA0MzI+IjsvCisgICAgICAiPFUwNDExPjxVMDQzMD48VTA0MzA+PFUwNDQxPjxVMDQzMD48VTA0M0Q+IjsvCisgICAgICAiPFUwNDExPjxVMDQ0Rj48VTA0M0M+PFUwNDMxPjxVMDQzMD4iCislIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzICglYikKK2FibW9uICAgICAgICI8VTA0MjU+PFUwNDQzPjxVMDQzQj4iOyI8VTA0QUU+PFUwNDQ1PjxVMDQ0RD4iOy8KKyAgICAgICAgICAgICI8VTA0MTE+PFUwNDMwPjxVMDQ0MD4iOyI8VTA0MjI+PFUwNDQzPjxVMDQ0Mz4iOy8KKyAgICAgICAgICAgICI8VTA0MUI+PFUwNDQzPjxVMDQ0Mz4iOyI8VTA0MUM+PFUwNDNFPjxVMDQzMz4iOy8KKyAgICAgICAgICAgICI8VTA0MUM+PFUwNDNFPjxVMDQ0MD4iOyI8VTA0MjU+PFUwNDNFPjxVMDQzRD4iOy8KKyAgICAgICAgICAgICI8VTA0MTE+PFUwNDM4PjxVMDQ0Nz4iOyI8VTA0MjI+PFUwNDMwPjxVMDQ0NT4iOy8KKyAgICAgICAgICAgICI8VTA0MUQ+PFUwNDNFPjxVMDQ0NT4iOyI8VTA0MTM+PFUwNDMwPjxVMDQ0NT4iCislIEZ1bGwgbW9udGggbmFtZXMgKCVCKQorbW9uICAgICAgICAgIjxVMDQyNT48VTA0NDM+PFUwNDNCPjxVMDQzMz48VTA0MzA+PFUwNDNEPjxVMDQzMD48VTAwMjA+PFUwNDQxPjxVMDQzMD48VTA0NDA+PFUwNDRCPjxVMDQzRD4iOy8KKyAgICAgICAgICAgICI8VTA0QUU+PFUwNDQ1PjxVMDQ0RD48VTA0NDA+PFUwMDIwPjxVMDQ0MT48VTA0MzA+PFUwNDQwPjxVMDQ0Qj48VTA0M0Q+IjsvCisgICAgICAgICAgICAiPFUwNDExPjxVMDQzMD48VTA0NDA+PFUwMDIwPjxVMDQ0MT48VTA0MzA+PFUwNDQwPjxVMDQ0Qj48VTA0M0Q+IjsvCisgICAgICAgICAgICAiPFUwNDIyPjxVMDQ0Mz48VTA0NDM+PFUwNDNCPjxVMDQzMD48VTA0Mzk+PFUwMDIwPjxVMDQ0MT48VTA0MzA+PFUwNDQwPjxVMDQ0Qj48VTA0M0Q+IjsvCisgICAgICAgICAgICAiPFUwNDFCPjxVMDQ0Mz48VTA0NDM+PFUwMDIwPjxVMDQ0MT48VTA0MzA+PFUwNDQwPjxVMDQ0Qj48VTA0M0Q+IjsvCisgICAgICAgICAgICAiPFUwNDFDPjxVMDQzRT48VTA0MzM+PFUwNDNFPjxVMDQzOT48VTAwMjA+PFUwNDQxPjxVMDQzMD48VTA0NDA+PFUwNDRCPjxVMDQzRD4iOy8KKyAgICAgICAgICAgICI8VTA0MUM+PFUwNDNFPjxVMDQ0MD48VTA0NEM+PFUwMDIwPjxVMDQ0MT48VTA0MzA+PFUwNDQwPjxVMDQ0Qj48VTA0M0Q+IjsvCisgICAgICAgICAgICAiPFUwNDI1PjxVMDQzRT48VTA0M0Q+PFUwNDRDPjxVMDAyMD48VTA0NDE+PFUwNDMwPjxVMDQ0MD48VTA0NEI+PFUwNDNEPiI7LworICAgICAgICAgICAgIjxVMDQxMT48VTA0Mzg+PFUwNDQ3PjxVMDAyMD48VTA0NDE+PFUwNDMwPjxVMDQ0MD48VTA0NEI+PFUwNDNEPiI7LworICAgICAgICAgICAgIjxVMDQyMj48VTA0MzA+PFUwNDQ1PjxVMDQzOD48VTA0MzA+PFUwMDIwPjxVMDQ0MT48VTA0MzA+PFUwNDQwPjxVMDQ0Qj48VTA0M0Q+IjsvCisgICAgICAgICAgICAiPFUwNDFEPjxVMDQzRT48VTA0NDU+PFUwNDNFPjxVMDQzOT48VTAwMjA+PFUwNDQxPjxVMDQzMD48VTA0NDA+PFUwNDRCPjxVMDQzRD4iOy8KKyAgICAgICAgICAgICI8VTA0MTM+PFUwNDMwPjxVMDQ0NT48VTA0MzA+PFUwNDM5PjxVMDAyMD48VTA0NDE+PFUwNDMwPjxVMDQ0MD48VTA0NEI+PFUwNDNEPiIKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbgorJSAiJVkgJWIgJWQsICVhICVUIgorZF90X2ZtdCAiPFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNTQ+IgorCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24KKyUgIiVZLiVtLiVkIgorZF9mbXQgICAiPFUwMDI1PjxVMDA1OT48VTAwMkU+PFUwMDI1PjxVMDA2RD48VTAwMkU+PFUwMDI1PjxVMDA2ND4iCislIEFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgIiVUIgordF9mbXQgICAiPFUwMDI1PjxVMDA1ND4iCislIEFwcHJvcHJpYXRlIDEyIGggdGltZSByZXByZXNlbnRhdGlvbiAoJXIpCithbV9wbSAgICIiOyIiCit0X2ZtdF9hbXBtICIiCislIEZ1bGwgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbgorJSAiJVogJVkgb255ICVCICVlLCAlYSAlSDolTTolUyIKK2RhdGVfZm10ICAiPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwNDNFPjxVMDQzRD48VTA0NEI+PFUwMDIwPjxVMDAyNT48VTAwNDI+PFUwMDIwPi8KKzxVMDAyNT48VTAwNjU+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPiIKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDQ0Mj48VTA0MjI+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDRBRj48VTA0QUU+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworJSBQYXBlciBmb3JtYXQKK0xDX1BBUEVSCitoZWlnaHQgICAyOTcKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK25hbWVfbWlzcyAgICI8VTA0MjU+PFUwNDMwPjxVMDQ0Mj48VTA0MzA+PFUwNDMzPjxVMDQ0Mj48VTA0MzA+PFUwNDM5PiIKK25hbWVfbXIgICAgICI8VTA0MUQ+PFUwNDNFPjxVMDQ1MT48VTA0M0Q+IgorbmFtZV9tcnMgICAgIjxVMDQyNT48VTA0MzA+PFUwNDQyPjxVMDQzMD48VTA0MzM+PFUwNDQyPjxVMDQzMD48VTA0Mzk+IgorbmFtZV9tcyAgICAgIjxVMDQyNT48VTA0MzA+PFUwNDQyPjxVMDQzMD48VTA0MzM+PFUwNDQyPjxVMDQzMD48VTA0Mzk+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfbmFtZSAgIjxVMDA0RD48VTAwNkY+PFUwMDZFPjxVMDA2Nz48VTAwNkY+PFUwMDZDPjxVMDA2OT48VTAwNjE+IgorY291bnRyeV9wb3N0ICAiPFUwMDREPjxVMDA0RT4iCitjb3VudHJ5X2FiMiAgICI8VTAwNEQ+PFUwMDRFPiIKK2NvdW50cnlfYWIzICAgIjxVMDA0RD48VTAwNEU+PFUwMDQ3PiIKK2NvdW50cnlfbnVtICAgNDk2Citjb3VudHJ5X2NhciAgICI8VTAwNEQ+PFUwMDQ3PjxVMDA0Qz4iCitjb3VudHJ5X2lzYm4gIDk5OTI5CitsYW5nX25hbWUgICAgICI8VTAwNEQ+PFUwMDZGPjxVMDA2RT48VTAwNjc+PFUwMDZGPjxVMDA2Qz48VTAwNjk+PFUwMDYxPjxVMDA2RT4iCitsYW5nX2FiICAgICAgICI8VTAwNkQ+PFUwMDZFPiIKK2xhbmdfdGVybSAgICAgIjxVMDA2RD48VTAwNkY+PFUwMDZFPiIKK2xhbmdfbGliICAgICAgIjxVMDA2RD48VTAwNkY+PFUwMDZFPiIKK0VORCBMQ19BRERSRVNTCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyOD48VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjk+PFUwMDIwPjxVMDAyNT48VTAwNkM+IgordGVsX2RvbV9mbXQgICAgIjxVMDAyOD48VTAwMzA+PFUwMDI1PjxVMDA2MT48VTAwMjk+PFUwMDIwPjxVMDAyNT48VTAwNkM+IgoraW50X3NlbGVjdCAgICAgIjxVMDAzMD48VTAwMzA+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzOT48VTAwMzc+PFUwMDM2PiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvbXJfSU4gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9tcl9JTgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTNiM2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvbXJfSU4KQEAgLTAsMCArMSwyMzcgQEAKK2NvbW1lbnRfY2hhciAgICAlCitlc2NhcGVfY2hhciAgICAgLworJSBNYXJhdGhpIGxhbmd1YWdlIGxvY2FsZSBmb3IgSW5kaWEuCislIENvbnRyaWJ1dGVkIGJ5IEtlbnRhcm9oIE5vamkgPGtub2ppQGpwLmlibS5jb20+IGFuZAorJSBUZXRzdWppIE9yaXRhIDxvcml0YUBqcC5pYm0uY29tPi4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIk1hcmF0aGkgbGFuZ3VhZ2UgbG9jYWxlIGZvciBJbmRpYSIKK3NvdXJjZSAgICAgIklCTSBHbG9iYWxpemF0aW9uIENlbnRlciBvZiBDb21wZXRlbmN5LCBZYW1hdG8gU29mdHdhcmUgTGFib3JhdG9yeSIKK2FkZHJlc3MgICAgIjE2MjMtMTQsIFNoaW1vdHN1cnVtYSwgWWFtYXRvLXNoaSwgS2FuYWdhd2Eta2VuLCAyNDItODUwMiwgSmFwYW4iCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiTWFyYXRoaSIKK3RlcnJpdG9yeSAgIkluZGlhIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNy0yMSIKKyUKK2NhdGVnb3J5ICAibXJfSU46MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAibXJfSU46MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAibXJfSU46MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJtcl9JTjoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgIm1yX0lOOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAibXJfSU46MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAibXJfSU46MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAibXJfSU46MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAibXJfSU46MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJtcl9JTjoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgIm1yX0lOOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorCislIENvcHkgdGhlIHRlbXBsYXRlIGZyb20gSVNPL0lFQyAxNDY1MQorY29weSAiaXNvMTQ2NTFfdDEiCisKKyUgY3VzdG9taXplIHNvcnRpbmcgcmVxdWlyZWQgZm9yIG1yX0lOCitjb2xsYXRpbmctZWxlbWVudCA8ZHZfa3NoYT4gZnJvbSAiPFUwOTE1PjxVMDk0RD48VTA5Mzc+IgorY29sbGF0aW5nLWVsZW1lbnQgPGR2X2RueWE+IGZyb20gIjxVMDkxQz48VTA5NEQ+PFUwOTFFPiIKK2NvbGxhdGluZy1lbGVtZW50IDxkdl9zaHJhPiBmcm9tICI8VTA5MzY+PFUwOTREPjxVMDkzMD4iCisKK2NvbGxhdGluZy1zeW1ib2wgPGRfa3NoYT4KK2NvbGxhdGluZy1zeW1ib2wgPGRfZG55YT4KK2NvbGxhdGluZy1zeW1ib2wgPGRfc2hyYT4KKworcmVvcmRlci1hZnRlciA8ZF9oYT4KKzxkX2tzaGE+Cis8ZF9kbnlhPgorPGRfc2hyYT4KKworcmVvcmRlci1hZnRlciA8VTA5Mzk+Cis8ZHZfa3NoYT4gPGRfa3NoYT47PEJBUz47PE1JTj47SUdOT1JFIAorPGR2X2RueWE+IDxkX2RueWE+OzxCQVM+OzxNSU4+O0lHTk9SRSAKKzxkdl9zaHJhPiA8ZF9zaHJhPjs8QkFTPjs8TUlOPjtJR05PUkUKKworcmVvcmRlci1lbmQKKworRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gdGhlIExDX01PTkVUQVJZIGNhdGVnb3J5CislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRlZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUuCislCitpbnRfY3Vycl9zeW1ib2wgICAgICAgIjxVMDA0OT48VTAwNEU+PFUwMDUyPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgIjxVMDkzMD48VTA5NDE+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgIDMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAxCislCitFTkQgTENfTU9ORVRBUlkKKworCitMQ19OVU1FUklDCitjb3B5ICJoaV9JTiIKK0VORCBMQ19OVU1FUklDCisKKworTENfVElNRQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX1RJTUUgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS4KKyUKKyUgQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyAoJWEpCithYmRheSAgICAgICAiPFUwOTMwPjxVMDkzNT48VTA5M0Y+IjsiPFUwOTM4PjxVMDk0Qj48VTA5MkU+IjsvCisgICAgICAgICAgICAiPFUwOTJFPjxVMDkwMj48VTA5MTc+PFUwOTMzPiI7IjxVMDkyQz48VTA5NDE+PFUwOTI3PiI7LworICAgICAgICAgICAgIjxVMDkxNz48VTA5NDE+PFUwOTMwPjxVMDk0MT4iOy8KKyAgICAgICAgICAgICI8VTA5MzY+PFUwOTQxPjxVMDkxNT48VTA5NEQ+PFUwOTMwPiI7IjxVMDkzNj48VTA5Mjg+PFUwOTNGPiIKKyUKKyUgRnVsbCB3ZWVrZGF5IG5hbWVzICglQSkKK2RheSAgICAgICAgICI8VTA5MzA+PFUwOTM1PjxVMDkzRj48VTA5MzU+PFUwOTNFPjxVMDkzMD4iOy8KKyAgICAgICAgICAgICI8VTA5Mzg+PFUwOTRCPjxVMDkyRT48VTA5MzU+PFUwOTNFPjxVMDkzMD4iOy8KKyAgICAgICAgICAgICI8VTA5MkU+PFUwOTAyPjxVMDkxNz48VTA5MzM+PFUwOTM1PjxVMDkzRT48VTA5MzA+IjsvCisgICAgICAgICAgICAiPFUwOTJFPjxVMDkwMj48VTA5MTc+PFUwOTMzPjxVMDkzNT48VTA5M0U+PFUwOTMwPiI7LworICAgICAgICAgICAgIjxVMDkxNz48VTA5NDE+PFUwOTMwPjxVMDk0MT48VTA5MzU+PFUwOTNFPjxVMDkzMD4iOy8KKyAgICAgICAgICAgICI8VTA5MzY+PFUwOTQxPjxVMDkxNT48VTA5NEQ+PFUwOTMwPjxVMDkzNT48VTA5M0U+PFUwOTMwPiI7LworICAgICAgICAgICAgIjxVMDkzNj48VTA5Mjg+PFUwOTNGPjxVMDkzNT48VTA5M0U+PFUwOTMwPiIKKyUKKyUgQWJicmV2aWF0ZWQgbW9udGggbmFtZXMgKCViKQorYWJtb24gICAgICAgIjxVMDkxQz48VTA5M0U+PFUwOTI4PjxVMDk0Nz48VTA5MzU+PFUwOTNFPjxVMDkzMD48VTA5NDA+IjsvCisgICAgICAgICAgICAiPFUwOTJCPjxVMDk0Nz48VTA5MkM+PFUwOTQzPjxVMDkzNT48VTA5M0U+PFUwOTMwPjxVMDk0MD4iOy8KKyAgICAgICAgICAgICI8VTA5MkU+PFUwOTNFPjxVMDkzMD48VTA5NEQ+PFUwOTFBPiI7LworICAgICAgICAgICAgIjxVMDkwRj48VTA5MkE+PFUwOTREPjxVMDkzMD48VTA5M0Y+PFUwOTMyPiI7LworICAgICAgICAgICAgIjxVMDkyRT48VTA5NDc+IjsvCisgICAgICAgICAgICAiPFUwOTFDPjxVMDk0Mj48VTA5Mjg+IjsvCisgICAgICAgICAgICAiPFUwOTFDPjxVMDk0MT48VTA5MzI+PFUwOTQ4PiI7LworICAgICAgICAgICAgIjxVMDkxMz48VTA5MTc+PFUwOTM4PjxVMDk0RD48VTA5MUY+IjsvCisgICAgICAgICAgICAiPFUwOTM4PjxVMDk0Nz48VTA5MkE+PFUwOTREPjxVMDkxRj48VTA5NDc+PFUwOTAyPjxVMDkyQz48VTA5MzA+IjsvCisgICAgICAgICAgICAiPFUwOTEzPjxVMDkxNT48VTA5NEQ+PFUwOTFGPjxVMDk0Qj48VTA5MkM+PFUwOTMwPiI7LworICAgICAgICAgICAgIjxVMDkyOD48VTA5NEI+PFUwOTM1PjxVMDk0RD48VTA5Mzk+PFUwOTQ3PjxVMDkwMj48VTA5MkM+PFUwOTMwPiI7LworICAgICAgICAgICAgIjxVMDkyMT48VTA5M0Y+PFUwOTM4PjxVMDk0Nz48VTA5MDI+PFUwOTJDPjxVMDkzMD4iCislCislIEZ1bGwgbW9udGggbmFtZXMgKCVCKQorbW9uICAgICAgICAgIjxVMDkxQz48VTA5M0U+PFUwOTI4PjxVMDk0Nz48VTA5MzU+PFUwOTNFPjxVMDkzMD48VTA5NDA+IjsvCisgICAgICAgICAgICAiPFUwOTJCPjxVMDk0Nz48VTA5MkM+PFUwOTQzPjxVMDkzNT48VTA5M0U+PFUwOTMwPjxVMDk0MD4iOy8KKyAgICAgICAgICAgICI8VTA5MkU+PFUwOTNFPjxVMDkzMD48VTA5NEQ+PFUwOTFBPiI7LworICAgICAgICAgICAgIjxVMDkwRj48VTA5MkE+PFUwOTREPjxVMDkzMD48VTA5M0Y+PFUwOTMyPiI7LworICAgICAgICAgICAgIjxVMDkyRT48VTA5NDc+IjsvCisgICAgICAgICAgICAiPFUwOTFDPjxVMDk0Mj48VTA5Mjg+IjsvCisgICAgICAgICAgICAiPFUwOTFDPjxVMDk0MT48VTA5MzI+PFUwOTQ4PiI7LworICAgICAgICAgICAgIjxVMDkxMz48VTA5MTc+PFUwOTM4PjxVMDk0RD48VTA5MUY+IjsvCisgICAgICAgICAgICAiPFUwOTM4PjxVMDk0Nz48VTA5MkE+PFUwOTREPjxVMDkxRj48VTA5NDc+PFUwOTAyPjxVMDkyQz48VTA5MzA+IjsvCisgICAgICAgICAgICAiPFUwOTEzPjxVMDkxNT48VTA5NEQ+PFUwOTFGPjxVMDk0Qj48VTA5MkM+PFUwOTMwPiI7LworICAgICAgICAgICAgIjxVMDkyOD48VTA5NEI+PFUwOTM1PjxVMDk0RD48VTA5Mzk+PFUwOTQ3PjxVMDkwMj48VTA5MkM+PFUwOTMwPiI7LworICAgICAgICAgICAgIjxVMDkyMT48VTA5M0Y+PFUwOTM4PjxVMDk0Nz48VTA5MDI+PFUwOTJDPjxVMDkzMD4iCislCislIEVxdWl2YWxlbnQgb2YgQU0gUE0KK2FtX3BtICAgICAgICI8VTA5MkU+PFUwMDJFPjxVMDkyQT48VTA5NDI+PFUwMDJFPiI7LworICAgICAgICAgICAgIjxVMDkyRT48VTAwMkU+PFUwOTI4PjxVMDkwMj48VTAwMkU+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uCislICVBICVkICViICVZJUk6JU06JVMgICVaCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA0MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj4vCis8VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+LworPFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24KKyUgJUEgJWQgJWIgJVkKK2RfZm10ICAgICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPi8KKzxVMDAyMD48VTAwMjU+PFUwMDU5PiIKKyUKKyUgQXBwcm9wcmlhdGUgdGltZSByZXByZXNlbnRhdGlvbgorJSAlSTolTTolUyAgJVoKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPi8KKzxVMDAyMD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIDEyIGggdGltZSByZXByZXNlbnRhdGlvbiAoJXIpCit0X2ZtdF9hbXBtICAiPFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA3MD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKGRhdGUoMSkpICAgIiVhICViICVlICVIOiVNOiVTICVaICVZIgorZGF0ZV9mbXQgICAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworCitMQ19NRVNTQUdFUworJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX01FU1NBR0VTIGNhdGVnb3J5CislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRpZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUuCislCislIF4oWWVzfFt5WV0pCit5ZXNleHByICAgICAiPFUwMDVFPjxVMDAyOD48VTAwNTk+PFUwMDY1PjxVMDA3Mz48VTAwN0M+PFUwMDVCPjxVMDA3OT4vCis8VTAwNTk+PFUwMDVEPjxVMDAyOT4iCislCislIF4oTm98W25OXSkKK25vZXhwciAgICAgICI8VTAwNUU+PFUwMDI4PjxVMDA0RT48VTAwNkY+PFUwMDdDPjxVMDA1Qj48VTAwNkU+PFUwMDRFPi8KKzxVMDA1RD48VTAwMjk+IgorJQorRU5EIExDX01FU1NBR0VTCisKKworTENfUEFQRVIKK2NvcHkgImhpX0lOIgorRU5EIExDX1BBUEVSCisKKworTENfTkFNRQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OQU1FIGNhdGVnb3J5CislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCislCislCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA3MD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDY3PiIKK25hbWVfZ2VuICAgICIiCituYW1lX21yICAgICAiPFUwMDREPjxVMDA3Mj48VTAwMkU+IgorbmFtZV9tcnMgICAgIjxVMDA0RD48VTAwNzI+PFUwMDczPjxVMDAyRT4iCituYW1lX21pc3MgICAiPFUwMDREPjxVMDA2OT48VTAwNzM+PFUwMDczPjxVMDAyRT4iCituYW1lX21zICAgICAiPFUwMDREPjxVMDA3Mz48VTAwMkU+IgorCitFTkQgTENfTkFNRQorCisKK0xDX0FERFJFU1MKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfQUREUkVTUyBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorcG9zdGFsX2ZtdCAgIjxVMDAyNT48VTAwN0E+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDU0PjxVMDAyNT48VTAwNzM+LworPFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDY1PjxVMDAyNT48VTAwNzI+IgorCitjb3VudHJ5X2FiMiAiPFUwMDQ5PjxVMDA0RT4iCitjb3VudHJ5X2FiMyAiPFUwMDQ5PjxVMDA0RT48VTAwNDQ+IgorY291bnRyeV9udW0gMzU2CitFTkQgTENfQUREUkVTUworCisKK0xDX1RFTEVQSE9ORQorY29weSAiaGlfSU4iCitFTkQgTENfVEVMRVBIT05FCisKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgImhpX0lOIgorRU5EIExDX01FQVNVUkVNRU5UCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9tc19NWSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL21zX01ZCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YjAxZDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9tc19NWQpAQCAtMCwwICsxLDIyMSBAQAorY29tbWVudF9jaGFyICAgICUKK2VzY2FwZV9jaGFyICAgICAvCisKKyUgTWFsYXkgbGFuZ3VhZ2UgbG9jYWxlIGZvciBNYWxheXNpYS4KKyUgQ29udHJpYnV0ZWQgYnkgS2VudGFyb2ggTm9qaSA8a25vamlAanAuaWJtLmNvbT4gYW5kCislIFRldHN1amkgT3JpdGEgPG9yaXRhQGpwLmlibS5jb20+LgorJSBNb2RpZmllZCBieSBIYXNidWxsYWggQmluIFBpdCAoc2Vib2wpPHNlYm9sQGlraGxhcy5jb20+IDIwMDEsIERlY2VtYmVyLCAxMAorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiTWFsYXkgbGFuZ3VhZ2UgbG9jYWxlIGZvciBNYWxheXNpYSIKK3NvdXJjZSAgICAgIklCTSBHbG9iYWxpemF0aW9uIENlbnRlciBvZiBDb21wZXRlbmN5LCBZYW1hdG8gU29mdHdhcmUgTGFib3JhdG9yeSIKK2FkZHJlc3MgICAgIjE2MjMtMTQsIFNoaW1vdHN1cnVtYSwgWWFtYXRvLXNoaSwgS2FuYWdhd2Eta2VuLCAyNDItODUwMiwgSmFwYW4iCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnLCBzZWJvbEBpa2hsYXMuY29tIgordGVsICAgICAgICAgIiIKK2ZheCAgICAgICAgICIiCitsYW5ndWFnZSAgICAiTWFsYXkiCit0ZXJyaXRvcnkgICAiTWFsYXlzaWEiCityZXZpc2lvbiAgICAiMC45MmIiCitkYXRlICAgICAgICAiMjAwMSwgRGVjZW1iZXIsIDEwIgorJQorY2F0ZWdvcnkgICJtc19NWToyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJtc19NWToyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJtc19NWToyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgIm1zX01ZOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAibXNfTVk6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJtc19NWToyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJtc19NWToyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJtc19NWToyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJtc19NWToyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgIm1zX01ZOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAibXNfTVk6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiaTE4biIKKwordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCisKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxCitjb3B5ICJpc28xNDY1MV90MSIKKworRU5EIExDX0NPTExBVEUKKworCitMQ19NT05FVEFSWQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiB0aGUgTENfTU9ORVRBUlkgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGVmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS4KKyUKK2ludF9jdXJyX3N5bWJvbCAgICAgICAiPFUwMDREPjxVMDA1OT48VTAwNTI+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAiPFUwMDUyPjxVMDA0RD4iCittb25fZGVjaW1hbF9wb2ludCAgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAgMworcG9zaXRpdmVfc2lnbiAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgMAorbl9jc19wcmVjZWRlcyAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAwCitwX3NpZ25fcG9zbiAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgIDAKKyUKK0VORCBMQ19NT05FVEFSWQorCisKK0xDX05VTUVSSUMKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OVU1FUklDIGNhdGVnb3J5CislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRlZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUuCislCitkZWNpbWFsX3BvaW50ICAgICAgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAiPFUwMDJDPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgMworJQorRU5EIExDX05VTUVSSUMKKworCitMQ19USU1FCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfVElNRSBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkaWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlLgorJQorJSBBYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWVzICglYSkKK2FiZGF5ICAgICAgICI8VTAwNDE+PFUwMDY4PjxVMDA2ND4iOyI8VTAwNDk+PFUwMDczPjxVMDA2RT4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA2Qz4iOyI8VTAwNTI+PFUwMDYxPjxVMDA2Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNEI+PFUwMDY4PjxVMDA2MT4iOyI8VTAwNEE+PFUwMDc1PjxVMDA2RD4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA2Mj4iCislCislIEZ1bGwgd2Vla2RheSBuYW1lcyAoJUEpCitkYXkgICAgICAgICAiPFUwMDQxPjxVMDA2OD48VTAwNjE+PFUwMDY0PiI7IjxVMDA0OT48VTAwNzM+PFUwMDZFPjxVMDA2OT48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNkM+PFUwMDYxPjxVMDA3Mz48VTAwNjE+IjsiPFUwMDUyPjxVMDA2MT48VTAwNjI+PFUwMDc1PiI7LworICAgICAgICAgICAgIjxVMDA0Qj48VTAwNjg+PFUwMDYxPjxVMDA2RD48VTAwNjk+PFUwMDczPiI7IjxVMDA0QT48VTAwNzU+PFUwMDZEPjxVMDA2MT48VTAwNjE+PFUwMDc0PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDYyPjxVMDA3ND48VTAwNzU+IgorJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCithYm1vbiAgICAgICAiPFUwMDRBPjxVMDA2MT48VTAwNkU+IjsiPFUwMDQ2PjxVMDA2NT48VTAwNjI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNjM+IjsiPFUwMDQxPjxVMDA3MD48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2NT48VTAwNjk+IjsiPFUwMDRBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkM+IjsiPFUwMDRGPjxVMDA2Nz48VTAwNkY+PFUwMDczPiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA0Rj48VTAwNkI+PFUwMDc0PiI7LworICAgICAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDc2PiI7IjxVMDA0ND48VTAwNjk+PFUwMDczPiIKKyUKKyUgRnVsbCBtb250aCBuYW1lcyAoJUIpCittb24gICAgICAgICAiPFUwMDRBPjxVMDA2MT48VTAwNkU+PFUwMDc1PjxVMDA2MT48VTAwNzI+PFUwMDY5PiI7IjxVMDA0Nj48VTAwNjU+PFUwMDYyPjxVMDA3Mj48VTAwNzU+PFUwMDYxPjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNjM+IjsiPFUwMDQxPjxVMDA3MD48VTAwNzI+PFUwMDY5PjxVMDA2Qz4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDY1PjxVMDA2OT4iOyI8VTAwNEE+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2Qz48VTAwNjE+PFUwMDY5PiI7IjxVMDA0Rj48VTAwNjc+PFUwMDZGPjxVMDA3Mz4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOyI8VTAwNEY+PFUwMDZCPjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOyI8VTAwNDQ+PFUwMDY5PjxVMDA3Mz48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiIKKyUKKyUgRXF1aXZhbGVudCBvZiBBTSBQTQorYW1fcG0gICAgICAgIiI7IiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbgorJSAlQSAlZCAlYiAlWSAlSTolTTolUyAgJVoKK2RfdF9mbXQgICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbgorJSAlQSAlZCAlYiAlWQorZF9mbXQgICAgICAgIjxVMDAyNT48VTAwNDE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorJQorJSBBcHByb3ByaWF0ZSB0aW1lIHJlcHJlc2VudGF0aW9uCislICVJOiVNOiVTICAlWgordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKKyUgQXBwcm9wcmlhdGUgMTIgaCB0aW1lIHJlcHJlc2VudGF0aW9uICglcikKK3RfZm10X2FtcG0gICI8VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKK0VORCBMQ19USU1FCisKKworTENfTUVTU0FHRVMKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19NRVNTQUdFUyBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkaWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlLgorJQorJSBeW3lZXQoreWVzZXhwciAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDc5PjxVMDA1OT48VTAwNUQ+IgorCislIFN5bnRheCBvbiBVbmljb2RlIFJlZ3VsYXIgRXhwcmVzc2lvbiBHdWlkZWxpbmVzIFRSIzE4CislIHllc2V4cHIgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA3OT48VTAwNTk+PFUwMDVEPiIKKworJQorJSBeW25OXSAgLS0+IF5bdFRdCitub2V4cHIgICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNzQ+PFUwMDU0PjxVMDA1RD4iCisKKyUgU3ludGF4IG9uIFVuaWNvZGUgUmVndWxhciBFeHByZXNzaW9uIEd1aWRlbGluZXMgVFIjMTgKKyUgbm9leHByICAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+IgorJQorCislIFllcyAgICAgIFlhCit5ZXNzdHIgICAgICAiPFUwMDU5PjxVMDA2MT4iCislCislIE5vICAgICAgIFRpZGFrCitub3N0ciAgICAgICAiPFUwMDU0PjxVMDA2OT48VTAwNjQ+PFUwMDYxPjxVMDA2Qj4iCislCitFTkQgTENfTUVTU0FHRVMKKworCitMQ19QQVBFUgorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19QQVBFUiBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgoraGVpZ2h0ICAgICAgMjk3Cit3aWR0aCAgICAgICAyMTAKKworRU5EIExDX1BBUEVSCisKKworTENfTkFNRQorJSAgRWRpdGVkIEJ5IEhhbmQgYnkgSGFzYnVsbGFoIFBpdCA8c2Vib2xAaWtobGFzLmNvbT4KKyUgbmFtZV9tciA9IEVuY2lrLCBuYW1lX21ycyA9IFB1YW4gLCBuYW1lX21pc3MgPSBDaWsgbmFtZV9tcz0gQ2lrL1B1YW4KK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDcwPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+IgorbmFtZV9nZW4gICAgIiIKK25hbWVfbXIgICAgICI8VTAwNDU+PFUwMDY1PjxVMDA2Mz48VTAwNjk+PFUwMDZCPiIKK25hbWVfbXJzICAgICI8VTAwNTA+PFUwMDc1PjxVMDA2MT48VTAwNkU+IgorbmFtZV9taXNzICAgIjxVMDA2Mz48VTAwNjk+PFUwMDZCPiIKK25hbWVfbXMgICAgICI8VTAwNjM+PFUwMDY5PjxVMDA2Qj48VTAwMkY+PFUwMDUwPjxVMDA3NT48VTAwNjE+PFUwMDZFPiIKKworRU5EIExDX05BTUUKKworCitMQ19BRERSRVNTCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX0FERFJFU1MgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KK3Bvc3RhbF9mbXQgICI8VTAwMjU+PFUwMDdBPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDczPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA2NT48VTAwMjU+PFUwMDcyPiIKKworY291bnRyeV9hYjIgIjxVMDA0RD48VTAwNTk+IgorY291bnRyeV9hYjMgIjxVMDA0RD48VTAwNTk+PFUwMDUzPiIKK2NvdW50cnlfbnVtIDQ1OAorRU5EIExDX0FERFJFU1MKKworCitMQ19URUxFUEhPTkUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfVEVMRVBIT05FCislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCit0ZWxfaW50X2ZtdCAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAzQj48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwM0I+PFUwMDI1PjxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDM2PjxVMDAzMD4iCisKK0VORCBMQ19URUxFUEhPTkUKKworCitMQ19NRUFTVVJFTUVOVAorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19NRUFTVVJFTUVOVAorJSBjYXRlZ29yeSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorbWVhc3VyZW1lbnQgMQorCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL210X01UIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvbXRfTVQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg4MmRlNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL210X01UCkBAIC0wLDAgKzEsMzA4IEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKyUgTWFsdGVzZSBsYW5ndWFnZSBsb2NhbGUgZm9yIE1hbHRhLgorJSBDb250cmlidXRlZCBieSBLZW50YXJvaCBOb2ppIDxrbm9qaUBqcC5pYm0uY29tPiBhbmQKKyUgVGV0c3VqaSBPcml0YSA8b3JpdGFAanAuaWJtLmNvbT4uCislCislIGNvbGxhdGluZyBvcmRlciBjaGFuZ2VzIGJ5IFJhbW9uIENhc2hhIDxyYW1vbi5jYXNoYUBsaW51eC5vcmcubXQ+CislIGFuZCBQYWJsbyBTYXJhdHhhZ2EgPHBhYmxvQG1hbmRyYWtlc29mdC5jb20+IC0tIDIwMDItMDUtMDgKKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIk1hbHRlc2UgbGFuZ3VhZ2UgbG9jYWxlIGZvciBNYWx0YSIKK3NvdXJjZSAgICAgIklCTSBHbG9iYWxpemF0aW9uIENlbnRlciBvZiBDb21wZXRlbmN5LCBZYW1hdG8gU29mdHdhcmUgTGFib3JhdG9yeSIKK2FkZHJlc3MgICAgIjE2MjMtMTQsIFNoaW1vdHN1cnVtYSwgWWFtYXRvLXNoaSwgS2FuYWdhd2Eta2VuLCAyNDItODUwMiwgSmFwYW4iCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiTWFsdGVzZSIKK3RlcnJpdG9yeSAgIm1hbHRhIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNy0yMCIKKyUKK2NhdGVnb3J5ICAibXRfTVQ6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAibXRfTVQ6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAibXRfTVQ6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJtdF9NVDoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgIm10X01UOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAibXRfTVQ6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAibXRfTVQ6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAibXRfTVQ6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAibXRfTVQ6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJtdF9NVDoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgIm10X01UOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorCislIGEgYiBjIGMuIGQgZSBmIGcuIGcgZ2gvIGggaC8gaSBpZSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHouIHoKKworJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEKK2NvcHkgImlzbzE0NjUxX3QxIgorCitjb2xsYXRpbmctc3ltYm9sIDxjLj4KK2NvbGxhdGluZy1zeW1ib2wgPGcuPgorY29sbGF0aW5nLXN5bWJvbCA8aC0+Citjb2xsYXRpbmctc3ltYm9sIDx6Lj4KKworY29sbGF0aW5nLXN5bWJvbCAgPGctaC0tbXQ+Citjb2xsYXRpbmctZWxlbWVudCA8Ry1ILT4gZnJvbSAiPFUwMDQ3PjxVMDEyNj4iCitjb2xsYXRpbmctZWxlbWVudCA8Zy1oLT4gZnJvbSAiPFUwMDY3PjxVMDEyNz4iCitjb2xsYXRpbmctZWxlbWVudCA8Ry1oLT4gZnJvbSAiPFUwMDQ3PjxVMDEyNz4iCitjb2xsYXRpbmctZWxlbWVudCA8Zy1ILT4gZnJvbSAiPFUwMDY3PjxVMDEyNj4iCisKK2NvbGxhdGluZy1zeW1ib2wgIDxpLWUtbXQ+Citjb2xsYXRpbmctZWxlbWVudCA8SS1FPiBmcm9tICI8VTAwNDk+PFUwMDQ1PiIKK2NvbGxhdGluZy1lbGVtZW50IDxpLWU+IGZyb20gIjxVMDA2OT48VTAwNjU+IgorY29sbGF0aW5nLWVsZW1lbnQgPEktZT4gZnJvbSAiPFUwMDQ5PjxVMDA2NT4iCitjb2xsYXRpbmctZWxlbWVudCA8aS1FPiBmcm9tICI8VTAwNjk+PFUwMDQ1PiIKKworY29sbGF0aW5nLXN5bWJvbCA8Q0FQLU1JTj4KK2NvbGxhdGluZy1zeW1ib2wgPE1JTi1DQVA+CisKK3Jlb3JkZXItYWZ0ZXIgPE1JTj4KKzxNSU4tQ0FQPgorcmVvcmRlci1hZnRlciA8Q0FQPgorPENBUC1NSU4+CisKK3Jlb3JkZXItYWZ0ZXIgPGM+Cis8Yy4+CityZW9yZGVyLWFmdGVyIDxmPgorPGcuPgorcmVvcmRlci1hZnRlciA8Zz4KKzxnLWgtLW10PgorcmVvcmRlci1hZnRlciA8aD4KKzxoLT4KK3Jlb3JkZXItYWZ0ZXIgPGk+Cis8aS1lLW10PgorcmVvcmRlci1hZnRlciA8eT4KKzx6Lj4KKworcmVvcmRlci1hZnRlciA8VTAwNjM+Cis8VTAxMEI+IDxjLj47PFBDVD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0Mz4KKzxVMDEwQT4gPGMuPjs8UENUPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNjY+Cis8VTAxMjE+IDxnLj47PFBDVD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0Nj4KKzxVMDEyMD4gPGcuPjs8UENUPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNjc+Cis8Zy1oLT4gIDxnLWgtLW10Pjs8UENMPjs8TUlOPjtJR05PUkUKKzxnLUgtPiAgPGctaC0tbXQ+OzxQQ0w+OzxNSU4tQ0FQPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDQ3PgorPEctSC0+ICA8Zy1oLS1tdD47PFBDTD47PENBUD47SUdOT1JFCis8Ry1oLT4gIDxnLWgtLW10Pjs8UENMPjs8Q0FQLU1JTj47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDY4PgorPFUwMTI3PiA8aC0+OzxPQkw+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNDg+Cis8VTAxMjY+IDxoLT47PE9CTD47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDY5PgorPGktZT4gIDxpLWUtbXQ+OzxQQ0w+OzxNSU4+O0lHTk9SRQorPGktRT4gIDxpLWUtbXQ+OzxQQ0w+OzxNSU4tQ0FQPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDQ5PgorPEktRT4gIDxpLWUtbXQ+OzxQQ0w+OzxDQVA+O0lHTk9SRQorPEktZT4gIDxpLWUtbXQ+OzxQQ0w+OzxDQVAtTUlOPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNzk+Cis8VTAxN0M+IDx6Lj47PFBDVD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA1OT4KKzxVMDE3Qj4gPHouPjs8UENUPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1lbmQKKworRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gdGhlIExDX01PTkVUQVJZIGNhdGVnb3J5CislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRlZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUuCislCitpbnRfY3Vycl9zeW1ib2wgICAgICAgIjxVMDA0RD48VTAwNTQ+PFUwMDRDPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgIjxVMDA0Qz48VTAwNkQ+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgIDMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgIDAKK25fY3NfcHJlY2VkZXMgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgMAorcF9zaWduX3Bvc24gICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAwCislCitFTkQgTENfTU9ORVRBUlkKKworCitMQ19OVU1FUklDCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTlVNRVJJQyBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkZWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlLgorJQorZGVjaW1hbF9wb2ludCAgICAgICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgIjxVMDAyQz4iCitncm91cGluZyAgICAgICAgICAgICAgIDMKKyUKK0VORCBMQ19OVU1FUklDCisKKworTENfVElNRQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX1RJTUUgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS4KKyUKKyUgQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyAoJWEpCithYmRheSAgICAgICAiPFUwMTI2PjxVMDA2MT48VTAwNjQ+IjsiPFUwMDU0PjxVMDA2RT48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA2Qz48VTAwNjk+IjsiPFUwMDQ1PjxVMDA3Mj48VTAwNjI+IjsvCisgICAgICAgICAgICAiPFUwMTI2PjxVMDA2MT48VTAwNkQ+IjsiPFUwMTIwPjxVMDA2OT48VTAwNkQ+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2OT48VTAwNjI+IgorJQorJSBGdWxsIHdlZWtkYXkgbmFtZXMgKCVBKQorZGF5ICAgICAgICAgIjxVMDA2OT48VTAwNkM+PFUwMDJEPjxVMDEyNj48VTAwNjE+PFUwMDY0PjxVMDA2ND4iOy8KKyAgICAgICAgICAgICI8VTAwNjk+PFUwMDc0PjxVMDAyRD48VTAwNTQ+PFUwMDZFPjxVMDA2NT48VTAwNkE+PFUwMDZFPiI7LworICAgICAgICAgICAgIjxVMDA2OT48VTAwNzQ+PFUwMDJEPjxVMDA1ND48VTAwNkM+PFUwMDY5PjxVMDA2NT48VTAwNzQ+PFUwMDYxPiI7LworICAgICAgICAgICAgIjxVMDA2Qz48VTAwMkQ+PFUwMDQ1PjxVMDA3Mj48VTAwNjI+PFUwMDY3PjxVMDEyNz48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDY5PjxVMDA2Qz48VTAwMkQ+PFUwMTI2PjxVMDA2MT48VTAwNkQ+PFUwMDY5PjxVMDA3Mz4iOy8KKyAgICAgICAgICAgICI8VTAwNjk+PFUwMDZDPjxVMDAyRD48VTAxMjA+PFUwMDY5PjxVMDA2RD48VTAwNjc+PFUwMTI3PjxVMDA2MT4iOy8KKyAgICAgICAgICAgICI8VTAwNjk+PFUwMDczPjxVMDAyRD48VTAwNTM+PFUwMDY5PjxVMDA2Mj48VTAwNzQ+IgorJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCithYm1vbiAgICAgICAiPFUwMDRBPjxVMDA2MT48VTAwNkU+IjsiPFUwMDQ2PjxVMDA3Mj48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzI+IjsiPFUwMDQxPjxVMDA3MD48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2NT48VTAwNkE+IjsiPFUwMTIwPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDRDPjxVMDA3NT48VTAwNkM+IjsiPFUwMDQxPjxVMDA3Nz48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNzQ+IjsiPFUwMDRGPjxVMDA3ND48VTAwNzQ+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDQ0PjxVMDA2OT48VTAxMEI+IgorJQorJSBGdWxsIG1vbnRoIG5hbWVzICglQikKK21vbiAgICAgICAgICI8VTAwNEE+PFUwMDYxPjxVMDA2RT48VTAwNkU+PFUwMDYxPjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNDY+PFUwMDcyPjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzI+PFUwMDdBPjxVMDA3NT4iOy8KKyAgICAgICAgICAgICI8VTAwNDE+PFUwMDcwPjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjU+PFUwMDZBPjxVMDA2QT48VTAwNzU+IjsvCisgICAgICAgICAgICAiPFUwMTIwPjxVMDA3NT48VTAwNkU+PFUwMDZBPjxVMDA3NT4iOy8KKyAgICAgICAgICAgICI8VTAwNEM+PFUwMDc1PjxVMDA2Qz48VTAwNkE+PFUwMDc1PiI7LworICAgICAgICAgICAgIjxVMDA0MT48VTAwNzc+PFUwMDY5PjxVMDA3Mz48VTAwNzM+PFUwMDc1PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDc0PjxVMDA3ND48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDc1PiI7LworICAgICAgICAgICAgIjxVMDA0Rj48VTAwNzQ+PFUwMDc0PjxVMDA3NT48VTAwNjI+PFUwMDcyPjxVMDA3NT4iOy8KKyAgICAgICAgICAgICI8VTAwNEU+PFUwMDZGPjxVMDA3Nj48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDc1PiI7LworICAgICAgICAgICAgIjxVMDA0ND48VTAwNjk+PFUwMTBCPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNzU+PFUwMDIwPiIKKyUKKyUgRXF1aXZhbGVudCBvZiBBTSBQTQorYW1fcG0gICAgICAgIiI7IiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbgorJSAlQSwgJWQgdGEgJWIsICVZJUk6JU06JVMgICVaCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA0MT48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDA3ND4vCis8VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+LworPFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPi8KKzxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbgorJSAlQSwgJWQgdGEgJWIsICVZCitkX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA0MT48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDA3ND4vCis8VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKKyUKKyUgQXBwcm9wcmlhdGUgdGltZSByZXByZXNlbnRhdGlvbgorJSAlSTolTTolUyAgJVoKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPi8KKzxVMDAyMD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIDEyIGggdGltZSByZXByZXNlbnRhdGlvbiAoJXIpCit0X2ZtdF9hbXBtICAiPFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA3MD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKGRhdGUoMSkpICAgIiVhICViICVlICVIOiVNOiVTICVaICVZIgorZGF0ZV9mbXQgICAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworCitMQ19NRVNTQUdFUworJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX01FU1NBR0VTIGNhdGVnb3J5CislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRpZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUuCislCislIF4oWWVzfFt5WV0pCit5ZXNleHByICAgICAiPFUwMDVFPjxVMDAyOD48VTAwNTk+PFUwMDY1PjxVMDA3Mz48VTAwN0M+PFUwMDVCPjxVMDA3OT4vCis8VTAwNTk+PFUwMDVEPjxVMDAyOT4iCislCislIF4oTm98W25OXSkKK25vZXhwciAgICAgICI8VTAwNUU+PFUwMDI4PjxVMDA0RT48VTAwNkY+PFUwMDdDPjxVMDA1Qj48VTAwNkU+PFUwMDRFPi8KKzxVMDA1RD48VTAwMjk+IgorJQorRU5EIExDX01FU1NBR0VTCisKKworTENfUEFQRVIKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfUEFQRVIgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KK2hlaWdodCAgICAgIDI5Nword2lkdGggICAgICAgMjEwCisKK0VORCBMQ19QQVBFUgorCisKK0xDX05BTUUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTkFNRSBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorJQorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNzA+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2Nz4iCituYW1lX2dlbiAgICAiIgorbmFtZV9tciAgICAgIjxVMDA0RD48VTAwNzI+PFUwMDJFPiIKK25hbWVfbXJzICAgICI8VTAwNEQ+PFUwMDcyPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9taXNzICAgIjxVMDA0RD48VTAwNjk+PFUwMDczPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9tcyAgICAgIjxVMDA0RD48VTAwNzM+PFUwMDJFPiIKKworRU5EIExDX05BTUUKKworCitMQ19BRERSRVNTCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX0FERFJFU1MgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KK3Bvc3RhbF9mbXQgICI8VTAwMjU+PFUwMDdBPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDczPi8KKzxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA2NT48VTAwMjU+PFUwMDcyPiIKKworY291bnRyeV9hYjIgIjxVMDA0RD48VTAwNTQ+IgorY291bnRyeV9hYjMgIjxVMDA0RD48VTAwNEM+PFUwMDU0PiIKK2NvdW50cnlfbnVtIDQ3MAorRU5EIExDX0FERFJFU1MKKworCitMQ19URUxFUEhPTkUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfVEVMRVBIT05FCislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCit0ZWxfaW50X2ZtdCAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAzQj48VTAwMjU+PFUwMDYxPjxVMDAyMD4vCis8VTAwM0I+PFUwMDI1PjxVMDA2Qz4iCisKK0VORCBMQ19URUxFUEhPTkUKKworCitMQ19NRUFTVVJFTUVOVAorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19NRUFTVVJFTUVOVAorJSBjYXRlZ29yeSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorbWVhc3VyZW1lbnQgMQorCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL25iX05PIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvbmJfTk8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYwNDY3NgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL25iX05PCkBAIC0wLDAgKzEsMjQ0IEBACitlc2NhcGVfY2hhcgkvCitjb21tZW50X2NoYXIgICAgJQorCislIE5vcndlZ2lhbiBsYW5ndWFnZSBsb2NhbGUgZm9yIE5vcndheQorJSBTb3VyY2U6IE5vcnNrIFN0YW5kYXJkaXNlcmluZ3Nmb3JidW5kCislIEFkZHJlc3M6IFVuaXZlcnNpdHkgTGlicmFyeSwKKyUgICBEcmFtbWVuc3ZlaWVuIDQxLCBOLTkyNDIgT3NsbywgTm9yZ2UKKyUgQ29udGFjdDogS29sYmpvZXJuIEFhbWJvZQorJSBUZWw6ICs0NyAtIDIyODU5MTA5CislIEZheDogKzQ3IC0gMjI0MzQ0OTcKKyUgRW1haWw6IGtvbGJqb3JuLmFhbWJvQHVzaXQudWlvLm5vCislIExhbmd1YWdlOiBubworJSBUZXJyaXRvcnk6IE5PCislIFJldmlzaW9uOiA0LjMKKyUgRGF0ZTogMTk5Ni0xMC0xNQorJSBBcHBsaWNhdGlvbjogZ2VuZXJhbAorJSBVc2VyczogZ2VuZXJhbAorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiTm9yd2VnaWFuIChCb2ttYWwpIGxvY2FsZSBmb3IgTm9yd2F5Igorc291cmNlICAgICAiTm9yc2sgU3RhbmRhcmRpc2VyaW5nc2ZvcmJ1bmQiCithZGRyZXNzICAgICJVbml2ZXJzaXR5IExpYnJhcnksIERyYW1tZW5zdmVpZW4gNDEsIE4tOTI0MiBPc2xvLCBOb3JnZSIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJOb3J3ZWdpYW4sIEJva208VTAwRTU+bCIKK3RlcnJpdG9yeSAgIk5vcndheSIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjkiCislCitjYXRlZ29yeSAgIm5iX05POjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgIm5iX05POjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgIm5iX05POjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAibmJfTk86MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJuYl9OTzoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgIm5iX05POjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgIm5iX05POjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgIm5iX05POjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgIm5iX05POjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAibmJfTk86MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJuYl9OTzoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorCitjb2xsYXRpbmctZWxlbWVudCA8QS1BPiBmcm9tICI8VTAwNDE+PFUwMDQxPiIKK2NvbGxhdGluZy1lbGVtZW50IDxhLWE+IGZyb20gIjxVMDA2MT48VTAwNjE+IgorY29sbGF0aW5nLWVsZW1lbnQgPEEtYT4gZnJvbSAiPFUwMDQxPjxVMDA2MT4iCitjb2xsYXRpbmctZWxlbWVudCA8YS1BPiBmcm9tICI8VTAwNjE+PFUwMDQxPiIKK2NvbGxhdGluZy1zeW1ib2wgPENBUC1NSU4+Citjb2xsYXRpbmctc3ltYm9sIDxNSU4tQ0FQPgorY29sbGF0aW5nLXN5bWJvbCA8YWU+Citjb2xsYXRpbmctc3ltYm9sIDxvLXN0cm9rZT4KK2NvbGxhdGluZy1zeW1ib2wgPGEtcmluZz4KK2NvbGxhdGluZy1zeW1ib2wgPEVUSD4KKworcmVvcmRlci1hZnRlciA8UkVTLTE+Cis8Q0FQPgorPENBUC1NSU4+Cis8TUlOLUNBUD4KKworcmVvcmRlci1hZnRlciA8T0JMPgorPEVUSD4KKworcmVvcmRlci1hZnRlciA8ej4KKzxhZT4KKzxvLXN0cm9rZT4KKzxhLXJpbmc+CisKK3Jlb3JkZXItYWZ0ZXIgPFUwMTc4PgorPFUwMERDPiA8eT47PFUwMERDPjs8Q0FQPjtJR05PUkUKKzxVMDE3MD4gPHk+OzxVMDE3MD47PENBUD47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDBGRj4KKzxVMDBGQz4gPHk+OzxVMDBEQz47PE1JTj47SUdOT1JFCis8VTAxNzE+IDx5Pjs8VTAxNzA+OzxNSU4+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDE3Qj4KKzxVMDBDNj4gPGFlPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDFGQz4gPGFlPjs8QUNBPjs8Q0FQPjtJR05PUkUKKzxVMDFFMj4gPGFlPjs8TUFDPjs8Q0FQPjtJR05PUkUKKzxVMDBDND4gPGFlPjs8UENMPjs8Q0FQPjtJR05PUkUKKzxVMDBEOD4gPG8tc3Ryb2tlPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDFGRT4gPG8tc3Ryb2tlPjs8QUNBPjs8Q0FQPjtJR05PUkUKKzxVMDBENj4gPG8tc3Ryb2tlPjs8UkVVPjs8Q0FQPjtJR05PUkUKKzxVMDE1MD4gPG8tc3Ryb2tlPjs8REFDPjs8Q0FQPjtJR05PUkUKKzxVMDBDNT4gPGEtcmluZz47PEJBUz47PENBUD47SUdOT1JFCis8QS1BPiAgIDxhLXJpbmc+OzxBLUE+OzxDQVA+O0lHTk9SRQorPEEtYT4gICA8YS1yaW5nPjs8QS1BPjs8Q0FQLU1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDE3Qz4KKzxVMDBFNj4gPGFlPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDFGRD4gPGFlPjs8QUNBPjs8TUlOPjtJR05PUkUKKzxVMDFFMz4gPGFlPjs8TUFDPjs8TUlOPjtJR05PUkUKKzxVMDBFND4gPGFlPjs8UENMPjs8TUlOPjtJR05PUkUKKzxVMDBGOD4gPG8tc3Ryb2tlPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDFGRj4gPG8tc3Ryb2tlPjs8QUNBPjs8TUlOPjtJR05PUkUKKzxVMDBGNj4gPG8tc3Ryb2tlPjs8UkVVPjs8TUlOPjtJR05PUkUKKzxVMDE1MT4gPG8tc3Ryb2tlPjs8REFDPjs8TUlOPjtJR05PUkUKKzxVMDBFNT4gPGEtcmluZz47PEJBUz47PE1JTj47SUdOT1JFCis8YS1BPiAgIDxhLXJpbmc+OzxBLUE+OzxNSU4tQ0FQPjtJR05PUkUKKzxhLWE+ICAgPGEtcmluZz47PEEtQT47PE1JTj47SUdOT1JFCisKKyUgIFByZXNlbnQgaW4gaXNvMTQ2NTFfdDEsIGJ1dCB0aGVzZSBkZWZpbml0aW9ucyBzZWVtIHRvIGhhdmUgYmVlbgorJSAgcmVtb3ZlZCBmcm9tIGxhdGVzdCBpc28xNDY1MSB0YWJsZXMuCityZW9yZGVyLWFmdGVyIDxVMDE2Mj4KKzxVMDBERT4gIjx0PjxoPiI7IjxMSUc+PExJRz4iOyI8Q0FQPjxDQVA+IjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMTYzPgorPFUwMEZFPiAiPHQ+PGg+IjsiPExJRz48TElHPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA2ND4KKzxVMDExMD4gPGQ+OzxPQkw+OzxDQVA+O0lHTk9SRQorPFUwMEQwPiA8ZD47PEVUSD47PENBUD47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0ND4KKzxVMDExMT4gPGQ+OzxPQkw+OzxNSU4+O0lHTk9SRQorPFUwMEYwPiA8ZD47PEVUSD47PE1JTj47SUdOT1JFCisKK3Jlb3JkZXItZW5kCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAiPFUwMDRFPjxVMDA0Rj48VTAwNEI+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICI8VTAwNkI+PFUwMDcyPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAgICI8VTAwMkM+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgIjxVMDBBMD4iCittb25fZ3JvdXBpbmcgICAgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgIDAKK25fY3NfcHJlY2VkZXMgICAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAgIDAKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgIDQKK25fc2lnbl9wb3NuICAgICAgICAgICAgIDQKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgICI8VTAwQTA+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAgMzszCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICAgICAiPFUwMDczPjxVMDBGOD48VTAwMkU+IjsiPFUwMDZEPjxVMDA2MT48VTAwMkU+IjsvCisgICAgICAgICAgICAiPFUwMDc0PjxVMDA2OT48VTAwMkU+IjsiPFUwMDZGPjxVMDA2RT48VTAwMkU+IjsvCisgICAgICAgICAgICAiPFUwMDc0PjxVMDA2Rj48VTAwMkU+IjsiPFUwMDY2PjxVMDA3Mj48VTAwMkU+IjsvCisgICAgICAgICAgICAiPFUwMDZDPjxVMDBGOD48VTAwMkU+IgorZGF5ICAgICAgICAgIjxVMDA3Mz48VTAwRjg+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAgICAgIjxVMDA3ND48VTAwNjk+PFUwMDcyPjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA2Nz4iOy8KKyAgICAgICAgICAgICI8VTAwNkY+PFUwMDZFPjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA2Nz4iOy8KKyAgICAgICAgICAgICI8VTAwNzQ+PFUwMDZGPjxVMDA3Mj48VTAwNzM+PFUwMDY0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICAgICAiPFUwMDY2PjxVMDA3Mj48VTAwNjU+PFUwMDY0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICAgICAiPFUwMDZDPjxVMDBGOD48VTAwNzI+PFUwMDY0PjxVMDA2MT48VTAwNjc+IgorYWJtb24gICAgICAgIjxVMDA2QT48VTAwNjE+PFUwMDZFPjxVMDAyRT4iOyI8VTAwNjY+PFUwMDY1PjxVMDA2Mj48VTAwMkU+IjsvCisgICAgICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMDczPiI7IjxVMDA2MT48VTAwNzA+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNjk+IjsiPFUwMDZBPjxVMDA3NT48VTAwNkU+PFUwMDY5PiI7LworICAgICAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPjxVMDA2OT4iOyI8VTAwNjE+PFUwMDc1PjxVMDA2Nz48VTAwMkU+IjsvCisgICAgICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNzA+PFUwMDJFPiI7IjxVMDA2Rj48VTAwNkI+PFUwMDc0PjxVMDAyRT4iOy8KKyAgICAgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA3Nj48VTAwMkU+IjsiPFUwMDY0PjxVMDA2NT48VTAwNzM+PFUwMDJFPiIKK21vbiAgICAgICAgICI8VTAwNkE+PFUwMDYxPjxVMDA2RT48VTAwNzU+PFUwMDYxPjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNjY+PFUwMDY1PjxVMDA2Mj48VTAwNzI+PFUwMDc1PjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMDczPiI7LworICAgICAgICAgICAgIjxVMDA2MT48VTAwNzA+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkU+PFUwMDY5PiI7LworICAgICAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNjE+PFUwMDc1PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNkY+PFUwMDZCPjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNjQ+PFUwMDY1PjxVMDA3Mz48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiIKKyUgdXN1YWwgZGF0ZSByZXByZXNlbnRhdGlvbgorJSAlYSAlZC4gJWIgJVkga2wuICVILiVNICV6CitkX3RfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjA+PFUwMDI1PjxVMDA2Mj4vCis8VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDZCPjxVMDA2Qz48VTAwMkU+PFUwMDIwPjxVMDAyNT48VTAwNDg+LworPFUwMDJFPjxVMDAyNT48VTAwNEQ+PFUwMDIwPjxVMDAyNT48VTAwN0E+IgorJSAlZC4gJWIgJVkKK2RfZm10ICAiPFUwMDI1PjxVMDA2ND48VTAwMkU+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorJSBrbC4gJUguJU0gJXoKK3RfZm10ICAgICAgICAiPFUwMDZCPjxVMDA2Qz48VTAwMkU+PFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDJFPjxVMDAyNT4vCis8VTAwNEQ+PFUwMDIwPjxVMDAyNT48VTAwN0E+IgorYW1fcG0gICAgICAgIiI7IiIKK3RfZm10X2FtcG0gICIiCislICVhICVkLiAlYiAlSDolTTolUyAleiAlWQorZGF0ZV9mbXQgICAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDJFPjxVMDAyMD48VTAwMjU+LworPFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPi8KKzxVMDAyMD48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKKword2VlayAgICA3OzE5OTcxMjAxOzQKK2ZpcnN0X3dlZWtkYXkgMQorZmlyc3Rfd29ya2RheSAxCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDRBPjxVMDA2QT48VTAwNTk+PFUwMDc5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA0RT48VTAwNkU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCitoZWlnaHQgICAyOTcKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDZDPiIKK3RlbF9kb21fZm10ICAgICI8VTAwMjU+PFUwMDZDPiIKK2ludF9zZWxlY3QgICAgICI8VTAwMzA+PFUwMDMwPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzQ+PFUwMDM3PiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgIjxVMDA0RT48VTAwNEY+IgorY291bnRyeV9hYjMgIjxVMDA0RT48VTAwNEY+PFUwMDUyPiIKK2NvdW50cnlfbnVtIDU3OAorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL25kc19ERSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL25kc19ERQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzM3ZjMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvbmRzX0RFCkBAIC0wLDAgKzEsMTMxIEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMKKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICJMb3cobGFuZHMpIFNheG9uIExhbmd1YWdlIExvY2FsZSBmb3IgR2VybWFueSIKK3NvdXJjZSAiaW5mb3JtYXRpb24gZnJvbSBLZW5uZXRoIENocmlzdGlhbnNlbiIKK2FkZHJlc3MgIiIKK2NvbnRhY3QgIktlbm5ldGggQ2hyaXN0aWFuc2VuLCBQYWJsbyBTYXJhdHhhZ2EiCitlbWFpbCAia2VubmV0aEBnbnUub3JnLCBwYWJsb0BtYW5kcmFrZXNvZnQuY29tIgordGVsICIiCislIEZheAorbGFuZ3VhZ2UgIm5kcyIKK3RlcnJpdG9yeSAiREUiCityZXZpc2lvbiAiMC4xIgorZGF0ZSAiMjAwMy0xMS0zMCIKKworY2F0ZWdvcnkgaTE4bjoyMDAwO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSBpMThuOjIwMDA7TENfQ09MTEFURQorY2F0ZWdvcnkgaTE4bjoyMDAwO0xDX0NUWVBFCitjYXRlZ29yeSBpMThuOjIwMDA7TENfTUVTU0FHRVMKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19NT05FVEFSWQorY2F0ZWdvcnkgaTE4bjoyMDAwO0xDX05VTUVSSUMKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19USU1FCitjYXRlZ29yeSBpMThuOjIwMDA7TENfUEFQRVIKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19OQU1FCitjYXRlZ29yeSBpMThuOjIwMDA7TENfTUVBU1VSRU1FTlQKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19URUxFUEhPTkUKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19BRERSRVNTCisKKyUgSVNPL0lFQyAxNDY1MjogQ29udmVydGVkIGNvbW1lbnRzIHRvIExDX0lERU5USUZJQ0FUSU9OCislICBhZGRlZCBMQ19QQVBFUiwgTENfTUVBU1VSRU1FTlQsIExDX1RFTEVQSE9ORSwgTENfQUREUkVTUworJSAgY29waWVkIExDX01PTkVUQVJZLCBMQ19OVU1FUklDIGZyb20gZGVfREUgZm9yIHNpbXBsaWNpdHkKKyUgLS0gbWNraW5zdHJ5QGNvbXB1dGVyLm9yZywgMjAwMC0wNy0wMworCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfcG9zdCAgIjxVMDA0ND4iCitjb3VudHJ5X2FiMiAgICI8VTAwNDQ+PFUwMDQ1PiIKK2NvdW50cnlfYWIzICAgIjxVMDA0ND48VTAwNDU+PFUwMDU1PiIKK2NvdW50cnlfY2FyICAgIjxVMDA0ND4iCitjb3VudHJ5X251bSAyNzYKK2NvdW50cnlfaXNibiAiMyIKK2xhbmdfbmFtZSAiPFUwMDRFPjxVMDA2NT48VTAwNjQ+PFUwMDY0PjxVMDA2NT48VTAwNzI+PFUwMDczPjxVMDA2MT48VTAwNzM+PFUwMDczPjxVMDA2OT48VTAwNzM+PFUwMDYzPjxVMDA2OD4iCislbGFuZ19hYgorbGFuZ190ZXJtICI8VTAwNkU+PFUwMDY0PjxVMDA3Mz4iCitsYW5nX2xpYiAiPFUwMDZFPjxVMDA2ND48VTAwNzM+IgorRU5EIExDX0FERFJFU1MKKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAiZW5fREsiCitFTkQgTENfQ1RZUEUKKworTENfTUVTU0FHRVMKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDZBPjxVMDA0QT48VTAwNzk+PFUwMDU5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2NvcHkgImRlX0RFIgorRU5EIExDX01PTkVUQVJZCisKK0xDX1BBUEVSCitjb3B5ICJkZV9ERSIKK0VORCBMQ19QQVBFUgorCitMQ19OQU1FCitjb3B5ICJkZV9ERSIKK0VORCBMQ19OQU1FCisKK0xDX1RFTEVQSE9ORQorY29weSAiZGVfREUiCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJkZV9ERSIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OVU1FUklDCitjb3B5ICJkZV9ERSIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA1Mz48VTAwNjQ+PFUwMDYxPjxVMDA2Nz4iOyI8VTAwNEQ+PFUwMDYxPjxVMDA2MT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDY5PjxVMDA2RT48VTAwNjc+IjsiPFUwMDREPjxVMDA2OT48VTAwNjc+PFUwMDY3PiI7LworICAgICAgICAiPFUwMDQ0PjxVMDA3NT48VTAwNkU+PFUwMDZFPiI7IjxVMDA0Nj48VTAwNzI+PFUwMDY1PjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNzY+PFUwMDY0PjxVMDAyRT4iCitkYXkgICAgICI8VTAwNTM+PFUwMEZDPjxVMDA2RT48VTAwNkU+PFUwMDY0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA2MT48VTAwNkU+PFUwMDY0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDY5PjxVMDA2RT48VTAwNjc+PFUwMDczPjxVMDA2ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAiPFUwMDREPjxVMDA2OT48VTAwNjQ+PFUwMDY0PjxVMDA2NT48VTAwNzc+PFUwMDY1PjxVMDA2NT48VTAwNkI+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDc1PjxVMDA2RT48VTAwNkU+PFUwMDY1PjxVMDA3Mj48VTAwNzM+PFUwMDY0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNDY+PFUwMDcyPjxVMDA2NT48VTAwNjU+PFUwMDY0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMEZDPjxVMDA2RT48VTAwNkU+PFUwMDYxPjxVMDA3Nj48VTAwNjU+PFUwMDZFPjxVMDA2ND4iCithYm1vbiAgICI8VTAwNEE+PFUwMDYxPjxVMDA2RT4iOyI8VTAwNDY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwRTQ+PFUwMDcyPiI7IjxVMDA0MT48VTAwNzA+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNjk+IjsiPFUwMDRBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNDE+PFUwMDc1PjxVMDA2Nz4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA0Rj48VTAwNkI+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDQ0PjxVMDA2NT48VTAwN0E+IgorbW9uICAgICAiPFUwMDRBPjxVMDA2MT48VTAwNkU+PFUwMDZFPjxVMDA3NT48VTAwNjE+PFUwMDYxPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0Nj48VTAwNjU+PFUwMDYyPjxVMDA2NT48VTAwNzI+PFUwMDc3PjxVMDA2MT48VTAwNjE+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDREPjxVMDBFND48VTAwNzI+PFUwMDdBPiI7LworICAgICAgICAiPFUwMDQxPjxVMDA3MD48VTAwNzI+PFUwMDY5PjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkU+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkM+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDQxPjxVMDA3NT48VTAwNjc+PFUwMDc1PjxVMDA3Mz48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0Rj48VTAwNkI+PFUwMDc0PjxVMDA2Rj48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDc2PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDY1PjxVMDA3QT48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiIKK2RfdF9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDJFPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJFPjxVMDAyNT48VTAwNkQ+PFUwMDJFPjxVMDAyNT48VTAwNTk+IgordF9mbXQgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICIiOyIiCit0X2ZtdF9hbXBtICIiCit3ZWVrCTc7MTk5NzEyMDE7NAorZmlyc3Rfd2Vla2RheQkxCitmaXJzdF93b3JrZGF5CTEKK0VORCBMQ19USU1FCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9uZHNfTkwgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9uZHNfTkwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFhYzU4MwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL25kc19OTApAQCAtMCwwICsxLDEzMCBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAiTG93KGxhbmRzKSBTYXhvbiBMYW5ndWFnZSBMb2NhbGUgZm9yIHRoZSBOZXRoZXJsYW5kcyIKK3NvdXJjZSAiaW5mb3JtYXRpb24gZnJvbSBLZW5uZXRoIENocmlzdGlhbnNlbiIKK2FkZHJlc3MgIiIKK2NvbnRhY3QgIktlbm5ldGggQ2hyaXN0aWFuc2VuLCBQYWJsbyBTYXJhdHhhZ2EiCitlbWFpbCAia2VubmV0aEBnbnUub3JnLCBwYWJsb0BtYW5kcmFrZXNvZnQuY29tIgordGVsICIiCislIEZheAorbGFuZ3VhZ2UgIm5kcyIKK3RlcnJpdG9yeSAiTkwiCityZXZpc2lvbiAiMC4xIgorZGF0ZSAiMjAwMy0xMS0zMCIKKworY2F0ZWdvcnkgaTE4bjoyMDAwO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSBpMThuOjIwMDA7TENfQ09MTEFURQorY2F0ZWdvcnkgaTE4bjoyMDAwO0xDX0NUWVBFCitjYXRlZ29yeSBpMThuOjIwMDA7TENfTUVTU0FHRVMKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19NT05FVEFSWQorY2F0ZWdvcnkgaTE4bjoyMDAwO0xDX05VTUVSSUMKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19USU1FCitjYXRlZ29yeSBpMThuOjIwMDA7TENfUEFQRVIKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19OQU1FCitjYXRlZ29yeSBpMThuOjIwMDA7TENfTUVBU1VSRU1FTlQKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19URUxFUEhPTkUKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19BRERSRVNTCisKKyUgSVNPL0lFQyAxNDY1MjogQ29udmVydGVkIGNvbW1lbnRzIHRvIExDX0lERU5USUZJQ0FUSU9OCislICBhZGRlZCBMQ19QQVBFUiwgTENfTUVBU1VSRU1FTlQsIExDX1RFTEVQSE9ORSwgTENfQUREUkVTUworJSAgY29waWVkIExDX01PTkVUQVJZLCBMQ19OVU1FUklDIGZyb20gZGVfREUgZm9yIHNpbXBsaWNpdHkKKyUgLS0gbWNraW5zdHJ5QGNvbXB1dGVyLm9yZywgMjAwMC0wNy0wMworCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICI8VTAwNEU+PFUwMDRDPiIKK2NvdW50cnlfYWIzICI8VTAwNEU+PFUwMDRDPjxVMDA0ND4iCitjb3VudHJ5X2NhciAiPFUwMDRFPjxVMDA0Qz4iCitjb3VudHJ5X251bSA1MjgKK2NvdW50cnlfaXNibiAiMyIKK2xhbmdfbmFtZSAiPFUwMDRFPjxVMDA2NT48VTAwNjQ+PFUwMDY0PjxVMDA2NT48VTAwNzI+PFUwMDczPjxVMDA2MT48VTAwNzM+PFUwMDczPjxVMDA2OT48VTAwNzM+PFUwMDYzPjxVMDA2OD4iCislbGFuZ19hYgorbGFuZ190ZXJtICI8VTAwNkU+PFUwMDY0PjxVMDA3Mz4iCitsYW5nX2xpYiAiPFUwMDZFPjxVMDA2ND48VTAwNzM+IgorRU5EIExDX0FERFJFU1MKKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAiZW5fREsiCitFTkQgTENfQ1RZUEUKKworTENfTUVTU0FHRVMKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDZBPjxVMDA0QT48VTAwNzk+PFUwMDU5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2NvcHkgIm5sX05MIgorRU5EIExDX01PTkVUQVJZCisKK0xDX1BBUEVSCitjb3B5ICJubF9OTCIKK0VORCBMQ19QQVBFUgorCitMQ19OQU1FCitjb3B5ICJubF9OTCIKK0VORCBMQ19OQU1FCisKK0xDX1RFTEVQSE9ORQorY29weSAibmxfTkwiCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJubF9OTCIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OVU1FUklDCitjb3B5ICJubF9OTCIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA1Mz48VTAwNjQ+PFUwMDY3PiI7IjxVMDA0RD48VTAwNjQ+PFUwMDY3PiI7LworICAgICAgICAiPFUwMDQ0PjxVMDA3Mz48VTAwNjc+IjsiPFUwMDREPjxVMDA3Nz48VTAwNkI+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDY0PjxVMDA2Nz4iOyI8VTAwNDY+PFUwMDY0PjxVMDA2Nz4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNzc+PFUwMDY0PiIKK2RheSAgICAgIjxVMDA1Mz48VTAwNjk+PFUwMDZFPjxVMDA2RT48VTAwNjQ+PFUwMDYxPjxVMDA2Nz4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNkY+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAiPFUwMDQ0PjxVMDA2OT48VTAwNkU+PFUwMDY3PjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA2Nz4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjU+PFUwMDY0PjxVMDA2ND48VTAwNzc+PFUwMEU0PjxVMDA2MT48VTAwNkI+PFUwMDZBPiI7LworICAgICAgICAiPFUwMDQ0PjxVMDA2Rj48VTAwNkU+PFUwMDZFPjxVMDA2MT48VTAwNjQ+PFUwMDYxPjxVMDA2Nz4iOy8KKyAgICAgICAgIjxVMDA0Nj48VTAwNzI+PFUwMDY5PjxVMDA2NT48VTAwNjQ+PFUwMDYxPjxVMDA2Nz4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNjk+PFUwMDZFPjxVMDA2RT48VTAwNkY+PFUwMDc3PjxVMDA2NT48VTAwNkU+PFUwMDY0PiIKK2FibW9uICAgIjxVMDA0QT48VTAwNjE+PFUwMDZFPiI7IjxVMDA0Nj48VTAwNjU+PFUwMDYyPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2Rj48VTAwN0E+IjsiPFUwMDQxPjxVMDA3MD48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA2OT4iOyI8VTAwNEE+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZDPiI7IjxVMDA0MT48VTAwNzU+PFUwMDY3PiI7LworICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNzA+IjsiPFUwMDRGPjxVMDA2Qj48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNEU+PFUwMDZGPjxVMDA3Nz4iOyI8VTAwNDQ+PFUwMDY1PjxVMDA3QT4iCittb24gICAgICI8VTAwNEE+PFUwMDYxPjxVMDA3NT48VTAwNkU+PFUwMDc1PjxVMDA3Nz48VTAwNkY+PFUwMDYxPiI7LworICAgICAgICAiPFUwMDQ2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA3NT48VTAwNzc+PFUwMDZGPjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNkY+PFUwMDYxPjxVMDA3QT4iOy8KKyAgICAgICAgIjxVMDA0MT48VTAwNzA+PFUwMDcyPjxVMDA2NT48VTAwNkM+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2RT48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2Qz48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNDE+PFUwMDc1PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjE+PFUwMDZEPjxVMDA2Mj48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNEY+PFUwMDZCPjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDc3PjxVMDA2MT48VTAwNkQ+PFUwMDYyPjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA0ND48VTAwNjU+PFUwMDdBPjxVMDA2MT48VTAwNkQ+PFUwMDYyPjxVMDA2MT4iCitkX3RfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjU+PFUwMDZEPjxVMDAyRT48VTAwMjU+PFUwMDU5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAiIjsiIgordF9mbXRfYW1wbSAiIgord2Vlawk3OzE5OTcxMjAxOzQKK2ZpcnN0X3dlZWtkYXkJMQorZmlyc3Rfd29ya2RheQkxCitFTkQgTENfVElNRQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvbmVfTlAgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9uZV9OUApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzI2MTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvbmVfTlAKQEAgLTAsMCArMSwyMTYgQEAKK2NvbW1lbnRfY2hhciAgICAlCitlc2NhcGVfY2hhciAgICAgLworJSBOZXBhbGkgbGFuZ3VhZ2UgbG9jYWxlIGZvciBOZXBhbC4KKyUgQ29udHJpYnV0ZWQgYnkgUGF3YW4gQ2hpdHJha2FyIDxwY0BpbmZvLmNvbS5ucD4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIk5lcGFsaSBsYW5ndWFnZSBsb2NhbGUgZm9yIE5lcGFsIgorc291cmNlICAgICAiTWFkYW4gUHVyYXNrYXIgUHVzdGFrYWxheWEiCithZGRyZXNzICAgICJSYXRvIEJhbmdhbGEsIFBhdGFuIERob2thLExhbGl0cHVyLE5lcGFsIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiaW5mb0BtcHAub3JnLm5wIgordGVsICAgICAgICAiOTc3LTEtNTUyMTM5MyIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIk5lcGFsaSIKK3RlcnJpdG9yeSAgIk5lcGFsIgorcmV2aXNpb24gICAiMS4xIgorZGF0ZSAgICAgICAiMjAwMy0wNS0xMiIKKyUKK2NhdGVnb3J5ICAibmVfTlA6MjAwMyI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAibmVfTlA6MjAwMyI7TENfQ1RZUEUKK2NhdGVnb3J5ICAibmVfTlA6MjAwMyI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJuZV9OUDoyMDAzIjtMQ19USU1FCitjYXRlZ29yeSAgIm5lX05QOjIwMDMiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAibmVfTlA6MjAwMyI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAibmVfTlA6MjAwMyI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAibmVfTlA6MjAwMyI7TENfUEFQRVIKK2NhdGVnb3J5ICAibmVfTlA6MjAwMyI7TENfTkFNRQorY2F0ZWdvcnkgICJuZV9OUDoyMDAzIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgIm5lX05QOjIwMDMiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEKK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gdGhlIExDX01PTkVUQVJZIGNhdGVnb3J5LgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkaWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlL0phdmEKKyUKK2ludF9jdXJyX3N5bWJvbCAgICAgICAiPFUwMDQ5PjxVMDA0RT48VTAwNTI+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAiPFUwOTMwPjxVMDk0Mj4iCittb25fZGVjaW1hbF9wb2ludCAgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAgMworcG9zaXRpdmVfc2lnbiAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgIDEKKyUKK0VORCBMQ19NT05FVEFSWQorCisKK0xDX05VTUVSSUMKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OVU1FUklDICBjYXRlZ29yeS4KKyUKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgIjxVMDAyRT4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICI8VTAwMkM+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAzCislCitFTkQgTENfTlVNRVJJQworCisKK0xDX1RJTUUKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19USU1FIGNhdGVnb3J5LgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkaWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlL0phdmEKKyUKKyUgQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyAoJWEpCithYmRheSAgICAgICAiPFUwOTA2PjxVMDkwNz48VTA5MjQ+PFUwMDIwPiI7LworICAgICAgICAgICAgIjxVMDkzOD48VTA5NEI+PFUwOTJFPjxVMDAyMD4iOy8KKyAgICAgICAgICAgICI8VTA5MkU+PFUwOTAyPjxVMDkxNz48VTA5MzI+PFUwMDIwPiI7LworICAgICAgICAgICAgIjxVMDkyQz48VTA5NDE+PFUwOTI3PjxVMDAyMD4iOy8KKyAgICAgICAgICAgICI8VTA5MkM+PFUwOTNGPjxVMDkzOT48VTA5M0Y+PFUwMDIwPiI7LworICAgICAgICAgICAgIjxVMDkzNj48VTA5NDE+PFUwOTE1PjxVMDk0RD48VTA5MzA+PFUwMDIwPiI7LworICAgICAgICAgICAgIjxVMDkzNj48VTA5Mjg+PFUwOTNGPjxVMDAyMD4iCislCislIEZ1bGwgd2Vla2RheSBuYW1lcyAoJUEpCitkYXkgICAgICAgICAiPFUwOTA2PjxVMDkwNz48VTA5MjQ+PFUwOTJDPjxVMDkzRT48VTA5MzA+PFUwMDIwPiI7LworICAgICAgICAgICAgIjxVMDkzOD48VTA5NEI+PFUwOTJFPjxVMDkyQz48VTA5M0U+PFUwOTMwPjxVMDAyMD4iOy8KKyAgICAgICAgICAgICI8VTA5MkU+PFUwOTAyPjxVMDkxNz48VTA5MzI+PFUwOTJDPjxVMDkzRT48VTA5MzA+PFUwMDIwPiI7LworICAgICAgICAgICAgIjxVMDkyQz48VTA5NDE+PFUwOTI3PjxVMDkyQz48VTA5M0U+PFUwOTMwPjxVMDAyMD4iOy8KKyAgICAgICAgICAgICI8VTA5MkM+PFUwOTNGPjxVMDkzOT48VTA5M0Y+PFUwOTJDPjxVMDkzRT48VTA5MzA+PFUwMDIwPiI7LworICAgICAgICAgICAgIjxVMDkzNj48VTA5NDE+PFUwOTE1PjxVMDk0RD48VTA5MzA+PFUwOTJDPjxVMDkzRT48VTA5MzA+PFUwMDIwPiI7LworICAgICAgICAgICAgIjxVMDkzNj48VTA5Mjg+PFUwOTNGPjxVMDkyQz48VTA5M0U+PFUwOTMwPjxVMDAyMD4iCislCislIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzICglYikKK2FibW9uICAgICAgICI8VTA5MUM+PFUwOTI4PjxVMDkzNT48VTA5MzA+PFUwOTQwPiI7LworICAgICAgICAgICAgIjxVMDkyQj48VTA5M0M+PFUwOTMwPjxVMDkzNT48VTA5MzA+PFUwOTQwPiI7LworICAgICAgICAgICAgIjxVMDkyRT48VTA5M0U+PFUwOTMwPjxVMDk0RD48VTA5MUE+IjsvCisgICAgICAgICAgICAiPFUwOTA1PjxVMDkyQT48VTA5NEQ+PFUwOTMwPjxVMDk0Nz48VTA5MzI+IjsvCisgICAgICAgICAgICAiPFUwOTJFPjxVMDkwOD4iOyI8VTA5MUM+PFUwOTQyPjxVMDkyOD4iOy8KKyAgICAgICAgICAgICI8VTA5MUM+PFUwOTQxPjxVMDkzMj48VTA5M0U+PFUwOTA4PiI7LworICAgICAgICAgICAgIjxVMDkwNT48VTA5MTc+PFUwOTM4PjxVMDk0RD48VTA5MjQ+IjsvCisgICAgICAgICAgICAiPFUwOTM4PjxVMDkzRj48VTA5MjQ+PFUwOTJFPjxVMDk0RD48VTA5MkM+PFUwOTMwPiI7LworICAgICAgICAgICAgIjxVMDkwNT48VTA5MTU+PFUwOTREPjxVMDkxRj48VTA5NDI+PFUwOTJDPjxVMDkzMD4iOy8KKyAgICAgICAgICAgICI8VTA5Mjg+PFUwOTM1PjxVMDkyRT48VTA5NEQ+PFUwOTJDPjxVMDkzMD4iOy8KKyAgICAgICAgICAgICI8VTA5MjY+PFUwOTNGPjxVMDkzOD48VTA5MkU+PFUwOTREPjxVMDkyQz48VTA5MzA+IgorJQorJSBGdWxsIG1vbnRoIG5hbWVzICglQikKK21vbiAgICAgICAgICI8VTA5MUM+PFUwOTI4PjxVMDkzNT48VTA5MzA+PFUwOTQwPiI7LworICAgICAgICAgICAgIjxVMDkyQj48VTA5M0M+PFUwOTMwPjxVMDkzNT48VTA5MzA+PFUwOTQwPiI7LworICAgICAgICAgICAgIjxVMDkyRT48VTA5M0U+PFUwOTMwPjxVMDk0RD48VTA5MUE+IjsvCisgICAgICAgICAgICAiPFUwOTA1PjxVMDkyQT48VTA5NEQ+PFUwOTMwPjxVMDk0Nz48VTA5MzI+IjsvCisgICAgICAgICAgICAiPFUwOTJFPjxVMDkwOD4iOyI8VTA5MUM+PFUwOTQyPjxVMDkyOD4iOy8KKyAgICAgICAgICAgICI8VTA5MUM+PFUwOTQxPjxVMDkzMj48VTA5M0U+PFUwOTA4PiI7LworICAgICAgICAgICAgIjxVMDkwNT48VTA5MTc+PFUwOTM4PjxVMDk0RD48VTA5MjQ+IjsvCisgICAgICAgICAgICAiPFUwOTM4PjxVMDkzRj48VTA5MjQ+PFUwOTJFPjxVMDk0RD48VTA5MkM+PFUwOTMwPiI7LworICAgICAgICAgICAgIjxVMDkwNT48VTA5MTU+PFUwOTREPjxVMDkxRj48VTA5NDI+PFUwOTJDPjxVMDkzMD4iOy8KKyAgICAgICAgICAgICI8VTA5Mjg+PFUwOTM1PjxVMDkyRT48VTA5NEQ+PFUwOTJDPjxVMDkzMD4iOy8KKyAgICAgICAgICAgICI8VTA5MjY+PFUwOTNGPjxVMDkzOD48VTA5MkU+PFUwOTREPjxVMDkyQz48VTA5MzA+IgorJQorJSBFcXVpdmFsZW50IG9mIEFNIFBNCithbV9wbSAgICAgICAiPFUwOTJBPjxVMDk0Mj48VTA5MzA+PFUwOTREPjxVMDkzNT48VTA5M0U+PFUwOTM5PjxVMDk0RD48VTA5Mjg+IjsvCisgICAgICAgICAgICAiPFUwOTA1PjxVMDkyQT48VTA5MzA+PFUwOTNFPjxVMDkzOT48VTA5NEQ+PFUwOTI4PiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbgorJSAlQSAlZCAlYiAlWSVJOiVNOiVTICAlWgorZF90X2ZtdCAgICAgIjxVMDAyNT48VTAwNDE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+LworPFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPi8KKzxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNzA+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uCislICVBICVkICViICVZCitkX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA0MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj4vCis8VTAwMjA+PFUwMDI1PjxVMDA1OT4iCislCislIEFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJUk6JU06JVMgICVaCit0X2ZtdCAgICAgICAiPFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4vCis8VTAwMjA+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorJSBBcHByb3ByaWF0ZSAxMiBoIHRpbWUgcmVwcmVzZW50YXRpb24gKCVyKQordF9mbXRfYW1wbSAgIjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+LworPFUwMDIwPjxVMDAyNT48VTAwNzA+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorZGF0ZV9mbXQgICAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNzk+PFUwMDU5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworCitMQ19QQVBFUgorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19QQVBFUiBjYXRlZ29yeQoraGVpZ2h0ICAgICAgMjk3Cit3aWR0aCAgICAgICAyMTAKKworRU5EIExDX1BBUEVSCisKKworTENfTkFNRQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19OQU1FIGNhdGVnb3J5LgorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNzA+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2Nz4iCituYW1lX2dlbiAgICAiIgorbmFtZV9tciAgICAgIjxVMDA0RD48VTAwNzI+PFUwMDJFPiIKK25hbWVfbXJzICAgICI8VTAwNEQ+PFUwMDcyPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9taXNzICAgIjxVMDA0RD48VTAwNjk+PFUwMDczPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9tcyAgICAgIjxVMDA0RD48VTAwNzM+PFUwMDJFPiIKKworRU5EIExDX05BTUUKKworCitMQ19BRERSRVNTCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislIExDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICI8VTAwMjU+PFUwMDdBPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDczPi8KKzxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA2NT48VTAwMjU+PFUwMDcyPiIKKworY291bnRyeV9hYjIgIjxVMDA0RT48VTAwNTA+IgorY291bnRyeV9hYjMgIjxVMDA0RT48VTAwNTA+PFUwMDRDPiIKK2NvdW50cnlfbnVtIDUyNAorRU5EIExDX0FERFJFU1MKKworCitMQ19URUxFUEhPTkUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUKK3RlbF9pbnRfZm10ICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDNCPjxVMDAyNT48VTAwNjE+PFUwMDIwPi8KKzxVMDAzQj48VTAwMjU+PFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzk+PFUwMDMxPiIKKworRU5EIExDX1RFTEVQSE9ORQorCisKK0xDX01FQVNVUkVNRU5UCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislCittZWFzdXJlbWVudCAxCisKK0VORCBMQ19NRUFTVVJFTUVOVApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvbmxfQVcgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ubF9BVwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTYxOTc3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvbmxfQVcKQEAgLTAsMCArMSwxMDAgQEAKK2VzY2FwZV9jaGFyIC8KK2NvbW1lbnRfY2hhciAlCislIER1dGNoIGxhbmd1YWdlIGxvY2FsZSBmb3IgQXJ1YmEuCislIENvbnRyaWJ1dGVkIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDA4CisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJEdXRjaCBsYW5ndWFnZSBsb2NhbGUgZm9yIEFydWJhIgorc291cmNlICAgICAiRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIgorYWRkcmVzcyAgICAiNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQSIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJEdXRjaCIKK3RlcnJpdG9yeSAgIkFydWJhIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwOC0wOS0xNiIKKyUKK2NhdGVnb3J5ICAibmxfQVc6MjAwOCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAibmxfQVc6MjAwOCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAibmxfQVc6MjAwOCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJubF9BVzoyMDA4IjtMQ19USU1FCitjYXRlZ29yeSAgIm5sX0FXOjIwMDgiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAibmxfQVc6MjAwOCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAibmxfQVc6MjAwOCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAibmxfQVc6MjAwOCI7TENfUEFQRVIKK2NhdGVnb3J5ICAibmxfQVc6MjAwOCI7TENfTkFNRQorY2F0ZWdvcnkgICJubF9BVzoyMDA4IjtMQ19BRERSRVNTCitjYXRlZ29yeSAgIm5sX0FXOjIwMDgiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgIm5sX05MIgorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKK2NvcHkgIm5sX05MIgorRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgIjxVMDA0MT48VTAwNTc+PFUwMDQ3PjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICI8VTAwNDE+PFUwMDY2PjxVMDA2Qz48VTAwMkU+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAiPFUwMDJDPiIKK21vbl90aG91c2FuZHNfc2VwICAgIjxVMDAyMD4iCittb25fZ3JvdXBpbmcgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAyCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworY29weSAibmxfTkwiCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCitjb3B5ICJubF9OTCIKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCitjb3B5ICJubF9OTCIKK0VORCBMQ19NRVNTQUdFUworCitMQ19QQVBFUgorY29weSAiZW5fVVMiCitFTkQgTENfUEFQRVIKKworTENfTkFNRQorY29weSAibmxfTkwiCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICAgIjxVMDA0MT48VTAwNTc+IgorY291bnRyeV9hYjMgICAiPFUwMDQxPjxVMDA0Mj48VTAwNTc+IgorY291bnRyeV9udW0gICA1MzMKK0VORCBMQ19BRERSRVNTCisKK0xDX1RFTEVQSE9ORQorJSBGSVhNRQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzI+PFUwMDM5PjxVMDAzNz4iCitpbnRfc2VsZWN0ICAgICAiPFUwMDMwPjxVMDAzMT48VTAwMzE+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorY29weSAiZW5fVVMiCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL25sX0JFIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvbmxfQkUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNmM2UxYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL25sX0JFCkBAIC0wLDAgKzEsMTM1IEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgRHV0Y2ggTGFuZ3VhZ2UgTG9jYWxlIGZvciBCZWxnaXVtCislIFNvdXJjZTogUkFQCislIEFkZHJlc3M6IFNhbmt0IEpvLy9yZ2VucyBBbGxlIDgKKyUgICAgREstMTYxNSBLby8vYmVuaGF2biBWLCBEYW5tYXJrCislIENvbnRhY3Q6IEtlbGQgU2ltb25zZW4KKyUgRW1haWw6IEtlbGQuU2ltb25zZW5AZGt1dWcuZGsKKyUgVGVsOiArNDUgLSAzMTIyNjU0MworJSBGYXg6ICs0NSAtIDMxMjA1NTIxCislIExhbmd1YWdlOiBubAorJSBUZXJyaXRvcnk6IEJFCislIFJldmlzaW9uOiA0LjMKKyUgRGF0ZTogMTk5Ni0xMC0xNQorJSBVc2VyczogZ2VuZXJhbAorJSBSZXBlcnRvaXJlbWFwOiBtbmVtb25pYy5kcworJSBDaGFyc2V0OiBJU08tODg1OS0xCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJEdXRjaCBsb2NhbGUgZm9yIEJlbGdpdW0iCitzb3VyY2UgICAgICJSQVAiCithZGRyZXNzICAgICJTYW5rdCBKPFUwMEY4PnJnZW5zIEFsbGUgOCwgREstMTYxNSBLPFUwMEY4PmJlbmhhdm4gViwgRGFubWFyayIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJEdXRjaCIKK3RlcnJpdG9yeSAgIkJlbGdpdW0iCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA2LTI5IgorJQorY2F0ZWdvcnkgICJubF9CRToyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJubF9CRToyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJubF9CRToyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgIm5sX0JFOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAibmxfQkU6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJubF9CRToyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJubF9CRToyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJubF9CRToyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJubF9CRToyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgIm5sX0JFOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAibmxfQkU6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAibmxfTkwiCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCitFTkQgTENfQ09MTEFURQorCitMQ19NRVNTQUdFUworY29weSAibmxfTkwiCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2NvcHkgImZyX0JFIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgImZyX0JFIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorJSBjb3B5ICJubF9OTCIKK2FiZGF5ICAgIjxVMDA3QT48VTAwNkY+IjsiPFUwMDZEPjxVMDA2MT4iOyI8VTAwNjQ+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDc3PjxVMDA2Rj4iOyI8VTAwNjQ+PFUwMDZGPiI7IjxVMDA3Nj48VTAwNzI+IjsvCisgICAgICAgICI8VTAwN0E+PFUwMDYxPiIKK2RheSAgICAgIjxVMDA3QT48VTAwNkY+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNjE+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAiPFUwMDY0PjxVMDA2OT48VTAwNkU+PFUwMDczPjxVMDA2ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAiPFUwMDc3PjxVMDA2Rj48VTAwNjU+PFUwMDZFPjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA2Nz4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwNkY+PFUwMDZFPjxVMDA2ND48VTAwNjU+PFUwMDcyPjxVMDA2ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAiPFUwMDc2PjxVMDA3Mj48VTAwNjk+PFUwMDZBPjxVMDA2ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAiPFUwMDdBPjxVMDA2MT48VTAwNzQ+PFUwMDY1PjxVMDA3Mj48VTAwNjQ+PFUwMDYxPjxVMDA2Nz4iCithYm1vbiAgICI8VTAwNkE+PFUwMDYxPjxVMDA2RT4iOyI8VTAwNjY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNzI+PFUwMDc0PiI7IjxVMDA2MT48VTAwNzA+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2NT48VTAwNjk+IjsiPFUwMDZBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNjE+PFUwMDc1PjxVMDA2Nz4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA2Rj48VTAwNkI+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDY0PjxVMDA2NT48VTAwNjM+IgorbW9uICAgICAiPFUwMDZBPjxVMDA2MT48VTAwNkU+PFUwMDc1PjxVMDA2MT48VTAwNzI+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDY2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA3NT48VTAwNjE+PFUwMDcyPjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDYxPjxVMDA3Mj48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDcwPjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2NT48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2RT48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Qz48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDc1PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND48VTAwNzU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNzA+PFUwMDc0PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNkY+PFUwMDZCPjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA3Nj48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDY0PjxVMDA2NT48VTAwNjM+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iCitkX3RfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJEPjxVMDAyNT48VTAwNkQ+PFUwMDJEPjxVMDAyNT48VTAwNzk+IgordF9mbXQgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICIiOyIiCit0X2ZtdF9hbXBtICIiCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorY29weSAiZnJfQkUiCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCitjb3B5ICJmcl9CRSIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgImZyX0JFIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAiPFUwMDQyPjxVMDA0NT4iCitjb3VudHJ5X2FiMyAiPFUwMDQyPjxVMDA0NT48VTAwNEM+IgorY291bnRyeV9udW0gMDU2CitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvbmxfQkVAZXVybyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL25sX0JFQGV1cm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMzMzA1YwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL25sX0JFQGV1cm8KQEAgLTAsMCArMSw4MyBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIER1dGNoIExhbmd1YWdlIExvY2FsZSBmb3IgQmVsZ2l1bSB3aXRoIEV1cm8KKyUgTGFuZ3VhZ2U6IG5sCislIFRlcnJpdG9yeTogQkUKKyUgT3B0aW9uOiBldXJvCislIERhdGU6IDIwMDAtMDgtMjEKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogSVNPLTg4NTktMTUKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkR1dGNoIGxvY2FsZSBmb3IgQmVsZ2l1bSB3aXRoIEV1cm8iCitzb3VyY2UgICAgICJGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4iCithZGRyZXNzICAgICI1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkR1dGNoIgordGVycml0b3J5ICAiQmVsZ2l1bSIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDgtMjEiCislCitjYXRlZ29yeSAgIm5sX0JFQGV1cm86MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAibmxfQkVAZXVybzoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJubF9CRUBldXJvOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAibmxfQkVAZXVybzoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgIm5sX0JFQGV1cm86MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJubF9CRUBldXJvOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgIm5sX0JFQGV1cm86MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAibmxfQkVAZXVybzoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJubF9CRUBldXJvOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAibmxfQkVAZXVybzoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgIm5sX0JFQGV1cm86MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAibmxfQkUiCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCitFTkQgTENfQ09MTEFURQorCitMQ19NRVNTQUdFUworY29weSAibmxfQkUiCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2NvcHkgImZyX0JFQGV1cm8iCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworY29weSAibmxfQkUiCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCitjb3B5ICJubF9CRSIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCitjb3B5ICJubF9CRSIKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK2NvcHkgIm5sX0JFIgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorY29weSAibmxfQkUiCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorY29weSAibmxfQkUiCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitjb3B5ICJubF9CRSIKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ubF9OTCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL25sX05MCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MTljZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ubF9OTApAQCAtMCwwICsxLDE2NSBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIER1dGNoIExhbmd1YWdlIExvY2FsZSBmb3IgdGhlIE5ldGhlcmxhbmRzCislIFNvdXJjZTogUkFQCislIEFkZHJlc3M6IFNhbmt0IEpvLy9yZ2VucyBBbGxlIDgKKyUgICAgREstMTYxNSBLby8vYmVuaGF2biBWLCBEYW5tYXJrCislIENvbnRhY3Q6IEtlbGQgU2ltb25zZW4KKyUgRW1haWw6IEtlbGQuU2ltb25zZW5AZGt1dWcuZGsKKyUgVGVsOiArNDUgLSAzMTIyNjU0MworJSBGYXg6ICs0NSAtIDMxMjA1NTIxCislIExhbmd1YWdlOiBubAorJSBUZXJyaXRvcnk6IE5MCislIFJldmlzaW9uOiA0LjMKKyUgRGF0ZTogMTk5Ni0xMC0xNQorJSBVc2VyczogZ2VuZXJhbAorJSBDaGFyc2V0OiBJU08tODg1OS0xCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJEdXRjaCBsb2NhbGUgZm9yIHRoZSBOZXRoZXJsYW5kcyIKK3NvdXJjZSAgICAgIlJBUCIKK2FkZHJlc3MgICAgIlNhbmt0IEo8VTAwRjg+cmdlbnMgQWxsZSA4LCBESy0xNjE1IEs8VTAwRjg+YmVuaGF2biBWLCBEYW5tYXJrIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkR1dGNoIgordGVycml0b3J5ICAiTmV0aGVybGFuZHMiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA2LTI5IgorJQorY2F0ZWdvcnkgICJubF9OTDoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJubF9OTDoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJubF9OTDoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgIm5sX05MOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAibmxfTkw6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJubF9OTDoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJubF9OTDoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJubF9OTDoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJubF9OTDoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgIm5sX05MOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAibmxfTkw6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiaTE4biIKKwordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCitjb3B5ICJpc28xNDY1MV90MSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA2QT48VTAwNEE+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAgICI8VTAwNDU+PFUwMDU1PjxVMDA1Mj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICAgICAiPFUyMEFDPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAgICAgIjxVMDAyQz4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgICAgICI8VTAwMjA+IgorbW9uX2dyb3VwaW5nICAgICAgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAgICAgMgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgICAgIjxVMDAyQz4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICAgICIiCitncm91cGluZyAgICAgICAgICAgICAgICAgIDA7MAorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorYWJkYXkgICAiPFUwMDdBPjxVMDA2Rj4iOyI8VTAwNkQ+PFUwMDYxPiI7IjxVMDA2ND48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNzc+PFUwMDZGPiI7IjxVMDA2ND48VTAwNkY+IjsiPFUwMDc2PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA3QT48VTAwNjE+IgorZGF5ICAgICAiPFUwMDdBPjxVMDA2Rj48VTAwNkU+PFUwMDY0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA2MT48VTAwNkU+PFUwMDY0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNjQ+PFUwMDY5PjxVMDA2RT48VTAwNzM+PFUwMDY0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNzc+PFUwMDZGPjxVMDA2NT48VTAwNkU+PFUwMDczPjxVMDA2ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAiPFUwMDY0PjxVMDA2Rj48VTAwNkU+PFUwMDY0PjxVMDA2NT48VTAwNzI+PFUwMDY0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICI8VTAwNzY+PFUwMDcyPjxVMDA2OT48VTAwNkE+PFUwMDY0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICI8VTAwN0E+PFUwMDYxPjxVMDA3ND48VTAwNjU+PFUwMDcyPjxVMDA2ND48VTAwNjE+PFUwMDY3PiIKK2FibW9uICAgIjxVMDA2QT48VTAwNjE+PFUwMDZFPiI7IjxVMDA2Nj48VTAwNjU+PFUwMDYyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA3Mj48VTAwNzQ+IjsiPFUwMDYxPjxVMDA3MD48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDY1PjxVMDA2OT4iOyI8VTAwNkE+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPiI7IjxVMDA2MT48VTAwNzU+PFUwMDY3PiI7LworICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNzA+IjsiPFUwMDZGPjxVMDA2Qj48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA3Nj4iOyI8VTAwNjQ+PFUwMDY1PjxVMDA2Mz4iCittb24gICAgICI8VTAwNkE+PFUwMDYxPjxVMDA2RT48VTAwNzU+PFUwMDYxPjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNjY+PFUwMDY1PjxVMDA2Mj48VTAwNzI+PFUwMDc1PjxVMDA2MT48VTAwNzI+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNjE+PFUwMDcyPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNzA+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDY1PjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZFPjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNzU+PFUwMDY3PjxVMDA3NT48VTAwNzM+PFUwMDc0PjxVMDA3NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2Rj48VTAwNkI+PFUwMDc0PjxVMDA2Rj48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNjQ+PFUwMDY1PjxVMDA2Mz48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiIKK2RfdF9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkQ+PFUwMDI1PjxVMDA2RD48VTAwMkQ+PFUwMDI1PjxVMDA3OT4iCit0X2ZtdCAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgIiI7IiIKK3RfZm10X2FtcG0gIiIKK2RhdGVfZm10ICAgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCislIEZJWE1FCitoZWlnaHQgICAyOTcKKyUgRklYTUUKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzM+PFUwMDMxPiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKKyUgRklYTUUKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgIjxVMDA0RT48VTAwNEM+IgorY291bnRyeV9hYjMgIjxVMDA0RT48VTAwNEM+PFUwMDQ0PiIKK2NvdW50cnlfbnVtIDUyOAorY291bnRyeV9jYXIgIjxVMDA0RT48VTAwNEM+IgorbGFuZ19uYW1lICI8VTAwNjQ+PFUwMDc1PjxVMDA3ND48VTAwNjM+PFUwMDY4PiIKK2xhbmdfYWIgIjxVMDA2RT48VTAwNkM+IgorbGFuZ190ZXJtICI8VTAwNkU+PFUwMDZDPjxVMDA2ND4iCitsYW5nX2xpYiAiPFUwMDY0PjxVMDA3NT48VTAwNzQ+IgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL25sX05MQGV1cm8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ubF9OTEBldXJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZWU0MWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ubF9OTEBldXJvCkBAIC0wLDAgKzEsODMgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBEdXRjaCBMYW5ndWFnZSBMb2NhbGUgZm9yIHRoZSBOZXRoZXJsYW5kcyB3aXRoIEV1cm8KKyUgTGFuZ3VhZ2U6IG5sCislIFRlcnJpdG9yeTogTkwKKyUgT3B0aW9uOiBldXJvCislIERhdGU6IDIwMDAtMDgtMjAKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogSVNPLTg4NTktMTUKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIkR1dGNoIGxvY2FsZSBmb3IgdGhlIE5ldGhlcmxhbmRzIHdpdGggRXVybyIKK3NvdXJjZSAgICAgIkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiIKK2FkZHJlc3MgICAgIjU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiRHV0Y2giCit0ZXJyaXRvcnkgICJOZXRoZXJsYW5kcyIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDgtMjAiCislCitjYXRlZ29yeSAgIm5sX05MQGV1cm86MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAibmxfTkxAZXVybzoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJubF9OTEBldXJvOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAibmxfTkxAZXVybzoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgIm5sX05MQGV1cm86MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJubF9OTEBldXJvOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgIm5sX05MQGV1cm86MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAibmxfTkxAZXVybzoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJubF9OTEBldXJvOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAibmxfTkxAZXVybzoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgIm5sX05MQGV1cm86MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAibmxfTkwiCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCitFTkQgTENfQ09MTEFURQorCitMQ19NRVNTQUdFUworY29weSAibmxfTkwiCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2NvcHkgIm5sX05MIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgIm5sX05MIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorY29weSAibmxfTkwiCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorY29weSAibmxfTkwiCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCitjb3B5ICJubF9OTCIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgIm5sX05MIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK2NvcHkgIm5sX05MIgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworY29weSAibmxfTkwiCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvbm5fTk8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ubl9OTwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTIyMzM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvbm5fTk8KQEAgLTAsMCArMSwxNjUgQEAKK2NvbW1lbnRfY2hhciAgICAlCitlc2NhcGVfY2hhciAgICAgLworJSBOeW5vcnNrIGxhbmd1YWdlIGxvY2FsZSBmb3IgTm9yd2F5LgorJSBDb250cmlidXRlZCBieSBLZW50YXJvaCBOb2ppIDxrbm9qaUBqcC5pYm0uY29tPiBhbmQKKyUgVGV0c3VqaSBPcml0YSA8b3JpdGFAanAuaWJtLmNvbT4uCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJOeW5vcnNrIGxhbmd1YWdlIGxvY2FsZSBmb3IgTm9yd2F5Igorc291cmNlICAgICAiSUJNIEdsb2JhbGl6YXRpb24gQ2VudGVyIG9mIENvbXBldGVuY3ksIFlhbWF0byBTb2Z0d2FyZSBMYWJvcmF0b3J5IgorYWRkcmVzcyAgICAiMTYyMy0xNCwgU2hpbW90c3VydW1hLCBZYW1hdG8tc2hpLCBLYW5hZ2F3YS1rZW4sIDI0Mi04NTAyLCBKYXBhbiIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJOb3J3ZWdpYW4sIE55bm9yc2siCit0ZXJyaXRvcnkgICJOb3J3YXkiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA4LTMxIgorJQorY2F0ZWdvcnkgICJubl9OTzoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJubl9OTzoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJubl9OTzoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgIm5uX05POjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAibm5fTk86MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJubl9OTzoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJubl9OTzoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJubl9OTzoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJubl9OTzoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgIm5uX05POjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAibm5fTk86MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAibmJfTk8iCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorY29weSAibmJfTk8iCitFTkQgTENfQ09MTEFURQorCisKK0xDX01PTkVUQVJZCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIHRoZSBMQ19NT05FVEFSWSBjYXRlZ29yeS4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS9KYXZhCislCitpbnRfY3Vycl9zeW1ib2wgICAgICAgIjxVMDA0RT48VTAwNEY+PFUwMDRCPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgIjxVMDA2Qj48VTAwNzI+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICI8VTAwMkM+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICI8VTAwQTA+IgorbW9uX2dyb3VwaW5nICAgICAgICAgIDMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgMAorcF9zaWduX3Bvc24gICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAzCislCitFTkQgTENfTU9ORVRBUlkKKworCitMQ19OVU1FUklDCitjb3B5ICJuYl9OTyIKK0VORCBMQ19OVU1FUklDCisKKworTENfVElNRQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX1RJTUUgY2F0ZWdvcnkuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRpZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUvSmF2YQorJQorJSBBYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWVzICglYSkKK2FiZGF5ICAgICAgICI8VTAwNzM+PFUwMDc1PjxVMDAyRT4iOyI8VTAwNkQ+PFUwMEU1PjxVMDAyRT4iOy8KKyAgICAgICAgICAgICI8VTAwNzQ+PFUwMDc5PjxVMDAyRT4iOyI8VTAwNkY+PFUwMDZFPjxVMDAyRT4iOy8KKyAgICAgICAgICAgICI8VTAwNzQ+PFUwMDZGPjxVMDAyRT4iOyI8VTAwNjY+PFUwMDcyPjxVMDAyRT4iOy8KKyAgICAgICAgICAgICI8VTAwNkM+PFUwMDYxPjxVMDAyRT4iCislCislIEZ1bGwgd2Vla2RheSBuYW1lcyAoJUEpCitkYXkgICAgICAgICAiPFUwMDczPjxVMDA3NT48VTAwNkU+PFUwMDY0PjxVMDA2MT48VTAwNjc+ICI7LworICAgICAgICAgICAgIjxVMDA2RD48VTAwRTU+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDY3PiAiOy8KKyAgICAgICAgICAgICI8VTAwNzQ+PFUwMDc5PjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA2Nz4gIjsvCisgICAgICAgICAgICAiPFUwMDZGPjxVMDA2RT48VTAwNzM+PFUwMDY0PjxVMDA2MT48VTAwNjc+ICI7LworICAgICAgICAgICAgIjxVMDA3ND48VTAwNkY+PFUwMDcyPjxVMDA3Mz48VTAwNjQ+PFUwMDYxPjxVMDA2Nz4gIjsvCisgICAgICAgICAgICAiPFUwMDY2PjxVMDA3Mj48VTAwNjU+PFUwMDY0PjxVMDA2MT48VTAwNjc+ICI7LworICAgICAgICAgICAgIjxVMDA2Qz48VTAwNjE+PFUwMDc1PjxVMDA3Mj48VTAwNjQ+PFUwMDYxPjxVMDA2Nz4gIgorJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCithYm1vbiAgICAgICAiPFUwMDZBPjxVMDA2MT48VTAwNkU+PFUwMDJFPiI7IjxVMDA2Nj48VTAwNjU+PFUwMDYyPjxVMDAyRT4iOy8KKyAgICAgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNzM+IjsiPFUwMDYxPjxVMDA3MD48VTAwNzI+PFUwMDY5PjxVMDA2Qz4iOy8KKyAgICAgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA2OT4iOyI8VTAwNkE+PFUwMDc1PjxVMDA2RT48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkM+PFUwMDY5PiI7IjxVMDA2MT48VTAwNzU+PFUwMDY3PjxVMDAyRT4iOy8KKyAgICAgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD48VTAwMkU+IjsiPFUwMDZGPjxVMDA2Qj48VTAwNzQ+PFUwMDJFPiI7LworICAgICAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PjxVMDAyRT4iOyI8VTAwNjQ+PFUwMDY1PjxVMDA3Mz48VTAwMkU+IgorJQorJSBGdWxsIG1vbnRoIG5hbWVzICglQikKK21vbiAgICAgICAgICI8VTAwNkE+PFUwMDYxPjxVMDA2RT48VTAwNzU+PFUwMDYxPjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNjY+PFUwMDY1PjxVMDA2Mj48VTAwNzI+PFUwMDc1PjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMDczPiI7LworICAgICAgICAgICAgIjxVMDA2MT48VTAwNzA+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkU+PFUwMDY5PiI7LworICAgICAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNjE+PFUwMDc1PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNkY+PFUwMDZCPjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNjQ+PFUwMDY1PjxVMDA3Mz48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiIKKworJSB1c3VhbCBkYXRlIHJlcHJlc2VudGF0aW9uCislICVhICVkLiAlYiAlWSBrbC4gJUguJU0gJXoKK2RfdF9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDJFPjxVMDAyMD48VTAwMjU+PFUwMDYyPi8KKzxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwNkI+PFUwMDZDPjxVMDAyRT48VTAwMjA+PFUwMDI1PjxVMDA0OD4vCis8VTAwMkU+PFUwMDI1PjxVMDA0RD48VTAwMjA+PFUwMDI1PjxVMDA3QT4iCislICVkLiAlYiAlWQorZF9mbXQgICI8VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCislIGtsLiAlSC4lTSAlegordF9mbXQgICAgICAgICI8VTAwNkI+PFUwMDZDPjxVMDAyRT48VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwMkU+PFUwMDI1Pi8KKzxVMDA0RD48VTAwMjA+PFUwMDI1PjxVMDA3QT4iCithbV9wbSAgICAgICAiIjsiIgordF9mbXRfYW1wbSAgIiIKKyUgJWEgJWQuICViICVIOiVNOiVTICV6ICVZCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMkU+PFUwMDIwPjxVMDAyNT4vCis8VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+LworPFUwMDIwPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorCit3ZWVrICAgIDc7MTk5NzEyMDE7NAorZmlyc3Rfd2Vla2RheSAxCitmaXJzdF93b3JrZGF5IDEKK0VORCBMQ19USU1FCisKKworTENfTUVTU0FHRVMKK3llc2V4cHIgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA0QT48VTAwNkE+PFUwMDU5PjxVMDA3OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNEU+PFUwMDZFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCisKK0xDX1BBUEVSCitjb3B5ICJuYl9OTyIKK0VORCBMQ19QQVBFUgorCisKK0xDX05BTUUKK2NvcHkgIm5iX05PIgorRU5EIExDX05BTUUKKworCitMQ19BRERSRVNTCitjb3B5ICJuYl9OTyIKK0VORCBMQ19BRERSRVNTCisKKworTENfVEVMRVBIT05FCitjb3B5ICJuYl9OTyIKK0VORCBMQ19URUxFUEhPTkUKKworCitMQ19NRUFTVVJFTUVOVAorY29weSAibmJfTk8iCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL25yX1pBIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvbnJfWkEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4YjlkMQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL25yX1pBCkBAIC0wLDAgKzEsMjg0IEBACitlc2NhcGVfY2hhciAgLworY29tbWVudF9jaGFyICAlCisKKyUgQ2hhcnNldDogVVRGLTgKKworJSBDaGFuZ2VMb2cKKyUgMC4zICgyMDA1LTEwLTEzKToKKyUgICAgIDIwMDUtMTAtMTIgRHdheW5lIEJhaWxleSA8ZHdheW5lQHRyYW5zbGF0ZS5vcmcuemE+CislICAgICAgIC0gQWRkZWQgJ0NoYXJzZXQ6IFVURi04JyBpbmZvcm1hdGlvbgorJSAgICAgICAtIFVwZGF0ZSBjb250YWN0IGluZm9ybWF0aW9uCislICAgICAgIC0gQWxsaWduIHNwZWxsaW5ncyBvZiBtb250aCBhbmQgd2Vla2RheSBuYW1lcyB3aXRoIERlcHQuIG9mCislICAgICAgICAgQXJ0IGFuZCBDdWx0dXJlJ3M6IE11bHRpbGluZ3VhbCBNYXRoZW1hdGljcyBEaWN0aW9uYXJ5CislIDAuMiAoMjAwNC0xMS0wOSk6CislICAgICAyMDA0LTExLTA5IER3YXluZSBCYWlsZXkgPGR3YXluZUB0cmFuc2xhdGUub3JnLnphPgorJSAgICAgICAtIDxVTk5OTj4gZXNjYXBlIGV2ZXJ5dGhpbmcKKyUgICAgICAgLSBVcGRhdGUgYWxsIGNvbnRhY3QgaW5mb3JtYXRpb24KKyUgICAgICAgLSBDaGFuZ2UgJWQgdG8gJS1lIGZvciBkX3RfZm10IGFuZCBkYXRlX2ZtdAorJSAgICAgICAtIFJlc2V0IHllcy9ub2V4cHIgdG8gRW5nbGlzaAorJSAgICAgICAtIHNldCBhbGwgYWJtb24sIG1vbiwgYWJkYXksIGRheSB0byBFbmdsaXNoIHVudGlsIGNvcnJlY3QgZGVmaW50aW9ucworJSAgICAgICAgIGFyZSBhdmFpbGFibGUuCislICAgICAyMDA0LTAzLTMwIER3YXluZSBCYWlsZXkgPGR3YXluZUB0cmFuc2xhdGUub3JnLnphPgorJSAgICAgICAtIEFkZGVkIGNvdW50cnlfYWIyLzMsIGNvdW50cnlfbnVtCislICAgICAyMDA0LTAyLTI3IER3YXluZSBCYWlsZXkgPGR3YXluZUB0cmFuc2xhdGUub3JnLnphPgorJQkgICAgLSBDb3JyZWN0IGNhcGF0aWxpc2F0aW9uIG9mIGxhbmdfbmFtZQorJSAwLjEgKDIwMDQtMDItMjQpOgorJSAgICAgICAtIEluaXRpYWwgU291dGhlcm4gTmRlYmVsZSBsb2NhbGUgZm9yIFNvdXRoIEFmcmljYQorJSAgICAgICAgIGJ5IFp1emEgU29mdHdhcmUgRm91bmRhdGlvbgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiU291dGhlcm4gTmRlYmVsZSBsb2NhbGUgZm9yIFNvdXRoIEFmcmljYSIKK3NvdXJjZSAgICAgIlp1emEgU29mdHdhcmUgRm91bmRhdGlvbiAoVHJhbnNsYXRlLm9yZy56YSkiCithZGRyZXNzICAgICJQTyBCb3ggMjgzNjQsIFN1bm55c2lkZSwgMDEzMiwgU291dGggQWZyaWNhIgorY29udGFjdCAgICAiRHdheW5lIEJhaWxleSIKK2VtYWlsICAgICAgImR3YXluZUB0cmFuc2xhdGUub3JnLnphIgordGVsICAgICAgICAiKzI3IDEyIDQ2MCAxMDk1IgorZmF4ICAgICAgICAiKzI3IDEyIDQ2MCAxMDk1IgorbGFuZ3VhZ2UgICAiU291dGhlcm4gTmRlYmVsZSIKK3RlcnJpdG9yeSAgIlNvdXRoIEFmcmljYSIKK3JldmlzaW9uICAgIjAuMyIKK2RhdGUgICAgICAgIjIwMDUtMTAtMTMiCislCitjYXRlZ29yeSAgIm5yX1pBOjIwMDQiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgIm5yX1pBOjIwMDQiO0xDX0NUWVBFCitjYXRlZ29yeSAgIm5yX1pBOjIwMDQiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAibnJfWkE6MjAwNCI7TENfVElNRQorY2F0ZWdvcnkgICJucl9aQToyMDA0IjtMQ19OVU1FUklDCitjYXRlZ29yeSAgIm5yX1pBOjIwMDQiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgIm5yX1pBOjIwMDQiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgIm5yX1pBOjIwMDQiO0xDX1BBUEVSCitjYXRlZ29yeSAgIm5yX1pBOjIwMDQiO0xDX05BTUUKK2NhdGVnb3J5ICAibnJfWkE6MjAwNCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJucl9aQToyMDA0IjtMQ19URUxFUEhPTkUKK2NhdGVnb3J5ICAibnJfWkE6MjAwNCI7TENfTUVBU1VSRU1FTlQKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCislIFVzZSB0aGUgY2hhcmFjdGVycyBkZXNjcmliZWQgaW4gdGhlIGNoYXJtYXAgZmlsZSAiaTE4bi50Z3oiCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxIGkuZS4KKyUgdXNlIHRoZSBydWxlcyB0aGVyZSB3aGVuIG1ha2luZyBvcmRlcmVkIGxpc3RzIG9mIHdvcmRzLgorY29weSAiaXNvMTQ2NTFfdDEiCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQorY29weSAiZW5fWkEiCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworY29weSAiZW5fWkEiCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCisKKyUgYWJkYXkgLSBUaGUgYWJicmV2aWF0aW9ucyBmb3IgdGhlIHdlZWsgZGF5czoKKyUgLSBTb24sIE12dSwgQmlsLCBUaGEsIE5lLCBIbGEsIEdxaQorYWJkYXkgICAgICAgIjxVMDA1Mz48VTAwNkY+PFUwMDZFPiI7IjxVMDA0RD48VTAwNzY+PFUwMDc1PiI7LworICAgICAgICAgICAgIjxVMDA0Mj48VTAwNjk+PFUwMDZDPiI7IjxVMDA1ND48VTAwNjg+PFUwMDYxPiI7LworICAgICAgICAgICAgIjxVMDA0RT48VTAwNjU+IjsiPFUwMDQ4PjxVMDA2Qz48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDQ3PjxVMDA3MT48VTAwNjk+IgorCislIGRheSAtIFRoZSBmdWxsIG5hbWVzIG9mIHRoZSB3ZWVrIGRheXM6CislIC0gdVNvbnRvLCB1TXZ1bG8sIHVMZXNpYmlsaSwgbGVzaXRoYXRodSwgdUxlc2luZSwgbmdvTGVzaWhsYW51LCB1bUdxaWJlbG8KK2RheSAgICAgICAgICI8VTAwNzU+PFUwMDUzPjxVMDA2Rj48VTAwNkU+PFUwMDc0PjxVMDA2Rj4iOy8KKyAgICAgICAgICAgICI8VTAwNzU+PFUwMDREPjxVMDA3Nj48VTAwNzU+PFUwMDZDPjxVMDA2Rj4iOy8KKyAgICAgICAgICAgICI8VTAwNzU+PFUwMDRDPjxVMDA2NT48VTAwNzM+PFUwMDY5PjxVMDA2Mj48VTAwNjk+PFUwMDZDPjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNkM+PFUwMDY1PjxVMDA3Mz48VTAwNjk+PFUwMDc0PjxVMDA2OD48VTAwNjE+PFUwMDc0PjxVMDA2OD48VTAwNzU+IjsvCisgICAgICAgICAgICAiPFUwMDc1PjxVMDA0Qz48VTAwNjU+PFUwMDczPjxVMDA2OT48VTAwNkU+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA2RT48VTAwNjc+PFUwMDZGPjxVMDA0Qz48VTAwNjU+PFUwMDczPjxVMDA2OT48VTAwNjg+PFUwMDZDPjxVMDA2MT48VTAwNkU+PFUwMDc1PiI7LworICAgICAgICAgICAgIjxVMDA3NT48VTAwNkQ+PFUwMDQ3PjxVMDA3MT48VTAwNjk+PFUwMDYyPjxVMDA2NT48VTAwNkM+PFUwMDZGPiIKKworJSBhYm1vbiAtIFRoZSBhYmJyZXZpYXRpb25zIGZvciB0aGUgbW9udGhzCislIC0gSmFuLCBGZWIsIE1hdCwgQXByLCBNZXksIEp1biwgSnVsLCBBcmgsIFNlcCwgT2t0LCBVc2ksIERpcworYWJtb24gICAgICAgIjxVMDA0QT48VTAwNjE+PFUwMDZFPiI7IjxVMDA0Nj48VTAwNjU+PFUwMDYyPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDc0PiI7IjxVMDA0MT48VTAwNzA+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjU+PFUwMDc5PiI7IjxVMDA0QT48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZDPiI7IjxVMDA0MT48VTAwNzI+PFUwMDY4PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA0Rj48VTAwNkI+PFUwMDc0PiI7LworICAgICAgICAgICAgIjxVMDA1NT48VTAwNzM+PFUwMDY5PiI7IjxVMDA0ND48VTAwNjk+PFUwMDczPiIKKworJSBtb24gLSBUaGUgZnVsbCBuYW1lcyBvZiB0aGUgbW9udGhzIC0KKyUgLSBKYW5hYmFyaSwgdUZlYmVyYmFyaSwgdU1hdGpoaSwgdS1BcHJlbGksIE1leWksIEp1bmkKKyUgICBKdWxheWksIEFyaG9zdG9zaSwgU2VwdGVtYmEsIE9rdG9iYSwgVXNpbnlpa2hhYmEsIERpc2VtYmEKK21vbiAgICAgICAgICI8VTAwNEE+PFUwMDYxPjxVMDA2RT48VTAwNjE+PFUwMDYyPjxVMDA2MT48VTAwNzI+PFUwMDY5PiI7LworICAgICAgICAgICAgIjxVMDA3NT48VTAwNDY+PFUwMDY1PjxVMDA2Mj48VTAwNjU+PFUwMDcyPjxVMDA2Mj48VTAwNjE+PFUwMDcyPjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNzU+PFUwMDREPjxVMDA2MT48VTAwNzQ+PFUwMDZBPjxVMDA2OD48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDc1PjxVMDAyRD48VTAwNDE+PFUwMDcwPjxVMDA3Mj48VTAwNjU+PFUwMDZDPjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDY1PjxVMDA3OT48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkU+PFUwMDY5PiI7LworICAgICAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZDPjxVMDA2MT48VTAwNzk+PFUwMDY5PiI7LworICAgICAgICAgICAgIjxVMDA0MT48VTAwNzI+PFUwMDY4PjxVMDA2Rj48VTAwNzM+PFUwMDc0PjxVMDA2Rj48VTAwNzM+PFUwMDY5PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDRGPjxVMDA2Qj48VTAwNzQ+PFUwMDZGPjxVMDA2Mj48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDU1PjxVMDA3Mz48VTAwNjk+PFUwMDZFPjxVMDA3OT48VTAwNjk+PFUwMDZCPjxVMDA2OD48VTAwNjE+PFUwMDYyPjxVMDA2MT4iOy8KKyAgICAgICAgICAgICI8VTAwNDQ+PFUwMDY5PjxVMDA3Mz48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjE+IgorCislIEFicmV2aWF0ZWQgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbiB0byBiZSByZWZlcmVuY2VkIGJ5IHRoZSAiJWMiIGZpZWxkIGRlc2NyaXB0b3IgLQorZF90X2ZtdCAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwMkQ+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKKyUgIiVhIiAoc2hvcnQgd2Vla2RheSBuYW1lKSwKKyUgIiUtZSIgKGRheSBvZiBtb250aCBhcyBhIGRlY2ltYWwgbnVtYmVyKSwKKyUgIiViIiAoc2hvcnQgbW9udGggbmFtZSksCislICIlWSIgKHllYXIgd2l0aCBjZW50dXJ5IGFzIGEgZGVjaW1hbCBudW1iZXIpLAorJSAiJVQiICgyNC1ob3VyIGNsb2NrIHRpbWUgaW4gZm9ybWF0IEhIOk1NOlNTKSwKKyUgIiVaIiAoVGltZSB6b25lIG5hbWUpCisKKyUgRGF0ZSByZXByZXNlbnRhdGlvbiB0byBiZSByZWZlcmVuY2VkIGJ5IHRoZSAiJXgiIGZpZWxkIGRlc2NyaXB0b3IgLQorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA1OT4iCislICIlZC8lbS8lWSIsIGRheS9tb250aC95ZWFyIGFzIGRlY2ltYWwgbnVtYmVycyAoMDEvMDEvMjAwMCkuCisKKyUgVGltZSByZXByZXNlbnRhdGlvbiB0byBiZSByZWZlcmVuY2VkIGJ5IHRoZSAiJVgiIGZpZWxkIGRlc2NyaXB0b3IgLQordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNTQ+IgorJSAiJVQiICgyNC1ob3VyIGNsb2NrIHRpbWUgaW4gZm9ybWF0IEhIOk1NOlNTKQorCislIERlZmluZSByZXByZXNlbnRhdGlvbiBvZiBhbnRlIG1lcmlkaWVtIGFuZCBwb3N0IG1lcmlkaWVtIHN0cmluZ3MgLQorYW1fcG0gICAgICAgIiI7IiIKKyUgVGhlICIiIG1lYW4gJ2RlZmF1bHQgdG8gIkFNIiBhbmQgIlBNIi4KKworJSBEZWZpbmUgdGltZSByZXByZXNlbnRhdGlvbiBpbiAxMi1ob3VyIGZvcm1hdCB3aXRoICJhbV9wbSIsIHRvIGJlIHJlZmVyZW5jZWQgYnkgdGhlICIlciIKK3RfZm10X2FtcG0gICIiCislIFRoZSAiIiBtZWFucyB0aGF0IHRoaXMgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuCisKKyUgRGF0ZSByZXByZXNlbnRhdGlvbiBub3QgZGVzY3JpYmVkIGluIElTTy9JRUMgMTQ2NTIuIENvbWVzIG91dCBhcyAtCislICIlYSAlYiAlLWUgJUg6JU06JVMgJVogJVkiIHdoaWNoIGlzIGRlZmF1bHQgImRhdGUiIGNvbW1hbmQgb3V0cHV0CitkYXRlX2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDAyRD48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorJQorJSAlYSAtIGFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZSwKKyUgJWIgLSBhYnJldmlhdGVkIG1vbnRoIG5hbWUsCislICUtZSAtIGRheSBvZiBtb250aCBhcyBhIGRlY2ltYWwgbnVtYmVyIHdpdGggbGVhZGluZyBzcGFjZSAoMSB0byAzMSksCislICVIIC0gaG91ciAoMjQtaG91ciBjbG9jaykgYXMgYSBkZWNpbWFsIG51bWJlciAoMDAgdG8gMjMpLAorJSAlTSAtIG1pbnV0ZSBhcyBhIGRlY2ltYWwgbnVtYmVyICgwMCB0byA1OSksCislICVTIC0gc2Vjb25kcyBhcyBhIGRlY2ltYWwgbnVtYmVyICgwMCB0byA1OSksCislICVaIC0gdGltZS16b25lIG5hbWUsCislICVZIC0geWVhciB3aXRoIGNlbnR1cnkgYXMgYSBkZWNpbWFsIG51bWJlcixlLmcuIDIwMDEuCisKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCislIEZJWE1FOiBDaGVjayBib3RoIG9mIHRoZXNlCislIFRoZSBhZmZpcm1hdGl2ZSByZXNwb25zZSAtIFRPRE8KKyUgIl5beVldIgoreWVzZXhwciAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDc5PjxVMDA1OT48VTAwNUQ+IgorCislIFRoZSBuZWdhdGl2ZSByZXNwb25zZSAtIFRPRE8KKyUgIl5bbk5dIgorbm9leHByICAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCitjb3B5ICJlbl9aQSIKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK2NvcHkgImVuX1pBIgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorY29weSAiZW5fWkEiCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorJSBGb3JtYXQgZm9yIGFkZHJlc3NpbmcgYSBwZXJzb24uCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCislICIlZCV0JWcldCVtJXQlZiIKKyUgIlNhbHV0YXRpb24iLAorJSAiRW1wdHkgc3RyaW5nLCBvciA8U3BhY2U+IiwKKyUgIkZpcnN0IGdpdmVuIG5hbWUiLAorJSAiRW1wdHkgc3RyaW5nLCBvciA8U3BhY2U+IiwKKyUgIk1pZGRsZSBuYW1lcyIsCislICJFbXB0eSBzdHJpbmcsIG9yIDxTcGFjZT4iLAorJSAiQ2xhbiBuYW1lcyIKKworJSBGSVhNRSAtIGRlZmluZSBhbGwgdGhlIGZvbGxvd2luZyBuYW1lXyoKKyUgR2VuZXJhbCBzYWx1dGF0aW9uIGZvciBhbnkgc2V4CislIG5hbWVfZ2VuICAgICIiCisKKyUgU2FsdXRhdGlvbiBmb3IgdW5tYXJyaWVkIGZlbWFsZXMgLSAiIgorJSBuYW1lX21pc3MgICAiIgorCislIFNhbHV0YXRpb24gZm9yIG1hbGVzIC0gIiIKKyUgbmFtZV9tciAgICAgIiIKKworJSBTYWx1dGF0aW9uIGZvciBtYXJyaWVkIGZlbWFsZXMgLSAiIgorJSBuYW1lX21ycyAgICAiIgorCislIFNhbHV0YXRpb24gdmFsaWQgZm9yIGFsbCBmZW1hbGVzIC0gIiIgKG5vIHRlcm0pCislIG5hbWVfbXMgICAgICIiCisKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKKyUgQ291bnRyeSBuYW1lIGluIFNvdXRoZXJuIE5kZWJlbGUgLSAiaVNld3VsYSBBZnJpa2EiCitjb3VudHJ5X25hbWUgIjxVMDA2OT48VTAwNTM+PFUwMDY1PjxVMDA3Nz48VTAwNzU+PFUwMDZDPjxVMDA2MT48VTAwMjA+PFUwMDQxPjxVMDA2Nj48VTAwNzI+PFUwMDY5PjxVMDA2Qj48VTAwNjE+IgorCislIEFiYnJldmlhdGVkIGNvdW50cnkgcG9zdGFsIG5hbWUgLSAiWkEiCitjb3VudHJ5X3Bvc3QgIjxVMDA1QT48VTAwNDE+IgorCislIFVOIEdlbmV2ZSAxOTQ5OjY4IERpc3Rpbmd1aXNoaW5nIHNpZ25zIG9mIHZlaGljbGVzIGluIGludGVybmF0aW9uYWwgdHJhZmZpYworJSBodHRwOi8vd3d3LnVuZWNlLm9yZy90cmFucy9jb252ZW50bi9kaXN0aW5nLXNpZ25zLTUtMjAwMS5wZGYKKyUgIlpBIgorY291bnRyeV9jYXIgICAiPFUwMDVBPjxVMDA0MT4iCisKKyUgRklYTUUgZGVmaW5lIHRoZSBmb2xsb3dpbmcgY29ycmVjdGx5CislIGNvdW50cnlfaXNibiAiIgorJSBjb3VudHJ5X251bQorCislIExhbmd1YWdlIG5hbWUgaW4gU291dGhlcm4gTmRlYmVsZSAtICJJc2lOZGViZWxlIgorbGFuZ19uYW1lICI8VTAwNDk+PFUwMDczPjxVMDA2OT48VTAwNEU+PFUwMDY0PjxVMDA2NT48VTAwNjI+PFUwMDY1PjxVMDA2Qz48VTAwNjU+IgorCislIElTTyA2MzkgdHdvIGFuZCB0aHJlZSBsZXR0ZXIgbGFuZ3VhZ2UgbmFtZXMKKyUgc2VlIGh0dHA6Ly93d3cubG9jLmdvdi9zdGFuZGFyZHMvaXNvNjM5LTIvZW5nbGFuZ24uaHRtbAorJSAibnIiLCAibmJsIgorbGFuZ19hYiAgICI8VTAwNkU+PFUwMDcyPiIKK2xhbmdfdGVybSAiPFUwMDZFPjxVMDA2Mj48VTAwNkM+IgorCislIFJlcHJlc2VudGF0aW9uIG9mIHBvc3RhbCBhZGRyZXNzZXMgKG1pbnVzIHRoZSBhZGRyZXNzZWUncyBuYW1lKSBpbiBTb3V0aAorJSBBZnJpY2EuIChJZ25vcmVkIGZvciBub3cpCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorJSAiJWYlTiVhJU4lZCVOJWIlTiVzICVoICVlICVyJU4leiAlVCVOJWMlTiIsIHdoaWNoIGdpdmVzIC0KKyUgImZpcm0gbmFtZSIsCislICJlbmQgb2YgbGluZSIsCislICJDL08gYWRkcmVzcyIsCislICJlbmQgb2YgbGluZSIsCislICJkZXBhcnRtZW50IG5hbWUiLAorJSAiQnVpbGRpbmcgbmFtZSIsCislICJlbmQgb2YgbGluZSIsCislICJzdHJlZXQgb3IgYmxvY2sgbmFtZSIsCislICJzcGFjZSIsCislICJob3VzZSBudW1iZXIgb3IgZGVzaWduYXRpb24iLAorJSAic3BhY2UiLAorJSAiZmxvb3IgbnVtYmVyIiwKKyUgInNwYWNlIiwKKyUgInJvb20gbnVtYmVyLCBkb29yIGRlc2lnbmF0aW9uIiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgInBvc3RhbCBjb2RlIiwKKyUgInNwYWNlIiwKKyUgInRvd24sIGNpdHkiLAorJSAiZW5kIG9mIGxpbmUiLAorJSAiY291bnRyeSBkZXNpZ25hdGlvbiBmb3IgdGhlIDxjb3VudHJ5X3Bvc3Q+IGtleXdvcmQiLAorJSAiZW5kIG9mIGxpbmUKKyUKKworJSBJU08gMzE2NiBjb3VudHJ5IG51bWJlciBhbmQgMiBhbmQgMyBsZXR0ZXIgYWJyZXZpYXRpb25zCislIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvb25saW5lZGF0L2NvdW50cmllcy5odG1sCislICJaQSIsICJaQUYiCitjb3VudHJ5X251bSAgIDcxMAorY291bnRyeV9hYjIgICAiPFUwMDVBPjxVMDA0MT4iCitjb3VudHJ5X2FiMyAgICI8VTAwNUE+PFUwMDQxPjxVMDA0Nj4iCisKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9uc29fWkEgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9uc29fWkEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMzNTFlZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL25zb19aQQpAQCAtMCwwICsxLDI4MSBAQAorZXNjYXBlX2NoYXIgIC8KK2NvbW1lbnRfY2hhciAgJQorCislIENoYXJzZXQ6IFVURi04CisKKyUgQ2hhbmdlTG9nCislIDAuMyAoMjAwNS0xMC0xMyk6CislICAgICAgMjAwNS0xMC0xMiBEd2F5bmUgQmFpbGV5IDxkd2F5bmVAdHJhbnNsYXRlLm9yZy56YT4KKyUgICAgICAgIC0gQWRkZWQgJ0NoYXJzZXQ6IFVURi04JyBpbmZvcm1hdGlvbgorJSAgICAgICAgLSBVcGRhdGUgY29udGFjdCBpbmZvcm1hdGlvbgorJSAgICAgICAgLSBBbGxpZ24gc3BlbGxpbmdzIG9mIG1vbnRoIGFuZCB3ZWVrZGF5IG5hbWVzIHdpdGggRGVwdC4gb2YKKyUgICAgICAgICAgQXJ0IGFuZCBDdWx0dXJlJ3M6IE11bHRpbGluZ3VhbCBNYXRoZW1hdGljcyBEaWN0aW9uYXJ5CislIDAuMiAoMjAwNC0xMC0yNyk6CislICAgICAgMjAwNC0xMC0yNyBEd2F5bmUgQmFpbGV5IDxkd2F5bmVAdHJhbnNsYXRlLm9yZy56YT4KKyUgICAgICAgIC0gVXBkYXRlIGFsbCBjb250YWN0IGluZm9ybWF0aW9uCislICAgICAgICAtIEFkZCBsYW5nX2xpYgorJSAgICAgIDIwMDQtMDMtMzAgRHdheW5lIEJhaWxleSA8ZHdheW5lQHRyYW5zbGF0ZS5vcmcuemE+CislICAgICAgICAtIEFkZGVkIGNvdW50cnlfYWIyLzMsIGNvdW50cnlfbnVtCislICAgICAgMjAwNC0wMi0yNzogRHdheW5lIEJhaWxleSA8ZHdheW5lQHRyYW5zbGF0ZS5vcmcuemE+CislICAgICAgICAtIENvcnJlY3Rpb24gb2YgbGFuZ19uYW1lIGNvbW1lbnQJCislIDAuMSAoMjAwNC0wMi0xMSk6CislCUluaXRpYWwgTm9ydGhlcm4gU290aG8gbG9jYWxlIGZvciBTb3V0aCBBZnJpY2EKKyUJYnkgWnV6YSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJOb3J0aGVybiBTb3RobyBsb2NhbGUgZm9yIFNvdXRoIEFmcmljYSIKK3NvdXJjZSAgICAgIlp1emEgU29mdHdhcmUgRm91bmRhdGlvbiAoVHJhbnNsYXRlLm9yZy56YSkiCithZGRyZXNzICAgICJQTyBCb3ggMjgzNjQsIFN1bm55c2lkZSwgMDEzMiwgU291dGggQWZyaWNhIgorY29udGFjdCAgICAiRHdheW5lIEJhaWxleSIKK2VtYWlsICAgICAgImR3YXluZUB0cmFuc2xhdGUub3JnLnphIgordGVsICAgICAgICAiKzI3IDEyIDQ2MCAxMDk1IgorZmF4ICAgICAgICAiKzI3IDEyIDQ2MCAxMDk1IgorbGFuZ3VhZ2UgICAiTm9ydGhlcm4gU290aG8iCit0ZXJyaXRvcnkgICJTb3V0aCBBZnJpY2EiCityZXZpc2lvbiAgICIwLjMiCitkYXRlICAgICAgICIyMDA1LTEwLTEzIgorJQorY2F0ZWdvcnkgICJuc29fWkE6MjAwNCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAibnNvX1pBOjIwMDQiO0xDX0NUWVBFCitjYXRlZ29yeSAgIm5zb19aQToyMDA0IjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgIm5zb19aQToyMDA0IjtMQ19USU1FCitjYXRlZ29yeSAgIm5zb19aQToyMDA0IjtMQ19OVU1FUklDCitjYXRlZ29yeSAgIm5zb19aQToyMDA0IjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJuc29fWkE6MjAwNCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAibnNvX1pBOjIwMDQiO0xDX1BBUEVSCitjYXRlZ29yeSAgIm5zb19aQToyMDA0IjtMQ19OQU1FCitjYXRlZ29yeSAgIm5zb19aQToyMDA0IjtMQ19BRERSRVNTCitjYXRlZ29yeSAgIm5zb19aQToyMDA0IjtMQ19URUxFUEhPTkUKK2NhdGVnb3J5ICAibnNvX1pBOjIwMDQiO0xDX01FQVNVUkVNRU5UCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorJSBVc2UgdGhlIGNoYXJhY3RlcnMgZGVzY3JpYmVkIGluIHRoZSBjaGFybWFwIGZpbGUgImkxOG4udGd6IgorY29weSAiaTE4biIKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCislIENvcHkgdGhlIHRlbXBsYXRlIGZyb20gSVNPL0lFQyAxNDY1MSBpLmUuCislIHVzZSB0aGUgcnVsZXMgdGhlcmUgd2hlbiBtYWtpbmcgb3JkZXJlZCBsaXN0cyBvZiB3b3Jkcy4KK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKK2NvcHkgImVuX1pBIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgImVuX1pBIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorCislIGFiZGF5IC0gVGhlIGFiYnJldmlhdGlvbnMgZm9yIHRoZSB3ZWVrIGRheXM6CislIC0gU29uLCBNb3NeLCBCZWQsIFJhciwgTmUsIEhsYSwgTW9rCithYmRheSAgICAgICAiPFUwMDUzPjxVMDA2Rj48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2Rj48VTAxNjE+IjsvCisgICAgICAgICAgICAiPFUwMDQyPjxVMDA2NT48VTAwNjQ+IjsvCisgICAgICAgICAgICAiPFUwMDUyPjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2NT4iOy8KKyAgICAgICAgICAgICI8VTAwNDg+PFUwMDZDPjxVMDA2MT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDZGPjxVMDA2Qj4iCisgCislIGRheSAtIFRoZSBmdWxsIG5hbWVzIG9mIHRoZSB3ZWVrIGRheXM6CislIC0gTGFNb3JlbmEsIE1vc151cG9sb2dvLCBMYWJvYmVkaSwgTGFib3Jhcm8sIExhYm9uZSwgTGFib2hsYW5vLCBNb2tpYmVsbworZGF5ICAgICAgICAgIjxVMDA0Qz48VTAwNjE+PFUwMDREPjxVMDA2Rj48VTAwNzI+PFUwMDY1PjxVMDA2RT48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2Rj48VTAxNjE+PFUwMDc1PjxVMDA3MD48VTAwNkY+PFUwMDZDPjxVMDA2Rj48VTAwNjc+PFUwMDZGPiI7LworICAgICAgICAgICAgIjxVMDA0Qz48VTAwNjE+PFUwMDYyPjxVMDA2Rj48VTAwNjI+PFUwMDY1PjxVMDA2ND48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDRDPjxVMDA2MT48VTAwNjI+PFUwMDZGPjxVMDA3Mj48VTAwNjE+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgICAgICI8VTAwNEM+PFUwMDYxPjxVMDA2Mj48VTAwNkY+PFUwMDZFPjxVMDA2NT4iOy8KKyAgICAgICAgICAgICI8VTAwNEM+PFUwMDYxPjxVMDA2Mj48VTAwNkY+PFUwMDY4PjxVMDA2Qz48VTAwNjE+PFUwMDZFPjxVMDA2Rj4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDZGPjxVMDA2Qj48VTAwNjk+PFUwMDYyPjxVMDA2NT48VTAwNkM+PFUwMDZGPiIKKyAKKyUgYWJtb24gLSBUaGUgYWJicmV2aWF0aW9ucyBmb3IgdGhlIG1vbnRocyAKKyUgLSBKYW4sIEZlYiwgTWF0LCBBcHIsIE1laSwgSnVuLCBKdWwsIEFnbywgU2V0LCBPa3QsIE5vZiwgRGlzCithYm1vbiAgICAgICAiPFUwMDRBPjxVMDA2MT48VTAwNkU+IjsiPFUwMDQ2PjxVMDA2NT48VTAwNjI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzQ+IjsiPFUwMDQxPjxVMDA3MD48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2NT48VTAwNjk+IjsiPFUwMDRBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkM+IjsiPFUwMDQxPjxVMDA2Nz48VTAwNkY+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNzQ+IjsiPFUwMDRGPjxVMDA2Qj48VTAwNzQ+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNjY+IjsiPFUwMDQ0PjxVMDA2OT48VTAwNzM+IgorIAorJSBtb24gLSBUaGUgZnVsbCBuYW1lcyBvZiB0aGUgbW9udGhzIC0gCislIC0gSmFuYXdhcmUsIEZlYmVyZXdhcmUsIE1hdHNeaGUsIEFwcmVsZSwgTWVpLCBKdW5lCislICAgSnVsYWUsIEFnb3N0b3NlLCBTZXRlbWVyZSwgT2t0b2JlcmUsIE5vZmVtZXJlLCBEaXNlbWVyZQorbW9uICAgICAgICAgIjxVMDA0QT48VTAwNjE+PFUwMDZFPjxVMDA2MT48VTAwNzc+PFUwMDYxPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDQ2PjxVMDA2NT48VTAwNjI+PFUwMDY1PjxVMDA3Mj48VTAwNjU+PFUwMDc3PjxVMDA2MT48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDc0PjxVMDE2MT48VTAwNjg+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA0MT48VTAwNzA+PFUwMDcyPjxVMDA2NT48VTAwNkM+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjU+PFUwMDY5PiI7LworICAgICAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZFPjxVMDA2NT4iOy8KKyAgICAgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2Qz48VTAwNjE+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA0MT48VTAwNjc+PFUwMDZGPjxVMDA3Mz48VTAwNzQ+PFUwMDZGPjxVMDA3Mz48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNzQ+PFUwMDY1PjxVMDA2RD48VTAwNjU+PFUwMDcyPjxVMDA2NT4iOy8KKyAgICAgICAgICAgICI8VTAwNEY+PFUwMDZCPjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA2NT48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDY2PjxVMDA2NT48VTAwNkQ+PFUwMDY1PjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDQ0PjxVMDA2OT48VTAwNzM+PFUwMDY1PjxVMDA2RD48VTAwNjU+PFUwMDcyPjxVMDA2NT4iCisgCislIEFicmV2aWF0ZWQgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbiB0byBiZSByZWZlcmVuY2VkIGJ5IHRoZSAiJWMiIGZpZWxkIGRlc2NyaXB0b3IgLQorZF90X2ZtdCAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorJSAiJWEiIChzaG9ydCB3ZWVrZGF5IG5hbWUpLAorJSAiJWQiIChkYXkgb2YgbW9udGggYXMgYSBkZWNpbWFsIG51bWJlciksCislICIlYiIgKHNob3J0IG1vbnRoIG5hbWUpLAorJSAiJVkiICh5ZWFyIHdpdGggY2VudHVyeSBhcyBhIGRlY2ltYWwgbnVtYmVyKSwKKyUgIiVUIiAoMjQtaG91ciBjbG9jayB0aW1lIGluIGZvcm1hdCBISDpNTTpTUyksCislICIlWiIgKFRpbWUgem9uZSBuYW1lKQorIAorJSBEYXRlIHJlcHJlc2VudGF0aW9uIHRvIGJlIHJlZmVyZW5jZWQgYnkgdGhlICIleCIgZmllbGQgZGVzY3JpcHRvciAtCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDU5PiIKKyUgIiVkLyVtLyVZIiwgZGF5L21vbnRoL3llYXIgYXMgZGVjaW1hbCBudW1iZXJzICgwMS8wMS8yMDAwKS4KKyAKKyUgVGltZSByZXByZXNlbnRhdGlvbiB0byBiZSByZWZlcmVuY2VkIGJ5IHRoZSAiJVgiIGZpZWxkIGRlc2NyaXB0b3IgLQordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNTQ+IgorJSAiJVQiICgyNC1ob3VyIGNsb2NrIHRpbWUgaW4gZm9ybWF0IEhIOk1NOlNTKQorIAorJSBEZWZpbmUgcmVwcmVzZW50YXRpb24gb2YgYW50ZSBtZXJpZGllbSBhbmQgcG9zdCBtZXJpZGllbSBzdHJpbmdzIC0KK2FtX3BtICAgICAgICIiOyIiCislIFRoZSAiIiBtZWFuICdkZWZhdWx0IHRvICJBTSIgYW5kICJQTSIuCisgCislIERlZmluZSB0aW1lIHJlcHJlc2VudGF0aW9uIGluIDEyLWhvdXIgZm9ybWF0IHdpdGggImFtX3BtIiwgdG8gYmUgcmVmZXJlbmNlZCBieSB0aGUgIiVyIgordF9mbXRfYW1wbSAgIiIKKyUgVGhlICIiIG1lYW5zIHRoYXQgdGhpcyBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZC4KKyAKKyUgRGF0ZSByZXByZXNlbnRhdGlvbiBub3QgZGVzY3JpYmVkIGluIElTTy9JRUMgMTQ2NTIuIENvbWVzIG91dCBhcyAtCislICIlYSAlYiAlZSAlSDolTTolUyAlWiAlWSIgd2hpY2ggaXMgZGVmYXVsdCAiZGF0ZSIgY29tbWFuZCBvdXRwdXQKK2RhdGVfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKKyUKKyUgJWEgLSBhYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWUsCislICViIC0gYWJyZXZpYXRlZCBtb250aCBuYW1lLAorJSAlZSAtIGRheSBvZiBtb250aCBhcyBhIGRlY2ltYWwgbnVtYmVyIHdpdGggbGVhZGluZyBzcGFjZSAoMSB0byAzMSksCislICVIIC0gaG91ciAoMjQtaG91ciBjbG9jaykgYXMgYSBkZWNpbWFsIG51bWJlciAoMDAgdG8gMjMpLAorJSAlTSAtIG1pbnV0ZSBhcyBhIGRlY2ltYWwgbnVtYmVyICgwMCB0byA1OSksCislICVTIC0gc2Vjb25kcyBhcyBhIGRlY2ltYWwgbnVtYmVyICgwMCB0byA1OSksCislICVaIC0gdGltZS16b25lIG5hbWUsCislICVZIC0geWVhciB3aXRoIGNlbnR1cnkgYXMgYSBkZWNpbWFsIG51bWJlcixlLmcuIDIwMDEuCisgCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworJSBGSVhNRTogQ2hlY2sgYm90aCBvZiB0aGVzZQorJSBUaGUgYWZmaXJtYXRpdmUgcmVzcG9uc2UgLSBlZQorJSAiXlt5WWVFXS4qIgoreWVzZXhwciAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDc5PjxVMDA1OT48VTAwNjU+PFUwMDQ1PjxVMDA1RD4iCisKKyUgVGhlIG5lZ2F0aXZlIHJlc3BvbnNlIC0gYW93YQorJSAiXltuTmFBXS4qIgorbm9leHByICAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNjE+PFUwMDQxPjxVMDA1RD4iCitFTkQgTENfTUVTU0FHRVMKKworTENfUEFQRVIKK2NvcHkgImVuX1pBIgorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQorY29weSAiZW5fWkEiCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJlbl9aQSIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCislIEZvcm1hdCBmb3IgYWRkcmVzc2luZyBhIHBlcnNvbi4KK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKKyUgIiVkJXQlZyV0JW0ldCVmIgorJSAiU2FsdXRhdGlvbiIsCislICJFbXB0eSBzdHJpbmcsIG9yIDxTcGFjZT4iLAorJSAiRmlyc3QgZ2l2ZW4gbmFtZSIsCislICJFbXB0eSBzdHJpbmcsIG9yIDxTcGFjZT4iLAorJSAiTWlkZGxlIG5hbWVzIiwKKyUgIkVtcHR5IHN0cmluZywgb3IgPFNwYWNlPiIsCislICJDbGFuIG5hbWVzIgorIAorJSBGSVhNRSAtIGRlZmluZSBhbGwgdGhlIGZvbGxvd2luZyBuYW1lXyoKKyUgR2VuZXJhbCBzYWx1dGF0aW9uIGZvciBhbnkgc2V4CislIG5hbWVfZ2VuICAgICIiCisKKyUgU2FsdXRhdGlvbiBmb3IgdW5tYXJyaWVkIGZlbWFsZXMgLSAiIgorJSBuYW1lX21pc3MgICAiIgorIAorJSBTYWx1dGF0aW9uIGZvciBtYWxlcyAtICIiCislIG5hbWVfbXIgICAgICIiCisKKyUgU2FsdXRhdGlvbiBmb3IgbWFycmllZCBmZW1hbGVzIC0gIiIKKyUgbmFtZV9tcnMgICAgIiIKKworJSBTYWx1dGF0aW9uIHZhbGlkIGZvciBhbGwgZmVtYWxlcyAtICIiIChubyB0ZXJtKQorJSBuYW1lX21zICAgICAiIgorCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCislIENvdW50cnkgbmFtZSBpbiBOb3J0aGVybiBTb3RobyAtICJBZnJpa2EgQm9yd2EiCitjb3VudHJ5X25hbWUgIjxVMDA0MT48VTAwNjY+PFUwMDcyPjxVMDA2OT48VTAwNkI+PFUwMDYxPjxVMDAyMD4vCis8VTAwNDI+PFUwMDZGPjxVMDA3Mj48VTAwNzc+PFUwMDYxPiIKKyAKKyUgQWJicmV2aWF0ZWQgY291bnRyeSBwb3N0YWwgbmFtZSAtICJaQSIKK2NvdW50cnlfcG9zdCAiPFUwMDVBPjxVMDA0MT4iCisKKyUgVU4gR2VuZXZlIDE5NDk6NjggRGlzdGluZ3Vpc2hpbmcgc2lnbnMgb2YgdmVoaWNsZXMgaW4gaW50ZXJuYXRpb25hbCB0cmFmZmljCislIGh0dHA6Ly93d3cudW5lY2Uub3JnL3RyYW5zL2NvbnZlbnRuL2Rpc3Rpbmctc2lnbnMtNS0yMDAxLnBkZgorJSAiWkEiCitjb3VudHJ5X2NhciAgICI8VTAwNUE+PFUwMDQxPiIKKworJSBGSVhNRSBkZWZpbmUgdGhlIGZvbGxvd2luZyBjb3JyZWN0bHkKKyUgY291bnRyeV9pc2JuICIiCisgCislIExhbmd1YWdlIG5hbWUgaW4gTm9ydGhlcm4gU290aG8gLSAiU2Vzb3RobyBzYSBMZWJvYSIKK2xhbmdfbmFtZSAiPFUwMDUzPjxVMDA2NT48VTAwNzM+PFUwMDZGPjxVMDA3ND48VTAwNjg+PFUwMDZGPjxVMDAyMD4vCis8VTAwNzM+PFUwMDYxPjxVMDAyMD48VTAwNEM+PFUwMDY1PjxVMDA2Mj48VTAwNkY+PFUwMDYxPiIKKworJSBJU08gNjM5IHR3byBhbmQgdGhyZWUgbGV0dGVyIGxhbmd1YWdlIG5hbWVzCislIHNlZSBodHRwOi8vd3d3LmxvYy5nb3Yvc3RhbmRhcmRzL2lzbzYzOS0yL2VuZ2xhbmduLmh0bWwKK2xhbmdfYWIgICAiIgorbGFuZ190ZXJtICI8VTAwNkU+PFUwMDczPjxVMDA2Rj4iCitsYW5nX2xpYiAgIjxVMDA2RT48VTAwNzM+PFUwMDZGPiIKKyAKKyUgUmVwcmVzZW50YXRpb24gb2YgcG9zdGFsIGFkZHJlc3NlcyAobWludXMgdGhlIGFkZHJlc3NlZSdzIG5hbWUpIGluIFNvdXRoCislIEFmcmljYS4gKElnbm9yZWQgZm9yIG5vdykKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCislICIlZiVOJWElTiVkJU4lYiVOJXMgJWggJWUgJXIlTiV6ICVUJU4lYyVOIiwgd2hpY2ggZ2l2ZXMgLQorJSAiZmlybSBuYW1lIiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgIkMvTyBhZGRyZXNzIiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgImRlcGFydG1lbnQgbmFtZSIsCislICJCdWlsZGluZyBuYW1lIiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgInN0cmVldCBvciBibG9jayBuYW1lIiwKKyUgInNwYWNlIiwKKyUgImhvdXNlIG51bWJlciBvciBkZXNpZ25hdGlvbiIsCislICJzcGFjZSIsCislICJmbG9vciBudW1iZXIiLAorJSAic3BhY2UiLAorJSAicm9vbSBudW1iZXIsIGRvb3IgZGVzaWduYXRpb24iLAorJSAiZW5kIG9mIGxpbmUiLAorJSAicG9zdGFsIGNvZGUiLAorJSAic3BhY2UiLAorJSAidG93biwgY2l0eSIsCislICJlbmQgb2YgbGluZSIsCislICJjb3VudHJ5IGRlc2lnbmF0aW9uIGZvciB0aGUgPGNvdW50cnlfcG9zdD4ga2V5d29yZCIsCislICJlbmQgb2YgbGluZQorJQorCislIElTTyAzMTY2IGNvdW50cnkgbnVtYmVyIGFuZCAyIGFuZCAzIGxldHRlciBhYnJldmlhdGlvbnMKKyUgaHR0cDovL3d3dy51bmljb2RlLm9yZy9vbmxpbmVkYXQvY291bnRyaWVzLmh0bWwKKyUgIlpBIiwgIlpBRiIKK2NvdW50cnlfbnVtICAgNzEwCitjb3VudHJ5X2FiMiAgICI8VTAwNUE+PFUwMDQxPiIKK2NvdW50cnlfYWIzICAgIjxVMDA1QT48VTAwNDE+PFUwMDQ2PiIKKworRU5EIExDX0FERFJFU1MKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvb2NfRlIgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9vY19GUgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTZmODEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvb2NfRlIKQEAgLTAsMCArMSwxMzEgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJSBjaGFyc2V0ICJJU09fODg1OS0xOjE5ODciCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28gZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAiT2NjaXRhbiBMYW5ndWFnZSBMb2NhbGUgZm9yIEZyYW5jZSIKK3NvdXJjZSAiUkFQIgorYWRkcmVzcyAiTG9zIEdlbmV0cywgMTIyOTAgUG9udCBkZSBTYWxhcnMiCitjb250YWN0ICJKZWFuLVBhdWwgRnJheXNzZSIKK2VtYWlsICJKZWFuLVBhdWwuRnJheXNzZUB3YW5hZG9vLmZyIgordGVsICIrMzMgLTU2NTc0MzEzMSAiCitmYXggIiIKK2xhbmd1YWdlICJPY2NpdGFuIgordGVycml0b3J5ICJGcmFuY2UiCityZXZpc2lvbiAiMC4yIgorZGF0ZSAiMjAwMC0xMS0xNSIKKworY2F0ZWdvcnkgb2NfRlI6MjAwMDtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgb2NfRlI6MjAwMDtMQ19DT0xMQVRFCitjYXRlZ29yeSBvY19GUjoyMDAwO0xDX0NUWVBFCitjYXRlZ29yeSBvY19GUjoyMDAwO0xDX01FU1NBR0VTCitjYXRlZ29yeSBvY19GUjoyMDAwO0xDX01PTkVUQVJZCitjYXRlZ29yeSBvY19GUjoyMDAwO0xDX05VTUVSSUMKK2NhdGVnb3J5IG9jX0ZSOjIwMDA7TENfVElNRQorY2F0ZWdvcnkgb2NfRlI6MjAwMDtMQ19QQVBFUgorY2F0ZWdvcnkgb2NfRlI6MjAwMDtMQ19NRUFTVVJFTUVOVAorY2F0ZWdvcnkgb2NfRlI6MjAwMDtMQ19URUxFUEhPTkUKK2NhdGVnb3J5IG9jX0ZSOjIwMDA7TENfQUREUkVTUworCislIElTTy9JRUMgMTQ2NTI6IENvbnZlcnRlZCBjb21tZW50cyB0byBMQ19JREVOVElGSUNBVElPTgorJSAgYWRkZWQgTENfUEFQRVIsIExDX01FQVNVUkVNRU5ULCBMQ19URUxFUEhPTkUsIExDX0FERFJFU1MKKyUgIGNvcHkgTENfTU9ORVRBUlkgZnJvbSBmcl9GUiBmb3IgYnJldml0eQorJSAtLSBtY2tpbnN0cnlAY29tcHV0ZXIub3JnLCAyMDAwLTA2LTIwCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA3Mz48VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDM1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNDM+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCislIEZJWE1FIGNvdW50cnlfbmFtZSAiRnJhbmNlIiBpbiBPY2NpdGFuID8KK2NvdW50cnlfcG9zdCAiRiIKK2NvdW50cnlfYWIyICJGUiIKK2NvdW50cnlfYWIzICJGUkEiCitjb3VudHJ5X251bSAyNTAKK2NvdW50cnlfaXNibiAiMiIKK2NvdW50cnlfY2FyICJGIgorJSBGSVhNRSBsYW5nX25hbWUgIk9jY2l0YW4iIGluIE9jY2l0YW4gPworbGFuZ19hYiAib2MiCitsYW5nX3Rlcm0gIm9jaSIKK2xhbmdfbGliICJvY2kiCitFTkQgTENfQUREUkVTUworCitMQ19DVFlQRQorY29weSAiaTE4biIKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCitjb3B5ICJlbl9ESyIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA2Rj48VTAwNEY+PFUwMDczPjxVMDA1Mz48VTAwNzk+PFUwMDU5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2NvcHkgImZyX0ZSIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgImZyX0ZSIgorRU5EIExDX05VTUVSSUMKKworTENfUEFQRVIKK2NvcHkgImZyX0ZSIgorRU5EIExDX1BBUEVSCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJmcl9GUiIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19URUxFUEhPTkUKK2NvcHkgImZyX0ZSIgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19USU1FCithYmRheSAgICI8VTAwNjQ+PFUwMDY5PjxVMDA2RD4iOyI8VTAwNkM+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2RD48VTAwNjU+PFUwMDYzPiI7LworICAgICAgICAiPFUwMDZBPjxVMDBGMj48VTAwNzU+IjsiPFUwMDc2PjxVMDA2NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDYxPjxVMDA2Mj4iCitkYXkgICAgICI8VTAwNjQ+PFUwMDY5PjxVMDA2RD48VTAwNjU+PFUwMDZFPjxVMDA2Nz48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNjQ+PFUwMDY5PjxVMDA2Qz48VTAwNzU+PFUwMDZFPjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwNjk+PFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMDczPiI7LworICAgICAgICAiPFUwMDY0PjxVMDA2OT48VTAwNkQ+PFUwMDY1PjxVMDA2Mz48VTAwNzI+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwNjk+PFUwMDZBPjxVMDBGMz48VTAwNzU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDY0PjxVMDA2OT48VTAwNzY+PFUwMDY1PjxVMDA2RT48VTAwNjQ+PFUwMDcyPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNjQ+PFUwMDY5PjxVMDA3Mz48VTAwNjE+PFUwMDYyPjxVMDA3ND48VTAwNjU+IgorYWJtb24gICAiPFUwMDY3PjxVMDA2NT48VTAwNkU+IjsiPFUwMDY2PjxVMDA2NT48VTAwNjI+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNjE+PFUwMDYyPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDY5PiI7IjxVMDA2QT48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkM+IjsiPFUwMDYxPjxVMDA2Nz48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3ND4iOyI8VTAwNkY+PFUwMDYzPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PiI7IjxVMDA2ND48VTAwNjU+PFUwMDYzPiIKK21vbiAgICAgIjxVMDA2Nz48VTAwNjU+PFUwMDZFPjxVMDA2OT48VTAwRTg+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDY2PjxVMDA2NT48VTAwNjI+PFUwMDcyPjxVMDA2OT48VTAwRTg+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMEU3PiI7LworICAgICAgICAiPFUwMDYxPjxVMDA2Mj48VTAwNzI+PFUwMDY5PjxVMDA2MT48VTAwNkM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZFPjxVMDA2OD4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPjxVMDA2OD48VTAwNjU+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDYxPjxVMDA2Nz48VTAwNkY+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDc0PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkY+PFUwMDYzPjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA3Nj48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDY0PjxVMDA2NT48VTAwNjM+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iCitkX3RfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJFPjxVMDAyNT48VTAwNkQ+PFUwMDJFPjxVMDAyNT48VTAwNTk+IgordF9mbXQgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICIiOyIiCit0X2ZtdF9hbXBtICIiCitFTkQgTENfVElNRQorCitMQ19OQU1FCislIEZJWE1FCitjb3B5ICJmcl9GUiIKK0VORCBMQ19OQU1FCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9vbV9FVCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL29tX0VUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjY2Q1ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9vbV9FVApAQCAtMCwwICsxLDIzNyBAQAorY29tbWVudF9jaGFyICAgICUKK2VzY2FwZV9jaGFyICAgICAvCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgT3JvbW8gbGFuZ3VhZ2UgbG9jYWxlIGZvciBFdGhpb3BpYS4KKyUKKyUgQ2hhcnNldDogVVRGLTggKFVuZGVyIFF1YmVlIGNvbnZlbnRpb25zKQorJQorJSBPcm9tbyB0ZXJtcyBhcmUgcHJvdmlkZWQgYnkgTWFoZGkgSGFtaWQgTXV1ZGVlIG9mIFNhZ2FsZWUgT3JvbW9vCislIFB1Ymxpc2hpbmcgQ28uIEluYyBhbmQgZm9ybWF0dGVkIGluIHRoaXMgbG9jYWxlIGJ5IERhbmllbCBZYWNvYiBvZgorJSB0aGUgR2UnZXogRnJvbnRpZXIgRm91bmRhdGlvbi4gIFRoZSBPcm9tbyBsYW5ndWFnZSB0ZXJtcyB1c2VkIGhlcmUKKyUgYXJlIHRob3NlIGNvbnNpZGVyZWQgdG8gYmUgY2Fub25pY2FsIGluIHRoZSBPcm9tbyBsYW5ndWFnZSB1bmRlcgorJSBjb250ZW1wb3JhcnkgYW5kIHByb2dyZXNzaXZlIHVzYWdlIGFkb3B0ZWQgYnkgZ292ZXJubWVudCBidXJlYXVzCislIGFjcm9zcyB0aGUgT3JvbW8gcmVnaW9uLiAgUmVnaW9uYWwgc3lub255bXMgbmF0dXJhbGx5IGV4aXN0IGZvciBtYW55CislIG9mIHRoZSBtb250aCBhbmQgZGF5IG5hbWVzLgorJQorJSBUaGlzIGxvY2FsZSBkYXRhIGhhcyBiZWVuIGRldmVsb3BlZCB1bmRlciB0aGUgWWVoYSBQcm9qZWN0OgorJSAgICAgIGh0dHA6Ly95ZWhhLnNvdXJjZWZvcmdlLm5ldC8KKyUKKyUgYnVpbGQgd2l0aDogbG9jYWxlZGVmIC1mIFVURi04IC1pIG9tX0VUIG9tX0VUCislCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCisKK0xDX0lERU5USUZJQ0FUSU9OCislCit0aXRsZSAgICAgICJPcm9tbyBsYW5ndWFnZSBsb2NhbGUgZm9yIEV0aGlvcGlhLiIKK3NvdXJjZSAgICAgIkdlJ2V6IEZyb250aWVyIEZvdW5kYXRpb24gJiBTYWdhbGVlIE9yb21vbyBQdWJsaXNoaW5nIENvLiBJbmMuIgorYWRkcmVzcyAgICAiNzgwMiBTb2xvbW9uIFNlYWwgRHIuLCBTcHJpbmdmaWVsZCwgVkEgMjIxNTIsIFVTQSIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImxvY2FsZXNAZ2Vlei5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJvbSIKK3RlcnJpdG9yeSAgIkVUIgorcmV2aXNpb24gICAiMC4yMCIKK2RhdGUgICAgICAgIjIwMDMtMDctMDUiCislCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NRUFTVVJFTUVOVAorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgInBvc2l4OjE5OTMiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX1RFTEVQSE9ORQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19USU1FCislCitFTkQgTENfSURFTlRJRklDQVRJT04KKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSAgRXRoaW9waWMgJiBRdWJlZSBTcGVjaWZjIERhdGE6CislCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCitMQ19DT0xMQVRFCitjb3B5ICJhbV9FVCIKK2NvcHkgIm9tX0tFIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgInRpX0VUIgorRU5EIExDX0NUWVBFCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIEV0aGlvcGlhIFNwZWNpZmMgYW5kIFNoYXJlZCBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgInRpX0VUIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX01PTkVUQVJZCitjb3B5ICJ0aV9FVCIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJ0aV9FVCIKK0VORCBMQ19OVU1FUklDCisKK0xDX1BBUEVSCitjb3B5ICJ0aV9FVCIKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK2NvcHkgInRpX0VUIgorRU5EIExDX1RFTEVQSE9ORQorCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislICBPcm9tbyBTcGVjaWZpYyBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfTUVTU0FHRVMKK2NvcHkgInRpX0VUIgorRU5EIExDX01FU1NBR0VTCisKKworTENfTkFNRQorJQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OQU1FIGNhdGVnb3J5LgorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorbmFtZV9nZW4gICAgIiIKK25hbWVfbXIgICAgICI8VTAwNEY+PFUwMDYyPiIKK25hbWVfbXJzICAgICI8VTAwNDE+PFUwMDY0PiIKK25hbWVfbWlzcyAgICI8VTAwNDQ+PFUwMDc1PiIKK25hbWVfbXMgICAgICIiCislCitFTkQgTENfTkFNRQorCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislICBPcm9tby9FVCBTcGVjaWZpYyBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfQUREUkVTUworJQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19BRERSRVNTIGNhdGVnb3J5LgorJQorcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3Mj4iCitjb3VudHJ5X25hbWUgICI8VTAwNDk+PFUwMDc0PjxVMDA2Rj48VTAwNkY+PFUwMDcwPjxVMDA2OD48VTAwNjk+PFUwMDc5PjxVMDA2MT48VTAwNjE+IgorY291bnRyeV9wb3N0ICAiPFUwMDQ1PjxVMDA1ND48VTAwNDg+IgorY291bnRyeV9hYjIgICAiPFUwMDQ1PjxVMDA1ND4iCitjb3VudHJ5X2FiMyAgICI8VTAwNDU+PFUwMDU0PjxVMDA0OD4iCitjb3VudHJ5X251bSAgIDIzMSAgICUgMjEwIGZvdW5kIGluIGF0IGxlYXN0IG9uZSBJU08gMzE2NiBkb2MKKyUgY291bnRyeV9jYXIgICB1bmtub3duCislIGNvdW50cnlfaXNibiAgdW5rbm93biwgTmVlZCBJU08gMjEwOAorbGFuZ19uYW1lICAgICAiPFUwMDRGPjxVMDA3Mj48VTAwNkY+PFUwMDZEPjxVMDA2Rj48VTAwNkY+IgorbGFuZ19hYiAgICAgICAiPFUwMDZGPjxVMDA2RD4iCitsYW5nX3Rlcm0gICAgICI8VTAwNkY+PFUwMDcyPjxVMDA2RD4iCitsYW5nX2xpYiAgICAgICI8VTAwNkY+PFUwMDcyPjxVMDA2RD4iCislCitFTkQgTENfQUREUkVTUworCisKK0xDX1RJTUUKKyUKKyUgQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyAoJWEpCislCithYmRheSAgICAiPFUwMDQ0PjxVMDA2OT48VTAwNkM+IjsvCisJICI8VTAwNTc+PFUwMDY5PjxVMDA3OD4iOy8KKwkgIjxVMDA1MT48VTAwNjk+PFUwMDYyPiI7LworCSAiPFUwMDUyPjxVMDA2Rj48VTAwNjI+IjsvCisJICI8VTAwNEI+PFUwMDYxPjxVMDA2RD4iOy8KKwkgIjxVMDA0QT48VTAwNjk+PFUwMDZEPiI7LworCSAiPFUwMDUzPjxVMDA2MT48VTAwNkU+IgorJQorJSBGdWxsIHdlZWtkYXkgbmFtZXMgKCVBKQorJQorZGF5ICAgICAgIjxVMDA0ND48VTAwNjk+PFUwMDZDPjxVMDA2Mj48VTAwNjE+PFUwMDc0PjxVMDA2MT4iOy8KKwkgIjxVMDA1Nz48VTAwNjk+PFUwMDY5PjxVMDA3OD48VTAwNjE+PFUwMDc0PjxVMDA2MT4iOy8KKwkgIjxVMDA1MT48VTAwNjk+PFUwMDYyPjxVMDA3OD48VTAwNjE+PFUwMDc0PjxVMDA2MT4iOy8KKwkgIjxVMDA1Mj48VTAwNkY+PFUwMDZGPjxVMDA2Mj48VTAwNjk+PFUwMDY5PiI7LworCSAiPFUwMDRCPjxVMDA2MT48VTAwNkQ+PFUwMDY5PjxVMDA2OT48VTAwNzM+PFUwMDYxPiI7LworCSAiPFUwMDRBPjxVMDA2OT48VTAwNkQ+PFUwMDYxPjxVMDA2MT48VTAwNzQ+PFUwMDYxPiI7LworCSAiPFUwMDUzPjxVMDA2MT48VTAwNkU+PFUwMDYyPjxVMDA2MT48VTAwNzQ+PFUwMDYxPiIKKyUKKyUgQWJicmV2aWF0ZWQgbW9udGggbmFtZXMgKCViKQorJQorYWJtb24gICAgIjxVMDA0MT48VTAwNkQ+PFUwMDYxPiI7LworICAgICAgICAgIjxVMDA0Nz48VTAwNzU+PFUwMDcyPiI7LworICAgICAgICAgIjxVMDA0Mj48VTAwNjk+PFUwMDc0PiI7LworICAgICAgICAgIjxVMDA0NT48VTAwNkM+PFUwMDYyPiI7LworICAgICAgICAgIjxVMDA0Mz48VTAwNjE+PFUwMDZEPiI7LworICAgICAgICAgIjxVMDA1Nz48VTAwNjE+PFUwMDc4PiI7LworICAgICAgICAgIjxVMDA0MT48VTAwNjQ+PFUwMDZGPiI7LworICAgICAgICAgIjxVMDA0OD48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAgIjxVMDA0Nj48VTAwNzU+PFUwMDZDPiI7LworICAgICAgICAgIjxVMDA0Rj48VTAwNkU+PFUwMDZCPiI7LworICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDY0PiI7LworICAgICAgICAgIjxVMDA0RD48VTAwNzU+PFUwMDY0PiIKKyUKKyUgRnVsbCBtb250aCBuYW1lcyAoJUIpCislCittb24gICAgICAiPFUwMDQxPjxVMDA2RD48VTAwNjE+PFUwMDZBPjxVMDA2QT48VTAwNjk+PFUwMDY5PiI7LworICAgICAgICAgIjxVMDA0Nz48VTAwNzU+PFUwMDcyPjxVMDA2MT48VTAwNjE+PFUwMDZFPjxVMDA2ND48VTAwNjg+PFUwMDYxPjxVMDA2Qz48VTAwNjE+IjsvCisgICAgICAgICAiPFUwMDQyPjxVMDA2OT48VTAwNzQ+PFUwMDZGPjxVMDA2Rj48VTAwNzQ+PFUwMDY1PjxVMDA2NT48VTAwNzM+PFUwMDczPjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNDU+PFUwMDZDPjxVMDA2Mj48VTAwNjE+IjsvCisgICAgICAgICAiPFUwMDQzPjxVMDA2MT48VTAwNjE+PFUwMDZEPjxVMDA3Mz48VTAwNjE+IjsvCisgICAgICAgICAiPFUwMDU3PjxVMDA2MT48VTAwNzg+PFUwMDYxPjxVMDA2Mj48VTAwNjE+PFUwMDZBPjxVMDA2QT48VTAwNjk+PFUwMDY5PiI7LworICAgICAgICAgIjxVMDA0MT48VTAwNjQ+PFUwMDZGPjxVMDA2Rj48VTAwNkM+PFUwMDY1PjxVMDA2NT48VTAwNzM+PFUwMDczPjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNDg+PFUwMDYxPjxVMDA2Nz48VTAwNjE+PFUwMDc5PjxVMDA3OT48VTAwNjE+IjsvCisgICAgICAgICAiPFUwMDQ2PjxVMDA3NT48VTAwNzU+PFUwMDZDPjxVMDA2Mj48VTAwNjE+PFUwMDZFPjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNEY+PFUwMDZFPjxVMDA2Qj48VTAwNkY+PFUwMDZDPjxVMDA2Rj48VTAwNkM+PFUwMDY1PjxVMDA2NT48VTAwNzM+PFUwMDczPjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA2ND48VTAwNjE+PFUwMDYxPjxVMDA3Mz48VTAwNjE+IjsvCisgICAgICAgICAiPFUwMDREPjxVMDA3NT48VTAwNjQ+PFUwMDY0PjxVMDA2NT48VTAwNjU+IgorJQorJSBFcXVpdmFsZW50IG9mIEFNIFBNCislCithbV9wbSAgICAiPFUwMDU3PjxVMDA0ND4iOyI8VTAwNTc+PFUwMDQyPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbiAoJXgpCislCSIlZC8lbS8lWSIKKyUKK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNTk+IgorJQorJSBBcHByb3ByaWF0ZSB0aW1lIHJlcHJlc2VudGF0aW9uICglWCkKKyUJIiVsOiVNOiVTIgorJQordF9mbXQgIjxVMDAyNT48VTAwNkM+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+IgorJQorJSBBcHByb3ByaWF0ZSBBTS9QTSB0aW1lIHJlcHJlc2VudGF0aW9uICglcikKKyUJIiVYICVwIgorJQordF9mbXRfYW1wbSAiPFUwMDI1PjxVMDA1OD48VTAwMjA+PFUwMDI1PjxVMDA3MD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24gKCVjKQorJQkiJUEsICVCICVlLCAlWSAlciAlWgorJQorZF90X2ZtdCAgICAiPFUwMDI1PjxVMDA0MT48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNDI+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDJDPi8KKzxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbiAoZGF0ZSgxKSkKKyUJIiVBLCAlYiAlZSwgJXIgJVogJVkiCislCitkYXRlX2ZtdCAgICAiPFUwMDI1PjxVMDA0MT48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNDI+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDJDPi8KKzxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyMD48VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKKyUKK0VORCBMQ19USU1FCislCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9vbV9LRSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL29tX0tFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZGFlODYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9vbV9LRQpAQCAtMCwwICsxLDMzNyBAQAorY29tbWVudF9jaGFyICAgICUKK2VzY2FwZV9jaGFyICAgICAvCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgT3JvbW8gbGFuZ3VhZ2UgbG9jYWxlIGZvciBLZW55YS4KKyUKKyUgQ2hhcnNldDogSVNPLTg4NTktMSAoVW5kZXIgUXViZWUgY29udmVudGlvbnMpCislCislIE9yb21vIHRlcm1zIGFyZSBwcm92aWRlZCBieSBNYWhkaSBIYW1pZCBNdXVkZWUgb2YgU2FnYWxlZSBPcm9tb28KKyUgUHVibGlzaGluZyBDby4gSW5jIGFuZCBmb3JtYXR0ZWQgaW4gdGhpcyBsb2NhbGUgYnkgRGFuaWVsIFlhY29iIG9mCislIHRoZSBHZSdleiBGcm9udGllciBGb3VuZGF0aW9uLiAgVGhlIE9yb21vIGxhbmd1YWdlIHRlcm1zIHVzZWQgaGVyZQorJSBhcmUgdGhvc2UgY29uc2lkZXJlZCB0byBiZSBjYW5vbmljYWwgaW4gdGhlIE9yb21vIGxhbmd1YWdlIHVuZGVyCislIGNvbnRlbXBvcmFyeSBhbmQgcHJvZ3Jlc3NpdmUgdXNhZ2UgYWRvcHRlZCBieSBnb3Zlcm5tZW50IGJ1cmVhdXMKKyUgYWNyb3NzIHRoZSBPcm9tbyByZWdpb24uICBSZWdpb25hbCBzeW5vbnltcyBuYXR1cmFsbHkgZXhpc3QgZm9yIG1hbnkKKyUgb2YgdGhlIG1vbnRoIGFuZCBkYXkgbmFtZXMuCislCislIFRoaXMgbG9jYWxlIGRhdGEgaGFzIGJlZW4gZGV2ZWxvcGVkIHVuZGVyIHRoZSBZZWhhIFByb2plY3Q6CislICAgICAgaHR0cDovL3llaGEuc291cmNlZm9yZ2UubmV0LworJQorJSBidWlsZCB3aXRoOiBsb2NhbGVkZWYgLWYgSVNPLTg4NTktMSAtaSBvbV9LRSBvbV9LRQorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworCitMQ19JREVOVElGSUNBVElPTgorJQordGl0bGUgICAgICAiT3JvbW8gbGFuZ3VhZ2UgbG9jYWxlIGZvciBLZW55YS4iCitzb3VyY2UgICAgICJHZSdleiBGcm9udGllciBGb3VuZGF0aW9uICYgU2FnYWxlZSBPcm9tb28gUHVibGlzaGluZyBDby4gSW5jLiIKK2FkZHJlc3MgICAgIjc4MDIgU29sb21vbiBTZWFsIERyLiwgU3ByaW5nZmllbGQsIFZBIDIyMTUyLCBVU0EiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJsb2NhbGVzQGdlZXoub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAib20iCit0ZXJyaXRvcnkgICJLRSIKK3JldmlzaW9uICAgIjAuMjAiCitkYXRlICAgICAgICIyMDAzLTA3LTA1IgorJQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTUVBU1VSRU1FTlQKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJwb3NpeDoxOTkzIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19URUxFUEhPTkUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfVElNRQorJQorRU5EIExDX0lERU5USUZJQ0FUSU9OCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIFF1YmVlIFNwZWNpZmMgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX0NPTExBVEUKKyUKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxCislCitjb3B5ICJpc28xNDY1MV90MSIKKyUKKyUgRGVmaW5lIGV4dHJhIE9yb21vIGxldHRlcnMgYW5kIHRoZWlyIHNvcnQgb3JkZXI6CislCitjb2xsYXRpbmctc3ltYm9sICA8Q0FQLU1JTj4KK2NvbGxhdGluZy1zeW1ib2wgIDxjaC1xdWJlZT4KK2NvbGxhdGluZy1lbGVtZW50IDxDSD4gZnJvbSAiPFUwMDQzPjxVMDA0OD4iCitjb2xsYXRpbmctZWxlbWVudCA8Q2g+IGZyb20gIjxVMDA0Mz48VTAwNjg+IgorY29sbGF0aW5nLWVsZW1lbnQgPGNoPiBmcm9tICI8VTAwNjM+PFUwMDY4PiIKK2NvbGxhdGluZy1zeW1ib2wgIDxkaC1xdWJlZT4KK2NvbGxhdGluZy1lbGVtZW50IDxESD4gZnJvbSAiPFUwMDQ0PjxVMDA0OD4iCitjb2xsYXRpbmctZWxlbWVudCA8RGg+IGZyb20gIjxVMDA0ND48VTAwNjg+IgorY29sbGF0aW5nLWVsZW1lbnQgPGRoPiBmcm9tICI8VTAwNjQ+PFUwMDY4PiIKK2NvbGxhdGluZy1zeW1ib2wgIDxraC1xdWJlZT4KK2NvbGxhdGluZy1lbGVtZW50IDxLSD4gZnJvbSAiPFUwMDRCPjxVMDA0OD4iCitjb2xsYXRpbmctZWxlbWVudCA8S2g+IGZyb20gIjxVMDA0Qj48VTAwNjg+IgorY29sbGF0aW5nLWVsZW1lbnQgPGtoPiBmcm9tICI8VTAwNkI+PFUwMDY4PiIKK2NvbGxhdGluZy1zeW1ib2wgIDxueS1xdWJlZT4KK2NvbGxhdGluZy1lbGVtZW50IDxOWT4gZnJvbSAiPFUwMDRFPjxVMDA1OT4iCitjb2xsYXRpbmctZWxlbWVudCA8Tnk+IGZyb20gIjxVMDA0RT48VTAwNzk+IgorY29sbGF0aW5nLWVsZW1lbnQgPG55PiBmcm9tICI8VTAwNkU+PFUwMDc5PiIKK2NvbGxhdGluZy1zeW1ib2wgIDxwaC1xdWJlZT4KK2NvbGxhdGluZy1lbGVtZW50IDxQSD4gZnJvbSAiPFUwMDUwPjxVMDA0OD4iCitjb2xsYXRpbmctZWxlbWVudCA8UGg+IGZyb20gIjxVMDA1MD48VTAwNjg+IgorY29sbGF0aW5nLWVsZW1lbnQgPHBoPiBmcm9tICI8VTAwNzA+PFUwMDY4PiIKK2NvbGxhdGluZy1zeW1ib2wgIDxzaC1xdWJlZT4KK2NvbGxhdGluZy1lbGVtZW50IDxTSD4gZnJvbSAiPFUwMDUzPjxVMDA0OD4iCitjb2xsYXRpbmctZWxlbWVudCA8U2g+IGZyb20gIjxVMDA1Mz48VTAwNjg+IgorY29sbGF0aW5nLWVsZW1lbnQgPHNoPiBmcm9tICI8VTAwNzM+PFUwMDY4PiIKKworcmVvcmRlci1hZnRlciA8TUlOPgorPENBUC1NSU4+CisKK3Jlb3JkZXItYWZ0ZXIgPHo+Cis8Y2gtcXViZWU+Cis8ZGgtcXViZWU+Cis8a2gtcXViZWU+Cis8bnktcXViZWU+Cis8cGgtcXViZWU+Cis8c2gtcXViZWU+CisKK3Jlb3JkZXItYWZ0ZXIgPFUwMERFPgorPGNoPgk8Y2gtcXViZWU+OzxNSU4+OzxNSU4+O0lHTk9SRQorPENoPgk8Y2gtcXViZWU+OzxDQVA+OzxNSU4+O0lHTk9SRQorPENIPgk8Y2gtcXViZWU+OzxDQVA+OzxDQVA+O0lHTk9SRQorPGRoPgk8ZGgtcXViZWU+OzxNSU4+OzxNSU4+O0lHTk9SRQorPERoPgk8ZGgtcXViZWU+OzxDQVA+OzxNSU4+O0lHTk9SRQorPERIPgk8ZGgtcXViZWU+OzxDQVA+OzxDQVA+O0lHTk9SRQorPGtoPgk8a2gtcXViZWU+OzxNSU4+OzxNSU4+O0lHTk9SRQorPEtoPgk8a2gtcXViZWU+OzxDQVA+OzxNSU4+O0lHTk9SRQorPEtIPgk8a2gtcXViZWU+OzxDQVA+OzxDQVA+O0lHTk9SRQorPG55Pgk8bnktcXViZWU+OzxNSU4+OzxNSU4+O0lHTk9SRQorPE55Pgk8bnktcXViZWU+OzxDQVA+OzxNSU4+O0lHTk9SRQorPE5ZPgk8bnktcXViZWU+OzxDQVA+OzxDQVA+O0lHTk9SRQorPHBoPgk8cGgtcXViZWU+OzxNSU4+OzxNSU4+O0lHTk9SRQorPFBoPgk8cGgtcXViZWU+OzxDQVA+OzxNSU4+O0lHTk9SRQorPFBIPgk8cGgtcXViZWU+OzxDQVA+OzxDQVA+O0lHTk9SRQorPHNoPgk8c2gtcXViZWU+OzxNSU4+OzxNSU4+O0lHTk9SRQorPFNoPgk8c2gtcXViZWU+OzxDQVA+OzxNSU4+O0lHTk9SRQorPFNIPgk8c2gtcXViZWU+OzxDQVA+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWVuZAorJQorRU5EIExDX0NPTExBVEUKKworCitMQ19DVFlQRQorY29weSAiaTE4biIKKwordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislICBLZW55YSBTcGVjaWZjIGFuZCBTaGFyZWQgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKKworTENfTUVBU1VSRU1FTlQKKyUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTUVBU1VSRU1FTlQgY2F0ZWdvcnkuCislCittZWFzdXJlbWVudCAxCislCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTU9ORVRBUlkKKyUKK2ludF9jdXJyX3N5bWJvbCAgICAgICAiPFUwMDRCPjxVMDA0NT48VTAwNTM+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAiPFUwMDRCPjxVMDA3Mz48VTAwNjg+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgMAorbl9jc19wcmVjZWRlcyAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAwCitwX3NpZ25fcG9zbiAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgIDEKKyUKK0VORCBMQ19NT05FVEFSWQorCisKK0xDX05VTUVSSUMKKyUKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OVU1FUklDIGNhdGVnb3J5LgorJQorZGVjaW1hbF9wb2ludCAgICAgICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgIjxVMDAyQz4iCitncm91cGluZyAgICAgICAgICAgICAgIDM7MworJQorRU5EIExDX05VTUVSSUMKKworCitMQ19QQVBFUgorJQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19QQVBFUiBjYXRlZ29yeS4KKyUKK2hlaWdodCAgICAgIDI5Nword2lkdGggICAgICAgMjEwCislCitFTkQgTENfUEFQRVIKKworCitMQ19URUxFUEhPTkUKKyUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfVEVMRVBIT05FIGNhdGVnb3J5LgorJQordGVsX2RvbV9mbXQgICAgIjxVMDAyNT48VTAwNjE+PFUwMDJEPjxVMDAyNT48VTAwNkM+IgordGVsX2ludF9mbXQgICAgIjxVMDAyNT48VTAwNjM+PFUwMDJEPjxVMDAyNT48VTAwNjE+PFUwMDJEPjxVMDAyNT48VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzMj48VTAwMzU+PFUwMDM0PiIKKyUgaW50X3NlbGVjdCAgIHVua25vd24KKyUKK0VORCBMQ19URUxFUEhPTkUKKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSAgT3JvbW8gU3BlY2lmaWMgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX01FU1NBR0VTCitjb3B5ICJvbV9FVCIKK0VORCBMQ19NRVNTQUdFUworCitMQ19OQU1FCitjb3B5ICJvbV9FVCIKK0VORCBMQ19OQU1FCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIE9yb21vL0tFIFNwZWNpZmljIERhdGE6CislCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCitMQ19BRERSRVNTCislCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX0FERFJFU1MgY2F0ZWdvcnkuCislCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDdBPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDczPi8KKzxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA2NT48VTAwMjU+PFUwMDcyPiIKK2NvdW50cnlfbmFtZSAgIjxVMDA0Qj48VTAwNjU+PFUwMDY1PjxVMDA2RT48VTAwNjk+PFUwMDc5PjxVMDA2MT48VTAwNjE+IgorY291bnRyeV9wb3N0ICAiPFUwMDRCPjxVMDA0NT48VTAwNEU+IgorY291bnRyeV9hYjIgICAiPFUwMDRCPjxVMDA0NT4iCitjb3VudHJ5X2FiMyAgICI8VTAwNEI+PFUwMDQ1PjxVMDA0RT4iCitjb3VudHJ5X251bSAgIDQwNAorJSBjb3VudHJ5X2NhciAgIHVua25vd24KKyUgY291bnRyeV9pc2JuICB1bmtub3duLCBOZWVkIElTTyAyMTA4CitsYW5nX25hbWUgICAgICI8VTAwNEY+PFUwMDcyPjxVMDA2Rj48VTAwNkQ+PFUwMDZGPjxVMDA2Rj4iCitsYW5nX2FiICAgICAgICI8VTAwNkY+PFUwMDZEPiIKK2xhbmdfdGVybSAgICAgIjxVMDA2Rj48VTAwNzI+PFUwMDZEPiIKK2xhbmdfbGliICAgICAgIjxVMDA2Rj48VTAwNzI+PFUwMDZEPiIKKyUKK0VORCBMQ19BRERSRVNTCisKKworTENfVElNRQorJQorJSBBYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWVzICglYSkKKyUKK2FiZGF5ICAgICI8VTAwNDQ+PFUwMDY5PjxVMDA2Qz4iOy8KKwkgIjxVMDA1Nz48VTAwNjk+PFUwMDc4PiI7LworCSAiPFUwMDUxPjxVMDA2OT48VTAwNjI+IjsvCisJICI8VTAwNTI+PFUwMDZGPjxVMDA2Mj4iOy8KKwkgIjxVMDA0Qj48VTAwNjE+PFUwMDZEPiI7LworCSAiPFUwMDRBPjxVMDA2OT48VTAwNkQ+IjsvCisJICI8VTAwNTM+PFUwMDYxPjxVMDA2RT4iCislCislIEZ1bGwgd2Vla2RheSBuYW1lcyAoJUEpCislCitkYXkgICAgICAiPFUwMDQ0PjxVMDA2OT48VTAwNkM+PFUwMDYyPjxVMDA2MT48VTAwNzQ+PFUwMDYxPiI7LworCSAiPFUwMDU3PjxVMDA2OT48VTAwNjk+PFUwMDc4PjxVMDA2MT48VTAwNzQ+PFUwMDYxPiI7LworCSAiPFUwMDUxPjxVMDA2OT48VTAwNjI+PFUwMDc4PjxVMDA2MT48VTAwNzQ+PFUwMDYxPiI7LworCSAiPFUwMDUyPjxVMDA2Rj48VTAwNkY+PFUwMDYyPjxVMDA2OT48VTAwNjk+IjsvCisJICI8VTAwNEI+PFUwMDYxPjxVMDA2RD48VTAwNjk+PFUwMDY5PjxVMDA3Mz48VTAwNjE+IjsvCisJICI8VTAwNEE+PFUwMDY5PjxVMDA2RD48VTAwNjE+PFUwMDYxPjxVMDA3ND48VTAwNjE+IjsvCisJICI8VTAwNTM+PFUwMDYxPjxVMDA2RT48VTAwNjI+PFUwMDYxPjxVMDA3ND48VTAwNjE+IgorJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCislCithYm1vbiAgICAiPFUwMDQxPjxVMDA2RD48VTAwNjE+IjsvCisgICAgICAgICAiPFUwMDQ3PjxVMDA3NT48VTAwNzI+IjsvCisgICAgICAgICAiPFUwMDQyPjxVMDA2OT48VTAwNzQ+IjsvCisgICAgICAgICAiPFUwMDQ1PjxVMDA2Qz48VTAwNjI+IjsvCisgICAgICAgICAiPFUwMDQzPjxVMDA2MT48VTAwNkQ+IjsvCisgICAgICAgICAiPFUwMDU3PjxVMDA2MT48VTAwNzg+IjsvCisgICAgICAgICAiPFUwMDQxPjxVMDA2ND48VTAwNkY+IjsvCisgICAgICAgICAiPFUwMDQ4PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICAiPFUwMDQ2PjxVMDA3NT48VTAwNkM+IjsvCisgICAgICAgICAiPFUwMDRGPjxVMDA2RT48VTAwNkI+IjsvCisgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNjQ+IjsvCisgICAgICAgICAiPFUwMDREPjxVMDA3NT48VTAwNjQ+IgorJQorJSBGdWxsIG1vbnRoIG5hbWVzICglQikKKyUKK21vbiAgICAgICI8VTAwNDE+PFUwMDZEPjxVMDA2MT48VTAwNkE+PFUwMDZBPjxVMDA2OT48VTAwNjk+IjsvCisgICAgICAgICAiPFUwMDQ3PjxVMDA3NT48VTAwNzI+PFUwMDYxPjxVMDA2MT48VTAwNkU+PFUwMDY0PjxVMDA2OD48VTAwNjE+PFUwMDZDPjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNDI+PFUwMDY5PjxVMDA3ND48VTAwNkY+PFUwMDZGPjxVMDA3ND48VTAwNjU+PFUwMDY1PjxVMDA3Mz48VTAwNzM+PFUwMDYxPiI7LworICAgICAgICAgIjxVMDA0NT48VTAwNkM+PFUwMDYyPjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNDM+PFUwMDYxPjxVMDA2MT48VTAwNkQ+PFUwMDczPjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNTc+PFUwMDYxPjxVMDA3OD48VTAwNjE+PFUwMDYyPjxVMDA2MT48VTAwNkE+PFUwMDZBPjxVMDA2OT48VTAwNjk+IjsvCisgICAgICAgICAiPFUwMDQxPjxVMDA2ND48VTAwNkY+PFUwMDZGPjxVMDA2Qz48VTAwNjU+PFUwMDY1PjxVMDA3Mz48VTAwNzM+PFUwMDYxPiI7LworICAgICAgICAgIjxVMDA0OD48VTAwNjE+PFUwMDY3PjxVMDA2MT48VTAwNzk+PFUwMDc5PjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNDY+PFUwMDc1PjxVMDA3NT48VTAwNkM+PFUwMDYyPjxVMDA2MT48VTAwNkU+PFUwMDYxPiI7LworICAgICAgICAgIjxVMDA0Rj48VTAwNkU+PFUwMDZCPjxVMDA2Rj48VTAwNkM+PFUwMDZGPjxVMDA2Qz48VTAwNjU+PFUwMDY1PjxVMDA3Mz48VTAwNzM+PFUwMDYxPiI7LworICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDY0PjxVMDA2MT48VTAwNjE+PFUwMDczPjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNEQ+PFUwMDc1PjxVMDA2ND48VTAwNjQ+PFUwMDY1PjxVMDA2NT4iCislCislIEVxdWl2YWxlbnQgb2YgQU0gUE0KKyUKK2FtX3BtICAgICI8VTAwNTc+PFUwMDQ0PiI7IjxVMDA1Nz48VTAwNDI+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uICgleCkKKyUJIiVkLyVtLyVZIgorJQorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA1OT4iCislCislIEFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24gKCVYKQorJQkiJWw6JU06JVMiCislCit0X2ZtdCAiPFUwMDI1PjxVMDA2Qz48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4iCislCislIEFwcHJvcHJpYXRlIEFNL1BNIHRpbWUgcmVwcmVzZW50YXRpb24gKCVyKQorJQkiJVggJXAiCislCit0X2ZtdF9hbXBtICI8VTAwMjU+PFUwMDU4PjxVMDAyMD48VTAwMjU+PFUwMDcwPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbiAoJWMpCislCSIlQSwgJUIgJWUsICVZICVyICVaCislCitkX3RfZm10ICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMkM+LworPFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uIChkYXRlKDEpKQorJQkiJUEsICViICVlLCAlciAlWiAlWSIKKyUKK2RhdGVfZm10ICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMkM+LworPFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDIwPjxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorJQorRU5EIExDX1RJTUUKKyUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL29yX0lOIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvb3JfSU4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY3NTRiMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL29yX0lOCkBAIC0wLDAgKzEsODExIEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgLworCislIE9yaXlhIGxvY2FsZSBmb3IgSW5kaWEuCislIENvbnRyaWJ1dGVkIGJ5IE1hc2FoaWRlIFdhc2hpemF3YSA8d2FzaGkgYXQganAgaWJtIGNvbT4KKworJSUlJSUlJSUlJSUlJQorTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgICJPcml5YSBsYW5ndWFnZSBsb2NhbGUgZm9yIEluZGlhIgorc291cmNlICAgICAgIklCTSBBUCBMaW51eCBUZWNobm9sb2d5IENlbnRlciwgWWFtYXRvIFNvZnR3YXJlIExhYm9yYXRvcnkiCithZGRyZXNzICAgICAiMTYyMy0xNCwgU2hpbW90c3VydW1hLCBZYW1hdG8tc2hpLCBLYW5hZ2F3YS1rZW4sIDI0Mi04NTAyLCBKYXBhbiIKK2NvbnRhY3QgICAgICIiCitlbWFpbCAgICAgICAiYnVnLWdsaWJjQGdudS5vcmciCit0ZWwgICAgICAgICAiIgorZmF4ICAgICAgICAgIiIKK2xhbmd1YWdlICAgICJPcml5YSIKK3RlcnJpdG9yeSAgICJJbmRpYSIKK3JldmlzaW9uICAgICIxLjAiCitkYXRlICAgICAgICAiMjAwNi0wNS0yNSIKKyUKK2NhdGVnb3J5ICAib3JfSU46MjAwNCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAib3JfSU46MjAwNCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAib3JfSU46MjAwNCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJvcl9JTjoyMDA0IjtMQ19USU1FCitjYXRlZ29yeSAgIm9yX0lOOjIwMDQiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAib3JfSU46MjAwNCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAib3JfSU46MjAwNCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAib3JfSU46MjAwNCI7TENfUEFQRVIKK2NhdGVnb3J5ICAib3JfSU46MjAwNCI7TENfTkFNRQorY2F0ZWdvcnkgICJvcl9JTjoyMDA0IjtMQ19BRERSRVNTCitjYXRlZ29yeSAgIm9yX0lOOjIwMDQiO0xDX1RFTEVQSE9ORQorRU5EIExDX0lERU5USUZJQ0FUSU9OCisKKyUlJSUlJSUlJSUlJSUKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKKyUlJSUlJSUlJSUlJSUKK0xDX0NPTExBVEUKKworY29sbGF0aW5nLWVsZW1lbnQgPE9SSVlBX0xFVFRFUl9LQS1PUklZQV9TSUdOX1ZJUkFNQS1PUklZQV9MRVRURVJfU1NBPiBmcm9tICI8VTBCMTU+PFUwQjREPjxVMEIzNz4iCitjb2xsYXRpbmctZWxlbWVudCA8T1JJWUFfTEVUVEVSX0REQS1PUklZQV9TSUdOX05VS1RBPiBmcm9tICI8VTBCMjE+PFUwQjNDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxPUklZQV9MRVRURVJfRERIQS1PUklZQV9TSUdOX05VS1RBPiBmcm9tICI8VTBCMjI+PFUwQjNDPiIKKworJSBEZWZpbmUgY29sbGF0aW9uIHdlaWdodHMgYXMgc3ltYm9scworCitjb2xsYXRpbmctc3ltYm9sIDxYMDAwMT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMDA1PgorY29sbGF0aW5nLXN5bWJvbCA8WDAwNzE+Citjb2xsYXRpbmctc3ltYm9sIDxYMDA4Rj4KK2NvbGxhdGluZy1zeW1ib2wgPFgwMEMwPgorY29sbGF0aW5nLXN5bWJvbCA8WDAwRTE+Citjb2xsYXRpbmctc3ltYm9sIDxYMDQwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFgwNTAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDA1MDc+Citjb2xsYXRpbmctc3ltYm9sIDxYMDUwOT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwNTBCPgorY29sbGF0aW5nLXN5bWJvbCA8WDA1MEQ+Citjb2xsYXRpbmctc3ltYm9sIDxYMDUwRj4KK2NvbGxhdGluZy1zeW1ib2wgPFgwNjAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDA3MDA+Citjb2xsYXRpbmctc3ltYm9sIDxYMDc2ND4KK2NvbGxhdGluZy1zeW1ib2wgPFgwNzZBPgorY29sbGF0aW5nLXN5bWJvbCA8WDA3ODI+Citjb2xsYXRpbmctc3ltYm9sIDxYMDc4RT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwN0FBPgorY29sbGF0aW5nLXN5bWJvbCA8WDA3QzA+Citjb2xsYXRpbmctc3ltYm9sIDxYMDdDNj4KK2NvbGxhdGluZy1zeW1ib2wgPFgwN0VFPgorY29sbGF0aW5nLXN5bWJvbCA8WDA3RjY+Citjb2xsYXRpbmctc3ltYm9sIDxYMDgwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFgwODBCPgorY29sbGF0aW5nLXN5bWJvbCA8WDA4M0Y+Citjb2xsYXRpbmctc3ltYm9sIDxYMDg0RD4KK2NvbGxhdGluZy1zeW1ib2wgPFgwODYxPgorY29sbGF0aW5nLXN5bWJvbCA8WDA4NjM+Citjb2xsYXRpbmctc3ltYm9sIDxYMDg2NT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwODY3PgorY29sbGF0aW5nLXN5bWJvbCA8WDA4Njk+Citjb2xsYXRpbmctc3ltYm9sIDxYMDg2Qj4KK2NvbGxhdGluZy1zeW1ib2wgPFgwOERGPgorY29sbGF0aW5nLXN5bWJvbCA8WDA4RTE+Citjb2xsYXRpbmctc3ltYm9sIDxYMDhFOT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwOEVEPgorY29sbGF0aW5nLXN5bWJvbCA8WDA4RUY+Citjb2xsYXRpbmctc3ltYm9sIDxYMDhGNT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwOEY3PgorY29sbGF0aW5nLXN5bWJvbCA8WDA5MDA+Citjb2xsYXRpbmctc3ltYm9sIDxYMDlGOT4KK2NvbGxhdGluZy1zeW1ib2wgPFgwQTAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDBCMDA+Citjb2xsYXRpbmctc3ltYm9sIDxYMEJCMz4KK2NvbGxhdGluZy1zeW1ib2wgPFgwQkJCPgorY29sbGF0aW5nLXN5bWJvbCA8WDBCQkQ+Citjb2xsYXRpbmctc3ltYm9sIDxYMEJCRj4KK2NvbGxhdGluZy1zeW1ib2wgPFgwQkMzPgorY29sbGF0aW5nLXN5bWJvbCA8WDBCQzk+Citjb2xsYXRpbmctc3ltYm9sIDxYMEMwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFgwRDAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDBFMDA+Citjb2xsYXRpbmctc3ltYm9sIDxYMjMzQz4KK2NvbGxhdGluZy1zeW1ib2wgPFgyMzcwPgorY29sbGF0aW5nLXN5bWJvbCA8WDIzNzI+Citjb2xsYXRpbmctc3ltYm9sIDxYMjM3ND4KK2NvbGxhdGluZy1zeW1ib2wgPFgyMzc2PgorY29sbGF0aW5nLXN5bWJvbCA8WDIzNzg+Citjb2xsYXRpbmctc3ltYm9sIDxYMjM3QT4KK2NvbGxhdGluZy1zeW1ib2wgPFgyMzdDPgorY29sbGF0aW5nLXN5bWJvbCA8WDIzN0U+Citjb2xsYXRpbmctc3ltYm9sIDxYMjM4MD4KK2NvbGxhdGluZy1zeW1ib2wgPFgyMzgyPgorY29sbGF0aW5nLXN5bWJvbCA8WDI2MDA+Citjb2xsYXRpbmctc3ltYm9sIDxYMjgwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFgyQTAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDJDMDA+Citjb2xsYXRpbmctc3ltYm9sIDxYMkUwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFgzMDAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDMyMDA+Citjb2xsYXRpbmctc3ltYm9sIDxYMzQwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFgzNjAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDM4MDA+Citjb2xsYXRpbmctc3ltYm9sIDxYM0EwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFgzQzAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDNFMDA+Citjb2xsYXRpbmctc3ltYm9sIDxYNDAwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFg0MjAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDQ0MDA+Citjb2xsYXRpbmctc3ltYm9sIDxYNDYwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFg0ODAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDRBMDA+Citjb2xsYXRpbmctc3ltYm9sIDxYNEMwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFg0RTAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDUwMDA+Citjb2xsYXRpbmctc3ltYm9sIDxYNTIwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFg1NDAwPgorY29sbGF0aW5nLXN5bWJvbCA8WDU2MDA+Citjb2xsYXRpbmctc3ltYm9sIDxYNTgwMD4KK2NvbGxhdGluZy1zeW1ib2wgPFg2QjIwPgorY29sbGF0aW5nLXN5bWJvbCA8WDZCMjI+Citjb2xsYXRpbmctc3ltYm9sIDxYNkIyND4KK2NvbGxhdGluZy1zeW1ib2wgPFg2QjI2PgorY29sbGF0aW5nLXN5bWJvbCA8WDZCMjg+Citjb2xsYXRpbmctc3ltYm9sIDxYNkIyQT4KK2NvbGxhdGluZy1zeW1ib2wgPFg2QjJDPgorY29sbGF0aW5nLXN5bWJvbCA8WDZCMkU+Citjb2xsYXRpbmctc3ltYm9sIDxYNkIzMD4KK2NvbGxhdGluZy1zeW1ib2wgPFg2QjMyPgorY29sbGF0aW5nLXN5bWJvbCA8WDZCMzQ+Citjb2xsYXRpbmctc3ltYm9sIDxYNkIzNj4KK2NvbGxhdGluZy1zeW1ib2wgPFg2QjM4PgorY29sbGF0aW5nLXN5bWJvbCA8WDZCM0E+Citjb2xsYXRpbmctc3ltYm9sIDxYNkIzQz4KK2NvbGxhdGluZy1zeW1ib2wgPFg2QjNFPgorY29sbGF0aW5nLXN5bWJvbCA8WDZCNDA+Citjb2xsYXRpbmctc3ltYm9sIDxYNkI0Mj4KK2NvbGxhdGluZy1zeW1ib2wgPFg2QjQ0PgorY29sbGF0aW5nLXN5bWJvbCA8WDZCNDY+Citjb2xsYXRpbmctc3ltYm9sIDxYNkI0OD4KK2NvbGxhdGluZy1zeW1ib2wgPFg2QjRBPgorY29sbGF0aW5nLXN5bWJvbCA8WDZCNEM+Citjb2xsYXRpbmctc3ltYm9sIDxYNkI0RT4KK2NvbGxhdGluZy1zeW1ib2wgPFg2QjUwPgorY29sbGF0aW5nLXN5bWJvbCA8WDZCNTI+Citjb2xsYXRpbmctc3ltYm9sIDxYNkI1ND4KK2NvbGxhdGluZy1zeW1ib2wgPFg2QjU2PgorY29sbGF0aW5nLXN5bWJvbCA8WDZCNTg+Citjb2xsYXRpbmctc3ltYm9sIDxYNkI1QT4KK2NvbGxhdGluZy1zeW1ib2wgPFg2QjVDPgorY29sbGF0aW5nLXN5bWJvbCA8WDZCNUU+Citjb2xsYXRpbmctc3ltYm9sIDxYNkI2MD4KK2NvbGxhdGluZy1zeW1ib2wgPFg2QjYyPgorY29sbGF0aW5nLXN5bWJvbCA8WDZCNjQ+Citjb2xsYXRpbmctc3ltYm9sIDxYNkI2Nj4KK2NvbGxhdGluZy1zeW1ib2wgPFg2QjY4PgorY29sbGF0aW5nLXN5bWJvbCA8WDZCNkE+Citjb2xsYXRpbmctc3ltYm9sIDxYNkI2Qz4KK2NvbGxhdGluZy1zeW1ib2wgPFg2QjZFPgorY29sbGF0aW5nLXN5bWJvbCA8WDZCNzI+Citjb2xsYXRpbmctc3ltYm9sIDxYNkI3ND4KK2NvbGxhdGluZy1zeW1ib2wgPFg2Qjc2PgorY29sbGF0aW5nLXN5bWJvbCA8WDZCN0M+Citjb2xsYXRpbmctc3ltYm9sIDxYNkI3RT4KK2NvbGxhdGluZy1zeW1ib2wgPFg2QjgwPgorY29sbGF0aW5nLXN5bWJvbCA8WDZCODI+Citjb2xsYXRpbmctc3ltYm9sIDxYNkI4Mz4KK2NvbGxhdGluZy1zeW1ib2wgPFg2Qjg0PgorY29sbGF0aW5nLXN5bWJvbCA8WDZCODY+Citjb2xsYXRpbmctc3ltYm9sIDxYNkI4OD4KK2NvbGxhdGluZy1zeW1ib2wgPFg2QjhBPgorY29sbGF0aW5nLXN5bWJvbCA8WDZCOEM+Citjb2xsYXRpbmctc3ltYm9sIDxYNkI4RT4KK2NvbGxhdGluZy1zeW1ib2wgPFg2QjkwPgorY29sbGF0aW5nLXN5bWJvbCA8WDZCOTI+Citjb2xsYXRpbmctc3ltYm9sIDxYNkI5ND4KK2NvbGxhdGluZy1zeW1ib2wgPFg2Qjk2PgorY29sbGF0aW5nLXN5bWJvbCA8WDZCOTg+Citjb2xsYXRpbmctc3ltYm9sIDxYNkI5Qz4KK2NvbGxhdGluZy1zeW1ib2wgPFg2QjlFPgorCitvcmRlcl9zdGFydCBmb3J3YXJkO2ZvcndhcmQ7Zm9yd2FyZDtmb3J3YXJkCisKKworJSBjb2xsYXRpb24gd2VpZ2h0cyBpbiBvcmRlcgorCis8WDAwMDE+Cis8WDAwMDU+Cis8WDAwNzE+Cis8WDAwOEY+Cis8WDAwQzA+Cis8WDAwRTE+Cis8WDA0MDA+Cis8WDA1MDA+Cis8WDA1MDc+Cis8WDA1MDk+Cis8WDA1MEI+Cis8WDA1MEQ+Cis8WDA1MEY+Cis8WDA2MDA+Cis8WDA3MDA+Cis8WDA3NjQ+Cis8WDA3NkE+Cis8WDA3ODI+Cis8WDA3OEU+Cis8WDA3QUE+Cis8WDA3QzA+Cis8WDA3QzY+Cis8WDA3RUU+Cis8WDA3RjY+Cis8WDA4MDA+Cis8WDA4MEI+Cis8WDA4M0Y+Cis8WDA4NEQ+Cis8WDA4NjE+Cis8WDA4NjM+Cis8WDA4NjU+Cis8WDA4Njc+Cis8WDA4Njk+Cis8WDA4NkI+Cis8WDA4REY+Cis8WDA4RTE+Cis8WDA4RTk+Cis8WDA4RUQ+Cis8WDA4RUY+Cis8WDA4RjU+Cis8WDA4Rjc+Cis8WDA5MDA+Cis8WDA5Rjk+Cis8WDBBMDA+Cis8WDBCMDA+Cis8WDBCQjM+Cis8WDBCQkI+Cis8WDBCQkQ+Cis8WDBCQkY+Cis8WDBCQzM+Cis8WDBCQzk+Cis8WDBDMDA+Cis8WDBEMDA+Cis8WDBFMDA+Cis8WDIzM0M+Cis8WDIzNzA+Cis8WDIzNzI+Cis8WDIzNzQ+Cis8WDIzNzY+Cis8WDIzNzg+Cis8WDIzN0E+Cis8WDIzN0M+Cis8WDIzN0U+Cis8WDIzODA+Cis8WDIzODI+Cis8WDI2MDA+Cis8WDI4MDA+Cis8WDJBMDA+Cis8WDJDMDA+Cis8WDJFMDA+Cis8WDMwMDA+Cis8WDMyMDA+Cis8WDM0MDA+Cis8WDM2MDA+Cis8WDM4MDA+Cis8WDNBMDA+Cis8WDNDMDA+Cis8WDNFMDA+Cis8WDQwMDA+Cis8WDQyMDA+Cis8WDQ0MDA+Cis8WDQ2MDA+Cis8WDQ4MDA+Cis8WDRBMDA+Cis8WDRDMDA+Cis8WDRFMDA+Cis8WDUwMDA+Cis8WDUyMDA+Cis8WDU0MDA+Cis8WDU2MDA+Cis8WDU4MDA+Cis8WDZCMjA+Cis8WDZCMjI+Cis8WDZCMjQ+Cis8WDZCMjY+Cis8WDZCMjg+Cis8WDZCMkE+Cis8WDZCMkM+Cis8WDZCMkU+Cis8WDZCMzA+Cis8WDZCMzI+Cis8WDZCMzQ+Cis8WDZCMzY+Cis8WDZCMzg+Cis8WDZCM0E+Cis8WDZCM0M+Cis8WDZCM0U+Cis8WDZCNDA+Cis8WDZCNDI+Cis8WDZCNDQ+Cis8WDZCNDY+Cis8WDZCNDg+Cis8WDZCNEE+Cis8WDZCNEM+Cis8WDZCNEU+Cis8WDZCNTA+Cis8WDZCNTI+Cis8WDZCNTQ+Cis8WDZCNTY+Cis8WDZCNTg+Cis8WDZCNUE+Cis8WDZCNUM+Cis8WDZCNUU+Cis8WDZCNjA+Cis8WDZCNjI+Cis8WDZCNjQ+Cis8WDZCNjY+Cis8WDZCNjg+Cis8WDZCNkE+Cis8WDZCNkM+Cis8WDZCNkU+Cis8WDZCNzI+Cis8WDZCNzQ+Cis8WDZCNzY+Cis8WDZCN0M+Cis8WDZCN0U+Cis8WDZCODA+Cis8WDZCODI+Cis8WDZCODM+Cis8WDZCODQ+Cis8WDZCODY+Cis8WDZCODg+Cis8WDZCOEE+Cis8WDZCOEM+Cis8WDZCOEU+Cis8WDZCOTA+Cis8WDZCOTI+Cis8WDZCOTQ+Cis8WDZCOTY+Cis8WDZCOTg+Cis8WDZCOUM+Cis8WDZCOUU+CisKKyUgYXNzaWdubWVudCBvZiBjaGFyYWN0ZXJzIHRvIHdlaWdodHMKKworPFUwMDBGPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMEY+Cis8VTAwMUU+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxRT4KKzxVMDAwOD4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA4PgorPFUwMDE3PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTc+Cis8VTAwMUY+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxRj4KKzxVMDAxMD4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDEwPgorPFUwMDA3PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDc+Cis8VTAwMTY+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxNj4KKzxVMDAxNT4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE1PgorPFUwMDA2PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDY+Cis8VTAwMDE+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwMT4KKzxVMDAxRD4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFEPgorPFUwMDBFPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMEU+Cis8VTAwMTg+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxOD4KKzxVMDAwND4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA0PgorPFUwMDEzPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTM+Cis8VTAwMUE+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxQT4KKzxVMDA3Rj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDdGPgorPFUwMDEyPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTI+Cis8VTAwMDM+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwMz4KKzxVMDAxQj4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFCPgorPFUwMDExPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTE+Cis8VTAwMDI+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwMj4KKzxVMDAxQz4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFDPgorPFUwMDE0PiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTQ+Cis8VTAwMTk+IElHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxOT4KKzxVMDAwNT4gSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA1PgorPFUwMDAwPiBJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDA+Cis8VTAwMDk+IDxYMDUwNz47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDBBPiA8WDA1MDk+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAwQj4gPFgwNTBCPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwMEM+IDxYMDUwRD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDBEPiA8WDA1MEY+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAyMD4gPFgwNjAwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNjA+IDxYMDc2ND47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDVFPiA8WDA3NkE+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA1Rj4gPFgwNzgyPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwMkQ+IDxYMDc4RT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDJDPiA8WDA3QUE+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAzQj4gPFgwN0MwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwM0E+IDxYMDdDNj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDIxPiA8WDA3RUU+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAzRj4gPFgwN0Y2Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwMkU+IDxYMDgwQj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDI3PiA8WDA4M0Y+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAyMj4gPFgwODREPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwMjg+IDxYMDg2MT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDI5PiA8WDA4NjM+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA1Qj4gPFgwODY1Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNUQ+IDxYMDg2Nz47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDdCPiA8WDA4Njk+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA3RD4gPFgwODZCPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNDA+IDxYMDhERj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDJBPiA8WDA4RTE+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAyRj4gPFgwOEU5Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNUM+IDxYMDhFRD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDI2PiA8WDA4RUY+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAyMz4gPFgwOEY1Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwMjU+IDxYMDhGNz47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwQjcwPiA8WDA5Rjk+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAyQj4gPFgwQkIzPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwM0M+IDxYMEJCQj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDNEPiA8WDBCQkQ+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAzRT4gPFgwQkJGPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwN0M+IDxYMEJDMz47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDdFPiA8WDBCQzk+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDAyND4gPFgyMzNDPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwMzA+IDxYMjM3MD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwQjY2PiA8WDIzNzA+OyI8WDAwMDU+PFgwMEUxPjxYMDA3MT4iOyI8WDAwMDU+PFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPFUwMDMxPiA8WDIzNzI+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMEI2Nz4gPFgyMzcyPjsiPFgwMDA1PjxYMDBFMT48WDAwNzE+IjsiPFgwMDA1PjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMDAzMj4gPFgyMzc0Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTBCNjg+IDxYMjM3ND47IjxYMDAwNT48WDAwRTE+PFgwMDcxPiI7IjxYMDAwNT48WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTAwMzM+IDxYMjM3Nj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwQjY5PiA8WDIzNzY+OyI8WDAwMDU+PFgwMEUxPjxYMDA3MT4iOyI8WDAwMDU+PFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPFUwMDM0PiA8WDIzNzg+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMEI2QT4gPFgyMzc4PjsiPFgwMDA1PjxYMDBFMT48WDAwNzE+IjsiPFgwMDA1PjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMDAzNT4gPFgyMzdBPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTBCNkI+IDxYMjM3QT47IjxYMDAwNT48WDAwRTE+PFgwMDcxPiI7IjxYMDAwNT48WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTAwMzY+IDxYMjM3Qz47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwQjZDPiA8WDIzN0M+OyI8WDAwMDU+PFgwMEUxPjxYMDA3MT4iOyI8WDAwMDU+PFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPFUwMDM3PiA8WDIzN0U+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMEI2RD4gPFgyMzdFPjsiPFgwMDA1PjxYMDBFMT48WDAwNzE+IjsiPFgwMDA1PjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMDAzOD4gPFgyMzgwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTBCNkU+IDxYMjM4MD47IjxYMDAwNT48WDAwRTE+PFgwMDcxPiI7IjxYMDAwNT48WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTAwMzk+IDxYMjM4Mj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwQjZGPiA8WDIzODI+OyI8WDAwMDU+PFgwMEUxPjxYMDA3MT4iOyI8WDAwMDU+PFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPFUwMDYxPiA8WDI2MDA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA0MT4gPFgyNjAwPjs8WDAwMDU+OzxYMDA4Rj47SUdOT1JFCis8VTAwNjI+IDxYMjgwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDQyPiA8WDI4MDA+OzxYMDAwNT47PFgwMDhGPjtJR05PUkUKKzxVMDA2Mz4gPFgyQTAwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNDM+IDxYMkEwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDY0PiA8WDJDMDA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA0ND4gPFgyQzAwPjs8WDAwMDU+OzxYMDA4Rj47SUdOT1JFCis8VTAwNjU+IDxYMkUwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDQ1PiA8WDJFMDA+OzxYMDAwNT47PFgwMDhGPjtJR05PUkUKKzxVMDA2Nj4gPFgzMDAwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNDY+IDxYMzAwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDY3PiA8WDMyMDA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA0Nz4gPFgzMjAwPjs8WDAwMDU+OzxYMDA4Rj47SUdOT1JFCis8VTAwNjg+IDxYMzQwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDQ4PiA8WDM0MDA+OzxYMDAwNT47PFgwMDhGPjtJR05PUkUKKzxVMDA2OT4gPFgzNjAwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNDk+IDxYMzYwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDZBPiA8WDM4MDA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA0QT4gPFgzODAwPjs8WDAwMDU+OzxYMDA4Rj47SUdOT1JFCis8VTAwNkI+IDxYM0EwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDRCPiA8WDNBMDA+OzxYMDAwNT47PFgwMDhGPjtJR05PUkUKKzxVMDA2Qz4gPFgzQzAwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNEM+IDxYM0MwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDZEPiA8WDNFMDA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA0RD4gPFgzRTAwPjs8WDAwMDU+OzxYMDA4Rj47SUdOT1JFCis8VTAwNkU+IDxYNDAwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDRFPiA8WDQwMDA+OzxYMDAwNT47PFgwMDhGPjtJR05PUkUKKzxVMDA2Rj4gPFg0MjAwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNEY+IDxYNDIwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDcwPiA8WDQ0MDA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA1MD4gPFg0NDAwPjs8WDAwMDU+OzxYMDA4Rj47SUdOT1JFCis8VTAwNzE+IDxYNDYwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDUxPiA8WDQ2MDA+OzxYMDAwNT47PFgwMDhGPjtJR05PUkUKKzxVMDA3Mj4gPFg0ODAwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNTI+IDxYNDgwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDczPiA8WDRBMDA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA1Mz4gPFg0QTAwPjs8WDAwMDU+OzxYMDA4Rj47SUdOT1JFCis8VTAwNzQ+IDxYNEMwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDU0PiA8WDRDMDA+OzxYMDAwNT47PFgwMDhGPjtJR05PUkUKKzxVMDA3NT4gPFg0RTAwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNTU+IDxYNEUwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDc2PiA8WDUwMDA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA1Nj4gPFg1MDAwPjs8WDAwMDU+OzxYMDA4Rj47SUdOT1JFCis8VTAwNzc+IDxYNTIwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDU3PiA8WDUyMDA+OzxYMDAwNT47PFgwMDhGPjtJR05PUkUKKzxVMDA3OD4gPFg1NDAwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTAwNTg+IDxYNTQwMD47PFgwMDA1Pjs8WDAwOEY+O0lHTk9SRQorPFUwMDc5PiA8WDU2MDA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMDA1OT4gPFg1NjAwPjs8WDAwMDU+OzxYMDA4Rj47SUdOT1JFCis8VTAwN0E+IDxYNTgwMD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwMDVBPiA8WDU4MDA+OzxYMDAwNT47PFgwMDhGPjtJR05PUkUKKzxVMEIwNT4gPFg2QjIwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTBCMDY+IDxYNkIyMj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwQjA3PiA8WDZCMjQ+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMEIwOD4gPFg2QjI2Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTBCMDk+IDxYNkIyOD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwQjBBPiA8WDZCMkE+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMEIwQj4gPFg2QjJDPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTBCNjA+IDxYNkIyRT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwQjBDPiA8WDZCMzA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMEI2MT4gPFg2QjMyPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTBCMEY+IDxYNkIzND47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwQjEwPiA8WDZCMzY+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMEIxMz4gPFg2QjM4Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTBCMTQ+IDxYNkIzQT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwQjE1PiA8WDZCM0M+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMEIxNj4gPFg2QjNFPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTBCMTc+IDxYNkI0MD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwQjE4PiA8WDZCNDI+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMEIxOT4gPFg2QjQ0Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTBCMUE+IDxYNkI0Nj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwQjFCPiA8WDZCNDg+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMEIxQz4gPFg2QjRBPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTBCMUQ+IDxYNkI0Qz47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwQjFFPiA8WDZCNEU+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMEIxRj4gPFg2QjUwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTBCMjA+IDxYNkI1Mj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwQjIxPiA8WDZCNTQ+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMEIyMj4gPFg2QjU2Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTBCMjM+IDxYNkI1OD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwQjI0PiA8WDZCNUE+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMEIyNT4gPFg2QjVDPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTBCMjY+IDxYNkI1RT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwQjI3PiA8WDZCNjA+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMEIyOD4gPFg2QjYyPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTBCMkE+IDxYNkI2ND47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwQjJCPiA8WDZCNjY+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMEIyQz4gPFg2QjY4Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTBCMkQ+IDxYNkI2QT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwQjJFPiA8WDZCNkM+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMEIyRj4gPFg2QjZFPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTBCMzA+IDxYNkI3Mj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwQjMyPiA8WDZCNzQ+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMEIzMz4gPFg2Qjc2Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTBCMzY+IDxYNkI3Qz47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwQjM3PiA8WDZCN0U+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMEIzOD4gPFg2QjgwPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTBCMzk+IDxYNkI4Mj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPE9SSVlBX0xFVFRFUl9LQS1PUklZQV9TSUdOX1ZJUkFNQS1PUklZQV9MRVRURVJfU1NBPiAiPFg2QjgzPjxYMDQwMD4iOzxYMDAwNT47IjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxPUklZQV9MRVRURVJfRERBLU9SSVlBX1NJR05fTlVLVEE+ICI8WDZCODM+PFgwNTAwPiI7PFgwMDA1PjsiPFgwMDA1PjxYMDBDMD4iOyI8VTBCMjE+PFUwQjNDPiIKKzxVMEI1Qz4gIjxYNkI4Mz48WDA1MDA+Ijs8WDAwMDU+OyI8WDAwMDU+PFgwMEMwPiI7IjxVMEIyMT48VTBCM0M+IgorPE9SSVlBX0xFVFRFUl9EREhBLU9SSVlBX1NJR05fTlVLVEE+ICI8WDZCODM+PFgwNjAwPiI7PFgwMDA1PjsiPFgwMDA1PjxYMDBDMD4iOyI8VTBCMjI+PFUwQjNDPiIKKzxVMEI1RD4gIjxYNkI4Mz48WDA2MDA+Ijs8WDAwMDU+OyI8WDAwMDU+PFgwMEMwPiI7IjxVMEIyMj48VTBCM0M+IgorPFUwQjVGPiAiPFg2QjgzPjxYMDcwMD4iOzxYMDAwNT47IjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKyUgRklYTUUgT1JJWUFfTEVUVEVSX1dBICI8WDZCODM+PFgwODAwPiI7PFgwMDA1PjsiPFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorJSBGSVhNRSBPUklZQV9MRVRURVJfVkEgIjxYNkI4Mz48WDA5MDA+Ijs8WDAwMDU+OyI8WDAwMDU+PFgwMEMwPiI7SUdOT1JFCislIE9SSVlBX0xFVFRFUl9XQSBhbmQgT1JJWUFfTEVUVEVSX1ZBIGFyZSBub3QgZGVmaW5lZCBpbiB1bmljb2RlIDMuMAorPFUwQjAyPiAiPFg2QjgzPjxYMEEwMD4iOzxYMDAwNT47IjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMEIwMz4gIjxYNkI4Mz48WDBCMDA+Ijs8WDAwMDU+OyI8WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTBCMDE+ICI8WDZCODM+PFgwQzAwPiI7PFgwMDA1PjsiPFgwMDA1PjxYMDBDMD4iO0lHTk9SRQorPFUwQjREPiAiPFg2QjgzPjxYMEQwMD4iOzxYMDAwNT47IjxYMDAwNT48WDAwQzA+IjtJR05PUkUKKzxVMEIzQz4gIjxYNkI4Mz48WDBFMDA+Ijs8WDAwMDU+OyI8WDAwMDU+PFgwMEMwPiI7SUdOT1JFCis8VTBCM0Q+IDxYNkI4ND47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwQjNFPiA8WDZCODY+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMEIzRj4gPFg2Qjg4Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTBCNDA+IDxYNkI4QT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwQjQxPiA8WDZCOEM+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMEI0Mj4gPFg2QjhFPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTBCNDM+IDxYNkI5MD47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwQjQ3PiA8WDZCOTI+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMEI0OD4gPFg2Qjk0Pjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTBCNEI+IDxYNkI5Nj47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorPFUwQjRDPiA8WDZCOTg+OzxYMDAwNT47PFgwMDA1PjtJR05PUkUKKzxVMEI1Nj4gPFg2QjlDPjs8WDAwMDU+OzxYMDAwNT47SUdOT1JFCis8VTBCNTc+IDxYNkI5RT47PFgwMDA1Pjs8WDAwMDU+O0lHTk9SRQorVU5ERUZJTkVEIElHTk9SRTtJR05PUkU7SUdOT1JFOyUuLi4KKworb3JkZXJfZW5kCitFTkQgTENfQ09MTEFURQorCislJSUlJSUlJSUlJSUlCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICI8VTAwMkM+IgorZ3JvdXBpbmcgICAgICAgICAgMzsyCitFTkQgTENfTlVNRVJJQworCislJSUlJSUlJSUlJSUlCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgICI8VTAwNDk+PFUwMDRFPjxVMDA1Mj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICI8VTAwM0Q+PFUwMDMwPjxVMDAyMz48VTAwNTI+PFUwMDczPjxVMDAyRT48VTAwN0M+PFUwMDMxPjxVMDAyMz48VTAwNTI+PFUwMDY1PjxVMDAyRT48VTAwN0M+PFUwMDMxPjxVMDAzQz48VTAwNTI+PFUwMDczPjxVMDAyRT4iCittb25fZGVjaW1hbF9wb2ludCAgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAgMzsyCitwb3NpdGl2ZV9zaWduICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgMQoraW50X3BfY3NfcHJlY2VkZXMgICAgIDEKK2ludF9wX3NlcF9ieV9zcGFjZSAgICAxCitpbnRfbl9jc19wcmVjZWRlcyAgICAgMQoraW50X25fc2VwX2J5X3NwYWNlICAgIDEKK2ludF9wX3NpZ25fcG9zbiAgICAgICAxCitpbnRfbl9zaWduX3Bvc24gICAgICAgMQorRU5EIExDX01PTkVUQVJZCisKKyUlJSUlJSUlJSUlJSUKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMEIzMD48VTBCMkM+PFUwQjNGPiI7LworICAgICAgICAiPFUwQjM4PjxVMEI0Qj48VTBCMkU+IjsvCisgICAgICAgICI8VTBCMkU+PFUwQjE5PjxVMEI0RD48VTBCMTc+PFUwQjMzPiI7LworICAgICAgICAiPFUwQjJDPjxVMEI0MT48VTBCMjc+IjsvCisgICAgICAgICI8VTBCMTc+PFUwQjQxPjxVMEIzMD48VTBCNDE+IjsvCisgICAgICAgICI8VTBCMzY+PFUwQjQxPjxVMEIxNT48VTBCNEQ+PFUwQjMwPiI7LworICAgICAgICAiPFUwQjM2PjxVMEIyOD48VTBCM0Y+IgorZGF5ICAgICAiPFUwQjMwPjxVMEIyQz48VTBCM0Y+PFUwQjJDPjxVMEIzRT48VTBCMzA+IjsvCisgICAgICAgICI8VTBCMzg+PFUwQjRCPjxVMEIyRT48VTBCMkM+PFUwQjNFPjxVMEIzMD4iOy8KKyAgICAgICAgIjxVMEIyRT48VTBCMTk+PFUwQjREPjxVMEIxNz48VTBCMzM+PFUwQjJDPjxVMEIzRT48VTBCMzA+IjsvCisgICAgICAgICI8VTBCMkM+PFUwQjQxPjxVMEIyNz48VTBCMkM+PFUwQjNFPjxVMEIzMD4iOy8KKyAgICAgICAgIjxVMEIxNz48VTBCNDE+PFUwQjMwPjxVMEI0MT48VTBCMkM+PFUwQjNFPjxVMEIzMD4iOy8KKyAgICAgICAgIjxVMEIzNj48VTBCNDE+PFUwQjE1PjxVMEI0RD48VTBCMzA+PFUwQjJDPjxVMEIzRT48VTBCMzA+IjsvCisgICAgICAgICI8VTBCMzY+PFUwQjI4PjxVMEIzRj48VTBCMkM+PFUwQjNFPjxVMEIzMD4iCithYm1vbiAgICI8VTAwMzE+IjsvCisgICAgICAgICI8VTAwMzI+IjsvCisgICAgICAgICI8VTAwMzM+IjsvCisgICAgICAgICI8VTAwMzQ+IjsvCisgICAgICAgICI8VTAwMzU+IjsvCisgICAgICAgICI8VTAwMzY+IjsvCisgICAgICAgICI8VTAwMzc+IjsvCisgICAgICAgICI8VTAwMzg+IjsvCisgICAgICAgICI8VTAwMzk+IjsvCisgICAgICAgICI8VTAwMzE+PFUwMDMwPiI7LworICAgICAgICAiPFUwMDMxPjxVMDAzMT4iOy8KKyAgICAgICAgIjxVMDAzMT48VTAwMzI+IgorbW9uICAgICAiPFUwQjFDPjxVMEIzRT48VTBCMjg+PFUwQjQxPjxVMEIwNj48VTBCMzA+PFUwQjQwPiI7LworCSI8VTBCMkI+PFUwQjQ3PjxVMEIyQz48VTBCNDM+PFUwQjA2PjxVMEIzMD48VTBCNDA+IjsvCisgICAgICAgICI8VTBCMkU+PFUwQjNFPjxVMEIzMD48VTBCNEQ+PFUwQjFBPjxVMEI0RD48VTBCMUE+IjsvCisgICAgICAgICI8VTBCMDU+PFUwQjJBPjxVMEI0RD48VTBCMzA+PFUwQjQ3PjxVMEIzMj4iOy8KKyAgICAgICAgIjxVMEIyRT48VTBCMDc+IjsvCisgICAgICAgICI8VTBCMUM+PFUwQjQxPjxVMEIyOD4iOy8KKyAgICAgICAgIjxVMEIxQz48VTBCNDE+PFUwQjMyPjxVMEIzRT48VTBCMDc+IjsvCisgICAgICAgICI8VTBCMDU+PFUwQjE3PjxVMEIzNz48VTBCNEQ+PFUwQjFGPiI7LworICAgICAgICAiPFUwQjM4PjxVMEI0Nz48VTBCMkE+PFUwQjREPjxVMEIxRj48VTBCNDc+PFUwQjJFPjxVMEI0RD48VTBCMkM+PFUwQjMwPiI7LworICAgICAgICAiPFUwQjA1PjxVMEIxNT48VTBCNEQ+PFUwQjFGPjxVMEI0Qj48VTBCMkM+PFUwQjMwPiI7LworICAgICAgICAiPFUwQjI4PjxVMEIyRD48VTBCNDc+PFUwQjJFPjxVMEI0RD48VTBCMkM+PFUwQjMwPiI7LworICAgICAgICAiPFUwQjIxPjxVMEIzRj48VTBCMzg+PFUwQjQ3PjxVMEIyRT48VTBCNEQ+PFUwQjJDPjxVMEIzMD4iCislIGRfZm10ICAgIiVPZC0lT20tJU95IgorZF9mbXQgICAgICI8VTAwMjU+PFUwMDRGPjxVMDA2ND48VTAwMkQ+PFUwMDI1PjxVMDA0Rj48VTAwNkQ+PFUwMDJEPjxVMDAyNT48VTAwNEY+PFUwMDc5PiIKKyUgdF9mbXQgICAiJU9JOiVPTTolT1MgJXAiCit0X2ZtdCAgICAgIjxVMDAyNT48VTAwNEY+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDRGPjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA0Rj48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNzA+IgorJSBkX3RfZm10ICIlT2UgJUIgJU95ICVPSTolT006JU9TICVwICVaIgorZF90X2ZtdCAgICI8VTAwMjU+PFUwMDRGPjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA0Rj48VTAwNzk+PFUwMDIwPjxVMDAyNT48VTAwNEY+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDRGPjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA0Rj48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNzA+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorYW1fcG0gICAgICI8VTAwNDE+PFUwMDREPiI7IjxVMDA1MD48VTAwNEQ+IgorJSB0X2ZtdF9hbXBtICAiJU9JOiVPTTolT1MgJXAiCit0X2ZtdF9hbXBtICI8VTAwMjU+PFUwMDRGPjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0Rj48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNEY+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPiIKK2FsdF9kaWdpdHMgIjxVMEI2Nj4iOy8KKyAgICAgICAgICAgIjxVMEI2Nz4iOy8KKyAgICAgICAgICAgIjxVMEI2OD4iOy8KKyAgICAgICAgICAgIjxVMEI2OT4iOy8KKyAgICAgICAgICAgIjxVMEI2QT4iOy8KKyAgICAgICAgICAgIjxVMEI2Qj4iOy8KKyAgICAgICAgICAgIjxVMEI2Qz4iOy8KKyAgICAgICAgICAgIjxVMEI2RD4iOy8KKyAgICAgICAgICAgIjxVMEI2RT4iOy8KKyAgICAgICAgICAgIjxVMEI2Rj4iOy8KKyAgICAgICAgICAgIjxVMEI2Nz48VTBCNjY+IjsvCisgICAgICAgICAgICI8VTBCNjc+PFUwQjY3PiI7LworICAgICAgICAgICAiPFUwQjY3PjxVMEI2OD4iOy8KKyAgICAgICAgICAgIjxVMEI2Nz48VTBCNjk+IjsvCisgICAgICAgICAgICI8VTBCNjc+PFUwQjZBPiI7LworICAgICAgICAgICAiPFUwQjY3PjxVMEI2Qj4iOy8KKyAgICAgICAgICAgIjxVMEI2Nz48VTBCNkM+IjsvCisgICAgICAgICAgICI8VTBCNjc+PFUwQjZEPiI7LworICAgICAgICAgICAiPFUwQjY3PjxVMEI2RT4iOy8KKyAgICAgICAgICAgIjxVMEI2Nz48VTBCNkY+IjsvCisgICAgICAgICAgICI8VTBCNjg+PFUwQjY2PiI7LworICAgICAgICAgICAiPFUwQjY4PjxVMEI2Nz4iOy8KKyAgICAgICAgICAgIjxVMEI2OD48VTBCNjg+IjsvCisgICAgICAgICAgICI8VTBCNjg+PFUwQjY5PiI7LworICAgICAgICAgICAiPFUwQjY4PjxVMEI2QT4iOy8KKyAgICAgICAgICAgIjxVMEI2OD48VTBCNkI+IjsvCisgICAgICAgICAgICI8VTBCNjg+PFUwQjZDPiI7LworICAgICAgICAgICAiPFUwQjY4PjxVMEI2RD4iOy8KKyAgICAgICAgICAgIjxVMEI2OD48VTBCNkU+IjsvCisgICAgICAgICAgICI8VTBCNjg+PFUwQjZGPiI7LworICAgICAgICAgICAiPFUwQjY5PjxVMEI2Nj4iOy8KKyAgICAgICAgICAgIjxVMEI2OT48VTBCNjc+IjsvCisgICAgICAgICAgICI8VTBCNjk+PFUwQjY4PiI7LworICAgICAgICAgICAiPFUwQjY5PjxVMEI2OT4iOy8KKyAgICAgICAgICAgIjxVMEI2OT48VTBCNkE+IjsvCisgICAgICAgICAgICI8VTBCNjk+PFUwQjZCPiI7LworICAgICAgICAgICAiPFUwQjY5PjxVMEI2Qz4iOy8KKyAgICAgICAgICAgIjxVMEI2OT48VTBCNkQ+IjsvCisgICAgICAgICAgICI8VTBCNjk+PFUwQjZFPiI7LworICAgICAgICAgICAiPFUwQjY5PjxVMEI2Rj4iOy8KKyAgICAgICAgICAgIjxVMEI2QT48VTBCNjY+IjsvCisgICAgICAgICAgICI8VTBCNkE+PFUwQjY3PiI7LworICAgICAgICAgICAiPFUwQjZBPjxVMEI2OD4iOy8KKyAgICAgICAgICAgIjxVMEI2QT48VTBCNjk+IjsvCisgICAgICAgICAgICI8VTBCNkE+PFUwQjZBPiI7LworICAgICAgICAgICAiPFUwQjZBPjxVMEI2Qj4iOy8KKyAgICAgICAgICAgIjxVMEI2QT48VTBCNkM+IjsvCisgICAgICAgICAgICI8VTBCNkE+PFUwQjZEPiI7LworICAgICAgICAgICAiPFUwQjZBPjxVMEI2RT4iOy8KKyAgICAgICAgICAgIjxVMEI2QT48VTBCNkY+IjsvCisgICAgICAgICAgICI8VTBCNkI+PFUwQjY2PiI7LworICAgICAgICAgICAiPFUwQjZCPjxVMEI2Nz4iOy8KKyAgICAgICAgICAgIjxVMEI2Qj48VTBCNjg+IjsvCisgICAgICAgICAgICI8VTBCNkI+PFUwQjY5PiI7LworICAgICAgICAgICAiPFUwQjZCPjxVMEI2QT4iOy8KKyAgICAgICAgICAgIjxVMEI2Qj48VTBCNkI+IjsvCisgICAgICAgICAgICI8VTBCNkI+PFUwQjZDPiI7LworICAgICAgICAgICAiPFUwQjZCPjxVMEI2RD4iOy8KKyAgICAgICAgICAgIjxVMEI2Qj48VTBCNkU+IjsvCisgICAgICAgICAgICI8VTBCNkI+PFUwQjZGPiI7LworICAgICAgICAgICAiPFUwQjZDPjxVMEI2Nj4iOy8KKyAgICAgICAgICAgIjxVMEI2Qz48VTBCNjc+IjsvCisgICAgICAgICAgICI8VTBCNkM+PFUwQjY4PiI7LworICAgICAgICAgICAiPFUwQjZDPjxVMEI2OT4iOy8KKyAgICAgICAgICAgIjxVMEI2Qz48VTBCNkE+IjsvCisgICAgICAgICAgICI8VTBCNkM+PFUwQjZCPiI7LworICAgICAgICAgICAiPFUwQjZDPjxVMEI2Qz4iOy8KKyAgICAgICAgICAgIjxVMEI2Qz48VTBCNkQ+IjsvCisgICAgICAgICAgICI8VTBCNkM+PFUwQjZFPiI7LworICAgICAgICAgICAiPFUwQjZDPjxVMEI2Rj4iOy8KKyAgICAgICAgICAgIjxVMEI2RD48VTBCNjY+IjsvCisgICAgICAgICAgICI8VTBCNkQ+PFUwQjY3PiI7LworICAgICAgICAgICAiPFUwQjZEPjxVMEI2OD4iOy8KKyAgICAgICAgICAgIjxVMEI2RD48VTBCNjk+IjsvCisgICAgICAgICAgICI8VTBCNkQ+PFUwQjZBPiI7LworICAgICAgICAgICAiPFUwQjZEPjxVMEI2Qj4iOy8KKyAgICAgICAgICAgIjxVMEI2RD48VTBCNkM+IjsvCisgICAgICAgICAgICI8VTBCNkQ+PFUwQjZEPiI7LworICAgICAgICAgICAiPFUwQjZEPjxVMEI2RT4iOy8KKyAgICAgICAgICAgIjxVMEI2RD48VTBCNkY+IjsvCisgICAgICAgICAgICI8VTBCNkU+PFUwQjY2PiI7LworICAgICAgICAgICAiPFUwQjZFPjxVMEI2Nz4iOy8KKyAgICAgICAgICAgIjxVMEI2RT48VTBCNjg+IjsvCisgICAgICAgICAgICI8VTBCNkU+PFUwQjY5PiI7LworICAgICAgICAgICAiPFUwQjZFPjxVMEI2QT4iOy8KKyAgICAgICAgICAgIjxVMEI2RT48VTBCNkI+IjsvCisgICAgICAgICAgICI8VTBCNkU+PFUwQjZDPiI7LworICAgICAgICAgICAiPFUwQjZFPjxVMEI2RD4iOy8KKyAgICAgICAgICAgIjxVMEI2RT48VTBCNkU+IjsvCisgICAgICAgICAgICI8VTBCNkU+PFUwQjZGPiI7LworICAgICAgICAgICAiPFUwQjZGPjxVMEI2Nj4iOy8KKyAgICAgICAgICAgIjxVMEI2Rj48VTBCNjc+IjsvCisgICAgICAgICAgICI8VTBCNkY+PFUwQjY4PiI7LworICAgICAgICAgICAiPFUwQjZGPjxVMEI2OT4iOy8KKyAgICAgICAgICAgIjxVMEI2Rj48VTBCNkE+IjsvCisgICAgICAgICAgICI8VTBCNkY+PFUwQjZCPiI7LworICAgICAgICAgICAiPFUwQjZGPjxVMEI2Qz4iOy8KKyAgICAgICAgICAgIjxVMEI2Rj48VTBCNkQ+IjsvCisgICAgICAgICAgICI8VTBCNkY+PFUwQjZFPiI7LworICAgICAgICAgICAiPFUwQjZGPjxVMEI2Rj4iCitFTkQgTENfVElNRQorCislJSUlJSUlJSUlJSUlCitMQ19NRVNTQUdFUworJSBGSVhNRSBUaGVzZSBuZWVkIHN1cHBvcnQgZm9yIHRoZSB0cmFuc2xhdGVkIHdvcmRzCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCislJSUlJSUlJSUlJSUlCitMQ19QQVBFUgorY29weSAiaGlfSU4iCitFTkQgTENfUEFQRVIKKworJSUlJSUlJSUlJSUlJQorTENfTkFNRQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19OQU1FIGNhdGVnb3J5LgorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNzA+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2Nz4iCituYW1lX2dlbiAgICAiIgorbmFtZV9tciAgICAgIjxVMDA0RD48VTAwNzI+PFUwMDJFPiIKK25hbWVfbXJzICAgICI8VTAwNEQ+PFUwMDcyPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9taXNzICAgIjxVMDA0RD48VTAwNjk+PFUwMDczPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9tcyAgICAgIjxVMDA0RD48VTAwNzM+PFUwMDJFPiIKK0VORCBMQ19OQU1FCisKKyUlJSUlJSUlJSUlJSUKK0xDX0FERFJFU1MKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUgTENfQUREUkVTUworcG9zdGFsX2ZtdCAgIjxVMDAyNT48VTAwN0E+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDU0PjxVMDAyNT48VTAwNzM+LworPFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDY1PjxVMDAyNT48VTAwNzI+IgorRU5EIExDX0FERFJFU1MKKworJSUlJSUlJSUlJSUlJQorTENfVEVMRVBIT05FCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCit0ZWxfaW50X2ZtdCAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAzQj48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwM0I+PFUwMDI1PjxVMDA2Qz4iCitpbnRfcHJlZml4ICAiPFUwMDM5PjxVMDAzMT4iCitpbnRfc2VsZWN0ICAiPFUwMDMwPjxVMDAzMD4iCitFTkQgTENfVEVMRVBIT05FCisKKyUlJSUlJSUlJSUlJSUKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJoaV9JTiIKK0VORCBMQ19NRUFTVVJFTUVOVApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvcGFfSU4gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9wYV9JTgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjY5NDcyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvcGFfSU4KQEAgLTAsMCArMSwyMDAgQEAKK2NvbW1lbnRfY2hhciAgICAlCitlc2NhcGVfY2hhciAgICAgLworJSBQdW5qYWJpIGxhbmd1YWdlIGxvY2FsZSBmb3IgSW5kaWFuIFB1bmphYmkoR3VybXVraGkpCislIExhc3QgdXBkYXRlIGJ5IEEgQWxhbSA8YW1hbmxpbnV4QG5ldHNjYXBlLm5ldD4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlB1bmphYmkgbGFuZ3VhZ2UgbG9jYWxlIGZvciBJbmRpYW4gUHVuamFiaShHdXJtdWtoaSkiCitzb3VyY2UgICAgICJJbmRMaW51eC5vcmciCithZGRyZXNzICAgICIiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiUHVuamFiaSIKK3RlcnJpdG9yeSAgIkluZGlhIgorcmV2aXNpb24gICAiMC4yIgorZGF0ZSAgICAgICAiMjAwNC0wOS0zMCIKKyUKK2NhdGVnb3J5ICAicGFfSU46MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAicGFfSU46MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAicGFfSU46MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJwYV9JTjoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgInBhX0lOOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAicGFfSU46MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAicGFfSU46MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAicGFfSU46MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAicGFfSU46MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJwYV9JTjoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgInBhX0lOOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgInBhX1BLIgorRU5EIExDX0NUWVBFCisKKworTENfQ09MTEFURQorCislIENvcHkgdGhlIHRlbXBsYXRlIGZyb20gSVNPL0lFQyAxNDY1MQorY29weSAiaXNvMTQ2NTFfdDEiCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIHRoZSBMQ19NT05FVEFSWSBjYXRlZ29yeS4KK2ludF9jdXJyX3N5bWJvbCAgICAgICAiPFUwMDQ5PjxVMDA0RT48VTAwNTI+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAiPFUwQTMwPjxVMEE0MT48VTBBMkE+PFUwQTBGPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgICAzCitwb3NpdGl2ZV9zaWduICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgMQorJQorRU5EIExDX01PTkVUQVJZCisKKworTENfTlVNRVJJQworY29weSAiaGlfSU4iCitFTkQgTENfTlVNRVJJQworCisKK0xDX1RJTUUKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19USU1FIGNhdGVnb3J5LgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkaWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlL0phdmEKKyUKKyUgQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyAoJWEpCithYmRheSAgICAgICAiPFUwQTEwPjxVMEEyND48VTAwMjA+IjsvCisgICAgICAgICAgICAiPFUwQTM4PjxVMEE0Qj48VTBBMkU+PFUwMDIwPiI7LworICAgICAgICAgICAgIjxVMEEyRT48VTBBNzA+PFUwQTE3PjxVMEEzMj48VTAwMjA+IjsvCisgICAgICAgICAgICAiPFUwQTJDPjxVMEE0MT48VTBBNzE+PFUwQTI3PjxVMDAyMD4iOy8KKyAgICAgICAgICAgICI8VTBBMzU+PFUwQTQwPjxVMEEzMD48VTAwMjA+IjsvCisgICAgICAgICAgICAiPFUwQTM2PjxVMEE0MT48VTBBNzE+PFUwQTE1PjxVMEEzMD48VTAwMjA+IjsvCisgICAgICAgICAgICAiPFUwQTM2PjxVMEEyOD48VTBBM0Y+PFUwQTcxPjxVMEExQT48VTBBMzA+PFUwMDIwPiIKKyUKKyUgRnVsbCB3ZWVrZGF5IG5hbWVzICglQSkKK2RheSAgICAgICAiPFUwQTEwPjxVMEEyND48VTBBMzU+PFUwQTNFPjxVMEEzMD48VTAwMjA+IjsvCisgICAgICAgICAgICAiPFUwQTM4PjxVMEE0Qj48VTBBMkU+PFUwQTM1PjxVMEEzRT48VTBBMzA+PFUwMDIwPiI7LworICAgICAgICAgICAgIjxVMEEyRT48VTBBNzA+PFUwQTE3PjxVMEEzMj48VTBBMzU+PFUwQTNFPjxVMEEzMD48VTAwMjA+IjsvCisgICAgICAgICAgICAiPFUwQTJDPjxVMEE0MT48VTBBNzE+PFUwQTI3PjxVMEEzNT48VTBBM0U+PFUwQTMwPjxVMDAyMD4iOy8KKyAgICAgICAgICAgICI8VTBBMzU+PFUwQTQwPjxVMEEzMD48VTBBMzU+PFUwQTNFPjxVMEEzMD48VTAwMjA+IjsvCisgICAgICAgICAgICAiPFUwQTM2PjxVMEE0MT48VTBBNzE+PFUwQTE1PjxVMEEzMD48VTBBMzU+PFUwQTNFPjxVMEEzMD48VTAwMjA+IjsvCisgICAgICAgICAgICAiPFUwQTM2PjxVMEEyOD48VTBBM0Y+PFUwQTcxPjxVMEExQT48VTBBMzA+PFUwQTM1PjxVMEEzRT48VTBBMzA+PFUwMDIwPiIKKworCislIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzICglYikKK2FibW9uICAgICAgICI8VTBBMUM+PFUwQTI4PjxVMEEzNT48VTBBMzA+PFUwQTQwPiI7LworICAgICAgICAgICAgIjxVMEE1RT48VTBBMzA+PFUwQTM1PjxVMEEzMD48VTBBNDA+IjsvCisgICAgICAgICAgICAiPFUwQTJFPjxVMEEzRT48VTBBMzA+PFUwQTFBPiI7LworICAgICAgICAgICAgIjxVMEEwNT48VTBBMkE+PFUwQTMwPjxVMEE0OD48VTBBMzI+IjsvCisgICAgICAgICAgICAiPFUwQTJFPjxVMEEwOD4iOy8KKwkgICAgIjxVMEExQz48VTBBNDI+PFUwQTI4PiI7LworICAgICAgICAgICAgIjxVMEExQz48VTBBNDE+PFUwQTMyPjxVMEEzRT48VTBBMDg+IjsvCisgICAgICAgICAgICAiPFUwQTA1PjxVMEExNz48VTBBMzg+PFUwQTI0PiI7LworICAgICAgICAgICAgIjxVMEEzOD48VTBBMjQ+PFUwQTcwPjxVMEEyQz48VTBBMzA+IjsvCisgICAgICAgICAgICAiPFUwQTA1PjxVMEExNT48VTBBMjQ+PFUwQTQyPjxVMEEyQz48VTBBMzA+IjsvCisgICAgICAgICAgICAiPFUwQTI4PjxVMEEzNT48VTBBNzA+PFUwQTJDPjxVMEEzMD4iOy8KKyAgICAgICAgICAgICI8VTBBMjY+PFUwQTM4PjxVMEE3MD48VTBBMkM+PFUwQTMwPiIKKyUKKyUgRnVsbCBtb250aCBuYW1lcyAoJUIpCittb24gICAgICAgICAiPFUwQTFDPjxVMEEyOD48VTBBMzU+PFUwQTMwPjxVMEE0MD4iOy8KKyAgICAgICAgICAgICI8VTBBNUU+PFUwQTMwPjxVMEEzNT48VTBBMzA+PFUwQTQwPiI7LworICAgICAgICAgICAgIjxVMEEyRT48VTBBM0U+PFUwQTMwPjxVMEExQT4iOy8KKyAgICAgICAgICAgICI8VTBBMDU+PFUwQTJBPjxVMEEzMD48VTBBNDg+PFUwQTMyPiI7LworICAgICAgICAgICAgIjxVMEEyRT48VTBBMDg+IjsvCisJICAgICI8VTBBMUM+PFUwQTQyPjxVMEEyOD4iOy8KKyAgICAgICAgICAgICI8VTBBMUM+PFUwQTQxPjxVMEEzMj48VTBBM0U+PFUwQTA4PiI7LworICAgICAgICAgICAgIjxVMEEwNT48VTBBMTc+PFUwQTM4PjxVMEEyND4iOy8KKyAgICAgICAgICAgICI8VTBBMzg+PFUwQTI0PjxVMEE3MD48VTBBMkM+PFUwQTMwPiI7LworICAgICAgICAgICAgIjxVMEEwNT48VTBBMTU+PFUwQTI0PjxVMEE0Mj48VTBBMkM+PFUwQTMwPiI7LworICAgICAgICAgICAgIjxVMEEyOD48VTBBMzU+PFUwQTcwPjxVMEEyQz48VTBBMzA+IjsvCisgICAgICAgICAgICAiPFUwQTI2PjxVMEEzOD48VTBBNzA+PFUwQTJDPjxVMEEzMD4iCisKKyUKKyUgRXF1aXZhbGVudCBvZiBBTSBQTQorYW1fcG0gICAgICAgIjxVMEEzOD48VTBBMzU+PFUwQTQ3PjxVMEEzMD48VTBBNDc+IjsvCisgICAgICAgICAgICAiPFUwQTM2PjxVMEEzRT48VTBBMkU+IgorCislCislIEFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJUEgJWQgJWIgJVklSTolTTolUyAgJVoKK2RfdF9mbXQgICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPi8KKzxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT4vCis8VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbgorJSAlQSAlZCAlYiAlWQorZF9mbXQgICAgICAgIjxVMDAyNT48VTAwNDE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+LworPFUwMDIwPjxVMDAyNT48VTAwNTk+IgorJQorJSBBcHByb3ByaWF0ZSB0aW1lIHJlcHJlc2VudGF0aW9uCislICVJOiVNOiVTICAlWgordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+LworPFUwMDIwPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKKyUgQXBwcm9wcmlhdGUgMTIgaCB0aW1lIHJlcHJlc2VudGF0aW9uICglcikKK3RfZm10X2FtcG0gICI8VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPi8KKzxVMDAyMD48VTAwMjU+PFUwMDcwPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKK2RhdGVfZm10ICAgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKKworTENfTUVTU0FHRVMKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKKworTENfUEFQRVIKK2NvcHkgImhpX0lOIgorRU5EIExDX1BBUEVSCisKKworTENfTkFNRQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19OQU1FIGNhdGVnb3J5LgorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNzA+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2Nz4iCituYW1lX2dlbiAgICAiIgorbmFtZV9tciAgICAgIjxVMDA0RD48VTAwNzI+PFUwMDJFPiIKK25hbWVfbXJzICAgICI8VTAwNEQ+PFUwMDcyPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9taXNzICAgIjxVMDA0RD48VTAwNjk+PFUwMDczPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9tcyAgICAgIjxVMDA0RD48VTAwNzM+PFUwMDJFPiIKKworRU5EIExDX05BTUUKKworCitMQ19BRERSRVNTCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislIExDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICI8VTAwMjU+PFUwMDdBPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDczPi8KKzxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA2NT48VTAwMjU+PFUwMDcyPiIKKworY291bnRyeV9hYjIgIjxVMDA0OT48VTAwNEU+IgorY291bnRyeV9hYjMgIjxVMDA0OT48VTAwNEU+PFUwMDQ0PiIKK2NvdW50cnlfbnVtIDM1NgorRU5EIExDX0FERFJFU1MKKworCitMQ19URUxFUEhPTkUKK2NvcHkgImhpX0lOIgorRU5EIExDX1RFTEVQSE9ORQorCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJoaV9JTiIKK0VORCBMQ19NRUFTVVJFTUVOVApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvcGFfUEsgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9wYV9QSwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjdjZDA4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvcGFfUEsKQEAgLTAsMCArMSwxODcgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBQdW5qYWJpIChTaGFtdWtoaSkgTGFuZ3VhZ2UgTG9jYWxlIGZvciBQYWtpc3RhbgorJSBTb3VyY2U6CislIENvbnRhY3Q6IEFtYW5wcmVldCBTaW5naCBBbGFtCislIEVtYWlsOiBhbWFucHJlZXRhbGFtQHlhaG9vLmNvbQorJSBMYW5ndWFnZTogcGEKKyUgVGVycml0b3J5OiBQSworJSBSZXZpc2lvbjogMC4xCislIERhdGU6IDIwMDUtMTItMzEKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogVVRGLTgKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlB1bmphYmkgKFNoYWhtdWtoaSkgTGFuZ3VhZ2UgTG9jYWxlIGZvciBQYWtpc3RhbiIKK3NvdXJjZSAgICAgIiIKK2FkZHJlc3MgICAgIiIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJQdW5qYWJpIChTaGFobXVraGkpIgordGVycml0b3J5ICAiUGFraXN0YW4iCityZXZpc2lvbiAgICIwLjMiCitkYXRlICAgICAgICIyMDAwLTA3LTExIgorJQorY2F0ZWdvcnkgICJwYV9QSzoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJwYV9QSzoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJwYV9QSzoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgInBhX1BLOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAicGFfUEs6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJwYV9QSzoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJwYV9QSzoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJwYV9QSzoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJwYV9QSzoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgInBhX1BLOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAicGFfUEs6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiaTE4biIKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCisKKyUgdGhvc2UgdHdvIGxldHRlcyBhcmUgbm90IGluIGNwMTI1Ni4uLgorCislIE1hZGRhaCBhYm92ZSAtPiBBbGVmIHdpdGggbWFkZGEgYWJvdmUKKzxVMDY1Mz4gIjxVMDYyMj4iCislIEZhcnNpIHllaCAtPiB5ZWgKKzxVMDZDQz4gIjxVMDY0QT4iCisKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKK2NvcHkgImVuX0RLIgorRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKK2NvcHkgInVyX1BLIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgInVyX1BLIgorRU5EIExDX05VTUVSSUMKKworJSBTaW5jZSB0aGVpciBpcyBubyBhYmJyZXZpYXRlZCB2ZXJzaW9uIG9mIHRoZSBkYXlzIGluIHVyZHUgSSBoYXZlIHVzZWQgdGhlCislIGZ1bGwgbmFtZXMgb2YgdGhlIGRheXMKKyUgVXNpbmcgb25seSB0aGUgZmlyc3QgbGV0dGVycyBvZiB0aGUgZGF5IHdvdWxkIGhhdmUgY2F1c2VkIGEgY29uZmxpY3QgaGVyZQorJSBhcyBib3RoICJKdW1haXJhdChUaHVycykiIGFuZCAiSnVtYShGcmlkYXkpIiBoYXZlIHRoZSBzYW1lIHN0YXJ0aW5nIGxldHRlcgorJSBKZWVtIDxVMDYyQz4KK0xDX1RJTUUKKworYWJkYXkgICAiPFUwNjI3PjxVMDYyQT48VTA2NDg+PFUwNjI3PjxVMDYzMT4iOy8KKwkiPFUwNjdFPjxVMDY0QT48VTA2MzE+IjsvCisJIjxVMDY0NT48VTA2NDY+PFUwNkFGPjxVMDY0ND4iOy8KKwkiPFUwNjI4PjxVMDYyRj48VTA2QkU+IjsvCisJIjxVMDYyQz48VTA2NDU+PFUwNjM5PjxVMDYzMT48VTA2Mjc+PFUwNjJBPiI7LworCSI8VTA2MkM+PFUwNjQ1PjxVMDYzOT48VTA2NDc+IjsvCisJIjxVMDY0Nz48VTA2NDE+PFUwNjJBPjxVMDY0Nz4iCitkYXkJIjxVMDYyNz48VTA2MkE+PFUwNjQ4PjxVMDYyNz48VTA2MzE+IjsvCisJIjxVMDY3RT48VTA2NEE+PFUwNjMxPiI7LworCSI8VTA2NDU+PFUwNjQ2PjxVMDZBRj48VTA2NDQ+IjsvCisJIjxVMDYyOD48VTA2MkY+PFUwNkJFPiI7LworCSI8VTA2MkM+PFUwNjQ1PjxVMDYzOT48VTA2MzE+PFUwNjI3PjxVMDYyQT4iOy8KKwkiPFUwNjJDPjxVMDY0NT48VTA2Mzk+PFUwNjQ3PiI7LworCSI8VTA2NDc+PFUwNjQxPjxVMDYyQT48VTA2NDc+IgorYWJtb24JIjxVMDYyQz48VTA2NDY+PFUwNjQ4PjxVMDYzMT48VTA2NEE+IjsvCisJIjxVMDY0MT48VTA2MzE+PFUwNjQ4PjxVMDYzMT48VTA2NEE+IjsvCisJIjxVMDY0NT48VTA2Mjc+PFUwNjMxPjxVMDY4Nj4iOy8KKwkiPFUwNjI3PjxVMDY3RT48VTA2MzE+PFUwNjRBPjxVMDY0ND4iOy8KKwkiPFUwNjQ1PjxVMDY1Mz48VTA2Q0M+IjsvCisJIjxVMDYyQz48VTA2NDg+PFUwNjQ2PiI7LworCSI8VTA2MkM+PFUwNjQ4PjxVMDY0ND48VTA2Mjc+PFUwNjRBPiI7LworCSI8VTA2Mjc+PFUwNkFGPjxVMDYzMz48VTA2MkE+IjsvCisJIjxVMDYzMz48VTA2MkE+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IjsvCisJIjxVMDYyNz48VTA2NDM+PFUwNjJBPjxVMDY0OD48VTA2Mjg+PFUwNjMxPiI7LworCSI8VTA2NDY+PFUwNjQ4PjxVMDY0NT48VTA2Mjg+PFUwNjMxPiI7LworCSI8VTA2MkY+PFUwNjMzPjxVMDY0NT48VTA2Mjg+PFUwNjMxPiIKK21vbgkiPFUwNjJDPjxVMDY0Nj48VTA2NDg+PFUwNjMxPjxVMDY0QT4iOy8KKwkiPFUwNjQxPjxVMDYzMT48VTA2NDg+PFUwNjMxPjxVMDY0QT4iOy8KKwkiPFUwNjQ1PjxVMDYyNz48VTA2MzE+PFUwNjg2PiI7LworCSI8VTA2Mjc+PFUwNjdFPjxVMDYzMT48VTA2NEE+PFUwNjQ0PiI7LworCSI8VTA2NDU+PFUwNjUzPjxVMDZDQz4iOy8KKwkiPFUwNjJDPjxVMDY0OD48VTA2NDY+IjsvCisJIjxVMDYyQz48VTA2NDg+PFUwNjQ0PjxVMDYyNz48VTA2NEE+IjsvCisJIjxVMDYyNz48VTA2QUY+PFUwNjMzPjxVMDYyQT4iOy8KKwkiPFUwNjMzPjxVMDYyQT48VTA2NDU+PFUwNjI4PjxVMDYzMT4iOy8KKwkiPFUwNjI3PjxVMDY0Mz48VTA2MkE+PFUwNjQ4PjxVMDYyOD48VTA2MzE+IjsvCisJIjxVMDY0Nj48VTA2NDg+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IjsvCisJIjxVMDYyRj48VTA2MzM+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IgorCislIERhdGUgVGltZSBGb3JtYXQKK2RfdF9mbXQgIjxVMDY0OD48VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwNjJBPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDQyPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKKworJSBkYXRlIEZvcm1hdC4gSSBoYXZlIHB1dCB0aGlzIGluIHJldmVyc2Ugb3JkZXIgdG8gdHJ5IHRvIGdldCB0aGUgZGF0ZQorJSBpbiBSLT5MIG9yZGVyCitkX2ZtdCAiPFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA1OT4iCisKKyUgdGltZSBmb3JtYXQKK3RfZm10ICI8VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPiIKKworJTxVMDYzNT4gc3RhbmRzIGZvciA8VTA2MzU+PFUwNjI4PjxVMDYyRD4KKyU8VTA2MzQ+IHN0YW5kcyBmb3IgPFUwNjM0PjxVMDYyNz48VTA2NDU+CithbV9wbSAiPFUwNjM1PiI7IjxVMDYzND4iCisKKyV0aW1lIGZvcm1hdCBpbiAxMiBob3VyIGNsb2NrCit0X2ZtdF9hbXBtICI8VTAwMjU+PFUwMDUwPjxVMDAyMD48VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPiIKKworJSBkaXNwbGF5IGNvbHVtbnMgcmlnaHQgdG8gbGVmdCA/CitjYWxfZGlyZWN0aW9uCTMKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCisKKyUgbG9jYWxlIGJhc2VkIG1lc3NhZ2VzCislIENhbiB3ZSBwdXQgaW4gdGhlIHZhbHVlcyBmb3IgYSBjYW5jZWwgZXhyZXNzaW9uIGhlcmU/PyBJIGZvdW5kIGEgdGVybSB0aGF0CislIHdvdWxkIGRlZmluZSBjYW5jZWwgYXBwcm9wcmlhdGVseQorJSA8VTA2NDc+ID0gPFUwNjQ3PjxVMDYyNz48VTA2QkE+ICwgdGhlIGxhc3QgdGFnIGlzIGZvciBub29uLWdodW5uYSEKKyUgPFUwNjI4PiA9IDxVMDYyOD48VTA2NDQ+PFUwNjQzPjxVMDY0ND4KKyUgYWdhaW4gPFUwMDY2PiBhbmQgPFUwMDZGPiBhcmUgcGxhY2UgaG9sZGVycworJSA8VTA2NDY+ID0gPFUwNjQ2PjxVMDY0Nz48VTA2NEE+PFUwNkJBPgoreWVzc3RyCSI8VTA2Mjg+PFUwNjQ0PjxVMDY0Mz48VTA2NDQ+Igorbm9zdHIJIjxVMDY0Nj48VTA2NDc+PFUwNjRBPjxVMDZCQT4iCit5ZXNleHByCSI8VTAwNUU+PFUwMDVCPjxVMDA3OT48VTAwNTk+PFUwNjQ3PjxVMDYyOD48VTAwNjY+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByCSI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwNjQ2PjxVMDA2Rj48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCisKK0VORCBMQ19NRVNTQUdFUworCislRHJhZnQgRmluaXNoZWQ6IDE3OjAwIDA5LzA3LzIwMDAKKworTENfUEFQRVIKK2NvcHkgInVyX1BLIgorRU5EIExDX1BBUEVSCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJ1cl9QSyIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCislIEZJWE1FCitjb3B5ICJ1cl9QSyIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKKyUgRklYTUUKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDY4Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDczPjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA3QT48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCisKK2NvdW50cnlfYWIyICI8VTAwNTA+PFUwMDRCPiIKK2NvdW50cnlfYWIzICI8VTAwNTA+PFUwMDQxPjxVMDA0Qj4iCitjb3VudHJ5X251bSA1ODYKK0VORCBMQ19BRERSRVNTCisKK0xDX1RFTEVQSE9ORQorJSBDaGFuZ2VkIGZyb20gdXJfUEsgYXMgdGhhdCBMb2NhbGUganVzdCBjb3B5IGZyb20gZW5fREssIHdoaWNoIGlzIG5vdCBzdWl0YWJsZSB0byBQdW5qYWJpIChTaGFobXVraGkpIElTRCA5MgordGVsX2ludF9mbXQgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwM0I+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDNCPjxVMDAyNT48VTAwNkM+IgoraW50X3ByZWZpeCAiPFUwMDM5PjxVMDAzMj4iCitpbnRfc2VsZWN0ICI8VTAwMzA+PFUwMDMwPiIKK0VORCBMQ19URUxFUEhPTkUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3BhcF9BTiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3BhcF9BTgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjBlMjYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvcGFwX0FOCkBAIC0wLDAgKzEsMTUzIEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbyBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICJQYXBpYW1lbnRvIExhbmd1YWdlIGZvciB0aGUgKE5ldGhlcmxhbmQpIEFudGlsbGVzIgorc291cmNlICJpbmZvcm1hdGlvbnMgZnJvbSBuYXRpdmUgc3BlYWtlciIKK2FkZHJlc3MgIiIKK2NvbnRhY3QgIlBhYmxvIFNhcmF0eGFnYSIKK2VtYWlsICJwYWJsb0BtYW5kcmFrZXNvZnQuY29tIgordGVsICIiCitmYXggIiIKK2xhbmd1YWdlICJwYXAiCit0ZXJyaXRvcnkgIkFOIgorcmV2aXNpb24gIjAuMiIKK2RhdGUgIjIwMDAtMTEtMTUiCisKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgaTE4bjoyMDAwO0xDX0NPTExBVEUKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19DVFlQRQorY2F0ZWdvcnkgaTE4bjoyMDAwO0xDX01FU1NBR0VTCitjYXRlZ29yeSBpMThuOjIwMDA7TENfTU9ORVRBUlkKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19OVU1FUklDCitjYXRlZ29yeSBpMThuOjIwMDA7TENfVElNRQorY2F0ZWdvcnkgaTE4bjoyMDAwO0xDX1BBUEVSCitjYXRlZ29yeSBpMThuOjIwMDA7TENfTUVBU1VSRU1FTlQKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19URUxFUEhPTkUKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19BRERSRVNTCisKKyUgSVNPL0lFQyAxNDY1MjogQ29udmVydGVkIGNvbW1lbnRzIHRvIExDX0lERU5USUZJQ0FUSU9OCislICBhZGRlZCBMQ19QQVBFUiwgTENfTUVBU1VSRU1FTlQsIExDX1RFTEVQSE9ORSwgTENfQUREUkVTUworJSAtLSBtY2tpbnN0cnlAY29tcHV0ZXIub3JnLCAyMDAwLTA3LTAzCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA3Mz48VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDM1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNDM+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCislIEZJWE1FIGNvdW50cnlfbmFtZSBmb3IgQW50aWxsZXMgaW4gUGFwbGFtZW50bworJSBGSVhNRSBjb3VudHJ5X3Bvc3QgTUFJTF9DRVBUQ09ERSBmb3IgTmVkZXJsYW5kIEFudGlsbGVzLCBBTj8KK2NvdW50cnlfYWIyICI8VTAwNDE+PFUwMDRFPiIKK2NvdW50cnlfYWIzICI8VTAwNDE+PFUwMDRFPjxVMDA1ND4iCitjb3VudHJ5X251bSA1MzAKK2NvdW50cnlfaXNibiAiOTk5MDQiCitjb3VudHJ5X2NhciAiPFUwMDRFPjxVMDA0MT4iCislIGxhbmdfYWIKK2xhbmdfdGVybSAiPFUwMDcwPjxVMDA2MT48VTAwNzA+IgorbGFuZ19saWIgIjxVMDA3MD48VTAwNjE+PFUwMDcwPiIKK0VORCBMQ19BRERSRVNTCisKK0xDX0NUWVBFCitjb3B5ICJlbl9ESyIKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCitjb3B5ICJlbl9ESyIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA2QT48VTAwNEE+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgICAgICAgIjxVMDA0MT48VTAwNEU+PFUwMDQ3PjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgICAgICI8VTAwNjY+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICAgICAiPFUwMDJDPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAgICAgIjxVMDAyMD4iCittb25fZ3JvdXBpbmcgICAgICAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgICAgICAyCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludCAgICAgICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgICAgIiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgICAgMDswCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICI8VTAwNjQ+PFUwMDZGPiI7IjxVMDA2Qz48VTAwNzU+IjsiPFUwMDZEPjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA3Nz48VTAwNjU+IjsiPFUwMDcyPjxVMDA2MT4iOyI8VTAwNjI+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDczPjxVMDA2MT4iCitkYXkgICAgICI8VTAwNDQ+PFUwMDZBPjxVMDA2MT48VTAwNjQ+PFUwMDZGPjxVMDA2RD48VTAwNjk+PFUwMDZFPjxVMDA2Nz48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDZBPjxVMDA2MT48VTAwNkM+PFUwMDc1PjxVMDA2RT48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDZBPjxVMDA2MT48VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDZBPjxVMDA2MT48VTAwNzc+PFUwMDY1PjxVMDA2Mj48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDZBPjxVMDA2MT48VTAwNzI+PFUwMDYxPjxVMDA3Mz48VTAwNkY+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDQ0PjxVMDA2QT48VTAwNjE+PFUwMDYyPjxVMDA2OT48VTAwNjU+PFUwMDcyPjxVMDA2RT48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDZBPjxVMDA2MT48VTAwNzM+PFUwMDYxPjxVMDA2Mj48VTAwNzI+PFUwMDYxPiIKK2FibW9uICAgIjxVMDA1OT48VTAwNjE+PFUwMDZFPiI7IjxVMDA0Nj48VTAwNjU+PFUwMDYyPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzI+IjsiPFUwMDQxPjxVMDA3MD48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDY1PjxVMDA2OT4iOyI8VTAwNTk+PFUwMEZDPjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA1OT48VTAwRkM+PFUwMDZDPiI7IjxVMDA0Rj48VTAwNzU+PFUwMDY3PiI7LworICAgICAgICAiPFUwMDUzPjxVMDBFOD48VTAwNzA+IjsiPFUwMDRGPjxVMDA2Qj48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNEU+PFUwMDZGPjxVMDA3Nj4iOyI8VTAwNDQ+PFUwMDY1PjxVMDA3Mz4iCittb24gICAgICI8VTAwNTk+PFUwMDYxPjxVMDA2RT48VTAwRkM+PFUwMDYxPjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNDY+PFUwMDY1PjxVMDA2Mj48VTAwNzI+PFUwMEZDPjxVMDA2MT48VTAwNzI+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzI+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDQxPjxVMDA3MD48VTAwNzI+PFUwMDY1PjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjU+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDU5PjxVMDBGQz48VTAwNkU+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDU5PjxVMDBGQz48VTAwNkM+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDRGPjxVMDA3NT48VTAwNjc+PFUwMEY5PjxVMDA3Mz48VTAwNzQ+PFUwMEY5PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwRTg+PFUwMDcwPjxVMDA3ND48VTAwRTg+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDRGPjxVMDA2Qj48VTAwNzQ+PFUwMDZGPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+PFUwMEU4PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0ND48VTAwNjU+PFUwMDczPjxVMDBFOD48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRD48VTAwMjU+PFUwMDZEPjxVMDAyRD48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAiIjsiIgordF9mbXRfYW1wbSAiIgorRU5EIExDX1RJTUUKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludCAgICAgICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgICAgIiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgICAgMDswCitFTkQgTENfTlVNRVJJQworCislIE1ldHJpYyBNZWFzdXJlbWVudCBzeXN0ZW0gKElTTyAxMDAwKQorTENfTUVBU1VSRU1FTlQKK21lYXN1cmVtZW50IDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCislIERlZmF1bHQgcGFwZXI6IEE0CitMQ19QQVBFUgoraGVpZ2h0IDI5Nword2lkdGggMjEwCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNkM+IgorJSBGSVhNRSBGSU5EIHRlbF9kb21fZm10CitpbnRfc2VsZWN0ICIwMCIKK2ludF9wcmVmaXggIjU5OSIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTkFNRQorJSBUb2RvCitjb3B5ICJlbl9ESyIKK0VORCBMQ19OQU1FCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9wbF9QTCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3BsX1BMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZjllNWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9wbF9QTApAQCAtMCwwICsxLDIyMzYgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAvCislCislIFBvbGlzaCBMYW5ndWFnZSBMb2NhbGUgZm9yIFBvbGFuZAorJSBTb3VyY2U6IFJBUAorJSBBZGRyZXNzOiBTYW5rdCBKby9yZ2VucyBBbGxlIDgKKyUgICAgREstMTYxNSBLby9iZW5oYXZuIFYsIERhbm1hcmsKKyUgQ29udGFjdDogS2VsZCBTaW1vbnNlbgorJSBFbWFpbDogS2VsZC5TaW1vbnNlbkBka3V1Zy5kaworJSBUZWw6ICs0NSAtIDMxMjI2NTQzCislIEZheDogKzQ1IC0gMzEyMjY1NDMKKyUgTGFuZ3VhZ2U6IHBsCislIFRlcnJpdG9yeTogUEwKKyUgUmV2aXNpb246IDQuNAorJSBEYXRlOiAxOTk3LTAzLTE4CislIEFwcGxpY2F0aW9uOiBnZW5lcmFsCislIFVzZXJzOiBnZW5lcmFsCislIFJlcGVydG9pcmVtYXA6IG1uZW1vbmljLmRzCislIENoYXJzZXQ6IElTTy04ODU5LTIKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlBvbGlzaCBsb2NhbGUgZm9yIFBvbGFuZCIKK3NvdXJjZSAgICAgIlJBUCIKK2FkZHJlc3MgICAgIlNhbmt0IEpvL3JnZW5zIEFsbGUgOCwgREstMTYxNSBLby9iZW5oYXZuIFYsIERhbm1hcmsiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiUG9saXNoIgordGVycml0b3J5ICAiUG9sYW5kIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAicGxfUEw6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAicGxfUEw6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAicGxfUEw6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJwbF9QTDoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgInBsX1BMOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAicGxfUEw6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAicGxfUEw6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAicGxfUEw6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAicGxfUEw6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJwbF9QTDoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgInBsX1BMOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ09MTEFURQorCislIEJhc2UgY29sbGF0aW9uIHNjaGVtZTogMTk5NC0wMy0yMgorCislIE9yZGVyaW5nIGFsZ29yaXRobToKKyUgIDEuIFNwYWNlcyBhbmQgaHlwaGVuIChidXQgbm90IHNvZnQKKyUgICAgIGh5cGhlbikgYmVmb3JlIHB1bmN0dWF0aW9uCislICAgICBjaGFyYWN0ZXJzLCBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzCislICAgICBiZWZvcmUgbnVtYmVycywKKyUgICAgIG51bWJlcnMgYmVmb3JlIGxldHRlcnMuCislICAyLiBMZXR0ZXJzIHdpdGggZGlhY3JpdGljYWwgbWFya3MgYXJlCislICAgICBtZW1iZXJzIG9mIGVxdWl2YWxlbmNlIGNsYXNzZXMKKyUgIDMuIEEgZGlzdGluY3Rpb24gaXMgbWFkZSB3aXRoIHJlZ2FyZHMKKyUgICAgIHRvIGNhc2UgYXMgbm90ZWQgYmVsb3cuCislICA0LiBTcGVjaWFsIGNoYXJhY3RlcnMgYXJlIGlnbm9yZWQKKyUgICAgIHdoZW4gY29tcGFyaW5nIGxldHRlcnMsIGJ1dCB0aGVuCislICAgICB0aGV5IGFyZSBjb25zaWRlcmVkCislICA1LiBUaGUgYWxwaGFiZXRzIGFyZSBzb3J0ZWQgaW4gb3JkZXIKKyUgICAgIG9mIGZpcnN0IGFwcGVhcmFuY2UgaW4gSVNPIDEwNjQ2OgorJSAgICAgTGF0aW4sIEdyZWVrLCBDeXJpbGxpYywgZXRjLgorJQorJSBBY2NvcmRpbmcgdG8gR3JlZWsgc3BlY2lmaWNhdGlvbnMsCislIHRoZSBzdGVwcyAyLiBhbmQgMy4gYWJvdmUgYXJlIHJldmVyc2VkCislIGZvciB0aGUgR3JlZWsgc2NyaXB0CisKKyUgY29sbGF0aW5nIHN5bWJvbHMKKworJSBUaGUgY29sbGF0aW5nIHN5bWJvbCBuYW1pbmcgaXMKKyUgbW9zdGx5IHRha2VuIGZyb20gSVNPIDEwNjQ2LTEsCislIGZvciBleGFtcGxlIHRoZSBjYXNlIGFuZCBhY2NlbnQKKyUgbmFtZXMgYXJlIGZyb20gdGhpcyBzdGFuZGFyZC4KKworY29sbGF0aW5nLXN5bWJvbCA8Q0FQSVRBTD4KK2NvbGxhdGluZy1zeW1ib2wgPENBUElUQUwtU01BTEw+Citjb2xsYXRpbmctc3ltYm9sIDxTTUFMTC1DQVBJVEFMPgorY29sbGF0aW5nLXN5bWJvbCA8U01BTEw+CisKKyUgPENBUElUQUwtU01BTEw+IGFuZCA8U01BTEwtQ0FQSVRBTD4KKyUgYXJlIGZvciBjYXNlcyBsaWtlIERhbmlzaCA8VTAwNDE+PFUwMDYxPgorJSBhbmQgU3BhbmlzaCA8VTAwNDM+PFUwMDY4PiBiZWluZyB0cmVhdGVkCislIGFzIG9uZSBsZXR0ZXIuCisKKyUgVGhlIDxhOD4gLi4uLi4uIDx6OD4gY29sbGF0aW5nCislIHN5bWJvbHMgaGF2ZSBkZWZpbmVkIHdlaWdodHMgYXMKKyUgdGhlIGxhc3QgY2hhcmFjdGVyIGluIGEgZ3JvdXAgb2YKKyUgTGF0aW4gbGV0dGVycy4gVGhleSBhcmUgdXNlZAorJSB0byBzcGVjaWZ5IGRlbHRhcyBieSBsb2NhbGVzIHVzaW5nCislIGEgbG9jYWxlIGFzIHRoZSBkZWZhdWx0IG9yZGVyaW5nCislIGFuZCBieSAicmVwbGFjZS1hZnRlciIgc3RhdGVtZW50cworJSBzcGVjaWZ5aW5nIHRoZSBjaGFuZ2VkIHBsYWNlbWVudAorJSBpbiBhbiBvcmRlcmluZyBvZiBhIGNoYXJhY3Rlci4KKworY29sbGF0aW5nLXN5bWJvbCA8YTg+Citjb2xsYXRpbmctc3ltYm9sIDxiOD4KK2NvbGxhdGluZy1zeW1ib2wgPGM4PgorY29sbGF0aW5nLXN5bWJvbCA8ZDg+Citjb2xsYXRpbmctc3ltYm9sIDxlOD4KK2NvbGxhdGluZy1zeW1ib2wgPGY4PgorY29sbGF0aW5nLXN5bWJvbCA8Zzg+Citjb2xsYXRpbmctc3ltYm9sIDxoOD4KK2NvbGxhdGluZy1zeW1ib2wgPGk4PgorY29sbGF0aW5nLXN5bWJvbCA8ajg+Citjb2xsYXRpbmctc3ltYm9sIDxrOD4KK2NvbGxhdGluZy1zeW1ib2wgPGw4PgorY29sbGF0aW5nLXN5bWJvbCA8bTg+Citjb2xsYXRpbmctc3ltYm9sIDxuOD4KK2NvbGxhdGluZy1zeW1ib2wgPG84PgorY29sbGF0aW5nLXN5bWJvbCA8cDg+Citjb2xsYXRpbmctc3ltYm9sIDxxOD4KK2NvbGxhdGluZy1zeW1ib2wgPHI4PgorY29sbGF0aW5nLXN5bWJvbCA8czg+Citjb2xsYXRpbmctc3ltYm9sIDx0OD4KK2NvbGxhdGluZy1zeW1ib2wgPHU4PgorY29sbGF0aW5nLXN5bWJvbCA8djg+Citjb2xsYXRpbmctc3ltYm9sIDx3OD4KK2NvbGxhdGluZy1zeW1ib2wgPHg4PgorY29sbGF0aW5nLXN5bWJvbCA8eTg+Citjb2xsYXRpbmctc3ltYm9sIDx6OD4KKworY29sbGF0aW5nLXN5bWJvbCA8Tk9ORT4KK2NvbGxhdGluZy1zeW1ib2wgPEFDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8QUNVVEUrRE9UPgorY29sbGF0aW5nLXN5bWJvbCA8R1JBVkU+Citjb2xsYXRpbmctc3ltYm9sIDxET1VCTEUtR1JBVkU+Citjb2xsYXRpbmctc3ltYm9sIDxCUkVWRT4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkUrR1JBVkU+Citjb2xsYXRpbmctc3ltYm9sIDxCUkVWRStNQUNST04+Citjb2xsYXRpbmctc3ltYm9sIDxCUkVWRStIT09LPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkUrVElMREU+Citjb2xsYXRpbmctc3ltYm9sIDxCUkVWRStET1QtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxCUkVWRS1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPElOVkVSVEVELUJSRVZFPgorY29sbGF0aW5nLXN5bWJvbCA8Q0lSQ1VNRkxFWD4KK2NvbGxhdGluZy1zeW1ib2wgPENJUkNVTUZMRVgrQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxDSVJDVU1GTEVYK0dSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8Q0lSQ1VNRkxFWCtIT09LPgorY29sbGF0aW5nLXN5bWJvbCA8Q0lSQ1VNRkxFWCtUSUxERT4KK2NvbGxhdGluZy1zeW1ib2wgPENJUkNVTUZMRVgrRE9ULUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8Q0FST04+Citjb2xsYXRpbmctc3ltYm9sIDxDQVJPTitESUFFUkVTSVM+Citjb2xsYXRpbmctc3ltYm9sIDxDQVJPTitET1Q+Citjb2xsYXRpbmctc3ltYm9sIDxSSU5HPgorY29sbGF0aW5nLXN5bWJvbCA8UklORytBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPFJJTkctQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxESUFFUkVTSVM+Citjb2xsYXRpbmctc3ltYm9sIDxESUFFUkVTSVMrTUFDUk9OPgorY29sbGF0aW5nLXN5bWJvbCA8RElBRVJFU0lTK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8RElBRVJFU0lTK0dSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8RElBRVJFU0lTK0NBUk9OPgorY29sbGF0aW5nLXN5bWJvbCA8RE9VQkxFLUFDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8SE9PSz4KK2NvbGxhdGluZy1zeW1ib2wgPFRJTERFPgorY29sbGF0aW5nLXN5bWJvbCA8VElMREUrQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxUSUxERStESUFFUkVTSVM+Citjb2xsYXRpbmctc3ltYm9sIDxUSUxERS1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPERPVD4KK2NvbGxhdGluZy1zeW1ib2wgPERPVC1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPERPVCtET1QtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxTVFJPS0U+Citjb2xsYXRpbmctc3ltYm9sIDxTVFJPS0UrQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxDRURJTExBPgorY29sbGF0aW5nLXN5bWJvbCA8Q0VESUxMQStBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPENFRElMTEErR1JBVkU+Citjb2xsYXRpbmctc3ltYm9sIDxDRURJTExBK0JSRVZFPgorY29sbGF0aW5nLXN5bWJvbCA8T0dPTkVLPgorY29sbGF0aW5nLXN5bWJvbCA8T0dPTkVLK01BQ1JPTj4KK2NvbGxhdGluZy1zeW1ib2wgPE1BQ1JPTj4KK2NvbGxhdGluZy1zeW1ib2wgPE1BQ1JPTitBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPE1BQ1JPTitHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPE1BQ1JPTitESUFFUkVTSVM+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04rRElBRVJFU0lTLUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0RPVD4KK2NvbGxhdGluZy1zeW1ib2wgPE1BQ1JPTitET1QtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04rQ0lSQ1VNRkxFWD4KK2NvbGxhdGluZy1zeW1ib2wgPExJTkUtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxIT1JOPgorY29sbGF0aW5nLXN5bWJvbCA8SE9STitBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPEhPUk4rR1JBVkU+Citjb2xsYXRpbmctc3ltYm9sIDxIT1JOK0hPT0s+Citjb2xsYXRpbmctc3ltYm9sIDxIT1JOK1RJTERFPgorY29sbGF0aW5nLXN5bWJvbCA8SE9STitET1QtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxQUkVDRURFRC1CWS1BUE9TVFJPUEhFPgorY29sbGF0aW5nLXN5bWJvbCA8R1JFRUs+Citjb2xsYXRpbmctc3ltYm9sIDxUT05PUz4KK2NvbGxhdGluZy1zeW1ib2wgPERJQUxZVElDQT4KK2NvbGxhdGluZy1zeW1ib2wgPERJQUxZVElDQStUT05PUz4KK2NvbGxhdGluZy1zeW1ib2wgPENZUklMTElDPgorY29sbGF0aW5nLXN5bWJvbCA8SElSQUdBTkE+Citjb2xsYXRpbmctc3ltYm9sIDxLQVRBS0FOQT4KK2NvbGxhdGluZy1zeW1ib2wgPFNQRUNJQUw+CisKKyUgbGV0dGVyO2FjY2VudDtjYXNlO3NwZWNpYWxzCisKK29yZGVyX3N0YXJ0IGZvcndhcmQ7YmFja3dhcmQvCisgICAgICAgICAgICA7Zm9yd2FyZDtwb3NpdGlvbgorCislIDxDQVBJVEFMPiBvciA8U01BTEw+IGxldHRlcnMgZmlyc3Q6CisKKzxTTUFMTD4KKzxTTUFMTC1DQVBJVEFMPgorPENBUElUQUwtU01BTEw+Cis8Q0FQSVRBTD4KKworJSBBY2NlbnRzOgorCis8Tk9ORT4KKzxBQ1VURT4KKzxBQ1VURStET1Q+Cis8R1JBVkU+Cis8RE9VQkxFLUdSQVZFPgorPEJSRVZFPgorPEJSRVZFK0FDVVRFPgorPEJSRVZFK0dSQVZFPgorPEJSRVZFK01BQ1JPTj4KKzxCUkVWRStIT09LPgorPEJSRVZFK1RJTERFPgorPEJSRVZFK0RPVC1CRUxPVz4KKzxCUkVWRS1CRUxPVz4KKzxJTlZFUlRFRC1CUkVWRT4KKzxDSVJDVU1GTEVYPgorPENJUkNVTUZMRVgrQUNVVEU+Cis8Q0lSQ1VNRkxFWCtHUkFWRT4KKzxDSVJDVU1GTEVYK0hPT0s+Cis8Q0lSQ1VNRkxFWCtUSUxERT4KKzxDSVJDVU1GTEVYK0RPVC1CRUxPVz4KKzxDQVJPTj4KKzxDQVJPTitESUFFUkVTSVM+Cis8Q0FST04rRE9UPgorPFJJTkc+Cis8UklORytBQ1VURT4KKzxSSU5HLUJFTE9XPgorPERJQUVSRVNJUz4KKzxESUFFUkVTSVMrTUFDUk9OPgorPERJQUVSRVNJUytBQ1VURT4KKzxESUFFUkVTSVMrR1JBVkU+Cis8RElBRVJFU0lTK0NBUk9OPgorPERPVUJMRS1BQ1VURT4KKzxIT09LPgorPFRJTERFPgorPFRJTERFK0FDVVRFPgorPFRJTERFK0RJQUVSRVNJUz4KKzxUSUxERS1CRUxPVz4KKzxET1Q+Cis8RE9ULUJFTE9XPgorPERPVCtET1QtQkVMT1c+Cis8U1RST0tFPgorPFNUUk9LRStBQ1VURT4KKzxDRURJTExBPgorPENFRElMTEErQUNVVEU+Cis8Q0VESUxMQStHUkFWRT4KKzxDRURJTExBK0JSRVZFPgorPE9HT05FSz4KKzxPR09ORUsrTUFDUk9OPgorPE1BQ1JPTj4KKzxNQUNST04rQUNVVEU+Cis8TUFDUk9OK0dSQVZFPgorPE1BQ1JPTitESUFFUkVTSVM+Cis8TUFDUk9OK0RJQUVSRVNJUy1CRUxPVz4KKzxNQUNST04rRE9UPgorPE1BQ1JPTitET1QtQkVMT1c+Cis8TUFDUk9OK0NJUkNVTUZMRVg+Cis8TElORS1CRUxPVz4KKzxIT1JOPgorPEhPUk4rQUNVVEU+Cis8SE9STitHUkFWRT4KKzxIT1JOK0hPT0s+Cis8SE9STitUSUxERT4KKzxIT1JOK0RPVC1CRUxPVz4KKzxQUkVDRURFRC1CWS1BUE9TVFJPUEhFPgorPEdSRUVLPgorPFRPTk9TPgorPERJQUxZVElDQT4KKzxESUFMWVRJQ0ErVE9OT1M+Cis8Q1lSSUxMSUM+Cis8SElSQUdBTkE+Cis8S0FUQUtBTkE+Cis8U1BFQ0lBTD4KKworPFUwMEEwPgk8VTAwQTA+OzxVMDBBMD47PFUwMEEwPjtJR05PUkUKKzxVMDAyMD4JPFUwMDIwPjtJR05PUkU7PFUwMDIwPjs8VTAwMjA+Cis8VTAwMDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwOT4KKzxVMDAwQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBCPgorPFUwMDBEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMEQ+Cis8VTAwMEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwQT4KKzxVMDAwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBDPgorPFUwMDVGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNUY+Cis8VTAwQUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBRj4KKzxVMDBBRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEFEPgorPFUwMDJEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMkQ+Cis8VTAwMkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyQz4KKzxVMDAzQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDNCPgorPFUwMDNBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwM0E+Cis8VTAwMjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyMT4KKzxVMDBBMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEExPgorPFUwMDNGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwM0Y+Cis8VTAwQkY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCRj4KKzxVMDAyRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDJGPgorPFUwMDJFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMkU+Cis8VTAwQjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCND4KKzxVMDA2MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDYwPgorPFUwMDVFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNUU+Cis8VTAwQTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBOD4KKzxVMDA3RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDdFPgorPFUwMEI3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjc+Cis8VTAwQjg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCOD4KKzxVMDAyNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDI3PgorPFUyMDE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTg+Cis8VTIwMTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxOT4KKzxVMDAyMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDIyPgorPFUyMDFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMUM+Cis8VTIwMUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxRD4KKzxVMDBBQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEFCPgorPFUwMEJCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQkI+Cis8VTAwMjg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyOD4KKzxVMjA3RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDdEPgorPFUwMDI5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjk+Cis8VTIwN0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA3RT4KKzxVMDA1Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDVCPgorPFUwMDVEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNUQ+Cis8VTAwN0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA3Qj4KKzxVMDA3RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDdEPgorPFUwMEE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTc+Cis8VTAwQjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCNj4KKzxVMDBBOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEE5PgorPFUwMEFFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQUU+Cis8VTAwNDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA0MD4KKzxVMDBBND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEE0PgorPFUwMEEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTI+Cis8VTAwMjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyND4KKzxVMDBBMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEEzPgorPFUwMEE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTU+Cis8VTAwMkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyQT4KKzxVMDA1Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDVDPgorPFUwMDI2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjY+Cis8VTAwMjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyMz4KKzxVMDAyNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDI1PgorPFUyMDdCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwN0I+Cis8VTAwMkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyQj4KKzxVMjA3QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDdBPgorPFUwMEIxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjE+Cis8VTAwRjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBGNz4KKzxVMDBENz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEQ3PgorPFUyMjYwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNjA+Cis8VTAwM0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAzQz4KKzxVMjI2ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjY0PgorPFUwMDNEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwM0Q+Cis8VTIyNjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2NT4KKzxVMDAzRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDNFPgorPFUwMEFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQUM+Cis8VTAwN0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA3Qz4KKzxVMDBBNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEE2PgorPFUwMEIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjA+Cis8VTAwQjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCNT4KKzxVMDJDNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkM3PgorPFUwMkQ4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAyRDg+Cis8VTAyRDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDJEOT4KKzxVMDJEQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkRBPgorPFUwMkRCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAyREI+Cis8VTAyREM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDJEQz4KKzxVMDJERD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkREPgorPFUwMzc0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzNzQ+Cis8VTAzNzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDM3NT4KKzxVMDM3QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzdBPgorPFUwMzdFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzN0U+Cis8VTAzODQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDM4ND4KKzxVMDM4NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzg1PgorPFUwMzg3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzODc+Cis8VTAzRDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDNEMD4KKzxVMUZCRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkJGPgorPFUxRkMwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGQzA+Cis8VTFGQzE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZDMT4KKzxVMUZDRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkNEPgorPFUxRkNFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGQ0U+Cis8VTFGQ0Y+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZDRj4KKzxVMUZERD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkREPgorPFUxRkRFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGREU+Cis8VTFGREY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZERj4KKzxVMUZFRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkVEPgorPFUxRkVGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGRUY+Cis8VTFGRkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZGRT4KKzxVMjAwMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDAyPgorPFUyMDAzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMDM+Cis8VTIwMDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwND4KKzxVMjAwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDA1PgorPFUyMDA2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMDY+Cis8VTIwMEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwRT4KKzxVMjAwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDBGPgorPFUyMDA5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMDk+Cis8VTIwMEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwQT4KKzxVMjAxMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDEwPgorPFUyMDEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTM+Cis8VTIwMTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxND4KKzxVMjAxNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDE1PgorPFUyMDE2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTY+Cis8VTIwMTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxNz4KKzxVMjAxQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDFBPgorPFUyMDFCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMUI+Cis8VTIwMUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxRT4KKzxVMjAxRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDFGPgorPFUyMDIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMjA+Cis8VTIwMjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAyMT4KKzxVMjIxOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjE5PgorPFUyMDI1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMjU+Cis8VTIwMjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAyNj4KKzxVMjAzMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDMwPgorPFUyMDMyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzI+Cis8VTIwMzM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzMz4KKzxVMjAzND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDM0PgorPFUyMDM1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzU+Cis8VTIwMzY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzNj4KKzxVMjAzNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDM3PgorPFUyMDM4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzg+Cis8VTIwMzk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzOT4KKzxVMjAzQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDNBPgorPFUyMDNCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwM0I+Cis8VTIwM0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzQz4KKzxVMjAzRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDNFPgorPFUyMDdDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwN0M+Cis8VTIwODA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4MD4KKzxVMjA4MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDgxPgorPFUyMDgyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODI+Cis8VTIwODM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4Mz4KKzxVMjA4ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDg0PgorPFUyMDg1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODU+Cis8VTIwODY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4Nj4KKzxVMjA4Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDg3PgorPFUyMDg4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODg+Cis8VTIwODk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4OT4KKzxVMjA4QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDhBPgorPFUyMDhCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwOEI+Cis8VTIwOEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4Qz4KKzxVMjA4RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDhEPgorPFUyMDhFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwOEU+Cis8VTIwQTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjBBMz4KKzxVMjBBND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMEE0PgorPFUyMEE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwQTc+Cis8VTIwQTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjBBOT4KKzxVMjEwMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTAzPgorPFUyMTA1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMDU+Cis8VTIxMDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjEwOT4KKzxVMjExNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTE2PgorPFUyMTE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMTc+Cis8VTIxMUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjExRT4KKzxVMjEyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTIwPgorPFUyMTIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMjI+Cis8VTIxMjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjEyNj4KKzxVMjEyQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTJCPgorPFUyMTUzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTM+Cis8VTIxNTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1ND4KKzxVMjE1NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTU1PgorPFUyMTU2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTY+Cis8VTIxNTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1Nz4KKzxVMjE1OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTU4PgorPFUyMTU5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTk+Cis8VTIxNUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1QT4KKzxVMjE2MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTYwPgorPFUyMTYxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjE+Cis8VTIxNjI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2Mj4KKzxVMjE2Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTYzPgorPFUyMTY0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjQ+Cis8VTIxNjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2NT4KKzxVMjE2Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTY2PgorPFUyMTY3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjc+Cis8VTIxNjg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2OD4KKzxVMjE2OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTY5PgorPFUyMTZBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNkE+Cis8VTIxNkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2Qj4KKzxVMjE2Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTZDPgorPFUyMTZEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNkQ+Cis8VTIxNkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2RT4KKzxVMjE2Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTZGPgorPFUyMTcwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzA+Cis8VTIxNzE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3MT4KKzxVMjE3Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTcyPgorPFUyMTczPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzM+Cis8VTIxNzQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3ND4KKzxVMjE3NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTc1PgorPFUyMTc2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzY+Cis8VTIxNzc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3Nz4KKzxVMjE3OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTc4PgorPFUyMTc5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzk+Cis8VTIxN0E+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3QT4KKzxVMjE3Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTdCPgorPFUyMTdDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxN0M+Cis8VTIxN0Q+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3RD4KKzxVMjE3RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTdFPgorPFUyMTdGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxN0Y+Cis8VTIxODA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE4MD4KKzxVMjE4MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTgxPgorPFUyMTgyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxODI+Cis8VTIxOTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5MT4KKzxVMjE5Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTkzPgorPFUyMTk0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxOTQ+Cis8VTIxOTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5NT4KKzxVMjE5Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTk2PgorPFUyMTk3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxOTc+Cis8VTIxOTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5OD4KKzxVMjE5OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTk5PgorPFUyMUE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxQTg+Cis8VTIxQzA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjFDMD4KKzxVMjFEMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMUQwPgorPFUyMUQyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxRDI+Cis8VTIxRDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjFEND4KKzxVMjIwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjAwPgorPFUyMjAyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMDI+Cis8VTIyMDM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwMz4KKzxVMjIwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjA1PgorPFUyMjA2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMDY+Cis8VTIyMDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwNz4KKzxVMjIwOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjA4PgorPFUyMjBCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMEI+Cis8VTIyMEY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwRj4KKzxVMjIxMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjExPgorPFUyMjEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMTI+Cis8VTIyMTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxMz4KKzxVMjIxND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjE0PgorPFUyMDQ0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwNDQ+Cis8VTIyMTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxNz4KKzxVMjIxOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjE4PgorPFUyMDIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMjI+Cis8VTIyMUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxQT4KKzxVMjIxRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjFEPgorPFUyMjFFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMUU+Cis8VTIyMUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxRj4KKzxVMjIyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjIwPgorPFUyMjI1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMjU+Cis8VTIyMjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyNz4KKzxVMjIyOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjI4PgorPFUyMjI5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMjk+Cis8VTIyMkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyQT4KKzxVMjIyQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjJCPgorPFUyMjJDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMkM+Cis8VTIyMkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyRT4KKzxVMjIzND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjM0PgorPFUyMjM1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMzU+Cis8VTIyMzY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIzNj4KKzxVMjIzNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjM3PgorPFUyMjNDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyM0M+Cis8VTIyM0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIzRT4KKzxVMjI0Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjQzPgorPFUyMjQ1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNDU+Cis8VTIyNDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI0OD4KKzxVMjI0Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjRDPgorPFUyMjUzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNTM+Cis8VTIyNjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2MT4KKzxVMjI2QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjZBPgorPFUyMjZCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNkI+Cis8VTIyNkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2RT4KKzxVMjI2Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjZGPgorPFUyMjgyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyODI+Cis8VTIyODM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI4Mz4KKzxVMjI4Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjg2PgorPFUyMjg3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyODc+Cis8VTIyOTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI5OT4KKzxVMjI5QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjlBPgorPFUyMkE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyQTU+Cis8VTIyQzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjJDNT4KKzxVMjJFRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMkVFPgorPFUyMzAyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMDI+Cis8VTIzMDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMwOD4KKzxVMjMwOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzA5PgorPFUyMzBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMEE+Cis8VTIzMEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMwQj4KKzxVMjMxMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzEwPgorPFUyMzEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMTI+Cis8VTIzMTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMxNT4KKzxVMjMyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzIwPgorPFUyMzIxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMjE+Cis8VTI0MjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQyMz4KKzxVMjQ0MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQwPgorPFUyNDQxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDE+Cis8VTI0NDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ0Mj4KKzxVMjQ0Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQzPgorPFUyNDQ2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDY+Cis8VTI0NDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ0Nz4KKzxVMjQ0OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQ4PgorPFUyNDQ5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDk+Cis8VTI0NjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2MD4KKzxVMjQ2MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDYxPgorPFUyNDYyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NjI+Cis8VTI0NjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Mz4KKzxVMjQ2ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDY0PgorPFUyNDY1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NjU+Cis8VTI0NjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Nj4KKzxVMjQ2Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDY3PgorPFUyNDY4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0Njg+Cis8VTI0Njk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2OT4KKzxVMjQ2QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDZBPgorPFUyNDZCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NkI+Cis8VTI0NkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Qz4KKzxVMjQ2RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDZEPgorPFUyNDZFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NkU+Cis8VTI0NkY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Rj4KKzxVMjQ3MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDcwPgorPFUyNDcxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NzE+Cis8VTI0NzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3Mj4KKzxVMjQ3Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDczPgorPFUyNDc0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NzQ+Cis8VTI0NzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3NT4KKzxVMjQ3Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDc2PgorPFUyNDc3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0Nzc+Cis8VTI0Nzg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3OD4KKzxVMjQ3OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDc5PgorPFUyNDdBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0N0E+Cis8VTI0N0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3Qj4KKzxVMjQ3Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDdDPgorPFUyNDdEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0N0Q+Cis8VTI0N0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3RT4KKzxVMjQ3Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDdGPgorPFUyNDgwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODA+Cis8VTI0ODE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4MT4KKzxVMjQ4Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDgyPgorPFUyNDgzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODM+Cis8VTI0ODQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4ND4KKzxVMjQ4NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDg1PgorPFUyNDg2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODY+Cis8VTI0ODc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4Nz4KKzxVMjQ4OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDg4PgorPFUyNDg5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODk+Cis8VTI0OEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4QT4KKzxVMjQ4Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDhCPgorPFUyNDhDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OEM+Cis8VTI0OEQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4RD4KKzxVMjQ4RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDhFPgorPFUyNDhGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OEY+Cis8VTI0OTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5MD4KKzxVMjQ5MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDkxPgorPFUyNDkyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTI+Cis8VTI0OTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5Mz4KKzxVMjQ5ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDk0PgorPFUyNDk1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTU+Cis8VTI0OTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5Nj4KKzxVMjQ5Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDk3PgorPFUyNDk4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTg+Cis8VTI0OTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5OT4KKzxVMjQ5QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDlBPgorPFUyNDlCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OUI+Cis8VTI0RUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjRFQT4KKzxVMjUwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTAwPgorPFUyNTUwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTA+Cis8VTI1MDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwMj4KKzxVMjU1MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTUxPgorPFUyNTA0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MDQ+Cis8VTI1MDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwNT4KKzxVMjUwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTA2PgorPFUyNTA3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MDc+Cis8VTI1MDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwOD4KKzxVMjUwOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTA5PgorPFUyNTBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MEE+Cis8VTI1MEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwQj4KKzxVMjUwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTBDPgorPFUyNTUyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTI+Cis8VTI1NTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Mz4KKzxVMjU1ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTU0PgorPFUyNTEwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MTA+Cis8VTI1NTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1NT4KKzxVMjU1Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTU2PgorPFUyNTU3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTc+Cis8VTI1MTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUxND4KKzxVMjU1OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTU4PgorPFUyNTU5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTk+Cis8VTI1NUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1QT4KKzxVMjUxOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTE4PgorPFUyNTVCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NUI+Cis8VTI1NUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Qz4KKzxVMjU1RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTVEPgorPFUyNTFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MUM+Cis8VTI1NUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1RT4KKzxVMjUxRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTFFPgorPFUyNTFGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MUY+Cis8VTI1NUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Rj4KKzxVMjUyMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTIxPgorPFUyNTIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MjI+Cis8VTI1NjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2MD4KKzxVMjUyND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTI0PgorPFUyNTYxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjE+Cis8VTI1MjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyNj4KKzxVMjUyNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTI3PgorPFUyNTYyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjI+Cis8VTI1Mjk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyOT4KKzxVMjUyQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTJBPgorPFUyNTYzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjM+Cis8VTI1MkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyQz4KKzxVMjUyRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTJEPgorPFUyNTJFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MkU+Cis8VTI1NjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2ND4KKzxVMjU2NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTY1PgorPFUyNTMxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MzE+Cis8VTI1MzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzMj4KKzxVMjU2Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTY2PgorPFUyNTM0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MzQ+Cis8VTI1MzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzNT4KKzxVMjUzNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTM2PgorPFUyNTY3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Njc+Cis8VTI1Njg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2OD4KKzxVMjUzOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTM5PgorPFUyNTNBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1M0E+Cis8VTI1Njk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2OT4KKzxVMjUzQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTNDPgorPFUyNTNEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1M0Q+Cis8VTI1M0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzRT4KKzxVMjU2QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTZBPgorPFUyNTQwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDA+Cis8VTI1NDE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0MT4KKzxVMjU2Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTZCPgorPFUyNTQzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDM+Cis8VTI1NDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0ND4KKzxVMjU0NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTQ1PgorPFUyNTQ2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDY+Cis8VTI1NDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0Nz4KKzxVMjU0OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTQ4PgorPFUyNTQ5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDk+Cis8VTI1NEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0QT4KKzxVMjU2Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTZDPgorPFUyNTcxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NzE+Cis8VTI1NzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU3Mj4KKzxVMjU4MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTgwPgorPFUyNTg0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1ODQ+Cis8VTI1ODg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU4OD4KKzxVMjU4Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNThDPgorPFUyNTkwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1OTA+Cis8VTI1OTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU5MT4KKzxVMjU5Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTkyPgorPFUyNTkzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1OTM+Cis8VTI1QTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBMD4KKzxVMjVBMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUExPgorPFUyNUEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTI+Cis8VTI1QTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBMz4KKzxVMjVBND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUE0PgorPFUyNUE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTU+Cis8VTI1QTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBNj4KKzxVMjVBNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUE3PgorPFUyNUE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTg+Cis8VTI1QTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBOT4KKzxVMjVBQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUFBPgorPFUyNUFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QUM+Cis8VTI1QUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBRD4KKzxVMjVCMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUIyPgorPFUyNUIzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QjM+Cis8VTI1Qjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVCNz4KKzxVMjVCQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUJBPgorPFUyNUJDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QkM+Cis8VTI1QkQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVCRD4KKzxVMjVDMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUMxPgorPFUyNUM0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QzQ+Cis8VTI1QzY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVDNj4KKzxVMjVDNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUM3PgorPFUyNUNBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Q0E+Cis8VTI1Q0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVDQj4KKzxVMjVDRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUNFPgorPFUyNUNGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Q0Y+Cis8VTI1RDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVEMD4KKzxVMjVEMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUQxPgorPFUyNUQ4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1RDg+Cis8VTI1RDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVEOT4KKzxVMjVFMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUUyPgorPFUyNUUzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1RTM+Cis8VTI1RUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVFRj4KKzxVMjYwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjA1PgorPFUyNjA2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2MDY+Cis8VTI2MEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYwRT4KKzxVMjYwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjBGPgorPFUyNjFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2MUM+Cis8VTI2MUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYxRT4KKzxVMjYzQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjNBPgorPFUyNjNCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2M0I+Cis8VTI2M0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYzQz4KKzxVMjY0MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjQwPgorPFUyNjQyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NDI+Cis8VTI2NjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2MD4KKzxVMjY2MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjYxPgorPFUyNjYyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NjI+Cis8VTI2NjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2Mz4KKzxVMjY2ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjY0PgorPFUyNjY1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NjU+Cis8VTI2NjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2Nj4KKzxVMjY2Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjY3PgorPFUyNjY5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2Njk+Cis8VTI2NkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2QT4KKzxVMjY2Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjZCPgorPFUyNjZDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NkM+Cis8VTI2NkQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2RD4KKzxVMjY2RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjZFPgorPFUyNjZGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NkY+Cis8VTI3MTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjcxMz4KKzxVMjcxNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNzE3PgorPFUyNzIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI3MjA+Cis8VTMwMDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwMD4KKzxVMzAwMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDAxPgorPFUzMDAyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMDI+Cis8VTMwMDM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwMz4KKzxVMzAwND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDA0PgorPFUzMDA1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMDU+Cis8VTMwMDY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwNj4KKzxVMzAwNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDA3PgorPFUzMDBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMEE+Cis8VTMwMEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwQj4KKzxVMzAwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDBDPgorPFUzMDBEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMEQ+Cis8VTMwMEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwRT4KKzxVMzAwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDBGPgorPFUzMDEwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTA+Cis8VTMwMTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxMT4KKzxVMzAxMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDEyPgorPFUzMDEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTM+Cis8VTMwMTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxND4KKzxVMzAxNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDE1PgorPFUzMDE2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTY+Cis8VTMwMTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxNz4KKzxVMzAxQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDFDPgorPFUzMDIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMjA+Cis8VTMwOUI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzA5Qj4KKzxVMzA5Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDlDPgorPFUzMDlEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwOUQ+Cis8VTMwOUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzA5RT4KKzxVMzBGQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMEZCPgorPFUzMEZDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwRkM+Cis8VTMwRkQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzBGRD4KKzxVMzBGRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMEZFPgorPFUzMjFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMUM+Cis8VTMyMjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyMD4KKzxVMzIyMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjIxPgorPFUzMjIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjI+Cis8VTMyMjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyMz4KKzxVMzIyND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjI0PgorPFUzMjI1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjU+Cis8VTMyMjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyNj4KKzxVMzIyNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjI3PgorPFUzMjI4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjg+Cis8VTMyMjk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyOT4KKzxVMzI3Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjdGPgorPFUzM0MyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMzQzI+Cis8VTMzRDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzNEOD4KKzxVMDAwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDAwPgorPFUwMDAxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDE+Cis8VTAwMDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwMj4KKzxVMDAwMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDAzPgorPFUwMDA0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDQ+Cis8VTAwMDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwNT4KKzxVMDAwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA2PgorPFUwMDA3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDc+Cis8VTAwMDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwOD4KKzxVMDAwRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBFPgorPFUwMDBGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMEY+Cis8VTAwMTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxMD4KKzxVMDAxMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDExPgorPFUwMDEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTI+Cis8VTAwMTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxMz4KKzxVMDAxND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE0PgorPFUwMDE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTU+Cis8VTAwMTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxNj4KKzxVMDAxNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE3PgorPFUwMDE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTg+Cis8VTAwMTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxOT4KKzxVMDAxQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFBPgorPFUwMDFCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMUI+Cis8VTAwMUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxQz4KKzxVMDAxRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFEPgorPFUwMDFFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMUU+Cis8VTAwMUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxRj4KKzxVMDA3Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDdGPgorPFUwMDgwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODA+Cis8VTAwODE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4MT4KKzxVMDA4Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDgyPgorPFUwMDgzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODM+Cis8VTAwODQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4ND4KKzxVMDA4NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDg1PgorPFUwMDg2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODY+Cis8VTAwODc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4Nz4KKzxVMDA4OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDg4PgorPFUwMDg5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODk+Cis8VTAwOEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4QT4KKzxVMDA4Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDhCPgorPFUwMDhDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOEM+Cis8VTAwOEQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4RD4KKzxVMDA4RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDhFPgorPFUwMDhGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOEY+Cis8VTAwOTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5MD4KKzxVMDA5MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDkxPgorPFUwMDkyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTI+Cis8VTAwOTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Mz4KKzxVMDA5ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDk0PgorPFUwMDk1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTU+Cis8VTAwOTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Nj4KKzxVMDA5Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDk3PgorPFUwMDk4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTg+Cis8VTAwOTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5OT4KKzxVMDA5QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDlBPgorPFUwMDlCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOUI+Cis8VTAwOUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Qz4KKzxVMDA5RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDlEPgorPFUwMDlFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOUU+Cis8VTAwOUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Rj4KKzxVRTAwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDAwPgorPFVFMDAxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDE+Cis8VUUwMDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwMj4KKzxVMDMwMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzAxPgorPFVFMDA0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDQ+Cis8VUUwMDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwNT4KKzxVRTAwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDA2PgorPFVFMDA3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDc+Cis8VUUwMDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwOD4KKzxVRTAwOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDA5PgorPFVFMDBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMEE+Cis8VUUwMEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwQj4KKzxVRTAwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDBDPgorPFVFMDBEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMEQ+Cis8VUUwMEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwRT4KKzxVRTAwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDBGPgorPCI9PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8Ij0+Cis8VUUwMTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxMT4KKzxVRTAxMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDEyPgorPFVFMDEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMTM+Cis8VUUwMTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxND4KKzxVRTAxNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDE1PgorPFVFMDE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMTc+Cis8VUUwMTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxOD4KKzxVRTAxOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDE5PgorVU5ERUZJTkVECUlHTk9SRTtJR05PUkU7SUdOT1JFCisKKzxVMDAzMD4JPFUwMDMwPjs8VTAwMzA+O0lHTk9SRTtJR05PUkUKKzxVMjA3MD4JPFUwMDMwPjs8VTIwNzA+O0lHTk9SRTtJR05PUkUKKzxVMjE1Qj4JPFUwMDMwPjs8VTIxNUI+O0lHTk9SRTtJR05PUkUKKzxVMDBCQz4JPFUwMDMwPjs8VTAwQkM+O0lHTk9SRTtJR05PUkUKKzxVMjE1Qz4JPFUwMDMwPjs8VTIxNUM+O0lHTk9SRTtJR05PUkUKKzxVMDBCRD4JPFUwMDMwPjs8VTAwQkQ+O0lHTk9SRTtJR05PUkUKKzxVMjE1RD4JPFUwMDMwPjs8VTIxNUQ+O0lHTk9SRTtJR05PUkUKKzxVMDBCRT4JPFUwMDMwPjs8VTAwQkU+O0lHTk9SRTtJR05PUkUKKzxVMjE1RT4JPFUwMDMwPjs8VTIxNUU+O0lHTk9SRTtJR05PUkUKKzxVMDAzMT4JPFUwMDMxPjs8VTAwMzE+O0lHTk9SRTtJR05PUkUKKzxVMDAzMj4JPFUwMDMyPjs8VTAwMzI+O0lHTk9SRTtJR05PUkUKKzxVMDAzMz4JPFUwMDMzPjs8VTAwMzM+O0lHTk9SRTtJR05PUkUKKzxVMDAzND4JPFUwMDM0Pjs8VTAwMzQ+O0lHTk9SRTtJR05PUkUKKzxVMDAzNT4JPFUwMDM1Pjs8VTAwMzU+O0lHTk9SRTtJR05PUkUKKzxVMDAzNj4JPFUwMDM2Pjs8VTAwMzY+O0lHTk9SRTtJR05PUkUKKzxVMDAzNz4JPFUwMDM3Pjs8VTAwMzc+O0lHTk9SRTtJR05PUkUKKzxVMDAzOD4JPFUwMDM4Pjs8VTAwMzg+O0lHTk9SRTtJR05PUkUKKzxVMDAzOT4JPFUwMDM5Pjs8VTAwMzk+O0lHTk9SRTtJR05PUkUKKzxVMDBCOT4JPFUwMDMxPjs8VTAwQjk+O0lHTk9SRTtJR05PUkUKKzxVMDBCMj4JPFUwMDMyPjs8VTAwQjI+O0lHTk9SRTtJR05PUkUKKzxVMDBCMz4JPFUwMDMzPjs8VTAwQjM+O0lHTk9SRTtJR05PUkUKKzxVMjA3ND4JPFUwMDM0Pjs8VTIwNzQ+O0lHTk9SRTtJR05PUkUKKzxVMjA3NT4JPFUwMDM1Pjs8VTIwNzU+O0lHTk9SRTtJR05PUkUKKzxVMjA3Nj4JPFUwMDM2Pjs8VTIwNzY+O0lHTk9SRTtJR05PUkUKKzxVMjA3Nz4JPFUwMDM3Pjs8VTIwNzc+O0lHTk9SRTtJR05PUkUKKzxVMjA3OD4JPFUwMDM4Pjs8VTIwNzg+O0lHTk9SRTtJR05PUkUKKzxVMjA3OT4JPFUwMDM5Pjs8VTIwNzk+O0lHTk9SRTtJR05PUkUKKzxVMDA0MT4JPFUwMDQxPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDYxPgk8VTAwNDE+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMEFBPgk8VTAwNDE+OzxOT05FPjs8VTAwQUE+O0lHTk9SRQorPFUwMEMxPgk8VTAwNDE+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMEUxPgk8VTAwNDE+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDBDMD4JPFUwMDQxPjs8R1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFMD4JPFUwMDQxPjs8R1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMDA+CTxVMDA0MT47PERPVUJMRS1HUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjAxPgk8VTAwNDE+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMDI+CTxVMDA0MT47PEJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMDM+CTxVMDA0MT47PEJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRUFFPgk8VTAwNDE+OzxCUkVWRStBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRUFGPgk8VTAwNDE+OzxCUkVWRStBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVCMD4JPFUwMDQxPjs8QlJFVkUrR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCMT4JPFUwMDQxPjs8QlJFVkUrR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFQjI+CTxVMDA0MT47PEJSRVZFK0hPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCMz4JPFUwMDQxPjs8QlJFVkUrSE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVCND4JPFUwMDQxPjs8QlJFVkUrVElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCNT4JPFUwMDQxPjs8QlJFVkUrVElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFQjY+CTxVMDA0MT47PEJSRVZFK0RPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUI3Pgk8VTAwNDE+OzxCUkVWRStET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAyMDI+CTxVMDA0MT47PElOVkVSVEVELUJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMDM+CTxVMDA0MT47PElOVkVSVEVELUJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMEMyPgk8VTAwNDE+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTI+CTxVMDA0MT47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFQTQ+CTxVMDA0MT47PENJUkNVTUZMRVgrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVBNT4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVBNj4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRUE3Pgk8VTAwNDE+OzxDSVJDVU1GTEVYK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRUE4Pgk8VTAwNDE+OzxDSVJDVU1GTEVYK0hPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVBOT4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRUFBPgk8VTAwNDE+OzxDSVJDVU1GTEVYK1RJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQUI+CTxVMDA0MT47PENJUkNVTUZMRVgrVElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFQUM+CTxVMDA0MT47PENJUkNVTUZMRVgrRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQUQ+CTxVMDA0MT47PENJUkNVTUZMRVgrRE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMUNEPgk8VTAwNDE+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUNFPgk8VTAwNDE+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDBDNT4JPFUwMDQxPjs8UklORz47PENBUElUQUw+O0lHTk9SRQorPFUwMEU1Pgk8VTAwNDE+OzxSSU5HPjs8U01BTEw+O0lHTk9SRQorPFUwMUZBPgk8VTAwNDE+OzxSSU5HK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRkI+CTxVMDA0MT47PFJJTkcrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFMDA+CTxVMDA0MT47PFJJTkctQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwMT4JPFUwMDQxPjs8UklORy1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDBDND4JPFUwMDQxPjs8RElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTQ+CTxVMDA0MT47PERJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMDFERT4JPFUwMDQxPjs8RElBRVJFU0lTK01BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMURGPgk8VTAwNDE+OzxESUFFUkVTSVMrTUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRUEyPgk8VTAwNDE+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQTM+CTxVMDA0MT47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTAwQzM+CTxVMDA0MT47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTM+CTxVMDA0MT47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRUEwPgk8VTAwNDE+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVBMT4JPFUwMDQxPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTAwPgk8VTAwNDE+OzxNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEwMT4JPFUwMDQxPjs8TUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMUUwPgk8VTAwNDE+OzxNQUNST04rRE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRTE+CTxVMDA0MT47PE1BQ1JPTitET1Q+OzxTTUFMTD47SUdOT1JFCis8YTg+Cis8VTAxMDQ+CTxVMDEwND47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEwNT4JPFUwMTA0Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDBDNj4JIjxVMDA0MT48VTAwNDU+IjsiPFUwMEM2PjxVMDBDNj4iOyI8Q0FQSVRBTD48Q0FQSVRBTD4iO0lHTk9SRQorPFUwMEU2PgkiPFUwMDQxPjxVMDA0NT4iOyI8VTAwQzY+PFUwMEM2PiI7IjxTTUFMTD48U01BTEw+IjtJR05PUkUKKzxVMDFGQz4JIjxVMDA0MT48VTAwNDU+IjsiPFUwMUZDPjxVMDFGQz4iOyI8Q0FQSVRBTD48Q0FQSVRBTD4iO0lHTk9SRQorPFUwMUZEPgkiPFUwMDQxPjxVMDA0NT4iOyI8VTAxRkM+PFUwMUZDPiI7IjxTTUFMTD48U01BTEw+IjtJR05PUkUKKzxVMDFFMj4JIjxVMDA0MT48VTAwNDU+IjsiPFUwMUUyPjxVMDFFMj4iOyI8Q0FQSVRBTD48Q0FQSVRBTD4iO0lHTk9SRQorPFUwMUUzPgkiPFUwMDQxPjxVMDA0NT4iOyI8VTAxRTI+PFUwMUUyPiI7IjxTTUFMTD48U01BTEw+IjtJR05PUkUKKzxVMDA0Mj4JPFUwMDQyPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDYyPgk8VTAwNDI+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUxRTAyPgk8VTAwNDI+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwMz4JPFUwMDQyPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTA0Pgk8VTAwNDI+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwNT4JPFUwMDQyPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUxRTA2Pgk8VTAwNDI+OzxMSU5FLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMDc+CTxVMDA0Mj47PExJTkUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8Yjg+Cis8VTAwNDM+CTxVMDA0Mz47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2Mz4JPFUwMDQzPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDEwOD4JPFUwMDQzPjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMTA5Pgk8VTAwNDM+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUwMTBDPgk8VTAwNDM+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTBEPgk8VTAwNDM+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDE4Nz4JPFUwMDQzPjs8SE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUwMTg4Pgk8VTAwNDM+OzxIT09LPjs8U01BTEw+O0lHTk9SRQorPFUwMTBBPgk8VTAwNDM+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEwQj4JPFUwMDQzPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUwMEM3Pgk8VTAwNDM+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTc+CTxVMDA0Mz47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFMDg+CTxVMDA0Mz47PENFRElMTEErQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwOT4JPFUwMDQzPjs8Q0VESUxMQStBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxjOD4KKzxVMDEwNj4JPFUwMTA2Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMTA3Pgk8VTAxMDY+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMDQ0Pgk8VTAwNDQ+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjQ+CTxVMDA0ND47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMEU+CTxVMDA0ND47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMEY+CTxVMDA0ND47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRTBBPgk8VTAwNDQ+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwQj4JPFUwMDQ0Pjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTBDPgk8VTAwNDQ+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwRD4JPFUwMDQ0Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTEwPgk8VTAwNDQ+OzxTVFJPS0U+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExMT4JPFUwMDQ0Pjs8U1RST0tFPjs8U01BTEw+O0lHTk9SRQorPFUxRTEwPgk8VTAwNDQ+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMTE+CTxVMDA0ND47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFMTI+CTxVMDA0ND47PE1BQ1JPTitDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMTM+CTxVMDA0ND47PE1BQ1JPTitDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRTBFPgk8VTAwNDQ+OzxMSU5FLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMEY+CTxVMDA0ND47PExJTkUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8ZDg+Cis8VTAwNDU+CTxVMDA0NT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2NT4JPFUwMDQ1Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDBDOT4JPFUwMDQ1Pjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFOT4JPFUwMDQ1Pjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAwQzg+CTxVMDA0NT47PEdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTg+CTxVMDA0NT47PEdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjA0Pgk8VTAwNDU+OzxET1VCTEUtR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIwNT4JPFUwMDQ1Pjs8RE9VQkxFLUdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTE0Pgk8VTAwNDU+OzxCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTE1Pgk8VTAwNDU+OzxCUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIwNj4JPFUwMDQ1Pjs8SU5WRVJURUQtQlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIwNz4JPFUwMDQ1Pjs8SU5WRVJURUQtQlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAwQ0E+CTxVMDA0NT47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFQT4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMUVCRT4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRUJGPgk8VTAwNDU+OzxDSVJDVU1GTEVYK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRUMwPgk8VTAwNDU+OzxDSVJDVU1GTEVYK0dSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQzE+CTxVMDA0NT47PENJUkNVTUZMRVgrR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFQzI+CTxVMDA0NT47PENJUkNVTUZMRVgrSE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUMzPgk8VTAwNDU+OzxDSVJDVU1GTEVYK0hPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFQzQ+CTxVMDA0NT47PENJUkNVTUZMRVgrVElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDNT4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUVDNj4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDNz4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxMUE+CTxVMDA0NT47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMUI+CTxVMDA0NT47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMENCPgk8VTAwNDU+OzxESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFQj4JPFUwMDQ1Pjs8RElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUxRUJBPgk8VTAwNDU+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQkI+CTxVMDA0NT47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFQkM+CTxVMDA0NT47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQkQ+CTxVMDA0NT47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRTFBPgk8VTAwNDU+OzxUSUxERS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTFCPgk8VTAwNDU+OzxUSUxERS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDExNj4JPFUwMDQ1Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMTc+CTxVMDA0NT47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUVCOD4JPFUwMDQ1Pjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQjk+CTxVMDA0NT47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUUxQz4JPFUwMDQ1Pjs8Q0VESUxMQStCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRTFEPgk8VTAwNDU+OzxDRURJTExBK0JSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTEyPgk8VTAwNDU+OzxNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExMz4JPFUwMDQ1Pjs8TUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRTE2Pgk8VTAwNDU+OzxNQUNST04rQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUxNz4JPFUwMDQ1Pjs8TUFDUk9OK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTE0Pgk8VTAwNDU+OzxNQUNST04rR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUxNT4JPFUwMDQ1Pjs8TUFDUk9OK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRTE4Pgk8VTAwNDU+OzxNQUNST04rQ0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUxRTE5Pgk8VTAwNDU+OzxNQUNST04rQ0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxlOD4KKzxVMDExOD4JPFUwMTE4Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMTE5Pgk8VTAxMTg+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMDQ2Pgk8VTAwNDY+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjY+CTxVMDA0Nj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxOTE+CTxVMDA0Nj47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE5Mj4JPFUwMDQ2Pjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUUxRT4JPFUwMDQ2Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMUY+CTxVMDA0Nj47PERPVD47PFNNQUxMPjtJR05PUkUKKzxmOD4KKzxVRkIwMD4JIjxVMDA0Nj48VTAwNDY+IjsiPE5PTkU+PE5PTkU+IjsiPFVGQjAwPjxVRkIwMD4iO0lHTk9SRQorPFVGQjAxPgkiPFUwMDQ2PjxVMDA0OT4iOyI8Tk9ORT48Tk9ORT4iOyI8VUZCMDE+PFVGQjAxPiI7SUdOT1JFCis8VUZCMDI+CSI8VTAwNDY+PFUwMDRDPiI7IjxOT05FPjxOT05FPiI7IjxVRkIwMj48VUZCMDI+IjtJR05PUkUKKzxVRkIwMz4JIjxVMDA0Nj48VTAwNDY+PFUwMDQ5PiI7IjxOT05FPjxOT05FPjxOT05FPiI7IjxVRkIwMz48VUZCMDM+PFVGQjAzPiI7SUdOT1JFCis8VUZCMDQ+CSI8VTAwNDY+PFUwMDQ2PjxVMDA0Qz4iOyI8Tk9ORT48Tk9ORT48Tk9ORT4iOyI8VUZCMDQ+PFVGQjA0PjxVRkIwND4iO0lHTk9SRQorPFUwMDQ3Pgk8VTAwNDc+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjc+CTxVMDA0Nz47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxRjQ+CTxVMDA0Nz47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRjU+CTxVMDA0Nz47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMTFFPgk8VTAwNDc+OzxCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTFGPgk8VTAwNDc+OzxCUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDExQz4JPFUwMDQ3Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMTFEPgk8VTAwNDc+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUwMUU2Pgk8VTAwNDc+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUU3Pgk8VTAwNDc+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDEyMD4JPFUwMDQ3Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMjE+CTxVMDA0Nz47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMDFFND4JPFUwMDQ3Pjs8U1RST0tFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRTU+CTxVMDA0Nz47PFNUUk9LRT47PFNNQUxMPjtJR05PUkUKKzxVMDEyMj4JPFUwMDQ3Pjs8Q0VESUxMQT47PENBUElUQUw+O0lHTk9SRQorPFUwMTIzPgk8VTAwNDc+OzxDRURJTExBPjs8U01BTEw+O0lHTk9SRQorPFUxRTIwPgk8VTAwNDc+OzxNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUyMT4JPFUwMDQ3Pjs8TUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPGc4PgorPFUwMDQ4Pgk8VTAwNDg+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjg+CTxVMDA0OD47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFMkE+CTxVMDA0OD47PEJSRVZFLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMkI+CTxVMDA0OD47PEJSRVZFLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTI0Pgk8VTAwNDg+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMjU+CTxVMDA0OD47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFMjY+CTxVMDA0OD47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUxRTI3Pgk8VTAwNDg+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFMjI+CTxVMDA0OD47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTIzPgk8VTAwNDg+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFMjQ+CTxVMDA0OD47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTI1Pgk8VTAwNDg+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxMjY+CTxVMDA0OD47PFNUUk9LRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTI3Pgk8VTAwNDg+OzxTVFJPS0U+OzxTTUFMTD47SUdOT1JFCis8VTFFMjg+CTxVMDA0OD47PENFRElMTEE+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUyOT4JPFUwMDQ4Pjs8Q0VESUxMQT47PFNNQUxMPjtJR05PUkUKKzxoOD4KKzxVMDA0OT4JPFUwMDQ5Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDY5Pgk8VTAwNDk+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMENEPgk8VTAwNDk+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMEVEPgk8VTAwNDk+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDBDQz4JPFUwMDQ5Pjs8R1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFQz4JPFUwMDQ5Pjs8R1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMDg+CTxVMDA0OT47PERPVUJMRS1HUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjA5Pgk8VTAwNDk+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMkM+CTxVMDA0OT47PEJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMkQ+CTxVMDA0OT47PEJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjBBPgk8VTAwNDk+OzxJTlZFUlRFRC1CUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjBCPgk8VTAwNDk+OzxJTlZFUlRFRC1CUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDBDRT4JPFUwMDQ5Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMEVFPgk8VTAwNDk+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUwMUNGPgk8VTAwNDk+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUQwPgk8VTAwNDk+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDBDRj4JPFUwMDQ5Pjs8RElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRUY+CTxVMDA0OT47PERJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMUUyRT4JPFUwMDQ5Pjs8RElBRVJFU0lTK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMkY+CTxVMDA0OT47PERJQUVSRVNJUytBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVDOD4JPFUwMDQ5Pjs8SE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUM5Pgk8VTAwNDk+OzxIT09LPjs8U01BTEw+O0lHTk9SRQorPFUwMTI4Pgk8VTAwNDk+OzxUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUwMTI5Pgk8VTAwNDk+OzxUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUUyQz4JPFUwMDQ5Pjs8VElMREUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUyRD4JPFUwMDQ5Pjs8VElMREUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxMzA+CTxVMDA0OT47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUwMTMxPgk8VTAwNDk+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFQ0E+CTxVMDA0OT47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUNCPgk8VTAwNDk+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxMkU+CTxVMDA0OT47PE9HT05FSz47PENBUElUQUw+O0lHTk9SRQorPFUwMTJGPgk8VTAwNDk+OzxPR09ORUs+OzxTTUFMTD47SUdOT1JFCis8VTAxMkE+CTxVMDA0OT47PE1BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTJCPgk8VTAwNDk+OzxNQUNST04+OzxTTUFMTD47SUdOT1JFCis8aTg+Cis8VTAxMzI+CSI8VTAwNDk+PFUwMDRBPiI7IjxVMDEzMj48VTAxMzI+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDEzMz4JIjxVMDA0OT48VTAwNEE+IjsiPFUwMTMyPjxVMDEzMj4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAwNEE+CTxVMDA0QT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2QT4JPFUwMDRBPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDEzND4JPFUwMDRBPjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMTM1Pgk8VTAwNEE+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPGo4PgorPFUwMDRCPgk8VTAwNEI+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNkI+CTxVMDA0Qj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFMzA+CTxVMDA0Qj47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMzE+CTxVMDA0Qj47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMUU4Pgk8VTAwNEI+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUU5Pgk8VTAwNEI+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDE5OD4JPFUwMDRCPjs8SE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUwMTk5Pgk8VTAwNEI+OzxIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRTMyPgk8VTAwNEI+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzMz4JPFUwMDRCPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTM2Pgk8VTAwNEI+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMzc+CTxVMDA0Qj47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFMzQ+CTxVMDA0Qj47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzNT4JPFUwMDRCPjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxrOD4KKzxVMDEzOD4JPFUwMDRCPjs8VTAxMzg+OzxTTUFMTD47SUdOT1JFCis8VTAwNEM+CTxVMDA0Qz47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2Qz4JPFUwMDRDPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDEzOT4JPFUwMDRDPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEzQT4JPFUwMDRDPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAxM0Q+CTxVMDA0Qz47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxM0U+CTxVMDA0Qz47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMTNGPgk8VTAwNEM+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0MD4JPFUwMDRDPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTM2Pgk8VTAwNEM+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzNz4JPFUwMDRDPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTNCPgk8VTAwNEM+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxM0M+CTxVMDA0Qz47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFMzg+CTxVMDA0Qz47PE1BQ1JPTitET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzOT4JPFUwMDRDPjs8TUFDUk9OK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUUzQz4JPFUwMDRDPjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzRD4JPFUwMDRDPjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFM0E+CTxVMDA0Qz47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzQj4JPFUwMDRDPjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxsOD4KKzxVMDE0MT4JPFUwMTQxPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMTQyPgk8VTAxNDE+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMDREPgk8VTAwNEQ+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNkQ+CTxVMDA0RD47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFM0U+CTxVMDA0RD47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFM0Y+CTxVMDA0RD47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTQwPgk8VTAwNEQ+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU0MT4JPFUwMDREPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTQyPgk8VTAwNEQ+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU0Mz4JPFUwMDREPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPG04PgorPFUwMDRFPgk8VTAwNEU+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNkU+CTxVMDA0RT47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxNDc+CTxVMDA0RT47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNDg+CTxVMDA0RT47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMEQxPgk8VTAwNEU+OzxUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUwMEYxPgk8VTAwNEU+OzxUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUU0ND4JPFUwMDRFPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNDU+CTxVMDA0RT47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUU0Nj4JPFUwMDRFPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNDc+CTxVMDA0RT47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDE0NT4JPFUwMDRFPjs8Q0VESUxMQT47PENBUElUQUw+O0lHTk9SRQorPFUwMTQ2Pgk8VTAwNEU+OzxDRURJTExBPjs8U01BTEw+O0lHTk9SRQorPFUxRTRBPgk8VTAwNEU+OzxNQUNST04rQ0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUxRTRCPgk8VTAwNEU+OzxNQUNST04rQ0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMUU0OD4JPFUwMDRFPjs8TElORS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTQ5Pgk8VTAwNEU+OzxMSU5FLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTQ5Pgk8VTAwNEU+OzxQUkVDRURFRC1CWS1BUE9TVFJPUEhFPjs8U01BTEw+O0lHTk9SRQorPG44PgorPFUwMTQzPgk8VTAxNDM+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNDQ+CTxVMDE0Mz47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxNEE+CSI8VTAwNEU+PFUwMDQ3PiI7IjxVMDE0QT48VTAxNEE+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDE0Qj4JIjxVMDA0RT48VTAwNDc+IjsiPFUwMTRBPjxVMDE0QT4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAwNEY+CTxVMDA0Rj47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2Rj4JPFUwMDRGPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDBCQT4JPFUwMDRGPjs8Tk9ORT47PFUwMEJBPjtJR05PUkUKKzxVMDBEMj4JPFUwMDRGPjs8R1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGMj4JPFUwMDRGPjs8R1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMEM+CTxVMDA0Rj47PERPVUJMRS1HUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjBEPgk8VTAwNEY+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxNEU+CTxVMDA0Rj47PEJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNEY+CTxVMDA0Rj47PEJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjBFPgk8VTAwNEY+OzxJTlZFUlRFRC1CUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjBGPgk8VTAwNEY+OzxJTlZFUlRFRC1CUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDBEND4JPFUwMDRGPjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMEY0Pgk8VTAwNEY+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRUQwPgk8VTAwNEY+OzxDSVJDVU1GTEVYK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRDE+CTxVMDA0Rj47PENJUkNVTUZMRVgrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFRDI+CTxVMDA0Rj47PENJUkNVTUZMRVgrR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVEMz4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMUVEND4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRDU+CTxVMDA0Rj47PENJUkNVTUZMRVgrSE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVENj4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUxRUQ3Pgk8VTAwNEY+OzxDSVJDVU1GTEVYK1RJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRUQ4Pgk8VTAwNEY+OzxDSVJDVU1GTEVYK0RPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUQ5Pgk8VTAwNEY+OzxDSVJDVU1GTEVYK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDFEMT4JPFUwMDRGPjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFEMj4JPFUwMDRGPjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAwRDY+CTxVMDA0Rj47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUwMEY2Pgk8VTAwNEY+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTAxNTA+CTxVMDA0Rj47PERPVUJMRS1BQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMTUxPgk8VTAwNEY+OzxET1VCTEUtQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFQ0U+CTxVMDA0Rj47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDRj4JPFUwMDRGPjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMDBENT4JPFUwMDRGPjs8VElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGNT4JPFUwMDRGPjs8VElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFNEM+CTxVMDA0Rj47PFRJTERFK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNEQ+CTxVMDA0Rj47PFRJTERFK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTRFPgk8VTAwNEY+OzxUSUxERStESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU0Rj4JPFUwMDRGPjs8VElMREUrRElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUxRUNDPgk8VTAwNEY+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDRD4JPFUwMDRGPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMEQ4Pgk8VTAwNEY+OzxTVFJPS0U+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGOD4JPFUwMDRGPjs8U1RST0tFPjs8U01BTEw+O0lHTk9SRQorPFUwMUZFPgk8VTAwNEY+OzxTVFJPS0UrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFGRj4JPFUwMDRGPjs8U1RST0tFK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMUVBPgk8VTAwNEY+OzxPR09ORUs+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFFQj4JPFUwMDRGPjs8T0dPTkVLPjs8U01BTEw+O0lHTk9SRQorPFUwMUVDPgk8VTAwNEY+OzxPR09ORUsrTUFDUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRUQ+CTxVMDA0Rj47PE9HT05FSytNQUNST04+OzxTTUFMTD47SUdOT1JFCis8VTAxNEM+CTxVMDA0Rj47PE1BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTREPgk8VTAwNEY+OzxNQUNST04+OzxTTUFMTD47SUdOT1JFCis8VTFFNTI+CTxVMDA0Rj47PE1BQ1JPTitBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTUzPgk8VTAwNEY+OzxNQUNST04rQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFNTA+CTxVMDA0Rj47PE1BQ1JPTitHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRTUxPgk8VTAwNEY+OzxNQUNST04rR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxQTA+CTxVMDA0Rj47PEhPUk4+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFBMT4JPFUwMDRGPjs8SE9STj47PFNNQUxMPjtJR05PUkUKKzxVMUVEQT4JPFUwMDRGPjs8SE9STitBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRURCPgk8VTAwNEY+OzxIT1JOK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRURDPgk8VTAwNEY+OzxIT1JOK0dSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFREQ+CTxVMDA0Rj47PEhPUk4rR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFREU+CTxVMDA0Rj47PEhPUk4rSE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRURGPgk8VTAwNEY+OzxIT1JOK0hPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFRTA+CTxVMDA0Rj47PEhPUk4rVElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFMT4JPFUwMDRGPjs8SE9STitUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUVFMj4JPFUwMDRGPjs8SE9STitET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFMz4JPFUwMDRGPjs8SE9STitET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8bzg+Cis8VTAwRDM+CTxVMDBEMz47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGMz4JPFUwMEQzPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDE1Mj4JIjxVMDA0Rj48VTAwNDU+IjsiPFUwMTUyPjxVMDE1Mj4iOyI8Q0FQSVRBTD48Q0FQSVRBTD4iO0lHTk9SRQorPFUwMTUzPgkiPFUwMDRGPjxVMDA0NT4iOyI8VTAxNTI+PFUwMTUyPiI7IjxTTUFMTD48U01BTEw+IjtJR05PUkUKKzxVMDA1MD4JPFUwMDUwPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDcwPgk8VTAwNTA+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUxRTU0Pgk8VTAwNTA+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTU1Pgk8VTAwNTA+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUU1Nj4JPFUwMDUwPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNTc+CTxVMDA1MD47PERPVD47PFNNQUxMPjtJR05PUkUKKzxwOD4KKzxVMDA1MT4JPFUwMDUxPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDcxPgk8VTAwNTE+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPHE4PgorPFUwMDUyPgk8VTAwNTI+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzI+CTxVMDA1Mj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxNTQ+CTxVMDA1Mj47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNTU+CTxVMDA1Mj47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMjEwPgk8VTAwNTI+OzxET1VCTEUtR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIxMT4JPFUwMDUyPjs8RE9VQkxFLUdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjEyPgk8VTAwNTI+OzxJTlZFUlRFRC1CUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjEzPgk8VTAwNTI+OzxJTlZFUlRFRC1CUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDE1OD4JPFUwMDUyPjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE1OT4JPFUwMDUyPjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTFFNTg+CTxVMDA1Mj47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTU5Pgk8VTAwNTI+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFNUE+CTxVMDA1Mj47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTVCPgk8VTAwNTI+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxNTY+CTxVMDA1Mj47PENFRElMTEE+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE1Nz4JPFUwMDUyPjs8Q0VESUxMQT47PFNNQUxMPjtJR05PUkUKKzxVMUU1Qz4JPFUwMDUyPjs8TUFDUk9OK0RPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTVEPgk8VTAwNTI+OzxNQUNST04rRE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUxRTVFPgk8VTAwNTI+OzxMSU5FLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNUY+CTxVMDA1Mj47PExJTkUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8cjg+Cis8VTAwNTM+CTxVMDA1Mz47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3Mz4JPFUwMDUzPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVRkIwNj4JIjxVMDA1Mz48VTAwNTQ+IjsiPE5PTkU+PE5PTkU+IjsiPFVGQjA2PjxVRkIwNj4iO0lHTk9SRQorPFUxRTY0Pgk8VTAwNTM+OzxBQ1VURStET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2NT4JPFUwMDUzPjs8QUNVVEUrRE9UPjs8U01BTEw+O0lHTk9SRQorPFUwMTVDPgk8VTAwNTM+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNUQ+CTxVMDA1Mz47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTAxNjA+CTxVMDA1Mz47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNjE+CTxVMDA1Mz47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRTY2Pgk8VTAwNTM+OzxDQVJPTitET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2Nz4JPFUwMDUzPjs8Q0FST04rRE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTYwPgk8VTAwNTM+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2MT4JPFUwMDUzPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTYyPgk8VTAwNTM+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2Mz4JPFUwMDUzPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUxRTY4Pgk8VTAwNTM+OzxET1QrRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNjk+CTxVMDA1Mz47PERPVCtET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxNUU+CTxVMDA1Mz47PENFRElMTEE+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE1Rj4JPFUwMDUzPjs8Q0VESUxMQT47PFNNQUxMPjtJR05PUkUKKzxzOD4KKzxVMDE1QT4JPFUwMTVBPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMTVCPgk8VTAxNUE+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTdGPgk8VTAwNTM+OzxVMDE3Rj47PFNNQUxMPjtJR05PUkUKKzxVMDBERj4JIjxVMDA1Mz48VTAwNTM+IjsiPE5PTkU+PE5PTkU+IjsiPFNNQUxMPjxVMDBERj4iO0lHTk9SRQorPFVGQjA1PgkiPFUwMDUzPjxVMDA1ND4iOyI8Tk9ORT48Tk9ORT4iOyI8VUZCMDU+PFVGQjA1PiI7SUdOT1JFCis8VTAwNTQ+CTxVMDA1ND47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3ND4JPFUwMDU0Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDE2ND4JPFUwMDU0Pjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE2NT4JPFUwMDU0Pjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTFFNkE+CTxVMDA1ND47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTZCPgk8VTAwNTQ+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFNkM+CTxVMDA1ND47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTZEPgk8VTAwNTQ+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxNjY+CTxVMDA1ND47PFNUUk9LRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTY3Pgk8VTAwNTQ+OzxTVFJPS0U+OzxTTUFMTD47SUdOT1JFCis8VTAxNjI+CTxVMDA1ND47PENFRElMTEE+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE2Mz4JPFUwMDU0Pjs8Q0VESUxMQT47PFNNQUxMPjtJR05PUkUKKzxVMUU3MD4JPFUwMDU0Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU3MT4JPFUwMDU0Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFNkU+CTxVMDA1ND47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2Rj4JPFUwMDU0Pjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzx0OD4KKzxVMDBERT4JIjxVMDA1ND48VTAwNDg+IjsiPFUwMERFPjxVMDBERT4iOyI8Q0FQSVRBTD48Q0FQSVRBTD4iO0lHTk9SRQorPFUwMEZFPgkiPFUwMDU0PjxVMDA0OD4iOyI8VTAwREU+PFUwMERFPiI7IjxTTUFMTD48U01BTEw+IjtJR05PUkUKKzxVMDA1NT4JPFUwMDU1Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDc1Pgk8VTAwNTU+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMERBPgk8VTAwNTU+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMEZBPgk8VTAwNTU+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDBEOT4JPFUwMDU1Pjs8R1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGOT4JPFUwMDU1Pjs8R1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMTQ+CTxVMDA1NT47PERPVUJMRS1HUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjE1Pgk8VTAwNTU+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxNkM+CTxVMDA1NT47PEJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNkQ+CTxVMDA1NT47PEJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjE2Pgk8VTAwNTU+OzxJTlZFUlRFRC1CUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjE3Pgk8VTAwNTU+OzxJTlZFUlRFRC1CUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDBEQj4JPFUwMDU1Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMEZCPgk8VTAwNTU+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUwMUQzPgk8VTAwNTU+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUQ0Pgk8VTAwNTU+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDE2RT4JPFUwMDU1Pjs8UklORz47PENBUElUQUw+O0lHTk9SRQorPFUwMTZGPgk8VTAwNTU+OzxSSU5HPjs8U01BTEw+O0lHTk9SRQorPFUwMERDPgk8VTAwNTU+OzxESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGQz4JPFUwMDU1Pjs8RElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUwMUQ1Pgk8VTAwNTU+OzxESUFFUkVTSVMrTUFDUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRDY+CTxVMDA1NT47PERJQUVSRVNJUytNQUNST04+OzxTTUFMTD47SUdOT1JFCis8VTAxRDc+CTxVMDA1NT47PERJQUVSRVNJUytBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMUQ4Pgk8VTAwNTU+OzxESUFFUkVTSVMrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAxREI+CTxVMDA1NT47PERJQUVSRVNJUytHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMURDPgk8VTAwNTU+OzxESUFFUkVTSVMrR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxRDk+CTxVMDA1NT47PERJQUVSRVNJUytDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMURBPgk8VTAwNTU+OzxESUFFUkVTSVMrQ0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAxNzA+CTxVMDA1NT47PERPVUJMRS1BQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMTcxPgk8VTAwNTU+OzxET1VCTEUtQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFRTY+CTxVMDA1NT47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFNz4JPFUwMDU1Pjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMDE2OD4JPFUwMDU1Pjs8VElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE2OT4JPFUwMDU1Pjs8VElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFNzg+CTxVMDA1NT47PFRJTERFK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNzk+CTxVMDA1NT47PFRJTERFK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTc0Pgk8VTAwNTU+OzxUSUxERS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTc1Pgk8VTAwNTU+OzxUSUxERS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUVFND4JPFUwMDU1Pjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRTU+CTxVMDA1NT47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDE3Mj4JPFUwMDU1Pjs8T0dPTkVLPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNzM+CTxVMDA1NT47PE9HT05FSz47PFNNQUxMPjtJR05PUkUKKzxVMDE2QT4JPFUwMDU1Pjs8TUFDUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNkI+CTxVMDA1NT47PE1BQ1JPTj47PFNNQUxMPjtJR05PUkUKKzxVMUU3QT4JPFUwMDU1Pjs8TUFDUk9OK0RJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUxRTdCPgk8VTAwNTU+OzxNQUNST04rRElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUxRTcyPgk8VTAwNTU+OzxNQUNST04rRElBRVJFU0lTLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNzM+CTxVMDA1NT47PE1BQ1JPTitESUFFUkVTSVMtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTFFNzY+CTxVMDA1NT47PE1BQ1JPTitDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNzc+CTxVMDA1NT47PE1BQ1JPTitDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUwMUFGPgk8VTAwNTU+OzxIT1JOPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxQjA+CTxVMDA1NT47PEhPUk4+OzxTTUFMTD47SUdOT1JFCis8VTFFRTg+CTxVMDA1NT47PEhPUk4rQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFOT4JPFUwMDU1Pjs8SE9STitBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVFQT4JPFUwMDU1Pjs8SE9STitHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRUVCPgk8VTAwNTU+OzxIT1JOK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRUVDPgk8VTAwNTU+OzxIT1JOK0hPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFRD4JPFUwMDU1Pjs8SE9STitIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRUVFPgk8VTAwNTU+OzxIT1JOK1RJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRUY+CTxVMDA1NT47PEhPUk4rVElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFRjA+CTxVMDA1NT47PEhPUk4rRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRjE+CTxVMDA1NT47PEhPUk4rRE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPHU4PgorPFUwMDU2Pgk8VTAwNTY+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzY+CTxVMDA1Nj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFN0M+CTxVMDA1Nj47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFN0Q+CTxVMDA1Nj47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRTdFPgk8VTAwNTY+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU3Rj4JPFUwMDU2Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPHY4PgorPFUwMDU3Pgk8VTAwNTc+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzc+CTxVMDA1Nz47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFODI+CTxVMDA1Nz47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFODM+CTxVMDA1Nz47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTgwPgk8VTAwNTc+OzxHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRTgxPgk8VTAwNTc+OzxHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDE3ND4JPFUwMDU3Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMTc1Pgk8VTAwNTc+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRTg0Pgk8VTAwNTc+OzxESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU4NT4JPFUwMDU3Pjs8RElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUxRTg2Pgk8VTAwNTc+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU4Nz4JPFUwMDU3Pjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTg4Pgk8VTAwNTc+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU4OT4JPFUwMDU3Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPHc4PgorPFUwMDU4Pgk8VTAwNTg+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzg+CTxVMDA1OD47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFOEM+CTxVMDA1OD47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUxRThEPgk8VTAwNTg+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFOEE+CTxVMDA1OD47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRThCPgk8VTAwNTg+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8eDg+Cis8VTAwNTk+CTxVMDA1OT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3OT4JPFUwMDU5Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDBERD4JPFUwMDU5Pjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGRD4JPFUwMDU5Pjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFRjI+CTxVMDA1OT47PEdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRjM+CTxVMDA1OT47PEdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTc2Pgk8VTAwNTk+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNzc+CTxVMDA1OT47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTAxNzg+CTxVMDA1OT47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUwMEZGPgk8VTAwNTk+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFRjY+CTxVMDA1OT47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVGNz4JPFUwMDU5Pjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVGOD4JPFUwMDU5Pjs8VElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVGOT4JPFUwMDU5Pjs8VElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFOEU+CTxVMDA1OT47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRThGPgk8VTAwNTk+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFRjQ+CTxVMDA1OT47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUY1Pgk8VTAwNTk+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8eTg+Cis8VTAwNUE+CTxVMDA1QT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3QT4JPFUwMDVBPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMUU5MD4JPFUwMDVBPjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUxRTkxPgk8VTAwNUE+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUwMTdEPgk8VTAwNUE+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTdFPgk8VTAwNUE+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMUU5Mj4JPFUwMDVBPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFOTM+CTxVMDA1QT47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDFCNT4JPFUwMDVBPjs8U1RST0tFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxQjY+CTxVMDA1QT47PFNUUk9LRT47PFNNQUxMPjtJR05PUkUKKzxVMUU5ND4JPFUwMDVBPjs8TElORS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTk1Pgk8VTAwNUE+OzxMSU5FLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPHo4PgorPFUwMTc5Pgk8VTAxNzk+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxN0E+CTxVMDE3OT47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxN0I+CTxVMDE3Qj47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE3Qz4JPFUwMTdCPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDM5MT4JPFUwMzkxPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDM4Nj4JPFUwMzkxPjs8Q0FQSVRBTD47PFRPTk9TPjtJR05PUkUKKzxVMDNCMT4JPFUwMzkxPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQUM+CTxVMDM5MT47PFNNQUxMPjs8VE9OT1M+O0lHTk9SRQorPFUwMzkyPgk8VTAzOTI+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0IyPgk8VTAzOTI+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDM5Mz4JPFUwMzkzPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCMz4JPFUwMzkzPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOTQ+CTxVMDM5ND47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQjQ+CTxVMDM5ND47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzk1Pgk8VTAzOTU+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzg4Pgk8VTAzOTU+OzxDQVBJVEFMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0I1Pgk8VTAzOTU+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBRD4JPFUwMzk1Pjs8U01BTEw+OzxUT05PUz47SUdOT1JFCis8VTAzOTY+CTxVMDM5Nj47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQjY+CTxVMDM5Nj47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzk3Pgk8VTAzOTc+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzg5Pgk8VTAzOTc+OzxDQVBJVEFMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0I3Pgk8VTAzOTc+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBRT4JPFUwMzk3Pjs8U01BTEw+OzxUT05PUz47SUdOT1JFCis8VTAzOTg+CTxVMDM5OD47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQjg+CTxVMDM5OD47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzk5Pgk8VTAzOTk+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzhBPgk8VTAzOTk+OzxDQVBJVEFMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0FBPgk8VTAzOTk+OzxDQVBJVEFMPjs8RElBTFlUSUNBPjtJR05PUkUKKzxVMDNCOT4JPFUwMzk5Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQUY+CTxVMDM5OT47PFNNQUxMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0NBPgk8VTAzOTk+OzxTTUFMTD47PERJQUxZVElDQT47SUdOT1JFCis8VTAzOTA+CTxVMDM5OT47PFNNQUxMPjs8RElBTFlUSUNBK1RPTk9TPjtJR05PUkUKKzxVMDM5QT4JPFUwMzlBPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCQT4JPFUwMzlBPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOUI+CTxVMDM5Qj47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQkI+CTxVMDM5Qj47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzlDPgk8VTAzOUM+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0JDPgk8VTAzOUM+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDM5RD4JPFUwMzlEPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCRD4JPFUwMzlEPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOUU+CTxVMDM5RT47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQkU+CTxVMDM5RT47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzlGPgk8VTAzOUY+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzhDPgk8VTAzOUY+OzxDQVBJVEFMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0JGPgk8VTAzOUY+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDQz4JPFUwMzlGPjs8U01BTEw+OzxUT05PUz47SUdOT1JFCis8VTAzQTA+CTxVMDNBMD47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzA+CTxVMDNBMD47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0ExPgk8VTAzQTE+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0MxPgk8VTAzQTE+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBMz4JPFUwM0EzPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDMz4JPFUwM0EzPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzI+CTxVMDNBMz47PFNNQUxMPjs8VTAzQzI+O0lHTk9SRQorPFUwM0E0Pgk8VTAzQTQ+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0M0Pgk8VTAzQTQ+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBNT4JPFUwM0E1Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDM4RT4JPFUwM0E1Pjs8Q0FQSVRBTD47PFRPTk9TPjtJR05PUkUKKzxVMDNBQj4JPFUwM0E1Pjs8Q0FQSVRBTD47PERJQUxZVElDQT47SUdOT1JFCis8VTAzQzU+CTxVMDNBNT47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0NEPgk8VTAzQTU+OzxTTUFMTD47PFRPTk9TPjtJR05PUkUKKzxVMDNDQj4JPFUwM0E1Pjs8U01BTEw+OzxESUFMWVRJQ0E+O0lHTk9SRQorPFUwM0IwPgk8VTAzQTU+OzxTTUFMTD47PERJQUxZVElDQStUT05PUz47SUdOT1JFCis8VTAzQTY+CTxVMDNBNj47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzY+CTxVMDNBNj47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0E3Pgk8VTAzQTc+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0M3Pgk8VTAzQTc+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBOD4JPFUwM0E4Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDOD4JPFUwM0E4Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQTk+CTxVMDNBOT47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzOEY+CTxVMDNBOT47PENBUElUQUw+OzxUT05PUz47SUdOT1JFCis8VTAzQzk+CTxVMDNBOT47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0NFPgk8VTAzQTk+OzxTTUFMTD47PFRPTk9TPjtJR05PUkUKKzxVMDQxMD4JPFUwNDEwPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzMD4JPFUwNDEwPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTE+CTxVMDQxMT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0MzE+CTxVMDQxMT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDEyPgk8VTA0MTI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDMyPgk8VTA0MTI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxMz4JPFUwNDEzPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzMz4JPFUwNDEzPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MDM+CTxVMDQwMz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NTM+CTxVMDQwMz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDkwPgk8VTA0OTA+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDkxPgk8VTA0OTA+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxND4JPFUwNDE0Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzND4JPFUwNDE0Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MDI+CTxVMDQwMj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NTI+CTxVMDQwMj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDE1Pgk8VTA0MTU+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDM1Pgk8VTA0MTU+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwMT4JPFUwNDAxPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1MT4JPFUwNDAxPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MDQ+CTxVMDQwND47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NTQ+CTxVMDQwND47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDE2Pgk8VTA0MTY+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDM2Pgk8VTA0MTY+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxNz4JPFUwNDE3Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzNz4JPFUwNDE3Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTg+CTxVMDQxOD47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0Mzg+CTxVMDQxOD47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDA2Pgk8VTA0MDY+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDU2Pgk8VTA0MDY+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwNz4JPFUwNDA3Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1Nz4JPFUwNDA3Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MDg+CTxVMDQwOD47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NTg+CTxVMDQwOD47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDE5Pgk8VTA0MTk+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDM5Pgk8VTA0MTk+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxQT4JPFUwNDFBPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzQT4JPFUwNDFBPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MEM+CTxVMDQwQz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NUM+CTxVMDQwQz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDFCPgk8VTA0MUI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDNCPgk8VTA0MUI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwOT4JPFUwNDA5Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1OT4JPFUwNDA5Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MUM+CTxVMDQxQz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0M0M+CTxVMDQxQz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDFEPgk8VTA0MUQ+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDNEPgk8VTA0MUQ+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwQT4JPFUwNDBBPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1QT4JPFUwNDBBPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MUU+CTxVMDQxRT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0M0U+CTxVMDQxRT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDFGPgk8VTA0MUY+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDNGPgk8VTA0MUY+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyMD4JPFUwNDIwPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0MD4JPFUwNDIwPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MjE+CTxVMDQyMT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDE+CTxVMDQyMT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDIyPgk8VTA0MjI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDQyPgk8VTA0MjI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwQj4JPFUwNDBCPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1Qj4JPFUwNDBCPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MjM+CTxVMDQyMz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDM+CTxVMDQyMz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDBFPgk8VTA0MEU+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDVFPgk8VTA0MEU+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyND4JPFUwNDI0Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0ND4JPFUwNDI0Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MjU+CTxVMDQyNT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDU+CTxVMDQyNT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDI2Pgk8VTA0MjY+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDQ2Pgk8VTA0MjY+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwNT4JPFUwNDA1Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1NT4JPFUwNDA1Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0Mjc+CTxVMDQyNz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDc+CTxVMDQyNz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDBGPgk8VTA0MEY+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDVGPgk8VTA0MEY+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyOD4JPFUwNDI4Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0OD4JPFUwNDI4Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0Mjk+CTxVMDQyOT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDk+CTxVMDQyOT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDRBPgk8VTA0NEE+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyQT4JPFUwNDRBPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQyQj4JPFUwNDJCPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0Qj4JPFUwNDJCPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0NEM+CTxVMDQ0Qz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDJDPgk8VTA0NEM+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDJEPgk8VTA0MkQ+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDREPgk8VTA0MkQ+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyRT4JPFUwNDJFPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0RT4JPFUwNDJFPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MkY+CTxVMDQyRj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NEY+CTxVMDQyRj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDYyPgk8VTA0NjI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDYzPgk8VTA0NjI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQ2QT4JPFUwNDZBPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ2Qj4JPFUwNDZBPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0NzI+CTxVMDQ3Mj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NzM+CTxVMDQ3Mj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDc0Pgk8VTA0NzQ+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDc1Pgk8VTA0NzQ+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQ4MD4JPFUwNDgwPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ4MT4JPFUwNDgwPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA1RDA+CTxVMDVEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEMT4JPFUwNUQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQyPgk8VTA1RDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDM+CTxVMDVEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEND4JPFUwNUQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQ1Pgk8VTA1RDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDY+CTxVMDVENj47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVENz4JPFUwNUQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQ4Pgk8VTA1RDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDk+CTxVMDVEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEQT4JPFUwNURBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNURCPgk8VTA1REI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1REM+CTxVMDVEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVERD4JPFUwNUREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNURFPgk8VTA1REU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1REY+CTxVMDVERj47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFMD4JPFUwNUUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUUxPgk8VTA1RTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTI+CTxVMDVFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFMz4JPFUwNUUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUU0Pgk8VTA1RTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTU+CTxVMDVFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFNj4JPFUwNUU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUU3Pgk8VTA1RTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTg+CTxVMDVFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFOT4JPFUwNUU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUVBPgk8VTA1RUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCisKKyUgQXJhYmljIGNvbGxhdGluZworCis8VTA2MEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDYwQz4KKzxVMDYxQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNjFCPgorPFUwNjFGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA2MUY+Cis8VTA2NDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDY0MD4KKworPFUwNjIxPgk8VTA2MjE+OzxVMDYyMT47SUdOT1JFO0lHTk9SRQorPFUwNjIyPgk8VTA2MjI+OzxVMDYyMj47SUdOT1JFO0lHTk9SRQorPFVGRTgyPgk8VTA2MjI+OzxVRkU4Mj47SUdOT1JFO0lHTk9SRQorPFUwNjIzPgk8VTA2MjE+OzxVMDYyMz47SUdOT1JFO0lHTk9SRQorPFVGRTg0Pgk8VTA2MjE+OzxVRkU4ND47SUdOT1JFO0lHTk9SRQorPFUwNjI0Pgk8VTA2MjE+OzxVMDYyND47SUdOT1JFO0lHTk9SRQorPFUwNjI1Pgk8VTA2MjE+OzxVMDYyNT47SUdOT1JFO0lHTk9SRQorPFVGRTg4Pgk8VTA2MjE+OzxVRkU4OD47SUdOT1JFO0lHTk9SRQorPFUwNjI2Pgk8VTA2MjE+OzxVMDYyNj47SUdOT1JFO0lHTk9SRQorPFUwNjcwPgk8VTA2NzA+OzxVMDY3MD47SUdOT1JFO0lHTk9SRQorPFUwNjI3Pgk8VTA2Mjc+OzxVMDYyNz47SUdOT1JFO0lHTk9SRQorPFVGRThEPgk8VTA2Mjc+OzxVRkU4RD47SUdOT1JFO0lHTk9SRQorPFVGRThFPgk8VTA2Mjc+OzxVRkU4RT47SUdOT1JFO0lHTk9SRQorPFVFMDE2Pgk8VTA2Mjc+OzxVRTAxNj47SUdOT1JFO0lHTk9SRQorPFUwNjI4Pgk8VTA2Mjg+OzxVMDYyOD47SUdOT1JFO0lHTk9SRQorPFVGRThGPgk8VTA2Mjg+OzxVRkU4Rj47SUdOT1JFO0lHTk9SRQorPFVGRTkwPgk8VTA2Mjg+OzxVRkU5MD47SUdOT1JFO0lHTk9SRQorPFVGRTkxPgk8VTA2Mjg+OzxVRkU5MT47SUdOT1JFO0lHTk9SRQorPFVGRTkyPgk8VTA2Mjg+OzxVRkU5Mj47SUdOT1JFO0lHTk9SRQorPFUwNjdFPgk8VTA2N0U+OzxVMDY3RT47SUdOT1JFO0lHTk9SRQorPFUwNkE0Pgk8VTA2QTQ+OzxVMDZBND47SUdOT1JFO0lHTk9SRQorPFUwNjI5Pgk8VTA2Mjk+OzxVMDYyOT47SUdOT1JFO0lHTk9SRQorPFVGRTkzPgk8VTA2Mjk+OzxVRkU5Mz47SUdOT1JFO0lHTk9SRQorPFVGRTk0Pgk8VTA2Mjk+OzxVRkU5ND47SUdOT1JFO0lHTk9SRQorPFUwNjJBPgk8VTA2Mjk+OzxVMDYyQT47SUdOT1JFO0lHTk9SRQorPFVGRTk1Pgk8VTA2Mjk+OzxVRkU5NT47SUdOT1JFO0lHTk9SRQorPFVGRTk2Pgk8VTA2Mjk+OzxVRkU5Nj47SUdOT1JFO0lHTk9SRQorPFVGRTk3Pgk8VTA2Mjk+OzxVRkU5Nz47SUdOT1JFO0lHTk9SRQorPFVGRTk4Pgk8VTA2Mjk+OzxVRkU5OD47SUdOT1JFO0lHTk9SRQorPFUwNjJCPgk8VTA2MkI+OzxVMDYyQj47SUdOT1JFO0lHTk9SRQorPFVGRTk5Pgk8VTA2MkI+OzxVRkU5OT47SUdOT1JFO0lHTk9SRQorPFVGRTlBPgk8VTA2MkI+OzxVRkU5QT47SUdOT1JFO0lHTk9SRQorPFVGRTlCPgk8VTA2MkI+OzxVRkU5Qj47SUdOT1JFO0lHTk9SRQorPFVGRTlDPgk8VTA2MkI+OzxVRkU5Qz47SUdOT1JFO0lHTk9SRQorPFUwNjJDPgk8VTA2MkM+OzxVMDYyQz47SUdOT1JFO0lHTk9SRQorPFVGRTlEPgk8VTA2MkM+OzxVRkU5RD47SUdOT1JFO0lHTk9SRQorPFVGRTlFPgk8VTA2MkM+OzxVRkU5RT47SUdOT1JFO0lHTk9SRQorPFVGRTlGPgk8VTA2MkM+OzxVRkU5Rj47SUdOT1JFO0lHTk9SRQorPFVGRUEwPgk8VTA2MkM+OzxVRkVBMD47SUdOT1JFO0lHTk9SRQorPFUwNjJEPgk8VTA2MkQ+OzxVMDYyRD47SUdOT1JFO0lHTk9SRQorPFVGRUExPgk8VTA2MkQ+OzxVRkVBMT47SUdOT1JFO0lHTk9SRQorPFVGRUEyPgk8VTA2MkQ+OzxVRkVBMj47SUdOT1JFO0lHTk9SRQorPFVGRUEzPgk8VTA2MkQ+OzxVRkVBMz47SUdOT1JFO0lHTk9SRQorPFVGRUE0Pgk8VTA2MkQ+OzxVRkVBND47SUdOT1JFO0lHTk9SRQorPFUwNjJFPgk8VTA2MkU+OzxVMDYyRT47SUdOT1JFO0lHTk9SRQorPFVGRUE1Pgk8VTA2MkU+OzxVRkVBNT47SUdOT1JFO0lHTk9SRQorPFVGRUE2Pgk8VTA2MkU+OzxVRkVBNj47SUdOT1JFO0lHTk9SRQorPFVGRUE3Pgk8VTA2MkU+OzxVRkVBNz47SUdOT1JFO0lHTk9SRQorPFVGRUE4Pgk8VTA2MkU+OzxVRkVBOD47SUdOT1JFO0lHTk9SRQorPFUwNjJGPgk8VTA2MkY+OzxVMDYyRj47SUdOT1JFO0lHTk9SRQorPFVGRUE5Pgk8VTA2MkY+OzxVRkVBOT47SUdOT1JFO0lHTk9SRQorPFVGRUFBPgk8VTA2MkY+OzxVRkVBQT47SUdOT1JFO0lHTk9SRQorPFUwNjMwPgk8VTA2MzA+OzxVMDYzMD47SUdOT1JFO0lHTk9SRQorPFVGRUFCPgk8VTA2MzA+OzxVRkVBQj47SUdOT1JFO0lHTk9SRQorPFVGRUFDPgk8VTA2MzA+OzxVRkVBQz47SUdOT1JFO0lHTk9SRQorPFUwNjMxPgk8VTA2MzE+OzxVMDYzMT47SUdOT1JFO0lHTk9SRQorPFVGRUFEPgk8VTA2MzE+OzxVRkVBRD47SUdOT1JFO0lHTk9SRQorPFVGRUFFPgk8VTA2MzE+OzxVRkVBRT47SUdOT1JFO0lHTk9SRQorPFUwNjMyPgk8VTA2MzI+OzxVMDYzMj47SUdOT1JFO0lHTk9SRQorPFVGRUFGPgk8VTA2MzI+OzxVRkVBRj47SUdOT1JFO0lHTk9SRQorPFVGRUIwPgk8VTA2MzI+OzxVRkVCMD47SUdOT1JFO0lHTk9SRQorPFUwNjMzPgk8VTA2MzM+OzxVMDYzMz47SUdOT1JFO0lHTk9SRQorPFVGRUIxPgk8VTA2MzM+OzxVRkVCMT47SUdOT1JFO0lHTk9SRQorPFVGRUIyPgk8VTA2MzM+OzxVRkVCMj47SUdOT1JFO0lHTk9SRQorPFVGRUIzPgk8VTA2MzM+OzxVRkVCMz47SUdOT1JFO0lHTk9SRQorPFVGRUI0Pgk8VTA2MzM+OzxVRkVCND47SUdOT1JFO0lHTk9SRQorPFUwNjM0Pgk8VTA2MzQ+OzxVMDYzND47SUdOT1JFO0lHTk9SRQorPFVGRUI1Pgk8VTA2MzQ+OzxVRkVCNT47SUdOT1JFO0lHTk9SRQorPFVGRUI2Pgk8VTA2MzQ+OzxVRkVCNj47SUdOT1JFO0lHTk9SRQorPFVGRUI3Pgk8VTA2MzQ+OzxVRkVCNz47SUdOT1JFO0lHTk9SRQorPFVGRUI4Pgk8VTA2MzQ+OzxVRkVCOD47SUdOT1JFO0lHTk9SRQorPFUwNjM1Pgk8VTA2MzU+OzxVMDYzNT47SUdOT1JFO0lHTk9SRQorPFVGRUI5Pgk8VTA2MzU+OzxVRkVCOT47SUdOT1JFO0lHTk9SRQorPFVGRUJBPgk8VTA2MzU+OzxVRkVCQT47SUdOT1JFO0lHTk9SRQorPFVGRUJCPgk8VTA2MzU+OzxVRkVCQj47SUdOT1JFO0lHTk9SRQorPFVGRUJDPgk8VTA2MzU+OzxVRkVCQz47SUdOT1JFO0lHTk9SRQorPFUwNjM2Pgk8VTA2MzY+OzxVMDYzNj47SUdOT1JFO0lHTk9SRQorPFVGRUJEPgk8VTA2MzY+OzxVRkVCRD47SUdOT1JFO0lHTk9SRQorPFVGRUJFPgk8VTA2MzY+OzxVRkVCRT47SUdOT1JFO0lHTk9SRQorPFVGRUJGPgk8VTA2MzY+OzxVRkVCRj47SUdOT1JFO0lHTk9SRQorPFVGRUMwPgk8VTA2MzY+OzxVRkVDMD47SUdOT1JFO0lHTk9SRQorPFUwNjM3Pgk8VTA2Mzc+OzxVMDYzNz47SUdOT1JFO0lHTk9SRQorPFVGRUMxPgk8VTA2Mzc+OzxVRkVDMT47SUdOT1JFO0lHTk9SRQorPFVGRUMyPgk8VTA2Mzc+OzxVRkVDMj47SUdOT1JFO0lHTk9SRQorPFVGRUMzPgk8VTA2Mzc+OzxVRkVDMz47SUdOT1JFO0lHTk9SRQorPFVGRUM0Pgk8VTA2Mzc+OzxVRkVDND47SUdOT1JFO0lHTk9SRQorPFUwNjM4Pgk8VTA2Mzg+OzxVMDYzOD47SUdOT1JFO0lHTk9SRQorPFVGRUM1Pgk8VTA2Mzg+OzxVRkVDNT47SUdOT1JFO0lHTk9SRQorPFVGRUM2Pgk8VTA2Mzg+OzxVRkVDNj47SUdOT1JFO0lHTk9SRQorPFVGRUM3Pgk8VTA2Mzg+OzxVRkVDNz47SUdOT1JFO0lHTk9SRQorPFVGRUM4Pgk8VTA2Mzg+OzxVRkVDOD47SUdOT1JFO0lHTk9SRQorPFUwNjM5Pgk8VTA2Mzk+OzxVMDYzOT47SUdOT1JFO0lHTk9SRQorPFVGRUM5Pgk8VTA2Mzk+OzxVRkVDOT47SUdOT1JFO0lHTk9SRQorPFVGRUNBPgk8VTA2Mzk+OzxVRkVDQT47SUdOT1JFO0lHTk9SRQorPFVGRUNCPgk8VTA2Mzk+OzxVRkVDQj47SUdOT1JFO0lHTk9SRQorPFVGRUNDPgk8VTA2Mzk+OzxVRkVDQz47SUdOT1JFO0lHTk9SRQorPFUwNjNBPgk8VTA2M0E+OzxVMDYzQT47SUdOT1JFO0lHTk9SRQorPFVGRUNEPgk8VTA2M0E+OzxVRkVDRD47SUdOT1JFO0lHTk9SRQorPFVGRUNFPgk8VTA2M0E+OzxVRkVDRT47SUdOT1JFO0lHTk9SRQorPFVGRUNGPgk8VTA2M0E+OzxVRkVDRj47SUdOT1JFO0lHTk9SRQorPFVGRUQwPgk8VTA2M0E+OzxVRkVEMD47SUdOT1JFO0lHTk9SRQorPFUwNjQxPgk8VTA2NDE+OzxVMDY0MT47SUdOT1JFO0lHTk9SRQorPFVGRUQxPgk8VTA2NDE+OzxVRkVEMT47SUdOT1JFO0lHTk9SRQorPFVGRUQyPgk8VTA2NDE+OzxVRkVEMj47SUdOT1JFO0lHTk9SRQorPFVGRUQzPgk8VTA2NDE+OzxVRkVEMz47SUdOT1JFO0lHTk9SRQorPFVGRUQ0Pgk8VTA2NDE+OzxVRkVEND47SUdOT1JFO0lHTk9SRQorPFUwNjQyPgk8VTA2NDI+OzxVMDY0Mj47SUdOT1JFO0lHTk9SRQorPFVGRUQ1Pgk8VTA2NDI+OzxVRkVENT47SUdOT1JFO0lHTk9SRQorPFVGRUQ2Pgk8VTA2NDI+OzxVRkVENj47SUdOT1JFO0lHTk9SRQorPFVGRUQ3Pgk8VTA2NDI+OzxVRkVENz47SUdOT1JFO0lHTk9SRQorPFVGRUQ4Pgk8VTA2NDI+OzxVRkVEOD47SUdOT1JFO0lHTk9SRQorPFUwNjQzPgk8VTA2NDM+OzxVMDY0Mz47SUdOT1JFO0lHTk9SRQorPFVGRUQ5Pgk8VTA2NDM+OzxVRkVEOT47SUdOT1JFO0lHTk9SRQorPFVGRURBPgk8VTA2NDM+OzxVRkVEQT47SUdOT1JFO0lHTk9SRQorPFVGRURCPgk8VTA2NDM+OzxVRkVEQj47SUdOT1JFO0lHTk9SRQorPFVGRURDPgk8VTA2NDM+OzxVRkVEQz47SUdOT1JFO0lHTk9SRQorPFUwNjQ0Pgk8VTA2NDQ+OzxVMDY0ND47SUdOT1JFO0lHTk9SRQorPFVGRUREPgk8VTA2NDQ+OzxVRkVERD47SUdOT1JFO0lHTk9SRQorPFVGRURFPgk8VTA2NDQ+OzxVRkVERT47SUdOT1JFO0lHTk9SRQorPFVGRURGPgk8VTA2NDQ+OzxVRkVERj47SUdOT1JFO0lHTk9SRQorPFVGRUUwPgk8VTA2NDQ+OzxVRkVFMD47SUdOT1JFO0lHTk9SRQorPFUwNjQ1Pgk8VTA2NDU+OzxVMDY0NT47SUdOT1JFO0lHTk9SRQorPFVGRUUxPgk8VTA2NDU+OzxVRkVFMT47SUdOT1JFO0lHTk9SRQorPFVGRUUyPgk8VTA2NDU+OzxVRkVFMj47SUdOT1JFO0lHTk9SRQorPFVGRUUzPgk8VTA2NDU+OzxVRkVFMz47SUdOT1JFO0lHTk9SRQorPFVGRUU0Pgk8VTA2NDU+OzxVRkVFND47SUdOT1JFO0lHTk9SRQorPFUwNjQ2Pgk8VTA2NDY+OzxVMDY0Nj47SUdOT1JFO0lHTk9SRQorPFVGRUU1Pgk8VTA2NDY+OzxVRkVFNT47SUdOT1JFO0lHTk9SRQorPFVGRUU2Pgk8VTA2NDY+OzxVRkVFNj47SUdOT1JFO0lHTk9SRQorPFVGRUU3Pgk8VTA2NDY+OzxVRkVFNz47SUdOT1JFO0lHTk9SRQorPFVGRUU4Pgk8VTA2NDY+OzxVRkVFOD47SUdOT1JFO0lHTk9SRQorPFUwNjQ3Pgk8VTA2NDc+OzxVMDY0Nz47SUdOT1JFO0lHTk9SRQorPFVGRUU5Pgk8VTA2NDc+OzxVRkVFOT47SUdOT1JFO0lHTk9SRQorPFVGRUVBPgk8VTA2NDc+OzxVRkVFQT47SUdOT1JFO0lHTk9SRQorPFVGRUVCPgk8VTA2NDc+OzxVRkVFQj47SUdOT1JFO0lHTk9SRQorPFVGRUVDPgk8VTA2NDc+OzxVRkVFQz47SUdOT1JFO0lHTk9SRQorPFUwNjQ4Pgk8VTA2NDg+OzxVMDY0OD47SUdOT1JFO0lHTk9SRQorPFVGRUVEPgk8VTA2NDg+OzxVRkVFRD47SUdOT1JFO0lHTk9SRQorPFVGRUVFPgk8VTA2NDg+OzxVRkVFRT47SUdOT1JFO0lHTk9SRQorPFUwNjQ5Pgk8VTA2NDk+OzxVMDY0OT47SUdOT1JFO0lHTk9SRQorPFVGRUVGPgk8VTA2NDk+OzxVRkVFRj47SUdOT1JFO0lHTk9SRQorPFVGRUYwPgk8VTA2NDk+OzxVRkVGMD47SUdOT1JFO0lHTk9SRQorPFUwNjRBPgk8VTA2NEE+OzxVMDY0QT47SUdOT1JFO0lHTk9SRQorPFVGRUYxPgk8VTA2NEE+OzxVRkVGMT47SUdOT1JFO0lHTk9SRQorPFVGRUYyPgk8VTA2NEE+OzxVRkVGMj47SUdOT1JFO0lHTk9SRQorPFVGRUYzPgk8VTA2NEE+OzxVRkVGMz47SUdOT1JFO0lHTk9SRQorPFVGRUY0Pgk8VTA2NEE+OzxVRkVGND47SUdOT1JFO0lHTk9SRQorCis8VTA2NEI+CUlHTk9SRTtJR05PUkU7PFUwNjRCPjtJR05PUkUKKzxVMDY0Qz4JSUdOT1JFO0lHTk9SRTs8VTA2NEM+O0lHTk9SRQorPFUwNjREPglJR05PUkU7SUdOT1JFOzxVMDY0RD47SUdOT1JFCis8VTA2NEU+CUlHTk9SRTtJR05PUkU7PFUwNjRFPjtJR05PUkUKKzxVMDY0Rj4JSUdOT1JFO0lHTk9SRTs8VTA2NEY+O0lHTk9SRQorPFUwNjUwPglJR05PUkU7SUdOT1JFOzxVMDY1MD47SUdOT1JFCis8VTA2NTE+CUlHTk9SRTtJR05PUkU7PFUwNjUxPjtJR05PUkUKKzxVRkU3RD4JSUdOT1JFO0lHTk9SRTs8VUZFN0Q+O0lHTk9SRQorPFUwNjUyPglJR05PUkU7SUdOT1JFOzxVMDY1Mj47SUdOT1JFCisKKzxVMDY2MD4JPFUwMDMwPjs8VTA2NjA+O0lHTk9SRTtJR05PUkUKKzxVMDY2MT4JPFUwMDMxPjs8VTA2NjE+O0lHTk9SRTtJR05PUkUKKzxVMDY2Mj4JPFUwMDMyPjs8VTA2NjI+O0lHTk9SRTtJR05PUkUKKzxVMDY2Mz4JPFUwMDMzPjs8VTA2NjM+O0lHTk9SRTtJR05PUkUKKzxVMDY2ND4JPFUwMDM0Pjs8VTA2NjQ+O0lHTk9SRTtJR05PUkUKKzxVMDY2NT4JPFUwMDM1Pjs8VTA2NjU+O0lHTk9SRTtJR05PUkUKKzxVMDY2Nj4JPFUwMDM2Pjs8VTA2NjY+O0lHTk9SRTtJR05PUkUKKzxVMDY2Nz4JPFUwMDM3Pjs8VTA2Njc+O0lHTk9SRTtJR05PUkUKKzxVMDY2OD4JPFUwMDM4Pjs8VTA2Njg+O0lHTk9SRTtJR05PUkUKKzxVMDY2OT4JPFUwMDM5Pjs8VTA2Njk+O0lHTk9SRTtJR05PUkUKKworPFVGRUY1PgkiPFUwNjQ0PjxVMDYyMj4iOyI8VTA2NDQ+PFUwNjIyPiI7IjxVRkVGNT48VUZFRjU+IjtJR05PUkUKKzxVRkVGNj4JIjxVMDY0ND48VTA2MjI+IjsiPFUwNjQ0PjxVRkU4Mj4iOyI8VUZFRjY+PFVGRUY2PiI7SUdOT1JFCis8VUZFRjc+CSI8VTA2NDQ+PFUwNjIzPiI7IjxVMDY0ND48VTA2MjM+IjsiPFVGRUY3PjxVRkVGNz4iO0lHTk9SRQorPFVGRUY4PgkiPFUwNjQ0PjxVMDYyMz4iOyI8VTA2NDQ+PFVGRTg0PiI7IjxVRkVGOD48VUZFRjg+IjtJR05PUkUKKzxVRkVGOT4JIjxVMDY0ND48VTA2MjU+IjsiPFUwNjQ0PjxVMDYyNT4iOyI8VUZFRjk+PFVGRUY5PiI7SUdOT1JFCis8VUZFRkE+CSI8VTA2NDQ+PFUwNjI1PiI7IjxVMDY0ND48VUZFODg+IjsiPFVGRUZBPjxVRkVGQT4iO0lHTk9SRQorPFVGRUZCPgkiPFUwNjQ0PjxVMDYyNz4iOyI8VTA2NDQ+PFVGRThEPiI7IjxVRkVGQj48VUZFRkI+IjtJR05PUkUKKzxVRkVGQz4JIjxVMDY0ND48VTA2Mjc+IjsiPFUwNjQ0PjxVRkU4RT4iOyI8VUZFRkM+PFVGRUZDPiI7SUdOT1JFCisKKyUga2F0YWthbmEvaGlyYWdhbmEgc29ydGluZworJSBiYXNlIGlzIGthdGFrYW5hLCBhcyB0aGlzIGlzIHByZXNlbnQgaW4gbW9zdCBjaGFyc2V0cworJSBub3JtYWwgYmVmb3JlIHZvaWNlZCBiZWZvcmUgc2VtaS12b2ljZWQKKyUgc21hbGwgdm9jYWxzIGJlZm9yZSBub3JtYWwgdm9jYWxzCislIGthdGFrYW5hIGJlZm9yZSBoaXJhZ2FuYQorCis8VTMwQTE+CTxVMzBBMT47PFUzMEExPjtJR05PUkU7SUdOT1JFCis8VTMwNDE+CTxVMzBBMT47PFUzMDQxPjtJR05PUkU7SUdOT1JFCis8VTMwQTI+CTxVMzBBMT47PFUzMEEyPjtJR05PUkU7SUdOT1JFCis8VTMwNDI+CTxVMzBBMT47PFUzMDQyPjtJR05PUkU7SUdOT1JFCis8VTMwQTM+CTxVMzBBMz47PFUzMEEzPjtJR05PUkU7SUdOT1JFCis8VTMwNDM+CTxVMzBBMz47PFUzMDQzPjtJR05PUkU7SUdOT1JFCis8VTMwQTQ+CTxVMzBBMz47PFUzMEE0PjtJR05PUkU7SUdOT1JFCis8VTMwNDQ+CTxVMzBBMz47PFUzMDQ0PjtJR05PUkU7SUdOT1JFCis8VTMwQTU+CTxVMzBBNT47PFUzMEE1PjtJR05PUkU7SUdOT1JFCis8VTMwNDU+CTxVMzBBNT47PFUzMDQ1PjtJR05PUkU7SUdOT1JFCis8VTMwQTY+CTxVMzBBNT47PFUzMEE2PjtJR05PUkU7SUdOT1JFCis8VTMwNDY+CTxVMzBBNT47PFUzMDQ2PjtJR05PUkU7SUdOT1JFCis8VTMwRjQ+CTxVMzBBNT47PFUzMEY0PjtJR05PUkU7SUdOT1JFCis8VTMwQTc+CTxVMzBBNz47PFUzMEE3PjtJR05PUkU7SUdOT1JFCis8VTMwNDc+CTxVMzBBNz47PFUzMDQ3PjtJR05PUkU7SUdOT1JFCis8VTMwQTg+CTxVMzBBNz47PFUzMEE4PjtJR05PUkU7SUdOT1JFCis8VTMwNDg+CTxVMzBBNz47PFUzMDQ4PjtJR05PUkU7SUdOT1JFCis8VTMwQTk+CTxVMzBBOT47PFUzMEE5PjtJR05PUkU7SUdOT1JFCis8VTMwNDk+CTxVMzBBOT47PFUzMDQ5PjtJR05PUkU7SUdOT1JFCis8VTMwQUE+CTxVMzBBOT47PFUzMEFBPjtJR05PUkU7SUdOT1JFCis8VTMwNEE+CTxVMzBBOT47PFUzMDRBPjtJR05PUkU7SUdOT1JFCis8VTMwRjU+CTxVMzBGNT47PFUzMEY1PjtJR05PUkU7SUdOT1JFCis8VTMwQUI+CTxVMzBGNT47PFUzMEFCPjtJR05PUkU7SUdOT1JFCis8VTMwNEI+CTxVMzBGNT47PFUzMDRCPjtJR05PUkU7SUdOT1JFCis8VTMwQUM+CTxVMzBGNT47PFUzMEFDPjtJR05PUkU7SUdOT1JFCis8VTMwNEM+CTxVMzBGNT47PFUzMDRDPjtJR05PUkU7SUdOT1JFCis8VTMwQUQ+CTxVMzBBRD47PFUzMEFEPjtJR05PUkU7SUdOT1JFCis8VTMwNEQ+CTxVMzBBRD47PFUzMDREPjtJR05PUkU7SUdOT1JFCis8VTMwQUU+CTxVMzBBRD47PFUzMEFFPjtJR05PUkU7SUdOT1JFCis8VTMwNEU+CTxVMzBBRD47PFUzMDRFPjtJR05PUkU7SUdOT1JFCis8VTMwQUY+CTxVMzBBRj47PFUzMEFGPjtJR05PUkU7SUdOT1JFCis8VTMwNEY+CTxVMzBBRj47PFUzMDRGPjtJR05PUkU7SUdOT1JFCis8VTMwQjA+CTxVMzBBRj47PFUzMEIwPjtJR05PUkU7SUdOT1JFCis8VTMwNTA+CTxVMzBBRj47PFUzMDUwPjtJR05PUkU7SUdOT1JFCis8VTMwRjY+CTxVMzBGNj47PFUzMEY2PjtJR05PUkU7SUdOT1JFCis8VTMwQjE+CTxVMzBGNj47PFUzMEIxPjtJR05PUkU7SUdOT1JFCis8VTMwNTE+CTxVMzBGNj47PFUzMDUxPjtJR05PUkU7SUdOT1JFCis8VTMwQjI+CTxVMzBGNj47PFUzMEIyPjtJR05PUkU7SUdOT1JFCis8VTMwNTI+CTxVMzBGNj47PFUzMDUyPjtJR05PUkU7SUdOT1JFCis8VTMwQjM+CTxVMzBCMz47PFUzMEIzPjtJR05PUkU7SUdOT1JFCis8VTMwNTM+CTxVMzBCMz47PFUzMDUzPjtJR05PUkU7SUdOT1JFCis8VTMwQjQ+CTxVMzBCMz47PFUzMEI0PjtJR05PUkU7SUdOT1JFCis8VTMwNTQ+CTxVMzBCMz47PFUzMDU0PjtJR05PUkU7SUdOT1JFCis8VTMwQjU+CTxVMzBCNT47PFUzMEI1PjtJR05PUkU7SUdOT1JFCis8VTMwNTU+CTxVMzBCNT47PFUzMDU1PjtJR05PUkU7SUdOT1JFCis8VTMwQjY+CTxVMzBCNT47PFUzMEI2PjtJR05PUkU7SUdOT1JFCis8VTMwNTY+CTxVMzBCNT47PFUzMDU2PjtJR05PUkU7SUdOT1JFCis8VTMwQjc+CTxVMzBCNz47PFUzMEI3PjtJR05PUkU7SUdOT1JFCis8VTMwNTc+CTxVMzBCNz47PFUzMDU3PjtJR05PUkU7SUdOT1JFCis8VTMwQjg+CTxVMzBCNz47PFUzMEI4PjtJR05PUkU7SUdOT1JFCis8VTMwNTg+CTxVMzBCNz47PFUzMDU4PjtJR05PUkU7SUdOT1JFCis8VTMwQjk+CTxVMzBCOT47PFUzMEI5PjtJR05PUkU7SUdOT1JFCis8VTMwNTk+CTxVMzBCOT47PFUzMDU5PjtJR05PUkU7SUdOT1JFCis8VTMwQkE+CTxVMzBCOT47PFUzMEJBPjtJR05PUkU7SUdOT1JFCis8VTMwNUE+CTxVMzBCOT47PFUzMDVBPjtJR05PUkU7SUdOT1JFCis8VTMwQkI+CTxVMzBCQj47PFUzMEJCPjtJR05PUkU7SUdOT1JFCis8VTMwNUI+CTxVMzBCQj47PFUzMDVCPjtJR05PUkU7SUdOT1JFCis8VTMwQkM+CTxVMzBCQj47PFUzMEJDPjtJR05PUkU7SUdOT1JFCis8VTMwNUM+CTxVMzBCQj47PFUzMDVDPjtJR05PUkU7SUdOT1JFCis8VTMwQkQ+CTxVMzBCRD47PFUzMEJEPjtJR05PUkU7SUdOT1JFCis8VTMwNUQ+CTxVMzBCRD47PFUzMDVEPjtJR05PUkU7SUdOT1JFCis8VTMwQkU+CTxVMzBCRD47PFUzMEJFPjtJR05PUkU7SUdOT1JFCis8VTMwNUU+CTxVMzBCRD47PFUzMDVFPjtJR05PUkU7SUdOT1JFCis8VTMwQkY+CTxVMzBCRj47PFUzMEJGPjtJR05PUkU7SUdOT1JFCis8VTMwNUY+CTxVMzBCRj47PFUzMDVGPjtJR05PUkU7SUdOT1JFCis8VTMwQzA+CTxVMzBCRj47PFUzMEMwPjtJR05PUkU7SUdOT1JFCis8VTMwNjA+CTxVMzBCRj47PFUzMDYwPjtJR05PUkU7SUdOT1JFCis8VTMwQzE+CTxVMzBDMT47PFUzMEMxPjtJR05PUkU7SUdOT1JFCis8VTMwNjE+CTxVMzBDMT47PFUzMDYxPjtJR05PUkU7SUdOT1JFCis8VTMwQzI+CTxVMzBDMT47PFUzMEMyPjtJR05PUkU7SUdOT1JFCis8VTMwNjI+CTxVMzBDMT47PFUzMDYyPjtJR05PUkU7SUdOT1JFCis8VTMwQzM+CTxVMzBDMz47PFUzMEMzPjtJR05PUkU7SUdOT1JFCis8VTMwNjM+CTxVMzBDMz47PFUzMDYzPjtJR05PUkU7SUdOT1JFCis8VTMwQzQ+CTxVMzBDMz47PFUzMEM0PjtJR05PUkU7SUdOT1JFCis8VTMwNjQ+CTxVMzBDMz47PFUzMDY0PjtJR05PUkU7SUdOT1JFCis8VTMwQzU+CTxVMzBDMz47PFUzMEM1PjtJR05PUkU7SUdOT1JFCis8VTMwNjU+CTxVMzBDMz47PFUzMDY1PjtJR05PUkU7SUdOT1JFCis8VTMwQzY+CTxVMzBDNj47PFUzMEM2PjtJR05PUkU7SUdOT1JFCis8VTMwNjY+CTxVMzBDNj47PFUzMDY2PjtJR05PUkU7SUdOT1JFCis8VTMwQzc+CTxVMzBDNj47PFUzMEM3PjtJR05PUkU7SUdOT1JFCis8VTMwNjc+CTxVMzBDNj47PFUzMDY3PjtJR05PUkU7SUdOT1JFCis8VTMwQzg+CTxVMzBDOD47PFUzMEM4PjtJR05PUkU7SUdOT1JFCis8VTMwNjg+CTxVMzBDOD47PFUzMDY4PjtJR05PUkU7SUdOT1JFCis8VTMwQzk+CTxVMzBDOD47PFUzMEM5PjtJR05PUkU7SUdOT1JFCis8VTMwNjk+CTxVMzBDOD47PFUzMDY5PjtJR05PUkU7SUdOT1JFCis8VTMwQ0E+CTxVMzBDQT47PFUzMENBPjtJR05PUkU7SUdOT1JFCis8VTMwNkE+CTxVMzBDQT47PFUzMDZBPjtJR05PUkU7SUdOT1JFCis8VTMwQ0I+CTxVMzBDQj47PFUzMENCPjtJR05PUkU7SUdOT1JFCis8VTMwNkI+CTxVMzBDQj47PFUzMDZCPjtJR05PUkU7SUdOT1JFCis8VTMwQ0M+CTxVMzBDQz47PFUzMENDPjtJR05PUkU7SUdOT1JFCis8VTMwNkM+CTxVMzBDQz47PFUzMDZDPjtJR05PUkU7SUdOT1JFCis8VTMwQ0Q+CTxVMzBDRD47PFUzMENEPjtJR05PUkU7SUdOT1JFCis8VTMwNkQ+CTxVMzBDRD47PFUzMDZEPjtJR05PUkU7SUdOT1JFCis8VTMwQ0U+CTxVMzBDRT47PFUzMENFPjtJR05PUkU7SUdOT1JFCis8VTMwNkU+CTxVMzBDRT47PFUzMDZFPjtJR05PUkU7SUdOT1JFCis8VTMwQ0Y+CTxVMzBDRj47PFUzMENGPjtJR05PUkU7SUdOT1JFCis8VTMwNkY+CTxVMzBDRj47PFUzMDZGPjtJR05PUkU7SUdOT1JFCis8VTMwRDA+CTxVMzBDRj47PFUzMEQwPjtJR05PUkU7SUdOT1JFCis8VTMwNzA+CTxVMzBDRj47PFUzMDcwPjtJR05PUkU7SUdOT1JFCis8VTMwRDE+CTxVMzBDRj47PFUzMEQxPjtJR05PUkU7SUdOT1JFCis8VTMwNzE+CTxVMzBDRj47PFUzMDcxPjtJR05PUkU7SUdOT1JFCis8VTMwRDI+CTxVMzBEMj47PFUzMEQyPjtJR05PUkU7SUdOT1JFCis8VTMwNzI+CTxVMzBEMj47PFUzMDcyPjtJR05PUkU7SUdOT1JFCis8VTMwRDM+CTxVMzBEMj47PFUzMEQzPjtJR05PUkU7SUdOT1JFCis8VTMwNzM+CTxVMzBEMj47PFUzMDczPjtJR05PUkU7SUdOT1JFCis8VTMwRDQ+CTxVMzBEMj47PFUzMEQ0PjtJR05PUkU7SUdOT1JFCis8VTMwNzQ+CTxVMzBEMj47PFUzMDc0PjtJR05PUkU7SUdOT1JFCis8VTMwRDU+CTxVMzBENT47PFUzMEQ1PjtJR05PUkU7SUdOT1JFCis8VTMwNzU+CTxVMzBENT47PFUzMDc1PjtJR05PUkU7SUdOT1JFCis8VTMwRDY+CTxVMzBENT47PFUzMEQ2PjtJR05PUkU7SUdOT1JFCis8VTMwNzY+CTxVMzBENT47PFUzMDc2PjtJR05PUkU7SUdOT1JFCis8VTMwRDc+CTxVMzBENT47PFUzMEQ3PjtJR05PUkU7SUdOT1JFCis8VTMwNzc+CTxVMzBENT47PFUzMDc3PjtJR05PUkU7SUdOT1JFCis8VTMwRDg+CTxVMzBEOD47PFUzMEQ4PjtJR05PUkU7SUdOT1JFCis8VTMwNzg+CTxVMzBEOD47PFUzMDc4PjtJR05PUkU7SUdOT1JFCis8VTMwRDk+CTxVMzBEOD47PFUzMEQ5PjtJR05PUkU7SUdOT1JFCis8VTMwNzk+CTxVMzBEOD47PFUzMDc5PjtJR05PUkU7SUdOT1JFCis8VTMwREE+CTxVMzBEOD47PFUzMERBPjtJR05PUkU7SUdOT1JFCis8VTMwN0E+CTxVMzBEOD47PFUzMDdBPjtJR05PUkU7SUdOT1JFCis8VTMwREI+CTxVMzBEQj47PFUzMERCPjtJR05PUkU7SUdOT1JFCis8VTMwN0I+CTxVMzBEQj47PFUzMDdCPjtJR05PUkU7SUdOT1JFCis8VTMwREM+CTxVMzBEQj47PFUzMERDPjtJR05PUkU7SUdOT1JFCis8VTMwN0M+CTxVMzBEQj47PFUzMDdDPjtJR05PUkU7SUdOT1JFCis8VTMwREQ+CTxVMzBEQj47PFUzMEREPjtJR05PUkU7SUdOT1JFCis8VTMwN0Q+CTxVMzBEQj47PFUzMDdEPjtJR05PUkU7SUdOT1JFCis8VTMwREU+CTxVMzBERT47PFUzMERFPjtJR05PUkU7SUdOT1JFCis8VTMwN0U+CTxVMzBERT47PFUzMDdFPjtJR05PUkU7SUdOT1JFCis8VTMwREY+CTxVMzBERj47PFUzMERGPjtJR05PUkU7SUdOT1JFCis8VTMwN0Y+CTxVMzBERj47PFUzMDdGPjtJR05PUkU7SUdOT1JFCis8VTMwRTA+CTxVMzBFMD47PFUzMEUwPjtJR05PUkU7SUdOT1JFCis8VTMwODA+CTxVMzBFMD47PFUzMDgwPjtJR05PUkU7SUdOT1JFCis8VTMwRTE+CTxVMzBFMT47PFUzMEUxPjtJR05PUkU7SUdOT1JFCis8VTMwODE+CTxVMzBFMT47PFUzMDgxPjtJR05PUkU7SUdOT1JFCis8VTMwRTI+CTxVMzBFMj47PFUzMEUyPjtJR05PUkU7SUdOT1JFCis8VTMwODI+CTxVMzBFMj47PFUzMDgyPjtJR05PUkU7SUdOT1JFCis8VTMwRTM+CTxVMzBFMz47PFUzMEUzPjtJR05PUkU7SUdOT1JFCis8VTMwODM+CTxVMzBFMz47PFUzMDgzPjtJR05PUkU7SUdOT1JFCis8VTMwRTQ+CTxVMzBFMz47PFUzMEU0PjtJR05PUkU7SUdOT1JFCis8VTMwODQ+CTxVMzBFMz47PFUzMDg0PjtJR05PUkU7SUdOT1JFCis8VTMwRTU+CTxVMzBFNT47PFUzMEU1PjtJR05PUkU7SUdOT1JFCis8VTMwODU+CTxVMzBFNT47PFUzMDg1PjtJR05PUkU7SUdOT1JFCis8VTMwRTY+CTxVMzBFNT47PFUzMEU2PjtJR05PUkU7SUdOT1JFCis8VTMwODY+CTxVMzBFNT47PFUzMDg2PjtJR05PUkU7SUdOT1JFCis8VTMwRTc+CTxVMzBFNz47PFUzMEU3PjtJR05PUkU7SUdOT1JFCis8VTMwODc+CTxVMzBFNz47PFUzMDg3PjtJR05PUkU7SUdOT1JFCis8VTMwRTg+CTxVMzBFNz47PFUzMEU4PjtJR05PUkU7SUdOT1JFCis8VTMwODg+CTxVMzBFNz47PFUzMDg4PjtJR05PUkU7SUdOT1JFCis8VTMwRTk+CTxVMzBFOT47PFUzMEU5PjtJR05PUkU7SUdOT1JFCis8VTMwODk+CTxVMzBFOT47PFUzMDg5PjtJR05PUkU7SUdOT1JFCis8VTMwRUE+CTxVMzBFQT47PFUzMEVBPjtJR05PUkU7SUdOT1JFCis8VTMwOEE+CTxVMzBFQT47PFUzMDhBPjtJR05PUkU7SUdOT1JFCis8VTMwRUI+CTxVMzBFQj47PFUzMEVCPjtJR05PUkU7SUdOT1JFCis8VTMwOEI+CTxVMzBFQj47PFUzMDhCPjtJR05PUkU7SUdOT1JFCis8VTMwRUM+CTxVMzBFQz47PFUzMEVDPjtJR05PUkU7SUdOT1JFCis8VTMwOEM+CTxVMzBFQz47PFUzMDhDPjtJR05PUkU7SUdOT1JFCis8VTMwRUQ+CTxVMzBFRD47PFUzMEVEPjtJR05PUkU7SUdOT1JFCis8VTMwOEQ+CTxVMzBFRD47PFUzMDhEPjtJR05PUkU7SUdOT1JFCis8VTMwRUU+CTxVMzBFRT47PFUzMEVFPjtJR05PUkU7SUdOT1JFCis8VTMwOEU+CTxVMzBFRT47PFUzMDhFPjtJR05PUkU7SUdOT1JFCis8VTMwRUY+CTxVMzBFRT47PFUzMEVGPjtJR05PUkU7SUdOT1JFCis8VTMwOEY+CTxVMzBFRT47PFUzMDhGPjtJR05PUkU7SUdOT1JFCis8VTMwRjA+CTxVMzBGMD47PFUzMEYwPjtJR05PUkU7SUdOT1JFCis8VTMwOTA+CTxVMzBGMD47PFUzMDkwPjtJR05PUkU7SUdOT1JFCis8VTMwRjE+CTxVMzBGMT47PFUzMEYxPjtJR05PUkU7SUdOT1JFCis8VTMwOTE+CTxVMzBGMT47PFUzMDkxPjtJR05PUkU7SUdOT1JFCis8VTMwRjI+CTxVMzBGMj47PFUzMEYyPjtJR05PUkU7SUdOT1JFCis8VTMwOTI+CTxVMzBGMj47PFUzMDkyPjtJR05PUkU7SUdOT1JFCis8VTMwRjM+CTxVMzBGMz47PFUzMEYzPjtJR05PUkU7SUdOT1JFCis8VTMwOTM+CTxVMzBGMz47PFUzMDkzPjtJR05PUkU7SUdOT1JFCisKK29yZGVyX2VuZAorCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAiaTE4biIKKwordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNTQ+PFUwMDc0PjxVMDA1OT48VTAwNzk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgICAgICAiPFUwMDUwPjxVMDA0Qz48VTAwNEU+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICAgIjxVMDA3QT48VTAxNDI+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICAgICAiPFUwMDJDPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAgICAgIjxVMDAyRT4iCittb25fZ3JvdXBpbmcgICAgICAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDAKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgICAgICAwCituX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgICAgICAxCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludCAgICAgICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgICAgIiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgICAgMDswCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCislIFRoZSBhYmRheSwgYWJtb24sIGFuZCBkX2ZtdCBpbmZvcm1hdGlvbiBoYXMgYmVlbiBjaGFuZ2VkIChiYWNrKSB0byBtYXRjaAorJSB0aGUgcHJlZmVyZW5jZSBleHByZXNzZWQgaW4gdGhlIHBvbGwgb3JnYW5pemVkIHRvIGdldCBzb21lIGNvbmNlbnN1cy4KKyUgVGhlIHJlc3VsdHMgd2VyZSBub3QgZW50aXJlbHkgY2xlYXIgb24gYWxsIGVhc3BlY3RzIGJ1dCB0aGUgY2hvaWNlcworJSBoZXJlIHNlZW0gdG8gaGF2ZSB0aGUgbW9zdCBzdXBwb3J0LiAgRm9yIG1vcmUgZGV0YWlsczoKKyUKKyUgICBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTI0MjI5NgorJQorYWJkYXkgICAiPFUwMDZFPjxVMDA2OT48VTAwNjU+IjsiPFUwMDcwPjxVMDA2Rj48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNzc+PFUwMDc0PjxVMDA2Rj4iOyI8VTAxNUI+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2Mz48VTAwN0E+PFUwMDc3PiI7IjxVMDA3MD48VTAwNjk+PFUwMTA1PiI7LworICAgICAgICAiPFUwMDczPjxVMDA2Rj48VTAwNjI+IgorZGF5ICAgICAiPFUwMDZFPjxVMDA2OT48VTAwNjU+PFUwMDY0PjxVMDA3QT48VTAwNjk+PFUwMDY1PjxVMDA2Qz48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNzA+PFUwMDZGPjxVMDA2RT48VTAwNjk+PFUwMDY1PjxVMDA2ND48VTAwN0E+PFUwMDY5PjxVMDA2MT48VTAxNDI+PFUwMDY1PjxVMDA2Qj4iOy8KKyAgICAgICAgIjxVMDA3Nz48VTAwNzQ+PFUwMDZGPjxVMDA3Mj48VTAwNjU+PFUwMDZCPiI7LworICAgICAgICAiPFUwMTVCPjxVMDA3Mj48VTAwNkY+PFUwMDY0PjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA2Mz48VTAwN0E+PFUwMDc3PjxVMDA2MT48VTAwNzI+PFUwMDc0PjxVMDA2NT48VTAwNkI+IjsvCisgICAgICAgICI8VTAwNzA+PFUwMDY5PjxVMDEwNT48VTAwNzQ+PFUwMDY1PjxVMDA2Qj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNkY+PFUwMDYyPjxVMDA2Rj48VTAwNzQ+PFUwMDYxPiIKK2FibW9uICAgIjxVMDA3Mz48VTAwNzQ+PFUwMDc5PiI7IjxVMDA2Qz48VTAwNzU+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsiPFUwMDZCPjxVMDA3Nz48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA2QT4iOyI8VTAwNjM+PFUwMDdBPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwNjk+PFUwMDcwPiI7IjxVMDA3Mz48VTAwNjk+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDc3PjxVMDA3Mj48VTAwN0E+IjsiPFUwMDcwPjxVMDA2MT48VTAxN0E+IjsvCisgICAgICAgICI8VTAwNkM+PFUwMDY5PjxVMDA3Mz4iOyI8VTAwNjc+PFUwMDcyPjxVMDA3NT4iCittb24gICAgICI8VTAwNzM+PFUwMDc0PjxVMDA3OT48VTAwNjM+PFUwMDdBPjxVMDA2NT48VTAxNDQ+IjsvCisgICAgICAgICI8VTAwNkM+PFUwMDc1PjxVMDA3ND48VTAwNzk+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwN0E+PFUwMDY1PjxVMDA2Mz4iOy8KKyAgICAgICAgIjxVMDA2Qj48VTAwNzc+PFUwMDY5PjxVMDA2NT48VTAwNjM+PFUwMDY5PjxVMDA2NT48VTAxNDQ+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA2QT4iOy8KKyAgICAgICAgIjxVMDA2Mz48VTAwN0E+PFUwMDY1PjxVMDA3Mj48VTAwNzc+PFUwMDY5PjxVMDA2NT48VTAwNjM+IjsvCisgICAgICAgICI8VTAwNkM+PFUwMDY5PjxVMDA3MD48VTAwNjk+PFUwMDY1PjxVMDA2Mz4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjk+PFUwMDY1PjxVMDA3Mj48VTAwNzA+PFUwMDY5PjxVMDA2NT48VTAxNDQ+IjsvCisgICAgICAgICI8VTAwNzc+PFUwMDcyPjxVMDA3QT48VTAwNjU+PFUwMDczPjxVMDA2OT48VTAwNjU+PFUwMTQ0PiI7LworICAgICAgICAiPFUwMDcwPjxVMDA2MT48VTAxN0E+PFUwMDY0PjxVMDA3QT48VTAwNjk+PFUwMDY1PjxVMDA3Mj48VTAwNkU+PFUwMDY5PjxVMDA2Qj4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwNjk+PFUwMDczPjxVMDA3ND48VTAwNkY+PFUwMDcwPjxVMDA2MT48VTAwNjQ+IjsvCisgICAgICAgICI8VTAwNjc+PFUwMDcyPjxVMDA3NT48VTAwNjQ+PFUwMDdBPjxVMDA2OT48VTAwNjU+PFUwMTQ0PiIKK2RfdF9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDJDPjxVMDAyMD4vCis8VTAwMjU+PFUwMDJEPjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMkM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNTQ+IgorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkU+PFUwMDI1PjxVMDA2RD48VTAwMkU+PFUwMDI1PjxVMDA1OT4iCit0X2ZtdCAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgIiI7IiIKK3RfZm10X2FtcG0gIiIKK2RhdGVfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyQz48VTAwMjA+LworPFUwMDI1PjxVMDAyRD48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDJDPjxVMDAyMD4vCis8VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK3dlZWsJNzsxOTk3MTIwMTs0CitmaXJzdF93ZWVrZGF5CTEKK2ZpcnN0X3dvcmtkYXkJMQorRU5EIExDX1RJTUUKKworTENfUEFQRVIKKyUgRklYTUUKK2hlaWdodCAgIDI5NworJSBGSVhNRQord2lkdGggICAgMjEwCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzND48VTAwMzg+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorJSBGSVhNRQorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAiPFUwMDUwPjxVMDA0Qz4iCitjb3VudHJ5X2FiMyAiPFUwMDUwPjxVMDA0Rj48VTAwNEM+IgorY291bnRyeV9udW0gNjE2CitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvcHRfQlIgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9wdF9CUgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGJjMTRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvcHRfQlIKQEAgLTAsMCArMSwxNTkgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBQb3J0dWd1ZXNlIExhbmd1YWdlIExvY2FsZSBmb3IgQnJhc2lsCislIFNvdXJjZTogUkFQCislIEFkZHJlc3M6IFNhbmt0IEpvLy9yZ2VucyBBbGxlIDgKKyUgICAgREstMTYxNSBLby8vYmVuaGF2biBWLCBEYW5tYXJrCislIENvbnRhY3Q6IEtlbGQgU2ltb25zZW4KKyUgRW1haWw6IEtlbGQuU2ltb25zZW5AZGt1dWcuZGsKKyUgVGVsOiArNDUgLSAzMTIyNjU0MworJSBGYXg6ICs0NSAtIDMzMjU2NTQzCislIExhbmd1YWdlOiBwdAorJSBUZXJyaXRvcnk6IEJSCislIFJldmlzaW9uOiA0LjQKKyUgRGF0ZTogMTk5Ny0wMy0xOQorJSBVc2VyczogZ2VuZXJhbAorJSBSZXBlcnRvaXJlbWFwOiBtbmVtb25pYy5kcworJSBDaGFyc2V0OiBJU08tODg1OS0xCislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJQb3J0dWd1ZXNlIGxvY2FsZSBmb3IgQnJhc2lsIgorc291cmNlICAgICAiUkFQIgorYWRkcmVzcyAgICAiU2Fua3QgSjxVMDBGOD5yZ2VucyBBbGxlIDgsIERLLTE2MTUgSzxVMDBGOD5iZW5oYXZuIFYsIERhbm1hcmsiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiUG9ydHVndWVzZSIKK3RlcnJpdG9yeSAgIkJyYXNpbCIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjkiCislCitjYXRlZ29yeSAgInB0X0JSOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgInB0X0JSOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgInB0X0JSOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAicHRfQlI6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJwdF9CUjoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgInB0X0JSOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgInB0X0JSOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgInB0X0JSOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgInB0X0JSOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAicHRfQlI6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJwdF9CUjoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfTUVTU0FHRVMKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDUzPjxVMDA3Mz48VTAwNzk+PFUwMDU5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgICAgICAgIjxVMDA0Mj48VTAwNTI+PFUwMDRDPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgICAgICI8VTAwNTI+PFUwMDI0PiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAgICAgIjxVMDAyQz4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgICAgICI8VTAwMkU+IgorbW9uX2dyb3VwaW5nICAgICAgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAgICAgMQorRU5EIExDX01PTkVUQVJZCisKK0xDX0NUWVBFCitjb3B5ICJwdF9QVCIKK0VORCBMQ19DVFlQRQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAgICAgICI8VTAwMkM+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAgICAiIgorZ3JvdXBpbmcgICAgICAgICAgICAgICAgICAwOzAKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA0ND48VTAwNkY+PFUwMDZEPiI7IjxVMDA1Mz48VTAwNjU+PFUwMDY3PiI7LworICAgICAgICAiPFUwMDU0PjxVMDA2NT48VTAwNzI+IjsiPFUwMDUxPjxVMDA3NT48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNTE+PFUwMDc1PjxVMDA2OT4iOyI8VTAwNTM+PFUwMDY1PjxVMDA3OD4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwRTE+PFUwMDYyPiIKK2RheSAgICAgIjxVMDA2ND48VTAwNkY+PFUwMDZEPjxVMDA2OT48VTAwNkU+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDY3PjxVMDA3NT48VTAwNkU+PFUwMDY0PjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA3ND48VTAwNjU+PFUwMDcyPjxVMDBFNz48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNzE+PFUwMDc1PjxVMDA2MT48VTAwNzI+PFUwMDc0PjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA3MT48VTAwNzU+PFUwMDY5PjxVMDA2RT48VTAwNzQ+PFUwMDYxPiI7LworICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNzg+PFUwMDc0PjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwRTE+PFUwMDYyPjxVMDA2MT48VTAwNjQ+PFUwMDZGPiIKK2FibW9uICAgIjxVMDA0QT48VTAwNjE+PFUwMDZFPiI7IjxVMDA0Nj48VTAwNjU+PFUwMDc2PiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzI+IjsiPFUwMDQxPjxVMDA2Mj48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA2OT4iOyI8VTAwNEE+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZDPiI7IjxVMDA0MT48VTAwNjc+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNzQ+IjsiPFUwMDRGPjxVMDA3NT48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNEU+PFUwMDZGPjxVMDA3Nj4iOyI8VTAwNDQ+PFUwMDY1PjxVMDA3QT4iCittb24gICAgICI8VTAwNkE+PFUwMDYxPjxVMDA2RT48VTAwNjU+PFUwMDY5PjxVMDA3Mj48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjY+PFUwMDY1PjxVMDA3Nj48VTAwNjU+PFUwMDcyPjxVMDA2NT48VTAwNjk+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDBFNz48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDYyPjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNjk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkU+PFUwMDY4PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPjxVMDA2OD48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDY3PjxVMDA2Rj48VTAwNzM+PFUwMDc0PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDc0PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNkY+PFUwMDc1PjxVMDA3ND48VTAwNzU+PFUwMDYyPjxVMDA3Mj48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA3Nj48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDY0PjxVMDA2NT48VTAwN0E+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2Rj4iCitkX3RfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJEPjxVMDAyNT48VTAwNkQ+PFUwMDJEPjxVMDAyNT48VTAwNTk+IgordF9mbXQgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICIiOyIiCit0X2ZtdF9hbXBtICIiCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorJSBGSVhNRQoraGVpZ2h0ICAgMjk3CislIEZJWE1FCit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDM1PjxVMDAzNT4iCitpbnRfc2VsZWN0ICAgICAiPFUwMDMwPjxVMDAzMD4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCislIEZJWE1FCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICI8VTAwNDI+PFUwMDUyPiIKK2NvdW50cnlfYWIzICI8VTAwNDI+PFUwMDUyPjxVMDA0MT4iCitjb3VudHJ5X251bSAwNzYKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9wdF9QVCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3B0X1BUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMWJlMWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9wdF9QVApAQCAtMCwwICsxLDE1OSBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIFBvcnR1Z3Vlc2UgTGFuZ3VhZ2UgTG9jYWxlIGZvciBQb3J0dWdhbAorJSBTb3VyY2U6IFJBUAorJSBBZGRyZXNzOiBTYW5rdCBKby8vcmdlbnMgQWxsZSA4CislICAgIERLLTE2MTUgS28vL2Jlbmhhdm4gViwgRGFubWFyaworJSBDb250YWN0OiBLZWxkIFNpbW9uc2VuCislIEVtYWlsOiBLZWxkLlNpbW9uc2VuQGRrdXVnLmRrCislIFRlbDogKzQ1IC0gMzEyMjY1NDMKKyUgRmF4OiArNDUgLSAzMzI1NjU0MworJSBMYW5ndWFnZTogcHQKKyUgVGVycml0b3J5OiBQVAorJSBSZXZpc2lvbjogNC4zCislIERhdGU6IDE5OTYtMTAtMTUKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiUG9ydHVndWVzZSBsb2NhbGUgZm9yIFBvcnR1Z2FsIgorc291cmNlICAgICAiUkFQIgorYWRkcmVzcyAgICAiU2Fua3QgSjxVMDBGOD5yZ2VucyBBbGxlIDgsIERLLTE2MTUgSzxVMDBGOD5iZW5oYXZuIFYsIERhbm1hcmsiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiUG9ydHVndWVzZSIKK3RlcnJpdG9yeSAgIlBvcnR1Z2FsIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAicHRfUFQ6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAicHRfUFQ6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAicHRfUFQ6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJwdF9QVDoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgInB0X1BUOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAicHRfUFQ6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAicHRfUFQ6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAicHRfUFQ6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAicHRfUFQ6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJwdF9QVDoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgInB0X1BUOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAiaTE4biIKKwordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNTM+PFUwMDczPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgICAgICAiPFUwMDQ1PjxVMDA1NT48VTAwNTI+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICAgIjxVMjBBQz4iCittb25fZGVjaW1hbF9wb2ludCAgICAgICAgICI8VTAwMkM+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgICAiPFUwMDJFPiIKK21vbl9ncm91cGluZyAgICAgICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAgICAgMAorcF9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDAKK25fc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAgICAgICI8VTAwMkM+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAgICAiIgorZ3JvdXBpbmcgICAgICAgICAgICAgICAgICAwOzAKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA0ND48VTAwNkY+PFUwMDZEPiI7IjxVMDA1Mz48VTAwNjU+PFUwMDY3PiI7LworICAgICAgICAiPFUwMDU0PjxVMDA2NT48VTAwNzI+IjsiPFUwMDUxPjxVMDA3NT48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNTE+PFUwMDc1PjxVMDA2OT4iOyI8VTAwNTM+PFUwMDY1PjxVMDA3OD4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwRTE+PFUwMDYyPiIKK2RheSAgICAgIjxVMDA0ND48VTAwNkY+PFUwMDZEPjxVMDA2OT48VTAwNkU+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDY3PjxVMDA3NT48VTAwNkU+PFUwMDY0PjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA1ND48VTAwNjU+PFUwMDcyPjxVMDBFNz48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNTE+PFUwMDc1PjxVMDA2MT48VTAwNzI+PFUwMDc0PjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA1MT48VTAwNzU+PFUwMDY5PjxVMDA2RT48VTAwNzQ+PFUwMDYxPiI7LworICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNzg+PFUwMDc0PjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwRTE+PFUwMDYyPjxVMDA2MT48VTAwNjQ+PFUwMDZGPiIKK2FibW9uICAgIjxVMDA0QT48VTAwNjE+PFUwMDZFPiI7IjxVMDA0Nj48VTAwNjU+PFUwMDc2PiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzI+IjsiPFUwMDQxPjxVMDA2Mj48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA2OT4iOyI8VTAwNEE+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZDPiI7IjxVMDA0MT48VTAwNjc+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNzQ+IjsiPFUwMDRGPjxVMDA3NT48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNEU+PFUwMDZGPjxVMDA3Nj4iOyI8VTAwNDQ+PFUwMDY1PjxVMDA3QT4iCittb24gICAgICI8VTAwNEE+PFUwMDYxPjxVMDA2RT48VTAwNjU+PFUwMDY5PjxVMDA3Mj48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNDY+PFUwMDY1PjxVMDA3Nj48VTAwNjU+PFUwMDcyPjxVMDA2NT48VTAwNjk+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPjxVMDBFNz48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNDE+PFUwMDYyPjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNjk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkU+PFUwMDY4PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA0QT48VTAwNzU+PFUwMDZDPjxVMDA2OD48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNDE+PFUwMDY3PjxVMDA2Rj48VTAwNzM+PFUwMDc0PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDc0PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNEY+PFUwMDc1PjxVMDA3ND48VTAwNzU+PFUwMDYyPjxVMDA3Mj48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNEU+PFUwMDZGPjxVMDA3Nj48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDQ0PjxVMDA2NT48VTAwN0E+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2Rj4iCitkX3RfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJEPjxVMDAyNT48VTAwNkQ+PFUwMDJEPjxVMDAyNT48VTAwNTk+IgordF9mbXQgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICIiOyIiCit0X2ZtdF9hbXBtICIiCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19QQVBFUgoraGVpZ2h0ICAgMjk3Cit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2Qz4iCit0ZWxfZG9tX2ZtdCAgICAiPFUwMDI1PjxVMDA2Qz4iCitpbnRfc2VsZWN0ICAgICAiPFUwMDMwPjxVMDAzMD4iCitpbnRfcHJlZml4ICAgICAiPFUwMDMzPjxVMDAzNT48VTAwMzE+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAiPFUwMDUwPjxVMDA1ND4iCitjb3VudHJ5X2FiMyAiPFUwMDUwPjxVMDA1Mj48VTAwNTQ+IgorY291bnRyeV9udW0gNjIwCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvcHRfUFRAZXVybyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3B0X1BUQGV1cm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU4OTc2YQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3B0X1BUQGV1cm8KQEAgLTAsMCArMSw4MyBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIFBvcnR1Z3Vlc2UgTGFuZ3VhZ2UgTG9jYWxlIGZvciBQb3J0dWdhbCB3aXRoIEV1cm8KKyUgTGFuZ3VhZ2U6IHB0CislIFRlcnJpdG9yeTogUFQKKyUgT3B0aW9uOiBldXJvCislIERhdGU6IDIwMDAtMDgtMjAKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogSVNPLTg4NTktMTUKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlBvcnR1Z3Vlc2UgbG9jYWxlIGZvciBQb3J0dWdhbCB3aXRoIEV1cm8iCitzb3VyY2UgICAgICJGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4iCithZGRyZXNzICAgICI1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIlBvcnR1Z3Vlc2UiCit0ZXJyaXRvcnkgICJQb3J0dWdhbCIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDgtMjAiCislCitjYXRlZ29yeSAgInB0X1BUQGV1cm86MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAicHRfUFRAZXVybzoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJwdF9QVEBldXJvOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAicHRfUFRAZXVybzoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgInB0X1BUQGV1cm86MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJwdF9QVEBldXJvOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgInB0X1BUQGV1cm86MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAicHRfUFRAZXVybzoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJwdF9QVEBldXJvOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAicHRfUFRAZXVybzoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgInB0X1BUQGV1cm86MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DT0xMQVRFCitjb3B5ICJpc28xNDY1MV90MSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01FU1NBR0VTCitjb3B5ICJwdF9QVCIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQorY29weSAicHRfUFQiCitFTkQgTENfTU9ORVRBUlkKKworTENfQ1RZUEUKK2NvcHkgInB0X1BUIgorRU5EIExDX0NUWVBFCisKK0xDX05VTUVSSUMKK2NvcHkgInB0X1BUIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorY29weSAicHRfUFQiCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorY29weSAicHRfUFQiCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCitjb3B5ICJwdF9QVCIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgInB0X1BUIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK2NvcHkgInB0X1BUIgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworY29weSAicHRfUFQiCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvcm9fUk8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9yb19STwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTBkN2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvcm9fUk8KQEAgLTAsMCArMSwzOTAgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBSb21hbmlhbiBMYW5ndWFnZSBMb2NhbGUgZm9yIFJvbWFuaWEKKyUgU291cmNlOiBSQVAKKyUgQWRkcmVzczogU2Fua3QgSm8vL3JnZW5zIEFsbGUgOAorJSAgICBESy0xNjE1IEtvLy9iZW5oYXZuIFYsIERhbm1hcmsKKyUgQ29udGFjdDogS2VsZCBTaW1vbnNlbgorJSBFbWFpbDogS2VsZC5TaW1vbnNlbkBka3V1Zy5kaworJSBUZWw6ICs0NSAtIDMxMjI2NTQzCislIEZheDogKzQ1IC0gMzMyNTY1NDMKKyUgTGFuZ3VhZ2U6IHJvCislIFRlcnJpdG9yeTogUk8KKyUgUmV2aXNpb246IDQuMworJSBEYXRlOiAxOTk2LTEwLTE1CislIEFwcGxpY2F0aW9uOiBnZW5lcmFsCislIFVzZXJzOiBnZW5lcmFsCislIENoYXJzZXQ6IFVURi04CislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCislCislIENvcnJlY3Rpb25zIGJ5OgorJSAgMjAwNi0wMS0wNworJSAgRWRkeSBQZXRyaXNvciA8ZWRkeS5wZXRyaXNvckBnbWFpbC5jb20+CisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJSb21hbmlhbiBsb2NhbGUgZm9yIFJvbWFuaWEiCitzb3VyY2UgICAgICJSQVAiCithZGRyZXNzICAgICJTYW5rdCBKb3JnZW5zIEFsbGUgOCwgREstMTYxNSBLb2Jlbmhhdm4gViwgRGFubWFyayIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJSb21hbmlhbiIKK3RlcnJpdG9yeSAgIlJvbWFuaWEiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA2LTI5IgorJQorY2F0ZWdvcnkgICJyb19STzoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJyb19STzoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJyb19STzoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgInJvX1JPOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAicm9fUk86MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJyb19STzoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJyb19STzoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJyb19STzoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJyb19STzoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgInJvX1JPOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAicm9fUk86MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DT0xMQVRFCisKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxCitjb3B5ICJpc28xNDY1MV90MSIKKworJSBUaGUgbW9kZXJuIFJvbWFuaWFuIGFscGhhYmV0IGhhcyAzMSBsZXR0ZXJzLCBvcmRlcmVkIGFzIGJlbG93OgorJSBhIGEoIGE+IGIgYyBkIGUgZiBnIGggaSBpPiBqIGsgbCBtIG4gbyBwIHEgciBzIHMsIHQgdCwgdSB2IHcgeCB5IHoKKworY29sbGF0aW5nLXN5bWJvbCA8YSg+Citjb2xsYXRpbmctc3ltYm9sIDxhLz4+Citjb2xsYXRpbmctc3ltYm9sIDxpLz4+Citjb2xsYXRpbmctc3ltYm9sIDxzLD4KK2NvbGxhdGluZy1zeW1ib2wgPHQsPgorCityZW9yZGVyLWFmdGVyIDxHUkE+Cis8Q0lSPgorPEJSRT4KKworcmVvcmRlci1hZnRlciA8YT4KKzxhKD4KKzxhLz4+CityZW9yZGVyLWFmdGVyIDxpPgorPGkvPj4KK3Jlb3JkZXItYWZ0ZXIgPHM+Cis8cyw+CityZW9yZGVyLWFmdGVyIDx0PgorPHQsPgorCityZW9yZGVyLWFmdGVyIDxVMDA2MT4KKzxVMDEwMz4gPGEoPjs8QlJFPjs8TUlOPjtJR05PUkUKKzxVMDBFMj4gPGEvPj47PENJUj47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0MT4KKzxVMDEwMj4gPGEoPjs8QlJFPjs8Q0FQPjtJR05PUkUKKzxVMDBDMj4gPGEvPj47PENJUj47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDY5PgorPFUwMEVFPiA8aS8+Pjs8Q0lSPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDQ5PgorPFUwMENFPiA8aS8+Pjs8Q0lSPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNzM+Cis8VTAyMTk+IDxzLD47PENEST47PE1JTj47SUdOT1JFCis8VTAxNUY+IDxzLD47PENEST47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA1Mz4KKzxVMDIxOD4gPHMsPjs8Q0RJPjs8Q0FQPjtJR05PUkUKKzxVMDE1RT4gPHMsPjs8Q0RJPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNzQ+Cis8VTAyMUI+IDx0LD47PENEST47PE1JTj47SUdOT1JFCis8VTAxNjM+IDx0LD47PENEST47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA1ND4KKzxVMDIxQT4gPHQsPjs8Q0RJPjs8Q0FQPjtJR05PUkUKKzxVMDE2Mj4gPHQsPjs8Q0RJPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1lbmQKKworRU5EIExDX0NPTExBVEUKKworCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCislCislIFRyYW5zbGl0ZXJhdGlvbiBpcyBfY3VycmVudGx5XyBhIGdvb2QgaWRlYSBhcyBtb3N0IGZvbnRzL2FwcGxpY2F0aW9ucyBkbyBub3QKKyUgaGF2ZSB0aGUgY29ycmVjdCBkaWFjcml0aWNzIGZvciAidCBjb21tYSBiZWxsb3ciIChVMDIxQSwgVTAyMUIpIGFuZCAKKyUgInMgY29tbWEgYmVsbG93IiAoVTAyMTgsIFUwMjE5KS4gVGh1cyB3ZSBjdXJyZW50bHkgdXNlIGFuZCBjb21wcm9taXNlIHdpdGgKKyUgInQgY2VkaWxsYSIgKFUwMTYyLCBVMDE2MykgLSB3aGljaCwgYWN0dWFsbHksIGRvZXMgbm90IGJlbG9uZyB0byBhbnkgCislIGxhbmd1YWdlIC0gYW5kICJzIGNlZGlsbGEiIChVMDE1RSwgVTAxNUYpIC0gd2hpY2ggaXMgX25vdF8gY29ycmVjdCBmb3IKKyUgUm9tYW5pYW4sIGJ1dCBpcyBjb3JyZWN0IGZvciBUdXJraXNoLgorJQorJSBUaGlzIGlzc3VlIHNob3VsZCBiZSBmaXhlZCBpbiB0aGUgZnV0dXJlLCB3aGVuIGVub3VnaCBmb250IGFuZCBhcHBsaWNhdGlvbgorJSBzdXBwb3J0IHdpbGwgYmUgcHJvdmlkZWQgaW4gY3VycmVudCBvcGVyYXRpbmcgc3lzdGVtcy4KKyUKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCisKKyUgaWYgdC9zY29tbWEgaXMgbm90IGF2YWlsYWJsZSwgdHJ5IGZpcnN0IHQvc2NlZGlsbGEKKzxVMDIxOD4gIjxVMDE1RT4iOyI8VTAwNTM+IgorPFUwMjE5PiAiPFUwMTVGPiI7IjxVMDA3Mz4iCis8VTAyMUE+ICI8VTAxNjI+IjsiPFUwMDU0PiIKKzxVMDIxQj4gIjxVMDE2Mz4iOyI8VTAwNzQ+IgorCislIGlmIHQvc2NlZGlsbGEgaXMgbm90IGF2YWlsYWJsZSwgdHJ5IGZpcnN0IHQvc2NvbW1hCis8VTAxNUU+ICI8VTAyMTg+IjsiPFUwMDUzPiIKKzxVMDE1Rj4gIjxVMDIxOT4iOyI8VTAwNzM+IgorPFUwMTYyPiAiPFUwMjFBPiI7IjxVMDA1ND4iCis8VTAxNjM+ICI8VTAyMUI+IjsiPFUwMDc0PiIKKwordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA0ND48VTAwNjQ+PFUwMDU5PjxVMDA3OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKKworTENfTU9ORVRBUlkKKyUgU2luY2UgdGhlIDFzdCBvZiBKdWx5IDIwMDUsIHRoZSBuZXcgY3VycmVuY3kgaXMgdGhlIFJPbWFuaWFuIE5ldyBsZXUKKyUgdGhlIHN5bWJvbCBpcyBST04gYW5kIDEgUk9OID0gMTAwMDAgUk9MIChvbGQgUk9tYW5pYW4gTGV1KS4uLgoraW50X2N1cnJfc3ltYm9sICAgICAgICAgICAiPFUwMDUyPjxVMDA0Rj48VTAwNEU+PFUwMDIwPiIKKyUgYnV0IHJlcHJlc2VudGluZyBjb3VudGVkIGNvaW5zIGlzIG1hZGUgaW4gdGhlIHNhbWUgd2F5IGFzIGJlZm9yZS4KK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICAgIjxVMDA0Qz48VTAwNjU+PFUwMDY5PiIKKyUgZGVjaW1hbCBwb2ludCBpcyBjb21tYQorbW9uX2RlY2ltYWxfcG9pbnQgICAgICAgICAiPFUwMDJDPiIKKyUgdGhlIHNlcGFyYXRpb24gb2YgZGlnaXRzIGlzIG1hZGUgaW4gZ3JvdXBzIG9mIHRocmVlCislIGFuZCB0aGUgc2VwYXJhdG9yIGJldHdlZW4gdGhlIGdyb3VwcyBpcyB0aGUgZnVsbCBzdG9wIChkb3QpCittb25fdGhvdXNhbmRzX3NlcCAgICAgICAgICI8VTAwMkU+IgorbW9uX2dyb3VwaW5nICAgICAgICAgICAgICAzOzMKKyUgdGhlIHBvc2l0aXZlIHNpZ24gaXMgbm90IHVzdWFseSByZXByZXNlbnRlZAorcG9zaXRpdmVfc2lnbiAgICAgICAgICAgICAiIgorJSB3aGlsZSB0aGUgbmVnYXRpdmUgb25lIGlzCituZWdhdGl2ZV9zaWduICAgICAgICAgICAgICI8VTAwMkQ+IgorJSB1c3VhbHkgb25lIHdpbGwgZGlzcGxheSBvbmx5IHR3byBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgICAgICAxCitFTkQgTENfTU9ORVRBUlkKKworCitMQ19OVU1FUklDCislIHNhbWUgcnVsZXMgYXMgZm9yIG1vbmV0YXJ5IGFwcGx5IGZvciByZWd1bGFyIGZpZ3VyZXM6CislIGRlY2ltYWwgcG9pbnQgaXMgY29tbWEKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgICAgIjxVMDAyQz4iCislIGFuZCB0aGUgc2VwYXJhdG9yIGJldHdlZW4gZ3JvdXBzIGlzIGZ1bGwgc3RvcAordGhvdXNhbmRzX3NlcCAgICAgICAgICAgICAiPFUwMDJFPiIKKyUgdGhlIHNlcGFyYXRpb24gb2YgZmlndXJlcyBpcyBtYWRlIGluIGdyb3VwcyBvZiB0aHJlZQorZ3JvdXBpbmcgICAgICAgICAgICAgICAgICAzOzMKK0VORCBMQ19OVU1FUklDCisKKworTENfVElNRQorJSBhYmJyZXZpYXRlZCBkYXkgbmFtZXMgYXJlIChzdGFydGluZyBmcm9tIE1vbmRheSk6IEx1IE1hIE1pIEpvIFZpIFNiIER1CithYmRheSAgICI8VTAwNDQ+PFUwMDc1PiI7IjxVMDA0Qz48VTAwNzU+IjsiPFUwMDREPjxVMDA2MT4iOyI8VTAwNEQ+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDRBPjxVMDA2Rj4iOyI8VTAwNTY+PFUwMDY5PiI7IjxVMDA1Mz48VTAwNjI+IgorJQorJSBCZWNhdXNlIGluIDE5OTIgdGhlIFJvbWFuaWFuIEFjYWRlbXkgc3RhdGVkIHRoYXQgd2l0aGluIHdvcmRzIHRoZQorJSB3cml0aW5nIG9mIHRoZSBsZXR0ZXIgaT4gKGkgY2lyY3VtZmxleCAtIFUwMEVFKSBzaG91bGQgYmUgcmVwbGFjZWQKKyUgYnkgYT4gKGFjaXJjdW1mbGV4IC0gVTAwRTIpLCB3ZSB1c2UgdGhlIHBvc3Q5MiB3cml0aW5nLgorJSBOb3RlOiBUaGUgYWN0dWFsIHJ1bGUgaXMgbW9yZSBjb21wbGV4LCBidXQgdGhlIGNhc2Ugd2hpY2ggYXBwbGllcyBmb3IgCislIFNhdHJ1ZGF5IGlzIGNvdmVyZWQgYnkgdGhlIGV4cG9zZWQgZXhwbGFuYXRpb24gYWJvdmUuCislCislIERheSBuYW1lcyBhcmUgbm90IGNhcGl0YWxpemVkOgorJSBkdW1pbmljPGFicmV2ZT4sIGx1bmksIG1hcjx0Y29tbWE+aSwgCislIG1pZXJjdXJpLCBqb2ksIHZpbmVyaSwKKyUgczxhY2lyY3VtZmxleD5tYjxhYnJldmU+dDxhYnJldmU+CislCislIE5vdGUgdGhhdCBUdWVzZGF5IFJvbWFuaWFuIGRheSBzaG91bGQgYmUgdXNpbmcgdCBjb21tYSwgbm90IHQgY2VkaWxsYSwKKyUgYnV0IGR1ZSB0byB0aGUgbG93IGF2YWlsYWJpbGl0eSBvZiB0aGUgZ2x5cGggKFUwMjFCKSBpbiBmb250cyB3ZSB1c2UKKyUgdGhlICJzbyBjYWxsZWQgdCBjZWRpbGxhIgorZGF5ICAgICAiPFUwMDY0PjxVMDA3NT48VTAwNkQ+PFUwMDY5PjxVMDA2RT48VTAwNjk+PFUwMDYzPjxVMDEwMz4iOy8KKyAgICAgICAgIjxVMDA2Qz48VTAwNzU+PFUwMDZFPjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDE2Mz48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDY5PjxVMDA2NT48VTAwNzI+PFUwMDYzPjxVMDA3NT48VTAwNzI+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDZBPjxVMDA2Rj48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNzY+PFUwMDY5PjxVMDA2RT48VTAwNjU+PFUwMDcyPjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwRTI+PFUwMDZEPjxVMDA2Mj48VTAxMDM+PFUwMDc0PjxVMDEwMz4iCislCislIEFsbCBtb250aCBhYmJyZXZpYXRpb25zIGFyZSBjb21wb3NlZCBvZiB0aGUgZmlyc3QgdGhyZWUgbGV0dGVycyBvZiB0aGUgZnVsbAorJSBSb21hbmlhbiBuYW1lcyBvZiB0aGUgbW9udGhzLCBleGNlcHQgZm9yIE5vdmVtYmVyLCB3aG9zZSBhYmJyZXZpYXRpb24gY29tZXMKKyUgZnJvbSB0aGUgTGF0aW4gbW9udGggbmFtZSwgdGh1cyB0aGUgYWJicmV2aWF0aW9uIGlzICJub3YiCislCislIE1vbnRoIG5hbWVzIGFyZSBub3QgY2FwaXRhbGl6ZWQ6CislIGlhbiBmZWIgbWFyIGFwciBtYWkgaXVuIGl1bCBhdWcgc2VwIG9jdCBub3YgZGVjCithYm1vbiAgICI8VTAwNjk+PFUwMDYxPjxVMDA2RT4iOyI8VTAwNjY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2MT48VTAwNzA+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNjk+IjsiPFUwMDY5PjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNjk+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNjE+PFUwMDc1PjxVMDA2Nz4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA2Rj48VTAwNjM+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDY0PjxVMDA2NT48VTAwNjM+IgorJQorJSBNb250aCBuYW1lcyBhcmUgX25vdF8gY2FwaXRhbGl6ZWQgaW4gUm9tYW5pYW46CislIGlhbnVhcmllIGZlYnJ1YXJpZSBtYXJ0aWUKKyUgYXByaWxpZSBtYWkgaXVuaWUKKyUgaXVsaWUgYXVndXN0IHNlcHRlbWJyaWUKKyUgb2N0b21icmllIG5vaWVtYnJpZSBkZWNlbWJyaWUKK21vbiAgICAgIjxVMDA2OT48VTAwNjE+PFUwMDZFPjxVMDA3NT48VTAwNjE+PFUwMDcyPjxVMDA2OT48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNjY+PFUwMDY1PjxVMDA2Mj48VTAwNzI+PFUwMDc1PjxVMDA2MT48VTAwNzI+PFUwMDY5PjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3ND48VTAwNjk+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDYxPjxVMDA3MD48VTAwNzI+PFUwMDY5PjxVMDA2Qz48VTAwNjk+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNjk+PFUwMDc1PjxVMDA2RT48VTAwNjk+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDY5PjxVMDA3NT48VTAwNkM+PFUwMDY5PjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNzU+PFUwMDY3PjxVMDA3NT48VTAwNzM+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNzA+PFUwMDc0PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjk+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDZGPjxVMDA2Mz48VTAwNzQ+PFUwMDZGPjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2OT48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA2OT48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNzI+PFUwMDY5PjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwNjU+PFUwMDYzPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjk+PFUwMDY1PiIKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbiAoJWMpCislIFJvbWFuaWEgdXNlcyBkYXlsaWdodCBzYXZpbmcgYW5kIHRoZSBuYW1lcyBvZiB0aGUgdGltZSB6b25lcyBhcmUgCislIG5vdCB3aWRlbHkga25vd24gbm9yIHVzZWQKKyUJIiVhICVkICViICVZICVUICV6IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+LworPFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA3QT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKCV4KQorJQkiJWQuJW0uJVkiCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjU+PFUwMDZEPjxVMDAyRT48VTAwMjU+PFUwMDU5PiIKKyUgMjQgaG91ciBmb3JtYXQgaXMgdXNlZCwKK3RfZm10ICAgIjxVMDAyNT48VTAwNTQ+IgorJSAgdGh1cyBubyBhbS9wbSBtYXJrZXJzIGFyZSBkZWZpbmVkL3VzZWQKK2FtX3BtICAgIiI7IiIKKyUgYWxzbyBhbS9wbSBob3VyIGRpc3BsYXkgZm9ybWF0IGlzIG5vdCB1c2VkCit0X2ZtdF9hbXBtICIiCislICVBICUtZSAlQiAlWSwgJUg6JU06JVMgJXoKK2RhdGVfZm10ICAgICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyMD48VTAwMjU+PFUwMDJEPjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA0Mj4vCis8VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwN0E+IgorJSBGaXJzdCB3ZWVrIGRheSBpcyBNb25kYXkKK2ZpcnN0X3dlZWtkYXkgMgorJSBGaXJzdCB3b3JrIGRheSBpcyBNb25kYXkKK2ZpcnN0X3dvcmtkYXkgMgorRU5EIExDX1RJTUUKKworCislIFJvbWFuaWEgdXNlcyBBNCBwYXBlciBmb3JtYXQKK0xDX1BBUEVSCitoZWlnaHQgICAyOTcKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzND48VTAwMzA+IgorRU5EIExDX1RFTEVQSE9ORQorCisKKyUgUm9tYW5pYSB1c2VzIHRoZSBtZXRyaWMgc3lzdGVtCitMQ19NRUFTVVJFTUVOVAorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCisKKworTENfTkFNRQorJSBGb3JtYXQgb2YgYSBuYW1lLCB0YWtlbiBmcm9tIHRoZSBnbGliYyBsb2NhbGUgZm9yIFVrcmFpbmlhbi4KKyUgJWYgRmFtaWx5IG5hbWVzLgorJSAlRiBGYW1pbHkgbmFtZXMgaW4gdXBwZXJjYXNlLiAKKyUgJWcgRmlyc3QgZ2l2ZW4gbmFtZS4KKyUgJUcgRmlyc3QgZ2l2ZW4gaW5pdGlhbC4KKyUgJWwgRmlyc3QgZ2l2ZW4gbmFtZSB3aXRoIExhdGluIGxldHRlcnMuCislICVvIE90aGVyIHNob3J0ZXIgbmFtZS4KKyUgJW0gQWRkaXRpb25hbCBnaXZlbiBuYW1lcy4KKyUgJU0gSW5pdGlhbHMgZm9yIGFkZGl0aW9uYWwgZ2l2ZW4gbmFtZXMuCislICVwIFByb2Zlc3Npb24uCislICVzIFNhbHV0YXRpb24sIHN1Y2ggYXMgIkRvY3RvciIKKyUgJVMgQWJicmV2aWF0ZWQgc2FsdXRhdGlvbiwgc3VjaCBhcyAiTXIuIiBvciAiRHIuIgorJSAlZCBTYWx1dGF0aW9uLCB1c2luZyB0aGUgRkRDQy1zZXRzIGNvbnZlbnRpb25zCislICAgIDEgZm9yIHRoZSBuYW1lX2dlbgorJSAgICAyIGZvciBuYW1lX21yCislICAgIDMgZm9yIG5hbWVfbXJzCislICAgIDQgZm9yIG5hbWVfbWlzcworJSAgICA1IGZvciBuYW1lX21zCislICV0IElmIHRoZSBwcmVjZWRpbmcgZmllbGQgZGVzY3JpcHRvciByZXN1bHRlZCBpbiBhbiBlbXB0eSBzdHJpbmcsCislICAgIHRoZW4gdGhlIGVtcHR5IHN0cmluZywgZWxzZSBhIDxzcGFjZT4uCislCislIEZJWE1FOiBUaGVyZSBhcmUgdHdvIHByZWZlcmVkIHdheXM6CislICVkJXQlcyV0JWcldCVmIGFuZCAlZCV0JXMldCVmJXQlZyV0JW0KKyUgVGhlIGN1cnJlbnQgdGVuZGVuY3kgaXMgdG8gdXNlIHRoZSBmaXJzdCBmb3JtLCB3aGlsZSB0aGUgc2Vjb25kIGlzIHRoZSBtb3N0CislIHBvcHVsYXIgZm9ybSwgaXQgaXMgd2lkZXNwcmVhZCBhbmQgd2lkZWx5IGtub3duLgorJSBOb3cgd2Ugc3RpY2sgdG8gdGhlIHRyYWRpdGlvbmFsL29sZC9zZWNvbmQgZm9ybTogJWQldCVzJXQlZiV0JWcldCVtCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNzM+PFUwMDI1Pi8KKzxVMDA3ND48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+IgorJSBEbC4KK25hbWVfbXIgICAgICI8VTAwNDQ+PFUwMDZDPjxVMDAyRT4iCislIEQtbmEuCituYW1lX21ycyAgICAiPFUwMDQ0PjxVMDAyRD48VTAwNkU+PFUwMDYxPjxVMDAyRT4iCislIEQtcmEuCituYW1lX21pc3MgICAgICI8VTAwNDQ+PFUwMDJEPjxVMDA3Mj48VTAwNjE+PFUwMDJFPiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKKyUgRm9ybWF0IG9mIGFuIGFkZHJlc3MuIFRoZSBmaWVsZHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmcKKyUgKGluc3BpcmVkIG9yaWdpbmFseSBieSBnbGliYyBsb2NhbGUgZm9yIFVrcmFuaWFuKToKKworJSAlbiBQZXJzb24ncyBuYW1lLCBwb3NzaWJseSBjb25zdHJ1Y3RlZCB3aXRoIHRoZSBMQ19OQU1FCislICAgICJuYW1lX2ZtdCIga2V5d29yZC4gKGl0IGFwcGVhcnMgdG8gYmUgaW52YWxpZCkKKyUgJWEgQ2FyZSBvZiBwZXJzb24sIG9yIG9yZ2FuaXphdGlvbi4gCislICVmIEZpcm0gbmFtZS4gCislICVkIERlcGFydG1lbnQgbmFtZS4gCislICViIEJ1aWxkaW5nIG5hbWUuIAorJSAlcyBTdHJlZXQgb3IgYmxvY2sgKGVnLiBKYXBhbmVzZSkgbmFtZS4gCislICVoIEhvdXNlIG51bWJlciBvciBkZXNpZ25hdGlvbi4gCislICVOIEluc2VydCBhbiA8ZW5kLW9mLWxpbmU+IGlmIHRoZSBwcmV2aW91cyBkZXNjcmlwdG9yCislICAgIHZhbHVlIHdhcyBub3QgYW4gZW1wdHkgc3RyaW5nOyBvdGhlcndpc2UgaWdub3JlLgorJSAldCBJbnNlcnQgYSA8c3BhY2U+IGlmIHRoZSBwcmV2aW91cyBkZXNjcmlwdG9yIHZhbHVlCislICAgIHdhcyBub3QgYW4gZW1wdHkgc3RyaW5nOyBvdGhlcndpc2UgaWdub3JlLgorJSAlciBSb29tIG51bWJlciwgZG9vciBkZXNpZ25hdGlvbi4gCislICVlIEZsb29yIG51bWJlci4gCislICVDIENvdW50cnkgZGVzaWduYXRpb24sIGZyb20gdGhlIDxjb3VudHJ5X3Bvc3Q+IGtleXdvcmQuIAorJSAlbCBMb2NhbCB0b3duc2hpcCB3aXRoaW4gdG93biBvciBjaXR5LiAoaXQgYXBwZWFycyB0byBiZSBpbnZhbGlkKQorJSAleiBaaXAgbnVtYmVyLCBwb3N0YWwgY29kZS4gCislICVUIFRvd24sIGNpdHkuIAorJSAlUyBTdGF0ZSwgcHJvdmluY2UsIG9yIHByZWZlY3R1cmUuIAorJSAlYyBDb3VudHJ5LCBhcyB0YWtlbiBmcm9tIGRhdGEgcmVjb3JkLgorJQorJSBGSVhNRTogaXQgYXBwZWFycyB0aGF0ICVuIGFuZCAlbCBhcmUgbm90IHdvcmtpbmc7IGNvcnJlY3QgZm9ybSBpczoKKyUgJW4lTiVmJU4lYSVkJU4lcyV0JWglTiViJXQlZSV0JXIlTiVsJXoldCVUJU4lUyV0JWMlTgorJSBpbXBsZW1lbnRlZCBmb3JtOgorJSAlZiVOJWElZCVOJXMldCVoJU4lYiV0JWUldCVyJU4leiV0JVQlTiVTJXQlYyVOCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2Pi8KKzxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA3Mz48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjg+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2NT48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNzI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDdBPi8KKzxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNTM+LworPFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorJSBDb3VudHJ5IG5hbWVzIGFyZSBjYXBpdGFsaXplZDogUm9tYT5uaWEKK2NvdW50cnlfbmFtZSAiPFUwMDUyPjxVMDA2Rj48VTAwNkQ+PFUwMEUyPjxVMDA2RT48VTAwNjk+PFUwMDYxPiIKK2NvdW50cnlfYWIyICI8VTAwNTI+PFUwMDRGPiIKK2NvdW50cnlfYWIzICI8VTAwNTI+PFUwMDRGPjxVMDA1NT4iCitjb3VudHJ5X251bSA2NDIKK2NvdW50cnlfY2FyICI8VTAwNTI+PFUwMDRGPiIKKyUgSVNCTiBjb2RlIGlzIDk3MworJSBzZWU6IGh0dHA6Ly9ob21lcGFnZXMuY3dpLm5sL35kaWsvZW5nbGlzaC9jb2Rlcy9pc2JuLmh0bWwKKyUgYW5kIG90aGVyIHNvdXJjZXMKK2NvdW50cnlfaXNibiA5NzMKKyUgRklYTUU6IGlzIGl0IHJlYWxseSBSTz8KK2NvdW50cnlfcG9zdCAiPFUwMDUyPjxVMDA0Rj4iCislIGxhbmd1YWdlIG5hbWVzIGFyZSBub3QgY2FwaXRhbGl6ZWQgaW4gUm9tYW5pYW4gKCByb21hPm5hKCApCitsYW5nX25hbWUgIjxVMDA3Mj48VTAwNkY+PFUwMDZEPjxVMDBFMj48VTAwNkU+PFUwMTAzPiIKK2xhbmdfYWIgIjxVMDA3Mj48VTAwNkY+IgorJSBzZXQgdGhlIHRlcm1pbm9sb2d5IGNvZGUgdG8gInJvbiIgYXMgZGVmaW5lZCBpbiBpc282MzktMgorbGFuZ190ZXJtICI8VTAwNzI+PFUwMDZGPjxVMDA2RT4iCislIHNldCB0aGUgYmlibGlvZ3JhcGhpYyBjb2RlIHRvICJydW0iIGFzIGRlZmluZWQgaW4gaXNvNjM5LTIKK2xhbmdfbGliICI8VTAwNzI+PFUwMDc1PjxVMDA2RD4iCitFTkQgTENfQUREUkVTUworCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ydV9SVSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3J1X1JVCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZjgxNTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ydV9SVQpAQCAtMCwwICsxLDE4OSBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIFJ1c3NpYW4gTGFuZ3VhZ2UgTG9jYWxlIGZvciBSdXNzaWEKKyUgU291cmNlOiBSQVAKKyUgQWRkcmVzczogU2Fua3QgSm8vL3JnZW5zIEFsbGUgOAorJSAgICBESy0xNjE1IEtvLy9iZW5oYXZuIFYsIERhbm1hcmsKKyUgQ29udGFjdDogS2VsZCBTaW1vbnNlbgorJSBFbWFpbDogS2VsZC5TaW1vbnNlbkBka3V1Zy5kaworJSBUZWw6ICs0NSAtIDMxMjI2NTQzCislIEZheDogKzQ1IC0gMzMyNTY1NDMKKyUgTGFuZ3VhZ2U6IHJ1CislIFRlcnJpdG9yeTogUlUKKyUgUmV2aXNpb246IDQuMworJSBEYXRlOiAxOTk2LTEwLTE1CislIEFwcGxpY2F0aW9uOiBnZW5lcmFsCislIFVzZXJzOiBnZW5lcmFsCislIENoYXJzZXQ6IElTTy04ODU5LTUKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlJ1c3NpYW4gbG9jYWxlIGZvciBSdXNzaWEiCitzb3VyY2UgICAgICJSQVAiCithZGRyZXNzICAgICJTYW5rdCBKb3JnZW5zIEFsbGUgOCwgREstMTYxNSBLb2Jlbmhhdm4gViwgRGFubWFyayIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJSdXNzaWFuIgordGVycml0b3J5ICAiUnVzc2lhIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAicnVfUlU6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAicnVfUlU6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAicnVfUlU6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJydV9SVToyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgInJ1X1JVOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAicnVfUlU6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAicnVfUlU6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAicnVfUlU6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAicnVfUlU6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJydV9SVToyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgInJ1X1JVOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCisKKyUgaXNvMTQ2NTFfdDEgaXMgbWlzc2luZyBVa3JhaW5pYW4gZ2hlCitjb2xsYXRpbmctc3ltYm9sIDxVS1ItR0hFPgorCityZW9yZGVyLWFmdGVyIDxDWVItR1pIRT4KKzxVS1ItR0hFPgorCityZW9yZGVyLWFmdGVyIDxVMDQ1Mz4KKzxVMDQ5MT4gPFVLUi1HSEU+OzxCQVM+OzxNSU4+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDQwMz4KKzxVMDQ5MD4gPFVLUi1HSEU+OzxCQVM+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWVuZAorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworTENfTUVTU0FHRVMKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwNDE0PjxVMDQzND48VTAwNTk+PFUwMDc5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwNDFEPjxVMDQzRD48VTAwNEU+PFUwMDZFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgICAgICAiPFUwMDUyPjxVMDA1NT48VTAwNDI+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICAgIjxVMDQ0MD48VTA0NDM+PFUwNDMxPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgICAgICI8VTAwQTA+IgorbW9uX2dyb3VwaW5nICAgICAgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgICAgICAwCitwX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAgICAgMAorbl9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAgICAgMQorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgICAgIjxVMDAyQz4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICAgICI8VTAwQTA+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAgICAzOzMKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2RheSAgICAgIjxVMDQxMj48VTA0M0U+PFUwNDQxPjxVMDQzQT48VTA0NDA+PFUwNDM1PjxVMDQ0MT48VTA0MzU+PFUwNDNEPjxVMDQ0Qz48VTA0MzU+IjsvCisgICAgICAgICI8VTA0MUY+PFUwNDNFPjxVMDQzRD48VTA0MzU+PFUwNDM0PjxVMDQzNT48VTA0M0I+PFUwNDRDPjxVMDQzRD48VTA0Mzg+PFUwNDNBPiI7LworICAgICAgICAiPFUwNDEyPjxVMDQ0Mj48VTA0M0U+PFUwNDQwPjxVMDQzRD48VTA0Mzg+PFUwNDNBPiI7LworICAgICAgICAiPFUwNDIxPjxVMDQ0MD48VTA0MzU+PFUwNDM0PjxVMDQzMD4iOy8KKyAgICAgICAgIjxVMDQyNz48VTA0MzU+PFUwNDQyPjxVMDQzMj48VTA0MzU+PFUwNDQwPjxVMDQzMz4iOy8KKyAgICAgICAgIjxVMDQxRj48VTA0NEY+PFUwNDQyPjxVMDQzRD48VTA0Mzg+PFUwNDQ2PjxVMDQzMD4iOy8KKyAgICAgICAgIjxVMDQyMT48VTA0NDM+PFUwNDMxPjxVMDQzMT48VTA0M0U+PFUwNDQyPjxVMDQzMD4iCithYmRheSAgICI8VTA0MTI+PFUwNDQxPjxVMDQzQT4iOy8KKyAgICAgICAgIjxVMDQxRj48VTA0M0Q+PFUwNDM0PiI7LworICAgICAgICAiPFUwNDEyPjxVMDQ0Mj48VTA0NDA+IjsvCisgICAgICAgICI8VTA0MjE+PFUwNDQwPjxVMDQzND4iOy8KKyAgICAgICAgIjxVMDQyNz48VTA0NDI+PFUwNDMyPiI7LworICAgICAgICAiPFUwNDFGPjxVMDQ0Mj48VTA0M0Q+IjsvCisgICAgICAgICI8VTA0MjE+PFUwNDMxPjxVMDQ0Mj4iCittb24gICAgICI8VTA0MkY+PFUwNDNEPjxVMDQzMj48VTA0MzA+PFUwNDQwPjxVMDQ0Qz4iOy8KKyAgICAgICAgIjxVMDQyND48VTA0MzU+PFUwNDMyPjxVMDQ0MD48VTA0MzA+PFUwNDNCPjxVMDQ0Qz4iOy8KKyAgICAgICAgIjxVMDQxQz48VTA0MzA+PFUwNDQwPjxVMDQ0Mj4iOy8KKyAgICAgICAgIjxVMDQxMD48VTA0M0Y+PFUwNDQwPjxVMDQzNT48VTA0M0I+PFUwNDRDPiI7LworICAgICAgICAiPFUwNDFDPjxVMDQzMD48VTA0Mzk+IjsvCisgICAgICAgICI8VTA0MTg+PFUwNDRFPjxVMDQzRD48VTA0NEM+IjsvCisgICAgICAgICI8VTA0MTg+PFUwNDRFPjxVMDQzQj48VTA0NEM+IjsvCisgICAgICAgICI8VTA0MTA+PFUwNDMyPjxVMDQzMz48VTA0NDM+PFUwNDQxPjxVMDQ0Mj4iOy8KKyAgICAgICAgIjxVMDQyMT48VTA0MzU+PFUwNDNEPjxVMDQ0Mj48VTA0NEY+PFUwNDMxPjxVMDQ0MD48VTA0NEM+IjsvCisgICAgICAgICI8VTA0MUU+PFUwNDNBPjxVMDQ0Mj48VTA0NEY+PFUwNDMxPjxVMDQ0MD48VTA0NEM+IjsvCisgICAgICAgICI8VTA0MUQ+PFUwNDNFPjxVMDQ0Rj48VTA0MzE+PFUwNDQwPjxVMDQ0Qz4iOy8KKyAgICAgICAgIjxVMDQxND48VTA0MzU+PFUwNDNBPjxVMDQzMD48VTA0MzE+PFUwNDQwPjxVMDQ0Qz4iCithYm1vbiAgICI8VTA0MkY+PFUwNDNEPjxVMDQzMj4iOy8KKyAgICAgICAgIjxVMDQyND48VTA0MzU+PFUwNDMyPiI7LworICAgICAgICAiPFUwNDFDPjxVMDQzMD48VTA0NDA+IjsvCisgICAgICAgICI8VTA0MTA+PFUwNDNGPjxVMDQ0MD4iOy8KKyAgICAgICAgIjxVMDQxQz48VTA0MzA+PFUwNDM5PiI7LworICAgICAgICAiPFUwNDE4PjxVMDQ0RT48VTA0M0Q+IjsvCisgICAgICAgICI8VTA0MTg+PFUwNDRFPjxVMDQzQj4iOy8KKyAgICAgICAgIjxVMDQxMD48VTA0MzI+PFUwNDMzPiI7LworICAgICAgICAiPFUwNDIxPjxVMDQzNT48VTA0M0Q+IjsvCisgICAgICAgICI8VTA0MUU+PFUwNDNBPjxVMDQ0Mj4iOy8KKyAgICAgICAgIjxVMDQxRD48VTA0M0U+PFUwNDRGPiI7LworICAgICAgICAiPFUwNDE0PjxVMDQzNT48VTA0M0E+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj4vCis8VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND4iCitkX2ZtdCAgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJFPjxVMDAyNT48VTAwNkQ+PFUwMDJFPjxVMDAyNT48VTAwNTk+IgordF9mbXQgICAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgICAiIjsiIgordF9mbXRfYW1wbSAiIgorZGF0ZV9mbXQgICAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorZmlyc3Rfd2Vla2RheSAyCitmaXJzdF93b3JrZGF5IDIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCislIEZJWE1FCitoZWlnaHQgICAyOTcKKyUgRklYTUUKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzc+IgoraW50X3NlbGVjdCAgICAgIjxVMDAzMD48VTAwN0U+PFUwMDMxPjxVMDAzMD4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCislIEZJWE1FCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICI8VTAwNTI+PFUwMDU1PiIKK2NvdW50cnlfYWIzICI8VTAwNTI+PFUwMDU1PjxVMDA1Mz4iCitjb3VudHJ5X251bSA2NDMKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ydV9VQSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3J1X1VBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyY2E3YjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9ydV9VQQpAQCAtMCwwICsxLDE3OCBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIFJ1c3NpYW4gTGFuZ3VhZ2UgTG9jYWxlIGZvciBVa3JhaW5lCislIFNvdXJjZTogUkZDIDIzMTkKKyUgQ29udGFjdDogRGVuaXMgVi4gRG1pdHJpZW5rbworJSBFbWFpbDogZGVuaXNAZGVuaXgub3JnCislIExhbmd1YWdlOiBydQorJSBUZXJyaXRvcnk6IFVBCislIFJldmlzaW9uOiAxLjIKKyUgRGF0ZTogMTk5OC0wNS0wMworJSBBcHBsaWNhdGlvbjogZ2VuZXJhbAorJSBVc2VyczogZ2VuZXJhbAorJSBDaGFyc2V0OiBLT0k4LVUKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlJ1c3NpYW4gbG9jYWxlIGZvciBVa3JhaW5lIgorc291cmNlICAgICAiUkZDIDIzMTkiCithZGRyZXNzICAgICIiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiUnVzc2lhbiIKK3RlcnJpdG9yeSAgIlVrcmFpbmUiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA2LTI5IgorJQorY2F0ZWdvcnkgICJydV9VQToyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJydV9VQToyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJydV9VQToyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgInJ1X1VBOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAicnVfVUE6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJydV9VQToyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJydV9VQToyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJydV9VQToyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJydV9VQToyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgInJ1X1VBOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAicnVfVUE6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAicnVfUlUiCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCisKKyUgaXNvMTQ2NTFfdDEgaXMgbWlzc2luZyBVa3JhaW5pYW4gZ2hlCitjb2xsYXRpbmctc3ltYm9sIDxVS1ItR0hFPgorCityZW9yZGVyLWFmdGVyIDxDWVItR1pIRT4KKzxVS1ItR0hFPgorCityZW9yZGVyLWFmdGVyIDxVMDQ1Mz4KKzxVMDQ5MT4gPFVLUi1HSEU+OzxCQVM+OzxNSU4+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDQwMz4KKzxVMDQ5MD4gPFVLUi1HSEU+OzxCQVM+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWVuZAorRU5EIExDX0NPTExBVEUKKworTENfTUVTU0FHRVMKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwNDE0PjxVMDQzND48VTAwNTk+PFUwMDc5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwNDFEPjxVMDQzRD48VTAwNEU+PFUwMDZFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgICAgICAiPFUwMDU1PjxVMDA0MT48VTAwNDg+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICAgIjxVMDQzMz48VTA0NDA+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICAgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAgICAgIjxVMDAyMD4iCittb25fZ3JvdXBpbmcgICAgICAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDAKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgICAgICAwCituX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgICAgICAxCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludCAgICAgICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgICAgIjxVMDAyRT4iCitncm91cGluZyAgICAgICAgICAgICAgICAgIDM7MworRU5EIExDX05VTUVSSUMKKworTENfVElNRQorZGF5ICAgICAiPFUwNDEyPjxVMDQzRT48VTA0NDE+PFUwNDNBPjxVMDQ0MD48VTA0MzU+PFUwNDQxPjxVMDQzNT48VTA0M0Q+PFUwNDRDPjxVMDQzNT4iOy8KKyAgICAgICAgIjxVMDQxRj48VTA0M0U+PFUwNDNEPjxVMDQzNT48VTA0MzQ+PFUwNDM1PjxVMDQzQj48VTA0NEM+PFUwNDNEPjxVMDQzOD48VTA0M0E+IjsvCisgICAgICAgICI8VTA0MTI+PFUwNDQyPjxVMDQzRT48VTA0NDA+PFUwNDNEPjxVMDQzOD48VTA0M0E+IjsvCisgICAgICAgICI8VTA0MjE+PFUwNDQwPjxVMDQzNT48VTA0MzQ+PFUwNDMwPiI7LworICAgICAgICAiPFUwNDI3PjxVMDQzNT48VTA0NDI+PFUwNDMyPjxVMDQzNT48VTA0NDA+PFUwNDMzPiI7LworICAgICAgICAiPFUwNDFGPjxVMDQ0Rj48VTA0NDI+PFUwNDNEPjxVMDQzOD48VTA0NDY+PFUwNDMwPiI7LworICAgICAgICAiPFUwNDIxPjxVMDQ0Mz48VTA0MzE+PFUwNDMxPjxVMDQzRT48VTA0NDI+PFUwNDMwPiIKK2FiZGF5ICAgIjxVMDQxMj48VTA0NDE+PFUwNDNBPiI7LworICAgICAgICAiPFUwNDFGPjxVMDQzRD48VTA0MzQ+IjsvCisgICAgICAgICI8VTA0MTI+PFUwNDQyPjxVMDQzRT4iOy8KKyAgICAgICAgIjxVMDQyMT48VTA0NDA+PFUwNDM0PiI7LworICAgICAgICAiPFUwNDI3PjxVMDQ0Mj48VTA0MzI+IjsvCisgICAgICAgICI8VTA0MUY+PFUwNDQyPjxVMDQzRD4iOy8KKyAgICAgICAgIjxVMDQyMT48VTA0NDM+PFUwNDMxPiIKK21vbiAgICAgIjxVMDQyRj48VTA0M0Q+PFUwNDMyPjxVMDQzMD48VTA0NDA+PFUwNDRDPiI7LworICAgICAgICAiPFUwNDI0PjxVMDQzNT48VTA0MzI+PFUwNDQwPjxVMDQzMD48VTA0M0I+PFUwNDRDPiI7LworICAgICAgICAiPFUwNDFDPjxVMDQzMD48VTA0NDA+PFUwNDQyPiI7LworICAgICAgICAiPFUwNDEwPjxVMDQzRj48VTA0NDA+PFUwNDM1PjxVMDQzQj48VTA0NEM+IjsvCisgICAgICAgICI8VTA0MUM+PFUwNDMwPjxVMDQzOT4iOy8KKyAgICAgICAgIjxVMDQxOD48VTA0NEU+PFUwNDNEPjxVMDQ0Qz4iOy8KKyAgICAgICAgIjxVMDQxOD48VTA0NEU+PFUwNDNCPjxVMDQ0Qz4iOy8KKyAgICAgICAgIjxVMDQxMD48VTA0MzI+PFUwNDMzPjxVMDQ0Mz48VTA0NDE+PFUwNDQyPiI7LworICAgICAgICAiPFUwNDIxPjxVMDQzNT48VTA0M0Q+PFUwNDQyPjxVMDQ0Rj48VTA0MzE+PFUwNDQwPjxVMDQ0Qz4iOy8KKyAgICAgICAgIjxVMDQxRT48VTA0M0E+PFUwNDQyPjxVMDQ0Rj48VTA0MzE+PFUwNDQwPjxVMDQ0Qz4iOy8KKyAgICAgICAgIjxVMDQxRD48VTA0M0U+PFUwNDRGPjxVMDQzMT48VTA0NDA+PFUwNDRDPiI7LworICAgICAgICAiPFUwNDE0PjxVMDQzNT48VTA0M0E+PFUwNDMwPjxVMDQzMT48VTA0NDA+PFUwNDRDPiIKK2FibW9uICAgIjxVMDQyRj48VTA0M0Q+PFUwNDMyPiI7LworICAgICAgICAiPFUwNDI0PjxVMDQzNT48VTA0MzI+IjsvCisgICAgICAgICI8VTA0MUM+PFUwNDMwPjxVMDQ0MD4iOy8KKyAgICAgICAgIjxVMDQxMD48VTA0M0Y+PFUwNDQwPiI7LworICAgICAgICAiPFUwNDFDPjxVMDQzMD48VTA0Mzk+IjsvCisgICAgICAgICI8VTA0MTg+PFUwNDRFPjxVMDQzRD4iOy8KKyAgICAgICAgIjxVMDQxOD48VTA0NEU+PFUwNDNCPiI7LworICAgICAgICAiPFUwNDEwPjxVMDQzMj48VTA0MzM+IjsvCisgICAgICAgICI8VTA0MjE+PFUwNDM1PjxVMDQzRD4iOy8KKyAgICAgICAgIjxVMDQxRT48VTA0M0E+PFUwNDQyPiI7LworICAgICAgICAiPFUwNDFEPjxVMDQzRT48VTA0NEY+IjsvCisgICAgICAgICI8VTA0MTQ+PFUwNDM1PjxVMDQzQT4iCitkX3RfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPi8KKzxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PiIKK2RfZm10ICAgICAiPFUwMDI1PjxVMDA2ND48VTAwMkU+PFUwMDI1PjxVMDA2RD48VTAwMkU+PFUwMDI1PjxVMDA1OT4iCit0X2ZtdCAgICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAgICIiOyIiCit0X2ZtdF9hbXBtICIiCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorJSBGSVhNRQoraGVpZ2h0ICAgMjk3CislIEZJWE1FCit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDMzPjxVMDAzOD48VTAwMzA+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorJSBGSVhNRQorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAiPFUwMDU1PjxVMDA0MT4iCitjb3VudHJ5X2FiMyAiPFUwMDU1PjxVMDA0Qj48VTAwNTI+IgorY291bnRyeV9udW0gODA0CitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvcndfUlcgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9yd19SVwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzdkZjRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvcndfUlcKQEAgLTAsMCArMSwxNTMgQEAKK2VzY2FwZV9jaGFyIC8KK2NvbW1lbnRfY2hhciAlCislIExvY2FsZSBmb3IgS2lueWFyd2FuZGEgbG9jYWxlIGluIFJ3YW5kYQorJSBDb250cmlidXRlZCBieSBTdGV2ZSBNdXJwaHkgPG11cmZAZS10b29scy5jb20+LCAyMDA0CislIHdpdGggaGVscCBmcm9tOgorJSAgTXIuIFNhZmFsaQorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiS2lueWFyd2FuZGEgbGFuZ3VhZ2UgbG9jYWxlIGZvciBSd2FuZGEiCitzb3VyY2UgICAgICJSd2FuZGEiCithZGRyZXNzICAgICJSd2FuZGEsIEFmcmljYSIKK2NvbnRhY3QgICAgIlN0ZXZlIE11cnBoeSIKK2VtYWlsICAgICAgIm11cmZAZS10b29scy5jb20iCit0ZWwgICAgICAgICIxLTMwNy03NTQtNTY3NSIKK2ZheCAgICAgICAgIjEtMzA3LTc1NC01Njc1IgorbGFuZ3VhZ2UgICAiS2lueWFyd2FuZGEiCit0ZXJyaXRvcnkgICJSd2FuZGEiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDA0LTAyLTI0IgorJQorY2F0ZWdvcnkgICJpMThuOjE5OTciO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImkxOG46MTk5NyI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiaTE4bjoxOTk3IjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImkxOG46MTk5NyI7TENfVElNRQorY2F0ZWdvcnkgICJpMThuOjE5OTciO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiaTE4bjoxOTk3IjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJpMThuOjE5OTciO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImkxOG46MTk5NyI7TENfUEFQRVIKK2NhdGVnb3J5ICAiaTE4bjoxOTk3IjtMQ19NRUFTVVJFTUVOVAorY2F0ZWdvcnkgICJpMThuOjE5OTciO0xDX05BTUUKK2NhdGVnb3J5ICAiaTE4bjoxOTk3IjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImkxOG46MTk5NyI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiaTE4biIKKwordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCislIENvcHkgdGhlIHRlbXBsYXRlIGZyb20gSVNPL0lFQyAxNDY1MQorY29weSAiaXNvMTQ2NTFfdDEiCitFTkQgTENfQ09MTEFURQorCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAgICI8VTAwNTI+PFUwMDU3PjxVMDA0Nj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICAgICAiPFUwMDQ2PjxVMDA3Mj48VTAwNzc+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICAgICAiPFUwMDJDPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAgICAgIjxVMDAyRT4iCittb25fZ3JvdXBpbmcgICAgICAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDAKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgICAgICAwCituX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgICAgICAxCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludCAgICAgICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgICAgIiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgICAgLTEKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgIjxVMDA0RD48VTAwNzc+PFUwMDY1PiI7IjxVMDA0RD48VTAwNjI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDRCPjxVMDA2MT48VTAwNjI+IjsiPFUwMDQ3PjxVMDA3ND48VTAwNzU+IjsvCisgICAgICAgICI8VTAwNEI+PFUwMDYxPjxVMDA2RT4iOyI8VTAwNDc+PFUwMDZFPjxVMDA3NT4iOy8KKyAgICAgICAgIjxVMDA0Nz48VTAwNkU+PFUwMDY0PiIKK2RheSAgICAgIjxVMDA0Qj48VTAwNzU+PFUwMDIwPjxVMDA2Mz48VTAwNzk+PFUwMDc1PjxVMDA2RD48VTAwNzc+PFUwMDY1PjxVMDA3Mj48VTAwNzU+IjsvCisgICAgICAgICI8VTAwNEI+PFUwMDc1PjxVMDA3Nz48VTAwNjE+PFUwMDIwPjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNEI+PFUwMDc1PjxVMDA3Nz48VTAwNjE+PFUwMDIwPjxVMDA2Qj48VTAwNjE+PFUwMDYyPjxVMDA2OT48VTAwNzI+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDRCPjxVMDA3NT48VTAwNzc+PFUwMDYxPjxVMDAyMD48VTAwNjc+PFUwMDYxPjxVMDA3ND48VTAwNjE+PFUwMDc0PjxVMDA3NT4iOy8KKyAgICAgICAgIjxVMDA0Qj48VTAwNzU+PFUwMDc3PjxVMDA2MT48VTAwMjA+PFUwMDZCPjxVMDA2MT48VTAwNkU+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDRCPjxVMDA3NT48VTAwNzc+PFUwMDYxPjxVMDAyMD48VTAwNjc+PFUwMDYxPjxVMDA3ND48VTAwNjE+PFUwMDZFPjxVMDA3NT4iOy8KKyAgICAgICAgIjxVMDA0Qj48VTAwNzU+PFUwMDc3PjxVMDA2MT48VTAwMjA+PFUwMDY3PjxVMDA2MT48VTAwNzQ+PFUwMDYxPjxVMDA2RT48VTAwNjQ+PFUwMDYxPjxVMDA3ND48VTAwNzU+IgorYWJtb24gICAiPFUwMDREPjxVMDA3NT48VTAwNzQ+IjsiPFUwMDQ3PjxVMDA2MT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNTc+PFUwMDY1PjxVMDA3Mj4iOyI8VTAwNEQ+PFUwMDYxPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA0Nz48VTAwNjk+PFUwMDYzPiI7IjxVMDA0Qj48VTAwNjE+PFUwMDZEPiI7LworICAgICAgICAiPFUwMDRFPjxVMDA3OT48VTAwNjE+IjsiPFUwMDRCPjxVMDA2MT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNEU+PFUwMDdBPjxVMDA2NT4iOyI8VTAwNTU+PFUwMDZCPjxVMDA3Nz4iOy8KKyAgICAgICAgIjxVMDA1NT48VTAwNjc+PFUwMDc1PiI7IjxVMDA1NT48VTAwNkI+PFUwMDc1PiIKK21vbiAgICAgIjxVMDA0RD48VTAwNzU+PFUwMDc0PjxVMDA2MT48VTAwNzI+PFUwMDYxPjxVMDA2RD48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNDc+PFUwMDYxPjxVMDA3Mz48VTAwNjg+PFUwMDc5PjxVMDA2MT48VTAwNkU+PFUwMDc0PjxVMDA2MT48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDU3PjxVMDA2NT48VTAwNzI+PFUwMDc1PjxVMDA3Mj48VTAwNzc+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzQ+PFUwMDYxPiI7LworICAgICAgICAiPFUwMDQ3PjxVMDA2OT48VTAwNjM+PFUwMDc1PjxVMDA3Mj48VTAwNjE+PFUwMDZFPjxVMDA3Mz48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNEI+PFUwMDYxPjxVMDA2RD48VTAwNjU+PFUwMDZFPjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA0RT48VTAwNzk+PFUwMDYxPjxVMDA2Qj48VTAwNjE+PFUwMDZFPjxVMDA2Nz48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNEI+PFUwMDYxPjxVMDA2RT48VTAwNjE+PFUwMDZEPjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA0RT48VTAwN0E+PFUwMDY1PjxVMDA2Qz48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNTU+PFUwMDZCPjxVMDA3Nz48VTAwNjE+PFUwMDZCPjxVMDA2OT48VTAwNzI+PFUwMDYxPiI7LworICAgICAgICAiPFUwMDU1PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA2OD48VTAwNzk+PFUwMDY5PjxVMDA2RT48VTAwNjc+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDU1PjxVMDA2Qj48VTAwNzU+PFUwMDYyPjxVMDA2Rj48VTAwN0E+PFUwMDYxPiIKK2RfdF9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkU+PFUwMDI1PjxVMDA2RD48VTAwMkU+PFUwMDI1PjxVMDA1OT4iCit0X2ZtdCAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgIiI7IiIKK3RfZm10X2FtcG0gIiIKK2RhdGVfZm10ICAgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA3OT48VTAwNTk+PFUwMDVEPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNkY+PFUwMDRGPjxVMDA1RD4iCitFTkQgTENfTUVTU0FHRVMKKworTENfUEFQRVIKK2hlaWdodCAgIDI5Nword2lkdGggICAgMjEwCitFTkQgTENfUEFQRVIKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfbmFtZSAgICI8VTAwNTI+PFUwMDc3PjxVMDA2MT48VTAwNkU+PFUwMDY0PjxVMDA2MT4iCitjb3VudHJ5X2FiMiAgICAiPFUwMDUyPjxVMDA1Nz4iCitjb3VudHJ5X2FiMyAgICAiPFUwMDUyPjxVMDA1Nz48VTAwNDE+IgorbGFuZ19uYW1lICAgICAgIjxVMDA0Qj48VTAwNjk+PFUwMDZFPjxVMDA3OT48VTAwNjE+PFUwMDcyPjxVMDA3Nz48VTAwNjE+PFUwMDZFPjxVMDA2ND48VTAwNjE+IgorbGFuZ19hYiAgICAgICAgIjxVMDA3Mj48VTAwNzc+IgorbGFuZ190ZXJtICAgICAgIjxVMDA2Qj48VTAwNjk+PFUwMDZFPiIKK2xhbmdfbGliICAgICAgICI8VTAwNkI+PFUwMDY5PjxVMDA2RT4iCitFTkQgTENfQUREUkVTUworCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCit0ZWxfZG9tX2ZtdCAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzI+PFUwMDM1PjxVMDAzMD4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3NhX0lOIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc2FfSU4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUwZDgwYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3NhX0lOCkBAIC0wLDAgKzEsMjU0IEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKyUgU2Fuc2tyaXQgbGFuZ3VhZ2UgbG9jYWxlIGZvciBJbmRpYS4KKyUgQ29udHJpYnV0ZWQgYnkgVmlkeWEgQXllciA8c3Zha3NoYUBnbWFpbC5jb20+CislIGFuZCBDaHJpc3RpYW4gUGVycmllciA8YnVidWxsZUBkZWJpYW4ub3JnPgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiU2Fuc2tyaXQgbGFuZ3VhZ2UgbG9jYWxlIGZvciBJbmRpYSIKK3NvdXJjZSAgICAgIlRoZSBEZWJpYW4gcHJvamVjdCIKK2FkZHJlc3MgICAgIiIKK2NvbnRhY3QgICAgIkNocmlzdGlhbiBQZXJyaWVyIgorZW1haWwgICAgICAiYnVidWxsZUBkZWJpYW4ub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiU2Fuc2tyaXQiCit0ZXJyaXRvcnkgICJJbmRpYSIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDUtMDktMjUiCislCitjYXRlZ29yeSAgInNhX0lOOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgInNhX0lOOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgInNhX0lOOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAic2FfSU46MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJzYV9JTjoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgInNhX0lOOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgInNhX0lOOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgInNhX0lOOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgInNhX0lOOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAic2FfSU46MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJzYV9JTjoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorCislIENvcHkgdGhlIHRlbXBsYXRlIGZyb20gSVNPL0lFQyAxNDY1MQorY29weSAiaXNvMTQ2NTFfdDEiCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIHRoZSBMQ19NT05FVEFSWSBjYXRlZ29yeS4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS9KYXZhCislCitpbnRfY3Vycl9zeW1ib2wgICAgICAgIjxVMDA0OT48VTAwNEU+PFUwMDUyPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgIjxVMDkzMD48VTA5NDI+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgIDMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAxCislCitFTkQgTENfTU9ORVRBUlkKKworCitMQ19OVU1FUklDCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTlVNRVJJQyAgY2F0ZWdvcnkuCislCitkZWNpbWFsX3BvaW50ICAgICAgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAiPFUwMDJDPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgMworJQorRU5EIExDX05VTUVSSUMKKworCitMQ19USU1FCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfVElNRSBjYXRlZ29yeS4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS9KYXZhCislCislIEFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZXMgKCVhKQorJSByYXZpaCxzb21haCxtYW5nYWxhaCxidWRoYWgsYnJoYXNwYXRpaCxzaHVrcmEsc2hhbmloCithYmRheSAgICAgICAiPFUwOTMwPjxVMDkzNT48VTA5M0Y+PFUwOTAzPiI7LworICAgICAgICAgICAgIjxVMDkzOD48VTA5NEI+PFUwOTJFPjxVMDAzQT4iOy8KKyAgICAgICAgICAgICI8VTA5MkU+PFUwOTAyPjxVMDkxNz48VTA5MzI+PFUwMDNBPiI7LworICAgICAgICAgICAgIjxVMDkyQz48VTA5NDE+PFUwOTI3PjxVMDAzQT4iOy8KKyAgICAgICAgICAgICI8VTA5MkM+PFUwOTQzPjxVMDkzOT48VTA5Mzg+PFUwOTREPjxVMDkyQT48VTA5MjQ+PFUwOTNGPjxVMDkwMz4iOy8KKyAgICAgICAgICAgICI8VTA5MzY+PFUwOTQxPjxVMDkxNT48VTA5NEQ+PFUwOTMwPiI7LworICAgICAgICAgICAgIjxVMDkzNj48VTA5Mjg+PFUwOTNGPjxVMDAzQT4iCislCislIEZ1bGwgd2Vla2RheSBuYW1lcyAoJUEpCislIHJhdml2YXNhcmFoLCBzb21hdmFzYXJhaCwgbWFuZ2FsYXZhc2FyYWgsIGJ1ZGhhdmFzYXJhaCwgYnJoYXNwYXRpdmFzYXJhaCwgc2h1a3JhdmFzYXJhaCwgc2hhbml2YXNhcmFoCitkYXkgICAgICAgICAiPFUwOTMwPjxVMDkzNT48VTA5M0Y+PFUwOTM1PjxVMDkzRT48VTA5Mzg+PFUwOTMwPjxVMDAzQT4iOy8KKyAgICAgICAgICAgICI8VTA5Mzg+PFUwOTRCPjxVMDkyRT48VTA5MzU+PFUwOTNFPjxVMDkzOD48VTA5MzA+PFUwMDNBPiI7LworICAgICAgICAgICAgIjxVMDkyRT48VTA5MDI+PFUwOTE3PjxVMDkzMj48VTA5MzU+PFUwOTNFPjxVMDkzOD48VTA5MzA+PFUwMDNBPiI7LworICAgICAgICAgICAgIjxVMDkyQz48VTA5NDE+PFUwOTI3PjxVMDkzNT48VTA5M0U+PFUwOTM4PjxVMDkzMD48VTAwM0E+IjsvCisgICAgICAgICAgICAiPFUwOTJDPjxVMDk0Mz48VTA5Mzk+PFUwOTM4PjxVMDk0RD48VTA5MkE+PFUwOTI0PjxVMDkzRj48VTA5MzU+PFUwOTNFPjxVMDkzOD48VTA5MzA+PFUwOTAzPiI7LworICAgICAgICAgICAgIjxVMDkzNj48VTA5NDE+PFUwOTE1PjxVMDk0RD48VTA5MzA+PFUwOTM1PjxVMDkzRT48VTA5Mzg+PFUwOTMwPiI7LworICAgICAgICAgICAgIjxVMDkzNj48VTA5Mjg+PFUwOTNGPjxVMDkzNT48VTA5M0U+PFUwOTM4PjxVMDkzMD48VTAwM0E+IgorJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCislIEJlbG93IGNvbWVzIGZyb20gaGlfSU4uCislIFNhbnNrcml0IHVzZXMgYSBsdW5hciBjYWxlbmRhci4gV2hlbiBncmVnb3JpYW4gbW9udGggbmFtZXMKKyUgYXJlIG5lZWRlZCwgdGhlIG5hbWVzIGFyZSB0aGUgc2FtZSBuYW1lcyB0aGFuIHRob3NlIHVzZWQKKyUgYnkgSGluZGkKKyUgbmFtZXMgZm9yIGdyZWdvcmlhbiBtb250aCBuYW1lczoKK2FibW9uICAgICAgICI8VTA5MUM+PFUwOTI4PjxVMDkzNT48VTA5MzA+PFUwOTQwPiI7LworICAgICAgICAgICAgIjxVMDkyQj48VTA5M0M+PFUwOTMwPjxVMDkzNT48VTA5MzA+PFUwOTQwPiI7LworICAgICAgICAgICAgIjxVMDkyRT48VTA5M0U+PFUwOTMwPjxVMDk0RD48VTA5MUE+IjsvCisgICAgICAgICAgICAiPFUwOTA1PjxVMDkyQT48VTA5NEQ+PFUwOTMwPjxVMDk0Nz48VTA5MzI+IjsvCisgICAgICAgICAgICAiPFUwOTJFPjxVMDkwOD4iOy8KKyAgICAgICAgICAgICI8VTA5MUM+PFUwOTQyPjxVMDkyOD4iOy8KKyAgICAgICAgICAgICI8VTA5MUM+PFUwOTQxPjxVMDkzMj48VTA5M0U+PFUwOTA4PiI7LworICAgICAgICAgICAgIjxVMDkwNT48VTA5MTc+PFUwOTM4PjxVMDk0RD48VTA5MjQ+IjsvCisgICAgICAgICAgICAiPFUwOTM4PjxVMDkzRj48VTA5MjQ+PFUwOTJFPjxVMDk0RD48VTA5MkM+PFUwOTMwPiI7LworICAgICAgICAgICAgIjxVMDkwNT48VTA5MTU+PFUwOTREPjxVMDkxRj48VTA5NDI+PFUwOTJDPjxVMDkzMD4iOy8KKyAgICAgICAgICAgICI8VTA5Mjg+PFUwOTM1PjxVMDkyRT48VTA5NEQ+PFUwOTJDPjxVMDkzMD4iOy8KKyAgICAgICAgICAgICI8VTA5MjY+PFUwOTNGPjxVMDkzOD48VTA5MkU+PFUwOTREPjxVMDkyQz48VTA5MzA+IgorJQorJSBGdWxsIG1vbnRoIG5hbWVzICglQikKKyUgU2Fuc2tyaXQgdXNlcyBhIGx1bmFyIGNhbGVuZGFyLiBXaGVuIGdyZWdvcmlhbiBtb250aCBuYW1lcworJSBhcmUgbmVlZGVkLCB0aGUgbmFtZXMgYXJlIHRoZSBzYW1lIG5hbWVzIHRoYW4gdGhvc2UgdXNlZAorJSBieSBIaW5kaQorJSBMdW5hciBjYWxlbmRhciBtb250aCBuYW1lczoKKyUgQ2hhaXRyYSAgICAgICAgICAgIE1hcmNoIDIyCislIFZhaXNha2hhICAgICAgICAgICBBcHJpbCAyOQorJSBqeWVzaHRoYWggICAgICAgICAgTWF5IDIyCislIGFzaGFkYWggICAgICAgICAgICBKdW5lIDIyCislIHNocmF2YW5haCAgICAgICAgICBKdWx5IDIzCislIGJoYWRyYXBhZGFoICAgICAgICBBdWd1c3QgMjMKKyUgYXNodmluYWggICAgICAgICAgIFNlcHRlbWJlciAyMworJSBrYXJ0aWthaCAgICAgICAgICAgT2N0b2JlciAyMworJSBtYXJnYXNoaXJzYWggICAgICAgTm92ZW1iZXIgMjIKKyUgcGF1c2hhaCAgICAgICAgICAgIERlY2VtYmVyIDIyCislIG1hZ2hhaCAgICAgICAgICAgICBKYW51YXJ5IDI5CislIHBoYWxndW5haCAgICAgICAgICBGZWJydWFyeSAyMAorJSBuYW1lcyBmb3IgZ3JlZ29yaWFuIG1vbnRoIG5hbWVzOgorbW9uICAgICAgICAgIjxVMDkxQz48VTA5Mjg+PFUwOTM1PjxVMDkzMD48VTA5NDA+IjsvCisgICAgICAgICAgICAiPFUwOTJCPjxVMDkzQz48VTA5MzA+PFUwOTM1PjxVMDkzMD48VTA5NDA+IjsvCisgICAgICAgICAgICAiPFUwOTJFPjxVMDkzRT48VTA5MzA+PFUwOTREPjxVMDkxQT4iOy8KKyAgICAgICAgICAgICI8VTA5MDU+PFUwOTJBPjxVMDk0RD48VTA5MzA+PFUwOTQ3PjxVMDkzMj4iOy8KKyAgICAgICAgICAgICI8VTA5MkU+PFUwOTA4PiI7LworICAgICAgICAgICAgIjxVMDkxQz48VTA5NDI+PFUwOTI4PiI7LworICAgICAgICAgICAgIjxVMDkxQz48VTA5NDE+PFUwOTMyPjxVMDkzRT48VTA5MDg+IjsvCisgICAgICAgICAgICAiPFUwOTA1PjxVMDkxNz48VTA5Mzg+PFUwOTREPjxVMDkyND4iOy8KKyAgICAgICAgICAgICI8VTA5Mzg+PFUwOTNGPjxVMDkyND48VTA5MkU+PFUwOTREPjxVMDkyQz48VTA5MzA+IjsvCisgICAgICAgICAgICAiPFUwOTA1PjxVMDkxNT48VTA5NEQ+PFUwOTFGPjxVMDk0Mj48VTA5MkM+PFUwOTMwPiI7LworICAgICAgICAgICAgIjxVMDkyOD48VTA5MzU+PFUwOTJFPjxVMDk0RD48VTA5MkM+PFUwOTMwPiI7LworICAgICAgICAgICAgIjxVMDkyNj48VTA5M0Y+PFUwOTM4PjxVMDkyRT48VTA5NEQ+PFUwOTJDPjxVMDkzMD4iCislCislIEVxdWl2YWxlbnQgb2YgQU0gUE0KK2FtX3BtICAgICAgICI8VTA5MkE+PFUwOTQyPjxVMDkzMD48VTA5NEQ+PFUwOTM1PjxVMDkzRT48VTA5Mzk+PFUwOTREPjxVMDkyOD4iOy8KKyAgICAgICAgICAgICI8VTA5MDU+PFUwOTJBPjxVMDkzMD48VTA5M0U+PFUwOTM5PjxVMDk0RD48VTA5Mjg+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uCislICVBICVkICViICVZJUk6JU06JVMgICVaCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA0MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj4vCis8VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+LworPFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24KKyUgJUEgJWQgJWIgJVkKK2RfZm10ICAgICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPi8KKzxVMDAyMD48VTAwMjU+PFUwMDU5PiIKKyUKKyUgQXBwcm9wcmlhdGUgdGltZSByZXByZXNlbnRhdGlvbgorJSAlSTolTTolUyAgJVoKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPi8KKzxVMDAyMD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIDEyIGggdGltZSByZXByZXNlbnRhdGlvbiAoJXIpCit0X2ZtdF9hbXBtICAiPFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA3MD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCisKK0xDX01FU1NBR0VTCislICJeW2FBeVldLioiCislICAiXltuTl0uKiIKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDYxPjxVMDA0MT48VTAwNzk+PFUwMDU5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworCitMQ19QQVBFUgorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19QQVBFUiBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgoraGVpZ2h0ICAgICAgMjk3Cit3aWR0aCAgICAgICAyMTAKKworRU5EIExDX1BBUEVSCisKKworTENfTkFNRQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19OQU1FIGNhdGVnb3J5LgorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNzA+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2Nz4iCituYW1lX2dlbiAgICAiIgorJQorJSBzaHJpCituYW1lX21yICAgICAiPFUwOTM2PjxVMDk0RD48VTA5MzA+PFUwOTQwPiIKKyUgRm9yIGJveXMgdW5kZXIgMTgsIHRoaXMgaXMgImt1bWFyIgorJSBidXQgbG9jYWxlcyBhcmUgc2V4aXN0IGFuZCBkbyBub3QgZXZlbiBpbWFnaW5lCislIHRoYXQgc29tZSBsYW5ndWFnZSBtYXkgaGF2ZSBkaWZmZXJlbnQgZm9ybXMgZm9yIE1FTiB0b28KKyUgbmFtZV9tciAgICAgIjxVMDkxNT48VTA5NDE+PFUwOTJFPjxVMDkzRT48VTA5MzA+IgorJSBzaHJpbWF0aQorbmFtZV9tcnMgICAgIjxVMDkzNj48VTA5NEQ+PFUwOTMwPjxVMDk0MD48VTA5MkU+PFUwOTI0PjxVMDk0MD4iCislIGt1bWFyaQorbmFtZV9taXNzICAgIjxVMDkxNT48VTA5NDE+PFUwOTJFPjxVMDkzRT48VTA5MzA+PFUwOTQwPiIKKyUgc2hyaW1hdGkKK25hbWVfbXMgICAgICI8VTA5MzY+PFUwOTREPjxVMDkzMD48VTA5NDA+PFUwOTJFPjxVMDkyND48VTA5NDA+IgorCitFTkQgTENfTkFNRQorCisKK0xDX0FERFJFU1MKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUgTENfQUREUkVTUworcG9zdGFsX2ZtdCAgIjxVMDAyNT48VTAwN0E+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDU0PjxVMDAyNT48VTAwNzM+LworPFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDY1PjxVMDAyNT48VTAwNzI+IgorCitjb3VudHJ5X2FiMiAiPFUwMDQ5PjxVMDA0RT4iCitjb3VudHJ5X2FiMyAiPFUwMDQ5PjxVMDA0RT48VTAwNDQ+IgorY291bnRyeV9udW0gMzU2CitFTkQgTENfQUREUkVTUworCisKK0xDX1RFTEVQSE9ORQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19URUxFUEhPTkUKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KK3RlbF9pbnRfZm10ICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDNCPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAzQj48VTAwMjU+PFUwMDZDPiIKK2ludF9wcmVmaXggIjxVMDAzOT48VTAwMzE+IgoraW50X3NlbGVjdCAiPFUwMDMwPjxVMDAzMD4iCitFTkQgTENfVEVMRVBIT05FCisKKworTENfTUVBU1VSRU1FTlQKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTUVBU1VSRU1FTlQKKyUgY2F0ZWdvcnkgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KK21lYXN1cmVtZW50IDEKK0VORCBMQ19NRUFTVVJFTUVOVApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc2NfSVQgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9zY19JVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzA5ZDU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc2NfSVQKQEAgLTAsMCArMSwxMzYgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBTYXJkaW5pYW4gTGFuZ3VhZ2UgTG9jYWxlIGZvciBJdGFseQorJSBMYW5ndWFnZTogc2MKKyUgVGVycml0b3J5OiBJVAorJSBSZXZpc2lvbjogMC4xCislIERhdGU6IDIwMDQtMDUtMjYKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogVVRGLTgKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlNhcmRpbmlhbiBsb2NhbGUgZm9yIEl0YWx5Igorc291cmNlICAgICAiIgorYWRkcmVzcyAgICAiIgorY29udGFjdCAgICAiUGFibG8gU2FyYXR4YWdhIgorZW1haWwgICAgICAicGFibG9AbWFuZHJpdmEuY29tIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiU2FyZGluaWFuIgordGVycml0b3J5ICAiSXRhbHkiCityZXZpc2lvbiAgICIwLjEiCitkYXRlICAgICAgICIyMDA0LTA1LTI2IgorJQorY2F0ZWdvcnkgICJzY19JVDoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJzY19JVDoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJzY19JVDoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgInNjX0lUOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAic2NfSVQ6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJzY19JVDoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJzY19JVDoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJzY19JVDoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJzY19JVDoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgInNjX0lUOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAic2NfSVQ6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiaXRfSVQiCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCisKK2NvbGxhdGluZy1zeW1ib2wgPGMsPgorCityZW9yZGVyLWFmdGVyIDxjPgorPGMsPgorCityZW9yZGVyLWFmdGVyIDxVMDA2Mz4KKzxVMDBFNz4gPGMsPjs8Q0RJPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDQzPgorPFUwMEM3PiA8Yyw+OzxDREk+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWVuZAorCitFTkQgTENfQ09MTEFURQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNzM+PFUwMDUzPjxVMDA2QT48VTAwNEE+PFUwMDZGPjxVMDA0Rj48VTAwNzk+PFUwMDU5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2NvcHkgICJpdF9JVCIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICAiaXRfSVQiCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICI8VTAwNDQ+PFUwMDZGPjxVMDA2RD4iOyI8VTAwNEM+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA0RD48VTAwRTg+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDRBPjxVMDBGMj48VTAwNjI+IjsiPFUwMDQzPjxVMDA2NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMEUwPjxVMDA2Mj4iCitkYXkgICAgICI8VTAwNDQ+PFUwMDZGPjxVMDA2RD48VTAwRUM+PFUwMDZFPjxVMDA2Nz48VTAwNzU+IjsvCisgICAgICAgICI8VTAwNEM+PFUwMDc1PjxVMDA2RT48VTAwNjk+PFUwMDczPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzI+PFUwMDc0PjxVMDA2OT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMEU4PjxVMDA3Mj48VTAwNjM+PFUwMDc1PjxVMDA3Mj48VTAwNjk+PFUwMDczPiI7LworICAgICAgICAiPFUwMDRBPjxVMDBGMj48VTAwNjI+PFUwMDY5PjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA0Mz48VTAwNjU+PFUwMDZFPjxVMDBFMD48VTAwNjI+PFUwMDYxPjxVMDA3Mj48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMEUwPjxVMDA2Mj48VTAwNjE+PFUwMDY0PjxVMDA3NT4iCithYm1vbiAgICI8VTAwNDc+PFUwMDY1PjxVMDA2RT4iOyI8VTAwNDY+PFUwMDcyPjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA0MT48VTAwNjI+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+IjsiPFUwMDRDPjxVMDBFMD48VTAwNkQ+IjsvCisgICAgICAgICI8VTAwNDE+PFUwMDcyPjxVMDA2QT4iOyI8VTAwNDE+PFUwMDc1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA0Mz48VTAwNjE+PFUwMDYyPiI7IjxVMDA0Qz48VTAwNjE+PFUwMDY0PiI7LworICAgICAgICAiPFUwMDQ0PjxVMDA2Rj48VTAwNkU+IjsiPFUwMDQ5PjxVMDA2ND48VTAwNjE+IgorbW9uICAgICAiPFUwMDQ3PjxVMDA2NT48VTAwNkU+PFUwMDZFPjxVMDA2MT48VTAwNzI+PFUwMDZBPjxVMDA3NT4iOy8KKyAgICAgICAgIjxVMDA0Nj48VTAwNzI+PFUwMDY5PjxVMDA2MT48VTAwNzI+PFUwMDZBPjxVMDA3NT4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPjxVMDA3ND48VTAwN0E+PFUwMDc1PiI7LworICAgICAgICAiPFUwMDQxPjxVMDA2Mj48VTAwNzI+PFUwMDY5PjxVMDA2Qz48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3OT48VTAwNzU+IjsvCisgICAgICAgICI8VTAwNEM+PFUwMEUwPjxVMDA2RD48VTAwNzA+PFUwMDYxPjxVMDA2ND48VTAwNjE+PFUwMDczPiI7LworICAgICAgICAiPFUwMDQxPjxVMDA3Mj48VTAwNkE+PFUwMDZGPjxVMDA2Qz48VTAwNjE+PFUwMDczPiI7LworICAgICAgICAiPFUwMDQxPjxVMDA3NT48VTAwNzM+PFUwMDc0PjxVMDA3NT4iOy8KKyAgICAgICAgIjxVMDA0Mz48VTAwNjE+PFUwMDYyPjxVMDA3NT48VTAwNjQ+PFUwMDYxPjxVMDA2RT48VTAwNkU+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDRDPjxVMDA2MT48VTAwNjQ+PFUwMEUwPjxVMDA2RD48VTAwNjk+PFUwMDZFPjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA0ND48VTAwNkY+PFUwMDZFPjxVMDA2RT48VTAwNzk+PFUwMDYxPjxVMDA3Mz48VTAwNjE+PFUwMDZFPjxVMDA3ND48VTAwNzU+IjsvCisgICAgICAgICI8VTAwNDk+PFUwMDY0PjxVMDA2MT48VTAwNzM+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjA+PFUwMDI1PjxVMDA2RD48VTAwMkU+PFUwMDIwPjxVMDAyNT48VTAwNzk+IgordF9mbXQgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICIiOyIiCit0X2ZtdF9hbXBtICIiCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCit3ZWVrCTc7MTk5NzEyMDE7NAorZmlyc3Rfd2Vla2RheQkxCitmaXJzdF93b3JrZGF5CTEKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCitjb3B5ICAiaXRfSVQiCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCitjb3B5ICAiaXRfSVQiCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICAiaXRfSVQiCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorY29weSAgIml0X0lUIgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworY29weSAgIml0X0lUIgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3NkX0lOIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc2RfSU4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJmMDY5YgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3NkX0lOCkBAIC0wLDAgKzEsMjA2IEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKyUgU2luZGhpIGxhbmd1YWdlIGxvY2FsZSBmb3IgSW5kaWEuCislIENvbnRyaWJ1dGVkIGJ5IFByYXZpbiBTYXRwdXRlIDxwc2F0cHV0ZUByZWRoYXQuY29tPiBhbmQKKyUgRFIgSy5QLiBMRUtIV0FOSQorCitMQ19JREVOVElGSUNBVElPTgorCit0aXRsZSAgICAgICJTaW5kaGkgbGFuZ3VhZ2UgbG9jYWxlIGZvciBJbmRpYSIKK3NvdXJjZSAgICAgIlJlZGhhdCwgUHVuZSIKK2FkZHJlc3MgICAgIk1hcmlzZm90IElJSSwgTWFyaWdvbGQgUHJlbWlzZXMsIEVhc3QtV2luZywgS2FseWFuaW5hZ2FyLCBQdW5lLCBJbmRpYS00MTEwMTQiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAgIiIKK2ZheCAgICAgICAgICIiCitsYW5ndWFnZSAgICAiU2luZGhpIgordGVycml0b3J5ICAgIkluZGlhIgorcmV2aXNpb24gICAgIjEuMCIKK2RhdGUgICAgICAgICIyMDA4LFNlcHRlbWJlciwwOSIKKyUKK2NhdGVnb3J5ICAic2RfSU46MjAwOCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAic2RfSU46MjAwOCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAic2RfSU46MjAwOCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJzZF9JTjoyMDA4IjtMQ19USU1FCitjYXRlZ29yeSAgInNkX0lOOjIwMDgiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAic2RfSU46MjAwOCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAic2RfSU46MjAwOCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAic2RfSU46MjAwOCI7TENfUEFQRVIKK2NhdGVnb3J5ICAic2RfSU46MjAwOCI7TENfTkFNRQorY2F0ZWdvcnkgICJzZF9JTjoyMDA4IjtMQ19BRERSRVNTCitjYXRlZ29yeSAgInNkX0lOOjIwMDgiO0xDX1RFTEVQSE9ORQorCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKKworTENfQ09MTEFURQorJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEKK2NvcHkgImlzbzE0NjUxX3QxIgorCitFTkQgTENfQ09MTEFURQorCisKK0xDX01PTkVUQVJZCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIHRoZSBMQ19NT05FVEFSWSBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkZWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlLgorJQoraW50X2N1cnJfc3ltYm9sICAgICAgICI8VTAwNDk+PFUwMDRFPjxVMDA1Mj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICI8VTIwQTg+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgIDMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAxCislCitFTkQgTENfTU9ORVRBUlkKKworCitMQ19OVU1FUklDCitjb3B5ICJoaV9JTiIKK0VORCBMQ19OVU1FUklDCisKKworTENfVElNRQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX1RJTUUgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGVmaW5pdGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUuCislCislIEFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZXMgKCVhKQorYWJkYXkgICAgICAgIjxVMDYyMj48VTA2MzE+PFUwNjJBPjxVMDY0OD48VTA2Mjc+PFUwNjMxPjxVMDY0Rj4iOy8KKwkgICAgIjxVMDYzMz48VTA2NDg+PFUwNjQ1PjxVMDYzMT48VTA2NEY+IjsvCisgICAgICAgICAgICAiPFUwNjQ1PjxVMDY0Nj48VTA2QUY+PFUwNjQ0PjxVMDY0Rj4iOy8KKwkgICAgIjxVMDY3Qj48VTA2NEY+PFUwNjhDPjxVMDYzMT48VTA2NEY+IjsvCisgICAgICAgICAgICAiPFUwNjQ4PjxVMDYzMz48VTA2N0U+PFUwNjJBPiI7LworICAgICAgICAgICAgIjxVMDYyQz48VTA2NEY+PFUwNjQ1PjxVMDY0OD4iOyI8VTA2ODc+PFUwNjQ2PjxVMDY4Nz48VTA2MzE+IgorJQorJSBGdWxsIHdlZWtkYXkgbmFtZXMgKCVBKQorZGF5ICAgICAgICI8VTA2MjI+PFUwNjMxPjxVMDYyQT48VTA2NDg+PFUwNjI3PjxVMDYzMT48VTA2NEY+IjsvCisJICAgICI8VTA2MzM+PFUwNjQ4PjxVMDY0NT48VTA2MzE+PFUwNjRGPiI7LworICAgICAgICAgICAgIjxVMDY0NT48VTA2NDY+PFUwNkFGPjxVMDY0ND48VTA2NEY+IjsvCisJICAgICI8VTA2N0I+PFUwNjRGPjxVMDY4Qz48VTA2MzE+PFUwNjRGPiI7LworICAgICAgICAgICAgIjxVMDY0OD48VTA2MzM+PFUwNjdFPjxVMDYyQT4iOy8KKyAgICAgICAgICAgICI8VTA2MkM+PFUwNjRGPjxVMDY0NT48VTA2NDg+IjsiPFUwNjg3PjxVMDY0Nj48VTA2ODc+PFUwNjMxPiIKKyUKKyUgQWJicmV2aWF0ZWQgbW9udGggbmFtZXMgKCViKQorYWJtb24JICAgICI8VTA2MkM+PFUwNjQ2PjxVMDY0OD48VTA2MzE+PFUwNjRBPiI7LworCSAgICAiPFUwNjQxPjxVMDYyOD48VTA2MzE+PFUwNjQ4PjxVMDYzMT48VTA2NEE+IjsvCisJICAgICI8VTA2NDU+PFUwNjI3PjxVMDYzMT48VTA2ODY+IjsvCisJICAgICI8VTA2Mjc+PFUwNjdFPjxVMDYzMT48VTA2NEE+PFUwNjQ0PiI7LworCSAgICAiPFUwNjQ1PjxVMDY0QT4iOy8KKwkgICAgIjxVMDYyQz48VTA2NDg+PFUwNjQ2PiI7LworCSAgICAiPFUwNjJDPjxVMDY0OD48VTA2NDQ+PFUwNjI3PjxVMDYyMT48VTA2NTA+IjsvCisJICAgICI8VTA2MjI+PFUwNkFGPjxVMDYzMz48VTA2N0Q+IjsvCisJICAgICI8VTA2MzM+PFUwNjRBPjxVMDY3RT48VTA2N0Q+PFUwNjRBPjxVMDY0NT48VTA2Mjg+PFUwNjMxPiI7LworCSAgICAiPFUwNjIyPjxVMDZBQT48VTA2N0Q+PFUwNjQ4PjxVMDYyOD48VTA2MzE+IjsvCisJICAgICI8VTA2NDY+PFUwNjQ4PjxVMDY0NT48VTA2Mjg+PFUwNjMxPiI7LworCSAgICAiPFUwNjhBPjxVMDYzMz48VTA2NDU+PFUwNjI4PjxVMDYzMT4iCislCislIEZ1bGwgbW9udGggbmFtZXMgKCVCKQorbW9uCSAgICAiPFUwNjJDPjxVMDY0Nj48VTA2NDg+PFUwNjMxPjxVMDY0QT4iOy8KKwkgICAgIjxVMDY0MT48VTA2Mjg+PFUwNjMxPjxVMDY0OD48VTA2MzE+PFUwNjRBPiI7LworCSAgICAiPFUwNjQ1PjxVMDYyNz48VTA2MzE+PFUwNjg2PiI7LworCSAgICAiPFUwNjI3PjxVMDY3RT48VTA2MzE+PFUwNjRBPjxVMDY0ND4iOy8KKwkgICAgIjxVMDY0NT48VTA2NEE+IjsvCisJICAgICI8VTA2MkM+PFUwNjQ4PjxVMDY0Nj4iOy8KKwkgICAgIjxVMDYyQz48VTA2NDg+PFUwNjQ0PjxVMDYyNz48VTA2MjE+PFUwNjUwPiI7LworCSAgICAiPFUwNjIyPjxVMDZBRj48VTA2MzM+PFUwNjdEPiI7LworCSAgICAiPFUwNjMzPjxVMDY0QT48VTA2N0U+PFUwNjdEPjxVMDY0QT48VTA2NDU+PFUwNjI4PjxVMDYzMT4iOy8KKwkgICAgIjxVMDYyMj48VTA2QUE+PFUwNjdEPjxVMDY0OD48VTA2Mjg+PFUwNjMxPiI7LworCSAgICAiPFUwNjQ2PjxVMDY0OD48VTA2NDU+PFUwNjI4PjxVMDYzMT4iOy8KKwkgICAgIjxVMDY4QT48VTA2MzM+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IgorJQorJSBFcXVpdmFsZW50IG9mIEFNIFBNCithbV9wbQkiPFUwMDQxPjxVMDA0RD4iOyI8VTAwNTA+PFUwMDREPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbgorJSAlQSAlZCAlYiAlWSVJOiVNOiVTICAlWgorZF90X2ZtdCAgICAgIjxVMDAyNT48VTAwNDE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+LworPFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPi8KKzxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNzA+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uCislICVBICVkICViICVZCitkX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA0MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj4vCis8VTAwMjA+PFUwMDI1PjxVMDA1OT4iCislCislIEFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJUk6JU06JVMgICVaCit0X2ZtdCAgICAgICAiPFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4vCis8VTAwMjA+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorJSBBcHByb3ByaWF0ZSAxMiBoIHRpbWUgcmVwcmVzZW50YXRpb24gKCVyKQordF9mbXRfYW1wbSAgIjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+LworPFUwMDIwPjxVMDAyNT48VTAwNzA+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uIChkYXRlKDEpKSAgICIlYSAlYiAlZSAlSDolTTolUyAlWiAlWSIKK2RhdGVfZm10ICAgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKKworTENfTUVTU0FHRVMKK2NvcHkgImFyX0VHIgorRU5EIExDX01FU1NBR0VTCisKKworTENfUEFQRVIKK2NvcHkgImhpX0lOIgorRU5EIExDX1BBUEVSCisKKworTENfTkFNRQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OQU1FIGNhdGVnb3J5CislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCislCislCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA3MD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PiIKK25hbWVfZ2VuICAgICIiCituYW1lX21yICAgICAiPFUwNjM0PjxVMDYzMT48VTA2NEE+IgorbmFtZV9tcnMgICAgIjxVMDYzND48VTA2MzE+PFUwNjRBPjxVMDY0NT48VTA2MkE+PFUwNjRBPiIKK25hbWVfbWlzcyAgICI8VTA2QUE+PFUwNjQ1PjxVMDYyNz48VTA2MzE+PFUwNjRBPiIKK25hbWVfbXMgICAgICI8VTA2QUE+PFUwNjQ1PjxVMDYyNz48VTA2MzE+IgorCitFTkQgTENfTkFNRQorCisKK0xDX0FERFJFU1MKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfQUREUkVTUyBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorcG9zdGFsX2ZtdCAgIjxVMDAyNT48VTAwN0E+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDU0PjxVMDAyNT48VTAwNzM+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDY1PjxVMDAyNT48VTAwNzI+IgorY291bnRyeV9hYjIgIjxVMDA0OT48VTAwNEU+IgorY291bnRyeV9hYjMgIjxVMDA0OT48VTAwNEU+PFUwMDQ0PiIKK2NvdW50cnlfbnVtIDM1NgorCitFTkQgTENfQUREUkVTUworCisKK0xDX1RFTEVQSE9ORQorY29weSAiaGlfSU4iCitFTkQgTENfVEVMRVBIT05FCisKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgImhpX0lOIgorRU5EIExDX01FQVNVUkVNRU5UCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9zZF9JTkBkZXZhbmFnYXJpIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc2RfSU5AZGV2YW5hZ2FyaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTAyOTM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc2RfSU5AZGV2YW5hZ2FyaQpAQCAtMCwwICsxLDIwNiBAQAorY29tbWVudF9jaGFyICAgICUKK2VzY2FwZV9jaGFyICAgICAvCislIFNpbmRoaSBsYW5ndWFnZSBsb2NhbGUgZm9yIEluZGlhLgorJSBDb250cmlidXRlZCBieSBQcmF2aW4gU2F0cHV0ZSA8cHNhdHB1dGVAcmVkaGF0LmNvbT4gYW5kCislIERSIEsuUC4gTEVLSFdBTkkKKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlNpbmRoaSBsYW5ndWFnZSBsb2NhbGUgZm9yIEluZGlhIgorc291cmNlICAgICAiUmVkaGF0LCBQdW5lIgorYWRkcmVzcyAgICAiTWFyaXNmb3QgSUlJLCBNYXJpZ29sZCBQcmVtaXNlcywgRWFzdC1XaW5nLCBLYWx5YW5pbmFnYXIsIFB1bmUsIEluZGlhLTQxMTAxNCIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJTaW5kaGkiCit0ZXJyaXRvcnkgICJJbmRpYSIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDgtMDgtMjYiCislCitjYXRlZ29yeSAgInNkX0lOQGRldmFuYWdhcmk6MjAwOCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAic2RfSU5AZGV2YW5hZ2FyaToyMDA4IjtMQ19DVFlQRQorY2F0ZWdvcnkgICJzZF9JTkBkZXZhbmFnYXJpOjIwMDgiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAic2RfSU5AZGV2YW5hZ2FyaToyMDA4IjtMQ19USU1FCitjYXRlZ29yeSAgInNkX0lOQGRldmFuYWdhcmk6MjAwOCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJzZF9JTkBkZXZhbmFnYXJpOjIwMDgiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgInNkX0lOQGRldmFuYWdhcmk6MjAwOCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAic2RfSU5AZGV2YW5hZ2FyaToyMDA4IjtMQ19QQVBFUgorY2F0ZWdvcnkgICJzZF9JTkBkZXZhbmFnYXJpOjIwMDgiO0xDX05BTUUKK2NhdGVnb3J5ICAic2RfSU5AZGV2YW5hZ2FyaToyMDA4IjtMQ19BRERSRVNTCitjYXRlZ29yeSAgInNkX0lOQGRldmFuYWdhcmk6MjAwOCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiaTE4biIKKwordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCisKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxCitjb3B5ICJpc28xNDY1MV90MSIKKworRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gdGhlIExDX01PTkVUQVJZIGNhdGVnb3J5CislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRlZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUuCislCitpbnRfY3Vycl9zeW1ib2wgICAgICAgIjxVMDA0OT48VTAwNEU+PFUwMDUyPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgIjxVMDkzMD48VTA5NDE+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgIDMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAxCislCitFTkQgTENfTU9ORVRBUlkKKworCitMQ19OVU1FUklDCitjb3B5ICJoaV9JTiIKK0VORCBMQ19OVU1FUklDCisKKworTENfVElNRQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX1RJTUUgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS4KKyUKKyUgQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyAoJWEpCithYmRheSAgICAgICAiPFUwOTA2PjxVMDkzMD48VTA5NGQ+PFUwOTI0PjxVMDkzNT48VTA5M0U+PFUwOTMwPjxVMDk0Mj4iOy8KKwkgICAgIjxVMDkzOD48VTA5NDI+PFUwOTJFPjxVMDkzMD48VTA5NDI+IjsvCisgICAgICAgICAgICAiPFUwOTJFPjxVMDkwMj48VTA5MTc+PFUwOTMyPjxVMDk0Mj4iOy8KKwkgICAgIjxVMDk3Rj48VTA5NDE+PFUwOTI3PjxVMDkzMD48VTA5NDI+IjsvCisgICAgICAgICAgICAiPFUwOTM1PjxVMDkzRj48VTA5Mzg+PFUwOTREPjxVMDkyQT48VTA5MjQ+PFUwOTNGPiI7LworICAgICAgICAgICAgIjxVMDkxQz48VTA5NDE+PFUwOTJFPjxVMDk0Qj4iOyI8VTA5MUI+PFUwOTAyPjxVMDkxQj48VTA5Mzg+IgorJQorJSBGdWxsIHdlZWtkYXkgbmFtZXMgKCVBKQorZGF5ICAgICAgICAgIjxVMDkwNj48VTA5MzA+PFUwOTRkPjxVMDkyND48VTA5MzU+PFUwOTNFPjxVMDkzMD48VTA5NDI+IjsvCisJICAgICI8VTA5Mzg+PFUwOTQyPjxVMDkyRT48VTA5MzA+PFUwOTQyPiI7LworICAgICAgICAgICAgIjxVMDkyRT48VTA5MDI+PFUwOTE3PjxVMDkzMj48VTA5NDI+IjsvCisJICAgICI8VTA5N0Y+PFUwOTQxPjxVMDkyNz48VTA5MzA+PFUwOTQyPiI7LworICAgICAgICAgICAgIjxVMDkzNT48VTA5M0Y+PFUwOTM4PjxVMDk0RD48VTA5MkE+PFUwOTI0PjxVMDkzRj4iOy8KKyAgICAgICAgICAgICI8VTA5MUM+PFUwOTQxPjxVMDkyRT48VTA5NEI+IjsiPFUwOTFCPjxVMDkwMj48VTA5MUI+PFUwOTM4PiIKKyUKKyUgQWJicmV2aWF0ZWQgbW9udGggbmFtZXMgKCViKQorYWJtb24JICAgICI8VTA5MUM+PFUwOTI4PjxVMDkzNT48VTA5MzA+PFUwOTQwPiI7LworCSAgICAiPFUwOTJCPjxVMDkyQz48VTA5MzA+PFUwOTM1PjxVMDkzMD48VTA5NDA+IjsvCisJICAgICI8VTA5MkU+PFUwOTNFPjxVMDkzMD48VTA5NGQ+PFUwOTFBPjxVMDkzRj4iOy8KKwkgICAgIjxVMDkwNT48VTA5MkE+PFUwOTREPjxVMDkzMD48VTA5NDc+PFUwOTMyPiI7LworCSAgICAiPFUwOTJFPjxVMDk0Nz4iOy8KKwkgICAgIjxVMDkxQz48VTA5NDI+PFUwOTI4PjxVMDkzRj4iOy8KKwkgICAgIjxVMDkxQz48VTA5NDI+PFUwOTMyPjxVMDkzRT48VTA5MDc+IjsvCisJICAgICI8VTA5MDY+PFUwOTE3PjxVMDkzOD48VTA5NEQ+PFUwOTFGPjxVMDk0MT4iOy8KKwkgICAgIjxVMDkzOD48VTA5NDc+PFUwOTJBPjxVMDk0RD48VTA5MUY+PFUwOTQ3PjxVMDkwMj48VTA5MkM+PFUwOTMwPjxVMDk0Mj4iOy8KKwkgICAgIjxVMDkwNj48VTA5MTU+PFUwOTREPjxVMDkxRj48VTA5NDI+PFUwOTJDPjxVMDkzMD48VTA5NDI+IjsvCisJICAgICI8VTA5Mjg+PFUwOTM1PjxVMDkwMj48VTA5MkM+PFUwOTMwPjxVMDk0Mj4iOy8KKwkgICAgIjxVMDk3RT48VTA5M0Y+PFUwOTM4PjxVMDkwMj48VTA5MkM+PFUwOTMwPjxVMDk0Mj4iCislCislIEZ1bGwgbW9udGggbmFtZXMgKCVCKQorbW9uCSAgICAiPFUwOTFDPjxVMDkyOD48VTA5MzU+PFUwOTMwPjxVMDk0MD4iOy8KKwkgICAgIjxVMDkyQj48VTA5MkM+PFUwOTMwPjxVMDkzNT48VTA5MzA+PFUwOTQwPiI7LworCSAgICAiPFUwOTJFPjxVMDkzRT48VTA5MzA+PFUwOTRkPjxVMDkxQT48VTA5M0Y+IjsvCisJICAgICI8VTA5MDU+PFUwOTJBPjxVMDk0RD48VTA5MzA+PFUwOTQ3PjxVMDkzMj4iOy8KKwkgICAgIjxVMDkyRT48VTA5NDc+IjsvCisJICAgICI8VTA5MUM+PFUwOTQyPjxVMDkyOD48VTA5M0Y+IjsvCisJICAgICI8VTA5MUM+PFUwOTQyPjxVMDkzMj48VTA5M0U+PFUwOTA3PiI7LworCSAgICAiPFUwOTA2PjxVMDkxNz48VTA5Mzg+PFUwOTREPjxVMDkxRj48VTA5NDE+IjsvCisJICAgICI8VTA5Mzg+PFUwOTQ3PjxVMDkyQT48VTA5NEQ+PFUwOTFGPjxVMDk0Nz48VTA5MDI+PFUwOTJDPjxVMDkzMD48VTA5NDI+IjsvCisJICAgICI8VTA5MDY+PFUwOTE1PjxVMDk0RD48VTA5MUY+PFUwOTQyPjxVMDkyQz48VTA5MzA+PFUwOTQyPiI7LworCSAgICAiPFUwOTI4PjxVMDkzNT48VTA5MDI+PFUwOTJDPjxVMDkzMD48VTA5NDI+IjsvCisJICAgICI8VTA5N0U+PFUwOTNGPjxVMDkzOD48VTA5MDI+PFUwOTJDPjxVMDkzMD48VTA5NDI+IgorJQorJSBFcXVpdmFsZW50IG9mIEFNIFBNCithbV9wbSAgICAgICAiPFUwOTJFPjxVMDAyRT48VTA5MkE+PFUwOTQyPjxVMDAyRT4iOy8KKyAgICAgICAgICAgICI8VTA5MkU+PFUwMDJFPjxVMDkyOD48VTA5MDI+PFUwMDJFPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbgorJSAlQSAlZCAlYiAlWSVJOiVNOiVTICAlWgorZF90X2ZtdCAgICAgIjxVMDAyNT48VTAwNDE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+LworPFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPi8KKzxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNzA+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uCislICVBICVkICViICVZCitkX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA0MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj4vCis8VTAwMjA+PFUwMDI1PjxVMDA1OT4iCislCislIEFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJUk6JU06JVMgICVaCit0X2ZtdCAgICAgICAiPFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4vCis8VTAwMjA+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorJSBBcHByb3ByaWF0ZSAxMiBoIHRpbWUgcmVwcmVzZW50YXRpb24gKCVyKQordF9mbXRfYW1wbSAgIjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+LworPFUwMDIwPjxVMDAyNT48VTAwNzA+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uIChkYXRlKDEpKSAgICIlYSAlYiAlZSAlSDolTTolUyAlWiAlWSIKK2RhdGVfZm10ICAgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKKworTENfTUVTU0FHRVMKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKKworTENfUEFQRVIKK2NvcHkgImhpX0lOIgorRU5EIExDX1BBUEVSCisKKworTENfTkFNRQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OQU1FIGNhdGVnb3J5CislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCislCislCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA3MD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDY3PiIKK25hbWVfZ2VuICAgICIiCituYW1lX21yICAgICAiPFUwOTM2PjxVMDk0RD48VTA5MzA+PFUwOTQwPjxVMDAyRT4iCituYW1lX21ycyAgICAiPFUwOTM2PjxVMDk0RD48VTA5MzA+PFUwOTQwPjxVMDkyRT48VTA5MjQ+PFUwOTQwPjxVMDAyRT4iCituYW1lX21pc3MgICAiPFUwOTE1PjxVMDk0MT48VTA5MkU+PFUwOTNFPjxVMDkzMD48VTA5NDA+PFUwMDJFPiIKK25hbWVfbXMgICAgICI8VTA5MTU+PFUwOTQxPjxVMDkyRT48VTA5M0U+PFUwOTMwPjxVMDAyRT4iCisKK0VORCBMQ19OQU1FCisKKworTENfQUREUkVTUworJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19BRERSRVNTIGNhdGVnb3J5CislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCitwb3N0YWxfZm10ICAiPFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3Mj4iCisKK2NvdW50cnlfYWIyICI8VTAwNDk+PFUwMDRFPiIKK2NvdW50cnlfYWIzICI8VTAwNDk+PFUwMDRFPjxVMDA0ND4iCitjb3VudHJ5X251bSAzNTYKK0VORCBMQ19BRERSRVNTCisKKworTENfVEVMRVBIT05FCitjb3B5ICJoaV9JTiIKK0VORCBMQ19URUxFUEhPTkUKKworCitMQ19NRUFTVVJFTUVOVAorY29weSAiaGlfSU4iCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3NlX05PIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc2VfTk8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUwNGVjMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3NlX05PCkBAIC0wLDAgKzEsMzE3IEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgTm9ydGhlcm4gU2FhbWkgTGFuZ3VhZ2UgTG9jYWxlIGZvciBOb3J3YXkKKyUgU291cmNlOiBodHRwOi8vd3d3Lmh1bS51aXQubm8vYS90cm9uZC9sb2MuaHRtbAorJSBDb250YWN0OiBC+HJyZSBHYXVwCislIEVtYWlsOiBib2VycmUuZ2F1cEBwYy5udQorJSBMYW5ndWFnZTogc2UKKyUgVGVycml0b3J5OiBOTworJSBSZXZpc2lvbjogMC4xCislIERhdGU6IDIwMDEtMTEtMDMKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogVVRGLTgKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICJOb3J0aGVybiBTYWFtaSBsYW5ndWFnZSBsb2NhbGUgZm9yIE5vcndheSIKK3NvdXJjZSAiaHR0cDovL3d3dy5odW0udWl0Lm5vL2EvdHJvbmQvbG9jLmh0bWwiCithZGRyZXNzICIiCitjb250YWN0ICJC+HJyZSBHYXVwIgorZW1haWwgImJvZXJyZS5nYXVwQHBjLm51IgordGVsICIiCitmYXggIiIKK2xhbmd1YWdlICJOb3J0aGVybiBTYWFtaSIKK3RlcnJpdG9yeSAiTm9yd2F5IgorcmV2aXNpb24gIjAuMSIKK2RhdGUgIjIwMDEtMTEtMDkiCisKK2NhdGVnb3J5IHNlX05POjIwMDA7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5IHNlX05POjIwMDA7TENfQ1RZUEUKK2NhdGVnb3J5IHNlX05POjIwMDA7TENfQ09MTEFURQorY2F0ZWdvcnkgc2VfTk86MjAwMDtMQ19USU1FCitjYXRlZ29yeSBzZV9OTzoyMDAwO0xDX05VTUVSSUMKK2NhdGVnb3J5IHNlX05POjIwMDA7TENfUEFQRVIKK2NhdGVnb3J5IHNlX05POjIwMDA7TENfVEVMRVBIT05FCitjYXRlZ29yeSBzZV9OTzoyMDAwO0xDX01FQVNVUkVNRU5UCitjYXRlZ29yeSBzZV9OTzoyMDAwO0xDX0FERFJFU1MKK2NhdGVnb3J5IHNlX05POjIwMDA7TENfTU9ORVRBUlkKK2NhdGVnb3J5IHNlX05POjIwMDA7TENfTUVTU0FHRVMKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCisKK2NvbGxhdGluZy1zeW1ib2wgPGFyaW5nPgorY29sbGF0aW5nLXN5bWJvbCA8YXRpbGRlPgorY29sbGF0aW5nLXN5bWJvbCA8YWNpcmN1bWZsZXg+Citjb2xsYXRpbmctc3ltYm9sIDxhZ3JhdmU+Citjb2xsYXRpbmctc3ltYm9sIDxhYWN1dGU+Citjb2xsYXRpbmctc3ltYm9sIDxub2FlPgorY29sbGF0aW5nLXN5bWJvbCA8c3ZhZT4KK2NvbGxhdGluZy1zeW1ib2wgPGNjZWRpbGxhPgorY29sbGF0aW5nLXN5bWJvbCA8Y2Nhcm9uPgorY29sbGF0aW5nLXN5bWJvbCA8ZXpoPgorY29sbGF0aW5nLXN5bWJvbCA8ZXpoY2Fyb24+Citjb2xsYXRpbmctc3ltYm9sIDxkc3Ryb2tlPgorY29sbGF0aW5nLXN5bWJvbCA8ZXRoPgorY29sbGF0aW5nLXN5bWJvbCA8Zmhvb2s+Citjb2xsYXRpbmctc3ltYm9sIDxnY2Fyb24+Citjb2xsYXRpbmctc3ltYm9sIDxnc3Ryb2tlPgorY29sbGF0aW5nLXN5bWJvbCA8a2Nhcm9uPgorY29sbGF0aW5nLXN5bWJvbCA8b3RpbGRlPgorY29sbGF0aW5nLXN5bWJvbCA8b2U+Citjb2xsYXRpbmctc3ltYm9sIDxzc2hhcnA+Citjb2xsYXRpbmctc3ltYm9sIDxzY2Fyb24+Citjb2xsYXRpbmctc3ltYm9sIDxvdW1sYXV0PgorY29sbGF0aW5nLXN5bWJvbCA8b3NsYXNoPgorCislCityZW9yZGVyLWFmdGVyIDxDQVA+Cis8TUlOPgorCityZW9yZGVyLWFmdGVyIDxhPgorPGFncmF2ZT4KKzxhdGlsZGU+Cis8YWFjdXRlPgorPGFjaXJjdW1mbGV4PgorCisKK3Jlb3JkZXItYWZ0ZXIgPGM+Cis8Y2Nhcm9uPgorPGNjZWRpbGxhPgorPGV6aD4KKzxlemhjYXJvbj4KKworcmVvcmRlci1hZnRlciA8ZD4KKzxkc3Ryb2tlPgorPGV0aD4KKworcmVvcmRlci1hZnRlciA8Zj4KKzxmaG9vaz4KKworcmVvcmRlci1hZnRlciA8Zz4KKzxnY2Fyb24+Cis8Z3N0cm9rZT4KKworcmVvcmRlci1hZnRlciA8az4KKzxrY2Fyb24+CisKK3Jlb3JkZXItYWZ0ZXIgPHM+Cis8c3NoYXJwPgorPHNjYXJvbj4KKworcmVvcmRlci1hZnRlciA8dGg+Cis8bm9hZT4KKzxvc2xhc2g+Cis8YXJpbmc+Cis8c3ZhZT4KKzxvdW1sYXV0PgorCityZW9yZGVyLWFmdGVyIDxVMDA2MT4KKzxVMDBFMD4gPGFncmF2ZT47PEdSQT47PE1JTj47SUdOT1JFICUgMjAxIOAKKzxVMDBFMT4gPGFhY3V0ZT47PEFDQT47PE1JTj47SUdOT1JFICUgMjAwIOEKKzxVMDBFMj4gPGFjaXJjdW1mbGV4Pjs8Q0lSPjs8TUlOPjtJR05PUkUgJSAyMDIg4gorPFUwMEUzPiA8YXRpbGRlPjs8VElMPjs8TUlOPjtJR05PUkUgJSAyMDMg4worCityZW9yZGVyLWFmdGVyIDxVMDA0MT4KKzxVMDBDMD4gPGFncmF2ZT47PEdSQT47PENBUD47SUdOT1JFICUgMzIxIMAKKzxVMDBDMT4gPGFhY3V0ZT47PEFDQT47PENBUD47SUdOT1JFICUgMzIwIMEKKzxVMDBDMj4gPGFjaXJjdW1mbGV4Pjs8Q0lSPjs8Q0FQPjtJR05PUkUgJSAzMjIgwgorPFUwMEMzPiA8YXRpbGRlPjs8VElMPjs8Q0FQPjtJR05PUkUgJSAzMjMgwworCityZW9yZGVyLWFmdGVyIDxVMDA2Mz4KKzxVMDBFNz4gPGNjZWRpbGxhPjs8Q0RJPjs8TUlOPjtJR05PUkUgJSAyMTIg5worPFUwMTBEPiA8Y2Nhcm9uPjs8Q0FSPjs8TUlOPjtJR05PUkUgJSAyMTUgPGM8PgorCityZW9yZGVyLWFmdGVyIDxVMDA0Mz4KKzxVMDBDNz4gPGNjZWRpbGxhPjs8Q0RJPjs8Q0FQPjtJR05PUkUgJSAzMzIgxworPFUwMTBDPiA8Y2Nhcm9uPjs8Q0FSPjs8Q0FQPjtJR05PUkUgJSAzMzUgPEM8PgorCityZW9yZGVyLWFmdGVyIDxVMDEwQj4KKzxVMDI5Mj4gPGV6aD47PEJBUz47PE1JTj47SUdOT1JFICUgZXpoCis8VTAxRUY+IDxlemhjYXJvbj47PENBUj47PE1JTj47SUdOT1JFICUgZXpoIGNhcm9uCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMTBBPgorPFUwMUI3PiA8ZXpoPjs8QkFTPjs8TUlOPjtJR05PUkUgJSBFWkgKKzxVMDFFRT4gPGV6aGNhcm9uPjs8Q0FSPjs8Q0FQPjtJR05PUkUgJSBFWkggY2Fyb24KKworcmVvcmRlci1hZnRlciA8VTAwNjQ+Cis8VTAwRjA+IDxldGg+OzxQQ0w+OzxNSU4+O0lHTk9SRSAlIDIxOCDwCis8VTAxMTE+IDxkc3Ryb2tlPjs8T0JMPjs8TUlOPjtJR05PUkUgJSAyMjAgPGQvLz4KKworcmVvcmRlci1hZnRlciA8VTAwNDQ+Cis8VTAwRDA+IDxldGg+OzxQQ0w+OzxDQVA+O0lHTk9SRSAlIDMzOCDQCis8VTAxMTA+IDxkc3Ryb2tlPjs8T0JMPjs8Q0FQPjtJR05PUkUgJSAzNDAgPEQvLz4KKworcmVvcmRlci1hZnRlciA8VTAwNjY+Cis8VTAxOTI+IDxmaG9vaz47PEJBUz47PE1JTj47SUdOT1JFICUgZiBXSVRIIEhPT0sKKworcmVvcmRlci1hZnRlciA8VTAxMjM+Cis8VTAxRTc+IDxnY2Fyb24+OzxDQVI+OzxNSU4+O0lHTk9SRSAlIGdjYXJvbgorPFUwMUU1PiA8Z3N0cm9rZT47PE9CTD47PE1JTj47SUdOT1JFICUgZ3N0cm9rZQorCityZW9yZGVyLWFmdGVyIDxVMDEyMj4KKzxVMDFFNj4gPGdjYXJvbj47PENBUj47PE1JTj47SUdOT1JFICUgR2Nhcm9uCis8VTAxRTQ+IDxnc3Ryb2tlPjs8T0JMPjs8TUlOPjtJR05PUkUgJSBHc3Ryb2tlCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMTM3PgorPFUwMUU5PiA8a2Nhcm9uPjs8Q0FSPjs8TUlOPjtJR05PUkUgJSBrY2Fyb24KK3Jlb3JkZXItYWZ0ZXIgPFUwMTM2PgorPFUwMUU4PiA8a2Nhcm9uPjs8Q0FSPjs8Q0FQPjtJR05PUkUgJSBLY2Fyb24KKworcmVvcmRlci1hZnRlciA8VTAwNTM+Cis8VTAwREY+IDxzc2hhcnA+OyI8TElHPjxMSUc+IjsiPE1JTj48TUlOPiI7SUdOT1JFICUg3worPFUwMTYxPiA8c2Nhcm9uPjs8Q0FSPjs8TUlOPjtJR05PUkUgJSAyODggPHM8PgorPFUwMTYwPiA8c2Nhcm9uPjs8Q0FSPjs8Q0FQPjtJR05PUkUgJSA0MDUgPFM8PgorCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMEUzPgorPFUwMEU0PiA8c3ZhZT47PFJFVT47PE1JTj47SUdOT1JFICUg5AorPFUwMEU1PiA8YXJpbmc+OzxSTkU+OzxNSU4+O0lHTk9SRSAlIOUKKzxVMDBFNj4gPG5vYWU+OzxMSUc+OzxNSU4+O0lHTk9SRSAlIOYKK3Jlb3JkZXItYWZ0ZXIgPFUwMEY1PgorPFUwMEY2PiA8b3VtbGF1dD47PFJFVT47PE1JTj47SUdOT1JFICUg9gorPFUwMEY4PiA8b3NsYXNoPjs8T0JMPjs8TUlOPjtJR05PUkUgJSD4CisKK3Jlb3JkZXItYWZ0ZXIgPFUwMEMzPgorPFUwMEM0PiA8c3ZhZT47PFJFVT47PENBUD47SUdOT1JFICUgxAorPFUwMEM1PiA8YXJpbmc+OzxSTkU+OzxDQVA+O0lHTk9SRSAlIMUKKzxVMDBDNj4gPG5vYWU+OzxMSUc+OzxDQVA+O0lHTk9SRSAlIMYKK3Jlb3JkZXItYWZ0ZXIgPFUwMEQ1PgorPFUwMEQ2PiA8b3VtbGF1dD47PFJFVT47PENBUD47SUdOT1JFICUg1gorPFUwMEQ4PiA8b3NsYXNoPjs8T0JMPjs8Q0FQPjtJR05PUkUgJSDYCisKKyUg/C/cIGlzIHRyZWF0ZWQgbGlrZSB5L1kgYnV0IGlzIHNvcnRlZCBhZnRlciB0aGUgbGF0dGVyCityZW9yZGVyLWFmdGVyIDxVMDBGQj4KKzxVMDBGQz4gPHk+OzxSRVU+OzxNSU4+O0lHTk9SRSAlIPwKK3Jlb3JkZXItYWZ0ZXIgPFUwMERCPgorPFUwMERDPiA8eT47PFJFVT47PENBUD47SUdOT1JFICUg3AorcmVvcmRlci1lbmQKKworRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgICAgICI8VTAwNEU+PFUwMDRGPjxVMDA0Qj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICAgIjxVMDAyMD48VTAwNzI+PFUwMDc1PiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAgICI8VTAwMkM+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgIjxVMDAyRT4iCittb25fZ3JvdXBpbmcgICAgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgIDAKK25fY3NfcHJlY2VkZXMgICAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAgIDAKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgIDQKK25fc2lnbl9wb3NuICAgICAgICAgICAgIDQKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgICI8VTAwMkU+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAgMzszCitFTkQgTENfTlVNRVJJQworCisKK0xDX1RJTUUKK2FiZGF5ICAgICAgICI8VTAwNzM+PFUwMDZGPjxVMDA3ND48VTAwNkU+IjsiPFUwMDc2PjxVMDA3NT48VTAwNkY+PFUwMDczPiI7LworCSAgICAiPFUwMDZEPjxVMDA2MT48VTAxNEI+IjsiPFUwMDY3PjxVMDA2MT48VTAwNzM+PFUwMDZCPiI7LworCSAgICAiPFUwMDY0PjxVMDA3NT48VTAwNkY+PFUwMDcyPiI7IjxVMDA2Mj48VTAwNjU+PFUwMDYxPjxVMDA3Mj4iOy8KKwkgICAgIjxVMDA2Qz48VTAwRTE+PFUwMDc2PiIKK2RheSAgICAgICAgICI8VTAwNzM+PFUwMDZGPjxVMDA3ND48VTAwNkU+PFUwMDYxPjxVMDA2Mj48VTAwNjU+PFUwMDYxPjxVMDA2OT48VTAwNzY+PFUwMDY5PiI7LworICAgICAgICAgICAgIjxVMDA3Nj48VTAwNzU+PFUwMDZGPjxVMDA3Mz48VTAwNzM+PFUwMEUxPjxVMDA3Mj48VTAwNjc+PFUwMDYxPiI7LworICAgICAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMTRCPjxVMDE0Qj48VTAwNjU+PFUwMDYyPjxVMDA2MT48VTAwNzI+PFUwMDY3PjxVMDA2MT4iOy8KKyAgICAgICAgICAgICI8VTAwNjc+PFUwMDYxPjxVMDA3Mz48VTAwNkI+PFUwMDYxPjxVMDA3Nj48VTAwNjE+PFUwMDY4PjxVMDA2Qj48VTAwNkI+PFUwMDc1PiI7LworICAgICAgICAgICAgIjxVMDA2ND48VTAwNzU+PFUwMDZGPjxVMDA3Mj48VTAwNjE+PFUwMDczPjxVMDA2ND48VTAwNjE+PFUwMDc0PiI7LworICAgICAgICAgICAgIjxVMDA2Mj48VTAwNjU+PFUwMDYxPjxVMDA3Mj48VTAwNkE+PFUwMDYxPjxVMDA2ND48VTAwNjE+PFUwMDc0PiI7LworICAgICAgICAgICAgIjxVMDA2Qz48VTAwRTE+PFUwMDc2PjxVMDA3Nj48VTAwNjE+PFUwMDcyPjxVMDA2ND48VTAwNjE+PFUwMDc0PiIKK2FibW9uICAgICAgICI8VTAwNkY+PFUwMTExPjxVMDExMT48VTAwNkE+IjsiPFUwMDY3PjxVMDA3NT48VTAwNkY+PFUwMDc2PiI7LworICAgICAgICAgICAgIjxVMDA2RT48VTAwNkE+PFUwMDc1PjxVMDA2Qj4iOyI8VTAwNjM+PFUwMDc1PjxVMDA2Rj48VTAxNEI+IjsvCisgICAgICAgICAgICAiPFUwMDZEPjxVMDA2OT48VTAwNjU+PFUwMDczPiI7IjxVMDA2Nz48VTAwNjU+PFUwMDYxPjxVMDA3Mz4iOy8KKyAgICAgICAgICAgICI8VTAwNzM+PFUwMDc1PjxVMDA2Rj48VTAwNjk+IjsiPFUwMDYyPjxVMDA2Rj48VTAwNzI+PFUwMDY3PiI7LworICAgICAgICAgICAgIjxVMDEwRD48VTAwNjE+PFUwMDZCPjxVMDEwRD4iOyI8VTAwNjc+PFUwMDZGPjxVMDA2Qz48VTAwNjc+IjsvCisgICAgICAgICAgICAiPFUwMDczPjxVMDA2Qj48VTAwRTE+PFUwMDYyPiI7IjxVMDA2QT48VTAwNzU+PFUwMDZGPjxVMDA3Nj4iCittb24gICAgICAgICAiPFUwMDZGPjxVMDExMT48VTAxMTE+PFUwMDYxPjxVMDA2QT48VTAwNjE+PFUwMDY3PjxVMDA2NT48VTAwNkQ+PFUwMEUxPjxVMDA2RT48VTAwNzU+IjsvCisJICAgICI8VTAwNjc+PFUwMDc1PjxVMDA2Rj48VTAwNzY+PFUwMDc2PjxVMDA2MT48VTAwNkQ+PFUwMEUxPjxVMDA2RT48VTAwNzU+IjsvCisgICAgICAgICAgICAiPFUwMDZFPjxVMDA2QT48VTAwNzU+PFUwMDZCPjxVMDEwRD48VTAwNjE+PFUwMDZEPjxVMDBFMT48VTAwNkU+PFUwMDc1PiI7LworCSAgICAiPFUwMDYzPjxVMDA3NT48VTAwNkY+PFUwMTRCPjxVMDA2Rj48VTAwNkQ+PFUwMEUxPjxVMDA2RT48VTAwNzU+IjsvCisgICAgICAgICAgICAiPFUwMDZEPjxVMDA2OT48VTAwNjU+PFUwMDczPjxVMDA3Mz48VTAwNjU+PFUwMDZEPjxVMDBFMT48VTAwNkU+PFUwMDc1PiI7LworCSAgICAiPFUwMDY3PjxVMDA2NT48VTAwNjE+PFUwMDczPjxVMDA3Mz48VTAwNjU+PFUwMDZEPjxVMDBFMT48VTAwNkU+PFUwMDc1PiI7LworICAgICAgICAgICAgIjxVMDA3Mz48VTAwNzU+PFUwMDZGPjxVMDA2OT48VTAwNjQ+PFUwMDZFPjxVMDA2NT48VTAwNkQ+PFUwMEUxPjxVMDA2RT48VTAwNzU+IjsvCisgICAgICAgICAgICAiPFUwMDYyPjxVMDA2Rj48VTAwNzI+PFUwMDY3PjxVMDA2NT48VTAwNkQ+PFUwMEUxPjxVMDA2RT48VTAwNzU+IjsvCisgICAgICAgICAgICAiPFUwMTBEPjxVMDA2MT48VTAwNkI+PFUwMTBEPjxVMDA2MT48VTAwNkQ+PFUwMEUxPjxVMDA2RT48VTAwNzU+IjsvCisJICAgICI8VTAwNjc+PFUwMDZGPjxVMDA2Qz48VTAwNjc+PFUwMDY3PjxVMDA2Rj48VTAwNzQ+PFUwMDZEPjxVMDBFMT48VTAwNkU+PFUwMDc1PiI7LworICAgICAgICAgICAgIjxVMDA3Mz48VTAwNkI+PFUwMEUxPjxVMDA2Mj48VTAwNkQ+PFUwMDYxPjxVMDA2RD48VTAwRTE+PFUwMDZFPjxVMDA3NT4iOy8KKyAgICAgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Rj48VTAwNzY+PFUwMDZDPjxVMDA2MT48VTAwNkQ+PFUwMEUxPjxVMDA2RT48VTAwNzU+IgorJSB1c3VhbCBkYXRlIHJlcHJlc2VudGF0aW9uCislIExpbmplbiBuZWRlbmZvciBlcjogJWEsICViICVlIGIuICVZICVUICVaCislIGYuZWtzLiBiZWFyLCBnZWFzIDE0LiBiLiAyMDAxIDIxOjE1OjExIENFU1QKK2RfdF9mbXQgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMkU+PFUwMDIwPjxVMDA2Mj48VTAwMkU+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJUxpbmplbiBuZWRlbmZvciBlcjogJVktJW0tJWQKKyVmLmVrcyAyMDAxLTA0LTI2CitkX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA1OT48VTAwMkQ+PFUwMDI1PjxVMDA2RD48VTAwMkQ+PFUwMDI1PjxVMDA2ND4iCit0X2ZtdCAgICAgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICAgICAiIjsiIgordF9mbXRfYW1wbSAgIiIKKworJSBEZW5uZSBsaW5qZW4gdmlsIGdpIGYuZWtzLjoKKyUgZHVvcmFzZGF0LCBib3JnZW08VTAwRTE+bnUgMjMuIGIuIDIwMDEgMDA6NDc6NTcgQ0VTVAorZGF0ZV9mbXQgICAgICAgIjxVMDAyNT48VTAwNDE+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDQyPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyRT4vCis8VTAwMjA+PFUwMDYyPjxVMDAyRT48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA1QT4iCisKKyUgJWEgJWItJWUgJUg6JU06JVMgJVogJVkgc/huIGphbi0zMSAyMToxNToxMSBDRVQgMjAwMQorRU5EIExDX1RJTUUKKworTENfTUVTU0FHRVMKK3llc2V4cHIgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA0QT48VTAwNkE+PFUwMDU5PjxVMDA3OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNDk+PFUwMDY5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCisKK0xDX1BBUEVSCitoZWlnaHQgICAyOTcKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDZDPiIKK3RlbF9kb21fZm10ICAgICI8VTAwMjU+PFUwMDZDPiIKK2ludF9zZWxlY3QgICAgICI8VTAwMzA+PFUwMDMwPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzQ+PFUwMDM3PiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgIjxVMDA0RT48VTAwNEY+IgorY291bnRyeV9hYjMgIjxVMDA0RT48VTAwNEY+PFUwMDUyPiIKK2NvdW50cnlfbnVtIDU3OAorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3Noc19DQSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3Noc19DQQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmM1MmM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc2hzX0NBCkBAIC0wLDAgKzEsMTYwIEBACitlc2NhcGVfY2hhciAvCitjb21tZW50X2NoYXIgICUKKworJSBTZWN3ZXBlbWN0c2luIChTaHVzd2FwKSBsYW5ndWFnZSBsb2NhbGUgZm9yIENhbmFkYQorJSBzb3J0aW5nIGFjY29yZGluZyB0byBDQU4vQ1NBLVoyNDMuNC4xLTE5OTIKKyUgU291cmNlOiBOZXNraWUgTWFudWVsCislIEFkZHJlc3M6IDc0NSBTa2EtSGlpc2ggRHIgCislICAgICAgICAgIENoYXNlIEJDIFYwRSAxTTMKKyUgQ29udGFjdDogTmVza2llIE1hbnVlbAorJSBFbWFpbDogbmVza2llbUBnbWFpbC5jb20KKyUgVGVsOiArMSAtIDI1MDY3OTI4MjEKKyUgRmF4OiArMSAtIDI1MDY3OTI4MjEKKyUgTGFuZ3VhZ2U6IHNocworJSBUZXJyaXRvcnk6IENBCislIFJldmlzaW9uOiAwLjEKKyUgRGF0ZTogMjAwOC0wMS0xMQorJSBBcHBsaWNhdGlvbjogZ2VuZXJhbAorJSBVc2VyczogZ2VuZXJhbAorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiU2Vjd2VwZW1jdHNpbiBsb2NhbGUgZm9yIENhbmFkYSIKK3NvdXJjZSAgICAgIk5lc2tpZSBNYW51ZWwiCithZGRyZXNzICAgICI3NDUgU2thLUhpaXNoIERyLCBDaGFzZSBCQyBWMEUgMU0zIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIlNlY3dlcGVtY3RzaW4iCit0ZXJyaXRvcnkgICJDYW5hZGEiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDA4LTAxLTE1IgorJQorY2F0ZWdvcnkgICJzaHNfQ0E6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAic2hzX0NBOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgInNoc19DQToyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgInNoc19DQToyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgInNoc19DQToyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgInNoc19DQToyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJzaHNfQ0E6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAic2hzX0NBOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgInNoc19DQToyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgInNoc19DQToyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgInNoc19DQToyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorCityZW9yZGVyLWFmdGVyIDxSRVMtMT4KKzxDQVA+CisKKyUgIFByZXNlbnQgaW4gaXNvMTQ2NTFfdDEsIGJ1dCB0aGVzZSBkZWZpbml0aW9ucyBzZWVtIHRvIGhhdmUgYmVlbgorJSAgcmVtb3ZlZCBmcm9tIGxhdGVzdCBpc28xNDY1MSB0YWJsZXMuCityZW9yZGVyLWFmdGVyIDxVMDA0MT4KKzxVMDBDNj4gIjxhPjxlPiI7IjxMSUc+PExJRz4iOyI8Q0FQPjxDQVA+IjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNjE+Cis8VTAwRTY+ICI8YT48ZT4iOyI8TElHPjxMSUc+IjsiPE1JTj48TUlOPiI7SUdOT1JFCisKK3Jlb3JkZXItZW5kCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJlbl9DQSIKK0VORCBMQ19DVFlQRQorCitMQ19NT05FVEFSWQorY29weSAiZW5fQ0EiCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworY29weSAiZW5fQ0EiCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICAgICI8VTAwNTM+PFUwMDc4PjxVMDA2NT4iOy8KKyAgICAgICAgICAgIjxVMDA1Mz48VTAwNzA+PFUwMDY1PiI7LworICAgICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNkM+IjsvCisgICAgICAgICAgICI8VTAwNEI+PFUwMDY1PjxVMDA2Qz4iOy8KKyAgICAgICAgICAgIjxVMDA0RD48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAgICAiPFUwMDU0PjxVMDA3Mz48VTAwNjU+IjsvCisgICAgICAgICAgICI8VTAwNTQ+PFUwMDcxPjxVMDA2RD4iCitkYXkgICAgICAgICI8VTAwNTM+PFUwMDc4PjxVMDA2NT48VTAwNzQ+PFUwMDczPjxVMDA3MD48VTAwNjU+PFUwMDczPjxVMDA3MT48VTAwMjc+PFUwMDc0PiI7LworICAgICAgICAgICAiPFUwMDUzPjxVMDA3MD48VTAwNjU+PFUwMDc0PjxVMDA2Qj48VTAwNjU+PFUwMDczPjxVMDA3MT48VTAwMjc+PFUwMDc0PiI7LworICAgICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNkM+PFUwMDY1PjxVMDA3Mz48VTAwNzE+PFUwMDI3PjxVMDA3ND4iOy8KKyAgICAgICAgICAgIjxVMDA1Mz48VTAwNkI+PFUwMDY1PjxVMDA2Qz48VTAwNkM+PFUwMDY1PjxVMDA3Mz48VTAwNzE+PFUwMDI3PjxVMDA3ND4iOy8KKyAgICAgICAgICAgIjxVMDA1Mz48VTAwNkQ+PFUwMDY1PjxVMDA3Mz48VTAwNjU+PFUwMDczPjxVMDA3MT48VTAwMjc+PFUwMDc0PiI7LworICAgICAgICAgICAiPFUwMDUzPjxVMDA3ND48VTAwNzM+PFUwMDY1PjxVMDA2Qz48VTAwNkI+PFUwMDczPjxVMDA3ND48VTAwNjU+PFUwMDczPjxVMDA3MT48VTAwMjc+PFUwMDc0PiI7LworICAgICAgICAgICAiPFUwMDUzPjxVMDA3ND48VTAwNzE+PFUwMDZEPjxVMDA2NT48VTAwNkI+PFUwMDczPjxVMDA3ND48VTAwNjU+PFUwMDczPjxVMDA3MT48VTAwMjc+PFUwMDc0PiIKK2FibW9uICAgICAgIjxVMDA0Qj48VTAwNzc+PFUwMDY1PiI7LworICAgICAgICAgICAiPFUwMDU0PjxVMDA3Mz48VTAwNjk+IjsvCisgICAgICAgICAgICI8VTAwNTM+PFUwMDcxPjxVMDA2NT4iOy8KKyAgICAgICAgICAgIjxVMDA0NT48VTAwMjc+PFUwMDc3PiI7LworICAgICAgICAgICAiPFUwMDQ1PjxVMDA2Qz48VTAwNkM+IjsvCisgICAgICAgICAgICI8VTAwNTQ+PFUwMDczPjxVMDA3MD4iOy8KKyAgICAgICAgICAgIjxVMDA1ND48VTAwNzE+PFUwMDc3PiI7LworICAgICAgICAgICAiPFUwMDQzPjxVMDA3ND48VTAwMjc+IjsvCisgICAgICAgICAgICI8VTAwNTE+PFUwMDY1PjxVMDA2Qz4iOy8KKyAgICAgICAgICAgIjxVMDA1Nz48VTAwNjU+PFUwMDZDPiI7LworICAgICAgICAgICAiPFUwMDU1PjxVMDAzNz48VTAwNkM+IjsvCisgICAgICAgICAgICI8VTAwNTQ+PFUwMDY1PjxVMDA3ND4iCittb24gICAgICAgICI8VTAwNTA+PFUwMDY1PjxVMDA2Qz48VTAwNkM+PFUwMDZCPjxVMDA3Nz48VTAwNjU+PFUwMDc0PjxVMDAyNz48VTAwNkQ+PFUwMDY5PjxVMDA2RT4iOy8KKyAgICAgICAgICAgIjxVMDA1MD48VTAwNjU+PFUwMDZDPjxVMDA2Mz48VTAwNzQ+PFUwMDczPjxVMDA2OT48VTAwNzA+PFUwMDc3PjxVMDA2NT48VTAwNkU+PFUwMDI3PjxVMDA3ND48VTAwNjU+PFUwMDZFPiI7LworICAgICAgICAgICAiPFUwMDUwPjxVMDA2NT48VTAwNkM+PFUwMDZDPjxVMDA3Mz48VTAwNzE+PFUwMDY1PjxVMDAyNz48VTAwNzA+PFUwMDc0PjxVMDA3Mz4iOy8KKyAgICAgICAgICAgIjxVMDA1MD48VTAwNjU+PFUwMDczPjxVMDA2Qz48VTAwNkM+PFUwMDY1PjxVMDAyNz48VTAwNzc+PFUwMDc0PjxVMDA2NT48VTAwNkU+IjsvCisgICAgICAgICAgICI8VTAwNTA+PFUwMDY1PjxVMDA2Qz48VTAwNkM+PFUwMDM3PjxVMDA2NT48VTAwNkM+PFUwMDZDPjxVMDAzNz48VTAwNjU+PFUwMDI3PjxVMDAzNz48VTAwNkM+PFUwMDZDPjxVMDA3MT48VTAwNzQ+PFUwMDY1PjxVMDA2RT4iOy8KKyAgICAgICAgICAgIjxVMDA1MD48VTAwNjU+PFUwMDZDPjxVMDA2Qz48VTAwNzQ+PFUwMDczPjxVMDA3MD48VTAwNjU+PFUwMDI3PjxVMDA2RT48VTAwNzQ+PFUwMDczPjxVMDA2Qj4iOy8KKyAgICAgICAgICAgIjxVMDA1MD48VTAwNjU+PFUwMDZDPjxVMDA2Qz48VTAwNzQ+PFUwMDcxPjxVMDA3Nz48VTAwNjU+PFUwMDZDPjxVMDA3MT48VTAwMjc+PFUwMDc3PjxVMDA2NT48VTAwMjc+PFUwMDZDPjxVMDAyNz48VTAwNzQ+IjsvCisgICAgICAgICAgICI8VTAwNTA+PFUwMDY1PjxVMDA2Qz48VTAwNkM+PFUwMDYzPjxVMDA3ND48VTAwMjc+PFUwMDY1PjxVMDAyNz48VTAwNzg+PFUwMDY1PjxVMDA2Qz48VTAwMjc+PFUwMDYzPjxVMDA3ND48VTAwNjU+PFUwMDZFPiI7LworICAgICAgICAgICAiPFUwMDUwPjxVMDA2NT48VTAwNzM+PFUwMDcxPjxVMDA2NT48VTAwNkM+PFUwMDcxPjxVMDA2Qz48VTAwNjU+PFUwMDI3PjxVMDA2Qz48VTAwNzQ+PFUwMDY1PjxVMDA2RT4iOy8KKyAgICAgICAgICAgIjxVMDA1MD48VTAwNjU+PFUwMDczPjxVMDA2Qz48VTAwNkM+PFUwMDc3PjxVMDA2NT48VTAwMjc+PFUwMDZDPjxVMDA3Mz48VTAwNzQ+PFUwMDY1PjxVMDA2RT4iOy8KKyAgICAgICAgICAgIjxVMDA1MD48VTAwNjU+PFUwMDZDPjxVMDA2Qz48VTAwNjM+PFUwMDM3PjxVMDA2NT48VTAwNkM+PFUwMDZDPjxVMDAzNz48VTAwNzU+PFUwMDI3PjxVMDAzNz48VTAwNkM+PFUwMDZDPjxVMDA2Mz48VTAwNzc+PFUwMDc0PjxVMDA2NT48VTAwNkU+PFUwMDI3PiI7LworICAgICAgICAgICAiPFUwMDUwPjxVMDA2NT48VTAwNkM+PFUwMDZDPjxVMDA3ND48VTAwNjU+PFUwMDc0PjxVMDA2NT48VTAwMjc+PFUwMDc0PjxVMDA3MT48VTAwMjc+PFUwMDY1PjxVMDA2RD4iCitkX3RfZm10ICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNzk+IgordF9mbXQgICAgICAiPFUwMDI1PjxVMDA3Mj4iCithbV9wbSAgICAgICI8VTAwNDE+PFUwMDREPiI7IjxVMDA1MD48VTAwNEQ+IgordF9mbXRfYW1wbSAiPFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD4iCitkYXRlX2ZtdCAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKKyUgIEZJWE1FOiBmb3VuZCBpbiBDTERSCitmaXJzdF93ZWVrZGF5IDEKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCitjb3B5ICJlbl9DQSIKK0VORCBMQ19NRVNTQUdFUworCitMQ19QQVBFUgorY29weSAiZW5fQ0EiCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCitjb3B5ICJlbl9DQSIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgImVuX0NBIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK2NvcHkgImVuX0NBIgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICI8VTAwNDM+PFUwMDQxPiIKK2NvdW50cnlfYWIzICI8VTAwNDM+PFUwMDQxPjxVMDA0RT4iCitjb3VudHJ5X251bSAxMjQKK2xhbmdfbmFtZSAiPFUwMDUzPjxVMDA2NT48VTAwNjM+PFUwMDc3PjxVMDA2NT48VTAwNzA+PFUwMDY1PjxVMDA2RD48VTAwNjM+PFUwMDc0PjxVMDA3Mz48VTAwNjk+PFUwMDZFPiIKK2xhbmdfdGVybSAiPFUwMDczPjxVMDA2OD48VTAwNzM+IgorbGFuZ19saWIgIjxVMDA3Mz48VTAwNjg+PFUwMDczPiIKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9zaV9MSyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3NpX0xLCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZjYxOGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9zaV9MSwpAQCAtMCwwICsxLDIyMCBAQAorZXNjYXBlX2NoYXIgIC8KK2NvbW1lbnRfY2hhciAlCislIFNpbmhhbGEgbGFuZ3VhZ2UgbG9jYWxlIGZvciBTcmkgTGFua2EuCislIENoYXJzZXQ6IFVURi04CislIENvbnRyaWJ1dGVkIGJ5IEFudXJhZGhhIFJhdG5hd2VlcmEgPGFudXJhZGhhIGF0IGdudSBvcmc+CislIGFuZCBIaW1pcmEgUmF0bmF0aWxha2UgPGhpbWlyYSBhdCBsaW51eCBsaz4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlNpbmhhbGEgbGFuZ3VhZ2UgbG9jYWxlIGZvciBTcmkgTGFua2EiCitzb3VyY2UgICAgICJMYW5rYSBMaW51eCBVc2VyIEdyb3VwIChMS0xVRykgd3d3Lmx1Zy5saywgc2luaGFsYS5saW51eC5sayIKK2FkZHJlc3MgICAgIiIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImxpYmMtbG9jYWxlc0Bzb3VyY2VzLnJlZGhhdC5jb20iCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJTaW5oYWxhIgordGVycml0b3J5ICAiU3JpIExhbmthIgorcmV2aXNpb24gICAiMC45IgorZGF0ZSAgICAgICAiMjAwNC4xMC4wMSIKKyUKK2NhdGVnb3J5ICAiaTE4bjoyMDAyIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJpMThuOjIwMDIiO0xDX0NUWVBFCitjYXRlZ29yeSAgImkxOG46MjAwMiI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJpMThuOjIwMDIiO0xDX1RJTUUKK2NhdGVnb3J5ICAiaTE4bjoyMDAyIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImkxOG46MjAwMiI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiaTE4bjoyMDAyIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJpMThuOjIwMDIiO0xDX1BBUEVSCitjYXRlZ29yeSAgImkxOG46MjAwMiI7TENfTkFNRQorY2F0ZWdvcnkgICJpMThuOjIwMDIiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiaTE4bjoyMDAyIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKKworJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEKK2NvcHkgImlzbzE0NjUxX3QxIgorCitFTkQgTENfQ09MTEFURQorCisKK0xDX01PTkVUQVJZCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIHRoZSBMQ19NT05FVEFSWSBjYXRlZ29yeQorJQoraW50X2N1cnJfc3ltYm9sICAgICAgICI8VTAwNEM+PFUwMDRCPjxVMDA1Mj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICI8VTIwQTg+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgIDMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAxCislCitFTkQgTENfTU9ORVRBUlkKKworCitMQ19OVU1FUklDCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTlVNRVJJQyAgY2F0ZWdvcnkuCislCitkZWNpbWFsX3BvaW50ICAgICAgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAiPFUwMDJDPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgMworJQorRU5EIExDX05VTUVSSUMKKworCitMQ19USU1FCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfVElNRSAgY2F0ZWdvcnkuCislCislIEFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZXMgKCVhKQorYWJkYXkgICAgICAgIjxVMEQ4OT4iOyI8VTBEQzM+IjsvCisgICAgICAgICAgICAiPFUwRDg1PiI7IjxVMERCNj4iOy8KKyAgICAgICAgICAgICI8VTBEQjY+PFUwRENBPjxVMjAwRD48VTBEQkI+IjsiPFUwREMzPjxVMEREMj4iOy8KKyAgICAgICAgICAgICI8VTBEQzM+PFUwREQ5PiIKKyUKKyUgRnVsbCB3ZWVrZGF5IG5hbWVzICglQSkKK2RheSAgICAgICAgICI8VTBEODk+PFUwREJCPjxVMEREMj48VTBEQUY+PFUwRENGPiI7LworICAgICAgICAgICAgIjxVMERDMz48VTBEQjM+PFUwREQ0PjxVMERBRj48VTBEQ0Y+IjsvCisgICAgICAgICAgICAiPFUwRDg1PjxVMEQ5Rj48VTBEQzQ+PFUwREJCPjxVMEREND48VTBEQzA+PFUwRENGPjxVMERBRj48VTBEQ0Y+IjsvCisgICAgICAgICAgICAiPFUwREI2PjxVMERBRj48VTBEQ0Y+PFUwREFGPjxVMERDRj4iOy8KKyAgICAgICAgICAgICI8VTBEQjY+PFUwRENBPjxVMjAwRD48VTBEQkI+PFUwREM0PjxVMERDMz48VTBEQ0E+PFUwREI0PjxVMERBRD48VTBERDI+PFUwREIxPjxVMERDQT48VTBEQUY+PFUwRENGPiI7LworCSAgICAiPFUwREMzPjxVMEREMj48VTBEOUE+PFUwREQ0PjxVMERCQj48VTBEQ0Y+PFUwREFGPjxVMERDRj4iOy8KKyAgICAgICAgICAgICI8VTBEQzM+PFUwREQ5PjxVMERCMT48VTBEQzM+PFUwREQ0PjxVMERCQj48VTBEQ0Y+PFUwREFGPjxVMERDRj4iCislCislIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzICglYikKK2FibW9uICAgICAgICI8VTBEQTI+PFUwREIxPiI7LworICAgICAgICAgICAgIjxVMERCND48VTBERDk+PFUwREI2PiI7LworICAgICAgICAgICAgIjxVMERCOD48VTBEQ0Y+PFUwREJCPjxVMERDQT4iOy8KKyAgICAgICAgICAgICI8VTBEODU+PFUwREI0PjxVMERDQT48VTIwMEQ+PFUwREJCPjxVMEREMj4iOy8KKyAgICAgICAgICAgICI8VTBEQjg+PFUwREQwPjxVMERCQT48VTBERDI+IjsvCisgICAgICAgICAgICAiPFUwREEyPjxVMERENj48VTBEQjE+PFUwREQyPiI7LworICAgICAgICAgICAgIjxVMERBMj48VTBERDY+PFUwREJEPjxVMEREMj4iOy8KKyAgICAgICAgICAgICI8VTBEODU+PFUwRDlDPjxVMERERD4iOy8KKyAgICAgICAgICAgICI8VTBEQzM+PFUwREQwPjxVMERCND48VTBEQ0E+IjsvCisgICAgICAgICAgICAiPFUwRDk0PjxVMEQ5QT48VTBEQ0E+IjsvCisgICAgICAgICAgICAiPFUwREIxPjxVMEREOT48VTBEQzA+PFUwREQwPiI7LworICAgICAgICAgICAgIjxVMERBRj48VTBERDk+PFUwREMzPjxVMEREMD4iCislCislIEZ1bGwgbW9udGggbmFtZXMgKCVCKQorbW9uICAgICAgICAgIjxVMERBMj48VTBEQjE+PFUwREMwPjxVMERDRj48VTBEQkI+PFUwREQyPiI7LworCSAgICAiPFUwREI0PjxVMEREOT48VTBEQjY+PFUwREJCPjxVMERDMD48VTBEQ0Y+PFUwREJCPjxVMEREMj4iOy8KKyAgICAgICAgICAgICI8VTBEQjg+PFUwRENGPjxVMERCQj48VTBEQ0E+PFUwREFEPjxVMEREND4iOy8KKyAgICAgICAgICAgICI8VTBEODU+PFUwREI0PjxVMERDQT48VTIwMEQ+PFUwREJCPjxVMEREMj48VTBEQkE+PFUwREQ5PjxVMERCRD48VTBEQ0E+IjsvCisgICAgICAgICAgICAiPFUwREI4PjxVMEREMD48VTBEQkE+PFUwREQyPiI7LworICAgICAgICAgICAgIjxVMERBMj48VTBERDY+PFUwREIxPjxVMEREMj4iOy8KKyAgICAgICAgICAgICI8VTBEQTI+PFUwREQ2PjxVMERCRD48VTBERDI+IjsvCisgICAgICAgICAgICAiPFUwRDg1PjxVMEQ5Qz48VTBEREQ+PFUwREMzPjxVMERDQT48VTBEQUQ+PFUwREQ0PiI7LworICAgICAgICAgICAgIjxVMERDMz48VTBERDA+PFUwREI0PjxVMERDQT48VTBEQUQ+PFUwREQwPjxVMERCOD48VTBEQ0E+PFUwREI2PjxVMERCQj48VTBEQ0E+IjsvCisgICAgICAgICAgICAiPFUwRDk0PjxVMEQ5QT48VTBEQ0E+PFUwREFEPjxVMERERD48VTBEQjY+PFUwREJCPjxVMERDQT4iOy8KKyAgICAgICAgICAgICI8VTBEQjE+PFUwRERDPjxVMERDMD48VTBERDA+PFUwREI4PjxVMERDQT48VTBEQjY+PFUwREJCPjxVMERDQT4iOy8KKyAgICAgICAgICAgICI8VTBEQUY+PFUwREQ5PjxVMERDMz48VTBERDA+PFUwREI4PjxVMERDQT48VTBEQjY+PFUwREJCPjxVMERDQT4iCislCislIEVxdWl2YWxlbnQgb2YgQU0gUE0KK2FtX3BtICAgICAgICI8VTBEQjQ+PFUwREQ5PjxVMDAyRT48VTBEQzA+PFUwMDJFPiI7IjxVMERCND48VTAwMkU+PFUwREMwPjxVMDAyRT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24gKHVzZSB0aGUgc2FtZSBhcyBJU08pCislICVZLSVtLSVkICVIOiVNOiVTICV6CitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA1OT48VTAwMkQ+PFUwMDI1PjxVMDA2RD48VTAwMkQ+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3QT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKHVzZSB0aGUgc2FtZSBhcyBJU08pCislICVZLSVtLSVkCitkX2ZtdCAiPFUwMDI1PjxVMDA1OT48VTAwMkQ+PFUwMDI1PjxVMDA2RD48VTAwMkQ+PFUwMDI1PjxVMDA2ND4iCislCislIEFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJUg6JU06JVMKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPiIKKyUKKyUgQXBwcm9wcmlhdGUgMTIgaCB0aW1lIHJlcHJlc2VudGF0aW9uCislICVwICVJOiVNOiVTCit0X2ZtdF9hbXBtICAiPFUwMDI1PjxVMDA3MD48VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgKGRhdGUoMSkpCislICVZICVCICVlICVBICVIOiVNOiVTICV6CitkYXRlX2ZtdCAgICAgIjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNDI+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMERDMD48VTBERDA+PFUwREIxPjxVMEREMj48VTAwMjA+PFUwMDI1PjxVMDA0MT48VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3QT4iCislCitFTkQgTENfVElNRQorCisKK0xDX01FU1NBR0VTCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTUVTU0FHRVMgY2F0ZWdvcnkKKyUKKyUgXltcdTBkOTRcdTAwNTlcdTAwNzldCit5ZXNleHByICAgICAiPFUwMDVFPjxVMDA1Qj48VTBEOTQ+PFUwMDU5PjxVMDA3OT48VTAwNUQ+IgorJQorJSBeW1x1MGRiMVx1MDA0ZVx1MDA2ZV0KK25vZXhwciAgICAgICI8VTAwNUU+PFUwMDVCPjxVMERCMT48VTAwNEU+PFUwMDZFPjxVMDA1RD4iCislCit5ZXNzdHIgICAgICAiPFUwRDk0PjxVMERDMD48VTBEQ0E+IgorJQorbm9zdHIgICAgICAgIjxVMERCMT48VTBERDA+PFUwREFEPiIKKyUKK0VORCBMQ19NRVNTQUdFUworCisKK0xDX1BBUEVSCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX1BBUEVSIGNhdGVnb3J5CislIFBhcGVyIHNpemUgaXMgQTQKKyUKK2hlaWdodCAgICAgIDI5Nword2lkdGggICAgICAgMjEwCisKK0VORCBMQ19QQVBFUgorCisKK0xDX05BTUUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTkFNRSBjYXRlZ29yeQorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNzM+IgorbmFtZV9nZW4gICAgIiIKK25hbWVfbXIgICAgICI8VTBEQjg+PFUwREJBPjxVMERDRj4iCituYW1lX21ycyAgICAiPFUwREI4PjxVMEREMj48VTBEQkE+IgorbmFtZV9taXNzICAgIjxVMERCOD48VTBERDI+PFUwREJBPiIKK25hbWVfbXMgICAgICI8VTBEQjg+PFUwREQyPjxVMERCQT4iCisKK0VORCBMQ19OQU1FCisKKworTENfQUREUkVTUworJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19BRERSRVNTIGNhdGVnb3J5CislCitwb3N0YWxfZm10ICAiPFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3Mz48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3Mj4iCisKK0VORCBMQ19BRERSRVNTCisKKworTENfVEVMRVBIT05FCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX1RFTEVQSE9ORQorJQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjg+PFUwMDI1PjxVMDA2MT48VTAwMjk+LworPFUwMDIwPjxVMDAyNT48VTAwNkM+IgordGVsX2RvbV9mbXQgICAgIjxVMDAyOD48VTAwMjU+PFUwMDYxPjxVMDAyOT48VTAwMjA+PFUwMDI1PjxVMDA2Qz4iCitpbnRfc2VsZWN0ICAgICAiPFUwMDMwPjxVMDAzMD4iCitpbnRfcHJlZml4ICAgICAiPFUwMDM5PjxVMDAzND4iCisKK0VORCBMQ19URUxFUEhPTkUKKworCitMQ19NRUFTVVJFTUVOVAorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19NRUFTVVJFTUVOVAorJSAxIGlzIElTTyAxMDAwIChtZXRyaWMpCislCittZWFzdXJlbWVudCAxCisKK0VORCBMQ19NRUFTVVJFTUVOVApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc2lkX0VUIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc2lkX0VUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZTMyMzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9zaWRfRVQKQEAgLTAsMCArMSwyMjYgQEAKK2NvbW1lbnRfY2hhciAgICAlCitlc2NhcGVfY2hhciAgICAgLworCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislIFNpZGFtYSBsYW5ndWFnZSBsb2NhbGUgZm9yIEV0aGlvcGlhLgorJQorJSBDaGFyc2V0OiBVVEYtOAorJQorJSBTaWRhbWEgdGVybXMgcHJvdmlkZWQgYnkgRGVzc2FsZWduIEdhcnNhbW8gR2FiYmlzbyA8Z2FiYmlzbzIwMDFAeWFob28uY29tPgorJSBvZiB0aGUgTmF0aW9uYWwgVW5pdmVyc2l0eSBvZiBJcmVsYW5kLCBEdWJsaW4gYW5kIEEuSC4gV2VubworJSA8YnVzMWh3YUBlYXN0LTAxLm5vdmVsbC5sZWVkcy5hYy51az4uIFByZXBhcmVkIGFuZCBjb250cmlidXRlZCB0byBnbGliYworJSBieSBEYW5pZWwgWWFjb2IgPGxvY2FsZXNAZ2Vlei5vcmc+LgorJQorJSBUaGlzIGxvY2FsZSBkYXRhIGhhcyBiZWVuIGRldmVsb3BlZCB1bmRlciB0aGUgWWVoYSBQcm9qZWN0OgorJSAgICAgIGh0dHA6Ly95ZWhhLnNvdXJjZWZvcmdlLm5ldC8KKyUKKyUgYnVpbGQgd2l0aDogbG9jYWxlZGVmIC1mIFVURi04IC1pIHNpZF9FVCBzaWRfRVQKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKKworTENfSURFTlRJRklDQVRJT04KKyUKK3RpdGxlICAgICAgIlNpZGFtYSBsYW5ndWFnZSBsb2NhbGUgZm9yIEV0aGlvcGlhLiIKK3NvdXJjZSAgICAgIkdlJ2V6IEZyb250aWVyIEZvdW5kYXRpb24iCithZGRyZXNzICAgICI3ODAyIFNvbG9tb24gU2VhbCBEci4sIFNwcmluZ2ZpZWxkLCBWQSAyMjE1MiwgVVNBIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAibG9jYWxlc0BnZWV6Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgInNpZCIKK3RlcnJpdG9yeSAgIkVUIgorcmV2aXNpb24gICAiMC4yMCIKK2RhdGUgICAgICAgIjIwMDMtMDctMDUiCislCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NRUFTVVJFTUVOVAorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgInBvc2l4OjE5OTMiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX1RFTEVQSE9ORQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19USU1FCislCitFTkQgTENfSURFTlRJRklDQVRJT04KKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSAgRXRoaW9waWMgU3BlY2lmYyBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfQ09MTEFURQorY29weSAiYW1fRVQiCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAidGlfRVQiCitFTkQgTENfQ1RZUEUKKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSAgRXRoaW9waWEgU3BlY2lmYyBhbmQgU2hhcmVkIERhdGE6CislCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCitMQ19NRUFTVVJFTUVOVAorY29weSAidGlfRVQiCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTU9ORVRBUlkKK2NvcHkgInRpX0VUIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgInRpX0VUIgorRU5EIExDX05VTUVSSUMKKworTENfUEFQRVIKK2NvcHkgInRpX0VUIgorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQorY29weSAidGlfRVQiCitFTkQgTENfVEVMRVBIT05FCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIFNpZGFtYSBTcGVjaWZpYyBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfQUREUkVTUworJQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19BRERSRVNTIGNhdGVnb3J5LgorJQorcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3Mj4iCitjb3VudHJ5X25hbWUgICI8VTAwNDk+PFUwMDc0PjxVMDA2OT48VTAwNzk+PFUwMDZGPjxVMDA2Rj48VTAwNzA+PFUwMDY4PjxVMDA2OT48VTAwNzk+PFUwMDYxPiIKK2NvdW50cnlfcG9zdCAgIjxVMDA0NT48VTAwNTQ+PFUwMDQ4PiIKK2NvdW50cnlfYWIyICAgIjxVMDA0NT48VTAwNTQ+IgorY291bnRyeV9hYjMgICAiPFUwMDQ1PjxVMDA1ND48VTAwNDg+IgorY291bnRyeV9udW0gICAyMzEgICAlIDIxMCBmb3VuZCBpbiBhdCBsZWFzdCBvbmUgSVNPIDMxNjYgZG9jCislIGNvdW50cnlfY2FyICAgdW5rbm93bgorJSBjb3VudHJ5X2lzYm4gIHVua25vd24sIE5lZWQgSVNPIDIxMDgKK2xhbmdfbmFtZSAgICAgIjxVMDA1Mz48VTAwNjk+PFUwMDY0PjxVMDA2MT48VTAwNjE+PFUwMDZEPjxVMDA3NT48VTAwMjA+PFUwMDQxPjxVMDA2Nj48VTAwNkY+IgorbGFuZ190ZXJtICAgICAiPFUwMDczPjxVMDA2OT48VTAwNjQ+IgorbGFuZ19saWIgICAgICAiPFUwMDczPjxVMDA2OT48VTAwNjQ+IgorJQorRU5EIExDX0FERFJFU1MKKworCitMQ19NRVNTQUdFUworY29weSAidGlfRVQiCitFTkQgTENfTUVTU0FHRVMKKworCitMQ19OQU1FCislCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX05BTUUgY2F0ZWdvcnkuCislCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCituYW1lX2dlbiAgICAiIgorbmFtZV9tciAgICAgIjxVMDA0Qj48VTAwNjE+PFUwMDZDPjxVMDA2MT48VTAwNjE+IgorbmFtZV9tcnMgICAgIjxVMDA0ND48VTAwNzU+PFUwMDZCPjxVMDA2Qj48VTAwNkY+IgorbmFtZV9taXNzICAgIjxVMDA0Mj48VTAwNjU+PFUwMDY1PjxVMDA3ND48VTAwNkY+IgorbmFtZV9tcyAgICAgIiIKKyUKK0VORCBMQ19OQU1FCisKKworTENfVElNRQorJQorJSBBYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWVzICglYSkKKyUKK2FiZGF5ICAgICI8VTAwNTM+PFUwMDYxPjxVMDA2RD4iOy8KKyAgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA2RT4iOy8KKyAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA2Qj4iOy8KKyAgICAgICAgICI8VTAwNTI+PFUwMDZGPjxVMDA3Nz4iOy8KKyAgICAgICAgICI8VTAwNDg+PFUwMDYxPjxVMDA2RD4iOy8KKyAgICAgICAgICI8VTAwNDE+PFUwMDcyPjxVMDA2Mj4iOy8KKyAgICAgICAgICI8VTAwNTE+PFUwMDY5PjxVMDA2ND4iCislCislIEZ1bGwgd2Vla2RheSBuYW1lcyAoJUEpCislCitkYXkgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNkQ+PFUwMDYyPjxVMDA2MT48VTAwNzQ+PFUwMDYxPiI7LworICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDZFPjxVMDA3OT48VTAwNkY+IjsvCisgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNjE+PFUwMDZCPjxVMDA2OT48VTAwNzM+PFUwMDYxPjxVMDA2RT48VTAwNzk+PFUwMDZGPiI7LworICAgICAgICAgIjxVMDA1Mj48VTAwNkY+PFUwMDZGPjxVMDA3Nz48VTAwNjU+IjsvCisgICAgICAgICAiPFUwMDQ4PjxVMDA2MT48VTAwNkQ+PFUwMDc1PjxVMDA3Mz48VTAwNjU+IjsvCisgICAgICAgICAiPFUwMDQxPjxVMDA3Mj48VTAwNjI+PFUwMDY1PiI7LworICAgICAgICAgIjxVMDA1MT48VTAwNjk+PFUwMDY0PjxVMDA2MT48VTAwNjE+PFUwMDZEPjxVMDA2NT4iCislCislIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzICglYikKKyUKK2FibW9uICAgICI8VTAwNEE+PFUwMDYxPjxVMDA2RT4iOy8KKyAgICAgICAgICI8VTAwNDY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Mj4iOy8KKyAgICAgICAgICI8VTAwNDE+PFUwMDcwPjxVMDA3Mj4iOy8KKyAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2Qz4iOy8KKyAgICAgICAgICI8VTAwNDE+PFUwMDc1PjxVMDA2Nz4iOy8KKyAgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA3MD4iOy8KKyAgICAgICAgICI8VTAwNEY+PFUwMDYzPjxVMDA3ND4iOy8KKyAgICAgICAgICI8VTAwNEU+PFUwMDZGPjxVMDA3Nj4iOy8KKyAgICAgICAgICI8VTAwNDQ+PFUwMDY1PjxVMDA2Mz4iCislCislIEZ1bGwgbW9udGggbmFtZXMgKCVCKQorJQorbW9uICAgICAgIjxVMDA0QT48VTAwNjE+PFUwMDZFPjxVMDA3NT48VTAwNjE+PFUwMDcyPjxVMDA3OT4iOy8KKyAgICAgICAgICI8VTAwNDY+PFUwMDY1PjxVMDA2Mj48VTAwNzI+PFUwMDc1PjxVMDA2MT48VTAwNzI+PFUwMDc5PiI7LworICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPjxVMDA2Mz48VTAwNjg+IjsvCisgICAgICAgICAiPFUwMDQxPjxVMDA3MD48VTAwNzI+PFUwMDY5PjxVMDA2Qz4iOy8KKyAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2RT48VTAwNjU+IjsvCisgICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkM+PFUwMDc5PiI7LworICAgICAgICAgIjxVMDA0MT48VTAwNzU+PFUwMDY3PjxVMDA3NT48VTAwNzM+PFUwMDc0PiI7LworICAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAgIjxVMDA0Rj48VTAwNjM+PFUwMDc0PjxVMDA2Rj48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgICI8VTAwNEU+PFUwMDZGPjxVMDA3Nj48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAgIjxVMDA0ND48VTAwNjU+PFUwMDYzPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IgorJQorJSBFcXVpdmFsZW50IG9mIEFNIFBNCislCithbV9wbSAgICAiPFUwMDczPjxVMDA2Rj48VTAwNkY+PFUwMDY0PjxVMDA2Rj4iOy8KKyAgICAgICAgICI8VTAwNjg+PFUwMDYxPjxVMDA3Nz48VTAwNzc+PFUwMDYxPjxVMDA3Mj48VTAwNkY+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uICgleCkKKyUJIiVkLyVtLyVZIgorJQorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA1OT4iCislCislIEFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24gKCVYKQorJQkiJWw6JU06JVMiCislCit0X2ZtdCAiPFUwMDI1PjxVMDA2Qz48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4iCislCislIEFwcHJvcHJpYXRlIEFNL1BNIHRpbWUgcmVwcmVzZW50YXRpb24gKCVyKQorJQkiJVggJXAiCislCit0X2ZtdF9hbXBtICI8VTAwMjU+PFUwMDU4PjxVMDAyMD48VTAwMjU+PFUwMDcwPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbiAoJWMpCislCSIlQSwgJUIgJWUsICVZICVyICVaCislCitkX3RfZm10ICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMkM+LworPFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uIChkYXRlKDEpKQorJQkiJUEsICViICVlLCAlciAlWiAlWSIKKyUKK2RhdGVfZm10ICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMkM+LworPFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDIwPjxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKyUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3NrX1NLIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc2tfU0sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVkN2RhOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3NrX1NLCkBAIC0wLDAgKzEsMjI3IEBACitlc2NhcGVfY2hhciAvCitjb21tZW50X2NoYXIgJQorJQorJSBTbG92YWsgTGFuZ3VhZ2UgTG9jYWxlIGZvciBTbG92YWsKKyUgU291cmNlOgorJSBBZGRyZXNzOiBOYXJjaXNvdjxhJz4gNTYsIFNLLTgyMSAwMSBCcmF0aXNsYXZhLCBTbG92YWsgUmVwdWJsaWMKKyUgQ29udGFjdDogU3RhbmlzbGF2IE1lZHVuYQorJSBFbWFpbDogICBzdGFub0BldW5ldC5zaworJSBUZWw6CislIEZheDoKKyUgTGFuZ3VhZ2U6IHNrCislIFRlcnJpdG9yeTogU0sKKyUgUmV2aXNpb246IDEuMgorJSBEYXRlOiAxOTk4LTA1LTI2CislIEFwcGxpY2F0aW9uOiBnZW5lcmFsCislIFVzZXJzOiBnZW5lcmFsCislIFJlcGVydG9pcmVtYXA6IG1uZW1vbmljLmRzCislIENoYXJzZXQ6IElTTy04ODU5LTIKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbyBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworJSAxOTk3LTA1LTE0OiBPZHZvZGVu6SB6IGNzX0NaIGxvY2FsZSBWbGFkaW3tcmEgTWljaGxhLgorJSAgICAgICAgICAgICBDb2xsYXRlIGFsZ29yaXRteSBwcmV2emF06SBiZXpvIHptaWVuIChub3JtYSBib2xhIHJvdm5ha+EpLAorJSAgICAgICAgICAgICB2eXN2ZXRsZW5pZSBwb3pyaSBjc19DWgorCislIHNwcmFjb3ZhbmllOgorJSUgICAgbG9jYWxlZGVmIC1pIDx0ZW50by1zb3Vib3I+IC1mIElTTy04ODU5LTIgc2tfU0sKKworJSUgRG8gc/pib3J1IC91c3Ivc2hhcmUvbG9jYWxlL2xvY2FsZS5hbGlhcyBqZSB2aG9kbukgZG9w7XNhuyBuYXNsZWRvdm7pIGFsaWFzeToKKyUlIHNrCSAgc2tfU0suSVNPLTg4NTktMgorJSUgc2xvdmFrIHNrX1NLLklTTy04ODU5LTIKKworJSBEZWZpbu1jaWEgdHlwb3Ygem5ha292CisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJTbG92YWsgbG9jYWxlIGZvciBTbG92YWsiCitzb3VyY2UgICAgICIiCithZGRyZXNzICAgICJOYXJjaXNvdjxVMDBFMT4gNTYsIFNLLTgyMSAwMSBCcmF0aXNsYXZhLCBTbG92YWsgUmVwdWJsaWMiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiU2xvdmFrIgordGVycml0b3J5ICAiU2xvdmFrIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAic2tfU0s6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAic2tfU0s6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAic2tfU0s6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJza19TSzoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgInNrX1NLOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAic2tfU0s6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAic2tfU0s6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAic2tfU0s6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAic2tfU0s6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJza19TSzoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgInNrX1NLOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworJSBUcmllZGVuaWUKKworTENfQ09MTEFURQorY29weSAiY3NfQ1oiCitFTkQgTENfQ09MTEFURQorCisKKyUlIExDX01FU1NBR0VTCislJSBla3ZpdmFsZW50eSB5ZXMvbm8KKyUlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTENfTUVTU0FHRVMKKworeWVzZXhwcgkJIjxVMDA1RT48VTAwNUI+PFUwMDYxPjxVMDA0MT48VTAwRTE+PFUwMEMxPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAJIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCit5ZXNzdHIJCSI8VTAwRTE+PFUwMDZFPjxVMDA2Rj4iCitub3N0cgkJIjxVMDA2RT48VTAwNjk+PFUwMDY1PiIKKworRU5EIExDX01FU1NBR0VTCisKKyUlIExDX01PTkVUQVJZIC0tIHBlbmlhemUKKyUlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTENfTU9ORVRBUlkKKworaW50X2N1cnJfc3ltYm9sCQkiPFUwMDUzPjxVMDA0Qj48VTAwNEI+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbAkJIjxVMDA1Mz48VTAwNkI+IgorbW9uX2RlY2ltYWxfcG9pbnQJIjxVMDAyQz4iCittb25fdGhvdXNhbmRzX3NlcAkiPFUwMEEwPiIKK21vbl9ncm91cGluZyAgICAgIAkzOzMKK3Bvc2l0aXZlX3NpZ24JCSIiCituZWdhdGl2ZV9zaWduCQkiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cwkJMgorZnJhY19kaWdpdHMJCTIKK3BfY3NfcHJlY2VkZXMJCTAKK3Bfc2VwX2J5X3NwYWNlCQkxCituX2NzX3ByZWNlZGVzCQkwCituX3NlcF9ieV9zcGFjZQkJMQorcF9zaWduX3Bvc24JCTEKK25fc2lnbl9wb3NuCQkxCisKK0VORCBMQ19NT05FVEFSWQorCislJSDI7XNsYQorJSUgLS0tLS0tLS0tLS0tLS0KKworTENfTlVNRVJJQworCitkZWNpbWFsX3BvaW50CQkiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAJCSI8VTAwQTA+IgorZ3JvdXBpbmcJCTM7MworCitFTkQgTENfTlVNRVJJQworCislJSDIYXMKKworTENfVElNRQorCisKK2FiZGF5CQkiPFUwMDRFPjxVMDA2NT4iOy8KKwkJIjxVMDA1MD48VTAwNkY+IjsvCisJCSI8VTAwNTU+PFUwMDc0PiI7LworCQkiPFUwMDUzPjxVMDA3ND4iOy8KKwkJIjxVMDE2MD48VTAwNzQ+IjsvCisJCSI8VTAwNTA+PFUwMDY5PiI7LworCQkiPFUwMDUzPjxVMDA2Rj4iCisKK2RheQkJIjxVMDA0RT48VTAwNjU+PFUwMDY0PjxVMDA2NT48VTAxM0U+PFUwMDYxPiI7LworCQkiPFUwMDUwPjxVMDA2Rj48VTAwNkU+PFUwMDY0PjxVMDA2NT48VTAwNkM+PFUwMDZGPjxVMDA2Qj4iOy8KKwkJIjxVMDA1NT48VTAwNzQ+PFUwMDZGPjxVMDA3Mj48VTAwNkY+PFUwMDZCPiI7LworCQkiPFUwMDUzPjxVMDA3ND48VTAwNzI+PFUwMDY1PjxVMDA2ND48VTAwNjE+IjsvCisJCSI8VTAxNjA+PFUwMDc0PjxVMDA3Nj48VTAwNzI+PFUwMDc0PjxVMDA2Rj48VTAwNkI+IjsvCisJCSI8VTAwNTA+PFUwMDY5PjxVMDA2MT48VTAwNzQ+PFUwMDZGPjxVMDA2Qj4iOy8KKwkJIjxVMDA1Mz48VTAwNkY+PFUwMDYyPjxVMDA2Rj48VTAwNzQ+PFUwMDYxPiIKKworbW9uCQkiPFUwMDZBPjxVMDA2MT48VTAwNkU+PFUwMDc1PjxVMDBFMT48VTAwNzI+IjsvCisJCSI8VTAwNjY+PFUwMDY1PjxVMDA2Mj48VTAwNzI+PFUwMDc1PjxVMDBFMT48VTAwNzI+IjsvCisJCSI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNjU+PFUwMDYzPiI7LworCQkiPFUwMDYxPjxVMDA3MD48VTAwNzI+PFUwMEVEPjxVMDA2Qz4iOy8KKwkJIjxVMDA2RD48VTAwRTE+PFUwMDZBPiI7LworCQkiPFUwMDZBPjxVMDBGQT48VTAwNkU+IjsvCisJCSI8VTAwNkE+PFUwMEZBPjxVMDA2Qz4iOy8KKwkJIjxVMDA2MT48VTAwNzU+PFUwMDY3PjxVMDA3NT48VTAwNzM+PFUwMDc0PiI7LworCQkiPFUwMDczPjxVMDA2NT48VTAwNzA+PFUwMDc0PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisJCSI8VTAwNkY+PFUwMDZCPjxVMDA3ND48VTAwRjM+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisJCSI8VTAwNkU+PFUwMDZGPjxVMDA3Nj48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworCQkiPFUwMDY0PjxVMDA2NT48VTAwNjM+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iCisKKyUgSG0gLSBt4W1lIHphdb7tdmFu6SBza3JhdGt5IHByZSBtZXNpYWNlID8KKworYWJtb24JCSI8VTAwNkE+PFUwMDYxPjxVMDA2RT4iOy8KKwkJIjxVMDA2Nj48VTAwNjU+PFUwMDYyPiI7LworCQkiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsvCisJCSI8VTAwNjE+PFUwMDcwPjxVMDA3Mj4iOy8KKwkJIjxVMDA2RD48VTAwRTE+PFUwMDZBPiI7LworCQkiPFUwMDZBPjxVMDBGQT48VTAwNkU+IjsvCisJCSI8VTAwNkE+PFUwMEZBPjxVMDA2Qz4iOy8KKwkJIjxVMDA2MT48VTAwNzU+PFUwMDY3PiI7LworCQkiPFUwMDczPjxVMDA2NT48VTAwNzA+IjsvCisJCSI8VTAwNkY+PFUwMDZCPjxVMDA3ND4iOy8KKwkJIjxVMDA2RT48VTAwNkY+PFUwMDc2PiI7LworCQkiPFUwMDY0PjxVMDA2NT48VTAwNjM+IgorCitkX3RfZm10CQkiPFUwMDI1PjxVMDA2MT48VTAwQTA+PFUwMDI1PjxVMDA2NT48VTAwMkU+PFUwMEEwPjxVMDAyNT48VTAwNDI+PFUwMEEwPjxVMDAyNT48VTAwNTk+PFUwMDJDPjxVMDBBMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDBBMD48VTAwMjU+PFUwMDVBPiIKKworZF9mbXQgCQkiPFUwMDI1PjxVMDA2ND48VTAwMkU+PFUwMDI1PjxVMDA2RD48VTAwMkU+PFUwMDI1PjxVMDA1OT4iCisKK3RfZm10CQkiPFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4iCisKK3RfZm10X2FtcG0JIjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+IgorCithbV9wbSAgIAkiIjsiIgorCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCisKK3dlZWsJCTc7MTk5NzEyMDE7NAorZmlyc3Rfd2Vla2RheQkxCitmaXJzdF93b3JrZGF5CTEKKworRU5EIExDX1RJTUUKKworJSUgRU5EIE9GIExPQ0FMSVpBVElPTiBGSUxFIGZvciBza19TSy5JU08tODg1OS0yCislJSBLb25pZWMgbG9rYWxpemHobulobyBz+mJvcnUgcHJlIHNsb3ZlbnNr6SBwcm9zdHJlZGllCisKK0xDX1BBUEVSCislIEZJWE1FCitoZWlnaHQgICAyOTcKKyUgRklYTUUKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzQ+PFUwMDMyPjxVMDAzMT4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCislIEZJWE1FCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICI8VTAwNTM+PFUwMDRCPiIKK2NvdW50cnlfYWIzICI8VTAwNTM+PFUwMDU2PjxVMDA0Qj4iCitjb3VudHJ5X251bSA3MDMKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9zbF9TSSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3NsX1NJCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YzgzYzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9zbF9TSQpAQCAtMCwwICsxLDIyMjQgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBTbG92ZW5pYW4gbGFuZ3VhZ2UgbG9jYWxlIGZvciBTbG92ZW5pYQorJSBTb3VyY2U6IFVTTS9NWlQKKyUgQWRkcmVzczogS290bmlrb3ZhIDYsCislICAgIExqdWJsamFuYSwgU2xvdmVuaWEKKyUgQ29udGFjdDogQm9ya2EgSmVybWFuLUJsYXo8aWM8CislIEVtYWlsOiBqZXJtYW4tYmxhemljQGlqcy5zaQorJSBUZWw6ICszOCAtIDYxIC0gNjUzMjI1CislIEZheDogbm9uZQorJSBMYW5ndWFnZTogc2wKKyUgVGVycml0b3J5OiBTSQorJSBSZXZpc2lvbjogNC40CislIERhdGU6IDE5OTctMTEtMDUKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMuZHMKKyUgQ2hhcnNldDogSVNPLTg4NTktMgorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiU2xvdmVuaWFuIGxvY2FsZSBmb3IgU2xvdmVuaWEiCitzb3VyY2UgICAgICJVU00vTVpUIgorYWRkcmVzcyAgICAiS290bmlrb3ZhIDYsLCBManVibGphbmEsIFNsb3ZlbmlhIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIlNsb3ZlbmlhbiIKK3RlcnJpdG9yeSAgIlNsb3ZlbmlhIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAic2xfU0k6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAic2xfU0k6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAic2xfU0k6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJzbF9TSToyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgInNsX1NJOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAic2xfU0k6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAic2xfU0k6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAic2xfU0k6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAic2xfU0k6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJzbF9TSToyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgInNsX1NJOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ09MTEFURQorCislIEJhc2UgY29sbGF0aW9uIHNjaGVtZTogMTk5NC0wMy0yMgorCislIE9yZGVyaW5nIGFsZ29yaXRobToKKyUgIDEuIFNwYWNlcyBhbmQgaHlwaGVuIChidXQgbm90IHNvZnQKKyUgICAgIGh5cGhlbikgYmVmb3JlIHB1bmN0dWF0aW9uCislICAgICBjaGFyYWN0ZXJzLCBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzCislICAgICBiZWZvcmUgbnVtYmVycywKKyUgICAgIG51bWJlcnMgYmVmb3JlIGxldHRlcnMuCislICAyLiBMZXR0ZXJzIHdpdGggZGlhY3JpdGljYWwgbWFya3MgYXJlCislICAgICBtZW1iZXJzIG9mIGVxdWl2YWxlbmNlIGNsYXNzZXMKKyUgIDMuIEEgZGlzdGluY3Rpb24gaXMgbWFkZSB3aXRoIHJlZ2FyZHMKKyUgICAgIHRvIGNhc2UgYXMgbm90ZWQgYmVsb3cuCislICA0LiBTcGVjaWFsIGNoYXJhY3RlcnMgYXJlIGlnbm9yZWQKKyUgICAgIHdoZW4gY29tcGFyaW5nIGxldHRlcnMsIGJ1dCB0aGVuCislICAgICB0aGV5IGFyZSBjb25zaWRlcmVkCislICA1LiBUaGUgYWxwaGFiZXRzIGFyZSBzb3J0ZWQgaW4gb3JkZXIKKyUgICAgIG9mIGZpcnN0IGFwcGVhcmFuY2UgaW4gSVNPIDEwNjQ2OgorJSAgICAgTGF0aW4sIEdyZWVrLCBDeXJpbGxpYywgZXRjLgorJQorJSBBY2NvcmRpbmcgdG8gR3JlZWsgc3BlY2lmaWNhdGlvbnMsCislIHRoZSBzdGVwcyAyLiBhbmQgMy4gYWJvdmUgYXJlIHJldmVyc2VkCislIGZvciB0aGUgR3JlZWsgc2NyaXB0CisKKyUgY29sbGF0aW5nIHN5bWJvbHMKKworJSBUaGUgY29sbGF0aW5nIHN5bWJvbCBuYW1pbmcgaXMKKyUgbW9zdGx5IHRha2VuIGZyb20gSVNPIDEwNjQ2LTEsCislIGZvciBleGFtcGxlIHRoZSBjYXNlIGFuZCBhY2NlbnQKKyUgbmFtZXMgYXJlIGZyb20gdGhpcyBzdGFuZGFyZC4KKworY29sbGF0aW5nLXN5bWJvbCA8Q0FQSVRBTD4KK2NvbGxhdGluZy1zeW1ib2wgPENBUElUQUwtU01BTEw+Citjb2xsYXRpbmctc3ltYm9sIDxTTUFMTC1DQVBJVEFMPgorY29sbGF0aW5nLXN5bWJvbCA8U01BTEw+CisKKyUgPENBUElUQUwtU01BTEw+IGFuZCA8U01BTEwtQ0FQSVRBTD4KKyUgYXJlIGZvciBjYXNlcyBsaWtlIERhbmlzaCA8VTAwNDE+PFUwMDYxPgorJSBhbmQgU3BhbmlzaCA8VTAwNDM+PFUwMDY4PiBiZWluZyB0cmVhdGVkCislIGFzIG9uZSBsZXR0ZXIuCisKKyUgVGhlIDxhOD4gLi4uLi4uIDx6OD4gY29sbGF0aW5nCislIHN5bWJvbHMgaGF2ZSBkZWZpbmVkIHdlaWdodHMgYXMKKyUgdGhlIGxhc3QgY2hhcmFjdGVyIGluIGEgZ3JvdXAgb2YKKyUgTGF0aW4gbGV0dGVycy4gVGhleSBhcmUgdXNlZAorJSB0byBzcGVjaWZ5IGRlbHRhcyBieSBsb2NhbGVzIHVzaW5nCislIGEgbG9jYWxlIGFzIHRoZSBkZWZhdWx0IG9yZGVyaW5nCislIGFuZCBieSAicmVwbGFjZS1hZnRlciIgc3RhdGVtZW50cworJSBzcGVjaWZ5aW5nIHRoZSBjaGFuZ2VkIHBsYWNlbWVudAorJSBpbiBhbiBvcmRlcmluZyBvZiBhIGNoYXJhY3Rlci4KKworY29sbGF0aW5nLXN5bWJvbCA8YTg+Citjb2xsYXRpbmctc3ltYm9sIDxiOD4KK2NvbGxhdGluZy1zeW1ib2wgPGM4PgorY29sbGF0aW5nLXN5bWJvbCA8ZDg+Citjb2xsYXRpbmctc3ltYm9sIDxlOD4KK2NvbGxhdGluZy1zeW1ib2wgPGY4PgorY29sbGF0aW5nLXN5bWJvbCA8Zzg+Citjb2xsYXRpbmctc3ltYm9sIDxoOD4KK2NvbGxhdGluZy1zeW1ib2wgPGk4PgorY29sbGF0aW5nLXN5bWJvbCA8ajg+Citjb2xsYXRpbmctc3ltYm9sIDxrOD4KK2NvbGxhdGluZy1zeW1ib2wgPGw4PgorY29sbGF0aW5nLXN5bWJvbCA8bTg+Citjb2xsYXRpbmctc3ltYm9sIDxuOD4KK2NvbGxhdGluZy1zeW1ib2wgPG84PgorY29sbGF0aW5nLXN5bWJvbCA8cDg+Citjb2xsYXRpbmctc3ltYm9sIDxxOD4KK2NvbGxhdGluZy1zeW1ib2wgPHI4PgorY29sbGF0aW5nLXN5bWJvbCA8czg+Citjb2xsYXRpbmctc3ltYm9sIDx0OD4KK2NvbGxhdGluZy1zeW1ib2wgPHU4PgorY29sbGF0aW5nLXN5bWJvbCA8djg+Citjb2xsYXRpbmctc3ltYm9sIDx3OD4KK2NvbGxhdGluZy1zeW1ib2wgPHg4PgorY29sbGF0aW5nLXN5bWJvbCA8eTg+Citjb2xsYXRpbmctc3ltYm9sIDx6OD4KKworY29sbGF0aW5nLXN5bWJvbCA8Tk9ORT4KK2NvbGxhdGluZy1zeW1ib2wgPEFDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8QUNVVEUrRE9UPgorY29sbGF0aW5nLXN5bWJvbCA8R1JBVkU+Citjb2xsYXRpbmctc3ltYm9sIDxET1VCTEUtR1JBVkU+Citjb2xsYXRpbmctc3ltYm9sIDxCUkVWRT4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkUrR1JBVkU+Citjb2xsYXRpbmctc3ltYm9sIDxCUkVWRStNQUNST04+Citjb2xsYXRpbmctc3ltYm9sIDxCUkVWRStIT09LPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkUrVElMREU+Citjb2xsYXRpbmctc3ltYm9sIDxCUkVWRStET1QtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxCUkVWRS1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPElOVkVSVEVELUJSRVZFPgorY29sbGF0aW5nLXN5bWJvbCA8Q0lSQ1VNRkxFWD4KK2NvbGxhdGluZy1zeW1ib2wgPENJUkNVTUZMRVgrQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxDSVJDVU1GTEVYK0dSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8Q0lSQ1VNRkxFWCtIT09LPgorY29sbGF0aW5nLXN5bWJvbCA8Q0lSQ1VNRkxFWCtUSUxERT4KK2NvbGxhdGluZy1zeW1ib2wgPENJUkNVTUZMRVgrRE9ULUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8Q0FST04+Citjb2xsYXRpbmctc3ltYm9sIDxDQVJPTitESUFFUkVTSVM+Citjb2xsYXRpbmctc3ltYm9sIDxDQVJPTitET1Q+Citjb2xsYXRpbmctc3ltYm9sIDxSSU5HPgorY29sbGF0aW5nLXN5bWJvbCA8UklORytBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPFJJTkctQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxESUFFUkVTSVM+Citjb2xsYXRpbmctc3ltYm9sIDxESUFFUkVTSVMrTUFDUk9OPgorY29sbGF0aW5nLXN5bWJvbCA8RElBRVJFU0lTK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8RElBRVJFU0lTK0dSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8RElBRVJFU0lTK0NBUk9OPgorY29sbGF0aW5nLXN5bWJvbCA8RE9VQkxFLUFDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8SE9PSz4KK2NvbGxhdGluZy1zeW1ib2wgPFRJTERFPgorY29sbGF0aW5nLXN5bWJvbCA8VElMREUrQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxUSUxERStESUFFUkVTSVM+Citjb2xsYXRpbmctc3ltYm9sIDxUSUxERS1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPERPVD4KK2NvbGxhdGluZy1zeW1ib2wgPERPVC1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPERPVCtET1QtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxTVFJPS0U+Citjb2xsYXRpbmctc3ltYm9sIDxTVFJPS0UrQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxDRURJTExBPgorY29sbGF0aW5nLXN5bWJvbCA8Q0VESUxMQStBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPENFRElMTEErR1JBVkU+Citjb2xsYXRpbmctc3ltYm9sIDxDRURJTExBK0JSRVZFPgorY29sbGF0aW5nLXN5bWJvbCA8T0dPTkVLPgorY29sbGF0aW5nLXN5bWJvbCA8T0dPTkVLK01BQ1JPTj4KK2NvbGxhdGluZy1zeW1ib2wgPE1BQ1JPTj4KK2NvbGxhdGluZy1zeW1ib2wgPE1BQ1JPTitBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPE1BQ1JPTitHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPE1BQ1JPTitESUFFUkVTSVM+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04rRElBRVJFU0lTLUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0RPVD4KK2NvbGxhdGluZy1zeW1ib2wgPE1BQ1JPTitET1QtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04rQ0lSQ1VNRkxFWD4KK2NvbGxhdGluZy1zeW1ib2wgPExJTkUtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxIT1JOPgorY29sbGF0aW5nLXN5bWJvbCA8SE9STitBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPEhPUk4rR1JBVkU+Citjb2xsYXRpbmctc3ltYm9sIDxIT1JOK0hPT0s+Citjb2xsYXRpbmctc3ltYm9sIDxIT1JOK1RJTERFPgorY29sbGF0aW5nLXN5bWJvbCA8SE9STitET1QtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxQUkVDRURFRC1CWS1BUE9TVFJPUEhFPgorY29sbGF0aW5nLXN5bWJvbCA8R1JFRUs+Citjb2xsYXRpbmctc3ltYm9sIDxUT05PUz4KK2NvbGxhdGluZy1zeW1ib2wgPERJQUxZVElDQT4KK2NvbGxhdGluZy1zeW1ib2wgPERJQUxZVElDQStUT05PUz4KK2NvbGxhdGluZy1zeW1ib2wgPENZUklMTElDPgorY29sbGF0aW5nLXN5bWJvbCA8SElSQUdBTkE+Citjb2xsYXRpbmctc3ltYm9sIDxLQVRBS0FOQT4KK2NvbGxhdGluZy1zeW1ib2wgPFNQRUNJQUw+CisKKyUgbGV0dGVyO2FjY2VudDtjYXNlO3NwZWNpYWxzCisKK29yZGVyX3N0YXJ0IGZvcndhcmQ7YmFja3dhcmQvCisgICAgICAgICAgICA7Zm9yd2FyZDtwb3NpdGlvbgorCislIDxDQVBJVEFMPiBvciA8U01BTEw+IGxldHRlcnMgZmlyc3Q6CisKKzxTTUFMTD4KKzxTTUFMTC1DQVBJVEFMPgorPENBUElUQUwtU01BTEw+Cis8Q0FQSVRBTD4KKworJSBBY2NlbnRzOgorCis8Tk9ORT4KKzxBQ1VURT4KKzxBQ1VURStET1Q+Cis8R1JBVkU+Cis8RE9VQkxFLUdSQVZFPgorPEJSRVZFPgorPEJSRVZFK0FDVVRFPgorPEJSRVZFK0dSQVZFPgorPEJSRVZFK01BQ1JPTj4KKzxCUkVWRStIT09LPgorPEJSRVZFK1RJTERFPgorPEJSRVZFK0RPVC1CRUxPVz4KKzxCUkVWRS1CRUxPVz4KKzxJTlZFUlRFRC1CUkVWRT4KKzxDSVJDVU1GTEVYPgorPENJUkNVTUZMRVgrQUNVVEU+Cis8Q0lSQ1VNRkxFWCtHUkFWRT4KKzxDSVJDVU1GTEVYK0hPT0s+Cis8Q0lSQ1VNRkxFWCtUSUxERT4KKzxDSVJDVU1GTEVYK0RPVC1CRUxPVz4KKzxDQVJPTj4KKzxDQVJPTitESUFFUkVTSVM+Cis8Q0FST04rRE9UPgorPFJJTkc+Cis8UklORytBQ1VURT4KKzxSSU5HLUJFTE9XPgorPERJQUVSRVNJUz4KKzxESUFFUkVTSVMrTUFDUk9OPgorPERJQUVSRVNJUytBQ1VURT4KKzxESUFFUkVTSVMrR1JBVkU+Cis8RElBRVJFU0lTK0NBUk9OPgorPERPVUJMRS1BQ1VURT4KKzxIT09LPgorPFRJTERFPgorPFRJTERFK0FDVVRFPgorPFRJTERFK0RJQUVSRVNJUz4KKzxUSUxERS1CRUxPVz4KKzxET1Q+Cis8RE9ULUJFTE9XPgorPERPVCtET1QtQkVMT1c+Cis8U1RST0tFPgorPFNUUk9LRStBQ1VURT4KKzxDRURJTExBPgorPENFRElMTEErQUNVVEU+Cis8Q0VESUxMQStHUkFWRT4KKzxDRURJTExBK0JSRVZFPgorPE9HT05FSz4KKzxPR09ORUsrTUFDUk9OPgorPE1BQ1JPTj4KKzxNQUNST04rQUNVVEU+Cis8TUFDUk9OK0dSQVZFPgorPE1BQ1JPTitESUFFUkVTSVM+Cis8TUFDUk9OK0RJQUVSRVNJUy1CRUxPVz4KKzxNQUNST04rRE9UPgorPE1BQ1JPTitET1QtQkVMT1c+Cis8TUFDUk9OK0NJUkNVTUZMRVg+Cis8TElORS1CRUxPVz4KKzxIT1JOPgorPEhPUk4rQUNVVEU+Cis8SE9STitHUkFWRT4KKzxIT1JOK0hPT0s+Cis8SE9STitUSUxERT4KKzxIT1JOK0RPVC1CRUxPVz4KKzxQUkVDRURFRC1CWS1BUE9TVFJPUEhFPgorPEdSRUVLPgorPFRPTk9TPgorPERJQUxZVElDQT4KKzxESUFMWVRJQ0ErVE9OT1M+Cis8Q1lSSUxMSUM+Cis8SElSQUdBTkE+Cis8S0FUQUtBTkE+Cis8U1BFQ0lBTD4KKworPFUwMEEwPgk8VTAwQTA+OzxVMDBBMD47PFUwMEEwPjtJR05PUkUKKzxVMDAyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDIwPgorPFUwMDA5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDk+Cis8VTAwMEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwQj4KKzxVMDAwRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBEPgorPFUwMDBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMEE+Cis8VTAwMEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwQz4KKzxVMDA1Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDVGPgorPFUwMEFGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQUY+Cis8VTAwQUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBRD4KKzxVMDAyRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDJEPgorPFUwMDJDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMkM+Cis8VTAwM0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAzQj4KKzxVMDAzQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDNBPgorPFUwMDIxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjE+Cis8VTAwQTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBMT4KKzxVMDAzRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDNGPgorPFUwMEJGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQkY+Cis8VTAwMkY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyRj4KKzxVMDAyRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDJFPgorPFUwMEI0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjQ+Cis8VTAwNjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA2MD4KKzxVMDA1RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDVFPgorPFUwMEE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTg+Cis8VTAwN0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA3RT4KKzxVMDBCNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEI3PgorPFUwMEI4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjg+Cis8VTAwMjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyNz4KKzxVMjAxOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDE4PgorPFUyMDE5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTk+Cis8VTAwMjI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyMj4KKzxVMjAxQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDFDPgorPFUyMDFEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMUQ+Cis8VTAwQUI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBQj4KKzxVMDBCQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEJCPgorPFUwMDI4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjg+Cis8VTIwN0Q+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA3RD4KKzxVMDAyOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDI5PgorPFUyMDdFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwN0U+Cis8VTAwNUI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA1Qj4KKzxVMDA1RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDVEPgorPFUwMDdCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwN0I+Cis8VTAwN0Q+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA3RD4KKzxVMDBBNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEE3PgorPFUwMEI2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjY+Cis8VTAwQTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBOT4KKzxVMDBBRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEFFPgorPFUwMDQwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNDA+Cis8VTAwQTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBND4KKzxVMDBBMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEEyPgorPFUwMDI0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjQ+Cis8VTAwQTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBMz4KKzxVMDBBNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEE1PgorPFUwMDJBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMkE+Cis8VTAwNUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA1Qz4KKzxVMDAyNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDI2PgorPFUwMDIzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjM+Cis8VTAwMjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyNT4KKzxVMjA3Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDdCPgorPFUwMDJCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMkI+Cis8VTIwN0E+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA3QT4KKzxVMDBCMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEIxPgorPFUwMEY3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwRjc+Cis8VTAwRDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBENz4KKzxVMjI2MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjYwPgorPFUwMDNDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwM0M+Cis8VTIyNjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2ND4KKzxVMDAzRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDNEPgorPFUyMjY1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNjU+Cis8VTAwM0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAzRT4KKzxVMDBBQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEFDPgorPFUwMDdDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwN0M+Cis8VTAwQTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBNj4KKzxVMDBCMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEIwPgorPFUwMEI1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjU+Cis8VTAyQzc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDJDNz4KKzxVMDJEOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkQ4PgorPFUwMkQ5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAyRDk+Cis8VTAyREE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDJEQT4KKzxVMDJEQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkRCPgorPFUwMkRDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAyREM+Cis8VTAyREQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDJERD4KKzxVMDM3ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzc0PgorPFUwMzc1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzNzU+Cis8VTAzN0E+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDM3QT4KKzxVMDM3RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzdFPgorPFUwMzg0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzODQ+Cis8VTAzODU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDM4NT4KKzxVMDM4Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzg3PgorPFUwM0QwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzRDA+Cis8VTFGQkY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZCRj4KKzxVMUZDMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkMwPgorPFUxRkMxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGQzE+Cis8VTFGQ0Q+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZDRD4KKzxVMUZDRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkNFPgorPFUxRkNGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGQ0Y+Cis8VTFGREQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZERD4KKzxVMUZERT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkRFPgorPFUxRkRGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGREY+Cis8VTFGRUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZFRD4KKzxVMUZFRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkVGPgorPFUxRkZFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGRkU+Cis8VTIwMDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwMj4KKzxVMjAwMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDAzPgorPFUyMDA0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMDQ+Cis8VTIwMDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwNT4KKzxVMjAwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDA2PgorPFUyMDBFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMEU+Cis8VTIwMEY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwRj4KKzxVMjAwOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDA5PgorPFUyMDBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMEE+Cis8VTIwMTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxMD4KKzxVMjAxMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDEzPgorPFUyMDE0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTQ+Cis8VTIwMTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxNT4KKzxVMjAxNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDE2PgorPFUyMDE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTc+Cis8VTIwMUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxQT4KKzxVMjAxQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDFCPgorPFUyMDFFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMUU+Cis8VTIwMUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxRj4KKzxVMjAyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDIwPgorPFUyMDIxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMjE+Cis8VTIyMTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxOT4KKzxVMjAyNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDI1PgorPFUyMDI2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMjY+Cis8VTIwMzA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzMD4KKzxVMjAzMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDMyPgorPFUyMDMzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzM+Cis8VTIwMzQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzND4KKzxVMjAzNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDM1PgorPFUyMDM2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzY+Cis8VTIwMzc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzNz4KKzxVMjAzOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDM4PgorPFUyMDM5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzk+Cis8VTIwM0E+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzQT4KKzxVMjAzQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDNCPgorPFUyMDNDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwM0M+Cis8VTIwM0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzRT4KKzxVMjA3Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDdDPgorPFUyMDgwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODA+Cis8VTIwODE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4MT4KKzxVMjA4Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDgyPgorPFUyMDgzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODM+Cis8VTIwODQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4ND4KKzxVMjA4NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDg1PgorPFUyMDg2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODY+Cis8VTIwODc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4Nz4KKzxVMjA4OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDg4PgorPFUyMDg5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODk+Cis8VTIwOEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4QT4KKzxVMjA4Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDhCPgorPFUyMDhDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwOEM+Cis8VTIwOEQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4RD4KKzxVMjA4RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDhFPgorPFUyMEEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwQTM+Cis8VTIwQTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjBBND4KKzxVMjBBNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMEE3PgorPFUyMEE5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwQTk+Cis8VTIxMDM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjEwMz4KKzxVMjEwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTA1PgorPFUyMTA5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMDk+Cis8VTIxMTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjExNj4KKzxVMjExNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTE3PgorPFUyMTFFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMUU+Cis8VTIxMjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjEyMD4KKzxVMjEyMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTIyPgorPFUyMTI2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMjY+Cis8VTIxMkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjEyQj4KKzxVMjE1Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTUzPgorPFUyMTU0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTQ+Cis8VTIxNTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1NT4KKzxVMjE1Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTU2PgorPFUyMTU3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTc+Cis8VTIxNTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1OD4KKzxVMjE1OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTU5PgorPFUyMTVBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNUE+Cis8VTIxNjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2MD4KKzxVMjE2MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTYxPgorPFUyMTYyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjI+Cis8VTIxNjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2Mz4KKzxVMjE2ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTY0PgorPFUyMTY1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjU+Cis8VTIxNjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2Nj4KKzxVMjE2Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTY3PgorPFUyMTY4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjg+Cis8VTIxNjk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2OT4KKzxVMjE2QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTZBPgorPFUyMTZCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNkI+Cis8VTIxNkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2Qz4KKzxVMjE2RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTZEPgorPFUyMTZFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNkU+Cis8VTIxNkY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2Rj4KKzxVMjE3MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTcwPgorPFUyMTcxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzE+Cis8VTIxNzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3Mj4KKzxVMjE3Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTczPgorPFUyMTc0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzQ+Cis8VTIxNzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3NT4KKzxVMjE3Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTc2PgorPFUyMTc3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzc+Cis8VTIxNzg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3OD4KKzxVMjE3OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTc5PgorPFUyMTdBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxN0E+Cis8VTIxN0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3Qj4KKzxVMjE3Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTdDPgorPFUyMTdEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxN0Q+Cis8VTIxN0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3RT4KKzxVMjE3Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTdGPgorPFUyMTgwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxODA+Cis8VTIxODE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE4MT4KKzxVMjE4Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTgyPgorPFUyMTkxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxOTE+Cis8VTIxOTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5Mz4KKzxVMjE5ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTk0PgorPFUyMTk1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxOTU+Cis8VTIxOTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5Nj4KKzxVMjE5Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTk3PgorPFUyMTk4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxOTg+Cis8VTIxOTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5OT4KKzxVMjFBOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMUE4PgorPFUyMUMwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxQzA+Cis8VTIxRDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjFEMD4KKzxVMjFEMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMUQyPgorPFUyMUQ0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxRDQ+Cis8VTIyMDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwMD4KKzxVMjIwMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjAyPgorPFUyMjAzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMDM+Cis8VTIyMDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwNT4KKzxVMjIwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjA2PgorPFUyMjA3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMDc+Cis8VTIyMDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwOD4KKzxVMjIwQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjBCPgorPFUyMjBGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMEY+Cis8VTIyMTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxMT4KKzxVMjIxMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjEyPgorPFUyMjEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMTM+Cis8VTIyMTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxND4KKzxVMjA0ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDQ0PgorPFUyMjE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMTc+Cis8VTIyMTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxOD4KKzxVMjAyMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDIyPgorPFUyMjFBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMUE+Cis8VTIyMUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxRD4KKzxVMjIxRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjFFPgorPFUyMjFGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMUY+Cis8VTIyMjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyMD4KKzxVMjIyNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjI1PgorPFUyMjI3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMjc+Cis8VTIyMjg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyOD4KKzxVMjIyOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjI5PgorPFUyMjJBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMkE+Cis8VTIyMkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyQj4KKzxVMjIyQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjJDPgorPFUyMjJFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMkU+Cis8VTIyMzQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIzND4KKzxVMjIzNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjM1PgorPFUyMjM2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMzY+Cis8VTIyMzc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIzNz4KKzxVMjIzQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjNDPgorPFUyMjNFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyM0U+Cis8VTIyNDM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI0Mz4KKzxVMjI0NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjQ1PgorPFUyMjQ4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNDg+Cis8VTIyNEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI0Qz4KKzxVMjI1Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjUzPgorPFUyMjYxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNjE+Cis8VTIyNkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2QT4KKzxVMjI2Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjZCPgorPFUyMjZFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNkU+Cis8VTIyNkY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2Rj4KKzxVMjI4Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjgyPgorPFUyMjgzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyODM+Cis8VTIyODY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI4Nj4KKzxVMjI4Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjg3PgorPFUyMjk5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyOTk+Cis8VTIyOUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI5QT4KKzxVMjJBNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMkE1PgorPFUyMkM1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyQzU+Cis8VTIyRUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjJFRT4KKzxVMjMwMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzAyPgorPFUyMzA4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMDg+Cis8VTIzMDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMwOT4KKzxVMjMwQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzBBPgorPFUyMzBCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMEI+Cis8VTIzMTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMxMD4KKzxVMjMxMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzEyPgorPFUyMzE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMTU+Cis8VTIzMjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMyMD4KKzxVMjMyMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzIxPgorPFUyNDIzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0MjM+Cis8VTI0NDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ0MD4KKzxVMjQ0MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQxPgorPFUyNDQyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDI+Cis8VTI0NDM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ0Mz4KKzxVMjQ0Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQ2PgorPFUyNDQ3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDc+Cis8VTI0NDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ0OD4KKzxVMjQ0OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQ5PgorPFUyNDYwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NjA+Cis8VTI0NjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2MT4KKzxVMjQ2Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDYyPgorPFUyNDYzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NjM+Cis8VTI0NjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2ND4KKzxVMjQ2NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDY1PgorPFUyNDY2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NjY+Cis8VTI0Njc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Nz4KKzxVMjQ2OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDY4PgorPFUyNDY5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0Njk+Cis8VTI0NkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2QT4KKzxVMjQ2Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDZCPgorPFUyNDZDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NkM+Cis8VTI0NkQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2RD4KKzxVMjQ2RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDZFPgorPFUyNDZGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NkY+Cis8VTI0NzA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3MD4KKzxVMjQ3MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDcxPgorPFUyNDcyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NzI+Cis8VTI0NzM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3Mz4KKzxVMjQ3ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDc0PgorPFUyNDc1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NzU+Cis8VTI0NzY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3Nj4KKzxVMjQ3Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDc3PgorPFUyNDc4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0Nzg+Cis8VTI0Nzk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3OT4KKzxVMjQ3QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDdBPgorPFUyNDdCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0N0I+Cis8VTI0N0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3Qz4KKzxVMjQ3RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDdEPgorPFUyNDdFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0N0U+Cis8VTI0N0Y+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3Rj4KKzxVMjQ4MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDgwPgorPFUyNDgxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODE+Cis8VTI0ODI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4Mj4KKzxVMjQ4Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDgzPgorPFUyNDg0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODQ+Cis8VTI0ODU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4NT4KKzxVMjQ4Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDg2PgorPFUyNDg3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODc+Cis8VTI0ODg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4OD4KKzxVMjQ4OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDg5PgorPFUyNDhBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OEE+Cis8VTI0OEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4Qj4KKzxVMjQ4Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDhDPgorPFUyNDhEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OEQ+Cis8VTI0OEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4RT4KKzxVMjQ4Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDhGPgorPFUyNDkwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTA+Cis8VTI0OTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5MT4KKzxVMjQ5Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDkyPgorPFUyNDkzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTM+Cis8VTI0OTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5ND4KKzxVMjQ5NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDk1PgorPFUyNDk2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTY+Cis8VTI0OTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5Nz4KKzxVMjQ5OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDk4PgorPFUyNDk5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTk+Cis8VTI0OUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5QT4KKzxVMjQ5Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDlCPgorPFUyNEVBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0RUE+Cis8VTI1MDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwMD4KKzxVMjU1MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTUwPgorPFUyNTAyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MDI+Cis8VTI1NTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1MT4KKzxVMjUwND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTA0PgorPFUyNTA1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MDU+Cis8VTI1MDY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwNj4KKzxVMjUwNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTA3PgorPFUyNTA4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MDg+Cis8VTI1MDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwOT4KKzxVMjUwQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTBBPgorPFUyNTBCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MEI+Cis8VTI1MEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwQz4KKzxVMjU1Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTUyPgorPFUyNTUzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTM+Cis8VTI1NTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1ND4KKzxVMjUxMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTEwPgorPFUyNTU1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTU+Cis8VTI1NTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Nj4KKzxVMjU1Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTU3PgorPFUyNTE0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MTQ+Cis8VTI1NTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1OD4KKzxVMjU1OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTU5PgorPFUyNTVBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NUE+Cis8VTI1MTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUxOD4KKzxVMjU1Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTVCPgorPFUyNTVDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NUM+Cis8VTI1NUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1RD4KKzxVMjUxQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTFDPgorPFUyNTVFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NUU+Cis8VTI1MUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUxRT4KKzxVMjUxRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTFGPgorPFUyNTVGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NUY+Cis8VTI1MjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyMT4KKzxVMjUyMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTIyPgorPFUyNTYwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjA+Cis8VTI1MjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyND4KKzxVMjU2MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTYxPgorPFUyNTI2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MjY+Cis8VTI1Mjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyNz4KKzxVMjU2Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTYyPgorPFUyNTI5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Mjk+Cis8VTI1MkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyQT4KKzxVMjU2Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTYzPgorPFUyNTJDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MkM+Cis8VTI1MkQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyRD4KKzxVMjUyRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTJFPgorPFUyNTY0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjQ+Cis8VTI1NjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2NT4KKzxVMjUzMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTMxPgorPFUyNTMyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MzI+Cis8VTI1NjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2Nj4KKzxVMjUzND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTM0PgorPFUyNTM1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MzU+Cis8VTI1MzY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzNj4KKzxVMjU2Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTY3PgorPFUyNTY4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Njg+Cis8VTI1Mzk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzOT4KKzxVMjUzQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTNBPgorPFUyNTY5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Njk+Cis8VTI1M0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzQz4KKzxVMjUzRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTNEPgorPFUyNTNFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1M0U+Cis8VTI1NkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2QT4KKzxVMjU0MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTQwPgorPFUyNTQxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDE+Cis8VTI1NkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2Qj4KKzxVMjU0Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTQzPgorPFUyNTQ0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDQ+Cis8VTI1NDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0NT4KKzxVMjU0Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTQ2PgorPFUyNTQ3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDc+Cis8VTI1NDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0OD4KKzxVMjU0OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTQ5PgorPFUyNTRBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NEE+Cis8VTI1NkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2Qz4KKzxVMjU3MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTcxPgorPFUyNTcyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NzI+Cis8VTI1ODA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU4MD4KKzxVMjU4ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTg0PgorPFUyNTg4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1ODg+Cis8VTI1OEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU4Qz4KKzxVMjU5MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTkwPgorPFUyNTkxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1OTE+Cis8VTI1OTI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU5Mj4KKzxVMjU5Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTkzPgorPFUyNUEwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTA+Cis8VTI1QTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBMT4KKzxVMjVBMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUEyPgorPFUyNUEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTM+Cis8VTI1QTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBND4KKzxVMjVBNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUE1PgorPFUyNUE2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTY+Cis8VTI1QTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBNz4KKzxVMjVBOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUE4PgorPFUyNUE5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTk+Cis8VTI1QUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBQT4KKzxVMjVBQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUFDPgorPFUyNUFEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QUQ+Cis8VTI1QjI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVCMj4KKzxVMjVCMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUIzPgorPFUyNUI3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Qjc+Cis8VTI1QkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVCQT4KKzxVMjVCQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUJDPgorPFUyNUJEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QkQ+Cis8VTI1QzE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVDMT4KKzxVMjVDND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUM0PgorPFUyNUM2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QzY+Cis8VTI1Qzc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVDNz4KKzxVMjVDQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUNBPgorPFUyNUNCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Q0I+Cis8VTI1Q0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVDRT4KKzxVMjVDRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUNGPgorPFUyNUQwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1RDA+Cis8VTI1RDE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVEMT4KKzxVMjVEOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUQ4PgorPFUyNUQ5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1RDk+Cis8VTI1RTI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVFMj4KKzxVMjVFMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUUzPgorPFUyNUVGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1RUY+Cis8VTI2MDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYwNT4KKzxVMjYwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjA2PgorPFUyNjBFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2MEU+Cis8VTI2MEY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYwRj4KKzxVMjYxQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjFDPgorPFUyNjFFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2MUU+Cis8VTI2M0E+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYzQT4KKzxVMjYzQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjNCPgorPFUyNjNDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2M0M+Cis8VTI2NDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY0MD4KKzxVMjY0Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjQyPgorPFUyNjYwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NjA+Cis8VTI2NjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2MT4KKzxVMjY2Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjYyPgorPFUyNjYzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NjM+Cis8VTI2NjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2ND4KKzxVMjY2NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjY1PgorPFUyNjY2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NjY+Cis8VTI2Njc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2Nz4KKzxVMjY2OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjY5PgorPFUyNjZBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NkE+Cis8VTI2NkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2Qj4KKzxVMjY2Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjZDPgorPFUyNjZEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NkQ+Cis8VTI2NkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2RT4KKzxVMjY2Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjZGPgorPFUyNzEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI3MTM+Cis8VTI3MTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjcxNz4KKzxVMjcyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNzIwPgorPFUzMDAwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMDA+Cis8VTMwMDE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwMT4KKzxVMzAwMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDAyPgorPFUzMDAzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMDM+Cis8VTMwMDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwND4KKzxVMzAwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDA1PgorPFUzMDA2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMDY+Cis8VTMwMDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwNz4KKzxVMzAwQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDBBPgorPFUzMDBCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMEI+Cis8VTMwMEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwQz4KKzxVMzAwRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDBEPgorPFUzMDBFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMEU+Cis8VTMwMEY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwRj4KKzxVMzAxMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDEwPgorPFUzMDExPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTE+Cis8VTMwMTI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxMj4KKzxVMzAxMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDEzPgorPFUzMDE0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTQ+Cis8VTMwMTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxNT4KKzxVMzAxNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDE2PgorPFUzMDE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTc+Cis8VTMwMUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxQz4KKzxVMzAyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDIwPgorPFUzMDlCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwOUI+Cis8VTMwOUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzA5Qz4KKzxVMzA5RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDlEPgorPFUzMDlFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwOUU+Cis8VTMwRkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzBGQj4KKzxVMzBGQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMEZDPgorPFUzMEZEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwRkQ+Cis8VTMwRkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzBGRT4KKzxVMzIxQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjFDPgorPFUzMjIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjA+Cis8VTMyMjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyMT4KKzxVMzIyMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjIyPgorPFUzMjIzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjM+Cis8VTMyMjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyND4KKzxVMzIyNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjI1PgorPFUzMjI2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjY+Cis8VTMyMjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyNz4KKzxVMzIyOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjI4PgorPFUzMjI5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjk+Cis8VTMyN0Y+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzI3Rj4KKzxVMzNDMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzM0MyPgorPFUzM0Q4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMzRDg+Cis8VTAwMDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwMD4KKzxVMDAwMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDAxPgorPFUwMDAyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDI+Cis8VTAwMDM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwMz4KKzxVMDAwND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA0PgorPFUwMDA1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDU+Cis8VTAwMDY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwNj4KKzxVMDAwNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA3PgorPFUwMDA4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDg+Cis8VTAwMEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwRT4KKzxVMDAwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBGPgorPFUwMDEwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTA+Cis8VTAwMTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxMT4KKzxVMDAxMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDEyPgorPFUwMDEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTM+Cis8VTAwMTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxND4KKzxVMDAxNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE1PgorPFUwMDE2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTY+Cis8VTAwMTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxNz4KKzxVMDAxOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE4PgorPFUwMDE5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTk+Cis8VTAwMUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxQT4KKzxVMDAxQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFCPgorPFUwMDFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMUM+Cis8VTAwMUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxRD4KKzxVMDAxRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFFPgorPFUwMDFGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMUY+Cis8VTAwN0Y+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA3Rj4KKzxVMDA4MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDgwPgorPFUwMDgxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODE+Cis8VTAwODI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4Mj4KKzxVMDA4Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDgzPgorPFUwMDg0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODQ+Cis8VTAwODU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4NT4KKzxVMDA4Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDg2PgorPFUwMDg3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODc+Cis8VTAwODg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4OD4KKzxVMDA4OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDg5PgorPFUwMDhBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOEE+Cis8VTAwOEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4Qj4KKzxVMDA4Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDhDPgorPFUwMDhEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOEQ+Cis8VTAwOEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4RT4KKzxVMDA4Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDhGPgorPFUwMDkwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTA+Cis8VTAwOTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5MT4KKzxVMDA5Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDkyPgorPFUwMDkzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTM+Cis8VTAwOTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5ND4KKzxVMDA5NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDk1PgorPFUwMDk2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTY+Cis8VTAwOTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Nz4KKzxVMDA5OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDk4PgorPFUwMDk5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTk+Cis8VTAwOUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5QT4KKzxVMDA5Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDlCPgorPFUwMDlDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOUM+Cis8VTAwOUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5RD4KKzxVMDA5RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDlFPgorPFUwMDlGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOUY+Cis8VUUwMDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwMD4KKzxVRTAwMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDAxPgorPFVFMDAyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDI+Cis8VTAzMDE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDMwMT4KKzxVRTAwND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDA0PgorPFVFMDA1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDU+Cis8VUUwMDY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwNj4KKzxVRTAwNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDA3PgorPFVFMDA4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDg+Cis8VUUwMDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwOT4KKzxVRTAwQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDBBPgorPFVFMDBCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMEI+Cis8VUUwMEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwQz4KKzxVRTAwRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDBEPgorPFVFMDBFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMEU+Cis8VUUwMEY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwRj4KKzwiPT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PCI9PgorPFVFMDExPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMTE+Cis8VUUwMTI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxMj4KKzxVRTAxMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDEzPgorPFVFMDE0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMTQ+Cis8VUUwMTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxNT4KKzxVRTAxNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDE3PgorPFVFMDE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMTg+Cis8VUUwMTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxOT4KK1VOREVGSU5FRAlJR05PUkU7SUdOT1JFO0lHTk9SRQorCis8VTAwMzA+CTxVMDAzMD47PFUwMDMwPjtJR05PUkU7SUdOT1JFCis8VTIwNzA+CTxVMDAzMD47PFUyMDcwPjtJR05PUkU7SUdOT1JFCis8VTIxNUI+CTxVMDAzMD47PFUyMTVCPjtJR05PUkU7SUdOT1JFCis8VTAwQkM+CTxVMDAzMD47PFUwMEJDPjtJR05PUkU7SUdOT1JFCis8VTIxNUM+CTxVMDAzMD47PFUyMTVDPjtJR05PUkU7SUdOT1JFCis8VTAwQkQ+CTxVMDAzMD47PFUwMEJEPjtJR05PUkU7SUdOT1JFCis8VTIxNUQ+CTxVMDAzMD47PFUyMTVEPjtJR05PUkU7SUdOT1JFCis8VTAwQkU+CTxVMDAzMD47PFUwMEJFPjtJR05PUkU7SUdOT1JFCis8VTIxNUU+CTxVMDAzMD47PFUyMTVFPjtJR05PUkU7SUdOT1JFCis8VTAwMzE+CTxVMDAzMT47PFUwMDMxPjtJR05PUkU7SUdOT1JFCis8VTAwMzI+CTxVMDAzMj47PFUwMDMyPjtJR05PUkU7SUdOT1JFCis8VTAwMzM+CTxVMDAzMz47PFUwMDMzPjtJR05PUkU7SUdOT1JFCis8VTAwMzQ+CTxVMDAzND47PFUwMDM0PjtJR05PUkU7SUdOT1JFCis8VTAwMzU+CTxVMDAzNT47PFUwMDM1PjtJR05PUkU7SUdOT1JFCis8VTAwMzY+CTxVMDAzNj47PFUwMDM2PjtJR05PUkU7SUdOT1JFCis8VTAwMzc+CTxVMDAzNz47PFUwMDM3PjtJR05PUkU7SUdOT1JFCis8VTAwMzg+CTxVMDAzOD47PFUwMDM4PjtJR05PUkU7SUdOT1JFCis8VTAwMzk+CTxVMDAzOT47PFUwMDM5PjtJR05PUkU7SUdOT1JFCis8VTAwQjk+CTxVMDAzMT47PFUwMEI5PjtJR05PUkU7SUdOT1JFCis8VTAwQjI+CTxVMDAzMj47PFUwMEIyPjtJR05PUkU7SUdOT1JFCis8VTAwQjM+CTxVMDAzMz47PFUwMEIzPjtJR05PUkU7SUdOT1JFCis8VTIwNzQ+CTxVMDAzND47PFUyMDc0PjtJR05PUkU7SUdOT1JFCis8VTIwNzU+CTxVMDAzNT47PFUyMDc1PjtJR05PUkU7SUdOT1JFCis8VTIwNzY+CTxVMDAzNj47PFUyMDc2PjtJR05PUkU7SUdOT1JFCis8VTIwNzc+CTxVMDAzNz47PFUyMDc3PjtJR05PUkU7SUdOT1JFCis8VTIwNzg+CTxVMDAzOD47PFUyMDc4PjtJR05PUkU7SUdOT1JFCis8VTIwNzk+CTxVMDAzOT47PFUyMDc5PjtJR05PUkU7SUdOT1JFCis8VTAwNDE+CTxVMDA0MT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2MT4JPFUwMDQxPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDBBQT4JPFUwMDQxPjs8Tk9ORT47PFUwMEFBPjtJR05PUkUKKzxVMDBDMT4JPFUwMDQxPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFMT4JPFUwMDQxPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAwQzA+CTxVMDA0MT47PEdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTA+CTxVMDA0MT47PEdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjAwPgk8VTAwNDE+OzxET1VCTEUtR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIwMT4JPFUwMDQxPjs8RE9VQkxFLUdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTAyPgk8VTAwNDE+OzxCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTAzPgk8VTAwNDE+OzxCUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMUVBRT4JPFUwMDQxPjs8QlJFVkUrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVBRj4JPFUwMDQxPjs8QlJFVkUrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFQjA+CTxVMDA0MT47PEJSRVZFK0dSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQjE+CTxVMDA0MT47PEJSRVZFK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRUIyPgk8VTAwNDE+OzxCUkVWRStIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQjM+CTxVMDA0MT47PEJSRVZFK0hPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFQjQ+CTxVMDA0MT47PEJSRVZFK1RJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQjU+CTxVMDA0MT47PEJSRVZFK1RJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRUI2Pgk8VTAwNDE+OzxCUkVWRStET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCNz4JPFUwMDQxPjs8QlJFVkUrRE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMjAyPgk8VTAwNDE+OzxJTlZFUlRFRC1CUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjAzPgk8VTAwNDE+OzxJTlZFUlRFRC1CUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDBDMj4JPFUwMDQxPjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMEUyPgk8VTAwNDE+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRUE0Pgk8VTAwNDE+OzxDSVJDVU1GTEVYK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQTU+CTxVMDA0MT47PENJUkNVTUZMRVgrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFQTY+CTxVMDA0MT47PENJUkNVTUZMRVgrR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVBNz4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMUVBOD4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQTk+CTxVMDA0MT47PENJUkNVTUZMRVgrSE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVBQT4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUxRUFCPgk8VTAwNDE+OzxDSVJDVU1GTEVYK1RJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRUFDPgk8VTAwNDE+OzxDSVJDVU1GTEVYK0RPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUFEPgk8VTAwNDE+OzxDSVJDVU1GTEVYK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDFDRD4JPFUwMDQxPjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFDRT4JPFUwMDQxPjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAwQzU+CTxVMDA0MT47PFJJTkc+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFNT4JPFUwMDQxPjs8UklORz47PFNNQUxMPjtJR05PUkUKKzxVMDFGQT4JPFUwMDQxPjs8UklORytBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMUZCPgk8VTAwNDE+OzxSSU5HK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTAwPgk8VTAwNDE+OzxSSU5HLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMDE+CTxVMDA0MT47PFJJTkctQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAwQzQ+CTxVMDA0MT47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUwMEU0Pgk8VTAwNDE+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTAxREU+CTxVMDA0MT47PERJQUVSRVNJUytNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFERj4JPFUwMDQxPjs8RElBRVJFU0lTK01BQ1JPTj47PFNNQUxMPjtJR05PUkUKKzxVMUVBMj4JPFUwMDQxPjs8SE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUEzPgk8VTAwNDE+OzxIT09LPjs8U01BTEw+O0lHTk9SRQorPFUwMEMzPgk8VTAwNDE+OzxUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUwMEUzPgk8VTAwNDE+OzxUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUVBMD4JPFUwMDQxPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQTE+CTxVMDA0MT47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDEwND4JPFUwMDQxPjs8T0dPTkVLPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMDU+CTxVMDA0MT47PE9HT05FSz47PFNNQUxMPjtJR05PUkUKKzxVMDEwMD4JPFUwMDQxPjs8TUFDUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMDE+CTxVMDA0MT47PE1BQ1JPTj47PFNNQUxMPjtJR05PUkUKKzxVMDFFMD4JPFUwMDQxPjs8TUFDUk9OK0RPVD47PENBUElUQUw+O0lHTk9SRQorPFUwMUUxPgk8VTAwNDE+OzxNQUNST04rRE9UPjs8U01BTEw+O0lHTk9SRQorPGE4PgorPFUwMEM2PgkiPFUwMDQxPjxVMDA0NT4iOyI8VTAwQzY+PFUwMEM2PiI7IjxDQVBJVEFMPjxDQVBJVEFMPiI7SUdOT1JFCis8VTAwRTY+CSI8VTAwNDE+PFUwMDQ1PiI7IjxVMDBDNj48VTAwQzY+IjsiPFNNQUxMPjxTTUFMTD4iO0lHTk9SRQorPFUwMUZDPgkiPFUwMDQxPjxVMDA0NT4iOyI8VTAxRkM+PFUwMUZDPiI7IjxDQVBJVEFMPjxDQVBJVEFMPiI7SUdOT1JFCis8VTAxRkQ+CSI8VTAwNDE+PFUwMDQ1PiI7IjxVMDFGQz48VTAxRkM+IjsiPFNNQUxMPjxTTUFMTD4iO0lHTk9SRQorPFUwMUUyPgkiPFUwMDQxPjxVMDA0NT4iOyI8VTAxRTI+PFUwMUUyPiI7IjxDQVBJVEFMPjxDQVBJVEFMPiI7SUdOT1JFCis8VTAxRTM+CSI8VTAwNDE+PFUwMDQ1PiI7IjxVMDFFMj48VTAxRTI+IjsiPFNNQUxMPjxTTUFMTD4iO0lHTk9SRQorPFUwMDQyPgk8VTAwNDI+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjI+CTxVMDA0Mj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFMDI+CTxVMDA0Mj47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTAzPgk8VTAwNDI+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFMDQ+CTxVMDA0Mj47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTA1Pgk8VTAwNDI+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTFFMDY+CTxVMDA0Mj47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwNz4JPFUwMDQyPjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxiOD4KKzxVMDA0Mz4JPFUwMDQzPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDYzPgk8VTAwNDM+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTA2Pgk8VTAwNDM+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMTA3Pgk8VTAwNDM+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDEwOD4JPFUwMDQzPjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMTA5Pgk8VTAwNDM+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUwMTg3Pgk8VTAwNDM+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxODg+CTxVMDA0Mz47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTAxMEE+CTxVMDA0Mz47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUwMTBCPgk8VTAwNDM+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTAwQzc+CTxVMDA0Mz47PENFRElMTEE+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFNz4JPFUwMDQzPjs8Q0VESUxMQT47PFNNQUxMPjtJR05PUkUKKzxVMUUwOD4JPFUwMDQzPjs8Q0VESUxMQStBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTA5Pgk8VTAwNDM+OzxDRURJTExBK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPGM4PgorPFUwMTBDPgk8VTAxMEQ+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMEQ+CTxVMDEwRD47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAwNDQ+CTxVMDA0ND47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2ND4JPFUwMDQ0Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDEwRT4JPFUwMDQ0Pjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEwRj4JPFUwMDQ0Pjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTFFMEE+CTxVMDA0ND47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTBCPgk8VTAwNDQ+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFMEM+CTxVMDA0ND47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTBEPgk8VTAwNDQ+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxMTA+CTxVMDA0ND47PFNUUk9LRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTExPgk8VTAwNDQ+OzxTVFJPS0U+OzxTTUFMTD47SUdOT1JFCis8VTFFMTA+CTxVMDA0ND47PENFRElMTEE+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUxMT4JPFUwMDQ0Pjs8Q0VESUxMQT47PFNNQUxMPjtJR05PUkUKKzxVMUUxMj4JPFUwMDQ0Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUxMz4JPFUwMDQ0Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFMEU+CTxVMDA0ND47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwRj4JPFUwMDQ0Pjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxkOD4KKzxVMDA0NT4JPFUwMDQ1Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDY1Pgk8VTAwNDU+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMEM5Pgk8VTAwNDU+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMEU5Pgk8VTAwNDU+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDBDOD4JPFUwMDQ1Pjs8R1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFOD4JPFUwMDQ1Pjs8R1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMDQ+CTxVMDA0NT47PERPVUJMRS1HUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjA1Pgk8VTAwNDU+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMTQ+CTxVMDA0NT47PEJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMTU+CTxVMDA0NT47PEJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjA2Pgk8VTAwNDU+OzxJTlZFUlRFRC1CUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjA3Pgk8VTAwNDU+OzxJTlZFUlRFRC1CUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDBDQT4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMEVBPgk8VTAwNDU+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRUJFPgk8VTAwNDU+OzxDSVJDVU1GTEVYK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQkY+CTxVMDA0NT47PENJUkNVTUZMRVgrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFQzA+CTxVMDA0NT47PENJUkNVTUZMRVgrR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDMT4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMUVDMj4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQzM+CTxVMDA0NT47PENJUkNVTUZMRVgrSE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVDND4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUxRUM1Pgk8VTAwNDU+OzxDSVJDVU1GTEVYK1RJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRUM2Pgk8VTAwNDU+OzxDSVJDVU1GTEVYK0RPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUM3Pgk8VTAwNDU+OzxDSVJDVU1GTEVYK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDExQT4JPFUwMDQ1Pjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExQj4JPFUwMDQ1Pjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAwQ0I+CTxVMDA0NT47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUwMEVCPgk8VTAwNDU+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFQkE+CTxVMDA0NT47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCQj4JPFUwMDQ1Pjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVCQz4JPFUwMDQ1Pjs8VElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCRD4JPFUwMDQ1Pjs8VElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFMUE+CTxVMDA0NT47PFRJTERFLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMUI+CTxVMDA0NT47PFRJTERFLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTE2Pgk8VTAwNDU+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExNz4JPFUwMDQ1Pjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRUI4Pgk8VTAwNDU+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCOT4JPFUwMDQ1Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUxRTFDPgk8VTAwNDU+OzxDRURJTExBK0JSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMUQ+CTxVMDA0NT47PENFRElMTEErQlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMTg+CTxVMDA0NT47PE9HT05FSz47PENBUElUQUw+O0lHTk9SRQorPFUwMTE5Pgk8VTAwNDU+OzxPR09ORUs+OzxTTUFMTD47SUdOT1JFCis8VTAxMTI+CTxVMDA0NT47PE1BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTEzPgk8VTAwNDU+OzxNQUNST04+OzxTTUFMTD47SUdOT1JFCis8VTFFMTY+CTxVMDA0NT47PE1BQ1JPTitBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTE3Pgk8VTAwNDU+OzxNQUNST04rQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFMTQ+CTxVMDA0NT47PE1BQ1JPTitHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRTE1Pgk8VTAwNDU+OzxNQUNST04rR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFMTg+CTxVMDA0NT47PE1BQ1JPTitDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMTk+CTxVMDA0NT47PE1BQ1JPTitDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPGU4PgorPFUwMDQ2Pgk8VTAwNDY+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjY+CTxVMDA0Nj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxOTE+CTxVMDA0Nj47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE5Mj4JPFUwMDQ2Pjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUUxRT4JPFUwMDQ2Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMUY+CTxVMDA0Nj47PERPVD47PFNNQUxMPjtJR05PUkUKKzxmOD4KKzxVRkIwMD4JIjxVMDA0Nj48VTAwNDY+IjsiPE5PTkU+PE5PTkU+IjsiPFVGQjAwPjxVRkIwMD4iO0lHTk9SRQorPFVGQjAxPgkiPFUwMDQ2PjxVMDA0OT4iOyI8Tk9ORT48Tk9ORT4iOyI8VUZCMDE+PFVGQjAxPiI7SUdOT1JFCis8VUZCMDI+CSI8VTAwNDY+PFUwMDRDPiI7IjxOT05FPjxOT05FPiI7IjxVRkIwMj48VUZCMDI+IjtJR05PUkUKKzxVRkIwMz4JIjxVMDA0Nj48VTAwNDY+PFUwMDQ5PiI7IjxOT05FPjxOT05FPjxOT05FPiI7IjxVRkIwMz48VUZCMDM+PFVGQjAzPiI7SUdOT1JFCis8VUZCMDQ+CSI8VTAwNDY+PFUwMDQ2PjxVMDA0Qz4iOyI8Tk9ORT48Tk9ORT48Tk9ORT4iOyI8VUZCMDQ+PFVGQjA0PjxVRkIwND4iO0lHTk9SRQorPFUwMDQ3Pgk8VTAwNDc+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjc+CTxVMDA0Nz47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxRjQ+CTxVMDA0Nz47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRjU+CTxVMDA0Nz47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMTFFPgk8VTAwNDc+OzxCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTFGPgk8VTAwNDc+OzxCUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDExQz4JPFUwMDQ3Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMTFEPgk8VTAwNDc+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUwMUU2Pgk8VTAwNDc+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUU3Pgk8VTAwNDc+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDEyMD4JPFUwMDQ3Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMjE+CTxVMDA0Nz47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMDFFND4JPFUwMDQ3Pjs8U1RST0tFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRTU+CTxVMDA0Nz47PFNUUk9LRT47PFNNQUxMPjtJR05PUkUKKzxVMDEyMj4JPFUwMDQ3Pjs8Q0VESUxMQT47PENBUElUQUw+O0lHTk9SRQorPFUwMTIzPgk8VTAwNDc+OzxDRURJTExBPjs8U01BTEw+O0lHTk9SRQorPFUxRTIwPgk8VTAwNDc+OzxNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUyMT4JPFUwMDQ3Pjs8TUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPGc4PgorPFUwMDQ4Pgk8VTAwNDg+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjg+CTxVMDA0OD47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFMkE+CTxVMDA0OD47PEJSRVZFLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMkI+CTxVMDA0OD47PEJSRVZFLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTI0Pgk8VTAwNDg+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMjU+CTxVMDA0OD47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFMjY+CTxVMDA0OD47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUxRTI3Pgk8VTAwNDg+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFMjI+CTxVMDA0OD47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTIzPgk8VTAwNDg+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFMjQ+CTxVMDA0OD47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTI1Pgk8VTAwNDg+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxMjY+CTxVMDA0OD47PFNUUk9LRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTI3Pgk8VTAwNDg+OzxTVFJPS0U+OzxTTUFMTD47SUdOT1JFCis8VTFFMjg+CTxVMDA0OD47PENFRElMTEE+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUyOT4JPFUwMDQ4Pjs8Q0VESUxMQT47PFNNQUxMPjtJR05PUkUKKzxoOD4KKzxVMDA0OT4JPFUwMDQ5Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDY5Pgk8VTAwNDk+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMENEPgk8VTAwNDk+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMEVEPgk8VTAwNDk+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDBDQz4JPFUwMDQ5Pjs8R1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFQz4JPFUwMDQ5Pjs8R1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMDg+CTxVMDA0OT47PERPVUJMRS1HUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjA5Pgk8VTAwNDk+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMkM+CTxVMDA0OT47PEJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMkQ+CTxVMDA0OT47PEJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjBBPgk8VTAwNDk+OzxJTlZFUlRFRC1CUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjBCPgk8VTAwNDk+OzxJTlZFUlRFRC1CUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDBDRT4JPFUwMDQ5Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMEVFPgk8VTAwNDk+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUwMUNGPgk8VTAwNDk+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUQwPgk8VTAwNDk+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDBDRj4JPFUwMDQ5Pjs8RElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRUY+CTxVMDA0OT47PERJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMUUyRT4JPFUwMDQ5Pjs8RElBRVJFU0lTK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMkY+CTxVMDA0OT47PERJQUVSRVNJUytBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVDOD4JPFUwMDQ5Pjs8SE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUM5Pgk8VTAwNDk+OzxIT09LPjs8U01BTEw+O0lHTk9SRQorPFUwMTI4Pgk8VTAwNDk+OzxUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUwMTI5Pgk8VTAwNDk+OzxUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUUyQz4JPFUwMDQ5Pjs8VElMREUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUyRD4JPFUwMDQ5Pjs8VElMREUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxMzA+CTxVMDA0OT47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUwMTMxPgk8VTAwNDk+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFQ0E+CTxVMDA0OT47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUNCPgk8VTAwNDk+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxMkU+CTxVMDA0OT47PE9HT05FSz47PENBUElUQUw+O0lHTk9SRQorPFUwMTJGPgk8VTAwNDk+OzxPR09ORUs+OzxTTUFMTD47SUdOT1JFCis8VTAxMkE+CTxVMDA0OT47PE1BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTJCPgk8VTAwNDk+OzxNQUNST04+OzxTTUFMTD47SUdOT1JFCis8aTg+Cis8VTAxMzI+CSI8VTAwNDk+PFUwMDRBPiI7IjxVMDEzMj48VTAxMzI+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDEzMz4JIjxVMDA0OT48VTAwNEE+IjsiPFUwMTMyPjxVMDEzMj4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAwNEE+CTxVMDA0QT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2QT4JPFUwMDRBPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDEzND4JPFUwMDRBPjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMTM1Pgk8VTAwNEE+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPGo4PgorPFUwMDRCPgk8VTAwNEI+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNkI+CTxVMDA0Qj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFMzA+CTxVMDA0Qj47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMzE+CTxVMDA0Qj47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMUU4Pgk8VTAwNEI+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUU5Pgk8VTAwNEI+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDE5OD4JPFUwMDRCPjs8SE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUwMTk5Pgk8VTAwNEI+OzxIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRTMyPgk8VTAwNEI+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzMz4JPFUwMDRCPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTM2Pgk8VTAwNEI+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMzc+CTxVMDA0Qj47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFMzQ+CTxVMDA0Qj47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzNT4JPFUwMDRCPjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxrOD4KKzxVMDEzOD4JPFUwMDRCPjs8VTAxMzg+OzxTTUFMTD47SUdOT1JFCis8VTAwNEM+CTxVMDA0Qz47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2Qz4JPFUwMDRDPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDEzOT4JPFUwMDRDPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEzQT4JPFUwMDRDPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAxM0Q+CTxVMDA0Qz47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxM0U+CTxVMDA0Qz47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMTNGPgk8VTAwNEM+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0MD4JPFUwMDRDPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTM2Pgk8VTAwNEM+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzNz4JPFUwMDRDPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTQxPgk8VTAwNEM+OzxTVFJPS0U+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0Mj4JPFUwMDRDPjs8U1RST0tFPjs8U01BTEw+O0lHTk9SRQorPFUwMTNCPgk8VTAwNEM+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxM0M+CTxVMDA0Qz47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFMzg+CTxVMDA0Qz47PE1BQ1JPTitET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzOT4JPFUwMDRDPjs8TUFDUk9OK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUUzQz4JPFUwMDRDPjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzRD4JPFUwMDRDPjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFM0E+CTxVMDA0Qz47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzQj4JPFUwMDRDPjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxsOD4KKzxVMDA0RD4JPFUwMDREPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDZEPgk8VTAwNEQ+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUxRTNFPgk8VTAwNEQ+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTNGPgk8VTAwNEQ+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUU0MD4JPFUwMDREPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNDE+CTxVMDA0RD47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUU0Mj4JPFUwMDREPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNDM+CTxVMDA0RD47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxtOD4KKzxVMDA0RT4JPFUwMDRFPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDZFPgk8VTAwNEU+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTQzPgk8VTAwNEU+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMTQ0Pgk8VTAwNEU+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDE0Nz4JPFUwMDRFPjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0OD4JPFUwMDRFPjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAwRDE+CTxVMDA0RT47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRjE+CTxVMDA0RT47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRTQ0Pgk8VTAwNEU+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU0NT4JPFUwMDRFPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTQ2Pgk8VTAwNEU+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU0Nz4JPFUwMDRFPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTQ1Pgk8VTAwNEU+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNDY+CTxVMDA0RT47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFNEE+CTxVMDA0RT47PE1BQ1JPTitDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNEI+CTxVMDA0RT47PE1BQ1JPTitDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRTQ4Pgk8VTAwNEU+OzxMSU5FLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNDk+CTxVMDA0RT47PExJTkUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxNDk+CTxVMDA0RT47PFBSRUNFREVELUJZLUFQT1NUUk9QSEU+OzxTTUFMTD47SUdOT1JFCis8bjg+Cis8VTAxNEE+CSI8VTAwNEU+PFUwMDQ3PiI7IjxVMDE0QT48VTAxNEE+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDE0Qj4JIjxVMDA0RT48VTAwNDc+IjsiPFUwMTRBPjxVMDE0QT4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAwNEY+CTxVMDA0Rj47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2Rj4JPFUwMDRGPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDBCQT4JPFUwMDRGPjs8Tk9ORT47PFUwMEJBPjtJR05PUkUKKzxVMDBEMz4JPFUwMDRGPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGMz4JPFUwMDRGPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAwRDI+CTxVMDA0Rj47PEdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRjI+CTxVMDA0Rj47PEdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjBDPgk8VTAwNEY+OzxET1VCTEUtR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIwRD4JPFUwMDRGPjs8RE9VQkxFLUdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTRFPgk8VTAwNEY+OzxCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTRGPgk8VTAwNEY+OzxCUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIwRT4JPFUwMDRGPjs8SU5WRVJURUQtQlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIwRj4JPFUwMDRGPjs8SU5WRVJURUQtQlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAwRDQ+CTxVMDA0Rj47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGND4JPFUwMDRGPjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMUVEMD4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRUQxPgk8VTAwNEY+OzxDSVJDVU1GTEVYK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRUQyPgk8VTAwNEY+OzxDSVJDVU1GTEVYK0dSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRDM+CTxVMDA0Rj47PENJUkNVTUZMRVgrR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFRDQ+CTxVMDA0Rj47PENJUkNVTUZMRVgrSE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUQ1Pgk8VTAwNEY+OzxDSVJDVU1GTEVYK0hPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFRDY+CTxVMDA0Rj47PENJUkNVTUZMRVgrVElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVENz4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUVEOD4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVEOT4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxRDE+CTxVMDA0Rj47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRDI+CTxVMDA0Rj47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMEQ2Pgk8VTAwNEY+OzxESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGNj4JPFUwMDRGPjs8RElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUwMTUwPgk8VTAwNEY+OzxET1VCTEUtQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE1MT4JPFUwMDRGPjs8RE9VQkxFLUFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRUNFPgk8VTAwNEY+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQ0Y+CTxVMDA0Rj47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTAwRDU+CTxVMDA0Rj47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRjU+CTxVMDA0Rj47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRTRDPgk8VTAwNEY+OzxUSUxERStBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTREPgk8VTAwNEY+OzxUSUxERStBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUU0RT4JPFUwMDRGPjs8VElMREUrRElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNEY+CTxVMDA0Rj47PFRJTERFK0RJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMUVDQz4JPFUwMDRGPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQ0Q+CTxVMDA0Rj47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDBEOD4JPFUwMDRGPjs8U1RST0tFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRjg+CTxVMDA0Rj47PFNUUk9LRT47PFNNQUxMPjtJR05PUkUKKzxVMDFGRT4JPFUwMDRGPjs8U1RST0tFK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRkY+CTxVMDA0Rj47PFNUUk9LRStBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDFFQT4JPFUwMDRGPjs8T0dPTkVLPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRUI+CTxVMDA0Rj47PE9HT05FSz47PFNNQUxMPjtJR05PUkUKKzxVMDFFQz4JPFUwMDRGPjs8T0dPTkVLK01BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUVEPgk8VTAwNEY+OzxPR09ORUsrTUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMTRDPgk8VTAwNEY+OzxNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0RD4JPFUwMDRGPjs8TUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRTUyPgk8VTAwNEY+OzxNQUNST04rQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU1Mz4JPFUwMDRGPjs8TUFDUk9OK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTUwPgk8VTAwNEY+OzxNQUNST04rR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU1MT4JPFUwMDRGPjs8TUFDUk9OK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMUEwPgk8VTAwNEY+OzxIT1JOPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxQTE+CTxVMDA0Rj47PEhPUk4+OzxTTUFMTD47SUdOT1JFCis8VTFFREE+CTxVMDA0Rj47PEhPUk4rQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVEQj4JPFUwMDRGPjs8SE9STitBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVEQz4JPFUwMDRGPjs8SE9STitHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRUREPgk8VTAwNEY+OzxIT1JOK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRURFPgk8VTAwNEY+OzxIT1JOK0hPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVERj4JPFUwMDRGPjs8SE9STitIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRUUwPgk8VTAwNEY+OzxIT1JOK1RJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRTE+CTxVMDA0Rj47PEhPUk4rVElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFRTI+CTxVMDA0Rj47PEhPUk4rRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRTM+CTxVMDA0Rj47PEhPUk4rRE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPG84PgorPFUwMTUyPgkiPFUwMDRGPjxVMDA0NT4iOyI8VTAxNTI+PFUwMTUyPiI7IjxDQVBJVEFMPjxDQVBJVEFMPiI7SUdOT1JFCis8VTAxNTM+CSI8VTAwNEY+PFUwMDQ1PiI7IjxVMDE1Mj48VTAxNTI+IjsiPFNNQUxMPjxTTUFMTD4iO0lHTk9SRQorPFUwMDUwPgk8VTAwNTA+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzA+CTxVMDA1MD47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFNTQ+CTxVMDA1MD47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNTU+CTxVMDA1MD47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTU2Pgk8VTAwNTA+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU1Nz4JPFUwMDUwPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPHA4PgorPFUwMDUxPgk8VTAwNTE+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzE+CTxVMDA1MT47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8cTg+Cis8VTAwNTI+CTxVMDA1Mj47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3Mj4JPFUwMDUyPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDE1ND4JPFUwMDUyPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE1NT4JPFUwMDUyPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAyMTA+CTxVMDA1Mj47PERPVUJMRS1HUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjExPgk8VTAwNTI+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMTI+CTxVMDA1Mj47PElOVkVSVEVELUJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMTM+CTxVMDA1Mj47PElOVkVSVEVELUJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTU4Pgk8VTAwNTI+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTU5Pgk8VTAwNTI+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMUU1OD4JPFUwMDUyPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNTk+CTxVMDA1Mj47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUU1QT4JPFUwMDUyPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNUI+CTxVMDA1Mj47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDE1Nj4JPFUwMDUyPjs8Q0VESUxMQT47PENBUElUQUw+O0lHTk9SRQorPFUwMTU3Pgk8VTAwNTI+OzxDRURJTExBPjs8U01BTEw+O0lHTk9SRQorPFUxRTVDPgk8VTAwNTI+OzxNQUNST04rRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNUQ+CTxVMDA1Mj47PE1BQ1JPTitET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTFFNUU+CTxVMDA1Mj47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU1Rj4JPFUwMDUyPjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxyOD4KKzxVMDA1Mz4JPFUwMDUzPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDczPgk8VTAwNTM+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFVGQjA2PgkiPFUwMDUzPjxVMDA1ND4iOyI8Tk9ORT48Tk9ORT4iOyI8VUZCMDY+PFVGQjA2PiI7SUdOT1JFCis8VTAxNUE+CTxVMDA1Mz47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNUI+CTxVMDA1Mz47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTY0Pgk8VTAwNTM+OzxBQ1VURStET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2NT4JPFUwMDUzPjs8QUNVVEUrRE9UPjs8U01BTEw+O0lHTk9SRQorPFUwMTVDPgk8VTAwNTM+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNUQ+CTxVMDA1Mz47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFNjY+CTxVMDA1Mz47PENBUk9OK0RPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTY3Pgk8VTAwNTM+OzxDQVJPTitET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFNjA+CTxVMDA1Mz47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTYxPgk8VTAwNTM+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFNjI+CTxVMDA1Mz47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTYzPgk8VTAwNTM+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTFFNjg+CTxVMDA1Mz47PERPVCtET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2OT4JPFUwMDUzPjs8RE9UK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDE1RT4JPFUwMDUzPjs8Q0VESUxMQT47PENBUElUQUw+O0lHTk9SRQorPFUwMTVGPgk8VTAwNTM+OzxDRURJTExBPjs8U01BTEw+O0lHTk9SRQorPHM4PgorPFUwMTYwPgk8VTAxNjE+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNjE+CTxVMDE2MT47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxN0Y+CTxVMDA1Mz47PFUwMTdGPjs8U01BTEw+O0lHTk9SRQorPFUwMERGPgkiPFUwMDUzPjxVMDA1Mz4iOyI8Tk9ORT48Tk9ORT4iOyI8U01BTEw+PFUwMERGPiI7SUdOT1JFCis8VUZCMDU+CSI8VTAwNTM+PFUwMDU0PiI7IjxOT05FPjxOT05FPiI7IjxVRkIwNT48VUZCMDU+IjtJR05PUkUKKzxVMDA1ND4JPFUwMDU0Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDc0Pgk8VTAwNTQ+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTY0Pgk8VTAwNTQ+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTY1Pgk8VTAwNTQ+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMUU2QT4JPFUwMDU0Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNkI+CTxVMDA1ND47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUU2Qz4JPFUwMDU0Pjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNkQ+CTxVMDA1ND47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDE2Nj4JPFUwMDU0Pjs8U1RST0tFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNjc+CTxVMDA1ND47PFNUUk9LRT47PFNNQUxMPjtJR05PUkUKKzxVMDE2Mj4JPFUwMDU0Pjs8Q0VESUxMQT47PENBUElUQUw+O0lHTk9SRQorPFUwMTYzPgk8VTAwNTQ+OzxDRURJTExBPjs8U01BTEw+O0lHTk9SRQorPFUxRTcwPgk8VTAwNTQ+OzxNQUNST04rQ0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUxRTcxPgk8VTAwNTQ+OzxNQUNST04rQ0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMUU2RT4JPFUwMDU0Pjs8TElORS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTZGPgk8VTAwNTQ+OzxMSU5FLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPHQ4PgorPFUwMERFPgkiPFUwMDU0PjxVMDA0OD4iOyI8VTAwREU+PFUwMERFPiI7IjxDQVBJVEFMPjxDQVBJVEFMPiI7SUdOT1JFCis8VTAwRkU+CSI8VTAwNTQ+PFUwMDQ4PiI7IjxVMDBERT48VTAwREU+IjsiPFNNQUxMPjxTTUFMTD4iO0lHTk9SRQorPFUwMDU1Pgk8VTAwNTU+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzU+CTxVMDA1NT47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAwREE+CTxVMDA1NT47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRkE+CTxVMDA1NT47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMEQ5Pgk8VTAwNTU+OzxHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMEY5Pgk8VTAwNTU+OzxHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIxND4JPFUwMDU1Pjs8RE9VQkxFLUdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMTU+CTxVMDA1NT47PERPVUJMRS1HUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDE2Qz4JPFUwMDU1Pjs8QlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE2RD4JPFUwMDU1Pjs8QlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMTY+CTxVMDA1NT47PElOVkVSVEVELUJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMTc+CTxVMDA1NT47PElOVkVSVEVELUJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMERCPgk8VTAwNTU+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRkI+CTxVMDA1NT47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTAxRDM+CTxVMDA1NT47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRDQ+CTxVMDA1NT47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMTZFPgk8VTAwNTU+OzxSSU5HPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNkY+CTxVMDA1NT47PFJJTkc+OzxTTUFMTD47SUdOT1JFCis8VTAwREM+CTxVMDA1NT47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUwMEZDPgk8VTAwNTU+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTAxRDU+CTxVMDA1NT47PERJQUVSRVNJUytNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFENj4JPFUwMDU1Pjs8RElBRVJFU0lTK01BQ1JPTj47PFNNQUxMPjtJR05PUkUKKzxVMDFENz4JPFUwMDU1Pjs8RElBRVJFU0lTK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRDg+CTxVMDA1NT47PERJQUVSRVNJUytBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDFEQj4JPFUwMDU1Pjs8RElBRVJFU0lTK0dSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxREM+CTxVMDA1NT47PERJQUVSRVNJUytHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDFEOT4JPFUwMDU1Pjs8RElBRVJFU0lTK0NBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxREE+CTxVMDA1NT47PERJQUVSRVNJUytDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDE3MD4JPFUwMDU1Pjs8RE9VQkxFLUFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNzE+CTxVMDA1NT47PERPVUJMRS1BQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVFNj4JPFUwMDU1Pjs8SE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUU3Pgk8VTAwNTU+OzxIT09LPjs8U01BTEw+O0lHTk9SRQorPFUwMTY4Pgk8VTAwNTU+OzxUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUwMTY5Pgk8VTAwNTU+OzxUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUU3OD4JPFUwMDU1Pjs8VElMREUrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU3OT4JPFUwMDU1Pjs8VElMREUrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFNzQ+CTxVMDA1NT47PFRJTERFLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNzU+CTxVMDA1NT47PFRJTERFLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUxRUU0Pgk8VTAwNTU+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFNT4JPFUwMDU1Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTcyPgk8VTAwNTU+OzxPR09ORUs+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE3Mz4JPFUwMDU1Pjs8T0dPTkVLPjs8U01BTEw+O0lHTk9SRQorPFUwMTZBPgk8VTAwNTU+OzxNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE2Qj4JPFUwMDU1Pjs8TUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRTdBPgk8VTAwNTU+OzxNQUNST04rRElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFN0I+CTxVMDA1NT47PE1BQ1JPTitESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFNzI+CTxVMDA1NT47PE1BQ1JPTitESUFFUkVTSVMtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU3Mz4JPFUwMDU1Pjs8TUFDUk9OK0RJQUVSRVNJUy1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUU3Nj4JPFUwMDU1Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU3Nz4JPFUwMDU1Pjs8TUFDUk9OK0NJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTAxQUY+CTxVMDA1NT47PEhPUk4+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFCMD4JPFUwMDU1Pjs8SE9STj47PFNNQUxMPjtJR05PUkUKKzxVMUVFOD4JPFUwMDU1Pjs8SE9STitBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRUU5Pgk8VTAwNTU+OzxIT1JOK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRUVBPgk8VTAwNTU+OzxIT1JOK0dSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRUI+CTxVMDA1NT47PEhPUk4rR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFRUM+CTxVMDA1NT47PEhPUk4rSE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUVEPgk8VTAwNTU+OzxIT1JOK0hPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFRUU+CTxVMDA1NT47PEhPUk4rVElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFRj4JPFUwMDU1Pjs8SE9STitUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUVGMD4JPFUwMDU1Pjs8SE9STitET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVGMT4JPFUwMDU1Pjs8SE9STitET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8dTg+Cis8VTAwNTY+CTxVMDA1Nj47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3Nj4JPFUwMDU2Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMUU3Qz4JPFUwMDU2Pjs8VElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU3RD4JPFUwMDU2Pjs8VElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFN0U+CTxVMDA1Nj47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTdGPgk8VTAwNTY+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8djg+Cis8VTAwNTc+CTxVMDA1Nz47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3Nz4JPFUwMDU3Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMUU4Mj4JPFUwMDU3Pjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU4Mz4JPFUwMDU3Pjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFODA+CTxVMDA1Nz47PEdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFODE+CTxVMDA1Nz47PEdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTc0Pgk8VTAwNTc+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNzU+CTxVMDA1Nz47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFODQ+CTxVMDA1Nz47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUxRTg1Pgk8VTAwNTc+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFODY+CTxVMDA1Nz47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTg3Pgk8VTAwNTc+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFODg+CTxVMDA1Nz47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTg5Pgk8VTAwNTc+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8dzg+Cis8VTAwNTg+CTxVMDA1OD47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3OD4JPFUwMDU4Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMUU4Qz4JPFUwMDU4Pjs8RElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFOEQ+CTxVMDA1OD47PERJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMUU4QT4JPFUwMDU4Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFOEI+CTxVMDA1OD47PERPVD47PFNNQUxMPjtJR05PUkUKKzx4OD4KKzxVMDA1OT4JPFUwMDU5Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDc5Pgk8VTAwNTk+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMEREPgk8VTAwNTk+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMEZEPgk8VTAwNTk+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVGMj4JPFUwMDU5Pjs8R1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVGMz4JPFUwMDU5Pjs8R1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxNzY+CTxVMDA1OT47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE3Nz4JPFUwMDU5Pjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMDE3OD4JPFUwMDU5Pjs8RElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRkY+CTxVMDA1OT47PERJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMUVGNj4JPFUwMDU5Pjs8SE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUY3Pgk8VTAwNTk+OzxIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRUY4Pgk8VTAwNTk+OzxUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUxRUY5Pgk8VTAwNTk+OzxUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUU4RT4JPFUwMDU5Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFOEY+CTxVMDA1OT47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUVGND4JPFUwMDU5Pjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRjU+CTxVMDA1OT47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzx5OD4KKzxVMDA1QT4JPFUwMDVBPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDdBPgk8VTAwNUE+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTc5Pgk8VTAwNUE+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMTdBPgk8VTAwNUE+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUU5MD4JPFUwMDVBPjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUxRTkxPgk8VTAwNUE+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUwMTdCPgk8VTAwNUE+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE3Qz4JPFUwMDVBPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTkyPgk8VTAwNUE+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU5Mz4JPFUwMDVBPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMUI1Pgk8VTAwNUE+OzxTVFJPS0U+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFCNj4JPFUwMDVBPjs8U1RST0tFPjs8U01BTEw+O0lHTk9SRQorPFUxRTk0Pgk8VTAwNUE+OzxMSU5FLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFOTU+CTxVMDA1QT47PExJTkUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8ejg+Cis8VTAxN0Q+CTxVMDE3RT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE3RT4JPFUwMTdFPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDM5MT4JPFUwMzkxPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDM4Nj4JPFUwMzkxPjs8Q0FQSVRBTD47PFRPTk9TPjtJR05PUkUKKzxVMDNCMT4JPFUwMzkxPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQUM+CTxVMDM5MT47PFNNQUxMPjs8VE9OT1M+O0lHTk9SRQorPFUwMzkyPgk8VTAzOTI+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0IyPgk8VTAzOTI+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDM5Mz4JPFUwMzkzPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCMz4JPFUwMzkzPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOTQ+CTxVMDM5ND47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQjQ+CTxVMDM5ND47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzk1Pgk8VTAzOTU+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzg4Pgk8VTAzOTU+OzxDQVBJVEFMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0I1Pgk8VTAzOTU+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBRD4JPFUwMzk1Pjs8U01BTEw+OzxUT05PUz47SUdOT1JFCis8VTAzOTY+CTxVMDM5Nj47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQjY+CTxVMDM5Nj47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzk3Pgk8VTAzOTc+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzg5Pgk8VTAzOTc+OzxDQVBJVEFMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0I3Pgk8VTAzOTc+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBRT4JPFUwMzk3Pjs8U01BTEw+OzxUT05PUz47SUdOT1JFCis8VTAzOTg+CTxVMDM5OD47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQjg+CTxVMDM5OD47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzk5Pgk8VTAzOTk+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzhBPgk8VTAzOTk+OzxDQVBJVEFMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0FBPgk8VTAzOTk+OzxDQVBJVEFMPjs8RElBTFlUSUNBPjtJR05PUkUKKzxVMDNCOT4JPFUwMzk5Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQUY+CTxVMDM5OT47PFNNQUxMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0NBPgk8VTAzOTk+OzxTTUFMTD47PERJQUxZVElDQT47SUdOT1JFCis8VTAzOTA+CTxVMDM5OT47PFNNQUxMPjs8RElBTFlUSUNBK1RPTk9TPjtJR05PUkUKKzxVMDM5QT4JPFUwMzlBPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCQT4JPFUwMzlBPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOUI+CTxVMDM5Qj47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQkI+CTxVMDM5Qj47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzlDPgk8VTAzOUM+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0JDPgk8VTAzOUM+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDM5RD4JPFUwMzlEPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCRD4JPFUwMzlEPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOUU+CTxVMDM5RT47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQkU+CTxVMDM5RT47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzlGPgk8VTAzOUY+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzhDPgk8VTAzOUY+OzxDQVBJVEFMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0JGPgk8VTAzOUY+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDQz4JPFUwMzlGPjs8U01BTEw+OzxUT05PUz47SUdOT1JFCis8VTAzQTA+CTxVMDNBMD47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzA+CTxVMDNBMD47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0ExPgk8VTAzQTE+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0MxPgk8VTAzQTE+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBMz4JPFUwM0EzPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDMz4JPFUwM0EzPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzI+CTxVMDNBMz47PFNNQUxMPjs8VTAzQzI+O0lHTk9SRQorPFUwM0E0Pgk8VTAzQTQ+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0M0Pgk8VTAzQTQ+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBNT4JPFUwM0E1Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDM4RT4JPFUwM0E1Pjs8Q0FQSVRBTD47PFRPTk9TPjtJR05PUkUKKzxVMDNBQj4JPFUwM0E1Pjs8Q0FQSVRBTD47PERJQUxZVElDQT47SUdOT1JFCis8VTAzQzU+CTxVMDNBNT47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0NEPgk8VTAzQTU+OzxTTUFMTD47PFRPTk9TPjtJR05PUkUKKzxVMDNDQj4JPFUwM0E1Pjs8U01BTEw+OzxESUFMWVRJQ0E+O0lHTk9SRQorPFUwM0IwPgk8VTAzQTU+OzxTTUFMTD47PERJQUxZVElDQStUT05PUz47SUdOT1JFCis8VTAzQTY+CTxVMDNBNj47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzY+CTxVMDNBNj47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0E3Pgk8VTAzQTc+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0M3Pgk8VTAzQTc+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBOD4JPFUwM0E4Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDOD4JPFUwM0E4Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQTk+CTxVMDNBOT47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzOEY+CTxVMDNBOT47PENBUElUQUw+OzxUT05PUz47SUdOT1JFCis8VTAzQzk+CTxVMDNBOT47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0NFPgk8VTAzQTk+OzxTTUFMTD47PFRPTk9TPjtJR05PUkUKKzxVMDQxMD4JPFUwNDEwPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzMD4JPFUwNDEwPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTE+CTxVMDQxMT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0MzE+CTxVMDQxMT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDEyPgk8VTA0MTI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDMyPgk8VTA0MTI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxMz4JPFUwNDEzPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzMz4JPFUwNDEzPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MDM+CTxVMDQwMz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NTM+CTxVMDQwMz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDkwPgk8VTA0OTA+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDkxPgk8VTA0OTA+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxND4JPFUwNDE0Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzND4JPFUwNDE0Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MDI+CTxVMDQwMj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NTI+CTxVMDQwMj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDE1Pgk8VTA0MTU+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDM1Pgk8VTA0MTU+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwMT4JPFUwNDAxPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1MT4JPFUwNDAxPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MDQ+CTxVMDQwND47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NTQ+CTxVMDQwND47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDE2Pgk8VTA0MTY+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDM2Pgk8VTA0MTY+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxNz4JPFUwNDE3Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzNz4JPFUwNDE3Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTg+CTxVMDQxOD47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0Mzg+CTxVMDQxOD47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDA2Pgk8VTA0MDY+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDU2Pgk8VTA0MDY+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwNz4JPFUwNDA3Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1Nz4JPFUwNDA3Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MDg+CTxVMDQwOD47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NTg+CTxVMDQwOD47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDE5Pgk8VTA0MTk+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDM5Pgk8VTA0MTk+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxQT4JPFUwNDFBPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzQT4JPFUwNDFBPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MEM+CTxVMDQwQz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NUM+CTxVMDQwQz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDFCPgk8VTA0MUI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDNCPgk8VTA0MUI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwOT4JPFUwNDA5Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1OT4JPFUwNDA5Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MUM+CTxVMDQxQz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0M0M+CTxVMDQxQz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDFEPgk8VTA0MUQ+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDNEPgk8VTA0MUQ+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwQT4JPFUwNDBBPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1QT4JPFUwNDBBPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MUU+CTxVMDQxRT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0M0U+CTxVMDQxRT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDFGPgk8VTA0MUY+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDNGPgk8VTA0MUY+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyMD4JPFUwNDIwPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0MD4JPFUwNDIwPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MjE+CTxVMDQyMT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDE+CTxVMDQyMT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDIyPgk8VTA0MjI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDQyPgk8VTA0MjI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwQj4JPFUwNDBCPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1Qj4JPFUwNDBCPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MjM+CTxVMDQyMz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDM+CTxVMDQyMz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDBFPgk8VTA0MEU+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDVFPgk8VTA0MEU+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyND4JPFUwNDI0Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0ND4JPFUwNDI0Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MjU+CTxVMDQyNT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDU+CTxVMDQyNT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDI2Pgk8VTA0MjY+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDQ2Pgk8VTA0MjY+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwNT4JPFUwNDA1Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1NT4JPFUwNDA1Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0Mjc+CTxVMDQyNz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDc+CTxVMDQyNz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDBGPgk8VTA0MEY+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDVGPgk8VTA0MEY+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyOD4JPFUwNDI4Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0OD4JPFUwNDI4Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0Mjk+CTxVMDQyOT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDk+CTxVMDQyOT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDRBPgk8VTA0NEE+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyQT4JPFUwNDRBPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQyQj4JPFUwNDJCPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0Qj4JPFUwNDJCPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0NEM+CTxVMDQ0Qz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDJDPgk8VTA0NEM+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDJEPgk8VTA0MkQ+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDREPgk8VTA0MkQ+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyRT4JPFUwNDJFPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0RT4JPFUwNDJFPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MkY+CTxVMDQyRj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NEY+CTxVMDQyRj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDYyPgk8VTA0NjI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDYzPgk8VTA0NjI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQ2QT4JPFUwNDZBPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ2Qj4JPFUwNDZBPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0NzI+CTxVMDQ3Mj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NzM+CTxVMDQ3Mj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDc0Pgk8VTA0NzQ+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDc1Pgk8VTA0NzQ+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQ4MD4JPFUwNDgwPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ4MT4JPFUwNDgwPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA1RDA+CTxVMDVEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEMT4JPFUwNUQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQyPgk8VTA1RDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDM+CTxVMDVEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEND4JPFUwNUQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQ1Pgk8VTA1RDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDY+CTxVMDVENj47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVENz4JPFUwNUQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQ4Pgk8VTA1RDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDk+CTxVMDVEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEQT4JPFUwNURBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNURCPgk8VTA1REI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1REM+CTxVMDVEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVERD4JPFUwNUREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNURFPgk8VTA1REU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1REY+CTxVMDVERj47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFMD4JPFUwNUUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUUxPgk8VTA1RTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTI+CTxVMDVFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFMz4JPFUwNUUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUU0Pgk8VTA1RTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTU+CTxVMDVFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFNj4JPFUwNUU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUU3Pgk8VTA1RTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTg+CTxVMDVFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFOT4JPFUwNUU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUVBPgk8VTA1RUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCisKKyUgQXJhYmljIGNvbGxhdGluZworCis8VTA2MEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDYwQz4KKzxVMDYxQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNjFCPgorPFUwNjFGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA2MUY+Cis8VTA2NDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDY0MD4KKworPFUwNjIxPgk8VTA2MjE+OzxVMDYyMT47SUdOT1JFO0lHTk9SRQorPFUwNjIyPgk8VTA2MjI+OzxVMDYyMj47SUdOT1JFO0lHTk9SRQorPFVGRTgyPgk8VTA2MjI+OzxVRkU4Mj47SUdOT1JFO0lHTk9SRQorPFUwNjIzPgk8VTA2MjE+OzxVMDYyMz47SUdOT1JFO0lHTk9SRQorPFVGRTg0Pgk8VTA2MjE+OzxVRkU4ND47SUdOT1JFO0lHTk9SRQorPFUwNjI0Pgk8VTA2MjE+OzxVMDYyND47SUdOT1JFO0lHTk9SRQorPFUwNjI1Pgk8VTA2MjE+OzxVMDYyNT47SUdOT1JFO0lHTk9SRQorPFVGRTg4Pgk8VTA2MjE+OzxVRkU4OD47SUdOT1JFO0lHTk9SRQorPFUwNjI2Pgk8VTA2MjE+OzxVMDYyNj47SUdOT1JFO0lHTk9SRQorPFUwNjcwPgk8VTA2NzA+OzxVMDY3MD47SUdOT1JFO0lHTk9SRQorPFUwNjI3Pgk8VTA2Mjc+OzxVMDYyNz47SUdOT1JFO0lHTk9SRQorPFVGRThEPgk8VTA2Mjc+OzxVRkU4RD47SUdOT1JFO0lHTk9SRQorPFVGRThFPgk8VTA2Mjc+OzxVRkU4RT47SUdOT1JFO0lHTk9SRQorPFVFMDE2Pgk8VTA2Mjc+OzxVRTAxNj47SUdOT1JFO0lHTk9SRQorPFUwNjI4Pgk8VTA2Mjg+OzxVMDYyOD47SUdOT1JFO0lHTk9SRQorPFVGRThGPgk8VTA2Mjg+OzxVRkU4Rj47SUdOT1JFO0lHTk9SRQorPFVGRTkwPgk8VTA2Mjg+OzxVRkU5MD47SUdOT1JFO0lHTk9SRQorPFVGRTkxPgk8VTA2Mjg+OzxVRkU5MT47SUdOT1JFO0lHTk9SRQorPFVGRTkyPgk8VTA2Mjg+OzxVRkU5Mj47SUdOT1JFO0lHTk9SRQorPFUwNjdFPgk8VTA2N0U+OzxVMDY3RT47SUdOT1JFO0lHTk9SRQorPFUwNkE0Pgk8VTA2QTQ+OzxVMDZBND47SUdOT1JFO0lHTk9SRQorPFUwNjI5Pgk8VTA2Mjk+OzxVMDYyOT47SUdOT1JFO0lHTk9SRQorPFVGRTkzPgk8VTA2Mjk+OzxVRkU5Mz47SUdOT1JFO0lHTk9SRQorPFVGRTk0Pgk8VTA2Mjk+OzxVRkU5ND47SUdOT1JFO0lHTk9SRQorPFUwNjJBPgk8VTA2Mjk+OzxVMDYyQT47SUdOT1JFO0lHTk9SRQorPFVGRTk1Pgk8VTA2Mjk+OzxVRkU5NT47SUdOT1JFO0lHTk9SRQorPFVGRTk2Pgk8VTA2Mjk+OzxVRkU5Nj47SUdOT1JFO0lHTk9SRQorPFVGRTk3Pgk8VTA2Mjk+OzxVRkU5Nz47SUdOT1JFO0lHTk9SRQorPFVGRTk4Pgk8VTA2Mjk+OzxVRkU5OD47SUdOT1JFO0lHTk9SRQorPFUwNjJCPgk8VTA2MkI+OzxVMDYyQj47SUdOT1JFO0lHTk9SRQorPFVGRTk5Pgk8VTA2MkI+OzxVRkU5OT47SUdOT1JFO0lHTk9SRQorPFVGRTlBPgk8VTA2MkI+OzxVRkU5QT47SUdOT1JFO0lHTk9SRQorPFVGRTlCPgk8VTA2MkI+OzxVRkU5Qj47SUdOT1JFO0lHTk9SRQorPFVGRTlDPgk8VTA2MkI+OzxVRkU5Qz47SUdOT1JFO0lHTk9SRQorPFUwNjJDPgk8VTA2MkM+OzxVMDYyQz47SUdOT1JFO0lHTk9SRQorPFVGRTlEPgk8VTA2MkM+OzxVRkU5RD47SUdOT1JFO0lHTk9SRQorPFVGRTlFPgk8VTA2MkM+OzxVRkU5RT47SUdOT1JFO0lHTk9SRQorPFVGRTlGPgk8VTA2MkM+OzxVRkU5Rj47SUdOT1JFO0lHTk9SRQorPFVGRUEwPgk8VTA2MkM+OzxVRkVBMD47SUdOT1JFO0lHTk9SRQorPFUwNjJEPgk8VTA2MkQ+OzxVMDYyRD47SUdOT1JFO0lHTk9SRQorPFVGRUExPgk8VTA2MkQ+OzxVRkVBMT47SUdOT1JFO0lHTk9SRQorPFVGRUEyPgk8VTA2MkQ+OzxVRkVBMj47SUdOT1JFO0lHTk9SRQorPFVGRUEzPgk8VTA2MkQ+OzxVRkVBMz47SUdOT1JFO0lHTk9SRQorPFVGRUE0Pgk8VTA2MkQ+OzxVRkVBND47SUdOT1JFO0lHTk9SRQorPFUwNjJFPgk8VTA2MkU+OzxVMDYyRT47SUdOT1JFO0lHTk9SRQorPFVGRUE1Pgk8VTA2MkU+OzxVRkVBNT47SUdOT1JFO0lHTk9SRQorPFVGRUE2Pgk8VTA2MkU+OzxVRkVBNj47SUdOT1JFO0lHTk9SRQorPFVGRUE3Pgk8VTA2MkU+OzxVRkVBNz47SUdOT1JFO0lHTk9SRQorPFVGRUE4Pgk8VTA2MkU+OzxVRkVBOD47SUdOT1JFO0lHTk9SRQorPFUwNjJGPgk8VTA2MkY+OzxVMDYyRj47SUdOT1JFO0lHTk9SRQorPFVGRUE5Pgk8VTA2MkY+OzxVRkVBOT47SUdOT1JFO0lHTk9SRQorPFVGRUFBPgk8VTA2MkY+OzxVRkVBQT47SUdOT1JFO0lHTk9SRQorPFUwNjMwPgk8VTA2MzA+OzxVMDYzMD47SUdOT1JFO0lHTk9SRQorPFVGRUFCPgk8VTA2MzA+OzxVRkVBQj47SUdOT1JFO0lHTk9SRQorPFVGRUFDPgk8VTA2MzA+OzxVRkVBQz47SUdOT1JFO0lHTk9SRQorPFUwNjMxPgk8VTA2MzE+OzxVMDYzMT47SUdOT1JFO0lHTk9SRQorPFVGRUFEPgk8VTA2MzE+OzxVRkVBRD47SUdOT1JFO0lHTk9SRQorPFVGRUFFPgk8VTA2MzE+OzxVRkVBRT47SUdOT1JFO0lHTk9SRQorPFUwNjMyPgk8VTA2MzI+OzxVMDYzMj47SUdOT1JFO0lHTk9SRQorPFVGRUFGPgk8VTA2MzI+OzxVRkVBRj47SUdOT1JFO0lHTk9SRQorPFVGRUIwPgk8VTA2MzI+OzxVRkVCMD47SUdOT1JFO0lHTk9SRQorPFUwNjMzPgk8VTA2MzM+OzxVMDYzMz47SUdOT1JFO0lHTk9SRQorPFVGRUIxPgk8VTA2MzM+OzxVRkVCMT47SUdOT1JFO0lHTk9SRQorPFVGRUIyPgk8VTA2MzM+OzxVRkVCMj47SUdOT1JFO0lHTk9SRQorPFVGRUIzPgk8VTA2MzM+OzxVRkVCMz47SUdOT1JFO0lHTk9SRQorPFVGRUI0Pgk8VTA2MzM+OzxVRkVCND47SUdOT1JFO0lHTk9SRQorPFUwNjM0Pgk8VTA2MzQ+OzxVMDYzND47SUdOT1JFO0lHTk9SRQorPFVGRUI1Pgk8VTA2MzQ+OzxVRkVCNT47SUdOT1JFO0lHTk9SRQorPFVGRUI2Pgk8VTA2MzQ+OzxVRkVCNj47SUdOT1JFO0lHTk9SRQorPFVGRUI3Pgk8VTA2MzQ+OzxVRkVCNz47SUdOT1JFO0lHTk9SRQorPFVGRUI4Pgk8VTA2MzQ+OzxVRkVCOD47SUdOT1JFO0lHTk9SRQorPFUwNjM1Pgk8VTA2MzU+OzxVMDYzNT47SUdOT1JFO0lHTk9SRQorPFVGRUI5Pgk8VTA2MzU+OzxVRkVCOT47SUdOT1JFO0lHTk9SRQorPFVGRUJBPgk8VTA2MzU+OzxVRkVCQT47SUdOT1JFO0lHTk9SRQorPFVGRUJCPgk8VTA2MzU+OzxVRkVCQj47SUdOT1JFO0lHTk9SRQorPFVGRUJDPgk8VTA2MzU+OzxVRkVCQz47SUdOT1JFO0lHTk9SRQorPFUwNjM2Pgk8VTA2MzY+OzxVMDYzNj47SUdOT1JFO0lHTk9SRQorPFVGRUJEPgk8VTA2MzY+OzxVRkVCRD47SUdOT1JFO0lHTk9SRQorPFVGRUJFPgk8VTA2MzY+OzxVRkVCRT47SUdOT1JFO0lHTk9SRQorPFVGRUJGPgk8VTA2MzY+OzxVRkVCRj47SUdOT1JFO0lHTk9SRQorPFVGRUMwPgk8VTA2MzY+OzxVRkVDMD47SUdOT1JFO0lHTk9SRQorPFUwNjM3Pgk8VTA2Mzc+OzxVMDYzNz47SUdOT1JFO0lHTk9SRQorPFVGRUMxPgk8VTA2Mzc+OzxVRkVDMT47SUdOT1JFO0lHTk9SRQorPFVGRUMyPgk8VTA2Mzc+OzxVRkVDMj47SUdOT1JFO0lHTk9SRQorPFVGRUMzPgk8VTA2Mzc+OzxVRkVDMz47SUdOT1JFO0lHTk9SRQorPFVGRUM0Pgk8VTA2Mzc+OzxVRkVDND47SUdOT1JFO0lHTk9SRQorPFUwNjM4Pgk8VTA2Mzg+OzxVMDYzOD47SUdOT1JFO0lHTk9SRQorPFVGRUM1Pgk8VTA2Mzg+OzxVRkVDNT47SUdOT1JFO0lHTk9SRQorPFVGRUM2Pgk8VTA2Mzg+OzxVRkVDNj47SUdOT1JFO0lHTk9SRQorPFVGRUM3Pgk8VTA2Mzg+OzxVRkVDNz47SUdOT1JFO0lHTk9SRQorPFVGRUM4Pgk8VTA2Mzg+OzxVRkVDOD47SUdOT1JFO0lHTk9SRQorPFUwNjM5Pgk8VTA2Mzk+OzxVMDYzOT47SUdOT1JFO0lHTk9SRQorPFVGRUM5Pgk8VTA2Mzk+OzxVRkVDOT47SUdOT1JFO0lHTk9SRQorPFVGRUNBPgk8VTA2Mzk+OzxVRkVDQT47SUdOT1JFO0lHTk9SRQorPFVGRUNCPgk8VTA2Mzk+OzxVRkVDQj47SUdOT1JFO0lHTk9SRQorPFVGRUNDPgk8VTA2Mzk+OzxVRkVDQz47SUdOT1JFO0lHTk9SRQorPFUwNjNBPgk8VTA2M0E+OzxVMDYzQT47SUdOT1JFO0lHTk9SRQorPFVGRUNEPgk8VTA2M0E+OzxVRkVDRD47SUdOT1JFO0lHTk9SRQorPFVGRUNFPgk8VTA2M0E+OzxVRkVDRT47SUdOT1JFO0lHTk9SRQorPFVGRUNGPgk8VTA2M0E+OzxVRkVDRj47SUdOT1JFO0lHTk9SRQorPFVGRUQwPgk8VTA2M0E+OzxVRkVEMD47SUdOT1JFO0lHTk9SRQorPFUwNjQxPgk8VTA2NDE+OzxVMDY0MT47SUdOT1JFO0lHTk9SRQorPFVGRUQxPgk8VTA2NDE+OzxVRkVEMT47SUdOT1JFO0lHTk9SRQorPFVGRUQyPgk8VTA2NDE+OzxVRkVEMj47SUdOT1JFO0lHTk9SRQorPFVGRUQzPgk8VTA2NDE+OzxVRkVEMz47SUdOT1JFO0lHTk9SRQorPFVGRUQ0Pgk8VTA2NDE+OzxVRkVEND47SUdOT1JFO0lHTk9SRQorPFUwNjQyPgk8VTA2NDI+OzxVMDY0Mj47SUdOT1JFO0lHTk9SRQorPFVGRUQ1Pgk8VTA2NDI+OzxVRkVENT47SUdOT1JFO0lHTk9SRQorPFVGRUQ2Pgk8VTA2NDI+OzxVRkVENj47SUdOT1JFO0lHTk9SRQorPFVGRUQ3Pgk8VTA2NDI+OzxVRkVENz47SUdOT1JFO0lHTk9SRQorPFVGRUQ4Pgk8VTA2NDI+OzxVRkVEOD47SUdOT1JFO0lHTk9SRQorPFUwNjQzPgk8VTA2NDM+OzxVMDY0Mz47SUdOT1JFO0lHTk9SRQorPFVGRUQ5Pgk8VTA2NDM+OzxVRkVEOT47SUdOT1JFO0lHTk9SRQorPFVGRURBPgk8VTA2NDM+OzxVRkVEQT47SUdOT1JFO0lHTk9SRQorPFVGRURCPgk8VTA2NDM+OzxVRkVEQj47SUdOT1JFO0lHTk9SRQorPFVGRURDPgk8VTA2NDM+OzxVRkVEQz47SUdOT1JFO0lHTk9SRQorPFUwNjQ0Pgk8VTA2NDQ+OzxVMDY0ND47SUdOT1JFO0lHTk9SRQorPFVGRUREPgk8VTA2NDQ+OzxVRkVERD47SUdOT1JFO0lHTk9SRQorPFVGRURFPgk8VTA2NDQ+OzxVRkVERT47SUdOT1JFO0lHTk9SRQorPFVGRURGPgk8VTA2NDQ+OzxVRkVERj47SUdOT1JFO0lHTk9SRQorPFVGRUUwPgk8VTA2NDQ+OzxVRkVFMD47SUdOT1JFO0lHTk9SRQorPFUwNjQ1Pgk8VTA2NDU+OzxVMDY0NT47SUdOT1JFO0lHTk9SRQorPFVGRUUxPgk8VTA2NDU+OzxVRkVFMT47SUdOT1JFO0lHTk9SRQorPFVGRUUyPgk8VTA2NDU+OzxVRkVFMj47SUdOT1JFO0lHTk9SRQorPFVGRUUzPgk8VTA2NDU+OzxVRkVFMz47SUdOT1JFO0lHTk9SRQorPFVGRUU0Pgk8VTA2NDU+OzxVRkVFND47SUdOT1JFO0lHTk9SRQorPFUwNjQ2Pgk8VTA2NDY+OzxVMDY0Nj47SUdOT1JFO0lHTk9SRQorPFVGRUU1Pgk8VTA2NDY+OzxVRkVFNT47SUdOT1JFO0lHTk9SRQorPFVGRUU2Pgk8VTA2NDY+OzxVRkVFNj47SUdOT1JFO0lHTk9SRQorPFVGRUU3Pgk8VTA2NDY+OzxVRkVFNz47SUdOT1JFO0lHTk9SRQorPFVGRUU4Pgk8VTA2NDY+OzxVRkVFOD47SUdOT1JFO0lHTk9SRQorPFUwNjQ3Pgk8VTA2NDc+OzxVMDY0Nz47SUdOT1JFO0lHTk9SRQorPFVGRUU5Pgk8VTA2NDc+OzxVRkVFOT47SUdOT1JFO0lHTk9SRQorPFVGRUVBPgk8VTA2NDc+OzxVRkVFQT47SUdOT1JFO0lHTk9SRQorPFVGRUVCPgk8VTA2NDc+OzxVRkVFQj47SUdOT1JFO0lHTk9SRQorPFVGRUVDPgk8VTA2NDc+OzxVRkVFQz47SUdOT1JFO0lHTk9SRQorPFUwNjQ4Pgk8VTA2NDg+OzxVMDY0OD47SUdOT1JFO0lHTk9SRQorPFVGRUVEPgk8VTA2NDg+OzxVRkVFRD47SUdOT1JFO0lHTk9SRQorPFVGRUVFPgk8VTA2NDg+OzxVRkVFRT47SUdOT1JFO0lHTk9SRQorPFUwNjQ5Pgk8VTA2NDk+OzxVMDY0OT47SUdOT1JFO0lHTk9SRQorPFVGRUVGPgk8VTA2NDk+OzxVRkVFRj47SUdOT1JFO0lHTk9SRQorPFVGRUYwPgk8VTA2NDk+OzxVRkVGMD47SUdOT1JFO0lHTk9SRQorPFUwNjRBPgk8VTA2NEE+OzxVMDY0QT47SUdOT1JFO0lHTk9SRQorPFVGRUYxPgk8VTA2NEE+OzxVRkVGMT47SUdOT1JFO0lHTk9SRQorPFVGRUYyPgk8VTA2NEE+OzxVRkVGMj47SUdOT1JFO0lHTk9SRQorPFVGRUYzPgk8VTA2NEE+OzxVRkVGMz47SUdOT1JFO0lHTk9SRQorPFVGRUY0Pgk8VTA2NEE+OzxVRkVGND47SUdOT1JFO0lHTk9SRQorCis8VTA2NEI+CUlHTk9SRTtJR05PUkU7PFUwNjRCPjtJR05PUkUKKzxVMDY0Qz4JSUdOT1JFO0lHTk9SRTs8VTA2NEM+O0lHTk9SRQorPFUwNjREPglJR05PUkU7SUdOT1JFOzxVMDY0RD47SUdOT1JFCis8VTA2NEU+CUlHTk9SRTtJR05PUkU7PFUwNjRFPjtJR05PUkUKKzxVMDY0Rj4JSUdOT1JFO0lHTk9SRTs8VTA2NEY+O0lHTk9SRQorPFUwNjUwPglJR05PUkU7SUdOT1JFOzxVMDY1MD47SUdOT1JFCis8VTA2NTE+CUlHTk9SRTtJR05PUkU7PFUwNjUxPjtJR05PUkUKKzxVRkU3RD4JSUdOT1JFO0lHTk9SRTs8VUZFN0Q+O0lHTk9SRQorPFUwNjUyPglJR05PUkU7SUdOT1JFOzxVMDY1Mj47SUdOT1JFCisKKzxVMDY2MD4JPFUwMDMwPjs8VTA2NjA+O0lHTk9SRTtJR05PUkUKKzxVMDY2MT4JPFUwMDMxPjs8VTA2NjE+O0lHTk9SRTtJR05PUkUKKzxVMDY2Mj4JPFUwMDMyPjs8VTA2NjI+O0lHTk9SRTtJR05PUkUKKzxVMDY2Mz4JPFUwMDMzPjs8VTA2NjM+O0lHTk9SRTtJR05PUkUKKzxVMDY2ND4JPFUwMDM0Pjs8VTA2NjQ+O0lHTk9SRTtJR05PUkUKKzxVMDY2NT4JPFUwMDM1Pjs8VTA2NjU+O0lHTk9SRTtJR05PUkUKKzxVMDY2Nj4JPFUwMDM2Pjs8VTA2NjY+O0lHTk9SRTtJR05PUkUKKzxVMDY2Nz4JPFUwMDM3Pjs8VTA2Njc+O0lHTk9SRTtJR05PUkUKKzxVMDY2OD4JPFUwMDM4Pjs8VTA2Njg+O0lHTk9SRTtJR05PUkUKKzxVMDY2OT4JPFUwMDM5Pjs8VTA2Njk+O0lHTk9SRTtJR05PUkUKKworPFVGRUY1PgkiPFUwNjQ0PjxVMDYyMj4iOyI8VTA2NDQ+PFUwNjIyPiI7IjxVRkVGNT48VUZFRjU+IjtJR05PUkUKKzxVRkVGNj4JIjxVMDY0ND48VTA2MjI+IjsiPFUwNjQ0PjxVRkU4Mj4iOyI8VUZFRjY+PFVGRUY2PiI7SUdOT1JFCis8VUZFRjc+CSI8VTA2NDQ+PFUwNjIzPiI7IjxVMDY0ND48VTA2MjM+IjsiPFVGRUY3PjxVRkVGNz4iO0lHTk9SRQorPFVGRUY4PgkiPFUwNjQ0PjxVMDYyMz4iOyI8VTA2NDQ+PFVGRTg0PiI7IjxVRkVGOD48VUZFRjg+IjtJR05PUkUKKzxVRkVGOT4JIjxVMDY0ND48VTA2MjU+IjsiPFUwNjQ0PjxVMDYyNT4iOyI8VUZFRjk+PFVGRUY5PiI7SUdOT1JFCis8VUZFRkE+CSI8VTA2NDQ+PFUwNjI1PiI7IjxVMDY0ND48VUZFODg+IjsiPFVGRUZBPjxVRkVGQT4iO0lHTk9SRQorPFVGRUZCPgkiPFUwNjQ0PjxVMDYyNz4iOyI8VTA2NDQ+PFVGRThEPiI7IjxVRkVGQj48VUZFRkI+IjtJR05PUkUKKzxVRkVGQz4JIjxVMDY0ND48VTA2Mjc+IjsiPFUwNjQ0PjxVRkU4RT4iOyI8VUZFRkM+PFVGRUZDPiI7SUdOT1JFCisKKyUga2F0YWthbmEvaGlyYWdhbmEgc29ydGluZworJSBiYXNlIGlzIGthdGFrYW5hLCBhcyB0aGlzIGlzIHByZXNlbnQgaW4gbW9zdCBjaGFyc2V0cworJSBub3JtYWwgYmVmb3JlIHZvaWNlZCBiZWZvcmUgc2VtaS12b2ljZWQKKyUgc21hbGwgdm9jYWxzIGJlZm9yZSBub3JtYWwgdm9jYWxzCislIGthdGFrYW5hIGJlZm9yZSBoaXJhZ2FuYQorCis8VTMwQTE+CTxVMzBBMT47PFUzMEExPjtJR05PUkU7SUdOT1JFCis8VTMwNDE+CTxVMzBBMT47PFUzMDQxPjtJR05PUkU7SUdOT1JFCis8VTMwQTI+CTxVMzBBMT47PFUzMEEyPjtJR05PUkU7SUdOT1JFCis8VTMwNDI+CTxVMzBBMT47PFUzMDQyPjtJR05PUkU7SUdOT1JFCis8VTMwQTM+CTxVMzBBMz47PFUzMEEzPjtJR05PUkU7SUdOT1JFCis8VTMwNDM+CTxVMzBBMz47PFUzMDQzPjtJR05PUkU7SUdOT1JFCis8VTMwQTQ+CTxVMzBBMz47PFUzMEE0PjtJR05PUkU7SUdOT1JFCis8VTMwNDQ+CTxVMzBBMz47PFUzMDQ0PjtJR05PUkU7SUdOT1JFCis8VTMwQTU+CTxVMzBBNT47PFUzMEE1PjtJR05PUkU7SUdOT1JFCis8VTMwNDU+CTxVMzBBNT47PFUzMDQ1PjtJR05PUkU7SUdOT1JFCis8VTMwQTY+CTxVMzBBNT47PFUzMEE2PjtJR05PUkU7SUdOT1JFCis8VTMwNDY+CTxVMzBBNT47PFUzMDQ2PjtJR05PUkU7SUdOT1JFCis8VTMwRjQ+CTxVMzBBNT47PFUzMEY0PjtJR05PUkU7SUdOT1JFCis8VTMwQTc+CTxVMzBBNz47PFUzMEE3PjtJR05PUkU7SUdOT1JFCis8VTMwNDc+CTxVMzBBNz47PFUzMDQ3PjtJR05PUkU7SUdOT1JFCis8VTMwQTg+CTxVMzBBNz47PFUzMEE4PjtJR05PUkU7SUdOT1JFCis8VTMwNDg+CTxVMzBBNz47PFUzMDQ4PjtJR05PUkU7SUdOT1JFCis8VTMwQTk+CTxVMzBBOT47PFUzMEE5PjtJR05PUkU7SUdOT1JFCis8VTMwNDk+CTxVMzBBOT47PFUzMDQ5PjtJR05PUkU7SUdOT1JFCis8VTMwQUE+CTxVMzBBOT47PFUzMEFBPjtJR05PUkU7SUdOT1JFCis8VTMwNEE+CTxVMzBBOT47PFUzMDRBPjtJR05PUkU7SUdOT1JFCis8VTMwRjU+CTxVMzBGNT47PFUzMEY1PjtJR05PUkU7SUdOT1JFCis8VTMwQUI+CTxVMzBGNT47PFUzMEFCPjtJR05PUkU7SUdOT1JFCis8VTMwNEI+CTxVMzBGNT47PFUzMDRCPjtJR05PUkU7SUdOT1JFCis8VTMwQUM+CTxVMzBGNT47PFUzMEFDPjtJR05PUkU7SUdOT1JFCis8VTMwNEM+CTxVMzBGNT47PFUzMDRDPjtJR05PUkU7SUdOT1JFCis8VTMwQUQ+CTxVMzBBRD47PFUzMEFEPjtJR05PUkU7SUdOT1JFCis8VTMwNEQ+CTxVMzBBRD47PFUzMDREPjtJR05PUkU7SUdOT1JFCis8VTMwQUU+CTxVMzBBRD47PFUzMEFFPjtJR05PUkU7SUdOT1JFCis8VTMwNEU+CTxVMzBBRD47PFUzMDRFPjtJR05PUkU7SUdOT1JFCis8VTMwQUY+CTxVMzBBRj47PFUzMEFGPjtJR05PUkU7SUdOT1JFCis8VTMwNEY+CTxVMzBBRj47PFUzMDRGPjtJR05PUkU7SUdOT1JFCis8VTMwQjA+CTxVMzBBRj47PFUzMEIwPjtJR05PUkU7SUdOT1JFCis8VTMwNTA+CTxVMzBBRj47PFUzMDUwPjtJR05PUkU7SUdOT1JFCis8VTMwRjY+CTxVMzBGNj47PFUzMEY2PjtJR05PUkU7SUdOT1JFCis8VTMwQjE+CTxVMzBGNj47PFUzMEIxPjtJR05PUkU7SUdOT1JFCis8VTMwNTE+CTxVMzBGNj47PFUzMDUxPjtJR05PUkU7SUdOT1JFCis8VTMwQjI+CTxVMzBGNj47PFUzMEIyPjtJR05PUkU7SUdOT1JFCis8VTMwNTI+CTxVMzBGNj47PFUzMDUyPjtJR05PUkU7SUdOT1JFCis8VTMwQjM+CTxVMzBCMz47PFUzMEIzPjtJR05PUkU7SUdOT1JFCis8VTMwNTM+CTxVMzBCMz47PFUzMDUzPjtJR05PUkU7SUdOT1JFCis8VTMwQjQ+CTxVMzBCMz47PFUzMEI0PjtJR05PUkU7SUdOT1JFCis8VTMwNTQ+CTxVMzBCMz47PFUzMDU0PjtJR05PUkU7SUdOT1JFCis8VTMwQjU+CTxVMzBCNT47PFUzMEI1PjtJR05PUkU7SUdOT1JFCis8VTMwNTU+CTxVMzBCNT47PFUzMDU1PjtJR05PUkU7SUdOT1JFCis8VTMwQjY+CTxVMzBCNT47PFUzMEI2PjtJR05PUkU7SUdOT1JFCis8VTMwNTY+CTxVMzBCNT47PFUzMDU2PjtJR05PUkU7SUdOT1JFCis8VTMwQjc+CTxVMzBCNz47PFUzMEI3PjtJR05PUkU7SUdOT1JFCis8VTMwNTc+CTxVMzBCNz47PFUzMDU3PjtJR05PUkU7SUdOT1JFCis8VTMwQjg+CTxVMzBCNz47PFUzMEI4PjtJR05PUkU7SUdOT1JFCis8VTMwNTg+CTxVMzBCNz47PFUzMDU4PjtJR05PUkU7SUdOT1JFCis8VTMwQjk+CTxVMzBCOT47PFUzMEI5PjtJR05PUkU7SUdOT1JFCis8VTMwNTk+CTxVMzBCOT47PFUzMDU5PjtJR05PUkU7SUdOT1JFCis8VTMwQkE+CTxVMzBCOT47PFUzMEJBPjtJR05PUkU7SUdOT1JFCis8VTMwNUE+CTxVMzBCOT47PFUzMDVBPjtJR05PUkU7SUdOT1JFCis8VTMwQkI+CTxVMzBCQj47PFUzMEJCPjtJR05PUkU7SUdOT1JFCis8VTMwNUI+CTxVMzBCQj47PFUzMDVCPjtJR05PUkU7SUdOT1JFCis8VTMwQkM+CTxVMzBCQj47PFUzMEJDPjtJR05PUkU7SUdOT1JFCis8VTMwNUM+CTxVMzBCQj47PFUzMDVDPjtJR05PUkU7SUdOT1JFCis8VTMwQkQ+CTxVMzBCRD47PFUzMEJEPjtJR05PUkU7SUdOT1JFCis8VTMwNUQ+CTxVMzBCRD47PFUzMDVEPjtJR05PUkU7SUdOT1JFCis8VTMwQkU+CTxVMzBCRD47PFUzMEJFPjtJR05PUkU7SUdOT1JFCis8VTMwNUU+CTxVMzBCRD47PFUzMDVFPjtJR05PUkU7SUdOT1JFCis8VTMwQkY+CTxVMzBCRj47PFUzMEJGPjtJR05PUkU7SUdOT1JFCis8VTMwNUY+CTxVMzBCRj47PFUzMDVGPjtJR05PUkU7SUdOT1JFCis8VTMwQzA+CTxVMzBCRj47PFUzMEMwPjtJR05PUkU7SUdOT1JFCis8VTMwNjA+CTxVMzBCRj47PFUzMDYwPjtJR05PUkU7SUdOT1JFCis8VTMwQzE+CTxVMzBDMT47PFUzMEMxPjtJR05PUkU7SUdOT1JFCis8VTMwNjE+CTxVMzBDMT47PFUzMDYxPjtJR05PUkU7SUdOT1JFCis8VTMwQzI+CTxVMzBDMT47PFUzMEMyPjtJR05PUkU7SUdOT1JFCis8VTMwNjI+CTxVMzBDMT47PFUzMDYyPjtJR05PUkU7SUdOT1JFCis8VTMwQzM+CTxVMzBDMz47PFUzMEMzPjtJR05PUkU7SUdOT1JFCis8VTMwNjM+CTxVMzBDMz47PFUzMDYzPjtJR05PUkU7SUdOT1JFCis8VTMwQzQ+CTxVMzBDMz47PFUzMEM0PjtJR05PUkU7SUdOT1JFCis8VTMwNjQ+CTxVMzBDMz47PFUzMDY0PjtJR05PUkU7SUdOT1JFCis8VTMwQzU+CTxVMzBDMz47PFUzMEM1PjtJR05PUkU7SUdOT1JFCis8VTMwNjU+CTxVMzBDMz47PFUzMDY1PjtJR05PUkU7SUdOT1JFCis8VTMwQzY+CTxVMzBDNj47PFUzMEM2PjtJR05PUkU7SUdOT1JFCis8VTMwNjY+CTxVMzBDNj47PFUzMDY2PjtJR05PUkU7SUdOT1JFCis8VTMwQzc+CTxVMzBDNj47PFUzMEM3PjtJR05PUkU7SUdOT1JFCis8VTMwNjc+CTxVMzBDNj47PFUzMDY3PjtJR05PUkU7SUdOT1JFCis8VTMwQzg+CTxVMzBDOD47PFUzMEM4PjtJR05PUkU7SUdOT1JFCis8VTMwNjg+CTxVMzBDOD47PFUzMDY4PjtJR05PUkU7SUdOT1JFCis8VTMwQzk+CTxVMzBDOD47PFUzMEM5PjtJR05PUkU7SUdOT1JFCis8VTMwNjk+CTxVMzBDOD47PFUzMDY5PjtJR05PUkU7SUdOT1JFCis8VTMwQ0E+CTxVMzBDQT47PFUzMENBPjtJR05PUkU7SUdOT1JFCis8VTMwNkE+CTxVMzBDQT47PFUzMDZBPjtJR05PUkU7SUdOT1JFCis8VTMwQ0I+CTxVMzBDQj47PFUzMENCPjtJR05PUkU7SUdOT1JFCis8VTMwNkI+CTxVMzBDQj47PFUzMDZCPjtJR05PUkU7SUdOT1JFCis8VTMwQ0M+CTxVMzBDQz47PFUzMENDPjtJR05PUkU7SUdOT1JFCis8VTMwNkM+CTxVMzBDQz47PFUzMDZDPjtJR05PUkU7SUdOT1JFCis8VTMwQ0Q+CTxVMzBDRD47PFUzMENEPjtJR05PUkU7SUdOT1JFCis8VTMwNkQ+CTxVMzBDRD47PFUzMDZEPjtJR05PUkU7SUdOT1JFCis8VTMwQ0U+CTxVMzBDRT47PFUzMENFPjtJR05PUkU7SUdOT1JFCis8VTMwNkU+CTxVMzBDRT47PFUzMDZFPjtJR05PUkU7SUdOT1JFCis8VTMwQ0Y+CTxVMzBDRj47PFUzMENGPjtJR05PUkU7SUdOT1JFCis8VTMwNkY+CTxVMzBDRj47PFUzMDZGPjtJR05PUkU7SUdOT1JFCis8VTMwRDA+CTxVMzBDRj47PFUzMEQwPjtJR05PUkU7SUdOT1JFCis8VTMwNzA+CTxVMzBDRj47PFUzMDcwPjtJR05PUkU7SUdOT1JFCis8VTMwRDE+CTxVMzBDRj47PFUzMEQxPjtJR05PUkU7SUdOT1JFCis8VTMwNzE+CTxVMzBDRj47PFUzMDcxPjtJR05PUkU7SUdOT1JFCis8VTMwRDI+CTxVMzBEMj47PFUzMEQyPjtJR05PUkU7SUdOT1JFCis8VTMwNzI+CTxVMzBEMj47PFUzMDcyPjtJR05PUkU7SUdOT1JFCis8VTMwRDM+CTxVMzBEMj47PFUzMEQzPjtJR05PUkU7SUdOT1JFCis8VTMwNzM+CTxVMzBEMj47PFUzMDczPjtJR05PUkU7SUdOT1JFCis8VTMwRDQ+CTxVMzBEMj47PFUzMEQ0PjtJR05PUkU7SUdOT1JFCis8VTMwNzQ+CTxVMzBEMj47PFUzMDc0PjtJR05PUkU7SUdOT1JFCis8VTMwRDU+CTxVMzBENT47PFUzMEQ1PjtJR05PUkU7SUdOT1JFCis8VTMwNzU+CTxVMzBENT47PFUzMDc1PjtJR05PUkU7SUdOT1JFCis8VTMwRDY+CTxVMzBENT47PFUzMEQ2PjtJR05PUkU7SUdOT1JFCis8VTMwNzY+CTxVMzBENT47PFUzMDc2PjtJR05PUkU7SUdOT1JFCis8VTMwRDc+CTxVMzBENT47PFUzMEQ3PjtJR05PUkU7SUdOT1JFCis8VTMwNzc+CTxVMzBENT47PFUzMDc3PjtJR05PUkU7SUdOT1JFCis8VTMwRDg+CTxVMzBEOD47PFUzMEQ4PjtJR05PUkU7SUdOT1JFCis8VTMwNzg+CTxVMzBEOD47PFUzMDc4PjtJR05PUkU7SUdOT1JFCis8VTMwRDk+CTxVMzBEOD47PFUzMEQ5PjtJR05PUkU7SUdOT1JFCis8VTMwNzk+CTxVMzBEOD47PFUzMDc5PjtJR05PUkU7SUdOT1JFCis8VTMwREE+CTxVMzBEOD47PFUzMERBPjtJR05PUkU7SUdOT1JFCis8VTMwN0E+CTxVMzBEOD47PFUzMDdBPjtJR05PUkU7SUdOT1JFCis8VTMwREI+CTxVMzBEQj47PFUzMERCPjtJR05PUkU7SUdOT1JFCis8VTMwN0I+CTxVMzBEQj47PFUzMDdCPjtJR05PUkU7SUdOT1JFCis8VTMwREM+CTxVMzBEQj47PFUzMERDPjtJR05PUkU7SUdOT1JFCis8VTMwN0M+CTxVMzBEQj47PFUzMDdDPjtJR05PUkU7SUdOT1JFCis8VTMwREQ+CTxVMzBEQj47PFUzMEREPjtJR05PUkU7SUdOT1JFCis8VTMwN0Q+CTxVMzBEQj47PFUzMDdEPjtJR05PUkU7SUdOT1JFCis8VTMwREU+CTxVMzBERT47PFUzMERFPjtJR05PUkU7SUdOT1JFCis8VTMwN0U+CTxVMzBERT47PFUzMDdFPjtJR05PUkU7SUdOT1JFCis8VTMwREY+CTxVMzBERj47PFUzMERGPjtJR05PUkU7SUdOT1JFCis8VTMwN0Y+CTxVMzBERj47PFUzMDdGPjtJR05PUkU7SUdOT1JFCis8VTMwRTA+CTxVMzBFMD47PFUzMEUwPjtJR05PUkU7SUdOT1JFCis8VTMwODA+CTxVMzBFMD47PFUzMDgwPjtJR05PUkU7SUdOT1JFCis8VTMwRTE+CTxVMzBFMT47PFUzMEUxPjtJR05PUkU7SUdOT1JFCis8VTMwODE+CTxVMzBFMT47PFUzMDgxPjtJR05PUkU7SUdOT1JFCis8VTMwRTI+CTxVMzBFMj47PFUzMEUyPjtJR05PUkU7SUdOT1JFCis8VTMwODI+CTxVMzBFMj47PFUzMDgyPjtJR05PUkU7SUdOT1JFCis8VTMwRTM+CTxVMzBFMz47PFUzMEUzPjtJR05PUkU7SUdOT1JFCis8VTMwODM+CTxVMzBFMz47PFUzMDgzPjtJR05PUkU7SUdOT1JFCis8VTMwRTQ+CTxVMzBFMz47PFUzMEU0PjtJR05PUkU7SUdOT1JFCis8VTMwODQ+CTxVMzBFMz47PFUzMDg0PjtJR05PUkU7SUdOT1JFCis8VTMwRTU+CTxVMzBFNT47PFUzMEU1PjtJR05PUkU7SUdOT1JFCis8VTMwODU+CTxVMzBFNT47PFUzMDg1PjtJR05PUkU7SUdOT1JFCis8VTMwRTY+CTxVMzBFNT47PFUzMEU2PjtJR05PUkU7SUdOT1JFCis8VTMwODY+CTxVMzBFNT47PFUzMDg2PjtJR05PUkU7SUdOT1JFCis8VTMwRTc+CTxVMzBFNz47PFUzMEU3PjtJR05PUkU7SUdOT1JFCis8VTMwODc+CTxVMzBFNz47PFUzMDg3PjtJR05PUkU7SUdOT1JFCis8VTMwRTg+CTxVMzBFNz47PFUzMEU4PjtJR05PUkU7SUdOT1JFCis8VTMwODg+CTxVMzBFNz47PFUzMDg4PjtJR05PUkU7SUdOT1JFCis8VTMwRTk+CTxVMzBFOT47PFUzMEU5PjtJR05PUkU7SUdOT1JFCis8VTMwODk+CTxVMzBFOT47PFUzMDg5PjtJR05PUkU7SUdOT1JFCis8VTMwRUE+CTxVMzBFQT47PFUzMEVBPjtJR05PUkU7SUdOT1JFCis8VTMwOEE+CTxVMzBFQT47PFUzMDhBPjtJR05PUkU7SUdOT1JFCis8VTMwRUI+CTxVMzBFQj47PFUzMEVCPjtJR05PUkU7SUdOT1JFCis8VTMwOEI+CTxVMzBFQj47PFUzMDhCPjtJR05PUkU7SUdOT1JFCis8VTMwRUM+CTxVMzBFQz47PFUzMEVDPjtJR05PUkU7SUdOT1JFCis8VTMwOEM+CTxVMzBFQz47PFUzMDhDPjtJR05PUkU7SUdOT1JFCis8VTMwRUQ+CTxVMzBFRD47PFUzMEVEPjtJR05PUkU7SUdOT1JFCis8VTMwOEQ+CTxVMzBFRD47PFUzMDhEPjtJR05PUkU7SUdOT1JFCis8VTMwRUU+CTxVMzBFRT47PFUzMEVFPjtJR05PUkU7SUdOT1JFCis8VTMwOEU+CTxVMzBFRT47PFUzMDhFPjtJR05PUkU7SUdOT1JFCis8VTMwRUY+CTxVMzBFRT47PFUzMEVGPjtJR05PUkU7SUdOT1JFCis8VTMwOEY+CTxVMzBFRT47PFUzMDhGPjtJR05PUkU7SUdOT1JFCis8VTMwRjA+CTxVMzBGMD47PFUzMEYwPjtJR05PUkU7SUdOT1JFCis8VTMwOTA+CTxVMzBGMD47PFUzMDkwPjtJR05PUkU7SUdOT1JFCis8VTMwRjE+CTxVMzBGMT47PFUzMEYxPjtJR05PUkU7SUdOT1JFCis8VTMwOTE+CTxVMzBGMT47PFUzMDkxPjtJR05PUkU7SUdOT1JFCis8VTMwRjI+CTxVMzBGMj47PFUzMEYyPjtJR05PUkU7SUdOT1JFCis8VTMwOTI+CTxVMzBGMj47PFUzMDkyPjtJR05PUkU7SUdOT1JFCis8VTMwRjM+CTxVMzBGMz47PFUzMEYzPjtJR05PUkU7SUdOT1JFCis8VTMwOTM+CTxVMzBGMz47PFUzMDkzPjtJR05PUkU7SUdOT1JFCisKK29yZGVyX2VuZAorCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAiaTE4biIKKwordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNTk+PFUwMDc5PjxVMDA0QT48VTAwNkE+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNEU+PFUwMDZFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgICAgICAiPFUwMDQ1PjxVMDA1NT48VTAwNTI+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICAgIjxVMjBBQz4iCittb25fZGVjaW1hbF9wb2ludCAgICAgICAgICI8VTAwMkM+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgICAiPFUwMDIwPiIKK21vbl9ncm91cGluZyAgICAgICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAgICAgMAorcF9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDAKK25fc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAgICAgICI8VTAwMkM+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAgICAiPFUwMDIwPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgICAgMDswCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICI8VTAwNkU+PFUwMDY1PjxVMDA2ND4iOyI8VTAwNzA+PFUwMDZGPjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA3ND48VTAwNkY+PFUwMDcyPiI7IjxVMDA3Mz48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMTBEPjxVMDA2NT48VTAwNzQ+IjsiPFUwMDcwPjxVMDA2NT48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDZGPjxVMDA2Mj4iCitkYXkgICAgICI8VTAwNkU+PFUwMDY1PjxVMDA2ND48VTAwNjU+PFUwMDZDPjxVMDA2QT48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNzA+PFUwMDZGPjxVMDA2RT48VTAwNjU+PFUwMDY0PjxVMDA2NT48VTAwNkM+PFUwMDZBPjxVMDA2NT48VTAwNkI+IjsvCisgICAgICAgICI8VTAwNzQ+PFUwMDZGPjxVMDA3Mj48VTAwNjU+PFUwMDZCPiI7LworICAgICAgICAiPFUwMDczPjxVMDA3Mj48VTAwNjU+PFUwMDY0PjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDEwRD48VTAwNjU+PFUwMDc0PjxVMDA3Mj48VTAwNzQ+PFUwMDY1PjxVMDA2Qj4iOy8KKyAgICAgICAgIjxVMDA3MD48VTAwNjU+PFUwMDc0PjxVMDA2NT48VTAwNkI+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDZGPjxVMDA2Mj48VTAwNkY+PFUwMDc0PjxVMDA2MT4iCithYm1vbiAgICI8VTAwNkE+PFUwMDYxPjxVMDA2RT4iOyI8VTAwNjY+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA2MT48VTAwNzA+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNkE+IjsiPFUwMDZBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkE+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNjE+PFUwMDc2PjxVMDA2Nz4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA2Rj48VTAwNkI+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDY0PjxVMDA2NT48VTAwNjM+IgorbW9uICAgICAiPFUwMDZBPjxVMDA2MT48VTAwNkU+PFUwMDc1PjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNjY+PFUwMDY1PjxVMDA2Mj48VTAwNzI+PFUwMDc1PjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNjU+PFUwMDYzPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA3MD48VTAwNzI+PFUwMDY5PjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDZBPiI7LworICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkU+PFUwMDY5PjxVMDA2QT4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPjxVMDA2OT48VTAwNkE+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDc2PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZGPjxVMDA2Qj48VTAwNzQ+PFUwMDZGPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwNjU+PFUwMDYzPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjA+PFUwMDI1PjxVMDA2RD48VTAwMkU+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgordF9mbXQgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICIiOyIiCit0X2ZtdF9hbXBtICIiCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorJSBGSVhNRQoraGVpZ2h0ICAgMjk3CislIEZJWE1FCit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDMzPjxVMDAzOD48VTAwMzY+IgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorJSBGSVhNRQorbWVhc3VyZW1lbnQgICAgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAiPFUwMDUzPjxVMDA0OT4iCitjb3VudHJ5X2FiMyAiPFUwMDUzPjxVMDA1Nj48VTAwNEU+IgorY291bnRyeV9udW0gNzA1CitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc29fREogYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9zb19ESgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmQ1Y2IyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc29fREoKQEAgLTAsMCArMSwyMjYgQEAKK2NvbW1lbnRfY2hhciAgICAlCitlc2NhcGVfY2hhciAgICAgLworCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislIFNvbWFsaSBsYW5ndWFnZSBsb2NhbGUgZm9yIERqaWJvdXRpLgorJQorJSBDaGFyc2V0OiBJU08tODg1OS0xCislCislIFNvbWFsaSB0ZXJtcyBwcm92aWRlZCBieSBNb2hhbWVkIERpcml5ZSBBYmR1bGxhaGkgPGRpcml5ZWFtQG1hZ2VsbGFuLnVtb250cmVhbC5jYT4KKyUgRGVwYXJ0bWVudCBvZiBMaW5ndWlzdGljcyBhbmQgVHJhbnNsYXRpb24sIFVuaXZlcnNpdOkgZGUgTW9udHLpYWwsIE1vbnRyZWFsLgorJSBQcmVwYXJlZCBhbmQgY29udHJpYnV0ZWQgdG8gZ2xpYmMgYnkgRGFuaWVsIFlhY29iIDxsb2NhbGVzQGdlZXoub3JnPi4KKyUKKyUgVGhpcyBsb2NhbGUgZGF0YSBoYXMgYmVlbiBkZXZlbG9wZWQgdW5kZXIgdGhlIFllaGEgUHJvamVjdDoKKyUgICAgICBodHRwOi8veWVoYS5zb3VyY2Vmb3JnZS5uZXQvCislCislIGJ1aWxkIHdpdGg6IGxvY2FsZWRlZiAtZiBJU08tODg1OS0xIC1pIHNvX0RKIHNvX0RKCislCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCisKK0xDX0lERU5USUZJQ0FUSU9OCislCit0aXRsZSAgICAgICJTb21hbGkgbGFuZ3VhZ2UgbG9jYWxlIGZvciBEamlib3V0aS4iCitzb3VyY2UgICAgICJHZSdleiBGcm9udGllciBGb3VuZGF0aW9uIgorYWRkcmVzcyAgICAiNzgwMiBTb2xvbW9uIFNlYWwgRHIuLCBTcHJpbmdmaWVsZCwgVkEgMjIxNTIsIFVTQSIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImxvY2FsZXNAZ2Vlei5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJzbyIKK3RlcnJpdG9yeSAgIkRKIgorcmV2aXNpb24gICAiMC4yMCIKK2RhdGUgICAgICAgIjIwMDMtMDctMDUiCislCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NRUFTVVJFTUVOVAorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgInBvc2l4OjE5OTMiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX1RFTEVQSE9ORQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19USU1FCislCitFTkQgTENfSURFTlRJRklDQVRJT04KKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSAgTGF0aW4gQ2hhcmFjdGVyIFNldCBTcGVjaWZjIERhdGE6CislCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCitMQ19DT0xMQVRFCitjb3B5ICJzb19TTyIKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJzb19TTyIKK0VORCBMQ19DVFlQRQorCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislICBEamlib3V0aSBTcGVjaWZjIGFuZCBTaGFyZWQgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJhYV9ESiIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19NT05FVEFSWQorY29weSAiYWFfREoiCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworY29weSAiYWFfREoiCitFTkQgTENfTlVNRVJJQworCitMQ19QQVBFUgorY29weSAiYWFfREoiCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCitjb3B5ICJhYV9ESiIKK0VORCBMQ19URUxFUEhPTkUKKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSAgU29tYWxpIFNwZWNpZmljIERhdGE6CislCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCitMQ19OQU1FCitjb3B5ICJzb19TTyIKK0VORCBMQ19OQU1FCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIFNvbWFsaS9ESiBTcGVjaWZpYyBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfQUREUkVTUworJQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19BRERSRVNTIGNhdGVnb3J5LgorJQorcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3Mj4iCitjb3VudHJ5X25hbWUgICI8VTAwNEE+PFUwMDYxPjxVMDA2Mj48VTAwNzU+PFUwMDc1PjxVMDA3ND48VTAwNjk+IgorY291bnRyeV9wb3N0ICAiPFUwMDQ0PjxVMDA0QT48VTAwNDk+IgorY291bnRyeV9hYjIgICAiPFUwMDQ0PjxVMDA0QT4iCitjb3VudHJ5X2FiMyAgICI8VTAwNDQ+PFUwMDRBPjxVMDA0OT4iCitjb3VudHJ5X251bSAgIDI2MgorJSBjb3VudHJ5X2NhciAgIHVua25vd24KKyUgY291bnRyeV9pc2JuICB1bmtub3duLCBOZWVkIElTTyAyMTA4CitsYW5nX25hbWUgICAgICI8VTAwNTM+PFUwMDZGPjxVMDA2Rj48VTAwNkQ+PFUwMDYxPjxVMDA2MT48VTAwNkM+PFUwMDY5PiIKK2xhbmdfYWIgICAgICAgIjxVMDA3Mz48VTAwNkY+IgorbGFuZ190ZXJtICAgICAiPFUwMDczPjxVMDA2Rj48VTAwNkQ+IgorbGFuZ19saWIgICAgICAiPFUwMDczPjxVMDA2Rj48VTAwNkQ+IgorJQorRU5EIExDX0FERFJFU1MKKworCitMQ19NRVNTQUdFUworJQoreWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNkY+PFUwMDRGPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKKyUKK0VORCBMQ19NRVNTQUdFUworCisKK0xDX1RJTUUKKyUKKyUgQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyAoJWEpCislCithYmRheSAgICAiPFUwMDYxPjxVMDA3OD48VTAwNjE+IjsvCisgICAgICAgICAiPFUwMDY5PjxVMDA3Mz48VTAwNkU+IjsvCisgICAgICAgICAiPFUwMDczPjxVMDA2MT48VTAwNkM+IjsvCisgICAgICAgICAiPFUwMDYxPjxVMDA3Mj48VTAwNjI+IjsvCisgICAgICAgICAiPFUwMDZCPjxVMDA2OD48VTAwNjE+IjsvCisgICAgICAgICAiPFUwMDZBPjxVMDA2OT48VTAwNkQ+IjsvCisgICAgICAgICAiPFUwMDczPjxVMDA2MT48VTAwNjI+IgorJQorJSBGdWxsIHdlZWtkYXkgbmFtZXMgKCVBKQorJQorZGF5ICAgICAgIjxVMDA0MT48VTAwNzg+PFUwMDYxPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNDk+PFUwMDczPjxVMDA2RT48VTAwNjk+PFUwMDY5PjxVMDA2RT4iOy8KKyAgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA2Qz48VTAwNjE+PFUwMDYxPjxVMDA3Mz48VTAwNkY+IjsvCisgICAgICAgICAiPFUwMDQxPjxVMDA3Mj48VTAwNjI+PFUwMDYxPjxVMDA2Mz48VTAwNkY+IjsvCisgICAgICAgICAiPFUwMDRCPjxVMDA2OD48VTAwNjE+PFUwMDZEPjxVMDA2OT48VTAwNjk+PFUwMDczPiI7LworICAgICAgICAgIjxVMDA0QT48VTAwNjk+PFUwMDZEPjxVMDA2Mz48VTAwNkY+IjsvCisgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNjI+PFUwMDc0PjxVMDA2OT4iCislCislIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzICglYikKKyUKK2FibW9uICAgICI8VTAwNkI+PFUwMDZGPjxVMDA2Mj4iOy8KKyAgICAgICAgICI8VTAwNkM+PFUwMDYxPjxVMDA2Mj4iOy8KKyAgICAgICAgICI8VTAwNzM+PFUwMDYxPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNjE+PFUwMDY2PjxVMDA3Mj4iOy8KKyAgICAgICAgICI8VTAwNzM+PFUwMDY4PjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNkM+PFUwMDY5PjxVMDA3OD4iOy8KKyAgICAgICAgICI8VTAwNzQ+PFUwMDZGPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNzM+PFUwMDY5PjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNzM+PFUwMDYxPjxVMDA2Nz4iOy8KKyAgICAgICAgICI8VTAwNzQ+PFUwMDZGPjxVMDA2Mj4iOy8KKyAgICAgICAgICI8VTAwNkI+PFUwMDY5PjxVMDA3ND4iOy8KKyAgICAgICAgICI8VTAwNkM+PFUwMDY5PjxVMDA3ND4iCislCislIEZ1bGwgbW9udGggbmFtZXMgKCVCKQorJQorbW9uICAgICAgIjxVMDA0Mj48VTAwNjk+PFUwMDczPjxVMDA2OD48VTAwNjE+IDxVMDA0Qj48VTAwNkY+PFUwMDZGPjxVMDA2Mj48VTAwNjE+PFUwMDYxPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNDI+PFUwMDY5PjxVMDA3Mz48VTAwNjg+PFUwMDYxPiA8VTAwNEM+PFUwMDYxPjxVMDA2Mj48VTAwNjE+PFUwMDYxPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNDI+PFUwMDY5PjxVMDA3Mz48VTAwNjg+PFUwMDYxPiA8VTAwNTM+PFUwMDYxPjxVMDA2ND48VTAwNjQ+PFUwMDY1PjxVMDA3OD48VTAwNjE+PFUwMDYxPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNDI+PFUwMDY5PjxVMDA3Mz48VTAwNjg+PFUwMDYxPiA8VTAwNDE+PFUwMDY2PjxVMDA3Mj48VTAwNjE+PFUwMDYxPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNDI+PFUwMDY5PjxVMDA3Mz48VTAwNjg+PFUwMDYxPiA8VTAwNTM+PFUwMDY4PjxVMDA2MT48VTAwNkU+PFUwMDYxPjxVMDA2MT48VTAwNjQ+IjsvCisgICAgICAgICAiPFUwMDQyPjxVMDA2OT48VTAwNzM+PFUwMDY4PjxVMDA2MT4gPFUwMDRDPjxVMDA2OT48VTAwNzg+PFUwMDYxPjxVMDA2MT48VTAwNjQ+IjsvCisgICAgICAgICAiPFUwMDQyPjxVMDA2OT48VTAwNzM+PFUwMDY4PjxVMDA2MT4gPFUwMDU0PjxVMDA2Rj48VTAwNjQ+PFUwMDZGPjxVMDA2Mj48VTAwNjE+PFUwMDYxPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNDI+PFUwMDY5PjxVMDA3Mz48VTAwNjg+PFUwMDYxPiA8VTAwNTM+PFUwMDY5PjxVMDA2ND48VTAwNjU+PFUwMDY1PjxVMDA2ND48VTAwNjE+PFUwMDYxPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNDI+PFUwMDY5PjxVMDA3Mz48VTAwNjg+PFUwMDYxPiA8VTAwNTM+PFUwMDYxPjxVMDA2Nz48VTAwNjE+PFUwMDYxPjxVMDA2Qz48VTAwNjE+PFUwMDYxPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNDI+PFUwMDY5PjxVMDA3Mz48VTAwNjg+PFUwMDYxPiA8VTAwNTQ+PFUwMDZGPjxVMDA2Mj48VTAwNkU+PFUwMDYxPjxVMDA2MT48VTAwNjQ+IjsvCisgICAgICAgICAiPFUwMDQyPjxVMDA2OT48VTAwNzM+PFUwMDY4PjxVMDA2MT4gPFUwMDRCPjxVMDA2Rj48VTAwNzc+IDxVMDA2OT48VTAwNzk+PFUwMDZGPiA8VTAwNTQ+PFUwMDZGPjxVMDA2Mj48VTAwNkU+PFUwMDYxPjxVMDA2MT48VTAwNjQ+IjsvCisgICAgICAgICAiPFUwMDQyPjxVMDA2OT48VTAwNzM+PFUwMDY4PjxVMDA2MT4gPFUwMDRDPjxVMDA2MT48VTAwNjI+PFUwMDYxPiA8VTAwNjk+PFUwMDc5PjxVMDA2Rj4gPFUwMDU0PjxVMDA2Rj48VTAwNjI+PFUwMDZFPjxVMDA2MT48VTAwNjE+PFUwMDY0PiIKKyUKKyUgRXF1aXZhbGVudCBvZiBBTSBQTQorJQorYW1fcG0gICAgIjxVMDA3Mz48VTAwNzU+PFUwMDYyPjxVMDA2MT48VTAwNzg+PFUwMDZFPjxVMDA2OT48VTAwNkQ+PFUwMDZGPiI7LworICAgICAgICAgIjxVMDA2Nz48VTAwNjE+PFUwMDZDPjxVMDA2MT48VTAwNjI+PFUwMDZFPjxVMDA2OT48VTAwNkQ+PFUwMDZGPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbiAoJXgpCislCSIlZC4lbS4lWSIKKyUKK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJFPjxVMDAyNT48VTAwNkQ+PFUwMDJFPjxVMDAyNT48VTAwNTk+IgorJQorJSBBcHByb3ByaWF0ZSB0aW1lIHJlcHJlc2VudGF0aW9uICglWCkKKyUJIiVIOiVNOiVTIgorJQordF9mbXQgIjxVMDAyNT48VTAwNkM+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+IgorJQorJSBBcHByb3ByaWF0ZSBBTS9QTSB0aW1lIHJlcHJlc2VudGF0aW9uICglcikKKyUJIiVYICVwIgorJQordF9mbXRfYW1wbSAiPFUwMDI1PjxVMDA1OD48VTAwMjA+PFUwMDI1PjxVMDA3MD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24gKCVjKQorJQkiJWEgJWQgJWIgJVkgJXIgJVoKKyUKK2RfdF9mbXQgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+LworPFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uIChkYXRlKDEpKQorJQkiJWEgJWIgJWUgJXIgJVogJVkiCislCitkYXRlX2ZtdCAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjA+PFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCislCitFTkQgTENfVElNRQorJQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc29fRVQgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9zb19FVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTYzMzZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc29fRVQKQEAgLTAsMCArMSwyMjMgQEAKK2NvbW1lbnRfY2hhciAgICAlCitlc2NhcGVfY2hhciAgICAgLworCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislIFNvbWFsaSBsYW5ndWFnZSBsb2NhbGUgZm9yIEV0aGlvcGlhLgorJQorJSBDaGFyc2V0OiBVVEYtOAorJQorJSBTb21hbGkgdGVybXMgcHJvdmlkZWQgYnkgTW9oYW1lZCBEaXJpeWUgQWJkdWxsYWhpIDxkaXJpeWVhbUBtYWdlbGxhbi51bW9udHJlYWwuY2E+CislIERlcGFydG1lbnQgb2YgTGluZ3Vpc3RpY3MgYW5kIFRyYW5zbGF0aW9uLCBVbml2ZXJzaXTpIGRlIE1vbnRy6WFsLCBNb250cmVhbC4KKyUgUHJlcGFyZWQgYW5kIGNvbnRyaWJ1dGVkIHRvIGdsaWJjIGJ5IERhbmllbCBZYWNvYiA8bG9jYWxlc0BnZWV6Lm9yZz4uCislCislIFRoaXMgbG9jYWxlIGRhdGEgaGFzIGJlZW4gZGV2ZWxvcGVkIHVuZGVyIHRoZSBZZWhhIFByb2plY3Q6CislICAgICAgaHR0cDovL3llaGEuc291cmNlZm9yZ2UubmV0LworJQorJSBidWlsZCB3aXRoOiBsb2NhbGVkZWYgLWYgVVRGLTggLWkgc29fRVQgc29fRVQKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKKworTENfSURFTlRJRklDQVRJT04KKyUKK3RpdGxlICAgICAgIlNvbWFsaSBsYW5ndWFnZSBsb2NhbGUgZm9yIEV0aGlvcGlhIgorc291cmNlICAgICAiR2UnZXogRnJvbnRpZXIgRm91bmRhdGlvbiIKK2FkZHJlc3MgICAgIjc4MDIgU29sb21vbiBTZWFsIERyLiwgU3ByaW5nZmllbGQsIFZBIDIyMTUyLCBVU0EiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJsb2NhbGVzQGdlZXoub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAic28iCit0ZXJyaXRvcnkgICJFVCIKK3JldmlzaW9uICAgIjAuMjAiCitkYXRlICAgICAgICIyMDAzLTA3LTA1IgorJQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTUVBU1VSRU1FTlQKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJwb3NpeDoxOTkzIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19URUxFUEhPTkUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfVElNRQorJQorRU5EIExDX0lERU5USUZJQ0FUSU9OCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIEV0aGlvcGljIFNwZWNpZmMgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX0NPTExBVEUKK2NvcHkgImFtX0VUIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgInRpX0VUIgorRU5EIExDX0NUWVBFCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIEV0aGlvcGlhIFNwZWNpZmMgYW5kIFNoYXJlZCBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgInRpX0VUIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX01PTkVUQVJZCitjb3B5ICJ0aV9FVCIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJ0aV9FVCIKK0VORCBMQ19OVU1FUklDCisKK0xDX1BBUEVSCitjb3B5ICJ0aV9FVCIKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK2NvcHkgInRpX0VUIgorRU5EIExDX1RFTEVQSE9ORQorCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislICBTb21hbGkgU3BlY2lmaWMgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX05BTUUKK2NvcHkgInNvX1NPIgorRU5EIExDX05BTUUKKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSAgU29tYWxpL0VUIFNwZWNpZmljIERhdGE6CislCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCitMQ19BRERSRVNTCislCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX0FERFJFU1MgY2F0ZWdvcnkuCislCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDdBPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDczPi8KKzxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA2NT48VTAwMjU+PFUwMDcyPiIKK2NvdW50cnlfbmFtZSAgIjxVMDA0OT48VTAwNzQ+PFUwMDZGPjxVMDA2Rj48VTAwNjI+PFUwMDY5PjxVMDA3OT48VTAwNjE+IiAgCitjb3VudHJ5X3Bvc3QgICI8VTAwNDU+PFUwMDU0PjxVMDA0OD4iCitjb3VudHJ5X2FiMiAgICI8VTAwNDU+PFUwMDU0PiIKK2NvdW50cnlfYWIzICAgIjxVMDA0NT48VTAwNTQ+PFUwMDQ4PiIKK2NvdW50cnlfbnVtICAgMjMxICAgJSAyMTAgZm91bmQgaW4gYXQgbGVhc3Qgb25lIElTTyAzMTY2IGRvYworJSBjb3VudHJ5X2NhciAgIHVua25vd24KKyUgY291bnRyeV9pc2JuICB1bmtub3duLCBOZWVkIElTTyAyMTA4CitsYW5nX25hbWUgICAgICI8VTAwNTM+PFUwMDZGPjxVMDA2Rj48VTAwNkQ+PFUwMDYxPjxVMDA2MT48VTAwNkM+PFUwMDY5PiIKK2xhbmdfYWIgICAgICAgIjxVMDA3Mz48VTAwNkY+IgorbGFuZ190ZXJtICAgICAiPFUwMDczPjxVMDA2Rj48VTAwNkQ+IgorbGFuZ19saWIgICAgICAiPFUwMDczPjxVMDA2Rj48VTAwNkQ+IgorJQorRU5EIExDX0FERFJFU1MKKworCitMQ19NRVNTQUdFUworY29weSAidGlfRVQiCitFTkQgTENfTUVTU0FHRVMKKworCitMQ19USU1FCislCislIEFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZXMgKCVhKQorJQorYWJkYXkgICAgIjxVMDA0MT48VTAwNzg+PFUwMDYxPiI7LworICAgICAgICAgIjxVMDA0OT48VTAwNzM+PFUwMDZFPiI7LworICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDZDPiI7LworICAgICAgICAgIjxVMDA0MT48VTAwNzI+PFUwMDYyPiI7LworICAgICAgICAgIjxVMDA0Qj48VTAwNjg+PFUwMDYxPiI7LworICAgICAgICAgIjxVMDA0QT48VTAwNjk+PFUwMDZEPiI7LworICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDYyPiIKKyUKKyUgRnVsbCB3ZWVrZGF5IG5hbWVzICglQSkKKyUKK2RheSAgICAgICI8VTAwNDE+PFUwMDc4PjxVMDA2MT48VTAwNjQ+IjsvCisgICAgICAgICAiPFUwMDQ5PjxVMDA3Mz48VTAwNkU+PFUwMDY5PjxVMDA2OT48VTAwNkU+IjsvCisgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNkM+PFUwMDYxPjxVMDA2MT48VTAwNzM+PFUwMDZGPiI7LworICAgICAgICAgIjxVMDA0MT48VTAwNzI+PFUwMDYyPjxVMDA2MT48VTAwNjM+PFUwMDZGPiI7LworICAgICAgICAgIjxVMDA0Qj48VTAwNjg+PFUwMDYxPjxVMDA2RD48VTAwNjk+PFUwMDY5PjxVMDA3Mz4iOy8KKyAgICAgICAgICI8VTAwNEE+PFUwMDY5PjxVMDA2RD48VTAwNjM+PFUwMDZGPiI7LworICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDYyPjxVMDA3ND48VTAwNjk+IgorJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCislCithYm1vbiAgICAiPFUwMDRCPjxVMDA2Rj48VTAwNjI+IjsvCisgICAgICAgICAiPFUwMDRDPjxVMDA2MT48VTAwNjI+IjsvCisgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNjQ+IjsvCisgICAgICAgICAiPFUwMDQxPjxVMDA2Nj48VTAwNzI+IjsvCisgICAgICAgICAiPFUwMDUzPjxVMDA2OD48VTAwNjE+IjsvCisgICAgICAgICAiPFUwMDRDPjxVMDA2OT48VTAwNzg+IjsvCisgICAgICAgICAiPFUwMDU0PjxVMDA2Rj48VTAwNjQ+IjsvCisgICAgICAgICAiPFUwMDUzPjxVMDA2OT48VTAwNjQ+IjsvCisgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICAiPFUwMDU0PjxVMDA2Rj48VTAwNjI+IjsvCisgICAgICAgICAiPFUwMDRCPjxVMDA0OT48VTAwNTQ+IjsvCisgICAgICAgICAiPFUwMDRDPjxVMDA0OT48VTAwNTQ+IgorJQorJSBGdWxsIG1vbnRoIG5hbWVzICglQikKKyUKK21vbiAgICAgICI8VTAwNDI+PFUwMDY5PjxVMDA3Mz48VTAwNjg+PFUwMDYxPiA8VTAwNEI+PFUwMDZGPjxVMDA2Rj48VTAwNjI+PFUwMDYxPjxVMDA2MT48VTAwNjQ+IjsvCisgICAgICAgICAiPFUwMDQyPjxVMDA2OT48VTAwNzM+PFUwMDY4PjxVMDA2MT4gPFUwMDRDPjxVMDA2MT48VTAwNjI+PFUwMDYxPjxVMDA2MT48VTAwNjQ+IjsvCisgICAgICAgICAiPFUwMDQyPjxVMDA2OT48VTAwNzM+PFUwMDY4PjxVMDA2MT4gPFUwMDUzPjxVMDA2MT48VTAwNjQ+PFUwMDY0PjxVMDA2NT48VTAwNzg+PFUwMDYxPjxVMDA2MT48VTAwNjQ+IjsvCisgICAgICAgICAiPFUwMDQyPjxVMDA2OT48VTAwNzM+PFUwMDY4PjxVMDA2MT4gPFUwMDQxPjxVMDA2Nj48VTAwNzI+PFUwMDYxPjxVMDA2MT48VTAwNjQ+IjsvCisgICAgICAgICAiPFUwMDQyPjxVMDA2OT48VTAwNzM+PFUwMDY4PjxVMDA2MT4gPFUwMDUzPjxVMDA2OD48VTAwNjE+PFUwMDZFPjxVMDA2MT48VTAwNjE+PFUwMDY0PiI7LworICAgICAgICAgIjxVMDA0Mj48VTAwNjk+PFUwMDczPjxVMDA2OD48VTAwNjE+IDxVMDA0Qz48VTAwNjk+PFUwMDc4PjxVMDA2MT48VTAwNjE+PFUwMDY0PiI7LworICAgICAgICAgIjxVMDA0Mj48VTAwNjk+PFUwMDczPjxVMDA2OD48VTAwNjE+IDxVMDA1ND48VTAwNkY+PFUwMDY0PjxVMDA2Rj48VTAwNjI+PFUwMDYxPjxVMDA2MT48VTAwNjQ+IjsvCisgICAgICAgICAiPFUwMDQyPjxVMDA2OT48VTAwNzM+PFUwMDY4PjxVMDA2MT4gPFUwMDUzPjxVMDA2OT48VTAwNjQ+PFUwMDY1PjxVMDA2NT48VTAwNjQ+PFUwMDYxPjxVMDA2MT48VTAwNjQ+IjsvCisgICAgICAgICAiPFUwMDQyPjxVMDA2OT48VTAwNzM+PFUwMDY4PjxVMDA2MT4gPFUwMDUzPjxVMDA2MT48VTAwNjc+PFUwMDYxPjxVMDA2MT48VTAwNkM+PFUwMDYxPjxVMDA2MT48VTAwNjQ+IjsvCisgICAgICAgICAiPFUwMDQyPjxVMDA2OT48VTAwNzM+PFUwMDY4PjxVMDA2MT4gPFUwMDU0PjxVMDA2Rj48VTAwNjI+PFUwMDZFPjxVMDA2MT48VTAwNjE+PFUwMDY0PiI7LworICAgICAgICAgIjxVMDA0Mj48VTAwNjk+PFUwMDczPjxVMDA2OD48VTAwNjE+IDxVMDA0Qj48VTAwNkY+PFUwMDc3PiA8VTAwNjk+PFUwMDc5PjxVMDA2Rj4gPFUwMDU0PjxVMDA2Rj48VTAwNjI+PFUwMDZFPjxVMDA2MT48VTAwNjE+PFUwMDY0PiI7LworICAgICAgICAgIjxVMDA0Mj48VTAwNjk+PFUwMDczPjxVMDA2OD48VTAwNjE+IDxVMDA0Qz48VTAwNjE+PFUwMDYyPjxVMDA2MT4gPFUwMDY5PjxVMDA3OT48VTAwNkY+IDxVMDA1ND48VTAwNkY+PFUwMDYyPjxVMDA2RT48VTAwNjE+PFUwMDYxPjxVMDA2ND4iCislCislIEVxdWl2YWxlbnQgb2YgQU0gUE0KKyUKK2FtX3BtICAgICI8VTAwNzM+PFUwMDc1PjxVMDA2Mj48VTAwNjE+PFUwMDc4PjxVMDA2RT48VTAwNjk+PFUwMDZEPjxVMDA2Rj4iOy8KKyAgICAgICAgICI8VTAwNjc+PFUwMDYxPjxVMDA2Qz48VTAwNjE+PFUwMDYyPjxVMDA2RT48VTAwNjk+PFUwMDZEPjxVMDA2Rj4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKCV4KQorJQkiJWQvJW0vJVkiCislCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDU5PiIKKyUKKyUgQXBwcm9wcmlhdGUgdGltZSByZXByZXNlbnRhdGlvbiAoJVgpCislCSIlbDolTTolUyIKKyUKK3RfZm10ICI8VTAwMjU+PFUwMDZDPjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPiIKKyUKKyUgQXBwcm9wcmlhdGUgQU0vUE0gdGltZSByZXByZXNlbnRhdGlvbiAoJXIpCislCSIlWCAlcCIKKyUKK3RfZm10X2FtcG0gIjxVMDAyNT48VTAwNTg+PFUwMDIwPjxVMDAyNT48VTAwNzA+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uICglYykKKyUJIiVBLCAlQiAlZSwgJVkgJXIgJVoKKyUKK2RfdF9mbXQgICAgIjxVMDAyNT48VTAwNDE+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDQyPjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyQz4vCis8VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKGRhdGUoMSkpCislCSIlQSwgJWIgJWUsICVyICVaICVZIgorJQorZGF0ZV9mbXQgICAgIjxVMDAyNT48VTAwNDE+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDQyPjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyQz4vCis8VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjA+PFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCislCitFTkQgTENfVElNRQorJQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc29fS0UgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9zb19LRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDY3MDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc29fS0UKQEAgLTAsMCArMSwyMjIgQEAKK2NvbW1lbnRfY2hhciAgICAlCitlc2NhcGVfY2hhciAgICAgLworCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislIFNvbWFsaSBsYW5ndWFnZSBsb2NhbGUgZm9yIEtlbnlhLgorJQorJSBDaGFyc2V0OiBJU08tODg1OS0xCislCislIFNvbWFsaSB0ZXJtcyBwcm92aWRlZCBieSBNb2hhbWVkIERpcml5ZSBBYmR1bGxhaGkgPGRpcml5ZWFtQG1hZ2VsbGFuLnVtb250cmVhbC5jYT4KKyUgRGVwYXJ0bWVudCBvZiBMaW5ndWlzdGljcyBhbmQgVHJhbnNsYXRpb24sIFVuaXZlcnNpdOkgZGUgTW9udHLpYWwsIE1vbnRyZWFsLgorJSBQcmVwYXJlZCBhbmQgY29udHJpYnV0ZWQgdG8gZ2xpYmMgYnkgRGFuaWVsIFlhY29iIDxsb2NhbGVzQGdlZXoub3JnPi4KKyUKKyUgVGhpcyBsb2NhbGUgZGF0YSBoYXMgYmVlbiBkZXZlbG9wZWQgdW5kZXIgdGhlIFllaGEgUHJvamVjdDoKKyUgICAgICBodHRwOi8veWVoYS5zb3VyY2Vmb3JnZS5uZXQvCislCislIGJ1aWxkIHdpdGg6IGxvY2FsZWRlZiAtZiBJU08tODg1OS0xIC1pIHNvX0tFIHNvX0tFCislCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCisKK0xDX0lERU5USUZJQ0FUSU9OCislCit0aXRsZSAgICAgICJTb21hbGkgbGFuZ3VhZ2UgbG9jYWxlIGZvciBLZW55YSIKK3NvdXJjZSAgICAgIkdlJ2V6IEZyb250aWVyIEZvdW5kYXRpb24iCithZGRyZXNzICAgICI3ODAyIFNvbG9tb24gU2VhbCBEci4sIFNwcmluZ2ZpZWxkLCBWQSAyMjE1MiwgVVNBIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAibG9jYWxlc0BnZWV6Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgInNvIgordGVycml0b3J5ICAiS0UiCityZXZpc2lvbiAgICIwLjIwIgorZGF0ZSAgICAgICAiMjAwMy0wNy0wNSIKKyUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX01FQVNVUkVNRU5UCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAicG9zaXg6MTk5MyI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfVEVMRVBIT05FCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX1RJTUUKK0VORCBMQ19JREVOVElGSUNBVElPTgorCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislICBMYXRpbiBDaGFyYWN0ZXIgU2V0IFNwZWNpZmMgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX0NPTExBVEUKK2NvcHkgInNvX1NPIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgInNvX1NPIgorRU5EIExDX0NUWVBFCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIEtlbnlhIFNwZWNpZmMgYW5kIFNoYXJlZCBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgIm9tX0VUIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX01PTkVUQVJZCitjb3B5ICJvbV9FVCIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJvbV9FVCIKK0VORCBMQ19OVU1FUklDCisKK0xDX1BBUEVSCitjb3B5ICJvbV9FVCIKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK2NvcHkgIm9tX0VUIgorRU5EIExDX1RFTEVQSE9ORQorCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislICBTb21hbGkgU3BlY2lmaWMgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX05BTUUKK2NvcHkgInNvX1NPIgorRU5EIExDX05BTUUKKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSAgU29tYWxpL0VUIFNwZWNpZmljIERhdGE6CislCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCitMQ19BRERSRVNTCislCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX0FERFJFU1MgY2F0ZWdvcnkuCislCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDdBPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDczPi8KKzxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA2NT48VTAwMjU+PFUwMDcyPiIKK2NvdW50cnlfbmFtZSAgIjxVMDA0Qj48VTAwNjk+PFUwMDY5PjxVMDA2RT48VTAwNjk+PFUwMDc5PjxVMDA2MT4iCitjb3VudHJ5X3Bvc3QgICI8VTAwNEI+PFUwMDQ1PjxVMDA0RT4iCitjb3VudHJ5X2FiMiAgICI8VTAwNEI+PFUwMDQ1PiIKK2NvdW50cnlfYWIzICAgIjxVMDA0Qj48VTAwNDU+PFUwMDRFPiIKK2NvdW50cnlfbnVtICAgNDA0CislIGNvdW50cnlfY2FyICAgdW5rbm93bgorJSBjb3VudHJ5X2lzYm4gIHVua25vd24sIE5lZWQgSVNPIDIxMDgKK2xhbmdfbmFtZSAgICAgIjxVMDA1Mz48VTAwNkY+PFUwMDZGPjxVMDA2RD48VTAwNjE+PFUwMDYxPjxVMDA2Qz48VTAwNjk+IgorbGFuZ19hYiAgICAgICAiPFUwMDczPjxVMDA2Rj4iCitsYW5nX3Rlcm0gICAgICI8VTAwNzM+PFUwMDZGPjxVMDA2RD4iCitsYW5nX2xpYiAgICAgICI8VTAwNzM+PFUwMDZGPjxVMDA2RD4iCislCitFTkQgTENfQUREUkVTUworCisKK0xDX01FU1NBR0VTCitjb3B5ICJzb19TTyIKK0VORCBMQ19NRVNTQUdFUworCisKK0xDX1RJTUUKKyUKKyUgQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyAoJWEpCislCithYmRheSAgICAiPFUwMDQxPjxVMDA3OD48VTAwNjE+IjsvCisgICAgICAgICAiPFUwMDQ5PjxVMDA3Mz48VTAwNkU+IjsvCisgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNkM+IjsvCisgICAgICAgICAiPFUwMDQxPjxVMDA3Mj48VTAwNjI+IjsvCisgICAgICAgICAiPFUwMDRCPjxVMDA2OD48VTAwNjE+IjsvCisgICAgICAgICAiPFUwMDRBPjxVMDA2OT48VTAwNkQ+IjsvCisgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNjI+IgorJQorJSBGdWxsIHdlZWtkYXkgbmFtZXMgKCVBKQorJQorZGF5ICAgICAgIjxVMDA0MT48VTAwNzg+PFUwMDYxPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNDk+PFUwMDczPjxVMDA2RT48VTAwNjk+PFUwMDY5PjxVMDA2RT4iOy8KKyAgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA2Qz48VTAwNjE+PFUwMDYxPjxVMDA3Mz48VTAwNkY+IjsvCisgICAgICAgICAiPFUwMDQxPjxVMDA3Mj48VTAwNjI+PFUwMDYxPjxVMDA2Mz48VTAwNkY+IjsvCisgICAgICAgICAiPFUwMDRCPjxVMDA2OD48VTAwNjE+PFUwMDZEPjxVMDA2OT48VTAwNjk+PFUwMDczPiI7LworICAgICAgICAgIjxVMDA0QT48VTAwNjk+PFUwMDZEPjxVMDA2Mz48VTAwNkY+IjsvCisgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNjI+PFUwMDc0PjxVMDA2OT4iCislCislIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzICglYikKKyUKK2FibW9uICAgICI8VTAwNEI+PFUwMDZGPjxVMDA2Mj4iOy8KKyAgICAgICAgICI8VTAwNEM+PFUwMDYxPjxVMDA2Mj4iOy8KKyAgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNDE+PFUwMDY2PjxVMDA3Mj4iOy8KKyAgICAgICAgICI8VTAwNTM+PFUwMDY4PjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNEM+PFUwMDY5PjxVMDA3OD4iOy8KKyAgICAgICAgICI8VTAwNTQ+PFUwMDZGPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNTM+PFUwMDY5PjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA2Nz4iOy8KKyAgICAgICAgICI8VTAwNTQ+PFUwMDZGPjxVMDA2Mj4iOy8KKyAgICAgICAgICI8VTAwNEI+PFUwMDQ5PjxVMDA1ND4iOy8KKyAgICAgICAgICI8VTAwNEM+PFUwMDQ5PjxVMDA1ND4iCislCislIEZ1bGwgbW9udGggbmFtZXMgKCVCKQorJQorbW9uICAgICAgIjxVMDA0Mj48VTAwNjk+PFUwMDczPjxVMDA2OD48VTAwNjE+IDxVMDA0Qj48VTAwNkY+PFUwMDZGPjxVMDA2Mj48VTAwNjE+PFUwMDYxPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNDI+PFUwMDY5PjxVMDA3Mz48VTAwNjg+PFUwMDYxPiA8VTAwNEM+PFUwMDYxPjxVMDA2Mj48VTAwNjE+PFUwMDYxPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNDI+PFUwMDY5PjxVMDA3Mz48VTAwNjg+PFUwMDYxPiA8VTAwNTM+PFUwMDYxPjxVMDA2ND48VTAwNjQ+PFUwMDY1PjxVMDA3OD48VTAwNjE+PFUwMDYxPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNDI+PFUwMDY5PjxVMDA3Mz48VTAwNjg+PFUwMDYxPiA8VTAwNDE+PFUwMDY2PjxVMDA3Mj48VTAwNjE+PFUwMDYxPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNDI+PFUwMDY5PjxVMDA3Mz48VTAwNjg+PFUwMDYxPiA8VTAwNTM+PFUwMDY4PjxVMDA2MT48VTAwNkU+PFUwMDYxPjxVMDA2MT48VTAwNjQ+IjsvCisgICAgICAgICAiPFUwMDQyPjxVMDA2OT48VTAwNzM+PFUwMDY4PjxVMDA2MT4gPFUwMDRDPjxVMDA2OT48VTAwNzg+PFUwMDYxPjxVMDA2MT48VTAwNjQ+IjsvCisgICAgICAgICAiPFUwMDQyPjxVMDA2OT48VTAwNzM+PFUwMDY4PjxVMDA2MT4gPFUwMDU0PjxVMDA2Rj48VTAwNjQ+PFUwMDZGPjxVMDA2Mj48VTAwNjE+PFUwMDYxPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNDI+PFUwMDY5PjxVMDA3Mz48VTAwNjg+PFUwMDYxPiA8VTAwNTM+PFUwMDY5PjxVMDA2ND48VTAwNjU+PFUwMDY1PjxVMDA2ND48VTAwNjE+PFUwMDYxPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNDI+PFUwMDY5PjxVMDA3Mz48VTAwNjg+PFUwMDYxPiA8VTAwNTM+PFUwMDYxPjxVMDA2Nz48VTAwNjE+PFUwMDYxPjxVMDA2Qz48VTAwNjE+PFUwMDYxPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNDI+PFUwMDY5PjxVMDA3Mz48VTAwNjg+PFUwMDYxPiA8VTAwNTQ+PFUwMDZGPjxVMDA2Mj48VTAwNkU+PFUwMDYxPjxVMDA2MT48VTAwNjQ+IjsvCisgICAgICAgICAiPFUwMDQyPjxVMDA2OT48VTAwNzM+PFUwMDY4PjxVMDA2MT4gPFUwMDRCPjxVMDA2Rj48VTAwNzc+IDxVMDA2OT48VTAwNzk+PFUwMDZGPiA8VTAwNTQ+PFUwMDZGPjxVMDA2Mj48VTAwNkU+PFUwMDYxPjxVMDA2MT48VTAwNjQ+IjsvCisgICAgICAgICAiPFUwMDQyPjxVMDA2OT48VTAwNzM+PFUwMDY4PjxVMDA2MT4gPFUwMDRDPjxVMDA2MT48VTAwNjI+PFUwMDYxPiA8VTAwNjk+PFUwMDc5PjxVMDA2Rj4gPFUwMDU0PjxVMDA2Rj48VTAwNjI+PFUwMDZFPjxVMDA2MT48VTAwNjE+PFUwMDY0PiIKKyUKKyUgRXF1aXZhbGVudCBvZiBBTSBQTQorJQorYW1fcG0gICAgIjxVMDA3Mz48VTAwNzU+PFUwMDYyPjxVMDA2MT48VTAwNzg+PFUwMDZFPjxVMDA2OT48VTAwNkQ+PFUwMDZGPiI7LworICAgICAgICAgIjxVMDA2Nz48VTAwNjE+PFUwMDZDPjxVMDA2MT48VTAwNjI+PFUwMDZFPjxVMDA2OT48VTAwNkQ+PFUwMDZGPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbiAoJXgpCislCSIlZC8lbS8lWSIKKyUKK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNTk+IgorJQorJSBBcHByb3ByaWF0ZSB0aW1lIHJlcHJlc2VudGF0aW9uICglWCkKKyUJIiVsOiVNOiVTIgorJQordF9mbXQgIjxVMDAyNT48VTAwNkM+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+IgorJQorJSBBcHByb3ByaWF0ZSBBTS9QTSB0aW1lIHJlcHJlc2VudGF0aW9uICglcikKKyUJIiVYICVwIgorJQordF9mbXRfYW1wbSAiPFUwMDI1PjxVMDA1OD48VTAwMjA+PFUwMDI1PjxVMDA3MD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24gKCVjKQorJQkiJUEsICVCICVlLCAlWSAlciAlWgorJQorZF90X2ZtdCAgICAiPFUwMDI1PjxVMDA0MT48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNDI+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDJDPi8KKzxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbiAoZGF0ZSgxKSkKKyUJIiVBLCAlYiAlZSwgJXIgJVogJVkiCislCitkYXRlX2ZtdCAgICAiPFUwMDI1PjxVMDA0MT48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNDI+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDJDPi8KKzxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyMD48VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKKyUKK0VORCBMQ19USU1FCislCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9zb19TTyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3NvX1NPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYWFhM2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9zb19TTwpAQCAtMCwwICsxLDI4MiBAQAorY29tbWVudF9jaGFyICAgICUKK2VzY2FwZV9jaGFyICAgICAvCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgU29tYWxpIGxhbmd1YWdlIGxvY2FsZSBmb3IgU29tYWxpYS4KKyUKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJQorJSBTb21hbGkgdGVybXMgcHJvdmlkZWQgYnkgTW9oYW1lZCBEaXJpeWUgQWJkdWxsYWhpIDxkaXJpeWVhbUBtYWdlbGxhbi51bW9udHJlYWwuY2E+CislIERlcGFydG1lbnQgb2YgTGluZ3Vpc3RpY3MgYW5kIFRyYW5zbGF0aW9uLCBVbml2ZXJzaXTpIGRlIE1vbnRy6WFsLCBNb250cmVhbC4KKyUgUHJlcGFyZWQgYW5kIGNvbnRyaWJ1dGVkIHRvIGdsaWJjIGJ5IERhbmllbCBZYWNvYiA8bG9jYWxlc0BnZWV6Lm9yZz4uCislCislIFRoaXMgbG9jYWxlIGRhdGEgaGFzIGJlZW4gZGV2ZWxvcGVkIHVuZGVyIHRoZSBZZWhhIFByb2plY3Q6CislICAgICAgaHR0cDovL3llaGEuc291cmNlZm9yZ2UubmV0LworJQorJSBidWlsZCB3aXRoOiBsb2NhbGVkZWYgLWYgSVNPLTg4NTktMSAtaSBzb19TTyBzb19TTworJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworCitMQ19JREVOVElGSUNBVElPTgorJQordGl0bGUgICAgICAiU29tYWxpIGxhbmd1YWdlIGxvY2FsZSBmb3IgU29tYWxpYSIKK3NvdXJjZSAgICAgIkdlJ2V6IEZyb250aWVyIEZvdW5kYXRpb24iCithZGRyZXNzICAgICI3ODAyIFNvbG9tb24gU2VhbCBEci4sIFNwcmluZ2ZpZWxkLCBWQSAyMjE1MiwgVVNBIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAibG9jYWxlc0BnZWV6Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgInNvIgordGVycml0b3J5ICAiU08iCityZXZpc2lvbiAgICIwLjIwIgorZGF0ZSAgICAgICAiMjAwMy0wNy0wNSIKKyUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX01FQVNVUkVNRU5UCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAicG9zaXg6MTk5MyI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfVEVMRVBIT05FCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX1RJTUUKKyUKK0VORCBMQ19JREVOVElGSUNBVElPTgorCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislICBMYXRpbiBDaGFyYWN0ZXIgU2V0IFNwZWNpZmMgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSAgU29tYWxpYSBTcGVjaWZjIGFuZCBTaGFyZWQgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX01FQVNVUkVNRU5UCislCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX01FQVNVUkVNRU5UIGNhdGVnb3J5LgorJQorbWVhc3VyZW1lbnQgMQorJQorRU5EIExDX01FQVNVUkVNRU5UCisKKworTENfTU9ORVRBUlkKKyUKK2ludF9jdXJyX3N5bWJvbCAgICAgICAiPFUwMDUzPjxVMDA0Rj48VTAwNTM+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAiPFUwMDI0PiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgIDAKK25fY3NfcHJlY2VkZXMgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgMAorcF9zaWduX3Bvc24gICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAxCislCitFTkQgTENfTU9ORVRBUlkKKworCitMQ19OVU1FUklDCislCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTlVNRVJJQyBjYXRlZ29yeS4KKyUKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgIjxVMDAyRT4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICI8VTAwMkM+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAzOzMKKyUKK0VORCBMQ19OVU1FUklDCisKKworTENfUEFQRVIKKyUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfUEFQRVIgY2F0ZWdvcnkuCislCitoZWlnaHQgICAgICAyOTcKK3dpZHRoICAgICAgIDIxMAorJQorRU5EIExDX1BBUEVSCisKKworTENfVEVMRVBIT05FCislCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX1RFTEVQSE9ORSBjYXRlZ29yeS4KKyUKK3RlbF9kb21fZm10ICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyRD48VTAwMjU+PFUwMDZDPiIKK3RlbF9pbnRfZm10ICAgICI8VTAwMjU+PFUwMDYzPjxVMDAyRD48VTAwMjU+PFUwMDYxPjxVMDAyRD48VTAwMjU+PFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzI+PFUwMDM1PjxVMDAzMj4iCislIGludF9zZWxlY3QgICB1bmtub3duCislCitFTkQgTENfVEVMRVBIT05FCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIFNvbWFsaSBTcGVjaWZpYyBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfTkFNRQorJQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OQU1FIGNhdGVnb3J5LgorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorbmFtZV9nZW4gICAgIiIKK25hbWVfbXIgICAgICI8VTAwNEQ+PFUwMDY0PiIKK25hbWVfbXJzICAgICI8VTAwNEQ+PFUwMDc3PiIKK25hbWVfbWlzcyAgICIiCituYW1lX21zICAgICAiPFUwMDREPjxVMDA3Nz4iCislCitFTkQgTENfTkFNRQorCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislICBTb21hbGkvREogU3BlY2lmaWMgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX0FERFJFU1MKKyUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfQUREUkVTUyBjYXRlZ29yeS4KKyUKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwN0E+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDU0PjxVMDAyNT48VTAwNzM+LworPFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDY1PjxVMDAyNT48VTAwNzI+IgorY291bnRyeV9uYW1lICAiPFUwMDUzPjxVMDA2Rj48VTAwNkY+PFUwMDZEPjxVMDA2MT48VTAwNjE+PFUwMDZDPjxVMDA2OT48VTAwNzk+PFUwMDYxPiIKK2NvdW50cnlfcG9zdCAgIjxVMDA1Mz48VTAwNEY+PFUwMDREPiIKK2NvdW50cnlfYWIyICAgIjxVMDA1Mz48VTAwNEY+IgorY291bnRyeV9hYjMgICAiPFUwMDUzPjxVMDA0Rj48VTAwNEQ+IgorY291bnRyeV9udW0gICA3MDYKKyUgY291bnRyeV9jYXIgICB1bmtub3duCislIGNvdW50cnlfaXNibiAgdW5rbm93biwgTmVlZCBJU08gMjEwOAorbGFuZ19uYW1lICAgICAiPFUwMDUzPjxVMDA2Rj48VTAwNkY+PFUwMDZEPjxVMDA2MT48VTAwNjE+PFUwMDZDPjxVMDA2OT4iCitsYW5nX2FiICAgICAgICI8VTAwNzM+PFUwMDZGPiIKK2xhbmdfdGVybSAgICAgIjxVMDA3Mz48VTAwNkY+PFUwMDZEPiIKK2xhbmdfbGliICAgICAgIjxVMDA3Mz48VTAwNkY+PFUwMDZEPiIKKyUKK0VORCBMQ19BRERSRVNTCisKKworTENfTUVTU0FHRVMKKyUKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorJQorRU5EIExDX01FU1NBR0VTCisKKworTENfVElNRQorJQorJSBBYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWVzICglYSkKKyUKK2FiZGF5ICAgICI8VTAwNDE+PFUwMDc4PjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNDk+PFUwMDczPjxVMDA2RT4iOy8KKyAgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA2Qz4iOy8KKyAgICAgICAgICI8VTAwNDE+PFUwMDcyPjxVMDA2Mj4iOy8KKyAgICAgICAgICI8VTAwNEI+PFUwMDY4PjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNEE+PFUwMDY5PjxVMDA2RD4iOy8KKyAgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA2Mj4iCislCislIEZ1bGwgd2Vla2RheSBuYW1lcyAoJUEpCislCitkYXkgICAgICAiPFUwMDQxPjxVMDA3OD48VTAwNjE+PFUwMDY0PiI7LworICAgICAgICAgIjxVMDA0OT48VTAwNzM+PFUwMDZFPjxVMDA2OT48VTAwNjk+PFUwMDZFPiI7LworICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDZDPjxVMDA2MT48VTAwNjE+PFUwMDczPjxVMDA2Rj4iOy8KKyAgICAgICAgICI8VTAwNDE+PFUwMDcyPjxVMDA2Mj48VTAwNjE+PFUwMDYzPjxVMDA2Rj4iOy8KKyAgICAgICAgICI8VTAwNEI+PFUwMDY4PjxVMDA2MT48VTAwNkQ+PFUwMDY5PjxVMDA2OT48VTAwNzM+IjsvCisgICAgICAgICAiPFUwMDRBPjxVMDA2OT48VTAwNkQ+PFUwMDYzPjxVMDA2Rj4iOy8KKyAgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA2Mj48VTAwNzQ+PFUwMDY5PiIKKyUKKyUgQWJicmV2aWF0ZWQgbW9udGggbmFtZXMgKCViKQorJQorYWJtb24gICAgIjxVMDA0Qj48VTAwNkY+PFUwMDYyPiI7LworICAgICAgICAgIjxVMDA0Qz48VTAwNjE+PFUwMDYyPiI7LworICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDY0PiI7LworICAgICAgICAgIjxVMDA0MT48VTAwNjY+PFUwMDcyPiI7LworICAgICAgICAgIjxVMDA1Mz48VTAwNjg+PFUwMDYxPiI7LworICAgICAgICAgIjxVMDA0Qz48VTAwNjk+PFUwMDc4PiI7LworICAgICAgICAgIjxVMDA1ND48VTAwNkY+PFUwMDY0PiI7LworICAgICAgICAgIjxVMDA1Mz48VTAwNjk+PFUwMDY0PiI7LworICAgICAgICAgIjxVMDA1Mz48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAgIjxVMDA1ND48VTAwNkY+PFUwMDYyPiI7LworICAgICAgICAgIjxVMDA0Qj48VTAwNDk+PFUwMDU0PiI7LworICAgICAgICAgIjxVMDA0Qz48VTAwNDk+PFUwMDU0PiIKKyUKKyUgRnVsbCBtb250aCBuYW1lcyAoJUIpCislCittb24gICAgICAiPFUwMDQyPjxVMDA2OT48VTAwNzM+PFUwMDY4PjxVMDA2MT4gPFUwMDRCPjxVMDA2Rj48VTAwNkY+PFUwMDYyPjxVMDA2MT48VTAwNjE+PFUwMDY0PiI7LworICAgICAgICAgIjxVMDA0Mj48VTAwNjk+PFUwMDczPjxVMDA2OD48VTAwNjE+IDxVMDA0Qz48VTAwNjE+PFUwMDYyPjxVMDA2MT48VTAwNjE+PFUwMDY0PiI7LworICAgICAgICAgIjxVMDA0Mj48VTAwNjk+PFUwMDczPjxVMDA2OD48VTAwNjE+IDxVMDA1Mz48VTAwNjE+PFUwMDY0PjxVMDA2ND48VTAwNjU+PFUwMDc4PjxVMDA2MT48VTAwNjE+PFUwMDY0PiI7LworICAgICAgICAgIjxVMDA0Mj48VTAwNjk+PFUwMDczPjxVMDA2OD48VTAwNjE+IDxVMDA0MT48VTAwNjY+PFUwMDcyPjxVMDA2MT48VTAwNjE+PFUwMDY0PiI7LworICAgICAgICAgIjxVMDA0Mj48VTAwNjk+PFUwMDczPjxVMDA2OD48VTAwNjE+IDxVMDA1Mz48VTAwNjg+PFUwMDYxPjxVMDA2RT48VTAwNjE+PFUwMDYxPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNDI+PFUwMDY5PjxVMDA3Mz48VTAwNjg+PFUwMDYxPiA8VTAwNEM+PFUwMDY5PjxVMDA3OD48VTAwNjE+PFUwMDYxPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNDI+PFUwMDY5PjxVMDA3Mz48VTAwNjg+PFUwMDYxPiA8VTAwNTQ+PFUwMDZGPjxVMDA2ND48VTAwNkY+PFUwMDYyPjxVMDA2MT48VTAwNjE+PFUwMDY0PiI7LworICAgICAgICAgIjxVMDA0Mj48VTAwNjk+PFUwMDczPjxVMDA2OD48VTAwNjE+IDxVMDA1Mz48VTAwNjk+PFUwMDY0PjxVMDA2NT48VTAwNjU+PFUwMDY0PjxVMDA2MT48VTAwNjE+PFUwMDY0PiI7LworICAgICAgICAgIjxVMDA0Mj48VTAwNjk+PFUwMDczPjxVMDA2OD48VTAwNjE+IDxVMDA1Mz48VTAwNjE+PFUwMDY3PjxVMDA2MT48VTAwNjE+PFUwMDZDPjxVMDA2MT48VTAwNjE+PFUwMDY0PiI7LworICAgICAgICAgIjxVMDA0Mj48VTAwNjk+PFUwMDczPjxVMDA2OD48VTAwNjE+IDxVMDA1ND48VTAwNkY+PFUwMDYyPjxVMDA2RT48VTAwNjE+PFUwMDYxPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNDI+PFUwMDY5PjxVMDA3Mz48VTAwNjg+PFUwMDYxPiA8VTAwNEI+PFUwMDZGPjxVMDA3Nz4gPFUwMDY5PjxVMDA3OT48VTAwNkY+IDxVMDA1ND48VTAwNkY+PFUwMDYyPjxVMDA2RT48VTAwNjE+PFUwMDYxPjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNDI+PFUwMDY5PjxVMDA3Mz48VTAwNjg+PFUwMDYxPiA8VTAwNEM+PFUwMDYxPjxVMDA2Mj48VTAwNjE+IDxVMDA2OT48VTAwNzk+PFUwMDZGPiA8VTAwNTQ+PFUwMDZGPjxVMDA2Mj48VTAwNkU+PFUwMDYxPjxVMDA2MT48VTAwNjQ+IgorJQorJSBFcXVpdmFsZW50IG9mIEFNIFBNCislCithbV9wbSAgICAiPFUwMDczPjxVMDA3NT48VTAwNjI+PFUwMDYxPjxVMDA3OD48VTAwNkU+PFUwMDY5PjxVMDA2RD48VTAwNkY+IjsvCisgICAgICAgICAiPFUwMDY3PjxVMDA2MT48VTAwNkM+PFUwMDYxPjxVMDA2Mj48VTAwNkU+PFUwMDY5PjxVMDA2RD48VTAwNkY+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uICgleCkKKyUJIiVkLyVtLyVZIgorJQorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA1OT4iCislCislIEFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24gKCVYKQorJQkiJWw6JU06JVMiCislCit0X2ZtdCAiPFUwMDI1PjxVMDA2Qz48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4iCislCislIEFwcHJvcHJpYXRlIEFNL1BNIHRpbWUgcmVwcmVzZW50YXRpb24gKCVyKQorJQkiJVggJXAiCislCit0X2ZtdF9hbXBtICI8VTAwMjU+PFUwMDU4PjxVMDAyMD48VTAwMjU+PFUwMDcwPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbiAoJWMpCislCSIlQSwgJUIgJWUsICVZICVyICVaCislCitkX3RfZm10ICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMkM+LworPFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uIChkYXRlKDEpKQorJQkiJUEsICViICVlLCAlciAlWiAlWSIKKyUKK2RhdGVfZm10ICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMkM+LworPFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDIwPjxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorJQorRU5EIExDX1RJTUUKKyUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3NxX0FMIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc3FfQUwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFlYjNkYwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3NxX0FMCkBAIC0wLDAgKzEsMzU0IEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKyUgQWxiYW5pYW4gbGFuZ3VhZ2UgbG9jYWxlIGZvciBBbGJhbmlhLgorJSBDb250cmlidXRlZCBieSBLZW50YXJvaCBOb2ppIDxrbm9qaUBqcC5pYm0uY29tPiBhbmQKKyUgVGV0c3VqaSBPcml0YSA8b3JpdGFAanAuaWJtLmNvbT4uCislIGZpeGVkIExDX0NPTExBVEUgPHBhYmxvQG1hbmRyYWtlc29mdC5jb20+CisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJBbGJhbmlhbiBsYW5ndWFnZSBsb2NhbGUgZm9yIEFsYmFuaWEiCitzb3VyY2UgICAgICJJQk0gR2xvYmFsaXphdGlvbiBDZW50ZXIgb2YgQ29tcGV0ZW5jeSwgWWFtYXRvIFNvZnR3YXJlIExhYm9yYXRvcnkiCithZGRyZXNzICAgICIxNjIzLTE0LCBTaGltb3RzdXJ1bWEsIFlhbWF0by1zaGksIEthbmFnYXdhLWtlbiwgMjQyLTg1MDIsIEphcGFuIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIkFsYmFuaWFuIgordGVycml0b3J5ICAiQWxiYW5pYSIKK3JldmlzaW9uICAgIjEuMSIKK2RhdGUgICAgICAgIjIwMDQtMDctMDEiCislCitjYXRlZ29yeSAgInNxX0FMOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgInNxX0FMOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgInNxX0FMOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAic3FfQUw6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJzcV9BTDoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgInNxX0FMOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgInNxX0FMOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgInNxX0FMOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgInNxX0FMOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAic3FfQUw6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJzcV9BTDoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKKworJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEKK2NvcHkgImlzbzE0NjUxX3QxIgorCislJSBhLCBiLCBjLCBjLCwgZCwgZGgsIGUsIGU6LCBmLCBnLCBnaiwgaCwgaSwgaiwgaywgbCwgbGwsIG0sIG4sIG5qLCBvLCBwLCBxCislJSByLCByciwgcywgc2gsIHQsIHRoLCB1LCB2LCB4LCB4aCwgeSwgeiwgemguCitjb2xsYXRpbmctc3ltYm9sICA8Y2NlZGlsbGE+Citjb2xsYXRpbmctc3ltYm9sICA8ZC1oLXNxPgorY29sbGF0aW5nLWVsZW1lbnQgPEQtSD4gZnJvbSAiPFUwMDQ0PjxVMDA0OD4iCitjb2xsYXRpbmctZWxlbWVudCA8ZC1oPiBmcm9tICI8VTAwNjQ+PFUwMDY4PiIKK2NvbGxhdGluZy1lbGVtZW50IDxELWg+IGZyb20gIjxVMDA0ND48VTAwNjg+IgorY29sbGF0aW5nLWVsZW1lbnQgPGQtSD4gZnJvbSAiPFUwMDY0PjxVMDA0OD4iCitjb2xsYXRpbmctc3ltYm9sICA8ZWRpYWVyZXNpcz4KK2NvbGxhdGluZy1zeW1ib2wgIDxnLWotc3E+Citjb2xsYXRpbmctZWxlbWVudCA8Ry1KPiBmcm9tICI8VTAwNDc+PFUwMDRBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxnLWo+IGZyb20gIjxVMDA2Nz48VTAwNkE+IgorY29sbGF0aW5nLWVsZW1lbnQgPEctaj4gZnJvbSAiPFUwMDQ3PjxVMDA2QT4iCitjb2xsYXRpbmctZWxlbWVudCA8Zy1KPiBmcm9tICI8VTAwNjc+PFUwMDRBPiIKK2NvbGxhdGluZy1zeW1ib2wgIDxsLWwtc3E+Citjb2xsYXRpbmctZWxlbWVudCA8TC1MPiBmcm9tICI8VTAwNEM+PFUwMDRDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxsLWw+IGZyb20gIjxVMDA2Qz48VTAwNkM+IgorY29sbGF0aW5nLWVsZW1lbnQgPEwtbD4gZnJvbSAiPFUwMDRDPjxVMDA2Qz4iCitjb2xsYXRpbmctZWxlbWVudCA8bC1MPiBmcm9tICI8VTAwNkM+PFUwMDRDPiIKK2NvbGxhdGluZy1zeW1ib2wgIDxuLWotc3E+Citjb2xsYXRpbmctZWxlbWVudCA8Ti1KPiBmcm9tICI8VTAwNEU+PFUwMDRBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxuLWo+IGZyb20gIjxVMDA2RT48VTAwNkE+IgorY29sbGF0aW5nLWVsZW1lbnQgPE4taj4gZnJvbSAiPFUwMDRFPjxVMDA2QT4iCitjb2xsYXRpbmctZWxlbWVudCA8bi1KPiBmcm9tICI8VTAwNkU+PFUwMDRBPiIKK2NvbGxhdGluZy1zeW1ib2wgIDxyLXItc3E+Citjb2xsYXRpbmctZWxlbWVudCA8Ui1SPiBmcm9tICI8VTAwNTI+PFUwMDUyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyLXI+IGZyb20gIjxVMDA3Mj48VTAwNzI+IgorY29sbGF0aW5nLWVsZW1lbnQgPFItcj4gZnJvbSAiPFUwMDUyPjxVMDA3Mj4iCitjb2xsYXRpbmctZWxlbWVudCA8ci1SPiBmcm9tICI8VTAwNzI+PFUwMDUyPiIKK2NvbGxhdGluZy1zeW1ib2wgIDxzLWgtc3E+Citjb2xsYXRpbmctZWxlbWVudCA8Uy1IPiBmcm9tICI8VTAwNTM+PFUwMDQ4PiIKK2NvbGxhdGluZy1lbGVtZW50IDxzLWg+IGZyb20gIjxVMDA3Mz48VTAwNjg+IgorY29sbGF0aW5nLWVsZW1lbnQgPFMtaD4gZnJvbSAiPFUwMDUzPjxVMDA2OD4iCitjb2xsYXRpbmctZWxlbWVudCA8cy1IPiBmcm9tICI8VTAwNzM+PFUwMDQ4PiIKK2NvbGxhdGluZy1zeW1ib2wgIDx0LWgtc3E+Citjb2xsYXRpbmctZWxlbWVudCA8VC1IPiBmcm9tICI8VTAwNTQ+PFUwMDQ4PiIKK2NvbGxhdGluZy1lbGVtZW50IDx0LWg+IGZyb20gIjxVMDA3ND48VTAwNjg+IgorY29sbGF0aW5nLWVsZW1lbnQgPFQtaD4gZnJvbSAiPFUwMDU0PjxVMDA2OD4iCitjb2xsYXRpbmctZWxlbWVudCA8dC1IPiBmcm9tICI8VTAwNzQ+PFUwMDQ4PiIKK2NvbGxhdGluZy1zeW1ib2wgIDx4LWgtc3E+Citjb2xsYXRpbmctZWxlbWVudCA8WC1IPiBmcm9tICI8VTAwNTg+PFUwMDQ4PiIKK2NvbGxhdGluZy1lbGVtZW50IDx4LWg+IGZyb20gIjxVMDA3OD48VTAwNjg+IgorY29sbGF0aW5nLWVsZW1lbnQgPFgtaD4gZnJvbSAiPFUwMDU4PjxVMDA2OD4iCitjb2xsYXRpbmctZWxlbWVudCA8eC1IPiBmcm9tICI8VTAwNzg+PFUwMDQ4PiIKK2NvbGxhdGluZy1zeW1ib2wgIDx6LWgtc3E+Citjb2xsYXRpbmctZWxlbWVudCA8Wi1IPiBmcm9tICI8VTAwNUE+PFUwMDQ4PiIKK2NvbGxhdGluZy1lbGVtZW50IDx6LWg+IGZyb20gIjxVMDA3QT48VTAwNjg+IgorY29sbGF0aW5nLWVsZW1lbnQgPFotaD4gZnJvbSAiPFUwMDVBPjxVMDA2OD4iCitjb2xsYXRpbmctZWxlbWVudCA8ei1IPiBmcm9tICI8VTAwN0E+PFUwMDQ4PiIKKworY29sbGF0aW5nLXN5bWJvbCA8Q0FQLU1JTj4KK2NvbGxhdGluZy1zeW1ib2wgPE1JTi1DQVA+CisKK3Jlb3JkZXItYWZ0ZXIgPE1JTj4KKzxNSU4tQ0FQPgorcmVvcmRlci1hZnRlciA8Q0FQPgorPENBUC1NSU4+CisKK3Jlb3JkZXItYWZ0ZXIgPGM+Cis8Y2NlZGlsbGE+CityZW9yZGVyLWFmdGVyIDxkPgorPGQtaC1zcT4KK3Jlb3JkZXItYWZ0ZXIgPGU+Cis8ZWRpYWVyZXNpcz4KK3Jlb3JkZXItYWZ0ZXIgPGc+Cis8Zy1qLXNxPgorcmVvcmRlci1hZnRlciA8bD4KKzxsLWwtc3E+CityZW9yZGVyLWFmdGVyIDxuPgorPG4tai1zcT4KK3Jlb3JkZXItYWZ0ZXIgPHI+Cis8ci1yLXNxPgorcmVvcmRlci1hZnRlciA8cz4KKzxzLWgtc3E+CityZW9yZGVyLWFmdGVyIDx0PgorPHQtaC1zcT4KK3Jlb3JkZXItYWZ0ZXIgPHg+Cis8eC1oLXNxPgorcmVvcmRlci1hZnRlciA8ej4KKzx6LWgtc3E+CisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDYzPgorPFUwMEU3PiA8Y2NlZGlsbGE+OzxDREk+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNDM+Cis8VTAwQzc+IDxjY2VkaWxsYT47PENEST47PENBUD47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA2ND4KKzxkLWg+ICAgPGQtaC1zcT47PFBDVD47PE1JTj47SUdOT1JFCis8ZC1IPiAgIDxkLWgtc3E+OzxQQ1Q+OzxNSU4tQ0FQPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDQ0PgorPEQtSD4gICA8ZC1oLXNxPjs8UENUPjs8Q0FQPjtJR05PUkUKKzxELWg+ICAgPGQtaC1zcT47PFBDVD47PENBUC1NSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNjU+Cis8VTAwRUI+IDxlZGlhZXJlc2lzPjs8UkVVPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDQ1PgorPFUwMENCPiA8ZWRpYWVyZXNpcz47PFJFVT47PENBUD47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA2Nz4KKzxnLWo+ICAgPGctai1zcT47PFBDVD47PE1JTj47SUdOT1JFCis8Zy1KPiAgIDxnLWotc3E+OzxQQ1Q+OzxNSU4tQ0FQPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDQ3PgorPEctSj4gICA8Zy1qLXNxPjs8UENUPjs8Q0FQPjtJR05PUkUKKzxHLWo+ICAgPGctai1zcT47PFBDVD47PENBUC1NSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNkM+Cis8bC1sPiAgIDxsLWwtc3E+OzxQQ1Q+OzxNSU4+O0lHTk9SRQorPGwtTD4gICA8bC1sLXNxPjs8UENUPjs8TUlOLUNBUD47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0Qz4KKzxMLUw+ICAgPGwtbC1zcT47PFBDVD47PENBUD47SUdOT1JFCis8TC1sPiAgIDxsLWwtc3E+OzxQQ1Q+OzxDQVAtTUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDZFPgorPG4taj4gICA8bi1qLXNxPjs8UENUPjs8TUlOPjtJR05PUkUKKzxuLUo+ICAgPG4tai1zcT47PFBDVD47PE1JTi1DQVA+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNEU+Cis8Ti1KPiAgIDxuLWotc3E+OzxQQ1Q+OzxDQVA+O0lHTk9SRQorPE4taj4gICA8bi1qLXNxPjs8UENUPjs8Q0FQLU1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA3Mj4KKzxyLXI+ICAgPHItci1zcT47PFBDVD47PE1JTj47SUdOT1JFCis8ci1SPiAgIDxyLXItc3E+OzxQQ1Q+OzxNSU4tQ0FQPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDUyPgorPFItUj4gICA8ci1yLXNxPjs8UENUPjs8Q0FQPjtJR05PUkUKKzxSLXI+ICAgPHItci1zcT47PFBDVD47PENBUC1NSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNzQ+Cis8dC1oPiAgIDx0LWgtc3E+OzxQQ1Q+OzxNSU4+O0lHTk9SRQorPHQtSD4gICA8dC1oLXNxPjs8UENUPjs8TUlOLUNBUD47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA1ND4KKzxULUg+ICAgPHQtaC1zcT47PFBDVD47PENBUD47SUdOT1JFCis8VC1oPiAgIDx0LWgtc3E+OzxQQ1Q+OzxDQVAtTUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDc4PgorPHgtaD4gICA8eC1oLXNxPjs8UENUPjs8TUlOPjtJR05PUkUKKzx4LUg+ICAgPHgtaC1zcT47PFBDVD47PE1JTi1DQVA+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNTg+Cis8WC1IPiAgIDx4LWgtc3E+OzxQQ1Q+OzxDQVA+O0lHTk9SRQorPFgtaD4gICA8eC1oLXNxPjs8UENUPjs8Q0FQLU1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA3QT4KKzx6LWg+ICAgPHotaC1zcT47PFBDVD47PE1JTj47SUdOT1JFCis8ei1IPiAgIDx6LWgtc3E+OzxQQ1Q+OzxNSU4tQ0FQPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDVBPgorPFotSD4gICA8ei1oLXNxPjs8UENUPjs8Q0FQPjtJR05PUkUKKzxaLWg+ICAgPHotaC1zcT47PFBDVD47PENBUC1NSU4+O0lHTk9SRQorCityZW9yZGVyLWVuZAorCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiB0aGUgTENfTU9ORVRBUlkgY2F0ZWdvcnkuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRpZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUvSmF2YQorJQoraW50X2N1cnJfc3ltYm9sICAgICAgICI8VTAwNDE+PFUwMDRDPjxVMDA0Qz48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICI8VTAwNEM+PFUwMDY1PjxVMDA2Qj4iCittb25fZGVjaW1hbF9wb2ludCAgICAgIjxVMDAyQz4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgIjxVMDAyRT4iCittb25fZ3JvdXBpbmcgICAgICAgICAgMworcG9zaXRpdmVfc2lnbiAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgMworZnJhY19kaWdpdHMgICAgICAgICAgIDMKK3BfY3NfcHJlY2VkZXMgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgMAorbl9jc19wcmVjZWRlcyAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAwCitwX3NpZ25fcG9zbiAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgIDEKKyUKK0VORCBMQ19NT05FVEFSWQorCisKK0xDX05VTUVSSUMKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OVU1FUklDICBjYXRlZ29yeS4KKyUKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgIjxVMDAyQz4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICI8VTAwMkU+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAzCislCitFTkQgTENfTlVNRVJJQworCisKK0xDX1RJTUUKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19USU1FIGNhdGVnb3J5LgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkaWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlL0phdmEKKyUKKyUgQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyAoJWEpCithYmRheSAgICAgICAiPFUwMDQ0PjxVMDA2OT48VTAwNjU+PFUwMDIwPiI7IjxVMDA0OD48VTAwRUI+PFUwMDZFPjxVMDAyMD4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Mj48VTAwMjA+IjsiPFUwMDREPjxVMDBFQj48VTAwNzI+PFUwMDIwPiI7LworICAgICAgICAgICAgIjxVMDA0NT48VTAwNkU+PFUwMDZBPjxVMDAyMD4iOyI8VTAwNTA+PFUwMDcyPjxVMDA2NT48VTAwMjA+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2OD48VTAwNzQ+PFUwMDIwPiIKKyUKKyUgRnVsbCB3ZWVrZGF5IG5hbWVzICglQSkKK2RheSAgICAgICAgICI8VTAwNjU+PFUwMDIwPjxVMDA2ND48VTAwNjk+PFUwMDY1PjxVMDA2Qz48VTAwMjA+IjsvCisgICAgICAgICAgICAiPFUwMDY1PjxVMDAyMD48VTAwNjg+PFUwMEVCPjxVMDA2RT48VTAwRUI+PFUwMDIwPiI7LworICAgICAgICAgICAgIjxVMDA2NT48VTAwMjA+PFUwMDZEPjxVMDA2MT48VTAwNzI+PFUwMDc0PjxVMDBFQj48VTAwMjA+IjsvCisgICAgICAgICAgICAiPFUwMDY1PjxVMDAyMD48VTAwNkQ+PFUwMEVCPjxVMDA3Mj48VTAwNkI+PFUwMDc1PjxVMDA3Mj4vCis8VTAwRUI+PFUwMDIwPiI7LworICAgICAgICAgICAgIjxVMDA2NT48VTAwMjA+PFUwMDY1PjxVMDA2RT48VTAwNkE+PFUwMDc0PjxVMDA2NT48VTAwMjA+IjsvCisgICAgICAgICAgICAiPFUwMDY1PjxVMDAyMD48VTAwNzA+PFUwMDcyPjxVMDA2NT48VTAwNkQ+PFUwMDc0PjxVMDA2NT48VTAwMjA+IjsvCisgICAgICAgICAgICAiPFUwMDY1PjxVMDAyMD48VTAwNzM+PFUwMDY4PjxVMDA3ND48VTAwNzU+PFUwMDZFPjxVMDBFQj48VTAwMjA+IgorJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCithYm1vbiAgICAgICAiPFUwMDRBPjxVMDA2MT48VTAwNkU+IjsiPFUwMDUzPjxVMDA2OD48VTAwNkI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzI+IjsiPFUwMDUwPjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNkE+IjsiPFUwMDUxPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDRCPjxVMDA2Rj48VTAwNzI+IjsiPFUwMDQ3PjxVMDA3Mz48VTAwNjg+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2OD48VTAwNzQ+IjsiPFUwMDU0PjxVMDA2NT48VTAwNzQ+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDBFQj48VTAwNkU+IjsiPFUwMDQ0PjxVMDA2OD48VTAwNkE+IgorJQorJSBGdWxsIG1vbnRoIG5hbWVzICglQikKK21vbiAgICAgICAgICI8VTAwNkE+PFUwMDYxPjxVMDA2RT48VTAwNjE+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA3Mz48VTAwNjg+PFUwMDZCPjxVMDA3NT48VTAwNzI+PFUwMDc0PiI7LworICAgICAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3Mz4iOy8KKyAgICAgICAgICAgICI8VTAwNzA+PFUwMDcyPjxVMDA2OT48VTAwNkM+PFUwMDZDPiI7LworICAgICAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDZBPiI7LworICAgICAgICAgICAgIjxVMDA3MT48VTAwNjU+PFUwMDcyPjxVMDA3Mz48VTAwNjg+PFUwMDZGPjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNkI+PFUwMDZGPjxVMDA3Mj48VTAwNzI+PFUwMDY5PjxVMDA2Qj4iOy8KKyAgICAgICAgICAgICI8VTAwNjc+PFUwMDc1PjxVMDA3Mz48VTAwNjg+PFUwMDc0PiI7LworICAgICAgICAgICAgIjxVMDA3Mz48VTAwNjg+PFUwMDc0PjxVMDA2MT48VTAwNzQ+PFUwMDZGPjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNzQ+PFUwMDY1PjxVMDA3ND48VTAwNkY+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA2RT48VTAwRUI+PFUwMDZFPjxVMDA3ND48VTAwNkY+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA2ND48VTAwNjg+PFUwMDZBPjxVMDA2NT48VTAwNzQ+PFUwMDZGPjxVMDA3Mj4iCislCislIEVxdWl2YWxlbnQgb2YgQU0gUE0KK2FtX3BtICAgICAgICI8VTAwNTA+PFUwMDQ0PiI7IjxVMDA0RD48VTAwNDQ+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uCislICVZLSViLSVkJUkuJU0uJVMuICVaCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA1OT48VTAwMkQ+PFUwMDI1PjxVMDA2Mj48VTAwMkQ+PFUwMDI1PjxVMDA2ND4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OT48VTAwMkU+PFUwMDI1PjxVMDA0RD48VTAwMkU+PFUwMDI1PjxVMDA1Mz48VTAwMkU+LworPFUwMDI1PjxVMDA3MD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24KKyUgJVktJWItJWQKK2RfZm10ICAgICAgICI8VTAwMjU+PFUwMDU5PjxVMDAyRD48VTAwMjU+PFUwMDYyPjxVMDAyRD48VTAwMjU+PFUwMDY0PiIKKyUKKyUgQXBwcm9wcmlhdGUgdGltZSByZXByZXNlbnRhdGlvbgorJSAlSS4lTS4lUy4gJVoKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDQ5PjxVMDAyRT48VTAwMjU+PFUwMDREPjxVMDAyRT48VTAwMjU+PFUwMDUzPi8KKzxVMDAyRT48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIDEyIGggdGltZSByZXByZXNlbnRhdGlvbiAoJXIpCit0X2ZtdF9hbXBtICAiPFUwMDI1PjxVMDA0OT48VTAwMkU+PFUwMDI1PjxVMDA0RD48VTAwMkU+PFUwMDI1PjxVMDA1Mz4vCis8VTAwMkU+PFUwMDI1PjxVMDA3MD48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKGRhdGUoMSkpICAgIiVhICViICVlICVIOiVNOiVTICVaICVZIgorZGF0ZV9mbXQgICAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNzk+PFUwMDU5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworCitMQ19QQVBFUgorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19QQVBFUiBjYXRlZ29yeQoraGVpZ2h0ICAgICAgMjk3Cit3aWR0aCAgICAgICAyMTAKKworRU5EIExDX1BBUEVSCisKKworTENfTkFNRQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJSBMQ19OQU1FIGNhdGVnb3J5LgorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNzA+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2Nz4iCituYW1lX2dlbiAgICAiIgorbmFtZV9tciAgICAgIjxVMDA0RD48VTAwNzI+PFUwMDJFPiIKK25hbWVfbXJzICAgICI8VTAwNEQ+PFUwMDcyPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9taXNzICAgIjxVMDA0RD48VTAwNjk+PFUwMDczPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9tcyAgICAgIjxVMDA0RD48VTAwNzM+PFUwMDJFPiIKKworRU5EIExDX05BTUUKKworCitMQ19BRERSRVNTCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislIExDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICI8VTAwMjU+PFUwMDdBPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDczPi8KKzxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA2NT48VTAwMjU+PFUwMDcyPiIKKworY291bnRyeV9hYjIgIjxVMDA0MT48VTAwNEM+IgorY291bnRyeV9hYjMgIjxVMDA0MT48VTAwNEM+PFUwMDQyPiIKK2NvdW50cnlfbnVtIDAwOAorRU5EIExDX0FERFJFU1MKKworCitMQ19URUxFUEhPTkUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUKK3RlbF9pbnRfZm10ICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDNCPjxVMDAyNT48VTAwNjE+PFUwMDIwPi8KKzxVMDAzQj48VTAwMjU+PFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzM+PFUwMDM1PjxVMDAzNT4iCitpbnRfc2VsZWN0ICAgICAiPFUwMDMwPjxVMDAzMD4iCisKK0VORCBMQ19URUxFUEhPTkUKKworCitMQ19NRUFTVVJFTUVOVAorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZQorJQorbWVhc3VyZW1lbnQgMQorCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3NyX01FIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc3JfTUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQxMjAwMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3NyX01FCkBAIC0wLDAgKzEsMTY1IEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgU2VyYmlhbiBMYW5ndWFnZSBsb2NhbGUgZm9yIE1vbnRlbmVncm8KKyUgU291cmNlOiBzcl9ZVSwgc3JfQ1MgbG9jYWxlCislIEFkZHJlc3M6CislCislIENvbnRhY3Q6IERhbmlsbyBTZWdhbgorJSBFbWFpbDogZGFuaWxvQGdub21lLm9yZworJSBUZWw6ICszODEgNjMgMzIzNDU2CislIEZheDogbm9uZQorJSBMYW5ndWFnZTogc3IKKyUgVGVycml0b3J5OiBNRQorJSBSZXZpc2lvbjogMS4yCislIERhdGU6IDIwMDYtMTAtMTEKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogVVRGLTgsIElTTy04ODU5LTUKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlNlcmJpYW4gbG9jYWxlIGZvciBNb250ZW5lZ3JvIgorc291cmNlICAgICAic3JfWVUsIHNyX0NTIGxvY2FsZSIKK2FkZHJlc3MgICAgIiIKK2NvbnRhY3QgICAgIkRhbmlsbyBTZWdhbiIKK2VtYWlsICAgICAgImJ1Zy1nbGliY0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiU2VyYmlhbiIKK3RlcnJpdG9yeSAgIk1vbnRlbmVncm8iCityZXZpc2lvbiAgICIxLjIiCitkYXRlICAgICAgICIyMDA2LTEwLTExIgorYXVkaWVuY2UgICAiZ2VuZXJhbCIKK2FwcGxpY2F0aW9uICAgIkdOVSBsb2NhbGUiCithYmJyZXZpYXRpb24gICIiCislCitjYXRlZ29yeSAgaTE4bjoxOTk3O0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgaTE4bjoxOTk3O0xDX0NUWVBFCitjYXRlZ29yeSAgaTE4bjoxOTk3O0xDX0NPTExBVEUKK2NhdGVnb3J5ICBpMThuOjE5OTc7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICBpMThuOjE5OTc7TENfTlVNRVJJQworY2F0ZWdvcnkgIGkxOG46MTk5NztMQ19USU1FCitjYXRlZ29yeSAgaTE4bjoxOTk3O0xDX01FU1NBR0VTCitjYXRlZ29yeSAgaTE4bjoxOTk3O0xDX1BBUEVSCitjYXRlZ29yeSAgaTE4bjoxOTk3O0xDX05BTUUKK2NhdGVnb3J5ICBpMThuOjE5OTc7TENfQUREUkVTUworY2F0ZWdvcnkgIGkxOG46MTk5NztMQ19URUxFUEhPTkUKK2NhdGVnb3J5ICBpMThuOjE5OTc7TENfTUVBU1VSRU1FTlQKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiaTE4biIKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCitjb3B5ICJzcl9SUyIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAgICI8VTAwNDU+PFUwMDU1PjxVMDA1Mj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICAgICAiPFUyMEFDPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAgICAgIjxVMDAyQz4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgICAgICI8VTAwMkU+IgorbW9uX2dyb3VwaW5nICAgICAgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgICAgICAwCitwX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAgICAgMAorbl9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAgICAgMQorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgInNyX1JTIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorYWJkYXkgICAiPFUwNDNEPjxVMDQzNT48VTA0MzQ+IjsiPFUwNDNGPjxVMDQzRT48VTA0M0Q+IjsvCisgICAgICAgICI8VTA0NDM+PFUwNDQyPjxVMDQzRT4iOyI8VTA0NDE+PFUwNDQwPjxVMDQzOD4iOy8KKyAgICAgICAgIjxVMDQ0Nz48VTA0MzU+PFUwNDQyPiI7IjxVMDQzRj48VTA0MzU+PFUwNDQyPiI7LworICAgICAgICAiPFUwNDQxPjxVMDQ0Mz48VTA0MzE+IgorZGF5ICAgICAiPFUwNDNEPjxVMDQzNT48VTA0MzQ+PFUwNDU4PjxVMDQzNT48VTA0NTk+PFUwNDMwPiI7LworICAgICAgICAiPFUwNDNGPjxVMDQzRT48VTA0M0Q+PFUwNDM1PjxVMDQzND48VTA0MzU+PFUwNDU5PjxVMDQzMD48VTA0M0E+IjsvCisgICAgICAgICI8VTA0NDM+PFUwNDQyPjxVMDQzRT48VTA0NDA+PFUwNDMwPjxVMDQzQT4iOy8KKwkiPFUwNDQxPjxVMDQ0MD48VTA0Mzg+PFUwNDU4PjxVMDQzNT48VTA0MzQ+PFUwNDMwPiI7LworICAgICAgICAiPFUwNDQ3PjxVMDQzNT48VTA0NDI+PFUwNDMyPjxVMDQ0MD48VTA0NDI+PFUwNDMwPjxVMDQzQT4iOy8KKyAgICAgICAgIjxVMDQzRj48VTA0MzU+PFUwNDQyPjxVMDQzMD48VTA0M0E+IjsvCisgICAgICAgICI8VTA0NDE+PFUwNDQzPjxVMDQzMT48VTA0M0U+PFUwNDQyPjxVMDQzMD4iCithYm1vbiAgICI8VTA0NTg+PFUwNDMwPjxVMDQzRD4iOyI8VTA0NDQ+PFUwNDM1PjxVMDQzMT4iOy8KKyAgICAgICAgIjxVMDQzQz48VTA0MzA+PFUwNDQwPiI7IjxVMDQzMD48VTA0M0Y+PFUwNDQwPiI7LworICAgICAgICAiPFUwNDNDPjxVMDQzMD48VTA0NTg+IjsiPFUwNDU4PjxVMDQ0Mz48VTA0M0Q+IjsvCisgICAgICAgICI8VTA0NTg+PFUwNDQzPjxVMDQzQj4iOyI8VTA0MzA+PFUwNDMyPjxVMDQzMz4iOy8KKyAgICAgICAgIjxVMDQ0MT48VTA0MzU+PFUwNDNGPiI7IjxVMDQzRT48VTA0M0E+PFUwNDQyPiI7LworICAgICAgICAiPFUwNDNEPjxVMDQzRT48VTA0MzI+IjsiPFUwNDM0PjxVMDQzNT48VTA0NDY+IgorbW9uICAgICAiPFUwNDU4PjxVMDQzMD48VTA0M0Q+PFUwNDQzPjxVMDQzMD48VTA0NDA+IjsvCisgICAgICAgICI8VTA0NDQ+PFUwNDM1PjxVMDQzMT48VTA0NDA+PFUwNDQzPjxVMDQzMD48VTA0NDA+IjsvCisgICAgICAgICI8VTA0M0M+PFUwNDMwPjxVMDQ0MD48VTA0NDI+IjsvCisgICAgICAgICI8VTA0MzA+PFUwNDNGPjxVMDQ0MD48VTA0Mzg+PFUwNDNCPiI7LworICAgICAgICAiPFUwNDNDPjxVMDQzMD48VTA0NTg+IjsvCisgICAgICAgICI8VTA0NTg+PFUwNDQzPjxVMDQzRD4iOy8KKyAgICAgICAgIjxVMDQ1OD48VTA0NDM+PFUwNDNCPiI7LworICAgICAgICAiPFUwNDMwPjxVMDQzMj48VTA0MzM+PFUwNDQzPjxVMDQ0MT48VTA0NDI+IjsvCisgICAgICAgICI8VTA0NDE+PFUwNDM1PjxVMDQzRj48VTA0NDI+PFUwNDM1PjxVMDQzQz48VTA0MzE+PFUwNDMwPjxVMDQ0MD4iOy8KKyAgICAgICAgIjxVMDQzRT48VTA0M0E+PFUwNDQyPjxVMDQzRT48VTA0MzE+PFUwNDMwPjxVMDQ0MD4iOy8KKyAgICAgICAgIjxVMDQzRD48VTA0M0U+PFUwNDMyPjxVMDQzNT48VTA0M0M+PFUwNDMxPjxVMDQzMD48VTA0NDA+IjsvCisgICAgICAgICI8VTA0MzQ+PFUwNDM1PjxVMDQ0Nj48VTA0MzU+PFUwNDNDPjxVMDQzMT48VTA0MzA+PFUwNDQwPiIKKworZF90X2ZtdCAiPFUwMDI1PjxVMDA0MT48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDJFPjxVMDAyMD4vCis8VTAwMjU+PFUwMDQyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyRT48VTAwMjA+PFUwMDI1PjxVMDA1ND4vCis8VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjU+PFUwMDZEPjxVMDAyRT48VTAwMjU+PFUwMDU5PjxVMDAyRT4iCit0X2ZtdCAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgIiI7IiIKK3RfZm10X2FtcG0gIjxVMDAyNT48VTAwNTQ+IgorZGF0ZV9mbXQgICI8VTAwMjU+PFUwMDYxPjxVMDAyYz48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMkU+PFUwMDIwPi8KKzxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDJFPjxVMDAyMD48VTAwMjA+PFUwMDI1PjxVMDA0OD4vCis8VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA1QT48VTAwMEE+IgorJSB3ZWVrICAgIDc7MTk5NzEyMDE7NAorZmlyc3Rfd2Vla2RheSAyCitmaXJzdF93b3JrZGF5IDIKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCitjb3B5ICJzcl9SUyIKK0VORCBMQ19NRVNTQUdFUworCitMQ19QQVBFUgorY29weSAic3JfUlMiCitFTkQgTENfUEFQRVIKKworTENfTkFNRQorY29weSAic3JfUlMiCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgICAiPFUwMDREPjxVMDA0NT4iCitjb3VudHJ5X2FiMyAgICI8VTAwNEQ+PFUwMDRFPjxVMDA0NT4iCitjb3VudHJ5X3Bvc3QgICI8VTAwNEQ+PFUwMDRFPjxVMDA0NT4iCitjb3VudHJ5X25hbWUgICI8VTA0MjY+PFUwNDQwPjxVMDQzRD48VTA0MzA+PFUwMDIwPjxVMDQxMz48VTA0M0U+PFUwNDQwPjxVMDQzMD4iCitjb3VudHJ5X251bSAgIDQ5OQorY291bnRyeV9jYXIgICAiPFUwMDREPjxVMDA0RT48VTAwNDU+IgorY291bnRyeV9pc2JuICAiPFUwMDM4PjxVMDAzNj4iCitsYW5nX25hbWUgICAgICI8VTA0NDE+PFUwNDQwPjxVMDQzRj48VTA0NDE+PFUwNDNBPjxVMDQzOD4iCitsYW5nX3Rlcm0gICAgICI8VTAwNzM+PFUwMDcyPjxVMDA3MD4iCitsYW5nX2xpYiAgICAgICI8VTAwNzM+PFUwMDYzPjxVMDA2Mz4iCitsYW5nX2FiCSAgICAgICI8VTAwNzM+PFUwMDcyPiIKK0VORCBMQ19BRERSRVNTCisKK0xDX1RFTEVQSE9ORQorY29weSAic3JfUlMiCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJzcl9SUyIKK0VORCBMQ19NRUFTVVJFTUVOVApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc3JfUlMgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9zcl9SUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGQ1NGFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc3JfUlMKQEAgLTAsMCArMSwzNjAgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBTZXJiaWFuIExhbmd1YWdlIExvY2FsZSBmb3IgU2VyYmlhCislIFNvdXJjZTogc3JfWVUsIHNyX0NTIGxvY2FsZXMKKyUgQWRkcmVzczoKKyUKKyUgQ29udGFjdDogRGFuaWxvIFNlZ2FuCislIEVtYWlsOiBkYW5pbG9AZ25vbWUub3JnCislIFRlbDogKzM4MSA2MyAzMjM0NTYKKyUgRmF4OiBub25lCislIExhbmd1YWdlOiBzcgorJSBUZXJyaXRvcnk6IFJTCislIFJldmlzaW9uOiAxLjMKKyUgRGF0ZTogMjAwNi0xMC0wOQorJSBBcHBsaWNhdGlvbjogZ2VuZXJhbAorJSBVc2VyczogZ2VuZXJhbAorJSBDaGFyc2V0OiBVVEYtOAorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorJQorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiU2VyYmlhbiBsb2NhbGUgZm9yIFNlcmJpYSIKK3NvdXJjZSAgICAgInNyX1lVLCBzcl9DUyBsb2NhbGUiCithZGRyZXNzICAgICIiCitjb250YWN0ICAgICJEYW5pbG8gU2VnYW4iCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiU2VyYmlhbiIKK3RlcnJpdG9yeSAgIlNlcmJpYSIKK3JldmlzaW9uICAgIjEuMyIKK2RhdGUgICAgICAgIjIwMDYtMTAtMDkiCithdWRpZW5jZSAgICJnZW5lcmFsIgorYXBwbGljYXRpb24gICAiR05VIGxvY2FsZSIKK2FiYnJldmlhdGlvbiAgIiIKKyUKK2NhdGVnb3J5ICAiaTE4bjoxOTk3IjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJpMThuOjE5OTciO0xDX0NUWVBFCitjYXRlZ29yeSAgImkxOG46MTk5NyI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJpMThuOjE5OTciO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgImkxOG46MTk5NyI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJpMThuOjE5OTciO0xDX1RJTUUKK2NhdGVnb3J5ICAiaTE4bjoxOTk3IjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJpMThuOjE5OTciO0xDX1BBUEVSCitjYXRlZ29yeSAgImkxOG46MTk5NyI7TENfTkFNRQorY2F0ZWdvcnkgICJpMThuOjE5OTciO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiaTE4bjoxOTk3IjtMQ19URUxFUEhPTkUKK2NhdGVnb3J5ICAiaTE4bjoxOTk3IjtMQ19NRUFTVVJFTUVOVAorRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKKworJSBjeXJpbGxpYyAtPiBsYXRpbgorPFUwNDUyPiAiPFUwMTExPiI7IjxVMDA2ND48VTAwNkE+IiAlIGQtCis8VTA0NTM+ICI8VTAwNjc+PFUwMDZBPiIgJSBnagorPFUwNDU1PiAiPFUwMDY0PjxVMDA3QT4iICUgZHoKKzxVMDQ1OD4gIjxVMDA2QT4iICUgagorPFUwNDU5PiAiPFUwMDZDPjxVMDA2QT4iICUgbGoKKzxVMDQ1QT4gIjxVMDA2RT48VTAwNkE+IiAlIG5qCis8VTA0NUI+ICI8VTAxMDc+IjsiPFUwMDYzPiIgJSBjJworPFUwNDVDPiAiPFUwMDZCPjxVMDA2QT4iICUga2oKKzxVMDQ1Rj4gIjxVMDA2ND48VTAxN0U+IjsiPFUwMDY0PjxVMDA3QT4iICUgZHo8CisKKzxVMDQwMj4gIjxVMDExMD4iOyI8VTAwNDQ+PFUwMDZBPiIgJSBELQorPFUwNDAzPiAiPFUwMDQ3PjxVMDA2QT4iICUgR2oKKzxVMDQwNT4gIjxVMDA0ND48VTAwN0E+IiAlIER6Cis8VTA0MDg+ICI8VTAwNEE+IiAlIEoKKzxVMDQwOT4gIjxVMDA0Qz48VTAwNkE+IiAlIExqCis8VTA0MEE+ICI8VTAwNEU+PFUwMDZBPiIgJSBOagorPFUwNDBCPiAiPFUwMTA2PiI7IjxVMDA0Mz4iICUgQycKKzxVMDQwQz4gIjxVMDA0Qj48VTAwNkE+IiAlIEtqCis8VTA0MEY+ICI8VTAwNDQ+PFUwMTdFPiI7IjxVMDA2ND48VTAwN0E+IiAlIER6PAorCis8VTA0MzA+ICI8VTAwNjE+IgorPFUwNDMxPiAiPFUwMDYyPiIKKzxVMDQ0Nj4gIjxVMDA2Mz4iCis8VTA0MzQ+ICI8VTAwNjQ+IgorPFUwNDM1PiAiPFUwMDY1PiIKKzxVMDQ0ND4gIjxVMDA2Nj4iCis8VTA0MzM+ICI8VTAwNjc+IgorPFUwNDQ1PiAiPFUwMDY4PiIKKzxVMDQzOD4gIjxVMDA2OT4iCis8VTA0M0E+ICI8VTAwNkI+IgorPFUwNDNCPiAiPFUwMDZDPiIKKzxVMDQzQz4gIjxVMDA2RD4iCis8VTA0M0Q+ICI8VTAwNkU+IgorPFUwNDNFPiAiPFUwMDZGPiIKKzxVMDQzRj4gIjxVMDA3MD4iCis8VTA0NDA+ICI8VTAwNzI+IgorPFUwNDQxPiAiPFUwMDczPiIKKzxVMDQ0Mj4gIjxVMDA3ND4iCis8VTA0NDM+ICI8VTAwNzU+IgorPFUwNDMyPiAiPFUwMDc2PiIKKzxVMDQzNz4gIjxVMDA3QT4iCis8VTA0MzY+ICI8VTAxN0U+IjsiPFUwMDdBPiIgJSB6PAorPFUwNDQ4PiAiPFUwMTYxPiI7IjxVMDA3Mz4iICUgczwKKzxVMDQ0Nz4gIjxVMDEwRD4iOyI8VTAwNjM+IiAlIGM8CisKKzxVMDQxMD4gIjxVMDA0MT4iCis8VTA0MTE+ICI8VTAwNDI+IgorPFUwNDI2PiAiPFUwMDQzPiIKKzxVMDQxND4gIjxVMDA0ND4iCis8VTA0MTU+ICI8VTAwNDU+IgorPFUwNDI0PiAiPFUwMDQ2PiIKKzxVMDQxMz4gIjxVMDA0Nz4iCis8VTA0MjU+ICI8VTAwNDg+IgorPFUwNDE4PiAiPFUwMDQ5PiIKKzxVMDQxQT4gIjxVMDA0Qj4iCis8VTA0MUI+ICI8VTAwNEM+IgorPFUwNDFDPiAiPFUwMDREPiIKKzxVMDQxRD4gIjxVMDA0RT4iCis8VTA0MUU+ICI8VTAwNEY+IgorPFUwNDFGPiAiPFUwMDUwPiIKKzxVMDQyMD4gIjxVMDA1Mj4iCis8VTA0MjE+ICI8VTAwNTM+IgorPFUwNDIyPiAiPFUwMDU0PiIKKzxVMDQyMz4gIjxVMDA1NT4iCis8VTA0MTI+ICI8VTAwNTY+IgorPFUwNDE3PiAiPFUwMDVBPiIKKzxVMDQxNj4gIjxVMDE3RD4iOyI8VTAwNUE+IiAlIHo8Cis8VTA0Mjg+ICI8VTAxNjA+IjsiPFUwMDUzPiIgJSBzPAorPFUwNDI3PiAiPFUwMTBDPiI7IjxVMDA2Mz4iICUgYzwKKwordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworCitMQ19DT0xMQVRFCisKK2NvcHkgImlzbzE0NjUxX3QxIgorCitjb2xsYXRpbmctZWxlbWVudCA8RC1aPD4gZnJvbSAiPFUwMDQ0PjxVMDE3RD4iCitjb2xsYXRpbmctZWxlbWVudCA8RC16PD4gZnJvbSAiPFUwMDQ0PjxVMDE3RT4iCitjb2xsYXRpbmctZWxlbWVudCA8ZC1aPD4gZnJvbSAiPFUwMDY0PjxVMDE3RD4iCitjb2xsYXRpbmctZWxlbWVudCA8ZC16PD4gZnJvbSAiPFUwMDY0PjxVMDE3RT4iCisKK2NvbGxhdGluZy1lbGVtZW50IDxMLUo+IGZyb20gIjxVMDA0Qz48VTAwNEE+IgorY29sbGF0aW5nLWVsZW1lbnQgPEwtaj4gZnJvbSAiPFUwMDRDPjxVMDA2QT4iCitjb2xsYXRpbmctZWxlbWVudCA8bC1KPiBmcm9tICI8VTAwNkM+PFUwMDRBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxsLWo+IGZyb20gIjxVMDA2Qz48VTAwNkE+IgorCitjb2xsYXRpbmctZWxlbWVudCA8Ti1KPiBmcm9tICI8VTAwNEU+PFUwMDRBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxOLWo+IGZyb20gIjxVMDA0RT48VTAwNkE+IgorY29sbGF0aW5nLWVsZW1lbnQgPG4tSj4gZnJvbSAiPFUwMDZFPjxVMDA0QT4iCitjb2xsYXRpbmctZWxlbWVudCA8bi1qPiBmcm9tICI8VTAwNkU+PFUwMDZBPiIKKworY29sbGF0aW5nLXN5bWJvbCAgPGQtei1zaD4KK2NvbGxhdGluZy1zeW1ib2wgIDxsLWotc2g+Citjb2xsYXRpbmctc3ltYm9sICA8bi1qLXNoPgorCitjb2xsYXRpbmctc3ltYm9sIDxjYWN1dGU+Citjb2xsYXRpbmctc3ltYm9sIDxjY2Fyb24+Citjb2xsYXRpbmctc3ltYm9sIDxkLy8+Citjb2xsYXRpbmctc3ltYm9sIDxzY2Fyb24+Citjb2xsYXRpbmctc3ltYm9sIDx6Y2Fyb24+CisKK2NvbGxhdGluZy1zeW1ib2wgPENBUC1NSU4+Citjb2xsYXRpbmctc3ltYm9sIDxNSU4tQ0FQPgorCityZW9yZGVyLWFmdGVyIDxNSU4+Cis8TUlOLUNBUD4KK3Jlb3JkZXItYWZ0ZXIgPENBUD4KKzxDQVAtTUlOPgorCityZW9yZGVyLWFmdGVyIDxjPgorPGNhY3V0ZT4KKzxjY2Fyb24+Cis8ZD4KKzxkLXotc2g+Cis8ZC8vPgorcmVvcmRlci1hZnRlciA8bD4KKzxsLWotc2g+CityZW9yZGVyLWFmdGVyIDxuPgorPG4tai1zaD4KK3Jlb3JkZXItYWZ0ZXIgPHM+Cis8c2Nhcm9uPgorcmVvcmRlci1hZnRlciA8ej4KKzx6Y2Fyb24+CisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDYzPgorPFUwMTA3Pgk8Y2FjdXRlPjs8UENUPjs8TUlOPjtJR05PUkUKKzxVMDEwRD4JPGNjYXJvbj47PFBDVD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0Mz4KKzxVMDEwNj4JPGNhY3V0ZT47PFBDVD47PENBUD47SUdOT1JFCis8VTAxMEM+CTxjY2Fyb24+OzxQQ1Q+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA2ND4KKzxkLXo8Pgk8ZC16LXNoPjs8UENUPjs8TUlOPjtJR05PUkUKKzxVMDFDNj4JPGQtei1zaD47PFBDVD47PE1JTj47SUdOT1JFCis8ZC1aPD4JPGQtei1zaD47PFBDVD47PE1JTi1DQVA+O0lHTk9SRQorPFUwMTExPgk8ZC8vPjs8UENUPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDQ0PgorPEQtWjw+CTxkLXotc2g+OzxQQ1Q+OzxDQVA+O0lHTk9SRQorPFUwMUM0Pgk8ZC16LXNoPjs8UENUPjs8Q0FQPjtJR05PUkUKKzxELXo8Pgk8ZC16LXNoPjs8UENUPjs8Q0FQLU1JTj47SUdOT1JFCis8VTAxQzU+CTxkLXotc2g+OzxQQ1Q+OzxDQVAtTUlOPjtJR05PUkUKKzxVMDExMD4JPGQvLz47PFBDVD47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDZDPgorPGwtaj4JPGwtai1zaD47PFBDVD47PE1JTj47SUdOT1JFCis8VTAxQzk+CTxsLWotc2g+OzxQQ1Q+OzxNSU4+O0lHTk9SRQorPGwtSj4JPGwtai1zaD47PFBDVD47PE1JTi1DQVA+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNEM+Cis8TC1KPgk8bC1qLXNoPjs8UENUPjs8Q0FQPjtJR05PUkUKKzxVMDFDNz4JPGwtai1zaD47PFBDVD47PENBUD47SUdOT1JFCis8TC1qPgk8bC1qLXNoPjs8UENUPjs8Q0FQLU1JTj47SUdOT1JFCis8VTAxQzg+CTxsLWotc2g+OzxQQ1Q+OzxDQVAtTUlOPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNkU+Cis8bi1qPgk8bi1qLXNoPjs8UENUPjs8TUlOPjtJR05PUkUKKzxVMDFDQz4JPG4tai1zaD47PFBDVD47PE1JTj47SUdOT1JFCis8bi1KPgk8bi1qLXNoPjs8UENUPjs8TUlOLUNBUD47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0RT4KKzxOLUo+CTxuLWotc2g+OzxQQ1Q+OzxDQVA+O0lHTk9SRQorPFUwMUNBPgk8bi1qLXNoPjs8UENUPjs8Q0FQPjtJR05PUkUKKzxOLWo+CTxuLWotc2g+OzxQQ1Q+OzxDQVAtTUlOPjtJR05PUkUKKzxVMDFDQj4JPG4tai1zaD47PFBDVD47PENBUC1NSU4+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA3Mz4KKzxVMDE2MT4JPHNjYXJvbj47PFBDVD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA1Mz4KKzxVMDE2MD4JPHNjYXJvbj47PFBDVD47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDdBPgorPFUwMTdFPgk8emNhcm9uPjs8UENUPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDVBPgorPFUwMTdEPgk8emNhcm9uPjs8UENUPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1lbmQKKworRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgICAgICAgIjxVMDA1Mj48VTAwNTM+PFUwMDQ0PjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgICAgICI8VTA0MzQ+PFUwNDM4PjxVMDQzRD4iCittb25fZGVjaW1hbF9wb2ludCAgICAgICAgICI8VTAwMkM+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgICAiPFUwMDJFPiIKK21vbl9ncm91cGluZyAgICAgICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAgICAgMAorcF9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDAKK25fc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAgICAgICI8VTAwMkM+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAgICAiIgorZ3JvdXBpbmcgICAgICAgICAgICAgICAgICAwOzAKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKKworYWJkYXkgICAiPFUwNDNEPjxVMDQzNT48VTA0MzQ+IjsiPFUwNDNGPjxVMDQzRT48VTA0M0Q+IjsvCisgICAgICAgICI8VTA0NDM+PFUwNDQyPjxVMDQzRT4iOyI8VTA0NDE+PFUwNDQwPjxVMDQzNT4iOy8KKyAgICAgICAgIjxVMDQ0Nz48VTA0MzU+PFUwNDQyPiI7IjxVMDQzRj48VTA0MzU+PFUwNDQyPiI7LworICAgICAgICAiPFUwNDQxPjxVMDQ0Mz48VTA0MzE+IgorZGF5ICAgICAiPFUwNDNEPjxVMDQzNT48VTA0MzQ+PFUwNDM1PjxVMDQ1OT48VTA0MzA+IjsvCisgICAgICAgICI8VTA0M0Y+PFUwNDNFPjxVMDQzRD48VTA0MzU+PFUwNDM0PjxVMDQzNT48VTA0NTk+PFUwNDMwPjxVMDQzQT4iOy8KKyAgICAgICAgIjxVMDQ0Mz48VTA0NDI+PFUwNDNFPjxVMDQ0MD48VTA0MzA+PFUwNDNBPiI7LworICAgICAgICAiPFUwNDQxPjxVMDQ0MD48VTA0MzU+PFUwNDM0PjxVMDQzMD4iOy8KKyAgICAgICAgIjxVMDQ0Nz48VTA0MzU+PFUwNDQyPjxVMDQzMj48VTA0NDA+PFUwNDQyPjxVMDQzMD48VTA0M0E+IjsvCisgICAgICAgICI8VTA0M0Y+PFUwNDM1PjxVMDQ0Mj48VTA0MzA+PFUwNDNBPiI7LworICAgICAgICAiPFUwNDQxPjxVMDQ0Mz48VTA0MzE+PFUwNDNFPjxVMDQ0Mj48VTA0MzA+IgorYWJtb24gICAiPFUwNDU4PjxVMDQzMD48VTA0M0Q+IjsiPFUwNDQ0PjxVMDQzNT48VTA0MzE+IjsvCisgICAgICAgICI8VTA0M0M+PFUwNDMwPjxVMDQ0MD4iOyI8VTA0MzA+PFUwNDNGPjxVMDQ0MD4iOy8KKyAgICAgICAgIjxVMDQzQz48VTA0MzA+PFUwNDU4PiI7IjxVMDQ1OD48VTA0NDM+PFUwNDNEPiI7LworICAgICAgICAiPFUwNDU4PjxVMDQ0Mz48VTA0M0I+IjsiPFUwNDMwPjxVMDQzMj48VTA0MzM+IjsvCisgICAgICAgICI8VTA0NDE+PFUwNDM1PjxVMDQzRj4iOyI8VTA0M0U+PFUwNDNBPjxVMDQ0Mj4iOy8KKyAgICAgICAgIjxVMDQzRD48VTA0M0U+PFUwNDMyPiI7IjxVMDQzND48VTA0MzU+PFUwNDQ2PiIKK21vbiAgICAgIjxVMDQ1OD48VTA0MzA+PFUwNDNEPjxVMDQ0Mz48VTA0MzA+PFUwNDQwPiI7LworICAgICAgICAiPFUwNDQ0PjxVMDQzNT48VTA0MzE+PFUwNDQwPjxVMDQ0Mz48VTA0MzA+PFUwNDQwPiI7LworICAgICAgICAiPFUwNDNDPjxVMDQzMD48VTA0NDA+PFUwNDQyPiI7LworICAgICAgICAiPFUwNDMwPjxVMDQzRj48VTA0NDA+PFUwNDM4PjxVMDQzQj4iOy8KKyAgICAgICAgIjxVMDQzQz48VTA0MzA+PFUwNDU4PiI7LworICAgICAgICAiPFUwNDU4PjxVMDQ0Mz48VTA0M0Q+IjsvCisgICAgICAgICI8VTA0NTg+PFUwNDQzPjxVMDQzQj4iOy8KKyAgICAgICAgIjxVMDQzMD48VTA0MzI+PFUwNDMzPjxVMDQ0Mz48VTA0NDE+PFUwNDQyPiI7LworICAgICAgICAiPFUwNDQxPjxVMDQzNT48VTA0M0Y+PFUwNDQyPjxVMDQzNT48VTA0M0M+PFUwNDMxPjxVMDQzMD48VTA0NDA+IjsvCisgICAgICAgICI8VTA0M0U+PFUwNDNBPjxVMDQ0Mj48VTA0M0U+PFUwNDMxPjxVMDQzMD48VTA0NDA+IjsvCisgICAgICAgICI8VTA0M0Q+PFUwNDNFPjxVMDQzMj48VTA0MzU+PFUwNDNDPjxVMDQzMT48VTA0MzA+PFUwNDQwPiI7LworICAgICAgICAiPFUwNDM0PjxVMDQzNT48VTA0NDY+PFUwNDM1PjxVMDQzQz48VTA0MzE+PFUwNDMwPjxVMDQ0MD4iCisKK2RfdF9mbXQgIjxVMDAyNT48VTAwNDE+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjA+LworPFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMkU+PFUwMDIwPjxVMDAyNT48VTAwNTQ+LworPFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkU+PFUwMDI1PjxVMDA2RD48VTAwMkU+PFUwMDI1PjxVMDA1OT48VTAwMkU+IgordF9mbXQgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICIiOyIiCit0X2ZtdF9hbXBtICI8VTAwMjU+PFUwMDU0PiIKK2RhdGVfZm10ICAiPFUwMDI1PjxVMDA2MT48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDJFPjxVMDAyMD4vCis8VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyRT48VTAwMjA+PFUwMDIwPjxVMDAyNT48VTAwNDg+LworPFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNUE+PFUwMDBBPiIKKyUgd2VlayAgICA3OzE5OTcxMjAxOzQKK2ZpcnN0X3dlZWtkYXkgMgorZmlyc3Rfd29ya2RheSAyCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTA0MTQ+PFUwNDM0PjxVMDA0ND48VTAwNjQ+PFUwMDU5PjxVMDA3OT48VTAwNUQ+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTA0MUQ+PFUwNDNEPjxVMDA0RT48VTAwNkU+PFUwMDVEPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19QQVBFUgoraGVpZ2h0ICAgMjk3Cit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCituYW1lX2dlbiAgICAiIgorbmFtZV9tciAgICAgIjxVMDQzMz48VTAwMkQ+PFUwNDM0PjxVMDQzOD48VTA0M0Q+IgorbmFtZV9tcnMgICAgIjxVMDQzMz48VTAwMkQ+PFUwNDUyPjxVMDQzMD4iCituYW1lX21pc3MgICAiPFUwNDMzPjxVMDAyRD48VTA0NTI+PFUwNDM4PjxVMDQ0Nj48VTA0MzA+IgorbmFtZV9tcyAgICAgIjxVMDQzMz48VTAwMkQ+PFUwNDUyPjxVMDQzMD4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgICAiPFUwMDUyPjxVMDA1Mz4iCitjb3VudHJ5X2FiMyAgICI8VTAwNTM+PFUwMDUyPjxVMDA0Mj4iCislIEZJWE1FOiBjb3VudHJ5X3Bvc3QgaXMgcHJvYmFibHkgaW5jb3JyZWN0Citjb3VudHJ5X3Bvc3QgICI8VTAwNTM+PFUwMDUyPjxVMDA0Mj4iCitjb3VudHJ5X25hbWUgICI8VTA0MjE+PFUwNDQwPjxVMDQzMT48VTA0Mzg+PFUwNDU4PjxVMDQzMD4iCitjb3VudHJ5X251bSAgIDY4OAorY291bnRyeV9jYXIgICAiPFUwMDUzPjxVMDA1Mj48VTAwNDI+IgorJSBGSVhNRTogSVNCTiBjb2RlIGlzIHdoYXQ/ICI4NiIgdGhhdCBwcmVjZWVkZXMgYWxsIHRoZSBudW1iZXJzPworY291bnRyeV9pc2JuICAiPFUwMDM4PjxVMDAzNj4iCitsYW5nX25hbWUgICAgICI8VTA0NDE+PFUwNDQwPjxVMDQzRj48VTA0NDE+PFUwNDNBPjxVMDQzOD4iCitsYW5nX3Rlcm0gICAgICI8VTAwNzM+PFUwMDcyPjxVMDA3MD4iCitsYW5nX2xpYiAgICAgICI8VTAwNzM+PFUwMDYzPjxVMDA2Mz4iCitsYW5nX2FiCSAgICAgICI8VTAwNzM+PFUwMDcyPiIKK0VORCBMQ19BRERSRVNTCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK3RlbF9kb21fZm10ICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyMD48VTAwMjU+PFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzM+PFUwMDM4PjxVMDAzMT4iCitpbnRfc2VsZWN0ICAgICAiPFUwMDM5PjxVMDAzOT4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3NyX1JTQGxhdGluIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc3JfUlNAbGF0aW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA3ZjUxNQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3NyX1JTQGxhdGluCkBAIC0wLDAgKzEsMTc0IEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgU2VyYmlhbiBMYW5ndWFnZSBMb2NhbGUgZm9yIFNlcmJpYQorJSBTb3VyY2U6IHNyX1lVLCBzcl9DUyBsb2NhbGVzCislIEFkZHJlc3M6CislCislIENvbnRhY3Q6IERhbmlsbyBTZWdhbgorJSBFbWFpbDogZGFuaWxvQGdub21lLm9yZworJSBUZWw6ICszODEgNjMgMzIzNDU2CislIEZheDogbm9uZQorJSBMYW5ndWFnZTogc3IKKyUgVGVycml0b3J5OiBSUworJSBSZXZpc2lvbjogMS4zCislIERhdGU6IDIwMDYtMTAtMDkKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogVVRGLTgsIElTTy04ODU5LTIKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKyUKKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlNlcmJpYW4gTGF0aW4gbG9jYWxlIGZvciBTZXJiaWEiCitzb3VyY2UgICAgICJzcl9ZVSwgc3JfQ1MgbG9jYWxlIgorYWRkcmVzcyAgICAiIgorY29udGFjdCAgICAiRGFuaWxvIFNlZ2FuIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIlNlcmJpYW4iCit0ZXJyaXRvcnkgICJTZXJiaWEiCityZXZpc2lvbiAgICIxLjMiCitkYXRlICAgICAgICIyMDA2LTEwLTA5IgorYXVkaWVuY2UgICAiZ2VuZXJhbCIKK2FwcGxpY2F0aW9uICAgIkdOVSBsb2NhbGUiCithYmJyZXZpYXRpb24gICIiCislCitjYXRlZ29yeSAgImkxOG46MTk5NyI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiaTE4bjoxOTk3IjtMQ19DVFlQRQorY2F0ZWdvcnkgICJpMThuOjE5OTciO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiaTE4bjoxOTk3IjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJpMThuOjE5OTciO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiaTE4bjoxOTk3IjtMQ19USU1FCitjYXRlZ29yeSAgImkxOG46MTk5NyI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiaTE4bjoxOTk3IjtMQ19QQVBFUgorY2F0ZWdvcnkgICJpMThuOjE5OTciO0xDX05BTUUKK2NhdGVnb3J5ICAiaTE4bjoxOTk3IjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImkxOG46MTk5NyI7TENfVEVMRVBIT05FCitjYXRlZ29yeSAgImkxOG46MTk5NyI7TENfTUVBU1VSRU1FTlQKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiaTE4biIKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCitjb3B5ICJzcl9SUyIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAgICI8VTAwNTI+PFUwMDUzPjxVMDA0ND48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICAgICAiPFUwMDY0PjxVMDA2OT48VTAwNkU+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICAgICAiPFUwMDJDPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAgICAgIjxVMDAyRT4iCittb25fZ3JvdXBpbmcgICAgICAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgICAgMAorZnJhY19kaWdpdHMgICAgICAgICAgICAgICAwCitwX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgICAgICAxCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworY29weSAic3JfUlMiCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICI8VTAwNkU+PFUwMDY1PjxVMDA2ND4iOyI8VTAwNzA+PFUwMDZGPjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA3NT48VTAwNzQ+PFUwMDZGPiI7IjxVMDA3Mz48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAiPFUwMTBEPjxVMDA2NT48VTAwNzQ+IjsiPFUwMDcwPjxVMDA2NT48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDc1PjxVMDA2Mj4iCitkYXkgICAgICI8VTAwNkU+PFUwMDY1PjxVMDA2ND48VTAwNjU+PFUwMDZDPjxVMDA2QT48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNzA+PFUwMDZGPjxVMDA2RT48VTAwNjU+PFUwMDY0PjxVMDA2NT48VTAwNkM+PFUwMDZBPjxVMDA2MT48VTAwNkI+IjsvCisgICAgICAgICI8VTAwNzU+PFUwMDc0PjxVMDA2Rj48VTAwNzI+PFUwMDYxPjxVMDA2Qj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNzI+PFUwMDY1PjxVMDA2ND48VTAwNjE+IjsvCisgICAgICAgICI8VTAxMEQ+PFUwMDY1PjxVMDA3ND48VTAwNzY+PFUwMDcyPjxVMDA3ND48VTAwNjE+PFUwMDZCPiI7LworICAgICAgICAiPFUwMDcwPjxVMDA2NT48VTAwNzQ+PFUwMDYxPjxVMDA2Qj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNzU+PFUwMDYyPjxVMDA2Rj48VTAwNzQ+PFUwMDYxPiIKK2FibW9uICAgIjxVMDA2QT48VTAwNjE+PFUwMDZFPiI7IjxVMDA2Nj48VTAwNjU+PFUwMDYyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsiPFUwMDYxPjxVMDA3MD48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA2QT4iOyI8VTAwNkE+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPiI7IjxVMDA2MT48VTAwNzY+PFUwMDY3PiI7LworICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNzA+IjsiPFUwMDZGPjxVMDA2Qj48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA3Nj4iOyI8VTAwNjQ+PFUwMDY1PjxVMDA2Mz4iCittb24gICAgICI8VTAwNkE+PFUwMDYxPjxVMDA2RT48VTAwNzU+PFUwMDYxPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2Nj48VTAwNjU+PFUwMDYyPjxVMDA3Mj48VTAwNzU+PFUwMDYxPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNzA+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA2QT4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZFPjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNzY+PFUwMDY3PjxVMDA3NT48VTAwNzM+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNzA+PFUwMDc0PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNkY+PFUwMDZCPjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA3Nj48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjE+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDY0PjxVMDA2NT48VTAwNjM+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDYxPjxVMDA3Mj4iCisKK2RfdF9mbXQgIjxVMDAyNT48VTAwNDE+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjA+LworPFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMkU+PFUwMDIwPjxVMDAyNT48VTAwNTQ+LworPFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkU+PFUwMDI1PjxVMDA2RD48VTAwMkU+PFUwMDI1PjxVMDA1OT48VTAwMkU+IgordF9mbXQgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICIiOyIiCit0X2ZtdF9hbXBtICI8VTAwMjU+PFUwMDU0PiIKK2RhdGVfZm10ICAiPFUwMDI1PjxVMDA2MT48VTAwMmM+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDJFPjxVMDAyMD4vCis8VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyRT48VTAwMjA+PFUwMDIwPjxVMDAyNT48VTAwNDg+LworPFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNUE+PFUwMDBBPiIKKyUgd2VlayAgICA3OzE5OTcxMjAxOzQKK2ZpcnN0X3dlZWtkYXkgMgorZmlyc3Rfd29ya2RheSAyCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNjQ+PFUwMDQ0PjxVMDA3OT48VTAwNTk+PFUwMDVEPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCitjb3B5ICJzcl9SUyIKK0VORCBMQ19QQVBFUgorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCituYW1lX2dlbiAgICAiIgorbmFtZV9tciAgICAgIjxVMDA2Nz48VTAwMkQ+PFUwMDY0PjxVMDA2OT48VTAwNkU+IgorbmFtZV9tcnMgICAgIjxVMDA2Nz48VTAwMkQ+PFUwMTExPjxVMDA2MT4iCituYW1lX21pc3MgICAiPFUwMDY3PjxVMDAyRD48VTAxMTE+PFUwMDY5PjxVMDA2Mz48VTAwNjE+IgorbmFtZV9tcyAgICAgIjxVMDA2Nz48VTAwMkQ+PFUwMTExPjxVMDA2MT4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgICAiPFUwMDUyPjxVMDA1Mz4iCitjb3VudHJ5X2FiMyAgICI8VTAwNTM+PFUwMDUyPjxVMDA0Mj4iCitjb3VudHJ5X3Bvc3QgICI8VTAwNTM+PFUwMDUyPjxVMDA0Mj4iCitjb3VudHJ5X25hbWUgICI8VTAwNTM+PFUwMDcyPjxVMDA2Mj48VTAwNjk+PFUwMDZBPjxVMDA2MT48VTAwMjA+PFUwMDY5Pi8KKzxVMDAyMD48VTAwNDM+PFUwMDcyPjxVMDA2RT48VTAwNjE+PFUwMDIwPjxVMDA0Nz48VTAwNkY+PFUwMDcyPjxVMDA2MT4iCitjb3VudHJ5X251bSAgIDY4OAorY291bnRyeV9jYXIgICAiPFUwMDUzPjxVMDA1Mj48VTAwNDI+IgorY291bnRyeV9pc2JuICAiPFUwMDM4PjxVMDAzNj4iCitsYW5nX25hbWUgICAgICI8VTAwNzM+PFUwMDcyPjxVMDA3MD48VTAwNzM+PFUwMDZCPjxVMDA2OT4iCitsYW5nX3Rlcm0gICAgICI8VTAwNzM+PFUwMDcyPjxVMDA3MD4iCitsYW5nX2xpYiAgICAgICI8VTAwNzM+PFUwMDYzPjxVMDA2Mz4iCitsYW5nX2FiCSAgICAgICI8VTAwNzM+PFUwMDcyPiIKK0VORCBMQ19BRERSRVNTCisKK0xDX1RFTEVQSE9ORQorY29weSAic3JfUlMiCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJzcl9SUyIKK0VORCBMQ19NRUFTVVJFTUVOVApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc3NfWkEgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9zc19aQQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzAwNjBlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc3NfWkEKQEAgLTAsMCArMSwyODggQEAKK2VzY2FwZV9jaGFyICAvCitjb21tZW50X2NoYXIgICUKKworJSBDaGFyc2V0OiBVVEYtOAorCislIENoYW5nZUxvZworJSAwLjMgKDIwMDUtMTAtMTMpOgorJSAgICAgMjAwNS0xMC0xMiBEd2F5bmUgQmFpbGV5IDxkd2F5bmVAdHJhbnNsYXRlLm9yZy56YT4KKyUgICAgICAgLSBBZGRlZCAnQ2hhcnNldDogVVRGLTgnIGluZm9ybWF0aW9uCislICAgICAgIC0gVXBkYXRlIGNvbnRhY3QgaW5mb3JtYXRpb24KKyUgICAgICAgLSBBbGxpZ24gc3BlbGxpbmdzIG9mIG1vbnRoIGFuZCB3ZWVrZGF5IG5hbWVzIHdpdGggRGVwdC4gb2YKKyUgICAgICAgICBBcnQgYW5kIEN1bHR1cmUnczogTXVsdGlsaW5ndWFsIE1hdGhlbWF0aWNzIERpY3Rpb25hcnkKKyUgMC4yICgyMDA0LTExLTA5KToKKyUgICAgIDIwMDQtMTEtMDkgRHdheW5lIEJhaWxleSA8ZHdheW5lQHRyYW5zbGF0ZS5vcmcuemE+CislICAgICAgIC0gU2hvcnQgbW9udGggbmFtZXMgY29tbWVudCBjb3JyZWN0ZWQgdG8gbWF0Y2ggdmFsdWVzIGluIGFibW9uCislICAgICAgIC0gQ29ycmVjdCB5ZXNleHByIHJlZ2V4CislICAgICAgIC0gPFVOTk5OPiBlc2NhcGVkIGFsbCBlbnRyaWVzCislICAgICAyMDA0LTExLTA4IER3YXluZSBCYWlsZXkgPGR3YXluZUB0cmFuc2xhdGUub3JnLnphPgorJSAgICAgICAtIENoYW5nZWQgYWxsIGNvbnRhY3QgZGV0YWlscworJSAgICAgICAtIENoYW5nZSAlZCB0byAlLWUgZm9yIGRfdF9mbXQgYW5kIGRhdGVfZm10CislICAgICAgIC0gUmVtb3ZlIC4qIGZyb20geWVzL25vZXhwcgorJSAgICAgICAtIDxVTk5OTj4gZXNjYXBlZCBzb21lIGVudHJpZXMKKyUgICAgIDIwMDQtMDMtMzAgRHdheW5lIEJhaWxleSA8ZHdheW5lQHRyYW5zbGF0ZS5vcmcuemE+CislICAgICAgIC0gQWRkZWQgY291bnRyeV9hYjIvMywgY291bnRyeV9udW0KKyUgICAgIDIwMDQtMDItMjcgRHdheW5lIEJhaWxleSA8ZHdheW5lQHRyYW5zbGF0ZS5vcmcuemE+CislICAgICAgIC0gQ29ycmVjdCBjYXBhdGlsaXNhdGlvbiBvZiBsYW5nX25hbWUKKyUgMC4xICgyMDA0LTAyLTI0KToKKyUJICAgIC0gSW5pdGlhbCBTd2F0aSBsb2NhbGUgZm9yIFNvdXRoIEFmcmljYQorJSAgICAgICAgIGJ5IFp1emEgU29mdHdhcmUgRm91bmRhdGlvbgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiU3dhdGkgbG9jYWxlIGZvciBTb3V0aCBBZnJpY2EiCitzb3VyY2UgICAgICJadXphIFNvZnR3YXJlIEZvdW5kYXRpb24gKFRyYW5zbGF0ZS5vcmcuemEpIgorYWRkcmVzcyAgICAiUE8gQm94IDI4MzY0LCBTdW5ueXNpZGUsIDAxMzIsIFNvdXRoIEFmcmljYSIKK2NvbnRhY3QgICAgIkR3YXluZSBCYWlsZXkiCitlbWFpbCAgICAgICJkd2F5bmVAdHJhbnNsYXRlLm9yZy56YSIKK3RlbCAgICAgICAgIisyNyAxMiA0NjAgMTA5NSIKK2ZheCAgICAgICAgIisyNyAxMiA0NjAgMTA5NSIKK2xhbmd1YWdlICAgIlN3YXRpIgordGVycml0b3J5ICAiU291dGggQWZyaWNhIgorcmV2aXNpb24gICAiMC4zIgorZGF0ZSAgICAgICAiMjAwNS0xMC0xMyIKKyUKK2NhdGVnb3J5ICAic3NfWkE6MjAwNCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAic3NfWkE6MjAwNCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAic3NfWkE6MjAwNCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJzc19aQToyMDA0IjtMQ19USU1FCitjYXRlZ29yeSAgInNzX1pBOjIwMDQiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAic3NfWkE6MjAwNCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAic3NfWkE6MjAwNCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAic3NfWkE6MjAwNCI7TENfUEFQRVIKK2NhdGVnb3J5ICAic3NfWkE6MjAwNCI7TENfTkFNRQorY2F0ZWdvcnkgICJzc19aQToyMDA0IjtMQ19BRERSRVNTCitjYXRlZ29yeSAgInNzX1pBOjIwMDQiO0xDX1RFTEVQSE9ORQorY2F0ZWdvcnkgICJzc19aQToyMDA0IjtMQ19NRUFTVVJFTUVOVAorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKKyUgVXNlIHRoZSBjaGFyYWN0ZXJzIGRlc2NyaWJlZCBpbiB0aGUgY2hhcm1hcCBmaWxlICJpMThuLnRneiIKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEgaS5lLgorJSB1c2UgdGhlIHJ1bGVzIHRoZXJlIHdoZW4gbWFraW5nIG9yZGVyZWQgbGlzdHMgb2Ygd29yZHMuCitjb3B5ICJpc28xNDY1MV90MSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCitjb3B5ICJlbl9aQSIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJlbl9aQSIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKKworJSBhYmRheSAtIFRoZSBhYmJyZXZpYXRpb25zIGZvciB0aGUgd2VlayBkYXlzOgorJSAtIFNvbiwgTXNvLCBCaWwsIFRzYSwgTmUsIEhsYSwgTWdjCithYmRheSAgICAgICAiPFUwMDUzPjxVMDA2Rj48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA3Mz48VTAwNkY+IjsvCisgICAgICAgICAgICAiPFUwMDQyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA3Mz48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2NT4iOy8KKyAgICAgICAgICAgICI8VTAwNDg+PFUwMDZDPjxVMDA2MT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDY3PjxVMDA2Mz4iCisKKyUgZGF5IC0gVGhlIGZ1bGwgbmFtZXMgb2YgdGhlIHdlZWsgZGF5czoKKyUgLSBMaXNvbnRmbywgdU1zb21idWx1a28sIExlc2liaWxpLCBMZXNpdHNhdGZ1LCBMZXNpbmUsIExlc2lobGFudSwgdU1nY2liZWxvCitkYXkgICAgICAgICAiPFUwMDRDPjxVMDA2OT48VTAwNzM+PFUwMDZGPjxVMDA2RT48VTAwNzQ+PFUwMDY2PjxVMDA2Rj4iOy8KKyAgICAgICAgICAgICI8VTAwNzU+PFUwMDREPjxVMDA3Mz48VTAwNkY+PFUwMDZEPjxVMDA2Mj48VTAwNzU+PFUwMDZDPjxVMDA3NT48VTAwNkI+PFUwMDZGPiI7LworICAgICAgICAgICAgIjxVMDA0Qz48VTAwNjU+PFUwMDczPjxVMDA2OT48VTAwNjI+PFUwMDY5PjxVMDA2Qz48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDRDPjxVMDA2NT48VTAwNzM+PFUwMDY5PjxVMDA3ND48VTAwNzM+PFUwMDYxPjxVMDA3ND48VTAwNjY+PFUwMDc1PiI7LworICAgICAgICAgICAgIjxVMDA0Qz48VTAwNjU+PFUwMDczPjxVMDA2OT48VTAwNkU+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA0Qz48VTAwNjU+PFUwMDczPjxVMDA2OT48VTAwNjg+PFUwMDZDPjxVMDA2MT48VTAwNkU+PFUwMDc1PiI7LworICAgICAgICAgICAgIjxVMDA3NT48VTAwNEQ+PFUwMDY3PjxVMDA2Mz48VTAwNjk+PFUwMDYyPjxVMDA2NT48VTAwNkM+PFUwMDZGPiIKKworJSBhYm1vbiAtIFRoZSBhYmJyZXZpYXRpb25zIGZvciB0aGUgbW9udGhzCislIC0gQmhpLCBWYW4sIFZ1bCwgTWFiLCBJbmssIE5obCwgS2hvLCBOZ2MsIE55bywgSW1wLCBMd2UsIE5nbworYWJtb24gICAgICAgIjxVMDA0Mj48VTAwNjg+PFUwMDY5PiI7IjxVMDA1Nj48VTAwNjE+PFUwMDZFPiI7LworICAgICAgICAgICAgIjxVMDA1Nj48VTAwNzU+PFUwMDZDPiI7IjxVMDA0RD48VTAwNjE+PFUwMDYyPiI7LworICAgICAgICAgICAgIjxVMDA0Qj48VTAwNjg+PFUwMDZCPiI7IjxVMDA0RT48VTAwNjg+PFUwMDZDPiI7LworICAgICAgICAgICAgIjxVMDA0Qj48VTAwNjg+PFUwMDZGPiI7IjxVMDA0RT48VTAwNjc+PFUwMDYzPiI7LworICAgICAgICAgICAgIjxVMDA0RT48VTAwNzk+PFUwMDZGPiI7IjxVMDA0OT48VTAwNkQ+PFUwMDcwPiI7LworICAgICAgICAgICAgIjxVMDA0Qz48VTAwNzc+PFUwMDY1PiI7IjxVMDA0RT48VTAwNjc+PFUwMDZGPiIKKworJSBtb24gLSBUaGUgZnVsbCBuYW1lcyBvZiB0aGUgbW9udGhzIC0KKyUgLSBCaGltYmlkdndhbmUsIGlOZGxvdmFuZSwgaU5kbG92dWxlbmtodWx1LCBNYWJhc2EsIElua2h3ZW5raHdldGksIGlOaGxhYmEKKyUgICBLaG9sd2FuZSwgaU5nY2ksIGlOeW9uaSwgSW1wYWxhLCBMd2V0aSwgaU5nb25nb25pCittb24gICAgICAgICAiPFUwMDQyPjxVMDA2OD48VTAwNjk+PFUwMDZEPjxVMDA2Mj48VTAwNjk+PFUwMDY0PjxVMDA3Nj48VTAwNzc+PFUwMDYxPjxVMDA2RT48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDY5PjxVMDA0RT48VTAwNjQ+PFUwMDZDPjxVMDA2Rj48VTAwNzY+PFUwMDYxPjxVMDA2RT48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDY5PjxVMDA0RT48VTAwNjQ+PFUwMDZDPjxVMDA2Rj48VTAwNzY+PFUwMDc1PjxVMDA2Qz48VTAwNjU+PFUwMDZFPjxVMDA2Qj48VTAwNjg+PFUwMDc1PjxVMDA2Qz48VTAwNzU+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNjI+PFUwMDYxPjxVMDA3Mz48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDQ5PjxVMDA2RT48VTAwNkI+PFUwMDY4PjxVMDA3Nz48VTAwNjU+PFUwMDZFPjxVMDA2Qj48VTAwNjg+PFUwMDc3PjxVMDA2NT48VTAwNzQ+PFUwMDY5PiI7LworICAgICAgICAgICAgIjxVMDA2OT48VTAwNEU+PFUwMDY4PjxVMDA2Qz48VTAwNjE+PFUwMDYyPjxVMDA2MT4iOy8KKyAgICAgICAgICAgICI8VTAwNEI+PFUwMDY4PjxVMDA2Rj48VTAwNkM+PFUwMDc3PjxVMDA2MT48VTAwNkU+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA2OT48VTAwNEU+PFUwMDY3PjxVMDA2Mz48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDY5PjxVMDA0RT48VTAwNzk+PFUwMDZGPjxVMDA2RT48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDQ5PjxVMDA2RD48VTAwNzA+PFUwMDYxPjxVMDA2Qz48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDRDPjxVMDA3Nz48VTAwNjU+PFUwMDc0PjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNjk+PFUwMDRFPjxVMDA2Nz48VTAwNkY+PFUwMDZFPjxVMDA2Nz48VTAwNkY+PFUwMDZFPjxVMDA2OT4iCisKKyUgQWJyZXZpYXRlZCBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uIHRvIGJlIHJlZmVyZW5jZWQgYnkgdGhlICIlYyIgZmllbGQgZGVzY3JpcHRvciAtCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDAyRD48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorJSAiJWEiIChzaG9ydCB3ZWVrZGF5IG5hbWUpLAorJSAiJS1lIiAoZGF5IG9mIG1vbnRoIGFzIGEgZGVjaW1hbCBudW1iZXIpLAorJSAiJWIiIChzaG9ydCBtb250aCBuYW1lKSwKKyUgIiVZIiAoeWVhciB3aXRoIGNlbnR1cnkgYXMgYSBkZWNpbWFsIG51bWJlciksCislICIlVCIgKDI0LWhvdXIgY2xvY2sgdGltZSBpbiBmb3JtYXQgSEg6TU06U1MpLAorJSAiJVoiIChUaW1lIHpvbmUgbmFtZSkKKworJSBEYXRlIHJlcHJlc2VudGF0aW9uIHRvIGJlIHJlZmVyZW5jZWQgYnkgdGhlICIleCIgZmllbGQgZGVzY3JpcHRvciAtCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDU5PiIKKyUgIiVkLyVtLyVZIiwgZGF5L21vbnRoL3llYXIgYXMgZGVjaW1hbCBudW1iZXJzICgwMS8wMS8yMDAwKS4KKworJSBUaW1lIHJlcHJlc2VudGF0aW9uIHRvIGJlIHJlZmVyZW5jZWQgYnkgdGhlICIlWCIgZmllbGQgZGVzY3JpcHRvciAtCit0X2ZtdCAgICAgICAiPFUwMDI1PjxVMDA1ND4iCislICIlVCIgKDI0LWhvdXIgY2xvY2sgdGltZSBpbiBmb3JtYXQgSEg6TU06U1MpCisKKyUgRGVmaW5lIHJlcHJlc2VudGF0aW9uIG9mIGFudGUgbWVyaWRpZW0gYW5kIHBvc3QgbWVyaWRpZW0gc3RyaW5ncyAtCithbV9wbSAgICAgICAiIjsiIgorJSBUaGUgIiIgbWVhbiAnZGVmYXVsdCB0byAiQU0iIGFuZCAiUE0iLgorCislIERlZmluZSB0aW1lIHJlcHJlc2VudGF0aW9uIGluIDEyLWhvdXIgZm9ybWF0IHdpdGggImFtX3BtIiwgdG8gYmUgcmVmZXJlbmNlZCBieSB0aGUgIiVyIgordF9mbXRfYW1wbSAgIiIKKyUgVGhlICIiIG1lYW5zIHRoYXQgdGhpcyBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZC4KKworJSBEYXRlIHJlcHJlc2VudGF0aW9uIG5vdCBkZXNjcmliZWQgaW4gSVNPL0lFQyAxNDY1Mi4gQ29tZXMgb3V0IGFzIC0KKyUgIiVhICViICUtZSAlSDolTTolUyAlWiAlWSIgd2hpY2ggaXMgZGVmYXVsdCAiZGF0ZSIgY29tbWFuZCBvdXRwdXQKK2RhdGVfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDJEPjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCislCislICVhIC0gYWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lLAorJSAlYiAtIGFicmV2aWF0ZWQgbW9udGggbmFtZSwKKyUgJS1lIC0gZGF5IG9mIG1vbnRoIGFzIGEgZGVjaW1hbCBudW1iZXIgd2l0aG91dCBsZWFkaW5nIHNwYWNlICgxIHRvIDMxKSwKKyUgJUggLSBob3VyICgyNC1ob3VyIGNsb2NrKSBhcyBhIGRlY2ltYWwgbnVtYmVyICgwMCB0byAyMyksCislICVNIC0gbWludXRlIGFzIGEgZGVjaW1hbCBudW1iZXIgKDAwIHRvIDU5KSwKKyUgJVMgLSBzZWNvbmRzIGFzIGEgZGVjaW1hbCBudW1iZXIgKDAwIHRvIDU5KSwKKyUgJVogLSB0aW1lLXpvbmUgbmFtZSwKKyUgJVkgLSB5ZWFyIHdpdGggY2VudHVyeSBhcyBhIGRlY2ltYWwgbnVtYmVyLGUuZy4gMjAwMS4KKworRU5EIExDX1RJTUUKKworTENfTUVTU0FHRVMKKyUgRklYTUU6IENoZWNrIGJvdGggb2YgdGhlc2UKKyUgVGhlIGFmZmlybWF0aXZlIHJlc3BvbnNlIC0geWVibworJSAiXlt5WV0iCit5ZXNleHByICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNzk+PFUwMDU5PjxVMDA1RD4iCisKKyUgVGhlIG5lZ2F0aXZlIHJlc3BvbnNlIC0gYWt1a2hvCislICJeW25OYUFdIgorbm9leHByICAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNjE+PFUwMDQxPjxVMDA1RD4iCitFTkQgTENfTUVTU0FHRVMKKworTENfUEFQRVIKK2NvcHkgImVuX1pBIgorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQorY29weSAiZW5fWkEiCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJlbl9aQSIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCislIEZvcm1hdCBmb3IgYWRkcmVzc2luZyBhIHBlcnNvbi4KK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKKyUgIiVkJXQlZyV0JW0ldCVmIgorJSAiU2FsdXRhdGlvbiIsCislICJFbXB0eSBzdHJpbmcsIG9yIDxTcGFjZT4iLAorJSAiRmlyc3QgZ2l2ZW4gbmFtZSIsCislICJFbXB0eSBzdHJpbmcsIG9yIDxTcGFjZT4iLAorJSAiTWlkZGxlIG5hbWVzIiwKKyUgIkVtcHR5IHN0cmluZywgb3IgPFNwYWNlPiIsCislICJDbGFuIG5hbWVzIgorCislIEZJWE1FIC0gZGVmaW5lIGFsbCB0aGUgZm9sbG93aW5nIG5hbWVfKgorJSBHZW5lcmFsIHNhbHV0YXRpb24gZm9yIGFueSBzZXgKKyUgbmFtZV9nZW4gICAgIiIKKworJSBTYWx1dGF0aW9uIGZvciB1bm1hcnJpZWQgZmVtYWxlcyAtICIiCislIG5hbWVfbWlzcyAgICIiCisKKyUgU2FsdXRhdGlvbiBmb3IgbWFsZXMgLSAiIgorJSBuYW1lX21yICAgICAiIgorCislIFNhbHV0YXRpb24gZm9yIG1hcnJpZWQgZmVtYWxlcyAtICIiCislIG5hbWVfbXJzICAgICIiCisKKyUgU2FsdXRhdGlvbiB2YWxpZCBmb3IgYWxsIGZlbWFsZXMgLSAiIiAobm8gdGVybSkKKyUgbmFtZV9tcyAgICAgIiIKKworRU5EIExDX05BTUUKKworTENfQUREUkVTUworJSBDb3VudHJ5IG5hbWUgaW4gU3dhdGkgLSAiaU5pbmdpemltdSBBZnJpa2EiCitjb3VudHJ5X25hbWUgIjxVMDA2OT48VTAwNEU+PFUwMDY5PjxVMDA2RT48VTAwNjc+PFUwMDY5PjxVMDA3QT48VTAwNjk+PFUwMDZEPjxVMDA3NT48VTAwMjA+PFUwMDQxPjxVMDA2Nj48VTAwNzI+PFUwMDY5PjxVMDA2Qj48VTAwNjE+IgorCislIEFiYnJldmlhdGVkIGNvdW50cnkgcG9zdGFsIG5hbWUgLSAiWkEiCitjb3VudHJ5X3Bvc3QgIjxVMDA1QT48VTAwNDE+IgorCislIFVOIEdlbmV2ZSAxOTQ5OjY4IERpc3Rpbmd1aXNoaW5nIHNpZ25zIG9mIHZlaGljbGVzIGluIGludGVybmF0aW9uYWwgdHJhZmZpYworJSBodHRwOi8vd3d3LnVuZWNlLm9yZy90cmFucy9jb252ZW50bi9kaXN0aW5nLXNpZ25zLTUtMjAwMS5wZGYKKyUgIlpBIgorY291bnRyeV9jYXIgICAiPFUwMDVBPjxVMDA0MT4iCisKKyUgRklYTUUgZGVmaW5lIHRoZSBmb2xsb3dpbmcgY29ycmVjdGx5CislIGNvdW50cnlfaXNibiAiIgorCislIExhbmd1YWdlIG5hbWUgaW4gU3dhdGkgLSAiU2lTd2F0aSIKK2xhbmdfbmFtZSAiPFUwMDUzPjxVMDA2OT48VTAwNTM+PFUwMDc3PjxVMDA2MT48VTAwNzQ+PFUwMDY5PiIKKworJSBJU08gNjM5IHR3byBhbmQgdGhyZWUgbGV0dGVyIGxhbmd1YWdlIG5hbWVzCislIHNlZSBodHRwOi8vd3d3LmxvYy5nb3Yvc3RhbmRhcmRzL2lzbzYzOS0yL2VuZ2xhbmduLmh0bWwKKyUgInNzIiwgc3N3IgorbGFuZ19hYiAgICI8VTAwNzM+PFUwMDczPiIKK2xhbmdfdGVybSAiPFUwMDczPjxVMDA3Mz48VTAwNzc+IgorCislIFJlcHJlc2VudGF0aW9uIG9mIHBvc3RhbCBhZGRyZXNzZXMgKG1pbnVzIHRoZSBhZGRyZXNzZWUncyBuYW1lKSBpbiBTb3V0aAorJSBBZnJpY2EuIChJZ25vcmVkIGZvciBub3cpCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorJSAiJWYlTiVhJU4lZCVOJWIlTiVzICVoICVlICVyJU4leiAlVCVOJWMlTiIsIHdoaWNoIGdpdmVzIC0KKyUgImZpcm0gbmFtZSIsCislICJlbmQgb2YgbGluZSIsCislICJDL08gYWRkcmVzcyIsCislICJlbmQgb2YgbGluZSIsCislICJkZXBhcnRtZW50IG5hbWUiLAorJSAiQnVpbGRpbmcgbmFtZSIsCislICJlbmQgb2YgbGluZSIsCislICJzdHJlZXQgb3IgYmxvY2sgbmFtZSIsCislICJzcGFjZSIsCislICJob3VzZSBudW1iZXIgb3IgZGVzaWduYXRpb24iLAorJSAic3BhY2UiLAorJSAiZmxvb3IgbnVtYmVyIiwKKyUgInNwYWNlIiwKKyUgInJvb20gbnVtYmVyLCBkb29yIGRlc2lnbmF0aW9uIiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgInBvc3RhbCBjb2RlIiwKKyUgInNwYWNlIiwKKyUgInRvd24sIGNpdHkiLAorJSAiZW5kIG9mIGxpbmUiLAorJSAiY291bnRyeSBkZXNpZ25hdGlvbiBmb3IgdGhlIDxjb3VudHJ5X3Bvc3Q+IGtleXdvcmQiLAorJSAiZW5kIG9mIGxpbmUKKyUKKworJSBJU08gMzE2NiBjb3VudHJ5IG51bWJlciBhbmQgMiBhbmQgMyBsZXR0ZXIgYWJyZXZpYXRpb25zCislIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvb25saW5lZGF0L2NvdW50cmllcy5odG1sCislICJaQSIsICJaQUYiCitjb3VudHJ5X251bSAgIDcxMAorY291bnRyeV9hYjIgICAiPFUwMDVBPjxVMDA0MT4iCitjb3VudHJ5X2FiMyAgICI8VTAwNUE+PFUwMDQxPjxVMDA0Nj4iCisKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9zdF9aQSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3N0X1pBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZTM1NmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9zdF9aQQpAQCAtMCwwICsxLDI4NSBAQAorZXNjYXBlX2NoYXIgIC8KK2NvbW1lbnRfY2hhciAgJQorCislIENoYXJzZXQ6IFVURi04CisKKyUgQ2hhbmdlTG9nCislIDAuMyAoMjAwNS0xMC0xMyk6CislICAgIDIwMDUtMTAtMTIgRHdheW5lIEJhaWxleSA8ZHdheW5lQHRyYW5zbGF0ZS5vcmcuemE+CislICAgICAgLSBBZGRlZCAnQ2hhcnNldDogVVRGLTgnIGluZm9ybWF0aW9uCislICAgICAgLSBVcGRhdGUgY29udGFjdCBpbmZvcm1hdGlvbgorJSAgICAgIC0gQWxsaWduIHNwZWxsaW5ncyBvZiBtb250aCBhbmQgd2Vla2RheSBuYW1lcyB3aXRoIERlcHQuIG9mCislICAgICAgICBBcnQgYW5kIEN1bHR1cmUnczogTXVsdGlsaW5ndWFsIE1hdGhlbWF0aWNzIERpY3Rpb25hcnkKKyUgMC4yICgyMDA0LTExLTAzKToKKyUgICAgMjAwNC0xMS0wMiBEd2F5bmUgQmFpbGV5IDxkd2F5bmVAdHJhbnNsYXRlLm9yZy56YT4KKyUgICAgICAtIENoYW5nZSBhbGwgY29udGFjdCBpbmZvcm1hdGlvbgorJSAgICAgIC0gQ2hhbmdlICVlIGluIGRhdGVfZm10IGFuZCBkX3RfZm10IHRvICUtZQorJSAgICAgIC0gUmVtb3ZlIC4qIGZyb20geWVzL25vZXhwcgorJSAgICAyMDA0LTAzLTMwIER3YXluZSBCYWlsZXkgPGR3YXluZUB0cmFuc2xhdGUub3JnLnphPgorJSAgICAgIC0gQWRkZWQgY291bnRyeV9hYjIvMywgY291bnRyeV9udW0KKyUgICAgICAtIEFkZGVkIGNvdW50cnlfY2FyCislICAgIDIwMDQtMDMtMjkgRHdheW5lIEJhaWxleSA8ZHdheW5lQHRyYW5zbGF0ZS5vcmcuemE+CislICAgICAgLSBBZGRlZCBsYW5nX2FiIGFuZCBsYW5nX3Rlcm0KKyUgMC4xICgyMDAzLTA0LTIxKToKKyUgICAtIEluaXRpYWwgU290aG8gbG9jYWxlIGZvciBTb3V0aCBBZnJpY2EKKyUgICAgIGJ5IFp1emEgU29mdHdhcmUgRm91bmRhdGlvbgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiU290aG8gbG9jYWxlIGZvciBTb3V0aCBBZnJpY2EiCitzb3VyY2UgICAgICJadXphIFNvZnR3YXJlIEZvdW5kYXRpb24gKFRyYW5zbGF0ZS5vcmcuemEpIgorYWRkcmVzcyAgICAiUE8gQm94IDI4MzY0LCBTdW5ueXNpZGUsIDAxMzIsIFNvdXRoIEFmcmljYSIKK2NvbnRhY3QgICAgIkR3YXluZSBCYWlsZXkiCitlbWFpbCAgICAgICJkd2F5bmVAdHJhbnNsYXRlLm9yZy56YSIKK3RlbCAgICAgICAgIisyNyAxMiA0NjAgMTA5NSIKK2ZheCAgICAgICAgIisyNyAxMiA0NjAgMTA5NSIKK2xhbmd1YWdlICAgIlNvdGhvIgordGVycml0b3J5ICAiU291dGggQWZyaWNhIgorcmV2aXNpb24gICAiMC4zIgorZGF0ZSAgICAgICAiMjAwNS0xMC0xMyIKKyUKK2NhdGVnb3J5ICAic3RfWkE6MjAwMyI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAic3RfWkE6MjAwMyI7TENfQ1RZUEUKK2NhdGVnb3J5ICAic3RfWkE6MjAwMyI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJzdF9aQToyMDAzIjtMQ19USU1FCitjYXRlZ29yeSAgInN0X1pBOjIwMDMiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAic3RfWkE6MjAwMyI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAic3RfWkE6MjAwMyI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAic3RfWkE6MjAwMyI7TENfUEFQRVIKK2NhdGVnb3J5ICAic3RfWkE6MjAwMyI7TENfTkFNRQorY2F0ZWdvcnkgICJzdF9aQToyMDAzIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgInN0X1pBOjIwMDMiO0xDX1RFTEVQSE9ORQorY2F0ZWdvcnkgICJzdF9aQToyMDAzIjtMQ19NRUFTVVJFTUVOVAorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKKyUgVXNlIHRoZSBjaGFyYWN0ZXJzIGRlc2NyaWJlZCBpbiB0aGUgY2hhcm1hcCBmaWxlICJpMThuLnRneiIKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEgaS5lLgorJSB1c2UgdGhlIHJ1bGVzIHRoZXJlIHdoZW4gbWFraW5nIG9yZGVyZWQgbGlzdHMgb2Ygd29yZHMuCitjb3B5ICJpc28xNDY1MV90MSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCitjb3B5ICJlbl9aQSIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJlbl9aQSIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKKworJSBhYmRheSAtIFRoZSBhYmJyZXZpYXRpb25zIGZvciB0aGUgd2VlayBkYXlzOgorJSAtIFNvbiwgTW1hLCBCZWQsIFJhciwgTmUsIEhsYSwgTW9xCithYmRheSAgICAgICAiPFUwMDUzPjxVMDA2Rj48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2RD48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDQyPjxVMDA2NT48VTAwNjQ+IjsvCisgICAgICAgICAgICAiPFUwMDUyPjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2NT4iOy8KKyAgICAgICAgICAgICI8VTAwNDg+PFUwMDZDPjxVMDA2MT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDZGPjxVMDA3MT4iCisKKyUgZGF5IC0gVGhlIGZ1bGwgbmFtZXMgb2YgdGhlIHdlZWsgZGF5czoKKyUgLSBTb250YWhhLCBNYW50YWhhLCBMYWJvYmVkaSwgTGFib3Jhcm8sIExhYm9uZSwgTGFib2hsYW5vLCBNb3FlYmVsbworZGF5ICAgICAgICAgIjxVMDA1Mz48VTAwNkY+PFUwMDZFPjxVMDA3ND48VTAwNjE+PFUwMDY4PjxVMDA2MT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA2RT48VTAwNzQ+PFUwMDYxPjxVMDA2OD48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDRDPjxVMDA2MT48VTAwNjI+PFUwMDZGPjxVMDA2Mj48VTAwNjU+PFUwMDY0PjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNEM+PFUwMDYxPjxVMDA2Mj48VTAwNkY+PFUwMDcyPjxVMDA2MT48VTAwNzI+PFUwMDZGPiI7LworICAgICAgICAgICAgIjxVMDA0Qz48VTAwNjE+PFUwMDYyPjxVMDA2Rj48VTAwNkU+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA0Qz48VTAwNjE+PFUwMDYyPjxVMDA2Rj48VTAwNjg+PFUwMDZDPjxVMDA2MT48VTAwNkU+PFUwMDZGPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNkY+PFUwMDcxPjxVMDA2NT48VTAwNjI+PFUwMDY1PjxVMDA2Qz48VTAwNkY+IgorCislIGFibW9uIC0gVGhlIGFiYnJldmlhdGlvbnMgZm9yIHRoZSBtb250aHMKKyUgLSBQaGUsIEhsYSwgVGxoLCBNbWUsIE1vdCwgSmFuLCBVcHUsIFBoYSwgTGVvLCBNcGgsIFB1ZCwgVHNoCithYm1vbiAgICAgICAiPFUwMDUwPjxVMDA2OD48VTAwNjU+IjsiPFUwMDQ4PjxVMDA2Qz48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA2Qz48VTAwNDg+IjsiPFUwMDREPjxVMDA2RD48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2Rj48VTAwNzQ+IjsiPFUwMDRBPjxVMDA2MT48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDU1PjxVMDA3MD48VTAwNzU+IjsiPFUwMDUwPjxVMDA2OD48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDRDPjxVMDA2NT48VTAwNkY+IjsiPFUwMDREPjxVMDA3MD48VTAwNjg+IjsvCisgICAgICAgICAgICAiPFUwMDUwPjxVMDA3NT48VTAwNjQ+IjsiPFUwMDU0PjxVMDA3Mz48VTAwNjg+IgorCislIG1vbiAtIFRoZSBmdWxsIG5hbWVzIG9mIHRoZSBtb250aHMgLQorJSAtIFBoZXJla2dvbmcsIEhsYWtvbGEsIFRsaGFrdWJlbGUsIE1tZXNlLCBNb3RzaGVhbm9uZywgUGh1cGphbmUsCislICAgUGh1cHUsIFBoYXRvLCBMZW90c2UsIE1waGFsYW5lLCBQdWR1bmd3YW5hLCBUc2hpdHdlCittb24gICAgICAgICAiPFUwMDUwPjxVMDA2OD48VTAwNjU+PFUwMDcyPjxVMDA2NT48VTAwNkI+PFUwMDY3PjxVMDA2Rj48VTAwNkU+PFUwMDY3PiI7LworICAgICAgICAgICAgIjxVMDA0OD48VTAwNkM+PFUwMDYxPjxVMDA2Qj48VTAwNkY+PFUwMDZDPjxVMDA2MT4iOy8KKyAgICAgICAgICAgICI8VTAwNTQ+PFUwMDZDPjxVMDA2OD48VTAwNjE+PFUwMDZCPjxVMDA3NT48VTAwNjI+PFUwMDY1PjxVMDA2Qz48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2RD48VTAwNjU+PFUwMDczPjxVMDA2NT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDZGPjxVMDA3ND48VTAwNzM+PFUwMDY4PjxVMDA2NT48VTAwNjE+PFUwMDZFPjxVMDA2Rj48VTAwNkU+PFUwMDY3PiI7LworICAgICAgICAgICAgIjxVMDA1MD48VTAwNjg+PFUwMDc1PjxVMDA3MD48VTAwNkE+PFUwMDYxPjxVMDA2RT48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDUwPjxVMDA2OD48VTAwNzU+PFUwMDcwPjxVMDA3NT4iOy8KKyAgICAgICAgICAgICI8VTAwNTA+PFUwMDY4PjxVMDA2MT48VTAwNzQ+PFUwMDZGPiI7LworICAgICAgICAgICAgIjxVMDA0Qz48VTAwNjU+PFUwMDZGPjxVMDA3ND48VTAwNzM+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNzA+PFUwMDY4PjxVMDA2MT48VTAwNkM+PFUwMDYxPjxVMDA2RT48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDUwPjxVMDA3NT48VTAwNjQ+PFUwMDc1PjxVMDA2RT48VTAwNjc+PFUwMDc3PjxVMDA2MT48VTAwNkU+PFUwMDYxPiI7LworICAgICAgICAgICAgIjxVMDA1ND48VTAwNzM+PFUwMDY4PjxVMDA2OT48VTAwNzQ+PFUwMDc3PjxVMDA2NT4iCisKKyUgQWJyZXZpYXRlZCBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uIHRvIGJlIHJlZmVyZW5jZWQgYnkgdGhlICIlYyIgZmllbGQgZGVzY3JpcHRvciAtCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDAyRD48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNjI+LworPFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorCislICIlYSIgKHNob3J0IHdlZWtkYXkgbmFtZSksCislICIlLWUiIChkYXkgb2YgbW9udGggYXMgYSBkZWNpbWFsIG51bWJlciksCislICIlYiIgKHNob3J0IG1vbnRoIG5hbWUpLAorJSAiJVkiICh5ZWFyIHdpdGggY2VudHVyeSBhcyBhIGRlY2ltYWwgbnVtYmVyKSwKKyUgIiVUIiAoMjQtaG91ciBjbG9jayB0aW1lIGluIGZvcm1hdCBISDpNTTpTUyksCislICIlWiIgKFRpbWUgem9uZSBuYW1lKQorCislIERhdGUgcmVwcmVzZW50YXRpb24gdG8gYmUgcmVmZXJlbmNlZCBieSB0aGUgIiV4IiBmaWVsZCBkZXNjcmlwdG9yIC0KK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNTk+IgorJSAiJWQvJW0vJVkiLCBkYXkvbW9udGgveWVhciBhcyBkZWNpbWFsIG51bWJlcnMgKDAxLzAxLzIwMDApLgorCislIFRpbWUgcmVwcmVzZW50YXRpb24gdG8gYmUgcmVmZXJlbmNlZCBieSB0aGUgIiVYIiBmaWVsZCBkZXNjcmlwdG9yIC0KK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDU0PiIKKyUgIiVUIiAoMjQtaG91ciBjbG9jayB0aW1lIGluIGZvcm1hdCBISDpNTTpTUykKKworJSBEZWZpbmUgcmVwcmVzZW50YXRpb24gb2YgYW50ZSBtZXJpZGllbSBhbmQgcG9zdCBtZXJpZGllbSBzdHJpbmdzIC0KK2FtX3BtICAgICAgICIiOyIiCislIFRoZSAiIiBtZWFuICdkZWZhdWx0IHRvICJBTSIgYW5kICJQTSIuCisKKyUgRGVmaW5lIHRpbWUgcmVwcmVzZW50YXRpb24gaW4gMTItaG91ciBmb3JtYXQgd2l0aCAiYW1fcG0iLCB0byBiZSByZWZlcmVuY2VkIGJ5IHRoZSAiJXIiCit0X2ZtdF9hbXBtICAiIgorJSBUaGUgIiIgbWVhbnMgdGhhdCB0aGlzIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLgorCislIERhdGUgcmVwcmVzZW50YXRpb24gbm90IGRlc2NyaWJlZCBpbiBJU08vSUVDIDE0NjUyLiBDb21lcyBvdXQgYXMgLQorJSAiJWEgJWIgJS1lICVIOiVNOiVTICVaICVZIiB3aGljaCBpcyBkZWZhdWx0ICJkYXRlIiBjb21tYW5kIG91dHB1dAorZGF0ZV9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwMkQ+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKKyUKKyUgJWEgLSBhYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWUsCislICViIC0gYWJyZXZpYXRlZCBtb250aCBuYW1lLAorJSAlLWUgLSBkYXkgb2YgbW9udGggYXMgYSBkZWNpbWFsIG51bWJlciB3aXRob3V0IGxlYWRpbmcgc3BhY2UgKDEgdG8gMzEpLAorJSAlSCAtIGhvdXIgKDI0LWhvdXIgY2xvY2spIGFzIGEgZGVjaW1hbCBudW1iZXIgKDAwIHRvIDIzKSwKKyUgJU0gLSBtaW51dGUgYXMgYSBkZWNpbWFsIG51bWJlciAoMDAgdG8gNTkpLAorJSAlUyAtIHNlY29uZHMgYXMgYSBkZWNpbWFsIG51bWJlciAoMDAgdG8gNTkpLAorJSAlWiAtIHRpbWUtem9uZSBuYW1lLAorJSAlWSAtIHllYXIgd2l0aCBjZW50dXJ5IGFzIGEgZGVjaW1hbCBudW1iZXIsZS5nLiAyMDAxLgorCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworJSBGSVhNRTogQ2hlY2sgYm90aCBvZiB0aGVzZQorJSBUaGUgYWZmaXJtYXRpdmUgcmVzcG9uc2UgLQorJSAiXlt5WV0iCit5ZXNleHByICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNzk+PFUwMDU5PjxVMDA1RD4iCisKKyUgVGhlIG5lZ2F0aXZlIHJlc3BvbnNlIC0KKyUgIl5bbk5dIgorbm9leHByICAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNUQ+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCitjb3B5ICJlbl9aQSIKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK2NvcHkgImVuX1pBIgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19NRUFTVVJFTUVOVAorY29weSAiZW5fWkEiCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorJSBGb3JtYXQgZm9yIGFkZHJlc3NpbmcgYSBwZXJzb24uCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCislICIlZCV0JWcldCVtJXQlZiIKKyUgIlNhbHV0YXRpb24iLAorJSAiRW1wdHkgc3RyaW5nLCBvciA8U3BhY2U+IiwKKyUgIkZpcnN0IGdpdmVuIG5hbWUiLAorJSAiRW1wdHkgc3RyaW5nLCBvciA8U3BhY2U+IiwKKyUgIk1pZGRsZSBuYW1lcyIsCislICJFbXB0eSBzdHJpbmcsIG9yIDxTcGFjZT4iLAorJSAiQ2xhbiBuYW1lcyIKKworJSBGSVhNRSAtIGRlZmluZSBhbGwgdGhlIGZvbGxvd2luZyBuYW1lXyoKKyUgR2VuZXJhbCBzYWx1dGF0aW9uIGZvciBhbnkgc2V4CislIG5hbWVfZ2VuICAgICIiCisKKyUgU2FsdXRhdGlvbiBmb3IgdW5tYXJyaWVkIGZlbWFsZXMgLSAiIgorJSBuYW1lX21pc3MgICAiIgorCislIFNhbHV0YXRpb24gZm9yIG1hbGVzIC0gIiIKKyUgbmFtZV9tciAgICAgIiIKKworJSBTYWx1dGF0aW9uIGZvciBtYXJyaWVkIGZlbWFsZXMgLSAiIgorJSBuYW1lX21ycyAgICAiIgorCislIFNhbHV0YXRpb24gdmFsaWQgZm9yIGFsbCBmZW1hbGVzIC0gIiIgKG5vIHRlcm0pCislIG5hbWVfbXMgICAgICIiCisKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKKyUgQ291bnRyeSBuYW1lIGluIFNvdGhvIC0gIkFmcmlrYSBCb3J3YSIKK2NvdW50cnlfbmFtZSAiPFUwMDQxPjxVMDA2Nj48VTAwNzI+PFUwMDY5PjxVMDA2Qj48VTAwNjE+PFUwMDIwPjxVMDA0Mj48VTAwNkY+PFUwMDcyPjxVMDA3Nz48VTAwNjE+IgorCislIEFiYnJldmlhdGVkIGNvdW50cnkgcG9zdGFsIG5hbWUgLSAiWkEiCitjb3VudHJ5X3Bvc3QgIjxVMDA1QT48VTAwNDE+IgorCislIEZJWE1FIGRlZmluZSB0aGUgZm9sbG93aW5nIGNvcnJlY3RseQorJSBjb3VudHJ5X2lzYm4gIiIKKworJSBMYW5ndWFnZSBuYW1lIGluIFNvdGhvIC0gIlNlc290aG8iCitsYW5nX25hbWUgIjxVMDA1Mz48VTAwNjU+PFUwMDczPjxVMDA2Rj48VTAwNzQ+PFUwMDY4PjxVMDA2Rj4iCisKKyUgVU4gR2VuZXZlIDE5NDk6NjggRGlzdGluZ3Vpc2hpbmcgc2lnbnMgb2YgdmVoaWNsZXMgaW4gaW50ZXJuYXRpb25hbCB0cmFmZmljCislIGh0dHA6Ly93d3cudW5lY2Uub3JnL3RyYW5zL2NvbnZlbnRuL2Rpc3Rpbmctc2lnbnMtNS0yMDAxLnBkZgorJSAiWkEiCitjb3VudHJ5X2NhciAgICI8VTAwNUE+PFUwMDQxPiIKKworJSBJU08gNjM5IHR3byBhbmQgdGhyZWUgbGV0dGVyIGxhbmd1YWdlIG5hbWVzCislIHNlZSBodHRwOi8vd3d3LmxvYy5nb3Yvc3RhbmRhcmRzL2lzbzYzOS0yL2VuZ2xhbmduLmh0bWwKKyUgInN0IiwgInNvdCIKK2xhbmdfYWIgICAiPFUwMDczPjxVMDA3ND4iCitsYW5nX3Rlcm0gIjxVMDA3Mz48VTAwNkY+PFUwMDc0PiIKKworJSBSZXByZXNlbnRhdGlvbiBvZiBwb3N0YWwgYWRkcmVzc2VzIChtaW51cyB0aGUgYWRkcmVzc2VlJ3MgbmFtZSkgaW4gU291dGgKKyUgQWZyaWNhLiAoSWdub3JlZCBmb3Igbm93KQorcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKKyUgIiVmJU4lYSVOJWQlTiViJU4lcyAlaCAlZSAlciVOJXogJVQlTiVjJU4iLCB3aGljaCBnaXZlcyAtCislICJmaXJtIG5hbWUiLAorJSAiZW5kIG9mIGxpbmUiLAorJSAiQy9PIGFkZHJlc3MiLAorJSAiZW5kIG9mIGxpbmUiLAorJSAiZGVwYXJ0bWVudCBuYW1lIiwKKyUgIkJ1aWxkaW5nIG5hbWUiLAorJSAiZW5kIG9mIGxpbmUiLAorJSAic3RyZWV0IG9yIGJsb2NrIG5hbWUiLAorJSAic3BhY2UiLAorJSAiaG91c2UgbnVtYmVyIG9yIGRlc2lnbmF0aW9uIiwKKyUgInNwYWNlIiwKKyUgImZsb29yIG51bWJlciIsCislICJzcGFjZSIsCislICJyb29tIG51bWJlciwgZG9vciBkZXNpZ25hdGlvbiIsCislICJlbmQgb2YgbGluZSIsCislICJwb3N0YWwgY29kZSIsCislICJzcGFjZSIsCislICJ0b3duLCBjaXR5IiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgImNvdW50cnkgZGVzaWduYXRpb24gZm9yIHRoZSA8Y291bnRyeV9wb3N0PiBrZXl3b3JkIiwKKyUgImVuZCBvZiBsaW5lCislCisKKyUgSVNPIDMxNjYgY291bnRyeSBudW1iZXIgYW5kIDIgYW5kIDMgbGV0dGVyIGFicmV2aWF0aW9ucworJSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL29ubGluZWRhdC9jb3VudHJpZXMuaHRtbAorJSAiWkEiLCAiWkFGIgorY291bnRyeV9udW0gICA3MTAKK2NvdW50cnlfYWIyICAgIjxVMDA1QT48VTAwNDE+IgorY291bnRyeV9hYjMgICAiPFUwMDVBPjxVMDA0MT48VTAwNDY+IgorCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc3ZfRkkgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9zdl9GSQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGRhMTZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc3ZfRkkKQEAgLTAsMCArMSwxMzkgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBTd2VkaXNoIExhbmd1YWdlIExvY2FsZSBmb3IgRmlubGFuZAorJSBTb3VyY2U6IFJBUAorJSBBZGRyZXNzOiBTYW5rdCBKby8vcmdlbnMgQWxsZSA4CislICAgIERLLTE2MTUgS28vL2Jlbmhhdm4gViwgRGFubWFyaworJSBDb250YWN0OiBLZWxkIFNpbW9uc2VuCislIEVtYWlsOiBLZWxkLlNpbW9uc2VuQGRrdXVnLmRrCislIFRlbDogKzQ1IC0gMzEyMjY1NDMKKyUgRmF4OiArNDUgLSAzMzI1NjU0MworJSBMYW5ndWFnZTogc3YKKyUgVGVycml0b3J5OiBGSQorJSBSZXZpc2lvbjogNC4zCislIERhdGU6IDE5OTYtMTAtMTUKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMuZHMKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiU3dlZGlzaCBsb2NhbGUgZm9yIEZpbmxhbmQiCitzb3VyY2UgICAgICJSQVAiCithZGRyZXNzICAgICJTYW5rdCBKPFUwMEY4PnJnZW5zIEFsbGUgOCwgREstMTYxNSBLPFUwMEY4PmJlbmhhdm4gViwgRGFubWFyayIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJTd2VkaXNoIgordGVycml0b3J5ICAiRmlubGFuZCIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjkiCislCitjYXRlZ29yeSAgInN2X0ZJOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgInN2X0ZJOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgInN2X0ZJOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAic3ZfRkk6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJzdl9GSToyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgInN2X0ZJOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgInN2X0ZJOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgInN2X0ZJOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgInN2X0ZJOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAic3ZfRkk6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJzdl9GSToyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJzdl9TRSIKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCitjb3B5ICJmaV9GSSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01FU1NBR0VTCitjb3B5ICJzdl9TRSIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQorY29weSAiZmlfRkkiCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworY29weSAiZmlfRkkiCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCislIGNvcHkgInN2X1NFIgorYWJkYXkgICAgICI8VTAwNzM+PFUwMEY2PjxVMDA2RT4iOyI8VTAwNkQ+PFUwMEU1PjxVMDA2RT4iOy8KKyAgICAgICAgICAiPFUwMDc0PjxVMDA2OT48VTAwNzM+IjsiPFUwMDZGPjxVMDA2RT48VTAwNzM+IjsvCisgICAgICAgICAgIjxVMDA3ND48VTAwNkY+PFUwMDcyPiI7IjxVMDA2Nj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAgICI8VTAwNkM+PFUwMEY2PjxVMDA3Mj4iCitkYXkgICAgICAgIjxVMDA3Mz48VTAwRjY+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAgICI8VTAwNkQ+PFUwMEU1PjxVMDA2RT48VTAwNjQ+PFUwMDYxPjxVMDA2Nz4iOy8KKyAgICAgICAgICAiPFUwMDc0PjxVMDA2OT48VTAwNzM+PFUwMDY0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICAgIjxVMDA2Rj48VTAwNkU+PFUwMDczPjxVMDA2ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAgICI8VTAwNzQ+PFUwMDZGPjxVMDA3Mj48VTAwNzM+PFUwMDY0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICAgIjxVMDA2Nj48VTAwNzI+PFUwMDY1PjxVMDA2ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAgICI8VTAwNkM+PFUwMEY2PjxVMDA3Mj48VTAwNjQ+PFUwMDYxPjxVMDA2Nz4iCithYm1vbiAgICAgIjxVMDA2QT48VTAwNjE+PFUwMDZFPiI7IjxVMDA2Nj48VTAwNjU+PFUwMDYyPiI7LworICAgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNjE+PFUwMDcwPjxVMDA3Mj4iOy8KKyAgICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNkE+IjsiPFUwMDZBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPiI7IjxVMDA2MT48VTAwNzU+PFUwMDY3PiI7LworICAgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD4iOyI8VTAwNkY+PFUwMDZCPjxVMDA3ND4iOy8KKyAgICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDY0PjxVMDA2NT48VTAwNjM+IgorbW9uICAgICAgICI8VTAwNkE+PFUwMDYxPjxVMDA2RT48VTAwNzU+PFUwMDYxPjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICAgIjxVMDA2Nj48VTAwNjU+PFUwMDYyPjxVMDA3Mj48VTAwNzU+PFUwMDYxPjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3Mz4iOy8KKyAgICAgICAgICAiPFUwMDYxPjxVMDA3MD48VTAwNzI+PFUwMDY5PjxVMDA2Qz4iOy8KKyAgICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNkE+IjsvCisgICAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZFPjxVMDA2OT4iOy8KKyAgICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkM+PFUwMDY5PiI7LworICAgICAgICAgICI8VTAwNjE+PFUwMDc1PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND48VTAwNjk+IjsvCisgICAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAgICI8VTAwNkY+PFUwMDZCPjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAgIjxVMDA2ND48VTAwNjU+PFUwMDYzPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IgorZF90X2ZtdCAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAyRT48VTAwMjU+PFUwMDREPjxVMDAyRT48VTAwMjU+PFUwMDUzPiIKK2RfZm10ICAgICAiPFUwMDI1PjxVMDA1OT48VTAwMkQ+PFUwMDI1PjxVMDA2RD48VTAwMkQ+PFUwMDI1PjxVMDA2ND4iCit0X2ZtdCAgICAgIjxVMDAyNT48VTAwNDg+PFUwMDJFPjxVMDAyNT48VTAwNEQ+PFUwMDJFPjxVMDAyNT48VTAwNTM+IgorYW1fcG0gICAgICIiOyIiCit0X2ZtdF9hbXBtICAiIgorZGF0ZV9mbXQgICAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworTENfUEFQRVIKK2hlaWdodCAgIDI5Nword2lkdGggICAgMjEwCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgoraW50X3ByZWZpeCAgICAgIjxVMDAzMz48VTAwMzU+PFUwMDM4PiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgIjxVMDA0Nj48VTAwNDk+IgorY291bnRyeV9hYjMgIjxVMDA0Nj48VTAwNDk+PFUwMDRFPiIKK2NvdW50cnlfbnVtIDI0NgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3N2X0ZJQGV1cm8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9zdl9GSUBldXJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NWVmNjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9zdl9GSUBldXJvCkBAIC0wLDAgKzEsODMgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBTd2VkaXNoIExhbmd1YWdlIExvY2FsZSBmb3IgRmlubGFuZCB3aXRoIEV1cm8KKyUgTGFuZ3VhZ2U6IHN2CislIFRlcnJpdG9yeTogRkkKKyUgT3B0aW9uOiBldXJvCislIERhdGU6IDIwMDAtMDgtMjEKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogSVNPLTg4NTktMTUKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlN3ZWRpc2ggbG9jYWxlIGZvciBGaW5sYW5kIHdpdGggRXVybyIKK3NvdXJjZSAgICAgIkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiIKK2FkZHJlc3MgICAgIjU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiU3dlZGlzaCIKK3RlcnJpdG9yeSAgIkZpbmxhbmQiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA4LTIxIgorJQorY2F0ZWdvcnkgICJzdl9GSUBldXJvOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgInN2X0ZJQGV1cm86MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAic3ZfRklAZXVybzoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgInN2X0ZJQGV1cm86MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJzdl9GSUBldXJvOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAic3ZfRklAZXVybzoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJzdl9GSUBldXJvOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgInN2X0ZJQGV1cm86MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAic3ZfRklAZXVybzoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgInN2X0ZJQGV1cm86MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJzdl9GSUBldXJvOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgInN2X0ZJIgorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKK2NvcHkgImZpX0ZJIgorRU5EIExDX0NPTExBVEUKKworTENfTUVTU0FHRVMKK2NvcHkgInN2X0ZJIgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitjb3B5ICJmaV9GSUBldXJvIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgImZpX0ZJIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorY29weSAic3ZfRkkiCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorY29weSAic3ZfRkkiCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCitjb3B5ICJzdl9GSSIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgInN2X0ZJIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK2NvcHkgInN2X0ZJIgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworY29weSAic3ZfRkkiCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc3ZfU0UgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy9zdl9TRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTU4ZTI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvc3ZfU0UKQEAgLTAsMCArMSwyMjAgQEAKK2VzY2FwZV9jaGFyCS8KK2NvbW1lbnRfY2hhciAgICAlCisKKyUgU3dlZGlzaCBsYW5ndWFnZSBsb2NhbGUgZm9yIFN3ZWRlbgorJSBTb3VyY2U6IFJBUAorJSBBZGRyZXNzOiBTYW5rdCBKby8vcmdlbnMgQWxsZSA4CislICAgIERLLTE2MTUgS28vL2Jlbmhhdm4gViwgRGFubWFyaworJSBDb250YWN0OiBLZWxkIFNpbW9uc2VuCislIEVtYWlsOiBLZWxkLlNpbW9uc2VuQGRrdXVnLmRrCislIFRlbDogKzQ1IC0gMzEyMjY1NDMKKyUgRmF4OiArNDUgLSAzMzI1NjU0MworJSBMYW5ndWFnZTogc3YKKyUgVGVycml0b3J5OiBTRQorJSBSZXZpc2lvbjogNC40CislIERhdGU6IDE5OTctMDMtMTgKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCislIFRoaXMgaXMgYSA0IHN0ZXAgdmVyc2lvbi4KKyUgVGhlIFN3ZWRpc2ggVGVjaG5pY2FsIFN0YW5kYXJkCislIFROMzQ6MSByZXF1aXJlcyA3IHN0ZXBzLCBvZiB3aGljaCB0aGUKKyUgc3RlcCAzIGhhbmRsaW5nIG51bWVyaWNzIGNhbm5vdCBiZQorJSBkZWFsdCB3aXRoIGNvcnJlY3RseSB3aXRoIGN1cnJlbnQKKyUgUE9TSVggc3BlY2lmaWNhdGlvbnMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJTd2VkaXNoIGxvY2FsZSBmb3IgU3dlZGVuIgorc291cmNlICAgICAiUkFQIgorYWRkcmVzcyAgICAiU2Fua3QgSjxVMDBGOD5yZ2VucyBBbGxlIDgsIERLLTE2MTUgSzxVMDBGOD5iZW5oYXZuIFYsIERhbm1hcmsiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiU3dlZGlzaCIKK3RlcnJpdG9yeSAgIlN3ZWRlbiIKK3JldmlzaW9uICAgIjEuMCIKK2RhdGUgICAgICAgIjIwMDAtMDYtMjkiCislCitjYXRlZ29yeSAgInN2X1NFOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgInN2X1NFOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgInN2X1NFOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAic3ZfU0U6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJzdl9TRToyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgInN2X1NFOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgInN2X1NFOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgInN2X1NFOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgInN2X1NFOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAic3ZfU0U6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJzdl9TRToyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NPTExBVEUKK2NvcHkgImlzbzE0NjUxX3QxIgorCitjb2xsYXRpbmctc3ltYm9sIDxhcmluZz4KK2NvbGxhdGluZy1zeW1ib2wgPGFlPgorY29sbGF0aW5nLXN5bWJvbCA8b3VtbGF1dD4KK2NvbGxhdGluZy1zeW1ib2wgPG9zbGFzaD4KKworJSDmIGlzIHNvcnRlZCBhZnRlciDkIGFuZCDlIGV0Yy4KK3Jlb3JkZXItYWZ0ZXIgPFJFVT4KKzxMSUc+CisKK3Jlb3JkZXItYWZ0ZXIgPHo+Cis8YXJpbmc+Cis8YWU+Cis8b3VtbGF1dD4KKzxvc2xhc2g+CisKKyUgVGhlIGxldHRlciB3IGlzIG5vcm1hbGx5IG5vdCBwcmVzZW50IGluIHRoZSBTd2VkaXNoIGFscGhhYmV0LiBJdAorJSBleGlzdHMgaW4gc29tZSBuYW1lcyBpbiBTd2VkaXNoIGFuZCBmb3JlaWduIHdvcmRzLCBidXQgaXMgYWNjb3VudGVkCislIGZvciBhcyBhIHZhcmlhbnQgb2YgJ3YnLiAgV29yZHMgYW5kIG5hbWVzIHdpdGggJ3cnIGFyZSBpbiBTd2VkaXNoCislIG9yZGVyZWQgYWxwaGFiZXRpY2FsbHkgYW1vbmcgdGhlIHdvcmRzIGFuZCBuYW1lcyB3aXRoICd2Jy4gSWYgdHdvCislIHdvcmRzIG9yIG5hbWVzIGFyZSBvbmx5IHRvIGJlIGRpc3Rpbmd1aXNoZWQgYnkgJ3YnIG9yICUgJ3cnLCAndicgaXMKKyUgcGxhY2VkIGJlZm9yZSAndycuCityZW9yZGVyLWFmdGVyIDxVMDA1Nj4KKzxVMDA1Nz4gPHY+OzxCQVM+OzxDQVA+Ozx3PiAlIFcKK3Jlb3JkZXItYWZ0ZXIgPFUwMDc2PgorPFUwMDc3PiA8dj47PEJBUz47PE1JTj47PHc+ICUgdworCityZW9yZGVyLWFmdGVyIDxVMDBFMz4KKzxVMDBFND4gPGFlPjs8UkVVPjs8TUlOPjtJR05PUkUgJSDkCis8VTAwRTU+IDxhcmluZz47PFJORT47PE1JTj47SUdOT1JFICUg5QorPFUwMEU2PiA8YWU+OzxMSUc+OzxNSU4+O0lHTk9SRSAlIOYKK3Jlb3JkZXItYWZ0ZXIgPFUwMEY1PgorPFUwMEY2PiA8b3VtbGF1dD47PFJFVT47PE1JTj47SUdOT1JFICUg9gorPFUwMEY4PiA8b3NsYXNoPjs8T0JMPjs8TUlOPjtJR05PUkUgJSD4CisKK3Jlb3JkZXItYWZ0ZXIgPFUwMEMzPgorPFUwMEM0PiA8YWU+OzxSRVU+OzxDQVA+O0lHTk9SRSAlIMQKKzxVMDBDNT4gPGFyaW5nPjs8Uk5FPjs8Q0FQPjtJR05PUkUgJSDFCis8VTAwQzY+IDxhZT47PExJRz47PENBUD47SUdOT1JFICUgxgorcmVvcmRlci1hZnRlciA8VTAwRDU+Cis8VTAwRDY+IDxvdW1sYXV0Pjs8UkVVPjs8Q0FQPjtJR05PUkUgJSDWCis8VTAwRDg+IDxvc2xhc2g+OzxPQkw+OzxDQVA+O0lHTk9SRSAlINgKKworJSD8L9wgaXMgdHJlYXRlZCBsaWtlIHkvWSBidXQgaXMgc29ydGVkIGFmdGVyIHRoZSBsYXR0ZXIKK3Jlb3JkZXItYWZ0ZXIgPFUwMEZCPgorPFUwMEZDPiA8eT47PFJFVT47PE1JTj47SUdOT1JFICUg/AorcmVvcmRlci1hZnRlciA8VTAwREI+Cis8VTAwREM+IDx5Pjs8UkVVPjs8Q0FQPjtJR05PUkUgJSDcCityZW9yZGVyLWVuZAorCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAiaTE4biIKKwordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgICAgIjxVMDA1Mz48VTAwNDU+PFUwMDRCPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgICAiPFUwMDZCPjxVMDA3Mj4iCittb25fZGVjaW1hbF9wb2ludCAgICAgICAiPFUwMDJDPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAgICI8VTAwMjA+IgorbW9uX2dyb3VwaW5nICAgICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgICAwCitwX3NlcF9ieV9zcGFjZSAgICAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAgICAwCituX3NlcF9ieV9zcGFjZSAgICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgICAxCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludCAgICAgICAgICAgIjxVMDAyQz4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICAiPFUwMDIwPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgIDM7MworRU5EIExDX05VTUVSSUMKKworTENfVElNRQorYWJkYXkgICAgICI8VTAwNzM+PFUwMEY2PjxVMDA2RT4iOyI8VTAwNkQ+PFUwMEU1PjxVMDA2RT4iOy8KKyAgICAgICAgICAiPFUwMDc0PjxVMDA2OT48VTAwNzM+IjsiPFUwMDZGPjxVMDA2RT48VTAwNzM+IjsvCisgICAgICAgICAgIjxVMDA3ND48VTAwNkY+PFUwMDcyPiI7IjxVMDA2Nj48VTAwNzI+PFUwMDY1PiI7LworICAgICAgICAgICI8VTAwNkM+PFUwMEY2PjxVMDA3Mj4iCitkYXkgICAgICAgIjxVMDA3Mz48VTAwRjY+PFUwMDZFPjxVMDA2ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAgICI8VTAwNkQ+PFUwMEU1PjxVMDA2RT48VTAwNjQ+PFUwMDYxPjxVMDA2Nz4iOy8KKyAgICAgICAgICAiPFUwMDc0PjxVMDA2OT48VTAwNzM+PFUwMDY0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICAgIjxVMDA2Rj48VTAwNkU+PFUwMDczPjxVMDA2ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAgICI8VTAwNzQ+PFUwMDZGPjxVMDA3Mj48VTAwNzM+PFUwMDY0PjxVMDA2MT48VTAwNjc+IjsvCisgICAgICAgICAgIjxVMDA2Nj48VTAwNzI+PFUwMDY1PjxVMDA2ND48VTAwNjE+PFUwMDY3PiI7LworICAgICAgICAgICI8VTAwNkM+PFUwMEY2PjxVMDA3Mj48VTAwNjQ+PFUwMDYxPjxVMDA2Nz4iCithYm1vbiAgICAgIjxVMDA2QT48VTAwNjE+PFUwMDZFPiI7IjxVMDA2Nj48VTAwNjU+PFUwMDYyPiI7LworICAgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNjE+PFUwMDcwPjxVMDA3Mj4iOy8KKyAgICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNkE+IjsiPFUwMDZBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZDPiI7IjxVMDA2MT48VTAwNzU+PFUwMDY3PiI7LworICAgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD4iOyI8VTAwNkY+PFUwMDZCPjxVMDA3ND4iOy8KKyAgICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDY0PjxVMDA2NT48VTAwNjM+IgorbW9uICAgICAgICI8VTAwNkE+PFUwMDYxPjxVMDA2RT48VTAwNzU+PFUwMDYxPjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICAgIjxVMDA2Nj48VTAwNjU+PFUwMDYyPjxVMDA3Mj48VTAwNzU+PFUwMDYxPjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICAgIjxVMDA2RD48VTAwNjE+PFUwMDcyPjxVMDA3Mz4iOy8KKyAgICAgICAgICAiPFUwMDYxPjxVMDA3MD48VTAwNzI+PFUwMDY5PjxVMDA2Qz4iOy8KKyAgICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNkE+IjsvCisgICAgICAgICAgIjxVMDA2QT48VTAwNzU+PFUwMDZFPjxVMDA2OT4iOy8KKyAgICAgICAgICAiPFUwMDZBPjxVMDA3NT48VTAwNkM+PFUwMDY5PiI7LworICAgICAgICAgICI8VTAwNjE+PFUwMDc1PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND48VTAwNjk+IjsvCisgICAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAgICI8VTAwNkY+PFUwMDZCPjxVMDA3ND48VTAwNkY+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAgIjxVMDA2RT48VTAwNkY+PFUwMDc2PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IjsvCisgICAgICAgICAgIjxVMDA2ND48VTAwNjU+PFUwMDYzPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IgorZF90X2ZtdCAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAyRT48VTAwMjU+PFUwMDREPjxVMDAyRT48VTAwMjU+PFUwMDUzPiIKK2RfZm10ICAgICAiPFUwMDI1PjxVMDA1OT48VTAwMkQ+PFUwMDI1PjxVMDA2RD48VTAwMkQ+PFUwMDI1PjxVMDA2ND4iCit0X2ZtdCAgICAgIjxVMDAyNT48VTAwNDg+PFUwMDJFPjxVMDAyNT48VTAwNEQ+PFUwMDJFPjxVMDAyNT48VTAwNTM+IgorYW1fcG0gICAgICIiOyIiCit0X2ZtdF9hbXBtICAiIgorZGF0ZV9mbXQgICAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorZmlyc3Rfd2Vla2RheSAyCitmaXJzdF93b3JrZGF5IDIKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA2QT48VTAwNEE+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCitoZWlnaHQgICAyOTcKK3dpZHRoICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyRD48VTAwMjU+PFUwMDYxPjxVMDAyRD48VTAwMjU+LworPFUwMDZDPiIKK3RlbF9kb21fZm10ICAgICI8VTAwMzA+PFUwMDI1PjxVMDA2MT48VTAwMkQ+PFUwMDI1PjxVMDA2Qz4iCitpbnRfc2VsZWN0ICAgICAiPFUwMDMwPjxVMDAzMD4iCitpbnRfcHJlZml4ICAgICAiPFUwMDM0PjxVMDAzNj4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICI8VTAwNTM+PFUwMDQ1PiIKK2NvdW50cnlfYWIzICI8VTAwNTM+PFUwMDU3PjxVMDA0NT4iCitjb3VudHJ5X251bSA3NTIKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy90YV9JTiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RhX0lOCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNjgzOTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy90YV9JTgpAQCAtMCwwICsxLDI5MyBAQAorY29tbWVudF9jaGFyICAgICUKK2VzY2FwZV9jaGFyICAgICAvCislIFRhbWlsIGxhbmd1YWdlIGxvY2FsZSBmb3IgSW5kaWEuCislIENvbnRyaWJ1dGVkIGJ5IEtlbnRhcm9oIE5vamkgPGtub2ppQGpwLmlibS5jb20+IGFuZAorJSBUZXRzdWppIE9yaXRhIDxvcml0YUBqcC5pYm0uY29tPi4KKyUgRml4ZWQgZGF5IGFuZCBtb250aCBhYmJyICYgTENfTkFNRSA8c2l2YXJhal9kQGhvdG1haWwuY29tPgorJSBBZGRlZCBNYWRyYXMgVGFtaWwgTGV4aWNvbiBDb2xsYXRpb24gT3JkZXI6IFQuIFZhc2VlaGFyYW4gPHRfdmFzZWVAeWFob28uY29tPgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiVGFtaWwgbGFuZ3VhZ2UgbG9jYWxlIGZvciBJbmRpYSIKK3NvdXJjZSAgICAgIklCTSBHbG9iYWxpemF0aW9uIENlbnRlciBvZiBDb21wZXRlbmN5LCBZYW1hdG8gU29mdHdhcmUgTGFib3JhdG9yeSIKK2FkZHJlc3MgICAgIjE2MjMtMTQsIFNoaW1vdHN1cnVtYSwgWWFtYXRvLXNoaSwgS2FuYWdhd2Eta2VuLCAyNDItODUwMiwgSmFwYW4iCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAgIiIKK2ZheCAgICAgICAgICIiCitsYW5ndWFnZSAgICAiVGFtaWwiCit0ZXJyaXRvcnkgICAiSW5kaWEiCityZXZpc2lvbiAgICAiMS4wIgorZGF0ZSAgICAgICAgIjIwMDAsT2N0b2JlciwyNyAoWE1MIHNvdXJjZToyMDAwLEp1bHksMjApIgorJQorY2F0ZWdvcnkgICJ0YV9JTjoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJ0YV9JTjoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJ0YV9JTjoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgInRhX0lOOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgInRhX0lOOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAidGFfSU46MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJ0YV9JTjoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJ0YV9JTjoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJ0YV9JTjoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgInRhX0lOOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAidGFfSU46MjAwMCI7TENfVEVMRVBIT05FCitjYXRlZ29yeSAgInRhX0lOOjIwMDAiO0xDX01FQVNVUkVNRU5UCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiaTE4biIKKwordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCisKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxCitjb3B5ICJpc28xNDY1MV90MSIKKyUgVGFtaWwgQ29sbGF0aW9uIE9yZGVyIGFzIGRlZmluZWQgaW4gVGhlIE1hZHJhcyBUYW1pbCBMZXhpY29uCislIFJlZjogaHR0cDovL3d3dy51bmkta29lbG4uZGUvcGhpbC1mYWsvaW5kb2xvZ2llL3RhbWlsL290bC5odG1sCislIENvbnRhY3Q6IFQuIFZhc2VlaHJhbiA8dF92YXNlZUB5YWhvby5jb20+CislIExhc3QgVXBkYXRlZDogIEZlYi4gMTIsIDIwMDQKKyUgQ2hhbmdlTG9nOgorJSAgLSBBZGRlZCBzcGxpdCBmb3JtcyBvZiBvLCBvbywgYXUKKyUgIC0gTW92ZWQgVGFtaWwgU3ltYm9scyBhYm92ZSBudW1iZXJzCislICAtIEFkZGVkIFRBTUlMIExFVFRFUiBTSEEgKFUwQkI2KQorJSAgICBSZWY6IGh0dHA6Ly93d3dvbGQuZGt1dWcuZGsvSlRDMS9TQzIvV0cyL2RvY3MvbjI2MTcKKyUgICAgICAgOiBodHRwOi8vd3d3b2xkLmRrdXVnLmRrL0pUQzEvU0MyL1dHMi9kb2NzL24yNjE4CislIEluaXRpYWwgdmVyc2lvbjogRmViLiAxMCwgMjAwNC4KKworY29sbGF0aW5nLWVsZW1lbnQgPHNwbGl0X28+IGZyb20gIjxVMEJDNj48VTBCQkU+IgorY29sbGF0aW5nLWVsZW1lbnQgPHNwbGl0X29vPiBmcm9tICI8VTBCQzc+PFUwQkJFPiIKK2NvbGxhdGluZy1lbGVtZW50IDxzcGxpdF9hdT4gZnJvbSAiPFUwQkM2PjxVMEJENz4iCitjb2xsYXRpbmctZWxlbWVudCA8dGFnbF9LU0hBPiBmcm9tICI8VTBCOTU+PFUwQkNEPjxVMEJCNz4iCitjb2xsYXRpbmctZWxlbWVudCA8dGFnbF9TSFJJPiBmcm9tICI8VTBCQjg+PFUwQkNEPjxVMEJCMD48VTBCQzA+IgorCityZW9yZGVyLWFmdGVyIDxVMDBERT4KKzxVMEJGMz4gJSBUQU1JTCBTSUdOIERBWQorPFUwQkY0PiAlIFRBTUlMIFNJR04gTU9OVEgKKzxVMEJGNT4gJSBUQU1JTCBTSUdOIFlFQVIKKzxVMEJGNj4gJSBUQU1JTCBTSUdOIERFQklUCis8VTBCRjc+ICUgVEFNSUwgU0lHTiBDUkVESVQKKzxVMEJGOD4gJSBUQU1JTCBTSUdOIEFTIEFCT1ZFCis8VTBCRjk+ICUgVEFNSUwgU0lHTiBSVVBFRQorPFUwQkU2PiAlIFRBTUlMIERJR0lUIFpFUk8KKzxVMEJFNz4gJSBUQU1JTCBESUdJVCBPTkUKKzxVMEJFOD4gJSBUQU1JTCBESUdJVCBUV08KKzxVMEJFOT4gJSBUQU1JTCBESUdJVCBUSFJFRQorPFUwQkVBPiAlIFRBTUlMIERJR0lUIEZPVVIKKzxVMEJFQj4gJSBUQU1JTCBESUdJVCBGSVZFCis8VTBCRUM+ICUgVEFNSUwgRElHSVQgU0lYCis8VTBCRUQ+ICUgVEFNSUwgRElHSVQgU0VWRU4KKzxVMEJFRT4gJSBUQU1JTCBESUdJVCBFSUdIVAorPFUwQkVGPiAlIFRBTUlMIERJR0lUIE5JTkUKKzxVMEJGMD4gJSBUQU1JTCBOVU1CRVIgVEVOCis8VTBCRjE+ICUgVEFNSUwgTlVNQkVSIE9ORSBIVU5EUkVECis8VTBCRjI+ICUgVEFNSUwgTlVNQkVSIE9ORSBUSE9VU0FORAorPFUwQjg1PiAlIFRBTUlMIExFVFRFUiBBCis8VTBCODY+ICUgVEFNSUwgTEVUVEVSIEFBCis8VTBCODc+ICUgVEFNSUwgTEVUVEVSIEkKKzxVMEI4OD4gJSBUQU1JTCBMRVRURVIgSUkKKzxVMEI4OT4gJSBUQU1JTCBMRVRURVIgVQorPFUwQjhBPiAlIFRBTUlMIExFVFRFUiBVVQorPFUwQjhFPiAlIFRBTUlMIExFVFRFUiBFCis8VTBCOEY+ICUgVEFNSUwgTEVUVEVSIEVFCis8VTBCOTA+ICUgVEFNSUwgTEVUVEVSIEFJCis8VTBCOTI+ICUgVEFNSUwgTEVUVEVSIE8KKzxVMEI5Mz4gJSBUQU1JTCBMRVRURVIgT08KKzxVMEI5ND4gJSBUQU1JTCBMRVRURVIgQVUKKzxVMEI4Mz4gJSBUQU1JTCBTSUdOIFZJU0FSR0EgKEFZVEhBTSkKKzxVMEI5NT4gJSBUQU1JTCBMRVRURVIgSworPFUwQjk5PiAlIFRBTUlMIExFVFRFUiBORworPFUwQjlBPiAlIFRBTUlMIExFVFRFUiBDCis8VTBCOUU+ICUgVEFNSUwgTEVUVEVSIE5ZCis8VTBCOUY+ICUgVEFNSUwgTEVUVEVSIFRUCis8VTBCQTM+ICUgVEFNSUwgTEVUVEVSIE5OTgorPFUwQkE0PiAlIFRBTUlMIExFVFRFUiBUCis8VTBCQTg+ICUgVEFNSUwgTEVUVEVSIE4KKzxVMEJBQT4gJSBUQU1JTCBMRVRURVIgUAorPFUwQkFFPiAlIFRBTUlMIExFVFRFUiBNCis8VTBCQUY+ICUgVEFNSUwgTEVUVEVSIFkKKzxVMEJCMD4gJSBUQU1JTCBMRVRURVIgUgorPFUwQkIyPiAlIFRBTUlMIExFVFRFUiBMCis8VTBCQjU+ICUgVEFNSUwgTEVUVEVSIFYKKzxVMEJCND4gJSBUQU1JTCBMRVRURVIgTExMCis8VTBCQjM+ICUgVEFNSUwgTEVUVEVSIExMCis8VTBCQjE+ICUgVEFNSUwgTEVUVEVSIFJSCis8VTBCQTk+ICUgVEFNSUwgTEVUVEVSIE5OCis8VTBCOUM+ICUgVEFNSUwgTEVUVEVSIEpBCis8VTBCQjY+ICUgVEFNSUwgTEVUVEVSIFNIQQorPFUwQkI3PiAlIFRBTUlMIExFVFRFUiBTU0EKKzxVMEJCOD4gJSBUQU1JTCBMRVRURVIgU0EKKzxVMEJCOT4gJSBUQU1JTCBMRVRURVIgSEEKKzx0YWdsX0tTSEE+Cis8VTBCQ0Q+ICUgVEFNSUwgU0lHTiBWSVJBTUEgKFBVTExJKQorPFUwQkJFPiAlIFRBTUlMIFZPV0VMIFNJR04gQUEKKzxVMEJCRj4gJSBUQU1JTCBWT1dFTCBTSUdOIEkKKzxVMEJDMD4gJSBUQU1JTCBWT1dFTCBTSUdOIElJCis8VTBCQzE+ICUgVEFNSUwgVk9XRUwgU0lHTiBVCis8VTBCQzI+ICUgVEFNSUwgVk9XRUwgU0lHTiBVVQorPFUwQkM2PiAlIFRBTUlMIFZPV0VMIFNJR04gRQorPFUwQkM3PiAlIFRBTUlMIFZPV0VMIFNJR04gRUUKKzxVMEJDOD4gJSBUQU1JTCBWT1dFTCBTSUdOIEFJCis8VTBCQ0E+ICUgVEFNSUwgVk9XRUwgU0lHTiBPCis8VTBCQ0I+ICUgVEFNSUwgVk9XRUwgU0lHTiBPTworPFUwQkNDPiAlIFRBTUlMIFZPV0VMIFNJR04gQVUKKzxVMEJENz4gJSBUQU1JTCBBVSBMRU5HVEggTUFSSworPHRhZ2xfU0hSST4gIjxVMEJCNj48VTBCQ0Q+PFUwQkIwPjxVMEJDMD4iCis8c3BsaXRfbz4gIDxVMEJDQT4KKzxzcGxpdF9vbz4gPFUwQkNCPgorPHNwbGl0X2F1PiA8VTBCQ0M+CityZW9yZGVyLWVuZAorRU5EIExDX0NPTExBVEUKKworCitMQ19NT05FVEFSWQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiB0aGUgTENfTU9ORVRBUlkgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGVmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS4KKyUKK2ludF9jdXJyX3N5bWJvbCAgICAgICAiPFUwMDQ5PjxVMDA0RT48VTAwNTI+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAiPFUyMEE4PiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgICAzOzIKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAxCislCitFTkQgTENfTU9ORVRBUlkKKworCitMQ19OVU1FUklDCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTlVNRVJJQyAgY2F0ZWdvcnkuCislCitkZWNpbWFsX3BvaW50ICAgICAgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAiPFUwMDJDPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgMzsyCislCitFTkQgTENfTlVNRVJJQworCisKK0xDX1RJTUUKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19USU1FIGNhdGVnb3J5CislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRpZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUuCislCislIEFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZXMgKCVhKQorYWJkYXkgICAgICAgIjxVMEI5RT48VTBCQkU+IjsiPFUwQkE0PjxVMEJCRj4iOy8KKyAgICAgICAgICAgICI8VTBCOUE+PFUwQkM2PiI7IjxVMEJBQT48VTBCQzE+IjsvCisgICAgICAgICAgICAiPFUwQkI1PjxVMEJCRj4iOyI8VTBCQjU+PFUwQkM2PiI7LworICAgICAgICAgICAgIjxVMEI5QT4iCislCislIEZ1bGwgd2Vla2RheSBuYW1lcyAoJUEpCitkYXkgICAgICAgICAiPFUwQjlFPjxVMEJCRT48VTBCQUY+PFUwQkJGPjxVMEJCMT48VTBCQzE+IjsiPFUwQkE0PjxVMEJCRj48VTBCOTk+PFUwQkNEPjxVMEI5NT48VTBCQjM+PFUwQkNEPiI7LworICAgICAgICAgICAgIjxVMEI5QT48VTBCQzY+PFUwQkI1PjxVMEJDRD48VTBCQjU+PFUwQkJFPjxVMEJBRj48VTBCQ0Q+IjsiPFUwQkFBPjxVMEJDMT48VTBCQTQ+PFUwQkE5PjxVMEJDRD4iOy8KKyAgICAgICAgICAgICI8VTBCQjU+PFUwQkJGPjxVMEJBRj48VTBCQkU+PFUwQkI0PjxVMEJBOT48VTBCQ0Q+IjsiPFUwQkI1PjxVMEJDNj48VTBCQjM+PFUwQkNEPjxVMEJCMz48VTBCQkY+IjsvCisgICAgICAgICAgICAiPFUwQjlBPjxVMEJBOT48VTBCQkY+IgorJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCithYm1vbiAgICAgICAiPFUwQjlDPjxVMEJBOT4iOyI8VTBCQUE+PFUwQkJGPjxVMEJBQT48VTBCQ0Q+IjsvCisgICAgICAgICAgICAiPFUwQkFFPjxVMEJCRT48VTBCQjA+PFUwQkNEPiI7IjxVMEI4Rj48VTBCQUE+PFUwQkNEPiI7LworICAgICAgICAgICAgIjxVMEJBRT48VTBCQzc+IjsiPFUwQjlDPjxVMEJDMj48VTBCQTk+PFUwQkNEPiI7LworICAgICAgICAgICAgIjxVMEI5Qz48VTBCQzI+PFUwQkIyPjxVMEJDOD4iOyI8VTBCODY+PFUwQjk1PiI7LworICAgICAgICAgICAgIjxVMEI5QT48VTBCQzY+PFUwQkFBPjxVMEJDRD4iOyI8VTBCODU+PFUwQjk1PjxVMEJDRD4iOy8KKyAgICAgICAgICAgICI8VTBCQTg+PFUwQkI1PiI7IjxVMEI5Rj48VTBCQkY+PFUwQjlBPiIKKyUKKyUgRnVsbCBtb250aCBuYW1lcyAoJUIpCittb24gICAgICAgICAiPFUwQjlDPjxVMEJBOT48VTBCQjU+PFUwQkIwPjxVMEJCRj4iOyI8VTBCQUE+PFUwQkJGPjxVMEJBQT48VTBCQ0Q+PFUwQkIwPjxVMEJCNT48VTBCQjA+PFUwQkJGPiI7LworICAgICAgICAgICAgIjxVMEJBRT48VTBCQkU+PFUwQkIwPjxVMEJDRD48VTBCOUE+PFUwQkNEPiI7IjxVMEI4Rj48VTBCQUE+PFUwQkNEPjxVMEJCMD48VTBCQjI+PFUwQkNEPiI7LworICAgICAgICAgICAgIjxVMEJBRT48VTBCQzc+IjsiPFUwQjlDPjxVMEJDMj48VTBCQTk+PFUwQkNEPiI7LworICAgICAgICAgICAgIjxVMEI5Qz48VTBCQzI+PFUwQkIyPjxVMEJDOD4iOyI8VTBCODY+PFUwQjk1PjxVMEJCOD48VTBCQ0Q+PFUwQjlGPjxVMEJDRD4iOy8KKyAgICAgICAgICAgICI8VTBCOUE+PFUwQkM2PjxVMEJBQT48VTBCQ0Q+PFUwQjlGPjxVMEJBRT48VTBCQ0Q+PFUwQkFBPjxVMEJCMD48VTBCQ0Q+IjsiPFUwQjg1PjxVMEI5NT48VTBCQ0Q+PFUwQjlGPjxVMEJDQj48VTBCQUE+PFUwQkIwPjxVMEJDRD4iOy8KKyAgICAgICAgICAgICI8VTBCQTg+PFUwQkI1PjxVMEJBRT48VTBCQ0Q+PFUwQkFBPjxVMEJCMD48VTBCQ0Q+IjsiPFUwQjlGPjxVMEJCRj48VTBCOUE+PFUwQkFFPjxVMEJDRD48VTBCQUE+PFUwQkIwPjxVMEJDRD4iCislCislIEVxdWl2YWxlbnQgb2YgQU0gUE0KK2FtX3BtICAgICAgICI8VTBCOTU+PFUwQkJFPjxVMEJCMj48VTBCQzg+IjsiPFUwQkFFPjxVMEJCRT48VTBCQjI+PFUwQkM4PiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbgorJSAlQSAlZCAlQiAlWSAlSTolTTolUyAgJVoKK2RfdF9mbXQgICAgICI8VTAwMjU+PFUwMDQxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDQyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbgorJSAlQSAlZCAlQiAlWQorZF9mbXQgICAgICAgIjxVMDAyNT48VTAwNDE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNDI+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorJQorJSBBcHByb3ByaWF0ZSB0aW1lIHJlcHJlc2VudGF0aW9uCislICVJOiVNOiVTICAlWgordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKKyUgQXBwcm9wcmlhdGUgMTIgaCB0aW1lIHJlcHJlc2VudGF0aW9uICglcikKK3RfZm10X2FtcG0gICI8VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKK0VORCBMQ19USU1FCisKKworTENfTUVTU0FHRVMKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19NRVNTQUdFUyBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkaWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlLgorJQoreWVzZXhwciAgICAgIjxVMDA1RT48VTAwNUI+PFUwQjg2PjxVMEJBRT48VTBCQ0Q+PFUwMDc5PjxVMDA1OT48VTAwNUQ+IgorCitub2V4cHIgICAgICAiPFUwMDVFPjxVMDA1Qj48VTBCODc+PFUwQkIyPjxVMEJDRD48VTBCQjI+PFUwQkM4PjxVMDA2RT48VTAwNEU+PFUwMDVEPiIKKworJSBcdTBiODZcdTBiYWVcdTBiY2QKK3llc3N0ciAgICAgICI8VTBCODY+PFUwQkFFPjxVMEJDRD4iCislCislIFx1MGI4N1x1MGJiMlx1MGJjZFx1MGJiMlx1MGJjOAorbm9zdHIgICAgICAgIjxVMEI4Nz48VTBCQjI+PFUwQkNEPjxVMEJCMj48VTBCQzg+IgorJQorRU5EIExDX01FU1NBR0VTCisKKworTENfUEFQRVIKK2NvcHkgImhpX0lOIgorRU5EIExDX1BBUEVSCisKKworTENfTkFNRQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OQU1FIGNhdGVnb3J5CislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCislCislCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA3MD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PiIKK25hbWVfZ2VuICAgICIiCituYW1lX21yICAgICAiPFUwQkE0PjxVMEJCRj48VTBCQjA+PFUwQkMxPjxVMDAyMD4iCituYW1lX21ycyAgICAiPFUwQkE0PjxVMEJCRj48VTBCQjA+PFUwQkMxPjxVMEJBRT48VTBCQTQ+PFUwQkJGPjxVMDAyMD4iCituYW1lX21pc3MgICAiPFUwQjlBPjxVMEJDNj48VTBCQjI+PFUwQkNEPjxVMEJCNT48VTBCQkY+PFUwMDIwPiIKK25hbWVfbXMgICAgICI8VTAwNEQ+PFUwMDczPjxVMDAyRT4iCisKK0VORCBMQ19OQU1FCisKKworTENfQUREUkVTUworJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19BRERSRVNTIGNhdGVnb3J5CislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCitwb3N0YWxfZm10ICAiPFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3Mz48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3Mj4iCisKK2NvdW50cnlfYWIyICI8VTAwNDk+PFUwMDRFPiIKK2NvdW50cnlfYWIzICI8VTAwNDk+PFUwMDRFPjxVMDA0ND4iCitjb3VudHJ5X251bSAzNTYKK0VORCBMQ19BRERSRVNTCisKKworTENfVEVMRVBIT05FCitjb3B5ICJoaV9JTiIKK0VORCBMQ19URUxFUEhPTkUKKworCitMQ19NRUFTVVJFTUVOVAorY29weSAiaGlfSU4iCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RlX0lOIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdGVfSU4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgzMzY1MQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RlX0lOCkBAIC0wLDAgKzEsMjIwIEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKyUgVGVsdWd1IGxhbmd1YWdlIGxvY2FsZSBmb3IgSW5kaWEuCislIENvbnRyaWJ1dGVkIGJ5IEtlbnRhcm9oIE5vamkgPGtub2ppQGpwLmlibS5jb20+IGFuZAorJSBUZXRzdWppIE9yaXRhIDxvcml0YUBqcC5pYm0uY29tPi4KKyUKKyUgVXBkYXRlZCBieSBTdW5pbCBNb2hhbiBBZGFwYSA8c3VuaWwgQVQgYXRjIHRjcyBjbyBpbj4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlRlbHVndSBsYW5ndWFnZSBsb2NhbGUgZm9yIEluZGlhIgorc291cmNlICAgICAiSUJNIEdsb2JhbGl6YXRpb24gQ2VudGVyIG9mIENvbXBldGVuY3ksIFlhbWF0byBTb2Z0d2FyZSBMYWJvcmF0b3J5IgorYWRkcmVzcyAgICAiMTYyMy0xNCwgU2hpbW90c3VydW1hLCBZYW1hdG8tc2hpLCBLYW5hZ2F3YS1rZW4sIDI0Mi04NTAyLCBKYXBhbiIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICAiIgorZmF4ICAgICAgICAgIiIKK2xhbmd1YWdlICAgICJUZWx1Z3UiCit0ZXJyaXRvcnkgICAiSW5kaWEiCityZXZpc2lvbiAgICAiMC45NSIKK2RhdGUgICAgICAgICIyMDA0LTEwLTA1IgorJQorY2F0ZWdvcnkgICJpMThuOjIwMDMiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImkxOG46MjAwMyI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiaTE4bjoyMDAzIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImkxOG46MjAwMyI7TENfVElNRQorY2F0ZWdvcnkgICJwb3NpeDoxOTkzIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImkxOG46MjAwMyI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiaTE4bjoyMDAzIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJpMThuOjIwMDMiO0xDX1BBUEVSCitjYXRlZ29yeSAgImkxOG46MjAwMyI7TENfTkFNRQorY2F0ZWdvcnkgICJpMThuOjIwMDMiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiaTE4bjoyMDAzIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKKworJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEKK2NvcHkgImlzbzE0NjUxX3QxIgorCitFTkQgTENfQ09MTEFURQorCisKK0xDX01PTkVUQVJZCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIHRoZSBMQ19NT05FVEFSWSBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkZWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlLgorJQoraW50X2N1cnJfc3ltYm9sICAgICAgICI8VTAwNDk+PFUwMDRFPjxVMDA1Mj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICI8VTBDMzA+PFUwQzQyPjxVMDAyRT4iCittb25fZGVjaW1hbF9wb2ludCAgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAgMzsyCitwb3NpdGl2ZV9zaWduICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAwCituX2NzX3ByZWNlZGVzICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgIDAKK3Bfc2lnbl9wb3NuICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgMQorJQorRU5EIExDX01PTkVUQVJZCisKKworTENfTlVNRVJJQworJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX05VTUVSSUMgIGNhdGVnb3J5LgorJQorZGVjaW1hbF9wb2ludCAgICAgICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgIjxVMDAyQz4iCitncm91cGluZyAgICAgICAgICAgICAgIDM7MgorJQorRU5EIExDX05VTUVSSUMKKworCitMQ19USU1FCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfVElNRSBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkaWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlLgorJQorJSBBYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWVzICglYSkKK2FiZGF5ICAgICAgICI8VTBDMDY+PFUwQzI2PjxVMEMzRj4iOyI8VTBDMzg+PFUwQzRiPjxVMEMyRT4iOy8KKyAgICAgICAgICAgICI8VTBDMkU+PFUwQzAyPjxVMEMxNz48VTBDMzM+IjsiPFUwQzJDPjxVMEM0MT48VTBDMjc+IjsvCisgICAgICAgICAgICAiPFUwQzE3PjxVMEM0MT48VTBDMzA+PFUwQzQxPiI7IjxVMEMzNj48VTBDNDE+PFUwQzE1PjxVMEM0RD48VTBDMzA+IjsvCisgICAgICAgICAgICAiPFUwQzM2PjxVMEMyOD48VTBDM0Y+IgorCisKKyUgRnVsbCB3ZWVrZGF5IG5hbWVzICglQSkKK2RheSAgICAgICAgICI8VTBDMDY+PFUwQzI2PjxVMEMzRj48VTBDMzU+PFUwQzNFPjxVMEMzMD48VTBDMDI+IjsiPFUwQzM4PjxVMEM0Yj48VTBDMkU+PFUwQzM1PjxVMEMzRT48VTBDMzA+PFUwQzAyPiI7LworICAgICAgICAgICAgIjxVMEMyRT48VTBDMDI+PFUwQzE3PjxVMEMzMz48VTBDMzU+PFUwQzNFPjxVMEMzMD48VTBDMDI+IjsiPFUwQzJDPjxVMEM0MT48VTBDMjc+PFUwQzM1PjxVMEMzRT48VTBDMzA+PFUwQzAyPiI7LworICAgICAgICAgICAgIjxVMEMxNz48VTBDNDE+PFUwQzMwPjxVMEM0MT48VTBDMzU+PFUwQzNFPjxVMEMzMD48VTBDMDI+IjsiPFUwQzM2PjxVMEM0MT48VTBDMTU+PFUwQzRkPjxVMEMzMD48VTBDMzU+PFUwQzNFPjxVMEMzMD48VTBDMDI+IjsvCisgICAgICAgICAgICAiPFUwQzM2PjxVMEMyOD48VTBDM0Y+PFUwQzM1PjxVMEMzRT48VTBDMzA+PFUwQzAyPiIKKworJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCithYm1vbiAgICAgICAiPFUwQzFDPjxVMEMyOD48VTBDMzU+PFUwQzMwPjxVMEMzRj4iOyI8VTBDMkI+PFUwQzNGPjxVMEMyQz48VTBDNEQ+PFUwQzMwPjxVMEMzNT48VTBDMzA+PFUwQzNGPiI7LworICAgICAgICAgICAgIjxVMEMyRT48VTBDM0U+PFUwQzMwPjxVMEM0RD48VTBDMUE+PFUwQzNGPiI7IjxVMEMwRj48VTBDMmE+PFUwQzREPjxVMEMzMD48VTBDM0Y+PFUwQzMyPjxVMEM0RD4iOy8KKyAgICAgICAgICAgICI8VTBDMkU+PFUwQzQ3PiI7IjxVMEMxQz48VTBDNDI+PFUwQzI4PjxVMEM0RD4iOy8KKyAgICAgICAgICAgICI8VTBDMUM+PFUwQzQyPjxVMEMzMj48VTBDNDg+IjsiPFUwQzA2PjxVMEMxNz48VTBDMzg+PFUwQzREPjxVMEMxRj48VTBDNDE+IjsvCisgICAgICAgICAgICAiPFUwQzM4PjxVMEM0Nj48VTBDMkE+PFUwQzREPjxVMEMxRj48VTBDNDY+PFUwQzAyPjxVMEMyQz48VTBDMzA+PFUwQzQxPiI7IjxVMEMwNT48VTBDMTU+PFUwQzREPjxVMEMxRj48VTBDNEI+PFUwQzJDPjxVMEMzMD48VTBDNDE+IjsvCisgICAgICAgICAgICAiPFUwQzI4PjxVMEMzNT48VTBDMDI+PFUwQzJDPjxVMEMzMD48VTBDNDE+IjsiPFUwQzIxPjxVMEMzRj48VTBDMzg+PFUwQzQ2PjxVMEMwMj48VTBDMkM+PFUwQzMwPjxVMEM0MT4iCisKKyUgRnVsbCBtb250aCBuYW1lcyAoJUIpCittb24gICAgICAgICAiPFUwQzFDPjxVMEMyOD48VTBDMzU+PFUwQzMwPjxVMEMzRj4iOyI8VTBDMkI+PFUwQzNGPjxVMEMyQz48VTBDNEQ+PFUwQzMwPjxVMEMzNT48VTBDMzA+PFUwQzNGPiI7LworICAgICAgICAgICAgIjxVMEMyRT48VTBDM0U+PFUwQzMwPjxVMEM0RD48VTBDMUE+PFUwQzNGPiI7IjxVMEMwRj48VTBDMkE+PFUwQzREPjxVMEMzMD48VTBDM0Y+PFUwQzMyPjxVMEM0RD4iOy8KKyAgICAgICAgICAgICI8VTBDMkU+PFUwQzQ3PiI7IjxVMEMxQz48VTBDNDI+PFUwQzI4PjxVMEM0RD4iOy8KKyAgICAgICAgICAgICI8VTBDMUM+PFUwQzQyPjxVMEMzMj48VTBDNDg+IjsiPFUwQzA2PjxVMEMxNz48VTBDMzg+PFUwQzREPjxVMEMxRj48VTBDNDE+IjsvCisgICAgICAgICAgICAiPFUwQzM4PjxVMEM0Nj48VTBDMkE+PFUwQzREPjxVMEMxRj48VTBDNDY+PFUwQzAyPjxVMEMyQz48VTBDMzA+PFUwQzQxPiI7IjxVMEMwNT48VTBDMTU+PFUwQzREPjxVMEMxRj48VTBDNEI+PFUwQzJDPjxVMEMzMD48VTBDNDE+IjsvCisgICAgICAgICAgICAiPFUwQzI4PjxVMEMzNT48VTBDMDI+PFUwQzJDPjxVMEMzMD48VTBDNDE+IjsiPFUwQzIxPjxVMEMzRj48VTBDMzg+PFUwQzQ2PjxVMEMwMj48VTBDMkM+PFUwQzMwPjxVMEM0MT4iCislCislIEVxdWl2YWxlbnQgb2YgQU0gUE0KK2FtX3BtICAgICAgICI8VTBDMDk+PFUwMDJFPiI7IjxVMEMzOD48VTBDM0U+PFUwMDJFPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbgorJSAlQiAlZCAlQSAlWSAlcCVJLiVNLiVTICVaCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA0MT48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA3MD48VTAwMjU+PFUwMDQ5PjxVMDAyRT48VTAwMjU+PFUwMDREPjxVMDAyRT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbgorJSAlQiAlZCAlQSAlWQorZF9mbXQgICAgICAgIjxVMDAyNT48VTAwNDI+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNDE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorJQorJSBBcHByb3ByaWF0ZSB0aW1lIHJlcHJlc2VudGF0aW9uCislICVwJUkuJU0uJVMgJVoKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDcwPjxVMDAyNT48VTAwNDk+PFUwMDJFPjxVMDAyNT48VTAwNEQ+PFUwMDJFPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorJSBBcHByb3ByaWF0ZSAxMiBoIHRpbWUgcmVwcmVzZW50YXRpb24gKCVyKQorJSAlcCVJLiVNLiVTICVaCit0X2ZtdF9hbXBtICAiPFUwMDI1PjxVMDA3MD48VTAwMjU+PFUwMDQ5PjxVMDAyRT48VTAwMjU+PFUwMDREPjxVMDAyRT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKK0VORCBMQ19USU1FCisKKworTENfTUVTU0FHRVMKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19NRVNTQUdFUyBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkaWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlLgorJQorJSBTeW50YXggb24gVW5pY29kZSBSZWd1bGFyIEV4cHJlc3Npb24gR3VpZGVsaW5lcyBUUiMxOAorJSBeW3lZXHUwQzA1XS4qCit5ZXNleHByICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNzk+PFUwMDU5PjxVMEMwNT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCisKKyUKKyUgU3ludGF4IG9uIFVuaWNvZGUgUmVndWxhciBFeHByZXNzaW9uIEd1aWRlbGluZXMgVFIjMTgKKyUgXlt5WVx1MEMxNV0uKgorbm9leHByICAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTBDMTU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorCislCit5ZXNzdHIgICAgICAiPFUwQzA1PjxVMEMzNT48VTBDMjg+PFUwQzQxPiIKKyUKKyUKK25vc3RyICAgICAgICI8VTBDMTU+PFUwQzNFPjxVMEMyNj48VTBDNDE+IgorJQorRU5EIExDX01FU1NBR0VTCisKKworTENfUEFQRVIKK2NvcHkgImhpX0lOIgorRU5EIExDX1BBUEVSCisKKworTENfTkFNRQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OQU1FIGNhdGVnb3J5CislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCislCislCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA3MD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2RD4iCituYW1lX2dlbiAgICAiIgorbmFtZV9tciAgICAgIjxVMEMzNj48VTBDNEQ+PFUwQzMwPjxVMEM0MD48VTAwMjA+IgorbmFtZV9tcnMgICAgIjxVMEMzNj48VTBDNEQ+PFUwQzMwPjxVMEM0MD48VTBDMkU+PFUwQzI0PjxVMEMzRj48VTAwMjA+IgorbmFtZV9taXNzICAgIjxVMEMxNT48VTBDNDE+PFUwQzJFPjxVMEMzRT48VTBDMzA+PFUwQzNGPjxVMDAyMD4iCituYW1lX21zICAgICAiIgorCitFTkQgTENfTkFNRQorCisKK0xDX0FERFJFU1MKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfQUREUkVTUyBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorCislIHBvc3RhbF9mbXQgICAgIiVhJU4lZCVOJWYlTiVyJXQlZSVOJWgldCViJU4lcyV0JU4lVCV0JXolTiVTJU4lYyIKK3Bvc3RhbF9mbXQgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA3Mj48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY4PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNzM+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDdBPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA1Mz48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjM+IgorY291bnRyeV9uYW1lICAgICI8VTBDMkQ+PFUwQzNFPjxVMEMzMD48VTBDMjQ+PFUwMDIwPjxVMEMyNj48VTBDNDc+PFUwQzM2PjxVMEMwMj4iCitjb3VudHJ5X2FiMiAgICAgIjxVMDA0OT48VTAwNEU+IgorY291bnRyeV9hYjMgICAgICI8VTAwNDk+PFUwMDRFPjxVMDA0ND4iCitjb3VudHJ5X251bSAgICAgMzU2CitsYW5nX25hbWUgICAgICAgIjxVMEMyND48VTBDNDY+PFUwQzMyPjxVMEM0MT48VTBDMTc+PFUwQzQxPiIKK2xhbmdfYWIgICAgICAgICAidGUiCitsYW5nX3Rlcm0gICAgICAgInRlbCIKK0VORCBMQ19BRERSRVNTCisKKworTENfVEVMRVBIT05FCitjb3B5ICJoaV9JTiIKK0VORCBMQ19URUxFUEhPTkUKKworCitMQ19NRUFTVVJFTUVOVAorY29weSAiaGlfSU4iCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RnX1RKIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdGdfVEoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEwMjNjMgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RnX1RKCkBAIC0wLDAgKzEsMjMzIEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgVGFqaWsgTGFuZ3VhZ2UgTG9jYWxlIGZvciBUYWppa2lzdGFuCislIFNvdXJjZToKKyUgQ29udGFjdDogUGFibG8gU2FyYXR4YWdhLCBSb2dlciBLb3ZhY3MKKyUgRW1haWw6IDxwYWJsb0BtYW5kcmFrZXNvZnQuY29tPiwgPFJPR0VSS09AbWljcm9tb3Rpb24uY29tPgorJSBMYW5ndWFnZTogdGcKKyUgVGVycml0b3J5OiBUSgorJSBSZXZpc2lvbjogMC40CislIERhdGU6IDIwMDQtMDEtMDkKKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogVVRGLTgKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworJQorJSBUT0RPOiBjaGVjayBMQ19DT0xMQVRFCislIFRPRE86IGZpeCBMQ19USU1FCislCislIG5lZWRlZCBleHRyYSBjaGFyczogPFUwNDkzPiwgPFUwNEUzPiwgPFUwNDlCPiwgPFUwNEVGPiwgPFUwNEIzPiwgPFUwNEI3PgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgIlRhamlrIGxhbmd1YWdlIGxvY2FsZSBmb3IgVGFqaWtpc3RhbiIKK3NvdXJjZSAiUm9nZXIgS292YWNzIgorYWRkcmVzcyAiIgorY29udGFjdCAiUGFibG8gU2FyYXR4YWdhLCBSb2dlciBLb3ZhY3MiCitlbWFpbCAicGFibG9AbWFuZHJha2Vzb2Z0LmNvbSwgUk9HRVJLT0BtaWNyb21vdGlvbi5jb20iCit0ZWwgIiIKK2ZheCAiIgorbGFuZ3VhZ2UgIlRhamlrIgordGVycml0b3J5ICJUYWppa2lzdGFuIgorcmV2aXNpb24gIjAuNCIKK2RhdGUgIjIwMDQtMDEtMDkiCisKK2NhdGVnb3J5ICJ0Z19USjoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgInRnX1RKOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAidGdfVEo6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgInRnX1RKOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICJ0Z19USjoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAidGdfVEo6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICJ0Z19USjoyMDAwIjtMQ19URUxFUEhPTkUKK2NhdGVnb3J5ICJ0Z19USjoyMDAwIjtMQ19NRUFTVVJFTUVOVAorY2F0ZWdvcnkgInRnX1RKOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICJ0Z19USjoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgInRnX1RKOjIwMDAiO0xDX01FU1NBR0VTCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiaTE4biIKKwordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCisKKyUgVGFkamlrIGN5cmlsbGljIGFscGhhYmV0IGlzOgorJSA8VTA0MzA+LCA8VTA0MzE+LCA8VTA0MzI+LCA8VTA0MzM+LCA8VTA0OTM+IChjeXIgZ2hlIHdpdGggc3Ryb2tlKSwgPFUwNDM0PiwgPFUwNDM1PiwKKyUgPFUwNDUxPiwgPFUwNDM2PiwgPFUwNDM3PiwgPFUwNDM4PiwgPFUwNEUzPiAoY3lyIGkgd2l0aCBtYWNyb24pLCA8VTA0Mzk+LCA8VTA0M0E+LAorJSA8VTA0OUI+IChjeXIgayB3aXRoIGRlc2NlbmRlciksIDxVMDQzQj4sIDxVMDQzQz4sIDxVMDQzRD4sIDxVMDQzRT4sIDxVMDQzRj4sIDxVMDQ0MD4sCislIDxVMDQ0MT4sIDxVMDQ0Mj4sIDxVMDQ0Mz4sIDxVMDRFRj4gKGN5ciB1IHdpdGggbWFjcm9uKSwgPFUwNDQ0PiwgPFUwNDQ1PiwKKyUgPFUwNEIzPiAoY3lyIGhhIHdpdGggZGVzY2VuZGVyKSwgPFUwNDQ3PiwgPFUwNEI3PiAoY3lyIGNoZSB3aXRoIGRlc2NlbmRlciksCislIDxVMDQ0OD4sIDxVMDQ0QT4gKGN5ciBoYXJkIHNpZ24pLCA8VTA0NEQ+LCA8VTA0NEU+LCA8VTA0NEY+CisKK2NvcHkgImlzbzE0NjUxX3QxIgorCitjb2xsYXRpbmctc3ltYm9sIDxnLT0+Citjb2xsYXRpbmctc3ltYm9sIDxpLT0+Citjb2xsYXRpbmctc3ltYm9sIDxrLD0+Citjb2xsYXRpbmctc3ltYm9sIDx1LT0+Citjb2xsYXRpbmctc3ltYm9sIDxoLD0+Citjb2xsYXRpbmctc3ltYm9sIDxjJSw9PgorCityZW9yZGVyLWFmdGVyIDxDWVItR0hFPgorPGctPT4KK3Jlb3JkZXItYWZ0ZXIgPENZUi1JPgorPGktPT4KK3Jlb3JkZXItYWZ0ZXIgPENZUi1LQT4KKzxrLD0+CityZW9yZGVyLWFmdGVyIDxDWVItT1U+Cis8dS09PgorcmVvcmRlci1hZnRlciA8Q1lSLUhBPgorPGgsPT4KK3Jlb3JkZXItYWZ0ZXIgPENZUi1DSEU+Cis8YyUsPT4KKworcmVvcmRlci1hZnRlciA8VTA0MzM+Cis8VTA0OTM+IDxnLT0+OzxQQ0w+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTA0MTM+Cis8VTA0OTI+IDxnLT0+OzxQQ0w+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDQzOD4KKzxVMDRFMz4gPGktPT47PFBDTD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDQxOD4KKzxVMDRFMj4gPGktPT47PFBDTD47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwNDNBPgorPFUwNDlCPiA8ayw9Pjs8UENMPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwNDFBPgorPFUwNDlBPiA8ayw9Pjs8UENMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTA0NDM+Cis8VTA0RUY+IDx1LT0+OzxQQ0w+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTA0MjM+Cis8VTA0RUU+IDx1LT0+OzxQQ0w+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDQ0NT4KKzxVMDRCMz4gPGgsPT47PFBDTD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDQyNT4KKzxVMDRCMj4gPGgsPT47PFBDTD47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwNDQ3PgorPFUwNEI3PiA8YyUsPT47PFBDTD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDQyNz4KKzxVMDRCNj4gPGMlLD0+OzxQQ0w+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWVuZAorCitFTkQgTENfQ09MTEFURQorCitMQ19NRVNTQUdFUworeWVzc3RyICAiPFUwNDM0PjxVMDQzMD4iCitub3N0ciAgICI8VTA0M0Q+PFUwNDM1PjxVMDQ0Mj4iCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDRCMj48VTA0QjM+PFUwNDI1PjxVMDQ0NT48VTA0MTQ+PFUwNDM0PjxVMDA1OT48VTAwNzk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTA0MUQ+PFUwNDNEPjxVMDA0RT48VTAwNkU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAgICI8VTAwNTQ+PFUwMDRBPjxVMDA1Mz48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICAgICAiPFUwNDQwPjxVMDQ0Mz48VTA0MzE+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICAgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAgICAgIjxVMDAyMD4iCittb25fZ3JvdXBpbmcgICAgICAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDAKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgICAgICAwCituX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgICAgICAxCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludCAgICAgICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgICAgIjxVMDAyRT4iCitncm91cGluZyAgICAgICAgICAgICAgICAgIDM7MworRU5EIExDX05VTUVSSUMKKworTENfVElNRQorZGF5ICAgICAiPFUwNDEyPjxVMDQzRT48VTA0NDE+PFUwNDNBPjxVMDQ0MD48VTA0MzU+PFUwNDQxPjxVMDQzNT48VTA0M0Q+PFUwNDRDPjxVMDQzNT4iOy8KKyAgICAgICAgIjxVMDQxRj48VTA0M0U+PFUwNDNEPjxVMDQzNT48VTA0MzQ+PFUwNDM1PjxVMDQzQj48VTA0NEM+PFUwNDNEPjxVMDQzOD48VTA0M0E+IjsvCisgICAgICAgICI8VTA0MTI+PFUwNDQyPjxVMDQzRT48VTA0NDA+PFUwNDNEPjxVMDQzOD48VTA0M0E+IjsvCisgICAgICAgICI8VTA0MjE+PFUwNDQwPjxVMDQzNT48VTA0MzQ+PFUwNDMwPiI7LworICAgICAgICAiPFUwNDI3PjxVMDQzNT48VTA0NDI+PFUwNDMyPjxVMDQzNT48VTA0NDA+PFUwNDMzPiI7LworICAgICAgICAiPFUwNDFGPjxVMDQ0Rj48VTA0NDI+PFUwNDNEPjxVMDQzOD48VTA0NDY+PFUwNDMwPiI7LworICAgICAgICAiPFUwNDIxPjxVMDQ0Mz48VTA0MzE+PFUwNDMxPjxVMDQzRT48VTA0NDI+PFUwNDMwPiIKK2FiZGF5ICAgIjxVMDQxMj48VTA0NDE+PFUwNDNBPiI7LworICAgICAgICAiPFUwNDFGPjxVMDQzRD48VTA0MzQ+IjsvCisgICAgICAgICI8VTA0MTI+PFUwNDQyPjxVMDQ0MD4iOy8KKyAgICAgICAgIjxVMDQyMT48VTA0NDA+PFUwNDM0PiI7LworICAgICAgICAiPFUwNDI3PjxVMDQ0Mj48VTA0MzI+IjsvCisgICAgICAgICI8VTA0MUY+PFUwNDQyPjxVMDQzRD4iOy8KKyAgICAgICAgIjxVMDQyMT48VTA0MzE+PFUwNDQyPiIKK21vbiAgICAgIjxVMDQyRj48VTA0M0Q+PFUwNDMyPjxVMDQzMD48VTA0NDA+PFUwNDRGPiI7LworICAgICAgICAiPFUwNDI0PjxVMDQzNT48VTA0MzI+PFUwNDQwPjxVMDQzMD48VTA0M0I+PFUwNDRGPiI7LworICAgICAgICAiPFUwNDFDPjxVMDQzMD48VTA0NDA+PFUwNDQyPjxVMDQzMD4iOy8KKyAgICAgICAgIjxVMDQxMD48VTA0M0Y+PFUwNDQwPjxVMDQzNT48VTA0M0I+PFUwNDRGPiI7LworICAgICAgICAiPFUwNDFDPjxVMDQzMD48VTA0NEY+IjsvCisgICAgICAgICI8VTA0MTg+PFUwNDRFPjxVMDQzRD48VTA0NEY+IjsvCisgICAgICAgICI8VTA0MTg+PFUwNDRFPjxVMDQzQj48VTA0NEY+IjsvCisgICAgICAgICI8VTA0MTA+PFUwNDMyPjxVMDQzMz48VTA0NDM+PFUwNDQxPjxVMDQ0Mj48VTA0MzA+IjsvCisgICAgICAgICI8VTA0MjE+PFUwNDM1PjxVMDQzRD48VTA0NDI+PFUwNDRGPjxVMDQzMT48VTA0NDA+PFUwNDRGPiI7LworICAgICAgICAiPFUwNDFFPjxVMDQzQT48VTA0NDI+PFUwNDRGPjxVMDQzMT48VTA0NDA+PFUwNDRGPiI7LworICAgICAgICAiPFUwNDFEPjxVMDQzRT48VTA0NEY+PFUwNDMxPjxVMDQ0MD48VTA0NEY+IjsvCisgICAgICAgICI8VTA0MTQ+PFUwNDM1PjxVMDQzQT48VTA0MzA+PFUwNDMxPjxVMDQ0MD48VTA0NEY+IgorYWJtb24gICAiPFUwNDJGPjxVMDQzRD48VTA0MzI+IjsvCisgICAgICAgICI8VTA0MjQ+PFUwNDM1PjxVMDQzMj4iOy8KKyAgICAgICAgIjxVMDQxQz48VTA0MzA+PFUwNDQwPiI7LworICAgICAgICAiPFUwNDEwPjxVMDQzRj48VTA0NDA+IjsvCisgICAgICAgICI8VTA0MUM+PFUwNDMwPjxVMDQzOT4iOy8KKyAgICAgICAgIjxVMDQxOD48VTA0NEU+PFUwNDNEPiI7LworICAgICAgICAiPFUwNDE4PjxVMDQ0RT48VTA0M0I+IjsvCisgICAgICAgICI8VTA0MTA+PFUwNDMyPjxVMDQzMz4iOy8KKyAgICAgICAgIjxVMDQyMT48VTA0MzU+PFUwNDNEPiI7LworICAgICAgICAiPFUwNDFFPjxVMDQzQT48VTA0NDI+IjsvCisgICAgICAgICI8VTA0MUQ+PFUwNDNFPjxVMDQ0Rj4iOy8KKyAgICAgICAgIjxVMDQxND48VTA0MzU+PFUwNDNBPiIKK2RfdF9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+LworPFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+IgorZF9mbXQgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjU+PFUwMDZEPjxVMDAyRT48VTAwMjU+PFUwMDU5PiIKK3RfZm10ICAgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICAgIiI7IiIKK3RfZm10X2FtcG0gIiIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCitoZWlnaHQgICAgICAyOTcKK3dpZHRoICAgICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX01FQVNVUkVNRU5UCittZWFzdXJlbWVudCAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorJSBGSVhNRQorY29weSAiZW5fREsiCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCislIEZJWE1FCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2OD4vCis8VTAwMjA+PFUwMDI1PjxVMDA3Mz48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwN0E+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorCitjb3VudHJ5X2FiMiAiPFUwMDU0PjxVMDA0QT4iCitjb3VudHJ5X2FiMyAiPFUwMDU0PjxVMDA0QT48VTAwNEI+IgorY291bnRyeV9udW0gNzYyCitFTkQgTENfQUREUkVTUworCitMQ19URUxFUEhPTkUKKyUgRklYTUUKK2NvcHkgImVuX0RLIgorRU5EIExDX1RFTEVQSE9ORQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdGhfVEggYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy90aF9USApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmNmMTBlCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdGhfVEgKQEAgLTAsMCArMSw5ODEgQEAKK2VzY2FwZV9jaGFyIC8KK2NvbW1lbnRfY2hhciAlCisKKyUKKyUgVGhhaWxhbmQgKFRoYWkpIGxvY2FsZQorJQorJSBOYW1lOiAgICAgICB0aF9USAorJSBBdXRob3I6ICAgICBUaGVwcGl0YWsgS2Fyb29uYm9vbnlhbmFuCislIENvbnRhY3Q6ICAgIFNvZnR3YXJlIGFuZCBMYW5ndWFnZSBFbmdpbmVlcmluZyBMYWJvcmF0b3J5IChTTEwpCislICAgICAgICAgICAgIE5hdGlvbmFsIEVsZWN0cm9uaWNzIGFuZCBDb21wdXRlciBUZWNobm9sb2d5IENlbnRlciAoTkVDVEVDKQorJSAgICAgICAgICAgICBOYXRpb25hbCBTY2llbmNlIGFuZCBUZWNobm9sb2d5IERldmVsb3BtZW50IEFnZW5jeSAoTlNUREEpCislICAgICAgICAgICAgIE1pbmlzdHJ5IG9mIFNjaWVuY2UgVGVjaG5vbG9neSBhbmQgRW52aXJvbm1lbnQKKyUgICAgICAgICAgICAgICAyMm5kIEZsb29yLCBHeXBzdW0gTWV0cm9waWxpdGFuIFRvd2VyCislICAgICAgICAgICAgICAgU3JpIEF5dXRoYXlhIFJkLCBSYXRjaGF0aGV3ZWUsIEJhbmdrb2sgMTA0MDAKKyUgICAgICAgICAgICAgICBUSEFJTEFORC4KKyUgRS1tYWlsOiAgICB0aGVwQGxpbmtzLm5lY3RlYy5vci50aAorJSBMYW5ndWFnZTogIFRoYWkKKyUgVGVycml0b3J5OiBUaGFpbGFuZAorJSBDaGFyc2V0OiAgIFRJUy02MjAuMjUzMzoxOTkwCislIFJldmlzaW9uOiAgMC41LjMKKyUgRGF0ZTogICAgICAxOTk5LTA1LTI4CislCisKKyUKKyUgQ29weXJpZ2h0IChDKSAxOTk5IFRoZXBwaXRhayBLYXJvb25ib29ueWFuYW4sIE5hdGlvbmFsIEVsZWN0cm9uaWNzIGFuZAorJSAgICBDb21wdXRlciBUZWNobm9sb2d5IENlbnRlciAoTkVDVEVDKS4KKyUKKyUgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCislIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyUgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorJSB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyUgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCislIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CislCislIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCislIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorJQorJSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorJSBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyUgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyUgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyUgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCislIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorJSBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCislCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJUaGFpIGxvY2FsZSBmb3IgVGhhaWxhbmQiCitzb3VyY2UgICAgICIiCithZGRyZXNzICAgICIiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiVGhhaSIKK3RlcnJpdG9yeSAgIlRoYWlsYW5kIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNi0yOSIKKyUKK2NhdGVnb3J5ICAidGhfVEg6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAidGhfVEg6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAidGhfVEg6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJ0aF9USDoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgInRoX1RIOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAidGhfVEg6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAidGhfVEg6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAidGhfVEg6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAidGhfVEg6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJ0aF9USDoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgInRoX1RIOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorCitjb2xsYXRpbmctZWxlbWVudCA8a28ta2FpLWU+IGZyb20gIjxVMEU0MD48VTBFMDE+IgorY29sbGF0aW5nLWVsZW1lbnQgPGtvLWthaS1hZT4gZnJvbSAiPFUwRTQxPjxVMEUwMT4iCitjb2xsYXRpbmctZWxlbWVudCA8a28ta2FpLW8+IGZyb20gIjxVMEU0Mj48VTBFMDE+IgorY29sbGF0aW5nLWVsZW1lbnQgPGtvLWthaS1haS1tYWltdWFuPiBmcm9tICI8VTBFNDM+PFUwRTAxPiIKK2NvbGxhdGluZy1lbGVtZW50IDxrby1rYWktYWktbWFpbWFsYWk+IGZyb20gIjxVMEU0ND48VTBFMDE+IgorCitjb2xsYXRpbmctZWxlbWVudCA8a2hvLWtoYWktZT4gZnJvbSAiPFUwRTQwPjxVMEUwMj4iCitjb2xsYXRpbmctZWxlbWVudCA8a2hvLWtoYWktYWU+IGZyb20gIjxVMEU0MT48VTBFMDI+IgorY29sbGF0aW5nLWVsZW1lbnQgPGtoby1raGFpLW8+IGZyb20gIjxVMEU0Mj48VTBFMDI+IgorY29sbGF0aW5nLWVsZW1lbnQgPGtoby1raGFpLWFpLW1haW11YW4+IGZyb20gIjxVMEU0Mz48VTBFMDI+IgorY29sbGF0aW5nLWVsZW1lbnQgPGtoby1raGFpLWFpLW1haW1hbGFpPiBmcm9tICI8VTBFNDQ+PFUwRTAyPiIKKworY29sbGF0aW5nLWVsZW1lbnQgPGtoby1raHVhdC1lPiBmcm9tICI8VTBFNDA+PFUwRTAzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxraG8ta2h1YXQtYWU+IGZyb20gIjxVMEU0MT48VTBFMDM+IgorY29sbGF0aW5nLWVsZW1lbnQgPGtoby1raHVhdC1vPiBmcm9tICI8VTBFNDI+PFUwRTAzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxraG8ta2h1YXQtYWktbWFpbXVhbj4gZnJvbSAiPFUwRTQzPjxVMEUwMz4iCitjb2xsYXRpbmctZWxlbWVudCA8a2hvLWtodWF0LWFpLW1haW1hbGFpPiBmcm9tICI8VTBFNDQ+PFUwRTAzPiIKKworY29sbGF0aW5nLWVsZW1lbnQgPGtoby1raHdhaS1lPiBmcm9tICI8VTBFNDA+PFUwRTA0PiIKK2NvbGxhdGluZy1lbGVtZW50IDxraG8ta2h3YWktYWU+IGZyb20gIjxVMEU0MT48VTBFMDQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPGtoby1raHdhaS1vPiBmcm9tICI8VTBFNDI+PFUwRTA0PiIKK2NvbGxhdGluZy1lbGVtZW50IDxraG8ta2h3YWktYWktbWFpbXVhbj4gZnJvbSAiPFUwRTQzPjxVMEUwND4iCitjb2xsYXRpbmctZWxlbWVudCA8a2hvLWtod2FpLWFpLW1haW1hbGFpPiBmcm9tICI8VTBFNDQ+PFUwRTA0PiIKKworY29sbGF0aW5nLWVsZW1lbnQgPGtoby1raG9uLWU+IGZyb20gIjxVMEU0MD48VTBFMDU+IgorY29sbGF0aW5nLWVsZW1lbnQgPGtoby1raG9uLWFlPiBmcm9tICI8VTBFNDE+PFUwRTA1PiIKK2NvbGxhdGluZy1lbGVtZW50IDxraG8ta2hvbi1vPiBmcm9tICI8VTBFNDI+PFUwRTA1PiIKK2NvbGxhdGluZy1lbGVtZW50IDxraG8ta2hvbi1haS1tYWltdWFuPiBmcm9tICI8VTBFNDM+PFUwRTA1PiIKK2NvbGxhdGluZy1lbGVtZW50IDxraG8ta2hvbi1haS1tYWltYWxhaT4gZnJvbSAiPFUwRTQ0PjxVMEUwNT4iCisKK2NvbGxhdGluZy1lbGVtZW50IDxraG8tcmFraGFuZy1lPiBmcm9tICI8VTBFNDA+PFUwRTA2PiIKK2NvbGxhdGluZy1lbGVtZW50IDxraG8tcmFraGFuZy1hZT4gZnJvbSAiPFUwRTQxPjxVMEUwNj4iCitjb2xsYXRpbmctZWxlbWVudCA8a2hvLXJha2hhbmctbz4gZnJvbSAiPFUwRTQyPjxVMEUwNj4iCitjb2xsYXRpbmctZWxlbWVudCA8a2hvLXJha2hhbmctYWktbWFpbXVhbj4gZnJvbSAiPFUwRTQzPjxVMEUwNj4iCitjb2xsYXRpbmctZWxlbWVudCA8a2hvLXJha2hhbmctYWktbWFpbWFsYWk+IGZyb20gIjxVMEU0ND48VTBFMDY+IgorCitjb2xsYXRpbmctZWxlbWVudCA8bmdvLW5ndS1lPiBmcm9tICI8VTBFNDA+PFUwRTA3PiIKK2NvbGxhdGluZy1lbGVtZW50IDxuZ28tbmd1LWFlPiBmcm9tICI8VTBFNDE+PFUwRTA3PiIKK2NvbGxhdGluZy1lbGVtZW50IDxuZ28tbmd1LW8+IGZyb20gIjxVMEU0Mj48VTBFMDc+IgorY29sbGF0aW5nLWVsZW1lbnQgPG5nby1uZ3UtYWktbWFpbXVhbj4gZnJvbSAiPFUwRTQzPjxVMEUwNz4iCitjb2xsYXRpbmctZWxlbWVudCA8bmdvLW5ndS1haS1tYWltYWxhaT4gZnJvbSAiPFUwRTQ0PjxVMEUwNz4iCisKK2NvbGxhdGluZy1lbGVtZW50IDxjaG8tY2hhbi1lPiBmcm9tICI8VTBFNDA+PFUwRTA4PiIKK2NvbGxhdGluZy1lbGVtZW50IDxjaG8tY2hhbi1hZT4gZnJvbSAiPFUwRTQxPjxVMEUwOD4iCitjb2xsYXRpbmctZWxlbWVudCA8Y2hvLWNoYW4tbz4gZnJvbSAiPFUwRTQyPjxVMEUwOD4iCitjb2xsYXRpbmctZWxlbWVudCA8Y2hvLWNoYW4tYWktbWFpbXVhbj4gZnJvbSAiPFUwRTQzPjxVMEUwOD4iCitjb2xsYXRpbmctZWxlbWVudCA8Y2hvLWNoYW4tYWktbWFpbWFsYWk+IGZyb20gIjxVMEU0ND48VTBFMDg+IgorCitjb2xsYXRpbmctZWxlbWVudCA8Y2hvLWNoaW5nLWU+IGZyb20gIjxVMEU0MD48VTBFMDk+IgorY29sbGF0aW5nLWVsZW1lbnQgPGNoby1jaGluZy1hZT4gZnJvbSAiPFUwRTQxPjxVMEUwOT4iCitjb2xsYXRpbmctZWxlbWVudCA8Y2hvLWNoaW5nLW8+IGZyb20gIjxVMEU0Mj48VTBFMDk+IgorY29sbGF0aW5nLWVsZW1lbnQgPGNoby1jaGluZy1haS1tYWltdWFuPiBmcm9tICI8VTBFNDM+PFUwRTA5PiIKK2NvbGxhdGluZy1lbGVtZW50IDxjaG8tY2hpbmctYWktbWFpbWFsYWk+IGZyb20gIjxVMEU0ND48VTBFMDk+IgorCitjb2xsYXRpbmctZWxlbWVudCA8Y2hvLWNoYW5nLWU+IGZyb20gIjxVMEU0MD48VTBFMEE+IgorY29sbGF0aW5nLWVsZW1lbnQgPGNoby1jaGFuZy1hZT4gZnJvbSAiPFUwRTQxPjxVMEUwQT4iCitjb2xsYXRpbmctZWxlbWVudCA8Y2hvLWNoYW5nLW8+IGZyb20gIjxVMEU0Mj48VTBFMEE+IgorY29sbGF0aW5nLWVsZW1lbnQgPGNoby1jaGFuZy1haS1tYWltdWFuPiBmcm9tICI8VTBFNDM+PFUwRTBBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxjaG8tY2hhbmctYWktbWFpbWFsYWk+IGZyb20gIjxVMEU0ND48VTBFMEE+IgorCitjb2xsYXRpbmctZWxlbWVudCA8c28tc28tZT4gZnJvbSAiPFUwRTQwPjxVMEUwQj4iCitjb2xsYXRpbmctZWxlbWVudCA8c28tc28tYWU+IGZyb20gIjxVMEU0MT48VTBFMEI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHNvLXNvLW8+IGZyb20gIjxVMEU0Mj48VTBFMEI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHNvLXNvLWFpLW1haW11YW4+IGZyb20gIjxVMEU0Mz48VTBFMEI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHNvLXNvLWFpLW1haW1hbGFpPiBmcm9tICI8VTBFNDQ+PFUwRTBCPiIKKworY29sbGF0aW5nLWVsZW1lbnQgPGNoby1jaG9lLWU+IGZyb20gIjxVMEU0MD48VTBFMEM+IgorY29sbGF0aW5nLWVsZW1lbnQgPGNoby1jaG9lLWFlPiBmcm9tICI8VTBFNDE+PFUwRTBDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxjaG8tY2hvZS1vPiBmcm9tICI8VTBFNDI+PFUwRTBDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxjaG8tY2hvZS1haS1tYWltdWFuPiBmcm9tICI8VTBFNDM+PFUwRTBDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxjaG8tY2hvZS1haS1tYWltYWxhaT4gZnJvbSAiPFUwRTQ0PjxVMEUwQz4iCisKK2NvbGxhdGluZy1lbGVtZW50IDx5by15aW5nLWU+IGZyb20gIjxVMEU0MD48VTBFMEQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPHlvLXlpbmctYWU+IGZyb20gIjxVMEU0MT48VTBFMEQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPHlvLXlpbmctbz4gZnJvbSAiPFUwRTQyPjxVMEUwRD4iCitjb2xsYXRpbmctZWxlbWVudCA8eW8teWluZy1haS1tYWltdWFuPiBmcm9tICI8VTBFNDM+PFUwRTBEPiIKK2NvbGxhdGluZy1lbGVtZW50IDx5by15aW5nLWFpLW1haW1hbGFpPiBmcm9tICI8VTBFNDQ+PFUwRTBEPiIKKworY29sbGF0aW5nLWVsZW1lbnQgPGRvLWNoYWRhLWU+IGZyb20gIjxVMEU0MD48VTBFMEU+IgorY29sbGF0aW5nLWVsZW1lbnQgPGRvLWNoYWRhLWFlPiBmcm9tICI8VTBFNDE+PFUwRTBFPiIKK2NvbGxhdGluZy1lbGVtZW50IDxkby1jaGFkYS1vPiBmcm9tICI8VTBFNDI+PFUwRTBFPiIKK2NvbGxhdGluZy1lbGVtZW50IDxkby1jaGFkYS1haS1tYWltdWFuPiBmcm9tICI8VTBFNDM+PFUwRTBFPiIKK2NvbGxhdGluZy1lbGVtZW50IDxkby1jaGFkYS1haS1tYWltYWxhaT4gZnJvbSAiPFUwRTQ0PjxVMEUwRT4iCisKK2NvbGxhdGluZy1lbGVtZW50IDx0by1wYXRhay1lPiBmcm9tICI8VTBFNDA+PFUwRTBGPiIKK2NvbGxhdGluZy1lbGVtZW50IDx0by1wYXRhay1hZT4gZnJvbSAiPFUwRTQxPjxVMEUwRj4iCitjb2xsYXRpbmctZWxlbWVudCA8dG8tcGF0YWstbz4gZnJvbSAiPFUwRTQyPjxVMEUwRj4iCitjb2xsYXRpbmctZWxlbWVudCA8dG8tcGF0YWstYWktbWFpbXVhbj4gZnJvbSAiPFUwRTQzPjxVMEUwRj4iCitjb2xsYXRpbmctZWxlbWVudCA8dG8tcGF0YWstYWktbWFpbWFsYWk+IGZyb20gIjxVMEU0ND48VTBFMEY+IgorCitjb2xsYXRpbmctZWxlbWVudCA8dGhvLXRoYW4tZT4gZnJvbSAiPFUwRTQwPjxVMEUxMD4iCitjb2xsYXRpbmctZWxlbWVudCA8dGhvLXRoYW4tYWU+IGZyb20gIjxVMEU0MT48VTBFMTA+IgorY29sbGF0aW5nLWVsZW1lbnQgPHRoby10aGFuLW8+IGZyb20gIjxVMEU0Mj48VTBFMTA+IgorY29sbGF0aW5nLWVsZW1lbnQgPHRoby10aGFuLWFpLW1haW11YW4+IGZyb20gIjxVMEU0Mz48VTBFMTA+IgorY29sbGF0aW5nLWVsZW1lbnQgPHRoby10aGFuLWFpLW1haW1hbGFpPiBmcm9tICI8VTBFNDQ+PFUwRTEwPiIKKworY29sbGF0aW5nLWVsZW1lbnQgPHRoby1uYW5nbW9udGhvLWU+IGZyb20gIjxVMEU0MD48VTBFMTE+IgorY29sbGF0aW5nLWVsZW1lbnQgPHRoby1uYW5nbW9udGhvLWFlPiBmcm9tICI8VTBFNDE+PFUwRTExPiIKK2NvbGxhdGluZy1lbGVtZW50IDx0aG8tbmFuZ21vbnRoby1vPiBmcm9tICI8VTBFNDI+PFUwRTExPiIKK2NvbGxhdGluZy1lbGVtZW50IDx0aG8tbmFuZ21vbnRoby1haS1tYWltdWFuPiBmcm9tICI8VTBFNDM+PFUwRTExPiIKK2NvbGxhdGluZy1lbGVtZW50IDx0aG8tbmFuZ21vbnRoby1haS1tYWltYWxhaT4gZnJvbSAiPFUwRTQ0PjxVMEUxMT4iCisKK2NvbGxhdGluZy1lbGVtZW50IDx0aG8tcGh1dGhhby1lPiBmcm9tICI8VTBFNDA+PFUwRTEyPiIKK2NvbGxhdGluZy1lbGVtZW50IDx0aG8tcGh1dGhhby1hZT4gZnJvbSAiPFUwRTQxPjxVMEUxMj4iCitjb2xsYXRpbmctZWxlbWVudCA8dGhvLXBodXRoYW8tbz4gZnJvbSAiPFUwRTQyPjxVMEUxMj4iCitjb2xsYXRpbmctZWxlbWVudCA8dGhvLXBodXRoYW8tYWktbWFpbXVhbj4gZnJvbSAiPFUwRTQzPjxVMEUxMj4iCitjb2xsYXRpbmctZWxlbWVudCA8dGhvLXBodXRoYW8tYWktbWFpbWFsYWk+IGZyb20gIjxVMEU0ND48VTBFMTI+IgorCitjb2xsYXRpbmctZWxlbWVudCA8bm8tbmVuLWU+IGZyb20gIjxVMEU0MD48VTBFMTM+IgorY29sbGF0aW5nLWVsZW1lbnQgPG5vLW5lbi1hZT4gZnJvbSAiPFUwRTQxPjxVMEUxMz4iCitjb2xsYXRpbmctZWxlbWVudCA8bm8tbmVuLW8+IGZyb20gIjxVMEU0Mj48VTBFMTM+IgorY29sbGF0aW5nLWVsZW1lbnQgPG5vLW5lbi1haS1tYWltdWFuPiBmcm9tICI8VTBFNDM+PFUwRTEzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxuby1uZW4tYWktbWFpbWFsYWk+IGZyb20gIjxVMEU0ND48VTBFMTM+IgorCitjb2xsYXRpbmctZWxlbWVudCA8ZG8tZGVrLWU+IGZyb20gIjxVMEU0MD48VTBFMTQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPGRvLWRlay1hZT4gZnJvbSAiPFUwRTQxPjxVMEUxND4iCitjb2xsYXRpbmctZWxlbWVudCA8ZG8tZGVrLW8+IGZyb20gIjxVMEU0Mj48VTBFMTQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPGRvLWRlay1haS1tYWltdWFuPiBmcm9tICI8VTBFNDM+PFUwRTE0PiIKK2NvbGxhdGluZy1lbGVtZW50IDxkby1kZWstYWktbWFpbWFsYWk+IGZyb20gIjxVMEU0ND48VTBFMTQ+IgorCitjb2xsYXRpbmctZWxlbWVudCA8dG8tdGFvLWU+IGZyb20gIjxVMEU0MD48VTBFMTU+IgorY29sbGF0aW5nLWVsZW1lbnQgPHRvLXRhby1hZT4gZnJvbSAiPFUwRTQxPjxVMEUxNT4iCitjb2xsYXRpbmctZWxlbWVudCA8dG8tdGFvLW8+IGZyb20gIjxVMEU0Mj48VTBFMTU+IgorY29sbGF0aW5nLWVsZW1lbnQgPHRvLXRhby1haS1tYWltdWFuPiBmcm9tICI8VTBFNDM+PFUwRTE1PiIKK2NvbGxhdGluZy1lbGVtZW50IDx0by10YW8tYWktbWFpbWFsYWk+IGZyb20gIjxVMEU0ND48VTBFMTU+IgorCitjb2xsYXRpbmctZWxlbWVudCA8dGhvLXRodW5nLWU+IGZyb20gIjxVMEU0MD48VTBFMTY+IgorY29sbGF0aW5nLWVsZW1lbnQgPHRoby10aHVuZy1hZT4gZnJvbSAiPFUwRTQxPjxVMEUxNj4iCitjb2xsYXRpbmctZWxlbWVudCA8dGhvLXRodW5nLW8+IGZyb20gIjxVMEU0Mj48VTBFMTY+IgorY29sbGF0aW5nLWVsZW1lbnQgPHRoby10aHVuZy1haS1tYWltdWFuPiBmcm9tICI8VTBFNDM+PFUwRTE2PiIKK2NvbGxhdGluZy1lbGVtZW50IDx0aG8tdGh1bmctYWktbWFpbWFsYWk+IGZyb20gIjxVMEU0ND48VTBFMTY+IgorCitjb2xsYXRpbmctZWxlbWVudCA8dGhvLXRoYWhhbi1lPiBmcm9tICI8VTBFNDA+PFUwRTE3PiIKK2NvbGxhdGluZy1lbGVtZW50IDx0aG8tdGhhaGFuLWFlPiBmcm9tICI8VTBFNDE+PFUwRTE3PiIKK2NvbGxhdGluZy1lbGVtZW50IDx0aG8tdGhhaGFuLW8+IGZyb20gIjxVMEU0Mj48VTBFMTc+IgorY29sbGF0aW5nLWVsZW1lbnQgPHRoby10aGFoYW4tYWktbWFpbXVhbj4gZnJvbSAiPFUwRTQzPjxVMEUxNz4iCitjb2xsYXRpbmctZWxlbWVudCA8dGhvLXRoYWhhbi1haS1tYWltYWxhaT4gZnJvbSAiPFUwRTQ0PjxVMEUxNz4iCisKK2NvbGxhdGluZy1lbGVtZW50IDx0aG8tdGhvbmctZT4gZnJvbSAiPFUwRTQwPjxVMEUxOD4iCitjb2xsYXRpbmctZWxlbWVudCA8dGhvLXRob25nLWFlPiBmcm9tICI8VTBFNDE+PFUwRTE4PiIKK2NvbGxhdGluZy1lbGVtZW50IDx0aG8tdGhvbmctbz4gZnJvbSAiPFUwRTQyPjxVMEUxOD4iCitjb2xsYXRpbmctZWxlbWVudCA8dGhvLXRob25nLWFpLW1haW11YW4+IGZyb20gIjxVMEU0Mz48VTBFMTg+IgorY29sbGF0aW5nLWVsZW1lbnQgPHRoby10aG9uZy1haS1tYWltYWxhaT4gZnJvbSAiPFUwRTQ0PjxVMEUxOD4iCisKK2NvbGxhdGluZy1lbGVtZW50IDxuby1udS1lPiBmcm9tICI8VTBFNDA+PFUwRTE5PiIKK2NvbGxhdGluZy1lbGVtZW50IDxuby1udS1hZT4gZnJvbSAiPFUwRTQxPjxVMEUxOT4iCitjb2xsYXRpbmctZWxlbWVudCA8bm8tbnUtbz4gZnJvbSAiPFUwRTQyPjxVMEUxOT4iCitjb2xsYXRpbmctZWxlbWVudCA8bm8tbnUtYWktbWFpbXVhbj4gZnJvbSAiPFUwRTQzPjxVMEUxOT4iCitjb2xsYXRpbmctZWxlbWVudCA8bm8tbnUtYWktbWFpbWFsYWk+IGZyb20gIjxVMEU0ND48VTBFMTk+IgorCitjb2xsYXRpbmctZWxlbWVudCA8Ym8tYmFpbWFpLWU+IGZyb20gIjxVMEU0MD48VTBFMUE+IgorY29sbGF0aW5nLWVsZW1lbnQgPGJvLWJhaW1haS1hZT4gZnJvbSAiPFUwRTQxPjxVMEUxQT4iCitjb2xsYXRpbmctZWxlbWVudCA8Ym8tYmFpbWFpLW8+IGZyb20gIjxVMEU0Mj48VTBFMUE+IgorY29sbGF0aW5nLWVsZW1lbnQgPGJvLWJhaW1haS1haS1tYWltdWFuPiBmcm9tICI8VTBFNDM+PFUwRTFBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxiby1iYWltYWktYWktbWFpbWFsYWk+IGZyb20gIjxVMEU0ND48VTBFMUE+IgorCitjb2xsYXRpbmctZWxlbWVudCA8cG8tcGxhLWU+IGZyb20gIjxVMEU0MD48VTBFMUI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHBvLXBsYS1hZT4gZnJvbSAiPFUwRTQxPjxVMEUxQj4iCitjb2xsYXRpbmctZWxlbWVudCA8cG8tcGxhLW8+IGZyb20gIjxVMEU0Mj48VTBFMUI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHBvLXBsYS1haS1tYWltdWFuPiBmcm9tICI8VTBFNDM+PFUwRTFCPiIKK2NvbGxhdGluZy1lbGVtZW50IDxwby1wbGEtYWktbWFpbWFsYWk+IGZyb20gIjxVMEU0ND48VTBFMUI+IgorCitjb2xsYXRpbmctZWxlbWVudCA8cGhvLXBodW5nLWU+IGZyb20gIjxVMEU0MD48VTBFMUM+IgorY29sbGF0aW5nLWVsZW1lbnQgPHBoby1waHVuZy1hZT4gZnJvbSAiPFUwRTQxPjxVMEUxQz4iCitjb2xsYXRpbmctZWxlbWVudCA8cGhvLXBodW5nLW8+IGZyb20gIjxVMEU0Mj48VTBFMUM+IgorY29sbGF0aW5nLWVsZW1lbnQgPHBoby1waHVuZy1haS1tYWltdWFuPiBmcm9tICI8VTBFNDM+PFUwRTFDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxwaG8tcGh1bmctYWktbWFpbWFsYWk+IGZyb20gIjxVMEU0ND48VTBFMUM+IgorCitjb2xsYXRpbmctZWxlbWVudCA8Zm8tZmEtZT4gZnJvbSAiPFUwRTQwPjxVMEUxRD4iCitjb2xsYXRpbmctZWxlbWVudCA8Zm8tZmEtYWU+IGZyb20gIjxVMEU0MT48VTBFMUQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPGZvLWZhLW8+IGZyb20gIjxVMEU0Mj48VTBFMUQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPGZvLWZhLWFpLW1haW11YW4+IGZyb20gIjxVMEU0Mz48VTBFMUQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPGZvLWZhLWFpLW1haW1hbGFpPiBmcm9tICI8VTBFNDQ+PFUwRTFEPiIKKworY29sbGF0aW5nLWVsZW1lbnQgPHBoby1waGFuLWU+IGZyb20gIjxVMEU0MD48VTBFMUU+IgorY29sbGF0aW5nLWVsZW1lbnQgPHBoby1waGFuLWFlPiBmcm9tICI8VTBFNDE+PFUwRTFFPiIKK2NvbGxhdGluZy1lbGVtZW50IDxwaG8tcGhhbi1vPiBmcm9tICI8VTBFNDI+PFUwRTFFPiIKK2NvbGxhdGluZy1lbGVtZW50IDxwaG8tcGhhbi1haS1tYWltdWFuPiBmcm9tICI8VTBFNDM+PFUwRTFFPiIKK2NvbGxhdGluZy1lbGVtZW50IDxwaG8tcGhhbi1haS1tYWltYWxhaT4gZnJvbSAiPFUwRTQ0PjxVMEUxRT4iCisKK2NvbGxhdGluZy1lbGVtZW50IDxmby1mYW4tZT4gZnJvbSAiPFUwRTQwPjxVMEUxRj4iCitjb2xsYXRpbmctZWxlbWVudCA8Zm8tZmFuLWFlPiBmcm9tICI8VTBFNDE+PFUwRTFGPiIKK2NvbGxhdGluZy1lbGVtZW50IDxmby1mYW4tbz4gZnJvbSAiPFUwRTQyPjxVMEUxRj4iCitjb2xsYXRpbmctZWxlbWVudCA8Zm8tZmFuLWFpLW1haW11YW4+IGZyb20gIjxVMEU0Mz48VTBFMUY+IgorY29sbGF0aW5nLWVsZW1lbnQgPGZvLWZhbi1haS1tYWltYWxhaT4gZnJvbSAiPFUwRTQ0PjxVMEUxRj4iCisKK2NvbGxhdGluZy1lbGVtZW50IDxwaG8tc2FtcGhhby1lPiBmcm9tICI8VTBFNDA+PFUwRTIwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxwaG8tc2FtcGhhby1hZT4gZnJvbSAiPFUwRTQxPjxVMEUyMD4iCitjb2xsYXRpbmctZWxlbWVudCA8cGhvLXNhbXBoYW8tbz4gZnJvbSAiPFUwRTQyPjxVMEUyMD4iCitjb2xsYXRpbmctZWxlbWVudCA8cGhvLXNhbXBoYW8tYWktbWFpbXVhbj4gZnJvbSAiPFUwRTQzPjxVMEUyMD4iCitjb2xsYXRpbmctZWxlbWVudCA8cGhvLXNhbXBoYW8tYWktbWFpbWFsYWk+IGZyb20gIjxVMEU0ND48VTBFMjA+IgorCitjb2xsYXRpbmctZWxlbWVudCA8bW8tbWEtZT4gZnJvbSAiPFUwRTQwPjxVMEUyMT4iCitjb2xsYXRpbmctZWxlbWVudCA8bW8tbWEtYWU+IGZyb20gIjxVMEU0MT48VTBFMjE+IgorY29sbGF0aW5nLWVsZW1lbnQgPG1vLW1hLW8+IGZyb20gIjxVMEU0Mj48VTBFMjE+IgorY29sbGF0aW5nLWVsZW1lbnQgPG1vLW1hLWFpLW1haW11YW4+IGZyb20gIjxVMEU0Mz48VTBFMjE+IgorY29sbGF0aW5nLWVsZW1lbnQgPG1vLW1hLWFpLW1haW1hbGFpPiBmcm9tICI8VTBFNDQ+PFUwRTIxPiIKKworY29sbGF0aW5nLWVsZW1lbnQgPHlvLXlhay1lPiBmcm9tICI8VTBFNDA+PFUwRTIyPiIKK2NvbGxhdGluZy1lbGVtZW50IDx5by15YWstYWU+IGZyb20gIjxVMEU0MT48VTBFMjI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHlvLXlhay1vPiBmcm9tICI8VTBFNDI+PFUwRTIyPiIKK2NvbGxhdGluZy1lbGVtZW50IDx5by15YWstYWktbWFpbXVhbj4gZnJvbSAiPFUwRTQzPjxVMEUyMj4iCitjb2xsYXRpbmctZWxlbWVudCA8eW8teWFrLWFpLW1haW1hbGFpPiBmcm9tICI8VTBFNDQ+PFUwRTIyPiIKKworY29sbGF0aW5nLWVsZW1lbnQgPHJvLXJ1YS1lPiBmcm9tICI8VTBFNDA+PFUwRTIzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyby1ydWEtYWU+IGZyb20gIjxVMEU0MT48VTBFMjM+IgorY29sbGF0aW5nLWVsZW1lbnQgPHJvLXJ1YS1vPiBmcm9tICI8VTBFNDI+PFUwRTIzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxyby1ydWEtYWktbWFpbXVhbj4gZnJvbSAiPFUwRTQzPjxVMEUyMz4iCitjb2xsYXRpbmctZWxlbWVudCA8cm8tcnVhLWFpLW1haW1hbGFpPiBmcm9tICI8VTBFNDQ+PFUwRTIzPiIKKworY29sbGF0aW5nLWVsZW1lbnQgPGxvLWxpbmctZT4gZnJvbSAiPFUwRTQwPjxVMEUyNT4iCitjb2xsYXRpbmctZWxlbWVudCA8bG8tbGluZy1hZT4gZnJvbSAiPFUwRTQxPjxVMEUyNT4iCitjb2xsYXRpbmctZWxlbWVudCA8bG8tbGluZy1vPiBmcm9tICI8VTBFNDI+PFUwRTI1PiIKK2NvbGxhdGluZy1lbGVtZW50IDxsby1saW5nLWFpLW1haW11YW4+IGZyb20gIjxVMEU0Mz48VTBFMjU+IgorY29sbGF0aW5nLWVsZW1lbnQgPGxvLWxpbmctYWktbWFpbWFsYWk+IGZyb20gIjxVMEU0ND48VTBFMjU+IgorCitjb2xsYXRpbmctZWxlbWVudCA8d28td2Flbi1lPiBmcm9tICI8VTBFNDA+PFUwRTI3PiIKK2NvbGxhdGluZy1lbGVtZW50IDx3by13YWVuLWFlPiBmcm9tICI8VTBFNDE+PFUwRTI3PiIKK2NvbGxhdGluZy1lbGVtZW50IDx3by13YWVuLW8+IGZyb20gIjxVMEU0Mj48VTBFMjc+IgorY29sbGF0aW5nLWVsZW1lbnQgPHdvLXdhZW4tYWktbWFpbXVhbj4gZnJvbSAiPFUwRTQzPjxVMEUyNz4iCitjb2xsYXRpbmctZWxlbWVudCA8d28td2Flbi1haS1tYWltYWxhaT4gZnJvbSAiPFUwRTQ0PjxVMEUyNz4iCisKK2NvbGxhdGluZy1lbGVtZW50IDxzby1zYWxhLWU+IGZyb20gIjxVMEU0MD48VTBFMjg+IgorY29sbGF0aW5nLWVsZW1lbnQgPHNvLXNhbGEtYWU+IGZyb20gIjxVMEU0MT48VTBFMjg+IgorY29sbGF0aW5nLWVsZW1lbnQgPHNvLXNhbGEtbz4gZnJvbSAiPFUwRTQyPjxVMEUyOD4iCitjb2xsYXRpbmctZWxlbWVudCA8c28tc2FsYS1haS1tYWltdWFuPiBmcm9tICI8VTBFNDM+PFUwRTI4PiIKK2NvbGxhdGluZy1lbGVtZW50IDxzby1zYWxhLWFpLW1haW1hbGFpPiBmcm9tICI8VTBFNDQ+PFUwRTI4PiIKKworY29sbGF0aW5nLWVsZW1lbnQgPHNvLXJ1c2ktZT4gZnJvbSAiPFUwRTQwPjxVMEUyOT4iCitjb2xsYXRpbmctZWxlbWVudCA8c28tcnVzaS1hZT4gZnJvbSAiPFUwRTQxPjxVMEUyOT4iCitjb2xsYXRpbmctZWxlbWVudCA8c28tcnVzaS1vPiBmcm9tICI8VTBFNDI+PFUwRTI5PiIKK2NvbGxhdGluZy1lbGVtZW50IDxzby1ydXNpLWFpLW1haW11YW4+IGZyb20gIjxVMEU0Mz48VTBFMjk+IgorY29sbGF0aW5nLWVsZW1lbnQgPHNvLXJ1c2ktYWktbWFpbWFsYWk+IGZyb20gIjxVMEU0ND48VTBFMjk+IgorCitjb2xsYXRpbmctZWxlbWVudCA8c28tc3VhLWU+IGZyb20gIjxVMEU0MD48VTBFMkE+IgorY29sbGF0aW5nLWVsZW1lbnQgPHNvLXN1YS1hZT4gZnJvbSAiPFUwRTQxPjxVMEUyQT4iCitjb2xsYXRpbmctZWxlbWVudCA8c28tc3VhLW8+IGZyb20gIjxVMEU0Mj48VTBFMkE+IgorY29sbGF0aW5nLWVsZW1lbnQgPHNvLXN1YS1haS1tYWltdWFuPiBmcm9tICI8VTBFNDM+PFUwRTJBPiIKK2NvbGxhdGluZy1lbGVtZW50IDxzby1zdWEtYWktbWFpbWFsYWk+IGZyb20gIjxVMEU0ND48VTBFMkE+IgorCitjb2xsYXRpbmctZWxlbWVudCA8aG8taGlwLWU+IGZyb20gIjxVMEU0MD48VTBFMkI+IgorY29sbGF0aW5nLWVsZW1lbnQgPGhvLWhpcC1hZT4gZnJvbSAiPFUwRTQxPjxVMEUyQj4iCitjb2xsYXRpbmctZWxlbWVudCA8aG8taGlwLW8+IGZyb20gIjxVMEU0Mj48VTBFMkI+IgorY29sbGF0aW5nLWVsZW1lbnQgPGhvLWhpcC1haS1tYWltdWFuPiBmcm9tICI8VTBFNDM+PFUwRTJCPiIKK2NvbGxhdGluZy1lbGVtZW50IDxoby1oaXAtYWktbWFpbWFsYWk+IGZyb20gIjxVMEU0ND48VTBFMkI+IgorCitjb2xsYXRpbmctZWxlbWVudCA8bG8tY2h1bGEtZT4gZnJvbSAiPFUwRTQwPjxVMEUyQz4iCitjb2xsYXRpbmctZWxlbWVudCA8bG8tY2h1bGEtYWU+IGZyb20gIjxVMEU0MT48VTBFMkM+IgorY29sbGF0aW5nLWVsZW1lbnQgPGxvLWNodWxhLW8+IGZyb20gIjxVMEU0Mj48VTBFMkM+IgorY29sbGF0aW5nLWVsZW1lbnQgPGxvLWNodWxhLWFpLW1haW11YW4+IGZyb20gIjxVMEU0Mz48VTBFMkM+IgorY29sbGF0aW5nLWVsZW1lbnQgPGxvLWNodWxhLWFpLW1haW1hbGFpPiBmcm9tICI8VTBFNDQ+PFUwRTJDPiIKKworY29sbGF0aW5nLWVsZW1lbnQgPG8tYW5nLWU+IGZyb20gIjxVMEU0MD48VTBFMkQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPG8tYW5nLWFlPiBmcm9tICI8VTBFNDE+PFUwRTJEPiIKK2NvbGxhdGluZy1lbGVtZW50IDxvLWFuZy1vPiBmcm9tICI8VTBFNDI+PFUwRTJEPiIKK2NvbGxhdGluZy1lbGVtZW50IDxvLWFuZy1haS1tYWltdWFuPiBmcm9tICI8VTBFNDM+PFUwRTJEPiIKK2NvbGxhdGluZy1lbGVtZW50IDxvLWFuZy1haS1tYWltYWxhaT4gZnJvbSAiPFUwRTQ0PjxVMEUyRD4iCisKK2NvbGxhdGluZy1lbGVtZW50IDxoby1ub2todWstZT4gZnJvbSAiPFUwRTQwPjxVMEUyRT4iCitjb2xsYXRpbmctZWxlbWVudCA8aG8tbm9raHVrLWFlPiBmcm9tICI8VTBFNDE+PFUwRTJFPiIKK2NvbGxhdGluZy1lbGVtZW50IDxoby1ub2todWstbz4gZnJvbSAiPFUwRTQyPjxVMEUyRT4iCitjb2xsYXRpbmctZWxlbWVudCA8aG8tbm9raHVrLWFpLW1haW11YW4+IGZyb20gIjxVMEU0Mz48VTBFMkU+IgorY29sbGF0aW5nLWVsZW1lbnQgPGhvLW5va2h1ay1haS1tYWltYWxhaT4gZnJvbSAiPFUwRTQ0PjxVMEUyRT4iCisKK2NvbGxhdGluZy1zeW1ib2wgIDxCTEFOSz4KK2NvbGxhdGluZy1zeW1ib2wgIDxUSEFJST4KK2NvbGxhdGluZy1zeW1ib2wgIDxDQVA+Citjb2xsYXRpbmctc3ltYm9sICA8TUlOPgorY29sbGF0aW5nLXN5bWJvbCAgPEVYVFJBPgorCitvcmRlcl9zdGFydCAgIGZvcndhcmQ7Zm9yd2FyZDtmb3J3YXJkO2ZvcndhcmQKKworJSBkZWZpbml0aW9ucyBvZiBleHRyYSBjb2xsYXRpbmcgc3ltYm9scworPEJMQU5LPgorPFRIQUlJPgorPENBUD4KKzxNSU4+Cis8RVhUUkE+CisKK1VOREVGSU5FRCAgICAgIElHTk9SRTtJR05PUkU7SUdOT1JFO0lHTk9SRQorCislIHB1bmN0dWF0aW9uIG1hcmtzLCBvcmRlcmVkIGFmdGVyIElTTy9JRUMgMTQ2NTEKKzxVMDAyMD4gICAgICAgIElHTk9SRTtJR05PUkU7PFUwMDIwPjtJR05PUkUgICAgICAgICAgJSBTUEFDRQorPFUwMDVGPiAgIElHTk9SRTtJR05PUkU7PFUwMDVGPjtJR05PUkUgICAgICUgTE9XIExJTkUKKzxVMDAyRD4gICAgICAgSUdOT1JFO0lHTk9SRTs8VTAwMkQ+O0lHTk9SRSAgICAgICAgICUgSFlQSEVOLU1JTlVTCis8VTAwMkM+ICAgICAgICBJR05PUkU7SUdOT1JFOzxVMDAyQz47SUdOT1JFICAgICAgICAgICUgQ09NTUEKKzxVMDAzQj4gICAgSUdOT1JFO0lHTk9SRTs8VTAwM0I+O0lHTk9SRSAgICAgICUgU0VNSUNPTE9OCis8VTAwM0E+ICAgICAgICBJR05PUkU7SUdOT1JFOzxVMDAzQT47SUdOT1JFICAgICAgICAgICUgQ09MT04KKzxVMDAyMT4gSUdOT1JFO0lHTk9SRTs8VTAwMjE+O0lHTk9SRSAgJSBFWENMQU1BVElPTiBNQVJLCis8VTAwM0Y+ICAgIElHTk9SRTtJR05PUkU7PFUwMDNGPjtJR05PUkUgICAgICUgUVVFU1RJT04gTUFSSworPFUwMDJGPiAgICAgICAgSUdOT1JFO0lHTk9SRTs8VTAwMkY+O0lHTk9SRSAgICAgICAgICAlIFNPTElEVVMKKzxVMDAyRT4gICAgICAgSUdOT1JFO0lHTk9SRTs8VTAwMkU+O0lHTk9SRSAgICAgICAgICUgRlVMTCBTVE9QCis8VTBFMkY+ICAgICAgICBJR05PUkU7SUdOT1JFOzxVMEUyRj47SUdOT1JFICAgICAgICAgICUgVEhBSSBDSEFSQUNURVIgUEFJWUFOTk9JCis8VTBFNDY+ICAgICAgICBJR05PUkU7SUdOT1JFOzxVMEU0Nj47SUdOT1JFICAgICAgICAgICUgVEhBSSBDSEFSQUNURVIgTUFJWUFNT0sKKzxVMDA2MD4gSUdOT1JFO0lHTk9SRTs8VTAwNjA+O0lHTk9SRSAgICUgR1JBVkUgQUNDRU5UCis8VTAwNUU+ICAgSUdOT1JFO0lHTk9SRTs8VTAwNUU+O0lHTk9SRSAgICAgJSBDSVJDVU1GTEVYCis8VTAwN0U+ICAgICAgICBJR05PUkU7SUdOT1JFOzxVMDA3RT47SUdOT1JFICAgICAgICAgICUgVElMREUKKzxVMDAyNz4gICAgICAgIElHTk9SRTtJR05PUkU7PFUwMDI3PjtJR05PUkUgICAgJSBBUE9TVFJPUEhFCis8VTAwMjI+ICAgIElHTk9SRTtJR05PUkU7PFUwMDIyPjtJR05PUkUgICAgJSBRVU9UQVRJT04gTUFSSworPFUwMDI4PiAgSUdOT1JFO0lHTk9SRTs8VTAwMjg+O0lHTk9SRSAgJSBMRUZUIFBBUkVOLgorPFUwMDVCPiBJR05PUkU7SUdOT1JFOzxVMDA1Qj47SUdOT1JFICAlIExUIEJSQUNLRVQKKzxVMDA3Qj4gICAgICAgIElHTk9SRTtJR05PUkU7PFUwMDdCPjtJR05PUkUgICAgJSBMRUZUIENVUkxZIEJSQUNLRVQKKzxVMDA3RD4gICAgICAgSUdOT1JFO0lHTk9SRTs8VTAwN0Q+O0lHTk9SRSAgICUgUklHSFQgQ1VSTFkgQlJBQ0tFVAorPFUwMDVEPiBJR05PUkU7SUdOT1JFOzxVMDA1RD47SUdOT1JFICUgUlQgQlJBQ0tFVAorPFUwMDI5PiBJR05PUkU7SUdOT1JFOzxVMDAyOT47SUdOT1JFICUgUklHSFQgUEFSRU4uCis8VTAwNDA+ICAgICBJR05PUkU7SUdOT1JFOzxVMDA0MD47SUdOT1JFICAgICAlIENPTU1FUkNJQUwgQVQKKzxVMEUzRj4gICAgICAgICAgICAgSUdOT1JFO0lHTk9SRTs8VTBFM0Y+O0lHTk9SRSAgJSBUSEFJIENIQVJBQ1RFUiBTWU1CT0wgQkFIVAorPFUwMDI0PiAgICAgICBJR05PUkU7SUdOT1JFOzxVMDAyND47SUdOT1JFICAgJSBET0xMQVIgU0lHTgorPFUwRTRGPiAgICAgICAgICAgICBJR05PUkU7SUdOT1JFOzxVMEU0Rj47SUdOT1JFICAlIFRIQUkgQ0hBUkFDVEVSIEZPTkdNQU4KKzxVMEU1QT4gICAgICAgICAgICAgSUdOT1JFO0lHTk9SRTs8VTBFNUE+O0lHTk9SRSAgJSBUSEFJIENIQVJBQ1RFUiBBTkdLSEFOS0hVCis8VTBFNUI+ICAgICAgICAgICAgIElHTk9SRTtJR05PUkU7PFUwRTVCPjtJR05PUkUgICUgVEhBSSBDSEFSQUNURVIgS0hPTVVUCis8VTAwMkE+ICAgICAgICAgIElHTk9SRTtJR05PUkU7PFUwMDJBPjtJR05PUkUgICAgICAlIEFTVEVSSVNLCis8VTAwNUM+ICAgICAgICAgSUdOT1JFO0lHTk9SRTs8VTAwNUM+O0lHTk9SRSAgICAgJSBCQUNLIFNPTElEVVMKKzxVMDAyNj4gICAgICAgICBJR05PUkU7SUdOT1JFOzxVMDAyNj47SUdOT1JFICAgICAlIEFNUEVSU0FORAorPFUwMDIzPiAgICAgICBJR05PUkU7SUdOT1JFOzxVMDAyMz47SUdOT1JFICAgJSBOVU1CRVIgU0lHTgorPFUwMDI1PiAgICAgIElHTk9SRTtJR05PUkU7PFUwMDI1PjtJR05PUkUgICUgUEVSQ0VOVAorPFUwMDJCPiAgICAgICAgIElHTk9SRTtJR05PUkU7PFUwMDJCPjtJR05PUkUgICAgICUgUExVUworPFUwMDNDPiAgICBJR05PUkU7SUdOT1JFOzxVMDAzQz47SUdOT1JFICAgICAlIExFU1MgVEhBTgorPFUwMDNEPiAgICAgICBJR05PUkU7SUdOT1JFOzxVMDAzRD47SUdOT1JFICAgJSBFUVVBTAorPFUwMDNFPiBJR05PUkU7SUdOT1JFOzxVMDAzRT47SUdOT1JFICAlIEdSRUFURVIgVEhBTgorPFUwMDdDPiAgICAgSUdOT1JFO0lHTk9SRTs8VTAwN0M+O0lHTk9SRSAlIFZFUlRJQ0FMIExJTkUKKworJSBUaGFpIHRvbmUgbWFya3MgYW5kIGRpYWNyaXRpY3MKKzxVMEU0RT4gICAgICAgIElHTk9SRTs8VTBFNEU+OzxCTEFOSz47PEJMQU5LPiAgJSBUSEFJIENIQVJBQ1RFUiBZQU1BS0tBTgorPFUwRTNBPiAgICAgICAgSUdOT1JFOzxVMEUzQT47PEJMQU5LPjs8QkxBTks+ICAlIFRIQUkgQ0hBUkFDVEVSIFBJTlRIVQorPFUwRTRDPiAgICAgICAgSUdOT1JFOzxVMEU0Qz47PEJMQU5LPjs8QkxBTks+ICAlIFRIQUkgQ0hBUkFDVEVSIFRIQU5USEFLSEFUCis8VTBFNDc+ICAgICAgICBJR05PUkU7PFUwRTQ3Pjs8QkxBTks+OzxCTEFOSz4gICUgVEhBSSBDSEFSQUNURVIgTUFJVEFJS0hVCis8VTBFNDg+ICAgICAgICBJR05PUkU7PFUwRTQ4Pjs8QkxBTks+OzxCTEFOSz4gICUgVEhBSSBDSEFSQUNURVIgTUFJIEVLCis8VTBFNDk+ICAgICAgICBJR05PUkU7PFUwRTQ5Pjs8QkxBTks+OzxCTEFOSz4gICUgVEhBSSBDSEFSQUNURVIgTUFJIFRITworPFUwRTRBPiAgICAgICAgSUdOT1JFOzxVMEU0QT47PEJMQU5LPjs8QkxBTks+ICAlIFRIQUkgQ0hBUkFDVEVSIE1BSSBUUkkKKzxVMEU0Qj4gICAgICAgIElHTk9SRTs8VTBFNEI+OzxCTEFOSz47PEJMQU5LPiAgJSBUSEFJIENIQVJBQ1RFUiBNQUkgQ0hBVFRBV0EKKworJSBBcmFiaWMgYW5kIFRoYWkgZGVjaW1hbCBkaWdpdHMKKzxVMDAzMD4gIDxVMDAzMD47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gICAlIERJR0lUIFpFUk8KKzxVMEU1MD4gPFUwMDMwPjs8VEhBSUk+OzxCTEFOSz47PEJMQU5LPiAgICUgVEhBSSBESUdJVCBaRVJPCis8VTAwMzE+ICAgPFUwMDMxPjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAgICAlIERJR0lUIE9ORQorPFUwRTUxPiA8VTAwMzE+OzxUSEFJST47PEJMQU5LPjs8QkxBTks+ICAgICUgVEhBSSBESUdJVCBPTkUKKzxVMDAzMj4gICA8VTAwMzI+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICAgICUgRElHSVQgVFdPCis8VTBFNTI+IDxVMDAzMj47PFRIQUlJPjs8QkxBTks+OzxCTEFOSz4gICAgJSBUSEFJIERJR0lUIFRXTworPFUwMDMzPiA8VTAwMzM+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICAlIERJR0lUIFRIUkVFCis8VTBFNTM+IDxVMDAzMz47PFRIQUlJPjs8QkxBTks+OzxCTEFOSz4gICUgVEhBSSBESUdJVCBUSFJFRQorPFUwMDM0PiAgPFUwMDM0Pjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAgICUgRElHSVQgRk9VUgorPFUwRTU0PiA8VTAwMzQ+OzxUSEFJST47PEJMQU5LPjs8QkxBTks+ICAgJSBUSEFJIERJR0lUIEZPVVIKKzxVMDAzNT4gIDxVMDAzNT47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gICAlIERJR0lUIEZJVkUKKzxVMEU1NT4gPFUwMDM1Pjs8VEhBSUk+OzxCTEFOSz47PEJMQU5LPiAgICUgVEhBSSBESUdJVCBGSVZFCis8VTAwMzY+ICAgPFUwMDM2Pjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAgICAlIERJR0lUIFNJWAorPFUwRTU2PiA8VTAwMzY+OzxUSEFJST47PEJMQU5LPjs8QkxBTks+ICAgICUgVEhBSSBESUdJVCBTSVgKKzxVMDAzNz4gPFUwMDM3Pjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAgJSBESUdJVCBTRVZFTgorPFUwRTU3PiA8VTAwMzc+OzxUSEFJST47PEJMQU5LPjs8QkxBTks+ICAlIFRIQUkgRElHSVQgU0VWRU4KKzxVMDAzOD4gPFUwMDM4Pjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAgJSBESUdJVCBFSUdIVAorPFUwRTU4PiA8VTAwMzg+OzxUSEFJST47PEJMQU5LPjs8QkxBTks+ICAlIFRIQUkgRElHSVQgRUlHSFQKKzxVMDAzOT4gIDxVMDAzOT47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gICAlIERJR0lUIE5JTkUKKzxVMEU1OT4gPFUwMDM5Pjs8VEhBSUk+OzxCTEFOSz47PEJMQU5LPiAgICUgVEhBSSBESUdJVCBOSU5FCisKKyUgTGF0aW4gYWxwaGFiZXQKKzxVMDA0MT4gPFUwMDQxPjs8QkxBTks+OzxCTEFOSz47PENBUD4gICUgQQorPFUwMDYxPiA8VTAwNDE+OzxCTEFOSz47PEJMQU5LPjs8TUlOPiAgJSBhCis8VTAwNDI+IDxVMDA0Mj47PEJMQU5LPjs8QkxBTks+OzxDQVA+ICAlIEIKKzxVMDA2Mj4gPFUwMDQyPjs8QkxBTks+OzxCTEFOSz47PE1JTj4gICUgYgorPFUwMDQzPiA8VTAwNDM+OzxCTEFOSz47PEJMQU5LPjs8Q0FQPiAgJSBDCis8VTAwNjM+IDxVMDA0Mz47PEJMQU5LPjs8QkxBTks+OzxNSU4+ICAlIGMKKzxVMDA0ND4gPFUwMDQ0Pjs8QkxBTks+OzxCTEFOSz47PENBUD4gICUgRAorPFUwMDY0PiA8VTAwNDQ+OzxCTEFOSz47PEJMQU5LPjs8TUlOPiAgJSBkCis8VTAwNDU+IDxVMDA0NT47PEJMQU5LPjs8QkxBTks+OzxDQVA+ICAlIEUKKzxVMDA2NT4gPFUwMDQ1Pjs8QkxBTks+OzxCTEFOSz47PE1JTj4gICUgZQorPFUwMDQ2PiA8VTAwNDY+OzxCTEFOSz47PEJMQU5LPjs8Q0FQPiAgJSBGCis8VTAwNjY+IDxVMDA0Nj47PEJMQU5LPjs8QkxBTks+OzxNSU4+ICAlIGYKKzxVMDA0Nz4gPFUwMDQ3Pjs8QkxBTks+OzxCTEFOSz47PENBUD4gICUgRworPFUwMDY3PiA8VTAwNDc+OzxCTEFOSz47PEJMQU5LPjs8TUlOPiAgJSBnCis8VTAwNDg+IDxVMDA0OD47PEJMQU5LPjs8QkxBTks+OzxDQVA+ICAlIEgKKzxVMDA2OD4gPFUwMDQ4Pjs8QkxBTks+OzxCTEFOSz47PE1JTj4gICUgaAorPFUwMDQ5PiA8VTAwNDk+OzxCTEFOSz47PEJMQU5LPjs8Q0FQPiAgJSBJCis8VTAwNjk+IDxVMDA0OT47PEJMQU5LPjs8QkxBTks+OzxNSU4+ICAlIGkKKzxVMDA0QT4gPFUwMDRBPjs8QkxBTks+OzxCTEFOSz47PENBUD4gICUgSgorPFUwMDZBPiA8VTAwNEE+OzxCTEFOSz47PEJMQU5LPjs8TUlOPiAgJSBqCis8VTAwNEI+IDxVMDA0Qj47PEJMQU5LPjs8QkxBTks+OzxDQVA+ICAlIEsKKzxVMDA2Qj4gPFUwMDRCPjs8QkxBTks+OzxCTEFOSz47PE1JTj4gICUgaworPFUwMDRDPiA8VTAwNEM+OzxCTEFOSz47PEJMQU5LPjs8Q0FQPiAgJSBMCis8VTAwNkM+IDxVMDA0Qz47PEJMQU5LPjs8QkxBTks+OzxNSU4+ICAlIGwKKzxVMDA0RD4gPFUwMDREPjs8QkxBTks+OzxCTEFOSz47PENBUD4gICUgTQorPFUwMDZEPiA8VTAwNEQ+OzxCTEFOSz47PEJMQU5LPjs8TUlOPiAgJSBtCis8VTAwNEU+IDxVMDA0RT47PEJMQU5LPjs8QkxBTks+OzxDQVA+ICAlIE4KKzxVMDA2RT4gPFUwMDRFPjs8QkxBTks+OzxCTEFOSz47PE1JTj4gICUgbgorPFUwMDRGPiA8VTAwNEY+OzxCTEFOSz47PEJMQU5LPjs8Q0FQPiAgJSBPCis8VTAwNkY+IDxVMDA0Rj47PEJMQU5LPjs8QkxBTks+OzxNSU4+ICAlIG8KKzxVMDA1MD4gPFUwMDUwPjs8QkxBTks+OzxCTEFOSz47PENBUD4gICUgUAorPFUwMDcwPiA8VTAwNTA+OzxCTEFOSz47PEJMQU5LPjs8TUlOPiAgJSBwCis8VTAwNTE+IDxVMDA1MT47PEJMQU5LPjs8QkxBTks+OzxDQVA+ICAlIFEKKzxVMDA3MT4gPFUwMDUxPjs8QkxBTks+OzxCTEFOSz47PE1JTj4gICUgcQorPFUwMDUyPiA8VTAwNTI+OzxCTEFOSz47PEJMQU5LPjs8Q0FQPiAgJSBSCis8VTAwNzI+IDxVMDA1Mj47PEJMQU5LPjs8QkxBTks+OzxNSU4+ICAlIHIKKzxVMDA1Mz4gPFUwMDUzPjs8QkxBTks+OzxCTEFOSz47PENBUD4gICUgUworPFUwMDczPiA8VTAwNTM+OzxCTEFOSz47PEJMQU5LPjs8TUlOPiAgJSBzCis8VTAwNTQ+IDxVMDA1ND47PEJMQU5LPjs8QkxBTks+OzxDQVA+ICAlIFQKKzxVMDA3ND4gPFUwMDU0Pjs8QkxBTks+OzxCTEFOSz47PE1JTj4gICUgdAorPFUwMDU1PiA8VTAwNTU+OzxCTEFOSz47PEJMQU5LPjs8Q0FQPiAgJSBVCis8VTAwNzU+IDxVMDA1NT47PEJMQU5LPjs8QkxBTks+OzxNSU4+ICAlIHUKKzxVMDA1Nj4gPFUwMDU2Pjs8QkxBTks+OzxCTEFOSz47PENBUD4gICUgVgorPFUwMDc2PiA8VTAwNTY+OzxCTEFOSz47PEJMQU5LPjs8TUlOPiAgJSB2Cis8VTAwNTc+IDxVMDA1Nz47PEJMQU5LPjs8QkxBTks+OzxDQVA+ICAlIFcKKzxVMDA3Nz4gPFUwMDU3Pjs8QkxBTks+OzxCTEFOSz47PE1JTj4gICUgdworPFUwMDU4PiA8VTAwNTg+OzxCTEFOSz47PEJMQU5LPjs8Q0FQPiAgJSBYCis8VTAwNzg+IDxVMDA1OD47PEJMQU5LPjs8QkxBTks+OzxNSU4+ICAlIHgKKzxVMDA1OT4gPFUwMDU5Pjs8QkxBTks+OzxCTEFOSz47PENBUD4gICUgWQorPFUwMDc5PiA8VTAwNTk+OzxCTEFOSz47PEJMQU5LPjs8TUlOPiAgJSB5Cis8VTAwNUE+IDxVMDA1QT47PEJMQU5LPjs8QkxBTks+OzxDQVA+ICAlIFoKKzxVMDA3QT4gPFUwMDVBPjs8QkxBTks+OzxCTEFOSz47PE1JTj4gICUgegorCislCislIFRoYWkgY29uc29uYW50cywgd2l0aCBsZWFkaW5nIHZvd2VscyByZWFycmFuZ2VtZW50CislCis8VTBFMDE+ICAgICAgICA8VTBFMDE+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICUgVEhBSSBDSEFSQUNURVIgS08gS0FJCis8a28ta2FpLWU+ICAgICAgICAgICAiPFUwRTAxPjxVMEU0MD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8a28ta2FpLWFlPiAgICAgICAgICAiPFUwRTAxPjxVMEU0MT4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8a28ta2FpLW8+ICAgICAgICAgICAiPFUwRTAxPjxVMEU0Mj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8a28ta2FpLWFpLW1haW11YW4+ICAiPFUwRTAxPjxVMEU0Mz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8a28ta2FpLWFpLW1haW1hbGFpPiAiPFUwRTAxPjxVMEU0ND4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+CisKKzxVMEUwMj4gICAgICAgIDxVMEUwMj47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gJSBUSEFJIENIQVJBQ1RFUiBLSE8gS0hBSQorPGtoby1raGFpLWU+ICAgICAgICAgICAiPFUwRTAyPjxVMEU0MD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8a2hvLWtoYWktYWU+ICAgICAgICAgICI8VTBFMDI+PFUwRTQxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxraG8ta2hhaS1vPiAgICAgICAgICAgIjxVMEUwMj48VTBFNDI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGtoby1raGFpLWFpLW1haW11YW4+ICAiPFUwRTAyPjxVMEU0Mz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8a2hvLWtoYWktYWktbWFpbWFsYWk+ICI8VTBFMDI+PFUwRTQ0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworPFUwRTAzPiAgICAgICAgPFUwRTAzPjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAlIFRIQUkgQ0hBUkFDVEVSIEtITyBLSFVBVAorPGtoby1raHVhdC1lPiAgICAgICAgICAgIjxVMEUwMz48VTBFNDA+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGtoby1raHVhdC1hZT4gICAgICAgICAgIjxVMEUwMz48VTBFNDE+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGtoby1raHVhdC1vPiAgICAgICAgICAgIjxVMEUwMz48VTBFNDI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGtoby1raHVhdC1haS1tYWltdWFuPiAgIjxVMEUwMz48VTBFNDM+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGtoby1raHVhdC1haS1tYWltYWxhaT4gIjxVMEUwMz48VTBFNDQ+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorCis8VTBFMDQ+ICAgICAgICA8VTBFMDQ+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICUgVEhBSSBDSEFSQUNURVIgS0hPIEtIV0FJCis8a2hvLWtod2FpLWU+ICAgICAgICAgICAiPFUwRTA0PjxVMEU0MD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8a2hvLWtod2FpLWFlPiAgICAgICAgICAiPFUwRTA0PjxVMEU0MT4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8a2hvLWtod2FpLW8+ICAgICAgICAgICAiPFUwRTA0PjxVMEU0Mj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8a2hvLWtod2FpLWFpLW1haW11YW4+ICAiPFUwRTA0PjxVMEU0Mz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8a2hvLWtod2FpLWFpLW1haW1hbGFpPiAiPFUwRTA0PjxVMEU0ND4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+CisKKzxVMEUwNT4gICAgICAgIDxVMEUwNT47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gJSBUSEFJIENIQVJBQ1RFUiBLSE8gS0hPTgorPGtoby1raG9uLWU+ICAgICAgICAgICAiPFUwRTA1PjxVMEU0MD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8a2hvLWtob24tYWU+ICAgICAgICAgICI8VTBFMDU+PFUwRTQxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxraG8ta2hvbi1vPiAgICAgICAgICAgIjxVMEUwNT48VTBFNDI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGtoby1raG9uLWFpLW1haW11YW4+ICAiPFUwRTA1PjxVMEU0Mz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8a2hvLWtob24tYWktbWFpbWFsYWk+ICI8VTBFMDU+PFUwRTQ0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworPFUwRTA2PiAgICAgICAgPFUwRTA2Pjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAlIFRIQUkgQ0hBUkFDVEVSIEtITyBSQUtIQU5HCis8a2hvLXJha2hhbmctZT4gICAgICAgICAgICI8VTBFMDY+PFUwRTQwPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxraG8tcmFraGFuZy1hZT4gICAgICAgICAgIjxVMEUwNj48VTBFNDE+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGtoby1yYWtoYW5nLW8+ICAgICAgICAgICAiPFUwRTA2PjxVMEU0Mj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8a2hvLXJha2hhbmctYWktbWFpbXVhbj4gICI8VTBFMDY+PFUwRTQzPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxraG8tcmFraGFuZy1haS1tYWltYWxhaT4gIjxVMEUwNj48VTBFNDQ+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorCis8VTBFMDc+ICAgICAgICA8VTBFMDc+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICUgVEhBSSBDSEFSQUNURVIgTkdPIE5HVQorPG5nby1uZ3UtZT4gICAgICAgICAgICI8VTBFMDc+PFUwRTQwPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxuZ28tbmd1LWFlPiAgICAgICAgICAiPFUwRTA3PjxVMEU0MT4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8bmdvLW5ndS1vPiAgICAgICAgICAgIjxVMEUwNz48VTBFNDI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPG5nby1uZ3UtYWktbWFpbXVhbj4gICI8VTBFMDc+PFUwRTQzPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxuZ28tbmd1LWFpLW1haW1hbGFpPiAiPFUwRTA3PjxVMEU0ND4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+CisKKzxVMEUwOD4gICAgICAgIDxVMEUwOD47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gJSBUSEFJIENIQVJBQ1RFUiBDSE8gQ0hBTgorPGNoby1jaGFuLWU+ICAgICAgICAgICAiPFUwRTA4PjxVMEU0MD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8Y2hvLWNoYW4tYWU+ICAgICAgICAgICI8VTBFMDg+PFUwRTQxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxjaG8tY2hhbi1vPiAgICAgICAgICAgIjxVMEUwOD48VTBFNDI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGNoby1jaGFuLWFpLW1haW11YW4+ICAiPFUwRTA4PjxVMEU0Mz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8Y2hvLWNoYW4tYWktbWFpbWFsYWk+ICI8VTBFMDg+PFUwRTQ0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworPFUwRTA5PiAgICAgICAgPFUwRTA5Pjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAlIFRIQUkgQ0hBUkFDVEVSIENITyBDSElORworPGNoby1jaGluZy1lPiAgICAgICAgICAgIjxVMEUwOT48VTBFNDA+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGNoby1jaGluZy1hZT4gICAgICAgICAgIjxVMEUwOT48VTBFNDE+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGNoby1jaGluZy1vPiAgICAgICAgICAgIjxVMEUwOT48VTBFNDI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGNoby1jaGluZy1haS1tYWltdWFuPiAgIjxVMEUwOT48VTBFNDM+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGNoby1jaGluZy1haS1tYWltYWxhaT4gIjxVMEUwOT48VTBFNDQ+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorCis8VTBFMEE+ICAgICAgICA8VTBFMEE+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICUgVEhBSSBDSEFSQUNURVIgQ0hPIENIQU5HCis8Y2hvLWNoYW5nLWU+ICAgICAgICAgICAiPFUwRTBBPjxVMEU0MD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8Y2hvLWNoYW5nLWFlPiAgICAgICAgICAiPFUwRTBBPjxVMEU0MT4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8Y2hvLWNoYW5nLW8+ICAgICAgICAgICAiPFUwRTBBPjxVMEU0Mj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8Y2hvLWNoYW5nLWFpLW1haW11YW4+ICAiPFUwRTBBPjxVMEU0Mz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8Y2hvLWNoYW5nLWFpLW1haW1hbGFpPiAiPFUwRTBBPjxVMEU0ND4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+CisKKzxVMEUwQj4gICAgICAgIDxVMEUwQj47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gJSBUSEFJIENIQVJBQ1RFUiBTTyBTTworPHNvLXNvLWU+ICAgICAgICAgICAiPFUwRTBCPjxVMEU0MD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8c28tc28tYWU+ICAgICAgICAgICI8VTBFMEI+PFUwRTQxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxzby1zby1vPiAgICAgICAgICAgIjxVMEUwQj48VTBFNDI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHNvLXNvLWFpLW1haW11YW4+ICAiPFUwRTBCPjxVMEU0Mz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8c28tc28tYWktbWFpbWFsYWk+ICI8VTBFMEI+PFUwRTQ0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworPFUwRTBDPiAgICAgICAgPFUwRTBDPjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAlIFRIQUkgQ0hBUkFDVEVSIENITyBDSE9FCis8Y2hvLWNob2UtZT4gICAgICAgICAgICI8VTBFMEM+PFUwRTQwPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxjaG8tY2hvZS1hZT4gICAgICAgICAgIjxVMEUwQz48VTBFNDE+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGNoby1jaG9lLW8+ICAgICAgICAgICAiPFUwRTBDPjxVMEU0Mj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8Y2hvLWNob2UtYWktbWFpbXVhbj4gICI8VTBFMEM+PFUwRTQzPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxjaG8tY2hvZS1haS1tYWltYWxhaT4gIjxVMEUwQz48VTBFNDQ+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorCis8VTBFMEQ+ICAgICAgICA8VTBFMEQ+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICUgVEhBSSBDSEFSQUNURVIgWU8gWUlORworPHlvLXlpbmctZT4gICAgICAgICAgICI8VTBFMEQ+PFUwRTQwPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzx5by15aW5nLWFlPiAgICAgICAgICAiPFUwRTBEPjxVMEU0MT4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8eW8teWluZy1vPiAgICAgICAgICAgIjxVMEUwRD48VTBFNDI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHlvLXlpbmctYWktbWFpbXVhbj4gICI8VTBFMEQ+PFUwRTQzPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzx5by15aW5nLWFpLW1haW1hbGFpPiAiPFUwRTBEPjxVMEU0ND4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+CisKKzxVMEUwRT4gICAgICAgIDxVMEUwRT47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gJSBUSEFJIENIQVJBQ1RFUiBETyBDSEFEQQorPGRvLWNoYWRhLWU+ICAgICAgICAgICAiPFUwRTBFPjxVMEU0MD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8ZG8tY2hhZGEtYWU+ICAgICAgICAgICI8VTBFMEU+PFUwRTQxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxkby1jaGFkYS1vPiAgICAgICAgICAgIjxVMEUwRT48VTBFNDI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGRvLWNoYWRhLWFpLW1haW11YW4+ICAiPFUwRTBFPjxVMEU0Mz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8ZG8tY2hhZGEtYWktbWFpbWFsYWk+ICI8VTBFMEU+PFUwRTQ0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworPFUwRTBGPiAgICAgICAgPFUwRTBGPjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAlIFRIQUkgQ0hBUkFDVEVSIFRPIFBBVEFLCis8dG8tcGF0YWstZT4gICAgICAgICAgICI8VTBFMEY+PFUwRTQwPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzx0by1wYXRhay1hZT4gICAgICAgICAgIjxVMEUwRj48VTBFNDE+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHRvLXBhdGFrLW8+ICAgICAgICAgICAiPFUwRTBGPjxVMEU0Mj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8dG8tcGF0YWstYWktbWFpbXVhbj4gICI8VTBFMEY+PFUwRTQzPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzx0by1wYXRhay1haS1tYWltYWxhaT4gIjxVMEUwRj48VTBFNDQ+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorCis8VTBFMTA+ICAgICAgICA8VTBFMTA+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICUgVEhBSSBDSEFSQUNURVIgVEhPIFRIQU4KKzx0aG8tdGhhbi1lPiAgICAgICAgICAgIjxVMEUxMD48VTBFNDA+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHRoby10aGFuLWFlPiAgICAgICAgICAiPFUwRTEwPjxVMEU0MT4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8dGhvLXRoYW4tbz4gICAgICAgICAgICI8VTBFMTA+PFUwRTQyPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzx0aG8tdGhhbi1haS1tYWltdWFuPiAgIjxVMEUxMD48VTBFNDM+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHRoby10aGFuLWFpLW1haW1hbGFpPiAiPFUwRTEwPjxVMEU0ND4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+CisKKzxVMEUxMT4gICAgICAgIDxVMEUxMT47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gJSBUSEFJIENIQVJBQ1RFUiBUSE8gTkFOR01PTlRITworPHRoby1uYW5nbW9udGhvLWU+ICAgICAgICAgICAiPFUwRTExPjxVMEU0MD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8dGhvLW5hbmdtb250aG8tYWU+ICAgICAgICAgICI8VTBFMTE+PFUwRTQxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzx0aG8tbmFuZ21vbnRoby1vPiAgICAgICAgICAgIjxVMEUxMT48VTBFNDI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHRoby1uYW5nbW9udGhvLWFpLW1haW11YW4+ICAiPFUwRTExPjxVMEU0Mz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8dGhvLW5hbmdtb250aG8tYWktbWFpbWFsYWk+ICI8VTBFMTE+PFUwRTQ0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworPFUwRTEyPiAgICAgICAgPFUwRTEyPjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAlIFRIQUkgQ0hBUkFDVEVSIFRITyBQSFVUSEFPCis8dGhvLXBodXRoYW8tZT4gICAgICAgICAgICI8VTBFMTI+PFUwRTQwPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzx0aG8tcGh1dGhhby1hZT4gICAgICAgICAgIjxVMEUxMj48VTBFNDE+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHRoby1waHV0aGFvLW8+ICAgICAgICAgICAiPFUwRTEyPjxVMEU0Mj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8dGhvLXBodXRoYW8tYWktbWFpbXVhbj4gICI8VTBFMTI+PFUwRTQzPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzx0aG8tcGh1dGhhby1haS1tYWltYWxhaT4gIjxVMEUxMj48VTBFNDQ+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorCis8VTBFMTM+ICAgICAgICA8VTBFMTM+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICUgVEhBSSBDSEFSQUNURVIgTk8gTkVOCis8bm8tbmVuLWU+ICAgICAgICAgICAiPFUwRTEzPjxVMEU0MD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8bm8tbmVuLWFlPiAgICAgICAgICAiPFUwRTEzPjxVMEU0MT4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8bm8tbmVuLW8+ICAgICAgICAgICAiPFUwRTEzPjxVMEU0Mj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8bm8tbmVuLWFpLW1haW11YW4+ICAiPFUwRTEzPjxVMEU0Mz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8bm8tbmVuLWFpLW1haW1hbGFpPiAiPFUwRTEzPjxVMEU0ND4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+CisKKzxVMEUxND4gICAgICAgIDxVMEUxND47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gJSBUSEFJIENIQVJBQ1RFUiBETyBERUsKKzxkby1kZWstZT4gICAgICAgICAgICI8VTBFMTQ+PFUwRTQwPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxkby1kZWstYWU+ICAgICAgICAgICI8VTBFMTQ+PFUwRTQxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxkby1kZWstbz4gICAgICAgICAgICI8VTBFMTQ+PFUwRTQyPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxkby1kZWstYWktbWFpbXVhbj4gICI8VTBFMTQ+PFUwRTQzPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxkby1kZWstYWktbWFpbWFsYWk+ICI8VTBFMTQ+PFUwRTQ0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworPFUwRTE1PiAgICAgICAgPFUwRTE1Pjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAlIFRIQUkgQ0hBUkFDVEVSIFRPIFRBTworPHRvLXRhby1lPiAgICAgICAgICAgIjxVMEUxNT48VTBFNDA+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHRvLXRhby1hZT4gICAgICAgICAgIjxVMEUxNT48VTBFNDE+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHRvLXRhby1vPiAgICAgICAgICAgIjxVMEUxNT48VTBFNDI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHRvLXRhby1haS1tYWltdWFuPiAgIjxVMEUxNT48VTBFNDM+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHRvLXRhby1haS1tYWltYWxhaT4gIjxVMEUxNT48VTBFNDQ+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorCis8VTBFMTY+ICAgICAgICA8VTBFMTY+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICUgVEhBSSBDSEFSQUNURVIgVEhPIFRIVU5HCis8dGhvLXRodW5nLWU+ICAgICAgICAgICAiPFUwRTE2PjxVMEU0MD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8dGhvLXRodW5nLWFlPiAgICAgICAgICAiPFUwRTE2PjxVMEU0MT4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8dGhvLXRodW5nLW8+ICAgICAgICAgICAiPFUwRTE2PjxVMEU0Mj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8dGhvLXRodW5nLWFpLW1haW11YW4+ICAiPFUwRTE2PjxVMEU0Mz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8dGhvLXRodW5nLWFpLW1haW1hbGFpPiAiPFUwRTE2PjxVMEU0ND4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+CisKKzxVMEUxNz4gICAgICAgIDxVMEUxNz47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gJSBUSEFJIENIQVJBQ1RFUiBUSE8gVEhBSEFOCis8dGhvLXRoYWhhbi1lPiAgICAgICAgICAgIjxVMEUxNz48VTBFNDA+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHRoby10aGFoYW4tYWU+ICAgICAgICAgICI8VTBFMTc+PFUwRTQxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzx0aG8tdGhhaGFuLW8+ICAgICAgICAgICAiPFUwRTE3PjxVMEU0Mj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8dGhvLXRoYWhhbi1haS1tYWltdWFuPiAgIjxVMEUxNz48VTBFNDM+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHRoby10aGFoYW4tYWktbWFpbWFsYWk+ICI8VTBFMTc+PFUwRTQ0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworPFUwRTE4PiAgICAgICAgPFUwRTE4Pjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAlIFRIQUkgQ0hBUkFDVEVSIFRITyBUSE9ORworPHRoby10aG9uZy1lPiAgICAgICAgICAgIjxVMEUxOD48VTBFNDA+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHRoby10aG9uZy1hZT4gICAgICAgICAgIjxVMEUxOD48VTBFNDE+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHRoby10aG9uZy1vPiAgICAgICAgICAgIjxVMEUxOD48VTBFNDI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHRoby10aG9uZy1haS1tYWltdWFuPiAgIjxVMEUxOD48VTBFNDM+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHRoby10aG9uZy1haS1tYWltYWxhaT4gIjxVMEUxOD48VTBFNDQ+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorCis8VTBFMTk+ICAgICAgICA8VTBFMTk+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICUgVEhBSSBDSEFSQUNURVIgTk8gTlUKKzxuby1udS1lPiAgICAgICAgICAgIjxVMEUxOT48VTBFNDA+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPG5vLW51LWFlPiAgICAgICAgICAiPFUwRTE5PjxVMEU0MT4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8bm8tbnUtbz4gICAgICAgICAgICI8VTBFMTk+PFUwRTQyPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxuby1udS1haS1tYWltdWFuPiAgIjxVMEUxOT48VTBFNDM+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPG5vLW51LWFpLW1haW1hbGFpPiAiPFUwRTE5PjxVMEU0ND4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+CisKKzxVMEUxQT4gICAgICAgIDxVMEUxQT47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gJSBUSEFJIENIQVJBQ1RFUiBCTyBCQUlNQUkKKzxiby1iYWltYWktZT4gICAgICAgICAgICI8VTBFMUE+PFUwRTQwPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxiby1iYWltYWktYWU+ICAgICAgICAgICI8VTBFMUE+PFUwRTQxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxiby1iYWltYWktbz4gICAgICAgICAgICI8VTBFMUE+PFUwRTQyPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxiby1iYWltYWktYWktbWFpbXVhbj4gICI8VTBFMUE+PFUwRTQzPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxiby1iYWltYWktYWktbWFpbWFsYWk+ICI8VTBFMUE+PFUwRTQ0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworPFUwRTFCPiAgICAgICAgPFUwRTFCPjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAlIFRIQUkgQ0hBUkFDVEVSIFBPIFBMQQorPHBvLXBsYS1lPiAgICAgICAgICAgIjxVMEUxQj48VTBFNDA+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHBvLXBsYS1hZT4gICAgICAgICAgIjxVMEUxQj48VTBFNDE+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHBvLXBsYS1vPiAgICAgICAgICAgIjxVMEUxQj48VTBFNDI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHBvLXBsYS1haS1tYWltdWFuPiAgIjxVMEUxQj48VTBFNDM+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHBvLXBsYS1haS1tYWltYWxhaT4gIjxVMEUxQj48VTBFNDQ+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorCis8VTBFMUM+ICAgICAgICA8VTBFMUM+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICUgVEhBSSBDSEFSQUNURVIgUEhPIFBIVU5HCis8cGhvLXBodW5nLWU+ICAgICAgICAgICAiPFUwRTFDPjxVMEU0MD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8cGhvLXBodW5nLWFlPiAgICAgICAgICAiPFUwRTFDPjxVMEU0MT4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8cGhvLXBodW5nLW8+ICAgICAgICAgICAiPFUwRTFDPjxVMEU0Mj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8cGhvLXBodW5nLWFpLW1haW11YW4+ICAiPFUwRTFDPjxVMEU0Mz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8cGhvLXBodW5nLWFpLW1haW1hbGFpPiAiPFUwRTFDPjxVMEU0ND4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+CisKKzxVMEUxRD4gICAgICAgIDxVMEUxRD47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gJSBUSEFJIENIQVJBQ1RFUiBGTyBGQQorPGZvLWZhLWU+ICAgICAgICAgICAiPFUwRTFEPjxVMEU0MD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8Zm8tZmEtYWU+ICAgICAgICAgICI8VTBFMUQ+PFUwRTQxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxmby1mYS1vPiAgICAgICAgICAgIjxVMEUxRD48VTBFNDI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGZvLWZhLWFpLW1haW11YW4+ICAiPFUwRTFEPjxVMEU0Mz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8Zm8tZmEtYWktbWFpbWFsYWk+ICI8VTBFMUQ+PFUwRTQ0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworPFUwRTFFPiAgICAgICAgPFUwRTFFPjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAlIFRIQUkgQ0hBUkFDVEVSIFBITyBQSEFOCis8cGhvLXBoYW4tZT4gICAgICAgICAgICI8VTBFMUU+PFUwRTQwPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxwaG8tcGhhbi1hZT4gICAgICAgICAgIjxVMEUxRT48VTBFNDE+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHBoby1waGFuLW8+ICAgICAgICAgICAiPFUwRTFFPjxVMEU0Mj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8cGhvLXBoYW4tYWktbWFpbXVhbj4gICI8VTBFMUU+PFUwRTQzPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxwaG8tcGhhbi1haS1tYWltYWxhaT4gIjxVMEUxRT48VTBFNDQ+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorCis8VTBFMUY+ICAgICAgICA8VTBFMUY+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICUgVEhBSSBDSEFSQUNURVIgRk8gRkFOCis8Zm8tZmFuLWU+ICAgICAgICAgICAiPFUwRTFGPjxVMEU0MD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8Zm8tZmFuLWFlPiAgICAgICAgICAiPFUwRTFGPjxVMEU0MT4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8Zm8tZmFuLW8+ICAgICAgICAgICAiPFUwRTFGPjxVMEU0Mj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8Zm8tZmFuLWFpLW1haW11YW4+ICAiPFUwRTFGPjxVMEU0Mz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8Zm8tZmFuLWFpLW1haW1hbGFpPiAiPFUwRTFGPjxVMEU0ND4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+CisKKzxVMEUyMD4gICAgICAgIDxVMEUyMD47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gJSBUSEFJIENIQVJBQ1RFUiBQSE8gU0FNUEhBTworPHBoby1zYW1waGFvLWU+ICAgICAgICAgICAiPFUwRTIwPjxVMEU0MD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8cGhvLXNhbXBoYW8tYWU+ICAgICAgICAgICI8VTBFMjA+PFUwRTQxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxwaG8tc2FtcGhhby1vPiAgICAgICAgICAgIjxVMEUyMD48VTBFNDI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHBoby1zYW1waGFvLWFpLW1haW11YW4+ICAiPFUwRTIwPjxVMEU0Mz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8cGhvLXNhbXBoYW8tYWktbWFpbWFsYWk+ICI8VTBFMjA+PFUwRTQ0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworPFUwRTIxPiAgICAgICAgPFUwRTIxPjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAlIFRIQUkgQ0hBUkFDVEVSIE1PIE1BCis8bW8tbWEtZT4gICAgICAgICAgICI8VTBFMjE+PFUwRTQwPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxtby1tYS1hZT4gICAgICAgICAgIjxVMEUyMT48VTBFNDE+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPG1vLW1hLW8+ICAgICAgICAgICAiPFUwRTIxPjxVMEU0Mj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8bW8tbWEtYWktbWFpbXVhbj4gICI8VTBFMjE+PFUwRTQzPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxtby1tYS1haS1tYWltYWxhaT4gIjxVMEUyMT48VTBFNDQ+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorCis8VTBFMjI+ICAgICAgICA8VTBFMjI+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICUgVEhBSSBDSEFSQUNURVIgWU8gWUFLCis8eW8teWFrLWU+ICAgICAgICAgICAiPFUwRTIyPjxVMEU0MD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8eW8teWFrLWFlPiAgICAgICAgICAiPFUwRTIyPjxVMEU0MT4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8eW8teWFrLW8+ICAgICAgICAgICAiPFUwRTIyPjxVMEU0Mj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8eW8teWFrLWFpLW1haW11YW4+ICAiPFUwRTIyPjxVMEU0Mz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8eW8teWFrLWFpLW1haW1hbGFpPiAiPFUwRTIyPjxVMEU0ND4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+CisKKzxVMEUyMz4gICAgICAgIDxVMEUyMz47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gJSBUSEFJIENIQVJBQ1RFUiBSTyBSVUEKKzxyby1ydWEtZT4gICAgICAgICAgICI8VTBFMjM+PFUwRTQwPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxyby1ydWEtYWU+ICAgICAgICAgICI8VTBFMjM+PFUwRTQxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxyby1ydWEtbz4gICAgICAgICAgICI8VTBFMjM+PFUwRTQyPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxyby1ydWEtYWktbWFpbXVhbj4gICI8VTBFMjM+PFUwRTQzPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxyby1ydWEtYWktbWFpbWFsYWk+ICI8VTBFMjM+PFUwRTQ0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworPFUwRTI0PiAgICAgICAgPFUwRTI0Pjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAlIFRIQUkgQ0hBUkFDVEVSIFJVCisKKzxVMEUyNT4gICAgICAgIDxVMEUyNT47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gJSBUSEFJIENIQVJBQ1RFUiBMTyBMSU5HCis8bG8tbGluZy1lPiAgICAgICAgICAgIjxVMEUyNT48VTBFNDA+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGxvLWxpbmctYWU+ICAgICAgICAgICI8VTBFMjU+PFUwRTQxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxsby1saW5nLW8+ICAgICAgICAgICAiPFUwRTI1PjxVMEU0Mj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8bG8tbGluZy1haS1tYWltdWFuPiAgIjxVMEUyNT48VTBFNDM+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGxvLWxpbmctYWktbWFpbWFsYWk+ICI8VTBFMjU+PFUwRTQ0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworPFUwRTI2PiAgICAgICAgPFUwRTI2Pjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAlIFRIQUkgQ0hBUkFDVEVSIExVCisKKzxVMEUyNz4gICAgICAgIDxVMEUyNz47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gJSBUSEFJIENIQVJBQ1RFUiBXTyBXQUVOCis8d28td2Flbi1lPiAgICAgICAgICAgIjxVMEUyNz48VTBFNDA+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHdvLXdhZW4tYWU+ICAgICAgICAgICI8VTBFMjc+PFUwRTQxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzx3by13YWVuLW8+ICAgICAgICAgICAiPFUwRTI3PjxVMEU0Mj4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8d28td2Flbi1haS1tYWltdWFuPiAgIjxVMEUyNz48VTBFNDM+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHdvLXdhZW4tYWktbWFpbWFsYWk+ICI8VTBFMjc+PFUwRTQ0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworPFUwRTI4PiAgICAgICAgPFUwRTI4Pjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAlIFRIQUkgQ0hBUkFDVEVSIFNPIFNBTEEKKzxzby1zYWxhLWU+ICAgICAgICAgICAiPFUwRTI4PjxVMEU0MD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8c28tc2FsYS1hZT4gICAgICAgICAgIjxVMEUyOD48VTBFNDE+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHNvLXNhbGEtbz4gICAgICAgICAgICI8VTBFMjg+PFUwRTQyPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxzby1zYWxhLWFpLW1haW11YW4+ICAiPFUwRTI4PjxVMEU0Mz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8c28tc2FsYS1haS1tYWltYWxhaT4gIjxVMEUyOD48VTBFNDQ+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorCis8VTBFMjk+ICAgICAgICA8VTBFMjk+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICUgVEhBSSBDSEFSQUNURVIgU08gUlVTSQorPHNvLXJ1c2ktZT4gICAgICAgICAgICI8VTBFMjk+PFUwRTQwPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxzby1ydXNpLWFlPiAgICAgICAgICAiPFUwRTI5PjxVMEU0MT4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8c28tcnVzaS1vPiAgICAgICAgICAgIjxVMEUyOT48VTBFNDI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPHNvLXJ1c2ktYWktbWFpbXVhbj4gICI8VTBFMjk+PFUwRTQzPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxzby1ydXNpLWFpLW1haW1hbGFpPiAiPFUwRTI5PjxVMEU0ND4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+CisKKzxVMEUyQT4gICAgICAgIDxVMEUyQT47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gJSBUSEFJIENIQVJBQ1RFUiBTTyBTVUEKKzxzby1zdWEtZT4gICAgICAgICAgICI8VTBFMkE+PFUwRTQwPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxzby1zdWEtYWU+ICAgICAgICAgICI8VTBFMkE+PFUwRTQxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxzby1zdWEtbz4gICAgICAgICAgICI8VTBFMkE+PFUwRTQyPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxzby1zdWEtYWktbWFpbXVhbj4gICI8VTBFMkE+PFUwRTQzPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxzby1zdWEtYWktbWFpbWFsYWk+ICI8VTBFMkE+PFUwRTQ0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworPFUwRTJCPiAgICAgICAgPFUwRTJCPjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAlIFRIQUkgQ0hBUkFDVEVSIEhPIEhJUAorPGhvLWhpcC1lPiAgICAgICAgICAgIjxVMEUyQj48VTBFNDA+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGhvLWhpcC1hZT4gICAgICAgICAgIjxVMEUyQj48VTBFNDE+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGhvLWhpcC1vPiAgICAgICAgICAgIjxVMEUyQj48VTBFNDI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGhvLWhpcC1haS1tYWltdWFuPiAgIjxVMEUyQj48VTBFNDM+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGhvLWhpcC1haS1tYWltYWxhaT4gIjxVMEUyQj48VTBFNDQ+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorCis8VTBFMkM+ICAgICAgICA8VTBFMkM+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICUgVEhBSSBDSEFSQUNURVIgTE8gQ0hVTEEKKzxsby1jaHVsYS1lPiAgICAgICAgICAgIjxVMEUyQz48VTBFNDA+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGxvLWNodWxhLWFlPiAgICAgICAgICAiPFUwRTJDPjxVMEU0MT4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8bG8tY2h1bGEtbz4gICAgICAgICAgICI8VTBFMkM+PFUwRTQyPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxsby1jaHVsYS1haS1tYWltdWFuPiAgIjxVMEUyQz48VTBFNDM+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGxvLWNodWxhLWFpLW1haW1hbGFpPiAiPFUwRTJDPjxVMEU0ND4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+CisKKzxVMEUyRD4gICAgICAgIDxVMEUyRD47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gJSBUSEFJIENIQVJBQ1RFUiBPIEFORworPG8tYW5nLWU+ICAgICAgICAgICAiPFUwRTJEPjxVMEU0MD4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8by1hbmctYWU+ICAgICAgICAgICI8VTBFMkQ+PFUwRTQxPiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKzxvLWFuZy1vPiAgICAgICAgICAgIjxVMEUyRD48VTBFNDI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPG8tYW5nLWFpLW1haW11YW4+ICAiPFUwRTJEPjxVMEU0Mz4iOzxCTEFOSz47PEJMQU5LPjs8QkxBTks+Cis8by1hbmctYWktbWFpbWFsYWk+ICI8VTBFMkQ+PFUwRTQ0PiI7PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4KKworPFUwRTJFPiAgICAgICAgPFUwRTJFPjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAlIFRIQUkgQ0hBUkFDVEVSIEhPIE5PS0hVSworPGhvLW5va2h1ay1lPiAgICAgICAgICAgIjxVMEUyRT48VTBFNDA+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGhvLW5va2h1ay1hZT4gICAgICAgICAgIjxVMEUyRT48VTBFNDE+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGhvLW5va2h1ay1vPiAgICAgICAgICAgIjxVMEUyRT48VTBFNDI+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGhvLW5va2h1ay1haS1tYWltdWFuPiAgIjxVMEUyRT48VTBFNDM+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorPGhvLW5va2h1ay1haS1tYWltYWxhaT4gIjxVMEUyRT48VTBFNDQ+Ijs8QkxBTks+OzxCTEFOSz47PEJMQU5LPgorCis8VTBFNEQ+IDxVMEU0RD47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gICUgVEhBSSBDSEFSQUNURVIgTklLSEFISVQKKworJSBvcmRlciBvZiBUaGFpIHZvd2VscworPFUwRTMwPiA8VTBFMzA+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICAlIFRIQUkgQ0hBUkFDVEVSIFNBUkEgQQorPFUwRTMxPiA8VTBFMzE+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICAlIFRIQUkgQ0hBUkFDVEVSIE1BSSBIQU4tQUtBVAorPFUwRTMyPiA8VTBFMzI+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICAlIFRIQUkgQ0hBUkFDVEVSIFNBUkEgQUEKKzxVMEU0NT4gPFUwRTMyPjs8QkxBTks+OzxCTEFOSz47PEVYVFJBPiAgJSBUSEFJIENIQVJBQ1RFUiBMQUtLSEFOR1lBTworPFUwRTMzPiA8VTBFMzM+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICAlIFRIQUkgQ0hBUkFDVEVSIFNBUkEgQU0KKzxVMEUzND4gPFUwRTM0Pjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAgJSBUSEFJIENIQVJBQ1RFUiBTQVJBIEkKKzxVMEUzNT4gPFUwRTM1Pjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAgJSBUSEFJIENIQVJBQ1RFUiBTQVJBIElJCis8VTBFMzY+IDxVMEUzNj47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gICUgVEhBSSBDSEFSQUNURVIgU0FSQSBVRQorPFUwRTM3PiA8VTBFMzc+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICAlIFRIQUkgQ0hBUkFDVEVSIFNBUkEgVUVFCis8VTBFMzg+IDxVMEUzOD47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gICUgVEhBSSBDSEFSQUNURVIgU0FSQSBVCis8VTBFMzk+IDxVMEUzOT47PEJMQU5LPjs8QkxBTks+OzxCTEFOSz4gICUgVEhBSSBDSEFSQUNURVIgU0FSQSBVVQorPFUwRTQwPiA8VTBFNDA+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICAlIFRIQUkgQ0hBUkFDVEVSIFNBUkEgRQorPFUwRTQxPiA8VTBFNDE+OzxCTEFOSz47PEJMQU5LPjs8QkxBTks+ICAlIFRIQUkgQ0hBUkFDVEVSIFNBUkEgQUUKKzxVMEU0Mj4gPFUwRTQyPjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAgJSBUSEFJIENIQVJBQ1RFUiBTQVJBIE8KKzxVMEU0Mz4gPFUwRTQzPjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAgJSBUSEFJIENIQVJBQ1RFUiBTQVJBIEFJIE1BSU1VQU4KKzxVMEU0ND4gPFUwRTQ0Pjs8QkxBTks+OzxCTEFOSz47PEJMQU5LPiAgJSBUSEFJIENIQVJBQ1RFUiBTQVJBIEFJIE1BSU1BTEFJCisKK29yZGVyX2VuZAorCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQorCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAiPFUwMDU0PjxVMDA0OD48VTAwNDI+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICI8VTBFM0Y+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgICAgIDMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgIDIKK25fY3NfcHJlY2VkZXMgICAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAgIDIKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgIDQKK25fc2lnbl9wb3NuICAgICAgICAgICAgIDQKKworRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKKworZGVjaW1hbF9wb2ludCAgICAgICAgICAgIjxVMDAyRT4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICAiPFUwMDJDPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgIDMKKworRU5EIExDX05VTUVSSUMKKworTENfVElNRQorCithYmRheSAgICI8VTBFMkQ+PFUwRTMyPjxVMDAyRT4iOyI8VTBFMDg+PFUwMDJFPiI7IjxVMEUyRD48VTAwMkU+IjsvCisgICAgICAgICI8VTBFMUU+PFUwMDJFPiI7IjxVMEUxRT48VTBFMjQ+PFUwMDJFPiI7IjxVMEUyOD48VTAwMkU+IjsvCisgICAgICAgICI8VTBFMkE+PFUwMDJFPiIKK2RheSAgICAgIjxVMEUyRD48VTBFMzI+PFUwRTE3PjxVMEUzND48VTBFMTU+PFUwRTIyPjxVMEU0Qz4iOy8KKyAgICAgICAgIjxVMEUwOD48VTBFMzE+PFUwRTE5PjxVMEUxNz48VTBFMjM+PFUwRTRDPiI7LworICAgICAgICAiPFUwRTJEPjxVMEUzMT48VTBFMDc+PFUwRTA0PjxVMEUzMj48VTBFMjM+IjsvCisgICAgICAgICI8VTBFMUU+PFUwRTM4PjxVMEUxOD4iOy8KKyAgICAgICAgIjxVMEUxRT48VTBFMjQ+PFUwRTJCPjxVMEUzMT48VTBFMkE+PFUwRTFBPjxVMEUxND48VTBFMzU+IjsvCisgICAgICAgICI8VTBFMjg+PFUwRTM4PjxVMEUwMT48VTBFMjM+PFUwRTRDPiI7LworICAgICAgICAiPFUwRTQwPjxVMEUyQT48VTBFMzI+PFUwRTIzPjxVMEU0Qz4iCithYm1vbiAgICI8VTBFMjE+PFUwMDJFPjxVMEUwND48VTAwMkU+IjsvCisgICAgICAgICI8VTBFMDE+PFUwMDJFPjxVMEUxRT48VTAwMkU+IjsvCisgICAgICAgICI8VTBFMjE+PFUwRTM1PjxVMDAyRT48VTBFMDQ+PFUwMDJFPiI7LworICAgICAgICAiPFUwRTQwPjxVMEUyMT48VTAwMkU+PFUwRTIyPjxVMDAyRT4iOy8KKyAgICAgICAgIjxVMEUxRT48VTAwMkU+PFUwRTA0PjxVMDAyRT4iOy8KKyAgICAgICAgIjxVMEUyMT48VTBFMzQ+PFUwMDJFPjxVMEUyMj48VTAwMkU+IjsvCisgICAgICAgICI8VTBFMDE+PFUwMDJFPjxVMEUwND48VTAwMkU+IjsvCisgICAgICAgICI8VTBFMkE+PFUwMDJFPjxVMEUwND48VTAwMkU+IjsvCisgICAgICAgICI8VTBFMDE+PFUwMDJFPjxVMEUyMj48VTAwMkU+IjsvCisgICAgICAgICI8VTBFMTU+PFUwMDJFPjxVMEUwND48VTAwMkU+IjsvCisgICAgICAgICI8VTBFMUU+PFUwMDJFPjxVMEUyMj48VTAwMkU+IjsvCisgICAgICAgICI8VTBFMTg+PFUwMDJFPjxVMEUwND48VTAwMkU+IgorbW9uICAgICAiPFUwRTIxPjxVMEUwMT48VTBFMjM+PFUwRTMyPjxVMEUwND48VTBFMjE+IjsvCisgICAgICAgICI8VTBFMDE+PFUwRTM4PjxVMEUyMT48VTBFMjA+PFUwRTMyPjxVMEUxRT48VTBFMzE+PFUwRTE5PjxVMEUxOD48VTBFNEM+IjsvCisgICAgICAgICI8VTBFMjE+PFUwRTM1PjxVMEUxOT48VTBFMzI+PFUwRTA0PjxVMEUyMT4iOy8KKyAgICAgICAgIjxVMEU0MD48VTBFMjE+PFUwRTI5PjxVMEUzMj48VTBFMjI+PFUwRTE5PiI7LworICAgICAgICAiPFUwRTFFPjxVMEUyND48VTBFMjk+PFUwRTIwPjxVMEUzMj48VTBFMDQ+PFUwRTIxPiI7LworICAgICAgICAiPFUwRTIxPjxVMEUzND48VTBFMTY+PFUwRTM4PjxVMEUxOT48VTBFMzI+PFUwRTIyPjxVMEUxOT4iOy8KKyAgICAgICAgIjxVMEUwMT48VTBFMjM+PFUwRTAxPjxVMEUwRT48VTBFMzI+PFUwRTA0PjxVMEUyMT4iOy8KKyAgICAgICAgIjxVMEUyQT48VTBFMzQ+PFUwRTA3PjxVMEUyQj48VTBFMzI+PFUwRTA0PjxVMEUyMT4iOy8KKyAgICAgICAgIjxVMEUwMT48VTBFMzE+PFUwRTE5PjxVMEUyMj48VTBFMzI+PFUwRTIyPjxVMEUxOT4iOy8KKyAgICAgICAgIjxVMEUxNT48VTBFMzg+PFUwRTI1PjxVMEUzMj48VTBFMDQ+PFUwRTIxPiI7LworICAgICAgICAiPFUwRTFFPjxVMEUyND48VTBFMjg+PFUwRTA4PjxVMEUzND48VTBFMDE+PFUwRTMyPjxVMEUyMj48VTBFMTk+IjsvCisgICAgICAgICI8VTBFMTg+PFUwRTMxPjxVMEUxOT48VTBFMjc+PFUwRTMyPjxVMEUwND48VTBFMjE+IgorJSBBcHByb3ByaWF0ZSBkYXRlICYgdGltZSByZXByZXNlbnRhdGlvbiAgIiVhICVlICViICVFeSwgJUg6JU06JVMiCitkX3RfZm10ICIlYTxVMDAyMD4lZTxVMDAyMD4lYjxVMDAyMD4lRXk8VTAwMkM+PFUwMDIwPiVIPFUwMDNBPiVNPFUwMDNBPiVTIgorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uICAiJWQvJW0vJUV5IgorZF9mbXQgICAiJWQ8VTAwMkY+JW08VTAwMkY+JUV5IgorJSBBcHByb3ByaWF0ZSB0aW1lIHJlcHJlc2VudGF0aW9uICAiJUg6JU06JVMiCit0X2ZtdCAgICIlSDxVMDAzQT4lTTxVMDAzQT4lUyIKKyUgQU0vUE0gc2lnbnMKK2FtX3BtICAgIjxVMDA0MT48VTAwNEQ+IjsiPFUwMDUwPjxVMDA0RD4iCislIEFwcHJvcHJpYXRlIDEyLWhvdXIgY2xvY2sgcmVwcmVzZW50YXRpb24gICIlSTolTTolUyAlcCIKK3RfZm10X2FtcG0gICIlSTxVMDAzQT4lTTxVMDAzQT4lUzxVMDAyMD4lcCIKKyUgRXJhIDogQnVkZGhpc3QgRXJhCitlcmEgICAgICIrOjE6LTU0MzxVMDAyRj4wMTxVMDAyRj4wMTorKjo8VTBFMUU+PFUwMDJFPjxVMEUyOD48VTAwMkU+OiVFQzxVMDAyMD4lRXkiCitlcmFfZF9mbXQgICAgICAgIiVlPFUwMDIwPiViPFUwMDIwPiVFeSIKK2VyYV90X2ZtdCAgICAgICAiJUg8VTAwMkU+JU08VTAwMkU+JVM8VTAwMjA+PFUwRTE5PjxVMDAyRT4iCitlcmFfZF90X2ZtdCAgICAgIjxVMEUyNz48VTBFMzE+PFUwRTE5PiVBPFUwRTE3PjxVMEUzNT48VTBFNDg+PFUwMDIwPiVlPFUwMDIwPiVCPFUwMDIwPiVFQzxVMDAyMD4lRXk8VTAwMkM+PFUwMDIwPiVIPFUwMDJFPiVNPFUwMDJFPiVTPFUwMDIwPjxVMEUxOT48VTAwMkU+IgorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uIChkYXRlKDEpKSAgICIlYSAlZSAlYiAlRXkgJUg6JU06JVMgJVoiCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA2Mj4vCis8VTAwMjA+PFUwMDI1PjxVMDA0NT48VTAwNzk+PFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+LworPFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJSBJQ1QtN0lDVC03Cit0aW1lem9uZQkiPFUwMDQ5PjxVMDA0Mz48VTAwNTQ+PFUwMDJEPjxVMDAzNz48VTAwNDk+PFUwMDQzPjxVMDA1ND48VTAwMmQ+PFUwMDM3PiIKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCisKKyUgeWVzZXhwciA6IGJlZ2lucyB3aXRoICJ5IiwgIlkiLCBvciBDSE8gQ0hBTkcKKyUgbm9leHByIDogYmVnaW5zIHdpdGggIm4iLCAiTiIsIG9yIE1PIE1BCislIHllc3N0ciA9ICJDaGFpMiIgPSBNQUlNVUFOICsgQ0hPIENIQU5HICsgTUFJIEVLCislIG5vc3RyID0gIk1haTJDaGFpMiIgPSBNQUlNQUxBSSArIE1PIE1BICsgTUFJIEVLICsgTUFJTVVBTiArIENITyBDSEFORyArIE1BSSBFSworCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA3OT48VTAwNTk+PFUwRTBBPjxVMDA1RD4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwRTIxPjxVMDA1RD4iCit5ZXNzdHIgICI8VTBFNDM+PFUwRTBBPjxVMEU0OD4iCitub3N0ciAgICI8VTBFNDQ+PFUwRTIxPjxVMEU0OD48VTBFNDM+PFUwRTBBPjxVMEU0OD4iCisKK0VORCBMQ19NRVNTQUdFUworCitMQ19QQVBFUgoraGVpZ2h0ICAgMjk3Cit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCit0ZWxfZG9tX2ZtdCAgICAiPFUwMDMwPjxVMDAyRD48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNkM+IgoraW50X3NlbGVjdCAgICAgIjxVMDAzMD48VTAwMzA+PFUwMDMxPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzY+PFUwMDM2PiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKKyUgRklYTUUKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCituYW1lX2dlbiAgICAiPFUwRTA0PjxVMEUzOD48VTBFMTM+IgorbmFtZV9taXNzICAgIjxVMEUxOT48VTBFMzI+PFUwRTA3PjxVMEUyQT48VTBFMzI+PFUwRTI3PiIKK25hbWVfbXIgICAgICI8VTBFMTk+PFUwRTMyPjxVMEUyMj4iCituYW1lX21ycyAgICAiPFUwRTE5PjxVMEUzMj48VTBFMDc+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworJSAgICAiJWYlTiVhJU4lZCVOJXIldCVlJXQlYiVOJWgldCVzJU4lVCVOJVMlTiV6JWMlTiIKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzI+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjg+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDczPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNTM+LworPFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X25hbWUgICI8VTBFNDQ+PFUwRTE3PjxVMEUyMj4iCislRklYTUUKKyVjb3VudHJ5X3Bvc3QgICIiCitjb3VudHJ5X2FiMiAgICI8VTAwNTQ+PFUwMDQ4PiIKK2NvdW50cnlfYWIzICAgIjxVMDA1ND48VTAwNDg+PFUwMDQxPiIKKyVjb3VudHJ5X251bSAgICI8VTAwMzc+PFUwMDM2PjxVMDAzND4iCislRklYTUUKKyVjb3VudHJ5X2NhciAgICIiCislRklYTUUKKyVjb3VudHJ5X2lzYm4gICIiCitsYW5nX25hbWUgICAgICI8VTBFNDQ+PFUwRTE3PjxVMEUyMj4iCitsYW5nX2FiICAgICAgICI8VTAwNzQ+PFUwMDY4PiIKK2xhbmdfdGVybSAgICAgIjxVMDA3ND48VTAwNjg+PFUwMDYxPiIKK2xhbmdfbGliICAgICAgIjxVMDA3ND48VTAwNjg+PFUwMDYxPiIKK2NvdW50cnlfbnVtIDc2NAorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RpX0VSIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdGlfRVIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MyYzRlYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RpX0VSCkBAIC0wLDAgKzEsMjc0IEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSBUaWdyaWduYSBsYW5ndWFnZSBsb2NhbGUgZm9yIEVyaXRyZWEuCislCislIENoYXJzZXQ6IFVURi04CislCislIFByZXBhcmVkIGFuZCBjb250cmlidXRlZCB0byBnbGliYyBieSBEYW5pZWwgWWFjb2IgPGxvY2FsZXNAZ2Vlei5vcmc+CislCislIFRoaXMgbG9jYWxlIGRhdGEgaGFzIGJlZW4gZGV2ZWxvcGVkIHVuZGVyIHRoZSBZZWhhIFByb2plY3Q6CislICAgICAgaHR0cDovL3llaGEuc291cmNlZm9yZ2UubmV0LworJQorJSBidWlsZCB3aXRoOiBsb2NhbGVkZWYgLWYgVVRGLTggLWkgdGlfRVIgdGlfRVIKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKKworTENfSURFTlRJRklDQVRJT04KKyUKK3RpdGxlICAgICAgIlRpZ3JpZ25hIGxhbmd1YWdlIGxvY2FsZSBmb3IgRXJpdHJlYS4iCitzb3VyY2UgICAgICJHZSdleiBGcm9udGllciBGb3VuZGF0aW9uIgorYWRkcmVzcyAgICAiNzgwMiBTb2xvbW9uIFNlYWwgRHIuLCBTcHJpbmdmaWVsZCwgVkEgMjIxNTIsIFVTQSIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImxvY2FsZXNAZ2Vlei5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJ0aSIKK3RlcnJpdG9yeSAgIkVSIgorcmV2aXNpb24gICAiMC4yMCIKK2RhdGUgICAgICAgIjIwMDMtMDctMDUiCislCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NRUFTVVJFTUVOVAorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgInBvc2l4OjE5OTMiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX1RFTEVQSE9ORQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19USU1FCislCitFTkQgTENfSURFTlRJRklDQVRJT04KKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSAgRXRoaW9waWMgU3BlY2lmYyBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfQ09MTEFURQorY29weSAiYW1fRVQiCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAidGlfRVQiCitFTkQgTENfQ1RZUEUKKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSAgRXJpdHJlYSBTcGVjaWZjIERhdGE6CislCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCitMQ19NRUFTVVJFTUVOVAorJQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19NRUFTVVJFTUVOVCBjYXRlZ29yeS4KKyUKK21lYXN1cmVtZW50IDEKKyUKK0VORCBMQ19NRUFTVVJFTUVOVAorCisKK0xDX01PTkVUQVJZCislCitpbnRfY3Vycl9zeW1ib2wgICAgICAgIjxVMDA0NT48VTAwNTI+PFUwMDRFPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgIjxVMDAyND4iCittb25fZGVjaW1hbF9wb2ludCAgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAwCitmcmFjX2RpZ2l0cyAgICAgICAgICAgMAorcF9jc19wcmVjZWRlcyAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgMQorJQorRU5EIExDX01PTkVUQVJZCisKKworTENfTlVNRVJJQworJQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX05VTUVSSUMgY2F0ZWdvcnkuCislCitkZWNpbWFsX3BvaW50ICAgICAgICAgIjxVMDAyRT4iCit0aG91c2FuZHNfc2VwICAgICAgICAgIiIKK2dyb3VwaW5nICAgICAgICAgICAgICAwOzAKKyUKK0VORCBMQ19OVU1FUklDCisKKworTENfUEFQRVIKKyUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfUEFQRVIgY2F0ZWdvcnkuCislCitoZWlnaHQgICAgICAyOTcKK3dpZHRoICAgICAgIDIxMAorJQorRU5EIExDX1BBUEVSCisKKworTENfVEVMRVBIT05FCislCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX1RFTEVQSE9ORSBjYXRlZ29yeS4KKyUKK3RlbF9kb21fZm10ICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyRD48VTAwMjU+PFUwMDZDPiIKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDMyPjxVMDAzOT48VTAwMzE+IgoraW50X3NlbGVjdCAgICAgIjxVMDAzMD48VTAwMzA+IgorJQorRU5EIExDX1RFTEVQSE9ORQorCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislICBUaWdyaWduYS9FUiBTcGVjaWZpYyBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfQUREUkVTUworJQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19BRERSRVNTIGNhdGVnb3J5LgorJQorcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3Mj4iCitjb3VudHJ5X25hbWUgICI8VTEyQTQ+PFUxMjJEPjxVMTI3NT48VTEyMkI+IgorY291bnRyeV9wb3N0ICAiPFUwMDQ1PjxVMDA1Mj48VTAwNDk+IgorY291bnRyeV9hYjIgICAiPFUwMDQ1PjxVMDA1Mj4iCitjb3VudHJ5X2FiMyAgICI8VTAwNDU+PFUwMDUyPjxVMDA0OT4iCitjb3VudHJ5X251bSAgIDIzMgorJSBjb3VudHJ5X2NhciAgIHVua25vd24KKyUgY291bnRyeV9pc2JuICB1bmtub3duLCBOZWVkIElTTyAyMTA4CitsYW5nX25hbWUgICAgICI8VTEyNzU+PFUxMzBEPjxVMTIyRD48VTEyOUI+IgorbGFuZ19hYiAgICAgICAiPFUwMDc0PjxVMDA2OT4iCitsYW5nX3Rlcm0gICAgICI8VTAwNzQ+PFUwMDY5PjxVMDA3Mj4iCitsYW5nX2xpYiAgICAgICI8VTAwNzQ+PFUwMDY5PjxVMDA3Mj4iCislCitFTkQgTENfQUREUkVTUworCisKK0xDX01FU1NBR0VTCislCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKKyUKK0VORCBMQ19NRVNTQUdFUworCisKK0xDX05BTUUKKyUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTkFNRSBjYXRlZ29yeS4KKyUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK25hbWVfZ2VuICAgICIiCituYW1lX21yICAgICAiPFUxMkEzPjxVMTI3Nj4iICAgICAgICAgICAgICUgIjxVMTJBMD48VTEyRUQ+PFUxMjcwPiIgaXMgaW5mb3JtYWwKK25hbWVfbXJzICAgICI8VTEyQzg+PFUwMDJGPjxVMTIyRT4iCituYW1lX21pc3MgICAiPFUxMkM4PjxVMDAyRj48VTEyMkE+PFUxMjc1PiIKK25hbWVfbXMgICAgICI8VTEyQzg+PFUwMDJGPjxVMTIyQT48VTEyNzU+IgorJQorRU5EIExDX05BTUUKKworCitMQ19USU1FCislCislIEFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZXMgKCVhKQorJQorYWJkYXkgICAgIjxVMTIzMD48VTEyOTU+PFUxMjYwPiI7LworICAgICAgICAgIjxVMTIzMD48VTEyOTE+PFUxMkVEPiI7LworICAgICAgICAgIjxVMTIzMD48VTEyMDk+PFUxMjM1PiI7LworICAgICAgICAgIjxVMTIyOD48VTEyNjE+PFUxMkQ1PiI7LworICAgICAgICAgIjxVMTIxMz48VTEyMTk+PFUxMjM1PiI7LworICAgICAgICAgIjxVMTJEMz48VTEyMkQ+PFUxMjYyPiI7LworICAgICAgICAgIjxVMTI0MD48VTEyRjM+PFUxMjFEPiIKKyUKKyUgRnVsbCB3ZWVrZGF5IG5hbWVzICglQSkKKyUKK2RheSAgICAgICI8VTEyMzA+PFUxMjk1PjxVMTI2MD48VTEyNzU+IjsvCisgICAgICAgICAiPFUxMjMwPjxVMTI5MT48VTEyRUQ+IjsvCisgICAgICAgICAiPFUxMjMwPjxVMTIwOT48VTEyMzU+IjsvCisgICAgICAgICAiPFUxMjI4PjxVMTI2MT48VTEyRDU+IjsvCisgICAgICAgICAiPFUxMjEzPjxVMTIxOT48VTEyMzU+IjsvCisgICAgICAgICAiPFUxMkQzPjxVMTIyRD48VTEyNjI+IjsvCisgICAgICAgICAiPFUxMjQwPjxVMTJGMz48VTEyMUQ+IgorJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCislCithYm1vbiAgICAiPFUxMzI1PjxVMTIyQT48VTAwMjA+IjsvCisgICAgICAgICAiPFUxMjA4PjxVMTJBQj48VTEyNzI+IjsvCisgICAgICAgICAiPFUxMjE4PjxVMTMwQj48VTEyNjI+IjsvCisgICAgICAgICAiPFUxMjFBPjxVMTJFQj48VTEyREQ+IjsvCisgICAgICAgICAiPFUxMzBEPjxVMTI5NT48VTEyNjY+IjsvCisgICAgICAgICAiPFUxMjMwPjxVMTI5MD48VTAwMjA+IjsvCisgICAgICAgICAiPFUxMjEzPjxVMTIxRD48VTEyMDg+IjsvCisgICAgICAgICAiPFUxMjkwPjxVMTIxMz48VTEyMzA+IjsvCisgICAgICAgICAiPFUxMjE4PjxVMTIzNT48VTEyQTg+IjsvCisgICAgICAgICAiPFUxMzI1PjxVMTI0NT48VTEyMUQ+IjsvCisgICAgICAgICAiPFUxMjE1PjxVMTJGMz48VTEyMkQ+IjsvCisgICAgICAgICAiPFUxMjczPjxVMTIxNT48VTEyMzM+IgorJQorJSBGdWxsIG1vbnRoIG5hbWVzICglQikKKyUKK21vbiAgICAgICI8VTEzMjU+PFUxMjJBPiI7LworICAgICAgICAgIjxVMTIwOD48VTEyQUI+PFUxMjcyPjxVMTI3NT4iOy8KKyAgICAgICAgICI8VTEyMTg+PFUxMzBCPjxVMTI2Mj48VTEyNzU+IjsvCisgICAgICAgICAiPFUxMjFBPjxVMTJFQj48VTEyREQ+PFUxMkVCPiI7LworICAgICAgICAgIjxVMTMwRD48VTEyOTU+PFUxMjY2PjxVMTI3NT4iOy8KKyAgICAgICAgICI8VTEyMzA+PFUxMjkwPiI7LworICAgICAgICAgIjxVMTIxMz48VTEyMUQ+PFUxMjA4PiI7LworICAgICAgICAgIjxVMTI5MD48VTEyMTM+PFUxMjMwPiI7LworICAgICAgICAgIjxVMTIxOD48VTEyMzU+PFUxMkE4PjxVMTIyOD48VTEyMUQ+IjsvCisgICAgICAgICAiPFUxMzI1PjxVMTI0NT48VTEyMUQ+PFUxMjcyPiI7LworICAgICAgICAgIjxVMTIxNT48VTEyRjM+PFUxMjJEPiI7LworICAgICAgICAgIjxVMTI3Mz48VTEyMTU+PFUxMjMzPjxVMTIzNT4iCislCislIEVxdWl2YWxlbnQgb2YgQU0gUE0KKyUKK2FtX3BtICAgICI8VTEyOTU+PFUxMzA5PjxVMTIwNj4gPFUxMjMwPjxVMTJEMz48VTEyNzA+IjsvCisgICAgICAgICAiPFUxMkY1PjxVMTIxNT48VTEyMkQ+IDxVMTIzMD48VTEyRDM+PFUxMjc1PiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbiAoJXgpCislCSIlZC8lbS8lWSIKKyUKK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNTk+IgorJQorJSBBcHByb3ByaWF0ZSB0aW1lIHJlcHJlc2VudGF0aW9uICglWCkKKyUJIiVsOiVNOiVTIgorJQordF9mbXQgIjxVMDAyNT48VTAwNkM+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+IgorJQorJSBBcHByb3ByaWF0ZSBBTS9QTSB0aW1lIHJlcHJlc2VudGF0aW9uICglcikKKyUJIiVYICVwIgorJQordF9mbXRfYW1wbSAiPFUwMDI1PjxVMDA1OD48VTAwMjA+PFUwMDI1PjxVMDA3MD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24gKCVjKQorJQkiJUHhjaEgJUIgJWUg4YiY4YuT4YiN4YmyICVZICVyICVaCislCitkX3RfZm10ICAgICI8VTAwMjU+PFUwMDQxPjxVMTM2MT48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUxMjE4PjxVMTJEMz48VTEyMEQ+PFUxMjcyPi8KKzxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbiAoZGF0ZSgxKSkKKyUJIiVB4Y2hICVCICVlIOGImOGLk+GIjeGJsiAlciAlWiAlWSDhi5Mv4YidCislCitkYXRlX2ZtdCAgICAiPFUwMDI1PjxVMDA0MT48VTEzNjE+PFUwMDIwPjxVMDAyNT48VTAwNDI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMTIxOD48VTEyRDM+PFUxMjBEPjxVMTI3Mj4vCis8VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjA+PFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4vCis8VTAwMjA+PFUxMkQzPjxVMDAyRj48VTEyMUQ+IgorJQorRU5EIExDX1RJTUUKKyUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RpX0VUIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdGlfRVQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M3MTRlOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RpX0VUCkBAIC0wLDAgKzEsMTA3NiBAQAorY29tbWVudF9jaGFyICAgICUKK2VzY2FwZV9jaGFyICAgICAvCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgVGlncmlnbmEgbGFuZ3VhZ2UgbG9jYWxlIGZvciBFdGhpb3BpYS4KKyUKKyUgQ2hhcnNldDogVVRGLTgKKyUKKyUgUHJlcGFyZWQgYW5kIGNvbnRyaWJ1dGVkIHRvIGdsaWJjIGJ5IERhbmllbCBZYWNvYiA8bG9jYWxlc0BnZWV6Lm9yZz4KKyUKKyUgVGhpcyBsb2NhbGUgZGF0YSBoYXMgYmVlbiBkZXZlbG9wZWQgdW5kZXIgdGhlIFllaGEgUHJvamVjdDoKKyUgICAgICBodHRwOi8veWVoYS5zb3VyY2Vmb3JnZS5uZXQvCislCislIGJ1aWxkIHdpdGg6IGxvY2FsZWRlZiAtZiBVVEYtOCAtaSB0aV9FVCB0aV9FVAorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworCitMQ19JREVOVElGSUNBVElPTgorJQordGl0bGUgICAgICAiVGlncmlnbmEgbGFuZ3VhZ2UgbG9jYWxlIGZvciBFdGhpb3BpYS4iCitzb3VyY2UgICAgICJHZSdleiBGcm9udGllciBGb3VuZGF0aW9uIgorYWRkcmVzcyAgICAiNzgwMiBTb2xvbW9uIFNlYWwgRHIuLCBTcHJpbmdmaWVsZCwgVkEgMjIxNTIsIFVTQSIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImxvY2FsZXNAZ2Vlei5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJ0aSIKK3RlcnJpdG9yeSAgIkVUIgorcmV2aXNpb24gICAiMC4yMCIKK2RhdGUgICAgICAgIjIwMDMtMDctMDUiCislCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NRUFTVVJFTUVOVAorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgInBvc2l4OjE5OTMiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX1RFTEVQSE9ORQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19USU1FCislCitFTkQgTENfSURFTlRJRklDQVRJT04KKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSAgRXRoaW9waWMgU3BlY2lmYyBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfQ09MTEFURQorY29weSAiYW1fRVQiCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorJQorY29weSAiaTE4biIKK3NwYWNlIDxVMTM2MT4KK3RyYW5zbGl0X3N0YXJ0CislIGhveS1zYWRpcyBmb2xsb3dlZCBieSBhIHZvd2VsCis8VTEyMDU+PFUxMkEwPiAgICA8VTAwNjg+PFUwMDI3PjxVMDA2NT4KKzxVMTIwNT48VTEyQTE+ICAgIDxVMDA2OD48VTAwMjc+PFUwMDc1PgorPFUxMjA1PjxVMTJBMj4gICAgPFUwMDY4PjxVMDAyNz48VTAwNjk+Cis8VTEyMDU+PFUxMkEwPiAgICA8VTAwNjg+PFUwMDI3PjxVMDA2MT4KKzxVMTIwNT48VTEyQTQ+ICAgIDxVMDA2OD48VTAwMjc+PFUwMDQ1PgorPFUxMjA1PjxVMTJBNj4gICAgPFUwMDY4PjxVMDAyNz48VTAwNkY+Cis8VTEyMDU+PFUxMkE3PiAgICA8VTAwNjg+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKyUgbGF3aS1zYWRpcyBmb2xsb3dlZCBieSBhIHZvd2VsCis8VTEyMEQ+PFUxMkEwPiAgICA8VTAwNkM+PFUwMDI3PjxVMDA2NT4KKzxVMTIwRD48VTEyQTE+ICAgIDxVMDA2Qz48VTAwMjc+PFUwMDc1PgorPFUxMjBEPjxVMTJBMj4gICAgPFUwMDZDPjxVMDAyNz48VTAwNjk+Cis8VTEyMEQ+PFUxMkEwPiAgICA8VTAwNkM+PFUwMDI3PjxVMDA2MT4KKzxVMTIwRD48VTEyQTQ+ICAgIDxVMDA2Qz48VTAwMjc+PFUwMDQ1PgorPFUxMjBEPjxVMTJBNj4gICAgPFUwMDZDPjxVMDAyNz48VTAwNkY+Cis8VTEyMEQ+PFUxMkE3PiAgICA8VTAwNkM+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKyUgaGF3dC1zYWRpcyBmb2xsb3dlZCBieSBhIHZvd2VsCis8VTEyMTU+PFUxMkEwPiAgICA8VTAwNDg+PFUwMDI3PjxVMDA2NT4KKzxVMTIxNT48VTEyQTE+ICAgIDxVMDA0OD48VTAwMjc+PFUwMDc1PgorPFUxMjE1PjxVMTJBMj4gICAgPFUwMDQ4PjxVMDAyNz48VTAwNjk+Cis8VTEyMTU+PFUxMkEwPiAgICA8VTAwNDg+PFUwMDI3PjxVMDA2MT4KKzxVMTIxNT48VTEyQTQ+ICAgIDxVMDA0OD48VTAwMjc+PFUwMDQ1PgorPFUxMjE1PjxVMTJBNj4gICAgPFUwMDQ4PjxVMDAyNz48VTAwNkY+Cis8VTEyMTU+PFUxMkE3PiAgICA8VTAwNDg+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKyUgbWF5LXNhZGlzIGZvbGxvd2VkIGJ5IGEgdm93ZWwKKzxVMTIxRD48VTEyQTA+ICAgIDxVMDA2RD48VTAwMjc+PFUwMDY1PgorPFUxMjFEPjxVMTJBMT4gICAgPFUwMDZEPjxVMDAyNz48VTAwNzU+Cis8VTEyMUQ+PFUxMkEyPiAgICA8VTAwNkQ+PFUwMDI3PjxVMDA2OT4KKzxVMTIxRD48VTEyQTA+ICAgIDxVMDA2RD48VTAwMjc+PFUwMDYxPgorPFUxMjFEPjxVMTJBND4gICAgPFUwMDZEPjxVMDAyNz48VTAwNDU+Cis8VTEyMUQ+PFUxMkE2PiAgICA8VTAwNkQ+PFUwMDI3PjxVMDA2Rj4KKzxVMTIxRD48VTEyQTc+ICAgIDxVMDA2RD48VTAwMjc+PFUwMDY1PjxVMDA2MT4KKworJSBzZXd0LXNhZGlzIGZvbGxvd2VkIGJ5IGEgdm93ZWwKKzxVMTIyNT48VTEyQTA+ICAgIDxVMDA2MD48VTAwNzM+PFUwMDI3PjxVMDA2NT4KKzxVMTIyNT48VTEyQTE+ICAgIDxVMDA2MD48VTAwNzM+PFUwMDI3PjxVMDA3NT4KKzxVMTIyNT48VTEyQTI+ICAgIDxVMDA2MD48VTAwNzM+PFUwMDI3PjxVMDA2OT4KKzxVMTIyNT48VTEyQTA+ICAgIDxVMDA2MD48VTAwNzM+PFUwMDI3PjxVMDA2MT4KKzxVMTIyNT48VTEyQTQ+ICAgIDxVMDA2MD48VTAwNzM+PFUwMDI3PjxVMDA0NT4KKzxVMTIyNT48VTEyQTY+ICAgIDxVMDA2MD48VTAwNzM+PFUwMDI3PjxVMDA2Rj4KKzxVMTIyNT48VTEyQTc+ICAgIDxVMDA2MD48VTAwNzM+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKyUgcmlzLXNhZGlzIGZvbGxvd2VkIGJ5IGEgdm93ZWwKKzxVMTIyRD48VTEyQTA+ICAgIDxVMDA3Mj48VTAwMjc+PFUwMDY1PgorPFUxMjJEPjxVMTJBMT4gICAgPFUwMDcyPjxVMDAyNz48VTAwNzU+Cis8VTEyMkQ+PFUxMkEyPiAgICA8VTAwNzI+PFUwMDI3PjxVMDA2OT4KKzxVMTIyRD48VTEyQTA+ICAgIDxVMDA3Mj48VTAwMjc+PFUwMDYxPgorPFUxMjJEPjxVMTJBND4gICAgPFUwMDcyPjxVMDAyNz48VTAwNDU+Cis8VTEyMkQ+PFUxMkE2PiAgICA8VTAwNzI+PFUwMDI3PjxVMDA2Rj4KKzxVMTIyRD48VTEyQTc+ICAgIDxVMDA3Mj48VTAwMjc+PFUwMDY1PjxVMDA2MT4KKworJSBzYXQtc2FkaXMgZm9sbG93ZWQgYnkgYSB2b3dlbAorPFUxMjM1PjxVMTJBMD4gICAgPFUwMDczPjxVMDAyNz48VTAwNjU+Cis8VTEyMzU+PFUxMkExPiAgICA8VTAwNzM+PFUwMDI3PjxVMDA3NT4KKzxVMTIzNT48VTEyQTI+ICAgIDxVMDA3Mz48VTAwMjc+PFUwMDY5PgorPFUxMjM1PjxVMTJBMD4gICAgPFUwMDczPjxVMDAyNz48VTAwNjE+Cis8VTEyMzU+PFUxMkE0PiAgICA8VTAwNzM+PFUwMDI3PjxVMDA0NT4KKzxVMTIzNT48VTEyQTY+ICAgIDxVMDA3Mz48VTAwMjc+PFUwMDZGPgorPFUxMjM1PjxVMTJBNz4gICAgPFUwMDczPjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCislIHNoYS1zYXQtc2FkaXMgZm9sbG93ZWQgYnkgYSB2b3dlbAorPFUxMjNEPjxVMTJBMD4gICAgPFUwMDc4PjxVMDAyNz48VTAwNjU+Cis8VTEyM0Q+PFUxMkExPiAgICA8VTAwNzg+PFUwMDI3PjxVMDA3NT4KKzxVMTIzRD48VTEyQTI+ICAgIDxVMDA3OD48VTAwMjc+PFUwMDY5PgorPFUxMjNEPjxVMTJBMD4gICAgPFUwMDc4PjxVMDAyNz48VTAwNjE+Cis8VTEyM0Q+PFUxMkE0PiAgICA8VTAwNzg+PFUwMDI3PjxVMDA0NT4KKzxVMTIzRD48VTEyQTY+ICAgIDxVMDA3OD48VTAwMjc+PFUwMDZGPgorPFUxMjNEPjxVMTJBNz4gICAgPFUwMDc4PjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCislIHFhZi1zYWRpcyBmb2xsb3dlZCBieSBhIHZvd2VsCis8VTEyNDU+PFUxMkEwPiAgICA8VTAwNzE+PFUwMDI3PjxVMDA2NT4KKzxVMTI0NT48VTEyQTE+ICAgIDxVMDA3MT48VTAwMjc+PFUwMDc1PgorPFUxMjQ1PjxVMTJBMj4gICAgPFUwMDcxPjxVMDAyNz48VTAwNjk+Cis8VTEyNDU+PFUxMkEwPiAgICA8VTAwNzE+PFUwMDI3PjxVMDA2MT4KKzxVMTI0NT48VTEyQTQ+ICAgIDxVMDA3MT48VTAwMjc+PFUwMDQ1PgorPFUxMjQ1PjxVMTJBNj4gICAgPFUwMDcxPjxVMDAyNz48VTAwNkY+Cis8VTEyNDU+PFUxMkE3PiAgICA8VTAwNzE+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKzxVMTI0RD48VTEyQTA+ICAgIDxVMDA3MT48VTAwNTc+PFUwMDI3PjxVMDA2NT4KKzxVMTI0RD48VTEyQTE+ICAgIDxVMDA3MT48VTAwNTc+PFUwMDI3PjxVMDA3NT4KKzxVMTI0RD48VTEyQTI+ICAgIDxVMDA3MT48VTAwNTc+PFUwMDI3PjxVMDA2OT4KKzxVMTI0RD48VTEyQTA+ICAgIDxVMDA3MT48VTAwNTc+PFUwMDI3PjxVMDA2MT4KKzxVMTI0RD48VTEyQTQ+ICAgIDxVMDA3MT48VTAwNTc+PFUwMDI3PjxVMDA0NT4KKzxVMTI0RD48VTEyQTY+ICAgIDxVMDA3MT48VTAwNTc+PFUwMDI3PjxVMDA2Rj4KKzxVMTI0RD48VTEyQTc+ICAgIDxVMDA3MT48VTAwNTc+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKyUgcWhhLXFhZi1zYWRpcyBmb2xsb3dlZCBieSBhIHZvd2VsCis8VTEyNTU+PFUxMkEwPiAgICA8VTAwNTE+PFUwMDI3PjxVMDA2NT4KKzxVMTI1NT48VTEyQTE+ICAgIDxVMDA1MT48VTAwMjc+PFUwMDc1PgorPFUxMjU1PjxVMTJBMj4gICAgPFUwMDUxPjxVMDAyNz48VTAwNjk+Cis8VTEyNTU+PFUxMkEwPiAgICA8VTAwNTE+PFUwMDI3PjxVMDA2MT4KKzxVMTI1NT48VTEyQTQ+ICAgIDxVMDA1MT48VTAwMjc+PFUwMDQ1PgorPFUxMjU1PjxVMTJBNj4gICAgPFUwMDUxPjxVMDAyNz48VTAwNkY+Cis8VTEyNTU+PFUxMkE3PiAgICA8VTAwNTE+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKzxVMTI1RD48VTEyQTA+ICAgIDxVMDA1MT48VTAwNTc+PFUwMDI3PjxVMDA2NT4KKzxVMTI1RD48VTEyQTE+ICAgIDxVMDA1MT48VTAwNTc+PFUwMDI3PjxVMDA3NT4KKzxVMTI1RD48VTEyQTI+ICAgIDxVMDA1MT48VTAwNTc+PFUwMDI3PjxVMDA2OT4KKzxVMTI1RD48VTEyQTA+ICAgIDxVMDA1MT48VTAwNTc+PFUwMDI3PjxVMDA2MT4KKzxVMTI1RD48VTEyQTQ+ICAgIDxVMDA1MT48VTAwNTc+PFUwMDI3PjxVMDA0NT4KKzxVMTI1RD48VTEyQTY+ICAgIDxVMDA1MT48VTAwNTc+PFUwMDI3PjxVMDA2Rj4KKzxVMTI1RD48VTEyQTc+ICAgIDxVMDA1MT48VTAwNTc+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKyUgYmV0LXNhZGlzIGZvbGxvd2VkIGJ5IGEgdm93ZWwKKzxVMTI2NT48VTEyQTA+ICAgIDxVMDA2Mj48VTAwMjc+PFUwMDY1PgorPFUxMjY1PjxVMTJBMT4gICAgPFUwMDYyPjxVMDAyNz48VTAwNzU+Cis8VTEyNjU+PFUxMkEyPiAgICA8VTAwNjI+PFUwMDI3PjxVMDA2OT4KKzxVMTI2NT48VTEyQTA+ICAgIDxVMDA2Mj48VTAwMjc+PFUwMDYxPgorPFUxMjY1PjxVMTJBND4gICAgPFUwMDYyPjxVMDAyNz48VTAwNDU+Cis8VTEyNjU+PFUxMkE2PiAgICA8VTAwNjI+PFUwMDI3PjxVMDA2Rj4KKzxVMTI2NT48VTEyQTc+ICAgIDxVMDA2Mj48VTAwMjc+PFUwMDY1PjxVMDA2MT4KKworJSB2ZS1iZXQtc2FkaXMgZm9sbG93ZWQgYnkgYSB2b3dlbAorPFUxMjZEPjxVMTJBMD4gICAgPFUwMDc2PjxVMDAyNz48VTAwNjU+Cis8VTEyNkQ+PFUxMkExPiAgICA8VTAwNzY+PFUwMDI3PjxVMDA3NT4KKzxVMTI2RD48VTEyQTI+ICAgIDxVMDA3Nj48VTAwMjc+PFUwMDY5PgorPFUxMjZEPjxVMTJBMD4gICAgPFUwMDc2PjxVMDAyNz48VTAwNjE+Cis8VTEyNkQ+PFUxMkE0PiAgICA8VTAwNzY+PFUwMDI3PjxVMDA0NT4KKzxVMTI2RD48VTEyQTY+ICAgIDxVMDA3Nj48VTAwMjc+PFUwMDZGPgorPFUxMjZEPjxVMTJBNz4gICAgPFUwMDc2PjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCislIHRhdy1zYWRpcyBmb2xsb3dlZCBieSBhIHZvd2VsCis8VTEyNzU+PFUxMkEwPiAgICA8VTAwNzQ+PFUwMDI3PjxVMDA2NT4KKzxVMTI3NT48VTEyQTE+ICAgIDxVMDA3ND48VTAwMjc+PFUwMDc1PgorPFUxMjc1PjxVMTJBMj4gICAgPFUwMDc0PjxVMDAyNz48VTAwNjk+Cis8VTEyNzU+PFUxMkEwPiAgICA8VTAwNzQ+PFUwMDI3PjxVMDA2MT4KKzxVMTI3NT48VTEyQTQ+ICAgIDxVMDA3ND48VTAwMjc+PFUwMDQ1PgorPFUxMjc1PjxVMTJBNj4gICAgPFUwMDc0PjxVMDAyNz48VTAwNkY+Cis8VTEyNzU+PFUxMkE3PiAgICA8VTAwNzQ+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKyUgY2hhLXRhdy1zYWRpcyBmb2xsb3dlZCBieSBhIHZvd2VsCis8VTEyN0Q+PFUxMkEwPiAgICA8VTAwNjM+PFUwMDI3PjxVMDA2NT4KKzxVMTI3RD48VTEyQTE+ICAgIDxVMDA2Mz48VTAwMjc+PFUwMDc1PgorPFUxMjdEPjxVMTJBMj4gICAgPFUwMDYzPjxVMDAyNz48VTAwNjk+Cis8VTEyN0Q+PFUxMkEwPiAgICA8VTAwNjM+PFUwMDI3PjxVMDA2MT4KKzxVMTI3RD48VTEyQTQ+ICAgIDxVMDA2Mz48VTAwMjc+PFUwMDQ1PgorPFUxMjdEPjxVMTJBNj4gICAgPFUwMDYzPjxVMDAyNz48VTAwNkY+Cis8VTEyN0Q+PFUxMkE3PiAgICA8VTAwNjM+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKyUgaGFybS1zYWRpcyBmb2xsb3dlZCBieSBhIHZvd2VsCis8VTEyODU+PFUxMkEwPiAgICA8VTAwNjA+PFUwMDY4PjxVMDAyNz48VTAwNjU+Cis8VTEyODU+PFUxMkExPiAgICA8VTAwNjA+PFUwMDY4PjxVMDAyNz48VTAwNzU+Cis8VTEyODU+PFUxMkEyPiAgICA8VTAwNjA+PFUwMDY4PjxVMDAyNz48VTAwNjk+Cis8VTEyODU+PFUxMkEwPiAgICA8VTAwNjA+PFUwMDY4PjxVMDAyNz48VTAwNjE+Cis8VTEyODU+PFUxMkE0PiAgICA8VTAwNjA+PFUwMDY4PjxVMDAyNz48VTAwNDU+Cis8VTEyODU+PFUxMkE2PiAgICA8VTAwNjA+PFUwMDY4PjxVMDAyNz48VTAwNkY+Cis8VTEyODU+PFUxMkE3PiAgICA8VTAwNjA+PFUwMDY4PjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCis8VTEyOEQ+PFUxMkEwPiAgICA8VTAwNjg+PFUwMDU3PjxVMDAyNz48VTAwNjU+Cis8VTEyOEQ+PFUxMkExPiAgICA8VTAwNjg+PFUwMDU3PjxVMDAyNz48VTAwNzU+Cis8VTEyOEQ+PFUxMkEyPiAgICA8VTAwNjg+PFUwMDU3PjxVMDAyNz48VTAwNjk+Cis8VTEyOEQ+PFUxMkEwPiAgICA8VTAwNjg+PFUwMDU3PjxVMDAyNz48VTAwNjE+Cis8VTEyOEQ+PFUxMkE0PiAgICA8VTAwNjg+PFUwMDU3PjxVMDAyNz48VTAwNDU+Cis8VTEyOEQ+PFUxMkE2PiAgICA8VTAwNjg+PFUwMDU3PjxVMDAyNz48VTAwNkY+Cis8VTEyOEQ+PFUxMkE3PiAgICA8VTAwNjg+PFUwMDU3PjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCislIG5laGFzLXNhZGlzIGZvbGxvd2VkIGJ5IGEgdm93ZWwKKzxVMTI5NT48VTEyQTA+ICAgIDxVMDA2RT48VTAwMjc+PFUwMDY1PgorPFUxMjk1PjxVMTJBMT4gICAgPFUwMDZFPjxVMDAyNz48VTAwNzU+Cis8VTEyOTU+PFUxMkEyPiAgICA8VTAwNkU+PFUwMDI3PjxVMDA2OT4KKzxVMTI5NT48VTEyQTA+ICAgIDxVMDA2RT48VTAwMjc+PFUwMDYxPgorPFUxMjk1PjxVMTJBND4gICAgPFUwMDZFPjxVMDAyNz48VTAwNDU+Cis8VTEyOTU+PFUxMkE2PiAgICA8VTAwNkU+PFUwMDI3PjxVMDA2Rj4KKzxVMTI5NT48VTEyQTc+ICAgIDxVMDA2RT48VTAwMjc+PFUwMDY1PjxVMDA2MT4KKworJSBueWUtbmVoYXMtc2FkaXMgZm9sbG93ZWQgYnkgYSB2b3dlbAorPFUxMjlEPjxVMTJBMD4gICAgPFUwMDRFPjxVMDAyNz48VTAwNjU+Cis8VTEyOUQ+PFUxMkExPiAgICA8VTAwNEU+PFUwMDI3PjxVMDA3NT4KKzxVMTI5RD48VTEyQTI+ICAgIDxVMDA0RT48VTAwMjc+PFUwMDY5PgorPFUxMjlEPjxVMTJBMD4gICAgPFUwMDRFPjxVMDAyNz48VTAwNjE+Cis8VTEyOUQ+PFUxMkE0PiAgICA8VTAwNEU+PFUwMDI3PjxVMDA0NT4KKzxVMTI5RD48VTEyQTY+ICAgIDxVMDA0RT48VTAwMjc+PFUwMDZGPgorPFUxMjlEPjxVMTJBNz4gICAgPFUwMDRFPjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCislIGthZi1zYWRpcyBmb2xsb3dlZCBieSBhIHZvd2VsCis8VTEyQUQ+PFUxMkEwPiAgICA8VTAwNkI+PFUwMDI3PjxVMDA2NT4KKzxVMTJBRD48VTEyQTE+ICAgIDxVMDA2Qj48VTAwMjc+PFUwMDc1PgorPFUxMkFEPjxVMTJBMj4gICAgPFUwMDZCPjxVMDAyNz48VTAwNjk+Cis8VTEyQUQ+PFUxMkEwPiAgICA8VTAwNkI+PFUwMDI3PjxVMDA2MT4KKzxVMTJBRD48VTEyQTQ+ICAgIDxVMDA2Qj48VTAwMjc+PFUwMDQ1PgorPFUxMkFEPjxVMTJBNj4gICAgPFUwMDZCPjxVMDAyNz48VTAwNkY+Cis8VTEyQUQ+PFUxMkE3PiAgICA8VTAwNkI+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKzxVMTJCNT48VTEyQTA+ICAgIDxVMDA2Qj48VTAwNTc+PFUwMDI3PjxVMDA2NT4KKzxVMTJCNT48VTEyQTE+ICAgIDxVMDA2Qj48VTAwNTc+PFUwMDI3PjxVMDA3NT4KKzxVMTJCNT48VTEyQTI+ICAgIDxVMDA2Qj48VTAwNTc+PFUwMDI3PjxVMDA2OT4KKzxVMTJCNT48VTEyQTA+ICAgIDxVMDA2Qj48VTAwNTc+PFUwMDI3PjxVMDA2MT4KKzxVMTJCNT48VTEyQTQ+ICAgIDxVMDA2Qj48VTAwNTc+PFUwMDI3PjxVMDA0NT4KKzxVMTJCNT48VTEyQTY+ICAgIDxVMDA2Qj48VTAwNTc+PFUwMDI3PjxVMDA2Rj4KKzxVMTJCNT48VTEyQTc+ICAgIDxVMDA2Qj48VTAwNTc+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKyUga2hhLWthZi1zYWRpcyBmb2xsb3dlZCBieSBhIHZvd2VsCis8VTEyQkQ+PFUxMkEwPiAgICA8VTAwNEI+PFUwMDI3PjxVMDA2NT4KKzxVMTJCRD48VTEyQTE+ICAgIDxVMDA0Qj48VTAwMjc+PFUwMDc1PgorPFUxMkJEPjxVMTJBMj4gICAgPFUwMDRCPjxVMDAyNz48VTAwNjk+Cis8VTEyQkQ+PFUxMkEwPiAgICA8VTAwNEI+PFUwMDI3PjxVMDA2MT4KKzxVMTJCRD48VTEyQTQ+ICAgIDxVMDA0Qj48VTAwMjc+PFUwMDQ1PgorPFUxMkJEPjxVMTJBNj4gICAgPFUwMDRCPjxVMDAyNz48VTAwNkY+Cis8VTEyQkQ+PFUxMkE3PiAgICA8VTAwNEI+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKzxVMTJDNT48VTEyQTA+ICAgIDxVMDA0Qj48VTAwNTc+PFUwMDI3PjxVMDA2NT4KKzxVMTJDNT48VTEyQTE+ICAgIDxVMDA0Qj48VTAwNTc+PFUwMDI3PjxVMDA3NT4KKzxVMTJDNT48VTEyQTI+ICAgIDxVMDA0Qj48VTAwNTc+PFUwMDI3PjxVMDA2OT4KKzxVMTJDNT48VTEyQTA+ICAgIDxVMDA0Qj48VTAwNTc+PFUwMDI3PjxVMDA2MT4KKzxVMTJDNT48VTEyQTQ+ICAgIDxVMDA0Qj48VTAwNTc+PFUwMDI3PjxVMDA0NT4KKzxVMTJDNT48VTEyQTY+ICAgIDxVMDA0Qj48VTAwNTc+PFUwMDI3PjxVMDA2Rj4KKzxVMTJDNT48VTEyQTc+ICAgIDxVMDA0Qj48VTAwNTc+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKyUgd2V3ZS1zYWRpcyBmb2xsb3dlZCBieSBhIHZvd2VsCis8VTEyQ0Q+PFUxMkEwPiAgICA8VTAwNzc+PFUwMDI3PjxVMDA2NT4KKzxVMTJDRD48VTEyQTE+ICAgIDxVMDA3Nz48VTAwMjc+PFUwMDc1PgorPFUxMkNEPjxVMTJBMj4gICAgPFUwMDc3PjxVMDAyNz48VTAwNjk+Cis8VTEyQ0Q+PFUxMkEwPiAgICA8VTAwNzc+PFUwMDI3PjxVMDA2MT4KKzxVMTJDRD48VTEyQTQ+ICAgIDxVMDA3Nz48VTAwMjc+PFUwMDQ1PgorPFUxMkNEPjxVMTJBNj4gICAgPFUwMDc3PjxVMDAyNz48VTAwNkY+Cis8VTEyQ0Q+PFUxMkE3PiAgICA8VTAwNzc+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKyUgemV5LXNhZGlzIGZvbGxvemVkIGJ5IGEgdm93ZWwKKzxVMTJERD48VTEyQTA+ICAgIDxVMDA3QT48VTAwMjc+PFUwMDY1PgorPFUxMkREPjxVMTJBMT4gICAgPFUwMDdBPjxVMDAyNz48VTAwNzU+Cis8VTEyREQ+PFUxMkEyPiAgICA8VTAwN0E+PFUwMDI3PjxVMDA2OT4KKzxVMTJERD48VTEyQTA+ICAgIDxVMDA3QT48VTAwMjc+PFUwMDYxPgorPFUxMkREPjxVMTJBND4gICAgPFUwMDdBPjxVMDAyNz48VTAwNDU+Cis8VTEyREQ+PFUxMkE2PiAgICA8VTAwN0E+PFUwMDI3PjxVMDA2Rj4KKzxVMTJERD48VTEyQTc+ICAgIDxVMDA3QT48VTAwMjc+PFUwMDY1PjxVMDA2MT4KKworJSB6aGUtemV5LXNhZGlzIGZvbGxvd2VkIGJ5IGEgdm93ZWwKKzxVMTJFNT48VTEyQTA+ICAgIDxVMDA1QT48VTAwMjc+PFUwMDY1PgorPFUxMkU1PjxVMTJBMT4gICAgPFUwMDVBPjxVMDAyNz48VTAwNzU+Cis8VTEyRTU+PFUxMkEyPiAgICA8VTAwNUE+PFUwMDI3PjxVMDA2OT4KKzxVMTJFNT48VTEyQTA+ICAgIDxVMDA1QT48VTAwMjc+PFUwMDYxPgorPFUxMkU1PjxVMTJBND4gICAgPFUwMDVBPjxVMDAyNz48VTAwNDU+Cis8VTEyRTU+PFUxMkE2PiAgICA8VTAwNUE+PFUwMDI3PjxVMDA2Rj4KKzxVMTJFNT48VTEyQTc+ICAgIDxVMDA1QT48VTAwMjc+PFUwMDY1PjxVMDA2MT4KKworJSB5ZW1lbi1zYWRpcyBmb2xsb3llZCBieSBhIHZvd2VsCis8VTEyRUQ+PFUxMkEwPiAgICA8VTAwNzk+PFUwMDI3PjxVMDA2NT4KKzxVMTJFRD48VTEyQTE+ICAgIDxVMDA3OT48VTAwMjc+PFUwMDc1PgorPFUxMkVEPjxVMTJBMj4gICAgPFUwMDc5PjxVMDAyNz48VTAwNjk+Cis8VTEyRUQ+PFUxMkEwPiAgICA8VTAwNzk+PFUwMDI3PjxVMDA2MT4KKzxVMTJFRD48VTEyQTQ+ICAgIDxVMDA3OT48VTAwMjc+PFUwMDQ1PgorPFUxMkVEPjxVMTJBNj4gICAgPFUwMDc5PjxVMDAyNz48VTAwNkY+Cis8VTEyRUQ+PFUxMkE3PiAgICA8VTAwNzk+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKyUgZGludC1zYWRpcyBmb2xsb3dlZCBieSBhIHZvd2VsCis8VTEyRjU+PFUxMkEwPiAgICA8VTAwNjQ+PFUwMDI3PjxVMDA2NT4KKzxVMTJGNT48VTEyQTE+ICAgIDxVMDA2ND48VTAwMjc+PFUwMDc1PgorPFUxMkY1PjxVMTJBMj4gICAgPFUwMDY0PjxVMDAyNz48VTAwNjk+Cis8VTEyRjU+PFUxMkEwPiAgICA8VTAwNjQ+PFUwMDI3PjxVMDA2MT4KKzxVMTJGNT48VTEyQTQ+ICAgIDxVMDA2ND48VTAwMjc+PFUwMDQ1PgorPFUxMkY1PjxVMTJBNj4gICAgPFUwMDY0PjxVMDAyNz48VTAwNkY+Cis8VTEyRjU+PFUxMkE3PiAgICA8VTAwNjQ+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKyUgZGhpLWRpbnQtc2FkaXMgZm9sbG93ZWQgYnkgYSB2b3dlbAorPFUxMkZEPjxVMTJBMD4gICAgPFUwMDQ0PjxVMDAyNz48VTAwNjU+Cis8VTEyRkQ+PFUxMkExPiAgICA8VTAwNDQ+PFUwMDI3PjxVMDA3NT4KKzxVMTJGRD48VTEyQTI+ICAgIDxVMDA0ND48VTAwMjc+PFUwMDY5PgorPFUxMkZEPjxVMTJBMD4gICAgPFUwMDQ0PjxVMDAyNz48VTAwNjE+Cis8VTEyRkQ+PFUxMkE0PiAgICA8VTAwNDQ+PFUwMDI3PjxVMDA0NT4KKzxVMTJGRD48VTEyQTY+ICAgIDxVMDA0ND48VTAwMjc+PFUwMDZGPgorPFUxMkZEPjxVMTJBNz4gICAgPFUwMDQ0PjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCislIGppLWRpbnQtc2FkaXMgZm9sbG93ZWQgYnkgYSB2b3dlbAorPFUxMzA1PjxVMTJBMD4gICAgPFUwMDZBPjxVMDAyNz48VTAwNjU+Cis8VTEzMDU+PFUxMkExPiAgICA8VTAwNkE+PFUwMDI3PjxVMDA3NT4KKzxVMTMwNT48VTEyQTI+ICAgIDxVMDA2QT48VTAwMjc+PFUwMDY5PgorPFUxMzA1PjxVMTJBMD4gICAgPFUwMDZBPjxVMDAyNz48VTAwNjE+Cis8VTEzMDU+PFUxMkE0PiAgICA8VTAwNkE+PFUwMDI3PjxVMDA0NT4KKzxVMTMwNT48VTEyQTY+ICAgIDxVMDA2QT48VTAwMjc+PFUwMDZGPgorPFUxMzA1PjxVMTJBNz4gICAgPFUwMDZBPjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCislIGdlbWVsLXNhZGlzIGZvbGxvd2VkIGJ5IGEgdm93ZWwKKzxVMTMwRD48VTEyQTA+ICAgIDxVMDA2Nz48VTAwMjc+PFUwMDY1PgorPFUxMzBEPjxVMTJBMT4gICAgPFUwMDY3PjxVMDAyNz48VTAwNzU+Cis8VTEzMEQ+PFUxMkEyPiAgICA8VTAwNjc+PFUwMDI3PjxVMDA2OT4KKzxVMTMwRD48VTEyQTA+ICAgIDxVMDA2Nz48VTAwMjc+PFUwMDYxPgorPFUxMzBEPjxVMTJBND4gICAgPFUwMDY3PjxVMDAyNz48VTAwNDU+Cis8VTEzMEQ+PFUxMkE2PiAgICA8VTAwNjc+PFUwMDI3PjxVMDA2Rj4KKzxVMTMwRD48VTEyQTc+ICAgIDxVMDA2Nz48VTAwMjc+PFUwMDY1PjxVMDA2MT4KKworPFUxMzE1PjxVMTJBMD4gICAgPFUwMDY3PjxVMDA1Nz48VTAwMjc+PFUwMDY1PgorPFUxMzE1PjxVMTJBMT4gICAgPFUwMDY3PjxVMDA1Nz48VTAwMjc+PFUwMDc1PgorPFUxMzE1PjxVMTJBMj4gICAgPFUwMDY3PjxVMDA1Nz48VTAwMjc+PFUwMDY5PgorPFUxMzE1PjxVMTJBMD4gICAgPFUwMDY3PjxVMDA1Nz48VTAwMjc+PFUwMDYxPgorPFUxMzE1PjxVMTJBND4gICAgPFUwMDY3PjxVMDA1Nz48VTAwMjc+PFUwMDQ1PgorPFUxMzE1PjxVMTJBNj4gICAgPFUwMDY3PjxVMDA1Nz48VTAwMjc+PFUwMDZGPgorPFUxMzE1PjxVMTJBNz4gICAgPFUwMDY3PjxVMDA1Nz48VTAwMjc+PFUwMDY1PjxVMDA2MT4KKworJSBuZ2UtZ2VtZWwtc2FkaXMgZm9sbG93ZWQgYnkgYSB2b3dlbAorPFUxMzFEPjxVMTJBMD4gICAgPFUwMDQ3PjxVMDAyNz48VTAwNjU+Cis8VTEzMUQ+PFUxMkExPiAgICA8VTAwNDc+PFUwMDI3PjxVMDA3NT4KKzxVMTMxRD48VTEyQTI+ICAgIDxVMDA0Nz48VTAwMjc+PFUwMDY5PgorPFUxMzFEPjxVMTJBMD4gICAgPFUwMDQ3PjxVMDAyNz48VTAwNjE+Cis8VTEzMUQ+PFUxMkE0PiAgICA8VTAwNDc+PFUwMDI3PjxVMDA0NT4KKzxVMTMxRD48VTEyQTY+ICAgIDxVMDA0Nz48VTAwMjc+PFUwMDZGPgorPFUxMzFEPjxVMTJBNz4gICAgPFUwMDQ3PjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCislIHRleXQtc2FkaXMgZm9sbG93ZWQgYnkgYSB2b3dlbAorPFUxMzI1PjxVMTJBMD4gICAgPFUwMDU0PjxVMDAyNz48VTAwNjU+Cis8VTEzMjU+PFUxMkExPiAgICA8VTAwNTQ+PFUwMDI3PjxVMDA3NT4KKzxVMTMyNT48VTEyQTI+ICAgIDxVMDA1ND48VTAwMjc+PFUwMDY5PgorPFUxMzI1PjxVMTJBMD4gICAgPFUwMDU0PjxVMDAyNz48VTAwNjE+Cis8VTEzMjU+PFUxMkE0PiAgICA8VTAwNTQ+PFUwMDI3PjxVMDA0NT4KKzxVMTMyNT48VTEyQTY+ICAgIDxVMDA1ND48VTAwMjc+PFUwMDZGPgorPFUxMzI1PjxVMTJBNz4gICAgPFUwMDU0PjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCislIGNoZS10ZXl0LXNhZGlzIGZvbGxvd2VkIGJ5IGEgdm93ZWwKKzxVMTMyRD48VTEyQTA+ICAgIDxVMDA0Mz48VTAwMjc+PFUwMDY1PgorPFUxMzJEPjxVMTJBMT4gICAgPFUwMDQzPjxVMDAyNz48VTAwNzU+Cis8VTEzMkQ+PFUxMkEyPiAgICA8VTAwNDM+PFUwMDI3PjxVMDA2OT4KKzxVMTMyRD48VTEyQTA+ICAgIDxVMDA0Mz48VTAwMjc+PFUwMDYxPgorPFUxMzJEPjxVMTJBND4gICAgPFUwMDQzPjxVMDAyNz48VTAwNDU+Cis8VTEzMkQ+PFUxMkE2PiAgICA8VTAwNDM+PFUwMDI3PjxVMDA2Rj4KKzxVMTMyRD48VTEyQTc+ICAgIDxVMDA0Mz48VTAwMjc+PFUwMDY1PjxVMDA2MT4KKworJSBwZXl0LXNhZGlzIGZvbGxvd2VkIGJ5IGEgdm93ZWwKKzxVMTMzNT48VTEyQTA+ICAgIDxVMDA1MD48VTAwMjc+PFUwMDY1PgorPFUxMzM1PjxVMTJBMT4gICAgPFUwMDUwPjxVMDAyNz48VTAwNzU+Cis8VTEzMzU+PFUxMkEyPiAgICA8VTAwNTA+PFUwMDI3PjxVMDA2OT4KKzxVMTMzNT48VTEyQTA+ICAgIDxVMDA1MD48VTAwMjc+PFUwMDYxPgorPFUxMzM1PjxVMTJBND4gICAgPFUwMDUwPjxVMDAyNz48VTAwNDU+Cis8VTEzMzU+PFUxMkE2PiAgICA8VTAwNTA+PFUwMDI3PjxVMDA2Rj4KKzxVMTMzNT48VTEyQTc+ICAgIDxVMDA1MD48VTAwMjc+PFUwMDY1PjxVMDA2MT4KKworJSBzZWRleS1zYWRpcyBmb2xsb3dlZCBieSBhIHZvd2VsCis8VTEzM0Q+PFUxMkEwPiAgICA8VTAwNTM+PFUwMDI3PjxVMDA2NT4KKzxVMTMzRD48VTEyQTE+ICAgIDxVMDA1Mz48VTAwMjc+PFUwMDc1PgorPFUxMzNEPjxVMTJBMj4gICAgPFUwMDUzPjxVMDAyNz48VTAwNjk+Cis8VTEzM0Q+PFUxMkEwPiAgICA8VTAwNTM+PFUwMDI3PjxVMDA2MT4KKzxVMTMzRD48VTEyQTQ+ICAgIDxVMDA1Mz48VTAwMjc+PFUwMDQ1PgorPFUxMzNEPjxVMTJBNj4gICAgPFUwMDUzPjxVMDAyNz48VTAwNkY+Cis8VTEzM0Q+PFUxMkE3PiAgICA8VTAwNTM+PFUwMDI3PjxVMDA2NT48VTAwNjE+CisKKyUgc2VwYS1zYWRpcyBmb2xsb3dlZCBieSBhIHZvd2VsCis8VTEzNDU+PFUxMkEwPiAgICA8VTAwNjA+PFUwMDUzPjxVMDAyNz48VTAwNjU+Cis8VTEzNDU+PFUxMkExPiAgICA8VTAwNjA+PFUwMDUzPjxVMDAyNz48VTAwNzU+Cis8VTEzNDU+PFUxMkEyPiAgICA8VTAwNjA+PFUwMDUzPjxVMDAyNz48VTAwNjk+Cis8VTEzNDU+PFUxMkEwPiAgICA8VTAwNjA+PFUwMDUzPjxVMDAyNz48VTAwNjE+Cis8VTEzNDU+PFUxMkE0PiAgICA8VTAwNjA+PFUwMDUzPjxVMDAyNz48VTAwNDU+Cis8VTEzNDU+PFUxMkE2PiAgICA8VTAwNjA+PFUwMDUzPjxVMDAyNz48VTAwNkY+Cis8VTEzNDU+PFUxMkE3PiAgICA8VTAwNjA+PFUwMDUzPjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCislIGFmLXNhZGlzIGZvbGxvd2VkIGJ5IGEgdm93ZWwKKzxVMTM0RD48VTEyQTA+ICAgIDxVMDA2Nj48VTAwMjc+PFUwMDY1PgorPFUxMzREPjxVMTJBMT4gICAgPFUwMDY2PjxVMDAyNz48VTAwNzU+Cis8VTEzNEQ+PFUxMkEyPiAgICA8VTAwNjY+PFUwMDI3PjxVMDA2OT4KKzxVMTM0RD48VTEyQTA+ICAgIDxVMDA2Nj48VTAwMjc+PFUwMDYxPgorPFUxMzREPjxVMTJBND4gICAgPFUwMDY2PjxVMDAyNz48VTAwNDU+Cis8VTEzNEQ+PFUxMkE2PiAgICA8VTAwNjY+PFUwMDI3PjxVMDA2Rj4KKzxVMTM0RD48VTEyQTc+ICAgIDxVMDA2Nj48VTAwMjc+PFUwMDY1PjxVMDA2MT4KKworJSBwc2Etc2FkaXMgcG9sbG93ZWQgYnkgYSB2b3dlbAorPFUxMzU1PjxVMTJBMD4gICAgPFUwMDcwPjxVMDAyNz48VTAwNjU+Cis8VTEzNTU+PFUxMkExPiAgICA8VTAwNzA+PFUwMDI3PjxVMDA3NT4KKzxVMTM1NT48VTEyQTI+ICAgIDxVMDA3MD48VTAwMjc+PFUwMDY5PgorPFUxMzU1PjxVMTJBMD4gICAgPFUwMDcwPjxVMDAyNz48VTAwNjE+Cis8VTEzNTU+PFUxMkE0PiAgICA8VTAwNzA+PFUwMDI3PjxVMDA0NT4KKzxVMTM1NT48VTEyQTY+ICAgIDxVMDA3MD48VTAwMjc+PFUwMDZGPgorPFUxMzU1PjxVMTJBNz4gICAgPFUwMDcwPjxVMDAyNz48VTAwNjU+PFUwMDYxPgorCislIGhveQorPFUxMjAwPiAgICA8VTAwNjg+PFUwMDY1PgorPFUxMjAxPiAgICA8VTAwNjg+PFUwMDc1PgorPFUxMjAyPiAgICA8VTAwNjg+PFUwMDY5PgorPFUxMjAzPiAgICA8VTAwNjg+PFUwMDYxPgorPFUxMjA0PiAgICA8VTAwNjg+PFUwMDQ1PgorPFUxMjA1PiAgICA8VTAwNjg+Cis8VTEyMDY+ICAgIDxVMDA2OD48VTAwNkY+CisKKyUgbGF3aQorPFUxMjA4PiAgICA8VTAwNkM+PFUwMDY1PgorPFUxMjA5PiAgICA8VTAwNkM+PFUwMDc1PgorPFUxMjBBPiAgICA8VTAwNkM+PFUwMDY5PgorPFUxMjBCPiAgICA8VTAwNkM+PFUwMDYxPgorPFUxMjBDPiAgICA8VTAwNkM+PFUwMDQ1PgorPFUxMjBEPiAgICA8VTAwNkM+Cis8VTEyMEU+ICAgIDxVMDA2Qz48VTAwNkY+Cis8VTEyMEY+ICAgIDxVMDA2Qz48VTAwNTc+PFUwMDYxPgorCislIGhhd3QKKzxVMTIxMD4gICAgPFUwMDQ4PjxVMDA2NT4KKzxVMTIxMT4gICAgPFUwMDQ4PjxVMDA3NT4KKzxVMTIxMj4gICAgPFUwMDQ4PjxVMDA2OT4KKzxVMTIxMz4gICAgPFUwMDQ4PjxVMDA2MT4KKzxVMTIxND4gICAgPFUwMDQ4PjxVMDA0NT4KKzxVMTIxNT4gICAgPFUwMDQ4PgorPFUxMjE2PiAgICA8VTAwNDg+PFUwMDZGPgorPFUxMjE3PiAgICA8VTAwNDg+PFUwMDU3PjxVMDA2MT4KKworJSBtYXkKKzxVMTIxOD4gICAgPFUwMDZEPjxVMDA2NT4KKzxVMTIxOT4gICAgPFUwMDZEPjxVMDA3NT4KKzxVMTIxQT4gICAgPFUwMDZEPjxVMDA2OT4KKzxVMTIxQj4gICAgPFUwMDZEPjxVMDA2MT4KKzxVMTIxQz4gICAgPFUwMDZEPjxVMDA0NT4KKzxVMTIxRD4gICAgPFUwMDZEPgorPFUxMjFFPiAgICA8VTAwNkQ+PFUwMDZGPgorPFUxMjFGPiAgICA8VTAwNkQ+PFUwMDU3PjxVMDA2MT4KKworJSBzZXd0Cis8VTEyMjA+ICAgIDxVMDA2MD48VTAwNzM+PFUwMDY1PgorPFUxMjIxPiAgICA8VTAwNjA+PFUwMDczPjxVMDA3NT4KKzxVMTIyMj4gICAgPFUwMDYwPjxVMDA3Mz48VTAwNjk+Cis8VTEyMjM+ICAgIDxVMDA2MD48VTAwNzM+PFUwMDYxPgorPFUxMjI0PiAgICA8VTAwNjA+PFUwMDczPjxVMDA0NT4KKzxVMTIyNT4gICAgPFUwMDYwPjxVMDA3Mz4KKzxVMTIyNj4gICAgPFUwMDYwPjxVMDA3Mz48VTAwNkY+Cis8VTEyMjc+ICAgIDxVMDA2MD48VTAwNzM+PFUwMDU3PjxVMDA2MT4KKworJSByaXMKKzxVMTIyOD4gICAgPFUwMDcyPjxVMDA2NT4KKzxVMTIyOT4gICAgPFUwMDcyPjxVMDA3NT4KKzxVMTIyQT4gICAgPFUwMDcyPjxVMDA2OT4KKzxVMTIyQj4gICAgPFUwMDcyPjxVMDA2MT4KKzxVMTIyQz4gICAgPFUwMDcyPjxVMDA0NT4KKzxVMTIyRD4gICAgPFUwMDcyPgorPFUxMjJFPiAgICA8VTAwNzI+PFUwMDZGPgorPFUxMjI4PjxVMTJDQj4gICAgPFUwMDcyPjxVMDA1Nz48VTAwNjE+CisKKyUgc2F0Cis8VTEyMzA+ICAgIDxVMDA3Mz48VTAwNjU+Cis8VTEyMzE+ICAgIDxVMDA3Mz48VTAwNzU+Cis8VTEyMzI+ICAgIDxVMDA3Mz48VTAwNjk+Cis8VTEyMzM+ICAgIDxVMDA3Mz48VTAwNjE+Cis8VTEyMzQ+ICAgIDxVMDA3Mz48VTAwNDU+Cis8VTEyMzU+ICAgIDxVMDA3Mz4KKzxVMTIzNj4gICAgPFUwMDczPjxVMDA2Rj4KKzxVMTIzNz4gICAgPFUwMDczPjxVMDA1Nz48VTAwNjE+CisKKyUgc2hhLXNhdAorPFUxMjM4PiAgICA8VTAwNzg+PFUwMDY1PgorPFUxMjM5PiAgICA8VTAwNzg+PFUwMDc1PgorPFUxMjNBPiAgICA8VTAwNzg+PFUwMDY5PgorPFUxMjNCPiAgICA8VTAwNzg+PFUwMDYxPgorPFUxMjNDPiAgICA8VTAwNzg+PFUwMDQ1PgorPFUxMjNEPiAgICA8VTAwNzg+Cis8VTEyM0U+ICAgIDxVMDA3OD48VTAwNkY+Cis8VTEyM0Y+ICAgIDxVMDA3OD48VTAwNTc+PFUwMDYxPgorCislIHFhZgorPFUxMjQwPiAgICA8VTAwNzE+PFUwMDY1PgorPFUxMjQxPiAgICA8VTAwNzE+PFUwMDc1PgorPFUxMjQyPiAgICA8VTAwNzE+PFUwMDY5PgorPFUxMjQzPiAgICA8VTAwNzE+PFUwMDYxPgorPFUxMjQ0PiAgICA8VTAwNzE+PFUwMDQ1PgorPFUxMjQ1PiAgICA8VTAwNzE+Cis8VTEyNDY+ICAgIDxVMDA3MT48VTAwNkY+CisKKzxVMTI0OD4gICAgPFUwMDcxPjxVMDA1Nz48VTAwNjU+Cis8VTEyNEE+ICAgIDxVMDA3MT48VTAwNTc+PFUwMDY5PgorPFUxMjRCPiAgICA8VTAwNzE+PFUwMDU3PjxVMDA2MT4KKzxVMTI0Qz4gICAgPFUwMDcxPjxVMDA1Nz48VTAwNDU+Cis8VTEyNEQ+ICAgIDxVMDA3MT48VTAwNTc+CisKKyUgcWhhLXFhZgorPFUxMjUwPiAgICA8VTAwNTE+PFUwMDY1PgorPFUxMjUxPiAgICA8VTAwNTE+PFUwMDc1PgorPFUxMjUyPiAgICA8VTAwNTE+PFUwMDY5PgorPFUxMjUzPiAgICA8VTAwNTE+PFUwMDYxPgorPFUxMjU0PiAgICA8VTAwNTE+PFUwMDQ1PgorPFUxMjU1PiAgICA8VTAwNTE+Cis8VTEyNTY+ICAgIDxVMDA1MT48VTAwNkY+CisKKzxVMTI1OD4gICAgPFUwMDUxPjxVMDA1Nz48VTAwNjU+Cis8VTEyNUE+ICAgIDxVMDA1MT48VTAwNTc+PFUwMDY5PgorPFUxMjVCPiAgICA8VTAwNTE+PFUwMDU3PjxVMDA2MT4KKzxVMTI1Qz4gICAgPFUwMDUxPjxVMDA1Nz48VTAwNDU+Cis8VTEyNUQ+ICAgIDxVMDA1MT48VTAwNTc+CisKKyUgYmV0Cis8VTEyNjA+ICAgIDxVMDA2Mj48VTAwNjU+Cis8VTEyNjE+ICAgIDxVMDA2Mj48VTAwNzU+Cis8VTEyNjI+ICAgIDxVMDA2Mj48VTAwNjk+Cis8VTEyNjM+ICAgIDxVMDA2Mj48VTAwNjE+Cis8VTEyNjQ+ICAgIDxVMDA2Mj48VTAwNDU+Cis8VTEyNjU+ICAgIDxVMDA2Mj4KKzxVMTI2Nj4gICAgPFUwMDYyPjxVMDA2Rj4KKzxVMTI2Nz4gICAgPFUwMDYyPjxVMDA1Nz48VTAwNjE+CisKKyUgdmUtYmV0Cis8VTEyNjg+ICAgIDxVMDA3Nj48VTAwNjU+Cis8VTEyNjk+ICAgIDxVMDA3Nj48VTAwNzU+Cis8VTEyNkE+ICAgIDxVMDA3Nj48VTAwNjk+Cis8VTEyNkI+ICAgIDxVMDA3Nj48VTAwNjE+Cis8VTEyNkM+ICAgIDxVMDA3Nj48VTAwNDU+Cis8VTEyNkQ+ICAgIDxVMDA3Nj4KKzxVMTI2RT4gICAgPFUwMDc2PjxVMDA2Rj4KKzxVMTI2Rj4gICAgPFUwMDc2PjxVMDA1Nz48VTAwNjE+CisKKyUgdGF3Cis8VTEyNzA+ICAgIDxVMDA3ND48VTAwNjU+Cis8VTEyNzE+ICAgIDxVMDA3ND48VTAwNzU+Cis8VTEyNzI+ICAgIDxVMDA3ND48VTAwNjk+Cis8VTEyNzM+ICAgIDxVMDA3ND48VTAwNjE+Cis8VTEyNzQ+ICAgIDxVMDA3ND48VTAwNDU+Cis8VTEyNzU+ICAgIDxVMDA3ND4KKzxVMTI3Nj4gICAgPFUwMDc0PjxVMDA2Rj4KKzxVMTI3Nz4gICAgPFUwMDc0PjxVMDA1Nz48VTAwNjE+CisKKyUgY2hhLXRhdworPFUxMjc4PiAgICA8VTAwNjM+PFUwMDY1PgorPFUxMjc5PiAgICA8VTAwNjM+PFUwMDc1PgorPFUxMjdBPiAgICA8VTAwNjM+PFUwMDY5PgorPFUxMjdCPiAgICA8VTAwNjM+PFUwMDYxPgorPFUxMjdDPiAgICA8VTAwNjM+PFUwMDQ1PgorPFUxMjdEPiAgICA8VTAwNjM+Cis8VTEyN0U+ICAgIDxVMDA2Mz48VTAwNkY+Cis8VTEyN0Y+ICAgIDxVMDA2Mz48VTAwNTc+PFUwMDYxPgorCislIGhhcm0KKzxVMTI4MD4gICAgPFUwMDYwPjxVMDA2OD48VTAwNjU+Cis8VTEyODE+ICAgIDxVMDA2MD48VTAwNjg+PFUwMDc1PgorPFUxMjgyPiAgICA8VTAwNjA+PFUwMDY4PjxVMDA2OT4KKzxVMTI4Mz4gICAgPFUwMDYwPjxVMDA2OD48VTAwNjE+Cis8VTEyODQ+ICAgIDxVMDA2MD48VTAwNjg+PFUwMDQ1PgorPFUxMjg1PiAgICA8VTAwNjA+PFUwMDY4PgorPFUxMjg2PiAgICA8VTAwNjA+PFUwMDY4PjxVMDA2Rj4KKworPFUxMjg4PiAgICA8VTAwNjA+PFUwMDY4PjxVMDA1Nz48VTAwNjU+Cis8VTEyOEE+ICAgIDxVMDA2MD48VTAwNjg+PFUwMDU3PjxVMDA2OT4KKzxVMTI4Qj4gICAgPFUwMDYwPjxVMDA2OD48VTAwNTc+PFUwMDYxPgorPFUxMjhDPiAgICA8VTAwNjA+PFUwMDY4PjxVMDA1Nz48VTAwNDU+Cis8VTEyOEQ+ICAgIDxVMDA2MD48VTAwNjg+PFUwMDU3PgorCislIG5laGFzCis8VTEyOTA+ICAgIDxVMDA2RT48VTAwNjU+Cis8VTEyOTE+ICAgIDxVMDA2RT48VTAwNzU+Cis8VTEyOTI+ICAgIDxVMDA2RT48VTAwNjk+Cis8VTEyOTM+ICAgIDxVMDA2RT48VTAwNjE+Cis8VTEyOTQ+ICAgIDxVMDA2RT48VTAwNDU+Cis8VTEyOTU+ICAgIDxVMDA2RT4KKzxVMTI5Nj4gICAgPFUwMDZFPjxVMDA2Rj4KKzxVMTI5Nz4gICAgPFUwMDZFPjxVMDA1Nz48VTAwNjE+CisKKyUgbnllLW5laGFzCis8VTEyOTg+ICAgIDxVMDA0RT48VTAwNjU+Cis8VTEyOTk+ICAgIDxVMDA0RT48VTAwNzU+Cis8VTEyOUE+ICAgIDxVMDA0RT48VTAwNjk+Cis8VTEyOUI+ICAgIDxVMDA0RT48VTAwNjE+Cis8VTEyOUM+ICAgIDxVMDA0RT48VTAwNDU+Cis8VTEyOUQ+ICAgIDxVMDA0RT4KKzxVMTI5RT4gICAgPFUwMDRFPjxVMDA2Rj4KKzxVMTI5Rj4gICAgPFUwMDRFPjxVMDA1Nz48VTAwNjE+CisKKyUgYWxlZgorPFUxMkEwPiAgICA8VTAwNjE+Cis8VTEyQTE+ICAgIDxVMDA3NT4KKzxVMTJBMj4gICAgPFUwMDY5PgorPFUxMkEzPiAgICA8VTAwNDE+Cis8VTEyQTQ+ICAgIDxVMDA0NT4KKzxVMTJBNT4gICAgPFUwMDQ5PgorPFUxMkE2PiAgICA8VTAwNkY+Cis8VTEyQTc+ICAgIDxVMDA2NT48VTAwNjE+CisKKyUga2FmCis8VTEyQTg+ICAgIDxVMDA2Qj48VTAwNjU+Cis8VTEyQTk+ICAgIDxVMDA2Qj48VTAwNzU+Cis8VTEyQUE+ICAgIDxVMDA2Qj48VTAwNjk+Cis8VTEyQUI+ICAgIDxVMDA2Qj48VTAwNjE+Cis8VTEyQUM+ICAgIDxVMDA2Qj48VTAwNDU+Cis8VTEyQUQ+ICAgIDxVMDA2Qj4KKzxVMTJBRT4gICAgPFUwMDZCPjxVMDA2Rj4KKworPFUxMkIwPiAgICA8VTAwNkI+PFUwMDU3PjxVMDA2NT4KKzxVMTJCMj4gICAgPFUwMDZCPjxVMDA1Nz48VTAwNjk+Cis8VTEyQjM+ICAgIDxVMDA2Qj48VTAwNTc+PFUwMDYxPgorPFUxMkI0PiAgICA8VTAwNkI+PFUwMDU3PjxVMDA0NT4KKzxVMTJCNT4gICAgPFUwMDZCPjxVMDA1Nz4KKworJSBraGEta2FmCis8VTEyQjg+ICAgIDxVMDA0Qj48VTAwNjU+Cis8VTEyQjk+ICAgIDxVMDA0Qj48VTAwNzU+Cis8VTEyQkE+ICAgIDxVMDA0Qj48VTAwNjk+Cis8VTEyQkI+ICAgIDxVMDA0Qj48VTAwNjE+Cis8VTEyQkM+ICAgIDxVMDA0Qj48VTAwNDU+Cis8VTEyQkQ+ICAgIDxVMDA0Qj4KKzxVMTJCRT4gICAgPFUwMDRCPjxVMDA2Rj4KKworPFUxMkMwPiAgICA8VTAwNEI+PFUwMDU3PjxVMDA2NT4KKzxVMTJDMj4gICAgPFUwMDRCPjxVMDA1Nz48VTAwNjk+Cis8VTEyQzM+ICAgIDxVMDA0Qj48VTAwNTc+PFUwMDYxPgorPFUxMkM0PiAgICA8VTAwNEI+PFUwMDU3PjxVMDA0NT4KKzxVMTJDNT4gICAgPFUwMDRCPjxVMDA1Nz4KKworJSB3ZXdlCis8VTEyQzg+ICAgIDxVMDA3Nz48VTAwNjU+Cis8VTEyQzk+ICAgIDxVMDA3Nz48VTAwNzU+Cis8VTEyQ0E+ICAgIDxVMDA3Nz48VTAwNjk+Cis8VTEyQ0I+ICAgIDxVMDA3Nz48VTAwNjE+Cis8VTEyQ0M+ICAgIDxVMDA3Nz48VTAwNDU+Cis8VTEyQ0Q+ICAgIDxVMDA3Nz4KKzxVMTJDRT4gICAgPFUwMDc3PjxVMDA2Rj4KKzxVMTJDOD48VTEyQ0I+ICAgIDxVMDA3Nz48VTAwNTc+PFUwMDYxPgorCislIGF5aW4KKzxVMTJEMD4gICAgPFUwMDYwPjxVMDA2NT4KKzxVMTJEMT4gICAgPFUwMDYwPjxVMDA3NT4KKzxVMTJEMj4gICAgPFUwMDYwPjxVMDA2OT4KKzxVMTJEMz4gICAgPFUwMDYwPjxVMDA2MT4KKzxVMTJEND4gICAgPFUwMDYwPjxVMDA0NT4KKzxVMTJENT4gICAgPFUwMDYwPjxVMDA0OT4KKzxVMTJENj4gICAgPFUwMDYwPjxVMDA2Rj4KKworJSB6ZXkKKzxVMTJEOD4gICAgPFUwMDdBPjxVMDA2NT4KKzxVMTJEOT4gICAgPFUwMDdBPjxVMDA3NT4KKzxVMTJEQT4gICAgPFUwMDdBPjxVMDA2OT4KKzxVMTJEQj4gICAgPFUwMDdBPjxVMDA2MT4KKzxVMTJEQz4gICAgPFUwMDdBPjxVMDA0NT4KKzxVMTJERD4gICAgPFUwMDdBPgorPFUxMkRFPiAgICA8VTAwN0E+PFUwMDZGPgorPFUxMkRGPiAgICA8VTAwN0E+PFUwMDU3PjxVMDA2MT4KKworJSB6aGUtemV5Cis8VTEyRTA+ICAgIDxVMDA1QT48VTAwNjU+Cis8VTEyRTE+ICAgIDxVMDA1QT48VTAwNzU+Cis8VTEyRTI+ICAgIDxVMDA1QT48VTAwNjk+Cis8VTEyRTM+ICAgIDxVMDA1QT48VTAwNjE+Cis8VTEyRTQ+ICAgIDxVMDA1QT48VTAwNDU+Cis8VTEyRTU+ICAgIDxVMDA1QT4KKzxVMTJFNj4gICAgPFUwMDVBPjxVMDA2Rj4KKzxVMTJFNz4gICAgPFUwMDVBPjxVMDA1Nz48VTAwNjE+CisKKyUgeWVtZW4KKzxVMTJFOD4gICAgPFUwMDc5PjxVMDA2NT4KKzxVMTJFOT4gICAgPFUwMDc5PjxVMDA3NT4KKzxVMTJFQT4gICAgPFUwMDc5PjxVMDA2OT4KKzxVMTJFQj4gICAgPFUwMDc5PjxVMDA2MT4KKzxVMTJFQz4gICAgPFUwMDc5PjxVMDA0NT4KKzxVMTJFRD4gICAgPFUwMDc5PgorPFUxMkVFPiAgICA8VTAwNzk+PFUwMDZGPgorCislIGRpbnQKKzxVMTJGMD4gICAgPFUwMDY0PjxVMDA2NT4KKzxVMTJGMT4gICAgPFUwMDY0PjxVMDA3NT4KKzxVMTJGMj4gICAgPFUwMDY0PjxVMDA2OT4KKzxVMTJGMz4gICAgPFUwMDY0PjxVMDA2MT4KKzxVMTJGND4gICAgPFUwMDY0PjxVMDA0NT4KKzxVMTJGNT4gICAgPFUwMDY0PgorPFUxMkY2PiAgICA8VTAwNjQ+PFUwMDZGPgorPFUxMkY3PiAgICA8VTAwNjQ+PFUwMDU3PjxVMDA2MT4KKworJSBkaGktZGludAorPFUxMkY4PiAgICA8VTAwNDQ+PFUwMDY1PgorPFUxMkY5PiAgICA8VTAwNDQ+PFUwMDc1PgorPFUxMkZBPiAgICA8VTAwNDQ+PFUwMDY5PgorPFUxMkZCPiAgICA8VTAwNDQ+PFUwMDYxPgorPFUxMkZDPiAgICA8VTAwNDQ+PFUwMDQ1PgorPFUxMkZEPiAgICA8VTAwNDQ+Cis8VTEyRkU+ICAgIDxVMDA0ND48VTAwNkY+Cis8VTEyRkY+ICAgIDxVMDA0ND48VTAwNTc+PFUwMDYxPgorCislIGppLWRpbnQKKzxVMTMwMD4gICAgPFUwMDZBPjxVMDA2NT4KKzxVMTMwMT4gICAgPFUwMDZBPjxVMDA3NT4KKzxVMTMwMj4gICAgPFUwMDZBPjxVMDA2OT4KKzxVMTMwMz4gICAgPFUwMDZBPjxVMDA2MT4KKzxVMTMwND4gICAgPFUwMDZBPjxVMDA0NT4KKzxVMTMwNT4gICAgPFUwMDZBPgorPFUxMzA2PiAgICA8VTAwNkE+PFUwMDZGPgorPFUxMzA3PiAgICA8VTAwNkE+PFUwMDU3PjxVMDA2MT4KKworJSBnZW1lbAorPFUxMzA4PiAgICA8VTAwNjc+PFUwMDY1PgorPFUxMzA5PiAgICA8VTAwNjc+PFUwMDc1PgorPFUxMzBBPiAgICA8VTAwNjc+PFUwMDY5PgorPFUxMzBCPiAgICA8VTAwNjc+PFUwMDYxPgorPFUxMzBDPiAgICA8VTAwNjc+PFUwMDQ1PgorPFUxMzBEPiAgICA8VTAwNjc+Cis8VTEzMEU+ICAgIDxVMDA2Nz48VTAwNkY+CisKKzxVMTMxMD4gICAgPFUwMDY3PjxVMDA1Nz48VTAwNjU+Cis8VTEzMTI+ICAgIDxVMDA2Nz48VTAwNTc+PFUwMDY5PgorPFUxMzEzPiAgICA8VTAwNjc+PFUwMDU3PjxVMDA2MT4KKzxVMTMxND4gICAgPFUwMDY3PjxVMDA1Nz48VTAwNDU+Cis8VTEzMTU+ICAgIDxVMDA2Nz48VTAwNTc+CisKKyUgbmdlLWdlbWVsCis8VTEzMTg+ICAgIDxVMDA0Nz48VTAwNjU+Cis8VTEzMTk+ICAgIDxVMDA0Nz48VTAwNzU+Cis8VTEzMUE+ICAgIDxVMDA0Nz48VTAwNjk+Cis8VTEzMUI+ICAgIDxVMDA0Nz48VTAwNjE+Cis8VTEzMUM+ICAgIDxVMDA0Nz48VTAwNDU+Cis8VTEzMUQ+ICAgIDxVMDA0Nz4KKzxVMTMxRT4gICAgPFUwMDQ3PjxVMDA2Rj4KKzxVMTMxRj4gICAgPFUwMDQ3PjxVMDA1Nz48VTAwNjE+CisKKyUgdGV5dAorPFUxMzIwPiAgICA8VTAwNTQ+PFUwMDY1PgorPFUxMzIxPiAgICA8VTAwNTQ+PFUwMDc1PgorPFUxMzIyPiAgICA8VTAwNTQ+PFUwMDY5PgorPFUxMzIzPiAgICA8VTAwNTQ+PFUwMDYxPgorPFUxMzI0PiAgICA8VTAwNTQ+PFUwMDQ1PgorPFUxMzI1PiAgICA8VTAwNTQ+Cis8VTEzMjY+ICAgIDxVMDA1ND48VTAwNkY+Cis8VTEzMjc+ICAgIDxVMDA1ND48VTAwNTc+PFUwMDYxPgorCislIGNoZS10ZXl0Cis8VTEzMjg+ICAgIDxVMDA0Mz48VTAwNjU+Cis8VTEzMjk+ICAgIDxVMDA0Mz48VTAwNzU+Cis8VTEzMkE+ICAgIDxVMDA0Mz48VTAwNjk+Cis8VTEzMkI+ICAgIDxVMDA0Mz48VTAwNjE+Cis8VTEzMkM+ICAgIDxVMDA0Mz48VTAwNDU+Cis8VTEzMkQ+ICAgIDxVMDA0Mz4KKzxVMTMyRT4gICAgPFUwMDQzPjxVMDA2Rj4KKzxVMTMyRj4gICAgPFUwMDQzPjxVMDA1Nz48VTAwNjE+CisKKyUgcGV5dAorPFUxMzMwPiAgICA8VTAwNTA+PFUwMDY1PgorPFUxMzMxPiAgICA8VTAwNTA+PFUwMDc1PgorPFUxMzMyPiAgICA8VTAwNTA+PFUwMDY5PgorPFUxMzMzPiAgICA8VTAwNTA+PFUwMDYxPgorPFUxMzM0PiAgICA8VTAwNTA+PFUwMDQ1PgorPFUxMzM1PiAgICA8VTAwNTA+Cis8VTEzMzY+ICAgIDxVMDA1MD48VTAwNkY+Cis8VTEzMzc+ICAgIDxVMDA1MD48VTAwNTc+PFUwMDYxPgorCislIHNlZGV5Cis8VTEzMzg+ICAgIDxVMDA1Mz48VTAwNjU+Cis8VTEzMzk+ICAgIDxVMDA1Mz48VTAwNzU+Cis8VTEzM0E+ICAgIDxVMDA1Mz48VTAwNjk+Cis8VTEzM0I+ICAgIDxVMDA1Mz48VTAwNjE+Cis8VTEzM0M+ICAgIDxVMDA1Mz48VTAwNDU+Cis8VTEzM0Q+ICAgIDxVMDA1Mz4KKzxVMTMzRT4gICAgPFUwMDUzPjxVMDA2Rj4KKzxVMTMzRj4gICAgPFUwMDUzPjxVMDA1Nz48VTAwNjE+CisKKyUgc2VwYQorPFUxMzQwPiAgICA8VTAwNjA+PFUwMDUzPjxVMDA2NT4KKzxVMTM0MT4gICAgPFUwMDYwPjxVMDA1Mz48VTAwNzU+Cis8VTEzNDI+ICAgIDxVMDA2MD48VTAwNTM+PFUwMDY5PgorPFUxMzQzPiAgICA8VTAwNjA+PFUwMDUzPjxVMDA2MT4KKzxVMTM0ND4gICAgPFUwMDYwPjxVMDA1Mz48VTAwNDU+Cis8VTEzNDU+ICAgIDxVMDA2MD48VTAwNTM+Cis8VTEzNDY+ICAgIDxVMDA2MD48VTAwNTM+PFUwMDZGPgorPFUxMzNGPiAgICA8VTAwNjA+PFUwMDUzPjxVMDA1Nz48VTAwNjE+CisKKyUgYWYKKzxVMTM0OD4gICAgPFUwMDY2PjxVMDA2NT4KKzxVMTM0OT4gICAgPFUwMDY2PjxVMDA3NT4KKzxVMTM0QT4gICAgPFUwMDY2PjxVMDA2OT4KKzxVMTM0Qj4gICAgPFUwMDY2PjxVMDA2MT4KKzxVMTM0Qz4gICAgPFUwMDY2PjxVMDA0NT4KKzxVMTM0RD4gICAgPFUwMDY2PgorPFUxMzRFPiAgICA8VTAwNjY+PFUwMDZGPgorPFUxMzRGPiAgICA8VTAwNjY+PFUwMDU3PjxVMDA2MT4KKworJSBwc2EKKzxVMTM1MD4gICAgPFUwMDcwPjxVMDA2NT4KKzxVMTM1MT4gICAgPFUwMDcwPjxVMDA3NT4KKzxVMTM1Mj4gICAgPFUwMDcwPjxVMDA2OT4KKzxVMTM1Mz4gICAgPFUwMDcwPjxVMDA2MT4KKzxVMTM1ND4gICAgPFUwMDcwPjxVMDA0NT4KKzxVMTM1NT4gICAgPFUwMDcwPgorPFUxMzU2PiAgICA8VTAwNzA+PFUwMDZGPgorPFUxMzU3PiAgICA8VTAwNzA+PFUwMDU3PjxVMDA2MT4KKworJSBMaWdhdHVyZXMKKzxVMTM1OD4gICAgPFUwMDZEPjxVMDA1OT48VTAwNjE+Cis8VTEzNTk+ICAgIDxVMDA3Mj48VTAwNTk+PFUwMDYxPgorPFUxMzVBPiAgICA8VTAwNjY+PFUwMDU5PjxVMDA2MT4KKworJSBQdW5jdHVhdGlvbgorPFUxMzYxPiAgICA8VTAwM0E+Cis8VTEzNjI+ICAgIDxVMDAzQT48VTAwM0E+Cis8VTEzNjM+ICAgIDxVMDAyQz4KKzxVMTM2ND4gICAgPFUwMDNCPgorPFUxMzY2PiAgICA8VTAwM0E+PFUwMDJEPgorPFUxMzY1PiAgICA8VTAwMkQ+PFUwMDNBPgorPFUxMzY3PiAgICA8VTAwNjA+PFUwMDNGPgorPFUxMzY4PiAgICA8VTAwM0E+PFUwMDdDPjxVMDAzQT4KKworJSBOdW1lcmFscworPFUxMzY5PiAgICA8VTAwNjA+PFUwMDMxPgorPFUxMzZBPiAgICA8VTAwNjA+PFUwMDMyPgorPFUxMzZCPiAgICA8VTAwNjA+PFUwMDMzPgorPFUxMzZDPiAgICA8VTAwNjA+PFUwMDM0PgorPFUxMzZEPiAgICA8VTAwNjA+PFUwMDM1PgorPFUxMzZFPiAgICA8VTAwNjA+PFUwMDM2PgorPFUxMzZGPiAgICA8VTAwNjA+PFUwMDM3PgorPFUxMzcwPiAgICA8VTAwNjA+PFUwMDM4PgorPFUxMzcxPiAgICA8VTAwNjA+PFUwMDM5PgorPFUxMzcyPiAgICA8VTAwNjA+PFUwMDMxPjxVMDAzMD4KKzxVMTM3Mz4gICAgPFUwMDYwPjxVMDAzMj48VTAwMzA+Cis8VTEzNzQ+ICAgIDxVMDA2MD48VTAwMzM+PFUwMDMwPgorPFUxMzc1PiAgICA8VTAwNjA+PFUwMDM0PjxVMDAzMD4KKzxVMTM3Nj4gICAgPFUwMDYwPjxVMDAzNT48VTAwMzA+Cis8VTEzNzc+ICAgIDxVMDA2MD48VTAwMzY+PFUwMDMwPgorPFUxMzc4PiAgICA8VTAwNjA+PFUwMDM3PjxVMDAzMD4KKzxVMTM3OT4gICAgPFUwMDYwPjxVMDAzOD48VTAwMzA+Cis8VTEzN0E+ICAgIDxVMDA2MD48VTAwMzk+PFUwMDMwPgorPFUxMzdCPiAgICA8VTAwNjA+PFUwMDMxPjxVMDAzMD48VTAwMzA+Cis8VTEzN0M+ICAgIDxVMDA2MD48VTAwMzE+PFUwMDMwPjxVMDAzMD48VTAwMzA+PFUwMDMwPgorCitpbmNsdWRlICAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCislCitFTkQgTENfQ1RZUEUKKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSAgRXRoaW9waWEgU3BlY2lmYyBhbmQgU2hhcmVkIERhdGE6CislCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCitMQ19NRUFTVVJFTUVOVAorJQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19NRUFTVVJFTUVOVCBjYXRlZ29yeS4KKyUKK21lYXN1cmVtZW50IDEKKyUKK0VORCBMQ19NRUFTVVJFTUVOVAorCisKK0xDX01PTkVUQVJZCislCitpbnRfY3Vycl9zeW1ib2wgICAgICAgIjxVMDA0NT48VTAwNTQ+PFUwMDQyPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgIjxVMDAyND4iCittb25fZGVjaW1hbF9wb2ludCAgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAwCituX2NzX3ByZWNlZGVzICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgIDAKK3Bfc2lnbl9wb3NuICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgMQorJQorRU5EIExDX01PTkVUQVJZCisKKworTENfTlVNRVJJQworJQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX05VTUVSSUMgY2F0ZWdvcnkuCislCitkZWNpbWFsX3BvaW50ICAgICAgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAiPFUwMDJDPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgMzszCislCitFTkQgTENfTlVNRVJJQworCisKK0xDX1BBUEVSCislCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX1BBUEVSIGNhdGVnb3J5LgorJQoraGVpZ2h0ICAgICAgMjk3Cit3aWR0aCAgICAgICAyMTAKKyUKK0VORCBMQ19QQVBFUgorCisKK0xDX1RFTEVQSE9ORQorJQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19URUxFUEhPTkUgY2F0ZWdvcnkuCislCit0ZWxfZG9tX2ZtdCAgICAiPFUwMDI1PjxVMDA2MT48VTAwMkQ+PFUwMDI1PjxVMDA2Qz4iCit0ZWxfaW50X2ZtdCAgICAiPFUwMDI1PjxVMDA2Mz48VTAwMkQ+PFUwMDI1PjxVMDA2MT48VTAwMkQ+PFUwMDI1PjxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDMyPjxVMDAzNT48VTAwMzE+IgoraW50X3NlbGVjdCAgICAgIjxVMDAzMD48VTAwMzA+IgorJQorRU5EIExDX1RFTEVQSE9ORQorCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislICBUaWdyaWduYS9FVCBTcGVjaWZpYyBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfQUREUkVTUworJQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19BRERSRVNTIGNhdGVnb3J5LgorJQorcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3Mj4iCitjb3VudHJ5X25hbWUgICI8VTEyQTI+PFUxMjc1PjxVMTJFRT48VTEzMzU+PFUxMkVCPiIKK2NvdW50cnlfcG9zdCAgIjxVMDA0NT48VTAwNTQ+PFUwMDQ4PiIKK2NvdW50cnlfYWIyICAgIjxVMDA0NT48VTAwNTQ+IgorY291bnRyeV9hYjMgICAiPFUwMDQ1PjxVMDA1ND48VTAwNDg+IgorY291bnRyeV9udW0gICAyMzEgICAlIDIxMCBmb3VuZCBpbiBhdCBsZWFzdCBvbmUgSVNPIDMxNjYgZG9jCislIGNvdW50cnlfY2FyICAgdW5rbm93bgorJSBjb3VudHJ5X2lzYm4gIHVua25vd24sIE5lZWQgSVNPIDIxMDgKK2xhbmdfbmFtZSAgICAgIjxVMTI3NT48VTEzMEQ+PFUxMjJEPjxVMTI5Qj4iCitsYW5nX2FiICAgICAgICI8VTAwNzQ+PFUwMDY5PiIKK2xhbmdfdGVybSAgICAgIjxVMDA3ND48VTAwNjk+PFUwMDcyPiIKK2xhbmdfbGliICAgICAgIjxVMDA3ND48VTAwNjk+PFUwMDcyPiIKKyUKK0VORCBMQ19BRERSRVNTCisKKworTENfTUVTU0FHRVMKKyUKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorJQorRU5EIExDX01FU1NBR0VTCisKKworTENfTkFNRQorJQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OQU1FIGNhdGVnb3J5LgorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorbmFtZV9nZW4gICAgIiIKK25hbWVfbXIgICAgICI8VTEyQTA+PFUxMjc2PiIgICAgICAgICAgICAgJSAiPFUxMkEwPjxVMTJFRD48VTEyNzA+IiBpcyBpbmZvcm1hbAorbmFtZV9tcnMgICAgIjxVMTJDOD48VTAwMkY+PFUxMjJFPiIKK25hbWVfbWlzcyAgICI8VTEyQzg+PFUwMDJGPjxVMTIyQT48VTEyNzU+IgorbmFtZV9tcyAgICAgIjxVMTJDOD48VTAwMkY+PFUxMjJBPjxVMTI3NT4iCislCitFTkQgTENfTkFNRQorCisKK0xDX1RJTUUKKyUKKyUgQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyAoJWEpCislCithYmRheSAgICAiPFUxMjMwPjxVMTI5NT48VTEyNjA+IjsvCisgICAgICAgICAiPFUxMjMwPjxVMTI5MT48VTEyRUQ+IjsvCisgICAgICAgICAiPFUxMjMwPjxVMTIwOT48VTEyMzU+IjsvCisgICAgICAgICAiPFUxMjI4PjxVMTI2MT48VTEyRDU+IjsvCisgICAgICAgICAiPFUxMjEzPjxVMTIxOT48VTEyMzU+IjsvCisgICAgICAgICAiPFUxMkQzPjxVMTIyRD48VTEyNjI+IjsvCisgICAgICAgICAiPFUxMjQwPjxVMTJGMz48VTEyMUQ+IgorJQorJSBGdWxsIHdlZWtkYXkgbmFtZXMgKCVBKQorJQorZGF5ICAgICAgIjxVMTIzMD48VTEyOTU+PFUxMjYwPjxVMTI3NT4iOy8KKyAgICAgICAgICI8VTEyMzA+PFUxMjkxPjxVMTJFRD4iOy8KKyAgICAgICAgICI8VTEyMzA+PFUxMjA5PjxVMTIzNT4iOy8KKyAgICAgICAgICI8VTEyMjg+PFUxMjYxPjxVMTJENT4iOy8KKyAgICAgICAgICI8VTEyMTM+PFUxMjE5PjxVMTIzNT4iOy8KKyAgICAgICAgICI8VTEyRDM+PFUxMjJEPjxVMTI2Mj4iOy8KKyAgICAgICAgICI8VTEyNDA+PFUxMkYzPjxVMTIxRD4iCislCislIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzICglYikKKyUKK2FibW9uICAgICI8VTEzMDM+PFUxMjk1PjxVMTJFOT4iOy8KKyAgICAgICAgICI8VTEzNEM+PFUxMjY1PjxVMTIyOT4iOy8KKyAgICAgICAgICI8VTEyMUI+PFUxMjJEPjxVMTI3RD4iOy8KKyAgICAgICAgICI8VTEyQTQ+PFUxMzU1PjxVMTIyOD4iOy8KKyAgICAgICAgICI8VTEyMUM+PFUxMkVEPjxVMDAyMD4iOy8KKyAgICAgICAgICI8VTEzMDE+PFUxMjk1PjxVMDAyMD4iOy8KKyAgICAgICAgICI8VTEzMDE+PFUxMjBCPjxVMTJFRD4iOy8KKyAgICAgICAgICI8VTEyQTY+PFUxMzA4PjxVMTIzNT4iOy8KKyAgICAgICAgICI8VTEyMzQ+PFUxMzU1PjxVMTI3ND4iOy8KKyAgICAgICAgICI8VTEyQTY+PFUxMkFEPjxVMTI3MD4iOy8KKyAgICAgICAgICI8VTEyOTY+PFUxMjZDPjxVMTIxRD4iOy8KKyAgICAgICAgICI8VTEyRjI+PFUxMjM0PjxVMTIxRD4iCislCislIEZ1bGwgbW9udGggbmFtZXMgKCVCKQorJQorbW9uICAgICAgIjxVMTMwMz48VTEyOTU+PFUxMkU5PjxVMTJDOD48VTEyMkE+IjsvCisgICAgICAgICAiPFUxMzRDPjxVMTI2NT48VTEyMjk+PFUxMkM4PjxVMTIyQT4iOy8KKyAgICAgICAgICI8VTEyMUI+PFUxMjJEPjxVMTI3RD4iOy8KKyAgICAgICAgICI8VTEyQTQ+PFUxMzU1PjxVMTIyOD48VTEyMEQ+IjsvCisgICAgICAgICAiPFUxMjFDPjxVMTJFRD4iOy8KKyAgICAgICAgICI8VTEzMDE+PFUxMjk1PiI7LworICAgICAgICAgIjxVMTMwMT48VTEyMEI+PFUxMkVEPiI7LworICAgICAgICAgIjxVMTJBNj48VTEzMDg+PFUxMjM1PjxVMTI3NT4iOy8KKyAgICAgICAgICI8VTEyMzQ+PFUxMzU1PjxVMTI3ND48VTEyMUQ+PFUxMjYwPjxVMTIyRD4iOy8KKyAgICAgICAgICI8VTEyQTY+PFUxMkFEPjxVMTI3MD48VTEyQ0Q+PFUxMjYwPjxVMTIyRD4iOy8KKyAgICAgICAgICI8VTEyOTY+PFUxMjZDPjxVMTIxRD48VTEyNjA+PFUxMjJEPiI7LworICAgICAgICAgIjxVMTJGMj48VTEyMzQ+PFUxMjFEPjxVMTI2MD48VTEyMkQ+IgorJQorJSBFcXVpdmFsZW50IG9mIEFNIFBNCislCithbV9wbSAgICAiPFUxMjk1PjxVMTMwOT48VTEyMDY+IDxVMTIzMD48VTEyRDM+PFUxMjcwPiI7LworICAgICAgICAgIjxVMTJGNT48VTEyMTU+PFUxMjJEPiA8VTEyMzA+PFUxMkQzPjxVMTI3NT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKCV4KQorJQkiJWQvJW0vJVkiCislCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDU5PiIKKyUKKyUgQXBwcm9wcmlhdGUgdGltZSByZXByZXNlbnRhdGlvbiAoJVgpCislCSIlbDolTTolUyIKKyUKK3RfZm10ICI8VTAwMjU+PFUwMDZDPjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPiIKKyUKKyUgQXBwcm9wcmlhdGUgQU0vUE0gdGltZSByZXByZXNlbnRhdGlvbiAoJXIpCislCSIlWCAlcCIKKyUKK3RfZm10X2FtcG0gIjxVMDAyNT48VTAwNTg+PFUwMDIwPjxVMDAyNT48VTAwNzA+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uICglYykKKyUJIiVB4Y2jICVCICVlIOGImOGLk+GIjeGJsiAlWSAlciAlWgorJQorZF90X2ZtdCAgICAiPFUwMDI1PjxVMDA0MT48VTEzNjM+PFUwMDIwPjxVMDAyNT48VTAwNDI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMTIxOD48VTEyRDM+PFUxMjBEPjxVMTI3Mj4vCis8VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKGRhdGUoMSkpCislCSIlQeGNoyAlQiAlZSDhiJjhi5PhiI3hibIgJXIgJVogJVkg4YuTL+GInQorJQorZGF0ZV9mbXQgICAgIjxVMDAyNT48VTAwNDE+PFUxMzYzPjxVMDAyMD48VTAwMjU+PFUwMDQyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTEyMTg+PFUxMkQzPjxVMTIwRD48VTEyNzI+LworPFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDIwPjxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+LworPFUwMDIwPjxVMTJEMz48VTAwMkY+PFUxMjFEPiIKKyUKK0VORCBMQ19USU1FCislCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy90aWdfRVIgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy90aWdfRVIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBkMGFmYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RpZ19FUgpAQCAtMCwwICsxLDIyMiBAQAorY29tbWVudF9jaGFyICAgICUKK2VzY2FwZV9jaGFyICAgICAvCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgVGlncmUgbGFuZ3VhZ2UgbG9jYWxlIGZvciBFcml0cmVhLgorJQorJSBDaGFyc2V0OiBVVEYtOAorJQorJSBUaWdyZSB0ZXJtcyBhcmUgcHJvdmlkZWQgYnkgTXVzc2llIEJla2l0IHdpdGggY29vcmRpbmF0aW9uIGJ5IHRoZQorJSBTaGltYWdhbGUgVGVhbSA8aHR0cDovL3d3dy5zaGltYWdsZS5jb20vPi4gIFByZXBhcmVkIGFuZCBjb250cmlidXRlZAorJSB0byBnbGliYyBieSBEYW5pZWwgWWFjb2IgPGxvY2FsZXNAZ2Vlei5vcmc+CislCislIGJ1aWxkIHdpdGg6IGxvY2FsZWRlZiAtZiBVVEYtOCAtaSB0aWdfRVIgdGlnX0VSCislCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJUaWdyZSBsYW5ndWFnZSBsb2NhbGUgZm9yIEVyaXRyZWEiCitzb3VyY2UgICAgICJHZSdleiBGcm9udGllciBGb3VuZGF0aW9uIgorYWRkcmVzcyAgICAiNzgwMiBTb2xvbW9uIFNlYWwgRHIuLCBTcHJpbmdmaWVsZCwgVkEgMjIxNTIsIFVTQSIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImxvY2FsZXNAZ2Vlei5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJ0aWciCit0ZXJyaXRvcnkgICJFUiIKK3JldmlzaW9uICAgIjAuMjAiCitkYXRlICAgICAgICIyMDAzLTA3LTA1IgorJQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTUVBU1VSRU1FTlQKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJwb3NpeDoxOTkzIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19URUxFUEhPTkUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfVElNRQorJQorRU5EIExDX0lERU5USUZJQ0FUSU9OCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIEV0aGlvcGljIFNwZWNpZmMgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX0NPTExBVEUKK2NvcHkgInRpX0VSIgorRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgInRpX0VSIgorRU5EIExDX0NUWVBFCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIEVyaXRyZWEgU3BlY2lmYyBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgInRpX0VSIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX01PTkVUQVJZCitjb3B5ICJ0aV9FUiIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJ0aV9FUiIKK0VORCBMQ19OVU1FUklDCisKK0xDX1BBUEVSCitjb3B5ICJ0aV9FUiIKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK2NvcHkgInRpX0VSIgorRU5EIExDX1RFTEVQSE9ORQorCisKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCislCislICBUaWdyZSBTcGVjaWZpYyBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfTUVTU0FHRVMKK2NvcHkgInRpX0VSIgorRU5EIExDX01FU1NBR0VTCisKK0xDX05BTUUKK2NvcHkgInRpX0VSIgorRU5EIExDX05BTUUKKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSAgVGlncmUvRVIgU3BlY2lmaWMgRGF0YToKKyUKKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCisKK0xDX0FERFJFU1MKKyUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfQUREUkVTUyBjYXRlZ29yeS4KKyUKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwN0E+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDU0PjxVMDAyNT48VTAwNzM+LworPFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDY1PjxVMDAyNT48VTAwNzI+IgorY291bnRyeV9uYW1lICAiPFUxMkE0PjxVMTIyRD48VTEyNzU+PFUxMjJCPiIKK2NvdW50cnlfcG9zdCAgIjxVMDA0NT48VTAwNTI+PFUwMDQ5PiIKK2NvdW50cnlfYWIyICAgIjxVMDA0NT48VTAwNTI+IgorY291bnRyeV9hYjMgICAiPFUwMDQ1PjxVMDA1Mj48VTAwNDk+IgorY291bnRyeV9udW0gICAyMzIKKyUgY291bnRyeV9jYXIgICB1bmtub3duCislIGNvdW50cnlfaXNibiAgdW5rbm93biwgTmVlZCBJU08gMjEwOAorbGFuZ19uYW1lICAgICAiPFUxMjc1PjxVMTMwRD48VTEyMjg+IgorbGFuZ19hYiAgICAgICAiIgorbGFuZ190ZXJtICAgICAiPFUwMDc0PjxVMDA2OT48VTAwNjc+IgorbGFuZ19saWIgICAgICAiPFUwMDc0PjxVMDA2OT48VTAwNjc+IgorJQorRU5EIExDX0FERFJFU1MKKworCitMQ19USU1FCislCislIEFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZXMgKCVhKQorJQorYWJkYXkgICAgIjxVMTIzMD48VTAwMkY+PFUxMkQzPiI7LworICAgICAgICAgIjxVMTIzMD48VTEyOTY+PFUwMDIwPiI7LworICAgICAgICAgIjxVMTI3Mz48VTEyMEI+PFUxMjM4PiI7LworICAgICAgICAgIjxVMTJBMz48VTEyMjg+PFUxMjJEPiI7LworICAgICAgICAgIjxVMTJBOD48VTEyMUE+PFUxMjNEPiI7LworICAgICAgICAgIjxVMTMwNT48VTEyMUQ+PFUxMkQzPiI7LworICAgICAgICAgIjxVMTIzMD48VTAwMkY+PFUxMjk1PiIKKyUKKyUgRnVsbCB3ZWVrZGF5IG5hbWVzICglQSkKKyUKK2RheSAgICAgICI8VTEyMzA+PFUxMjk1PjxVMTI2MD48VTEyNzU+IDxVMTJEMz48VTEyNjM+PFUxMkVEPiI7LworICAgICAgICAgIjxVMTIzMD48VTEyOTY+IjsvCisgICAgICAgICAiPFUxMjczPjxVMTIwQj48VTEyMzg+PFUxMjk2PiI7LworICAgICAgICAgIjxVMTJBMz48VTEyMjg+PFUxMjJEPjxVMTI2Mz48VTEyRDM+IjsvCisgICAgICAgICAiPFUxMkE4PjxVMTIxQT48VTEyM0Q+IjsvCisgICAgICAgICAiPFUxMzA1PjxVMTIxRD48VTEyRDM+PFUxMjc1PiI7LworICAgICAgICAgIjxVMTIzMD48VTEyOTU+PFUxMjYwPjxVMTI3NT4gPFUxMjk1PjxVMTJBMj48VTEyM0Q+IgorJQorJSBBYmJyZXZpYXRlZCBtb250aCBuYW1lcyAoJWIpCislCithYm1vbiAgICAiPFUxMzI1PjxVMTIyQT48VTAwMjA+IjsvCisgICAgICAgICAiPFUxMjA4PjxVMTJBQj48VTEyNzI+IjsvCisgICAgICAgICAiPFUxMjE4PjxVMTMwQj48VTEyNjI+IjsvCisgICAgICAgICAiPFUxMjFBPjxVMTJFQj48VTEyREQ+IjsvCisgICAgICAgICAiPFUxMzBEPjxVMTI5NT48VTEyNjY+IjsvCisgICAgICAgICAiPFUxMjMwPjxVMTI5MD48VTAwMjA+IjsvCisgICAgICAgICAiPFUxMjEzPjxVMTIxRD48VTEyMDg+IjsvCisgICAgICAgICAiPFUxMjkwPjxVMTIxMz48VTEyMzA+IjsvCisgICAgICAgICAiPFUxMjE4PjxVMTIzNT48VTEyQTg+IjsvCisgICAgICAgICAiPFUxMzI1PjxVMTI0NT48VTEyMUQ+IjsvCisgICAgICAgICAiPFUxMjE1PjxVMTJGMz48VTEyMkQ+IjsvCisgICAgICAgICAiPFUxMjczPjxVMTIxNT48VTEyMzM+IgorJQorJSBGdWxsIG1vbnRoIG5hbWVzICglQikKKyUKK21vbiAgICAgICI8VTEzMjU+PFUxMjJBPiI7LworICAgICAgICAgIjxVMTIwOD48VTEyQUI+PFUxMjcyPjxVMTI3NT4iOy8KKyAgICAgICAgICI8VTEyMTg+PFUxMzBCPjxVMTI2Mj48VTEyNzU+IjsvCisgICAgICAgICAiPFUxMjFBPjxVMTJFQj48VTEyREQ+PFUxMkVCPiI7LworICAgICAgICAgIjxVMTMwRD48VTEyOTU+PFUxMjY2PjxVMTI3NT4iOy8KKyAgICAgICAgICI8VTEyMzA+PFUxMjkwPiI7LworICAgICAgICAgIjxVMTIxMz48VTEyMUQ+PFUxMjA4PiI7LworICAgICAgICAgIjxVMTI5MD48VTEyMTM+PFUxMjMwPiI7LworICAgICAgICAgIjxVMTIxOD48VTEyMzU+PFUxMkE4PjxVMTIyOD48VTEyMUQ+IjsvCisgICAgICAgICAiPFUxMzI1PjxVMTI0NT48VTEyMUQ+PFUxMjcyPiI7LworICAgICAgICAgIjxVMTIxNT48VTEyRjM+PFUxMjJEPiI7LworICAgICAgICAgIjxVMTI3Mz48VTEyMTU+PFUxMjMzPjxVMTIzNT4iCislCislCislIEVxdWl2YWxlbnQgb2YgQU0gUE0KKyUKK2FtX3BtICAgICI8VTEyNDA+PFUxMkYwPjxVMTIxRD48VTAwMjA+PFUxMjMwPjxVMTIyRD48VTAwMjA+PFUxMjFEPjxVMTJENT48VTEyMEQ+IjsvCisgICAgICAgICAiPFUxMjEzPjxVMTI0Nj48VTAwMjA+PFUxMjMwPjxVMTIyRD48VTAwMjA+PFUxMjFEPjxVMTJENT48VTEyMEQ+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uICgleCkKKyUJIiVkLyVtLyVZIgorJQorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA1OT4iCislCislIEFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24gKCVYKQorJQkiJWw6JU06JVMiCislCit0X2ZtdCAiPFUwMDI1PjxVMDA2Qz48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4iCislCislIEFwcHJvcHJpYXRlIEFNL1BNIHRpbWUgcmVwcmVzZW50YXRpb24gKCVyKQorJQkiJVggJXAiCislCit0X2ZtdF9hbXBtICI8VTAwMjU+PFUwMDU4PjxVMDAyMD48VTAwMjU+PFUwMDcwPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbiAoJWMpCislCSIlQeGNoSAlQiAlZSDhi67hiJ0gJVkgJXIgJVoKKyUKK2RfdF9mbXQgICAgIjxVMDAyNT48VTAwNDE+PFUxMzYxPjxVMDAyMD48VTAwMjU+PFUwMDQyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTEyRUU+PFUxMjFEPi8KKzxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSByZXByZXNlbnRhdGlvbiAoZGF0ZSgxKSkKKyUJIiVB4Y2hICVCICVlIOGLruGInSAlciAlWiAlWSDhi5Mv4YidCislCitkYXRlX2ZtdCAgICAiPFUwMDI1PjxVMDA0MT48VTEzNjE+PFUwMDIwPjxVMDAyNT48VTAwNDI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMTJFRT48VTEyMUQ+LworPFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDIwPjxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+LworPFUwMDIwPjxVMTJEMz48VTAwMkY+PFUxMjFEPiIKKyUKK0VORCBMQ19USU1FCislCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy90a19UTSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RrX1RNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0Y2M4NDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy90a19UTQpAQCAtMCwwICsxLDQ0OCBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIFR1cmttZW4gTGFuZ3VhZ2UgTG9jYWxlIGZvciBUdXJrbWVuaXN0YW4gKGxhdGluKQorJSBTb3VyY2U6IEd1cmJhbiBNLiBUZXdla2dlbGkKKyUgQ29udGFjdDogUGFibG8gU2FyYXR4YWdhICYgR3VyYmFuIE0uIFRld2VrZ2VsaQorJSBFbWFpbDogPHBhYmxvQG1hbmRyaXZhLmNvbSAmIGdtdGF2YWtrb2xpQHlhaG9vLmNvbT4KKyUgTGFuZ3VhZ2U6IHRrCislIFRlcnJpdG9yeTogVE0KKyUgUmV2aXNpb246IDAuNAorJSBEYXRlOiAyMDA0LTA2LTEwCislIEFwcGxpY2F0aW9uOiBnZW5lcmFsCislIFVzZXJzOiBnZW5lcmFsCislIENoYXJzZXQ6IFVURi04CislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCislCisKKyUgbmVlZGVkIGV4dHJhIGNoYXJzOiDDpCwgw7YsIMO8LCDDvSwgw6csIMWfLCDFiCwgxb4KKyUgY3lyaWxsaWMgZXh0cmEgY2hhcnM6INKXICh6JSw9KSwg0qMgKG4sPSksINOpIChvLT0pLCDSryAodSc9KSwg05kgKHN3PSkKKworTENfSURFTlRJRklDQVRJT04KKwordGl0bGUgICAgICJUdXJrbWVuIGxvY2FsZSBmb3IgVHVya21lbmlzdGFuIgorc291cmNlICAgICJHdXJiYW4gTS4gVGV3ZWtnZWxpIgorYWRkcmVzcyAgICIiCitjb250YWN0ICAgIlBhYmxvIFNhcmF0eGFnYSAmIEd1cmJhbiBNLiBUZXdla2dlbGkiCitlbWFpbCAgICAgInBhYmxvQG1hbmRyaXZhLmNvbSAmIGdtdGF2YWtrb2xpQHlhaG9vLmNvbSIKK3RlbCAgICAgICAiIgorZmF4ICAgICAgICIiCitsYW5ndWFnZSAgIlR1cmttZW4iCit0ZXJyaXRvcnkgIlR1cmttZW5pc3RhbiIKK3JldmlzaW9uICAiMC4zIgorZGF0ZSAgICAgICIyMDA0LTA2LTA4IgorCitjYXRlZ29yeSAidGtfVE06MjAwNCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICJ0a19UTToyMDA0IjtMQ19DVFlQRQorY2F0ZWdvcnkgInRrX1RNOjIwMDQiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICJ0a19UTToyMDA0IjtMQ19USU1FCitjYXRlZ29yeSAidGtfVE06MjAwNCI7TENfTlVNRVJJQworY2F0ZWdvcnkgInRrX1RNOjIwMDQiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAidGtfVE06MjAwNCI7TENfTUVBU1VSRU1FTlQKK2NhdGVnb3J5ICJ0a19UTToyMDA0IjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgInRrX1RNOjIwMDQiO0xDX1BBUEVSCitjYXRlZ29yeSAidGtfVE06MjAwNCI7TENfTkFNRQorY2F0ZWdvcnkgInRrX1RNOjIwMDQiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICJ0a19UTToyMDA0IjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAidHJhbnNsaXRfY29tYmluaW5nIjsiIgorCislIGN5cmlsbGljIC0+IGxhdGluCislIGxvd2VyIGNhc2UgbGV0dGVycworCis8VTA0MzA+ICI8VTAwNjE+IiAgICAgICAgJSBhPSAgIC0+IGEKKzxVMDQzMT4gIjxVMDA2Mj4iICAgICAgICAlIGI9ICAgLT4gYgorPFUwNDMyPiAiPFUwMDc3PiIgICAgICAgICUgdj0gICAtPiB3Cis8VTA0MzM+ICI8VTAwNjc+IiAgICAgICAgJSBnPSAgIC0+IGcKKzxVMDQzND4gIjxVMDA2ND4iICAgICAgICAlIGQ9ICAgLT4gZAorPFUwNDM1PiAiPFUwMDY1PiIgICAgICAgICUgZT0gICAtPiBlICh5J2UgYWxzbywgYnV0IGNvbnRleHQgZGVwZW5kZW50KQorPFUwNDUxPiAiPFUwMEZEPjxVMDA2Rj4iICUgaW8gICAtPiB5J28KKzxVMDQzNj4gIjxVMDE3RT4iICAgICAgICAlIHolICAgLT4gejwKKzxVMDQ5Nz4gIjxVMDA2QT4iICAgICAgICAlIHolLCAgLT4gagorPFUwNDM3PiAiPFUwMDdBPiIgICAgICAgICUgej0gICAtPiB6Cis8VTA0Mzg+ICI8VTAwNjk+IiAgICAgICAgJSBpPSAgIC0+IGkKKzxVMDQzOT4gIjxVMDBGRD4iICAgICAgICAlIGo9ICAgLT4geScKKzxVMDQzQT4gIjxVMDA2Qj4iICAgICAgICAlIGs9ICAgLT4gaworPFUwNDNCPiAiPFUwMDZDPiIgICAgICAgICUgbD0gICAtPiBsCis8VTA0M0M+ICI8VTAwNkQ+IiAgICAgICAgJSBtPSAgIC0+IG0KKzxVMDQzRD4gIjxVMDA2RT4iICAgICAgICAlIG49ICAgLT4gbgorPFUwNEEzPiAiPFUwMTQ4PiIgICAgICAgICUgbiw9ICAtPiBuPAorPFUwNDNFPiAiPFUwMDZGPiIgICAgICAgICUgbz0gICAtPiBvCis8VTA0RTk+ICI8VTAwRjY+IiAgICAgICAgJSBvLT0gIC0+IG86Cis8VTA0M0Y+ICI8VTAwNzA+IiAgICAgICAgJSBwPSAgIC0+IHAKKzxVMDQ0MD4gIjxVMDA3Mj4iICAgICAgICAlIHI9ICAgLT4gcgorPFUwNDQxPiAiPFUwMDczPiIgICAgICAgICUgcz0gICAtPiBzCis8VTA0NDI+ICI8VTAwNzQ+IiAgICAgICAgJSB0PSAgIC0+IHQKKzxVMDQ0Mz4gIjxVMDA3NT4iICAgICAgICAlIHU9ICAgLT4gdQorPFUwNEFGPiAiPFUwMEZDPiIgICAgICAgICUgdSc9ICAtPiB1OgorPFUwNDQ0PiAiPFUwMDY2PiIgICAgICAgICUgZj0gICAtPiBmCis8VTA0NDU+ICI8VTAwNjg+IiAgICAgICAgJSBoPSAgIC0+IGgKKzxVMDQ0Nj4gIjxVMDA3ND48VTAwNzM+IiAlIGM9ICAgLT4gdHMKKzxVMDQ0Nz4gIjxVMDBFNz4iICAgICAgICAlIGMlICAgLT4gYywKKzxVMDQ0OD4gIjxVMDE1Rj4iICAgICAgICAlIHMlICAgLT4gcywKKzxVMDQ0QT4gIiIgICAgICAgICAgICAgICAlIGhhcmQgc2lnbiBvbWl0dGVkCis8VTA0NEI+ICI8VTAwNzk+IiAgICAgICAgJSB5ZXJ1IC0+IHkKKzxVMDQ0Qz4gIiIgICAgICAgICAgICAgICAlIHNvZnQgc2lnbiBvbWl0dGVkLgorPFUwNDREPiAiPFUwMDY1PiIgICAgICAgICUgamU9ICAtPiBlIAorPFUwNEQ5PiAiPFUwMEU0PiIgICAgICAgICUgc3c9ICAtPiBhOgorPFUwNDRFPiAiPFUwMEZEPjxVMDA3NT4iICUganUgICAtPiB5J3UKKzxVMDQ0Rj4gIjxVMDBGRD48VTAwNjE+IiAlIGphICAgLT4geSdhCisKKyUgdXBwZXIgY2FzZSBsZXR0ZXJzCisKKzxVMDQxMD4gIjxVMDA0MT4iICAgICAgICAlIGE9ICAgLT4gYQorPFUwNDExPiAiPFUwMDQyPiIgICAgICAgICUgYj0gICAtPiBiCis8VTA0MTI+ICI8VTAwNTc+IiAgICAgICAgJSB2PSAgIC0+IHcKKzxVMDQxMz4gIjxVMDA0Nz4iICAgICAgICAlIGc9ICAgLT4gZworPFUwNDE0PiAiPFUwMDQ0PiIgICAgICAgICUgZD0gICAtPiBkCis8VTA0MTU+ICI8VTAwNDU+IiAgICAgICAgJSBlPSAgIC0+IGUgKHknZSBhbHNvLCBidXQgY29udGV4dCBkZXBlbmRlbnQpCis8VTA0MDE+ICI8VTAwREQ+PFUwMDZGPiIgJSBpbyAgIC0+IHknbworPFUwNDE2PiAiPFUwMTdEPiIgICAgICAgICUgeiUgICAtPiB6PAorPFUwNDk2PiAiPFUwMDRBPiIgICAgICAgICUgeiUsICAtPiBqCis8VTA0MTc+ICI8VTAwNUE+IiAgICAgICAgJSB6PSAgIC0+IHoKKzxVMDQxOD4gIjxVMDA0OT4iICAgICAgICAlIGk9ICAgLT4gaQorPFUwNDE5PiAiPFUwMEREPiIgICAgICAgICUgaj0gICAtPiB5JworPFUwNDFBPiAiPFUwMDRCPiIgICAgICAgICUgaz0gICAtPiBrCis8VTA0MUI+ICI8VTAwNEM+IiAgICAgICAgJSBsPSAgIC0+IGwKKzxVMDQxQz4gIjxVMDA0RD4iICAgICAgICAlIG09ICAgLT4gbQorPFUwNDFEPiAiPFUwMDRFPiIgICAgICAgICUgbj0gICAtPiBuCis8VTA0QTI+ICI8VTAxNDc+IiAgICAgICAgJSBuLD0gIC0+IG48Cis8VTA0MUU+ICI8VTAwNEY+IiAgICAgICAgJSBvPSAgIC0+IG8KKzxVMDRFOD4gIjxVMDBENj4iICAgICAgICAlIG8tPSAgLT4gbzoKKzxVMDQxRj4gIjxVMDA1MD4iICAgICAgICAlIHA9ICAgLT4gcAorPFUwNDIwPiAiPFUwMDUyPiIgICAgICAgICUgcj0gICAtPiByCis8VTA0MjE+ICI8VTAwNTM+IiAgICAgICAgJSBzPSAgIC0+IHMKKzxVMDQyMj4gIjxVMDA1ND4iICAgICAgICAlIHQ9ICAgLT4gdAorPFUwNDIzPiAiPFUwMDU1PiIgICAgICAgICUgdT0gICAtPiB1Cis8VTA0QUU+ICI8VTAwREM+IiAgICAgICAgJSB1Jz0gIC0+IHU6Cis8VTA0MjQ+ICI8VTAwNDY+IiAgICAgICAgJSBmPSAgIC0+IGYKKzxVMDQyNT4gIjxVMDA0OD4iICAgICAgICAlIGg9ICAgLT4gaAorPFUwNDI2PiAiPFUwMDU0PjxVMDA3Mz4iICUgYz0gICAtPiB0cworPFUwNDI3PiAiPFUwMEM3PiIgICAgICAgICUgYyUgICAtPiBjLAorPFUwNDI4PiAiPFUwMTVFPiIgICAgICAgICUgcyUgICAtPiBzLAorPFUwNDJBPiAiIiAgICAgICAgICAgICAgICUgaGFyZCBzaWduIG9taXR0ZWQKKzxVMDQyQj4gIjxVMDA1OT4iICAgICAgICAlIHllcnUgLT4geQorPFUwNDJDPiAiIiAgICAgICAgICAgICAgICUgc29mdCBzaWduIG9taXR0ZWQuCis8VTA0MkQ+ICI8VTAwNDU+IiAgICAgICAgJSBqZT0gIC0+IGUgCis8VTA0RDg+ICI8VTAwQzQ+IiAgICAgICAgJSBzdz0gIC0+IGE6Cis8VTA0MkU+ICI8VTAwREQ+PFUwMDc1PiIgJSBqdSAgIC0+IHkndQorPFUwNDJGPiAiPFUwMEREPjxVMDA2MT4iICUgamEgICAtPiB5J2EKKwordHJhbnNsaXRfZW5kCisKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCisKKyUKKyUgVGhlIHR1cmttZW4gbGF0aW4gYWxwaGFiZXQgb3JkZXIgaXM6CislIChsZXR0ZXJzIGluIHBhcmVudGhlc2lzIGFyZSBub3QgdXNlZCBpbiB0aykKKyUgPGE+LCA8Yj4sIDxjLD4gKDxjPiksIDxkPiwgPGU+LCA8YTo+ICg8c3c+KSwgPGY+LCA8Zz4sIDxoPiwgPGk+CislIDxqPiwgPHo8PiwgPGs+LCA8bD4sIDxtPiwgPG4+LCA8bjw+ICg8bj8+IDxuZz4pLCA8bz4sIDxvOj4sIDxwPiwgKDxxPiksCislIDxyPiwgPHM+LCA8cyw+LCA8dD4sIDx1PiwgPHU6PiwgKDx2PikgPHc+LCAoPHg+KSwgPHk+LCA8eSc+ICg8eTo+KSwgPHo+CislCislIGN5cmlsbGljIGFscGhhYmV0IG9yZGVyOgorJSA8YT0+LCA8Yj0+LCA8dj0+LCA8Zz0+LCA8ZD0+LCA8ZT0+LCA8aW8+LCA8eiU+LCA8eiUsPT4sIDx6PT4sIDxpPT4sCislIDxqPT4sIDxrPT4sIDxsPT4sIDxtPT4sIDxuPT4sIDxuLD0+LCA8bz0+LCA8by09PiwgPHA9PiwgPHI9PiwgPHM9PiwKKyUgPHQ9PiwgPHU9PiwgPHUnPT4sIDxmPT4sIDxoPT4sIDxjPT4sIDxjJT4sIDxzJT4sIDw9Jz4sIDx5PT4sIDwlJz4sCislIDxqZT4sIDxzdz0+LCA8anU+LCA8amE+IAorJQorY29weSAiaXNvMTQ2NTFfdDEiCisKK2NvbGxhdGluZy1zeW1ib2wgPGMsPgorY29sbGF0aW5nLXN5bWJvbCA8YTo+Citjb2xsYXRpbmctc3ltYm9sIDx6PD4KK2NvbGxhdGluZy1zeW1ib2wgPG48PgorY29sbGF0aW5nLXN5bWJvbCA8bzo+Citjb2xsYXRpbmctc3ltYm9sIDxzLD4KK2NvbGxhdGluZy1zeW1ib2wgPHU6PgorY29sbGF0aW5nLXN5bWJvbCA8eSc+CislCitjb2xsYXRpbmctc3ltYm9sIDx6LD0+Citjb2xsYXRpbmctc3ltYm9sIDxuLD0+Citjb2xsYXRpbmctc3ltYm9sIDxvLT0+Citjb2xsYXRpbmctc3ltYm9sIDx1Jz0+Citjb2xsYXRpbmctc3ltYm9sIDxzdz0+CisKKyUgcHJpb3JpdHkgZ2l2ZW4gdG8gVHVya21lbiBhY2NlbnRzCityZW9yZGVyLWFmdGVyIDxCQVM+Cis8Q0RJPgorPENBUj4KKzxBQ0E+Cis8UkVVPgorCityZW9yZGVyLWFmdGVyIDxiPgorPGMsPgorcmVvcmRlci1hZnRlciA8ZT4KKzxhOj4KK3Jlb3JkZXItYWZ0ZXIgPGo+Cis8ejw+CityZW9yZGVyLWFmdGVyIDxuPgorPG48PgorcmVvcmRlci1hZnRlciA8bz4KKzxvOj4KK3Jlb3JkZXItYWZ0ZXIgPHM+Cis8cyw+CityZW9yZGVyLWFmdGVyIDx1PgorPHU6PgorcmVvcmRlci1hZnRlciA8eT4KKzx5Jz4KKworcmVvcmRlci1hZnRlciA8Q1lSLVpIRT4KKzx6LD0+CityZW9yZGVyLWFmdGVyIDxDWVItRU4+Cis8biw9PgorcmVvcmRlci1hZnRlciA8Q1lSLU8+Cis8by09PgorcmVvcmRlci1hZnRlciA8Q1lSLU9VQlJFPgorPHUnPT4KK3Jlb3JkZXItYWZ0ZXIgPENZUi1FPgorPHN3PT4KKworcmVvcmRlci1hZnRlciA8VTAwNjI+Cis8VTAwRTc+IDxjLD47PEJBUz47PE1JTj47SUdOT1JFCis8VTAwNjM+IDxjLD47PEJBUz47PE1JTj47PGM+CityZW9yZGVyLWFmdGVyIDxVMDA0Mj4KKzxVMDBDNz4gPGMsPjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMDA0Mz4gPGMsPjs8QkFTPjs8Q0FQPjs8Yz4KKworcmVvcmRlci1hZnRlciA8VTAwNjU+Cis8VTAwRTQ+IDxhOj47PFJFVT47PE1JTj47SUdOT1JFCis8VTAyNTk+IDxhOj47PFBDTD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0NT4KKzxVMDBDND4gPGE6Pjs8UkVVPjs8Q0FQPjtJR05PUkUKKzxVMDE4Rj4gPGE6Pjs8UENMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNkE+Cis8VTAxN0U+IDx6PD47PENBUj47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0QT4KKzxVMDE3RD4gPHo8Pjs8Q0FSPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNkU+Cis8VTAxNDc+IDxuPD47PENBUj47PE1JTj47SUdOT1JFCis8VTAwRjE+IDxuPD47PFRJTD47PE1JTj47SUdOT1JFCis8VTAxNEI+IDxuPD47PFBDTD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0RT4KKzxVMDE0OD4gPG48Pjs8Q0FSPjs8Q0FQPjtJR05PUkUKKzxVMDBEMT4gPG48Pjs8VElMPjs8Q0FQPjtJR05PUkUKKzxVMDE0QT4gPG48Pjs8UENMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNkY+Cis8VTAwRjY+IDxvOj47PFJFVT47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0Rj4KKzxVMDBENj4gPG86Pjs8UkVVPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNzM+Cis8VTAxNUY+IDxzLD47PENEST47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA1Mz4KKzxVMDE1RT4gPHMsPjs8Q0RJPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNzU+Cis8VTAwRkM+IDx1Oj47PFJFVT47PE1JTj47SUdOT1JFCis8VTAwNTY+IDx3Pjs8QkFTPjs8Q0FQPjs8dj4KKzxVMDA1Nz4gPHc+OzxCQVM+OzxDQVA+Ozx3PgorcmVvcmRlci1hZnRlciA8VTAwNTU+Cis8VTAwREM+IDx1Oj47PFJFVT47PENBUD47SUdOT1JFCis8VTAwNzY+IDx3Pjs8QkFTPjs8TUlOPjs8dj4KKzxVMDA3Nz4gPHc+OzxCQVM+OzxNSU4+Ozx3PgorCityZW9yZGVyLWFmdGVyIDxVMDA3OT4KKzxVMDBGRD4gPHknPjs8QUNBPjs8TUlOPjtJR05PUkUKKzxVMDBGRj4gPHknPjs8UkVVPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDU5PgorPFUwMEREPiA8eSc+OzxBQ0E+OzxDQVA+O0lHTk9SRQorPFUwMTc4PiA8eSc+OzxSRVU+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDQzNj4KKzxVMDQ5Nz4gPHosPT47PFBDTD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDQxNj4KKzxVMDQ5Nj4gPHosPT47PFBDTD47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwNDNEPgorPFUwNEEzPiA8biw9Pjs8UENMPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwNDFEPgorPFUwNEEyPiA8biw9Pjs8UENMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTA0M0U+Cis8VTA0RTk+IDxvLT0+OzxQQ0w+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTA0MUU+Cis8VTA0RTg+IDxvLT0+OzxQQ0w+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDQ0Mz4KKzxVMDRBRj4gPHUnPT47PFBDTD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDQyMz4KKzxVMDRBRT4gPHUnPT47PFBDTD47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwNDREPgorPFUwNEQ5PiA8c3c9Pjs8UENMPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwNDJEPgorPFUwNEQ4PiA8c3c9Pjs8UENMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1lbmQKKworRU5EIExDX0NPTExBVEUKKworTENfVElNRQorCislIFR1cmttZW4gZGF5cyBhcmUKKyUgTW9uZGF5ICAgID0+IEJhxZ8gR8O8bgorJSBUdWVzZGF5ICAgPT4gWWHFnyBHw7xuCislIFdlZG5lc2RheSA9PiBIb8WfIEfDvG4KKyUgVGh1cnNkYXkgID0+IFNvZ2FwIEfDvG4KKyUgRnJpZGF5ICAgID0+IEFubmEgR8O8bgorJSBTYXR1cmRheSAgPT4gUnVoIEfDvG4KKyUgU3VuZGF5ICAgID0+IER5bsOnIEfDvG4KKworZGF5ICAgICAiPFUwMDQ0PjxVMDA3OT48VTAwNkU+PFUwMEU3PjxVMDAyMD48VTAwNDc+PFUwMEZDPjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA0Mj48VTAwNjE+PFUwMTVGPjxVMDAyMD48VTAwNDc+PFUwMEZDPjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA1OT48VTAwNjE+PFUwMTVGPjxVMDAyMD48VTAwNDc+PFUwMEZDPjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA0OD48VTAwNkY+PFUwMTVGPjxVMDAyMD48VTAwNDc+PFUwMEZDPjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNkY+PFUwMDY3PjxVMDA2MT48VTAwNzA+PFUwMDIwPjxVMDA0Nz48VTAwRkM+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDQxPjxVMDA2RT48VTAwNkU+PFUwMDYxPjxVMDAyMD48VTAwNDc+PFUwMEZDPjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA1Mj48VTAwNzU+PFUwMDY4PjxVMDAyMD48VTAwNDc+PFUwMEZDPjxVMDA2RT4iCithYmRheSAgICI8VTAwNDQ+PFUwMDc5PjxVMDA2RT4iOyI8VTAwNDI+PFUwMDYxPjxVMDE1Rj4iOy8KKyAgICAgICAgIjxVMDA1OT48VTAwNjE+PFUwMTVGPiI7IjxVMDA0OD48VTAwNkY+PFUwMTVGPiI7LworICAgICAgICAiPFUwMDUzPjxVMDA2Rj48VTAwNjc+IjsiPFUwMDQxPjxVMDA2RT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNTI+PFUwMDc1PjxVMDA2OD4iCisKKyUgVHVya21lbiBtb250aGVzIGFyZQorJSBKYW51YXJ5ICAgPT4gVMO8cmttZW5iYcWfeQorJSBGZWJydWFyeSAgPT4gQmHDvWRhaworJSBNYXJjaCAgICAgPT4gTm93cnV6CislIEFwcmlsICAgICA9PiBHdXJiYW5zb2x0YW4gRWplCislIE1heSAgICAgICA9PiBNYWd0eW1ndWx5CislIEp1bmUgICAgICA9PiBPZ3V6CislIEp1bHkgICAgICA9PiBHb3JrdXQKKyUgQXVndXN0ICAgID0+IEFscCBBcnNsYW4KKyUgU2VwdGVtYmVyID0+IFJ1aG5hbWEKKyUgT2N0b2JlciAgID0+IEdhcmHFn3N5emx5aworJSBOb3ZlbWJlciAgPT4gU2FuamFyCislIERlY2VtYmVyICA9PiBCaXRhcmFwbHlrCisKK21vbiAgICAgIjxVMDA1ND48VTAwRkM+PFUwMDcyPjxVMDA2Qj48VTAwNkQ+PFUwMDY1PjxVMDA2RT48VTAwNjI+PFUwMDYxPjxVMDE1Rj48VTAwNzk+IjsvCisgICAgICAgICI8VTAwNDI+PFUwMDYxPjxVMDBGRD48VTAwNjQ+PFUwMDYxPjxVMDA2Qj4iOy8KKyAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDc3PjxVMDA3Mj48VTAwNzU+PFUwMDdBPiI7LworICAgICAgICAiVTAwNDc+PFUwMDc1PjxVMDA3Mj48VTAwNjI+PFUwMDYxPjxVMDA2RT48VTAwNzM+PFUwMDZGPi8KKzxVMDA2Qz48VTAwNzQ+PFUwMDYxPjxVMDA2RT48VTAwMjA+PFUwMDQ1PjxVMDA2QT48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA2Nz48VTAwNzQ+PFUwMDc5PjxVMDA2RD48VTAwNjc+PFUwMDc1PjxVMDA2Qz48VTAwNzk+IjsvCisgICAgICAgICI8VTAwNEY+PFUwMDY3PjxVMDA3NT48VTAwN0E+IjsvCisgICAgICAgICI8VTAwNDc+PFUwMDZGPjxVMDA3Mj48VTAwNkI+PFUwMDc1PjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA0MT48VTAwNkM+PFUwMDcwPjxVMDAyMD48VTAwNDE+PFUwMDcyPjxVMDA3Mz48VTAwNkM+PFUwMDYxPjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA1Mj48VTAwNzU+PFUwMDY4PjxVMDA2RT48VTAwNjE+PFUwMDZEPjxVMDA2MT4iOy8KKyAgICAgICAgIjxVMDA0Nz48VTAwNjE+PFUwMDcyPjxVMDA2MT48VTAxNUY+PFUwMDczPjxVMDA3OT48VTAwN0E+PFUwMDZDPjxVMDA3OT48VTAwNkI+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA2RT48VTAwNkE+PFUwMDYxPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0Mj48VTAwNjk+PFUwMDc0PjxVMDA2MT48VTAwNzI+PFUwMDYxPjxVMDA3MD48VTAwNkM+PFUwMDc5PjxVMDA2Qj4iCithYm1vbiAgICI8VTAwNTQ+PFUwMEZDPjxVMDA3Mj4iOyI8VTAwNDI+PFUwMDYxPjxVMDBGRD4iOy8KKyAgICAgICAgIjxVMDA0RT48VTAwNkY+PFUwMDc3PiI7IjxVMDA0Nz48VTAwNzU+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNjc+IjsiPFUwMDRGPjxVMDA2Nz48VTAwNzU+IjsvCisgICAgICAgICI8VTAwNDc+PFUwMDZGPjxVMDA3Mj4iOyI8VTAwNDE+PFUwMDZDPjxVMDA3MD4iOy8KKyAgICAgICAgIjxVMDA1Mj48VTAwNzU+PFUwMDY4PiI7IjxVMDA0Nz48VTAwNjE+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNkU+IjsiPFUwMDQyPjxVMDA2OT48VTAwNzQ+IgorJQorJSBUdXJrbWVuIGRhdGUgYW5kIHRpbWUgZm9ybWF0CislIGRhdGUgIGRkLm1tLnl5eXkgJWQuJW0uJVkgJVQKKyUgdGltZSAgaGg6bW06c3MgKDI0IGhvdXIgLSBubyBhbS9wbSkKKyUKK2RfdF9mbXQgIjxVMDAyNT48VTAwNjQ+PFUwMDJFPjxVMDAyNT48VTAwNkQ+PFUwMDJFPjxVMDAyNT48VTAwNTk+LworPFUwMDIwPjxVMDAyNT48VTAwNTQ+IgorZF9mbXQgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjU+PFUwMDZEPjxVMDAyRT48VTAwMjU+PFUwMDU5PiIKK3RfZm10ICAgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICAgIiI7IiIKK3RfZm10X2FtcG0gIiIKK0VORCBMQ19USU1FCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgICAgIjxVMDAyRT4iICUgLgordGhvdXNhbmRzX3NlcCAgICAgICAgICAgICAiPFUwMDJDPiIgJSAsCitncm91cGluZyAgICAgICAgICAgICAgICAgIDM7MworRU5EIExDX05VTUVSSUMKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgICAgICAgIjxVMDA1ND48VTAwNEQ+PFUwMDREPjxVMDAyMD4iICAgICAgICAlIFRNTQorY3VycmVuY3lfc3ltYm9sICAgICAgICAgICAiPFUwMDREPjxVMDA0MT48VTAwNEU+PFUwMDQxPjxVMDA1ND4iICUgTUFOQVQKK21vbl9kZWNpbWFsX3BvaW50ICAgICAgICAgIjxVMDAyRT4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIC4KK21vbl90aG91c2FuZHNfc2VwICAgICAgICAgIjxVMDAyQz4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICwKK21vbl9ncm91cGluZyAgICAgICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgICAgICI8VTAwMkQ+IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAtCitpbnRfZnJhY19kaWdpdHMgICAgICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgICAgICAwCitwX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK25fY3NfcHJlY2VkZXMgICAgICAgICAgICAgMAorbl9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAgICAgMQorRU5EIExDX01PTkVUQVJZCisKK0xDX01FQVNVUkVNRU5UCittZWFzdXJlbWVudCAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTUVTU0FHRVMKKyUlJSUlJSUlCislIE5PVEU6CislIHRoZXJlIGlzIGEgcG9zc2libGUgY29uZmxpY3QgYmV0d2VlbiBFbmdsaXNoIGFuZCBUdXJrbWVuIGZvciBsZXR0ZXIgInkiCislICh1c2VkIGZvciAieWVzIiBpbiBFbmdsaXNoLCBidXQgY29ycmVzcG9uZGluZyB0byAibm8iIGluIFR1cmttZW4gKHdlbGwsCislICDDvSBhY3R1YWxseSkKKyUlJSUlJSUlCit5ZXNzdHIgICI8VTAwNjg+PFUwMDYxPjxVMDA3Nz48VTAwNjE+IiAlIGhhd2EKK25vc3RyICAgIjxVMDBGRD48VTAwNkY+PFUwMDZCPiIgICAgICAgICUgw71vaworeWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNjg+PFUwMDQ4Pi8KKzxVMDA1RD48VTAwMkU+PFUwMDJBPiIgICAgICAgICAgICAgICAgICUgW2hIXQorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwRkQ+PFUwMEREPi8KKzxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IiAgICUgW8O9w51uTl0KK0VORCBMQ19NRVNTQUdFUworCitMQ19QQVBFUgorJQorJSBBNCBQYXBlcgorJQoraGVpZ2h0IDI5Nword2lkdGggIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX05BTUUKKyUgVE9ETzogY29tcGxldGUgbWUKK25hbWVfZm10ICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCituYW1lX2dlbiAgIiIKK25hbWVfbXIgICAiIgorbmFtZV9tcnMgICIiCituYW1lX21pc3MgIiIKK25hbWVfbXMgICAiIgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworJSBUT0RPOiBmaXggbWUKKworcG9zdGFsX2ZtdCAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPjxVMDAyNT4vCis8VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT4vCis8VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorCitjb3VudHJ5X25hbWUgIjxVMDA1ND48VTAwRkM+PFUwMDcyPjxVMDA2Qj48VTAwNkQ+LworPFUwMDY1PjxVMDA2RT48VTAwNjk+PFUwMDczPjxVMDA3ND48VTAwNjE+PFUwMDZFPiIgJSBUw7xya21lbmlzdGFuCitjb3VudHJ5X3Bvc3QgIjxVMDA1ND48VTAwNEQ+IiAgICAgICAgICAgICAgICAgICAgICAlIFRNCitjb3VudHJ5X2NhciAgIjxVMDA1ND48VTAwNEQ+IiAgICAgICAgICAgICAgICAgICAgICAlIFRNCitjb3VudHJ5X251bSAgNzk1Citjb3VudHJ5X2FiMiAiPFUwMDU0PjxVMDA0RD4iICAgICAgICAgICAgICAgICAgICAgICAlIFRNCitjb3VudHJ5X2FiMyAiPFUwMDU0PjxVMDA0Qj48VTAwNEQ+IiAgICAgICAgICAgICAgICAlIFRLTQorbGFuZ19uYW1lICAgIjxVMDA1ND48VTAwRkM+PFUwMDcyPjxVMDA2Qj48VTAwNkQ+LworPFUwMDY1PjxVMDA2RT48VTAwRTc+PFUwMDY1PiIgICAgICAgICAgICAgICAgICAgICAgJSBUw7xya21lbsOnZQorbGFuZ190ZXJtICAgIjxVMDA3ND48VTAwNzU+PFUwMDZCPiIgICAgICAgICAgICAgICAgJSB0dWsKK2xhbmdfbGliICAgICI8VTAwNzQ+PFUwMDc1PjxVMDA2Qj4iICAgICAgICAgICAgICAgICUgdHVrCitsYW5nX2FiICAgICAiPFUwMDc0PjxVMDA2Qj4iICAgICAgICAgICAgICAgICAgICAgICAlIHRrCitFTkQgTENfQUREUkVTUworCitMQ19URUxFUEhPTkUKKyUgVE9ETzogY29tcGxldGUgbWUKK3RlbF9pbnRfZm10ICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Qz4iCitFTkQgTENfVEVMRVBIT05FCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy90bF9QSCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RsX1BICm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MGYyNzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy90bF9QSApAQCAtMCwwICsxLDE3NiBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIFRhZ2Fsb2cgTGFuZ3VhZ2UgTG9jYWxlIGZvciBQaGlsaXBwaW5lcworJSBTb3VyY2U6CislIENvbnRhY3Q6CislIEVtYWlsOgorJSBMYW5ndWFnZTogdGwKKyUgVGVycml0b3J5OiBQSAorJSBSZXZpc2lvbjogMC4yCislIERhdGU6IDIwMDEtMDEtMjgKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMsZHMKKyUgQ2hhcnNldDogSVNPLTg4NTktMQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgIlRhZ2Fsb2cgbGFuZ3VhZ2UgbG9jYWxlIGZvciBQaGlsaXBwaW5lcyIKK3NvdXJjZSAiUmVuZSBUb3JyZXMiCithZGRyZXNzICIiCitjb250YWN0ICJSZW5lIFRvcnJlcywgUGFibG8gU2FyYXR4YWdhIgorZW1haWwgInJndG9ycmVAcm9ja2V0bWFpbC5jb20sIHBhYmxvQG1hbmRyYWtlc29mdC5jb20iCit0ZWwgIiIKK2ZheCAiIgorbGFuZ3VhZ2UgIlRhZ2Fsb2ciCit0ZXJyaXRvcnkgIlBoaWxpcHBpbmVzIgorcmV2aXNpb24gIjAuMiIKK2RhdGUgIjIwMDEtMDEtMjgiCisKK2NhdGVnb3J5ICJ0bF9QSDoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgInRsX1BIOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAidGxfUEg6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgInRsX1BIOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICJ0bF9QSDoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAidGxfUEg6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICJ0bF9QSDoyMDAwIjtMQ19URUxFUEhPTkUKK2NhdGVnb3J5ICJ0bF9QSDoyMDAwIjtMQ19NRUFTVVJFTUVOVAorY2F0ZWdvcnkgInRsX1BIOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICJ0bF9QSDoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgInRsX1BIOjIwMDAiO0xDX01PTkVUQVJZCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiZW5fREsiCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCisKKyUlIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBuZyBvIHAgcSByIHMgdCB1IHYgdyB4IHkgegorCitjb2xsYXRpbmctc3ltYm9sICA8bi1nLXBoPgorY29sbGF0aW5nLWVsZW1lbnQgPE4tRz4gZnJvbSAiPFUwMDRFPjxVMDA0Nz4iCitjb2xsYXRpbmctZWxlbWVudCA8bi1nPiBmcm9tICI8VTAwNkU+PFUwMDY3PiIKK2NvbGxhdGluZy1lbGVtZW50IDxOLWc+IGZyb20gIjxVMDA0RT48VTAwNjc+IgorY29sbGF0aW5nLWVsZW1lbnQgPG4tRz4gZnJvbSAiPFUwMDZFPjxVMDA0Nz4iCisKK2NvbGxhdGluZy1zeW1ib2wgPENBUC1NSU4+Citjb2xsYXRpbmctc3ltYm9sIDxNSU4tQ0FQPgorCityZW9yZGVyLWFmdGVyIDxNSU4+Cis8TUlOLUNBUD4KK3Jlb3JkZXItYWZ0ZXIgPENBUD4KKzxDQVAtTUlOPgorCityZW9yZGVyLWFmdGVyIDxuPgorPG4tZy1waD4KKworcmVvcmRlci1hZnRlciA8VTAwNkU+Cis8bi1nPgk8bi1nLXBoPjs8UENUPjs8TUlOPjtJR05PUkUKKzxuLUc+CTxuLWctcGg+OzxQQ1Q+OzxNSU4tQ0FQPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDRFPgorPE4tRz4JPG4tZy1waD47PFBDVD47PENBUD47SUdOT1JFCis8Ti1nPgk8bi1nLXBoPjs8UENUPjs8Q0FQLU1JTj47SUdOT1JFCisKK3Jlb3JkZXItZW5kCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAiPFUwMDUwPjxVMDA0OD48VTAwNTA+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICI8VTAwNTA+PFUwMDY4PjxVMDA1MD4iCittb25fZGVjaW1hbF9wb2ludCAgICAgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgICAwCituX2NzX3ByZWNlZGVzICAgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgICAxCitwX3NpZ25fcG9zbiAgICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgICAxCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworY29weSAiZW5fVVMiCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICI8VTAwNEM+PFUwMDY5PjxVMDA2RT4iOyI8VTAwNEM+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA0RD48VTAwNjk+PFUwMDc5PiI7LworICAgICAgICAiPFUwMDQ4PjxVMDA3NT48VTAwNzc+IjsiPFUwMDQyPjxVMDA2OT48VTAwNzk+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA2Mj4iCitkYXkgICAgICI8VTAwNEM+PFUwMDY5PjxVMDA2RT48VTAwNjc+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA0Qz48VTAwNzU+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Mj48VTAwNzQ+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjk+PFUwMDc5PjxVMDA2NT48VTAwNzI+PFUwMDZCPjxVMDA2Rj48VTAwNkM+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA0OD48VTAwNzU+PFUwMDc3PjxVMDA2NT48VTAwNjI+PFUwMDY1PjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA0Mj48VTAwNjk+PFUwMDc5PjxVMDA2NT48VTAwNzI+PFUwMDZFPjxVMDA2NT48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA2Mj48VTAwNjE+PFUwMDY0PjxVMDA2Rj4iCithYm1vbiAgICI8VTAwNDU+PFUwMDZFPjxVMDA2NT4iOyI8VTAwNTA+PFUwMDY1PjxVMDA2Mj4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA0MT48VTAwNjI+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+IjsiPFUwMDQ4PjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNDg+PFUwMDc1PjxVMDA2Qz4iOyI8VTAwNDE+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDcwPiI7IjxVMDA0Rj48VTAwNkI+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNjI+IjsiPFUwMDQ0PjxVMDA2OT48VTAwNzM+IgorbW9uICAgICAiPFUwMDQ1PjxVMDA2RT48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA1MD48VTAwNjU+PFUwMDYyPjxVMDA3Mj48VTAwNjU+PFUwMDcyPjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPjxVMDA3Mz48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNDE+PFUwMDYyPjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+PFUwMDZGPiI7LworICAgICAgICAiPFUwMDQ4PjxVMDA3NT48VTAwNkU+PFUwMDc5PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA0OD48VTAwNzU+PFUwMDZDPjxVMDA3OT48VTAwNkY+IjsvCisgICAgICAgICI8VTAwNDE+PFUwMDY3PjxVMDA2Rj48VTAwNzM+PFUwMDc0PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjk+PFUwMDc5PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNEY+PFUwMDZCPjxVMDA3ND48VTAwNzU+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNEU+PFUwMDZGPjxVMDA2Mj48VTAwNjk+PFUwMDc5PjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA3Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDY5PjxVMDA3Mz48VTAwNzk+PFUwMDY1PjxVMDA2RD48VTAwNjI+PFUwMDcyPjxVMDA2NT4iCislCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCitkX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA3OT4iCit0X2ZtdCAgICAgICAiPFUwMDI1PjxVMDA3Mj4iCithbV9wbSAgICAgICAiPFUwMDQxPjxVMDA0RD4iOyI8VTAwNTA+PFUwMDREPiIKK3RfZm10X2FtcG0gICI8VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDcwPiIKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCitjb3B5ICJlbl9VUyIKK0VORCBMQ19NRVNTQUdFUworCitMQ19QQVBFUgoraGVpZ2h0ICAgICAgMjk3Cit3aWR0aCAgICAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19NRUFTVVJFTUVOVAorbWVhc3VyZW1lbnQgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKKyUgRklYTUUKK2NvcHkgImVuX1VTIgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworJSBGSVhNRQorcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjg+LworPFUwMDIwPjxVMDAyNT48VTAwNzM+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDdBPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKKworY291bnRyeV9hYjIgIjxVMDA1MD48VTAwNDg+IgorY291bnRyeV9hYjMgIjxVMDA1MD48VTAwNDg+PFUwMDRDPiIKK2NvdW50cnlfbnVtIDYwOAorRU5EIExDX0FERFJFU1MKKworTENfVEVMRVBIT05FCislIEZJWE1FCitjb3B5ICJlbl9VUyIKK0VORCBMQ19URUxFUEhPTkUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RuX1pBIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdG5fWkEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcxN2QxZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RuX1pBCkBAIC0wLDAgKzEsMjkxIEBACitlc2NhcGVfY2hhciAgLworY29tbWVudF9jaGFyICAlCisKKyUgQ2hhcnNldDogVVRGLTgKKworJSBDaGFuZ2VMb2cKKyUgMC40ICgyMDA1LTEwLTEzKToKKyUgICAgIDIwMDUtMTAtMTIgRHdheW5lIEJhaWxleSA8ZHdheW5lQHRyYW5zbGF0ZS5vcmcuemE+CislICAgICAgIC0gQWRkZWQgJ0NoYXJzZXQ6IFVURi04JyBpbmZvcm1hdGlvbgorJSAgICAgICAtIFVwZGF0ZSBjb250YWN0IGluZm9ybWF0aW9uCislICAgICAgIC0gQWxsaWduIHNwZWxsaW5ncyBvZiBtb250aCBhbmQgd2Vla2RheSBuYW1lcyB3aXRoIERlcHQuIG9mCislICAgICAgICAgQXJ0IGFuZCBDdWx0dXJlJ3M6IE11bHRpbGluZ3VhbCBNYXRoZW1hdGljcyBEaWN0aW9uYXJ5CislIDAuMyAoMjAwNS0wNi0yMSk6CislICAgICAyMDA1LTA2LTIxIER3YXluZSBCYWlsZXkgPGR3YXluZUB0cmFuc2xhdGUub3JnLnphPgorJSAgICAgICAtIENvcnJlY3RlZCBzaG9ydCBtb250aCBuYW1lcyB0byBjb3JyZXNwb25kIHRvIGxvbmcKKyUgICAgICAgICBtb250aCBuYW1lcyAobWlzc2VkIGluIDIwMDQtMDItMjcgY29ycmVjdGlvbnMpCislIDAuMiAoMjAwNC0xMS0wOCk6CislICAgICAyMDA0LTExLTA4IER3YXluZSBCYWlsZXkgPGR3YXluZUB0cmFuc2xhdGUub3JnLnphPgorJSAgICAgICAtIENoYW5nZWQgYWxsIGNvbnRhY3QgaW5mb3JtYXRpb24KKyUgICAgICAgLSBkX3RfZm10LCBkYXRlX2ZtdCBjaGFuZ2VkICVkIHRvICUtZQorJSAgICAgICAtIFJlbW92ZSAuKiBmcm9tIHllcy9ub2V4cHIKKyUgICAgICAgLSBDb252ZXJ0IGFsbCB0byA8VU5OTk4+IHN5bnRheAorJSAgICAgMjAwNC0wMy0zMCBEd2F5bmUgQmFpbGV5IDxkd2F5bmVAdHJhbnNsYXRlLm9yZy56YT4KKyUgICAgICAgLSBBZGRlZCBjb3VudHJ5X2FiMi8zLCBjb3VudHJ5X251bQorJSAgICAgMjAwNC0wMi0yNyBEd2F5bmUgQmFpbGV5IDxkd2F5bmVAdHJhbnNsYXRlLm9yZy56YT4KKyUgICAgICAgLSBDb3JyZWN0IGNhcGF0aWxpc2F0aW9uIG9mIGxhbmdfbmFtZQorJSAgICAgICAtIFZhbGlkYXRlZCBhbmQgY29ycmVjdGVkIGJhZCBtb250aCBuYW1lcworJSAwLjEgKDIwMDQtMDItMjQpOgorJQkgIC0gSW5pdGlhbCBUc3dhbmEgbG9jYWxlIGZvciBTb3V0aCBBZnJpY2EKKyUJICAgIGJ5IFp1emEgU29mdHdhcmUgRm91bmRhdGlvbgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiVHN3YW5hIGxvY2FsZSBmb3IgU291dGggQWZyaWNhIgorc291cmNlICAgICAiWnV6YSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChUcmFuc2xhdGUub3JnLnphKSIKK2FkZHJlc3MgICAgIlBPIEJveCAyODM2NCwgU3VubnlzaWRlLCAwMTMyLCBTb3V0aCBBZnJpY2EiCitjb250YWN0ICAgICJEd2F5bmUgQmFpbGV5IgorZW1haWwgICAgICAiZHdheW5lQHRyYW5zbGF0ZS5vcmcuemEiCit0ZWwgICAgICAgICIrMjcgMTIgNDYwIDEwOTUiCitmYXggICAgICAgICIrMjcgMTIgNDYwIDEwOTUiCitsYW5ndWFnZSAgICJUc3dhbmEiCit0ZXJyaXRvcnkgICJTb3V0aCBBZnJpY2EiCityZXZpc2lvbiAgICIwLjQiCitkYXRlICAgICAgICIyMDA1LTEwLTEzIgorJQorY2F0ZWdvcnkgICJ0bl9aQToyMDA0IjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJ0bl9aQToyMDA0IjtMQ19DVFlQRQorY2F0ZWdvcnkgICJ0bl9aQToyMDA0IjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgInRuX1pBOjIwMDQiO0xDX1RJTUUKK2NhdGVnb3J5ICAidG5fWkE6MjAwNCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJ0bl9aQToyMDA0IjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJ0bl9aQToyMDA0IjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJ0bl9aQToyMDA0IjtMQ19QQVBFUgorY2F0ZWdvcnkgICJ0bl9aQToyMDA0IjtMQ19OQU1FCitjYXRlZ29yeSAgInRuX1pBOjIwMDQiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAidG5fWkE6MjAwNCI7TENfVEVMRVBIT05FCitjYXRlZ29yeSAgInRuX1pBOjIwMDQiO0xDX01FQVNVUkVNRU5UCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorJSBVc2UgdGhlIGNoYXJhY3RlcnMgZGVzY3JpYmVkIGluIHRoZSBjaGFybWFwIGZpbGUgImkxOG4udGd6IgorY29weSAiaTE4biIKKwordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCislIENvcHkgdGhlIHRlbXBsYXRlIGZyb20gSVNPL0lFQyAxNDY1MSBpLmUuCislIHVzZSB0aGUgcnVsZXMgdGhlcmUgd2hlbiBtYWtpbmcgb3JkZXJlZCBsaXN0cyBvZiB3b3Jkcy4KK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKK2NvcHkgImVuX1pBIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgImVuX1pBIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorCislIGFiZGF5IC0gVGhlIGFiYnJldmlhdGlvbnMgZm9yIHRoZSB3ZWVrIGRheXM6CislIC0gVHNoLCBNb3MsIEJlZCwgUmFyLCBOZSwgVGxoLCBNYXQKK2FiZGF5ICAgICAgICI8VTAwNTQ+PFUwMDczPjxVMDA2OD4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDZGPjxVMDA3Mz4iOy8KKyAgICAgICAgICAgICI8VTAwNDI+PFUwMDY1PjxVMDA2ND4iOy8KKyAgICAgICAgICAgICI8VTAwNTI+PFUwMDYxPjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNEU+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA1ND48VTAwNkM+PFUwMDY4PiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDc0PiIKKworJSBkYXkgLSBUaGUgZnVsbCBuYW1lcyBvZiB0aGUgd2VlayBkYXlzOgorJSAtIGxhVHNoaXBpLCBNb3N1cG9sb2dvLCBMYWJvYmVkaSwgTGFib3Jhcm8sIExhYm9uZSwgTGFib3RsaGFubywgTGFtYXRsaGF0c28KK2RheSAgICAgICAgICI8VTAwNkM+PFUwMDYxPjxVMDA1ND48VTAwNzM+PFUwMDY4PjxVMDA2OT48VTAwNzA+PFUwMDY5PiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNkY+PFUwMDczPjxVMDA3NT48VTAwNzA+PFUwMDZGPjxVMDA2Qz48VTAwNkY+PFUwMDY3PjxVMDA2Rj4iOy8KKyAgICAgICAgICAgICI8VTAwNEM+PFUwMDYxPjxVMDA2Mj48VTAwNkY+PFUwMDYyPjxVMDA2NT48VTAwNjQ+PFUwMDY5PiI7LworICAgICAgICAgICAgIjxVMDA0Qz48VTAwNjE+PFUwMDYyPjxVMDA2Rj48VTAwNzI+PFUwMDYxPjxVMDA3Mj48VTAwNkY+IjsvCisgICAgICAgICAgICAiPFUwMDRDPjxVMDA2MT48VTAwNjI+PFUwMDZGPjxVMDA2RT48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDRDPjxVMDA2MT48VTAwNjI+PFUwMDZGPjxVMDA3ND48VTAwNkM+PFUwMDY4PjxVMDA2MT48VTAwNkU+PFUwMDZGPiI7LworICAgICAgICAgICAgIjxVMDA0Qz48VTAwNjE+PFUwMDZEPjxVMDA2MT48VTAwNzQ+PFUwMDZDPjxVMDA2OD48VTAwNjE+PFUwMDc0PjxVMDA3Mz48VTAwNkY+IgorCislIGFibW9uIC0gVGhlIGFiYnJldmlhdGlvbnMgZm9yIHRoZSBtb250aHMKKyUgLSBGZXIsIFRsaCwgTW9wLCBNb3IsIE1vdCwgU2VlLCBQaHUsIFBoYSwgTHdlLCBEaXAsIE5ndywgU2VkCithYm1vbiAgICAgICAiPFUwMDQ2PjxVMDA2NT48VTAwNzI+IjsiPFUwMDU0PjxVMDA2Qz48VTAwNjg+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2Rj48VTAwNzA+IjsiPFUwMDREPjxVMDA2Rj48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2Rj48VTAwNzQ+IjsiPFUwMDUzPjxVMDA2NT48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDUwPjxVMDA2OD48VTAwNzU+IjsiPFUwMDUwPjxVMDA2OD48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDRDPjxVMDA3Nz48VTAwNjU+IjsiPFUwMDQ0PjxVMDA2OT48VTAwNzA+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2Nz48VTAwNzc+IjsiPFUwMDUzPjxVMDA2NT48VTAwNjQ+IgorCislIG1vbiAtIFRoZSBmdWxsIG5hbWVzIG9mIHRoZSBtb250aHMgLQorJSAtIEZlcmlrZ29uZywgVGxoYWtvbGUsIE1vcGl0bHdlLCBNb3JhbmFuZywgTW90c2hlZ2Fub25nLCBTZWV0ZWJvc2lnbworJSAgIFBodWt3aSwgUGhhdHdlLCBMd2V0c2UsIERpcGhhbGFuZSwgTmd3YW5hdHNlbGUsIFNlZGltb250aG9sZQorbW9uICAgICAgICAgIjxVMDA0Nj48VTAwNjU+PFUwMDcyPjxVMDA2OT48VTAwNkI+PFUwMDY3PjxVMDA2Rj48VTAwNkU+PFUwMDY3PiI7LworICAgICAgICAgICAgIjxVMDA1ND48VTAwNkM+PFUwMDY4PjxVMDA2MT48VTAwNkI+PFUwMDZGPjxVMDA2Qz48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2Rj48VTAwNzA+PFUwMDY5PjxVMDA3ND48VTAwNkM+PFUwMDc3PjxVMDA2NT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDZGPjxVMDA3Mj48VTAwNjE+PFUwMDZFPjxVMDA2MT48VTAwNkU+PFUwMDY3PiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNkY+PFUwMDc0PjxVMDA3Mz48VTAwNjg+PFUwMDY1PjxVMDA2Nz48VTAwNjE+PFUwMDZFPjxVMDA2Rj48VTAwNkU+PFUwMDY3PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDY1PjxVMDA3ND48VTAwNjU+PFUwMDYyPjxVMDA2Rj48VTAwNzM+PFUwMDY5PjxVMDA2Nz48VTAwNkY+IjsvCisgICAgICAgICAgICAiPFUwMDUwPjxVMDA2OD48VTAwNzU+PFUwMDZCPjxVMDA3Nz48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDUwPjxVMDA2OD48VTAwNjE+PFUwMDc0PjxVMDA3Nz48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDRDPjxVMDA3Nz48VTAwNjU+PFUwMDc0PjxVMDA3Mz48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDQ0PjxVMDA2OT48VTAwNzA+PFUwMDY4PjxVMDA2MT48VTAwNkM+PFUwMDYxPjxVMDA2RT48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2Nz48VTAwNzc+PFUwMDYxPjxVMDA2RT48VTAwNjE+PFUwMDc0PjxVMDA3Mz48VTAwNjU+PFUwMDZDPjxVMDA2NT4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA2ND48VTAwNjk+PFUwMDZEPjxVMDA2Rj48VTAwNkU+PFUwMDc0PjxVMDA2OD48VTAwNkY+PFUwMDZDPjxVMDA2NT4iCisKKyUgQWJyZXZpYXRlZCBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uIHRvIGJlIHJlZmVyZW5jZWQgYnkgdGhlICIlYyIgZmllbGQgZGVzY3JpcHRvciAtCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDAyRD48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPi8KKzxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorJSAiJWEiIChzaG9ydCB3ZWVrZGF5IG5hbWUpLAorJSAiJS1lIiAoZGF5IG9mIG1vbnRoIGFzIGEgZGVjaW1hbCBudW1iZXIpLAorJSAiJWIiIChzaG9ydCBtb250aCBuYW1lKSwKKyUgIiVZIiAoeWVhciB3aXRoIGNlbnR1cnkgYXMgYSBkZWNpbWFsIG51bWJlciksCislICIlVCIgKDI0LWhvdXIgY2xvY2sgdGltZSBpbiBmb3JtYXQgSEg6TU06U1MpLAorJSAiJVoiIChUaW1lIHpvbmUgbmFtZSkKKworJSBEYXRlIHJlcHJlc2VudGF0aW9uIHRvIGJlIHJlZmVyZW5jZWQgYnkgdGhlICIleCIgZmllbGQgZGVzY3JpcHRvciAtCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDU5PiIKKyUgIiVkLyVtLyVZIiwgZGF5L21vbnRoL3llYXIgYXMgZGVjaW1hbCBudW1iZXJzICgwMS8wMS8yMDAwKS4KKworJSBUaW1lIHJlcHJlc2VudGF0aW9uIHRvIGJlIHJlZmVyZW5jZWQgYnkgdGhlICIlWCIgZmllbGQgZGVzY3JpcHRvciAtCit0X2ZtdCAgICAgICAiPFUwMDI1PjxVMDA1ND4iCislICIlVCIgKDI0LWhvdXIgY2xvY2sgdGltZSBpbiBmb3JtYXQgSEg6TU06U1MpCisKKyUgRGVmaW5lIHJlcHJlc2VudGF0aW9uIG9mIGFudGUgbWVyaWRpZW0gYW5kIHBvc3QgbWVyaWRpZW0gc3RyaW5ncyAtCithbV9wbSAgICAgICAiIjsiIgorJSBUaGUgIiIgbWVhbiAnZGVmYXVsdCB0byAiQU0iIGFuZCAiUE0iLgorCislIERlZmluZSB0aW1lIHJlcHJlc2VudGF0aW9uIGluIDEyLWhvdXIgZm9ybWF0IHdpdGggImFtX3BtIiwgdG8gYmUgcmVmZXJlbmNlZCBieSB0aGUgIiVyIgordF9mbXRfYW1wbSAgIiIKKyUgVGhlICIiIG1lYW5zIHRoYXQgdGhpcyBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZC4KKworJSBEYXRlIHJlcHJlc2VudGF0aW9uIG5vdCBkZXNjcmliZWQgaW4gSVNPL0lFQyAxNDY1Mi4gQ29tZXMgb3V0IGFzIC0KKyUgIiVhICViICUtZSAlSDolTTolUyAlWiAlWSIgd2hpY2ggaXMgZGVmYXVsdCAiZGF0ZSIgY29tbWFuZCBvdXRwdXQKK2RhdGVfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDJEPjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCislCislICVhIC0gYWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lLAorJSAlYiAtIGFicmV2aWF0ZWQgbW9udGggbmFtZSwKKyUgJS1lIC0gZGF5IG9mIG1vbnRoIGFzIGEgZGVjaW1hbCBudW1iZXIgd2l0aCBsZWFkaW5nIHNwYWNlICgxIHRvIDMxKSwKKyUgJUggLSBob3VyICgyNC1ob3VyIGNsb2NrKSBhcyBhIGRlY2ltYWwgbnVtYmVyICgwMCB0byAyMyksCislICVNIC0gbWludXRlIGFzIGEgZGVjaW1hbCBudW1iZXIgKDAwIHRvIDU5KSwKKyUgJVMgLSBzZWNvbmRzIGFzIGEgZGVjaW1hbCBudW1iZXIgKDAwIHRvIDU5KSwKKyUgJVogLSB0aW1lLXpvbmUgbmFtZSwKKyUgJVkgLSB5ZWFyIHdpdGggY2VudHVyeSBhcyBhIGRlY2ltYWwgbnVtYmVyLGUuZy4gMjAwMS4KKworRU5EIExDX1RJTUUKKworTENfTUVTU0FHRVMKKyUgRklYTUU6IENoZWNrIGJvdGggb2YgdGhlc2UKKyUgVGhlIGFmZmlybWF0aXZlIHJlc3BvbnNlIC0gZWUKKyUgIl5beVllRV0iCit5ZXNleHByICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNzk+PFUwMDU5PjxVMDA2NT48VTAwNDU+PFUwMDVEPiIKKworJSBUaGUgbmVnYXRpdmUgcmVzcG9uc2UgLSBueWFhCislICJeW25OXSIKK25vZXhwciAgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19QQVBFUgorY29weSAiZW5fWkEiCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCitjb3B5ICJlbl9aQSIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgImVuX1pBIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKKyUgRm9ybWF0IGZvciBhZGRyZXNzaW5nIGEgcGVyc29uLgorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorJSAiJWQldCVnJXQlbSV0JWYiCislICJTYWx1dGF0aW9uIiwKKyUgIkVtcHR5IHN0cmluZywgb3IgPFNwYWNlPiIsCislICJGaXJzdCBnaXZlbiBuYW1lIiwKKyUgIkVtcHR5IHN0cmluZywgb3IgPFNwYWNlPiIsCislICJNaWRkbGUgbmFtZXMiLAorJSAiRW1wdHkgc3RyaW5nLCBvciA8U3BhY2U+IiwKKyUgIkNsYW4gbmFtZXMiCisKKyUgRklYTUUgLSBkZWZpbmUgYWxsIHRoZSBmb2xsb3dpbmcgbmFtZV8qCislIEdlbmVyYWwgc2FsdXRhdGlvbiBmb3IgYW55IHNleAorJSBuYW1lX2dlbiAgICAiIgorCislIFNhbHV0YXRpb24gZm9yIHVubWFycmllZCBmZW1hbGVzIC0gIiIKKyUgbmFtZV9taXNzICAgIiIKKworJSBTYWx1dGF0aW9uIGZvciBtYWxlcyAtICIiCislIG5hbWVfbXIgICAgICIiCisKKyUgU2FsdXRhdGlvbiBmb3IgbWFycmllZCBmZW1hbGVzIC0gIiIKKyUgbmFtZV9tcnMgICAgIiIKKworJSBTYWx1dGF0aW9uIHZhbGlkIGZvciBhbGwgZmVtYWxlcyAtICIiIChubyB0ZXJtKQorJSBuYW1lX21zICAgICAiIgorCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCislIENvdW50cnkgbmFtZSBpbiBUc3dhbmEgLSAiQWZvcmlrYSBCb3J3YSIKK2NvdW50cnlfbmFtZSAiPFUwMDQxPjxVMDA2Nj48VTAwNkY+PFUwMDcyPjxVMDA2OT48VTAwNkI+PFUwMDYxPjxVMDAyMD4vCis8VTAwNDI+PFUwMDZGPjxVMDA3Mj48VTAwNzc+PFUwMDYxPiIKKworJSBBYmJyZXZpYXRlZCBjb3VudHJ5IHBvc3RhbCBuYW1lIC0gIlpBIgorY291bnRyeV9wb3N0ICI8VTAwNUE+PFUwMDQxPiIKKworJSBVTiBHZW5ldmUgMTk0OTo2OCBEaXN0aW5ndWlzaGluZyBzaWducyBvZiB2ZWhpY2xlcyBpbiBpbnRlcm5hdGlvbmFsIHRyYWZmaWMKKyUgaHR0cDovL3d3dy51bmVjZS5vcmcvdHJhbnMvY29udmVudG4vZGlzdGluZy1zaWducy01LTIwMDEucGRmCislICJaQSIKK2NvdW50cnlfY2FyICAgIjxVMDA1QT48VTAwNDE+IgorCislIEZJWE1FIGRlZmluZSB0aGUgZm9sbG93aW5nIGNvcnJlY3RseQorJSBjb3VudHJ5X2lzYm4gIiIKKworJSBMYW5ndWFnZSBuYW1lIGluIFRzd2FuYSAtICJTZXRzd2FuYSIKK2xhbmdfbmFtZSAiPFUwMDUzPjxVMDA2NT48VTAwNzQ+PFUwMDczPjxVMDA3Nz48VTAwNjE+PFUwMDZFPjxVMDA2MT4iCisKKyUgSVNPIDYzOSB0d28gYW5kIHRocmVlIGxldHRlciBsYW5ndWFnZSBuYW1lcworJSBzZWUgaHR0cDovL3d3dy5sb2MuZ292L3N0YW5kYXJkcy9pc282MzktMi9lbmdsYW5nbi5odG1sCislICJ0biIsICJ0c24iCitsYW5nX2FiICAgIjxVMDA3ND48VTAwNkU+IgorbGFuZ190ZXJtICI8VTAwNzQ+PFUwMDczPjxVMDA2RT4iCisKKyUgUmVwcmVzZW50YXRpb24gb2YgcG9zdGFsIGFkZHJlc3NlcyAobWludXMgdGhlIGFkZHJlc3NlZSdzIG5hbWUpIGluIFNvdXRoCislIEFmcmljYS4gKElnbm9yZWQgZm9yIG5vdykKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCislICIlZiVOJWElTiVkJU4lYiVOJXMgJWggJWUgJXIlTiV6ICVUJU4lYyVOIiwgd2hpY2ggZ2l2ZXMgLQorJSAiZmlybSBuYW1lIiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgIkMvTyBhZGRyZXNzIiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgImRlcGFydG1lbnQgbmFtZSIsCislICJCdWlsZGluZyBuYW1lIiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgInN0cmVldCBvciBibG9jayBuYW1lIiwKKyUgInNwYWNlIiwKKyUgImhvdXNlIG51bWJlciBvciBkZXNpZ25hdGlvbiIsCislICJzcGFjZSIsCislICJmbG9vciBudW1iZXIiLAorJSAic3BhY2UiLAorJSAicm9vbSBudW1iZXIsIGRvb3IgZGVzaWduYXRpb24iLAorJSAiZW5kIG9mIGxpbmUiLAorJSAicG9zdGFsIGNvZGUiLAorJSAic3BhY2UiLAorJSAidG93biwgY2l0eSIsCislICJlbmQgb2YgbGluZSIsCislICJjb3VudHJ5IGRlc2lnbmF0aW9uIGZvciB0aGUgPGNvdW50cnlfcG9zdD4ga2V5d29yZCIsCislICJlbmQgb2YgbGluZQorJQorCislIElTTyAzMTY2IGNvdW50cnkgbnVtYmVyIGFuZCAyIGFuZCAzIGxldHRlciBhYnJldmlhdGlvbnMKKyUgaHR0cDovL3d3dy51bmljb2RlLm9yZy9vbmxpbmVkYXQvY291bnRyaWVzLmh0bWwKKyUgIlpBIiwgIlpBRiIKK2NvdW50cnlfbnVtICAgNzEwCitjb3VudHJ5X2FiMiAgICI8VTAwNUE+PFUwMDQxPiIKK2NvdW50cnlfYWIzICAgIjxVMDA1QT48VTAwNDE+PFUwMDQ2PiIKKworRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RyX0NZIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdHJfQ1kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM2MzgyOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RyX0NZCkBAIC0wLDAgKzEsMTE0IEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgVHVya2lzaCBMYW5ndWFnZSBMb2NhbGUgZm9yIEN5cHJ1cworJSBMYW5ndWFnZTogdHIKKyUgVGVycml0b3J5OiBDWQorJSBSZXZpc2lvbjogNC40CislIEFwcGxpY2F0aW9uOiBnZW5lcmFsCislIFVzZXJzOiBnZW5lcmFsCislIENoYXJzZXQ6IElTTy04ODU5LTkKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworJSBBZGFwdGVkIGZyb20gdHJfVFIgYnkgUmVjYWkgT2t0YcWfIDxyb2t0YXNAb211LmVkdS50cj4sIDIwMDQKKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlR1cmtpc2ggbGFuZ3VhZ2UgbG9jYWxlIGZvciBDeXBydXMiCitzb3VyY2UgICAgICJGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4iCithZGRyZXNzICAgICI1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIlR1cmtpc2giCit0ZXJyaXRvcnkgICJDeXBydXMiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDA0LTEwLTIzIgorYXVkaWVuY2UgICAiIgorYXBwbGljYXRpb24gIiIKK2FiYnJldmlhdGlvbiAiIgorJQorY2F0ZWdvcnkgICJ0cl9DWToyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJ0cl9DWToyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJ0cl9DWToyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgInRyX0NZOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAidHJfQ1k6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJ0cl9DWToyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJ0cl9DWToyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJ0cl9DWToyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJ0cl9DWToyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgInRyX0NZOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAidHJfQ1k6MjAwMCI7TENfVEVMRVBIT05FCitjYXRlZ29yeSAgInRyX0NZOjIwMDAiO0xDX01FQVNVUkVNRU5UCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DT0xMQVRFCitjb3B5ICJ0cl9UUiIKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJ0cl9UUiIKK0VORCBMQ19DVFlQRQorCitMQ19NRVNTQUdFUworY29weSAidHJfVFIiCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2NvcHkgInRyX1RSIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgInRyX1RSIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorY29weSAidHJfVFIiCitFTkQgTENfVElNRQorCitMQ19QQVBFUgorY29weSAidHJfVFIiCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCitjb3B5ICJ0cl9UUiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgInRyX1RSIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKK2NvcHkgInRyX1RSIgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKKyUgTm9ydGhlcm4gQ3lwcnVzCitjb3VudHJ5X25hbWUJIjxVMDA0RT48VTAwNkY+PFUwMDcyPjxVMDA3ND48VTAwNjg+PFUwMDY1PjxVMDA3Mj48VTAwNkU+LworPFUwMDIwPjxVMDA0Mz48VTAwNzk+PFUwMDcwPjxVMDA3Mj48VTAwNzU+PFUwMDczPiIKKyUgVFIKK2NvdW50cnlfcG9zdAkiPFUwMDU0PjxVMDA1Mj4iCislIFRSCitjb3VudHJ5X2NhcgkiPFUwMDU0PjxVMDA1Mj4iCitjb3VudHJ5X2lzYm4JOTc1Citjb3VudHJ5X251bQk3OTIKKyUgVFIKK2NvdW50cnlfYWIyCSI8VTAwNTQ+PFUwMDUyPiIKKyUgVFVSCitjb3VudHJ5X2FiMwkiPFUwMDU0PjxVMDA1NT48VTAwNTI+IgorJSBUdXJraXNoCitsYW5nX25hbWUJIjxVMDA1ND48VTAwNzU+PFUwMDcyPjxVMDA2Qj48VTAwNjk+PFUwMDczPjxVMDA2OD4iCislIHRyCitsYW5nX3Rlcm0JIjxVMDA3ND48VTAwNzU+PFUwMDcyPiIKKyUgdHIKK2xhbmdfbGliCSI8VTAwNzQ+PFUwMDc1PjxVMDA3Mj4iCisldHIKK2xhbmdfYWIJCSI8VTAwNzQ+PFUwMDcyPiIKK0VORCBMQ19BRERSRVNTCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy90cl9UUiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RyX1RSCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNDRmYjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy90cl9UUgpAQCAtMCwwICsxLDM2MDAgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBUdXJraXNoIExhbmd1YWdlIExvY2FsZSBmb3IgVHVya2V5CislIFNvdXJjZTogUkFQCislIEFkZHJlc3M6IFNhbmt0IEpvLy9yZ2VucyBBbGxlIDgKKyUgICAgREstMTYxNSBLby8vYmVuaGF2biBWLCBEYW5tYXJrCislIENvbnRhY3Q6IEtlbGQgU2ltb25zZW4KKyUgRW1haWw6IEtlbGQuU2ltb25zZW5AZGt1dWcuZGsKKyUgVGVsOiArNDUgLSAzMTIyNjU0MworJSBGYXg6ICs0NSAtIDMzMjU2NTQzCislIExhbmd1YWdlOiB0cgorJSBUZXJyaXRvcnk6IFRSCislIFJldmlzaW9uOiA0LjQKKyUgRGF0ZTogMTk5Ny0wMy0xOAorJSBBcHBsaWNhdGlvbjogZ2VuZXJhbAorJSBVc2VyczogZ2VuZXJhbAorJSBSZXBlcnRvaXJlbWFwOiBtbmVtb25pYy5kcworJSBDaGFyc2V0OiBJU08tODg1OS05CislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKKyUgQ29ycmVjdGlvbnMgYnk6CislICAgMTk5OC0wMS0xMVQxNTo1NDozOQorJSAgIE9udXIgVG9sZ2EgU2VoaXRvZ2x1IDxvbnVyQGNlbmcubWV0dS5lZHUudHI+LAorJSAgIERlcHQuIG9mIENvbXAuIEVuZy4gTUVUVS9BbmthcmEgICBUdXJrZXkKKyUgICAyMDA0LTA1LTI5VDE1OjEzCislICAgRGVuaXogQWtrdXMgS2FuY2EgPGRlbml6QGFyYXlhbi5jb20+CislICAgMjAwNC0xMC0zMFQxMDoyODozNQorJSAgIE5pbGc8VTAwRkM+biBCZWxtYSBCdWc8VTAwRkM+bmVyIDxuaWxndW5AYmVsZ2VsZXIub3JnPgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiVHVya2lzaCBsb2NhbGUgZm9yIFR1cmtleSIKK3NvdXJjZSAgICAgIlJBUCIKK2FkZHJlc3MgICAgIlNhbmt0IEo8VTAwRjg+cmdlbnMgQWxsZSA4LCBESy0xNjE1IEs8VTAwRjg+YmVuaGF2biBWLCBEYW5tYXJrIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIlR1cmtpc2giCit0ZXJyaXRvcnkgICJUdXJrZXkiCityZXZpc2lvbiAgICIxLjAiCitkYXRlICAgICAgICIyMDAwLTA2LTI5IgorYXVkaWVuY2UgICAiIgorYXBwbGljYXRpb24gIiIKK2FiYnJldmlhdGlvbiAiIgorJQorY2F0ZWdvcnkgICJ0cl9UUjoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJ0cl9UUjoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJ0cl9UUjoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgInRyX1RSOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAidHJfVFI6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJ0cl9UUjoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJ0cl9UUjoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJ0cl9UUjoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJ0cl9UUjoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgInRyX1RSOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAidHJfVFI6MjAwMCI7TENfVEVMRVBIT05FCitjYXRlZ29yeSAgInRyX1RSOjIwMDAiO0xDX01FQVNVUkVNRU5UCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DT0xMQVRFCisKKyUgQmFzZSBjb2xsYXRpb24gc2NoZW1lOiAxOTk0LTAzLTIyCisKKyUgT3JkZXJpbmcgYWxnb3JpdGhtOgorJSAgMS4gU3BhY2VzIGFuZCBoeXBoZW4gKGJ1dCBub3Qgc29mdAorJSAgICAgaHlwaGVuKSBiZWZvcmUgcHVuY3R1YXRpb24KKyUgICAgIGNoYXJhY3RlcnMsIHB1bmN0dWF0aW9uIGNoYXJhY3RlcnMKKyUgICAgIGJlZm9yZSBudW1iZXJzLAorJSAgICAgbnVtYmVycyBiZWZvcmUgbGV0dGVycy4KKyUgIDIuIExldHRlcnMgd2l0aCBkaWFjcml0aWNhbCBtYXJrcyBhcmUKKyUgICAgIG1lbWJlcnMgb2YgZXF1aXZhbGVuY2UgY2xhc3NlcworJSAgMy4gQSBkaXN0aW5jdGlvbiBpcyBtYWRlIHdpdGggcmVnYXJkcworJSAgICAgdG8gY2FzZSBhcyBub3RlZCBiZWxvdy4KKyUgIDQuIFNwZWNpYWwgY2hhcmFjdGVycyBhcmUgaWdub3JlZAorJSAgICAgd2hlbiBjb21wYXJpbmcgbGV0dGVycywgYnV0IHRoZW4KKyUgICAgIHRoZXkgYXJlIGNvbnNpZGVyZWQKKyUgIDUuIFRoZSBhbHBoYWJldHMgYXJlIHNvcnRlZCBpbiBvcmRlcgorJSAgICAgb2YgZmlyc3QgYXBwZWFyYW5jZSBpbiBJU08gMTA2NDY6CislICAgICBMYXRpbiwgR3JlZWssIEN5cmlsbGljLCBldGMuCislCislIEFjY29yZGluZyB0byBHcmVlayBzcGVjaWZpY2F0aW9ucywKKyUgdGhlIHN0ZXBzIDIuIGFuZCAzLiBhYm92ZSBhcmUgcmV2ZXJzZWQKKyUgZm9yIHRoZSBHcmVlayBzY3JpcHQKKworJSBjb2xsYXRpbmcgc3ltYm9scworCislIFRoZSBjb2xsYXRpbmcgc3ltYm9sIG5hbWluZyBpcworJSBtb3N0bHkgdGFrZW4gZnJvbSBJU08gMTA2NDYtMSwKKyUgZm9yIGV4YW1wbGUgdGhlIGNhc2UgYW5kIGFjY2VudAorJSBuYW1lcyBhcmUgZnJvbSB0aGlzIHN0YW5kYXJkLgorCitjb2xsYXRpbmctc3ltYm9sIDxDQVBJVEFMPgorY29sbGF0aW5nLXN5bWJvbCA8Q0FQSVRBTC1TTUFMTD4KK2NvbGxhdGluZy1zeW1ib2wgPFNNQUxMLUNBUElUQUw+Citjb2xsYXRpbmctc3ltYm9sIDxTTUFMTD4KKworJSA8Q0FQSVRBTC1TTUFMTD4gYW5kIDxTTUFMTC1DQVBJVEFMPgorJSBhcmUgZm9yIGNhc2VzIGxpa2UgRGFuaXNoIDxVMDA0MT48VTAwNjE+CislIGFuZCBTcGFuaXNoIDxVMDA0Mz48VTAwNjg+IGJlaW5nIHRyZWF0ZWQKKyUgYXMgb25lIGxldHRlci4KKworJSBUaGUgPGE4PiAuLi4uLi4gPHo4PiBjb2xsYXRpbmcKKyUgc3ltYm9scyBoYXZlIGRlZmluZWQgd2VpZ2h0cyBhcworJSB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gYSBncm91cCBvZgorJSBMYXRpbiBsZXR0ZXJzLiBUaGV5IGFyZSB1c2VkCislIHRvIHNwZWNpZnkgZGVsdGFzIGJ5IGxvY2FsZXMgdXNpbmcKKyUgYSBsb2NhbGUgYXMgdGhlIGRlZmF1bHQgb3JkZXJpbmcKKyUgYW5kIGJ5ICJyZXBsYWNlLWFmdGVyIiBzdGF0ZW1lbnRzCislIHNwZWNpZnlpbmcgdGhlIGNoYW5nZWQgcGxhY2VtZW50CislIGluIGFuIG9yZGVyaW5nIG9mIGEgY2hhcmFjdGVyLgorCitjb2xsYXRpbmctc3ltYm9sIDxhOD4KK2NvbGxhdGluZy1zeW1ib2wgPGI4PgorY29sbGF0aW5nLXN5bWJvbCA8Yzg+Citjb2xsYXRpbmctc3ltYm9sIDxkOD4KK2NvbGxhdGluZy1zeW1ib2wgPGU4PgorY29sbGF0aW5nLXN5bWJvbCA8Zjg+Citjb2xsYXRpbmctc3ltYm9sIDxnOD4KK2NvbGxhdGluZy1zeW1ib2wgPGg4PgorY29sbGF0aW5nLXN5bWJvbCA8aTg+Citjb2xsYXRpbmctc3ltYm9sIDxqOD4KK2NvbGxhdGluZy1zeW1ib2wgPGs4PgorY29sbGF0aW5nLXN5bWJvbCA8bDg+Citjb2xsYXRpbmctc3ltYm9sIDxtOD4KK2NvbGxhdGluZy1zeW1ib2wgPG44PgorY29sbGF0aW5nLXN5bWJvbCA8bzg+Citjb2xsYXRpbmctc3ltYm9sIDxwOD4KK2NvbGxhdGluZy1zeW1ib2wgPHE4PgorY29sbGF0aW5nLXN5bWJvbCA8cjg+Citjb2xsYXRpbmctc3ltYm9sIDxzOD4KK2NvbGxhdGluZy1zeW1ib2wgPHQ4PgorY29sbGF0aW5nLXN5bWJvbCA8dTg+Citjb2xsYXRpbmctc3ltYm9sIDx2OD4KK2NvbGxhdGluZy1zeW1ib2wgPHc4PgorY29sbGF0aW5nLXN5bWJvbCA8eDg+Citjb2xsYXRpbmctc3ltYm9sIDx5OD4KK2NvbGxhdGluZy1zeW1ib2wgPHo4PgorCitjb2xsYXRpbmctc3ltYm9sIDxOT05FPgorY29sbGF0aW5nLXN5bWJvbCA8QUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxBQ1VURStET1Q+Citjb2xsYXRpbmctc3ltYm9sIDxHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPERPVUJMRS1HUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFPgorY29sbGF0aW5nLXN5bWJvbCA8QlJFVkUrQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxCUkVWRStHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFK01BQ1JPTj4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFK0hPT0s+Citjb2xsYXRpbmctc3ltYm9sIDxCUkVWRStUSUxERT4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFK0RPVC1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPEJSRVZFLUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8SU5WRVJURUQtQlJFVkU+Citjb2xsYXRpbmctc3ltYm9sIDxDSVJDVU1GTEVYPgorY29sbGF0aW5nLXN5bWJvbCA8Q0lSQ1VNRkxFWCtBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPENJUkNVTUZMRVgrR1JBVkU+Citjb2xsYXRpbmctc3ltYm9sIDxDSVJDVU1GTEVYK0hPT0s+Citjb2xsYXRpbmctc3ltYm9sIDxDSVJDVU1GTEVYK1RJTERFPgorY29sbGF0aW5nLXN5bWJvbCA8Q0lSQ1VNRkxFWCtET1QtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxDQVJPTj4KK2NvbGxhdGluZy1zeW1ib2wgPENBUk9OK0RJQUVSRVNJUz4KK2NvbGxhdGluZy1zeW1ib2wgPENBUk9OK0RPVD4KK2NvbGxhdGluZy1zeW1ib2wgPFJJTkc+Citjb2xsYXRpbmctc3ltYm9sIDxSSU5HK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8UklORy1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPERJQUVSRVNJUz4KK2NvbGxhdGluZy1zeW1ib2wgPERJQUVSRVNJUytNQUNST04+Citjb2xsYXRpbmctc3ltYm9sIDxESUFFUkVTSVMrQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxESUFFUkVTSVMrR1JBVkU+Citjb2xsYXRpbmctc3ltYm9sIDxESUFFUkVTSVMrQ0FST04+Citjb2xsYXRpbmctc3ltYm9sIDxET1VCTEUtQUNVVEU+Citjb2xsYXRpbmctc3ltYm9sIDxIT09LPgorY29sbGF0aW5nLXN5bWJvbCA8VElMREU+Citjb2xsYXRpbmctc3ltYm9sIDxUSUxERStBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPFRJTERFK0RJQUVSRVNJUz4KK2NvbGxhdGluZy1zeW1ib2wgPFRJTERFLUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8RE9UPgorY29sbGF0aW5nLXN5bWJvbCA8RE9ULUJFTE9XPgorY29sbGF0aW5nLXN5bWJvbCA8RE9UK0RPVC1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPFNUUk9LRT4KK2NvbGxhdGluZy1zeW1ib2wgPFNUUk9LRStBQ1VURT4KK2NvbGxhdGluZy1zeW1ib2wgPENFRElMTEE+Citjb2xsYXRpbmctc3ltYm9sIDxDRURJTExBK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8Q0VESUxMQStHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPENFRElMTEErQlJFVkU+Citjb2xsYXRpbmctc3ltYm9sIDxPR09ORUs+Citjb2xsYXRpbmctc3ltYm9sIDxPR09ORUsrTUFDUk9OPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0dSQVZFPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0RJQUVSRVNJUz4KK2NvbGxhdGluZy1zeW1ib2wgPE1BQ1JPTitESUFFUkVTSVMtQkVMT1c+Citjb2xsYXRpbmctc3ltYm9sIDxNQUNST04rRE9UPgorY29sbGF0aW5nLXN5bWJvbCA8TUFDUk9OK0RPVC1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPE1BQ1JPTitDSVJDVU1GTEVYPgorY29sbGF0aW5nLXN5bWJvbCA8TElORS1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPEhPUk4+Citjb2xsYXRpbmctc3ltYm9sIDxIT1JOK0FDVVRFPgorY29sbGF0aW5nLXN5bWJvbCA8SE9STitHUkFWRT4KK2NvbGxhdGluZy1zeW1ib2wgPEhPUk4rSE9PSz4KK2NvbGxhdGluZy1zeW1ib2wgPEhPUk4rVElMREU+Citjb2xsYXRpbmctc3ltYm9sIDxIT1JOK0RPVC1CRUxPVz4KK2NvbGxhdGluZy1zeW1ib2wgPFBSRUNFREVELUJZLUFQT1NUUk9QSEU+Citjb2xsYXRpbmctc3ltYm9sIDxHUkVFSz4KK2NvbGxhdGluZy1zeW1ib2wgPFRPTk9TPgorY29sbGF0aW5nLXN5bWJvbCA8RElBTFlUSUNBPgorY29sbGF0aW5nLXN5bWJvbCA8RElBTFlUSUNBK1RPTk9TPgorY29sbGF0aW5nLXN5bWJvbCA8Q1lSSUxMSUM+Citjb2xsYXRpbmctc3ltYm9sIDxISVJBR0FOQT4KK2NvbGxhdGluZy1zeW1ib2wgPEtBVEFLQU5BPgorY29sbGF0aW5nLXN5bWJvbCA8U1BFQ0lBTD4KKworJSBsZXR0ZXI7YWNjZW50O2Nhc2U7c3BlY2lhbHMKKworb3JkZXJfc3RhcnQgZm9yd2FyZDtiYWNrd2FyZC8KKyAgICAgICAgICAgIDtmb3J3YXJkO3Bvc2l0aW9uCisKKyUgPENBUElUQUw+IG9yIDxTTUFMTD4gbGV0dGVycyBmaXJzdDoKKworPENBUElUQUw+Cis8Q0FQSVRBTC1TTUFMTD4KKzxTTUFMTC1DQVBJVEFMPgorPFNNQUxMPgorCislIEFjY2VudHM6CisKKzxOT05FPgorPEFDVVRFPgorPEFDVVRFK0RPVD4KKzxHUkFWRT4KKzxET1VCTEUtR1JBVkU+Cis8QlJFVkU+Cis8QlJFVkUrQUNVVEU+Cis8QlJFVkUrR1JBVkU+Cis8QlJFVkUrTUFDUk9OPgorPEJSRVZFK0hPT0s+Cis8QlJFVkUrVElMREU+Cis8QlJFVkUrRE9ULUJFTE9XPgorPEJSRVZFLUJFTE9XPgorPElOVkVSVEVELUJSRVZFPgorPENJUkNVTUZMRVg+Cis8Q0lSQ1VNRkxFWCtBQ1VURT4KKzxDSVJDVU1GTEVYK0dSQVZFPgorPENJUkNVTUZMRVgrSE9PSz4KKzxDSVJDVU1GTEVYK1RJTERFPgorPENJUkNVTUZMRVgrRE9ULUJFTE9XPgorPENBUk9OPgorPENBUk9OK0RJQUVSRVNJUz4KKzxDQVJPTitET1Q+Cis8UklORz4KKzxSSU5HK0FDVVRFPgorPFJJTkctQkVMT1c+Cis8RElBRVJFU0lTPgorPERJQUVSRVNJUytNQUNST04+Cis8RElBRVJFU0lTK0FDVVRFPgorPERJQUVSRVNJUytHUkFWRT4KKzxESUFFUkVTSVMrQ0FST04+Cis8RE9VQkxFLUFDVVRFPgorPEhPT0s+Cis8VElMREU+Cis8VElMREUrQUNVVEU+Cis8VElMREUrRElBRVJFU0lTPgorPFRJTERFLUJFTE9XPgorPERPVD4KKzxET1QtQkVMT1c+Cis8RE9UK0RPVC1CRUxPVz4KKzxTVFJPS0U+Cis8U1RST0tFK0FDVVRFPgorPENFRElMTEE+Cis8Q0VESUxMQStBQ1VURT4KKzxDRURJTExBK0dSQVZFPgorPENFRElMTEErQlJFVkU+Cis8T0dPTkVLPgorPE9HT05FSytNQUNST04+Cis8TUFDUk9OPgorPE1BQ1JPTitBQ1VURT4KKzxNQUNST04rR1JBVkU+Cis8TUFDUk9OK0RJQUVSRVNJUz4KKzxNQUNST04rRElBRVJFU0lTLUJFTE9XPgorPE1BQ1JPTitET1Q+Cis8TUFDUk9OK0RPVC1CRUxPVz4KKzxNQUNST04rQ0lSQ1VNRkxFWD4KKzxMSU5FLUJFTE9XPgorPEhPUk4+Cis8SE9STitBQ1VURT4KKzxIT1JOK0dSQVZFPgorPEhPUk4rSE9PSz4KKzxIT1JOK1RJTERFPgorPEhPUk4rRE9ULUJFTE9XPgorPFBSRUNFREVELUJZLUFQT1NUUk9QSEU+Cis8R1JFRUs+Cis8VE9OT1M+Cis8RElBTFlUSUNBPgorPERJQUxZVElDQStUT05PUz4KKzxDWVJJTExJQz4KKzxISVJBR0FOQT4KKzxLQVRBS0FOQT4KKzxTUEVDSUFMPgorCis8VTAwQTA+CTxVMDBBMD47PFUwMEEwPjs8VTAwQTA+O0lHTk9SRQorPFUwMDIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjA+Cis8VTAwMDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwOT4KKzxVMDAwQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBCPgorPFUwMDBEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMEQ+Cis8VTAwMEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwQT4KKzxVMDAwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBDPgorPFUwMDVGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNUY+Cis8VTAwQUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBRj4KKzxVMDBBRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEFEPgorPFUwMDJEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMkQ+Cis8VTAwMkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyQz4KKzxVMDAzQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDNCPgorPFUwMDNBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwM0E+Cis8VTAwMjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyMT4KKzxVMDBBMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEExPgorPFUwMDNGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwM0Y+Cis8VTAwQkY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCRj4KKzxVMDAyRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDJGPgorPFUwMDJFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMkU+Cis8VTAwQjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCND4KKzxVMDA2MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDYwPgorPFUwMDVFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNUU+Cis8VTAwQTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBBOD4KKzxVMDA3RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDdFPgorPFUwMEI3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjc+Cis8VTAwQjg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCOD4KKzxVMDAyNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDI3PgorPFUyMDE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTg+Cis8VTIwMTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxOT4KKzxVMDAyMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDIyPgorPFUyMDFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMUM+Cis8VTIwMUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxRD4KKzxVMDBBQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEFCPgorPFUwMEJCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQkI+Cis8VTAwMjg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyOD4KKzxVMjA3RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDdEPgorPFUwMDI5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjk+Cis8VTIwN0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA3RT4KKzxVMDA1Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDVCPgorPFUwMDVEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwNUQ+Cis8VTAwN0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA3Qj4KKzxVMDA3RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDdEPgorPFUwMEE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTc+Cis8VTAwQjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCNj4KKzxVMDBBOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEE5PgorPFUwMEFFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQUU+Cis8VTAwNDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA0MD4KKzxVMDBBND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEE0PgorPFUwMEEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTI+Cis8VTAwMjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyND4KKzxVMDBBMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEEzPgorPFUwMEE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQTU+Cis8VTAwMkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyQT4KKzxVMDA1Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDVDPgorPFUwMDI2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMjY+Cis8VTAwMjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyMz4KKzxVMDAyNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDI1PgorPFUyMDdCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwN0I+Cis8VTAwMkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAyQj4KKzxVMjA3QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDdBPgorPFUwMEIxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjE+Cis8VTAwRjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBGNz4KKzxVMDBENz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEQ3PgorPFUyMjYwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNjA+Cis8VTAwM0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAzQz4KKzxVMjI2ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjY0PgorPFUwMDNEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwM0Q+Cis8VTIyNjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2NT4KKzxVMDAzRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDNFPgorPFUwMEFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQUM+Cis8VTAwN0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA3Qz4KKzxVMDBBNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMEE2PgorPFUwMEIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwQjA+Cis8VTAwQjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDBCNT4KKzxVMDJDNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkM3PgorPFUwMkQ4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAyRDg+Cis8VTAyRDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDJEOT4KKzxVMDJEQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkRBPgorPFUwMkRCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAyREI+Cis8VTAyREM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDJEQz4KKzxVMDJERD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMkREPgorPFUwMzc0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzNzQ+Cis8VTAzNzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDM3NT4KKzxVMDM3QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzdBPgorPFUwMzdFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzN0U+Cis8VTAzODQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDM4ND4KKzxVMDM4NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzg1PgorPFUwMzg3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAzODc+Cis8VTAzRDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDNEMD4KKzxVMUZCRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkJGPgorPFUxRkMwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGQzA+Cis8VTFGQzE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZDMT4KKzxVMUZDRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkNEPgorPFUxRkNFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGQ0U+Cis8VTFGQ0Y+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZDRj4KKzxVMUZERD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkREPgorPFUxRkRFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGREU+Cis8VTFGREY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZERj4KKzxVMUZFRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUxRkVEPgorPFUxRkVGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTFGRUY+Cis8VTFGRkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMUZGRT4KKzxVMjAwMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDAyPgorPFUyMDAzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMDM+Cis8VTIwMDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwND4KKzxVMjAwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDA1PgorPFUyMDA2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMDY+Cis8VTIwMEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwRT4KKzxVMjAwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDBGPgorPFUyMDA5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMDk+Cis8VTIwMEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAwQT4KKzxVMjAxMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDEwPgorPFUyMDEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTM+Cis8VTIwMTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxND4KKzxVMjAxNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDE1PgorPFUyMDE2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMTY+Cis8VTIwMTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxNz4KKzxVMjAxQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDFBPgorPFUyMDFCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMUI+Cis8VTIwMUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAxRT4KKzxVMjAxRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDFGPgorPFUyMDIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMjA+Cis8VTIwMjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAyMT4KKzxVMjIxOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjE5PgorPFUyMDI1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMjU+Cis8VTIwMjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAyNj4KKzxVMjAzMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDMwPgorPFUyMDMyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzI+Cis8VTIwMzM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzMz4KKzxVMjAzND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDM0PgorPFUyMDM1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzU+Cis8VTIwMzY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzNj4KKzxVMjAzNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDM3PgorPFUyMDM4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMzg+Cis8VTIwMzk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzOT4KKzxVMjAzQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDNBPgorPFUyMDNCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwM0I+Cis8VTIwM0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjAzQz4KKzxVMjAzRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDNFPgorPFUyMDdDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwN0M+Cis8VTIwODA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4MD4KKzxVMjA4MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDgxPgorPFUyMDgyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODI+Cis8VTIwODM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4Mz4KKzxVMjA4ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDg0PgorPFUyMDg1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODU+Cis8VTIwODY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4Nj4KKzxVMjA4Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDg3PgorPFUyMDg4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwODg+Cis8VTIwODk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4OT4KKzxVMjA4QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDhBPgorPFUyMDhCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwOEI+Cis8VTIwOEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjA4Qz4KKzxVMjA4RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMDhEPgorPFUyMDhFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwOEU+Cis8VTIwQTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjBBMz4KKzxVMjBBND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMEE0PgorPFUyMEE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwQTc+Cis8VTIwQTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjBBOT4KKzxVMjEwMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTAzPgorPFUyMTA1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMDU+Cis8VTIxMDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjEwOT4KKzxVMjExNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTE2PgorPFUyMTE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMTc+Cis8VTIxMUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjExRT4KKzxVMjEyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTIwPgorPFUyMTIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxMjI+Cis8VTIxMjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjEyNj4KKzxVMjEyQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTJCPgorPFUyMTUzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTM+Cis8VTIxNTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1ND4KKzxVMjE1NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTU1PgorPFUyMTU2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTY+Cis8VTIxNTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1Nz4KKzxVMjE1OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTU4PgorPFUyMTU5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNTk+Cis8VTIxNUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE1QT4KKzxVMjE2MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTYwPgorPFUyMTYxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjE+Cis8VTIxNjI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2Mj4KKzxVMjE2Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTYzPgorPFUyMTY0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjQ+Cis8VTIxNjU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2NT4KKzxVMjE2Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTY2PgorPFUyMTY3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNjc+Cis8VTIxNjg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2OD4KKzxVMjE2OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTY5PgorPFUyMTZBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNkE+Cis8VTIxNkI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2Qj4KKzxVMjE2Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTZDPgorPFUyMTZEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNkQ+Cis8VTIxNkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE2RT4KKzxVMjE2Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTZGPgorPFUyMTcwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzA+Cis8VTIxNzE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3MT4KKzxVMjE3Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTcyPgorPFUyMTczPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzM+Cis8VTIxNzQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3ND4KKzxVMjE3NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTc1PgorPFUyMTc2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzY+Cis8VTIxNzc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3Nz4KKzxVMjE3OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTc4PgorPFUyMTc5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxNzk+Cis8VTIxN0E+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3QT4KKzxVMjE3Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTdCPgorPFUyMTdDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxN0M+Cis8VTIxN0Q+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE3RD4KKzxVMjE3RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTdFPgorPFUyMTdGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxN0Y+Cis8VTIxODA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE4MD4KKzxVMjE4MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTgxPgorPFUyMTgyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxODI+Cis8VTIxOTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5MT4KKzxVMjE5Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTkzPgorPFUyMTk0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxOTQ+Cis8VTIxOTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5NT4KKzxVMjE5Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTk2PgorPFUyMTk3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxOTc+Cis8VTIxOTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjE5OD4KKzxVMjE5OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMTk5PgorPFUyMUE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxQTg+Cis8VTIxQzA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjFDMD4KKzxVMjFEMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMUQwPgorPFUyMUQyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIxRDI+Cis8VTIxRDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjFEND4KKzxVMjIwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjAwPgorPFUyMjAyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMDI+Cis8VTIyMDM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwMz4KKzxVMjIwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjA1PgorPFUyMjA2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMDY+Cis8VTIyMDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwNz4KKzxVMjIwOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjA4PgorPFUyMjBCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMEI+Cis8VTIyMEY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIwRj4KKzxVMjIxMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjExPgorPFUyMjEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMTI+Cis8VTIyMTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxMz4KKzxVMjIxND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjE0PgorPFUyMDQ0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwNDQ+Cis8VTIyMTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxNz4KKzxVMjIxOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjE4PgorPFUyMDIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIwMjI+Cis8VTIyMUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxQT4KKzxVMjIxRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjFEPgorPFUyMjFFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMUU+Cis8VTIyMUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIxRj4KKzxVMjIyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjIwPgorPFUyMjI1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMjU+Cis8VTIyMjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyNz4KKzxVMjIyOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjI4PgorPFUyMjI5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMjk+Cis8VTIyMkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyQT4KKzxVMjIyQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjJCPgorPFUyMjJDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMkM+Cis8VTIyMkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIyRT4KKzxVMjIzND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjM0PgorPFUyMjM1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyMzU+Cis8VTIyMzY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIzNj4KKzxVMjIzNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjM3PgorPFUyMjNDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyM0M+Cis8VTIyM0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjIzRT4KKzxVMjI0Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjQzPgorPFUyMjQ1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNDU+Cis8VTIyNDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI0OD4KKzxVMjI0Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjRDPgorPFUyMjUzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNTM+Cis8VTIyNjE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2MT4KKzxVMjI2QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjZBPgorPFUyMjZCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyNkI+Cis8VTIyNkU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI2RT4KKzxVMjI2Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjZGPgorPFUyMjgyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyODI+Cis8VTIyODM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI4Mz4KKzxVMjI4Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjg2PgorPFUyMjg3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyODc+Cis8VTIyOTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjI5OT4KKzxVMjI5QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMjlBPgorPFUyMkE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIyQTU+Cis8VTIyQzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjJDNT4KKzxVMjJFRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMkVFPgorPFUyMzAyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMDI+Cis8VTIzMDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMwOD4KKzxVMjMwOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzA5PgorPFUyMzBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMEE+Cis8VTIzMEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMwQj4KKzxVMjMxMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzEwPgorPFUyMzEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMTI+Cis8VTIzMTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjMxNT4KKzxVMjMyMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyMzIwPgorPFUyMzIxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTIzMjE+Cis8VTI0MjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQyMz4KKzxVMjQ0MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQwPgorPFUyNDQxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDE+Cis8VTI0NDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ0Mj4KKzxVMjQ0Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQzPgorPFUyNDQ2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDY+Cis8VTI0NDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ0Nz4KKzxVMjQ0OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDQ4PgorPFUyNDQ5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NDk+Cis8VTI0NjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2MD4KKzxVMjQ2MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDYxPgorPFUyNDYyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NjI+Cis8VTI0NjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Mz4KKzxVMjQ2ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDY0PgorPFUyNDY1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NjU+Cis8VTI0NjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Nj4KKzxVMjQ2Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDY3PgorPFUyNDY4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0Njg+Cis8VTI0Njk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2OT4KKzxVMjQ2QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDZBPgorPFUyNDZCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NkI+Cis8VTI0NkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Qz4KKzxVMjQ2RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDZEPgorPFUyNDZFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NkU+Cis8VTI0NkY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ2Rj4KKzxVMjQ3MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDcwPgorPFUyNDcxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NzE+Cis8VTI0NzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3Mj4KKzxVMjQ3Mz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDczPgorPFUyNDc0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0NzQ+Cis8VTI0NzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3NT4KKzxVMjQ3Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDc2PgorPFUyNDc3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0Nzc+Cis8VTI0Nzg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3OD4KKzxVMjQ3OT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDc5PgorPFUyNDdBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0N0E+Cis8VTI0N0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3Qj4KKzxVMjQ3Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDdDPgorPFUyNDdEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0N0Q+Cis8VTI0N0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ3RT4KKzxVMjQ3Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDdGPgorPFUyNDgwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODA+Cis8VTI0ODE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4MT4KKzxVMjQ4Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDgyPgorPFUyNDgzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODM+Cis8VTI0ODQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4ND4KKzxVMjQ4NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDg1PgorPFUyNDg2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODY+Cis8VTI0ODc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4Nz4KKzxVMjQ4OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDg4PgorPFUyNDg5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0ODk+Cis8VTI0OEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4QT4KKzxVMjQ4Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDhCPgorPFUyNDhDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OEM+Cis8VTI0OEQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ4RD4KKzxVMjQ4RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDhFPgorPFUyNDhGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OEY+Cis8VTI0OTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5MD4KKzxVMjQ5MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDkxPgorPFUyNDkyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTI+Cis8VTI0OTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5Mz4KKzxVMjQ5ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDk0PgorPFUyNDk1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTU+Cis8VTI0OTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5Nj4KKzxVMjQ5Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDk3PgorPFUyNDk4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OTg+Cis8VTI0OTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjQ5OT4KKzxVMjQ5QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNDlBPgorPFUyNDlCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI0OUI+Cis8VTI0RUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjRFQT4KKzxVMjUwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTAwPgorPFUyNTUwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTA+Cis8VTI1MDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwMj4KKzxVMjU1MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTUxPgorPFUyNTA0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MDQ+Cis8VTI1MDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwNT4KKzxVMjUwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTA2PgorPFUyNTA3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MDc+Cis8VTI1MDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwOD4KKzxVMjUwOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTA5PgorPFUyNTBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MEE+Cis8VTI1MEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUwQj4KKzxVMjUwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTBDPgorPFUyNTUyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTI+Cis8VTI1NTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Mz4KKzxVMjU1ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTU0PgorPFUyNTEwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MTA+Cis8VTI1NTU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1NT4KKzxVMjU1Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTU2PgorPFUyNTU3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTc+Cis8VTI1MTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUxND4KKzxVMjU1OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTU4PgorPFUyNTU5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NTk+Cis8VTI1NUE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1QT4KKzxVMjUxOD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTE4PgorPFUyNTVCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NUI+Cis8VTI1NUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Qz4KKzxVMjU1RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTVEPgorPFUyNTFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MUM+Cis8VTI1NUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1RT4KKzxVMjUxRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTFFPgorPFUyNTFGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MUY+Cis8VTI1NUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU1Rj4KKzxVMjUyMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTIxPgorPFUyNTIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MjI+Cis8VTI1NjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2MD4KKzxVMjUyND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTI0PgorPFUyNTYxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjE+Cis8VTI1MjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyNj4KKzxVMjUyNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTI3PgorPFUyNTYyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjI+Cis8VTI1Mjk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyOT4KKzxVMjUyQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTJBPgorPFUyNTYzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NjM+Cis8VTI1MkM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUyQz4KKzxVMjUyRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTJEPgorPFUyNTJFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MkU+Cis8VTI1NjQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2ND4KKzxVMjU2NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTY1PgorPFUyNTMxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MzE+Cis8VTI1MzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzMj4KKzxVMjU2Nj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTY2PgorPFUyNTM0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1MzQ+Cis8VTI1MzU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzNT4KKzxVMjUzNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTM2PgorPFUyNTY3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Njc+Cis8VTI1Njg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2OD4KKzxVMjUzOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTM5PgorPFUyNTNBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1M0E+Cis8VTI1Njk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU2OT4KKzxVMjUzQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTNDPgorPFUyNTNEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1M0Q+Cis8VTI1M0U+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjUzRT4KKzxVMjU2QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTZBPgorPFUyNTQwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDA+Cis8VTI1NDE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0MT4KKzxVMjU2Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTZCPgorPFUyNTQzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDM+Cis8VTI1NDQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0ND4KKzxVMjU0NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTQ1PgorPFUyNTQ2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDY+Cis8VTI1NDc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0Nz4KKzxVMjU0OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTQ4PgorPFUyNTQ5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NDk+Cis8VTI1NEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU0QT4KKzxVMjU2Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTZDPgorPFUyNTcxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1NzE+Cis8VTI1NzI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU3Mj4KKzxVMjU4MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTgwPgorPFUyNTg0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1ODQ+Cis8VTI1ODg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU4OD4KKzxVMjU4Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNThDPgorPFUyNTkwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1OTA+Cis8VTI1OTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjU5MT4KKzxVMjU5Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNTkyPgorPFUyNTkzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1OTM+Cis8VTI1QTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBMD4KKzxVMjVBMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUExPgorPFUyNUEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTI+Cis8VTI1QTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBMz4KKzxVMjVBND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUE0PgorPFUyNUE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTU+Cis8VTI1QTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBNj4KKzxVMjVBNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUE3PgorPFUyNUE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QTg+Cis8VTI1QTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBOT4KKzxVMjVBQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUFBPgorPFUyNUFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QUM+Cis8VTI1QUQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVBRD4KKzxVMjVCMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUIyPgorPFUyNUIzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QjM+Cis8VTI1Qjc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVCNz4KKzxVMjVCQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUJBPgorPFUyNUJDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QkM+Cis8VTI1QkQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVCRD4KKzxVMjVDMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUMxPgorPFUyNUM0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1QzQ+Cis8VTI1QzY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVDNj4KKzxVMjVDNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUM3PgorPFUyNUNBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Q0E+Cis8VTI1Q0I+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVDQj4KKzxVMjVDRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUNFPgorPFUyNUNGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1Q0Y+Cis8VTI1RDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVEMD4KKzxVMjVEMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUQxPgorPFUyNUQ4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1RDg+Cis8VTI1RDk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVEOT4KKzxVMjVFMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNUUyPgorPFUyNUUzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI1RTM+Cis8VTI1RUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjVFRj4KKzxVMjYwNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjA1PgorPFUyNjA2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2MDY+Cis8VTI2MEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYwRT4KKzxVMjYwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjBGPgorPFUyNjFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2MUM+Cis8VTI2MUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYxRT4KKzxVMjYzQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjNBPgorPFUyNjNCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2M0I+Cis8VTI2M0M+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjYzQz4KKzxVMjY0MD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjQwPgorPFUyNjQyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NDI+Cis8VTI2NjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2MD4KKzxVMjY2MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjYxPgorPFUyNjYyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NjI+Cis8VTI2NjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2Mz4KKzxVMjY2ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjY0PgorPFUyNjY1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NjU+Cis8VTI2NjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2Nj4KKzxVMjY2Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjY3PgorPFUyNjY5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2Njk+Cis8VTI2NkE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2QT4KKzxVMjY2Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjZCPgorPFUyNjZDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NkM+Cis8VTI2NkQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjY2RD4KKzxVMjY2RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNjZFPgorPFUyNjZGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI2NkY+Cis8VTI3MTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMjcxMz4KKzxVMjcxNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUyNzE3PgorPFUyNzIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTI3MjA+Cis8VTMwMDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwMD4KKzxVMzAwMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDAxPgorPFUzMDAyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMDI+Cis8VTMwMDM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwMz4KKzxVMzAwND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDA0PgorPFUzMDA1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMDU+Cis8VTMwMDY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwNj4KKzxVMzAwNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDA3PgorPFUzMDBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMEE+Cis8VTMwMEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwQj4KKzxVMzAwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDBDPgorPFUzMDBEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMEQ+Cis8VTMwMEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAwRT4KKzxVMzAwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDBGPgorPFUzMDEwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTA+Cis8VTMwMTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxMT4KKzxVMzAxMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDEyPgorPFUzMDEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTM+Cis8VTMwMTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxND4KKzxVMzAxNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDE1PgorPFUzMDE2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMTY+Cis8VTMwMTc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzAxNz4KKzxVMzAxQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDFDPgorPFUzMDIwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwMjA+Cis8VTMwOUI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzA5Qj4KKzxVMzA5Qz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMDlDPgorPFUzMDlEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwOUQ+Cis8VTMwOUU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzA5RT4KKzxVMzBGQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMEZCPgorPFUzMEZDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMwRkM+Cis8VTMwRkQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzBGRD4KKzxVMzBGRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMEZFPgorPFUzMjFDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMUM+Cis8VTMyMjA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyMD4KKzxVMzIyMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjIxPgorPFUzMjIyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjI+Cis8VTMyMjM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyMz4KKzxVMzIyND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjI0PgorPFUzMjI1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjU+Cis8VTMyMjY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyNj4KKzxVMzIyNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjI3PgorPFUzMjI4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMyMjg+Cis8VTMyMjk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzIyOT4KKzxVMzI3Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUzMjdGPgorPFUzM0MyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTMzQzI+Cis8VTMzRDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMzNEOD4KKzxVMDAwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDAwPgorPFUwMDAxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDE+Cis8VTAwMDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwMj4KKzxVMDAwMz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDAzPgorPFUwMDA0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDQ+Cis8VTAwMDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwNT4KKzxVMDAwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDA2PgorPFUwMDA3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMDc+Cis8VTAwMDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAwOD4KKzxVMDAwRT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDBFPgorPFUwMDBGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMEY+Cis8VTAwMTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxMD4KKzxVMDAxMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDExPgorPFUwMDEyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTI+Cis8VTAwMTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxMz4KKzxVMDAxND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE0PgorPFUwMDE1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTU+Cis8VTAwMTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxNj4KKzxVMDAxNz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDE3PgorPFUwMDE4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMTg+Cis8VTAwMTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxOT4KKzxVMDAxQT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFBPgorPFUwMDFCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMUI+Cis8VTAwMUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxQz4KKzxVMDAxRD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDFEPgorPFUwMDFFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwMUU+Cis8VTAwMUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDAxRj4KKzxVMDA3Rj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDdGPgorPFUwMDgwPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODA+Cis8VTAwODE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4MT4KKzxVMDA4Mj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDgyPgorPFUwMDgzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODM+Cis8VTAwODQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4ND4KKzxVMDA4NT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDg1PgorPFUwMDg2PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODY+Cis8VTAwODc+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4Nz4KKzxVMDA4OD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDg4PgorPFUwMDg5PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwODk+Cis8VTAwOEE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4QT4KKzxVMDA4Qj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDhCPgorPFUwMDhDPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOEM+Cis8VTAwOEQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA4RD4KKzxVMDA4RT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDhFPgorPFUwMDhGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOEY+Cis8VTAwOTA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5MD4KKzxVMDA5MT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDkxPgorPFUwMDkyPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTI+Cis8VTAwOTM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Mz4KKzxVMDA5ND4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDk0PgorPFUwMDk1PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTU+Cis8VTAwOTY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Nj4KKzxVMDA5Nz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDk3PgorPFUwMDk4PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOTg+Cis8VTAwOTk+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5OT4KKzxVMDA5QT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDlBPgorPFUwMDlCPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOUI+Cis8VTAwOUM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Qz4KKzxVMDA5RD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMDlEPgorPFUwMDlFPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTAwOUU+Cis8VTAwOUY+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDA5Rj4KKzxVRTAwMD4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDAwPgorPFVFMDAxPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDE+Cis8VUUwMDI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwMj4KKzxVMDMwMT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwMzAxPgorPFVFMDA0PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDQ+Cis8VUUwMDU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwNT4KKzxVRTAwNj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDA2PgorPFVFMDA3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMDc+Cis8VUUwMDg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwOD4KKzxVRTAwOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDA5PgorPFVFMDBBPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMEE+Cis8VUUwMEI+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwQj4KKzxVRTAwQz4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDBDPgorPFVFMDBEPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMEQ+Cis8VUUwMEU+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAwRT4KKzxVRTAwRj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDBGPgorPCI9PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8Ij0+Cis8VUUwMTE+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxMT4KKzxVRTAxMj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDEyPgorPFVFMDEzPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMTM+Cis8VUUwMTQ+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxND4KKzxVRTAxNT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDE1PgorPFVFMDE3PglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VUUwMTc+Cis8VUUwMTg+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVRTAxOD4KKzxVRTAxOT4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFVFMDE5PgorVU5ERUZJTkVECUlHTk9SRTtJR05PUkU7SUdOT1JFCisKKzxVMDAzMD4JPFUwMDMwPjs8VTAwMzA+O0lHTk9SRTtJR05PUkUKKzxVMjA3MD4JPFUwMDMwPjs8VTIwNzA+O0lHTk9SRTtJR05PUkUKKzxVMjE1Qj4JPFUwMDMwPjs8VTIxNUI+O0lHTk9SRTtJR05PUkUKKzxVMDBCQz4JPFUwMDMwPjs8VTAwQkM+O0lHTk9SRTtJR05PUkUKKzxVMjE1Qz4JPFUwMDMwPjs8VTIxNUM+O0lHTk9SRTtJR05PUkUKKzxVMDBCRD4JPFUwMDMwPjs8VTAwQkQ+O0lHTk9SRTtJR05PUkUKKzxVMjE1RD4JPFUwMDMwPjs8VTIxNUQ+O0lHTk9SRTtJR05PUkUKKzxVMDBCRT4JPFUwMDMwPjs8VTAwQkU+O0lHTk9SRTtJR05PUkUKKzxVMjE1RT4JPFUwMDMwPjs8VTIxNUU+O0lHTk9SRTtJR05PUkUKKzxVMDAzMT4JPFUwMDMxPjs8VTAwMzE+O0lHTk9SRTtJR05PUkUKKzxVMDAzMj4JPFUwMDMyPjs8VTAwMzI+O0lHTk9SRTtJR05PUkUKKzxVMDAzMz4JPFUwMDMzPjs8VTAwMzM+O0lHTk9SRTtJR05PUkUKKzxVMDAzND4JPFUwMDM0Pjs8VTAwMzQ+O0lHTk9SRTtJR05PUkUKKzxVMDAzNT4JPFUwMDM1Pjs8VTAwMzU+O0lHTk9SRTtJR05PUkUKKzxVMDAzNj4JPFUwMDM2Pjs8VTAwMzY+O0lHTk9SRTtJR05PUkUKKzxVMDAzNz4JPFUwMDM3Pjs8VTAwMzc+O0lHTk9SRTtJR05PUkUKKzxVMDAzOD4JPFUwMDM4Pjs8VTAwMzg+O0lHTk9SRTtJR05PUkUKKzxVMDAzOT4JPFUwMDM5Pjs8VTAwMzk+O0lHTk9SRTtJR05PUkUKKzxVMDBCOT4JPFUwMDMxPjs8VTAwQjk+O0lHTk9SRTtJR05PUkUKKzxVMDBCMj4JPFUwMDMyPjs8VTAwQjI+O0lHTk9SRTtJR05PUkUKKzxVMDBCMz4JPFUwMDMzPjs8VTAwQjM+O0lHTk9SRTtJR05PUkUKKzxVMjA3ND4JPFUwMDM0Pjs8VTIwNzQ+O0lHTk9SRTtJR05PUkUKKzxVMjA3NT4JPFUwMDM1Pjs8VTIwNzU+O0lHTk9SRTtJR05PUkUKKzxVMjA3Nj4JPFUwMDM2Pjs8VTIwNzY+O0lHTk9SRTtJR05PUkUKKzxVMjA3Nz4JPFUwMDM3Pjs8VTIwNzc+O0lHTk9SRTtJR05PUkUKKzxVMjA3OD4JPFUwMDM4Pjs8VTIwNzg+O0lHTk9SRTtJR05PUkUKKzxVMjA3OT4JPFUwMDM5Pjs8VTIwNzk+O0lHTk9SRTtJR05PUkUKKzxVMDA0MT4JPFUwMDQxPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDYxPgk8VTAwNDE+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMEFBPgk8VTAwNDE+OzxOT05FPjs8VTAwQUE+O0lHTk9SRQorPFUwMEMxPgk8VTAwNDE+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMEUxPgk8VTAwNDE+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDBDMD4JPFUwMDQxPjs8R1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFMD4JPFUwMDQxPjs8R1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMDA+CTxVMDA0MT47PERPVUJMRS1HUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjAxPgk8VTAwNDE+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMDI+CTxVMDA0MT47PEJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMDM+CTxVMDA0MT47PEJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRUFFPgk8VTAwNDE+OzxCUkVWRStBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRUFGPgk8VTAwNDE+OzxCUkVWRStBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVCMD4JPFUwMDQxPjs8QlJFVkUrR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCMT4JPFUwMDQxPjs8QlJFVkUrR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFQjI+CTxVMDA0MT47PEJSRVZFK0hPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCMz4JPFUwMDQxPjs8QlJFVkUrSE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVCND4JPFUwMDQxPjs8QlJFVkUrVElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVCNT4JPFUwMDQxPjs8QlJFVkUrVElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFQjY+CTxVMDA0MT47PEJSRVZFK0RPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUI3Pgk8VTAwNDE+OzxCUkVWRStET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAyMDI+CTxVMDA0MT47PElOVkVSVEVELUJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMDM+CTxVMDA0MT47PElOVkVSVEVELUJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMEMyPgk8VTAwNDE+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTI+CTxVMDA0MT47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFQTQ+CTxVMDA0MT47PENJUkNVTUZMRVgrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVBNT4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVBNj4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRUE3Pgk8VTAwNDE+OzxDSVJDVU1GTEVYK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRUE4Pgk8VTAwNDE+OzxDSVJDVU1GTEVYK0hPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVBOT4JPFUwMDQxPjs8Q0lSQ1VNRkxFWCtIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRUFBPgk8VTAwNDE+OzxDSVJDVU1GTEVYK1RJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQUI+CTxVMDA0MT47PENJUkNVTUZMRVgrVElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFQUM+CTxVMDA0MT47PENJUkNVTUZMRVgrRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQUQ+CTxVMDA0MT47PENJUkNVTUZMRVgrRE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMUNEPgk8VTAwNDE+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUNFPgk8VTAwNDE+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDBDNT4JPFUwMDQxPjs8UklORz47PENBUElUQUw+O0lHTk9SRQorPFUwMEU1Pgk8VTAwNDE+OzxSSU5HPjs8U01BTEw+O0lHTk9SRQorPFUwMUZBPgk8VTAwNDE+OzxSSU5HK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRkI+CTxVMDA0MT47PFJJTkcrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFMDA+CTxVMDA0MT47PFJJTkctQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwMT4JPFUwMDQxPjs8UklORy1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDBDND4JPFUwMDQxPjs8RElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTQ+CTxVMDA0MT47PERJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMDFERT4JPFUwMDQxPjs8RElBRVJFU0lTK01BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMURGPgk8VTAwNDE+OzxESUFFUkVTSVMrTUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRUEyPgk8VTAwNDE+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQTM+CTxVMDA0MT47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTAwQzM+CTxVMDA0MT47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTM+CTxVMDA0MT47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRUEwPgk8VTAwNDE+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVBMT4JPFUwMDQxPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTA0Pgk8VTAwNDE+OzxPR09ORUs+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEwNT4JPFUwMDQxPjs8T0dPTkVLPjs8U01BTEw+O0lHTk9SRQorPFUwMTAwPgk8VTAwNDE+OzxNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEwMT4JPFUwMDQxPjs8TUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMUUwPgk8VTAwNDE+OzxNQUNST04rRE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRTE+CTxVMDA0MT47PE1BQ1JPTitET1Q+OzxTTUFMTD47SUdOT1JFCis8YTg+Cis8VTAwQzY+CSI8VTAwNDE+PFUwMDQ1PiI7IjxVMDBDNj48VTAwQzY+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDBFNj4JIjxVMDA0MT48VTAwNDU+IjsiPFUwMEM2PjxVMDBDNj4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAxRkM+CSI8VTAwNDE+PFUwMDQ1PiI7IjxVMDFGQz48VTAxRkM+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDFGRD4JIjxVMDA0MT48VTAwNDU+IjsiPFUwMUZDPjxVMDFGQz4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAxRTI+CSI8VTAwNDE+PFUwMDQ1PiI7IjxVMDFFMj48VTAxRTI+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDFFMz4JIjxVMDA0MT48VTAwNDU+IjsiPFUwMUUyPjxVMDFFMj4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAwNDI+CTxVMDA0Mj47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2Mj4JPFUwMDQyPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMUUwMj4JPFUwMDQyPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMDM+CTxVMDA0Mj47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUUwND4JPFUwMDQyPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMDU+CTxVMDA0Mj47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUUwNj4JPFUwMDQyPjs8TElORS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTA3Pgk8VTAwNDI+OzxMSU5FLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPGI4PgorPFUwMDQzPgk8VTAwNDM+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjM+CTxVMDA0Mz47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMDY+CTxVMDA0Mz47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMDc+CTxVMDA0Mz47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMTA4Pgk8VTAwNDM+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMDk+CTxVMDA0Mz47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTAxMEM+CTxVMDA0Mz47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMEQ+CTxVMDA0Mz47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMTg3Pgk8VTAwNDM+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxODg+CTxVMDA0Mz47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTAxMEE+CTxVMDA0Mz47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUwMTBCPgk8VTAwNDM+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFMDg+CTxVMDA0Mz47PENFRElMTEErQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwOT4JPFUwMDQzPjs8Q0VESUxMQStBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxjOD4KKzxVMDBDNz4JPFUwMEM3Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMEU3Pgk8VTAwQzc+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMDQ0Pgk8VTAwNDQ+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNjQ+CTxVMDA0ND47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMEU+CTxVMDA0ND47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMEY+CTxVMDA0ND47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRTBBPgk8VTAwNDQ+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwQj4JPFUwMDQ0Pjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTBDPgk8VTAwNDQ+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUwRD4JPFUwMDQ0Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTEwPgk8VTAwNDQ+OzxTVFJPS0U+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExMT4JPFUwMDQ0Pjs8U1RST0tFPjs8U01BTEw+O0lHTk9SRQorPFUxRTEwPgk8VTAwNDQ+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMTE+CTxVMDA0ND47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFMTI+CTxVMDA0ND47PE1BQ1JPTitDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMTM+CTxVMDA0ND47PE1BQ1JPTitDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRTBFPgk8VTAwNDQ+OzxMSU5FLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMEY+CTxVMDA0ND47PExJTkUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8ZDg+Cis8VTAwNDU+CTxVMDA0NT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2NT4JPFUwMDQ1Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDBDOT4JPFUwMDQ1Pjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFOT4JPFUwMDQ1Pjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAwQzg+CTxVMDA0NT47PEdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRTg+CTxVMDA0NT47PEdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjA0Pgk8VTAwNDU+OzxET1VCTEUtR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIwNT4JPFUwMDQ1Pjs8RE9VQkxFLUdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTE0Pgk8VTAwNDU+OzxCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTE1Pgk8VTAwNDU+OzxCUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIwNj4JPFUwMDQ1Pjs8SU5WRVJURUQtQlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIwNz4JPFUwMDQ1Pjs8SU5WRVJURUQtQlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAwQ0E+CTxVMDA0NT47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFQT4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMUVCRT4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRUJGPgk8VTAwNDU+OzxDSVJDVU1GTEVYK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRUMwPgk8VTAwNDU+OzxDSVJDVU1GTEVYK0dSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQzE+CTxVMDA0NT47PENJUkNVTUZMRVgrR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTFFQzI+CTxVMDA0NT47PENJUkNVTUZMRVgrSE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUMzPgk8VTAwNDU+OzxDSVJDVU1GTEVYK0hPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFQzQ+CTxVMDA0NT47PENJUkNVTUZMRVgrVElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDNT4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUVDNj4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDNz4JPFUwMDQ1Pjs8Q0lSQ1VNRkxFWCtET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxMUE+CTxVMDA0NT47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMUI+CTxVMDA0NT47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMENCPgk8VTAwNDU+OzxESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFQj4JPFUwMDQ1Pjs8RElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUxRUJBPgk8VTAwNDU+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQkI+CTxVMDA0NT47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFQkM+CTxVMDA0NT47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQkQ+CTxVMDA0NT47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRTFBPgk8VTAwNDU+OzxUSUxERS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTFCPgk8VTAwNDU+OzxUSUxERS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDExNj4JPFUwMDQ1Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMTc+CTxVMDA0NT47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUVCOD4JPFUwMDQ1Pjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFQjk+CTxVMDA0NT47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMUUxQz4JPFUwMDQ1Pjs8Q0VESUxMQStCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRTFEPgk8VTAwNDU+OzxDRURJTExBK0JSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTE4Pgk8VTAwNDU+OzxPR09ORUs+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExOT4JPFUwMDQ1Pjs8T0dPTkVLPjs8U01BTEw+O0lHTk9SRQorPFUwMTEyPgk8VTAwNDU+OzxNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDExMz4JPFUwMDQ1Pjs8TUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRTE2Pgk8VTAwNDU+OzxNQUNST04rQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUxNz4JPFUwMDQ1Pjs8TUFDUk9OK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTE0Pgk8VTAwNDU+OzxNQUNST04rR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUxNT4JPFUwMDQ1Pjs8TUFDUk9OK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRTE4Pgk8VTAwNDU+OzxNQUNST04rQ0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUxRTE5Pgk8VTAwNDU+OzxNQUNST04rQ0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxlOD4KKzxVMDA0Nj4JPFUwMDQ2Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDY2Pgk8VTAwNDY+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTkxPgk8VTAwNDY+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxOTI+CTxVMDA0Nj47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTFFMUU+CTxVMDA0Nj47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTFGPgk8VTAwNDY+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8Zjg+Cis8VUZCMDA+CSI8VTAwNDY+PFUwMDQ2PiI7IjxOT05FPjxOT05FPiI7IjxVRkIwMD48VUZCMDA+IjtJR05PUkUKKzxVRkIwMT4JIjxVMDA0Nj48VTAwNjk+IjsiPE5PTkU+PE5PTkU+IjsiPFVGQjAxPjxVRkIwMT4iO0lHTk9SRQorPFVGQjAyPgkiPFUwMDQ2PjxVMDA0Qz4iOyI8Tk9ORT48Tk9ORT4iOyI8VUZCMDI+PFVGQjAyPiI7SUdOT1JFCis8VUZCMDM+CSI8VTAwNDY+PFUwMDQ2PjxVMDA2OT4iOyI8Tk9ORT48Tk9ORT48Tk9ORT4iOyI8VUZCMDM+PFVGQjAzPjxVRkIwMz4iO0lHTk9SRQorPFVGQjA0PgkiPFUwMDQ2PjxVMDA0Nj48VTAwNEM+IjsiPE5PTkU+PE5PTkU+PE5PTkU+IjsiPFVGQjA0PjxVRkIwND48VUZCMDQ+IjtJR05PUkUKKzxVMDA0Nz4JPFUwMDQ3Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDY3Pgk8VTAwNDc+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMUY0Pgk8VTAwNDc+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMUY1Pgk8VTAwNDc+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDExQz4JPFUwMDQ3Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMTFEPgk8VTAwNDc+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUwMUU2Pgk8VTAwNDc+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUU3Pgk8VTAwNDc+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDEyMD4JPFUwMDQ3Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMjE+CTxVMDA0Nz47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMDFFND4JPFUwMDQ3Pjs8U1RST0tFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxRTU+CTxVMDA0Nz47PFNUUk9LRT47PFNNQUxMPjtJR05PUkUKKzxVMDEyMj4JPFUwMDQ3Pjs8Q0VESUxMQT47PENBUElUQUw+O0lHTk9SRQorPFUwMTIzPgk8VTAwNDc+OzxDRURJTExBPjs8U01BTEw+O0lHTk9SRQorPFUxRTIwPgk8VTAwNDc+OzxNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUyMT4JPFUwMDQ3Pjs8TUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPGc4PgorPFUwMTFFPgk8VTAxMUU+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMUY+CTxVMDExRT47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAwNDg+CTxVMDA0OD47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2OD4JPFUwMDQ4Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMUUyQT4JPFUwMDQ4Pjs8QlJFVkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUyQj4JPFUwMDQ4Pjs8QlJFVkUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxMjQ+CTxVMDA0OD47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEyNT4JPFUwMDQ4Pjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMUUyNj4JPFUwMDQ4Pjs8RElBRVJFU0lTPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMjc+CTxVMDA0OD47PERJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMUUyMj4JPFUwMDQ4Pjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMjM+CTxVMDA0OD47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUUyND4JPFUwMDQ4Pjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMjU+CTxVMDA0OD47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDEyNj4JPFUwMDQ4Pjs8U1RST0tFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMjc+CTxVMDA0OD47PFNUUk9LRT47PFNNQUxMPjtJR05PUkUKKzxVMUUyOD4JPFUwMDQ4Pjs8Q0VESUxMQT47PENBUElUQUw+O0lHTk9SRQorPFUxRTI5Pgk8VTAwNDg+OzxDRURJTExBPjs8U01BTEw+O0lHTk9SRQorPGg4PgorPFUwMDQ5Pgk8VTAxMzE+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxMzE+CTxVMDEzMT47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMzA+CTxVMDA2OT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2OT4JPFUwMDY5Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDBDRD4JPFUwMDY5Pjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFRD4JPFUwMDY5Pjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAwQ0M+CTxVMDA2OT47PEdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRUM+CTxVMDA2OT47PEdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjA4Pgk8VTAwNjk+OzxET1VCTEUtR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIwOT4JPFUwMDY5Pjs8RE9VQkxFLUdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTJDPgk8VTAwNjk+OzxCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTJEPgk8VTAwNjk+OzxCUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIwQT4JPFUwMDY5Pjs8SU5WRVJURUQtQlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIwQj4JPFUwMDY5Pjs8SU5WRVJURUQtQlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAwQ0U+CTxVMDA2OT47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBFRT4JPFUwMDY5Pjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMDFDRj4JPFUwMDY5Pjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFEMD4JPFUwMDY5Pjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAwQ0Y+CTxVMDA2OT47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUwMEVGPgk8VTAwNjk+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFMkU+CTxVMDA2OT47PERJQUVSRVNJUytBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTJGPgk8VTAwNjk+OzxESUFFUkVTSVMrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFQzg+CTxVMDA2OT47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDOT4JPFUwMDY5Pjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMDEyOD4JPFUwMDY5Pjs8VElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEyOT4JPFUwMDY5Pjs8VElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFMkM+CTxVMDA2OT47PFRJTERFLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMkQ+CTxVMDA2OT47PFRJTERFLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUxRUNBPgk8VTAwNjk+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVDQj4JPFUwMDY5Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTJFPgk8VTAwNjk+OzxPR09ORUs+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEyRj4JPFUwMDY5Pjs8T0dPTkVLPjs8U01BTEw+O0lHTk9SRQorPFUwMTJBPgk8VTAwNjk+OzxNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEyQj4JPFUwMDY5Pjs8TUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPGk4PgorPFUwMTMyPgkiPFUwMDY5PjxVMDA0QT4iOyI8VTAxMzI+PFUwMTMyPiI7IjxDQVBJVEFMPjxDQVBJVEFMPiI7SUdOT1JFCis8VTAxMzM+CSI8VTAwNjk+PFUwMDRBPiI7IjxVMDEzMj48VTAxMzI+IjsiPFNNQUxMPjxTTUFMTD4iO0lHTk9SRQorPFUwMDRBPgk8VTAwNEE+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNkE+CTxVMDA0QT47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMzQ+CTxVMDA0QT47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDEzNT4JPFUwMDRBPjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxqOD4KKzxVMDA0Qj4JPFUwMDRCPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDZCPgk8VTAwNEI+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUxRTMwPgk8VTAwNEI+OzxBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTMxPgk8VTAwNEI+OzxBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMDFFOD4JPFUwMDRCPjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFFOT4JPFUwMDRCPjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAxOTg+CTxVMDA0Qj47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE5OT4JPFUwMDRCPjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUUzMj4JPFUwMDRCPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMzM+CTxVMDA0Qj47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDEzNj4JPFUwMDRCPjs8Q0VESUxMQT47PENBUElUQUw+O0lHTk9SRQorPFUwMTM3Pgk8VTAwNEI+OzxDRURJTExBPjs8U01BTEw+O0lHTk9SRQorPFUxRTM0Pgk8VTAwNEI+OzxMSU5FLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMzU+CTxVMDA0Qj47PExJTkUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8azg+Cis8VTAxMzg+CTxVMDA0Qj47PFUwMTM4Pjs8U01BTEw+O0lHTk9SRQorPFUwMDRDPgk8VTAwNEM+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNkM+CTxVMDA0Qz47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxMzk+CTxVMDA0Qz47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxM0E+CTxVMDA0Qz47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMTNEPgk8VTAwNEM+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTNFPgk8VTAwNEM+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDEzRj4JPFUwMDRDPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNDA+CTxVMDA0Qz47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUUzNj4JPFUwMDRDPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMzc+CTxVMDA0Qz47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDE0MT4JPFUwMDRDPjs8U1RST0tFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNDI+CTxVMDA0Qz47PFNUUk9LRT47PFNNQUxMPjtJR05PUkUKKzxVMDEzQj4JPFUwMDRDPjs8Q0VESUxMQT47PENBUElUQUw+O0lHTk9SRQorPFUwMTNDPgk8VTAwNEM+OzxDRURJTExBPjs8U01BTEw+O0lHTk9SRQorPFUxRTM4Pgk8VTAwNEM+OzxNQUNST04rRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFMzk+CTxVMDA0Qz47PE1BQ1JPTitET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTFFM0M+CTxVMDA0Qz47PE1BQ1JPTitDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFM0Q+CTxVMDA0Qz47PE1BQ1JPTitDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRTNBPgk8VTAwNEM+OzxMSU5FLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFM0I+CTxVMDA0Qz47PExJTkUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8bDg+Cis8VTAwNEQ+CTxVMDA0RD47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2RD4JPFUwMDREPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMUUzRT4JPFUwMDREPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUUzRj4JPFUwMDREPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFNDA+CTxVMDA0RD47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRTQxPgk8VTAwNEQ+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFNDI+CTxVMDA0RD47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTQzPgk8VTAwNEQ+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8bTg+Cis8VTAwNEU+CTxVMDA0RT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA2RT4JPFUwMDRFPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDE0Mz4JPFUwMDRFPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0ND4JPFUwMDRFPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAxNDc+CTxVMDA0RT47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNDg+CTxVMDA0RT47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMEQxPgk8VTAwNEU+OzxUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUwMEYxPgk8VTAwNEU+OzxUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUU0ND4JPFUwMDRFPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNDU+CTxVMDA0RT47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUU0Nj4JPFUwMDRFPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNDc+CTxVMDA0RT47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDE0NT4JPFUwMDRFPjs8Q0VESUxMQT47PENBUElUQUw+O0lHTk9SRQorPFUwMTQ2Pgk8VTAwNEU+OzxDRURJTExBPjs8U01BTEw+O0lHTk9SRQorPFUxRTRBPgk8VTAwNEU+OzxNQUNST04rQ0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUxRTRCPgk8VTAwNEU+OzxNQUNST04rQ0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMUU0OD4JPFUwMDRFPjs8TElORS1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTQ5Pgk8VTAwNEU+OzxMSU5FLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTQ5Pgk8VTAwNEU+OzxQUkVDRURFRC1CWS1BUE9TVFJPUEhFPjs8U01BTEw+O0lHTk9SRQorPG44PgorPFUwMTRBPgkiPFUwMDRFPjxVMDA0Nz4iOyI8VTAxNEE+PFUwMTRBPiI7IjxDQVBJVEFMPjxDQVBJVEFMPiI7SUdOT1JFCis8VTAxNEI+CSI8VTAwNEU+PFUwMDQ3PiI7IjxVMDE0QT48VTAxNEE+IjsiPFNNQUxMPjxTTUFMTD4iO0lHTk9SRQorPFUwMDRGPgk8VTAwNEY+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNkY+CTxVMDA0Rj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAwQkE+CTxVMDA0Rj47PE5PTkU+OzxVMDBCQT47SUdOT1JFCis8VTAwRDM+CTxVMDA0Rj47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRjM+CTxVMDA0Rj47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMEQyPgk8VTAwNEY+OzxHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMEYyPgk8VTAwNEY+OzxHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIwQz4JPFUwMDRGPjs8RE9VQkxFLUdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMEQ+CTxVMDA0Rj47PERPVUJMRS1HUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDE0RT4JPFUwMDRGPjs8QlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE0Rj4JPFUwMDRGPjs8QlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMEU+CTxVMDA0Rj47PElOVkVSVEVELUJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMEY+CTxVMDA0Rj47PElOVkVSVEVELUJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMEQ0Pgk8VTAwNEY+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRjQ+CTxVMDA0Rj47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTFFRDA+CTxVMDA0Rj47PENJUkNVTUZMRVgrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVEMT4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVEMj4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRUQzPgk8VTAwNEY+OzxDSVJDVU1GTEVYK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUxRUQ0Pgk8VTAwNEY+OzxDSVJDVU1GTEVYK0hPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVENT4JPFUwMDRGPjs8Q0lSQ1VNRkxFWCtIT09LPjs8U01BTEw+O0lHTk9SRQorPFUxRUQ2Pgk8VTAwNEY+OzxDSVJDVU1GTEVYK1RJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRDc+CTxVMDA0Rj47PENJUkNVTUZMRVgrVElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFRDg+CTxVMDA0Rj47PENJUkNVTUZMRVgrRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRDk+CTxVMDA0Rj47PENJUkNVTUZMRVgrRE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMUQxPgk8VTAwNEY+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUQyPgk8VTAwNEY+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMDE1MD4JPFUwMDRGPjs8RE9VQkxFLUFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNTE+CTxVMDA0Rj47PERPVUJMRS1BQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUVDRT4JPFUwMDRGPjs8SE9PSz47PENBUElUQUw+O0lHTk9SRQorPFUxRUNGPgk8VTAwNEY+OzxIT09LPjs8U01BTEw+O0lHTk9SRQorPFUwMEQ1Pgk8VTAwNEY+OzxUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUwMEY1Pgk8VTAwNEY+OzxUSUxERT47PFNNQUxMPjtJR05PUkUKKzxVMUU0Qz4JPFUwMDRGPjs8VElMREUrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU0RD4JPFUwMDRGPjs8VElMREUrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFNEU+CTxVMDA0Rj47PFRJTERFK0RJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUxRTRGPgk8VTAwNEY+OzxUSUxERStESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFQ0M+CTxVMDA0Rj47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUNEPgk8VTAwNEY+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAwRDg+CTxVMDA0Rj47PFNUUk9LRT47PENBUElUQUw+O0lHTk9SRQorPFUwMEY4Pgk8VTAwNEY+OzxTVFJPS0U+OzxTTUFMTD47SUdOT1JFCis8VTAxRkU+CTxVMDA0Rj47PFNUUk9LRStBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUwMUZGPgk8VTAwNEY+OzxTVFJPS0UrQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAxRUE+CTxVMDA0Rj47PE9HT05FSz47PENBUElUQUw+O0lHTk9SRQorPFUwMUVCPgk8VTAwNEY+OzxPR09ORUs+OzxTTUFMTD47SUdOT1JFCis8VTAxRUM+CTxVMDA0Rj47PE9HT05FSytNQUNST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFFRD4JPFUwMDRGPjs8T0dPTkVLK01BQ1JPTj47PFNNQUxMPjtJR05PUkUKKzxVMDE0Qz4JPFUwMDRGPjs8TUFDUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNEQ+CTxVMDA0Rj47PE1BQ1JPTj47PFNNQUxMPjtJR05PUkUKKzxVMUU1Mj4JPFUwMDRGPjs8TUFDUk9OK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNTM+CTxVMDA0Rj47PE1BQ1JPTitBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUU1MD4JPFUwMDRGPjs8TUFDUk9OK0dSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNTE+CTxVMDA0Rj47PE1BQ1JPTitHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDFBMD4JPFUwMDRGPjs8SE9STj47PENBUElUQUw+O0lHTk9SRQorPFUwMUExPgk8VTAwNEY+OzxIT1JOPjs8U01BTEw+O0lHTk9SRQorPFUxRURBPgk8VTAwNEY+OzxIT1JOK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFREI+CTxVMDA0Rj47PEhPUk4rQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFREM+CTxVMDA0Rj47PEhPUk4rR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVERD4JPFUwMDRGPjs8SE9STitHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMUVERT4JPFUwMDRGPjs8SE9STitIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFREY+CTxVMDA0Rj47PEhPUk4rSE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVFMD4JPFUwMDRGPjs8SE9STitUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUxRUUxPgk8VTAwNEY+OzxIT1JOK1RJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRUUyPgk8VTAwNEY+OzxIT1JOK0RPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUUzPgk8VTAwNEY+OzxIT1JOK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxvOD4KKzxVMDBENj4JPFUwMEQ2Pjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMEY2Pgk8VTAwRDY+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMTUyPgkiPFUwMDRGPjxVMDA0NT4iOyI8VTAxNTI+PFUwMTUyPiI7IjxDQVBJVEFMPjxDQVBJVEFMPiI7SUdOT1JFCis8VTAxNTM+CSI8VTAwNEY+PFUwMDQ1PiI7IjxVMDE1Mj48VTAxNTI+IjsiPFNNQUxMPjxTTUFMTD4iO0lHTk9SRQorPFUwMDUwPgk8VTAwNTA+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzA+CTxVMDA1MD47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFNTQ+CTxVMDA1MD47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNTU+CTxVMDA1MD47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTU2Pgk8VTAwNTA+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU1Nz4JPFUwMDUwPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPHA4PgorPFUwMDUxPgk8VTAwNTE+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzE+CTxVMDA1MT47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8cTg+Cis8VTAwNTI+CTxVMDA1Mj47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3Mj4JPFUwMDUyPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDE1ND4JPFUwMDUyPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE1NT4JPFUwMDUyPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAyMTA+CTxVMDA1Mj47PERPVUJMRS1HUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMjExPgk8VTAwNTI+OzxET1VCTEUtR1JBVkU+OzxTTUFMTD47SUdOT1JFCis8VTAyMTI+CTxVMDA1Mj47PElOVkVSVEVELUJSRVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAyMTM+CTxVMDA1Mj47PElOVkVSVEVELUJSRVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTU4Pgk8VTAwNTI+OzxDQVJPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTU5Pgk8VTAwNTI+OzxDQVJPTj47PFNNQUxMPjtJR05PUkUKKzxVMUU1OD4JPFUwMDUyPjs8RE9UPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNTk+CTxVMDA1Mj47PERPVD47PFNNQUxMPjtJR05PUkUKKzxVMUU1QT4JPFUwMDUyPjs8RE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNUI+CTxVMDA1Mj47PERPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxVMDE1Nj4JPFUwMDUyPjs8Q0VESUxMQT47PENBUElUQUw+O0lHTk9SRQorPFUwMTU3Pgk8VTAwNTI+OzxDRURJTExBPjs8U01BTEw+O0lHTk9SRQorPFUxRTVDPgk8VTAwNTI+OzxNQUNST04rRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNUQ+CTxVMDA1Mj47PE1BQ1JPTitET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTFFNUU+CTxVMDA1Mj47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU1Rj4JPFUwMDUyPjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzxyOD4KKzxVMDA1Mz4JPFUwMDUzPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMDczPgk8VTAwNTM+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFVGQjA2PgkiPFUwMDUzPjxVMDA1ND4iOyI8Tk9ORT48Tk9ORT4iOyI8VUZCMDY+PFVGQjA2PiI7SUdOT1JFCis8VTAxNUE+CTxVMDA1Mz47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNUI+CTxVMDA1Mz47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTY0Pgk8VTAwNTM+OzxBQ1VURStET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2NT4JPFUwMDUzPjs8QUNVVEUrRE9UPjs8U01BTEw+O0lHTk9SRQorPFUwMTVDPgk8VTAwNTM+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNUQ+CTxVMDA1Mz47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTAxNjA+CTxVMDA1Mz47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNjE+CTxVMDA1Mz47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRTY2Pgk8VTAwNTM+OzxDQVJPTitET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2Nz4JPFUwMDUzPjs8Q0FST04rRE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTYwPgk8VTAwNTM+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2MT4JPFUwMDUzPjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTYyPgk8VTAwNTM+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2Mz4JPFUwMDUzPjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUxRTY4Pgk8VTAwNTM+OzxET1QrRE9ULUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNjk+CTxVMDA1Mz47PERPVCtET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8czg+Cis8VTAxNUU+CTxVMDE1RT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE1Rj4JPFUwMTVFPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDE3Rj4JPFUwMDUzPjs8VTAxN0Y+OzxTTUFMTD47SUdOT1JFCis8VTAwREY+CSI8VTAwNTM+PFUwMDUzPiI7IjxOT05FPjxOT05FPiI7IjxTTUFMTD48VTAwREY+IjtJR05PUkUKKzxVRkIwNT4JIjxVMDA1Mz48VTAwNTQ+IjsiPE5PTkU+PE5PTkU+IjsiPFVGQjA1PjxVRkIwNT4iO0lHTk9SRQorPFUwMDU0Pgk8VTAwNTQ+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzQ+CTxVMDA1ND47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTAxNjQ+CTxVMDA1ND47PENBUk9OPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNjU+CTxVMDA1ND47PENBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUxRTZBPgk8VTAwNTQ+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2Qj4JPFUwMDU0Pjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTZDPgk8VTAwNTQ+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU2RD4JPFUwMDU0Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUwMTY2Pgk8VTAwNTQ+OzxTVFJPS0U+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE2Nz4JPFUwMDU0Pjs8U1RST0tFPjs8U01BTEw+O0lHTk9SRQorPFUwMTYyPgk8VTAwNTQ+OzxDRURJTExBPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNjM+CTxVMDA1ND47PENFRElMTEE+OzxTTUFMTD47SUdOT1JFCis8VTFFNzA+CTxVMDA1ND47PE1BQ1JPTitDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNzE+CTxVMDA1ND47PE1BQ1JPTitDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRTZFPgk8VTAwNTQ+OzxMSU5FLUJFTE9XPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFNkY+CTxVMDA1ND47PExJTkUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8dDg+Cis8VTAwREU+CSI8VTAwNTQ+PFUwMDQ4PiI7IjxVMDBERT48VTAwREU+IjsiPENBUElUQUw+PENBUElUQUw+IjtJR05PUkUKKzxVMDBGRT4JIjxVMDA1ND48VTAwNDg+IjsiPFUwMERFPjxVMDBERT4iOyI8U01BTEw+PFNNQUxMPiI7SUdOT1JFCis8VTAwNTU+CTxVMDA1NT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3NT4JPFUwMDU1Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDBEQT4JPFUwMDU1Pjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGQT4JPFUwMDU1Pjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTAwRDk+CTxVMDA1NT47PEdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwRjk+CTxVMDA1NT47PEdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMjE0Pgk8VTAwNTU+OzxET1VCTEUtR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIxNT4JPFUwMDU1Pjs8RE9VQkxFLUdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTZDPgk8VTAwNTU+OzxCUkVWRT47PENBUElUQUw+O0lHTk9SRQorPFUwMTZEPgk8VTAwNTU+OzxCUkVWRT47PFNNQUxMPjtJR05PUkUKKzxVMDIxNj4JPFUwMDU1Pjs8SU5WRVJURUQtQlJFVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDIxNz4JPFUwMDU1Pjs8SU5WRVJURUQtQlJFVkU+OzxTTUFMTD47SUdOT1JFCis8VTAwREI+CTxVMDA1NT47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGQj4JPFUwMDU1Pjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMDFEMz4JPFUwMDU1Pjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFEND4JPFUwMDU1Pjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAxNkU+CTxVMDA1NT47PFJJTkc+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE2Rj4JPFUwMDU1Pjs8UklORz47PFNNQUxMPjtJR05PUkUKKzxVMDFENT4JPFUwMDU1Pjs8RElBRVJFU0lTK01BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMUQ2Pgk8VTAwNTU+OzxESUFFUkVTSVMrTUFDUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMUQ3Pgk8VTAwNTU+OzxESUFFUkVTSVMrQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFEOD4JPFUwMDU1Pjs8RElBRVJFU0lTK0FDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUwMURCPgk8VTAwNTU+OzxESUFFUkVTSVMrR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFEQz4JPFUwMDU1Pjs8RElBRVJFU0lTK0dSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMUQ5Pgk8VTAwNTU+OzxESUFFUkVTSVMrQ0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDFEQT4JPFUwMDU1Pjs8RElBRVJFU0lTK0NBUk9OPjs8U01BTEw+O0lHTk9SRQorPFUwMTcwPgk8VTAwNTU+OzxET1VCTEUtQUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE3MT4JPFUwMDU1Pjs8RE9VQkxFLUFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRUU2Pgk8VTAwNTU+OzxIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRTc+CTxVMDA1NT47PEhPT0s+OzxTTUFMTD47SUdOT1JFCis8VTAxNjg+CTxVMDA1NT47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNjk+CTxVMDA1NT47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRTc4Pgk8VTAwNTU+OzxUSUxERStBQ1VURT47PENBUElUQUw+O0lHTk9SRQorPFUxRTc5Pgk8VTAwNTU+OzxUSUxERStBQ1VURT47PFNNQUxMPjtJR05PUkUKKzxVMUU3ND4JPFUwMDU1Pjs8VElMREUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU3NT4JPFUwMDU1Pjs8VElMREUtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTFFRTQ+CTxVMDA1NT47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUU1Pgk8VTAwNTU+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxNzI+CTxVMDA1NT47PE9HT05FSz47PENBUElUQUw+O0lHTk9SRQorPFUwMTczPgk8VTAwNTU+OzxPR09ORUs+OzxTTUFMTD47SUdOT1JFCis8VTAxNkE+CTxVMDA1NT47PE1BQ1JPTj47PENBUElUQUw+O0lHTk9SRQorPFUwMTZCPgk8VTAwNTU+OzxNQUNST04+OzxTTUFMTD47SUdOT1JFCis8VTFFN0E+CTxVMDA1NT47PE1BQ1JPTitESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU3Qj4JPFUwMDU1Pjs8TUFDUk9OK0RJQUVSRVNJUz47PFNNQUxMPjtJR05PUkUKKzxVMUU3Mj4JPFUwMDU1Pjs8TUFDUk9OK0RJQUVSRVNJUy1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTczPgk8VTAwNTU+OzxNQUNST04rRElBRVJFU0lTLUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPFUxRTc2Pgk8VTAwNTU+OzxNQUNST04rQ0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUxRTc3Pgk8VTAwNTU+OzxNQUNST04rQ0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMDFBRj4JPFUwMDU1Pjs8SE9STj47PENBUElUQUw+O0lHTk9SRQorPFUwMUIwPgk8VTAwNTU+OzxIT1JOPjs8U01BTEw+O0lHTk9SRQorPFUxRUU4Pgk8VTAwNTU+OzxIT1JOK0FDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRTk+CTxVMDA1NT47PEhPUk4rQUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFRUE+CTxVMDA1NT47PEhPUk4rR1JBVkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVFQj4JPFUwMDU1Pjs8SE9STitHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMUVFQz4JPFUwMDU1Pjs8SE9STitIT09LPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRUQ+CTxVMDA1NT47PEhPUk4rSE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVFRT4JPFUwMDU1Pjs8SE9STitUSUxERT47PENBUElUQUw+O0lHTk9SRQorPFUxRUVGPgk8VTAwNTU+OzxIT1JOK1RJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRUYwPgk8VTAwNTU+OzxIT1JOK0RPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUYxPgk8VTAwNTU+OzxIT1JOK0RPVC1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzx1OD4KKzxVMDBEQz4JPFUwMERDPjs8Tk9ORT47PENBUElUQUw+O0lHTk9SRQorPFUwMEZDPgk8VTAwREM+OzxOT05FPjs8U01BTEw+O0lHTk9SRQorPFUwMDU2Pgk8VTAwNTY+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzY+CTxVMDA1Nj47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFN0M+CTxVMDA1Nj47PFRJTERFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFN0Q+CTxVMDA1Nj47PFRJTERFPjs8U01BTEw+O0lHTk9SRQorPFUxRTdFPgk8VTAwNTY+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU3Rj4JPFUwMDU2Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPHY4PgorPFUwMDU3Pgk8VTAwNTc+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzc+CTxVMDA1Nz47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFODI+CTxVMDA1Nz47PEFDVVRFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFODM+CTxVMDA1Nz47PEFDVVRFPjs8U01BTEw+O0lHTk9SRQorPFUxRTgwPgk8VTAwNTc+OzxHUkFWRT47PENBUElUQUw+O0lHTk9SRQorPFUxRTgxPgk8VTAwNTc+OzxHUkFWRT47PFNNQUxMPjtJR05PUkUKKzxVMDE3ND4JPFUwMDU3Pjs8Q0lSQ1VNRkxFWD47PENBUElUQUw+O0lHTk9SRQorPFUwMTc1Pgk8VTAwNTc+OzxDSVJDVU1GTEVYPjs8U01BTEw+O0lHTk9SRQorPFUxRTg0Pgk8VTAwNTc+OzxESUFFUkVTSVM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU4NT4JPFUwMDU3Pjs8RElBRVJFU0lTPjs8U01BTEw+O0lHTk9SRQorPFUxRTg2Pgk8VTAwNTc+OzxET1Q+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU4Nz4JPFUwMDU3Pjs8RE9UPjs8U01BTEw+O0lHTk9SRQorPFUxRTg4Pgk8VTAwNTc+OzxET1QtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU4OT4JPFUwMDU3Pjs8RE9ULUJFTE9XPjs8U01BTEw+O0lHTk9SRQorPHc4PgorPFUwMDU4Pgk8VTAwNTg+OzxOT05FPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAwNzg+CTxVMDA1OD47PE5PTkU+OzxTTUFMTD47SUdOT1JFCis8VTFFOEM+CTxVMDA1OD47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUxRThEPgk8VTAwNTg+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFOEE+CTxVMDA1OD47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRThCPgk8VTAwNTg+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8eDg+Cis8VTAwNTk+CTxVMDA1OT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3OT4JPFUwMDU5Pjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDBERD4JPFUwMDU5Pjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDBGRD4JPFUwMDU5Pjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFRjI+CTxVMDA1OT47PEdSQVZFPjs8Q0FQSVRBTD47SUdOT1JFCis8VTFFRjM+CTxVMDA1OT47PEdSQVZFPjs8U01BTEw+O0lHTk9SRQorPFUwMTc2Pgk8VTAwNTk+OzxDSVJDVU1GTEVYPjs8Q0FQSVRBTD47SUdOT1JFCis8VTAxNzc+CTxVMDA1OT47PENJUkNVTUZMRVg+OzxTTUFMTD47SUdOT1JFCis8VTAxNzg+CTxVMDA1OT47PERJQUVSRVNJUz47PENBUElUQUw+O0lHTk9SRQorPFUwMEZGPgk8VTAwNTk+OzxESUFFUkVTSVM+OzxTTUFMTD47SUdOT1JFCis8VTFFRjY+CTxVMDA1OT47PEhPT0s+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVGNz4JPFUwMDU5Pjs8SE9PSz47PFNNQUxMPjtJR05PUkUKKzxVMUVGOD4JPFUwMDU5Pjs8VElMREU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUVGOT4JPFUwMDU5Pjs8VElMREU+OzxTTUFMTD47SUdOT1JFCis8VTFFOEU+CTxVMDA1OT47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUxRThGPgk8VTAwNTk+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFRjQ+CTxVMDA1OT47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRUY1Pgk8VTAwNTk+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8eTg+Cis8VTAwNUE+CTxVMDA1QT47PE5PTkU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDA3QT4JPFUwMDVBPjs8Tk9ORT47PFNNQUxMPjtJR05PUkUKKzxVMDE3OT4JPFUwMDVBPjs8QUNVVEU+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE3QT4JPFUwMDVBPjs8QUNVVEU+OzxTTUFMTD47SUdOT1JFCis8VTFFOTA+CTxVMDA1QT47PENJUkNVTUZMRVg+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU5MT4JPFUwMDVBPjs8Q0lSQ1VNRkxFWD47PFNNQUxMPjtJR05PUkUKKzxVMDE3RD4JPFUwMDVBPjs8Q0FST04+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDE3RT4JPFUwMDVBPjs8Q0FST04+OzxTTUFMTD47SUdOT1JFCis8VTAxN0I+CTxVMDA1QT47PERPVD47PENBUElUQUw+O0lHTk9SRQorPFUwMTdDPgk8VTAwNUE+OzxET1Q+OzxTTUFMTD47SUdOT1JFCis8VTFFOTI+CTxVMDA1QT47PERPVC1CRUxPVz47PENBUElUQUw+O0lHTk9SRQorPFUxRTkzPgk8VTAwNUE+OzxET1QtQkVMT1c+OzxTTUFMTD47SUdOT1JFCis8VTAxQjU+CTxVMDA1QT47PFNUUk9LRT47PENBUElUQUw+O0lHTk9SRQorPFUwMUI2Pgk8VTAwNUE+OzxTVFJPS0U+OzxTTUFMTD47SUdOT1JFCis8VTFFOTQ+CTxVMDA1QT47PExJTkUtQkVMT1c+OzxDQVBJVEFMPjtJR05PUkUKKzxVMUU5NT4JPFUwMDVBPjs8TElORS1CRUxPVz47PFNNQUxMPjtJR05PUkUKKzx6OD4KKzxVMDM5MT4JPFUwMzkxPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDM4Nj4JPFUwMzkxPjs8Q0FQSVRBTD47PFRPTk9TPjtJR05PUkUKKzxVMDNCMT4JPFUwMzkxPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQUM+CTxVMDM5MT47PFNNQUxMPjs8VE9OT1M+O0lHTk9SRQorPFUwMzkyPgk8VTAzOTI+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0IyPgk8VTAzOTI+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDM5Mz4JPFUwMzkzPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCMz4JPFUwMzkzPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOTQ+CTxVMDM5ND47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQjQ+CTxVMDM5ND47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzk1Pgk8VTAzOTU+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzg4Pgk8VTAzOTU+OzxDQVBJVEFMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0I1Pgk8VTAzOTU+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBRD4JPFUwMzk1Pjs8U01BTEw+OzxUT05PUz47SUdOT1JFCis8VTAzOTY+CTxVMDM5Nj47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQjY+CTxVMDM5Nj47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzk3Pgk8VTAzOTc+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzg5Pgk8VTAzOTc+OzxDQVBJVEFMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0I3Pgk8VTAzOTc+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBRT4JPFUwMzk3Pjs8U01BTEw+OzxUT05PUz47SUdOT1JFCis8VTAzOTg+CTxVMDM5OD47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQjg+CTxVMDM5OD47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzk5Pgk8VTAzOTk+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzhBPgk8VTAzOTk+OzxDQVBJVEFMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0FBPgk8VTAzOTk+OzxDQVBJVEFMPjs8RElBTFlUSUNBPjtJR05PUkUKKzxVMDNCOT4JPFUwMzk5Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQUY+CTxVMDM5OT47PFNNQUxMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0NBPgk8VTAzOTk+OzxTTUFMTD47PERJQUxZVElDQT47SUdOT1JFCis8VTAzOTA+CTxVMDM5OT47PFNNQUxMPjs8RElBTFlUSUNBK1RPTk9TPjtJR05PUkUKKzxVMDM5QT4JPFUwMzlBPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCQT4JPFUwMzlBPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOUI+CTxVMDM5Qj47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQkI+CTxVMDM5Qj47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzlDPgk8VTAzOUM+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0JDPgk8VTAzOUM+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDM5RD4JPFUwMzlEPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNCRD4JPFUwMzlEPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzOUU+CTxVMDM5RT47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQkU+CTxVMDM5RT47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzlGPgk8VTAzOUY+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwMzhDPgk8VTAzOUY+OzxDQVBJVEFMPjs8VE9OT1M+O0lHTk9SRQorPFUwM0JGPgk8VTAzOUY+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDQz4JPFUwMzlGPjs8U01BTEw+OzxUT05PUz47SUdOT1JFCis8VTAzQTA+CTxVMDNBMD47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzA+CTxVMDNBMD47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0ExPgk8VTAzQTE+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0MxPgk8VTAzQTE+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBMz4JPFUwM0EzPjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDMz4JPFUwM0EzPjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzI+CTxVMDNBMz47PFNNQUxMPjs8VTAzQzI+O0lHTk9SRQorPFUwM0E0Pgk8VTAzQTQ+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0M0Pgk8VTAzQTQ+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBNT4JPFUwM0E1Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDM4RT4JPFUwM0E1Pjs8Q0FQSVRBTD47PFRPTk9TPjtJR05PUkUKKzxVMDNBQj4JPFUwM0E1Pjs8Q0FQSVRBTD47PERJQUxZVElDQT47SUdOT1JFCis8VTAzQzU+CTxVMDNBNT47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0NEPgk8VTAzQTU+OzxTTUFMTD47PFRPTk9TPjtJR05PUkUKKzxVMDNDQj4JPFUwM0E1Pjs8U01BTEw+OzxESUFMWVRJQ0E+O0lHTk9SRQorPFUwM0IwPgk8VTAzQTU+OzxTTUFMTD47PERJQUxZVElDQStUT05PUz47SUdOT1JFCis8VTAzQTY+CTxVMDNBNj47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzQzY+CTxVMDNBNj47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0E3Pgk8VTAzQTc+OzxDQVBJVEFMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0M3Pgk8VTAzQTc+OzxTTUFMTD47PEdSRUVLPjtJR05PUkUKKzxVMDNBOD4JPFUwM0E4Pjs8Q0FQSVRBTD47PEdSRUVLPjtJR05PUkUKKzxVMDNDOD4JPFUwM0E4Pjs8U01BTEw+OzxHUkVFSz47SUdOT1JFCis8VTAzQTk+CTxVMDNBOT47PENBUElUQUw+OzxHUkVFSz47SUdOT1JFCis8VTAzOEY+CTxVMDNBOT47PENBUElUQUw+OzxUT05PUz47SUdOT1JFCis8VTAzQzk+CTxVMDNBOT47PFNNQUxMPjs8R1JFRUs+O0lHTk9SRQorPFUwM0NFPgk8VTAzQTk+OzxTTUFMTD47PFRPTk9TPjtJR05PUkUKKzxVMDQxMD4JPFUwNDEwPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzMD4JPFUwNDEwPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTE+CTxVMDQxMT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0MzE+CTxVMDQxMT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDEyPgk8VTA0MTI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDMyPgk8VTA0MTI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxMz4JPFUwNDEzPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzMz4JPFUwNDEzPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MDM+CTxVMDQwMz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NTM+CTxVMDQwMz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDkwPgk8VTA0OTA+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDkxPgk8VTA0OTA+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxND4JPFUwNDE0Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzND4JPFUwNDE0Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MDI+CTxVMDQwMj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NTI+CTxVMDQwMj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDE1Pgk8VTA0MTU+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDM1Pgk8VTA0MTU+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwMT4JPFUwNDAxPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1MT4JPFUwNDAxPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MDQ+CTxVMDQwND47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NTQ+CTxVMDQwND47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDE2Pgk8VTA0MTY+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDM2Pgk8VTA0MTY+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxNz4JPFUwNDE3Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzNz4JPFUwNDE3Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MTg+CTxVMDQxOD47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0Mzg+CTxVMDQxOD47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDA2Pgk8VTA0MDY+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDU2Pgk8VTA0MDY+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwNz4JPFUwNDA3Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1Nz4JPFUwNDA3Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MDg+CTxVMDQwOD47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NTg+CTxVMDQwOD47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDE5Pgk8VTA0MTk+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDM5Pgk8VTA0MTk+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQxQT4JPFUwNDFBPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQzQT4JPFUwNDFBPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MEM+CTxVMDQwQz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NUM+CTxVMDQwQz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDFCPgk8VTA0MUI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDNCPgk8VTA0MUI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwOT4JPFUwNDA5Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1OT4JPFUwNDA5Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MUM+CTxVMDQxQz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0M0M+CTxVMDQxQz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDFEPgk8VTA0MUQ+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDNEPgk8VTA0MUQ+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwQT4JPFUwNDBBPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1QT4JPFUwNDBBPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MUU+CTxVMDQxRT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0M0U+CTxVMDQxRT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDFGPgk8VTA0MUY+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDNGPgk8VTA0MUY+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyMD4JPFUwNDIwPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0MD4JPFUwNDIwPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MjE+CTxVMDQyMT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDE+CTxVMDQyMT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDIyPgk8VTA0MjI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDQyPgk8VTA0MjI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwQj4JPFUwNDBCPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1Qj4JPFUwNDBCPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MjM+CTxVMDQyMz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDM+CTxVMDQyMz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDBFPgk8VTA0MEU+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDVFPgk8VTA0MEU+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyND4JPFUwNDI0Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0ND4JPFUwNDI0Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MjU+CTxVMDQyNT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDU+CTxVMDQyNT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDI2Pgk8VTA0MjY+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDQ2Pgk8VTA0MjY+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQwNT4JPFUwNDA1Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ1NT4JPFUwNDA1Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0Mjc+CTxVMDQyNz47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDc+CTxVMDQyNz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDBGPgk8VTA0MEY+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDVGPgk8VTA0MEY+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyOD4JPFUwNDI4Pjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0OD4JPFUwNDI4Pjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0Mjk+CTxVMDQyOT47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NDk+CTxVMDQyOT47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDRBPgk8VTA0NEE+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyQT4JPFUwNDRBPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQyQj4JPFUwNDJCPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0Qj4JPFUwNDJCPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0NEM+CTxVMDQ0Qz47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDJDPgk8VTA0NEM+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDJEPgk8VTA0MkQ+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDREPgk8VTA0MkQ+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQyRT4JPFUwNDJFPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ0RT4JPFUwNDJFPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0MkY+CTxVMDQyRj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NEY+CTxVMDQyRj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDYyPgk8VTA0NjI+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDYzPgk8VTA0NjI+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQ2QT4JPFUwNDZBPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ2Qj4JPFUwNDZBPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA0NzI+CTxVMDQ3Mj47PENZUklMTElDPjs8Q0FQSVRBTD47SUdOT1JFCis8VTA0NzM+CTxVMDQ3Mj47PENZUklMTElDPjs8U01BTEw+O0lHTk9SRQorPFUwNDc0Pgk8VTA0NzQ+OzxDWVJJTExJQz47PENBUElUQUw+O0lHTk9SRQorPFUwNDc1Pgk8VTA0NzQ+OzxDWVJJTExJQz47PFNNQUxMPjtJR05PUkUKKzxVMDQ4MD4JPFUwNDgwPjs8Q1lSSUxMSUM+OzxDQVBJVEFMPjtJR05PUkUKKzxVMDQ4MT4JPFUwNDgwPjs8Q1lSSUxMSUM+OzxTTUFMTD47SUdOT1JFCis8VTA1RDA+CTxVMDVEMD47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEMT4JPFUwNUQxPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQyPgk8VTA1RDI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDM+CTxVMDVEMz47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEND4JPFUwNUQ0PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQ1Pgk8VTA1RDU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDY+CTxVMDVENj47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVENz4JPFUwNUQ3PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUQ4Pgk8VTA1RDg+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RDk+CTxVMDVEOT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVEQT4JPFUwNURBPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNURCPgk8VTA1REI+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1REM+CTxVMDVEQz47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVERD4JPFUwNUREPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNURFPgk8VTA1REU+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1REY+CTxVMDVERj47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFMD4JPFUwNUUwPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUUxPgk8VTA1RTE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTI+CTxVMDVFMj47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFMz4JPFUwNUUzPjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUU0Pgk8VTA1RTQ+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTU+CTxVMDVFNT47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFNj4JPFUwNUU2PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUU3Pgk8VTA1RTc+O0lHTk9SRTtJR05PUkU7SUdOT1JFCis8VTA1RTg+CTxVMDVFOD47SUdOT1JFO0lHTk9SRTtJR05PUkUKKzxVMDVFOT4JPFUwNUU5PjtJR05PUkU7SUdOT1JFO0lHTk9SRQorPFUwNUVBPgk8VTA1RUE+O0lHTk9SRTtJR05PUkU7SUdOT1JFCisKKyUgQXJhYmljIGNvbGxhdGluZworCis8VTA2MEM+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDYwQz4KKzxVMDYxQj4JSUdOT1JFO0lHTk9SRTtJR05PUkU7PFUwNjFCPgorPFUwNjFGPglJR05PUkU7SUdOT1JFO0lHTk9SRTs8VTA2MUY+Cis8VTA2NDA+CUlHTk9SRTtJR05PUkU7SUdOT1JFOzxVMDY0MD4KKworPFUwNjIxPgk8VTA2MjE+OzxVMDYyMT47SUdOT1JFO0lHTk9SRQorPFUwNjIyPgk8VTA2MjI+OzxVMDYyMj47SUdOT1JFO0lHTk9SRQorPFVGRTgyPgk8VTA2MjI+OzxVRkU4Mj47SUdOT1JFO0lHTk9SRQorPFUwNjIzPgk8VTA2MjE+OzxVMDYyMz47SUdOT1JFO0lHTk9SRQorPFVGRTg0Pgk8VTA2MjE+OzxVRkU4ND47SUdOT1JFO0lHTk9SRQorPFUwNjI0Pgk8VTA2MjE+OzxVMDYyND47SUdOT1JFO0lHTk9SRQorPFUwNjI1Pgk8VTA2MjE+OzxVMDYyNT47SUdOT1JFO0lHTk9SRQorPFVGRTg4Pgk8VTA2MjE+OzxVRkU4OD47SUdOT1JFO0lHTk9SRQorPFUwNjI2Pgk8VTA2MjE+OzxVMDYyNj47SUdOT1JFO0lHTk9SRQorPFUwNjcwPgk8VTA2NzA+OzxVMDY3MD47SUdOT1JFO0lHTk9SRQorPFUwNjI3Pgk8VTA2Mjc+OzxVMDYyNz47SUdOT1JFO0lHTk9SRQorPFVGRThEPgk8VTA2Mjc+OzxVRkU4RD47SUdOT1JFO0lHTk9SRQorPFVGRThFPgk8VTA2Mjc+OzxVRkU4RT47SUdOT1JFO0lHTk9SRQorPFVFMDE2Pgk8VTA2Mjc+OzxVRTAxNj47SUdOT1JFO0lHTk9SRQorPFUwNjI4Pgk8VTA2Mjg+OzxVMDYyOD47SUdOT1JFO0lHTk9SRQorPFVGRThGPgk8VTA2Mjg+OzxVRkU4Rj47SUdOT1JFO0lHTk9SRQorPFVGRTkwPgk8VTA2Mjg+OzxVRkU5MD47SUdOT1JFO0lHTk9SRQorPFVGRTkxPgk8VTA2Mjg+OzxVRkU5MT47SUdOT1JFO0lHTk9SRQorPFVGRTkyPgk8VTA2Mjg+OzxVRkU5Mj47SUdOT1JFO0lHTk9SRQorPFUwNjdFPgk8VTA2N0U+OzxVMDY3RT47SUdOT1JFO0lHTk9SRQorPFUwNkE0Pgk8VTA2QTQ+OzxVMDZBND47SUdOT1JFO0lHTk9SRQorPFUwNjI5Pgk8VTA2Mjk+OzxVMDYyOT47SUdOT1JFO0lHTk9SRQorPFVGRTkzPgk8VTA2Mjk+OzxVRkU5Mz47SUdOT1JFO0lHTk9SRQorPFVGRTk0Pgk8VTA2Mjk+OzxVRkU5ND47SUdOT1JFO0lHTk9SRQorPFUwNjJBPgk8VTA2Mjk+OzxVMDYyQT47SUdOT1JFO0lHTk9SRQorPFVGRTk1Pgk8VTA2Mjk+OzxVRkU5NT47SUdOT1JFO0lHTk9SRQorPFVGRTk2Pgk8VTA2Mjk+OzxVRkU5Nj47SUdOT1JFO0lHTk9SRQorPFVGRTk3Pgk8VTA2Mjk+OzxVRkU5Nz47SUdOT1JFO0lHTk9SRQorPFVGRTk4Pgk8VTA2Mjk+OzxVRkU5OD47SUdOT1JFO0lHTk9SRQorPFUwNjJCPgk8VTA2MkI+OzxVMDYyQj47SUdOT1JFO0lHTk9SRQorPFVGRTk5Pgk8VTA2MkI+OzxVRkU5OT47SUdOT1JFO0lHTk9SRQorPFVGRTlBPgk8VTA2MkI+OzxVRkU5QT47SUdOT1JFO0lHTk9SRQorPFVGRTlCPgk8VTA2MkI+OzxVRkU5Qj47SUdOT1JFO0lHTk9SRQorPFVGRTlDPgk8VTA2MkI+OzxVRkU5Qz47SUdOT1JFO0lHTk9SRQorPFUwNjJDPgk8VTA2MkM+OzxVMDYyQz47SUdOT1JFO0lHTk9SRQorPFVGRTlEPgk8VTA2MkM+OzxVRkU5RD47SUdOT1JFO0lHTk9SRQorPFVGRTlFPgk8VTA2MkM+OzxVRkU5RT47SUdOT1JFO0lHTk9SRQorPFVGRTlGPgk8VTA2MkM+OzxVRkU5Rj47SUdOT1JFO0lHTk9SRQorPFVGRUEwPgk8VTA2MkM+OzxVRkVBMD47SUdOT1JFO0lHTk9SRQorPFUwNjJEPgk8VTA2MkQ+OzxVMDYyRD47SUdOT1JFO0lHTk9SRQorPFVGRUExPgk8VTA2MkQ+OzxVRkVBMT47SUdOT1JFO0lHTk9SRQorPFVGRUEyPgk8VTA2MkQ+OzxVRkVBMj47SUdOT1JFO0lHTk9SRQorPFVGRUEzPgk8VTA2MkQ+OzxVRkVBMz47SUdOT1JFO0lHTk9SRQorPFVGRUE0Pgk8VTA2MkQ+OzxVRkVBND47SUdOT1JFO0lHTk9SRQorPFUwNjJFPgk8VTA2MkU+OzxVMDYyRT47SUdOT1JFO0lHTk9SRQorPFVGRUE1Pgk8VTA2MkU+OzxVRkVBNT47SUdOT1JFO0lHTk9SRQorPFVGRUE2Pgk8VTA2MkU+OzxVRkVBNj47SUdOT1JFO0lHTk9SRQorPFVGRUE3Pgk8VTA2MkU+OzxVRkVBNz47SUdOT1JFO0lHTk9SRQorPFVGRUE4Pgk8VTA2MkU+OzxVRkVBOD47SUdOT1JFO0lHTk9SRQorPFUwNjJGPgk8VTA2MkY+OzxVMDYyRj47SUdOT1JFO0lHTk9SRQorPFVGRUE5Pgk8VTA2MkY+OzxVRkVBOT47SUdOT1JFO0lHTk9SRQorPFVGRUFBPgk8VTA2MkY+OzxVRkVBQT47SUdOT1JFO0lHTk9SRQorPFUwNjMwPgk8VTA2MzA+OzxVMDYzMD47SUdOT1JFO0lHTk9SRQorPFVGRUFCPgk8VTA2MzA+OzxVRkVBQj47SUdOT1JFO0lHTk9SRQorPFVGRUFDPgk8VTA2MzA+OzxVRkVBQz47SUdOT1JFO0lHTk9SRQorPFUwNjMxPgk8VTA2MzE+OzxVMDYzMT47SUdOT1JFO0lHTk9SRQorPFVGRUFEPgk8VTA2MzE+OzxVRkVBRD47SUdOT1JFO0lHTk9SRQorPFVGRUFFPgk8VTA2MzE+OzxVRkVBRT47SUdOT1JFO0lHTk9SRQorPFUwNjMyPgk8VTA2MzI+OzxVMDYzMj47SUdOT1JFO0lHTk9SRQorPFVGRUFGPgk8VTA2MzI+OzxVRkVBRj47SUdOT1JFO0lHTk9SRQorPFVGRUIwPgk8VTA2MzI+OzxVRkVCMD47SUdOT1JFO0lHTk9SRQorPFUwNjMzPgk8VTA2MzM+OzxVMDYzMz47SUdOT1JFO0lHTk9SRQorPFVGRUIxPgk8VTA2MzM+OzxVRkVCMT47SUdOT1JFO0lHTk9SRQorPFVGRUIyPgk8VTA2MzM+OzxVRkVCMj47SUdOT1JFO0lHTk9SRQorPFVGRUIzPgk8VTA2MzM+OzxVRkVCMz47SUdOT1JFO0lHTk9SRQorPFVGRUI0Pgk8VTA2MzM+OzxVRkVCND47SUdOT1JFO0lHTk9SRQorPFUwNjM0Pgk8VTA2MzQ+OzxVMDYzND47SUdOT1JFO0lHTk9SRQorPFVGRUI1Pgk8VTA2MzQ+OzxVRkVCNT47SUdOT1JFO0lHTk9SRQorPFVGRUI2Pgk8VTA2MzQ+OzxVRkVCNj47SUdOT1JFO0lHTk9SRQorPFVGRUI3Pgk8VTA2MzQ+OzxVRkVCNz47SUdOT1JFO0lHTk9SRQorPFVGRUI4Pgk8VTA2MzQ+OzxVRkVCOD47SUdOT1JFO0lHTk9SRQorPFUwNjM1Pgk8VTA2MzU+OzxVMDYzNT47SUdOT1JFO0lHTk9SRQorPFVGRUI5Pgk8VTA2MzU+OzxVRkVCOT47SUdOT1JFO0lHTk9SRQorPFVGRUJBPgk8VTA2MzU+OzxVRkVCQT47SUdOT1JFO0lHTk9SRQorPFVGRUJCPgk8VTA2MzU+OzxVRkVCQj47SUdOT1JFO0lHTk9SRQorPFVGRUJDPgk8VTA2MzU+OzxVRkVCQz47SUdOT1JFO0lHTk9SRQorPFUwNjM2Pgk8VTA2MzY+OzxVMDYzNj47SUdOT1JFO0lHTk9SRQorPFVGRUJEPgk8VTA2MzY+OzxVRkVCRD47SUdOT1JFO0lHTk9SRQorPFVGRUJFPgk8VTA2MzY+OzxVRkVCRT47SUdOT1JFO0lHTk9SRQorPFVGRUJGPgk8VTA2MzY+OzxVRkVCRj47SUdOT1JFO0lHTk9SRQorPFVGRUMwPgk8VTA2MzY+OzxVRkVDMD47SUdOT1JFO0lHTk9SRQorPFUwNjM3Pgk8VTA2Mzc+OzxVMDYzNz47SUdOT1JFO0lHTk9SRQorPFVGRUMxPgk8VTA2Mzc+OzxVRkVDMT47SUdOT1JFO0lHTk9SRQorPFVGRUMyPgk8VTA2Mzc+OzxVRkVDMj47SUdOT1JFO0lHTk9SRQorPFVGRUMzPgk8VTA2Mzc+OzxVRkVDMz47SUdOT1JFO0lHTk9SRQorPFVGRUM0Pgk8VTA2Mzc+OzxVRkVDND47SUdOT1JFO0lHTk9SRQorPFUwNjM4Pgk8VTA2Mzg+OzxVMDYzOD47SUdOT1JFO0lHTk9SRQorPFVGRUM1Pgk8VTA2Mzg+OzxVRkVDNT47SUdOT1JFO0lHTk9SRQorPFVGRUM2Pgk8VTA2Mzg+OzxVRkVDNj47SUdOT1JFO0lHTk9SRQorPFVGRUM3Pgk8VTA2Mzg+OzxVRkVDNz47SUdOT1JFO0lHTk9SRQorPFVGRUM4Pgk8VTA2Mzg+OzxVRkVDOD47SUdOT1JFO0lHTk9SRQorPFUwNjM5Pgk8VTA2Mzk+OzxVMDYzOT47SUdOT1JFO0lHTk9SRQorPFVGRUM5Pgk8VTA2Mzk+OzxVRkVDOT47SUdOT1JFO0lHTk9SRQorPFVGRUNBPgk8VTA2Mzk+OzxVRkVDQT47SUdOT1JFO0lHTk9SRQorPFVGRUNCPgk8VTA2Mzk+OzxVRkVDQj47SUdOT1JFO0lHTk9SRQorPFVGRUNDPgk8VTA2Mzk+OzxVRkVDQz47SUdOT1JFO0lHTk9SRQorPFUwNjNBPgk8VTA2M0E+OzxVMDYzQT47SUdOT1JFO0lHTk9SRQorPFVGRUNEPgk8VTA2M0E+OzxVRkVDRD47SUdOT1JFO0lHTk9SRQorPFVGRUNFPgk8VTA2M0E+OzxVRkVDRT47SUdOT1JFO0lHTk9SRQorPFVGRUNGPgk8VTA2M0E+OzxVRkVDRj47SUdOT1JFO0lHTk9SRQorPFVGRUQwPgk8VTA2M0E+OzxVRkVEMD47SUdOT1JFO0lHTk9SRQorPFUwNjQxPgk8VTA2NDE+OzxVMDY0MT47SUdOT1JFO0lHTk9SRQorPFVGRUQxPgk8VTA2NDE+OzxVRkVEMT47SUdOT1JFO0lHTk9SRQorPFVGRUQyPgk8VTA2NDE+OzxVRkVEMj47SUdOT1JFO0lHTk9SRQorPFVGRUQzPgk8VTA2NDE+OzxVRkVEMz47SUdOT1JFO0lHTk9SRQorPFVGRUQ0Pgk8VTA2NDE+OzxVRkVEND47SUdOT1JFO0lHTk9SRQorPFUwNjQyPgk8VTA2NDI+OzxVMDY0Mj47SUdOT1JFO0lHTk9SRQorPFVGRUQ1Pgk8VTA2NDI+OzxVRkVENT47SUdOT1JFO0lHTk9SRQorPFVGRUQ2Pgk8VTA2NDI+OzxVRkVENj47SUdOT1JFO0lHTk9SRQorPFVGRUQ3Pgk8VTA2NDI+OzxVRkVENz47SUdOT1JFO0lHTk9SRQorPFVGRUQ4Pgk8VTA2NDI+OzxVRkVEOD47SUdOT1JFO0lHTk9SRQorPFUwNjQzPgk8VTA2NDM+OzxVMDY0Mz47SUdOT1JFO0lHTk9SRQorPFVGRUQ5Pgk8VTA2NDM+OzxVRkVEOT47SUdOT1JFO0lHTk9SRQorPFVGRURBPgk8VTA2NDM+OzxVRkVEQT47SUdOT1JFO0lHTk9SRQorPFVGRURCPgk8VTA2NDM+OzxVRkVEQj47SUdOT1JFO0lHTk9SRQorPFVGRURDPgk8VTA2NDM+OzxVRkVEQz47SUdOT1JFO0lHTk9SRQorPFUwNjQ0Pgk8VTA2NDQ+OzxVMDY0ND47SUdOT1JFO0lHTk9SRQorPFVGRUREPgk8VTA2NDQ+OzxVRkVERD47SUdOT1JFO0lHTk9SRQorPFVGRURFPgk8VTA2NDQ+OzxVRkVERT47SUdOT1JFO0lHTk9SRQorPFVGRURGPgk8VTA2NDQ+OzxVRkVERj47SUdOT1JFO0lHTk9SRQorPFVGRUUwPgk8VTA2NDQ+OzxVRkVFMD47SUdOT1JFO0lHTk9SRQorPFUwNjQ1Pgk8VTA2NDU+OzxVMDY0NT47SUdOT1JFO0lHTk9SRQorPFVGRUUxPgk8VTA2NDU+OzxVRkVFMT47SUdOT1JFO0lHTk9SRQorPFVGRUUyPgk8VTA2NDU+OzxVRkVFMj47SUdOT1JFO0lHTk9SRQorPFVGRUUzPgk8VTA2NDU+OzxVRkVFMz47SUdOT1JFO0lHTk9SRQorPFVGRUU0Pgk8VTA2NDU+OzxVRkVFND47SUdOT1JFO0lHTk9SRQorPFUwNjQ2Pgk8VTA2NDY+OzxVMDY0Nj47SUdOT1JFO0lHTk9SRQorPFVGRUU1Pgk8VTA2NDY+OzxVRkVFNT47SUdOT1JFO0lHTk9SRQorPFVGRUU2Pgk8VTA2NDY+OzxVRkVFNj47SUdOT1JFO0lHTk9SRQorPFVGRUU3Pgk8VTA2NDY+OzxVRkVFNz47SUdOT1JFO0lHTk9SRQorPFVGRUU4Pgk8VTA2NDY+OzxVRkVFOD47SUdOT1JFO0lHTk9SRQorPFUwNjQ3Pgk8VTA2NDc+OzxVMDY0Nz47SUdOT1JFO0lHTk9SRQorPFVGRUU5Pgk8VTA2NDc+OzxVRkVFOT47SUdOT1JFO0lHTk9SRQorPFVGRUVBPgk8VTA2NDc+OzxVRkVFQT47SUdOT1JFO0lHTk9SRQorPFVGRUVCPgk8VTA2NDc+OzxVRkVFQj47SUdOT1JFO0lHTk9SRQorPFVGRUVDPgk8VTA2NDc+OzxVRkVFQz47SUdOT1JFO0lHTk9SRQorPFUwNjQ4Pgk8VTA2NDg+OzxVMDY0OD47SUdOT1JFO0lHTk9SRQorPFVGRUVEPgk8VTA2NDg+OzxVRkVFRD47SUdOT1JFO0lHTk9SRQorPFVGRUVFPgk8VTA2NDg+OzxVRkVFRT47SUdOT1JFO0lHTk9SRQorPFUwNjQ5Pgk8VTA2NDk+OzxVMDY0OT47SUdOT1JFO0lHTk9SRQorPFVGRUVGPgk8VTA2NDk+OzxVRkVFRj47SUdOT1JFO0lHTk9SRQorPFVGRUYwPgk8VTA2NDk+OzxVRkVGMD47SUdOT1JFO0lHTk9SRQorPFUwNjRBPgk8VTA2NEE+OzxVMDY0QT47SUdOT1JFO0lHTk9SRQorPFVGRUYxPgk8VTA2NEE+OzxVRkVGMT47SUdOT1JFO0lHTk9SRQorPFVGRUYyPgk8VTA2NEE+OzxVRkVGMj47SUdOT1JFO0lHTk9SRQorPFVGRUYzPgk8VTA2NEE+OzxVRkVGMz47SUdOT1JFO0lHTk9SRQorPFVGRUY0Pgk8VTA2NEE+OzxVRkVGND47SUdOT1JFO0lHTk9SRQorCis8VTA2NEI+CUlHTk9SRTtJR05PUkU7PFUwNjRCPjtJR05PUkUKKzxVMDY0Qz4JSUdOT1JFO0lHTk9SRTs8VTA2NEM+O0lHTk9SRQorPFUwNjREPglJR05PUkU7SUdOT1JFOzxVMDY0RD47SUdOT1JFCis8VTA2NEU+CUlHTk9SRTtJR05PUkU7PFUwNjRFPjtJR05PUkUKKzxVMDY0Rj4JSUdOT1JFO0lHTk9SRTs8VTA2NEY+O0lHTk9SRQorPFUwNjUwPglJR05PUkU7SUdOT1JFOzxVMDY1MD47SUdOT1JFCis8VTA2NTE+CUlHTk9SRTtJR05PUkU7PFUwNjUxPjtJR05PUkUKKzxVRkU3RD4JSUdOT1JFO0lHTk9SRTs8VUZFN0Q+O0lHTk9SRQorPFUwNjUyPglJR05PUkU7SUdOT1JFOzxVMDY1Mj47SUdOT1JFCisKKzxVMDY2MD4JPFUwMDMwPjs8VTA2NjA+O0lHTk9SRTtJR05PUkUKKzxVMDY2MT4JPFUwMDMxPjs8VTA2NjE+O0lHTk9SRTtJR05PUkUKKzxVMDY2Mj4JPFUwMDMyPjs8VTA2NjI+O0lHTk9SRTtJR05PUkUKKzxVMDY2Mz4JPFUwMDMzPjs8VTA2NjM+O0lHTk9SRTtJR05PUkUKKzxVMDY2ND4JPFUwMDM0Pjs8VTA2NjQ+O0lHTk9SRTtJR05PUkUKKzxVMDY2NT4JPFUwMDM1Pjs8VTA2NjU+O0lHTk9SRTtJR05PUkUKKzxVMDY2Nj4JPFUwMDM2Pjs8VTA2NjY+O0lHTk9SRTtJR05PUkUKKzxVMDY2Nz4JPFUwMDM3Pjs8VTA2Njc+O0lHTk9SRTtJR05PUkUKKzxVMDY2OD4JPFUwMDM4Pjs8VTA2Njg+O0lHTk9SRTtJR05PUkUKKzxVMDY2OT4JPFUwMDM5Pjs8VTA2Njk+O0lHTk9SRTtJR05PUkUKKworPFVGRUY1PgkiPFUwNjQ0PjxVMDYyMj4iOyI8VTA2NDQ+PFUwNjIyPiI7IjxVRkVGNT48VUZFRjU+IjtJR05PUkUKKzxVRkVGNj4JIjxVMDY0ND48VTA2MjI+IjsiPFUwNjQ0PjxVRkU4Mj4iOyI8VUZFRjY+PFVGRUY2PiI7SUdOT1JFCis8VUZFRjc+CSI8VTA2NDQ+PFUwNjIzPiI7IjxVMDY0ND48VTA2MjM+IjsiPFVGRUY3PjxVRkVGNz4iO0lHTk9SRQorPFVGRUY4PgkiPFUwNjQ0PjxVMDYyMz4iOyI8VTA2NDQ+PFVGRTg0PiI7IjxVRkVGOD48VUZFRjg+IjtJR05PUkUKKzxVRkVGOT4JIjxVMDY0ND48VTA2MjU+IjsiPFUwNjQ0PjxVMDYyNT4iOyI8VUZFRjk+PFVGRUY5PiI7SUdOT1JFCis8VUZFRkE+CSI8VTA2NDQ+PFUwNjI1PiI7IjxVMDY0ND48VUZFODg+IjsiPFVGRUZBPjxVRkVGQT4iO0lHTk9SRQorPFVGRUZCPgkiPFUwNjQ0PjxVMDYyNz4iOyI8VTA2NDQ+PFVGRThEPiI7IjxVRkVGQj48VUZFRkI+IjtJR05PUkUKKzxVRkVGQz4JIjxVMDY0ND48VTA2Mjc+IjsiPFUwNjQ0PjxVRkU4RT4iOyI8VUZFRkM+PFVGRUZDPiI7SUdOT1JFCisKKyUga2F0YWthbmEvaGlyYWdhbmEgc29ydGluZworJSBiYXNlIGlzIGthdGFrYW5hLCBhcyB0aGlzIGlzIHByZXNlbnQgaW4gbW9zdCBjaGFyc2V0cworJSBub3JtYWwgYmVmb3JlIHZvaWNlZCBiZWZvcmUgc2VtaS12b2ljZWQKKyUgc21hbGwgdm9jYWxzIGJlZm9yZSBub3JtYWwgdm9jYWxzCislIGthdGFrYW5hIGJlZm9yZSBoaXJhZ2FuYQorCis8VTMwQTE+CTxVMzBBMT47PFUzMEExPjtJR05PUkU7SUdOT1JFCis8VTMwNDE+CTxVMzBBMT47PFUzMDQxPjtJR05PUkU7SUdOT1JFCis8VTMwQTI+CTxVMzBBMT47PFUzMEEyPjtJR05PUkU7SUdOT1JFCis8VTMwNDI+CTxVMzBBMT47PFUzMDQyPjtJR05PUkU7SUdOT1JFCis8VTMwQTM+CTxVMzBBMz47PFUzMEEzPjtJR05PUkU7SUdOT1JFCis8VTMwNDM+CTxVMzBBMz47PFUzMDQzPjtJR05PUkU7SUdOT1JFCis8VTMwQTQ+CTxVMzBBMz47PFUzMEE0PjtJR05PUkU7SUdOT1JFCis8VTMwNDQ+CTxVMzBBMz47PFUzMDQ0PjtJR05PUkU7SUdOT1JFCis8VTMwQTU+CTxVMzBBNT47PFUzMEE1PjtJR05PUkU7SUdOT1JFCis8VTMwNDU+CTxVMzBBNT47PFUzMDQ1PjtJR05PUkU7SUdOT1JFCis8VTMwQTY+CTxVMzBBNT47PFUzMEE2PjtJR05PUkU7SUdOT1JFCis8VTMwNDY+CTxVMzBBNT47PFUzMDQ2PjtJR05PUkU7SUdOT1JFCis8VTMwRjQ+CTxVMzBBNT47PFUzMEY0PjtJR05PUkU7SUdOT1JFCis8VTMwQTc+CTxVMzBBNz47PFUzMEE3PjtJR05PUkU7SUdOT1JFCis8VTMwNDc+CTxVMzBBNz47PFUzMDQ3PjtJR05PUkU7SUdOT1JFCis8VTMwQTg+CTxVMzBBNz47PFUzMEE4PjtJR05PUkU7SUdOT1JFCis8VTMwNDg+CTxVMzBBNz47PFUzMDQ4PjtJR05PUkU7SUdOT1JFCis8VTMwQTk+CTxVMzBBOT47PFUzMEE5PjtJR05PUkU7SUdOT1JFCis8VTMwNDk+CTxVMzBBOT47PFUzMDQ5PjtJR05PUkU7SUdOT1JFCis8VTMwQUE+CTxVMzBBOT47PFUzMEFBPjtJR05PUkU7SUdOT1JFCis8VTMwNEE+CTxVMzBBOT47PFUzMDRBPjtJR05PUkU7SUdOT1JFCis8VTMwRjU+CTxVMzBGNT47PFUzMEY1PjtJR05PUkU7SUdOT1JFCis8VTMwQUI+CTxVMzBGNT47PFUzMEFCPjtJR05PUkU7SUdOT1JFCis8VTMwNEI+CTxVMzBGNT47PFUzMDRCPjtJR05PUkU7SUdOT1JFCis8VTMwQUM+CTxVMzBGNT47PFUzMEFDPjtJR05PUkU7SUdOT1JFCis8VTMwNEM+CTxVMzBGNT47PFUzMDRDPjtJR05PUkU7SUdOT1JFCis8VTMwQUQ+CTxVMzBBRD47PFUzMEFEPjtJR05PUkU7SUdOT1JFCis8VTMwNEQ+CTxVMzBBRD47PFUzMDREPjtJR05PUkU7SUdOT1JFCis8VTMwQUU+CTxVMzBBRD47PFUzMEFFPjtJR05PUkU7SUdOT1JFCis8VTMwNEU+CTxVMzBBRD47PFUzMDRFPjtJR05PUkU7SUdOT1JFCis8VTMwQUY+CTxVMzBBRj47PFUzMEFGPjtJR05PUkU7SUdOT1JFCis8VTMwNEY+CTxVMzBBRj47PFUzMDRGPjtJR05PUkU7SUdOT1JFCis8VTMwQjA+CTxVMzBBRj47PFUzMEIwPjtJR05PUkU7SUdOT1JFCis8VTMwNTA+CTxVMzBBRj47PFUzMDUwPjtJR05PUkU7SUdOT1JFCis8VTMwRjY+CTxVMzBGNj47PFUzMEY2PjtJR05PUkU7SUdOT1JFCis8VTMwQjE+CTxVMzBGNj47PFUzMEIxPjtJR05PUkU7SUdOT1JFCis8VTMwNTE+CTxVMzBGNj47PFUzMDUxPjtJR05PUkU7SUdOT1JFCis8VTMwQjI+CTxVMzBGNj47PFUzMEIyPjtJR05PUkU7SUdOT1JFCis8VTMwNTI+CTxVMzBGNj47PFUzMDUyPjtJR05PUkU7SUdOT1JFCis8VTMwQjM+CTxVMzBCMz47PFUzMEIzPjtJR05PUkU7SUdOT1JFCis8VTMwNTM+CTxVMzBCMz47PFUzMDUzPjtJR05PUkU7SUdOT1JFCis8VTMwQjQ+CTxVMzBCMz47PFUzMEI0PjtJR05PUkU7SUdOT1JFCis8VTMwNTQ+CTxVMzBCMz47PFUzMDU0PjtJR05PUkU7SUdOT1JFCis8VTMwQjU+CTxVMzBCNT47PFUzMEI1PjtJR05PUkU7SUdOT1JFCis8VTMwNTU+CTxVMzBCNT47PFUzMDU1PjtJR05PUkU7SUdOT1JFCis8VTMwQjY+CTxVMzBCNT47PFUzMEI2PjtJR05PUkU7SUdOT1JFCis8VTMwNTY+CTxVMzBCNT47PFUzMDU2PjtJR05PUkU7SUdOT1JFCis8VTMwQjc+CTxVMzBCNz47PFUzMEI3PjtJR05PUkU7SUdOT1JFCis8VTMwNTc+CTxVMzBCNz47PFUzMDU3PjtJR05PUkU7SUdOT1JFCis8VTMwQjg+CTxVMzBCNz47PFUzMEI4PjtJR05PUkU7SUdOT1JFCis8VTMwNTg+CTxVMzBCNz47PFUzMDU4PjtJR05PUkU7SUdOT1JFCis8VTMwQjk+CTxVMzBCOT47PFUzMEI5PjtJR05PUkU7SUdOT1JFCis8VTMwNTk+CTxVMzBCOT47PFUzMDU5PjtJR05PUkU7SUdOT1JFCis8VTMwQkE+CTxVMzBCOT47PFUzMEJBPjtJR05PUkU7SUdOT1JFCis8VTMwNUE+CTxVMzBCOT47PFUzMDVBPjtJR05PUkU7SUdOT1JFCis8VTMwQkI+CTxVMzBCQj47PFUzMEJCPjtJR05PUkU7SUdOT1JFCis8VTMwNUI+CTxVMzBCQj47PFUzMDVCPjtJR05PUkU7SUdOT1JFCis8VTMwQkM+CTxVMzBCQj47PFUzMEJDPjtJR05PUkU7SUdOT1JFCis8VTMwNUM+CTxVMzBCQj47PFUzMDVDPjtJR05PUkU7SUdOT1JFCis8VTMwQkQ+CTxVMzBCRD47PFUzMEJEPjtJR05PUkU7SUdOT1JFCis8VTMwNUQ+CTxVMzBCRD47PFUzMDVEPjtJR05PUkU7SUdOT1JFCis8VTMwQkU+CTxVMzBCRD47PFUzMEJFPjtJR05PUkU7SUdOT1JFCis8VTMwNUU+CTxVMzBCRD47PFUzMDVFPjtJR05PUkU7SUdOT1JFCis8VTMwQkY+CTxVMzBCRj47PFUzMEJGPjtJR05PUkU7SUdOT1JFCis8VTMwNUY+CTxVMzBCRj47PFUzMDVGPjtJR05PUkU7SUdOT1JFCis8VTMwQzA+CTxVMzBCRj47PFUzMEMwPjtJR05PUkU7SUdOT1JFCis8VTMwNjA+CTxVMzBCRj47PFUzMDYwPjtJR05PUkU7SUdOT1JFCis8VTMwQzE+CTxVMzBDMT47PFUzMEMxPjtJR05PUkU7SUdOT1JFCis8VTMwNjE+CTxVMzBDMT47PFUzMDYxPjtJR05PUkU7SUdOT1JFCis8VTMwQzI+CTxVMzBDMT47PFUzMEMyPjtJR05PUkU7SUdOT1JFCis8VTMwNjI+CTxVMzBDMT47PFUzMDYyPjtJR05PUkU7SUdOT1JFCis8VTMwQzM+CTxVMzBDMz47PFUzMEMzPjtJR05PUkU7SUdOT1JFCis8VTMwNjM+CTxVMzBDMz47PFUzMDYzPjtJR05PUkU7SUdOT1JFCis8VTMwQzQ+CTxVMzBDMz47PFUzMEM0PjtJR05PUkU7SUdOT1JFCis8VTMwNjQ+CTxVMzBDMz47PFUzMDY0PjtJR05PUkU7SUdOT1JFCis8VTMwQzU+CTxVMzBDMz47PFUzMEM1PjtJR05PUkU7SUdOT1JFCis8VTMwNjU+CTxVMzBDMz47PFUzMDY1PjtJR05PUkU7SUdOT1JFCis8VTMwQzY+CTxVMzBDNj47PFUzMEM2PjtJR05PUkU7SUdOT1JFCis8VTMwNjY+CTxVMzBDNj47PFUzMDY2PjtJR05PUkU7SUdOT1JFCis8VTMwQzc+CTxVMzBDNj47PFUzMEM3PjtJR05PUkU7SUdOT1JFCis8VTMwNjc+CTxVMzBDNj47PFUzMDY3PjtJR05PUkU7SUdOT1JFCis8VTMwQzg+CTxVMzBDOD47PFUzMEM4PjtJR05PUkU7SUdOT1JFCis8VTMwNjg+CTxVMzBDOD47PFUzMDY4PjtJR05PUkU7SUdOT1JFCis8VTMwQzk+CTxVMzBDOD47PFUzMEM5PjtJR05PUkU7SUdOT1JFCis8VTMwNjk+CTxVMzBDOD47PFUzMDY5PjtJR05PUkU7SUdOT1JFCis8VTMwQ0E+CTxVMzBDQT47PFUzMENBPjtJR05PUkU7SUdOT1JFCis8VTMwNkE+CTxVMzBDQT47PFUzMDZBPjtJR05PUkU7SUdOT1JFCis8VTMwQ0I+CTxVMzBDQj47PFUzMENCPjtJR05PUkU7SUdOT1JFCis8VTMwNkI+CTxVMzBDQj47PFUzMDZCPjtJR05PUkU7SUdOT1JFCis8VTMwQ0M+CTxVMzBDQz47PFUzMENDPjtJR05PUkU7SUdOT1JFCis8VTMwNkM+CTxVMzBDQz47PFUzMDZDPjtJR05PUkU7SUdOT1JFCis8VTMwQ0Q+CTxVMzBDRD47PFUzMENEPjtJR05PUkU7SUdOT1JFCis8VTMwNkQ+CTxVMzBDRD47PFUzMDZEPjtJR05PUkU7SUdOT1JFCis8VTMwQ0U+CTxVMzBDRT47PFUzMENFPjtJR05PUkU7SUdOT1JFCis8VTMwNkU+CTxVMzBDRT47PFUzMDZFPjtJR05PUkU7SUdOT1JFCis8VTMwQ0Y+CTxVMzBDRj47PFUzMENGPjtJR05PUkU7SUdOT1JFCis8VTMwNkY+CTxVMzBDRj47PFUzMDZGPjtJR05PUkU7SUdOT1JFCis8VTMwRDA+CTxVMzBDRj47PFUzMEQwPjtJR05PUkU7SUdOT1JFCis8VTMwNzA+CTxVMzBDRj47PFUzMDcwPjtJR05PUkU7SUdOT1JFCis8VTMwRDE+CTxVMzBDRj47PFUzMEQxPjtJR05PUkU7SUdOT1JFCis8VTMwNzE+CTxVMzBDRj47PFUzMDcxPjtJR05PUkU7SUdOT1JFCis8VTMwRDI+CTxVMzBEMj47PFUzMEQyPjtJR05PUkU7SUdOT1JFCis8VTMwNzI+CTxVMzBEMj47PFUzMDcyPjtJR05PUkU7SUdOT1JFCis8VTMwRDM+CTxVMzBEMj47PFUzMEQzPjtJR05PUkU7SUdOT1JFCis8VTMwNzM+CTxVMzBEMj47PFUzMDczPjtJR05PUkU7SUdOT1JFCis8VTMwRDQ+CTxVMzBEMj47PFUzMEQ0PjtJR05PUkU7SUdOT1JFCis8VTMwNzQ+CTxVMzBEMj47PFUzMDc0PjtJR05PUkU7SUdOT1JFCis8VTMwRDU+CTxVMzBENT47PFUzMEQ1PjtJR05PUkU7SUdOT1JFCis8VTMwNzU+CTxVMzBENT47PFUzMDc1PjtJR05PUkU7SUdOT1JFCis8VTMwRDY+CTxVMzBENT47PFUzMEQ2PjtJR05PUkU7SUdOT1JFCis8VTMwNzY+CTxVMzBENT47PFUzMDc2PjtJR05PUkU7SUdOT1JFCis8VTMwRDc+CTxVMzBENT47PFUzMEQ3PjtJR05PUkU7SUdOT1JFCis8VTMwNzc+CTxVMzBENT47PFUzMDc3PjtJR05PUkU7SUdOT1JFCis8VTMwRDg+CTxVMzBEOD47PFUzMEQ4PjtJR05PUkU7SUdOT1JFCis8VTMwNzg+CTxVMzBEOD47PFUzMDc4PjtJR05PUkU7SUdOT1JFCis8VTMwRDk+CTxVMzBEOD47PFUzMEQ5PjtJR05PUkU7SUdOT1JFCis8VTMwNzk+CTxVMzBEOD47PFUzMDc5PjtJR05PUkU7SUdOT1JFCis8VTMwREE+CTxVMzBEOD47PFUzMERBPjtJR05PUkU7SUdOT1JFCis8VTMwN0E+CTxVMzBEOD47PFUzMDdBPjtJR05PUkU7SUdOT1JFCis8VTMwREI+CTxVMzBEQj47PFUzMERCPjtJR05PUkU7SUdOT1JFCis8VTMwN0I+CTxVMzBEQj47PFUzMDdCPjtJR05PUkU7SUdOT1JFCis8VTMwREM+CTxVMzBEQj47PFUzMERDPjtJR05PUkU7SUdOT1JFCis8VTMwN0M+CTxVMzBEQj47PFUzMDdDPjtJR05PUkU7SUdOT1JFCis8VTMwREQ+CTxVMzBEQj47PFUzMEREPjtJR05PUkU7SUdOT1JFCis8VTMwN0Q+CTxVMzBEQj47PFUzMDdEPjtJR05PUkU7SUdOT1JFCis8VTMwREU+CTxVMzBERT47PFUzMERFPjtJR05PUkU7SUdOT1JFCis8VTMwN0U+CTxVMzBERT47PFUzMDdFPjtJR05PUkU7SUdOT1JFCis8VTMwREY+CTxVMzBERj47PFUzMERGPjtJR05PUkU7SUdOT1JFCis8VTMwN0Y+CTxVMzBERj47PFUzMDdGPjtJR05PUkU7SUdOT1JFCis8VTMwRTA+CTxVMzBFMD47PFUzMEUwPjtJR05PUkU7SUdOT1JFCis8VTMwODA+CTxVMzBFMD47PFUzMDgwPjtJR05PUkU7SUdOT1JFCis8VTMwRTE+CTxVMzBFMT47PFUzMEUxPjtJR05PUkU7SUdOT1JFCis8VTMwODE+CTxVMzBFMT47PFUzMDgxPjtJR05PUkU7SUdOT1JFCis8VTMwRTI+CTxVMzBFMj47PFUzMEUyPjtJR05PUkU7SUdOT1JFCis8VTMwODI+CTxVMzBFMj47PFUzMDgyPjtJR05PUkU7SUdOT1JFCis8VTMwRTM+CTxVMzBFMz47PFUzMEUzPjtJR05PUkU7SUdOT1JFCis8VTMwODM+CTxVMzBFMz47PFUzMDgzPjtJR05PUkU7SUdOT1JFCis8VTMwRTQ+CTxVMzBFMz47PFUzMEU0PjtJR05PUkU7SUdOT1JFCis8VTMwODQ+CTxVMzBFMz47PFUzMDg0PjtJR05PUkU7SUdOT1JFCis8VTMwRTU+CTxVMzBFNT47PFUzMEU1PjtJR05PUkU7SUdOT1JFCis8VTMwODU+CTxVMzBFNT47PFUzMDg1PjtJR05PUkU7SUdOT1JFCis8VTMwRTY+CTxVMzBFNT47PFUzMEU2PjtJR05PUkU7SUdOT1JFCis8VTMwODY+CTxVMzBFNT47PFUzMDg2PjtJR05PUkU7SUdOT1JFCis8VTMwRTc+CTxVMzBFNz47PFUzMEU3PjtJR05PUkU7SUdOT1JFCis8VTMwODc+CTxVMzBFNz47PFUzMDg3PjtJR05PUkU7SUdOT1JFCis8VTMwRTg+CTxVMzBFNz47PFUzMEU4PjtJR05PUkU7SUdOT1JFCis8VTMwODg+CTxVMzBFNz47PFUzMDg4PjtJR05PUkU7SUdOT1JFCis8VTMwRTk+CTxVMzBFOT47PFUzMEU5PjtJR05PUkU7SUdOT1JFCis8VTMwODk+CTxVMzBFOT47PFUzMDg5PjtJR05PUkU7SUdOT1JFCis8VTMwRUE+CTxVMzBFQT47PFUzMEVBPjtJR05PUkU7SUdOT1JFCis8VTMwOEE+CTxVMzBFQT47PFUzMDhBPjtJR05PUkU7SUdOT1JFCis8VTMwRUI+CTxVMzBFQj47PFUzMEVCPjtJR05PUkU7SUdOT1JFCis8VTMwOEI+CTxVMzBFQj47PFUzMDhCPjtJR05PUkU7SUdOT1JFCis8VTMwRUM+CTxVMzBFQz47PFUzMEVDPjtJR05PUkU7SUdOT1JFCis8VTMwOEM+CTxVMzBFQz47PFUzMDhDPjtJR05PUkU7SUdOT1JFCis8VTMwRUQ+CTxVMzBFRD47PFUzMEVEPjtJR05PUkU7SUdOT1JFCis8VTMwOEQ+CTxVMzBFRD47PFUzMDhEPjtJR05PUkU7SUdOT1JFCis8VTMwRUU+CTxVMzBFRT47PFUzMEVFPjtJR05PUkU7SUdOT1JFCis8VTMwOEU+CTxVMzBFRT47PFUzMDhFPjtJR05PUkU7SUdOT1JFCis8VTMwRUY+CTxVMzBFRT47PFUzMEVGPjtJR05PUkU7SUdOT1JFCis8VTMwOEY+CTxVMzBFRT47PFUzMDhGPjtJR05PUkU7SUdOT1JFCis8VTMwRjA+CTxVMzBGMD47PFUzMEYwPjtJR05PUkU7SUdOT1JFCis8VTMwOTA+CTxVMzBGMD47PFUzMDkwPjtJR05PUkU7SUdOT1JFCis8VTMwRjE+CTxVMzBGMT47PFUzMEYxPjtJR05PUkU7SUdOT1JFCis8VTMwOTE+CTxVMzBGMT47PFUzMDkxPjtJR05PUkU7SUdOT1JFCis8VTMwRjI+CTxVMzBGMj47PFUzMEYyPjtJR05PUkU7SUdOT1JFCis8VTMwOTI+CTxVMzBGMj47PFUzMDkyPjtJR05PUkU7SUdOT1JFCis8VTMwRjM+CTxVMzBGMz47PFUzMEYzPjtJR05PUkU7SUdOT1JFCis8VTMwOTM+CTxVMzBGMz47PFUzMDkzPjtJR05PUkU7SUdOT1JFCisKK29yZGVyX2VuZAorCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorJSBUaGlzIGlzIGEgY29weSBvZiB0aGUgImkxOG4iIExDX0NUWVBFIHdpdGggdGhlIGZvbGxvd2luZyBtb2RpZmljYXRpb25zOgorJSAtIE1hcCB0b3VwcGVyOiAoPFUwMDY5Piw8VTAwNDk+KSBjaGFuZ2VkIHRvICg8VTAwNjk+LDxVMDEzMD4pLgorJSAtIE1hcCB0b2xvd2VyOiAoPFUwMDQ5Piw8VTAwNjk+KSBjaGFuZ2VkIHRvICg8VTAwNDk+LDxVMDEzMT4pLgorCislIEJFR0lOIG1vZGlmaWVkIGkxOG4gTENfQ1RZUEUKKworJSBUaGUgInVwcGVyIiBjbGFzcyByZWZsZWN0cyB0aGUgdXBwZXJjYXNlIGNoYXJhY3RlcnMgb2YgY2xhc3MgImFscGhhIgordXBwZXIgLworJSBUQUJMRSAxIEJBU0lDIExBVElOLworICAgPFUwMDQxPi4uPFUwMDVBPjsvCislIFRBQkxFIDIgTEFUSU4tMSBTVVBQTEVNRU5ULworICAgPFUwMEMwPi4uPFUwMEQ2Pjs8VTAwRDg+Li48VTAwREU+Oy8KKyUgVEFCTEUgMyBMQVRJTiBFWFRFTkRFRC1BLworICAgPFUwMTAwPi4uKDIpLi48VTAxMzY+Oy8KKyAgIDxVMDEzOT4uLigyKS4uPFUwMTQ3PjsvCisgICA8VTAxNEE+Li4oMikuLjxVMDE3OD47LworICAgPFUwMTc5Pi4uKDIpLi48VTAxN0Q+Oy8KKyUgVEFCTEUgNCBMQVRJTiBFWFRFTkRFRC1CLworICAgPFUwMTgxPjs8VTAxODI+Li4oMikuLjxVMDE4Nj47PFUwMTg3PjsvCisgICA8VTAxODk+Li48VTAxOEI+OzxVMDE4RT4uLjxVMDE5MT47PFUwMTkzPjs8VTAxOTQ+Oy8KKyAgIDxVMDE5Nj4uLjxVMDE5OD47PFUwMTlDPjs8VTAxOUQ+OzxVMDE5Rj47LworICAgPFUwMUEwPi4uKDIpLi48VTAxQTQ+Oy8KKyAgIDxVMDFBNj47PFUwMUE3Pjs8VTAxQTk+OzxVMDFBQz47PFUwMUFFPjs8VTAxQUY+OzxVMDFCMT4uLjxVMDFCMz47LworICAgPFUwMUI1Pjs8VTAxQjc+OzxVMDFCOD47PFUwMUJDPjs8VTAxQzQ+OzxVMDFDNT47PFUwMUM3Pjs8VTAxQzg+Oy8KKyAgIDxVMDFDQT47PFUwMUNCPjsvCisgICA8VTAxQ0Q+Li4oMikuLjxVMDFEQj47LworICAgPFUwMURFPi4uKDIpLi48VTAxRUU+Oy8KKyAgIDxVMDFGMT47PFUwMUYyPjs8VTAxRjQ+OzxVMDFGNj4uLjxVMDFGOD47PFUwMUZBPi4uKDIpLi48VTAxRkU+Oy8KKyUgVEFCTEUgNSBMQVRJTiBFWFRFTkRFRC1CLworICAgPFUwMjAwPi4uKDIpLi48VTAyMzI+Oy8KKyUgVEFCTEUgNiBJUEEgRVhURU5TSU9OUy8KKyUgVEFCTEUgOSBCQVNJQyBHUkVFSy8KKyAgIDxVMDM4Nj47PFUwMzg4Pi4uPFUwMzhBPjs8VTAzOEM+OzxVMDM4RT47PFUwMzhGPjs8VTAzOTE+Li48VTAzQTE+Oy8KKyAgIDxVMDNBMz4uLjxVMDNBQj47PFUwM0Q4Pi4uKDIpLi48VTAzREU+Oy8KKyUgVEFCTEUgMTAgR1JFRUsgU1lNQk9MUyBBTkQgQ09QVElDLworICAgPFUwM0UwPi4uKDIpLi48VTAzRUU+OzxVMDNGND47LworJSBUQUJMRSAxMSBDWVJJTExJQy8KKyAgIDxVMDQwMD4uLjxVMDQyRj47PFUwNDYwPi4uKDIpLi48VTA0N0U+Oy8KKyUgVEFCTEUgMTIgQ1lSSUxMSUMvCisgICA8VTA0ODA+OzxVMDQ4QT4uLigyKS4uPFUwNEJFPjs8VTA0QzE+Li4oMikuLjxVMDRDRD47LworICAgPFUwNEQwPi4uKDIpLi48VTA0RjQ+OzxVMDRGOD47PFUwNTAwPi4uKDIpLi48VTA1MEU+Oy8KKyUgVEFCTEUgMTMgQVJNRU5JQU4vCisgICA8VTA1MzE+Li48VTA1NTY+Oy8KKyUgVEFCTEUgMjggR0VPUkdJQU4vCislIGlzIG5vdCBhZGRyZXNzZWQgYXMgdGhlIGxldHRlcnMgZG9lcyBub3QgaGF2ZSBhIHVwcGVyY2FzZS9sb3dlcmNhc2UgcmVsYXRpb24vCislIFRBQkxFIDMxIExBVElOIEVYVEVOREVEIEFERElUSU9OQUwvCisgICA8VTFFMDA+Li4oMikuLjxVMUU3RT47LworJSBUQUJMRSAzMiBMQVRJTiBFWFRFTkRFRCBBRERJVElPTkFMLworICAgPFUxRTgwPi4uKDIpLi48VTFFOTQ+Oy8KKyAgIDxVMUVBMD4uLigyKS4uPFUxRUY4PjsvCislIFRBQkxFIDMzIEdSRUVLIEVYVEVOREVELworICAgPFUxRjA4Pi4uPFUxRjBGPjs8VTFGMTg+Li48VTFGMUQ+OzxVMUYyOD4uLjxVMUYyRj47PFUxRjM4Pi4uPFUxRjNGPjsvCisgICA8VTFGNDg+Li48VTFGNEQ+OzxVMUY1OT4uLigyKS4uPFUxRjVGPjs8VTFGNjg+Li48VTFGNkY+Oy8KKyUgVEFCTEUgMzQgR1JFRUsgRVhURU5ERUQvCisgICA8VTFGODg+Li48VTFGOEY+OzxVMUY5OD4uLjxVMUY5Rj47PFUxRkE4Pi4uPFUxRkFGPjs8VTFGQjg+Li48VTFGQkM+Oy8KKyAgIDxVMUZDOD4uLjxVMUZDQz47PFUxRkQ4Pi4uPFUxRkRCPjs8VTFGRTg+Li48VTFGRUM+OzxVMUZGOD4uLjxVMUZGQz47LworJSBMRVRURVJMSUtFIFNZTUJPTFMvCisgICA8VTIxMjY+OzxVMjEyQT4uLjxVMjEyQj47LworJSBOVU1CRVIgRk9STVMvCisgICA8VTIxNjA+Li48VTIxNkY+Oy8KKyUgRU5DTE9TRUQgQUxQSEFOVU1FUklDUy8KKyAgIDxVMjRCNj4uLjxVMjRDRj47LworJSBIQUxGV0lEVEggQU5EIEZVTExXSURUSCBGT1JNUy8KKyAgIDxVRkYyMT4uLjxVRkYzQT47LworJSBERVNFUkVULworICAgPFUwMDAxMDQwMD4uLjxVMDAwMTA0MjU+CisKKyUgVGhlICJsb3dlciIgY2xhc3MgcmVmbGVjdHMgdGhlIGxvd2VyY2FzZSBjaGFyYWN0ZXJzIG9mIGNsYXNzICJhbHBoYSIKK2xvd2VyIC8KKyUgVEFCTEUgMSBCQVNJQyBMQVRJTi8KKyAgIDxVMDA2MT4uLjxVMDA3QT47LworJSBUQUJMRSAyIExBVElOLTEgU1VQUExFTUVOVC8KKyAgIDxVMDBCNT47PFUwMERGPi4uPFUwMEY2Pjs8VTAwRjg+Li48VTAwRkY+Oy8KKyUgVEFCTEUgMyBMQVRJTiBFWFRFTkRFRC1BLworICAgPFUwMTAxPi4uKDIpLi48VTAxMzc+OzxVMDEzQT4uLigyKS4uPFUwMTQ4PjsvCisgICA8VTAxNEI+Li4oMikuLjxVMDE3Nz47PFUwMTdBPi4uKDIpLi48VTAxN0U+OzxVMDE3Rj47LworJSBUQUJMRSA0IExBVElOIEVYVEVOREVELUIvCisgICA8VTAxODM+OzxVMDE4NT47PFUwMTg4Pjs8VTAxOEM+OzxVMDE5Mj47PFUwMTk1PjsvCisgICA8VTAxOTk+OzxVMDE5RT47PFUwMUExPjs8VTAxQTM+OzxVMDFBNT47PFUwMUE4Pjs8VTAxQUQ+Oy8KKyAgIDxVMDFCMD47PFUwMUI0Pjs8VTAxQjY+OzxVMDFCOT47PFUwMUJEPjs8VTAxQkY+OzxVMDFDNT47PFUwMUM2PjsvCisgICA8VTAxQzg+OzxVMDFDOT47PFUwMUNCPjs8VTAxQ0M+Li4oMikuLjxVMDFEQz47LworICAgPFUwMUREPi4uKDIpLi48VTAxRUY+OzxVMDFGMj47PFUwMUYzPjs8VTAxRjU+OzxVMDFGOT4uLigyKS4uPFUwMUZGPjsvCislIFRBQkxFIDUgTEFUSU4gRVhURU5ERUQtQi8KKyAgIDxVMDIwMT4uLigyKS4uPFUwMjFGPjs8VTAyMjM+Li4oMikuLjxVMDIzMz47LworJSBUQUJMRSA2IElQQSBFWFRFTlNJT05TLworICAgPFUwMjUzPjs8VTAyNTQ+OzxVMDI1Nj47PFUwMjU3Pjs8VTAyNTk+OzxVMDI1Qj47PFUwMjYwPjs8VTAyNjM+OzxVMDI2OD47LworICAgPFUwMjY5Pjs8VTAyNkY+OzxVMDI3Mj47PFUwMjc1Pjs8VTAyODA+OzxVMDI4Mz47PFUwMjg4Pjs8VTAyOEE+OzxVMDI4Qj47LworICAgPFUwMjkyPjsvCislIENPTUJJTklORyBESUFDUklUSUNBTCBNQVJLUy8KKyAgIDxVMDM0NT47LworJSBUQUJMRSA5IEJBU0lDIEdSRUVLLworICAgPFUwM0FDPi4uPFUwM0FGPjs8VTAzQjE+Li48VTAzQ0U+Oy8KKyUgVEFCTEUgMTAgR1JFRUsgU1lNQk9MUyBBTkQgQ09QVElDLworICAgPFUwM0QwPjs8VTAzRDE+OzxVMDNENT47PFUwM0Q2Pjs8VTAzRDk+Li4oMikuLjxVMDNFRj47PFUwM0YwPi4uPFUwM0YyPjsvCisgICA8VTAzRjU+Oy8KKyUgVEFCTEUgMTEgQ1lSSUxMSUMvCisgICA8VTA0MzA+Li48VTA0NUY+OzxVMDQ2MT4uLigyKS4uPFUwNDdGPjsvCislIFRBQkxFIDEyIENZUklMTElDLworICAgPFUwNDgxPjs8VTA0OEI+Li4oMikuLjxVMDRCRj47PFUwNEMyPi4uKDIpLi48VTA0Q0U+Oy8KKyAgIDxVMDREMT4uLigyKS4uPFUwNEY1Pjs8VTA0Rjk+OzxVMDUwMT4uLigyKS4uPFUwNTBGPjsvCislIFRBQkxFIDEzIEFSTUVOSUFOLworICAgPFUwNTYxPi4uPFUwNTg2PjsvCislIFRBQkxFIDI4IEdFT1JHSUFOLworJSBpcyBub3QgYWRkcmVzc2VkIGFzIHRoZSBsZXR0ZXJzIGRvZXMgbm90IGhhdmUgYSB1cHBlcmNhc2UvbG93ZXJjYXNlIHJlbGF0aW9uLworJSBUQUJMRSAzMSBhbmQgMzIgTEFUSU4gRVhURU5ERUQgQURESVRJT05BTC8KKyAgIDxVMUUwMT4uLigyKS4uPFUxRTk1Pjs8VTFFOUI+OzxVMUVBMT4uLigyKS4uPFUxRUY5PjsvCislIFRBQkxFIDMzIEdSRUVLIEVYVEVOREVELworICAgPFUxRjAwPi4uPFUxRjA3Pjs8VTFGMTA+Li48VTFGMTU+OzxVMUYyMD4uLjxVMUYyNz47PFUxRjMwPi4uPFUxRjM3PjsvCisgICA8VTFGNDA+Li48VTFGNDU+OzxVMUY1MT4uLigyKS4uPFUxRjU3Pjs8VTFGNjA+Li48VTFGNjc+OzxVMUY3MD4uLjxVMUY3RD47LworJSBUQUJMRSAzNCBHUkVFSyBFWFRFTkRFRC8KKyAgIDxVMUY4MD4uLjxVMUY4Nz47PFUxRjkwPi4uPFUxRjk3Pjs8VTFGQTA+Li48VTFGQTc+OzxVMUZCMD47PFUxRkIxPjsvCisgICA8VTFGQjM+OzxVMUZCRT47PFUxRkMzPjs8VTFGRDA+OzxVMUZEMT47PFUxRkUwPjs8VTFGRTE+OzxVMUZFNT47LworICAgPFUxRkYzPjsvCislIFRBQkxFIDM1IFNVUEVSU0NSSVBUUyBBTkQgU1VCU0NSSVBUUywgQ1VSUkVOQ1kgU1lNQk9MUy8KKyUgTlVNQkVSIEZPUk1TLworICAgPFUyMTcwPi4uPFUyMTdGPjsvCislIEVOQ0xPU0VEIEFMUEhBTlVNRVJJQ1MvCisgICA8VTI0RDA+Li48VTI0RTk+Oy8KKyUgSEFMRldJRFRIIEFORCBGVUxMV0lEVEggRk9STVMvCisgICA8VUZGNDE+Li48VUZGNUE+Oy8KKyUgREVTRVJFVC8KKyAgIDxVMDAwMTA0Mjg+Li48VTAwMDEwNDREPgorCislIFRoZSAiYWxwaGEiIGNsYXNzIG9mIHRoZSAiaTE4biIgRkRDQy1zZXQgaXMgcmVmbGVjdGluZworJSB0aGUgcmVjb21tZW5kYXRpb25zIGluIFRSIDEwMTc2IGFubmV4IEEKK2FscGhhIC8KKyUgVEFCTEUgMSBCQVNJQyBMQVRJTi8KKyAgIDxVMDA0MT4uLjxVMDA1QT47PFUwMDYxPi4uPFUwMDdBPjsvCislIFRBQkxFIDIgTEFUSU4tMSBTVVBQTEVNRU5ULworICAgPFUwMEFBPjs8VTAwQjU+OzxVMDBCQT47PFUwMEMwPi4uPFUwMEQ2Pjs8VTAwRDg+Li48VTAwRjY+Oy8KKyAgIDxVMDBGOD4uLjxVMDBGRj47LworJSBUQUJMRSAzIExBVElOIEVYVEVOREVELUEvCisgICA8VTAxMDA+Li48VTAxN0Y+Oy8KKyUgVEFCTEUgNCBhbmQgNSBMQVRJTiBFWFRFTkRFRC1CLworICAgPFUwMTgwPi4uPFUwMjIwPjs8VTAyMjI+Li48VTAyMzM+Oy8KKyUgVEFCTEUgNiBJUEEgRVhURU5TSU9OUy8KKyAgIDxVMDI1MD4uLjxVMDJBRD47LworJSBTUEFDSU5HIE1PRElGSUVSIExFVFRFUlMvCisgICA8VTAyQjA+Li48VTAyQjg+OzxVMDJCQj4uLjxVMDJDMT47PFUwMkQwPjs8VTAyRDE+OzxVMDJFMD4uLjxVMDJFND47LworICAgPFUwMkVFPjsvCislIENPTUJJTklORyBESUFDUklUSUNBTCBNQVJLUy8KKyAgIDxVMDM0NT47LworJSBUQUJMRSA5IEJBU0lDIEdSRUVLLworICAgPFUwMzdBPjs8VTAzODY+OzxVMDM4OD4uLjxVMDM4QT47PFUwMzhDPjs8VTAzOEU+Li48VTAzQTE+Oy8KKyAgIDxVMDNBMz4uLjxVMDNDRT47LworJSBUQUJMRSAxMCBHUkVFSyBTWU1CT0xTIEFORCBDT1BUSUMvCisgICA8VTAzRDA+Li48VTAzRjU+Oy8KKyUgVEFCTEUgMTEgYW5kIDEyIENZUklMTElDLworICAgPFUwNDAwPi4uPFUwNDgxPjs8VTA0OEE+Li48VTA0Q0U+Oy8KKyAgIDxVMDREMD4uLjxVMDRGNT47PFUwNEY4Pi4uPFUwNEY5Pjs8VTA1MDA+Li48VTA1MEY+Oy8KKyUgVEFCTEUgMTMgQVJNRU5JQU4vCisgICA8VTA1MzE+Li48VTA1NTY+OzxVMDU1OT47PFUwNTYxPi4uPFUwNTg3PjsvCislIFRBQkxFIDE0IEhFQlJFVy8KKyAgIDxVMDVEMD4uLjxVMDVFQT47PFUwNUYwPi4uPFUwNUYyPjsvCislIFRBQkxFIDE1IGFuZCAxNiBBUkFCSUMvCisgICA8VTA2MjE+Li48VTA2M0E+OzxVMDY0MD4uLjxVMDY0QT47PFUwNjZFPi4uPFUwNjZGPjs8VTA2NzE+Li48VTA2RDM+Oy8KKyAgIDxVMDZENT47PFUwNkU1Pi4uPFUwNkU2Pjs8VTA2RkE+Li48VTA2RkM+Oy8KKyUgU1lSSUFDLworICAgPFUwNzEwPjs8VTA3MTI+Li48VTA3MkM+Oy8KKyUgVEhBQU5BLworICAgPFUwNzgwPi4uPFUwN0E1Pjs8VTA3QjE+Oy8KKyUgVEFCTEUgMTcgREVWQU5BR0FSSS8KKyAgIDxVMDkwNT4uLjxVMDkzOT47PFUwOTNEPjs8VTA5NTA+OzxVMDk1OD4uLjxVMDk2MT47LworJSBUQUJMRSAxOCBCRU5HQUxJLworICAgPFUwOTg1Pi4uPFUwOThDPjs8VTA5OEY+OzxVMDk5MD47PFUwOTkzPi4uPFUwOUE4Pjs8VTA5QUE+Li48VTA5QjA+Oy8KKyAgIDxVMDlCMj47PFUwOUI2Pi4uPFUwOUI5Pjs8VTA5REM+OzxVMDlERD47PFUwOURGPi4uPFUwOUUxPjsvCisgICA8VTA5RjA+Li48VTA5RjE+Oy8KKyUgVEFCTEUgMTkgR1VSTVVLSEkvCisgICA8VTBBMDU+Li48VTBBMEE+OzxVMEEwRj47PFUwQTEwPjs8VTBBMTM+Li48VTBBMjg+OzxVMEEyQT4uLjxVMEEzMD47LworICAgPFUwQTMyPjs8VTBBMzM+OzxVMEEzNT47PFUwQTM2Pjs8VTBBMzg+OzxVMEEzOT47PFUwQTU5Pi4uPFUwQTVDPjsvCisgICA8VTBBNUU+OzxVMEE3Mj4uLjxVMEE3ND47LworJSBUQUJMRSAyMCBHVUpBUkFUSS8KKyAgIDxVMEE4NT4uLjxVMEE4Qj47PFUwQThEPjs8VTBBOEY+Li48VTBBOTE+OzxVMEE5Mz4uLjxVMEFBOD47LworICAgPFUwQUFBPi4uPFUwQUIwPjs8VTBBQjI+OzxVMEFCMz47PFUwQUI1Pi4uPFUwQUI5Pjs8VTBBQkQ+OzxVMEFEMD47LworICAgPFUwQUUwPjsvCislIFRBQkxFIDIxIE9SSVlBLworICAgPFUwQjA1Pi4uPFUwQjBDPjs8VTBCMEY+OzxVMEIxMD47PFUwQjEzPi4uPFUwQjI4Pjs8VTBCMkE+Li48VTBCMzA+Oy8KKyAgIDxVMEIzMj47PFUwQjMzPjs8VTBCMzY+Li48VTBCMzk+OzxVMEIzRD47PFUwQjVDPjs8VTBCNUQ+Oy8KKyAgIDxVMEI1Rj4uLjxVMEI2MT47LworJSBUQUJMRSAyMiBUQU1JTC8KKyAgIDxVMEI4Mz47PFUwQjg1Pi4uPFUwQjhBPjs8VTBCOEU+Li48VTBCOTA+OzxVMEI5Mj4uLjxVMEI5NT47PFUwQjk5PjsvCisgICA8VTBCOUE+OzxVMEI5Qz47PFUwQjlFPjs8VTBCOUY+OzxVMEJBMz47PFUwQkE0Pjs8VTBCQTg+Li48VTBCQUE+Oy8KKyAgIDxVMEJBRT4uLjxVMEJCNT47PFUwQkI3Pi4uPFUwQkI5PjsvCislIFRBQkxFIDIzIFRFTFVHVS8KKyAgIDxVMEMwNT4uLjxVMEMwQz47PFUwQzBFPi4uPFUwQzEwPjs8VTBDMTI+Li48VTBDMjg+OzxVMEMyQT4uLjxVMEMzMz47LworICAgPFUwQzM1Pi4uPFUwQzM5Pjs8VTBDNjA+Li48VTBDNjE+Oy8KKyUgVEFCTEUgMjQgS0FOTkFEQS8KKyAgIDxVMEM4NT4uLjxVMEM4Qz47PFUwQzhFPi4uPFUwQzkwPjs8VTBDOTI+Li48VTBDQTg+OzxVMENBQT4uLjxVMENCMz47LworICAgPFUwQ0I1Pi4uPFUwQ0I5Pjs8VTBDREU+OzxVMENFMD4uLjxVMENFMT47LworJSBUQUJMRSAyNSBNQUxBWUFMQU0vCisgICA8VTBEMDU+Li48VTBEMEM+OzxVMEQwRT4uLjxVMEQxMD47PFUwRDEyPi4uPFUwRDI4Pjs8VTBEMkE+Li48VTBEMzk+Oy8KKyAgIDxVMEQ2MD4uLjxVMEQ2MT47LworJSBTSU5IQUxBLworICAgPFUwRDg1Pi4uPFUwRDk2Pjs8VTBEOUE+Li48VTBEQjE+OzxVMERCMz4uLjxVMERCQj47PFUwREJEPjsvCisgICA8VTBEQzA+Li48VTBEQzY+Oy8KKyUgVEFCTEUgMjYgVEhBSS8KKyAgIDxVMEUwMT4uLjxVMEUyRT47PFUwRTMwPi4uPFUwRTNBPjs8VTBFNDA+Li48VTBFNDU+OzxVMEU0Nz4uLjxVMEU0RT47LworJSBUQUJMRSAyNyBMQU8vCisgICA8VTBFODE+Li48VTBFODI+OzxVMEU4ND47PFUwRTg3Pi4uPFUwRTg4Pjs8VTBFOEE+OzxVMEU4RD47LworICAgPFUwRTk0Pi4uPFUwRTk3Pjs8VTBFOTk+Li48VTBFOUY+OzxVMEVBMT4uLjxVMEVBMz47PFUwRUE1Pjs8VTBFQTc+Oy8KKyAgIDxVMEVBQT4uLjxVMEVBQj47PFUwRUFEPi4uPFUwRUIwPjs8VTBFQjI+Li48VTBFQjM+OzxVMEVCRD47LworICAgPFUwRUMwPi4uPFUwRUM0Pjs8VTBFQzY+OzxVMEVEQz4uLjxVMEVERD47LworJSBUSUJFVEFOLworICAgPFUwRjAwPjs8VTBGNDA+Li48VTBGNDc+OzxVMEY0OT4uLjxVMEY2QT47PFUwRjg4Pi4uPFUwRjhCPjsvCislIE1ZQU5NQVIvCisgICA8VTEwMDA+Li48VTEwMjE+OzxVMTAyMz4uLjxVMTAyNz47PFUxMDI5Pjs8VTEwMkE+OzxVMTA1MD4uLjxVMTA1NT47LworJSBUQUJMRSAyOCBHRU9SR0lBTi8KKyAgIDxVMTBBMD4uLjxVMTBDNT47PFUxMEQwPi4uPFUxMEY4PjsvCislIEhBTkdVTCBKQU1PLworICAgPFUxMTAwPi4uPFUxMTU5Pjs8VTExNUY+Li48VTExQTI+OzxVMTFBOD4uLjxVMTFGOT47LworJSBFVEhJT1BJQy8KKyAgIDxVMTIwMD4uLjxVMTIwNj47PFUxMjA4Pi4uPFUxMjQ2Pjs8VTEyNDg+OzxVMTI0QT4uLjxVMTI0RD47LworICAgPFUxMjUwPi4uPFUxMjU2Pjs8VTEyNTg+OzxVMTI1QT4uLjxVMTI1RD47PFUxMjYwPi4uPFUxMjg2Pjs8VTEyODg+Oy8KKyAgIDxVMTI4QT4uLjxVMTI4RD47PFUxMjkwPi4uPFUxMkFFPjs8VTEyQjA+OzxVMTJCMj4uLjxVMTJCNT47LworICAgPFUxMkI4Pi4uPFUxMkJFPjs8VTEyQzA+OzxVMTJDMj4uLjxVMTJDNT47PFUxMkM4Pi4uPFUxMkNFPjsvCisgICA8VTEyRDA+Li48VTEyRDY+OzxVMTJEOD4uLjxVMTJFRT47PFUxMkYwPi4uPFUxMzBFPjs8VTEzMTA+Oy8KKyAgIDxVMTMxMj4uLjxVMTMxNT47PFUxMzE4Pi4uPFUxMzFFPjs8VTEzMjA+Li48VTEzNDY+OzxVMTM0OD4uLjxVMTM1QT47LworJSBDSEVST0tFRS8KKyAgIDxVMTNBMD4uLjxVMTNGND47LworJSBVTklGSUVEIENBTkFESUFOIEFCT1JJR0lOQUwgU1lMTEFCSUNTLworICAgPFUxNDAxPi4uPFUxNjZDPjs8VTE2NkY+Li48VTE2NzY+Oy8KKyUgT0dIQU0vCisgICA8VTE2ODE+Li48VTE2OUE+Oy8KKyUgUlVOSUMvCisgICA8VTE2QTA+Li48VTE2RUE+OzxVMTZFRT4uLjxVMTZGMD47LworJSBUQUdBTE9HLworICAgPFUxNzAwPi4uPFUxNzBDPjs8VTE3MEU+Li48VTE3MTE+Oy8KKyUgSEFOVU5PTy8KKyAgIDxVMTcyMD4uLjxVMTczMT47LworJSBCVUhJRC8KKyAgIDxVMTc0MD4uLjxVMTc1MT47LworJSBUQUdCQU5XQS8KKyAgIDxVMTc2MD4uLjxVMTc2Qz47PFUxNzZFPi4uPFUxNzcwPjsvCislIEtITUVSLworICAgPFUxNzgwPi4uPFUxN0IzPjs8VTE3RDc+OzxVMTdEQz47LworJSBNT05HT0xJQU4vCisgICA8VTE4MjA+Li48VTE4Nzc+OzxVMTg4MD4uLjxVMThBOD47LworJSBUQUJMRSAzMSBhbmQgMzIgTEFUSU4gRVhURU5ERUQgQURESVRJT05BTC8KKyAgIDxVMUUwMD4uLjxVMUU5Qj47PFUxRUEwPi4uPFUxRUY5PjsvCislIFRBQkxFIDMzIGFuZCAzNCBHUkVFSyBFWFRFTkRFRC8KKyAgIDxVMUYwMD4uLjxVMUYxNT47PFUxRjE4Pi4uPFUxRjFEPjs8VTFGMjA+Li48VTFGNDU+OzxVMUY0OD4uLjxVMUY0RD47LworICAgPFUxRjUwPi4uPFUxRjU3Pjs8VTFGNTk+OzxVMUY1Qj47PFUxRjVEPjs8VTFGNUY+Li48VTFGN0Q+Oy8KKyAgIDxVMUY4MD4uLjxVMUZCND47PFUxRkI2Pi4uPFUxRkJDPjs8VTFGQkU+OzxVMUZDMj4uLjxVMUZDND47LworICAgPFUxRkM2Pi4uPFUxRkNDPjs8VTFGRDA+Li48VTFGRDM+OzxVMUZENj4uLjxVMUZEQj47PFUxRkUwPi4uPFUxRkVDPjsvCisgICA8VTFGRjI+Li48VTFGRjQ+OzxVMUZGNj4uLjxVMUZGQz47LworJSBUQUJMRSAzNSBTVVBFUlNDUklQVFMgQU5EIFNVQlNDUklQVFMsIENVUlJFTkNZIFNZTUJPTFMvCisgICA8VTIwNzE+OzxVMjA3Rj47LworJSBMRVRURVJMSUtFIFNZTUJPTFMvCisgICA8VTIxMDI+OzxVMjEwNz47PFUyMTBBPi4uPFUyMTEzPjs8VTIxMTU+OzxVMjExOT4uLjxVMjExRD47PFUyMTI0PjsvCisgICA8VTIxMjY+OzxVMjEyOD4uLjxVMjEyRD47PFUyMTJGPi4uPFUyMTMxPjs8VTIxMzM+Li48VTIxMzk+Oy8KKyAgIDxVMjEzRD4uLjxVMjEzRj47PFUyMTQ1Pi4uPFUyMTQ5PjsvCislIE5VTUJFUiBGT1JNUy8KKyAgIDxVMjE2MD4uLjxVMjE4Mz47LworJSBFTkNMT1NFRCBBTFBIQU5VTUVSSUNTLworICAgPFUyNDlDPi4uPFUyNEU5PjsvCislIENKSyBTWU1CT0xTIEFORCBQVU5DVFVBVElPTi8KKyAgIDxVMzAwNT4uLjxVMzAwNz47PFUzMDIxPi4uPFUzMDI5Pjs8VTMwMzE+Li48VTMwMzU+OzxVMzAzOD4uLjxVMzAzQz47LworJSBUQUJMRSA1MCBISVJBR0FOQS8KKyAgIDxVMzA0MT4uLjxVMzA5Nj47PFUzMDlEPi4uPFUzMDlGPjsvCislIFRBQkxFIDUxIEtBVEFLQU5BLworICAgPFUzMEExPi4uPFUzMEZBPjs8VTMwRkM+Li48VTMwRkY+Oy8KKyUgVEFCTEUgNTIgQk9QT01PRk8vCisgICA8VTMxMDU+Li48VTMxMkM+Oy8KKyUgSEFOR1VMIENPTVBBVElCSUxJVFkgSkFNTy8KKyAgIDxVMzEzMT4uLjxVMzE4RT47LworJSBCT1BPTU9GTyBFWFRFTkRFRC8KKyAgIDxVMzFBMD4uLjxVMzFCNz47LworJSBLQVRBS0FOQSBQSE9ORVRJQyBFWFRFTlNJT05TLworICAgPFUzMUYwPi4uPFUzMUZGPjsvCislIENKSyBVTklGSUVEIElERU9HUkFQSFMgRVhURU5TSU9OLworICAgPFUzNDAwPi4uPFU0REI1PjsvCislIENKSyBVTklGSUVEIElERU9HUkFQSFMvCisgICA8VTRFMDA+Li48VTlGQTU+Oy8KKyUgWUkgU1lMTEFCTEVTLworICAgPFVBMDAwPi4uPFVBNDhDPjsvCislIEhBTkdVTCBTWUxMQUJMRVMvCisgICA8VUFDMDA+Li48VUQ3QTM+Oy8KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBIUy8KKyAgIDxVRjkwMD4uLjxVRkEyRD47PFVGQTMwPi4uPFVGQTZBPjsvCislIEFMUEhBQkVUSUMgUFJFU0VOVEFUSU9OIEZPUk1TLworICAgPFVGQjAwPi4uPFVGQjA2Pjs8VUZCMTM+Li48VUZCMTc+OzxVRkIxRD47PFVGQjFGPi4uPFVGQjI4PjsvCisgICA8VUZCMkE+Li48VUZCMzY+OzxVRkIzOD4uLjxVRkIzQz47PFVGQjNFPjs8VUZCNDA+OzxVRkI0MT47PFVGQjQzPjsvCisgICA8VUZCNDQ+OzxVRkI0Nj4uLjxVRkI0Rj47LworJSBBUkFCSUMgUFJFU0VOVEFUSU9OIEZPUk1TLworICAgPFVGQjUwPi4uPFVGQkIxPjs8VUZCRDM+Li48VUZEM0Q+OzxVRkQ1MD4uLjxVRkQ4Rj47PFVGRDkyPi4uPFVGREM3PjsvCisgICA8VUZERjA+Li48VUZERkI+Oy8KKyUgQVJBQklDIFBSRVNFTlRBVElPTiBGT1JNUy8KKyAgIDxVRkU3MD4uLjxVRkU3ND47PFVGRTc2Pi4uPFVGRUZDPjsvCislIEhBTEZXSURUSCBBTkQgRlVMTFdJRFRIIEZPUk1TLworICAgPFVGRjIxPi4uPFVGRjNBPjs8VUZGNDE+Li48VUZGNUE+OzxVRkY2Nj4uLjxVRkZCRT47PFVGRkMyPi4uPFVGRkM3PjsvCisgICA8VUZGQ0E+Li48VUZGQ0Y+OzxVRkZEMj4uLjxVRkZENz47PFVGRkRBPi4uPFVGRkRDPjsvCislIE9MRCBJVEFMSUMvCisgICA8VTAwMDEwMzAwPi4uPFUwMDAxMDMxRT47LworJSBHT1RISUMvCisgICA8VTAwMDEwMzMwPi4uPFUwMDAxMDM0QT47LworJSBERVNFUkVULworICAgPFUwMDAxMDQwMD4uLjxVMDAwMTA0MjU+OzxVMDAwMTA0Mjg+Li48VTAwMDEwNDREPjsvCislIE1BVEhFTUFUSUNBTCBBTFBIQU5VTUVSSUMgU1lNQk9MUy8KKyAgIDxVMDAwMUQ0MDA+Li48VTAwMDFENDU0Pjs8VTAwMDFENDU2Pi4uPFUwMDAxRDQ5Qz47LworICAgPFUwMDAxRDQ5RT4uLjxVMDAwMUQ0OUY+OzxVMDAwMUQ0QTI+OzxVMDAwMUQ0QTU+Li48VTAwMDFENEE2PjsvCisgICA8VTAwMDFENEE5Pi4uPFUwMDAxRDRBQz47PFUwMDAxRDRBRT4uLjxVMDAwMUQ0Qjk+OzxVMDAwMUQ0QkI+Oy8KKyAgIDxVMDAwMUQ0QkQ+Li48VTAwMDFENEMwPjs8VTAwMDFENEMyPi4uPFUwMDAxRDRDMz47LworICAgPFUwMDAxRDRDNT4uLjxVMDAwMUQ1MDU+OzxVMDAwMUQ1MDc+Li48VTAwMDFENTBBPjsvCisgICA8VTAwMDFENTBEPi4uPFUwMDAxRDUxND47PFUwMDAxRDUxNj4uLjxVMDAwMUQ1MUM+Oy8KKyAgIDxVMDAwMUQ1MUU+Li48VTAwMDFENTM5Pjs8VTAwMDFENTNCPi4uPFUwMDAxRDUzRT47LworICAgPFUwMDAxRDU0MD4uLjxVMDAwMUQ1NDQ+OzxVMDAwMUQ1NDY+OzxVMDAwMUQ1NEE+Li48VTAwMDFENTUwPjsvCisgICA8VTAwMDFENTUyPi4uPFUwMDAxRDZBMz47PFUwMDAxRDZBOD4uLjxVMDAwMUQ2QzA+Oy8KKyAgIDxVMDAwMUQ2QzI+Li48VTAwMDFENkRBPjs8VTAwMDFENkRDPi4uPFUwMDAxRDZGQT47LworICAgPFUwMDAxRDZGQz4uLjxVMDAwMUQ3MTQ+OzxVMDAwMUQ3MTY+Li48VTAwMDFENzM0PjsvCisgICA8VTAwMDFENzM2Pi4uPFUwMDAxRDc0RT47PFUwMDAxRDc1MD4uLjxVMDAwMUQ3NkU+Oy8KKyAgIDxVMDAwMUQ3NzA+Li48VTAwMDFENzg4Pjs8VTAwMDFENzhBPi4uPFUwMDAxRDdBOD47LworICAgPFUwMDAxRDdBQT4uLjxVMDAwMUQ3QzI+OzxVMDAwMUQ3QzQ+Li48VTAwMDFEN0M5PjsvCisgICA8VTAwMDFEN0NFPi4uPFUwMDAxRDdGRj47LworJSBDSksgVU5JRklFRCBJREVPR1JBUEhTIEVYVEVOU0lPTi8KKyAgIDxVMDAwMjAwMDA+Li48VTAwMDJBNkQ2PjsvCislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSFMgU1VQUExFTUVOVC8KKyAgIDxVMDAwMkY4MDA+Li48VTAwMDJGQTFEPjsvCislIFRoZSBub24tQVNDSUkgbnVtYmVyIGNoYXJhY3RlcnMgYXJlIGluY2x1ZGVkIGhlcmUgYmVjYXVzZSBJU08gQyA5OSAgICAvCislIGZvcmJpZHMgdXMgdG8gY2xhc3NpZnkgdGhlbSBhcyBkaWdpdHM7IGhvd2V2ZXIsIHRoZXkgYmVoYXZlIG1vcmUgbGlrZSAvCislIGFscGhhbnVtZXJpYyB0aGFuIGxpa2UgcHVuY3R1YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvCislIFRBQkxFIDE1IGFuZCAxNiBBUkFCSUMvCisgICA8VTA2NjA+Li48VTA2Njk+OzxVMDZGMD4uLjxVMDZGOT47LworJSBUQUJMRSAxNyBERVZBTkFHQVJJLworICAgPFUwOTY2Pi4uPFUwOTZGPjsvCislIFRBQkxFIDE4IEJFTkdBTEkvCisgICA8VTA5RTY+Li48VTA5RUY+Oy8KKyUgVEFCTEUgMTkgR1VSTVVLSEkvCisgICA8VTBBNjY+Li48VTBBNkY+Oy8KKyUgVEFCTEUgMjAgR1VKQVJBVEkvCisgICA8VTBBRTY+Li48VTBBRUY+Oy8KKyUgVEFCTEUgMjEgT1JJWUEvCisgICA8VTBCNjY+Li48VTBCNkY+Oy8KKyUgVEFCTEUgMjIgVEFNSUwvCisgICA8MD47PFUwQkU3Pi4uPFUwQkVGPjsvCislIFRBQkxFIDIzIFRFTFVHVS8KKyAgIDxVMEM2Nj4uLjxVMEM2Rj47LworJSBUQUJMRSAyNCBLQU5OQURBLworICAgPFUwQ0U2Pi4uPFUwQ0VGPjsvCislIFRBQkxFIDI1IE1BTEFZQUxBTS8KKyAgIDxVMEQ2Nj4uLjxVMEQ2Rj47LworJSBUQUJMRSAyNiBUSEFJLworICAgPFUwRTUwPi4uPFUwRTU5PjsvCislIFRBQkxFIDI3IExBTy8KKyAgIDxVMEVEMD4uLjxVMEVEOT47LworJSBUSUJFVEFOLworICAgPFUwRjIwPi4uPFUwRjI5PjsvCislIE1ZQU5NQVIvCisgICA8VTEwNDA+Li48VTEwNDk+Oy8KKyUgRVRISU9QSUMvCisgICA8MD47PFUxMzY5Pi4uPFUxMzcxPjsvCislIEtITUVSLworICAgPFUxN0UwPi4uPFUxN0U5PjsvCislIE1PTkdPTElBTi8KKyAgIDxVMTgxMD4uLjxVMTgxOT47LworJSBIQUxGV0lEVEggQU5EIEZVTExXSURUSCBGT1JNUy8KKyAgIDxVRkYxMD4uLjxVRkYxOT4KKworJSBUaGUgImRpZ2l0IiBjbGFzcyBtdXN0IG9ubHkgY29udGFpbiB0aGUgQkFTSUMgTEFUSU4gZGlnaXRzLCBzYXlzIElTTyBDIDk5CislIChzZWN0aW9ucyA3LjI1LjIuMS41IGFuZCA1LjIuMSkuCitkaWdpdCAvCisgICA8VTAwMzA+Li48VTAwMzk+CisKKyUgVGhlICJvdXRkaWdpdCIgaW5mb3JtYXRpb24gaXMgYnkgZGVmYXVsdCAiMCIgdG8gIjkiLiAgV2UgZG9uJ3QgaGF2ZSB0bworJSBwcm92aWRlIGl0IGhlcmUgc2luY2UgbG9jYWxlZGVmIHdpbGwgZmlsbCBpbiB0aGUgYml0cyBhbmQgaXQgd291bGQKKyUgcHJldmVudCBsb2NhbGVzIGNvcHktaW5nIHRoaXMgZmlsZSBkZWZpbmUgdGhlaXIgb3duIHZhbHVlcy4KKyUgb3V0ZGlnaXQgPFUwMDMwPi4uPFUwMDM5PgorCitzcGFjZSAvCislIElTTy9JRUMgNjQyOS8KKyAgIDxVMDAwOT4uLjxVMDAwRD47LworJSBUQUJMRSAxIEJBU0lDIExBVElOLworICAgPFUwMDIwPjsvCislIE9HSEFNLworICAgPFUxNjgwPjsvCislIFRBQkxFIDM1IEdFTkVSQUwgUFVOQ1RVQVRJT04vCisgICA8VTIwMDA+Li48VTIwMDY+OzxVMjAwOD4uLjxVMjAwQj47PFUyMDI4Pjs8VTIwMjk+OzxVMjA1Rj47LworJSBUQUJMRSA1MCBDSksgU1lNQk9MUyBBTkQgUFVOQ1RVQVRJT04sIEhJUkFHQU5BLworICAgPFUzMDAwPgorCitjbnRybCAvCisgICA8VTAwMDA+Li48VTAwMUY+OzxVMDA3Rj4uLjxVMDA5Rj47LworJSBUcmVhdCB0aGUgTGluZS9QYXJhZ3JhcGggU2VwYXJhdG9ycyBhcyBjb250cm9sIGNoYXJhY3RlcnMsIGxpa2UgTGluZSBGZWVkLi8KKyAgIDxVMjAyOD47PFUyMDI5PgorCitwdW5jdCAvCisgICA8VTAwMjE+Li48VTAwMkY+OzxVMDAzQT4uLjxVMDA0MD47PFUwMDVCPi4uPFUwMDYwPjs8VTAwN0I+Li48VTAwN0U+Oy8KKyAgIDxVMDBBMD4uLjxVMDBBOT47PFUwMEFCPi4uPFUwMEI0Pjs8VTAwQjY+Li48VTAwQjk+OzxVMDBCQj4uLjxVMDBCRj47LworICAgPFUwMEQ3Pjs8VTAwRjc+OzxVMDJCOT4uLjxVMDJCQT47PFUwMkMyPi4uPFUwMkNGPjs8VTAyRDI+Li48VTAyREY+Oy8KKyAgIDxVMDJFNT4uLjxVMDJFRD47PFUwMzAwPi4uPFUwMzQ0Pjs8VTAzNDY+Li48VTAzNEY+OzxVMDM2MD4uLjxVMDM2Rj47LworICAgPFUwMzc0Pi4uPFUwMzc1Pjs8VTAzN0U+OzxVMDM4ND4uLjxVMDM4NT47PFUwMzg3Pjs8VTAzRjY+OzxVMDQ4Mj4uLjxVMDQ4Nj47LworICAgPFUwNDg4Pi4uPFUwNDg5Pjs8VTA1NUE+Li48VTA1NUY+OzxVMDU4OT4uLjxVMDU4QT47PFUwNTkxPi4uPFUwNUExPjsvCisgICA8VTA1QTM+Li48VTA1Qjk+OzxVMDVCQj4uLjxVMDVDND47PFUwNUYzPi4uPFUwNUY0Pjs8VTA2MEM+OzxVMDYxQj47LworICAgPFUwNjFGPjs8VTA2NEI+Li48VTA2NTU+OzxVMDY2QT4uLjxVMDY2RD47PFUwNjcwPjs8VTA2RDQ+Oy8KKyAgIDxVMDZENj4uLjxVMDZFND47PFUwNkU3Pi4uPFUwNkVEPjs8VTA2RkQ+Li48VTA2RkU+OzxVMDcwMD4uLjxVMDcwRD47LworICAgPFUwNzBGPjs8VTA3MTE+OzxVMDczMD4uLjxVMDc0QT47PFUwN0E2Pi4uPFUwN0IwPjs8VTA5MDE+Li48VTA5MDM+Oy8KKyAgIDxVMDkzQz47PFUwOTNFPi4uPFUwOTREPjs8VTA5NTE+Li48VTA5NTQ+OzxVMDk2Mj4uLjxVMDk2NT47PFUwOTcwPjsvCisgICA8VTA5ODE+Li48VTA5ODM+OzxVMDlCQz47PFUwOUJFPi4uPFUwOUM0Pjs8VTA5Qzc+Li48VTA5Qzg+Oy8KKyAgIDxVMDlDQj4uLjxVMDlDRD47PFUwOUQ3Pjs8VTA5RTI+Li48VTA5RTM+OzxVMDlGMj4uLjxVMDlGQT47PFUwQTAyPjsvCisgICA8VTBBM0M+OzxVMEEzRT4uLjxVMEE0Mj47PFUwQTQ3Pi4uPFUwQTQ4Pjs8VTBBNEI+Li48VTBBNEQ+Oy8KKyAgIDxVMEE3MD4uLjxVMEE3MT47PFUwQTgxPi4uPFUwQTgzPjs8VTBBQkM+OzxVMEFCRT4uLjxVMEFDNT47LworICAgPFUwQUM3Pi4uPFUwQUM5Pjs8VTBBQ0I+Li48VTBBQ0Q+OzxVMEIwMT4uLjxVMEIwMz47PFUwQjNDPjsvCisgICA8VTBCM0U+Li48VTBCNDM+OzxVMEI0Nz4uLjxVMEI0OD47PFUwQjRCPi4uPFUwQjREPjs8VTBCNTY+Li48VTBCNTc+Oy8KKyAgIDxVMEI3MD47PFUwQjgyPjs8VTBCQkU+Li48VTBCQzI+OzxVMEJDNj4uLjxVMEJDOD47LworICAgPFUwQkNBPi4uPFUwQkNEPjs8VTBCRDc+OzxVMEJGMD4uLjxVMEJGMj47PFUwQzAxPi4uPFUwQzAzPjsvCisgICA8VTBDM0U+Li48VTBDNDQ+OzxVMEM0Nj4uLjxVMEM0OD47PFUwQzRBPi4uPFUwQzREPjs8VTBDNTU+Li48VTBDNTY+Oy8KKyAgIDxVMEM4Mj4uLjxVMEM4Mz47PFUwQ0JFPi4uPFUwQ0M0Pjs8VTBDQzY+Li48VTBDQzg+OzxVMENDQT4uLjxVMENDRD47LworICAgPFUwQ0Q1Pi4uPFUwQ0Q2Pjs8VTBEMDI+Li48VTBEMDM+OzxVMEQzRT4uLjxVMEQ0Mz47PFUwRDQ2Pi4uPFUwRDQ4PjsvCisgICA8VTBENEE+Li48VTBENEQ+OzxVMEQ1Nz47PFUwRDgyPi4uPFUwRDgzPjs8VTBEQ0E+OzxVMERDRj4uLjxVMEREND47LworICAgPFUwREQ2Pjs8VTBERDg+Li48VTBEREY+OzxVMERGMj4uLjxVMERGND47PFUwRTJGPjs8VTBFM0Y+OzxVMEU0Nj47LworICAgPFUwRTRGPjs8VTBFNUE+Li48VTBFNUI+OzxVMEVCMT47PFUwRUI0Pi4uPFUwRUI5PjsvCisgICA8VTBFQkI+Li48VTBFQkM+OzxVMEVDOD4uLjxVMEVDRD47PFUwRjAxPi4uPFUwRjFGPjs8VTBGMkE+Li48VTBGM0Y+Oy8KKyAgIDxVMEY3MT4uLjxVMEY4Nz47PFUwRjkwPi4uPFUwRjk3Pjs8VTBGOTk+Li48VTBGQkM+OzxVMEZCRT4uLjxVMEZDQz47LworICAgPFUwRkNGPjs8VTEwMkM+Li48VTEwMzI+OzxVMTAzNj4uLjxVMTAzOT47PFUxMDRBPi4uPFUxMDRGPjsvCisgICA8VTEwNTY+Li48VTEwNTk+OzxVMTBGQj47PFUxMzYxPi4uPFUxMzY4Pjs8VTEzNzI+Li48VTEzN0M+Oy8KKyAgIDxVMTY2RD4uLjxVMTY2RT47PFUxNjlCPi4uPFUxNjlDPjs8VTE2RUI+Li48VTE2RUQ+Oy8KKyAgIDxVMTcxMj4uLjxVMTcxND47PFUxNzMyPi4uPFUxNzM2Pjs8VTE3NTI+Li48VTE3NTM+OzxVMTc3Mj4uLjxVMTc3Mz47LworICAgPFUxN0I0Pi4uPFUxN0Q2Pjs8VTE3RDg+Li48VTE3REI+Oy8KKyAgIDxVMTgwMD4uLjxVMTgwRT47PFUxOEE5Pjs8VTFGQkQ+OzxVMUZCRj4uLjxVMUZDMT47PFUxRkNEPi4uPFUxRkNGPjsvCisgICA8VTFGREQ+Li48VTFGREY+OzxVMUZFRD4uLjxVMUZFRj47PFUxRkZEPi4uPFUxRkZFPjs8VTIwMDc+Oy8KKyAgIDxVMjAwQz4uLjxVMjAyNz47PFUyMDJBPi4uPFUyMDUyPjs8VTIwNTc+OzxVMjA2MD4uLjxVMjA2Mz47PFUyMDZBPi4uPFUyMDcwPjsvCisgICA8VTIwNzQ+Li48VTIwN0U+OzxVMjA4MD4uLjxVMjA4RT47PFUyMEEwPi4uPFUyMEIxPjs8VTIwRDA+Li48VTIwRUE+Oy8KKyAgIDxVMjEwMD4uLjxVMjEwMT47PFUyMTAzPi4uPFUyMTA2Pjs8VTIxMDg+Li48VTIxMDk+OzxVMjExND47LworICAgPFUyMTE2Pi4uPFUyMTE4Pjs8VTIxMUU+Li48VTIxMjM+OzxVMjEyNT47PFUyMTI3Pjs8VTIxMkU+OzxVMjEzMj47LworICAgPFUyMTNBPjs8VTIxNDA+Li48VTIxNDQ+OzxVMjE0QT4uLjxVMjE0Qj47PFUyMTUzPi4uPFUyMTVGPjsvCisgICA8VTIxOTA+Li48VTIzQ0U+OzxVMjQwMD4uLjxVMjQyNj47PFUyNDQwPi4uPFUyNDRBPjsvCisgICA8VTI0NjA+Li48VTI0OUI+OzxVMjRFQT4uLjxVMjRGRT47PFUyNTAwPi4uPFUyNjEzPjs8VTI2MTY+Li48VTI2MTc+Oy8KKyAgIDxVMjYxOT4uLjxVMjY3RD47PFUyNjgwPi4uPFUyNjg5Pjs8VTI3MDE+Li48VTI3MDQ+OzxVMjcwNj4uLjxVMjcwOT47LworICAgPFUyNzBDPi4uPFUyNzI3Pjs8VTI3Mjk+Li48VTI3NEI+OzxVMjc0RD47PFUyNzRGPi4uPFUyNzUyPjs8VTI3NTY+Oy8KKyAgIDxVMjc1OD4uLjxVMjc1RT47PFUyNzYxPi4uPFUyNzk0Pjs8VTI3OTg+Li48VTI3QUY+OzxVMjdCMT4uLjxVMjdCRT47LworICAgPFUyN0QwPi4uPFUyN0VCPjs8VTI3RjA+Li48VTJBRkY+OzxVMkU4MD4uLjxVMkU5OT47PFUyRTlCPi4uPFUyRUYzPjsvCisgICA8VTJGMDA+Li48VTJGRDU+OzxVMkZGMD4uLjxVMkZGQj47PFUzMDAxPi4uPFUzMDA0Pjs8VTMwMDg+Li48VTMwMjA+Oy8KKyAgIDxVMzAyQT4uLjxVMzAzMD47PFUzMDM2Pi4uPFUzMDM3Pjs8VTMwM0Q+Li48VTMwM0Y+OzxVMzA5OT4uLjxVMzA5Qz47LworICAgPFUzMEEwPjs8VTMwRkI+OzxVMzE5MD4uLjxVMzE5Rj47PFUzMjAwPi4uPFUzMjFDPjs8VTMyMjA+Li48VTMyNDM+Oy8KKyAgIDxVMzI1MT4uLjxVMzI3Qj47PFUzMjdGPi4uPFUzMkNCPjs8VTMyRDA+Li48VTMyRkU+Oy8KKyAgIDxVMzMwMD4uLjxVMzM3Nj47PFUzMzdCPi4uPFUzM0REPjs8VTMzRTA+Li48VTMzRkU+OzxVQTQ5MD4uLjxVQTRDNj47LworICAgPFVFMDAwPi4uPFVGOEZGPjs8VUZCMUU+OzxVRkIyOT47PFVGRDNFPi4uPFVGRDNGPjs8VUZERkM+Oy8KKyAgIDxVRkUwMD4uLjxVRkUwRj47PFVGRTIwPi4uPFVGRTIzPjsvCisgICA8VUZFMzA+Li48VUZFNDQ+OzxVRkU0OT4uLjxVRkU1Mj47PFVGRTU0Pi4uPFVGRTY2Pjs8VUZFNjg+Li48VUZFNkI+Oy8KKyAgIDxVRkVGRj47PFVGRjAxPi4uPFVGRjBGPjs8VUZGMUE+Li48VUZGMjA+OzxVRkYzQj4uLjxVRkY0MD47LworICAgPFVGRjVCPi4uPFVGRjY1Pjs8VUZGRTA+Li48VUZGRTY+OzxVRkZFOD4uLjxVRkZFRT47LworICAgPFVGRkY5Pi4uPFVGRkZEPjs8VTAwMDEwMzIwPi4uPFUwMDAxMDMyMz47PFUwMDAxRDAwMD4uLjxVMDAwMUQwRjU+Oy8KKyAgIDxVMDAwMUQxMDA+Li48VTAwMDFEMTI2Pjs8VTAwMDFEMTJBPi4uPFUwMDAxRDFERD47PFUwMDAxRDZDMT47LworICAgPFUwMDAxRDZEQj47PFUwMDAxRDZGQj47PFUwMDAxRDcxNT47PFUwMDAxRDczNT47PFUwMDAxRDc0Rj47LworICAgPFUwMDAxRDc2Rj47PFUwMDAxRDc4OT47PFUwMDAxRDdBOT47PFUwMDAxRDdDMz47PFUwMDBFMDAwMT47LworICAgPFUwMDBFMDAyMD4uLjxVMDAwRTAwN0Y+OzxVMDAwRjAwMDA+Li48VTAwMEZGRkZEPjsvCisgICA8VTAwMTAwMDAwPi4uPFUwMDEwRkZGRD4KKworZ3JhcGggLworICAgPFUwMDIxPi4uPFUwMDdFPjs8VTAwQTA+Li48VTAyMjA+OzxVMDIyMj4uLjxVMDIzMz47PFUwMjUwPi4uPFUwMkFEPjsvCisgICA8VTAyQjA+Li48VTAyRUU+OzxVMDMwMD4uLjxVMDM0Rj47PFUwMzYwPi4uPFUwMzZGPjs8VTAzNzQ+Li48VTAzNzU+Oy8KKyAgIDxVMDM3QT47PFUwMzdFPjs8VTAzODQ+Li48VTAzOEE+OzxVMDM4Qz47PFUwMzhFPi4uPFUwM0ExPjsvCisgICA8VTAzQTM+Li48VTAzQ0U+OzxVMDNEMD4uLjxVMDNGNj47PFUwNDAwPi4uPFUwNDg2Pjs8VTA0ODg+Li48VTA0Q0U+Oy8KKyAgIDxVMDREMD4uLjxVMDRGNT47PFUwNEY4Pi4uPFUwNEY5Pjs8VTA1MDA+Li48VTA1MEY+Oy8KKyAgIDxVMDUzMT4uLjxVMDU1Nj47PFUwNTU5Pi4uPFUwNTVGPjsvCisgICA8VTA1NjE+Li48VTA1ODc+OzxVMDU4OT4uLjxVMDU4QT47PFUwNTkxPi4uPFUwNUExPjs8VTA1QTM+Li48VTA1Qjk+Oy8KKyAgIDxVMDVCQj4uLjxVMDVDND47PFUwNUQwPi4uPFUwNUVBPjs8VTA1RjA+Li48VTA1RjQ+OzxVMDYwQz47PFUwNjFCPjsvCisgICA8VTA2MUY+OzxVMDYyMT4uLjxVMDYzQT47PFUwNjQwPi4uPFUwNjU1Pjs8VTA2NjA+Li48VTA2RUQ+Oy8KKyAgIDxVMDZGMD4uLjxVMDZGRT47PFUwNzAwPi4uPFUwNzBEPjs8VTA3MEY+Li48VTA3MkM+Oy8KKyAgIDxVMDczMD4uLjxVMDc0QT47PFUwNzgwPi4uPFUwN0IxPjs8VTA5MDE+Li48VTA5MDM+OzxVMDkwNT4uLjxVMDkzOT47LworICAgPFUwOTNDPi4uPFUwOTREPjs8VTA5NTA+Li48VTA5NTQ+OzxVMDk1OD4uLjxVMDk3MD47PFUwOTgxPi4uPFUwOTgzPjsvCisgICA8VTA5ODU+Li48VTA5OEM+OzxVMDk4Rj4uLjxVMDk5MD47PFUwOTkzPi4uPFUwOUE4Pjs8VTA5QUE+Li48VTA5QjA+Oy8KKyAgIDxVMDlCMj47PFUwOUI2Pi4uPFUwOUI5Pjs8VTA5QkM+OzxVMDlCRT4uLjxVMDlDND47PFUwOUM3Pi4uPFUwOUM4PjsvCisgICA8VTA5Q0I+Li48VTA5Q0Q+OzxVMDlENz47PFUwOURDPi4uPFUwOUREPjs8VTA5REY+Li48VTA5RTM+Oy8KKyAgIDxVMDlFNj4uLjxVMDlGQT47PFUwQTAyPjs8VTBBMDU+Li48VTBBMEE+OzxVMEEwRj4uLjxVMEExMD47LworICAgPFUwQTEzPi4uPFUwQTI4Pjs8VTBBMkE+Li48VTBBMzA+OzxVMEEzMj4uLjxVMEEzMz47PFUwQTM1Pi4uPFUwQTM2PjsvCisgICA8VTBBMzg+Li48VTBBMzk+OzxVMEEzQz47PFUwQTNFPi4uPFUwQTQyPjs8VTBBNDc+Li48VTBBNDg+Oy8KKyAgIDxVMEE0Qj4uLjxVMEE0RD47PFUwQTU5Pi4uPFUwQTVDPjs8VTBBNUU+OzxVMEE2Nj4uLjxVMEE3ND47LworICAgPFUwQTgxPi4uPFUwQTgzPjs8VTBBODU+Li48VTBBOEI+OzxVMEE4RD47PFUwQThGPi4uPFUwQTkxPjsvCisgICA8VTBBOTM+Li48VTBBQTg+OzxVMEFBQT4uLjxVMEFCMD47PFUwQUIyPi4uPFUwQUIzPjs8VTBBQjU+Li48VTBBQjk+Oy8KKyAgIDxVMEFCQz4uLjxVMEFDNT47PFUwQUM3Pi4uPFUwQUM5Pjs8VTBBQ0I+Li48VTBBQ0Q+OzxVMEFEMD47PFUwQUUwPjsvCisgICA8VTBBRTY+Li48VTBBRUY+OzxVMEIwMT4uLjxVMEIwMz47PFUwQjA1Pi4uPFUwQjBDPjs8VTBCMEY+Li48VTBCMTA+Oy8KKyAgIDxVMEIxMz4uLjxVMEIyOD47PFUwQjJBPi4uPFUwQjMwPjs8VTBCMzI+Li48VTBCMzM+OzxVMEIzNj4uLjxVMEIzOT47LworICAgPFUwQjNDPi4uPFUwQjQzPjs8VTBCNDc+Li48VTBCNDg+OzxVMEI0Qj4uLjxVMEI0RD47PFUwQjU2Pi4uPFUwQjU3PjsvCisgICA8VTBCNUM+Li48VTBCNUQ+OzxVMEI1Rj4uLjxVMEI2MT47PFUwQjY2Pi4uPFUwQjcwPjs8VTBCODI+Li48VTBCODM+Oy8KKyAgIDxVMEI4NT4uLjxVMEI4QT47PFUwQjhFPi4uPFUwQjkwPjs8VTBCOTI+Li48VTBCOTU+OzxVMEI5OT4uLjxVMEI5QT47LworICAgPFUwQjlDPjs8VTBCOUU+Li48VTBCOUY+OzxVMEJBMz4uLjxVMEJBND47PFUwQkE4Pi4uPFUwQkFBPjsvCisgICA8VTBCQUU+Li48VTBCQjU+OzxVMEJCNz4uLjxVMEJCOT47PFUwQkJFPi4uPFUwQkMyPjs8VTBCQzY+Li48VTBCQzg+Oy8KKyAgIDxVMEJDQT4uLjxVMEJDRD47PFUwQkQ3Pjs8VTBCRTc+Li48VTBCRjI+OzxVMEMwMT4uLjxVMEMwMz47LworICAgPFUwQzA1Pi4uPFUwQzBDPjs8VTBDMEU+Li48VTBDMTA+OzxVMEMxMj4uLjxVMEMyOD47PFUwQzJBPi4uPFUwQzMzPjsvCisgICA8VTBDMzU+Li48VTBDMzk+OzxVMEMzRT4uLjxVMEM0ND47PFUwQzQ2Pi4uPFUwQzQ4Pjs8VTBDNEE+Li48VTBDNEQ+Oy8KKyAgIDxVMEM1NT4uLjxVMEM1Nj47PFUwQzYwPi4uPFUwQzYxPjs8VTBDNjY+Li48VTBDNkY+OzxVMEM4Mj4uLjxVMEM4Mz47LworICAgPFUwQzg1Pi4uPFUwQzhDPjs8VTBDOEU+Li48VTBDOTA+OzxVMEM5Mj4uLjxVMENBOD47PFUwQ0FBPi4uPFUwQ0IzPjsvCisgICA8VTBDQjU+Li48VTBDQjk+OzxVMENCRT4uLjxVMENDND47PFUwQ0M2Pi4uPFUwQ0M4Pjs8VTBDQ0E+Li48VTBDQ0Q+Oy8KKyAgIDxVMENENT4uLjxVMENENj47PFUwQ0RFPjs8VTBDRTA+Li48VTBDRTE+OzxVMENFNj4uLjxVMENFRj47LworICAgPFUwRDAyPi4uPFUwRDAzPjs8VTBEMDU+Li48VTBEMEM+OzxVMEQwRT4uLjxVMEQxMD47PFUwRDEyPi4uPFUwRDI4PjsvCisgICA8VTBEMkE+Li48VTBEMzk+OzxVMEQzRT4uLjxVMEQ0Mz47PFUwRDQ2Pi4uPFUwRDQ4Pjs8VTBENEE+Li48VTBENEQ+Oy8KKyAgIDxVMEQ1Nz47PFUwRDYwPi4uPFUwRDYxPjs8VTBENjY+Li48VTBENkY+OzxVMEQ4Mj4uLjxVMEQ4Mz47LworICAgPFUwRDg1Pi4uPFUwRDk2Pjs8VTBEOUE+Li48VTBEQjE+OzxVMERCMz4uLjxVMERCQj47PFUwREJEPjsvCisgICA8VTBEQzA+Li48VTBEQzY+OzxVMERDQT47PFUwRENGPi4uPFUwREQ0Pjs8VTBERDY+OzxVMEREOD4uLjxVMERERj47LworICAgPFUwREYyPi4uPFUwREY0Pjs8VTBFMDE+Li48VTBFM0E+OzxVMEUzRj4uLjxVMEU1Qj47PFUwRTgxPi4uPFUwRTgyPjsvCisgICA8VTBFODQ+OzxVMEU4Nz4uLjxVMEU4OD47PFUwRThBPjs8VTBFOEQ+OzxVMEU5ND4uLjxVMEU5Nz47LworICAgPFUwRTk5Pi4uPFUwRTlGPjs8VTBFQTE+Li48VTBFQTM+OzxVMEVBNT47PFUwRUE3Pjs8VTBFQUE+Li48VTBFQUI+Oy8KKyAgIDxVMEVBRD4uLjxVMEVCOT47PFUwRUJCPi4uPFUwRUJEPjs8VTBFQzA+Li48VTBFQzQ+OzxVMEVDNj47LworICAgPFUwRUM4Pi4uPFUwRUNEPjs8VTBFRDA+Li48VTBFRDk+OzxVMEVEQz4uLjxVMEVERD47PFUwRjAwPi4uPFUwRjQ3PjsvCisgICA8VTBGNDk+Li48VTBGNkE+OzxVMEY3MT4uLjxVMEY4Qj47PFUwRjkwPi4uPFUwRjk3Pjs8VTBGOTk+Li48VTBGQkM+Oy8KKyAgIDxVMEZCRT4uLjxVMEZDQz47PFUwRkNGPjs8VTEwMDA+Li48VTEwMjE+OzxVMTAyMz4uLjxVMTAyNz47LworICAgPFUxMDI5Pi4uPFUxMDJBPjs8VTEwMkM+Li48VTEwMzI+OzxVMTAzNj4uLjxVMTAzOT47PFUxMDQwPi4uPFUxMDU5PjsvCisgICA8VTEwQTA+Li48VTEwQzU+OzxVMTBEMD4uLjxVMTBGOD47PFUxMEZCPjs8VTExMDA+Li48VTExNTk+Oy8KKyAgIDxVMTE1Rj4uLjxVMTFBMj47PFUxMUE4Pi4uPFUxMUY5Pjs8VTEyMDA+Li48VTEyMDY+OzxVMTIwOD4uLjxVMTI0Nj47LworICAgPFUxMjQ4Pjs8VTEyNEE+Li48VTEyNEQ+OzxVMTI1MD4uLjxVMTI1Nj47PFUxMjU4Pjs8VTEyNUE+Li48VTEyNUQ+Oy8KKyAgIDxVMTI2MD4uLjxVMTI4Nj47PFUxMjg4Pjs8VTEyOEE+Li48VTEyOEQ+OzxVMTI5MD4uLjxVMTJBRT47PFUxMkIwPjsvCisgICA8VTEyQjI+Li48VTEyQjU+OzxVMTJCOD4uLjxVMTJCRT47PFUxMkMwPjs8VTEyQzI+Li48VTEyQzU+Oy8KKyAgIDxVMTJDOD4uLjxVMTJDRT47PFUxMkQwPi4uPFUxMkQ2Pjs8VTEyRDg+Li48VTEyRUU+OzxVMTJGMD4uLjxVMTMwRT47LworICAgPFUxMzEwPjs8VTEzMTI+Li48VTEzMTU+OzxVMTMxOD4uLjxVMTMxRT47PFUxMzIwPi4uPFUxMzQ2PjsvCisgICA8VTEzNDg+Li48VTEzNUE+OzxVMTM2MT4uLjxVMTM3Qz47PFUxM0EwPi4uPFUxM0Y0Pjs8VTE0MDE+Li48VTE2NzY+Oy8KKyAgIDxVMTY4MT4uLjxVMTY5Qz47PFUxNkEwPi4uPFUxNkYwPjs8VTE3MDA+Li48VTE3MEM+OzxVMTcwRT4uLjxVMTcxND47LworICAgPFUxNzIwPi4uPFUxNzM2Pjs8VTE3NDA+Li48VTE3NTM+OzxVMTc2MD4uLjxVMTc2Qz47PFUxNzZFPi4uPFUxNzcwPjsvCisgICA8VTE3NzI+Li48VTE3NzM+OzxVMTc4MD4uLjxVMTdEQz47PFUxN0UwPi4uPFUxN0U5PjsvCisgICA8VTE4MDA+Li48VTE4MEU+OzxVMTgxMD4uLjxVMTgxOT47PFUxODIwPi4uPFUxODc3Pjs8VTE4ODA+Li48VTE4QTk+Oy8KKyAgIDxVMUUwMD4uLjxVMUU5Qj47PFUxRUEwPi4uPFUxRUY5Pjs8VTFGMDA+Li48VTFGMTU+OzxVMUYxOD4uLjxVMUYxRD47LworICAgPFUxRjIwPi4uPFUxRjQ1Pjs8VTFGNDg+Li48VTFGNEQ+OzxVMUY1MD4uLjxVMUY1Nz47PFUxRjU5Pjs8VTFGNUI+Oy8KKyAgIDxVMUY1RD47PFUxRjVGPi4uPFUxRjdEPjs8VTFGODA+Li48VTFGQjQ+OzxVMUZCNj4uLjxVMUZDND47LworICAgPFUxRkM2Pi4uPFUxRkQzPjs8VTFGRDY+Li48VTFGREI+OzxVMUZERD4uLjxVMUZFRj47PFUxRkYyPi4uPFUxRkY0PjsvCisgICA8VTFGRjY+Li48VTFGRkU+OzxVMjAwNz47PFUyMDBDPi4uPFUyMDI3Pjs8VTIwMkE+Li48VTIwNTI+OzxVMjA1Nz47LworICAgPFUyMDYwPi4uPFUyMDYzPjs8VTIwNkE+Li48VTIwNzE+OzxVMjA3ND4uLjxVMjA4RT47PFUyMEEwPi4uPFUyMEIxPjsvCisgICA8VTIwRDA+Li48VTIwRUE+OzxVMjEwMD4uLjxVMjEzQT47PFUyMTNEPi4uPFUyMTRCPjs8VTIxNTM+Li48VTIxODM+Oy8KKyAgIDxVMjE5MD4uLjxVMjNDRT47PFUyNDAwPi4uPFUyNDI2PjsvCisgICA8VTI0NDA+Li48VTI0NEE+OzxVMjQ2MD4uLjxVMjRGRT47PFUyNTAwPi4uPFUyNjEzPjs8VTI2MTY+Li48VTI2MTc+Oy8KKyAgIDxVMjYxOT4uLjxVMjY3RD47PFUyNjgwPi4uPFUyNjg5Pjs8VTI3MDE+Li48VTI3MDQ+OzxVMjcwNj4uLjxVMjcwOT47LworICAgPFUyNzBDPi4uPFUyNzI3Pjs8VTI3Mjk+Li48VTI3NEI+OzxVMjc0RD47PFUyNzRGPi4uPFUyNzUyPjs8VTI3NTY+Oy8KKyAgIDxVMjc1OD4uLjxVMjc1RT47PFUyNzYxPi4uPFUyNzk0Pjs8VTI3OTg+Li48VTI3QUY+OzxVMjdCMT4uLjxVMjdCRT47LworICAgPFUyN0QwPi4uPFUyN0VCPjs8VTI3RjA+Li48VTJBRkY+OzxVMkU4MD4uLjxVMkU5OT47PFUyRTlCPi4uPFUyRUYzPjsvCisgICA8VTJGMDA+Li48VTJGRDU+OzxVMkZGMD4uLjxVMkZGQj47PFUzMDAxPi4uPFUzMDNGPjsvCisgICA8VTMwNDE+Li48VTMwOTY+OzxVMzA5OT4uLjxVMzBGRj47PFUzMTA1Pi4uPFUzMTJDPjsvCisgICA8VTMxMzE+Li48VTMxOEU+OzxVMzE5MD4uLjxVMzFCNz47PFUzMUYwPi4uPFUzMjFDPjs8VTMyMjA+Li48VTMyNDM+Oy8KKyAgIDxVMzI1MT4uLjxVMzI3Qj47PFUzMjdGPi4uPFUzMkNCPjs8VTMyRDA+Li48VTMyRkU+Oy8KKyAgIDxVMzMwMD4uLjxVMzM3Nj47PFUzMzdCPi4uPFUzM0REPjs8VTMzRTA+Li48VTMzRkU+OzxVMzQwMD4uLjxVNERCNT47LworICAgPFU0RTAwPi4uPFU5RkE1Pjs8VUEwMDA+Li48VUE0OEM+OzxVQTQ5MD4uLjxVQTRDNj47PFVBQzAwPi4uPFVEN0EzPjsvCisgICA8VUUwMDA+Li48VUZBMkQ+OzxVRkEzMD4uLjxVRkE2QT47LworICAgPFVGQjAwPi4uPFVGQjA2Pjs8VUZCMTM+Li48VUZCMTc+OzxVRkIxRD4uLjxVRkIzNj47LworICAgPFVGQjM4Pi4uPFVGQjNDPjs8VUZCM0U+OzxVRkI0MD4uLjxVRkI0MT47PFVGQjQzPi4uPFVGQjQ0PjsvCisgICA8VUZCNDY+Li48VUZCQjE+OzxVRkJEMz4uLjxVRkQzRj47PFVGRDUwPi4uPFVGRDhGPjs8VUZEOTI+Li48VUZEQzc+Oy8KKyAgIDxVRkRGMD4uLjxVRkRGQz47PFVGRTAwPi4uPFVGRTBGPjs8VUZFMjA+Li48VUZFMjM+OzxVRkUzMD4uLjxVRkU0Nj47LworICAgPFVGRTQ5Pi4uPFVGRTUyPjs8VUZFNTQ+Li48VUZFNjY+OzxVRkU2OD4uLjxVRkU2Qj47PFVGRTcwPi4uPFVGRTc0PjsvCisgICA8VUZFNzY+Li48VUZFRkM+OzxVRkVGRj47PFVGRjAxPi4uPFVGRkJFPjsvCisgICA8VUZGQzI+Li48VUZGQzc+OzxVRkZDQT4uLjxVRkZDRj47PFVGRkQyPi4uPFVGRkQ3Pjs8VUZGREE+Li48VUZGREM+Oy8KKyAgIDxVRkZFMD4uLjxVRkZFNj47PFVGRkU4Pi4uPFVGRkVFPjs8VUZGRjk+Li48VUZGRkQ+Oy8KKyAgIDxVMDAwMTAzMDA+Li48VTAwMDEwMzFFPjs8VTAwMDEwMzIwPi4uPFUwMDAxMDMyMz47LworICAgPFUwMDAxMDMzMD4uLjxVMDAwMTAzNEE+OzxVMDAwMTA0MDA+Li48VTAwMDEwNDI1PjsvCisgICA8VTAwMDEwNDI4Pi4uPFUwMDAxMDQ0RD47PFUwMDAxRDAwMD4uLjxVMDAwMUQwRjU+Oy8KKyAgIDxVMDAwMUQxMDA+Li48VTAwMDFEMTI2Pjs8VTAwMDFEMTJBPi4uPFUwMDAxRDFERD47LworICAgPFUwMDAxRDQwMD4uLjxVMDAwMUQ0NTQ+OzxVMDAwMUQ0NTY+Li48VTAwMDFENDlDPjsvCisgICA8VTAwMDFENDlFPi4uPFUwMDAxRDQ5Rj47PFUwMDAxRDRBMj47PFUwMDAxRDRBNT4uLjxVMDAwMUQ0QTY+Oy8KKyAgIDxVMDAwMUQ0QTk+Li48VTAwMDFENEFDPjs8VTAwMDFENEFFPi4uPFUwMDAxRDRCOT47PFUwMDAxRDRCQj47LworICAgPFUwMDAxRDRCRD4uLjxVMDAwMUQ0QzA+OzxVMDAwMUQ0QzI+Li48VTAwMDFENEMzPjsvCisgICA8VTAwMDFENEM1Pi4uPFUwMDAxRDUwNT47PFUwMDAxRDUwNz4uLjxVMDAwMUQ1MEE+Oy8KKyAgIDxVMDAwMUQ1MEQ+Li48VTAwMDFENTE0Pjs8VTAwMDFENTE2Pi4uPFUwMDAxRDUxQz47LworICAgPFUwMDAxRDUxRT4uLjxVMDAwMUQ1Mzk+OzxVMDAwMUQ1M0I+Li48VTAwMDFENTNFPjsvCisgICA8VTAwMDFENTQwPi4uPFUwMDAxRDU0ND47PFUwMDAxRDU0Nj47PFUwMDAxRDU0QT4uLjxVMDAwMUQ1NTA+Oy8KKyAgIDxVMDAwMUQ1NTI+Li48VTAwMDFENkEzPjs8VTAwMDFENkE4Pi4uPFUwMDAxRDdDOT47LworICAgPFUwMDAxRDdDRT4uLjxVMDAwMUQ3RkY+OzxVMDAwMjAwMDA+Li48VTAwMDJBNkQ2PjsvCisgICA8VTAwMDJGODAwPi4uPFUwMDAyRkExRD47PFUwMDBFMDAwMT47PFUwMDBFMDAyMD4uLjxVMDAwRTAwN0Y+Oy8KKyAgIDxVMDAwRjAwMDA+Li48VTAwMEZGRkZEPjs8VTAwMTAwMDAwPi4uPFUwMDEwRkZGRD4KKworcHJpbnQgLworICAgPFUwMDIwPi4uPFUwMDdFPjs8VTAwQTA+Li48VTAyMjA+OzxVMDIyMj4uLjxVMDIzMz47PFUwMjUwPi4uPFUwMkFEPjsvCisgICA8VTAyQjA+Li48VTAyRUU+OzxVMDMwMD4uLjxVMDM0Rj47PFUwMzYwPi4uPFUwMzZGPjs8VTAzNzQ+Li48VTAzNzU+Oy8KKyAgIDxVMDM3QT47PFUwMzdFPjs8VTAzODQ+Li48VTAzOEE+OzxVMDM4Qz47PFUwMzhFPi4uPFUwM0ExPjsvCisgICA8VTAzQTM+Li48VTAzQ0U+OzxVMDNEMD4uLjxVMDNGNj47PFUwNDAwPi4uPFUwNDg2Pjs8VTA0ODg+Li48VTA0Q0U+Oy8KKyAgIDxVMDREMD4uLjxVMDRGNT47PFUwNEY4Pi4uPFUwNEY5Pjs8VTA1MDA+Li48VTA1MEY+Oy8KKyAgIDxVMDUzMT4uLjxVMDU1Nj47PFUwNTU5Pi4uPFUwNTVGPjsvCisgICA8VTA1NjE+Li48VTA1ODc+OzxVMDU4OT4uLjxVMDU4QT47PFUwNTkxPi4uPFUwNUExPjs8VTA1QTM+Li48VTA1Qjk+Oy8KKyAgIDxVMDVCQj4uLjxVMDVDND47PFUwNUQwPi4uPFUwNUVBPjs8VTA1RjA+Li48VTA1RjQ+OzxVMDYwQz47PFUwNjFCPjsvCisgICA8VTA2MUY+OzxVMDYyMT4uLjxVMDYzQT47PFUwNjQwPi4uPFUwNjU1Pjs8VTA2NjA+Li48VTA2RUQ+Oy8KKyAgIDxVMDZGMD4uLjxVMDZGRT47PFUwNzAwPi4uPFUwNzBEPjs8VTA3MEY+Li48VTA3MkM+Oy8KKyAgIDxVMDczMD4uLjxVMDc0QT47PFUwNzgwPi4uPFUwN0IxPjs8VTA5MDE+Li48VTA5MDM+OzxVMDkwNT4uLjxVMDkzOT47LworICAgPFUwOTNDPi4uPFUwOTREPjs8VTA5NTA+Li48VTA5NTQ+OzxVMDk1OD4uLjxVMDk3MD47PFUwOTgxPi4uPFUwOTgzPjsvCisgICA8VTA5ODU+Li48VTA5OEM+OzxVMDk4Rj4uLjxVMDk5MD47PFUwOTkzPi4uPFUwOUE4Pjs8VTA5QUE+Li48VTA5QjA+Oy8KKyAgIDxVMDlCMj47PFUwOUI2Pi4uPFUwOUI5Pjs8VTA5QkM+OzxVMDlCRT4uLjxVMDlDND47PFUwOUM3Pi4uPFUwOUM4PjsvCisgICA8VTA5Q0I+Li48VTA5Q0Q+OzxVMDlENz47PFUwOURDPi4uPFUwOUREPjs8VTA5REY+Li48VTA5RTM+Oy8KKyAgIDxVMDlFNj4uLjxVMDlGQT47PFUwQTAyPjs8VTBBMDU+Li48VTBBMEE+OzxVMEEwRj4uLjxVMEExMD47LworICAgPFUwQTEzPi4uPFUwQTI4Pjs8VTBBMkE+Li48VTBBMzA+OzxVMEEzMj4uLjxVMEEzMz47PFUwQTM1Pi4uPFUwQTM2PjsvCisgICA8VTBBMzg+Li48VTBBMzk+OzxVMEEzQz47PFUwQTNFPi4uPFUwQTQyPjs8VTBBNDc+Li48VTBBNDg+Oy8KKyAgIDxVMEE0Qj4uLjxVMEE0RD47PFUwQTU5Pi4uPFUwQTVDPjs8VTBBNUU+OzxVMEE2Nj4uLjxVMEE3ND47LworICAgPFUwQTgxPi4uPFUwQTgzPjs8VTBBODU+Li48VTBBOEI+OzxVMEE4RD47PFUwQThGPi4uPFUwQTkxPjsvCisgICA8VTBBOTM+Li48VTBBQTg+OzxVMEFBQT4uLjxVMEFCMD47PFUwQUIyPi4uPFUwQUIzPjs8VTBBQjU+Li48VTBBQjk+Oy8KKyAgIDxVMEFCQz4uLjxVMEFDNT47PFUwQUM3Pi4uPFUwQUM5Pjs8VTBBQ0I+Li48VTBBQ0Q+OzxVMEFEMD47PFUwQUUwPjsvCisgICA8VTBBRTY+Li48VTBBRUY+OzxVMEIwMT4uLjxVMEIwMz47PFUwQjA1Pi4uPFUwQjBDPjs8VTBCMEY+Li48VTBCMTA+Oy8KKyAgIDxVMEIxMz4uLjxVMEIyOD47PFUwQjJBPi4uPFUwQjMwPjs8VTBCMzI+Li48VTBCMzM+OzxVMEIzNj4uLjxVMEIzOT47LworICAgPFUwQjNDPi4uPFUwQjQzPjs8VTBCNDc+Li48VTBCNDg+OzxVMEI0Qj4uLjxVMEI0RD47PFUwQjU2Pi4uPFUwQjU3PjsvCisgICA8VTBCNUM+Li48VTBCNUQ+OzxVMEI1Rj4uLjxVMEI2MT47PFUwQjY2Pi4uPFUwQjcwPjs8VTBCODI+Li48VTBCODM+Oy8KKyAgIDxVMEI4NT4uLjxVMEI4QT47PFUwQjhFPi4uPFUwQjkwPjs8VTBCOTI+Li48VTBCOTU+OzxVMEI5OT4uLjxVMEI5QT47LworICAgPFUwQjlDPjs8VTBCOUU+Li48VTBCOUY+OzxVMEJBMz4uLjxVMEJBND47PFUwQkE4Pi4uPFUwQkFBPjsvCisgICA8VTBCQUU+Li48VTBCQjU+OzxVMEJCNz4uLjxVMEJCOT47PFUwQkJFPi4uPFUwQkMyPjs8VTBCQzY+Li48VTBCQzg+Oy8KKyAgIDxVMEJDQT4uLjxVMEJDRD47PFUwQkQ3Pjs8VTBCRTc+Li48VTBCRjI+OzxVMEMwMT4uLjxVMEMwMz47LworICAgPFUwQzA1Pi4uPFUwQzBDPjs8VTBDMEU+Li48VTBDMTA+OzxVMEMxMj4uLjxVMEMyOD47PFUwQzJBPi4uPFUwQzMzPjsvCisgICA8VTBDMzU+Li48VTBDMzk+OzxVMEMzRT4uLjxVMEM0ND47PFUwQzQ2Pi4uPFUwQzQ4Pjs8VTBDNEE+Li48VTBDNEQ+Oy8KKyAgIDxVMEM1NT4uLjxVMEM1Nj47PFUwQzYwPi4uPFUwQzYxPjs8VTBDNjY+Li48VTBDNkY+OzxVMEM4Mj4uLjxVMEM4Mz47LworICAgPFUwQzg1Pi4uPFUwQzhDPjs8VTBDOEU+Li48VTBDOTA+OzxVMEM5Mj4uLjxVMENBOD47PFUwQ0FBPi4uPFUwQ0IzPjsvCisgICA8VTBDQjU+Li48VTBDQjk+OzxVMENCRT4uLjxVMENDND47PFUwQ0M2Pi4uPFUwQ0M4Pjs8VTBDQ0E+Li48VTBDQ0Q+Oy8KKyAgIDxVMENENT4uLjxVMENENj47PFUwQ0RFPjs8VTBDRTA+Li48VTBDRTE+OzxVMENFNj4uLjxVMENFRj47LworICAgPFUwRDAyPi4uPFUwRDAzPjs8VTBEMDU+Li48VTBEMEM+OzxVMEQwRT4uLjxVMEQxMD47PFUwRDEyPi4uPFUwRDI4PjsvCisgICA8VTBEMkE+Li48VTBEMzk+OzxVMEQzRT4uLjxVMEQ0Mz47PFUwRDQ2Pi4uPFUwRDQ4Pjs8VTBENEE+Li48VTBENEQ+Oy8KKyAgIDxVMEQ1Nz47PFUwRDYwPi4uPFUwRDYxPjs8VTBENjY+Li48VTBENkY+OzxVMEQ4Mj4uLjxVMEQ4Mz47LworICAgPFUwRDg1Pi4uPFUwRDk2Pjs8VTBEOUE+Li48VTBEQjE+OzxVMERCMz4uLjxVMERCQj47PFUwREJEPjsvCisgICA8VTBEQzA+Li48VTBEQzY+OzxVMERDQT47PFUwRENGPi4uPFUwREQ0Pjs8VTBERDY+OzxVMEREOD4uLjxVMERERj47LworICAgPFUwREYyPi4uPFUwREY0Pjs8VTBFMDE+Li48VTBFM0E+OzxVMEUzRj4uLjxVMEU1Qj47PFUwRTgxPi4uPFUwRTgyPjsvCisgICA8VTBFODQ+OzxVMEU4Nz4uLjxVMEU4OD47PFUwRThBPjs8VTBFOEQ+OzxVMEU5ND4uLjxVMEU5Nz47LworICAgPFUwRTk5Pi4uPFUwRTlGPjs8VTBFQTE+Li48VTBFQTM+OzxVMEVBNT47PFUwRUE3Pjs8VTBFQUE+Li48VTBFQUI+Oy8KKyAgIDxVMEVBRD4uLjxVMEVCOT47PFUwRUJCPi4uPFUwRUJEPjs8VTBFQzA+Li48VTBFQzQ+OzxVMEVDNj47LworICAgPFUwRUM4Pi4uPFUwRUNEPjs8VTBFRDA+Li48VTBFRDk+OzxVMEVEQz4uLjxVMEVERD47PFUwRjAwPi4uPFUwRjQ3PjsvCisgICA8VTBGNDk+Li48VTBGNkE+OzxVMEY3MT4uLjxVMEY4Qj47PFUwRjkwPi4uPFUwRjk3Pjs8VTBGOTk+Li48VTBGQkM+Oy8KKyAgIDxVMEZCRT4uLjxVMEZDQz47PFUwRkNGPjs8VTEwMDA+Li48VTEwMjE+OzxVMTAyMz4uLjxVMTAyNz47LworICAgPFUxMDI5Pi4uPFUxMDJBPjs8VTEwMkM+Li48VTEwMzI+OzxVMTAzNj4uLjxVMTAzOT47PFUxMDQwPi4uPFUxMDU5PjsvCisgICA8VTEwQTA+Li48VTEwQzU+OzxVMTBEMD4uLjxVMTBGOD47PFUxMEZCPjs8VTExMDA+Li48VTExNTk+Oy8KKyAgIDxVMTE1Rj4uLjxVMTFBMj47PFUxMUE4Pi4uPFUxMUY5Pjs8VTEyMDA+Li48VTEyMDY+OzxVMTIwOD4uLjxVMTI0Nj47LworICAgPFUxMjQ4Pjs8VTEyNEE+Li48VTEyNEQ+OzxVMTI1MD4uLjxVMTI1Nj47PFUxMjU4Pjs8VTEyNUE+Li48VTEyNUQ+Oy8KKyAgIDxVMTI2MD4uLjxVMTI4Nj47PFUxMjg4Pjs8VTEyOEE+Li48VTEyOEQ+OzxVMTI5MD4uLjxVMTJBRT47PFUxMkIwPjsvCisgICA8VTEyQjI+Li48VTEyQjU+OzxVMTJCOD4uLjxVMTJCRT47PFUxMkMwPjs8VTEyQzI+Li48VTEyQzU+Oy8KKyAgIDxVMTJDOD4uLjxVMTJDRT47PFUxMkQwPi4uPFUxMkQ2Pjs8VTEyRDg+Li48VTEyRUU+OzxVMTJGMD4uLjxVMTMwRT47LworICAgPFUxMzEwPjs8VTEzMTI+Li48VTEzMTU+OzxVMTMxOD4uLjxVMTMxRT47PFUxMzIwPi4uPFUxMzQ2PjsvCisgICA8VTEzNDg+Li48VTEzNUE+OzxVMTM2MT4uLjxVMTM3Qz47PFUxM0EwPi4uPFUxM0Y0Pjs8VTE0MDE+Li48VTE2NzY+Oy8KKyAgIDxVMTY4MD4uLjxVMTY5Qz47PFUxNkEwPi4uPFUxNkYwPjs8VTE3MDA+Li48VTE3MEM+OzxVMTcwRT4uLjxVMTcxND47LworICAgPFUxNzIwPi4uPFUxNzM2Pjs8VTE3NDA+Li48VTE3NTM+OzxVMTc2MD4uLjxVMTc2Qz47PFUxNzZFPi4uPFUxNzcwPjsvCisgICA8VTE3NzI+Li48VTE3NzM+OzxVMTc4MD4uLjxVMTdEQz47PFUxN0UwPi4uPFUxN0U5PjsvCisgICA8VTE4MDA+Li48VTE4MEU+OzxVMTgxMD4uLjxVMTgxOT47PFUxODIwPi4uPFUxODc3Pjs8VTE4ODA+Li48VTE4QTk+Oy8KKyAgIDxVMUUwMD4uLjxVMUU5Qj47PFUxRUEwPi4uPFUxRUY5Pjs8VTFGMDA+Li48VTFGMTU+OzxVMUYxOD4uLjxVMUYxRD47LworICAgPFUxRjIwPi4uPFUxRjQ1Pjs8VTFGNDg+Li48VTFGNEQ+OzxVMUY1MD4uLjxVMUY1Nz47PFUxRjU5Pjs8VTFGNUI+Oy8KKyAgIDxVMUY1RD47PFUxRjVGPi4uPFUxRjdEPjs8VTFGODA+Li48VTFGQjQ+OzxVMUZCNj4uLjxVMUZDND47LworICAgPFUxRkM2Pi4uPFUxRkQzPjs8VTFGRDY+Li48VTFGREI+OzxVMUZERD4uLjxVMUZFRj47PFUxRkYyPi4uPFUxRkY0PjsvCisgICA8VTFGRjY+Li48VTFGRkU+OzxVMjAwMD4uLjxVMjAyNz47PFUyMDJBPi4uPFUyMDUyPjs8VTIwNTc+Oy8KKyAgIDxVMjA1Rj4uLjxVMjA2Mz47PFUyMDZBPi4uPFUyMDcxPjs8VTIwNzQ+Li48VTIwOEU+OzxVMjBBMD4uLjxVMjBCMT47LworICAgPFUyMEQwPi4uPFUyMEVBPjs8VTIxMDA+Li48VTIxM0E+OzxVMjEzRD4uLjxVMjE0Qj47PFUyMTUzPi4uPFUyMTgzPjsvCisgICA8VTIxOTA+Li48VTIzQ0U+OzxVMjQwMD4uLjxVMjQyNj47PFUyNDQwPi4uPFUyNDRBPjsvCisgICA8VTI0NjA+Li48VTI0RkU+OzxVMjUwMD4uLjxVMjYxMz47PFUyNjE2Pi4uPFUyNjE3Pjs8VTI2MTk+Li48VTI2N0Q+Oy8KKyAgIDxVMjY4MD4uLjxVMjY4OT47PFUyNzAxPi4uPFUyNzA0Pjs8VTI3MDY+Li48VTI3MDk+OzxVMjcwQz4uLjxVMjcyNz47LworICAgPFUyNzI5Pi4uPFUyNzRCPjs8VTI3NEQ+OzxVMjc0Rj4uLjxVMjc1Mj47PFUyNzU2Pjs8VTI3NTg+Li48VTI3NUU+Oy8KKyAgIDxVMjc2MT4uLjxVMjc5ND47PFUyNzk4Pi4uPFUyN0FGPjs8VTI3QjE+Li48VTI3QkU+OzxVMjdEMD4uLjxVMjdFQj47LworICAgPFUyN0YwPi4uPFUyQUZGPjs8VTJFODA+Li48VTJFOTk+OzxVMkU5Qj4uLjxVMkVGMz47PFUyRjAwPi4uPFUyRkQ1PjsvCisgICA8VTJGRjA+Li48VTJGRkI+OzxVMzAwMD4uLjxVMzAzRj47PFUzMDQxPi4uPFUzMDk2PjsvCisgICA8VTMwOTk+Li48VTMwRkY+OzxVMzEwNT4uLjxVMzEyQz47PFUzMTMxPi4uPFUzMThFPjsvCisgICA8VTMxOTA+Li48VTMxQjc+OzxVMzFGMD4uLjxVMzIxQz47PFUzMjIwPi4uPFUzMjQzPjs8VTMyNTE+Li48VTMyN0I+Oy8KKyAgIDxVMzI3Rj4uLjxVMzJDQj47PFUzMkQwPi4uPFUzMkZFPjs8VTMzMDA+Li48VTMzNzY+Oy8KKyAgIDxVMzM3Qj4uLjxVMzNERD47PFUzM0UwPi4uPFUzM0ZFPjs8VTM0MDA+Li48VTREQjU+OzxVNEUwMD4uLjxVOUZBNT47LworICAgPFVBMDAwPi4uPFVBNDhDPjs8VUE0OTA+Li48VUE0QzY+OzxVQUMwMD4uLjxVRDdBMz47PFVFMDAwPi4uPFVGQTJEPjsvCisgICA8VUZBMzA+Li48VUZBNkE+Oy8KKyAgIDxVRkIwMD4uLjxVRkIwNj47PFVGQjEzPi4uPFVGQjE3Pjs8VUZCMUQ+Li48VUZCMzY+OzxVRkIzOD4uLjxVRkIzQz47LworICAgPFVGQjNFPjs8VUZCNDA+Li48VUZCNDE+OzxVRkI0Mz4uLjxVRkI0ND47PFVGQjQ2Pi4uPFVGQkIxPjsvCisgICA8VUZCRDM+Li48VUZEM0Y+OzxVRkQ1MD4uLjxVRkQ4Rj47PFVGRDkyPi4uPFVGREM3Pjs8VUZERjA+Li48VUZERkM+Oy8KKyAgIDxVRkUwMD4uLjxVRkUwRj47PFVGRTIwPi4uPFVGRTIzPjs8VUZFMzA+Li48VUZFNDY+OzxVRkU0OT4uLjxVRkU1Mj47LworICAgPFVGRTU0Pi4uPFVGRTY2Pjs8VUZFNjg+Li48VUZFNkI+OzxVRkU3MD4uLjxVRkU3ND47PFVGRTc2Pi4uPFVGRUZDPjsvCisgICA8VUZFRkY+OzxVRkYwMT4uLjxVRkZCRT47PFVGRkMyPi4uPFVGRkM3Pjs8VUZGQ0E+Li48VUZGQ0Y+Oy8KKyAgIDxVRkZEMj4uLjxVRkZENz47PFVGRkRBPi4uPFVGRkRDPjs8VUZGRTA+Li48VUZGRTY+OzxVRkZFOD4uLjxVRkZFRT47LworICAgPFVGRkY5Pi4uPFVGRkZEPjs8VTAwMDEwMzAwPi4uPFUwMDAxMDMxRT47PFUwMDAxMDMyMD4uLjxVMDAwMTAzMjM+Oy8KKyAgIDxVMDAwMTAzMzA+Li48VTAwMDEwMzRBPjs8VTAwMDEwNDAwPi4uPFUwMDAxMDQyNT47LworICAgPFUwMDAxMDQyOD4uLjxVMDAwMTA0NEQ+OzxVMDAwMUQwMDA+Li48VTAwMDFEMEY1PjsvCisgICA8VTAwMDFEMTAwPi4uPFUwMDAxRDEyNj47PFUwMDAxRDEyQT4uLjxVMDAwMUQxREQ+Oy8KKyAgIDxVMDAwMUQ0MDA+Li48VTAwMDFENDU0Pjs8VTAwMDFENDU2Pi4uPFUwMDAxRDQ5Qz47LworICAgPFUwMDAxRDQ5RT4uLjxVMDAwMUQ0OUY+OzxVMDAwMUQ0QTI+OzxVMDAwMUQ0QTU+Li48VTAwMDFENEE2PjsvCisgICA8VTAwMDFENEE5Pi4uPFUwMDAxRDRBQz47PFUwMDAxRDRBRT4uLjxVMDAwMUQ0Qjk+OzxVMDAwMUQ0QkI+Oy8KKyAgIDxVMDAwMUQ0QkQ+Li48VTAwMDFENEMwPjs8VTAwMDFENEMyPi4uPFUwMDAxRDRDMz47LworICAgPFUwMDAxRDRDNT4uLjxVMDAwMUQ1MDU+OzxVMDAwMUQ1MDc+Li48VTAwMDFENTBBPjsvCisgICA8VTAwMDFENTBEPi4uPFUwMDAxRDUxND47PFUwMDAxRDUxNj4uLjxVMDAwMUQ1MUM+Oy8KKyAgIDxVMDAwMUQ1MUU+Li48VTAwMDFENTM5Pjs8VTAwMDFENTNCPi4uPFUwMDAxRDUzRT47LworICAgPFUwMDAxRDU0MD4uLjxVMDAwMUQ1NDQ+OzxVMDAwMUQ1NDY+OzxVMDAwMUQ1NEE+Li48VTAwMDFENTUwPjsvCisgICA8VTAwMDFENTUyPi4uPFUwMDAxRDZBMz47PFUwMDAxRDZBOD4uLjxVMDAwMUQ3Qzk+Oy8KKyAgIDxVMDAwMUQ3Q0U+Li48VTAwMDFEN0ZGPjs8VTAwMDIwMDAwPi4uPFUwMDAyQTZENj47LworICAgPFUwMDAyRjgwMD4uLjxVMDAwMkZBMUQ+OzxVMDAwRTAwMDE+OzxVMDAwRTAwMjA+Li48VTAwMEUwMDdGPjsvCisgICA8VTAwMEYwMDAwPi4uPFUwMDBGRkZGRD47PFUwMDEwMDAwMD4uLjxVMDAxMEZGRkQ+CisKKyUgVGhlICJ4ZGlnaXQiIGNsYXNzIG11c3Qgb25seSBjb250YWluIHRoZSBCQVNJQyBMQVRJTiBkaWdpdHMgYW5kIEEtRiwgYS1mLAorJSBzYXlzIElTTyBDIDk5IChzZWN0aW9ucyA3LjI1LjIuMS4xMiBhbmQgNi40LjQuMSkuCit4ZGlnaXQgLworICAgPFUwMDMwPi4uPFUwMDM5Pjs8VTAwNDE+Li48VTAwNDY+OzxVMDA2MT4uLjxVMDA2Nj4KKworYmxhbmsgLworICAgPFUwMDA5Pjs8VTAwMjA+OzxVMTY4MD47PFUyMDAwPi4uPFUyMDA2Pjs8VTIwMDg+Li48VTIwMEI+OzxVMjA1Rj47PFUzMDAwPgorCit0b3VwcGVyIC8KKyAgICg8VTAwNjE+LDxVMDA0MT4pOyg8VTAwNjI+LDxVMDA0Mj4pOyg8VTAwNjM+LDxVMDA0Mz4pOyg8VTAwNjQ+LDxVMDA0ND4pOy8KKyAgICg8VTAwNjU+LDxVMDA0NT4pOyg8VTAwNjY+LDxVMDA0Nj4pOyg8VTAwNjc+LDxVMDA0Nz4pOyg8VTAwNjg+LDxVMDA0OD4pOy8KKyAgICg8VTAwNjk+LDxVMDEzMD4pOyg8VTAwNkE+LDxVMDA0QT4pOyg8VTAwNkI+LDxVMDA0Qj4pOyg8VTAwNkM+LDxVMDA0Qz4pOy8KKyAgICg8VTAwNkQ+LDxVMDA0RD4pOyg8VTAwNkU+LDxVMDA0RT4pOyg8VTAwNkY+LDxVMDA0Rj4pOyg8VTAwNzA+LDxVMDA1MD4pOy8KKyAgICg8VTAwNzE+LDxVMDA1MT4pOyg8VTAwNzI+LDxVMDA1Mj4pOyg8VTAwNzM+LDxVMDA1Mz4pOyg8VTAwNzQ+LDxVMDA1ND4pOy8KKyAgICg8VTAwNzU+LDxVMDA1NT4pOyg8VTAwNzY+LDxVMDA1Nj4pOyg8VTAwNzc+LDxVMDA1Nz4pOyg8VTAwNzg+LDxVMDA1OD4pOy8KKyAgICg8VTAwNzk+LDxVMDA1OT4pOyg8VTAwN0E+LDxVMDA1QT4pOyg8VTAwQjU+LDxVMDM5Qz4pOyg8VTAwRTA+LDxVMDBDMD4pOy8KKyAgICg8VTAwRTE+LDxVMDBDMT4pOyg8VTAwRTI+LDxVMDBDMj4pOyg8VTAwRTM+LDxVMDBDMz4pOyg8VTAwRTQ+LDxVMDBDND4pOy8KKyAgICg8VTAwRTU+LDxVMDBDNT4pOyg8VTAwRTY+LDxVMDBDNj4pOyg8VTAwRTc+LDxVMDBDNz4pOyg8VTAwRTg+LDxVMDBDOD4pOy8KKyAgICg8VTAwRTk+LDxVMDBDOT4pOyg8VTAwRUE+LDxVMDBDQT4pOyg8VTAwRUI+LDxVMDBDQj4pOyg8VTAwRUM+LDxVMDBDQz4pOy8KKyAgICg8VTAwRUQ+LDxVMDBDRD4pOyg8VTAwRUU+LDxVMDBDRT4pOyg8VTAwRUY+LDxVMDBDRj4pOyg8VTAwRjA+LDxVMDBEMD4pOy8KKyAgICg8VTAwRjE+LDxVMDBEMT4pOyg8VTAwRjI+LDxVMDBEMj4pOyg8VTAwRjM+LDxVMDBEMz4pOyg8VTAwRjQ+LDxVMDBEND4pOy8KKyAgICg8VTAwRjU+LDxVMDBENT4pOyg8VTAwRjY+LDxVMDBENj4pOyg8VTAwRjg+LDxVMDBEOD4pOyg8VTAwRjk+LDxVMDBEOT4pOy8KKyAgICg8VTAwRkE+LDxVMDBEQT4pOyg8VTAwRkI+LDxVMDBEQj4pOyg8VTAwRkM+LDxVMDBEQz4pOyg8VTAwRkQ+LDxVMDBERD4pOy8KKyAgICg8VTAwRkU+LDxVMDBERT4pOyg8VTAwRkY+LDxVMDE3OD4pOyg8VTAxMDE+LDxVMDEwMD4pOyg8VTAxMDM+LDxVMDEwMj4pOy8KKyAgICg8VTAxMDU+LDxVMDEwND4pOyg8VTAxMDc+LDxVMDEwNj4pOyg8VTAxMDk+LDxVMDEwOD4pOyg8VTAxMEI+LDxVMDEwQT4pOy8KKyAgICg8VTAxMEQ+LDxVMDEwQz4pOyg8VTAxMEY+LDxVMDEwRT4pOyg8VTAxMTE+LDxVMDExMD4pOyg8VTAxMTM+LDxVMDExMj4pOy8KKyAgICg8VTAxMTU+LDxVMDExND4pOyg8VTAxMTc+LDxVMDExNj4pOyg8VTAxMTk+LDxVMDExOD4pOyg8VTAxMUI+LDxVMDExQT4pOy8KKyAgICg8VTAxMUQ+LDxVMDExQz4pOyg8VTAxMUY+LDxVMDExRT4pOyg8VTAxMjE+LDxVMDEyMD4pOyg8VTAxMjM+LDxVMDEyMj4pOy8KKyAgICg8VTAxMjU+LDxVMDEyND4pOyg8VTAxMjc+LDxVMDEyNj4pOyg8VTAxMjk+LDxVMDEyOD4pOyg8VTAxMkI+LDxVMDEyQT4pOy8KKyAgICg8VTAxMkQ+LDxVMDEyQz4pOyg8VTAxMkY+LDxVMDEyRT4pOyg8VTAxMzE+LDxVMDA0OT4pOyg8VTAxMzM+LDxVMDEzMj4pOy8KKyAgICg8VTAxMzU+LDxVMDEzND4pOyg8VTAxMzc+LDxVMDEzNj4pOyg8VTAxM0E+LDxVMDEzOT4pOyg8VTAxM0M+LDxVMDEzQj4pOy8KKyAgICg8VTAxM0U+LDxVMDEzRD4pOyg8VTAxNDA+LDxVMDEzRj4pOyg8VTAxNDI+LDxVMDE0MT4pOyg8VTAxNDQ+LDxVMDE0Mz4pOy8KKyAgICg8VTAxNDY+LDxVMDE0NT4pOyg8VTAxNDg+LDxVMDE0Nz4pOyg8VTAxNEI+LDxVMDE0QT4pOyg8VTAxNEQ+LDxVMDE0Qz4pOy8KKyAgICg8VTAxNEY+LDxVMDE0RT4pOyg8VTAxNTE+LDxVMDE1MD4pOyg8VTAxNTM+LDxVMDE1Mj4pOyg8VTAxNTU+LDxVMDE1ND4pOy8KKyAgICg8VTAxNTc+LDxVMDE1Nj4pOyg8VTAxNTk+LDxVMDE1OD4pOyg8VTAxNUI+LDxVMDE1QT4pOyg8VTAxNUQ+LDxVMDE1Qz4pOy8KKyAgICg8VTAxNUY+LDxVMDE1RT4pOyg8VTAxNjE+LDxVMDE2MD4pOyg8VTAxNjM+LDxVMDE2Mj4pOyg8VTAxNjU+LDxVMDE2ND4pOy8KKyAgICg8VTAxNjc+LDxVMDE2Nj4pOyg8VTAxNjk+LDxVMDE2OD4pOyg8VTAxNkI+LDxVMDE2QT4pOyg8VTAxNkQ+LDxVMDE2Qz4pOy8KKyAgICg8VTAxNkY+LDxVMDE2RT4pOyg8VTAxNzE+LDxVMDE3MD4pOyg8VTAxNzM+LDxVMDE3Mj4pOyg8VTAxNzU+LDxVMDE3ND4pOy8KKyAgICg8VTAxNzc+LDxVMDE3Nj4pOyg8VTAxN0E+LDxVMDE3OT4pOyg8VTAxN0M+LDxVMDE3Qj4pOyg8VTAxN0U+LDxVMDE3RD4pOy8KKyAgICg8VTAxN0Y+LDxVMDA1Mz4pOyg8VTAxODM+LDxVMDE4Mj4pOyg8VTAxODU+LDxVMDE4ND4pOyg8VTAxODg+LDxVMDE4Nz4pOy8KKyAgICg8VTAxOEM+LDxVMDE4Qj4pOyg8VTAxOTI+LDxVMDE5MT4pOyg8VTAxOTU+LDxVMDFGNj4pOyg8VTAxOTk+LDxVMDE5OD4pOy8KKyAgICg8VTAxOUU+LDxVMDIyMD4pOy8KKyAgICg8VTAxQTE+LDxVMDFBMD4pOyg8VTAxQTM+LDxVMDFBMj4pOyg8VTAxQTU+LDxVMDFBND4pOyg8VTAxQTg+LDxVMDFBNz4pOy8KKyAgICg8VTAxQUQ+LDxVMDFBQz4pOyg8VTAxQjA+LDxVMDFBRj4pOyg8VTAxQjQ+LDxVMDFCMz4pOyg8VTAxQjY+LDxVMDFCNT4pOy8KKyAgICg8VTAxQjk+LDxVMDFCOD4pOyg8VTAxQkQ+LDxVMDFCQz4pOyg8VTAxQkY+LDxVMDFGNz4pOyg8VTAxQzU+LDxVMDFDND4pOy8KKyAgICg8VTAxQzY+LDxVMDFDND4pOyg8VTAxQzg+LDxVMDFDNz4pOyg8VTAxQzk+LDxVMDFDNz4pOyg8VTAxQ0I+LDxVMDFDQT4pOy8KKyAgICg8VTAxQ0M+LDxVMDFDQT4pOyg8VTAxQ0U+LDxVMDFDRD4pOyg8VTAxRDA+LDxVMDFDRj4pOyg8VTAxRDI+LDxVMDFEMT4pOy8KKyAgICg8VTAxRDQ+LDxVMDFEMz4pOyg8VTAxRDY+LDxVMDFENT4pOyg8VTAxRDg+LDxVMDFENz4pOyg8VTAxREE+LDxVMDFEOT4pOy8KKyAgICg8VTAxREM+LDxVMDFEQj4pOyg8VTAxREQ+LDxVMDE4RT4pOyg8VTAxREY+LDxVMDFERT4pOyg8VTAxRTE+LDxVMDFFMD4pOy8KKyAgICg8VTAxRTM+LDxVMDFFMj4pOyg8VTAxRTU+LDxVMDFFND4pOyg8VTAxRTc+LDxVMDFFNj4pOyg8VTAxRTk+LDxVMDFFOD4pOy8KKyAgICg8VTAxRUI+LDxVMDFFQT4pOyg8VTAxRUQ+LDxVMDFFQz4pOyg8VTAxRUY+LDxVMDFFRT4pOyg8VTAxRjI+LDxVMDFGMT4pOy8KKyAgICg8VTAxRjM+LDxVMDFGMT4pOyg8VTAxRjU+LDxVMDFGND4pOyg8VTAxRjk+LDxVMDFGOD4pOyg8VTAxRkI+LDxVMDFGQT4pOy8KKyAgICg8VTAxRkQ+LDxVMDFGQz4pOyg8VTAxRkY+LDxVMDFGRT4pOyg8VTAyMDE+LDxVMDIwMD4pOyg8VTAyMDM+LDxVMDIwMj4pOy8KKyAgICg8VTAyMDU+LDxVMDIwND4pOyg8VTAyMDc+LDxVMDIwNj4pOyg8VTAyMDk+LDxVMDIwOD4pOyg8VTAyMEI+LDxVMDIwQT4pOy8KKyAgICg8VTAyMEQ+LDxVMDIwQz4pOyg8VTAyMEY+LDxVMDIwRT4pOyg8VTAyMTE+LDxVMDIxMD4pOyg8VTAyMTM+LDxVMDIxMj4pOy8KKyAgICg8VTAyMTU+LDxVMDIxND4pOyg8VTAyMTc+LDxVMDIxNj4pOyg8VTAyMTk+LDxVMDIxOD4pOyg8VTAyMUI+LDxVMDIxQT4pOy8KKyAgICg8VTAyMUQ+LDxVMDIxQz4pOyg8VTAyMUY+LDxVMDIxRT4pOyg8VTAyMjM+LDxVMDIyMj4pOyg8VTAyMjU+LDxVMDIyND4pOy8KKyAgICg8VTAyMjc+LDxVMDIyNj4pOyg8VTAyMjk+LDxVMDIyOD4pOyg8VTAyMkI+LDxVMDIyQT4pOyg8VTAyMkQ+LDxVMDIyQz4pOy8KKyAgICg8VTAyMkY+LDxVMDIyRT4pOyg8VTAyMzE+LDxVMDIzMD4pOyg8VTAyMzM+LDxVMDIzMj4pOyg8VTAyNTM+LDxVMDE4MT4pOy8KKyAgICg8VTAyNTQ+LDxVMDE4Nj4pOyg8VTAyNTY+LDxVMDE4OT4pOyg8VTAyNTc+LDxVMDE4QT4pOyg8VTAyNTk+LDxVMDE4Rj4pOy8KKyAgICg8VTAyNUI+LDxVMDE5MD4pOyg8VTAyNjA+LDxVMDE5Mz4pOyg8VTAyNjM+LDxVMDE5ND4pOyg8VTAyNjg+LDxVMDE5Nz4pOy8KKyAgICg8VTAyNjk+LDxVMDE5Nj4pOyg8VTAyNkY+LDxVMDE5Qz4pOyg8VTAyNzI+LDxVMDE5RD4pOyg8VTAyNzU+LDxVMDE5Rj4pOy8KKyAgICg8VTAyODA+LDxVMDFBNj4pOyg8VTAyODM+LDxVMDFBOT4pOyg8VTAyODg+LDxVMDFBRT4pOyg8VTAyOEE+LDxVMDFCMT4pOy8KKyAgICg8VTAyOEI+LDxVMDFCMj4pOyg8VTAyOTI+LDxVMDFCNz4pOyg8VTAzNDU+LDxVMDM5OT4pOyg8VTAzQUM+LDxVMDM4Nj4pOy8KKyAgICg8VTAzQUQ+LDxVMDM4OD4pOyg8VTAzQUU+LDxVMDM4OT4pOyg8VTAzQUY+LDxVMDM4QT4pOyg8VTAzQjE+LDxVMDM5MT4pOy8KKyAgICg8VTAzQjI+LDxVMDM5Mj4pOyg8VTAzQjM+LDxVMDM5Mz4pOyg8VTAzQjQ+LDxVMDM5ND4pOyg8VTAzQjU+LDxVMDM5NT4pOy8KKyAgICg8VTAzQjY+LDxVMDM5Nj4pOyg8VTAzQjc+LDxVMDM5Nz4pOyg8VTAzQjg+LDxVMDM5OD4pOyg8VTAzQjk+LDxVMDM5OT4pOy8KKyAgICg8VTAzQkE+LDxVMDM5QT4pOyg8VTAzQkI+LDxVMDM5Qj4pOyg8VTAzQkM+LDxVMDM5Qz4pOyg8VTAzQkQ+LDxVMDM5RD4pOy8KKyAgICg8VTAzQkU+LDxVMDM5RT4pOyg8VTAzQkY+LDxVMDM5Rj4pOyg8VTAzQzA+LDxVMDNBMD4pOyg8VTAzQzE+LDxVMDNBMT4pOy8KKyAgICg8VTAzQzI+LDxVMDNBMz4pOyg8VTAzQzM+LDxVMDNBMz4pOyg8VTAzQzQ+LDxVMDNBND4pOyg8VTAzQzU+LDxVMDNBNT4pOy8KKyAgICg8VTAzQzY+LDxVMDNBNj4pOyg8VTAzQzc+LDxVMDNBNz4pOyg8VTAzQzg+LDxVMDNBOD4pOyg8VTAzQzk+LDxVMDNBOT4pOy8KKyAgICg8VTAzQ0E+LDxVMDNBQT4pOyg8VTAzQ0I+LDxVMDNBQj4pOyg8VTAzQ0M+LDxVMDM4Qz4pOyg8VTAzQ0Q+LDxVMDM4RT4pOy8KKyAgICg8VTAzQ0U+LDxVMDM4Rj4pOyg8VTAzRDA+LDxVMDM5Mj4pOyg8VTAzRDE+LDxVMDM5OD4pOyg8VTAzRDU+LDxVMDNBNj4pOy8KKyAgICg8VTAzRDY+LDxVMDNBMD4pOyg8VTAzRDk+LDxVMDNEOD4pOy8KKyAgICg8VTAzREI+LDxVMDNEQT4pOyg8VTAzREQ+LDxVMDNEQz4pOyg8VTAzREY+LDxVMDNERT4pOy8KKyAgICg8VTAzRTE+LDxVMDNFMD4pOyg8VTAzRTM+LDxVMDNFMj4pOyg8VTAzRTU+LDxVMDNFND4pOyg8VTAzRTc+LDxVMDNFNj4pOy8KKyAgICg8VTAzRTk+LDxVMDNFOD4pOyg8VTAzRUI+LDxVMDNFQT4pOyg8VTAzRUQ+LDxVMDNFQz4pOyg8VTAzRUY+LDxVMDNFRT4pOy8KKyAgICg8VTAzRjA+LDxVMDM5QT4pOyg8VTAzRjE+LDxVMDNBMT4pOyg8VTAzRjI+LDxVMDNBMz4pOyg8VTAzRjU+LDxVMDM5NT4pOy8KKyAgICg8VTA0MzA+LDxVMDQxMD4pOyg8VTA0MzE+LDxVMDQxMT4pOyg8VTA0MzI+LDxVMDQxMj4pOyg8VTA0MzM+LDxVMDQxMz4pOy8KKyAgICg8VTA0MzQ+LDxVMDQxND4pOyg8VTA0MzU+LDxVMDQxNT4pOyg8VTA0MzY+LDxVMDQxNj4pOyg8VTA0Mzc+LDxVMDQxNz4pOy8KKyAgICg8VTA0Mzg+LDxVMDQxOD4pOyg8VTA0Mzk+LDxVMDQxOT4pOyg8VTA0M0E+LDxVMDQxQT4pOyg8VTA0M0I+LDxVMDQxQj4pOy8KKyAgICg8VTA0M0M+LDxVMDQxQz4pOyg8VTA0M0Q+LDxVMDQxRD4pOyg8VTA0M0U+LDxVMDQxRT4pOyg8VTA0M0Y+LDxVMDQxRj4pOy8KKyAgICg8VTA0NDA+LDxVMDQyMD4pOyg8VTA0NDE+LDxVMDQyMT4pOyg8VTA0NDI+LDxVMDQyMj4pOyg8VTA0NDM+LDxVMDQyMz4pOy8KKyAgICg8VTA0NDQ+LDxVMDQyND4pOyg8VTA0NDU+LDxVMDQyNT4pOyg8VTA0NDY+LDxVMDQyNj4pOyg8VTA0NDc+LDxVMDQyNz4pOy8KKyAgICg8VTA0NDg+LDxVMDQyOD4pOyg8VTA0NDk+LDxVMDQyOT4pOyg8VTA0NEE+LDxVMDQyQT4pOyg8VTA0NEI+LDxVMDQyQj4pOy8KKyAgICg8VTA0NEM+LDxVMDQyQz4pOyg8VTA0NEQ+LDxVMDQyRD4pOyg8VTA0NEU+LDxVMDQyRT4pOyg8VTA0NEY+LDxVMDQyRj4pOy8KKyAgICg8VTA0NTA+LDxVMDQwMD4pOyg8VTA0NTE+LDxVMDQwMT4pOyg8VTA0NTI+LDxVMDQwMj4pOyg8VTA0NTM+LDxVMDQwMz4pOy8KKyAgICg8VTA0NTQ+LDxVMDQwND4pOyg8VTA0NTU+LDxVMDQwNT4pOyg8VTA0NTY+LDxVMDQwNj4pOyg8VTA0NTc+LDxVMDQwNz4pOy8KKyAgICg8VTA0NTg+LDxVMDQwOD4pOyg8VTA0NTk+LDxVMDQwOT4pOyg8VTA0NUE+LDxVMDQwQT4pOyg8VTA0NUI+LDxVMDQwQj4pOy8KKyAgICg8VTA0NUM+LDxVMDQwQz4pOyg8VTA0NUQ+LDxVMDQwRD4pOyg8VTA0NUU+LDxVMDQwRT4pOyg8VTA0NUY+LDxVMDQwRj4pOy8KKyAgICg8VTA0NjE+LDxVMDQ2MD4pOyg8VTA0NjM+LDxVMDQ2Mj4pOyg8VTA0NjU+LDxVMDQ2ND4pOyg8VTA0Njc+LDxVMDQ2Nj4pOy8KKyAgICg8VTA0Njk+LDxVMDQ2OD4pOyg8VTA0NkI+LDxVMDQ2QT4pOyg8VTA0NkQ+LDxVMDQ2Qz4pOyg8VTA0NkY+LDxVMDQ2RT4pOy8KKyAgICg8VTA0NzE+LDxVMDQ3MD4pOyg8VTA0NzM+LDxVMDQ3Mj4pOyg8VTA0NzU+LDxVMDQ3ND4pOyg8VTA0Nzc+LDxVMDQ3Nj4pOy8KKyAgICg8VTA0Nzk+LDxVMDQ3OD4pOyg8VTA0N0I+LDxVMDQ3QT4pOyg8VTA0N0Q+LDxVMDQ3Qz4pOyg8VTA0N0Y+LDxVMDQ3RT4pOy8KKyAgICg8VTA0ODE+LDxVMDQ4MD4pOyg8VTA0OEI+LDxVMDQ4QT4pOy8KKyAgICg8VTA0OEQ+LDxVMDQ4Qz4pOyg8VTA0OEY+LDxVMDQ4RT4pOyg8VTA0OTE+LDxVMDQ5MD4pOy8KKyAgICg8VTA0OTM+LDxVMDQ5Mj4pOyg8VTA0OTU+LDxVMDQ5ND4pOyg8VTA0OTc+LDxVMDQ5Nj4pOyg8VTA0OTk+LDxVMDQ5OD4pOy8KKyAgICg8VTA0OUI+LDxVMDQ5QT4pOyg8VTA0OUQ+LDxVMDQ5Qz4pOyg8VTA0OUY+LDxVMDQ5RT4pOyg8VTA0QTE+LDxVMDRBMD4pOy8KKyAgICg8VTA0QTM+LDxVMDRBMj4pOyg8VTA0QTU+LDxVMDRBND4pOyg8VTA0QTc+LDxVMDRBNj4pOyg8VTA0QTk+LDxVMDRBOD4pOy8KKyAgICg8VTA0QUI+LDxVMDRBQT4pOyg8VTA0QUQ+LDxVMDRBQz4pOyg8VTA0QUY+LDxVMDRBRT4pOyg8VTA0QjE+LDxVMDRCMD4pOy8KKyAgICg8VTA0QjM+LDxVMDRCMj4pOyg8VTA0QjU+LDxVMDRCND4pOyg8VTA0Qjc+LDxVMDRCNj4pOyg8VTA0Qjk+LDxVMDRCOD4pOy8KKyAgICg8VTA0QkI+LDxVMDRCQT4pOyg8VTA0QkQ+LDxVMDRCQz4pOyg8VTA0QkY+LDxVMDRCRT4pOyg8VTA0QzI+LDxVMDRDMT4pOy8KKyAgICg8VTA0QzQ+LDxVMDRDMz4pOyg8VTA0QzY+LDxVMDRDNT4pOyg8VTA0Qzg+LDxVMDRDNz4pOyg8VTA0Q0E+LDxVMDRDOT4pOy8KKyAgICg8VTA0Q0M+LDxVMDRDQj4pOyg8VTA0Q0U+LDxVMDRDRD4pOyg8VTA0RDE+LDxVMDREMD4pOy8KKyAgICg8VTA0RDM+LDxVMDREMj4pOyg8VTA0RDU+LDxVMDREND4pOyg8VTA0RDc+LDxVMDRENj4pOyg8VTA0RDk+LDxVMDREOD4pOy8KKyAgICg8VTA0REI+LDxVMDREQT4pOyg8VTA0REQ+LDxVMDREQz4pOyg8VTA0REY+LDxVMDRERT4pOyg8VTA0RTE+LDxVMDRFMD4pOy8KKyAgICg8VTA0RTM+LDxVMDRFMj4pOyg8VTA0RTU+LDxVMDRFND4pOyg8VTA0RTc+LDxVMDRFNj4pOyg8VTA0RTk+LDxVMDRFOD4pOy8KKyAgICg8VTA0RUI+LDxVMDRFQT4pOyg8VTA0RUQ+LDxVMDRFQz4pOyg8VTA0RUY+LDxVMDRFRT4pOyg8VTA0RjE+LDxVMDRGMD4pOy8KKyAgICg8VTA0RjM+LDxVMDRGMj4pOyg8VTA0RjU+LDxVMDRGND4pOyg8VTA0Rjk+LDxVMDRGOD4pOyg8VTA1MDE+LDxVMDUwMD4pOy8KKyAgICg8VTA1MDM+LDxVMDUwMj4pOyg8VTA1MDU+LDxVMDUwND4pOyg8VTA1MDc+LDxVMDUwNj4pOyg8VTA1MDk+LDxVMDUwOD4pOy8KKyAgICg8VTA1MEI+LDxVMDUwQT4pOyg8VTA1MEQ+LDxVMDUwQz4pOyg8VTA1MEY+LDxVMDUwRT4pOyg8VTA1NjE+LDxVMDUzMT4pOy8KKyAgICg8VTA1NjI+LDxVMDUzMj4pOyg8VTA1NjM+LDxVMDUzMz4pOyg8VTA1NjQ+LDxVMDUzND4pOyg8VTA1NjU+LDxVMDUzNT4pOy8KKyAgICg8VTA1NjY+LDxVMDUzNj4pOyg8VTA1Njc+LDxVMDUzNz4pOyg8VTA1Njg+LDxVMDUzOD4pOyg8VTA1Njk+LDxVMDUzOT4pOy8KKyAgICg8VTA1NkE+LDxVMDUzQT4pOyg8VTA1NkI+LDxVMDUzQj4pOyg8VTA1NkM+LDxVMDUzQz4pOyg8VTA1NkQ+LDxVMDUzRD4pOy8KKyAgICg8VTA1NkU+LDxVMDUzRT4pOyg8VTA1NkY+LDxVMDUzRj4pOyg8VTA1NzA+LDxVMDU0MD4pOyg8VTA1NzE+LDxVMDU0MT4pOy8KKyAgICg8VTA1NzI+LDxVMDU0Mj4pOyg8VTA1NzM+LDxVMDU0Mz4pOyg8VTA1NzQ+LDxVMDU0ND4pOyg8VTA1NzU+LDxVMDU0NT4pOy8KKyAgICg8VTA1NzY+LDxVMDU0Nj4pOyg8VTA1Nzc+LDxVMDU0Nz4pOyg8VTA1Nzg+LDxVMDU0OD4pOyg8VTA1Nzk+LDxVMDU0OT4pOy8KKyAgICg8VTA1N0E+LDxVMDU0QT4pOyg8VTA1N0I+LDxVMDU0Qj4pOyg8VTA1N0M+LDxVMDU0Qz4pOyg8VTA1N0Q+LDxVMDU0RD4pOy8KKyAgICg8VTA1N0U+LDxVMDU0RT4pOyg8VTA1N0Y+LDxVMDU0Rj4pOyg8VTA1ODA+LDxVMDU1MD4pOyg8VTA1ODE+LDxVMDU1MT4pOy8KKyAgICg8VTA1ODI+LDxVMDU1Mj4pOyg8VTA1ODM+LDxVMDU1Mz4pOyg8VTA1ODQ+LDxVMDU1ND4pOyg8VTA1ODU+LDxVMDU1NT4pOy8KKyAgICg8VTA1ODY+LDxVMDU1Nj4pOyg8VTFFMDE+LDxVMUUwMD4pOyg8VTFFMDM+LDxVMUUwMj4pOyg8VTFFMDU+LDxVMUUwND4pOy8KKyAgICg8VTFFMDc+LDxVMUUwNj4pOyg8VTFFMDk+LDxVMUUwOD4pOyg8VTFFMEI+LDxVMUUwQT4pOyg8VTFFMEQ+LDxVMUUwQz4pOy8KKyAgICg8VTFFMEY+LDxVMUUwRT4pOyg8VTFFMTE+LDxVMUUxMD4pOyg8VTFFMTM+LDxVMUUxMj4pOyg8VTFFMTU+LDxVMUUxND4pOy8KKyAgICg8VTFFMTc+LDxVMUUxNj4pOyg8VTFFMTk+LDxVMUUxOD4pOyg8VTFFMUI+LDxVMUUxQT4pOyg8VTFFMUQ+LDxVMUUxQz4pOy8KKyAgICg8VTFFMUY+LDxVMUUxRT4pOyg8VTFFMjE+LDxVMUUyMD4pOyg8VTFFMjM+LDxVMUUyMj4pOyg8VTFFMjU+LDxVMUUyND4pOy8KKyAgICg8VTFFMjc+LDxVMUUyNj4pOyg8VTFFMjk+LDxVMUUyOD4pOyg8VTFFMkI+LDxVMUUyQT4pOyg8VTFFMkQ+LDxVMUUyQz4pOy8KKyAgICg8VTFFMkY+LDxVMUUyRT4pOyg8VTFFMzE+LDxVMUUzMD4pOyg8VTFFMzM+LDxVMUUzMj4pOyg8VTFFMzU+LDxVMUUzND4pOy8KKyAgICg8VTFFMzc+LDxVMUUzNj4pOyg8VTFFMzk+LDxVMUUzOD4pOyg8VTFFM0I+LDxVMUUzQT4pOyg8VTFFM0Q+LDxVMUUzQz4pOy8KKyAgICg8VTFFM0Y+LDxVMUUzRT4pOyg8VTFFNDE+LDxVMUU0MD4pOyg8VTFFNDM+LDxVMUU0Mj4pOyg8VTFFNDU+LDxVMUU0ND4pOy8KKyAgICg8VTFFNDc+LDxVMUU0Nj4pOyg8VTFFNDk+LDxVMUU0OD4pOyg8VTFFNEI+LDxVMUU0QT4pOyg8VTFFNEQ+LDxVMUU0Qz4pOy8KKyAgICg8VTFFNEY+LDxVMUU0RT4pOyg8VTFFNTE+LDxVMUU1MD4pOyg8VTFFNTM+LDxVMUU1Mj4pOyg8VTFFNTU+LDxVMUU1ND4pOy8KKyAgICg8VTFFNTc+LDxVMUU1Nj4pOyg8VTFFNTk+LDxVMUU1OD4pOyg8VTFFNUI+LDxVMUU1QT4pOyg8VTFFNUQ+LDxVMUU1Qz4pOy8KKyAgICg8VTFFNUY+LDxVMUU1RT4pOyg8VTFFNjE+LDxVMUU2MD4pOyg8VTFFNjM+LDxVMUU2Mj4pOyg8VTFFNjU+LDxVMUU2ND4pOy8KKyAgICg8VTFFNjc+LDxVMUU2Nj4pOyg8VTFFNjk+LDxVMUU2OD4pOyg8VTFFNkI+LDxVMUU2QT4pOyg8VTFFNkQ+LDxVMUU2Qz4pOy8KKyAgICg8VTFFNkY+LDxVMUU2RT4pOyg8VTFFNzE+LDxVMUU3MD4pOyg8VTFFNzM+LDxVMUU3Mj4pOyg8VTFFNzU+LDxVMUU3ND4pOy8KKyAgICg8VTFFNzc+LDxVMUU3Nj4pOyg8VTFFNzk+LDxVMUU3OD4pOyg8VTFFN0I+LDxVMUU3QT4pOyg8VTFFN0Q+LDxVMUU3Qz4pOy8KKyAgICg8VTFFN0Y+LDxVMUU3RT4pOyg8VTFFODE+LDxVMUU4MD4pOyg8VTFFODM+LDxVMUU4Mj4pOyg8VTFFODU+LDxVMUU4ND4pOy8KKyAgICg8VTFFODc+LDxVMUU4Nj4pOyg8VTFFODk+LDxVMUU4OD4pOyg8VTFFOEI+LDxVMUU4QT4pOyg8VTFFOEQ+LDxVMUU4Qz4pOy8KKyAgICg8VTFFOEY+LDxVMUU4RT4pOyg8VTFFOTE+LDxVMUU5MD4pOyg8VTFFOTM+LDxVMUU5Mj4pOyg8VTFFOTU+LDxVMUU5ND4pOy8KKyAgICg8VTFFOUI+LDxVMUU2MD4pOyg8VTFFQTE+LDxVMUVBMD4pOyg8VTFFQTM+LDxVMUVBMj4pOyg8VTFFQTU+LDxVMUVBND4pOy8KKyAgICg8VTFFQTc+LDxVMUVBNj4pOyg8VTFFQTk+LDxVMUVBOD4pOyg8VTFFQUI+LDxVMUVBQT4pOyg8VTFFQUQ+LDxVMUVBQz4pOy8KKyAgICg8VTFFQUY+LDxVMUVBRT4pOyg8VTFFQjE+LDxVMUVCMD4pOyg8VTFFQjM+LDxVMUVCMj4pOyg8VTFFQjU+LDxVMUVCND4pOy8KKyAgICg8VTFFQjc+LDxVMUVCNj4pOyg8VTFFQjk+LDxVMUVCOD4pOyg8VTFFQkI+LDxVMUVCQT4pOyg8VTFFQkQ+LDxVMUVCQz4pOy8KKyAgICg8VTFFQkY+LDxVMUVCRT4pOyg8VTFFQzE+LDxVMUVDMD4pOyg8VTFFQzM+LDxVMUVDMj4pOyg8VTFFQzU+LDxVMUVDND4pOy8KKyAgICg8VTFFQzc+LDxVMUVDNj4pOyg8VTFFQzk+LDxVMUVDOD4pOyg8VTFFQ0I+LDxVMUVDQT4pOyg8VTFFQ0Q+LDxVMUVDQz4pOy8KKyAgICg8VTFFQ0Y+LDxVMUVDRT4pOyg8VTFFRDE+LDxVMUVEMD4pOyg8VTFFRDM+LDxVMUVEMj4pOyg8VTFFRDU+LDxVMUVEND4pOy8KKyAgICg8VTFFRDc+LDxVMUVENj4pOyg8VTFFRDk+LDxVMUVEOD4pOyg8VTFFREI+LDxVMUVEQT4pOyg8VTFFREQ+LDxVMUVEQz4pOy8KKyAgICg8VTFFREY+LDxVMUVERT4pOyg8VTFFRTE+LDxVMUVFMD4pOyg8VTFFRTM+LDxVMUVFMj4pOyg8VTFFRTU+LDxVMUVFND4pOy8KKyAgICg8VTFFRTc+LDxVMUVFNj4pOyg8VTFFRTk+LDxVMUVFOD4pOyg8VTFFRUI+LDxVMUVFQT4pOyg8VTFFRUQ+LDxVMUVFQz4pOy8KKyAgICg8VTFFRUY+LDxVMUVFRT4pOyg8VTFFRjE+LDxVMUVGMD4pOyg8VTFFRjM+LDxVMUVGMj4pOyg8VTFFRjU+LDxVMUVGND4pOy8KKyAgICg8VTFFRjc+LDxVMUVGNj4pOyg8VTFFRjk+LDxVMUVGOD4pOyg8VTFGMDA+LDxVMUYwOD4pOyg8VTFGMDE+LDxVMUYwOT4pOy8KKyAgICg8VTFGMDI+LDxVMUYwQT4pOyg8VTFGMDM+LDxVMUYwQj4pOyg8VTFGMDQ+LDxVMUYwQz4pOyg8VTFGMDU+LDxVMUYwRD4pOy8KKyAgICg8VTFGMDY+LDxVMUYwRT4pOyg8VTFGMDc+LDxVMUYwRj4pOyg8VTFGMTA+LDxVMUYxOD4pOyg8VTFGMTE+LDxVMUYxOT4pOy8KKyAgICg8VTFGMTI+LDxVMUYxQT4pOyg8VTFGMTM+LDxVMUYxQj4pOyg8VTFGMTQ+LDxVMUYxQz4pOyg8VTFGMTU+LDxVMUYxRD4pOy8KKyAgICg8VTFGMjA+LDxVMUYyOD4pOyg8VTFGMjE+LDxVMUYyOT4pOyg8VTFGMjI+LDxVMUYyQT4pOyg8VTFGMjM+LDxVMUYyQj4pOy8KKyAgICg8VTFGMjQ+LDxVMUYyQz4pOyg8VTFGMjU+LDxVMUYyRD4pOyg8VTFGMjY+LDxVMUYyRT4pOyg8VTFGMjc+LDxVMUYyRj4pOy8KKyAgICg8VTFGMzA+LDxVMUYzOD4pOyg8VTFGMzE+LDxVMUYzOT4pOyg8VTFGMzI+LDxVMUYzQT4pOyg8VTFGMzM+LDxVMUYzQj4pOy8KKyAgICg8VTFGMzQ+LDxVMUYzQz4pOyg8VTFGMzU+LDxVMUYzRD4pOyg8VTFGMzY+LDxVMUYzRT4pOyg8VTFGMzc+LDxVMUYzRj4pOy8KKyAgICg8VTFGNDA+LDxVMUY0OD4pOyg8VTFGNDE+LDxVMUY0OT4pOyg8VTFGNDI+LDxVMUY0QT4pOyg8VTFGNDM+LDxVMUY0Qj4pOy8KKyAgICg8VTFGNDQ+LDxVMUY0Qz4pOyg8VTFGNDU+LDxVMUY0RD4pOyg8VTFGNTE+LDxVMUY1OT4pOyg8VTFGNTM+LDxVMUY1Qj4pOy8KKyAgICg8VTFGNTU+LDxVMUY1RD4pOyg8VTFGNTc+LDxVMUY1Rj4pOyg8VTFGNjA+LDxVMUY2OD4pOyg8VTFGNjE+LDxVMUY2OT4pOy8KKyAgICg8VTFGNjI+LDxVMUY2QT4pOyg8VTFGNjM+LDxVMUY2Qj4pOyg8VTFGNjQ+LDxVMUY2Qz4pOyg8VTFGNjU+LDxVMUY2RD4pOy8KKyAgICg8VTFGNjY+LDxVMUY2RT4pOyg8VTFGNjc+LDxVMUY2Rj4pOyg8VTFGNzA+LDxVMUZCQT4pOyg8VTFGNzE+LDxVMUZCQj4pOy8KKyAgICg8VTFGNzI+LDxVMUZDOD4pOyg8VTFGNzM+LDxVMUZDOT4pOyg8VTFGNzQ+LDxVMUZDQT4pOyg8VTFGNzU+LDxVMUZDQj4pOy8KKyAgICg8VTFGNzY+LDxVMUZEQT4pOyg8VTFGNzc+LDxVMUZEQj4pOyg8VTFGNzg+LDxVMUZGOD4pOyg8VTFGNzk+LDxVMUZGOT4pOy8KKyAgICg8VTFGN0E+LDxVMUZFQT4pOyg8VTFGN0I+LDxVMUZFQj4pOyg8VTFGN0M+LDxVMUZGQT4pOyg8VTFGN0Q+LDxVMUZGQj4pOy8KKyAgICg8VTFGODA+LDxVMUY4OD4pOyg8VTFGODE+LDxVMUY4OT4pOyg8VTFGODI+LDxVMUY4QT4pOyg8VTFGODM+LDxVMUY4Qj4pOy8KKyAgICg8VTFGODQ+LDxVMUY4Qz4pOyg8VTFGODU+LDxVMUY4RD4pOyg8VTFGODY+LDxVMUY4RT4pOyg8VTFGODc+LDxVMUY4Rj4pOy8KKyAgICg8VTFGOTA+LDxVMUY5OD4pOyg8VTFGOTE+LDxVMUY5OT4pOyg8VTFGOTI+LDxVMUY5QT4pOyg8VTFGOTM+LDxVMUY5Qj4pOy8KKyAgICg8VTFGOTQ+LDxVMUY5Qz4pOyg8VTFGOTU+LDxVMUY5RD4pOyg8VTFGOTY+LDxVMUY5RT4pOyg8VTFGOTc+LDxVMUY5Rj4pOy8KKyAgICg8VTFGQTA+LDxVMUZBOD4pOyg8VTFGQTE+LDxVMUZBOT4pOyg8VTFGQTI+LDxVMUZBQT4pOyg8VTFGQTM+LDxVMUZBQj4pOy8KKyAgICg8VTFGQTQ+LDxVMUZBQz4pOyg8VTFGQTU+LDxVMUZBRD4pOyg8VTFGQTY+LDxVMUZBRT4pOyg8VTFGQTc+LDxVMUZBRj4pOy8KKyAgICg8VTFGQjA+LDxVMUZCOD4pOyg8VTFGQjE+LDxVMUZCOT4pOyg8VTFGQjM+LDxVMUZCQz4pOyg8VTFGQkU+LDxVMDM5OT4pOy8KKyAgICg8VTFGQzM+LDxVMUZDQz4pOyg8VTFGRDA+LDxVMUZEOD4pOyg8VTFGRDE+LDxVMUZEOT4pOyg8VTFGRTA+LDxVMUZFOD4pOy8KKyAgICg8VTFGRTE+LDxVMUZFOT4pOyg8VTFGRTU+LDxVMUZFQz4pOyg8VTFGRjM+LDxVMUZGQz4pOyg8VTIxNzA+LDxVMjE2MD4pOy8KKyAgICg8VTIxNzE+LDxVMjE2MT4pOyg8VTIxNzI+LDxVMjE2Mj4pOyg8VTIxNzM+LDxVMjE2Mz4pOyg8VTIxNzQ+LDxVMjE2ND4pOy8KKyAgICg8VTIxNzU+LDxVMjE2NT4pOyg8VTIxNzY+LDxVMjE2Nj4pOyg8VTIxNzc+LDxVMjE2Nz4pOyg8VTIxNzg+LDxVMjE2OD4pOy8KKyAgICg8VTIxNzk+LDxVMjE2OT4pOyg8VTIxN0E+LDxVMjE2QT4pOyg8VTIxN0I+LDxVMjE2Qj4pOyg8VTIxN0M+LDxVMjE2Qz4pOy8KKyAgICg8VTIxN0Q+LDxVMjE2RD4pOyg8VTIxN0U+LDxVMjE2RT4pOyg8VTIxN0Y+LDxVMjE2Rj4pOyg8VTI0RDA+LDxVMjRCNj4pOy8KKyAgICg8VTI0RDE+LDxVMjRCNz4pOyg8VTI0RDI+LDxVMjRCOD4pOyg8VTI0RDM+LDxVMjRCOT4pOyg8VTI0RDQ+LDxVMjRCQT4pOy8KKyAgICg8VTI0RDU+LDxVMjRCQj4pOyg8VTI0RDY+LDxVMjRCQz4pOyg8VTI0RDc+LDxVMjRCRD4pOyg8VTI0RDg+LDxVMjRCRT4pOy8KKyAgICg8VTI0RDk+LDxVMjRCRj4pOyg8VTI0REE+LDxVMjRDMD4pOyg8VTI0REI+LDxVMjRDMT4pOyg8VTI0REM+LDxVMjRDMj4pOy8KKyAgICg8VTI0REQ+LDxVMjRDMz4pOyg8VTI0REU+LDxVMjRDND4pOyg8VTI0REY+LDxVMjRDNT4pOyg8VTI0RTA+LDxVMjRDNj4pOy8KKyAgICg8VTI0RTE+LDxVMjRDNz4pOyg8VTI0RTI+LDxVMjRDOD4pOyg8VTI0RTM+LDxVMjRDOT4pOyg8VTI0RTQ+LDxVMjRDQT4pOy8KKyAgICg8VTI0RTU+LDxVMjRDQj4pOyg8VTI0RTY+LDxVMjRDQz4pOyg8VTI0RTc+LDxVMjRDRD4pOyg8VTI0RTg+LDxVMjRDRT4pOy8KKyAgICg8VTI0RTk+LDxVMjRDRj4pOyg8VUZGNDE+LDxVRkYyMT4pOyg8VUZGNDI+LDxVRkYyMj4pOyg8VUZGNDM+LDxVRkYyMz4pOy8KKyAgICg8VUZGNDQ+LDxVRkYyND4pOyg8VUZGNDU+LDxVRkYyNT4pOyg8VUZGNDY+LDxVRkYyNj4pOyg8VUZGNDc+LDxVRkYyNz4pOy8KKyAgICg8VUZGNDg+LDxVRkYyOD4pOyg8VUZGNDk+LDxVRkYyOT4pOyg8VUZGNEE+LDxVRkYyQT4pOyg8VUZGNEI+LDxVRkYyQj4pOy8KKyAgICg8VUZGNEM+LDxVRkYyQz4pOyg8VUZGNEQ+LDxVRkYyRD4pOyg8VUZGNEU+LDxVRkYyRT4pOyg8VUZGNEY+LDxVRkYyRj4pOy8KKyAgICg8VUZGNTA+LDxVRkYzMD4pOyg8VUZGNTE+LDxVRkYzMT4pOyg8VUZGNTI+LDxVRkYzMj4pOyg8VUZGNTM+LDxVRkYzMz4pOy8KKyAgICg8VUZGNTQ+LDxVRkYzND4pOyg8VUZGNTU+LDxVRkYzNT4pOyg8VUZGNTY+LDxVRkYzNj4pOyg8VUZGNTc+LDxVRkYzNz4pOy8KKyAgICg8VUZGNTg+LDxVRkYzOD4pOyg8VUZGNTk+LDxVRkYzOT4pOyg8VUZGNUE+LDxVRkYzQT4pOy8KKyAgICg8VTAwMDEwNDI4Piw8VTAwMDEwNDAwPik7KDxVMDAwMTA0Mjk+LDxVMDAwMTA0MDE+KTsvCisgICAoPFUwMDAxMDQyQT4sPFUwMDAxMDQwMj4pOyg8VTAwMDEwNDJCPiw8VTAwMDEwNDAzPik7LworICAgKDxVMDAwMTA0MkM+LDxVMDAwMTA0MDQ+KTsoPFUwMDAxMDQyRD4sPFUwMDAxMDQwNT4pOy8KKyAgICg8VTAwMDEwNDJFPiw8VTAwMDEwNDA2Pik7KDxVMDAwMTA0MkY+LDxVMDAwMTA0MDc+KTsvCisgICAoPFUwMDAxMDQzMD4sPFUwMDAxMDQwOD4pOyg8VTAwMDEwNDMxPiw8VTAwMDEwNDA5Pik7LworICAgKDxVMDAwMTA0MzI+LDxVMDAwMTA0MEE+KTsoPFUwMDAxMDQzMz4sPFUwMDAxMDQwQj4pOy8KKyAgICg8VTAwMDEwNDM0Piw8VTAwMDEwNDBDPik7KDxVMDAwMTA0MzU+LDxVMDAwMTA0MEQ+KTsvCisgICAoPFUwMDAxMDQzNj4sPFUwMDAxMDQwRT4pOyg8VTAwMDEwNDM3Piw8VTAwMDEwNDBGPik7LworICAgKDxVMDAwMTA0Mzg+LDxVMDAwMTA0MTA+KTsoPFUwMDAxMDQzOT4sPFUwMDAxMDQxMT4pOy8KKyAgICg8VTAwMDEwNDNBPiw8VTAwMDEwNDEyPik7KDxVMDAwMTA0M0I+LDxVMDAwMTA0MTM+KTsvCisgICAoPFUwMDAxMDQzQz4sPFUwMDAxMDQxND4pOyg8VTAwMDEwNDNEPiw8VTAwMDEwNDE1Pik7LworICAgKDxVMDAwMTA0M0U+LDxVMDAwMTA0MTY+KTsoPFUwMDAxMDQzRj4sPFUwMDAxMDQxNz4pOy8KKyAgICg8VTAwMDEwNDQwPiw8VTAwMDEwNDE4Pik7KDxVMDAwMTA0NDE+LDxVMDAwMTA0MTk+KTsvCisgICAoPFUwMDAxMDQ0Mj4sPFUwMDAxMDQxQT4pOyg8VTAwMDEwNDQzPiw8VTAwMDEwNDFCPik7LworICAgKDxVMDAwMTA0NDQ+LDxVMDAwMTA0MUM+KTsoPFUwMDAxMDQ0NT4sPFUwMDAxMDQxRD4pOy8KKyAgICg8VTAwMDEwNDQ2Piw8VTAwMDEwNDFFPik7KDxVMDAwMTA0NDc+LDxVMDAwMTA0MUY+KTsvCisgICAoPFUwMDAxMDQ0OD4sPFUwMDAxMDQyMD4pOyg8VTAwMDEwNDQ5Piw8VTAwMDEwNDIxPik7LworICAgKDxVMDAwMTA0NEE+LDxVMDAwMTA0MjI+KTsoPFUwMDAxMDQ0Qj4sPFUwMDAxMDQyMz4pOy8KKyAgICg8VTAwMDEwNDRDPiw8VTAwMDEwNDI0Pik7KDxVMDAwMTA0NEQ+LDxVMDAwMTA0MjU+KQorCit0b2xvd2VyIC8KKyAgICg8VTAwNDE+LDxVMDA2MT4pOyg8VTAwNDI+LDxVMDA2Mj4pOyg8VTAwNDM+LDxVMDA2Mz4pOyg8VTAwNDQ+LDxVMDA2ND4pOy8KKyAgICg8VTAwNDU+LDxVMDA2NT4pOyg8VTAwNDY+LDxVMDA2Nj4pOyg8VTAwNDc+LDxVMDA2Nz4pOyg8VTAwNDg+LDxVMDA2OD4pOy8KKyAgICg8VTAwNDk+LDxVMDEzMT4pOyg8VTAwNEE+LDxVMDA2QT4pOyg8VTAwNEI+LDxVMDA2Qj4pOyg8VTAwNEM+LDxVMDA2Qz4pOy8KKyAgICg8VTAwNEQ+LDxVMDA2RD4pOyg8VTAwNEU+LDxVMDA2RT4pOyg8VTAwNEY+LDxVMDA2Rj4pOyg8VTAwNTA+LDxVMDA3MD4pOy8KKyAgICg8VTAwNTE+LDxVMDA3MT4pOyg8VTAwNTI+LDxVMDA3Mj4pOyg8VTAwNTM+LDxVMDA3Mz4pOyg8VTAwNTQ+LDxVMDA3ND4pOy8KKyAgICg8VTAwNTU+LDxVMDA3NT4pOyg8VTAwNTY+LDxVMDA3Nj4pOyg8VTAwNTc+LDxVMDA3Nz4pOyg8VTAwNTg+LDxVMDA3OD4pOy8KKyAgICg8VTAwNTk+LDxVMDA3OT4pOyg8VTAwNUE+LDxVMDA3QT4pOyg8VTAwQzA+LDxVMDBFMD4pOyg8VTAwQzE+LDxVMDBFMT4pOy8KKyAgICg8VTAwQzI+LDxVMDBFMj4pOyg8VTAwQzM+LDxVMDBFMz4pOyg8VTAwQzQ+LDxVMDBFND4pOyg8VTAwQzU+LDxVMDBFNT4pOy8KKyAgICg8VTAwQzY+LDxVMDBFNj4pOyg8VTAwQzc+LDxVMDBFNz4pOyg8VTAwQzg+LDxVMDBFOD4pOyg8VTAwQzk+LDxVMDBFOT4pOy8KKyAgICg8VTAwQ0E+LDxVMDBFQT4pOyg8VTAwQ0I+LDxVMDBFQj4pOyg8VTAwQ0M+LDxVMDBFQz4pOyg8VTAwQ0Q+LDxVMDBFRD4pOy8KKyAgICg8VTAwQ0U+LDxVMDBFRT4pOyg8VTAwQ0Y+LDxVMDBFRj4pOyg8VTAwRDA+LDxVMDBGMD4pOyg8VTAwRDE+LDxVMDBGMT4pOy8KKyAgICg8VTAwRDI+LDxVMDBGMj4pOyg8VTAwRDM+LDxVMDBGMz4pOyg8VTAwRDQ+LDxVMDBGND4pOyg8VTAwRDU+LDxVMDBGNT4pOy8KKyAgICg8VTAwRDY+LDxVMDBGNj4pOyg8VTAwRDg+LDxVMDBGOD4pOyg8VTAwRDk+LDxVMDBGOT4pOyg8VTAwREE+LDxVMDBGQT4pOy8KKyAgICg8VTAwREI+LDxVMDBGQj4pOyg8VTAwREM+LDxVMDBGQz4pOyg8VTAwREQ+LDxVMDBGRD4pOyg8VTAwREU+LDxVMDBGRT4pOy8KKyAgICg8VTAxMDA+LDxVMDEwMT4pOyg8VTAxMDI+LDxVMDEwMz4pOyg8VTAxMDQ+LDxVMDEwNT4pOyg8VTAxMDY+LDxVMDEwNz4pOy8KKyAgICg8VTAxMDg+LDxVMDEwOT4pOyg8VTAxMEE+LDxVMDEwQj4pOyg8VTAxMEM+LDxVMDEwRD4pOyg8VTAxMEU+LDxVMDEwRj4pOy8KKyAgICg8VTAxMTA+LDxVMDExMT4pOyg8VTAxMTI+LDxVMDExMz4pOyg8VTAxMTQ+LDxVMDExNT4pOyg8VTAxMTY+LDxVMDExNz4pOy8KKyAgICg8VTAxMTg+LDxVMDExOT4pOyg8VTAxMUE+LDxVMDExQj4pOyg8VTAxMUM+LDxVMDExRD4pOyg8VTAxMUU+LDxVMDExRj4pOy8KKyAgICg8VTAxMjA+LDxVMDEyMT4pOyg8VTAxMjI+LDxVMDEyMz4pOyg8VTAxMjQ+LDxVMDEyNT4pOyg8VTAxMjY+LDxVMDEyNz4pOy8KKyAgICg8VTAxMjg+LDxVMDEyOT4pOyg8VTAxMkE+LDxVMDEyQj4pOyg8VTAxMkM+LDxVMDEyRD4pOyg8VTAxMkU+LDxVMDEyRj4pOy8KKyAgICg8VTAxMzA+LDxVMDA2OT4pOyg8VTAxMzI+LDxVMDEzMz4pOyg8VTAxMzQ+LDxVMDEzNT4pOyg8VTAxMzY+LDxVMDEzNz4pOy8KKyAgICg8VTAxMzk+LDxVMDEzQT4pOyg8VTAxM0I+LDxVMDEzQz4pOyg8VTAxM0Q+LDxVMDEzRT4pOyg8VTAxM0Y+LDxVMDE0MD4pOy8KKyAgICg8VTAxNDE+LDxVMDE0Mj4pOyg8VTAxNDM+LDxVMDE0ND4pOyg8VTAxNDU+LDxVMDE0Nj4pOyg8VTAxNDc+LDxVMDE0OD4pOy8KKyAgICg8VTAxNEE+LDxVMDE0Qj4pOyg8VTAxNEM+LDxVMDE0RD4pOyg8VTAxNEU+LDxVMDE0Rj4pOyg8VTAxNTA+LDxVMDE1MT4pOy8KKyAgICg8VTAxNTI+LDxVMDE1Mz4pOyg8VTAxNTQ+LDxVMDE1NT4pOyg8VTAxNTY+LDxVMDE1Nz4pOyg8VTAxNTg+LDxVMDE1OT4pOy8KKyAgICg8VTAxNUE+LDxVMDE1Qj4pOyg8VTAxNUM+LDxVMDE1RD4pOyg8VTAxNUU+LDxVMDE1Rj4pOyg8VTAxNjA+LDxVMDE2MT4pOy8KKyAgICg8VTAxNjI+LDxVMDE2Mz4pOyg8VTAxNjQ+LDxVMDE2NT4pOyg8VTAxNjY+LDxVMDE2Nz4pOyg8VTAxNjg+LDxVMDE2OT4pOy8KKyAgICg8VTAxNkE+LDxVMDE2Qj4pOyg8VTAxNkM+LDxVMDE2RD4pOyg8VTAxNkU+LDxVMDE2Rj4pOyg8VTAxNzA+LDxVMDE3MT4pOy8KKyAgICg8VTAxNzI+LDxVMDE3Mz4pOyg8VTAxNzQ+LDxVMDE3NT4pOyg8VTAxNzY+LDxVMDE3Nz4pOyg8VTAxNzg+LDxVMDBGRj4pOy8KKyAgICg8VTAxNzk+LDxVMDE3QT4pOyg8VTAxN0I+LDxVMDE3Qz4pOyg8VTAxN0Q+LDxVMDE3RT4pOyg8VTAxODE+LDxVMDI1Mz4pOy8KKyAgICg8VTAxODI+LDxVMDE4Mz4pOyg8VTAxODQ+LDxVMDE4NT4pOyg8VTAxODY+LDxVMDI1ND4pOyg8VTAxODc+LDxVMDE4OD4pOy8KKyAgICg8VTAxODk+LDxVMDI1Nj4pOyg8VTAxOEE+LDxVMDI1Nz4pOyg8VTAxOEI+LDxVMDE4Qz4pOyg8VTAxOEU+LDxVMDFERD4pOy8KKyAgICg8VTAxOEY+LDxVMDI1OT4pOyg8VTAxOTA+LDxVMDI1Qj4pOyg8VTAxOTE+LDxVMDE5Mj4pOyg8VTAxOTM+LDxVMDI2MD4pOy8KKyAgICg8VTAxOTQ+LDxVMDI2Mz4pOyg8VTAxOTY+LDxVMDI2OT4pOyg8VTAxOTc+LDxVMDI2OD4pOyg8VTAxOTg+LDxVMDE5OT4pOy8KKyAgICg8VTAxOUM+LDxVMDI2Rj4pOyg8VTAxOUQ+LDxVMDI3Mj4pOyg8VTAxOUY+LDxVMDI3NT4pOyg8VTAxQTA+LDxVMDFBMT4pOy8KKyAgICg8VTAxQTI+LDxVMDFBMz4pOyg8VTAxQTQ+LDxVMDFBNT4pOyg8VTAxQTY+LDxVMDI4MD4pOyg8VTAxQTc+LDxVMDFBOD4pOy8KKyAgICg8VTAxQTk+LDxVMDI4Mz4pOyg8VTAxQUM+LDxVMDFBRD4pOyg8VTAxQUU+LDxVMDI4OD4pOyg8VTAxQUY+LDxVMDFCMD4pOy8KKyAgICg8VTAxQjE+LDxVMDI4QT4pOyg8VTAxQjI+LDxVMDI4Qj4pOyg8VTAxQjM+LDxVMDFCND4pOyg8VTAxQjU+LDxVMDFCNj4pOy8KKyAgICg8VTAxQjc+LDxVMDI5Mj4pOyg8VTAxQjg+LDxVMDFCOT4pOyg8VTAxQkM+LDxVMDFCRD4pOyg8VTAxQzQ+LDxVMDFDNj4pOy8KKyAgICg8VTAxQzU+LDxVMDFDNj4pOyg8VTAxQzc+LDxVMDFDOT4pOyg8VTAxQzg+LDxVMDFDOT4pOyg8VTAxQ0E+LDxVMDFDQz4pOy8KKyAgICg8VTAxQ0I+LDxVMDFDQz4pOyg8VTAxQ0Q+LDxVMDFDRT4pOyg8VTAxQ0Y+LDxVMDFEMD4pOyg8VTAxRDE+LDxVMDFEMj4pOy8KKyAgICg8VTAxRDM+LDxVMDFEND4pOyg8VTAxRDU+LDxVMDFENj4pOyg8VTAxRDc+LDxVMDFEOD4pOyg8VTAxRDk+LDxVMDFEQT4pOy8KKyAgICg8VTAxREI+LDxVMDFEQz4pOyg8VTAxREU+LDxVMDFERj4pOyg8VTAxRTA+LDxVMDFFMT4pOyg8VTAxRTI+LDxVMDFFMz4pOy8KKyAgICg8VTAxRTQ+LDxVMDFFNT4pOyg8VTAxRTY+LDxVMDFFNz4pOyg8VTAxRTg+LDxVMDFFOT4pOyg8VTAxRUE+LDxVMDFFQj4pOy8KKyAgICg8VTAxRUM+LDxVMDFFRD4pOyg8VTAxRUU+LDxVMDFFRj4pOyg8VTAxRjE+LDxVMDFGMz4pOyg8VTAxRjI+LDxVMDFGMz4pOy8KKyAgICg8VTAxRjQ+LDxVMDFGNT4pOyg8VTAxRjY+LDxVMDE5NT4pOyg8VTAxRjc+LDxVMDFCRj4pOyg8VTAxRjg+LDxVMDFGOT4pOy8KKyAgICg8VTAxRkE+LDxVMDFGQj4pOyg8VTAxRkM+LDxVMDFGRD4pOyg8VTAxRkU+LDxVMDFGRj4pOyg8VTAyMDA+LDxVMDIwMT4pOy8KKyAgICg8VTAyMDI+LDxVMDIwMz4pOyg8VTAyMDQ+LDxVMDIwNT4pOyg8VTAyMDY+LDxVMDIwNz4pOyg8VTAyMDg+LDxVMDIwOT4pOy8KKyAgICg8VTAyMEE+LDxVMDIwQj4pOyg8VTAyMEM+LDxVMDIwRD4pOyg8VTAyMEU+LDxVMDIwRj4pOyg8VTAyMTA+LDxVMDIxMT4pOy8KKyAgICg8VTAyMTI+LDxVMDIxMz4pOyg8VTAyMTQ+LDxVMDIxNT4pOyg8VTAyMTY+LDxVMDIxNz4pOyg8VTAyMTg+LDxVMDIxOT4pOy8KKyAgICg8VTAyMUE+LDxVMDIxQj4pOyg8VTAyMUM+LDxVMDIxRD4pOyg8VTAyMUU+LDxVMDIxRj4pOyg8VTAyMjA+LDxVMDE5RT4pOy8KKyAgICg8VTAyMjI+LDxVMDIyMz4pOy8KKyAgICg8VTAyMjQ+LDxVMDIyNT4pOyg8VTAyMjY+LDxVMDIyNz4pOyg8VTAyMjg+LDxVMDIyOT4pOyg8VTAyMkE+LDxVMDIyQj4pOy8KKyAgICg8VTAyMkM+LDxVMDIyRD4pOyg8VTAyMkU+LDxVMDIyRj4pOyg8VTAyMzA+LDxVMDIzMT4pOyg8VTAyMzI+LDxVMDIzMz4pOy8KKyAgICg8VTAzODY+LDxVMDNBQz4pOyg8VTAzODg+LDxVMDNBRD4pOyg8VTAzODk+LDxVMDNBRT4pOyg8VTAzOEE+LDxVMDNBRj4pOy8KKyAgICg8VTAzOEM+LDxVMDNDQz4pOyg8VTAzOEU+LDxVMDNDRD4pOyg8VTAzOEY+LDxVMDNDRT4pOyg8VTAzOTE+LDxVMDNCMT4pOy8KKyAgICg8VTAzOTI+LDxVMDNCMj4pOyg8VTAzOTM+LDxVMDNCMz4pOyg8VTAzOTQ+LDxVMDNCND4pOyg8VTAzOTU+LDxVMDNCNT4pOy8KKyAgICg8VTAzOTY+LDxVMDNCNj4pOyg8VTAzOTc+LDxVMDNCNz4pOyg8VTAzOTg+LDxVMDNCOD4pOyg8VTAzOTk+LDxVMDNCOT4pOy8KKyAgICg8VTAzOUE+LDxVMDNCQT4pOyg8VTAzOUI+LDxVMDNCQj4pOyg8VTAzOUM+LDxVMDNCQz4pOyg8VTAzOUQ+LDxVMDNCRD4pOy8KKyAgICg8VTAzOUU+LDxVMDNCRT4pOyg8VTAzOUY+LDxVMDNCRj4pOyg8VTAzQTA+LDxVMDNDMD4pOyg8VTAzQTE+LDxVMDNDMT4pOy8KKyAgICg8VTAzQTM+LDxVMDNDMz4pOyg8VTAzQTQ+LDxVMDNDND4pOyg8VTAzQTU+LDxVMDNDNT4pOyg8VTAzQTY+LDxVMDNDNj4pOy8KKyAgICg8VTAzQTc+LDxVMDNDNz4pOyg8VTAzQTg+LDxVMDNDOD4pOyg8VTAzQTk+LDxVMDNDOT4pOyg8VTAzQUE+LDxVMDNDQT4pOy8KKyAgICg8VTAzQUI+LDxVMDNDQj4pOyg8VTAzRDg+LDxVMDNEOT4pOy8KKyAgICg8VTAzREE+LDxVMDNEQj4pOyg8VTAzREM+LDxVMDNERD4pOyg8VTAzREU+LDxVMDNERj4pOy8KKyAgICg8VTAzRTA+LDxVMDNFMT4pOyg8VTAzRTI+LDxVMDNFMz4pOyg8VTAzRTQ+LDxVMDNFNT4pOyg8VTAzRTY+LDxVMDNFNz4pOy8KKyAgICg8VTAzRTg+LDxVMDNFOT4pOyg8VTAzRUE+LDxVMDNFQj4pOyg8VTAzRUM+LDxVMDNFRD4pOyg8VTAzRUU+LDxVMDNFRj4pOy8KKyAgICg8VTAzRjQ+LDxVMDNCOD4pOyg8VTA0MDA+LDxVMDQ1MD4pOyg8VTA0MDE+LDxVMDQ1MT4pOyg8VTA0MDI+LDxVMDQ1Mj4pOy8KKyAgICg8VTA0MDM+LDxVMDQ1Mz4pOyg8VTA0MDQ+LDxVMDQ1ND4pOyg8VTA0MDU+LDxVMDQ1NT4pOyg8VTA0MDY+LDxVMDQ1Nj4pOy8KKyAgICg8VTA0MDc+LDxVMDQ1Nz4pOyg8VTA0MDg+LDxVMDQ1OD4pOyg8VTA0MDk+LDxVMDQ1OT4pOyg8VTA0MEE+LDxVMDQ1QT4pOy8KKyAgICg8VTA0MEI+LDxVMDQ1Qj4pOyg8VTA0MEM+LDxVMDQ1Qz4pOyg8VTA0MEQ+LDxVMDQ1RD4pOyg8VTA0MEU+LDxVMDQ1RT4pOy8KKyAgICg8VTA0MEY+LDxVMDQ1Rj4pOyg8VTA0MTA+LDxVMDQzMD4pOyg8VTA0MTE+LDxVMDQzMT4pOyg8VTA0MTI+LDxVMDQzMj4pOy8KKyAgICg8VTA0MTM+LDxVMDQzMz4pOyg8VTA0MTQ+LDxVMDQzND4pOyg8VTA0MTU+LDxVMDQzNT4pOyg8VTA0MTY+LDxVMDQzNj4pOy8KKyAgICg8VTA0MTc+LDxVMDQzNz4pOyg8VTA0MTg+LDxVMDQzOD4pOyg8VTA0MTk+LDxVMDQzOT4pOyg8VTA0MUE+LDxVMDQzQT4pOy8KKyAgICg8VTA0MUI+LDxVMDQzQj4pOyg8VTA0MUM+LDxVMDQzQz4pOyg8VTA0MUQ+LDxVMDQzRD4pOyg8VTA0MUU+LDxVMDQzRT4pOy8KKyAgICg8VTA0MUY+LDxVMDQzRj4pOyg8VTA0MjA+LDxVMDQ0MD4pOyg8VTA0MjE+LDxVMDQ0MT4pOyg8VTA0MjI+LDxVMDQ0Mj4pOy8KKyAgICg8VTA0MjM+LDxVMDQ0Mz4pOyg8VTA0MjQ+LDxVMDQ0ND4pOyg8VTA0MjU+LDxVMDQ0NT4pOyg8VTA0MjY+LDxVMDQ0Nj4pOy8KKyAgICg8VTA0Mjc+LDxVMDQ0Nz4pOyg8VTA0Mjg+LDxVMDQ0OD4pOyg8VTA0Mjk+LDxVMDQ0OT4pOyg8VTA0MkE+LDxVMDQ0QT4pOy8KKyAgICg8VTA0MkI+LDxVMDQ0Qj4pOyg8VTA0MkM+LDxVMDQ0Qz4pOyg8VTA0MkQ+LDxVMDQ0RD4pOyg8VTA0MkU+LDxVMDQ0RT4pOy8KKyAgICg8VTA0MkY+LDxVMDQ0Rj4pOyg8VTA0NjA+LDxVMDQ2MT4pOyg8VTA0NjI+LDxVMDQ2Mz4pOyg8VTA0NjQ+LDxVMDQ2NT4pOy8KKyAgICg8VTA0NjY+LDxVMDQ2Nz4pOyg8VTA0Njg+LDxVMDQ2OT4pOyg8VTA0NkE+LDxVMDQ2Qj4pOyg8VTA0NkM+LDxVMDQ2RD4pOy8KKyAgICg8VTA0NkU+LDxVMDQ2Rj4pOyg8VTA0NzA+LDxVMDQ3MT4pOyg8VTA0NzI+LDxVMDQ3Mz4pOyg8VTA0NzQ+LDxVMDQ3NT4pOy8KKyAgICg8VTA0NzY+LDxVMDQ3Nz4pOyg8VTA0Nzg+LDxVMDQ3OT4pOyg8VTA0N0E+LDxVMDQ3Qj4pOyg8VTA0N0M+LDxVMDQ3RD4pOy8KKyAgICg8VTA0N0U+LDxVMDQ3Rj4pOyg8VTA0ODA+LDxVMDQ4MT4pOyg8VTA0OEE+LDxVMDQ4Qj4pOy8KKyAgICg8VTA0OEM+LDxVMDQ4RD4pOyg8VTA0OEU+LDxVMDQ4Rj4pOy8KKyAgICg8VTA0OTA+LDxVMDQ5MT4pOyg8VTA0OTI+LDxVMDQ5Mz4pOyg8VTA0OTQ+LDxVMDQ5NT4pOyg8VTA0OTY+LDxVMDQ5Nz4pOy8KKyAgICg8VTA0OTg+LDxVMDQ5OT4pOyg8VTA0OUE+LDxVMDQ5Qj4pOyg8VTA0OUM+LDxVMDQ5RD4pOyg8VTA0OUU+LDxVMDQ5Rj4pOy8KKyAgICg8VTA0QTA+LDxVMDRBMT4pOyg8VTA0QTI+LDxVMDRBMz4pOyg8VTA0QTQ+LDxVMDRBNT4pOyg8VTA0QTY+LDxVMDRBNz4pOy8KKyAgICg8VTA0QTg+LDxVMDRBOT4pOyg8VTA0QUE+LDxVMDRBQj4pOyg8VTA0QUM+LDxVMDRBRD4pOyg8VTA0QUU+LDxVMDRBRj4pOy8KKyAgICg8VTA0QjA+LDxVMDRCMT4pOyg8VTA0QjI+LDxVMDRCMz4pOyg8VTA0QjQ+LDxVMDRCNT4pOyg8VTA0QjY+LDxVMDRCNz4pOy8KKyAgICg8VTA0Qjg+LDxVMDRCOT4pOyg8VTA0QkE+LDxVMDRCQj4pOyg8VTA0QkM+LDxVMDRCRD4pOyg8VTA0QkU+LDxVMDRCRj4pOy8KKyAgICg8VTA0QzE+LDxVMDRDMj4pOyg8VTA0QzM+LDxVMDRDND4pOyg8VTA0QzU+LDxVMDRDNj4pOyg8VTA0Qzc+LDxVMDRDOD4pOy8KKyAgICg8VTA0Qzk+LDxVMDRDQT4pOyg8VTA0Q0I+LDxVMDRDQz4pOyg8VTA0Q0Q+LDxVMDRDRT4pOy8KKyAgICg8VTA0RDA+LDxVMDREMT4pOyg8VTA0RDI+LDxVMDREMz4pOyg8VTA0RDQ+LDxVMDRENT4pOyg8VTA0RDY+LDxVMDRENz4pOy8KKyAgICg8VTA0RDg+LDxVMDREOT4pOyg8VTA0REE+LDxVMDREQj4pOyg8VTA0REM+LDxVMDRERD4pOyg8VTA0REU+LDxVMDRERj4pOy8KKyAgICg8VTA0RTA+LDxVMDRFMT4pOyg8VTA0RTI+LDxVMDRFMz4pOyg8VTA0RTQ+LDxVMDRFNT4pOyg8VTA0RTY+LDxVMDRFNz4pOy8KKyAgICg8VTA0RTg+LDxVMDRFOT4pOyg8VTA0RUE+LDxVMDRFQj4pOyg8VTA0RUM+LDxVMDRFRD4pOyg8VTA0RUU+LDxVMDRFRj4pOy8KKyAgICg8VTA0RjA+LDxVMDRGMT4pOyg8VTA0RjI+LDxVMDRGMz4pOyg8VTA0RjQ+LDxVMDRGNT4pOyg8VTA0Rjg+LDxVMDRGOT4pOy8KKyAgICg8VTA1MDA+LDxVMDUwMT4pOyg8VTA1MDI+LDxVMDUwMz4pOyg8VTA1MDQ+LDxVMDUwNT4pOyg8VTA1MDY+LDxVMDUwNz4pOy8KKyAgICg8VTA1MDg+LDxVMDUwOT4pOyg8VTA1MEE+LDxVMDUwQj4pOyg8VTA1MEM+LDxVMDUwRD4pOyg8VTA1MEU+LDxVMDUwRj4pOy8KKyAgICg8VTA1MzE+LDxVMDU2MT4pOyg8VTA1MzI+LDxVMDU2Mj4pOyg8VTA1MzM+LDxVMDU2Mz4pOyg8VTA1MzQ+LDxVMDU2ND4pOy8KKyAgICg8VTA1MzU+LDxVMDU2NT4pOyg8VTA1MzY+LDxVMDU2Nj4pOyg8VTA1Mzc+LDxVMDU2Nz4pOyg8VTA1Mzg+LDxVMDU2OD4pOy8KKyAgICg8VTA1Mzk+LDxVMDU2OT4pOyg8VTA1M0E+LDxVMDU2QT4pOyg8VTA1M0I+LDxVMDU2Qj4pOyg8VTA1M0M+LDxVMDU2Qz4pOy8KKyAgICg8VTA1M0Q+LDxVMDU2RD4pOyg8VTA1M0U+LDxVMDU2RT4pOyg8VTA1M0Y+LDxVMDU2Rj4pOyg8VTA1NDA+LDxVMDU3MD4pOy8KKyAgICg8VTA1NDE+LDxVMDU3MT4pOyg8VTA1NDI+LDxVMDU3Mj4pOyg8VTA1NDM+LDxVMDU3Mz4pOyg8VTA1NDQ+LDxVMDU3ND4pOy8KKyAgICg8VTA1NDU+LDxVMDU3NT4pOyg8VTA1NDY+LDxVMDU3Nj4pOyg8VTA1NDc+LDxVMDU3Nz4pOyg8VTA1NDg+LDxVMDU3OD4pOy8KKyAgICg8VTA1NDk+LDxVMDU3OT4pOyg8VTA1NEE+LDxVMDU3QT4pOyg8VTA1NEI+LDxVMDU3Qj4pOyg8VTA1NEM+LDxVMDU3Qz4pOy8KKyAgICg8VTA1NEQ+LDxVMDU3RD4pOyg8VTA1NEU+LDxVMDU3RT4pOyg8VTA1NEY+LDxVMDU3Rj4pOyg8VTA1NTA+LDxVMDU4MD4pOy8KKyAgICg8VTA1NTE+LDxVMDU4MT4pOyg8VTA1NTI+LDxVMDU4Mj4pOyg8VTA1NTM+LDxVMDU4Mz4pOyg8VTA1NTQ+LDxVMDU4ND4pOy8KKyAgICg8VTA1NTU+LDxVMDU4NT4pOyg8VTA1NTY+LDxVMDU4Nj4pOyg8VTFFMDA+LDxVMUUwMT4pOyg8VTFFMDI+LDxVMUUwMz4pOy8KKyAgICg8VTFFMDQ+LDxVMUUwNT4pOyg8VTFFMDY+LDxVMUUwNz4pOyg8VTFFMDg+LDxVMUUwOT4pOyg8VTFFMEE+LDxVMUUwQj4pOy8KKyAgICg8VTFFMEM+LDxVMUUwRD4pOyg8VTFFMEU+LDxVMUUwRj4pOyg8VTFFMTA+LDxVMUUxMT4pOyg8VTFFMTI+LDxVMUUxMz4pOy8KKyAgICg8VTFFMTQ+LDxVMUUxNT4pOyg8VTFFMTY+LDxVMUUxNz4pOyg8VTFFMTg+LDxVMUUxOT4pOyg8VTFFMUE+LDxVMUUxQj4pOy8KKyAgICg8VTFFMUM+LDxVMUUxRD4pOyg8VTFFMUU+LDxVMUUxRj4pOyg8VTFFMjA+LDxVMUUyMT4pOyg8VTFFMjI+LDxVMUUyMz4pOy8KKyAgICg8VTFFMjQ+LDxVMUUyNT4pOyg8VTFFMjY+LDxVMUUyNz4pOyg8VTFFMjg+LDxVMUUyOT4pOyg8VTFFMkE+LDxVMUUyQj4pOy8KKyAgICg8VTFFMkM+LDxVMUUyRD4pOyg8VTFFMkU+LDxVMUUyRj4pOyg8VTFFMzA+LDxVMUUzMT4pOyg8VTFFMzI+LDxVMUUzMz4pOy8KKyAgICg8VTFFMzQ+LDxVMUUzNT4pOyg8VTFFMzY+LDxVMUUzNz4pOyg8VTFFMzg+LDxVMUUzOT4pOyg8VTFFM0E+LDxVMUUzQj4pOy8KKyAgICg8VTFFM0M+LDxVMUUzRD4pOyg8VTFFM0U+LDxVMUUzRj4pOyg8VTFFNDA+LDxVMUU0MT4pOyg8VTFFNDI+LDxVMUU0Mz4pOy8KKyAgICg8VTFFNDQ+LDxVMUU0NT4pOyg8VTFFNDY+LDxVMUU0Nz4pOyg8VTFFNDg+LDxVMUU0OT4pOyg8VTFFNEE+LDxVMUU0Qj4pOy8KKyAgICg8VTFFNEM+LDxVMUU0RD4pOyg8VTFFNEU+LDxVMUU0Rj4pOyg8VTFFNTA+LDxVMUU1MT4pOyg8VTFFNTI+LDxVMUU1Mz4pOy8KKyAgICg8VTFFNTQ+LDxVMUU1NT4pOyg8VTFFNTY+LDxVMUU1Nz4pOyg8VTFFNTg+LDxVMUU1OT4pOyg8VTFFNUE+LDxVMUU1Qj4pOy8KKyAgICg8VTFFNUM+LDxVMUU1RD4pOyg8VTFFNUU+LDxVMUU1Rj4pOyg8VTFFNjA+LDxVMUU2MT4pOyg8VTFFNjI+LDxVMUU2Mz4pOy8KKyAgICg8VTFFNjQ+LDxVMUU2NT4pOyg8VTFFNjY+LDxVMUU2Nz4pOyg8VTFFNjg+LDxVMUU2OT4pOyg8VTFFNkE+LDxVMUU2Qj4pOy8KKyAgICg8VTFFNkM+LDxVMUU2RD4pOyg8VTFFNkU+LDxVMUU2Rj4pOyg8VTFFNzA+LDxVMUU3MT4pOyg8VTFFNzI+LDxVMUU3Mz4pOy8KKyAgICg8VTFFNzQ+LDxVMUU3NT4pOyg8VTFFNzY+LDxVMUU3Nz4pOyg8VTFFNzg+LDxVMUU3OT4pOyg8VTFFN0E+LDxVMUU3Qj4pOy8KKyAgICg8VTFFN0M+LDxVMUU3RD4pOyg8VTFFN0U+LDxVMUU3Rj4pOyg8VTFFODA+LDxVMUU4MT4pOyg8VTFFODI+LDxVMUU4Mz4pOy8KKyAgICg8VTFFODQ+LDxVMUU4NT4pOyg8VTFFODY+LDxVMUU4Nz4pOyg8VTFFODg+LDxVMUU4OT4pOyg8VTFFOEE+LDxVMUU4Qj4pOy8KKyAgICg8VTFFOEM+LDxVMUU4RD4pOyg8VTFFOEU+LDxVMUU4Rj4pOyg8VTFFOTA+LDxVMUU5MT4pOyg8VTFFOTI+LDxVMUU5Mz4pOy8KKyAgICg8VTFFOTQ+LDxVMUU5NT4pOyg8VTFFQTA+LDxVMUVBMT4pOyg8VTFFQTI+LDxVMUVBMz4pOyg8VTFFQTQ+LDxVMUVBNT4pOy8KKyAgICg8VTFFQTY+LDxVMUVBNz4pOyg8VTFFQTg+LDxVMUVBOT4pOyg8VTFFQUE+LDxVMUVBQj4pOyg8VTFFQUM+LDxVMUVBRD4pOy8KKyAgICg8VTFFQUU+LDxVMUVBRj4pOyg8VTFFQjA+LDxVMUVCMT4pOyg8VTFFQjI+LDxVMUVCMz4pOyg8VTFFQjQ+LDxVMUVCNT4pOy8KKyAgICg8VTFFQjY+LDxVMUVCNz4pOyg8VTFFQjg+LDxVMUVCOT4pOyg8VTFFQkE+LDxVMUVCQj4pOyg8VTFFQkM+LDxVMUVCRD4pOy8KKyAgICg8VTFFQkU+LDxVMUVCRj4pOyg8VTFFQzA+LDxVMUVDMT4pOyg8VTFFQzI+LDxVMUVDMz4pOyg8VTFFQzQ+LDxVMUVDNT4pOy8KKyAgICg8VTFFQzY+LDxVMUVDNz4pOyg8VTFFQzg+LDxVMUVDOT4pOyg8VTFFQ0E+LDxVMUVDQj4pOyg8VTFFQ0M+LDxVMUVDRD4pOy8KKyAgICg8VTFFQ0U+LDxVMUVDRj4pOyg8VTFFRDA+LDxVMUVEMT4pOyg8VTFFRDI+LDxVMUVEMz4pOyg8VTFFRDQ+LDxVMUVENT4pOy8KKyAgICg8VTFFRDY+LDxVMUVENz4pOyg8VTFFRDg+LDxVMUVEOT4pOyg8VTFFREE+LDxVMUVEQj4pOyg8VTFFREM+LDxVMUVERD4pOy8KKyAgICg8VTFFREU+LDxVMUVERj4pOyg8VTFFRTA+LDxVMUVFMT4pOyg8VTFFRTI+LDxVMUVFMz4pOyg8VTFFRTQ+LDxVMUVFNT4pOy8KKyAgICg8VTFFRTY+LDxVMUVFNz4pOyg8VTFFRTg+LDxVMUVFOT4pOyg8VTFFRUE+LDxVMUVFQj4pOyg8VTFFRUM+LDxVMUVFRD4pOy8KKyAgICg8VTFFRUU+LDxVMUVFRj4pOyg8VTFFRjA+LDxVMUVGMT4pOyg8VTFFRjI+LDxVMUVGMz4pOyg8VTFFRjQ+LDxVMUVGNT4pOy8KKyAgICg8VTFFRjY+LDxVMUVGNz4pOyg8VTFFRjg+LDxVMUVGOT4pOyg8VTFGMDg+LDxVMUYwMD4pOyg8VTFGMDk+LDxVMUYwMT4pOy8KKyAgICg8VTFGMEE+LDxVMUYwMj4pOyg8VTFGMEI+LDxVMUYwMz4pOyg8VTFGMEM+LDxVMUYwND4pOyg8VTFGMEQ+LDxVMUYwNT4pOy8KKyAgICg8VTFGMEU+LDxVMUYwNj4pOyg8VTFGMEY+LDxVMUYwNz4pOyg8VTFGMTg+LDxVMUYxMD4pOyg8VTFGMTk+LDxVMUYxMT4pOy8KKyAgICg8VTFGMUE+LDxVMUYxMj4pOyg8VTFGMUI+LDxVMUYxMz4pOyg8VTFGMUM+LDxVMUYxND4pOyg8VTFGMUQ+LDxVMUYxNT4pOy8KKyAgICg8VTFGMjg+LDxVMUYyMD4pOyg8VTFGMjk+LDxVMUYyMT4pOyg8VTFGMkE+LDxVMUYyMj4pOyg8VTFGMkI+LDxVMUYyMz4pOy8KKyAgICg8VTFGMkM+LDxVMUYyND4pOyg8VTFGMkQ+LDxVMUYyNT4pOyg8VTFGMkU+LDxVMUYyNj4pOyg8VTFGMkY+LDxVMUYyNz4pOy8KKyAgICg8VTFGMzg+LDxVMUYzMD4pOyg8VTFGMzk+LDxVMUYzMT4pOyg8VTFGM0E+LDxVMUYzMj4pOyg8VTFGM0I+LDxVMUYzMz4pOy8KKyAgICg8VTFGM0M+LDxVMUYzND4pOyg8VTFGM0Q+LDxVMUYzNT4pOyg8VTFGM0U+LDxVMUYzNj4pOyg8VTFGM0Y+LDxVMUYzNz4pOy8KKyAgICg8VTFGNDg+LDxVMUY0MD4pOyg8VTFGNDk+LDxVMUY0MT4pOyg8VTFGNEE+LDxVMUY0Mj4pOyg8VTFGNEI+LDxVMUY0Mz4pOy8KKyAgICg8VTFGNEM+LDxVMUY0ND4pOyg8VTFGNEQ+LDxVMUY0NT4pOyg8VTFGNTk+LDxVMUY1MT4pOyg8VTFGNUI+LDxVMUY1Mz4pOy8KKyAgICg8VTFGNUQ+LDxVMUY1NT4pOyg8VTFGNUY+LDxVMUY1Nz4pOyg8VTFGNjg+LDxVMUY2MD4pOyg8VTFGNjk+LDxVMUY2MT4pOy8KKyAgICg8VTFGNkE+LDxVMUY2Mj4pOyg8VTFGNkI+LDxVMUY2Mz4pOyg8VTFGNkM+LDxVMUY2ND4pOyg8VTFGNkQ+LDxVMUY2NT4pOy8KKyAgICg8VTFGNkU+LDxVMUY2Nj4pOyg8VTFGNkY+LDxVMUY2Nz4pOyg8VTFGODg+LDxVMUY4MD4pOyg8VTFGODk+LDxVMUY4MT4pOy8KKyAgICg8VTFGOEE+LDxVMUY4Mj4pOyg8VTFGOEI+LDxVMUY4Mz4pOyg8VTFGOEM+LDxVMUY4ND4pOyg8VTFGOEQ+LDxVMUY4NT4pOy8KKyAgICg8VTFGOEU+LDxVMUY4Nj4pOyg8VTFGOEY+LDxVMUY4Nz4pOyg8VTFGOTg+LDxVMUY5MD4pOyg8VTFGOTk+LDxVMUY5MT4pOy8KKyAgICg8VTFGOUE+LDxVMUY5Mj4pOyg8VTFGOUI+LDxVMUY5Mz4pOyg8VTFGOUM+LDxVMUY5ND4pOyg8VTFGOUQ+LDxVMUY5NT4pOy8KKyAgICg8VTFGOUU+LDxVMUY5Nj4pOyg8VTFGOUY+LDxVMUY5Nz4pOyg8VTFGQTg+LDxVMUZBMD4pOyg8VTFGQTk+LDxVMUZBMT4pOy8KKyAgICg8VTFGQUE+LDxVMUZBMj4pOyg8VTFGQUI+LDxVMUZBMz4pOyg8VTFGQUM+LDxVMUZBND4pOyg8VTFGQUQ+LDxVMUZBNT4pOy8KKyAgICg8VTFGQUU+LDxVMUZBNj4pOyg8VTFGQUY+LDxVMUZBNz4pOyg8VTFGQjg+LDxVMUZCMD4pOyg8VTFGQjk+LDxVMUZCMT4pOy8KKyAgICg8VTFGQkE+LDxVMUY3MD4pOyg8VTFGQkI+LDxVMUY3MT4pOyg8VTFGQkM+LDxVMUZCMz4pOyg8VTFGQzg+LDxVMUY3Mj4pOy8KKyAgICg8VTFGQzk+LDxVMUY3Mz4pOyg8VTFGQ0E+LDxVMUY3ND4pOyg8VTFGQ0I+LDxVMUY3NT4pOyg8VTFGQ0M+LDxVMUZDMz4pOy8KKyAgICg8VTFGRDg+LDxVMUZEMD4pOyg8VTFGRDk+LDxVMUZEMT4pOyg8VTFGREE+LDxVMUY3Nj4pOyg8VTFGREI+LDxVMUY3Nz4pOy8KKyAgICg8VTFGRTg+LDxVMUZFMD4pOyg8VTFGRTk+LDxVMUZFMT4pOyg8VTFGRUE+LDxVMUY3QT4pOyg8VTFGRUI+LDxVMUY3Qj4pOy8KKyAgICg8VTFGRUM+LDxVMUZFNT4pOyg8VTFGRjg+LDxVMUY3OD4pOyg8VTFGRjk+LDxVMUY3OT4pOyg8VTFGRkE+LDxVMUY3Qz4pOy8KKyAgICg8VTFGRkI+LDxVMUY3RD4pOyg8VTFGRkM+LDxVMUZGMz4pOyg8VTIxMjY+LDxVMDNDOT4pOyg8VTIxMkE+LDxVMDA2Qj4pOy8KKyAgICg8VTIxMkI+LDxVMDBFNT4pOyg8VTIxNjA+LDxVMjE3MD4pOyg8VTIxNjE+LDxVMjE3MT4pOyg8VTIxNjI+LDxVMjE3Mj4pOy8KKyAgICg8VTIxNjM+LDxVMjE3Mz4pOyg8VTIxNjQ+LDxVMjE3ND4pOyg8VTIxNjU+LDxVMjE3NT4pOyg8VTIxNjY+LDxVMjE3Nj4pOy8KKyAgICg8VTIxNjc+LDxVMjE3Nz4pOyg8VTIxNjg+LDxVMjE3OD4pOyg8VTIxNjk+LDxVMjE3OT4pOyg8VTIxNkE+LDxVMjE3QT4pOy8KKyAgICg8VTIxNkI+LDxVMjE3Qj4pOyg8VTIxNkM+LDxVMjE3Qz4pOyg8VTIxNkQ+LDxVMjE3RD4pOyg8VTIxNkU+LDxVMjE3RT4pOy8KKyAgICg8VTIxNkY+LDxVMjE3Rj4pOyg8VTI0QjY+LDxVMjREMD4pOyg8VTI0Qjc+LDxVMjREMT4pOyg8VTI0Qjg+LDxVMjREMj4pOy8KKyAgICg8VTI0Qjk+LDxVMjREMz4pOyg8VTI0QkE+LDxVMjREND4pOyg8VTI0QkI+LDxVMjRENT4pOyg8VTI0QkM+LDxVMjRENj4pOy8KKyAgICg8VTI0QkQ+LDxVMjRENz4pOyg8VTI0QkU+LDxVMjREOD4pOyg8VTI0QkY+LDxVMjREOT4pOyg8VTI0QzA+LDxVMjREQT4pOy8KKyAgICg8VTI0QzE+LDxVMjREQj4pOyg8VTI0QzI+LDxVMjREQz4pOyg8VTI0QzM+LDxVMjRERD4pOyg8VTI0QzQ+LDxVMjRERT4pOy8KKyAgICg8VTI0QzU+LDxVMjRERj4pOyg8VTI0QzY+LDxVMjRFMD4pOyg8VTI0Qzc+LDxVMjRFMT4pOyg8VTI0Qzg+LDxVMjRFMj4pOy8KKyAgICg8VTI0Qzk+LDxVMjRFMz4pOyg8VTI0Q0E+LDxVMjRFND4pOyg8VTI0Q0I+LDxVMjRFNT4pOyg8VTI0Q0M+LDxVMjRFNj4pOy8KKyAgICg8VTI0Q0Q+LDxVMjRFNz4pOyg8VTI0Q0U+LDxVMjRFOD4pOyg8VTI0Q0Y+LDxVMjRFOT4pOyg8VUZGMjE+LDxVRkY0MT4pOy8KKyAgICg8VUZGMjI+LDxVRkY0Mj4pOyg8VUZGMjM+LDxVRkY0Mz4pOyg8VUZGMjQ+LDxVRkY0ND4pOyg8VUZGMjU+LDxVRkY0NT4pOy8KKyAgICg8VUZGMjY+LDxVRkY0Nj4pOyg8VUZGMjc+LDxVRkY0Nz4pOyg8VUZGMjg+LDxVRkY0OD4pOyg8VUZGMjk+LDxVRkY0OT4pOy8KKyAgICg8VUZGMkE+LDxVRkY0QT4pOyg8VUZGMkI+LDxVRkY0Qj4pOyg8VUZGMkM+LDxVRkY0Qz4pOyg8VUZGMkQ+LDxVRkY0RD4pOy8KKyAgICg8VUZGMkU+LDxVRkY0RT4pOyg8VUZGMkY+LDxVRkY0Rj4pOyg8VUZGMzA+LDxVRkY1MD4pOyg8VUZGMzE+LDxVRkY1MT4pOy8KKyAgICg8VUZGMzI+LDxVRkY1Mj4pOyg8VUZGMzM+LDxVRkY1Mz4pOyg8VUZGMzQ+LDxVRkY1ND4pOyg8VUZGMzU+LDxVRkY1NT4pOy8KKyAgICg8VUZGMzY+LDxVRkY1Nj4pOyg8VUZGMzc+LDxVRkY1Nz4pOyg8VUZGMzg+LDxVRkY1OD4pOyg8VUZGMzk+LDxVRkY1OT4pOy8KKyAgICg8VUZGM0E+LDxVRkY1QT4pOyg8VTAwMDEwNDAwPiw8VTAwMDEwNDI4Pik7KDxVMDAwMTA0MDE+LDxVMDAwMTA0Mjk+KTsvCisgICAoPFUwMDAxMDQwMj4sPFUwMDAxMDQyQT4pOyg8VTAwMDEwNDAzPiw8VTAwMDEwNDJCPik7LworICAgKDxVMDAwMTA0MDQ+LDxVMDAwMTA0MkM+KTsoPFUwMDAxMDQwNT4sPFUwMDAxMDQyRD4pOy8KKyAgICg8VTAwMDEwNDA2Piw8VTAwMDEwNDJFPik7KDxVMDAwMTA0MDc+LDxVMDAwMTA0MkY+KTsvCisgICAoPFUwMDAxMDQwOD4sPFUwMDAxMDQzMD4pOyg8VTAwMDEwNDA5Piw8VTAwMDEwNDMxPik7LworICAgKDxVMDAwMTA0MEE+LDxVMDAwMTA0MzI+KTsoPFUwMDAxMDQwQj4sPFUwMDAxMDQzMz4pOy8KKyAgICg8VTAwMDEwNDBDPiw8VTAwMDEwNDM0Pik7KDxVMDAwMTA0MEQ+LDxVMDAwMTA0MzU+KTsvCisgICAoPFUwMDAxMDQwRT4sPFUwMDAxMDQzNj4pOyg8VTAwMDEwNDBGPiw8VTAwMDEwNDM3Pik7LworICAgKDxVMDAwMTA0MTA+LDxVMDAwMTA0Mzg+KTsoPFUwMDAxMDQxMT4sPFUwMDAxMDQzOT4pOy8KKyAgICg8VTAwMDEwNDEyPiw8VTAwMDEwNDNBPik7KDxVMDAwMTA0MTM+LDxVMDAwMTA0M0I+KTsvCisgICAoPFUwMDAxMDQxND4sPFUwMDAxMDQzQz4pOyg8VTAwMDEwNDE1Piw8VTAwMDEwNDNEPik7LworICAgKDxVMDAwMTA0MTY+LDxVMDAwMTA0M0U+KTsoPFUwMDAxMDQxNz4sPFUwMDAxMDQzRj4pOy8KKyAgICg8VTAwMDEwNDE4Piw8VTAwMDEwNDQwPik7KDxVMDAwMTA0MTk+LDxVMDAwMTA0NDE+KTsvCisgICAoPFUwMDAxMDQxQT4sPFUwMDAxMDQ0Mj4pOyg8VTAwMDEwNDFCPiw8VTAwMDEwNDQzPik7LworICAgKDxVMDAwMTA0MUM+LDxVMDAwMTA0NDQ+KTsoPFUwMDAxMDQxRD4sPFUwMDAxMDQ0NT4pOy8KKyAgICg8VTAwMDEwNDFFPiw8VTAwMDEwNDQ2Pik7KDxVMDAwMTA0MUY+LDxVMDAwMTA0NDc+KTsvCisgICAoPFUwMDAxMDQyMD4sPFUwMDAxMDQ0OD4pOyg8VTAwMDEwNDIxPiw8VTAwMDEwNDQ5Pik7LworICAgKDxVMDAwMTA0MjI+LDxVMDAwMTA0NEE+KTsoPFUwMDAxMDQyMz4sPFUwMDAxMDQ0Qj4pOy8KKyAgICg8VTAwMDEwNDI0Piw8VTAwMDEwNDRDPik7KDxVMDAwMTA0MjU+LDxVMDAwMTA0NEQ+KQorCittYXAgInRvdGl0bGUiOyAvCisgICAoPFUwMDYxPiw8VTAwNDE+KTsoPFUwMDYyPiw8VTAwNDI+KTsoPFUwMDYzPiw8VTAwNDM+KTsoPFUwMDY0Piw8VTAwNDQ+KTsvCisgICAoPFUwMDY1Piw8VTAwNDU+KTsoPFUwMDY2Piw8VTAwNDY+KTsoPFUwMDY3Piw8VTAwNDc+KTsoPFUwMDY4Piw8VTAwNDg+KTsvCisgICAoPFUwMDY5Piw8VTAwNDk+KTsoPFUwMDZBPiw8VTAwNEE+KTsoPFUwMDZCPiw8VTAwNEI+KTsoPFUwMDZDPiw8VTAwNEM+KTsvCisgICAoPFUwMDZEPiw8VTAwNEQ+KTsoPFUwMDZFPiw8VTAwNEU+KTsoPFUwMDZGPiw8VTAwNEY+KTsoPFUwMDcwPiw8VTAwNTA+KTsvCisgICAoPFUwMDcxPiw8VTAwNTE+KTsoPFUwMDcyPiw8VTAwNTI+KTsoPFUwMDczPiw8VTAwNTM+KTsoPFUwMDc0Piw8VTAwNTQ+KTsvCisgICAoPFUwMDc1Piw8VTAwNTU+KTsoPFUwMDc2Piw8VTAwNTY+KTsoPFUwMDc3Piw8VTAwNTc+KTsoPFUwMDc4Piw8VTAwNTg+KTsvCisgICAoPFUwMDc5Piw8VTAwNTk+KTsoPFUwMDdBPiw8VTAwNUE+KTsoPFUwMEI1Piw8VTAzOUM+KTsoPFUwMEUwPiw8VTAwQzA+KTsvCisgICAoPFUwMEUxPiw8VTAwQzE+KTsoPFUwMEUyPiw8VTAwQzI+KTsoPFUwMEUzPiw8VTAwQzM+KTsoPFUwMEU0Piw8VTAwQzQ+KTsvCisgICAoPFUwMEU1Piw8VTAwQzU+KTsoPFUwMEU2Piw8VTAwQzY+KTsoPFUwMEU3Piw8VTAwQzc+KTsoPFUwMEU4Piw8VTAwQzg+KTsvCisgICAoPFUwMEU5Piw8VTAwQzk+KTsoPFUwMEVBPiw8VTAwQ0E+KTsoPFUwMEVCPiw8VTAwQ0I+KTsoPFUwMEVDPiw8VTAwQ0M+KTsvCisgICAoPFUwMEVEPiw8VTAwQ0Q+KTsoPFUwMEVFPiw8VTAwQ0U+KTsoPFUwMEVGPiw8VTAwQ0Y+KTsoPFUwMEYwPiw8VTAwRDA+KTsvCisgICAoPFUwMEYxPiw8VTAwRDE+KTsoPFUwMEYyPiw8VTAwRDI+KTsoPFUwMEYzPiw8VTAwRDM+KTsoPFUwMEY0Piw8VTAwRDQ+KTsvCisgICAoPFUwMEY1Piw8VTAwRDU+KTsoPFUwMEY2Piw8VTAwRDY+KTsoPFUwMEY4Piw8VTAwRDg+KTsoPFUwMEY5Piw8VTAwRDk+KTsvCisgICAoPFUwMEZBPiw8VTAwREE+KTsoPFUwMEZCPiw8VTAwREI+KTsoPFUwMEZDPiw8VTAwREM+KTsoPFUwMEZEPiw8VTAwREQ+KTsvCisgICAoPFUwMEZFPiw8VTAwREU+KTsoPFUwMEZGPiw8VTAxNzg+KTsoPFUwMTAxPiw8VTAxMDA+KTsoPFUwMTAzPiw8VTAxMDI+KTsvCisgICAoPFUwMTA1Piw8VTAxMDQ+KTsoPFUwMTA3Piw8VTAxMDY+KTsoPFUwMTA5Piw8VTAxMDg+KTsoPFUwMTBCPiw8VTAxMEE+KTsvCisgICAoPFUwMTBEPiw8VTAxMEM+KTsoPFUwMTBGPiw8VTAxMEU+KTsoPFUwMTExPiw8VTAxMTA+KTsoPFUwMTEzPiw8VTAxMTI+KTsvCisgICAoPFUwMTE1Piw8VTAxMTQ+KTsoPFUwMTE3Piw8VTAxMTY+KTsoPFUwMTE5Piw8VTAxMTg+KTsoPFUwMTFCPiw8VTAxMUE+KTsvCisgICAoPFUwMTFEPiw8VTAxMUM+KTsoPFUwMTFGPiw8VTAxMUU+KTsoPFUwMTIxPiw8VTAxMjA+KTsoPFUwMTIzPiw8VTAxMjI+KTsvCisgICAoPFUwMTI1Piw8VTAxMjQ+KTsoPFUwMTI3Piw8VTAxMjY+KTsoPFUwMTI5Piw8VTAxMjg+KTsoPFUwMTJCPiw8VTAxMkE+KTsvCisgICAoPFUwMTJEPiw8VTAxMkM+KTsoPFUwMTJGPiw8VTAxMkU+KTsoPFUwMTMxPiw8VTAwNDk+KTsoPFUwMTMzPiw8VTAxMzI+KTsvCisgICAoPFUwMTM1Piw8VTAxMzQ+KTsoPFUwMTM3Piw8VTAxMzY+KTsoPFUwMTNBPiw8VTAxMzk+KTsoPFUwMTNDPiw8VTAxM0I+KTsvCisgICAoPFUwMTNFPiw8VTAxM0Q+KTsoPFUwMTQwPiw8VTAxM0Y+KTsoPFUwMTQyPiw8VTAxNDE+KTsoPFUwMTQ0Piw8VTAxNDM+KTsvCisgICAoPFUwMTQ2Piw8VTAxNDU+KTsoPFUwMTQ4Piw8VTAxNDc+KTsoPFUwMTRCPiw8VTAxNEE+KTsoPFUwMTREPiw8VTAxNEM+KTsvCisgICAoPFUwMTRGPiw8VTAxNEU+KTsoPFUwMTUxPiw8VTAxNTA+KTsoPFUwMTUzPiw8VTAxNTI+KTsoPFUwMTU1Piw8VTAxNTQ+KTsvCisgICAoPFUwMTU3Piw8VTAxNTY+KTsoPFUwMTU5Piw8VTAxNTg+KTsoPFUwMTVCPiw8VTAxNUE+KTsoPFUwMTVEPiw8VTAxNUM+KTsvCisgICAoPFUwMTVGPiw8VTAxNUU+KTsoPFUwMTYxPiw8VTAxNjA+KTsoPFUwMTYzPiw8VTAxNjI+KTsoPFUwMTY1Piw8VTAxNjQ+KTsvCisgICAoPFUwMTY3Piw8VTAxNjY+KTsoPFUwMTY5Piw8VTAxNjg+KTsoPFUwMTZCPiw8VTAxNkE+KTsoPFUwMTZEPiw8VTAxNkM+KTsvCisgICAoPFUwMTZGPiw8VTAxNkU+KTsoPFUwMTcxPiw8VTAxNzA+KTsoPFUwMTczPiw8VTAxNzI+KTsoPFUwMTc1Piw8VTAxNzQ+KTsvCisgICAoPFUwMTc3Piw8VTAxNzY+KTsoPFUwMTdBPiw8VTAxNzk+KTsoPFUwMTdDPiw8VTAxN0I+KTsoPFUwMTdFPiw8VTAxN0Q+KTsvCisgICAoPFUwMTdGPiw8VTAwNTM+KTsoPFUwMTgzPiw8VTAxODI+KTsoPFUwMTg1Piw8VTAxODQ+KTsoPFUwMTg4Piw8VTAxODc+KTsvCisgICAoPFUwMThDPiw8VTAxOEI+KTsoPFUwMTkyPiw8VTAxOTE+KTsoPFUwMTk1Piw8VTAxRjY+KTsoPFUwMTk5Piw8VTAxOTg+KTsvCisgICAoPFUwMTlFPiw8VTAyMjA+KTsvCisgICAoPFUwMUExPiw8VTAxQTA+KTsoPFUwMUEzPiw8VTAxQTI+KTsoPFUwMUE1Piw8VTAxQTQ+KTsoPFUwMUE4Piw8VTAxQTc+KTsvCisgICAoPFUwMUFEPiw8VTAxQUM+KTsoPFUwMUIwPiw8VTAxQUY+KTsoPFUwMUI0Piw8VTAxQjM+KTsoPFUwMUI2Piw8VTAxQjU+KTsvCisgICAoPFUwMUI5Piw8VTAxQjg+KTsoPFUwMUJEPiw8VTAxQkM+KTsoPFUwMUJGPiw8VTAxRjc+KTsoPFUwMUM0Piw8VTAxQzU+KTsvCisgICAoPFUwMUM2Piw8VTAxQzU+KTsoPFUwMUM3Piw8VTAxQzg+KTsoPFUwMUM5Piw8VTAxQzg+KTsoPFUwMUNBPiw8VTAxQ0I+KTsvCisgICAoPFUwMUNDPiw8VTAxQ0I+KTsoPFUwMUNFPiw8VTAxQ0Q+KTsoPFUwMUQwPiw8VTAxQ0Y+KTsoPFUwMUQyPiw8VTAxRDE+KTsvCisgICAoPFUwMUQ0Piw8VTAxRDM+KTsoPFUwMUQ2Piw8VTAxRDU+KTsoPFUwMUQ4Piw8VTAxRDc+KTsoPFUwMURBPiw8VTAxRDk+KTsvCisgICAoPFUwMURDPiw8VTAxREI+KTsoPFUwMUREPiw8VTAxOEU+KTsoPFUwMURGPiw8VTAxREU+KTsoPFUwMUUxPiw8VTAxRTA+KTsvCisgICAoPFUwMUUzPiw8VTAxRTI+KTsoPFUwMUU1Piw8VTAxRTQ+KTsoPFUwMUU3Piw8VTAxRTY+KTsoPFUwMUU5Piw8VTAxRTg+KTsvCisgICAoPFUwMUVCPiw8VTAxRUE+KTsoPFUwMUVEPiw8VTAxRUM+KTsoPFUwMUVGPiw8VTAxRUU+KTsoPFUwMUYxPiw8VTAxRjI+KTsvCisgICAoPFUwMUYzPiw8VTAxRjI+KTsoPFUwMUY1Piw8VTAxRjQ+KTsoPFUwMUY5Piw8VTAxRjg+KTsoPFUwMUZCPiw8VTAxRkE+KTsvCisgICAoPFUwMUZEPiw8VTAxRkM+KTsoPFUwMUZGPiw8VTAxRkU+KTsoPFUwMjAxPiw8VTAyMDA+KTsoPFUwMjAzPiw8VTAyMDI+KTsvCisgICAoPFUwMjA1Piw8VTAyMDQ+KTsoPFUwMjA3Piw8VTAyMDY+KTsoPFUwMjA5Piw8VTAyMDg+KTsoPFUwMjBCPiw8VTAyMEE+KTsvCisgICAoPFUwMjBEPiw8VTAyMEM+KTsoPFUwMjBGPiw8VTAyMEU+KTsoPFUwMjExPiw8VTAyMTA+KTsoPFUwMjEzPiw8VTAyMTI+KTsvCisgICAoPFUwMjE1Piw8VTAyMTQ+KTsoPFUwMjE3Piw8VTAyMTY+KTsoPFUwMjE5Piw8VTAyMTg+KTsoPFUwMjFCPiw8VTAyMUE+KTsvCisgICAoPFUwMjFEPiw8VTAyMUM+KTsoPFUwMjFGPiw8VTAyMUU+KTsoPFUwMjIzPiw8VTAyMjI+KTsoPFUwMjI1Piw8VTAyMjQ+KTsvCisgICAoPFUwMjI3Piw8VTAyMjY+KTsoPFUwMjI5Piw8VTAyMjg+KTsoPFUwMjJCPiw8VTAyMkE+KTsoPFUwMjJEPiw8VTAyMkM+KTsvCisgICAoPFUwMjJGPiw8VTAyMkU+KTsoPFUwMjMxPiw8VTAyMzA+KTsoPFUwMjMzPiw8VTAyMzI+KTsoPFUwMjUzPiw8VTAxODE+KTsvCisgICAoPFUwMjU0Piw8VTAxODY+KTsoPFUwMjU2Piw8VTAxODk+KTsoPFUwMjU3Piw8VTAxOEE+KTsoPFUwMjU5Piw8VTAxOEY+KTsvCisgICAoPFUwMjVCPiw8VTAxOTA+KTsoPFUwMjYwPiw8VTAxOTM+KTsoPFUwMjYzPiw8VTAxOTQ+KTsoPFUwMjY4Piw8VTAxOTc+KTsvCisgICAoPFUwMjY5Piw8VTAxOTY+KTsoPFUwMjZGPiw8VTAxOUM+KTsoPFUwMjcyPiw8VTAxOUQ+KTsoPFUwMjc1Piw8VTAxOUY+KTsvCisgICAoPFUwMjgwPiw8VTAxQTY+KTsoPFUwMjgzPiw8VTAxQTk+KTsoPFUwMjg4Piw8VTAxQUU+KTsoPFUwMjhBPiw8VTAxQjE+KTsvCisgICAoPFUwMjhCPiw8VTAxQjI+KTsoPFUwMjkyPiw8VTAxQjc+KTsoPFUwMzQ1Piw8VTAzOTk+KTsoPFUwM0FDPiw8VTAzODY+KTsvCisgICAoPFUwM0FEPiw8VTAzODg+KTsoPFUwM0FFPiw8VTAzODk+KTsoPFUwM0FGPiw8VTAzOEE+KTsoPFUwM0IxPiw8VTAzOTE+KTsvCisgICAoPFUwM0IyPiw8VTAzOTI+KTsoPFUwM0IzPiw8VTAzOTM+KTsoPFUwM0I0Piw8VTAzOTQ+KTsoPFUwM0I1Piw8VTAzOTU+KTsvCisgICAoPFUwM0I2Piw8VTAzOTY+KTsoPFUwM0I3Piw8VTAzOTc+KTsoPFUwM0I4Piw8VTAzOTg+KTsoPFUwM0I5Piw8VTAzOTk+KTsvCisgICAoPFUwM0JBPiw8VTAzOUE+KTsoPFUwM0JCPiw8VTAzOUI+KTsoPFUwM0JDPiw8VTAzOUM+KTsoPFUwM0JEPiw8VTAzOUQ+KTsvCisgICAoPFUwM0JFPiw8VTAzOUU+KTsoPFUwM0JGPiw8VTAzOUY+KTsoPFUwM0MwPiw8VTAzQTA+KTsoPFUwM0MxPiw8VTAzQTE+KTsvCisgICAoPFUwM0MyPiw8VTAzQTM+KTsoPFUwM0MzPiw8VTAzQTM+KTsoPFUwM0M0Piw8VTAzQTQ+KTsoPFUwM0M1Piw8VTAzQTU+KTsvCisgICAoPFUwM0M2Piw8VTAzQTY+KTsoPFUwM0M3Piw8VTAzQTc+KTsoPFUwM0M4Piw8VTAzQTg+KTsoPFUwM0M5Piw8VTAzQTk+KTsvCisgICAoPFUwM0NBPiw8VTAzQUE+KTsoPFUwM0NCPiw8VTAzQUI+KTsoPFUwM0NDPiw8VTAzOEM+KTsoPFUwM0NEPiw8VTAzOEU+KTsvCisgICAoPFUwM0NFPiw8VTAzOEY+KTsoPFUwM0QwPiw8VTAzOTI+KTsoPFUwM0QxPiw8VTAzOTg+KTsoPFUwM0Q1Piw8VTAzQTY+KTsvCisgICAoPFUwM0Q2Piw8VTAzQTA+KTsoPFUwM0Q5Piw8VTAzRDg+KTsvCisgICAoPFUwM0RCPiw8VTAzREE+KTsoPFUwM0REPiw8VTAzREM+KTsoPFUwM0RGPiw8VTAzREU+KTsvCisgICAoPFUwM0UxPiw8VTAzRTA+KTsoPFUwM0UzPiw8VTAzRTI+KTsoPFUwM0U1Piw8VTAzRTQ+KTsoPFUwM0U3Piw8VTAzRTY+KTsvCisgICAoPFUwM0U5Piw8VTAzRTg+KTsoPFUwM0VCPiw8VTAzRUE+KTsoPFUwM0VEPiw8VTAzRUM+KTsoPFUwM0VGPiw8VTAzRUU+KTsvCisgICAoPFUwM0YwPiw8VTAzOUE+KTsoPFUwM0YxPiw8VTAzQTE+KTsoPFUwM0YyPiw8VTAzQTM+KTsoPFUwM0Y1Piw8VTAzOTU+KTsvCisgICAoPFUwNDMwPiw8VTA0MTA+KTsoPFUwNDMxPiw8VTA0MTE+KTsoPFUwNDMyPiw8VTA0MTI+KTsoPFUwNDMzPiw8VTA0MTM+KTsvCisgICAoPFUwNDM0Piw8VTA0MTQ+KTsoPFUwNDM1Piw8VTA0MTU+KTsoPFUwNDM2Piw8VTA0MTY+KTsoPFUwNDM3Piw8VTA0MTc+KTsvCisgICAoPFUwNDM4Piw8VTA0MTg+KTsoPFUwNDM5Piw8VTA0MTk+KTsoPFUwNDNBPiw8VTA0MUE+KTsoPFUwNDNCPiw8VTA0MUI+KTsvCisgICAoPFUwNDNDPiw8VTA0MUM+KTsoPFUwNDNEPiw8VTA0MUQ+KTsoPFUwNDNFPiw8VTA0MUU+KTsoPFUwNDNGPiw8VTA0MUY+KTsvCisgICAoPFUwNDQwPiw8VTA0MjA+KTsoPFUwNDQxPiw8VTA0MjE+KTsoPFUwNDQyPiw8VTA0MjI+KTsoPFUwNDQzPiw8VTA0MjM+KTsvCisgICAoPFUwNDQ0Piw8VTA0MjQ+KTsoPFUwNDQ1Piw8VTA0MjU+KTsoPFUwNDQ2Piw8VTA0MjY+KTsoPFUwNDQ3Piw8VTA0Mjc+KTsvCisgICAoPFUwNDQ4Piw8VTA0Mjg+KTsoPFUwNDQ5Piw8VTA0Mjk+KTsoPFUwNDRBPiw8VTA0MkE+KTsoPFUwNDRCPiw8VTA0MkI+KTsvCisgICAoPFUwNDRDPiw8VTA0MkM+KTsoPFUwNDREPiw8VTA0MkQ+KTsoPFUwNDRFPiw8VTA0MkU+KTsoPFUwNDRGPiw8VTA0MkY+KTsvCisgICAoPFUwNDUwPiw8VTA0MDA+KTsoPFUwNDUxPiw8VTA0MDE+KTsoPFUwNDUyPiw8VTA0MDI+KTsoPFUwNDUzPiw8VTA0MDM+KTsvCisgICAoPFUwNDU0Piw8VTA0MDQ+KTsoPFUwNDU1Piw8VTA0MDU+KTsoPFUwNDU2Piw8VTA0MDY+KTsoPFUwNDU3Piw8VTA0MDc+KTsvCisgICAoPFUwNDU4Piw8VTA0MDg+KTsoPFUwNDU5Piw8VTA0MDk+KTsoPFUwNDVBPiw8VTA0MEE+KTsoPFUwNDVCPiw8VTA0MEI+KTsvCisgICAoPFUwNDVDPiw8VTA0MEM+KTsoPFUwNDVEPiw8VTA0MEQ+KTsoPFUwNDVFPiw8VTA0MEU+KTsoPFUwNDVGPiw8VTA0MEY+KTsvCisgICAoPFUwNDYxPiw8VTA0NjA+KTsoPFUwNDYzPiw8VTA0NjI+KTsoPFUwNDY1Piw8VTA0NjQ+KTsoPFUwNDY3Piw8VTA0NjY+KTsvCisgICAoPFUwNDY5Piw8VTA0Njg+KTsoPFUwNDZCPiw8VTA0NkE+KTsoPFUwNDZEPiw8VTA0NkM+KTsoPFUwNDZGPiw8VTA0NkU+KTsvCisgICAoPFUwNDcxPiw8VTA0NzA+KTsoPFUwNDczPiw8VTA0NzI+KTsoPFUwNDc1Piw8VTA0NzQ+KTsoPFUwNDc3Piw8VTA0NzY+KTsvCisgICAoPFUwNDc5Piw8VTA0Nzg+KTsoPFUwNDdCPiw8VTA0N0E+KTsoPFUwNDdEPiw8VTA0N0M+KTsoPFUwNDdGPiw8VTA0N0U+KTsvCisgICAoPFUwNDgxPiw8VTA0ODA+KTsoPFUwNDhCPiw8VTA0OEE+KTsvCisgICAoPFUwNDhEPiw8VTA0OEM+KTsoPFUwNDhGPiw8VTA0OEU+KTsoPFUwNDkxPiw8VTA0OTA+KTsvCisgICAoPFUwNDkzPiw8VTA0OTI+KTsoPFUwNDk1Piw8VTA0OTQ+KTsoPFUwNDk3Piw8VTA0OTY+KTsoPFUwNDk5Piw8VTA0OTg+KTsvCisgICAoPFUwNDlCPiw8VTA0OUE+KTsoPFUwNDlEPiw8VTA0OUM+KTsoPFUwNDlGPiw8VTA0OUU+KTsoPFUwNEExPiw8VTA0QTA+KTsvCisgICAoPFUwNEEzPiw8VTA0QTI+KTsoPFUwNEE1Piw8VTA0QTQ+KTsoPFUwNEE3Piw8VTA0QTY+KTsoPFUwNEE5Piw8VTA0QTg+KTsvCisgICAoPFUwNEFCPiw8VTA0QUE+KTsoPFUwNEFEPiw8VTA0QUM+KTsoPFUwNEFGPiw8VTA0QUU+KTsoPFUwNEIxPiw8VTA0QjA+KTsvCisgICAoPFUwNEIzPiw8VTA0QjI+KTsoPFUwNEI1Piw8VTA0QjQ+KTsoPFUwNEI3Piw8VTA0QjY+KTsoPFUwNEI5Piw8VTA0Qjg+KTsvCisgICAoPFUwNEJCPiw8VTA0QkE+KTsoPFUwNEJEPiw8VTA0QkM+KTsoPFUwNEJGPiw8VTA0QkU+KTsoPFUwNEMyPiw8VTA0QzE+KTsvCisgICAoPFUwNEM0Piw8VTA0QzM+KTsoPFUwNEM2Piw8VTA0QzU+KTsoPFUwNEM4Piw8VTA0Qzc+KTsoPFUwNENBPiw8VTA0Qzk+KTsvCisgICAoPFUwNENDPiw8VTA0Q0I+KTsoPFUwNENFPiw8VTA0Q0Q+KTsoPFUwNEQxPiw8VTA0RDA+KTsvCisgICAoPFUwNEQzPiw8VTA0RDI+KTsoPFUwNEQ1Piw8VTA0RDQ+KTsoPFUwNEQ3Piw8VTA0RDY+KTsoPFUwNEQ5Piw8VTA0RDg+KTsvCisgICAoPFUwNERCPiw8VTA0REE+KTsoPFUwNEREPiw8VTA0REM+KTsoPFUwNERGPiw8VTA0REU+KTsoPFUwNEUxPiw8VTA0RTA+KTsvCisgICAoPFUwNEUzPiw8VTA0RTI+KTsoPFUwNEU1Piw8VTA0RTQ+KTsoPFUwNEU3Piw8VTA0RTY+KTsoPFUwNEU5Piw8VTA0RTg+KTsvCisgICAoPFUwNEVCPiw8VTA0RUE+KTsoPFUwNEVEPiw8VTA0RUM+KTsoPFUwNEVGPiw8VTA0RUU+KTsoPFUwNEYxPiw8VTA0RjA+KTsvCisgICAoPFUwNEYzPiw8VTA0RjI+KTsoPFUwNEY1Piw8VTA0RjQ+KTsoPFUwNEY5Piw8VTA0Rjg+KTsoPFUwNTAxPiw8VTA1MDA+KTsvCisgICAoPFUwNTAzPiw8VTA1MDI+KTsoPFUwNTA1Piw8VTA1MDQ+KTsoPFUwNTA3Piw8VTA1MDY+KTsoPFUwNTA5Piw8VTA1MDg+KTsvCisgICAoPFUwNTBCPiw8VTA1MEE+KTsoPFUwNTBEPiw8VTA1MEM+KTsoPFUwNTBGPiw8VTA1MEU+KTsoPFUwNTYxPiw8VTA1MzE+KTsvCisgICAoPFUwNTYyPiw8VTA1MzI+KTsoPFUwNTYzPiw8VTA1MzM+KTsoPFUwNTY0Piw8VTA1MzQ+KTsoPFUwNTY1Piw8VTA1MzU+KTsvCisgICAoPFUwNTY2Piw8VTA1MzY+KTsoPFUwNTY3Piw8VTA1Mzc+KTsoPFUwNTY4Piw8VTA1Mzg+KTsoPFUwNTY5Piw8VTA1Mzk+KTsvCisgICAoPFUwNTZBPiw8VTA1M0E+KTsoPFUwNTZCPiw8VTA1M0I+KTsoPFUwNTZDPiw8VTA1M0M+KTsoPFUwNTZEPiw8VTA1M0Q+KTsvCisgICAoPFUwNTZFPiw8VTA1M0U+KTsoPFUwNTZGPiw8VTA1M0Y+KTsoPFUwNTcwPiw8VTA1NDA+KTsoPFUwNTcxPiw8VTA1NDE+KTsvCisgICAoPFUwNTcyPiw8VTA1NDI+KTsoPFUwNTczPiw8VTA1NDM+KTsoPFUwNTc0Piw8VTA1NDQ+KTsoPFUwNTc1Piw8VTA1NDU+KTsvCisgICAoPFUwNTc2Piw8VTA1NDY+KTsoPFUwNTc3Piw8VTA1NDc+KTsoPFUwNTc4Piw8VTA1NDg+KTsoPFUwNTc5Piw8VTA1NDk+KTsvCisgICAoPFUwNTdBPiw8VTA1NEE+KTsoPFUwNTdCPiw8VTA1NEI+KTsoPFUwNTdDPiw8VTA1NEM+KTsoPFUwNTdEPiw8VTA1NEQ+KTsvCisgICAoPFUwNTdFPiw8VTA1NEU+KTsoPFUwNTdGPiw8VTA1NEY+KTsoPFUwNTgwPiw8VTA1NTA+KTsoPFUwNTgxPiw8VTA1NTE+KTsvCisgICAoPFUwNTgyPiw8VTA1NTI+KTsoPFUwNTgzPiw8VTA1NTM+KTsoPFUwNTg0Piw8VTA1NTQ+KTsoPFUwNTg1Piw8VTA1NTU+KTsvCisgICAoPFUwNTg2Piw8VTA1NTY+KTsoPFUxRTAxPiw8VTFFMDA+KTsoPFUxRTAzPiw8VTFFMDI+KTsoPFUxRTA1Piw8VTFFMDQ+KTsvCisgICAoPFUxRTA3Piw8VTFFMDY+KTsoPFUxRTA5Piw8VTFFMDg+KTsoPFUxRTBCPiw8VTFFMEE+KTsoPFUxRTBEPiw8VTFFMEM+KTsvCisgICAoPFUxRTBGPiw8VTFFMEU+KTsoPFUxRTExPiw8VTFFMTA+KTsoPFUxRTEzPiw8VTFFMTI+KTsoPFUxRTE1Piw8VTFFMTQ+KTsvCisgICAoPFUxRTE3Piw8VTFFMTY+KTsoPFUxRTE5Piw8VTFFMTg+KTsoPFUxRTFCPiw8VTFFMUE+KTsoPFUxRTFEPiw8VTFFMUM+KTsvCisgICAoPFUxRTFGPiw8VTFFMUU+KTsoPFUxRTIxPiw8VTFFMjA+KTsoPFUxRTIzPiw8VTFFMjI+KTsoPFUxRTI1Piw8VTFFMjQ+KTsvCisgICAoPFUxRTI3Piw8VTFFMjY+KTsoPFUxRTI5Piw8VTFFMjg+KTsoPFUxRTJCPiw8VTFFMkE+KTsoPFUxRTJEPiw8VTFFMkM+KTsvCisgICAoPFUxRTJGPiw8VTFFMkU+KTsoPFUxRTMxPiw8VTFFMzA+KTsoPFUxRTMzPiw8VTFFMzI+KTsoPFUxRTM1Piw8VTFFMzQ+KTsvCisgICAoPFUxRTM3Piw8VTFFMzY+KTsoPFUxRTM5Piw8VTFFMzg+KTsoPFUxRTNCPiw8VTFFM0E+KTsoPFUxRTNEPiw8VTFFM0M+KTsvCisgICAoPFUxRTNGPiw8VTFFM0U+KTsoPFUxRTQxPiw8VTFFNDA+KTsoPFUxRTQzPiw8VTFFNDI+KTsoPFUxRTQ1Piw8VTFFNDQ+KTsvCisgICAoPFUxRTQ3Piw8VTFFNDY+KTsoPFUxRTQ5Piw8VTFFNDg+KTsoPFUxRTRCPiw8VTFFNEE+KTsoPFUxRTREPiw8VTFFNEM+KTsvCisgICAoPFUxRTRGPiw8VTFFNEU+KTsoPFUxRTUxPiw8VTFFNTA+KTsoPFUxRTUzPiw8VTFFNTI+KTsoPFUxRTU1Piw8VTFFNTQ+KTsvCisgICAoPFUxRTU3Piw8VTFFNTY+KTsoPFUxRTU5Piw8VTFFNTg+KTsoPFUxRTVCPiw8VTFFNUE+KTsoPFUxRTVEPiw8VTFFNUM+KTsvCisgICAoPFUxRTVGPiw8VTFFNUU+KTsoPFUxRTYxPiw8VTFFNjA+KTsoPFUxRTYzPiw8VTFFNjI+KTsoPFUxRTY1Piw8VTFFNjQ+KTsvCisgICAoPFUxRTY3Piw8VTFFNjY+KTsoPFUxRTY5Piw8VTFFNjg+KTsoPFUxRTZCPiw8VTFFNkE+KTsoPFUxRTZEPiw8VTFFNkM+KTsvCisgICAoPFUxRTZGPiw8VTFFNkU+KTsoPFUxRTcxPiw8VTFFNzA+KTsoPFUxRTczPiw8VTFFNzI+KTsoPFUxRTc1Piw8VTFFNzQ+KTsvCisgICAoPFUxRTc3Piw8VTFFNzY+KTsoPFUxRTc5Piw8VTFFNzg+KTsoPFUxRTdCPiw8VTFFN0E+KTsoPFUxRTdEPiw8VTFFN0M+KTsvCisgICAoPFUxRTdGPiw8VTFFN0U+KTsoPFUxRTgxPiw8VTFFODA+KTsoPFUxRTgzPiw8VTFFODI+KTsoPFUxRTg1Piw8VTFFODQ+KTsvCisgICAoPFUxRTg3Piw8VTFFODY+KTsoPFUxRTg5Piw8VTFFODg+KTsoPFUxRThCPiw8VTFFOEE+KTsoPFUxRThEPiw8VTFFOEM+KTsvCisgICAoPFUxRThGPiw8VTFFOEU+KTsoPFUxRTkxPiw8VTFFOTA+KTsoPFUxRTkzPiw8VTFFOTI+KTsoPFUxRTk1Piw8VTFFOTQ+KTsvCisgICAoPFUxRTlCPiw8VTFFNjA+KTsoPFUxRUExPiw8VTFFQTA+KTsoPFUxRUEzPiw8VTFFQTI+KTsoPFUxRUE1Piw8VTFFQTQ+KTsvCisgICAoPFUxRUE3Piw8VTFFQTY+KTsoPFUxRUE5Piw8VTFFQTg+KTsoPFUxRUFCPiw8VTFFQUE+KTsoPFUxRUFEPiw8VTFFQUM+KTsvCisgICAoPFUxRUFGPiw8VTFFQUU+KTsoPFUxRUIxPiw8VTFFQjA+KTsoPFUxRUIzPiw8VTFFQjI+KTsoPFUxRUI1Piw8VTFFQjQ+KTsvCisgICAoPFUxRUI3Piw8VTFFQjY+KTsoPFUxRUI5Piw8VTFFQjg+KTsoPFUxRUJCPiw8VTFFQkE+KTsoPFUxRUJEPiw8VTFFQkM+KTsvCisgICAoPFUxRUJGPiw8VTFFQkU+KTsoPFUxRUMxPiw8VTFFQzA+KTsoPFUxRUMzPiw8VTFFQzI+KTsoPFUxRUM1Piw8VTFFQzQ+KTsvCisgICAoPFUxRUM3Piw8VTFFQzY+KTsoPFUxRUM5Piw8VTFFQzg+KTsoPFUxRUNCPiw8VTFFQ0E+KTsoPFUxRUNEPiw8VTFFQ0M+KTsvCisgICAoPFUxRUNGPiw8VTFFQ0U+KTsoPFUxRUQxPiw8VTFFRDA+KTsoPFUxRUQzPiw8VTFFRDI+KTsoPFUxRUQ1Piw8VTFFRDQ+KTsvCisgICAoPFUxRUQ3Piw8VTFFRDY+KTsoPFUxRUQ5Piw8VTFFRDg+KTsoPFUxRURCPiw8VTFFREE+KTsoPFUxRUREPiw8VTFFREM+KTsvCisgICAoPFUxRURGPiw8VTFFREU+KTsoPFUxRUUxPiw8VTFFRTA+KTsoPFUxRUUzPiw8VTFFRTI+KTsoPFUxRUU1Piw8VTFFRTQ+KTsvCisgICAoPFUxRUU3Piw8VTFFRTY+KTsoPFUxRUU5Piw8VTFFRTg+KTsoPFUxRUVCPiw8VTFFRUE+KTsoPFUxRUVEPiw8VTFFRUM+KTsvCisgICAoPFUxRUVGPiw8VTFFRUU+KTsoPFUxRUYxPiw8VTFFRjA+KTsoPFUxRUYzPiw8VTFFRjI+KTsoPFUxRUY1Piw8VTFFRjQ+KTsvCisgICAoPFUxRUY3Piw8VTFFRjY+KTsoPFUxRUY5Piw8VTFFRjg+KTsoPFUxRjAwPiw8VTFGMDg+KTsoPFUxRjAxPiw8VTFGMDk+KTsvCisgICAoPFUxRjAyPiw8VTFGMEE+KTsoPFUxRjAzPiw8VTFGMEI+KTsoPFUxRjA0Piw8VTFGMEM+KTsoPFUxRjA1Piw8VTFGMEQ+KTsvCisgICAoPFUxRjA2Piw8VTFGMEU+KTsoPFUxRjA3Piw8VTFGMEY+KTsoPFUxRjEwPiw8VTFGMTg+KTsoPFUxRjExPiw8VTFGMTk+KTsvCisgICAoPFUxRjEyPiw8VTFGMUE+KTsoPFUxRjEzPiw8VTFGMUI+KTsoPFUxRjE0Piw8VTFGMUM+KTsoPFUxRjE1Piw8VTFGMUQ+KTsvCisgICAoPFUxRjIwPiw8VTFGMjg+KTsoPFUxRjIxPiw8VTFGMjk+KTsoPFUxRjIyPiw8VTFGMkE+KTsoPFUxRjIzPiw8VTFGMkI+KTsvCisgICAoPFUxRjI0Piw8VTFGMkM+KTsoPFUxRjI1Piw8VTFGMkQ+KTsoPFUxRjI2Piw8VTFGMkU+KTsoPFUxRjI3Piw8VTFGMkY+KTsvCisgICAoPFUxRjMwPiw8VTFGMzg+KTsoPFUxRjMxPiw8VTFGMzk+KTsoPFUxRjMyPiw8VTFGM0E+KTsoPFUxRjMzPiw8VTFGM0I+KTsvCisgICAoPFUxRjM0Piw8VTFGM0M+KTsoPFUxRjM1Piw8VTFGM0Q+KTsoPFUxRjM2Piw8VTFGM0U+KTsoPFUxRjM3Piw8VTFGM0Y+KTsvCisgICAoPFUxRjQwPiw8VTFGNDg+KTsoPFUxRjQxPiw8VTFGNDk+KTsoPFUxRjQyPiw8VTFGNEE+KTsoPFUxRjQzPiw8VTFGNEI+KTsvCisgICAoPFUxRjQ0Piw8VTFGNEM+KTsoPFUxRjQ1Piw8VTFGNEQ+KTsoPFUxRjUxPiw8VTFGNTk+KTsoPFUxRjUzPiw8VTFGNUI+KTsvCisgICAoPFUxRjU1Piw8VTFGNUQ+KTsoPFUxRjU3Piw8VTFGNUY+KTsoPFUxRjYwPiw8VTFGNjg+KTsoPFUxRjYxPiw8VTFGNjk+KTsvCisgICAoPFUxRjYyPiw8VTFGNkE+KTsoPFUxRjYzPiw8VTFGNkI+KTsoPFUxRjY0Piw8VTFGNkM+KTsoPFUxRjY1Piw8VTFGNkQ+KTsvCisgICAoPFUxRjY2Piw8VTFGNkU+KTsoPFUxRjY3Piw8VTFGNkY+KTsoPFUxRjcwPiw8VTFGQkE+KTsoPFUxRjcxPiw8VTFGQkI+KTsvCisgICAoPFUxRjcyPiw8VTFGQzg+KTsoPFUxRjczPiw8VTFGQzk+KTsoPFUxRjc0Piw8VTFGQ0E+KTsoPFUxRjc1Piw8VTFGQ0I+KTsvCisgICAoPFUxRjc2Piw8VTFGREE+KTsoPFUxRjc3Piw8VTFGREI+KTsoPFUxRjc4Piw8VTFGRjg+KTsoPFUxRjc5Piw8VTFGRjk+KTsvCisgICAoPFUxRjdBPiw8VTFGRUE+KTsoPFUxRjdCPiw8VTFGRUI+KTsoPFUxRjdDPiw8VTFGRkE+KTsoPFUxRjdEPiw8VTFGRkI+KTsvCisgICAoPFUxRjgwPiw8VTFGODg+KTsoPFUxRjgxPiw8VTFGODk+KTsoPFUxRjgyPiw8VTFGOEE+KTsoPFUxRjgzPiw8VTFGOEI+KTsvCisgICAoPFUxRjg0Piw8VTFGOEM+KTsoPFUxRjg1Piw8VTFGOEQ+KTsoPFUxRjg2Piw8VTFGOEU+KTsoPFUxRjg3Piw8VTFGOEY+KTsvCisgICAoPFUxRjkwPiw8VTFGOTg+KTsoPFUxRjkxPiw8VTFGOTk+KTsoPFUxRjkyPiw8VTFGOUE+KTsoPFUxRjkzPiw8VTFGOUI+KTsvCisgICAoPFUxRjk0Piw8VTFGOUM+KTsoPFUxRjk1Piw8VTFGOUQ+KTsoPFUxRjk2Piw8VTFGOUU+KTsoPFUxRjk3Piw8VTFGOUY+KTsvCisgICAoPFUxRkEwPiw8VTFGQTg+KTsoPFUxRkExPiw8VTFGQTk+KTsoPFUxRkEyPiw8VTFGQUE+KTsoPFUxRkEzPiw8VTFGQUI+KTsvCisgICAoPFUxRkE0Piw8VTFGQUM+KTsoPFUxRkE1Piw8VTFGQUQ+KTsoPFUxRkE2Piw8VTFGQUU+KTsoPFUxRkE3Piw8VTFGQUY+KTsvCisgICAoPFUxRkIwPiw8VTFGQjg+KTsoPFUxRkIxPiw8VTFGQjk+KTsoPFUxRkIzPiw8VTFGQkM+KTsoPFUxRkJFPiw8VTAzOTk+KTsvCisgICAoPFUxRkMzPiw8VTFGQ0M+KTsoPFUxRkQwPiw8VTFGRDg+KTsoPFUxRkQxPiw8VTFGRDk+KTsoPFUxRkUwPiw8VTFGRTg+KTsvCisgICAoPFUxRkUxPiw8VTFGRTk+KTsoPFUxRkU1Piw8VTFGRUM+KTsoPFUxRkYzPiw8VTFGRkM+KTsoPFUyMTcwPiw8VTIxNjA+KTsvCisgICAoPFUyMTcxPiw8VTIxNjE+KTsoPFUyMTcyPiw8VTIxNjI+KTsoPFUyMTczPiw8VTIxNjM+KTsoPFUyMTc0Piw8VTIxNjQ+KTsvCisgICAoPFUyMTc1Piw8VTIxNjU+KTsoPFUyMTc2Piw8VTIxNjY+KTsoPFUyMTc3Piw8VTIxNjc+KTsoPFUyMTc4Piw8VTIxNjg+KTsvCisgICAoPFUyMTc5Piw8VTIxNjk+KTsoPFUyMTdBPiw8VTIxNkE+KTsoPFUyMTdCPiw8VTIxNkI+KTsoPFUyMTdDPiw8VTIxNkM+KTsvCisgICAoPFUyMTdEPiw8VTIxNkQ+KTsoPFUyMTdFPiw8VTIxNkU+KTsoPFUyMTdGPiw8VTIxNkY+KTsoPFUyNEQwPiw8VTI0QjY+KTsvCisgICAoPFUyNEQxPiw8VTI0Qjc+KTsoPFUyNEQyPiw8VTI0Qjg+KTsoPFUyNEQzPiw8VTI0Qjk+KTsoPFUyNEQ0Piw8VTI0QkE+KTsvCisgICAoPFUyNEQ1Piw8VTI0QkI+KTsoPFUyNEQ2Piw8VTI0QkM+KTsoPFUyNEQ3Piw8VTI0QkQ+KTsoPFUyNEQ4Piw8VTI0QkU+KTsvCisgICAoPFUyNEQ5Piw8VTI0QkY+KTsoPFUyNERBPiw8VTI0QzA+KTsoPFUyNERCPiw8VTI0QzE+KTsoPFUyNERDPiw8VTI0QzI+KTsvCisgICAoPFUyNEREPiw8VTI0QzM+KTsoPFUyNERFPiw8VTI0QzQ+KTsoPFUyNERGPiw8VTI0QzU+KTsoPFUyNEUwPiw8VTI0QzY+KTsvCisgICAoPFUyNEUxPiw8VTI0Qzc+KTsoPFUyNEUyPiw8VTI0Qzg+KTsoPFUyNEUzPiw8VTI0Qzk+KTsoPFUyNEU0Piw8VTI0Q0E+KTsvCisgICAoPFUyNEU1Piw8VTI0Q0I+KTsoPFUyNEU2Piw8VTI0Q0M+KTsoPFUyNEU3Piw8VTI0Q0Q+KTsoPFUyNEU4Piw8VTI0Q0U+KTsvCisgICAoPFUyNEU5Piw8VTI0Q0Y+KTsoPFVGRjQxPiw8VUZGMjE+KTsoPFVGRjQyPiw8VUZGMjI+KTsoPFVGRjQzPiw8VUZGMjM+KTsvCisgICAoPFVGRjQ0Piw8VUZGMjQ+KTsoPFVGRjQ1Piw8VUZGMjU+KTsoPFVGRjQ2Piw8VUZGMjY+KTsoPFVGRjQ3Piw8VUZGMjc+KTsvCisgICAoPFVGRjQ4Piw8VUZGMjg+KTsoPFVGRjQ5Piw8VUZGMjk+KTsoPFVGRjRBPiw8VUZGMkE+KTsoPFVGRjRCPiw8VUZGMkI+KTsvCisgICAoPFVGRjRDPiw8VUZGMkM+KTsoPFVGRjREPiw8VUZGMkQ+KTsoPFVGRjRFPiw8VUZGMkU+KTsoPFVGRjRGPiw8VUZGMkY+KTsvCisgICAoPFVGRjUwPiw8VUZGMzA+KTsoPFVGRjUxPiw8VUZGMzE+KTsoPFVGRjUyPiw8VUZGMzI+KTsoPFVGRjUzPiw8VUZGMzM+KTsvCisgICAoPFVGRjU0Piw8VUZGMzQ+KTsoPFVGRjU1Piw8VUZGMzU+KTsoPFVGRjU2Piw8VUZGMzY+KTsoPFVGRjU3Piw8VUZGMzc+KTsvCisgICAoPFVGRjU4Piw8VUZGMzg+KTsoPFVGRjU5Piw8VUZGMzk+KTsoPFVGRjVBPiw8VUZGM0E+KTsvCisgICAoPFUwMDAxMDQyOD4sPFUwMDAxMDQwMD4pOyg8VTAwMDEwNDI5Piw8VTAwMDEwNDAxPik7LworICAgKDxVMDAwMTA0MkE+LDxVMDAwMTA0MDI+KTsoPFUwMDAxMDQyQj4sPFUwMDAxMDQwMz4pOy8KKyAgICg8VTAwMDEwNDJDPiw8VTAwMDEwNDA0Pik7KDxVMDAwMTA0MkQ+LDxVMDAwMTA0MDU+KTsvCisgICAoPFUwMDAxMDQyRT4sPFUwMDAxMDQwNj4pOyg8VTAwMDEwNDJGPiw8VTAwMDEwNDA3Pik7LworICAgKDxVMDAwMTA0MzA+LDxVMDAwMTA0MDg+KTsoPFUwMDAxMDQzMT4sPFUwMDAxMDQwOT4pOy8KKyAgICg8VTAwMDEwNDMyPiw8VTAwMDEwNDBBPik7KDxVMDAwMTA0MzM+LDxVMDAwMTA0MEI+KTsvCisgICAoPFUwMDAxMDQzND4sPFUwMDAxMDQwQz4pOyg8VTAwMDEwNDM1Piw8VTAwMDEwNDBEPik7LworICAgKDxVMDAwMTA0MzY+LDxVMDAwMTA0MEU+KTsoPFUwMDAxMDQzNz4sPFUwMDAxMDQwRj4pOy8KKyAgICg8VTAwMDEwNDM4Piw8VTAwMDEwNDEwPik7KDxVMDAwMTA0Mzk+LDxVMDAwMTA0MTE+KTsvCisgICAoPFUwMDAxMDQzQT4sPFUwMDAxMDQxMj4pOyg8VTAwMDEwNDNCPiw8VTAwMDEwNDEzPik7LworICAgKDxVMDAwMTA0M0M+LDxVMDAwMTA0MTQ+KTsoPFUwMDAxMDQzRD4sPFUwMDAxMDQxNT4pOy8KKyAgICg8VTAwMDEwNDNFPiw8VTAwMDEwNDE2Pik7KDxVMDAwMTA0M0Y+LDxVMDAwMTA0MTc+KTsvCisgICAoPFUwMDAxMDQ0MD4sPFUwMDAxMDQxOD4pOyg8VTAwMDEwNDQxPiw8VTAwMDEwNDE5Pik7LworICAgKDxVMDAwMTA0NDI+LDxVMDAwMTA0MUE+KTsoPFUwMDAxMDQ0Mz4sPFUwMDAxMDQxQj4pOy8KKyAgICg8VTAwMDEwNDQ0Piw8VTAwMDEwNDFDPik7KDxVMDAwMTA0NDU+LDxVMDAwMTA0MUQ+KTsvCisgICAoPFUwMDAxMDQ0Nj4sPFUwMDAxMDQxRT4pOyg8VTAwMDEwNDQ3Piw8VTAwMDEwNDFGPik7LworICAgKDxVMDAwMTA0NDg+LDxVMDAwMTA0MjA+KTsoPFUwMDAxMDQ0OT4sPFUwMDAxMDQyMT4pOy8KKyAgICg8VTAwMDEwNDRBPiw8VTAwMDEwNDIyPik7KDxVMDAwMTA0NEI+LDxVMDAwMTA0MjM+KTsvCisgICAoPFUwMDAxMDQ0Qz4sPFUwMDAxMDQyND4pOyg8VTAwMDEwNDREPiw8VTAwMDEwNDI1PikKKworJSBUaGUgImNvbWJpbmluZyIgY2xhc3MgcmVmbGVjdHMgSVNPL0lFQyAxMDY0Ni0xIGFubmV4IEIuMQorJSBUaGF0IGlzLCBhbGwgY29tYmluaW5nIGNoYXJhY3RlcnMgKGxldmVsIDIrMykuCitjbGFzcyAiY29tYmluaW5nIjsgLworICAgPFUwMzAwPi4uPFUwMzRGPjs8VTAzNjA+Li48VTAzNkY+OzxVMDQ4Mz4uLjxVMDQ4Nj47PFUwNDg4Pi4uPFUwNDg5PjsvCisgICA8VTA1OTE+Li48VTA1QTE+OzxVMDVBMz4uLjxVMDVCOT47PFUwNUJCPi4uPFUwNUJEPjs8VTA1QkY+Oy8KKyAgIDxVMDVDMT4uLjxVMDVDMj47PFUwNUM0Pjs8VTA2NEI+Li48VTA2NTU+OzxVMDY3MD47PFUwNkQ2Pi4uPFUwNkRDPjsvCisgICA8VTA2REU+Li48VTA2RTQ+OzxVMDZFNz4uLjxVMDZFOD47PFUwNkVBPi4uPFUwNkVEPjs8VTA3MTE+OzxVMDczMD4uLjxVMDc0QT47LworICAgPFUwN0E2Pi4uPFUwN0IwPjs8VTA5MDE+Li48VTA5MDM+OzxVMDkzQz47PFUwOTNFPi4uPFUwOTREPjsvCisgICA8VTA5NTE+Li48VTA5NTQ+OzxVMDk2Mj4uLjxVMDk2Mz47PFUwOTgxPi4uPFUwOTgzPjs8VTA5QkM+Oy8KKyAgIDxVMDlCRT4uLjxVMDlDND47PFUwOUM3Pi4uPFUwOUM4Pjs8VTA5Q0I+Li48VTA5Q0Q+OzxVMDlENz47LworICAgPFUwOUUyPi4uPFUwOUUzPjs8VTBBMDI+OzxVMEEzQz47PFUwQTNFPi4uPFUwQTQyPjs8VTBBNDc+Li48VTBBNDg+Oy8KKyAgIDxVMEE0Qj4uLjxVMEE0RD47PFUwQTcwPi4uPFUwQTcxPjs8VTBBODE+Li48VTBBODM+OzxVMEFCQz47LworICAgPFUwQUJFPi4uPFUwQUM1Pjs8VTBBQzc+Li48VTBBQzk+OzxVMEFDQj4uLjxVMEFDRD47PFUwQjAxPi4uPFUwQjAzPjsvCisgICA8VTBCM0M+OzxVMEIzRT4uLjxVMEI0Mz47PFUwQjQ3Pi4uPFUwQjQ4Pjs8VTBCNEI+Li48VTBCNEQ+Oy8KKyAgIDxVMEI1Nj4uLjxVMEI1Nz47PFUwQjgyPjs8VTBCQkU+Li48VTBCQzI+OzxVMEJDNj4uLjxVMEJDOD47LworICAgPFUwQkNBPi4uPFUwQkNEPjs8VTBCRDc+OzxVMEMwMT4uLjxVMEMwMz47PFUwQzNFPi4uPFUwQzQ0PjsvCisgICA8VTBDNDY+Li48VTBDNDg+OzxVMEM0QT4uLjxVMEM0RD47PFUwQzU1Pi4uPFUwQzU2Pjs8VTBDODI+Li48VTBDODM+Oy8KKyAgIDxVMENCRT4uLjxVMENDND47PFUwQ0M2Pi4uPFUwQ0M4Pjs8VTBDQ0E+Li48VTBDQ0Q+OzxVMENENT4uLjxVMENENj47LworICAgPFUwRDAyPi4uPFUwRDAzPjs8VTBEM0U+Li48VTBENDM+OzxVMEQ0Nj4uLjxVMEQ0OD47PFUwRDRBPi4uPFUwRDREPjsvCisgICA8VTBENTc+OzxVMEQ4Mj4uLjxVMEQ4Mz47PFUwRENBPjs8VTBEQ0Y+Li48VTBERDQ+OzxVMERENj47LworICAgPFUwREQ4Pi4uPFUwRERGPjs8VTBERjI+Li48VTBERjM+OzxVMEUzMT47PFUwRTM0Pi4uPFUwRTNBPjsvCisgICA8VTBFNDc+Li48VTBFNEU+OzxVMEVCMT47PFUwRUI0Pi4uPFUwRUI5Pjs8VTBFQkI+Li48VTBFQkM+Oy8KKyAgIDxVMEVDOD4uLjxVMEVDRD47PFUwRjE4Pi4uPFUwRjE5Pjs8VTBGMzU+OzxVMEYzNz47PFUwRjM5PjsvCisgICA8VTBGM0U+Li48VTBGM0Y+OzxVMEY3MT4uLjxVMEY4ND47PFUwRjg2Pi4uPFUwRjg3Pjs8VTBGOTA+Li48VTBGOTc+Oy8KKyAgIDxVMEY5OT4uLjxVMEZCQz47PFUwRkM2Pjs8VTEwMkM+Li48VTEwMzI+OzxVMTAzNj4uLjxVMTAzOT47LworICAgPFUxMDU2Pi4uPFUxMDU5Pjs8VTE3MTI+Li48VTE3MTQ+OzxVMTczMj4uLjxVMTczND47PFUxNzUyPi4uPFUxNzUzPjsvCisgICA8VTE3NzI+Li48VTE3NzM+OzxVMTdCND4uLjxVMTdEMz47PFUxODBCPi4uPFUxODBEPjs8VTE4QTk+OzxVMjBEMD4uLjxVMjBFQT47LworICAgPFUzMDJBPi4uPFUzMDJGPjs8VTMwOTk+Li48VTMwOUE+OzxVRjhGMD4uLjxVRjhGRj47PFVGQjFFPjs8VUZFMDA+Li48VUZFMEY+Oy8KKyAgIDxVRkUyMD4uLjxVRkUyMz47PFUwMDAxRDE2NT4uLjxVMDAwMUQxNjk+OzxVMDAwMUQxNkQ+Li48VTAwMDFEMTcyPjsvCisgICA8VTAwMDFEMTdCPi4uPFUwMDAxRDE4Mj47PFUwMDAxRDE4NT4uLjxVMDAwMUQxOEI+Oy8KKyAgIDxVMDAwMUQxQUE+Li48VTAwMDFEMUFEPgorCislIFRoZSAiY29tYmluaW5nX2xldmVsMyIgY2xhc3MgcmVmbGVjdHMgSVNPL0lFQyAxMDY0Ni0xIGFubmV4IEIuMgorJSBUaGF0IGlzLCBjb21iaW5pbmcgY2hhcmFjdGVycyBvZiBsZXZlbCAzLgorY2xhc3MgImNvbWJpbmluZ19sZXZlbDMiOyAvCisgICA8VTAzMzQ+Li48VTAzMzg+OzxVMDM0Rj47PFUwNDg4Pi4uPFUwNDg5Pjs8VTA1QjA+Li48VTA1Qjk+Oy8KKyAgIDxVMDVCQj4uLjxVMDVCRD47PFUwNUJGPjs8VTA1QzE+Li48VTA1QzI+OzxVMDY0Qj4uLjxVMDY1Mj47PFUwNjcwPjs8VTA2REU+Oy8KKyAgIDxVMDcxMT47PFUwN0E2Pi4uPFUwN0IwPjs8VTA5MDE+Li48VTA5MDM+OzxVMDkzQz47PFUwOTNFPi4uPFUwOTREPjsvCisgICA8VTA5NjI+Li48VTA5NjM+OzxVMDk4MT4uLjxVMDk4Mz47PFUwOUJDPjs8VTA5QkU+Li48VTA5QzQ+Oy8KKyAgIDxVMDlDNz4uLjxVMDlDOD47PFUwOUNCPi4uPFUwOUNEPjs8VTA5RDc+OzxVMDlFMj4uLjxVMDlFMz47PFUwQTAyPjsvCisgICA8VTBBM0M+OzxVMEEzRT4uLjxVMEE0Mj47PFUwQTQ3Pi4uPFUwQTQ4Pjs8VTBBNEI+Li48VTBBNEQ+Oy8KKyAgIDxVMEE3MD4uLjxVMEE3MT47PFUwQTgxPi4uPFUwQTgzPjs8VTBBQkM+OzxVMEFCRT4uLjxVMEFDNT47LworICAgPFUwQUM3Pi4uPFUwQUM5Pjs8VTBBQ0I+Li48VTBBQ0Q+OzxVMEIwMT4uLjxVMEIwMz47PFUwQjNDPjsvCisgICA8VTBCM0U+Li48VTBCNDM+OzxVMEI0Nz4uLjxVMEI0OD47PFUwQjRCPi4uPFUwQjREPjs8VTBCNTY+Li48VTBCNTc+Oy8KKyAgIDxVMEI4Mj47PFUwQkJFPi4uPFUwQkMyPjs8VTBCQzY+Li48VTBCQzg+OzxVMEJDQT4uLjxVMEJDRD47LworICAgPFUwQkQ3Pjs8VTBDMDE+Li48VTBDMDM+OzxVMEMzRT4uLjxVMEM0ND47PFUwQzQ2Pi4uPFUwQzQ4PjsvCisgICA8VTBDNEE+Li48VTBDNEQ+OzxVMEM1NT4uLjxVMEM1Nj47PFUwQzgyPi4uPFUwQzgzPjs8VTBDQkU+Li48VTBDQzQ+Oy8KKyAgIDxVMENDNj4uLjxVMENDOD47PFUwQ0NBPi4uPFUwQ0NEPjs8VTBDRDU+Li48VTBDRDY+OzxVMEQwMj4uLjxVMEQwMz47LworICAgPFUwRDNFPi4uPFUwRDQzPjs8VTBENDY+Li48VTBENDg+OzxVMEQ0QT4uLjxVMEQ0RD47PFUwRDU3PjsvCisgICA8VTBEODI+Li48VTBEODM+OzxVMERDQT47PFUwRENGPi4uPFUwREQ0Pjs8VTBERDY+OzxVMEREOD4uLjxVMERERj47LworICAgPFUwREYyPi4uPFUwREYzPjs8VTBFMzE+OzxVMEUzND4uLjxVMEUzQT47PFUwRTQ3Pi4uPFUwRTRFPjs8VTBFQjE+Oy8KKyAgIDxVMEVCND4uLjxVMEVCOT47PFUwRUJCPi4uPFUwRUJDPjs8VTBFQzg+Li48VTBFQ0Q+OzxVMEYzRT4uLjxVMEYzRj47LworICAgPFUwRjcxPi4uPFUwRjgxPjs8VTBGODQ+OzxVMEY5MD4uLjxVMEY5Nz47PFUwRjk5Pi4uPFUwRkJDPjsvCisgICA8VTEwMkM+Li48VTEwMzI+OzxVMTAzNj4uLjxVMTAzOT47PFUxMDU2Pi4uPFUxMDU5Pjs8VTE3MTI+Li48VTE3MTQ+Oy8KKyAgIDxVMTczMj4uLjxVMTczND47PFUxNzUyPi4uPFUxNzUzPjs8VTE3NzI+Li48VTE3NzM+OzxVMTdCND4uLjxVMTdEMz47LworICAgPFUxODBCPi4uPFUxODBEPjsvCisgICA8VTIwRDI+Li48VTIwRDM+OzxVMjBEOD4uLjxVMjBEQT47PFUyMEREPi4uPFUyMEUwPjs8VTIwRTI+Li48VTIwRTY+OzxVMjBFQT47LworICAgPFUzMDk5Pi4uPFUzMDlBPjs8VUY4RjA+Li48VUY4RkY+OzxVRkIxRT47PFVGRTAwPi4uPFVGRTBGPjsvCisgICA8VTAwMDFEMTY3Pi4uPFUwMDAxRDE2OT4KKworJSBFTkQgbW9kaWZpZWQgaTE4biBMQ19DVFlQRQorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworTENfTUVTU0FHRVMKK3llc2V4cHIJIjxVMDA1RT48VTAwNUI+PFUwMDc5PjxVMDA1OT48VTAwNjU+PFUwMDQ1PjxVMDA1RD4iCitub2V4cHIJIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNjg+PFUwMDQ4PjxVMDA1RD4iCit5ZXNzdHIJIjxVMDA2NT48VTAwNzY+PFUwMDY1PjxVMDA3ND4iCitub3N0cgkiPFUwMDY4PjxVMDA2MT48VTAwNzk+PFUwMTMxPjxVMDA3Mj4iCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKKyUgSVNPLTQyMTcgKDIwMDQtMTAtMjUpOiBUUlkgOTQ5IDIKK2ludF9jdXJyX3N5bWJvbCAgICAgICAgICAgIjxVMDA1ND48VTAwNTI+PFUwMDU5PjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgICAgICI8VTAwNTk+PFUwMDU0PjxVMDA0Qz4iCittb25fZGVjaW1hbF9wb2ludCAgICAgICAgICI8VTAwMkM+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgICAiPFUwMDJFPiIKK21vbl9ncm91cGluZyAgICAgICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAgICAgMAorcF9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDAKK25fc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAgICAgICI8VTAwMkM+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAgICAiPFUwMDJFPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgICAgMzszCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICI8VTAwNTA+PFUwMDYxPjxVMDA3QT4iOyI8VTAwNTA+PFUwMDdBPjxVMDA3ND4iOyI8VTAwNTM+PFUwMDYxPjxVMDA2Qz4iOy8KKyAgICAgICAgIjxVMDBDNz48VTAwNzI+PFUwMTVGPiI7IjxVMDA1MD48VTAwNzI+PFUwMTVGPiI7IjxVMDA0Mz48VTAwNzU+PFUwMDZEPiI7IjxVMDA0Mz48VTAwNzQ+PFUwMDczPiIKK2RheSAgICAgIjxVMDA1MD48VTAwNjE+PFUwMDdBPjxVMDA2MT48VTAwNzI+IjsvCisJIjxVMDA1MD48VTAwNjE+PFUwMDdBPjxVMDA2MT48VTAwNzI+PFUwMDc0PjxVMDA2NT48VTAwNzM+PFUwMDY5PiI7LworCSI8VTAwNTM+PFUwMDYxPjxVMDA2Qz48VTAxMzE+IjsvCisJIjxVMDBDNz48VTAwNjE+PFUwMDcyPjxVMDE1Rj48VTAwNjE+PFUwMDZEPjxVMDA2Mj48VTAwNjE+IjsvCisJIjxVMDA1MD48VTAwNjU+PFUwMDcyPjxVMDE1Rj48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+IjsvCisJIjxVMDA0Mz48VTAwNzU+PFUwMDZEPjxVMDA2MT4iOy8KKwkiPFUwMDQzPjxVMDA3NT48VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNzQ+PFUwMDY1PjxVMDA3Mz48VTAwNjk+IgorYWJtb24gICAiPFUwMDRGPjxVMDA2Mz48VTAwNjE+IjsiPFUwMTVFPjxVMDA3NT48VTAwNjI+IjsvCisJIjxVMDA0RD48VTAwNjE+PFUwMDcyPiI7IjxVMDA0RT48VTAwNjk+PFUwMDczPiI7LworICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+IjsiPFUwMDQ4PjxVMDA2MT48VTAwN0E+IjsvCisgICAgICAgICI8VTAwNTQ+PFUwMDY1PjxVMDA2RD4iOyI8VTAwNDE+PFUwMTFGPjxVMDA3NT4iOy8KKyAgICAgICAgIjxVMDA0NT48VTAwNzk+PFUwMDZDPiI7IjxVMDA0NT48VTAwNkI+PFUwMDY5PiI7LworCSI8VTAwNEI+PFUwMDYxPjxVMDA3Mz4iOyI8VTAwNDE+PFUwMDcyPjxVMDA2MT4iCittb24gICAgICI8VTAwNEY+PFUwMDYzPjxVMDA2MT48VTAwNkI+IjsvCisJIjxVMDE1RT48VTAwNzU+PFUwMDYyPjxVMDA2MT48VTAwNzQ+IjsvCisJIjxVMDA0RD48VTAwNjE+PFUwMDcyPjxVMDA3ND4iOy8KKwkiPFUwMDRFPjxVMDA2OT48VTAwNzM+PFUwMDYxPjxVMDA2RT4iOy8KKwkiPFUwMDREPjxVMDA2MT48VTAwNzk+PFUwMTMxPjxVMDA3Mz4iOy8KKyAgICAgICAgIjxVMDA0OD48VTAwNjE+PFUwMDdBPjxVMDA2OT48VTAwNzI+PFUwMDYxPjxVMDA2RT4iOy8KKyAgICAgICAgIjxVMDA1ND48VTAwNjU+PFUwMDZEPjxVMDA2RD48VTAwNzU+PFUwMDdBPiI7LworCSI8VTAwNDE+PFUwMTFGPjxVMDA3NT48VTAwNzM+PFUwMDc0PjxVMDA2Rj48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNDU+PFUwMDc5PjxVMDA2Qz48VTAwRkM+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDQ1PjxVMDA2Qj48VTAwNjk+PFUwMDZEPiI7LworCSI8VTAwNEI+PFUwMDYxPjxVMDA3Mz48VTAxMzE+PFUwMDZEPiI7LworCSI8VTAwNDE+PFUwMDcyPjxVMDA2MT48VTAwNkM+PFUwMTMxPjxVMDA2Qj4iCitkX3RfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD4vCis8VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJEPjxVMDAyNT48VTAwNkQ+PFUwMDJEPjxVMDAyNT48VTAwNTk+IgordF9mbXQgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICI8VTAwRDY+PFUwMEQ2PiI7IjxVMDBENj48VTAwNTM+IgordF9mbXRfYW1wbSAiPFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA3MD4iCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19QQVBFUgoraGVpZ2h0ICAgMjk3Cit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDM5PjxVMDAzMD4iCitpbnRfc2VsZWN0ICAgICAiPFUwMDMwPjxVMDAzMD4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorJSBTYXk8VTAxMzE+bgorbmFtZV9nZW4gICAgIjxVMDA1Mz48VTAwNjE+PFUwMDc5PjxVMDEzMT48VTAwNkU+IgorJSBCYXkKK25hbWVfbXIgICAgICI8VTAwNDI+PFUwMDYxPjxVMDA3OT4iCislIEJheWFuCituYW1lX21ycyAgICAiPFUwMDQyPjxVMDA2MT48VTAwNzk+PFUwMDYxPjxVMDA2RT4iCituYW1lX21pc3MgICAiPFUwMDQyPjxVMDA2MT48VTAwNzk+PFUwMDYxPjxVMDA2RT4iCituYW1lX21zICAgICAiPFUwMDQyPjxVMDA2MT48VTAwNzk+PFUwMDYxPjxVMDA2RT4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorJSBUdXJrZXkKK2NvdW50cnlfbmFtZQkiPFUwMDU0PjxVMDA3NT48VTAwNzI+PFUwMDZCPjxVMDA2NT48VTAwNzk+IgorJSBUUgorY291bnRyeV9wb3N0CSI8VTAwNTQ+PFUwMDUyPiIKKyUgVFIKK2NvdW50cnlfY2FyCSI8VTAwNTQ+PFUwMDUyPiIKK2NvdW50cnlfaXNibgk5NzUKK2NvdW50cnlfbnVtCTc5MgorJSBUUgorY291bnRyeV9hYjIJIjxVMDA1ND48VTAwNTI+IgorJSBUVVIKK2NvdW50cnlfYWIzCSI8VTAwNTQ+PFUwMDU1PjxVMDA1Mj4iCislIFR1cmtpc2gKK2xhbmdfbmFtZQkiPFUwMDU0PjxVMDA3NT48VTAwNzI+PFUwMDZCPjxVMDA2OT48VTAwNzM+PFUwMDY4PiIKKyUgdHIKK2xhbmdfdGVybQkiPFUwMDc0PjxVMDA3NT48VTAwNzI+IgorJSB0cgorbGFuZ19saWIJIjxVMDA3ND48VTAwNzI+IgorJXRyCitsYW5nX2FiCQkiPFUwMDc0PjxVMDA3Mj4iCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdHJhbnNsaXRfY2lyY2xlIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdHJhbnNsaXRfY2lyY2xlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MDFiYzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy90cmFuc2xpdF9jaXJjbGUKQEAgLTAsMCArMSw0NzAgQEAKK2VzY2FwZV9jaGFyIC8KK2NvbW1lbnRfY2hhciAlCisKKyUgVHJhbnNsaXRlcmF0aW9ucyBvZiBlbmNpcmNsZWQgY2hhcmFjdGVycy4KKyUgR2VuZXJhdGVkIHRocm91Z2gKKyUgICAkIGdyZXAgJ15bXjtdKjtbXjtdKjtbXjtdKjtbXjtdKjtbXjtdKjs8Y2lyY2xlPlteO10qOycgVW5pY29kZURhdGEudHh0IHwgXAorJSAgICAgc2VkIC1lICdzL15cKFteO10qXCk7XChbXjtdKlwpO1teO10qO1teO10qO1teO10qOzxjaXJjbGU+IFwoW147XSpcKTsuKiQvPFVcMT4gIjxVMDAyOCBcMyAwMDI5PiIlIFwyLycgLWUgJ2gnIC1lICdzL15cKFteJV0qXCklIC4qJC9cMS8nIC1lICdzL1woWzAtOUEtRl1cKSBcKFswLTlBLUZdXCkvXDE+PFVcMi9nJyAtZSAneCcgLWUgJ3MvXlteJV0qXCglIC4qXCkkL1wxLycgLWUgJ0cnCisKK0xDX0NUWVBFCisKK3RyYW5zbGl0X3N0YXJ0CisKKyUgQ0lSQ0xFRCBESUdJVCBPTkUKKzxVMjQ2MD4gIjxVMDAyOD48VTAwMzE+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBESUdJVCBUV08KKzxVMjQ2MT4gIjxVMDAyOD48VTAwMzI+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBESUdJVCBUSFJFRQorPFUyNDYyPiAiPFUwMDI4PjxVMDAzMz48VTAwMjk+IgorJSBDSVJDTEVEIERJR0lUIEZPVVIKKzxVMjQ2Mz4gIjxVMDAyOD48VTAwMzQ+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBESUdJVCBGSVZFCis8VTI0NjQ+ICI8VTAwMjg+PFUwMDM1PjxVMDAyOT4iCislIENJUkNMRUQgRElHSVQgU0lYCis8VTI0NjU+ICI8VTAwMjg+PFUwMDM2PjxVMDAyOT4iCislIENJUkNMRUQgRElHSVQgU0VWRU4KKzxVMjQ2Nj4gIjxVMDAyOD48VTAwMzc+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBESUdJVCBFSUdIVAorPFUyNDY3PiAiPFUwMDI4PjxVMDAzOD48VTAwMjk+IgorJSBDSVJDTEVEIERJR0lUIE5JTkUKKzxVMjQ2OD4gIjxVMDAyOD48VTAwMzk+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBOVU1CRVIgVEVOCis8VTI0Njk+ICI8VTAwMjg+PFUwMDMxPjxVMDAzMD48VTAwMjk+IgorJSBDSVJDTEVEIE5VTUJFUiBFTEVWRU4KKzxVMjQ2QT4gIjxVMDAyOD48VTAwMzE+PFUwMDMxPjxVMDAyOT4iCislIENJUkNMRUQgTlVNQkVSIFRXRUxWRQorPFUyNDZCPiAiPFUwMDI4PjxVMDAzMT48VTAwMzI+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBOVU1CRVIgVEhJUlRFRU4KKzxVMjQ2Qz4gIjxVMDAyOD48VTAwMzE+PFUwMDMzPjxVMDAyOT4iCislIENJUkNMRUQgTlVNQkVSIEZPVVJURUVOCis8VTI0NkQ+ICI8VTAwMjg+PFUwMDMxPjxVMDAzND48VTAwMjk+IgorJSBDSVJDTEVEIE5VTUJFUiBGSUZURUVOCis8VTI0NkU+ICI8VTAwMjg+PFUwMDMxPjxVMDAzNT48VTAwMjk+IgorJSBDSVJDTEVEIE5VTUJFUiBTSVhURUVOCis8VTI0NkY+ICI8VTAwMjg+PFUwMDMxPjxVMDAzNj48VTAwMjk+IgorJSBDSVJDTEVEIE5VTUJFUiBTRVZFTlRFRU4KKzxVMjQ3MD4gIjxVMDAyOD48VTAwMzE+PFUwMDM3PjxVMDAyOT4iCislIENJUkNMRUQgTlVNQkVSIEVJR0hURUVOCis8VTI0NzE+ICI8VTAwMjg+PFUwMDMxPjxVMDAzOD48VTAwMjk+IgorJSBDSVJDTEVEIE5VTUJFUiBOSU5FVEVFTgorPFUyNDcyPiAiPFUwMDI4PjxVMDAzMT48VTAwMzk+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBOVU1CRVIgVFdFTlRZCis8VTI0NzM+ICI8VTAwMjg+PFUwMDMyPjxVMDAzMD48VTAwMjk+IgorJSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIEEKKzxVMjRCNj4gIjxVMDAyOD48VTAwNDE+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBCCis8VTI0Qjc+ICI8VTAwMjg+PFUwMDQyPjxVMDAyOT4iCislIENJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQworPFUyNEI4PiAiPFUwMDI4PjxVMDA0Mz48VTAwMjk+IgorJSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIEQKKzxVMjRCOT4gIjxVMDAyOD48VTAwNDQ+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBFCis8VTI0QkE+ICI8VTAwMjg+PFUwMDQ1PjxVMDAyOT4iCislIENJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRgorPFUyNEJCPiAiPFUwMDI4PjxVMDA0Nj48VTAwMjk+IgorJSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIEcKKzxVMjRCQz4gIjxVMDAyOD48VTAwNDc+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBICis8VTI0QkQ+ICI8VTAwMjg+PFUwMDQ4PjxVMDAyOT4iCislIENJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSQorPFUyNEJFPiAiPFUwMDI4PjxVMDA0OT48VTAwMjk+IgorJSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIEoKKzxVMjRCRj4gIjxVMDAyOD48VTAwNEE+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBLCis8VTI0QzA+ICI8VTAwMjg+PFUwMDRCPjxVMDAyOT4iCislIENJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTAorPFUyNEMxPiAiPFUwMDI4PjxVMDA0Qz48VTAwMjk+IgorJSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIE0KKzxVMjRDMj4gIjxVMDAyOD48VTAwNEQ+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBOCis8VTI0QzM+ICI8VTAwMjg+PFUwMDRFPjxVMDAyOT4iCislIENJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTworPFUyNEM0PiAiPFUwMDI4PjxVMDA0Rj48VTAwMjk+IgorJSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIFAKKzxVMjRDNT4gIjxVMDAyOD48VTAwNTA+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBRCis8VTI0QzY+ICI8VTAwMjg+PFUwMDUxPjxVMDAyOT4iCislIENJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUgorPFUyNEM3PiAiPFUwMDI4PjxVMDA1Mj48VTAwMjk+IgorJSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIFMKKzxVMjRDOD4gIjxVMDAyOD48VTAwNTM+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBUCis8VTI0Qzk+ICI8VTAwMjg+PFUwMDU0PjxVMDAyOT4iCislIENJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVQorPFUyNENBPiAiPFUwMDI4PjxVMDA1NT48VTAwMjk+IgorJSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIFYKKzxVMjRDQj4gIjxVMDAyOD48VTAwNTY+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBXCis8VTI0Q0M+ICI8VTAwMjg+PFUwMDU3PjxVMDAyOT4iCislIENJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWAorPFUyNENEPiAiPFUwMDI4PjxVMDA1OD48VTAwMjk+IgorJSBDSVJDTEVEIExBVElOIENBUElUQUwgTEVUVEVSIFkKKzxVMjRDRT4gIjxVMDAyOD48VTAwNTk+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBMQVRJTiBDQVBJVEFMIExFVFRFUiBaCis8VTI0Q0Y+ICI8VTAwMjg+PFUwMDVBPjxVMDAyOT4iCislIENJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIEEKKzxVMjREMD4gIjxVMDAyOD48VTAwNjE+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgQgorPFUyNEQxPiAiPFUwMDI4PjxVMDA2Mj48VTAwMjk+IgorJSBDSVJDTEVEIExBVElOIFNNQUxMIExFVFRFUiBDCis8VTI0RDI+ICI8VTAwMjg+PFUwMDYzPjxVMDAyOT4iCislIENJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIEQKKzxVMjREMz4gIjxVMDAyOD48VTAwNjQ+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgRQorPFUyNEQ0PiAiPFUwMDI4PjxVMDA2NT48VTAwMjk+IgorJSBDSVJDTEVEIExBVElOIFNNQUxMIExFVFRFUiBGCis8VTI0RDU+ICI8VTAwMjg+PFUwMDY2PjxVMDAyOT4iCislIENJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIEcKKzxVMjRENj4gIjxVMDAyOD48VTAwNjc+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgSAorPFUyNEQ3PiAiPFUwMDI4PjxVMDA2OD48VTAwMjk+IgorJSBDSVJDTEVEIExBVElOIFNNQUxMIExFVFRFUiBJCis8VTI0RDg+ICI8VTAwMjg+PFUwMDY5PjxVMDAyOT4iCislIENJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIEoKKzxVMjREOT4gIjxVMDAyOD48VTAwNkE+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgSworPFUyNERBPiAiPFUwMDI4PjxVMDA2Qj48VTAwMjk+IgorJSBDSVJDTEVEIExBVElOIFNNQUxMIExFVFRFUiBMCis8VTI0REI+ICI8VTAwMjg+PFUwMDZDPjxVMDAyOT4iCislIENJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIE0KKzxVMjREQz4gIjxVMDAyOD48VTAwNkQ+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgTgorPFUyNEREPiAiPFUwMDI4PjxVMDA2RT48VTAwMjk+IgorJSBDSVJDTEVEIExBVElOIFNNQUxMIExFVFRFUiBPCis8VTI0REU+ICI8VTAwMjg+PFUwMDZGPjxVMDAyOT4iCislIENJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIFAKKzxVMjRERj4gIjxVMDAyOD48VTAwNzA+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgUQorPFUyNEUwPiAiPFUwMDI4PjxVMDA3MT48VTAwMjk+IgorJSBDSVJDTEVEIExBVElOIFNNQUxMIExFVFRFUiBSCis8VTI0RTE+ICI8VTAwMjg+PFUwMDcyPjxVMDAyOT4iCislIENJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIFMKKzxVMjRFMj4gIjxVMDAyOD48VTAwNzM+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgVAorPFUyNEUzPiAiPFUwMDI4PjxVMDA3ND48VTAwMjk+IgorJSBDSVJDTEVEIExBVElOIFNNQUxMIExFVFRFUiBVCis8VTI0RTQ+ICI8VTAwMjg+PFUwMDc1PjxVMDAyOT4iCislIENJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIFYKKzxVMjRFNT4gIjxVMDAyOD48VTAwNzY+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgVworPFUyNEU2PiAiPFUwMDI4PjxVMDA3Nz48VTAwMjk+IgorJSBDSVJDTEVEIExBVElOIFNNQUxMIExFVFRFUiBYCis8VTI0RTc+ICI8VTAwMjg+PFUwMDc4PjxVMDAyOT4iCislIENJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIFkKKzxVMjRFOD4gIjxVMDAyOD48VTAwNzk+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgWgorPFUyNEU5PiAiPFUwMDI4PjxVMDA3QT48VTAwMjk+IgorJSBDSVJDTEVEIERJR0lUIFpFUk8KKzxVMjRFQT4gIjxVMDAyOD48VTAwMzA+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBOVU1CRVIgVFdFTlRZIE9ORQorPFUzMjUxPiAiPFUwMDI4PjxVMDAzMj48VTAwMzE+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBOVU1CRVIgVFdFTlRZIFRXTworPFUzMjUyPiAiPFUwMDI4PjxVMDAzMj48VTAwMzI+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBOVU1CRVIgVFdFTlRZIFRIUkVFCis8VTMyNTM+ICI8VTAwMjg+PFUwMDMyPjxVMDAzMz48VTAwMjk+IgorJSBDSVJDTEVEIE5VTUJFUiBUV0VOVFkgRk9VUgorPFUzMjU0PiAiPFUwMDI4PjxVMDAzMj48VTAwMzQ+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBOVU1CRVIgVFdFTlRZIEZJVkUKKzxVMzI1NT4gIjxVMDAyOD48VTAwMzI+PFUwMDM1PjxVMDAyOT4iCislIENJUkNMRUQgTlVNQkVSIFRXRU5UWSBTSVgKKzxVMzI1Nj4gIjxVMDAyOD48VTAwMzI+PFUwMDM2PjxVMDAyOT4iCislIENJUkNMRUQgTlVNQkVSIFRXRU5UWSBTRVZFTgorPFUzMjU3PiAiPFUwMDI4PjxVMDAzMj48VTAwMzc+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBOVU1CRVIgVFdFTlRZIEVJR0hUCis8VTMyNTg+ICI8VTAwMjg+PFUwMDMyPjxVMDAzOD48VTAwMjk+IgorJSBDSVJDTEVEIE5VTUJFUiBUV0VOVFkgTklORQorPFUzMjU5PiAiPFUwMDI4PjxVMDAzMj48VTAwMzk+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBOVU1CRVIgVEhJUlRZCis8VTMyNUE+ICI8VTAwMjg+PFUwMDMzPjxVMDAzMD48VTAwMjk+IgorJSBDSVJDTEVEIE5VTUJFUiBUSElSVFkgT05FCis8VTMyNUI+ICI8VTAwMjg+PFUwMDMzPjxVMDAzMT48VTAwMjk+IgorJSBDSVJDTEVEIE5VTUJFUiBUSElSVFkgVFdPCis8VTMyNUM+ICI8VTAwMjg+PFUwMDMzPjxVMDAzMj48VTAwMjk+IgorJSBDSVJDTEVEIE5VTUJFUiBUSElSVFkgVEhSRUUKKzxVMzI1RD4gIjxVMDAyOD48VTAwMzM+PFUwMDMzPjxVMDAyOT4iCislIENJUkNMRUQgTlVNQkVSIFRISVJUWSBGT1VSCis8VTMyNUU+ICI8VTAwMjg+PFUwMDMzPjxVMDAzND48VTAwMjk+IgorJSBDSVJDTEVEIE5VTUJFUiBUSElSVFkgRklWRQorPFUzMjVGPiAiPFUwMDI4PjxVMDAzMz48VTAwMzU+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBIQU5HVUwgS0lZRU9LCis8VTMyNjA+ICI8VTAwMjg+PFUxMTAwPjxVMDAyOT4iCislIENJUkNMRUQgSEFOR1VMIE5JRVVOCis8VTMyNjE+ICI8VTAwMjg+PFUxMTAyPjxVMDAyOT4iCislIENJUkNMRUQgSEFOR1VMIFRJS0VVVAorPFUzMjYyPiAiPFUwMDI4PjxVMTEwMz48VTAwMjk+IgorJSBDSVJDTEVEIEhBTkdVTCBSSUVVTAorPFUzMjYzPiAiPFUwMDI4PjxVMTEwNT48VTAwMjk+IgorJSBDSVJDTEVEIEhBTkdVTCBNSUVVTQorPFUzMjY0PiAiPFUwMDI4PjxVMTEwNj48VTAwMjk+IgorJSBDSVJDTEVEIEhBTkdVTCBQSUVVUAorPFUzMjY1PiAiPFUwMDI4PjxVMTEwNz48VTAwMjk+IgorJSBDSVJDTEVEIEhBTkdVTCBTSU9TCis8VTMyNjY+ICI8VTAwMjg+PFUxMTA5PjxVMDAyOT4iCislIENJUkNMRUQgSEFOR1VMIElFVU5HCis8VTMyNjc+ICI8VTAwMjg+PFUxMTBCPjxVMDAyOT4iCislIENJUkNMRUQgSEFOR1VMIENJRVVDCis8VTMyNjg+ICI8VTAwMjg+PFUxMTBDPjxVMDAyOT4iCislIENJUkNMRUQgSEFOR1VMIENISUVVQ0gKKzxVMzI2OT4gIjxVMDAyOD48VTExMEU+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBIQU5HVUwgS0hJRVVLSAorPFUzMjZBPiAiPFUwMDI4PjxVMTEwRj48VTAwMjk+IgorJSBDSVJDTEVEIEhBTkdVTCBUSElFVVRICis8VTMyNkI+ICI8VTAwMjg+PFUxMTEwPjxVMDAyOT4iCislIENJUkNMRUQgSEFOR1VMIFBISUVVUEgKKzxVMzI2Qz4gIjxVMDAyOD48VTExMTE+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBIQU5HVUwgSElFVUgKKzxVMzI2RD4gIjxVMDAyOD48VTExMTI+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBIQU5HVUwgS0lZRU9LIEEKKzxVMzI2RT4gIjxVMDAyOD48VTExMDA+PFUxMTYxPjxVMDAyOT4iCislIENJUkNMRUQgSEFOR1VMIE5JRVVOIEEKKzxVMzI2Rj4gIjxVMDAyOD48VTExMDI+PFUxMTYxPjxVMDAyOT4iCislIENJUkNMRUQgSEFOR1VMIFRJS0VVVCBBCis8VTMyNzA+ICI8VTAwMjg+PFUxMTAzPjxVMTE2MT48VTAwMjk+IgorJSBDSVJDTEVEIEhBTkdVTCBSSUVVTCBBCis8VTMyNzE+ICI8VTAwMjg+PFUxMTA1PjxVMTE2MT48VTAwMjk+IgorJSBDSVJDTEVEIEhBTkdVTCBNSUVVTSBBCis8VTMyNzI+ICI8VTAwMjg+PFUxMTA2PjxVMTE2MT48VTAwMjk+IgorJSBDSVJDTEVEIEhBTkdVTCBQSUVVUCBBCis8VTMyNzM+ICI8VTAwMjg+PFUxMTA3PjxVMTE2MT48VTAwMjk+IgorJSBDSVJDTEVEIEhBTkdVTCBTSU9TIEEKKzxVMzI3ND4gIjxVMDAyOD48VTExMDk+PFUxMTYxPjxVMDAyOT4iCislIENJUkNMRUQgSEFOR1VMIElFVU5HIEEKKzxVMzI3NT4gIjxVMDAyOD48VTExMEI+PFUxMTYxPjxVMDAyOT4iCislIENJUkNMRUQgSEFOR1VMIENJRVVDIEEKKzxVMzI3Nj4gIjxVMDAyOD48VTExMEM+PFUxMTYxPjxVMDAyOT4iCislIENJUkNMRUQgSEFOR1VMIENISUVVQ0ggQQorPFUzMjc3PiAiPFUwMDI4PjxVMTEwRT48VTExNjE+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBIQU5HVUwgS0hJRVVLSCBBCis8VTMyNzg+ICI8VTAwMjg+PFUxMTBGPjxVMTE2MT48VTAwMjk+IgorJSBDSVJDTEVEIEhBTkdVTCBUSElFVVRIIEEKKzxVMzI3OT4gIjxVMDAyOD48VTExMTA+PFUxMTYxPjxVMDAyOT4iCislIENJUkNMRUQgSEFOR1VMIFBISUVVUEggQQorPFUzMjdBPiAiPFUwMDI4PjxVMTExMT48VTExNjE+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBIQU5HVUwgSElFVUggQQorPFUzMjdCPiAiPFUwMDI4PjxVMTExMj48VTExNjE+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBJREVPR1JBUEggT05FCis8VTMyODA+ICI8VTAwMjg+PFU0RTAwPjxVMDAyOT4iCislIENJUkNMRUQgSURFT0dSQVBIIFRXTworPFUzMjgxPiAiPFUwMDI4PjxVNEU4Qz48VTAwMjk+IgorJSBDSVJDTEVEIElERU9HUkFQSCBUSFJFRQorPFUzMjgyPiAiPFUwMDI4PjxVNEUwOT48VTAwMjk+IgorJSBDSVJDTEVEIElERU9HUkFQSCBGT1VSCis8VTMyODM+ICI8VTAwMjg+PFU1NkRCPjxVMDAyOT4iCislIENJUkNMRUQgSURFT0dSQVBIIEZJVkUKKzxVMzI4ND4gIjxVMDAyOD48VTRFOTQ+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBJREVPR1JBUEggU0lYCis8VTMyODU+ICI8VTAwMjg+PFU1MTZEPjxVMDAyOT4iCislIENJUkNMRUQgSURFT0dSQVBIIFNFVkVOCis8VTMyODY+ICI8VTAwMjg+PFU0RTAzPjxVMDAyOT4iCislIENJUkNMRUQgSURFT0dSQVBIIEVJR0hUCis8VTMyODc+ICI8VTAwMjg+PFU1MTZCPjxVMDAyOT4iCislIENJUkNMRUQgSURFT0dSQVBIIE5JTkUKKzxVMzI4OD4gIjxVMDAyOD48VTRFNUQ+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBJREVPR1JBUEggVEVOCis8VTMyODk+ICI8VTAwMjg+PFU1MzQxPjxVMDAyOT4iCislIENJUkNMRUQgSURFT0dSQVBIIE1PT04KKzxVMzI4QT4gIjxVMDAyOD48VTY3MDg+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBJREVPR1JBUEggRklSRQorPFUzMjhCPiAiPFUwMDI4PjxVNzA2Qj48VTAwMjk+IgorJSBDSVJDTEVEIElERU9HUkFQSCBXQVRFUgorPFUzMjhDPiAiPFUwMDI4PjxVNkMzND48VTAwMjk+IgorJSBDSVJDTEVEIElERU9HUkFQSCBXT09ECis8VTMyOEQ+ICI8VTAwMjg+PFU2NzI4PjxVMDAyOT4iCislIENJUkNMRUQgSURFT0dSQVBIIE1FVEFMCis8VTMyOEU+ICI8VTAwMjg+PFU5MUQxPjxVMDAyOT4iCislIENJUkNMRUQgSURFT0dSQVBIIEVBUlRICis8VTMyOEY+ICI8VTAwMjg+PFU1NzFGPjxVMDAyOT4iCislIENJUkNMRUQgSURFT0dSQVBIIFNVTgorPFUzMjkwPiAiPFUwMDI4PjxVNjVFNT48VTAwMjk+IgorJSBDSVJDTEVEIElERU9HUkFQSCBTVE9DSworPFUzMjkxPiAiPFUwMDI4PjxVNjgyQT48VTAwMjk+IgorJSBDSVJDTEVEIElERU9HUkFQSCBIQVZFCis8VTMyOTI+ICI8VTAwMjg+PFU2NzA5PjxVMDAyOT4iCislIENJUkNMRUQgSURFT0dSQVBIIFNPQ0lFVFkKKzxVMzI5Mz4gIjxVMDAyOD48VTc5M0U+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBJREVPR1JBUEggTkFNRQorPFUzMjk0PiAiPFUwMDI4PjxVNTQwRD48VTAwMjk+IgorJSBDSVJDTEVEIElERU9HUkFQSCBTUEVDSUFMCis8VTMyOTU+ICI8VTAwMjg+PFU3Mjc5PjxVMDAyOT4iCislIENJUkNMRUQgSURFT0dSQVBIIEZJTkFOQ0lBTAorPFUzMjk2PiAiPFUwMDI4PjxVOENBMT48VTAwMjk+IgorJSBDSVJDTEVEIElERU9HUkFQSCBDT05HUkFUVUxBVElPTgorPFUzMjk3PiAiPFUwMDI4PjxVNzk1RD48VTAwMjk+IgorJSBDSVJDTEVEIElERU9HUkFQSCBMQUJPUgorPFUzMjk4PiAiPFUwMDI4PjxVNTJCND48VTAwMjk+IgorJSBDSVJDTEVEIElERU9HUkFQSCBTRUNSRVQKKzxVMzI5OT4gIjxVMDAyOD48VTc5RDg+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBJREVPR1JBUEggTUFMRQorPFUzMjlBPiAiPFUwMDI4PjxVNzUzNz48VTAwMjk+IgorJSBDSVJDTEVEIElERU9HUkFQSCBGRU1BTEUKKzxVMzI5Qj4gIjxVMDAyOD48VTU5NzM+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBJREVPR1JBUEggU1VJVEFCTEUKKzxVMzI5Qz4gIjxVMDAyOD48VTkwNjk+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBJREVPR1JBUEggRVhDRUxMRU5UCis8VTMyOUQ+ICI8VTAwMjg+PFU1MTJBPjxVMDAyOT4iCislIENJUkNMRUQgSURFT0dSQVBIIFBSSU5UCis8VTMyOUU+ICI8VTAwMjg+PFU1MzcwPjxVMDAyOT4iCislIENJUkNMRUQgSURFT0dSQVBIIEFUVEVOVElPTgorPFUzMjlGPiAiPFUwMDI4PjxVNkNFOD48VTAwMjk+IgorJSBDSVJDTEVEIElERU9HUkFQSCBJVEVNCis8VTMyQTA+ICI8VTAwMjg+PFU5ODA1PjxVMDAyOT4iCislIENJUkNMRUQgSURFT0dSQVBIIFJFU1QKKzxVMzJBMT4gIjxVMDAyOD48VTRGMTE+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBJREVPR1JBUEggQ09QWQorPFUzMkEyPiAiPFUwMDI4PjxVNTE5OT48VTAwMjk+IgorJSBDSVJDTEVEIElERU9HUkFQSCBDT1JSRUNUCis8VTMyQTM+ICI8VTAwMjg+PFU2QjYzPjxVMDAyOT4iCislIENJUkNMRUQgSURFT0dSQVBIIEhJR0gKKzxVMzJBND4gIjxVMDAyOD48VTRFMEE+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBJREVPR1JBUEggQ0VOVFJFCis8VTMyQTU+ICI8VTAwMjg+PFU0RTJEPjxVMDAyOT4iCislIENJUkNMRUQgSURFT0dSQVBIIExPVworPFUzMkE2PiAiPFUwMDI4PjxVNEUwQj48VTAwMjk+IgorJSBDSVJDTEVEIElERU9HUkFQSCBMRUZUCis8VTMyQTc+ICI8VTAwMjg+PFU1REU2PjxVMDAyOT4iCislIENJUkNMRUQgSURFT0dSQVBIIFJJR0hUCis8VTMyQTg+ICI8VTAwMjg+PFU1M0YzPjxVMDAyOT4iCislIENJUkNMRUQgSURFT0dSQVBIIE1FRElDSU5FCis8VTMyQTk+ICI8VTAwMjg+PFU1MzNCPjxVMDAyOT4iCislIENJUkNMRUQgSURFT0dSQVBIIFJFTElHSU9OCis8VTMyQUE+ICI8VTAwMjg+PFU1Qjk3PjxVMDAyOT4iCislIENJUkNMRUQgSURFT0dSQVBIIFNUVURZCis8VTMyQUI+ICI8VTAwMjg+PFU1QjY2PjxVMDAyOT4iCislIENJUkNMRUQgSURFT0dSQVBIIFNVUEVSVklTRQorPFUzMkFDPiAiPFUwMDI4PjxVNzZFMz48VTAwMjk+IgorJSBDSVJDTEVEIElERU9HUkFQSCBFTlRFUlBSSVNFCis8VTMyQUQ+ICI8VTAwMjg+PFU0RjAxPjxVMDAyOT4iCislIENJUkNMRUQgSURFT0dSQVBIIFJFU09VUkNFCis8VTMyQUU+ICI8VTAwMjg+PFU4Q0M3PjxVMDAyOT4iCislIENJUkNMRUQgSURFT0dSQVBIIEFMTElBTkNFCis8VTMyQUY+ICI8VTAwMjg+PFU1MzU0PjxVMDAyOT4iCislIENJUkNMRUQgSURFT0dSQVBIIE5JR0hUCis8VTMyQjA+ICI8VTAwMjg+PFU1OTFDPjxVMDAyOT4iCislIENJUkNMRUQgTlVNQkVSIFRISVJUWSBTSVgKKzxVMzJCMT4gIjxVMDAyOD48VTAwMzM+PFUwMDM2PjxVMDAyOT4iCislIENJUkNMRUQgTlVNQkVSIFRISVJUWSBTRVZFTgorPFUzMkIyPiAiPFUwMDI4PjxVMDAzMz48VTAwMzc+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBOVU1CRVIgVEhJUlRZIEVJR0hUCis8VTMyQjM+ICI8VTAwMjg+PFUwMDMzPjxVMDAzOD48VTAwMjk+IgorJSBDSVJDTEVEIE5VTUJFUiBUSElSVFkgTklORQorPFUzMkI0PiAiPFUwMDI4PjxVMDAzMz48VTAwMzk+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBOVU1CRVIgRk9SVFkKKzxVMzJCNT4gIjxVMDAyOD48VTAwMzQ+PFUwMDMwPjxVMDAyOT4iCislIENJUkNMRUQgTlVNQkVSIEZPUlRZIE9ORQorPFUzMkI2PiAiPFUwMDI4PjxVMDAzND48VTAwMzE+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBOVU1CRVIgRk9SVFkgVFdPCis8VTMyQjc+ICI8VTAwMjg+PFUwMDM0PjxVMDAzMj48VTAwMjk+IgorJSBDSVJDTEVEIE5VTUJFUiBGT1JUWSBUSFJFRQorPFUzMkI4PiAiPFUwMDI4PjxVMDAzND48VTAwMzM+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBOVU1CRVIgRk9SVFkgRk9VUgorPFUzMkI5PiAiPFUwMDI4PjxVMDAzND48VTAwMzQ+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBOVU1CRVIgRk9SVFkgRklWRQorPFUzMkJBPiAiPFUwMDI4PjxVMDAzND48VTAwMzU+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBOVU1CRVIgRk9SVFkgU0lYCis8VTMyQkI+ICI8VTAwMjg+PFUwMDM0PjxVMDAzNj48VTAwMjk+IgorJSBDSVJDTEVEIE5VTUJFUiBGT1JUWSBTRVZFTgorPFUzMkJDPiAiPFUwMDI4PjxVMDAzND48VTAwMzc+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBOVU1CRVIgRk9SVFkgRUlHSFQKKzxVMzJCRD4gIjxVMDAyOD48VTAwMzQ+PFUwMDM4PjxVMDAyOT4iCislIENJUkNMRUQgTlVNQkVSIEZPUlRZIE5JTkUKKzxVMzJCRT4gIjxVMDAyOD48VTAwMzQ+PFUwMDM5PjxVMDAyOT4iCislIENJUkNMRUQgTlVNQkVSIEZJRlRZCis8VTMyQkY+ICI8VTAwMjg+PFUwMDM1PjxVMDAzMD48VTAwMjk+IgorJSBDSVJDTEVEIEtBVEFLQU5BIEEKKzxVMzJEMD4gIjxVMDAyOD48VTMwQTI+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBLQVRBS0FOQSBJCis8VTMyRDE+ICI8VTAwMjg+PFUzMEE0PjxVMDAyOT4iCislIENJUkNMRUQgS0FUQUtBTkEgVQorPFUzMkQyPiAiPFUwMDI4PjxVMzBBNj48VTAwMjk+IgorJSBDSVJDTEVEIEtBVEFLQU5BIEUKKzxVMzJEMz4gIjxVMDAyOD48VTMwQTg+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBLQVRBS0FOQSBPCis8VTMyRDQ+ICI8VTAwMjg+PFUzMEFBPjxVMDAyOT4iCislIENJUkNMRUQgS0FUQUtBTkEgS0EKKzxVMzJENT4gIjxVMDAyOD48VTMwQUI+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBLQVRBS0FOQSBLSQorPFUzMkQ2PiAiPFUwMDI4PjxVMzBBRD48VTAwMjk+IgorJSBDSVJDTEVEIEtBVEFLQU5BIEtVCis8VTMyRDc+ICI8VTAwMjg+PFUzMEFGPjxVMDAyOT4iCislIENJUkNMRUQgS0FUQUtBTkEgS0UKKzxVMzJEOD4gIjxVMDAyOD48VTMwQjE+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBLQVRBS0FOQSBLTworPFUzMkQ5PiAiPFUwMDI4PjxVMzBCMz48VTAwMjk+IgorJSBDSVJDTEVEIEtBVEFLQU5BIFNBCis8VTMyREE+ICI8VTAwMjg+PFUzMEI1PjxVMDAyOT4iCislIENJUkNMRUQgS0FUQUtBTkEgU0kKKzxVMzJEQj4gIjxVMDAyOD48VTMwQjc+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBLQVRBS0FOQSBTVQorPFUzMkRDPiAiPFUwMDI4PjxVMzBCOT48VTAwMjk+IgorJSBDSVJDTEVEIEtBVEFLQU5BIFNFCis8VTMyREQ+ICI8VTAwMjg+PFUzMEJCPjxVMDAyOT4iCislIENJUkNMRUQgS0FUQUtBTkEgU08KKzxVMzJERT4gIjxVMDAyOD48VTMwQkQ+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBLQVRBS0FOQSBUQQorPFUzMkRGPiAiPFUwMDI4PjxVMzBCRj48VTAwMjk+IgorJSBDSVJDTEVEIEtBVEFLQU5BIFRJCis8VTMyRTA+ICI8VTAwMjg+PFUzMEMxPjxVMDAyOT4iCislIENJUkNMRUQgS0FUQUtBTkEgVFUKKzxVMzJFMT4gIjxVMDAyOD48VTMwQzQ+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBLQVRBS0FOQSBURQorPFUzMkUyPiAiPFUwMDI4PjxVMzBDNj48VTAwMjk+IgorJSBDSVJDTEVEIEtBVEFLQU5BIFRPCis8VTMyRTM+ICI8VTAwMjg+PFUzMEM4PjxVMDAyOT4iCislIENJUkNMRUQgS0FUQUtBTkEgTkEKKzxVMzJFND4gIjxVMDAyOD48VTMwQ0E+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBLQVRBS0FOQSBOSQorPFUzMkU1PiAiPFUwMDI4PjxVMzBDQj48VTAwMjk+IgorJSBDSVJDTEVEIEtBVEFLQU5BIE5VCis8VTMyRTY+ICI8VTAwMjg+PFUzMENDPjxVMDAyOT4iCislIENJUkNMRUQgS0FUQUtBTkEgTkUKKzxVMzJFNz4gIjxVMDAyOD48VTMwQ0Q+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBLQVRBS0FOQSBOTworPFUzMkU4PiAiPFUwMDI4PjxVMzBDRT48VTAwMjk+IgorJSBDSVJDTEVEIEtBVEFLQU5BIEhBCis8VTMyRTk+ICI8VTAwMjg+PFUzMENGPjxVMDAyOT4iCislIENJUkNMRUQgS0FUQUtBTkEgSEkKKzxVMzJFQT4gIjxVMDAyOD48VTMwRDI+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBLQVRBS0FOQSBIVQorPFUzMkVCPiAiPFUwMDI4PjxVMzBENT48VTAwMjk+IgorJSBDSVJDTEVEIEtBVEFLQU5BIEhFCis8VTMyRUM+ICI8VTAwMjg+PFUzMEQ4PjxVMDAyOT4iCislIENJUkNMRUQgS0FUQUtBTkEgSE8KKzxVMzJFRD4gIjxVMDAyOD48VTMwREI+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBLQVRBS0FOQSBNQQorPFUzMkVFPiAiPFUwMDI4PjxVMzBERT48VTAwMjk+IgorJSBDSVJDTEVEIEtBVEFLQU5BIE1JCis8VTMyRUY+ICI8VTAwMjg+PFUzMERGPjxVMDAyOT4iCislIENJUkNMRUQgS0FUQUtBTkEgTVUKKzxVMzJGMD4gIjxVMDAyOD48VTMwRTA+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBLQVRBS0FOQSBNRQorPFUzMkYxPiAiPFUwMDI4PjxVMzBFMT48VTAwMjk+IgorJSBDSVJDTEVEIEtBVEFLQU5BIE1PCis8VTMyRjI+ICI8VTAwMjg+PFUzMEUyPjxVMDAyOT4iCislIENJUkNMRUQgS0FUQUtBTkEgWUEKKzxVMzJGMz4gIjxVMDAyOD48VTMwRTQ+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBLQVRBS0FOQSBZVQorPFUzMkY0PiAiPFUwMDI4PjxVMzBFNj48VTAwMjk+IgorJSBDSVJDTEVEIEtBVEFLQU5BIFlPCis8VTMyRjU+ICI8VTAwMjg+PFUzMEU4PjxVMDAyOT4iCislIENJUkNMRUQgS0FUQUtBTkEgUkEKKzxVMzJGNj4gIjxVMDAyOD48VTMwRTk+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBLQVRBS0FOQSBSSQorPFUzMkY3PiAiPFUwMDI4PjxVMzBFQT48VTAwMjk+IgorJSBDSVJDTEVEIEtBVEFLQU5BIFJVCis8VTMyRjg+ICI8VTAwMjg+PFUzMEVCPjxVMDAyOT4iCislIENJUkNMRUQgS0FUQUtBTkEgUkUKKzxVMzJGOT4gIjxVMDAyOD48VTMwRUM+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBLQVRBS0FOQSBSTworPFUzMkZBPiAiPFUwMDI4PjxVMzBFRD48VTAwMjk+IgorJSBDSVJDTEVEIEtBVEFLQU5BIFdBCis8VTMyRkI+ICI8VTAwMjg+PFUzMEVGPjxVMDAyOT4iCislIENJUkNMRUQgS0FUQUtBTkEgV0kKKzxVMzJGQz4gIjxVMDAyOD48VTMwRjA+PFUwMDI5PiIKKyUgQ0lSQ0xFRCBLQVRBS0FOQSBXRQorPFUzMkZEPiAiPFUwMDI4PjxVMzBGMT48VTAwMjk+IgorJSBDSVJDTEVEIEtBVEFLQU5BIFdPCis8VTMyRkU+ICI8VTAwMjg+PFUzMEYyPjxVMDAyOT4iCisKK3RyYW5zbGl0X2VuZAorCitFTkQgTENfQ1RZUEUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RyYW5zbGl0X2Nqa19jb21wYXQgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy90cmFuc2xpdF9jamtfY29tcGF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3M2U1ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy90cmFuc2xpdF9jamtfY29tcGF0CkBAIC0wLDAgKzEsMjE4OCBAQAorZXNjYXBlX2NoYXIgLworY29tbWVudF9jaGFyICUKKworJSBUcmFuc2xpdGVyYXRpb25zIG9mIENKSyBjb21wYXRpYmlsaXR5IGNoYXJhY3RlcnMuCislIEdlbmVyYXRlZCB0aHJvdWdoCislICAgJCBncmVwICdeW147XSo7W147XSo7W147XSo7W147XSo7W147XSo7PHNxdWFyZT5bXjtdKjsnIFVuaWNvZGVEYXRhLnR4dCB8IFwKKyUgICAgIHNlZCAtZSAncy9eXChbXjtdKlwpO1woW147XSpcKTtbXjtdKjtbXjtdKjtbXjtdKjs8c3F1YXJlPiBcKFteO10qXCk7LiokLzxVXDE+ICI8VVwzPiIlIFwyLycgfCBzZWQgLWUgJ2gnIC1lICdzL15cKFteJV0qXCklIC4qJC9cMS8nIC1lICdzL1woWzAtOUEtRl1cKSBcKFswLTlBLUZdXCkvXDE+PFVcMi9nJyAtZSAneCcgLWUgJ3MvXlteJV0qXCglIC4qXCkkL1wxLycgLWUgJ0cnCislIGFuZAorJSAgICQgZ3JlcCAnW147XSo7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBIW147XSo7W147XSo7W147XSo7W147XSo7W147XScgVW5pY29kZURhdGEudHh0IHwgXAorJSAgICAgc2VkIC1lICdzL15cKFteO10qXCk7XChbXjtdKlwpO1teO10qO1teO10qO1teO10qO1woW147XSpcKTsuKiQvPFVcMT4gPFVcMz4lIFwyLycgfCBzZWQgLWUgJ2gnIC1lICdzL15cKFteJV0qXCklIC4qJC9cMS8nIC1lICdzL1woWzAtOUEtRl1cKSBcKFswLTlBLUZdXCkvXDE+PFVcMi9nJyAtZSAneCcgLWUgJ3MvXlteJV0qXCglIC4qXCkkL1wxLycgLWUgJ0cnIHwgXAorJSAgICAgc2VkIC1lICdzLzxVXCguLi4uLlwpPi88VTAwMFwxPi9nJworCitMQ19DVFlQRQorCit0cmFuc2xpdF9zdGFydAorCislIFNRVUFSRSBBUEFBVE8KKzxVMzMwMD4gIjxVMzBBMj48VTMwRDE+PFUzMEZDPjxVMzBDOD4iCislIFNRVUFSRSBBUlVIVUEKKzxVMzMwMT4gIjxVMzBBMj48VTMwRUI+PFUzMEQ1PjxVMzBBMT4iCislIFNRVUFSRSBBTlBFQQorPFUzMzAyPiAiPFUzMEEyPjxVMzBGMz48VTMwREE+PFUzMEEyPiIKKyUgU1FVQVJFIEFBUlUKKzxVMzMwMz4gIjxVMzBBMj48VTMwRkM+PFUzMEVCPiIKKyUgU1FVQVJFIElOSU5HVQorPFUzMzA0PiAiPFUzMEE0PjxVMzBDQj48VTMwRjM+PFUzMEIwPiIKKyUgU1FVQVJFIElOVEkKKzxVMzMwNT4gIjxVMzBBND48VTMwRjM+PFUzMEMxPiIKKyUgU1FVQVJFIFVPTgorPFUzMzA2PiAiPFUzMEE2PjxVMzBBOT48VTMwRjM+IgorJSBTUVVBUkUgRVNVS1VVRE8KKzxVMzMwNz4gIjxVMzBBOD48VTMwQjk+PFUzMEFGPjxVMzBGQz48VTMwQzk+IgorJSBTUVVBUkUgRUVLQUEKKzxVMzMwOD4gIjxVMzBBOD48VTMwRkM+PFUzMEFCPjxVMzBGQz4iCislIFNRVUFSRSBPTlNVCis8VTMzMDk+ICI8VTMwQUE+PFUzMEYzPjxVMzBCOT4iCislIFNRVUFSRSBPT01VCis8VTMzMEE+ICI8VTMwQUE+PFUzMEZDPjxVMzBFMD4iCislIFNRVUFSRSBLQUlSSQorPFUzMzBCPiAiPFUzMEFCPjxVMzBBND48VTMwRUE+IgorJSBTUVVBUkUgS0FSQVRUTworPFUzMzBDPiAiPFUzMEFCPjxVMzBFOT48VTMwQzM+PFUzMEM4PiIKKyUgU1FVQVJFIEtBUk9SSUkKKzxVMzMwRD4gIjxVMzBBQj48VTMwRUQ+PFUzMEVBPjxVMzBGQz4iCislIFNRVUFSRSBHQVJPTgorPFUzMzBFPiAiPFUzMEFDPjxVMzBFRD48VTMwRjM+IgorJSBTUVVBUkUgR0FOTUEKKzxVMzMwRj4gIjxVMzBBQz48VTMwRjM+PFUzMERFPiIKKyUgU1FVQVJFIEdJR0EKKzxVMzMxMD4gIjxVMzBBRT48VTMwQUM+IgorJSBTUVVBUkUgR0lOSUkKKzxVMzMxMT4gIjxVMzBBRT48VTMwQ0I+PFUzMEZDPiIKKyUgU1FVQVJFIEtZVVJJSQorPFUzMzEyPiAiPFUzMEFEPjxVMzBFNT48VTMwRUE+PFUzMEZDPiIKKyUgU1FVQVJFIEdJUlVEQUEKKzxVMzMxMz4gIjxVMzBBRT48VTMwRUI+PFUzMEMwPjxVMzBGQz4iCislIFNRVUFSRSBLSVJPCis8VTMzMTQ+ICI8VTMwQUQ+PFUzMEVEPiIKKyUgU1FVQVJFIEtJUk9HVVJBTVUKKzxVMzMxNT4gIjxVMzBBRD48VTMwRUQ+PFUzMEIwPjxVMzBFOT48VTMwRTA+IgorJSBTUVVBUkUgS0lST01FRVRPUlUKKzxVMzMxNj4gIjxVMzBBRD48VTMwRUQ+PFUzMEUxPjxVMzBGQz48VTMwQzg+PFUzMEVCPiIKKyUgU1FVQVJFIEtJUk9XQVRUTworPFUzMzE3PiAiPFUzMEFEPjxVMzBFRD48VTMwRUY+PFUzMEMzPjxVMzBDOD4iCislIFNRVUFSRSBHVVJBTVUKKzxVMzMxOD4gIjxVMzBCMD48VTMwRTk+PFUzMEUwPiIKKyUgU1FVQVJFIEdVUkFNVVRPTgorPFUzMzE5PiAiPFUzMEIwPjxVMzBFOT48VTMwRTA+PFUzMEM4PjxVMzBGMz4iCislIFNRVUFSRSBLVVJVWkVJUk8KKzxVMzMxQT4gIjxVMzBBRj48VTMwRUI+PFUzMEJDPjxVMzBBND48VTMwRUQ+IgorJSBTUVVBUkUgS1VST09ORQorPFUzMzFCPiAiPFUzMEFGPjxVMzBFRD48VTMwRkM+PFUzMENEPiIKKyUgU1FVQVJFIEtFRVNVCis8VTMzMUM+ICI8VTMwQjE+PFUzMEZDPjxVMzBCOT4iCislIFNRVUFSRSBLT1JVTkEKKzxVMzMxRD4gIjxVMzBCMz48VTMwRUI+PFUzMENBPiIKKyUgU1FVQVJFIEtPT1BPCis8VTMzMUU+ICI8VTMwQjM+PFUzMEZDPjxVMzBERD4iCislIFNRVUFSRSBTQUlLVVJVCis8VTMzMUY+ICI8VTMwQjU+PFUzMEE0PjxVMzBBRj48VTMwRUI+IgorJSBTUVVBUkUgU0FOVElJTVUKKzxVMzMyMD4gIjxVMzBCNT48VTMwRjM+PFUzMEMxPjxVMzBGQz48VTMwRTA+IgorJSBTUVVBUkUgU0lSSU5HVQorPFUzMzIxPiAiPFUzMEI3PjxVMzBFQT48VTMwRjM+PFUzMEIwPiIKKyUgU1FVQVJFIFNFTlRJCis8VTMzMjI+ICI8VTMwQkI+PFUzMEYzPjxVMzBDMT4iCislIFNRVUFSRSBTRU5UTworPFUzMzIzPiAiPFUzMEJCPjxVMzBGMz48VTMwQzg+IgorJSBTUVVBUkUgREFBU1UKKzxVMzMyND4gIjxVMzBDMD48VTMwRkM+PFUzMEI5PiIKKyUgU1FVQVJFIERFU0kKKzxVMzMyNT4gIjxVMzBDNz48VTMwQjc+IgorJSBTUVVBUkUgRE9SVQorPFUzMzI2PiAiPFUzMEM5PjxVMzBFQj4iCislIFNRVUFSRSBUT04KKzxVMzMyNz4gIjxVMzBDOD48VTMwRjM+IgorJSBTUVVBUkUgTkFOTworPFUzMzI4PiAiPFUzMENBPjxVMzBDRT4iCislIFNRVUFSRSBOT1RUTworPFUzMzI5PiAiPFUzMENFPjxVMzBDMz48VTMwQzg+IgorJSBTUVVBUkUgSEFJVFUKKzxVMzMyQT4gIjxVMzBDRj48VTMwQTQ+PFUzMEM0PiIKKyUgU1FVQVJFIFBBQVNFTlRPCis8VTMzMkI+ICI8VTMwRDE+PFUzMEZDPjxVMzBCQj48VTMwRjM+PFUzMEM4PiIKKyUgU1FVQVJFIFBBQVRVCis8VTMzMkM+ICI8VTMwRDE+PFUzMEZDPjxVMzBDND4iCislIFNRVUFSRSBCQUFSRVJVCis8VTMzMkQ+ICI8VTMwRDA+PFUzMEZDPjxVMzBFQz48VTMwRUI+IgorJSBTUVVBUkUgUElBU1VUT1JVCis8VTMzMkU+ICI8VTMwRDQ+PFUzMEEyPjxVMzBCOT48VTMwQzg+PFUzMEVCPiIKKyUgU1FVQVJFIFBJS1VSVQorPFUzMzJGPiAiPFUzMEQ0PjxVMzBBRj48VTMwRUI+IgorJSBTUVVBUkUgUElLTworPFUzMzMwPiAiPFUzMEQ0PjxVMzBCMz4iCislIFNRVUFSRSBCSVJVCis8VTMzMzE+ICI8VTMwRDM+PFUzMEVCPiIKKyUgU1FVQVJFIEhVQVJBRERPCis8VTMzMzI+ICI8VTMwRDU+PFUzMEExPjxVMzBFOT48VTMwQzM+PFUzMEM5PiIKKyUgU1FVQVJFIEhVSUlUTworPFUzMzMzPiAiPFUzMEQ1PjxVMzBBMz48VTMwRkM+PFUzMEM4PiIKKyUgU1FVQVJFIEJVU1NZRVJVCis8VTMzMzQ+ICI8VTMwRDY+PFUzMEMzPjxVMzBCNz48VTMwQTc+PFUzMEVCPiIKKyUgU1FVQVJFIEhVUkFOCis8VTMzMzU+ICI8VTMwRDU+PFUzMEU5PjxVMzBGMz4iCislIFNRVUFSRSBIRUtVVEFBUlUKKzxVMzMzNj4gIjxVMzBEOD48VTMwQUY+PFUzMEJGPjxVMzBGQz48VTMwRUI+IgorJSBTUVVBUkUgUEVTTworPFUzMzM3PiAiPFUzMERBPjxVMzBCRD4iCislIFNRVUFSRSBQRU5JSEkKKzxVMzMzOD4gIjxVMzBEQT48VTMwQ0I+PFUzMEQyPiIKKyUgU1FVQVJFIEhFUlVUVQorPFUzMzM5PiAiPFUzMEQ4PjxVMzBFQj48VTMwQzQ+IgorJSBTUVVBUkUgUEVOU1UKKzxVMzMzQT4gIjxVMzBEQT48VTMwRjM+PFUzMEI5PiIKKyUgU1FVQVJFIFBFRVpJCis8VTMzM0I+ICI8VTMwREE+PFUzMEZDPjxVMzBCOD4iCislIFNRVUFSRSBCRUVUQQorPFUzMzNDPiAiPFUzMEQ5PjxVMzBGQz48VTMwQkY+IgorJSBTUVVBUkUgUE9JTlRPCis8VTMzM0Q+ICI8VTMwREQ+PFUzMEE0PjxVMzBGMz48VTMwQzg+IgorJSBTUVVBUkUgQk9SVVRPCis8VTMzM0U+ICI8VTMwREM+PFUzMEVCPjxVMzBDOD4iCislIFNRVUFSRSBIT04KKzxVMzMzRj4gIjxVMzBEQj48VTMwRjM+IgorJSBTUVVBUkUgUE9ORE8KKzxVMzM0MD4gIjxVMzBERD48VTMwRjM+PFUzMEM5PiIKKyUgU1FVQVJFIEhPT1JVCis8VTMzNDE+ICI8VTMwREI+PFUzMEZDPjxVMzBFQj4iCislIFNRVUFSRSBIT09OCis8VTMzNDI+ICI8VTMwREI+PFUzMEZDPjxVMzBGMz4iCislIFNRVUFSRSBNQUlLVVJPCis8VTMzNDM+ICI8VTMwREU+PFUzMEE0PjxVMzBBRj48VTMwRUQ+IgorJSBTUVVBUkUgTUFJUlUKKzxVMzM0ND4gIjxVMzBERT48VTMwQTQ+PFUzMEVCPiIKKyUgU1FVQVJFIE1BSEhBCis8VTMzNDU+ICI8VTMwREU+PFUzMEMzPjxVMzBDRj4iCislIFNRVUFSRSBNQVJVS1UKKzxVMzM0Nj4gIjxVMzBERT48VTMwRUI+PFUzMEFGPiIKKyUgU1FVQVJFIE1BTlNZT04KKzxVMzM0Nz4gIjxVMzBERT48VTMwRjM+PFUzMEI3PjxVMzBFNz48VTMwRjM+IgorJSBTUVVBUkUgTUlLVVJPTgorPFUzMzQ4PiAiPFUzMERGPjxVMzBBRj48VTMwRUQ+PFUzMEYzPiIKKyUgU1FVQVJFIE1JUkkKKzxVMzM0OT4gIjxVMzBERj48VTMwRUE+IgorJSBTUVVBUkUgTUlSSUJBQVJVCis8VTMzNEE+ICI8VTMwREY+PFUzMEVBPjxVMzBEMD48VTMwRkM+PFUzMEVCPiIKKyUgU1FVQVJFIE1FR0EKKzxVMzM0Qj4gIjxVMzBFMT48VTMwQUM+IgorJSBTUVVBUkUgTUVHQVRPTgorPFUzMzRDPiAiPFUzMEUxPjxVMzBBQz48VTMwQzg+PFUzMEYzPiIKKyUgU1FVQVJFIE1FRVRPUlUKKzxVMzM0RD4gIjxVMzBFMT48VTMwRkM+PFUzMEM4PjxVMzBFQj4iCislIFNRVUFSRSBZQUFETworPFUzMzRFPiAiPFUzMEU0PjxVMzBGQz48VTMwQzk+IgorJSBTUVVBUkUgWUFBUlUKKzxVMzM0Rj4gIjxVMzBFND48VTMwRkM+PFUzMEVCPiIKKyUgU1FVQVJFIFlVQU4KKzxVMzM1MD4gIjxVMzBFNj48VTMwQTI+PFUzMEYzPiIKKyUgU1FVQVJFIFJJVFRPUlUKKzxVMzM1MT4gIjxVMzBFQT48VTMwQzM+PFUzMEM4PjxVMzBFQj4iCislIFNRVUFSRSBSSVJBCis8VTMzNTI+ICI8VTMwRUE+PFUzMEU5PiIKKyUgU1FVQVJFIFJVUElJCis8VTMzNTM+ICI8VTMwRUI+PFUzMEQ0PjxVMzBGQz4iCislIFNRVUFSRSBSVVVCVVJVCis8VTMzNTQ+ICI8VTMwRUI+PFUzMEZDPjxVMzBENj48VTMwRUI+IgorJSBTUVVBUkUgUkVNVQorPFUzMzU1PiAiPFUzMEVDPjxVMzBFMD4iCislIFNRVUFSRSBSRU5UT0dFTgorPFUzMzU2PiAiPFUzMEVDPjxVMzBGMz48VTMwQzg+PFUzMEIyPjxVMzBGMz4iCislIFNRVUFSRSBXQVRUTworPFUzMzU3PiAiPFUzMEVGPjxVMzBDMz48VTMwQzg+IgorJSBTUVVBUkUgSFBBCis8VTMzNzE+ICI8VTAwNjg+PFUwMDUwPjxVMDA2MT4iCislIFNRVUFSRSBEQQorPFUzMzcyPiAiPFUwMDY0PjxVMDA2MT4iCislIFNRVUFSRSBBVQorPFUzMzczPiAiPFUwMDQxPjxVMDA1NT4iCislIFNRVUFSRSBCQVIKKzxVMzM3ND4gIjxVMDA2Mj48VTAwNjE+PFUwMDcyPiIKKyUgU1FVQVJFIE9WCis8VTMzNzU+ICI8VTAwNkY+PFUwMDU2PiIKKyUgU1FVQVJFIFBDCis8VTMzNzY+ICI8VTAwNzA+PFUwMDYzPiIKKyUgU1FVQVJFIEVSQSBOQU1FIEhFSVNFSQorPFUzMzdCPiAiPFU1RTczPjxVNjIxMD4iCislIFNRVUFSRSBFUkEgTkFNRSBTWU9VV0EKKzxVMzM3Qz4gIjxVNjYyRD48VTU0OEM+IgorJSBTUVVBUkUgRVJBIE5BTUUgVEFJU1lPVQorPFUzMzdEPiAiPFU1OTI3PjxVNkI2Mz4iCislIFNRVUFSRSBFUkEgTkFNRSBNRUlaSQorPFUzMzdFPiAiPFU2NjBFPjxVNkNCQj4iCislIFNRVUFSRSBDT1JQT1JBVElPTgorPFUzMzdGPiAiPFU2ODJBPjxVNUYwRj48VTRGMUE+PFU3OTNFPiIKKyUgU1FVQVJFIFBBIEFNUFMKKzxVMzM4MD4gIjxVMDA3MD48VTAwNDE+IgorJSBTUVVBUkUgTkEKKzxVMzM4MT4gIjxVMDA2RT48VTAwNDE+IgorJSBTUVVBUkUgTVUgQQorPFUzMzgyPiAiPFUwM0JDPjxVMDA0MT4iOyI8VTAwQjU+PFUwMDQxPiI7IjxVMDA3NT48VTAwNDE+IgorJSBTUVVBUkUgTUEKKzxVMzM4Mz4gIjxVMDA2RD48VTAwNDE+IgorJSBTUVVBUkUgS0EKKzxVMzM4ND4gIjxVMDA2Qj48VTAwNDE+IgorJSBTUVVBUkUgS0IKKzxVMzM4NT4gIjxVMDA0Qj48VTAwNDI+IgorJSBTUVVBUkUgTUIKKzxVMzM4Nj4gIjxVMDA0RD48VTAwNDI+IgorJSBTUVVBUkUgR0IKKzxVMzM4Nz4gIjxVMDA0Nz48VTAwNDI+IgorJSBTUVVBUkUgQ0FMCis8VTMzODg+ICI8VTAwNjM+PFUwMDYxPjxVMDA2Qz4iCislIFNRVUFSRSBLQ0FMCis8VTMzODk+ICI8VTAwNkI+PFUwMDYzPjxVMDA2MT48VTAwNkM+IgorJSBTUVVBUkUgUEYKKzxVMzM4QT4gIjxVMDA3MD48VTAwNDY+IgorJSBTUVVBUkUgTkYKKzxVMzM4Qj4gIjxVMDA2RT48VTAwNDY+IgorJSBTUVVBUkUgTVUgRgorPFUzMzhDPiAiPFUwM0JDPjxVMDA0Nj4iOyI8VTAwQjU+PFUwMDQ2PiI7IjxVMDA3NT48VTAwNDY+IgorJSBTUVVBUkUgTVUgRworPFUzMzhEPiAiPFUwM0JDPjxVMDA2Nz4iOyI8VTAwQjU+PFUwMDY3PiI7IjxVMDA3NT48VTAwNjc+IgorJSBTUVVBUkUgTUcKKzxVMzM4RT4gIjxVMDA2RD48VTAwNjc+IgorJSBTUVVBUkUgS0cKKzxVMzM4Rj4gIjxVMDA2Qj48VTAwNjc+IgorJSBTUVVBUkUgSFoKKzxVMzM5MD4gIjxVMDA0OD48VTAwN0E+IgorJSBTUVVBUkUgS0haCis8VTMzOTE+ICI8VTAwNkI+PFUwMDQ4PjxVMDA3QT4iCislIFNRVUFSRSBNSFoKKzxVMzM5Mj4gIjxVMDA0RD48VTAwNDg+PFUwMDdBPiIKKyUgU1FVQVJFIEdIWgorPFUzMzkzPiAiPFUwMDQ3PjxVMDA0OD48VTAwN0E+IgorJSBTUVVBUkUgVEhaCis8VTMzOTQ+ICI8VTAwNTQ+PFUwMDQ4PjxVMDA3QT4iCislIFNRVUFSRSBNVSBMCis8VTMzOTU+ICI8VTAzQkM+PFUyMTEzPiI7IjxVMDNCQz48VTAwNkM+IjsiPFUwMEI1PjxVMDA2Qz4iOyI8VTAwNzU+PFUwMDZDPiIKKyUgU1FVQVJFIE1MCis8VTMzOTY+ICI8VTAwNkQ+PFUyMTEzPiI7IjxVMDA2RD48VTAwNkM+IgorJSBTUVVBUkUgREwKKzxVMzM5Nz4gIjxVMDA2ND48VTIxMTM+IjsiPFUwMDY0PjxVMDA2Qz4iCislIFNRVUFSRSBLTAorPFUzMzk4PiAiPFUwMDZCPjxVMjExMz4iOyI8VTAwNkI+PFUwMDZDPiIKKyUgU1FVQVJFIEZNCis8VTMzOTk+ICI8VTAwNjY+PFUwMDZEPiIKKyUgU1FVQVJFIE5NCis8VTMzOUE+ICI8VTAwNkU+PFUwMDZEPiIKKyUgU1FVQVJFIE1VIE0KKzxVMzM5Qj4gIjxVMDNCQz48VTAwNkQ+IjsiPFUwMEI1PjxVMDA2RD4iOyI8VTAwNzU+PFUwMDZEPiIKKyUgU1FVQVJFIE1NCis8VTMzOUM+ICI8VTAwNkQ+PFUwMDZEPiIKKyUgU1FVQVJFIENNCis8VTMzOUQ+ICI8VTAwNjM+PFUwMDZEPiIKKyUgU1FVQVJFIEtNCis8VTMzOUU+ICI8VTAwNkI+PFUwMDZEPiIKKyUgU1FVQVJFIE1NIFNRVUFSRUQKKzxVMzM5Rj4gIjxVMDA2RD48VTAwNkQ+PFUwMEIyPiI7IjxVMDA2RD48VTAwNkQ+PFUwMDVFPjxVMDAzMj4iCislIFNRVUFSRSBDTSBTUVVBUkVECis8VTMzQTA+ICI8VTAwNjM+PFUwMDZEPjxVMDBCMj4iOyI8VTAwNjM+PFUwMDZEPjxVMDA1RT48VTAwMzI+IgorJSBTUVVBUkUgTSBTUVVBUkVECis8VTMzQTE+ICI8VTAwNkQ+PFUwMEIyPiI7IjxVMDA2RD48VTAwNUU+PFUwMDMyPiIKKyUgU1FVQVJFIEtNIFNRVUFSRUQKKzxVMzNBMj4gIjxVMDA2Qj48VTAwNkQ+PFUwMEIyPiI7IjxVMDA2Qj48VTAwNkQ+PFUwMDVFPjxVMDAzMj4iCislIFNRVUFSRSBNTSBDVUJFRAorPFUzM0EzPiAiPFUwMDZEPjxVMDA2RD48VTAwQjM+IjsiPFUwMDZEPjxVMDA2RD48VTAwNUU+PFUwMDMzPiIKKyUgU1FVQVJFIENNIENVQkVECis8VTMzQTQ+ICI8VTAwNjM+PFUwMDZEPjxVMDBCMz4iOyI8VTAwNjM+PFUwMDZEPjxVMDA1RT48VTAwMzM+IgorJSBTUVVBUkUgTSBDVUJFRAorPFUzM0E1PiAiPFUwMDZEPjxVMDBCMz4iOyI8VTAwNkQ+PFUwMDVFPjxVMDAzMz4iCislIFNRVUFSRSBLTSBDVUJFRAorPFUzM0E2PiAiPFUwMDZCPjxVMDA2RD48VTAwQjM+IjsiPFUwMDZCPjxVMDA2RD48VTAwNUU+PFUwMDMzPiIKKyUgU1FVQVJFIE0gT1ZFUiBTCis8VTMzQTc+ICI8VTAwNkQ+PFUyMjE1PjxVMDA3Mz4iOyI8VTAwNkQ+PFUwMDJGPjxVMDA3Mz4iCislIFNRVUFSRSBNIE9WRVIgUyBTUVVBUkVECis8VTMzQTg+ICI8VTAwNkQ+PFUyMjE1PjxVMDA3Mz48VTAwQjI+IjsiPFUwMDZEPjxVMDAyRj48VTAwNzM+PFUwMEIyPiI7IjxVMDA2RD48VTAwMkY+PFUwMDczPjxVMDA1RT48VTAwMzI+IgorJSBTUVVBUkUgUEEKKzxVMzNBOT4gIjxVMDA1MD48VTAwNjE+IgorJSBTUVVBUkUgS1BBCis8VTMzQUE+ICI8VTAwNkI+PFUwMDUwPjxVMDA2MT4iCislIFNRVUFSRSBNUEEKKzxVMzNBQj4gIjxVMDA0RD48VTAwNTA+PFUwMDYxPiIKKyUgU1FVQVJFIEdQQQorPFUzM0FDPiAiPFUwMDQ3PjxVMDA1MD48VTAwNjE+IgorJSBTUVVBUkUgUkFECis8VTMzQUQ+ICI8VTAwNzI+PFUwMDYxPjxVMDA2ND4iCislIFNRVUFSRSBSQUQgT1ZFUiBTCis8VTMzQUU+ICI8VTAwNzI+PFUwMDYxPjxVMDA2ND48VTIyMTU+PFUwMDczPiI7IjxVMDA3Mj48VTAwNjE+PFUwMDY0PjxVMDAyRj48VTAwNzM+IgorJSBTUVVBUkUgUkFEIE9WRVIgUyBTUVVBUkVECis8VTMzQUY+ICI8VTAwNzI+PFUwMDYxPjxVMDA2ND48VTIyMTU+PFUwMDczPjxVMDBCMj4iOyI8VTAwNzI+PFUwMDYxPjxVMDA2ND48VTAwMkY+PFUwMDczPjxVMDBCMj4iOyI8VTAwNzI+PFUwMDYxPjxVMDA2ND48VTAwMkY+PFUwMDczPjxVMDA1RT48VTAwMzI+IgorJSBTUVVBUkUgUFMKKzxVMzNCMD4gIjxVMDA3MD48VTAwNzM+IgorJSBTUVVBUkUgTlMKKzxVMzNCMT4gIjxVMDA2RT48VTAwNzM+IgorJSBTUVVBUkUgTVUgUworPFUzM0IyPiAiPFUwM0JDPjxVMDA3Mz4iOyI8VTAwQjU+PFUwMDczPiI7IjxVMDA3NT48VTAwNzM+IgorJSBTUVVBUkUgTVMKKzxVMzNCMz4gIjxVMDA2RD48VTAwNzM+IgorJSBTUVVBUkUgUFYKKzxVMzNCND4gIjxVMDA3MD48VTAwNTY+IgorJSBTUVVBUkUgTlYKKzxVMzNCNT4gIjxVMDA2RT48VTAwNTY+IgorJSBTUVVBUkUgTVUgVgorPFUzM0I2PiAiPFUwM0JDPjxVMDA1Nj4iOyI8VTAwQjU+PFUwMDU2PiI7IjxVMDA3NT48VTAwNTY+IgorJSBTUVVBUkUgTVYKKzxVMzNCNz4gIjxVMDA2RD48VTAwNTY+IgorJSBTUVVBUkUgS1YKKzxVMzNCOD4gIjxVMDA2Qj48VTAwNTY+IgorJSBTUVVBUkUgTVYgTUVHQQorPFUzM0I5PiAiPFUwMDREPjxVMDA1Nj4iCislIFNRVUFSRSBQVworPFUzM0JBPiAiPFUwMDcwPjxVMDA1Nz4iCislIFNRVUFSRSBOVworPFUzM0JCPiAiPFUwMDZFPjxVMDA1Nz4iCislIFNRVUFSRSBNVSBXCis8VTMzQkM+ICI8VTAzQkM+PFUwMDU3PiI7IjxVMDBCNT48VTAwNTc+IjsiPFUwMDc1PjxVMDA1Nz4iCislIFNRVUFSRSBNVworPFUzM0JEPiAiPFUwMDZEPjxVMDA1Nz4iCislIFNRVUFSRSBLVworPFUzM0JFPiAiPFUwMDZCPjxVMDA1Nz4iCislIFNRVUFSRSBNVyBNRUdBCis8VTMzQkY+ICI8VTAwNEQ+PFUwMDU3PiIKKyUgU1FVQVJFIEsgT0hNCis8VTMzQzA+ICI8VTAwNkI+PFUwM0E5PiIKKyUgU1FVQVJFIE0gT0hNCis8VTMzQzE+ICI8VTAwNEQ+PFUwM0E5PiIKKyUgU1FVQVJFIEFNCis8VTMzQzI+ICI8VTAwNjE+PFUwMDJFPjxVMDA2RD48VTAwMkU+IgorJSBTUVVBUkUgQlEKKzxVMzNDMz4gIjxVMDA0Mj48VTAwNzE+IgorJSBTUVVBUkUgQ0MKKzxVMzNDND4gIjxVMDA2Mz48VTAwNjM+IgorJSBTUVVBUkUgQ0QKKzxVMzNDNT4gIjxVMDA2Mz48VTAwNjQ+IgorJSBTUVVBUkUgQyBPVkVSIEtHCis8VTMzQzY+ICI8VTAwNDM+PFUyMjE1PjxVMDA2Qj48VTAwNjc+IjsiPFUwMDQzPjxVMDAyRj48VTAwNkI+PFUwMDY3PiIKKyUgU1FVQVJFIENPCis8VTMzQzc+ICI8VTAwNDM+PFUwMDZGPjxVMDAyRT4iCislIFNRVUFSRSBEQgorPFUzM0M4PiAiPFUwMDY0PjxVMDA0Mj4iCislIFNRVUFSRSBHWQorPFUzM0M5PiAiPFUwMDQ3PjxVMDA3OT4iCislIFNRVUFSRSBIQQorPFUzM0NBPiAiPFUwMDY4PjxVMDA2MT4iCislIFNRVUFSRSBIUAorPFUzM0NCPiAiPFUwMDQ4PjxVMDA1MD4iCislIFNRVUFSRSBJTgorPFUzM0NDPiAiPFUwMDY5PjxVMDA2RT4iCislIFNRVUFSRSBLSworPFUzM0NEPiAiPFUwMDRCPjxVMDA0Qj4iCislIFNRVUFSRSBLTSBDQVBJVEFMCis8VTMzQ0U+ICI8VTAwNEI+PFUwMDREPiIKKyUgU1FVQVJFIEtUCis8VTMzQ0Y+ICI8VTAwNkI+PFUwMDc0PiIKKyUgU1FVQVJFIExNCis8VTMzRDA+ICI8VTAwNkM+PFUwMDZEPiIKKyUgU1FVQVJFIExOCis8VTMzRDE+ICI8VTAwNkM+PFUwMDZFPiIKKyUgU1FVQVJFIExPRworPFUzM0QyPiAiPFUwMDZDPjxVMDA2Rj48VTAwNjc+IgorJSBTUVVBUkUgTFgKKzxVMzNEMz4gIjxVMDA2Qz48VTAwNzg+IgorJSBTUVVBUkUgTUIgU01BTEwKKzxVMzNEND4gIjxVMDA2RD48VTAwNjI+IgorJSBTUVVBUkUgTUlMCis8VTMzRDU+ICI8VTAwNkQ+PFUwMDY5PjxVMDA2Qz4iCislIFNRVUFSRSBNT0wKKzxVMzNENj4gIjxVMDA2RD48VTAwNkY+PFUwMDZDPiIKKyUgU1FVQVJFIFBICis8VTMzRDc+ICI8VTAwNTA+PFUwMDQ4PiIKKyUgU1FVQVJFIFBNCis8VTMzRDg+ICI8VTAwNzA+PFUwMDJFPjxVMDA2RD48VTAwMkU+IgorJSBTUVVBUkUgUFBNCis8VTMzRDk+ICI8VTAwNTA+PFUwMDUwPjxVMDA0RD4iCislIFNRVUFSRSBQUgorPFUzM0RBPiAiPFUwMDUwPjxVMDA1Mj4iCislIFNRVUFSRSBTUgorPFUzM0RCPiAiPFUwMDczPjxVMDA3Mj4iCislIFNRVUFSRSBTVgorPFUzM0RDPiAiPFUwMDUzPjxVMDA3Nj4iCislIFNRVUFSRSBXQgorPFUzM0REPiAiPFUwMDU3PjxVMDA2Mj4iCislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTAwCis8VUY5MDA+IDxVOEM0OD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MDEKKzxVRjkwMT4gPFU2NkY0PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkwMgorPFVGOTAyPiA8VThFQ0E+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTAzCis8VUY5MDM+IDxVOENDOD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MDQKKzxVRjkwND4gPFU2RUQxPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkwNQorPFVGOTA1PiA8VTRFMzI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTA2Cis8VUY5MDY+IDxVNTNFNT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MDcKKzxVRjkwNz4gPFU5RjlDPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkwOAorPFVGOTA4PiA8VTlGOUM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTA5Cis8VUY5MDk+IDxVNTk1MT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MEEKKzxVRjkwQT4gPFU5MUQxPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkwQgorPFVGOTBCPiA8VTU1ODc+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTBDCis8VUY5MEM+IDxVNTk0OD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MEQKKzxVRjkwRD4gPFU2MUY2PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkwRQorPFVGOTBFPiA8VTc2Njk+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTBGCis8VUY5MEY+IDxVN0Y4NT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MTAKKzxVRjkxMD4gPFU4NjNGPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkxMQorPFVGOTExPiA8VTg3QkE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTEyCis8VUY5MTI+IDxVODhGOD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MTMKKzxVRjkxMz4gPFU5MDhGPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkxNAorPFVGOTE0PiA8VTZBMDI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTE1Cis8VUY5MTU+IDxVNkQxQj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MTYKKzxVRjkxNj4gPFU3MEQ5PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkxNworPFVGOTE3PiA8VTczREU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTE4Cis8VUY5MTg+IDxVODQzRD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MTkKKzxVRjkxOT4gPFU5MTZBPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkxQQorPFVGOTFBPiA8VTk5RjE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTFCCis8VUY5MUI+IDxVNEU4Mj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MUMKKzxVRjkxQz4gPFU1Mzc1PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkxRAorPFVGOTFEPiA8VTZCMDQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTFFCis8VUY5MUU+IDxVNzIxQj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MUYKKzxVRjkxRj4gPFU4NjJEPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkyMAorPFVGOTIwPiA8VTlFMUU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTIxCis8VUY5MjE+IDxVNUQ1MD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MjIKKzxVRjkyMj4gPFU2RkVCPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkyMworPFVGOTIzPiA8VTg1Q0Q+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTI0Cis8VUY5MjQ+IDxVODk2ND4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MjUKKzxVRjkyNT4gPFU2MkM5PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkyNgorPFVGOTI2PiA8VTgxRDg+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTI3Cis8VUY5Mjc+IDxVODgxRj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MjgKKzxVRjkyOD4gPFU1RUNBPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkyOQorPFVGOTI5PiA8VTY3MTc+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTJBCis8VUY5MkE+IDxVNkQ2QT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MkIKKzxVRjkyQj4gPFU3MkZDPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkyQworPFVGOTJDPiA8VTkwQ0U+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTJECis8VUY5MkQ+IDxVNEY4Nj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MkUKKzxVRjkyRT4gPFU1MUI3PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkyRgorPFVGOTJGPiA8VTUyREU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTMwCis8VUY5MzA+IDxVNjRDND4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MzEKKzxVRjkzMT4gPFU2QUQzPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkzMgorPFVGOTMyPiA8VTcyMTA+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTMzCis8VUY5MzM+IDxVNzZFNz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MzQKKzxVRjkzND4gPFU4MDAxPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkzNQorPFVGOTM1PiA8VTg2MDY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTM2Cis8VUY5MzY+IDxVODY1Qz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MzcKKzxVRjkzNz4gPFU4REVGPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkzOAorPFVGOTM4PiA8VTk3MzI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTM5Cis8VUY5Mzk+IDxVOUI2Rj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5M0EKKzxVRjkzQT4gPFU5REZBPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkzQgorPFVGOTNCPiA8VTc4OEM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTNDCis8VUY5M0M+IDxVNzk3Rj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5M0QKKzxVRjkzRD4gPFU3REEwPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkzRQorPFVGOTNFPiA8VTgzQzk+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTNGCis8VUY5M0Y+IDxVOTMwND4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NDAKKzxVRjk0MD4gPFU5RTdGPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk0MQorPFVGOTQxPiA8VThBRDY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTQyCis8VUY5NDI+IDxVNThERj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NDMKKzxVRjk0Mz4gPFU1RjA0PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk0NAorPFVGOTQ0PiA8VTdDNjA+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTQ1Cis8VUY5NDU+IDxVODA3RT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NDYKKzxVRjk0Nj4gPFU3MjYyPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk0NworPFVGOTQ3PiA8VTc4Q0E+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTQ4Cis8VUY5NDg+IDxVOENDMj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NDkKKzxVRjk0OT4gPFU5NkY3PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk0QQorPFVGOTRBPiA8VTU4RDg+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTRCCis8VUY5NEI+IDxVNUM2Mj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NEMKKzxVRjk0Qz4gPFU2QTEzPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk0RAorPFVGOTREPiA8VTZEREE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTRFCis8VUY5NEU+IDxVNkYwRj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NEYKKzxVRjk0Rj4gPFU3RDJGPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk1MAorPFVGOTUwPiA8VTdFMzc+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTUxCis8VUY5NTE+IDxVOTY0Qj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NTIKKzxVRjk1Mj4gPFU1MkQyPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk1MworPFVGOTUzPiA8VTgwOEI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTU0Cis8VUY5NTQ+IDxVNTFEQz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NTUKKzxVRjk1NT4gPFU1MUNDPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk1NgorPFVGOTU2PiA8VTdBMUM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTU3Cis8VUY5NTc+IDxVN0RCRT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NTgKKzxVRjk1OD4gPFU4M0YxPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk1OQorPFVGOTU5PiA8VTk2NzU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTVBCis8VUY5NUE+IDxVOEI4MD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NUIKKzxVRjk1Qj4gPFU2MkNGPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk1QworPFVGOTVDPiA8VTZBMDI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTVECis8VUY5NUQ+IDxVOEFGRT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NUUKKzxVRjk1RT4gPFU0RTM5PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk1RgorPFVGOTVGPiA8VTVCRTc+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTYwCis8VUY5NjA+IDxVNjAxMj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NjEKKzxVRjk2MT4gPFU3Mzg3PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk2MgorPFVGOTYyPiA8VTc1NzA+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTYzCis8VUY5NjM+IDxVNTMxNz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NjQKKzxVRjk2ND4gPFU3OEZCPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk2NQorPFVGOTY1PiA8VTRGQkY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTY2Cis8VUY5NjY+IDxVNUZBOT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NjcKKzxVRjk2Nz4gPFU0RTBEPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk2OAorPFVGOTY4PiA8VTZDQ0M+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTY5Cis8VUY5Njk+IDxVNjU3OD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NkEKKzxVRjk2QT4gPFU3RDIyPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk2QgorPFVGOTZCPiA8VTUzQzM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTZDCis8VUY5NkM+IDxVNTg1RT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NkQKKzxVRjk2RD4gPFU3NzAxPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk2RQorPFVGOTZFPiA8VTg0NDk+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTZGCis8VUY5NkY+IDxVOEFBQT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NzAKKzxVRjk3MD4gPFU2QkJBPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk3MQorPFVGOTcxPiA8VThGQjA+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTcyCis8VUY5NzI+IDxVNkM4OD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NzMKKzxVRjk3Mz4gPFU2MkZFPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk3NAorPFVGOTc0PiA8VTgyRTU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTc1Cis8VUY5NzU+IDxVNjNBMD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NzYKKzxVRjk3Nj4gPFU3NTY1PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk3NworPFVGOTc3PiA8VTRFQUU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTc4Cis8VUY5Nzg+IDxVNTE2OT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NzkKKzxVRjk3OT4gPFU1MUM5PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk3QQorPFVGOTdBPiA8VTY4ODE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTdCCis8VUY5N0I+IDxVN0NFNz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5N0MKKzxVRjk3Qz4gPFU4MjZGPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk3RAorPFVGOTdEPiA8VThBRDI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTdFCis8VUY5N0U+IDxVOTFDRj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5N0YKKzxVRjk3Rj4gPFU1MkY1PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk4MAorPFVGOTgwPiA8VTU0NDI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTgxCis8VUY5ODE+IDxVNTk3Mz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5ODIKKzxVRjk4Mj4gPFU1RUVDPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk4MworPFVGOTgzPiA8VTY1QzU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTg0Cis8VUY5ODQ+IDxVNkZGRT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5ODUKKzxVRjk4NT4gPFU3OTJBPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk4NgorPFVGOTg2PiA8VTk1QUQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTg3Cis8VUY5ODc+IDxVOUE2QT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5ODgKKzxVRjk4OD4gPFU5RTk3PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk4OQorPFVGOTg5PiA8VTlFQ0U+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOThBCis8VUY5OEE+IDxVNTI5Qj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5OEIKKzxVRjk4Qj4gPFU2NkM2PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk4QworPFVGOThDPiA8VTZCNzc+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOThECis8VUY5OEQ+IDxVOEY2Mj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5OEUKKzxVRjk4RT4gPFU1RTc0PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk4RgorPFVGOThGPiA8VTYxOTA+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTkwCis8VUY5OTA+IDxVNjIwMD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5OTEKKzxVRjk5MT4gPFU2NDlBPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk5MgorPFVGOTkyPiA8VTZGMjM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTkzCis8VUY5OTM+IDxVNzE0OT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5OTQKKzxVRjk5ND4gPFU3NDg5PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk5NQorPFVGOTk1PiA8VTc5Q0E+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTk2Cis8VUY5OTY+IDxVN0RGND4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5OTcKKzxVRjk5Nz4gPFU4MDZGPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk5OAorPFVGOTk4PiA8VThGMjY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTk5Cis8VUY5OTk+IDxVODRFRT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5OUEKKzxVRjk5QT4gPFU5MDIzPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk5QgorPFVGOTlCPiA8VTkzNEE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTlDCis8VUY5OUM+IDxVNTIxNz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5OUQKKzxVRjk5RD4gPFU1MkEzPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk5RQorPFVGOTlFPiA8VTU0QkQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTlGCis8VUY5OUY+IDxVNzBDOD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QTAKKzxVRjlBMD4gPFU4OEMyPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlBMQorPFVGOUExPiA8VThBQUE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUEyCis8VUY5QTI+IDxVNUVDOT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QTMKKzxVRjlBMz4gPFU1RkY1PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlBNAorPFVGOUE0PiA8VTYzN0I+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUE1Cis8VUY5QTU+IDxVNkJBRT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QTYKKzxVRjlBNj4gPFU3QzNFPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlBNworPFVGOUE3PiA8VTczNzU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUE4Cis8VUY5QTg+IDxVNEVFND4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QTkKKzxVRjlBOT4gPFU1NkY5PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlBQQorPFVGOUFBPiA8VTVCRTc+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUFCCis8VUY5QUI+IDxVNURCQT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QUMKKzxVRjlBQz4gPFU2MDFDPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlBRAorPFVGOUFEPiA8VTczQjI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUFFCis8VUY5QUU+IDxVNzQ2OT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QUYKKzxVRjlBRj4gPFU3RjlBPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlCMAorPFVGOUIwPiA8VTgwNDY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUIxCis8VUY5QjE+IDxVOTIzND4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QjIKKzxVRjlCMj4gPFU5NkY2PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlCMworPFVGOUIzPiA8VTk3NDg+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUI0Cis8VUY5QjQ+IDxVOTgxOD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QjUKKzxVRjlCNT4gPFU0RjhCPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlCNgorPFVGOUI2PiA8VTc5QUU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUI3Cis8VUY5Qjc+IDxVOTFCND4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QjgKKzxVRjlCOD4gPFU5NkI4PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlCOQorPFVGOUI5PiA8VTYwRTE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUJBCis8VUY5QkE+IDxVNEU4Nj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QkIKKzxVRjlCQj4gPFU1MERBPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlCQworPFVGOUJDPiA8VTVCRUU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUJECis8VUY5QkQ+IDxVNUMzRj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QkUKKzxVRjlCRT4gPFU2NTk5PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlCRgorPFVGOUJGPiA8VTZBMDI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUMwCis8VUY5QzA+IDxVNzFDRT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QzEKKzxVRjlDMT4gPFU3NjQyPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlDMgorPFVGOUMyPiA8VTg0RkM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUMzCis8VUY5QzM+IDxVOTA3Qz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QzQKKzxVRjlDND4gPFU5RjhEPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlDNQorPFVGOUM1PiA8VTY2ODg+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUM2Cis8VUY5QzY+IDxVOTYyRT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QzcKKzxVRjlDNz4gPFU1Mjg5PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlDOAorPFVGOUM4PiA8VTY3N0I+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUM5Cis8VUY5Qzk+IDxVNjdGMz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5Q0EKKzxVRjlDQT4gPFU2RDQxPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlDQgorPFVGOUNCPiA8VTZFOUM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUNDCis8VUY5Q0M+IDxVNzQwOT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5Q0QKKzxVRjlDRD4gPFU3NTU5PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlDRQorPFVGOUNFPiA8VTc4NkI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUNGCis8VUY5Q0Y+IDxVN0QxMD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RDAKKzxVRjlEMD4gPFU5ODVFPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlEMQorPFVGOUQxPiA8VTUxNkQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUQyCis8VUY5RDI+IDxVNjIyRT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RDMKKzxVRjlEMz4gPFU5Njc4PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlENAorPFVGOUQ0PiA8VTUwMkI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUQ1Cis8VUY5RDU+IDxVNUQxOT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RDYKKzxVRjlENj4gPFU2REVBPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlENworPFVGOUQ3PiA8VThGMkE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUQ4Cis8VUY5RDg+IDxVNUY4Qj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RDkKKzxVRjlEOT4gPFU2MTQ0PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlEQQorPFVGOURBPiA8VTY4MTc+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOURCCis8VUY5REI+IDxVNzM4Nz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5REMKKzxVRjlEQz4gPFU5Njg2PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlERAorPFVGOUREPiA8VTUyMjk+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOURFCis8VUY5REU+IDxVNTQwRj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5REYKKzxVRjlERj4gPFU1QzY1PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlFMAorPFVGOUUwPiA8VTY2MTM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUUxCis8VUY5RTE+IDxVNjc0RT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RTIKKzxVRjlFMj4gPFU2OEE4PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlFMworPFVGOUUzPiA8VTZDRTU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUU0Cis8VUY5RTQ+IDxVNzQwNj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RTUKKzxVRjlFNT4gPFU3NUUyPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlFNgorPFVGOUU2PiA8VTdGNzk+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUU3Cis8VUY5RTc+IDxVODhDRj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RTgKKzxVRjlFOD4gPFU4OEUxPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlFOQorPFVGOUU5PiA8VTkxQ0M+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUVBCis8VUY5RUE+IDxVOTZFMj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RUIKKzxVRjlFQj4gPFU1MzNGPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlFQworPFVGOUVDPiA8VTZFQkE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUVECis8VUY5RUQ+IDxVNTQxRD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RUUKKzxVRjlFRT4gPFU3MUQwPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlFRgorPFVGOUVGPiA8VTc0OTg+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUYwCis8VUY5RjA+IDxVODVGQT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RjEKKzxVRjlGMT4gPFU5NkEzPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlGMgorPFVGOUYyPiA8VTlDNTc+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUYzCis8VUY5RjM+IDxVOUU5Rj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RjQKKzxVRjlGND4gPFU2Nzk3PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlGNQorPFVGOUY1PiA8VTZEQ0I+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUY2Cis8VUY5RjY+IDxVODFFOD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RjcKKzxVRjlGNz4gPFU3QUNCPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlGOAorPFVGOUY4PiA8VTdCMjA+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUY5Cis8VUY5Rjk+IDxVN0M5Mj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RkEKKzxVRjlGQT4gPFU3MkMwPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlGQgorPFVGOUZCPiA8VTcwOTk+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUZDCis8VUY5RkM+IDxVOEI1OD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RkQKKzxVRjlGRD4gPFU0RUMwPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlGRQorPFVGOUZFPiA8VTgzMzY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUZGCis8VUY5RkY+IDxVNTIzQT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMDAKKzxVRkEwMD4gPFU1MjA3PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEwMQorPFVGQTAxPiA8VTVFQTY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTAyCis8VUZBMDI+IDxVNjJEMz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMDMKKzxVRkEwMz4gPFU3Q0Q2PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEwNAorPFVGQTA0PiA8VTVCODU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTA1Cis8VUZBMDU+IDxVNkQxRT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMDYKKzxVRkEwNj4gPFU2NkI0PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEwNworPFVGQTA3PiA8VThGM0I+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTA4Cis8VUZBMDg+IDxVODg0Qz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMDkKKzxVRkEwOT4gPFU5NjREPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEwQQorPFVGQTBBPiA8VTg5OEI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTBCCis8VUZBMEI+IDxVNUVEMz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMEMKKzxVRkEwQz4gPFU1MTQwPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEwRAorPFVGQTBEPiA8VTU1QzA+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTEwCis8VUZBMTA+IDxVNTg1QT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMTIKKzxVRkExMj4gPFU2Njc0PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkExNQorPFVGQTE1PiA8VTUxREU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTE2Cis8VUZBMTY+IDxVNzMyQT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMTcKKzxVRkExNz4gPFU3NkNBPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkExOAorPFVGQTE4PiA8VTc5M0M+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTE5Cis8VUZBMTk+IDxVNzk1RT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMUEKKzxVRkExQT4gPFU3OTY1PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkExQgorPFVGQTFCPiA8VTc5OEY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTFDCis8VUZBMUM+IDxVOTc1Nj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMUQKKzxVRkExRD4gPFU3Q0JFPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkExRQorPFVGQTFFPiA8VTdGQkQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTIwCis8VUZBMjA+IDxVODYxMj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMjIKKzxVRkEyMj4gPFU4QUY4PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEyNQorPFVGQTI1PiA8VTkwMzg+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTI2Cis8VUZBMjY+IDxVOTBGRD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMkEKKzxVRkEyQT4gPFU5OEVGPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEyQgorPFVGQTJCPiA8VTk4RkM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTJDCis8VUZBMkM+IDxVOTkyOD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMkQKKzxVRkEyRD4gPFU5REI0PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEzMAorPFVGQTMwPiA8VTRGQUU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTMxCis8VUZBMzE+IDxVNTBFNz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMzIKKzxVRkEzMj4gPFU1MTREPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEzMworPFVGQTMzPiA8VTUyQzk+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTM0Cis8VUZBMzQ+IDxVNTJFND4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMzUKKzxVRkEzNT4gPFU1MzUxPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEzNgorPFVGQTM2PiA8VTU1OUQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTM3Cis8VUZBMzc+IDxVNTYwNj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMzgKKzxVRkEzOD4gPFU1NjY4PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEzOQorPFVGQTM5PiA8VTU4NDA+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTNBCis8VUZBM0E+IDxVNThBOD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBM0IKKzxVRkEzQj4gPFU1QzY0PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEzQworPFVGQTNDPiA8VTVDNkU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTNECis8VUZBM0Q+IDxVNjA5ND4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBM0UKKzxVRkEzRT4gPFU2MTY4PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEzRgorPFVGQTNGPiA8VTYxOEU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTQwCis8VUZBNDA+IDxVNjFGMj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNDEKKzxVRkE0MT4gPFU2NTRGPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE0MgorPFVGQTQyPiA8VTY1RTI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTQzCis8VUZBNDM+IDxVNjY5MT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNDQKKzxVRkE0ND4gPFU2ODg1PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE0NQorPFVGQTQ1PiA8VTZENzc+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTQ2Cis8VUZBNDY+IDxVNkUxQT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNDcKKzxVRkE0Nz4gPFU2RjIyPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE0OAorPFVGQTQ4PiA8VTcxNkU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTQ5Cis8VUZBNDk+IDxVNzIyQj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNEEKKzxVRkE0QT4gPFU3NDIyPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE0QgorPFVGQTRCPiA8VTc4OTE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTRDCis8VUZBNEM+IDxVNzkzRT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNEQKKzxVRkE0RD4gPFU3OTQ5PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE0RQorPFVGQTRFPiA8VTc5NDg+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTRGCis8VUZBNEY+IDxVNzk1MD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNTAKKzxVRkE1MD4gPFU3OTU2PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE1MQorPFVGQTUxPiA8VTc5NUQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTUyCis8VUZBNTI+IDxVNzk4RD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNTMKKzxVRkE1Mz4gPFU3OThFPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE1NAorPFVGQTU0PiA8VTdBNDA+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTU1Cis8VUZBNTU+IDxVN0E4MT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNTYKKzxVRkE1Nj4gPFU3QkMwPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE1NworPFVGQTU3PiA8VTdERjQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTU4Cis8VUZBNTg+IDxVN0UwOT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNTkKKzxVRkE1OT4gPFU3RTQxPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE1QQorPFVGQTVBPiA8VTdGNzI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTVCCis8VUZBNUI+IDxVODAwNT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNUMKKzxVRkE1Qz4gPFU4MUVEPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE1RAorPFVGQTVEPiA8VTgyNzk+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTVFCis8VUZBNUU+IDxVODI3OT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNUYKKzxVRkE1Rj4gPFU4NDU3PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE2MAorPFVGQTYwPiA8VTg5MTA+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTYxCis8VUZBNjE+IDxVODk5Nj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNjIKKzxVRkE2Mj4gPFU4QjAxPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE2MworPFVGQTYzPiA8VThCMzk+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTY0Cis8VUZBNjQ+IDxVOENEMz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNjUKKzxVRkE2NT4gPFU4RDA4PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE2NgorPFVGQTY2PiA8VThGQjY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTY3Cis8VUZBNjc+IDxVOTAzOD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNjgKKzxVRkE2OD4gPFU5NkUzPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE2OQorPFVGQTY5PiA8VTk3RkY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTZBCis8VUZBNkE+IDxVOTgzQj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODAwCis8VTAwMDJGODAwPiA8VTRFM0Q+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgwMQorPFUwMDAyRjgwMT4gPFU0RTM4PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MDIKKzxVMDAwMkY4MDI+IDxVNEU0MT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODAzCis8VTAwMDJGODAzPiA8VTAwMDIwMTIyPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MDQKKzxVMDAwMkY4MDQ+IDxVNEY2MD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODA1Cis8VTAwMDJGODA1PiA8VTRGQUU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgwNgorPFUwMDAyRjgwNj4gPFU0RkJCPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MDcKKzxVMDAwMkY4MDc+IDxVNTAwMj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODA4Cis8VTAwMDJGODA4PiA8VTUwN0E+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgwOQorPFUwMDAyRjgwOT4gPFU1MDk5PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MEEKKzxVMDAwMkY4MEE+IDxVNTBFNz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODBCCis8VTAwMDJGODBCPiA8VTUwQ0Y+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgwQworPFUwMDAyRjgwQz4gPFUzNDlFPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MEQKKzxVMDAwMkY4MEQ+IDxVMDAwMjA2M0E+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgwRQorPFUwMDAyRjgwRT4gPFU1MTREPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MEYKKzxVMDAwMkY4MEY+IDxVNTE1ND4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODEwCis8VTAwMDJGODEwPiA8VTUxNjQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgxMQorPFUwMDAyRjgxMT4gPFU1MTc3PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MTIKKzxVMDAwMkY4MTI+IDxVMDAwMjA1MUM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgxMworPFUwMDAyRjgxMz4gPFUzNEI5PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MTQKKzxVMDAwMkY4MTQ+IDxVNTE2Nz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODE1Cis8VTAwMDJGODE1PiA8VTUxOEQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgxNgorPFUwMDAyRjgxNj4gPFUwMDAyMDU0Qj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODE3Cis8VTAwMDJGODE3PiA8VTUxOTc+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgxOAorPFUwMDAyRjgxOD4gPFU1MUE0PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MTkKKzxVMDAwMkY4MTk+IDxVNEVDQz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODFBCis8VTAwMDJGODFBPiA8VTUxQUM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgxQgorPFUwMDAyRjgxQj4gPFU1MUI1PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MUMKKzxVMDAwMkY4MUM+IDxVMDAwMjkxREY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgxRAorPFUwMDAyRjgxRD4gPFU1MUY1PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MUUKKzxVMDAwMkY4MUU+IDxVNTIwMz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODFGCis8VTAwMDJGODFGPiA8VTM0REY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgyMAorPFUwMDAyRjgyMD4gPFU1MjNCPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MjEKKzxVMDAwMkY4MjE+IDxVNTI0Nj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODIyCis8VTAwMDJGODIyPiA8VTUyNzI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgyMworPFUwMDAyRjgyMz4gPFU1Mjc3PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MjQKKzxVMDAwMkY4MjQ+IDxVMzUxNT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODI1Cis8VTAwMDJGODI1PiA8VTUyQzc+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgyNgorPFUwMDAyRjgyNj4gPFU1MkM5PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MjcKKzxVMDAwMkY4Mjc+IDxVNTJFND4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODI4Cis8VTAwMDJGODI4PiA8VTUyRkE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgyOQorPFUwMDAyRjgyOT4gPFU1MzA1PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MkEKKzxVMDAwMkY4MkE+IDxVNTMwNj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODJCCis8VTAwMDJGODJCPiA8VTUzMTc+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgyQworPFUwMDAyRjgyQz4gPFU1MzQ5PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MkQKKzxVMDAwMkY4MkQ+IDxVNTM1MT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODJFCis8VTAwMDJGODJFPiA8VTUzNUE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgyRgorPFUwMDAyRjgyRj4gPFU1MzczPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MzAKKzxVMDAwMkY4MzA+IDxVNTM3RD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODMxCis8VTAwMDJGODMxPiA8VTUzN0Y+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgzMgorPFUwMDAyRjgzMj4gPFU1MzdGPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MzMKKzxVMDAwMkY4MzM+IDxVNTM3Rj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODM0Cis8VTAwMDJGODM0PiA8VTAwMDIwQTJDPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MzUKKzxVMDAwMkY4MzU+IDxVNzA3MD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODM2Cis8VTAwMDJGODM2PiA8VTUzQ0E+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgzNworPFUwMDAyRjgzNz4gPFU1M0RGPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MzgKKzxVMDAwMkY4Mzg+IDxVMDAwMjBCNjM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgzOQorPFUwMDAyRjgzOT4gPFU1M0VCPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4M0EKKzxVMDAwMkY4M0E+IDxVNTNGMT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODNCCis8VTAwMDJGODNCPiA8VTU0MDY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgzQworPFUwMDAyRjgzQz4gPFU1NDlFPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4M0QKKzxVMDAwMkY4M0Q+IDxVNTQzOD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODNFCis8VTAwMDJGODNFPiA8VTU0NDg+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgzRgorPFUwMDAyRjgzRj4gPFU1NDY4PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NDAKKzxVMDAwMkY4NDA+IDxVNTRBMj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODQxCis8VTAwMDJGODQxPiA8VTU0RjY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg0MgorPFUwMDAyRjg0Mj4gPFU1NTEwPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NDMKKzxVMDAwMkY4NDM+IDxVNTU1Mz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODQ0Cis8VTAwMDJGODQ0PiA8VTU1NjM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg0NQorPFUwMDAyRjg0NT4gPFU1NTg0PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NDYKKzxVMDAwMkY4NDY+IDxVNTU4ND4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODQ3Cis8VTAwMDJGODQ3PiA8VTU1OTk+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg0OAorPFUwMDAyRjg0OD4gPFU1NUFCPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NDkKKzxVMDAwMkY4NDk+IDxVNTVCMz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODRBCis8VTAwMDJGODRBPiA8VTU1QzI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg0QgorPFUwMDAyRjg0Qj4gPFU1NzE2PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NEMKKzxVMDAwMkY4NEM+IDxVNTYwNj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODRECis8VTAwMDJGODREPiA8VTU3MTc+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg0RQorPFUwMDAyRjg0RT4gPFU1NjUxPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NEYKKzxVMDAwMkY4NEY+IDxVNTY3ND4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODUwCis8VTAwMDJGODUwPiA8VTUyMDc+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg1MQorPFUwMDAyRjg1MT4gPFU1OEVFPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NTIKKzxVMDAwMkY4NTI+IDxVNTdDRT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODUzCis8VTAwMDJGODUzPiA8VTU3RjQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg1NAorPFUwMDAyRjg1ND4gPFU1ODBEPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NTUKKzxVMDAwMkY4NTU+IDxVNTc4Qj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODU2Cis8VTAwMDJGODU2PiA8VTU4MzI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg1NworPFUwMDAyRjg1Nz4gPFU1ODMxPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NTgKKzxVMDAwMkY4NTg+IDxVNThBQz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODU5Cis8VTAwMDJGODU5PiA8VTAwMDIxNEU0PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NUEKKzxVMDAwMkY4NUE+IDxVNThGMj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODVCCis8VTAwMDJGODVCPiA8VTU4Rjc+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg1QworPFUwMDAyRjg1Qz4gPFU1OTA2PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NUQKKzxVMDAwMkY4NUQ+IDxVNTkxQT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODVFCis8VTAwMDJGODVFPiA8VTU5MjI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg1RgorPFUwMDAyRjg1Rj4gPFU1OTYyPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NjAKKzxVMDAwMkY4NjA+IDxVMDAwMjE2QTg+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg2MQorPFUwMDAyRjg2MT4gPFUwMDAyMTZFQT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODYyCis8VTAwMDJGODYyPiA8VTU5RUM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg2MworPFUwMDAyRjg2Mz4gPFU1QTFCPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NjQKKzxVMDAwMkY4NjQ+IDxVNUEyNz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODY1Cis8VTAwMDJGODY1PiA8VTU5RDg+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg2NgorPFUwMDAyRjg2Nj4gPFU1QTY2PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NjcKKzxVMDAwMkY4Njc+IDxVMzZFRT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODY4Cis8VTAwMDJGODY4PiA8VTAwMDIxMzZBPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NjkKKzxVMDAwMkY4Njk+IDxVNUIwOD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODZBCis8VTAwMDJGODZBPiA8VTVCM0U+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg2QgorPFUwMDAyRjg2Qj4gPFU1QjNFPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NkMKKzxVMDAwMkY4NkM+IDxVMDAwMjE5Qzg+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg2RAorPFUwMDAyRjg2RD4gPFU1QkMzPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NkUKKzxVMDAwMkY4NkU+IDxVNUJEOD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODZGCis8VTAwMDJGODZGPiA8VTVCRTc+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg3MAorPFUwMDAyRjg3MD4gPFU1QkYzPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NzEKKzxVMDAwMkY4NzE+IDxVMDAwMjFCMTg+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg3MgorPFUwMDAyRjg3Mj4gPFU1QkZGPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NzMKKzxVMDAwMkY4NzM+IDxVNUMwNj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODc0Cis8VTAwMDJGODc0PiA8VTVGMzM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg3NQorPFUwMDAyRjg3NT4gPFU1QzIyPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NzYKKzxVMDAwMkY4NzY+IDxVMzc4MT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODc3Cis8VTAwMDJGODc3PiA8VTVDNjA+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg3OAorPFUwMDAyRjg3OD4gPFU1QzZFPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NzkKKzxVMDAwMkY4Nzk+IDxVNUNDMD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODdBCis8VTAwMDJGODdBPiA8VTVDOEQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg3QgorPFUwMDAyRjg3Qj4gPFUwMDAyMURFND4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODdDCis8VTAwMDJGODdDPiA8VTVENDM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg3RAorPFUwMDAyRjg3RD4gPFUwMDAyMURFNj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODdFCis8VTAwMDJGODdFPiA8VTVENkU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg3RgorPFUwMDAyRjg3Rj4gPFU1RDZCPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4ODAKKzxVMDAwMkY4ODA+IDxVNUQ3Qz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODgxCis8VTAwMDJGODgxPiA8VTVERTE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg4MgorPFUwMDAyRjg4Mj4gPFU1REUyPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4ODMKKzxVMDAwMkY4ODM+IDxVMzgyRj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODg0Cis8VTAwMDJGODg0PiA8VTVERkQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg4NQorPFUwMDAyRjg4NT4gPFU1RTI4PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4ODYKKzxVMDAwMkY4ODY+IDxVNUUzRD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODg3Cis8VTAwMDJGODg3PiA8VTVFNjk+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg4OAorPFUwMDAyRjg4OD4gPFUzODYyPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4ODkKKzxVMDAwMkY4ODk+IDxVMDAwMjIxODM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg4QQorPFUwMDAyRjg4QT4gPFUzODdDPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4OEIKKzxVMDAwMkY4OEI+IDxVNUVCMD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODhDCis8VTAwMDJGODhDPiA8VTVFQjM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg4RAorPFUwMDAyRjg4RD4gPFU1RUI2PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4OEUKKzxVMDAwMkY4OEU+IDxVNUVDQT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODhGCis8VTAwMDJGODhGPiA8VTAwMDJBMzkyPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4OTAKKzxVMDAwMkY4OTA+IDxVNUVGRT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODkxCis8VTAwMDJGODkxPiA8VTAwMDIyMzMxPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4OTIKKzxVMDAwMkY4OTI+IDxVMDAwMjIzMzE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg5MworPFUwMDAyRjg5Mz4gPFU4MjAxPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4OTQKKzxVMDAwMkY4OTQ+IDxVNUYyMj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODk1Cis8VTAwMDJGODk1PiA8VTVGMjI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg5NgorPFUwMDAyRjg5Nj4gPFUzOEM3PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4OTcKKzxVMDAwMkY4OTc+IDxVMDAwMjMyQjg+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg5OAorPFUwMDAyRjg5OD4gPFUwMDAyNjFEQT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODk5Cis8VTAwMDJGODk5PiA8VTVGNjI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg5QQorPFUwMDAyRjg5QT4gPFU1RjZCPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4OUIKKzxVMDAwMkY4OUI+IDxVMzhFMz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODlDCis8VTAwMDJGODlDPiA8VTVGOUE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg5RAorPFUwMDAyRjg5RD4gPFU1RkNEPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4OUUKKzxVMDAwMkY4OUU+IDxVNUZENz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODlGCis8VTAwMDJGODlGPiA8VTVGRjk+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhBMAorPFUwMDAyRjhBMD4gPFU2MDgxPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4QTEKKzxVMDAwMkY4QTE+IDxVMzkzQT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEEyCis8VTAwMDJGOEEyPiA8VTM5MUM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhBMworPFUwMDAyRjhBMz4gPFU2MDk0PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4QTQKKzxVMDAwMkY4QTQ+IDxVMDAwMjI2RDQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhBNQorPFUwMDAyRjhBNT4gPFU2MEM3PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4QTYKKzxVMDAwMkY4QTY+IDxVNjE0OD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEE3Cis8VTAwMDJGOEE3PiA8VTYxNEM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhBOAorPFUwMDAyRjhBOD4gPFU2MTRFPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4QTkKKzxVMDAwMkY4QTk+IDxVNjE0Qz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEFBCis8VTAwMDJGOEFBPiA8VTYxN0E+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhBQgorPFUwMDAyRjhBQj4gPFU2MThFPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4QUMKKzxVMDAwMkY4QUM+IDxVNjFCMj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEFECis8VTAwMDJGOEFEPiA8VTYxQTQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhBRQorPFUwMDAyRjhBRT4gPFU2MUFGPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4QUYKKzxVMDAwMkY4QUY+IDxVNjFERT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEIwCis8VTAwMDJGOEIwPiA8VTYxRjI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhCMQorPFUwMDAyRjhCMT4gPFU2MUY2PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4QjIKKzxVMDAwMkY4QjI+IDxVNjIxMD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEIzCis8VTAwMDJGOEIzPiA8VTYyMUI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhCNAorPFUwMDAyRjhCND4gPFU2MjVEPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4QjUKKzxVMDAwMkY4QjU+IDxVNjJCMT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEI2Cis8VTAwMDJGOEI2PiA8VTYyRDQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhCNworPFUwMDAyRjhCNz4gPFU2MzUwPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4QjgKKzxVMDAwMkY4Qjg+IDxVMDAwMjJCMEM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhCOQorPFUwMDAyRjhCOT4gPFU2MzNEPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4QkEKKzxVMDAwMkY4QkE+IDxVNjJGQz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEJCCis8VTAwMDJGOEJCPiA8VTYzNjg+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhCQworPFUwMDAyRjhCQz4gPFU2MzgzPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4QkQKKzxVMDAwMkY4QkQ+IDxVNjNFND4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEJFCis8VTAwMDJGOEJFPiA8VTAwMDIyQkYxPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4QkYKKzxVMDAwMkY4QkY+IDxVNjQyMj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEMwCis8VTAwMDJGOEMwPiA8VTYzQzU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhDMQorPFUwMDAyRjhDMT4gPFU2M0E5PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4QzIKKzxVMDAwMkY4QzI+IDxVM0EyRT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEMzCis8VTAwMDJGOEMzPiA8VTY0Njk+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhDNAorPFUwMDAyRjhDND4gPFU2NDdFPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4QzUKKzxVMDAwMkY4QzU+IDxVNjQ5RD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEM2Cis8VTAwMDJGOEM2PiA8VTY0Nzc+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhDNworPFUwMDAyRjhDNz4gPFUzQTZDPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4QzgKKzxVMDAwMkY4Qzg+IDxVNjU0Rj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEM5Cis8VTAwMDJGOEM5PiA8VTY1NkM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhDQQorPFUwMDAyRjhDQT4gPFUwMDAyMzAwQT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOENCCis8VTAwMDJGOENCPiA8VTY1RTM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhDQworPFUwMDAyRjhDQz4gPFU2NkY4PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4Q0QKKzxVMDAwMkY4Q0Q+IDxVNjY0OT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOENFCis8VTAwMDJGOENFPiA8VTNCMTk+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhDRgorPFUwMDAyRjhDRj4gPFU2NjkxPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4RDAKKzxVMDAwMkY4RDA+IDxVM0IwOD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEQxCis8VTAwMDJGOEQxPiA8VTNBRTQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhEMgorPFUwMDAyRjhEMj4gPFU1MTkyPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4RDMKKzxVMDAwMkY4RDM+IDxVNTE5NT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEQ0Cis8VTAwMDJGOEQ0PiA8VTY3MDA+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhENQorPFUwMDAyRjhENT4gPFU2NjlDPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4RDYKKzxVMDAwMkY4RDY+IDxVODBBRD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEQ3Cis8VTAwMDJGOEQ3PiA8VTQzRDk+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhEOAorPFUwMDAyRjhEOD4gPFU2NzE3PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4RDkKKzxVMDAwMkY4RDk+IDxVNjcxQj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOERBCis8VTAwMDJGOERBPiA8VTY3MjE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhEQgorPFUwMDAyRjhEQj4gPFU2NzVFPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4REMKKzxVMDAwMkY4REM+IDxVNjc1Mz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOERECis8VTAwMDJGOEREPiA8VTAwMDIzM0MzPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4REUKKzxVMDAwMkY4REU+IDxVM0I0OT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOERGCis8VTAwMDJGOERGPiA8VTY3RkE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhFMAorPFUwMDAyRjhFMD4gPFU2Nzg1PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4RTEKKzxVMDAwMkY4RTE+IDxVNjg1Mj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEUyCis8VTAwMDJGOEUyPiA8VTY4ODU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhFMworPFUwMDAyRjhFMz4gPFUwMDAyMzQ2RD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEU0Cis8VTAwMDJGOEU0PiA8VTY4OEU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhFNQorPFUwMDAyRjhFNT4gPFU2ODFGPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4RTYKKzxVMDAwMkY4RTY+IDxVNjkxND4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEU3Cis8VTAwMDJGOEU3PiA8VTNCOUQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhFOAorPFUwMDAyRjhFOD4gPFU2OTQyPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4RTkKKzxVMDAwMkY4RTk+IDxVNjlBMz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEVBCis8VTAwMDJGOEVBPiA8VTY5RUE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhFQgorPFUwMDAyRjhFQj4gPFU2QUE4PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4RUMKKzxVMDAwMkY4RUM+IDxVMDAwMjM2QTM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhFRAorPFUwMDAyRjhFRD4gPFU2QURCPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4RUUKKzxVMDAwMkY4RUU+IDxVM0MxOD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEVGCis8VTAwMDJGOEVGPiA8VTZCMjE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhGMAorPFUwMDAyRjhGMD4gPFUwMDAyMzhBNz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEYxCis8VTAwMDJGOEYxPiA8VTZCNTQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhGMgorPFUwMDAyRjhGMj4gPFUzQzRFPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4RjMKKzxVMDAwMkY4RjM+IDxVNkI3Mj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEY0Cis8VTAwMDJGOEY0PiA8VTZCOUY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhGNQorPFUwMDAyRjhGNT4gPFU2QkJBPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4RjYKKzxVMDAwMkY4RjY+IDxVNkJCQj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEY3Cis8VTAwMDJGOEY3PiA8VTAwMDIzQThEPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4RjgKKzxVMDAwMkY4Rjg+IDxVMDAwMjFEMEI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhGOQorPFUwMDAyRjhGOT4gPFUwMDAyM0FGQT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEZBCis8VTAwMDJGOEZBPiA8VTZDNEU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhGQgorPFUwMDAyRjhGQj4gPFUwMDAyM0NCQz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEZDCis8VTAwMDJGOEZDPiA8VTZDQkY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhGRAorPFUwMDAyRjhGRD4gPFU2Q0NEPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4RkUKKzxVMDAwMkY4RkU+IDxVNkM2Nz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEZGCis8VTAwMDJGOEZGPiA8VTZEMTY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkwMAorPFUwMDAyRjkwMD4gPFU2RDNFPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5MDEKKzxVMDAwMkY5MDE+IDxVNkQ3Nz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTAyCis8VTAwMDJGOTAyPiA8VTZENDE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkwMworPFUwMDAyRjkwMz4gPFU2RDY5PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5MDQKKzxVMDAwMkY5MDQ+IDxVNkQ3OD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTA1Cis8VTAwMDJGOTA1PiA8VTZEODU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkwNgorPFUwMDAyRjkwNj4gPFUwMDAyM0QxRT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTA3Cis8VTAwMDJGOTA3PiA8VTZEMzQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkwOAorPFUwMDAyRjkwOD4gPFU2RTJGPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5MDkKKzxVMDAwMkY5MDk+IDxVNkU2RT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTBBCis8VTAwMDJGOTBBPiA8VTNEMzM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkwQgorPFUwMDAyRjkwQj4gPFU2RUNCPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5MEMKKzxVMDAwMkY5MEM+IDxVNkVDNz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTBECis8VTAwMDJGOTBEPiA8VTAwMDIzRUQxPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5MEUKKzxVMDAwMkY5MEU+IDxVNkRGOT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTBGCis8VTAwMDJGOTBGPiA8VTZGNkU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkxMAorPFUwMDAyRjkxMD4gPFUwMDAyM0Y1RT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTExCis8VTAwMDJGOTExPiA8VTAwMDIzRjhFPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5MTIKKzxVMDAwMkY5MTI+IDxVNkZDNj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTEzCis8VTAwMDJGOTEzPiA8VTcwMzk+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkxNAorPFUwMDAyRjkxND4gPFU3MDFFPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5MTUKKzxVMDAwMkY5MTU+IDxVNzAxQj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTE2Cis8VTAwMDJGOTE2PiA8VTNEOTY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkxNworPFUwMDAyRjkxNz4gPFU3MDRBPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5MTgKKzxVMDAwMkY5MTg+IDxVNzA3RD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTE5Cis8VTAwMDJGOTE5PiA8VTcwNzc+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkxQQorPFUwMDAyRjkxQT4gPFU3MEFEPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5MUIKKzxVMDAwMkY5MUI+IDxVMDAwMjA1MjU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkxQworPFUwMDAyRjkxQz4gPFU3MTQ1PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5MUQKKzxVMDAwMkY5MUQ+IDxVMDAwMjQyNjM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkxRQorPFUwMDAyRjkxRT4gPFU3MTlDPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5MUYKKzxVMDAwMkY5MUY+IDxVNDNBQj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTIwCis8VTAwMDJGOTIwPiA8VTcyMjg+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkyMQorPFUwMDAyRjkyMT4gPFU3MjM1PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5MjIKKzxVMDAwMkY5MjI+IDxVNzI1MD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTIzCis8VTAwMDJGOTIzPiA8VTAwMDI0NjA4PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5MjQKKzxVMDAwMkY5MjQ+IDxVNzI4MD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTI1Cis8VTAwMDJGOTI1PiA8VTcyOTU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkyNgorPFUwMDAyRjkyNj4gPFUwMDAyNDczNT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTI3Cis8VTAwMDJGOTI3PiA8VTAwMDI0ODE0PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5MjgKKzxVMDAwMkY5Mjg+IDxVNzM3QT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTI5Cis8VTAwMDJGOTI5PiA8VTczOEI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkyQQorPFUwMDAyRjkyQT4gPFUzRUFDPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5MkIKKzxVMDAwMkY5MkI+IDxVNzNBNT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTJDCis8VTAwMDJGOTJDPiA8VTNFQjg+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkyRAorPFUwMDAyRjkyRD4gPFUzRUI4PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5MkUKKzxVMDAwMkY5MkU+IDxVNzQ0Nz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTJGCis8VTAwMDJGOTJGPiA8VTc0NUM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkzMAorPFUwMDAyRjkzMD4gPFU3NDcxPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5MzEKKzxVMDAwMkY5MzE+IDxVNzQ4NT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTMyCis8VTAwMDJGOTMyPiA8VTc0Q0E+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkzMworPFUwMDAyRjkzMz4gPFUzRjFCPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5MzQKKzxVMDAwMkY5MzQ+IDxVNzUyND4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTM1Cis8VTAwMDJGOTM1PiA8VTAwMDI0QzM2PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5MzYKKzxVMDAwMkY5MzY+IDxVNzUzRT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTM3Cis8VTAwMDJGOTM3PiA8VTAwMDI0QzkyPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5MzgKKzxVMDAwMkY5Mzg+IDxVNzU3MD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTM5Cis8VTAwMDJGOTM5PiA8VTAwMDIyMTlGPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5M0EKKzxVMDAwMkY5M0E+IDxVNzYxMD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTNCCis8VTAwMDJGOTNCPiA8VTAwMDI0RkExPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5M0MKKzxVMDAwMkY5M0M+IDxVMDAwMjRGQjg+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkzRAorPFUwMDAyRjkzRD4gPFUwMDAyNTA0ND4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTNFCis8VTAwMDJGOTNFPiA8VTNGRkM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkzRgorPFUwMDAyRjkzRj4gPFU0MDA4PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NDAKKzxVMDAwMkY5NDA+IDxVNzZGND4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTQxCis8VTAwMDJGOTQxPiA8VTAwMDI1MEYzPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NDIKKzxVMDAwMkY5NDI+IDxVMDAwMjUwRjI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk0MworPFUwMDAyRjk0Mz4gPFUwMDAyNTExOT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTQ0Cis8VTAwMDJGOTQ0PiA8VTAwMDI1MTMzPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NDUKKzxVMDAwMkY5NDU+IDxVNzcxRT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTQ2Cis8VTAwMDJGOTQ2PiA8VTc3MUY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk0NworPFUwMDAyRjk0Nz4gPFU3NzFGPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NDgKKzxVMDAwMkY5NDg+IDxVNzc0QT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTQ5Cis8VTAwMDJGOTQ5PiA8VTQwMzk+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk0QQorPFUwMDAyRjk0QT4gPFU3NzhCPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NEIKKzxVMDAwMkY5NEI+IDxVNDA0Nj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTRDCis8VTAwMDJGOTRDPiA8VTQwOTY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk0RAorPFUwMDAyRjk0RD4gPFUwMDAyNTQxRD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTRFCis8VTAwMDJGOTRFPiA8VTc4NEU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk0RgorPFUwMDAyRjk0Rj4gPFU3ODhDPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NTAKKzxVMDAwMkY5NTA+IDxVNzhDQz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTUxCis8VTAwMDJGOTUxPiA8VTQwRTM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk1MgorPFUwMDAyRjk1Mj4gPFUwMDAyNTYyNj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTUzCis8VTAwMDJGOTUzPiA8VTc5NTY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk1NAorPFUwMDAyRjk1ND4gPFUwMDAyNTY5QT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTU1Cis8VTAwMDJGOTU1PiA8VTAwMDI1NkM1PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NTYKKzxVMDAwMkY5NTY+IDxVNzk4Rj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTU3Cis8VTAwMDJGOTU3PiA8VTc5RUI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk1OAorPFUwMDAyRjk1OD4gPFU0MTJGPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NTkKKzxVMDAwMkY5NTk+IDxVN0E0MD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTVBCis8VTAwMDJGOTVBPiA8VTdBNEE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk1QgorPFUwMDAyRjk1Qj4gPFU3QTRGPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NUMKKzxVMDAwMkY5NUM+IDxVMDAwMjU5N0M+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk1RAorPFUwMDAyRjk1RD4gPFUwMDAyNUFBNz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTVFCis8VTAwMDJGOTVFPiA8VTAwMDI1QUE3PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NUYKKzxVMDAwMkY5NUY+IDxVN0FBRT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTYwCis8VTAwMDJGOTYwPiA8VTQyMDI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk2MQorPFUwMDAyRjk2MT4gPFUwMDAyNUJBQj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTYyCis8VTAwMDJGOTYyPiA8VTdCQzY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk2MworPFUwMDAyRjk2Mz4gPFU3QkM5PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NjQKKzxVMDAwMkY5NjQ+IDxVNDIyNz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTY1Cis8VTAwMDJGOTY1PiA8VTAwMDI1QzgwPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NjYKKzxVMDAwMkY5NjY+IDxVN0NEMj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTY3Cis8VTAwMDJGOTY3PiA8VTQyQTA+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk2OAorPFUwMDAyRjk2OD4gPFU3Q0U4PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NjkKKzxVMDAwMkY5Njk+IDxVN0NFMz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTZBCis8VTAwMDJGOTZBPiA8VTdEMDA+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk2QgorPFUwMDAyRjk2Qj4gPFUwMDAyNUY4Nj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTZDCis8VTAwMDJGOTZDPiA8VTdENjM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk2RAorPFUwMDAyRjk2RD4gPFU0MzAxPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NkUKKzxVMDAwMkY5NkU+IDxVN0RDNz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTZGCis8VTAwMDJGOTZGPiA8VTdFMDI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk3MAorPFUwMDAyRjk3MD4gPFU3RTQ1PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NzEKKzxVMDAwMkY5NzE+IDxVNDMzND4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTcyCis8VTAwMDJGOTcyPiA8VTAwMDI2MjI4PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NzMKKzxVMDAwMkY5NzM+IDxVMDAwMjYyNDc+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk3NAorPFUwMDAyRjk3ND4gPFU0MzU5PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NzUKKzxVMDAwMkY5NzU+IDxVMDAwMjYyRDk+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk3NgorPFUwMDAyRjk3Nj4gPFU3RjdBPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NzcKKzxVMDAwMkY5Nzc+IDxVMDAwMjYzM0U+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk3OAorPFUwMDAyRjk3OD4gPFU3Rjk1PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NzkKKzxVMDAwMkY5Nzk+IDxVN0ZGQT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTdBCis8VTAwMDJGOTdBPiA8VTgwMDU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk3QgorPFUwMDAyRjk3Qj4gPFUwMDAyNjREQT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTdDCis8VTAwMDJGOTdDPiA8VTAwMDI2NTIzPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5N0QKKzxVMDAwMkY5N0Q+IDxVODA2MD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTdFCis8VTAwMDJGOTdFPiA8VTAwMDI2NUE4PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5N0YKKzxVMDAwMkY5N0Y+IDxVODA3MD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTgwCis8VTAwMDJGOTgwPiA8VTAwMDIzMzVGPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5ODEKKzxVMDAwMkY5ODE+IDxVNDNENT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTgyCis8VTAwMDJGOTgyPiA8VTgwQjI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk4MworPFUwMDAyRjk4Mz4gPFU4MTAzPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5ODQKKzxVMDAwMkY5ODQ+IDxVNDQwQj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTg1Cis8VTAwMDJGOTg1PiA8VTgxM0U+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk4NgorPFUwMDAyRjk4Nj4gPFU1QUI1PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5ODcKKzxVMDAwMkY5ODc+IDxVMDAwMjY3QTc+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk4OAorPFUwMDAyRjk4OD4gPFUwMDAyNjdCNT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTg5Cis8VTAwMDJGOTg5PiA8VTAwMDIzMzkzPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5OEEKKzxVMDAwMkY5OEE+IDxVMDAwMjMzOUM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk4QgorPFUwMDAyRjk4Qj4gPFU4MjAxPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5OEMKKzxVMDAwMkY5OEM+IDxVODIwND4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOThECis8VTAwMDJGOThEPiA8VThGOUU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk4RQorPFUwMDAyRjk4RT4gPFU0NDZCPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5OEYKKzxVMDAwMkY5OEY+IDxVODI5MT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTkwCis8VTAwMDJGOTkwPiA8VTgyOEI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk5MQorPFUwMDAyRjk5MT4gPFU4MjlEPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5OTIKKzxVMDAwMkY5OTI+IDxVNTJCMz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTkzCis8VTAwMDJGOTkzPiA8VTgyQjE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk5NAorPFUwMDAyRjk5ND4gPFU4MkIzPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5OTUKKzxVMDAwMkY5OTU+IDxVODJCRD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTk2Cis8VTAwMDJGOTk2PiA8VTgyRTY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk5NworPFUwMDAyRjk5Nz4gPFUwMDAyNkIzQz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTk4Cis8VTAwMDJGOTk4PiA8VTgyRTU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk5OQorPFUwMDAyRjk5OT4gPFU4MzFEPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5OUEKKzxVMDAwMkY5OUE+IDxVODM2Mz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTlCCis8VTAwMDJGOTlCPiA8VTgzQUQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk5QworPFUwMDAyRjk5Qz4gPFU4MzIzPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5OUQKKzxVMDAwMkY5OUQ+IDxVODNCRD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTlFCis8VTAwMDJGOTlFPiA8VTgzRTc+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk5RgorPFUwMDAyRjk5Rj4gPFU4NDU3PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5QTAKKzxVMDAwMkY5QTA+IDxVODM1Mz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUExCis8VTAwMDJGOUExPiA8VTgzQ0E+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlBMgorPFUwMDAyRjlBMj4gPFU4M0NDPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5QTMKKzxVMDAwMkY5QTM+IDxVODNEQz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUE0Cis8VTAwMDJGOUE0PiA8VTAwMDI2QzM2PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5QTUKKzxVMDAwMkY5QTU+IDxVMDAwMjZENkI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlBNgorPFUwMDAyRjlBNj4gPFUwMDAyNkNENT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUE3Cis8VTAwMDJGOUE3PiA8VTQ1MkI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlBOAorPFUwMDAyRjlBOD4gPFU4NEYxPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5QTkKKzxVMDAwMkY5QTk+IDxVODRGMz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUFBCis8VTAwMDJGOUFBPiA8VTg1MTY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlBQgorPFUwMDAyRjlBQj4gPFUwMDAyNzNDQT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUFDCis8VTAwMDJGOUFDPiA8VTg1NjQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlBRAorPFUwMDAyRjlBRD4gPFUwMDAyNkYyQz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUFFCis8VTAwMDJGOUFFPiA8VTQ1NUQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlBRgorPFUwMDAyRjlBRj4gPFU0NTYxPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5QjAKKzxVMDAwMkY5QjA+IDxVMDAwMjZGQjE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlCMQorPFUwMDAyRjlCMT4gPFUwMDAyNzBEMj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUIyCis8VTAwMDJGOUIyPiA8VTQ1NkI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlCMworPFUwMDAyRjlCMz4gPFU4NjUwPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5QjQKKzxVMDAwMkY5QjQ+IDxVODY1Qz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUI1Cis8VTAwMDJGOUI1PiA8VTg2Njc+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlCNgorPFUwMDAyRjlCNj4gPFU4NjY5PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5QjcKKzxVMDAwMkY5Qjc+IDxVODZBOT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUI4Cis8VTAwMDJGOUI4PiA8VTg2ODg+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlCOQorPFUwMDAyRjlCOT4gPFU4NzBFPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5QkEKKzxVMDAwMkY5QkE+IDxVODZFMj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUJCCis8VTAwMDJGOUJCPiA8VTg3Nzk+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlCQworPFUwMDAyRjlCQz4gPFU4NzI4PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5QkQKKzxVMDAwMkY5QkQ+IDxVODc2Qj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUJFCis8VTAwMDJGOUJFPiA8VTg3ODY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlCRgorPFUwMDAyRjlCRj4gPFU0RDU3PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5QzAKKzxVMDAwMkY5QzA+IDxVODdFMT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUMxCis8VTAwMDJGOUMxPiA8VTg4MDE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlDMgorPFUwMDAyRjlDMj4gPFU0NUY5PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5QzMKKzxVMDAwMkY5QzM+IDxVODg2MD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUM0Cis8VTAwMDJGOUM0PiA8VTg4NjM+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlDNQorPFUwMDAyRjlDNT4gPFUwMDAyNzY2Nz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUM2Cis8VTAwMDJGOUM2PiA8VTg4RDc+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlDNworPFUwMDAyRjlDNz4gPFU4OERFPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5QzgKKzxVMDAwMkY5Qzg+IDxVNDYzNT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUM5Cis8VTAwMDJGOUM5PiA8VTg4RkE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlDQQorPFUwMDAyRjlDQT4gPFUzNEJCPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5Q0IKKzxVMDAwMkY5Q0I+IDxVMDAwMjc4QUU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlDQworPFUwMDAyRjlDQz4gPFUwMDAyNzk2Nj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUNECis8VTAwMDJGOUNEPiA8VTQ2QkU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlDRQorPFUwMDAyRjlDRT4gPFU0NkM3PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5Q0YKKzxVMDAwMkY5Q0Y+IDxVOEFBMD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUQwCis8VTAwMDJGOUQwPiA8VThBRUQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlEMQorPFUwMDAyRjlEMT4gPFU4QjhBPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RDIKKzxVMDAwMkY5RDI+IDxVOEM1NT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUQzCis8VTAwMDJGOUQzPiA8VTAwMDI3Q0E4PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RDQKKzxVMDAwMkY5RDQ+IDxVOENBQj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUQ1Cis8VTAwMDJGOUQ1PiA8VThDQzE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlENgorPFUwMDAyRjlENj4gPFU4RDFCPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RDcKKzxVMDAwMkY5RDc+IDxVOEQ3Nz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUQ4Cis8VTAwMDJGOUQ4PiA8VTAwMDI3RjJGPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RDkKKzxVMDAwMkY5RDk+IDxVMDAwMjA4MDQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlEQQorPFUwMDAyRjlEQT4gPFU4RENCPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5REIKKzxVMDAwMkY5REI+IDxVOERCQz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOURDCis8VTAwMDJGOURDPiA8VThERjA+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlERAorPFUwMDAyRjlERD4gPFUwMDAyMDhERT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOURFCis8VTAwMDJGOURFPiA8VThFRDQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlERgorPFUwMDAyRjlERj4gPFU4RjM4PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RTAKKzxVMDAwMkY5RTA+IDxVMDAwMjg1RDI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlFMQorPFUwMDAyRjlFMT4gPFUwMDAyODVFRD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUUyCis8VTAwMDJGOUUyPiA8VTkwOTQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlFMworPFUwMDAyRjlFMz4gPFU5MEYxPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RTQKKzxVMDAwMkY5RTQ+IDxVOTExMT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUU1Cis8VTAwMDJGOUU1PiA8VTAwMDI4NzJFPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RTYKKzxVMDAwMkY5RTY+IDxVOTExQj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUU3Cis8VTAwMDJGOUU3PiA8VTkyMzg+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlFOAorPFUwMDAyRjlFOD4gPFU5MkQ3PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RTkKKzxVMDAwMkY5RTk+IDxVOTJEOD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUVBCis8VTAwMDJGOUVBPiA8VTkyN0M+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlFQgorPFUwMDAyRjlFQj4gPFU5M0Y5PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RUMKKzxVMDAwMkY5RUM+IDxVOTQxNT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUVECis8VTAwMDJGOUVEPiA8VTAwMDI4QkZBPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RUUKKzxVMDAwMkY5RUU+IDxVOTU4Qj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUVGCis8VTAwMDJGOUVGPiA8VTQ5OTU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlGMAorPFUwMDAyRjlGMD4gPFU5NUI3PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RjEKKzxVMDAwMkY5RjE+IDxVMDAwMjhENzc+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlGMgorPFUwMDAyRjlGMj4gPFU0OUU2PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RjMKKzxVMDAwMkY5RjM+IDxVOTZDMz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUY0Cis8VTAwMDJGOUY0PiA8VTVEQjI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlGNQorPFUwMDAyRjlGNT4gPFU5NzIzPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RjYKKzxVMDAwMkY5RjY+IDxVMDAwMjkxNDU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlGNworPFUwMDAyRjlGNz4gPFUwMDAyOTIxQT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUY4Cis8VTAwMDJGOUY4PiA8VTRBNkU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlGOQorPFUwMDAyRjlGOT4gPFU0QTc2PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RkEKKzxVMDAwMkY5RkE+IDxVOTdFMD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUZCCis8VTAwMDJGOUZCPiA8VTAwMDI5NDBBPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RkMKKzxVMDAwMkY5RkM+IDxVNEFCMj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUZECis8VTAwMDJGOUZEPiA8VTAwMDI5NDk2PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RkUKKzxVMDAwMkY5RkU+IDxVOTgwQj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUZGCis8VTAwMDJGOUZGPiA8VTk4MEI+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRkEwMAorPFUwMDAyRkEwMD4gPFU5ODI5PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkZBMDEKKzxVMDAwMkZBMDE+IDxVMDAwMjk1QjY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRkEwMgorPFUwMDAyRkEwMj4gPFU5OEUyPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkZBMDMKKzxVMDAwMkZBMDM+IDxVNEIzMz4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGQTA0Cis8VTAwMDJGQTA0PiA8VTk5Mjk+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRkEwNQorPFUwMDAyRkEwNT4gPFU5OUE3PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkZBMDYKKzxVMDAwMkZBMDY+IDxVOTlDMj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGQTA3Cis8VTAwMDJGQTA3PiA8VTk5RkU+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRkEwOAorPFUwMDAyRkEwOD4gPFU0QkNFPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkZBMDkKKzxVMDAwMkZBMDk+IDxVMDAwMjlCMzA+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRkEwQQorPFUwMDAyRkEwQT4gPFU5QjEyPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkZBMEIKKzxVMDAwMkZBMEI+IDxVOUM0MD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGQTBDCis8VTAwMDJGQTBDPiA8VTlDRkQ+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRkEwRAorPFUwMDAyRkEwRD4gPFU0Q0NFPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkZBMEUKKzxVMDAwMkZBMEU+IDxVNENFRD4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGQTBGCis8VTAwMDJGQTBGPiA8VTlENjc+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRkExMAorPFUwMDAyRkExMD4gPFUwMDAyQTBDRT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGQTExCis8VTAwMDJGQTExPiA8VTRDRjg+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRkExMgorPFUwMDAyRkExMj4gPFUwMDAyQTEwNT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGQTEzCis8VTAwMDJGQTEzPiA8VTAwMDJBMjBFPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkZBMTQKKzxVMDAwMkZBMTQ+IDxVMDAwMkEyOTE+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRkExNQorPFUwMDAyRkExNT4gPFU5RUJCPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkZBMTYKKzxVMDAwMkZBMTY+IDxVNEQ1Nj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGQTE3Cis8VTAwMDJGQTE3PiA8VTlFRjk+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRkExOAorPFUwMDAyRkExOD4gPFU5RUZFPgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkZBMTkKKzxVMDAwMkZBMTk+IDxVOUYwNT4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGQTFBCis8VTAwMDJGQTFBPiA8VTlGMEY+CislIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRkExQgorPFUwMDAyRkExQj4gPFU5RjE2PgorJSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkZBMUMKKzxVMDAwMkZBMUM+IDxVOUYzQj4KKyUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGQTFECis8VTAwMDJGQTFEPiA8VTAwMDJBNjAwPgorCit0cmFuc2xpdF9lbmQKKworRU5EIExDX0NUWVBFCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy90cmFuc2xpdF9jamtfdmFyaWFudHMgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy90cmFuc2xpdF9jamtfdmFyaWFudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRiNGJlZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RyYW5zbGl0X2Nqa192YXJpYW50cwpAQCAtMCwwICsxLDgyMDIgQEAKK2VzY2FwZV9jaGFyIC8KK2NvbW1lbnRfY2hhciAlCisKKyUgVHJhbnNsaXRlcmF0aW9ucyBvZiBDSksgY2hhcmFjdGVycy4KKyUgR2VuZXJhdGVkIGZyb20gdGhlIFVuaVZhcmlhbnRzIHRhYmxlCislICAgICAgIE5hbWU6ICAgICAgICAgICBVbmljb2RlIHZhcmlhbnRzIHRhYmxlCislICAgICAgIERhdGU6ICAgICAgICAgICAyNSBEZWNlbWJlciAxOTk3CislICAgICAgIEF1dGhvcnM6ICAgICAgICBLb2ljaGkgWWFzdW9rYSA8eWFzdW9rYUBrdWRwYy5reW90by11LmFjLmpwPgorJSAgICAgICAgICAgICAgICAgICAgICAgTW90b2tvIFlhc3Vva2EKKyUgICAgICAgVVJMOiAgICAgICAgICAgIGh0dHA6Ly93d3cua3VkcGMua3lvdG8tdS5hYy5qcC9+eWFzdW9rYS9DSksuaHRtbAorJSB1c2luZyB0aGUgY29tbWFuZAorJSAgICQgZ3JlcCAtdiAnXiMnIFVuaVZhcmlhbnRzIHwgXAorJSAgICAgc2VkIC1lICdzLyAvPjs8VS9nJyAtZSAncy8JLz4gPFUvJyAtZSAncy9eLzxVLycgLWUgJ3MvJC8+LycKKyUKKyUgS2VuIEx1bmRlIHJlY29tbWVuZHMgdG8gcG9zdGZpeCB0aGUgdmFyaWFudHMgd2l0aAorJSAgIFUrMzAzRSBJREVPR1JBUEhJQyBWQVJJQVRJT04gSU5ESUNBVE9SCislIGJ1dCB0aGlzIGNoYXJhY3RlciBpcyBub3QgY29udGFpbmVkIGluIHRoZSBtb3N0IGltcG9ydGFudCBDSksgY2hhcmFjdGVyIHNldHMuCisKK0xDX0NUWVBFCisKK3RyYW5zbGl0X3N0YXJ0CisKKzxVMzAwNj4gPFU0RTQ0PgorPFUzMEY2PiA8VTRFMkE+OzxVNTAwQj47PFU3Qjg3PgorPFU0RTAwPiA8VTVGMEM+Cis8VTRFMDQ+IDxVNEUwQT4KKzxVNEUwNT4gPFU0RTBCPgorPFU0RTA3PiA8VTg0MkM+Cis8VTRFMDk+IDxVNTNDMT47PFU1RjBFPgorPFU0RTBBPiA8VTRFMDQ+Cis8VTRFMEI+IDxVNEUwNT4KKzxVNEUwQz4gPFU1MTc2PgorPFU0RTBFPiA8VTgyMDc+Cis8VTRFMTA+IDxVNTMwMz47PFU1MzA0PgorPFU0RTExPiA8VTRFMTI+OzxVOTE5Qz47PFU5QjU3PgorPFU0RTEyPiA8VTRFMTE+Cis8VTRFMTM+IDxVNUMwMj47PFU1QzA4PgorPFU0RTE2PiA8VTRFMTc+OzxVNTM0Qj4KKzxVNEUxNz4gPFU0RTE2Pjs8VTUzNEI+Cis8VTRFMTg+IDxVNEUyMD47PFU1Nzc1PgorPFU0RTFBPiA8VTY5NkQ+Cis8VTRFMUI+IDxVNTNFMj47PFU2QTM3Pjs8VTZCMDk+OzxVODVDMj4KKzxVNEUxQz4gPFU2NzcxPgorPFU0RTFEPiA8VTdDRjg+OzxVN0Q3Mj4KKzxVNEUxRj4gPFU0RTIyPjs8VTUzQkU+Cis8VTRFMjA+IDxVNEUxOD47PFU1Nzc1PgorPFU0RTIxPiA8VTRFMjQ+OzxVNTE2OT4KKzxVNEUyMj4gPFU0RTFGPjs8VTUzQkU+Cis8VTRFMjM+IDxVOTE0OT4KKzxVNEUyND4gPFU0RTIxPjs8VTUxNjk+Cis8VTRFMjU+IDxVNTNCMz47PFU1NkI0PgorPFU0RTI2PiA8VTUwQTE+OzxVNUU3Nj47PFU3QUREPgorPFU0RTI3PiA8VTU1QUE+Cis8VTRFMkE+IDxVMzBGNj47PFU1MDBCPjs8VTdCODc+Cis8VTRFMkI+IDxVNjc5Mj47PFU2ODYwPjs8VTY5MEY+Cis8VTRFMkM+IDxVNzIzRj4KKzxVNEUzMD4gPFU4QzRBPjs8VThDNTA+OzxVOTczQj47PFU5NzRBPjs8VTk4QTg+OzxVOThDRT4KKzxVNEUzMj4gPFU0RTMzPgorPFU0RTMzPiA8VTRFMzI+Cis8VTRFMzQ+IDxVODFFOD4KKzxVNEUzQT4gPFU3MEJBPjs8VTcyMzI+Cis8VTRFM0Q+IDxVNUE2Rj47PFU5RTk3PgorPFU0RTNFPiA8VTYzMTk+OzxVNjRFNz47PFU4MjA5PgorPFU0RTQxPiA8VTUzQ0E+Cis8VTRFNDI+IDxVNTIwOD47PFU4MkM1PgorPFU0RTQzPiA8VTVFRkM+OzxVOEZGQT4KKzxVNEU0ND4gPFUzMDA2Pjs8VTRFOTQ+Cis8VTRFNDU+IDxVNEU0Nj47PFU5NTc5PgorPFU0RTQ2PiA8VTRFNDU+OzxVOTU3OT4KKzxVNEU0OD4gPFU1QzFCPjs8VTVFN0E+OzxVNUU4NT47PFU5RUJDPjs8VTlFQkQ+Cis8VTRFNDk+IDxVN0ZBOT4KKzxVNEU0Qz4gPFU3MENGPgorPFU0RTUwPiA8VTY5N0Q+OzxVNkEwMj4KKzxVNEU1MT4gPFU0RjE3Pjs8VTY1MDA+OzxVNzczRT47PFU4ODQ2PgorPFU0RTU0PiA8VTU1QUM+Cis8VTRFNTU+IDxVODY0RT47PFU4NjVEPgorPFU0RTU3PiA8VTRFNTg+OzxVNjkwOT4KKzxVNEU1OD4gPFU0RTU3Pjs8VTY5MDk+Cis8VTRFNUE+IDxVOTY5MD47PFU5NkEwPjs8VTk2QjE+Cis8VTRFNjA+IDxVN0ZEMj4KKzxVNEU2MT4gPFU5MEY3Pjs8VTkxMDk+OzxVOTEwQT47PFU5MTE1PgorPFU0RTY2PiA8VTY2Rjg+Cis8VTRFNjg+IDxVNTE1OD47PFU1OUNCPgorPFU0RTcwPiA8VThDQjc+Cis8VTRFNzE+IDxVNEU4Mj47PFU5MUUwPgorPFU0RTc5PiA8VTRFN0U+OzxVNEU4MT47PFU2RjI3PgorPFU0RTdFPiA8VTRFNzk+OzxVNEU4MT47PFU1RTcyPjs8VTZGMjc+Cis8VTRFODA+IDxVOUY5Qz47PFU5RjlGPgorPFU0RTgxPiA8VTRFNzk+OzxVNEU3RT47PFU2RjI3PgorPFU0RTgyPiA8VTRFNzE+OzxVOTFFMD4KKzxVNEU4Nj4gPFU2NkI4Pjs8VTc3QUQ+Cis8VTRFODg+IDxVOEM2Qj4KKzxVNEU4OT4gPFU3MjJEPgorPFU0RThBPiA8VTRFOEI+OzxVNTNEMz4KKzxVNEU4Qj4gPFU0RThBPjs8VTUzRDM+Cis8VTRFOEM+IDxVNUYwRD4KKzxVNEU4RT4gPFU0RThGPjs8VTRFOTA+OzxVNjVCQz4KKzxVNEU4Rj4gPFU0RThFPjs8VTRFOTA+OzxVNjVCQz47PFU4NjY3PgorPFU0RTkwPiA8VTRFOEU+OzxVNEU4Rj4KKzxVNEU5MT4gPFU0RjFEPjs8VTk2RjI+Cis8VTRFOTQ+IDxVNEU0ND4KKzxVNEU5Nj4gPFU1NkRCPgorPFU0RTk3PiA8VTVDODE+OzxVNUQ1Nz47PFU2QjcyPjs8VTZCNzM+Cis8VTRFOTg+IDxVNEU5OT4KKzxVNEU5OT4gPFU0RTk4PgorPFU0RTlBPiA8VTRFOUM+OzxVNEU5RT4KKzxVNEU5Qz4gPFU0RTlBPjs8VTRFOUU+Cis8VTRFOUQ+IDxVNjU4OT47PFU2NThBPjs8VTlGNEE+OzxVOUY1MD4KKzxVNEU5RT4gPFU0RTlBPjs8VTRFOUM+Cis8VTRFOUY+IDxVNzEwRj4KKzxVNEVBMT4gPFU0RUJFPjs8VTUxNjY+Cis8VTRFQTc+IDxVNzUyMj47PFU3NTIzPgorPFU0RUE5PiA8VTc1NDY+OzxVNzU1Mj47PFU3NTVEPjs8VTc1NUU+Cis8VTRFQUI+IDxVNEVBRj4KKzxVNEVBQz4gPFU0RUIwPgorPFU0RUFGPiA8VTRFQUI+Cis8VTRFQjA+IDxVNEVBQz4KKzxVNEVCMT4gPFU1OTFDPgorPFU0RUIyPiA8VTg5QUE+Cis8VTRFQjU+IDxVODkzQj4KKzxVNEVCOD4gPFU1NkIyPgorPFU0RUJBPiA8VTRFQkI+Cis8VTRFQkI+IDxVNEVCQT4KKzxVNEVCRT4gPFU0RUExPjs8VTUxNjY+Cis8VTRFQkY+IDxVNTEwND4KKzxVNEVDMT4gPFU1RkNFPgorPFU0RUMyPiA8VTUwQ0Q+OzxVNTJBOD47PFU1MkQ1PgorPFU0RUM1PiA8VTRFRDg+OzxVNTBDNT4KKzxVNEVDNj4gPFU1MEQ1PgorPFU0RUM3PiA8VThCOEU+Cis8VTRFQzk+IDxVNTBERj4KKzxVNEVDQz4gPFU1MUFCPjs8VTUxQjA+OzxVNkMzNz4KKzxVNEVDRT4gPFU1RjkzPjs8VTVGOUU+Cis8VTRFQ0Y+IDxVNEY1Qj4KKzxVNEVEMD4gPFU0RjFFPjs8VTUwOTg+Cis8VTRFRDE+IDxVNEY5Nj47PFU1RDE4Pjs8VTVEMTk+Cis8VTRFRDM+IDxVNEVGQT47PFU1MDA5PgorPFU0RUQ4PiA8VTRFQzU+Cis8VTRFRDk+IDxVNTBDQT47PFU1MEYyPgorPFU0RUREPiA8VTU0MEM+Cis8VTRFREU+IDxVNEVFRD4KKzxVNEVFMj4gPFU1Rjc0PgorPFU0RUU3PiA8VTUxNEY+OzxVOTU3Nz47PFU5NTc4Pjs8VTk1N0Y+Cis8VTRFRUE+IDxVNTEwMD4KKzxVNEVFQz4gPFU1MDExPgorPFU0RUVEPiA8VTRFREU+Cis8VTRFRUU+IDxVNTA0Nz47PFU1M0NEPgorPFU0RUY3PiA8VTRGQTE+OzxVNTBGOT4KKzxVNEVGQT4gPFU0RUQzPjs8VTUwMDk+Cis8VTRFRkM+IDxVNEZDNz4KKzxVNEVGRD4gPFU1RjZDPjs8VTY1OEM+Cis8VTRFRkU+IDxVNEY0RT4KKzxVNEVGRj4gPFU1MDIzPjs8VTVGNzc+OzxVNUZBQz47PFU3NzA2Pjs8VTlBRTM+Cis8VTRGMTA+IDxVNTBBMD47PFU3MjZCPgorPFU0RjE2PiA8VTVFMTE+Cis8VTRGMTc+IDxVNEU1MT47PFU3NzNFPjs8VTg4NDY+Cis8VTRGMTg+IDxVNTEyQT4KKzxVNEYxOT4gPFU1OTI1PgorPFU0RjFBPiA8VTY3MDM+Cis8VTRGMUI+IDxVNTBCND4KKzxVNEYxQz4gPFU1MDA1PgorPFU0RjFEPiA8VTRFOTE+OzxVNEYyMD47PFU1MEIzPgorPFU0RjFFPiA8VTRFRDA+OzxVNTA5OD47PFU3RTU2PgorPFU0RjFGPiA8VTUwNDk+Cis8VTRGMjA+IDxVNEYxRD47PFU1MEIzPgorPFU0RjIxPiA8VTRGRTU+Cis8VTRGMjM+IDxVNEZEND4KKzxVNEYyND4gPFU1MEI3PgorPFU0RjI1PiA8VTUwMDA+Cis8VTRGMjY+IDxVNTAyQj4KKzxVNEYyNz4gPFU1MDk2PgorPFU0RjJBPiA8VTUwN0Q+OzxVNTBERT4KKzxVNEYyQj4gPFU0RjQ3Pjs8VTdBREE+Cis8VTRGMkU+IDxVNTJBQT4KKzxVNEYzMT4gPFU0RjMyPjs8VTRGNjA+OzxVNTExRT4KKzxVNEYzMj4gPFU0RjMxPjs8VTRGNjA+OzxVNTExRT4KKzxVNEYzNT4gPFU0RjkwPgorPFU0RjM3PiA8VTgwQzQ+Cis8VTRGM0M+IDxVNEY0MD4KKzxVNEY0MD4gPFU0RjNDPgorPFU0RjQyPiA8VTYwMTQ+Cis8VTRGNDc+IDxVNEYyQj4KKzxVNEY0OD4gPFU1RTAzPgorPFU0RjRFPiA8VTRFRkU+Cis8VTRGNTM+IDxVN0IyOD47PFU4RUIwPjs8VThFQzY+OzxVOUFCNT47PFU5QUQ0PgorPFU0RjU0PiA8VTUzNjA+Cis8VTRGNTk+IDxVOTkxOD47PFU5OTgwPgorPFU0RjVCPiA8VTRFQ0Y+OzxVNUY3Rj47PFU5QUY0PgorPFU0RjVDPiA8VTUwNUE+Cis8VTRGNUU+IDxVNEZBQj4KKzxVNEY2MD4gPFU0RjMxPjs8VTRGMzI+OzxVNTExRT47PFU1OUIzPgorPFU0RjYzPiA8VTUwQUQ+Cis8VTRGNjU+IDxVNTBDOT4KKzxVNEY2QT4gPFU1RjhBPgorPFU0RjcxPiA8VTZDRDU+OzxVNzA0Qj4KKzxVNEY3NT4gPFU1MDAyPjs8VTVFNzY+Cis8VTRGNzc+IDxVNUY4OD4KKzxVNEY4Mz4gPFU1MDU4PgorPFU0Rjg0PiA8VTU5Qjc+OzxVNTlFQT4KKzxVNEY4Nj4gPFU2NzY1PgorPFU0RjhDPiA8VTk2MjU+OzxVOTYzND47PFU5NjcwPjs8VTk2ODI+Cis8VTRGOEU+IDxVNjU0OT4KKzxVNEY5MD4gPFU0RjM1PgorPFU0Rjk2PiA8VTRFRDE+Cis8VTRGOUY+IDxVODM1MD47PFU4NUE2PgorPFU0RkEwPiA8VTRGRTA+Cis8VTRGQTE+IDxVNEVGNz47PFU1MEY5PgorPFU0RkEzPiA8VTRGQjY+Cis8VTRGQTU+IDxVNTBFNT4KKzxVNEZBNj4gPFU1MDc1Pjs8VTkwNDk+Cis8VTRGQTc+IDxVNTA3ND4KKzxVNEZBOD4gPFU1MEQxPgorPFU0RkE5PiA8VTUxMDg+Cis8VTRGQUE+IDxVNTExNT4KKzxVNEZBQj4gPFU0RjVFPgorPFU0RkFDPiA8VTUxMDI+Cis8VTRGQUQ+IDxVNTExOD47PFU1QzNEPgorPFU0RkFGPiA8VTc3RTY+Cis8VTRGQjY+IDxVNEZBMz4KKzxVNEZCNz4gPFU1QzQwPgorPFU0RkJEPiA8VTc1Mzc+Cis8VTRGQzE+IDxVNEZFMz4KKzxVNEZDMj4gPFU3Q0ZCPgorPFU0RkM3PiA8VTRFRkM+Cis8VTRGQ0E+IDxVNTEwMT4KKzxVNEZDQz4gPFU4RjE0PgorPFU0RkNFPiA8VTcyM0M+Cis8VTRGRDQ+IDxVNEYyMz47PFU2MDkzPgorPFU0RkRFPiA8VTUxNkE+Cis8VTRGREY+IDxVN0FFMj4KKzxVNEZFMD4gPFU0RkEwPgorPFU0RkUxPiA8VThBMkI+Cis8VTRGRTI+IDxVNEZFRT4KKzxVNEZFMz4gPFU0RkMxPgorPFU0RkU1PiA8VTRGMjE+Cis8VTRGRTY+IDxVNTExND4KKzxVNEZFOD4gPFU1MTNDPgorPFU0RkU5PiA8VTUwMDY+Cis8VTRGRUE+IDxVNTEzNz4KKzxVNEZFQj4gPFU1MDA4PgorPFU0RkVEPiA8VTUwMzk+OzxVNTEwOT4KKzxVNEZFRT4gPFU0RkUyPjs8VTgxMjk+Cis8VTRGRjE+IDxVNTAzNj4KKzxVNEZGMj4gPFU1MDlBPjs8VTY1NDg+Cis8VTRGRkI+IDxVNTA3OT47PFU1MDk5Pjs8VTUwQzM+OzxVNTkwNz4KKzxVNEZGQz4gPFU3Q0E1Pjs8VTlCM0I+Cis8VTRGRkQ+IDxVNjBERT47PFU2QjIzPgorPFU1MDAwPiA8VTRGMjU+Cis8VTUwMDI+IDxVNEY3NT47PFU1RTc2PgorPFU1MDAzPiA8VTUwN0E+OzxVNTRCMT47PFU1NTkyPgorPFU1MDA1PiA8VTRGMUM+Cis8VTUwMDY+IDxVNEZFOT4KKzxVNTAwOD4gPFU0RkVCPgorPFU1MDA5PiA8VTRFRDM+OzxVNEVGQT4KKzxVNTAwQT4gPFU1MDZDPgorPFU1MDBCPiA8VTMwRjY+OzxVNEUyQT47PFU3Qjg3PgorPFU1MDBFPiA8VTgxNDY+Cis8VTUwMEY+IDxVNTAxMD4KKzxVNTAxMD4gPFU1MDBGPgorPFU1MDExPiA8VTRFRUM+Cis8VTUwMTY+IDxVNUU3OD4KKzxVNTAxRT4gPFU1MEI5PgorPFU1MDFGPiA8VTVGQTM+OzxVODVDOT4KKzxVNTAyMz4gPFU0RUZGPjs8VTc3MDY+Cis8VTUwMjQ+IDxVNTAzQz4KKzxVNTAyNj4gPFU1MkI1Pjs8VTUyQ0M+Cis8VTUwMkI+IDxVNEYyNj4KKzxVNTAzMz4gPFU1MjVBPgorPFU1MDM2PiA8VTRGRjE+Cis8VTUwMzk+IDxVNEZFRD47PFU1MTA5PgorPFU1MDNBPiA8VTUwQjU+Cis8VTUwM0M+IDxVNTAyND4KKzxVNTAzRT4gPFU1MEJFPgorPFU1MDQwPiA8VTgyRjE+Cis8VTUwNDY+IDxVOENGMD4KKzxVNTA0Nz4gPFU0RUVFPgorPFU1MDQ5PiA8VTRGMUY+Cis8VTUwNTA+IDxVOEQwQj47PFU4RDE3Pjs8VThENUQ+Cis8VTUwNTg+IDxVNEY4Mz4KKzxVNTA1OT4gPFU1MEMwPgorPFU1MDVBPiA8VTRGNUM+Cis8VTUwNjU+IDxVNUZBND4KKzxVNTA2QT4gPFU5MDNDPgorPFU1MDZDPiA8VTUwMEE+OzxVNTBBRj4KKzxVNTA3ND4gPFU0RkE3PgorPFU1MDc1PiA8VTRGQTY+OzxVOTA0OT4KKzxVNTA3Nz4gPFU1MDc4PgorPFU1MDc4PiA8VTUwNzc+Cis8VTUwNzk+IDxVNEZGQj47PFU1MDk5Pjs8VTUwQzM+OzxVNTkwNz4KKzxVNTA3QT4gPFU1MDAzPjs8VTU0QjE+OzxVNTU5Mj4KKzxVNTA3Qj4gPFU1MEMyPgorPFU1MDdEPiA8VTRGMkE+OzxVNTBERT4KKzxVNTA3RT4gPFU1MEU4PgorPFU1MDdGPiA8VTUxMUY+Cis8VTUwOEM+IDxVN0Y3NT47PFU5OUUxPjs8VTlBODI+Cis8VTUwOEQ+IDxVNUZBQz4KKzxVNTA5MT4gPFU2NzcwPgorPFU1MDk2PiA8VTRGMjc+Cis8VTUwOTg+IDxVNEVEMD47PFU0RjFFPjs8VTdFNTY+Cis8VTUwOTk+IDxVNEZGQj47PFU1MDc5Pjs8VTUwQzM+OzxVNTkwNz4KKzxVNTA5QT4gPFU0RkYyPjs8VTY1NDg+Cis8VTUwOUM+IDxVNUZBRD4KKzxVNTBBMD4gPFU0RjEwPjs8VTcyNkI+Cis8VTUwQTE+IDxVNEUyNj47PFU1RTc2Pjs8VTdBREQ+Cis8VTUwQTI+IDxVNUJCNj4KKzxVNTBBND4gPFU1MTBFPgorPFU1MEE1PiA8VTUxM0I+Cis8VTUwQTc+IDxVNTExMD4KKzxVNTBBOD4gPFU1MTMyPgorPFU1MEE5PiA8VTUxM0E+Cis8VTUwQUQ+IDxVNEY2Mz4KKzxVNTBBRj4gPFU1MDZDPgorPFU1MEIzPiA8VTRGMUQ+OzxVNEYyMD4KKzxVNTBCND4gPFU0RjFCPgorPFU1MEI1PiA8VTUwM0E+Cis8VTUwQjc+IDxVNEYyND4KKzxVNTBCOT4gPFU1MDFFPgorPFU1MEJFPiA8VTUwM0U+Cis8VTUwQzA+IDxVNTA1OT4KKzxVNTBDMj4gPFU1MDdCPgorPFU1MEMzPiA8VTRGRkI+OzxVNTA3OT47PFU1MDk5Pjs8VTU5MDc+Cis8VTUwQzQ+IDxVNUZCMT4KKzxVNTBDNT4gPFU0RUM1PgorPFU1MEM5PiA8VTRGNjU+Cis8VTUwQ0E+IDxVNEVEOT4KKzxVNTBDRD4gPFU0RUMyPjs8VTUyQTg+OzxVNTJENT4KKzxVNTBEMT4gPFU0RkE4PgorPFU1MEQ1PiA8VTRFQzY+Cis8VTUwRDg+IDxVNjU1RT4KKzxVNTBEQz4gPFU3NjdCPgorPFU1MERFPiA8VTRGMkE+OzxVNTA3RD4KKzxVNTBERj4gPFU0RUM5PgorPFU1MEUzPiA8VTUwRUQ+Cis8VTUwRTU+IDxVNEZBNT4KKzxVNTBFOD4gPFU1MDdFPgorPFU1MEU5PiA8VTUwRjQ+Cis8VTUwRUI+IDxVNjA3Nj47PFU2MEFBPjs8VTYwRTE+Cis8VTUwRUQ+IDxVNTBFMz4KKzxVNTBGMT4gPFU5NkM3PgorPFU1MEYyPiA8VTRFRDk+Cis8VTUwRjQ+IDxVNTBFOT4KKzxVNTBGOT4gPFU0RUY3Pjs8VTRGQTE+Cis8VTUxMDA+IDxVNEVFQT4KKzxVNTEwMT4gPFU0RkNBPgorPFU1MTAyPiA8VTRGQUM+Cis8VTUxMDQ+IDxVNEVCRj4KKzxVNTEwOD4gPFU0RkE5PgorPFU1MTA5PiA8VTRGRUQ+OzxVNTAzOT4KKzxVNTEwRT4gPFU1MEE0PgorPFU1MTEwPiA8VTUwQTc+Cis8VTUxMTQ+IDxVNEZFNj4KKzxVNTExNT4gPFU0RkFBPgorPFU1MTE4PiA8VTRGQUQ+OzxVNUMzRD4KKzxVNTExRT4gPFU0RjMxPjs8VTRGMzI+OzxVNEY2MD4KKzxVNTExRj4gPFU1MDdGPgorPFU1MTI3PiA8VTUxMzk+Cis8VTUxMkE+IDxVNEYxOD4KKzxVNTEzMj4gPFU1MEE4PgorPFU1MTM3PiA8VTRGRUE+Cis8VTUxMzk+IDxVNTEyNz4KKzxVNTEzQT4gPFU1MEE5PgorPFU1MTNCPiA8VTUwQTU+Cis8VTUxM0M+IDxVNEZFOD4KKzxVNTEzRj4gPFU1MTUwPjs8VTUxNTI+Cis8VTUxNDI+IDxVN0MyQT4KKzxVNTE0Nz4gPFU1MUY2PgorPFU1MTQ5PiA8VTcwNkU+OzxVNzA5Nz4KKzxVNTE0QT4gPFU1MTRDPjs8VTUxNTE+Cis8VTUxNEI+IDxVNTI0Qj47PFU1MkNBPjs8VTVDMDU+Cis8VTUxNEM+IDxVNTE0QT47PFU1MTUxPgorPFU1MTRFPiA8VTUxNTQ+Cis8VTUxNEY+IDxVNEVFNz47PFU5NTc3Pjs8VTk1Nzg+OzxVOTU3Rj4KKzxVNTE1MD4gPFU1MTNGPjs8VTUxNTI+Cis8VTUxNTE+IDxVNTE0QT47PFU1MTRDPgorPFU1MTUyPiA8VTUxM0Y+OzxVNTE1MD4KKzxVNTE1ND4gPFU1MTRFPgorPFU1MTU2PiA8VTUxNTc+Cis8VTUxNTc+IDxVNTE1Nj4KKzxVNTE1OD4gPFU0RTY4Pjs8VTU5Q0I+Cis8VTUxNUE+IDxVOUVFOD4KKzxVNTE1Qz4gPFU1MTYwPgorPFU1MTYwPiA8VTUxNUM+Cis8VTUxNjQ+IDxVNjVGNz4KKzxVNTE2Nj4gPFU0RUExPjs8VTRFQkU+Cis8VTUxNjc+IDxVNTE4NT4KKzxVNTE2OT4gPFU0RTIxPjs8VTRFMjQ+Cis8VTUxNkE+IDxVNEZERT4KKzxVNTE3MD4gPFU4NjJEPgorPFU1MTcyPiA8VTU5Mjk+OzxVOTc1ND47PFU5NzVEPgorPFU1MTczPiA8VTU0QjI+OzxVN0IxMT47PFU5NUEyPjs8VTk1RDc+OzxVOTVEQz4KKzxVNTE3ND4gPFU4MjA4PgorPFU1MTc2PiA8VTRFMEM+Cis8VTUxNzk+IDxVODMwQT47PFU4MzMyPgorPFU1MTdCPiA8VTdGQUE+OzxVOTkwQT4KKzxVNTE3RD4gPFU3MzYzPjs8VTczNzg+Cis8VTUxN0U+IDxVNTE4MD4KKzxVNTE4MD4gPFU1MTdFPgorPFU1MTgxPiA8VTU2QzU+Cis8VTUxODI+IDxVNTE4Qj4KKzxVNTE4Mz4gPFU1RTNEPgorPFU1MTg0PiA8VTUxODk+Cis8VTUxODU+IDxVNTE2Nz4KKzxVNTE4Nj4gPFU1NzA2Pjs8VTU3MEU+OzxVNTcxMz4KKzxVNTE4OD4gPFU1Q0ExPgorPFU1MTg5PiA8VTUxODQ+Cis8VTUxOEE+IDxVNTE4Qz47PFU3QjI3PgorPFU1MThCPiA8VTUxODI+Cis8VTUxOEM+IDxVNTE4QT47PFU3QjI3PgorPFU1MThFPiA8VTUyNkU+OzxVNTNFNz4KKzxVNTE4Rj4gPFU1NkU3PgorPFU1MTkwPiA8VTUxOTI+Cis8VTUxOTE+IDxVODBDND4KKzxVNTE5Mj4gPFU1MTkwPgorPFU1MTk3PiA8VTVCODI+Cis8VTUxOTk+IDxVNTFBOT47PFU1QkVCPgorPFU1MTlCPiA8VThFQ0Q+Cis8VTUxOUM+IDxVOEZCMj4KKzxVNTE5RD4gPFU1QjkwPjs8VTVCOUM+Cis8VTUxQTI+IDxVNTg1QT4KKzxVNTFBMz4gPFU2NzAwPgorPFU1MUE0PiA8VTVCQzM+Cis8VTUxQTY+IDxVNUJCQz47PFU1QkM3PgorPFU1MUE4PiA8VTVCQ0M+Cis8VTUxQTk+IDxVNTE5OT47PFU1QkVCPgorPFU1MUFBPiA8VTVFNDI+OzxVN0Y4Mz4KKzxVNTFBQj4gPFU0RUNDPjs8VTUxQjA+OzxVNkMzNz4KKzxVNTFBQz4gPFU2NjM4Pjs8VTlGMTU+Cis8VTUxQUY+IDxVOTlBRT4KKzxVNTFCMD4gPFU0RUNDPjs8VTUxQUI+OzxVNkMzNz4KKzxVNTFCMT4gPFU1MUI0PgorPFU1MUIyPiA8VTZDOTY+OzxVODg1RD4KKzxVNTFCMz4gPFU2QzdBPgorPFU1MUI0PiA8VTUxQjE+Cis8VTUxQjU+IDxVNkNDMT4KKzxVNTFCQT4gPFU2Q0VGPgorPFU1MUJCPiA8VTUxQ0Q+Cis8VTUxQkQ+IDxVNkQwQz4KKzxVNTFDMD4gPFU1MUM4Pjs8VTZERTg+Cis8VTUxQzI+IDxVNkQ3Qz4KKzxVNTFDMz4gPFU2RDgyPgorPFU1MUM0PiA8VTYwNTM+OzxVNjBCRD47PFU2REQyPgorPFU1MUM1PiA8VTZEQjg+Cis8VTUxQzY+IDxVNTFENj47PFU2RTk2PgorPFU1MUM4PiA8VTUxQzA+Cis8VTUxQzk+IDxVNkRCQz4KKzxVNTFDRD4gPFU1MUJCPgorPFU1MUNGPiA8VTZFMUI+Cis8VTUxRDE+IDxVNkU0QT4KKzxVNTFEMj4gPFU3NjlBPgorPFU1MUQzPiA8VTY4MTc+Cis8VTUxRDY+IDxVNTFDNj47PFU2RTk2PgorPFU1MURCPiA8VTUxREM+OzxVNkY5Rj4KKzxVNTFEQz4gPFU1MURCPjs8VTZGOUY+Cis8VTUxREU+IDxVNzEwOD47PFU3MTU1Pjs8VTcxODg+OzxVNzE5OT4KKzxVNTFFMD4gPFU1RTdFPjs8VTY3M0E+Cis8VTUxRTE+IDxVNTFFMj47PFU1MUUzPgorPFU1MUUyPiA8VTUxRTE+OzxVNTFFMz4KKzxVNTFFMz4gPFU1MUUxPjs8VTUxRTI+Cis8VTUxRTQ+IDxVOUNGMz4KKzxVNTFFNT4gPFU1QzQ1PgorPFU1MUU2PiA8VTU5MDQ+OzxVODY1NT4KKzxVNTFFOD4gPFU1MUVDPjs8VTUxRUU+OzxVOThBOD47PFU5OENDPjs8VTk4Q0U+Cis8VTUxRUI+IDxVOUNFNz4KKzxVNTFFQz4gPFU1MUU4Pjs8VTUxRUU+OzxVOThBOD47PFU5OENDPjs8VTk4Q0U+Cis8VTUxRUQ+IDxVNTFGND47PFU2MTdGPjs8VTYxOTE+Cis8VTUxRUU+IDxVNTFFOD47PFU1MUVDPjs8VTk4QTg+OzxVOThDQz47PFU5OENFPgorPFU1MUVGPiA8VTUxRjE+Cis8VTUxRjE+IDxVNTFFRj4KKzxVNTFGMj4gPFU1QzMyPjs8VTVDMzQ+OzxVNUMzNj47PFU1QzM3Pjs8VTlCNTA+Cis8VTUxRjM+IDxVNkFDOD4KKzxVNTFGND4gPFU1MUVEPjs8VTYxN0Y+OzxVNjE5MT4KKzxVNTFGNj4gPFU1MTQ3PgorPFU1MUY3PiA8VTU3NTc+OzxVNTg0QT47PFU1OEE0PgorPFU1MUZBPiA8VTVDODA+OzxVOUY2Mz4KKzxVNTFGQj4gPFU2NDgzPjs8VTY0Q0E+Cis8VTUxRkQ+IDxVNTFGRT4KKzxVNTFGRT4gPFU1MUZEPgorPFU1MUZGPiA8VTk0N0Y+Cis8VTUyMDA+IDxVNTIwMj47PFU5MUQ2PgorPFU1MjAyPiA8VTUyMDA+OzxVOTFENj4KKzxVNTIwMz4gPFU1MjA0PgorPFU1MjA0PiA8VTUyMDM+Cis8VTUyMDU+IDxVNTIxQj47PFU1Mjc1PgorPFU1MjA4PiA8VTRFNDI+OzxVODJDNT4KKzxVNTIwQT4gPFU2ODFFPgorPFU1MjBEPiA8VTgyQkI+Cis8VTUyMTI+IDxVNTI4Mz47PFU1MjkwPjs8VTc1M0I+Cis8VTUyMTM+IDxVNTZFRD4KKzxVNTIxND4gPFU2Mjg5PgorPFU1MjE4PiA8VTUyODk+Cis8VTUyMTk+IDxVNTI0Nz4KKzxVNTIxQT4gPFU1MjVCPgorPFU1MjFCPiA8VTUyMDU+OzxVNTIzMT47PFU1MjRGPjs8VTUyNTk+OzxVNTI3NT4KKzxVNTIyMD4gPFU1MjJBPgorPFU1MjI1PiA8VTUyMkI+Cis8VTUyMjY+IDxVNTIyNz47PFU1MjNDPjs8VTUyQUI+Cis8VTUyMjc+IDxVNTIyNj47PFU1MjNDPjs8VTUyQUI+Cis8VTUyMjg+IDxVOTI0Qj47PFU5NDY0Pjs8VTk0Qzc+Cis8VTUyMkE+IDxVNTIyMD4KKzxVNTIyQj4gPFU1MjI1Pjs8VTVGNDY+Cis8VTUyMkM+IDxVNTI1Nz47PFU1Mjc3Pjs8VTkzREY+OzxVOTRGMj4KKzxVNTIyRD4gPFU1MjQ0PgorPFU1MjJFPiA8VTk4QjM+Cis8VTUyMzE+IDxVNTIxQj47PFU1MjRGPjs8VTUyNTk+OzxVNTI3NT4KKzxVNTIzND4gPFU1MjQxPgorPFU1MjM2PiA8VTg4RkQ+Cis8VTUyMzk+IDxVNTI0RT4KKzxVNTIzQT4gPFU1MjNFPgorPFU1MjNDPiA8VTUyMjY+OzxVNTIyNz47PFU1MkFCPgorPFU1MjNEPiA8VTUyOEE+Cis8VTUyM0U+IDxVNTIzQT4KKzxVNTIzRj4gPFU1MjhDPgorPFU1MjQwPiA8VTUyNzQ+Cis8VTUyNDE+IDxVNTIzND4KKzxVNTI0Mj4gPFU1MjY0Pjs8VTUyOTE+Cis8VTUyNDM+IDxVOUIwMD4KKzxVNTI0ND4gPFU1MjJEPgorPFU1MjQ3PiA8VTUyMTk+Cis8VTUyNEI+IDxVNTE0Qj47PFU1MkNBPjs8VTVDMDU+Cis8VTUyNEM+IDxVNkU4Mj4KKzxVNTI0RD4gPFU2QjZDPgorPFU1MjRFPiA8VTUyMzk+Cis8VTUyNEY+IDxVNTIxQj47PFU1MjMxPjs8VTUyNTk+OzxVNTI3NT4KKzxVNTI1MD4gPFU1MjZFPjs8VTUzRTc+Cis8VTUyNTE+IDxVNTI2Mz47PFU1MjcxPjs8VTUyOEQ+OzxVNTI4RT47PFU1MjkyPjs8VTUyOTQ+OzxVOTFGMD47PFU5MUZDPgorPFU1MjU3PiA8VTUyMkM+OzxVNTI3Nz47PFU5M0RGPjs8VTk0RjI+Cis8VTUyNTk+IDxVNTIxQj47PFU1MjMxPjs8VTUyNEY+OzxVNTI3NT4KKzxVNTI1QT4gPFU1MDMzPgorPFU1MjVCPiA8VTUyMUE+Cis8VTUyNUQ+IDxVNTI2NT4KKzxVNTI2Mz4gPFU1MjUxPjs8VTUyNzE+OzxVNTI4RD47PFU1MjhFPjs8VTUyOTI+OzxVNTI5ND47PFU5MUYwPjs8VTkxRkM+Cis8VTUyNjQ+IDxVNTI0Mj47PFU1MjkxPgorPFU1MjY1PiA8VTUyNUQ+Cis8VTUyNjY+IDxVOTVCOT47PFU5NjA5PgorPFU1MjY3PiA8VTUyODc+Cis8VTUyNjk+IDxVNTI3MD4KKzxVNTI2RT4gPFU1MThFPjs8VTUyNTA+OzxVNTNFNz4KKzxVNTI3MD4gPFU1MjY5PgorPFU1MjcxPiA8VTUyNTE+OzxVNTI2Mz47PFU1MjhEPjs8VTUyOEU+OzxVNTI5Mj47PFU1Mjk0Pjs8VTkxRjA+OzxVOTFGQz4KKzxVNTI3Mz4gPFU2NzJEPgorPFU1Mjc0PiA8VTUyNDA+Cis8VTUyNzU+IDxVNTIwNT47PFU1MjFCPjs8VTUyMzE+OzxVNTI0Rj47PFU1MjU5PgorPFU1Mjc3PiA8VTUyMkM+OzxVNTI1Nz47PFU5M0RGPjs8VTk0RjI+Cis8VTUyNzk+IDxVNjIyRT4KKzxVNTI3Rj4gPFU1MkU2PgorPFU1MjgzPiA8VTUyMTI+OzxVNTI5MD47PFU3NTNCPgorPFU1Mjg0PiA8VTdCOUE+Cis8VTUyODc+IDxVNTI2Nz4KKzxVNTI4OT4gPFU1MjE4PgorPFU1MjhBPiA8VTUyM0Q+Cis8VTUyOEM+IDxVNTIzRj4KKzxVNTI4RD4gPFU1MjUxPjs8VTUyNjM+OzxVNTI3MT47PFU1MjhFPjs8VTUyOTI+OzxVNTI5ND47PFU5MUYwPjs8VTkxRkM+Cis8VTUyOEU+IDxVNTI1MT47PFU1MjYzPjs8VTUyNzE+OzxVNTI4RD47PFU1MjkyPjs8VTUyOTQ+OzxVOTFGMD47PFU5MUZDPgorPFU1MjkwPiA8VTUyMTI+OzxVNTI4Mz47PFU3NTNCPgorPFU1MjkxPiA8VTUyNDI+OzxVNTI2ND4KKzxVNTI5Mj4gPFU1MjUxPjs8VTUyNjM+OzxVNTI3MT47PFU1MjhEPjs8VTUyOEU+OzxVNTI5ND47PFU5MUYwPjs8VTkxRkM+Cis8VTUyOTQ+IDxVNTI1MT47PFU1MjYzPjs8VTUyNzE+OzxVNTI4RD47PFU1MjhFPjs8VTUyOTI+OzxVOTFGMD47PFU5MUZDPgorPFU1Mjk1PiA8VThDQUQ+OzxVOENFQT4KKzxVNTI5RD4gPFU1MkU3Pjs8VTUyRjg+Cis8VTUyOUU+IDxVOEZBNj4KKzxVNTI5Rj4gPFU3Q0ZDPjs8VTdDRkY+Cis8VTUyQTE+IDxVNTJEOT4KKzxVNTJBMj4gPFU1MkYxPgorPFU1MkE4PiA8VTRFQzI+OzxVNTBDRD47PFU1MkQ1PgorPFU1MkFBPiA8VTRGMkU+Cis8VTUyQUI+IDxVNTIyNj47PFU1MjI3Pjs8VTUyM0M+Cis8VTUyQjE+IDxVNTJGNT4KKzxVNTJCMj4gPFU1MkMxPgorPFU1MkIzPiA8VTUyQjQ+OzxVNTJERT47PFU2MUE1PgorPFU1MkI0PiA8VTUyQjM+OzxVNTJERT47PFU2MUE1PgorPFU1MkI1PiA8VTUwMjY+OzxVNTJDQz4KKzxVNTJCOT4gPFU2NTQ4PgorPFU1MkJGPiA8VTUyRTI+Cis8VTUyQzE+IDxVNTJCMj4KKzxVNTJDND4gPFU2NTRGPgorPFU1MkM1PiA8VTUyRDE+OzxVNjU1NT4KKzxVNTJDNz4gPFU1MkM4PgorPFU1MkM4PiA8VTUyQzc+Cis8VTUyQ0E+IDxVNTE0Qj47PFU1MjRCPjs8VTVDMDU+Cis8VTUyQ0I+IDxVNTJEQj47PFU1MkYyPjs8VTUyRjM+Cis8VTUyQ0M+IDxVNTAyNj47PFU1MkI1PgorPFU1MkQxPiA8VTUyQzU+OzxVNUY5NT47PFU1RkEwPjs8VTY1NTU+Cis8VTUyRDU+IDxVNEVDMj47PFU1MENEPjs8VTUyQTg+Cis8VTUyRDY+IDxVNTJENz47PFU2NzAyPgorPFU1MkQ3PiA8VTUyRDY+OzxVNjcwMj4KKzxVNTJEOT4gPFU1MkExPgorPFU1MkRBPiA8VTUyRTk+Cis8VTUyREI+IDxVNTJDQj47PFU1MkYyPjs8VTUyRjM+Cis8VTUyREQ+IDxVODBEQz4KKzxVNTJERT4gPFU1MkIzPjs8VTUyQjQ+OzxVNjFBNT4KKzxVNTJFMD4gPFU2MjJFPgorPFU1MkUyPiA8VTUyQkY+Cis8VTUyRTQ+IDxVNjFDMz4KKzxVNTJFNj4gPFU1MjdGPgorPFU1MkU3PiA8VTUyOUQ+OzxVNTJGOD4KKzxVNTJFOT4gPFU1MkRBPgorPFU1MkYxPiA8VTUyQTI+Cis8VTUyRjI+IDxVNTJDQj47PFU1MkRCPjs8VTUyRjM+Cis8VTUyRjM+IDxVNTJDQj47PFU1MkRCPjs8VTUyRjI+Cis8VTUyRjU+IDxVNTJCMT4KKzxVNTJGOD4gPFU1MjlEPjs8VTUyRTc+Cis8VTUyRkI+IDxVNTMwMD4KKzxVNTMwMD4gPFU1MkZCPgorPFU1MzAzPiA8VTRFMTA+OzxVNTMwND4KKzxVNTMwND4gPFU0RTEwPjs8VTUzMDM+Cis8VTUzMDU+IDxVOUVBRD4KKzxVNTMwNj4gPFU1RkU5Pjs8VTYwMzE+OzxVNjBBND4KKzxVNTMwQT4gPFU2M0FDPgorPFU1MzE4PiA8VTgxMzM+OzxVODE2Nj4KKzxVNTMxQT4gPFU1MzM4PgorPFU1MzFCPiA8VTY3RTk+OzxVNjdGRT4KKzxVNTMxRD4gPFU1RTAwPjs8VThGQ0E+Cis8VTUzMUU+IDxVNTMyMD4KKzxVNTMyMD4gPFU1MzFFPgorPFU1MzIxPiA8VTUzMjk+Cis8VTUzMjY+IDxVNTMyRD4KKzxVNTMyNz4gPFU3QkNCPgorPFU1MzI4PiA8VTg1MzU+OzxVODVDRj4KKzxVNTMyOT4gPFU1MzIxPgorPFU1MzJEPiA8VTUzMjY+Cis8VTUzMkU+IDxVNTMzMT4KKzxVNTMyRj4gPFU2QzQ3Pjs8VTZFRDk+Cis8VTUzMzE+IDxVNTMyRT4KKzxVNTMzMj4gPFU1MzMzPjs8VTU5NDE+OzxVNTk2OT4KKzxVNTMzMz4gPFU1MzMyPjs8VTU5NDE+OzxVNTk2OT4KKzxVNTMzOD4gPFU1MzFBPgorPFU1MzNBPiA8VTUzNDA+Cis8VTUzM0I+IDxVNkJDOT47PFU5MUFCPgorPFU1MzQwPiA8VTUzM0E+Cis8VTUzNDM+IDxVOTdDNj4KKzxVNTM0Nj4gPFU1MzUyPgorPFU1MzQ3PiA8VTY2MDc+OzxVNjZGQj47PFU5NjI5Pjs8VTk2NUU+Cis8VTUzNDk+IDxVODI5ND4KKzxVNTM0Qj4gPFU0RTE2Pjs8VTRFMTc+Cis8VTUzNEQ+IDxVNTM1MD4KKzxVNTM0RT4gPFU1RDBCPjs8VTgzRUY+OzxVODU1MD4KKzxVNTM0Rj4gPFU1MzU0Pjs8VTUzRjY+OzxVNjVFQT4KKzxVNTM1MD4gPFU1MzREPgorPFU1MzUyPiA8VTUzNDY+Cis8VTUzNTM+IDxVNjg0Qz47PFU2OUQ1PgorPFU1MzU0PiA8VTUzNEY+OzxVNTNGNj47PFU2NUVBPgorPFU1MzU1PiA8VTUzNTg+OzxVNTVBRT4KKzxVNTM1Nj4gPFU1OEYyPjs8VThDRTM+Cis8VTUzNTg+IDxVNTM1NT47PFU1NUFFPgorPFU1MzVBPiA8VTYxM0Q+Cis8VTUzNUI+IDxVNzM4Nz4KKzxVNTM1Qz4gPFU4M0Q0Pjs8VTg1MTQ+Cis8VTUzNjA+IDxVNEY1ND4KKzxVNTM2Mj4gPFU3NkU3PgorPFU1MzY0PiA8VTUzNjU+OzxVNTg3Nz47PFU2RUY3Pjs8VTZGOUI+OzxVNzAwMj47PFU4OTdGPjs8VTlFNzU+Cis8VTUzNjU+IDxVNTM2ND47PFU4OTdGPgorPFU1MzY3PiA8VTgxRTU+Cis8VTUzNkI+IDxVODg1Qj47PFU4ODVFPgorPFU1MzZFPiA8VTVERjU+Cis8VTUzNkY+IDxVNTkxOD47PFU2MjNDPgorPFU1MzcwPiA8VTVFMDE+Cis8VTUzNzM+IDxVNTM3RD47PFU3NjhEPgorPFU1Mzc0PiA8VTUzN0I+Cis8VTUzNzc+IDxVNURGQj47PFU2MzcyPgorPFU1Mzc4PiA8VTdGMzc+Cis8VTUzNzk+IDxVNjA2ND47PFU4Q0M5PgorPFU1MzdCPiA8VTUzNzQ+Cis8VTUzN0Q+IDxVNTM3Mz47PFU3NjhEPgorPFU1MzgyPiA8VTUzODg+OzxVNTNCMD47PFU1RUUwPgorPFU1Mzg0PiA8VTYyMzk+Cis8VTUzODU+IDxVNUVGMD47PFU1RUYzPgorPFU1Mzg2PiA8VTUzQTQ+OzxVNTNBRj47PFU2NkE2Pjs8VTY2QzY+OzxVNkI3ND47PFU2Qjc3PgorPFU1Mzg3PiA8VTc4RDQ+Cis8VTUzODg+IDxVNTM4Mj4KKzxVNTM4OT4gPFU1M0IyPgorPFU1MzhCPiA8VTU3Mjc+OzxVNThEMz4KKzxVNTM4Qz4gPFU1M0FEPgorPFU1MzhEPiA8VTUzOTk+Cis8VTUzOEU+IDxVNzgyNT4KKzxVNTM5MD4gPFU5RjhFPgorPFU1MzkzPiA8VTVEMTY+Cis8VTUzOTU+IDxVNTNBMD47PFU1RUMxPgorPFU1Mzk4PiA8VTU4RTU+OzxVNUVEQj47PFU5MTNEPjs8VTkxRDA+Cis8VTUzOTk+IDxVNTM4RD4KKzxVNTM5QT4gPFU1Nzk1PgorPFU1MzlCPiA8VTVFRjM+Cis8VTUzOUY+IDxVNTNBMT4KKzxVNTNBMD4gPFU1Mzk1Pjs8VTVFQzE+Cis8VTUzQTE+IDxVNTM5Rj4KKzxVNTNBMj4gPFU1RUMyPgorPFU1M0EzPiA8VTUzQjQ+Cis8VTUzQTQ+IDxVNTM4Nj47PFU2NkM2PgorPFU1M0E2PiA8VTVFQzg+Cis8VTUzQTg+IDxVNUVEQT4KKzxVNTNBOT4gPFU1RUNGPjs8VTVFRDA+Cis8VTUzQUQ+IDxVNTM4Qz4KKzxVNTNBRT4gPFU1RUREPgorPFU1M0FGPiA8VTUzODY+OzxVNjZBNj47PFU2NkM2Pjs8VTZCNzQ+OzxVNkI3Nz4KKzxVNTNCMD4gPFU1MzgyPjs8VTVFRTA+Cis8VTUzQjI+IDxVNTM4OT4KKzxVNTNCMz4gPFU0RTI1Pjs8VTU2QjQ+Cis8VTUzQjQ+IDxVNTNBMz4KKzxVNTNCNT4gPFU2RTkwPgorPFU1M0I2PiA8VTc5QzE+Cis8VTUzQjc+IDxVODBCMT4KKzxVNTNCOD4gPFU5MEJCPjs8VTkxMzA+OzxVOTZBMz4KKzxVNTNCQT4gPFU1M0JCPgorPFU1M0JCPiA8VTUzQkE+Cis8VTUzQkU+IDxVNEUxRj47PFU0RTIyPgorPFU1M0JGPiA8VTc3MEM+OzxVN0UyMz4KKzxVNTNDMT4gPFU0RTA5Pjs8VTVGMEU+Cis8VTUzQzI+IDxVNTNDMz47PFU1M0M0Pjs8VTUzQzU+Cis8VTUzQzM+IDxVNTNDMj47PFU1M0M0Pjs8VTUzQzU+Cis8VTUzQzQ+IDxVNTNDMj47PFU1M0MzPjs8VTUzQzU+Cis8VTUzQzU+IDxVNTNDMj47PFU1M0MzPjs8VTUzQzQ+Cis8VTUzQzY+IDxVOTc0OT4KKzxVNTNDNz4gPFU5NzQ2PgorPFU1M0M4PiA8VTUzRjk+Cis8VTUzQzk+IDxVNjI2OD4KKzxVNTNDQT4gPFU0RTQxPgorPFU1M0NDPiA8VTk2RDk+Cis8VTUzQ0Q+IDxVNEVFRT47PFU1M0RCPjs8VTcwOEQ+Cis8VTUzQ0U+IDxVNjUzNj4KKzxVNTNDRj4gPFU1OTJDPgorPFU1M0QwPiA8VTcyQUU+Cis8VTUzRDE+IDxVNzY3QT47PFU3NjdDPjs8VTlBRUE+OzxVOUFFRT4KKzxVNTNEMz4gPFU0RThBPjs8VTRFOEI+Cis8VTUzRDU+IDxVN0RCND4KKzxVNTNEOD4gPFU1OTA5Pjs8VThCOEE+Cis8VTUzRDk+IDxVNjU0RD47PFU2NTU4PgorPFU1M0RCPiA8VTUzQ0Q+OzxVNzA4RD4KKzxVNTNERT4gPFU1QzA5PgorPFU1M0UwPiA8VTc1NzM+OzxVNzU4Mj47PFU3NTg5Pjs8VTc1OEE+Cis8VTUzRTE+IDxVNThFMT47PFU3NzdGPgorPFU1M0UyPiA8VTRFMUI+OzxVNkEzNz47PFU2QjA5Pjs8VTg1QzI+Cis8VTUzRTc+IDxVNTE4RT47PFU1MjUwPjs8VTUyNkU+Cis8VTUzRUE+IDxVNzlENj47PFU4ODc5Pjs8VTk2QkI+Cis8VTUzRUI+IDxVNTQ0Qz4KKzxVNTNGMD4gPFU1NzZFPjs8VTY3QjE+OzxVNkFBRj47PFU4MUZBPjs8VTk4QjE+Cis8VTUzRjY+IDxVNTM0Rj47PFU1MzU0Pjs8VTY1RUE+OzxVODQ0OT4KKzxVNTNGNz4gPFU4NjVGPgorPFU1M0Y5PiA8VTUzQzg+OzxVNTYwNj47PFU2QjRFPgorPFU1M0ZEPiA8VTU2MzA+Cis8VTU0MDA+IDxVNTRBOT47PFU1NEY2PgorPFU1NDAxPiA8VTdDNzI+OzxVOUZBNT4KKzxVNTQwMz4gPFU1NUFCPjs8VTU2NDQ+Cis8VTU0MDg+IDxVOTVBND4KKzxVNTQwQT4gPFU1RjE0PgorPFU1NDBDPiA8VTRFREQ+OzxVODg1NT4KKzxVNTQwRT4gPFU1RjhDPgorPFU1NDExPiA8VTU2QUU+OzxVNjZDRj4KKzxVNTQxMz4gPFU1Njg3PgorPFU1NDE1PiA8VTU0NDI+Cis8VTU0MTc+IDxVNTVDRT4KKzxVNTQxRD4gPFU2MDYxPgorPFU1NDFFPiA8VTU0NTE+Cis8VTU0MUY+IDxVNTUyQj47PFU1NjU2Pjs8VThBMjE+Cis8VTU0Mjg+IDxVNTY3OD4KKzxVNTQyQz4gPFU4MDc0Pjs8VTgwN0Q+Cis8VTU0MkY+IDxVNTUxOD47PFU1NTUzPjs8VTU1NTQ+OzxVNTU1Rj47PFU4QUVDPjs8VTk1RDk+Cis8VTU0MzM+IDxVNTQzND47PFU1NDQ5PgorPFU1NDM0PiA8VTU0MzM+OzxVNTQ0OT4KKzxVNTQzNj4gPFU1NDUwPgorPFU1NDNCPiA8VTgxMTc+Cis8VTU0M0Q+IDxVNTQ0RD4KKzxVNTQzRj4gPFU1NDRBPgorPFU1NDQyPiA8VTU0MTU+Cis8VTU0NDg+IDxVNjI4Mj47PFU3MkMyPgorPFU1NDQ5PiA8VTU0MzM+OzxVNTQzND4KKzxVNTQ0QT4gPFU1NDNGPgorPFU1NDRDPiA8VTUzRUI+Cis8VTU0NEQ+IDxVNTQzRD4KKzxVNTQ1MD4gPFU1NDM2PgorPFU1NDUxPiA8VTU0MUU+Cis8VTU0NTI+IDxVNTYzOD4KKzxVNTQ1Mz4gPFU1NkM4PgorPFU1NDU1PiA8VTU2MTQ+Cis8VTU0NTY+IDxVNTZBNj4KKzxVNTQ1Nz4gPFU1NTA0PgorPFU1NDU4PiA8VTU0RTE+OzxVOEM5Rj47PFU4RDIwPgorPFU1NDU5PiA8VTU0QkM+OzxVNTU4RT4KKzxVNTQ1QT4gPFU1NEZBPgorPFU1NDVCPiA8VTU1QzY+Cis8VTU0NUM+IDxVNTVEQT4KKzxVNTQ2Nz4gPFU4QTQ2PgorPFU1NDY4PiA8VTkwMzE+Cis8VTU0Njk+IDxVNTVEQz4KKzxVNTQ2QT4gPFU1NDkyPjs8VThBNEI+Cis8VTU0NkQ+IDxVOEE0RD4KKzxVNTQ3Qz4gPFU1NjExPjs8VTg2NTY+OzxVOEIzQz4KKzxVNTQ4NT4gPFU1NEUzPgorPFU1NDhBPiA8VTU0OEM+OzxVNjBEMj47PFU5RkEyPgorPFU1NDhDPiA8VTU0OEE+OzxVNjBEMj47PFU5RkEyPgorPFU1NDhGPiA8VThBNjA+Cis8VTU0OTI+IDxVNTQ2QT47PFU4QTRCPgorPFU1NDk5PiA8VTU2QTg+Cis8VTU0OUI+IDxVNTY4MD4KKzxVNTQ5Qz4gPFU1NEE0PgorPFU1NDlEPiA8VTU2NUQ+Cis8VTU0QTQ+IDxVNTQ5Qz4KKzxVNTRBOT4gPFU1NDAwPjs8VTU0RjY+Cis8VTU0QUM+IDxVOUY2OT4KKzxVNTRBRj4gPFU1NTgwPjs8VTg4NDk+Cis8VTU0QjE+IDxVNTAwMz47PFU1MDdBPjs8VTU1OTI+Cis8VTU0QjI+IDxVNTE3Mz47PFU3QjExPgorPFU1NEI4PiA8VTkxOEU+OzxVOUU3OT4KKzxVNTRCQz4gPFU1NDU5Pjs8VTU1OEU+Cis8VTU0QkQ+IDxVNTZBNT4KKzxVNTRDND4gPFU5NUE3Pjs8VTlCMjg+Cis8VTU0Q0Q+IDxVOTdGRj4KKzxVNTREMT4gPFU1NTE2Pjs8VTU1NUU+OzxVNzVENj47PFU3NjAyPgorPFU1NEQyPiA8VTU2NjA+Cis8VTU0RDM+IDxVNTYzNT4KKzxVNTREND4gPFU1NUY2PgorPFU1NEQ1PiA8VTU2NjY+Cis8VTU0RDc+IDxVNTYyOT47PFU4QjQxPgorPFU1NEQ5PiA8VTU2NzI+Cis8VTU0REM+IDxVNTY4Qz4KKzxVNTRERD4gPFU1NjY1PgorPFU1NERGPiA8VTU1QjI+Cis8VTU0RTE+IDxVNTQ1OD47PFU4QzlGPjs8VThEMjA+Cis8VTU0RTM+IDxVNTQ4NT4KKzxVNTRFQz4gPFU4QTM2PgorPFU1NEYyPiA8VTU1NjA+OzxVNTU4Nj47PFU1NjlFPjs8VTU3RDE+OzxVNjA4QT4KKzxVNTRGNj4gPFU1NDAwPjs8VTU0QTk+Cis8VTU0RkE+IDxVNTQ1QT4KKzxVNTUwMD4gPFU4QTk4Pjs8VThCRjE+Cis8VTU1MDQ+IDxVNTQ1Nz4KKzxVNTUwNz4gPFU4MTIzPgorPFU1NTBEPiA8VTgzOUU+Cis8VTU1MTA+IDxVNTU3QT4KKzxVNTUxNT4gPFU1NTIzPgorPFU1NTE2PiA8VTU0RDE+OzxVNTU1RT47PFU3NUQ2Pjs8VTc2MDI+Cis8VTU1MTg+IDxVNTQyRj47PFU1NTUzPjs8VTU1NTQ+OzxVNTU1Rj47PFU4QUVDPjs8VTk1RDk+Cis8VTU1MUI+IDxVNTYxQz4KKzxVNTUxRD4gPFU1NUNBPgorPFU1NTIwPiA8VTU2MkU+Cis8VTU1MjI+IDxVNTVFOT4KKzxVNTUyMz4gPFU1NTE1PgorPFU1NTI0PiA8VTU1OUE+Cis8VTU1Mjc+IDxVNTU5RT4KKzxVNTUyQj4gPFU1NDFGPgorPFU1NTMxPiA8VThBQUY+Cis8VTU1Mzg+IDxVNUZGNT4KKzxVNTU0MD4gPFU1NjBBPgorPFU1NTQ2PiA8VThCMkE+Cis8VTU1NEY+IDxVOTVFRT4KKzxVNTU1Mz4gPFU1NDJGPjs8VTU1MTg+OzxVNTU1ND47PFU1NTVGPjs8VThBRUM+OzxVOTVEOT4KKzxVNTU1ND4gPFU1NDJGPjs8VTU1MTg+OzxVNTU1Mz47PFU1NTVGPjs8VThBRUM+OzxVOTVEOT4KKzxVNTU1Nj4gPFU1NjQ5PgorPFU1NTU3PiA8VTU2NDk+Cis8VTU1NUU+IDxVNTREMT47PFU1NTE2Pjs8VTc1RDY+OzxVNzYwMj4KKzxVNTU1Rj4gPFU1NDJGPjs8VTU1MTg+OzxVNTU1Mz47PFU1NTU0Pjs8VThBRUM+OzxVOTVEOT4KKzxVNTU2MD4gPFU1NEYyPjs8VTU1ODY+OzxVNTY5RT47PFU1N0QxPjs8VTYwOEE+Cis8VTU1NjM+IDxVODg1ND47PFU4ODU4Pjs8VTkyOUM+Cis8VTU1Njc+IDxVNTYxNj4KKzxVNTU2Qz4gPFU1NUM3PgorPFU1NTZEPiA8VTU2QzA+Cis8VTU1NkU+IDxVNTY1Qj47PFU1Njk5Pjs8VTU2RDM+OzxVOUY2Nz4KKzxVNTU2Rj4gPFU1NjEzPgorPFU1NTcwPiA8VTU2Qzk+OzxVN0Y1Nz4KKzxVNTU3ND4gPFU1NjNEPgorPFU1NTc4PiA8VTU2MkY+Cis8VTU1N0E+IDxVNTUxMD4KKzxVNTU4MD4gPFU1NEFGPjs8VTg4NDk+Cis8VTU1ODI+IDxVOTkyNz47PFU5OTM1PgorPFU1NTg0PiA8VThCNzE+Cis8VTU1ODY+IDxVNTRGMj47PFU1NTYwPjs8VTU2OUU+OzxVNTdEMT47PFU2MDhBPgorPFU1NThFPiA8VTU0NTk+OzxVNTRCQz4KKzxVNTU5MT4gPFU1NjdFPjs8VTc2MTY+Cis8VTU1OTI+IDxVNTAwMz47PFU1MDdBPjs8VTU0QjE+Cis8VTU1OUE+IDxVNTUyND4KKzxVNTU5Qz4gPFU2MTk4Pjs8VTYxOTk+OzxVNkI1Nj4KKzxVNTU5RT4gPFU1NTI3PgorPFU1NUE5PiA8VTU1QkI+Cis8VTU1QUE+IDxVNEUyNz4KKzxVNTVBQj4gPFU1NDAzPjs8VTU2NDQ+Cis8VTU1QUM+IDxVNEU1ND4KKzxVNTVBRT4gPFU1MzU1Pjs8VTUzNTg+Cis8VTU1QUY+IDxVNTVCNz47PFU1Njc0PgorPFU1NUIwPiA8VTk4REY+OzxVOThFMD47PFU5OTYzPgorPFU1NUIyPiA8VTU0REY+Cis8VTU1QjY+IDxVNzFERj47PFU4NDI1PgorPFU1NUI3PiA8VTU1QUY+OzxVNTY3ND4KKzxVNTVCQj4gPFU1NUE5PgorPFU1NUJEPiA8VTU2MEQ+Cis8VTU1QkU+IDxVNTZCMz4KKzxVNTVDNT4gPFU5RjQ1PgorPFU1NUM2PiA8VTU0NUI+Cis8VTU1Qzc+IDxVNTU2Qz4KKzxVNTVDQT4gPFU1NTFEPgorPFU1NUNFPiA8VTU0MTc+Cis8VTU1REE+IDxVNTQ1Qz4KKzxVNTVEQz4gPFU1NDY5PgorPFU1NUUwPiA8VTkxNkE+Cis8VTU1RTM+IDxVNUI2MD4KKzxVNTVFNT4gPFU1NjM3PgorPFU1NUU5PiA8VTU1MjI+Cis8VTU1RUI+IDxVNTZDMT4KKzxVNTVGMz4gPFU1NjZGPgorPFU1NUY2PiA8VTU0RDQ+Cis8VTU1Rjk+IDxVOEIzMD4KKzxVNTYwNj4gPFU1M0Y5Pjs8VTZCNEU+Cis8VTU2MEE+IDxVNTU0MD4KKzxVNTYwRD4gPFU1NUJEPgorPFU1NjExPiA8VTU0N0M+OzxVOEIzQz4KKzxVNTYxMz4gPFU1NTZGPgorPFU1NjE0PiA8VTU0NTU+Cis8VTU2MTY+IDxVNTU2Nz4KKzxVNTYxNz4gPFU1NjkwPjs8VTVDMUQ+OzxVNzUxRT4KKzxVNTYxOD4gPFU1NjUzPgorPFU1NjFDPiA8VTU1MUI+Cis8VTU2MjQ+IDxVNTZCNj4KKzxVNTYyOD4gPFU1NjJGPgorPFU1NjI5PiA8VTU0RDc+OzxVOEI0MT4KKzxVNTYyRT4gPFU1NTIwPgorPFU1NjJGPiA8VTU1Nzg+OzxVNTYyOD4KKzxVNTYzMD4gPFU1M0ZEPgorPFU1NjMxPiA8VTU2RDE+Cis8VTU2MzU+IDxVNTREMz4KKzxVNTYzNz4gPFU1NUU1PgorPFU1NjM4PiA8VTU0NTI+Cis8VTU2M0Q+IDxVNTU3ND4KKzxVNTY0MT4gPFU2MDc2PgorPFU1NjQyPiA8VThCNTA+Cis8VTU2NDQ+IDxVNTQwMz47PFU1NUFCPgorPFU1NjQ1PiA8VTU2NTU+Cis8VTU2NDk+IDxVNTU1Nj47PFU1NTU3PgorPFU1NjUwPiA8VTU2Njg+Cis8VTU2NTM+IDxVNTYxOD4KKzxVNTY1NT4gPFU1NjQ1PgorPFU1NjU2PiA8VTU0MUY+OzxVOEEyMT4KKzxVNTY1Qj4gPFU1NTZFPjs8VTU2OTk+Cis8VTU2NUM+IDxVNTY5NT4KKzxVNTY1RD4gPFU1NDlEPgorPFU1NjYwPiA8VTU0RDI+Cis8VTU2NjE+IDxVOEI2Qj4KKzxVNTY2NT4gPFU1NEREPgorPFU1NjY2PiA8VTU0RDU+Cis8VTU2Njg+IDxVNTY1MD4KKzxVNTY2QT4gPFU4QjVGPgorPFU1NjZGPiA8VTU1RjM+Cis8VTU2NzI+IDxVNTREOT4KKzxVNTY3ND4gPFU1NUFGPjs8VTU1Qjc+Cis8VTU2NzU+IDxVODg1Qz47PFU4ODVGPjs8VTkwNTM+Cis8VTU2Nzg+IDxVNTQyOD4KKzxVNTY3OT4gPFU1RjUzPgorPFU1NjdFPiA8VTU1OTE+Cis8VTU2ODA+IDxVNTQ5Qj4KKzxVNTY4Nz4gPFU1NDEzPgorPFU1NjhDPiA8VTU0REM+Cis8VTU2OEY+IDxVNTY5ND4KKzxVNTY5MD4gPFU1NjE3Pjs8VTVDMUQ+OzxVNzUxRT4KKzxVNTY5ND4gPFU1NjhGPgorPFU1Njk1PiA8VTU2NUM+Cis8VTU2OTk+IDxVNTU2RT47PFU1NjVCPjs8VTU2RDM+OzxVOUY2Nz4KKzxVNTY5RT4gPFU1NEYyPjs8VTU1NjA+OzxVNTU4Nj47PFU1N0QxPjs8VTYwOEE+Cis8VTU2QTA+IDxVNkQ0Rj4KKzxVNTZBMj4gPFU1NkNBPgorPFU1NkEzPiA8VTU2QzI+Cis8VTU2QTU+IDxVNTRCRD4KKzxVNTZBNj4gPFU1NDU2PgorPFU1NkE4PiA8VTU0OTk+Cis8VTU2QUU+IDxVNTQxMT4KKzxVNTZCMj4gPFU0RUI4PgorPFU1NkIzPiA8VTU1QkU+Cis8VTU2QjQ+IDxVNEUyNT47PFU1M0IzPgorPFU1NkI2PiA8VTU2MjQ+Cis8VTU2QkI+IDxVNTZDMj4KKzxVNTZDMD4gPFU1NTZEPgorPFU1NkMxPiA8VTU1RUI+Cis8VTU2QzI+IDxVNTZBMz47PFU1NkJCPgorPFU1NkM1PiA8VTUxODE+Cis8VTU2Qzg+IDxVNTQ1Mz4KKzxVNTZDOT4gPFU1NTcwPjs8VTdGNTc+Cis8VTU2Q0E+IDxVNTZBMj4KKzxVNTZDQz4gPFU4MkNGPgorPFU1NkNGPiA8VTgyNzE+Cis8VTU2RDE+IDxVNTYzMT4KKzxVNTZEMz4gPFU1NTZFPjs8VTU2OTk+OzxVOUY2Nz4KKzxVNTZENz4gPFU1NkYyPjs8VTU2RjQ+OzxVNTcwRD4KKzxVNTZEOD4gPFU1NkRFPjs8VTU2RUM+OzxVNUVGQj47PFU1RUZEPjs8VThGRjQ+OzxVOTAyNT4KKzxVNTZEOT4gPFU1NkUwPgorPFU1NkRCPiA8VTRFOTY+Cis8VTU2REU+IDxVNTZEOD47PFU1NkVDPjs8VTVFRkI+OzxVNUVGRD47PFU4RkY0Pjs8VTkwMjU+Cis8VTU2REY+IDxVOTg1Nj4KKzxVNTZFMD4gPFU1NkQ5PgorPFU1NkUyPiA8VTU2RTM+OzxVNTcxOD47PFU3Q0YwPgorPFU1NkUzPiA8VTU2RTI+OzxVNTcxOD47PFU3Q0YwPgorPFU1NkU2PiA8VTZERjU+OzxVNkUwQT47PFU2RTE1PgorPFU1NkU3PiA8VTUxOEY+Cis8VTU2RUE+IDxVNTZGMT4KKzxVNTZFQz4gPFU1NkQ4Pjs8VTU2REU+OzxVNUVGQj47PFU1RUZEPjs8VThGRjQ+OzxVOTAyNT4KKzxVNTZFRD4gPFU1MjEzPjs8VTU3MTI+OzxVODU5Nz4KKzxVNTZFRj4gPFU1NkY2Pjs8VTU2RkI+OzxVNTZGRD47PFU1NzAwPjs8VTU3MEI+Cis8VTU2RjA+IDxVNzc0Rj4KKzxVNTZGMT4gPFU1NkVBPgorPFU1NkYyPiA8VTU2RDc+OzxVNTZGND47PFU1NzBEPgorPFU1NkYzPiA8VTU2RkU+OzxVNTcxNj47PFU1NzE3PgorPFU1NkY0PiA8VTU2RDc+OzxVNTZGMj47PFU1NzBEPgorPFU1NkY1PiA8VTU3MDc+Cis8VTU2RjY+IDxVNTZFRj47PFU1NkZCPjs8VTU2RkQ+OzxVNTcwMD47PFU1NzBCPgorPFU1NkY4PiA8VTY1RTU+Cis8VTU2RkI+IDxVNTZFRj47PFU1NkY2Pjs8VTU2RkQ+OzxVNTcwMD47PFU1NzBCPgorPFU1NkZEPiA8VTU2RUY+OzxVNTZGNj47PFU1NkZCPjs8VTU3MDA+OzxVNTcwQj4KKzxVNTZGRT4gPFU1NkYzPjs8VTU3MTY+OzxVNTcxNz4KKzxVNTcwMD4gPFU1NkVGPjs8VTU2RjY+OzxVNTZGQj47PFU1NkZEPjs8VTU3MEI+Cis8VTU3MDM+IDxVNTcxMT4KKzxVNTcwNj4gPFU1MTg2Pjs8VTU3MEU+OzxVNTcxMz4KKzxVNTcwNz4gPFU1NkY1PgorPFU1NzA4PiA8VTU3MEY+Cis8VTU3MEI+IDxVNTZFRj47PFU1NkY2Pjs8VTU2RkI+OzxVNTZGRD47PFU1NzAwPgorPFU1NzBEPiA8VTU2RDc+OzxVNTZGMj47PFU1NkY0PgorPFU1NzBFPiA8VTUxODY+OzxVNTcwNj47PFU1NzEzPgorPFU1NzBGPiA8VTU3MDg+Cis8VTU3MTE+IDxVNTcwMz4KKzxVNTcxMj4gPFU1NkVEPjs8VTg1OTc+Cis8VTU3MTM+IDxVNTE4Nj47PFU1NzA2Pjs8VTU3MEU+Cis8VTU3MTY+IDxVNTZGMz47PFU1NkZFPjs8VTU3MTc+Cis8VTU3MTc+IDxVNTZGMz47PFU1NkZFPjs8VTU3MTY+Cis8VTU3MTg+IDxVNTZFMj47PFU1NkUzPgorPFU1NzFEPiA8VTY4M0U+OzxVNkIxMj4KKzxVNTcxRj4gPFU1NzIxPgorPFU1NzIxPiA8VTU3MUY+Cis8VTU3MjI+IDxVNzUzQT47PFU3NTNDPgorPFU1NzIzPiA8VTgwNTY+Cis8VTU3Mjc+IDxVNTM4Qj47PFU1OEQzPgorPFU1NzI4PiA8VTYyNTc+Cis8VTU3MkM+IDxVNjc0Nz4KKzxVNTcyRD4gPFU3M0VBPgorPFU1NzMwPiA8VTU3NTQ+OzxVNTdDQT47PFU1REIzPgorPFU1NzM5PiA8VTU4RDk+Cis8VTU3M0E+IDxVNTgzND47PFU1ODcyPgorPFU1NzNEPiA8VTZCN0U+OzxVNkI3Rj47PFU2QjgxPjs8VTZDQTE+Cis8VTU3NDA+IDxVOTYyRj4KKzxVNTc0Mj4gPFU1Qzg1Pjs8VTk2MkE+Cis8VTU3NEY+IDxVNTc2Rj47PFU1OENBPjs8VTU4REU+OzxVOTYyQj4KKzxVNTc1MD4gPFU1RUE3PgorPFU1NzUxPiA8VTk2MkM+Cis8VTU3NTM+IDxVNTc4Qj4KKzxVNTc1ND4gPFU1NzMwPjs8VTU3Q0E+OzxVNURCMz4KKzxVNTc1Nz4gPFU1MUY3Pjs8VTU4NEE+OzxVNThBND4KKzxVNTc1OT4gPFU1REUwPgorPFU1NzVBPiA8VTU4MDU+Cis8VTU3NUI+IDxVNThCMD47PFU1OEI1Pjs8VTU4Qzc+OzxVNThEQz47PFU3RjQ4Pjs8VTdGNEU+Cis8VTU3NUM+IDxVNThFMj4KKzxVNTc1RD4gPFU1N0JCPjs8VTU4RTk+Cis8VTU3NUU+IDxVNTg2Mj47PFU5Njk2PgorPFU1NzVGPiA8VTU4QjM+OzxVOTZBQj4KKzxVNTc2MD4gPFU1ODlDPjs8VTc5MDg+Cis8VTU3NjM+IDxVNTgwMj4KKzxVNTc2ND4gPFU1ODAzPgorPFU1NzY2PiA8VTYxQkI+Cis8VTU3Njc+IDxVNTg4Qz4KKzxVNTc2OD4gPFU5NjQwPjs8VTk2NDE+Cis8VTU3NkQ+IDxVNkNFNT4KKzxVNTc2RT4gPFU1M0YwPjs8VTgxRkE+Cis8VTU3NkY+IDxVNTc0Rj47PFU5NjJCPgorPFU1NzcwPiA8VTU3QTc+Cis8VTU3NzM+IDxVNTc4Nz4KKzxVNTc3NT4gPFU0RTE4Pjs8VTRFMjA+Cis8VTU3Nzg+IDxVNTdBMj4KKzxVNTc3QT4gPFU1OEEyPgorPFU1NzgyPiA8VTU3QzA+Cis8VTU3ODQ+IDxVNThERj4KKzxVNTc4NT4gPFU1OEUwPgorPFU1Nzg2PiA8VTU4REE+Cis8VTU3ODc+IDxVNTc3Mz4KKzxVNTc4Qj4gPFU1NzUzPgorPFU1NzkyPiA8VTU4NDE+OzxVNThEOD4KKzxVNTc5Mz4gPFU3NTYxPgorPFU1Nzk0PiA8VTk2N0I+Cis8VTU3OTU+IDxVNTM5QT4KKzxVNTc5Nj4gPFU1ODA2PgorPFU1NzlBPiA8VTU4MkY+OzxVNUMyNz47PFU1QzJEPgorPFU1NzlCPiA8VTU3OUM+Cis8VTU3OUM+IDxVNTc5Qj4KKzxVNTdBMT4gPFU1OEEyPgorPFU1N0EyPiA8VTU3Nzg+Cis8VTU3QTY+IDxVNThCRT4KKzxVNTdBNz4gPFU1NzcwPgorPFU1N0E4PiA8VTVCODg+Cis8VTU3QTk+IDxVNTgwQT47PFU4MDU2PgorPFU1N0FCPiA8VTU4OEE+Cis8VTU3QUQ+IDxVNTdFMT4KKzxVNTdBRj4gPFU1OEI2PgorPFU1N0IxPiA8VTU4Q0I+Cis8VTU3QjI+IDxVNTg0Rj4KKzxVNTdCND4gPFU1ODE2PgorPFU1N0JCPiA8VTU3NUQ+OzxVNThFOT4KKzxVNTdDMD4gPFU1NzgyPgorPFU1N0M2PiA8VTc4NkU+Cis8VTU3Qzg+IDxVOTY1Nj4KKzxVNTdDQT4gPFU1NzMwPjs8VTU3NTQ+OzxVNURCMz4KKzxVNTdEMT4gPFU1NEYyPjs8VTU1NjA+OzxVNTU4Nj47PFU1NjlFPjs8VTYwOEE+Cis8VTU3RDI+IDxVNTdEMz4KKzxVNTdEMz4gPFU1N0QyPgorPFU1N0Q4PiA8VTU4NTI+Cis8VTU3RDk+IDxVNTg2ND47PFU1OENFPgorPFU1N0RBPiA8VTU4MUQ+Cis8VTU3REM+IDxVNThDND47PFU5MUNFPgorPFU1N0RFPiA8VTU4MjQ+OzxVOTY4ND4KKzxVNTdFMT4gPFU1N0FEPgorPFU1N0U2PiA8VTc4OTc+Cis8VTU3Rjc+IDxVNjI2Nz4KKzxVNTdGQz4gPFU1RDBFPjs8VTVENUM+OzxVNzg5NT4KKzxVNTdGRD4gPFU2MzgzPgorPFU1ODAyPiA8VTU3NjM+Cis8VTU4MDM+IDxVNTc2ND4KKzxVNTgwNT4gPFU1NzVBPgorPFU1ODA2PiA8VTU3OTY+Cis8VTU4MDc+IDxVODNFQj4KKzxVNTgwQT4gPFU1N0E5PgorPFU1ODExPiA8VTU4Nzk+Cis8VTU4MTU+IDxVNThBRT47PFU1OEFGPgorPFU1ODE2PiA8VTU3QjQ+Cis8VTU4MTk+IDxVOTY3Qj4KKzxVNTgxRD4gPFU1N0RBPgorPFU1ODI0PiA8VTU3REU+OzxVOTY4ND4KKzxVNTgyNj4gPFU5NjM2Pjs8VTk2OEU+Cis8VTU4MkY+IDxVNTc5QT47PFU1QzI3Pjs8VTVDMkQ+Cis8VTU4MzA+IDxVNTg5NT47PFU5NjgxPgorPFU1ODMxPiA8VTYyQTU+Cis8VTU4MzQ+IDxVNTczQT47PFU1ODcyPgorPFU1ODNBPiA8VTc1NEM+OzxVNzU0RD4KKzxVNTg0MT4gPFU1NzkyPjs8VTU4RDg+Cis8VTU4NDY+IDxVNThFQT4KKzxVNTg0QT4gPFU1MUY3Pjs8VTU3NTc+OzxVNThBND4KKzxVNTg0Qj4gPFU4MzE0PgorPFU1ODREPiA8VTc1N0I+Cis8VTU4NEY+IDxVNTdCMj4KKzxVNTg1MD4gPFU1ODUxPgorPFU1ODUxPiA8VTU4NTA+Cis8VTU4NTI+IDxVNTdEOD4KKzxVNTg1ND4gPFU1ODk2PgorPFU1ODU3PiA8VTZEODI+Cis8VTU4NTk+IDxVNThBNz4KKzxVNTg1QT4gPFU1MUEyPgorPFU1ODVGPiA8VTg0NkM+Cis8VTU4NjE+IDxVNTg2Qj4KKzxVNTg2Mj4gPFU1NzVFPgorPFU1ODY0PiA8VTU3RDk+OzxVNThDRT4KKzxVNTg2Nj4gPFU5NjYzPgorPFU1ODY5PiA8VTc2RDA+OzxVOUU3RD4KKzxVNTg2Qj4gPFU1ODYxPgorPFU1ODcyPiA8VTU3M0E+OzxVNTgzND4KKzxVNTg3NT4gPFU1QzE4PgorPFU1ODc3PiA8VTUzNjQ+OzxVOUU3NT4KKzxVNTg3OT4gPFU1ODExPjs8VTU4Q0Q+Cis8VTU4N0M+IDxVNzUwRT47PFU3ODE2Pjs8VTc4REE+Cis8VTU4ODk+IDxVNzI0NT4KKzxVNTg4QT4gPFU1N0FCPgorPFU1ODhDPiA8VTU3Njc+Cis8VTU4OTU+IDxVNTgzMD47PFU5NjgxPgorPFU1ODk2PiA8VTU4NTQ+Cis8VTU4OTc+IDxVNTg5RT4KKzxVNTg5OT4gPFU1OEJCPjs8VTcyNDY+Cis8VTU4OUM+IDxVNTc2MD47PFU3OTA4PgorPFU1ODlFPiA8VTU4OTc+Cis8VTU4QTI+IDxVNTc3QT47PFU1N0ExPgorPFU1OEE0PiA8VTUxRjc+OzxVNTc1Nz47PFU1ODRBPgorPFU1OEE3PiA8VTU4NTk+Cis8VTU4QUU+IDxVNTgxNT47PFU1OEFGPgorPFU1OEFGPiA8VTU4MTU+OzxVNThBRT4KKzxVNThCMD4gPFU1NzVCPjs8VTU4QjU+OzxVNThEQz47PFU3RjQ4Pjs8VTdGNEU+Cis8VTU4QjM+IDxVNTc1Rj47PFU5NkFCPgorPFU1OEI1PiA8VTU3NUI+OzxVNThCMD47PFU1OERDPjs8VTdGNDg+OzxVN0Y0RT4KKzxVNThCNj4gPFU1N0FGPgorPFU1OEI4PiA8VThFODc+Cis8VTU4QkI+IDxVNTg5OT4KKzxVNThCRT4gPFU1N0E2PgorPFU1OEM0PiA8VTU3REM+OzxVOTFDRT4KKzxVNThDNz4gPFU1NzVCPgorPFU1OENBPiA8VTU3NEY+OzxVNThERT4KKzxVNThDQj4gPFU1N0IxPgorPFU1OENDPiA8VTU4RTQ+Cis8VTU4Q0Q+IDxVNTg3OT4KKzxVNThDRT4gPFU1N0Q5Pjs8VTU4NjQ+Cis8VTU4RDA+IDxVNzRCRD4KKzxVNThEMz4gPFU1MzhCPjs8VTU3Mjc+Cis8VTU4RDg+IDxVNTc5Mj47PFU1ODQxPgorPFU1OEQ5PiA8VTU3Mzk+Cis8VTU4REE+IDxVNTc4Nj4KKzxVNThEQz4gPFU1NzVCPjs8VTU4QjA+OzxVNThCNT47PFU3RjQ4Pjs8VTdGNEU+Cis8VTU4REU+IDxVNTc0Rj47PFU1OENBPgorPFU1OERGPiA8VTU3ODQ+Cis8VTU4RTA+IDxVNTc4NT4KKzxVNThFMT4gPFU1M0UxPjs8VTc3N0Y+Cis8VTU4RTI+IDxVNTc1Qz4KKzxVNThFND4gPFU1OENDPgorPFU1OEU1PiA8VTUzOTg+OzxVNUVEQj47PFU5MTNEPgorPFU1OEU5PiA8VTU3NUQ+OzxVNTdCQj4KKzxVNThFQT4gPFU1ODQ2PgorPFU1OEVFPiA8VTU4RUY+OzxVNThGNT4KKzxVNThFRj4gPFU1OEVFPjs8VTU4RjU+Cis8VTU4RjA+IDxVODA3Mj4KKzxVNThGMT4gPFU1OEY5PgorPFU1OEYyPiA8VTUzNTY+OzxVOENFMz4KKzxVNThGMz4gPFU2QkJCPjs8VTZCQkM+Cis8VTU4RjU+IDxVNThFRT47PFU1OEVGPgorPFU1OEY2PiA8VTU4Rjc+OzxVNThGQT4KKzxVNThGNz4gPFU1OEY2Pjs8VTU4RkE+Cis8VTU4Rjg+IDxVNThGQz4KKzxVNThGOT4gPFU1OEYxPgorPFU1OEZBPiA8VTU4RjY+OzxVNThGNz4KKzxVNThGQj4gPFU1QTdGPjs8VTgwNUY+Cis8VTU4RkM+IDxVNThGOD4KKzxVNThGRD4gPFU1OTAwPjs8VTVCRkY+Cis8VTU5MDA+IDxVNThGRD47PFU1QkZGPgorPFU1OTAyPiA8VTU5MEE+Cis8VTU5MDQ+IDxVNTFFNj47PFU4NjU1PgorPFU1OTA1PiA8VTk2NEQ+Cis8VTU5MDc+IDxVNEZGQj47PFU1MDc5Pjs8VTUwOTk+OzxVNTBDMz4KKzxVNTkwOT4gPFU1M0Q4Pjs8VThCOEE+Cis8VTU5MEE+IDxVNTkwMj4KKzxVNTkwRD4gPFU1RkE5Pjs8VTg5MDc+OzxVODk4Nj4KKzxVNTkwRj4gPFU1OTEzPgorPFU1OTEzPiA8VTU5MEY+Cis8VTU5MTQ+IDxVODY0MT4KKzxVNTkxOD4gPFU1MzZGPjs8VTYyM0M+Cis8VTU5MUE+IDxVNTkxQj4KKzxVNTkxQj4gPFU1OTFBPgorPFU1OTFDPiA8VTRFQjE+Cis8VTU5MUY+IDxVNTkyMD4KKzxVNTkyMD4gPFU1OTFGPgorPFU1OTIyPiA8VTU5MjM+OzxVNjhBNj4KKzxVNTkyMz4gPFU1OTIyPjs8VTY4QTY+Cis8VTU5MjU+IDxVNEYxOT4KKzxVNTkyOT4gPFU1MTcyPjs8VTk3NTQ+OzxVOTc1RD4KKzxVNTkyQz4gPFU1M0NGPgorPFU1OTJEPiA8VTZCODA+Cis8VTU5MzI+IDxVNjcyQz47PFU2OTREPgorPFU1OTMzPiA8VTZDRjA+Cis8VTU5MzQ+IDxVOTgyRD4KKzxVNTkzNj4gPFU2QkQ0PgorPFU1OTM4PiA8VThBODc+Cis8VTU5Mzk+IDxVNTkzRT4KKzxVNTkzQT4gPFU1OTZBPgorPFU1OTNFPiA8VTU5Mzk+Cis8VTU5NDE+IDxVNTMzMj47PFU1MzMzPjs8VTU5Njk+Cis8VTU5NDI+IDxVNTk1MD4KKzxVNTk0Nz4gPFU3QUQyPgorPFU1OTQ4PiA8VTY3RjA+Cis8VTU5NEI+IDxVNTk2RT4KKzxVNTk0Qz4gPFU5RURFPgorPFU1OTUwPiA8VTU5NDI+Cis8VTU5NTQ+IDxVNzI4Nz47PFU5MDI5PgorPFU1OTU2PiA8VTU5Njg+OzxVNTk2Qz47PFU3MzRFPgorPFU1OTU4PiA8VTVGMDk+Cis8VTU5NTk+IDxVNzU1QT4KKzxVNTk2NT4gPFU1OTY3Pjs8VTVEQjQ+Cis8VTU5Njc+IDxVNTk2NT47PFU1REI0PgorPFU1OTY4PiA8VTU5NTY+OzxVNTk2Qz47PFU3MzRFPgorPFU1OTY5PiA8VTUzMzI+OzxVNTMzMz47PFU1OTQxPgorPFU1OTZBPiA8VTU5M0E+Cis8VTU5NkM+IDxVNTk1Nj47PFU1OTY4Pjs8VTczNEU+Cis8VTU5NkU+IDxVNTk0Qj4KKzxVNTk3Nj4gPFU1OUIzPjs8VTVCMkQ+Cis8VTU5Nzg+IDxVNTlFNj47PFU1OUU3PgorPFU1OTg2PiA8VTU5OUQ+OzxVNUEyND47PFU3Q0E3Pjs8VTdDREE+Cis8VTU5ODc+IDxVNUE2Nj47PFU1QThEPgorPFU1OTg4PiA8VTVBQkQ+Cis8VTU5OEE+IDxVNTlEOT4KKzxVNTk4RD4gPFU1OUY4Pjs8VTg1MDU+Cis8VTU5OTI+IDxVNTlBQz4KKzxVNTk5Nj4gPFU3OTQ1PgorPFU1OTk5PiA8VTczODU+Cis8VTU5OUI+IDxVNUFCOD4KKzxVNTk5RD4gPFU1OTg2Pjs8VTVBMjQ+OzxVN0NBNz47PFU3Q0RBPgorPFU1OUE5PiA8VTVBRjU+Cis8VTU5QUE+IDxVNUFENz4KKzxVNTlBQj4gPFU1QUFGPjs8VTVCMDA+Cis8VTU5QUM+IDxVNTk5Mj4KKzxVNTlCMz4gPFU0RjYwPjs8VTU5NzY+OzxVNUIyRD4KKzxVNTlCNz4gPFU0Rjg0Pjs8VTU5RUE+Cis8VTU5Qjg+IDxVNUEzRj47PFU1QTQwPgorPFU1OUM2PiA8VTVBMTI+Cis8VTU5Qzk+IDxVNTlDQT4KKzxVNTlDQT4gPFU1OUM5PgorPFU1OUNCPiA8VTRFNjg+OzxVNTE1OD4KKzxVNTlDRD4gPFU1OUQ3PgorPFU1OUQwPiA8VTVBOEU+Cis8VTU5RDI+IDxVNUEzMD4KKzxVNTlENz4gPFU1OUNEPgorPFU1OUQ5PiA8VTU5OEE+Cis8VTU5REM+IDxVODU5MT4KKzxVNTlFMj4gPFU1QTFGPgorPFU1OUU2PiA8VTU5Nzg+OzxVNTlFNz4KKzxVNTlFNz4gPFU1OTc4Pjs8VTU5RTY+Cis8VTU5RUE+IDxVNEY4ND47PFU1OUI3PgorPFU1OUVCPiA8VTU5RUM+Cis8VTU5RUM+IDxVNTlFQj4KKzxVNTlFRT4gPFU1QUU2PgorPFU1OUY4PiA8VTU5OEQ+OzxVODUwNT4KKzxVNTlGQj4gPFU1QTYzPgorPFU1QTA0PiA8VTVBNDE+Cis8VTVBMDU+IDxVNUE2RD4KKzxVNUEwNj4gPFU1QjA4PgorPFU1QTA3PiA8VTVCMEM+Cis8VTVBMDg+IDxVNUI0Qz4KKzxVNUExMj4gPFU1OUM2PgorPFU1QTE4PiA8VTVCMjI+OzxVNUI0Mz4KKzxVNUExQj4gPFU1QTJGPjs8VTVBMzE+Cis8VTVBMUY+IDxVNTlFMj4KKzxVNUEyND4gPFU1OTg2Pjs8VTU5OUQ+OzxVN0NBNz47PFU3Q0RBPgorPFU1QTI2PiA8VTVCMkE+Cis8VTVBMkQ+IDxVNUIwOT4KKzxVNUEyRj4gPFU1QTFCPjs8VTVBMzE+Cis8VTVBMzA+IDxVNTlEMj4KKzxVNUEzMT4gPFU1QTFCPjs8VTVBMkY+Cis8VTVBMzI+IDxVNUFBNz4KKzxVNUEzND4gPFU1QUZBPjs8VTVBRkI+Cis8VTVBM0Y+IDxVNTlCOD47PFU1QTQwPgorPFU1QTQwPiA8VTU5Qjg+OzxVNUEzRj47PFU1QTUwPgorPFU1QTQxPiA8VTVBMDQ+Cis8VTVBNTA+IDxVNUE0MD4KKzxVNUE2Mz4gPFU1OUZCPgorPFU1QTY2PiA8VTU5ODc+OzxVNUE4RD4KKzxVNUE2Qz4gPFU2REVCPgorPFU1QTZEPiA8VTVBMDU+Cis8VTVBNkY+IDxVNEUzRD47PFU5RTk3PgorPFU1QTczPiA8VTVBRkY+Cis8VTVBNzQ+IDxVNUIzMD47PFU1QjQ2Pjs8VTVCN0U+Cis8VTVBNzU+IDxVNUIwQj4KKzxVNUE3Nj4gPFU1QjM4PgorPFU1QTdGPiA8VTU4RkI+OzxVODA1Rj4KKzxVNUE4RD4gPFU1OTg3Pjs8VTVBNjY+Cis8VTVBOEU+IDxVNTlEMD4KKzxVNUFBNz4gPFU1QTMyPgorPFU1QUFBPiA8VTVBQkM+Cis8VTVBQUQ+IDxVNUIwMz4KKzxVNUFBRj4gPFU1OUFCPjs8VTVCMDA+Cis8VTVBQjg+IDxVNTk5Qj4KKzxVNUFCQz4gPFU1QUFBPgorPFU1QUJEPiA8VTU5ODg+Cis8VTVBQkY+IDxVNjEyNz47PFU4MDZEPgorPFU1QUNCPiA8VTVCMUQ+OzxVODg4NT4KKzxVNUFEMD4gPFU1QjMyPgorPFU1QUQyPiA8VTVCMjE+Cis8VTVBRDQ+IDxVNUIyQT4KKzxVNUFENz4gPFU1OUFBPgorPFU1QUU2PiA8VTU5RUU+Cis8VTVBRjE+IDxVNUIxOT4KKzxVNUFGNT4gPFU1OUE5PgorPFU1QUY2PiA8VTYxOTQ+OzxVNzY0ND4KKzxVNUFGQT4gPFU1QTM0Pjs8VTVBRkI+Cis8VTVBRkI+IDxVNUEzND47PFU1QUZBPgorPFU1QUZGPiA8VTVBNzM+Cis8VTVCMDA+IDxVNTlBQj47PFU1QUFGPgorPFU1QjAzPiA8VTVBQUQ+Cis8VTVCMDg+IDxVNUEwNj4KKzxVNUIwOT4gPFU1QTJEPgorPFU1QjBCPiA8VTVBNzU+Cis8VTVCMEM+IDxVNUEwNz4KKzxVNUIxOT4gPFU1QUYxPgorPFU1QjFEPiA8VTVBQ0I+OzxVODg4NT4KKzxVNUIyMT4gPFU1QUQyPgorPFU1QjIyPiA8VTVBMTg+OzxVNUI0Mz4KKzxVNUIyND4gPFU1QjM3PgorPFU1QjJBPiA8VTVBMjY+OzxVNUFEND4KKzxVNUIyRD4gPFU1OTc2Pjs8VTU5QjM+Cis8VTVCMzA+IDxVNUE3ND47PFU1QjQ2Pjs8VTVCN0U+Cis8VTVCMzI+IDxVNUFEMD4KKzxVNUIzNz4gPFU1QjI0PgorPFU1QjM4PiA8VTVBNzY+Cis8VTVCM0U+IDxVNjFEMj4KKzxVNUI0Mz4gPFU1QTE4Pjs8VTVCMjI+Cis8VTVCNDY+IDxVNUE3ND47PFU1QjMwPjs8VTVCN0U+Cis8VTVCNEM+IDxVNUEwOD4KKzxVNUI1Mj4gPFU1QjUzPgorPFU1QjUzPiA8VTVCNTI+Cis8VTVCNTk+IDxVNUI2Qj4KKzxVNUI2MD4gPFU1NUUzPgorPFU1QjY2PiA8VTVCNzg+OzxVNjU2OT47PFU2NTg1Pjs8VTY1ODY+OzxVNjU4OD4KKzxVNUI2QT4gPFU1QjdGPgorPFU1QjZCPiA8VTVCNTk+Cis8VTVCNzg+IDxVNUI2Nj47PFU2NTY5Pjs8VTY1ODU+OzxVNjU4Nj47PFU2NTg4PgorPFU1QjdDPiA8VTVCN0Q+Cis8VTVCN0Q+IDxVNUI3Qz4KKzxVNUI3RT4gPFU1QTc0Pjs8VTVCMzA+OzxVNUI0Nj4KKzxVNUI3Rj4gPFU1QjZBPgorPFU1QjgxPiA8VTVCQ0Q+OzxVNUJENT47PFU1QkQ3Pjs8VTVCREM+OzxVNUJFNz47PFU3NTJGPgorPFU1QjgyPiA8VTUxOTc+Cis8VTVCODM+IDxVNzI2MD47PFU4Njc1Pjs8VTg2Qzc+Cis8VTVCODY+IDxVN0E3OT4KKzxVNUI4OD4gPFU1N0E4PgorPFU1QjhBPiA8VTdBODE+Cis8VTVCOEQ+IDxVODA4OT4KKzxVNUI5MD4gPFU1MTlEPjs8VTVCOUM+Cis8VTVCOUM+IDxVNTE5RD47PFU1QjkwPgorPFU1QjlEPiA8VTVCREE+OzxVNUJGMz47PFU1QkY2Pjs8VTczRTQ+Cis8VTVCOUU+IDxVNUI5Rj47PFU1QkU2PgorPFU1QjlGPiA8VTVCOUU+OzxVNUJFNj4KKzxVNUJBMD4gPFU1QkY1PgorPFU1QkExPiA8VTVCQjc+OzxVNUJFOT4KKzxVNUJBOT4gPFU1QzRFPgorPFU1QkFBPiA8VTYxQjI+Cis8VTVCQUI+IDxVNUJBRT4KKzxVNUJBRT4gPFU1QkFCPgorPFU1QkI0PiA8VThCOEM+OzxVOTFCQz4KKzxVNUJCNj4gPFU1MEEyPgorPFU1QkI3PiA8VTVCQTE+OzxVNUJFOT4KKzxVNUJCQj4gPFU1QkM2PgorPFU1QkJDPiA8VTUxQTY+OzxVNUJDNz4KKzxVNUJCRD4gPFU1QkRCPjs8VTVCRUM+Cis8VTVCQkU+IDxVOENEMz47PFU4Q0Q0PgorPFU1QkMwPiA8VTkxQzc+Cis8VTVCQzM+IDxVNTFBND4KKzxVNUJDNj4gPFU1QkJCPgorPFU1QkM3PiA8VTUxQTY+OzxVNUJCQz4KKzxVNUJDOD4gPFU5NzUxPjs8VTk3NTI+Cis8VTVCQzk+IDxVOTZCQT47PFU5NzREPjs8VTk3NEU+OzxVOTc0Rj47PFU5REI0Pjs8VTlFMTY+OzxVOUU2ND4KKzxVNUJDQz4gPFU1MUE4PgorPFU1QkNEPiA8VTVCODE+OzxVNUJENT47PFU1QkQ3Pjs8VTVCREM+OzxVNUJFNz47PFU3NTJGPgorPFU1QkQzPiA8VTVFQkQ+Cis8VTVCRDU+IDxVNUI4MT47PFU1QkNEPjs8VTVCRDc+OzxVNUJEQz47PFU1QkU3Pjs8VTc1MkY+Cis8VTVCRDc+IDxVNUI4MT47PFU1QkNEPjs8VTVCRDU+OzxVNUJEQz47PFU1QkU3Pjs8VTc1MkY+Cis8VTVCREE+IDxVNUI5RD47PFU1QkYzPjs8VTVCRjY+OzxVNzNFND4KKzxVNUJEQj4gPFU1QkJEPjs8VTVCRUM+Cis8VTVCREM+IDxVNUI4MT47PFU1QkNEPjs8VTVCRDU+OzxVNUJENz47PFU1QkU3Pjs8VTc1MkY+Cis8VTVCREQ+IDxVNUJFMj4KKzxVNUJERj4gPFU4QTY3PgorPFU1QkUwPiA8VTdBQUQ+OzxVN0FCNj4KKzxVNUJFMj4gPFU1QkREPgorPFU1QkU2PiA8VTVCOUU+OzxVNUI5Rj4KKzxVNUJFNz4gPFU1QjgxPjs8VTVCQ0Q+OzxVNUJENT47PFU1QkQ3Pjs8VTVCREM+OzxVNzUyRj4KKzxVNUJFOT4gPFU1QkExPjs8VTVCQjc+Cis8VTVCRUI+IDxVNTE5OT47PFU1MUE5PgorPFU1QkVDPiA8VTVCQkQ+OzxVNUJEQj4KKzxVNUJGMz4gPFU1QjlEPjs8VTVCREE+OzxVNUJGNj47PFU3M0U0PgorPFU1QkY1PiA8VTVCQTA+Cis8VTVCRjY+IDxVNUI5RD47PFU1QkRBPjs8VTVCRjM+OzxVNzNFND4KKzxVNUJGOT4gPFU1QkZFPjs8VTVDMEQ+Cis8VTVCRkI+IDxVNUMwQj4KKzxVNUJGQz4gPFU1QzBFPgorPFU1QkZFPiA8VTVCRjk+OzxVNUMwRD4KKzxVNUJGRj4gPFU1OEZEPjs8VTU5MDA+Cis8VTVDMDI+IDxVNEUxMz47PFU1QzA4PgorPFU1QzA1PiA8VTUxNEI+OzxVNTI0Qj47PFU1MkNBPgorPFU1QzA2PiA8VTVDMDc+Cis8VTVDMDc+IDxVNUMwNj4KKzxVNUMwOD4gPFU0RTEzPjs8VTVDMDI+Cis8VTVDMDk+IDxVNTNERT4KKzxVNUMwQj4gPFU1QkZCPgorPFU1QzBEPiA8VTVCRjk+OzxVNUJGRT4KKzxVNUMwRT4gPFU1QkZDPgorPFU1QzEyPiA8VTVDMTM+OzxVNUMxND47PFU3MjNFPgorPFU1QzEzPiA8VTVDMTI+OzxVNUMxND47PFU3MjNFPgorPFU1QzE0PiA8VTVDMTI+OzxVNUMxMz47PFU3MjNFPgorPFU1QzE4PiA8VTU4NzU+Cis8VTVDMTk+IDxVNUMxQT4KKzxVNUMxQT4gPFU1QzE5PgorPFU1QzFCPiA8VTRFNDg+OzxVNUU4NT47PFU5RUJDPjs8VTlFQkQ+Cis8VTVDMUQ+IDxVNTYxNz47PFU1NjkwPjs8VTc1MUU+Cis8VTVDMUU+IDxVNzFDRT4KKzxVNUMxRj4gPFU1QzIwPjs8VThEN0I+OzxVOUJBRT47PFU5QzdCPjs8VTlDOUM+Cis8VTVDMjA+IDxVNUMxRj47PFU4RDdCPjs8VTlCQUU+OzxVOUM3Qj47PFU5QzlDPgorPFU1QzIyPiA8VTVDMjM+OzxVNUMyND47PFU2MDIzPgorPFU1QzIzPiA8VTVDMjI+Cis8VTVDMjQ+IDxVNUMyMj47PFU2MDIzPgorPFU1QzI1PiA8VTVDMjY+Cis8VTVDMjY+IDxVNUMyNT4KKzxVNUMyNz4gPFU1NzlBPjs8VTU4MkY+OzxVNUMyRD4KKzxVNUMyOT4gPFU1QzJCPgorPFU1QzJCPiA8VTVDMjk+Cis8VTVDMkM+IDxVOUI0MD4KKzxVNUMyRD4gPFU1NzlBPjs8VTU4MkY+OzxVNUMyNz4KKzxVNUMzMj4gPFU1MUYyPjs8VTVDMzQ+OzxVNUMzNj47PFU1QzM3Pjs8VTlCNTA+Cis8VTVDMzQ+IDxVNTFGMj47PFU1QzMyPjs8VTVDMzY+OzxVNUMzNz47PFU5QjUwPgorPFU1QzM2PiA8VTUxRjI+OzxVNUMzMj47PFU1QzM0Pjs8VTVDMzc+OzxVOUI1MD4KKzxVNUMzNz4gPFU1MUYyPjs8VTVDMzI+OzxVNUMzND47PFU1QzM2Pjs8VTlCNTA+Cis8VTVDMzg+IDxVNUM0RD4KKzxVNUMzRD4gPFU0RkFEPjs8VTUxMTg+OzxVNzZFMT4KKzxVNUM0MD4gPFU0RkI3Pjs8VThERkM+Cis8VTVDNDI+IDxVNUM2ND4KKzxVNUM0Mz4gPFU1QzUzPgorPFU1QzQ1PiA8VTUxRTU+Cis8VTVDNDY+IDxVNUM0QT4KKzxVNUM0QT4gPFU1QzQ2PgorPFU1QzRDPiA8VTlDRTU+OzxVOUUxRj4KKzxVNUM0RD4gPFU1QzM4PgorPFU1QzRFPiA8VTVCQTk+Cis8VTVDNEY+IDxVNUM1Qj47PFU1RTQ4PgorPFU1QzUzPiA8VTVDNDM+Cis8VTVDNUI+IDxVNUM0Rj47PFU1RTQ4PgorPFU1QzVFPiA8VTVDNkM+Cis8VTVDNjE+IDxVNUM2Mj4KKzxVNUM2Mj4gPFU1QzYxPgorPFU1QzY0PiA8VTVDNDI+Cis8VTVDNjY+IDxVNUM2OD4KKzxVNUM2OD4gPFU1QzY2PgorPFU1QzZDPiA8VTVDNUU+Cis8VTVDN0Y+IDxVNURCQz4KKzxVNUM4MD4gPFU1MUZBPgorPFU1QzgxPiA8VTRFOTc+OzxVNUQ1Nz47PFU2QjcyPjs8VTZCNzM+Cis8VTVDODI+IDxVOEM0OD4KKzxVNUM4NT4gPFU1NzQyPjs8VTk2MkE+Cis8VTVDODg+IDxVOEMzQT4KKzxVNUM5Nj4gPFU1RDg3PgorPFU1Qzk3PiA8VTVEMTc+Cis8VTVDOTg+IDxVNUNGND4KKzxVNUM5QT4gPFU1RDUwPgorPFU1QzlCPiA8VTVDRjY+OzxVNUQ4Qj47PFU1RDhDPjs8VTVEQjk+OzxVOTY2Nj47PFU5NjlEPjs8VTk2QUY+Cis8VTVDQTE+IDxVNTE4OD4KKzxVNUNBOT4gPFU1RDUyPjs8VTVENTM+OzxVNURDQz47PFU1REQ2Pjs8VTVERDc+OzxVNzg5RT4KKzxVNUNBRD4gPFU1REJBPgorPFU1Q0IzPiA8VTVEQkQ+Cis8VTVDQjQ+IDxVNUQ4Nz4KKzxVNUNCRD4gPFU1RDJDPgorPFU1Q0JGPiA8VTVEQ0I+Cis8VTVDQzM+IDxVNURBOD4KKzxVNUNDND4gPFU1REE3PgorPFU1Q0QyPiA8VTVDREQ+Cis8VTVDREQ+IDxVNUNEMj4KKzxVNUNFMT4gPFU1Q0ZEPgorPFU1Q0UzPiA8VTVEQTI+Cis8VTVDRTQ+IDxVNURBMD4KKzxVNUNFNT4gPFU1RDIyPgorPFU1Q0U2PiA8VTVERDI+Cis8VTVDRTg+IDxVNUNFOT4KKzxVNUNFOT4gPFU1Q0U4PgorPFU1Q0VGPiA8VTVDRjA+Cis8VTVDRjA+IDxVNUNFRj4KKzxVNUNGND4gPFU1Qzk4PgorPFU1Q0Y1PiA8VTVENTg+OzxVNURCOD47PFU1REM2PgorPFU1Q0Y2PiA8VTVDOUI+OzxVNUQ4Qj47PFU1RDhDPjs8VTVEQjk+OzxVOTY2Nj47PFU5NjlEPjs8VTk2QUY+Cis8VTVDRkQ+IDxVNUNFMT4KKzxVNUQwMj4gPFU1RDk3PgorPFU1RDAzPiA8VTVEMEQ+Cis8VTVEMDQ+IDxVNURBRT4KKzxVNUQwNz4gPFU1RDA4PgorPFU1RDA4PiA8VTVEMDc+Cis8VTVEMEI+IDxVNTM0RT47PFU4M0VGPgorPFU1RDBEPiA8VTVEMDM+Cis8VTVEMEU+IDxVNTdGQz47PFU1RDVDPjs8VTc4OTU+Cis8VTVEMTY+IDxVNTM5Mz4KKzxVNUQxNz4gPFU1Qzk3PgorPFU1RDE4PiA8VTRFRDE+OzxVNUQxOT4KKzxVNUQxOT4gPFU0RUQxPjs8VTVEMTg+Cis8VTVEMjI+IDxVNUNFNT4KKzxVNUQyQz4gPFU1Q0JEPgorPFU1RDJEPiA8VTVEODM+OzxVNUQ4ND4KKzxVNUQ0Qz4gPFU3QkNGPgorPFU1RDUwPiA8VTVDOUE+Cis8VTVENTI+IDxVNUNBOT47PFU1RDUzPjs8VTc4OUU+Cis8VTVENTM+IDxVNUNBOT47PFU1RDUyPjs8VTc4OUU+Cis8VTVENTc+IDxVNEU5Nz47PFU1QzgxPjs8VTZCNzI+OzxVNkI3Mz4KKzxVNUQ1OD4gPFU1Q0Y1Pjs8VTVEQjg+OzxVNURDNj4KKzxVNUQ1QT4gPFU1RDk0PgorPFU1RDVDPiA8VTU3RkM+OzxVNUQwRT47PFU3ODk1PgorPFU1RDVEPiA8VTVEODE+Cis8VTVENjA+IDxVNkUxMz47PFU2RUFBPgorPFU1RDZGPiA8VTVENzM+Cis8VTVENzM+IDxVNUQ2Rj4KKzxVNUQ4MT4gPFU1RDVEPgorPFU1RDgzPiA8VTVEMkQ+Cis8VTVEODQ+IDxVNUQyRD4KKzxVNUQ4Nz4gPFU1Qzk2Pjs8VTVDQjQ+Cis8VTVEOEI+IDxVNUM5Qj47PFU1Q0Y2Pjs8VTVEOEM+OzxVNURCOT47PFU5NjY2Pjs8VTk2OUQ+OzxVOTZBRj4KKzxVNUQ4Qz4gPFU1QzlCPjs8VTVDRjY+OzxVNUQ4Qj47PFU1REI5Pjs8VTk2NjY+OzxVOTY5RD47PFU5NkFGPgorPFU1RDk0PiA8VTVENUE+Cis8VTVEOTc+IDxVNUQwMj4KKzxVNURBMD4gPFU1Q0U0PgorPFU1REEyPiA8VTVDRTM+Cis8VTVEQTc+IDxVNUNDND4KKzxVNURBOD4gPFU1Q0MzPgorPFU1REFFPiA8VTVEMDQ+Cis8VTVEQjI+IDxVOTZERj4KKzxVNURCMz4gPFU1NzMwPjs8VTU3NTQ+OzxVNTdDQT4KKzxVNURCND4gPFU1OTY1Pjs8VTU5Njc+Cis8VTVEQjg+IDxVNUNGNT47PFU1RDU4Pjs8VTVEQzY+Cis8VTVEQjk+IDxVNUM5Qj47PFU1Q0Y2Pjs8VTVEOEI+OzxVNUQ4Qz47PFU5NjY2Pjs8VTk2OUQ+OzxVOTZBRj4KKzxVNURCQT4gPFU1Q0FEPgorPFU1REJDPiA8VTVDN0Y+Cis8VTVEQkQ+IDxVNUNCMz4KKzxVNURDNT4gPFU1REQzPjs8VTVERDQ+Cis8VTVEQzY+IDxVNUNGNT47PFU1RDU4Pjs8VTVEQjg+Cis8VTVEQ0I+IDxVNUNCRj4KKzxVNURDQz4gPFU1Q0E5Pjs8VTVERDY+OzxVNURENz4KKzxVNUREMj4gPFU1Q0U2PgorPFU1REQzPiA8VTVEQzU+Cis8VTVERDQ+IDxVNURDNT4KKzxVNURENj4gPFU1Q0E5Pjs8VTVEQ0M+OzxVNURENz4KKzxVNURENz4gPFU1Q0E5Pjs8VTVEQ0M+OzxVNURENj4KKzxVNUREQj4gPFU1REREPgorPFU1REREPiA8VTVEREI+Cis8VTVERTA+IDxVNTc1OT4KKzxVNURFMj4gPFU1REUzPgorPFU1REUzPiA8VTVERTI+Cis8VTVERTk+IDxVOTc4Rj4KKzxVNURFRj4gPFU1REYwPgorPFU1REYwPiA8VTVERUY+Cis8VTVERjU+IDxVNTM2RT4KKzxVNURGNz4gPFU4ODU2PgorPFU1REZBPiA8VTVERkQ+Cis8VTVERkI+IDxVNTM3Nz47PFU2MzcyPgorPFU1REZEPiA8VTVERkE+Cis8VTVERkY+IDxVOTdDRD47PFU5N0U4PgorPFU1RTAwPiA8VTUzMUQ+OzxVOEZDQT4KKzxVNUUwMT4gPFU1MzcwPjs8VTVFNjM+OzxVNUU2ND4KKzxVNUUwMz4gPFU0RjQ4PgorPFU1RTA1PiA8VTVFMjU+Cis8VTVFMDg+IDxVNUUyQj4KKzxVNUUwQj4gPFU3RDE5PgorPFU1RTBGPiA8VTVFNDM+Cis8VTVFMTA+IDxVNUUzMz4KKzxVNUUxMT4gPFU0RjE2PgorPFU1RTEyPiA8VTg4OEI+Cis8VTVFMTU+IDxVN0Q0OD4KKzxVNUUxOD4gPFU3QzNFPgorPFU1RTFBPiA8VTdCOTI+Cis8VTVFMUM+IDxVNUU1Rj47PFU2NUQ4PgorPFU1RTI1PiA8VTVFMDU+Cis8VTVFMjY+IDxVNUUyRj47PFU1RTM2PgorPFU1RTI3PiA8VTVFNDA+Cis8VTVFMkI+IDxVNUUwOD4KKzxVNUUyRD4gPFU4NEM2PgorPFU1RTJFPiA8VTVFNDc+OzxVNUU1QT47PFU1RTZCPgorPFU1RTJGPiA8VTVFMjY+OzxVNUUzNj4KKzxVNUUzMD4gPFU1RjUyPjs8VTZCNzg+OzxVNzY4OD4KKzxVNUUzMT4gPFU1RTZDPgorPFU1RTMzPiA8VTVFMTA+Cis8VTVFMzY+IDxVNUUyNj47PFU1RTJGPgorPFU1RTNCPiA8VTVFNTg+Cis8VTVFM0M+IDxVNUU1Nz4KKzxVNUUzRD4gPFU1MTgzPgorPFU1RTQwPiA8VTVFMjc+Cis8VTVFNDI+IDxVNTFBQT47PFU3RjgzPgorPFU1RTQzPiA8VTVFMEY+Cis8VTVFNDc+IDxVNUUyRT47PFU1RTVBPjs8VTVFNkI+Cis8VTVFNDg+IDxVNUM0Rj47PFU1QzVCPgorPFU1RTRDPiA8VTdFMjg+Cis8VTVFNTc+IDxVNUUzQz4KKzxVNUU1OD4gPFU1RTNCPgorPFU1RTVBPiA8VTVFMkU+OzxVNUU0Nz47PFU1RTZCPgorPFU1RTVGPiA8VTVFMUM+OzxVNjVEOD4KKzxVNUU2MT4gPFU2NUQ5PgorPFU1RTYzPiA8VTVFMDE+OzxVNUU2ND4KKzxVNUU2ND4gPFU1RTAxPjs8VTVFNjM+Cis8VTVFNkI+IDxVNUUyRT47PFU1RTQ3Pjs8VTVFNUE+Cis8VTVFNkM+IDxVNUUzMT4KKzxVNUU3Mj4gPFU0RTdFPjs8VTVFNzk+OzxVNjlBNj4KKzxVNUU3ND4gPFU3OUNBPgorPFU1RTc2PiA8VTRFMjY+OzxVNEY3NT47PFU1MDAyPjs8VTUwQTE+OzxVNUU3Nz47PFU3QUREPgorPFU1RTc3PiA8VTVFNzY+Cis8VTVFNzg+IDxVNTAxNj4KKzxVNUU3OT4gPFU1RTcyPjs8VTY5QTY+Cis8VTVFN0E+IDxVNEU0OD4KKzxVNUU3RT4gPFU1MUUwPgorPFU1RTdGPiA8VTVFODM+OzxVNUVCNT47PFU1RUUzPgorPFU1RTgxPiA8VTVFRjA+OzxVNUVGMz4KKzxVNUU4Mz4gPFU1RTdGPjs8VTVFRTM+Cis8VTVFODQ+IDxVODM1OD47PFU4MzhBPgorPFU1RTg1PiA8VTRFNDg+OzxVNUMxQj47PFU5RUJDPjs8VTlFQkQ+Cis8VTVFODY+IDxVNjE3Nj4KKzxVNUU4QT4gPFU3MjQwPgorPFU1RTkwPiA8VTVFRUM+Cis8VTVFOTE+IDxVNUVFMT4KKzxVNUU5Mz4gPFU1RUFCPgorPFU1RTk0PiA8VTVGREM+OzxVNjFDOT4KKzxVNUU5OT4gPFU1RURGPgorPFU1RTlFPiA8VTlGOTA+Cis8VTVFOUY+IDxVNUVDMz47PFU1RUUyPgorPFU1RUE3PiA8VTU3NTA+Cis8VTVFQUI+IDxVNUU5Mz4KKzxVNUVCNT4gPFU1RTdGPjs8VTgzRjQ+OzxVODQ0QT47PFU4NEVEPgorPFU1RUI2PiA8VTVFQkI+Cis8VTVFQkE+IDxVNjc3RT47PFU2NzgwPjs8VTY3QTk+OzxVNjdENz47PFU2OEE1PgorPFU1RUJCPiA8VTVFQjY+Cis8VTVFQkM+IDxVNUVDRT4KKzxVNUVCRD4gPFU1QkQzPgorPFU1RUJGPiA8VTVFREY+Cis8VTVFQzE+IDxVNTM5NT47PFU1M0EwPgorPFU1RUMyPiA8VTUzQTI+Cis8VTVFQzM+IDxVNUU5Rj47PFU1RUUyPgorPFU1RUM4PiA8VTUzQTY+Cis8VTVFQ0U+IDxVNUVCQz4KKzxVNUVDRj4gPFU1M0E5Pjs8VTVFRDA+Cis8VTVFRDA+IDxVNTNBOT47PFU1RUNGPgorPFU1RURBPiA8VTUzQTg+Cis8VTVFREI+IDxVNTM5OD47PFU1OEU1Pjs8VTkxM0Q+Cis8VTVFREQ+IDxVNTNBRT4KKzxVNUVERj4gPFU1RTk5Pjs8VTVFQkY+Cis8VTVFRTA+IDxVNTM4Mj47PFU1M0IwPgorPFU1RUUxPiA8VTVFOTE+Cis8VTVFRTI+IDxVNUU5Rj47PFU1RUMzPgorPFU1RUUzPiA8VTVFN0Y+OzxVNUU4Mz4KKzxVNUVFOT4gPFU1RUVBPgorPFU1RUVBPiA8VTVFRTk+Cis8VTVFRUM+IDxVNUU5MD4KKzxVNUVGMD4gPFU1Mzg1Pjs8VTVFODE+OzxVNUVGMz4KKzxVNUVGMz4gPFU1Mzg1Pjs8VTUzOUI+OzxVNUU4MT47PFU1RUYwPgorPFU1RUY4PiA8VThGRUE+Cis8VTVFRkI+IDxVNTZEOD47PFU1NkRFPjs8VTU2RUM+OzxVNUVGRD47PFU4RkY0Pjs8VTkwMjU+Cis8VTVFRkM+IDxVNEU0Mz47PFU4RkZBPgorPFU1RUZEPiA8VTU2RDg+OzxVNTZERT47PFU1NkVDPjs8VTVFRkI+OzxVOEZGND47PFU5MDI1PgorPFU1RjAwPiA8VTk1OEI+Cis8VTVGMDE+IDxVNzRFMz47PFU4OThEPjs8VThGQTE+OzxVOEZBNz47PFU4RkE4Pjs8VThGQTk+OzxVOEZBRj4KKzxVNUYwMj4gPFU3NTcwPgorPFU1RjAzPiA8VTY4QzQ+Cis8VTVGMDQ+IDxVNjMwQT47PFU2MzM1PgorPFU1RjA5PiA8VTU5NTg+Cis8VTVGMEM+IDxVNEUwMD4KKzxVNUYwRD4gPFU0RThDPgorPFU1RjBFPiA8VTRFMDk+OzxVNTNDMT4KKzxVNUYxMD4gPFU4Q0FFPjs8VThDQjM+OzxVOEQzMD4KKzxVNUYxMT4gPFU1RjEyPgorPFU1RjEyPiA8VTVGMTE+Cis8VTVGMTQ+IDxVNTQwQT4KKzxVNUYyMD4gPFU1RjM1PgorPFU1RjI1PiA8VTVGNEM+OzxVNzAzMD4KKzxVNUYyNj4gPFU3RDQzPgorPFU1RjJBPiA8VTVGMzM+Cis8VTVGMkY+IDxVNUY0RT4KKzxVNUYzMz4gPFU1RjJBPgorPFU1RjM1PiA8VTVGMjA+Cis8VTVGMzc+IDxVNUYzQT4KKzxVNUYzOT4gPFU1RjNFPjs8VTVGNDg+Cis8VTVGM0E+IDxVNUYzNz4KKzxVNUYzQj4gPFU1RjNDPgorPFU1RjNDPiA8VTVGM0I+Cis8VTVGM0U+IDxVNUYzOT47PFU1RjQ4PgorPFU1RjQ2PiA8VTUyMkI+Cis8VTVGNDg+IDxVNUYzOT47PFU1RjNFPgorPFU1RjRDPiA8VTVGMjU+Cis8VTVGNEU+IDxVNUYyRj4KKzxVNUY1MD4gPFU1RjUxPgorPFU1RjUxPiA8VTVGNTA+Cis8VTVGNTI+IDxVNUUzMD47PFU2Qjc4Pjs8VTc2ODg+Cis8VTVGNTM+IDxVNTY3OT47PFU3NTc2PgorPFU1RjU0PiA8VTVGNTU+Cis8VTVGNTU+IDxVNUY1ND47PFU5MzA0Pjs8VTkzMzI+Cis8VTVGNTc+IDxVN0JGMj4KKzxVNUY1OT4gPFU1RjVBPjs8VTZDNDc+Cis8VTVGNUE+IDxVNUY1OT47PFU2QzQ3PgorPFU1RjVCPiA8VTVGNUM+OzxVNUY1RD47PFU1RjVFPgorPFU1RjVDPiA8VTVGNUI+OzxVNUY1RD47PFU1RjVFPgorPFU1RjVEPiA8VTVGNUI+OzxVNUY1Qz47PFU1RjVFPgorPFU1RjVFPiA8VTVGNUI+OzxVNUY1Qz47PFU1RjVEPgorPFU1RjVGPiA8VTVGNjA+Cis8VTVGNjA+IDxVNUY1Rj47PFU4NEE2PgorPFU1RjY1PiA8VTVGNjY+Cis8VTVGNjY+IDxVNUY2NT4KKzxVNUY2OD4gPFU1RjcyPgorPFU1RjY5PiA8VTdEQjU+Cis8VTVGNkI+IDxVOTZENT4KKzxVNUY2Qz4gPFU0RUZEPjs8VTY1OEM+Cis8VTVGNzI+IDxVNUY2OD4KKzxVNUY3ND4gPFU0RUUyPgorPFU1Rjc3PiA8VTRFRkY+OzxVNUZBQz47PFU5QUUzPgorPFU1RjdCPiA8VTVGQjk+Cis8VTVGN0Y+IDxVNEY1Qj47PFU5QUY0PgorPFU1RjgwPiA8VTVGODM+OzxVOEZFQz4KKzxVNUY4MT4gPFU1RkIwPjs8VTVGQjQ+OzxVNUZCNT4KKzxVNUY4Mz4gPFU1RjgwPgorPFU1Rjg0PiA8VTVGOTE+OzxVOEZGMz47PFU5MDE1PgorPFU1Rjg3PiA8VTcyRTU+Cis8VTVGODg+IDxVNEY3Nz4KKzxVNUY4QT4gPFU0RjZBPgorPFU1RjhDPiA8VTU0MEU+Cis8VTVGOEY+IDxVOTY1Rj4KKzxVNUY5MT4gPFU1Rjg0Pjs8VThGRjM+OzxVOTAxNT4KKzxVNUY5Mz4gPFU0RUNFPjs8VTVGOUU+Cis8VTVGOTU+IDxVNTJEMT47PFU1RkEwPgorPFU1RjlFPiA8VTRFQ0U+OzxVNUY5Mz4KKzxVNUZBMD4gPFU1MkQxPjs8VTVGOTU+Cis8VTVGQTE+IDxVNzlBNj4KKzxVNUZBMz4gPFU1MDFGPjs8VTg1Qzk+Cis8VTVGQTQ+IDxVNTA2NT4KKzxVNUZBOT4gPFU1OTBEPjs8VTg5ODY+Cis8VTVGQUM+IDxVNEVGRj47PFU1MDhEPjs8VTVGNzc+Cis8VTVGQUQ+IDxVNTA5Qz4KKzxVNUZCMD4gPFU1RjgxPgorPFU1RkIxPiA8VTUwQzQ+Cis8VTVGQjM+IDxVNUZCNz47PFU2MDc0Pjs8VTYwQjM+Cis8VTVGQjQ+IDxVNUY4MT47PFU1RkI1PgorPFU1RkI1PiA8VTVGODE+OzxVNUZCND4KKzxVNUZCNz4gPFU1RkIzPjs8VTYwNzQ+OzxVNjBCMz4KKzxVNUZCOT4gPFU1RjdCPgorPFU1RkMzPiA8VTVGQzQ+Cis8VTVGQzQ+IDxVNUZDMz4KKzxVNUZDNj4gPFU2MUI2PgorPFU1RkNFPiA8VTRFQzE+Cis8VTVGQ0Y+IDxVNjFGND47PFU2MUZBPgorPFU1RkQ3PiA8VThBOEM+Cis8VTVGRDk+IDxVNjA3RT4KKzxVNUZEQz4gPFU1RTk0Pjs8VTYxQzk+Cis8VTVGRTI+IDxVNjA5Rj4KKzxVNUZFMz4gPFU2MDI1PgorPFU1RkU3PiA8VTYxODI+Cis8VTVGRTk+IDxVNTMwNj47PFU2MDMxPjs8VTYwQTQ+Cis8VTVGRjA+IDxVNjBCND4KKzxVNUZGNT4gPFU1NTM4PgorPFU1RkZFPiA8VTYxM0U+Cis8VTYwMDA+IDxVNjFEMD47PFU2MUY3PgorPFU2MDAxPiA8VTYxNEI+Cis8VTYwMDI+IDxVNjE2Qj4KKzxVNjAwMz4gPFU2MUFFPgorPFU2MDA0PiA8VTYxNkE+Cis8VTYwMDU+IDxVNjBCNT4KKzxVNjAwNj4gPFU2MTM0PgorPFU2MDE0PiA8VTRGNDI+Cis8VTYwMTY+IDxVNjA5MT4KKzxVNjAxQz4gPFU2MTkwPgorPFU2MDFEPiA8VTYwNTY+Cis8VTYwMjM+IDxVNUMyMj47PFU1QzI0PgorPFU2MDI1PiA8VTVGRTM+Cis8VTYwMkE+IDxVNjA2MD4KKzxVNjAzMT4gPFU1MzA2Pjs8VTVGRTk+OzxVNjBBND4KKzxVNjAzQj4gPFU2MEUzPjs8VTYzNzQ+OzxVN0RDRj47PFU3REVCPjs8VTdFM0Q+Cis8VTYwM0M+IDxVNjFERj4KKzxVNjAzRj4gPFU2MUNDPgorPFU2MDQ2PiA8VTYwNTI+Cis8VTYwNEI+IDxVNjIwMD4KKzxVNjA1Mj4gPFU2MDQ2PgorPFU2MDUzPiA8VTUxQzQ+OzxVNjBCRD4KKzxVNjA1Nj4gPFU2MDFEPgorPFU2MDYwPiA8VTYwMkE+Cis8VTYwNjE+IDxVNTQxRD47PFU2MDhCPgorPFU2MDY0PiA8VTUzNzk+OzxVOENDOT4KKzxVNjA2NT4gPFU4MDNCPgorPFU2MDZBPiA8VTYxMTk+Cis8VTYwNzE+IDxVNjA4NT47PFU2MEE2PgorPFU2MDczPiA8VTYxQzc+Cis8VTYwNzQ+IDxVNUZCMz47PFU1RkI3Pjs8VTYwQjM+Cis8VTYwNzU+IDxVNjBFMD4KKzxVNjA3Nj4gPFU1MEVCPjs8VTU2NDE+OzxVNjBBQT47PFU2MEUxPgorPFU2MDc4PiA8VTYxNUY+Cis8VTYwNzk+IDxVNjFFOD4KKzxVNjA3QT4gPFU2MTM3PgorPFU2MDdCPiA8VTYwRkI+Cis8VTYwN0M+IDxVNjBBOT47PFU2MEYxPgorPFU2MDdEPiA8VTYwRjI+Cis8VTYwN0U+IDxVNUZEOT4KKzxVNjA3Rj4gPFU2MEU1Pjs8VTYxNDI+Cis8VTYwODA+IDxVNjExMT47PFU2MTM5PgorPFU2MDg1PiA8VTYwNzE+OzxVNjBBNj4KKzxVNjA4QT4gPFU1NEYyPjs8VTU1NjA+OzxVNTU4Nj47PFU1NjlFPjs8VTU3RDE+Cis8VTYwOEI+IDxVNjA2MT4KKzxVNjA4RD4gPFU3MzAyPgorPFU2MDkxPiA8VTYwMTY+Cis8VTYwOTM+IDxVNEZEND4KKzxVNjA5Nj4gPFU2MTAyPjs8VThBOTY+Cis8VTYwOUU+IDxVOEJFRj4KKzxVNjA5Rj4gPFU1RkUyPgorPFU2MEEyPiA8VTYwQ0E+Cis8VTYwQTQ+IDxVNTMwNj47PFU1RkU5Pjs8VTYwMzE+Cis8VTYwQTY+IDxVNjA3MT47PFU2MDg1PgorPFU2MEE5PiA8VTYwN0M+OzxVNjBGMT4KKzxVNjBBQT4gPFU1MEVCPjs8VTYwNzY+OzxVNjBFMT4KKzxVNjBBQj4gPFU2MTY0PgorPFU2MEFDPiA8VTYxRjg+Cis8VTYwQUQ+IDxVNjE3Mz4KKzxVNjBBRj4gPFU2MUFCPgorPFU2MEIzPiA8VTVGQjM+OzxVNUZCNz47PFU2MDc0PgorPFU2MEI0PiA8VTVGRjA+Cis8VTYwQjU+IDxVNjAwNT4KKzxVNjBCNj4gPFU5NUY3PgorPFU2MEJEPiA8VTUxQzQ+OzxVNjA1Mz4KKzxVNjBDQT4gPFU2MEEyPjs8VTlBNUE+Cis8VTYwRDI+IDxVNTQ4QT47PFU1NDhDPjs8VTlGQTI+Cis8VTYwREU+IDxVNEZGRD47PFU2QjIzPgorPFU2MEUwPiA8VTYwNzU+Cis8VTYwRTE+IDxVNTBFQj47PFU2MDc2Pjs8VTYwQUE+Cis8VTYwRTM+IDxVNjAzQj4KKzxVNjBFNT4gPFU2MDdGPjs8VTYxNDI+Cis8VTYwRTc+IDxVNjFGQz4KKzxVNjBFOD4gPFU2MTU4PgorPFU2MEU5PiA8VTYxRjI+Cis8VTYwRUI+IDxVNjE4QT4KKzxVNjBFQz4gPFU2MTFDPgorPFU2MEVEPiA8VTYxNTk+OzxVNjE1QT4KKzxVNjBFRT4gPFU2MTlBPgorPFU2MEVGPiA8VTYxNjM+Cis8VTYwRjE+IDxVNjA3Qz47PFU2MEE5PgorPFU2MEYyPiA8VTYwN0Q+Cis8VTYwRjc+IDxVODgyMj4KKzxVNjBGQj4gPFU2MDdCPgorPFU2MEZDPiA8VTg5MEE+Cis8VTYxMDI+IDxVNjA5Nj47PFU4QTk2PgorPFU2MTA4PiA8VTc2MDk+OzxVNzY1Mj4KKzxVNjExMT4gPFU2MDgwPjs8VTYxMzk+Cis8VTYxMTk+IDxVNjA2QT4KKzxVNjExQj4gPFU3MjMxPgorPFU2MTFDPiA8VTYwRUM+Cis8VTYxMjA+IDxVNjE0RD4KKzxVNjEyMT4gPFU2MTgxPgorPFU2MTI0PiA8VTYxQTQ+Cis8VTYxMjY+IDxVNjE5Mj4KKzxVNjEyNz4gPFU1QUJGPjs8VTgwNkQ+Cis8VTYxMzM+IDxVNjFGQz4KKzxVNjEzND4gPFU2MDA2PgorPFU2MTM3PiA8VTYwN0E+Cis8VTYxMzk+IDxVNjA4MD47PFU2MTExPgorPFU2MTNDPiA8VTYxNEU+Cis8VTYxM0Q+IDxVNTM1QT4KKzxVNjEzRT4gPFU1RkZFPgorPFU2MTNGPiA8VTk4NTg+Cis8VTYxNDI+IDxVNjA3Rj47PFU2MEU1PgorPFU2MTQ0PiA8VTY4MTc+Cis8VTYxNDc+IDxVNkJCNz4KKzxVNjE0Qj4gPFU2MDAxPgorPFU2MTREPiA8VTYxMjA+Cis8VTYxNEU+IDxVNjEzQz47PFU2NjFBPjs8VTc3MTg+Cis8VTYxNTE+IDxVNjE3ND47PFU2MUZFPgorPFU2MTU4PiA8VTYwRTg+Cis8VTYxNTk+IDxVNjBFRD47PFU2MTVBPgorPFU2MTVBPiA8VTYwRUQ+OzxVNjE1OT4KKzxVNjE1Rj4gPFU2MDc4Pjs8VTYxODU+Cis8VTYxNjM+IDxVNjBFRj4KKzxVNjE2ND4gPFU2MEFCPgorPFU2MTZBPiA8VTYwMDQ+Cis8VTYxNkI+IDxVNjAwMj4KKzxVNjE2RD4gPFU2MTk2PgorPFU2MTZFPiA8VTg2NTE+Cis8VTYxNzM+IDxVNjBBRD4KKzxVNjE3ND4gPFU2MTUxPgorPFU2MTc2PiA8VTVFODY+Cis8VTYxN0M+IDxVNjE3RD47PFU2MjFBPgorPFU2MTdEPiA8VTYxN0M+OzxVNjIxQT4KKzxVNjE3RT4gPFU2QjMyPgorPFU2MTdGPiA8VTUxRUQ+OzxVNTFGND47PFU2MTkxPgorPFU2MTgxPiA8VTYxMjE+Cis8VTYxODI+IDxVNUZFNz4KKzxVNjE4NT4gPFU2MTVGPgorPFU2MTg3PiA8VTYxQTk+Cis8VTYxOEE+IDxVNjBFQj4KKzxVNjE5MD4gPFU2MDFDPgorPFU2MTkxPiA8VTUxRUQ+OzxVNTFGND47PFU2MTdGPgorPFU2MTkyPiA8VTYxMjY+Cis8VTYxOTQ+IDxVNUFGNj47PFU3NjQ0PgorPFU2MTk2PiA8VTYxNkQ+OzxVNjE5Nz4KKzxVNjE5Nz4gPFU2MTk2PgorPFU2MTk4PiA8VTU1OUM+OzxVNjE5OT47PFU2QjU2PgorPFU2MTk5PiA8VTU1OUM+OzxVNjE5OD47PFU2QjU2PgorPFU2MTlBPiA8VTYwRUU+Cis8VTYxQTQ+IDxVNjEyND4KKzxVNjFBNT4gPFU1MkIzPjs8VTUyQjQ+OzxVNTJERT4KKzxVNjFBOT4gPFU2MTg3PgorPFU2MUFCPiA8VTYwQUY+Cis8VTYxQUU+IDxVNjAwMz4KKzxVNjFCMj4gPFU1QkFBPgorPFU2MUI2PiA8VTVGQzY+Cis8VTYxQkI+IDxVNTc2Nj4KKzxVNjFDMz4gPFU1MkU0PgorPFU2MUM3PiA8VTYwNzM+Cis8VTYxQzk+IDxVNUU5ND47PFU1RkRDPgorPFU2MUNDPiA8VTYwM0Y+Cis8VTYxQ0Q+IDxVNjFEND4KKzxVNjFEMD4gPFU2MDAwPjs8VTYxRjc+Cis8VTYxRDE+IDxVNjFFMz4KKzxVNjFEMj4gPFU1QjNFPjs8VTYxRjY+Cis8VTYxRDQ+IDxVNjFDRD4KKzxVNjFEQz4gPFU2MUY1PgorPFU2MURFPiA8VTg0OTk+Cis8VTYxREY+IDxVNjAzQz4KKzxVNjFFMz4gPFU2MUQxPgorPFU2MUU2PiA8VTYxRTc+Cis8VTYxRTc+IDxVNjFFNj4KKzxVNjFFOD4gPFU2MDc5PgorPFU2MUYyPiA8VTYwRTk+Cis8VTYxRjQ+IDxVNUZDRj47PFU2MUZGPgorPFU2MUY1PiA8VTYxREM+Cis8VTYxRjY+IDxVNjFEMj4KKzxVNjFGNz4gPFU2MDAwPjs8VTYxRDA+Cis8VTYxRjg+IDxVNjBBQz4KKzxVNjFGQT4gPFU1RkNGPgorPFU2MUZDPiA8VTYwRTc+OzxVNjEzMz4KKzxVNjFGRD4gPFU2QjIyPgorPFU2MUZFPiA8VTYxNTE+Cis8VTYxRkY+IDxVNjFGND4KKzxVNjIwMD4gPFU2MDRCPgorPFU2MjA2PiA8VTYyMDc+Cis8VTYyMDc+IDxVNjIwNj4KKzxVNjIwQj4gPFU2MjE0PgorPFU2MjBGPiA8VTYyMkY+OzxVNjIzMj4KKzxVNjIxND4gPFU2MjBCPgorPFU2MjE3PiA8VTYyMjc+Cis8VTYyMTg+IDxVNjIyNj47PFU2MjMwPgorPFU2MjFBPiA8VTYxN0M+OzxVNjE3RD4KKzxVNjIxQj4gPFU2MjFFPgorPFU2MjFEPiA8VThDQTE+OzxVOEQyMj4KKzxVNjIxRT4gPFU2MjFCPgorPFU2MjI2PiA8VTYyMTg+OzxVNjIzMD4KKzxVNjIyNz4gPFU2MjE3PgorPFU2MjI5PiA8VTYyMkM+Cis8VTYyMkM+IDxVNjIyOT4KKzxVNjIyRT4gPFU1Mjc5Pjs8VTUyRTA+Cis8VTYyMkY+IDxVNjIwRj47PFU2MjMyPgorPFU2MjMwPiA8VTYyMTg+OzxVNjIyNj4KKzxVNjIzMj4gPFU2MjBGPjs8VTYyMkY+Cis8VTYyMzY+IDxVNjIzNz47PFU2MjM4PgorPFU2MjM3PiA8VTYyMzY+OzxVNjIzOD4KKzxVNjIzOD4gPFU2MjM2Pjs8VTYyMzc+Cis8VTYyMzk+IDxVNTM4ND4KKzxVNjIzQj4gPFU2MjNFPgorPFU2MjNDPiA8VTUzNkY+OzxVNTkxOD4KKzxVNjIzRT4gPFU2MjNCPgorPFU2MjRCPiA8VTYyNEM+Cis8VTYyNEM+IDxVNjI0Qj4KKzxVNjI0RD4gPFU3RTk0PgorPFU2MjRFPiA8VTYzRTA+OzxVN0QyRT4KKzxVNjI1MT4gPFU2NEIyPjs8VTY0Qzg+Cis8VTYyNTU+IDxVNjJDMj4KKzxVNjI1Nz4gPFU1NzI4PgorPFU2MjU4PiA8VThBMTc+OzxVOEJBQz4KKzxVNjI1RT4gPFU2MzREPgorPFU2MjYwPiA8VTYyNjg+Cis8VTYyNjM+IDxVOTFFNj4KKzxVNjI2Nz4gPFU1N0Y3PgorPFU2MjY4PiA8VTUzQzk+OzxVNjI2MD4KKzxVNjI2OT4gPFU2MkUxPjs8VTY0RjQ+Cis8VTYyNkE+IDxVNjM2Qj4KKzxVNjI2Qj4gPFU2MzgzPgorPFU2MjZDPiA8VTYzREE+Cis8VTYyNkY+IDxVNjRBNj4KKzxVNjI3MD4gPFU2NEZFPgorPFU2Mjc1PiA8VTY1QkM+Cis8VTYyODI+IDxVNTQ0OD47PFU3MkMyPgorPFU2Mjg5PiA8VTUyMTQ+Cis8VTYyOUE+IDxVNjRBQj4KKzxVNjI5Qj4gPFU2MkNCPgorPFU2MjlDPiA8VTYyRDQ+Cis8VTYyOUQ+IDxVNjJENz4KKzxVNjI5RT4gPFU2MkU5Pjs8VTY0Qzc+Cis8VTYyOUY+IDxVNjQ3Nj4KKzxVNjJBMD4gPFU2NDczPgorPFU2MkExPiA8VTYzODQ+Cis8VTYyQTI+IDxVNjQzNj4KKzxVNjJBND4gPFU4Qjc3PgorPFU2MkE1PiA8VTU4MzE+Cis8VTYyQUM+IDxVNjRFMT4KKzxVNjJCNT4gPFU2MkRFPjs8VTcyNzQ+OzxVODlERD4KKzxVNjJDMj4gPFU2MjU1PgorPFU2MkM1PiA8VTY0RDQ+Cis8VTYyQzg+IDxVNjQ5QT4KKzxVNjJDQj4gPFU2MjlCPgorPFU2MkNGPiA8VTYyRkY+Cis8VTYyRDA+IDxVNjdCND47PFU2N0ZBPgorPFU2MkQzPiA8VTY0Mjg+Cis8VTYyRDQ+IDxVNjI5Qz4KKzxVNjJENT4gPFU2MkQ2PgorPFU2MkQ2PiA8VTYyRDU+Cis8VTYyRDc+IDxVNjI5RD4KKzxVNjJEQz4gPFU2MkREPgorPFU2MkREPiA8VTYyREM+Cis8VTYyREU+IDxVNjJCNT4KKzxVNjJERj4gPFU2NEVDPgorPFU2MkUwPiA8VTYzNkU+OzxVNjREQT4KKzxVNjJFMT4gPFU2MjY5Pjs8VTYzMDQ+OzxVNjRGND4KKzxVNjJFMj4gPFU2NTBGPgorPFU2MkUzPiA8VTYzQzA+Cis8VTYyRTU+IDxVNjRDMT4KKzxVNjJFNj4gPFU2NTE0PgorPFU2MkU3PiA8VTY0RjA+Cis8VTYyRTg+IDxVNjRBNT47PFU3NjdBPgorPFU2MkU5PiA8VTYyOUU+OzxVNjRDNz4KKzxVNjJGRj4gPFU2MkNGPgorPFU2MzAyPiA8VTYzOUI+Cis8VTYzMDQ+IDxVNjJFMT47PFU2NEY0PgorPFU2MzBBPiA8VTVGMDQ+OzxVNjMzNT4KKzxVNjMxOT4gPFU0RTNFPjs8VTY0RTc+OzxVODIwOT4KKzxVNjMxQT4gPFU2NDZGPgorPFU2MzFCPiA8VTY1MjM+Cis8VTYzMUM+IDxVNjM5Nz4KKzxVNjMxRD4gPFU2NEJFPgorPFU2MzFFPiA8VTY0QkI+Cis8VTYzMUY+IDxVNjMzRT4KKzxVNjMyMD4gPFU2NDkzPgorPFU2MzIxPiA8VTY0Q0I+Cis8VTYzMjI+IDxVNjQ5Rj4KKzxVNjMyMz4gPFU2Mzk5PgorPFU2MzI0PiA8VTY0RTA+Cis8VTYzMjU+IDxVNjNFRT4KKzxVNjMyNj4gPFU2NDhGPgorPFU2MzM1PiA8VTVGMDQ+OzxVNjMwQT4KKzxVNjMzNz4gPFU2NDEyPgorPFU2MzNEPiA8VThGMTM+Cis8VTYzM0U+IDxVNjMxRj4KKzxVNjMzRj4gPFU2M0QyPgorPFU2MzQxPiA8VTY0MDU+OzxVNjRCOT47PFU2NTJBPgorPFU2MzQ2PiA8VTY4QjE+OzxVNzk3NT47PFU3RDkxPgorPFU2MzREPiA8VTYyNUU+Cis8VTYzNEY+IDxVNjNEMT4KKzxVNjM1Nz4gPFU4Mzc5PgorPFU2MzVDPiA8VTY0MUM+Cis8VTYzNUU+IDxVNjQ4OD4KKzxVNjM1Rj4gPFU2NDBEPgorPFU2MzYxPiA8VTY0QkY+Cis8VTYzNjI+IDxVNjNEQj4KKzxVNjM2Mz4gPFU2NDE3Pjs8VTY0RTM+Cis8VTYzNjg+IDxVODIwRD4KKzxVNjM2Qj4gPFU2MjZBPgorPFU2MzZFPiA8VTYyRTA+OzxVNjREQT4KKzxVNjM3Mj4gPFU1Mzc3Pjs8VTVERkI+Cis8VTYzNzQ+IDxVNjAzQj4KKzxVNjM3Rj4gPFU2ODE2Pjs8VTY4RjI+Cis8VTYzODM+IDxVNTdGRD47PFU2MjZCPgorPFU2Mzg0PiA8VTYyQTE+Cis8VTYzOTc+IDxVNjMxQz4KKzxVNjM5OT4gPFU2MzIzPgorPFU2MzlCPiA8VTYzMDI+Cis8VTYzQTE+IDxVOTFDNz4KKzxVNjNBNT4gPFU2NEQxPgorPFU2M0FDPiA8VTUzMEE+Cis8VTYzQjI+IDxVNjNFRD4KKzxVNjNCMz4gPFU2NEM0PgorPFU2M0I0PiA8VTY0NTE+Cis8VTYzQjc+IDxVNjRGMj4KKzxVNjNCOD4gPFU2NEEzPgorPFU2M0JBPiA8VTY0N0I+Cis8VTYzQkI+IDxVNjQxND4KKzxVNjNCQz4gPFU2NDVDPgorPFU2M0JEPiA8VTc4QjA+Cis8VTYzQzA+IDxVNjJFMz4KKzxVNjNEMT4gPFU2MzRGPgorPFU2M0QyPiA8VTYzM0Y+Cis8VTYzREE+IDxVNjI2Qz4KKzxVNjNEQj4gPFU2MzYyPgorPFU2M0UwPiA8VTYyNEU+Cis8VTYzRUQ+IDxVNjNCMj4KKzxVNjNFRT4gPFU2MzI1PgorPFU2M0Y5PiA8VTgwQ0M+Cis8VTYzRkE+IDxVNjQxNj47PFU2NDQ3PgorPFU2M0ZEPiA8VTY1MkM+Cis8VTYzRkY+IDxVNjRCMz4KKzxVNjQwMD4gPFU2NTE5PgorPFU2NDAxPiA8VTY0RjE+Cis8VTY0MDI+IDxVNjQ1Rj4KKzxVNjQwMz4gPFU3RTNEPgorPFU2NDA1PiA8VTYzNDE+OzxVNjRCOT47PFU2NTJBPgorPFU2NDA2PiA8VTY3ODQ+Cis8VTY0MEQ+IDxVNjM1Rj4KKzxVNjQxMj4gPFU2MzM3PgorPFU2NDE0PiA8VTYzQkI+Cis8VTY0MTY+IDxVNjNGQT47PFU2NDQ3PgorPFU2NDE3PiA8VTYzNjM+Cis8VTY0MUM+IDxVNjM1Qz47PFU4NDkwPgorPFU2NDI4PiA8VTYyRDM+Cis8VTY0MkQ+IDxVNjQ5OD4KKzxVNjQzMj4gPFU2NTI4PgorPFU2NDM2PiA8VTYyQTI+Cis8VTY0M0E+IDxVNjRENT47PFU2NTFDPgorPFU2NDNFPiA8VTY5QTg+Cis8VTY0NDI+IDxVNjQ0ND47PFU2NTFEPgorPFU2NDQ0PiA8VTY0NDI+OzxVNjUxRD4KKzxVNjQ0NT4gPFU2NTA0PgorPFU2NDQ2PiA8VTY0RkE+OzxVODk2Qz4KKzxVNjQ0Nz4gPFU2M0ZBPjs8VTY0MTY+Cis8VTY0NDg+IDxVNjRFRj4KKzxVNjQ0QT4gPFU2NTI0PgorPFU2NDUxPiA8VTYzQjQ+Cis8VTY0NUM+IDxVNjNCQz4KKzxVNjQ1Rj4gPFU2NDAyPgorPFU2NDYwPiA8VTdEQ0Y+OzxVN0RFQj47PFU3RTNEPgorPFU2NDY5PiA8VTY0RjU+Cis8VTY0NkY+IDxVNjMxQT4KKzxVNjQ3Mz4gPFU2MkEwPgorPFU2NDc2PiA8VTYyOUY+Cis8VTY0N0I+IDxVNjNCQT4KKzxVNjQ4Mz4gPFU1MUZCPjs8VTY0Q0E+Cis8VTY0ODQ+IDxVNjUxNj4KKzxVNjQ4OD4gPFU2MzVFPgorPFU2NDhGPiA8VTYzMjY+Cis8VTY0OTA+IDxVNjQ5MT4KKzxVNjQ5MT4gPFU2NDkwPgorPFU2NDkzPiA8VTYzMjA+Cis8VTY0OTg+IDxVNjQyRD4KKzxVNjQ5QT4gPFU2MkM4PgorPFU2NDlGPiA8VTYzMjI+Cis8VTY0QTE+IDxVNjRDRD4KKzxVNjRBMz4gPFU2M0I4PgorPFU2NEE1PiA8VTYyRTg+OzxVNzY3QT4KKzxVNjRBNj4gPFU2MjZGPgorPFU2NEE3PiA8VTdENTU+OzxVN0Q3Nj47PFU3RUREPgorPFU2NEFCPiA8VTYyOUE+Cis8VTY0QjI+IDxVNjI1MT47PFU2NEM4PgorPFU2NEIzPiA8VTYzRkY+Cis8VTY0QjU+IDxVNjUwNj4KKzxVNjRCNz4gPFU2NEY3PgorPFU2NEI4PiA8VTY0RkM+Cis8VTY0Qjk+IDxVNjM0MT47PFU2NDA1Pjs8VTY1MkE+Cis8VTY0QkE+IDxVNjUxQj4KKzxVNjRCQj4gPFU2MzFFPgorPFU2NEJFPiA8VTYzMUQ+Cis8VTY0QkY+IDxVNjM2MT4KKzxVNjRDMT4gPFU2MkU1PgorPFU2NEM0PiA8VTYzQjM+Cis8VTY0Qzc+IDxVNjI5RT47PFU2MkU5PgorPFU2NEM4PiA8VTYyNTE+OzxVNjRCMj4KKzxVNjRDQT4gPFU1MUZCPjs8VTY0ODM+Cis8VTY0Q0I+IDxVNjMyMT4KKzxVNjRDRD4gPFU2NEExPgorPFU2NEQxPiA8VTYzQTU+Cis8VTY0RDQ+IDxVNjJDNT4KKzxVNjRENT4gPFU2NDNBPjs8VTY1MUM+Cis8VTY0REE+IDxVNjJFMD47PFU2MzZFPgorPFU2NERFPiA8VTY0RkI+Cis8VTY0RTA+IDxVNjMyND4KKzxVNjRFMT4gPFU2MkFDPgorPFU2NEUzPiA8VTYzNjM+Cis8VTY0RTU+IDxVNjUyQz4KKzxVNjRFNz4gPFU0RTNFPjs8VTYzMTk+OzxVODIwOT4KKzxVNjRFQz4gPFU2MkRGPgorPFU2NEVGPiA8VTY0NDg+Cis8VTY0RjA+IDxVNjJFNz4KKzxVNjRGMT4gPFU2NDAxPgorPFU2NEYyPiA8VTYzQjc+Cis8VTY0RjQ+IDxVNjI2OT47PFU2MkUxPjs8VTYzMDQ+Cis8VTY0RjU+IDxVNjQ2OT4KKzxVNjRGNz4gPFU2NEI3Pjs8VTg5NkQ+Cis8VTY0RkE+IDxVNjQ0Nj4KKzxVNjRGQj4gPFU2NERFPgorPFU2NEZDPiA8VTY0Qjg+Cis8VTY0RkQ+IDxVNjUwQT4KKzxVNjRGRT4gPFU2MjcwPgorPFU2NTAwPiA8VTRFNTE+Cis8VTY1MDQ+IDxVNjQ0NT4KKzxVNjUwNT4gPFU2NTIyPgorPFU2NTA2PiA8VTY0QjU+Cis8VTY1MDg+IDxVNjUxRj4KKzxVNjUwQT4gPFU2NEZEPgorPFU2NTBGPiA8VTYyRTI+Cis8VTY1MTI+IDxVNjUyMj4KKzxVNjUxND4gPFU2MkU2PgorPFU2NTE2PiA8VTY0ODQ+Cis8VTY1MTk+IDxVNjQwMD4KKzxVNjUxQj4gPFU2NEJBPgorPFU2NTFDPiA8VTY0M0E+OzxVNjRENT4KKzxVNjUxRD4gPFU2NDQyPjs8VTY0NDQ+Cis8VTY1MUY+IDxVNjUwOD4KKzxVNjUyMj4gPFU2NTA1Pjs8VTY1MTI+Cis8VTY1MjM+IDxVNjMxQj4KKzxVNjUyND4gPFU2NDRBPgorPFU2NTI4PiA8VTY0MzI+Cis8VTY1MkE+IDxVNjM0MT47PFU2NDA1Pjs8VTY0Qjk+Cis8VTY1MkI+IDxVNzIzND4KKzxVNjUyQz4gPFU2M0ZEPjs8VTY0RTU+Cis8VTY1MzQ+IDxVNjUzNT4KKzxVNjUzNT4gPFU2NTM0PgorPFU2NTM2PiA8VTUzQ0U+Cis8VTY1Mzc+IDxVODAwMz4KKzxVNjU0Nz4gPFU3QjI3Pjs8VTdCNTY+OzxVN0I1RT47PFU3QkEzPgorPFU2NTQ4PiA8VTRGRjI+OzxVNTA5QT47PFU1MkI5PgorPFU2NTQ5PiA8VTRGOEU+Cis8VTY1NEM+IDxVNjU3NT4KKzxVNjU0RD4gPFU1M0Q5Pjs8VTY1NTg+Cis8VTY1NEU+IDxVNjU1OT4KKzxVNjU0Rj4gPFU1MkM0PgorPFU2NTU1PiA8VTUyQzU+OzxVNTJEMT4KKzxVNjU1Nz4gPFU4RDAxPjs8VThEMjU+Cis8VTY1NTg+IDxVNTNEOT47PFU2NTREPgorPFU2NTU5PiA8VTY1NEU+Cis8VTY1NUI+IDxVNjU4Mj47PFU2QjVCPgorPFU2NTVFPiA8VTUwRDg+Cis8VTY1Njk+IDxVNUI2Nj47PFU1Qjc4Pjs8VTY1ODU+OzxVNjU4Nj47PFU2NTg4PgorPFU2NTcwPiA8VTY1Nzg+Cis8VTY1NzU+IDxVNjU0Qz4KKzxVNjU3Nz4gPFU2NUM5PgorPFU2NTc4PiA8VTY1NzA+Cis8VTY1N0E+IDxVOTlDNj47PFU5OUM4Pjs8VTlBNDU+OzxVOUE3MT4KKzxVNjU4MT4gPFU2QjVEPgorPFU2NTgyPiA8VTY1NUI+OzxVNkI1Qj4KKzxVNjU4Mz4gPFU2QkQ5PgorPFU2NTg1PiA8VTVCNjY+OzxVNUI3OD47PFU2NTY5Pjs8VTY1ODY+OzxVNjU4OD4KKzxVNjU4Nj4gPFU1QjY2Pjs8VTVCNzg+OzxVNjU2OT47PFU2NTg1Pjs8VTY1ODg+Cis8VTY1ODg+IDxVNUI2Nj47PFU1Qjc4Pjs8VTY1Njk+OzxVNjU4NT47PFU2NTg2PgorPFU2NTg5PiA8VTRFOUQ+OzxVNjU4QT47PFU5RjRBPjs8VTlGNTA+Cis8VTY1OEE+IDxVNEU5RD47PFU2NTg5Pjs8VTlGNEE+OzxVOUY1MD4KKzxVNjU4Qj4gPFU2NThFPjs8VTlGNEI+Cis8VTY1OEM+IDxVNEVGRD47PFU1RjZDPgorPFU2NThEPiA8VTg5QkE+Cis8VTY1OEU+IDxVNjU4Qj47PFU5RjRCPgorPFU2NTkzPiA8VTY1OTU+Cis8VTY1OTQ+IDxVNjU5RT47PFU4N0E0PgorPFU2NTk1PiA8VTY1OTM+Cis8VTY1OTc+IDxVOTVEOD47PFU5QjI1Pjs8VTlCMjY+OzxVOUIyQT47PFU5QjJEPgorPFU2NTlFPiA8VTY1OTQ+OzxVODdBND4KKzxVNjU5Rj4gPFU5MTU5PgorPFU2NUE5PiA8VTY1QUM+Cis8VTY1QUM+IDxVNjVBOT4KKzxVNjVBRD4gPFU2NUI3PgorPFU2NUIyPiA8VTY1QjU+Cis8VTY1QjU+IDxVNjVCMj4KKzxVNjVCNz4gPFU2NUFEPgorPFU2NUJDPiA8VTRFOEU+OzxVNEU4Rj47PFU2Mjc1PgorPFU2NUM4PiA8VTY1RDI+Cis8VTY1Qzk+IDxVNjU3Nz4KKzxVNjVEMj4gPFU2NUM4PgorPFU2NUQ3PiA8VTdDMzE+OzxVN0M0Rj4KKzxVNjVEOD4gPFU1RTFDPjs8VTVFNUY+Cis8VTY1RDk+IDxVNUU2MT47PFU2NURCPgorPFU2NURCPiA8VTY1RDk+Cis8VTY1RTA+IDxVNzEyMT4KKzxVNjVFNT4gPFU1NkY4PgorPFU2NUU3PiA8VTgyMEE+Cis8VTY1RUE+IDxVNTM0Rj47PFU1MzU0Pjs8VTUzRjY+Cis8VTY1RjY+IDxVNjVGOT47PFU2NjQyPgorPFU2NUY3PiA8VTUxNjQ+OzxVNjYzRj47PFU2NkUwPgorPFU2NUY4PiA8VTY2OTg+Cis8VTY1Rjk+IDxVNjVGNj47PFU2NjQyPgorPFU2NUZBPiA8VTY2ODA+Cis8VTY1RkU+IDxVNjYyNT4KKzxVNjVGRj4gPFU2NjY0PgorPFU2NjAyPiA8VTY2M0I+Cis8VTY2MDc+IDxVNTM0Nz47PFU2NkZCPgorPFU2NjBBPiA8VTY2MjY+Cis8VTY2MEU+IDxVNjcxOT4KKzxVNjYwRj4gPFU2NjJDPgorPFU2NjE5PiA8VTY2Qzc+Cis8VTY2MUE+IDxVNjE0RT4KKzxVNjYxRj4gPFU3NkE4PgorPFU2NjI1PiA8VTY1RkU+Cis8VTY2MjY+IDxVNjYwQT4KKzxVNjYyQz4gPFU2NjBGPgorPFU2NjJEPiA8VTcwQTQ+Cis8VTY2MkY+IDxVNjYzMD4KKzxVNjYzMD4gPFU2NjJGPgorPFU2NjM4PiA8VTUxQUM+Cis8VTY2M0I+IDxVNjYwMj4KKzxVNjYzQz4gPFU2NjVEPjs8VTY2Rjg+Cis8VTY2M0Q+IDxVNjZFOD4KKzxVNjYzRT4gPFU5ODU1Pjs8VTk4NkY+Cis8VTY2M0Y+IDxVNjVGNz47PFU2NkUwPgorPFU2NjQyPiA8VTY1RjY+OzxVNjVGOT4KKzxVNjY0Mz4gPFU2NjQ0PgorPFU2NjQ0PiA8VTY2NDM+Cis8VTY2NDk+IDxVNjY0Qj4KKzxVNjY0Qj4gPFU2NjQ5PgorPFU2NjUyPiA8VTY2RUM+Cis8VTY2NTM+IDxVNjY4MT47PFU2NkM5PgorPFU2NjU0PiA8VTY2QzQ+Cis8VTY2NTU+IDxVNjY4OD4KKzxVNjY1Nj4gPFU2Njg5PgorPFU2NjVBPiA8VTY2Njk+Cis8VTY2NUQ+IDxVNjYzQz47PFU2NkY4PgorPFU2NjVGPiA8VTY2NjA+Cis8VTY2NjA+IDxVNjY1Rj4KKzxVNjY2ND4gPFU2NUZGPgorPFU2NjY4PiA8VTY2REY+Cis8VTY2Njk+IDxVNjY1QT4KKzxVNjY2RT4gPFU2NjlDPgorPFU2Njc0PiA8VTY2OTI+OzxVNzUyMD4KKzxVNjY3Qj4gPFU2Njk3PgorPFU2NjgwPiA8VTY1RkE+Cis8VTY2ODE+IDxVNjY1Mz47PFU2NkM5PgorPFU2NjgyPiA8VTY2QUI+Cis8VTY2ODM+IDxVN0Y2QT47PFU4RkEwPgorPFU2Njg4PiA8VTY2NTU+Cis8VTY2ODk+IDxVNjY1Nj4KKzxVNjY5Mj4gPFU2Njc0PgorPFU2Njk2PiA8VTcxNTY+OzxVNzE1Nz4KKzxVNjY5Nz4gPFU2NjdCPjs8VThBRjM+OzxVOEMxOT47PFU5NUM3Pjs8VTk2OEM+Cis8VTY2OTg+IDxVNjVGOD4KKzxVNjY5Qz4gPFU2NjZFPgorPFU2NkEyPiA8VTc1NDU+Cis8VTY2QTQ+IDxVNjZBRD47PFU2NkNEPjs8VTc2QTU+Cis8VTY2QTY+IDxVNTM4Nj47PFU1M0FGPjs8VTY2QzY+Cis8VTY2QTc+IDxVNjZENj4KKzxVNjZBOD4gPFU2NkMxPgorPFU2NkFCPiA8VTY2ODI+Cis8VTY2QUQ+IDxVNjZBND47PFU3NkE1PgorPFU2NkI4PiA8VTRFODY+OzxVNzdBRD4KKzxVNjZDMT4gPFU2NkE4PgorPFU2NkM0PiA8VTY2NTQ+Cis8VTY2QzY+IDxVNTM4Nj47PFU1M0E0Pjs8VTUzQUY+OzxVNjZBNj4KKzxVNjZDNz4gPFU2NjE5PgorPFU2NkM5PiA8VTY2NTM+OzxVNjY4MT4KKzxVNjZDQz4gPFU3MEE0Pjs8VTcxNjc+OzxVNzFGMz47PFU3N0JFPgorPFU2NkNEPiA8VTY2QTQ+Cis8VTY2Q0Y+IDxVNTQxMT4KKzxVNjZENj4gPFU2NkE3PgorPFU2NkRGPiA8VTY2Njg+Cis8VTY2RTA+IDxVNjVGNz47PFU2NjNGPgorPFU2NkU4PiA8VTY2M0Q+Cis8VTY2RUM+IDxVNjY1Mj4KKzxVNjZGMj4gPFU2RDQwPjs8VTdDQUM+OzxVOUVBRj47PFU5RUI0Pjs8VTlFQjk+Cis8VTY2RjM+IDxVNjZGNT4KKzxVNjZGNT4gPFU2NkYzPgorPFU2NkY4PiA8VTRFNjY+OzxVNjYzQz47PFU2NjVEPgorPFU2NkY5PiA8VTY2RkE+Cis8VTY2RkE+IDxVNjZGOT4KKzxVNjZGQj4gPFU1MzQ3Pjs8VTY2MDc+Cis8VTY2RkQ+IDxVNjZGRT4KKzxVNjZGRT4gPFU2NkZEPgorPFU2NzAwPiA8VTUxQTM+Cis8VTY3MDI+IDxVNTJENj47PFU1MkQ3PgorPFU2NzAzPiA8VTRGMUE+Cis8VTY3MDc+IDxVODhFOD4KKzxVNjcxNj4gPFU2NzE3PgorPFU2NzE3PiA8VTY3MTY+Cis8VTY3MTk+IDxVNjYwRT4KKzxVNjcxQj4gPFU2NzIyPgorPFU2NzFFPiA8VTY3MUY+Cis8VTY3MUY+IDxVNjcxRT4KKzxVNjcyMj4gPFU2NzFCPgorPFU2NzI3PiA8VTgwRTc+Cis8VTY3MkM+IDxVNTkzMj47PFU2OTREPgorPFU2NzJEPiA8VTUyNzM+Cis8VTY3MkU+IDxVNjcyRj4KKzxVNjcyRj4gPFU2NzJFPjs8VTg4NTM+Cis8VTY3MzE+IDxVNzg0Mz4KKzxVNjczND4gPFU2QTM4Pjs8VTZBOEY+Cis8VTY3MzU+IDxVNjczNj4KKzxVNjczNj4gPFU2NzM1PgorPFU2NzNBPiA8VTUxRTA+OzxVNkE1Rj4KKzxVNjc0MD4gPFU2QkJBPgorPFU2NzQyPiA8VTg5NEQ+OzxVOTZEMT47PFU5NkRDPgorPFU2NzQzPiA8VTZBMjk+OzxVNkIwQT4KKzxVNjc0Nj4gPFU2ODdGPgorPFU2NzQ3PiA8VTU3MkM+Cis8VTY3NDk+IDxVNjc2Nj47PFU2OTE5Pjs8VTZBODY+Cis8VTY3NTE+IDxVOTBBOD4KKzxVNjc2MD4gPFU2OUQzPgorPFU2NzYxPiA8VTY4OUQ+Cis8VTY3NjQ+IDxVNjgwMz4KKzxVNjc2NT4gPFU0Rjg2PgorPFU2NzY2PiA8VTY3NDk+Cis8VTY3Njg+IDxVNjk0QT4KKzxVNjc2OT4gPFU2OUFBPgorPFU2NzZGPiA8VTY4NkU+OzxVNzZDMz4KKzxVNjc3MD4gPFU1MDkxPgorPFU2NzcxPiA8VTRFMUM+Cis8VTY3N0U+IDxVNUVCQT47PFU2NzgwPjs8VTY3QTk+OzxVNjdENz47PFU2OEE1Pjs8VTlCMDY+Cis8VTY3N0Y+IDxVOTVDNj4KKzxVNjc4MD4gPFU1RUJBPjs8VTY3N0U+OzxVNjdBOT47PFU2N0Q3Pjs8VTY4QTU+Cis8VTY3ODE+IDxVNjk3NT4KKzxVNjc4ND4gPFU2NDA2Pjs8VTY5Q0I+Cis8VTY3OEY+IDxVNjk2MD4KKzxVNjc5Mj4gPFU0RTJCPjs8VTY4NjA+OzxVNjkwRj47PFU2OTMwPgorPFU2Nzk5PiA8VThFREI+OzxVOEVGNj47PFU4RjZEPgorPFU2NzlDPiA8VTgzRDM+Cis8VTY3OUU+IDxVNkEwNT4KKzxVNjdBMT4gPFU2ODVEPgorPFU2N0EyPiA8VTZBMUU+Cis8VTY3QTM+IDxVNjhENz4KKzxVNjdBNT4gPFU2QUVBPgorPFU2N0E2PiA8VTY4MEM+Cis8VTY3QTc+IDxVNjg5OD4KKzxVNjdBOD4gPFU2OEQ2PgorPFU2N0E5PiA8VTVFQkE+OzxVNjc3RT47PFU2NzgwPjs8VTY3RDc+OzxVNjhBNT4KKzxVNjdBQT4gPFU2OUNEPjs8VTkzOTc+OzxVOTQ1Mz4KKzxVNjdBQj4gPFU2OTUzPgorPFU2N0FEPiA8VTY4OUY+Cis8VTY3QjE+IDxVNTNGMD47PFU2QUFGPjs8VTgwMUM+Cis8VTY3QjQ+IDxVNjJEMD47PFU2N0ZBPgorPFU2N0JCPiA8VTY4Mjc+Cis8VTY3QzE+IDxVODIzNT4KKzxVNjdDRj4gPFU2ODIyPgorPFU2N0Q1PiA8VTY5NTk+Cis8VTY3RDc+IDxVNUVCQT47PFU2NzdFPjs8VTY3ODA+OzxVNjdBOT47PFU2OEE1PgorPFU2N0RDPiA8VTZBQzM+Cis8VTY3RTA+IDxVNkFCOD4KKzxVNjdFNT4gPFU2N0ZCPgorPFU2N0U5PiA8VTUzMUI+OzxVNjdGRT4KKzxVNjdGMD4gPFU1OTQ4PgorPFU2N0YzPiA8VTY4MDE+OzxVNjg3QT47PFU2QTZFPgorPFU2N0Y1PiA8VTY4MDU+Cis8VTY3Rjk+IDxVNjdGRj4KKzxVNjdGQT4gPFU2MkQwPjs8VTY3QjQ+Cis8VTY3RkI+IDxVNjdFNT4KKzxVNjdGRD4gPFU2QTg5PgorPFU2N0ZFPiA8VTUzMUI+OzxVNjdFOT4KKzxVNjdGRj4gPFU2N0Y5PgorPFU2ODAwPiA8VTY4OTQ+Cis8VTY4MDE+IDxVNjdGMz47PFU2ODdBPjs8VTZBNkU+Cis8VTY4MDM+IDxVNjc2ND47PFU2QUQ0PgorPFU2ODA0PiA8VTY5QUU+OzxVODM2Mz4KKzxVNjgwNT4gPFU2N0Y1PgorPFU2ODA3PiA8VTZBMTk+Cis8VTY4MDg+IDxVNjg1Rj47PFU2OEU3PgorPFU2ODA5PiA8VTZBREI+Cis8VTY4MEE+IDxVNjlERT47PFU2QUYzPgorPFU2ODBCPiA8VTY4REY+Cis8VTY4MEM+IDxVNjdBNj47PFU2QUU4PgorPFU2ODBFPiA8VTZBQUE+OzxVNkFERj4KKzxVNjgwRj4gPFU2QjA0Pjs8VTZCMTc+Cis8VTY4MTE+IDxVNkEzOT4KKzxVNjgxNj4gPFU2MzdGPjs8VTY4RjI+Cis8VTY4MTc+IDxVNTFEMz47PFU2MTQ0PgorPFU2ODFFPiA8VTUyMEE+Cis8VTY4MjI+IDxVNjdDRj4KKzxVNjgyNz4gPFU2N0JCPgorPFU2ODMwPiA8VTZBNDM+OzxVN0I0Rj4KKzxVNjgzNz4gPFU2OUQ4Pjs8VTZBMjM+Cis8VTY4Mzg+IDxVODk4OD4KKzxVNjgzRT4gPFU1NzFEPjs8VTZCMTI+Cis8VTY4NDI+IDxVNjk3Rj4KKzxVNjg0Qz4gPFU1MzUzPjs8VTY5RDU+Cis8VTY4NTE+IDxVNjg1Mj4KKzxVNjg1Mj4gPFU2ODUxPgorPFU2ODU4PiA8VTY5MEU+Cis8VTY4NUM+IDxVNkEzMT47PFU2QUZCPgorPFU2ODVEPiA8VTY3QTE+Cis8VTY4NUY+IDxVNjgwOD47PFU2OEU3PgorPFU2ODYwPiA8VTRFMkI+OzxVNjc5Mj47PFU2OTBGPgorPFU2ODYxPiA8VTZBNDg+Cis8VTY4NjI+IDxVNjk2OD4KKzxVNjg2Mz4gPFU2QTk0PgorPFU2ODY0PiA8VTY5QkY+Cis8VTY4NjU+IDxVNjlENz47PFU2QTRCPgorPFU2ODY2PiA8VTZBM0E+Cis8VTY4Njc+IDxVNkE5Qz4KKzxVNjg2OD4gPFU2OUYzPgorPFU2ODY5PiA8VTZBMDE+Cis8VTY4NkE+IDxVNkEzMz4KKzxVNjg2RT4gPFU2NzZGPjs8VTc2QzM+Cis8VTY4Nzk+IDxVNkEwMz4KKzxVNjg3QT4gPFU2N0YzPjs8VTY4MDE+OzxVNkE2RT4KKzxVNjg3Qz4gPFU2RjA2PgorPFU2ODdGPiA8VTY3NDY+Cis8VTY4ODE+IDxVNkExMT47PFU3QzE3PgorPFU2ODg0PiA8VTY5RjE+Cis8VTY4ODU+IDxVNjk3Mz47PFU2OUQxPgorPFU2ODhEPiA8VTc2ODE+OzxVNzY4Mj4KKzxVNjg5ND4gPFU2ODAwPgorPFU2ODk4PiA8VTY3QTc+Cis8VTY4OUQ+IDxVNjc2MT4KKzxVNjg5Rj4gPFU2N0FEPgorPFU2OEE1PiA8VTVFQkE+OzxVNjc3RT47PFU2NzgwPjs8VTY3QTk+OzxVNjdENz4KKzxVNjhBNj4gPFU1OTIyPjs8VTU5MjM+Cis8VTY4QjE+IDxVNjM0Nj47PFU3RDkxPgorPFU2OEJDPiA8VTZBQUU+Cis8VTY4QkU+IDxVNjhGNj4KKzxVNjhCRj4gPFU2OUU0PgorPFU2OEMwPiA8VTY5MUM+OzxVNkFBMj4KKzxVNjhDMj4gPFU2QjFFPgorPFU2OEM0PiA8VTVGMDM+Cis8VTY4Q0E+IDxVNjhDQj47PFU2QUIxPjs8VTZBQzA+OzxVNzg4MT4KKzxVNjhDQj4gPFU2OENBPjs8VTZBQjE+OzxVNkFDMD47PFU3ODgxPgorPFU2OEQ1PiA8VTY5MzY+Cis8VTY4RDY+IDxVNjdBOD4KKzxVNjhENz4gPFU2N0EzPgorPFU2OERGPiA8VTY4MEI+Cis8VTY4RTU+IDxVNkEwQT4KKzxVNjhFNz4gPFU2ODA4Pjs8VTY4NUY+Cis8VTY4RjE+IDxVN0ExQz4KKzxVNjhGMj4gPFU2MzdGPjs8VTY4MTY+Cis8VTY4RjY+IDxVNjhCRT4KKzxVNjhGOT4gPFU2QUMyPgorPFU2OTAwPiA8VTc4OTc+Cis8VTY5MDE+IDxVNjlFOD4KKzxVNjkwOT4gPFU0RTU3Pjs8VTRFNTg+Cis8VTY5MEU+IDxVNjg1OD4KKzxVNjkwRj4gPFU0RTJCPjs8VTY3OTI+OzxVNjg2MD4KKzxVNjkxNz4gPFU3N0Y0Pjs8VTc4ODc+Cis8VTY5MTg+IDxVNjk1QT4KKzxVNjkxOT4gPFU2NzQ5PgorPFU2OTFDPiA8VTY4QzA+OzxVNkFBMj4KKzxVNjkxRj4gPFU2QUREPgorPFU2OTIwPiA8VTY5RTc+Cis8VTY5MjI+IDxVNjlGNj4KKzxVNjkyND4gPFU2QjBGPgorPFU2OTJCPiA8VTZBM0Y+Cis8VTY5MkQ+IDxVNkE2Mj4KKzxVNjkzMD4gPFU2NzkyPgorPFU2OTM0PiA8VTg0NkU+Cis8VTY5MzY+IDxVNjhENT4KKzxVNjkzOT4gPFU4NDVBPgorPFU2OTRBPiA8VTY3Njg+Cis8VTY5NEQ+IDxVNTkzMj47PFU2NzJDPgorPFU2OTUzPiA8VTY3QUI+Cis8VTY5NTU+IDxVNkE2Mj4KKzxVNjk1OT4gPFU2N0Q1PgorPFU2OTVBPiA8VTY5MTg+Cis8VTY5NjA+IDxVNjc4Rj4KKzxVNjk2MT4gPFU2OTg2PgorPFU2OTY1PiA8VTY5NjY+Cis8VTY5NjY+IDxVNjk2NT4KKzxVNjk2OD4gPFU2ODYyPgorPFU2OTZBPiA8VTcyNDM+Cis8VTY5NkI+IDxVNkE5RD4KKzxVNjk2RD4gPFU0RTFBPgorPFU2OTczPiA8VTY4ODU+OzxVNjlEMT4KKzxVNjk3NT4gPFU2NzgxPgorPFU2OTdDPiA8VTZBMTM+Cis8VTY5N0Q+IDxVNEU1MD47PFU2QTAyPgorPFU2OTdGPiA8VTY4NDI+Cis8VTY5ODQ+IDxVNkIxNj4KKzxVNjk4NT4gPFU2OUIyPgorPFU2OTg2PiA8VTY5NjE+Cis8VTY5ODc+IDxVNkFFQz4KKzxVNjk4OD4gPFU2QURBPgorPFU2OTg5PiA8VTZBRjg+OzxVNkIwNT4KKzxVNjk5Qz4gPFU3MjUzPgorPFU2OUE2PiA8VTVFNzI+OzxVNUU3OT4KKzxVNjlBOD4gPFU2NDNFPgorPFU2OUFBPiA8VTY3Njk+Cis8VTY5QUU+IDxVNjgwND47PFU4MzYzPgorPFU2OUIyPiA8VTY5ODU+Cis8VTY5QjQ+IDxVNkE0QT4KKzxVNjlCQz4gPFU5MTk4PgorPFU2OUJGPiA8VTY4NjQ+Cis8VTY5Qzc+IDxVNjlEOT4KKzxVNjlDOD4gPFU4MDI4Pjs8VTkzOTI+Cis8VTY5Q0I+IDxVNjc4ND4KKzxVNjlDRD4gPFU2N0FBPgorPFU2OUQxPiA8VTY4ODU+OzxVNjk3Mz4KKzxVNjlEMz4gPFU2NzYwPgorPFU2OUQ0PiA8VTY5Rjk+OzxVNkE3MD4KKzxVNjlENT4gPFU1MzUzPjs8VTY4NEM+Cis8VTY5RDc+IDxVNjg2NT47PFU2QTRCPgorPFU2OUQ4PiA8VTY4Mzc+OzxVNkEyMz4KKzxVNjlEOT4gPFU2OUM3PgorPFU2OURBPiA8VTZBOUY+Cis8VTY5REI+IDxVNkFCQj47PFU3RTdGPgorPFU2OURFPiA8VTY4MEE+Cis8VTY5REY+IDxVNkFCMz4KKzxVNjlFMD4gPFU2QUU3PgorPFU2OUU0PiA8VTY4QkY+Cis8VTY5RTc+IDxVNjkyMD4KKzxVNjlFOD4gPFU2OTAxPgorPFU2OUYxPiA8VTY4ODQ+Cis8VTY5RjM+IDxVNjg2OD4KKzxVNjlGNj4gPFU2OTIyPgorPFU2OUY5PiA8VTY5RDQ+Cis8VTZBMDE+IDxVNjg2OT4KKzxVNkEwMj4gPFU0RTUwPjs8VTY5N0Q+Cis8VTZBMDM+IDxVNjg3OT4KKzxVNkEwNT4gPFU2NzlFPgorPFU2QTBBPiA8VTY4RTU+Cis8VTZBMTA+IDxVNkFEMz4KKzxVNkExMT4gPFU2ODgxPjs8VTdDMTc+Cis8VTZBMTI+IDxVNkFDMT4KKzxVNkExMz4gPFU2OTdDPgorPFU2QTE5PiA8VTY4MDc+Cis8VTZBMUU+IDxVNjdBMj4KKzxVNkEyMz4gPFU2ODM3Pjs8VTY5RDg+Cis8VTZBMjk+IDxVNjc0Mz47PFU2QjBBPgorPFU2QTJBPiA8VTZBNkI+OzxVNkFDRT4KKzxVNkEyRj4gPFU2QUEzPjs8VTgyNjI+Cis8VTZBMzE+IDxVNjg1Qz47PFU2QUZCPgorPFU2QTMzPiA8VTY4NkE+Cis8VTZBMzc+IDxVNEUxQj47PFU1M0UyPjs8VTZCMDk+OzxVODVDMj4KKzxVNkEzOD4gPFU2NzM0Pjs8VTZBOEY+Cis8VTZBMzk+IDxVNjgxMT4KKzxVNkEzQT4gPFU2ODY2PgorPFU2QTNEPiA8VTdGNDc+Cis8VTZBM0Y+IDxVNjkyQj4KKzxVNkE0Mz4gPFU2ODMwPjs8VTdCNEY+Cis8VTZBNDg+IDxVNjg2MT4KKzxVNkE0QT4gPFU2OUI0PgorPFU2QTRCPiA8VTY4NjU+OzxVNjlENz4KKzxVNkE1Rj4gPFU2NzNBPgorPFU2QTYyPiA8VTY5MkQ+OzxVNjk1NT4KKzxVNkE2Qj4gPFU2QTJBPjs8VTZBQ0U+Cis8VTZBNkU+IDxVNjdGMz47PFU2ODAxPjs8VTY4N0E+Cis8VTZBNzA+IDxVNjlEND4KKzxVNkE3MT4gPFU2QUU1PgorPFU2QTc5PiA8VTZBRDM+OzxVODI2Mz47PFU4MjZBPgorPFU2QTdDPiA8VTZBREU+Cis8VTZBODE+IDxVNkFBOT4KKzxVNkE4Mz4gPFU2QUZEPgorPFU2QTg2PiA8VTY3NDk+Cis8VTZBODk+IDxVNjdGRD4KKzxVNkE4Rj4gPFU2NzM0Pjs8VTZBMzg+Cis8VTZBOTA+IDxVN0MzNz4KKzxVNkE5ND4gPFU2ODYzPgorPFU2QTk3PiA8VTZBOTg+OzxVODYxNz4KKzxVNkE5OD4gPFU2QTk3PgorPFU2QTlDPiA8VTY4Njc+Cis8VTZBOUQ+IDxVNjk2Qj4KKzxVNkE5Rj4gPFU2OURBPgorPFU2QUEyPiA8VTY4QzA+OzxVNjkxQz4KKzxVNkFBMz4gPFU2QTJGPgorPFU2QUE5PiA8VTZBODE+Cis8VTZBQUE+IDxVNjgwRT47PFU2QURGPgorPFU2QUFFPiA8VTY4QkM+Cis8VTZBQUY+IDxVNTNGMD47PFU2N0IxPgorPFU2QUIxPiA8VTY4Q0E+OzxVNjhDQj47PFU2QUMwPjs8VTc4ODE+Cis8VTZBQjM+IDxVNjlERj4KKzxVNkFCOD4gPFU2N0UwPgorPFU2QUJCPiA8VTY5REI+Cis8VTZBQzA+IDxVNjhDQT47PFU2OENCPjs8VTZBQjE+OzxVNzg4MT4KKzxVNkFDMT4gPFU2QTEyPgorPFU2QUMyPiA8VTY4Rjk+Cis8VTZBQzM+IDxVNjdEQz4KKzxVNkFDOD4gPFU1MUYzPgorPFU2QUNDPiA8VTgwMzA+Cis8VTZBQ0U+IDxVNkEyQT47PFU2QTZCPgorPFU2QUQzPiA8VTZBMTA+OzxVNkE3OT4KKzxVNkFEND4gPFU2ODAzPgorPFU2QUQ1PiA8VTZCMTE+Cis8VTZBREE+IDxVNjk4OD4KKzxVNkFEQj4gPFU2ODA5PgorPFU2QUREPiA8VTY5MUY+Cis8VTZBREU+IDxVNkE3Qz4KKzxVNkFERj4gPFU2ODBFPjs8VTZBQUE+Cis8VTZBRTU+IDxVNkE3MT4KKzxVNkFFNz4gPFU2OUUwPgorPFU2QUU4PiA8VTY4MEM+Cis8VTZBRUE+IDxVNjdBNT4KKzxVNkFFQz4gPFU2OTg3PgorPFU2QUYzPiA8VTY4MEE+Cis8VTZBRjg+IDxVNjk4OT4KKzxVNkFGQT4gPFU2QjFFPgorPFU2QUZCPiA8VTY4NUM+OzxVNkEzMT4KKzxVNkFGRD4gPFU2QTgzPgorPFU2QjA0PiA8VTY4MEY+OzxVNkIxNz4KKzxVNkIwNT4gPFU2OTg5PgorPFU2QjA5PiA8VTRFMUI+OzxVNTNFMj47PFU2QTM3Pjs8VTg1QzI+Cis8VTZCMEE+IDxVNjc0Mz47PFU2QTI5PgorPFU2QjBGPiA8VTY5MjQ+Cis8VTZCMTE+IDxVNkFENT4KKzxVNkIxMj4gPFU1NzFEPjs8VTY4M0U+Cis8VTZCMTY+IDxVNjk4ND4KKzxVNkIxNz4gPFU2ODBGPjs8VTZCMDQ+Cis8VTZCMUQ+IDxVOTBDMT47PFU5QjMwPjs8VTlCMzE+Cis8VTZCMUU+IDxVNjhDMj47PFU2QUZBPgorPFU2QjIwPiA8VTdGM0E+OzxVN0YzQz4KKzxVNkIyMj4gPFU2MUZEPjs8VTZCNTM+OzxVNkI2MT47PFU5QTY5PgorPFU2QjIzPiA8VTRGRkQ+OzxVNjBERT47PFU4QTIyPgorPFU2QjI0PiA8VTZCNUY+Cis8VTZCMjc+IDxVNkI1MD4KKzxVNkIzMj4gPFU2MTdFPgorPFU2QjM1PiA8VTZCM0U+Cis8VTZCM0I+IDxVNkI1OD4KKzxVNkIzRD4gPFU5NEE2PgorPFU2QjNFPiA8VTZCMzU+Cis8VTZCNEM+IDxVOEIwQz4KKzxVNkI0RT4gPFU1M0Y5Pjs8VTU2MDY+Cis8VTZCNTA+IDxVNkIyNz4KKzxVNkI1Mz4gPFU2QjIyPjs8VTZCNjE+Cis8VTZCNTY+IDxVNTU5Qz47PFU2MTk4Pjs8VTYxOTk+Cis8VTZCNTg+IDxVNkIzQj4KKzxVNkI1Qj4gPFU2NTVCPjs8VTY1ODI+Cis8VTZCNUQ+IDxVNjU4MT4KKzxVNkI1Rj4gPFU2QjI0PgorPFU2QjYxPiA8VTZCMjI+OzxVNkI1Mz4KKzxVNkI2NT4gPFU2QjY4Pjs8VTZCNjk+Cis8VTZCNjg+IDxVNkI2NT47PFU2QjY5PgorPFU2QjY5PiA8VTZCNjU+OzxVNkI2OD4KKzxVNkI2Qz4gPFU1MjREPgorPFU2QjZFPiA8VTZFMEI+OzxVNkY4MD47PFU2RjgxPgorPFU2QjZGPiA8VTlGNTI+OzxVOUY3Rj4KKzxVNkI3Mj4gPFU0RTk3Pjs8VTVDODE+OzxVNUQ1Nz47PFU2QjczPgorPFU2QjczPiA8VTRFOTc+OzxVNUM4MT47PFU1RDU3Pjs8VTZCNzI+Cis8VTZCNzQ+IDxVNTM4Nj47PFU1M0FGPjs8VTZCNzc+Cis8VTZCNzc+IDxVNTM4Nj47PFU1M0FGPjs8VTZCNzQ+Cis8VTZCNzg+IDxVNUUzMD47PFU1RjUyPjs8VTc2ODg+Cis8VTZCNzk+IDxVNkI3QT4KKzxVNkI3QT4gPFU2Qjc5PgorPFU2QjdDPiA8VTZCQjE+OzxVNkJCMj4KKzxVNkI3RT4gPFU1NzNEPjs8VTZCN0Y+OzxVNkI4MT47PFU2Q0ExPgorPFU2QjdGPiA8VTU3M0Q+OzxVNkI3RT47PFU2QjgxPjs8VTZDQTE+Cis8VTZCODA+IDxVNTkyRD4KKzxVNkI4MT4gPFU1NzNEPjs8VTZCN0U+OzxVNkI3Rj47PFU2Q0ExPgorPFU2Qjg3PiA8VTZCQTQ+Cis8VTZCOEI+IDxVNkI5OD4KKzxVNkI5Mj4gPFU2QjlFPgorPFU2QjkzPiA8VTZCQUU+Cis8VTZCOTg+IDxVNkI4Qj4KKzxVNkI5QT4gPFU2QkFCPgorPFU2QjlFPiA8VTZCOTI+Cis8VTZCQTE+IDxVNkJBRj4KKzxVNkJBND4gPFU2Qjg3PgorPFU2QkFCPiA8VTZCOUE+Cis8VTZCQUU+IDxVNkI5Mz4KKzxVNkJBRj4gPFU2QkExPgorPFU2QkIxPiA8VTZCN0M+OzxVNkJCMj4KKzxVNkJCMj4gPFU2QjdDPjs8VTZCQjE+Cis8VTZCQjQ+IDxVNkJDNj4KKzxVNkJCNz4gPFU2MTQ3PgorPFU2QkJBPiA8VTY3NDA+Cis8VTZCQkI+IDxVNThGMz47PFU2QkJDPgorPFU2QkJDPiA8VTU4RjM+OzxVNkJCQj4KKzxVNkJDMD4gPFU2QkMxPgorPFU2QkMxPiA8VTZCQzA+OzxVNzFFQz47PFU4QjZEPgorPFU2QkMyPiA8VThGNDI+Cis8VTZCQzY+IDxVNkJCND4KKzxVNkJDOT4gPFU1MzNCPjs8VTkxQUI+Cis8VTZCQ0U+IDxVNkJDRj4KKzxVNkJDRj4gPFU2QkNFPgorPFU2QkQzPiA8VTgwQjI+OzxVODhBQz4KKzxVNkJEND4gPFU1OTM2PgorPFU2QkQ1PiA8VTc1NjI+Cis8VTZCRDc+IDxVNkJEOD4KKzxVNkJEOD4gPFU2QkQ3PgorPFU2QkQ5PiA8VTY1ODM+Cis8VTZCREY+IDxVNkJFRT4KKzxVNkJFMT4gPFU2QzA4PgorPFU2QkVDPiA8VTc0MDM+Cis8VTZCRUU+IDxVNkJERj4KKzxVNkJGNT4gPFU2QkZGPgorPFU2QkZGPiA8VTZCRjU+Cis8VTZDMDI+IDxVNzI2Nj47PFU3MjlCPgorPFU2QzA3PiA8VTZDMEM+Cis8VTZDMDg+IDxVNkJFMT47PFU2QzBBPgorPFU2QzBBPiA8VTZDMDg+Cis8VTZDMEM+IDxVNkMwNz4KKzxVNkMxND4gPFU2QzE3Pjs8VTZDMjM+OzxVNzA4MT4KKzxVNkMxNz4gPFU2QzE0Pjs8VTZDMjM+OzxVNzA4MT4KKzxVNkMxQj4gPFU5NkYwPgorPFU2QzIyPiA8VTZDMkI+Cis8VTZDMjM+IDxVNkMxND47PFU2QzE3Pjs8VTcwODE+Cis8VTZDMjk+IDxVNkMyQz4KKzxVNkMyQj4gPFU2QzIyPgorPFU2QzJDPiA8VTZDMjk+Cis8VTZDMzI+IDxVNkMzMz4KKzxVNkMzMz4gPFU2QzMyPgorPFU2QzM0PiA8VTZDMzU+OzxVNkMzQT4KKzxVNkMzNT4gPFU2QzM0Pjs8VTZDM0E+Cis8VTZDMzc+IDxVNEVDQz47PFU1MUFCPjs8VTUxQjA+Cis8VTZDM0E+IDxVNkMzND47PFU2QzM1PgorPFU2QzQ3PiA8VTUzMkY+OzxVNUY1OT47PFU1RjVBPjs8VTZFRDk+Cis8VTZDNDk+IDxVNkYyMj4KKzxVNkM0RT4gPFU2Q0RCPgorPFU2QzU5PiA8VTZDNUE+OzxVNkM2MT4KKzxVNkM1QT4gPFU2QzU5Pjs8VTZDNjE+Cis8VTZDNjE+IDxVNkM1OT47PFU2QzVBPgorPFU2QzY0PiA8VTZFNkY+Cis8VTZDNzM+IDxVNkM3ND4KKzxVNkM3ND4gPFU2QzczPgorPFU2Qzc5PiA8VTZEMzY+Cis8VTZDN0E+IDxVNTFCMz4KKzxVNkM3Qj4gPFU2RUY4PgorPFU2Qzg4PiA8VTZDODk+OzxVNzAwQj4KKzxVNkM4OT4gPFU2Qzg4PgorPFU2QzkyPiA8VTZDQTE+Cis8VTZDOTY+IDxVNTFCMj4KKzxVNkM5Nz4gPFU2REZCPgorPFU2QzlGPiA8VTZFOUQ+Cis8VTZDQTE+IDxVNTczRD47PFU2QjdFPjs8VTZCN0Y+OzxVNkI4MT47PFU2QzkyPgorPFU2Q0EyPiA8VTZDRkQ+OzxVNkZBND4KKzxVNkNBMz4gPFU3MDQzPgorPFU2Q0E0PiA8VTZGMUE+Cis8VTZDQTU+IDxVNzAxRD4KKzxVNkNBNj4gPFU2REVBPgorPFU2Q0E3PiA8VTZFQzQ+Cis8VTZDQTg+IDxVNkUyMj4KKzxVNkNBOT4gPFU2RjU5PgorPFU2Q0FBPiA8VTZFRUM+OzxVN0MwND4KKzxVNkNBRT4gPFU5NjNCPgorPFU2Q0IxPiA8VTZDQjI+Cis8VTZDQjI+IDxVNkNCMT4KKzxVNkNCNT4gPFU2RkQ0PgorPFU2Q0JFPiA8VTk3MTE+Cis8VTZDQzE+IDxVNTFCNT4KKzxVNkNENT4gPFU0RjcxPjs8VTcwNEI+Cis8VTZDREI+IDxVNkM0RT4KKzxVNkNERD4gPFU2RUFGPgorPFU2Q0RFPiA8VTZGRDg+Cis8VTZDRTU+IDxVNTc2RD4KKzxVNkNFOD4gPFU4QTNCPgorPFU2Q0VBPiA8VTZEOTk+OzxVNkREQT4KKzxVNkNFRj4gPFU1MUJBPgorPFU2Q0YwPiA8VTU5MzM+Cis8VTZDRjY+IDxVNkZBOT4KKzxVNkNGNz4gPFU2RUREPjs8VTcwMjc+Cis8VTZDRjg+IDxVNzAxOD4KKzxVNkNGQT4gPFU2RkZDPgorPFU2Q0ZCPiA8VTcwMDk+Cis8VTZDRkM+IDxVNkU4Qz47PFU2RjUxPjs8VTc2N0E+Cis8VTZDRkQ+IDxVNkNBMj47PFU2RkE0PgorPFU2Q0ZFPiA8VTZEODc+Cis8VTZEMDE+IDxVNkY1ND4KKzxVNkQwQz4gPFU1MUJEPgorPFU2RDEyPiA8VTcwNTE+Cis8VTZEMkY+IDxVNkY1ND4KKzxVNkQzNj4gPFU2Qzc5PgorPFU2RDNDPiA8VTdBQUE+Cis8VTZENDA+IDxVNjZGMj4KKzxVNkQ0Mz4gPFU2RDc5PgorPFU2RDQ0PiA8VTZERTg+Cis8VTZENDU+IDxVNkRGQT4KKzxVNkQ0Nj4gPFU2RjNGPgorPFU2RDQ3PiA8VTZGODY+Cis8VTZENDg+IDxVNkU1RT4KKzxVNkQ0OT4gPFU2RUFFPgorPFU2RDRBPiA8VTZGQzE+Cis8VTZENEI+IDxVNkUyQz4KKzxVNkQ0RD4gPFU2RkFFPgorPFU2RDRFPiA8VTZFMDg+OzxVNkZERj4KKzxVNkQ0Rj4gPFU1NkEwPjs8VTcwMEY+Cis8VTZENTA+IDxVNkVGQj4KKzxVNkQ1MT4gPFU2RTNFPgorPFU2RDUyPiA8VTZFRjg+Cis8VTZENTM+IDxVNkZDMz4KKzxVNkQ1ND4gPFU2RjZGPgorPFU2RDU1PiA8VTZGREM+Cis8VTZENUM+IDxVNkVFOD47PFU2RkYxPjs8VTZGRjU+Cis8VTZENjM+IDxVNkZBMz4KKzxVNkQ2Nz4gPFU2RjgyPjs8VTZGODQ+OzxVNzAxMz4KKzxVNkQ2OT4gPFU2Rjk0PgorPFU2RDc5PiA8VTZENDM+Cis8VTZEN0M+IDxVNTFDMj4KKzxVNkQ4Mj4gPFU1MUMzPjs8VTU4NTc+Cis8VTZEODU+IDxVNkU3Qz4KKzxVNkQ4Nz4gPFU2Q0ZFPgorPFU2RDg5PiA8VTZFMDk+Cis8VTZEOEM+IDxVNkU2Nz4KKzxVNkQ5Nj4gPFU4Mzg1Pjs8VTg0OUU+Cis8VTZEOTk+IDxVNkNFQT47PFU2RERBPgorPFU2RDlCPiA8VTZGRTQ+Cis8VTZEOUM+IDxVNkUwRT47PFU3MDA2PgorPFU2RDlEPiA8VTZGODc+Cis8VTZEOUU+IDxVNkRGNj4KKzxVNkQ5Rj4gPFU2RjIzPgorPFU2REEwPiA8VTZGN0Y+Cis8VTZEQTE+IDxVNkUyNj4KKzxVNkRBMj4gPFU2RUIzPgorPFU2REEzPiA8VTZFMTk+Cis8VTZEQTQ+IDxVNkVDQz4KKzxVNkRBNj4gPFU2RjY0PgorPFU2REE3PiA8VTZGOTc+OzxVNzkwMD4KKzxVNkRBOD4gPFU2RjMyPgorPFU2REE5PiA8VTZFMEI+OzxVNkY4MD47PFU2RjgxPjs8VTZGQzc+Cis8VTZEQUY+IDxVNkYwND4KKzxVNkRCOD4gPFU1MUM1PgorPFU2REJDPiA8VTUxQzk+Cis8VTZEQzA+IDxVNkZCMT4KKzxVNkRDND4gPFU2RTdEPgorPFU2RENCPiA8VTc1RjM+Cis8VTZERDI+IDxVNTFDND4KKzxVNkREQT4gPFU2Q0VBPjs8VTZEOTk+Cis8VTZERTU+IDxVNkUwQz4KKzxVNkRFOD4gPFU1MUMwPjs8VTZENDQ+Cis8VTZERUE+IDxVNkNBNj4KKzxVNkRFQj4gPFU1QTZDPjs8VTZFREI+Cis8VTZERjM+IDxVNkU3Qj4KKzxVNkRGNT4gPFU1NkU2Pjs8VTZFMEE+OzxVNkUxNT4KKzxVNkRGNj4gPFU2RDlFPgorPFU2REY4PiA8VTZFMDU+Cis8VTZERkE+IDxVNkQ0NT4KKzxVNkRGQj4gPFU2Qzk3PgorPFU2RTA1PiA8VTZERjg+Cis8VTZFMDc+IDxVNkUzND4KKzxVNkUwOD4gPFU2RDRFPjs8VTZGREY+Cis8VTZFMDk+IDxVNkQ4OT4KKzxVNkUwQT4gPFU1NkU2Pjs8VTZERjU+OzxVNkUxNT4KKzxVNkUwQj4gPFU2QjZFPjs8VTZEQTk+OzxVNkY4MD47PFU2RjgxPgorPFU2RTBDPiA8VTZERTU+Cis8VTZFMEQ+IDxVNkYyQz4KKzxVNkUwRT4gPFU2RDlDPjs8VTcwMDY+Cis8VTZFMTA+IDxVNkYzOD4KKzxVNkUxMT4gPFU2RkEwPgorPFU2RTEzPiA8VTVENjA+OzxVNkVBQT47PFU4QzNGPjs8VThDNDA+Cis8VTZFMTQ+IDxVNkYwMT4KKzxVNkUxNT4gPFU1NkU2Pjs8VTZERjU+OzxVNkUwQT4KKzxVNkUxNj4gPFU3MDBCPgorPFU2RTE3PiA8VTZFRjI+Cis8VTZFMTk+IDxVNkRBMz4KKzxVNkUxQj4gPFU1MUNGPgorPFU2RTIyPiA8VTZDQTg+Cis8VTZFMjY+IDxVNkRBMT4KKzxVNkUyOT4gPFU2RUFCPgorPFU2RTJDPiA8VTZENEI+Cis8VTZFMzQ+IDxVNkUwNz4KKzxVNkUzOD4gPFU5MDMwPjs8VTkwNEE+Cis8VTZFM0U+IDxVNkQ1MT4KKzxVNkU0QT4gPFU1MUQxPgorPFU2RTVFPiA8VTZENDg+Cis8VTZFNjc+IDxVNkQ4Qz4KKzxVNkU2Rj4gPFU2QzY0PgorPFU2RTdCPiA8VTZERjM+Cis8VTZFN0M+IDxVNkQ4NT4KKzxVNkU3RD4gPFU2REM0PgorPFU2RTdFPiA8VTcwNjM+Cis8VTZFN0Y+IDxVNkVCQz47PFU2RkQ1PgorPFU2RTgwPiA8VTZFRTE+OzxVNkVGRj4KKzxVNkU4MT4gPFU2RkRBPgorPFU2RTgyPiA8VTUyNEM+Cis8VTZFODM+IDxVNkY3MD4KKzxVNkU4NT4gPFU2RkZBPgorPFU2RTg3PiA8VTZGMEE+Cis8VTZFODk+IDxVNkYxMT4KKzxVNkU4Qz4gPFU2Q0ZDPjs8VTZGNTE+OzxVNzY3QT4KKzxVNkU5MD4gPFU1M0I1PgorPFU2RTk1PiA8VTZGREI+OzxVODQ5OT4KKzxVNkU5Nj4gPFU1MUM2Pjs8VTUxRDY+Cis8VTZFOUM+IDxVNkY5MT4KKzxVNkU5RD4gPFU2QzlGPgorPFU2RUFBPiA8VTVENjA+OzxVNkUxMz47PFU4QzNGPjs8VThDNDA+Cis8VTZFQUI+IDxVNkUyOT4KKzxVNkVBRT4gPFU2RDQ5PgorPFU2RUFGPiA8VTZDREQ+OzxVOTA2MT4KKzxVNkVCMz4gPFU2REEyPgorPFU2RUI2PiA8VTcxOTQ+OzxVOTM5ND4KKzxVNkVCQz4gPFU2RTdGPjs8VTZGRDU+Cis8VTZFQzQ+IDxVNkNBNz4KKzxVNkVDNT4gPFU3MDZEPgorPFU2RUNDPiA8VTZEQTQ+Cis8VTZFQ0U+IDxVODM2NT4KKzxVNkVENz4gPFU2Rjc3PgorPFU2RUQ5PiA8VTUzMkY+OzxVNkM0Nz4KKzxVNkVEQT4gPFU2RUZFPgorPFU2RURCPiA8VTZERUI+Cis8VTZFREQ+IDxVNkNGNz47PFU3MDI3PgorPFU2RURFPiA8VTZFRUY+Cis8VTZFREY+IDxVNzA0RT47PFU3MDU0Pjs8VTcwNjc+Cis8VTZFRTA+IDxVNzA0ND4KKzxVNkVFMT4gPFU2RTgwPjs8VTZFRkY+Cis8VTZFRTI+IDxVNzAwNT4KKzxVNkVFND4gPFU2RkZFPgorPFU2RUU1PiA8VTZGRUI+Cis8VTZFRTY+IDxVNzA2ND4KKzxVNkVFOD4gPFU2RDVDPjs8VTZGRjE+OzxVNkZGNT4KKzxVNkVFOT4gPFU3MDU4PgorPFU2RUVBPiA8VTZGQTY+Cis8VTZFRUM+IDxVNkNBQT47PFU3QzA0PgorPFU2RUVGPiA8VTZFREU+Cis8VTZFRjI+IDxVNkUxNz4KKzxVNkVGNz4gPFU1MzY0Pjs8VTZGOUI+OzxVNzAwMj4KKzxVNkVGOD4gPFU2QzdCPjs8VTZENTI+Cis8VTZFRkI+IDxVNkQ1MD4KKzxVNkVGRT4gPFU2RURBPgorPFU2RUZGPiA8VTZFODA+OzxVNkVFMT4KKzxVNkYwMT4gPFU2RTE0PgorPFU2RjA0PiA8VTZEQUY+Cis8VTZGMDY+IDxVNjg3Qz4KKzxVNkYwQT4gPFU2RTg3PgorPFU2RjExPiA8VTZFODk+Cis8VTZGMTM+IDxVNzA1NT4KKzxVNkYxQT4gPFU2Q0E0PgorPFU2RjIyPiA8VTZDNDk+Cis8VTZGMjM+IDxVNkQ5Rj4KKzxVNkYyNz4gPFU0RTc5Pjs8VTRFN0U+OzxVNEU4MT4KKzxVNkYyQj4gPFU3MUIzPgorPFU2RjJDPiA8VTZFMEQ+Cis8VTZGMzE+IDxVNkY0ND4KKzxVNkYzMj4gPFU2REE4PgorPFU2RjM4PiA8VTZFMTA+Cis8VTZGM0Y+IDxVNkQ0Nj4KKzxVNkY0MT4gPFU5ODhEPgorPFU2RjQ0PiA8VTZGMzE+Cis8VTZGNDU+IDxVNzA0Qz4KKzxVNkY0Nj4gPFU3MDIwPgorPFU2RjQ3PiA8VTcwMUY+Cis8VTZGNEI+IDxVNzAzMj4KKzxVNkY0RD4gPFU2RkYwPgorPFU2RjUxPiA8VTZDRkM+OzxVNkU4Qz47PFU3NjdBPgorPFU2RjU0PiA8VTZEMDE+OzxVNkQyRj4KKzxVNkY1OT4gPFU2Q0E5PgorPFU2RjVCPiA8VTZGNUM+OzxVNkZGMz4KKzxVNkY1Qz4gPFU2RjVCPjs8VTZGRjM+Cis8VTZGNjQ+IDxVNkRBNj4KKzxVNkY2Rj4gPFU2RDU0PgorPFU2RjcwPiA8VTZFODM+Cis8VTZGNzQ+IDxVNzAyNj4KKzxVNkY3Nz4gPFU2RUQ3PgorPFU2RjdGPiA8VTZEQTA+Cis8VTZGODA+IDxVNkI2RT47PFU2REE5Pjs8VTZFMEI+OzxVNkY4MT4KKzxVNkY4MT4gPFU2QjZFPjs8VTZEQTk+OzxVNkUwQj47PFU2RjgwPgorPFU2RjgyPiA8VTZENjc+OzxVNkY4ND47PFU3MDEzPgorPFU2Rjg0PiA8VTZENjc+OzxVNkY4Mj47PFU3MDEzPgorPFU2Rjg2PiA8VTZENDc+Cis8VTZGODc+IDxVNkQ5RD4KKzxVNkY5MT4gPFU2RTlDPgorPFU2Rjk0PiA8VTZENjk+Cis8VTZGOTc+IDxVNkRBNz4KKzxVNkY5QT4gPFU2RkIzPgorPFU2RjlCPiA8VTUzNjQ+OzxVNkVGNz47PFU3MDAyPgorPFU2RjlDPiA8VTcwM0U+Cis8VTZGOUY+IDxVNTFEQj47PFU1MURDPgorPFU2RkEwPiA8VTZFMTE+Cis8VTZGQTM+IDxVNkQ2Mz4KKzxVNkZBND4gPFU2Q0EyPjs8VTZDRkQ+Cis8VTZGQTY+IDxVNkVFQT4KKzxVNkZBOT4gPFU2Q0Y2PgorPFU2RkFFPiA8VTZENEQ+Cis8VTZGQjA+IDxVNzAzMj4KKzxVNkZCMT4gPFU2REMwPgorPFU2RkIzPiA8VTZGOUE+Cis8VTZGQzE+IDxVNkQ0QT4KKzxVNkZDMz4gPFU2RDUzPgorPFU2RkM3PiA8VTZEQTk+Cis8VTZGRDE+IDxVNzAyOD47PFU3MDJDPgorPFU2RkQyPiA8VTcwMTU+Cis8VTZGRDQ+IDxVNkNCNT4KKzxVNkZENT4gPFU2RTdGPjs8VTZFQkM+Cis8VTZGRDg+IDxVNkNERT4KKzxVNkZEQT4gPFU2RTgxPjs8VTcwMkY+Cis8VTZGREI+IDxVNkU5NT47PFU4NDk5PgorPFU2RkRDPiA8VTZENTU+Cis8VTZGREY+IDxVNkQ0RT47PFU2RTA4PgorPFU2RkU0PiA8VTZEOUI+Cis8VTZGRUI+IDxVNkVFNT4KKzxVNkZGMD4gPFU2RjREPgorPFU2RkYxPiA8VTZENUM+OzxVNkVFOD47PFU2RkY1PgorPFU2RkYzPiA8VTZGNUI+OzxVNkY1Qz4KKzxVNkZGNT4gPFU2RDVDPjs8VTZFRTg+OzxVNkZGMT4KKzxVNkZGNj4gPFU5NUNBPjs8VTk2MTQ+Cis8VTZGRkE+IDxVNkU4NT4KKzxVNkZGQz4gPFU2Q0ZBPgorPFU2RkZFPiA8VTZFRTQ+Cis8VTcwMDI+IDxVNTM2ND47PFU2RUY3Pjs8VTZGOUI+Cis8VTcwMDU+IDxVNkVFMj4KKzxVNzAwNj4gPFU2RDlDPjs8VTZFMEU+Cis8VTcwMDk+IDxVNkNGQj4KKzxVNzAwQj4gPFU2Qzg4Pjs8VTZFMTY+Cis8VTcwMEY+IDxVNkQ0Rj4KKzxVNzAxMz4gPFU2RDY3Pjs8VTZGODI+OzxVNkY4ND4KKzxVNzAxNT4gPFU2RkQyPgorPFU3MDE4PiA8VTZDRjg+Cis8VTcwMUQ+IDxVNkNBNT4KKzxVNzAxRj4gPFU2RjQ3PgorPFU3MDIwPiA8VTZGNDY+Cis8VTcwMjY+IDxVNkY3ND4KKzxVNzAyNz4gPFU2Q0Y3Pjs8VTZFREQ+Cis8VTcwMjg+IDxVNkZEMT47PFU3MDJDPgorPFU3MDJDPiA8VTZGRDE+OzxVNzAyOD4KKzxVNzAyRj4gPFU2RkRBPgorPFU3MDMwPiA8VTVGMjU+Cis8VTcwMzI+IDxVNkY0Qj47PFU2RkIwPgorPFU3MDNFPiA8VTZGOUM+Cis8VTcwNDM+IDxVNkNBMz4KKzxVNzA0ND4gPFU2RUUwPgorPFU3MDRCPiA8VTRGNzE+OzxVNkNENT4KKzxVNzA0Qz4gPFU2RjQ1PgorPFU3MDRFPiA8VTZFREY+OzxVNzA1ND4KKzxVNzA0Rj4gPFU3MDVEPgorPFU3MDUxPiA8VTZEMTI+Cis8VTcwNTQ+IDxVNkVERj47PFU3MDRFPgorPFU3MDU1PiA8VTZGMTM+Cis8VTcwNTg+IDxVNkVFOT4KKzxVNzA1RD4gPFU3MDRGPgorPFU3MDYzPiA8VTZFN0U+Cis8VTcwNjQ+IDxVNkVFNj4KKzxVNzA2Nz4gPFU2RURGPgorPFU3MDZEPiA8VTZFQzU+Cis8VTcwNkU+IDxVNTE0OT47PFU3MDk3PgorPFU3MDZGPiA8VTcxQzg+Cis8VTcwNzU+IDxVOTcwQT47PFU5NzFCPjs8VTk3NDg+Cis8VTcwNzY+IDxVN0FDMz47PFU3QUM4PgorPFU3MDdCPiA8VTcwRkU+OzxVOEQ2ND4KKzxVNzA3RD4gPFU3MDdFPjs8VTcwRDY+Cis8VTcwN0U+IDxVNzA3RD47PFU3MEQ2PgorPFU3MDdGPiA8VTcxRTY+Cis8VTcwODA+IDxVNzE2Qz4KKzxVNzA4MT4gPFU2QzE0Pjs8VTZDMTc+OzxVNkMyMz4KKzxVNzA4OT4gPFU3MjEwPjs8VTkyMjk+OzxVOTQ2QT4KKzxVNzA4RD4gPFU1M0NEPjs8VTUzREI+Cis8VTcwOEU+IDxVNzA4Rj4KKzxVNzA4Rj4gPFU3MDhFPgorPFU3MDk3PiA8VTUxNDk+OzxVNzA2RT4KKzxVNzA5Qz4gPFU3MTUyPgorPFU3MDlEPiA8VTcxOTc+Cis8VTcwQTQ+IDxVNjYyRD47PFU2NkNDPjs8VTcxNjc+OzxVNzFGMz47PFU3N0JFPgorPFU3MEFFPiA8VTc4MzI+OzxVNzkxRj47PFU3OTJFPgorPFU3MEFGPiA8VTcwRjE+Cis8VTcwQjA+IDxVN0YzOT4KKzxVNzBCOT4gPFU5RURFPgorPFU3MEJBPiA8VTRFM0E+OzxVNzIzMj4KKzxVNzBCQz4gPFU3MTQ5Pjs8VTkzMkM+OzxVOTM0QT4KKzxVNzBCRD4gPFU3MUJFPgorPFU3MEMxPiA8VTcyMEQ+Cis8VTcwQzI+IDxVNzFENz47PFU3MjFCPjs8VTcyMjQ+Cis8VTcwQzM+IDxVNzBGND4KKzxVNzBDQT4gPFU3MTZDPgorPFU3MENGPiA8VTRFNEM+Cis8VTcwRDY+IDxVNzA3RD47PFU3MDdFPgorPFU3MERCPiA8VTcxRUQ+Cis8VTcwREY+IDxVNzE1OT4KKzxVNzBFNj4gPFU3MTY5PgorPFU3MEU3PiA8VTcxM0M+OzxVNzFEMj4KKzxVNzBFOD4gPFU3MUMxPjs8VTcyMTc+Cis8VTcwRTk+IDxVNzFGND4KKzxVNzBFQj4gPFU3MUQ5PgorPFU3MEVDPiA8VTcxRkM+Cis8VTcwRUQ+IDxVNzFCMT4KKzxVNzBGMT4gPFU3MEFGPgorPFU3MEY0PiA8VTcwQzM+Cis8VTcwRkQ+IDxVNzFBMj4KKzxVNzBGRT4gPFU3MDdCPjs8VThENjQ+Cis8VTcxMDc+IDxVOTJCNz4KKzxVNzEwOD4gPFU1MURFPjs8VTcxNTU+OzxVNzE4OD47PFU3MTk5PgorPFU3MTBBPiA8VTkyQjI+Cis8VTcxMEY+IDxVNEU5Rj4KKzxVNzExND4gPFU3MTMwPjs8VTcxQzQ+Cis8VTcxMTU+IDxVNzE2NT4KKzxVNzExNj4gPFU3MURDPgorPFU3MTE4PiA8VTcxRkU+Cis8VTcxMUE+IDxVNzFDQz47PFU3MUQzPgorPFU3MTIxPiA8VTY1RTA+Cis8VTcxMjY+IDxVNzEzMz4KKzxVNzEyRD4gPFU3MTYyPgorPFU3MTMwPiA8VTcxMTQ+OzxVNzFDND4KKzxVNzEzMz4gPFU3MTI2PgorPFU3MTNDPiA8VTcwRTc+OzxVNzFEMj4KKzxVNzE0NT4gPFU5MzVCPgorPFU3MTQ5PiA8VTcwQkM+OzxVOTMyQz47PFU5MzRBPgorPFU3MTUxPiA8VTcxNkU+Cis8VTcxNTI+IDxVNzA5Qz4KKzxVNzE1NT4gPFU1MURFPjs8VTcxMDg+OzxVNzE4OD47PFU3MTk5PgorPFU3MTU2PiA8VTY2OTY+Cis8VTcxNTc+IDxVNjY5Nj4KKzxVNzE1OT4gPFU3MERGPgorPFU3MTYyPiA8VTcxMkQ+OzxVODMxNT4KKzxVNzE2NT4gPFU3MTE1PgorPFU3MTY3PiA8VTY2Q0M+OzxVNzBBND47PFU3MUYzPjs8VTc3QkU+Cis8VTcxNjk+IDxVNzBFNj4KKzxVNzE2Qz4gPFU3MDgwPjs8VTcwQ0E+Cis8VTcxNkU+IDxVNzE1MT4KKzxVNzE3ND4gPFU3MTdFPjs8VTcxODU+Cis8VTcxN0U+IDxVNzE3ND47PFU3MTg1PgorPFU3MTg1PiA8VTcxNzQ+OzxVNzE3RT4KKzxVNzE4OD4gPFU1MURFPjs8VTcxMDg+OzxVNzE1NT47PFU3MTk5PgorPFU3MThGPiA8VTcxRkI+Cis8VTcxOTI+IDxVODM2Nz4KKzxVNzE5ND4gPFU2RUI2Pjs8VTkzOTQ+Cis8VTcxOTc+IDxVNzA5RD4KKzxVNzE5OT4gPFU1MURFPjs8VTcxMDg+OzxVNzE1NT47PFU3MTg4PgorPFU3MUEyPiA8VTcwRkQ+Cis8VTcxQjE+IDxVNzBFRD4KKzxVNzFCMj4gPFU5ODhFPgorPFU3MUIzPiA8VTZGMkI+Cis8VTcxQjk+IDxVNzFCQT4KKzxVNzFCQT4gPFU3MUI5PgorPFU3MUJFPiA8VTcwQkQ+Cis8VTcxQzE+IDxVNzBFOD47PFU3MjE3PgorPFU3MUM0PiA8VTcxMTQ+OzxVNzEzMD4KKzxVNzFDOD4gPFU3MDZGPgorPFU3MUNDPiA8VTcxMUE+OzxVNzFEMz4KKzxVNzFDRT4gPFU1QzFFPgorPFU3MUQwPiA8VTc4Rjc+OzxVN0NBNj4KKzxVNzFEMj4gPFU3MEU3Pjs8VTcxM0M+Cis8VTcxRDM+IDxVNzExQT47PFU3MUNDPgorPFU3MUQ1PiA8VTlERjA+Cis8VTcxRDc+IDxVNzBDMj47PFU3MjFCPjs8VTcyMjQ+Cis8VTcxRDk+IDxVNzBFQj4KKzxVNzFEQz4gPFU3MTE2PgorPFU3MURGPiA8VTU1QjY+OzxVODQyNT4KKzxVNzFFNj4gPFU3MDdGPgorPFU3MUVDPiA8VTZCQzE+Cis8VTcxRUQ+IDxVNzBEQj4KKzxVNzFGMz4gPFU2NkNDPjs8VTcwQTQ+OzxVNzE2Nz47PFU3N0JFPgorPFU3MUY0PiA8VTcwRTk+Cis8VTcxRkI+IDxVNzE4Rj4KKzxVNzFGQz4gPFU3MEVDPgorPFU3MUZFPiA8VTcxMTg+Cis8VTcxRkY+IDxVODAwMD4KKzxVNzIwRD4gPFU3MEMxPgorPFU3MjEwPiA8VTcwODk+Cis8VTcyMTc+IDxVNzBFOD47PFU3MUMxPgorPFU3MjFCPiA8VTcwQzI+OzxVNzFENz47PFU3MjI0PgorPFU3MjI0PiA8VTcwQzI+OzxVNzFENz47PFU3MjFCPgorPFU3MjJEPiA8VTRFODk+Cis8VTcyMzE+IDxVNjExQj4KKzxVNzIzMj4gPFU0RTNBPjs8VTcwQkE+Cis8VTcyMzQ+IDxVNjUyQj4KKzxVNzIzNz4gPFU3MjNBPgorPFU3MjNBPiA8VTcyMzc+Cis8VTcyM0M+IDxVNEZDRT4KKzxVNzIzRT4gPFU1QzEyPjs8VTVDMTM+OzxVNUMxND4KKzxVNzIzRj4gPFU0RTJDPgorPFU3MjQwPiA8VTVFOEE+Cis8VTcyNDM+IDxVNjk2QT4KKzxVNzI0NT4gPFU1ODg5PgorPFU3MjQ2PiA8VTU4OTk+Cis8VTcyNEI+IDxVN0IzQT4KKzxVNzI0RD4gPFU3MjU4PgorPFU3MjRFPiA8VTcyNTU+OzxVN0E5Mz47PFU3QTk3Pjs8VTdBQkI+Cis8VTcyNTM+IDxVNjk5Qz4KKzxVNzI1NT4gPFU3MjRFPjs8VTdBOTM+OzxVN0E5Nz47PFU3QUJCPgorPFU3MjU4PiA8VTcyNEQ+Cis8VTcyNUI+IDxVNzI1Qz4KKzxVNzI1Qz4gPFU3MjVCPgorPFU3MjYwPiA8VTVCODM+Cis8VTcyNjY+IDxVNkMwMj47PFU3MjlCPgorPFU3MjZCPiA8VTRGMTA+OzxVNTBBMD4KKzxVNzI3ND4gPFU2MkI1PgorPFU3Mjc1PiA8VTcyN0Q+Cis8VTcyN0E+IDxVNzJBMD47PFU3MkE3PgorPFU3MjdEPiA8VTcyNzU+Cis8VTcyODE+IDxVNzI4Mj4KKzxVNzI4Mj4gPFU3MjgxPgorPFU3Mjg3PiA8VTU5NTQ+Cis8VTcyOEE+IDxVNzJBMj4KKzxVNzI5Nj4gPFU4MzY2PgorPFU3MjlCPiA8VTZDMDI+OzxVNzI2Nj4KKzxVNzJBMD4gPFU3MjdBPjs8VTcyQTc+Cis8VTcyQTI+IDxVNzI4QT4KKzxVNzJBNz4gPFU3MjdBPjs8VTcyQTA+Cis8VTcyQUM+IDxVNzJBRD4KKzxVNzJBRD4gPFU3MkFDPgorPFU3MkFFPiA8VTUzRDA+Cis8VTcyQjI+IDxVOEM3QT4KKzxVNzJCND4gPFU4QzdCPjs8VThDOEI+Cis8VTcyQjY+IDxVNzJDMD4KKzxVNzJCNz4gPFU3Mzc3PgorPFU3MkI4PiA8VTczNDE+Cis8VTcyQjk+IDxVNzMzNj4KKzxVNzJDMD4gPFU3MkI2PgorPFU3MkMyPiA8VTU0NDg+OzxVNjI4Mj4KKzxVNzJDOD4gPFU3MkZEPgorPFU3MkM5PiA8VThDN0U+Cis8VTcyQ0M+IDxVNzMyOT4KKzxVNzJERD4gPFU3MzZFPgorPFU3MkRFPiA8VTczNzA+Cis8VTcyRTI+IDxVOEM4OT4KKzxVNzJFNT4gPFU1Rjg3PgorPFU3MkVDPiA8VTczNjg+Cis8VTcyRUQ+IDxVNzJGOT4KKzxVNzJFRT4gPFU3MzQ1PgorPFU3MkVGPiA8VTczNkE+Cis8VTcyRjA+IDxVNzMxOT4KKzxVNzJGMT4gPFU3MzQ0PgorPFU3MkYyPiA8VTczM0I+Cis8VTcyRjg+IDxVNzMwRD47PFU4QzhEPgorPFU3MkY5PiA8VTcyRUQ+Cis8VTcyRkQ+IDxVNzJDOD4KKzxVNzJGRT4gPFU3MzE4PgorPFU3MzAyPiA8VTYwOEQ+Cis8VTczMDM+IDxVNzM2Qj4KKzxVNzMwNz4gPFU4NjUzPgorPFU3MzBBPiA8VThDOEU+Cis8VTczMEQ+IDxVNzJGOD47PFU4QzhEPgorPFU3MzBFPiA8VTczMUY+OzxVNzM3NT4KKzxVNzMxNT4gPFU3MzdDPgorPFU3MzE4PiA8VTcyRkU+Cis8VTczMTk+IDxVNzJGMD4KKzxVNzMxRj4gPFU3MzBFPjs8VTczNzU+Cis8VTczMjE+IDxVNzM4MD4KKzxVNzMyOD4gPFU3MzNGPgorPFU3MzI5PiA8VTcyQ0M+Cis8VTczMkE+IDxVOEM2Qz4KKzxVNzMyQj4gPFU4QzkzPgorPFU3MzJDPiA8VTg3NUY+Cis8VTczMkU+IDxVNzM3Qj4KKzxVNzMyRj4gPFU4QzkyPgorPFU3MzMyPiA8VTczNjY+Cis8VTczMzU+IDxVNzM3MT4KKzxVNzMzNj4gPFU3MkI5PgorPFU3MzNCPiA8VTcyRjI+Cis8VTczM0Y+IDxVNzMyOD47PFU4NzZGPgorPFU3MzQxPiA8VTcyQjg+Cis8VTczNDQ+IDxVNzJGMT4KKzxVNzM0NT4gPFU3MkVFPgorPFU3MzREPiA8VTkzRTE+Cis8VTczNEU+IDxVNTk1Nj47PFU1OTY4Pjs8VTU5NkM+Cis8VTczNEY+IDxVOEM5OD4KKzxVNzM1MD4gPFU5RTlFPgorPFU3MzU4PiA8VTczNTk+Cis8VTczNTk+IDxVNzM1OD4KKzxVNzM2Mz4gPFU1MTdEPjs8VTczNzg+Cis8VTczNjY+IDxVNzMzMj4KKzxVNzM2OD4gPFU3MkVDPgorPFU3MzZBPiA8VTcyRUY+Cis8VTczNkI+IDxVNzMwMz47PFU3MzgxPgorPFU3MzZEPiA8VTczN0E+Cis8VTczNkU+IDxVNzJERD4KKzxVNzM3MD4gPFU3MkRFPgorPFU3MzcxPiA8VTczMzU+Cis8VTczNzI+IDxVODNCNz4KKzxVNzM3NT4gPFU3MzBFPjs8VTczMUY+Cis8VTczNzc+IDxVNzJCNz4KKzxVNzM3OD4gPFU1MTdEPjs8VTczNjM+Cis8VTczN0E+IDxVNzM2RD4KKzxVNzM3Qj4gPFU3MzJFPgorPFU3MzdDPiA8VTczMTU+Cis8VTczN0U+IDxVOEM5Qj4KKzxVNzM4MD4gPFU3MzIxPgorPFU3MzgxPiA8VTczNkI+Cis8VTczODM+IDxVODgzQz47PFU4QzlDPgorPFU3Mzg1PiA8VTU5OTk+Cis8VTczODc+IDxVNTM1Qj4KKzxVNzM5MT4gPFU3NEEzPgorPFU3Mzk5PiA8VTc0QjU+Cis8VTczOUE+IDxVNzQ1Mj4KKzxVNzM5Qj4gPFU3NDZBPgorPFU3M0E4PiA8VTczQ0Y+OzxVNzQ3ND4KKzxVNzNBOT4gPFU3RkVCPgorPFU3M0FFPiA8VTc0NEI+Cis8VTczQUY+IDxVNzRCMD4KKzxVNzNCMD4gPFU3M0ZFPgorPFU3M0IxPiA8VTc0NzI+Cis8VTczQjM+IDxVNzQ0Nz4KKzxVNzNCQT4gPFU3NEJEPgorPFU3M0NCPiA8VTc0MDk+OzxVNzQ2MD47PFU3NEEyPgorPFU3M0NEPiA8VTczQ0U+Cis8VTczQ0U+IDxVNzNDRD4KKzxVNzNDRj4gPFU3M0E4Pjs8VTc0NzQ+Cis8VTczRDA+IDxVNzQzQT4KKzxVNzNEMT4gPFU3NENGPgorPFU3M0UxPiA8VTc0MzQ+OzxVNzQzOT4KKzxVNzNFND4gPFU1QjlEPjs8VTVCREE+OzxVNUJGMz47PFU1QkY2PgorPFU3M0VBPiA8VTU3MkQ+Cis8VTczRjA+IDxVNzRBQj4KKzxVNzNGMT4gPFU3NDhFPjs8VTc0RDQ+Cis8VTczRjI+IDxVNzQzRj4KKzxVNzNGNz4gPFU3ODk0PgorPFU3M0ZFPiA8VTczQjA+Cis8VTc0MDM+IDxVNkJFQz4KKzxVNzQwNT4gPFU3NDZGPgorPFU3NDA5PiA8VTczQ0I+OzxVNzQ2MD47PFU3NEEyPgorPFU3NDBEPiA8VTc0ODM+OzxVNzRDOD4KKzxVNzQwRT4gPFU3NEExPgorPFU3NDBGPiA8VTc0ODk+Cis8VTc0MTA+IDxVNzQxMT47PFU3NDYzPgorPFU3NDExPiA8VTc0MTA+OzxVNzQ2Mz4KKzxVNzQzMT4gPFU5NkQ1PgorPFU3NDM0PiA8VTczRTE+OzxVNzQzOT4KKzxVNzQzOT4gPFU3M0UxPjs8VTc0MzQ+Cis8VTc0M0E+IDxVNzNEMD4KKzxVNzQzQz4gPFU3NENBPgorPFU3NDNGPiA8VTczRjI+Cis8VTc0NDc+IDxVNzNCMz4KKzxVNzQ0Qj4gPFU3M0FFPgorPFU3NDUyPiA8VTczOUE+Cis8VTc0NTk+IDxVNzhBRj4KKzxVNzQ2MD4gPFU3M0NCPjs8VTc0MDk+OzxVNzRBMj4KKzxVNzQ2Mz4gPFU3NDEwPjs8VTc0MTE+Cis8VTc0NjQ+IDxVNzQ3Nj4KKzxVNzQ2OD4gPFU3NEExPgorPFU3NDY5PiA8VTgzQjk+Cis8VTc0NkE+IDxVNzM5Qj4KKzxVNzQ2Rj4gPFU3NDA1PgorPFU3NDcwPiA8VTc0Q0M+Cis8VTc0NzI+IDxVNzNCMT4KKzxVNzQ3ND4gPFU3M0E4Pjs8VTczQ0Y+Cis8VTc0NzY+IDxVNzQ2ND4KKzxVNzQ3Nz4gPFU3NEE2PgorPFU3NDc4PiA8VTc0Qjg+Cis8VTc0ODM+IDxVNzQwRD47PFU3NEM4PgorPFU3NDg3PiA8VTc0QkY+Cis8VTc0ODk+IDxVNzQwRj4KKzxVNzQ4RT4gPFU3M0YxPjs8VTc0RDQ+Cis8VTc0QTE+IDxVNzQwRT47PFU3NDY4PgorPFU3NEEyPiA8VTczQ0I+OzxVNzQwOT47PFU3NDYwPgorPFU3NEEzPiA8VTczOTE+Cis8VTc0QTY+IDxVNzQ3Nz4KKzxVNzRBQj4gPFU3M0YwPgorPFU3NEIwPiA8VTczQUY+Cis8VTc0QjU+IDxVNzM5OT4KKzxVNzRCOD4gPFU3NDc4PgorPFU3NEJEPiA8VTU4RDA+OzxVNzNCQT4KKzxVNzRCRj4gPFU3NDg3PgorPFU3NEM4PiA8VTc0MEQ+OzxVNzQ4Mz4KKzxVNzRDOT4gPFU3NERBPgorPFU3NENBPiA8VTc0M0M+Cis8VTc0Q0M+IDxVNzQ3MD4KKzxVNzRDRj4gPFU3M0QxPgorPFU3NEQyPiA8VTc0REE+Cis8VTc0RDQ+IDxVNzNGMT47PFU3NDhFPgorPFU3NERBPiA8VTc0Qzk+OzxVNzREMj4KKzxVNzRFMz4gPFU1RjAxPgorPFU3NEU4PiA8VTdGMzg+Cis8VTc0RUU+IDxVNzUxNT4KKzxVNzRFRj4gPFU3NTBDPgorPFU3NEY2PiA8VTc1MDE+OzxVN0YzRT4KKzxVNzRGNz4gPFU3NTA2PgorPFU3NTAxPiA8VTc0RjY+OzxVN0YzRT4KKzxVNzUwNj4gPFU3NEY3PgorPFU3NTBDPiA8VTc0RUY+Cis8VTc1MEU+IDxVNTg3Qz47PFU3ODE2Pjs8VTc4REE+Cis8VTc1MTU+IDxVNzRFRT4KKzxVNzUxNj4gPFU3RjQyPjs8VTdGNEM+Cis8VTc1MUU+IDxVNTYxNz47PFU1NjkwPjs8VTVDMUQ+Cis8VTc1MjA+IDxVNjY3ND4KKzxVNzUyMj4gPFU0RUE3Pjs8VTc1MjM+Cis8VTc1MjM+IDxVNEVBNz47PFU3NTIyPgorPFU3NTI2PiA8VTdBNEM+OzxVODJDRj47PFU4NjA3PgorPFU3NTJGPiA8VTVCODE+OzxVNUJDRD47PFU1QkQ1Pjs8VTVCRDc+OzxVNUJEQz47PFU1QkU3PgorPFU3NTM1PiA8VTk2RkI+Cis8VTc1Mzc+IDxVNEZCRD4KKzxVNzUzQT4gPFU1NzIyPjs8VTc1M0M+Cis8VTc1M0I+IDxVNTIxMj47PFU1MjgzPjs8VTUyOTA+OzxVNzU2Qj47PFU3NTc1PgorPFU3NTNDPiA8VTU3MjI+OzxVNzUzQT4KKzxVNzUzRD4gPFU3NTRFPgorPFU3NTQyPiA8VTc1NUQ+Cis8VTc1NDQ+IDxVNzU1OT47PFU3NTcxPgorPFU3NTQ1PiA8VTY2QTI+Cis8VTc1NDY+IDxVNEVBOT47PFU3NTUyPjs8VTc1NUQ+OzxVNzU1RT4KKzxVNzU0QT4gPFU4MDE1PgorPFU3NTRDPiA8VTU4M0E+OzxVNzU0RD4KKzxVNzU0RD4gPFU1ODNBPjs8VTc1NEM+Cis8VTc1NEU+IDxVNzUzRD4KKzxVNzU1MT4gPFU3NTYwPgorPFU3NTUyPiA8VTRFQTk+OzxVNzU0Nj47PFU3NTVEPjs8VTc1NUU+Cis8VTc1NTk+IDxVNzU0ND47PFU3NTcxPgorPFU3NTVBPiA8VTU5NTk+Cis8VTc1NUQ+IDxVNEVBOT47PFU3NTQyPjs8VTc1NDY+OzxVNzU1Mj47PFU3NTVFPgorPFU3NTVFPiA8VTRFQTk+OzxVNzU0Nj47PFU3NTUyPjs8VTc1NUQ+Cis8VTc1NjA+IDxVNzU1MT4KKzxVNzU2MT4gPFU1NzkzPgorPFU3NTYyPiA8VTZCRDU+Cis8VTc1NjU+IDxVNzU2Nz4KKzxVNzU2Nz4gPFU3NTY1PgorPFU3NTY4PiA8VTc1NkE+Cis8VTc1NkE+IDxVNzU2OD4KKzxVNzU2Qj4gPFU3NTNCPjs8VTc1NzU+Cis8VTc1NzA+IDxVNUYwMj4KKzxVNzU3MT4gPFU3NTQ0Pjs8VTc1NTk+Cis8VTc1NzM+IDxVNTNFMD47PFU3NTgyPjs8VTc1ODk+OzxVNzU4QT4KKzxVNzU3ND4gPFU3NTg3PgorPFU3NTc1PiA8VTc1M0I+OzxVNzU2Qj4KKzxVNzU3Nj4gPFU1RjUzPgorPFU3NTdBPiA8VTc1ODU+Cis8VTc1N0I+IDxVNTg0RD4KKzxVNzU4Mj4gPFU1M0UwPjs8VTc1NzM+OzxVNzU4OT47PFU3NThBPgorPFU3NTg1PiA8VTc1N0E+OzxVNzU4Nj4KKzxVNzU4Nj4gPFU3NTg1PgorPFU3NTg3PiA8VTc1NzQ+Cis8VTc1ODk+IDxVNTNFMD47PFU3NTczPjs8VTc1ODI+OzxVNzU4QT4KKzxVNzU4QT4gPFU1M0UwPjs8VTc1NzM+OzxVNzU4Mj47PFU3NTg5PgorPFU3NThFPiA8VTc1OEY+OzxVOEUwOD4KKzxVNzU4Rj4gPFU3NThFPjs8VThFMDg+Cis8VTc1OTY+IDxVNzY2ND4KKzxVNzU5Nz4gPFU3NjQyPgorPFU3NTlGPiA8VTc2Mjc+Cis8VTc1QTA+IDxVNzY1OD4KKzxVNzVBMT4gPFU3NjBEPgorPFU3NUEzPiA8VTgwQUM+Cis8VTc1QUM+IDxVNzY2Nz4KKzxVNzVBRD4gPFU3NjMyPgorPFU3NUFFPiA8VTc2MjE+Cis8VTc1QUY+IDxVNzYwQj4KKzxVNzVCMT4gPFU3NkIwPjs8VTk3NjQ+Cis8VTc1QjQ+IDxVNzVGRT4KKzxVNzVDNz4gPFU3NjY1PgorPFU3NUM4PiA8VTc2NzA+Cis8VTc1Qzk+IDxVNzVEOT4KKzxVNzVEMj4gPFU3NjYyPgorPFU3NUQ2PiA8VTU0RDE+OzxVNTUxNj47PFU1NTVFPjs8VTc2MDI+Cis8VTc1RDk+IDxVNzVDOT4KKzxVNzVFOD4gPFU3NjQ2PgorPFU3NUU5PiA8VTc2MjY+Cis8VTc1RUE+IDxVNzYxMz4KKzxVNzVFQj4gPFU3NjQ3PgorPFU3NUVFPiA8VTgxMzk+Cis8VTc1RjI+IDxVNzVGMz47PFU5RUJCPgorPFU3NUYzPiA8VTZEQ0I+OzxVNzVGMj47PFU5RUJCPgorPFU3NUY0PiA8VTc2NjE+Cis8VTc1Rjk+IDxVNzVGQT4KKzxVNzVGQT4gPFU3NUY5PgorPFU3NUZFPiA8VTc1QjQ+Cis8VTc2MDI+IDxVNTREMT47PFU1NTE2Pjs8VTU1NUU+OzxVNzVENj4KKzxVNzYwNT4gPFU3NjQ5PgorPFU3NjA2PiA8VTc2MkU+Cis8VTc2MDk+IDxVNjEwOD47PFU3NjUyPgorPFU3NjBCPiA8VTc1QUY+Cis8VTc2MEQ+IDxVNzVBMT4KKzxVNzYxMz4gPFU3NUVBPgorPFU3NjE2PiA8VTU1OTE+Cis8VTc2MTc+IDxVNzYxRT4KKzxVNzYxOD4gPFU3NjNCPgorPFU3NjFFPiA8VTc2MTc+Cis8VTc2MjE+IDxVNzVBRT4KKzxVNzYyND4gPFU3NjQ1PgorPFU3NjI2PiA8VTc1RTk+Cis8VTc2Mjc+IDxVNzU5Rj4KKzxVNzYyQT4gPFU3NjVGPgorPFU3NjJCPiA8VTc2NzE+Cis8VTc2MkU+IDxVNzYwNj4KKzxVNzYzMj4gPFU3NUFEPgorPFU3NjNBPiA8VTc2M0I+Cis8VTc2M0I+IDxVNzYxOD47PFU3NjNBPgorPFU3NjNFPiA8VTc2NkU+Cis8VTc2M0Y+IDxVNzY2RD4KKzxVNzY0Mj4gPFU3NTk3PgorPFU3NjQ0PiA8VTVBRjY+OzxVNjE5ND4KKzxVNzY0NT4gPFU3NjI0PgorPFU3NjQ2PiA8VTc1RTg+Cis8VTc2NDc+IDxVNzVFQj4KKzxVNzY0OT4gPFU3NjA1PgorPFU3NjUyPiA8VTYxMDg+OzxVNzYwOT4KKzxVNzY1NT4gPFU3NjcwPjs8VTgxQzM+Cis8VTc2NTg+IDxVNzVBMD4KKzxVNzY1RT4gPFU3NjY5PgorPFU3NjVGPiA8VTc2MkE+Cis8VTc2NjE+IDxVNzVGND4KKzxVNzY2Mj4gPFU3NUQyPgorPFU3NjYzPiA8VTc2NkM+Cis8VTc2NjQ+IDxVNzU5Nj4KKzxVNzY2NT4gPFU3NUM3PgorPFU3NjY3PiA8VTc1QUM+Cis8VTc2Njk+IDxVNzY1RT4KKzxVNzY2Qj4gPFU3NjcyPgorPFU3NjZDPiA8VTc2NjM+Cis8VTc2NkQ+IDxVNzYzRj4KKzxVNzY2RT4gPFU3NjNFPgorPFU3NjZGPiA8VTgxREU+Cis8VTc2NzA+IDxVNzVDOD47PFU3NjU1Pjs8VTgxQzM+Cis8VTc2NzE+IDxVNzYyQj4KKzxVNzY3Mj4gPFU3NjZCPgorPFU3Njc0PiA8VTc2NzU+Cis8VTc2NzU+IDxVNzY3ND4KKzxVNzY3QT4gPFU1M0QxPjs8VTYyRTg+OzxVNjRBNT47PFU2Q0ZDPjs8VTZFOEM+OzxVNkY1MT47PFU3NjdDPjs8VTkxNjY+OzxVOTE5Nz47PFU5MUIxPgorPFU3NjdCPiA8VTUwREM+Cis8VTc2N0M+IDxVNTNEMT47PFU3NjdBPgorPFU3NjgxPiA8VTY4OEQ+OzxVNzY4Mj4KKzxVNzY4Mj4gPFU2ODhEPjs8VTc2ODE+Cis8VTc2ODM+IDxVOEM4Qz4KKzxVNzY4OD4gPFU1RTMwPjs8VTVGNTI+OzxVNkI3OD4KKzxVNzY4Qj4gPFU3NjkwPgorPFU3NjhEPiA8VTUzNzM+OzxVNTM3RD4KKzxVNzY4RT4gPFU4Q0NCPgorPFU3NjkwPiA8VTc2OEI+Cis8VTc2OTE+IDxVNzY5QT4KKzxVNzY5QT4gPFU1MUQyPjs8VTc2OTE+Cis8VTc2OUU+IDxVNzZBMT4KKzxVNzZBMT4gPFU3NjlFPgorPFU3NkE1PiA8VTY2QTQ+OzxVNjZBRD4KKzxVNzZBOD4gPFU2NjFGPgorPFU3NkIwPiA8VTc1QjE+OzxVOTc2ND4KKzxVNzZCMT4gPFU3NkJBPgorPFU3NkIyPiA8VTc2Qjg+OzxVNzZCOT4KKzxVNzZCNz4gPFU5RjEzPgorPFU3NkI4PiA8VTc2QjI+OzxVNzZCOT4KKzxVNzZCOT4gPFU3NkIyPjs8VTc2Qjg+Cis8VTc2QkE+IDxVNzZCMT4KKzxVNzZCQz4gPFU5RjEzPgorPFU3NkMxPiA8VTc2Qzg+Cis8VTc2QzM+IDxVNjc2Rj47PFU2ODZFPgorPFU3NkM3PiA8VTc2Q0Q+Cis8VTc2Qzg+IDxVNzZDMT4KKzxVNzZDQj4gPFU3RjNEPjs8VTkyNjI+OzxVOTRCNT4KKzxVNzZDQz4gPFU3ODk3PgorPFU3NkNEPiA8VTc2Qzc+Cis8VTc2Q0Y+IDxVNzZERT4KKzxVNzZEMD4gPFU1ODY5Pjs8VTlFN0Q+Cis8VTc2RDE+IDxVNzZFMz47PFU4QjdDPgorPFU3NkQ2PiA8VTg0NjI+OzxVODRDQj4KKzxVNzZENz4gPFU3NkRDPgorPFU3NkQ4PiA8VTc2RTQ+Cis8VTc2RDk+IDxVN0MyMD4KKzxVNzZEQz4gPFU3NkQ3PgorPFU3NkRFPiA8VTc2Q0Y+Cis8VTc2RTE+IDxVNUMzRD4KKzxVNzZFMz4gPFU3NkQxPjs8VThCN0M+Cis8VTc2RTQ+IDxVNzZEOD4KKzxVNzZFNz4gPFU1MzYyPgorPFU3NkVBPiA8VTgzNjE+OzxVODYyRj4KKzxVNzcwNj4gPFU0RUZGPjs8VTUwMjM+Cis8VTc3MDk+IDxVNzc0Mj4KKzxVNzcwQz4gPFU1M0JGPjs8VTdFMjM+Cis8VTc3MEQ+IDxVNzc5OD4KKzxVNzcwRT4gPFU4OTk2Pjs8VTg5QzY+Cis8VTc3MTg+IDxVNjE0RT4KKzxVNzcxRT4gPFU3NzFGPgorPFU3NzFGPiA8VTc3MUU+Cis8VTc3MjU+IDxVNzcyNj4KKzxVNzcyNj4gPFU3NzI1PgorPFU3NzJCPiA8VTc3MkY+Cis8VTc3MkM+IDxVNzdEMz4KKzxVNzcyRj4gPFU3NzJCPjs8VTc3ODc+Cis8VTc3Mzc+IDxVNzc2MD4KKzxVNzczRT4gPFU0RTUxPjs8VTRGMTc+OzxVODg0Nj4KKzxVNzc0MD4gPFU4NDU3PgorPFU3NzQxPiA8VTc3NUM+Cis8VTc3NDI+IDxVNzcwOT4KKzxVNzc0Rj4gPFU1NkYwPgorPFU3NzUwPiA8VTc3NUU+Cis8VTc3NTE+IDxVNzdCQz4KKzxVNzc1Qz4gPFU3NzQxPgorPFU3NzVFPiA8VTc3NTA+Cis8VTc3NjA+IDxVNzczNz4KKzxVNzc2ND4gPFU3NzY1PgorPFU3NzY1PiA8VTc3NjQ+Cis8VTc3Nzk+IDxVODlBOT4KKzxVNzc3Rj4gPFU1M0UxPjs8VTU4RTE+Cis8VTc3ODU+IDxVNzdDMT4KKzxVNzc4Nj4gPFU3N0I2PgorPFU3Nzg3PiA8VTc3MkY+Cis8VTc3OTI+IDxVNzc5RT4KKzxVNzc5Nj4gPFU3RkYzPgorPFU3Nzk4PiA8VTc3MEQ+Cis8VTc3OUU+IDxVNzc5Mj4KKzxVNzdBMD4gPFU3N0FBPgorPFU3N0EyPiA8VTc3RDI+Cis8VTc3QTk+IDxVNzdEQT4KKzxVNzdBQT4gPFU3N0EwPgorPFU3N0FEPiA8VTRFODY+OzxVNjZCOD4KKzxVNzdCMD4gPFU3N0Q5PgorPFU3N0I2PiA8VTc3ODY+Cis8VTc3QkM+IDxVNzc1MT4KKzxVNzdCRT4gPFU2NkNDPjs8VTcwQTQ+OzxVNzE2Nz47PFU3MUYzPgorPFU3N0MxPiA8VTc3ODU+Cis8VTc3Qzc+IDxVODQ5OT4KKzxVNzdEMj4gPFU3N0EyPgorPFU3N0QzPiA8VTc3MkM+Cis8VTc3RDk+IDxVNzdCMD4KKzxVNzdEQT4gPFU3N0E5PgorPFU3N0UyPiA8VTdCMzY+Cis8VTc3RTQ+IDxVNzdFNz47PFU4QTIwPgorPFU3N0U2PiA8VTRGQUY+Cis8VTc3RTc+IDxVNzdFND47PFU4QTIwPgorPFU3N0VCPiA8VTc3RUY+Cis8VTc3RUY+IDxVNzdFQj4KKzxVNzdGND4gPFU2OTE3Pjs8VTc4ODc+OzxVNzhGOD4KKzxVNzdGNj4gPFU3OEVGPgorPFU3N0ZFPiA8VTc5MkM+Cis8VTc3RkY+IDxVNzgzRj47PFU3OTI2Pjs8VTkyNzE+OzxVOTJEQj47PFU5NDVCPgorPFU3ODAwPiA8VTc4QUQ+Cis8VTc4MDE+IDxVNzhCQz4KKzxVNzgxMj4gPFU3OEM3PgorPFU3ODE1PiA8VTc4OEU+Cis8VTc4MTY+IDxVNTg3Qz47PFU3NTBFPjs8VTc4REE+Cis8VTc4MTc+IDxVNzg2OD4KKzxVNzgxQT4gPFU3ODZGPgorPFU3ODFDPiA8VTc4Qjg+Cis8VTc4MjU+IDxVNTM4RT4KKzxVNzgyNz4gPFU3OEFBPgorPFU3ODJDPiA8VTc4RDY+Cis8VTc4MzI+IDxVNzBBRT47PFU3OTFGPjs8VTc5MkU+Cis8VTc4M0E+IDxVNzkyQT4KKzxVNzgzQj4gPFU3OTMxPgorPFU3ODNFPiA8VTc5MkI+Cis8VTc4M0Y+IDxVNzdGRj47PFU3OTI2Pjs8VTkyNzE+OzxVOTJEQj47PFU5NDVCPgorPFU3ODQwPiA8VTc5MEU+Cis8VTc4NDE+IDxVNzg1Qz4KKzxVNzg0Mz4gPFU2NzMxPgorPFU3ODU1PiA8VTc4QTk+Cis8VTc4NTY+IDxVNzg2ND4KKzxVNzg1Nz4gPFU3OEZEPgorPFU3ODU5PiA8VTc4RDE+Cis8VTc4NUE+IDxVNzkwND4KKzxVNzg1Qz4gPFU3ODQxPgorPFU3ODY0PiA8VTc4NTY+Cis8VTc4Njg+IDxVNzgxNz4KKzxVNzg2QT4gPFU3OTEyPgorPFU3ODZFPiA8VTU3QzY+OzxVNzhCQT47PFU3OEJCPgorPFU3ODZGPiA8VTc4MUE+Cis8VTc4NzU+IDxVNzhFMD4KKzxVNzg3Nz4gPFU5RTc4Pjs8VTlFN0I+OzxVOUU3Qz4KKzxVNzg4MT4gPFU2OENBPjs8VTY4Q0I+OzxVNkFCMT47PFU2QUMwPgorPFU3ODg3PiA8VTY5MTc+OzxVNzdGND4KKzxVNzg4RD4gPFU3OTE5PgorPFU3ODhFPiA8VTc4MTU+Cis8VTc4OTQ+IDxVNzNGNz4KKzxVNzg5NT4gPFU1N0ZDPjs8VTVEMEU+OzxVNUQ1Qz4KKzxVNzg5Nz4gPFU1N0U2Pjs8VTY5MDA+OzxVNzZDQz4KKzxVNzg5Qj4gPFU3OEU3PgorPFU3ODlDPiA8VTc4RTM+Cis8VTc4OUU+IDxVNUNBOT47PFU1RDUyPjs8VTVENTM+Cis8VTc4OUY+IDxVOTdBOD4KKzxVNzhBOT4gPFU3ODU1PgorPFU3OEFBPiA8VTc4Mjc+Cis8VTc4QUQ+IDxVNzgwMD4KKzxVNzhBRj4gPFU3NDU5PgorPFU3OEIwPiA8VTYzQkQ+OzxVOEUyQj4KKzxVNzhCMT4gPFU5RTc4Pjs8VTlFN0M+Cis8VTc4Qjg+IDxVNzgxQz4KKzxVNzhCQT4gPFU3ODZFPjs8VTc4QkI+Cis8VTc4QkI+IDxVNzg2RT47PFU3OEJBPgorPFU3OEJDPiA8VTc4MDE+Cis8VTc4QzE+IDxVNzkyMD4KKzxVNzhDNz4gPFU3ODEyPgorPFU3OEQxPiA8VTc4NTk+Cis8VTc4RDI+IDxVOTY5NT4KKzxVNzhEND4gPFU1Mzg3PgorPFU3OEQ2PiA8VTc4MkM+Cis8VTc4REE+IDxVNTg3Qz47PFU3NTBFPjs8VTc4MTY+Cis8VTc4RTA+IDxVNzg3NT4KKzxVNzhFMz4gPFU3ODlDPgorPFU3OEU3PiA8VTc4OUI+Cis8VTc4RUY+IDxVNzdGNj4KKzxVNzhGNz4gPFU3MUQwPgorPFU3OEY4PiA8VTc3RjQ+Cis8VTc4RkE+IDxVOUVDND4KKzxVNzhGRD4gPFU3ODU3PgorPFU3OTAwPiA8VTZEQTc+Cis8VTc5MDQ+IDxVNzg1QT4KKzxVNzkwNj4gPFU5NjY5Pjs8VTk2N0E+OzxVOTZBQT4KKzxVNzkwOD4gPFU1NzYwPjs8VTU4OUM+Cis8VTc5MEU+IDxVNzg0MD4KKzxVNzkxMj4gPFU3ODZBPgorPFU3OTE5PiA8VTc4OEQ+Cis8VTc5MUY+IDxVNzBBRT47PFU3ODMyPjs8VTc5MkU+Cis8VTc5MjA+IDxVNzhDMT4KKzxVNzkyNj4gPFU3N0ZGPjs8VTc4M0Y+OzxVOTI3MT47PFU5MkRCPjs8VTk0NUI+Cis8VTc5MkE+IDxVNzgzQT4KKzxVNzkyQj4gPFU3ODNFPgorPFU3OTJDPiA8VTc3RkU+Cis8VTc5MkU+IDxVNzBBRT47PFU3ODMyPjs8VTc5MUY+Cis8VTc5MzE+IDxVNzgzQj4KKzxVNzkzQT4gPFU3OTNCPgorPFU3OTNCPiA8VTc5M0E+Cis8VTc5M0M+IDxVNzlBRT4KKzxVNzkzRj4gPFU3OUI0PgorPFU3OTQwPiA8VTc5QTk+Cis8VTc5NDM+IDxVNzlBMT4KKzxVNzk0NT4gPFU1OTk2PgorPFU3OTRFPiA8VTc5OTU+Cis8VTc5NTU+IDxVNzlEOD4KKzxVNzk2Mj4gPFU3OUIwPgorPFU3OTZGPiA8VTc5OEU+Cis8VTc5NzU+IDxVNjM0Nj4KKzxVNzk3Nz4gPFU3OUIxPgorPFU3OTc4PiA8VTc5OEQ+Cis8VTc5N0Y+IDxVNzk4ND4KKzxVNzk4MD4gPFU3QTFGPgorPFU3OTg0PiA8VTc5N0Y+Cis8VTc5ODU+IDxVNzlBQT4KKzxVNzk4RD4gPFU3OTc4PgorPFU3OThFPiA8VTc5NkY+Cis8VTc5OTU+IDxVNzk0RT4KKzxVNzlBMT4gPFU3OTQzPgorPFU3OUE2PiA8VTVGQTE+Cis8VTc5QTk+IDxVNzk0MD4KKzxVNzlBQT4gPFU3OTg1PgorPFU3OUFFPiA8VTc5M0M+Cis8VTc5QjA+IDxVNzk2Mj4KKzxVNzlCMT4gPFU3OTc3PgorPFU3OUI0PiA8VTc5M0Y+Cis8VTc5QkI+IDxVOTZFMj4KKzxVNzlCRj4gPFU3OUMzPgorPFU3OUMxPiA8VTUzQjY+Cis8VTc5QzM+IDxVNzlCRj4KKzxVNzlDNj4gPFU3QTA4PgorPFU3OUM3PiA8VTgyN0E+OzxVODJCOD47PFU4NDFGPjs8VTg0RkE+OzxVODVERD4KKzxVNzlDOD4gPFU3QzdDPgorPFU3OUNBPiA8VTVFNzQ+Cis8VTc5Q0I+IDxVNzlDQz47PFU3QTUwPjs8VTk3QTY+OzxVOTdBNz47PFU5RjlEPgorPFU3OUNDPiA8VTc5Q0I+OzxVN0E1MD47PFU5RjlEPgorPFU3OUNEPiA8VTdBMkU+Cis8VTc5RDA+IDxVODAxOD4KKzxVNzlEND4gPFU3QTA5Pjs8VTdDQjM+Cis8VTc5RDU+IDxVN0M4Mz4KKzxVNzlENj4gPFU1M0VBPgorPFU3OUQ3PiA8VTk4RUI+Cis8VTc5RDg+IDxVNzk1NT4KKzxVNzlFRj4gPFU3QTREPgorPFU3OUYwPiA8VTdBMzE+OzxVN0E2QT4KKzxVNzlGOD4gPFU3QTJEPgorPFU3OUZEPiA8VTdBNjI+Cis8VTc5RkU+IDxVN0E2MD4KKzxVN0EwMT4gPFU3QTNFPjs8VTdBM0Y+OzxVODVDMT47PFU4NUYzPgorPFU3QTA1PiA8VTdBMEU+Cis8VTdBMDY+IDxVN0E1RT47PFU3QTZEPgorPFU3QTA4PiA8VTc5QzY+Cis8VTdBMDk+IDxVNzlEND47PFU3Q0IzPgorPFU3QTBFPiA8VTdBMDU+Cis8VTdBMTc+IDxVN0NCQT47PFU4NUFEPgorPFU3QTFBPiA8VTdBM0E+OzxVN0E0OT4KKzxVN0ExQz4gPFU2OEYxPgorPFU3QTFGPiA8VTc5ODA+Cis8VTdBMjM+IDxVN0E0Qz4KKzxVN0EyRD4gPFU3OUY4PgorPFU3QTJFPiA8VTc5Q0Q+Cis8VTdBMzE+IDxVNzlGMD47PFU3QTZBPgorPFU3QTMyPiA8VTdBM0I+Cis8VTdBMzM+IDxVN0E0Rj47PFU3QTY5PgorPFU3QTNBPiA8VTdBMUE+OzxVN0E0OT4KKzxVN0EzQj4gPFU3QTMyPgorPFU3QTNFPiA8VTdBMDE+OzxVN0EzRj47PFU4NUMxPjs8VTg1RjM+Cis8VTdBM0Y+IDxVN0EwMT47PFU3QTNFPjs8VTg1QzE+OzxVODVGMz4KKzxVN0E0MD4gPFU3Q0QzPjs8VThDMzc+Cis8VTdBNDI+IDxVN0E1Nz4KKzxVN0E0NT4gPFU3Qzg3Pjs8VTdDRTA+Cis8VTdBNDk+IDxVN0ExQT47PFU3QTNBPgorPFU3QTRDPiA8VTc1MjY+OzxVN0EyMz47PFU4MkNGPjs8VTg2MDc+Cis8VTdBNEQ+IDxVNzlFRj4KKzxVN0E0RT4gPFU5ODM0Pjs8VTk4OTY+Cis8VTdBNEY+IDxVN0EzMz47PFU3QTY5PgorPFU3QTUwPiA8VTc5Q0I+OzxVNzlDQz47PFU5RjlEPgorPFU3QTUxPiA8VTdBNjE+Cis8VTdBNTc+IDxVN0E0Mj4KKzxVN0E1RT4gPFU3QTA2Pjs8VTdBNkQ+Cis8VTdBNjA+IDxVNzlGRT4KKzxVN0E2MT4gPFU3QTUxPgorPFU3QTYyPiA8VTc5RkQ+Cis8VTdBNjM+IDxVN0E3MD4KKzxVN0E2OD4gPFU5ODM5Pjs8VTk4M0E+OzxVOTgzRD47PFU5ODkzPgorPFU3QTY5PiA8VTdBMzM+OzxVN0E0Rj4KKzxVN0E2QT4gPFU3OUYwPjs8VTdBMzE+Cis8VTdBNkI+IDxVODNCNz4KKzxVN0E2RD4gPFU3QTA2Pjs8VTdBNUU+Cis8VTdBNzA+IDxVN0E2Mz4KKzxVN0E3Nz4gPFU3QUFFPjs8VTdBQzY+Cis8VTdBNzk+IDxVNUI4Nj4KKzxVN0E3RD4gPFU5NjMxPgorPFU3QTgxPiA8VTVCOEE+Cis8VTdBODM+IDxVN0FDQT4KKzxVN0E4QT4gPFU3QUIzPgorPFU3QThEPiA8VTdBQzU+Cis8VTdBOEU+IDxVN0FCNT4KKzxVN0E5MT4gPFU3QUFGPjs8VTdBQjA+Cis8VTdBOTM+IDxVNzI0RT47PFU3MjU1Pjs8VTdBOTc+OzxVN0FCQj4KKzxVN0E5Nz4gPFU3MjRFPjs8VTcyNTU+OzxVN0E5Mz47PFU3QUJCPgorPFU3QTlDPiA8VTdBQzQ+Cis8VTdBOUQ+IDxVN0FBOT4KKzxVN0FBNT4gPFU3QUJBPgorPFU3QUE2PiA8VTdBQzc+Cis8VTdBQTk+IDxVN0E5RD4KKzxVN0FBQT4gPFU2RDNDPgorPFU3QUFDPiA8VThFMzA+Cis8VTdBQUQ+IDxVNUJFMD47PFU3QUI2PgorPFU3QUFFPiA8VTdBNzc+OzxVN0FDNj4KKzxVN0FBRj4gPFU3QTkxPjs8VTdBQjA+Cis8VTdBQjA+IDxVN0E5MT47PFU3QUFGPgorPFU3QUIzPiA8VTdBOEE+Cis8VTdBQjU+IDxVN0E4RT4KKzxVN0FCNj4gPFU1QkUwPjs8VTdBQUQ+Cis8VTdBQkE+IDxVN0FBNT4KKzxVN0FCQj4gPFU3MjRFPjs8VTcyNTU+OzxVN0E5Mz47PFU3QTk3PgorPFU3QUMzPiA8VTcwNzY+OzxVN0FDOD4KKzxVN0FDND4gPFU3QTlDPgorPFU3QUM1PiA8VTdBOEQ+Cis8VTdBQzY+IDxVN0E3Nz47PFU3QUFFPgorPFU3QUM3PiA8VTdBQTY+Cis8VTdBQzg+IDxVNzA3Nj47PFU3QUMzPgorPFU3QUNBPiA8VTdBODM+Cis8VTdBRDI+IDxVNTk0Nz4KKzxVN0FENj4gPFU3QUVBPjs8VThDNEU+Cis8VTdBREE+IDxVNEYyQj4KKzxVN0FEQz4gPFU5RjhEPjs8VTlGOTI+Cis8VTdBREQ+IDxVNEUyNj47PFU1MEExPjs8VTVFNzY+Cis8VTdBREU+IDxVN0FGNj47PFU3QUY4PgorPFU3QUUyPiA8VTRGREY+Cis8VTdBRTk+IDxVOEFCQz47PFU4QzBBPgorPFU3QUVBPiA8VTdBRDY+OzxVOEM0RT4KKzxVN0FGNj4gPFU3QURFPjs8VTdBRjg+Cis8VTdBRjg+IDxVN0FERT47PFU3QUY2PgorPFU3QUZFPiA8VTdCRUE+Cis8VTdCMDM+IDxVN0JFND4KKzxVN0IwQj4gPFU3QjREPjs8VTdCQjA+Cis8VTdCMTE+IDxVNTE3Mz47PFU1NEIyPgorPFU3QjE0PiA8VTdCNDY+Cis8VTdCMTU+IDxVN0I2Nz4KKzxVN0IxRj4gPFU3QjhEPgorPFU3QjI3PiA8VTUxOEE+OzxVNTE4Qz47PFU2NTQ3Pjs8VTdCNTY+OzxVN0I1RT47PFU3QkEzPgorPFU3QjI4PiA8VTRGNTM+Cis8VTdCMzU+IDxVN0JDND47PFU4MzAzPgorPFU3QjM2PiA8VTc3RTI+Cis8VTdCM0E+IDxVNzI0Qj47PFU3QjhCPgorPFU3QjNDPiA8VTdCRUQ+OzxVN0M2MD4KKzxVN0IzRT4gPFU3QzY5PgorPFU3QjQ1PiA8VTdCQjI+Cis8VTdCNDY+IDxVN0IxND4KKzxVN0I0Qj4gPFU4OUQ0PgorPFU3QjREPiA8VTdCMEI+OzxVN0JCMD4KKzxVN0I0Rj4gPFU2ODMwPjs8VTZBNDM+Cis8VTdCNTA+IDxVN0I3QT4KKzxVN0I1MT4gPFU3QkM5PgorPFU3QjU2PiA8VTY1NDc+OzxVN0IyNz47PFU3QjVFPjs8VTdCQTM+Cis8VTdCNTg+IDxVN0MwNj4KKzxVN0I1OT4gPFU3QjgyPgorPFU3QjVBPiA8VTdCRjM+Cis8VTdCNUI+IDxVN0JFOT4KKzxVN0I1Qz4gPFU3QzM5PgorPFU3QjVEPiA8VTdCOEY+Cis8VTdCNUU+IDxVNjU0Nz47PFU3QjI3Pjs8VTdCNTY+OzxVN0JBMz4KKzxVN0I2Nz4gPFU3QjE1PgorPFU3QjcxPiA8VTdCRTA+Cis8VTdCNzk+IDxVN0M0Qz4KKzxVN0I3QT4gPFU3QjUwPgorPFU3QjdDPiA8VTdCRDQ+Cis8VTdCN0U+IDxVN0MzRD47PFU3QzU2Pjs8VTdDNjQ+Cis8VTdCN0Y+IDxVN0JFMD4KKzxVN0I4MD4gPFU3QzIxPgorPFU3QjgyPiA8VTdCNTk+Cis8VTdCODY+IDxVN0JFNj4KKzxVN0I4Nz4gPFUzMEY2Pjs8VTRFMkE+OzxVNTAwQj4KKzxVN0I4Qj4gPFU3QjNBPgorPFU3QjhEPiA8VTdCMUY+Cis8VTdCOEY+IDxVN0I1RD4KKzxVN0I5Mj4gPFU1RTFBPgorPFU3QjkzPiA8VTdDNTk+Cis8VTdCOUE+IDxVNTI4ND4KKzxVN0JBMz4gPFU2NTQ3Pjs8VTdCMjc+OzxVN0I1Nj47PFU3QjVFPgorPFU3QkE2PiA8VTdDMDA+OzxVODUzNj4KKzxVN0JBNz4gPFU3QkNCPgorPFU3QkE4PiA8VTdDNUM+Cis8VTdCQTk+IDxVN0M2RT4KKzxVN0JBQT4gPFU3QzFFPgorPFU3QkFCPiA8VTdDMkI+Cis8VTdCQUM+IDxVN0JEQj4KKzxVN0JCMD4gPFU3QjBCPjs8VTdCNEQ+Cis8VTdCQjI+IDxVN0I0NT4KKzxVN0JDMD4gPFU4MjgyPgorPFU3QkM0PiA8VTdCMzU+OzxVODMwMz4KKzxVN0JDNj4gPFU4NDgzPgorPFU3QkM5PiA8VTdCNTE+Cis8VTdCQ0I+IDxVNTMyNz47PFU3QkE3PgorPFU3QkNGPiA8VTVENEM+Cis8VTdCRDE+IDxVN0MyMz4KKzxVN0JEMz4gPFU3QzBEPgorPFU3QkQ0PiA8VTdCN0M+Cis8VTdCRDc+IDxVN0M0Nj4KKzxVN0JEQj4gPFU3QkFDPgorPFU3QkUwPiA8VTdCNzE+OzxVN0I3Rj4KKzxVN0JFMT4gPFU3QzEyPgorPFU3QkU0PiA8VTdCMDM+Cis8VTdCRTY+IDxVN0I4Nj4KKzxVN0JFOT4gPFU3QjVCPjs8VTdDMDE+OzxVN0M2RD4KKzxVN0JFQT4gPFU3QUZFPgorPFU3QkVEPiA8VTdCM0M+OzxVN0M2MD4KKzxVN0JFRT4gPFU3QzQzPgorPFU3QkVGPiA8VTdDNUI+Cis8VTdCRjE+IDxVN0M2Qz4KKzxVN0JGMj4gPFU1RjU3PgorPFU3QkYzPiA8VTdCNUE+Cis8VTdDMDA+IDxVN0JBNj47PFU4NTM2PgorPFU3QzAxPiA8VTdCRTk+OzxVN0M2RD4KKzxVN0MwND4gPFU2Q0FBPjs8VTZFRUM+Cis8VTdDMDY+IDxVN0I1OD4KKzxVN0MwRD4gPFU3QkQzPgorPFU3QzExPiA8VTdDMTQ+OzxVODREMT4KKzxVN0MxMj4gPFU3QkUxPgorPFU3QzE0PiA8VTdDMTE+OzxVODREMT4KKzxVN0MxNj4gPFU3QzZBPgorPFU3QzE3PiA8VTY4ODE+OzxVNkExMT4KKzxVN0MxOD4gPFU3QzJCPgorPFU3QzFFPiA8VTdCQUE+Cis8VTdDMjA+IDxVNzZEOT4KKzxVN0MyMT4gPFU3QjgwPgorPFU3QzIzPiA8VTdCRDE+Cis8VTdDMkE+IDxVNTE0Mj4KKzxVN0MyQj4gPFU3QkFCPjs8VTdDMTg+Cis8VTdDMzE+IDxVNjVENz47PFU3QzRGPgorPFU3QzM3PiA8VTZBOTA+Cis8VTdDMzk+IDxVN0I1Qz4KKzxVN0MzRD4gPFU3QjdFPgorPFU3QzNFPiA8VTVFMTg+Cis8VTdDNDA+IDxVN0M1Mj47PFU3QzU1PgorPFU3QzQxPiA8VTdDNUY+Cis8VTdDNDM+IDxVN0JFRT4KKzxVN0M0Nj4gPFU3QkQ3PgorPFU3QzRDPiA8VTdCNzk+Cis8VTdDNEY+IDxVNjVENz47PFU3QzMxPgorPFU3QzUwPiA8VTdDNTg+Cis8VTdDNTI+IDxVN0M0MD4KKzxVN0M1ND4gPFU4NUFFPjs8VTg1RUE+Cis8VTdDNTU+IDxVN0M0MD4KKzxVN0M1Nj4gPFU3QjdFPjs8VTdDNjQ+Cis8VTdDNTg+IDxVN0M1MD47PFU4NUU0PgorPFU3QzU5PiA8VTdCOTM+Cis8VTdDNUI+IDxVN0JFRj4KKzxVN0M1Qz4gPFU3QkE4PgorPFU3QzVGPiA8VTdDNDE+Cis8VTdDNjA+IDxVN0IzQz47PFU3QkVEPgorPFU3QzY0PiA8VTdCN0U+OzxVN0M1Nj4KKzxVN0M2OT4gPFU3QjNFPgorPFU3QzZBPiA8VTdDMTY+Cis8VTdDNkM+IDxVN0JGMT4KKzxVN0M2RD4gPFU3QkU5Pjs8VTdDMDE+Cis8VTdDNkU+IDxVN0JBOT4KKzxVN0M3Mj4gPFU1NDAxPjs8VTlGQTU+Cis8VTdDNzQ+IDxVN0NGND4KKzxVN0M3Qj4gPFU5ODVFPgorPFU3QzdDPiA8VTc5Qzg+Cis8VTdDODM+IDxVNzlENT4KKzxVN0M4Nz4gPFU3QTQ1Pjs8VTdDRTA+Cis8VTdDOEI+IDxVN0NCOT4KKzxVN0M5Nz4gPFU5RUE0PgorPFU3Qzk4PiA8VTlFQ0Y+Cis8VTdDOUI+IDxVODA4Mz47PFU4MDg1PgorPFU3QzlDPiA8VTdDRjY+Cis8VTdDOUQ+IDxVN0NGMj4KKzxVN0NBND4gPFU3Q0I1PgorPFU3Q0E1PiA8VTRGRkM+OzxVOUIzQj4KKzxVN0NBNj4gPFU3MUQwPgorPFU3Q0E3PiA8VTU5ODY+OzxVNTk5RD47PFU1QTI0Pjs8VTdDREE+Cis8VTdDQUE+IDxVN0NERT4KKzxVN0NBQz4gPFU2NkYyPjs8VTlFQUY+OzxVOUVCND47PFU5RUI5PgorPFU3Q0FFPiA8VTdDRTc+Cis8VTdDQjM+IDxVNzlEND47PFU3QTA5PgorPFU3Q0I1PiA8VTdDQTQ+Cis8VTdDQjk+IDxVN0M4Qj4KKzxVN0NCQT4gPFU3QTE3PgorPFU3Q0JEPiA8VTdDQzk+Cis8VTdDQzE+IDxVN0NERD4KKzxVN0NDNj4gPFU5NzYyPjs8VTlFQUE+OzxVOUVBQj47PFU5RUI1Pjs8VTlFQkE+Cis8VTdDQzc+IDxVOTkzMT4KKzxVN0NDOT4gPFU3Q0JEPgorPFU3Q0NBPiA8VTk5MkM+Cis8VTdDRDM+IDxVN0E0MD47PFU4QzM3PgorPFU3Q0Q1PiA8VTk5M0I+Cis8VTdDREE+IDxVNTk4Nj47PFU1OTlEPjs8VTVBMjQ+OzxVN0NBNz4KKzxVN0NERD4gPFU3Q0MxPgorPFU3Q0RFPiA8VTdDQUE+Cis8VTdDRTA+IDxVN0E0NT47PFU3Qzg3PgorPFU3Q0U2PiA8VTk5NEU+Cis8VTdDRTc+IDxVN0NBRT4KKzxVN0NGMD4gPFU1NkUyPjs8VTU2RTM+Cis8VTdDRjI+IDxVN0M5RD4KKzxVN0NGND4gPFU3Qzc0PgorPFU3Q0Y2PiA8VTdDOUM+Cis8VTdDRjg+IDxVNEUxRD47PFU3Q0Y5Pjs8VTdENzI+OzxVN0U5Rj4KKzxVN0NGOT4gPFU3Q0Y4Pjs8VTdFOUY+Cis8VTdDRkE+IDxVN0NGRT4KKzxVN0NGQj4gPFU0RkMyPjs8VTdFMTg+OzxVN0U0Qj47PFU3RTZCPgorPFU3Q0ZDPiA8VTUyOUY+OzxVN0NGRj4KKzxVN0NGRT4gPFU3Q0ZBPjs8VTdFQTA+Cis8VTdDRkY+IDxVNTI5Rj47PFU3Q0ZDPgorPFU3RDAwPiA8VTdFQUE+Cis8VTdEMDI+IDxVN0VBMz4KKzxVN0QwND4gPFU3RUE2PgorPFU3RDA1PiA8VTdFQTI+Cis8VTdEMDY+IDxVN0VBMT4KKzxVN0QwNz4gPFU3RUE1PgorPFU3RDA4PiA8VTdFQTg+Cis8VTdEMDk+IDxVN0VBQj4KKzxVN0QwQj4gPFU3RUI5PgorPFU3RDBEPiA8VTdFQjM+Cis8VTdEMTA+IDxVN0VCRD4KKzxVN0QxMz4gPFU3RUJFPgorPFU3RDE0PiA8VTdFQUY+Cis8VTdEMTU+IDxVN0VCMD4KKzxVN0QxNj4gPFU3RUJDPgorPFU3RDE3PiA8VTdFQjE+Cis8VTdEMTg+IDxVN0Q4Qj47PFU3RUFFPgorPFU3RDE5PiA8VTVFMEI+OzxVN0VCOD4KKzxVN0QxQT4gPFU3RUE3PgorPFU3RDFCPiA8VTdFQjc+Cis8VTdEMUM+IDxVN0VBRD4KKzxVN0QxRD4gPFU3RDREPjs8VTdFQjQ+Cis8VTdEMjE+IDxVN0VCQT4KKzxVN0QyMz4gPFU3REI3PgorPFU3RDI1PiA8VTdEMkU+Cis8VTdEMjc+IDxVN0RDQT4KKzxVN0QyQz4gPFU3REEyPjs8VTdFRjg+Cis8VTdEMkU+IDxVNjI0RT47PFU3RDI1PgorPFU3RDJGPiA8VTdFMzI+OzxVN0U4RD47PFU3RTlEPjs8VTdGMjc+Cis8VTdEMzA+IDxVN0VDNj4KKzxVN0QzMT4gPFU3RUMyPgorPFU3RDMyPiA8VTdFQzE+Cis8VTdEMzM+IDxVN0VDNT4KKzxVN0QzNT4gPFU3RUJCPgorPFU3RDM5PiA8VTdFQ0Q+Cis8VTdEM0E+IDxVN0VDMD4KKzxVN0QzQz4gPFU3RUNCPgorPFU3RDNGPiA8VTdFRDA+Cis8VTdENDA+IDxVN0VDQz4KKzxVN0Q0Mj4gPFU3RUM4PgorPFU3RDQzPiA8VTVGMjY+Cis8VTdENDQ+IDxVN0VDND4KKzxVN0Q0NT4gPFU3RDk3PgorPFU3RDQ2PiA8VTdFQ0E+OzxVOTc3RD4KKzxVN0Q0OD4gPFU1RTE1PgorPFU3RDRCPiA8VTdFQTk+Cis8VTdENEM+IDxVN0Q5Mz47PFU3RUNGPgorPFU3RDREPiA8VTdEMUQ+Cis8VTdENEU+IDxVN0VENz4KKzxVN0Q0Rj4gPFU3RUMxPgorPFU3RDUwPiA8VTdFRDM+Cis8VTdENTU+IDxVNjRBNz47PFU3RDc2Pjs8VTdFREQ+Cis8VTdENTY+IDxVN0U4QT4KKzxVN0Q1QT4gPFU3REVBPgorPFU3RDVCPiA8VTdFMjc+OzxVN0VFNj4KKzxVN0Q1RD4gPFU3RUQ0Pjs8VTg4QjQ+Cis8VTdENUU+IDxVN0VERT4KKzxVN0Q2MT4gPFU3RURDPgorPFU3RDYyPiA8VTdFREE+Cis8VTdENjQ+IDxVN0RBQj47PFU3RERBPjs8VTdFQkY+OzxVN0YxMD4KKzxVN0Q2NT4gPFU4MzJGPgorPFU3RDY2PiA8VTdFRDk+Cis8VTdENjg+IDxVN0VEMj4KKzxVN0Q3MD4gPFU3RUQ2PgorPFU3RDcxPiA8VTdEODI+OzxVN0VERj4KKzxVN0Q3Mj4gPFU0RTFEPjs8VTdDRjg+Cis8VTdENzM+IDxVN0VEQj4KKzxVN0Q3NT4gPFU3RTZBPjs8VTdFRDg+Cis8VTdENzY+IDxVNjRBNz47PFU3RDU1Pjs8VTdFREQ+Cis8VTdENzc+IDxVN0UzNj4KKzxVN0Q3OD4gPFU3RTZEPjs8VTg4MTI+Cis8VTdENzk+IDxVN0VFMj4KKzxVN0Q4MT4gPFU3RUQxPgorPFU3RDgyPiA8VTdENzE+OzxVN0VERj4KKzxVN0Q4Mz4gPFU3RUUxPgorPFU3RDg2PiA8VTdFRTA+Cis8VTdEODg+IDxVN0VFOD4KKzxVN0Q4OT4gPFU3RUUzPgorPFU3RDhCPiA8VTdEMTg+Cis8VTdEOEM+IDxVN0VFND4KKzxVN0Q4Rj4gPFU3RUU1PgorPFU3RDkxPiA8VTYzNDY+OzxVNjhCMT4KKzxVN0Q5Mz4gPFU3RDRDPjs8VTdFQ0Y+Cis8VTdEOTc+IDxVN0Q0NT4KKzxVN0Q5OT4gPFU3RTdDPjs8VTdFRTc+Cis8VTdEOUE+IDxVN0U4Qz47PFU3RUVEPjs8VThDRTE+Cis8VTdEOUM+IDxVN0VGQz4KKzxVN0Q5RT4gPFU3RjBEPgorPFU3REEwPiA8VTdERDE+OzxVN0VGRj4KKzxVN0RBMj4gPFU3RDJDPjs8VTdFRjg+Cis8VTdEQTM+IDxVN0VGQj4KKzxVN0RBQj4gPFU3RDY0Pjs8VTdEREE+OzxVN0VCRj47PFU3RjEwPgorPFU3REFDPiA8VTdFRjY+Cis8VTdEQUQ+IDxVN0VGND4KKzxVN0RBRj4gPFU3RUY5PgorPFU3REIwPiA8VTdFRkU+Cis8VTdEQjE+IDxVN0VCMj4KKzxVN0RCMj4gPFU3RjUxPgorPFU3REIzPiA8VTdFNDM+OzxVN0VGNz4KKzxVN0RCND4gPFU1M0Q1Pjs8VTdGMDA+Cis8VTdEQjU+IDxVNUY2OT4KKzxVN0RCNz4gPFU3RDIzPgorPFU3REI4PiA8VTdFQjY+Cis8VTdEQjk+IDxVN0VGQT4KKzxVN0RCQT4gPFU3RUVFPgorPFU3REJCPiA8VTdFRkQ+Cis8VTdEQkQ+IDxVN0U1Qj47PFU3RUYwPgorPFU3REJFPiA8VTdFRUI+Cis8VTdEQkY+IDxVN0VGNT4KKzxVN0RDND4gPFU3RUYyPgorPFU3REM3PiA8VTdGMDE+Cis8VTdEQ0E+IDxVN0QyNz4KKzxVN0RDQj4gPFU3RUVGPgorPFU3RENEPiA8VTdERTE+Cis8VTdEQ0Y+IDxVNjAzQj47PFU2NDYwPjs8VTdERUI+OzxVN0UzRD4KKzxVN0REMD4gPFU3RTQxPgorPFU3REQxPiA8VTdEQTA+OzxVN0VGRj4KKzxVN0REMj4gPFU3REQ2Pjs8VTdFRUE+Cis8VTdERDQ+IDxVN0VGMT4KKzxVN0RENT4gPFU3RTgzPgorPFU3REQ2PiA8VTdERDI+OzxVN0VFQT4KKzxVN0RENz4gPFU3RjAzPgorPFU3REQ4PiA8VTdGMDQ+Cis8VTdERDk+IDxVN0YwMj4KKzxVN0REQT4gPFU3RDY0Pjs8VTdEQUI+OzxVN0VCRj47PFU3RjEwPgorPFU3RERDPiA8VTdFRjU+Cis8VTdEREQ+IDxVN0YwOT4KKzxVN0RERT4gPFU3RjBFPgorPFU3REUwPiA8VTdGMTQ+Cis8VTdERTE+IDxVN0RDRD47PFU3RjE3PgorPFU3REUzPiA8VTdFMDE+OzxVN0YxOD4KKzxVN0RFNT4gPFU4OTEzPgorPFU3REU2PiA8VTdGMEM+Cis8VTdERTg+IDxVN0YxNj4KKzxVN0RFOT4gPFU3RjEzPgorPFU3REVBPiA8VTdENUE+Cis8VTdERUI+IDxVNjAzQj47PFU2NDYwPjs8VTdEQ0Y+OzxVN0UzRD4KKzxVN0RFQz4gPFU3RjA1PgorPFU3REVGPiA8VTdFQUM+Cis8VTdERjE+IDxVN0YxMT4KKzxVN0RGMj4gPFU3RjA4PgorPFU3REY0PiA8VTdFQzM+Cis8VTdERjY+IDxVN0YwRj4KKzxVN0RGOT4gPFU3RjA3PgorPFU3REZCPiA8VTgxRjQ+Cis8VTdERkM+IDxVN0UxNT47PFU3RjBBPgorPFU3RTAxPiA8VTdERTM+OzxVN0YxOD4KKzxVN0UwND4gPFU3RTY5Pjs8VTdFRjM+Cis8VTdFMDg+IDxVODQyNj4KKzxVN0UwOT4gPFU3RjE5PgorPFU3RTBBPiA8VTdGMjI+Cis8VTdFMEI+IDxVN0YxMj4KKzxVN0UxMD4gPFU3RUM5PgorPFU3RTExPiA8VTdGMjM+Cis8VTdFMTU+IDxVN0RGQz47PFU3RjBBPgorPFU3RTE3PiA8VTdGMUU+Cis8VTdFMTg+IDxVN0NGQj47PFU3RTRCPjs8VTdFNkI+Cis8VTdFMUI+IDxVN0YxQT4KKzxVN0UxRD4gPFU3RjFDPgorPFU3RTFFPiA8VTdGMUY+Cis8VTdFMUY+IDxVN0YxQj4KKzxVN0UyMz4gPFU1M0JGPjs8VTc3MEM+Cis8VTdFMjY+IDxVN0UzMT47PFU3RUI1PgorPFU3RTI3PiA8VTdENUI+OzxVN0VFNj4KKzxVN0UyOD4gPFU1RTRDPgorPFU3RTJCPiA8VTdGMUQ+Cis8VTdFMkQ+IDxVN0YyMT4KKzxVN0UyRT4gPFU3RjI5PgorPFU3RTMxPiA8VTdFMjY+OzxVN0VCNT4KKzxVN0UzMj4gPFU3RDJGPjs8VTdFOUQ+OzxVN0YyNz4KKzxVN0UzND4gPFU3RUE0PgorPFU3RTM1PiA8VTdGMjY+Cis8VTdFMzY+IDxVN0Q3Nz47PFU5OUJEPgorPFU3RTM3PiA8VTdGMTU+Cis8VTdFMzk+IDxVN0YyNT4KKzxVN0UzRD4gPFU2MDNCPjs8VTY0MDM+OzxVNjQ2MD47PFU3RENGPjs8VTdERUI+Cis8VTdFM0U+IDxVN0VFOT4KKzxVN0U0MT4gPFU3REQwPgorPFU3RTQzPiA8VTdEQjM+OzxVN0VGNz4KKzxVN0U0NT4gPFU3RTcwPjs8VTdGMkI+Cis8VTdFNDY+IDxVN0YyQT4KKzxVN0U0OD4gPFU3RTY2PgorPFU3RTRBPiA8VTdFOEU+OzxVN0U5Nj47PFU3RUE0PgorPFU3RTRCPiA8VTdDRkI+OzxVN0UxOD47PFU3RTZCPgorPFU3RTREPiA8VTdFNjE+OzxVN0VFMz4KKzxVN0U1Mj4gPFU3RjJGPgorPFU3RTU0PiA8VTdFQzc+Cis8VTdFNTU+IDxVN0YyRT4KKzxVN0U1Nj4gPFU0RjFFPjs8VTUwOTg+Cis8VTdFNTk+IDxVN0ZGQj4KKzxVN0U1QT4gPFU3RjJEPgorPFU3RTVCPiA8VTdEQkQ+Cis8VTdFNUU+IDxVN0VENT4KKzxVN0U2MT4gPFU3RTREPjs8VTdFRTM+Cis8VTdFNjI+IDxVN0YwQj4KKzxVN0U2ND4gPFU3RTgyPgorPFU3RTY2PiA8VTdFNDg+Cis8VTdFNjk+IDxVN0UwND47PFU3RUYzPgorPFU3RTZBPiA8VTdENzU+OzxVN0VEOD4KKzxVN0U2Qj4gPFU3Q0ZCPjs8VTdFMTg+OzxVN0U0Qj4KKzxVN0U2RD4gPFU3RDc4Pjs8VTgzMjc+OzxVODgxMj4KKzxVN0U2RT4gPFU3RjMwPjs8VTk3QzE+Cis8VTdFNkY+IDxVN0YzMz4KKzxVN0U3MD4gPFU3RTQ1Pjs8VTdGMkI+OzxVN0YzMj4KKzxVN0U3Mz4gPFU3RjM0PgorPFU3RTc5PiA8VTdFQ0U+Cis8VTdFN0M+IDxVN0Q5OT47PFU3RUU3PgorPFU3RTdEPiA8VTdGMjQ+Cis8VTdFN0U+IDxVN0YzMT4KKzxVN0U3Rj4gPFU2OURCPgorPFU3RTgyPiA8VTdFNjQ+Cis8VTdFODM+IDxVN0RENT4KKzxVN0U4Nz4gPFU5OEEzPgorPFU3RTg4PiA8VTdGMkM+Cis8VTdFODk+IDxVN0U5OD47PFU3RjM1PgorPFU3RThBPiA8VTdENTY+OzxVN0VBOT4KKzxVN0U4Qz4gPFU3RDlBPjs8VTdFRUQ+OzxVOENFMT4KKzxVN0U4RD4gPFU3RDJGPgorPFU3RThFPiA8VTdFNEE+OzxVN0U5Nj47PFU3RUE0PgorPFU3RThGPiA8VTdFOTI+OzxVN0YyMD4KKzxVN0U5Mj4gPFU3RThGPjs8VTdGMjA+Cis8VTdFOTM+IDxVN0YyOD4KKzxVN0U5ND4gPFU2MjREPgorPFU3RTk2PiA8VTdFNEE+OzxVN0U4RT47PFU3RUE0PgorPFU3RTk4PiA8VTdFODk+OzxVN0YzNT4KKzxVN0U5Qz4gPFU3RjA2PgorPFU3RTlEPiA8VTdEMkY+OzxVN0UzMj47PFU3RjI3PgorPFU3RTlGPiA8VTdDRjg+OzxVN0NGOT4KKzxVN0VBMD4gPFU3Q0ZFPgorPFU3RUExPiA8VTdEMDY+Cis8VTdFQTI+IDxVN0QwNT4KKzxVN0VBMz4gPFU3RDAyPgorPFU3RUE0PiA8VTdFMzQ+OzxVN0U0QT47PFU3RThFPjs8VTdFOTY+Cis8VTdFQTU+IDxVN0QwNz4KKzxVN0VBNj4gPFU3RDA0PgorPFU3RUE3PiA8VTdEMUE+Cis8VTdFQTg+IDxVN0QwOD4KKzxVN0VBOT4gPFU3RDRCPjs8VTdFOEE+Cis8VTdFQUE+IDxVN0QwMD4KKzxVN0VBQj4gPFU3RDA5PgorPFU3RUFDPiA8VTdERUY+Cis8VTdFQUQ+IDxVN0QxQz4KKzxVN0VBRT4gPFU3RDE4PgorPFU3RUFGPiA8VTdEMTQ+Cis8VTdFQjA+IDxVN0QxNT4KKzxVN0VCMT4gPFU3RDE3PgorPFU3RUIyPiA8VTdEQjE+Cis8VTdFQjM+IDxVN0QwRD4KKzxVN0VCND4gPFU3RDFEPgorPFU3RUI1PiA8VTdFMjY+OzxVN0UzMT4KKzxVN0VCNj4gPFU3REI4PgorPFU3RUI3PiA8VTdEMUI+Cis8VTdFQjg+IDxVN0QxOT4KKzxVN0VCOT4gPFU3RDBCPgorPFU3RUJBPiA8VTdEMjE+Cis8VTdFQkI+IDxVN0QzNT4KKzxVN0VCQz4gPFU3RDE2PgorPFU3RUJEPiA8VTdEMTA+Cis8VTdFQkU+IDxVN0QxMz4KKzxVN0VCRj4gPFU3RDY0Pjs8VTdEQUI+OzxVN0REQT47PFU3RjEwPgorPFU3RUMwPiA8VTdEM0E+Cis8VTdFQzE+IDxVN0QzMj47PFU3RDRGPgorPFU3RUMyPiA8VTdEMzE+Cis8VTdFQzM+IDxVN0RGND4KKzxVN0VDND4gPFU3RDQ0PgorPFU3RUM1PiA8VTdEMzM+Cis8VTdFQzY+IDxVN0QzMD4KKzxVN0VDNz4gPFU3RTU0PgorPFU3RUM4PiA8VTdENDI+Cis8VTdFQzk+IDxVN0UxMD4KKzxVN0VDQT4gPFU3RDQ2PgorPFU3RUNCPiA8VTdEM0M+Cis8VTdFQ0M+IDxVN0Q0MD4KKzxVN0VDRD4gPFU3RDM5PgorPFU3RUNFPiA8VTdFNzk+Cis8VTdFQ0Y+IDxVN0Q0Qz47PFU3RDkzPgorPFU3RUQwPiA8VTdEM0Y+Cis8VTdFRDE+IDxVN0Q4MT4KKzxVN0VEMj4gPFU3RDY4PgorPFU3RUQzPiA8VTdENTA+Cis8VTdFRDQ+IDxVN0Q1RD4KKzxVN0VENT4gPFU3RTVFPjs8VTkwNzY+Cis8VTdFRDY+IDxVN0Q3MD4KKzxVN0VENz4gPFU3RDRFPgorPFU3RUQ4PiA8VTdENzU+OzxVN0U2QT4KKzxVN0VEOT4gPFU3RDY2PgorPFU3RURBPiA8VTdENjI+Cis8VTdFREI+IDxVN0Q3Mz4KKzxVN0VEQz4gPFU3RDYxPgorPFU3RUREPiA8VTY0QTc+OzxVN0Q1NT47PFU3RDc2PgorPFU3RURFPiA8VTdENUU+Cis8VTdFREY+IDxVN0Q3MT47PFU3RDgyPgorPFU3RUUwPiA8VTdEODY+Cis8VTdFRTE+IDxVN0Q4Mz4KKzxVN0VFMj4gPFU3RDc5PgorPFU3RUUzPiA8VTdEODk+OzxVN0U0RD47PFU3RTYxPgorPFU3RUU0PiA8VTdEOEM+Cis8VTdFRTU+IDxVN0Q4Rj4KKzxVN0VFNj4gPFU3RDVCPjs8VTdFMjc+Cis8VTdFRTc+IDxVN0Q5OT47PFU3RTdDPgorPFU3RUU4PiA8VTdEODg+Cis8VTdFRTk+IDxVN0UzRT4KKzxVN0VFQT4gPFU3REQyPjs8VTdERDY+Cis8VTdFRUI+IDxVN0RCRT4KKzxVN0VFRD4gPFU3RDlBPjs8VTdFOEM+Cis8VTdFRUU+IDxVN0RCQT4KKzxVN0VFRj4gPFU3RENCPgorPFU3RUYwPiA8VTdEQkQ+Cis8VTdFRjE+IDxVN0REND4KKzxVN0VGMj4gPFU3REM0PgorPFU3RUYzPiA8VTdFMDQ+OzxVN0U2OT4KKzxVN0VGND4gPFU3REFEPgorPFU3RUY1PiA8VTdEQkY+OzxVN0REQz4KKzxVN0VGNj4gPFU3REFDPgorPFU3RUY3PiA8VTdEQjM+OzxVN0U0Mz4KKzxVN0VGOD4gPFU3RDJDPjs8VTdEQTI+Cis8VTdFRjk+IDxVN0RBRj4KKzxVN0VGQT4gPFU3REI5PgorPFU3RUZCPiA8VTdEQTM+Cis8VTdFRkM+IDxVN0Q5Qz4KKzxVN0VGRD4gPFU3REJCPgorPFU3RUZFPiA8VTdEQjA+Cis8VTdFRkY+IDxVN0RBMD47PFU3REQxPgorPFU3RjAwPiA8VTdEQjQ+Cis8VTdGMDE+IDxVN0RDNz4KKzxVN0YwMj4gPFU3REQ5PgorPFU3RjAzPiA8VTdERDc+Cis8VTdGMDQ+IDxVN0REOD4KKzxVN0YwNT4gPFU3REVDPgorPFU3RjA2PiA8VTdFOUM+Cis8VTdGMDc+IDxVN0RGOT4KKzxVN0YwOD4gPFU3REYyPgorPFU3RjA5PiA8VTdEREQ+Cis8VTdGMEE+IDxVN0RGQz47PFU3RTE1PgorPFU3RjBCPiA8VTdFNjI+Cis8VTdGMEM+IDxVN0RFNj4KKzxVN0YwRD4gPFU3RDlFPgorPFU3RjBFPiA8VTdEREU+Cis8VTdGMEY+IDxVN0RGNj4KKzxVN0YxMD4gPFU3RDY0Pjs8VTdEQUI+OzxVN0REQT47PFU3RUJGPgorPFU3RjExPiA8VTdERjE+Cis8VTdGMTI+IDxVN0UwQj4KKzxVN0YxMz4gPFU3REU5PgorPFU3RjE0PiA8VTdERTA+Cis8VTdGMTU+IDxVN0UzNz4KKzxVN0YxNj4gPFU3REU4PgorPFU3RjE3PiA8VTdERTE+Cis8VTdGMTg+IDxVN0RFMz47PFU3RTAxPgorPFU3RjE5PiA8VTdFMDk+Cis8VTdGMUE+IDxVN0UxQj4KKzxVN0YxQj4gPFU3RTFGPgorPFU3RjFDPiA8VTdFMUQ+Cis8VTdGMUQ+IDxVN0UyQj4KKzxVN0YxRT4gPFU3RTE3PgorPFU3RjFGPiA8VTdFMUU+Cis8VTdGMjA+IDxVN0U4Rj47PFU3RTkyPgorPFU3RjIxPiA8VTdFMkQ+Cis8VTdGMjI+IDxVN0UwQT4KKzxVN0YyMz4gPFU3RTExPgorPFU3RjI0PiA8VTdFN0Q+Cis8VTdGMjU+IDxVN0UzOT4KKzxVN0YyNj4gPFU3RTM1PgorPFU3RjI3PiA8VTdEMkY+OzxVN0UzMj47PFU3RTlEPgorPFU3RjI4PiA8VTdFOTM+Cis8VTdGMjk+IDxVN0UyRT4KKzxVN0YyQT4gPFU3RTQ2PgorPFU3RjJCPiA8VTdFNDU+OzxVN0U3MD4KKzxVN0YyQz4gPFU3RTg4PgorPFU3RjJEPiA8VTdFNUE+Cis8VTdGMkU+IDxVN0U1NT4KKzxVN0YyRj4gPFU3RTUyPgorPFU3RjMwPiA8VTdFNkU+OzxVOTdDMT4KKzxVN0YzMT4gPFU3RTdFPgorPFU3RjMyPiA8VTdFNzA+Cis8VTdGMzM+IDxVN0U2Rj4KKzxVN0YzND4gPFU3RTczPgorPFU3RjM1PiA8VTdFODk+OzxVN0U5OD4KKzxVN0YzNj4gPFU3RjNCPjs8VTdGNTA+OzxVOTQ3NT4KKzxVN0YzNz4gPFU1Mzc4PgorPFU3RjM4PiA8VTc0RTg+Cis8VTdGMzk+IDxVNzBCMD4KKzxVN0YzQT4gPFU2QjIwPjs8VTdGM0M+Cis8VTdGM0I+IDxVN0YzNj4KKzxVN0YzQz4gPFU2QjIwPjs8VTdGM0E+Cis8VTdGM0Q+IDxVNzZDQj47PFU5MjYyPjs8VTk0QjU+Cis8VTdGM0U+IDxVNzRGNj47PFU3NTAxPgorPFU3RjQyPiA8VTc1MTY+OzxVN0Y0Qz4KKzxVN0Y0Nz4gPFU2QTNEPgorPFU3RjQ4PiA8VTU3NUI+OzxVNThCMD47PFU1OEI1Pjs8VTU4REM+OzxVN0Y0RT4KKzxVN0Y0Qz4gPFU3NTE2Pjs8VTdGNDI+Cis8VTdGNEU+IDxVNTc1Qj47PFU1OEIwPjs8VTU4QjU+OzxVNThEQz47PFU3RjQ4PgorPFU3RjUwPiA8VTdGMzY+OzxVOTQ3NT4KKzxVN0Y1MT4gPFU3REIyPjs8VTdGNTI+OzxVN0Y1Mz4KKzxVN0Y1Mj4gPFU3RjUxPjs8VTdGNTM+Cis8VTdGNTM+IDxVN0Y1MT47PFU3RjUyPgorPFU3RjU3PiA8VTU1NzA+OzxVNTZDOT47PFU3Rjg1PgorPFU3RjVBPiA8VTdGNzA+OzxVN0Y3OD4KKzxVN0Y2Mj4gPFU3Rjc3PgorPFU3RjZBPiA8VTY2ODM+OzxVOEZBMD4KKzxVN0Y3MD4gPFU3RjVBPjs8VTdGNzg+Cis8VTdGNzQ+IDxVN0Y4Nj4KKzxVN0Y3NT4gPFU1MDhDPjs8VTk5RTE+OzxVOUE4Mj4KKzxVN0Y3Nj4gPFU3RjgwPgorPFU3Rjc3PiA8VTdGNjI+Cis8VTdGNzg+IDxVN0Y1QT47PFU3RjcwPgorPFU3RjgwPiA8VTdGNzY+Cis8VTdGODE+IDxVN0Y4OD47PFU4OThBPgorPFU3RjgzPiA8VTUxQUE+OzxVNUU0Mj4KKzxVN0Y4NT4gPFU3RjU3PgorPFU3Rjg2PiA8VTdGNzQ+Cis8VTdGODc+IDxVN0Y4OD47PFU4OTg5Pjs8VTg5OEE+Cis8VTdGODg+IDxVN0Y4MT47PFU3Rjg3Pjs8VTg5ODk+OzxVODk4QT4KKzxVN0Y4QT4gPFU4Mjg4PgorPFU3RjhCPiA8VTgyODg+Cis8VTdGOEM+IDxVN0Y5Nz4KKzxVN0Y5MD4gPFU3RjkxPgorPFU3RjkxPiA8VTdGOTA+Cis8VTdGOTc+IDxVN0Y4Qz4KKzxVN0Y5Rj4gPFU3RkE1PgorPFU3RkExPiA8VTdGQTg+Cis8VTdGQTM+IDxVN0ZBND4KKzxVN0ZBND4gPFU3RkEzPgorPFU3RkE1PiA8VTdGOUY+Cis8VTdGQTg+IDxVN0ZBMT4KKzxVN0ZBOT4gPFU0RTQ5PgorPFU3RkFBPiA8VTUxN0I+OzxVOTkwQT4KKzxVN0ZBRT4gPFU3RkI5PgorPFU3RkI0PiA8VTdGQjY+OzxVODFCQj4KKzxVN0ZCNj4gPFU3RkI0Pjs8VTgxQkI+Cis8VTdGQjk+IDxVN0ZBRT4KKzxVN0ZDND4gPFU3RkM1Pjs8VTdGRTQ+Cis8VTdGQzU+IDxVN0ZDND47PFU3RkU0PgorPFU3RkM2PiA8VTdGRTA+Cis8VTdGRDI+IDxVNEU2MD4KKzxVN0ZEOD4gPFU3RkY5PgorPFU3RkQ5PiA8VTdGRkQ+Cis8VTdGREE+IDxVN0ZFQz4KKzxVN0ZFMD4gPFU3RkM2PgorPFU3RkU0PiA8VTdGQzQ+OzxVN0ZDNT4KKzxVN0ZFQj4gPFU3M0E5PgorPFU3RkVDPiA8VTdGREE+Cis8VTdGRjE+IDxVN0ZGQT4KKzxVN0ZGMz4gPFU3Nzk2PgorPFU3RkY5PiA8VTdGRDg+Cis8VTdGRkE+IDxVN0ZGMT4KKzxVN0ZGQj4gPFU3RTU5Pjs8VTk4REM+Cis8VTdGRkQ+IDxVN0ZEOT4KKzxVODAwMD4gPFU3MUZGPgorPFU4MDAzPiA8VTY1Mzc+Cis8VTgwMDc+IDxVODAwOD4KKzxVODAwOD4gPFU4MDA3PgorPFU4MDBBPiA8VTgwMEI+Cis8VTgwMEI+IDxVODAwQT4KKzxVODAxNT4gPFU3NTRBPgorPFU4MDE4PiA8VTc5RDA+Cis8VTgwMUM+IDxVNjdCMT4KKzxVODAyMT4gPFU5NTA0PgorPFU4MDIyPiA8VTgwMkU+Cis8VTgwMjQ+IDxVODVDOT4KKzxVODAyNz4gPFU4MDJDPgorPFU4MDI4PiA8VTY5Qzg+OzxVOTM5Mj4KKzxVODAyQz4gPFU4MDI3PgorPFU4MDJFPiA8VTgwMjI+Cis8VTgwMzA+IDxVNkFDQz4KKzxVODAzOD4gPFU4MDczPgorPFU4MDNCPiA8VTYwNjU+Cis8VTgwM0M+IDxVODA0Mz4KKzxVODAzRD4gPFU4RUFEPgorPFU4MDQwPiA8VTgwNEM+OzxVODA3Nz47PFU4RUM0PgorPFU4MDQyPiA8VTgwNzY+Cis8VTgwNDM+IDxVODAzQz4KKzxVODA0Qj4gPFU4MDdFPgorPFU4MDRDPiA8VTgwNDA+OzxVODA3Nz47PFU4RUM0PgorPFU4MDREPiA8VTgwNzk+Cis8VTgwNTQ+IDxVODA2OD47PFU4MDZGPgorPFU4MDU2PiA8VTU3MjM+OzxVNTdBOT4KKzxVODA1RT4gPFU5NUZCPgorPFU4MDVGPiA8VTU4RkI+OzxVNUE3Rj4KKzxVODA2MT4gPFU4MDY2Pjs8VTgwNkE+OzxVODA3MD4KKzxVODA2Nj4gPFU4MDYxPjs8VTgwNkE+OzxVODA3MD4KKzxVODA2OD4gPFU4MDU0Pjs8VTgwNkY+Cis8VTgwNjk+IDxVODA3NT4KKzxVODA2QT4gPFU4MDYxPjs8VTgwNjY+OzxVODA3MD4KKzxVODA2Qj4gPFU4MDZGPgorPFU4MDZEPiA8VTVBQkY+OzxVNjEyNz4KKzxVODA2RT4gPFU4MDZGPgorPFU4MDZGPiA8VTgwNTQ+OzxVODA2OD47PFU4MDZCPjs8VTgwNkU+Cis8VTgwNzA+IDxVODA2MT47PFU4MDY2Pjs8VTgwNkE+Cis8VTgwNzI+IDxVNThGMD4KKzxVODA3Mz4gPFU4MDM4PgorPFU4MDc0PiA8VTU0MkM+OzxVODA3RD4KKzxVODA3NT4gPFU4MDY5PgorPFU4MDc2PiA8VTgwNDI+Cis8VTgwNzc+IDxVODA0MD47PFU4MDRDPjs8VThFQzQ+Cis8VTgwNzk+IDxVODA0RD4KKzxVODA3RD4gPFU1NDJDPjs8VTgwNzQ+Cis8VTgwN0U+IDxVODA0Qj4KKzxVODA4Mz4gPFU3QzlCPjs8VTgwODU+Cis8VTgwODU+IDxVN0M5Qj47PFU4MDgzPgorPFU4MDg3PiA8VTgwODg+Cis8VTgwODg+IDxVODA4Nz4KKzxVODA4OT4gPFU1QjhEPgorPFU4MDhFPiA8VTgwQUY+Cis8VTgwQTA+IDxVODE3OD47PFU4MTkzPgorPFU4MEExPiA8VTgxMzU+Cis8VTgwQTQ+IDxVODE5QT4KKzxVODBBNz4gPFU4MERBPgorPFU4MEFDPiA8VTc1QTM+Cis8VTgwQUU+IDxVOUFBRj4KKzxVODBBRj4gPFU4MDhFPjs8VTgwQkI+Cis8VTgwQjE+IDxVNTNCNz4KKzxVODBCMj4gPFU2QkQzPjs8VTg4QUM+Cis8VTgwQjQ+IDxVOTkxQT4KKzxVODBCQj4gPFU4MEFGPgorPFU4MEJFPiA8VTgxNEU+Cis8VTgwQkY+IDxVODE2Qj4KKzxVODBDMD4gPFU4MTM5PgorPFU4MEMxPiA8VTgxMDU+OzxVODEwNz47PFU4MTBCPgorPFU4MEM0PiA8VTRGMzc+OzxVNTE5MT4KKzxVODBDNj4gPFU4MUJCPjs8VTgxQkQ+Cis8VTgwQ0M+IDxVNjNGOT4KKzxVODBEQT4gPFU4MEE3PgorPFU4MERDPiA8VTUyREQ+Cis8VTgwRTE+IDxVODg1QT47PFU5QjBEPgorPFU4MEU3PiA8VTY3Mjc+Cis8VTgwRTg+IDxVODE1Nj4KKzxVODBFQT4gPFU4MURBPgorPFU4MEVCPiA8VTgxMUI+OzxVOEUwMT4KKzxVODBFRD4gPFU4MUQ5PgorPFU4MEY2PiA8VTgxQTA+Cis8VTgxMDM+IDxVODEwNj47PFU4MTNBPgorPFU4MTA1PiA8VTgwQzE+OzxVODEwQj4KKzxVODEwNj4gPFU4MTAzPjs8VTgxM0E+Cis8VTgxMDc+IDxVODBDMT4KKzxVODEwOD4gPFU4MTA5PgorPFU4MTA5PiA8VTgxMDg+Cis8VTgxMEI+IDxVODBDMT47PFU4MTA1PgorPFU4MTBEPiA8VTgxQkU+Cis8VTgxMEY+IDxVODFEMz47PFU4MURGPjs8VTlBRDI+Cis8VTgxMTA+IDxVODFDRD4KKzxVODExMT4gPFU4MTMzPjs8VTgxNjY+Cis8VTgxMTM+IDxVODFCRj4KKzxVODExND4gPFU4MUUwPgorPFU4MTE3PiA8VTU0M0I+Cis8VTgxMUE+IDxVODE3Mz47PFU4RTBCPgorPFU4MTFCPiA8VTgwRUI+OzxVOEUwMT4KKzxVODEyMz4gPFU1NTA3PgorPFU4MTI5PiA8VTRGRUU+Cis8VTgxMkI+IDxVODEzMT4KKzxVODEzMT4gPFU4MTJCPgorPFU4MTMzPiA8VTUzMTg+OzxVODExMT47PFU4MTY2PgorPFU4MTM1PiA8VTgwQTE+Cis8VTgxMzY+IDxVODE2MT4KKzxVODEzOD4gPFU4MUM5PgorPFU4MTM5PiA8VTc1RUU+OzxVODBDMD4KKzxVODEzQT4gPFU4MTAzPjs8VTgxMDY+Cis8VTgxM0U+IDxVODE1Nz4KKzxVODE0Nj4gPFU1MDBFPgorPFU4MTRBPiA8VTgxQzg+OzxVODFEOD4KKzxVODE0Qz4gPFU5MTgzPgorPFU4MTRFPiA8VTgwQkU+Cis8VTgxNTY+IDxVODBFOD4KKzxVODE1Nz4gPFU4MTNFPgorPFU4MTU4PiA8VTgxOTU+Cis8VTgxNUY+IDxVODFBMz4KKzxVODE2MT4gPFU4MTM2PgorPFU4MTY2PiA8VTUzMTg+OzxVODExMT47PFU4MTMzPgorPFU4MTZCPiA8VTgwQkY+Cis8VTgxNkQ+IDxVOUY3Nj4KKzxVODE2RT4gPFU5ODRCPgorPFU4MTczPiA8VTgxMUE+OzxVOEUwQj4KKzxVODE3OD4gPFU4MEEwPjs8VTgxOTM+Cis8VTgxN0I+IDxVODFBOT4KKzxVODE3RD4gPFU4MTgzPgorPFU4MTdFPiA8VTlBMzA+Cis8VTgxODA+IDxVOUFDOD4KKzxVODE4Mj4gPFU4MTkwPgorPFU4MTgzPiA8VTgxN0Q+Cis8VTgxOTA+IDxVODE4Mj4KKzxVODE5MT4gPFU4MUNGPgorPFU4MTkzPiA8VTgwQTA+OzxVODE3OD4KKzxVODE5NT4gPFU4MTU4PgorPFU4MTlBPiA8VTgwQTQ+Cis8VTgxQTA+IDxVODBGNj4KKzxVODFBMz4gPFU4MTVGPgorPFU4MUE0PiA8VTlDRDU+Cis8VTgxQTk+IDxVODE3Qj4KKzxVODFCMz4gPFU5OTREPgorPFU4MUI4PiA8VTlBQzQ+OzxVOUFEMz4KKzxVODFCQj4gPFU3RkI0Pjs8VTdGQjY+OzxVODBDNj47PFU4MUJEPgorPFU4MUJEPiA8VTgwQzY+OzxVODFCQj4KKzxVODFCRT4gPFU4MTBEPgorPFU4MUJGPiA8VTgxMTM+Cis8VTgxQzA+IDxVODFDQj4KKzxVODFDMz4gPFU3NjU1Pjs8VTc2NzA+Cis8VTgxQzg+IDxVODE0QT47PFU4MUQ4PgorPFU4MUM5PiA8VTgxMzg+Cis8VTgxQ0I+IDxVODFDMD4KKzxVODFDRD4gPFU4MTEwPgorPFU4MUNGPiA8VTgxOTE+OzxVOUFENT4KKzxVODFEMz4gPFU4MTBGPjs8VTgxREY+Cis8VTgxRDg+IDxVODE0QT47PFU4MUM4PgorPFU4MUQ5PiA8VTgwRUQ+Cis8VTgxREE+IDxVODBFQT4KKzxVODFEQz4gPFU4MUUyPgorPFU4MURFPiA8VTc2NkY+Cis8VTgxREY+IDxVODEwRj47PFU4MUQzPgorPFU4MUUwPiA8VTgxMTQ+Cis8VTgxRTI+IDxVODFEQz4KKzxVODFFNT4gPFU1MzY3PgorPFU4MUU4PiA8VTRFMzQ+Cis8VTgxRUQ+IDxVODFGMD4KKzxVODFGMD4gPFU4MUVEPgorPFU4MUY0PiA8VTdERkI+Cis8VTgxRkE+IDxVNTNGMD47PFU1NzZFPgorPFU4MjA2PiA8VThGM0Y+Cis8VTgyMDc+IDxVNEUwRT4KKzxVODIwOD4gPFU1MTc0PgorPFU4MjA5PiA8VTRFM0U+OzxVNjMxOT47PFU2NEU3PgorPFU4MjBBPiA8VTY1RTc+Cis8VTgyMEQ+IDxVNjM2OD47PFU4MjBFPgorPFU4MjBFPiA8VTgyMEQ+Cis8VTgyMTA+IDxVODIxMz4KKzxVODIxMz4gPFU4MjEwPgorPFU4MjE2PiA8VTgyMTc+OzxVOTJFQT47PFU5NEZBPgorPFU4MjE3PiA8VTgyMTY+OzxVOTJFQT47PFU5NEZBPgorPFU4MjE4PiA8VTk5Mjg+Cis8VTgyMjM+IDxVODI2ND4KKzxVODIyOT4gPFU4MjM5PgorPFU4MjJFPiA8VTgyM0I+OzxVODI2Qj4KKzxVODIzMD4gPFU4MjY2PgorPFU4MjMxPiA8VTgyNTk+Cis8VTgyMzU+IDxVNjdDMT4KKzxVODIzNj4gPFU4MjRBPgorPFU4MjM5PiA8VTgyMjk+Cis8VTgyM0I+IDxVODIyRT47PFU4MjZCPgorPFU4MjRBPiA8VTgyMzY+Cis8VTgyNTk+IDxVODIzMT4KKzxVODI2Mj4gPFU2QTJGPgorPFU4MjYzPiA8VTZBNzk+OzxVODI2QT4KKzxVODI2ND4gPFU4MjIzPgorPFU4MjY2PiA8VTgyMzA+Cis8VTgyNkE+IDxVNkE3OT47PFU4MjYzPgorPFU4MjZCPiA8VTgyMkU+OzxVODIzQj4KKzxVODI3MD4gPFU4MjcxPgorPFU4MjcxPiA8VTU2Q0Y+OzxVODI3MD4KKzxVODI3Mz4gPFU4Mjc2Pjs8VTgyNzc+OzxVOEM1Mz47PFU4QzU0PgorPFU4Mjc2PiA8VTgyNzM+OzxVODI3Nz47PFU4QzUzPjs8VThDNTQ+Cis8VTgyNzc+IDxVODI3Mz47PFU4Mjc2Pjs8VThDNTM+OzxVOEM1ND4KKzxVODI3OD4gPFU4Mjc5PgorPFU4Mjc5PiA8VTgyNzg+Cis8VTgyN0E+IDxVNzlDNz47PFU4MkI4Pjs8VTg0MUY+OzxVODRGQT47PFU4NUREPgorPFU4MjgyPiA8VTdCQzA+Cis8VTgyODg+IDxVN0Y4QT47PFU3RjhCPgorPFU4MjhCPiA8VTgyOEM+Cis8VTgyOEM+IDxVODI4Qj4KKzxVODI5ND4gPFU1MzQ5PgorPFU4Mjk3PiA8VTg1OEM+Cis8VTgyOUM+IDxVODU2QT4KKzxVODJBNj4gPFU4NjA2PgorPFU4MkIxPiA8VTgyQjI+Cis8VTgyQjI+IDxVODJCMT4KKzxVODJCOD4gPFU3OUM3Pjs8VTgyN0E+OzxVODQxRj47PFU4NEI3Pjs8VTg0RkE+OzxVODU1Mz47PFU4NUREPgorPFU4MkJCPiA8VTUyMEQ+Cis8VTgyQzE+IDxVODRFRj4KKzxVODJDNT4gPFU0RTQyPjs8VTUyMDg+Cis8VTgyQzc+IDxVODQ2Nj4KKzxVODJDOD4gPFU4NUY2PgorPFU4MkNCPiA8VTgzQTc+Cis8VTgyQ0M+IDxVODQwNz4KKzxVODJDRD4gPFU4NEJDPgorPFU4MkNFPiA8VTgyRTc+Cis8VTgyQ0Y+IDxVNTZDQz47PFU3NTI2Pjs8VTdBNEM+OzxVODYwNz47PFU4NjEzPgorPFU4MkQwPiA8VTgzNTE+Cis8VTgyRTE+IDxVODJFMj4KKzxVODJFMj4gPFU4MkUxPgorPFU4MkU3PiA8VTgyQ0U+Cis8VTgyRjE+IDxVNTA0MD4KKzxVODJGOT4gPFU4NUIyPjs8VTg2MEI+Cis8VTgyRkE+IDxVODM5Mz4KKzxVODJGRD4gPFU4M0YwPgorPFU4MzAzPiA8VTdCMzU+OzxVN0JDND4KKzxVODMwQT4gPFU1MTc5Pjs8VTgzMzI+Cis8VTgzMEU+IDxVODM5Nj4KKzxVODMwRj4gPFU4NjIyPgorPFU4MzExPiA8VTg1MjY+Cis8VTgzMTQ+IDxVNTg0Qj4KKzxVODMxNT4gPFU3MTYyPgorPFU4MzE4PiA8VTgzNTQ+Cis8VTgzMjc+IDxVN0U2RD47PFU4ODEyPgorPFU4MzJGPiA8VTdENjU+Cis8VTgzMzA+IDxVODQzOD4KKzxVODMzMj4gPFU1MTc5Pjs8VTgzMEE+Cis8VTgzNDY+IDxVODM0QT4KKzxVODM0Nz4gPFU4Mzk1PgorPFU4MzRBPiA8VTgzNDY+Cis8VTgzNTA+IDxVNEY5Rj47PFU4NUE2PgorPFU4MzUxPiA8VTgyRDA+Cis8VTgzNTQ+IDxVODMxOD4KKzxVODM1OD4gPFU1RTg0Pjs8VTgzOEE+Cis8VTgzNTk+IDxVODU5OD4KKzxVODM1QT4gPFU4M0EyPgorPFU4MzVCPiA8VTg1NTg+Cis8VTgzNUM+IDxVODRGRD4KKzxVODM1RD4gPFU4NDM0PgorPFU4MzVFPiA8VTg1NEU+Cis8VTgzNUY+IDxVODU4OD4KKzxVODM2MD4gPFU4NDE1Pjs8VTg1QkE+Cis8VTgzNjE+IDxVNzZFQT47PFU4NTY5Pjs8VTg2MkY+Cis8VTgzNjM+IDxVNjgwND47PFU2OUFFPgorPFU4MzY0PiA8VTg0Nzc+Cis8VTgzNjU+IDxVNkVDRT4KKzxVODM2Nj4gPFU3Mjk2PgorPFU4MzY3PiA8VTcxOTI+Cis8VTgzNjg+IDxVODU0MT4KKzxVODM2OT4gPFU4NUNFPgorPFU4MzZBPiA8VTg0QzA+Cis8VTgzNkI+IDxVODUyRD4KKzxVODM2Qz4gPFU4NTUyPgorPFU4MzZEPiA8VTg0NTI+Cis8VTgzNkU+IDxVODQ2ND4KKzxVODM2Rj4gPFU4NDZGPjs8VTg1QUM+OzxVODVFNT4KKzxVODM3Mz4gPFU4QzQ2PgorPFU4Mzc5PiA8VTYzNTc+Cis8VTgzN0I+IDxVODUxMD4KKzxVODM4NT4gPFU2RDk2Pjs8VTg0OUU+Cis8VTgzOEE+IDxVNUU4ND47PFU4MzU4PgorPFU4MzkzPiA8VTgyRkE+Cis8VTgzOTU+IDxVODM0Nz4KKzxVODM5Nj4gPFU4MzBFPgorPFU4MzlFPiA8VTU1MEQ+Cis8VTgzQTI+IDxVODM1QT4KKzxVODNBNz4gPFU4MkNCPgorPFU4M0IxPiA8VTg0MEE+Cis8VTgzQjI+IDxVODRFRT4KKzxVODNCMz4gPFU4NDk0PgorPFU4M0I0PiA8VTg0MzU+Cis8VTgzQjU+IDxVODNERj4KKzxVODNCNj4gPFU4NTlGPgorPFU4M0I3PiA8VTczNzI+OzxVN0E2Qj4KKzxVODNCOD4gPFU4NTU1PgorPFU4M0I5PiA8VTc0Njk+Cis8VTgzQkE+IDxVOUQyQz47PFU5REFGPjs8VTlFMEU+Cis8VTgzQkM+IDxVODQ5Mz47PFU4NEY0PgorPFU4M0JEPiA8VTgzQkU+Cis8VTgzQkU+IDxVODNCRD4KKzxVODNEMT4gPFU4NDU4PgorPFU4M0QzPiA8VTY3OUM+Cis8VTgzRDQ+IDxVNTM1Qz47PFU4NTE0PgorPFU4M0RGPiA8VTgzQjU+Cis8VTgzRUI+IDxVNTgwNz4KKzxVODNFRj4gPFU1MzRFPjs8VTVEMEI+OzxVODU1MD4KKzxVODNGMD4gPFU4MkZEPgorPFU4M0YxPiA8VTg1MDY+Cis8VTgzRjQ+IDxVNUVCNT47PFU4NDRBPjs8VTg0RUQ+Cis8VTgzRjk+IDxVODQ0NT4KKzxVODQwNz4gPFU4MkNDPgorPFU4NDBBPiA8VTgzQjE+Cis8VTg0MEM+IDxVODQyMD4KKzxVODQwRD4gPFU4NEYxPgorPFU4NDE1PiA8VTgzNjA+OzxVODVCQT4KKzxVODQxQT4gPFU4NjAwPgorPFU4NDFEPiA8VTg2M0Y+Cis8VTg0MUY+IDxVNzlDNz47PFU4MjdBPjs8VTgyQjg+OzxVODRGQT47PFU4NUREPgorPFU4NDIwPiA8VTg0MEM+Cis8VTg0MjQ+IDxVODZDRD47PFU4N0EyPgorPFU4NDI1PiA8VTU1QjY+OzxVNzFERj4KKzxVODQyNj4gPFU3RTA4PgorPFU4NDI3PiA8VTg1NkQ+Cis8VTg0Mjg+IDxVODVBOT4KKzxVODQyQz4gPFU0RTA3PgorPFU4NDMxPiA8VTg1N0Y+OzxVODVGQz47PFU4NjEwPgorPFU4NDM0PiA8VTgzNUQ+Cis8VTg0MzU+IDxVODNCND4KKzxVODQzOD4gPFU4MzMwPgorPFU4NDNDPiA8VTg1NUE+Cis8VTg0NDU+IDxVODNGOT4KKzxVODQ0OT4gPFU1M0Y2PgorPFU4NDRBPiA8VTVFQjU+OzxVODNGND47PFU4NEVEPgorPFU4NDUyPiA8VTgzNkQ+Cis8VTg0NTc+IDxVNzc0MD4KKzxVODQ1OD4gPFU4M0QxPgorPFU4NDVBPiA8VTY5Mzk+Cis8VTg0NjA+IDxVODU5Mz4KKzxVODQ2Mj4gPFU3NkQ2Pjs8VTg0Q0I+Cis8VTg0NjQ+IDxVODM2RT4KKzxVODQ2Nj4gPFU4MkM3PgorPFU4NDZBPiA8VTg1OEE+Cis8VTg0NkM+IDxVNTg1Rj4KKzxVODQ2RT4gPFU2OTM0PgorPFU4NDZGPiA8VTgzNkY+Cis8VTg0NzE+IDxVODUyNT4KKzxVODQ3Nz4gPFU4MzY0PgorPFU4NDgyPiA8VTg1MTU+Cis8VTg0ODM+IDxVN0JDNj4KKzxVODQ4Nz4gPFU4NTQ2PgorPFU4NDg5PiA8VTg1NjI+Cis8VTg0OEI+IDxVODUyMz4KKzxVODQ4Qz4gPFU4NTFFPgorPFU4NDkwPiA8VTY0MUM+Cis8VTg0OTM+IDxVODNCQz47PFU4NEY0PgorPFU4NDk0PiA8VTgzQjM+Cis8VTg0OTk+IDxVNjFERT47PFU2RTk1Pjs8VTZGREI+OzxVNzdDNz4KKzxVODQ5RT4gPFU2RDk2Pjs8VTgzODU+Cis8VTg0QTY+IDxVNUY2MD4KKzxVODRBOD4gPFU4NTMzPgorPFU4NEI3PiA8VTgyQjg+Cis8VTg0QkM+IDxVODJDRD4KKzxVODRDMD4gPFU4MzZBPgorPFU4NEM2PiA8VTVFMkQ+Cis8VTg0Q0I+IDxVNzZENj47PFU4NDYyPgorPFU4NEQxPiA8VTdDMTE+OzxVN0MxND4KKzxVODRERD4gPFU4NUNEPgorPFU4NERGPiA8VTg1OEE+Cis8VTg0RTA+IDxVODYzQT4KKzxVODRFMz4gPFU4NTc3PgorPFU4NEU1PiA8VTkzQTM+Cis8VTg0RTY+IDxVOUE0MD4KKzxVODRFRD4gPFU1RUI1Pjs8VTgzRjQ+OzxVODQ0QT4KKzxVODRFRT4gPFU4M0IyPgorPFU4NEVGPiA8VTgyQzE+Cis8VTg0RjE+IDxVODQwRD4KKzxVODRGND4gPFU4M0JDPjs8VTg0OTM+Cis8VTg0RkE+IDxVNzlDNz47PFU4MjdBPjs8VTgyQjg+OzxVODQxRj47PFU4NUREPgorPFU4NEZEPiA8VTgzNUM+Cis8VTg1MDU+IDxVNTk4RD47PFU1OUY4PgorPFU4NTA2PiA8VTgzRjE+Cis8VTg1MTA+IDxVODM3Qj4KKzxVODUxMT4gPFU4ODRBPgorPFU4NTE0PiA8VTUzNUM+OzxVODNEND4KKzxVODUxNT4gPFU4NDgyPgorPFU4NTFFPiA8VTg0OEM+Cis8VTg1MjM+IDxVODQ4Qj4KKzxVODUyNT4gPFU4NDcxPgorPFU4NTI2PiA8VTgzMTE+Cis8VTg1MkQ+IDxVODM2Qj4KKzxVODUyRj4gPFU4NUJDPgorPFU4NTMyPiA8VTg1M0I+Cis8VTg1MzM+IDxVODRBOD4KKzxVODUzND4gPFU5RUJCPgorPFU4NTM1PiA8VTUzMjg+OzxVODVDRj4KKzxVODUzNj4gPFU3QkE2Pjs8VTdDMDA+Cis8VTg1Mzc+IDxVODU5ND4KKzxVODUzOT4gPFU4NjFFPgorPFU4NTNBPiA8VTg1RkE+Cis8VTg1M0I+IDxVODUzMj4KKzxVODUzQz4gPFU4NUY5Pjs8VThCNkE+Cis8VTg1NDE+IDxVODM2OD4KKzxVODU0Nj4gPFU4NDg3PgorPFU4NTRBPiA8VTg1NEI+OzxVODYwMj4KKzxVODU0Qj4gPFU4NTRBPjs8VTg2MDI+Cis8VTg1NEU+IDxVODM1RT4KKzxVODU1MD4gPFU1MzRFPjs8VTgzRUY+Cis8VTg1NTI+IDxVODM2Qz4KKzxVODU1Mz4gPFU4MkI4PgorPFU4NTU1PiA8VTgzQjg+Cis8VTg1NTg+IDxVODM1Qj4KKzxVODU1QT4gPFU4NDNDPgorPFU4NTYyPiA8VTg0ODk+Cis8VTg1Njk+IDxVODM2MT4KKzxVODU2QT4gPFU4MjlDPgorPFU4NTZEPiA8VTg0Mjc+Cis8VTg1NzA+IDxVODU4MD4KKzxVODU3Mj4gPFU4NjA0PgorPFU4NTc0PiA8VTg1RjQ+OzxVODYwQT4KKzxVODU3Nz4gPFU4NEUzPgorPFU4NTdGPiA8VTg0MzE+OzxVODVGQz47PFU4NjEwPgorPFU4NTgwPiA8VTg1NzA+Cis8VTg1ODg+IDxVODM1Rj4KKzxVODU4QT4gPFU4NDZBPjs8VTg0REY+Cis8VTg1OEM+IDxVODI5Nz4KKzxVODU5MT4gPFU1OURDPgorPFU4NTkzPiA8VTg0NjA+Cis8VTg1OTQ+IDxVODUzNz4KKzxVODU5Nz4gPFU1NkVEPjs8VTU3MTI+Cis8VTg1OTg+IDxVODM1OT4KKzxVODU5Rj4gPFU4M0I2PgorPFU4NUE2PiA8VTRGOUY+OzxVODM1MD4KKzxVODVBOT4gPFU4NDI4PgorPFU4NUFCPiA8VTg1QjA+OzxVODYwRD4KKzxVODVBQz4gPFU4MzZGPjs8VTg1RTU+Cis8VTg1QUQ+IDxVN0ExNz4KKzxVODVBRT4gPFU3QzU0Pjs8VTg1RUE+Cis8VTg1QUY+IDxVODVGNz4KKzxVODVCMD4gPFU4NUFCPjs8VTg2MEQ+Cis8VTg1QjI+IDxVODJGOT47PFU4NjBCPgorPFU4NUJBPiA8VTgzNjA+OzxVODQxNT4KKzxVODVCQz4gPFU4NTJGPgorPFU4NUMxPiA8VTdBMDE+OzxVN0EzRT47PFU3QTNGPjs8VTg1RjM+Cis8VTg1QzI+IDxVNEUxQj47PFU1M0UyPjs8VTZBMzc+OzxVNkIwOT4KKzxVODVDOT4gPFU1MDFGPjs8VTVGQTM+OzxVODAyND4KKzxVODVDRD4gPFU4NEREPgorPFU4NUNFPiA8VTgzNjk+Cis8VTg1Q0Y+IDxVNTMyOD47PFU4NTM1PgorPFU4NUQzPiA8VTg2MUE+Cis8VTg1REQ+IDxVNzlDNz47PFU4MjdBPjs8VTgyQjg+OzxVODQxRj47PFU4NEZBPgorPFU4NURGPiA8VTg2M0Q+OzxVODY0Nj4KKzxVODVFND4gPFU3QzU4PgorPFU4NUU1PiA8VTgzNkY+OzxVODVBQz4KKzxVODVFQT4gPFU3QzU0Pjs8VTg1QUU+Cis8VTg1RjM+IDxVN0EwMT47PFU3QTNFPjs8VTdBM0Y+OzxVODVDMT4KKzxVODVGND4gPFU4NTc0Pjs8VTg2MEE+Cis8VTg1RjY+IDxVODJDOD4KKzxVODVGNz4gPFU4NUFGPgorPFU4NUY5PiA8VTg1M0M+OzxVOEI2QT4KKzxVODVGQT4gPFU4NTNBPgorPFU4NUZDPiA8VTg0MzE+OzxVODU3Rj47PFU4NjEwPgorPFU4NjAwPiA8VTg0MUE+Cis8VTg2MDI+IDxVODU0QT47PFU4NTRCPgorPFU4NjA0PiA8VTg1NzI+Cis8VTg2MDY+IDxVODJBNj4KKzxVODYwNz4gPFU3NTI2Pjs8VTdBNEM+OzxVODJDRj47PFU4NjEzPgorPFU4NjBBPiA8VTg1NzQ+OzxVODVGND4KKzxVODYwQj4gPFU4MkY5Pjs8VTg1QjI+Cis8VTg2MEQ+IDxVODVBQj47PFU4NUIwPgorPFU4NjBFPiA8VTlBNjU+OzxVOUFBNT4KKzxVODYxMD4gPFU4NDMxPjs8VTg1N0Y+OzxVODVGQz4KKzxVODYxMz4gPFU4MkNGPjs8VTg2MDc+Cis8VTg2MTc+IDxVNkE5Nz4KKzxVODYxQT4gPFU4NUQzPgorPFU4NjFFPiA8VTg1Mzk+Cis8VTg2MjI+IDxVODMwRj4KKzxVODYyRD4gPFU1MTcwPgorPFU4NjJGPiA8VTc2RUE+OzxVODM2MT4KKzxVODYzQT4gPFU4NEUwPgorPFU4NjNEPiA8VTg1REY+OzxVODY0Nj4KKzxVODYzRj4gPFU4NDFEPgorPFU4NjQxPiA8VTU5MTQ+Cis8VTg2NDY+IDxVODVERj47PFU4NjNEPgorPFU4NjRFPiA8VTRFNTU+OzxVODY1RD4KKzxVODY0Rj4gPFU4NjVDPgorPFU4NjUxPiA8VTYxNkU+Cis8VTg2NTM+IDxVNzMwNz4KKzxVODY1NT4gPFU1MUU2Pjs8VTU5MDQ+Cis8VTg2NTY+IDxVNTQ3Qz4KKzxVODY1Nz4gPFU4NjVBPjs8VTg2NUI+Cis8VTg2NUE+IDxVODY1Nz47PFU4NjVCPgorPFU4NjVCPiA8VTg2NTc+OzxVODY1QT4KKzxVODY1Qz4gPFU4NjRGPgorPFU4NjVEPiA8VTRFNTU+OzxVODY0RT4KKzxVODY1Rj4gPFU1M0Y3PgorPFU4NjY1PiA8VTg2NjY+Cis8VTg2NjY+IDxVODY2NT4KKzxVODY2Nz4gPFU0RThGPgorPFU4NjZCPiA8VTg2N0E+OzxVODdGMj4KKzxVODY2Qz4gPFU4NjZGPgorPFU4NjZFPiA8VTg3RTM+Cis8VTg2NkY+IDxVODY2Qz4KKzxVODY3MT4gPFU4NzY4PgorPFU4Njc1PiA8VTVCODM+OzxVODZDNz4KKzxVODY3QT4gPFU4NjZCPgorPFU4NjdCPiA8VTg3NzE+Cis8VTg2N0Q+IDxVOTZENj4KKzxVODY3RT4gPFU4NzY2PgorPFU4NjdGPiA8VTg4MDY+Cis8VTg2ODA+IDxVODc1NT4KKzxVODY4MT4gPFU4N0ZCPgorPFU4NjgyPiA8VTg3OUU+Cis8VTg2ODM+IDxVODgwMT4KKzxVODY4QT4gPFU4N0ExPjs8VTg3QzE+Cis8VTg2OEI+IDxVODczOT4KKzxVODY4Qz4gPFU4NzJGPgorPFU4Njk1PiA8VTg3NDU+OzxVODgzNj47PFU4ODNBPgorPFU4Njk2PiA8VTg3ODg+Cis8VTg2OTg+IDxVODZEND4KKzxVODY5RD4gPFU4ODE0PgorPFU4NkE2PiA8VTg2QkE+Cis8VTg2QUI+IDxVOUM4RD4KKzxVODZBQz4gPFU4NzA2PgorPFU4NkI0PiA8VTg2RDQ+Cis8VTg2QkE+IDxVODZBNj4KKzxVODZDNz4gPFU1QjgzPjs8VTg2NzU+Cis8VTg2Q0E+IDxVODgzMT4KKzxVODZDRD4gPFU4NDI0Pjs8VTg3QTI+Cis8VTg2Q0U+IDxVODgwNz47PFU4ODIzPgorPFU4NkNGPiA8VTg3RjY+Cis8VTg2RDQ+IDxVODY5OD47PFU4NkI0Pjs8VTg3MTY+Cis8VTg2RDk+IDxVOUYwMz4KKzxVODZFRT4gPFU4ODNCPgorPFU4NkVGPiA8VTg3QTc+Cis8VTg2RjA+IDxVODdDND4KKzxVODZGMT4gPFU4NkZBPgorPFU4NkYyPiA8VTg3RUY+Cis8VTg2RjM+IDxVODc4ND4KKzxVODZGND4gPFU4ODEwPgorPFU4NkZBPiA8VTg2RjE+Cis8VTg2RkI+IDxVODcxNT4KKzxVODZGRD4gPFU4QzlEPjs8VThEMUQ+Cis8VTg3MDI+IDxVODgyRD4KKzxVODcwNj4gPFU4NkFDPgorPFU4NzBCPiA8VTg3ODI+Cis8VTg3MTU+IDxVODZGQj4KKzxVODcxNj4gPFU4NkQ0PgorPFU4NzE3PiA8VTg3Nzg+Cis8VTg3MjE+IDxVODc0Qj47PFU4ODFGPgorPFU4NzJGPiA8VTg2OEM+Cis8VTg3Mzk+IDxVODY4Qj4KKzxVODczRD4gPFU5QjRFPgorPFU4NzQ1PiA8VTg2OTU+OzxVODgzNj47PFU4ODNBPgorPFU4NzQ3PiA8VTg3N0Y+OzxVODgwNT4KKzxVODc0OD4gPFU4N0M4PgorPFU4NzQ5PiA8VTg3RUM+Cis8VTg3NEI+IDxVODcyMT47PFU4ODFGPgorPFU4NzRFPiA8VTg4MEQ+Cis8VTg3NTU+IDxVODY4MD4KKzxVODc1Rj4gPFU3MzJDPgorPFU4NzYxPiA8VTg4MTU+Cis8VTg3NjY+IDxVODY3RT4KKzxVODc2OD4gPFU4NjcxPgorPFU4NzZGPiA8VTczM0Y+Cis8VTg3NzE+IDxVODY3Qj4KKzxVODc3OD4gPFU4NzE3PgorPFU4NzdDPiA8VTg3QkI+Cis8VTg3N0U+IDxVODgxMT4KKzxVODc3Rj4gPFU4NzQ3Pjs8VTg4MDU+Cis8VTg3ODA+IDxVODdCRj4KKzxVODc4Mj4gPFU4NzBCPgorPFU4Nzg0PiA8VTg2RjM+Cis8VTg3ODg+IDxVODY5Nj4KKzxVODc4RD4gPFU4NzhFPgorPFU4NzhFPiA8VTg3OEQ+Cis8VTg3OTg+IDxVODdGQj4KKzxVODc5OT4gPFU4ODI3Pjs8VTg4Mzk+Cis8VTg3OUU+IDxVODY4Mj4KKzxVODdBMT4gPFU4NjhBPgorPFU4N0EyPiA8VTg0MjQ+OzxVODZDRD4KKzxVODdBND4gPFU2NTk0Pjs8VTY1OUU+Cis8VTg3QTc+IDxVODZFRj4KKzxVODdBOD4gPFU4N0NFPgorPFU4N0JCPiA8VTg3N0M+Cis8VTg3QkY+IDxVODc4MD4KKzxVODdDMT4gPFU4NjhBPgorPFU4N0M0PiA8VTg2RjA+Cis8VTg3QzY+IDxVODdDNz4KKzxVODdDNz4gPFU4N0M2PgorPFU4N0M4PiA8VTg3NDg+Cis8VTg3Q0U+IDxVODdBOD4KKzxVODdDRj4gPFU4ODI4PgorPFU4N0QyPiA8VTg4MEU+Cis8VTg3RTM+IDxVODY2RT4KKzxVODdFQz4gPFU4NzQ5PgorPFU4N0VGPiA8VTg2RjI+Cis8VTg3RjI+IDxVODY2Qj4KKzxVODdGNj4gPFU4NkNGPgorPFU4N0Y4PiA8VTg4MjE+Cis8VTg3Rjk+IDxVODgwRj4KKzxVODdGQj4gPFU4NjgxPjs8VTg3OTg+Cis8VTg4MDE+IDxVODY4Mz4KKzxVODgwNT4gPFU4NzQ3Pjs8VTg3N0Y+Cis8VTg4MDY+IDxVODY3Rj4KKzxVODgwNz4gPFU4NkNFPjs8VTg4MjM+Cis8VTg4MEQ+IDxVODc0RT4KKzxVODgwRT4gPFU4N0QyPgorPFU4ODBGPiA8VTg3Rjk+Cis8VTg4MTA+IDxVODZGND4KKzxVODgxMT4gPFU4NzdFPgorPFU4ODEyPiA8VTdENzg+OzxVN0U2RD47PFU4MzI3PgorPFU4ODE0PiA8VTg2OUQ+Cis8VTg4MTU+IDxVODc2MT4KKzxVODgxRj4gPFU4NzIxPjs8VTg3NEI+Cis8VTg4MjE+IDxVODdGOD4KKzxVODgyMj4gPFU2MEY3PgorPFU4ODIzPiA8VTg2Q0U+OzxVODgwNz4KKzxVODgyNz4gPFU4Nzk5Pjs8VTg4Mzk+Cis8VTg4Mjg+IDxVODdDRj4KKzxVODgyRD4gPFU4NzAyPgorPFU4ODMxPiA8VTg2Q0E+Cis8VTg4MzY+IDxVODY5NT47PFU4NzQ1Pjs8VTg4M0E+Cis8VTg4Mzk+IDxVODc5OT47PFU4ODI3PgorPFU4ODNBPiA8VTg2OTU+OzxVODc0NT47PFU4ODM2PgorPFU4ODNCPiA8VTg2RUU+Cis8VTg4M0M+IDxVNzM4Mz47PFU4QzlDPgorPFU4ODQyPiA8VTg4NDQ+Cis8VTg4NDQ+IDxVODg0Mj4KKzxVODg0NT4gPFU5MUMxPgorPFU4ODQ2PiA8VTRFNTE+OzxVNEYxNz47PFU3NzNFPgorPFU4ODQ5PiA8VTU0QUY+OzxVNTU4MD4KKzxVODg0QT4gPFU4NTExPgorPFU4ODUzPiA8VTY3MkY+Cis8VTg4NTQ+IDxVNTU2Mz47PFU4ODU4Pjs8VTkyOUM+Cis8VTg4NTU+IDxVNTQwQz4KKzxVODg1Nj4gPFU1REY3PgorPFU4ODU4PiA8VTU1NjM+OzxVODg1ND47PFU5MjlDPgorPFU4ODVBPiA8VTgwRTE+Cis8VTg4NUI+IDxVNTM2Qj47PFU4ODVFPgorPFU4ODVDPiA8VTU2NzU+OzxVODg1Rj47PFU5MDUzPgorPFU4ODVEPiA8VTUxQjI+Cis8VTg4NUU+IDxVNTM2Qj47PFU4ODVCPgorPFU4ODVGPiA8VTU2NzU+OzxVODg1Qz47PFU5MDUzPgorPFU4ODYzPiA8VTg4NjQ+Cis8VTg4NjQ+IDxVODg2Mz4KKzxVODg2NT4gPFU4OERDPgorPFU4ODY4PiA8VTkzMzY+Cis8VTg4NkM+IDxVODk2Rj4KKzxVODg2RT4gPFU4ODlFPgorPFU4ODc5PiA8VTUzRUE+Cis8VTg4N0Q+IDxVODhCNT4KKzxVODg4ND4gPFU4OTU2PgorPFU4ODg1PiA8VTVBQ0I+OzxVNUIxRD47PFU4OENBPgorPFU4ODg2PiA8VTg5MTg+Cis8VTg4OEI+IDxVNUUxMj4KKzxVODg5Qz4gPFU4OTZBPjs8VTk3Qzg+OzxVOTdFND4KKzxVODg5RT4gPFU4ODZFPgorPFU4OEFDPiA8VTZCRDM+OzxVODBCMj4KKzxVODhBRD4gPFU4OTcyPgorPFU4OEFFPiA8VTlFRjk+Cis8VTg4QUY+IDxVODk0Rj4KKzxVODhCND4gPFU3RDVEPjs8VTg4RTQ+Cis8VTg4QjU+IDxVODg3RD4KKzxVODhCNz4gPFU4OENDPgorPFU4OEM1PiA8VTg4REQ+Cis8VTg4QzY+IDxVODk2MD4KKzxVODhDOD4gPFU4OTBDPgorPFU4OENBPiA8VTg4ODU+Cis8VTg4Q0M+IDxVODhCNz4KKzxVODhDRj4gPFU4OEUxPjs8VTkxQ0M+Cis8VTg4RDk+IDxVODhFMD4KKzxVODhEQz4gPFU4ODY1PgorPFU4OEREPiA8VTg4QzU+Cis8VTg4RTA+IDxVODhEOT4KKzxVODhFMT4gPFU4OENGPjs8VTkxQ0M+Cis8VTg4RTI+IDxVODkzMz4KKzxVODhFMz4gPFU4OTVEPgorPFU4OEU0PiA8VTg4QjQ+OzxVODkzMj4KKzxVODhFNT4gPFU4OTQ3PgorPFU4OEU2PiA8VTg5MTI+OzxVODk0Mz4KKzxVODhFOD4gPFU2NzA3PgorPFU4OEVEPiA8VTg5MkI+Cis8VTg4RjQ+IDxVODhGNT4KKzxVODhGNT4gPFU4OEY0PgorPFU4OEZEPiA8VTUyMzY+Cis8VTg5MDc+IDxVNTkwRD4KKzxVODkwQT4gPFU2MEZDPgorPFU4OTBDPiA8VTg4Qzg+Cis8VTg5MEU+IDxVODkwRj4KKzxVODkwRj4gPFU4OTBFPgorPFU4OTEyPiA8VTg4RTY+OzxVODk0Mz4KKzxVODkxMz4gPFU3REU1PgorPFU4OTE4PiA8VTg4ODY+Cis8VTg5MUI+IDxVODkzOD4KKzxVODkxRD4gPFU4OTRDPgorPFU4OTJCPiA8VTg4RUQ+Cis8VTg5MzI+IDxVODhFND4KKzxVODkzMz4gPFU4OEUyPgorPFU4OTM0PiA8VTg5NjQ+Cis8VTg5Mzg+IDxVODkxQj4KKzxVODkzQj4gPFU0RUI1PgorPFU4OTQzPiA8VTg4RTY+OzxVODkxMj4KKzxVODk0Nz4gPFU4OEU1PgorPFU4OTRDPiA8VTg5MUQ+Cis8VTg5NEQ+IDxVNjc0Mj4KKzxVODk0Rj4gPFU4OEFGPgorPFU4OTU1PiA8VTg5NzQ+Cis8VTg5NTY+IDxVODg4ND4KKzxVODk1RD4gPFU4OEUzPgorPFU4OTYwPiA8VTg4QzY+Cis8VTg5NjQ+IDxVODkzND4KKzxVODk2QT4gPFU4ODlDPgorPFU4OTZDPiA8VTY0NDY+Cis8VTg5NkQ+IDxVNjRGNz4KKzxVODk2Rj4gPFU4ODZDPgorPFU4OTcyPiA8VTg4QUQ+Cis8VTg5NzQ+IDxVODk1NT47PFU4OTdEPgorPFU4OTdEPiA8VTg5NzQ+Cis8VTg5N0Y+IDxVNTM2ND47PFU1MzY1PgorPFU4OTg2PiA8VTU5MEQ+OzxVNUZBOT4KKzxVODk4Nz4gPFU5NzM4PgorPFU4OTg4PiA8VTY4Mzg+Cis8VTg5ODk+IDxVN0Y4Nz47PFU3Rjg4Pjs8VTg5OEE+Cis8VTg5OEE+IDxVN0Y4MT47PFU3Rjg3Pjs8VTdGODg+OzxVODk4OT4KKzxVODk4Qj4gPFU4OUMxPgorPFU4OThEPiA8VTVGMDE+Cis8VTg5OEU+IDxVODlDMz4KKzxVODk4Rj4gPFU4OUM0PgorPFU4OTkwPiA8VTg5OUE+OzxVODlCQT47PFU4OUM5PgorPFU4OTkzPiA8VTg5OTQ+OzxVODlDNT4KKzxVODk5ND4gPFU4OTkzPjs8VTg5QzU+Cis8VTg5OTY+IDxVNzcwRT47PFU4OUM2PgorPFU4OTk4PiA8VTg5Qzc+Cis8VTg5OUE+IDxVODk5MD47PFU4OUJBPjs8VTg5Qzk+Cis8VTg5QTE+IDxVODlDQj4KKzxVODlBNT4gPFU4OUNEPgorPFU4OUE2PiA8VTg5Q0U+Cis8VTg5QTc+IDxVODlCRD47PFU4OUM4PgorPFU4OUE5PiA8VTc3Nzk+Cis8VTg5QUE+IDxVNEVCMj4KKzxVODlBQz4gPFU4OUNBPgorPFU4OUFGPiA8VTg5Q0Y+Cis8VTg5QjA+IDxVODlCNz4KKzxVODlCMj4gPFU4OUQwPgorPFU4OUIzPiA8VTg5QzA+OzxVODlDMj4KKzxVODlCNj4gPFU4OUJDPgorPFU4OUI3PiA8VTg5QjA+OzxVODlEMT4KKzxVODlCQT4gPFU2NThEPjs8VTg5OTA+OzxVODk5QT47PFU4OUM5PgorPFU4OUJDPiA8VTg5QjY+Cis8VTg5QkQ+IDxVODlBNz47PFU4OUM4PgorPFU4OUJGPiA8VTg5Q0M+Cis8VTg5QzA+IDxVODlCMz47PFU4OUMyPgorPFU4OUMxPiA8VTg5OEI+Cis8VTg5QzI+IDxVODlCMz47PFU4OUMwPgorPFU4OUMzPiA8VTg5OEU+Cis8VTg5QzQ+IDxVODk4Rj4KKzxVODlDNT4gPFU4OTkzPjs8VTg5OTQ+Cis8VTg5QzY+IDxVNzcwRT47PFU4OTk2PgorPFU4OUM3PiA8VTg5OTg+Cis8VTg5Qzg+IDxVODlBNz47PFU4OUJEPgorPFU4OUM5PiA8VTg5OTA+OzxVODk5QT47PFU4OUJBPgorPFU4OUNBPiA8VTg5QUM+Cis8VTg5Q0I+IDxVODlBMT4KKzxVODlDQz4gPFU4OUJGPgorPFU4OUNEPiA8VTg5QTU+Cis8VTg5Q0U+IDxVODlBNj4KKzxVODlDRj4gPFU4OUFGPgorPFU4OUQwPiA8VTg5QjI+Cis8VTg5RDE+IDxVODlCNz4KKzxVODlEND4gPFU3QjRCPgorPFU4OUQ3PiA8VTg5RUY+OzxVODlGNj4KKzxVODlERD4gPFU2MkI1PgorPFU4OURFPiA8VTg5RjQ+Cis8VTg5RTM+IDxVODlFNz4KKzxVODlFNj4gPFU4OUY4PgorPFU4OUU3PiA8VTg5RTM+Cis8VTg5RUY+IDxVODlENz47PFU4OUY2PgorPFU4OUY0PiA8VTg5REU+Cis8VTg5RjY+IDxVODlENz47PFU4OUVGPgorPFU4OUY4PiA8VTg5RTY+Cis8VTg5Rjk+IDxVODlGRD47PFU4OUZGPgorPFU4OUZEPiA8VTg5Rjk+OzxVODlGRj4KKzxVODlGRj4gPFU4OUY5Pjs8VTg5RkQ+Cis8VThBMDA+IDxVOEEwMT47PFU4QkEwPgorPFU4QTAxPiA8VThBMDA+OzxVOEJBMD4KKzxVOEEwMj4gPFU4QkEyPgorPFU4QTAzPiA8VThCQTM+Cis8VThBMDg+IDxVOEJBMT4KKzxVOEEwQT4gPFU4QkFGPgorPFU4QTBDPiA8VThCQTc+Cis8VThBMEU+IDxVOEJBOD4KKzxVOEExMD4gPFU4QkE2PgorPFU4QTEyPiA8VThCQjE+Cis8VThBMTM+IDxVOEJBRD4KKzxVOEExNT4gPFU4QkFBPgorPFU4QTE2PiA8VThCQUI+Cis8VThBMTc+IDxVNjI1OD47PFU4QkFDPgorPFU4QTE4PiA8VThCQjA+Cis8VThBMUE+IDxVOEFCRT4KKzxVOEExQj4gPFU4QkI5PgorPFU4QTFEPiA8VThCQjY+Cis8VThBMUY+IDxVOEJCQz4KKzxVOEEyMD4gPFU3N0U0Pjs8VTc3RTc+Cis8VThBMjE+IDxVNTQxRj47PFU1NjU2PgorPFU4QTIyPiA8VTZCMjM+Cis8VThBMjM+IDxVOEJDMD4KKzxVOEEyNT4gPFU4QkI3PgorPFU4QTI5PiA8VThCQkI+Cis8VThBMkE+IDxVOEJCRj4KKzxVOEEyQj4gPFU0RkUxPgorPFU4QTJEPiA8VThCQkU+Cis8VThBMzE+IDxVOEJCOD4KKzxVOEEzMz4gPFU4QjZGPjs8VThCRDE+Cis8VThBMzQ+IDxVOEJDOT4KKzxVOEEzNj4gPFU1NEVDPjs8VThCQzM+Cis8VThBM0E+IDxVOEJDQT4KKzxVOEEzQj4gPFU2Q0U4PgorPFU4QTNDPiA8VThCNDk+OzxVOEJDMT4KKzxVOEEzRD4gPFU4QTZDPgorPFU4QTQxPiA8VThCQzI+Cis8VThBNDY+IDxVNTQ2Nz47PFU4QkNCPgorPFU4QTRCPiA8VTU0NkE+OzxVNTQ5Mj4KKzxVOEE0RD4gPFU1NDZEPgorPFU4QTRFPiA8VThCQjU+Cis8VThBNTA+IDxVOEJDOD4KKzxVOEE1Mj4gPFU4QkQyPgorPFU4QTU0PiA8VThCQ0Y+Cis8VThBNTU+IDxVOEJDND4KKzxVOEE1Nj4gPFU4QkQwPgorPFU4QTU3PiA8VThCQzc+Cis8VThBNTg+IDxVOEJDRT4KKzxVOEE1Qj4gPFU4QkM1PgorPFU4QTVFPiA8VThCQ0Q+Cis8VThBNUY+IDxVOEI4Qj4KKzxVOEE2MD4gPFU1NDhGPgorPFU4QTYxPiA8VThCRTk+Cis8VThBNjI+IDxVOEJFMj4KKzxVOEE2Mz4gPFU4QkUzPgorPFU4QTY2PiA8VThCRDU+Cis8VThBNjc+IDxVNUJERj4KKzxVOEE2OT4gPFU4QkQ3PgorPFU4QTZCPiA8VThCRTc+Cis8VThBNkM+IDxVOEEzRD47PFU4QkRGPgorPFU4QTZEPiA8VThCRTE+Cis8VThBNkU+IDxVOEJFMD4KKzxVOEE3MD4gPFU4QkQ4PgorPFU4QTcxPiA8VThCNkU+OzxVOEJERD4KKzxVOEE3Mj4gPFU4QkU1PgorPFU4QTczPiA8VThCRTY+Cis8VThBNzU+IDxVOEJEQz4KKzxVOEE3Qz4gPFU4QkQ5PgorPFU4QTdGPiA8VThCRDY+Cis8VThBODQ+IDxVOEJEND4KKzxVOEE4NT4gPFU4QkRCPgorPFU4QTg2PiA8VThCRDM+Cis8VThBODc+IDxVNTkzOD4KKzxVOEE4OT4gPFU4QjdEPgorPFU4QThBPiA8VThCMDQ+Cis8VThBOEM+IDxVNUZENz4KKzxVOEE4RD4gPFU4QkE0PgorPFU4QTkxPiA8VThCRjM+Cis8VThBOTI+IDxVOEJGNj4KKzxVOEE5NT4gPFU4QkRFPgorPFU4QTk2PiA8VTYwOTY+OzxVNjEwMj4KKzxVOEE5OD4gPFU1NTAwPjs8VThCRjE+Cis8VThBOUE+IDxVOEJFRT4KKzxVOEE5RT4gPFU4QkVEPgorPFU4QUEwPiA8VThCREE+Cis8VThBQTE+IDxVOEJFQj4KKzxVOEFBMz4gPFU4QkVDPgorPFU4QUE0PiA8VThCRUY+Cis8VThBQTU+IDxVOEJGMD4KKzxVOEFBNj4gPFU4QkY1PgorPFU4QUE4PiA8VThCRjI+Cis8VThBQUE+IDxVOEFBQz47PFU4QkY0PgorPFU4QUFDPiA8VThBQUE+OzxVOEJGND4KKzxVOEFBRD4gPFU4QjgwPjs8VThCRkI+Cis8VThBQUY+IDxVNTUzMT4KKzxVOEFCMD4gPFU4QzAxPgorPFU4QUIyPiA8VThCRkU+Cis8VThBQjY+IDxVOEMwNz4KKzxVOEFCOT4gPFU4QkZEPgorPFU4QUJDPiA8VTdBRTk+OzxVOEMwQT4KKzxVOEFCRT4gPFU4QTFBPgorPFU4QUJGPiA8VThDMDM+Cis8VThBQzI+IDxVOEMwND4KKzxVOEFDND4gPFU4QzA2PgorPFU4QUM3PiA8VThDMDg+Cis8VThBQzk+IDxVOEJGRj4KKzxVOEFDQj4gPFU4QkY3PgorPFU4QUNDPiA8VThBRUI+OzxVOEMwRj4KKzxVOEFDRD4gPFU4QkU0PgorPFU4QUNGPiA8VThCRjk+Cis8VThBRDE+IDxVOEJGQz4KKzxVOEFEMj4gPFU4QzA1PgorPFU4QUQ2PiA8VThCQkE+Cis8VThBRDc+IDxVOEMwMj4KKzxVOEFEQj4gPFU4QzAwPgorPFU4QURDPiA8VThDMEQ+Cis8VThBREQ+IDxVOEMxRT4KKzxVOEFERT4gPFU4QzFEPgorPFU4QUUwPiA8VThBRkM+OzxVOEMxNj4KKzxVOEFFMT4gPFU4QjFBPjs8VThDMjU+Cis8VThBRTI+IDxVOEJFOD4KKzxVOEFFND4gPFU4QjhEPjs8VThDMTQ+Cis8VThBRTY+IDxVOEMxQj4KKzxVOEFFNz4gPFU4QzEwPgorPFU4QUU5PiA8VThCNUM+Cis8VThBRUI+IDxVOEFDQz47PFU4QzBGPgorPFU4QUVDPiA8VTU0MkY+OzxVNTUxOD47PFU1NTUzPjs8VTU1NTQ+OzxVNTU1Rj47PFU5NUQ5PgorPFU4QUVEPiA8VThDMTU+Cis8VThBRUU+IDxVOEMxOD4KKzxVOEFGMT4gPFU4QkIzPgorPFU4QUYzPiA8VTY2OTc+OzxVOEMxOT4KKzxVOEFGNj4gPFU4QzBDPgorPFU4QUY3PiA8VThCQkQ+OzxVOThBOD4KKzxVOEFGOD4gPFU4QkY4PgorPFU4QUZBPiA8VThDMUE+Cis8VThBRkM+IDxVOEFFMD47PFU4QzE2PgorPFU4QUZFPiA8VThCRkE+Cis8VThCMDA+IDxVOEMwQj4KKzxVOEIwMT4gPFU4QzEyPgorPFU4QjAyPiA8VThDMTM+Cis8VThCMDQ+IDxVOEE4QT4KKzxVOEIwNT4gPFU4QkNDPgorPFU4QjBBPiA8VThDMEU+Cis8VThCMEM+IDxVNkI0Qz4KKzxVOEIwRT4gPFU4QzFDPgorPFU4QjEwPiA8VThDMjc+Cis8VThCMTQ+IDxVOEMxMT4KKzxVOEIxNj4gPFU4QzIxPgorPFU4QjE3PiA8VThDMjQ+Cis8VThCMTk+IDxVOEMyNj4KKzxVOEIxQT4gPFU4QUUxPjs8VThDMjU+Cis8VThCMUI+IDxVOEJCMj4KKzxVOEIxRD4gPFU4QzIyPgorPFU4QjIwPiA8VThCMjE+OzxVOEMyMz4KKzxVOEIyMT4gPFU4QjIwPjs8VThDMjM+Cis8VThCMjg+IDxVOEMxRj4KKzxVOEIyQT4gPFU1NTQ2PgorPFU4QjJCPiA8VThCODE+OzxVOEMyQT4KKzxVOEIyQz4gPFU4QzJDPgorPFU4QjJEPiA8VThCN0U+OzxVOEMyQj4KKzxVOEIzMD4gPFU1NUY5PgorPFU4QjMzPiA8VThCQjQ+Cis8VThCMzk+IDxVOEMyOD4KKzxVOEIzQz4gPFU1NDdDPjs8VTU2MTE+Cis8VThCM0U+IDxVOEMyOT4KKzxVOEI0MT4gPFU1NEQ3Pjs8VTU2Mjk+Cis8VThCNDk+IDxVOEEzQz47PFU4QkMxPgorPFU4QjRDPiA8VThCQjk+Cis8VThCNEU+IDxVOEMzMj4KKzxVOEI0Rj4gPFU4QkE1PgorPFU4QjUwPiA8VTU2NDI+Cis8VThCNTY+IDxVOEI1Qj47PFU4QzJFPgorPFU4QjU4PiA8VThCQzY+Cis8VThCNTk+IDxVOEMyRj4KKzxVOEI1QT4gPFU4QzJEPgorPFU4QjVCPiA8VThCNTY+OzxVOEMyRT4KKzxVOEI1Qz4gPFU4QUU5Pjs8VThDMzE+Cis8VThCNUY+IDxVNTY2QT4KKzxVOEI2QT4gPFU4NTNDPjs8VTg1Rjk+Cis8VThCNkI+IDxVNTY2MT47PFU4QzM1PgorPFU4QjZEPiA8VTZCQzE+Cis8VThCNkU+IDxVOEE3MT47PFU4QkREPgorPFU4QjZGPiA8VThBMzM+OzxVOEJEMT4KKzxVOEI3MD4gPFU4QkFFPgorPFU4QjcxPiA8VTU1ODQ+Cis8VThCNzI+IDxVOEI5Mz47PFU4QkE5PgorPFU4Qjc0PiA8VThDMzQ+Cis8VThCNzc+IDxVNjJBND4KKzxVOEI3OD4gPFU4QkVBPgorPFU4QjdDPiA8VTc2RDE+OzxVNzZFMz4KKzxVOEI3RD4gPFU4QTg5PgorPFU4QjdFPiA8VThCMkQ+OzxVOEMyQj4KKzxVOEI4MD4gPFU4QUFEPjs8VThCRkI+Cis8VThCODE+IDxVOEIyQj47PFU4QzJBPgorPFU4QjgzPiA8VThCOUE+OzxVOEQ1RT4KKzxVOEI4NT4gPFU4QzA5PgorPFU4QjhBPiA8VTUzRDg+OzxVNTkwOT4KKzxVOEI4Qj4gPFU4QTVGPgorPFU4QjhDPiA8VTVCQjQ+OzxVOTFCQz4KKzxVOEI4RD4gPFU4QUU0Pjs8VThDMTQ+Cis8VThCOEU+IDxVNEVDNz47PFU4QjkwPjs8VTk2RTA+Cis8VThCOTA+IDxVOEI4RT47PFU5NkUwPgorPFU4QjkyPiA8VThDMTc+Cis8VThCOTM+IDxVOEI3Mj47PFU4QkE5PgorPFU4Qjk1PiA8VThDMzA+Cis8VThCOTY+IDxVOEMzNj4KKzxVOEI5QT4gPFU4QjgzPjs8VThENUU+Cis8VThCOUM+IDxVOEMyMD4KKzxVOEI5RT4gPFU4QzMzPgorPFU4QkEwPiA8VThBMDA+OzxVOEEwMT4KKzxVOEJBMT4gPFU4QTA4PgorPFU4QkEyPiA8VThBMDI+Cis8VThCQTM+IDxVOEEwMz4KKzxVOEJBND4gPFU4QThEPgorPFU4QkE1PiA8VThCNEY+Cis8VThCQTY+IDxVOEExMD4KKzxVOEJBNz4gPFU4QTBDPgorPFU4QkE4PiA8VThBMEU+Cis8VThCQTk+IDxVOEI3Mj47PFU4QjkzPgorPFU4QkFBPiA8VThBMTU+Cis8VThCQUI+IDxVOEExNj4KKzxVOEJBQz4gPFU2MjU4Pjs8VThBMTc+Cis8VThCQUQ+IDxVOEExMz4KKzxVOEJBRT4gPFU4QjcwPgorPFU4QkFGPiA8VThBMEE+Cis8VThCQjA+IDxVOEExOD4KKzxVOEJCMT4gPFU4QTEyPgorPFU4QkIyPiA8VThCMUI+Cis8VThCQjM+IDxVOEFGMT4KKzxVOEJCND4gPFU4QjMzPgorPFU4QkI1PiA8VThBNEU+Cis8VThCQjY+IDxVOEExRD4KKzxVOEJCNz4gPFU4QTI1PgorPFU4QkI4PiA8VThBMzE+Cis8VThCQjk+IDxVOEExQj47PFU4QjRDPgorPFU4QkJBPiA8VThBRDY+Cis8VThCQkI+IDxVOEEyOT4KKzxVOEJCQz4gPFU4QTFGPgorPFU4QkJEPiA8VThBRjc+OzxVOThBOD4KKzxVOEJCRT4gPFU4QTJEPgorPFU4QkJGPiA8VThBMkE+Cis8VThCQzA+IDxVOEEyMz4KKzxVOEJDMT4gPFU4QTNDPjs8VThCNDk+Cis8VThCQzI+IDxVOEE0MT4KKzxVOEJDMz4gPFU4QTM2PgorPFU4QkM0PiA8VThBNTU+Cis8VThCQzU+IDxVOEE1Qj4KKzxVOEJDNj4gPFU4QjU4PgorPFU4QkM3PiA8VThBNTc+Cis8VThCQzg+IDxVOEE1MD4KKzxVOEJDOT4gPFU4QTM0PgorPFU4QkNBPiA8VThBM0E+Cis8VThCQ0I+IDxVOEE0Nj4KKzxVOEJDQz4gPFU4QjA1PgorPFU4QkNEPiA8VThBNUU+Cis8VThCQ0U+IDxVOEE1OD4KKzxVOEJDRj4gPFU4QTU0PgorPFU4QkQwPiA8VThBNTY+Cis8VThCRDE+IDxVOEEzMz47PFU4QjZGPgorPFU4QkQyPiA8VThBNTI+Cis8VThCRDM+IDxVOEE4Nj4KKzxVOEJEND4gPFU4QTg0PgorPFU4QkQ1PiA8VThBNjY+Cis8VThCRDY+IDxVOEE3Rj4KKzxVOEJENz4gPFU4QTY5PgorPFU4QkQ4PiA8VThBNzA+Cis8VThCRDk+IDxVOEE3Qz4KKzxVOEJEQT4gPFU4QUEwPgorPFU4QkRCPiA8VThBODU+Cis8VThCREM+IDxVOEE3NT4KKzxVOEJERD4gPFU4QTcxPjs8VThCNkU+Cis8VThCREU+IDxVOEE5NT4KKzxVOEJERj4gPFU4QTZDPgorPFU4QkUwPiA8VThBNkU+Cis8VThCRTE+IDxVOEE2RD4KKzxVOEJFMj4gPFU4QTYyPgorPFU4QkUzPiA8VThBNjM+Cis8VThCRTQ+IDxVOEFDRD4KKzxVOEJFNT4gPFU4QTcyPgorPFU4QkU2PiA8VThBNzM+Cis8VThCRTc+IDxVOEE2Qj4KKzxVOEJFOD4gPFU4QUUyPgorPFU4QkU5PiA8VThBNjE+Cis8VThCRUE+IDxVOEI3OD4KKzxVOEJFQj4gPFU4QUExPgorPFU4QkVDPiA8VThBQTM+Cis8VThCRUQ+IDxVOEE5RT4KKzxVOEJFRT4gPFU4QTlBPgorPFU4QkVGPiA8VTYwOUU+OzxVOEFBND4KKzxVOEJGMD4gPFU4QUE1PgorPFU4QkYxPiA8VTU1MDA+OzxVOEE5OD4KKzxVOEJGMj4gPFU4QUE4PgorPFU4QkYzPiA8VThBOTE+Cis8VThCRjQ+IDxVOEFBQT47PFU4QUFDPgorPFU4QkY1PiA8VThBQTY+Cis8VThCRjY+IDxVOEE5Mj4KKzxVOEJGNz4gPFU4QUNCPgorPFU4QkY4PiA8VThBRjg+Cis8VThCRjk+IDxVOEFDRj4KKzxVOEJGQT4gPFU4QUZFPgorPFU4QkZCPiA8VThBQUQ+OzxVOEI4MD4KKzxVOEJGQz4gPFU4QUQxPgorPFU4QkZEPiA8VThBQjk+Cis8VThCRkU+IDxVOEFCMj4KKzxVOEJGRj4gPFU4QUM5PgorPFU4QzAwPiA8VThBREI+Cis8VThDMDE+IDxVOEFCMD4KKzxVOEMwMj4gPFU4QUQ3PgorPFU4QzAzPiA8VThBQkY+Cis8VThDMDQ+IDxVOEFDMj4KKzxVOEMwNT4gPFU4QUQyPgorPFU4QzA2PiA8VThBQzQ+Cis8VThDMDc+IDxVOEFCNj4KKzxVOEMwOD4gPFU4QUM3PgorPFU4QzA5PiA8VThCODU+Cis8VThDMEE+IDxVN0FFOT47PFU4QUJDPgorPFU4QzBCPiA8VThCMDA+Cis8VThDMEM+IDxVOEFGNj4KKzxVOEMwRD4gPFU4QURDPgorPFU4QzBFPiA8VThCMEE+Cis8VThDMEY+IDxVOEFDQz47PFU4QUVCPgorPFU4QzEwPiA8VThBRTc+Cis8VThDMTE+IDxVOEIxND4KKzxVOEMxMj4gPFU4QjAxPgorPFU4QzEzPiA8VThCMDI+Cis8VThDMTQ+IDxVOEFFND47PFU4QjhEPgorPFU4QzE1PiA8VThBRUQ+Cis8VThDMTY+IDxVOEFFMD47PFU4QUZDPgorPFU4QzE3PiA8VThCOTI+Cis8VThDMTg+IDxVOEFFRT4KKzxVOEMxOT4gPFU2Njk3Pjs8VThBRjM+Cis8VThDMUE+IDxVOEFGQT4KKzxVOEMxQj4gPFU4QUU2PgorPFU4QzFDPiA8VThCMEU+Cis8VThDMUQ+IDxVOEFERT4KKzxVOEMxRT4gPFU4QUREPgorPFU4QzFGPiA8VThCMjg+Cis8VThDMjA+IDxVOEI5Qz4KKzxVOEMyMT4gPFU4QjE2PgorPFU4QzIyPiA8VThCMUQ+Cis8VThDMjM+IDxVOEIyMD47PFU4QjIxPgorPFU4QzI0PiA8VThCMTc+Cis8VThDMjU+IDxVOEFFMT47PFU4QjFBPgorPFU4QzI2PiA8VThCMTk+Cis8VThDMjc+IDxVOEIxMD4KKzxVOEMyOD4gPFU4QjM5PgorPFU4QzI5PiA8VThCM0U+Cis8VThDMkE+IDxVOEIyQj47PFU4QjgxPgorPFU4QzJCPiA8VThCMkQ+OzxVOEI3RT4KKzxVOEMyQz4gPFU4QjJDPgorPFU4QzJEPiA8VThCNUE+Cis8VThDMkU+IDxVOEI1Nj47PFU4QjVCPgorPFU4QzJGPiA8VThCNTk+Cis8VThDMzA+IDxVOEI5NT4KKzxVOEMzMT4gPFU4QjVDPgorPFU4QzMyPiA8VThCNEU+Cis8VThDMzM+IDxVOEI5RT4KKzxVOEMzND4gPFU4Qjc0PgorPFU4QzM1PiA8VThCNkI+Cis8VThDMzY+IDxVOEI5Nj4KKzxVOEMzNz4gPFU3QTQwPjs8VTdDRDM+Cis8VThDM0E+IDxVNUM4OD4KKzxVOEMzRj4gPFU2RTEzPjs8VTZFQUE+OzxVOEM0MD4KKzxVOEM0MD4gPFU2RTEzPjs8VTZFQUE+OzxVOEMzRj4KKzxVOEM0Nj4gPFU4MzczPgorPFU4QzQ4PiA8VTVDODI+Cis8VThDNEE+IDxVNEUzMD47PFU4QzUwPjs8VTk3M0I+OzxVOTc0QT4KKzxVOEM0RT4gPFU3QUQ2Pjs8VTdBRUE+Cis8VThDNTA+IDxVNEUzMD47PFU4QzRBPjs8VTk3M0I+OzxVOTc0QT4KKzxVOEM1Mz4gPFU4MjczPjs8VTgyNzY+OzxVODI3Nz47PFU4QzU0PgorPFU4QzU0PiA8VTgyNzM+OzxVODI3Nj47PFU4Mjc3Pjs8VThDNTM+Cis8VThDNTg+IDxVOEM1QT4KKzxVOEM1QT4gPFU4QzU4PgorPFU4QzY0PiA8VThDODc+Cis8VThDNkI+IDxVNEU4OD4KKzxVOEM2Qz4gPFU3MzJBPgorPFU4QzZFPiA8VThDNzY+Cis8VThDNzY+IDxVOEM2RT4KKzxVOEM3QT4gPFU3MkIyPgorPFU4QzdCPiA8VTcyQjQ+Cis8VThDN0M+IDxVOEM5ND4KKzxVOEM3RT4gPFU3MkM5PgorPFU4QzgyPiA8VTlGMjY+Cis8VThDODc+IDxVOEM2ND4KKzxVOEM4OT4gPFU3MkUyPgorPFU4QzhCPiA8VTcyQjQ+Cis8VThDOEM+IDxVNzY4Mz4KKzxVOEM4RD4gPFU3MkY4Pjs8VTczMEQ+Cis8VThDOEU+IDxVNzMwQT4KKzxVOEM5Mj4gPFU3MzJGPgorPFU4QzkzPiA8VTczMkI+Cis8VThDOTQ+IDxVOEM3Qz4KKzxVOEM5OD4gPFU3MzRGPgorPFU4QzlCPiA8VTczN0U+Cis8VThDOUM+IDxVNzM4Mz47PFU4ODNDPgorPFU4QzlEPiA8VTg2RkQ+OzxVOEQxRD4KKzxVOEM5RT4gPFU4RDFFPgorPFU4QzlGPiA8VTU0NTg+OzxVNTRFMT47PFU4RDIwPgorPFU4Q0EwPiA8VThEMUY+Cis8VThDQTE+IDxVNjIxRD47PFU4RDIyPgorPFU4Q0EyPiA8VThEMjE+Cis8VThDQTc+IDxVOEQyQj4KKzxVOENBOD4gPFU4RDI3PgorPFU4Q0E5PiA8VThEMjk+Cis8VThDQUE+IDxVOEQyQT4KKzxVOENBQj4gPFU4RDJGPgorPFU4Q0FDPiA8VThEMjM+Cis8VThDQUQ+IDxVNTI5NT47PFU4Q0VBPjs8VThEMjg+Cis8VThDQUU+IDxVNUYxMD47PFU4Q0IzPjs8VThEMzA+Cis8VThDQUY+IDxVOEQyRT4KKzxVOENCMD4gPFU4RDMzPgorPFU4Q0IyPiA8VThENDA+Cis8VThDQjM+IDxVNUYxMD47PFU4Q0FFPjs8VThEMzA+Cis8VThDQjQ+IDxVOEQzNT4KKzxVOENCNj4gPFU4RDJDPgorPFU4Q0I3PiA8VTRFNzA+Cis8VThDQjg+IDxVOEQzNz4KKzxVOENCQT4gPFU4RDM2PgorPFU4Q0JCPiA8VThEMzk+Cis8VThDQkM+IDxVOEQzND4KKzxVOENCRD4gPFU4RDNCPgorPFU4Q0JGPiA8VThEMzg+Cis8VThDQzA+IDxVOEQzQT4KKzxVOENDMT4gPFU4RDMyPgorPFU4Q0MyPiA8VThENDI+Cis8VThDQzM+IDxVOEQ0MT4KKzxVOENDND4gPFU4RDNGPgorPFU4Q0M1PiA8VThENDU+Cis8VThDQzc+IDxVOEQ0ND4KKzxVOENDOD4gPFU4RDNFPgorPFU4Q0M5PiA8VTUzNzk+OzxVNjA2ND4KKzxVOENDQT4gPFU4RDNDPgorPFU4Q0NCPiA8VTc2OEU+Cis8VThDQ0Q+IDxVOEQxMz47PFU4RDQzPgorPFU4Q0NFPiA8VThDRTQ+OzxVOEQzMT4KKzxVOENEMT4gPFU4RDQ4PgorPFU4Q0QyPiA8VThENEE+Cis8VThDRDM+IDxVNUJCRT47PFU4Q0Q0PgorPFU4Q0Q0PiA8VTVCQkU+OzxVOENEMz4KKzxVOENENT4gPFU4RDQ3PgorPFU4Q0Q2PiA8VThENEE+Cis8VThDRDk+IDxVOEQ1Mj4KKzxVOENEQT4gPFU4RDQ5PgorPFU4Q0RCPiA8VThEMEE+OzxVOEQ1RT4KKzxVOENEQz4gPFU4RDUwPgorPFU4Q0RFPiA8VThENEY+Cis8VThDRTA+IDxVOEQ1ND4KKzxVOENFMT4gPFU3RDlBPjs8VTdFOEM+OzxVOEQ1Mz4KKzxVOENFMj4gPFU4RDEyPjs8VThEMjQ+Cis8VThDRTM+IDxVNTM1Nj47PFU1OEYyPgorPFU4Q0U0PiA8VThDQ0U+OzxVOEQzMT4KKzxVOENFNj4gPFU4RDRCPgorPFU4Q0U3PiA8VThENTU+Cis8VThDRUE+IDxVNTI5NT47PFU4Q0FEPjs8VThEMjg+Cis8VThDRUI+IDxVOEQ0RD4KKzxVOENFQz4gPFU4RDI2PgorPFU4Q0VEPiA8VThENEM+Cis8VThDRjA+IDxVNTA0Nj4KKzxVOENGND4gPFU4RDU2Pjs8VTk4M0M+Cis8VThDRjU+IDxVOEQ1Nz4KKzxVOENGNz4gPFU4RDREPjs8VTlGNEU+Cis8VThDRkE+IDxVOEQ1QT4KKzxVOENGQj4gPFU4RDU5PgorPFU4Q0ZDPiA8VThEMkQ+Cis8VThDRkQ+IDxVOEQ1Qj4KKzxVOENGRT4gPFU4RDVDPgorPFU4RDAxPiA8VTY1NTc+OzxVOEQyNT4KKzxVOEQwND4gPFU4RDNEPgorPFU4RDA1PiA8VThENTg+Cis8VThEMDc+IDxVOEQ1Rj4KKzxVOEQwOD4gPFU4RDYwPgorPFU4RDBBPiA8VThDREI+OzxVOEQ1RT4KKzxVOEQwQj4gPFU1MDUwPjs8VThEMTc+OzxVOEQ1RD4KKzxVOEQwRD4gPFU4RDYxPgorPFU4RDBGPiA8VThENjI+Cis8VThEMTA+IDxVOEQ0Nj4KKzxVOEQxMj4gPFU4Q0UyPjs8VThEMjQ+Cis8VThEMTM+IDxVOENDRD47PFU4RDQzPgorPFU4RDE0PiA8VThENTE+Cis8VThEMTY+IDxVOEQ0RT4KKzxVOEQxNz4gPFU1MDUwPjs8VThEMEI+OzxVOEQ1RD4KKzxVOEQxQj4gPFU4RDYzPgorPFU4RDFDPiA8VThENDM+Cis8VThEMUQ+IDxVODZGRD47PFU4QzlEPgorPFU4RDFFPiA8VThDOUU+Cis8VThEMUY+IDxVOENBMD4KKzxVOEQyMD4gPFU1NDU4Pjs8VTU0RTE+OzxVOEM5Rj4KKzxVOEQyMT4gPFU4Q0EyPgorPFU4RDIyPiA8VTYyMUQ+OzxVOENBMT4KKzxVOEQyMz4gPFU4Q0FDPgorPFU4RDI0PiA8VThDRTI+OzxVOEQxMj4KKzxVOEQyNT4gPFU2NTU3Pjs8VThEMDE+Cis8VThEMjY+IDxVOENFQz4KKzxVOEQyNz4gPFU4Q0E4PgorPFU4RDI4PiA8VThDQUQ+OzxVOENFQT4KKzxVOEQyOT4gPFU4Q0E5PgorPFU4RDJBPiA8VThDQUE+Cis8VThEMkI+IDxVOENBNz4KKzxVOEQyQz4gPFU4Q0I2PgorPFU4RDJEPiA8VThDRkM+Cis8VThEMkU+IDxVOENBRj4KKzxVOEQyRj4gPFU4Q0FCPgorPFU4RDMwPiA8VTVGMTA+OzxVOENBRT47PFU4Q0IzPgorPFU4RDMxPiA8VThDQ0U+OzxVOENFND4KKzxVOEQzMj4gPFU4Q0MxPgorPFU4RDMzPiA8VThDQjA+Cis8VThEMzQ+IDxVOENCQz4KKzxVOEQzNT4gPFU4Q0I0PgorPFU4RDM2PiA8VThDQkE+Cis8VThEMzc+IDxVOENCOD4KKzxVOEQzOD4gPFU4Q0JGPgorPFU4RDM5PiA8VThDQkI+Cis8VThEM0E+IDxVOENDMD4KKzxVOEQzQj4gPFU4Q0JEPgorPFU4RDNDPiA8VThDQ0E+Cis8VThEM0Q+IDxVOEQwND4KKzxVOEQzRT4gPFU4Q0M4PgorPFU4RDNGPiA8VThDQzQ+Cis8VThENDA+IDxVOENCMj4KKzxVOEQ0MT4gPFU4Q0MzPgorPFU4RDQyPiA8VThDQzI+Cis8VThENDM+IDxVOENDRD47PFU4RDEzPjs8VThEMUM+Cis8VThENDQ+IDxVOENDNz4KKzxVOEQ0NT4gPFU4Q0M1PgorPFU4RDQ2PiA8VThEMTA+Cis8VThENDc+IDxVOENENT4KKzxVOEQ0OD4gPFU4Q0QxPgorPFU4RDQ5PiA8VThDREE+Cis8VThENEE+IDxVOENEMj47PFU4Q0Q2PgorPFU4RDRCPiA8VThDRTY+Cis8VThENEM+IDxVOENFRD4KKzxVOEQ0RD4gPFU4Q0VCPjs8VThDRjc+OzxVOUY0RT4KKzxVOEQ0RT4gPFU4RDE2PgorPFU4RDRGPiA8VThDREU+Cis8VThENTA+IDxVOENEQz4KKzxVOEQ1MT4gPFU4RDE0PgorPFU4RDUyPiA8VThDRDk+Cis8VThENTM+IDxVOENFMT4KKzxVOEQ1ND4gPFU4Q0UwPgorPFU4RDU1PiA8VThDRTc+Cis8VThENTY+IDxVOENGND47PFU5ODNDPgorPFU4RDU3PiA8VThDRjU+Cis8VThENTg+IDxVOEQwNT4KKzxVOEQ1OT4gPFU4Q0ZCPgorPFU4RDVBPiA8VThDRkE+Cis8VThENUI+IDxVOENGRD4KKzxVOEQ1Qz4gPFU4Q0ZFPgorPFU4RDVEPiA8VTUwNTA+OzxVOEQwQj47PFU4RDE3PgorPFU4RDVFPiA8VThCODM+OzxVOEI5QT47PFU4Q0RCPjs8VThEMEE+Cis8VThENUY+IDxVOEQwNz4KKzxVOEQ2MD4gPFU4RDA4PgorPFU4RDYxPiA8VThEMEQ+Cis8VThENjI+IDxVOEQwRj4KKzxVOEQ2Mz4gPFU4RDFCPgorPFU4RDY0PiA8VTcwN0I+OzxVNzBGRT4KKzxVOEQ2QT4gPFU4RDZDPgorPFU4RDZDPiA8VThENkE+Cis8VThENzA+IDxVOEQ3MT4KKzxVOEQ3MT4gPFU4RDcwPgorPFU4RDc1PiA8VThEOTk+Cis8VThENzY+IDxVOEQ5NT4KKzxVOEQ3Qj4gPFU1QzFGPjs8VTVDMjA+OzxVOUJBRT47PFU5QzdCPjs8VTlDOUM+Cis8VThEN0Y+IDxVOEZERj4KKzxVOEQ4MT4gPFU4RDgyPgorPFU4RDgyPiA8VThEODE+Cis8VThEOEI+IDxVOERBOD4KKzxVOEQ5MT4gPFU4REE2PgorPFU4RDk1PiA8VThENzY+Cis8VThEOTk+IDxVOEQ3NT4KKzxVOERBNj4gPFU4RDkxPgorPFU4REE4PiA8VThEOEI+Cis8VThEQUM+IDxVOEU3QT4KKzxVOERBRj4gPFU4REMzPjs8VThFOEQ+Cis8VThEQjE+IDxVOERCMj4KKzxVOERCMj4gPFU4REIxPgorPFU4REI4PiA8VThFODk+Cis8VThEQkI+IDxVOEUzOD4KKzxVOERDMz4gPFU4REFGPjs8VThFOEQ+Cis8VThEQzQ+IDxVOEU0Qz4KKzxVOERERT4gPFU4RTkyPgorPFU4REUxPiA8VThGRjk+Cis8VThERTU+IDxVOERGQT4KKzxVOERGND4gPFU4RTI5PgorPFU4REY1PiA8VThFMTA+Cis8VThERjY+IDxVOEU4Mj4KKzxVOERGNz4gPFU4RTdBPgorPFU4REY4PiA8VThFNTU+Cis8VThERjk+IDxVOEU5QT4KKzxVOERGQT4gPFU4REU1PgorPFU4REZCPiA8VThFOEI+Cis8VThERkM+IDxVNUM0MD4KKzxVOEUwMT4gPFU4MEVCPjs8VTgxMUI+Cis8VThFMDg+IDxVNzU4RT47PFU3NThGPgorPFU4RTBBPiA8VThFMzQ+Cis8VThFMEI+IDxVODExQT47PFU4MTczPgorPFU4RTBDPiA8VThFOEE+Cis8VThFMTA+IDxVOERGNT4KKzxVOEUyOD4gPFU4RTY0PgorPFU4RTI5PiA8VThERjQ+Cis8VThFMkE+IDxVOEU2ND4KKzxVOEUyQj4gPFU3OEIwPgorPFU4RTJDPiA8VThFOTM+Cis8VThFMkY+IDxVOEU5MT4KKzxVOEUzMD4gPFU3QUFDPgorPFU4RTM0PiA8VThFMEE+Cis8VThFMzg+IDxVOERCQj4KKzxVOEU0ND4gPFU4RTRGPgorPFU4RTRCPiA8VThFNzk+OzxVOEVBMj4KKzxVOEU0Qz4gPFU4REM0PgorPFU4RTRGPiA8VThFNDQ+Cis8VThFNTE+IDxVOEVBMT4KKzxVOEU1Mj4gPFU4RTYzPgorPFU4RTU1PiA8VThERjg+Cis8VThFNUY+IDxVOEZGOT4KKzxVOEU2Mz4gPFU4RTUyPgorPFU4RTY0PiA8VThFMjg+OzxVOEUyQT4KKzxVOEU3MD4gPFU4RThBPjs8VThFOTU+Cis8VThFNzk+IDxVOEU0Qj47PFU4RUEyPgorPFU4RTdBPiA8VThEQUM+OzxVOERGNz4KKzxVOEU3Rj4gPFU4RUE1PgorPFU4RTgyPiA8VThERjY+Cis8VThFODM+IDxVOEU4ND4KKzxVOEU4ND4gPFU4RTgzPgorPFU4RTg3PiA8VTU4Qjg+Cis8VThFODk+IDxVOERCOD4KKzxVOEU4QT4gPFU4RTBDPjs8VThFNzA+OzxVOEU5NT4KKzxVOEU4Qj4gPFU4REZCPjs8VTk2QUU+Cis8VThFOEQ+IDxVOERBRj47PFU4REMzPgorPFU4RThGPiA8VThFQUE+Cis8VThFOTE+IDxVOEUyRj4KKzxVOEU5Mj4gPFU4RERFPgorPFU4RTkzPiA8VThFMkM+Cis8VThFOTU+IDxVOEU3MD47PFU4RThBPgorPFU4RTk5PiA8VThFQUE+Cis8VThFOUE+IDxVOERGOT4KKzxVOEU5Qz4gPFU4RUE2PgorPFU4RUExPiA8VThFNTE+Cis8VThFQTI+IDxVOEU0Qj47PFU4RTc5PgorPFU4RUE1PiA8VThFN0Y+Cis8VThFQTY+IDxVOEU5Qz4KKzxVOEVBQT4gPFU4RThGPjs8VThFOTk+Cis8VThFQUM+IDxVOEVCMz4KKzxVOEVBRD4gPFU4MDNEPgorPFU4RUFGPiA8VThFQzA+Cis8VThFQjA+IDxVNEY1Mz47PFU4RUM2Pjs8VTlBQjU+OzxVOUFEND4KKzxVOEVCMT4gPFU4RUIyPgorPFU4RUIyPiA8VThFQjE+Cis8VThFQjM+IDxVOEVBQz4KKzxVOEVDMD4gPFU4RUFGPgorPFU4RUM0PiA8VTgwNDA+OzxVODA0Qz47PFU4MDc3PgorPFU4RUM2PiA8VTRGNTM+OzxVOEVCMD47PFU5QUI1Pjs8VTlBRDQ+Cis8VThFQ0E+IDxVOEY2Nj4KKzxVOEVDQj4gPFU4RjY3PgorPFU4RUNDPiA8VThGNjg+Cis8VThFQ0Q+IDxVNTE5Qj4KKzxVOEVEMT4gPFU4RjZBPgorPFU4RUQyPiA8VThGNjk+Cis8VThFRDQ+IDxVOEY2Qj4KKzxVOEVEQj4gPFU2Nzk5Pjs8VThFRjY+OzxVOEY2RD4KKzxVOEVERj4gPFU4RjZGPgorPFU4RUUyPiA8VThGNDk+OzxVOEY2Qz4KKzxVOEVFMz4gPFU4RjVGPjs8VThGNzA+Cis8VThFRTQ+IDxVOEY3Nz4KKzxVOEVFQj4gPFU4Rjc4PgorPFU4RUYwPiA8VThGMjk+OzxVOEY4OD4KKzxVOEVGMj4gPFU4RjcxPgorPFU4RUY2PiA8VTY3OTk+OzxVOEVEQj47PFU4RjZEPgorPFU4RUY4PiA8VThGNzQ+Cis8VThFRjk+IDxVOEY3NT4KKzxVOEVGQT4gPFU4RjdBPgorPFU4RUZCPiA8VThGNzI+Cis8VThFRkM+IDxVOEY3Nj4KKzxVOEVGRD4gPFU4RjE1Pjs8VThGN0I+Cis8VThFRkU+IDxVOEY3Qz4KKzxVOEYwMD4gPFU4RjVDPgorPFU4RjAzPiA8VThGODM+Cis8VThGMDU+IDxVOEY4Mj4KKzxVOEYwNz4gPFU4RjgxPgorPFU4RjA4PiA8VThGODA+Cis8VThGMDk+IDxVOEY3RD4KKzxVOEYwQT4gPFU4RjdFPgorPFU4RjBDPiA8VThGMUI+OzxVOEY4Nj4KKzxVOEYwRj4gPFU4RjM2PgorPFU4RjEyPiA8VThGMTk+OzxVOEY4ND4KKzxVOEYxMz4gPFU2MzNEPgorPFU4RjE0PiA8VTRGQ0M+OzxVOEY4NT4KKzxVOEYxNT4gPFU4RUZEPjs8VThGN0I+Cis8VThGMTk+IDxVOEYxMj47PFU4Rjg0PgorPFU4RjFCPiA8VThGMEM+OzxVOEY4Nj4KKzxVOEYxQz4gPFU4RjNBPjs8VThGOEU+Cis8VThGMUQ+IDxVOEY4OT4KKzxVOEYxRT4gPFU4RjhCPgorPFU4RjFGPiA8VThGOEQ+Cis8VThGMjE+IDxVOEY1Nz4KKzxVOEYyNT4gPFU4RjhBPgorPFU4RjI2PiA8VThGODc+Cis8VThGMjk+IDxVOEVGMD47PFU4Rjg4PgorPFU4RjJBPiA8VThGNkU+Cis8VThGMkM+IDxVOEY4Qz4KKzxVOEYyRD4gPFU4RjZGPgorPFU4RjJGPiA8VThGOTE+Cis8VThGMzM+IDxVOEY4Rj4KKzxVOEYzNj4gPFU4RjBGPgorPFU4RjM4PiA8VThGOTM+Cis8VThGM0E+IDxVOEYxQz47PFU4RjhFPgorPFU4RjNCPiA8VThGOTA+Cis8VThGM0M+IDxVOEY5Mj4KKzxVOEYzRT4gPFU4Rjk3PgorPFU4RjNGPiA8VTgyMDY+Cis8VThGNDE+IDxVOTdCMT47PFU5N0RDPjs8VTk3RUM+Cis8VThGNDI+IDxVNkJDMj4KKzxVOEY0ND4gPFU4Rjk2Pjs8VTkzOEI+Cis8VThGNDU+IDxVOEY5NT4KKzxVOEY0Nj4gPFU4Rjk4PgorPFU4RjQ5PiA8VThFRTI+OzxVOEY2Qz4KKzxVOEY0RD4gPFU4Rjk5PgorPFU4RjRFPiA8VThGN0Y+Cis8VThGNTQ+IDxVOEY5QT4KKzxVOEY1Nz4gPFU4RjIxPgorPFU4RjVDPiA8VThGMDA+Cis8VThGNUY+IDxVOEVFMz47PFU4RjcwPgorPFU4RjYxPiA8VThGOTQ+Cis8VThGNjI+IDxVOEY3OT4KKzxVOEY2ND4gPFU4RjczPgorPFU4RjY2PiA8VThFQ0E+Cis8VThGNjc+IDxVOEVDQj4KKzxVOEY2OD4gPFU4RUNDPgorPFU4RjY5PiA8VThFRDI+Cis8VThGNkE+IDxVOEVEMT4KKzxVOEY2Qj4gPFU4RUQ0PgorPFU4RjZDPiA8VThFRTI+OzxVOEY0OT4KKzxVOEY2RD4gPFU2Nzk5Pjs8VThFREI+OzxVOEVGNj4KKzxVOEY2RT4gPFU4RjJBPgorPFU4RjZGPiA8VThFREY+OzxVOEYyRD4KKzxVOEY3MD4gPFU4RUUzPjs8VThGNUY+Cis8VThGNzE+IDxVOEVGMj4KKzxVOEY3Mj4gPFU4RUZCPgorPFU4RjczPiA8VThGNjQ+Cis8VThGNzQ+IDxVOEVGOD4KKzxVOEY3NT4gPFU4RUY5PgorPFU4Rjc2PiA8VThFRkM+Cis8VThGNzc+IDxVOEVFND4KKzxVOEY3OD4gPFU4RUVCPgorPFU4Rjc5PiA8VThGNjI+Cis8VThGN0E+IDxVOEVGQT4KKzxVOEY3Qj4gPFU4RUZEPjs8VThGMTU+Cis8VThGN0M+IDxVOEVGRT4KKzxVOEY3RD4gPFU4RjA5PgorPFU4RjdFPiA8VThGMEE+Cis8VThGN0Y+IDxVOEY0RT4KKzxVOEY4MD4gPFU4RjA4PgorPFU4RjgxPiA8VThGMDc+Cis8VThGODI+IDxVOEYwNT4KKzxVOEY4Mz4gPFU4RjAzPgorPFU4Rjg0PiA8VThGMTI+OzxVOEYxOT4KKzxVOEY4NT4gPFU4RjE0PgorPFU4Rjg2PiA8VThGMEM+OzxVOEYxQj4KKzxVOEY4Nz4gPFU4RjI2PgorPFU4Rjg4PiA8VThFRjA+OzxVOEYyOT4KKzxVOEY4OT4gPFU4RjFEPgorPFU4RjhBPiA8VThGMjU+Cis8VThGOEI+IDxVOEYxRT4KKzxVOEY4Qz4gPFU4RjJDPgorPFU4RjhEPiA8VThGMUY+Cis8VThGOEU+IDxVOEYxQz47PFU4RjNBPgorPFU4RjhGPiA8VThGMzM+Cis8VThGOTA+IDxVOEYzQj4KKzxVOEY5MT4gPFU4RjJGPgorPFU4RjkyPiA8VThGM0M+Cis8VThGOTM+IDxVOEYzOD4KKzxVOEY5ND4gPFU4RjYxPgorPFU4Rjk1PiA8VThGNDU+Cis8VThGOTY+IDxVOEY0ND4KKzxVOEY5Nz4gPFU4RjNFPgorPFU4Rjk4PiA8VThGNDY+Cis8VThGOTk+IDxVOEY0RD4KKzxVOEY5QT4gPFU4RjU0PgorPFU4RjlEPiA8VThGOUU+OzxVOEZBND47PFU4RkFEPgorPFU4RjlFPiA8VThGOUQ+OzxVOEZBND47PFU4RkFEPgorPFU4RjlGPiA8VTk1RTI+Cis8VThGQTA+IDxVNjY4Mz47PFU3RjZBPgorPFU4RkExPiA8VTVGMDE+OzxVOEZBOT47PFU4RkFGPgorPFU4RkE0PiA8VThGOUQ+OzxVOEY5RT47PFU4RkFEPgorPFU4RkE2PiA8VTUyOUU+Cis8VThGQTc+IDxVNUYwMT47PFU4RkE4PgorPFU4RkE4PiA8VTVGMDE+OzxVOEZBNz4KKzxVOEZBOT4gPFU1RjAxPjs8VThGQTE+OzxVOEZBRj4KKzxVOEZBQj4gPFU4RkFFPgorPFU4RkFEPiA8VThGOUQ+OzxVOEY5RT47PFU4RkE0PgorPFU4RkFFPiA8VThGQUI+Cis8VThGQUY+IDxVNUYwMT47PFU4RkExPjs8VThGQTk+Cis8VThGQjI+IDxVNTE5Qz4KKzxVOEZCNT4gPFU4RkI2PgorPFU4RkI2PiA8VThGQjU+Cis8VThGQjk+IDxVOEZCQT47PFU5MDg5Pjs8VTkwOEE+Cis8VThGQkE+IDxVOEZCOT47PFU5MDg5Pjs8VTkwOEE+Cis8VThGQkQ+IDxVOTA3Qz4KKzxVOEZCRT4gPFU5MDM5Pjs8VTkwNTQ+Cis8VThGQzE+IDxVOTA3Nz4KKzxVOEZDMj4gPFU4RkMzPgorPFU4RkMzPiA8VThGQzI+Cis8VThGQzY+IDxVOEZFND4KKzxVOEZDNz4gPFU5MDRFPgorPFU4RkM4PiA8VTkwODE+Cis8VThGQ0E+IDxVNTMxRD47PFU1RTAwPgorPFU4RkQwPiA8VTkwNEI+Cis8VThGRDg+IDxVOTA4ND4KKzxVOEZEOT4gPFU5MDE5PgorPFU4RkRCPiA8VTkwMzI+Cis8VThGREM+IDxVOTA2MD4KKzxVOEZERD4gPFU5MDU1PgorPFU4RkRFPiA8VTkwMjM+Cis8VThGREY+IDxVOEQ3Rj47PFU5MDQ1Pjs8VTkwNzI+Cis8VThGRTQ+IDxVOEZDNj4KKzxVOEZFNT4gPFU5MDA4PgorPFU4RkU5PiA8VTkwODc+Cis8VThGRUE+IDxVNUVGOD4KKzxVOEZFQz4gPFU1RjgwPgorPFU4RkVGPiA8VTkwMDM+Cis8VThGRjM+IDxVNUY4ND47PFU1RjkxPjs8VTkwMTU+Cis8VThGRjQ+IDxVNTZEOD47PFU1NkRFPjs8VTU2RUM+OzxVNUVGQj47PFU1RUZEPjs8VTkwMjU+Cis8VThGRjk+IDxVOERFMT47PFU4RTVGPgorPFU4RkZBPiA8VTRFNDM+OzxVNUVGQz4KKzxVOTAwMj4gPFU5MDY5PgorPFU5MDAzPiA8VThGRUY+Cis8VTkwMDg+IDxVOEZFNT4KKzxVOTAwOT4gPFU5MDc4PgorPFU5MDBBPiA8VTkwNUM+Cis8VTkwMEU+IDxVOTA1Mj4KKzxVOTAxMj4gPFU5MDEzPjs8VTkwNUU+Cis8VTkwMTM+IDxVOTAxMj47PFU5MDVFPgorPFU5MDE1PiA8VTVGODQ+OzxVNUY5MT47PFU4RkYzPgorPFU5MDE5PiA8VThGRDk+Cis8VTkwMjM+IDxVOEZERT4KKzxVOTAyNT4gPFU1NkQ4Pjs8VTU2REU+OzxVNTZFQz47PFU1RUZCPjs8VTVFRkQ+OzxVOEZGND4KKzxVOTAyNj4gPFU5MDkwPgorPFU5MDI5PiA8VTU5NTQ+Cis8VTkwMzA+IDxVNkUzOD47PFU5MDRBPgorPFU5MDMxPiA8VTU0Njg+Cis8VTkwMzI+IDxVOEZEQj4KKzxVOTAzOT4gPFU4RkJFPjs8VTkwNTQ+Cis8VTkwM0E+IDxVOTA2MD4KKzxVOTAzQj4gPFU5MDhGPgorPFU5MDNDPiA8VTUwNkE+Cis8VTkwNDE+IDxVOTA2Rj4KKzxVOTA0NT4gPFU4RkRGPjs8VTkwNzI+Cis8VTkwNDk+IDxVNEZBNj47PFU1MDc1PgorPFU5MDRBPiA8VTZFMzg+OzxVOTAzMD4KKzxVOTA0Qj4gPFU4RkQwPgorPFU5MDRFPiA8VThGQzc+Cis8VTkwNTI+IDxVOTAwRT4KKzxVOTA1Mz4gPFU1Njc1Pjs8VTg4NUM+OzxVODg1Rj4KKzxVOTA1ND4gPFU4RkJFPjs8VTkwMzk+Cis8VTkwNTU+IDxVOEZERD4KKzxVOTA1Nz4gPFU5MDdBPgorPFU5MDU5PiA8VTkwNjU+Cis8VTkwNUM+IDxVOTAwQT4KKzxVOTA1RT4gPFU5MDEyPjs8VTkwMTM+Cis8VTkwNjA+IDxVOEZEQz47PFU5MDNBPgorPFU5MDYxPiA8VTZFQUY+Cis8VTkwNjU+IDxVOTA1OT4KKzxVOTA2OT4gPFU5MDAyPgorPFU5MDZGPiA8VTkwNDE+Cis8VTkwNzI+IDxVOEZERj47PFU5MDQ1PgorPFU5MDc2PiA8VTdFRDU+Cis8VTkwNzc+IDxVOEZDMT4KKzxVOTA3OD4gPFU5MDA5PgorPFU5MDdBPiA8VTkwNTc+Cis8VTkwN0M+IDxVOEZCRD4KKzxVOTA4MT4gPFU4RkM4PgorPFU5MDg0PiA8VThGRDg+Cis8VTkwODc+IDxVOEZFOT4KKzxVOTA4OT4gPFU4RkI5Pjs8VThGQkE+OzxVOTA4QT4KKzxVOTA4QT4gPFU4RkI5Pjs8VThGQkE+OzxVOTA4OT4KKzxVOTA4Rj4gPFU5MDNCPgorPFU5MDkwPiA8VTkwMjY+Cis8VTkwOTE+IDxVOTYxRD4KKzxVOTA5Mz4gPFU5MTI3PgorPFU5MDlEPiA8VTkxM0E+Cis8VTkwQTY+IDxVOTBBQj4KKzxVOTBBOD4gPFU2NzUxPgorPFU5MEFCPiA8VTkwQTY+Cis8VTkwQUM+IDxVOTExND4KKzxVOTBBRT4gPFU5MEY1PgorPFU5MEI5PiA8VTkxMTI+Cis8VTkwQkE+IDxVOTEzND4KKzxVOTBCQj4gPFU1M0I4Pjs8VTkxMzA+OzxVOTZBMz4KKzxVOTBCRD4gPFU5MENDPgorPFU5MEMxPiA8VTZCMUQ+OzxVOUIzMD47PFU5QjMxPgorPFU5MENDPiA8VTkwQkQ+Cis8VTkwQ0U+IDxVOTBEMj47PFU5MERFPgorPFU5MENGPiA8VTkwREY+Cis8VTkwRDA+IDxVOTEzNj4KKzxVOTBEMT4gPFU5MTJEPgorPFU5MEQyPiA8VTkwQ0U+OzxVOTBERT4KKzxVOTBEMz4gPFU5MTA2PgorPFU5MERFPiA8VTkwQ0U+OzxVOTBEMj4KKzxVOTBERj4gPFU5MENGPgorPFU5MEU2PiA8VTkxNDg+Cis8VTkwRTc+IDxVOTExNj4KKzxVOTBFOD4gPFU5MEY2PgorPFU5MEY1PiA8VTkwQUU+Cis8VTkwRjY+IDxVOTBFOD4KKzxVOTBGNz4gPFU0RTYxPjs8VTkxMDk+OzxVOTEwQT47PFU5MTE1PgorPFU5MEY4PiA8VTkxMzI+Cis8VTkxMDY+IDxVOTBEMz4KKzxVOTEwOT4gPFU0RTYxPjs8VTkwRjc+OzxVOTEwQT47PFU5MTE1PgorPFU5MTBBPiA8VTRFNjE+OzxVOTBGNz47PFU5MTA5Pjs8VTkxMTU+Cis8VTkxMTI+IDxVOTBCOT4KKzxVOTExND4gPFU5MEFDPgorPFU5MTE1PiA8VTRFNjE+OzxVOTBGNz47PFU5MTA5Pjs8VTkxMEE+Cis8VTkxMTY+IDxVOTBFNz4KKzxVOTEyNz4gPFU5MDkzPgorPFU5MTJEPiA8VTkwRDE+Cis8VTkxMzA+IDxVNTNCOD47PFU5MEJCPjs8VTk2QTM+Cis8VTkxMzI+IDxVOTBGOD4KKzxVOTEzND4gPFU5MEJBPgorPFU5MTM2PiA8VTkwRDA+Cis8VTkxMzc+IDxVOTE0Nj4KKzxVOTEzQT4gPFU5MDlEPgorPFU5MTNDPiA8VTkxNDc+Cis8VTkxM0Q+IDxVNTM5OD47PFU1OEU1Pjs8VTVFREI+Cis8VTkxNDI+IDxVOTE0Nz4KKzxVOTE0Nj4gPFU5MTM3PgorPFU5MTQ3PiA8VTkxM0M+OzxVOTE0Mj4KKzxVOTE0OD4gPFU5MEU2PgorPFU5MTQ5PiA8VTRFMjM+Cis8VTkxNEI+IDxVOTE5ND4KKzxVOTE1ND4gPFU5MTg5PgorPFU5MTU5PiA8VTY1OUY+Cis8VTkxNUQ+IDxVOTE5Nj47PFU5MTlFPgorPFU5MTYyPiA8VTkxOEI+Cis8VTkxNjY+IDxVNzY3QT47PFU5MTk3Pjs8VTkxQjE+Cis8VTkxNjc+IDxVOTE2Qz47PFU5MUJCPgorPFU5MTZBPiA8VTU1RTA+Cis8VTkxNkM+IDxVOTE2Nz47PFU5MUJCPgorPFU5MTcxPiA8VTkxQTQ+OzxVOTFBQz4KKzxVOTE3RD4gPFU5MUM1PgorPFU5MTdFPiA8VTkxQzM+Cis8VTkxN0Y+IDxVOTFCOD47PFU5MUMwPgorPFU5MTgzPiA8VTgxNEM+Cis8VTkxODc+IDxVOTE5NT4KKzxVOTE4OT4gPFU5MTU0PgorPFU5MThBPiA8VTk5MUY+Cis8VTkxOEI+IDxVOTE2Mj4KKzxVOTE4RT4gPFU1NEI4Pjs8VTlFNzk+Cis8VTkxOTQ+IDxVOTE0Qj4KKzxVOTE5NT4gPFU5MTg3PgorPFU5MTk2PiA8VTkxNUQ+OzxVOTE5RT4KKzxVOTE5Nz4gPFU3NjdBPjs8VTkxNjY+OzxVOTFCMT4KKzxVOTE5OD4gPFU2OUJDPgorPFU5MTlDPiA8VTRFMTE+OzxVOUI1Nz4KKzxVOTE5RT4gPFU5MTVEPjs8VTkxOTY+Cis8VTkxQTQ+IDxVOTE3MT47PFU5MUFDPgorPFU5MUFCPiA8VTUzM0I+OzxVNkJDOT4KKzxVOTFBQz4gPFU5MTcxPjs8VTkxQTQ+Cis8VTkxQjE+IDxVNzY3QT47PFU5MTY2Pjs8VTkxOTc+Cis8VTkxQjg+IDxVOTE3Rj47PFU5MUMwPgorPFU5MUJCPiA8VTkxNjc+OzxVOTE2Qz4KKzxVOTFCQz4gPFU1QkI0Pjs8VThCOEM+Cis8VTkxQzA+IDxVOTE3Rj47PFU5MUI4PgorPFU5MUMxPiA8VTg4NDU+Cis8VTkxQzM+IDxVOTE3RT4KKzxVOTFDNT4gPFU5MTdEPgorPFU5MUM3PiA8VTVCQzA+OzxVNjNBMT4KKzxVOTFDOD4gPFU5MUNBPjs8VTkxQ0I+Cis8VTkxQ0E+IDxVOTFDOD47PFU5MUNCPgorPFU5MUNCPiA8VTkxQzg+OzxVOTFDQT4KKzxVOTFDQz4gPFU4OENGPjs8VTg4RTE+Cis8VTkxQ0U+IDxVNTdEQz47PFU1OEM0PgorPFU5MUQwPiA8VTUzOTg+Cis8VTkxRDE+IDxVOTFEMj47PFU5NDg1PgorPFU5MUQyPiA8VTkxRDE+OzxVOTQ4NT4KKzxVOTFEMz4gPFU5MURBPjs8VTkxRkI+OzxVOTQ4Nj4KKzxVOTFEND4gPFU5NDg3PgorPFU5MUQ1PiA8VTk0OEM+Cis8VTkxRDY+IDxVNTIwMD47PFU1MjAyPgorPFU5MUQ3PiA8VTk0OEE+Cis8VTkxRDg+IDxVOTQ4OT4KKzxVOTFEOT4gPFU5NDhCPgorPFU5MURBPiA8VTkxRDM+OzxVOTFGQj4KKzxVOTFEQz4gPFU5MUUxPgorPFU5MUREPiA8VTk0ODg+Cis8VTkxRTA+IDxVNEU3MT47PFU0RTgyPgorPFU5MUUxPiA8VTkxREM+Cis8VTkxRTM+IDxVOTIxRj47PFU5NDkzPgorPFU5MUU0PiA8VTk0OTA+Cis8VTkxRTY+IDxVNjI2Mz4KKzxVOTFFNz4gPFU5NDhGPgorPFU5MUU5PiA8VTk0OTI+Cis8VTkxRUY+IDxVOTJFOT4KKzxVOTFGMD4gPFU1MjUxPjs8VTUyNjM+OzxVNTI3MT47PFU1MjhEPjs8VTUyOEU+OzxVNTI5Mj47PFU1Mjk0Pjs8VTkxRkM+Cis8VTkxRjU+IDxVOTQ5Nz4KKzxVOTFGNz4gPFU5NDhEPgorPFU5MUY5PiA8VTk0OTU+Cis8VTkxRkE+IDxVOTQ4RT4KKzxVOTFGQj4gPFU5MUQzPjs8VTkxREE+OzxVOTQ4Nj4KKzxVOTFGQz4gPFU1MjUxPjs8VTUyNjM+OzxVNTI3MT47PFU1MjhEPjs8VTUyOEU+OzxVNTI5Mj47PFU1Mjk0Pjs8VTkxRjA+Cis8VTkyMDA+IDxVOTRBRj4KKzxVOTIwMT4gPFU5NEFCPgorPFU5MjAzPiA8VTk0OTg+Cis8VTkyMDQ+IDxVOTRBRD4KKzxVOTIwNT4gPFU5NEE1PgorPFU5MjA2PiA8VTkyNUI+OzxVOTRDNT4KKzxVOTIwOD4gPFU5NDlBPgorPFU5MjA5PiA8VTk0QTA+Cis8VTkyMEQ+IDxVOTQ5RD4KKzxVOTIwRT4gPFU5MjY0Pjs8VTk0QTk+Cis8VTkyMTA+IDxVOTRBND4KKzxVOTIxMT4gPFU5NEEzPgorPFU5MjEyPiA8VTk0OTE+Cis8VTkyMTQ+IDxVOTQ5RT4KKzxVOTIxNT4gPFU5NEFFPgorPFU5MjFFPiA8VTkyOUU+OzxVOTRBNz4KKzxVOTIxRj4gPFU5MUUzPgorPFU5MjIxPiA8VTk0OUY+Cis8VTkyMjM+IDxVOTQ5OT4KKzxVOTIyNT4gPFU5NEFDPgorPFU5MjI2PiA8VTk0OUI+Cis8VTkyMjc+IDxVOTRBQT4KKzxVOTIyOD4gPFU5M0JBPgorPFU5MjI5PiA8VTcwODk+OzxVOTQ2QT4KKzxVOTIyQz4gPFU5NDM4Pjs8VTk0Q0U+Cis8VTkyMkU+IDxVOTI2OD47PFU5NENDPgorPFU5MjMwPiA8VTk0Qzg+Cis8VTkyMzM+IDxVOTRCNj4KKzxVOTIzND4gPFU5NEMzPgorPFU5MjM3PiA8VTk0QjQ+Cis8VTkyMzg+IDxVOTRCOT4KKzxVOTIzOT4gPFU5NENEPgorPFU5MjNBPiA8VTk0QjA+Cis8VTkyM0Q+IDxVOTRCOD4KKzxVOTIzRT4gPFU5NEMwPgorPFU5MjNGPiA8VTk0QkY+Cis8VTkyNDA+IDxVOTRCRT4KKzxVOTI0ND4gPFU5Mjk1Pjs8VTkyRTg+OzxVOTQyMT47PFU5NDM1Pjs8VTk0QzE+Cis8VTkyNDU+IDxVOTQ5Qz4KKzxVOTI0Nj4gPFU5NEJCPgorPFU5MjQ3PiA8VTk0Q0E+Cis8VTkyNDg+IDxVOTRDQT4KKzxVOTI0OT4gPFU5NEM5PgorPFU5MjRCPiA8VTUyMjg+OzxVOTRDNz4KKzxVOTI0RD4gPFU5NENCPgorPFU5MjUxPiA8VTk0QzI+Cis8VTkyNTU+IDxVOTRCNz4KKzxVOTI1Nz4gPFU5NEIzPgorPFU5MjVBPiA8VTk0QzY+Cis8VTkyNUI+IDxVOTIwNj47PFU5NEM1PgorPFU5MjVFPiA8VTk0QkE+Cis8VTkyNjA+IDxVOTM0OD4KKzxVOTI2Mj4gPFU3NkNCPjs8VTdGM0Q+OzxVOTRCNT4KKzxVOTI2ND4gPFU5MjBFPjs8VTk0QTk+Cis8VTkyNjY+IDxVOTRCMj4KKzxVOTI2OD4gPFU5MjJFPjs8VTk0Q0M+Cis8VTkyNkM+IDxVOTRCQz4KKzxVOTI2RD4gPFU5NEJEPgorPFU5MjcxPiA8VTc3RkY+OzxVNzgzRj47PFU3OTI2Pjs8VTkyREI+OzxVOTQ1Qj4KKzxVOTI3ND4gPFU5MzczPjs8VTk0NTE+OzxVOTQ1Mj47PFU5NDZDPgorPFU5Mjc2PiA8VTk0Q0Y+Cis8VTkyNzg+IDxVOTRGMD4KKzxVOTI3QT4gPFU5NEQyPgorPFU5MjdCPiA8VTk0RUM+Cis8VTkyN0Y+IDxVOTRFQT4KKzxVOTI4MD4gPFU5NEY2PgorPFU5MjgzPiA8VTk0RjM+Cis8VTkyODU+IDxVOTREQz4KKzxVOTI4RD4gPFU5NERBPgorPFU5MjkxPiA8VTk0RTM+Cis8VTkyOTM+IDxVOTRFOD4KKzxVOTI5NT4gPFU5MjQ0Pjs8VTkyRTg+OzxVOTQyMT47PFU5NDM1PgorPFU5Mjk2PiA8VTk0RTI+Cis8VTkyOTg+IDxVOTRFRD4KKzxVOTI5QT4gPFU5NDQzPjs8VTk0RUI+Cis8VTkyOUI+IDxVOTJCRD47PFU5NEU2PgorPFU5MjlDPiA8VTU1NjM+OzxVODg1ND47PFU4ODU4PgorPFU5MjlFPiA8VTkyMUU+Cis8VTkyQTA+IDxVOTREMT4KKzxVOTJBMz4gPFU5NEY3PgorPFU5MkE1PiA8VTk0RjE+Cis8VTkyQTY+IDxVOTRERj4KKzxVOTJBOD4gPFU5NEY1PgorPFU5MkE5PiA8VTk0RTU+Cis8VTkyQUE+IDxVOTRENT4KKzxVOTJBQj4gPFU5NEVGPgorPFU5MkFDPiA8VTk0RDA+Cis8VTkyQUQ+IDxVOTMyMj47PFU5NEIxPgorPFU5MkFFPiA8VTk0N0U+Cis8VTkyQjE+IDxVOTRERT4KKzxVOTJCMj4gPFU3MTBBPgorPFU5MkIzPiA8VTkyRUQ+OzxVOTUxMD4KKzxVOTJCNz4gPFU3MTA3Pjs8VTk1MDA+Cis8VTkyQjk+IDxVOTUwOD4KKzxVOTJCQj4gPFU5NTExPgorPFU5MkJDPiA8VTk1MDk+Cis8VTkyQkQ+IDxVOTI5Qj4KKzxVOTJDMT4gPFU5NEREPgorPFU5MkMzPiA8VTk1MTI+Cis8VTkyQzU+IDxVOTUwQz4KKzxVOTJDNz4gPFU5NEExPgorPFU5MkNDPiA8VTk0RTQ+Cis8VTkyQ0Y+IDxVOTRENz4KKzxVOTJEMj4gPFU5NTBCPgorPFU5MkQ5PiA8VTk0RkI+Cis8VTkyREI+IDxVNzdGRj47PFU3ODNGPjs8VTc5MjY+OzxVOTI3MT47PFU5NDVCPgorPFU5MkREPiA8VTk1MEE+Cis8VTkyREY+IDxVOTQ2Rj47PFU5NTEzPgorPFU5MkUzPiA8VTkzODE+OzxVOTREOD4KKzxVOTJFND4gPFU5NTA0PgorPFU5MkU1PiA8VTk1MDM+Cis8VTkyRTY+IDxVOTUxND4KKzxVOTJFOD4gPFU5MjQ0Pjs8VTkyOTU+OzxVOTQyMT47PFU5NDM1Pjs8VTk1MDc+Cis8VTkyRTk+IDxVOTFFRj47PFU5NEQzPgorPFU5MkVBPiA8VTgyMTY+OzxVODIxNz47PFU5NEZBPgorPFU5MkVEPiA8VTkyQjM+OzxVOTUxMD4KKzxVOTJFRT4gPFU5NEQ2PgorPFU5MkVGPiA8VTk1MDY+Cis8VTkyRjA+IDxVOTUwMj4KKzxVOTJGMT4gPFU5NEZEPgorPFU5MkYzPiA8VTk0NDQ+OzxVOTRGOD4KKzxVOTJGNj4gPFU5NTBEPgorPFU5MkY4PiA8VTk1MkY+Cis8VTkyRkM+IDxVOTRBMj4KKzxVOTMwMT4gPFU5NTFFPgorPFU5MzA0PiA8VTVGNTU+OzxVOTMzMj4KKzxVOTMwNj4gPFU5NTE2PgorPFU5MzA3PiA8VTk1MkI+Cis8VTkzMDg+IDxVOTUyOT4KKzxVOTMwRj4gPFU5NDFBPjs8VTk0RDQ+Cis8VTkzMTA+IDxVOTUyNT4KKzxVOTMxMj4gPFU5NTE1PgorPFU5MzE1PiA8VTk1MUY+Cis8VTkzMTg+IDxVOTUyND4KKzxVOTMxOT4gPFU5MzdGPjs8VTk1MzE+Cis8VTkzMUE+IDxVOTRFRT4KKzxVOTMxQj4gPFU5NTFCPgorPFU5MzFGPiA8VTk1MkM+Cis8VTkzMjA+IDxVOTUyRD4KKzxVOTMyMT4gPFU5NTFDPgorPFU5MzIyPiA8VTkyQUQ+OzxVOTRCMT4KKzxVOTMyNj4gPFU5NTI2PgorPFU5MzI4PiA8VTk1MUE+Cis8VTkzMjk+IDxVOTUyMD4KKzxVOTMyQj4gPFU5NTIxPgorPFU5MzJDPiA8VTcwQkM+OzxVNzE0OT47PFU5MzRBPgorPFU5MzJFPiA8VTk1MjI+Cis8VTkzMkY+IDxVOTUxOT4KKzxVOTMzMj4gPFU1RjU1Pjs8VTkzMDQ+Cis8VTkzMzM+IDxVOTUzMD4KKzxVOTMzNj4gPFU4ODY4PgorPFU5MzM3PiA8VTk0ODY+Cis8VTkzMzg+IDxVOTRGQz4KKzxVOTMzRT4gPFU5M0U4PgorPFU5MzQwPiA8VTk1MUQ+Cis8VTkzNDE+IDxVOTUyOD4KKzxVOTM0Mz4gPFU5NTJBPgorPFU5MzQ2PiA8VTk0OTQ+Cis8VTkzNDc+IDxVOTUzND4KKzxVOTM0OD4gPFU5MjYwPjs8VTk1MzM+Cis8VTkzNEE+IDxVNzBCQz47PFU3MTQ5Pjs8VTkzMkM+Cis8VTkzNEI+IDxVOTUwNT4KKzxVOTM0RD4gPFU5NTQwPgorPFU5MzU0PiA8VTk1Mzc+Cis8VTkzNTg+IDxVOTRFMT4KKzxVOTM1QT4gPFU5NDk2PgorPFU5MzVCPiA8VTcxNDU+OzxVOTUzQj4KKzxVOTM1RT4gPFU5NEZGPgorPFU5MzYwPiA8VTk0NDU+OzxVOTUzRD4KKzxVOTM2ND4gPFU5NTM4PgorPFU5MzY1PiA8VTk1MzI+Cis8VTkzNjk+IDxVOTUxOD4KKzxVOTM2Qz4gPFU5NTM5PgorPFU5MzZGPiA8VTkzRDM+OzxVOTUyQT4KKzxVOTM3MD4gPFU5NTNFPgorPFU5MzczPiA8VTkyNzQ+OzxVOTQ1MT47PFU5NDUyPjs8VTk0NkM+Cis8VTkzNzU+IDxVOTUyRT4KKzxVOTM3Nj4gPFU5NTM2PgorPFU5MzdBPiA8VTk1MTc+Cis8VTkzN0U+IDxVOTQ5Rj47PFU5NTNBPgorPFU5MzdGPiA8VTkzMTk+Cis8VTkzODE+IDxVOTJFMz4KKzxVOTM4Mj4gPFU5NTQxPgorPFU5Mzg0PiA8VTk1M0Y+Cis8VTkzODc+IDxVOTU0NT4KKzxVOTM4QT4gPFU5NTUxPgorPFU5MzhCPiA8VThGNDQ+Cis8VTkzOEM+IDxVOTQyRT47PFU5NTcwPgorPFU5MzkyPiA8VTY5Qzg+OzxVODAyOD4KKzxVOTM5ND4gPFU2RUI2Pjs8VTcxOTQ+Cis8VTkzOTY+IDxVOTNDMT47PFU5NTAxPgorPFU5Mzk3PiA8VTY3QUE+Cis8VTkzOTg+IDxVOTU0OT4KKzxVOTM5QT4gPFU5NTI0PgorPFU5MzlCPiA8VTk1NDg+Cis8VTkzQTE+IDxVOTU0Mz47PFU5RjEyPgorPFU5M0EyPiA8VTk0QTg+Cis8VTkzQTM+IDxVODRFNT4KKzxVOTNBNj4gPFU5NDAyPjs8VTk1NEY+Cis8VTkzQTc+IDxVOTRFMD4KKzxVOTNBOT4gPFU5NEU5PgorPFU5M0FBPiA8VTk1M0M+Cis8VTkzQUM+IDxVOTU1MD4KKzxVOTNBRD4gPFU5M0FFPjs8VTk1NDc+Cis8VTkzQUU+IDxVOTNBRD47PFU5NTQ3PgorPFU5M0IwPiA8VTk1NTI+Cis8VTkzQjM+IDxVOTU0RD4KKzxVOTNCNT4gPFU5NTUzPgorPFU5M0I4PiA8VTk1NEM+Cis8VTkzQkE+IDxVOTIyOD4KKzxVOTNCRj4gPFU5NTRFPgorPFU5M0MxPiA8VTkzOTY+Cis8VTkzQzM+IDxVOTU1RT4KKzxVOTNDNz4gPFU5NTVGPgorPFU5M0M4PiA8VTk0RkU+Cis8VTkzQ0M+IDxVOTU0Nj4KKzxVOTNDRD4gPFU5NTU5PgorPFU5M0QwPiA8VTk1NjA+Cis8VTkzRDE+IDxVOTU1RD4KKzxVOTNEMz4gPFU5MzZGPgorPFU5M0Q3PiA8VTk0RkY+Cis8VTkzRDg+IDxVOTUzNT4KKzxVOTNEQz4gPFU5NTU3PgorPFU5M0REPiA8VTk1NTg+Cis8VTkzREU+IDxVOTU1Qj4KKzxVOTNERj4gPFU1MjJDPjs8VTUyNTc+OzxVNTI3Nz47PFU5NEYyPgorPFU5M0UxPiA8VTczNEQ+OzxVOTU1Qz4KKzxVOTNFMj4gPFU5NTU2PgorPFU5M0U0PiA8VTk1NDI+Cis8VTkzRTU+IDxVOTNGRD47PFU5NTA4PgorPFU5M0U4PiA8VTkzM0U+Cis8VTkzRjA+IDxVOTU1QT4KKzxVOTNGNT4gPFU5NEU3PgorPFU5M0Y3PiA8VTk1NjQ+Cis8VTkzRjk+IDxVOTU2QT4KKzxVOTNGRD4gPFU5M0U1Pjs8VTk1MDg+Cis8VTk0MDI+IDxVOTNBNj47PFU5NTRGPgorPFU5NDAzPiA8VTk0RDk+Cis8VTk0MEI+IDxVOTRGND4KKzxVOTQxMD4gPFU5NTYzPgorPFU5NDEyPiA8VTk0Rjk+Cis8VTk0MTM+IDxVOTU2Nj4KKzxVOTQxND4gPFU5NTYxPgorPFU5NDE3PiA8VTk1MEY+Cis8VTk0MTg+IDxVOTQ5Rj4KKzxVOTQxOT4gPFU5NTZCPgorPFU5NDFBPiA8VTkzMEY+OzxVOTREND4KKzxVOTQxRD4gPFU5NDgxPjs8VTk1NjI+Cis8VTk0MjA+IDxVOTU2OD4KKzxVOTQyMT4gPFU5MjQ0Pjs8VTkyOTU+OzxVOTJFOD47PFU5NDM1Pjs8VTk0QzE+Cis8VTk0MjY+IDxVOTUwRT4KKzxVOTQyNz4gPFU5NTBGPgorPFU5NDI4PiA8VTk1NDQ+Cis8VTk0MkI+IDxVOTU0Qz4KKzxVOTQyRT4gPFU5MzhDPjs8VTk1NzA+Cis8VTk0MzI+IDxVOTU2Rj4KKzxVOTQzMz4gPFU5NTZEPgorPFU5NDM1PiA8VTkyNDQ+OzxVOTI5NT47PFU5MkU4Pjs8VTk0MjE+OzxVOTRDMT4KKzxVOTQzNj4gPFU5NTZFPgorPFU5NDM4PiA8VTkyMkM+OzxVOTRDRT4KKzxVOTQzQT4gPFU5NERCPgorPFU5NDNGPiA8VTk1NzE+Cis8VTk0NDM+IDxVOTI5QT47PFU5NEVCPgorPFU5NDQ0PiA8VTkyRjM+OzxVOTRGOD4KKzxVOTQ0NT4gPFU5MzYwPgorPFU5NDRBPiA8VTk1NkM+Cis8VTk0NEM+IDxVOTU1ND4KKzxVOTQ1MT4gPFU5Mjc0Pjs8VTkzNzM+OzxVOTQ1Mj47PFU5NDZDPgorPFU5NDUyPiA8VTkyNzQ+OzxVOTM3Mz47PFU5NDUxPjs8VTk0NkM+Cis8VTk0NTM+IDxVNjdBQT4KKzxVOTQ1ND4gPFU5NTcyPgorPFU5NDU1PiA8VTk1Mjc+Cis8VTk0NUE+IDxVOTQ3RD47PFU5NEJCPgorPFU5NDVCPiA8VTc3RkY+OzxVNzgzRj47PFU3OTI2Pjs8VTkyNzE+OzxVOTJEQj4KKzxVOTQ1Qz4gPFU5OTA5Pjs8VTk5NUY+Cis8VTk0NUU+IDxVOTU3ND4KKzxVOTQ2MD4gPFU5NEM0PgorPFU5NDYzPiA8VTk1NzM+Cis8VTk0NjQ+IDxVNTIyOD4KKzxVOTQ2NT4gPFU5NTY1PgorPFU5NDZBPiA8VTcwODk+OzxVOTIyOT4KKzxVOTQ2Qz4gPFU5Mjc0Pjs8VTkzNzM+OzxVOTQ1MT47PFU5NDUyPgorPFU5NDZEPiA8VTk1Njc+Cis8VTk0NkY+IDxVOTJERj4KKzxVOTQ3MD4gPFU5NEE1PgorPFU5NDcxPiA8VTk1NzU+Cis8VTk0NzI+IDxVOTU3Nj4KKzxVOTQ3NT4gPFU3RjM2Pjs8VTdGNTA+Cis8VTk0Nzc+IDxVOTU0QT4KKzxVOTQ3OT4gPFU5NTY5PgorPFU5NDdDPiA8VTk1MjM+Cis8VTk0N0Q+IDxVOTQ1QT47PFU5NEJCPgorPFU5NDdFPiA8VTkyQUU+Cis8VTk0N0Y+IDxVNTFGRj4KKzxVOTQ4MT4gPFU5NDFEPjs8VTk1NjI+Cis8VTk0ODI+IDxVOTU0Qj4KKzxVOTQ4NT4gPFU5MUQxPjs8VTkxRDI+Cis8VTk0ODY+IDxVOTFEMz47PFU5MUZCPjs8VTkzMzc+Cis8VTk0ODc+IDxVOTFEND4KKzxVOTQ4OD4gPFU5MUREPgorPFU5NDg5PiA8VTkxRDg+Cis8VTk0OEE+IDxVOTFENz4KKzxVOTQ4Qj4gPFU5MUQ5PgorPFU5NDhDPiA8VTkxRDU+Cis8VTk0OEQ+IDxVOTFGNz4KKzxVOTQ4RT4gPFU5MUZBPgorPFU5NDhGPiA8VTkxRTc+Cis8VTk0OTA+IDxVOTFFND4KKzxVOTQ5MT4gPFU5MjEyPgorPFU5NDkyPiA8VTkxRTk+Cis8VTk0OTM+IDxVOTFFMz4KKzxVOTQ5ND4gPFU5MzQ2PgorPFU5NDk1PiA8VTkxRjk+Cis8VTk0OTY+IDxVOTM1QT4KKzxVOTQ5Nz4gPFU5MUY1PgorPFU5NDk4PiA8VTkyMDM+Cis8VTk0OTk+IDxVOTIyMz4KKzxVOTQ5QT4gPFU5MjA4PgorPFU5NDlCPiA8VTkyMjY+Cis8VTk0OUM+IDxVOTI0NT4KKzxVOTQ5RD4gPFU5MjBEPgorPFU5NDlFPiA8VTkyMTQ+Cis8VTk0OUY+IDxVOTIyMT47PFU5MzdFPjs8VTk0MTg+OzxVOTUzQT4KKzxVOTRBMD4gPFU5MjA5PgorPFU5NEExPiA8VTkyQzc+Cis8VTk0QTI+IDxVOTJGQz4KKzxVOTRBMz4gPFU5MjExPgorPFU5NEE0PiA8VTkyMTA+Cis8VTk0QTU+IDxVOTIwNT47PFU5NDcwPgorPFU5NEE2PiA8VTZCM0Q+Cis8VTk0QTc+IDxVOTIxRT4KKzxVOTRBOD4gPFU5M0EyPgorPFU5NEE5PiA8VTkyMEU+OzxVOTI2ND4KKzxVOTRBQT4gPFU5MjI3PgorPFU5NEFCPiA8VTkyMDE+Cis8VTk0QUM+IDxVOTIyNT4KKzxVOTRBRD4gPFU5MjA0PgorPFU5NEFFPiA8VTkyMTU+Cis8VTk0QUY+IDxVOTIwMD4KKzxVOTRCMD4gPFU5MjNBPgorPFU5NEIxPiA8VTkyQUQ+OzxVOTMyMj4KKzxVOTRCMj4gPFU5MjY2PgorPFU5NEIzPiA8VTkyNTc+Cis8VTk0QjQ+IDxVOTIzNz4KKzxVOTRCNT4gPFU3NkNCPjs8VTdGM0Q+OzxVOTI2Mj4KKzxVOTRCNj4gPFU5MjMzPgorPFU5NEI3PiA8VTkyNTU+Cis8VTk0Qjg+IDxVOTIzRD4KKzxVOTRCOT4gPFU5MjM4PgorPFU5NEJBPiA8VTkyNUU+Cis8VTk0QkI+IDxVOTI0Nj47PFU5NDVBPjs8VTk0N0Q+Cis8VTk0QkM+IDxVOTI2Qz4KKzxVOTRCRD4gPFU5MjZEPgorPFU5NEJFPiA8VTkyNDA+Cis8VTk0QkY+IDxVOTIzRj4KKzxVOTRDMD4gPFU5MjNFPgorPFU5NEMxPiA8VTkyNDQ+OzxVOTQyMT47PFU5NDM1PgorPFU5NEMyPiA8VTkyNTE+Cis8VTk0QzM+IDxVOTIzND4KKzxVOTRDND4gPFU5NDYwPgorPFU5NEM1PiA8VTkyMDY+OzxVOTI1Qj4KKzxVOTRDNj4gPFU5MjVBPgorPFU5NEM3PiA8VTUyMjg+OzxVOTI0Qj4KKzxVOTRDOD4gPFU5MjMwPgorPFU5NEM5PiA8VTkyNDk+Cis8VTk0Q0E+IDxVOTI0Nz47PFU5MjQ4PgorPFU5NENCPiA8VTkyNEQ+Cis8VTk0Q0M+IDxVOTIyRT47PFU5MjY4PgorPFU5NENEPiA8VTkyMzk+Cis8VTk0Q0U+IDxVOTIyQz47PFU5NDM4PgorPFU5NENGPiA8VTkyNzY+Cis8VTk0RDA+IDxVOTJBQz4KKzxVOTREMT4gPFU5MkEwPgorPFU5NEQyPiA8VTkyN0E+Cis8VTk0RDM+IDxVOTJFOT4KKzxVOTREND4gPFU5MzBGPjs8VTk0MUE+Cis8VTk0RDU+IDxVOTJBQT4KKzxVOTRENj4gPFU5MkVFPgorPFU5NEQ3PiA8VTkyQ0Y+Cis8VTk0RDg+IDxVOTJFMz4KKzxVOTREOT4gPFU5NDAzPgorPFU5NERBPiA8VTkyOEQ+Cis8VTk0REI+IDxVOTQzQT4KKzxVOTREQz4gPFU5Mjg1PgorPFU5NEREPiA8VTkyQzE+Cis8VTk0REU+IDxVOTJCMT4KKzxVOTRERj4gPFU5MkE2PgorPFU5NEUwPiA8VTkzQTc+Cis8VTk0RTE+IDxVOTM1OD4KKzxVOTRFMj4gPFU5Mjk2PgorPFU5NEUzPiA8VTkyOTE+Cis8VTk0RTQ+IDxVOTJDQz4KKzxVOTRFNT4gPFU5MkE5PgorPFU5NEU2PiA8VTkyOUI+Cis8VTk0RTc+IDxVOTNGNT4KKzxVOTRFOD4gPFU5MjkzPgorPFU5NEU5PiA8VTkzQTk+Cis8VTk0RUE+IDxVOTI3Rj4KKzxVOTRFQj4gPFU5MjlBPjs8VTk0NDM+Cis8VTk0RUM+IDxVOTI3Qj4KKzxVOTRFRD4gPFU5Mjk4PgorPFU5NEVFPiA8VTkzMUE+Cis8VTk0RUY+IDxVOTJBQj4KKzxVOTRGMD4gPFU5Mjc4PgorPFU5NEYxPiA8VTkyQTU+Cis8VTk0RjI+IDxVNTIyQz47PFU1MjU3Pjs8VTUyNzc+OzxVOTNERj4KKzxVOTRGMz4gPFU5MjgzPgorPFU5NEY0PiA8VTk0MEI+Cis8VTk0RjU+IDxVOTJBOD4KKzxVOTRGNj4gPFU5MjgwPgorPFU5NEY3PiA8VTkyQTM+Cis8VTk0Rjg+IDxVOTJGMz47PFU5NDQ0PgorPFU5NEY5PiA8VTk0MTI+Cis8VTk0RkE+IDxVODIxNj47PFU4MjE3Pjs8VTkyRUE+Cis8VTk0RkI+IDxVOTJEOT4KKzxVOTRGQz4gPFU5MzM4PgorPFU5NEZEPiA8VTkyRjE+Cis8VTk0RkU+IDxVOTNDOD4KKzxVOTRGRj4gPFU5MzVFPjs8VTkzRDc+Cis8VTk1MDA+IDxVOTJCNz4KKzxVOTUwMT4gPFU5Mzk2PgorPFU5NTAyPiA8VTkyRjA+Cis8VTk1MDM+IDxVOTJFNT4KKzxVOTUwND4gPFU4MDIxPjs8VTkyRTQ+Cis8VTk1MDU+IDxVOTM0Qj4KKzxVOTUwNj4gPFU5MkVGPgorPFU5NTA3PiA8VTkyRTg+Cis8VTk1MDg+IDxVOTJCOT47PFU5M0U1Pjs8VTkzRkQ+Cis8VTk1MDk+IDxVOTJCQz4KKzxVOTUwQT4gPFU5MkREPgorPFU5NTBCPiA8VTkyRDI+Cis8VTk1MEM+IDxVOTJDNT4KKzxVOTUwRD4gPFU5MkY2PgorPFU5NTBFPiA8VTk0MjY+Cis8VTk1MEY+IDxVOTQxNz47PFU5NDI3PgorPFU5NTEwPiA8VTkyQjM+OzxVOTJFRD4KKzxVOTUxMT4gPFU5MkJCPgorPFU5NTEyPiA8VTkyQzM+Cis8VTk1MTM+IDxVOTJERj4KKzxVOTUxND4gPFU5MkU2PgorPFU5NTE1PiA8VTkzMTI+Cis8VTk1MTY+IDxVOTMwNj4KKzxVOTUxNz4gPFU5MzdBPgorPFU5NTE4PiA8VTkzNjk+Cis8VTk1MTk+IDxVOTMyRj4KKzxVOTUxQT4gPFU5MzI4PgorPFU5NTFCPiA8VTkzMUI+Cis8VTk1MUM+IDxVOTMyMT4KKzxVOTUxRD4gPFU5MzQwPgorPFU5NTFFPiA8VTkzMDE+Cis8VTk1MUY+IDxVOTMxNT4KKzxVOTUyMD4gPFU5MzI5PgorPFU5NTIxPiA8VTkzMkI+Cis8VTk1MjI+IDxVOTMyRT4KKzxVOTUyMz4gPFU5NDdDPgorPFU5NTI0PiA8VTkzMTg+OzxVOTM5QT4KKzxVOTUyNT4gPFU5MzEwPgorPFU5NTI2PiA8VTkzMjY+Cis8VTk1Mjc+IDxVOTQ1NT4KKzxVOTUyOD4gPFU5MzQxPgorPFU5NTI5PiA8VTkzMDg+Cis8VTk1MkE+IDxVOTM0Mz47PFU5MzZGPgorPFU5NTJCPiA8VTkzMDc+Cis8VTk1MkM+IDxVOTMxRj4KKzxVOTUyRD4gPFU5MzIwPgorPFU5NTJFPiA8VTkzNzU+Cis8VTk1MkY+IDxVOTJGOD4KKzxVOTUzMD4gPFU5MzMzPgorPFU5NTMxPiA8VTkzMTk+Cis8VTk1MzI+IDxVOTM2NT4KKzxVOTUzMz4gPFU5MzQ4PgorPFU5NTM0PiA8VTkzNDc+Cis8VTk1MzU+IDxVOTNEOD4KKzxVOTUzNj4gPFU5Mzc2PgorPFU5NTM3PiA8VTkzNTQ+Cis8VTk1Mzg+IDxVOTM2ND4KKzxVOTUzOT4gPFU5MzZDPgorPFU5NTNBPiA8VTkzN0U+OzxVOTQ5Rj4KKzxVOTUzQj4gPFU5MzVCPgorPFU5NTNDPiA8VTkzQUE+Cis8VTk1M0Q+IDxVOTM2MD4KKzxVOTUzRT4gPFU5MzcwPgorPFU5NTNGPiA8VTkzODQ+Cis8VTk1NDA+IDxVOTM0RD4KKzxVOTU0MT4gPFU5MzgyPgorPFU5NTQyPiA8VTkzRTQ+Cis8VTk1NDM+IDxVOTNBMT4KKzxVOTU0ND4gPFU5NDI4PgorPFU5NTQ1PiA8VTkzODc+Cis8VTk1NDY+IDxVOTNDQz4KKzxVOTU0Nz4gPFU5M0FEPjs8VTkzQUU+Cis8VTk1NDg+IDxVOTM5Qj4KKzxVOTU0OT4gPFU5Mzk4PgorPFU5NTRBPiA8VTk0Nzc+Cis8VTk1NEI+IDxVOTQ4Mj4KKzxVOTU0Qz4gPFU5M0I4Pjs8VTk0MkI+Cis8VTk1NEQ+IDxVOTNCMz4KKzxVOTU0RT4gPFU5M0JGPgorPFU5NTRGPiA8VTkzQTY+OzxVOTQwMj4KKzxVOTU1MD4gPFU5M0FDPgorPFU5NTUxPiA8VTkzOEE+Cis8VTk1NTI+IDxVOTNCMD4KKzxVOTU1Mz4gPFU5M0I1PgorPFU5NTU0PiA8VTk0NEM+Cis8VTk1NTY+IDxVOTNFMj4KKzxVOTU1Nz4gPFU5M0RDPgorPFU5NTU4PiA8VTkzREQ+Cis8VTk1NTk+IDxVOTNDRD4KKzxVOTU1QT4gPFU5M0YwPgorPFU5NTVCPiA8VTkzREU+Cis8VTk1NUM+IDxVOTNFMT4KKzxVOTU1RD4gPFU5M0QxPgorPFU5NTVFPiA8VTkzQzM+Cis8VTk1NUY+IDxVOTNDNz4KKzxVOTU2MD4gPFU5M0QwPgorPFU5NTYxPiA8VTk0MTQ+Cis8VTk1NjI+IDxVOTQxRD47PFU5NDgxPgorPFU5NTYzPiA8VTk0MTA+Cis8VTk1NjQ+IDxVOTNGNz4KKzxVOTU2NT4gPFU5NDY1PgorPFU5NTY2PiA8VTk0MTM+Cis8VTk1Njc+IDxVOTQ2RD4KKzxVOTU2OD4gPFU5NDIwPgorPFU5NTY5PiA8VTk0Nzk+Cis8VTk1NkE+IDxVOTNGOT4KKzxVOTU2Qj4gPFU5NDE5PgorPFU5NTZDPiA8VTk0NEE+Cis8VTk1NkQ+IDxVOTQzMz4KKzxVOTU2RT4gPFU5NDM2PgorPFU5NTZGPiA8VTk0MzI+Cis8VTk1NzA+IDxVOTM4Qz47PFU5NDJFPgorPFU5NTcxPiA8VTk0M0Y+Cis8VTk1NzI+IDxVOTQ1ND4KKzxVOTU3Mz4gPFU5NDYzPgorPFU5NTc0PiA8VTk0NUU+Cis8VTk1NzU+IDxVOTQ3MT4KKzxVOTU3Nj4gPFU5NDcyPgorPFU5NTc3PiA8VTRFRTc+OzxVNTE0Rj47PFU5NTc4Pjs8VTk1N0Y+Cis8VTk1Nzg+IDxVNEVFNz47PFU1MTRGPjs8VTk1Nzc+OzxVOTU3Rj4KKzxVOTU3OT4gPFU0RTQ1Pjs8VTRFNDY+Cis8VTk1N0Y+IDxVNEVFNz47PFU1MTRGPjs8VTk1Nzc+OzxVOTU3OD4KKzxVOTU4MD4gPFU5NUU4PgorPFU5NTgyPiA8VTk1RTk+Cis8VTk1ODM+IDxVOTVFQT4KKzxVOTU4Nj4gPFU5NUVCPgorPFU5NTg3PiA8VTk1ODk+OzxVOTVFRD4KKzxVOTU4OD4gPFU5NUVDPgorPFU5NTg5PiA8VTk1ODc+OzxVOTVFRD4KKzxVOTU4Qj4gPFU1RjAwPgorPFU5NThDPiA8VTk1RjY+Cis8VTk1OEU+IDxVOTVGMz4KKzxVOTU4Rj4gPFU5NUEwPjs8VTk1RjA+Cis8VTk1OTE+IDxVOTU5Mj47PFU5NUYyPgorPFU5NTkyPiA8VTk1OTE+OzxVOTVGMj4KKzxVOTU5Mz4gPFU5NUY0PgorPFU5NTk0PiA8VTk1RjU+Cis8VTk1OTg+IDxVOTVGOD4KKzxVOTU5OT4gPFU5NUY5Pjs8VTlCMjc+Cis8VTk1QTA+IDxVOTU4Rj47PFU5NUYwPgorPFU5NUExPiA8VTk2MDI+Cis8VTk1QTI+IDxVNTE3Mz47PFU5NUQ3Pjs8VTk1REM+Cis8VTk1QTM+IDxVOTYwMT4KKzxVOTVBND4gPFU1NDA4PgorPFU5NUE1PiA8VTk2MDA+Cis8VTk1QTc+IDxVNTRDND4KKzxVOTVBOD4gPFU5NUZBPgorPFU5NUE5PiA8VTk1RkQ+Cis8VTk1QUI+IDxVOTYwMz4KKzxVOTVBQz4gPFU5NjA2PgorPFU5NUFEPiA8VTk1RkU+Cis8VTk1QjE+IDxVOTVCMj47PFU5NjA1PgorPFU5NUIyPiA8VTk1QjE+OzxVOTYwNT4KKzxVOTVCND4gPFU5NUMzPjs8VTk2MTI+Cis8VTk1QjY+IDxVOTYwQT4KKzxVOTVCOT4gPFU1MjY2Pjs8VTk2MDk+Cis8VTk1QkI+IDxVOTYwRT4KKzxVOTVCQz4gPFU5NjBGPgorPFU5NUJEPiA8VTk2MEQ+Cis8VTk1QkU+IDxVOTYwOD4KKzxVOTVCRj4gPFU5NjBDPgorPFU5NUMzPiA8VTk1QjQ+OzxVOTYxMj4KKzxVOTVDNj4gPFU2NzdGPgorPFU5NUM3PiA8VTY2OTc+Cis8VTk1Qzg+IDxVOTVGMT4KKzxVOTVDQT4gPFU2RkY2Pjs8VTk2MTQ+Cis8VTk1Q0I+IDxVOTYxNT4KKzxVOTVDQz4gPFU5NjExPgorPFU5NUNEPiA8VTk2MDc+Cis8VTk1RDA+IDxVOTYxNz4KKzxVOTVEMj4gPFU5NjE4PgorPFU5NUQzPiA8VTk1RkY+Cis8VTk1RDQ+IDxVOTYxNj4KKzxVOTVENT4gPFU5NjE5PgorPFU5NUQ2PiA8VTk1RUY+Cis8VTk1RDc+IDxVNTE3Mz47PFU5NUEyPjs8VTk1REM+Cis8VTk1RDg+IDxVNjU5Nz47PFU5QjI1Pjs8VTlCMjY+OzxVOUIyQT47PFU5QjJEPgorPFU5NUQ5PiA8VTU0MkY+OzxVNTUxOD47PFU1NTUzPjs8VTU1NTQ+OzxVNTU1Rj47PFU4QUVDPgorPFU5NURDPiA8VTUxNzM+OzxVOTVBMj47PFU5NUQ3PgorPFU5NURFPiA8VTk2MUE+Cis8VTk1RTA+IDxVOTYxMz4KKzxVOTVFMT4gPFU5NjEwPgorPFU5NUUyPiA8VThGOUY+Cis8VTk1RTQ+IDxVOTYxQj4KKzxVOTVFNT4gPFU5NUZDPgorPFU5NUU4PiA8VTk1ODA+Cis8VTk1RTk+IDxVOTU4Mj4KKzxVOTVFQT4gPFU5NTgzPgorPFU5NUVCPiA8VTk1ODY+Cis8VTk1RUM+IDxVOTU4OD4KKzxVOTVFRD4gPFU5NTg3Pjs8VTk1ODk+Cis8VTk1RUU+IDxVNTU0Rj4KKzxVOTVFRj4gPFU5NUQ2PgorPFU5NUYwPiA8VTk1OEY+OzxVOTVBMD4KKzxVOTVGMT4gPFU5NUM4PgorPFU5NUYyPiA8VTk1OTE+OzxVOTU5Mj4KKzxVOTVGMz4gPFU5NThFPgorPFU5NUY0PiA8VTk1OTM+Cis8VTk1RjU+IDxVOTU5ND4KKzxVOTVGNj4gPFU5NThDPgorPFU5NUY3PiA8VTYwQjY+Cis8VTk1Rjg+IDxVOTU5OD4KKzxVOTVGOT4gPFU5NTk5Pjs8VTlCMjc+Cis8VTk1RkE+IDxVOTVBOD4KKzxVOTVGQj4gPFU4MDVFPgorPFU5NUZDPiA8VTk1RTU+Cis8VTk1RkQ+IDxVOTVBOT4KKzxVOTVGRT4gPFU5NUFEPgorPFU5NUZGPiA8VTk1RDM+Cis8VTk2MDA+IDxVOTVBNT4KKzxVOTYwMT4gPFU5NUEzPgorPFU5NjAyPiA8VTk1QTE+Cis8VTk2MDM+IDxVOTVBQj4KKzxVOTYwND4gPFU5QjJFPgorPFU5NjA1PiA8VTk1QjE+OzxVOTVCMj4KKzxVOTYwNj4gPFU5NUFDPgorPFU5NjA3PiA8VTk1Q0Q+Cis8VTk2MDg+IDxVOTVCRT4KKzxVOTYwOT4gPFU1MjY2Pjs8VTk1Qjk+Cis8VTk2MEE+IDxVOTVCNj4KKzxVOTYwQj4gPFU5QjI5PgorPFU5NjBDPiA8VTk1QkY+Cis8VTk2MEQ+IDxVOTVCRD4KKzxVOTYwRT4gPFU5NUJCPgorPFU5NjBGPiA8VTk1QkM+Cis8VTk2MTA+IDxVOTVFMT4KKzxVOTYxMT4gPFU5NUNDPgorPFU5NjEyPiA8VTk1QjQ+OzxVOTVDMz4KKzxVOTYxMz4gPFU5NUUwPgorPFU5NjE0PiA8VTZGRjY+OzxVOTVDQT4KKzxVOTYxNT4gPFU5NUNCPgorPFU5NjE2PiA8VTk1RDQ+Cis8VTk2MTc+IDxVOTVEMD4KKzxVOTYxOD4gPFU5NUQyPgorPFU5NjE5PiA8VTk1RDU+Cis8VTk2MUE+IDxVOTVERT47PFU5QjJCPgorPFU5NjFCPiA8VTk1RTQ+Cis8VTk2MUM+IDxVOTYxRD4KKzxVOTYxRD4gPFU5MDkxPjs8VTk2MUM+Cis8VTk2MUY+IDxVOTY4QT4KKzxVOTYyNT4gPFU0RjhDPjs8VTk2MzQ+OzxVOTY3MD47PFU5NjgyPgorPFU5NjI2PiA8VTk2MzM+OzxVOTY3RD4KKzxVOTYyOD4gPFU5NjM4PgorPFU5NjI5PiA8VTUzNDc+OzxVOTY1RT4KKzxVOTYyQT4gPFU1NzQyPjs8VTVDODU+Cis8VTk2MkI+IDxVNTc0Rj47PFU1NzZGPgorPFU5NjJDPiA8VTU3NTE+Cis8VTk2MkY+IDxVNTc0MD4KKzxVOTYzMT4gPFU3QTdEPgorPFU5NjMzPiA8VTk2MjY+OzxVOTY3RD4KKzxVOTYzND4gPFU0RjhDPjs8VTk2MjU+OzxVOTY3MD47PFU5NjgyPgorPFU5NjM1PiA8VTk2NjM+Cis8VTk2MzY+IDxVNTgyNj47PFU5NjhFPgorPFU5NjM4PiA8VTk2Mjg+Cis8VTk2M0I+IDxVNkNBRT4KKzxVOTY0MD4gPFU1NzY4Pjs8VTk2NDE+Cis8VTk2NDE+IDxVNTc2OD47PFU5NjQwPgorPFU5NjQ1PiA8VTk2OUI+Cis8VTk2NDY+IDxVOTY3OD4KKzxVOTY0Nz4gPFU5NkI0PgorPFU5NjQ4PiA8VTk2NzM+Cis8VTk2NDk+IDxVOTY1OD4KKzxVOTY0RD4gPFU1OTA1PgorPFU5NjU1PiA8VTk2NUM+OzxVOTY1RD47PFU5NjdGPgorPFU5NjU2PiA8VTU3Qzg+Cis8VTk2NTg+IDxVOTY0OT4KKzxVOTY1Qz4gPFU5NjU1Pjs8VTk2N0Y+Cis8VTk2NUQ+IDxVOTY1NT4KKzxVOTY1RT4gPFU1MzQ3Pjs8VTk2Mjk+Cis8VTk2NUY+IDxVNUY4Rj4KKzxVOTY2Mz4gPFU1ODY2Pjs8VTk2MzU+Cis8VTk2NjU+IDxVOTY3Nz4KKzxVOTY2Nj4gPFU1QzlCPjs8VTVDRjY+OzxVNUQ4Qj47PFU1RDhDPjs8VTVEQjk+OzxVOTY5RD47PFU5NkFGPgorPFU5NjY4PiA8VTk2OTU+Cis8VTk2Njk+IDxVNzkwNj47PFU5NjdBPjs8VTk2QUE+Cis8VTk2NzA+IDxVNEY4Qz47PFU5NjI1Pjs8VTk2MzQ+OzxVOTY4Mj4KKzxVOTY3Mz4gPFU5NjQ4PgorPFU5Njc3PiA8VTk2NjU+Cis8VTk2Nzg+IDxVOTY0Nj4KKzxVOTY3QT4gPFU3OTA2Pjs8VTk2Njk+OzxVOTZBQT4KKzxVOTY3Qj4gPFU1Nzk0Pjs8VTU4MTk+Cis8VTk2N0Q+IDxVOTYyNj47PFU5NjMzPgorPFU5NjdGPiA8VTk2NTU+OzxVOTY1Qz4KKzxVOTY4MT4gPFU1ODMwPjs8VTU4OTU+Cis8VTk2ODI+IDxVNEY4Qz47PFU5NjI1Pjs8VTk2MzQ+OzxVOTY3MD4KKzxVOTY4ND4gPFU1N0RFPjs8VTU4MjQ+Cis8VTk2OEE+IDxVOTYxRj4KKzxVOTY4Qz4gPFU2Njk3PgorPFU5NjhFPiA8VTU4MjY+OzxVOTYzNj4KKzxVOTY4Rj4gPFU5NkE4PgorPFU5NjkwPiA8VTRFNUE+OzxVOTZBMD47PFU5NkIxPgorPFU5Njk1PiA8VTc4RDI+OzxVOTY2OD4KKzxVOTY5Nj4gPFU1NzVFPgorPFU5Njk5PiA8VTk2OUY+Cis8VTk2OUI+IDxVOTY0NT4KKzxVOTY5RD4gPFU1QzlCPjs8VTVDRjY+OzxVNUQ4Qj47PFU1RDhDPjs8VTVEQjk+OzxVOTY2Nj47PFU5NkFGPgorPFU5NjlGPiA8VTk2OTk+Cis8VTk2QTA+IDxVNEU1QT47PFU5NjkwPjs8VTk2QjE+Cis8VTk2QTM+IDxVNTNCOD47PFU5MEJCPjs8VTkxMzA+Cis8VTk2QTg+IDxVOTY4Rj4KKzxVOTZBQT4gPFU3OTA2Pjs8VTk2Njk+OzxVOTY3QT4KKzxVOTZBQj4gPFU1NzVGPjs8VTU4QjM+Cis8VTk2QUU+IDxVOEU4Qj4KKzxVOTZBRj4gPFU1QzlCPjs8VTVDRjY+OzxVNUQ4Qj47PFU1RDhDPjs8VTVEQjk+OzxVOTY2Nj47PFU5NjlEPgorPFU5NkIxPiA8VTRFNUE+OzxVOTY5MD47PFU5NkEwPgorPFU5NkIyPiA8VTlBOTg+Cis8VTk2QjQ+IDxVOTY0Nz4KKzxVOTZCNj4gPFU5NkI3Pjs8VTk2Qjg+Cis8VTk2Qjc+IDxVOTZCNj47PFU5NkI4PgorPFU5NkI4PiA8VTk2QjY+OzxVOTZCNz4KKzxVOTZCQT4gPFU1QkM5Pjs8VTk3NEQ+OzxVOTc0RT47PFU5NzRGPjs8VTlEQjQ+OzxVOUUxNj47PFU5RTY0PgorPFU5NkJCPiA8VTUzRUE+Cis8VTk2QkQ+IDxVOTZDQj4KKzxVOTZCRT4gPFU5NkUzPgorPFU5NkMxPiA8VTlDRUI+OzxVOUQwOD4KKzxVOTZDNz4gPFU1MEYxPjs8VTlDRjg+Cis8VTk2Q0I+IDxVOTZCRD4KKzxVOTZDRD4gPFU5NkREPgorPFU5NkNGPiA8VTk2REI+Cis8VTk2RDE+IDxVNjc0Mj47PFU5NkRDPgorPFU5NkQ1PiA8VTVGNkI+OzxVNzQzMT47PFU5RDcwPgorPFU5NkQ2PiA8VTg2N0Q+Cis8VTk2RDk+IDxVNTNDQz4KKzxVOTZEQT4gPFU5RTFCPgorPFU5NkRCPiA8VTk2Q0Y+OzxVOURCNT4KKzxVOTZEQz4gPFU2NzQyPjs8VTk2RDE+Cis8VTk2REQ+IDxVOTZDRD4KKzxVOTZERT4gPFU5RDhGPjs8VTlEQzQ+OzxVOUUyMT4KKzxVOTZERj4gPFU1REIyPgorPFU5NkUwPiA8VThCOEU+OzxVOEI5MD4KKzxVOTZFMj4gPFU3OUJCPgorPFU5NkUzPiA8VTk2QkU+Cis8VTk2RjA+IDxVNkMxQj4KKzxVOTZGMj4gPFU0RTkxPgorPFU5NkYzPiA8VTk3NDI+Cis8VTk2RjY+IDxVOTcxNz4KKzxVOTZGNz4gPFU5NzQxPgorPFU5NkZBPiA8VTk3MUE+OzxVOTcyNz4KKzxVOTZGQj4gPFU3NTM1PgorPFU5NkZFPiA8VTk3MUE+OzxVOTcyNz4KKzxVOTcwMT4gPFU5NzNEPgorPFU5NzA5PiA8VTlFRjQ+Cis8VTk3MEE+IDxVNzA3NT47PFU5NzFCPjs8VTk3NDg+Cis8VTk3MTE+IDxVNkNCRT4KKzxVOTcxNz4gPFU5NkY2PgorPFU5NzFBPiA8VTk2RkE+OzxVOTZGRT47PFU5NzI3PgorPFU5NzFCPiA8VTcwNzU+OzxVOTcwQT47PFU5NzQ4PgorPFU5NzIxPiA8VTk3MjI+Cis8VTk3MjI+IDxVOTcyMT4KKzxVOTcyNz4gPFU5NkZBPjs8VTk2RkU+OzxVOTcxQT4KKzxVOTcyRD4gPFU5NzQ0PgorPFU5NzM4PiA8VTg5ODc+Cis8VTk3M0I+IDxVNEUzMD47PFU4QzRBPjs8VThDNTA+OzxVOTc0QT4KKzxVOTczRD4gPFU5NzAxPgorPFU5NzQxPiA8VTk2Rjc+Cis8VTk3NDI+IDxVOTZGMz4KKzxVOTc0ND4gPFU5NzJEPgorPFU5NzQ2PiA8VTUzQzc+Cis8VTk3NDg+IDxVNzA3NT47PFU5NzBBPjs8VTk3MUI+Cis8VTk3NDk+IDxVNTNDNj4KKzxVOTc0QT4gPFU0RTMwPjs8VThDNEE+OzxVOEM1MD47PFU5NzNCPgorPFU5NzREPiA8VTVCQzk+OzxVOTZCQT47PFU5NzRFPjs8VTk3NEY+OzxVOURCND47PFU5RTE2Pjs8VTlFNjQ+Cis8VTk3NEU+IDxVNUJDOT47PFU5NkJBPjs8VTk3NEQ+OzxVOTc0Rj47PFU5REI0Pjs8VTlFMTY+OzxVOUU2ND4KKzxVOTc0Rj4gPFU1QkM5Pjs8VTk2QkE+OzxVOTc0RD47PFU5NzRFPjs8VTlEQjQ+OzxVOUUxNj47PFU5RTY0PgorPFU5NzUxPiA8VTVCQzg+OzxVOTc1Mj4KKzxVOTc1Mj4gPFU1QkM4Pjs8VTk3NTE+Cis8VTk3NTM+IDxVOTc1QT4KKzxVOTc1ND4gPFU1MTcyPjs8VTU5Mjk+OzxVOTc1RD4KKzxVOTc1OT4gPFU5NzVDPgorPFU5NzVBPiA8VTk3NTM+Cis8VTk3NUM+IDxVOTc1OT4KKzxVOTc1RD4gPFU1MTcyPjs8VTU5Mjk+OzxVOTc1ND4KKzxVOTc2Mj4gPFU3Q0M2Pjs8VTk3NjM+OzxVOUVBQT47PFU5RUFCPjs8VTlFQjU+OzxVOUVCQT4KKzxVOTc2Mz4gPFU5NzYyPgorPFU5NzY0PiA8VTc1QjE+OzxVNzZCMD4KKzxVOTc2NT4gPFU5NzY4PgorPFU5NzY3PiA8VTk4MkU+Cis8VTk3Njg+IDxVOTc2NT4KKzxVOTc2Qj4gPFU5NzZEPjs8VTk3NzE+Cis8VTk3NkQ+IDxVOTc2Qj47PFU5NzcxPjs8VTk3RTc+Cis8VTk3NzE+IDxVOTc2Qj47PFU5NzZEPjs8VTk3RTc+Cis8VTk3NzQ+IDxVOTdCRT4KKzxVOTc3RD4gPFU3RDQ2PgorPFU5NzgwPiA8VTk3ODk+OzxVOUYxNz4KKzxVOTc4OT4gPFU5NzgwPjs8VTlGMTc+Cis8VTk3OEI+IDxVOTdCNT4KKzxVOTc4Qz4gPFU5NzhEPgorPFU5NzhEPiA8VTk3OEM+Cis8VTk3OEY+IDxVNURFOT4KKzxVOTc5MT4gPFU5N0MzPgorPFU5NzkyPiA8VTk3QkQ+Cis8VTk3OUY+IDxVOTdCOT4KKzxVOTdBNj4gPFU3OUNCPjs8VTk3QTc+Cis8VTk3QTc+IDxVNzlDQj47PFU5N0E2PgorPFU5N0E4PiA8VTc4OUY+Cis8VTk3QUY+IDxVOTdDOT4KKzxVOTdCMT4gPFU4RjQxPjs8VTk3REM+Cis8VTk3QjI+IDxVOTdERD4KKzxVOTdCNT4gPFU5NzhCPgorPFU5N0I5PiA8VTk3OUY+Cis8VTk3QkQ+IDxVOTc5Mj4KKzxVOTdCRT4gPFU5Nzc0PgorPFU5N0MxPiA8VTdFNkU+OzxVN0YzMD4KKzxVOTdDMz4gPFU5NzkxPgorPFU5N0M2PiA8VTUzNDM+Cis8VTk3Qzg+IDxVODg5Qz47PFU5N0U0PgorPFU5N0M5PiA8VTk3QUY+Cis8VTk3Q0I+IDxVOTdFNj4KKzxVOTdDQz4gPFU5N0U3PgorPFU5N0NEPiA8VTVERkY+OzxVOTdFOD4KKzxVOTdEMz4gPFU5N0U5PgorPFU5N0Q5PiA8VTk3RUE+Cis8VTk3REM+IDxVOEY0MT47PFU5N0IxPjs8VTk3RUM+Cis8VTk3REQ+IDxVOTdCMj4KKzxVOTdERT4gPFU5N0VCPgorPFU5N0U0PiA8VTg4OUM+OzxVOTdDOD4KKzxVOTdFNj4gPFU5N0NCPgorPFU5N0U3PiA8VTk3NkQ+OzxVOTc3MT47PFU5N0NDPgorPFU5N0U4PiA8VTVERkY+OzxVOTdDRD4KKzxVOTdFOT4gPFU5N0QzPgorPFU5N0VBPiA8VTk3RDk+Cis8VTk3RUI+IDxVOTdERT4KKzxVOTdFQz4gPFU4RjQxPjs8VTk3REM+Cis8VTk3RUQ+IDxVOTdFRT4KKzxVOTdFRT4gPFU5N0VEPgorPFU5N0VGPiA8VTk3RjE+Cis8VTk3RjE+IDxVOTdFRj4KKzxVOTdGMj4gPFU5RjRGPjs8VTlGNTE+Cis8VTk3RjU+IDxVOTdGQj4KKzxVOTdGQj4gPFU5N0Y1PgorPFU5N0ZGPiA8VTU0Q0Q+Cis8VTk4MDE+IDxVOTg3NT4KKzxVOTgwMj4gPFU5ODc2PgorPFU5ODAzPiA8VTk4Nzc+Cis8VTk4MDU+IDxVOTg3OT4KKzxVOTgwNj4gPFU5ODdBPgorPFU5ODA3PiA8VTk4Nzg+Cis8VTk4MDg+IDxVOTg3Qj4KKzxVOTgwQT4gPFU5ODdDPgorPFU5ODBDPiA8VTk4ODI+Cis8VTk4MEU+IDxVOTg4MD4KKzxVOTgwRj4gPFU5ODgzPgorPFU5ODEwPiA8VTk4ODQ+Cis8VTk4MTE+IDxVOTg3RD4KKzxVOTgxMj4gPFU5ODgxPgorPFU5ODEzPiA8VTk4N0Y+Cis8VTk4MTc+IDxVOTg4Nz4KKzxVOTgxOD4gPFU5ODg2PgorPFU5ODFBPiA8VTk4Mzg+OzxVOTg4OD4KKzxVOTgxQz4gPFU5ODhDPgorPFU5ODIxPiA8VTk4ODk+Cis8VTk4MjQ+IDxVOTgyNT47PFU5ODkwPgorPFU5ODI1PiA8VTk4MjQ+OzxVOTg5MD4KKzxVOTgyNj4gPFU5ODhGPgorPFU5ODJDPiA8VTk4MzA+OzxVOTg4QT4KKzxVOTgyRD4gPFU1OTM0PgorPFU5ODJFPiA8VTk3Njc+OzxVOTg5Mj4KKzxVOTgzMD4gPFU5ODJDPjs8VTk4OEE+Cis8VTk4MzI+IDxVOTg4Qj4KKzxVOTgzND4gPFU3QTRFPjs8VTk4OTY+Cis8VTk4Mzc+IDxVOTg5ND4KKzxVOTgzOD4gPFU5ODFBPjs8VTk4ODg+Cis8VTk4Mzk+IDxVN0E2OD47PFU5ODNBPjs8VTk4M0Q+OzxVOTg5Mz4KKzxVOTgzQT4gPFU3QTY4Pjs8VTk4Mzk+OzxVOTgzRD47PFU5ODkzPgorPFU5ODNCPiA8VTk4OTE+Cis8VTk4M0M+IDxVOENGND47PFU4RDU2PgorPFU5ODNEPiA8VTdBNjg+OzxVOTgzOT47PFU5ODNBPjs8VTk4OTM+Cis8VTk4M0U+IDxVOUFFRD4KKzxVOTg0Nj4gPFU5ODk3PgorPFU5ODRCPiA8VTgxNkU+Cis8VTk4NEM+IDxVOTg5OD4KKzxVOTg0RD4gPFU5ODlEPgorPFU5ODRFPiA8VTk4OUE+Cis8VTk4NEY+IDxVOTg1ND47PFU5ODlDPgorPFU5ODUyPiA8VTk4OTk+Cis8VTk4NTM+IDxVOTg5Qj4KKzxVOTg1ND4gPFU5ODRGPjs8VTk4OUM+Cis8VTk4NTU+IDxVNjYzRT47PFU5ODZGPgorPFU5ODU2PiA8VTU2REY+Cis8VTk4NTg+IDxVNjEzRj4KKzxVOTg1OT4gPFU5OEExPgorPFU5ODVBPiA8VTk4NUI+OzxVOThBMD4KKzxVOTg1Qj4gPFU5ODVBPjs8VTk4QTA+Cis8VTk4NUU+IDxVN0M3Qj4KKzxVOTg2Mj4gPFU5ODlGPgorPFU5ODY1PiA8VTk4QTI+Cis8VTk4Njc+IDxVOTg3RT4KKzxVOTg2Qj4gPFU5OEE0PgorPFU5ODZDPiA8VTk4QTU+Cis8VTk4NkY+IDxVNjYzRT47PFU5ODU1PgorPFU5ODcwPiA8VTk4QTY+Cis8VTk4NzE+IDxVOTg4NT47PFU5QUQ3Pjs8VTlFMTU+Cis8VTk4NzM+IDxVOTg5RT4KKzxVOTg3ND4gPFU5OEE3PgorPFU5ODc1PiA8VTk4MDE+Cis8VTk4NzY+IDxVOTgwMj4KKzxVOTg3Nz4gPFU5ODAzPgorPFU5ODc4PiA8VTk4MDc+Cis8VTk4Nzk+IDxVOTgwNT4KKzxVOTg3QT4gPFU5ODA2PgorPFU5ODdCPiA8VTk4MDg+OzxVOUIxQT4KKzxVOTg3Qz4gPFU5ODBBPgorPFU5ODdEPiA8VTk4MTE+Cis8VTk4N0U+IDxVOTg2Nz4KKzxVOTg3Rj4gPFU5ODEzPgorPFU5ODgwPiA8VTk4MEU+Cis8VTk4ODE+IDxVOTgxMj4KKzxVOTg4Mj4gPFU5ODBDPgorPFU5ODgzPiA8VTk4MEY+Cis8VTk4ODQ+IDxVOTgxMD4KKzxVOTg4NT4gPFU5ODcxPjs8VTlBRDc+Cis8VTk4ODY+IDxVOTgxOD4KKzxVOTg4Nz4gPFU5ODE3PgorPFU5ODg4PiA8VTk4MUE+OzxVOTgzOD4KKzxVOTg4OT4gPFU5ODIxPgorPFU5ODhBPiA8VTk4MkM+OzxVOTgzMD4KKzxVOTg4Qj4gPFU5ODMyPgorPFU5ODhDPiA8VTk4MUM+Cis8VTk4OEQ+IDxVNkY0MT4KKzxVOTg4RT4gPFU3MUIyPgorPFU5ODhGPiA8VTk4MjY+Cis8VTk4OTA+IDxVOTgyND47PFU5ODI1PgorPFU5ODkxPiA8VTk4M0I+Cis8VTk4OTI+IDxVOTgyRT4KKzxVOTg5Mz4gPFU3QTY4Pjs8VTk4Mzk+OzxVOTgzQT47PFU5ODNEPgorPFU5ODk0PiA8VTk4Mzc+Cis8VTk4OTY+IDxVN0E0RT47PFU5ODM0PgorPFU5ODk3PiA8VTk4NDY+Cis8VTk4OTg+IDxVOTg0Qz4KKzxVOTg5OT4gPFU5ODUyPgorPFU5ODlBPiA8VTk4NEU+Cis8VTk4OUI+IDxVOTg1Mz4KKzxVOTg5Qz4gPFU5ODRGPjs8VTk4NTQ+Cis8VTk4OUQ+IDxVOTg0RD4KKzxVOTg5RT4gPFU5ODczPgorPFU5ODlGPiA8VTk4NjI+Cis8VTk4QTA+IDxVOTg1QT47PFU5ODVCPgorPFU5OEExPiA8VTk4NTk+Cis8VTk4QTI+IDxVOTg2NT4KKzxVOThBMz4gPFU3RTg3PgorPFU5OEE0PiA8VTk4NkI+Cis8VTk4QTU+IDxVOTg2Qz4KKzxVOThBNj4gPFU5ODcwPgorPFU5OEE3PiA8VTk4NzQ+Cis8VTk4QTg+IDxVNEUzMD47PFU1MUU4Pjs8VTUxRUM+OzxVNTFFRT47PFU4QUY3Pjs8VThCQkQ+OzxVOThDQz47PFU5OENFPgorPFU5OEFEPiA8VTk4RDA+Cis8VTk4QUU+IDxVOThCNz47PFU5OEM2Pjs8VTk4Qzg+OzxVOThEMT4KKzxVOThBRj4gPFU5OEQyPgorPFU5OEIxPiA8VTUzRjA+Cis8VTk4QjM+IDxVNTIyRT4KKzxVOThCNj4gPFU5OEQzPgorPFU5OEI3PiA8VTk4QUU+OzxVOThDNj47PFU5OEM4PgorPFU5OEI4PiA8VTk4RDQ+Cis8VTk4QkE+IDxVOThDRj4KKzxVOThCQj4gPFU5OEQ2PgorPFU5OEJDPiA8VTk4RDU+Cis8VTk4QzA+IDxVOThENz4KKzxVOThDMz4gPFU5OEM0Pjs8VTk4RDg+Cis8VTk4QzQ+IDxVOThDMz47PFU5OEQ4PgorPFU5OEM2PiA8VTk4QUU+OzxVOThCNz47PFU5OEM3Pjs8VTk4Qzg+OzxVOThEOT4KKzxVOThDNz4gPFU5OEM2PgorPFU5OEM4PiA8VTk4QUU+OzxVOThCNz47PFU5OEM2Pjs8VTk4REE+Cis8VTk4Q0M+IDxVNTFFOD47PFU1MUVDPjs8VTUxRUU+OzxVOThBOD47PFU5OENFPgorPFU5OENFPiA8VTRFMzA+OzxVNTFFOD47PFU1MUVDPjs8VTUxRUU+OzxVOThBOD47PFU5OENDPgorPFU5OENGPiA8VTk4QkE+Cis8VTk4RDA+IDxVOThBRD4KKzxVOThEMT4gPFU5OEFFPgorPFU5OEQyPiA8VTk4QUY+Cis8VTk4RDM+IDxVOThCNj4KKzxVOThEND4gPFU5OEI4PgorPFU5OEQ1PiA8VTk4QkM+Cis8VTk4RDY+IDxVOThCQj4KKzxVOThENz4gPFU5OEMwPgorPFU5OEQ4PiA8VTk4QzM+OzxVOThDND4KKzxVOThEOT4gPFU5OEM2PgorPFU5OERBPiA8VTk4Qzg+Cis8VTk4REI+IDxVOThERT4KKzxVOThEQz4gPFU3RkZCPgorPFU5OERFPiA8VTk4REI+Cis8VTk4REY+IDxVNTVCMD47PFU5OEUwPjs8VTk5NjM+Cis8VTk4RTA+IDxVNTVCMD47PFU5OERGPjs8VTk5NjM+Cis8VTk4RTE+IDxVOTkxMD4KKzxVOThFMj4gPFU5OTY1PgorPFU5OEUzPiA8VTk5NjQ+Cis8VTk4RTU+IDxVOTk2Nj4KKzxVOThFOD4gPFU5OTU3PgorPFU5OEU5PiA8VTk5Njg+Cis8VTk4RUE+IDxVOTk2QT4KKzxVOThFQj4gPFU3OUQ3Pjs8VTk5NkI+Cis8VTk4RUM+IDxVOTkwQT4KKzxVOThFRD4gPFU5OTZDPgorPFU5OEVFPiA8VTk4RjI+OzxVOTk2RT4KKzxVOThFRj4gPFU5OEYwPjs8VTk5NkQ+Cis8VTk4RjA+IDxVOThFRj4KKzxVOThGMj4gPFU5OEVFPjs8VTk5NkU+Cis8VTk4RjQ+IDxVOTk3ND4KKzxVOThGNj4gPFU5OTlEPgorPFU5OEZDPiA8VTk5NzI+Cis8VTk4RkQ+IDxVOTk3MT4KKzxVOThGRT4gPFU5OTcwPgorPFU5OEZGPiA8VTk5NzM+Cis8VTk5MDM+IDxVOTk3QT4KKzxVOTkwND4gPFU5OTc4PgorPFU5OTA1PiA8VTk5MjA+OzxVOTk3Qz4KKzxVOTkwOT4gPFU5NDVDPjs8VTk5NUY+OzxVOTk3Nz4KKzxVOTkwQT4gPFU1MTdCPjs8VTdGQUE+OzxVOThFQz4KKzxVOTkwQz4gPFU5OTc1PgorPFU5OTBEPiA8VTk5NUM+Cis8VTk5MEU+IDxVOTk3OT4KKzxVOTkwRj4gPFU5OTdCPgorPFU5OTEwPiA8VTk4RTE+Cis8VTk5MTE+IDxVOTk3RD4KKzxVOTkxMj4gPFU5OTI3Pjs8VTk5ODE+Cis8VTk5MTM+IDxVOTk3Rj4KKzxVOTkxNT4gPFU5OTgyPgorPFU5OTE2PiA8VTk5N0U+Cis8VTk5MTg+IDxVNEY1OT47PFU5OTgwPgorPFU5OTFBPiA8VTgwQjQ+Cis8VTk5MUI+IDxVOTk4ND4KKzxVOTkxQz4gPFU5OTgzPgorPFU5OTFFPiA8VTk5NkY+Cis8VTk5MUY+IDxVOTE4QT4KKzxVOTkyMD4gPFU5OTA1Pjs8VTk5N0M+Cis8VTk5MjE+IDxVOTk4NT4KKzxVOTkyNz4gPFU1NTgyPjs8VTk5MTI+OzxVOTkzNT47PFU5OTgxPgorPFU5OTI4PiA8VTgyMTg+OzxVOTk4Nj4KKzxVOTkyQz4gPFU3Q0NBPgorPFU5OTMxPiA8VTdDQzc+Cis8VTk5MzM+IDxVOTk2Nz4KKzxVOTkzND4gPFU5OTU5PgorPFU5OTM1PiA8VTU1ODI+OzxVOTkyNz4KKzxVOTkzNj4gPFU5OTg5PgorPFU5OTM3PiA8VTk5ODc+Cis8VTk5Mzk+IDxVOTk2Nz4KKzxVOTkzQT4gPFU5OThFPgorPFU5OTNCPiA8VTdDRDU+Cis8VTk5M0M+IDxVOTk2OT4KKzxVOTkzRD4gPFU5OTg4PgorPFU5OTNFPiA8VTk5OEY+Cis8VTk5M0Y+IDxVOTk4QT4KKzxVOTk0MT4gPFU5OThDPgorPFU5OTQzPiA8VTk5OEQ+Cis8VTk5NDU+IDxVOTk5Mj4KKzxVOTk0OD4gPFU5OTkwPgorPFU5OTQ5PiA8VTk5OTE+Cis8VTk5NEE+IDxVOTk5Mz4KKzxVOTk0Qj4gPFU5OTg4PgorPFU5OTRDPiA8VTk5OTQ+Cis8VTk5NEQ+IDxVODFCMz4KKzxVOTk0RT4gPFU3Q0U2PgorPFU5OTUxPiA8VTk5NjU+Cis8VTk5NTI+IDxVOTk3Nj4KKzxVOTk1Nz4gPFU5OEU4PgorPFU5OTU5PiA8VTk5MzQ+Cis8VTk5NUM+IDxVOTkwRD4KKzxVOTk1RT4gPFU5OThCPgorPFU5OTVGPiA8VTk0NUM+OzxVOTkwOT47PFU5OTc3PgorPFU5OTYyPiA8VTk5OTU+Cis8VTk5NjM+IDxVNTVCMD47PFU5OERGPjs8VTk4RTA+Cis8VTk5NjQ+IDxVOThFMz4KKzxVOTk2NT4gPFU5OEUyPjs8VTk5NTE+Cis8VTk5NjY+IDxVOThFNT4KKzxVOTk2Nz4gPFU5OTMzPjs8VTk5Mzk+Cis8VTk5Njg+IDxVOThFOT4KKzxVOTk2OT4gPFU5OTNDPgorPFU5OTZBPiA8VTk4RUE+Cis8VTk5NkI+IDxVOThFQj4KKzxVOTk2Qz4gPFU5OEVEPgorPFU5OTZEPiA8VTk4RUY+Cis8VTk5NkU+IDxVOThFRT47PFU5OEYyPgorPFU5OTZGPiA8VTk5MUU+Cis8VTk5NzA+IDxVOThGRT4KKzxVOTk3MT4gPFU5OEZEPgorPFU5OTcyPiA8VTk4RkM+Cis8VTk5NzM+IDxVOThGRj4KKzxVOTk3ND4gPFU5OEY0PgorPFU5OTc1PiA8VTk5MEM+Cis8VTk5NzY+IDxVOTk1Mj4KKzxVOTk3Nz4gPFU5OTA5Pjs8VTk5NUY+Cis8VTk5Nzg+IDxVOTkwND4KKzxVOTk3OT4gPFU5OTBFPgorPFU5OTdBPiA8VTk5MDM+Cis8VTk5N0I+IDxVOTkwRj4KKzxVOTk3Qz4gPFU5OTA1Pjs8VTk5MjA+Cis8VTk5N0Q+IDxVOTkxMT4KKzxVOTk3RT4gPFU5OTE2PgorPFU5OTdGPiA8VTk5MTM+Cis8VTk5ODA+IDxVNEY1OT47PFU5OTE4PgorPFU5OTgxPiA8VTk5MTI+OzxVOTkyNz4KKzxVOTk4Mj4gPFU5OTE1PgorPFU5OTgzPiA8VTk5MUM+Cis8VTk5ODQ+IDxVOTkxQj4KKzxVOTk4NT4gPFU5OTIxPgorPFU5OTg2PiA8VTk5Mjg+Cis8VTk5ODc+IDxVOTkzNz4KKzxVOTk4OD4gPFU5OTNEPjs8VTk5NEI+Cis8VTk5ODk+IDxVOTkzNj4KKzxVOTk4QT4gPFU5OTNGPgorPFU5OThCPiA8VTk5NUU+Cis8VTk5OEM+IDxVOTk0MT4KKzxVOTk4RD4gPFU5OTQzPgorPFU5OThFPiA8VTk5M0E+Cis8VTk5OEY+IDxVOTkzRT4KKzxVOTk5MD4gPFU5OTQ4PgorPFU5OTkxPiA8VTk5NDk+Cis8VTk5OTI+IDxVOTk0NT4KKzxVOTk5Mz4gPFU5OTRBPgorPFU5OTk0PiA8VTk5NEM+Cis8VTk5OTU+IDxVOTk2Mj4KKzxVOTk5RD4gPFU5OEY2PgorPFU5OTlFPiA8VTk5OUY+Cis8VTk5OUY+IDxVOTk5RT4KKzxVOTlBQz4gPFU5QTZDPgorPFU5OUFEPiA8VTlBNkQ+Cis8VTk5QUU+IDxVNTFBRj4KKzxVOTlCMT4gPFU5OUM0Pjs8VTlBNkU+Cis8VTk5QjI+IDxVOUE1RD4KKzxVOTlCMz4gPFU5QTcwPgorPFU5OUI0PiA8VTlBNkY+Cis8VTk5Qjk+IDxVOUE3Mj4KKzxVOTlCRD4gPFU3RTM2PgorPFU5OUJGPiA8VTlBNjI+OzxVOUE3ND4KKzxVOTlDMT4gPFU5QTczPgorPFU5OUM0PiA8VTk5QjE+OzxVOUE2RT4KKzxVOTlDNT4gPFU5QTVCPjs8VTlBN0Y+Cis8VTk5QzY+IDxVNjU3QT47PFU5OUM4Pjs8VTlBNDU+OzxVOUE3MT4KKzxVOTlDOD4gPFU2NTdBPjs8VTk5QzY+OzxVOUE0NT47PFU5QTcxPgorPFU5OUQwPiA8VTlBN0I+Cis8VTk5RDE+IDxVOUE3RD4KKzxVOTlEMj4gPFU5QTc5PgorPFU5OUQ0PiA8VTlBNzU+Cis8VTk5RDU+IDxVOUE3RT4KKzxVOTlEOD4gPFU5QTgwPgorPFU5OUQ5PiA8VTlBNzg+Cis8VTk5REI+IDxVOUE3Nj4KKzxVOTlERD4gPFU5OURFPjs8VTlBN0M+Cis8VTk5REU+IDxVOTlERD47PFU5QTdDPgorPFU5OURGPiA8VTlBNzc+Cis8VTk5RTE+IDxVNTA4Qz47PFU3Rjc1Pjs8VTlBODI+Cis8VTk5RTI+IDxVOUE4OD4KKzxVOTlFRD4gPFU5QTg3PgorPFU5OUVFPiA8VTlBNzM+Cis8VTk5RjA+IDxVOUE4Mz4KKzxVOTlGMT4gPFU5QTg2PgorPFU5OUY1PiA8VTlBMkU+OzxVOUE1MT4KKzxVOTlGOD4gPFU5QThFPgorPFU5OUZGPiA8VTlBOEY+Cis8VTlBMDE+IDxVOUE4Qj4KKzxVOUEwMj4gPFU5QThEPgorPFU5QTA1PiA8VTlBOTM+Cis8VTlBMEQ+IDxVOUE5Mj4KKzxVOUEwRT4gPFU5QTkxPgorPFU5QTBGPiA8VTlBOTA+Cis8VTlBMTA+IDxVOUExMz47PFU5QTU3Pjs8VTlBOEM+Cis8VTlBMTI+IDxVOUEzNz47PFU5QTlBPgorPFU5QTEzPiA8VTlBMTA+OzxVOUE1Nz47PFU5QThDPgorPFU5QTE2PiA8VTlBOUI+Cis8VTlBMTk+IDxVOUE5Nz4KKzxVOUEyND4gPFU5QTk5PgorPFU5QTI4PiA8VTlBNTI+Cis8VTlBMkI+IDxVOUE5RT4KKzxVOUEyRD4gPFU5QTk4PgorPFU5QTJFPiA8VTk5RjU+OzxVOUE1MT47PFU5QTlEPgorPFU5QTMwPiA8VTgxN0U+Cis8VTlBMzY+IDxVOUE3QT4KKzxVOUEzNz4gPFU5QTEyPjs8VTlBOUE+Cis8VTlBMzg+IDxVOUE5Rj4KKzxVOUEzQT4gPFU5QTQ3PgorPFU5QTNFPiA8VTlBQTE+Cis8VTlBNDA+IDxVODRFNj4KKzxVOUE0MT4gPFU5QTlDPgorPFU5QTQyPiA8VTlBOTY+Cis8VTlBNDM+IDxVOUFBMD4KKzxVOUE0ND4gPFU5QUEyPgorPFU5QTQ1PiA8VTY1N0E+OzxVOTlDNj47PFU5OUM4Pjs8VTlBNzE+Cis8VTlBNDc+IDxVOUEzQT4KKzxVOUE0QT4gPFU5QTg1PgorPFU5QTRDPiA8VTlBOTU+Cis8VTlBNEQ+IDxVOUE4MT4KKzxVOUE0Rj4gPFU5QUEzPgorPFU5QTUxPiA8VTk5RjU+OzxVOUEyRT47PFU5QTlEPgorPFU5QTUyPiA8VTlBMjg+Cis8VTlBNTU+IDxVOUE4ND4KKzxVOUE1Nz4gPFU5QTEwPjs8VTlBMTM+OzxVOUE4Qz4KKzxVOUE1QT4gPFU2MENBPgorPFU5QTVCPiA8VTk5QzU+OzxVOUE3Rj4KKzxVOUE1RD4gPFU5OUIyPgorPFU5QTVGPiA8VTlBQTQ+Cis8VTlBNjI+IDxVOTlCRj47PFU5QTc0PgorPFU5QTY0PiA8VTlBQTc+Cis8VTlBNjU+IDxVODYwRT47PFU5QUE1PgorPFU5QTY2PiA8VTlBQTY+Cis8VTlBNjk+IDxVNkIyMj4KKzxVOUE2QT4gPFU5QThBPgorPFU5QTZCPiA8VTlBODk+Cis8VTlBNkM+IDxVOTlBQz4KKzxVOUE2RD4gPFU5OUFEPgorPFU5QTZFPiA8VTk5QjE+OzxVOTlDND4KKzxVOUE2Rj4gPFU5OUI0PgorPFU5QTcwPiA8VTk5QjM+Cis8VTlBNzE+IDxVNjU3QT47PFU5OUM2Pjs8VTk5Qzg+OzxVOUE0NT4KKzxVOUE3Mj4gPFU5OUI5PgorPFU5QTczPiA8VTk5QzE+OzxVOTlFRT4KKzxVOUE3ND4gPFU5OUJGPjs8VTlBNjI+Cis8VTlBNzU+IDxVOTlEND4KKzxVOUE3Nj4gPFU5OURCPgorPFU5QTc3PiA8VTk5REY+Cis8VTlBNzg+IDxVOTlEOT4KKzxVOUE3OT4gPFU5OUQyPgorPFU5QTdBPiA8VTlBMzY+Cis8VTlBN0I+IDxVOTlEMD4KKzxVOUE3Qz4gPFU5OUREPjs8VTk5REU+Cis8VTlBN0Q+IDxVOTlEMT4KKzxVOUE3RT4gPFU5OUQ1PgorPFU5QTdGPiA8VTk5QzU+OzxVOUE1Qj4KKzxVOUE4MD4gPFU5OUQ4PgorPFU5QTgxPiA8VTlBNEQ+Cis8VTlBODI+IDxVNTA4Qz47PFU3Rjc1Pjs8VTk5RTE+Cis8VTlBODM+IDxVOTlGMD4KKzxVOUE4ND4gPFU5QTU1PgorPFU5QTg1PiA8VTlBNEE+Cis8VTlBODY+IDxVOTlGMT4KKzxVOUE4Nz4gPFU5OUVEPgorPFU5QTg4PiA8VTk5RTI+Cis8VTlBODk+IDxVOUE2Qj4KKzxVOUE4QT4gPFU5QTZBPgorPFU5QThCPiA8VTlBMDE+Cis8VTlBOEM+IDxVOUExMD47PFU5QTEzPjs8VTlBNTc+Cis8VTlBOEQ+IDxVOUEwMj4KKzxVOUE4RT4gPFU5OUY4PgorPFU5QThGPiA8VTk5RkY+Cis8VTlBOTA+IDxVOUEwRj4KKzxVOUE5MT4gPFU5QTBFPgorPFU5QTkyPiA8VTlBMEQ+Cis8VTlBOTM+IDxVOUEwNT4KKzxVOUE5NT4gPFU5QTRDPgorPFU5QTk2PiA8VTlBNDI+Cis8VTlBOTc+IDxVOUExOT4KKzxVOUE5OD4gPFU5NkIyPjs8VTlBMkQ+Cis8VTlBOTk+IDxVOUEyND4KKzxVOUE5QT4gPFU5QTEyPjs8VTlBMzc+Cis8VTlBOUI+IDxVOUExNj4KKzxVOUE5Qz4gPFU5QTQxPgorPFU5QTlEPiA8VTlBMkU+OzxVOUE1MT4KKzxVOUE5RT4gPFU5QTJCPgorPFU5QTlGPiA8VTlBMzg+Cis8VTlBQTA+IDxVOUE0Mz4KKzxVOUFBMT4gPFU5QTNFPgorPFU5QUEyPiA8VTlBNDQ+Cis8VTlBQTM+IDxVOUE0Rj4KKzxVOUFBND4gPFU5QTVGPgorPFU5QUE1PiA8VTg2MEU+OzxVOUE2NT4KKzxVOUFBNj4gPFU5QTY2PgorPFU5QUE3PiA8VTlBNjQ+Cis8VTlBQUY+IDxVODBBRT4KKzxVOUFCNT4gPFU0RjUzPjs8VThFQjA+OzxVOEVDNj47PFU5QUQ0PgorPFU5QUJFPiA8VTlDQTA+Cis8VTlBQzQ+IDxVODFCOD47PFU5QUQzPgorPFU5QUM1PiA8VTlBQ0Y+Cis8VTlBQzg+IDxVODE4MD4KKzxVOUFDQj4gPFU5QUQ2PgorPFU5QUNDPiA8VTlBRDU+Cis8VTlBQ0Y+IDxVOUFDNT4KKzxVOUFEMj4gPFU4MTBGPgorPFU5QUQzPiA8VTgxQjg+OzxVOUFDND4KKzxVOUFEND4gPFU0RjUzPjs8VThFQjA+OzxVOEVDNj47PFU5QUI1PgorPFU5QUQ1PiA8VTgxQ0Y+OzxVOUFDQz4KKzxVOUFENj4gPFU5QUNCPgorPFU5QUQ3PiA8VTk4NzE+OzxVOTg4NT47PFU5RTE1PgorPFU5QUQ4PiA8VTlBRDk+Cis8VTlBRDk+IDxVOUFEOD4KKzxVOUFFMz4gPFU0RUZGPjs8VTVGNzc+Cis8VTlBRTQ+IDxVOUFGOT4KKzxVOUFFNT4gPFU5QUVGPgorPFU5QUU5PiA8VTlCMDI+OzxVOUIyMj4KKzxVOUFFQT4gPFU1M0QxPjs8VTlBRUU+Cis8VTlBRUQ+IDxVOTgzRT4KKzxVOUFFRT4gPFU1M0QxPjs8VTlBRUE+Cis8VTlBRUY+IDxVOUFFNT4KKzxVOUFGND4gPFU0RjVCPjs8VTVGN0Y+Cis8VTlBRjk+IDxVOUFFND4KKzxVOUIwMD4gPFU1MjQzPgorPFU5QjAyPiA8VTlBRTk+OzxVOUIxMz47PFU5QjIyPgorPFU5QjA2PiA8VTY3N0U+Cis8VTlCMEQ+IDxVODBFMT4KKzxVOUIxMz4gPFU5QjAyPjs8VTlCMjI+Cis8VTlCMUE+IDxVOTg3Qj4KKzxVOUIxQj4gPFU5QjIzPgorPFU5QjIyPiA8VTlBRTk+OzxVOUIwMj47PFU5QjEzPgorPFU5QjIzPiA8VTlCMUI+Cis8VTlCMjU+IDxVNjU5Nz47PFU5NUQ4Pjs8VTlCMjY+OzxVOUIyQT47PFU5QjJEPgorPFU5QjI2PiA8VTY1OTc+OzxVOTVEOD47PFU5QjI1Pjs8VTlCMkE+OzxVOUIyRD4KKzxVOUIyNz4gPFU5NTk5Pjs8VTk1Rjk+Cis8VTlCMjg+IDxVNTRDND4KKzxVOUIyOT4gPFU5NjBCPgorPFU5QjJBPiA8VTY1OTc+OzxVOTVEOD47PFU5QjI1Pjs8VTlCMjY+OzxVOUIyRD4KKzxVOUIyQj4gPFU5NjFBPgorPFU5QjJEPiA8VTY1OTc+OzxVOTVEOD47PFU5QjI1Pjs8VTlCMjY+OzxVOUIyQT4KKzxVOUIyRT4gPFU5NjA0PgorPFU5QjMwPiA8VTZCMUQ+OzxVOTBDMT47PFU5QjMxPgorPFU5QjMxPiA8VTZCMUQ+OzxVOTBDMT47PFU5QjMwPgorPFU5QjM2PiA8VTlCMzk+Cis8VTlCMzk+IDxVOUIzNj4KKzxVOUIzQj4gPFU0RkZDPjs8VTdDQTU+Cis8VTlCNDA+IDxVNUMyQz4KKzxVOUI0Nz4gPFU5QjU4PgorPFU5QjQ5PiA8VTlCNEU+Cis8VTlCNEU+IDxVODczRD47PFU5QjQ5PgorPFU5QjUwPiA8VTUxRjI+OzxVNUMzMj47PFU1QzM0Pjs8VTVDMzY+OzxVNUMzNz4KKzxVOUI1Nz4gPFU0RTExPjs8VTkxOUM+Cis8VTlCNTg+IDxVOUI0Nz4KKzxVOUI1QT4gPFU5QzdDPgorPFU5QjVCPiA8VTlDN0Q+Cis8VTlCNjI+IDxVOUM3RT4KKzxVOUI2Mz4gPFU5QzZFPgorPFU5QjY2PiA8VTlCQkI+Cis8VTlCNjg+IDxVOUM4MD4KKzxVOUI2RD4gPFU5RUZGPgorPFU5QjZGPiA8VTlDODE+Cis8VTlCNzI+IDxVOUM3OD47PFU5Qzg4PgorPFU5QjczPiA8VTlDMjQ+Cis8VTlCNzQ+IDxVOUM4Mj4KKzxVOUI3Nz4gPFU5QzdGPgorPFU5QjdBPiA8VTlDODQ+Cis8VTlCODE+IDxVOUM4NT4KKzxVOUI4Mz4gPFU5Qzg2PgorPFU5Qjg5PiA8VTlCREI+OzxVOUNCNz4KKzxVOUI4QT4gPFU5QzhDPgorPFU5QjhCPiA8VTlDODk+Cis8VTlCOEQ+IDxVOUM4Rj4KKzxVOUI4RT4gPFU5Qzg3PgorPFU5QjhGPiA8VTlCRjk+Cis8VTlCOTA+IDxVOUM5MD4KKzxVOUI5MT4gPFU5QzhEPgorPFU5QjkyPiA8VTlDOEI+Cis8VTlCOTM+IDxVOUM4QT4KKzxVOUI5QT4gPFU5QzkyPgorPFU5QjlDPiA8VTlDOTg+Cis8VTlCOUQ+IDxVOUJENz47PFU5Qzc2Pjs8VTlDOUU+Cis8VTlCOUU+IDxVOUM5NT4KKzxVOUJBNj4gPFU5Qzk2PgorPFU5QkE3PiA8VTlCQjc+OzxVOUJGNz4KKzxVOUJBQT4gPFU5Qzk0PgorPFU5QkFCPiA8VTlDOUI+Cis8VTlCQUQ+IDxVOUM5MT4KKzxVOUJBRT4gPFU1QzFGPjs8VTVDMjA+OzxVOEQ3Qj47PFU5QzdCPjs8VTlDOUM+Cis8VTlCQjM+IDxVOUM5Mz4KKzxVOUJCNj4gPFU5Q0FBPgorPFU5QkI3PiA8VTlCQTc+OzxVOUJGNz4KKzxVOUJCQT4gPFU5QzlEPgorPFU5QkJCPiA8VTlCNjY+Cis8VTlCQkU+IDxVOUJEOD4KKzxVOUJDMD4gPFU5Q0E3PgorPFU5QkMxPiA8VTlDQTA+Cis8VTlCQzc+IDxVOUMwMD47PFU5Q0E5PgorPFU5QkM5PiA8VTlDQTQ+Cis8VTlCQ0E+IDxVOUJDQj47PFU5Q0E4PgorPFU5QkNCPiA8VTlCQ0E+Cis8VTlCRDI+IDxVOUNBQz4KKzxVOUJEND4gPFU5Q0JCPgorPFU5QkQ1PiA8VTlDQUY+Cis8VTlCRDY+IDxVOUNBRD4KKzxVOUJENz4gPFU5QjlEPjs8VTlDNzY+Cis8VTlCRDg+IDxVOUJCRT4KKzxVOUJEQj4gPFU5Qjg5Pjs8VTlDQjc+Cis8VTlCREQ+IDxVOUNCND4KKzxVOUJFMT4gPFU5Q0IxPgorPFU5QkUyPiA8VTlDQjU+Cis8VTlCRTQ+IDxVOUNCMj4KKzxVOUJFNz4gPFU5Q0IzPgorPFU5QkU4PiA8VTlDQjg+Cis8VTlCRUE+IDxVOUNBRT4KKzxVOUJFQj4gPFU5Q0IwPgorPFU5QkYwPiA8VTlDQjY+Cis8VTlCRjQ+IDxVOUNCQT4KKzxVOUJGNT4gPFU5QzNBPgorPFU5QkY3PiA8VTlCQTc+OzxVOUJCNz47PFU5Q0MwPgorPFU5QkY5PiA8VTlCOEY+Cis8VTlCRkQ+IDxVOUNBQj4KKzxVOUJGRj4gPFU5Q0NBPgorPFU5QzAwPiA8VTlCQzc+OzxVOUNBOT4KKzxVOUMwMT4gPFU5Q0M4PgorPFU5QzAyPiA8VTlDOTc+Cis8VTlDMDM+IDxVOUNDMj4KKzxVOUMwOD4gPFU5QzI4Pjs8VTlDQkQ+Cis8VTlDMDk+IDxVOUNDNz4KKzxVOUMwQz4gPFU5QzBEPjs8VTlDQzU+Cis8VTlDMEQ+IDxVOUMwQz47PFU5Q0M1PgorPFU5QzBGPiA8VTlDQkU+Cis8VTlDMTA+IDxVOUM3Nz47PFU5Q0M0PgorPFU5QzEyPiA8VTlDQzY+Cis8VTlDMTM+IDxVOUNDMz4KKzxVOUMxQj4gPFU5QzJFPjs8VTlDQzE+Cis8VTlDMUM+IDxVOUNEMj4KKzxVOUMxRj4gPFU5Q0QxPgorPFU5QzIwPiA8VTlDQ0I+Cis8VTlDMjM+IDxVOUNBNT4KKzxVOUMyND4gPFU5QjczPgorPFU5QzI1PiA8VTlDNUU+OzxVOUNDRj4KKzxVOUMyOD4gPFU5QzA4Pjs8VTlDQ0U+Cis8VTlDMjk+IDxVOUNEMD4KKzxVOUMyRD4gPFU5Q0NEPgorPFU5QzJFPiA8VTlDMUI+Cis8VTlDMzE+IDxVOUNBMj4KKzxVOUMzMj4gPFU5Q0NDPjs8VTlGMDc+Cis8VTlDMzM+IDxVOUNEMz4KKzxVOUMzNT4gPFU5Q0Q4PgorPFU5QzM3PiA8VTlDQTY+Cis8VTlDMzk+IDxVOUNBMz4KKzxVOUMzQT4gPFU5QkY1Pjs8VTlDQjk+Cis8VTlDM0I+IDxVOUNENz4KKzxVOUMzQz4gPFU5Q0RCPgorPFU5QzNFPiA8VTlDRDQ+Cis8VTlDNDI+IDxVOUNDOT4KKzxVOUM0NT4gPFU5Q0Q5PgorPFU5QzQ4PiA8VTlDRDU+Cis8VTlDNDk+IDxVOUNENj47PFU5RjA4Pjs8VTlGOUU+Cis8VTlDNTI+IDxVOUNERj4KKzxVOUM1Mz4gPFU5Q0REPgorPFU5QzU0PiA8VTlDREQ+Cis8VTlDNTY+IDxVOUNEQz4KKzxVOUM1Nz4gPFU5Q0RFPgorPFU5QzU4PiA8VTlDOUY+Cis8VTlDNUQ+IDxVOUNCQz4KKzxVOUM1RT4gPFU5QzI1PgorPFU5QzVGPiA8VTlDOEU+Cis8VTlDNjA+IDxVOUM5OT4KKzxVOUM2Mz4gPFU5Q0UzPgorPFU5QzY0PiA8VTlDRTE+Cis8VTlDNjc+IDxVOUNFMj4KKzxVOUM2OD4gPFU5Q0JGPgorPFU5QzZEPiA8VTlDOUE+Cis8VTlDNkU+IDxVOUI2Mz4KKzxVOUM2Rj4gPFU5Q0UwPgorPFU5Qzc2PiA8VTlCOUQ+OzxVOUJENz47PFU5QzlFPgorPFU5Qzc3PiA8VTlDMTA+OzxVOUNDND4KKzxVOUM3OD4gPFU5QjcyPjs8VTlDODg+Cis8VTlDN0E+IDxVOUNBMT4KKzxVOUM3Qj4gPFU1QzFGPjs8VTVDMjA+OzxVOEQ3Qj47PFU5QkFFPjs8VTlDOUM+Cis8VTlDN0M+IDxVOUI1QT4KKzxVOUM3RD4gPFU5QjVCPgorPFU5QzdFPiA8VTlCNjI+Cis8VTlDN0Y+IDxVOUI3Nz4KKzxVOUM4MD4gPFU5QjY4PgorPFU5QzgxPiA8VTlCNkY+Cis8VTlDODI+IDxVOUI3ND4KKzxVOUM4ND4gPFU5QjdBPgorPFU5Qzg1PiA8VTlCODE+Cis8VTlDODY+IDxVOUI4Mz4KKzxVOUM4Nz4gPFU5QjhFPgorPFU5Qzg4PiA8VTlCNzI+OzxVOUM3OD4KKzxVOUM4OT4gPFU5QjhCPgorPFU5QzhBPiA8VTlCOTM+Cis8VTlDOEI+IDxVOUI5Mj4KKzxVOUM4Qz4gPFU5QjhBPgorPFU5QzhEPiA8VTg2QUI+OzxVOUI5MT4KKzxVOUM4RT4gPFU5QzVGPgorPFU5QzhGPiA8VTlCOEQ+Cis8VTlDOTA+IDxVOUI5MD4KKzxVOUM5MT4gPFU5QkFEPgorPFU5QzkyPiA8VTlCOUE+Cis8VTlDOTM+IDxVOUJCMz4KKzxVOUM5ND4gPFU5QkFBPgorPFU5Qzk1PiA8VTlCOUU+Cis8VTlDOTY+IDxVOUJBNj4KKzxVOUM5Nz4gPFU5QzAyPgorPFU5Qzk4PiA8VTlCOUM+Cis8VTlDOTk+IDxVOUM2MD4KKzxVOUM5QT4gPFU5QzZEPgorPFU5QzlCPiA8VTlCQUI+Cis8VTlDOUM+IDxVNUMxRj47PFU1QzIwPjs8VThEN0I+OzxVOUJBRT47PFU5QzdCPgorPFU5QzlEPiA8VTlCQkE+Cis8VTlDOUU+IDxVOUI5RD47PFU5Qzc2PgorPFU5QzlGPiA8VTlDNTg+Cis8VTlDQTA+IDxVOUFCRT47PFU5QkMxPgorPFU5Q0ExPiA8VTlDN0E+Cis8VTlDQTI+IDxVOUMzMT4KKzxVOUNBMz4gPFU5QzM5PgorPFU5Q0E0PiA8VTlCQzk+Cis8VTlDQTU+IDxVOUMyMz4KKzxVOUNBNj4gPFU5QzM3PgorPFU5Q0E3PiA8VTlCQzA+Cis8VTlDQTg+IDxVOUJDQT4KKzxVOUNBOT4gPFU5QkM3Pjs8VTlDMDA+Cis8VTlDQUE+IDxVOUJCNj4KKzxVOUNBQj4gPFU5QkZEPgorPFU5Q0FDPiA8VTlCRDI+Cis8VTlDQUQ+IDxVOUJENj4KKzxVOUNBRT4gPFU5QkVBPgorPFU5Q0FGPiA8VTlCRDU+Cis8VTlDQjA+IDxVOUJFQj4KKzxVOUNCMT4gPFU5QkUxPgorPFU5Q0IyPiA8VTlCRTQ+Cis8VTlDQjM+IDxVOUJFNz4KKzxVOUNCND4gPFU5QkREPgorPFU5Q0I1PiA8VTlCRTI+Cis8VTlDQjY+IDxVOUJGMD4KKzxVOUNCNz4gPFU5Qjg5Pjs8VTlCREI+Cis8VTlDQjg+IDxVOUJFOD4KKzxVOUNCOT4gPFU5QzNBPgorPFU5Q0JBPiA8VTlCRjQ+Cis8VTlDQkI+IDxVOUJEND4KKzxVOUNCQz4gPFU5QzVEPgorPFU5Q0JEPiA8VTlDMDg+Cis8VTlDQkU+IDxVOUMwRj4KKzxVOUNCRj4gPFU5QzY4PgorPFU5Q0MwPiA8VTlCRjc+Cis8VTlDQzE+IDxVOUMxQj4KKzxVOUNDMj4gPFU5QzAzPgorPFU5Q0MzPiA8VTlDMTM+Cis8VTlDQzQ+IDxVOUMxMD47PFU5Qzc3PgorPFU5Q0M1PiA8VTlDMEM+OzxVOUMwRD4KKzxVOUNDNj4gPFU5QzEyPgorPFU5Q0M3PiA8VTlDMDk+Cis8VTlDQzg+IDxVOUMwMT4KKzxVOUNDOT4gPFU5QzQyPgorPFU5Q0NBPiA8VTlCRkY+Cis8VTlDQ0I+IDxVOUMyMD4KKzxVOUNDQz4gPFU5QzMyPjs8VTlGMDc+Cis8VTlDQ0Q+IDxVOUMyRD4KKzxVOUNDRT4gPFU5QzI4PgorPFU5Q0NGPiA8VTlDMjU+Cis8VTlDRDA+IDxVOUMyOT4KKzxVOUNEMT4gPFU5QzFGPgorPFU5Q0QyPiA8VTlDMUM+Cis8VTlDRDM+IDxVOUMzMz4KKzxVOUNEND4gPFU5QzNFPgorPFU5Q0Q1PiA8VTgxQTQ+OzxVOUM0OD4KKzxVOUNENj4gPFU5QzQ5Pjs8VTlGMDg+Cis8VTlDRDc+IDxVOUMzQj4KKzxVOUNEOD4gPFU5QzM1PgorPFU5Q0Q5PiA8VTlDNDU+Cis8VTlDREI+IDxVOUMzQz4KKzxVOUNEQz4gPFU5QzU2PgorPFU5Q0REPiA8VTlDNTM+OzxVOUM1ND4KKzxVOUNERT4gPFU5QzU3PgorPFU5Q0RGPiA8VTlDNTI+Cis8VTlDRTA+IDxVOUM2Rj4KKzxVOUNFMT4gPFU5QzY0PgorPFU5Q0UyPiA8VTlDNjc+Cis8VTlDRTM+IDxVOUM2Mz4KKzxVOUNFNT4gPFU1QzRDPjs8VTlFMUY+Cis8VTlDRTc+IDxVNTFFQj47PFU5Q0VDPgorPFU5Q0U5PiA8VTlFMjA+Cis8VTlDRUI+IDxVOTZDMT47PFU5RDA4PgorPFU5Q0VDPiA8VTlDRTc+Cis8VTlDRjI+IDxVOUUyND4KKzxVOUNGMz4gPFU1MUU0PgorPFU5Q0Y0PiA8VTlFMjM+Cis8VTlDRjY+IDxVOUUyMj4KKzxVOUNGOD4gPFU5NkM3PgorPFU5RDA2PiA8VTlFMjk+Cis8VTlEMDc+IDxVOUUyOD4KKzxVOUQwOD4gPFU5NkMxPjs8VTlDRUI+Cis8VTlEMDk+IDxVOUQ3Nj47PFU5RTI2PgorPFU5RDBFPiA8VTlERDc+OzxVOUUyNT4KKzxVOUQxMj4gPFU5RTMwPgorPFU5RDE1PiA8VTlFMzU+Cis8VTlEMUI+IDxVOUUzMz4KKzxVOUQxRD4gPFU5RTFDPjs8VTlFMzI+Cis8VTlEMUU+IDxVOUUyRT4KKzxVOUQxRj4gPFU5RDQ0Pjs8VTlFMzE+Cis8VTlEMjM+IDxVOUUyQT4KKzxVOUQyNj4gPFU5RTJGPgorPFU5RDI4PiA8VTlFMkQ+Cis8VTlEMkM+IDxVODNCQT47PFU5REFGPgorPFU5RDJGPiA8VTlFMzg+Cis8VTlEMzA+IDxVOUUzOT4KKzxVOUQzMz4gPFU5REMzPgorPFU5RDM0PiA8VTlFM0I+Cis8VTlEM0I+IDxVOUUzRj4KKzxVOUQzQz4gPFU5REZBPgorPFU5RDNGPiA8VTlFM0Q+Cis8VTlENDI+IDxVOUUzQT4KKzxVOUQ0Mz4gPFU5RTNDPgorPFU5RDQ0PiA8VTlEMUY+Cis8VTlENTA+IDxVOUU0MD4KKzxVOUQ1MT4gPFU5RTQzPgorPFU5RDUyPiA8VTlFNDY+Cis8VTlENTM+IDxVOUU0MT4KKzxVOUQ1OT4gPFU5REFBPgorPFU5RDVDPiA8VTlFNDg+Cis8VTlENUQ+IDxVOUQ1RT47PFU5RTQ1PgorPFU5RDVFPiA8VTlENUQ+OzxVOUU0NT4KKzxVOUQ2MD4gPFU5RTQ0PgorPFU5RDYxPiA8VTlFNDk+Cis8VTlENkE+IDxVOUU0Qz4KKzxVOUQ2Qz4gPFU5RTRGPgorPFU5RDZFPiA8VTlFNTA+Cis8VTlENkY+IDxVOUU0RT4KKzxVOUQ3MD4gPFU5NkQ1PgorPFU5RDcyPiA8VTlFNEE+Cis8VTlENzY+IDxVOUQwOT47PFU5RTI2PgorPFU5RDc3PiA8VTlFNTM+Cis8VTlEN0U+IDxVOURBND47PFU5RTREPgorPFU5RDg3PiA8VTlEQUI+OzxVOUUyQj4KKzxVOUQ4OT4gPFU5RTUxPgorPFU5RDhBPiA8VTlFNTI+Cis8VTlEOEY+IDxVOTZERT47PFU5REM0Pjs8VTlFMjE+Cis8VTlEOTM+IDxVOUU0Qj4KKzxVOUQ5Nj4gPFU5RTU5PgorPFU5RDk4PiA8VTlFNTU+Cis8VTlEOUE+IDxVOUU1Nz4KKzxVOURBMT4gPFU5RTU2PgorPFU5REE0PiA8VTlEN0U+Cis8VTlEQTU+IDxVOUU1Qj4KKzxVOURBOT4gPFU5RTVDPgorPFU5REFBPiA8VTlENTk+Cis8VTlEQUI+IDxVOUQ4Nz47PFU5RTJCPgorPFU5REFDPiA8VTlFMjc+Cis8VTlEQUY+IDxVODNCQT47PFU5RDJDPgorPFU5REIyPiA8VTlFNUY+Cis8VTlEQjQ+IDxVNUJDOT47PFU5NkJBPjs8VTk3NEQ+OzxVOTc0RT47PFU5NzRGPjs8VTlFMTY+OzxVOUU2ND4KKzxVOURCNT4gPFU5NkRCPgorPFU5REI5PiA8VTlFNjA+Cis8VTlEQkE+IDxVOUU2MT4KKzxVOURCQj4gPFU5RTU4PgorPFU5REJDPiA8VTlFNjM+Cis8VTlEQkY+IDxVOUU1QT4KKzxVOURDMD4gPFU5RTVBPgorPFU5REMxPiA8VTlFNjI+Cis8VTlEQzI+IDxVOUU1RT4KKzxVOURDMz4gPFU5RDMzPgorPFU5REM0PiA8VTk2REU+OzxVOUQ4Rj47PFU5RTIxPgorPFU5REM2PiA8VTlEQ0Y+Cis8VTlEQzg+IDxVOURDOT4KKzxVOURDOT4gPFU5REM4PgorPFU5RENBPiA8VTlFNUQ+Cis8VTlEQ0Y+IDxVOURDNj4KKzxVOUREMz4gPFU5RTY3PgorPFU5REQ2PiA8VTlFNjU+Cis8VTlERDc+IDxVOUQwRT47PFU5RTI1PgorPFU5REQ5PiA8VTlFMzc+Cis8VTlEREE+IDxVOUU2OD4KKzxVOURFNT4gPFU5RTM2PgorPFU5REU2PiA8VTlFNkE+Cis8VTlERUI+IDxVOUU1ND4KKzxVOURFRj4gPFU5RTY5PgorPFU5REYwPiA8VTcxRDU+Cis8VTlERjI+IDxVOUU2Qj4KKzxVOURGMz4gPFU5REY0Pjs8VTlFNDc+Cis8VTlERjQ+IDxVOURGMz47PFU5RTQ3PgorPFU5REY4PiA8VTlFNkM+Cis8VTlERjk+IDxVOUU3MD4KKzxVOURGQT4gPFU5RDNDPjs8VTlFNkQ+Cis8VTlERkQ+IDxVOUUzND4KKzxVOURGRj4gPFU5RTBBPgorPFU5RTA3PiA8VTlFNkY+Cis8VTlFMEE+IDxVOURGRj4KKzxVOUUwQz4gPFU5RTcxPgorPFU5RTBFPiA8VTgzQkE+Cis8VTlFMEY+IDxVOUU3Mj4KKzxVOUUxNT4gPFU5ODcxPjs8VTlBRDc+OzxVOUUyQz4KKzxVOUUxNj4gPFU1QkM5Pjs8VTk2QkE+OzxVOTc0RD47PFU5NzRFPjs8VTk3NEY+OzxVOURCND47PFU5RTY0PgorPFU5RTE4PiA8VTlFNzQ+Cis8VTlFMUE+IDxVOUU2Nj4KKzxVOUUxQj4gPFU5NkRBPjs8VTlFNzM+Cis8VTlFMUM+IDxVOUQxRD4KKzxVOUUxRD4gPFU5RTQyPgorPFU5RTFFPiA8VTlFM0U+Cis8VTlFMUY+IDxVNUM0Qz47PFU5Q0U1PgorPFU5RTIwPiA8VTlDRTk+Cis8VTlFMjE+IDxVOTZERT47PFU5RDhGPjs8VTlEQzQ+Cis8VTlFMjI+IDxVOUNGNj4KKzxVOUUyMz4gPFU5Q0Y0PgorPFU5RTI0PiA8VTlDRjI+Cis8VTlFMjU+IDxVOUQwRT47PFU5REQ3PgorPFU5RTI2PiA8VTlEMDk+OzxVOUQ3Nj4KKzxVOUUyNz4gPFU5REFDPgorPFU5RTI4PiA8VTlEMDc+Cis8VTlFMjk+IDxVOUQwNj4KKzxVOUUyQT4gPFU5RDIzPgorPFU5RTJCPiA8VTlEODc+OzxVOURBQj4KKzxVOUUyQz4gPFU5RTE1PgorPFU5RTJEPiA8VTlEMjg+Cis8VTlFMkU+IDxVOUQxRT4KKzxVOUUyRj4gPFU5RDI2PgorPFU5RTMwPiA8VTlEMTI+Cis8VTlFMzE+IDxVOUQxRj4KKzxVOUUzMj4gPFU5RDFEPgorPFU5RTMzPiA8VTlEMUI+Cis8VTlFMzQ+IDxVOURGRD4KKzxVOUUzNT4gPFU5RDE1PgorPFU5RTM2PiA8VTlERTU+Cis8VTlFMzc+IDxVOUREOT4KKzxVOUUzOD4gPFU5RDJGPgorPFU5RTM5PiA8VTlEMzA+Cis8VTlFM0E+IDxVOUQ0Mj4KKzxVOUUzQj4gPFU5RDM0PgorPFU5RTNDPiA8VTlENDM+Cis8VTlFM0Q+IDxVOUQzRj4KKzxVOUUzRT4gPFU5RTFFPgorPFU5RTNGPiA8VTlEM0I+Cis8VTlFNDA+IDxVOUQ1MD4KKzxVOUU0MT4gPFU5RDUzPgorPFU5RTQyPiA8VTlFMUQ+Cis8VTlFNDM+IDxVOUQ1MT4KKzxVOUU0ND4gPFU5RDYwPgorPFU5RTQ1PiA8VTlENUQ+OzxVOUQ1RT4KKzxVOUU0Nj4gPFU5RDUyPgorPFU5RTQ3PiA8VTlERjM+OzxVOURGND4KKzxVOUU0OD4gPFU5RDVDPgorPFU5RTQ5PiA8VTlENjE+Cis8VTlFNEE+IDxVOUQ3Mj4KKzxVOUU0Qj4gPFU5RDkzPgorPFU5RTRDPiA8VTlENkE+Cis8VTlFNEQ+IDxVOUQ3RT4KKzxVOUU0RT4gPFU5RDZGPgorPFU5RTRGPiA8VTlENkM+Cis8VTlFNTA+IDxVOUQ2RT4KKzxVOUU1MT4gPFU5RDg5PgorPFU5RTUyPiA8VTlEOEE+Cis8VTlFNTM+IDxVOUQ3Nz4KKzxVOUU1ND4gPFU5REVCPgorPFU5RTU1PiA8VTlEOTg+Cis8VTlFNTY+IDxVOURBMT4KKzxVOUU1Nz4gPFU5RDlBPgorPFU5RTU4PiA8VTlEQkI+Cis8VTlFNTk+IDxVOUQ5Nj4KKzxVOUU1QT4gPFU5REJGPjs8VTlEQzA+Cis8VTlFNUI+IDxVOURBNT4KKzxVOUU1Qz4gPFU5REE5PgorPFU5RTVEPiA8VTlEQ0E+Cis8VTlFNUU+IDxVOURDMj4KKzxVOUU1Rj4gPFU5REIyPgorPFU5RTYwPiA8VTlEQjk+Cis8VTlFNjE+IDxVOURCQT4KKzxVOUU2Mj4gPFU5REMxPgorPFU5RTYzPiA8VTlEQkM+Cis8VTlFNjQ+IDxVNUJDOT47PFU5NkJBPjs8VTk3NEQ+OzxVOTc0RT47PFU5NzRGPjs8VTlEQjQ+OzxVOUUxNj4KKzxVOUU2NT4gPFU5REQ2PgorPFU5RTY2PiA8VTlFMUE+Cis8VTlFNjc+IDxVOUREMz4KKzxVOUU2OD4gPFU5RERBPgorPFU5RTY5PiA8VTlERUY+Cis8VTlFNkE+IDxVOURFNj4KKzxVOUU2Qj4gPFU5REYyPgorPFU5RTZDPiA8VTlERjg+Cis8VTlFNkQ+IDxVOURGQT4KKzxVOUU2Rj4gPFU5RTA3PgorPFU5RTcwPiA8VTlERjk+Cis8VTlFNzE+IDxVOUUwQz4KKzxVOUU3Mj4gPFU5RTBGPgorPFU5RTczPiA8VTlFMUI+Cis8VTlFNzQ+IDxVOUUxOD4KKzxVOUU3NT4gPFU1MzY0Pjs8VTU4Nzc+Cis8VTlFNzg+IDxVNzg3Nz47PFU3OEIxPjs8VTlFN0M+Cis8VTlFNzk+IDxVNTRCOD47PFU5MThFPgorPFU5RTdBPiA8VTlFN0U+Cis8VTlFN0I+IDxVNzg3Nz4KKzxVOUU3Qz4gPFU3ODc3Pjs8VTc4QjE+OzxVOUU3OD4KKzxVOUU3RD4gPFU1ODY5Pjs8VTc2RDA+Cis8VTlFN0U+IDxVOUU3QT4KKzxVOUU4Mz4gPFU5RTg1PgorPFU5RTg0PiA8VTlFQTQ+Cis8VTlFODU+IDxVOUU4Mz4KKzxVOUU4Nz4gPFU5RThGPgorPFU5RThGPiA8VTlFODc+Cis8VTlFOTc+IDxVNEUzRD47PFU1QTZGPgorPFU5RTlFPiA8VTczNTA+Cis8VTlFQTQ+IDxVN0M5Nz47PFU5RTg0PgorPFU5RUE1PiA8VTlFQTY+Cis8VTlFQTY+IDxVOUVBNT4KKzxVOUVBOT4gPFU5RUFDPjs8VTlFQjg+Cis8VTlFQUE+IDxVN0NDNj47PFU5NzYyPjs8VTlFQUI+OzxVOUVCNT47PFU5RUJBPgorPFU5RUFCPiA8VTdDQzY+OzxVOTc2Mj47PFU5RUFBPjs8VTlFQjU+OzxVOUVCQT4KKzxVOUVBQz4gPFU5RUE5Pjs8VTlFQjg+Cis8VTlFQUQ+IDxVNTMwNT4KKzxVOUVBRj4gPFU2NkYyPjs8VTdDQUM+OzxVOUVCND47PFU5RUI5PgorPFU5RUI0PiA8VTY2RjI+OzxVN0NBQz47PFU5RUFGPjs8VTlFQjk+Cis8VTlFQjU+IDxVN0NDNj47PFU5NzYyPjs8VTlFQUE+OzxVOUVBQj47PFU5RUJBPgorPFU5RUI4PiA8VTlFQTk+OzxVOUVBQz4KKzxVOUVCOT4gPFU2NkYyPjs8VTdDQUM+OzxVOUVBRj47PFU5RUI0PgorPFU5RUJBPiA8VTdDQzY+OzxVOTc2Mj47PFU5RUFBPjs8VTlFQUI+OzxVOUVCNT4KKzxVOUVCQj4gPFU3NUYyPjs8VTc1RjM+OzxVODUzND4KKzxVOUVCQz4gPFU0RTQ4Pjs8VTVDMUI+OzxVNUU4NT47PFU5RUJEPgorPFU5RUJEPiA8VTRFNDg+OzxVNUMxQj47PFU1RTg1Pjs8VTlFQkM+Cis8VTlFQzM+IDxVOUVDND4KKzxVOUVDND4gPFU3OEZBPjs8VTlFQzM+Cis8VTlFQzk+IDxVOUVDQz4KKzxVOUVDQz4gPFU5RUM5PgorPFU5RUNGPiA8VTdDOTg+Cis8VTlFRDE+IDxVOUVEMj4KKzxVOUVEMj4gPFU5RUQxPgorPFU5RUQ4PiA8VTlFRDk+Cis8VTlFRDk+IDxVOUVEOD4KKzxVOUVEQj4gPFU5RUYxPgorPFU5RURFPiA8VTU5NEM+OzxVNzBCOT4KKzxVOUVFMT4gPFU5RUY2PgorPFU5RUU0PiA8VTlFRUQ+Cis8VTlFRTg+IDxVNTE1QT4KKzxVOUVFOT4gPFU5RUY3PgorPFU5RUVBPiA8VTlFRjI+Cis8VTlFRUQ+IDxVOUVFND4KKzxVOUVGMT4gPFU5RURCPgorPFU5RUYyPiA8VTlFRUE+Cis8VTlFRjQ+IDxVOTcwOT4KKzxVOUVGNj4gPFU5RUUxPgorPFU5RUY3PiA8VTlFRTk+Cis8VTlFRjk+IDxVODhBRT4KKzxVOUVGRD4gPFU5RUZFPgorPFU5RUZFPiA8VTlFRkQ+Cis8VTlFRkY+IDxVOUI2RD47PFU5RjBCPgorPFU5RjAyPiA8VTlGMEM+Cis8VTlGMDM+IDxVODZEOT4KKzxVOUYwNz4gPFU5QzMyPjs8VTlDQ0M+Cis8VTlGMDg+IDxVOUM0OT47PFU5Q0Q2Pjs8VTlGOUU+Cis8VTlGMDk+IDxVOUYwRD4KKzxVOUYwQj4gPFU5RUZGPgorPFU5RjBDPiA8VTlGMDI+Cis8VTlGMEQ+IDxVOUYwOT4KKzxVOUYwRT4gPFU5RjExPgorPFU5RjExPiA8VTlGMEU+Cis8VTlGMTI+IDxVOTNBMT4KKzxVOUYxMz4gPFU3NkI3Pjs8VTc2QkM+Cis8VTlGMTU+IDxVNTFBQz4KKzxVOUYxNz4gPFU5NzgwPjs8VTk3ODk+Cis8VTlGMjA+IDxVOUYyMT4KKzxVOUYyMT4gPFU5RjIwPgorPFU5RjI2PiA8VThDODI+Cis8VTlGMzQ+IDxVOUYzOT4KKzxVOUYzOT4gPFU5RjM0PgorPFU5RjQ1PiA8VTU1QzU+Cis8VTlGNEE+IDxVNEU5RD47PFU2NTg5Pjs8VTY1OEE+OzxVOUY1MD4KKzxVOUY0Qj4gPFU2NThCPjs8VTY1OEU+Cis8VTlGNEU+IDxVOENGNz47PFU4RDREPgorPFU5RjRGPiA8VTk3RjI+OzxVOUY1MT4KKzxVOUY1MD4gPFU0RTlEPjs8VTY1ODk+OzxVNjU4QT47PFU5RjRBPgorPFU5RjUxPiA8VTk3RjI+OzxVOUY0Rj4KKzxVOUY1Mj4gPFU2QjZGPjs8VTlGN0Y+Cis8VTlGNTM+IDxVOUY1ND4KKzxVOUY1ND4gPFU5RjUzPjs8VTlGODA+Cis8VTlGNTU+IDxVOUY4MT4KKzxVOUY1Nz4gPFU5RjgyPgorPFU5RjU5PiA8VTlGODU+Cis8VTlGNUE+IDxVOUY3MD4KKzxVOUY1Qz4gPFU5Rjg3PgorPFU5RjVGPiA8VTlGODM+Cis8VTlGNjA+IDxVOUY4Nj4KKzxVOUY2MT4gPFU5RjYyPjs8VTlGODQ+Cis8VTlGNjI+IDxVOUY2MT47PFU5Rjg0PgorPFU5RjYzPiA8VTUxRkE+Cis8VTlGNjY+IDxVOUY4OD4KKzxVOUY2Nz4gPFU1NTZFPjs8VTU2OTk+OzxVNTZEMz4KKzxVOUY2OT4gPFU1NEFDPgorPFU5RjZBPiA8VTlGNzE+OzxVOUY4QT4KKzxVOUY2Qz4gPFU5Rjg5PgorPFU5RjcwPiA8VTlGNUE+Cis8VTlGNzE+IDxVOUY2QT4KKzxVOUY3Mj4gPFU5RjhCPgorPFU5Rjc2PiA8VTgxNkQ+Cis8VTlGNzc+IDxVOUY4Qz4KKzxVOUY3Rj4gPFU2QjZGPjs8VTlGNTI+Cis8VTlGODA+IDxVOUY1ND4KKzxVOUY4MT4gPFU5RjU1PgorPFU5RjgyPiA8VTlGNTc+Cis8VTlGODM+IDxVOUY1Rj4KKzxVOUY4ND4gPFU5RjYxPjs8VTlGNjI+Cis8VTlGODU+IDxVOUY1OT4KKzxVOUY4Nj4gPFU5RjYwPgorPFU5Rjg3PiA8VTlGNUM+Cis8VTlGODg+IDxVOUY2Nj4KKzxVOUY4OT4gPFU5RjZDPgorPFU5RjhBPiA8VTlGNkE+Cis8VTlGOEI+IDxVOUY3Mj4KKzxVOUY4Qz4gPFU5Rjc3PgorPFU5RjhEPiA8VTdBREM+OzxVOUY5Mj47PFU5Rjk5PgorPFU5RjhFPiA8VTUzOTA+Cis8VTlGOTA+IDxVNUU5RT4KKzxVOUY5Mj4gPFU3QURDPjs8VTlGOEQ+OzxVOUY5OT4KKzxVOUY5ND4gPFU5RjlBPgorPFU5Rjk1PiA8VTlGOUI+Cis8VTlGOTk+IDxVOUY4RD47PFU5RjkyPgorPFU5RjlBPiA8VTlGOTQ+Cis8VTlGOUI+IDxVOUY5NT4KKzxVOUY5Qz4gPFU0RTgwPjs8VTlGOUY+Cis8VTlGOUQ+IDxVNzlDQj47PFU3OUNDPjs8VTdBNTA+Cis8VTlGOUU+IDxVOUM0OT47PFU5RjA4PgorPFU5RjlGPiA8VTRFODA+OzxVOUY5Qz4KKzxVOUZBMj4gPFU1NDhBPjs8VTU0OEM+OzxVNjBEMj4KKzxVOUZBNT4gPFU1NDAxPjs8VTdDNzI+CisKK3RyYW5zbGl0X2VuZAorCitFTkQgTENfQ1RZUEUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RyYW5zbGl0X2NvbWJpbmluZyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RyYW5zbGl0X2NvbWJpbmluZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM2MmY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdHJhbnNsaXRfY29tYmluaW5nCkBAIC0wLDAgKzEsMjIyMCBAQAorZXNjYXBlX2NoYXIgLworY29tbWVudF9jaGFyICUKKworJSBUcmFuc2xpdGVyYXRpb25zIHRoYXQgcmVtb3ZlIGFsbCBjb21iaW5pbmcgY2hhcmFjdGVycyAoYWNjZW50cywKKyUgcHJvbm91bmNpYXRpb24gbWFya3MsIGV0Yy4pLgorJSBHZW5lcmF0ZWQgZnJvbSBVbmljb2RlRGF0YS50eHQuCisKK0xDX0NUWVBFCisKK3RyYW5zbGl0X3N0YXJ0CisKKyUgQ09NQklOSU5HIEdSQVZFIEFDQ0VOVAorPFUwMzAwPiAiIgorJSBDT01CSU5JTkcgQUNVVEUgQUNDRU5UCis8VTAzMDE+ICIiCislIENPTUJJTklORyBDSVJDVU1GTEVYIEFDQ0VOVAorPFUwMzAyPiAiIgorJSBDT01CSU5JTkcgVElMREUKKzxVMDMwMz4gIiIKKyUgQ09NQklOSU5HIE1BQ1JPTgorPFUwMzA0PiAiIgorJSBDT01CSU5JTkcgT1ZFUkxJTkUKKzxVMDMwNT4gIiIKKyUgQ09NQklOSU5HIEJSRVZFCis8VTAzMDY+ICIiCislIENPTUJJTklORyBET1QgQUJPVkUKKzxVMDMwNz4gIiIKKyUgQ09NQklOSU5HIERJQUVSRVNJUworPFUwMzA4PiAiIgorJSBDT01CSU5JTkcgSE9PSyBBQk9WRQorPFUwMzA5PiAiIgorJSBDT01CSU5JTkcgUklORyBBQk9WRQorPFUwMzBBPiAiIgorJSBDT01CSU5JTkcgRE9VQkxFIEFDVVRFIEFDQ0VOVAorPFUwMzBCPiAiIgorJSBDT01CSU5JTkcgQ0FST04KKzxVMDMwQz4gIiIKKyUgQ09NQklOSU5HIFZFUlRJQ0FMIExJTkUgQUJPVkUKKzxVMDMwRD4gIiIKKyUgQ09NQklOSU5HIERPVUJMRSBWRVJUSUNBTCBMSU5FIEFCT1ZFCis8VTAzMEU+ICIiCislIENPTUJJTklORyBET1VCTEUgR1JBVkUgQUNDRU5UCis8VTAzMEY+ICIiCislIENPTUJJTklORyBDQU5EUkFCSU5EVQorPFUwMzEwPiAiIgorJSBDT01CSU5JTkcgSU5WRVJURUQgQlJFVkUKKzxVMDMxMT4gIiIKKyUgQ09NQklOSU5HIFRVUk5FRCBDT01NQSBBQk9WRQorPFUwMzEyPiAiIgorJSBDT01CSU5JTkcgQ09NTUEgQUJPVkUKKzxVMDMxMz4gIiIKKyUgQ09NQklOSU5HIFJFVkVSU0VEIENPTU1BIEFCT1ZFCis8VTAzMTQ+ICIiCislIENPTUJJTklORyBDT01NQSBBQk9WRSBSSUdIVAorPFUwMzE1PiAiIgorJSBDT01CSU5JTkcgR1JBVkUgQUNDRU5UIEJFTE9XCis8VTAzMTY+ICIiCislIENPTUJJTklORyBBQ1VURSBBQ0NFTlQgQkVMT1cKKzxVMDMxNz4gIiIKKyUgQ09NQklOSU5HIExFRlQgVEFDSyBCRUxPVworPFUwMzE4PiAiIgorJSBDT01CSU5JTkcgUklHSFQgVEFDSyBCRUxPVworPFUwMzE5PiAiIgorJSBDT01CSU5JTkcgTEVGVCBBTkdMRSBBQk9WRQorPFUwMzFBPiAiIgorJSBDT01CSU5JTkcgSE9STgorPFUwMzFCPiAiIgorJSBDT01CSU5JTkcgTEVGVCBIQUxGIFJJTkcgQkVMT1cKKzxVMDMxQz4gIiIKKyUgQ09NQklOSU5HIFVQIFRBQ0sgQkVMT1cKKzxVMDMxRD4gIiIKKyUgQ09NQklOSU5HIERPV04gVEFDSyBCRUxPVworPFUwMzFFPiAiIgorJSBDT01CSU5JTkcgUExVUyBTSUdOIEJFTE9XCis8VTAzMUY+ICIiCislIENPTUJJTklORyBNSU5VUyBTSUdOIEJFTE9XCis8VTAzMjA+ICIiCislIENPTUJJTklORyBQQUxBVEFMSVpFRCBIT09LIEJFTE9XCis8VTAzMjE+ICIiCislIENPTUJJTklORyBSRVRST0ZMRVggSE9PSyBCRUxPVworPFUwMzIyPiAiIgorJSBDT01CSU5JTkcgRE9UIEJFTE9XCis8VTAzMjM+ICIiCislIENPTUJJTklORyBESUFFUkVTSVMgQkVMT1cKKzxVMDMyND4gIiIKKyUgQ09NQklOSU5HIFJJTkcgQkVMT1cKKzxVMDMyNT4gIiIKKyUgQ09NQklOSU5HIENPTU1BIEJFTE9XCis8VTAzMjY+ICIiCislIENPTUJJTklORyBDRURJTExBCis8VTAzMjc+ICIiCislIENPTUJJTklORyBPR09ORUsKKzxVMDMyOD4gIiIKKyUgQ09NQklOSU5HIFZFUlRJQ0FMIExJTkUgQkVMT1cKKzxVMDMyOT4gIiIKKyUgQ09NQklOSU5HIEJSSURHRSBCRUxPVworPFUwMzJBPiAiIgorJSBDT01CSU5JTkcgSU5WRVJURUQgRE9VQkxFIEFSQ0ggQkVMT1cKKzxVMDMyQj4gIiIKKyUgQ09NQklOSU5HIENBUk9OIEJFTE9XCis8VTAzMkM+ICIiCislIENPTUJJTklORyBDSVJDVU1GTEVYIEFDQ0VOVCBCRUxPVworPFUwMzJEPiAiIgorJSBDT01CSU5JTkcgQlJFVkUgQkVMT1cKKzxVMDMyRT4gIiIKKyUgQ09NQklOSU5HIElOVkVSVEVEIEJSRVZFIEJFTE9XCis8VTAzMkY+ICIiCislIENPTUJJTklORyBUSUxERSBCRUxPVworPFUwMzMwPiAiIgorJSBDT01CSU5JTkcgTUFDUk9OIEJFTE9XCis8VTAzMzE+ICIiCislIENPTUJJTklORyBMT1cgTElORQorPFUwMzMyPiAiIgorJSBDT01CSU5JTkcgRE9VQkxFIExPVyBMSU5FCis8VTAzMzM+ICIiCislIENPTUJJTklORyBUSUxERSBPVkVSTEFZCis8VTAzMzQ+ICIiCislIENPTUJJTklORyBTSE9SVCBTVFJPS0UgT1ZFUkxBWQorPFUwMzM1PiAiIgorJSBDT01CSU5JTkcgTE9ORyBTVFJPS0UgT1ZFUkxBWQorPFUwMzM2PiAiIgorJSBDT01CSU5JTkcgU0hPUlQgU09MSURVUyBPVkVSTEFZCis8VTAzMzc+ICIiCislIENPTUJJTklORyBMT05HIFNPTElEVVMgT1ZFUkxBWQorPFUwMzM4PiAiIgorJSBDT01CSU5JTkcgUklHSFQgSEFMRiBSSU5HIEJFTE9XCis8VTAzMzk+ICIiCislIENPTUJJTklORyBJTlZFUlRFRCBCUklER0UgQkVMT1cKKzxVMDMzQT4gIiIKKyUgQ09NQklOSU5HIFNRVUFSRSBCRUxPVworPFUwMzNCPiAiIgorJSBDT01CSU5JTkcgU0VBR1VMTCBCRUxPVworPFUwMzNDPiAiIgorJSBDT01CSU5JTkcgWCBBQk9WRQorPFUwMzNEPiAiIgorJSBDT01CSU5JTkcgVkVSVElDQUwgVElMREUKKzxVMDMzRT4gIiIKKyUgQ09NQklOSU5HIERPVUJMRSBPVkVSTElORQorPFUwMzNGPiAiIgorJSBDT01CSU5JTkcgR1JBVkUgVE9ORSBNQVJLCis8VTAzNDA+ICIiCislIENPTUJJTklORyBBQ1VURSBUT05FIE1BUksKKzxVMDM0MT4gIiIKKyUgQ09NQklOSU5HIEdSRUVLIFBFUklTUE9NRU5JCis8VTAzNDI+ICIiCislIENPTUJJTklORyBHUkVFSyBLT1JPTklTCis8VTAzNDM+ICIiCislIENPTUJJTklORyBHUkVFSyBESUFMWVRJS0EgVE9OT1MKKzxVMDM0ND4gIiIKKyUgQ09NQklOSU5HIEdSRUVLIFlQT0dFR1JBTU1FTkkKKzxVMDM0NT4gIiIKKyUgQ09NQklOSU5HIEJSSURHRSBBQk9WRQorPFUwMzQ2PiAiIgorJSBDT01CSU5JTkcgRVFVQUxTIFNJR04gQkVMT1cKKzxVMDM0Nz4gIiIKKyUgQ09NQklOSU5HIERPVUJMRSBWRVJUSUNBTCBMSU5FIEJFTE9XCis8VTAzNDg+ICIiCislIENPTUJJTklORyBMRUZUIEFOR0xFIEJFTE9XCis8VTAzNDk+ICIiCislIENPTUJJTklORyBOT1QgVElMREUgQUJPVkUKKzxVMDM0QT4gIiIKKyUgQ09NQklOSU5HIEhPTU9USEVUSUMgQUJPVkUKKzxVMDM0Qj4gIiIKKyUgQ09NQklOSU5HIEFMTU9TVCBFUVVBTCBUTyBBQk9WRQorPFUwMzRDPiAiIgorJSBDT01CSU5JTkcgTEVGVCBSSUdIVCBBUlJPVyBCRUxPVworPFUwMzREPiAiIgorJSBDT01CSU5JTkcgVVBXQVJEUyBBUlJPVyBCRUxPVworPFUwMzRFPiAiIgorJSBDT01CSU5JTkcgRE9VQkxFIFRJTERFCis8VTAzNjA+ICIiCislIENPTUJJTklORyBET1VCTEUgSU5WRVJURUQgQlJFVkUKKzxVMDM2MT4gIiIKKyUgQ09NQklOSU5HIERPVUJMRSBSSUdIVFdBUkRTIEFSUk9XIEJFTE9XCis8VTAzNjI+ICIiCislIENPTUJJTklORyBMQVRJTiBTTUFMTCBMRVRURVIgQQorPFUwMzYzPiAiIgorJSBDT01CSU5JTkcgTEFUSU4gU01BTEwgTEVUVEVSIEUKKzxVMDM2ND4gIiIKKyUgQ09NQklOSU5HIExBVElOIFNNQUxMIExFVFRFUiBJCis8VTAzNjU+ICIiCislIENPTUJJTklORyBMQVRJTiBTTUFMTCBMRVRURVIgTworPFUwMzY2PiAiIgorJSBDT01CSU5JTkcgTEFUSU4gU01BTEwgTEVUVEVSIFUKKzxVMDM2Nz4gIiIKKyUgQ09NQklOSU5HIExBVElOIFNNQUxMIExFVFRFUiBDCis8VTAzNjg+ICIiCislIENPTUJJTklORyBMQVRJTiBTTUFMTCBMRVRURVIgRAorPFUwMzY5PiAiIgorJSBDT01CSU5JTkcgTEFUSU4gU01BTEwgTEVUVEVSIEgKKzxVMDM2QT4gIiIKKyUgQ09NQklOSU5HIExBVElOIFNNQUxMIExFVFRFUiBNCis8VTAzNkI+ICIiCislIENPTUJJTklORyBMQVRJTiBTTUFMTCBMRVRURVIgUgorPFUwMzZDPiAiIgorJSBDT01CSU5JTkcgTEFUSU4gU01BTEwgTEVUVEVSIFQKKzxVMDM2RD4gIiIKKyUgQ09NQklOSU5HIExBVElOIFNNQUxMIExFVFRFUiBWCis8VTAzNkU+ICIiCislIENPTUJJTklORyBMQVRJTiBTTUFMTCBMRVRURVIgWAorPFUwMzZGPiAiIgorJSBIRUJSRVcgUE9JTlQgU0hFVkEKKzxVMDVCMD4gIiIKKyUgSEVCUkVXIFBPSU5UIEhBVEFGIFNFR09MCis8VTA1QjE+ICIiCislIEhFQlJFVyBQT0lOVCBIQVRBRiBQQVRBSAorPFUwNUIyPiAiIgorJSBIRUJSRVcgUE9JTlQgSEFUQUYgUUFNQVRTCis8VTA1QjM+ICIiCislIEhFQlJFVyBQT0lOVCBISVJJUQorPFUwNUI0PiAiIgorJSBIRUJSRVcgUE9JTlQgVFNFUkUKKzxVMDVCNT4gIiIKKyUgSEVCUkVXIFBPSU5UIFNFR09MCis8VTA1QjY+ICIiCislIEhFQlJFVyBQT0lOVCBQQVRBSAorPFUwNUI3PiAiIgorJSBIRUJSRVcgUE9JTlQgUUFNQVRTCis8VTA1Qjg+ICIiCislIEhFQlJFVyBQT0lOVCBIT0xBTQorPFUwNUI5PiAiIgorJSBIRUJSRVcgUE9JTlQgUVVCVVRTCis8VTA1QkI+ICIiCislIEhFQlJFVyBQT0lOVCBEQUdFU0ggT1IgTUFQSVEKKzxVMDVCQz4gIiIKKyUgSEVCUkVXIFBPSU5UIE1FVEVHCis8VTA1QkQ+ICIiCislIEhFQlJFVyBQT0lOVCBSQUZFCis8VTA1QkY+ICIiCislIEhFQlJFVyBQT0lOVCBTSElOIERPVAorPFUwNUMxPiAiIgorJSBIRUJSRVcgUE9JTlQgU0lOIERPVAorPFUwNUMyPiAiIgorJSBBUkFCSUMgTUFEREFIIEFCT1ZFCis8VTA2NTM+ICIiCislIEFSQUJJQyBIQU1aQSBBQk9WRQorPFUwNjU0PiAiIgorJSBBUkFCSUMgSEFNWkEgQkVMT1cKKzxVMDY1NT4gIiIKKyUgQ09NQklOSU5HIEVOQ0xPU0lORyBVUFdBUkQgUE9JTlRJTkcgVFJJQU5HTEUKKzxVMjBFND4gIiIKKyUgQ09NQklOSU5HIFJFVkVSU0UgU09MSURVUyBPVkVSTEFZCis8VTIwRTU+ICIiCislIENPTUJJTklORyBET1VCTEUgVkVSVElDQUwgU1RST0tFIE9WRVJMQVkKKzxVMjBFNj4gIiIKKyUgQ09NQklOSU5HIEFOTlVJVFkgU1lNQk9MCis8VTIwRTc+ICIiCislIENPTUJJTklORyBUUklQTEUgVU5ERVJET1QKKzxVMjBFOD4gIiIKKyUgQ09NQklOSU5HIFdJREUgQlJJREdFIEFCT1ZFCis8VTIwRTk+ICIiCislIENPTUJJTklORyBMRUZUV0FSRFMgQVJST1cgT1ZFUkxBWQorPFUyMEVBPiAiIgorJSBDT01CSU5JTkcgS0FUQUtBTkEtSElSQUdBTkEgVk9JQ0VEIFNPVU5EIE1BUksKKzxVMzA5OT4gIiIKKyUgQ09NQklOSU5HIEtBVEFLQU5BLUhJUkFHQU5BIFNFTUktVk9JQ0VEIFNPVU5EIE1BUksKKzxVMzA5QT4gIiIKKworJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggR1JBVkUKKzxVMDBDMD4gPFUwMDQxPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQUNVVEUKKzxVMDBDMT4gPFUwMDQxPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWAorPFUwMEMyPiA8VTAwNDE+CislIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBUSUxERQorPFUwMEMzPiA8VTAwNDE+CislIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMKKzxVMDBDND4gPFUwMDQxPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRQorPFUwMEM1PiA8VTAwNDE+CislIExBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBCis8VTAwQzc+IDxVMDA0Mz4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEdSQVZFCis8VTAwQzg+IDxVMDA0NT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEFDVVRFCis8VTAwQzk+IDxVMDA0NT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVgKKzxVMDBDQT4gPFUwMDQ1PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTCis8VTAwQ0I+IDxVMDA0NT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEdSQVZFCis8VTAwQ0M+IDxVMDA0OT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFCis8VTAwQ0Q+IDxVMDA0OT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVgKKzxVMDBDRT4gPFUwMDQ5PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTCis8VTAwQ0Y+IDxVMDA0OT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIFRJTERFCis8VTAwRDE+IDxVMDA0RT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEdSQVZFCis8VTAwRDI+IDxVMDA0Rj4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEFDVVRFCis8VTAwRDM+IDxVMDA0Rj4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVgKKzxVMDBEND4gPFUwMDRGPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggVElMREUKKzxVMDBENT4gPFUwMDRGPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTCis8VTAwRDY+IDxVMDA0Rj4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEdSQVZFCis8VTAwRDk+IDxVMDA1NT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEFDVVRFCis8VTAwREE+IDxVMDA1NT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVgKKzxVMDBEQj4gPFUwMDU1PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTCis8VTAwREM+IDxVMDA1NT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIEFDVVRFCis8VTAwREQ+IDxVMDA1OT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBHUkFWRQorPFUwMEUwPiA8VTAwNjE+CislIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQUNVVEUKKzxVMDBFMT4gPFUwMDYxPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVgKKzxVMDBFMj4gPFUwMDYxPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFRJTERFCis8VTAwRTM+IDxVMDA2MT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMKKzxVMDBFND4gPFUwMDYxPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkUKKzxVMDBFNT4gPFUwMDYxPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEEKKzxVMDBFNz4gPFUwMDYzPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEdSQVZFCis8VTAwRTg+IDxVMDA2NT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURQorPFUwMEU5PiA8VTAwNjU+CislIExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWAorPFUwMEVBPiA8VTAwNjU+CislIExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTCis8VTAwRUI+IDxVMDA2NT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBHUkFWRQorPFUwMEVDPiA8VTAwNjk+CislIExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEUKKzxVMDBFRD4gPFUwMDY5PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVgKKzxVMDBFRT4gPFUwMDY5PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJUworPFUwMEVGPiA8VTAwNjk+CislIExBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggVElMREUKKzxVMDBGMT4gPFUwMDZFPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEdSQVZFCis8VTAwRjI+IDxVMDA2Rj4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBBQ1VURQorPFUwMEYzPiA8VTAwNkY+CislIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWAorPFUwMEY0PiA8VTAwNkY+CislIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggVElMREUKKzxVMDBGNT4gPFUwMDZGPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJUworPFUwMEY2PiA8VTAwNkY+CislIExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggR1JBVkUKKzxVMDBGOT4gPFUwMDc1PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFCis8VTAwRkE+IDxVMDA3NT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYCis8VTAwRkI+IDxVMDA3NT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMKKzxVMDBGQz4gPFUwMDc1PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEFDVVRFCis8VTAwRkQ+IDxVMDA3OT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBESUFFUkVTSVMKKzxVMDBGRj4gPFUwMDc5PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggTUFDUk9OCis8VTAxMDA+IDxVMDA0MT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBNQUNST04KKzxVMDEwMT4gPFUwMDYxPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQlJFVkUKKzxVMDEwMj4gPFUwMDQxPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEJSRVZFCis8VTAxMDM+IDxVMDA2MT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIE9HT05FSworPFUwMTA0PiA8VTAwNDE+CislIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggT0dPTkVLCis8VTAxMDU+IDxVMDA2MT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIEFDVVRFCis8VTAxMDY+IDxVMDA0Mz4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBBQ1VURQorPFUwMTA3PiA8VTAwNjM+CislIExBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDSVJDVU1GTEVYCis8VTAxMDg+IDxVMDA0Mz4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDSVJDVU1GTEVYCis8VTAxMDk+IDxVMDA2Mz4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIERPVCBBQk9WRQorPFUwMTBBPiA8VTAwNDM+CislIExBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggRE9UIEFCT1ZFCis8VTAxMEI+IDxVMDA2Mz4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENBUk9OCis8VTAxMEM+IDxVMDA0Mz4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDQVJPTgorPFUwMTBEPiA8VTAwNjM+CislIExBVElOIENBUElUQUwgTEVUVEVSIEQgV0lUSCBDQVJPTgorPFUwMTBFPiA8VTAwNDQ+CislIExBVElOIFNNQUxMIExFVFRFUiBEIFdJVEggQ0FST04KKzxVMDEwRj4gPFUwMDY0PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggTUFDUk9OCis8VTAxMTI+IDxVMDA0NT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBNQUNST04KKzxVMDExMz4gPFUwMDY1PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQlJFVkUKKzxVMDExND4gPFUwMDQ1PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEJSRVZFCis8VTAxMTU+IDxVMDA2NT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIERPVCBBQk9WRQorPFUwMTE2PiA8VTAwNDU+CislIExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggRE9UIEFCT1ZFCis8VTAxMTc+IDxVMDA2NT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIE9HT05FSworPFUwMTE4PiA8VTAwNDU+CislIExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggT0dPTkVLCis8VTAxMTk+IDxVMDA2NT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENBUk9OCis8VTAxMUE+IDxVMDA0NT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBDQVJPTgorPFUwMTFCPiA8VTAwNjU+CislIExBVElOIENBUElUQUwgTEVUVEVSIEcgV0lUSCBDSVJDVU1GTEVYCis8VTAxMUM+IDxVMDA0Nz4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEcgV0lUSCBDSVJDVU1GTEVYCis8VTAxMUQ+IDxVMDA2Nz4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRyBXSVRIIEJSRVZFCis8VTAxMUU+IDxVMDA0Nz4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEcgV0lUSCBCUkVWRQorPFUwMTFGPiA8VTAwNjc+CislIExBVElOIENBUElUQUwgTEVUVEVSIEcgV0lUSCBET1QgQUJPVkUKKzxVMDEyMD4gPFUwMDQ3PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgRyBXSVRIIERPVCBBQk9WRQorPFUwMTIxPiA8VTAwNjc+CislIExBVElOIENBUElUQUwgTEVUVEVSIEcgV0lUSCBDRURJTExBCis8VTAxMjI+IDxVMDA0Nz4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEcgV0lUSCBDRURJTExBCis8VTAxMjM+IDxVMDA2Nz4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSCBXSVRIIENJUkNVTUZMRVgKKzxVMDEyND4gPFUwMDQ4PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgSCBXSVRIIENJUkNVTUZMRVgKKzxVMDEyNT4gPFUwMDY4PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggVElMREUKKzxVMDEyOD4gPFUwMDQ5PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIFRJTERFCis8VTAxMjk+IDxVMDA2OT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIE1BQ1JPTgorPFUwMTJBPiA8VTAwNDk+CislIExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggTUFDUk9OCis8VTAxMkI+IDxVMDA2OT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEJSRVZFCis8VTAxMkM+IDxVMDA0OT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBCUkVWRQorPFUwMTJEPiA8VTAwNjk+CislIExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBPR09ORUsKKzxVMDEyRT4gPFUwMDQ5PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIE9HT05FSworPFUwMTJGPiA8VTAwNjk+CislIExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBET1QgQUJPVkUKKzxVMDEzMD4gPFUwMDQ5PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBKIFdJVEggQ0lSQ1VNRkxFWAorPFUwMTM0PiA8VTAwNEE+CislIExBVElOIFNNQUxMIExFVFRFUiBKIFdJVEggQ0lSQ1VNRkxFWAorPFUwMTM1PiA8VTAwNkE+CislIExBVElOIENBUElUQUwgTEVUVEVSIEsgV0lUSCBDRURJTExBCis8VTAxMzY+IDxVMDA0Qj4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEsgV0lUSCBDRURJTExBCis8VTAxMzc+IDxVMDA2Qj4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTCBXSVRIIEFDVVRFCis8VTAxMzk+IDxVMDA0Qz4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEwgV0lUSCBBQ1VURQorPFUwMTNBPiA8VTAwNkM+CislIExBVElOIENBUElUQUwgTEVUVEVSIEwgV0lUSCBDRURJTExBCis8VTAxM0I+IDxVMDA0Qz4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEwgV0lUSCBDRURJTExBCis8VTAxM0M+IDxVMDA2Qz4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTCBXSVRIIENBUk9OCis8VTAxM0Q+IDxVMDA0Qz4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEwgV0lUSCBDQVJPTgorPFUwMTNFPiA8VTAwNkM+CislIExBVElOIENBUElUQUwgTEVUVEVSIEwgV0lUSCBTVFJPS0UKKzxVMDE0MT4gPFUwMDRDPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgTCBXSVRIIFNUUk9LRQorPFUwMTQyPiA8VTAwNkM+CislIExBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBBQ1VURQorPFUwMTQzPiA8VTAwNEU+CislIExBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggQUNVVEUKKzxVMDE0ND4gPFUwMDZFPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggQ0VESUxMQQorPFUwMTQ1PiA8VTAwNEU+CislIExBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggQ0VESUxMQQorPFUwMTQ2PiA8VTAwNkU+CislIExBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBDQVJPTgorPFUwMTQ3PiA8VTAwNEU+CislIExBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggQ0FST04KKzxVMDE0OD4gPFUwMDZFPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggTUFDUk9OCis8VTAxNEM+IDxVMDA0Rj4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBNQUNST04KKzxVMDE0RD4gPFUwMDZGPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQlJFVkUKKzxVMDE0RT4gPFUwMDRGPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEJSRVZFCis8VTAxNEY+IDxVMDA2Rj4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERPVUJMRSBBQ1VURQorPFUwMTUwPiA8VTAwNEY+CislIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRE9VQkxFIEFDVVRFCis8VTAxNTE+IDxVMDA2Rj4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUiBXSVRIIEFDVVRFCis8VTAxNTQ+IDxVMDA1Mj4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFIgV0lUSCBBQ1VURQorPFUwMTU1PiA8VTAwNzI+CislIExBVElOIENBUElUQUwgTEVUVEVSIFIgV0lUSCBDRURJTExBCis8VTAxNTY+IDxVMDA1Mj4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFIgV0lUSCBDRURJTExBCis8VTAxNTc+IDxVMDA3Mj4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUiBXSVRIIENBUk9OCis8VTAxNTg+IDxVMDA1Mj4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFIgV0lUSCBDQVJPTgorPFUwMTU5PiA8VTAwNzI+CislIExBVElOIENBUElUQUwgTEVUVEVSIFMgV0lUSCBBQ1VURQorPFUwMTVBPiA8VTAwNTM+CislIExBVElOIFNNQUxMIExFVFRFUiBTIFdJVEggQUNVVEUKKzxVMDE1Qj4gPFUwMDczPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBTIFdJVEggQ0lSQ1VNRkxFWAorPFUwMTVDPiA8VTAwNTM+CislIExBVElOIFNNQUxMIExFVFRFUiBTIFdJVEggQ0lSQ1VNRkxFWAorPFUwMTVEPiA8VTAwNzM+CislIExBVElOIENBUElUQUwgTEVUVEVSIFMgV0lUSCBDRURJTExBCis8VTAxNUU+IDxVMDA1Mz4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFMgV0lUSCBDRURJTExBCis8VTAxNUY+IDxVMDA3Mz4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUyBXSVRIIENBUk9OCis8VTAxNjA+IDxVMDA1Mz4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFMgV0lUSCBDQVJPTgorPFUwMTYxPiA8VTAwNzM+CislIExBVElOIENBUElUQUwgTEVUVEVSIFQgV0lUSCBDRURJTExBCis8VTAxNjI+IDxVMDA1ND4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFQgV0lUSCBDRURJTExBCis8VTAxNjM+IDxVMDA3ND4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVCBXSVRIIENBUk9OCis8VTAxNjQ+IDxVMDA1ND4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFQgV0lUSCBDQVJPTgorPFUwMTY1PiA8VTAwNzQ+CislIExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBUSUxERQorPFUwMTY4PiA8VTAwNTU+CislIExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggVElMREUKKzxVMDE2OT4gPFUwMDc1PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggTUFDUk9OCis8VTAxNkE+IDxVMDA1NT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBNQUNST04KKzxVMDE2Qj4gPFUwMDc1PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQlJFVkUKKzxVMDE2Qz4gPFUwMDU1PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEJSRVZFCis8VTAxNkQ+IDxVMDA3NT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIFJJTkcgQUJPVkUKKzxVMDE2RT4gPFUwMDU1PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIFJJTkcgQUJPVkUKKzxVMDE2Rj4gPFUwMDc1PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRE9VQkxFIEFDVVRFCis8VTAxNzA+IDxVMDA1NT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBET1VCTEUgQUNVVEUKKzxVMDE3MT4gPFUwMDc1PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggT0dPTkVLCis8VTAxNzI+IDxVMDA1NT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBPR09ORUsKKzxVMDE3Mz4gPFUwMDc1PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBXIFdJVEggQ0lSQ1VNRkxFWAorPFUwMTc0PiA8VTAwNTc+CislIExBVElOIFNNQUxMIExFVFRFUiBXIFdJVEggQ0lSQ1VNRkxFWAorPFUwMTc1PiA8VTAwNzc+CislIExBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBDSVJDVU1GTEVYCis8VTAxNzY+IDxVMDA1OT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBDSVJDVU1GTEVYCis8VTAxNzc+IDxVMDA3OT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIERJQUVSRVNJUworPFUwMTc4PiA8VTAwNTk+CislIExBVElOIENBUElUQUwgTEVUVEVSIFogV0lUSCBBQ1VURQorPFUwMTc5PiA8VTAwNUE+CislIExBVElOIFNNQUxMIExFVFRFUiBaIFdJVEggQUNVVEUKKzxVMDE3QT4gPFUwMDdBPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBaIFdJVEggRE9UIEFCT1ZFCis8VTAxN0I+IDxVMDA1QT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFogV0lUSCBET1QgQUJPVkUKKzxVMDE3Qz4gPFUwMDdBPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBaIFdJVEggQ0FST04KKzxVMDE3RD4gPFUwMDVBPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgWiBXSVRIIENBUk9OCis8VTAxN0U+IDxVMDA3QT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEhPUk4KKzxVMDFBMD4gPFUwMDRGPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEhPUk4KKzxVMDFBMT4gPFUwMDZGPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggSE9STgorPFUwMUFGPiA8VTAwNTU+CislIExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggSE9STgorPFUwMUIwPiA8VTAwNzU+CislIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDQVJPTgorPFUwMUNEPiA8VTAwNDE+CislIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQ0FST04KKzxVMDFDRT4gPFUwMDYxPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0FST04KKzxVMDFDRj4gPFUwMDQ5PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENBUk9OCis8VTAxRDA+IDxVMDA2OT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIENBUk9OCis8VTAxRDE+IDxVMDA0Rj4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBDQVJPTgorPFUwMUQyPiA8VTAwNkY+CislIExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBDQVJPTgorPFUwMUQzPiA8VTAwNTU+CislIExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQ0FST04KKzxVMDFEND4gPFUwMDc1PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTIEFORCBNQUNST04KKzxVMDFENT4gPFUwMDU1PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUyBBTkQgTUFDUk9OCis8VTAxRDY+IDxVMDA3NT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUyBBTkQgQUNVVEUKKzxVMDFENz4gPFUwMDU1PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUyBBTkQgQUNVVEUKKzxVMDFEOD4gPFUwMDc1PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTIEFORCBDQVJPTgorPFUwMUQ5PiA8VTAwNTU+CislIExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTIEFORCBDQVJPTgorPFUwMURBPiA8VTAwNzU+CislIExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMgQU5EIEdSQVZFCis8VTAxREI+IDxVMDA1NT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMgQU5EIEdSQVZFCis8VTAxREM+IDxVMDA3NT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJUyBBTkQgTUFDUk9OCis8VTAxREU+IDxVMDA0MT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMgQU5EIE1BQ1JPTgorPFUwMURGPiA8VTAwNjE+CislIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBET1QgQUJPVkUgQU5EIE1BQ1JPTgorPFUwMUUwPiA8VTAwNDE+CislIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggRE9UIEFCT1ZFIEFORCBNQUNST04KKzxVMDFFMT4gPFUwMDYxPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBBRSBXSVRIIE1BQ1JPTgorPFUwMUUyPiA8VTAwQzY+OyI8VTAwNDE+PFUwMDQ1PiIKKyUgTEFUSU4gU01BTEwgTEVUVEVSIEFFIFdJVEggTUFDUk9OCis8VTAxRTM+IDxVMDBFNj47IjxVMDA2MT48VTAwNjU+IgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBHIFdJVEggQ0FST04KKzxVMDFFNj4gPFUwMDQ3PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgRyBXSVRIIENBUk9OCis8VTAxRTc+IDxVMDA2Nz4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSyBXSVRIIENBUk9OCis8VTAxRTg+IDxVMDA0Qj4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEsgV0lUSCBDQVJPTgorPFUwMUU5PiA8VTAwNkI+CislIExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBPR09ORUsKKzxVMDFFQT4gPFUwMDRGPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIE9HT05FSworPFUwMUVCPiA8VTAwNkY+CislIExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBPR09ORUsgQU5EIE1BQ1JPTgorPFUwMUVDPiA8VTAwNEY+CislIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggT0dPTkVLIEFORCBNQUNST04KKzxVMDFFRD4gPFUwMDZGPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBFWkggV0lUSCBDQVJPTgorPFUwMUVFPiA8VTAxQjc+CislIExBVElOIFNNQUxMIExFVFRFUiBFWkggV0lUSCBDQVJPTgorPFUwMUVGPiA8VTAyOTI+CislIExBVElOIFNNQUxMIExFVFRFUiBKIFdJVEggQ0FST04KKzxVMDFGMD4gPFUwMDZBPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBHIFdJVEggQUNVVEUKKzxVMDFGND4gPFUwMDQ3PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgRyBXSVRIIEFDVVRFCis8VTAxRjU+IDxVMDA2Nz4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIEdSQVZFCis8VTAxRjg+IDxVMDA0RT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBHUkFWRQorPFUwMUY5PiA8VTAwNkU+CislIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFIEFORCBBQ1VURQorPFUwMUZBPiA8VTAwNDE+CislIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRSBBTkQgQUNVVEUKKzxVMDFGQj4gPFUwMDYxPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBBRSBXSVRIIEFDVVRFCis8VTAxRkM+IDxVMDBDNj47IjxVMDA0MT48VTAwNDU+IgorJSBMQVRJTiBTTUFMTCBMRVRURVIgQUUgV0lUSCBBQ1VURQorPFUwMUZEPiA8VTAwRTY+OyI8VTAwNjE+PFUwMDY1PiIKKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFNUUk9LRSBBTkQgQUNVVEUKKzxVMDFGRT4gPFUwMDRGPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFNUUk9LRSBBTkQgQUNVVEUKKzxVMDFGRj4gPFUwMDZGPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggRE9VQkxFIEdSQVZFCis8VTAyMDA+IDxVMDA0MT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBET1VCTEUgR1JBVkUKKzxVMDIwMT4gPFUwMDYxPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggSU5WRVJURUQgQlJFVkUKKzxVMDIwMj4gPFUwMDQxPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIElOVkVSVEVEIEJSRVZFCis8VTAyMDM+IDxVMDA2MT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIERPVUJMRSBHUkFWRQorPFUwMjA0PiA8VTAwNDU+CislIExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggRE9VQkxFIEdSQVZFCis8VTAyMDU+IDxVMDA2NT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIElOVkVSVEVEIEJSRVZFCis8VTAyMDY+IDxVMDA0NT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBJTlZFUlRFRCBCUkVWRQorPFUwMjA3PiA8VTAwNjU+CislIExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBET1VCTEUgR1JBVkUKKzxVMDIwOD4gPFUwMDQ5PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIERPVUJMRSBHUkFWRQorPFUwMjA5PiA8VTAwNjk+CislIExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBJTlZFUlRFRCBCUkVWRQorPFUwMjBBPiA8VTAwNDk+CislIExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggSU5WRVJURUQgQlJFVkUKKzxVMDIwQj4gPFUwMDY5PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRE9VQkxFIEdSQVZFCis8VTAyMEM+IDxVMDA0Rj4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBET1VCTEUgR1JBVkUKKzxVMDIwRD4gPFUwMDZGPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggSU5WRVJURUQgQlJFVkUKKzxVMDIwRT4gPFUwMDRGPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIElOVkVSVEVEIEJSRVZFCis8VTAyMEY+IDxVMDA2Rj4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUiBXSVRIIERPVUJMRSBHUkFWRQorPFUwMjEwPiA8VTAwNTI+CislIExBVElOIFNNQUxMIExFVFRFUiBSIFdJVEggRE9VQkxFIEdSQVZFCis8VTAyMTE+IDxVMDA3Mj4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUiBXSVRIIElOVkVSVEVEIEJSRVZFCis8VTAyMTI+IDxVMDA1Mj4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFIgV0lUSCBJTlZFUlRFRCBCUkVWRQorPFUwMjEzPiA8VTAwNzI+CislIExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBET1VCTEUgR1JBVkUKKzxVMDIxND4gPFUwMDU1PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERPVUJMRSBHUkFWRQorPFUwMjE1PiA8VTAwNzU+CislIExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBJTlZFUlRFRCBCUkVWRQorPFUwMjE2PiA8VTAwNTU+CislIExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggSU5WRVJURUQgQlJFVkUKKzxVMDIxNz4gPFUwMDc1PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBTIFdJVEggQ09NTUEgQkVMT1cKKzxVMDIxOD4gPFUwMDUzPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgUyBXSVRIIENPTU1BIEJFTE9XCis8VTAyMTk+IDxVMDA3Mz4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVCBXSVRIIENPTU1BIEJFTE9XCis8VTAyMUE+IDxVMDA1ND4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFQgV0lUSCBDT01NQSBCRUxPVworPFUwMjFCPiA8VTAwNzQ+CislIExBVElOIENBUElUQUwgTEVUVEVSIEggV0lUSCBDQVJPTgorPFUwMjFFPiA8VTAwNDg+CislIExBVElOIFNNQUxMIExFVFRFUiBIIFdJVEggQ0FST04KKzxVMDIxRj4gPFUwMDY4PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggRE9UIEFCT1ZFCis8VTAyMjY+IDxVMDA0MT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBET1QgQUJPVkUKKzxVMDIyNz4gPFUwMDYxPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0VESUxMQQorPFUwMjI4PiA8VTAwNDU+CislIExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0VESUxMQQorPFUwMjI5PiA8VTAwNjU+CislIExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVMgQU5EIE1BQ1JPTgorPFUwMjJBPiA8VTAwNEY+CislIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTIEFORCBNQUNST04KKzxVMDIyQj4gPFUwMDZGPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggVElMREUgQU5EIE1BQ1JPTgorPFUwMjJDPiA8VTAwNEY+CislIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggVElMREUgQU5EIE1BQ1JPTgorPFUwMjJEPiA8VTAwNkY+CislIExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBET1QgQUJPVkUKKzxVMDIyRT4gPFUwMDRGPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIERPVCBBQk9WRQorPFUwMjJGPiA8VTAwNkY+CislIExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBET1QgQUJPVkUgQU5EIE1BQ1JPTgorPFUwMjMwPiA8VTAwNEY+CislIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRE9UIEFCT1ZFIEFORCBNQUNST04KKzxVMDIzMT4gPFUwMDZGPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggTUFDUk9OCis8VTAyMzI+IDxVMDA1OT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBNQUNST04KKzxVMDIzMz4gPFUwMDc5PgorJSBDT01CSU5JTkcgR1JBVkUgVE9ORSBNQVJLCis8VTAzNDA+IDxVMDMwMD4KKyUgQ09NQklOSU5HIEFDVVRFIFRPTkUgTUFSSworPFUwMzQxPiA8VTAzMDE+CislIENPTUJJTklORyBHUkVFSyBLT1JPTklTCis8VTAzNDM+IDxVMDMxMz4KKyUgQ09NQklOSU5HIEdSRUVLIERJQUxZVElLQSBUT05PUworPFUwMzQ0PiA8VTAzMDg+CislIEdSRUVLIE5VTUVSQUwgU0lHTgorPFUwMzc0PiA8VTAyQjk+CislIEdSRUVLIFFVRVNUSU9OIE1BUksKKzxVMDM3RT4gPFUwMDNCPgorJSBHUkVFSyBESUFMWVRJS0EgVE9OT1MKKzxVMDM4NT4gPFUwMEE4PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIFRPTk9TCis8VTAzODY+IDxVMDM5MT4KKyUgR1JFRUsgQU5PIFRFTEVJQQorPFUwMzg3PiA8VTAwQjc+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIEVQU0lMT04gV0lUSCBUT05PUworPFUwMzg4PiA8VTAzOTU+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIFRPTk9TCis8VTAzODk+IDxVMDM5Nz4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBXSVRIIFRPTk9TCis8VTAzOEE+IDxVMDM5OT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01JQ1JPTiBXSVRIIFRPTk9TCis8VTAzOEM+IDxVMDM5Rj4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgVVBTSUxPTiBXSVRIIFRPTk9TCis8VTAzOEU+IDxVMDNBNT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBUT05PUworPFUwMzhGPiA8VTAzQTk+CislIEdSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggRElBTFlUSUtBIEFORCBUT05PUworPFUwMzkwPiA8VTAzQjk+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIElPVEEgV0lUSCBESUFMWVRJS0EKKzxVMDNBQT4gPFUwMzk5PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBVUFNJTE9OIFdJVEggRElBTFlUSUtBCis8VTAzQUI+IDxVMDNBNT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggVE9OT1MKKzxVMDNBQz4gPFUwM0IxPgorJSBHUkVFSyBTTUFMTCBMRVRURVIgRVBTSUxPTiBXSVRIIFRPTk9TCis8VTAzQUQ+IDxVMDNCNT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFRPTk9TCis8VTAzQUU+IDxVMDNCNz4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIElPVEEgV0lUSCBUT05PUworPFUwM0FGPiA8VTAzQjk+CislIEdSRUVLIFNNQUxMIExFVFRFUiBVUFNJTE9OIFdJVEggRElBTFlUSUtBIEFORCBUT05PUworPFUwM0IwPiA8VTAzQzU+CislIEdSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggRElBTFlUSUtBCis8VTAzQ0E+IDxVMDNCOT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBESUFMWVRJS0EKKzxVMDNDQj4gPFUwM0M1PgorJSBHUkVFSyBTTUFMTCBMRVRURVIgT01JQ1JPTiBXSVRIIFRPTk9TCis8VTAzQ0M+IDxVMDNCRj4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBUT05PUworPFUwM0NEPiA8VTAzQzU+CislIEdSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFRPTk9TCis8VTAzQ0U+IDxVMDNDOT4KKyUgR1JFRUsgVVBTSUxPTiBXSVRIIEFDVVRFIEFORCBIT09LIFNZTUJPTAorPFUwM0QzPiA8VTAzRDI+CislIEdSRUVLIFVQU0lMT04gV0lUSCBESUFFUkVTSVMgQU5EIEhPT0sgU1lNQk9MCis8VTAzRDQ+IDxVMDNEMj4KKyUgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSUUgV0lUSCBHUkFWRQorPFUwNDAwPiA8VTA0MTU+CislIENZUklMTElDIENBUElUQUwgTEVUVEVSIElPCis8VTA0MDE+IDxVMDQxNT4KKyUgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgR0pFCis8VTA0MDM+IDxVMDQxMz4KKyUgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUkKKzxVMDQwNz4gPFUwNDA2PgorJSBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBLSkUKKzxVMDQwQz4gPFUwNDFBPgorJSBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJIFdJVEggR1JBVkUKKzxVMDQwRD4gPFUwNDE4PgorJSBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSE9SVCBVCis8VTA0MEU+IDxVMDQyMz4KKyUgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hPUlQgSQorPFUwNDE5PiA8VTA0MTg+CislIENZUklMTElDIFNNQUxMIExFVFRFUiBTSE9SVCBJCis8VTA0Mzk+IDxVMDQzOD4KKyUgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIElFIFdJVEggR1JBVkUKKzxVMDQ1MD4gPFUwNDM1PgorJSBDWVJJTExJQyBTTUFMTCBMRVRURVIgSU8KKzxVMDQ1MT4gPFUwNDM1PgorJSBDWVJJTExJQyBTTUFMTCBMRVRURVIgR0pFCis8VTA0NTM+IDxVMDQzMz4KKyUgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlJCis8VTA0NTc+IDxVMDQ1Nj4KKyUgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEtKRQorPFUwNDVDPiA8VTA0M0E+CislIENZUklMTElDIFNNQUxMIExFVFRFUiBJIFdJVEggR1JBVkUKKzxVMDQ1RD4gPFUwNDM4PgorJSBDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hPUlQgVQorPFUwNDVFPiA8VTA0NDM+CislIENZUklMTElDIENBUElUQUwgTEVUVEVSIElaSElUU0EgV0lUSCBET1VCTEUgR1JBVkUgQUNDRU5UCis8VTA0NzY+IDxVMDQ3ND4KKyUgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIElaSElUU0EgV0lUSCBET1VCTEUgR1JBVkUgQUNDRU5UCis8VTA0Nzc+IDxVMDQ3NT4KKyUgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWkhFIFdJVEggQlJFVkUKKzxVMDRDMT4gPFUwNDE2PgorJSBDWVJJTExJQyBTTUFMTCBMRVRURVIgWkhFIFdJVEggQlJFVkUKKzxVMDRDMj4gPFUwNDM2PgorJSBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBBIFdJVEggQlJFVkUKKzxVMDREMD4gPFUwNDEwPgorJSBDWVJJTExJQyBTTUFMTCBMRVRURVIgQSBXSVRIIEJSRVZFCis8VTA0RDE+IDxVMDQzMD4KKyUgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJUworPFUwNEQyPiA8VTA0MTA+CislIENZUklMTElDIFNNQUxMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTCis8VTA0RDM+IDxVMDQzMD4KKyUgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSUUgV0lUSCBCUkVWRQorPFUwNEQ2PiA8VTA0MTU+CislIENZUklMTElDIFNNQUxMIExFVFRFUiBJRSBXSVRIIEJSRVZFCis8VTA0RDc+IDxVMDQzNT4KKyUgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0NIV0EgV0lUSCBESUFFUkVTSVMKKzxVMDREQT4gPFUwNEQ4PgorJSBDWVJJTExJQyBTTUFMTCBMRVRURVIgU0NIV0EgV0lUSCBESUFFUkVTSVMKKzxVMDREQj4gPFUwNEQ5PgorJSBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaSEUgV0lUSCBESUFFUkVTSVMKKzxVMDREQz4gPFUwNDE2PgorJSBDWVJJTExJQyBTTUFMTCBMRVRURVIgWkhFIFdJVEggRElBRVJFU0lTCis8VTA0REQ+IDxVMDQzNj4KKyUgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWkUgV0lUSCBESUFFUkVTSVMKKzxVMDRERT4gPFUwNDE3PgorJSBDWVJJTExJQyBTTUFMTCBMRVRURVIgWkUgV0lUSCBESUFFUkVTSVMKKzxVMDRERj4gPFUwNDM3PgorJSBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJIFdJVEggTUFDUk9OCis8VTA0RTI+IDxVMDQxOD4KKyUgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEkgV0lUSCBNQUNST04KKzxVMDRFMz4gPFUwNDM4PgorJSBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTCis8VTA0RTQ+IDxVMDQxOD4KKyUgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVMKKzxVMDRFNT4gPFUwNDM4PgorJSBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTCis8VTA0RTY+IDxVMDQxRT4KKyUgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVMKKzxVMDRFNz4gPFUwNDNFPgorJSBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBCQVJSRUQgTyBXSVRIIERJQUVSRVNJUworPFUwNEVBPiA8VTA0RTg+CislIENZUklMTElDIFNNQUxMIExFVFRFUiBCQVJSRUQgTyBXSVRIIERJQUVSRVNJUworPFUwNEVCPiA8VTA0RTk+CislIENZUklMTElDIENBUElUQUwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVMKKzxVMDRFQz4gPFUwNDJEPgorJSBDWVJJTExJQyBTTUFMTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJUworPFUwNEVEPiA8VTA0NEQ+CislIENZUklMTElDIENBUElUQUwgTEVUVEVSIFUgV0lUSCBNQUNST04KKzxVMDRFRT4gPFUwNDIzPgorJSBDWVJJTExJQyBTTUFMTCBMRVRURVIgVSBXSVRIIE1BQ1JPTgorPFUwNEVGPiA8VTA0NDM+CislIENZUklMTElDIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMKKzxVMDRGMD4gPFUwNDIzPgorJSBDWVJJTExJQyBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUworPFUwNEYxPiA8VTA0NDM+CislIENZUklMTElDIENBUElUQUwgTEVUVEVSIFUgV0lUSCBET1VCTEUgQUNVVEUKKzxVMDRGMj4gPFUwNDIzPgorJSBDWVJJTExJQyBTTUFMTCBMRVRURVIgVSBXSVRIIERPVUJMRSBBQ1VURQorPFUwNEYzPiA8VTA0NDM+CislIENZUklMTElDIENBUElUQUwgTEVUVEVSIENIRSBXSVRIIERJQUVSRVNJUworPFUwNEY0PiA8VTA0Mjc+CislIENZUklMTElDIFNNQUxMIExFVFRFUiBDSEUgV0lUSCBESUFFUkVTSVMKKzxVMDRGNT4gPFUwNDQ3PgorJSBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZRVJVIFdJVEggRElBRVJFU0lTCis8VTA0Rjg+IDxVMDQyQj4KKyUgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlFUlUgV0lUSCBESUFFUkVTSVMKKzxVMDRGOT4gPFUwNDRCPgorJSBBUkFCSUMgTEVUVEVSIEFMRUYgV0lUSCBNQUREQSBBQk9WRQorPFUwNjIyPiA8VTA2Mjc+CislIEFSQUJJQyBMRVRURVIgQUxFRiBXSVRIIEhBTVpBIEFCT1ZFCis8VTA2MjM+IDxVMDYyNz4KKyUgQVJBQklDIExFVFRFUiBXQVcgV0lUSCBIQU1aQSBBQk9WRQorPFUwNjI0PiA8VTA2NDg+CislIEFSQUJJQyBMRVRURVIgQUxFRiBXSVRIIEhBTVpBIEJFTE9XCis8VTA2MjU+IDxVMDYyNz4KKyUgQVJBQklDIExFVFRFUiBZRUggV0lUSCBIQU1aQSBBQk9WRQorPFUwNjI2PiA8VTA2NEE+CislIEFSQUJJQyBMRVRURVIgSEVIIFdJVEggWUVIIEFCT1ZFCis8VTA2QzA+IDxVMDZENT4KKyUgQVJBQklDIExFVFRFUiBIRUggR09BTCBXSVRIIEhBTVpBIEFCT1ZFCis8VTA2QzI+IDxVMDZDMT4KKyUgQVJBQklDIExFVFRFUiBZRUggQkFSUkVFIFdJVEggSEFNWkEgQUJPVkUKKzxVMDZEMz4gPFUwNkQyPgorJSBERVZBTkFHQVJJIExFVFRFUiBOTk5BCis8VTA5Mjk+ICI8VTA5Mjg+PFUwOTNDPiIKKyUgREVWQU5BR0FSSSBMRVRURVIgUlJBCis8VTA5MzE+ICI8VTA5MzA+PFUwOTNDPiIKKyUgREVWQU5BR0FSSSBMRVRURVIgTExMQQorPFUwOTM0PiAiPFUwOTMzPjxVMDkzQz4iCislIERFVkFOQUdBUkkgTEVUVEVSIFFBCis8VTA5NTg+ICI8VTA5MTU+PFUwOTNDPiIKKyUgREVWQU5BR0FSSSBMRVRURVIgS0hIQQorPFUwOTU5PiAiPFUwOTE2PjxVMDkzQz4iCislIERFVkFOQUdBUkkgTEVUVEVSIEdISEEKKzxVMDk1QT4gIjxVMDkxNz48VTA5M0M+IgorJSBERVZBTkFHQVJJIExFVFRFUiBaQQorPFUwOTVCPiAiPFUwOTFDPjxVMDkzQz4iCislIERFVkFOQUdBUkkgTEVUVEVSIEREREhBCis8VTA5NUM+ICI8VTA5MjE+PFUwOTNDPiIKKyUgREVWQU5BR0FSSSBMRVRURVIgUkhBCis8VTA5NUQ+ICI8VTA5MjI+PFUwOTNDPiIKKyUgREVWQU5BR0FSSSBMRVRURVIgRkEKKzxVMDk1RT4gIjxVMDkyQj48VTA5M0M+IgorJSBERVZBTkFHQVJJIExFVFRFUiBZWUEKKzxVMDk1Rj4gIjxVMDkyRj48VTA5M0M+IgorJSBCRU5HQUxJIFZPV0VMIFNJR04gTworPFUwOUNCPiAiPFUwOUM3PjxVMDlCRT4iCislIEJFTkdBTEkgVk9XRUwgU0lHTiBBVQorPFUwOUNDPiAiPFUwOUM3PjxVMDlENz4iCislIEJFTkdBTEkgTEVUVEVSIFJSQQorPFUwOURDPiAiPFUwOUExPjxVMDlCQz4iCislIEJFTkdBTEkgTEVUVEVSIFJIQQorPFUwOUREPiAiPFUwOUEyPjxVMDlCQz4iCislIEJFTkdBTEkgTEVUVEVSIFlZQQorPFUwOURGPiAiPFUwOUFGPjxVMDlCQz4iCislIEdVUk1VS0hJIExFVFRFUiBMTEEKKzxVMEEzMz4gIjxVMEEzMj48VTBBM0M+IgorJSBHVVJNVUtISSBMRVRURVIgU0hBCis8VTBBMzY+ICI8VTBBMzg+PFUwQTNDPiIKKyUgR1VSTVVLSEkgTEVUVEVSIEtISEEKKzxVMEE1OT4gIjxVMEExNj48VTBBM0M+IgorJSBHVVJNVUtISSBMRVRURVIgR0hIQQorPFUwQTVBPiAiPFUwQTE3PjxVMEEzQz4iCislIEdVUk1VS0hJIExFVFRFUiBaQQorPFUwQTVCPiAiPFUwQTFDPjxVMEEzQz4iCislIEdVUk1VS0hJIExFVFRFUiBGQQorPFUwQTVFPiAiPFUwQTJCPjxVMEEzQz4iCislIE9SSVlBIFZPV0VMIFNJR04gQUkKKzxVMEI0OD4gIjxVMEI0Nz48VTBCNTY+IgorJSBPUklZQSBWT1dFTCBTSUdOIE8KKzxVMEI0Qj4gIjxVMEI0Nz48VTBCM0U+IgorJSBPUklZQSBWT1dFTCBTSUdOIEFVCis8VTBCNEM+ICI8VTBCNDc+PFUwQjU3PiIKKyUgT1JJWUEgTEVUVEVSIFJSQQorPFUwQjVDPiAiPFUwQjIxPjxVMEIzQz4iCislIE9SSVlBIExFVFRFUiBSSEEKKzxVMEI1RD4gIjxVMEIyMj48VTBCM0M+IgorJSBUQU1JTCBMRVRURVIgQVUKKzxVMEI5ND4gIjxVMEI5Mj48VTBCRDc+IgorJSBUQU1JTCBWT1dFTCBTSUdOIE8KKzxVMEJDQT4gIjxVMEJDNj48VTBCQkU+IgorJSBUQU1JTCBWT1dFTCBTSUdOIE9PCis8VTBCQ0I+ICI8VTBCQzc+PFUwQkJFPiIKKyUgVEFNSUwgVk9XRUwgU0lHTiBBVQorPFUwQkNDPiAiPFUwQkM2PjxVMEJENz4iCislIFRFTFVHVSBWT1dFTCBTSUdOIEFJCis8VTBDNDg+ICI8VTBDNDY+PFUwQzU2PiIKKyUgS0FOTkFEQSBWT1dFTCBTSUdOIElJCis8VTBDQzA+ICI8VTBDQkY+PFUwQ0Q1PiIKKyUgS0FOTkFEQSBWT1dFTCBTSUdOIEVFCis8VTBDQzc+ICI8VTBDQzY+PFUwQ0Q1PiIKKyUgS0FOTkFEQSBWT1dFTCBTSUdOIEFJCis8VTBDQzg+ICI8VTBDQzY+PFUwQ0Q2PiIKKyUgS0FOTkFEQSBWT1dFTCBTSUdOIE8KKzxVMENDQT4gIjxVMENDNj48VTBDQzI+IgorJSBLQU5OQURBIFZPV0VMIFNJR04gT08KKzxVMENDQj4gIjxVMENDQT48VTBDRDU+IgorJSBNQUxBWUFMQU0gVk9XRUwgU0lHTiBPCis8VTBENEE+ICI8VTBENDY+PFUwRDNFPiIKKyUgTUFMQVlBTEFNIFZPV0VMIFNJR04gT08KKzxVMEQ0Qj4gIjxVMEQ0Nz48VTBEM0U+IgorJSBNQUxBWUFMQU0gVk9XRUwgU0lHTiBBVQorPFUwRDRDPiAiPFUwRDQ2PjxVMEQ1Nz4iCislIFNJTkhBTEEgVk9XRUwgU0lHTiBESUdBIEtPTUJVVkEKKzxVMEREQT4gIjxVMEREOT48VTBEQ0E+IgorJSBTSU5IQUxBIFZPV0VMIFNJR04gS09NQlVWQSBIQUEgQUVMQS1QSUxMQQorPFUwRERDPiAiPFUwREQ5PjxVMERDRj4iCislIFNJTkhBTEEgVk9XRUwgU0lHTiBLT01CVVZBIEhBQSBESUdBIEFFTEEtUElMTEEKKzxVMERERD4gIjxVMEREQz48VTBEQ0E+IgorJSBTSU5IQUxBIFZPV0VMIFNJR04gS09NQlVWQSBIQUEgR0FZQU5VS0lUVEEKKzxVMERERT4gIjxVMEREOT48VTBEREY+IgorJSBUSUJFVEFOIExFVFRFUiBHSEEKKzxVMEY0Mz4gIjxVMEY0Mj48VTBGQjc+IgorJSBUSUJFVEFOIExFVFRFUiBEREhBCis8VTBGNEQ+ICI8VTBGNEM+PFUwRkI3PiIKKyUgVElCRVRBTiBMRVRURVIgREhBCis8VTBGNTI+ICI8VTBGNTE+PFUwRkI3PiIKKyUgVElCRVRBTiBMRVRURVIgQkhBCis8VTBGNTc+ICI8VTBGNTY+PFUwRkI3PiIKKyUgVElCRVRBTiBMRVRURVIgRFpIQQorPFUwRjVDPiAiPFUwRjVCPjxVMEZCNz4iCislIFRJQkVUQU4gTEVUVEVSIEtTU0EKKzxVMEY2OT4gIjxVMEY0MD48VTBGQjU+IgorJSBUSUJFVEFOIFZPV0VMIFNJR04gSUkKKzxVMEY3Mz4gIjxVMEY3MT48VTBGNzI+IgorJSBUSUJFVEFOIFZPV0VMIFNJR04gVVUKKzxVMEY3NT4gIjxVMEY3MT48VTBGNzQ+IgorJSBUSUJFVEFOIFZPV0VMIFNJR04gVk9DQUxJQyBSCis8VTBGNzY+ICI8VTBGQjI+PFUwRjgwPiIKKyUgVElCRVRBTiBWT1dFTCBTSUdOIFZPQ0FMSUMgTAorPFUwRjc4PiAiPFUwRkIzPjxVMEY4MD4iCislIFRJQkVUQU4gVk9XRUwgU0lHTiBSRVZFUlNFRCBJSQorPFUwRjgxPiAiPFUwRjcxPjxVMEY4MD4iCislIFRJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBHSEEKKzxVMEY5Mz4gIjxVMEY5Mj48VTBGQjc+IgorJSBUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgRERIQQorPFUwRjlEPiAiPFUwRjlDPjxVMEZCNz4iCislIFRJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBESEEKKzxVMEZBMj4gIjxVMEZBMT48VTBGQjc+IgorJSBUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgQkhBCis8VTBGQTc+ICI8VTBGQTY+PFUwRkI3PiIKKyUgVElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIERaSEEKKzxVMEZBQz4gIjxVMEZBQj48VTBGQjc+IgorJSBUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgS1NTQQorPFUwRkI5PiAiPFUwRjkwPjxVMEZCNT4iCislIE1ZQU5NQVIgTEVUVEVSIFVVCis8VTEwMjY+ICI8VTEwMjU+PFUxMDJFPiIKKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFJJTkcgQkVMT1cKKzxVMUUwMD4gPFUwMDQxPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFJJTkcgQkVMT1cKKzxVMUUwMT4gPFUwMDYxPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBCIFdJVEggRE9UIEFCT1ZFCis8VTFFMDI+IDxVMDA0Mj4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEIgV0lUSCBET1QgQUJPVkUKKzxVMUUwMz4gPFUwMDYyPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBCIFdJVEggRE9UIEJFTE9XCis8VTFFMDQ+IDxVMDA0Mj4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEIgV0lUSCBET1QgQkVMT1cKKzxVMUUwNT4gPFUwMDYyPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBCIFdJVEggTElORSBCRUxPVworPFUxRTA2PiA8VTAwNDI+CislIExBVElOIFNNQUxMIExFVFRFUiBCIFdJVEggTElORSBCRUxPVworPFUxRTA3PiA8VTAwNjI+CislIExBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBIEFORCBBQ1VURQorPFUxRTA4PiA8VTAwNDM+CislIExBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggQ0VESUxMQSBBTkQgQUNVVEUKKzxVMUUwOT4gPFUwMDYzPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBEIFdJVEggRE9UIEFCT1ZFCis8VTFFMEE+IDxVMDA0ND4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEQgV0lUSCBET1QgQUJPVkUKKzxVMUUwQj4gPFUwMDY0PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBEIFdJVEggRE9UIEJFTE9XCis8VTFFMEM+IDxVMDA0ND4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEQgV0lUSCBET1QgQkVMT1cKKzxVMUUwRD4gPFUwMDY0PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBEIFdJVEggTElORSBCRUxPVworPFUxRTBFPiA8VTAwNDQ+CislIExBVElOIFNNQUxMIExFVFRFUiBEIFdJVEggTElORSBCRUxPVworPFUxRTBGPiA8VTAwNjQ+CislIExBVElOIENBUElUQUwgTEVUVEVSIEQgV0lUSCBDRURJTExBCis8VTFFMTA+IDxVMDA0ND4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEQgV0lUSCBDRURJTExBCis8VTFFMTE+IDxVMDA2ND4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRCBXSVRIIENJUkNVTUZMRVggQkVMT1cKKzxVMUUxMj4gPFUwMDQ0PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgRCBXSVRIIENJUkNVTUZMRVggQkVMT1cKKzxVMUUxMz4gPFUwMDY0PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggTUFDUk9OIEFORCBHUkFWRQorPFUxRTE0PiA8VTAwNDU+CislIExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggTUFDUk9OIEFORCBHUkFWRQorPFUxRTE1PiA8VTAwNjU+CislIExBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBNQUNST04gQU5EIEFDVVRFCis8VTFFMTY+IDxVMDA0NT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBNQUNST04gQU5EIEFDVVRFCis8VTFFMTc+IDxVMDA2NT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVggQkVMT1cKKzxVMUUxOD4gPFUwMDQ1PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVggQkVMT1cKKzxVMUUxOT4gPFUwMDY1PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggVElMREUgQkVMT1cKKzxVMUUxQT4gPFUwMDQ1PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIFRJTERFIEJFTE9XCis8VTFFMUI+IDxVMDA2NT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENFRElMTEEgQU5EIEJSRVZFCis8VTFFMUM+IDxVMDA0NT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBDRURJTExBIEFORCBCUkVWRQorPFUxRTFEPiA8VTAwNjU+CislIExBVElOIENBUElUQUwgTEVUVEVSIEYgV0lUSCBET1QgQUJPVkUKKzxVMUUxRT4gPFUwMDQ2PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgRiBXSVRIIERPVCBBQk9WRQorPFUxRTFGPiA8VTAwNjY+CislIExBVElOIENBUElUQUwgTEVUVEVSIEcgV0lUSCBNQUNST04KKzxVMUUyMD4gPFUwMDQ3PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgRyBXSVRIIE1BQ1JPTgorPFUxRTIxPiA8VTAwNjc+CislIExBVElOIENBUElUQUwgTEVUVEVSIEggV0lUSCBET1QgQUJPVkUKKzxVMUUyMj4gPFUwMDQ4PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgSCBXSVRIIERPVCBBQk9WRQorPFUxRTIzPiA8VTAwNjg+CislIExBVElOIENBUElUQUwgTEVUVEVSIEggV0lUSCBET1QgQkVMT1cKKzxVMUUyND4gPFUwMDQ4PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgSCBXSVRIIERPVCBCRUxPVworPFUxRTI1PiA8VTAwNjg+CislIExBVElOIENBUElUQUwgTEVUVEVSIEggV0lUSCBESUFFUkVTSVMKKzxVMUUyNj4gPFUwMDQ4PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgSCBXSVRIIERJQUVSRVNJUworPFUxRTI3PiA8VTAwNjg+CislIExBVElOIENBUElUQUwgTEVUVEVSIEggV0lUSCBDRURJTExBCis8VTFFMjg+IDxVMDA0OD4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEggV0lUSCBDRURJTExBCis8VTFFMjk+IDxVMDA2OD4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSCBXSVRIIEJSRVZFIEJFTE9XCis8VTFFMkE+IDxVMDA0OD4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEggV0lUSCBCUkVWRSBCRUxPVworPFUxRTJCPiA8VTAwNjg+CislIExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBUSUxERSBCRUxPVworPFUxRTJDPiA8VTAwNDk+CislIExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggVElMREUgQkVMT1cKKzxVMUUyRD4gPFUwMDY5PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTIEFORCBBQ1VURQorPFUxRTJFPiA8VTAwNDk+CislIExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTIEFORCBBQ1VURQorPFUxRTJGPiA8VTAwNjk+CislIExBVElOIENBUElUQUwgTEVUVEVSIEsgV0lUSCBBQ1VURQorPFUxRTMwPiA8VTAwNEI+CislIExBVElOIFNNQUxMIExFVFRFUiBLIFdJVEggQUNVVEUKKzxVMUUzMT4gPFUwMDZCPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBLIFdJVEggRE9UIEJFTE9XCis8VTFFMzI+IDxVMDA0Qj4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEsgV0lUSCBET1QgQkVMT1cKKzxVMUUzMz4gPFUwMDZCPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBLIFdJVEggTElORSBCRUxPVworPFUxRTM0PiA8VTAwNEI+CislIExBVElOIFNNQUxMIExFVFRFUiBLIFdJVEggTElORSBCRUxPVworPFUxRTM1PiA8VTAwNkI+CislIExBVElOIENBUElUQUwgTEVUVEVSIEwgV0lUSCBET1QgQkVMT1cKKzxVMUUzNj4gPFUwMDRDPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgTCBXSVRIIERPVCBCRUxPVworPFUxRTM3PiA8VTAwNkM+CislIExBVElOIENBUElUQUwgTEVUVEVSIEwgV0lUSCBET1QgQkVMT1cgQU5EIE1BQ1JPTgorPFUxRTM4PiA8VTAwNEM+CislIExBVElOIFNNQUxMIExFVFRFUiBMIFdJVEggRE9UIEJFTE9XIEFORCBNQUNST04KKzxVMUUzOT4gPFUwMDZDPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBMIFdJVEggTElORSBCRUxPVworPFUxRTNBPiA8VTAwNEM+CislIExBVElOIFNNQUxMIExFVFRFUiBMIFdJVEggTElORSBCRUxPVworPFUxRTNCPiA8VTAwNkM+CislIExBVElOIENBUElUQUwgTEVUVEVSIEwgV0lUSCBDSVJDVU1GTEVYIEJFTE9XCis8VTFFM0M+IDxVMDA0Qz4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEwgV0lUSCBDSVJDVU1GTEVYIEJFTE9XCis8VTFFM0Q+IDxVMDA2Qz4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTSBXSVRIIEFDVVRFCis8VTFFM0U+IDxVMDA0RD4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIE0gV0lUSCBBQ1VURQorPFUxRTNGPiA8VTAwNkQ+CislIExBVElOIENBUElUQUwgTEVUVEVSIE0gV0lUSCBET1QgQUJPVkUKKzxVMUU0MD4gPFUwMDREPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgTSBXSVRIIERPVCBBQk9WRQorPFUxRTQxPiA8VTAwNkQ+CislIExBVElOIENBUElUQUwgTEVUVEVSIE0gV0lUSCBET1QgQkVMT1cKKzxVMUU0Mj4gPFUwMDREPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgTSBXSVRIIERPVCBCRUxPVworPFUxRTQzPiA8VTAwNkQ+CislIExBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBET1QgQUJPVkUKKzxVMUU0ND4gPFUwMDRFPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIERPVCBBQk9WRQorPFUxRTQ1PiA8VTAwNkU+CislIExBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBET1QgQkVMT1cKKzxVMUU0Nj4gPFUwMDRFPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIERPVCBCRUxPVworPFUxRTQ3PiA8VTAwNkU+CislIExBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBMSU5FIEJFTE9XCis8VTFFNDg+IDxVMDA0RT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBMSU5FIEJFTE9XCis8VTFFNDk+IDxVMDA2RT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIENJUkNVTUZMRVggQkVMT1cKKzxVMUU0QT4gPFUwMDRFPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIENJUkNVTUZMRVggQkVMT1cKKzxVMUU0Qj4gPFUwMDZFPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggVElMREUgQU5EIEFDVVRFCis8VTFFNEM+IDxVMDA0Rj4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBUSUxERSBBTkQgQUNVVEUKKzxVMUU0RD4gPFUwMDZGPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggVElMREUgQU5EIERJQUVSRVNJUworPFUxRTRFPiA8VTAwNEY+CislIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggVElMREUgQU5EIERJQUVSRVNJUworPFUxRTRGPiA8VTAwNkY+CislIExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBNQUNST04gQU5EIEdSQVZFCis8VTFFNTA+IDxVMDA0Rj4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBNQUNST04gQU5EIEdSQVZFCis8VTFFNTE+IDxVMDA2Rj4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIE1BQ1JPTiBBTkQgQUNVVEUKKzxVMUU1Mj4gPFUwMDRGPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIE1BQ1JPTiBBTkQgQUNVVEUKKzxVMUU1Mz4gPFUwMDZGPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBQIFdJVEggQUNVVEUKKzxVMUU1ND4gPFUwMDUwPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgUCBXSVRIIEFDVVRFCis8VTFFNTU+IDxVMDA3MD4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUCBXSVRIIERPVCBBQk9WRQorPFUxRTU2PiA8VTAwNTA+CislIExBVElOIFNNQUxMIExFVFRFUiBQIFdJVEggRE9UIEFCT1ZFCis8VTFFNTc+IDxVMDA3MD4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUiBXSVRIIERPVCBBQk9WRQorPFUxRTU4PiA8VTAwNTI+CislIExBVElOIFNNQUxMIExFVFRFUiBSIFdJVEggRE9UIEFCT1ZFCis8VTFFNTk+IDxVMDA3Mj4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUiBXSVRIIERPVCBCRUxPVworPFUxRTVBPiA8VTAwNTI+CislIExBVElOIFNNQUxMIExFVFRFUiBSIFdJVEggRE9UIEJFTE9XCis8VTFFNUI+IDxVMDA3Mj4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUiBXSVRIIERPVCBCRUxPVyBBTkQgTUFDUk9OCis8VTFFNUM+IDxVMDA1Mj4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFIgV0lUSCBET1QgQkVMT1cgQU5EIE1BQ1JPTgorPFUxRTVEPiA8VTAwNzI+CislIExBVElOIENBUElUQUwgTEVUVEVSIFIgV0lUSCBMSU5FIEJFTE9XCis8VTFFNUU+IDxVMDA1Mj4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFIgV0lUSCBMSU5FIEJFTE9XCis8VTFFNUY+IDxVMDA3Mj4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUyBXSVRIIERPVCBBQk9WRQorPFUxRTYwPiA8VTAwNTM+CislIExBVElOIFNNQUxMIExFVFRFUiBTIFdJVEggRE9UIEFCT1ZFCis8VTFFNjE+IDxVMDA3Mz4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUyBXSVRIIERPVCBCRUxPVworPFUxRTYyPiA8VTAwNTM+CislIExBVElOIFNNQUxMIExFVFRFUiBTIFdJVEggRE9UIEJFTE9XCis8VTFFNjM+IDxVMDA3Mz4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUyBXSVRIIEFDVVRFIEFORCBET1QgQUJPVkUKKzxVMUU2ND4gPFUwMDUzPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgUyBXSVRIIEFDVVRFIEFORCBET1QgQUJPVkUKKzxVMUU2NT4gPFUwMDczPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBTIFdJVEggQ0FST04gQU5EIERPVCBBQk9WRQorPFUxRTY2PiA8VTAwNTM+CislIExBVElOIFNNQUxMIExFVFRFUiBTIFdJVEggQ0FST04gQU5EIERPVCBBQk9WRQorPFUxRTY3PiA8VTAwNzM+CislIExBVElOIENBUElUQUwgTEVUVEVSIFMgV0lUSCBET1QgQkVMT1cgQU5EIERPVCBBQk9WRQorPFUxRTY4PiA8VTAwNTM+CislIExBVElOIFNNQUxMIExFVFRFUiBTIFdJVEggRE9UIEJFTE9XIEFORCBET1QgQUJPVkUKKzxVMUU2OT4gPFUwMDczPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBUIFdJVEggRE9UIEFCT1ZFCis8VTFFNkE+IDxVMDA1ND4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFQgV0lUSCBET1QgQUJPVkUKKzxVMUU2Qj4gPFUwMDc0PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBUIFdJVEggRE9UIEJFTE9XCis8VTFFNkM+IDxVMDA1ND4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFQgV0lUSCBET1QgQkVMT1cKKzxVMUU2RD4gPFUwMDc0PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBUIFdJVEggTElORSBCRUxPVworPFUxRTZFPiA8VTAwNTQ+CislIExBVElOIFNNQUxMIExFVFRFUiBUIFdJVEggTElORSBCRUxPVworPFUxRTZGPiA8VTAwNzQ+CislIExBVElOIENBUElUQUwgTEVUVEVSIFQgV0lUSCBDSVJDVU1GTEVYIEJFTE9XCis8VTFFNzA+IDxVMDA1ND4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFQgV0lUSCBDSVJDVU1GTEVYIEJFTE9XCis8VTFFNzE+IDxVMDA3ND4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUyBCRUxPVworPFUxRTcyPiA8VTAwNTU+CislIExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTIEJFTE9XCis8VTFFNzM+IDxVMDA3NT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIFRJTERFIEJFTE9XCis8VTFFNzQ+IDxVMDA1NT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBUSUxERSBCRUxPVworPFUxRTc1PiA8VTAwNzU+CislIExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYIEJFTE9XCis8VTFFNzY+IDxVMDA1NT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYIEJFTE9XCis8VTFFNzc+IDxVMDA3NT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIFRJTERFIEFORCBBQ1VURQorPFUxRTc4PiA8VTAwNTU+CislIExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggVElMREUgQU5EIEFDVVRFCis8VTFFNzk+IDxVMDA3NT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIE1BQ1JPTiBBTkQgRElBRVJFU0lTCis8VTFFN0E+IDxVMDA1NT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBNQUNST04gQU5EIERJQUVSRVNJUworPFUxRTdCPiA8VTAwNzU+CislIExBVElOIENBUElUQUwgTEVUVEVSIFYgV0lUSCBUSUxERQorPFUxRTdDPiA8VTAwNTY+CislIExBVElOIFNNQUxMIExFVFRFUiBWIFdJVEggVElMREUKKzxVMUU3RD4gPFUwMDc2PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBWIFdJVEggRE9UIEJFTE9XCis8VTFFN0U+IDxVMDA1Nj4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFYgV0lUSCBET1QgQkVMT1cKKzxVMUU3Rj4gPFUwMDc2PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBXIFdJVEggR1JBVkUKKzxVMUU4MD4gPFUwMDU3PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgVyBXSVRIIEdSQVZFCis8VTFFODE+IDxVMDA3Nz4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVyBXSVRIIEFDVVRFCis8VTFFODI+IDxVMDA1Nz4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFcgV0lUSCBBQ1VURQorPFUxRTgzPiA8VTAwNzc+CislIExBVElOIENBUElUQUwgTEVUVEVSIFcgV0lUSCBESUFFUkVTSVMKKzxVMUU4ND4gPFUwMDU3PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgVyBXSVRIIERJQUVSRVNJUworPFUxRTg1PiA8VTAwNzc+CislIExBVElOIENBUElUQUwgTEVUVEVSIFcgV0lUSCBET1QgQUJPVkUKKzxVMUU4Nj4gPFUwMDU3PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgVyBXSVRIIERPVCBBQk9WRQorPFUxRTg3PiA8VTAwNzc+CislIExBVElOIENBUElUQUwgTEVUVEVSIFcgV0lUSCBET1QgQkVMT1cKKzxVMUU4OD4gPFUwMDU3PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgVyBXSVRIIERPVCBCRUxPVworPFUxRTg5PiA8VTAwNzc+CislIExBVElOIENBUElUQUwgTEVUVEVSIFggV0lUSCBET1QgQUJPVkUKKzxVMUU4QT4gPFUwMDU4PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgWCBXSVRIIERPVCBBQk9WRQorPFUxRThCPiA8VTAwNzg+CislIExBVElOIENBUElUQUwgTEVUVEVSIFggV0lUSCBESUFFUkVTSVMKKzxVMUU4Qz4gPFUwMDU4PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgWCBXSVRIIERJQUVSRVNJUworPFUxRThEPiA8VTAwNzg+CislIExBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBET1QgQUJPVkUKKzxVMUU4RT4gPFUwMDU5PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIERPVCBBQk9WRQorPFUxRThGPiA8VTAwNzk+CislIExBVElOIENBUElUQUwgTEVUVEVSIFogV0lUSCBDSVJDVU1GTEVYCis8VTFFOTA+IDxVMDA1QT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFogV0lUSCBDSVJDVU1GTEVYCis8VTFFOTE+IDxVMDA3QT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWiBXSVRIIERPVCBCRUxPVworPFUxRTkyPiA8VTAwNUE+CislIExBVElOIFNNQUxMIExFVFRFUiBaIFdJVEggRE9UIEJFTE9XCis8VTFFOTM+IDxVMDA3QT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWiBXSVRIIExJTkUgQkVMT1cKKzxVMUU5ND4gPFUwMDVBPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgWiBXSVRIIExJTkUgQkVMT1cKKzxVMUU5NT4gPFUwMDdBPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgSCBXSVRIIExJTkUgQkVMT1cKKzxVMUU5Nj4gPFUwMDY4PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgVCBXSVRIIERJQUVSRVNJUworPFUxRTk3PiA8VTAwNzQ+CislIExBVElOIFNNQUxMIExFVFRFUiBXIFdJVEggUklORyBBQk9WRQorPFUxRTk4PiA8VTAwNzc+CislIExBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggUklORyBBQk9WRQorPFUxRTk5PiA8VTAwNzk+CislIExBVElOIFNNQUxMIExFVFRFUiBMT05HIFMgV0lUSCBET1QgQUJPVkUKKzxVMUU5Qj4gPFUwMTdGPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggRE9UIEJFTE9XCis8VTFFQTA+IDxVMDA0MT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBET1QgQkVMT1cKKzxVMUVBMT4gPFUwMDYxPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggSE9PSyBBQk9WRQorPFUxRUEyPiA8VTAwNDE+CislIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggSE9PSyBBQk9WRQorPFUxRUEzPiA8VTAwNjE+CislIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYIEFORCBBQ1VURQorPFUxRUE0PiA8VTAwNDE+CislIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWCBBTkQgQUNVVEUKKzxVMUVBNT4gPFUwMDYxPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWCBBTkQgR1JBVkUKKzxVMUVBNj4gPFUwMDQxPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVggQU5EIEdSQVZFCis8VTFFQTc+IDxVMDA2MT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVggQU5EIEhPT0sgQUJPVkUKKzxVMUVBOD4gPFUwMDQxPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVggQU5EIEhPT0sgQUJPVkUKKzxVMUVBOT4gPFUwMDYxPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWCBBTkQgVElMREUKKzxVMUVBQT4gPFUwMDQxPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVggQU5EIFRJTERFCis8VTFFQUI+IDxVMDA2MT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVggQU5EIERPVCBCRUxPVworPFUxRUFDPiA8VTAwNDE+CislIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWCBBTkQgRE9UIEJFTE9XCis8VTFFQUQ+IDxVMDA2MT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEJSRVZFIEFORCBBQ1VURQorPFUxRUFFPiA8VTAwNDE+CislIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQlJFVkUgQU5EIEFDVVRFCis8VTFFQUY+IDxVMDA2MT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEJSRVZFIEFORCBHUkFWRQorPFUxRUIwPiA8VTAwNDE+CislIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQlJFVkUgQU5EIEdSQVZFCis8VTFFQjE+IDxVMDA2MT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEJSRVZFIEFORCBIT09LIEFCT1ZFCis8VTFFQjI+IDxVMDA0MT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBCUkVWRSBBTkQgSE9PSyBBQk9WRQorPFUxRUIzPiA8VTAwNjE+CislIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBCUkVWRSBBTkQgVElMREUKKzxVMUVCND4gPFUwMDQxPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEJSRVZFIEFORCBUSUxERQorPFUxRUI1PiA8VTAwNjE+CislIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBCUkVWRSBBTkQgRE9UIEJFTE9XCis8VTFFQjY+IDxVMDA0MT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBCUkVWRSBBTkQgRE9UIEJFTE9XCis8VTFFQjc+IDxVMDA2MT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIERPVCBCRUxPVworPFUxRUI4PiA8VTAwNDU+CislIExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggRE9UIEJFTE9XCis8VTFFQjk+IDxVMDA2NT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEhPT0sgQUJPVkUKKzxVMUVCQT4gPFUwMDQ1PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEhPT0sgQUJPVkUKKzxVMUVCQj4gPFUwMDY1PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggVElMREUKKzxVMUVCQz4gPFUwMDQ1PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIFRJTERFCis8VTFFQkQ+IDxVMDA2NT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVggQU5EIEFDVVRFCis8VTFFQkU+IDxVMDA0NT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYIEFORCBBQ1VURQorPFUxRUJGPiA8VTAwNjU+CislIExBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYIEFORCBHUkFWRQorPFUxRUMwPiA8VTAwNDU+CislIExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWCBBTkQgR1JBVkUKKzxVMUVDMT4gPFUwMDY1PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWCBBTkQgSE9PSyBBQk9WRQorPFUxRUMyPiA8VTAwNDU+CislIExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWCBBTkQgSE9PSyBBQk9WRQorPFUxRUMzPiA8VTAwNjU+CislIExBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYIEFORCBUSUxERQorPFUxRUM0PiA8VTAwNDU+CislIExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWCBBTkQgVElMREUKKzxVMUVDNT4gPFUwMDY1PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWCBBTkQgRE9UIEJFTE9XCis8VTFFQzY+IDxVMDA0NT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYIEFORCBET1QgQkVMT1cKKzxVMUVDNz4gPFUwMDY1PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggSE9PSyBBQk9WRQorPFUxRUM4PiA8VTAwNDk+CislIExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggSE9PSyBBQk9WRQorPFUxRUM5PiA8VTAwNjk+CislIExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBET1QgQkVMT1cKKzxVMUVDQT4gPFUwMDQ5PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIERPVCBCRUxPVworPFUxRUNCPiA8VTAwNjk+CislIExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBET1QgQkVMT1cKKzxVMUVDQz4gPFUwMDRGPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIERPVCBCRUxPVworPFUxRUNEPiA8VTAwNkY+CislIExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBIT09LIEFCT1ZFCis8VTFFQ0U+IDxVMDA0Rj4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBIT09LIEFCT1ZFCis8VTFFQ0Y+IDxVMDA2Rj4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVggQU5EIEFDVVRFCis8VTFFRDA+IDxVMDA0Rj4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYIEFORCBBQ1VURQorPFUxRUQxPiA8VTAwNkY+CislIExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYIEFORCBHUkFWRQorPFUxRUQyPiA8VTAwNEY+CislIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWCBBTkQgR1JBVkUKKzxVMUVEMz4gPFUwMDZGPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWCBBTkQgSE9PSyBBQk9WRQorPFUxRUQ0PiA8VTAwNEY+CislIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWCBBTkQgSE9PSyBBQk9WRQorPFUxRUQ1PiA8VTAwNkY+CislIExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYIEFORCBUSUxERQorPFUxRUQ2PiA8VTAwNEY+CislIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWCBBTkQgVElMREUKKzxVMUVENz4gPFUwMDZGPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWCBBTkQgRE9UIEJFTE9XCis8VTFFRDg+IDxVMDA0Rj4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYIEFORCBET1QgQkVMT1cKKzxVMUVEOT4gPFUwMDZGPgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggSE9STiBBTkQgQUNVVEUKKzxVMUVEQT4gPFUwMDRGPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEhPUk4gQU5EIEFDVVRFCis8VTFFREI+IDxVMDA2Rj4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEhPUk4gQU5EIEdSQVZFCis8VTFFREM+IDxVMDA0Rj4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBIT1JOIEFORCBHUkFWRQorPFUxRUREPiA8VTAwNkY+CislIExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBIT1JOIEFORCBIT09LIEFCT1ZFCis8VTFFREU+IDxVMDA0Rj4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBIT1JOIEFORCBIT09LIEFCT1ZFCis8VTFFREY+IDxVMDA2Rj4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEhPUk4gQU5EIFRJTERFCis8VTFFRTA+IDxVMDA0Rj4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBIT1JOIEFORCBUSUxERQorPFUxRUUxPiA8VTAwNkY+CislIExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBIT1JOIEFORCBET1QgQkVMT1cKKzxVMUVFMj4gPFUwMDRGPgorJSBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEhPUk4gQU5EIERPVCBCRUxPVworPFUxRUUzPiA8VTAwNkY+CislIExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBET1QgQkVMT1cKKzxVMUVFND4gPFUwMDU1PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERPVCBCRUxPVworPFUxRUU1PiA8VTAwNzU+CislIExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBIT09LIEFCT1ZFCis8VTFFRTY+IDxVMDA1NT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBIT09LIEFCT1ZFCis8VTFFRTc+IDxVMDA3NT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEhPUk4gQU5EIEFDVVRFCis8VTFFRTg+IDxVMDA1NT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBIT1JOIEFORCBBQ1VURQorPFUxRUU5PiA8VTAwNzU+CislIExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBIT1JOIEFORCBHUkFWRQorPFUxRUVBPiA8VTAwNTU+CislIExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggSE9STiBBTkQgR1JBVkUKKzxVMUVFQj4gPFUwMDc1PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggSE9STiBBTkQgSE9PSyBBQk9WRQorPFUxRUVDPiA8VTAwNTU+CislIExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggSE9STiBBTkQgSE9PSyBBQk9WRQorPFUxRUVEPiA8VTAwNzU+CislIExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBIT1JOIEFORCBUSUxERQorPFUxRUVFPiA8VTAwNTU+CislIExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggSE9STiBBTkQgVElMREUKKzxVMUVFRj4gPFUwMDc1PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggSE9STiBBTkQgRE9UIEJFTE9XCis8VTFFRjA+IDxVMDA1NT4KKyUgTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBIT1JOIEFORCBET1QgQkVMT1cKKzxVMUVGMT4gPFUwMDc1PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggR1JBVkUKKzxVMUVGMj4gPFUwMDU5PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEdSQVZFCis8VTFFRjM+IDxVMDA3OT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIERPVCBCRUxPVworPFUxRUY0PiA8VTAwNTk+CislIExBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggRE9UIEJFTE9XCis8VTFFRjU+IDxVMDA3OT4KKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIEhPT0sgQUJPVkUKKzxVMUVGNj4gPFUwMDU5PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEhPT0sgQUJPVkUKKzxVMUVGNz4gPFUwMDc5PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggVElMREUKKzxVMUVGOD4gPFUwMDU5PgorJSBMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIFRJTERFCis8VTFFRjk+IDxVMDA3OT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggUFNJTEkKKzxVMUYwMD4gPFUwM0IxPgorJSBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBEQVNJQQorPFUxRjAxPiA8VTAzQjE+CislIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIFBTSUxJIEFORCBWQVJJQQorPFUxRjAyPiA8VTAzQjE+CislIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIERBU0lBIEFORCBWQVJJQQorPFUxRjAzPiA8VTAzQjE+CislIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIFBTSUxJIEFORCBPWElBCis8VTFGMDQ+IDxVMDNCMT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUEgQU5EIE9YSUEKKzxVMUYwNT4gPFUwM0IxPgorJSBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSSBBTkQgUEVSSVNQT01FTkkKKzxVMUYwNj4gPFUwM0IxPgorJSBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBEQVNJQSBBTkQgUEVSSVNQT01FTkkKKzxVMUYwNz4gPFUwM0IxPgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIFBTSUxJCis8VTFGMDg+IDxVMDM5MT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBEQVNJQQorPFUxRjA5PiA8VTAzOTE+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggUFNJTEkgQU5EIFZBUklBCis8VTFGMEE+IDxVMDM5MT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBEQVNJQSBBTkQgVkFSSUEKKzxVMUYwQj4gPFUwMzkxPgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIFBTSUxJIEFORCBPWElBCis8VTFGMEM+IDxVMDM5MT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBEQVNJQSBBTkQgT1hJQQorPFUxRjBEPiA8VTAzOTE+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggUFNJTEkgQU5EIFBFUklTUE9NRU5JCis8VTFGMEU+IDxVMDM5MT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBEQVNJQSBBTkQgUEVSSVNQT01FTkkKKzxVMUYwRj4gPFUwMzkxPgorJSBHUkVFSyBTTUFMTCBMRVRURVIgRVBTSUxPTiBXSVRIIFBTSUxJCis8VTFGMTA+IDxVMDNCNT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIEVQU0lMT04gV0lUSCBEQVNJQQorPFUxRjExPiA8VTAzQjU+CislIEdSRUVLIFNNQUxMIExFVFRFUiBFUFNJTE9OIFdJVEggUFNJTEkgQU5EIFZBUklBCis8VTFGMTI+IDxVMDNCNT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIEVQU0lMT04gV0lUSCBEQVNJQSBBTkQgVkFSSUEKKzxVMUYxMz4gPFUwM0I1PgorJSBHUkVFSyBTTUFMTCBMRVRURVIgRVBTSUxPTiBXSVRIIFBTSUxJIEFORCBPWElBCis8VTFGMTQ+IDxVMDNCNT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIEVQU0lMT04gV0lUSCBEQVNJQSBBTkQgT1hJQQorPFUxRjE1PiA8VTAzQjU+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIEVQU0lMT04gV0lUSCBQU0lMSQorPFUxRjE4PiA8VTAzOTU+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIEVQU0lMT04gV0lUSCBEQVNJQQorPFUxRjE5PiA8VTAzOTU+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIEVQU0lMT04gV0lUSCBQU0lMSSBBTkQgVkFSSUEKKzxVMUYxQT4gPFUwMzk1PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBFUFNJTE9OIFdJVEggREFTSUEgQU5EIFZBUklBCis8VTFGMUI+IDxVMDM5NT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVBTSUxPTiBXSVRIIFBTSUxJIEFORCBPWElBCis8VTFGMUM+IDxVMDM5NT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVBTSUxPTiBXSVRIIERBU0lBIEFORCBPWElBCis8VTFGMUQ+IDxVMDM5NT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJCis8VTFGMjA+IDxVMDNCNz4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIERBU0lBCis8VTFGMjE+IDxVMDNCNz4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJIEFORCBWQVJJQQorPFUxRjIyPiA8VTAzQjc+CislIEdSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBEQVNJQSBBTkQgVkFSSUEKKzxVMUYyMz4gPFUwM0I3PgorJSBHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggUFNJTEkgQU5EIE9YSUEKKzxVMUYyND4gPFUwM0I3PgorJSBHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggREFTSUEgQU5EIE9YSUEKKzxVMUYyNT4gPFUwM0I3PgorJSBHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggUFNJTEkgQU5EIFBFUklTUE9NRU5JCis8VTFGMjY+IDxVMDNCNz4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIERBU0lBIEFORCBQRVJJU1BPTUVOSQorPFUxRjI3PiA8VTAzQjc+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJCis8VTFGMjg+IDxVMDM5Nz4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggREFTSUEKKzxVMUYyOT4gPFUwMzk3PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBQU0lMSSBBTkQgVkFSSUEKKzxVMUYyQT4gPFUwMzk3PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBEQVNJQSBBTkQgVkFSSUEKKzxVMUYyQj4gPFUwMzk3PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBQU0lMSSBBTkQgT1hJQQorPFUxRjJDPiA8VTAzOTc+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIERBU0lBIEFORCBPWElBCis8VTFGMkQ+IDxVMDM5Nz4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggUFNJTEkgQU5EIFBFUklTUE9NRU5JCis8VTFGMkU+IDxVMDM5Nz4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggREFTSUEgQU5EIFBFUklTUE9NRU5JCis8VTFGMkY+IDxVMDM5Nz4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIElPVEEgV0lUSCBQU0lMSQorPFUxRjMwPiA8VTAzQjk+CislIEdSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggREFTSUEKKzxVMUYzMT4gPFUwM0I5PgorJSBHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIFBTSUxJIEFORCBWQVJJQQorPFUxRjMyPiA8VTAzQjk+CislIEdSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggREFTSUEgQU5EIFZBUklBCis8VTFGMzM+IDxVMDNCOT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIElPVEEgV0lUSCBQU0lMSSBBTkQgT1hJQQorPFUxRjM0PiA8VTAzQjk+CislIEdSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggREFTSUEgQU5EIE9YSUEKKzxVMUYzNT4gPFUwM0I5PgorJSBHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIFBTSUxJIEFORCBQRVJJU1BPTUVOSQorPFUxRjM2PiA8VTAzQjk+CislIEdSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggREFTSUEgQU5EIFBFUklTUE9NRU5JCis8VTFGMzc+IDxVMDNCOT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBXSVRIIFBTSUxJCis8VTFGMzg+IDxVMDM5OT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBXSVRIIERBU0lBCis8VTFGMzk+IDxVMDM5OT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBXSVRIIFBTSUxJIEFORCBWQVJJQQorPFUxRjNBPiA8VTAzOTk+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIElPVEEgV0lUSCBEQVNJQSBBTkQgVkFSSUEKKzxVMUYzQj4gPFUwMzk5PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBJT1RBIFdJVEggUFNJTEkgQU5EIE9YSUEKKzxVMUYzQz4gPFUwMzk5PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBJT1RBIFdJVEggREFTSUEgQU5EIE9YSUEKKzxVMUYzRD4gPFUwMzk5PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBJT1RBIFdJVEggUFNJTEkgQU5EIFBFUklTUE9NRU5JCis8VTFGM0U+IDxVMDM5OT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBXSVRIIERBU0lBIEFORCBQRVJJU1BPTUVOSQorPFUxRjNGPiA8VTAzOTk+CislIEdSRUVLIFNNQUxMIExFVFRFUiBPTUlDUk9OIFdJVEggUFNJTEkKKzxVMUY0MD4gPFUwM0JGPgorJSBHUkVFSyBTTUFMTCBMRVRURVIgT01JQ1JPTiBXSVRIIERBU0lBCis8VTFGNDE+IDxVMDNCRj4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIE9NSUNST04gV0lUSCBQU0lMSSBBTkQgVkFSSUEKKzxVMUY0Mj4gPFUwM0JGPgorJSBHUkVFSyBTTUFMTCBMRVRURVIgT01JQ1JPTiBXSVRIIERBU0lBIEFORCBWQVJJQQorPFUxRjQzPiA8VTAzQkY+CislIEdSRUVLIFNNQUxMIExFVFRFUiBPTUlDUk9OIFdJVEggUFNJTEkgQU5EIE9YSUEKKzxVMUY0ND4gPFUwM0JGPgorJSBHUkVFSyBTTUFMTCBMRVRURVIgT01JQ1JPTiBXSVRIIERBU0lBIEFORCBPWElBCis8VTFGNDU+IDxVMDNCRj4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01JQ1JPTiBXSVRIIFBTSUxJCis8VTFGNDg+IDxVMDM5Rj4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01JQ1JPTiBXSVRIIERBU0lBCis8VTFGNDk+IDxVMDM5Rj4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01JQ1JPTiBXSVRIIFBTSUxJIEFORCBWQVJJQQorPFUxRjRBPiA8VTAzOUY+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIE9NSUNST04gV0lUSCBEQVNJQSBBTkQgVkFSSUEKKzxVMUY0Qj4gPFUwMzlGPgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUlDUk9OIFdJVEggUFNJTEkgQU5EIE9YSUEKKzxVMUY0Qz4gPFUwMzlGPgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUlDUk9OIFdJVEggREFTSUEgQU5EIE9YSUEKKzxVMUY0RD4gPFUwMzlGPgorJSBHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIFBTSUxJCis8VTFGNTA+IDxVMDNDNT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBEQVNJQQorPFUxRjUxPiA8VTAzQzU+CislIEdSRUVLIFNNQUxMIExFVFRFUiBVUFNJTE9OIFdJVEggUFNJTEkgQU5EIFZBUklBCis8VTFGNTI+IDxVMDNDNT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBEQVNJQSBBTkQgVkFSSUEKKzxVMUY1Mz4gPFUwM0M1PgorJSBHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIFBTSUxJIEFORCBPWElBCis8VTFGNTQ+IDxVMDNDNT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBEQVNJQSBBTkQgT1hJQQorPFUxRjU1PiA8VTAzQzU+CislIEdSRUVLIFNNQUxMIExFVFRFUiBVUFNJTE9OIFdJVEggUFNJTEkgQU5EIFBFUklTUE9NRU5JCis8VTFGNTY+IDxVMDNDNT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBEQVNJQSBBTkQgUEVSSVNQT01FTkkKKzxVMUY1Nz4gPFUwM0M1PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBVUFNJTE9OIFdJVEggREFTSUEKKzxVMUY1OT4gPFUwM0E1PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBVUFNJTE9OIFdJVEggREFTSUEgQU5EIFZBUklBCis8VTFGNUI+IDxVMDNBNT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgVVBTSUxPTiBXSVRIIERBU0lBIEFORCBPWElBCis8VTFGNUQ+IDxVMDNBNT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgVVBTSUxPTiBXSVRIIERBU0lBIEFORCBQRVJJU1BPTUVOSQorPFUxRjVGPiA8VTAzQTU+CislIEdSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJCis8VTFGNjA+IDxVMDNDOT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggREFTSUEKKzxVMUY2MT4gPFUwM0M5PgorJSBHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBQU0lMSSBBTkQgVkFSSUEKKzxVMUY2Mj4gPFUwM0M5PgorJSBHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQSBBTkQgVkFSSUEKKzxVMUY2Mz4gPFUwM0M5PgorJSBHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBQU0lMSSBBTkQgT1hJQQorPFUxRjY0PiA8VTAzQzk+CislIEdSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIERBU0lBIEFORCBPWElBCis8VTFGNjU+IDxVMDNDOT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggUFNJTEkgQU5EIFBFUklTUE9NRU5JCis8VTFGNjY+IDxVMDNDOT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggREFTSUEgQU5EIFBFUklTUE9NRU5JCis8VTFGNjc+IDxVMDNDOT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBQU0lMSQorPFUxRjY4PiA8VTAzQTk+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBIFdJVEggREFTSUEKKzxVMUY2OT4gPFUwM0E5PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBWQVJJQQorPFUxRjZBPiA8VTAzQTk+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBIFdJVEggREFTSUEgQU5EIFZBUklBCis8VTFGNkI+IDxVMDNBOT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBQU0lMSSBBTkQgT1hJQQorPFUxRjZDPiA8VTAzQTk+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBIFdJVEggREFTSUEgQU5EIE9YSUEKKzxVMUY2RD4gPFUwM0E5PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBQRVJJU1BPTUVOSQorPFUxRjZFPiA8VTAzQTk+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBIFdJVEggREFTSUEgQU5EIFBFUklTUE9NRU5JCis8VTFGNkY+IDxVMDNBOT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggVkFSSUEKKzxVMUY3MD4gPFUwM0IxPgorJSBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBPWElBCis8VTFGNzE+IDxVMDNCMT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIEVQU0lMT04gV0lUSCBWQVJJQQorPFUxRjcyPiA8VTAzQjU+CislIEdSRUVLIFNNQUxMIExFVFRFUiBFUFNJTE9OIFdJVEggT1hJQQorPFUxRjczPiA8VTAzQjU+CislIEdSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBWQVJJQQorPFUxRjc0PiA8VTAzQjc+CislIEdSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBPWElBCis8VTFGNzU+IDxVMDNCNz4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIElPVEEgV0lUSCBWQVJJQQorPFUxRjc2PiA8VTAzQjk+CislIEdSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggT1hJQQorPFUxRjc3PiA8VTAzQjk+CislIEdSRUVLIFNNQUxMIExFVFRFUiBPTUlDUk9OIFdJVEggVkFSSUEKKzxVMUY3OD4gPFUwM0JGPgorJSBHUkVFSyBTTUFMTCBMRVRURVIgT01JQ1JPTiBXSVRIIE9YSUEKKzxVMUY3OT4gPFUwM0JGPgorJSBHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIFZBUklBCis8VTFGN0E+IDxVMDNDNT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBPWElBCis8VTFGN0I+IDxVMDNDNT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggVkFSSUEKKzxVMUY3Qz4gPFUwM0M5PgorJSBHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBPWElBCis8VTFGN0Q+IDxVMDNDOT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggUFNJTEkgQU5EIFlQT0dFR1JBTU1FTkkKKzxVMUY4MD4gPFUwM0IxPgorJSBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBEQVNJQSBBTkQgWVBPR0VHUkFNTUVOSQorPFUxRjgxPiA8VTAzQjE+CislIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIFBTSUxJIEFORCBWQVJJQSBBTkQgWVBPR0VHUkFNTUVOSQorPFUxRjgyPiA8VTAzQjE+CislIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIERBU0lBIEFORCBWQVJJQSBBTkQgWVBPR0VHUkFNTUVOSQorPFUxRjgzPiA8VTAzQjE+CislIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIFBTSUxJIEFORCBPWElBIEFORCBZUE9HRUdSQU1NRU5JCis8VTFGODQ+IDxVMDNCMT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUEgQU5EIE9YSUEgQU5EIFlQT0dFR1JBTU1FTkkKKzxVMUY4NT4gPFUwM0IxPgorJSBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSSBBTkQgUEVSSVNQT01FTkkgQU5EIFlQT0dFR1JBTU1FTkkKKzxVMUY4Nj4gPFUwM0IxPgorJSBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBEQVNJQSBBTkQgUEVSSVNQT01FTkkgQU5EIFlQT0dFR1JBTU1FTkkKKzxVMUY4Nz4gPFUwM0IxPgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIFBTSUxJIEFORCBQUk9TR0VHUkFNTUVOSQorPFUxRjg4PiA8VTAzOTE+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUEgQU5EIFBST1NHRUdSQU1NRU5JCis8VTFGODk+IDxVMDM5MT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSSBBTkQgVkFSSUEgQU5EIFBST1NHRUdSQU1NRU5JCis8VTFGOEE+IDxVMDM5MT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBEQVNJQSBBTkQgVkFSSUEgQU5EIFBST1NHRUdSQU1NRU5JCis8VTFGOEI+IDxVMDM5MT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSSBBTkQgT1hJQSBBTkQgUFJPU0dFR1JBTU1FTkkKKzxVMUY4Qz4gPFUwMzkxPgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIERBU0lBIEFORCBPWElBIEFORCBQUk9TR0VHUkFNTUVOSQorPFUxRjhEPiA8VTAzOTE+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggUFNJTEkgQU5EIFBFUklTUE9NRU5JIEFORCBQUk9TR0VHUkFNTUVOSQorPFUxRjhFPiA8VTAzOTE+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUEgQU5EIFBFUklTUE9NRU5JIEFORCBQUk9TR0VHUkFNTUVOSQorPFUxRjhGPiA8VTAzOTE+CislIEdSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBQU0lMSSBBTkQgWVBPR0VHUkFNTUVOSQorPFUxRjkwPiA8VTAzQjc+CislIEdSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBEQVNJQSBBTkQgWVBPR0VHUkFNTUVOSQorPFUxRjkxPiA8VTAzQjc+CislIEdSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBQU0lMSSBBTkQgVkFSSUEgQU5EIFlQT0dFR1JBTU1FTkkKKzxVMUY5Mj4gPFUwM0I3PgorJSBHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggREFTSUEgQU5EIFZBUklBIEFORCBZUE9HRUdSQU1NRU5JCis8VTFGOTM+IDxVMDNCNz4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJIEFORCBPWElBIEFORCBZUE9HRUdSQU1NRU5JCis8VTFGOTQ+IDxVMDNCNz4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIERBU0lBIEFORCBPWElBIEFORCBZUE9HRUdSQU1NRU5JCis8VTFGOTU+IDxVMDNCNz4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJIEFORCBQRVJJU1BPTUVOSSBBTkQgWVBPR0VHUkFNTUVOSQorPFUxRjk2PiA8VTAzQjc+CislIEdSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBEQVNJQSBBTkQgUEVSSVNQT01FTkkgQU5EIFlQT0dFR1JBTU1FTkkKKzxVMUY5Nz4gPFUwM0I3PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBQU0lMSSBBTkQgUFJPU0dFR1JBTU1FTkkKKzxVMUY5OD4gPFUwMzk3PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBEQVNJQSBBTkQgUFJPU0dFR1JBTU1FTkkKKzxVMUY5OT4gPFUwMzk3PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBQU0lMSSBBTkQgVkFSSUEgQU5EIFBST1NHRUdSQU1NRU5JCis8VTFGOUE+IDxVMDM5Nz4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggREFTSUEgQU5EIFZBUklBIEFORCBQUk9TR0VHUkFNTUVOSQorPFUxRjlCPiA8VTAzOTc+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJIEFORCBPWElBIEFORCBQUk9TR0VHUkFNTUVOSQorPFUxRjlDPiA8VTAzOTc+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIERBU0lBIEFORCBPWElBIEFORCBQUk9TR0VHUkFNTUVOSQorPFUxRjlEPiA8VTAzOTc+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJIEFORCBQRVJJU1BPTUVOSSBBTkQgUFJPU0dFR1JBTU1FTkkKKzxVMUY5RT4gPFUwMzk3PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBEQVNJQSBBTkQgUEVSSVNQT01FTkkgQU5EIFBST1NHRUdSQU1NRU5JCis8VTFGOUY+IDxVMDM5Nz4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggUFNJTEkgQU5EIFlQT0dFR1JBTU1FTkkKKzxVMUZBMD4gPFUwM0M5PgorJSBHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQSBBTkQgWVBPR0VHUkFNTUVOSQorPFUxRkExPiA8VTAzQzk+CislIEdSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBWQVJJQSBBTkQgWVBPR0VHUkFNTUVOSQorPFUxRkEyPiA8VTAzQzk+CislIEdSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIERBU0lBIEFORCBWQVJJQSBBTkQgWVBPR0VHUkFNTUVOSQorPFUxRkEzPiA8VTAzQzk+CislIEdSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBPWElBIEFORCBZUE9HRUdSQU1NRU5JCis8VTFGQTQ+IDxVMDNDOT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggREFTSUEgQU5EIE9YSUEgQU5EIFlQT0dFR1JBTU1FTkkKKzxVMUZBNT4gPFUwM0M5PgorJSBHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBQU0lMSSBBTkQgUEVSSVNQT01FTkkgQU5EIFlQT0dFR1JBTU1FTkkKKzxVMUZBNj4gPFUwM0M5PgorJSBHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQSBBTkQgUEVSSVNQT01FTkkgQU5EIFlQT0dFR1JBTU1FTkkKKzxVMUZBNz4gPFUwM0M5PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBQUk9TR0VHUkFNTUVOSQorPFUxRkE4PiA8VTAzQTk+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBIFdJVEggREFTSUEgQU5EIFBST1NHRUdSQU1NRU5JCis8VTFGQTk+IDxVMDNBOT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBQU0lMSSBBTkQgVkFSSUEgQU5EIFBST1NHRUdSQU1NRU5JCis8VTFGQUE+IDxVMDNBOT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQSBBTkQgVkFSSUEgQU5EIFBST1NHRUdSQU1NRU5JCis8VTFGQUI+IDxVMDNBOT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBQU0lMSSBBTkQgT1hJQSBBTkQgUFJPU0dFR1JBTU1FTkkKKzxVMUZBQz4gPFUwM0E5PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIERBU0lBIEFORCBPWElBIEFORCBQUk9TR0VHUkFNTUVOSQorPFUxRkFEPiA8VTAzQTk+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBIFdJVEggUFNJTEkgQU5EIFBFUklTUE9NRU5JIEFORCBQUk9TR0VHUkFNTUVOSQorPFUxRkFFPiA8VTAzQTk+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBIFdJVEggREFTSUEgQU5EIFBFUklTUE9NRU5JIEFORCBQUk9TR0VHUkFNTUVOSQorPFUxRkFGPiA8VTAzQTk+CislIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIFZSQUNIWQorPFUxRkIwPiA8VTAzQjE+CislIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIE1BQ1JPTgorPFUxRkIxPiA8VTAzQjE+CislIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIFZBUklBIEFORCBZUE9HRUdSQU1NRU5JCis8VTFGQjI+IDxVMDNCMT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggWVBPR0VHUkFNTUVOSQorPFUxRkIzPiA8VTAzQjE+CislIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIE9YSUEgQU5EIFlQT0dFR1JBTU1FTkkKKzxVMUZCND4gPFUwM0IxPgorJSBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBQRVJJU1BPTUVOSQorPFUxRkI2PiA8VTAzQjE+CislIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIFBFUklTUE9NRU5JIEFORCBZUE9HRUdSQU1NRU5JCis8VTFGQjc+IDxVMDNCMT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBWUkFDSFkKKzxVMUZCOD4gPFUwMzkxPgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIE1BQ1JPTgorPFUxRkI5PiA8VTAzOTE+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggVkFSSUEKKzxVMUZCQT4gPFUwMzkxPgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIE9YSUEKKzxVMUZCQj4gPFUwMzkxPgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIFBST1NHRUdSQU1NRU5JCis8VTFGQkM+IDxVMDM5MT4KKyUgR1JFRUsgUFJPU0dFR1JBTU1FTkkKKzxVMUZCRT4gPFUwM0I5PgorJSBHUkVFSyBESUFMWVRJS0EgQU5EIFBFUklTUE9NRU5JCis8VTFGQzE+IDxVMDBBOD4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFZBUklBIEFORCBZUE9HRUdSQU1NRU5JCis8VTFGQzI+IDxVMDNCNz4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFlQT0dFR1JBTU1FTkkKKzxVMUZDMz4gPFUwM0I3PgorJSBHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggT1hJQSBBTkQgWVBPR0VHUkFNTUVOSQorPFUxRkM0PiA8VTAzQjc+CislIEdSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBQRVJJU1BPTUVOSQorPFUxRkM2PiA8VTAzQjc+CislIEdSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBQRVJJU1BPTUVOSSBBTkQgWVBPR0VHUkFNTUVOSQorPFUxRkM3PiA8VTAzQjc+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIEVQU0lMT04gV0lUSCBWQVJJQQorPFUxRkM4PiA8VTAzOTU+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIEVQU0lMT04gV0lUSCBPWElBCis8VTFGQzk+IDxVMDM5NT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggVkFSSUEKKzxVMUZDQT4gPFUwMzk3PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBPWElBCis8VTFGQ0I+IDxVMDM5Nz4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggUFJPU0dFR1JBTU1FTkkKKzxVMUZDQz4gPFUwMzk3PgorJSBHUkVFSyBQU0lMSSBBTkQgVkFSSUEKKzxVMUZDRD4gPFUxRkJGPgorJSBHUkVFSyBQU0lMSSBBTkQgT1hJQQorPFUxRkNFPiA8VTFGQkY+CislIEdSRUVLIFBTSUxJIEFORCBQRVJJU1BPTUVOSQorPFUxRkNGPiA8VTFGQkY+CislIEdSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggVlJBQ0hZCis8VTFGRDA+IDxVMDNCOT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIElPVEEgV0lUSCBNQUNST04KKzxVMUZEMT4gPFUwM0I5PgorJSBHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIERJQUxZVElLQSBBTkQgVkFSSUEKKzxVMUZEMj4gPFUwM0I5PgorJSBHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIERJQUxZVElLQSBBTkQgT1hJQQorPFUxRkQzPiA8VTAzQjk+CislIEdSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggUEVSSVNQT01FTkkKKzxVMUZENj4gPFUwM0I5PgorJSBHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIERJQUxZVElLQSBBTkQgUEVSSVNQT01FTkkKKzxVMUZENz4gPFUwM0I5PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBJT1RBIFdJVEggVlJBQ0hZCis8VTFGRDg+IDxVMDM5OT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBXSVRIIE1BQ1JPTgorPFUxRkQ5PiA8VTAzOTk+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIElPVEEgV0lUSCBWQVJJQQorPFUxRkRBPiA8VTAzOTk+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIElPVEEgV0lUSCBPWElBCis8VTFGREI+IDxVMDM5OT4KKyUgR1JFRUsgREFTSUEgQU5EIFZBUklBCis8VTFGREQ+IDxVMUZGRT4KKyUgR1JFRUsgREFTSUEgQU5EIE9YSUEKKzxVMUZERT4gPFUxRkZFPgorJSBHUkVFSyBEQVNJQSBBTkQgUEVSSVNQT01FTkkKKzxVMUZERj4gPFUxRkZFPgorJSBHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIFZSQUNIWQorPFUxRkUwPiA8VTAzQzU+CislIEdSRUVLIFNNQUxMIExFVFRFUiBVUFNJTE9OIFdJVEggTUFDUk9OCis8VTFGRTE+IDxVMDNDNT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBESUFMWVRJS0EgQU5EIFZBUklBCis8VTFGRTI+IDxVMDNDNT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBESUFMWVRJS0EgQU5EIE9YSUEKKzxVMUZFMz4gPFUwM0M1PgorJSBHUkVFSyBTTUFMTCBMRVRURVIgUkhPIFdJVEggUFNJTEkKKzxVMUZFND4gPFUwM0MxPgorJSBHUkVFSyBTTUFMTCBMRVRURVIgUkhPIFdJVEggREFTSUEKKzxVMUZFNT4gPFUwM0MxPgorJSBHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIFBFUklTUE9NRU5JCis8VTFGRTY+IDxVMDNDNT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBESUFMWVRJS0EgQU5EIFBFUklTUE9NRU5JCis8VTFGRTc+IDxVMDNDNT4KKyUgR1JFRUsgQ0FQSVRBTCBMRVRURVIgVVBTSUxPTiBXSVRIIFZSQUNIWQorPFUxRkU4PiA8VTAzQTU+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIFVQU0lMT04gV0lUSCBNQUNST04KKzxVMUZFOT4gPFUwM0E1PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBVUFNJTE9OIFdJVEggVkFSSUEKKzxVMUZFQT4gPFUwM0E1PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBVUFNJTE9OIFdJVEggT1hJQQorPFUxRkVCPiA8VTAzQTU+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIFJITyBXSVRIIERBU0lBCis8VTFGRUM+IDxVMDNBMT4KKyUgR1JFRUsgRElBTFlUSUtBIEFORCBWQVJJQQorPFUxRkVEPiA8VTAwQTg+CislIEdSRUVLIERJQUxZVElLQSBBTkQgT1hJQQorPFUxRkVFPiA8VTAwQTg+CislIEdSRUVLIFZBUklBCis8VTFGRUY+IDxVMDA2MD4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggVkFSSUEgQU5EIFlQT0dFR1JBTU1FTkkKKzxVMUZGMj4gPFUwM0M5PgorJSBHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBZUE9HRUdSQU1NRU5JCis8VTFGRjM+IDxVMDNDOT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggT1hJQSBBTkQgWVBPR0VHUkFNTUVOSQorPFUxRkY0PiA8VTAzQzk+CislIEdSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFBFUklTUE9NRU5JCis8VTFGRjY+IDxVMDNDOT4KKyUgR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggUEVSSVNQT01FTkkgQU5EIFlQT0dFR1JBTU1FTkkKKzxVMUZGNz4gPFUwM0M5PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUlDUk9OIFdJVEggVkFSSUEKKzxVMUZGOD4gPFUwMzlGPgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUlDUk9OIFdJVEggT1hJQQorPFUxRkY5PiA8VTAzOUY+CislIEdSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBIFdJVEggVkFSSUEKKzxVMUZGQT4gPFUwM0E5PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIE9YSUEKKzxVMUZGQj4gPFUwM0E5PgorJSBHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIFBST1NHRUdSQU1NRU5JCis8VTFGRkM+IDxVMDNBOT4KKyUgR1JFRUsgT1hJQQorPFUxRkZEPiA8VTAwQjQ+CislIEVOIFFVQUQKKzxVMjAwMD4gPFUyMDAyPjs8VTAwMjA+CislIEVNIFFVQUQKKzxVMjAwMT4gPFUyMDAzPjs8VTAwMjA+CislIE9ITSBTSUdOCis8VTIxMjY+IDxVMDNBOT4KKyUgS0VMVklOIFNJR04KKzxVMjEyQT4gPFUwMDRCPgorJSBBTkdTVFJPTSBTSUdOCis8VTIxMkI+IDxVMDBDNT4KKyUgTEVGVC1QT0lOVElORyBBTkdMRSBCUkFDS0VUCis8VTIzMjk+IDxVMzAwOD47PFUwMDNDPgorJSBSSUdIVC1QT0lOVElORyBBTkdMRSBCUkFDS0VUCis8VTIzMkE+IDxVMzAwOT47PFUwMDNFPgorJSBISVJBR0FOQSBMRVRURVIgR0EKKzxVMzA0Qz4gPFUzMDRCPgorJSBISVJBR0FOQSBMRVRURVIgR0kKKzxVMzA0RT4gPFUzMDREPgorJSBISVJBR0FOQSBMRVRURVIgR1UKKzxVMzA1MD4gPFUzMDRGPgorJSBISVJBR0FOQSBMRVRURVIgR0UKKzxVMzA1Mj4gPFUzMDUxPgorJSBISVJBR0FOQSBMRVRURVIgR08KKzxVMzA1ND4gPFUzMDUzPgorJSBISVJBR0FOQSBMRVRURVIgWkEKKzxVMzA1Nj4gPFUzMDU1PgorJSBISVJBR0FOQSBMRVRURVIgWkkKKzxVMzA1OD4gPFUzMDU3PgorJSBISVJBR0FOQSBMRVRURVIgWlUKKzxVMzA1QT4gPFUzMDU5PgorJSBISVJBR0FOQSBMRVRURVIgWkUKKzxVMzA1Qz4gPFUzMDVCPgorJSBISVJBR0FOQSBMRVRURVIgWk8KKzxVMzA1RT4gPFUzMDVEPgorJSBISVJBR0FOQSBMRVRURVIgREEKKzxVMzA2MD4gPFUzMDVGPgorJSBISVJBR0FOQSBMRVRURVIgREkKKzxVMzA2Mj4gPFUzMDYxPgorJSBISVJBR0FOQSBMRVRURVIgRFUKKzxVMzA2NT4gPFUzMDY0PgorJSBISVJBR0FOQSBMRVRURVIgREUKKzxVMzA2Nz4gPFUzMDY2PgorJSBISVJBR0FOQSBMRVRURVIgRE8KKzxVMzA2OT4gPFUzMDY4PgorJSBISVJBR0FOQSBMRVRURVIgQkEKKzxVMzA3MD4gPFUzMDZGPgorJSBISVJBR0FOQSBMRVRURVIgUEEKKzxVMzA3MT4gPFUzMDZGPgorJSBISVJBR0FOQSBMRVRURVIgQkkKKzxVMzA3Mz4gPFUzMDcyPgorJSBISVJBR0FOQSBMRVRURVIgUEkKKzxVMzA3ND4gPFUzMDcyPgorJSBISVJBR0FOQSBMRVRURVIgQlUKKzxVMzA3Nj4gPFUzMDc1PgorJSBISVJBR0FOQSBMRVRURVIgUFUKKzxVMzA3Nz4gPFUzMDc1PgorJSBISVJBR0FOQSBMRVRURVIgQkUKKzxVMzA3OT4gPFUzMDc4PgorJSBISVJBR0FOQSBMRVRURVIgUEUKKzxVMzA3QT4gPFUzMDc4PgorJSBISVJBR0FOQSBMRVRURVIgQk8KKzxVMzA3Qz4gPFUzMDdCPgorJSBISVJBR0FOQSBMRVRURVIgUE8KKzxVMzA3RD4gPFUzMDdCPgorJSBISVJBR0FOQSBMRVRURVIgVlUKKzxVMzA5ND4gPFUzMDQ2PgorJSBISVJBR0FOQSBWT0lDRUQgSVRFUkFUSU9OIE1BUksKKzxVMzA5RT4gPFUzMDlEPgorJSBLQVRBS0FOQSBMRVRURVIgR0EKKzxVMzBBQz4gPFUzMEFCPgorJSBLQVRBS0FOQSBMRVRURVIgR0kKKzxVMzBBRT4gPFUzMEFEPgorJSBLQVRBS0FOQSBMRVRURVIgR1UKKzxVMzBCMD4gPFUzMEFGPgorJSBLQVRBS0FOQSBMRVRURVIgR0UKKzxVMzBCMj4gPFUzMEIxPgorJSBLQVRBS0FOQSBMRVRURVIgR08KKzxVMzBCND4gPFUzMEIzPgorJSBLQVRBS0FOQSBMRVRURVIgWkEKKzxVMzBCNj4gPFUzMEI1PgorJSBLQVRBS0FOQSBMRVRURVIgWkkKKzxVMzBCOD4gPFUzMEI3PgorJSBLQVRBS0FOQSBMRVRURVIgWlUKKzxVMzBCQT4gPFUzMEI5PgorJSBLQVRBS0FOQSBMRVRURVIgWkUKKzxVMzBCQz4gPFUzMEJCPgorJSBLQVRBS0FOQSBMRVRURVIgWk8KKzxVMzBCRT4gPFUzMEJEPgorJSBLQVRBS0FOQSBMRVRURVIgREEKKzxVMzBDMD4gPFUzMEJGPgorJSBLQVRBS0FOQSBMRVRURVIgREkKKzxVMzBDMj4gPFUzMEMxPgorJSBLQVRBS0FOQSBMRVRURVIgRFUKKzxVMzBDNT4gPFUzMEM0PgorJSBLQVRBS0FOQSBMRVRURVIgREUKKzxVMzBDNz4gPFUzMEM2PgorJSBLQVRBS0FOQSBMRVRURVIgRE8KKzxVMzBDOT4gPFUzMEM4PgorJSBLQVRBS0FOQSBMRVRURVIgQkEKKzxVMzBEMD4gPFUzMENGPgorJSBLQVRBS0FOQSBMRVRURVIgUEEKKzxVMzBEMT4gPFUzMENGPgorJSBLQVRBS0FOQSBMRVRURVIgQkkKKzxVMzBEMz4gPFUzMEQyPgorJSBLQVRBS0FOQSBMRVRURVIgUEkKKzxVMzBEND4gPFUzMEQyPgorJSBLQVRBS0FOQSBMRVRURVIgQlUKKzxVMzBENj4gPFUzMEQ1PgorJSBLQVRBS0FOQSBMRVRURVIgUFUKKzxVMzBENz4gPFUzMEQ1PgorJSBLQVRBS0FOQSBMRVRURVIgQkUKKzxVMzBEOT4gPFUzMEQ4PgorJSBLQVRBS0FOQSBMRVRURVIgUEUKKzxVMzBEQT4gPFUzMEQ4PgorJSBLQVRBS0FOQSBMRVRURVIgQk8KKzxVMzBEQz4gPFUzMERCPgorJSBLQVRBS0FOQSBMRVRURVIgUE8KKzxVMzBERD4gPFUzMERCPgorJSBLQVRBS0FOQSBMRVRURVIgVlUKKzxVMzBGND4gPFUzMEE2PgorJSBLQVRBS0FOQSBMRVRURVIgVkEKKzxVMzBGNz4gPFUzMEVGPgorJSBLQVRBS0FOQSBMRVRURVIgVkkKKzxVMzBGOD4gPFUzMEYwPgorJSBLQVRBS0FOQSBMRVRURVIgVkUKKzxVMzBGOT4gPFUzMEYxPgorJSBLQVRBS0FOQSBMRVRURVIgVk8KKzxVMzBGQT4gPFUzMEYyPgorJSBLQVRBS0FOQSBWT0lDRUQgSVRFUkFUSU9OIE1BUksKKzxVMzBGRT4gPFUzMEZEPgorJSBIRUJSRVcgTEVUVEVSIFlPRCBXSVRIIEhJUklRCis8VUZCMUQ+IDxVMDVEOT4KKyUgSEVCUkVXIExJR0FUVVJFIFlJRERJU0ggWU9EIFlPRCBQQVRBSAorPFVGQjFGPiA8VTA1RjI+OyI8VTA1RDk+PFUwNUQ5PiIKKyUgSEVCUkVXIExFVFRFUiBTSElOIFdJVEggU0hJTiBET1QKKzxVRkIyQT4gPFUwNUU5PgorJSBIRUJSRVcgTEVUVEVSIFNISU4gV0lUSCBTSU4gRE9UCis8VUZCMkI+IDxVMDVFOT4KKyUgSEVCUkVXIExFVFRFUiBTSElOIFdJVEggREFHRVNIIEFORCBTSElOIERPVAorPFVGQjJDPiA8VTA1RTk+CislIEhFQlJFVyBMRVRURVIgU0hJTiBXSVRIIERBR0VTSCBBTkQgU0lOIERPVAorPFVGQjJEPiA8VTA1RTk+CislIEhFQlJFVyBMRVRURVIgQUxFRiBXSVRIIFBBVEFICis8VUZCMkU+IDxVMDVEMD4KKyUgSEVCUkVXIExFVFRFUiBBTEVGIFdJVEggUUFNQVRTCis8VUZCMkY+IDxVMDVEMD4KKyUgSEVCUkVXIExFVFRFUiBBTEVGIFdJVEggTUFQSVEKKzxVRkIzMD4gPFUwNUQwPgorJSBIRUJSRVcgTEVUVEVSIEJFVCBXSVRIIERBR0VTSAorPFVGQjMxPiA8VTA1RDE+CislIEhFQlJFVyBMRVRURVIgR0lNRUwgV0lUSCBEQUdFU0gKKzxVRkIzMj4gPFUwNUQyPgorJSBIRUJSRVcgTEVUVEVSIERBTEVUIFdJVEggREFHRVNICis8VUZCMzM+IDxVMDVEMz4KKyUgSEVCUkVXIExFVFRFUiBIRSBXSVRIIE1BUElRCis8VUZCMzQ+IDxVMDVEND4KKyUgSEVCUkVXIExFVFRFUiBWQVYgV0lUSCBEQUdFU0gKKzxVRkIzNT4gPFUwNUQ1PgorJSBIRUJSRVcgTEVUVEVSIFpBWUlOIFdJVEggREFHRVNICis8VUZCMzY+IDxVMDVENj4KKyUgSEVCUkVXIExFVFRFUiBURVQgV0lUSCBEQUdFU0gKKzxVRkIzOD4gPFUwNUQ4PgorJSBIRUJSRVcgTEVUVEVSIFlPRCBXSVRIIERBR0VTSAorPFVGQjM5PiA8VTA1RDk+CislIEhFQlJFVyBMRVRURVIgRklOQUwgS0FGIFdJVEggREFHRVNICis8VUZCM0E+IDxVMDVEQT4KKyUgSEVCUkVXIExFVFRFUiBLQUYgV0lUSCBEQUdFU0gKKzxVRkIzQj4gPFUwNURCPgorJSBIRUJSRVcgTEVUVEVSIExBTUVEIFdJVEggREFHRVNICis8VUZCM0M+IDxVMDVEQz4KKyUgSEVCUkVXIExFVFRFUiBNRU0gV0lUSCBEQUdFU0gKKzxVRkIzRT4gPFUwNURFPgorJSBIRUJSRVcgTEVUVEVSIE5VTiBXSVRIIERBR0VTSAorPFVGQjQwPiA8VTA1RTA+CislIEhFQlJFVyBMRVRURVIgU0FNRUtIIFdJVEggREFHRVNICis8VUZCNDE+IDxVMDVFMT4KKyUgSEVCUkVXIExFVFRFUiBGSU5BTCBQRSBXSVRIIERBR0VTSAorPFVGQjQzPiA8VTA1RTM+CislIEhFQlJFVyBMRVRURVIgUEUgV0lUSCBEQUdFU0gKKzxVRkI0ND4gPFUwNUU0PgorJSBIRUJSRVcgTEVUVEVSIFRTQURJIFdJVEggREFHRVNICis8VUZCNDY+IDxVMDVFNj4KKyUgSEVCUkVXIExFVFRFUiBRT0YgV0lUSCBEQUdFU0gKKzxVRkI0Nz4gPFUwNUU3PgorJSBIRUJSRVcgTEVUVEVSIFJFU0ggV0lUSCBEQUdFU0gKKzxVRkI0OD4gPFUwNUU4PgorJSBIRUJSRVcgTEVUVEVSIFNISU4gV0lUSCBEQUdFU0gKKzxVRkI0OT4gPFUwNUU5PgorJSBIRUJSRVcgTEVUVEVSIFRBViBXSVRIIERBR0VTSAorPFVGQjRBPiA8VTA1RUE+CislIEhFQlJFVyBMRVRURVIgVkFWIFdJVEggSE9MQU0KKzxVRkI0Qj4gPFUwNUQ1PgorJSBIRUJSRVcgTEVUVEVSIEJFVCBXSVRIIFJBRkUKKzxVRkI0Qz4gPFUwNUQxPgorJSBIRUJSRVcgTEVUVEVSIEtBRiBXSVRIIFJBRkUKKzxVRkI0RD4gPFUwNURCPgorJSBIRUJSRVcgTEVUVEVSIFBFIFdJVEggUkFGRQorPFVGQjRFPiA8VTA1RTQ+CisKK3RyYW5zbGl0X2VuZAorCitFTkQgTENfQ1RZUEUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RyYW5zbGl0X2NvbXBhdCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RyYW5zbGl0X2NvbXBhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjlkNjYwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdHJhbnNsaXRfY29tcGF0CkBAIC0wLDAgKzEsMTMzMCBAQAorZXNjYXBlX2NoYXIgLworY29tbWVudF9jaGFyICUKKworJSBUcmFuc2xpdGVyYXRpb25zIG9mIGNvbXBhdGliaWxpdHkgY2hhcmFjdGVycyBhbmQgbGlnYXR1cmVzLgorJSBHZW5lcmF0ZWQgdGhyb3VnaAorJSAgICQgZ3JlcCAnXlteO10qO1teO10qO1teO10qO1teO10qO1teO10qOzxjb21wYXQ+W147XSo7JyBVbmljb2RlRGF0YS50eHQgfCBcCislICAgICBzZWQgLWUgJ3MvXlwoW147XSpcKTtcKFteO10qXCk7W147XSo7W147XSo7W147XSo7PGNvbXBhdD4gXChbXjtdKlwpOy4qJC88VVwxPiAiPFVcMz4iJSBcMi8nIHwgZ3JlcCAtdiAnMDAyMCAwM1swLTZdWzAtOUEtRl0nIHwgc2VkIC1lICdoJyAtZSAncy9eXChbXiVdKlwpJSAuKiQvXDEvJyAtZSAncy9cKFswLTlBLUZdXCkgXChbMC05QS1GXVwpL1wxPjxVXDIvZycgLWUgJ3gnIC1lICdzL15bXiVdKlwoJSAuKlwpJC9cMS8nIC1lICdHJworJSBhbmQKKyUgICAkIGdyZXAgJ1teO10qO1teO10qTElHQVRVUkVbXjtdKjsnIFVuaWNvZGVEYXRhLnR4dAorCitMQ19DVFlQRQorCit0cmFuc2xpdF9zdGFydAorCislIE1JQ1JPIFNJR04KKzxVMDBCNT4gIjxVMDNCQz4iOzxVMDA3NT4KKyUgTEFUSU4gQ0FQSVRBTCBMSUdBVFVSRSBJSgorPFUwMTMyPiAiPFUwMDQ5PjxVMDA0QT4iCislIExBVElOIFNNQUxMIExJR0FUVVJFIElKCis8VTAxMzM+ICI8VTAwNjk+PFUwMDZBPiIKKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTCBXSVRIIE1JRERMRSBET1QKKzxVMDEzRj4gIjxVMDA0Qz48VTAwQjc+IgorJSBMQVRJTiBTTUFMTCBMRVRURVIgTCBXSVRIIE1JRERMRSBET1QKKzxVMDE0MD4gIjxVMDA2Qz48VTAwQjc+IgorJSBMQVRJTiBTTUFMTCBMRVRURVIgTiBQUkVDRURFRCBCWSBBUE9TVFJPUEhFCis8VTAxNDk+ICI8VTAyQkM+PFUwMDZFPiI7IjxVMDAyNz48VTAwNkU+IgorJSBMQVRJTiBDQVBJVEFMIExJR0FUVVJFIE9FCis8VTAxNTI+ICI8VTAwNEY+PFUwMDQ1PiIKKyUgTEFUSU4gU01BTEwgTElHQVRVUkUgT0UKKzxVMDE1Mz4gIjxVMDA2Rj48VTAwNjU+IgorJSBMQVRJTiBTTUFMTCBMRVRURVIgTE9ORyBTCis8VTAxN0Y+ICI8VTAwNzM+IgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBEWiBXSVRIIENBUk9OCis8VTAxQzQ+ICI8VTAwNDQ+PFUwMTdEPiIKKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRCBXSVRIIFNNQUxMIExFVFRFUiBaIFdJVEggQ0FST04KKzxVMDFDNT4gIjxVMDA0ND48VTAxN0U+IgorJSBMQVRJTiBTTUFMTCBMRVRURVIgRFogV0lUSCBDQVJPTgorPFUwMUM2PiAiPFUwMDY0PjxVMDE3RT4iCislIExBVElOIENBUElUQUwgTEVUVEVSIExKCis8VTAxQzc+ICI8VTAwNEM+PFUwMDRBPiIKKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTCBXSVRIIFNNQUxMIExFVFRFUiBKCis8VTAxQzg+ICI8VTAwNEM+PFUwMDZBPiIKKyUgTEFUSU4gU01BTEwgTEVUVEVSIExKCis8VTAxQzk+ICI8VTAwNkM+PFUwMDZBPiIKKyUgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTkoKKzxVMDFDQT4gIjxVMDA0RT48VTAwNEE+IgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggU01BTEwgTEVUVEVSIEoKKzxVMDFDQj4gIjxVMDA0RT48VTAwNkE+IgorJSBMQVRJTiBTTUFMTCBMRVRURVIgTkoKKzxVMDFDQz4gIjxVMDA2RT48VTAwNkE+IgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBEWgorPFUwMUYxPiAiPFUwMDQ0PjxVMDA1QT4iCislIExBVElOIENBUElUQUwgTEVUVEVSIEQgV0lUSCBTTUFMTCBMRVRURVIgWgorPFUwMUYyPiAiPFUwMDQ0PjxVMDA3QT4iCislIExBVElOIFNNQUxMIExFVFRFUiBEWgorPFUwMUYzPiAiPFUwMDY0PjxVMDA3QT4iCislIEdSRUVLIEJFVEEgU1lNQk9MCis8VTAzRDA+ICI8VTAzQjI+IgorJSBHUkVFSyBUSEVUQSBTWU1CT0wKKzxVMDNEMT4gIjxVMDNCOD4iCislIEdSRUVLIFVQU0lMT04gV0lUSCBIT09LIFNZTUJPTAorPFUwM0QyPiAiPFUwM0E1PiIKKyUgR1JFRUsgUEhJIFNZTUJPTAorPFUwM0Q1PiAiPFUwM0M2PiIKKyUgR1JFRUsgUEkgU1lNQk9MCis8VTAzRDY+ICI8VTAzQzA+IgorJSBHUkVFSyBLQVBQQSBTWU1CT0wKKzxVMDNGMD4gIjxVMDNCQT4iCislIEdSRUVLIFJITyBTWU1CT0wKKzxVMDNGMT4gIjxVMDNDMT4iCislIEdSRUVLIExVTkFURSBTSUdNQSBTWU1CT0wKKzxVMDNGMj4gIjxVMDNDMj4iCislIEdSRUVLIENBUElUQUwgVEhFVEEgU1lNQk9MCis8VTAzRjQ+ICI8VTAzOTg+IgorJSBHUkVFSyBMVU5BVEUgRVBTSUxPTiBTWU1CT0wKKzxVMDNGNT4gIjxVMDNCNT4iCislIEFSTUVOSUFOIFNNQUxMIExJR0FUVVJFIEVDSCBZSVdOCis8VTA1ODc+ICI8VTA1NjU+PFUwNTgyPiIKKyUgSEVCUkVXIExJR0FUVVJFIFlJRERJU0ggRE9VQkxFIFZBVgorPFUwNUYwPiAiPFUwNUQ1PjxVMDVENT4iCislIEhFQlJFVyBMSUdBVFVSRSBZSURESVNIIFZBViBZT0QKKzxVMDVGMT4gIjxVMDVENT48VTA1RDk+IgorJSBIRUJSRVcgTElHQVRVUkUgWUlERElTSCBET1VCTEUgWU9ECis8VTA1RjI+ICI8VTA1RDk+PFUwNUQ5PiIKKyUgQVJBQklDIExFVFRFUiBISUdIIEhBTVpBIEFMRUYKKzxVMDY3NT4gIjxVMDYyNz48VTA2NzQ+IgorJSBBUkFCSUMgTEVUVEVSIEhJR0ggSEFNWkEgV0FXCis8VTA2NzY+ICI8VTA2NDg+PFUwNjc0PiIKKyUgQVJBQklDIExFVFRFUiBVIFdJVEggSEFNWkEgQUJPVkUKKzxVMDY3Nz4gIjxVMDZDNz48VTA2NzQ+IgorJSBBUkFCSUMgTEVUVEVSIEhJR0ggSEFNWkEgWUVICis8VTA2Nzg+ICI8VTA2NEE+PFUwNjc0PiIKKyUgVEhBSSBDSEFSQUNURVIgU0FSQSBBTQorPFUwRTMzPiAiPFUwRTREPjxVMEUzMj4iCislIExBTyBWT1dFTCBTSUdOIEFNCis8VTBFQjM+ICI8VTBFQ0Q+PFUwRUIyPiIKKyUgTEFPIEhPIE5PCis8VTBFREM+ICI8VTBFQUI+PFUwRTk5PiIKKyUgTEFPIEhPIE1PCis8VTBFREQ+ICI8VTBFQUI+PFUwRUExPiIKKyUgVElCRVRBTiBWT1dFTCBTSUdOIFZPQ0FMSUMgUlIKKzxVMEY3Nz4gIjxVMEZCMj48VTBGODE+IgorJSBUSUJFVEFOIFZPV0VMIFNJR04gVk9DQUxJQyBMTAorPFUwRjc5PiAiPFUwRkIzPjxVMEY4MT4iCislIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggUklHSFQgSEFMRiBSSU5HCis8VTFFOUE+ICI8VTAwNjE+PFUwMkJFPiIKKyUgRU4gU1BBQ0UKKzxVMjAwMj4gIjxVMDAyMD4iCislIEVNIFNQQUNFCis8VTIwMDM+ICI8VTAwMjA+IgorJSBUSFJFRS1QRVItRU0gU1BBQ0UKKzxVMjAwND4gIjxVMDAyMD4iCislIEZPVVItUEVSLUVNIFNQQUNFCis8VTIwMDU+ICI8VTAwMjA+IgorJSBTSVgtUEVSLUVNIFNQQUNFCis8VTIwMDY+ICI8VTAwMjA+IgorJSBQVU5DVFVBVElPTiBTUEFDRQorPFUyMDA4PiAiPFUwMDIwPiIKKyUgVEhJTiBTUEFDRQorPFUyMDA5PiAiPFUwMDIwPiIKKyUgSEFJUiBTUEFDRQorPFUyMDBBPiAiPFUwMDIwPiIKKyUgT05FIERPVCBMRUFERVIKKzxVMjAyND4gIjxVMDAyRT4iCislIFRXTyBET1QgTEVBREVSCis8VTIwMjU+ICI8VTAwMkU+PFUwMDJFPiIKKyUgSE9SSVpPTlRBTCBFTExJUFNJUworPFUyMDI2PiAiPFUwMDJFPjxVMDAyRT48VTAwMkU+IgorJSBET1VCTEUgUFJJTUUKKzxVMjAzMz4gIjxVMjAzMj48VTIwMzI+IgorJSBUUklQTEUgUFJJTUUKKzxVMjAzND4gIjxVMjAzMj48VTIwMzI+PFUyMDMyPiIKKyUgUkVWRVJTRUQgRE9VQkxFIFBSSU1FCis8VTIwMzY+ICI8VTIwMzU+PFUyMDM1PiIKKyUgUkVWRVJTRUQgVFJJUExFIFBSSU1FCis8VTIwMzc+ICI8VTIwMzU+PFUyMDM1PjxVMjAzNT4iCislIERPVUJMRSBFWENMQU1BVElPTiBNQVJLCis8VTIwM0M+ICI8VTAwMjE+PFUwMDIxPiIKKyUgRE9VQkxFIFFVRVNUSU9OIE1BUksKKzxVMjA0Nz4gIjxVMDAzRj48VTAwM0Y+IgorJSBRVUVTVElPTiBFWENMQU1BVElPTiBNQVJLCis8VTIwNDg+ICI8VTAwM0Y+PFUwMDIxPiIKKyUgRVhDTEFNQVRJT04gUVVFU1RJT04gTUFSSworPFUyMDQ5PiAiPFUwMDIxPjxVMDAzRj4iCislIFFVQURSVVBMRSBQUklNRQorPFUyMDU3PiAiPFUyMDMyPjxVMjAzMj48VTIwMzI+PFUyMDMyPiIKKyUgTUVESVVNIE1BVEhFTUFUSUNBTCBTUEFDRQorPFUyMDVGPiAiPFUwMDIwPiIKKyUgUlVQRUUgU0lHTgorPFUyMEE4PiAiPFUwMDUyPjxVMDA3Mz4iCislIEFDQ09VTlQgT0YKKzxVMjEwMD4gIjxVMDA2MT48VTAwMkY+PFUwMDYzPiIKKyUgQUREUkVTU0VEIFRPIFRIRSBTVUJKRUNUCis8VTIxMDE+ICI8VTAwNjE+PFUwMDJGPjxVMDA3Mz4iCislIERFR1JFRSBDRUxTSVVTCis8VTIxMDM+ICI8VTAwQjA+PFUwMDQzPiIKKyUgQ0FSRSBPRgorPFUyMTA1PiAiPFUwMDYzPjxVMDAyRj48VTAwNkY+IgorJSBDQURBIFVOQQorPFUyMTA2PiAiPFUwMDYzPjxVMDAyRj48VTAwNzU+IgorJSBFVUxFUiBDT05TVEFOVAorPFUyMTA3PiAiPFUwMTkwPiIKKyUgREVHUkVFIEZBSFJFTkhFSVQKKzxVMjEwOT4gIjxVMDBCMD48VTAwNDY+IgorJSBOVU1FUk8gU0lHTgorPFUyMTE2PiAiPFUwMDRFPjxVMDA2Rj4iCislIFRFTEVQSE9ORSBTSUdOCis8VTIxMjE+ICI8VTAwNTQ+PFUwMDQ1PjxVMDA0Qz4iCislIEFMRUYgU1lNQk9MCis8VTIxMzU+ICI8VTA1RDA+IgorJSBCRVQgU1lNQk9MCis8VTIxMzY+ICI8VTA1RDE+IgorJSBHSU1FTCBTWU1CT0wKKzxVMjEzNz4gIjxVMDVEMj4iCislIERBTEVUIFNZTUJPTAorPFUyMTM4PiAiPFUwNUQzPiIKKyUgUk9NQU4gTlVNRVJBTCBPTkUKKzxVMjE2MD4gIjxVMDA0OT4iCislIFJPTUFOIE5VTUVSQUwgVFdPCis8VTIxNjE+ICI8VTAwNDk+PFUwMDQ5PiIKKyUgUk9NQU4gTlVNRVJBTCBUSFJFRQorPFUyMTYyPiAiPFUwMDQ5PjxVMDA0OT48VTAwNDk+IgorJSBST01BTiBOVU1FUkFMIEZPVVIKKzxVMjE2Mz4gIjxVMDA0OT48VTAwNTY+IgorJSBST01BTiBOVU1FUkFMIEZJVkUKKzxVMjE2ND4gIjxVMDA1Nj4iCislIFJPTUFOIE5VTUVSQUwgU0lYCis8VTIxNjU+ICI8VTAwNTY+PFUwMDQ5PiIKKyUgUk9NQU4gTlVNRVJBTCBTRVZFTgorPFUyMTY2PiAiPFUwMDU2PjxVMDA0OT48VTAwNDk+IgorJSBST01BTiBOVU1FUkFMIEVJR0hUCis8VTIxNjc+ICI8VTAwNTY+PFUwMDQ5PjxVMDA0OT48VTAwNDk+IgorJSBST01BTiBOVU1FUkFMIE5JTkUKKzxVMjE2OD4gIjxVMDA0OT48VTAwNTg+IgorJSBST01BTiBOVU1FUkFMIFRFTgorPFUyMTY5PiAiPFUwMDU4PiIKKyUgUk9NQU4gTlVNRVJBTCBFTEVWRU4KKzxVMjE2QT4gIjxVMDA1OD48VTAwNDk+IgorJSBST01BTiBOVU1FUkFMIFRXRUxWRQorPFUyMTZCPiAiPFUwMDU4PjxVMDA0OT48VTAwNDk+IgorJSBST01BTiBOVU1FUkFMIEZJRlRZCis8VTIxNkM+ICI8VTAwNEM+IgorJSBST01BTiBOVU1FUkFMIE9ORSBIVU5EUkVECis8VTIxNkQ+ICI8VTAwNDM+IgorJSBST01BTiBOVU1FUkFMIEZJVkUgSFVORFJFRAorPFUyMTZFPiAiPFUwMDQ0PiIKKyUgUk9NQU4gTlVNRVJBTCBPTkUgVEhPVVNBTkQKKzxVMjE2Rj4gIjxVMDA0RD4iCislIFNNQUxMIFJPTUFOIE5VTUVSQUwgT05FCis8VTIxNzA+ICI8VTAwNjk+IgorJSBTTUFMTCBST01BTiBOVU1FUkFMIFRXTworPFUyMTcxPiAiPFUwMDY5PjxVMDA2OT4iCislIFNNQUxMIFJPTUFOIE5VTUVSQUwgVEhSRUUKKzxVMjE3Mj4gIjxVMDA2OT48VTAwNjk+PFUwMDY5PiIKKyUgU01BTEwgUk9NQU4gTlVNRVJBTCBGT1VSCis8VTIxNzM+ICI8VTAwNjk+PFUwMDc2PiIKKyUgU01BTEwgUk9NQU4gTlVNRVJBTCBGSVZFCis8VTIxNzQ+ICI8VTAwNzY+IgorJSBTTUFMTCBST01BTiBOVU1FUkFMIFNJWAorPFUyMTc1PiAiPFUwMDc2PjxVMDA2OT4iCislIFNNQUxMIFJPTUFOIE5VTUVSQUwgU0VWRU4KKzxVMjE3Nj4gIjxVMDA3Nj48VTAwNjk+PFUwMDY5PiIKKyUgU01BTEwgUk9NQU4gTlVNRVJBTCBFSUdIVAorPFUyMTc3PiAiPFUwMDc2PjxVMDA2OT48VTAwNjk+PFUwMDY5PiIKKyUgU01BTEwgUk9NQU4gTlVNRVJBTCBOSU5FCis8VTIxNzg+ICI8VTAwNjk+PFUwMDc4PiIKKyUgU01BTEwgUk9NQU4gTlVNRVJBTCBURU4KKzxVMjE3OT4gIjxVMDA3OD4iCislIFNNQUxMIFJPTUFOIE5VTUVSQUwgRUxFVkVOCis8VTIxN0E+ICI8VTAwNzg+PFUwMDY5PiIKKyUgU01BTEwgUk9NQU4gTlVNRVJBTCBUV0VMVkUKKzxVMjE3Qj4gIjxVMDA3OD48VTAwNjk+PFUwMDY5PiIKKyUgU01BTEwgUk9NQU4gTlVNRVJBTCBGSUZUWQorPFUyMTdDPiAiPFUwMDZDPiIKKyUgU01BTEwgUk9NQU4gTlVNRVJBTCBPTkUgSFVORFJFRAorPFUyMTdEPiAiPFUwMDYzPiIKKyUgU01BTEwgUk9NQU4gTlVNRVJBTCBGSVZFIEhVTkRSRUQKKzxVMjE3RT4gIjxVMDA2ND4iCislIFNNQUxMIFJPTUFOIE5VTUVSQUwgT05FIFRIT1VTQU5ECis8VTIxN0Y+ICI8VTAwNkQ+IgorJSBET1VCTEUgSU5URUdSQUwKKzxVMjIyQz4gIjxVMjIyQj48VTIyMkI+IgorJSBUUklQTEUgSU5URUdSQUwKKzxVMjIyRD4gIjxVMjIyQj48VTIyMkI+PFUyMjJCPiIKKyUgU1VSRkFDRSBJTlRFR1JBTAorPFUyMjJGPiAiPFUyMjJFPjxVMjIyRT4iCislIFZPTFVNRSBJTlRFR1JBTAorPFUyMjMwPiAiPFUyMjJFPjxVMjIyRT48VTIyMkU+IgorJSBQQVJFTlRIRVNJWkVEIERJR0lUIE9ORQorPFUyNDc0PiAiPFUwMDI4PjxVMDAzMT48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIERJR0lUIFRXTworPFUyNDc1PiAiPFUwMDI4PjxVMDAzMj48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIERJR0lUIFRIUkVFCis8VTI0NzY+ICI8VTAwMjg+PFUwMDMzPjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgRElHSVQgRk9VUgorPFUyNDc3PiAiPFUwMDI4PjxVMDAzND48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIERJR0lUIEZJVkUKKzxVMjQ3OD4gIjxVMDAyOD48VTAwMzU+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBESUdJVCBTSVgKKzxVMjQ3OT4gIjxVMDAyOD48VTAwMzY+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBESUdJVCBTRVZFTgorPFUyNDdBPiAiPFUwMDI4PjxVMDAzNz48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIERJR0lUIEVJR0hUCis8VTI0N0I+ICI8VTAwMjg+PFUwMDM4PjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgRElHSVQgTklORQorPFUyNDdDPiAiPFUwMDI4PjxVMDAzOT48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIE5VTUJFUiBURU4KKzxVMjQ3RD4gIjxVMDAyOD48VTAwMzE+PFUwMDMwPjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgTlVNQkVSIEVMRVZFTgorPFUyNDdFPiAiPFUwMDI4PjxVMDAzMT48VTAwMzE+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBOVU1CRVIgVFdFTFZFCis8VTI0N0Y+ICI8VTAwMjg+PFUwMDMxPjxVMDAzMj48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIE5VTUJFUiBUSElSVEVFTgorPFUyNDgwPiAiPFUwMDI4PjxVMDAzMT48VTAwMzM+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBOVU1CRVIgRk9VUlRFRU4KKzxVMjQ4MT4gIjxVMDAyOD48VTAwMzE+PFUwMDM0PjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgTlVNQkVSIEZJRlRFRU4KKzxVMjQ4Mj4gIjxVMDAyOD48VTAwMzE+PFUwMDM1PjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgTlVNQkVSIFNJWFRFRU4KKzxVMjQ4Mz4gIjxVMDAyOD48VTAwMzE+PFUwMDM2PjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgTlVNQkVSIFNFVkVOVEVFTgorPFUyNDg0PiAiPFUwMDI4PjxVMDAzMT48VTAwMzc+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBOVU1CRVIgRUlHSFRFRU4KKzxVMjQ4NT4gIjxVMDAyOD48VTAwMzE+PFUwMDM4PjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgTlVNQkVSIE5JTkVURUVOCis8VTI0ODY+ICI8VTAwMjg+PFUwMDMxPjxVMDAzOT48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIE5VTUJFUiBUV0VOVFkKKzxVMjQ4Nz4gIjxVMDAyOD48VTAwMzI+PFUwMDMwPjxVMDAyOT4iCislIERJR0lUIE9ORSBGVUxMIFNUT1AKKzxVMjQ4OD4gIjxVMDAzMT48VTAwMkU+IgorJSBESUdJVCBUV08gRlVMTCBTVE9QCis8VTI0ODk+ICI8VTAwMzI+PFUwMDJFPiIKKyUgRElHSVQgVEhSRUUgRlVMTCBTVE9QCis8VTI0OEE+ICI8VTAwMzM+PFUwMDJFPiIKKyUgRElHSVQgRk9VUiBGVUxMIFNUT1AKKzxVMjQ4Qj4gIjxVMDAzND48VTAwMkU+IgorJSBESUdJVCBGSVZFIEZVTEwgU1RPUAorPFUyNDhDPiAiPFUwMDM1PjxVMDAyRT4iCislIERJR0lUIFNJWCBGVUxMIFNUT1AKKzxVMjQ4RD4gIjxVMDAzNj48VTAwMkU+IgorJSBESUdJVCBTRVZFTiBGVUxMIFNUT1AKKzxVMjQ4RT4gIjxVMDAzNz48VTAwMkU+IgorJSBESUdJVCBFSUdIVCBGVUxMIFNUT1AKKzxVMjQ4Rj4gIjxVMDAzOD48VTAwMkU+IgorJSBESUdJVCBOSU5FIEZVTEwgU1RPUAorPFUyNDkwPiAiPFUwMDM5PjxVMDAyRT4iCislIE5VTUJFUiBURU4gRlVMTCBTVE9QCis8VTI0OTE+ICI8VTAwMzE+PFUwMDMwPjxVMDAyRT4iCislIE5VTUJFUiBFTEVWRU4gRlVMTCBTVE9QCis8VTI0OTI+ICI8VTAwMzE+PFUwMDMxPjxVMDAyRT4iCislIE5VTUJFUiBUV0VMVkUgRlVMTCBTVE9QCis8VTI0OTM+ICI8VTAwMzE+PFUwMDMyPjxVMDAyRT4iCislIE5VTUJFUiBUSElSVEVFTiBGVUxMIFNUT1AKKzxVMjQ5ND4gIjxVMDAzMT48VTAwMzM+PFUwMDJFPiIKKyUgTlVNQkVSIEZPVVJURUVOIEZVTEwgU1RPUAorPFUyNDk1PiAiPFUwMDMxPjxVMDAzND48VTAwMkU+IgorJSBOVU1CRVIgRklGVEVFTiBGVUxMIFNUT1AKKzxVMjQ5Nj4gIjxVMDAzMT48VTAwMzU+PFUwMDJFPiIKKyUgTlVNQkVSIFNJWFRFRU4gRlVMTCBTVE9QCis8VTI0OTc+ICI8VTAwMzE+PFUwMDM2PjxVMDAyRT4iCislIE5VTUJFUiBTRVZFTlRFRU4gRlVMTCBTVE9QCis8VTI0OTg+ICI8VTAwMzE+PFUwMDM3PjxVMDAyRT4iCislIE5VTUJFUiBFSUdIVEVFTiBGVUxMIFNUT1AKKzxVMjQ5OT4gIjxVMDAzMT48VTAwMzg+PFUwMDJFPiIKKyUgTlVNQkVSIE5JTkVURUVOIEZVTEwgU1RPUAorPFUyNDlBPiAiPFUwMDMxPjxVMDAzOT48VTAwMkU+IgorJSBOVU1CRVIgVFdFTlRZIEZVTEwgU1RPUAorPFUyNDlCPiAiPFUwMDMyPjxVMDAzMD48VTAwMkU+IgorJSBQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBBCis8VTI0OUM+ICI8VTAwMjg+PFUwMDYxPjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIEIKKzxVMjQ5RD4gIjxVMDAyOD48VTAwNjI+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgQworPFUyNDlFPiAiPFUwMDI4PjxVMDA2Mz48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBECis8VTI0OUY+ICI8VTAwMjg+PFUwMDY0PjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIEUKKzxVMjRBMD4gIjxVMDAyOD48VTAwNjU+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgRgorPFUyNEExPiAiPFUwMDI4PjxVMDA2Nj48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBHCis8VTI0QTI+ICI8VTAwMjg+PFUwMDY3PjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIEgKKzxVMjRBMz4gIjxVMDAyOD48VTAwNjg+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgSQorPFUyNEE0PiAiPFUwMDI4PjxVMDA2OT48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBKCis8VTI0QTU+ICI8VTAwMjg+PFUwMDZBPjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIEsKKzxVMjRBNj4gIjxVMDAyOD48VTAwNkI+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgTAorPFUyNEE3PiAiPFUwMDI4PjxVMDA2Qz48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBNCis8VTI0QTg+ICI8VTAwMjg+PFUwMDZEPjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIE4KKzxVMjRBOT4gIjxVMDAyOD48VTAwNkU+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgTworPFUyNEFBPiAiPFUwMDI4PjxVMDA2Rj48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBQCis8VTI0QUI+ICI8VTAwMjg+PFUwMDcwPjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIFEKKzxVMjRBQz4gIjxVMDAyOD48VTAwNzE+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgUgorPFUyNEFEPiAiPFUwMDI4PjxVMDA3Mj48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBTCis8VTI0QUU+ICI8VTAwMjg+PFUwMDczPjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIFQKKzxVMjRBRj4gIjxVMDAyOD48VTAwNzQ+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgVQorPFUyNEIwPiAiPFUwMDI4PjxVMDA3NT48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBWCis8VTI0QjE+ICI8VTAwMjg+PFUwMDc2PjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIFcKKzxVMjRCMj4gIjxVMDAyOD48VTAwNzc+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgWAorPFUyNEIzPiAiPFUwMDI4PjxVMDA3OD48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBZCis8VTI0QjQ+ICI8VTAwMjg+PFUwMDc5PjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIFoKKzxVMjRCNT4gIjxVMDAyOD48VTAwN0E+PFUwMDI5PiIKKyUgUVVBRFJVUExFIElOVEVHUkFMIE9QRVJBVE9SCis8VTJBMEM+ICI8VTIyMkI+PFUyMjJCPjxVMjIyQj48VTIyMkI+IgorJSBET1VCTEUgQ09MT04gRVFVQUwKKzxVMkE3ND4gIjxVMDAzQT48VTAwM0E+PFUwMDNEPiIKKyUgVFdPIENPTlNFQ1VUSVZFIEVRVUFMUyBTSUdOUworPFUyQTc1PiAiPFUwMDNEPjxVMDAzRD4iCislIFRIUkVFIENPTlNFQ1VUSVZFIEVRVUFMUyBTSUdOUworPFUyQTc2PiAiPFUwMDNEPjxVMDAzRD48VTAwM0Q+IgorJSBDSksgUkFESUNBTCBNT1RIRVIKKzxVMkU5Rj4gIjxVNkJDRD4iCislIENKSyBSQURJQ0FMIEMtU0lNUExJRklFRCBUVVJUTEUKKzxVMkVGMz4gIjxVOUY5Rj4iCislIEtBTkdYSSBSQURJQ0FMIE9ORQorPFUyRjAwPiAiPFU0RTAwPiIKKyUgS0FOR1hJIFJBRElDQUwgTElORQorPFUyRjAxPiAiPFU0RTI4PiIKKyUgS0FOR1hJIFJBRElDQUwgRE9UCis8VTJGMDI+ICI8VTRFMzY+IgorJSBLQU5HWEkgUkFESUNBTCBTTEFTSAorPFUyRjAzPiAiPFU0RTNGPiIKKyUgS0FOR1hJIFJBRElDQUwgU0VDT05ECis8VTJGMDQ+ICI8VTRFNTk+IgorJSBLQU5HWEkgUkFESUNBTCBIT09LCis8VTJGMDU+ICI8VTRFODU+IgorJSBLQU5HWEkgUkFESUNBTCBUV08KKzxVMkYwNj4gIjxVNEU4Qz4iCislIEtBTkdYSSBSQURJQ0FMIExJRAorPFUyRjA3PiAiPFU0RUEwPiIKKyUgS0FOR1hJIFJBRElDQUwgTUFOCis8VTJGMDg+ICI8VTRFQkE+IgorJSBLQU5HWEkgUkFESUNBTCBMRUdTCis8VTJGMDk+ICI8VTUxM0Y+IgorJSBLQU5HWEkgUkFESUNBTCBFTlRFUgorPFUyRjBBPiAiPFU1MTY1PiIKKyUgS0FOR1hJIFJBRElDQUwgRUlHSFQKKzxVMkYwQj4gIjxVNTE2Qj4iCislIEtBTkdYSSBSQURJQ0FMIERPV04gQk9YCis8VTJGMEM+ICI8VTUxODI+IgorJSBLQU5HWEkgUkFESUNBTCBDT1ZFUgorPFUyRjBEPiAiPFU1MTk2PiIKKyUgS0FOR1hJIFJBRElDQUwgSUNFCis8VTJGMEU+ICI8VTUxQUI+IgorJSBLQU5HWEkgUkFESUNBTCBUQUJMRQorPFUyRjBGPiAiPFU1MUUwPiIKKyUgS0FOR1hJIFJBRElDQUwgT1BFTiBCT1gKKzxVMkYxMD4gIjxVNTFGNT4iCislIEtBTkdYSSBSQURJQ0FMIEtOSUZFCis8VTJGMTE+ICI8VTUyMDA+IgorJSBLQU5HWEkgUkFESUNBTCBQT1dFUgorPFUyRjEyPiAiPFU1MjlCPiIKKyUgS0FOR1hJIFJBRElDQUwgV1JBUAorPFUyRjEzPiAiPFU1MkY5PiIKKyUgS0FOR1hJIFJBRElDQUwgU1BPT04KKzxVMkYxND4gIjxVNTMxNT4iCislIEtBTkdYSSBSQURJQ0FMIFJJR0hUIE9QRU4gQk9YCis8VTJGMTU+ICI8VTUzMUE+IgorJSBLQU5HWEkgUkFESUNBTCBISURJTkcgRU5DTE9TVVJFCis8VTJGMTY+ICI8VTUzMzg+IgorJSBLQU5HWEkgUkFESUNBTCBURU4KKzxVMkYxNz4gIjxVNTM0MT4iCislIEtBTkdYSSBSQURJQ0FMIERJVklOQVRJT04KKzxVMkYxOD4gIjxVNTM1Qz4iCislIEtBTkdYSSBSQURJQ0FMIFNFQUwKKzxVMkYxOT4gIjxVNTM2OT4iCislIEtBTkdYSSBSQURJQ0FMIENMSUZGCis8VTJGMUE+ICI8VTUzODI+IgorJSBLQU5HWEkgUkFESUNBTCBQUklWQVRFCis8VTJGMUI+ICI8VTUzQjY+IgorJSBLQU5HWEkgUkFESUNBTCBBR0FJTgorPFUyRjFDPiAiPFU1M0M4PiIKKyUgS0FOR1hJIFJBRElDQUwgTU9VVEgKKzxVMkYxRD4gIjxVNTNFMz4iCislIEtBTkdYSSBSQURJQ0FMIEVOQ0xPU1VSRQorPFUyRjFFPiAiPFU1NkQ3PiIKKyUgS0FOR1hJIFJBRElDQUwgRUFSVEgKKzxVMkYxRj4gIjxVNTcxRj4iCislIEtBTkdYSSBSQURJQ0FMIFNDSE9MQVIKKzxVMkYyMD4gIjxVNThFQj4iCislIEtBTkdYSSBSQURJQ0FMIEdPCis8VTJGMjE+ICI8VTU5MDI+IgorJSBLQU5HWEkgUkFESUNBTCBHTyBTTE9XTFkKKzxVMkYyMj4gIjxVNTkwQT4iCislIEtBTkdYSSBSQURJQ0FMIEVWRU5JTkcKKzxVMkYyMz4gIjxVNTkxNT4iCislIEtBTkdYSSBSQURJQ0FMIEJJRworPFUyRjI0PiAiPFU1OTI3PiIKKyUgS0FOR1hJIFJBRElDQUwgV09NQU4KKzxVMkYyNT4gIjxVNTk3Mz4iCislIEtBTkdYSSBSQURJQ0FMIENISUxECis8VTJGMjY+ICI8VTVCNTA+IgorJSBLQU5HWEkgUkFESUNBTCBST09GCis8VTJGMjc+ICI8VTVCODA+IgorJSBLQU5HWEkgUkFESUNBTCBJTkNICis8VTJGMjg+ICI8VTVCRjg+IgorJSBLQU5HWEkgUkFESUNBTCBTTUFMTAorPFUyRjI5PiAiPFU1QzBGPiIKKyUgS0FOR1hJIFJBRElDQUwgTEFNRQorPFUyRjJBPiAiPFU1QzIyPiIKKyUgS0FOR1hJIFJBRElDQUwgQ09SUFNFCis8VTJGMkI+ICI8VTVDMzg+IgorJSBLQU5HWEkgUkFESUNBTCBTUFJPVVQKKzxVMkYyQz4gIjxVNUM2RT4iCislIEtBTkdYSSBSQURJQ0FMIE1PVU5UQUlOCis8VTJGMkQ+ICI8VTVDNzE+IgorJSBLQU5HWEkgUkFESUNBTCBSSVZFUgorPFUyRjJFPiAiPFU1RERCPiIKKyUgS0FOR1hJIFJBRElDQUwgV09SSworPFUyRjJGPiAiPFU1REU1PiIKKyUgS0FOR1hJIFJBRElDQUwgT05FU0VMRgorPFUyRjMwPiAiPFU1REYxPiIKKyUgS0FOR1hJIFJBRElDQUwgVFVSQkFOCis8VTJGMzE+ICI8VTVERkU+IgorJSBLQU5HWEkgUkFESUNBTCBEUlkKKzxVMkYzMj4gIjxVNUU3Mj4iCislIEtBTkdYSSBSQURJQ0FMIFNIT1JUIFRIUkVBRAorPFUyRjMzPiAiPFU1RTdBPiIKKyUgS0FOR1hJIFJBRElDQUwgRE9UVEVEIENMSUZGCis8VTJGMzQ+ICI8VTVFN0Y+IgorJSBLQU5HWEkgUkFESUNBTCBMT05HIFNUUklERQorPFUyRjM1PiAiPFU1RUY0PiIKKyUgS0FOR1hJIFJBRElDQUwgVFdPIEhBTkRTCis8VTJGMzY+ICI8VTVFRkU+IgorJSBLQU5HWEkgUkFESUNBTCBTSE9PVAorPFUyRjM3PiAiPFU1RjBCPiIKKyUgS0FOR1hJIFJBRElDQUwgQk9XCis8VTJGMzg+ICI8VTVGMTM+IgorJSBLQU5HWEkgUkFESUNBTCBTTk9VVAorPFUyRjM5PiAiPFU1RjUwPiIKKyUgS0FOR1hJIFJBRElDQUwgQlJJU1RMRQorPFUyRjNBPiAiPFU1RjYxPiIKKyUgS0FOR1hJIFJBRElDQUwgU1RFUAorPFUyRjNCPiAiPFU1RjczPiIKKyUgS0FOR1hJIFJBRElDQUwgSEVBUlQKKzxVMkYzQz4gIjxVNUZDMz4iCislIEtBTkdYSSBSQURJQ0FMIEhBTEJFUkQKKzxVMkYzRD4gIjxVNjIwOD4iCislIEtBTkdYSSBSQURJQ0FMIERPT1IKKzxVMkYzRT4gIjxVNjIzNj4iCislIEtBTkdYSSBSQURJQ0FMIEhBTkQKKzxVMkYzRj4gIjxVNjI0Qj4iCislIEtBTkdYSSBSQURJQ0FMIEJSQU5DSAorPFUyRjQwPiAiPFU2NTJGPiIKKyUgS0FOR1hJIFJBRElDQUwgUkFQCis8VTJGNDE+ICI8VTY1MzQ+IgorJSBLQU5HWEkgUkFESUNBTCBTQ1JJUFQKKzxVMkY0Mj4gIjxVNjU4Nz4iCislIEtBTkdYSSBSQURJQ0FMIERJUFBFUgorPFUyRjQzPiAiPFU2NTk3PiIKKyUgS0FOR1hJIFJBRElDQUwgQVhFCis8VTJGNDQ+ICI8VTY1QTQ+IgorJSBLQU5HWEkgUkFESUNBTCBTUVVBUkUKKzxVMkY0NT4gIjxVNjVCOT4iCislIEtBTkdYSSBSQURJQ0FMIE5PVAorPFUyRjQ2PiAiPFU2NUUwPiIKKyUgS0FOR1hJIFJBRElDQUwgU1VOCis8VTJGNDc+ICI8VTY1RTU+IgorJSBLQU5HWEkgUkFESUNBTCBTQVkKKzxVMkY0OD4gIjxVNjZGMD4iCislIEtBTkdYSSBSQURJQ0FMIE1PT04KKzxVMkY0OT4gIjxVNjcwOD4iCislIEtBTkdYSSBSQURJQ0FMIFRSRUUKKzxVMkY0QT4gIjxVNjcyOD4iCislIEtBTkdYSSBSQURJQ0FMIExBQ0sKKzxVMkY0Qj4gIjxVNkIyMD4iCislIEtBTkdYSSBSQURJQ0FMIFNUT1AKKzxVMkY0Qz4gIjxVNkI2Mj4iCislIEtBTkdYSSBSQURJQ0FMIERFQVRICis8VTJGNEQ+ICI8VTZCNzk+IgorJSBLQU5HWEkgUkFESUNBTCBXRUFQT04KKzxVMkY0RT4gIjxVNkJCMz4iCislIEtBTkdYSSBSQURJQ0FMIERPIE5PVAorPFUyRjRGPiAiPFU2QkNCPiIKKyUgS0FOR1hJIFJBRElDQUwgQ09NUEFSRQorPFUyRjUwPiAiPFU2QkQ0PiIKKyUgS0FOR1hJIFJBRElDQUwgRlVSCis8VTJGNTE+ICI8VTZCREI+IgorJSBLQU5HWEkgUkFESUNBTCBDTEFOCis8VTJGNTI+ICI8VTZDMEY+IgorJSBLQU5HWEkgUkFESUNBTCBTVEVBTQorPFUyRjUzPiAiPFU2QzE0PiIKKyUgS0FOR1hJIFJBRElDQUwgV0FURVIKKzxVMkY1ND4gIjxVNkMzND4iCislIEtBTkdYSSBSQURJQ0FMIEZJUkUKKzxVMkY1NT4gIjxVNzA2Qj4iCislIEtBTkdYSSBSQURJQ0FMIENMQVcKKzxVMkY1Nj4gIjxVNzIyQT4iCislIEtBTkdYSSBSQURJQ0FMIEZBVEhFUgorPFUyRjU3PiAiPFU3MjM2PiIKKyUgS0FOR1hJIFJBRElDQUwgRE9VQkxFIFgKKzxVMkY1OD4gIjxVNzIzQj4iCislIEtBTkdYSSBSQURJQ0FMIEhBTEYgVFJFRSBUUlVOSworPFUyRjU5PiAiPFU3MjNGPiIKKyUgS0FOR1hJIFJBRElDQUwgU0xJQ0UKKzxVMkY1QT4gIjxVNzI0Nz4iCislIEtBTkdYSSBSQURJQ0FMIEZBTkcKKzxVMkY1Qj4gIjxVNzI1OT4iCislIEtBTkdYSSBSQURJQ0FMIENPVworPFUyRjVDPiAiPFU3MjVCPiIKKyUgS0FOR1hJIFJBRElDQUwgRE9HCis8VTJGNUQ+ICI8VTcyQUM+IgorJSBLQU5HWEkgUkFESUNBTCBQUk9GT1VORAorPFUyRjVFPiAiPFU3Mzg0PiIKKyUgS0FOR1hJIFJBRElDQUwgSkFERQorPFUyRjVGPiAiPFU3Mzg5PiIKKyUgS0FOR1hJIFJBRElDQUwgTUVMT04KKzxVMkY2MD4gIjxVNzREQz4iCislIEtBTkdYSSBSQURJQ0FMIFRJTEUKKzxVMkY2MT4gIjxVNzRFNj4iCislIEtBTkdYSSBSQURJQ0FMIFNXRUVUCis8VTJGNjI+ICI8VTc1MTg+IgorJSBLQU5HWEkgUkFESUNBTCBMSUZFCis8VTJGNjM+ICI8VTc1MUY+IgorJSBLQU5HWEkgUkFESUNBTCBVU0UKKzxVMkY2ND4gIjxVNzUyOD4iCislIEtBTkdYSSBSQURJQ0FMIEZJRUxECis8VTJGNjU+ICI8VTc1MzA+IgorJSBLQU5HWEkgUkFESUNBTCBCT0xUIE9GIENMT1RICis8VTJGNjY+ICI8VTc1OEI+IgorJSBLQU5HWEkgUkFESUNBTCBTSUNLTkVTUworPFUyRjY3PiAiPFU3NTkyPiIKKyUgS0FOR1hJIFJBRElDQUwgRE9UVEVEIFRFTlQKKzxVMkY2OD4gIjxVNzY3Nj4iCislIEtBTkdYSSBSQURJQ0FMIFdISVRFCis8VTJGNjk+ICI8VTc2N0Q+IgorJSBLQU5HWEkgUkFESUNBTCBTS0lOCis8VTJGNkE+ICI8VTc2QUU+IgorJSBLQU5HWEkgUkFESUNBTCBESVNICis8VTJGNkI+ICI8VTc2QkY+IgorJSBLQU5HWEkgUkFESUNBTCBFWUUKKzxVMkY2Qz4gIjxVNzZFRT4iCislIEtBTkdYSSBSQURJQ0FMIFNQRUFSCis8VTJGNkQ+ICI8VTc3REI+IgorJSBLQU5HWEkgUkFESUNBTCBBUlJPVworPFUyRjZFPiAiPFU3N0UyPiIKKyUgS0FOR1hJIFJBRElDQUwgU1RPTkUKKzxVMkY2Rj4gIjxVNzdGMz4iCislIEtBTkdYSSBSQURJQ0FMIFNQSVJJVAorPFUyRjcwPiAiPFU3OTNBPiIKKyUgS0FOR1hJIFJBRElDQUwgVFJBQ0sKKzxVMkY3MT4gIjxVNzlCOD4iCislIEtBTkdYSSBSQURJQ0FMIEdSQUlOCis8VTJGNzI+ICI8VTc5QkU+IgorJSBLQU5HWEkgUkFESUNBTCBDQVZFCis8VTJGNzM+ICI8VTdBNzQ+IgorJSBLQU5HWEkgUkFESUNBTCBTVEFORAorPFUyRjc0PiAiPFU3QUNCPiIKKyUgS0FOR1hJIFJBRElDQUwgQkFNQk9PCis8VTJGNzU+ICI8VTdBRjk+IgorJSBLQU5HWEkgUkFESUNBTCBSSUNFCis8VTJGNzY+ICI8VTdDNzM+IgorJSBLQU5HWEkgUkFESUNBTCBTSUxLCis8VTJGNzc+ICI8VTdDRjg+IgorJSBLQU5HWEkgUkFESUNBTCBKQVIKKzxVMkY3OD4gIjxVN0YzNj4iCislIEtBTkdYSSBSQURJQ0FMIE5FVAorPFUyRjc5PiAiPFU3RjUxPiIKKyUgS0FOR1hJIFJBRElDQUwgU0hFRVAKKzxVMkY3QT4gIjxVN0Y4QT4iCislIEtBTkdYSSBSQURJQ0FMIEZFQVRIRVIKKzxVMkY3Qj4gIjxVN0ZCRD4iCislIEtBTkdYSSBSQURJQ0FMIE9MRAorPFUyRjdDPiAiPFU4MDAxPiIKKyUgS0FOR1hJIFJBRElDQUwgQU5ECis8VTJGN0Q+ICI8VTgwMEM+IgorJSBLQU5HWEkgUkFESUNBTCBQTE9XCis8VTJGN0U+ICI8VTgwMTI+IgorJSBLQU5HWEkgUkFESUNBTCBFQVIKKzxVMkY3Rj4gIjxVODAzMz4iCislIEtBTkdYSSBSQURJQ0FMIEJSVVNICis8VTJGODA+ICI8VTgwN0Y+IgorJSBLQU5HWEkgUkFESUNBTCBNRUFUCis8VTJGODE+ICI8VTgwODk+IgorJSBLQU5HWEkgUkFESUNBTCBNSU5JU1RFUgorPFUyRjgyPiAiPFU4MUUzPiIKKyUgS0FOR1hJIFJBRElDQUwgU0VMRgorPFUyRjgzPiAiPFU4MUVBPiIKKyUgS0FOR1hJIFJBRElDQUwgQVJSSVZFCis8VTJGODQ+ICI8VTgxRjM+IgorJSBLQU5HWEkgUkFESUNBTCBNT1JUQVIKKzxVMkY4NT4gIjxVODFGQz4iCislIEtBTkdYSSBSQURJQ0FMIFRPTkdVRQorPFUyRjg2PiAiPFU4MjBDPiIKKyUgS0FOR1hJIFJBRElDQUwgT1BQT1NFCis8VTJGODc+ICI8VTgyMUI+IgorJSBLQU5HWEkgUkFESUNBTCBCT0FUCis8VTJGODg+ICI8VTgyMUY+IgorJSBLQU5HWEkgUkFESUNBTCBTVE9QUElORworPFUyRjg5PiAiPFU4MjZFPiIKKyUgS0FOR1hJIFJBRElDQUwgQ09MT1IKKzxVMkY4QT4gIjxVODI3Mj4iCislIEtBTkdYSSBSQURJQ0FMIEdSQVNTCis8VTJGOEI+ICI8VTgyNzg+IgorJSBLQU5HWEkgUkFESUNBTCBUSUdFUgorPFUyRjhDPiAiPFU4NjREPiIKKyUgS0FOR1hJIFJBRElDQUwgSU5TRUNUCis8VTJGOEQ+ICI8VTg2NkI+IgorJSBLQU5HWEkgUkFESUNBTCBCTE9PRAorPFUyRjhFPiAiPFU4ODQwPiIKKyUgS0FOR1hJIFJBRElDQUwgV0FMSyBFTkNMT1NVUkUKKzxVMkY4Rj4gIjxVODg0Qz4iCislIEtBTkdYSSBSQURJQ0FMIENMT1RIRVMKKzxVMkY5MD4gIjxVODg2Mz4iCislIEtBTkdYSSBSQURJQ0FMIFdFU1QKKzxVMkY5MT4gIjxVODk3RT4iCislIEtBTkdYSSBSQURJQ0FMIFNFRQorPFUyRjkyPiAiPFU4OThCPiIKKyUgS0FOR1hJIFJBRElDQUwgSE9STgorPFUyRjkzPiAiPFU4OUQyPiIKKyUgS0FOR1hJIFJBRElDQUwgU1BFRUNICis8VTJGOTQ+ICI8VThBMDA+IgorJSBLQU5HWEkgUkFESUNBTCBWQUxMRVkKKzxVMkY5NT4gIjxVOEMzNz4iCislIEtBTkdYSSBSQURJQ0FMIEJFQU4KKzxVMkY5Nj4gIjxVOEM0Nj4iCislIEtBTkdYSSBSQURJQ0FMIFBJRworPFUyRjk3PiAiPFU4QzU1PiIKKyUgS0FOR1hJIFJBRElDQUwgQkFER0VSCis8VTJGOTg+ICI8VThDNzg+IgorJSBLQU5HWEkgUkFESUNBTCBTSEVMTAorPFUyRjk5PiAiPFU4QzlEPiIKKyUgS0FOR1hJIFJBRElDQUwgUkVECis8VTJGOUE+ICI8VThENjQ+IgorJSBLQU5HWEkgUkFESUNBTCBSVU4KKzxVMkY5Qj4gIjxVOEQ3MD4iCislIEtBTkdYSSBSQURJQ0FMIEZPT1QKKzxVMkY5Qz4gIjxVOERCMz4iCislIEtBTkdYSSBSQURJQ0FMIEJPRFkKKzxVMkY5RD4gIjxVOEVBQj4iCislIEtBTkdYSSBSQURJQ0FMIENBUlQKKzxVMkY5RT4gIjxVOEVDQT4iCislIEtBTkdYSSBSQURJQ0FMIEJJVFRFUgorPFUyRjlGPiAiPFU4RjlCPiIKKyUgS0FOR1hJIFJBRElDQUwgTU9STklORworPFUyRkEwPiAiPFU4RkIwPiIKKyUgS0FOR1hJIFJBRElDQUwgV0FMSworPFUyRkExPiAiPFU4RkI1PiIKKyUgS0FOR1hJIFJBRElDQUwgQ0lUWQorPFUyRkEyPiAiPFU5MDkxPiIKKyUgS0FOR1hJIFJBRElDQUwgV0lORQorPFUyRkEzPiAiPFU5MTQ5PiIKKyUgS0FOR1hJIFJBRElDQUwgRElTVElOR1VJU0gKKzxVMkZBND4gIjxVOTFDNj4iCislIEtBTkdYSSBSQURJQ0FMIFZJTExBR0UKKzxVMkZBNT4gIjxVOTFDQz4iCislIEtBTkdYSSBSQURJQ0FMIEdPTEQKKzxVMkZBNj4gIjxVOTFEMT4iCislIEtBTkdYSSBSQURJQ0FMIExPTkcKKzxVMkZBNz4gIjxVOTU3Nz4iCislIEtBTkdYSSBSQURJQ0FMIEdBVEUKKzxVMkZBOD4gIjxVOTU4MD4iCislIEtBTkdYSSBSQURJQ0FMIE1PVU5ECis8VTJGQTk+ICI8VTk2MUM+IgorJSBLQU5HWEkgUkFESUNBTCBTTEFWRQorPFUyRkFBPiAiPFU5NkI2PiIKKyUgS0FOR1hJIFJBRElDQUwgU0hPUlQgVEFJTEVEIEJJUkQKKzxVMkZBQj4gIjxVOTZCOT4iCislIEtBTkdYSSBSQURJQ0FMIFJBSU4KKzxVMkZBQz4gIjxVOTZFOD4iCislIEtBTkdYSSBSQURJQ0FMIEJMVUUKKzxVMkZBRD4gIjxVOTc1MT4iCislIEtBTkdYSSBSQURJQ0FMIFdST05HCis8VTJGQUU+ICI8VTk3NUU+IgorJSBLQU5HWEkgUkFESUNBTCBGQUNFCis8VTJGQUY+ICI8VTk3NjI+IgorJSBLQU5HWEkgUkFESUNBTCBMRUFUSEVSCis8VTJGQjA+ICI8VTk3Njk+IgorJSBLQU5HWEkgUkFESUNBTCBUQU5ORUQgTEVBVEhFUgorPFUyRkIxPiAiPFU5N0NCPiIKKyUgS0FOR1hJIFJBRElDQUwgTEVFSworPFUyRkIyPiAiPFU5N0VEPiIKKyUgS0FOR1hJIFJBRElDQUwgU09VTkQKKzxVMkZCMz4gIjxVOTdGMz4iCislIEtBTkdYSSBSQURJQ0FMIExFQUYKKzxVMkZCND4gIjxVOTgwMT4iCislIEtBTkdYSSBSQURJQ0FMIFdJTkQKKzxVMkZCNT4gIjxVOThBOD4iCislIEtBTkdYSSBSQURJQ0FMIEZMWQorPFUyRkI2PiAiPFU5OERCPiIKKyUgS0FOR1hJIFJBRElDQUwgRUFUCis8VTJGQjc+ICI8VTk4REY+IgorJSBLQU5HWEkgUkFESUNBTCBIRUFECis8VTJGQjg+ICI8VTk5OTY+IgorJSBLQU5HWEkgUkFESUNBTCBGUkFHUkFOVAorPFUyRkI5PiAiPFU5OTk5PiIKKyUgS0FOR1hJIFJBRElDQUwgSE9SU0UKKzxVMkZCQT4gIjxVOTlBQz4iCislIEtBTkdYSSBSQURJQ0FMIEJPTkUKKzxVMkZCQj4gIjxVOUFBOD4iCislIEtBTkdYSSBSQURJQ0FMIFRBTEwKKzxVMkZCQz4gIjxVOUFEOD4iCislIEtBTkdYSSBSQURJQ0FMIEhBSVIKKzxVMkZCRD4gIjxVOUFERj4iCislIEtBTkdYSSBSQURJQ0FMIEZJR0hUCis8VTJGQkU+ICI8VTlCMjU+IgorJSBLQU5HWEkgUkFESUNBTCBTQUNSSUZJQ0lBTCBXSU5FCis8VTJGQkY+ICI8VTlCMkY+IgorJSBLQU5HWEkgUkFESUNBTCBDQVVMRFJPTgorPFUyRkMwPiAiPFU5QjMyPiIKKyUgS0FOR1hJIFJBRElDQUwgR0hPU1QKKzxVMkZDMT4gIjxVOUIzQz4iCislIEtBTkdYSSBSQURJQ0FMIEZJU0gKKzxVMkZDMj4gIjxVOUI1QT4iCislIEtBTkdYSSBSQURJQ0FMIEJJUkQKKzxVMkZDMz4gIjxVOUNFNT4iCislIEtBTkdYSSBSQURJQ0FMIFNBTFQKKzxVMkZDND4gIjxVOUU3NT4iCislIEtBTkdYSSBSQURJQ0FMIERFRVIKKzxVMkZDNT4gIjxVOUU3Rj4iCislIEtBTkdYSSBSQURJQ0FMIFdIRUFUCis8VTJGQzY+ICI8VTlFQTU+IgorJSBLQU5HWEkgUkFESUNBTCBIRU1QCis8VTJGQzc+ICI8VTlFQkI+IgorJSBLQU5HWEkgUkFESUNBTCBZRUxMT1cKKzxVMkZDOD4gIjxVOUVDMz4iCislIEtBTkdYSSBSQURJQ0FMIE1JTExFVAorPFUyRkM5PiAiPFU5RUNEPiIKKyUgS0FOR1hJIFJBRElDQUwgQkxBQ0sKKzxVMkZDQT4gIjxVOUVEMT4iCislIEtBTkdYSSBSQURJQ0FMIEVNQlJPSURFUlkKKzxVMkZDQj4gIjxVOUVGOT4iCislIEtBTkdYSSBSQURJQ0FMIEZST0cKKzxVMkZDQz4gIjxVOUVGRD4iCislIEtBTkdYSSBSQURJQ0FMIFRSSVBPRAorPFUyRkNEPiAiPFU5RjBFPiIKKyUgS0FOR1hJIFJBRElDQUwgRFJVTQorPFUyRkNFPiAiPFU5RjEzPiIKKyUgS0FOR1hJIFJBRElDQUwgUkFUCis8VTJGQ0Y+ICI8VTlGMjA+IgorJSBLQU5HWEkgUkFESUNBTCBOT1NFCis8VTJGRDA+ICI8VTlGM0I+IgorJSBLQU5HWEkgUkFESUNBTCBFVkVOCis8VTJGRDE+ICI8VTlGNEE+IgorJSBLQU5HWEkgUkFESUNBTCBUT09USAorPFUyRkQyPiAiPFU5RjUyPiIKKyUgS0FOR1hJIFJBRElDQUwgRFJBR09OCis8VTJGRDM+ICI8VTlGOEQ+IgorJSBLQU5HWEkgUkFESUNBTCBUVVJUTEUKKzxVMkZEND4gIjxVOUY5Qz4iCislIEtBTkdYSSBSQURJQ0FMIEZMVVRFCis8VTJGRDU+ICI8VTlGQTA+IgorJSBDSVJDTEVEIFBPU1RBTCBNQVJLCis8VTMwMzY+ICI8VTMwMTI+IgorJSBIQU5HWkhPVSBOVU1FUkFMIFRFTgorPFUzMDM4PiAiPFU1MzQxPiIKKyUgSEFOR1pIT1UgTlVNRVJBTCBUV0VOVFkKKzxVMzAzOT4gIjxVNTM0ND4iCislIEhBTkdaSE9VIE5VTUVSQUwgVEhJUlRZCis8VTMwM0E+ICI8VTUzNDU+IgorJSBLQVRBS0FOQS1ISVJBR0FOQSBWT0lDRUQgU09VTkQgTUFSSworPFUzMDlCPiAiPFUwMDIwPjxVMzA5OT4iCislIEtBVEFLQU5BLUhJUkFHQU5BIFNFTUktVk9JQ0VEIFNPVU5EIE1BUksKKzxVMzA5Qz4gIjxVMDAyMD48VTMwOUE+IgorJSBIQU5HVUwgTEVUVEVSIEtJWUVPSworPFUzMTMxPiAiPFUxMTAwPiIKKyUgSEFOR1VMIExFVFRFUiBTU0FOR0tJWUVPSworPFUzMTMyPiAiPFUxMTAxPiIKKyUgSEFOR1VMIExFVFRFUiBLSVlFT0stU0lPUworPFUzMTMzPiAiPFUxMUFBPiIKKyUgSEFOR1VMIExFVFRFUiBOSUVVTgorPFUzMTM0PiAiPFUxMTAyPiIKKyUgSEFOR1VMIExFVFRFUiBOSUVVTi1DSUVVQworPFUzMTM1PiAiPFUxMUFDPiIKKyUgSEFOR1VMIExFVFRFUiBOSUVVTi1ISUVVSAorPFUzMTM2PiAiPFUxMUFEPiIKKyUgSEFOR1VMIExFVFRFUiBUSUtFVVQKKzxVMzEzNz4gIjxVMTEwMz4iCislIEhBTkdVTCBMRVRURVIgU1NBTkdUSUtFVVQKKzxVMzEzOD4gIjxVMTEwND4iCislIEhBTkdVTCBMRVRURVIgUklFVUwKKzxVMzEzOT4gIjxVMTEwNT4iCislIEhBTkdVTCBMRVRURVIgUklFVUwtS0lZRU9LCis8VTMxM0E+ICI8VTExQjA+IgorJSBIQU5HVUwgTEVUVEVSIFJJRVVMLU1JRVVNCis8VTMxM0I+ICI8VTExQjE+IgorJSBIQU5HVUwgTEVUVEVSIFJJRVVMLVBJRVVQCis8VTMxM0M+ICI8VTExQjI+IgorJSBIQU5HVUwgTEVUVEVSIFJJRVVMLVNJT1MKKzxVMzEzRD4gIjxVMTFCMz4iCislIEhBTkdVTCBMRVRURVIgUklFVUwtVEhJRVVUSAorPFUzMTNFPiAiPFUxMUI0PiIKKyUgSEFOR1VMIExFVFRFUiBSSUVVTC1QSElFVVBICis8VTMxM0Y+ICI8VTExQjU+IgorJSBIQU5HVUwgTEVUVEVSIFJJRVVMLUhJRVVICis8VTMxNDA+ICI8VTExMUE+IgorJSBIQU5HVUwgTEVUVEVSIE1JRVVNCis8VTMxNDE+ICI8VTExMDY+IgorJSBIQU5HVUwgTEVUVEVSIFBJRVVQCis8VTMxNDI+ICI8VTExMDc+IgorJSBIQU5HVUwgTEVUVEVSIFNTQU5HUElFVVAKKzxVMzE0Mz4gIjxVMTEwOD4iCislIEhBTkdVTCBMRVRURVIgUElFVVAtU0lPUworPFUzMTQ0PiAiPFUxMTIxPiIKKyUgSEFOR1VMIExFVFRFUiBTSU9TCis8VTMxNDU+ICI8VTExMDk+IgorJSBIQU5HVUwgTEVUVEVSIFNTQU5HU0lPUworPFUzMTQ2PiAiPFUxMTBBPiIKKyUgSEFOR1VMIExFVFRFUiBJRVVORworPFUzMTQ3PiAiPFUxMTBCPiIKKyUgSEFOR1VMIExFVFRFUiBDSUVVQworPFUzMTQ4PiAiPFUxMTBDPiIKKyUgSEFOR1VMIExFVFRFUiBTU0FOR0NJRVVDCis8VTMxNDk+ICI8VTExMEQ+IgorJSBIQU5HVUwgTEVUVEVSIENISUVVQ0gKKzxVMzE0QT4gIjxVMTEwRT4iCislIEhBTkdVTCBMRVRURVIgS0hJRVVLSAorPFUzMTRCPiAiPFUxMTBGPiIKKyUgSEFOR1VMIExFVFRFUiBUSElFVVRICis8VTMxNEM+ICI8VTExMTA+IgorJSBIQU5HVUwgTEVUVEVSIFBISUVVUEgKKzxVMzE0RD4gIjxVMTExMT4iCislIEhBTkdVTCBMRVRURVIgSElFVUgKKzxVMzE0RT4gIjxVMTExMj4iCislIEhBTkdVTCBMRVRURVIgQQorPFUzMTRGPiAiPFUxMTYxPiIKKyUgSEFOR1VMIExFVFRFUiBBRQorPFUzMTUwPiAiPFUxMTYyPiIKKyUgSEFOR1VMIExFVFRFUiBZQQorPFUzMTUxPiAiPFUxMTYzPiIKKyUgSEFOR1VMIExFVFRFUiBZQUUKKzxVMzE1Mj4gIjxVMTE2ND4iCislIEhBTkdVTCBMRVRURVIgRU8KKzxVMzE1Mz4gIjxVMTE2NT4iCislIEhBTkdVTCBMRVRURVIgRQorPFUzMTU0PiAiPFUxMTY2PiIKKyUgSEFOR1VMIExFVFRFUiBZRU8KKzxVMzE1NT4gIjxVMTE2Nz4iCislIEhBTkdVTCBMRVRURVIgWUUKKzxVMzE1Nj4gIjxVMTE2OD4iCislIEhBTkdVTCBMRVRURVIgTworPFUzMTU3PiAiPFUxMTY5PiIKKyUgSEFOR1VMIExFVFRFUiBXQQorPFUzMTU4PiAiPFUxMTZBPiIKKyUgSEFOR1VMIExFVFRFUiBXQUUKKzxVMzE1OT4gIjxVMTE2Qj4iCislIEhBTkdVTCBMRVRURVIgT0UKKzxVMzE1QT4gIjxVMTE2Qz4iCislIEhBTkdVTCBMRVRURVIgWU8KKzxVMzE1Qj4gIjxVMTE2RD4iCislIEhBTkdVTCBMRVRURVIgVQorPFUzMTVDPiAiPFUxMTZFPiIKKyUgSEFOR1VMIExFVFRFUiBXRU8KKzxVMzE1RD4gIjxVMTE2Rj4iCislIEhBTkdVTCBMRVRURVIgV0UKKzxVMzE1RT4gIjxVMTE3MD4iCislIEhBTkdVTCBMRVRURVIgV0kKKzxVMzE1Rj4gIjxVMTE3MT4iCislIEhBTkdVTCBMRVRURVIgWVUKKzxVMzE2MD4gIjxVMTE3Mj4iCislIEhBTkdVTCBMRVRURVIgRVUKKzxVMzE2MT4gIjxVMTE3Mz4iCislIEhBTkdVTCBMRVRURVIgWUkKKzxVMzE2Mj4gIjxVMTE3ND4iCislIEhBTkdVTCBMRVRURVIgSQorPFUzMTYzPiAiPFUxMTc1PiIKKyUgSEFOR1VMIEZJTExFUgorPFUzMTY0PiAiPFUxMTYwPiIKKyUgSEFOR1VMIExFVFRFUiBTU0FOR05JRVVOCis8VTMxNjU+ICI8VTExMTQ+IgorJSBIQU5HVUwgTEVUVEVSIE5JRVVOLVRJS0VVVAorPFUzMTY2PiAiPFUxMTE1PiIKKyUgSEFOR1VMIExFVFRFUiBOSUVVTi1TSU9TCis8VTMxNjc+ICI8VTExQzc+IgorJSBIQU5HVUwgTEVUVEVSIE5JRVVOLVBBTlNJT1MKKzxVMzE2OD4gIjxVMTFDOD4iCislIEhBTkdVTCBMRVRURVIgUklFVUwtS0lZRU9LLVNJT1MKKzxVMzE2OT4gIjxVMTFDQz4iCislIEhBTkdVTCBMRVRURVIgUklFVUwtVElLRVVUCis8VTMxNkE+ICI8VTExQ0U+IgorJSBIQU5HVUwgTEVUVEVSIFJJRVVMLVBJRVVQLVNJT1MKKzxVMzE2Qj4gIjxVMTFEMz4iCislIEhBTkdVTCBMRVRURVIgUklFVUwtUEFOU0lPUworPFUzMTZDPiAiPFUxMUQ3PiIKKyUgSEFOR1VMIExFVFRFUiBSSUVVTC1ZRU9SSU5ISUVVSAorPFUzMTZEPiAiPFUxMUQ5PiIKKyUgSEFOR1VMIExFVFRFUiBNSUVVTS1QSUVVUAorPFUzMTZFPiAiPFUxMTFDPiIKKyUgSEFOR1VMIExFVFRFUiBNSUVVTS1TSU9TCis8VTMxNkY+ICI8VTExREQ+IgorJSBIQU5HVUwgTEVUVEVSIE1JRVVNLVBBTlNJT1MKKzxVMzE3MD4gIjxVMTFERj4iCislIEhBTkdVTCBMRVRURVIgS0FQWUVPVU5NSUVVTQorPFUzMTcxPiAiPFUxMTFEPiIKKyUgSEFOR1VMIExFVFRFUiBQSUVVUC1LSVlFT0sKKzxVMzE3Mj4gIjxVMTExRT4iCislIEhBTkdVTCBMRVRURVIgUElFVVAtVElLRVVUCis8VTMxNzM+ICI8VTExMjA+IgorJSBIQU5HVUwgTEVUVEVSIFBJRVVQLVNJT1MtS0lZRU9LCis8VTMxNzQ+ICI8VTExMjI+IgorJSBIQU5HVUwgTEVUVEVSIFBJRVVQLVNJT1MtVElLRVVUCis8VTMxNzU+ICI8VTExMjM+IgorJSBIQU5HVUwgTEVUVEVSIFBJRVVQLUNJRVVDCis8VTMxNzY+ICI8VTExMjc+IgorJSBIQU5HVUwgTEVUVEVSIFBJRVVQLVRISUVVVEgKKzxVMzE3Nz4gIjxVMTEyOT4iCislIEhBTkdVTCBMRVRURVIgS0FQWUVPVU5QSUVVUAorPFUzMTc4PiAiPFUxMTJCPiIKKyUgSEFOR1VMIExFVFRFUiBLQVBZRU9VTlNTQU5HUElFVVAKKzxVMzE3OT4gIjxVMTEyQz4iCislIEhBTkdVTCBMRVRURVIgU0lPUy1LSVlFT0sKKzxVMzE3QT4gIjxVMTEyRD4iCislIEhBTkdVTCBMRVRURVIgU0lPUy1OSUVVTgorPFUzMTdCPiAiPFUxMTJFPiIKKyUgSEFOR1VMIExFVFRFUiBTSU9TLVRJS0VVVAorPFUzMTdDPiAiPFUxMTJGPiIKKyUgSEFOR1VMIExFVFRFUiBTSU9TLVBJRVVQCis8VTMxN0Q+ICI8VTExMzI+IgorJSBIQU5HVUwgTEVUVEVSIFNJT1MtQ0lFVUMKKzxVMzE3RT4gIjxVMTEzNj4iCislIEhBTkdVTCBMRVRURVIgUEFOU0lPUworPFUzMTdGPiAiPFUxMTQwPiIKKyUgSEFOR1VMIExFVFRFUiBTU0FOR0lFVU5HCis8VTMxODA+ICI8VTExNDc+IgorJSBIQU5HVUwgTEVUVEVSIFlFU0lFVU5HCis8VTMxODE+ICI8VTExNEM+IgorJSBIQU5HVUwgTEVUVEVSIFlFU0lFVU5HLVNJT1MKKzxVMzE4Mj4gIjxVMTFGMT4iCislIEhBTkdVTCBMRVRURVIgWUVTSUVVTkctUEFOU0lPUworPFUzMTgzPiAiPFUxMUYyPiIKKyUgSEFOR1VMIExFVFRFUiBLQVBZRU9VTlBISUVVUEgKKzxVMzE4ND4gIjxVMTE1Nz4iCislIEhBTkdVTCBMRVRURVIgU1NBTkdISUVVSAorPFUzMTg1PiAiPFUxMTU4PiIKKyUgSEFOR1VMIExFVFRFUiBZRU9SSU5ISUVVSAorPFUzMTg2PiAiPFUxMTU5PiIKKyUgSEFOR1VMIExFVFRFUiBZTy1ZQQorPFUzMTg3PiAiPFUxMTg0PiIKKyUgSEFOR1VMIExFVFRFUiBZTy1ZQUUKKzxVMzE4OD4gIjxVMTE4NT4iCislIEhBTkdVTCBMRVRURVIgWU8tSQorPFUzMTg5PiAiPFUxMTg4PiIKKyUgSEFOR1VMIExFVFRFUiBZVS1ZRU8KKzxVMzE4QT4gIjxVMTE5MT4iCislIEhBTkdVTCBMRVRURVIgWVUtWUUKKzxVMzE4Qj4gIjxVMTE5Mj4iCislIEhBTkdVTCBMRVRURVIgWVUtSQorPFUzMThDPiAiPFUxMTk0PiIKKyUgSEFOR1VMIExFVFRFUiBBUkFFQQorPFUzMThEPiAiPFUxMTlFPiIKKyUgSEFOR1VMIExFVFRFUiBBUkFFQUUKKzxVMzE4RT4gIjxVMTFBMT4iCislIFBBUkVOVEhFU0laRUQgSEFOR1VMIEtJWUVPSworPFUzMjAwPiAiPFUwMDI4PjxVMTEwMD48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIEhBTkdVTCBOSUVVTgorPFUzMjAxPiAiPFUwMDI4PjxVMTEwMj48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIEhBTkdVTCBUSUtFVVQKKzxVMzIwMj4gIjxVMDAyOD48VTExMDM+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBIQU5HVUwgUklFVUwKKzxVMzIwMz4gIjxVMDAyOD48VTExMDU+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBIQU5HVUwgTUlFVU0KKzxVMzIwND4gIjxVMDAyOD48VTExMDY+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBIQU5HVUwgUElFVVAKKzxVMzIwNT4gIjxVMDAyOD48VTExMDc+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBIQU5HVUwgU0lPUworPFUzMjA2PiAiPFUwMDI4PjxVMTEwOT48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIEhBTkdVTCBJRVVORworPFUzMjA3PiAiPFUwMDI4PjxVMTEwQj48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIEhBTkdVTCBDSUVVQworPFUzMjA4PiAiPFUwMDI4PjxVMTEwQz48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIEhBTkdVTCBDSElFVUNICis8VTMyMDk+ICI8VTAwMjg+PFUxMTBFPjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgSEFOR1VMIEtISUVVS0gKKzxVMzIwQT4gIjxVMDAyOD48VTExMEY+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBIQU5HVUwgVEhJRVVUSAorPFUzMjBCPiAiPFUwMDI4PjxVMTExMD48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIEhBTkdVTCBQSElFVVBICis8VTMyMEM+ICI8VTAwMjg+PFUxMTExPjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgSEFOR1VMIEhJRVVICis8VTMyMEQ+ICI8VTAwMjg+PFUxMTEyPjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgSEFOR1VMIEtJWUVPSyBBCis8VTMyMEU+ICI8VTAwMjg+PFUxMTAwPjxVMTE2MT48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIEhBTkdVTCBOSUVVTiBBCis8VTMyMEY+ICI8VTAwMjg+PFUxMTAyPjxVMTE2MT48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIEhBTkdVTCBUSUtFVVQgQQorPFUzMjEwPiAiPFUwMDI4PjxVMTEwMz48VTExNjE+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBIQU5HVUwgUklFVUwgQQorPFUzMjExPiAiPFUwMDI4PjxVMTEwNT48VTExNjE+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBIQU5HVUwgTUlFVU0gQQorPFUzMjEyPiAiPFUwMDI4PjxVMTEwNj48VTExNjE+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBIQU5HVUwgUElFVVAgQQorPFUzMjEzPiAiPFUwMDI4PjxVMTEwNz48VTExNjE+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBIQU5HVUwgU0lPUyBBCis8VTMyMTQ+ICI8VTAwMjg+PFUxMTA5PjxVMTE2MT48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIEhBTkdVTCBJRVVORyBBCis8VTMyMTU+ICI8VTAwMjg+PFUxMTBCPjxVMTE2MT48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIEhBTkdVTCBDSUVVQyBBCis8VTMyMTY+ICI8VTAwMjg+PFUxMTBDPjxVMTE2MT48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIEhBTkdVTCBDSElFVUNIIEEKKzxVMzIxNz4gIjxVMDAyOD48VTExMEU+PFUxMTYxPjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgSEFOR1VMIEtISUVVS0ggQQorPFUzMjE4PiAiPFUwMDI4PjxVMTEwRj48VTExNjE+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBIQU5HVUwgVEhJRVVUSCBBCis8VTMyMTk+ICI8VTAwMjg+PFUxMTEwPjxVMTE2MT48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIEhBTkdVTCBQSElFVVBIIEEKKzxVMzIxQT4gIjxVMDAyOD48VTExMTE+PFUxMTYxPjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgSEFOR1VMIEhJRVVIIEEKKzxVMzIxQj4gIjxVMDAyOD48VTExMTI+PFUxMTYxPjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgSEFOR1VMIENJRVVDIFUKKzxVMzIxQz4gIjxVMDAyOD48VTExMEM+PFUxMTZFPjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgSURFT0dSQVBIIE9ORQorPFUzMjIwPiAiPFUwMDI4PjxVNEUwMD48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIElERU9HUkFQSCBUV08KKzxVMzIyMT4gIjxVMDAyOD48VTRFOEM+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBJREVPR1JBUEggVEhSRUUKKzxVMzIyMj4gIjxVMDAyOD48VTRFMDk+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBJREVPR1JBUEggRk9VUgorPFUzMjIzPiAiPFUwMDI4PjxVNTZEQj48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIElERU9HUkFQSCBGSVZFCis8VTMyMjQ+ICI8VTAwMjg+PFU0RTk0PjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgSURFT0dSQVBIIFNJWAorPFUzMjI1PiAiPFUwMDI4PjxVNTE2RD48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIElERU9HUkFQSCBTRVZFTgorPFUzMjI2PiAiPFUwMDI4PjxVNEUwMz48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIElERU9HUkFQSCBFSUdIVAorPFUzMjI3PiAiPFUwMDI4PjxVNTE2Qj48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIElERU9HUkFQSCBOSU5FCis8VTMyMjg+ICI8VTAwMjg+PFU0RTVEPjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgSURFT0dSQVBIIFRFTgorPFUzMjI5PiAiPFUwMDI4PjxVNTM0MT48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIElERU9HUkFQSCBNT09OCis8VTMyMkE+ICI8VTAwMjg+PFU2NzA4PjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgSURFT0dSQVBIIEZJUkUKKzxVMzIyQj4gIjxVMDAyOD48VTcwNkI+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBJREVPR1JBUEggV0FURVIKKzxVMzIyQz4gIjxVMDAyOD48VTZDMzQ+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBJREVPR1JBUEggV09PRAorPFUzMjJEPiAiPFUwMDI4PjxVNjcyOD48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIElERU9HUkFQSCBNRVRBTAorPFUzMjJFPiAiPFUwMDI4PjxVOTFEMT48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIElERU9HUkFQSCBFQVJUSAorPFUzMjJGPiAiPFUwMDI4PjxVNTcxRj48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIElERU9HUkFQSCBTVU4KKzxVMzIzMD4gIjxVMDAyOD48VTY1RTU+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBJREVPR1JBUEggU1RPQ0sKKzxVMzIzMT4gIjxVMDAyOD48VTY4MkE+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBJREVPR1JBUEggSEFWRQorPFUzMjMyPiAiPFUwMDI4PjxVNjcwOT48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIElERU9HUkFQSCBTT0NJRVRZCis8VTMyMzM+ICI8VTAwMjg+PFU3OTNFPjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgSURFT0dSQVBIIE5BTUUKKzxVMzIzND4gIjxVMDAyOD48VTU0MEQ+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBJREVPR1JBUEggU1BFQ0lBTAorPFUzMjM1PiAiPFUwMDI4PjxVNzI3OT48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIElERU9HUkFQSCBGSU5BTkNJQUwKKzxVMzIzNj4gIjxVMDAyOD48VThDQTE+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBJREVPR1JBUEggQ09OR1JBVFVMQVRJT04KKzxVMzIzNz4gIjxVMDAyOD48VTc5NUQ+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBJREVPR1JBUEggTEFCT1IKKzxVMzIzOD4gIjxVMDAyOD48VTUyQjQ+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBJREVPR1JBUEggUkVQUkVTRU5UCis8VTMyMzk+ICI8VTAwMjg+PFU0RUUzPjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgSURFT0dSQVBIIENBTEwKKzxVMzIzQT4gIjxVMDAyOD48VTU0N0M+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBJREVPR1JBUEggU1RVRFkKKzxVMzIzQj4gIjxVMDAyOD48VTVCNjY+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBJREVPR1JBUEggU1VQRVJWSVNFCis8VTMyM0M+ICI8VTAwMjg+PFU3NkUzPjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgSURFT0dSQVBIIEVOVEVSUFJJU0UKKzxVMzIzRD4gIjxVMDAyOD48VTRGMDE+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBJREVPR1JBUEggUkVTT1VSQ0UKKzxVMzIzRT4gIjxVMDAyOD48VThDQzc+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBJREVPR1JBUEggQUxMSUFOQ0UKKzxVMzIzRj4gIjxVMDAyOD48VTUzNTQ+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBJREVPR1JBUEggRkVTVElWQUwKKzxVMzI0MD4gIjxVMDAyOD48VTc5NkQ+PFUwMDI5PiIKKyUgUEFSRU5USEVTSVpFRCBJREVPR1JBUEggUkVTVAorPFUzMjQxPiAiPFUwMDI4PjxVNEYxMT48VTAwMjk+IgorJSBQQVJFTlRIRVNJWkVEIElERU9HUkFQSCBTRUxGCis8VTMyNDI+ICI8VTAwMjg+PFU4MUVBPjxVMDAyOT4iCislIFBBUkVOVEhFU0laRUQgSURFT0dSQVBIIFJFQUNICis8VTMyNDM+ICI8VTAwMjg+PFU4MUYzPjxVMDAyOT4iCislIElERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIEpBTlVBUlkKKzxVMzJDMD4gIjxVMDAzMT48VTY3MDg+IgorJSBJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBGRUJSVUFSWQorPFUzMkMxPiAiPFUwMDMyPjxVNjcwOD4iCislIElERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIE1BUkNICis8VTMyQzI+ICI8VTAwMzM+PFU2NzA4PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgQVBSSUwKKzxVMzJDMz4gIjxVMDAzND48VTY3MDg+IgorJSBJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBNQVkKKzxVMzJDND4gIjxVMDAzNT48VTY3MDg+IgorJSBJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBKVU5FCis8VTMyQzU+ICI8VTAwMzY+PFU2NzA4PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgSlVMWQorPFUzMkM2PiAiPFUwMDM3PjxVNjcwOD4iCislIElERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIEFVR1VTVAorPFUzMkM3PiAiPFUwMDM4PjxVNjcwOD4iCislIElERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIFNFUFRFTUJFUgorPFUzMkM4PiAiPFUwMDM5PjxVNjcwOD4iCislIElERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIE9DVE9CRVIKKzxVMzJDOT4gIjxVMDAzMT48VTAwMzA+PFU2NzA4PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgTk9WRU1CRVIKKzxVMzJDQT4gIjxVMDAzMT48VTAwMzE+PFU2NzA4PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREVDRU1CRVIKKzxVMzJDQj4gIjxVMDAzMT48VTAwMzI+PFU2NzA4PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgSE9VUiBaRVJPCis8VTMzNTg+ICI8VTAwMzA+PFU3MEI5PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgSE9VUiBPTkUKKzxVMzM1OT4gIjxVMDAzMT48VTcwQjk+IgorJSBJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBIT1VSIFRXTworPFUzMzVBPiAiPFUwMDMyPjxVNzBCOT4iCislIElERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIEhPVVIgVEhSRUUKKzxVMzM1Qj4gIjxVMDAzMz48VTcwQjk+IgorJSBJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBIT1VSIEZPVVIKKzxVMzM1Qz4gIjxVMDAzND48VTcwQjk+IgorJSBJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBIT1VSIEZJVkUKKzxVMzM1RD4gIjxVMDAzNT48VTcwQjk+IgorJSBJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBIT1VSIFNJWAorPFUzMzVFPiAiPFUwMDM2PjxVNzBCOT4iCislIElERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIEhPVVIgU0VWRU4KKzxVMzM1Rj4gIjxVMDAzNz48VTcwQjk+IgorJSBJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBIT1VSIEVJR0hUCis8VTMzNjA+ICI8VTAwMzg+PFU3MEI5PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgSE9VUiBOSU5FCis8VTMzNjE+ICI8VTAwMzk+PFU3MEI5PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgSE9VUiBURU4KKzxVMzM2Mj4gIjxVMDAzMT48VTAwMzA+PFU3MEI5PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgSE9VUiBFTEVWRU4KKzxVMzM2Mz4gIjxVMDAzMT48VTAwMzE+PFU3MEI5PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgSE9VUiBUV0VMVkUKKzxVMzM2ND4gIjxVMDAzMT48VTAwMzI+PFU3MEI5PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgSE9VUiBUSElSVEVFTgorPFUzMzY1PiAiPFUwMDMxPjxVMDAzMz48VTcwQjk+IgorJSBJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBIT1VSIEZPVVJURUVOCis8VTMzNjY+ICI8VTAwMzE+PFUwMDM0PjxVNzBCOT4iCislIElERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIEhPVVIgRklGVEVFTgorPFUzMzY3PiAiPFUwMDMxPjxVMDAzNT48VTcwQjk+IgorJSBJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBIT1VSIFNJWFRFRU4KKzxVMzM2OD4gIjxVMDAzMT48VTAwMzY+PFU3MEI5PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgSE9VUiBTRVZFTlRFRU4KKzxVMzM2OT4gIjxVMDAzMT48VTAwMzc+PFU3MEI5PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgSE9VUiBFSUdIVEVFTgorPFUzMzZBPiAiPFUwMDMxPjxVMDAzOD48VTcwQjk+IgorJSBJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBIT1VSIE5JTkVURUVOCis8VTMzNkI+ICI8VTAwMzE+PFUwMDM5PjxVNzBCOT4iCislIElERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIEhPVVIgVFdFTlRZCis8VTMzNkM+ICI8VTAwMzI+PFUwMDMwPjxVNzBCOT4iCislIElERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIEhPVVIgVFdFTlRZLU9ORQorPFUzMzZEPiAiPFUwMDMyPjxVMDAzMT48VTcwQjk+IgorJSBJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBIT1VSIFRXRU5UWS1UV08KKzxVMzM2RT4gIjxVMDAzMj48VTAwMzI+PFU3MEI5PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgSE9VUiBUV0VOVFktVEhSRUUKKzxVMzM2Rj4gIjxVMDAzMj48VTAwMzM+PFU3MEI5PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgSE9VUiBUV0VOVFktRk9VUgorPFUzMzcwPiAiPFUwMDMyPjxVMDAzND48VTcwQjk+IgorJSBJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBEQVkgT05FCis8VTMzRTA+ICI8VTAwMzE+PFU2NUU1PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIFRXTworPFUzM0UxPiAiPFUwMDMyPjxVNjVFNT4iCislIElERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIERBWSBUSFJFRQorPFUzM0UyPiAiPFUwMDMzPjxVNjVFNT4iCislIElERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIERBWSBGT1VSCis8VTMzRTM+ICI8VTAwMzQ+PFU2NUU1PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIEZJVkUKKzxVMzNFND4gIjxVMDAzNT48VTY1RTU+IgorJSBJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBEQVkgU0lYCis8VTMzRTU+ICI8VTAwMzY+PFU2NUU1PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIFNFVkVOCis8VTMzRTY+ICI8VTAwMzc+PFU2NUU1PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIEVJR0hUCis8VTMzRTc+ICI8VTAwMzg+PFU2NUU1PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIE5JTkUKKzxVMzNFOD4gIjxVMDAzOT48VTY1RTU+IgorJSBJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBEQVkgVEVOCis8VTMzRTk+ICI8VTAwMzE+PFUwMDMwPjxVNjVFNT4iCislIElERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIERBWSBFTEVWRU4KKzxVMzNFQT4gIjxVMDAzMT48VTAwMzE+PFU2NUU1PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIFRXRUxWRQorPFUzM0VCPiAiPFUwMDMxPjxVMDAzMj48VTY1RTU+IgorJSBJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBEQVkgVEhJUlRFRU4KKzxVMzNFQz4gIjxVMDAzMT48VTAwMzM+PFU2NUU1PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIEZPVVJURUVOCis8VTMzRUQ+ICI8VTAwMzE+PFUwMDM0PjxVNjVFNT4iCislIElERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIERBWSBGSUZURUVOCis8VTMzRUU+ICI8VTAwMzE+PFUwMDM1PjxVNjVFNT4iCislIElERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIERBWSBTSVhURUVOCis8VTMzRUY+ICI8VTAwMzE+PFUwMDM2PjxVNjVFNT4iCislIElERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIERBWSBTRVZFTlRFRU4KKzxVMzNGMD4gIjxVMDAzMT48VTAwMzc+PFU2NUU1PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIEVJR0hURUVOCis8VTMzRjE+ICI8VTAwMzE+PFUwMDM4PjxVNjVFNT4iCislIElERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIERBWSBOSU5FVEVFTgorPFUzM0YyPiAiPFUwMDMxPjxVMDAzOT48VTY1RTU+IgorJSBJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBEQVkgVFdFTlRZCis8VTMzRjM+ICI8VTAwMzI+PFUwMDMwPjxVNjVFNT4iCislIElERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIERBWSBUV0VOVFktT05FCis8VTMzRjQ+ICI8VTAwMzI+PFUwMDMxPjxVNjVFNT4iCislIElERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIERBWSBUV0VOVFktVFdPCis8VTMzRjU+ICI8VTAwMzI+PFUwMDMyPjxVNjVFNT4iCislIElERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIERBWSBUV0VOVFktVEhSRUUKKzxVMzNGNj4gIjxVMDAzMj48VTAwMzM+PFU2NUU1PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIFRXRU5UWS1GT1VSCis8VTMzRjc+ICI8VTAwMzI+PFUwMDM0PjxVNjVFNT4iCislIElERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIERBWSBUV0VOVFktRklWRQorPFUzM0Y4PiAiPFUwMDMyPjxVMDAzNT48VTY1RTU+IgorJSBJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBEQVkgVFdFTlRZLVNJWAorPFUzM0Y5PiAiPFUwMDMyPjxVMDAzNj48VTY1RTU+IgorJSBJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBEQVkgVFdFTlRZLVNFVkVOCis8VTMzRkE+ICI8VTAwMzI+PFUwMDM3PjxVNjVFNT4iCislIElERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIERBWSBUV0VOVFktRUlHSFQKKzxVMzNGQj4gIjxVMDAzMj48VTAwMzg+PFU2NUU1PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIFRXRU5UWS1OSU5FCis8VTMzRkM+ICI8VTAwMzI+PFUwMDM5PjxVNjVFNT4iCislIElERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIERBWSBUSElSVFkKKzxVMzNGRD4gIjxVMDAzMz48VTAwMzA+PFU2NUU1PiIKKyUgSURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIFRISVJUWS1PTkUKKzxVMzNGRT4gIjxVMDAzMz48VTAwMzE+PFU2NUU1PiIKKyUgTEFUSU4gU01BTEwgTElHQVRVUkUgRkYKKzxVRkIwMD4gIjxVMDA2Nj48VTAwNjY+IgorJSBMQVRJTiBTTUFMTCBMSUdBVFVSRSBGSQorPFVGQjAxPiAiPFUwMDY2PjxVMDA2OT4iCislIExBVElOIFNNQUxMIExJR0FUVVJFIEZMCis8VUZCMDI+ICI8VTAwNjY+PFUwMDZDPiIKKyUgTEFUSU4gU01BTEwgTElHQVRVUkUgRkZJCis8VUZCMDM+ICI8VTAwNjY+PFUwMDY2PjxVMDA2OT4iCislIExBVElOIFNNQUxMIExJR0FUVVJFIEZGTAorPFVGQjA0PiAiPFUwMDY2PjxVMDA2Nj48VTAwNkM+IgorJSBMQVRJTiBTTUFMTCBMSUdBVFVSRSBMT05HIFMgVAorPFVGQjA1PiAiPFUwMTdGPjxVMDA3ND4iCislIExBVElOIFNNQUxMIExJR0FUVVJFIFNUCis8VUZCMDY+ICI8VTAwNzM+PFUwMDc0PiIKKyUgQVJNRU5JQU4gU01BTEwgTElHQVRVUkUgTUVOIE5PVworPFVGQjEzPiAiPFUwNTc0PjxVMDU3Nj4iCislIEFSTUVOSUFOIFNNQUxMIExJR0FUVVJFIE1FTiBFQ0gKKzxVRkIxND4gIjxVMDU3ND48VTA1NjU+IgorJSBBUk1FTklBTiBTTUFMTCBMSUdBVFVSRSBNRU4gSU5JCis8VUZCMTU+ICI8VTA1NzQ+PFUwNTZCPiIKKyUgQVJNRU5JQU4gU01BTEwgTElHQVRVUkUgVkVXIE5PVworPFVGQjE2PiAiPFUwNTdFPjxVMDU3Nj4iCislIEFSTUVOSUFOIFNNQUxMIExJR0FUVVJFIE1FTiBYRUgKKzxVRkIxNz4gIjxVMDU3ND48VTA1NkQ+IgorJSBIRUJSRVcgTElHQVRVUkUgQUxFRiBMQU1FRAorPFVGQjRGPiAiPFUwNUQwPjxVMDVEQz4iCislIERBU0hFRCBPVkVSTElORQorPFVGRTQ5PiAiPFUyMDNFPiIKKyUgQ0VOVFJFTElORSBPVkVSTElORQorPFVGRTRBPiAiPFUyMDNFPiIKKyUgV0FWWSBPVkVSTElORQorPFVGRTRCPiAiPFUyMDNFPiIKKyUgRE9VQkxFIFdBVlkgT1ZFUkxJTkUKKzxVRkU0Qz4gIjxVMjAzRT4iCislIERBU0hFRCBMT1cgTElORQorPFVGRTREPiAiPFUwMDVGPiIKKyUgQ0VOVFJFTElORSBMT1cgTElORQorPFVGRTRFPiAiPFUwMDVGPiIKKyUgV0FWWSBMT1cgTElORQorPFVGRTRGPiAiPFUwMDVGPiIKKwordHJhbnNsaXRfZW5kCisKK0VORCBMQ19DVFlQRQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdHJhbnNsaXRfZm9udCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RyYW5zbGl0X2ZvbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM0N2JkNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RyYW5zbGl0X2ZvbnQKQEAgLTAsMCArMSwxMDUzIEBACitlc2NhcGVfY2hhciAvCitjb21tZW50X2NoYXIgJQorCislIFRyYW5zbGl0ZXJhdGlvbnMgb2YgZm9udCBlcXVpdmFsZW50cy4KKyUgR2VuZXJhdGVkIHRocm91Z2gKKyUgICAkIGdyZXAgJ15bXjtdKjtbXjtdKjtbXjtdKjtbXjtdKjtbXjtdKjs8Zm9udD5bXjtdKjsnIFVuaWNvZGVEYXRhLnR4dCB8IFwKKyUgICAgIHNlZCAtZSAncy9eXChbXjtdKlwpO1woW147XSpcKTtbXjtdKjtbXjtdKjtbXjtdKjs8Zm9udD4gXChbXjtdKlwpOy4qJC88VVwxPiA8VVwzPiAlIFwyLycKKworTENfQ1RZUEUKKwordHJhbnNsaXRfc3RhcnQKKworPFUyMTAyPiA8VTAwNDM+ICUgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIEMKKzxVMjEwQT4gPFUwMDY3PiAlIFNDUklQVCBTTUFMTCBHCis8VTIxMEI+IDxVMDA0OD4gJSBTQ1JJUFQgQ0FQSVRBTCBICis8VTIxMEM+IDxVMDA0OD4gJSBCTEFDSy1MRVRURVIgQ0FQSVRBTCBICis8VTIxMEQ+IDxVMDA0OD4gJSBET1VCTEUtU1RSVUNLIENBUElUQUwgSAorPFUyMTBFPiA8VTAwNjg+ICUgUExBTkNLIENPTlNUQU5UCis8VTIxMEY+IDxVMDEyNz4gJSBQTEFOQ0sgQ09OU1RBTlQgT1ZFUiBUV08gUEkKKzxVMjExMD4gPFUwMDQ5PiAlIFNDUklQVCBDQVBJVEFMIEkKKzxVMjExMT4gPFUwMDQ5PiAlIEJMQUNLLUxFVFRFUiBDQVBJVEFMIEkKKzxVMjExMj4gPFUwMDRDPiAlIFNDUklQVCBDQVBJVEFMIEwKKzxVMjExMz4gPFUwMDZDPiAlIFNDUklQVCBTTUFMTCBMCis8VTIxMTU+IDxVMDA0RT4gJSBET1VCTEUtU1RSVUNLIENBUElUQUwgTgorPFUyMTE5PiA8VTAwNTA+ICUgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIFAKKzxVMjExQT4gPFUwMDUxPiAlIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBRCis8VTIxMUI+IDxVMDA1Mj4gJSBTQ1JJUFQgQ0FQSVRBTCBSCis8VTIxMUM+IDxVMDA1Mj4gJSBCTEFDSy1MRVRURVIgQ0FQSVRBTCBSCis8VTIxMUQ+IDxVMDA1Mj4gJSBET1VCTEUtU1RSVUNLIENBUElUQUwgUgorPFUyMTI0PiA8VTAwNUE+ICUgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIFoKKzxVMjEyOD4gPFUwMDVBPiAlIEJMQUNLLUxFVFRFUiBDQVBJVEFMIFoKKzxVMjEyQz4gPFUwMDQyPiAlIFNDUklQVCBDQVBJVEFMIEIKKzxVMjEyRD4gPFUwMDQzPiAlIEJMQUNLLUxFVFRFUiBDQVBJVEFMIEMKKzxVMjEyRj4gPFUwMDY1PiAlIFNDUklQVCBTTUFMTCBFCis8VTIxMzA+IDxVMDA0NT4gJSBTQ1JJUFQgQ0FQSVRBTCBFCis8VTIxMzE+IDxVMDA0Nj4gJSBTQ1JJUFQgQ0FQSVRBTCBGCis8VTIxMzM+IDxVMDA0RD4gJSBTQ1JJUFQgQ0FQSVRBTCBNCis8VTIxMzQ+IDxVMDA2Rj4gJSBTQ1JJUFQgU01BTEwgTworPFUyMTM5PiA8VTAwNjk+ICUgSU5GT1JNQVRJT04gU09VUkNFCis8VTIxM0Q+IDxVMDNCMz4gJSBET1VCTEUtU1RSVUNLIFNNQUxMIEdBTU1BCis8VTIxM0U+IDxVMDM5Mz4gJSBET1VCTEUtU1RSVUNLIENBUElUQUwgR0FNTUEKKzxVMjEzRj4gPFUwM0EwPiAlIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBQSQorPFUyMTQwPiA8VTIyMTE+ICUgRE9VQkxFLVNUUlVDSyBOLUFSWSBTVU1NQVRJT04KKzxVMjE0NT4gPFUwMDQ0PiAlIERPVUJMRS1TVFJVQ0sgSVRBTElDIENBUElUQUwgRAorPFUyMTQ2PiA8VTAwNjQ+ICUgRE9VQkxFLVNUUlVDSyBJVEFMSUMgU01BTEwgRAorPFUyMTQ3PiA8VTAwNjU+ICUgRE9VQkxFLVNUUlVDSyBJVEFMSUMgU01BTEwgRQorPFUyMTQ4PiA8VTAwNjk+ICUgRE9VQkxFLVNUUlVDSyBJVEFMSUMgU01BTEwgSQorPFUyMTQ5PiA8VTAwNkE+ICUgRE9VQkxFLVNUUlVDSyBJVEFMSUMgU01BTEwgSgorPFVGQjIwPiA8VTA1RTI+ICUgSEVCUkVXIExFVFRFUiBBTFRFUk5BVElWRSBBWUlOCis8VUZCMjE+IDxVMDVEMD4gJSBIRUJSRVcgTEVUVEVSIFdJREUgQUxFRgorPFVGQjIyPiA8VTA1RDM+ICUgSEVCUkVXIExFVFRFUiBXSURFIERBTEVUCis8VUZCMjM+IDxVMDVEND4gJSBIRUJSRVcgTEVUVEVSIFdJREUgSEUKKzxVRkIyND4gPFUwNURCPiAlIEhFQlJFVyBMRVRURVIgV0lERSBLQUYKKzxVRkIyNT4gPFUwNURDPiAlIEhFQlJFVyBMRVRURVIgV0lERSBMQU1FRAorPFVGQjI2PiA8VTA1REQ+ICUgSEVCUkVXIExFVFRFUiBXSURFIEZJTkFMIE1FTQorPFVGQjI3PiA8VTA1RTg+ICUgSEVCUkVXIExFVFRFUiBXSURFIFJFU0gKKzxVRkIyOD4gPFUwNUVBPiAlIEhFQlJFVyBMRVRURVIgV0lERSBUQVYKKzxVRkIyOT4gPFUwMDJCPiAlIEhFQlJFVyBMRVRURVIgQUxURVJOQVRJVkUgUExVUyBTSUdOCis8VTAwMDFENDAwPiA8VTAwNDE+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBBCis8VTAwMDFENDAxPiA8VTAwNDI+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBCCis8VTAwMDFENDAyPiA8VTAwNDM+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBDCis8VTAwMDFENDAzPiA8VTAwNDQ+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBECis8VTAwMDFENDA0PiA8VTAwNDU+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBFCis8VTAwMDFENDA1PiA8VTAwNDY+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBGCis8VTAwMDFENDA2PiA8VTAwNDc+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBHCis8VTAwMDFENDA3PiA8VTAwNDg+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBICis8VTAwMDFENDA4PiA8VTAwNDk+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBJCis8VTAwMDFENDA5PiA8VTAwNEE+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBKCis8VTAwMDFENDBBPiA8VTAwNEI+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBLCis8VTAwMDFENDBCPiA8VTAwNEM+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBMCis8VTAwMDFENDBDPiA8VTAwNEQ+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBNCis8VTAwMDFENDBEPiA8VTAwNEU+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBOCis8VTAwMDFENDBFPiA8VTAwNEY+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBPCis8VTAwMDFENDBGPiA8VTAwNTA+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBQCis8VTAwMDFENDEwPiA8VTAwNTE+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBRCis8VTAwMDFENDExPiA8VTAwNTI+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBSCis8VTAwMDFENDEyPiA8VTAwNTM+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBTCis8VTAwMDFENDEzPiA8VTAwNTQ+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBUCis8VTAwMDFENDE0PiA8VTAwNTU+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBVCis8VTAwMDFENDE1PiA8VTAwNTY+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBWCis8VTAwMDFENDE2PiA8VTAwNTc+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBXCis8VTAwMDFENDE3PiA8VTAwNTg+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBYCis8VTAwMDFENDE4PiA8VTAwNTk+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBZCis8VTAwMDFENDE5PiA8VTAwNUE+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBaCis8VTAwMDFENDFBPiA8VTAwNjE+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgQQorPFUwMDAxRDQxQj4gPFUwMDYyPiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIEIKKzxVMDAwMUQ0MUM+IDxVMDA2Mz4gJSBNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBDCis8VTAwMDFENDFEPiA8VTAwNjQ+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgRAorPFUwMDAxRDQxRT4gPFUwMDY1PiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIEUKKzxVMDAwMUQ0MUY+IDxVMDA2Nj4gJSBNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBGCis8VTAwMDFENDIwPiA8VTAwNjc+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgRworPFUwMDAxRDQyMT4gPFUwMDY4PiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIEgKKzxVMDAwMUQ0MjI+IDxVMDA2OT4gJSBNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBJCis8VTAwMDFENDIzPiA8VTAwNkE+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgSgorPFUwMDAxRDQyND4gPFUwMDZCPiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIEsKKzxVMDAwMUQ0MjU+IDxVMDA2Qz4gJSBNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBMCis8VTAwMDFENDI2PiA8VTAwNkQ+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgTQorPFUwMDAxRDQyNz4gPFUwMDZFPiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIE4KKzxVMDAwMUQ0Mjg+IDxVMDA2Rj4gJSBNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBPCis8VTAwMDFENDI5PiA8VTAwNzA+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgUAorPFUwMDAxRDQyQT4gPFUwMDcxPiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIFEKKzxVMDAwMUQ0MkI+IDxVMDA3Mj4gJSBNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBSCis8VTAwMDFENDJDPiA8VTAwNzM+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgUworPFUwMDAxRDQyRD4gPFUwMDc0PiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIFQKKzxVMDAwMUQ0MkU+IDxVMDA3NT4gJSBNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBVCis8VTAwMDFENDJGPiA8VTAwNzY+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgVgorPFUwMDAxRDQzMD4gPFUwMDc3PiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIFcKKzxVMDAwMUQ0MzE+IDxVMDA3OD4gJSBNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBYCis8VTAwMDFENDMyPiA8VTAwNzk+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgWQorPFUwMDAxRDQzMz4gPFUwMDdBPiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIFoKKzxVMDAwMUQ0MzQ+IDxVMDA0MT4gJSBNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgQQorPFUwMDAxRDQzNT4gPFUwMDQyPiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBCCis8VTAwMDFENDM2PiA8VTAwNDM+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIEMKKzxVMDAwMUQ0Mzc+IDxVMDA0ND4gJSBNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgRAorPFUwMDAxRDQzOD4gPFUwMDQ1PiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBFCis8VTAwMDFENDM5PiA8VTAwNDY+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIEYKKzxVMDAwMUQ0M0E+IDxVMDA0Nz4gJSBNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgRworPFUwMDAxRDQzQj4gPFUwMDQ4PiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBICis8VTAwMDFENDNDPiA8VTAwNDk+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIEkKKzxVMDAwMUQ0M0Q+IDxVMDA0QT4gJSBNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgSgorPFUwMDAxRDQzRT4gPFUwMDRCPiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBLCis8VTAwMDFENDNGPiA8VTAwNEM+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIEwKKzxVMDAwMUQ0NDA+IDxVMDA0RD4gJSBNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgTQorPFUwMDAxRDQ0MT4gPFUwMDRFPiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBOCis8VTAwMDFENDQyPiA8VTAwNEY+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIE8KKzxVMDAwMUQ0NDM+IDxVMDA1MD4gJSBNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgUAorPFUwMDAxRDQ0ND4gPFUwMDUxPiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBRCis8VTAwMDFENDQ1PiA8VTAwNTI+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIFIKKzxVMDAwMUQ0NDY+IDxVMDA1Mz4gJSBNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgUworPFUwMDAxRDQ0Nz4gPFUwMDU0PiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBUCis8VTAwMDFENDQ4PiA8VTAwNTU+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIFUKKzxVMDAwMUQ0NDk+IDxVMDA1Nj4gJSBNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgVgorPFUwMDAxRDQ0QT4gPFUwMDU3PiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBXCis8VTAwMDFENDRCPiA8VTAwNTg+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIFgKKzxVMDAwMUQ0NEM+IDxVMDA1OT4gJSBNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgWQorPFUwMDAxRDQ0RD4gPFUwMDVBPiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBaCis8VTAwMDFENDRFPiA8VTAwNjE+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBBCis8VTAwMDFENDRGPiA8VTAwNjI+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBCCis8VTAwMDFENDUwPiA8VTAwNjM+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBDCis8VTAwMDFENDUxPiA8VTAwNjQ+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBECis8VTAwMDFENDUyPiA8VTAwNjU+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBFCis8VTAwMDFENDUzPiA8VTAwNjY+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBGCis8VTAwMDFENDU0PiA8VTAwNjc+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBHCis8VTAwMDFENDU2PiA8VTAwNjk+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBJCis8VTAwMDFENDU3PiA8VTAwNkE+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBKCis8VTAwMDFENDU4PiA8VTAwNkI+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBLCis8VTAwMDFENDU5PiA8VTAwNkM+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBMCis8VTAwMDFENDVBPiA8VTAwNkQ+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBNCis8VTAwMDFENDVCPiA8VTAwNkU+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBOCis8VTAwMDFENDVDPiA8VTAwNkY+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBPCis8VTAwMDFENDVEPiA8VTAwNzA+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBQCis8VTAwMDFENDVFPiA8VTAwNzE+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBRCis8VTAwMDFENDVGPiA8VTAwNzI+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBSCis8VTAwMDFENDYwPiA8VTAwNzM+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBTCis8VTAwMDFENDYxPiA8VTAwNzQ+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBUCis8VTAwMDFENDYyPiA8VTAwNzU+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBVCis8VTAwMDFENDYzPiA8VTAwNzY+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBWCis8VTAwMDFENDY0PiA8VTAwNzc+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBXCis8VTAwMDFENDY1PiA8VTAwNzg+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBYCis8VTAwMDFENDY2PiA8VTAwNzk+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBZCis8VTAwMDFENDY3PiA8VTAwN0E+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBaCis8VTAwMDFENDY4PiA8VTAwNDE+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgQQorPFUwMDAxRDQ2OT4gPFUwMDQyPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIEIKKzxVMDAwMUQ0NkE+IDxVMDA0Mz4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBDCis8VTAwMDFENDZCPiA8VTAwNDQ+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgRAorPFUwMDAxRDQ2Qz4gPFUwMDQ1PiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIEUKKzxVMDAwMUQ0NkQ+IDxVMDA0Nj4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBGCis8VTAwMDFENDZFPiA8VTAwNDc+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgRworPFUwMDAxRDQ2Rj4gPFUwMDQ4PiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIEgKKzxVMDAwMUQ0NzA+IDxVMDA0OT4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBJCis8VTAwMDFENDcxPiA8VTAwNEE+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgSgorPFUwMDAxRDQ3Mj4gPFUwMDRCPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIEsKKzxVMDAwMUQ0NzM+IDxVMDA0Qz4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBMCis8VTAwMDFENDc0PiA8VTAwNEQ+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgTQorPFUwMDAxRDQ3NT4gPFUwMDRFPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIE4KKzxVMDAwMUQ0NzY+IDxVMDA0Rj4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBPCis8VTAwMDFENDc3PiA8VTAwNTA+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgUAorPFUwMDAxRDQ3OD4gPFUwMDUxPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIFEKKzxVMDAwMUQ0Nzk+IDxVMDA1Mj4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBSCis8VTAwMDFENDdBPiA8VTAwNTM+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgUworPFUwMDAxRDQ3Qj4gPFUwMDU0PiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIFQKKzxVMDAwMUQ0N0M+IDxVMDA1NT4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBVCis8VTAwMDFENDdEPiA8VTAwNTY+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgVgorPFUwMDAxRDQ3RT4gPFUwMDU3PiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIFcKKzxVMDAwMUQ0N0Y+IDxVMDA1OD4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBYCis8VTAwMDFENDgwPiA8VTAwNTk+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgWQorPFUwMDAxRDQ4MT4gPFUwMDVBPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIFoKKzxVMDAwMUQ0ODI+IDxVMDA2MT4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgQQorPFUwMDAxRDQ4Mz4gPFUwMDYyPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBCCis8VTAwMDFENDg0PiA8VTAwNjM+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIEMKKzxVMDAwMUQ0ODU+IDxVMDA2ND4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgRAorPFUwMDAxRDQ4Nj4gPFUwMDY1PiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBFCis8VTAwMDFENDg3PiA8VTAwNjY+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIEYKKzxVMDAwMUQ0ODg+IDxVMDA2Nz4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgRworPFUwMDAxRDQ4OT4gPFUwMDY4PiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBICis8VTAwMDFENDhBPiA8VTAwNjk+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIEkKKzxVMDAwMUQ0OEI+IDxVMDA2QT4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgSgorPFUwMDAxRDQ4Qz4gPFUwMDZCPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBLCis8VTAwMDFENDhEPiA8VTAwNkM+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIEwKKzxVMDAwMUQ0OEU+IDxVMDA2RD4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgTQorPFUwMDAxRDQ4Rj4gPFUwMDZFPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBOCis8VTAwMDFENDkwPiA8VTAwNkY+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIE8KKzxVMDAwMUQ0OTE+IDxVMDA3MD4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgUAorPFUwMDAxRDQ5Mj4gPFUwMDcxPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBRCis8VTAwMDFENDkzPiA8VTAwNzI+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIFIKKzxVMDAwMUQ0OTQ+IDxVMDA3Mz4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgUworPFUwMDAxRDQ5NT4gPFUwMDc0PiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBUCis8VTAwMDFENDk2PiA8VTAwNzU+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIFUKKzxVMDAwMUQ0OTc+IDxVMDA3Nj4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgVgorPFUwMDAxRDQ5OD4gPFUwMDc3PiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBXCis8VTAwMDFENDk5PiA8VTAwNzg+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIFgKKzxVMDAwMUQ0OUE+IDxVMDA3OT4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgWQorPFUwMDAxRDQ5Qj4gPFUwMDdBPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBaCis8VTAwMDFENDlDPiA8VTAwNDE+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBDQVBJVEFMIEEKKzxVMDAwMUQ0OUU+IDxVMDA0Mz4gJSBNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgQworPFUwMDAxRDQ5Rj4gPFUwMDQ0PiAlIE1BVEhFTUFUSUNBTCBTQ1JJUFQgQ0FQSVRBTCBECis8VTAwMDFENEEyPiA8VTAwNDc+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBDQVBJVEFMIEcKKzxVMDAwMUQ0QTU+IDxVMDA0QT4gJSBNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgSgorPFUwMDAxRDRBNj4gPFUwMDRCPiAlIE1BVEhFTUFUSUNBTCBTQ1JJUFQgQ0FQSVRBTCBLCis8VTAwMDFENEE5PiA8VTAwNEU+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBDQVBJVEFMIE4KKzxVMDAwMUQ0QUE+IDxVMDA0Rj4gJSBNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgTworPFUwMDAxRDRBQj4gPFUwMDUwPiAlIE1BVEhFTUFUSUNBTCBTQ1JJUFQgQ0FQSVRBTCBQCis8VTAwMDFENEFDPiA8VTAwNTE+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBDQVBJVEFMIFEKKzxVMDAwMUQ0QUU+IDxVMDA1Mz4gJSBNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgUworPFUwMDAxRDRBRj4gPFUwMDU0PiAlIE1BVEhFTUFUSUNBTCBTQ1JJUFQgQ0FQSVRBTCBUCis8VTAwMDFENEIwPiA8VTAwNTU+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBDQVBJVEFMIFUKKzxVMDAwMUQ0QjE+IDxVMDA1Nj4gJSBNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgVgorPFUwMDAxRDRCMj4gPFUwMDU3PiAlIE1BVEhFTUFUSUNBTCBTQ1JJUFQgQ0FQSVRBTCBXCis8VTAwMDFENEIzPiA8VTAwNTg+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBDQVBJVEFMIFgKKzxVMDAwMUQ0QjQ+IDxVMDA1OT4gJSBNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgWQorPFUwMDAxRDRCNT4gPFUwMDVBPiAlIE1BVEhFTUFUSUNBTCBTQ1JJUFQgQ0FQSVRBTCBaCis8VTAwMDFENEI2PiA8VTAwNjE+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBBCis8VTAwMDFENEI3PiA8VTAwNjI+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBCCis8VTAwMDFENEI4PiA8VTAwNjM+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBDCis8VTAwMDFENEI5PiA8VTAwNjQ+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBECis8VTAwMDFENEJCPiA8VTAwNjY+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBGCis8VTAwMDFENEJEPiA8VTAwNjg+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBICis8VTAwMDFENEJFPiA8VTAwNjk+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBJCis8VTAwMDFENEJGPiA8VTAwNkE+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBKCis8VTAwMDFENEMwPiA8VTAwNkI+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBLCis8VTAwMDFENEMyPiA8VTAwNkQ+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBNCis8VTAwMDFENEMzPiA8VTAwNkU+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBOCis8VTAwMDFENEM1PiA8VTAwNzA+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBQCis8VTAwMDFENEM2PiA8VTAwNzE+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBRCis8VTAwMDFENEM3PiA8VTAwNzI+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBSCis8VTAwMDFENEM4PiA8VTAwNzM+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBTCis8VTAwMDFENEM5PiA8VTAwNzQ+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBUCis8VTAwMDFENENBPiA8VTAwNzU+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBVCis8VTAwMDFENENCPiA8VTAwNzY+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBWCis8VTAwMDFENENDPiA8VTAwNzc+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBXCis8VTAwMDFENENEPiA8VTAwNzg+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBYCis8VTAwMDFENENFPiA8VTAwNzk+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBZCis8VTAwMDFENENGPiA8VTAwN0E+ICUgTUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBaCis8VTAwMDFENEQwPiA8VTAwNDE+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgQQorPFUwMDAxRDREMT4gPFUwMDQyPiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBDQVBJVEFMIEIKKzxVMDAwMUQ0RDI+IDxVMDA0Mz4gJSBNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBDCis8VTAwMDFENEQzPiA8VTAwNDQ+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgRAorPFUwMDAxRDREND4gPFUwMDQ1PiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBDQVBJVEFMIEUKKzxVMDAwMUQ0RDU+IDxVMDA0Nj4gJSBNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBGCis8VTAwMDFENEQ2PiA8VTAwNDc+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgRworPFUwMDAxRDRENz4gPFUwMDQ4PiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBDQVBJVEFMIEgKKzxVMDAwMUQ0RDg+IDxVMDA0OT4gJSBNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBJCis8VTAwMDFENEQ5PiA8VTAwNEE+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgSgorPFUwMDAxRDREQT4gPFUwMDRCPiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBDQVBJVEFMIEsKKzxVMDAwMUQ0REI+IDxVMDA0Qz4gJSBNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBMCis8VTAwMDFENERDPiA8VTAwNEQ+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgTQorPFUwMDAxRDRERD4gPFUwMDRFPiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBDQVBJVEFMIE4KKzxVMDAwMUQ0REU+IDxVMDA0Rj4gJSBNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBPCis8VTAwMDFENERGPiA8VTAwNTA+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgUAorPFUwMDAxRDRFMD4gPFUwMDUxPiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBDQVBJVEFMIFEKKzxVMDAwMUQ0RTE+IDxVMDA1Mj4gJSBNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBSCis8VTAwMDFENEUyPiA8VTAwNTM+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgUworPFUwMDAxRDRFMz4gPFUwMDU0PiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBDQVBJVEFMIFQKKzxVMDAwMUQ0RTQ+IDxVMDA1NT4gJSBNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBVCis8VTAwMDFENEU1PiA8VTAwNTY+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgVgorPFUwMDAxRDRFNj4gPFUwMDU3PiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBDQVBJVEFMIFcKKzxVMDAwMUQ0RTc+IDxVMDA1OD4gJSBNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBYCis8VTAwMDFENEU4PiA8VTAwNTk+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgWQorPFUwMDAxRDRFOT4gPFUwMDVBPiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBDQVBJVEFMIFoKKzxVMDAwMUQ0RUE+IDxVMDA2MT4gJSBNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgU01BTEwgQQorPFUwMDAxRDRFQj4gPFUwMDYyPiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBCCis8VTAwMDFENEVDPiA8VTAwNjM+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIFNNQUxMIEMKKzxVMDAwMUQ0RUQ+IDxVMDA2ND4gJSBNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgU01BTEwgRAorPFUwMDAxRDRFRT4gPFUwMDY1PiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBFCis8VTAwMDFENEVGPiA8VTAwNjY+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIFNNQUxMIEYKKzxVMDAwMUQ0RjA+IDxVMDA2Nz4gJSBNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgU01BTEwgRworPFUwMDAxRDRGMT4gPFUwMDY4PiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBICis8VTAwMDFENEYyPiA8VTAwNjk+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIFNNQUxMIEkKKzxVMDAwMUQ0RjM+IDxVMDA2QT4gJSBNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgU01BTEwgSgorPFUwMDAxRDRGND4gPFUwMDZCPiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBLCis8VTAwMDFENEY1PiA8VTAwNkM+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIFNNQUxMIEwKKzxVMDAwMUQ0RjY+IDxVMDA2RD4gJSBNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgU01BTEwgTQorPFUwMDAxRDRGNz4gPFUwMDZFPiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBOCis8VTAwMDFENEY4PiA8VTAwNkY+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIFNNQUxMIE8KKzxVMDAwMUQ0Rjk+IDxVMDA3MD4gJSBNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgU01BTEwgUAorPFUwMDAxRDRGQT4gPFUwMDcxPiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBRCis8VTAwMDFENEZCPiA8VTAwNzI+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIFNNQUxMIFIKKzxVMDAwMUQ0RkM+IDxVMDA3Mz4gJSBNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgU01BTEwgUworPFUwMDAxRDRGRD4gPFUwMDc0PiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBUCis8VTAwMDFENEZFPiA8VTAwNzU+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIFNNQUxMIFUKKzxVMDAwMUQ0RkY+IDxVMDA3Nj4gJSBNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgU01BTEwgVgorPFUwMDAxRDUwMD4gPFUwMDc3PiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBXCis8VTAwMDFENTAxPiA8VTAwNzg+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIFNNQUxMIFgKKzxVMDAwMUQ1MDI+IDxVMDA3OT4gJSBNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgU01BTEwgWQorPFUwMDAxRDUwMz4gPFUwMDdBPiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBaCis8VTAwMDFENTA0PiA8VTAwNDE+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBBCis8VTAwMDFENTA1PiA8VTAwNDI+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBCCis8VTAwMDFENTA3PiA8VTAwNDQ+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBECis8VTAwMDFENTA4PiA8VTAwNDU+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBFCis8VTAwMDFENTA5PiA8VTAwNDY+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBGCis8VTAwMDFENTBBPiA8VTAwNDc+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBHCis8VTAwMDFENTBEPiA8VTAwNEE+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBKCis8VTAwMDFENTBFPiA8VTAwNEI+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBLCis8VTAwMDFENTBGPiA8VTAwNEM+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBMCis8VTAwMDFENTEwPiA8VTAwNEQ+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBNCis8VTAwMDFENTExPiA8VTAwNEU+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBOCis8VTAwMDFENTEyPiA8VTAwNEY+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBPCis8VTAwMDFENTEzPiA8VTAwNTA+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBQCis8VTAwMDFENTE0PiA8VTAwNTE+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBRCis8VTAwMDFENTE2PiA8VTAwNTM+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBTCis8VTAwMDFENTE3PiA8VTAwNTQ+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBUCis8VTAwMDFENTE4PiA8VTAwNTU+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBVCis8VTAwMDFENTE5PiA8VTAwNTY+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBWCis8VTAwMDFENTFBPiA8VTAwNTc+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBXCis8VTAwMDFENTFCPiA8VTAwNTg+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBYCis8VTAwMDFENTFDPiA8VTAwNTk+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBZCis8VTAwMDFENTFFPiA8VTAwNjE+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgQQorPFUwMDAxRDUxRj4gPFUwMDYyPiAlIE1BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIEIKKzxVMDAwMUQ1MjA+IDxVMDA2Mz4gJSBNQVRIRU1BVElDQUwgRlJBS1RVUiBTTUFMTCBDCis8VTAwMDFENTIxPiA8VTAwNjQ+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgRAorPFUwMDAxRDUyMj4gPFUwMDY1PiAlIE1BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIEUKKzxVMDAwMUQ1MjM+IDxVMDA2Nj4gJSBNQVRIRU1BVElDQUwgRlJBS1RVUiBTTUFMTCBGCis8VTAwMDFENTI0PiA8VTAwNjc+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgRworPFUwMDAxRDUyNT4gPFUwMDY4PiAlIE1BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIEgKKzxVMDAwMUQ1MjY+IDxVMDA2OT4gJSBNQVRIRU1BVElDQUwgRlJBS1RVUiBTTUFMTCBJCis8VTAwMDFENTI3PiA8VTAwNkE+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgSgorPFUwMDAxRDUyOD4gPFUwMDZCPiAlIE1BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIEsKKzxVMDAwMUQ1Mjk+IDxVMDA2Qz4gJSBNQVRIRU1BVElDQUwgRlJBS1RVUiBTTUFMTCBMCis8VTAwMDFENTJBPiA8VTAwNkQ+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgTQorPFUwMDAxRDUyQj4gPFUwMDZFPiAlIE1BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIE4KKzxVMDAwMUQ1MkM+IDxVMDA2Rj4gJSBNQVRIRU1BVElDQUwgRlJBS1RVUiBTTUFMTCBPCis8VTAwMDFENTJEPiA8VTAwNzA+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgUAorPFUwMDAxRDUyRT4gPFUwMDcxPiAlIE1BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIFEKKzxVMDAwMUQ1MkY+IDxVMDA3Mj4gJSBNQVRIRU1BVElDQUwgRlJBS1RVUiBTTUFMTCBSCis8VTAwMDFENTMwPiA8VTAwNzM+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgUworPFUwMDAxRDUzMT4gPFUwMDc0PiAlIE1BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIFQKKzxVMDAwMUQ1MzI+IDxVMDA3NT4gJSBNQVRIRU1BVElDQUwgRlJBS1RVUiBTTUFMTCBVCis8VTAwMDFENTMzPiA8VTAwNzY+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgVgorPFUwMDAxRDUzND4gPFUwMDc3PiAlIE1BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIFcKKzxVMDAwMUQ1MzU+IDxVMDA3OD4gJSBNQVRIRU1BVElDQUwgRlJBS1RVUiBTTUFMTCBYCis8VTAwMDFENTM2PiA8VTAwNzk+ICUgTUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgWQorPFUwMDAxRDUzNz4gPFUwMDdBPiAlIE1BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIFoKKzxVMDAwMUQ1Mzg+IDxVMDA0MT4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIEEKKzxVMDAwMUQ1Mzk+IDxVMDA0Mj4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIEIKKzxVMDAwMUQ1M0I+IDxVMDA0ND4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIEQKKzxVMDAwMUQ1M0M+IDxVMDA0NT4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIEUKKzxVMDAwMUQ1M0Q+IDxVMDA0Nj4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIEYKKzxVMDAwMUQ1M0U+IDxVMDA0Nz4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIEcKKzxVMDAwMUQ1NDA+IDxVMDA0OT4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIEkKKzxVMDAwMUQ1NDE+IDxVMDA0QT4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIEoKKzxVMDAwMUQ1NDI+IDxVMDA0Qj4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIEsKKzxVMDAwMUQ1NDM+IDxVMDA0Qz4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIEwKKzxVMDAwMUQ1NDQ+IDxVMDA0RD4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIE0KKzxVMDAwMUQ1NDY+IDxVMDA0Rj4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIE8KKzxVMDAwMUQ1NEE+IDxVMDA1Mz4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIFMKKzxVMDAwMUQ1NEI+IDxVMDA1ND4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIFQKKzxVMDAwMUQ1NEM+IDxVMDA1NT4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIFUKKzxVMDAwMUQ1NEQ+IDxVMDA1Nj4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIFYKKzxVMDAwMUQ1NEU+IDxVMDA1Nz4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIFcKKzxVMDAwMUQ1NEY+IDxVMDA1OD4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIFgKKzxVMDAwMUQ1NTA+IDxVMDA1OT4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIFkKKzxVMDAwMUQ1NTI+IDxVMDA2MT4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBBCis8VTAwMDFENTUzPiA8VTAwNjI+ICUgTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgQgorPFUwMDAxRDU1ND4gPFUwMDYzPiAlIE1BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIFNNQUxMIEMKKzxVMDAwMUQ1NTU+IDxVMDA2ND4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBECis8VTAwMDFENTU2PiA8VTAwNjU+ICUgTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgRQorPFUwMDAxRDU1Nz4gPFUwMDY2PiAlIE1BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIFNNQUxMIEYKKzxVMDAwMUQ1NTg+IDxVMDA2Nz4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBHCis8VTAwMDFENTU5PiA8VTAwNjg+ICUgTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgSAorPFUwMDAxRDU1QT4gPFUwMDY5PiAlIE1BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIFNNQUxMIEkKKzxVMDAwMUQ1NUI+IDxVMDA2QT4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBKCis8VTAwMDFENTVDPiA8VTAwNkI+ICUgTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgSworPFUwMDAxRDU1RD4gPFUwMDZDPiAlIE1BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIFNNQUxMIEwKKzxVMDAwMUQ1NUU+IDxVMDA2RD4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBNCis8VTAwMDFENTVGPiA8VTAwNkU+ICUgTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgTgorPFUwMDAxRDU2MD4gPFUwMDZGPiAlIE1BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIFNNQUxMIE8KKzxVMDAwMUQ1NjE+IDxVMDA3MD4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBQCis8VTAwMDFENTYyPiA8VTAwNzE+ICUgTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgUQorPFUwMDAxRDU2Mz4gPFUwMDcyPiAlIE1BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIFNNQUxMIFIKKzxVMDAwMUQ1NjQ+IDxVMDA3Mz4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBTCis8VTAwMDFENTY1PiA8VTAwNzQ+ICUgTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgVAorPFUwMDAxRDU2Nj4gPFUwMDc1PiAlIE1BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIFNNQUxMIFUKKzxVMDAwMUQ1Njc+IDxVMDA3Nj4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBWCis8VTAwMDFENTY4PiA8VTAwNzc+ICUgTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgVworPFUwMDAxRDU2OT4gPFUwMDc4PiAlIE1BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIFNNQUxMIFgKKzxVMDAwMUQ1NkE+IDxVMDA3OT4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBZCis8VTAwMDFENTZCPiA8VTAwN0E+ICUgTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgWgorPFUwMDAxRDU2Qz4gPFUwMDQxPiAlIE1BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBBCis8VTAwMDFENTZEPiA8VTAwNDI+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBDQVBJVEFMIEIKKzxVMDAwMUQ1NkU+IDxVMDA0Mz4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIENBUElUQUwgQworPFUwMDAxRDU2Rj4gPFUwMDQ0PiAlIE1BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBECis8VTAwMDFENTcwPiA8VTAwNDU+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBDQVBJVEFMIEUKKzxVMDAwMUQ1NzE+IDxVMDA0Nj4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIENBUElUQUwgRgorPFUwMDAxRDU3Mj4gPFUwMDQ3PiAlIE1BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBHCis8VTAwMDFENTczPiA8VTAwNDg+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBDQVBJVEFMIEgKKzxVMDAwMUQ1NzQ+IDxVMDA0OT4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIENBUElUQUwgSQorPFUwMDAxRDU3NT4gPFUwMDRBPiAlIE1BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBKCis8VTAwMDFENTc2PiA8VTAwNEI+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBDQVBJVEFMIEsKKzxVMDAwMUQ1Nzc+IDxVMDA0Qz4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIENBUElUQUwgTAorPFUwMDAxRDU3OD4gPFUwMDREPiAlIE1BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBNCis8VTAwMDFENTc5PiA8VTAwNEU+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBDQVBJVEFMIE4KKzxVMDAwMUQ1N0E+IDxVMDA0Rj4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIENBUElUQUwgTworPFUwMDAxRDU3Qj4gPFUwMDUwPiAlIE1BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBQCis8VTAwMDFENTdDPiA8VTAwNTE+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBDQVBJVEFMIFEKKzxVMDAwMUQ1N0Q+IDxVMDA1Mj4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIENBUElUQUwgUgorPFUwMDAxRDU3RT4gPFUwMDUzPiAlIE1BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBTCis8VTAwMDFENTdGPiA8VTAwNTQ+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBDQVBJVEFMIFQKKzxVMDAwMUQ1ODA+IDxVMDA1NT4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIENBUElUQUwgVQorPFUwMDAxRDU4MT4gPFUwMDU2PiAlIE1BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBWCis8VTAwMDFENTgyPiA8VTAwNTc+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBDQVBJVEFMIFcKKzxVMDAwMUQ1ODM+IDxVMDA1OD4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIENBUElUQUwgWAorPFUwMDAxRDU4ND4gPFUwMDU5PiAlIE1BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBZCis8VTAwMDFENTg1PiA8VTAwNUE+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBDQVBJVEFMIFoKKzxVMDAwMUQ1ODY+IDxVMDA2MT4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIEEKKzxVMDAwMUQ1ODc+IDxVMDA2Mj4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIEIKKzxVMDAwMUQ1ODg+IDxVMDA2Mz4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIEMKKzxVMDAwMUQ1ODk+IDxVMDA2ND4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIEQKKzxVMDAwMUQ1OEE+IDxVMDA2NT4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIEUKKzxVMDAwMUQ1OEI+IDxVMDA2Nj4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIEYKKzxVMDAwMUQ1OEM+IDxVMDA2Nz4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIEcKKzxVMDAwMUQ1OEQ+IDxVMDA2OD4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIEgKKzxVMDAwMUQ1OEU+IDxVMDA2OT4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIEkKKzxVMDAwMUQ1OEY+IDxVMDA2QT4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIEoKKzxVMDAwMUQ1OTA+IDxVMDA2Qj4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIEsKKzxVMDAwMUQ1OTE+IDxVMDA2Qz4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIEwKKzxVMDAwMUQ1OTI+IDxVMDA2RD4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIE0KKzxVMDAwMUQ1OTM+IDxVMDA2RT4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIE4KKzxVMDAwMUQ1OTQ+IDxVMDA2Rj4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIE8KKzxVMDAwMUQ1OTU+IDxVMDA3MD4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIFAKKzxVMDAwMUQ1OTY+IDxVMDA3MT4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIFEKKzxVMDAwMUQ1OTc+IDxVMDA3Mj4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIFIKKzxVMDAwMUQ1OTg+IDxVMDA3Mz4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIFMKKzxVMDAwMUQ1OTk+IDxVMDA3ND4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIFQKKzxVMDAwMUQ1OUE+IDxVMDA3NT4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIFUKKzxVMDAwMUQ1OUI+IDxVMDA3Nj4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIFYKKzxVMDAwMUQ1OUM+IDxVMDA3Nz4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIFcKKzxVMDAwMUQ1OUQ+IDxVMDA3OD4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIFgKKzxVMDAwMUQ1OUU+IDxVMDA3OT4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIFkKKzxVMDAwMUQ1OUY+IDxVMDA3QT4gJSBNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIFoKKzxVMDAwMUQ1QTA+IDxVMDA0MT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIEEKKzxVMDAwMUQ1QTE+IDxVMDA0Mj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIEIKKzxVMDAwMUQ1QTI+IDxVMDA0Mz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIEMKKzxVMDAwMUQ1QTM+IDxVMDA0ND4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIEQKKzxVMDAwMUQ1QTQ+IDxVMDA0NT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIEUKKzxVMDAwMUQ1QTU+IDxVMDA0Nj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIEYKKzxVMDAwMUQ1QTY+IDxVMDA0Nz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIEcKKzxVMDAwMUQ1QTc+IDxVMDA0OD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIEgKKzxVMDAwMUQ1QTg+IDxVMDA0OT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIEkKKzxVMDAwMUQ1QTk+IDxVMDA0QT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIEoKKzxVMDAwMUQ1QUE+IDxVMDA0Qj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIEsKKzxVMDAwMUQ1QUI+IDxVMDA0Qz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIEwKKzxVMDAwMUQ1QUM+IDxVMDA0RD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIE0KKzxVMDAwMUQ1QUQ+IDxVMDA0RT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIE4KKzxVMDAwMUQ1QUU+IDxVMDA0Rj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIE8KKzxVMDAwMUQ1QUY+IDxVMDA1MD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIFAKKzxVMDAwMUQ1QjA+IDxVMDA1MT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIFEKKzxVMDAwMUQ1QjE+IDxVMDA1Mj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIFIKKzxVMDAwMUQ1QjI+IDxVMDA1Mz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIFMKKzxVMDAwMUQ1QjM+IDxVMDA1ND4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIFQKKzxVMDAwMUQ1QjQ+IDxVMDA1NT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIFUKKzxVMDAwMUQ1QjU+IDxVMDA1Nj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIFYKKzxVMDAwMUQ1QjY+IDxVMDA1Nz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIFcKKzxVMDAwMUQ1Qjc+IDxVMDA1OD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIFgKKzxVMDAwMUQ1Qjg+IDxVMDA1OT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIFkKKzxVMDAwMUQ1Qjk+IDxVMDA1QT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIFoKKzxVMDAwMUQ1QkE+IDxVMDA2MT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBBCis8VTAwMDFENUJCPiA8VTAwNjI+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgU01BTEwgQgorPFUwMDAxRDVCQz4gPFUwMDYzPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIEMKKzxVMDAwMUQ1QkQ+IDxVMDA2ND4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBECis8VTAwMDFENUJFPiA8VTAwNjU+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgU01BTEwgRQorPFUwMDAxRDVCRj4gPFUwMDY2PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIEYKKzxVMDAwMUQ1QzA+IDxVMDA2Nz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBHCis8VTAwMDFENUMxPiA8VTAwNjg+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgU01BTEwgSAorPFUwMDAxRDVDMj4gPFUwMDY5PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIEkKKzxVMDAwMUQ1QzM+IDxVMDA2QT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBKCis8VTAwMDFENUM0PiA8VTAwNkI+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgU01BTEwgSworPFUwMDAxRDVDNT4gPFUwMDZDPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIEwKKzxVMDAwMUQ1QzY+IDxVMDA2RD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBNCis8VTAwMDFENUM3PiA8VTAwNkU+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgU01BTEwgTgorPFUwMDAxRDVDOD4gPFUwMDZGPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIE8KKzxVMDAwMUQ1Qzk+IDxVMDA3MD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBQCis8VTAwMDFENUNBPiA8VTAwNzE+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgU01BTEwgUQorPFUwMDAxRDVDQj4gPFUwMDcyPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIFIKKzxVMDAwMUQ1Q0M+IDxVMDA3Mz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBTCis8VTAwMDFENUNEPiA8VTAwNzQ+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgU01BTEwgVAorPFUwMDAxRDVDRT4gPFUwMDc1PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIFUKKzxVMDAwMUQ1Q0Y+IDxVMDA3Nj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBWCis8VTAwMDFENUQwPiA8VTAwNzc+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgU01BTEwgVworPFUwMDAxRDVEMT4gPFUwMDc4PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIFgKKzxVMDAwMUQ1RDI+IDxVMDA3OT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBZCis8VTAwMDFENUQzPiA8VTAwN0E+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgU01BTEwgWgorPFUwMDAxRDVEND4gPFUwMDQxPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBBCis8VTAwMDFENUQ1PiA8VTAwNDI+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIEIKKzxVMDAwMUQ1RDY+IDxVMDA0Mz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgQworPFUwMDAxRDVENz4gPFUwMDQ0PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBECis8VTAwMDFENUQ4PiA8VTAwNDU+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIEUKKzxVMDAwMUQ1RDk+IDxVMDA0Nj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgRgorPFUwMDAxRDVEQT4gPFUwMDQ3PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBHCis8VTAwMDFENURCPiA8VTAwNDg+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIEgKKzxVMDAwMUQ1REM+IDxVMDA0OT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgSQorPFUwMDAxRDVERD4gPFUwMDRBPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBKCis8VTAwMDFENURFPiA8VTAwNEI+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIEsKKzxVMDAwMUQ1REY+IDxVMDA0Qz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgTAorPFUwMDAxRDVFMD4gPFUwMDREPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBNCis8VTAwMDFENUUxPiA8VTAwNEU+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIE4KKzxVMDAwMUQ1RTI+IDxVMDA0Rj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgTworPFUwMDAxRDVFMz4gPFUwMDUwPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBQCis8VTAwMDFENUU0PiA8VTAwNTE+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFEKKzxVMDAwMUQ1RTU+IDxVMDA1Mj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgUgorPFUwMDAxRDVFNj4gPFUwMDUzPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBTCis8VTAwMDFENUU3PiA8VTAwNTQ+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFQKKzxVMDAwMUQ1RTg+IDxVMDA1NT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgVQorPFUwMDAxRDVFOT4gPFUwMDU2PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBWCis8VTAwMDFENUVBPiA8VTAwNTc+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFcKKzxVMDAwMUQ1RUI+IDxVMDA1OD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgWAorPFUwMDAxRDVFQz4gPFUwMDU5PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBZCis8VTAwMDFENUVEPiA8VTAwNUE+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFoKKzxVMDAwMUQ1RUU+IDxVMDA2MT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEEKKzxVMDAwMUQ1RUY+IDxVMDA2Mj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEIKKzxVMDAwMUQ1RjA+IDxVMDA2Mz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEMKKzxVMDAwMUQ1RjE+IDxVMDA2ND4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEQKKzxVMDAwMUQ1RjI+IDxVMDA2NT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEUKKzxVMDAwMUQ1RjM+IDxVMDA2Nj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEYKKzxVMDAwMUQ1RjQ+IDxVMDA2Nz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEcKKzxVMDAwMUQ1RjU+IDxVMDA2OD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEgKKzxVMDAwMUQ1RjY+IDxVMDA2OT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEkKKzxVMDAwMUQ1Rjc+IDxVMDA2QT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEoKKzxVMDAwMUQ1Rjg+IDxVMDA2Qj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEsKKzxVMDAwMUQ1Rjk+IDxVMDA2Qz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEwKKzxVMDAwMUQ1RkE+IDxVMDA2RD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIE0KKzxVMDAwMUQ1RkI+IDxVMDA2RT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIE4KKzxVMDAwMUQ1RkM+IDxVMDA2Rj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIE8KKzxVMDAwMUQ1RkQ+IDxVMDA3MD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFAKKzxVMDAwMUQ1RkU+IDxVMDA3MT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFEKKzxVMDAwMUQ1RkY+IDxVMDA3Mj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFIKKzxVMDAwMUQ2MDA+IDxVMDA3Mz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFMKKzxVMDAwMUQ2MDE+IDxVMDA3ND4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFQKKzxVMDAwMUQ2MDI+IDxVMDA3NT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFUKKzxVMDAwMUQ2MDM+IDxVMDA3Nj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFYKKzxVMDAwMUQ2MDQ+IDxVMDA3Nz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFcKKzxVMDAwMUQ2MDU+IDxVMDA3OD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFgKKzxVMDAwMUQ2MDY+IDxVMDA3OT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFkKKzxVMDAwMUQ2MDc+IDxVMDA3QT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFoKKzxVMDAwMUQ2MDg+IDxVMDA0MT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBBCis8VTAwMDFENjA5PiA8VTAwNDI+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIENBUElUQUwgQgorPFUwMDAxRDYwQT4gPFUwMDQzPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIEMKKzxVMDAwMUQ2MEI+IDxVMDA0ND4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBECis8VTAwMDFENjBDPiA8VTAwNDU+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIENBUElUQUwgRQorPFUwMDAxRDYwRD4gPFUwMDQ2PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIEYKKzxVMDAwMUQ2MEU+IDxVMDA0Nz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBHCis8VTAwMDFENjBGPiA8VTAwNDg+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIENBUElUQUwgSAorPFUwMDAxRDYxMD4gPFUwMDQ5PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIEkKKzxVMDAwMUQ2MTE+IDxVMDA0QT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBKCis8VTAwMDFENjEyPiA8VTAwNEI+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIENBUElUQUwgSworPFUwMDAxRDYxMz4gPFUwMDRDPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIEwKKzxVMDAwMUQ2MTQ+IDxVMDA0RD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBNCis8VTAwMDFENjE1PiA8VTAwNEU+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIENBUElUQUwgTgorPFUwMDAxRDYxNj4gPFUwMDRGPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIE8KKzxVMDAwMUQ2MTc+IDxVMDA1MD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBQCis8VTAwMDFENjE4PiA8VTAwNTE+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIENBUElUQUwgUQorPFUwMDAxRDYxOT4gPFUwMDUyPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIFIKKzxVMDAwMUQ2MUE+IDxVMDA1Mz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBTCis8VTAwMDFENjFCPiA8VTAwNTQ+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIENBUElUQUwgVAorPFUwMDAxRDYxQz4gPFUwMDU1PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIFUKKzxVMDAwMUQ2MUQ+IDxVMDA1Nj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBWCis8VTAwMDFENjFFPiA8VTAwNTc+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIENBUElUQUwgVworPFUwMDAxRDYxRj4gPFUwMDU4PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIFgKKzxVMDAwMUQ2MjA+IDxVMDA1OT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBZCis8VTAwMDFENjIxPiA8VTAwNUE+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIENBUElUQUwgWgorPFUwMDAxRDYyMj4gPFUwMDYxPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBTTUFMTCBBCis8VTAwMDFENjIzPiA8VTAwNjI+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIEIKKzxVMDAwMUQ2MjQ+IDxVMDA2Mz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgU01BTEwgQworPFUwMDAxRDYyNT4gPFUwMDY0PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBTTUFMTCBECis8VTAwMDFENjI2PiA8VTAwNjU+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIEUKKzxVMDAwMUQ2Mjc+IDxVMDA2Nj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgU01BTEwgRgorPFUwMDAxRDYyOD4gPFUwMDY3PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBTTUFMTCBHCis8VTAwMDFENjI5PiA8VTAwNjg+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIEgKKzxVMDAwMUQ2MkE+IDxVMDA2OT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgU01BTEwgSQorPFUwMDAxRDYyQj4gPFUwMDZBPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBTTUFMTCBKCis8VTAwMDFENjJDPiA8VTAwNkI+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIEsKKzxVMDAwMUQ2MkQ+IDxVMDA2Qz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgU01BTEwgTAorPFUwMDAxRDYyRT4gPFUwMDZEPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBTTUFMTCBNCis8VTAwMDFENjJGPiA8VTAwNkU+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIE4KKzxVMDAwMUQ2MzA+IDxVMDA2Rj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgU01BTEwgTworPFUwMDAxRDYzMT4gPFUwMDcwPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBTTUFMTCBQCis8VTAwMDFENjMyPiA8VTAwNzE+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIFEKKzxVMDAwMUQ2MzM+IDxVMDA3Mj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgU01BTEwgUgorPFUwMDAxRDYzND4gPFUwMDczPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBTTUFMTCBTCis8VTAwMDFENjM1PiA8VTAwNzQ+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIFQKKzxVMDAwMUQ2MzY+IDxVMDA3NT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgU01BTEwgVQorPFUwMDAxRDYzNz4gPFUwMDc2PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBTTUFMTCBWCis8VTAwMDFENjM4PiA8VTAwNzc+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIFcKKzxVMDAwMUQ2Mzk+IDxVMDA3OD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgU01BTEwgWAorPFUwMDAxRDYzQT4gPFUwMDc5PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBTTUFMTCBZCis8VTAwMDFENjNCPiA8VTAwN0E+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIFoKKzxVMDAwMUQ2M0M+IDxVMDA0MT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEEKKzxVMDAwMUQ2M0Q+IDxVMDA0Mj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEIKKzxVMDAwMUQ2M0U+IDxVMDA0Mz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEMKKzxVMDAwMUQ2M0Y+IDxVMDA0ND4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEQKKzxVMDAwMUQ2NDA+IDxVMDA0NT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEUKKzxVMDAwMUQ2NDE+IDxVMDA0Nj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEYKKzxVMDAwMUQ2NDI+IDxVMDA0Nz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEcKKzxVMDAwMUQ2NDM+IDxVMDA0OD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEgKKzxVMDAwMUQ2NDQ+IDxVMDA0OT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEkKKzxVMDAwMUQ2NDU+IDxVMDA0QT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEoKKzxVMDAwMUQ2NDY+IDxVMDA0Qj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEsKKzxVMDAwMUQ2NDc+IDxVMDA0Qz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEwKKzxVMDAwMUQ2NDg+IDxVMDA0RD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIE0KKzxVMDAwMUQ2NDk+IDxVMDA0RT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIE4KKzxVMDAwMUQ2NEE+IDxVMDA0Rj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIE8KKzxVMDAwMUQ2NEI+IDxVMDA1MD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFAKKzxVMDAwMUQ2NEM+IDxVMDA1MT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFEKKzxVMDAwMUQ2NEQ+IDxVMDA1Mj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFIKKzxVMDAwMUQ2NEU+IDxVMDA1Mz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFMKKzxVMDAwMUQ2NEY+IDxVMDA1ND4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFQKKzxVMDAwMUQ2NTA+IDxVMDA1NT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFUKKzxVMDAwMUQ2NTE+IDxVMDA1Nj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFYKKzxVMDAwMUQ2NTI+IDxVMDA1Nz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFcKKzxVMDAwMUQ2NTM+IDxVMDA1OD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFgKKzxVMDAwMUQ2NTQ+IDxVMDA1OT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFkKKzxVMDAwMUQ2NTU+IDxVMDA1QT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFoKKzxVMDAwMUQ2NTY+IDxVMDA2MT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBBCis8VTAwMDFENjU3PiA8VTAwNjI+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgQgorPFUwMDAxRDY1OD4gPFUwMDYzPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIEMKKzxVMDAwMUQ2NTk+IDxVMDA2ND4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBECis8VTAwMDFENjVBPiA8VTAwNjU+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgRQorPFUwMDAxRDY1Qj4gPFUwMDY2PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIEYKKzxVMDAwMUQ2NUM+IDxVMDA2Nz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBHCis8VTAwMDFENjVEPiA8VTAwNjg+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgSAorPFUwMDAxRDY1RT4gPFUwMDY5PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIEkKKzxVMDAwMUQ2NUY+IDxVMDA2QT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBKCis8VTAwMDFENjYwPiA8VTAwNkI+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgSworPFUwMDAxRDY2MT4gPFUwMDZDPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIEwKKzxVMDAwMUQ2NjI+IDxVMDA2RD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBNCis8VTAwMDFENjYzPiA8VTAwNkU+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgTgorPFUwMDAxRDY2ND4gPFUwMDZGPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIE8KKzxVMDAwMUQ2NjU+IDxVMDA3MD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBQCis8VTAwMDFENjY2PiA8VTAwNzE+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgUQorPFUwMDAxRDY2Nz4gPFUwMDcyPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIFIKKzxVMDAwMUQ2Njg+IDxVMDA3Mz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBTCis8VTAwMDFENjY5PiA8VTAwNzQ+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgVAorPFUwMDAxRDY2QT4gPFUwMDc1PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIFUKKzxVMDAwMUQ2NkI+IDxVMDA3Nj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBWCis8VTAwMDFENjZDPiA8VTAwNzc+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgVworPFUwMDAxRDY2RD4gPFUwMDc4PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIFgKKzxVMDAwMUQ2NkU+IDxVMDA3OT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBZCis8VTAwMDFENjZGPiA8VTAwN0E+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgWgorPFUwMDAxRDY3MD4gPFUwMDQxPiAlIE1BVEhFTUFUSUNBTCBNT05PU1BBQ0UgQ0FQSVRBTCBBCis8VTAwMDFENjcxPiA8VTAwNDI+ICUgTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIEIKKzxVMDAwMUQ2NzI+IDxVMDA0Mz4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIENBUElUQUwgQworPFUwMDAxRDY3Mz4gPFUwMDQ0PiAlIE1BVEhFTUFUSUNBTCBNT05PU1BBQ0UgQ0FQSVRBTCBECis8VTAwMDFENjc0PiA8VTAwNDU+ICUgTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIEUKKzxVMDAwMUQ2NzU+IDxVMDA0Nj4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIENBUElUQUwgRgorPFUwMDAxRDY3Nj4gPFUwMDQ3PiAlIE1BVEhFTUFUSUNBTCBNT05PU1BBQ0UgQ0FQSVRBTCBHCis8VTAwMDFENjc3PiA8VTAwNDg+ICUgTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIEgKKzxVMDAwMUQ2Nzg+IDxVMDA0OT4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIENBUElUQUwgSQorPFUwMDAxRDY3OT4gPFUwMDRBPiAlIE1BVEhFTUFUSUNBTCBNT05PU1BBQ0UgQ0FQSVRBTCBKCis8VTAwMDFENjdBPiA8VTAwNEI+ICUgTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIEsKKzxVMDAwMUQ2N0I+IDxVMDA0Qz4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIENBUElUQUwgTAorPFUwMDAxRDY3Qz4gPFUwMDREPiAlIE1BVEhFTUFUSUNBTCBNT05PU1BBQ0UgQ0FQSVRBTCBNCis8VTAwMDFENjdEPiA8VTAwNEU+ICUgTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIE4KKzxVMDAwMUQ2N0U+IDxVMDA0Rj4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIENBUElUQUwgTworPFUwMDAxRDY3Rj4gPFUwMDUwPiAlIE1BVEhFTUFUSUNBTCBNT05PU1BBQ0UgQ0FQSVRBTCBQCis8VTAwMDFENjgwPiA8VTAwNTE+ICUgTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIFEKKzxVMDAwMUQ2ODE+IDxVMDA1Mj4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIENBUElUQUwgUgorPFUwMDAxRDY4Mj4gPFUwMDUzPiAlIE1BVEhFTUFUSUNBTCBNT05PU1BBQ0UgQ0FQSVRBTCBTCis8VTAwMDFENjgzPiA8VTAwNTQ+ICUgTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIFQKKzxVMDAwMUQ2ODQ+IDxVMDA1NT4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIENBUElUQUwgVQorPFUwMDAxRDY4NT4gPFUwMDU2PiAlIE1BVEhFTUFUSUNBTCBNT05PU1BBQ0UgQ0FQSVRBTCBWCis8VTAwMDFENjg2PiA8VTAwNTc+ICUgTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIFcKKzxVMDAwMUQ2ODc+IDxVMDA1OD4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIENBUElUQUwgWAorPFUwMDAxRDY4OD4gPFUwMDU5PiAlIE1BVEhFTUFUSUNBTCBNT05PU1BBQ0UgQ0FQSVRBTCBZCis8VTAwMDFENjg5PiA8VTAwNUE+ICUgTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIFoKKzxVMDAwMUQ2OEE+IDxVMDA2MT4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIEEKKzxVMDAwMUQ2OEI+IDxVMDA2Mj4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIEIKKzxVMDAwMUQ2OEM+IDxVMDA2Mz4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIEMKKzxVMDAwMUQ2OEQ+IDxVMDA2ND4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIEQKKzxVMDAwMUQ2OEU+IDxVMDA2NT4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIEUKKzxVMDAwMUQ2OEY+IDxVMDA2Nj4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIEYKKzxVMDAwMUQ2OTA+IDxVMDA2Nz4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIEcKKzxVMDAwMUQ2OTE+IDxVMDA2OD4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIEgKKzxVMDAwMUQ2OTI+IDxVMDA2OT4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIEkKKzxVMDAwMUQ2OTM+IDxVMDA2QT4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIEoKKzxVMDAwMUQ2OTQ+IDxVMDA2Qj4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIEsKKzxVMDAwMUQ2OTU+IDxVMDA2Qz4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIEwKKzxVMDAwMUQ2OTY+IDxVMDA2RD4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIE0KKzxVMDAwMUQ2OTc+IDxVMDA2RT4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIE4KKzxVMDAwMUQ2OTg+IDxVMDA2Rj4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIE8KKzxVMDAwMUQ2OTk+IDxVMDA3MD4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIFAKKzxVMDAwMUQ2OUE+IDxVMDA3MT4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIFEKKzxVMDAwMUQ2OUI+IDxVMDA3Mj4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIFIKKzxVMDAwMUQ2OUM+IDxVMDA3Mz4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIFMKKzxVMDAwMUQ2OUQ+IDxVMDA3ND4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIFQKKzxVMDAwMUQ2OUU+IDxVMDA3NT4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIFUKKzxVMDAwMUQ2OUY+IDxVMDA3Nj4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIFYKKzxVMDAwMUQ2QTA+IDxVMDA3Nz4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIFcKKzxVMDAwMUQ2QTE+IDxVMDA3OD4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIFgKKzxVMDAwMUQ2QTI+IDxVMDA3OT4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIFkKKzxVMDAwMUQ2QTM+IDxVMDA3QT4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIFoKKzxVMDAwMUQ2QTg+IDxVMDM5MT4gJSBNQVRIRU1BVElDQUwgQk9MRCBDQVBJVEFMIEFMUEhBCis8VTAwMDFENkE5PiA8VTAzOTI+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBCRVRBCis8VTAwMDFENkFBPiA8VTAzOTM+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBHQU1NQQorPFUwMDAxRDZBQj4gPFUwMzk0PiAlIE1BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgREVMVEEKKzxVMDAwMUQ2QUM+IDxVMDM5NT4gJSBNQVRIRU1BVElDQUwgQk9MRCBDQVBJVEFMIEVQU0lMT04KKzxVMDAwMUQ2QUQ+IDxVMDM5Nj4gJSBNQVRIRU1BVElDQUwgQk9MRCBDQVBJVEFMIFpFVEEKKzxVMDAwMUQ2QUU+IDxVMDM5Nz4gJSBNQVRIRU1BVElDQUwgQk9MRCBDQVBJVEFMIEVUQQorPFUwMDAxRDZBRj4gPFUwMzk4PiAlIE1BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgVEhFVEEKKzxVMDAwMUQ2QjA+IDxVMDM5OT4gJSBNQVRIRU1BVElDQUwgQk9MRCBDQVBJVEFMIElPVEEKKzxVMDAwMUQ2QjE+IDxVMDM5QT4gJSBNQVRIRU1BVElDQUwgQk9MRCBDQVBJVEFMIEtBUFBBCis8VTAwMDFENkIyPiA8VTAzOUI+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBMQU1EQQorPFUwMDAxRDZCMz4gPFUwMzlDPiAlIE1BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgTVUKKzxVMDAwMUQ2QjQ+IDxVMDM5RD4gJSBNQVRIRU1BVElDQUwgQk9MRCBDQVBJVEFMIE5VCis8VTAwMDFENkI1PiA8VTAzOUU+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBYSQorPFUwMDAxRDZCNj4gPFUwMzlGPiAlIE1BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgT01JQ1JPTgorPFUwMDAxRDZCNz4gPFUwM0EwPiAlIE1BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgUEkKKzxVMDAwMUQ2Qjg+IDxVMDNBMT4gJSBNQVRIRU1BVElDQUwgQk9MRCBDQVBJVEFMIFJITworPFUwMDAxRDZCOT4gPFUwM0Y0PiAlIE1BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgVEhFVEEgU1lNQk9MCis8VTAwMDFENkJBPiA8VTAzQTM+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBTSUdNQQorPFUwMDAxRDZCQj4gPFUwM0E0PiAlIE1BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgVEFVCis8VTAwMDFENkJDPiA8VTAzQTU+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBVUFNJTE9OCis8VTAwMDFENkJEPiA8VTAzQTY+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBQSEkKKzxVMDAwMUQ2QkU+IDxVMDNBNz4gJSBNQVRIRU1BVElDQUwgQk9MRCBDQVBJVEFMIENISQorPFUwMDAxRDZCRj4gPFUwM0E4PiAlIE1BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgUFNJCis8VTAwMDFENkMwPiA8VTAzQTk+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBPTUVHQQorPFUwMDAxRDZDMT4gPFUyMjA3PiAlIE1BVEhFTUFUSUNBTCBCT0xEIE5BQkxBCis8VTAwMDFENkMyPiA8VTAzQjE+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgQUxQSEEKKzxVMDAwMUQ2QzM+IDxVMDNCMj4gJSBNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBCRVRBCis8VTAwMDFENkM0PiA8VTAzQjM+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgR0FNTUEKKzxVMDAwMUQ2QzU+IDxVMDNCND4gJSBNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBERUxUQQorPFUwMDAxRDZDNj4gPFUwM0I1PiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIEVQU0lMT04KKzxVMDAwMUQ2Qzc+IDxVMDNCNj4gJSBNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBaRVRBCis8VTAwMDFENkM4PiA8VTAzQjc+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgRVRBCis8VTAwMDFENkM5PiA8VTAzQjg+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgVEhFVEEKKzxVMDAwMUQ2Q0E+IDxVMDNCOT4gJSBNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBJT1RBCis8VTAwMDFENkNCPiA8VTAzQkE+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgS0FQUEEKKzxVMDAwMUQ2Q0M+IDxVMDNCQj4gJSBNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBMQU1EQQorPFUwMDAxRDZDRD4gPFUwM0JDPiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIE1VCis8VTAwMDFENkNFPiA8VTAzQkQ+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgTlUKKzxVMDAwMUQ2Q0Y+IDxVMDNCRT4gJSBNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBYSQorPFUwMDAxRDZEMD4gPFUwM0JGPiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIE9NSUNST04KKzxVMDAwMUQ2RDE+IDxVMDNDMD4gJSBNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBQSQorPFUwMDAxRDZEMj4gPFUwM0MxPiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIFJITworPFUwMDAxRDZEMz4gPFUwM0MyPiAlIE1BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIEZJTkFMIFNJR01BCis8VTAwMDFENkQ0PiA8VTAzQzM+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgU0lHTUEKKzxVMDAwMUQ2RDU+IDxVMDNDND4gJSBNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBUQVUKKzxVMDAwMUQ2RDY+IDxVMDNDNT4gJSBNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBVUFNJTE9OCis8VTAwMDFENkQ3PiA8VTAzQzY+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgUEhJCis8VTAwMDFENkQ4PiA8VTAzQzc+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgQ0hJCis8VTAwMDFENkQ5PiA8VTAzQzg+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgUFNJCis8VTAwMDFENkRBPiA8VTAzQzk+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgT01FR0EKKzxVMDAwMUQ2REI+IDxVMjIwMj4gJSBNQVRIRU1BVElDQUwgQk9MRCBQQVJUSUFMIERJRkZFUkVOVElBTAorPFUwMDAxRDZEQz4gPFUwM0Y1PiAlIE1BVEhFTUFUSUNBTCBCT0xEIEVQU0lMT04gU1lNQk9MCis8VTAwMDFENkREPiA8VTAzRDE+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgVEhFVEEgU1lNQk9MCis8VTAwMDFENkRFPiA8VTAzRjA+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgS0FQUEEgU1lNQk9MCis8VTAwMDFENkRGPiA8VTAzRDU+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgUEhJIFNZTUJPTAorPFUwMDAxRDZFMD4gPFUwM0YxPiAlIE1BVEhFTUFUSUNBTCBCT0xEIFJITyBTWU1CT0wKKzxVMDAwMUQ2RTE+IDxVMDNENj4gJSBNQVRIRU1BVElDQUwgQk9MRCBQSSBTWU1CT0wKKzxVMDAwMUQ2RTI+IDxVMDM5MT4gJSBNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgQUxQSEEKKzxVMDAwMUQ2RTM+IDxVMDM5Mj4gJSBNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgQkVUQQorPFUwMDAxRDZFND4gPFUwMzkzPiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBHQU1NQQorPFUwMDAxRDZFNT4gPFUwMzk0PiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBERUxUQQorPFUwMDAxRDZFNj4gPFUwMzk1PiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBFUFNJTE9OCis8VTAwMDFENkU3PiA8VTAzOTY+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIFpFVEEKKzxVMDAwMUQ2RTg+IDxVMDM5Nz4gJSBNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgRVRBCis8VTAwMDFENkU5PiA8VTAzOTg+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIFRIRVRBCis8VTAwMDFENkVBPiA8VTAzOTk+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIElPVEEKKzxVMDAwMUQ2RUI+IDxVMDM5QT4gJSBNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgS0FQUEEKKzxVMDAwMUQ2RUM+IDxVMDM5Qj4gJSBNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgTEFNREEKKzxVMDAwMUQ2RUQ+IDxVMDM5Qz4gJSBNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgTVUKKzxVMDAwMUQ2RUU+IDxVMDM5RD4gJSBNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgTlUKKzxVMDAwMUQ2RUY+IDxVMDM5RT4gJSBNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgWEkKKzxVMDAwMUQ2RjA+IDxVMDM5Rj4gJSBNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgT01JQ1JPTgorPFUwMDAxRDZGMT4gPFUwM0EwPiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBQSQorPFUwMDAxRDZGMj4gPFUwM0ExPiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBSSE8KKzxVMDAwMUQ2RjM+IDxVMDNGND4gJSBNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgVEhFVEEgU1lNQk9MCis8VTAwMDFENkY0PiA8VTAzQTM+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIFNJR01BCis8VTAwMDFENkY1PiA8VTAzQTQ+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIFRBVQorPFUwMDAxRDZGNj4gPFUwM0E1PiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBVUFNJTE9OCis8VTAwMDFENkY3PiA8VTAzQTY+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIFBISQorPFUwMDAxRDZGOD4gPFUwM0E3PiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBDSEkKKzxVMDAwMUQ2Rjk+IDxVMDNBOD4gJSBNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgUFNJCis8VTAwMDFENkZBPiA8VTAzQTk+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIE9NRUdBCis8VTAwMDFENkZCPiA8VTIyMDc+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBOQUJMQQorPFUwMDAxRDZGQz4gPFUwM0IxPiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgQUxQSEEKKzxVMDAwMUQ2RkQ+IDxVMDNCMj4gJSBNQVRIRU1BVElDQUwgSVRBTElDIFNNQUxMIEJFVEEKKzxVMDAwMUQ2RkU+IDxVMDNCMz4gJSBNQVRIRU1BVElDQUwgSVRBTElDIFNNQUxMIEdBTU1BCis8VTAwMDFENkZGPiA8VTAzQjQ+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBERUxUQQorPFUwMDAxRDcwMD4gPFUwM0I1PiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgRVBTSUxPTgorPFUwMDAxRDcwMT4gPFUwM0I2PiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgWkVUQQorPFUwMDAxRDcwMj4gPFUwM0I3PiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgRVRBCis8VTAwMDFENzAzPiA8VTAzQjg+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBUSEVUQQorPFUwMDAxRDcwND4gPFUwM0I5PiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgSU9UQQorPFUwMDAxRDcwNT4gPFUwM0JBPiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgS0FQUEEKKzxVMDAwMUQ3MDY+IDxVMDNCQj4gJSBNQVRIRU1BVElDQUwgSVRBTElDIFNNQUxMIExBTURBCis8VTAwMDFENzA3PiA8VTAzQkM+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBNVQorPFUwMDAxRDcwOD4gPFUwM0JEPiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgTlUKKzxVMDAwMUQ3MDk+IDxVMDNCRT4gJSBNQVRIRU1BVElDQUwgSVRBTElDIFNNQUxMIFhJCis8VTAwMDFENzBBPiA8VTAzQkY+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBPTUlDUk9OCis8VTAwMDFENzBCPiA8VTAzQzA+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBQSQorPFUwMDAxRDcwQz4gPFUwM0MxPiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgUkhPCis8VTAwMDFENzBEPiA8VTAzQzI+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBGSU5BTCBTSUdNQQorPFUwMDAxRDcwRT4gPFUwM0MzPiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgU0lHTUEKKzxVMDAwMUQ3MEY+IDxVMDNDND4gJSBNQVRIRU1BVElDQUwgSVRBTElDIFNNQUxMIFRBVQorPFUwMDAxRDcxMD4gPFUwM0M1PiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgVVBTSUxPTgorPFUwMDAxRDcxMT4gPFUwM0M2PiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgUEhJCis8VTAwMDFENzEyPiA8VTAzQzc+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBDSEkKKzxVMDAwMUQ3MTM+IDxVMDNDOD4gJSBNQVRIRU1BVElDQUwgSVRBTElDIFNNQUxMIFBTSQorPFUwMDAxRDcxND4gPFUwM0M5PiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgT01FR0EKKzxVMDAwMUQ3MTU+IDxVMjIwMj4gJSBNQVRIRU1BVElDQUwgSVRBTElDIFBBUlRJQUwgRElGRkVSRU5USUFMCis8VTAwMDFENzE2PiA8VTAzRjU+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBFUFNJTE9OIFNZTUJPTAorPFUwMDAxRDcxNz4gPFUwM0QxPiAlIE1BVEhFTUFUSUNBTCBJVEFMSUMgVEhFVEEgU1lNQk9MCis8VTAwMDFENzE4PiA8VTAzRjA+ICUgTUFUSEVNQVRJQ0FMIElUQUxJQyBLQVBQQSBTWU1CT0wKKzxVMDAwMUQ3MTk+IDxVMDNENT4gJSBNQVRIRU1BVElDQUwgSVRBTElDIFBISSBTWU1CT0wKKzxVMDAwMUQ3MUE+IDxVMDNGMT4gJSBNQVRIRU1BVElDQUwgSVRBTElDIFJITyBTWU1CT0wKKzxVMDAwMUQ3MUI+IDxVMDNENj4gJSBNQVRIRU1BVElDQUwgSVRBTElDIFBJIFNZTUJPTAorPFUwMDAxRDcxQz4gPFUwMzkxPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIEFMUEhBCis8VTAwMDFENzFEPiA8VTAzOTI+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgQkVUQQorPFUwMDAxRDcxRT4gPFUwMzkzPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIEdBTU1BCis8VTAwMDFENzFGPiA8VTAzOTQ+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgREVMVEEKKzxVMDAwMUQ3MjA+IDxVMDM5NT4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBFUFNJTE9OCis8VTAwMDFENzIxPiA8VTAzOTY+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgWkVUQQorPFUwMDAxRDcyMj4gPFUwMzk3PiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIEVUQQorPFUwMDAxRDcyMz4gPFUwMzk4PiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIFRIRVRBCis8VTAwMDFENzI0PiA8VTAzOTk+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgSU9UQQorPFUwMDAxRDcyNT4gPFUwMzlBPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIEtBUFBBCis8VTAwMDFENzI2PiA8VTAzOUI+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgTEFNREEKKzxVMDAwMUQ3Mjc+IDxVMDM5Qz4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBNVQorPFUwMDAxRDcyOD4gPFUwMzlEPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIE5VCis8VTAwMDFENzI5PiA8VTAzOUU+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgWEkKKzxVMDAwMUQ3MkE+IDxVMDM5Rj4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBPTUlDUk9OCis8VTAwMDFENzJCPiA8VTAzQTA+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgUEkKKzxVMDAwMUQ3MkM+IDxVMDNBMT4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBSSE8KKzxVMDAwMUQ3MkQ+IDxVMDNGND4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBUSEVUQSBTWU1CT0wKKzxVMDAwMUQ3MkU+IDxVMDNBMz4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBTSUdNQQorPFUwMDAxRDcyRj4gPFUwM0E0PiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIFRBVQorPFUwMDAxRDczMD4gPFUwM0E1PiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIFVQU0lMT04KKzxVMDAwMUQ3MzE+IDxVMDNBNj4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBQSEkKKzxVMDAwMUQ3MzI+IDxVMDNBNz4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBDSEkKKzxVMDAwMUQ3MzM+IDxVMDNBOD4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBQU0kKKzxVMDAwMUQ3MzQ+IDxVMDNBOT4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBPTUVHQQorPFUwMDAxRDczNT4gPFUyMjA3PiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBOQUJMQQorPFUwMDAxRDczNj4gPFUwM0IxPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBBTFBIQQorPFUwMDAxRDczNz4gPFUwM0IyPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBCRVRBCis8VTAwMDFENzM4PiA8VTAzQjM+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIEdBTU1BCis8VTAwMDFENzM5PiA8VTAzQjQ+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIERFTFRBCis8VTAwMDFENzNBPiA8VTAzQjU+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIEVQU0lMT04KKzxVMDAwMUQ3M0I+IDxVMDNCNj4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgWkVUQQorPFUwMDAxRDczQz4gPFUwM0I3PiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBFVEEKKzxVMDAwMUQ3M0Q+IDxVMDNCOD4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgVEhFVEEKKzxVMDAwMUQ3M0U+IDxVMDNCOT4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgSU9UQQorPFUwMDAxRDczRj4gPFUwM0JBPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBLQVBQQQorPFUwMDAxRDc0MD4gPFUwM0JCPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBMQU1EQQorPFUwMDAxRDc0MT4gPFUwM0JDPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBNVQorPFUwMDAxRDc0Mj4gPFUwM0JEPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBOVQorPFUwMDAxRDc0Mz4gPFUwM0JFPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBYSQorPFUwMDAxRDc0ND4gPFUwM0JGPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBPTUlDUk9OCis8VTAwMDFENzQ1PiA8VTAzQzA+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIFBJCis8VTAwMDFENzQ2PiA8VTAzQzE+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIFJITworPFUwMDAxRDc0Nz4gPFUwM0MyPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBGSU5BTCBTSUdNQQorPFUwMDAxRDc0OD4gPFUwM0MzPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBTSUdNQQorPFUwMDAxRDc0OT4gPFUwM0M0PiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBUQVUKKzxVMDAwMUQ3NEE+IDxVMDNDNT4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgVVBTSUxPTgorPFUwMDAxRDc0Qj4gPFUwM0M2PiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBQSEkKKzxVMDAwMUQ3NEM+IDxVMDNDNz4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgQ0hJCis8VTAwMDFENzREPiA8VTAzQzg+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIFBTSQorPFUwMDAxRDc0RT4gPFUwM0M5PiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBPTUVHQQorPFUwMDAxRDc0Rj4gPFUyMjAyPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBQQVJUSUFMIERJRkZFUkVOVElBTAorPFUwMDAxRDc1MD4gPFUwM0Y1PiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBFUFNJTE9OIFNZTUJPTAorPFUwMDAxRDc1MT4gPFUwM0QxPiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBUSEVUQSBTWU1CT0wKKzxVMDAwMUQ3NTI+IDxVMDNGMD4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgS0FQUEEgU1lNQk9MCis8VTAwMDFENzUzPiA8VTAzRDU+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFBISSBTWU1CT0wKKzxVMDAwMUQ3NTQ+IDxVMDNGMT4gJSBNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgUkhPIFNZTUJPTAorPFUwMDAxRDc1NT4gPFUwM0Q2PiAlIE1BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBQSSBTWU1CT0wKKzxVMDAwMUQ3NTY+IDxVMDM5MT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgQUxQSEEKKzxVMDAwMUQ3NTc+IDxVMDM5Mj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgQkVUQQorPFUwMDAxRDc1OD4gPFUwMzkzPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBHQU1NQQorPFUwMDAxRDc1OT4gPFUwMzk0PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBERUxUQQorPFUwMDAxRDc1QT4gPFUwMzk1PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBFUFNJTE9OCis8VTAwMDFENzVCPiA8VTAzOTY+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFpFVEEKKzxVMDAwMUQ3NUM+IDxVMDM5Nz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgRVRBCis8VTAwMDFENzVEPiA8VTAzOTg+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFRIRVRBCis8VTAwMDFENzVFPiA8VTAzOTk+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIElPVEEKKzxVMDAwMUQ3NUY+IDxVMDM5QT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgS0FQUEEKKzxVMDAwMUQ3NjA+IDxVMDM5Qj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgTEFNREEKKzxVMDAwMUQ3NjE+IDxVMDM5Qz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgTVUKKzxVMDAwMUQ3NjI+IDxVMDM5RD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgTlUKKzxVMDAwMUQ3NjM+IDxVMDM5RT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgWEkKKzxVMDAwMUQ3NjQ+IDxVMDM5Rj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgT01JQ1JPTgorPFUwMDAxRDc2NT4gPFUwM0EwPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBQSQorPFUwMDAxRDc2Nj4gPFUwM0ExPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBSSE8KKzxVMDAwMUQ3Njc+IDxVMDNGND4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgVEhFVEEgU1lNQk9MCis8VTAwMDFENzY4PiA8VTAzQTM+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFNJR01BCis8VTAwMDFENzY5PiA8VTAzQTQ+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFRBVQorPFUwMDAxRDc2QT4gPFUwM0E1PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBVUFNJTE9OCis8VTAwMDFENzZCPiA8VTAzQTY+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFBISQorPFUwMDAxRDc2Qz4gPFUwM0E3PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBDSEkKKzxVMDAwMUQ3NkQ+IDxVMDNBOD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgUFNJCis8VTAwMDFENzZFPiA8VTAzQTk+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIE9NRUdBCis8VTAwMDFENzZGPiA8VTIyMDc+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBOQUJMQQorPFUwMDAxRDc3MD4gPFUwM0IxPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgQUxQSEEKKzxVMDAwMUQ3NzE+IDxVMDNCMj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEJFVEEKKzxVMDAwMUQ3NzI+IDxVMDNCMz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEdBTU1BCis8VTAwMDFENzczPiA8VTAzQjQ+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBERUxUQQorPFUwMDAxRDc3ND4gPFUwM0I1PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgRVBTSUxPTgorPFUwMDAxRDc3NT4gPFUwM0I2PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgWkVUQQorPFUwMDAxRDc3Nj4gPFUwM0I3PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgRVRBCis8VTAwMDFENzc3PiA8VTAzQjg+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBUSEVUQQorPFUwMDAxRDc3OD4gPFUwM0I5PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgSU9UQQorPFUwMDAxRDc3OT4gPFUwM0JBPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgS0FQUEEKKzxVMDAwMUQ3N0E+IDxVMDNCQj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIExBTURBCis8VTAwMDFENzdCPiA8VTAzQkM+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBNVQorPFUwMDAxRDc3Qz4gPFUwM0JEPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgTlUKKzxVMDAwMUQ3N0Q+IDxVMDNCRT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFhJCis8VTAwMDFENzdFPiA8VTAzQkY+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBPTUlDUk9OCis8VTAwMDFENzdGPiA8VTAzQzA+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBQSQorPFUwMDAxRDc4MD4gPFUwM0MxPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgUkhPCis8VTAwMDFENzgxPiA8VTAzQzI+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBGSU5BTCBTSUdNQQorPFUwMDAxRDc4Mj4gPFUwM0MzPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgU0lHTUEKKzxVMDAwMUQ3ODM+IDxVMDNDND4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFRBVQorPFUwMDAxRDc4ND4gPFUwM0M1PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgVVBTSUxPTgorPFUwMDAxRDc4NT4gPFUwM0M2PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgUEhJCis8VTAwMDFENzg2PiA8VTAzQzc+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBDSEkKKzxVMDAwMUQ3ODc+IDxVMDNDOD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFBTSQorPFUwMDAxRDc4OD4gPFUwM0M5PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgT01FR0EKKzxVMDAwMUQ3ODk+IDxVMjIwMj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFBBUlRJQUwgRElGRkVSRU5USUFMCis8VTAwMDFENzhBPiA8VTAzRjU+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBFUFNJTE9OIFNZTUJPTAorPFUwMDAxRDc4Qj4gPFUwM0QxPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgVEhFVEEgU1lNQk9MCis8VTAwMDFENzhDPiA8VTAzRjA+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBLQVBQQSBTWU1CT0wKKzxVMDAwMUQ3OEQ+IDxVMDNENT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFBISSBTWU1CT0wKKzxVMDAwMUQ3OEU+IDxVMDNGMT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFJITyBTWU1CT0wKKzxVMDAwMUQ3OEY+IDxVMDNENj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFBJIFNZTUJPTAorPFUwMDAxRDc5MD4gPFUwMzkxPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIENBUElUQUwgQUxQSEEKKzxVMDAwMUQ3OTE+IDxVMDM5Mj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEJFVEEKKzxVMDAwMUQ3OTI+IDxVMDM5Mz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEdBTU1BCis8VTAwMDFENzkzPiA8VTAzOTQ+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBERUxUQQorPFUwMDAxRDc5ND4gPFUwMzk1PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIENBUElUQUwgRVBTSUxPTgorPFUwMDAxRDc5NT4gPFUwMzk2PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIENBUElUQUwgWkVUQQorPFUwMDAxRDc5Nj4gPFUwMzk3PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIENBUElUQUwgRVRBCis8VTAwMDFENzk3PiA8VTAzOTg+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBUSEVUQQorPFUwMDAxRDc5OD4gPFUwMzk5PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIENBUElUQUwgSU9UQQorPFUwMDAxRDc5OT4gPFUwMzlBPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIENBUElUQUwgS0FQUEEKKzxVMDAwMUQ3OUE+IDxVMDM5Qj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIExBTURBCis8VTAwMDFENzlCPiA8VTAzOUM+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBNVQorPFUwMDAxRDc5Qz4gPFUwMzlEPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIENBUElUQUwgTlUKKzxVMDAwMUQ3OUQ+IDxVMDM5RT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFhJCis8VTAwMDFENzlFPiA8VTAzOUY+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBPTUlDUk9OCis8VTAwMDFENzlGPiA8VTAzQTA+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBQSQorPFUwMDAxRDdBMD4gPFUwM0ExPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIENBUElUQUwgUkhPCis8VTAwMDFEN0ExPiA8VTAzRjQ+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBUSEVUQSBTWU1CT0wKKzxVMDAwMUQ3QTI+IDxVMDNBMz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFNJR01BCis8VTAwMDFEN0EzPiA8VTAzQTQ+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBUQVUKKzxVMDAwMUQ3QTQ+IDxVMDNBNT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFVQU0lMT04KKzxVMDAwMUQ3QTU+IDxVMDNBNj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFBISQorPFUwMDAxRDdBNj4gPFUwM0E3PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIENBUElUQUwgQ0hJCis8VTAwMDFEN0E3PiA8VTAzQTg+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBQU0kKKzxVMDAwMUQ3QTg+IDxVMDNBOT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIE9NRUdBCis8VTAwMDFEN0E5PiA8VTIyMDc+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgTkFCTEEKKzxVMDAwMUQ3QUE+IDxVMDNCMT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBBTFBIQQorPFUwMDAxRDdBQj4gPFUwM0IyPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIEJFVEEKKzxVMDAwMUQ3QUM+IDxVMDNCMz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBHQU1NQQorPFUwMDAxRDdBRD4gPFUwM0I0PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIERFTFRBCis8VTAwMDFEN0FFPiA8VTAzQjU+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgRVBTSUxPTgorPFUwMDAxRDdBRj4gPFUwM0I2PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIFpFVEEKKzxVMDAwMUQ3QjA+IDxVMDNCNz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBFVEEKKzxVMDAwMUQ3QjE+IDxVMDNCOD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBUSEVUQQorPFUwMDAxRDdCMj4gPFUwM0I5PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIElPVEEKKzxVMDAwMUQ3QjM+IDxVMDNCQT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBLQVBQQQorPFUwMDAxRDdCND4gPFUwM0JCPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIExBTURBCis8VTAwMDFEN0I1PiA8VTAzQkM+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgTVUKKzxVMDAwMUQ3QjY+IDxVMDNCRD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBOVQorPFUwMDAxRDdCNz4gPFUwM0JFPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIFhJCis8VTAwMDFEN0I4PiA8VTAzQkY+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgT01JQ1JPTgorPFUwMDAxRDdCOT4gPFUwM0MwPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIFBJCis8VTAwMDFEN0JBPiA8VTAzQzE+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgUkhPCis8VTAwMDFEN0JCPiA8VTAzQzI+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgRklOQUwgU0lHTUEKKzxVMDAwMUQ3QkM+IDxVMDNDMz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBTSUdNQQorPFUwMDAxRDdCRD4gPFUwM0M0PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIFRBVQorPFUwMDAxRDdCRT4gPFUwM0M1PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIFVQU0lMT04KKzxVMDAwMUQ3QkY+IDxVMDNDNj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBQSEkKKzxVMDAwMUQ3QzA+IDxVMDNDNz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBDSEkKKzxVMDAwMUQ3QzE+IDxVMDNDOD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBQU0kKKzxVMDAwMUQ3QzI+IDxVMDNDOT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBPTUVHQQorPFUwMDAxRDdDMz4gPFUyMjAyPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFBBUlRJQUwgRElGRkVSRU5USUFMCis8VTAwMDFEN0M0PiA8VTAzRjU+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgRVBTSUxPTiBTWU1CT0wKKzxVMDAwMUQ3QzU+IDxVMDNEMT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBUSEVUQSBTWU1CT0wKKzxVMDAwMUQ3QzY+IDxVMDNGMD4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBLQVBQQSBTWU1CT0wKKzxVMDAwMUQ3Qzc+IDxVMDNENT4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBQSEkgU1lNQk9MCis8VTAwMDFEN0M4PiA8VTAzRjE+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgUkhPIFNZTUJPTAorPFUwMDAxRDdDOT4gPFUwM0Q2PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFBJIFNZTUJPTAorPFUwMDAxRDdDRT4gPFUwMDMwPiAlIE1BVEhFTUFUSUNBTCBCT0xEIERJR0lUIFpFUk8KKzxVMDAwMUQ3Q0Y+IDxVMDAzMT4gJSBNQVRIRU1BVElDQUwgQk9MRCBESUdJVCBPTkUKKzxVMDAwMUQ3RDA+IDxVMDAzMj4gJSBNQVRIRU1BVElDQUwgQk9MRCBESUdJVCBUV08KKzxVMDAwMUQ3RDE+IDxVMDAzMz4gJSBNQVRIRU1BVElDQUwgQk9MRCBESUdJVCBUSFJFRQorPFUwMDAxRDdEMj4gPFUwMDM0PiAlIE1BVEhFTUFUSUNBTCBCT0xEIERJR0lUIEZPVVIKKzxVMDAwMUQ3RDM+IDxVMDAzNT4gJSBNQVRIRU1BVElDQUwgQk9MRCBESUdJVCBGSVZFCis8VTAwMDFEN0Q0PiA8VTAwMzY+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgRElHSVQgU0lYCis8VTAwMDFEN0Q1PiA8VTAwMzc+ICUgTUFUSEVNQVRJQ0FMIEJPTEQgRElHSVQgU0VWRU4KKzxVMDAwMUQ3RDY+IDxVMDAzOD4gJSBNQVRIRU1BVElDQUwgQk9MRCBESUdJVCBFSUdIVAorPFUwMDAxRDdENz4gPFUwMDM5PiAlIE1BVEhFTUFUSUNBTCBCT0xEIERJR0lUIE5JTkUKKzxVMDAwMUQ3RDg+IDxVMDAzMD4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBESUdJVCBaRVJPCis8VTAwMDFEN0Q5PiA8VTAwMzE+ICUgTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgRElHSVQgT05FCis8VTAwMDFEN0RBPiA8VTAwMzI+ICUgTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgRElHSVQgVFdPCis8VTAwMDFEN0RCPiA8VTAwMzM+ICUgTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgRElHSVQgVEhSRUUKKzxVMDAwMUQ3REM+IDxVMDAzND4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBESUdJVCBGT1VSCis8VTAwMDFEN0REPiA8VTAwMzU+ICUgTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgRElHSVQgRklWRQorPFUwMDAxRDdERT4gPFUwMDM2PiAlIE1BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIERJR0lUIFNJWAorPFUwMDAxRDdERj4gPFUwMDM3PiAlIE1BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIERJR0lUIFNFVkVOCis8VTAwMDFEN0UwPiA8VTAwMzg+ICUgTUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgRElHSVQgRUlHSFQKKzxVMDAwMUQ3RTE+IDxVMDAzOT4gJSBNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBESUdJVCBOSU5FCis8VTAwMDFEN0UyPiA8VTAwMzA+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgRElHSVQgWkVSTworPFUwMDAxRDdFMz4gPFUwMDMxPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIERJR0lUIE9ORQorPFUwMDAxRDdFND4gPFUwMDMyPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIERJR0lUIFRXTworPFUwMDAxRDdFNT4gPFUwMDMzPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIERJR0lUIFRIUkVFCis8VTAwMDFEN0U2PiA8VTAwMzQ+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgRElHSVQgRk9VUgorPFUwMDAxRDdFNz4gPFUwMDM1PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIERJR0lUIEZJVkUKKzxVMDAwMUQ3RTg+IDxVMDAzNj4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBESUdJVCBTSVgKKzxVMDAwMUQ3RTk+IDxVMDAzNz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBESUdJVCBTRVZFTgorPFUwMDAxRDdFQT4gPFUwMDM4PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIERJR0lUIEVJR0hUCis8VTAwMDFEN0VCPiA8VTAwMzk+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgRElHSVQgTklORQorPFUwMDAxRDdFQz4gPFUwMDMwPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgRElHSVQgWkVSTworPFUwMDAxRDdFRD4gPFUwMDMxPiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgRElHSVQgT05FCis8VTAwMDFEN0VFPiA8VTAwMzI+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBESUdJVCBUV08KKzxVMDAwMUQ3RUY+IDxVMDAzMz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIERJR0lUIFRIUkVFCis8VTAwMDFEN0YwPiA8VTAwMzQ+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBESUdJVCBGT1VSCis8VTAwMDFEN0YxPiA8VTAwMzU+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBESUdJVCBGSVZFCis8VTAwMDFEN0YyPiA8VTAwMzY+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBESUdJVCBTSVgKKzxVMDAwMUQ3RjM+IDxVMDAzNz4gJSBNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIERJR0lUIFNFVkVOCis8VTAwMDFEN0Y0PiA8VTAwMzg+ICUgTUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBESUdJVCBFSUdIVAorPFUwMDAxRDdGNT4gPFUwMDM5PiAlIE1BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgRElHSVQgTklORQorPFUwMDAxRDdGNj4gPFUwMDMwPiAlIE1BVEhFTUFUSUNBTCBNT05PU1BBQ0UgRElHSVQgWkVSTworPFUwMDAxRDdGNz4gPFUwMDMxPiAlIE1BVEhFTUFUSUNBTCBNT05PU1BBQ0UgRElHSVQgT05FCis8VTAwMDFEN0Y4PiA8VTAwMzI+ICUgTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBESUdJVCBUV08KKzxVMDAwMUQ3Rjk+IDxVMDAzMz4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIERJR0lUIFRIUkVFCis8VTAwMDFEN0ZBPiA8VTAwMzQ+ICUgTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBESUdJVCBGT1VSCis8VTAwMDFEN0ZCPiA8VTAwMzU+ICUgTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBESUdJVCBGSVZFCis8VTAwMDFEN0ZDPiA8VTAwMzY+ICUgTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBESUdJVCBTSVgKKzxVMDAwMUQ3RkQ+IDxVMDAzNz4gJSBNQVRIRU1BVElDQUwgTU9OT1NQQUNFIERJR0lUIFNFVkVOCis8VTAwMDFEN0ZFPiA8VTAwMzg+ICUgTUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBESUdJVCBFSUdIVAorPFUwMDAxRDdGRj4gPFUwMDM5PiAlIE1BVEhFTUFUSUNBTCBNT05PU1BBQ0UgRElHSVQgTklORQorCit0cmFuc2xpdF9lbmQKKworRU5EIExDX0NUWVBFCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy90cmFuc2xpdF9mcmFjdGlvbiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RyYW5zbGl0X2ZyYWN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZGJkNzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy90cmFuc2xpdF9mcmFjdGlvbgpAQCAtMCwwICsxLDUxIEBACitlc2NhcGVfY2hhciAvCitjb21tZW50X2NoYXIgJQorCislIFRyYW5zbGl0ZXJhdGlvbnMgb2YgZnJhY3Rpb25zLgorJSBHZW5lcmF0ZWQgdGhyb3VnaAorJSAgICQgZ3JlcCAnXlteO10qO1teO10qO1teO10qO1teO10qO1teO10qOzxmcmFjdGlvbj5bXjtdKjsnIFVuaWNvZGVEYXRhLnR4dCB8IFwKKyUgICAgIHNlZCAtZSAncy9eXChbXjtdKlwpO1woW147XSpcKTtbXjtdKjtbXjtdKjtbXjtdKjs8ZnJhY3Rpb24+IFwoW147XSpcKTsuKiQvPFVcMT4gIjxVXDM+IiUgXDIvJyAtZSAnaCcgLWUgJ3MvXlwoW14lXSpcKSUgLiokL1wxLycgLWUgJ3MvXChbMC05QS1GXVwpIFwoWzAtOUEtRl1cKS9cMT48VVwyL2cnIC1lICd4JyAtZSAncy9eW14lXSpcKCUgLipcKSQvXDEvJyAtZSAnRycKKyUKKyUgVGhlIHJlcGxhY2VtZW50cyBoYXZlIGJlZW4gc3Vycm91bmRlZCB3aXRoIHNwYWNlcywgYmVjYXVzZSBmcmFjdGlvbnMgYXJlCislIG9mdGVuIHByZWNlZGVkIGJ5IGEgZGVjaW1hbCBudW1iZXIgYW5kIGZvbGxvd2VkIGJ5IGEgdW5pdCBvciBhIG1hdGggc3ltYm9sLgorCitMQ19DVFlQRQorCit0cmFuc2xpdF9zdGFydAorCislIFZVTEdBUiBGUkFDVElPTiBPTkUgUVVBUlRFUgorPFUwMEJDPiAiPFUwMDIwPjxVMDAzMT48VTIwNDQ+PFUwMDM0PjxVMDAyMD4iOyI8VTAwMjA+PFUwMDMxPjxVMDAyRj48VTAwMzQ+PFUwMDIwPiIKKyUgVlVMR0FSIEZSQUNUSU9OIE9ORSBIQUxGCis8VTAwQkQ+ICI8VTAwMjA+PFUwMDMxPjxVMjA0ND48VTAwMzI+PFUwMDIwPiI7IjxVMDAyMD48VTAwMzE+PFUwMDJGPjxVMDAzMj48VTAwMjA+IgorJSBWVUxHQVIgRlJBQ1RJT04gVEhSRUUgUVVBUlRFUlMKKzxVMDBCRT4gIjxVMDAyMD48VTAwMzM+PFUyMDQ0PjxVMDAzND48VTAwMjA+IjsiPFUwMDIwPjxVMDAzMz48VTAwMkY+PFUwMDM0PjxVMDAyMD4iCislIFZVTEdBUiBGUkFDVElPTiBPTkUgVEhJUkQKKzxVMjE1Mz4gIjxVMDAyMD48VTAwMzE+PFUyMDQ0PjxVMDAzMz48VTAwMjA+IjsiPFUwMDIwPjxVMDAzMT48VTAwMkY+PFUwMDMzPjxVMDAyMD4iCislIFZVTEdBUiBGUkFDVElPTiBUV08gVEhJUkRTCis8VTIxNTQ+ICI8VTAwMjA+PFUwMDMyPjxVMjA0ND48VTAwMzM+PFUwMDIwPiI7IjxVMDAyMD48VTAwMzI+PFUwMDJGPjxVMDAzMz48VTAwMjA+IgorJSBWVUxHQVIgRlJBQ1RJT04gT05FIEZJRlRICis8VTIxNTU+ICI8VTAwMjA+PFUwMDMxPjxVMjA0ND48VTAwMzU+PFUwMDIwPiI7IjxVMDAyMD48VTAwMzE+PFUwMDJGPjxVMDAzNT48VTAwMjA+IgorJSBWVUxHQVIgRlJBQ1RJT04gVFdPIEZJRlRIUworPFUyMTU2PiAiPFUwMDIwPjxVMDAzMj48VTIwNDQ+PFUwMDM1PjxVMDAyMD4iOyI8VTAwMjA+PFUwMDMyPjxVMDAyRj48VTAwMzU+PFUwMDIwPiIKKyUgVlVMR0FSIEZSQUNUSU9OIFRIUkVFIEZJRlRIUworPFUyMTU3PiAiPFUwMDIwPjxVMDAzMz48VTIwNDQ+PFUwMDM1PjxVMDAyMD4iOyI8VTAwMjA+PFUwMDMzPjxVMDAyRj48VTAwMzU+PFUwMDIwPiIKKyUgVlVMR0FSIEZSQUNUSU9OIEZPVVIgRklGVEhTCis8VTIxNTg+ICI8VTAwMjA+PFUwMDM0PjxVMjA0ND48VTAwMzU+PFUwMDIwPiI7IjxVMDAyMD48VTAwMzQ+PFUwMDJGPjxVMDAzNT48VTAwMjA+IgorJSBWVUxHQVIgRlJBQ1RJT04gT05FIFNJWFRICis8VTIxNTk+ICI8VTAwMjA+PFUwMDMxPjxVMjA0ND48VTAwMzY+PFUwMDIwPiI7IjxVMDAyMD48VTAwMzE+PFUwMDJGPjxVMDAzNj48VTAwMjA+IgorJSBWVUxHQVIgRlJBQ1RJT04gRklWRSBTSVhUSFMKKzxVMjE1QT4gIjxVMDAyMD48VTAwMzU+PFUyMDQ0PjxVMDAzNj48VTAwMjA+IjsiPFUwMDIwPjxVMDAzNT48VTAwMkY+PFUwMDM2PjxVMDAyMD4iCislIFZVTEdBUiBGUkFDVElPTiBPTkUgRUlHSFRICis8VTIxNUI+ICI8VTAwMjA+PFUwMDMxPjxVMjA0ND48VTAwMzg+PFUwMDIwPiI7IjxVMDAyMD48VTAwMzE+PFUwMDJGPjxVMDAzOD48VTAwMjA+IgorJSBWVUxHQVIgRlJBQ1RJT04gVEhSRUUgRUlHSFRIUworPFUyMTVDPiAiPFUwMDIwPjxVMDAzMz48VTIwNDQ+PFUwMDM4PjxVMDAyMD4iOyI8VTAwMjA+PFUwMDMzPjxVMDAyRj48VTAwMzg+PFUwMDIwPiIKKyUgVlVMR0FSIEZSQUNUSU9OIEZJVkUgRUlHSFRIUworPFUyMTVEPiAiPFUwMDIwPjxVMDAzNT48VTIwNDQ+PFUwMDM4PjxVMDAyMD4iOyI8VTAwMjA+PFUwMDM1PjxVMDAyRj48VTAwMzg+PFUwMDIwPiIKKyUgVlVMR0FSIEZSQUNUSU9OIFNFVkVOIEVJR0hUSFMKKzxVMjE1RT4gIjxVMDAyMD48VTAwMzc+PFUyMDQ0PjxVMDAzOD48VTAwMjA+IjsiPFUwMDIwPjxVMDAzNz48VTAwMkY+PFUwMDM4PjxVMDAyMD4iCislIEZSQUNUSU9OIE5VTUVSQVRPUiBPTkUKKzxVMjE1Rj4gIjxVMDAyMD48VTAwMzE+PFUyMDQ0PiI7IjxVMDAyMD48VTAwMzE+PFUwMDJGPiIKKwordHJhbnNsaXRfZW5kCisKK0VORCBMQ19DVFlQRQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdHJhbnNsaXRfaGFuZ3VsIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdHJhbnNsaXRfaGFuZ3VsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZWEwMzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy90cmFuc2xpdF9oYW5ndWwKQEAgLTAsMCArMSwxMTE4NiBAQAorZXNjYXBlX2NoYXIgLworY29tbWVudF9jaGFyICUKKworJSBUcmFuc2xpdGVyYXRpb25zIG9mIEhhbmd1bCBzeWxsYWJsZXMgdG8gSmFtby4KKyUgR2VuZXJhdGVkIGFsZ29yaXRobWljYWxseS4KKworTENfQ1RZUEUKKwordHJhbnNsaXRfc3RhcnQKKworPFVBQzAwPiAiPFUzMTMxPjxVMzE0Rj4iCSUgSEFOR1VMIFNZTExBQkxFIEdBCis8VUFDMDE+ICI8VTMxMzE+PFUzMTRGPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEdBRworPFVBQzAyPiAiPFUzMTMxPjxVMzE0Rj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBHQUdHCis8VUFDMDM+ICI8VTMxMzE+PFUzMTRGPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEdBR1MKKzxVQUMwND4gIjxVMzEzMT48VTMxNEY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0FOCis8VUFDMDU+ICI8VTMxMzE+PFUzMTRGPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEdBTkkKKzxVQUMwNj4gIjxVMzEzMT48VTMxNEY+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0FOSAorPFVBQzA3PiAiPFUzMTMxPjxVMzE0Rj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBHQUQKKzxVQUMwOD4gIjxVMzEzMT48VTMxNEY+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0FMCis8VUFDMDk+ICI8VTMxMzE+PFUzMTRGPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEdBTEcKKzxVQUMwQT4gIjxVMzEzMT48VTMxNEY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0FMTQorPFVBQzBCPiAiPFUzMTMxPjxVMzE0Rj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBHQUxCCis8VUFDMEM+ICI8VTMxMzE+PFUzMTRGPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEdBTFMKKzxVQUMwRD4gIjxVMzEzMT48VTMxNEY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0FMVAorPFVBQzBFPiAiPFUzMTMxPjxVMzE0Rj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBHQUxQCis8VUFDMEY+ICI8VTMxMzE+PFUzMTRGPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEdBTEgKKzxVQUMxMD4gIjxVMzEzMT48VTMxNEY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0FNCis8VUFDMTE+ICI8VTMxMzE+PFUzMTRGPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEdBQgorPFVBQzEyPiAiPFUzMTMxPjxVMzE0Rj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHQUJTCis8VUFDMTM+ICI8VTMxMzE+PFUzMTRGPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEdBUworPFVBQzE0PiAiPFUzMTMxPjxVMzE0Rj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBHQVNTCis8VUFDMTU+ICI8VTMxMzE+PFUzMTRGPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEdBTkcKKzxVQUMxNj4gIjxVMzEzMT48VTMxNEY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0FKCis8VUFDMTc+ICI8VTMxMzE+PFUzMTRGPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEdBQworPFVBQzE4PiAiPFUzMTMxPjxVMzE0Rj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBHQUsKKzxVQUMxOT4gIjxVMzEzMT48VTMxNEY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0FUCis8VUFDMUE+ICI8VTMxMzE+PFUzMTRGPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEdBUAorPFVBQzFCPiAiPFUzMTMxPjxVMzE0Rj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBHQUgKKzxVQUMxQz4gIjxVMzEzMT48VTMxNTA+IgklIEhBTkdVTCBTWUxMQUJMRSBHQUUKKzxVQUMxRD4gIjxVMzEzMT48VTMxNTA+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0FFRworPFVBQzFFPiAiPFUzMTMxPjxVMzE1MD48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBHQUVHRworPFVBQzFGPiAiPFUzMTMxPjxVMzE1MD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBHQUVHUworPFVBQzIwPiAiPFUzMTMxPjxVMzE1MD48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHQUVOCis8VUFDMjE+ICI8VTMxMzE+PFUzMTUwPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEdBRU5JCis8VUFDMjI+ICI8VTMxMzE+PFUzMTUwPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEdBRU5ICis8VUFDMjM+ICI8VTMxMzE+PFUzMTUwPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEdBRUQKKzxVQUMyND4gIjxVMzEzMT48VTMxNTA+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0FFTAorPFVBQzI1PiAiPFUzMTMxPjxVMzE1MD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBHQUVMRworPFVBQzI2PiAiPFUzMTMxPjxVMzE1MD48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBHQUVMTQorPFVBQzI3PiAiPFUzMTMxPjxVMzE1MD48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBHQUVMQgorPFVBQzI4PiAiPFUzMTMxPjxVMzE1MD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBHQUVMUworPFVBQzI5PiAiPFUzMTMxPjxVMzE1MD48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBHQUVMVAorPFVBQzJBPiAiPFUzMTMxPjxVMzE1MD48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBHQUVMUAorPFVBQzJCPiAiPFUzMTMxPjxVMzE1MD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBHQUVMSAorPFVBQzJDPiAiPFUzMTMxPjxVMzE1MD48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBHQUVNCis8VUFDMkQ+ICI8VTMxMzE+PFUzMTUwPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEdBRUIKKzxVQUMyRT4gIjxVMzEzMT48VTMxNTA+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0FFQlMKKzxVQUMyRj4gIjxVMzEzMT48VTMxNTA+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0FFUworPFVBQzMwPiAiPFUzMTMxPjxVMzE1MD48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBHQUVTUworPFVBQzMxPiAiPFUzMTMxPjxVMzE1MD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBHQUVORworPFVBQzMyPiAiPFUzMTMxPjxVMzE1MD48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBHQUVKCis8VUFDMzM+ICI8VTMxMzE+PFUzMTUwPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEdBRUMKKzxVQUMzND4gIjxVMzEzMT48VTMxNTA+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0FFSworPFVBQzM1PiAiPFUzMTMxPjxVMzE1MD48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBHQUVUCis8VUFDMzY+ICI8VTMxMzE+PFUzMTUwPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEdBRVAKKzxVQUMzNz4gIjxVMzEzMT48VTMxNTA+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0FFSAorPFVBQzM4PiAiPFUzMTMxPjxVMzE1MT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQQorPFVBQzM5PiAiPFUzMTMxPjxVMzE1MT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUFHCis8VUFDM0E+ICI8VTMxMzE+PFUzMTUxPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQUdHCis8VUFDM0I+ICI8VTMxMzE+PFUzMTUxPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQUdTCis8VUFDM0M+ICI8VTMxMzE+PFUzMTUxPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQU4KKzxVQUMzRD4gIjxVMzEzMT48VTMxNTE+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lBTkkKKzxVQUMzRT4gIjxVMzEzMT48VTMxNTE+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lBTkgKKzxVQUMzRj4gIjxVMzEzMT48VTMxNTE+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lBRAorPFVBQzQwPiAiPFUzMTMxPjxVMzE1MT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUFMCis8VUFDNDE+ICI8VTMxMzE+PFUzMTUxPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQUxHCis8VUFDNDI+ICI8VTMxMzE+PFUzMTUxPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQUxNCis8VUFDNDM+ICI8VTMxMzE+PFUzMTUxPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQUxCCis8VUFDNDQ+ICI8VTMxMzE+PFUzMTUxPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQUxTCis8VUFDNDU+ICI8VTMxMzE+PFUzMTUxPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQUxUCis8VUFDNDY+ICI8VTMxMzE+PFUzMTUxPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQUxQCis8VUFDNDc+ICI8VTMxMzE+PFUzMTUxPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQUxICis8VUFDNDg+ICI8VTMxMzE+PFUzMTUxPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQU0KKzxVQUM0OT4gIjxVMzEzMT48VTMxNTE+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lBQgorPFVBQzRBPiAiPFUzMTMxPjxVMzE1MT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUFCUworPFVBQzRCPiAiPFUzMTMxPjxVMzE1MT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUFTCis8VUFDNEM+ICI8VTMxMzE+PFUzMTUxPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQVNTCis8VUFDNEQ+ICI8VTMxMzE+PFUzMTUxPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQU5HCis8VUFDNEU+ICI8VTMxMzE+PFUzMTUxPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQUoKKzxVQUM0Rj4gIjxVMzEzMT48VTMxNTE+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lBQworPFVBQzUwPiAiPFUzMTMxPjxVMzE1MT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUFLCis8VUFDNTE+ICI8VTMxMzE+PFUzMTUxPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQVQKKzxVQUM1Mj4gIjxVMzEzMT48VTMxNTE+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lBUAorPFVBQzUzPiAiPFUzMTMxPjxVMzE1MT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUFICis8VUFDNTQ+ICI8VTMxMzE+PFUzMTUyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lBRQorPFVBQzU1PiAiPFUzMTMxPjxVMzE1Mj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUFFRworPFVBQzU2PiAiPFUzMTMxPjxVMzE1Mj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUFFR0cKKzxVQUM1Nz4gIjxVMzEzMT48VTMxNTI+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lBRUdTCis8VUFDNTg+ICI8VTMxMzE+PFUzMTUyPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQUVOCis8VUFDNTk+ICI8VTMxMzE+PFUzMTUyPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQUVOSQorPFVBQzVBPiAiPFUzMTMxPjxVMzE1Mj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUFFTkgKKzxVQUM1Qj4gIjxVMzEzMT48VTMxNTI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lBRUQKKzxVQUM1Qz4gIjxVMzEzMT48VTMxNTI+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lBRUwKKzxVQUM1RD4gIjxVMzEzMT48VTMxNTI+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lBRUxHCis8VUFDNUU+ICI8VTMxMzE+PFUzMTUyPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQUVMTQorPFVBQzVGPiAiPFUzMTMxPjxVMzE1Mj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUFFTEIKKzxVQUM2MD4gIjxVMzEzMT48VTMxNTI+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lBRUxTCis8VUFDNjE+ICI8VTMxMzE+PFUzMTUyPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQUVMVAorPFVBQzYyPiAiPFUzMTMxPjxVMzE1Mj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUFFTFAKKzxVQUM2Mz4gIjxVMzEzMT48VTMxNTI+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lBRUxICis8VUFDNjQ+ICI8VTMxMzE+PFUzMTUyPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQUVNCis8VUFDNjU+ICI8VTMxMzE+PFUzMTUyPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQUVCCis8VUFDNjY+ICI8VTMxMzE+PFUzMTUyPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQUVCUworPFVBQzY3PiAiPFUzMTMxPjxVMzE1Mj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUFFUworPFVBQzY4PiAiPFUzMTMxPjxVMzE1Mj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUFFU1MKKzxVQUM2OT4gIjxVMzEzMT48VTMxNTI+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lBRU5HCis8VUFDNkE+ICI8VTMxMzE+PFUzMTUyPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQUVKCis8VUFDNkI+ICI8VTMxMzE+PFUzMTUyPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQUVDCis8VUFDNkM+ICI8VTMxMzE+PFUzMTUyPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQUVLCis8VUFDNkQ+ICI8VTMxMzE+PFUzMTUyPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQUVUCis8VUFDNkU+ICI8VTMxMzE+PFUzMTUyPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQUVQCis8VUFDNkY+ICI8VTMxMzE+PFUzMTUyPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZQUVICis8VUFDNzA+ICI8VTMxMzE+PFUzMTUzPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VPCis8VUFDNzE+ICI8VTMxMzE+PFUzMTUzPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEdFT0cKKzxVQUM3Mj4gIjxVMzEzMT48VTMxNTM+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VPR0cKKzxVQUM3Mz4gIjxVMzEzMT48VTMxNTM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VPR1MKKzxVQUM3ND4gIjxVMzEzMT48VTMxNTM+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VPTgorPFVBQzc1PiAiPFUzMTMxPjxVMzE1Mz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBHRU9OSQorPFVBQzc2PiAiPFUzMTMxPjxVMzE1Mz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBHRU9OSAorPFVBQzc3PiAiPFUzMTMxPjxVMzE1Mz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBHRU9ECis8VUFDNzg+ICI8VTMxMzE+PFUzMTUzPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEdFT0wKKzxVQUM3OT4gIjxVMzEzMT48VTMxNTM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VPTEcKKzxVQUM3QT4gIjxVMzEzMT48VTMxNTM+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VPTE0KKzxVQUM3Qj4gIjxVMzEzMT48VTMxNTM+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VPTEIKKzxVQUM3Qz4gIjxVMzEzMT48VTMxNTM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VPTFMKKzxVQUM3RD4gIjxVMzEzMT48VTMxNTM+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VPTFQKKzxVQUM3RT4gIjxVMzEzMT48VTMxNTM+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VPTFAKKzxVQUM3Rj4gIjxVMzEzMT48VTMxNTM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VPTEgKKzxVQUM4MD4gIjxVMzEzMT48VTMxNTM+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VPTQorPFVBQzgxPiAiPFUzMTMxPjxVMzE1Mz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBHRU9CCis8VUFDODI+ICI8VTMxMzE+PFUzMTUzPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEdFT0JTCis8VUFDODM+ICI8VTMxMzE+PFUzMTUzPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEdFT1MKKzxVQUM4ND4gIjxVMzEzMT48VTMxNTM+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VPU1MKKzxVQUM4NT4gIjxVMzEzMT48VTMxNTM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VPTkcKKzxVQUM4Nj4gIjxVMzEzMT48VTMxNTM+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VPSgorPFVBQzg3PiAiPFUzMTMxPjxVMzE1Mz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBHRU9DCis8VUFDODg+ICI8VTMxMzE+PFUzMTUzPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEdFT0sKKzxVQUM4OT4gIjxVMzEzMT48VTMxNTM+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VPVAorPFVBQzhBPiAiPFUzMTMxPjxVMzE1Mz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHRU9QCis8VUFDOEI+ICI8VTMxMzE+PFUzMTUzPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEdFT0gKKzxVQUM4Qz4gIjxVMzEzMT48VTMxNTQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHRQorPFVBQzhEPiAiPFUzMTMxPjxVMzE1ND48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBHRUcKKzxVQUM4RT4gIjxVMzEzMT48VTMxNTQ+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VHRworPFVBQzhGPiAiPFUzMTMxPjxVMzE1ND48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBHRUdTCis8VUFDOTA+ICI8VTMxMzE+PFUzMTU0PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEdFTgorPFVBQzkxPiAiPFUzMTMxPjxVMzE1ND48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBHRU5JCis8VUFDOTI+ICI8VTMxMzE+PFUzMTU0PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEdFTkgKKzxVQUM5Mz4gIjxVMzEzMT48VTMxNTQ+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VECis8VUFDOTQ+ICI8VTMxMzE+PFUzMTU0PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEdFTAorPFVBQzk1PiAiPFUzMTMxPjxVMzE1ND48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBHRUxHCis8VUFDOTY+ICI8VTMxMzE+PFUzMTU0PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEdFTE0KKzxVQUM5Nz4gIjxVMzEzMT48VTMxNTQ+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VMQgorPFVBQzk4PiAiPFUzMTMxPjxVMzE1ND48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBHRUxTCis8VUFDOTk+ICI8VTMxMzE+PFUzMTU0PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEdFTFQKKzxVQUM5QT4gIjxVMzEzMT48VTMxNTQ+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VMUAorPFVBQzlCPiAiPFUzMTMxPjxVMzE1ND48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBHRUxICis8VUFDOUM+ICI8VTMxMzE+PFUzMTU0PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEdFTQorPFVBQzlEPiAiPFUzMTMxPjxVMzE1ND48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBHRUIKKzxVQUM5RT4gIjxVMzEzMT48VTMxNTQ+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VCUworPFVBQzlGPiAiPFUzMTMxPjxVMzE1ND48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBHRVMKKzxVQUNBMD4gIjxVMzEzMT48VTMxNTQ+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VTUworPFVBQ0ExPiAiPFUzMTMxPjxVMzE1ND48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBHRU5HCis8VUFDQTI+ICI8VTMxMzE+PFUzMTU0PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEdFSgorPFVBQ0EzPiAiPFUzMTMxPjxVMzE1ND48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBHRUMKKzxVQUNBND4gIjxVMzEzMT48VTMxNTQ+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VLCis8VUFDQTU+ICI8VTMxMzE+PFUzMTU0PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEdFVAorPFVBQ0E2PiAiPFUzMTMxPjxVMzE1ND48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHRVAKKzxVQUNBNz4gIjxVMzEzMT48VTMxNTQ+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VICis8VUFDQTg+ICI8VTMxMzE+PFUzMTU1PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lFTworPFVBQ0E5PiAiPFUzMTMxPjxVMzE1NT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUVPRworPFVBQ0FBPiAiPFUzMTMxPjxVMzE1NT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUVPR0cKKzxVQUNBQj4gIjxVMzEzMT48VTMxNTU+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lFT0dTCis8VUFDQUM+ICI8VTMxMzE+PFUzMTU1PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEdZRU9OCis8VUFDQUQ+ICI8VTMxMzE+PFUzMTU1PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZRU9OSQorPFVBQ0FFPiAiPFUzMTMxPjxVMzE1NT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUVPTkgKKzxVQUNBRj4gIjxVMzEzMT48VTMxNTU+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lFT0QKKzxVQUNCMD4gIjxVMzEzMT48VTMxNTU+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lFT0wKKzxVQUNCMT4gIjxVMzEzMT48VTMxNTU+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lFT0xHCis8VUFDQjI+ICI8VTMxMzE+PFUzMTU1PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEdZRU9MTQorPFVBQ0IzPiAiPFUzMTMxPjxVMzE1NT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUVPTEIKKzxVQUNCND4gIjxVMzEzMT48VTMxNTU+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lFT0xTCis8VUFDQjU+ICI8VTMxMzE+PFUzMTU1PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZRU9MVAorPFVBQ0I2PiAiPFUzMTMxPjxVMzE1NT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUVPTFAKKzxVQUNCNz4gIjxVMzEzMT48VTMxNTU+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lFT0xICis8VUFDQjg+ICI8VTMxMzE+PFUzMTU1PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZRU9NCis8VUFDQjk+ICI8VTMxMzE+PFUzMTU1PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEdZRU9CCis8VUFDQkE+ICI8VTMxMzE+PFUzMTU1PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEdZRU9CUworPFVBQ0JCPiAiPFUzMTMxPjxVMzE1NT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUVPUworPFVBQ0JDPiAiPFUzMTMxPjxVMzE1NT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUVPU1MKKzxVQUNCRD4gIjxVMzEzMT48VTMxNTU+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lFT05HCis8VUFDQkU+ICI8VTMxMzE+PFUzMTU1PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEdZRU9KCis8VUFDQkY+ICI8VTMxMzE+PFUzMTU1PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZRU9DCis8VUFDQzA+ICI8VTMxMzE+PFUzMTU1PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEdZRU9LCis8VUFDQzE+ICI8VTMxMzE+PFUzMTU1PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEdZRU9UCis8VUFDQzI+ICI8VTMxMzE+PFUzMTU1PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEdZRU9QCis8VUFDQzM+ICI8VTMxMzE+PFUzMTU1PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZRU9ICis8VUFDQzQ+ICI8VTMxMzE+PFUzMTU2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lFCis8VUFDQzU+ICI8VTMxMzE+PFUzMTU2PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZRUcKKzxVQUNDNj4gIjxVMzEzMT48VTMxNTY+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lFR0cKKzxVQUNDNz4gIjxVMzEzMT48VTMxNTY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lFR1MKKzxVQUNDOD4gIjxVMzEzMT48VTMxNTY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lFTgorPFVBQ0M5PiAiPFUzMTMxPjxVMzE1Nj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUVOSQorPFVBQ0NBPiAiPFUzMTMxPjxVMzE1Nj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUVOSAorPFVBQ0NCPiAiPFUzMTMxPjxVMzE1Nj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUVECis8VUFDQ0M+ICI8VTMxMzE+PFUzMTU2PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZRUwKKzxVQUNDRD4gIjxVMzEzMT48VTMxNTY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lFTEcKKzxVQUNDRT4gIjxVMzEzMT48VTMxNTY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lFTE0KKzxVQUNDRj4gIjxVMzEzMT48VTMxNTY+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lFTEIKKzxVQUNEMD4gIjxVMzEzMT48VTMxNTY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lFTFMKKzxVQUNEMT4gIjxVMzEzMT48VTMxNTY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lFTFQKKzxVQUNEMj4gIjxVMzEzMT48VTMxNTY+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lFTFAKKzxVQUNEMz4gIjxVMzEzMT48VTMxNTY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lFTEgKKzxVQUNEND4gIjxVMzEzMT48VTMxNTY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lFTQorPFVBQ0Q1PiAiPFUzMTMxPjxVMzE1Nj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUVCCis8VUFDRDY+ICI8VTMxMzE+PFUzMTU2PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEdZRUJTCis8VUFDRDc+ICI8VTMxMzE+PFUzMTU2PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZRVMKKzxVQUNEOD4gIjxVMzEzMT48VTMxNTY+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lFU1MKKzxVQUNEOT4gIjxVMzEzMT48VTMxNTY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lFTkcKKzxVQUNEQT4gIjxVMzEzMT48VTMxNTY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lFSgorPFVBQ0RCPiAiPFUzMTMxPjxVMzE1Nj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUVDCis8VUFDREM+ICI8VTMxMzE+PFUzMTU2PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEdZRUsKKzxVQUNERD4gIjxVMzEzMT48VTMxNTY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lFVAorPFVBQ0RFPiAiPFUzMTMxPjxVMzE1Nj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUVQCis8VUFDREY+ICI8VTMxMzE+PFUzMTU2PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZRUgKKzxVQUNFMD4gIjxVMzEzMT48VTMxNTc+IgklIEhBTkdVTCBTWUxMQUJMRSBHTworPFVBQ0UxPiAiPFUzMTMxPjxVMzE1Nz48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBHT0cKKzxVQUNFMj4gIjxVMzEzMT48VTMxNTc+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR09HRworPFVBQ0UzPiAiPFUzMTMxPjxVMzE1Nz48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBHT0dTCis8VUFDRTQ+ICI8VTMxMzE+PFUzMTU3PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEdPTgorPFVBQ0U1PiAiPFUzMTMxPjxVMzE1Nz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBHT05JCis8VUFDRTY+ICI8VTMxMzE+PFUzMTU3PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEdPTkgKKzxVQUNFNz4gIjxVMzEzMT48VTMxNTc+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR09ECis8VUFDRTg+ICI8VTMxMzE+PFUzMTU3PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEdPTAorPFVBQ0U5PiAiPFUzMTMxPjxVMzE1Nz48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBHT0xHCis8VUFDRUE+ICI8VTMxMzE+PFUzMTU3PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEdPTE0KKzxVQUNFQj4gIjxVMzEzMT48VTMxNTc+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR09MQgorPFVBQ0VDPiAiPFUzMTMxPjxVMzE1Nz48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBHT0xTCis8VUFDRUQ+ICI8VTMxMzE+PFUzMTU3PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEdPTFQKKzxVQUNFRT4gIjxVMzEzMT48VTMxNTc+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgR09MUAorPFVBQ0VGPiAiPFUzMTMxPjxVMzE1Nz48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBHT0xICis8VUFDRjA+ICI8VTMxMzE+PFUzMTU3PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEdPTQorPFVBQ0YxPiAiPFUzMTMxPjxVMzE1Nz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBHT0IKKzxVQUNGMj4gIjxVMzEzMT48VTMxNTc+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR09CUworPFVBQ0YzPiAiPFUzMTMxPjxVMzE1Nz48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBHT1MKKzxVQUNGND4gIjxVMzEzMT48VTMxNTc+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR09TUworPFVBQ0Y1PiAiPFUzMTMxPjxVMzE1Nz48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBHT05HCis8VUFDRjY+ICI8VTMxMzE+PFUzMTU3PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEdPSgorPFVBQ0Y3PiAiPFUzMTMxPjxVMzE1Nz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBHT0MKKzxVQUNGOD4gIjxVMzEzMT48VTMxNTc+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR09LCis8VUFDRjk+ICI8VTMxMzE+PFUzMTU3PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEdPVAorPFVBQ0ZBPiAiPFUzMTMxPjxVMzE1Nz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHT1AKKzxVQUNGQj4gIjxVMzEzMT48VTMxNTc+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR09ICis8VUFDRkM+ICI8VTMxMzE+PFUzMTU4PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBCis8VUFDRkQ+ICI8VTMxMzE+PFUzMTU4PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEdXQUcKKzxVQUNGRT4gIjxVMzEzMT48VTMxNTg+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBR0cKKzxVQUNGRj4gIjxVMzEzMT48VTMxNTg+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBR1MKKzxVQUQwMD4gIjxVMzEzMT48VTMxNTg+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBTgorPFVBRDAxPiAiPFUzMTMxPjxVMzE1OD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0FOSQorPFVBRDAyPiAiPFUzMTMxPjxVMzE1OD48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0FOSAorPFVBRDAzPiAiPFUzMTMxPjxVMzE1OD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0FECis8VUFEMDQ+ICI8VTMxMzE+PFUzMTU4PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEdXQUwKKzxVQUQwNT4gIjxVMzEzMT48VTMxNTg+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBTEcKKzxVQUQwNj4gIjxVMzEzMT48VTMxNTg+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBTE0KKzxVQUQwNz4gIjxVMzEzMT48VTMxNTg+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBTEIKKzxVQUQwOD4gIjxVMzEzMT48VTMxNTg+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBTFMKKzxVQUQwOT4gIjxVMzEzMT48VTMxNTg+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBTFQKKzxVQUQwQT4gIjxVMzEzMT48VTMxNTg+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBTFAKKzxVQUQwQj4gIjxVMzEzMT48VTMxNTg+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBTEgKKzxVQUQwQz4gIjxVMzEzMT48VTMxNTg+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBTQorPFVBRDBEPiAiPFUzMTMxPjxVMzE1OD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0FCCis8VUFEMEU+ICI8VTMxMzE+PFUzMTU4PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEdXQUJTCis8VUFEMEY+ICI8VTMxMzE+PFUzMTU4PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEdXQVMKKzxVQUQxMD4gIjxVMzEzMT48VTMxNTg+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBU1MKKzxVQUQxMT4gIjxVMzEzMT48VTMxNTg+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBTkcKKzxVQUQxMj4gIjxVMzEzMT48VTMxNTg+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBSgorPFVBRDEzPiAiPFUzMTMxPjxVMzE1OD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0FDCis8VUFEMTQ+ICI8VTMxMzE+PFUzMTU4PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEdXQUsKKzxVQUQxNT4gIjxVMzEzMT48VTMxNTg+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBVAorPFVBRDE2PiAiPFUzMTMxPjxVMzE1OD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0FQCis8VUFEMTc+ICI8VTMxMzE+PFUzMTU4PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEdXQUgKKzxVQUQxOD4gIjxVMzEzMT48VTMxNTk+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0FFCis8VUFEMTk+ICI8VTMxMzE+PFUzMTU5PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEdXQUVHCis8VUFEMUE+ICI8VTMxMzE+PFUzMTU5PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEdXQUVHRworPFVBRDFCPiAiPFUzMTMxPjxVMzE1OT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0FFR1MKKzxVQUQxQz4gIjxVMzEzMT48VTMxNTk+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBRU4KKzxVQUQxRD4gIjxVMzEzMT48VTMxNTk+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBRU5JCis8VUFEMUU+ICI8VTMxMzE+PFUzMTU5PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEdXQUVOSAorPFVBRDFGPiAiPFUzMTMxPjxVMzE1OT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0FFRAorPFVBRDIwPiAiPFUzMTMxPjxVMzE1OT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0FFTAorPFVBRDIxPiAiPFUzMTMxPjxVMzE1OT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0FFTEcKKzxVQUQyMj4gIjxVMzEzMT48VTMxNTk+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBRUxNCis8VUFEMjM+ICI8VTMxMzE+PFUzMTU5PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEdXQUVMQgorPFVBRDI0PiAiPFUzMTMxPjxVMzE1OT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0FFTFMKKzxVQUQyNT4gIjxVMzEzMT48VTMxNTk+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBRUxUCis8VUFEMjY+ICI8VTMxMzE+PFUzMTU5PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEdXQUVMUAorPFVBRDI3PiAiPFUzMTMxPjxVMzE1OT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0FFTEgKKzxVQUQyOD4gIjxVMzEzMT48VTMxNTk+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBRU0KKzxVQUQyOT4gIjxVMzEzMT48VTMxNTk+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBRUIKKzxVQUQyQT4gIjxVMzEzMT48VTMxNTk+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBRUJTCis8VUFEMkI+ICI8VTMxMzE+PFUzMTU5PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEdXQUVTCis8VUFEMkM+ICI8VTMxMzE+PFUzMTU5PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEdXQUVTUworPFVBRDJEPiAiPFUzMTMxPjxVMzE1OT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0FFTkcKKzxVQUQyRT4gIjxVMzEzMT48VTMxNTk+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBRUoKKzxVQUQyRj4gIjxVMzEzMT48VTMxNTk+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBRUMKKzxVQUQzMD4gIjxVMzEzMT48VTMxNTk+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBRUsKKzxVQUQzMT4gIjxVMzEzMT48VTMxNTk+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBRVQKKzxVQUQzMj4gIjxVMzEzMT48VTMxNTk+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBRVAKKzxVQUQzMz4gIjxVMzEzMT48VTMxNTk+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dBRUgKKzxVQUQzND4gIjxVMzEzMT48VTMxNUE+IgklIEhBTkdVTCBTWUxMQUJMRSBHT0UKKzxVQUQzNT4gIjxVMzEzMT48VTMxNUE+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgR09FRworPFVBRDM2PiAiPFUzMTMxPjxVMzE1QT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBHT0VHRworPFVBRDM3PiAiPFUzMTMxPjxVMzE1QT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBHT0VHUworPFVBRDM4PiAiPFUzMTMxPjxVMzE1QT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHT0VOCis8VUFEMzk+ICI8VTMxMzE+PFUzMTVBPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEdPRU5JCis8VUFEM0E+ICI8VTMxMzE+PFUzMTVBPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEdPRU5ICis8VUFEM0I+ICI8VTMxMzE+PFUzMTVBPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEdPRUQKKzxVQUQzQz4gIjxVMzEzMT48VTMxNUE+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgR09FTAorPFVBRDNEPiAiPFUzMTMxPjxVMzE1QT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBHT0VMRworPFVBRDNFPiAiPFUzMTMxPjxVMzE1QT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBHT0VMTQorPFVBRDNGPiAiPFUzMTMxPjxVMzE1QT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBHT0VMQgorPFVBRDQwPiAiPFUzMTMxPjxVMzE1QT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBHT0VMUworPFVBRDQxPiAiPFUzMTMxPjxVMzE1QT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBHT0VMVAorPFVBRDQyPiAiPFUzMTMxPjxVMzE1QT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBHT0VMUAorPFVBRDQzPiAiPFUzMTMxPjxVMzE1QT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBHT0VMSAorPFVBRDQ0PiAiPFUzMTMxPjxVMzE1QT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBHT0VNCis8VUFENDU+ICI8VTMxMzE+PFUzMTVBPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEdPRUIKKzxVQUQ0Nj4gIjxVMzEzMT48VTMxNUE+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR09FQlMKKzxVQUQ0Nz4gIjxVMzEzMT48VTMxNUE+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgR09FUworPFVBRDQ4PiAiPFUzMTMxPjxVMzE1QT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBHT0VTUworPFVBRDQ5PiAiPFUzMTMxPjxVMzE1QT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBHT0VORworPFVBRDRBPiAiPFUzMTMxPjxVMzE1QT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBHT0VKCis8VUFENEI+ICI8VTMxMzE+PFUzMTVBPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEdPRUMKKzxVQUQ0Qz4gIjxVMzEzMT48VTMxNUE+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR09FSworPFVBRDREPiAiPFUzMTMxPjxVMzE1QT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBHT0VUCis8VUFENEU+ICI8VTMxMzE+PFUzMTVBPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEdPRVAKKzxVQUQ0Rj4gIjxVMzEzMT48VTMxNUE+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR09FSAorPFVBRDUwPiAiPFUzMTMxPjxVMzE1Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEdZTworPFVBRDUxPiAiPFUzMTMxPjxVMzE1Qj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBHWU9HCis8VUFENTI+ICI8VTMxMzE+PFUzMTVCPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEdZT0dHCis8VUFENTM+ICI8VTMxMzE+PFUzMTVCPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEdZT0dTCis8VUFENTQ+ICI8VTMxMzE+PFUzMTVCPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEdZT04KKzxVQUQ1NT4gIjxVMzEzMT48VTMxNUI+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lPTkkKKzxVQUQ1Nj4gIjxVMzEzMT48VTMxNUI+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lPTkgKKzxVQUQ1Nz4gIjxVMzEzMT48VTMxNUI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lPRAorPFVBRDU4PiAiPFUzMTMxPjxVMzE1Qj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBHWU9MCis8VUFENTk+ICI8VTMxMzE+PFUzMTVCPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZT0xHCis8VUFENUE+ICI8VTMxMzE+PFUzMTVCPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEdZT0xNCis8VUFENUI+ICI8VTMxMzE+PFUzMTVCPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEdZT0xCCis8VUFENUM+ICI8VTMxMzE+PFUzMTVCPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEdZT0xTCis8VUFENUQ+ICI8VTMxMzE+PFUzMTVCPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZT0xUCis8VUFENUU+ICI8VTMxMzE+PFUzMTVCPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEdZT0xQCis8VUFENUY+ICI8VTMxMzE+PFUzMTVCPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEdZT0xICis8VUFENjA+ICI8VTMxMzE+PFUzMTVCPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZT00KKzxVQUQ2MT4gIjxVMzEzMT48VTMxNUI+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lPQgorPFVBRDYyPiAiPFUzMTMxPjxVMzE1Qj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHWU9CUworPFVBRDYzPiAiPFUzMTMxPjxVMzE1Qj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBHWU9TCis8VUFENjQ+ICI8VTMxMzE+PFUzMTVCPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEdZT1NTCis8VUFENjU+ICI8VTMxMzE+PFUzMTVCPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEdZT05HCis8VUFENjY+ICI8VTMxMzE+PFUzMTVCPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEdZT0oKKzxVQUQ2Nz4gIjxVMzEzMT48VTMxNUI+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lPQworPFVBRDY4PiAiPFUzMTMxPjxVMzE1Qj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBHWU9LCis8VUFENjk+ICI8VTMxMzE+PFUzMTVCPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEdZT1QKKzxVQUQ2QT4gIjxVMzEzMT48VTMxNUI+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lPUAorPFVBRDZCPiAiPFUzMTMxPjxVMzE1Qj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBHWU9ICis8VUFENkM+ICI8VTMxMzE+PFUzMTVDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1UKKzxVQUQ2RD4gIjxVMzEzMT48VTMxNUM+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1VHCis8VUFENkU+ICI8VTMxMzE+PFUzMTVDPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEdVR0cKKzxVQUQ2Rj4gIjxVMzEzMT48VTMxNUM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1VHUworPFVBRDcwPiAiPFUzMTMxPjxVMzE1Qz48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHVU4KKzxVQUQ3MT4gIjxVMzEzMT48VTMxNUM+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1VOSQorPFVBRDcyPiAiPFUzMTMxPjxVMzE1Qz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBHVU5ICis8VUFENzM+ICI8VTMxMzE+PFUzMTVDPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEdVRAorPFVBRDc0PiAiPFUzMTMxPjxVMzE1Qz48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBHVUwKKzxVQUQ3NT4gIjxVMzEzMT48VTMxNUM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1VMRworPFVBRDc2PiAiPFUzMTMxPjxVMzE1Qz48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBHVUxNCis8VUFENzc+ICI8VTMxMzE+PFUzMTVDPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEdVTEIKKzxVQUQ3OD4gIjxVMzEzMT48VTMxNUM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1VMUworPFVBRDc5PiAiPFUzMTMxPjxVMzE1Qz48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBHVUxUCis8VUFEN0E+ICI8VTMxMzE+PFUzMTVDPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEdVTFAKKzxVQUQ3Qj4gIjxVMzEzMT48VTMxNUM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1VMSAorPFVBRDdDPiAiPFUzMTMxPjxVMzE1Qz48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBHVU0KKzxVQUQ3RD4gIjxVMzEzMT48VTMxNUM+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1VCCis8VUFEN0U+ICI8VTMxMzE+PFUzMTVDPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEdVQlMKKzxVQUQ3Rj4gIjxVMzEzMT48VTMxNUM+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1VTCis8VUFEODA+ICI8VTMxMzE+PFUzMTVDPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEdVU1MKKzxVQUQ4MT4gIjxVMzEzMT48VTMxNUM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1VORworPFVBRDgyPiAiPFUzMTMxPjxVMzE1Qz48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBHVUoKKzxVQUQ4Mz4gIjxVMzEzMT48VTMxNUM+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1VDCis8VUFEODQ+ICI8VTMxMzE+PFUzMTVDPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEdVSworPFVBRDg1PiAiPFUzMTMxPjxVMzE1Qz48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBHVVQKKzxVQUQ4Nj4gIjxVMzEzMT48VTMxNUM+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1VQCis8VUFEODc+ICI8VTMxMzE+PFUzMTVDPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEdVSAorPFVBRDg4PiAiPFUzMTMxPjxVMzE1RD4iCSUgSEFOR1VMIFNZTExBQkxFIEdXRU8KKzxVQUQ4OT4gIjxVMzEzMT48VTMxNUQ+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dFT0cKKzxVQUQ4QT4gIjxVMzEzMT48VTMxNUQ+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dFT0dHCis8VUFEOEI+ICI8VTMxMzE+PFUzMTVEPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEdXRU9HUworPFVBRDhDPiAiPFUzMTMxPjxVMzE1RD48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0VPTgorPFVBRDhEPiAiPFUzMTMxPjxVMzE1RD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0VPTkkKKzxVQUQ4RT4gIjxVMzEzMT48VTMxNUQ+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dFT05ICis8VUFEOEY+ICI8VTMxMzE+PFUzMTVEPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEdXRU9ECis8VUFEOTA+ICI8VTMxMzE+PFUzMTVEPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEdXRU9MCis8VUFEOTE+ICI8VTMxMzE+PFUzMTVEPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEdXRU9MRworPFVBRDkyPiAiPFUzMTMxPjxVMzE1RD48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0VPTE0KKzxVQUQ5Mz4gIjxVMzEzMT48VTMxNUQ+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dFT0xCCis8VUFEOTQ+ICI8VTMxMzE+PFUzMTVEPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEdXRU9MUworPFVBRDk1PiAiPFUzMTMxPjxVMzE1RD48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0VPTFQKKzxVQUQ5Nj4gIjxVMzEzMT48VTMxNUQ+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dFT0xQCis8VUFEOTc+ICI8VTMxMzE+PFUzMTVEPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEdXRU9MSAorPFVBRDk4PiAiPFUzMTMxPjxVMzE1RD48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0VPTQorPFVBRDk5PiAiPFUzMTMxPjxVMzE1RD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0VPQgorPFVBRDlBPiAiPFUzMTMxPjxVMzE1RD48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0VPQlMKKzxVQUQ5Qj4gIjxVMzEzMT48VTMxNUQ+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dFT1MKKzxVQUQ5Qz4gIjxVMzEzMT48VTMxNUQ+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dFT1NTCis8VUFEOUQ+ICI8VTMxMzE+PFUzMTVEPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEdXRU9ORworPFVBRDlFPiAiPFUzMTMxPjxVMzE1RD48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0VPSgorPFVBRDlGPiAiPFUzMTMxPjxVMzE1RD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0VPQworPFVBREEwPiAiPFUzMTMxPjxVMzE1RD48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0VPSworPFVBREExPiAiPFUzMTMxPjxVMzE1RD48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0VPVAorPFVBREEyPiAiPFUzMTMxPjxVMzE1RD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0VPUAorPFVBREEzPiAiPFUzMTMxPjxVMzE1RD48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0VPSAorPFVBREE0PiAiPFUzMTMxPjxVMzE1RT4iCSUgSEFOR1VMIFNZTExBQkxFIEdXRQorPFVBREE1PiAiPFUzMTMxPjxVMzE1RT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0VHCis8VUFEQTY+ICI8VTMxMzE+PFUzMTVFPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEdXRUdHCis8VUFEQTc+ICI8VTMxMzE+PFUzMTVFPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEdXRUdTCis8VUFEQTg+ICI8VTMxMzE+PFUzMTVFPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEdXRU4KKzxVQURBOT4gIjxVMzEzMT48VTMxNUU+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dFTkkKKzxVQURBQT4gIjxVMzEzMT48VTMxNUU+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dFTkgKKzxVQURBQj4gIjxVMzEzMT48VTMxNUU+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dFRAorPFVBREFDPiAiPFUzMTMxPjxVMzE1RT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0VMCis8VUFEQUQ+ICI8VTMxMzE+PFUzMTVFPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEdXRUxHCis8VUFEQUU+ICI8VTMxMzE+PFUzMTVFPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEdXRUxNCis8VUFEQUY+ICI8VTMxMzE+PFUzMTVFPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEdXRUxCCis8VUFEQjA+ICI8VTMxMzE+PFUzMTVFPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEdXRUxTCis8VUFEQjE+ICI8VTMxMzE+PFUzMTVFPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEdXRUxUCis8VUFEQjI+ICI8VTMxMzE+PFUzMTVFPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEdXRUxQCis8VUFEQjM+ICI8VTMxMzE+PFUzMTVFPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEdXRUxICis8VUFEQjQ+ICI8VTMxMzE+PFUzMTVFPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEdXRU0KKzxVQURCNT4gIjxVMzEzMT48VTMxNUU+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dFQgorPFVBREI2PiAiPFUzMTMxPjxVMzE1RT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0VCUworPFVBREI3PiAiPFUzMTMxPjxVMzE1RT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0VTCis8VUFEQjg+ICI8VTMxMzE+PFUzMTVFPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEdXRVNTCis8VUFEQjk+ICI8VTMxMzE+PFUzMTVFPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEdXRU5HCis8VUFEQkE+ICI8VTMxMzE+PFUzMTVFPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEdXRUoKKzxVQURCQj4gIjxVMzEzMT48VTMxNUU+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dFQworPFVBREJDPiAiPFUzMTMxPjxVMzE1RT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0VLCis8VUFEQkQ+ICI8VTMxMzE+PFUzMTVFPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEdXRVQKKzxVQURCRT4gIjxVMzEzMT48VTMxNUU+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dFUAorPFVBREJGPiAiPFUzMTMxPjxVMzE1RT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0VICis8VUFEQzA+ICI8VTMxMzE+PFUzMTVGPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dJCis8VUFEQzE+ICI8VTMxMzE+PFUzMTVGPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEdXSUcKKzxVQURDMj4gIjxVMzEzMT48VTMxNUY+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dJR0cKKzxVQURDMz4gIjxVMzEzMT48VTMxNUY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dJR1MKKzxVQURDND4gIjxVMzEzMT48VTMxNUY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dJTgorPFVBREM1PiAiPFUzMTMxPjxVMzE1Rj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0lOSQorPFVBREM2PiAiPFUzMTMxPjxVMzE1Rj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0lOSAorPFVBREM3PiAiPFUzMTMxPjxVMzE1Rj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0lECis8VUFEQzg+ICI8VTMxMzE+PFUzMTVGPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEdXSUwKKzxVQURDOT4gIjxVMzEzMT48VTMxNUY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dJTEcKKzxVQURDQT4gIjxVMzEzMT48VTMxNUY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dJTE0KKzxVQURDQj4gIjxVMzEzMT48VTMxNUY+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dJTEIKKzxVQURDQz4gIjxVMzEzMT48VTMxNUY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dJTFMKKzxVQURDRD4gIjxVMzEzMT48VTMxNUY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dJTFQKKzxVQURDRT4gIjxVMzEzMT48VTMxNUY+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dJTFAKKzxVQURDRj4gIjxVMzEzMT48VTMxNUY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dJTEgKKzxVQUREMD4gIjxVMzEzMT48VTMxNUY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dJTQorPFVBREQxPiAiPFUzMTMxPjxVMzE1Rj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0lCCis8VUFERDI+ICI8VTMxMzE+PFUzMTVGPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEdXSUJTCis8VUFERDM+ICI8VTMxMzE+PFUzMTVGPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEdXSVMKKzxVQUREND4gIjxVMzEzMT48VTMxNUY+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dJU1MKKzxVQURENT4gIjxVMzEzMT48VTMxNUY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dJTkcKKzxVQURENj4gIjxVMzEzMT48VTMxNUY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dJSgorPFVBREQ3PiAiPFUzMTMxPjxVMzE1Rj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0lDCis8VUFERDg+ICI8VTMxMzE+PFUzMTVGPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEdXSUsKKzxVQUREOT4gIjxVMzEzMT48VTMxNUY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1dJVAorPFVBRERBPiAiPFUzMTMxPjxVMzE1Rj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHV0lQCis8VUFEREI+ICI8VTMxMzE+PFUzMTVGPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEdXSUgKKzxVQUREQz4gIjxVMzEzMT48VTMxNjA+IgklIEhBTkdVTCBTWUxMQUJMRSBHWVUKKzxVQURERD4gIjxVMzEzMT48VTMxNjA+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lVRworPFVBRERFPiAiPFUzMTMxPjxVMzE2MD48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBHWVVHRworPFVBRERGPiAiPFUzMTMxPjxVMzE2MD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBHWVVHUworPFVBREUwPiAiPFUzMTMxPjxVMzE2MD48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHWVVOCis8VUFERTE+ICI8VTMxMzE+PFUzMTYwPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZVU5JCis8VUFERTI+ICI8VTMxMzE+PFUzMTYwPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEdZVU5ICis8VUFERTM+ICI8VTMxMzE+PFUzMTYwPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEdZVUQKKzxVQURFND4gIjxVMzEzMT48VTMxNjA+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lVTAorPFVBREU1PiAiPFUzMTMxPjxVMzE2MD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBHWVVMRworPFVBREU2PiAiPFUzMTMxPjxVMzE2MD48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBHWVVMTQorPFVBREU3PiAiPFUzMTMxPjxVMzE2MD48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBHWVVMQgorPFVBREU4PiAiPFUzMTMxPjxVMzE2MD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBHWVVMUworPFVBREU5PiAiPFUzMTMxPjxVMzE2MD48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBHWVVMVAorPFVBREVBPiAiPFUzMTMxPjxVMzE2MD48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBHWVVMUAorPFVBREVCPiAiPFUzMTMxPjxVMzE2MD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBHWVVMSAorPFVBREVDPiAiPFUzMTMxPjxVMzE2MD48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBHWVVNCis8VUFERUQ+ICI8VTMxMzE+PFUzMTYwPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEdZVUIKKzxVQURFRT4gIjxVMzEzMT48VTMxNjA+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lVQlMKKzxVQURFRj4gIjxVMzEzMT48VTMxNjA+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lVUworPFVBREYwPiAiPFUzMTMxPjxVMzE2MD48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBHWVVTUworPFVBREYxPiAiPFUzMTMxPjxVMzE2MD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBHWVVORworPFVBREYyPiAiPFUzMTMxPjxVMzE2MD48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBHWVVKCis8VUFERjM+ICI8VTMxMzE+PFUzMTYwPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZVUMKKzxVQURGND4gIjxVMzEzMT48VTMxNjA+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lVSworPFVBREY1PiAiPFUzMTMxPjxVMzE2MD48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBHWVVUCis8VUFERjY+ICI8VTMxMzE+PFUzMTYwPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEdZVVAKKzxVQURGNz4gIjxVMzEzMT48VTMxNjA+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lVSAorPFVBREY4PiAiPFUzMTMxPjxVMzE2MT4iCSUgSEFOR1VMIFNZTExBQkxFIEdFVQorPFVBREY5PiAiPFUzMTMxPjxVMzE2MT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBHRVVHCis8VUFERkE+ICI8VTMxMzE+PFUzMTYxPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEdFVUdHCis8VUFERkI+ICI8VTMxMzE+PFUzMTYxPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEdFVUdTCis8VUFERkM+ICI8VTMxMzE+PFUzMTYxPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEdFVU4KKzxVQURGRD4gIjxVMzEzMT48VTMxNjE+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VVTkkKKzxVQURGRT4gIjxVMzEzMT48VTMxNjE+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VVTkgKKzxVQURGRj4gIjxVMzEzMT48VTMxNjE+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VVRAorPFVBRTAwPiAiPFUzMTMxPjxVMzE2MT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBHRVVMCis8VUFFMDE+ICI8VTMxMzE+PFUzMTYxPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEdFVUxHCis8VUFFMDI+ICI8VTMxMzE+PFUzMTYxPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEdFVUxNCis8VUFFMDM+ICI8VTMxMzE+PFUzMTYxPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEdFVUxCCis8VUFFMDQ+ICI8VTMxMzE+PFUzMTYxPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEdFVUxTCis8VUFFMDU+ICI8VTMxMzE+PFUzMTYxPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEdFVUxUCis8VUFFMDY+ICI8VTMxMzE+PFUzMTYxPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEdFVUxQCis8VUFFMDc+ICI8VTMxMzE+PFUzMTYxPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEdFVUxICis8VUFFMDg+ICI8VTMxMzE+PFUzMTYxPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEdFVU0KKzxVQUUwOT4gIjxVMzEzMT48VTMxNjE+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VVQgorPFVBRTBBPiAiPFUzMTMxPjxVMzE2MT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHRVVCUworPFVBRTBCPiAiPFUzMTMxPjxVMzE2MT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBHRVVTCis8VUFFMEM+ICI8VTMxMzE+PFUzMTYxPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEdFVVNTCis8VUFFMEQ+ICI8VTMxMzE+PFUzMTYxPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEdFVU5HCis8VUFFMEU+ICI8VTMxMzE+PFUzMTYxPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEdFVUoKKzxVQUUwRj4gIjxVMzEzMT48VTMxNjE+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VVQworPFVBRTEwPiAiPFUzMTMxPjxVMzE2MT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBHRVVLCis8VUFFMTE+ICI8VTMxMzE+PFUzMTYxPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEdFVVQKKzxVQUUxMj4gIjxVMzEzMT48VTMxNjE+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0VVUAorPFVBRTEzPiAiPFUzMTMxPjxVMzE2MT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBHRVVICis8VUFFMTQ+ICI8VTMxMzE+PFUzMTYyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lJCis8VUFFMTU+ICI8VTMxMzE+PFUzMTYyPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZSUcKKzxVQUUxNj4gIjxVMzEzMT48VTMxNjI+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lJR0cKKzxVQUUxNz4gIjxVMzEzMT48VTMxNjI+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lJR1MKKzxVQUUxOD4gIjxVMzEzMT48VTMxNjI+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lJTgorPFVBRTE5PiAiPFUzMTMxPjxVMzE2Mj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUlOSQorPFVBRTFBPiAiPFUzMTMxPjxVMzE2Mj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUlOSAorPFVBRTFCPiAiPFUzMTMxPjxVMzE2Mj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUlECis8VUFFMUM+ICI8VTMxMzE+PFUzMTYyPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZSUwKKzxVQUUxRD4gIjxVMzEzMT48VTMxNjI+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lJTEcKKzxVQUUxRT4gIjxVMzEzMT48VTMxNjI+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lJTE0KKzxVQUUxRj4gIjxVMzEzMT48VTMxNjI+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lJTEIKKzxVQUUyMD4gIjxVMzEzMT48VTMxNjI+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lJTFMKKzxVQUUyMT4gIjxVMzEzMT48VTMxNjI+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lJTFQKKzxVQUUyMj4gIjxVMzEzMT48VTMxNjI+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lJTFAKKzxVQUUyMz4gIjxVMzEzMT48VTMxNjI+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lJTEgKKzxVQUUyND4gIjxVMzEzMT48VTMxNjI+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lJTQorPFVBRTI1PiAiPFUzMTMxPjxVMzE2Mj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUlCCis8VUFFMjY+ICI8VTMxMzE+PFUzMTYyPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEdZSUJTCis8VUFFMjc+ICI8VTMxMzE+PFUzMTYyPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZSVMKKzxVQUUyOD4gIjxVMzEzMT48VTMxNjI+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lJU1MKKzxVQUUyOT4gIjxVMzEzMT48VTMxNjI+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lJTkcKKzxVQUUyQT4gIjxVMzEzMT48VTMxNjI+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lJSgorPFVBRTJCPiAiPFUzMTMxPjxVMzE2Mj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUlDCis8VUFFMkM+ICI8VTMxMzE+PFUzMTYyPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEdZSUsKKzxVQUUyRD4gIjxVMzEzMT48VTMxNjI+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR1lJVAorPFVBRTJFPiAiPFUzMTMxPjxVMzE2Mj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHWUlQCis8VUFFMkY+ICI8VTMxMzE+PFUzMTYyPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEdZSUgKKzxVQUUzMD4gIjxVMzEzMT48VTMxNjM+IgklIEhBTkdVTCBTWUxMQUJMRSBHSQorPFVBRTMxPiAiPFUzMTMxPjxVMzE2Mz48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBHSUcKKzxVQUUzMj4gIjxVMzEzMT48VTMxNjM+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0lHRworPFVBRTMzPiAiPFUzMTMxPjxVMzE2Mz48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBHSUdTCis8VUFFMzQ+ICI8VTMxMzE+PFUzMTYzPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEdJTgorPFVBRTM1PiAiPFUzMTMxPjxVMzE2Mz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBHSU5JCis8VUFFMzY+ICI8VTMxMzE+PFUzMTYzPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEdJTkgKKzxVQUUzNz4gIjxVMzEzMT48VTMxNjM+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0lECis8VUFFMzg+ICI8VTMxMzE+PFUzMTYzPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEdJTAorPFVBRTM5PiAiPFUzMTMxPjxVMzE2Mz48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBHSUxHCis8VUFFM0E+ICI8VTMxMzE+PFUzMTYzPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEdJTE0KKzxVQUUzQj4gIjxVMzEzMT48VTMxNjM+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0lMQgorPFVBRTNDPiAiPFUzMTMxPjxVMzE2Mz48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBHSUxTCis8VUFFM0Q+ICI8VTMxMzE+PFUzMTYzPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEdJTFQKKzxVQUUzRT4gIjxVMzEzMT48VTMxNjM+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0lMUAorPFVBRTNGPiAiPFUzMTMxPjxVMzE2Mz48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBHSUxICis8VUFFNDA+ICI8VTMxMzE+PFUzMTYzPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEdJTQorPFVBRTQxPiAiPFUzMTMxPjxVMzE2Mz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBHSUIKKzxVQUU0Mj4gIjxVMzEzMT48VTMxNjM+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0lCUworPFVBRTQzPiAiPFUzMTMxPjxVMzE2Mz48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBHSVMKKzxVQUU0ND4gIjxVMzEzMT48VTMxNjM+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0lTUworPFVBRTQ1PiAiPFUzMTMxPjxVMzE2Mz48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBHSU5HCis8VUFFNDY+ICI8VTMxMzE+PFUzMTYzPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEdJSgorPFVBRTQ3PiAiPFUzMTMxPjxVMzE2Mz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBHSUMKKzxVQUU0OD4gIjxVMzEzMT48VTMxNjM+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0lLCis8VUFFNDk+ICI8VTMxMzE+PFUzMTYzPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEdJVAorPFVBRTRBPiAiPFUzMTMxPjxVMzE2Mz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHSVAKKzxVQUU0Qj4gIjxVMzEzMT48VTMxNjM+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0lICis8VUFFNEM+ICI8VTMxMzI+PFUzMTRGPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBCis8VUFFNEQ+ICI8VTMxMzI+PFUzMTRGPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHQUcKKzxVQUU0RT4gIjxVMzEzMj48VTMxNEY+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBR0cKKzxVQUU0Rj4gIjxVMzEzMj48VTMxNEY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBR1MKKzxVQUU1MD4gIjxVMzEzMj48VTMxNEY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBTgorPFVBRTUxPiAiPFUzMTMyPjxVMzE0Rj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0FOSQorPFVBRTUyPiAiPFUzMTMyPjxVMzE0Rj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0FOSAorPFVBRTUzPiAiPFUzMTMyPjxVMzE0Rj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0FECis8VUFFNTQ+ICI8VTMxMzI+PFUzMTRGPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHQUwKKzxVQUU1NT4gIjxVMzEzMj48VTMxNEY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBTEcKKzxVQUU1Nj4gIjxVMzEzMj48VTMxNEY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBTE0KKzxVQUU1Nz4gIjxVMzEzMj48VTMxNEY+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBTEIKKzxVQUU1OD4gIjxVMzEzMj48VTMxNEY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBTFMKKzxVQUU1OT4gIjxVMzEzMj48VTMxNEY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBTFQKKzxVQUU1QT4gIjxVMzEzMj48VTMxNEY+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBTFAKKzxVQUU1Qj4gIjxVMzEzMj48VTMxNEY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBTEgKKzxVQUU1Qz4gIjxVMzEzMj48VTMxNEY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBTQorPFVBRTVEPiAiPFUzMTMyPjxVMzE0Rj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0FCCis8VUFFNUU+ICI8VTMxMzI+PFUzMTRGPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHQUJTCis8VUFFNUY+ICI8VTMxMzI+PFUzMTRGPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHQVMKKzxVQUU2MD4gIjxVMzEzMj48VTMxNEY+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBU1MKKzxVQUU2MT4gIjxVMzEzMj48VTMxNEY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBTkcKKzxVQUU2Mj4gIjxVMzEzMj48VTMxNEY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBSgorPFVBRTYzPiAiPFUzMTMyPjxVMzE0Rj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0FDCis8VUFFNjQ+ICI8VTMxMzI+PFUzMTRGPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHQUsKKzxVQUU2NT4gIjxVMzEzMj48VTMxNEY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBVAorPFVBRTY2PiAiPFUzMTMyPjxVMzE0Rj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0FQCis8VUFFNjc+ICI8VTMxMzI+PFUzMTRGPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHQUgKKzxVQUU2OD4gIjxVMzEzMj48VTMxNTA+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0FFCis8VUFFNjk+ICI8VTMxMzI+PFUzMTUwPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHQUVHCis8VUFFNkE+ICI8VTMxMzI+PFUzMTUwPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHQUVHRworPFVBRTZCPiAiPFUzMTMyPjxVMzE1MD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0FFR1MKKzxVQUU2Qz4gIjxVMzEzMj48VTMxNTA+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBRU4KKzxVQUU2RD4gIjxVMzEzMj48VTMxNTA+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBRU5JCis8VUFFNkU+ICI8VTMxMzI+PFUzMTUwPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHQUVOSAorPFVBRTZGPiAiPFUzMTMyPjxVMzE1MD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0FFRAorPFVBRTcwPiAiPFUzMTMyPjxVMzE1MD48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0FFTAorPFVBRTcxPiAiPFUzMTMyPjxVMzE1MD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0FFTEcKKzxVQUU3Mj4gIjxVMzEzMj48VTMxNTA+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBRUxNCis8VUFFNzM+ICI8VTMxMzI+PFUzMTUwPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEdHQUVMQgorPFVBRTc0PiAiPFUzMTMyPjxVMzE1MD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0FFTFMKKzxVQUU3NT4gIjxVMzEzMj48VTMxNTA+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBRUxUCis8VUFFNzY+ICI8VTMxMzI+PFUzMTUwPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHQUVMUAorPFVBRTc3PiAiPFUzMTMyPjxVMzE1MD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0FFTEgKKzxVQUU3OD4gIjxVMzEzMj48VTMxNTA+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBRU0KKzxVQUU3OT4gIjxVMzEzMj48VTMxNTA+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBRUIKKzxVQUU3QT4gIjxVMzEzMj48VTMxNTA+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBRUJTCis8VUFFN0I+ICI8VTMxMzI+PFUzMTUwPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHQUVTCis8VUFFN0M+ICI8VTMxMzI+PFUzMTUwPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHQUVTUworPFVBRTdEPiAiPFUzMTMyPjxVMzE1MD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0FFTkcKKzxVQUU3RT4gIjxVMzEzMj48VTMxNTA+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBRUoKKzxVQUU3Rj4gIjxVMzEzMj48VTMxNTA+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBRUMKKzxVQUU4MD4gIjxVMzEzMj48VTMxNTA+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBRUsKKzxVQUU4MT4gIjxVMzEzMj48VTMxNTA+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBRVQKKzxVQUU4Mj4gIjxVMzEzMj48VTMxNTA+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBRVAKKzxVQUU4Mz4gIjxVMzEzMj48VTMxNTA+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dBRUgKKzxVQUU4ND4gIjxVMzEzMj48VTMxNTE+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lBCis8VUFFODU+ICI8VTMxMzI+PFUzMTUxPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUFHCis8VUFFODY+ICI8VTMxMzI+PFUzMTUxPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUFHRworPFVBRTg3PiAiPFUzMTMyPjxVMzE1MT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lBR1MKKzxVQUU4OD4gIjxVMzEzMj48VTMxNTE+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZQU4KKzxVQUU4OT4gIjxVMzEzMj48VTMxNTE+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZQU5JCis8VUFFOEE+ICI8VTMxMzI+PFUzMTUxPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUFOSAorPFVBRThCPiAiPFUzMTMyPjxVMzE1MT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lBRAorPFVBRThDPiAiPFUzMTMyPjxVMzE1MT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lBTAorPFVBRThEPiAiPFUzMTMyPjxVMzE1MT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lBTEcKKzxVQUU4RT4gIjxVMzEzMj48VTMxNTE+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZQUxNCis8VUFFOEY+ICI8VTMxMzI+PFUzMTUxPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUFMQgorPFVBRTkwPiAiPFUzMTMyPjxVMzE1MT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lBTFMKKzxVQUU5MT4gIjxVMzEzMj48VTMxNTE+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZQUxUCis8VUFFOTI+ICI8VTMxMzI+PFUzMTUxPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUFMUAorPFVBRTkzPiAiPFUzMTMyPjxVMzE1MT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lBTEgKKzxVQUU5ND4gIjxVMzEzMj48VTMxNTE+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZQU0KKzxVQUU5NT4gIjxVMzEzMj48VTMxNTE+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZQUIKKzxVQUU5Nj4gIjxVMzEzMj48VTMxNTE+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZQUJTCis8VUFFOTc+ICI8VTMxMzI+PFUzMTUxPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUFTCis8VUFFOTg+ICI8VTMxMzI+PFUzMTUxPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUFTUworPFVBRTk5PiAiPFUzMTMyPjxVMzE1MT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lBTkcKKzxVQUU5QT4gIjxVMzEzMj48VTMxNTE+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZQUoKKzxVQUU5Qj4gIjxVMzEzMj48VTMxNTE+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZQUMKKzxVQUU5Qz4gIjxVMzEzMj48VTMxNTE+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZQUsKKzxVQUU5RD4gIjxVMzEzMj48VTMxNTE+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZQVQKKzxVQUU5RT4gIjxVMzEzMj48VTMxNTE+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZQVAKKzxVQUU5Rj4gIjxVMzEzMj48VTMxNTE+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZQUgKKzxVQUVBMD4gIjxVMzEzMj48VTMxNTI+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lBRQorPFVBRUExPiAiPFUzMTMyPjxVMzE1Mj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lBRUcKKzxVQUVBMj4gIjxVMzEzMj48VTMxNTI+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZQUVHRworPFVBRUEzPiAiPFUzMTMyPjxVMzE1Mj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lBRUdTCis8VUFFQTQ+ICI8VTMxMzI+PFUzMTUyPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUFFTgorPFVBRUE1PiAiPFUzMTMyPjxVMzE1Mj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lBRU5JCis8VUFFQTY+ICI8VTMxMzI+PFUzMTUyPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUFFTkgKKzxVQUVBNz4gIjxVMzEzMj48VTMxNTI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZQUVECis8VUFFQTg+ICI8VTMxMzI+PFUzMTUyPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUFFTAorPFVBRUE5PiAiPFUzMTMyPjxVMzE1Mj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lBRUxHCis8VUFFQUE+ICI8VTMxMzI+PFUzMTUyPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUFFTE0KKzxVQUVBQj4gIjxVMzEzMj48VTMxNTI+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZQUVMQgorPFVBRUFDPiAiPFUzMTMyPjxVMzE1Mj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lBRUxTCis8VUFFQUQ+ICI8VTMxMzI+PFUzMTUyPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUFFTFQKKzxVQUVBRT4gIjxVMzEzMj48VTMxNTI+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZQUVMUAorPFVBRUFGPiAiPFUzMTMyPjxVMzE1Mj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lBRUxICis8VUFFQjA+ICI8VTMxMzI+PFUzMTUyPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUFFTQorPFVBRUIxPiAiPFUzMTMyPjxVMzE1Mj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lBRUIKKzxVQUVCMj4gIjxVMzEzMj48VTMxNTI+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZQUVCUworPFVBRUIzPiAiPFUzMTMyPjxVMzE1Mj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lBRVMKKzxVQUVCND4gIjxVMzEzMj48VTMxNTI+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZQUVTUworPFVBRUI1PiAiPFUzMTMyPjxVMzE1Mj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lBRU5HCis8VUFFQjY+ICI8VTMxMzI+PFUzMTUyPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUFFSgorPFVBRUI3PiAiPFUzMTMyPjxVMzE1Mj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lBRUMKKzxVQUVCOD4gIjxVMzEzMj48VTMxNTI+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZQUVLCis8VUFFQjk+ICI8VTMxMzI+PFUzMTUyPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUFFVAorPFVBRUJBPiAiPFUzMTMyPjxVMzE1Mj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lBRVAKKzxVQUVCQj4gIjxVMzEzMj48VTMxNTI+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZQUVICis8VUFFQkM+ICI8VTMxMzI+PFUzMTUzPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFTworPFVBRUJEPiAiPFUzMTMyPjxVMzE1Mz48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0VPRworPFVBRUJFPiAiPFUzMTMyPjxVMzE1Mz48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0VPR0cKKzxVQUVCRj4gIjxVMzEzMj48VTMxNTM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFT0dTCis8VUFFQzA+ICI8VTMxMzI+PFUzMTUzPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRU9OCis8VUFFQzE+ICI8VTMxMzI+PFUzMTUzPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRU9OSQorPFVBRUMyPiAiPFUzMTMyPjxVMzE1Mz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0VPTkgKKzxVQUVDMz4gIjxVMzEzMj48VTMxNTM+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFT0QKKzxVQUVDND4gIjxVMzEzMj48VTMxNTM+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFT0wKKzxVQUVDNT4gIjxVMzEzMj48VTMxNTM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFT0xHCis8VUFFQzY+ICI8VTMxMzI+PFUzMTUzPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRU9MTQorPFVBRUM3PiAiPFUzMTMyPjxVMzE1Mz48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0VPTEIKKzxVQUVDOD4gIjxVMzEzMj48VTMxNTM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFT0xTCis8VUFFQzk+ICI8VTMxMzI+PFUzMTUzPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRU9MVAorPFVBRUNBPiAiPFUzMTMyPjxVMzE1Mz48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0VPTFAKKzxVQUVDQj4gIjxVMzEzMj48VTMxNTM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFT0xICis8VUFFQ0M+ICI8VTMxMzI+PFUzMTUzPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRU9NCis8VUFFQ0Q+ICI8VTMxMzI+PFUzMTUzPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRU9CCis8VUFFQ0U+ICI8VTMxMzI+PFUzMTUzPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRU9CUworPFVBRUNGPiAiPFUzMTMyPjxVMzE1Mz48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0VPUworPFVBRUQwPiAiPFUzMTMyPjxVMzE1Mz48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0VPU1MKKzxVQUVEMT4gIjxVMzEzMj48VTMxNTM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFT05HCis8VUFFRDI+ICI8VTMxMzI+PFUzMTUzPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRU9KCis8VUFFRDM+ICI8VTMxMzI+PFUzMTUzPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRU9DCis8VUFFRDQ+ICI8VTMxMzI+PFUzMTUzPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRU9LCis8VUFFRDU+ICI8VTMxMzI+PFUzMTUzPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRU9UCis8VUFFRDY+ICI8VTMxMzI+PFUzMTUzPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRU9QCis8VUFFRDc+ICI8VTMxMzI+PFUzMTUzPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRU9ICis8VUFFRDg+ICI8VTMxMzI+PFUzMTU0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFCis8VUFFRDk+ICI8VTMxMzI+PFUzMTU0PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRUcKKzxVQUVEQT4gIjxVMzEzMj48VTMxNTQ+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFR0cKKzxVQUVEQj4gIjxVMzEzMj48VTMxNTQ+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFR1MKKzxVQUVEQz4gIjxVMzEzMj48VTMxNTQ+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFTgorPFVBRUREPiAiPFUzMTMyPjxVMzE1ND48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0VOSQorPFVBRURFPiAiPFUzMTMyPjxVMzE1ND48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0VOSAorPFVBRURGPiAiPFUzMTMyPjxVMzE1ND48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0VECis8VUFFRTA+ICI8VTMxMzI+PFUzMTU0PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRUwKKzxVQUVFMT4gIjxVMzEzMj48VTMxNTQ+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFTEcKKzxVQUVFMj4gIjxVMzEzMj48VTMxNTQ+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFTE0KKzxVQUVFMz4gIjxVMzEzMj48VTMxNTQ+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFTEIKKzxVQUVFND4gIjxVMzEzMj48VTMxNTQ+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFTFMKKzxVQUVFNT4gIjxVMzEzMj48VTMxNTQ+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFTFQKKzxVQUVFNj4gIjxVMzEzMj48VTMxNTQ+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFTFAKKzxVQUVFNz4gIjxVMzEzMj48VTMxNTQ+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFTEgKKzxVQUVFOD4gIjxVMzEzMj48VTMxNTQ+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFTQorPFVBRUU5PiAiPFUzMTMyPjxVMzE1ND48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0VCCis8VUFFRUE+ICI8VTMxMzI+PFUzMTU0PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRUJTCis8VUFFRUI+ICI8VTMxMzI+PFUzMTU0PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRVMKKzxVQUVFQz4gIjxVMzEzMj48VTMxNTQ+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFU1MKKzxVQUVFRD4gIjxVMzEzMj48VTMxNTQ+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFTkcKKzxVQUVFRT4gIjxVMzEzMj48VTMxNTQ+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFSgorPFVBRUVGPiAiPFUzMTMyPjxVMzE1ND48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0VDCis8VUFFRjA+ICI8VTMxMzI+PFUzMTU0PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRUsKKzxVQUVGMT4gIjxVMzEzMj48VTMxNTQ+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFVAorPFVBRUYyPiAiPFUzMTMyPjxVMzE1ND48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0VQCis8VUFFRjM+ICI8VTMxMzI+PFUzMTU0PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRUgKKzxVQUVGND4gIjxVMzEzMj48VTMxNTU+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lFTworPFVBRUY1PiAiPFUzMTMyPjxVMzE1NT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lFT0cKKzxVQUVGNj4gIjxVMzEzMj48VTMxNTU+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZRU9HRworPFVBRUY3PiAiPFUzMTMyPjxVMzE1NT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lFT0dTCis8VUFFRjg+ICI8VTMxMzI+PFUzMTU1PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUVPTgorPFVBRUY5PiAiPFUzMTMyPjxVMzE1NT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lFT05JCis8VUFFRkE+ICI8VTMxMzI+PFUzMTU1PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUVPTkgKKzxVQUVGQj4gIjxVMzEzMj48VTMxNTU+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZRU9ECis8VUFFRkM+ICI8VTMxMzI+PFUzMTU1PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUVPTAorPFVBRUZEPiAiPFUzMTMyPjxVMzE1NT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lFT0xHCis8VUFFRkU+ICI8VTMxMzI+PFUzMTU1PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUVPTE0KKzxVQUVGRj4gIjxVMzEzMj48VTMxNTU+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZRU9MQgorPFVBRjAwPiAiPFUzMTMyPjxVMzE1NT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lFT0xTCis8VUFGMDE+ICI8VTMxMzI+PFUzMTU1PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUVPTFQKKzxVQUYwMj4gIjxVMzEzMj48VTMxNTU+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZRU9MUAorPFVBRjAzPiAiPFUzMTMyPjxVMzE1NT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lFT0xICis8VUFGMDQ+ICI8VTMxMzI+PFUzMTU1PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUVPTQorPFVBRjA1PiAiPFUzMTMyPjxVMzE1NT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lFT0IKKzxVQUYwNj4gIjxVMzEzMj48VTMxNTU+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZRU9CUworPFVBRjA3PiAiPFUzMTMyPjxVMzE1NT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lFT1MKKzxVQUYwOD4gIjxVMzEzMj48VTMxNTU+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZRU9TUworPFVBRjA5PiAiPFUzMTMyPjxVMzE1NT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lFT05HCis8VUFGMEE+ICI8VTMxMzI+PFUzMTU1PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUVPSgorPFVBRjBCPiAiPFUzMTMyPjxVMzE1NT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lFT0MKKzxVQUYwQz4gIjxVMzEzMj48VTMxNTU+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZRU9LCis8VUFGMEQ+ICI8VTMxMzI+PFUzMTU1PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUVPVAorPFVBRjBFPiAiPFUzMTMyPjxVMzE1NT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lFT1AKKzxVQUYwRj4gIjxVMzEzMj48VTMxNTU+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZRU9ICis8VUFGMTA+ICI8VTMxMzI+PFUzMTU2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZRQorPFVBRjExPiAiPFUzMTMyPjxVMzE1Nj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lFRworPFVBRjEyPiAiPFUzMTMyPjxVMzE1Nj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lFR0cKKzxVQUYxMz4gIjxVMzEzMj48VTMxNTY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZRUdTCis8VUFGMTQ+ICI8VTMxMzI+PFUzMTU2PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUVOCis8VUFGMTU+ICI8VTMxMzI+PFUzMTU2PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUVOSQorPFVBRjE2PiAiPFUzMTMyPjxVMzE1Nj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lFTkgKKzxVQUYxNz4gIjxVMzEzMj48VTMxNTY+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZRUQKKzxVQUYxOD4gIjxVMzEzMj48VTMxNTY+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZRUwKKzxVQUYxOT4gIjxVMzEzMj48VTMxNTY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZRUxHCis8VUFGMUE+ICI8VTMxMzI+PFUzMTU2PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUVMTQorPFVBRjFCPiAiPFUzMTMyPjxVMzE1Nj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lFTEIKKzxVQUYxQz4gIjxVMzEzMj48VTMxNTY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZRUxTCis8VUFGMUQ+ICI8VTMxMzI+PFUzMTU2PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUVMVAorPFVBRjFFPiAiPFUzMTMyPjxVMzE1Nj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lFTFAKKzxVQUYxRj4gIjxVMzEzMj48VTMxNTY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZRUxICis8VUFGMjA+ICI8VTMxMzI+PFUzMTU2PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUVNCis8VUFGMjE+ICI8VTMxMzI+PFUzMTU2PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUVCCis8VUFGMjI+ICI8VTMxMzI+PFUzMTU2PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUVCUworPFVBRjIzPiAiPFUzMTMyPjxVMzE1Nj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lFUworPFVBRjI0PiAiPFUzMTMyPjxVMzE1Nj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lFU1MKKzxVQUYyNT4gIjxVMzEzMj48VTMxNTY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZRU5HCis8VUFGMjY+ICI8VTMxMzI+PFUzMTU2PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUVKCis8VUFGMjc+ICI8VTMxMzI+PFUzMTU2PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUVDCis8VUFGMjg+ICI8VTMxMzI+PFUzMTU2PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUVLCis8VUFGMjk+ICI8VTMxMzI+PFUzMTU2PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUVUCis8VUFGMkE+ICI8VTMxMzI+PFUzMTU2PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUVQCis8VUFGMkI+ICI8VTMxMzI+PFUzMTU2PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUVICis8VUFGMkM+ICI8VTMxMzI+PFUzMTU3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dPCis8VUFGMkQ+ICI8VTMxMzI+PFUzMTU3PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHT0cKKzxVQUYyRT4gIjxVMzEzMj48VTMxNTc+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dPR0cKKzxVQUYyRj4gIjxVMzEzMj48VTMxNTc+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dPR1MKKzxVQUYzMD4gIjxVMzEzMj48VTMxNTc+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dPTgorPFVBRjMxPiAiPFUzMTMyPjxVMzE1Nz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBHR09OSQorPFVBRjMyPiAiPFUzMTMyPjxVMzE1Nz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBHR09OSAorPFVBRjMzPiAiPFUzMTMyPjxVMzE1Nz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBHR09ECis8VUFGMzQ+ICI8VTMxMzI+PFUzMTU3PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHT0wKKzxVQUYzNT4gIjxVMzEzMj48VTMxNTc+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dPTEcKKzxVQUYzNj4gIjxVMzEzMj48VTMxNTc+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dPTE0KKzxVQUYzNz4gIjxVMzEzMj48VTMxNTc+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dPTEIKKzxVQUYzOD4gIjxVMzEzMj48VTMxNTc+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dPTFMKKzxVQUYzOT4gIjxVMzEzMj48VTMxNTc+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dPTFQKKzxVQUYzQT4gIjxVMzEzMj48VTMxNTc+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dPTFAKKzxVQUYzQj4gIjxVMzEzMj48VTMxNTc+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dPTEgKKzxVQUYzQz4gIjxVMzEzMj48VTMxNTc+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dPTQorPFVBRjNEPiAiPFUzMTMyPjxVMzE1Nz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBHR09CCis8VUFGM0U+ICI8VTMxMzI+PFUzMTU3PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHT0JTCis8VUFGM0Y+ICI8VTMxMzI+PFUzMTU3PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHT1MKKzxVQUY0MD4gIjxVMzEzMj48VTMxNTc+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dPU1MKKzxVQUY0MT4gIjxVMzEzMj48VTMxNTc+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dPTkcKKzxVQUY0Mj4gIjxVMzEzMj48VTMxNTc+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dPSgorPFVBRjQzPiAiPFUzMTMyPjxVMzE1Nz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBHR09DCis8VUFGNDQ+ICI8VTMxMzI+PFUzMTU3PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHT0sKKzxVQUY0NT4gIjxVMzEzMj48VTMxNTc+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dPVAorPFVBRjQ2PiAiPFUzMTMyPjxVMzE1Nz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHR09QCis8VUFGNDc+ICI8VTMxMzI+PFUzMTU3PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHT0gKKzxVQUY0OD4gIjxVMzEzMj48VTMxNTg+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dBCis8VUFGNDk+ICI8VTMxMzI+PFUzMTU4PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0FHCis8VUFGNEE+ICI8VTMxMzI+PFUzMTU4PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0FHRworPFVBRjRCPiAiPFUzMTMyPjxVMzE1OD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dBR1MKKzxVQUY0Qz4gIjxVMzEzMj48VTMxNTg+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXQU4KKzxVQUY0RD4gIjxVMzEzMj48VTMxNTg+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXQU5JCis8VUFGNEU+ICI8VTMxMzI+PFUzMTU4PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0FOSAorPFVBRjRGPiAiPFUzMTMyPjxVMzE1OD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dBRAorPFVBRjUwPiAiPFUzMTMyPjxVMzE1OD48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dBTAorPFVBRjUxPiAiPFUzMTMyPjxVMzE1OD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dBTEcKKzxVQUY1Mj4gIjxVMzEzMj48VTMxNTg+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXQUxNCis8VUFGNTM+ICI8VTMxMzI+PFUzMTU4PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0FMQgorPFVBRjU0PiAiPFUzMTMyPjxVMzE1OD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dBTFMKKzxVQUY1NT4gIjxVMzEzMj48VTMxNTg+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXQUxUCis8VUFGNTY+ICI8VTMxMzI+PFUzMTU4PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0FMUAorPFVBRjU3PiAiPFUzMTMyPjxVMzE1OD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dBTEgKKzxVQUY1OD4gIjxVMzEzMj48VTMxNTg+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXQU0KKzxVQUY1OT4gIjxVMzEzMj48VTMxNTg+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXQUIKKzxVQUY1QT4gIjxVMzEzMj48VTMxNTg+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXQUJTCis8VUFGNUI+ICI8VTMxMzI+PFUzMTU4PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0FTCis8VUFGNUM+ICI8VTMxMzI+PFUzMTU4PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0FTUworPFVBRjVEPiAiPFUzMTMyPjxVMzE1OD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dBTkcKKzxVQUY1RT4gIjxVMzEzMj48VTMxNTg+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXQUoKKzxVQUY1Rj4gIjxVMzEzMj48VTMxNTg+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXQUMKKzxVQUY2MD4gIjxVMzEzMj48VTMxNTg+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXQUsKKzxVQUY2MT4gIjxVMzEzMj48VTMxNTg+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXQVQKKzxVQUY2Mj4gIjxVMzEzMj48VTMxNTg+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXQVAKKzxVQUY2Mz4gIjxVMzEzMj48VTMxNTg+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXQUgKKzxVQUY2ND4gIjxVMzEzMj48VTMxNTk+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dBRQorPFVBRjY1PiAiPFUzMTMyPjxVMzE1OT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dBRUcKKzxVQUY2Nj4gIjxVMzEzMj48VTMxNTk+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXQUVHRworPFVBRjY3PiAiPFUzMTMyPjxVMzE1OT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dBRUdTCis8VUFGNjg+ICI8VTMxMzI+PFUzMTU5PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0FFTgorPFVBRjY5PiAiPFUzMTMyPjxVMzE1OT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dBRU5JCis8VUFGNkE+ICI8VTMxMzI+PFUzMTU5PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0FFTkgKKzxVQUY2Qj4gIjxVMzEzMj48VTMxNTk+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXQUVECis8VUFGNkM+ICI8VTMxMzI+PFUzMTU5PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0FFTAorPFVBRjZEPiAiPFUzMTMyPjxVMzE1OT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dBRUxHCis8VUFGNkU+ICI8VTMxMzI+PFUzMTU5PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0FFTE0KKzxVQUY2Rj4gIjxVMzEzMj48VTMxNTk+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXQUVMQgorPFVBRjcwPiAiPFUzMTMyPjxVMzE1OT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dBRUxTCis8VUFGNzE+ICI8VTMxMzI+PFUzMTU5PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0FFTFQKKzxVQUY3Mj4gIjxVMzEzMj48VTMxNTk+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXQUVMUAorPFVBRjczPiAiPFUzMTMyPjxVMzE1OT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dBRUxICis8VUFGNzQ+ICI8VTMxMzI+PFUzMTU5PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0FFTQorPFVBRjc1PiAiPFUzMTMyPjxVMzE1OT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dBRUIKKzxVQUY3Nj4gIjxVMzEzMj48VTMxNTk+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXQUVCUworPFVBRjc3PiAiPFUzMTMyPjxVMzE1OT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dBRVMKKzxVQUY3OD4gIjxVMzEzMj48VTMxNTk+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXQUVTUworPFVBRjc5PiAiPFUzMTMyPjxVMzE1OT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dBRU5HCis8VUFGN0E+ICI8VTMxMzI+PFUzMTU5PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0FFSgorPFVBRjdCPiAiPFUzMTMyPjxVMzE1OT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dBRUMKKzxVQUY3Qz4gIjxVMzEzMj48VTMxNTk+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXQUVLCis8VUFGN0Q+ICI8VTMxMzI+PFUzMTU5PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0FFVAorPFVBRjdFPiAiPFUzMTMyPjxVMzE1OT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dBRVAKKzxVQUY3Rj4gIjxVMzEzMj48VTMxNTk+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXQUVICis8VUFGODA+ICI8VTMxMzI+PFUzMTVBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dPRQorPFVBRjgxPiAiPFUzMTMyPjxVMzE1QT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBHR09FRworPFVBRjgyPiAiPFUzMTMyPjxVMzE1QT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBHR09FR0cKKzxVQUY4Mz4gIjxVMzEzMj48VTMxNUE+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dPRUdTCis8VUFGODQ+ICI8VTMxMzI+PFUzMTVBPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHT0VOCis8VUFGODU+ICI8VTMxMzI+PFUzMTVBPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHT0VOSQorPFVBRjg2PiAiPFUzMTMyPjxVMzE1QT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBHR09FTkgKKzxVQUY4Nz4gIjxVMzEzMj48VTMxNUE+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dPRUQKKzxVQUY4OD4gIjxVMzEzMj48VTMxNUE+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dPRUwKKzxVQUY4OT4gIjxVMzEzMj48VTMxNUE+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dPRUxHCis8VUFGOEE+ICI8VTMxMzI+PFUzMTVBPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHT0VMTQorPFVBRjhCPiAiPFUzMTMyPjxVMzE1QT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBHR09FTEIKKzxVQUY4Qz4gIjxVMzEzMj48VTMxNUE+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dPRUxTCis8VUFGOEQ+ICI8VTMxMzI+PFUzMTVBPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHT0VMVAorPFVBRjhFPiAiPFUzMTMyPjxVMzE1QT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBHR09FTFAKKzxVQUY4Rj4gIjxVMzEzMj48VTMxNUE+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dPRUxICis8VUFGOTA+ICI8VTMxMzI+PFUzMTVBPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHT0VNCis8VUFGOTE+ICI8VTMxMzI+PFUzMTVBPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHT0VCCis8VUFGOTI+ICI8VTMxMzI+PFUzMTVBPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHT0VCUworPFVBRjkzPiAiPFUzMTMyPjxVMzE1QT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBHR09FUworPFVBRjk0PiAiPFUzMTMyPjxVMzE1QT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBHR09FU1MKKzxVQUY5NT4gIjxVMzEzMj48VTMxNUE+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dPRU5HCis8VUFGOTY+ICI8VTMxMzI+PFUzMTVBPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEdHT0VKCis8VUFGOTc+ICI8VTMxMzI+PFUzMTVBPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHT0VDCis8VUFGOTg+ICI8VTMxMzI+PFUzMTVBPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHT0VLCis8VUFGOTk+ICI8VTMxMzI+PFUzMTVBPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEdHT0VUCis8VUFGOUE+ICI8VTMxMzI+PFUzMTVBPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEdHT0VQCis8VUFGOUI+ICI8VTMxMzI+PFUzMTVBPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHT0VICis8VUFGOUM+ICI8VTMxMzI+PFUzMTVCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZTworPFVBRjlEPiAiPFUzMTMyPjxVMzE1Qj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lPRworPFVBRjlFPiAiPFUzMTMyPjxVMzE1Qj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lPR0cKKzxVQUY5Rj4gIjxVMzEzMj48VTMxNUI+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZT0dTCis8VUFGQTA+ICI8VTMxMzI+PFUzMTVCPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWU9OCis8VUFGQTE+ICI8VTMxMzI+PFUzMTVCPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWU9OSQorPFVBRkEyPiAiPFUzMTMyPjxVMzE1Qj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lPTkgKKzxVQUZBMz4gIjxVMzEzMj48VTMxNUI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZT0QKKzxVQUZBND4gIjxVMzEzMj48VTMxNUI+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZT0wKKzxVQUZBNT4gIjxVMzEzMj48VTMxNUI+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZT0xHCis8VUFGQTY+ICI8VTMxMzI+PFUzMTVCPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWU9MTQorPFVBRkE3PiAiPFUzMTMyPjxVMzE1Qj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lPTEIKKzxVQUZBOD4gIjxVMzEzMj48VTMxNUI+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZT0xTCis8VUFGQTk+ICI8VTMxMzI+PFUzMTVCPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWU9MVAorPFVBRkFBPiAiPFUzMTMyPjxVMzE1Qj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lPTFAKKzxVQUZBQj4gIjxVMzEzMj48VTMxNUI+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZT0xICis8VUFGQUM+ICI8VTMxMzI+PFUzMTVCPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWU9NCis8VUFGQUQ+ICI8VTMxMzI+PFUzMTVCPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWU9CCis8VUFGQUU+ICI8VTMxMzI+PFUzMTVCPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWU9CUworPFVBRkFGPiAiPFUzMTMyPjxVMzE1Qj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lPUworPFVBRkIwPiAiPFUzMTMyPjxVMzE1Qj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lPU1MKKzxVQUZCMT4gIjxVMzEzMj48VTMxNUI+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZT05HCis8VUFGQjI+ICI8VTMxMzI+PFUzMTVCPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWU9KCis8VUFGQjM+ICI8VTMxMzI+PFUzMTVCPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWU9DCis8VUFGQjQ+ICI8VTMxMzI+PFUzMTVCPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWU9LCis8VUFGQjU+ICI8VTMxMzI+PFUzMTVCPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWU9UCis8VUFGQjY+ICI8VTMxMzI+PFUzMTVCPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWU9QCis8VUFGQjc+ICI8VTMxMzI+PFUzMTVCPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWU9ICis8VUFGQjg+ICI8VTMxMzI+PFUzMTVDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dVCis8VUFGQjk+ICI8VTMxMzI+PFUzMTVDPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHVUcKKzxVQUZCQT4gIjxVMzEzMj48VTMxNUM+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dVR0cKKzxVQUZCQj4gIjxVMzEzMj48VTMxNUM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dVR1MKKzxVQUZCQz4gIjxVMzEzMj48VTMxNUM+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dVTgorPFVBRkJEPiAiPFUzMTMyPjxVMzE1Qz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1VOSQorPFVBRkJFPiAiPFUzMTMyPjxVMzE1Qz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1VOSAorPFVBRkJGPiAiPFUzMTMyPjxVMzE1Qz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1VECis8VUFGQzA+ICI8VTMxMzI+PFUzMTVDPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHVUwKKzxVQUZDMT4gIjxVMzEzMj48VTMxNUM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dVTEcKKzxVQUZDMj4gIjxVMzEzMj48VTMxNUM+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dVTE0KKzxVQUZDMz4gIjxVMzEzMj48VTMxNUM+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dVTEIKKzxVQUZDND4gIjxVMzEzMj48VTMxNUM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dVTFMKKzxVQUZDNT4gIjxVMzEzMj48VTMxNUM+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dVTFQKKzxVQUZDNj4gIjxVMzEzMj48VTMxNUM+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dVTFAKKzxVQUZDNz4gIjxVMzEzMj48VTMxNUM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dVTEgKKzxVQUZDOD4gIjxVMzEzMj48VTMxNUM+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dVTQorPFVBRkM5PiAiPFUzMTMyPjxVMzE1Qz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1VCCis8VUFGQ0E+ICI8VTMxMzI+PFUzMTVDPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHVUJTCis8VUFGQ0I+ICI8VTMxMzI+PFUzMTVDPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHVVMKKzxVQUZDQz4gIjxVMzEzMj48VTMxNUM+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dVU1MKKzxVQUZDRD4gIjxVMzEzMj48VTMxNUM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dVTkcKKzxVQUZDRT4gIjxVMzEzMj48VTMxNUM+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dVSgorPFVBRkNGPiAiPFUzMTMyPjxVMzE1Qz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1VDCis8VUFGRDA+ICI8VTMxMzI+PFUzMTVDPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHVUsKKzxVQUZEMT4gIjxVMzEzMj48VTMxNUM+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dVVAorPFVBRkQyPiAiPFUzMTMyPjxVMzE1Qz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1VQCis8VUFGRDM+ICI8VTMxMzI+PFUzMTVDPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHVUgKKzxVQUZEND4gIjxVMzEzMj48VTMxNUQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dFTworPFVBRkQ1PiAiPFUzMTMyPjxVMzE1RD48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dFT0cKKzxVQUZENj4gIjxVMzEzMj48VTMxNUQ+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXRU9HRworPFVBRkQ3PiAiPFUzMTMyPjxVMzE1RD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dFT0dTCis8VUFGRDg+ICI8VTMxMzI+PFUzMTVEPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0VPTgorPFVBRkQ5PiAiPFUzMTMyPjxVMzE1RD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dFT05JCis8VUFGREE+ICI8VTMxMzI+PFUzMTVEPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0VPTkgKKzxVQUZEQj4gIjxVMzEzMj48VTMxNUQ+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXRU9ECis8VUFGREM+ICI8VTMxMzI+PFUzMTVEPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0VPTAorPFVBRkREPiAiPFUzMTMyPjxVMzE1RD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dFT0xHCis8VUFGREU+ICI8VTMxMzI+PFUzMTVEPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0VPTE0KKzxVQUZERj4gIjxVMzEzMj48VTMxNUQ+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXRU9MQgorPFVBRkUwPiAiPFUzMTMyPjxVMzE1RD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dFT0xTCis8VUFGRTE+ICI8VTMxMzI+PFUzMTVEPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0VPTFQKKzxVQUZFMj4gIjxVMzEzMj48VTMxNUQ+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXRU9MUAorPFVBRkUzPiAiPFUzMTMyPjxVMzE1RD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dFT0xICis8VUFGRTQ+ICI8VTMxMzI+PFUzMTVEPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0VPTQorPFVBRkU1PiAiPFUzMTMyPjxVMzE1RD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dFT0IKKzxVQUZFNj4gIjxVMzEzMj48VTMxNUQ+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXRU9CUworPFVBRkU3PiAiPFUzMTMyPjxVMzE1RD48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dFT1MKKzxVQUZFOD4gIjxVMzEzMj48VTMxNUQ+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXRU9TUworPFVBRkU5PiAiPFUzMTMyPjxVMzE1RD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dFT05HCis8VUFGRUE+ICI8VTMxMzI+PFUzMTVEPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0VPSgorPFVBRkVCPiAiPFUzMTMyPjxVMzE1RD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dFT0MKKzxVQUZFQz4gIjxVMzEzMj48VTMxNUQ+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXRU9LCis8VUFGRUQ+ICI8VTMxMzI+PFUzMTVEPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0VPVAorPFVBRkVFPiAiPFUzMTMyPjxVMzE1RD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dFT1AKKzxVQUZFRj4gIjxVMzEzMj48VTMxNUQ+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXRU9ICis8VUFGRjA+ICI8VTMxMzI+PFUzMTVFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXRQorPFVBRkYxPiAiPFUzMTMyPjxVMzE1RT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dFRworPFVBRkYyPiAiPFUzMTMyPjxVMzE1RT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dFR0cKKzxVQUZGMz4gIjxVMzEzMj48VTMxNUU+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXRUdTCis8VUFGRjQ+ICI8VTMxMzI+PFUzMTVFPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0VOCis8VUFGRjU+ICI8VTMxMzI+PFUzMTVFPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0VOSQorPFVBRkY2PiAiPFUzMTMyPjxVMzE1RT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dFTkgKKzxVQUZGNz4gIjxVMzEzMj48VTMxNUU+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXRUQKKzxVQUZGOD4gIjxVMzEzMj48VTMxNUU+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXRUwKKzxVQUZGOT4gIjxVMzEzMj48VTMxNUU+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXRUxHCis8VUFGRkE+ICI8VTMxMzI+PFUzMTVFPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0VMTQorPFVBRkZCPiAiPFUzMTMyPjxVMzE1RT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dFTEIKKzxVQUZGQz4gIjxVMzEzMj48VTMxNUU+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXRUxTCis8VUFGRkQ+ICI8VTMxMzI+PFUzMTVFPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0VMVAorPFVBRkZFPiAiPFUzMTMyPjxVMzE1RT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dFTFAKKzxVQUZGRj4gIjxVMzEzMj48VTMxNUU+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXRUxICis8VUIwMDA+ICI8VTMxMzI+PFUzMTVFPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0VNCis8VUIwMDE+ICI8VTMxMzI+PFUzMTVFPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0VCCis8VUIwMDI+ICI8VTMxMzI+PFUzMTVFPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0VCUworPFVCMDAzPiAiPFUzMTMyPjxVMzE1RT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dFUworPFVCMDA0PiAiPFUzMTMyPjxVMzE1RT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dFU1MKKzxVQjAwNT4gIjxVMzEzMj48VTMxNUU+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXRU5HCis8VUIwMDY+ICI8VTMxMzI+PFUzMTVFPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0VKCis8VUIwMDc+ICI8VTMxMzI+PFUzMTVFPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0VDCis8VUIwMDg+ICI8VTMxMzI+PFUzMTVFPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0VLCis8VUIwMDk+ICI8VTMxMzI+PFUzMTVFPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0VUCis8VUIwMEE+ICI8VTMxMzI+PFUzMTVFPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0VQCis8VUIwMEI+ICI8VTMxMzI+PFUzMTVFPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0VICis8VUIwMEM+ICI8VTMxMzI+PFUzMTVGPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXSQorPFVCMDBEPiAiPFUzMTMyPjxVMzE1Rj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dJRworPFVCMDBFPiAiPFUzMTMyPjxVMzE1Rj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dJR0cKKzxVQjAwRj4gIjxVMzEzMj48VTMxNUY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXSUdTCis8VUIwMTA+ICI8VTMxMzI+PFUzMTVGPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0lOCis8VUIwMTE+ICI8VTMxMzI+PFUzMTVGPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0lOSQorPFVCMDEyPiAiPFUzMTMyPjxVMzE1Rj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dJTkgKKzxVQjAxMz4gIjxVMzEzMj48VTMxNUY+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXSUQKKzxVQjAxND4gIjxVMzEzMj48VTMxNUY+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXSUwKKzxVQjAxNT4gIjxVMzEzMj48VTMxNUY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXSUxHCis8VUIwMTY+ICI8VTMxMzI+PFUzMTVGPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0lMTQorPFVCMDE3PiAiPFUzMTMyPjxVMzE1Rj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dJTEIKKzxVQjAxOD4gIjxVMzEzMj48VTMxNUY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXSUxTCis8VUIwMTk+ICI8VTMxMzI+PFUzMTVGPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0lMVAorPFVCMDFBPiAiPFUzMTMyPjxVMzE1Rj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dJTFAKKzxVQjAxQj4gIjxVMzEzMj48VTMxNUY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXSUxICis8VUIwMUM+ICI8VTMxMzI+PFUzMTVGPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0lNCis8VUIwMUQ+ICI8VTMxMzI+PFUzMTVGPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0lCCis8VUIwMUU+ICI8VTMxMzI+PFUzMTVGPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0lCUworPFVCMDFGPiAiPFUzMTMyPjxVMzE1Rj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dJUworPFVCMDIwPiAiPFUzMTMyPjxVMzE1Rj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1dJU1MKKzxVQjAyMT4gIjxVMzEzMj48VTMxNUY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dXSU5HCis8VUIwMjI+ICI8VTMxMzI+PFUzMTVGPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0lKCis8VUIwMjM+ICI8VTMxMzI+PFUzMTVGPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0lDCis8VUIwMjQ+ICI8VTMxMzI+PFUzMTVGPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0lLCis8VUIwMjU+ICI8VTMxMzI+PFUzMTVGPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0lUCis8VUIwMjY+ICI8VTMxMzI+PFUzMTVGPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0lQCis8VUIwMjc+ICI8VTMxMzI+PFUzMTVGPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHV0lICis8VUIwMjg+ICI8VTMxMzI+PFUzMTYwPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZVQorPFVCMDI5PiAiPFUzMTMyPjxVMzE2MD48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lVRworPFVCMDJBPiAiPFUzMTMyPjxVMzE2MD48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lVR0cKKzxVQjAyQj4gIjxVMzEzMj48VTMxNjA+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZVUdTCis8VUIwMkM+ICI8VTMxMzI+PFUzMTYwPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWVVOCis8VUIwMkQ+ICI8VTMxMzI+PFUzMTYwPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWVVOSQorPFVCMDJFPiAiPFUzMTMyPjxVMzE2MD48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lVTkgKKzxVQjAyRj4gIjxVMzEzMj48VTMxNjA+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZVUQKKzxVQjAzMD4gIjxVMzEzMj48VTMxNjA+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZVUwKKzxVQjAzMT4gIjxVMzEzMj48VTMxNjA+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZVUxHCis8VUIwMzI+ICI8VTMxMzI+PFUzMTYwPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWVVMTQorPFVCMDMzPiAiPFUzMTMyPjxVMzE2MD48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lVTEIKKzxVQjAzND4gIjxVMzEzMj48VTMxNjA+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZVUxTCis8VUIwMzU+ICI8VTMxMzI+PFUzMTYwPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWVVMVAorPFVCMDM2PiAiPFUzMTMyPjxVMzE2MD48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lVTFAKKzxVQjAzNz4gIjxVMzEzMj48VTMxNjA+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZVUxICis8VUIwMzg+ICI8VTMxMzI+PFUzMTYwPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWVVNCis8VUIwMzk+ICI8VTMxMzI+PFUzMTYwPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWVVCCis8VUIwM0E+ICI8VTMxMzI+PFUzMTYwPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWVVCUworPFVCMDNCPiAiPFUzMTMyPjxVMzE2MD48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lVUworPFVCMDNDPiAiPFUzMTMyPjxVMzE2MD48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lVU1MKKzxVQjAzRD4gIjxVMzEzMj48VTMxNjA+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZVU5HCis8VUIwM0U+ICI8VTMxMzI+PFUzMTYwPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWVVKCis8VUIwM0Y+ICI8VTMxMzI+PFUzMTYwPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWVVDCis8VUIwNDA+ICI8VTMxMzI+PFUzMTYwPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWVVLCis8VUIwNDE+ICI8VTMxMzI+PFUzMTYwPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWVVUCis8VUIwNDI+ICI8VTMxMzI+PFUzMTYwPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWVVQCis8VUIwNDM+ICI8VTMxMzI+PFUzMTYwPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWVVICis8VUIwNDQ+ICI8VTMxMzI+PFUzMTYxPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFVQorPFVCMDQ1PiAiPFUzMTMyPjxVMzE2MT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0VVRworPFVCMDQ2PiAiPFUzMTMyPjxVMzE2MT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0VVR0cKKzxVQjA0Nz4gIjxVMzEzMj48VTMxNjE+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFVUdTCis8VUIwNDg+ICI8VTMxMzI+PFUzMTYxPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRVVOCis8VUIwNDk+ICI8VTMxMzI+PFUzMTYxPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRVVOSQorPFVCMDRBPiAiPFUzMTMyPjxVMzE2MT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0VVTkgKKzxVQjA0Qj4gIjxVMzEzMj48VTMxNjE+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFVUQKKzxVQjA0Qz4gIjxVMzEzMj48VTMxNjE+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFVUwKKzxVQjA0RD4gIjxVMzEzMj48VTMxNjE+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFVUxHCis8VUIwNEU+ICI8VTMxMzI+PFUzMTYxPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRVVMTQorPFVCMDRGPiAiPFUzMTMyPjxVMzE2MT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0VVTEIKKzxVQjA1MD4gIjxVMzEzMj48VTMxNjE+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFVUxTCis8VUIwNTE+ICI8VTMxMzI+PFUzMTYxPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRVVMVAorPFVCMDUyPiAiPFUzMTMyPjxVMzE2MT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0VVTFAKKzxVQjA1Mz4gIjxVMzEzMj48VTMxNjE+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFVUxICis8VUIwNTQ+ICI8VTMxMzI+PFUzMTYxPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRVVNCis8VUIwNTU+ICI8VTMxMzI+PFUzMTYxPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRVVCCis8VUIwNTY+ICI8VTMxMzI+PFUzMTYxPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRVVCUworPFVCMDU3PiAiPFUzMTMyPjxVMzE2MT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0VVUworPFVCMDU4PiAiPFUzMTMyPjxVMzE2MT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0VVU1MKKzxVQjA1OT4gIjxVMzEzMj48VTMxNjE+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dFVU5HCis8VUIwNUE+ICI8VTMxMzI+PFUzMTYxPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRVVKCis8VUIwNUI+ICI8VTMxMzI+PFUzMTYxPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRVVDCis8VUIwNUM+ICI8VTMxMzI+PFUzMTYxPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRVVLCis8VUIwNUQ+ICI8VTMxMzI+PFUzMTYxPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRVVUCis8VUIwNUU+ICI8VTMxMzI+PFUzMTYxPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRVVQCis8VUIwNUY+ICI8VTMxMzI+PFUzMTYxPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHRVVICis8VUIwNjA+ICI8VTMxMzI+PFUzMTYyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZSQorPFVCMDYxPiAiPFUzMTMyPjxVMzE2Mj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lJRworPFVCMDYyPiAiPFUzMTMyPjxVMzE2Mj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lJR0cKKzxVQjA2Mz4gIjxVMzEzMj48VTMxNjI+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZSUdTCis8VUIwNjQ+ICI8VTMxMzI+PFUzMTYyPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUlOCis8VUIwNjU+ICI8VTMxMzI+PFUzMTYyPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUlOSQorPFVCMDY2PiAiPFUzMTMyPjxVMzE2Mj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lJTkgKKzxVQjA2Nz4gIjxVMzEzMj48VTMxNjI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZSUQKKzxVQjA2OD4gIjxVMzEzMj48VTMxNjI+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZSUwKKzxVQjA2OT4gIjxVMzEzMj48VTMxNjI+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZSUxHCis8VUIwNkE+ICI8VTMxMzI+PFUzMTYyPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUlMTQorPFVCMDZCPiAiPFUzMTMyPjxVMzE2Mj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lJTEIKKzxVQjA2Qz4gIjxVMzEzMj48VTMxNjI+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZSUxTCis8VUIwNkQ+ICI8VTMxMzI+PFUzMTYyPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUlMVAorPFVCMDZFPiAiPFUzMTMyPjxVMzE2Mj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lJTFAKKzxVQjA2Rj4gIjxVMzEzMj48VTMxNjI+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZSUxICis8VUIwNzA+ICI8VTMxMzI+PFUzMTYyPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUlNCis8VUIwNzE+ICI8VTMxMzI+PFUzMTYyPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUlCCis8VUIwNzI+ICI8VTMxMzI+PFUzMTYyPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUlCUworPFVCMDczPiAiPFUzMTMyPjxVMzE2Mj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lJUworPFVCMDc0PiAiPFUzMTMyPjxVMzE2Mj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBHR1lJU1MKKzxVQjA3NT4gIjxVMzEzMj48VTMxNjI+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dZSU5HCis8VUIwNzY+ICI8VTMxMzI+PFUzMTYyPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUlKCis8VUIwNzc+ICI8VTMxMzI+PFUzMTYyPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUlDCis8VUIwNzg+ICI8VTMxMzI+PFUzMTYyPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUlLCis8VUIwNzk+ICI8VTMxMzI+PFUzMTYyPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUlUCis8VUIwN0E+ICI8VTMxMzI+PFUzMTYyPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUlQCis8VUIwN0I+ICI8VTMxMzI+PFUzMTYyPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHWUlICis8VUIwN0M+ICI8VTMxMzI+PFUzMTYzPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dJCis8VUIwN0Q+ICI8VTMxMzI+PFUzMTYzPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHSUcKKzxVQjA3RT4gIjxVMzEzMj48VTMxNjM+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dJR0cKKzxVQjA3Rj4gIjxVMzEzMj48VTMxNjM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dJR1MKKzxVQjA4MD4gIjxVMzEzMj48VTMxNjM+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dJTgorPFVCMDgxPiAiPFUzMTMyPjxVMzE2Mz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0lOSQorPFVCMDgyPiAiPFUzMTMyPjxVMzE2Mz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0lOSAorPFVCMDgzPiAiPFUzMTMyPjxVMzE2Mz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0lECis8VUIwODQ+ICI8VTMxMzI+PFUzMTYzPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHSUwKKzxVQjA4NT4gIjxVMzEzMj48VTMxNjM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dJTEcKKzxVQjA4Nj4gIjxVMzEzMj48VTMxNjM+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dJTE0KKzxVQjA4Nz4gIjxVMzEzMj48VTMxNjM+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dJTEIKKzxVQjA4OD4gIjxVMzEzMj48VTMxNjM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dJTFMKKzxVQjA4OT4gIjxVMzEzMj48VTMxNjM+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dJTFQKKzxVQjA4QT4gIjxVMzEzMj48VTMxNjM+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dJTFAKKzxVQjA4Qj4gIjxVMzEzMj48VTMxNjM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dJTEgKKzxVQjA4Qz4gIjxVMzEzMj48VTMxNjM+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dJTQorPFVCMDhEPiAiPFUzMTMyPjxVMzE2Mz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0lCCis8VUIwOEU+ICI8VTMxMzI+PFUzMTYzPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEdHSUJTCis8VUIwOEY+ICI8VTMxMzI+PFUzMTYzPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHSVMKKzxVQjA5MD4gIjxVMzEzMj48VTMxNjM+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dJU1MKKzxVQjA5MT4gIjxVMzEzMj48VTMxNjM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dJTkcKKzxVQjA5Mj4gIjxVMzEzMj48VTMxNjM+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dJSgorPFVCMDkzPiAiPFUzMTMyPjxVMzE2Mz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0lDCis8VUIwOTQ+ICI8VTMxMzI+PFUzMTYzPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEdHSUsKKzxVQjA5NT4gIjxVMzEzMj48VTMxNjM+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgR0dJVAorPFVCMDk2PiAiPFUzMTMyPjxVMzE2Mz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBHR0lQCis8VUIwOTc+ICI8VTMxMzI+PFUzMTYzPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEdHSUgKKzxVQjA5OD4gIjxVMzEzND48VTMxNEY+IgklIEhBTkdVTCBTWUxMQUJMRSBOQQorPFVCMDk5PiAiPFUzMTM0PjxVMzE0Rj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBOQUcKKzxVQjA5QT4gIjxVMzEzND48VTMxNEY+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkFHRworPFVCMDlCPiAiPFUzMTM0PjxVMzE0Rj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBOQUdTCis8VUIwOUM+ICI8VTMxMzQ+PFUzMTRGPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIE5BTgorPFVCMDlEPiAiPFUzMTM0PjxVMzE0Rj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBOQU5JCis8VUIwOUU+ICI8VTMxMzQ+PFUzMTRGPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIE5BTkgKKzxVQjA5Rj4gIjxVMzEzND48VTMxNEY+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTkFECis8VUIwQTA+ICI8VTMxMzQ+PFUzMTRGPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIE5BTAorPFVCMEExPiAiPFUzMTM0PjxVMzE0Rj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBOQUxHCis8VUIwQTI+ICI8VTMxMzQ+PFUzMTRGPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIE5BTE0KKzxVQjBBMz4gIjxVMzEzND48VTMxNEY+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkFMQgorPFVCMEE0PiAiPFUzMTM0PjxVMzE0Rj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBOQUxTCis8VUIwQTU+ICI8VTMxMzQ+PFUzMTRGPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIE5BTFQKKzxVQjBBNj4gIjxVMzEzND48VTMxNEY+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkFMUAorPFVCMEE3PiAiPFUzMTM0PjxVMzE0Rj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBOQUxICis8VUIwQTg+ICI8VTMxMzQ+PFUzMTRGPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIE5BTQorPFVCMEE5PiAiPFUzMTM0PjxVMzE0Rj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBOQUIKKzxVQjBBQT4gIjxVMzEzND48VTMxNEY+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTkFCUworPFVCMEFCPiAiPFUzMTM0PjxVMzE0Rj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBOQVMKKzxVQjBBQz4gIjxVMzEzND48VTMxNEY+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTkFTUworPFVCMEFEPiAiPFUzMTM0PjxVMzE0Rj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBOQU5HCis8VUIwQUU+ICI8VTMxMzQ+PFUzMTRGPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIE5BSgorPFVCMEFGPiAiPFUzMTM0PjxVMzE0Rj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBOQUMKKzxVQjBCMD4gIjxVMzEzND48VTMxNEY+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkFLCis8VUIwQjE+ICI8VTMxMzQ+PFUzMTRGPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIE5BVAorPFVCMEIyPiAiPFUzMTM0PjxVMzE0Rj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBOQVAKKzxVQjBCMz4gIjxVMzEzND48VTMxNEY+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkFICis8VUIwQjQ+ICI8VTMxMzQ+PFUzMTUwPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkFFCis8VUIwQjU+ICI8VTMxMzQ+PFUzMTUwPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIE5BRUcKKzxVQjBCNj4gIjxVMzEzND48VTMxNTA+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkFFR0cKKzxVQjBCNz4gIjxVMzEzND48VTMxNTA+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkFFR1MKKzxVQjBCOD4gIjxVMzEzND48VTMxNTA+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTkFFTgorPFVCMEI5PiAiPFUzMTM0PjxVMzE1MD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBOQUVOSQorPFVCMEJBPiAiPFUzMTM0PjxVMzE1MD48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBOQUVOSAorPFVCMEJCPiAiPFUzMTM0PjxVMzE1MD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBOQUVECis8VUIwQkM+ICI8VTMxMzQ+PFUzMTUwPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIE5BRUwKKzxVQjBCRD4gIjxVMzEzND48VTMxNTA+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkFFTEcKKzxVQjBCRT4gIjxVMzEzND48VTMxNTA+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkFFTE0KKzxVQjBCRj4gIjxVMzEzND48VTMxNTA+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkFFTEIKKzxVQjBDMD4gIjxVMzEzND48VTMxNTA+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkFFTFMKKzxVQjBDMT4gIjxVMzEzND48VTMxNTA+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkFFTFQKKzxVQjBDMj4gIjxVMzEzND48VTMxNTA+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkFFTFAKKzxVQjBDMz4gIjxVMzEzND48VTMxNTA+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkFFTEgKKzxVQjBDND4gIjxVMzEzND48VTMxNTA+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkFFTQorPFVCMEM1PiAiPFUzMTM0PjxVMzE1MD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBOQUVCCis8VUIwQzY+ICI8VTMxMzQ+PFUzMTUwPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIE5BRUJTCis8VUIwQzc+ICI8VTMxMzQ+PFUzMTUwPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIE5BRVMKKzxVQjBDOD4gIjxVMzEzND48VTMxNTA+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTkFFU1MKKzxVQjBDOT4gIjxVMzEzND48VTMxNTA+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTkFFTkcKKzxVQjBDQT4gIjxVMzEzND48VTMxNTA+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgTkFFSgorPFVCMENCPiAiPFUzMTM0PjxVMzE1MD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBOQUVDCis8VUIwQ0M+ICI8VTMxMzQ+PFUzMTUwPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIE5BRUsKKzxVQjBDRD4gIjxVMzEzND48VTMxNTA+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkFFVAorPFVCMENFPiAiPFUzMTM0PjxVMzE1MD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBOQUVQCis8VUIwQ0Y+ICI8VTMxMzQ+PFUzMTUwPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIE5BRUgKKzxVQjBEMD4gIjxVMzEzND48VTMxNTE+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUEKKzxVQjBEMT4gIjxVMzEzND48VTMxNTE+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllBRworPFVCMEQyPiAiPFUzMTM0PjxVMzE1MT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFHRworPFVCMEQzPiAiPFUzMTM0PjxVMzE1MT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFHUworPFVCMEQ0PiAiPFUzMTM0PjxVMzE1MT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFOCis8VUIwRDU+ICI8VTMxMzQ+PFUzMTUxPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZQU5JCis8VUIwRDY+ICI8VTMxMzQ+PFUzMTUxPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZQU5ICis8VUIwRDc+ICI8VTMxMzQ+PFUzMTUxPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZQUQKKzxVQjBEOD4gIjxVMzEzND48VTMxNTE+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgTllBTAorPFVCMEQ5PiAiPFUzMTM0PjxVMzE1MT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFMRworPFVCMERBPiAiPFUzMTM0PjxVMzE1MT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFMTQorPFVCMERCPiAiPFUzMTM0PjxVMzE1MT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFMQgorPFVCMERDPiAiPFUzMTM0PjxVMzE1MT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFMUworPFVCMEREPiAiPFUzMTM0PjxVMzE1MT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFMVAorPFVCMERFPiAiPFUzMTM0PjxVMzE1MT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFMUAorPFVCMERGPiAiPFUzMTM0PjxVMzE1MT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFMSAorPFVCMEUwPiAiPFUzMTM0PjxVMzE1MT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFNCis8VUIwRTE+ICI8VTMxMzQ+PFUzMTUxPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZQUIKKzxVQjBFMj4gIjxVMzEzND48VTMxNTE+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTllBQlMKKzxVQjBFMz4gIjxVMzEzND48VTMxNTE+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTllBUworPFVCMEU0PiAiPFUzMTM0PjxVMzE1MT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFTUworPFVCMEU1PiAiPFUzMTM0PjxVMzE1MT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFORworPFVCMEU2PiAiPFUzMTM0PjxVMzE1MT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFKCis8VUIwRTc+ICI8VTMxMzQ+PFUzMTUxPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZQUMKKzxVQjBFOD4gIjxVMzEzND48VTMxNTE+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllBSworPFVCMEU5PiAiPFUzMTM0PjxVMzE1MT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFUCis8VUIwRUE+ICI8VTMxMzQ+PFUzMTUxPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZQVAKKzxVQjBFQj4gIjxVMzEzND48VTMxNTE+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllBSAorPFVCMEVDPiAiPFUzMTM0PjxVMzE1Mj4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZQUUKKzxVQjBFRD4gIjxVMzEzND48VTMxNTI+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllBRUcKKzxVQjBFRT4gIjxVMzEzND48VTMxNTI+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllBRUdHCis8VUIwRUY+ICI8VTMxMzQ+PFUzMTUyPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZQUVHUworPFVCMEYwPiAiPFUzMTM0PjxVMzE1Mj48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFFTgorPFVCMEYxPiAiPFUzMTM0PjxVMzE1Mj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFFTkkKKzxVQjBGMj4gIjxVMzEzND48VTMxNTI+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTllBRU5ICis8VUIwRjM+ICI8VTMxMzQ+PFUzMTUyPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZQUVECis8VUIwRjQ+ICI8VTMxMzQ+PFUzMTUyPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZQUVMCis8VUIwRjU+ICI8VTMxMzQ+PFUzMTUyPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZQUVMRworPFVCMEY2PiAiPFUzMTM0PjxVMzE1Mj48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFFTE0KKzxVQjBGNz4gIjxVMzEzND48VTMxNTI+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllBRUxCCis8VUIwRjg+ICI8VTMxMzQ+PFUzMTUyPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZQUVMUworPFVCMEY5PiAiPFUzMTM0PjxVMzE1Mj48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFFTFQKKzxVQjBGQT4gIjxVMzEzND48VTMxNTI+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllBRUxQCis8VUIwRkI+ICI8VTMxMzQ+PFUzMTUyPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZQUVMSAorPFVCMEZDPiAiPFUzMTM0PjxVMzE1Mj48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFFTQorPFVCMEZEPiAiPFUzMTM0PjxVMzE1Mj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFFQgorPFVCMEZFPiAiPFUzMTM0PjxVMzE1Mj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFFQlMKKzxVQjBGRj4gIjxVMzEzND48VTMxNTI+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTllBRVMKKzxVQjEwMD4gIjxVMzEzND48VTMxNTI+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTllBRVNTCis8VUIxMDE+ICI8VTMxMzQ+PFUzMTUyPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZQUVORworPFVCMTAyPiAiPFUzMTM0PjxVMzE1Mj48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFFSgorPFVCMTAzPiAiPFUzMTM0PjxVMzE1Mj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFFQworPFVCMTA0PiAiPFUzMTM0PjxVMzE1Mj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFFSworPFVCMTA1PiAiPFUzMTM0PjxVMzE1Mj48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFFVAorPFVCMTA2PiAiPFUzMTM0PjxVMzE1Mj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFFUAorPFVCMTA3PiAiPFUzMTM0PjxVMzE1Mj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUFFSAorPFVCMTA4PiAiPFUzMTM0PjxVMzE1Mz4iCSUgSEFOR1VMIFNZTExBQkxFIE5FTworPFVCMTA5PiAiPFUzMTM0PjxVMzE1Mz48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBORU9HCis8VUIxMEE+ICI8VTMxMzQ+PFUzMTUzPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIE5FT0dHCis8VUIxMEI+ICI8VTMxMzQ+PFUzMTUzPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIE5FT0dTCis8VUIxMEM+ICI8VTMxMzQ+PFUzMTUzPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIE5FT04KKzxVQjEwRD4gIjxVMzEzND48VTMxNTM+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTkVPTkkKKzxVQjEwRT4gIjxVMzEzND48VTMxNTM+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTkVPTkgKKzxVQjEwRj4gIjxVMzEzND48VTMxNTM+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTkVPRAorPFVCMTEwPiAiPFUzMTM0PjxVMzE1Mz48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBORU9MCis8VUIxMTE+ICI8VTMxMzQ+PFUzMTUzPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIE5FT0xHCis8VUIxMTI+ICI8VTMxMzQ+PFUzMTUzPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIE5FT0xNCis8VUIxMTM+ICI8VTMxMzQ+PFUzMTUzPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIE5FT0xCCis8VUIxMTQ+ICI8VTMxMzQ+PFUzMTUzPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIE5FT0xTCis8VUIxMTU+ICI8VTMxMzQ+PFUzMTUzPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIE5FT0xUCis8VUIxMTY+ICI8VTMxMzQ+PFUzMTUzPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIE5FT0xQCis8VUIxMTc+ICI8VTMxMzQ+PFUzMTUzPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIE5FT0xICis8VUIxMTg+ICI8VTMxMzQ+PFUzMTUzPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIE5FT00KKzxVQjExOT4gIjxVMzEzND48VTMxNTM+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkVPQgorPFVCMTFBPiAiPFUzMTM0PjxVMzE1Mz48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBORU9CUworPFVCMTFCPiAiPFUzMTM0PjxVMzE1Mz48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBORU9TCis8VUIxMUM+ICI8VTMxMzQ+PFUzMTUzPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIE5FT1NTCis8VUIxMUQ+ICI8VTMxMzQ+PFUzMTUzPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIE5FT05HCis8VUIxMUU+ICI8VTMxMzQ+PFUzMTUzPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIE5FT0oKKzxVQjExRj4gIjxVMzEzND48VTMxNTM+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkVPQworPFVCMTIwPiAiPFUzMTM0PjxVMzE1Mz48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBORU9LCis8VUIxMjE+ICI8VTMxMzQ+PFUzMTUzPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIE5FT1QKKzxVQjEyMj4gIjxVMzEzND48VTMxNTM+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkVPUAorPFVCMTIzPiAiPFUzMTM0PjxVMzE1Mz48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBORU9ICis8VUIxMjQ+ICI8VTMxMzQ+PFUzMTU0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTkUKKzxVQjEyNT4gIjxVMzEzND48VTMxNTQ+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkVHCis8VUIxMjY+ICI8VTMxMzQ+PFUzMTU0PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIE5FR0cKKzxVQjEyNz4gIjxVMzEzND48VTMxNTQ+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkVHUworPFVCMTI4PiAiPFUzMTM0PjxVMzE1ND48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBORU4KKzxVQjEyOT4gIjxVMzEzND48VTMxNTQ+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTkVOSQorPFVCMTJBPiAiPFUzMTM0PjxVMzE1ND48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBORU5ICis8VUIxMkI+ICI8VTMxMzQ+PFUzMTU0PjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIE5FRAorPFVCMTJDPiAiPFUzMTM0PjxVMzE1ND48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBORUwKKzxVQjEyRD4gIjxVMzEzND48VTMxNTQ+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkVMRworPFVCMTJFPiAiPFUzMTM0PjxVMzE1ND48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBORUxNCis8VUIxMkY+ICI8VTMxMzQ+PFUzMTU0PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIE5FTEIKKzxVQjEzMD4gIjxVMzEzND48VTMxNTQ+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkVMUworPFVCMTMxPiAiPFUzMTM0PjxVMzE1ND48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBORUxUCis8VUIxMzI+ICI8VTMxMzQ+PFUzMTU0PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIE5FTFAKKzxVQjEzMz4gIjxVMzEzND48VTMxNTQ+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkVMSAorPFVCMTM0PiAiPFUzMTM0PjxVMzE1ND48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBORU0KKzxVQjEzNT4gIjxVMzEzND48VTMxNTQ+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkVCCis8VUIxMzY+ICI8VTMxMzQ+PFUzMTU0PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIE5FQlMKKzxVQjEzNz4gIjxVMzEzND48VTMxNTQ+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTkVTCis8VUIxMzg+ICI8VTMxMzQ+PFUzMTU0PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIE5FU1MKKzxVQjEzOT4gIjxVMzEzND48VTMxNTQ+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTkVORworPFVCMTNBPiAiPFUzMTM0PjxVMzE1ND48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBORUoKKzxVQjEzQj4gIjxVMzEzND48VTMxNTQ+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkVDCis8VUIxM0M+ICI8VTMxMzQ+PFUzMTU0PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIE5FSworPFVCMTNEPiAiPFUzMTM0PjxVMzE1ND48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBORVQKKzxVQjEzRT4gIjxVMzEzND48VTMxNTQ+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkVQCis8VUIxM0Y+ICI8VTMxMzQ+PFUzMTU0PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIE5FSAorPFVCMTQwPiAiPFUzMTM0PjxVMzE1NT4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZRU8KKzxVQjE0MT4gIjxVMzEzND48VTMxNTU+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllFT0cKKzxVQjE0Mj4gIjxVMzEzND48VTMxNTU+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllFT0dHCis8VUIxNDM+ICI8VTMxMzQ+PFUzMTU1PjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZRU9HUworPFVCMTQ0PiAiPFUzMTM0PjxVMzE1NT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUVPTgorPFVCMTQ1PiAiPFUzMTM0PjxVMzE1NT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUVPTkkKKzxVQjE0Nj4gIjxVMzEzND48VTMxNTU+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTllFT05ICis8VUIxNDc+ICI8VTMxMzQ+PFUzMTU1PjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZRU9ECis8VUIxNDg+ICI8VTMxMzQ+PFUzMTU1PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZRU9MCis8VUIxNDk+ICI8VTMxMzQ+PFUzMTU1PjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZRU9MRworPFVCMTRBPiAiPFUzMTM0PjxVMzE1NT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUVPTE0KKzxVQjE0Qj4gIjxVMzEzND48VTMxNTU+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllFT0xCCis8VUIxNEM+ICI8VTMxMzQ+PFUzMTU1PjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZRU9MUworPFVCMTREPiAiPFUzMTM0PjxVMzE1NT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUVPTFQKKzxVQjE0RT4gIjxVMzEzND48VTMxNTU+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllFT0xQCis8VUIxNEY+ICI8VTMxMzQ+PFUzMTU1PjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZRU9MSAorPFVCMTUwPiAiPFUzMTM0PjxVMzE1NT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUVPTQorPFVCMTUxPiAiPFUzMTM0PjxVMzE1NT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUVPQgorPFVCMTUyPiAiPFUzMTM0PjxVMzE1NT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUVPQlMKKzxVQjE1Mz4gIjxVMzEzND48VTMxNTU+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTllFT1MKKzxVQjE1ND4gIjxVMzEzND48VTMxNTU+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTllFT1NTCis8VUIxNTU+ICI8VTMxMzQ+PFUzMTU1PjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZRU9ORworPFVCMTU2PiAiPFUzMTM0PjxVMzE1NT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUVPSgorPFVCMTU3PiAiPFUzMTM0PjxVMzE1NT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUVPQworPFVCMTU4PiAiPFUzMTM0PjxVMzE1NT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUVPSworPFVCMTU5PiAiPFUzMTM0PjxVMzE1NT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUVPVAorPFVCMTVBPiAiPFUzMTM0PjxVMzE1NT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUVPUAorPFVCMTVCPiAiPFUzMTM0PjxVMzE1NT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUVPSAorPFVCMTVDPiAiPFUzMTM0PjxVMzE1Nj4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZRQorPFVCMTVEPiAiPFUzMTM0PjxVMzE1Nj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUVHCis8VUIxNUU+ICI8VTMxMzQ+PFUzMTU2PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZRUdHCis8VUIxNUY+ICI8VTMxMzQ+PFUzMTU2PjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZRUdTCis8VUIxNjA+ICI8VTMxMzQ+PFUzMTU2PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZRU4KKzxVQjE2MT4gIjxVMzEzND48VTMxNTY+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTllFTkkKKzxVQjE2Mj4gIjxVMzEzND48VTMxNTY+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTllFTkgKKzxVQjE2Mz4gIjxVMzEzND48VTMxNTY+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTllFRAorPFVCMTY0PiAiPFUzMTM0PjxVMzE1Nj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUVMCis8VUIxNjU+ICI8VTMxMzQ+PFUzMTU2PjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZRUxHCis8VUIxNjY+ICI8VTMxMzQ+PFUzMTU2PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZRUxNCis8VUIxNjc+ICI8VTMxMzQ+PFUzMTU2PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZRUxCCis8VUIxNjg+ICI8VTMxMzQ+PFUzMTU2PjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZRUxTCis8VUIxNjk+ICI8VTMxMzQ+PFUzMTU2PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZRUxUCis8VUIxNkE+ICI8VTMxMzQ+PFUzMTU2PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZRUxQCis8VUIxNkI+ICI8VTMxMzQ+PFUzMTU2PjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZRUxICis8VUIxNkM+ICI8VTMxMzQ+PFUzMTU2PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZRU0KKzxVQjE2RD4gIjxVMzEzND48VTMxNTY+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllFQgorPFVCMTZFPiAiPFUzMTM0PjxVMzE1Nj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUVCUworPFVCMTZGPiAiPFUzMTM0PjxVMzE1Nj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUVTCis8VUIxNzA+ICI8VTMxMzQ+PFUzMTU2PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZRVNTCis8VUIxNzE+ICI8VTMxMzQ+PFUzMTU2PjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZRU5HCis8VUIxNzI+ICI8VTMxMzQ+PFUzMTU2PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZRUoKKzxVQjE3Mz4gIjxVMzEzND48VTMxNTY+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllFQworPFVCMTc0PiAiPFUzMTM0PjxVMzE1Nj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUVLCis8VUIxNzU+ICI8VTMxMzQ+PFUzMTU2PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZRVQKKzxVQjE3Nj4gIjxVMzEzND48VTMxNTY+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllFUAorPFVCMTc3PiAiPFUzMTM0PjxVMzE1Nj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUVICis8VUIxNzg+ICI8VTMxMzQ+PFUzMTU3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTk8KKzxVQjE3OT4gIjxVMzEzND48VTMxNTc+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9HCis8VUIxN0E+ICI8VTMxMzQ+PFUzMTU3PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIE5PR0cKKzxVQjE3Qj4gIjxVMzEzND48VTMxNTc+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9HUworPFVCMTdDPiAiPFUzMTM0PjxVMzE1Nz48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBOT04KKzxVQjE3RD4gIjxVMzEzND48VTMxNTc+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9OSQorPFVCMTdFPiAiPFUzMTM0PjxVMzE1Nz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBOT05ICis8VUIxN0Y+ICI8VTMxMzQ+PFUzMTU3PjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIE5PRAorPFVCMTgwPiAiPFUzMTM0PjxVMzE1Nz48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBOT0wKKzxVQjE4MT4gIjxVMzEzND48VTMxNTc+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9MRworPFVCMTgyPiAiPFUzMTM0PjxVMzE1Nz48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBOT0xNCis8VUIxODM+ICI8VTMxMzQ+PFUzMTU3PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIE5PTEIKKzxVQjE4ND4gIjxVMzEzND48VTMxNTc+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9MUworPFVCMTg1PiAiPFUzMTM0PjxVMzE1Nz48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBOT0xUCis8VUIxODY+ICI8VTMxMzQ+PFUzMTU3PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIE5PTFAKKzxVQjE4Nz4gIjxVMzEzND48VTMxNTc+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9MSAorPFVCMTg4PiAiPFUzMTM0PjxVMzE1Nz48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBOT00KKzxVQjE4OT4gIjxVMzEzND48VTMxNTc+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9CCis8VUIxOEE+ICI8VTMxMzQ+PFUzMTU3PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIE5PQlMKKzxVQjE4Qj4gIjxVMzEzND48VTMxNTc+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9TCis8VUIxOEM+ICI8VTMxMzQ+PFUzMTU3PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIE5PU1MKKzxVQjE4RD4gIjxVMzEzND48VTMxNTc+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9ORworPFVCMThFPiAiPFUzMTM0PjxVMzE1Nz48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBOT0oKKzxVQjE4Rj4gIjxVMzEzND48VTMxNTc+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9DCis8VUIxOTA+ICI8VTMxMzQ+PFUzMTU3PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIE5PSworPFVCMTkxPiAiPFUzMTM0PjxVMzE1Nz48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBOT1QKKzxVQjE5Mj4gIjxVMzEzND48VTMxNTc+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9QCis8VUIxOTM+ICI8VTMxMzQ+PFUzMTU3PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIE5PSAorPFVCMTk0PiAiPFUzMTM0PjxVMzE1OD4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQQorPFVCMTk1PiAiPFUzMTM0PjxVMzE1OD48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0FHCis8VUIxOTY+ICI8VTMxMzQ+PFUzMTU4PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQUdHCis8VUIxOTc+ICI8VTMxMzQ+PFUzMTU4PjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQUdTCis8VUIxOTg+ICI8VTMxMzQ+PFUzMTU4PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQU4KKzxVQjE5OT4gIjxVMzEzND48VTMxNTg+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTldBTkkKKzxVQjE5QT4gIjxVMzEzND48VTMxNTg+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTldBTkgKKzxVQjE5Qj4gIjxVMzEzND48VTMxNTg+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTldBRAorPFVCMTlDPiAiPFUzMTM0PjxVMzE1OD48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0FMCis8VUIxOUQ+ICI8VTMxMzQ+PFUzMTU4PjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQUxHCis8VUIxOUU+ICI8VTMxMzQ+PFUzMTU4PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQUxNCis8VUIxOUY+ICI8VTMxMzQ+PFUzMTU4PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQUxCCis8VUIxQTA+ICI8VTMxMzQ+PFUzMTU4PjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQUxTCis8VUIxQTE+ICI8VTMxMzQ+PFUzMTU4PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQUxUCis8VUIxQTI+ICI8VTMxMzQ+PFUzMTU4PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQUxQCis8VUIxQTM+ICI8VTMxMzQ+PFUzMTU4PjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQUxICis8VUIxQTQ+ICI8VTMxMzQ+PFUzMTU4PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQU0KKzxVQjFBNT4gIjxVMzEzND48VTMxNTg+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTldBQgorPFVCMUE2PiAiPFUzMTM0PjxVMzE1OD48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0FCUworPFVCMUE3PiAiPFUzMTM0PjxVMzE1OD48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0FTCis8VUIxQTg+ICI8VTMxMzQ+PFUzMTU4PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQVNTCis8VUIxQTk+ICI8VTMxMzQ+PFUzMTU4PjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQU5HCis8VUIxQUE+ICI8VTMxMzQ+PFUzMTU4PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQUoKKzxVQjFBQj4gIjxVMzEzND48VTMxNTg+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTldBQworPFVCMUFDPiAiPFUzMTM0PjxVMzE1OD48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0FLCis8VUIxQUQ+ICI8VTMxMzQ+PFUzMTU4PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQVQKKzxVQjFBRT4gIjxVMzEzND48VTMxNTg+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgTldBUAorPFVCMUFGPiAiPFUzMTM0PjxVMzE1OD48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0FICis8VUIxQjA+ICI8VTMxMzQ+PFUzMTU5PiIJJSBIQU5HVUwgU1lMTEFCTEUgTldBRQorPFVCMUIxPiAiPFUzMTM0PjxVMzE1OT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0FFRworPFVCMUIyPiAiPFUzMTM0PjxVMzE1OT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0FFR0cKKzxVQjFCMz4gIjxVMzEzND48VTMxNTk+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgTldBRUdTCis8VUIxQjQ+ICI8VTMxMzQ+PFUzMTU5PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQUVOCis8VUIxQjU+ICI8VTMxMzQ+PFUzMTU5PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQUVOSQorPFVCMUI2PiAiPFUzMTM0PjxVMzE1OT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0FFTkgKKzxVQjFCNz4gIjxVMzEzND48VTMxNTk+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTldBRUQKKzxVQjFCOD4gIjxVMzEzND48VTMxNTk+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgTldBRUwKKzxVQjFCOT4gIjxVMzEzND48VTMxNTk+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTldBRUxHCis8VUIxQkE+ICI8VTMxMzQ+PFUzMTU5PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQUVMTQorPFVCMUJCPiAiPFUzMTM0PjxVMzE1OT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0FFTEIKKzxVQjFCQz4gIjxVMzEzND48VTMxNTk+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgTldBRUxTCis8VUIxQkQ+ICI8VTMxMzQ+PFUzMTU5PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQUVMVAorPFVCMUJFPiAiPFUzMTM0PjxVMzE1OT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0FFTFAKKzxVQjFCRj4gIjxVMzEzND48VTMxNTk+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgTldBRUxICis8VUIxQzA+ICI8VTMxMzQ+PFUzMTU5PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQUVNCis8VUIxQzE+ICI8VTMxMzQ+PFUzMTU5PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQUVCCis8VUIxQzI+ICI8VTMxMzQ+PFUzMTU5PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQUVCUworPFVCMUMzPiAiPFUzMTM0PjxVMzE1OT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0FFUworPFVCMUM0PiAiPFUzMTM0PjxVMzE1OT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0FFU1MKKzxVQjFDNT4gIjxVMzEzND48VTMxNTk+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTldBRU5HCis8VUIxQzY+ICI8VTMxMzQ+PFUzMTU5PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQUVKCis8VUIxQzc+ICI8VTMxMzQ+PFUzMTU5PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQUVDCis8VUIxQzg+ICI8VTMxMzQ+PFUzMTU5PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQUVLCis8VUIxQzk+ICI8VTMxMzQ+PFUzMTU5PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQUVUCis8VUIxQ0E+ICI8VTMxMzQ+PFUzMTU5PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQUVQCis8VUIxQ0I+ICI8VTMxMzQ+PFUzMTU5PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIE5XQUVICis8VUIxQ0M+ICI8VTMxMzQ+PFUzMTVBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9FCis8VUIxQ0Q+ICI8VTMxMzQ+PFUzMTVBPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIE5PRUcKKzxVQjFDRT4gIjxVMzEzND48VTMxNUE+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9FR0cKKzxVQjFDRj4gIjxVMzEzND48VTMxNUE+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9FR1MKKzxVQjFEMD4gIjxVMzEzND48VTMxNUE+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9FTgorPFVCMUQxPiAiPFUzMTM0PjxVMzE1QT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBOT0VOSQorPFVCMUQyPiAiPFUzMTM0PjxVMzE1QT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBOT0VOSAorPFVCMUQzPiAiPFUzMTM0PjxVMzE1QT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBOT0VECis8VUIxRDQ+ICI8VTMxMzQ+PFUzMTVBPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIE5PRUwKKzxVQjFENT4gIjxVMzEzND48VTMxNUE+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9FTEcKKzxVQjFENj4gIjxVMzEzND48VTMxNUE+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9FTE0KKzxVQjFENz4gIjxVMzEzND48VTMxNUE+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9FTEIKKzxVQjFEOD4gIjxVMzEzND48VTMxNUE+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9FTFMKKzxVQjFEOT4gIjxVMzEzND48VTMxNUE+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9FTFQKKzxVQjFEQT4gIjxVMzEzND48VTMxNUE+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9FTFAKKzxVQjFEQj4gIjxVMzEzND48VTMxNUE+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9FTEgKKzxVQjFEQz4gIjxVMzEzND48VTMxNUE+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9FTQorPFVCMUREPiAiPFUzMTM0PjxVMzE1QT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBOT0VCCis8VUIxREU+ICI8VTMxMzQ+PFUzMTVBPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIE5PRUJTCis8VUIxREY+ICI8VTMxMzQ+PFUzMTVBPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIE5PRVMKKzxVQjFFMD4gIjxVMzEzND48VTMxNUE+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9FU1MKKzxVQjFFMT4gIjxVMzEzND48VTMxNUE+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9FTkcKKzxVQjFFMj4gIjxVMzEzND48VTMxNUE+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9FSgorPFVCMUUzPiAiPFUzMTM0PjxVMzE1QT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBOT0VDCis8VUIxRTQ+ICI8VTMxMzQ+PFUzMTVBPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIE5PRUsKKzxVQjFFNT4gIjxVMzEzND48VTMxNUE+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTk9FVAorPFVCMUU2PiAiPFUzMTM0PjxVMzE1QT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBOT0VQCis8VUIxRTc+ICI8VTMxMzQ+PFUzMTVBPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIE5PRUgKKzxVQjFFOD4gIjxVMzEzND48VTMxNUI+IgklIEhBTkdVTCBTWUxMQUJMRSBOWU8KKzxVQjFFOT4gIjxVMzEzND48VTMxNUI+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllPRworPFVCMUVBPiAiPFUzMTM0PjxVMzE1Qj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBOWU9HRworPFVCMUVCPiAiPFUzMTM0PjxVMzE1Qj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBOWU9HUworPFVCMUVDPiAiPFUzMTM0PjxVMzE1Qj48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBOWU9OCis8VUIxRUQ+ICI8VTMxMzQ+PFUzMTVCPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZT05JCis8VUIxRUU+ICI8VTMxMzQ+PFUzMTVCPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZT05ICis8VUIxRUY+ICI8VTMxMzQ+PFUzMTVCPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZT0QKKzxVQjFGMD4gIjxVMzEzND48VTMxNUI+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgTllPTAorPFVCMUYxPiAiPFUzMTM0PjxVMzE1Qj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBOWU9MRworPFVCMUYyPiAiPFUzMTM0PjxVMzE1Qj48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBOWU9MTQorPFVCMUYzPiAiPFUzMTM0PjxVMzE1Qj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBOWU9MQgorPFVCMUY0PiAiPFUzMTM0PjxVMzE1Qj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBOWU9MUworPFVCMUY1PiAiPFUzMTM0PjxVMzE1Qj48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBOWU9MVAorPFVCMUY2PiAiPFUzMTM0PjxVMzE1Qj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBOWU9MUAorPFVCMUY3PiAiPFUzMTM0PjxVMzE1Qj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBOWU9MSAorPFVCMUY4PiAiPFUzMTM0PjxVMzE1Qj48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBOWU9NCis8VUIxRjk+ICI8VTMxMzQ+PFUzMTVCPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZT0IKKzxVQjFGQT4gIjxVMzEzND48VTMxNUI+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTllPQlMKKzxVQjFGQj4gIjxVMzEzND48VTMxNUI+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTllPUworPFVCMUZDPiAiPFUzMTM0PjxVMzE1Qj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBOWU9TUworPFVCMUZEPiAiPFUzMTM0PjxVMzE1Qj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBOWU9ORworPFVCMUZFPiAiPFUzMTM0PjxVMzE1Qj48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBOWU9KCis8VUIxRkY+ICI8VTMxMzQ+PFUzMTVCPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZT0MKKzxVQjIwMD4gIjxVMzEzND48VTMxNUI+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllPSworPFVCMjAxPiAiPFUzMTM0PjxVMzE1Qj48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBOWU9UCis8VUIyMDI+ICI8VTMxMzQ+PFUzMTVCPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZT1AKKzxVQjIwMz4gIjxVMzEzND48VTMxNUI+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllPSAorPFVCMjA0PiAiPFUzMTM0PjxVMzE1Qz4iCSUgSEFOR1VMIFNZTExBQkxFIE5VCis8VUIyMDU+ICI8VTMxMzQ+PFUzMTVDPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIE5VRworPFVCMjA2PiAiPFUzMTM0PjxVMzE1Qz48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBOVUdHCis8VUIyMDc+ICI8VTMxMzQ+PFUzMTVDPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIE5VR1MKKzxVQjIwOD4gIjxVMzEzND48VTMxNUM+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTlVOCis8VUIyMDk+ICI8VTMxMzQ+PFUzMTVDPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIE5VTkkKKzxVQjIwQT4gIjxVMzEzND48VTMxNUM+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTlVOSAorPFVCMjBCPiAiPFUzMTM0PjxVMzE1Qz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBOVUQKKzxVQjIwQz4gIjxVMzEzND48VTMxNUM+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgTlVMCis8VUIyMEQ+ICI8VTMxMzQ+PFUzMTVDPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIE5VTEcKKzxVQjIwRT4gIjxVMzEzND48VTMxNUM+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgTlVMTQorPFVCMjBGPiAiPFUzMTM0PjxVMzE1Qz48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBOVUxCCis8VUIyMTA+ICI8VTMxMzQ+PFUzMTVDPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIE5VTFMKKzxVQjIxMT4gIjxVMzEzND48VTMxNUM+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgTlVMVAorPFVCMjEyPiAiPFUzMTM0PjxVMzE1Qz48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBOVUxQCis8VUIyMTM+ICI8VTMxMzQ+PFUzMTVDPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIE5VTEgKKzxVQjIxND4gIjxVMzEzND48VTMxNUM+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTlVNCis8VUIyMTU+ICI8VTMxMzQ+PFUzMTVDPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIE5VQgorPFVCMjE2PiAiPFUzMTM0PjxVMzE1Qz48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBOVUJTCis8VUIyMTc+ICI8VTMxMzQ+PFUzMTVDPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIE5VUworPFVCMjE4PiAiPFUzMTM0PjxVMzE1Qz48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBOVVNTCis8VUIyMTk+ICI8VTMxMzQ+PFUzMTVDPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIE5VTkcKKzxVQjIxQT4gIjxVMzEzND48VTMxNUM+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgTlVKCis8VUIyMUI+ICI8VTMxMzQ+PFUzMTVDPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIE5VQworPFVCMjFDPiAiPFUzMTM0PjxVMzE1Qz48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBOVUsKKzxVQjIxRD4gIjxVMzEzND48VTMxNUM+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTlVUCis8VUIyMUU+ICI8VTMxMzQ+PFUzMTVDPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIE5VUAorPFVCMjFGPiAiPFUzMTM0PjxVMzE1Qz48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBOVUgKKzxVQjIyMD4gIjxVMzEzND48VTMxNUQ+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0VPCis8VUIyMjE+ICI8VTMxMzQ+PFUzMTVEPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIE5XRU9HCis8VUIyMjI+ICI8VTMxMzQ+PFUzMTVEPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIE5XRU9HRworPFVCMjIzPiAiPFUzMTM0PjxVMzE1RD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0VPR1MKKzxVQjIyND4gIjxVMzEzND48VTMxNUQ+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTldFT04KKzxVQjIyNT4gIjxVMzEzND48VTMxNUQ+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTldFT05JCis8VUIyMjY+ICI8VTMxMzQ+PFUzMTVEPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIE5XRU9OSAorPFVCMjI3PiAiPFUzMTM0PjxVMzE1RD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0VPRAorPFVCMjI4PiAiPFUzMTM0PjxVMzE1RD48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0VPTAorPFVCMjI5PiAiPFUzMTM0PjxVMzE1RD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0VPTEcKKzxVQjIyQT4gIjxVMzEzND48VTMxNUQ+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgTldFT0xNCis8VUIyMkI+ICI8VTMxMzQ+PFUzMTVEPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIE5XRU9MQgorPFVCMjJDPiAiPFUzMTM0PjxVMzE1RD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0VPTFMKKzxVQjIyRD4gIjxVMzEzND48VTMxNUQ+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgTldFT0xUCis8VUIyMkU+ICI8VTMxMzQ+PFUzMTVEPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIE5XRU9MUAorPFVCMjJGPiAiPFUzMTM0PjxVMzE1RD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0VPTEgKKzxVQjIzMD4gIjxVMzEzND48VTMxNUQ+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTldFT00KKzxVQjIzMT4gIjxVMzEzND48VTMxNUQ+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTldFT0IKKzxVQjIzMj4gIjxVMzEzND48VTMxNUQ+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTldFT0JTCis8VUIyMzM+ICI8VTMxMzQ+PFUzMTVEPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIE5XRU9TCis8VUIyMzQ+ICI8VTMxMzQ+PFUzMTVEPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIE5XRU9TUworPFVCMjM1PiAiPFUzMTM0PjxVMzE1RD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0VPTkcKKzxVQjIzNj4gIjxVMzEzND48VTMxNUQ+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgTldFT0oKKzxVQjIzNz4gIjxVMzEzND48VTMxNUQ+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTldFT0MKKzxVQjIzOD4gIjxVMzEzND48VTMxNUQ+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgTldFT0sKKzxVQjIzOT4gIjxVMzEzND48VTMxNUQ+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTldFT1QKKzxVQjIzQT4gIjxVMzEzND48VTMxNUQ+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgTldFT1AKKzxVQjIzQj4gIjxVMzEzND48VTMxNUQ+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgTldFT0gKKzxVQjIzQz4gIjxVMzEzND48VTMxNUU+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0UKKzxVQjIzRD4gIjxVMzEzND48VTMxNUU+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTldFRworPFVCMjNFPiAiPFUzMTM0PjxVMzE1RT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0VHRworPFVCMjNGPiAiPFUzMTM0PjxVMzE1RT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0VHUworPFVCMjQwPiAiPFUzMTM0PjxVMzE1RT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0VOCis8VUIyNDE+ICI8VTMxMzQ+PFUzMTVFPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIE5XRU5JCis8VUIyNDI+ICI8VTMxMzQ+PFUzMTVFPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIE5XRU5ICis8VUIyNDM+ICI8VTMxMzQ+PFUzMTVFPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIE5XRUQKKzxVQjI0ND4gIjxVMzEzND48VTMxNUU+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgTldFTAorPFVCMjQ1PiAiPFUzMTM0PjxVMzE1RT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0VMRworPFVCMjQ2PiAiPFUzMTM0PjxVMzE1RT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0VMTQorPFVCMjQ3PiAiPFUzMTM0PjxVMzE1RT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0VMQgorPFVCMjQ4PiAiPFUzMTM0PjxVMzE1RT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0VMUworPFVCMjQ5PiAiPFUzMTM0PjxVMzE1RT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0VMVAorPFVCMjRBPiAiPFUzMTM0PjxVMzE1RT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0VMUAorPFVCMjRCPiAiPFUzMTM0PjxVMzE1RT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0VMSAorPFVCMjRDPiAiPFUzMTM0PjxVMzE1RT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0VNCis8VUIyNEQ+ICI8VTMxMzQ+PFUzMTVFPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIE5XRUIKKzxVQjI0RT4gIjxVMzEzND48VTMxNUU+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTldFQlMKKzxVQjI0Rj4gIjxVMzEzND48VTMxNUU+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTldFUworPFVCMjUwPiAiPFUzMTM0PjxVMzE1RT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0VTUworPFVCMjUxPiAiPFUzMTM0PjxVMzE1RT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0VORworPFVCMjUyPiAiPFUzMTM0PjxVMzE1RT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0VKCis8VUIyNTM+ICI8VTMxMzQ+PFUzMTVFPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIE5XRUMKKzxVQjI1ND4gIjxVMzEzND48VTMxNUU+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgTldFSworPFVCMjU1PiAiPFUzMTM0PjxVMzE1RT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0VUCis8VUIyNTY+ICI8VTMxMzQ+PFUzMTVFPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIE5XRVAKKzxVQjI1Nz4gIjxVMzEzND48VTMxNUU+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgTldFSAorPFVCMjU4PiAiPFUzMTM0PjxVMzE1Rj4iCSUgSEFOR1VMIFNZTExBQkxFIE5XSQorPFVCMjU5PiAiPFUzMTM0PjxVMzE1Rj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0lHCis8VUIyNUE+ICI8VTMxMzQ+PFUzMTVGPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIE5XSUdHCis8VUIyNUI+ICI8VTMxMzQ+PFUzMTVGPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIE5XSUdTCis8VUIyNUM+ICI8VTMxMzQ+PFUzMTVGPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIE5XSU4KKzxVQjI1RD4gIjxVMzEzND48VTMxNUY+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTldJTkkKKzxVQjI1RT4gIjxVMzEzND48VTMxNUY+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTldJTkgKKzxVQjI1Rj4gIjxVMzEzND48VTMxNUY+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTldJRAorPFVCMjYwPiAiPFUzMTM0PjxVMzE1Rj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0lMCis8VUIyNjE+ICI8VTMxMzQ+PFUzMTVGPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIE5XSUxHCis8VUIyNjI+ICI8VTMxMzQ+PFUzMTVGPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIE5XSUxNCis8VUIyNjM+ICI8VTMxMzQ+PFUzMTVGPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIE5XSUxCCis8VUIyNjQ+ICI8VTMxMzQ+PFUzMTVGPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIE5XSUxTCis8VUIyNjU+ICI8VTMxMzQ+PFUzMTVGPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIE5XSUxUCis8VUIyNjY+ICI8VTMxMzQ+PFUzMTVGPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIE5XSUxQCis8VUIyNjc+ICI8VTMxMzQ+PFUzMTVGPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIE5XSUxICis8VUIyNjg+ICI8VTMxMzQ+PFUzMTVGPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIE5XSU0KKzxVQjI2OT4gIjxVMzEzND48VTMxNUY+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTldJQgorPFVCMjZBPiAiPFUzMTM0PjxVMzE1Rj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0lCUworPFVCMjZCPiAiPFUzMTM0PjxVMzE1Rj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0lTCis8VUIyNkM+ICI8VTMxMzQ+PFUzMTVGPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIE5XSVNTCis8VUIyNkQ+ICI8VTMxMzQ+PFUzMTVGPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIE5XSU5HCis8VUIyNkU+ICI8VTMxMzQ+PFUzMTVGPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIE5XSUoKKzxVQjI2Rj4gIjxVMzEzND48VTMxNUY+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTldJQworPFVCMjcwPiAiPFUzMTM0PjxVMzE1Rj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0lLCis8VUIyNzE+ICI8VTMxMzQ+PFUzMTVGPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIE5XSVQKKzxVQjI3Mj4gIjxVMzEzND48VTMxNUY+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgTldJUAorPFVCMjczPiAiPFUzMTM0PjxVMzE1Rj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBOV0lICis8VUIyNzQ+ICI8VTMxMzQ+PFUzMTYwPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllVCis8VUIyNzU+ICI8VTMxMzQ+PFUzMTYwPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZVUcKKzxVQjI3Nj4gIjxVMzEzND48VTMxNjA+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllVR0cKKzxVQjI3Nz4gIjxVMzEzND48VTMxNjA+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllVR1MKKzxVQjI3OD4gIjxVMzEzND48VTMxNjA+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTllVTgorPFVCMjc5PiAiPFUzMTM0PjxVMzE2MD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBOWVVOSQorPFVCMjdBPiAiPFUzMTM0PjxVMzE2MD48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBOWVVOSAorPFVCMjdCPiAiPFUzMTM0PjxVMzE2MD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBOWVVECis8VUIyN0M+ICI8VTMxMzQ+PFUzMTYwPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZVUwKKzxVQjI3RD4gIjxVMzEzND48VTMxNjA+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllVTEcKKzxVQjI3RT4gIjxVMzEzND48VTMxNjA+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllVTE0KKzxVQjI3Rj4gIjxVMzEzND48VTMxNjA+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllVTEIKKzxVQjI4MD4gIjxVMzEzND48VTMxNjA+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllVTFMKKzxVQjI4MT4gIjxVMzEzND48VTMxNjA+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllVTFQKKzxVQjI4Mj4gIjxVMzEzND48VTMxNjA+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllVTFAKKzxVQjI4Mz4gIjxVMzEzND48VTMxNjA+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllVTEgKKzxVQjI4ND4gIjxVMzEzND48VTMxNjA+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllVTQorPFVCMjg1PiAiPFUzMTM0PjxVMzE2MD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBOWVVCCis8VUIyODY+ICI8VTMxMzQ+PFUzMTYwPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZVUJTCis8VUIyODc+ICI8VTMxMzQ+PFUzMTYwPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZVVMKKzxVQjI4OD4gIjxVMzEzND48VTMxNjA+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTllVU1MKKzxVQjI4OT4gIjxVMzEzND48VTMxNjA+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTllVTkcKKzxVQjI4QT4gIjxVMzEzND48VTMxNjA+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgTllVSgorPFVCMjhCPiAiPFUzMTM0PjxVMzE2MD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBOWVVDCis8VUIyOEM+ICI8VTMxMzQ+PFUzMTYwPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZVUsKKzxVQjI4RD4gIjxVMzEzND48VTMxNjA+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllVVAorPFVCMjhFPiAiPFUzMTM0PjxVMzE2MD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBOWVVQCis8VUIyOEY+ICI8VTMxMzQ+PFUzMTYwPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZVUgKKzxVQjI5MD4gIjxVMzEzND48VTMxNjE+IgklIEhBTkdVTCBTWUxMQUJMRSBORVUKKzxVQjI5MT4gIjxVMzEzND48VTMxNjE+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkVVRworPFVCMjkyPiAiPFUzMTM0PjxVMzE2MT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBORVVHRworPFVCMjkzPiAiPFUzMTM0PjxVMzE2MT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBORVVHUworPFVCMjk0PiAiPFUzMTM0PjxVMzE2MT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBORVVOCis8VUIyOTU+ICI8VTMxMzQ+PFUzMTYxPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIE5FVU5JCis8VUIyOTY+ICI8VTMxMzQ+PFUzMTYxPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIE5FVU5ICis8VUIyOTc+ICI8VTMxMzQ+PFUzMTYxPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIE5FVUQKKzxVQjI5OD4gIjxVMzEzND48VTMxNjE+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgTkVVTAorPFVCMjk5PiAiPFUzMTM0PjxVMzE2MT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBORVVMRworPFVCMjlBPiAiPFUzMTM0PjxVMzE2MT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBORVVMTQorPFVCMjlCPiAiPFUzMTM0PjxVMzE2MT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBORVVMQgorPFVCMjlDPiAiPFUzMTM0PjxVMzE2MT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBORVVMUworPFVCMjlEPiAiPFUzMTM0PjxVMzE2MT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBORVVMVAorPFVCMjlFPiAiPFUzMTM0PjxVMzE2MT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBORVVMUAorPFVCMjlGPiAiPFUzMTM0PjxVMzE2MT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBORVVMSAorPFVCMkEwPiAiPFUzMTM0PjxVMzE2MT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBORVVNCis8VUIyQTE+ICI8VTMxMzQ+PFUzMTYxPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIE5FVUIKKzxVQjJBMj4gIjxVMzEzND48VTMxNjE+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTkVVQlMKKzxVQjJBMz4gIjxVMzEzND48VTMxNjE+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTkVVUworPFVCMkE0PiAiPFUzMTM0PjxVMzE2MT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBORVVTUworPFVCMkE1PiAiPFUzMTM0PjxVMzE2MT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBORVVORworPFVCMkE2PiAiPFUzMTM0PjxVMzE2MT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBORVVKCis8VUIyQTc+ICI8VTMxMzQ+PFUzMTYxPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIE5FVUMKKzxVQjJBOD4gIjxVMzEzND48VTMxNjE+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkVVSworPFVCMkE5PiAiPFUzMTM0PjxVMzE2MT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBORVVUCis8VUIyQUE+ICI8VTMxMzQ+PFUzMTYxPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIE5FVVAKKzxVQjJBQj4gIjxVMzEzND48VTMxNjE+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkVVSAorPFVCMkFDPiAiPFUzMTM0PjxVMzE2Mj4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZSQorPFVCMkFEPiAiPFUzMTM0PjxVMzE2Mj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUlHCis8VUIyQUU+ICI8VTMxMzQ+PFUzMTYyPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZSUdHCis8VUIyQUY+ICI8VTMxMzQ+PFUzMTYyPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZSUdTCis8VUIyQjA+ICI8VTMxMzQ+PFUzMTYyPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZSU4KKzxVQjJCMT4gIjxVMzEzND48VTMxNjI+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTllJTkkKKzxVQjJCMj4gIjxVMzEzND48VTMxNjI+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTllJTkgKKzxVQjJCMz4gIjxVMzEzND48VTMxNjI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTllJRAorPFVCMkI0PiAiPFUzMTM0PjxVMzE2Mj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUlMCis8VUIyQjU+ICI8VTMxMzQ+PFUzMTYyPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZSUxHCis8VUIyQjY+ICI8VTMxMzQ+PFUzMTYyPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZSUxNCis8VUIyQjc+ICI8VTMxMzQ+PFUzMTYyPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZSUxCCis8VUIyQjg+ICI8VTMxMzQ+PFUzMTYyPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZSUxTCis8VUIyQjk+ICI8VTMxMzQ+PFUzMTYyPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZSUxUCis8VUIyQkE+ICI8VTMxMzQ+PFUzMTYyPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZSUxQCis8VUIyQkI+ICI8VTMxMzQ+PFUzMTYyPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZSUxICis8VUIyQkM+ICI8VTMxMzQ+PFUzMTYyPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZSU0KKzxVQjJCRD4gIjxVMzEzND48VTMxNjI+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllJQgorPFVCMkJFPiAiPFUzMTM0PjxVMzE2Mj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUlCUworPFVCMkJGPiAiPFUzMTM0PjxVMzE2Mj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUlTCis8VUIyQzA+ICI8VTMxMzQ+PFUzMTYyPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZSVNTCis8VUIyQzE+ICI8VTMxMzQ+PFUzMTYyPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZSU5HCis8VUIyQzI+ICI8VTMxMzQ+PFUzMTYyPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZSUoKKzxVQjJDMz4gIjxVMzEzND48VTMxNjI+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllJQworPFVCMkM0PiAiPFUzMTM0PjxVMzE2Mj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUlLCis8VUIyQzU+ICI8VTMxMzQ+PFUzMTYyPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIE5ZSVQKKzxVQjJDNj4gIjxVMzEzND48VTMxNjI+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgTllJUAorPFVCMkM3PiAiPFUzMTM0PjxVMzE2Mj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBOWUlICis8VUIyQzg+ICI8VTMxMzQ+PFUzMTYzPiIJJSBIQU5HVUwgU1lMTEFCTEUgTkkKKzxVQjJDOT4gIjxVMzEzND48VTMxNjM+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTklHCis8VUIyQ0E+ICI8VTMxMzQ+PFUzMTYzPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIE5JR0cKKzxVQjJDQj4gIjxVMzEzND48VTMxNjM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgTklHUworPFVCMkNDPiAiPFUzMTM0PjxVMzE2Mz48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBOSU4KKzxVQjJDRD4gIjxVMzEzND48VTMxNjM+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTklOSQorPFVCMkNFPiAiPFUzMTM0PjxVMzE2Mz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBOSU5ICis8VUIyQ0Y+ICI8VTMxMzQ+PFUzMTYzPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIE5JRAorPFVCMkQwPiAiPFUzMTM0PjxVMzE2Mz48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBOSUwKKzxVQjJEMT4gIjxVMzEzND48VTMxNjM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTklMRworPFVCMkQyPiAiPFUzMTM0PjxVMzE2Mz48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBOSUxNCis8VUIyRDM+ICI8VTMxMzQ+PFUzMTYzPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIE5JTEIKKzxVQjJEND4gIjxVMzEzND48VTMxNjM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgTklMUworPFVCMkQ1PiAiPFUzMTM0PjxVMzE2Mz48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBOSUxUCis8VUIyRDY+ICI8VTMxMzQ+PFUzMTYzPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIE5JTFAKKzxVQjJENz4gIjxVMzEzND48VTMxNjM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgTklMSAorPFVCMkQ4PiAiPFUzMTM0PjxVMzE2Mz48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBOSU0KKzxVQjJEOT4gIjxVMzEzND48VTMxNjM+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTklCCis8VUIyREE+ICI8VTMxMzQ+PFUzMTYzPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIE5JQlMKKzxVQjJEQj4gIjxVMzEzND48VTMxNjM+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTklTCis8VUIyREM+ICI8VTMxMzQ+PFUzMTYzPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIE5JU1MKKzxVQjJERD4gIjxVMzEzND48VTMxNjM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTklORworPFVCMkRFPiAiPFUzMTM0PjxVMzE2Mz48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBOSUoKKzxVQjJERj4gIjxVMzEzND48VTMxNjM+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTklDCis8VUIyRTA+ICI8VTMxMzQ+PFUzMTYzPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIE5JSworPFVCMkUxPiAiPFUzMTM0PjxVMzE2Mz48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBOSVQKKzxVQjJFMj4gIjxVMzEzND48VTMxNjM+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgTklQCis8VUIyRTM+ICI8VTMxMzQ+PFUzMTYzPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIE5JSAorPFVCMkU0PiAiPFUzMTM3PjxVMzE0Rj4iCSUgSEFOR1VMIFNZTExBQkxFIERBCis8VUIyRTU+ICI8VTMxMzc+PFUzMTRGPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIERBRworPFVCMkU2PiAiPFUzMTM3PjxVMzE0Rj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBEQUdHCis8VUIyRTc+ICI8VTMxMzc+PFUzMTRGPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIERBR1MKKzxVQjJFOD4gIjxVMzEzNz48VTMxNEY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgREFOCis8VUIyRTk+ICI8VTMxMzc+PFUzMTRGPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIERBTkkKKzxVQjJFQT4gIjxVMzEzNz48VTMxNEY+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgREFOSAorPFVCMkVCPiAiPFUzMTM3PjxVMzE0Rj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBEQUQKKzxVQjJFQz4gIjxVMzEzNz48VTMxNEY+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgREFMCis8VUIyRUQ+ICI8VTMxMzc+PFUzMTRGPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIERBTEcKKzxVQjJFRT4gIjxVMzEzNz48VTMxNEY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgREFMTQorPFVCMkVGPiAiPFUzMTM3PjxVMzE0Rj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBEQUxCCis8VUIyRjA+ICI8VTMxMzc+PFUzMTRGPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIERBTFMKKzxVQjJGMT4gIjxVMzEzNz48VTMxNEY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgREFMVAorPFVCMkYyPiAiPFUzMTM3PjxVMzE0Rj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBEQUxQCis8VUIyRjM+ICI8VTMxMzc+PFUzMTRGPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIERBTEgKKzxVQjJGND4gIjxVMzEzNz48VTMxNEY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgREFNCis8VUIyRjU+ICI8VTMxMzc+PFUzMTRGPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIERBQgorPFVCMkY2PiAiPFUzMTM3PjxVMzE0Rj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBEQUJTCis8VUIyRjc+ICI8VTMxMzc+PFUzMTRGPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIERBUworPFVCMkY4PiAiPFUzMTM3PjxVMzE0Rj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBEQVNTCis8VUIyRjk+ICI8VTMxMzc+PFUzMTRGPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIERBTkcKKzxVQjJGQT4gIjxVMzEzNz48VTMxNEY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgREFKCis8VUIyRkI+ICI8VTMxMzc+PFUzMTRGPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIERBQworPFVCMkZDPiAiPFUzMTM3PjxVMzE0Rj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBEQUsKKzxVQjJGRD4gIjxVMzEzNz48VTMxNEY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgREFUCis8VUIyRkU+ICI8VTMxMzc+PFUzMTRGPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIERBUAorPFVCMkZGPiAiPFUzMTM3PjxVMzE0Rj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBEQUgKKzxVQjMwMD4gIjxVMzEzNz48VTMxNTA+IgklIEhBTkdVTCBTWUxMQUJMRSBEQUUKKzxVQjMwMT4gIjxVMzEzNz48VTMxNTA+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgREFFRworPFVCMzAyPiAiPFUzMTM3PjxVMzE1MD48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBEQUVHRworPFVCMzAzPiAiPFUzMTM3PjxVMzE1MD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBEQUVHUworPFVCMzA0PiAiPFUzMTM3PjxVMzE1MD48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBEQUVOCis8VUIzMDU+ICI8VTMxMzc+PFUzMTUwPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIERBRU5JCis8VUIzMDY+ICI8VTMxMzc+PFUzMTUwPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIERBRU5ICis8VUIzMDc+ICI8VTMxMzc+PFUzMTUwPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIERBRUQKKzxVQjMwOD4gIjxVMzEzNz48VTMxNTA+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgREFFTAorPFVCMzA5PiAiPFUzMTM3PjxVMzE1MD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBEQUVMRworPFVCMzBBPiAiPFUzMTM3PjxVMzE1MD48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBEQUVMTQorPFVCMzBCPiAiPFUzMTM3PjxVMzE1MD48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBEQUVMQgorPFVCMzBDPiAiPFUzMTM3PjxVMzE1MD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBEQUVMUworPFVCMzBEPiAiPFUzMTM3PjxVMzE1MD48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBEQUVMVAorPFVCMzBFPiAiPFUzMTM3PjxVMzE1MD48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBEQUVMUAorPFVCMzBGPiAiPFUzMTM3PjxVMzE1MD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBEQUVMSAorPFVCMzEwPiAiPFUzMTM3PjxVMzE1MD48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBEQUVNCis8VUIzMTE+ICI8VTMxMzc+PFUzMTUwPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIERBRUIKKzxVQjMxMj4gIjxVMzEzNz48VTMxNTA+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgREFFQlMKKzxVQjMxMz4gIjxVMzEzNz48VTMxNTA+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgREFFUworPFVCMzE0PiAiPFUzMTM3PjxVMzE1MD48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBEQUVTUworPFVCMzE1PiAiPFUzMTM3PjxVMzE1MD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBEQUVORworPFVCMzE2PiAiPFUzMTM3PjxVMzE1MD48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBEQUVKCis8VUIzMTc+ICI8VTMxMzc+PFUzMTUwPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIERBRUMKKzxVQjMxOD4gIjxVMzEzNz48VTMxNTA+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgREFFSworPFVCMzE5PiAiPFUzMTM3PjxVMzE1MD48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBEQUVUCis8VUIzMUE+ICI8VTMxMzc+PFUzMTUwPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIERBRVAKKzxVQjMxQj4gIjxVMzEzNz48VTMxNTA+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgREFFSAorPFVCMzFDPiAiPFUzMTM3PjxVMzE1MT4iCSUgSEFOR1VMIFNZTExBQkxFIERZQQorPFVCMzFEPiAiPFUzMTM3PjxVMzE1MT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUFHCis8VUIzMUU+ICI8VTMxMzc+PFUzMTUxPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIERZQUdHCis8VUIzMUY+ICI8VTMxMzc+PFUzMTUxPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIERZQUdTCis8VUIzMjA+ICI8VTMxMzc+PFUzMTUxPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIERZQU4KKzxVQjMyMT4gIjxVMzEzNz48VTMxNTE+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlBTkkKKzxVQjMyMj4gIjxVMzEzNz48VTMxNTE+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlBTkgKKzxVQjMyMz4gIjxVMzEzNz48VTMxNTE+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlBRAorPFVCMzI0PiAiPFUzMTM3PjxVMzE1MT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUFMCis8VUIzMjU+ICI8VTMxMzc+PFUzMTUxPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIERZQUxHCis8VUIzMjY+ICI8VTMxMzc+PFUzMTUxPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIERZQUxNCis8VUIzMjc+ICI8VTMxMzc+PFUzMTUxPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIERZQUxCCis8VUIzMjg+ICI8VTMxMzc+PFUzMTUxPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIERZQUxTCis8VUIzMjk+ICI8VTMxMzc+PFUzMTUxPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIERZQUxUCis8VUIzMkE+ICI8VTMxMzc+PFUzMTUxPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIERZQUxQCis8VUIzMkI+ICI8VTMxMzc+PFUzMTUxPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIERZQUxICis8VUIzMkM+ICI8VTMxMzc+PFUzMTUxPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIERZQU0KKzxVQjMyRD4gIjxVMzEzNz48VTMxNTE+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlBQgorPFVCMzJFPiAiPFUzMTM3PjxVMzE1MT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUFCUworPFVCMzJGPiAiPFUzMTM3PjxVMzE1MT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUFTCis8VUIzMzA+ICI8VTMxMzc+PFUzMTUxPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIERZQVNTCis8VUIzMzE+ICI8VTMxMzc+PFUzMTUxPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIERZQU5HCis8VUIzMzI+ICI8VTMxMzc+PFUzMTUxPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIERZQUoKKzxVQjMzMz4gIjxVMzEzNz48VTMxNTE+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlBQworPFVCMzM0PiAiPFUzMTM3PjxVMzE1MT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUFLCis8VUIzMzU+ICI8VTMxMzc+PFUzMTUxPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIERZQVQKKzxVQjMzNj4gIjxVMzEzNz48VTMxNTE+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlBUAorPFVCMzM3PiAiPFUzMTM3PjxVMzE1MT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUFICis8VUIzMzg+ICI8VTMxMzc+PFUzMTUyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlBRQorPFVCMzM5PiAiPFUzMTM3PjxVMzE1Mj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUFFRworPFVCMzNBPiAiPFUzMTM3PjxVMzE1Mj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUFFR0cKKzxVQjMzQj4gIjxVMzEzNz48VTMxNTI+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlBRUdTCis8VUIzM0M+ICI8VTMxMzc+PFUzMTUyPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIERZQUVOCis8VUIzM0Q+ICI8VTMxMzc+PFUzMTUyPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIERZQUVOSQorPFVCMzNFPiAiPFUzMTM3PjxVMzE1Mj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUFFTkgKKzxVQjMzRj4gIjxVMzEzNz48VTMxNTI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlBRUQKKzxVQjM0MD4gIjxVMzEzNz48VTMxNTI+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlBRUwKKzxVQjM0MT4gIjxVMzEzNz48VTMxNTI+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlBRUxHCis8VUIzNDI+ICI8VTMxMzc+PFUzMTUyPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIERZQUVMTQorPFVCMzQzPiAiPFUzMTM3PjxVMzE1Mj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUFFTEIKKzxVQjM0ND4gIjxVMzEzNz48VTMxNTI+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlBRUxTCis8VUIzNDU+ICI8VTMxMzc+PFUzMTUyPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIERZQUVMVAorPFVCMzQ2PiAiPFUzMTM3PjxVMzE1Mj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUFFTFAKKzxVQjM0Nz4gIjxVMzEzNz48VTMxNTI+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlBRUxICis8VUIzNDg+ICI8VTMxMzc+PFUzMTUyPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIERZQUVNCis8VUIzNDk+ICI8VTMxMzc+PFUzMTUyPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIERZQUVCCis8VUIzNEE+ICI8VTMxMzc+PFUzMTUyPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIERZQUVCUworPFVCMzRCPiAiPFUzMTM3PjxVMzE1Mj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUFFUworPFVCMzRDPiAiPFUzMTM3PjxVMzE1Mj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUFFU1MKKzxVQjM0RD4gIjxVMzEzNz48VTMxNTI+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlBRU5HCis8VUIzNEU+ICI8VTMxMzc+PFUzMTUyPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIERZQUVKCis8VUIzNEY+ICI8VTMxMzc+PFUzMTUyPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIERZQUVDCis8VUIzNTA+ICI8VTMxMzc+PFUzMTUyPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIERZQUVLCis8VUIzNTE+ICI8VTMxMzc+PFUzMTUyPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIERZQUVUCis8VUIzNTI+ICI8VTMxMzc+PFUzMTUyPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIERZQUVQCis8VUIzNTM+ICI8VTMxMzc+PFUzMTUyPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIERZQUVICis8VUIzNTQ+ICI8VTMxMzc+PFUzMTUzPiIJJSBIQU5HVUwgU1lMTEFCTEUgREVPCis8VUIzNTU+ICI8VTMxMzc+PFUzMTUzPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIERFT0cKKzxVQjM1Nj4gIjxVMzEzNz48VTMxNTM+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgREVPR0cKKzxVQjM1Nz4gIjxVMzEzNz48VTMxNTM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgREVPR1MKKzxVQjM1OD4gIjxVMzEzNz48VTMxNTM+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgREVPTgorPFVCMzU5PiAiPFUzMTM3PjxVMzE1Mz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBERU9OSQorPFVCMzVBPiAiPFUzMTM3PjxVMzE1Mz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBERU9OSAorPFVCMzVCPiAiPFUzMTM3PjxVMzE1Mz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBERU9ECis8VUIzNUM+ICI8VTMxMzc+PFUzMTUzPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIERFT0wKKzxVQjM1RD4gIjxVMzEzNz48VTMxNTM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgREVPTEcKKzxVQjM1RT4gIjxVMzEzNz48VTMxNTM+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgREVPTE0KKzxVQjM1Rj4gIjxVMzEzNz48VTMxNTM+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgREVPTEIKKzxVQjM2MD4gIjxVMzEzNz48VTMxNTM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgREVPTFMKKzxVQjM2MT4gIjxVMzEzNz48VTMxNTM+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgREVPTFQKKzxVQjM2Mj4gIjxVMzEzNz48VTMxNTM+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgREVPTFAKKzxVQjM2Mz4gIjxVMzEzNz48VTMxNTM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgREVPTEgKKzxVQjM2ND4gIjxVMzEzNz48VTMxNTM+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgREVPTQorPFVCMzY1PiAiPFUzMTM3PjxVMzE1Mz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBERU9CCis8VUIzNjY+ICI8VTMxMzc+PFUzMTUzPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIERFT0JTCis8VUIzNjc+ICI8VTMxMzc+PFUzMTUzPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIERFT1MKKzxVQjM2OD4gIjxVMzEzNz48VTMxNTM+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgREVPU1MKKzxVQjM2OT4gIjxVMzEzNz48VTMxNTM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgREVPTkcKKzxVQjM2QT4gIjxVMzEzNz48VTMxNTM+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgREVPSgorPFVCMzZCPiAiPFUzMTM3PjxVMzE1Mz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBERU9DCis8VUIzNkM+ICI8VTMxMzc+PFUzMTUzPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIERFT0sKKzxVQjM2RD4gIjxVMzEzNz48VTMxNTM+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgREVPVAorPFVCMzZFPiAiPFUzMTM3PjxVMzE1Mz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBERU9QCis8VUIzNkY+ICI8VTMxMzc+PFUzMTUzPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIERFT0gKKzxVQjM3MD4gIjxVMzEzNz48VTMxNTQ+IgklIEhBTkdVTCBTWUxMQUJMRSBERQorPFVCMzcxPiAiPFUzMTM3PjxVMzE1ND48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBERUcKKzxVQjM3Mj4gIjxVMzEzNz48VTMxNTQ+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgREVHRworPFVCMzczPiAiPFUzMTM3PjxVMzE1ND48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBERUdTCis8VUIzNzQ+ICI8VTMxMzc+PFUzMTU0PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIERFTgorPFVCMzc1PiAiPFUzMTM3PjxVMzE1ND48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBERU5JCis8VUIzNzY+ICI8VTMxMzc+PFUzMTU0PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIERFTkgKKzxVQjM3Nz4gIjxVMzEzNz48VTMxNTQ+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgREVECis8VUIzNzg+ICI8VTMxMzc+PFUzMTU0PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIERFTAorPFVCMzc5PiAiPFUzMTM3PjxVMzE1ND48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBERUxHCis8VUIzN0E+ICI8VTMxMzc+PFUzMTU0PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIERFTE0KKzxVQjM3Qj4gIjxVMzEzNz48VTMxNTQ+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgREVMQgorPFVCMzdDPiAiPFUzMTM3PjxVMzE1ND48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBERUxTCis8VUIzN0Q+ICI8VTMxMzc+PFUzMTU0PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIERFTFQKKzxVQjM3RT4gIjxVMzEzNz48VTMxNTQ+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgREVMUAorPFVCMzdGPiAiPFUzMTM3PjxVMzE1ND48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBERUxICis8VUIzODA+ICI8VTMxMzc+PFUzMTU0PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIERFTQorPFVCMzgxPiAiPFUzMTM3PjxVMzE1ND48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBERUIKKzxVQjM4Mj4gIjxVMzEzNz48VTMxNTQ+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgREVCUworPFVCMzgzPiAiPFUzMTM3PjxVMzE1ND48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBERVMKKzxVQjM4ND4gIjxVMzEzNz48VTMxNTQ+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgREVTUworPFVCMzg1PiAiPFUzMTM3PjxVMzE1ND48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBERU5HCis8VUIzODY+ICI8VTMxMzc+PFUzMTU0PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIERFSgorPFVCMzg3PiAiPFUzMTM3PjxVMzE1ND48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBERUMKKzxVQjM4OD4gIjxVMzEzNz48VTMxNTQ+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgREVLCis8VUIzODk+ICI8VTMxMzc+PFUzMTU0PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIERFVAorPFVCMzhBPiAiPFUzMTM3PjxVMzE1ND48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBERVAKKzxVQjM4Qj4gIjxVMzEzNz48VTMxNTQ+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgREVICis8VUIzOEM+ICI8VTMxMzc+PFUzMTU1PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlFTworPFVCMzhEPiAiPFUzMTM3PjxVMzE1NT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUVPRworPFVCMzhFPiAiPFUzMTM3PjxVMzE1NT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUVPR0cKKzxVQjM4Rj4gIjxVMzEzNz48VTMxNTU+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlFT0dTCis8VUIzOTA+ICI8VTMxMzc+PFUzMTU1PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIERZRU9OCis8VUIzOTE+ICI8VTMxMzc+PFUzMTU1PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIERZRU9OSQorPFVCMzkyPiAiPFUzMTM3PjxVMzE1NT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUVPTkgKKzxVQjM5Mz4gIjxVMzEzNz48VTMxNTU+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlFT0QKKzxVQjM5ND4gIjxVMzEzNz48VTMxNTU+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlFT0wKKzxVQjM5NT4gIjxVMzEzNz48VTMxNTU+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlFT0xHCis8VUIzOTY+ICI8VTMxMzc+PFUzMTU1PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIERZRU9MTQorPFVCMzk3PiAiPFUzMTM3PjxVMzE1NT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUVPTEIKKzxVQjM5OD4gIjxVMzEzNz48VTMxNTU+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlFT0xTCis8VUIzOTk+ICI8VTMxMzc+PFUzMTU1PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIERZRU9MVAorPFVCMzlBPiAiPFUzMTM3PjxVMzE1NT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUVPTFAKKzxVQjM5Qj4gIjxVMzEzNz48VTMxNTU+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlFT0xICis8VUIzOUM+ICI8VTMxMzc+PFUzMTU1PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIERZRU9NCis8VUIzOUQ+ICI8VTMxMzc+PFUzMTU1PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIERZRU9CCis8VUIzOUU+ICI8VTMxMzc+PFUzMTU1PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIERZRU9CUworPFVCMzlGPiAiPFUzMTM3PjxVMzE1NT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUVPUworPFVCM0EwPiAiPFUzMTM3PjxVMzE1NT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUVPU1MKKzxVQjNBMT4gIjxVMzEzNz48VTMxNTU+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlFT05HCis8VUIzQTI+ICI8VTMxMzc+PFUzMTU1PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIERZRU9KCis8VUIzQTM+ICI8VTMxMzc+PFUzMTU1PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIERZRU9DCis8VUIzQTQ+ICI8VTMxMzc+PFUzMTU1PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIERZRU9LCis8VUIzQTU+ICI8VTMxMzc+PFUzMTU1PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIERZRU9UCis8VUIzQTY+ICI8VTMxMzc+PFUzMTU1PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIERZRU9QCis8VUIzQTc+ICI8VTMxMzc+PFUzMTU1PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIERZRU9ICis8VUIzQTg+ICI8VTMxMzc+PFUzMTU2PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlFCis8VUIzQTk+ICI8VTMxMzc+PFUzMTU2PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIERZRUcKKzxVQjNBQT4gIjxVMzEzNz48VTMxNTY+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlFR0cKKzxVQjNBQj4gIjxVMzEzNz48VTMxNTY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlFR1MKKzxVQjNBQz4gIjxVMzEzNz48VTMxNTY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlFTgorPFVCM0FEPiAiPFUzMTM3PjxVMzE1Nj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUVOSQorPFVCM0FFPiAiPFUzMTM3PjxVMzE1Nj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUVOSAorPFVCM0FGPiAiPFUzMTM3PjxVMzE1Nj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUVECis8VUIzQjA+ICI8VTMxMzc+PFUzMTU2PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIERZRUwKKzxVQjNCMT4gIjxVMzEzNz48VTMxNTY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlFTEcKKzxVQjNCMj4gIjxVMzEzNz48VTMxNTY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlFTE0KKzxVQjNCMz4gIjxVMzEzNz48VTMxNTY+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlFTEIKKzxVQjNCND4gIjxVMzEzNz48VTMxNTY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlFTFMKKzxVQjNCNT4gIjxVMzEzNz48VTMxNTY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlFTFQKKzxVQjNCNj4gIjxVMzEzNz48VTMxNTY+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlFTFAKKzxVQjNCNz4gIjxVMzEzNz48VTMxNTY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlFTEgKKzxVQjNCOD4gIjxVMzEzNz48VTMxNTY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlFTQorPFVCM0I5PiAiPFUzMTM3PjxVMzE1Nj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUVCCis8VUIzQkE+ICI8VTMxMzc+PFUzMTU2PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIERZRUJTCis8VUIzQkI+ICI8VTMxMzc+PFUzMTU2PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIERZRVMKKzxVQjNCQz4gIjxVMzEzNz48VTMxNTY+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlFU1MKKzxVQjNCRD4gIjxVMzEzNz48VTMxNTY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlFTkcKKzxVQjNCRT4gIjxVMzEzNz48VTMxNTY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlFSgorPFVCM0JGPiAiPFUzMTM3PjxVMzE1Nj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUVDCis8VUIzQzA+ICI8VTMxMzc+PFUzMTU2PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIERZRUsKKzxVQjNDMT4gIjxVMzEzNz48VTMxNTY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlFVAorPFVCM0MyPiAiPFUzMTM3PjxVMzE1Nj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUVQCis8VUIzQzM+ICI8VTMxMzc+PFUzMTU2PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIERZRUgKKzxVQjNDND4gIjxVMzEzNz48VTMxNTc+IgklIEhBTkdVTCBTWUxMQUJMRSBETworPFVCM0M1PiAiPFUzMTM3PjxVMzE1Nz48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBET0cKKzxVQjNDNj4gIjxVMzEzNz48VTMxNTc+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRE9HRworPFVCM0M3PiAiPFUzMTM3PjxVMzE1Nz48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBET0dTCis8VUIzQzg+ICI8VTMxMzc+PFUzMTU3PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIERPTgorPFVCM0M5PiAiPFUzMTM3PjxVMzE1Nz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBET05JCis8VUIzQ0E+ICI8VTMxMzc+PFUzMTU3PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIERPTkgKKzxVQjNDQj4gIjxVMzEzNz48VTMxNTc+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRE9ECis8VUIzQ0M+ICI8VTMxMzc+PFUzMTU3PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIERPTAorPFVCM0NEPiAiPFUzMTM3PjxVMzE1Nz48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBET0xHCis8VUIzQ0U+ICI8VTMxMzc+PFUzMTU3PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIERPTE0KKzxVQjNDRj4gIjxVMzEzNz48VTMxNTc+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRE9MQgorPFVCM0QwPiAiPFUzMTM3PjxVMzE1Nz48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBET0xTCis8VUIzRDE+ICI8VTMxMzc+PFUzMTU3PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIERPTFQKKzxVQjNEMj4gIjxVMzEzNz48VTMxNTc+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgRE9MUAorPFVCM0QzPiAiPFUzMTM3PjxVMzE1Nz48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBET0xICis8VUIzRDQ+ICI8VTMxMzc+PFUzMTU3PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIERPTQorPFVCM0Q1PiAiPFUzMTM3PjxVMzE1Nz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBET0IKKzxVQjNENj4gIjxVMzEzNz48VTMxNTc+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRE9CUworPFVCM0Q3PiAiPFUzMTM3PjxVMzE1Nz48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBET1MKKzxVQjNEOD4gIjxVMzEzNz48VTMxNTc+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgRE9TUworPFVCM0Q5PiAiPFUzMTM3PjxVMzE1Nz48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBET05HCis8VUIzREE+ICI8VTMxMzc+PFUzMTU3PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIERPSgorPFVCM0RCPiAiPFUzMTM3PjxVMzE1Nz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBET0MKKzxVQjNEQz4gIjxVMzEzNz48VTMxNTc+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRE9LCis8VUIzREQ+ICI8VTMxMzc+PFUzMTU3PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIERPVAorPFVCM0RFPiAiPFUzMTM3PjxVMzE1Nz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBET1AKKzxVQjNERj4gIjxVMzEzNz48VTMxNTc+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRE9ICis8VUIzRTA+ICI8VTMxMzc+PFUzMTU4PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBCis8VUIzRTE+ICI8VTMxMzc+PFUzMTU4PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIERXQUcKKzxVQjNFMj4gIjxVMzEzNz48VTMxNTg+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBR0cKKzxVQjNFMz4gIjxVMzEzNz48VTMxNTg+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBR1MKKzxVQjNFND4gIjxVMzEzNz48VTMxNTg+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBTgorPFVCM0U1PiAiPFUzMTM3PjxVMzE1OD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0FOSQorPFVCM0U2PiAiPFUzMTM3PjxVMzE1OD48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0FOSAorPFVCM0U3PiAiPFUzMTM3PjxVMzE1OD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0FECis8VUIzRTg+ICI8VTMxMzc+PFUzMTU4PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIERXQUwKKzxVQjNFOT4gIjxVMzEzNz48VTMxNTg+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBTEcKKzxVQjNFQT4gIjxVMzEzNz48VTMxNTg+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBTE0KKzxVQjNFQj4gIjxVMzEzNz48VTMxNTg+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBTEIKKzxVQjNFQz4gIjxVMzEzNz48VTMxNTg+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBTFMKKzxVQjNFRD4gIjxVMzEzNz48VTMxNTg+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBTFQKKzxVQjNFRT4gIjxVMzEzNz48VTMxNTg+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBTFAKKzxVQjNFRj4gIjxVMzEzNz48VTMxNTg+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBTEgKKzxVQjNGMD4gIjxVMzEzNz48VTMxNTg+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBTQorPFVCM0YxPiAiPFUzMTM3PjxVMzE1OD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0FCCis8VUIzRjI+ICI8VTMxMzc+PFUzMTU4PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIERXQUJTCis8VUIzRjM+ICI8VTMxMzc+PFUzMTU4PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIERXQVMKKzxVQjNGND4gIjxVMzEzNz48VTMxNTg+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBU1MKKzxVQjNGNT4gIjxVMzEzNz48VTMxNTg+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBTkcKKzxVQjNGNj4gIjxVMzEzNz48VTMxNTg+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBSgorPFVCM0Y3PiAiPFUzMTM3PjxVMzE1OD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0FDCis8VUIzRjg+ICI8VTMxMzc+PFUzMTU4PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIERXQUsKKzxVQjNGOT4gIjxVMzEzNz48VTMxNTg+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBVAorPFVCM0ZBPiAiPFUzMTM3PjxVMzE1OD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0FQCis8VUIzRkI+ICI8VTMxMzc+PFUzMTU4PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIERXQUgKKzxVQjNGQz4gIjxVMzEzNz48VTMxNTk+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0FFCis8VUIzRkQ+ICI8VTMxMzc+PFUzMTU5PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIERXQUVHCis8VUIzRkU+ICI8VTMxMzc+PFUzMTU5PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIERXQUVHRworPFVCM0ZGPiAiPFUzMTM3PjxVMzE1OT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0FFR1MKKzxVQjQwMD4gIjxVMzEzNz48VTMxNTk+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBRU4KKzxVQjQwMT4gIjxVMzEzNz48VTMxNTk+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBRU5JCis8VUI0MDI+ICI8VTMxMzc+PFUzMTU5PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIERXQUVOSAorPFVCNDAzPiAiPFUzMTM3PjxVMzE1OT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0FFRAorPFVCNDA0PiAiPFUzMTM3PjxVMzE1OT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0FFTAorPFVCNDA1PiAiPFUzMTM3PjxVMzE1OT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0FFTEcKKzxVQjQwNj4gIjxVMzEzNz48VTMxNTk+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBRUxNCis8VUI0MDc+ICI8VTMxMzc+PFUzMTU5PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIERXQUVMQgorPFVCNDA4PiAiPFUzMTM3PjxVMzE1OT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0FFTFMKKzxVQjQwOT4gIjxVMzEzNz48VTMxNTk+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBRUxUCis8VUI0MEE+ICI8VTMxMzc+PFUzMTU5PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIERXQUVMUAorPFVCNDBCPiAiPFUzMTM3PjxVMzE1OT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0FFTEgKKzxVQjQwQz4gIjxVMzEzNz48VTMxNTk+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBRU0KKzxVQjQwRD4gIjxVMzEzNz48VTMxNTk+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBRUIKKzxVQjQwRT4gIjxVMzEzNz48VTMxNTk+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBRUJTCis8VUI0MEY+ICI8VTMxMzc+PFUzMTU5PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIERXQUVTCis8VUI0MTA+ICI8VTMxMzc+PFUzMTU5PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIERXQUVTUworPFVCNDExPiAiPFUzMTM3PjxVMzE1OT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0FFTkcKKzxVQjQxMj4gIjxVMzEzNz48VTMxNTk+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBRUoKKzxVQjQxMz4gIjxVMzEzNz48VTMxNTk+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBRUMKKzxVQjQxND4gIjxVMzEzNz48VTMxNTk+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBRUsKKzxVQjQxNT4gIjxVMzEzNz48VTMxNTk+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBRVQKKzxVQjQxNj4gIjxVMzEzNz48VTMxNTk+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBRVAKKzxVQjQxNz4gIjxVMzEzNz48VTMxNTk+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdBRUgKKzxVQjQxOD4gIjxVMzEzNz48VTMxNUE+IgklIEhBTkdVTCBTWUxMQUJMRSBET0UKKzxVQjQxOT4gIjxVMzEzNz48VTMxNUE+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgRE9FRworPFVCNDFBPiAiPFUzMTM3PjxVMzE1QT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBET0VHRworPFVCNDFCPiAiPFUzMTM3PjxVMzE1QT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBET0VHUworPFVCNDFDPiAiPFUzMTM3PjxVMzE1QT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBET0VOCis8VUI0MUQ+ICI8VTMxMzc+PFUzMTVBPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIERPRU5JCis8VUI0MUU+ICI8VTMxMzc+PFUzMTVBPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIERPRU5ICis8VUI0MUY+ICI8VTMxMzc+PFUzMTVBPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIERPRUQKKzxVQjQyMD4gIjxVMzEzNz48VTMxNUE+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgRE9FTAorPFVCNDIxPiAiPFUzMTM3PjxVMzE1QT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBET0VMRworPFVCNDIyPiAiPFUzMTM3PjxVMzE1QT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBET0VMTQorPFVCNDIzPiAiPFUzMTM3PjxVMzE1QT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBET0VMQgorPFVCNDI0PiAiPFUzMTM3PjxVMzE1QT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBET0VMUworPFVCNDI1PiAiPFUzMTM3PjxVMzE1QT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBET0VMVAorPFVCNDI2PiAiPFUzMTM3PjxVMzE1QT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBET0VMUAorPFVCNDI3PiAiPFUzMTM3PjxVMzE1QT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBET0VMSAorPFVCNDI4PiAiPFUzMTM3PjxVMzE1QT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBET0VNCis8VUI0Mjk+ICI8VTMxMzc+PFUzMTVBPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIERPRUIKKzxVQjQyQT4gIjxVMzEzNz48VTMxNUE+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRE9FQlMKKzxVQjQyQj4gIjxVMzEzNz48VTMxNUE+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgRE9FUworPFVCNDJDPiAiPFUzMTM3PjxVMzE1QT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBET0VTUworPFVCNDJEPiAiPFUzMTM3PjxVMzE1QT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBET0VORworPFVCNDJFPiAiPFUzMTM3PjxVMzE1QT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBET0VKCis8VUI0MkY+ICI8VTMxMzc+PFUzMTVBPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIERPRUMKKzxVQjQzMD4gIjxVMzEzNz48VTMxNUE+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRE9FSworPFVCNDMxPiAiPFUzMTM3PjxVMzE1QT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBET0VUCis8VUI0MzI+ICI8VTMxMzc+PFUzMTVBPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIERPRVAKKzxVQjQzMz4gIjxVMzEzNz48VTMxNUE+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRE9FSAorPFVCNDM0PiAiPFUzMTM3PjxVMzE1Qj4iCSUgSEFOR1VMIFNZTExBQkxFIERZTworPFVCNDM1PiAiPFUzMTM3PjxVMzE1Qj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBEWU9HCis8VUI0MzY+ICI8VTMxMzc+PFUzMTVCPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIERZT0dHCis8VUI0Mzc+ICI8VTMxMzc+PFUzMTVCPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIERZT0dTCis8VUI0Mzg+ICI8VTMxMzc+PFUzMTVCPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIERZT04KKzxVQjQzOT4gIjxVMzEzNz48VTMxNUI+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlPTkkKKzxVQjQzQT4gIjxVMzEzNz48VTMxNUI+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlPTkgKKzxVQjQzQj4gIjxVMzEzNz48VTMxNUI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlPRAorPFVCNDNDPiAiPFUzMTM3PjxVMzE1Qj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBEWU9MCis8VUI0M0Q+ICI8VTMxMzc+PFUzMTVCPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIERZT0xHCis8VUI0M0U+ICI8VTMxMzc+PFUzMTVCPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIERZT0xNCis8VUI0M0Y+ICI8VTMxMzc+PFUzMTVCPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIERZT0xCCis8VUI0NDA+ICI8VTMxMzc+PFUzMTVCPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIERZT0xTCis8VUI0NDE+ICI8VTMxMzc+PFUzMTVCPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIERZT0xUCis8VUI0NDI+ICI8VTMxMzc+PFUzMTVCPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIERZT0xQCis8VUI0NDM+ICI8VTMxMzc+PFUzMTVCPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIERZT0xICis8VUI0NDQ+ICI8VTMxMzc+PFUzMTVCPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIERZT00KKzxVQjQ0NT4gIjxVMzEzNz48VTMxNUI+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlPQgorPFVCNDQ2PiAiPFUzMTM3PjxVMzE1Qj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBEWU9CUworPFVCNDQ3PiAiPFUzMTM3PjxVMzE1Qj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBEWU9TCis8VUI0NDg+ICI8VTMxMzc+PFUzMTVCPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIERZT1NTCis8VUI0NDk+ICI8VTMxMzc+PFUzMTVCPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIERZT05HCis8VUI0NEE+ICI8VTMxMzc+PFUzMTVCPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIERZT0oKKzxVQjQ0Qj4gIjxVMzEzNz48VTMxNUI+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlPQworPFVCNDRDPiAiPFUzMTM3PjxVMzE1Qj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBEWU9LCis8VUI0NEQ+ICI8VTMxMzc+PFUzMTVCPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIERZT1QKKzxVQjQ0RT4gIjxVMzEzNz48VTMxNUI+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlPUAorPFVCNDRGPiAiPFUzMTM3PjxVMzE1Qj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBEWU9ICis8VUI0NTA+ICI8VTMxMzc+PFUzMTVDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFUKKzxVQjQ1MT4gIjxVMzEzNz48VTMxNUM+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFVHCis8VUI0NTI+ICI8VTMxMzc+PFUzMTVDPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIERVR0cKKzxVQjQ1Mz4gIjxVMzEzNz48VTMxNUM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFVHUworPFVCNDU0PiAiPFUzMTM3PjxVMzE1Qz48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBEVU4KKzxVQjQ1NT4gIjxVMzEzNz48VTMxNUM+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFVOSQorPFVCNDU2PiAiPFUzMTM3PjxVMzE1Qz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBEVU5ICis8VUI0NTc+ICI8VTMxMzc+PFUzMTVDPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIERVRAorPFVCNDU4PiAiPFUzMTM3PjxVMzE1Qz48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBEVUwKKzxVQjQ1OT4gIjxVMzEzNz48VTMxNUM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFVMRworPFVCNDVBPiAiPFUzMTM3PjxVMzE1Qz48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBEVUxNCis8VUI0NUI+ICI8VTMxMzc+PFUzMTVDPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIERVTEIKKzxVQjQ1Qz4gIjxVMzEzNz48VTMxNUM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFVMUworPFVCNDVEPiAiPFUzMTM3PjxVMzE1Qz48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBEVUxUCis8VUI0NUU+ICI8VTMxMzc+PFUzMTVDPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIERVTFAKKzxVQjQ1Rj4gIjxVMzEzNz48VTMxNUM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFVMSAorPFVCNDYwPiAiPFUzMTM3PjxVMzE1Qz48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBEVU0KKzxVQjQ2MT4gIjxVMzEzNz48VTMxNUM+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFVCCis8VUI0NjI+ICI8VTMxMzc+PFUzMTVDPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIERVQlMKKzxVQjQ2Mz4gIjxVMzEzNz48VTMxNUM+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFVTCis8VUI0NjQ+ICI8VTMxMzc+PFUzMTVDPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIERVU1MKKzxVQjQ2NT4gIjxVMzEzNz48VTMxNUM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFVORworPFVCNDY2PiAiPFUzMTM3PjxVMzE1Qz48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBEVUoKKzxVQjQ2Nz4gIjxVMzEzNz48VTMxNUM+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFVDCis8VUI0Njg+ICI8VTMxMzc+PFUzMTVDPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIERVSworPFVCNDY5PiAiPFUzMTM3PjxVMzE1Qz48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBEVVQKKzxVQjQ2QT4gIjxVMzEzNz48VTMxNUM+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFVQCis8VUI0NkI+ICI8VTMxMzc+PFUzMTVDPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIERVSAorPFVCNDZDPiAiPFUzMTM3PjxVMzE1RD4iCSUgSEFOR1VMIFNZTExBQkxFIERXRU8KKzxVQjQ2RD4gIjxVMzEzNz48VTMxNUQ+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdFT0cKKzxVQjQ2RT4gIjxVMzEzNz48VTMxNUQ+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdFT0dHCis8VUI0NkY+ICI8VTMxMzc+PFUzMTVEPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIERXRU9HUworPFVCNDcwPiAiPFUzMTM3PjxVMzE1RD48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0VPTgorPFVCNDcxPiAiPFUzMTM3PjxVMzE1RD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0VPTkkKKzxVQjQ3Mj4gIjxVMzEzNz48VTMxNUQ+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdFT05ICis8VUI0NzM+ICI8VTMxMzc+PFUzMTVEPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIERXRU9ECis8VUI0NzQ+ICI8VTMxMzc+PFUzMTVEPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIERXRU9MCis8VUI0NzU+ICI8VTMxMzc+PFUzMTVEPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIERXRU9MRworPFVCNDc2PiAiPFUzMTM3PjxVMzE1RD48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0VPTE0KKzxVQjQ3Nz4gIjxVMzEzNz48VTMxNUQ+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdFT0xCCis8VUI0Nzg+ICI8VTMxMzc+PFUzMTVEPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIERXRU9MUworPFVCNDc5PiAiPFUzMTM3PjxVMzE1RD48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0VPTFQKKzxVQjQ3QT4gIjxVMzEzNz48VTMxNUQ+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdFT0xQCis8VUI0N0I+ICI8VTMxMzc+PFUzMTVEPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIERXRU9MSAorPFVCNDdDPiAiPFUzMTM3PjxVMzE1RD48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0VPTQorPFVCNDdEPiAiPFUzMTM3PjxVMzE1RD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0VPQgorPFVCNDdFPiAiPFUzMTM3PjxVMzE1RD48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0VPQlMKKzxVQjQ3Rj4gIjxVMzEzNz48VTMxNUQ+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdFT1MKKzxVQjQ4MD4gIjxVMzEzNz48VTMxNUQ+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdFT1NTCis8VUI0ODE+ICI8VTMxMzc+PFUzMTVEPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIERXRU9ORworPFVCNDgyPiAiPFUzMTM3PjxVMzE1RD48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0VPSgorPFVCNDgzPiAiPFUzMTM3PjxVMzE1RD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0VPQworPFVCNDg0PiAiPFUzMTM3PjxVMzE1RD48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0VPSworPFVCNDg1PiAiPFUzMTM3PjxVMzE1RD48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0VPVAorPFVCNDg2PiAiPFUzMTM3PjxVMzE1RD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0VPUAorPFVCNDg3PiAiPFUzMTM3PjxVMzE1RD48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0VPSAorPFVCNDg4PiAiPFUzMTM3PjxVMzE1RT4iCSUgSEFOR1VMIFNZTExBQkxFIERXRQorPFVCNDg5PiAiPFUzMTM3PjxVMzE1RT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0VHCis8VUI0OEE+ICI8VTMxMzc+PFUzMTVFPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIERXRUdHCis8VUI0OEI+ICI8VTMxMzc+PFUzMTVFPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIERXRUdTCis8VUI0OEM+ICI8VTMxMzc+PFUzMTVFPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIERXRU4KKzxVQjQ4RD4gIjxVMzEzNz48VTMxNUU+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdFTkkKKzxVQjQ4RT4gIjxVMzEzNz48VTMxNUU+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdFTkgKKzxVQjQ4Rj4gIjxVMzEzNz48VTMxNUU+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdFRAorPFVCNDkwPiAiPFUzMTM3PjxVMzE1RT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0VMCis8VUI0OTE+ICI8VTMxMzc+PFUzMTVFPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIERXRUxHCis8VUI0OTI+ICI8VTMxMzc+PFUzMTVFPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIERXRUxNCis8VUI0OTM+ICI8VTMxMzc+PFUzMTVFPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIERXRUxCCis8VUI0OTQ+ICI8VTMxMzc+PFUzMTVFPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIERXRUxTCis8VUI0OTU+ICI8VTMxMzc+PFUzMTVFPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIERXRUxUCis8VUI0OTY+ICI8VTMxMzc+PFUzMTVFPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIERXRUxQCis8VUI0OTc+ICI8VTMxMzc+PFUzMTVFPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIERXRUxICis8VUI0OTg+ICI8VTMxMzc+PFUzMTVFPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIERXRU0KKzxVQjQ5OT4gIjxVMzEzNz48VTMxNUU+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdFQgorPFVCNDlBPiAiPFUzMTM3PjxVMzE1RT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0VCUworPFVCNDlCPiAiPFUzMTM3PjxVMzE1RT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0VTCis8VUI0OUM+ICI8VTMxMzc+PFUzMTVFPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIERXRVNTCis8VUI0OUQ+ICI8VTMxMzc+PFUzMTVFPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIERXRU5HCis8VUI0OUU+ICI8VTMxMzc+PFUzMTVFPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIERXRUoKKzxVQjQ5Rj4gIjxVMzEzNz48VTMxNUU+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdFQworPFVCNEEwPiAiPFUzMTM3PjxVMzE1RT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0VLCis8VUI0QTE+ICI8VTMxMzc+PFUzMTVFPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIERXRVQKKzxVQjRBMj4gIjxVMzEzNz48VTMxNUU+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdFUAorPFVCNEEzPiAiPFUzMTM3PjxVMzE1RT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0VICis8VUI0QTQ+ICI8VTMxMzc+PFUzMTVGPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdJCis8VUI0QTU+ICI8VTMxMzc+PFUzMTVGPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIERXSUcKKzxVQjRBNj4gIjxVMzEzNz48VTMxNUY+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdJR0cKKzxVQjRBNz4gIjxVMzEzNz48VTMxNUY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdJR1MKKzxVQjRBOD4gIjxVMzEzNz48VTMxNUY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdJTgorPFVCNEE5PiAiPFUzMTM3PjxVMzE1Rj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0lOSQorPFVCNEFBPiAiPFUzMTM3PjxVMzE1Rj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0lOSAorPFVCNEFCPiAiPFUzMTM3PjxVMzE1Rj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0lECis8VUI0QUM+ICI8VTMxMzc+PFUzMTVGPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIERXSUwKKzxVQjRBRD4gIjxVMzEzNz48VTMxNUY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdJTEcKKzxVQjRBRT4gIjxVMzEzNz48VTMxNUY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdJTE0KKzxVQjRBRj4gIjxVMzEzNz48VTMxNUY+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdJTEIKKzxVQjRCMD4gIjxVMzEzNz48VTMxNUY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdJTFMKKzxVQjRCMT4gIjxVMzEzNz48VTMxNUY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdJTFQKKzxVQjRCMj4gIjxVMzEzNz48VTMxNUY+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdJTFAKKzxVQjRCMz4gIjxVMzEzNz48VTMxNUY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdJTEgKKzxVQjRCND4gIjxVMzEzNz48VTMxNUY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdJTQorPFVCNEI1PiAiPFUzMTM3PjxVMzE1Rj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0lCCis8VUI0QjY+ICI8VTMxMzc+PFUzMTVGPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIERXSUJTCis8VUI0Qjc+ICI8VTMxMzc+PFUzMTVGPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIERXSVMKKzxVQjRCOD4gIjxVMzEzNz48VTMxNUY+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdJU1MKKzxVQjRCOT4gIjxVMzEzNz48VTMxNUY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdJTkcKKzxVQjRCQT4gIjxVMzEzNz48VTMxNUY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdJSgorPFVCNEJCPiAiPFUzMTM3PjxVMzE1Rj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0lDCis8VUI0QkM+ICI8VTMxMzc+PFUzMTVGPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIERXSUsKKzxVQjRCRD4gIjxVMzEzNz48VTMxNUY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFdJVAorPFVCNEJFPiAiPFUzMTM3PjxVMzE1Rj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBEV0lQCis8VUI0QkY+ICI8VTMxMzc+PFUzMTVGPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIERXSUgKKzxVQjRDMD4gIjxVMzEzNz48VTMxNjA+IgklIEhBTkdVTCBTWUxMQUJMRSBEWVUKKzxVQjRDMT4gIjxVMzEzNz48VTMxNjA+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlVRworPFVCNEMyPiAiPFUzMTM3PjxVMzE2MD48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBEWVVHRworPFVCNEMzPiAiPFUzMTM3PjxVMzE2MD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBEWVVHUworPFVCNEM0PiAiPFUzMTM3PjxVMzE2MD48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBEWVVOCis8VUI0QzU+ICI8VTMxMzc+PFUzMTYwPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIERZVU5JCis8VUI0QzY+ICI8VTMxMzc+PFUzMTYwPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIERZVU5ICis8VUI0Qzc+ICI8VTMxMzc+PFUzMTYwPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIERZVUQKKzxVQjRDOD4gIjxVMzEzNz48VTMxNjA+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlVTAorPFVCNEM5PiAiPFUzMTM3PjxVMzE2MD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBEWVVMRworPFVCNENBPiAiPFUzMTM3PjxVMzE2MD48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBEWVVMTQorPFVCNENCPiAiPFUzMTM3PjxVMzE2MD48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBEWVVMQgorPFVCNENDPiAiPFUzMTM3PjxVMzE2MD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBEWVVMUworPFVCNENEPiAiPFUzMTM3PjxVMzE2MD48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBEWVVMVAorPFVCNENFPiAiPFUzMTM3PjxVMzE2MD48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBEWVVMUAorPFVCNENGPiAiPFUzMTM3PjxVMzE2MD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBEWVVMSAorPFVCNEQwPiAiPFUzMTM3PjxVMzE2MD48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBEWVVNCis8VUI0RDE+ICI8VTMxMzc+PFUzMTYwPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIERZVUIKKzxVQjREMj4gIjxVMzEzNz48VTMxNjA+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlVQlMKKzxVQjREMz4gIjxVMzEzNz48VTMxNjA+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlVUworPFVCNEQ0PiAiPFUzMTM3PjxVMzE2MD48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBEWVVTUworPFVCNEQ1PiAiPFUzMTM3PjxVMzE2MD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBEWVVORworPFVCNEQ2PiAiPFUzMTM3PjxVMzE2MD48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBEWVVKCis8VUI0RDc+ICI8VTMxMzc+PFUzMTYwPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIERZVUMKKzxVQjREOD4gIjxVMzEzNz48VTMxNjA+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlVSworPFVCNEQ5PiAiPFUzMTM3PjxVMzE2MD48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBEWVVUCis8VUI0REE+ICI8VTMxMzc+PFUzMTYwPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIERZVVAKKzxVQjREQj4gIjxVMzEzNz48VTMxNjA+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlVSAorPFVCNERDPiAiPFUzMTM3PjxVMzE2MT4iCSUgSEFOR1VMIFNZTExBQkxFIERFVQorPFVCNEREPiAiPFUzMTM3PjxVMzE2MT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBERVVHCis8VUI0REU+ICI8VTMxMzc+PFUzMTYxPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIERFVUdHCis8VUI0REY+ICI8VTMxMzc+PFUzMTYxPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIERFVUdTCis8VUI0RTA+ICI8VTMxMzc+PFUzMTYxPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIERFVU4KKzxVQjRFMT4gIjxVMzEzNz48VTMxNjE+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgREVVTkkKKzxVQjRFMj4gIjxVMzEzNz48VTMxNjE+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgREVVTkgKKzxVQjRFMz4gIjxVMzEzNz48VTMxNjE+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgREVVRAorPFVCNEU0PiAiPFUzMTM3PjxVMzE2MT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBERVVMCis8VUI0RTU+ICI8VTMxMzc+PFUzMTYxPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIERFVUxHCis8VUI0RTY+ICI8VTMxMzc+PFUzMTYxPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIERFVUxNCis8VUI0RTc+ICI8VTMxMzc+PFUzMTYxPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIERFVUxCCis8VUI0RTg+ICI8VTMxMzc+PFUzMTYxPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIERFVUxTCis8VUI0RTk+ICI8VTMxMzc+PFUzMTYxPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIERFVUxUCis8VUI0RUE+ICI8VTMxMzc+PFUzMTYxPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIERFVUxQCis8VUI0RUI+ICI8VTMxMzc+PFUzMTYxPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIERFVUxICis8VUI0RUM+ICI8VTMxMzc+PFUzMTYxPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIERFVU0KKzxVQjRFRD4gIjxVMzEzNz48VTMxNjE+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgREVVQgorPFVCNEVFPiAiPFUzMTM3PjxVMzE2MT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBERVVCUworPFVCNEVGPiAiPFUzMTM3PjxVMzE2MT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBERVVTCis8VUI0RjA+ICI8VTMxMzc+PFUzMTYxPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIERFVVNTCis8VUI0RjE+ICI8VTMxMzc+PFUzMTYxPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIERFVU5HCis8VUI0RjI+ICI8VTMxMzc+PFUzMTYxPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIERFVUoKKzxVQjRGMz4gIjxVMzEzNz48VTMxNjE+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgREVVQworPFVCNEY0PiAiPFUzMTM3PjxVMzE2MT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBERVVLCis8VUI0RjU+ICI8VTMxMzc+PFUzMTYxPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIERFVVQKKzxVQjRGNj4gIjxVMzEzNz48VTMxNjE+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgREVVUAorPFVCNEY3PiAiPFUzMTM3PjxVMzE2MT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBERVVICis8VUI0Rjg+ICI8VTMxMzc+PFUzMTYyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlJCis8VUI0Rjk+ICI8VTMxMzc+PFUzMTYyPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIERZSUcKKzxVQjRGQT4gIjxVMzEzNz48VTMxNjI+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlJR0cKKzxVQjRGQj4gIjxVMzEzNz48VTMxNjI+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlJR1MKKzxVQjRGQz4gIjxVMzEzNz48VTMxNjI+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlJTgorPFVCNEZEPiAiPFUzMTM3PjxVMzE2Mj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUlOSQorPFVCNEZFPiAiPFUzMTM3PjxVMzE2Mj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUlOSAorPFVCNEZGPiAiPFUzMTM3PjxVMzE2Mj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUlECis8VUI1MDA+ICI8VTMxMzc+PFUzMTYyPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIERZSUwKKzxVQjUwMT4gIjxVMzEzNz48VTMxNjI+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlJTEcKKzxVQjUwMj4gIjxVMzEzNz48VTMxNjI+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlJTE0KKzxVQjUwMz4gIjxVMzEzNz48VTMxNjI+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlJTEIKKzxVQjUwND4gIjxVMzEzNz48VTMxNjI+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlJTFMKKzxVQjUwNT4gIjxVMzEzNz48VTMxNjI+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlJTFQKKzxVQjUwNj4gIjxVMzEzNz48VTMxNjI+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlJTFAKKzxVQjUwNz4gIjxVMzEzNz48VTMxNjI+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlJTEgKKzxVQjUwOD4gIjxVMzEzNz48VTMxNjI+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlJTQorPFVCNTA5PiAiPFUzMTM3PjxVMzE2Mj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUlCCis8VUI1MEE+ICI8VTMxMzc+PFUzMTYyPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIERZSUJTCis8VUI1MEI+ICI8VTMxMzc+PFUzMTYyPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIERZSVMKKzxVQjUwQz4gIjxVMzEzNz48VTMxNjI+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlJU1MKKzxVQjUwRD4gIjxVMzEzNz48VTMxNjI+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlJTkcKKzxVQjUwRT4gIjxVMzEzNz48VTMxNjI+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlJSgorPFVCNTBGPiAiPFUzMTM3PjxVMzE2Mj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUlDCis8VUI1MTA+ICI8VTMxMzc+PFUzMTYyPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIERZSUsKKzxVQjUxMT4gIjxVMzEzNz48VTMxNjI+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRFlJVAorPFVCNTEyPiAiPFUzMTM3PjxVMzE2Mj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBEWUlQCis8VUI1MTM+ICI8VTMxMzc+PFUzMTYyPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIERZSUgKKzxVQjUxND4gIjxVMzEzNz48VTMxNjM+IgklIEhBTkdVTCBTWUxMQUJMRSBESQorPFVCNTE1PiAiPFUzMTM3PjxVMzE2Mz48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBESUcKKzxVQjUxNj4gIjxVMzEzNz48VTMxNjM+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRElHRworPFVCNTE3PiAiPFUzMTM3PjxVMzE2Mz48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBESUdTCis8VUI1MTg+ICI8VTMxMzc+PFUzMTYzPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIERJTgorPFVCNTE5PiAiPFUzMTM3PjxVMzE2Mz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBESU5JCis8VUI1MUE+ICI8VTMxMzc+PFUzMTYzPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIERJTkgKKzxVQjUxQj4gIjxVMzEzNz48VTMxNjM+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRElECis8VUI1MUM+ICI8VTMxMzc+PFUzMTYzPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIERJTAorPFVCNTFEPiAiPFUzMTM3PjxVMzE2Mz48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBESUxHCis8VUI1MUU+ICI8VTMxMzc+PFUzMTYzPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIERJTE0KKzxVQjUxRj4gIjxVMzEzNz48VTMxNjM+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRElMQgorPFVCNTIwPiAiPFUzMTM3PjxVMzE2Mz48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBESUxTCis8VUI1MjE+ICI8VTMxMzc+PFUzMTYzPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIERJTFQKKzxVQjUyMj4gIjxVMzEzNz48VTMxNjM+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgRElMUAorPFVCNTIzPiAiPFUzMTM3PjxVMzE2Mz48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBESUxICis8VUI1MjQ+ICI8VTMxMzc+PFUzMTYzPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIERJTQorPFVCNTI1PiAiPFUzMTM3PjxVMzE2Mz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBESUIKKzxVQjUyNj4gIjxVMzEzNz48VTMxNjM+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRElCUworPFVCNTI3PiAiPFUzMTM3PjxVMzE2Mz48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBESVMKKzxVQjUyOD4gIjxVMzEzNz48VTMxNjM+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgRElTUworPFVCNTI5PiAiPFUzMTM3PjxVMzE2Mz48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBESU5HCis8VUI1MkE+ICI8VTMxMzc+PFUzMTYzPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIERJSgorPFVCNTJCPiAiPFUzMTM3PjxVMzE2Mz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBESUMKKzxVQjUyQz4gIjxVMzEzNz48VTMxNjM+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRElLCis8VUI1MkQ+ICI8VTMxMzc+PFUzMTYzPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIERJVAorPFVCNTJFPiAiPFUzMTM3PjxVMzE2Mz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBESVAKKzxVQjUyRj4gIjxVMzEzNz48VTMxNjM+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRElICis8VUI1MzA+ICI8VTMxMzg+PFUzMTRGPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBCis8VUI1MzE+ICI8VTMxMzg+PFUzMTRGPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEREQUcKKzxVQjUzMj4gIjxVMzEzOD48VTMxNEY+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBR0cKKzxVQjUzMz4gIjxVMzEzOD48VTMxNEY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBR1MKKzxVQjUzND4gIjxVMzEzOD48VTMxNEY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBTgorPFVCNTM1PiAiPFUzMTM4PjxVMzE0Rj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBEREFOSQorPFVCNTM2PiAiPFUzMTM4PjxVMzE0Rj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBEREFOSAorPFVCNTM3PiAiPFUzMTM4PjxVMzE0Rj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBEREFECis8VUI1Mzg+ICI8VTMxMzg+PFUzMTRGPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEREQUwKKzxVQjUzOT4gIjxVMzEzOD48VTMxNEY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBTEcKKzxVQjUzQT4gIjxVMzEzOD48VTMxNEY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBTE0KKzxVQjUzQj4gIjxVMzEzOD48VTMxNEY+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBTEIKKzxVQjUzQz4gIjxVMzEzOD48VTMxNEY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBTFMKKzxVQjUzRD4gIjxVMzEzOD48VTMxNEY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBTFQKKzxVQjUzRT4gIjxVMzEzOD48VTMxNEY+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBTFAKKzxVQjUzRj4gIjxVMzEzOD48VTMxNEY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBTEgKKzxVQjU0MD4gIjxVMzEzOD48VTMxNEY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBTQorPFVCNTQxPiAiPFUzMTM4PjxVMzE0Rj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBEREFCCis8VUI1NDI+ICI8VTMxMzg+PFUzMTRGPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEREQUJTCis8VUI1NDM+ICI8VTMxMzg+PFUzMTRGPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEREQVMKKzxVQjU0ND4gIjxVMzEzOD48VTMxNEY+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBU1MKKzxVQjU0NT4gIjxVMzEzOD48VTMxNEY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBTkcKKzxVQjU0Nj4gIjxVMzEzOD48VTMxNEY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBSgorPFVCNTQ3PiAiPFUzMTM4PjxVMzE0Rj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBEREFDCis8VUI1NDg+ICI8VTMxMzg+PFUzMTRGPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEREQUsKKzxVQjU0OT4gIjxVMzEzOD48VTMxNEY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBVAorPFVCNTRBPiAiPFUzMTM4PjxVMzE0Rj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBEREFQCis8VUI1NEI+ICI8VTMxMzg+PFUzMTRGPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEREQUgKKzxVQjU0Qz4gIjxVMzEzOD48VTMxNTA+IgklIEhBTkdVTCBTWUxMQUJMRSBEREFFCis8VUI1NEQ+ICI8VTMxMzg+PFUzMTUwPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEREQUVHCis8VUI1NEU+ICI8VTMxMzg+PFUzMTUwPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEREQUVHRworPFVCNTRGPiAiPFUzMTM4PjxVMzE1MD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBEREFFR1MKKzxVQjU1MD4gIjxVMzEzOD48VTMxNTA+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBRU4KKzxVQjU1MT4gIjxVMzEzOD48VTMxNTA+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBRU5JCis8VUI1NTI+ICI8VTMxMzg+PFUzMTUwPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEREQUVOSAorPFVCNTUzPiAiPFUzMTM4PjxVMzE1MD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBEREFFRAorPFVCNTU0PiAiPFUzMTM4PjxVMzE1MD48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBEREFFTAorPFVCNTU1PiAiPFUzMTM4PjxVMzE1MD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBEREFFTEcKKzxVQjU1Nj4gIjxVMzEzOD48VTMxNTA+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBRUxNCis8VUI1NTc+ICI8VTMxMzg+PFUzMTUwPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEREQUVMQgorPFVCNTU4PiAiPFUzMTM4PjxVMzE1MD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBEREFFTFMKKzxVQjU1OT4gIjxVMzEzOD48VTMxNTA+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBRUxUCis8VUI1NUE+ICI8VTMxMzg+PFUzMTUwPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEREQUVMUAorPFVCNTVCPiAiPFUzMTM4PjxVMzE1MD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBEREFFTEgKKzxVQjU1Qz4gIjxVMzEzOD48VTMxNTA+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBRU0KKzxVQjU1RD4gIjxVMzEzOD48VTMxNTA+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBRUIKKzxVQjU1RT4gIjxVMzEzOD48VTMxNTA+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBRUJTCis8VUI1NUY+ICI8VTMxMzg+PFUzMTUwPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEREQUVTCis8VUI1NjA+ICI8VTMxMzg+PFUzMTUwPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEREQUVTUworPFVCNTYxPiAiPFUzMTM4PjxVMzE1MD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBEREFFTkcKKzxVQjU2Mj4gIjxVMzEzOD48VTMxNTA+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBRUoKKzxVQjU2Mz4gIjxVMzEzOD48VTMxNTA+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBRUMKKzxVQjU2ND4gIjxVMzEzOD48VTMxNTA+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBRUsKKzxVQjU2NT4gIjxVMzEzOD48VTMxNTA+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBRVQKKzxVQjU2Nj4gIjxVMzEzOD48VTMxNTA+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBRVAKKzxVQjU2Nz4gIjxVMzEzOD48VTMxNTA+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERBRUgKKzxVQjU2OD4gIjxVMzEzOD48VTMxNTE+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlBCis8VUI1Njk+ICI8VTMxMzg+PFUzMTUxPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUFHCis8VUI1NkE+ICI8VTMxMzg+PFUzMTUxPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUFHRworPFVCNTZCPiAiPFUzMTM4PjxVMzE1MT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlBR1MKKzxVQjU2Qz4gIjxVMzEzOD48VTMxNTE+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZQU4KKzxVQjU2RD4gIjxVMzEzOD48VTMxNTE+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZQU5JCis8VUI1NkU+ICI8VTMxMzg+PFUzMTUxPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUFOSAorPFVCNTZGPiAiPFUzMTM4PjxVMzE1MT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlBRAorPFVCNTcwPiAiPFUzMTM4PjxVMzE1MT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlBTAorPFVCNTcxPiAiPFUzMTM4PjxVMzE1MT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlBTEcKKzxVQjU3Mj4gIjxVMzEzOD48VTMxNTE+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZQUxNCis8VUI1NzM+ICI8VTMxMzg+PFUzMTUxPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUFMQgorPFVCNTc0PiAiPFUzMTM4PjxVMzE1MT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlBTFMKKzxVQjU3NT4gIjxVMzEzOD48VTMxNTE+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZQUxUCis8VUI1NzY+ICI8VTMxMzg+PFUzMTUxPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUFMUAorPFVCNTc3PiAiPFUzMTM4PjxVMzE1MT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlBTEgKKzxVQjU3OD4gIjxVMzEzOD48VTMxNTE+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZQU0KKzxVQjU3OT4gIjxVMzEzOD48VTMxNTE+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZQUIKKzxVQjU3QT4gIjxVMzEzOD48VTMxNTE+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZQUJTCis8VUI1N0I+ICI8VTMxMzg+PFUzMTUxPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUFTCis8VUI1N0M+ICI8VTMxMzg+PFUzMTUxPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUFTUworPFVCNTdEPiAiPFUzMTM4PjxVMzE1MT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlBTkcKKzxVQjU3RT4gIjxVMzEzOD48VTMxNTE+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZQUoKKzxVQjU3Rj4gIjxVMzEzOD48VTMxNTE+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZQUMKKzxVQjU4MD4gIjxVMzEzOD48VTMxNTE+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZQUsKKzxVQjU4MT4gIjxVMzEzOD48VTMxNTE+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZQVQKKzxVQjU4Mj4gIjxVMzEzOD48VTMxNTE+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZQVAKKzxVQjU4Mz4gIjxVMzEzOD48VTMxNTE+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZQUgKKzxVQjU4ND4gIjxVMzEzOD48VTMxNTI+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlBRQorPFVCNTg1PiAiPFUzMTM4PjxVMzE1Mj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlBRUcKKzxVQjU4Nj4gIjxVMzEzOD48VTMxNTI+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZQUVHRworPFVCNTg3PiAiPFUzMTM4PjxVMzE1Mj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlBRUdTCis8VUI1ODg+ICI8VTMxMzg+PFUzMTUyPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUFFTgorPFVCNTg5PiAiPFUzMTM4PjxVMzE1Mj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlBRU5JCis8VUI1OEE+ICI8VTMxMzg+PFUzMTUyPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUFFTkgKKzxVQjU4Qj4gIjxVMzEzOD48VTMxNTI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZQUVECis8VUI1OEM+ICI8VTMxMzg+PFUzMTUyPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUFFTAorPFVCNThEPiAiPFUzMTM4PjxVMzE1Mj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlBRUxHCis8VUI1OEU+ICI8VTMxMzg+PFUzMTUyPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUFFTE0KKzxVQjU4Rj4gIjxVMzEzOD48VTMxNTI+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZQUVMQgorPFVCNTkwPiAiPFUzMTM4PjxVMzE1Mj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlBRUxTCis8VUI1OTE+ICI8VTMxMzg+PFUzMTUyPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUFFTFQKKzxVQjU5Mj4gIjxVMzEzOD48VTMxNTI+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZQUVMUAorPFVCNTkzPiAiPFUzMTM4PjxVMzE1Mj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlBRUxICis8VUI1OTQ+ICI8VTMxMzg+PFUzMTUyPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUFFTQorPFVCNTk1PiAiPFUzMTM4PjxVMzE1Mj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlBRUIKKzxVQjU5Nj4gIjxVMzEzOD48VTMxNTI+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZQUVCUworPFVCNTk3PiAiPFUzMTM4PjxVMzE1Mj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlBRVMKKzxVQjU5OD4gIjxVMzEzOD48VTMxNTI+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZQUVTUworPFVCNTk5PiAiPFUzMTM4PjxVMzE1Mj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlBRU5HCis8VUI1OUE+ICI8VTMxMzg+PFUzMTUyPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUFFSgorPFVCNTlCPiAiPFUzMTM4PjxVMzE1Mj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlBRUMKKzxVQjU5Qz4gIjxVMzEzOD48VTMxNTI+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZQUVLCis8VUI1OUQ+ICI8VTMxMzg+PFUzMTUyPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUFFVAorPFVCNTlFPiAiPFUzMTM4PjxVMzE1Mj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlBRVAKKzxVQjU5Rj4gIjxVMzEzOD48VTMxNTI+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZQUVICis8VUI1QTA+ICI8VTMxMzg+PFUzMTUzPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFTworPFVCNUExPiAiPFUzMTM4PjxVMzE1Mz48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBEREVPRworPFVCNUEyPiAiPFUzMTM4PjxVMzE1Mz48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBEREVPR0cKKzxVQjVBMz4gIjxVMzEzOD48VTMxNTM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFT0dTCis8VUI1QTQ+ICI8VTMxMzg+PFUzMTUzPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIERERU9OCis8VUI1QTU+ICI8VTMxMzg+PFUzMTUzPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIERERU9OSQorPFVCNUE2PiAiPFUzMTM4PjxVMzE1Mz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBEREVPTkgKKzxVQjVBNz4gIjxVMzEzOD48VTMxNTM+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFT0QKKzxVQjVBOD4gIjxVMzEzOD48VTMxNTM+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFT0wKKzxVQjVBOT4gIjxVMzEzOD48VTMxNTM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFT0xHCis8VUI1QUE+ICI8VTMxMzg+PFUzMTUzPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIERERU9MTQorPFVCNUFCPiAiPFUzMTM4PjxVMzE1Mz48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBEREVPTEIKKzxVQjVBQz4gIjxVMzEzOD48VTMxNTM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFT0xTCis8VUI1QUQ+ICI8VTMxMzg+PFUzMTUzPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIERERU9MVAorPFVCNUFFPiAiPFUzMTM4PjxVMzE1Mz48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBEREVPTFAKKzxVQjVBRj4gIjxVMzEzOD48VTMxNTM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFT0xICis8VUI1QjA+ICI8VTMxMzg+PFUzMTUzPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIERERU9NCis8VUI1QjE+ICI8VTMxMzg+PFUzMTUzPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIERERU9CCis8VUI1QjI+ICI8VTMxMzg+PFUzMTUzPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIERERU9CUworPFVCNUIzPiAiPFUzMTM4PjxVMzE1Mz48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBEREVPUworPFVCNUI0PiAiPFUzMTM4PjxVMzE1Mz48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBEREVPU1MKKzxVQjVCNT4gIjxVMzEzOD48VTMxNTM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFT05HCis8VUI1QjY+ICI8VTMxMzg+PFUzMTUzPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIERERU9KCis8VUI1Qjc+ICI8VTMxMzg+PFUzMTUzPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIERERU9DCis8VUI1Qjg+ICI8VTMxMzg+PFUzMTUzPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIERERU9LCis8VUI1Qjk+ICI8VTMxMzg+PFUzMTUzPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIERERU9UCis8VUI1QkE+ICI8VTMxMzg+PFUzMTUzPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIERERU9QCis8VUI1QkI+ICI8VTMxMzg+PFUzMTUzPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIERERU9ICis8VUI1QkM+ICI8VTMxMzg+PFUzMTU0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFCis8VUI1QkQ+ICI8VTMxMzg+PFUzMTU0PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIERERUcKKzxVQjVCRT4gIjxVMzEzOD48VTMxNTQ+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFR0cKKzxVQjVCRj4gIjxVMzEzOD48VTMxNTQ+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFR1MKKzxVQjVDMD4gIjxVMzEzOD48VTMxNTQ+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFTgorPFVCNUMxPiAiPFUzMTM4PjxVMzE1ND48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBEREVOSQorPFVCNUMyPiAiPFUzMTM4PjxVMzE1ND48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBEREVOSAorPFVCNUMzPiAiPFUzMTM4PjxVMzE1ND48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBEREVECis8VUI1QzQ+ICI8VTMxMzg+PFUzMTU0PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIERERUwKKzxVQjVDNT4gIjxVMzEzOD48VTMxNTQ+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFTEcKKzxVQjVDNj4gIjxVMzEzOD48VTMxNTQ+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFTE0KKzxVQjVDNz4gIjxVMzEzOD48VTMxNTQ+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFTEIKKzxVQjVDOD4gIjxVMzEzOD48VTMxNTQ+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFTFMKKzxVQjVDOT4gIjxVMzEzOD48VTMxNTQ+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFTFQKKzxVQjVDQT4gIjxVMzEzOD48VTMxNTQ+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFTFAKKzxVQjVDQj4gIjxVMzEzOD48VTMxNTQ+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFTEgKKzxVQjVDQz4gIjxVMzEzOD48VTMxNTQ+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFTQorPFVCNUNEPiAiPFUzMTM4PjxVMzE1ND48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBEREVCCis8VUI1Q0U+ICI8VTMxMzg+PFUzMTU0PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIERERUJTCis8VUI1Q0Y+ICI8VTMxMzg+PFUzMTU0PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIERERVMKKzxVQjVEMD4gIjxVMzEzOD48VTMxNTQ+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFU1MKKzxVQjVEMT4gIjxVMzEzOD48VTMxNTQ+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFTkcKKzxVQjVEMj4gIjxVMzEzOD48VTMxNTQ+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFSgorPFVCNUQzPiAiPFUzMTM4PjxVMzE1ND48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBEREVDCis8VUI1RDQ+ICI8VTMxMzg+PFUzMTU0PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIERERUsKKzxVQjVENT4gIjxVMzEzOD48VTMxNTQ+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFVAorPFVCNUQ2PiAiPFUzMTM4PjxVMzE1ND48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBEREVQCis8VUI1RDc+ICI8VTMxMzg+PFUzMTU0PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIERERUgKKzxVQjVEOD4gIjxVMzEzOD48VTMxNTU+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlFTworPFVCNUQ5PiAiPFUzMTM4PjxVMzE1NT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlFT0cKKzxVQjVEQT4gIjxVMzEzOD48VTMxNTU+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZRU9HRworPFVCNURCPiAiPFUzMTM4PjxVMzE1NT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlFT0dTCis8VUI1REM+ICI8VTMxMzg+PFUzMTU1PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUVPTgorPFVCNUREPiAiPFUzMTM4PjxVMzE1NT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlFT05JCis8VUI1REU+ICI8VTMxMzg+PFUzMTU1PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUVPTkgKKzxVQjVERj4gIjxVMzEzOD48VTMxNTU+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZRU9ECis8VUI1RTA+ICI8VTMxMzg+PFUzMTU1PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUVPTAorPFVCNUUxPiAiPFUzMTM4PjxVMzE1NT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlFT0xHCis8VUI1RTI+ICI8VTMxMzg+PFUzMTU1PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUVPTE0KKzxVQjVFMz4gIjxVMzEzOD48VTMxNTU+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZRU9MQgorPFVCNUU0PiAiPFUzMTM4PjxVMzE1NT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlFT0xTCis8VUI1RTU+ICI8VTMxMzg+PFUzMTU1PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUVPTFQKKzxVQjVFNj4gIjxVMzEzOD48VTMxNTU+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZRU9MUAorPFVCNUU3PiAiPFUzMTM4PjxVMzE1NT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlFT0xICis8VUI1RTg+ICI8VTMxMzg+PFUzMTU1PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUVPTQorPFVCNUU5PiAiPFUzMTM4PjxVMzE1NT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlFT0IKKzxVQjVFQT4gIjxVMzEzOD48VTMxNTU+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZRU9CUworPFVCNUVCPiAiPFUzMTM4PjxVMzE1NT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlFT1MKKzxVQjVFQz4gIjxVMzEzOD48VTMxNTU+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZRU9TUworPFVCNUVEPiAiPFUzMTM4PjxVMzE1NT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlFT05HCis8VUI1RUU+ICI8VTMxMzg+PFUzMTU1PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUVPSgorPFVCNUVGPiAiPFUzMTM4PjxVMzE1NT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlFT0MKKzxVQjVGMD4gIjxVMzEzOD48VTMxNTU+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZRU9LCis8VUI1RjE+ICI8VTMxMzg+PFUzMTU1PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUVPVAorPFVCNUYyPiAiPFUzMTM4PjxVMzE1NT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlFT1AKKzxVQjVGMz4gIjxVMzEzOD48VTMxNTU+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZRU9ICis8VUI1RjQ+ICI8VTMxMzg+PFUzMTU2PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZRQorPFVCNUY1PiAiPFUzMTM4PjxVMzE1Nj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlFRworPFVCNUY2PiAiPFUzMTM4PjxVMzE1Nj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlFR0cKKzxVQjVGNz4gIjxVMzEzOD48VTMxNTY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZRUdTCis8VUI1Rjg+ICI8VTMxMzg+PFUzMTU2PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUVOCis8VUI1Rjk+ICI8VTMxMzg+PFUzMTU2PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUVOSQorPFVCNUZBPiAiPFUzMTM4PjxVMzE1Nj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlFTkgKKzxVQjVGQj4gIjxVMzEzOD48VTMxNTY+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZRUQKKzxVQjVGQz4gIjxVMzEzOD48VTMxNTY+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZRUwKKzxVQjVGRD4gIjxVMzEzOD48VTMxNTY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZRUxHCis8VUI1RkU+ICI8VTMxMzg+PFUzMTU2PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUVMTQorPFVCNUZGPiAiPFUzMTM4PjxVMzE1Nj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlFTEIKKzxVQjYwMD4gIjxVMzEzOD48VTMxNTY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZRUxTCis8VUI2MDE+ICI8VTMxMzg+PFUzMTU2PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUVMVAorPFVCNjAyPiAiPFUzMTM4PjxVMzE1Nj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlFTFAKKzxVQjYwMz4gIjxVMzEzOD48VTMxNTY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZRUxICis8VUI2MDQ+ICI8VTMxMzg+PFUzMTU2PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUVNCis8VUI2MDU+ICI8VTMxMzg+PFUzMTU2PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUVCCis8VUI2MDY+ICI8VTMxMzg+PFUzMTU2PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUVCUworPFVCNjA3PiAiPFUzMTM4PjxVMzE1Nj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlFUworPFVCNjA4PiAiPFUzMTM4PjxVMzE1Nj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlFU1MKKzxVQjYwOT4gIjxVMzEzOD48VTMxNTY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZRU5HCis8VUI2MEE+ICI8VTMxMzg+PFUzMTU2PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUVKCis8VUI2MEI+ICI8VTMxMzg+PFUzMTU2PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUVDCis8VUI2MEM+ICI8VTMxMzg+PFUzMTU2PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUVLCis8VUI2MEQ+ICI8VTMxMzg+PFUzMTU2PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUVUCis8VUI2MEU+ICI8VTMxMzg+PFUzMTU2PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUVQCis8VUI2MEY+ICI8VTMxMzg+PFUzMTU2PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUVICis8VUI2MTA+ICI8VTMxMzg+PFUzMTU3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERPCis8VUI2MTE+ICI8VTMxMzg+PFUzMTU3PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIERET0cKKzxVQjYxMj4gIjxVMzEzOD48VTMxNTc+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERPR0cKKzxVQjYxMz4gIjxVMzEzOD48VTMxNTc+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERPR1MKKzxVQjYxND4gIjxVMzEzOD48VTMxNTc+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERPTgorPFVCNjE1PiAiPFUzMTM4PjxVMzE1Nz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBERE9OSQorPFVCNjE2PiAiPFUzMTM4PjxVMzE1Nz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBERE9OSAorPFVCNjE3PiAiPFUzMTM4PjxVMzE1Nz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBERE9ECis8VUI2MTg+ICI8VTMxMzg+PFUzMTU3PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIERET0wKKzxVQjYxOT4gIjxVMzEzOD48VTMxNTc+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERPTEcKKzxVQjYxQT4gIjxVMzEzOD48VTMxNTc+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERPTE0KKzxVQjYxQj4gIjxVMzEzOD48VTMxNTc+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERPTEIKKzxVQjYxQz4gIjxVMzEzOD48VTMxNTc+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERPTFMKKzxVQjYxRD4gIjxVMzEzOD48VTMxNTc+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERPTFQKKzxVQjYxRT4gIjxVMzEzOD48VTMxNTc+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERPTFAKKzxVQjYxRj4gIjxVMzEzOD48VTMxNTc+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERPTEgKKzxVQjYyMD4gIjxVMzEzOD48VTMxNTc+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERPTQorPFVCNjIxPiAiPFUzMTM4PjxVMzE1Nz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBERE9CCis8VUI2MjI+ICI8VTMxMzg+PFUzMTU3PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIERET0JTCis8VUI2MjM+ICI8VTMxMzg+PFUzMTU3PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIERET1MKKzxVQjYyND4gIjxVMzEzOD48VTMxNTc+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERPU1MKKzxVQjYyNT4gIjxVMzEzOD48VTMxNTc+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERPTkcKKzxVQjYyNj4gIjxVMzEzOD48VTMxNTc+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERPSgorPFVCNjI3PiAiPFUzMTM4PjxVMzE1Nz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBERE9DCis8VUI2Mjg+ICI8VTMxMzg+PFUzMTU3PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIERET0sKKzxVQjYyOT4gIjxVMzEzOD48VTMxNTc+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERPVAorPFVCNjJBPiAiPFUzMTM4PjxVMzE1Nz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBERE9QCis8VUI2MkI+ICI8VTMxMzg+PFUzMTU3PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIERET0gKKzxVQjYyQz4gIjxVMzEzOD48VTMxNTg+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdBCis8VUI2MkQ+ICI8VTMxMzg+PFUzMTU4PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0FHCis8VUI2MkU+ICI8VTMxMzg+PFUzMTU4PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0FHRworPFVCNjJGPiAiPFUzMTM4PjxVMzE1OD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdBR1MKKzxVQjYzMD4gIjxVMzEzOD48VTMxNTg+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXQU4KKzxVQjYzMT4gIjxVMzEzOD48VTMxNTg+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXQU5JCis8VUI2MzI+ICI8VTMxMzg+PFUzMTU4PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0FOSAorPFVCNjMzPiAiPFUzMTM4PjxVMzE1OD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdBRAorPFVCNjM0PiAiPFUzMTM4PjxVMzE1OD48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdBTAorPFVCNjM1PiAiPFUzMTM4PjxVMzE1OD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdBTEcKKzxVQjYzNj4gIjxVMzEzOD48VTMxNTg+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXQUxNCis8VUI2Mzc+ICI8VTMxMzg+PFUzMTU4PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0FMQgorPFVCNjM4PiAiPFUzMTM4PjxVMzE1OD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdBTFMKKzxVQjYzOT4gIjxVMzEzOD48VTMxNTg+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXQUxUCis8VUI2M0E+ICI8VTMxMzg+PFUzMTU4PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0FMUAorPFVCNjNCPiAiPFUzMTM4PjxVMzE1OD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdBTEgKKzxVQjYzQz4gIjxVMzEzOD48VTMxNTg+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXQU0KKzxVQjYzRD4gIjxVMzEzOD48VTMxNTg+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXQUIKKzxVQjYzRT4gIjxVMzEzOD48VTMxNTg+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXQUJTCis8VUI2M0Y+ICI8VTMxMzg+PFUzMTU4PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0FTCis8VUI2NDA+ICI8VTMxMzg+PFUzMTU4PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0FTUworPFVCNjQxPiAiPFUzMTM4PjxVMzE1OD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdBTkcKKzxVQjY0Mj4gIjxVMzEzOD48VTMxNTg+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXQUoKKzxVQjY0Mz4gIjxVMzEzOD48VTMxNTg+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXQUMKKzxVQjY0ND4gIjxVMzEzOD48VTMxNTg+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXQUsKKzxVQjY0NT4gIjxVMzEzOD48VTMxNTg+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXQVQKKzxVQjY0Nj4gIjxVMzEzOD48VTMxNTg+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXQVAKKzxVQjY0Nz4gIjxVMzEzOD48VTMxNTg+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXQUgKKzxVQjY0OD4gIjxVMzEzOD48VTMxNTk+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdBRQorPFVCNjQ5PiAiPFUzMTM4PjxVMzE1OT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdBRUcKKzxVQjY0QT4gIjxVMzEzOD48VTMxNTk+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXQUVHRworPFVCNjRCPiAiPFUzMTM4PjxVMzE1OT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdBRUdTCis8VUI2NEM+ICI8VTMxMzg+PFUzMTU5PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0FFTgorPFVCNjREPiAiPFUzMTM4PjxVMzE1OT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdBRU5JCis8VUI2NEU+ICI8VTMxMzg+PFUzMTU5PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0FFTkgKKzxVQjY0Rj4gIjxVMzEzOD48VTMxNTk+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXQUVECis8VUI2NTA+ICI8VTMxMzg+PFUzMTU5PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0FFTAorPFVCNjUxPiAiPFUzMTM4PjxVMzE1OT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdBRUxHCis8VUI2NTI+ICI8VTMxMzg+PFUzMTU5PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0FFTE0KKzxVQjY1Mz4gIjxVMzEzOD48VTMxNTk+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXQUVMQgorPFVCNjU0PiAiPFUzMTM4PjxVMzE1OT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdBRUxTCis8VUI2NTU+ICI8VTMxMzg+PFUzMTU5PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0FFTFQKKzxVQjY1Nj4gIjxVMzEzOD48VTMxNTk+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXQUVMUAorPFVCNjU3PiAiPFUzMTM4PjxVMzE1OT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdBRUxICis8VUI2NTg+ICI8VTMxMzg+PFUzMTU5PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0FFTQorPFVCNjU5PiAiPFUzMTM4PjxVMzE1OT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdBRUIKKzxVQjY1QT4gIjxVMzEzOD48VTMxNTk+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXQUVCUworPFVCNjVCPiAiPFUzMTM4PjxVMzE1OT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdBRVMKKzxVQjY1Qz4gIjxVMzEzOD48VTMxNTk+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXQUVTUworPFVCNjVEPiAiPFUzMTM4PjxVMzE1OT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdBRU5HCis8VUI2NUU+ICI8VTMxMzg+PFUzMTU5PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0FFSgorPFVCNjVGPiAiPFUzMTM4PjxVMzE1OT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdBRUMKKzxVQjY2MD4gIjxVMzEzOD48VTMxNTk+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXQUVLCis8VUI2NjE+ICI8VTMxMzg+PFUzMTU5PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0FFVAorPFVCNjYyPiAiPFUzMTM4PjxVMzE1OT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdBRVAKKzxVQjY2Mz4gIjxVMzEzOD48VTMxNTk+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXQUVICis8VUI2NjQ+ICI8VTMxMzg+PFUzMTVBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERPRQorPFVCNjY1PiAiPFUzMTM4PjxVMzE1QT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBERE9FRworPFVCNjY2PiAiPFUzMTM4PjxVMzE1QT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBERE9FR0cKKzxVQjY2Nz4gIjxVMzEzOD48VTMxNUE+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERPRUdTCis8VUI2Njg+ICI8VTMxMzg+PFUzMTVBPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIERET0VOCis8VUI2Njk+ICI8VTMxMzg+PFUzMTVBPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIERET0VOSQorPFVCNjZBPiAiPFUzMTM4PjxVMzE1QT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBERE9FTkgKKzxVQjY2Qj4gIjxVMzEzOD48VTMxNUE+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERPRUQKKzxVQjY2Qz4gIjxVMzEzOD48VTMxNUE+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERPRUwKKzxVQjY2RD4gIjxVMzEzOD48VTMxNUE+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERPRUxHCis8VUI2NkU+ICI8VTMxMzg+PFUzMTVBPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIERET0VMTQorPFVCNjZGPiAiPFUzMTM4PjxVMzE1QT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBERE9FTEIKKzxVQjY3MD4gIjxVMzEzOD48VTMxNUE+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERPRUxTCis8VUI2NzE+ICI8VTMxMzg+PFUzMTVBPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIERET0VMVAorPFVCNjcyPiAiPFUzMTM4PjxVMzE1QT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBERE9FTFAKKzxVQjY3Mz4gIjxVMzEzOD48VTMxNUE+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERPRUxICis8VUI2NzQ+ICI8VTMxMzg+PFUzMTVBPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIERET0VNCis8VUI2NzU+ICI8VTMxMzg+PFUzMTVBPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIERET0VCCis8VUI2NzY+ICI8VTMxMzg+PFUzMTVBPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIERET0VCUworPFVCNjc3PiAiPFUzMTM4PjxVMzE1QT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBERE9FUworPFVCNjc4PiAiPFUzMTM4PjxVMzE1QT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBERE9FU1MKKzxVQjY3OT4gIjxVMzEzOD48VTMxNUE+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERPRU5HCis8VUI2N0E+ICI8VTMxMzg+PFUzMTVBPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIERET0VKCis8VUI2N0I+ICI8VTMxMzg+PFUzMTVBPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIERET0VDCis8VUI2N0M+ICI8VTMxMzg+PFUzMTVBPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIERET0VLCis8VUI2N0Q+ICI8VTMxMzg+PFUzMTVBPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIERET0VUCis8VUI2N0U+ICI8VTMxMzg+PFUzMTVBPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIERET0VQCis8VUI2N0Y+ICI8VTMxMzg+PFUzMTVBPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIERET0VICis8VUI2ODA+ICI8VTMxMzg+PFUzMTVCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZTworPFVCNjgxPiAiPFUzMTM4PjxVMzE1Qj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlPRworPFVCNjgyPiAiPFUzMTM4PjxVMzE1Qj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlPR0cKKzxVQjY4Mz4gIjxVMzEzOD48VTMxNUI+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZT0dTCis8VUI2ODQ+ICI8VTMxMzg+PFUzMTVCPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEREWU9OCis8VUI2ODU+ICI8VTMxMzg+PFUzMTVCPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWU9OSQorPFVCNjg2PiAiPFUzMTM4PjxVMzE1Qj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlPTkgKKzxVQjY4Nz4gIjxVMzEzOD48VTMxNUI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZT0QKKzxVQjY4OD4gIjxVMzEzOD48VTMxNUI+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZT0wKKzxVQjY4OT4gIjxVMzEzOD48VTMxNUI+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZT0xHCis8VUI2OEE+ICI8VTMxMzg+PFUzMTVCPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEREWU9MTQorPFVCNjhCPiAiPFUzMTM4PjxVMzE1Qj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlPTEIKKzxVQjY4Qz4gIjxVMzEzOD48VTMxNUI+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZT0xTCis8VUI2OEQ+ICI8VTMxMzg+PFUzMTVCPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWU9MVAorPFVCNjhFPiAiPFUzMTM4PjxVMzE1Qj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlPTFAKKzxVQjY4Rj4gIjxVMzEzOD48VTMxNUI+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZT0xICis8VUI2OTA+ICI8VTMxMzg+PFUzMTVCPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWU9NCis8VUI2OTE+ICI8VTMxMzg+PFUzMTVCPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEREWU9CCis8VUI2OTI+ICI8VTMxMzg+PFUzMTVCPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEREWU9CUworPFVCNjkzPiAiPFUzMTM4PjxVMzE1Qj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlPUworPFVCNjk0PiAiPFUzMTM4PjxVMzE1Qj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlPU1MKKzxVQjY5NT4gIjxVMzEzOD48VTMxNUI+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZT05HCis8VUI2OTY+ICI8VTMxMzg+PFUzMTVCPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEREWU9KCis8VUI2OTc+ICI8VTMxMzg+PFUzMTVCPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWU9DCis8VUI2OTg+ICI8VTMxMzg+PFUzMTVCPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEREWU9LCis8VUI2OTk+ICI8VTMxMzg+PFUzMTVCPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEREWU9UCis8VUI2OUE+ICI8VTMxMzg+PFUzMTVCPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEREWU9QCis8VUI2OUI+ICI8VTMxMzg+PFUzMTVCPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWU9ICis8VUI2OUM+ICI8VTMxMzg+PFUzMTVDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERVCis8VUI2OUQ+ICI8VTMxMzg+PFUzMTVDPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEREVUcKKzxVQjY5RT4gIjxVMzEzOD48VTMxNUM+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERVR0cKKzxVQjY5Rj4gIjxVMzEzOD48VTMxNUM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERVR1MKKzxVQjZBMD4gIjxVMzEzOD48VTMxNUM+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERVTgorPFVCNkExPiAiPFUzMTM4PjxVMzE1Qz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBERFVOSQorPFVCNkEyPiAiPFUzMTM4PjxVMzE1Qz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBERFVOSAorPFVCNkEzPiAiPFUzMTM4PjxVMzE1Qz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBERFVECis8VUI2QTQ+ICI8VTMxMzg+PFUzMTVDPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEREVUwKKzxVQjZBNT4gIjxVMzEzOD48VTMxNUM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERVTEcKKzxVQjZBNj4gIjxVMzEzOD48VTMxNUM+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERVTE0KKzxVQjZBNz4gIjxVMzEzOD48VTMxNUM+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERVTEIKKzxVQjZBOD4gIjxVMzEzOD48VTMxNUM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERVTFMKKzxVQjZBOT4gIjxVMzEzOD48VTMxNUM+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERVTFQKKzxVQjZBQT4gIjxVMzEzOD48VTMxNUM+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERVTFAKKzxVQjZBQj4gIjxVMzEzOD48VTMxNUM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERVTEgKKzxVQjZBQz4gIjxVMzEzOD48VTMxNUM+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERVTQorPFVCNkFEPiAiPFUzMTM4PjxVMzE1Qz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBERFVCCis8VUI2QUU+ICI8VTMxMzg+PFUzMTVDPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEREVUJTCis8VUI2QUY+ICI8VTMxMzg+PFUzMTVDPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEREVVMKKzxVQjZCMD4gIjxVMzEzOD48VTMxNUM+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERVU1MKKzxVQjZCMT4gIjxVMzEzOD48VTMxNUM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERVTkcKKzxVQjZCMj4gIjxVMzEzOD48VTMxNUM+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERVSgorPFVCNkIzPiAiPFUzMTM4PjxVMzE1Qz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBERFVDCis8VUI2QjQ+ICI8VTMxMzg+PFUzMTVDPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEREVUsKKzxVQjZCNT4gIjxVMzEzOD48VTMxNUM+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERVVAorPFVCNkI2PiAiPFUzMTM4PjxVMzE1Qz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBERFVQCis8VUI2Qjc+ICI8VTMxMzg+PFUzMTVDPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEREVUgKKzxVQjZCOD4gIjxVMzEzOD48VTMxNUQ+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdFTworPFVCNkI5PiAiPFUzMTM4PjxVMzE1RD48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdFT0cKKzxVQjZCQT4gIjxVMzEzOD48VTMxNUQ+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXRU9HRworPFVCNkJCPiAiPFUzMTM4PjxVMzE1RD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdFT0dTCis8VUI2QkM+ICI8VTMxMzg+PFUzMTVEPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0VPTgorPFVCNkJEPiAiPFUzMTM4PjxVMzE1RD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdFT05JCis8VUI2QkU+ICI8VTMxMzg+PFUzMTVEPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0VPTkgKKzxVQjZCRj4gIjxVMzEzOD48VTMxNUQ+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXRU9ECis8VUI2QzA+ICI8VTMxMzg+PFUzMTVEPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0VPTAorPFVCNkMxPiAiPFUzMTM4PjxVMzE1RD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdFT0xHCis8VUI2QzI+ICI8VTMxMzg+PFUzMTVEPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0VPTE0KKzxVQjZDMz4gIjxVMzEzOD48VTMxNUQ+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXRU9MQgorPFVCNkM0PiAiPFUzMTM4PjxVMzE1RD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdFT0xTCis8VUI2QzU+ICI8VTMxMzg+PFUzMTVEPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0VPTFQKKzxVQjZDNj4gIjxVMzEzOD48VTMxNUQ+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXRU9MUAorPFVCNkM3PiAiPFUzMTM4PjxVMzE1RD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdFT0xICis8VUI2Qzg+ICI8VTMxMzg+PFUzMTVEPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0VPTQorPFVCNkM5PiAiPFUzMTM4PjxVMzE1RD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdFT0IKKzxVQjZDQT4gIjxVMzEzOD48VTMxNUQ+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXRU9CUworPFVCNkNCPiAiPFUzMTM4PjxVMzE1RD48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdFT1MKKzxVQjZDQz4gIjxVMzEzOD48VTMxNUQ+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXRU9TUworPFVCNkNEPiAiPFUzMTM4PjxVMzE1RD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdFT05HCis8VUI2Q0U+ICI8VTMxMzg+PFUzMTVEPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0VPSgorPFVCNkNGPiAiPFUzMTM4PjxVMzE1RD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdFT0MKKzxVQjZEMD4gIjxVMzEzOD48VTMxNUQ+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXRU9LCis8VUI2RDE+ICI8VTMxMzg+PFUzMTVEPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0VPVAorPFVCNkQyPiAiPFUzMTM4PjxVMzE1RD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdFT1AKKzxVQjZEMz4gIjxVMzEzOD48VTMxNUQ+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXRU9ICis8VUI2RDQ+ICI8VTMxMzg+PFUzMTVFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXRQorPFVCNkQ1PiAiPFUzMTM4PjxVMzE1RT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdFRworPFVCNkQ2PiAiPFUzMTM4PjxVMzE1RT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdFR0cKKzxVQjZENz4gIjxVMzEzOD48VTMxNUU+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXRUdTCis8VUI2RDg+ICI8VTMxMzg+PFUzMTVFPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0VOCis8VUI2RDk+ICI8VTMxMzg+PFUzMTVFPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0VOSQorPFVCNkRBPiAiPFUzMTM4PjxVMzE1RT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdFTkgKKzxVQjZEQj4gIjxVMzEzOD48VTMxNUU+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXRUQKKzxVQjZEQz4gIjxVMzEzOD48VTMxNUU+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXRUwKKzxVQjZERD4gIjxVMzEzOD48VTMxNUU+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXRUxHCis8VUI2REU+ICI8VTMxMzg+PFUzMTVFPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0VMTQorPFVCNkRGPiAiPFUzMTM4PjxVMzE1RT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdFTEIKKzxVQjZFMD4gIjxVMzEzOD48VTMxNUU+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXRUxTCis8VUI2RTE+ICI8VTMxMzg+PFUzMTVFPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0VMVAorPFVCNkUyPiAiPFUzMTM4PjxVMzE1RT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdFTFAKKzxVQjZFMz4gIjxVMzEzOD48VTMxNUU+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXRUxICis8VUI2RTQ+ICI8VTMxMzg+PFUzMTVFPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0VNCis8VUI2RTU+ICI8VTMxMzg+PFUzMTVFPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0VCCis8VUI2RTY+ICI8VTMxMzg+PFUzMTVFPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0VCUworPFVCNkU3PiAiPFUzMTM4PjxVMzE1RT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdFUworPFVCNkU4PiAiPFUzMTM4PjxVMzE1RT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdFU1MKKzxVQjZFOT4gIjxVMzEzOD48VTMxNUU+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXRU5HCis8VUI2RUE+ICI8VTMxMzg+PFUzMTVFPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0VKCis8VUI2RUI+ICI8VTMxMzg+PFUzMTVFPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0VDCis8VUI2RUM+ICI8VTMxMzg+PFUzMTVFPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0VLCis8VUI2RUQ+ICI8VTMxMzg+PFUzMTVFPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0VUCis8VUI2RUU+ICI8VTMxMzg+PFUzMTVFPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0VQCis8VUI2RUY+ICI8VTMxMzg+PFUzMTVFPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0VICis8VUI2RjA+ICI8VTMxMzg+PFUzMTVGPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXSQorPFVCNkYxPiAiPFUzMTM4PjxVMzE1Rj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdJRworPFVCNkYyPiAiPFUzMTM4PjxVMzE1Rj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdJR0cKKzxVQjZGMz4gIjxVMzEzOD48VTMxNUY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXSUdTCis8VUI2RjQ+ICI8VTMxMzg+PFUzMTVGPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0lOCis8VUI2RjU+ICI8VTMxMzg+PFUzMTVGPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0lOSQorPFVCNkY2PiAiPFUzMTM4PjxVMzE1Rj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdJTkgKKzxVQjZGNz4gIjxVMzEzOD48VTMxNUY+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXSUQKKzxVQjZGOD4gIjxVMzEzOD48VTMxNUY+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXSUwKKzxVQjZGOT4gIjxVMzEzOD48VTMxNUY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXSUxHCis8VUI2RkE+ICI8VTMxMzg+PFUzMTVGPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0lMTQorPFVCNkZCPiAiPFUzMTM4PjxVMzE1Rj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdJTEIKKzxVQjZGQz4gIjxVMzEzOD48VTMxNUY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXSUxTCis8VUI2RkQ+ICI8VTMxMzg+PFUzMTVGPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0lMVAorPFVCNkZFPiAiPFUzMTM4PjxVMzE1Rj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdJTFAKKzxVQjZGRj4gIjxVMzEzOD48VTMxNUY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXSUxICis8VUI3MDA+ICI8VTMxMzg+PFUzMTVGPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0lNCis8VUI3MDE+ICI8VTMxMzg+PFUzMTVGPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0lCCis8VUI3MDI+ICI8VTMxMzg+PFUzMTVGPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0lCUworPFVCNzAzPiAiPFUzMTM4PjxVMzE1Rj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdJUworPFVCNzA0PiAiPFUzMTM4PjxVMzE1Rj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBERFdJU1MKKzxVQjcwNT4gIjxVMzEzOD48VTMxNUY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERXSU5HCis8VUI3MDY+ICI8VTMxMzg+PFUzMTVGPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0lKCis8VUI3MDc+ICI8VTMxMzg+PFUzMTVGPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0lDCis8VUI3MDg+ICI8VTMxMzg+PFUzMTVGPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0lLCis8VUI3MDk+ICI8VTMxMzg+PFUzMTVGPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0lUCis8VUI3MEE+ICI8VTMxMzg+PFUzMTVGPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0lQCis8VUI3MEI+ICI8VTMxMzg+PFUzMTVGPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEREV0lICis8VUI3MEM+ICI8VTMxMzg+PFUzMTYwPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZVQorPFVCNzBEPiAiPFUzMTM4PjxVMzE2MD48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlVRworPFVCNzBFPiAiPFUzMTM4PjxVMzE2MD48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlVR0cKKzxVQjcwRj4gIjxVMzEzOD48VTMxNjA+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZVUdTCis8VUI3MTA+ICI8VTMxMzg+PFUzMTYwPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEREWVVOCis8VUI3MTE+ICI8VTMxMzg+PFUzMTYwPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWVVOSQorPFVCNzEyPiAiPFUzMTM4PjxVMzE2MD48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlVTkgKKzxVQjcxMz4gIjxVMzEzOD48VTMxNjA+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZVUQKKzxVQjcxND4gIjxVMzEzOD48VTMxNjA+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZVUwKKzxVQjcxNT4gIjxVMzEzOD48VTMxNjA+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZVUxHCis8VUI3MTY+ICI8VTMxMzg+PFUzMTYwPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEREWVVMTQorPFVCNzE3PiAiPFUzMTM4PjxVMzE2MD48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlVTEIKKzxVQjcxOD4gIjxVMzEzOD48VTMxNjA+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZVUxTCis8VUI3MTk+ICI8VTMxMzg+PFUzMTYwPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWVVMVAorPFVCNzFBPiAiPFUzMTM4PjxVMzE2MD48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlVTFAKKzxVQjcxQj4gIjxVMzEzOD48VTMxNjA+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZVUxICis8VUI3MUM+ICI8VTMxMzg+PFUzMTYwPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWVVNCis8VUI3MUQ+ICI8VTMxMzg+PFUzMTYwPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEREWVVCCis8VUI3MUU+ICI8VTMxMzg+PFUzMTYwPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEREWVVCUworPFVCNzFGPiAiPFUzMTM4PjxVMzE2MD48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlVUworPFVCNzIwPiAiPFUzMTM4PjxVMzE2MD48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlVU1MKKzxVQjcyMT4gIjxVMzEzOD48VTMxNjA+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZVU5HCis8VUI3MjI+ICI8VTMxMzg+PFUzMTYwPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEREWVVKCis8VUI3MjM+ICI8VTMxMzg+PFUzMTYwPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWVVDCis8VUI3MjQ+ICI8VTMxMzg+PFUzMTYwPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEREWVVLCis8VUI3MjU+ICI8VTMxMzg+PFUzMTYwPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEREWVVUCis8VUI3MjY+ICI8VTMxMzg+PFUzMTYwPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEREWVVQCis8VUI3Mjc+ICI8VTMxMzg+PFUzMTYwPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWVVICis8VUI3Mjg+ICI8VTMxMzg+PFUzMTYxPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFVQorPFVCNzI5PiAiPFUzMTM4PjxVMzE2MT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBEREVVRworPFVCNzJBPiAiPFUzMTM4PjxVMzE2MT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBEREVVR0cKKzxVQjcyQj4gIjxVMzEzOD48VTMxNjE+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFVUdTCis8VUI3MkM+ICI8VTMxMzg+PFUzMTYxPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIERERVVOCis8VUI3MkQ+ICI8VTMxMzg+PFUzMTYxPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIERERVVOSQorPFVCNzJFPiAiPFUzMTM4PjxVMzE2MT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBEREVVTkgKKzxVQjcyRj4gIjxVMzEzOD48VTMxNjE+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFVUQKKzxVQjczMD4gIjxVMzEzOD48VTMxNjE+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFVUwKKzxVQjczMT4gIjxVMzEzOD48VTMxNjE+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFVUxHCis8VUI3MzI+ICI8VTMxMzg+PFUzMTYxPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIERERVVMTQorPFVCNzMzPiAiPFUzMTM4PjxVMzE2MT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBEREVVTEIKKzxVQjczND4gIjxVMzEzOD48VTMxNjE+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFVUxTCis8VUI3MzU+ICI8VTMxMzg+PFUzMTYxPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIERERVVMVAorPFVCNzM2PiAiPFUzMTM4PjxVMzE2MT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBEREVVTFAKKzxVQjczNz4gIjxVMzEzOD48VTMxNjE+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFVUxICis8VUI3Mzg+ICI8VTMxMzg+PFUzMTYxPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIERERVVNCis8VUI3Mzk+ICI8VTMxMzg+PFUzMTYxPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIERERVVCCis8VUI3M0E+ICI8VTMxMzg+PFUzMTYxPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIERERVVCUworPFVCNzNCPiAiPFUzMTM4PjxVMzE2MT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBEREVVUworPFVCNzNDPiAiPFUzMTM4PjxVMzE2MT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBEREVVU1MKKzxVQjczRD4gIjxVMzEzOD48VTMxNjE+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERFVU5HCis8VUI3M0U+ICI8VTMxMzg+PFUzMTYxPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIERERVVKCis8VUI3M0Y+ICI8VTMxMzg+PFUzMTYxPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIERERVVDCis8VUI3NDA+ICI8VTMxMzg+PFUzMTYxPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIERERVVLCis8VUI3NDE+ICI8VTMxMzg+PFUzMTYxPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIERERVVUCis8VUI3NDI+ICI8VTMxMzg+PFUzMTYxPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIERERVVQCis8VUI3NDM+ICI8VTMxMzg+PFUzMTYxPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIERERVVICis8VUI3NDQ+ICI8VTMxMzg+PFUzMTYyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZSQorPFVCNzQ1PiAiPFUzMTM4PjxVMzE2Mj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlJRworPFVCNzQ2PiAiPFUzMTM4PjxVMzE2Mj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlJR0cKKzxVQjc0Nz4gIjxVMzEzOD48VTMxNjI+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZSUdTCis8VUI3NDg+ICI8VTMxMzg+PFUzMTYyPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUlOCis8VUI3NDk+ICI8VTMxMzg+PFUzMTYyPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUlOSQorPFVCNzRBPiAiPFUzMTM4PjxVMzE2Mj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlJTkgKKzxVQjc0Qj4gIjxVMzEzOD48VTMxNjI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZSUQKKzxVQjc0Qz4gIjxVMzEzOD48VTMxNjI+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZSUwKKzxVQjc0RD4gIjxVMzEzOD48VTMxNjI+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZSUxHCis8VUI3NEU+ICI8VTMxMzg+PFUzMTYyPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUlMTQorPFVCNzRGPiAiPFUzMTM4PjxVMzE2Mj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlJTEIKKzxVQjc1MD4gIjxVMzEzOD48VTMxNjI+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZSUxTCis8VUI3NTE+ICI8VTMxMzg+PFUzMTYyPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUlMVAorPFVCNzUyPiAiPFUzMTM4PjxVMzE2Mj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlJTFAKKzxVQjc1Mz4gIjxVMzEzOD48VTMxNjI+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZSUxICis8VUI3NTQ+ICI8VTMxMzg+PFUzMTYyPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUlNCis8VUI3NTU+ICI8VTMxMzg+PFUzMTYyPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUlCCis8VUI3NTY+ICI8VTMxMzg+PFUzMTYyPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUlCUworPFVCNzU3PiAiPFUzMTM4PjxVMzE2Mj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlJUworPFVCNzU4PiAiPFUzMTM4PjxVMzE2Mj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBERFlJU1MKKzxVQjc1OT4gIjxVMzEzOD48VTMxNjI+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERZSU5HCis8VUI3NUE+ICI8VTMxMzg+PFUzMTYyPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUlKCis8VUI3NUI+ICI8VTMxMzg+PFUzMTYyPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUlDCis8VUI3NUM+ICI8VTMxMzg+PFUzMTYyPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUlLCis8VUI3NUQ+ICI8VTMxMzg+PFUzMTYyPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUlUCis8VUI3NUU+ICI8VTMxMzg+PFUzMTYyPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUlQCis8VUI3NUY+ICI8VTMxMzg+PFUzMTYyPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEREWUlICis8VUI3NjA+ICI8VTMxMzg+PFUzMTYzPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERJCis8VUI3NjE+ICI8VTMxMzg+PFUzMTYzPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIERESUcKKzxVQjc2Mj4gIjxVMzEzOD48VTMxNjM+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERJR0cKKzxVQjc2Mz4gIjxVMzEzOD48VTMxNjM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERJR1MKKzxVQjc2ND4gIjxVMzEzOD48VTMxNjM+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERJTgorPFVCNzY1PiAiPFUzMTM4PjxVMzE2Mz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBERElOSQorPFVCNzY2PiAiPFUzMTM4PjxVMzE2Mz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBERElOSAorPFVCNzY3PiAiPFUzMTM4PjxVMzE2Mz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBERElECis8VUI3Njg+ICI8VTMxMzg+PFUzMTYzPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIERESUwKKzxVQjc2OT4gIjxVMzEzOD48VTMxNjM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERJTEcKKzxVQjc2QT4gIjxVMzEzOD48VTMxNjM+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERJTE0KKzxVQjc2Qj4gIjxVMzEzOD48VTMxNjM+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERJTEIKKzxVQjc2Qz4gIjxVMzEzOD48VTMxNjM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERJTFMKKzxVQjc2RD4gIjxVMzEzOD48VTMxNjM+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERJTFQKKzxVQjc2RT4gIjxVMzEzOD48VTMxNjM+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERJTFAKKzxVQjc2Rj4gIjxVMzEzOD48VTMxNjM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERJTEgKKzxVQjc3MD4gIjxVMzEzOD48VTMxNjM+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERJTQorPFVCNzcxPiAiPFUzMTM4PjxVMzE2Mz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBERElCCis8VUI3NzI+ICI8VTMxMzg+PFUzMTYzPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIERESUJTCis8VUI3NzM+ICI8VTMxMzg+PFUzMTYzPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIERESVMKKzxVQjc3ND4gIjxVMzEzOD48VTMxNjM+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERJU1MKKzxVQjc3NT4gIjxVMzEzOD48VTMxNjM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERJTkcKKzxVQjc3Nj4gIjxVMzEzOD48VTMxNjM+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgRERJSgorPFVCNzc3PiAiPFUzMTM4PjxVMzE2Mz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBERElDCis8VUI3Nzg+ICI8VTMxMzg+PFUzMTYzPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIERESUsKKzxVQjc3OT4gIjxVMzEzOD48VTMxNjM+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRERJVAorPFVCNzdBPiAiPFUzMTM4PjxVMzE2Mz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBERElQCis8VUI3N0I+ICI8VTMxMzg+PFUzMTYzPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIERESUgKKzxVQjc3Qz4gIjxVMzEzOT48VTMxNEY+IgklIEhBTkdVTCBTWUxMQUJMRSBSQQorPFVCNzdEPiAiPFUzMTM5PjxVMzE0Rj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBSQUcKKzxVQjc3RT4gIjxVMzEzOT48VTMxNEY+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkFHRworPFVCNzdGPiAiPFUzMTM5PjxVMzE0Rj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBSQUdTCis8VUI3ODA+ICI8VTMxMzk+PFUzMTRGPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFJBTgorPFVCNzgxPiAiPFUzMTM5PjxVMzE0Rj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBSQU5JCis8VUI3ODI+ICI8VTMxMzk+PFUzMTRGPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFJBTkgKKzxVQjc4Mz4gIjxVMzEzOT48VTMxNEY+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUkFECis8VUI3ODQ+ICI8VTMxMzk+PFUzMTRGPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFJBTAorPFVCNzg1PiAiPFUzMTM5PjxVMzE0Rj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBSQUxHCis8VUI3ODY+ICI8VTMxMzk+PFUzMTRGPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFJBTE0KKzxVQjc4Nz4gIjxVMzEzOT48VTMxNEY+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkFMQgorPFVCNzg4PiAiPFUzMTM5PjxVMzE0Rj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBSQUxTCis8VUI3ODk+ICI8VTMxMzk+PFUzMTRGPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFJBTFQKKzxVQjc4QT4gIjxVMzEzOT48VTMxNEY+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkFMUAorPFVCNzhCPiAiPFUzMTM5PjxVMzE0Rj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBSQUxICis8VUI3OEM+ICI8VTMxMzk+PFUzMTRGPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFJBTQorPFVCNzhEPiAiPFUzMTM5PjxVMzE0Rj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBSQUIKKzxVQjc4RT4gIjxVMzEzOT48VTMxNEY+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgUkFCUworPFVCNzhGPiAiPFUzMTM5PjxVMzE0Rj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBSQVMKKzxVQjc5MD4gIjxVMzEzOT48VTMxNEY+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUkFTUworPFVCNzkxPiAiPFUzMTM5PjxVMzE0Rj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBSQU5HCis8VUI3OTI+ICI8VTMxMzk+PFUzMTRGPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFJBSgorPFVCNzkzPiAiPFUzMTM5PjxVMzE0Rj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBSQUMKKzxVQjc5ND4gIjxVMzEzOT48VTMxNEY+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkFLCis8VUI3OTU+ICI8VTMxMzk+PFUzMTRGPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFJBVAorPFVCNzk2PiAiPFUzMTM5PjxVMzE0Rj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBSQVAKKzxVQjc5Nz4gIjxVMzEzOT48VTMxNEY+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkFICis8VUI3OTg+ICI8VTMxMzk+PFUzMTUwPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkFFCis8VUI3OTk+ICI8VTMxMzk+PFUzMTUwPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFJBRUcKKzxVQjc5QT4gIjxVMzEzOT48VTMxNTA+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkFFR0cKKzxVQjc5Qj4gIjxVMzEzOT48VTMxNTA+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkFFR1MKKzxVQjc5Qz4gIjxVMzEzOT48VTMxNTA+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgUkFFTgorPFVCNzlEPiAiPFUzMTM5PjxVMzE1MD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBSQUVOSQorPFVCNzlFPiAiPFUzMTM5PjxVMzE1MD48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBSQUVOSAorPFVCNzlGPiAiPFUzMTM5PjxVMzE1MD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBSQUVECis8VUI3QTA+ICI8VTMxMzk+PFUzMTUwPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFJBRUwKKzxVQjdBMT4gIjxVMzEzOT48VTMxNTA+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkFFTEcKKzxVQjdBMj4gIjxVMzEzOT48VTMxNTA+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkFFTE0KKzxVQjdBMz4gIjxVMzEzOT48VTMxNTA+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkFFTEIKKzxVQjdBND4gIjxVMzEzOT48VTMxNTA+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkFFTFMKKzxVQjdBNT4gIjxVMzEzOT48VTMxNTA+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkFFTFQKKzxVQjdBNj4gIjxVMzEzOT48VTMxNTA+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkFFTFAKKzxVQjdBNz4gIjxVMzEzOT48VTMxNTA+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkFFTEgKKzxVQjdBOD4gIjxVMzEzOT48VTMxNTA+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkFFTQorPFVCN0E5PiAiPFUzMTM5PjxVMzE1MD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBSQUVCCis8VUI3QUE+ICI8VTMxMzk+PFUzMTUwPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFJBRUJTCis8VUI3QUI+ICI8VTMxMzk+PFUzMTUwPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFJBRVMKKzxVQjdBQz4gIjxVMzEzOT48VTMxNTA+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUkFFU1MKKzxVQjdBRD4gIjxVMzEzOT48VTMxNTA+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUkFFTkcKKzxVQjdBRT4gIjxVMzEzOT48VTMxNTA+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgUkFFSgorPFVCN0FGPiAiPFUzMTM5PjxVMzE1MD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBSQUVDCis8VUI3QjA+ICI8VTMxMzk+PFUzMTUwPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFJBRUsKKzxVQjdCMT4gIjxVMzEzOT48VTMxNTA+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkFFVAorPFVCN0IyPiAiPFUzMTM5PjxVMzE1MD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBSQUVQCis8VUI3QjM+ICI8VTMxMzk+PFUzMTUwPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFJBRUgKKzxVQjdCND4gIjxVMzEzOT48VTMxNTE+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUEKKzxVQjdCNT4gIjxVMzEzOT48VTMxNTE+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllBRworPFVCN0I2PiAiPFUzMTM5PjxVMzE1MT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFHRworPFVCN0I3PiAiPFUzMTM5PjxVMzE1MT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFHUworPFVCN0I4PiAiPFUzMTM5PjxVMzE1MT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFOCis8VUI3Qjk+ICI8VTMxMzk+PFUzMTUxPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFJZQU5JCis8VUI3QkE+ICI8VTMxMzk+PFUzMTUxPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFJZQU5ICis8VUI3QkI+ICI8VTMxMzk+PFUzMTUxPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFJZQUQKKzxVQjdCQz4gIjxVMzEzOT48VTMxNTE+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgUllBTAorPFVCN0JEPiAiPFUzMTM5PjxVMzE1MT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFMRworPFVCN0JFPiAiPFUzMTM5PjxVMzE1MT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFMTQorPFVCN0JGPiAiPFUzMTM5PjxVMzE1MT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFMQgorPFVCN0MwPiAiPFUzMTM5PjxVMzE1MT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFMUworPFVCN0MxPiAiPFUzMTM5PjxVMzE1MT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFMVAorPFVCN0MyPiAiPFUzMTM5PjxVMzE1MT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFMUAorPFVCN0MzPiAiPFUzMTM5PjxVMzE1MT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFMSAorPFVCN0M0PiAiPFUzMTM5PjxVMzE1MT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFNCis8VUI3QzU+ICI8VTMxMzk+PFUzMTUxPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFJZQUIKKzxVQjdDNj4gIjxVMzEzOT48VTMxNTE+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgUllBQlMKKzxVQjdDNz4gIjxVMzEzOT48VTMxNTE+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUllBUworPFVCN0M4PiAiPFUzMTM5PjxVMzE1MT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFTUworPFVCN0M5PiAiPFUzMTM5PjxVMzE1MT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFORworPFVCN0NBPiAiPFUzMTM5PjxVMzE1MT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFKCis8VUI3Q0I+ICI8VTMxMzk+PFUzMTUxPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFJZQUMKKzxVQjdDQz4gIjxVMzEzOT48VTMxNTE+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllBSworPFVCN0NEPiAiPFUzMTM5PjxVMzE1MT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFUCis8VUI3Q0U+ICI8VTMxMzk+PFUzMTUxPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFJZQVAKKzxVQjdDRj4gIjxVMzEzOT48VTMxNTE+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllBSAorPFVCN0QwPiAiPFUzMTM5PjxVMzE1Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFJZQUUKKzxVQjdEMT4gIjxVMzEzOT48VTMxNTI+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllBRUcKKzxVQjdEMj4gIjxVMzEzOT48VTMxNTI+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllBRUdHCis8VUI3RDM+ICI8VTMxMzk+PFUzMTUyPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFJZQUVHUworPFVCN0Q0PiAiPFUzMTM5PjxVMzE1Mj48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFFTgorPFVCN0Q1PiAiPFUzMTM5PjxVMzE1Mj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFFTkkKKzxVQjdENj4gIjxVMzEzOT48VTMxNTI+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUllBRU5ICis8VUI3RDc+ICI8VTMxMzk+PFUzMTUyPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFJZQUVECis8VUI3RDg+ICI8VTMxMzk+PFUzMTUyPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFJZQUVMCis8VUI3RDk+ICI8VTMxMzk+PFUzMTUyPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFJZQUVMRworPFVCN0RBPiAiPFUzMTM5PjxVMzE1Mj48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFFTE0KKzxVQjdEQj4gIjxVMzEzOT48VTMxNTI+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllBRUxCCis8VUI3REM+ICI8VTMxMzk+PFUzMTUyPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFJZQUVMUworPFVCN0REPiAiPFUzMTM5PjxVMzE1Mj48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFFTFQKKzxVQjdERT4gIjxVMzEzOT48VTMxNTI+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllBRUxQCis8VUI3REY+ICI8VTMxMzk+PFUzMTUyPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFJZQUVMSAorPFVCN0UwPiAiPFUzMTM5PjxVMzE1Mj48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFFTQorPFVCN0UxPiAiPFUzMTM5PjxVMzE1Mj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFFQgorPFVCN0UyPiAiPFUzMTM5PjxVMzE1Mj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFFQlMKKzxVQjdFMz4gIjxVMzEzOT48VTMxNTI+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUllBRVMKKzxVQjdFND4gIjxVMzEzOT48VTMxNTI+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUllBRVNTCis8VUI3RTU+ICI8VTMxMzk+PFUzMTUyPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFJZQUVORworPFVCN0U2PiAiPFUzMTM5PjxVMzE1Mj48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFFSgorPFVCN0U3PiAiPFUzMTM5PjxVMzE1Mj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFFQworPFVCN0U4PiAiPFUzMTM5PjxVMzE1Mj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFFSworPFVCN0U5PiAiPFUzMTM5PjxVMzE1Mj48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFFVAorPFVCN0VBPiAiPFUzMTM5PjxVMzE1Mj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFFUAorPFVCN0VCPiAiPFUzMTM5PjxVMzE1Mj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUFFSAorPFVCN0VDPiAiPFUzMTM5PjxVMzE1Mz4iCSUgSEFOR1VMIFNZTExBQkxFIFJFTworPFVCN0VEPiAiPFUzMTM5PjxVMzE1Mz48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBSRU9HCis8VUI3RUU+ICI8VTMxMzk+PFUzMTUzPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFJFT0dHCis8VUI3RUY+ICI8VTMxMzk+PFUzMTUzPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFJFT0dTCis8VUI3RjA+ICI8VTMxMzk+PFUzMTUzPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFJFT04KKzxVQjdGMT4gIjxVMzEzOT48VTMxNTM+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUkVPTkkKKzxVQjdGMj4gIjxVMzEzOT48VTMxNTM+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUkVPTkgKKzxVQjdGMz4gIjxVMzEzOT48VTMxNTM+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUkVPRAorPFVCN0Y0PiAiPFUzMTM5PjxVMzE1Mz48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBSRU9MCis8VUI3RjU+ICI8VTMxMzk+PFUzMTUzPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFJFT0xHCis8VUI3RjY+ICI8VTMxMzk+PFUzMTUzPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFJFT0xNCis8VUI3Rjc+ICI8VTMxMzk+PFUzMTUzPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFJFT0xCCis8VUI3Rjg+ICI8VTMxMzk+PFUzMTUzPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFJFT0xTCis8VUI3Rjk+ICI8VTMxMzk+PFUzMTUzPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFJFT0xUCis8VUI3RkE+ICI8VTMxMzk+PFUzMTUzPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFJFT0xQCis8VUI3RkI+ICI8VTMxMzk+PFUzMTUzPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFJFT0xICis8VUI3RkM+ICI8VTMxMzk+PFUzMTUzPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFJFT00KKzxVQjdGRD4gIjxVMzEzOT48VTMxNTM+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkVPQgorPFVCN0ZFPiAiPFUzMTM5PjxVMzE1Mz48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBSRU9CUworPFVCN0ZGPiAiPFUzMTM5PjxVMzE1Mz48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBSRU9TCis8VUI4MDA+ICI8VTMxMzk+PFUzMTUzPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFJFT1NTCis8VUI4MDE+ICI8VTMxMzk+PFUzMTUzPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFJFT05HCis8VUI4MDI+ICI8VTMxMzk+PFUzMTUzPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFJFT0oKKzxVQjgwMz4gIjxVMzEzOT48VTMxNTM+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkVPQworPFVCODA0PiAiPFUzMTM5PjxVMzE1Mz48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBSRU9LCis8VUI4MDU+ICI8VTMxMzk+PFUzMTUzPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFJFT1QKKzxVQjgwNj4gIjxVMzEzOT48VTMxNTM+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkVPUAorPFVCODA3PiAiPFUzMTM5PjxVMzE1Mz48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBSRU9ICis8VUI4MDg+ICI8VTMxMzk+PFUzMTU0PiIJJSBIQU5HVUwgU1lMTEFCTEUgUkUKKzxVQjgwOT4gIjxVMzEzOT48VTMxNTQ+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkVHCis8VUI4MEE+ICI8VTMxMzk+PFUzMTU0PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFJFR0cKKzxVQjgwQj4gIjxVMzEzOT48VTMxNTQ+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkVHUworPFVCODBDPiAiPFUzMTM5PjxVMzE1ND48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBSRU4KKzxVQjgwRD4gIjxVMzEzOT48VTMxNTQ+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUkVOSQorPFVCODBFPiAiPFUzMTM5PjxVMzE1ND48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBSRU5ICis8VUI4MEY+ICI8VTMxMzk+PFUzMTU0PjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFJFRAorPFVCODEwPiAiPFUzMTM5PjxVMzE1ND48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBSRUwKKzxVQjgxMT4gIjxVMzEzOT48VTMxNTQ+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkVMRworPFVCODEyPiAiPFUzMTM5PjxVMzE1ND48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBSRUxNCis8VUI4MTM+ICI8VTMxMzk+PFUzMTU0PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFJFTEIKKzxVQjgxND4gIjxVMzEzOT48VTMxNTQ+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkVMUworPFVCODE1PiAiPFUzMTM5PjxVMzE1ND48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBSRUxUCis8VUI4MTY+ICI8VTMxMzk+PFUzMTU0PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFJFTFAKKzxVQjgxNz4gIjxVMzEzOT48VTMxNTQ+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkVMSAorPFVCODE4PiAiPFUzMTM5PjxVMzE1ND48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBSRU0KKzxVQjgxOT4gIjxVMzEzOT48VTMxNTQ+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkVCCis8VUI4MUE+ICI8VTMxMzk+PFUzMTU0PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFJFQlMKKzxVQjgxQj4gIjxVMzEzOT48VTMxNTQ+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUkVTCis8VUI4MUM+ICI8VTMxMzk+PFUzMTU0PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFJFU1MKKzxVQjgxRD4gIjxVMzEzOT48VTMxNTQ+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUkVORworPFVCODFFPiAiPFUzMTM5PjxVMzE1ND48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBSRUoKKzxVQjgxRj4gIjxVMzEzOT48VTMxNTQ+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkVDCis8VUI4MjA+ICI8VTMxMzk+PFUzMTU0PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFJFSworPFVCODIxPiAiPFUzMTM5PjxVMzE1ND48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBSRVQKKzxVQjgyMj4gIjxVMzEzOT48VTMxNTQ+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkVQCis8VUI4MjM+ICI8VTMxMzk+PFUzMTU0PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFJFSAorPFVCODI0PiAiPFUzMTM5PjxVMzE1NT4iCSUgSEFOR1VMIFNZTExBQkxFIFJZRU8KKzxVQjgyNT4gIjxVMzEzOT48VTMxNTU+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllFT0cKKzxVQjgyNj4gIjxVMzEzOT48VTMxNTU+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllFT0dHCis8VUI4Mjc+ICI8VTMxMzk+PFUzMTU1PjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFJZRU9HUworPFVCODI4PiAiPFUzMTM5PjxVMzE1NT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUVPTgorPFVCODI5PiAiPFUzMTM5PjxVMzE1NT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUVPTkkKKzxVQjgyQT4gIjxVMzEzOT48VTMxNTU+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUllFT05ICis8VUI4MkI+ICI8VTMxMzk+PFUzMTU1PjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFJZRU9ECis8VUI4MkM+ICI8VTMxMzk+PFUzMTU1PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFJZRU9MCis8VUI4MkQ+ICI8VTMxMzk+PFUzMTU1PjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFJZRU9MRworPFVCODJFPiAiPFUzMTM5PjxVMzE1NT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUVPTE0KKzxVQjgyRj4gIjxVMzEzOT48VTMxNTU+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllFT0xCCis8VUI4MzA+ICI8VTMxMzk+PFUzMTU1PjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFJZRU9MUworPFVCODMxPiAiPFUzMTM5PjxVMzE1NT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUVPTFQKKzxVQjgzMj4gIjxVMzEzOT48VTMxNTU+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllFT0xQCis8VUI4MzM+ICI8VTMxMzk+PFUzMTU1PjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFJZRU9MSAorPFVCODM0PiAiPFUzMTM5PjxVMzE1NT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUVPTQorPFVCODM1PiAiPFUzMTM5PjxVMzE1NT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUVPQgorPFVCODM2PiAiPFUzMTM5PjxVMzE1NT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUVPQlMKKzxVQjgzNz4gIjxVMzEzOT48VTMxNTU+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUllFT1MKKzxVQjgzOD4gIjxVMzEzOT48VTMxNTU+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUllFT1NTCis8VUI4Mzk+ICI8VTMxMzk+PFUzMTU1PjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFJZRU9ORworPFVCODNBPiAiPFUzMTM5PjxVMzE1NT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUVPSgorPFVCODNCPiAiPFUzMTM5PjxVMzE1NT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUVPQworPFVCODNDPiAiPFUzMTM5PjxVMzE1NT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUVPSworPFVCODNEPiAiPFUzMTM5PjxVMzE1NT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUVPVAorPFVCODNFPiAiPFUzMTM5PjxVMzE1NT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUVPUAorPFVCODNGPiAiPFUzMTM5PjxVMzE1NT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUVPSAorPFVCODQwPiAiPFUzMTM5PjxVMzE1Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFJZRQorPFVCODQxPiAiPFUzMTM5PjxVMzE1Nj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUVHCis8VUI4NDI+ICI8VTMxMzk+PFUzMTU2PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFJZRUdHCis8VUI4NDM+ICI8VTMxMzk+PFUzMTU2PjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFJZRUdTCis8VUI4NDQ+ICI8VTMxMzk+PFUzMTU2PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFJZRU4KKzxVQjg0NT4gIjxVMzEzOT48VTMxNTY+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUllFTkkKKzxVQjg0Nj4gIjxVMzEzOT48VTMxNTY+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUllFTkgKKzxVQjg0Nz4gIjxVMzEzOT48VTMxNTY+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUllFRAorPFVCODQ4PiAiPFUzMTM5PjxVMzE1Nj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUVMCis8VUI4NDk+ICI8VTMxMzk+PFUzMTU2PjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFJZRUxHCis8VUI4NEE+ICI8VTMxMzk+PFUzMTU2PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFJZRUxNCis8VUI4NEI+ICI8VTMxMzk+PFUzMTU2PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFJZRUxCCis8VUI4NEM+ICI8VTMxMzk+PFUzMTU2PjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFJZRUxTCis8VUI4NEQ+ICI8VTMxMzk+PFUzMTU2PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFJZRUxUCis8VUI4NEU+ICI8VTMxMzk+PFUzMTU2PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFJZRUxQCis8VUI4NEY+ICI8VTMxMzk+PFUzMTU2PjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFJZRUxICis8VUI4NTA+ICI8VTMxMzk+PFUzMTU2PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFJZRU0KKzxVQjg1MT4gIjxVMzEzOT48VTMxNTY+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllFQgorPFVCODUyPiAiPFUzMTM5PjxVMzE1Nj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUVCUworPFVCODUzPiAiPFUzMTM5PjxVMzE1Nj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUVTCis8VUI4NTQ+ICI8VTMxMzk+PFUzMTU2PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFJZRVNTCis8VUI4NTU+ICI8VTMxMzk+PFUzMTU2PjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFJZRU5HCis8VUI4NTY+ICI8VTMxMzk+PFUzMTU2PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFJZRUoKKzxVQjg1Nz4gIjxVMzEzOT48VTMxNTY+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllFQworPFVCODU4PiAiPFUzMTM5PjxVMzE1Nj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUVLCis8VUI4NTk+ICI8VTMxMzk+PFUzMTU2PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFJZRVQKKzxVQjg1QT4gIjxVMzEzOT48VTMxNTY+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllFUAorPFVCODVCPiAiPFUzMTM5PjxVMzE1Nj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUVICis8VUI4NUM+ICI8VTMxMzk+PFUzMTU3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUk8KKzxVQjg1RD4gIjxVMzEzOT48VTMxNTc+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9HCis8VUI4NUU+ICI8VTMxMzk+PFUzMTU3PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFJPR0cKKzxVQjg1Rj4gIjxVMzEzOT48VTMxNTc+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9HUworPFVCODYwPiAiPFUzMTM5PjxVMzE1Nz48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBST04KKzxVQjg2MT4gIjxVMzEzOT48VTMxNTc+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9OSQorPFVCODYyPiAiPFUzMTM5PjxVMzE1Nz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBST05ICis8VUI4NjM+ICI8VTMxMzk+PFUzMTU3PjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFJPRAorPFVCODY0PiAiPFUzMTM5PjxVMzE1Nz48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBST0wKKzxVQjg2NT4gIjxVMzEzOT48VTMxNTc+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9MRworPFVCODY2PiAiPFUzMTM5PjxVMzE1Nz48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBST0xNCis8VUI4Njc+ICI8VTMxMzk+PFUzMTU3PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFJPTEIKKzxVQjg2OD4gIjxVMzEzOT48VTMxNTc+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9MUworPFVCODY5PiAiPFUzMTM5PjxVMzE1Nz48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBST0xUCis8VUI4NkE+ICI8VTMxMzk+PFUzMTU3PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFJPTFAKKzxVQjg2Qj4gIjxVMzEzOT48VTMxNTc+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9MSAorPFVCODZDPiAiPFUzMTM5PjxVMzE1Nz48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBST00KKzxVQjg2RD4gIjxVMzEzOT48VTMxNTc+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9CCis8VUI4NkU+ICI8VTMxMzk+PFUzMTU3PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFJPQlMKKzxVQjg2Rj4gIjxVMzEzOT48VTMxNTc+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9TCis8VUI4NzA+ICI8VTMxMzk+PFUzMTU3PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFJPU1MKKzxVQjg3MT4gIjxVMzEzOT48VTMxNTc+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9ORworPFVCODcyPiAiPFUzMTM5PjxVMzE1Nz48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBST0oKKzxVQjg3Mz4gIjxVMzEzOT48VTMxNTc+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9DCis8VUI4NzQ+ICI8VTMxMzk+PFUzMTU3PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFJPSworPFVCODc1PiAiPFUzMTM5PjxVMzE1Nz48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBST1QKKzxVQjg3Nj4gIjxVMzEzOT48VTMxNTc+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9QCis8VUI4Nzc+ICI8VTMxMzk+PFUzMTU3PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFJPSAorPFVCODc4PiAiPFUzMTM5PjxVMzE1OD4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQQorPFVCODc5PiAiPFUzMTM5PjxVMzE1OD48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0FHCis8VUI4N0E+ICI8VTMxMzk+PFUzMTU4PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQUdHCis8VUI4N0I+ICI8VTMxMzk+PFUzMTU4PjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQUdTCis8VUI4N0M+ICI8VTMxMzk+PFUzMTU4PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQU4KKzxVQjg3RD4gIjxVMzEzOT48VTMxNTg+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUldBTkkKKzxVQjg3RT4gIjxVMzEzOT48VTMxNTg+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUldBTkgKKzxVQjg3Rj4gIjxVMzEzOT48VTMxNTg+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUldBRAorPFVCODgwPiAiPFUzMTM5PjxVMzE1OD48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0FMCis8VUI4ODE+ICI8VTMxMzk+PFUzMTU4PjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQUxHCis8VUI4ODI+ICI8VTMxMzk+PFUzMTU4PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQUxNCis8VUI4ODM+ICI8VTMxMzk+PFUzMTU4PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQUxCCis8VUI4ODQ+ICI8VTMxMzk+PFUzMTU4PjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQUxTCis8VUI4ODU+ICI8VTMxMzk+PFUzMTU4PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQUxUCis8VUI4ODY+ICI8VTMxMzk+PFUzMTU4PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQUxQCis8VUI4ODc+ICI8VTMxMzk+PFUzMTU4PjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQUxICis8VUI4ODg+ICI8VTMxMzk+PFUzMTU4PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQU0KKzxVQjg4OT4gIjxVMzEzOT48VTMxNTg+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUldBQgorPFVCODhBPiAiPFUzMTM5PjxVMzE1OD48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0FCUworPFVCODhCPiAiPFUzMTM5PjxVMzE1OD48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0FTCis8VUI4OEM+ICI8VTMxMzk+PFUzMTU4PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQVNTCis8VUI4OEQ+ICI8VTMxMzk+PFUzMTU4PjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQU5HCis8VUI4OEU+ICI8VTMxMzk+PFUzMTU4PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQUoKKzxVQjg4Rj4gIjxVMzEzOT48VTMxNTg+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUldBQworPFVCODkwPiAiPFUzMTM5PjxVMzE1OD48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0FLCis8VUI4OTE+ICI8VTMxMzk+PFUzMTU4PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQVQKKzxVQjg5Mj4gIjxVMzEzOT48VTMxNTg+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgUldBUAorPFVCODkzPiAiPFUzMTM5PjxVMzE1OD48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0FICis8VUI4OTQ+ICI8VTMxMzk+PFUzMTU5PiIJJSBIQU5HVUwgU1lMTEFCTEUgUldBRQorPFVCODk1PiAiPFUzMTM5PjxVMzE1OT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0FFRworPFVCODk2PiAiPFUzMTM5PjxVMzE1OT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0FFR0cKKzxVQjg5Nz4gIjxVMzEzOT48VTMxNTk+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgUldBRUdTCis8VUI4OTg+ICI8VTMxMzk+PFUzMTU5PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQUVOCis8VUI4OTk+ICI8VTMxMzk+PFUzMTU5PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQUVOSQorPFVCODlBPiAiPFUzMTM5PjxVMzE1OT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0FFTkgKKzxVQjg5Qj4gIjxVMzEzOT48VTMxNTk+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUldBRUQKKzxVQjg5Qz4gIjxVMzEzOT48VTMxNTk+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgUldBRUwKKzxVQjg5RD4gIjxVMzEzOT48VTMxNTk+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUldBRUxHCis8VUI4OUU+ICI8VTMxMzk+PFUzMTU5PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQUVMTQorPFVCODlGPiAiPFUzMTM5PjxVMzE1OT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0FFTEIKKzxVQjhBMD4gIjxVMzEzOT48VTMxNTk+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgUldBRUxTCis8VUI4QTE+ICI8VTMxMzk+PFUzMTU5PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQUVMVAorPFVCOEEyPiAiPFUzMTM5PjxVMzE1OT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0FFTFAKKzxVQjhBMz4gIjxVMzEzOT48VTMxNTk+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgUldBRUxICis8VUI4QTQ+ICI8VTMxMzk+PFUzMTU5PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQUVNCis8VUI4QTU+ICI8VTMxMzk+PFUzMTU5PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQUVCCis8VUI4QTY+ICI8VTMxMzk+PFUzMTU5PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQUVCUworPFVCOEE3PiAiPFUzMTM5PjxVMzE1OT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0FFUworPFVCOEE4PiAiPFUzMTM5PjxVMzE1OT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0FFU1MKKzxVQjhBOT4gIjxVMzEzOT48VTMxNTk+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUldBRU5HCis8VUI4QUE+ICI8VTMxMzk+PFUzMTU5PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQUVKCis8VUI4QUI+ICI8VTMxMzk+PFUzMTU5PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQUVDCis8VUI4QUM+ICI8VTMxMzk+PFUzMTU5PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQUVLCis8VUI4QUQ+ICI8VTMxMzk+PFUzMTU5PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQUVUCis8VUI4QUU+ICI8VTMxMzk+PFUzMTU5PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQUVQCis8VUI4QUY+ICI8VTMxMzk+PFUzMTU5PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFJXQUVICis8VUI4QjA+ICI8VTMxMzk+PFUzMTVBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9FCis8VUI4QjE+ICI8VTMxMzk+PFUzMTVBPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFJPRUcKKzxVQjhCMj4gIjxVMzEzOT48VTMxNUE+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9FR0cKKzxVQjhCMz4gIjxVMzEzOT48VTMxNUE+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9FR1MKKzxVQjhCND4gIjxVMzEzOT48VTMxNUE+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9FTgorPFVCOEI1PiAiPFUzMTM5PjxVMzE1QT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBST0VOSQorPFVCOEI2PiAiPFUzMTM5PjxVMzE1QT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBST0VOSAorPFVCOEI3PiAiPFUzMTM5PjxVMzE1QT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBST0VECis8VUI4Qjg+ICI8VTMxMzk+PFUzMTVBPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFJPRUwKKzxVQjhCOT4gIjxVMzEzOT48VTMxNUE+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9FTEcKKzxVQjhCQT4gIjxVMzEzOT48VTMxNUE+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9FTE0KKzxVQjhCQj4gIjxVMzEzOT48VTMxNUE+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9FTEIKKzxVQjhCQz4gIjxVMzEzOT48VTMxNUE+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9FTFMKKzxVQjhCRD4gIjxVMzEzOT48VTMxNUE+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9FTFQKKzxVQjhCRT4gIjxVMzEzOT48VTMxNUE+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9FTFAKKzxVQjhCRj4gIjxVMzEzOT48VTMxNUE+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9FTEgKKzxVQjhDMD4gIjxVMzEzOT48VTMxNUE+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9FTQorPFVCOEMxPiAiPFUzMTM5PjxVMzE1QT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBST0VCCis8VUI4QzI+ICI8VTMxMzk+PFUzMTVBPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFJPRUJTCis8VUI4QzM+ICI8VTMxMzk+PFUzMTVBPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFJPRVMKKzxVQjhDND4gIjxVMzEzOT48VTMxNUE+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9FU1MKKzxVQjhDNT4gIjxVMzEzOT48VTMxNUE+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9FTkcKKzxVQjhDNj4gIjxVMzEzOT48VTMxNUE+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9FSgorPFVCOEM3PiAiPFUzMTM5PjxVMzE1QT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBST0VDCis8VUI4Qzg+ICI8VTMxMzk+PFUzMTVBPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFJPRUsKKzxVQjhDOT4gIjxVMzEzOT48VTMxNUE+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgUk9FVAorPFVCOENBPiAiPFUzMTM5PjxVMzE1QT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBST0VQCis8VUI4Q0I+ICI8VTMxMzk+PFUzMTVBPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFJPRUgKKzxVQjhDQz4gIjxVMzEzOT48VTMxNUI+IgklIEhBTkdVTCBTWUxMQUJMRSBSWU8KKzxVQjhDRD4gIjxVMzEzOT48VTMxNUI+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllPRworPFVCOENFPiAiPFUzMTM5PjxVMzE1Qj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBSWU9HRworPFVCOENGPiAiPFUzMTM5PjxVMzE1Qj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBSWU9HUworPFVCOEQwPiAiPFUzMTM5PjxVMzE1Qj48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBSWU9OCis8VUI4RDE+ICI8VTMxMzk+PFUzMTVCPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFJZT05JCis8VUI4RDI+ICI8VTMxMzk+PFUzMTVCPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFJZT05ICis8VUI4RDM+ICI8VTMxMzk+PFUzMTVCPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFJZT0QKKzxVQjhEND4gIjxVMzEzOT48VTMxNUI+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgUllPTAorPFVCOEQ1PiAiPFUzMTM5PjxVMzE1Qj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBSWU9MRworPFVCOEQ2PiAiPFUzMTM5PjxVMzE1Qj48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBSWU9MTQorPFVCOEQ3PiAiPFUzMTM5PjxVMzE1Qj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBSWU9MQgorPFVCOEQ4PiAiPFUzMTM5PjxVMzE1Qj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBSWU9MUworPFVCOEQ5PiAiPFUzMTM5PjxVMzE1Qj48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBSWU9MVAorPFVCOERBPiAiPFUzMTM5PjxVMzE1Qj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBSWU9MUAorPFVCOERCPiAiPFUzMTM5PjxVMzE1Qj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBSWU9MSAorPFVCOERDPiAiPFUzMTM5PjxVMzE1Qj48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBSWU9NCis8VUI4REQ+ICI8VTMxMzk+PFUzMTVCPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFJZT0IKKzxVQjhERT4gIjxVMzEzOT48VTMxNUI+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgUllPQlMKKzxVQjhERj4gIjxVMzEzOT48VTMxNUI+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUllPUworPFVCOEUwPiAiPFUzMTM5PjxVMzE1Qj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBSWU9TUworPFVCOEUxPiAiPFUzMTM5PjxVMzE1Qj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBSWU9ORworPFVCOEUyPiAiPFUzMTM5PjxVMzE1Qj48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBSWU9KCis8VUI4RTM+ICI8VTMxMzk+PFUzMTVCPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFJZT0MKKzxVQjhFND4gIjxVMzEzOT48VTMxNUI+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllPSworPFVCOEU1PiAiPFUzMTM5PjxVMzE1Qj48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBSWU9UCis8VUI4RTY+ICI8VTMxMzk+PFUzMTVCPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFJZT1AKKzxVQjhFNz4gIjxVMzEzOT48VTMxNUI+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllPSAorPFVCOEU4PiAiPFUzMTM5PjxVMzE1Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFJVCis8VUI4RTk+ICI8VTMxMzk+PFUzMTVDPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFJVRworPFVCOEVBPiAiPFUzMTM5PjxVMzE1Qz48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBSVUdHCis8VUI4RUI+ICI8VTMxMzk+PFUzMTVDPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFJVR1MKKzxVQjhFQz4gIjxVMzEzOT48VTMxNUM+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgUlVOCis8VUI4RUQ+ICI8VTMxMzk+PFUzMTVDPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFJVTkkKKzxVQjhFRT4gIjxVMzEzOT48VTMxNUM+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUlVOSAorPFVCOEVGPiAiPFUzMTM5PjxVMzE1Qz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBSVUQKKzxVQjhGMD4gIjxVMzEzOT48VTMxNUM+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgUlVMCis8VUI4RjE+ICI8VTMxMzk+PFUzMTVDPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFJVTEcKKzxVQjhGMj4gIjxVMzEzOT48VTMxNUM+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgUlVMTQorPFVCOEYzPiAiPFUzMTM5PjxVMzE1Qz48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBSVUxCCis8VUI4RjQ+ICI8VTMxMzk+PFUzMTVDPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFJVTFMKKzxVQjhGNT4gIjxVMzEzOT48VTMxNUM+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgUlVMVAorPFVCOEY2PiAiPFUzMTM5PjxVMzE1Qz48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBSVUxQCis8VUI4Rjc+ICI8VTMxMzk+PFUzMTVDPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFJVTEgKKzxVQjhGOD4gIjxVMzEzOT48VTMxNUM+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUlVNCis8VUI4Rjk+ICI8VTMxMzk+PFUzMTVDPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFJVQgorPFVCOEZBPiAiPFUzMTM5PjxVMzE1Qz48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBSVUJTCis8VUI4RkI+ICI8VTMxMzk+PFUzMTVDPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFJVUworPFVCOEZDPiAiPFUzMTM5PjxVMzE1Qz48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBSVVNTCis8VUI4RkQ+ICI8VTMxMzk+PFUzMTVDPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFJVTkcKKzxVQjhGRT4gIjxVMzEzOT48VTMxNUM+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgUlVKCis8VUI4RkY+ICI8VTMxMzk+PFUzMTVDPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFJVQworPFVCOTAwPiAiPFUzMTM5PjxVMzE1Qz48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBSVUsKKzxVQjkwMT4gIjxVMzEzOT48VTMxNUM+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgUlVUCis8VUI5MDI+ICI8VTMxMzk+PFUzMTVDPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFJVUAorPFVCOTAzPiAiPFUzMTM5PjxVMzE1Qz48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBSVUgKKzxVQjkwND4gIjxVMzEzOT48VTMxNUQ+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0VPCis8VUI5MDU+ICI8VTMxMzk+PFUzMTVEPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFJXRU9HCis8VUI5MDY+ICI8VTMxMzk+PFUzMTVEPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFJXRU9HRworPFVCOTA3PiAiPFUzMTM5PjxVMzE1RD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0VPR1MKKzxVQjkwOD4gIjxVMzEzOT48VTMxNUQ+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgUldFT04KKzxVQjkwOT4gIjxVMzEzOT48VTMxNUQ+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUldFT05JCis8VUI5MEE+ICI8VTMxMzk+PFUzMTVEPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFJXRU9OSAorPFVCOTBCPiAiPFUzMTM5PjxVMzE1RD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0VPRAorPFVCOTBDPiAiPFUzMTM5PjxVMzE1RD48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0VPTAorPFVCOTBEPiAiPFUzMTM5PjxVMzE1RD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0VPTEcKKzxVQjkwRT4gIjxVMzEzOT48VTMxNUQ+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgUldFT0xNCis8VUI5MEY+ICI8VTMxMzk+PFUzMTVEPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFJXRU9MQgorPFVCOTEwPiAiPFUzMTM5PjxVMzE1RD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0VPTFMKKzxVQjkxMT4gIjxVMzEzOT48VTMxNUQ+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgUldFT0xUCis8VUI5MTI+ICI8VTMxMzk+PFUzMTVEPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFJXRU9MUAorPFVCOTEzPiAiPFUzMTM5PjxVMzE1RD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0VPTEgKKzxVQjkxND4gIjxVMzEzOT48VTMxNUQ+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUldFT00KKzxVQjkxNT4gIjxVMzEzOT48VTMxNUQ+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUldFT0IKKzxVQjkxNj4gIjxVMzEzOT48VTMxNUQ+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgUldFT0JTCis8VUI5MTc+ICI8VTMxMzk+PFUzMTVEPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFJXRU9TCis8VUI5MTg+ICI8VTMxMzk+PFUzMTVEPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFJXRU9TUworPFVCOTE5PiAiPFUzMTM5PjxVMzE1RD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0VPTkcKKzxVQjkxQT4gIjxVMzEzOT48VTMxNUQ+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgUldFT0oKKzxVQjkxQj4gIjxVMzEzOT48VTMxNUQ+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUldFT0MKKzxVQjkxQz4gIjxVMzEzOT48VTMxNUQ+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgUldFT0sKKzxVQjkxRD4gIjxVMzEzOT48VTMxNUQ+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgUldFT1QKKzxVQjkxRT4gIjxVMzEzOT48VTMxNUQ+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgUldFT1AKKzxVQjkxRj4gIjxVMzEzOT48VTMxNUQ+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgUldFT0gKKzxVQjkyMD4gIjxVMzEzOT48VTMxNUU+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0UKKzxVQjkyMT4gIjxVMzEzOT48VTMxNUU+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUldFRworPFVCOTIyPiAiPFUzMTM5PjxVMzE1RT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0VHRworPFVCOTIzPiAiPFUzMTM5PjxVMzE1RT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0VHUworPFVCOTI0PiAiPFUzMTM5PjxVMzE1RT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0VOCis8VUI5MjU+ICI8VTMxMzk+PFUzMTVFPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFJXRU5JCis8VUI5MjY+ICI8VTMxMzk+PFUzMTVFPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFJXRU5ICis8VUI5Mjc+ICI8VTMxMzk+PFUzMTVFPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFJXRUQKKzxVQjkyOD4gIjxVMzEzOT48VTMxNUU+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgUldFTAorPFVCOTI5PiAiPFUzMTM5PjxVMzE1RT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0VMRworPFVCOTJBPiAiPFUzMTM5PjxVMzE1RT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0VMTQorPFVCOTJCPiAiPFUzMTM5PjxVMzE1RT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0VMQgorPFVCOTJDPiAiPFUzMTM5PjxVMzE1RT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0VMUworPFVCOTJEPiAiPFUzMTM5PjxVMzE1RT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0VMVAorPFVCOTJFPiAiPFUzMTM5PjxVMzE1RT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0VMUAorPFVCOTJGPiAiPFUzMTM5PjxVMzE1RT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0VMSAorPFVCOTMwPiAiPFUzMTM5PjxVMzE1RT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0VNCis8VUI5MzE+ICI8VTMxMzk+PFUzMTVFPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFJXRUIKKzxVQjkzMj4gIjxVMzEzOT48VTMxNUU+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgUldFQlMKKzxVQjkzMz4gIjxVMzEzOT48VTMxNUU+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUldFUworPFVCOTM0PiAiPFUzMTM5PjxVMzE1RT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0VTUworPFVCOTM1PiAiPFUzMTM5PjxVMzE1RT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0VORworPFVCOTM2PiAiPFUzMTM5PjxVMzE1RT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0VKCis8VUI5Mzc+ICI8VTMxMzk+PFUzMTVFPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFJXRUMKKzxVQjkzOD4gIjxVMzEzOT48VTMxNUU+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgUldFSworPFVCOTM5PiAiPFUzMTM5PjxVMzE1RT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0VUCis8VUI5M0E+ICI8VTMxMzk+PFUzMTVFPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFJXRVAKKzxVQjkzQj4gIjxVMzEzOT48VTMxNUU+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgUldFSAorPFVCOTNDPiAiPFUzMTM5PjxVMzE1Rj4iCSUgSEFOR1VMIFNZTExBQkxFIFJXSQorPFVCOTNEPiAiPFUzMTM5PjxVMzE1Rj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0lHCis8VUI5M0U+ICI8VTMxMzk+PFUzMTVGPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFJXSUdHCis8VUI5M0Y+ICI8VTMxMzk+PFUzMTVGPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFJXSUdTCis8VUI5NDA+ICI8VTMxMzk+PFUzMTVGPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFJXSU4KKzxVQjk0MT4gIjxVMzEzOT48VTMxNUY+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUldJTkkKKzxVQjk0Mj4gIjxVMzEzOT48VTMxNUY+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUldJTkgKKzxVQjk0Mz4gIjxVMzEzOT48VTMxNUY+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUldJRAorPFVCOTQ0PiAiPFUzMTM5PjxVMzE1Rj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0lMCis8VUI5NDU+ICI8VTMxMzk+PFUzMTVGPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFJXSUxHCis8VUI5NDY+ICI8VTMxMzk+PFUzMTVGPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFJXSUxNCis8VUI5NDc+ICI8VTMxMzk+PFUzMTVGPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFJXSUxCCis8VUI5NDg+ICI8VTMxMzk+PFUzMTVGPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFJXSUxTCis8VUI5NDk+ICI8VTMxMzk+PFUzMTVGPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFJXSUxUCis8VUI5NEE+ICI8VTMxMzk+PFUzMTVGPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFJXSUxQCis8VUI5NEI+ICI8VTMxMzk+PFUzMTVGPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFJXSUxICis8VUI5NEM+ICI8VTMxMzk+PFUzMTVGPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFJXSU0KKzxVQjk0RD4gIjxVMzEzOT48VTMxNUY+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUldJQgorPFVCOTRFPiAiPFUzMTM5PjxVMzE1Rj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0lCUworPFVCOTRGPiAiPFUzMTM5PjxVMzE1Rj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0lTCis8VUI5NTA+ICI8VTMxMzk+PFUzMTVGPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFJXSVNTCis8VUI5NTE+ICI8VTMxMzk+PFUzMTVGPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFJXSU5HCis8VUI5NTI+ICI8VTMxMzk+PFUzMTVGPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFJXSUoKKzxVQjk1Mz4gIjxVMzEzOT48VTMxNUY+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUldJQworPFVCOTU0PiAiPFUzMTM5PjxVMzE1Rj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0lLCis8VUI5NTU+ICI8VTMxMzk+PFUzMTVGPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFJXSVQKKzxVQjk1Nj4gIjxVMzEzOT48VTMxNUY+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgUldJUAorPFVCOTU3PiAiPFUzMTM5PjxVMzE1Rj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBSV0lICis8VUI5NTg+ICI8VTMxMzk+PFUzMTYwPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllVCis8VUI5NTk+ICI8VTMxMzk+PFUzMTYwPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFJZVUcKKzxVQjk1QT4gIjxVMzEzOT48VTMxNjA+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllVR0cKKzxVQjk1Qj4gIjxVMzEzOT48VTMxNjA+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllVR1MKKzxVQjk1Qz4gIjxVMzEzOT48VTMxNjA+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgUllVTgorPFVCOTVEPiAiPFUzMTM5PjxVMzE2MD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBSWVVOSQorPFVCOTVFPiAiPFUzMTM5PjxVMzE2MD48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBSWVVOSAorPFVCOTVGPiAiPFUzMTM5PjxVMzE2MD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBSWVVECis8VUI5NjA+ICI8VTMxMzk+PFUzMTYwPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFJZVUwKKzxVQjk2MT4gIjxVMzEzOT48VTMxNjA+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllVTEcKKzxVQjk2Mj4gIjxVMzEzOT48VTMxNjA+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllVTE0KKzxVQjk2Mz4gIjxVMzEzOT48VTMxNjA+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllVTEIKKzxVQjk2ND4gIjxVMzEzOT48VTMxNjA+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllVTFMKKzxVQjk2NT4gIjxVMzEzOT48VTMxNjA+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllVTFQKKzxVQjk2Nj4gIjxVMzEzOT48VTMxNjA+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllVTFAKKzxVQjk2Nz4gIjxVMzEzOT48VTMxNjA+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllVTEgKKzxVQjk2OD4gIjxVMzEzOT48VTMxNjA+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllVTQorPFVCOTY5PiAiPFUzMTM5PjxVMzE2MD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBSWVVCCis8VUI5NkE+ICI8VTMxMzk+PFUzMTYwPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFJZVUJTCis8VUI5NkI+ICI8VTMxMzk+PFUzMTYwPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFJZVVMKKzxVQjk2Qz4gIjxVMzEzOT48VTMxNjA+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUllVU1MKKzxVQjk2RD4gIjxVMzEzOT48VTMxNjA+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUllVTkcKKzxVQjk2RT4gIjxVMzEzOT48VTMxNjA+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgUllVSgorPFVCOTZGPiAiPFUzMTM5PjxVMzE2MD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBSWVVDCis8VUI5NzA+ICI8VTMxMzk+PFUzMTYwPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFJZVUsKKzxVQjk3MT4gIjxVMzEzOT48VTMxNjA+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllVVAorPFVCOTcyPiAiPFUzMTM5PjxVMzE2MD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBSWVVQCis8VUI5NzM+ICI8VTMxMzk+PFUzMTYwPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFJZVUgKKzxVQjk3ND4gIjxVMzEzOT48VTMxNjE+IgklIEhBTkdVTCBTWUxMQUJMRSBSRVUKKzxVQjk3NT4gIjxVMzEzOT48VTMxNjE+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkVVRworPFVCOTc2PiAiPFUzMTM5PjxVMzE2MT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBSRVVHRworPFVCOTc3PiAiPFUzMTM5PjxVMzE2MT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBSRVVHUworPFVCOTc4PiAiPFUzMTM5PjxVMzE2MT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBSRVVOCis8VUI5Nzk+ICI8VTMxMzk+PFUzMTYxPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFJFVU5JCis8VUI5N0E+ICI8VTMxMzk+PFUzMTYxPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFJFVU5ICis8VUI5N0I+ICI8VTMxMzk+PFUzMTYxPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFJFVUQKKzxVQjk3Qz4gIjxVMzEzOT48VTMxNjE+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgUkVVTAorPFVCOTdEPiAiPFUzMTM5PjxVMzE2MT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBSRVVMRworPFVCOTdFPiAiPFUzMTM5PjxVMzE2MT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBSRVVMTQorPFVCOTdGPiAiPFUzMTM5PjxVMzE2MT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBSRVVMQgorPFVCOTgwPiAiPFUzMTM5PjxVMzE2MT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBSRVVMUworPFVCOTgxPiAiPFUzMTM5PjxVMzE2MT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBSRVVMVAorPFVCOTgyPiAiPFUzMTM5PjxVMzE2MT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBSRVVMUAorPFVCOTgzPiAiPFUzMTM5PjxVMzE2MT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBSRVVMSAorPFVCOTg0PiAiPFUzMTM5PjxVMzE2MT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBSRVVNCis8VUI5ODU+ICI8VTMxMzk+PFUzMTYxPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFJFVUIKKzxVQjk4Nj4gIjxVMzEzOT48VTMxNjE+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgUkVVQlMKKzxVQjk4Nz4gIjxVMzEzOT48VTMxNjE+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUkVVUworPFVCOTg4PiAiPFUzMTM5PjxVMzE2MT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBSRVVTUworPFVCOTg5PiAiPFUzMTM5PjxVMzE2MT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBSRVVORworPFVCOThBPiAiPFUzMTM5PjxVMzE2MT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBSRVVKCis8VUI5OEI+ICI8VTMxMzk+PFUzMTYxPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFJFVUMKKzxVQjk4Qz4gIjxVMzEzOT48VTMxNjE+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkVVSworPFVCOThEPiAiPFUzMTM5PjxVMzE2MT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBSRVVUCis8VUI5OEU+ICI8VTMxMzk+PFUzMTYxPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFJFVVAKKzxVQjk4Rj4gIjxVMzEzOT48VTMxNjE+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkVVSAorPFVCOTkwPiAiPFUzMTM5PjxVMzE2Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFJZSQorPFVCOTkxPiAiPFUzMTM5PjxVMzE2Mj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUlHCis8VUI5OTI+ICI8VTMxMzk+PFUzMTYyPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFJZSUdHCis8VUI5OTM+ICI8VTMxMzk+PFUzMTYyPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFJZSUdTCis8VUI5OTQ+ICI8VTMxMzk+PFUzMTYyPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFJZSU4KKzxVQjk5NT4gIjxVMzEzOT48VTMxNjI+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUllJTkkKKzxVQjk5Nj4gIjxVMzEzOT48VTMxNjI+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUllJTkgKKzxVQjk5Nz4gIjxVMzEzOT48VTMxNjI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUllJRAorPFVCOTk4PiAiPFUzMTM5PjxVMzE2Mj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUlMCis8VUI5OTk+ICI8VTMxMzk+PFUzMTYyPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFJZSUxHCis8VUI5OUE+ICI8VTMxMzk+PFUzMTYyPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFJZSUxNCis8VUI5OUI+ICI8VTMxMzk+PFUzMTYyPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFJZSUxCCis8VUI5OUM+ICI8VTMxMzk+PFUzMTYyPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFJZSUxTCis8VUI5OUQ+ICI8VTMxMzk+PFUzMTYyPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFJZSUxUCis8VUI5OUU+ICI8VTMxMzk+PFUzMTYyPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFJZSUxQCis8VUI5OUY+ICI8VTMxMzk+PFUzMTYyPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFJZSUxICis8VUI5QTA+ICI8VTMxMzk+PFUzMTYyPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFJZSU0KKzxVQjlBMT4gIjxVMzEzOT48VTMxNjI+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllJQgorPFVCOUEyPiAiPFUzMTM5PjxVMzE2Mj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUlCUworPFVCOUEzPiAiPFUzMTM5PjxVMzE2Mj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUlTCis8VUI5QTQ+ICI8VTMxMzk+PFUzMTYyPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFJZSVNTCis8VUI5QTU+ICI8VTMxMzk+PFUzMTYyPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFJZSU5HCis8VUI5QTY+ICI8VTMxMzk+PFUzMTYyPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFJZSUoKKzxVQjlBNz4gIjxVMzEzOT48VTMxNjI+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllJQworPFVCOUE4PiAiPFUzMTM5PjxVMzE2Mj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUlLCis8VUI5QTk+ICI8VTMxMzk+PFUzMTYyPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFJZSVQKKzxVQjlBQT4gIjxVMzEzOT48VTMxNjI+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgUllJUAorPFVCOUFCPiAiPFUzMTM5PjxVMzE2Mj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBSWUlICis8VUI5QUM+ICI8VTMxMzk+PFUzMTYzPiIJJSBIQU5HVUwgU1lMTEFCTEUgUkkKKzxVQjlBRD4gIjxVMzEzOT48VTMxNjM+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUklHCis8VUI5QUU+ICI8VTMxMzk+PFUzMTYzPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFJJR0cKKzxVQjlBRj4gIjxVMzEzOT48VTMxNjM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgUklHUworPFVCOUIwPiAiPFUzMTM5PjxVMzE2Mz48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBSSU4KKzxVQjlCMT4gIjxVMzEzOT48VTMxNjM+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUklOSQorPFVCOUIyPiAiPFUzMTM5PjxVMzE2Mz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBSSU5ICis8VUI5QjM+ICI8VTMxMzk+PFUzMTYzPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFJJRAorPFVCOUI0PiAiPFUzMTM5PjxVMzE2Mz48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBSSUwKKzxVQjlCNT4gIjxVMzEzOT48VTMxNjM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUklMRworPFVCOUI2PiAiPFUzMTM5PjxVMzE2Mz48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBSSUxNCis8VUI5Qjc+ICI8VTMxMzk+PFUzMTYzPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFJJTEIKKzxVQjlCOD4gIjxVMzEzOT48VTMxNjM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgUklMUworPFVCOUI5PiAiPFUzMTM5PjxVMzE2Mz48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBSSUxUCis8VUI5QkE+ICI8VTMxMzk+PFUzMTYzPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFJJTFAKKzxVQjlCQj4gIjxVMzEzOT48VTMxNjM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgUklMSAorPFVCOUJDPiAiPFUzMTM5PjxVMzE2Mz48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBSSU0KKzxVQjlCRD4gIjxVMzEzOT48VTMxNjM+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUklCCis8VUI5QkU+ICI8VTMxMzk+PFUzMTYzPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFJJQlMKKzxVQjlCRj4gIjxVMzEzOT48VTMxNjM+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUklTCis8VUI5QzA+ICI8VTMxMzk+PFUzMTYzPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFJJU1MKKzxVQjlDMT4gIjxVMzEzOT48VTMxNjM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUklORworPFVCOUMyPiAiPFUzMTM5PjxVMzE2Mz48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBSSUoKKzxVQjlDMz4gIjxVMzEzOT48VTMxNjM+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUklDCis8VUI5QzQ+ICI8VTMxMzk+PFUzMTYzPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFJJSworPFVCOUM1PiAiPFUzMTM5PjxVMzE2Mz48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBSSVQKKzxVQjlDNj4gIjxVMzEzOT48VTMxNjM+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgUklQCis8VUI5Qzc+ICI8VTMxMzk+PFUzMTYzPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFJJSAorPFVCOUM4PiAiPFUzMTQxPjxVMzE0Rj4iCSUgSEFOR1VMIFNZTExBQkxFIE1BCis8VUI5Qzk+ICI8VTMxNDE+PFUzMTRGPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIE1BRworPFVCOUNBPiAiPFUzMTQxPjxVMzE0Rj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBNQUdHCis8VUI5Q0I+ICI8VTMxNDE+PFUzMTRGPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIE1BR1MKKzxVQjlDQz4gIjxVMzE0MT48VTMxNEY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTUFOCis8VUI5Q0Q+ICI8VTMxNDE+PFUzMTRGPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIE1BTkkKKzxVQjlDRT4gIjxVMzE0MT48VTMxNEY+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTUFOSAorPFVCOUNGPiAiPFUzMTQxPjxVMzE0Rj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBNQUQKKzxVQjlEMD4gIjxVMzE0MT48VTMxNEY+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgTUFMCis8VUI5RDE+ICI8VTMxNDE+PFUzMTRGPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIE1BTEcKKzxVQjlEMj4gIjxVMzE0MT48VTMxNEY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUFMTQorPFVCOUQzPiAiPFUzMTQxPjxVMzE0Rj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBNQUxCCis8VUI5RDQ+ICI8VTMxNDE+PFUzMTRGPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIE1BTFMKKzxVQjlENT4gIjxVMzE0MT48VTMxNEY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUFMVAorPFVCOUQ2PiAiPFUzMTQxPjxVMzE0Rj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBNQUxQCis8VUI5RDc+ICI8VTMxNDE+PFUzMTRGPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIE1BTEgKKzxVQjlEOD4gIjxVMzE0MT48VTMxNEY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUFNCis8VUI5RDk+ICI8VTMxNDE+PFUzMTRGPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIE1BQgorPFVCOURBPiAiPFUzMTQxPjxVMzE0Rj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBNQUJTCis8VUI5REI+ICI8VTMxNDE+PFUzMTRGPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIE1BUworPFVCOURDPiAiPFUzMTQxPjxVMzE0Rj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBNQVNTCis8VUI5REQ+ICI8VTMxNDE+PFUzMTRGPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIE1BTkcKKzxVQjlERT4gIjxVMzE0MT48VTMxNEY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgTUFKCis8VUI5REY+ICI8VTMxNDE+PFUzMTRGPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIE1BQworPFVCOUUwPiAiPFUzMTQxPjxVMzE0Rj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBNQUsKKzxVQjlFMT4gIjxVMzE0MT48VTMxNEY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUFUCis8VUI5RTI+ICI8VTMxNDE+PFUzMTRGPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIE1BUAorPFVCOUUzPiAiPFUzMTQxPjxVMzE0Rj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBNQUgKKzxVQjlFND4gIjxVMzE0MT48VTMxNTA+IgklIEhBTkdVTCBTWUxMQUJMRSBNQUUKKzxVQjlFNT4gIjxVMzE0MT48VTMxNTA+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUFFRworPFVCOUU2PiAiPFUzMTQxPjxVMzE1MD48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBNQUVHRworPFVCOUU3PiAiPFUzMTQxPjxVMzE1MD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBNQUVHUworPFVCOUU4PiAiPFUzMTQxPjxVMzE1MD48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBNQUVOCis8VUI5RTk+ICI8VTMxNDE+PFUzMTUwPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIE1BRU5JCis8VUI5RUE+ICI8VTMxNDE+PFUzMTUwPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIE1BRU5ICis8VUI5RUI+ICI8VTMxNDE+PFUzMTUwPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIE1BRUQKKzxVQjlFQz4gIjxVMzE0MT48VTMxNTA+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgTUFFTAorPFVCOUVEPiAiPFUzMTQxPjxVMzE1MD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBNQUVMRworPFVCOUVFPiAiPFUzMTQxPjxVMzE1MD48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBNQUVMTQorPFVCOUVGPiAiPFUzMTQxPjxVMzE1MD48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBNQUVMQgorPFVCOUYwPiAiPFUzMTQxPjxVMzE1MD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBNQUVMUworPFVCOUYxPiAiPFUzMTQxPjxVMzE1MD48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBNQUVMVAorPFVCOUYyPiAiPFUzMTQxPjxVMzE1MD48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBNQUVMUAorPFVCOUYzPiAiPFUzMTQxPjxVMzE1MD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBNQUVMSAorPFVCOUY0PiAiPFUzMTQxPjxVMzE1MD48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBNQUVNCis8VUI5RjU+ICI8VTMxNDE+PFUzMTUwPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIE1BRUIKKzxVQjlGNj4gIjxVMzE0MT48VTMxNTA+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTUFFQlMKKzxVQjlGNz4gIjxVMzE0MT48VTMxNTA+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTUFFUworPFVCOUY4PiAiPFUzMTQxPjxVMzE1MD48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBNQUVTUworPFVCOUY5PiAiPFUzMTQxPjxVMzE1MD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBNQUVORworPFVCOUZBPiAiPFUzMTQxPjxVMzE1MD48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBNQUVKCis8VUI5RkI+ICI8VTMxNDE+PFUzMTUwPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIE1BRUMKKzxVQjlGQz4gIjxVMzE0MT48VTMxNTA+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUFFSworPFVCOUZEPiAiPFUzMTQxPjxVMzE1MD48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBNQUVUCis8VUI5RkU+ICI8VTMxNDE+PFUzMTUwPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIE1BRVAKKzxVQjlGRj4gIjxVMzE0MT48VTMxNTA+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUFFSAorPFVCQTAwPiAiPFUzMTQxPjxVMzE1MT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQQorPFVCQTAxPiAiPFUzMTQxPjxVMzE1MT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUFHCis8VUJBMDI+ICI8VTMxNDE+PFUzMTUxPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQUdHCis8VUJBMDM+ICI8VTMxNDE+PFUzMTUxPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQUdTCis8VUJBMDQ+ICI8VTMxNDE+PFUzMTUxPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQU4KKzxVQkEwNT4gIjxVMzE0MT48VTMxNTE+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlBTkkKKzxVQkEwNj4gIjxVMzE0MT48VTMxNTE+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlBTkgKKzxVQkEwNz4gIjxVMzE0MT48VTMxNTE+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlBRAorPFVCQTA4PiAiPFUzMTQxPjxVMzE1MT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUFMCis8VUJBMDk+ICI8VTMxNDE+PFUzMTUxPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQUxHCis8VUJBMEE+ICI8VTMxNDE+PFUzMTUxPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQUxNCis8VUJBMEI+ICI8VTMxNDE+PFUzMTUxPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQUxCCis8VUJBMEM+ICI8VTMxNDE+PFUzMTUxPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQUxTCis8VUJBMEQ+ICI8VTMxNDE+PFUzMTUxPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQUxUCis8VUJBMEU+ICI8VTMxNDE+PFUzMTUxPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQUxQCis8VUJBMEY+ICI8VTMxNDE+PFUzMTUxPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQUxICis8VUJBMTA+ICI8VTMxNDE+PFUzMTUxPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQU0KKzxVQkExMT4gIjxVMzE0MT48VTMxNTE+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlBQgorPFVCQTEyPiAiPFUzMTQxPjxVMzE1MT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUFCUworPFVCQTEzPiAiPFUzMTQxPjxVMzE1MT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUFTCis8VUJBMTQ+ICI8VTMxNDE+PFUzMTUxPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQVNTCis8VUJBMTU+ICI8VTMxNDE+PFUzMTUxPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQU5HCis8VUJBMTY+ICI8VTMxNDE+PFUzMTUxPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQUoKKzxVQkExNz4gIjxVMzE0MT48VTMxNTE+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlBQworPFVCQTE4PiAiPFUzMTQxPjxVMzE1MT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUFLCis8VUJBMTk+ICI8VTMxNDE+PFUzMTUxPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQVQKKzxVQkExQT4gIjxVMzE0MT48VTMxNTE+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlBUAorPFVCQTFCPiAiPFUzMTQxPjxVMzE1MT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUFICis8VUJBMUM+ICI8VTMxNDE+PFUzMTUyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlBRQorPFVCQTFEPiAiPFUzMTQxPjxVMzE1Mj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUFFRworPFVCQTFFPiAiPFUzMTQxPjxVMzE1Mj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUFFR0cKKzxVQkExRj4gIjxVMzE0MT48VTMxNTI+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlBRUdTCis8VUJBMjA+ICI8VTMxNDE+PFUzMTUyPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQUVOCis8VUJBMjE+ICI8VTMxNDE+PFUzMTUyPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQUVOSQorPFVCQTIyPiAiPFUzMTQxPjxVMzE1Mj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUFFTkgKKzxVQkEyMz4gIjxVMzE0MT48VTMxNTI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlBRUQKKzxVQkEyND4gIjxVMzE0MT48VTMxNTI+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlBRUwKKzxVQkEyNT4gIjxVMzE0MT48VTMxNTI+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlBRUxHCis8VUJBMjY+ICI8VTMxNDE+PFUzMTUyPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQUVMTQorPFVCQTI3PiAiPFUzMTQxPjxVMzE1Mj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUFFTEIKKzxVQkEyOD4gIjxVMzE0MT48VTMxNTI+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlBRUxTCis8VUJBMjk+ICI8VTMxNDE+PFUzMTUyPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQUVMVAorPFVCQTJBPiAiPFUzMTQxPjxVMzE1Mj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUFFTFAKKzxVQkEyQj4gIjxVMzE0MT48VTMxNTI+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlBRUxICis8VUJBMkM+ICI8VTMxNDE+PFUzMTUyPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQUVNCis8VUJBMkQ+ICI8VTMxNDE+PFUzMTUyPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQUVCCis8VUJBMkU+ICI8VTMxNDE+PFUzMTUyPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQUVCUworPFVCQTJGPiAiPFUzMTQxPjxVMzE1Mj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUFFUworPFVCQTMwPiAiPFUzMTQxPjxVMzE1Mj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUFFU1MKKzxVQkEzMT4gIjxVMzE0MT48VTMxNTI+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlBRU5HCis8VUJBMzI+ICI8VTMxNDE+PFUzMTUyPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQUVKCis8VUJBMzM+ICI8VTMxNDE+PFUzMTUyPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQUVDCis8VUJBMzQ+ICI8VTMxNDE+PFUzMTUyPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQUVLCis8VUJBMzU+ICI8VTMxNDE+PFUzMTUyPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQUVUCis8VUJBMzY+ICI8VTMxNDE+PFUzMTUyPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQUVQCis8VUJBMzc+ICI8VTMxNDE+PFUzMTUyPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZQUVICis8VUJBMzg+ICI8VTMxNDE+PFUzMTUzPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVPCis8VUJBMzk+ICI8VTMxNDE+PFUzMTUzPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIE1FT0cKKzxVQkEzQT4gIjxVMzE0MT48VTMxNTM+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVPR0cKKzxVQkEzQj4gIjxVMzE0MT48VTMxNTM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVPR1MKKzxVQkEzQz4gIjxVMzE0MT48VTMxNTM+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVPTgorPFVCQTNEPiAiPFUzMTQxPjxVMzE1Mz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBNRU9OSQorPFVCQTNFPiAiPFUzMTQxPjxVMzE1Mz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBNRU9OSAorPFVCQTNGPiAiPFUzMTQxPjxVMzE1Mz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBNRU9ECis8VUJBNDA+ICI8VTMxNDE+PFUzMTUzPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIE1FT0wKKzxVQkE0MT4gIjxVMzE0MT48VTMxNTM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVPTEcKKzxVQkE0Mj4gIjxVMzE0MT48VTMxNTM+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVPTE0KKzxVQkE0Mz4gIjxVMzE0MT48VTMxNTM+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVPTEIKKzxVQkE0ND4gIjxVMzE0MT48VTMxNTM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVPTFMKKzxVQkE0NT4gIjxVMzE0MT48VTMxNTM+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVPTFQKKzxVQkE0Nj4gIjxVMzE0MT48VTMxNTM+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVPTFAKKzxVQkE0Nz4gIjxVMzE0MT48VTMxNTM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVPTEgKKzxVQkE0OD4gIjxVMzE0MT48VTMxNTM+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVPTQorPFVCQTQ5PiAiPFUzMTQxPjxVMzE1Mz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBNRU9CCis8VUJBNEE+ICI8VTMxNDE+PFUzMTUzPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIE1FT0JTCis8VUJBNEI+ICI8VTMxNDE+PFUzMTUzPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIE1FT1MKKzxVQkE0Qz4gIjxVMzE0MT48VTMxNTM+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVPU1MKKzxVQkE0RD4gIjxVMzE0MT48VTMxNTM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVPTkcKKzxVQkE0RT4gIjxVMzE0MT48VTMxNTM+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVPSgorPFVCQTRGPiAiPFUzMTQxPjxVMzE1Mz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBNRU9DCis8VUJBNTA+ICI8VTMxNDE+PFUzMTUzPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIE1FT0sKKzxVQkE1MT4gIjxVMzE0MT48VTMxNTM+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVPVAorPFVCQTUyPiAiPFUzMTQxPjxVMzE1Mz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBNRU9QCis8VUJBNTM+ICI8VTMxNDE+PFUzMTUzPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIE1FT0gKKzxVQkE1ND4gIjxVMzE0MT48VTMxNTQ+IgklIEhBTkdVTCBTWUxMQUJMRSBNRQorPFVCQTU1PiAiPFUzMTQxPjxVMzE1ND48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBNRUcKKzxVQkE1Nj4gIjxVMzE0MT48VTMxNTQ+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVHRworPFVCQTU3PiAiPFUzMTQxPjxVMzE1ND48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBNRUdTCis8VUJBNTg+ICI8VTMxNDE+PFUzMTU0PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIE1FTgorPFVCQTU5PiAiPFUzMTQxPjxVMzE1ND48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBNRU5JCis8VUJBNUE+ICI8VTMxNDE+PFUzMTU0PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIE1FTkgKKzxVQkE1Qj4gIjxVMzE0MT48VTMxNTQ+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVECis8VUJBNUM+ICI8VTMxNDE+PFUzMTU0PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIE1FTAorPFVCQTVEPiAiPFUzMTQxPjxVMzE1ND48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBNRUxHCis8VUJBNUU+ICI8VTMxNDE+PFUzMTU0PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIE1FTE0KKzxVQkE1Rj4gIjxVMzE0MT48VTMxNTQ+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVMQgorPFVCQTYwPiAiPFUzMTQxPjxVMzE1ND48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBNRUxTCis8VUJBNjE+ICI8VTMxNDE+PFUzMTU0PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIE1FTFQKKzxVQkE2Mj4gIjxVMzE0MT48VTMxNTQ+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVMUAorPFVCQTYzPiAiPFUzMTQxPjxVMzE1ND48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBNRUxICis8VUJBNjQ+ICI8VTMxNDE+PFUzMTU0PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIE1FTQorPFVCQTY1PiAiPFUzMTQxPjxVMzE1ND48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBNRUIKKzxVQkE2Nj4gIjxVMzE0MT48VTMxNTQ+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVCUworPFVCQTY3PiAiPFUzMTQxPjxVMzE1ND48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBNRVMKKzxVQkE2OD4gIjxVMzE0MT48VTMxNTQ+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVTUworPFVCQTY5PiAiPFUzMTQxPjxVMzE1ND48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBNRU5HCis8VUJBNkE+ICI8VTMxNDE+PFUzMTU0PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIE1FSgorPFVCQTZCPiAiPFUzMTQxPjxVMzE1ND48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBNRUMKKzxVQkE2Qz4gIjxVMzE0MT48VTMxNTQ+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVLCis8VUJBNkQ+ICI8VTMxNDE+PFUzMTU0PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIE1FVAorPFVCQTZFPiAiPFUzMTQxPjxVMzE1ND48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBNRVAKKzxVQkE2Rj4gIjxVMzE0MT48VTMxNTQ+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVICis8VUJBNzA+ICI8VTMxNDE+PFUzMTU1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlFTworPFVCQTcxPiAiPFUzMTQxPjxVMzE1NT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUVPRworPFVCQTcyPiAiPFUzMTQxPjxVMzE1NT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUVPR0cKKzxVQkE3Mz4gIjxVMzE0MT48VTMxNTU+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlFT0dTCis8VUJBNzQ+ICI8VTMxNDE+PFUzMTU1PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZRU9OCis8VUJBNzU+ICI8VTMxNDE+PFUzMTU1PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZRU9OSQorPFVCQTc2PiAiPFUzMTQxPjxVMzE1NT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUVPTkgKKzxVQkE3Nz4gIjxVMzE0MT48VTMxNTU+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlFT0QKKzxVQkE3OD4gIjxVMzE0MT48VTMxNTU+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlFT0wKKzxVQkE3OT4gIjxVMzE0MT48VTMxNTU+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlFT0xHCis8VUJBN0E+ICI8VTMxNDE+PFUzMTU1PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZRU9MTQorPFVCQTdCPiAiPFUzMTQxPjxVMzE1NT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUVPTEIKKzxVQkE3Qz4gIjxVMzE0MT48VTMxNTU+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlFT0xTCis8VUJBN0Q+ICI8VTMxNDE+PFUzMTU1PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZRU9MVAorPFVCQTdFPiAiPFUzMTQxPjxVMzE1NT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUVPTFAKKzxVQkE3Rj4gIjxVMzE0MT48VTMxNTU+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlFT0xICis8VUJBODA+ICI8VTMxNDE+PFUzMTU1PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZRU9NCis8VUJBODE+ICI8VTMxNDE+PFUzMTU1PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZRU9CCis8VUJBODI+ICI8VTMxNDE+PFUzMTU1PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZRU9CUworPFVCQTgzPiAiPFUzMTQxPjxVMzE1NT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUVPUworPFVCQTg0PiAiPFUzMTQxPjxVMzE1NT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUVPU1MKKzxVQkE4NT4gIjxVMzE0MT48VTMxNTU+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlFT05HCis8VUJBODY+ICI8VTMxNDE+PFUzMTU1PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZRU9KCis8VUJBODc+ICI8VTMxNDE+PFUzMTU1PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZRU9DCis8VUJBODg+ICI8VTMxNDE+PFUzMTU1PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZRU9LCis8VUJBODk+ICI8VTMxNDE+PFUzMTU1PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZRU9UCis8VUJBOEE+ICI8VTMxNDE+PFUzMTU1PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZRU9QCis8VUJBOEI+ICI8VTMxNDE+PFUzMTU1PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZRU9ICis8VUJBOEM+ICI8VTMxNDE+PFUzMTU2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlFCis8VUJBOEQ+ICI8VTMxNDE+PFUzMTU2PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZRUcKKzxVQkE4RT4gIjxVMzE0MT48VTMxNTY+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlFR0cKKzxVQkE4Rj4gIjxVMzE0MT48VTMxNTY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlFR1MKKzxVQkE5MD4gIjxVMzE0MT48VTMxNTY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlFTgorPFVCQTkxPiAiPFUzMTQxPjxVMzE1Nj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUVOSQorPFVCQTkyPiAiPFUzMTQxPjxVMzE1Nj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUVOSAorPFVCQTkzPiAiPFUzMTQxPjxVMzE1Nj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUVECis8VUJBOTQ+ICI8VTMxNDE+PFUzMTU2PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZRUwKKzxVQkE5NT4gIjxVMzE0MT48VTMxNTY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlFTEcKKzxVQkE5Nj4gIjxVMzE0MT48VTMxNTY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlFTE0KKzxVQkE5Nz4gIjxVMzE0MT48VTMxNTY+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlFTEIKKzxVQkE5OD4gIjxVMzE0MT48VTMxNTY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlFTFMKKzxVQkE5OT4gIjxVMzE0MT48VTMxNTY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlFTFQKKzxVQkE5QT4gIjxVMzE0MT48VTMxNTY+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlFTFAKKzxVQkE5Qj4gIjxVMzE0MT48VTMxNTY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlFTEgKKzxVQkE5Qz4gIjxVMzE0MT48VTMxNTY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlFTQorPFVCQTlEPiAiPFUzMTQxPjxVMzE1Nj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUVCCis8VUJBOUU+ICI8VTMxNDE+PFUzMTU2PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZRUJTCis8VUJBOUY+ICI8VTMxNDE+PFUzMTU2PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZRVMKKzxVQkFBMD4gIjxVMzE0MT48VTMxNTY+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlFU1MKKzxVQkFBMT4gIjxVMzE0MT48VTMxNTY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlFTkcKKzxVQkFBMj4gIjxVMzE0MT48VTMxNTY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlFSgorPFVCQUEzPiAiPFUzMTQxPjxVMzE1Nj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUVDCis8VUJBQTQ+ICI8VTMxNDE+PFUzMTU2PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZRUsKKzxVQkFBNT4gIjxVMzE0MT48VTMxNTY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlFVAorPFVCQUE2PiAiPFUzMTQxPjxVMzE1Nj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUVQCis8VUJBQTc+ICI8VTMxNDE+PFUzMTU2PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZRUgKKzxVQkFBOD4gIjxVMzE0MT48VTMxNTc+IgklIEhBTkdVTCBTWUxMQUJMRSBNTworPFVCQUE5PiAiPFUzMTQxPjxVMzE1Nz48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBNT0cKKzxVQkFBQT4gIjxVMzE0MT48VTMxNTc+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTU9HRworPFVCQUFCPiAiPFUzMTQxPjxVMzE1Nz48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBNT0dTCis8VUJBQUM+ICI8VTMxNDE+PFUzMTU3PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIE1PTgorPFVCQUFEPiAiPFUzMTQxPjxVMzE1Nz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBNT05JCis8VUJBQUU+ICI8VTMxNDE+PFUzMTU3PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIE1PTkgKKzxVQkFBRj4gIjxVMzE0MT48VTMxNTc+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTU9ECis8VUJBQjA+ICI8VTMxNDE+PFUzMTU3PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIE1PTAorPFVCQUIxPiAiPFUzMTQxPjxVMzE1Nz48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBNT0xHCis8VUJBQjI+ICI8VTMxNDE+PFUzMTU3PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIE1PTE0KKzxVQkFCMz4gIjxVMzE0MT48VTMxNTc+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTU9MQgorPFVCQUI0PiAiPFUzMTQxPjxVMzE1Nz48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBNT0xTCis8VUJBQjU+ICI8VTMxNDE+PFUzMTU3PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIE1PTFQKKzxVQkFCNj4gIjxVMzE0MT48VTMxNTc+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgTU9MUAorPFVCQUI3PiAiPFUzMTQxPjxVMzE1Nz48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBNT0xICis8VUJBQjg+ICI8VTMxNDE+PFUzMTU3PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIE1PTQorPFVCQUI5PiAiPFUzMTQxPjxVMzE1Nz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBNT0IKKzxVQkFCQT4gIjxVMzE0MT48VTMxNTc+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTU9CUworPFVCQUJCPiAiPFUzMTQxPjxVMzE1Nz48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBNT1MKKzxVQkFCQz4gIjxVMzE0MT48VTMxNTc+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTU9TUworPFVCQUJEPiAiPFUzMTQxPjxVMzE1Nz48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBNT05HCis8VUJBQkU+ICI8VTMxNDE+PFUzMTU3PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIE1PSgorPFVCQUJGPiAiPFUzMTQxPjxVMzE1Nz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBNT0MKKzxVQkFDMD4gIjxVMzE0MT48VTMxNTc+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgTU9LCis8VUJBQzE+ICI8VTMxNDE+PFUzMTU3PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIE1PVAorPFVCQUMyPiAiPFUzMTQxPjxVMzE1Nz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBNT1AKKzxVQkFDMz4gIjxVMzE0MT48VTMxNTc+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgTU9ICis8VUJBQzQ+ICI8VTMxNDE+PFUzMTU4PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBCis8VUJBQzU+ICI8VTMxNDE+PFUzMTU4PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIE1XQUcKKzxVQkFDNj4gIjxVMzE0MT48VTMxNTg+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBR0cKKzxVQkFDNz4gIjxVMzE0MT48VTMxNTg+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBR1MKKzxVQkFDOD4gIjxVMzE0MT48VTMxNTg+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBTgorPFVCQUM5PiAiPFUzMTQxPjxVMzE1OD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0FOSQorPFVCQUNBPiAiPFUzMTQxPjxVMzE1OD48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0FOSAorPFVCQUNCPiAiPFUzMTQxPjxVMzE1OD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0FECis8VUJBQ0M+ICI8VTMxNDE+PFUzMTU4PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIE1XQUwKKzxVQkFDRD4gIjxVMzE0MT48VTMxNTg+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBTEcKKzxVQkFDRT4gIjxVMzE0MT48VTMxNTg+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBTE0KKzxVQkFDRj4gIjxVMzE0MT48VTMxNTg+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBTEIKKzxVQkFEMD4gIjxVMzE0MT48VTMxNTg+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBTFMKKzxVQkFEMT4gIjxVMzE0MT48VTMxNTg+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBTFQKKzxVQkFEMj4gIjxVMzE0MT48VTMxNTg+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBTFAKKzxVQkFEMz4gIjxVMzE0MT48VTMxNTg+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBTEgKKzxVQkFEND4gIjxVMzE0MT48VTMxNTg+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBTQorPFVCQUQ1PiAiPFUzMTQxPjxVMzE1OD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0FCCis8VUJBRDY+ICI8VTMxNDE+PFUzMTU4PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIE1XQUJTCis8VUJBRDc+ICI8VTMxNDE+PFUzMTU4PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIE1XQVMKKzxVQkFEOD4gIjxVMzE0MT48VTMxNTg+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBU1MKKzxVQkFEOT4gIjxVMzE0MT48VTMxNTg+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBTkcKKzxVQkFEQT4gIjxVMzE0MT48VTMxNTg+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBSgorPFVCQURCPiAiPFUzMTQxPjxVMzE1OD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0FDCis8VUJBREM+ICI8VTMxNDE+PFUzMTU4PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIE1XQUsKKzxVQkFERD4gIjxVMzE0MT48VTMxNTg+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBVAorPFVCQURFPiAiPFUzMTQxPjxVMzE1OD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0FQCis8VUJBREY+ICI8VTMxNDE+PFUzMTU4PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIE1XQUgKKzxVQkFFMD4gIjxVMzE0MT48VTMxNTk+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0FFCis8VUJBRTE+ICI8VTMxNDE+PFUzMTU5PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIE1XQUVHCis8VUJBRTI+ICI8VTMxNDE+PFUzMTU5PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIE1XQUVHRworPFVCQUUzPiAiPFUzMTQxPjxVMzE1OT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0FFR1MKKzxVQkFFND4gIjxVMzE0MT48VTMxNTk+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBRU4KKzxVQkFFNT4gIjxVMzE0MT48VTMxNTk+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBRU5JCis8VUJBRTY+ICI8VTMxNDE+PFUzMTU5PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIE1XQUVOSAorPFVCQUU3PiAiPFUzMTQxPjxVMzE1OT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0FFRAorPFVCQUU4PiAiPFUzMTQxPjxVMzE1OT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0FFTAorPFVCQUU5PiAiPFUzMTQxPjxVMzE1OT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0FFTEcKKzxVQkFFQT4gIjxVMzE0MT48VTMxNTk+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBRUxNCis8VUJBRUI+ICI8VTMxNDE+PFUzMTU5PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIE1XQUVMQgorPFVCQUVDPiAiPFUzMTQxPjxVMzE1OT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0FFTFMKKzxVQkFFRD4gIjxVMzE0MT48VTMxNTk+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBRUxUCis8VUJBRUU+ICI8VTMxNDE+PFUzMTU5PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIE1XQUVMUAorPFVCQUVGPiAiPFUzMTQxPjxVMzE1OT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0FFTEgKKzxVQkFGMD4gIjxVMzE0MT48VTMxNTk+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBRU0KKzxVQkFGMT4gIjxVMzE0MT48VTMxNTk+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBRUIKKzxVQkFGMj4gIjxVMzE0MT48VTMxNTk+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBRUJTCis8VUJBRjM+ICI8VTMxNDE+PFUzMTU5PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIE1XQUVTCis8VUJBRjQ+ICI8VTMxNDE+PFUzMTU5PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIE1XQUVTUworPFVCQUY1PiAiPFUzMTQxPjxVMzE1OT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0FFTkcKKzxVQkFGNj4gIjxVMzE0MT48VTMxNTk+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBRUoKKzxVQkFGNz4gIjxVMzE0MT48VTMxNTk+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBRUMKKzxVQkFGOD4gIjxVMzE0MT48VTMxNTk+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBRUsKKzxVQkFGOT4gIjxVMzE0MT48VTMxNTk+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBRVQKKzxVQkFGQT4gIjxVMzE0MT48VTMxNTk+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBRVAKKzxVQkFGQj4gIjxVMzE0MT48VTMxNTk+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdBRUgKKzxVQkFGQz4gIjxVMzE0MT48VTMxNUE+IgklIEhBTkdVTCBTWUxMQUJMRSBNT0UKKzxVQkFGRD4gIjxVMzE0MT48VTMxNUE+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTU9FRworPFVCQUZFPiAiPFUzMTQxPjxVMzE1QT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBNT0VHRworPFVCQUZGPiAiPFUzMTQxPjxVMzE1QT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBNT0VHUworPFVCQjAwPiAiPFUzMTQxPjxVMzE1QT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBNT0VOCis8VUJCMDE+ICI8VTMxNDE+PFUzMTVBPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIE1PRU5JCis8VUJCMDI+ICI8VTMxNDE+PFUzMTVBPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIE1PRU5ICis8VUJCMDM+ICI8VTMxNDE+PFUzMTVBPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIE1PRUQKKzxVQkIwND4gIjxVMzE0MT48VTMxNUE+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgTU9FTAorPFVCQjA1PiAiPFUzMTQxPjxVMzE1QT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBNT0VMRworPFVCQjA2PiAiPFUzMTQxPjxVMzE1QT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBNT0VMTQorPFVCQjA3PiAiPFUzMTQxPjxVMzE1QT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBNT0VMQgorPFVCQjA4PiAiPFUzMTQxPjxVMzE1QT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBNT0VMUworPFVCQjA5PiAiPFUzMTQxPjxVMzE1QT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBNT0VMVAorPFVCQjBBPiAiPFUzMTQxPjxVMzE1QT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBNT0VMUAorPFVCQjBCPiAiPFUzMTQxPjxVMzE1QT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBNT0VMSAorPFVCQjBDPiAiPFUzMTQxPjxVMzE1QT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBNT0VNCis8VUJCMEQ+ICI8VTMxNDE+PFUzMTVBPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIE1PRUIKKzxVQkIwRT4gIjxVMzE0MT48VTMxNUE+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTU9FQlMKKzxVQkIwRj4gIjxVMzE0MT48VTMxNUE+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTU9FUworPFVCQjEwPiAiPFUzMTQxPjxVMzE1QT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBNT0VTUworPFVCQjExPiAiPFUzMTQxPjxVMzE1QT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBNT0VORworPFVCQjEyPiAiPFUzMTQxPjxVMzE1QT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBNT0VKCis8VUJCMTM+ICI8VTMxNDE+PFUzMTVBPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIE1PRUMKKzxVQkIxND4gIjxVMzE0MT48VTMxNUE+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgTU9FSworPFVCQjE1PiAiPFUzMTQxPjxVMzE1QT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBNT0VUCis8VUJCMTY+ICI8VTMxNDE+PFUzMTVBPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIE1PRVAKKzxVQkIxNz4gIjxVMzE0MT48VTMxNUE+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgTU9FSAorPFVCQjE4PiAiPFUzMTQxPjxVMzE1Qj4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZTworPFVCQjE5PiAiPFUzMTQxPjxVMzE1Qj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBNWU9HCis8VUJCMUE+ICI8VTMxNDE+PFUzMTVCPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZT0dHCis8VUJCMUI+ICI8VTMxNDE+PFUzMTVCPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZT0dTCis8VUJCMUM+ICI8VTMxNDE+PFUzMTVCPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZT04KKzxVQkIxRD4gIjxVMzE0MT48VTMxNUI+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlPTkkKKzxVQkIxRT4gIjxVMzE0MT48VTMxNUI+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlPTkgKKzxVQkIxRj4gIjxVMzE0MT48VTMxNUI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlPRAorPFVCQjIwPiAiPFUzMTQxPjxVMzE1Qj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBNWU9MCis8VUJCMjE+ICI8VTMxNDE+PFUzMTVCPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZT0xHCis8VUJCMjI+ICI8VTMxNDE+PFUzMTVCPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZT0xNCis8VUJCMjM+ICI8VTMxNDE+PFUzMTVCPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZT0xCCis8VUJCMjQ+ICI8VTMxNDE+PFUzMTVCPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZT0xTCis8VUJCMjU+ICI8VTMxNDE+PFUzMTVCPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZT0xUCis8VUJCMjY+ICI8VTMxNDE+PFUzMTVCPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZT0xQCis8VUJCMjc+ICI8VTMxNDE+PFUzMTVCPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZT0xICis8VUJCMjg+ICI8VTMxNDE+PFUzMTVCPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZT00KKzxVQkIyOT4gIjxVMzE0MT48VTMxNUI+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlPQgorPFVCQjJBPiAiPFUzMTQxPjxVMzE1Qj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBNWU9CUworPFVCQjJCPiAiPFUzMTQxPjxVMzE1Qj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBNWU9TCis8VUJCMkM+ICI8VTMxNDE+PFUzMTVCPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZT1NTCis8VUJCMkQ+ICI8VTMxNDE+PFUzMTVCPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZT05HCis8VUJCMkU+ICI8VTMxNDE+PFUzMTVCPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZT0oKKzxVQkIyRj4gIjxVMzE0MT48VTMxNUI+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlPQworPFVCQjMwPiAiPFUzMTQxPjxVMzE1Qj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBNWU9LCis8VUJCMzE+ICI8VTMxNDE+PFUzMTVCPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZT1QKKzxVQkIzMj4gIjxVMzE0MT48VTMxNUI+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlPUAorPFVCQjMzPiAiPFUzMTQxPjxVMzE1Qj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBNWU9ICis8VUJCMzQ+ICI8VTMxNDE+PFUzMTVDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVUKKzxVQkIzNT4gIjxVMzE0MT48VTMxNUM+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVVHCis8VUJCMzY+ICI8VTMxNDE+PFUzMTVDPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIE1VR0cKKzxVQkIzNz4gIjxVMzE0MT48VTMxNUM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVVHUworPFVCQjM4PiAiPFUzMTQxPjxVMzE1Qz48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBNVU4KKzxVQkIzOT4gIjxVMzE0MT48VTMxNUM+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVVOSQorPFVCQjNBPiAiPFUzMTQxPjxVMzE1Qz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBNVU5ICis8VUJCM0I+ICI8VTMxNDE+PFUzMTVDPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIE1VRAorPFVCQjNDPiAiPFUzMTQxPjxVMzE1Qz48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBNVUwKKzxVQkIzRD4gIjxVMzE0MT48VTMxNUM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVVMRworPFVCQjNFPiAiPFUzMTQxPjxVMzE1Qz48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBNVUxNCis8VUJCM0Y+ICI8VTMxNDE+PFUzMTVDPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIE1VTEIKKzxVQkI0MD4gIjxVMzE0MT48VTMxNUM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVVMUworPFVCQjQxPiAiPFUzMTQxPjxVMzE1Qz48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBNVUxUCis8VUJCNDI+ICI8VTMxNDE+PFUzMTVDPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIE1VTFAKKzxVQkI0Mz4gIjxVMzE0MT48VTMxNUM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVVMSAorPFVCQjQ0PiAiPFUzMTQxPjxVMzE1Qz48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBNVU0KKzxVQkI0NT4gIjxVMzE0MT48VTMxNUM+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVVCCis8VUJCNDY+ICI8VTMxNDE+PFUzMTVDPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIE1VQlMKKzxVQkI0Nz4gIjxVMzE0MT48VTMxNUM+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVVTCis8VUJCNDg+ICI8VTMxNDE+PFUzMTVDPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIE1VU1MKKzxVQkI0OT4gIjxVMzE0MT48VTMxNUM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVVORworPFVCQjRBPiAiPFUzMTQxPjxVMzE1Qz48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBNVUoKKzxVQkI0Qj4gIjxVMzE0MT48VTMxNUM+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVVDCis8VUJCNEM+ICI8VTMxNDE+PFUzMTVDPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIE1VSworPFVCQjREPiAiPFUzMTQxPjxVMzE1Qz48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBNVVQKKzxVQkI0RT4gIjxVMzE0MT48VTMxNUM+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVVQCis8VUJCNEY+ICI8VTMxNDE+PFUzMTVDPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIE1VSAorPFVCQjUwPiAiPFUzMTQxPjxVMzE1RD4iCSUgSEFOR1VMIFNZTExBQkxFIE1XRU8KKzxVQkI1MT4gIjxVMzE0MT48VTMxNUQ+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdFT0cKKzxVQkI1Mj4gIjxVMzE0MT48VTMxNUQ+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdFT0dHCis8VUJCNTM+ICI8VTMxNDE+PFUzMTVEPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIE1XRU9HUworPFVCQjU0PiAiPFUzMTQxPjxVMzE1RD48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0VPTgorPFVCQjU1PiAiPFUzMTQxPjxVMzE1RD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0VPTkkKKzxVQkI1Nj4gIjxVMzE0MT48VTMxNUQ+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdFT05ICis8VUJCNTc+ICI8VTMxNDE+PFUzMTVEPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIE1XRU9ECis8VUJCNTg+ICI8VTMxNDE+PFUzMTVEPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIE1XRU9MCis8VUJCNTk+ICI8VTMxNDE+PFUzMTVEPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIE1XRU9MRworPFVCQjVBPiAiPFUzMTQxPjxVMzE1RD48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0VPTE0KKzxVQkI1Qj4gIjxVMzE0MT48VTMxNUQ+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdFT0xCCis8VUJCNUM+ICI8VTMxNDE+PFUzMTVEPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIE1XRU9MUworPFVCQjVEPiAiPFUzMTQxPjxVMzE1RD48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0VPTFQKKzxVQkI1RT4gIjxVMzE0MT48VTMxNUQ+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdFT0xQCis8VUJCNUY+ICI8VTMxNDE+PFUzMTVEPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIE1XRU9MSAorPFVCQjYwPiAiPFUzMTQxPjxVMzE1RD48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0VPTQorPFVCQjYxPiAiPFUzMTQxPjxVMzE1RD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0VPQgorPFVCQjYyPiAiPFUzMTQxPjxVMzE1RD48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0VPQlMKKzxVQkI2Mz4gIjxVMzE0MT48VTMxNUQ+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdFT1MKKzxVQkI2ND4gIjxVMzE0MT48VTMxNUQ+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdFT1NTCis8VUJCNjU+ICI8VTMxNDE+PFUzMTVEPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIE1XRU9ORworPFVCQjY2PiAiPFUzMTQxPjxVMzE1RD48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0VPSgorPFVCQjY3PiAiPFUzMTQxPjxVMzE1RD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0VPQworPFVCQjY4PiAiPFUzMTQxPjxVMzE1RD48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0VPSworPFVCQjY5PiAiPFUzMTQxPjxVMzE1RD48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0VPVAorPFVCQjZBPiAiPFUzMTQxPjxVMzE1RD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0VPUAorPFVCQjZCPiAiPFUzMTQxPjxVMzE1RD48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0VPSAorPFVCQjZDPiAiPFUzMTQxPjxVMzE1RT4iCSUgSEFOR1VMIFNZTExBQkxFIE1XRQorPFVCQjZEPiAiPFUzMTQxPjxVMzE1RT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0VHCis8VUJCNkU+ICI8VTMxNDE+PFUzMTVFPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIE1XRUdHCis8VUJCNkY+ICI8VTMxNDE+PFUzMTVFPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIE1XRUdTCis8VUJCNzA+ICI8VTMxNDE+PFUzMTVFPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIE1XRU4KKzxVQkI3MT4gIjxVMzE0MT48VTMxNUU+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdFTkkKKzxVQkI3Mj4gIjxVMzE0MT48VTMxNUU+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdFTkgKKzxVQkI3Mz4gIjxVMzE0MT48VTMxNUU+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdFRAorPFVCQjc0PiAiPFUzMTQxPjxVMzE1RT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0VMCis8VUJCNzU+ICI8VTMxNDE+PFUzMTVFPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIE1XRUxHCis8VUJCNzY+ICI8VTMxNDE+PFUzMTVFPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIE1XRUxNCis8VUJCNzc+ICI8VTMxNDE+PFUzMTVFPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIE1XRUxCCis8VUJCNzg+ICI8VTMxNDE+PFUzMTVFPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIE1XRUxTCis8VUJCNzk+ICI8VTMxNDE+PFUzMTVFPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIE1XRUxUCis8VUJCN0E+ICI8VTMxNDE+PFUzMTVFPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIE1XRUxQCis8VUJCN0I+ICI8VTMxNDE+PFUzMTVFPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIE1XRUxICis8VUJCN0M+ICI8VTMxNDE+PFUzMTVFPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIE1XRU0KKzxVQkI3RD4gIjxVMzE0MT48VTMxNUU+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdFQgorPFVCQjdFPiAiPFUzMTQxPjxVMzE1RT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0VCUworPFVCQjdGPiAiPFUzMTQxPjxVMzE1RT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0VTCis8VUJCODA+ICI8VTMxNDE+PFUzMTVFPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIE1XRVNTCis8VUJCODE+ICI8VTMxNDE+PFUzMTVFPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIE1XRU5HCis8VUJCODI+ICI8VTMxNDE+PFUzMTVFPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIE1XRUoKKzxVQkI4Mz4gIjxVMzE0MT48VTMxNUU+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdFQworPFVCQjg0PiAiPFUzMTQxPjxVMzE1RT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0VLCis8VUJCODU+ICI8VTMxNDE+PFUzMTVFPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIE1XRVQKKzxVQkI4Nj4gIjxVMzE0MT48VTMxNUU+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdFUAorPFVCQjg3PiAiPFUzMTQxPjxVMzE1RT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0VICis8VUJCODg+ICI8VTMxNDE+PFUzMTVGPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdJCis8VUJCODk+ICI8VTMxNDE+PFUzMTVGPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIE1XSUcKKzxVQkI4QT4gIjxVMzE0MT48VTMxNUY+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdJR0cKKzxVQkI4Qj4gIjxVMzE0MT48VTMxNUY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdJR1MKKzxVQkI4Qz4gIjxVMzE0MT48VTMxNUY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdJTgorPFVCQjhEPiAiPFUzMTQxPjxVMzE1Rj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0lOSQorPFVCQjhFPiAiPFUzMTQxPjxVMzE1Rj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0lOSAorPFVCQjhGPiAiPFUzMTQxPjxVMzE1Rj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0lECis8VUJCOTA+ICI8VTMxNDE+PFUzMTVGPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIE1XSUwKKzxVQkI5MT4gIjxVMzE0MT48VTMxNUY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdJTEcKKzxVQkI5Mj4gIjxVMzE0MT48VTMxNUY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdJTE0KKzxVQkI5Mz4gIjxVMzE0MT48VTMxNUY+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdJTEIKKzxVQkI5ND4gIjxVMzE0MT48VTMxNUY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdJTFMKKzxVQkI5NT4gIjxVMzE0MT48VTMxNUY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdJTFQKKzxVQkI5Nj4gIjxVMzE0MT48VTMxNUY+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdJTFAKKzxVQkI5Nz4gIjxVMzE0MT48VTMxNUY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdJTEgKKzxVQkI5OD4gIjxVMzE0MT48VTMxNUY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdJTQorPFVCQjk5PiAiPFUzMTQxPjxVMzE1Rj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0lCCis8VUJCOUE+ICI8VTMxNDE+PFUzMTVGPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIE1XSUJTCis8VUJCOUI+ICI8VTMxNDE+PFUzMTVGPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIE1XSVMKKzxVQkI5Qz4gIjxVMzE0MT48VTMxNUY+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdJU1MKKzxVQkI5RD4gIjxVMzE0MT48VTMxNUY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdJTkcKKzxVQkI5RT4gIjxVMzE0MT48VTMxNUY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdJSgorPFVCQjlGPiAiPFUzMTQxPjxVMzE1Rj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0lDCis8VUJCQTA+ICI8VTMxNDE+PFUzMTVGPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIE1XSUsKKzxVQkJBMT4gIjxVMzE0MT48VTMxNUY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVdJVAorPFVCQkEyPiAiPFUzMTQxPjxVMzE1Rj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBNV0lQCis8VUJCQTM+ICI8VTMxNDE+PFUzMTVGPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIE1XSUgKKzxVQkJBND4gIjxVMzE0MT48VTMxNjA+IgklIEhBTkdVTCBTWUxMQUJMRSBNWVUKKzxVQkJBNT4gIjxVMzE0MT48VTMxNjA+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlVRworPFVCQkE2PiAiPFUzMTQxPjxVMzE2MD48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBNWVVHRworPFVCQkE3PiAiPFUzMTQxPjxVMzE2MD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBNWVVHUworPFVCQkE4PiAiPFUzMTQxPjxVMzE2MD48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBNWVVOCis8VUJCQTk+ICI8VTMxNDE+PFUzMTYwPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZVU5JCis8VUJCQUE+ICI8VTMxNDE+PFUzMTYwPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZVU5ICis8VUJCQUI+ICI8VTMxNDE+PFUzMTYwPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZVUQKKzxVQkJBQz4gIjxVMzE0MT48VTMxNjA+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlVTAorPFVCQkFEPiAiPFUzMTQxPjxVMzE2MD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBNWVVMRworPFVCQkFFPiAiPFUzMTQxPjxVMzE2MD48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBNWVVMTQorPFVCQkFGPiAiPFUzMTQxPjxVMzE2MD48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBNWVVMQgorPFVCQkIwPiAiPFUzMTQxPjxVMzE2MD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBNWVVMUworPFVCQkIxPiAiPFUzMTQxPjxVMzE2MD48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBNWVVMVAorPFVCQkIyPiAiPFUzMTQxPjxVMzE2MD48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBNWVVMUAorPFVCQkIzPiAiPFUzMTQxPjxVMzE2MD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBNWVVMSAorPFVCQkI0PiAiPFUzMTQxPjxVMzE2MD48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBNWVVNCis8VUJCQjU+ICI8VTMxNDE+PFUzMTYwPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZVUIKKzxVQkJCNj4gIjxVMzE0MT48VTMxNjA+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlVQlMKKzxVQkJCNz4gIjxVMzE0MT48VTMxNjA+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlVUworPFVCQkI4PiAiPFUzMTQxPjxVMzE2MD48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBNWVVTUworPFVCQkI5PiAiPFUzMTQxPjxVMzE2MD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBNWVVORworPFVCQkJBPiAiPFUzMTQxPjxVMzE2MD48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBNWVVKCis8VUJCQkI+ICI8VTMxNDE+PFUzMTYwPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZVUMKKzxVQkJCQz4gIjxVMzE0MT48VTMxNjA+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlVSworPFVCQkJEPiAiPFUzMTQxPjxVMzE2MD48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBNWVVUCis8VUJCQkU+ICI8VTMxNDE+PFUzMTYwPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZVVAKKzxVQkJCRj4gIjxVMzE0MT48VTMxNjA+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlVSAorPFVCQkMwPiAiPFUzMTQxPjxVMzE2MT4iCSUgSEFOR1VMIFNZTExBQkxFIE1FVQorPFVCQkMxPiAiPFUzMTQxPjxVMzE2MT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBNRVVHCis8VUJCQzI+ICI8VTMxNDE+PFUzMTYxPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIE1FVUdHCis8VUJCQzM+ICI8VTMxNDE+PFUzMTYxPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIE1FVUdTCis8VUJCQzQ+ICI8VTMxNDE+PFUzMTYxPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIE1FVU4KKzxVQkJDNT4gIjxVMzE0MT48VTMxNjE+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVVTkkKKzxVQkJDNj4gIjxVMzE0MT48VTMxNjE+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVVTkgKKzxVQkJDNz4gIjxVMzE0MT48VTMxNjE+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVVRAorPFVCQkM4PiAiPFUzMTQxPjxVMzE2MT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBNRVVMCis8VUJCQzk+ICI8VTMxNDE+PFUzMTYxPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIE1FVUxHCis8VUJCQ0E+ICI8VTMxNDE+PFUzMTYxPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIE1FVUxNCis8VUJCQ0I+ICI8VTMxNDE+PFUzMTYxPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIE1FVUxCCis8VUJCQ0M+ICI8VTMxNDE+PFUzMTYxPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIE1FVUxTCis8VUJCQ0Q+ICI8VTMxNDE+PFUzMTYxPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIE1FVUxUCis8VUJCQ0U+ICI8VTMxNDE+PFUzMTYxPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIE1FVUxQCis8VUJCQ0Y+ICI8VTMxNDE+PFUzMTYxPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIE1FVUxICis8VUJCRDA+ICI8VTMxNDE+PFUzMTYxPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIE1FVU0KKzxVQkJEMT4gIjxVMzE0MT48VTMxNjE+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVVQgorPFVCQkQyPiAiPFUzMTQxPjxVMzE2MT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBNRVVCUworPFVCQkQzPiAiPFUzMTQxPjxVMzE2MT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBNRVVTCis8VUJCRDQ+ICI8VTMxNDE+PFUzMTYxPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIE1FVVNTCis8VUJCRDU+ICI8VTMxNDE+PFUzMTYxPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIE1FVU5HCis8VUJCRDY+ICI8VTMxNDE+PFUzMTYxPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIE1FVUoKKzxVQkJENz4gIjxVMzE0MT48VTMxNjE+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVVQworPFVCQkQ4PiAiPFUzMTQxPjxVMzE2MT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBNRVVLCis8VUJCRDk+ICI8VTMxNDE+PFUzMTYxPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIE1FVVQKKzxVQkJEQT4gIjxVMzE0MT48VTMxNjE+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUVVUAorPFVCQkRCPiAiPFUzMTQxPjxVMzE2MT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBNRVVICis8VUJCREM+ICI8VTMxNDE+PFUzMTYyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlJCis8VUJCREQ+ICI8VTMxNDE+PFUzMTYyPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZSUcKKzxVQkJERT4gIjxVMzE0MT48VTMxNjI+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlJR0cKKzxVQkJERj4gIjxVMzE0MT48VTMxNjI+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlJR1MKKzxVQkJFMD4gIjxVMzE0MT48VTMxNjI+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlJTgorPFVCQkUxPiAiPFUzMTQxPjxVMzE2Mj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUlOSQorPFVCQkUyPiAiPFUzMTQxPjxVMzE2Mj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUlOSAorPFVCQkUzPiAiPFUzMTQxPjxVMzE2Mj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUlECis8VUJCRTQ+ICI8VTMxNDE+PFUzMTYyPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZSUwKKzxVQkJFNT4gIjxVMzE0MT48VTMxNjI+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlJTEcKKzxVQkJFNj4gIjxVMzE0MT48VTMxNjI+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlJTE0KKzxVQkJFNz4gIjxVMzE0MT48VTMxNjI+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlJTEIKKzxVQkJFOD4gIjxVMzE0MT48VTMxNjI+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlJTFMKKzxVQkJFOT4gIjxVMzE0MT48VTMxNjI+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlJTFQKKzxVQkJFQT4gIjxVMzE0MT48VTMxNjI+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlJTFAKKzxVQkJFQj4gIjxVMzE0MT48VTMxNjI+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlJTEgKKzxVQkJFQz4gIjxVMzE0MT48VTMxNjI+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlJTQorPFVCQkVEPiAiPFUzMTQxPjxVMzE2Mj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUlCCis8VUJCRUU+ICI8VTMxNDE+PFUzMTYyPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZSUJTCis8VUJCRUY+ICI8VTMxNDE+PFUzMTYyPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZSVMKKzxVQkJGMD4gIjxVMzE0MT48VTMxNjI+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlJU1MKKzxVQkJGMT4gIjxVMzE0MT48VTMxNjI+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlJTkcKKzxVQkJGMj4gIjxVMzE0MT48VTMxNjI+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlJSgorPFVCQkYzPiAiPFUzMTQxPjxVMzE2Mj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUlDCis8VUJCRjQ+ICI8VTMxNDE+PFUzMTYyPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZSUsKKzxVQkJGNT4gIjxVMzE0MT48VTMxNjI+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTVlJVAorPFVCQkY2PiAiPFUzMTQxPjxVMzE2Mj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBNWUlQCis8VUJCRjc+ICI8VTMxNDE+PFUzMTYyPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIE1ZSUgKKzxVQkJGOD4gIjxVMzE0MT48VTMxNjM+IgklIEhBTkdVTCBTWUxMQUJMRSBNSQorPFVCQkY5PiAiPFUzMTQxPjxVMzE2Mz48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBNSUcKKzxVQkJGQT4gIjxVMzE0MT48VTMxNjM+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUlHRworPFVCQkZCPiAiPFUzMTQxPjxVMzE2Mz48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBNSUdTCis8VUJCRkM+ICI8VTMxNDE+PFUzMTYzPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIE1JTgorPFVCQkZEPiAiPFUzMTQxPjxVMzE2Mz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBNSU5JCis8VUJCRkU+ICI8VTMxNDE+PFUzMTYzPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIE1JTkgKKzxVQkJGRj4gIjxVMzE0MT48VTMxNjM+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgTUlECis8VUJDMDA+ICI8VTMxNDE+PFUzMTYzPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIE1JTAorPFVCQzAxPiAiPFUzMTQxPjxVMzE2Mz48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBNSUxHCis8VUJDMDI+ICI8VTMxNDE+PFUzMTYzPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIE1JTE0KKzxVQkMwMz4gIjxVMzE0MT48VTMxNjM+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUlMQgorPFVCQzA0PiAiPFUzMTQxPjxVMzE2Mz48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBNSUxTCis8VUJDMDU+ICI8VTMxNDE+PFUzMTYzPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIE1JTFQKKzxVQkMwNj4gIjxVMzE0MT48VTMxNjM+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUlMUAorPFVCQzA3PiAiPFUzMTQxPjxVMzE2Mz48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBNSUxICis8VUJDMDg+ICI8VTMxNDE+PFUzMTYzPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIE1JTQorPFVCQzA5PiAiPFUzMTQxPjxVMzE2Mz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBNSUIKKzxVQkMwQT4gIjxVMzE0MT48VTMxNjM+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgTUlCUworPFVCQzBCPiAiPFUzMTQxPjxVMzE2Mz48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBNSVMKKzxVQkMwQz4gIjxVMzE0MT48VTMxNjM+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgTUlTUworPFVCQzBEPiAiPFUzMTQxPjxVMzE2Mz48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBNSU5HCis8VUJDMEU+ICI8VTMxNDE+PFUzMTYzPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIE1JSgorPFVCQzBGPiAiPFUzMTQxPjxVMzE2Mz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBNSUMKKzxVQkMxMD4gIjxVMzE0MT48VTMxNjM+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUlLCis8VUJDMTE+ICI8VTMxNDE+PFUzMTYzPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIE1JVAorPFVCQzEyPiAiPFUzMTQxPjxVMzE2Mz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBNSVAKKzxVQkMxMz4gIjxVMzE0MT48VTMxNjM+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgTUlICis8VUJDMTQ+ICI8VTMxNDI+PFUzMTRGPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkEKKzxVQkMxNT4gIjxVMzE0Mj48VTMxNEY+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkFHCis8VUJDMTY+ICI8VTMxNDI+PFUzMTRGPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEJBR0cKKzxVQkMxNz4gIjxVMzE0Mj48VTMxNEY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkFHUworPFVCQzE4PiAiPFUzMTQyPjxVMzE0Rj48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCQU4KKzxVQkMxOT4gIjxVMzE0Mj48VTMxNEY+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkFOSQorPFVCQzFBPiAiPFUzMTQyPjxVMzE0Rj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBCQU5ICis8VUJDMUI+ICI8VTMxNDI+PFUzMTRGPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEJBRAorPFVCQzFDPiAiPFUzMTQyPjxVMzE0Rj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBCQUwKKzxVQkMxRD4gIjxVMzE0Mj48VTMxNEY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkFMRworPFVCQzFFPiAiPFUzMTQyPjxVMzE0Rj48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBCQUxNCis8VUJDMUY+ICI8VTMxNDI+PFUzMTRGPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEJBTEIKKzxVQkMyMD4gIjxVMzE0Mj48VTMxNEY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkFMUworPFVCQzIxPiAiPFUzMTQyPjxVMzE0Rj48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBCQUxUCis8VUJDMjI+ICI8VTMxNDI+PFUzMTRGPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEJBTFAKKzxVQkMyMz4gIjxVMzE0Mj48VTMxNEY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkFMSAorPFVCQzI0PiAiPFUzMTQyPjxVMzE0Rj48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBCQU0KKzxVQkMyNT4gIjxVMzE0Mj48VTMxNEY+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkFCCis8VUJDMjY+ICI8VTMxNDI+PFUzMTRGPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEJBQlMKKzxVQkMyNz4gIjxVMzE0Mj48VTMxNEY+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkFTCis8VUJDMjg+ICI8VTMxNDI+PFUzMTRGPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEJBU1MKKzxVQkMyOT4gIjxVMzE0Mj48VTMxNEY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkFORworPFVCQzJBPiAiPFUzMTQyPjxVMzE0Rj48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBCQUoKKzxVQkMyQj4gIjxVMzE0Mj48VTMxNEY+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkFDCis8VUJDMkM+ICI8VTMxNDI+PFUzMTRGPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEJBSworPFVCQzJEPiAiPFUzMTQyPjxVMzE0Rj48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQVQKKzxVQkMyRT4gIjxVMzE0Mj48VTMxNEY+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkFQCis8VUJDMkY+ICI8VTMxNDI+PFUzMTRGPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEJBSAorPFVCQzMwPiAiPFUzMTQyPjxVMzE1MD4iCSUgSEFOR1VMIFNZTExBQkxFIEJBRQorPFVCQzMxPiAiPFUzMTQyPjxVMzE1MD48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBCQUVHCis8VUJDMzI+ICI8VTMxNDI+PFUzMTUwPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEJBRUdHCis8VUJDMzM+ICI8VTMxNDI+PFUzMTUwPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEJBRUdTCis8VUJDMzQ+ICI8VTMxNDI+PFUzMTUwPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEJBRU4KKzxVQkMzNT4gIjxVMzE0Mj48VTMxNTA+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkFFTkkKKzxVQkMzNj4gIjxVMzE0Mj48VTMxNTA+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkFFTkgKKzxVQkMzNz4gIjxVMzE0Mj48VTMxNTA+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkFFRAorPFVCQzM4PiAiPFUzMTQyPjxVMzE1MD48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBCQUVMCis8VUJDMzk+ICI8VTMxNDI+PFUzMTUwPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEJBRUxHCis8VUJDM0E+ICI8VTMxNDI+PFUzMTUwPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEJBRUxNCis8VUJDM0I+ICI8VTMxNDI+PFUzMTUwPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEJBRUxCCis8VUJDM0M+ICI8VTMxNDI+PFUzMTUwPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEJBRUxTCis8VUJDM0Q+ICI8VTMxNDI+PFUzMTUwPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEJBRUxUCis8VUJDM0U+ICI8VTMxNDI+PFUzMTUwPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEJBRUxQCis8VUJDM0Y+ICI8VTMxNDI+PFUzMTUwPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEJBRUxICis8VUJDNDA+ICI8VTMxNDI+PFUzMTUwPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEJBRU0KKzxVQkM0MT4gIjxVMzE0Mj48VTMxNTA+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkFFQgorPFVCQzQyPiAiPFUzMTQyPjxVMzE1MD48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCQUVCUworPFVCQzQzPiAiPFUzMTQyPjxVMzE1MD48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBCQUVTCis8VUJDNDQ+ICI8VTMxNDI+PFUzMTUwPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEJBRVNTCis8VUJDNDU+ICI8VTMxNDI+PFUzMTUwPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEJBRU5HCis8VUJDNDY+ICI8VTMxNDI+PFUzMTUwPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEJBRUoKKzxVQkM0Nz4gIjxVMzE0Mj48VTMxNTA+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkFFQworPFVCQzQ4PiAiPFUzMTQyPjxVMzE1MD48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBCQUVLCis8VUJDNDk+ICI8VTMxNDI+PFUzMTUwPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEJBRVQKKzxVQkM0QT4gIjxVMzE0Mj48VTMxNTA+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkFFUAorPFVCQzRCPiAiPFUzMTQyPjxVMzE1MD48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBCQUVICis8VUJDNEM+ICI8VTMxNDI+PFUzMTUxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBCis8VUJDNEQ+ICI8VTMxNDI+PFUzMTUxPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEJZQUcKKzxVQkM0RT4gIjxVMzE0Mj48VTMxNTE+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBR0cKKzxVQkM0Rj4gIjxVMzE0Mj48VTMxNTE+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBR1MKKzxVQkM1MD4gIjxVMzE0Mj48VTMxNTE+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBTgorPFVCQzUxPiAiPFUzMTQyPjxVMzE1MT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUFOSQorPFVCQzUyPiAiPFUzMTQyPjxVMzE1MT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUFOSAorPFVCQzUzPiAiPFUzMTQyPjxVMzE1MT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUFECis8VUJDNTQ+ICI8VTMxNDI+PFUzMTUxPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEJZQUwKKzxVQkM1NT4gIjxVMzE0Mj48VTMxNTE+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBTEcKKzxVQkM1Nj4gIjxVMzE0Mj48VTMxNTE+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBTE0KKzxVQkM1Nz4gIjxVMzE0Mj48VTMxNTE+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBTEIKKzxVQkM1OD4gIjxVMzE0Mj48VTMxNTE+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBTFMKKzxVQkM1OT4gIjxVMzE0Mj48VTMxNTE+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBTFQKKzxVQkM1QT4gIjxVMzE0Mj48VTMxNTE+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBTFAKKzxVQkM1Qj4gIjxVMzE0Mj48VTMxNTE+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBTEgKKzxVQkM1Qz4gIjxVMzE0Mj48VTMxNTE+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBTQorPFVCQzVEPiAiPFUzMTQyPjxVMzE1MT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUFCCis8VUJDNUU+ICI8VTMxNDI+PFUzMTUxPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEJZQUJTCis8VUJDNUY+ICI8VTMxNDI+PFUzMTUxPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEJZQVMKKzxVQkM2MD4gIjxVMzE0Mj48VTMxNTE+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBU1MKKzxVQkM2MT4gIjxVMzE0Mj48VTMxNTE+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBTkcKKzxVQkM2Mj4gIjxVMzE0Mj48VTMxNTE+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBSgorPFVCQzYzPiAiPFUzMTQyPjxVMzE1MT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUFDCis8VUJDNjQ+ICI8VTMxNDI+PFUzMTUxPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEJZQUsKKzxVQkM2NT4gIjxVMzE0Mj48VTMxNTE+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBVAorPFVCQzY2PiAiPFUzMTQyPjxVMzE1MT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUFQCis8VUJDNjc+ICI8VTMxNDI+PFUzMTUxPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEJZQUgKKzxVQkM2OD4gIjxVMzE0Mj48VTMxNTI+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUFFCis8VUJDNjk+ICI8VTMxNDI+PFUzMTUyPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEJZQUVHCis8VUJDNkE+ICI8VTMxNDI+PFUzMTUyPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEJZQUVHRworPFVCQzZCPiAiPFUzMTQyPjxVMzE1Mj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUFFR1MKKzxVQkM2Qz4gIjxVMzE0Mj48VTMxNTI+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBRU4KKzxVQkM2RD4gIjxVMzE0Mj48VTMxNTI+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBRU5JCis8VUJDNkU+ICI8VTMxNDI+PFUzMTUyPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEJZQUVOSAorPFVCQzZGPiAiPFUzMTQyPjxVMzE1Mj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUFFRAorPFVCQzcwPiAiPFUzMTQyPjxVMzE1Mj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUFFTAorPFVCQzcxPiAiPFUzMTQyPjxVMzE1Mj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUFFTEcKKzxVQkM3Mj4gIjxVMzE0Mj48VTMxNTI+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBRUxNCis8VUJDNzM+ICI8VTMxNDI+PFUzMTUyPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEJZQUVMQgorPFVCQzc0PiAiPFUzMTQyPjxVMzE1Mj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUFFTFMKKzxVQkM3NT4gIjxVMzE0Mj48VTMxNTI+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBRUxUCis8VUJDNzY+ICI8VTMxNDI+PFUzMTUyPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEJZQUVMUAorPFVCQzc3PiAiPFUzMTQyPjxVMzE1Mj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUFFTEgKKzxVQkM3OD4gIjxVMzE0Mj48VTMxNTI+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBRU0KKzxVQkM3OT4gIjxVMzE0Mj48VTMxNTI+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBRUIKKzxVQkM3QT4gIjxVMzE0Mj48VTMxNTI+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBRUJTCis8VUJDN0I+ICI8VTMxNDI+PFUzMTUyPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEJZQUVTCis8VUJDN0M+ICI8VTMxNDI+PFUzMTUyPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEJZQUVTUworPFVCQzdEPiAiPFUzMTQyPjxVMzE1Mj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUFFTkcKKzxVQkM3RT4gIjxVMzE0Mj48VTMxNTI+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBRUoKKzxVQkM3Rj4gIjxVMzE0Mj48VTMxNTI+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBRUMKKzxVQkM4MD4gIjxVMzE0Mj48VTMxNTI+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBRUsKKzxVQkM4MT4gIjxVMzE0Mj48VTMxNTI+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBRVQKKzxVQkM4Mj4gIjxVMzE0Mj48VTMxNTI+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBRVAKKzxVQkM4Mz4gIjxVMzE0Mj48VTMxNTI+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllBRUgKKzxVQkM4ND4gIjxVMzE0Mj48VTMxNTM+IgklIEhBTkdVTCBTWUxMQUJMRSBCRU8KKzxVQkM4NT4gIjxVMzE0Mj48VTMxNTM+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVPRworPFVCQzg2PiAiPFUzMTQyPjxVMzE1Mz48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBCRU9HRworPFVCQzg3PiAiPFUzMTQyPjxVMzE1Mz48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBCRU9HUworPFVCQzg4PiAiPFUzMTQyPjxVMzE1Mz48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCRU9OCis8VUJDODk+ICI8VTMxNDI+PFUzMTUzPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEJFT05JCis8VUJDOEE+ICI8VTMxNDI+PFUzMTUzPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEJFT05ICis8VUJDOEI+ICI8VTMxNDI+PFUzMTUzPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEJFT0QKKzxVQkM4Qz4gIjxVMzE0Mj48VTMxNTM+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVPTAorPFVCQzhEPiAiPFUzMTQyPjxVMzE1Mz48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBCRU9MRworPFVCQzhFPiAiPFUzMTQyPjxVMzE1Mz48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBCRU9MTQorPFVCQzhGPiAiPFUzMTQyPjxVMzE1Mz48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBCRU9MQgorPFVCQzkwPiAiPFUzMTQyPjxVMzE1Mz48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBCRU9MUworPFVCQzkxPiAiPFUzMTQyPjxVMzE1Mz48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBCRU9MVAorPFVCQzkyPiAiPFUzMTQyPjxVMzE1Mz48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBCRU9MUAorPFVCQzkzPiAiPFUzMTQyPjxVMzE1Mz48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBCRU9MSAorPFVCQzk0PiAiPFUzMTQyPjxVMzE1Mz48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBCRU9NCis8VUJDOTU+ICI8VTMxNDI+PFUzMTUzPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEJFT0IKKzxVQkM5Nj4gIjxVMzE0Mj48VTMxNTM+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVPQlMKKzxVQkM5Nz4gIjxVMzE0Mj48VTMxNTM+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVPUworPFVCQzk4PiAiPFUzMTQyPjxVMzE1Mz48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBCRU9TUworPFVCQzk5PiAiPFUzMTQyPjxVMzE1Mz48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBCRU9ORworPFVCQzlBPiAiPFUzMTQyPjxVMzE1Mz48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBCRU9KCis8VUJDOUI+ICI8VTMxNDI+PFUzMTUzPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEJFT0MKKzxVQkM5Qz4gIjxVMzE0Mj48VTMxNTM+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVPSworPFVCQzlEPiAiPFUzMTQyPjxVMzE1Mz48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBCRU9UCis8VUJDOUU+ICI8VTMxNDI+PFUzMTUzPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEJFT1AKKzxVQkM5Rj4gIjxVMzE0Mj48VTMxNTM+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVPSAorPFVCQ0EwPiAiPFUzMTQyPjxVMzE1ND4iCSUgSEFOR1VMIFNZTExBQkxFIEJFCis8VUJDQTE+ICI8VTMxNDI+PFUzMTU0PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEJFRworPFVCQ0EyPiAiPFUzMTQyPjxVMzE1ND48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBCRUdHCis8VUJDQTM+ICI8VTMxNDI+PFUzMTU0PjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEJFR1MKKzxVQkNBND4gIjxVMzE0Mj48VTMxNTQ+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVOCis8VUJDQTU+ICI8VTMxNDI+PFUzMTU0PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEJFTkkKKzxVQkNBNj4gIjxVMzE0Mj48VTMxNTQ+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVOSAorPFVCQ0E3PiAiPFUzMTQyPjxVMzE1ND48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBCRUQKKzxVQkNBOD4gIjxVMzE0Mj48VTMxNTQ+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVMCis8VUJDQTk+ICI8VTMxNDI+PFUzMTU0PjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEJFTEcKKzxVQkNBQT4gIjxVMzE0Mj48VTMxNTQ+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVMTQorPFVCQ0FCPiAiPFUzMTQyPjxVMzE1ND48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBCRUxCCis8VUJDQUM+ICI8VTMxNDI+PFUzMTU0PjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEJFTFMKKzxVQkNBRD4gIjxVMzE0Mj48VTMxNTQ+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVMVAorPFVCQ0FFPiAiPFUzMTQyPjxVMzE1ND48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBCRUxQCis8VUJDQUY+ICI8VTMxNDI+PFUzMTU0PjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEJFTEgKKzxVQkNCMD4gIjxVMzE0Mj48VTMxNTQ+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVNCis8VUJDQjE+ICI8VTMxNDI+PFUzMTU0PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEJFQgorPFVCQ0IyPiAiPFUzMTQyPjxVMzE1ND48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCRUJTCis8VUJDQjM+ICI8VTMxNDI+PFUzMTU0PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEJFUworPFVCQ0I0PiAiPFUzMTQyPjxVMzE1ND48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBCRVNTCis8VUJDQjU+ICI8VTMxNDI+PFUzMTU0PjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEJFTkcKKzxVQkNCNj4gIjxVMzE0Mj48VTMxNTQ+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVKCis8VUJDQjc+ICI8VTMxNDI+PFUzMTU0PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEJFQworPFVCQ0I4PiAiPFUzMTQyPjxVMzE1ND48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBCRUsKKzxVQkNCOT4gIjxVMzE0Mj48VTMxNTQ+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVUCis8VUJDQkE+ICI8VTMxNDI+PFUzMTU0PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEJFUAorPFVCQ0JCPiAiPFUzMTQyPjxVMzE1ND48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBCRUgKKzxVQkNCQz4gIjxVMzE0Mj48VTMxNTU+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUVPCis8VUJDQkQ+ICI8VTMxNDI+PFUzMTU1PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEJZRU9HCis8VUJDQkU+ICI8VTMxNDI+PFUzMTU1PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEJZRU9HRworPFVCQ0JGPiAiPFUzMTQyPjxVMzE1NT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUVPR1MKKzxVQkNDMD4gIjxVMzE0Mj48VTMxNTU+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQllFT04KKzxVQkNDMT4gIjxVMzE0Mj48VTMxNTU+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQllFT05JCis8VUJDQzI+ICI8VTMxNDI+PFUzMTU1PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEJZRU9OSAorPFVCQ0MzPiAiPFUzMTQyPjxVMzE1NT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUVPRAorPFVCQ0M0PiAiPFUzMTQyPjxVMzE1NT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUVPTAorPFVCQ0M1PiAiPFUzMTQyPjxVMzE1NT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUVPTEcKKzxVQkNDNj4gIjxVMzE0Mj48VTMxNTU+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllFT0xNCis8VUJDQzc+ICI8VTMxNDI+PFUzMTU1PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEJZRU9MQgorPFVCQ0M4PiAiPFUzMTQyPjxVMzE1NT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUVPTFMKKzxVQkNDOT4gIjxVMzE0Mj48VTMxNTU+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllFT0xUCis8VUJDQ0E+ICI8VTMxNDI+PFUzMTU1PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEJZRU9MUAorPFVCQ0NCPiAiPFUzMTQyPjxVMzE1NT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUVPTEgKKzxVQkNDQz4gIjxVMzE0Mj48VTMxNTU+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllFT00KKzxVQkNDRD4gIjxVMzE0Mj48VTMxNTU+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllFT0IKKzxVQkNDRT4gIjxVMzE0Mj48VTMxNTU+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQllFT0JTCis8VUJDQ0Y+ICI8VTMxNDI+PFUzMTU1PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEJZRU9TCis8VUJDRDA+ICI8VTMxNDI+PFUzMTU1PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEJZRU9TUworPFVCQ0QxPiAiPFUzMTQyPjxVMzE1NT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUVPTkcKKzxVQkNEMj4gIjxVMzE0Mj48VTMxNTU+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQllFT0oKKzxVQkNEMz4gIjxVMzE0Mj48VTMxNTU+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllFT0MKKzxVQkNEND4gIjxVMzE0Mj48VTMxNTU+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllFT0sKKzxVQkNENT4gIjxVMzE0Mj48VTMxNTU+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllFT1QKKzxVQkNENj4gIjxVMzE0Mj48VTMxNTU+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllFT1AKKzxVQkNENz4gIjxVMzE0Mj48VTMxNTU+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllFT0gKKzxVQkNEOD4gIjxVMzE0Mj48VTMxNTY+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUUKKzxVQkNEOT4gIjxVMzE0Mj48VTMxNTY+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllFRworPFVCQ0RBPiAiPFUzMTQyPjxVMzE1Nj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUVHRworPFVCQ0RCPiAiPFUzMTQyPjxVMzE1Nj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUVHUworPFVCQ0RDPiAiPFUzMTQyPjxVMzE1Nj48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUVOCis8VUJDREQ+ICI8VTMxNDI+PFUzMTU2PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEJZRU5JCis8VUJDREU+ICI8VTMxNDI+PFUzMTU2PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEJZRU5ICis8VUJDREY+ICI8VTMxNDI+PFUzMTU2PjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEJZRUQKKzxVQkNFMD4gIjxVMzE0Mj48VTMxNTY+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgQllFTAorPFVCQ0UxPiAiPFUzMTQyPjxVMzE1Nj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUVMRworPFVCQ0UyPiAiPFUzMTQyPjxVMzE1Nj48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUVMTQorPFVCQ0UzPiAiPFUzMTQyPjxVMzE1Nj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUVMQgorPFVCQ0U0PiAiPFUzMTQyPjxVMzE1Nj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUVMUworPFVCQ0U1PiAiPFUzMTQyPjxVMzE1Nj48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUVMVAorPFVCQ0U2PiAiPFUzMTQyPjxVMzE1Nj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUVMUAorPFVCQ0U3PiAiPFUzMTQyPjxVMzE1Nj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUVMSAorPFVCQ0U4PiAiPFUzMTQyPjxVMzE1Nj48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUVNCis8VUJDRTk+ICI8VTMxNDI+PFUzMTU2PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEJZRUIKKzxVQkNFQT4gIjxVMzE0Mj48VTMxNTY+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQllFQlMKKzxVQkNFQj4gIjxVMzE0Mj48VTMxNTY+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQllFUworPFVCQ0VDPiAiPFUzMTQyPjxVMzE1Nj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUVTUworPFVCQ0VEPiAiPFUzMTQyPjxVMzE1Nj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUVORworPFVCQ0VFPiAiPFUzMTQyPjxVMzE1Nj48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUVKCis8VUJDRUY+ICI8VTMxNDI+PFUzMTU2PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEJZRUMKKzxVQkNGMD4gIjxVMzE0Mj48VTMxNTY+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllFSworPFVCQ0YxPiAiPFUzMTQyPjxVMzE1Nj48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUVUCis8VUJDRjI+ICI8VTMxNDI+PFUzMTU2PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEJZRVAKKzxVQkNGMz4gIjxVMzE0Mj48VTMxNTY+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllFSAorPFVCQ0Y0PiAiPFUzMTQyPjxVMzE1Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEJPCis8VUJDRjU+ICI8VTMxNDI+PFUzMTU3PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEJPRworPFVCQ0Y2PiAiPFUzMTQyPjxVMzE1Nz48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBCT0dHCis8VUJDRjc+ICI8VTMxNDI+PFUzMTU3PjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEJPR1MKKzxVQkNGOD4gIjxVMzE0Mj48VTMxNTc+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQk9OCis8VUJDRjk+ICI8VTMxNDI+PFUzMTU3PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEJPTkkKKzxVQkNGQT4gIjxVMzE0Mj48VTMxNTc+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQk9OSAorPFVCQ0ZCPiAiPFUzMTQyPjxVMzE1Nz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBCT0QKKzxVQkNGQz4gIjxVMzE0Mj48VTMxNTc+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgQk9MCis8VUJDRkQ+ICI8VTMxNDI+PFUzMTU3PjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEJPTEcKKzxVQkNGRT4gIjxVMzE0Mj48VTMxNTc+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQk9MTQorPFVCQ0ZGPiAiPFUzMTQyPjxVMzE1Nz48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBCT0xCCis8VUJEMDA+ICI8VTMxNDI+PFUzMTU3PjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEJPTFMKKzxVQkQwMT4gIjxVMzE0Mj48VTMxNTc+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQk9MVAorPFVCRDAyPiAiPFUzMTQyPjxVMzE1Nz48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBCT0xQCis8VUJEMDM+ICI8VTMxNDI+PFUzMTU3PjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEJPTEgKKzxVQkQwND4gIjxVMzE0Mj48VTMxNTc+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQk9NCis8VUJEMDU+ICI8VTMxNDI+PFUzMTU3PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEJPQgorPFVCRDA2PiAiPFUzMTQyPjxVMzE1Nz48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCT0JTCis8VUJEMDc+ICI8VTMxNDI+PFUzMTU3PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEJPUworPFVCRDA4PiAiPFUzMTQyPjxVMzE1Nz48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBCT1NTCis8VUJEMDk+ICI8VTMxNDI+PFUzMTU3PjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEJPTkcKKzxVQkQwQT4gIjxVMzE0Mj48VTMxNTc+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQk9KCis8VUJEMEI+ICI8VTMxNDI+PFUzMTU3PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEJPQworPFVCRDBDPiAiPFUzMTQyPjxVMzE1Nz48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBCT0sKKzxVQkQwRD4gIjxVMzE0Mj48VTMxNTc+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQk9UCis8VUJEMEU+ICI8VTMxNDI+PFUzMTU3PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEJPUAorPFVCRDBGPiAiPFUzMTQyPjxVMzE1Nz48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBCT0gKKzxVQkQxMD4gIjxVMzE0Mj48VTMxNTg+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0EKKzxVQkQxMT4gIjxVMzE0Mj48VTMxNTg+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldBRworPFVCRDEyPiAiPFUzMTQyPjxVMzE1OD48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FHRworPFVCRDEzPiAiPFUzMTQyPjxVMzE1OD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FHUworPFVCRDE0PiAiPFUzMTQyPjxVMzE1OD48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FOCis8VUJEMTU+ICI8VTMxNDI+PFUzMTU4PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEJXQU5JCis8VUJEMTY+ICI8VTMxNDI+PFUzMTU4PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEJXQU5ICis8VUJEMTc+ICI8VTMxNDI+PFUzMTU4PjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEJXQUQKKzxVQkQxOD4gIjxVMzE0Mj48VTMxNTg+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgQldBTAorPFVCRDE5PiAiPFUzMTQyPjxVMzE1OD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FMRworPFVCRDFBPiAiPFUzMTQyPjxVMzE1OD48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FMTQorPFVCRDFCPiAiPFUzMTQyPjxVMzE1OD48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FMQgorPFVCRDFDPiAiPFUzMTQyPjxVMzE1OD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FMUworPFVCRDFEPiAiPFUzMTQyPjxVMzE1OD48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FMVAorPFVCRDFFPiAiPFUzMTQyPjxVMzE1OD48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FMUAorPFVCRDFGPiAiPFUzMTQyPjxVMzE1OD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FMSAorPFVCRDIwPiAiPFUzMTQyPjxVMzE1OD48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FNCis8VUJEMjE+ICI8VTMxNDI+PFUzMTU4PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEJXQUIKKzxVQkQyMj4gIjxVMzE0Mj48VTMxNTg+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQldBQlMKKzxVQkQyMz4gIjxVMzE0Mj48VTMxNTg+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQldBUworPFVCRDI0PiAiPFUzMTQyPjxVMzE1OD48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FTUworPFVCRDI1PiAiPFUzMTQyPjxVMzE1OD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FORworPFVCRDI2PiAiPFUzMTQyPjxVMzE1OD48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FKCis8VUJEMjc+ICI8VTMxNDI+PFUzMTU4PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEJXQUMKKzxVQkQyOD4gIjxVMzE0Mj48VTMxNTg+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldBSworPFVCRDI5PiAiPFUzMTQyPjxVMzE1OD48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FUCis8VUJEMkE+ICI8VTMxNDI+PFUzMTU4PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEJXQVAKKzxVQkQyQj4gIjxVMzE0Mj48VTMxNTg+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldBSAorPFVCRDJDPiAiPFUzMTQyPjxVMzE1OT4iCSUgSEFOR1VMIFNZTExBQkxFIEJXQUUKKzxVQkQyRD4gIjxVMzE0Mj48VTMxNTk+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldBRUcKKzxVQkQyRT4gIjxVMzE0Mj48VTMxNTk+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldBRUdHCis8VUJEMkY+ICI8VTMxNDI+PFUzMTU5PjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEJXQUVHUworPFVCRDMwPiAiPFUzMTQyPjxVMzE1OT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FFTgorPFVCRDMxPiAiPFUzMTQyPjxVMzE1OT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FFTkkKKzxVQkQzMj4gIjxVMzE0Mj48VTMxNTk+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQldBRU5ICis8VUJEMzM+ICI8VTMxNDI+PFUzMTU5PjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEJXQUVECis8VUJEMzQ+ICI8VTMxNDI+PFUzMTU5PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEJXQUVMCis8VUJEMzU+ICI8VTMxNDI+PFUzMTU5PjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEJXQUVMRworPFVCRDM2PiAiPFUzMTQyPjxVMzE1OT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FFTE0KKzxVQkQzNz4gIjxVMzE0Mj48VTMxNTk+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldBRUxCCis8VUJEMzg+ICI8VTMxNDI+PFUzMTU5PjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEJXQUVMUworPFVCRDM5PiAiPFUzMTQyPjxVMzE1OT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FFTFQKKzxVQkQzQT4gIjxVMzE0Mj48VTMxNTk+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldBRUxQCis8VUJEM0I+ICI8VTMxNDI+PFUzMTU5PjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEJXQUVMSAorPFVCRDNDPiAiPFUzMTQyPjxVMzE1OT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FFTQorPFVCRDNEPiAiPFUzMTQyPjxVMzE1OT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FFQgorPFVCRDNFPiAiPFUzMTQyPjxVMzE1OT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FFQlMKKzxVQkQzRj4gIjxVMzE0Mj48VTMxNTk+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQldBRVMKKzxVQkQ0MD4gIjxVMzE0Mj48VTMxNTk+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQldBRVNTCis8VUJENDE+ICI8VTMxNDI+PFUzMTU5PjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEJXQUVORworPFVCRDQyPiAiPFUzMTQyPjxVMzE1OT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FFSgorPFVCRDQzPiAiPFUzMTQyPjxVMzE1OT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FFQworPFVCRDQ0PiAiPFUzMTQyPjxVMzE1OT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FFSworPFVCRDQ1PiAiPFUzMTQyPjxVMzE1OT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FFVAorPFVCRDQ2PiAiPFUzMTQyPjxVMzE1OT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FFUAorPFVCRDQ3PiAiPFUzMTQyPjxVMzE1OT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0FFSAorPFVCRDQ4PiAiPFUzMTQyPjxVMzE1QT4iCSUgSEFOR1VMIFNZTExBQkxFIEJPRQorPFVCRDQ5PiAiPFUzMTQyPjxVMzE1QT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBCT0VHCis8VUJENEE+ICI8VTMxNDI+PFUzMTVBPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEJPRUdHCis8VUJENEI+ICI8VTMxNDI+PFUzMTVBPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEJPRUdTCis8VUJENEM+ICI8VTMxNDI+PFUzMTVBPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEJPRU4KKzxVQkQ0RD4gIjxVMzE0Mj48VTMxNUE+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQk9FTkkKKzxVQkQ0RT4gIjxVMzE0Mj48VTMxNUE+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQk9FTkgKKzxVQkQ0Rj4gIjxVMzE0Mj48VTMxNUE+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQk9FRAorPFVCRDUwPiAiPFUzMTQyPjxVMzE1QT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBCT0VMCis8VUJENTE+ICI8VTMxNDI+PFUzMTVBPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEJPRUxHCis8VUJENTI+ICI8VTMxNDI+PFUzMTVBPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEJPRUxNCis8VUJENTM+ICI8VTMxNDI+PFUzMTVBPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEJPRUxCCis8VUJENTQ+ICI8VTMxNDI+PFUzMTVBPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEJPRUxTCis8VUJENTU+ICI8VTMxNDI+PFUzMTVBPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEJPRUxUCis8VUJENTY+ICI8VTMxNDI+PFUzMTVBPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEJPRUxQCis8VUJENTc+ICI8VTMxNDI+PFUzMTVBPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEJPRUxICis8VUJENTg+ICI8VTMxNDI+PFUzMTVBPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEJPRU0KKzxVQkQ1OT4gIjxVMzE0Mj48VTMxNUE+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQk9FQgorPFVCRDVBPiAiPFUzMTQyPjxVMzE1QT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCT0VCUworPFVCRDVCPiAiPFUzMTQyPjxVMzE1QT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBCT0VTCis8VUJENUM+ICI8VTMxNDI+PFUzMTVBPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEJPRVNTCis8VUJENUQ+ICI8VTMxNDI+PFUzMTVBPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEJPRU5HCis8VUJENUU+ICI8VTMxNDI+PFUzMTVBPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEJPRUoKKzxVQkQ1Rj4gIjxVMzE0Mj48VTMxNUE+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQk9FQworPFVCRDYwPiAiPFUzMTQyPjxVMzE1QT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBCT0VLCis8VUJENjE+ICI8VTMxNDI+PFUzMTVBPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEJPRVQKKzxVQkQ2Mj4gIjxVMzE0Mj48VTMxNUE+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgQk9FUAorPFVCRDYzPiAiPFUzMTQyPjxVMzE1QT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBCT0VICis8VUJENjQ+ICI8VTMxNDI+PFUzMTVCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllPCis8VUJENjU+ICI8VTMxNDI+PFUzMTVCPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEJZT0cKKzxVQkQ2Nj4gIjxVMzE0Mj48VTMxNUI+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllPR0cKKzxVQkQ2Nz4gIjxVMzE0Mj48VTMxNUI+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllPR1MKKzxVQkQ2OD4gIjxVMzE0Mj48VTMxNUI+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQllPTgorPFVCRDY5PiAiPFUzMTQyPjxVMzE1Qj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBCWU9OSQorPFVCRDZBPiAiPFUzMTQyPjxVMzE1Qj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBCWU9OSAorPFVCRDZCPiAiPFUzMTQyPjxVMzE1Qj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBCWU9ECis8VUJENkM+ICI8VTMxNDI+PFUzMTVCPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEJZT0wKKzxVQkQ2RD4gIjxVMzE0Mj48VTMxNUI+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllPTEcKKzxVQkQ2RT4gIjxVMzE0Mj48VTMxNUI+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllPTE0KKzxVQkQ2Rj4gIjxVMzE0Mj48VTMxNUI+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllPTEIKKzxVQkQ3MD4gIjxVMzE0Mj48VTMxNUI+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllPTFMKKzxVQkQ3MT4gIjxVMzE0Mj48VTMxNUI+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllPTFQKKzxVQkQ3Mj4gIjxVMzE0Mj48VTMxNUI+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllPTFAKKzxVQkQ3Mz4gIjxVMzE0Mj48VTMxNUI+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllPTEgKKzxVQkQ3ND4gIjxVMzE0Mj48VTMxNUI+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllPTQorPFVCRDc1PiAiPFUzMTQyPjxVMzE1Qj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBCWU9CCis8VUJENzY+ICI8VTMxNDI+PFUzMTVCPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEJZT0JTCis8VUJENzc+ICI8VTMxNDI+PFUzMTVCPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEJZT1MKKzxVQkQ3OD4gIjxVMzE0Mj48VTMxNUI+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQllPU1MKKzxVQkQ3OT4gIjxVMzE0Mj48VTMxNUI+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQllPTkcKKzxVQkQ3QT4gIjxVMzE0Mj48VTMxNUI+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQllPSgorPFVCRDdCPiAiPFUzMTQyPjxVMzE1Qj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBCWU9DCis8VUJEN0M+ICI8VTMxNDI+PFUzMTVCPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEJZT0sKKzxVQkQ3RD4gIjxVMzE0Mj48VTMxNUI+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllPVAorPFVCRDdFPiAiPFUzMTQyPjxVMzE1Qj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCWU9QCis8VUJEN0Y+ICI8VTMxNDI+PFUzMTVCPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEJZT0gKKzxVQkQ4MD4gIjxVMzE0Mj48VTMxNUM+IgklIEhBTkdVTCBTWUxMQUJMRSBCVQorPFVCRDgxPiAiPFUzMTQyPjxVMzE1Qz48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBCVUcKKzxVQkQ4Mj4gIjxVMzE0Mj48VTMxNUM+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQlVHRworPFVCRDgzPiAiPFUzMTQyPjxVMzE1Qz48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBCVUdTCis8VUJEODQ+ICI8VTMxNDI+PFUzMTVDPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEJVTgorPFVCRDg1PiAiPFUzMTQyPjxVMzE1Qz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBCVU5JCis8VUJEODY+ICI8VTMxNDI+PFUzMTVDPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEJVTkgKKzxVQkQ4Nz4gIjxVMzE0Mj48VTMxNUM+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQlVECis8VUJEODg+ICI8VTMxNDI+PFUzMTVDPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEJVTAorPFVCRDg5PiAiPFUzMTQyPjxVMzE1Qz48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBCVUxHCis8VUJEOEE+ICI8VTMxNDI+PFUzMTVDPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEJVTE0KKzxVQkQ4Qj4gIjxVMzE0Mj48VTMxNUM+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQlVMQgorPFVCRDhDPiAiPFUzMTQyPjxVMzE1Qz48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBCVUxTCis8VUJEOEQ+ICI8VTMxNDI+PFUzMTVDPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEJVTFQKKzxVQkQ4RT4gIjxVMzE0Mj48VTMxNUM+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgQlVMUAorPFVCRDhGPiAiPFUzMTQyPjxVMzE1Qz48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBCVUxICis8VUJEOTA+ICI8VTMxNDI+PFUzMTVDPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEJVTQorPFVCRDkxPiAiPFUzMTQyPjxVMzE1Qz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBCVUIKKzxVQkQ5Mj4gIjxVMzE0Mj48VTMxNUM+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQlVCUworPFVCRDkzPiAiPFUzMTQyPjxVMzE1Qz48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBCVVMKKzxVQkQ5ND4gIjxVMzE0Mj48VTMxNUM+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQlVTUworPFVCRDk1PiAiPFUzMTQyPjxVMzE1Qz48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBCVU5HCis8VUJEOTY+ICI8VTMxNDI+PFUzMTVDPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEJVSgorPFVCRDk3PiAiPFUzMTQyPjxVMzE1Qz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBCVUMKKzxVQkQ5OD4gIjxVMzE0Mj48VTMxNUM+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQlVLCis8VUJEOTk+ICI8VTMxNDI+PFUzMTVDPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEJVVAorPFVCRDlBPiAiPFUzMTQyPjxVMzE1Qz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCVVAKKzxVQkQ5Qj4gIjxVMzE0Mj48VTMxNUM+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQlVICis8VUJEOUM+ICI8VTMxNDI+PFUzMTVEPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldFTworPFVCRDlEPiAiPFUzMTQyPjxVMzE1RD48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0VPRworPFVCRDlFPiAiPFUzMTQyPjxVMzE1RD48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0VPR0cKKzxVQkQ5Rj4gIjxVMzE0Mj48VTMxNUQ+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldFT0dTCis8VUJEQTA+ICI8VTMxNDI+PFUzMTVEPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEJXRU9OCis8VUJEQTE+ICI8VTMxNDI+PFUzMTVEPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEJXRU9OSQorPFVCREEyPiAiPFUzMTQyPjxVMzE1RD48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0VPTkgKKzxVQkRBMz4gIjxVMzE0Mj48VTMxNUQ+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQldFT0QKKzxVQkRBND4gIjxVMzE0Mj48VTMxNUQ+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgQldFT0wKKzxVQkRBNT4gIjxVMzE0Mj48VTMxNUQ+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldFT0xHCis8VUJEQTY+ICI8VTMxNDI+PFUzMTVEPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEJXRU9MTQorPFVCREE3PiAiPFUzMTQyPjxVMzE1RD48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0VPTEIKKzxVQkRBOD4gIjxVMzE0Mj48VTMxNUQ+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldFT0xTCis8VUJEQTk+ICI8VTMxNDI+PFUzMTVEPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEJXRU9MVAorPFVCREFBPiAiPFUzMTQyPjxVMzE1RD48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0VPTFAKKzxVQkRBQj4gIjxVMzE0Mj48VTMxNUQ+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldFT0xICis8VUJEQUM+ICI8VTMxNDI+PFUzMTVEPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEJXRU9NCis8VUJEQUQ+ICI8VTMxNDI+PFUzMTVEPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEJXRU9CCis8VUJEQUU+ICI8VTMxNDI+PFUzMTVEPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEJXRU9CUworPFVCREFGPiAiPFUzMTQyPjxVMzE1RD48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0VPUworPFVCREIwPiAiPFUzMTQyPjxVMzE1RD48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0VPU1MKKzxVQkRCMT4gIjxVMzE0Mj48VTMxNUQ+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQldFT05HCis8VUJEQjI+ICI8VTMxNDI+PFUzMTVEPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEJXRU9KCis8VUJEQjM+ICI8VTMxNDI+PFUzMTVEPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEJXRU9DCis8VUJEQjQ+ICI8VTMxNDI+PFUzMTVEPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEJXRU9LCis8VUJEQjU+ICI8VTMxNDI+PFUzMTVEPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEJXRU9UCis8VUJEQjY+ICI8VTMxNDI+PFUzMTVEPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEJXRU9QCis8VUJEQjc+ICI8VTMxNDI+PFUzMTVEPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEJXRU9ICis8VUJEQjg+ICI8VTMxNDI+PFUzMTVFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldFCis8VUJEQjk+ICI8VTMxNDI+PFUzMTVFPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEJXRUcKKzxVQkRCQT4gIjxVMzE0Mj48VTMxNUU+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldFR0cKKzxVQkRCQj4gIjxVMzE0Mj48VTMxNUU+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldFR1MKKzxVQkRCQz4gIjxVMzE0Mj48VTMxNUU+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQldFTgorPFVCREJEPiAiPFUzMTQyPjxVMzE1RT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0VOSQorPFVCREJFPiAiPFUzMTQyPjxVMzE1RT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0VOSAorPFVCREJGPiAiPFUzMTQyPjxVMzE1RT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0VECis8VUJEQzA+ICI8VTMxNDI+PFUzMTVFPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEJXRUwKKzxVQkRDMT4gIjxVMzE0Mj48VTMxNUU+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldFTEcKKzxVQkRDMj4gIjxVMzE0Mj48VTMxNUU+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldFTE0KKzxVQkRDMz4gIjxVMzE0Mj48VTMxNUU+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldFTEIKKzxVQkRDND4gIjxVMzE0Mj48VTMxNUU+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldFTFMKKzxVQkRDNT4gIjxVMzE0Mj48VTMxNUU+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldFTFQKKzxVQkRDNj4gIjxVMzE0Mj48VTMxNUU+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldFTFAKKzxVQkRDNz4gIjxVMzE0Mj48VTMxNUU+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldFTEgKKzxVQkRDOD4gIjxVMzE0Mj48VTMxNUU+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldFTQorPFVCREM5PiAiPFUzMTQyPjxVMzE1RT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0VCCis8VUJEQ0E+ICI8VTMxNDI+PFUzMTVFPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEJXRUJTCis8VUJEQ0I+ICI8VTMxNDI+PFUzMTVFPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEJXRVMKKzxVQkRDQz4gIjxVMzE0Mj48VTMxNUU+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQldFU1MKKzxVQkRDRD4gIjxVMzE0Mj48VTMxNUU+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQldFTkcKKzxVQkRDRT4gIjxVMzE0Mj48VTMxNUU+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQldFSgorPFVCRENGPiAiPFUzMTQyPjxVMzE1RT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0VDCis8VUJERDA+ICI8VTMxNDI+PFUzMTVFPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEJXRUsKKzxVQkREMT4gIjxVMzE0Mj48VTMxNUU+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldFVAorPFVCREQyPiAiPFUzMTQyPjxVMzE1RT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0VQCis8VUJERDM+ICI8VTMxNDI+PFUzMTVFPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEJXRUgKKzxVQkREND4gIjxVMzE0Mj48VTMxNUY+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0kKKzxVQkRENT4gIjxVMzE0Mj48VTMxNUY+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldJRworPFVCREQ2PiAiPFUzMTQyPjxVMzE1Rj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0lHRworPFVCREQ3PiAiPFUzMTQyPjxVMzE1Rj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0lHUworPFVCREQ4PiAiPFUzMTQyPjxVMzE1Rj48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0lOCis8VUJERDk+ICI8VTMxNDI+PFUzMTVGPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEJXSU5JCis8VUJEREE+ICI8VTMxNDI+PFUzMTVGPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEJXSU5ICis8VUJEREI+ICI8VTMxNDI+PFUzMTVGPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEJXSUQKKzxVQkREQz4gIjxVMzE0Mj48VTMxNUY+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgQldJTAorPFVCREREPiAiPFUzMTQyPjxVMzE1Rj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0lMRworPFVCRERFPiAiPFUzMTQyPjxVMzE1Rj48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0lMTQorPFVCRERGPiAiPFUzMTQyPjxVMzE1Rj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0lMQgorPFVCREUwPiAiPFUzMTQyPjxVMzE1Rj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0lMUworPFVCREUxPiAiPFUzMTQyPjxVMzE1Rj48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0lMVAorPFVCREUyPiAiPFUzMTQyPjxVMzE1Rj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0lMUAorPFVCREUzPiAiPFUzMTQyPjxVMzE1Rj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0lMSAorPFVCREU0PiAiPFUzMTQyPjxVMzE1Rj48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0lNCis8VUJERTU+ICI8VTMxNDI+PFUzMTVGPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEJXSUIKKzxVQkRFNj4gIjxVMzE0Mj48VTMxNUY+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQldJQlMKKzxVQkRFNz4gIjxVMzE0Mj48VTMxNUY+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQldJUworPFVCREU4PiAiPFUzMTQyPjxVMzE1Rj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0lTUworPFVCREU5PiAiPFUzMTQyPjxVMzE1Rj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0lORworPFVCREVBPiAiPFUzMTQyPjxVMzE1Rj48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0lKCis8VUJERUI+ICI8VTMxNDI+PFUzMTVGPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEJXSUMKKzxVQkRFQz4gIjxVMzE0Mj48VTMxNUY+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldJSworPFVCREVEPiAiPFUzMTQyPjxVMzE1Rj48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBCV0lUCis8VUJERUU+ICI8VTMxNDI+PFUzMTVGPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEJXSVAKKzxVQkRFRj4gIjxVMzE0Mj48VTMxNUY+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQldJSAorPFVCREYwPiAiPFUzMTQyPjxVMzE2MD4iCSUgSEFOR1VMIFNZTExBQkxFIEJZVQorPFVCREYxPiAiPFUzMTQyPjxVMzE2MD48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBCWVVHCis8VUJERjI+ICI8VTMxNDI+PFUzMTYwPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEJZVUdHCis8VUJERjM+ICI8VTMxNDI+PFUzMTYwPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEJZVUdTCis8VUJERjQ+ICI8VTMxNDI+PFUzMTYwPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEJZVU4KKzxVQkRGNT4gIjxVMzE0Mj48VTMxNjA+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQllVTkkKKzxVQkRGNj4gIjxVMzE0Mj48VTMxNjA+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQllVTkgKKzxVQkRGNz4gIjxVMzE0Mj48VTMxNjA+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQllVRAorPFVCREY4PiAiPFUzMTQyPjxVMzE2MD48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBCWVVMCis8VUJERjk+ICI8VTMxNDI+PFUzMTYwPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEJZVUxHCis8VUJERkE+ICI8VTMxNDI+PFUzMTYwPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEJZVUxNCis8VUJERkI+ICI8VTMxNDI+PFUzMTYwPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEJZVUxCCis8VUJERkM+ICI8VTMxNDI+PFUzMTYwPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEJZVUxTCis8VUJERkQ+ICI8VTMxNDI+PFUzMTYwPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEJZVUxUCis8VUJERkU+ICI8VTMxNDI+PFUzMTYwPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEJZVUxQCis8VUJERkY+ICI8VTMxNDI+PFUzMTYwPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEJZVUxICis8VUJFMDA+ICI8VTMxNDI+PFUzMTYwPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEJZVU0KKzxVQkUwMT4gIjxVMzE0Mj48VTMxNjA+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllVQgorPFVCRTAyPiAiPFUzMTQyPjxVMzE2MD48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCWVVCUworPFVCRTAzPiAiPFUzMTQyPjxVMzE2MD48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBCWVVTCis8VUJFMDQ+ICI8VTMxNDI+PFUzMTYwPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEJZVVNTCis8VUJFMDU+ICI8VTMxNDI+PFUzMTYwPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEJZVU5HCis8VUJFMDY+ICI8VTMxNDI+PFUzMTYwPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEJZVUoKKzxVQkUwNz4gIjxVMzE0Mj48VTMxNjA+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllVQworPFVCRTA4PiAiPFUzMTQyPjxVMzE2MD48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBCWVVLCis8VUJFMDk+ICI8VTMxNDI+PFUzMTYwPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEJZVVQKKzxVQkUwQT4gIjxVMzE0Mj48VTMxNjA+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllVUAorPFVCRTBCPiAiPFUzMTQyPjxVMzE2MD48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBCWVVICis8VUJFMEM+ICI8VTMxNDI+PFUzMTYxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVVCis8VUJFMEQ+ICI8VTMxNDI+PFUzMTYxPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEJFVUcKKzxVQkUwRT4gIjxVMzE0Mj48VTMxNjE+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVVR0cKKzxVQkUwRj4gIjxVMzE0Mj48VTMxNjE+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVVR1MKKzxVQkUxMD4gIjxVMzE0Mj48VTMxNjE+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVVTgorPFVCRTExPiAiPFUzMTQyPjxVMzE2MT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBCRVVOSQorPFVCRTEyPiAiPFUzMTQyPjxVMzE2MT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBCRVVOSAorPFVCRTEzPiAiPFUzMTQyPjxVMzE2MT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBCRVVECis8VUJFMTQ+ICI8VTMxNDI+PFUzMTYxPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEJFVUwKKzxVQkUxNT4gIjxVMzE0Mj48VTMxNjE+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVVTEcKKzxVQkUxNj4gIjxVMzE0Mj48VTMxNjE+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVVTE0KKzxVQkUxNz4gIjxVMzE0Mj48VTMxNjE+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVVTEIKKzxVQkUxOD4gIjxVMzE0Mj48VTMxNjE+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVVTFMKKzxVQkUxOT4gIjxVMzE0Mj48VTMxNjE+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVVTFQKKzxVQkUxQT4gIjxVMzE0Mj48VTMxNjE+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVVTFAKKzxVQkUxQj4gIjxVMzE0Mj48VTMxNjE+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVVTEgKKzxVQkUxQz4gIjxVMzE0Mj48VTMxNjE+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVVTQorPFVCRTFEPiAiPFUzMTQyPjxVMzE2MT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBCRVVCCis8VUJFMUU+ICI8VTMxNDI+PFUzMTYxPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEJFVUJTCis8VUJFMUY+ICI8VTMxNDI+PFUzMTYxPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEJFVVMKKzxVQkUyMD4gIjxVMzE0Mj48VTMxNjE+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVVU1MKKzxVQkUyMT4gIjxVMzE0Mj48VTMxNjE+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVVTkcKKzxVQkUyMj4gIjxVMzE0Mj48VTMxNjE+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVVSgorPFVCRTIzPiAiPFUzMTQyPjxVMzE2MT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBCRVVDCis8VUJFMjQ+ICI8VTMxNDI+PFUzMTYxPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEJFVUsKKzxVQkUyNT4gIjxVMzE0Mj48VTMxNjE+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkVVVAorPFVCRTI2PiAiPFUzMTQyPjxVMzE2MT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCRVVQCis8VUJFMjc+ICI8VTMxNDI+PFUzMTYxPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEJFVUgKKzxVQkUyOD4gIjxVMzE0Mj48VTMxNjI+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUkKKzxVQkUyOT4gIjxVMzE0Mj48VTMxNjI+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllJRworPFVCRTJBPiAiPFUzMTQyPjxVMzE2Mj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUlHRworPFVCRTJCPiAiPFUzMTQyPjxVMzE2Mj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUlHUworPFVCRTJDPiAiPFUzMTQyPjxVMzE2Mj48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUlOCis8VUJFMkQ+ICI8VTMxNDI+PFUzMTYyPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEJZSU5JCis8VUJFMkU+ICI8VTMxNDI+PFUzMTYyPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEJZSU5ICis8VUJFMkY+ICI8VTMxNDI+PFUzMTYyPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEJZSUQKKzxVQkUzMD4gIjxVMzE0Mj48VTMxNjI+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgQllJTAorPFVCRTMxPiAiPFUzMTQyPjxVMzE2Mj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUlMRworPFVCRTMyPiAiPFUzMTQyPjxVMzE2Mj48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUlMTQorPFVCRTMzPiAiPFUzMTQyPjxVMzE2Mj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUlMQgorPFVCRTM0PiAiPFUzMTQyPjxVMzE2Mj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUlMUworPFVCRTM1PiAiPFUzMTQyPjxVMzE2Mj48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUlMVAorPFVCRTM2PiAiPFUzMTQyPjxVMzE2Mj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUlMUAorPFVCRTM3PiAiPFUzMTQyPjxVMzE2Mj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUlMSAorPFVCRTM4PiAiPFUzMTQyPjxVMzE2Mj48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUlNCis8VUJFMzk+ICI8VTMxNDI+PFUzMTYyPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEJZSUIKKzxVQkUzQT4gIjxVMzE0Mj48VTMxNjI+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQllJQlMKKzxVQkUzQj4gIjxVMzE0Mj48VTMxNjI+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQllJUworPFVCRTNDPiAiPFUzMTQyPjxVMzE2Mj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUlTUworPFVCRTNEPiAiPFUzMTQyPjxVMzE2Mj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUlORworPFVCRTNFPiAiPFUzMTQyPjxVMzE2Mj48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUlKCis8VUJFM0Y+ICI8VTMxNDI+PFUzMTYyPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEJZSUMKKzxVQkU0MD4gIjxVMzE0Mj48VTMxNjI+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllJSworPFVCRTQxPiAiPFUzMTQyPjxVMzE2Mj48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBCWUlUCis8VUJFNDI+ICI8VTMxNDI+PFUzMTYyPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEJZSVAKKzxVQkU0Mz4gIjxVMzE0Mj48VTMxNjI+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQllJSAorPFVCRTQ0PiAiPFUzMTQyPjxVMzE2Mz4iCSUgSEFOR1VMIFNZTExBQkxFIEJJCis8VUJFNDU+ICI8VTMxNDI+PFUzMTYzPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEJJRworPFVCRTQ2PiAiPFUzMTQyPjxVMzE2Mz48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBCSUdHCis8VUJFNDc+ICI8VTMxNDI+PFUzMTYzPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEJJR1MKKzxVQkU0OD4gIjxVMzE0Mj48VTMxNjM+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQklOCis8VUJFNDk+ICI8VTMxNDI+PFUzMTYzPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEJJTkkKKzxVQkU0QT4gIjxVMzE0Mj48VTMxNjM+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQklOSAorPFVCRTRCPiAiPFUzMTQyPjxVMzE2Mz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBCSUQKKzxVQkU0Qz4gIjxVMzE0Mj48VTMxNjM+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgQklMCis8VUJFNEQ+ICI8VTMxNDI+PFUzMTYzPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEJJTEcKKzxVQkU0RT4gIjxVMzE0Mj48VTMxNjM+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQklMTQorPFVCRTRGPiAiPFUzMTQyPjxVMzE2Mz48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBCSUxCCis8VUJFNTA+ICI8VTMxNDI+PFUzMTYzPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEJJTFMKKzxVQkU1MT4gIjxVMzE0Mj48VTMxNjM+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQklMVAorPFVCRTUyPiAiPFUzMTQyPjxVMzE2Mz48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBCSUxQCis8VUJFNTM+ICI8VTMxNDI+PFUzMTYzPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEJJTEgKKzxVQkU1ND4gIjxVMzE0Mj48VTMxNjM+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQklNCis8VUJFNTU+ICI8VTMxNDI+PFUzMTYzPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEJJQgorPFVCRTU2PiAiPFUzMTQyPjxVMzE2Mz48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCSUJTCis8VUJFNTc+ICI8VTMxNDI+PFUzMTYzPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEJJUworPFVCRTU4PiAiPFUzMTQyPjxVMzE2Mz48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBCSVNTCis8VUJFNTk+ICI8VTMxNDI+PFUzMTYzPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEJJTkcKKzxVQkU1QT4gIjxVMzE0Mj48VTMxNjM+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQklKCis8VUJFNUI+ICI8VTMxNDI+PFUzMTYzPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEJJQworPFVCRTVDPiAiPFUzMTQyPjxVMzE2Mz48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBCSUsKKzxVQkU1RD4gIjxVMzE0Mj48VTMxNjM+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQklUCis8VUJFNUU+ICI8VTMxNDI+PFUzMTYzPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEJJUAorPFVCRTVGPiAiPFUzMTQyPjxVMzE2Mz48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBCSUgKKzxVQkU2MD4gIjxVMzE0Mz48VTMxNEY+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkEKKzxVQkU2MT4gIjxVMzE0Mz48VTMxNEY+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJBRworPFVCRTYyPiAiPFUzMTQzPjxVMzE0Rj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFHRworPFVCRTYzPiAiPFUzMTQzPjxVMzE0Rj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFHUworPFVCRTY0PiAiPFUzMTQzPjxVMzE0Rj48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFOCis8VUJFNjU+ICI8VTMxNDM+PFUzMTRGPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCQU5JCis8VUJFNjY+ICI8VTMxNDM+PFUzMTRGPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCQU5ICis8VUJFNjc+ICI8VTMxNDM+PFUzMTRGPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCQUQKKzxVQkU2OD4gIjxVMzE0Mz48VTMxNEY+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJBTAorPFVCRTY5PiAiPFUzMTQzPjxVMzE0Rj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFMRworPFVCRTZBPiAiPFUzMTQzPjxVMzE0Rj48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFMTQorPFVCRTZCPiAiPFUzMTQzPjxVMzE0Rj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFMQgorPFVCRTZDPiAiPFUzMTQzPjxVMzE0Rj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFMUworPFVCRTZEPiAiPFUzMTQzPjxVMzE0Rj48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFMVAorPFVCRTZFPiAiPFUzMTQzPjxVMzE0Rj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFMUAorPFVCRTZGPiAiPFUzMTQzPjxVMzE0Rj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFMSAorPFVCRTcwPiAiPFUzMTQzPjxVMzE0Rj48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFNCis8VUJFNzE+ICI8VTMxNDM+PFUzMTRGPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCQUIKKzxVQkU3Mj4gIjxVMzE0Mz48VTMxNEY+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJBQlMKKzxVQkU3Mz4gIjxVMzE0Mz48VTMxNEY+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJBUworPFVCRTc0PiAiPFUzMTQzPjxVMzE0Rj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFTUworPFVCRTc1PiAiPFUzMTQzPjxVMzE0Rj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFORworPFVCRTc2PiAiPFUzMTQzPjxVMzE0Rj48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFKCis8VUJFNzc+ICI8VTMxNDM+PFUzMTRGPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCQUMKKzxVQkU3OD4gIjxVMzE0Mz48VTMxNEY+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJBSworPFVCRTc5PiAiPFUzMTQzPjxVMzE0Rj48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFUCis8VUJFN0E+ICI8VTMxNDM+PFUzMTRGPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCQVAKKzxVQkU3Qj4gIjxVMzE0Mz48VTMxNEY+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJBSAorPFVCRTdDPiAiPFUzMTQzPjxVMzE1MD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCQUUKKzxVQkU3RD4gIjxVMzE0Mz48VTMxNTA+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJBRUcKKzxVQkU3RT4gIjxVMzE0Mz48VTMxNTA+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJBRUdHCis8VUJFN0Y+ICI8VTMxNDM+PFUzMTUwPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCQUVHUworPFVCRTgwPiAiPFUzMTQzPjxVMzE1MD48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFFTgorPFVCRTgxPiAiPFUzMTQzPjxVMzE1MD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFFTkkKKzxVQkU4Mj4gIjxVMzE0Mz48VTMxNTA+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJBRU5ICis8VUJFODM+ICI8VTMxNDM+PFUzMTUwPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCQUVECis8VUJFODQ+ICI8VTMxNDM+PFUzMTUwPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCQUVMCis8VUJFODU+ICI8VTMxNDM+PFUzMTUwPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCQUVMRworPFVCRTg2PiAiPFUzMTQzPjxVMzE1MD48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFFTE0KKzxVQkU4Nz4gIjxVMzE0Mz48VTMxNTA+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJBRUxCCis8VUJFODg+ICI8VTMxNDM+PFUzMTUwPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCQUVMUworPFVCRTg5PiAiPFUzMTQzPjxVMzE1MD48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFFTFQKKzxVQkU4QT4gIjxVMzE0Mz48VTMxNTA+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJBRUxQCis8VUJFOEI+ICI8VTMxNDM+PFUzMTUwPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCQUVMSAorPFVCRThDPiAiPFUzMTQzPjxVMzE1MD48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFFTQorPFVCRThEPiAiPFUzMTQzPjxVMzE1MD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFFQgorPFVCRThFPiAiPFUzMTQzPjxVMzE1MD48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFFQlMKKzxVQkU4Rj4gIjxVMzE0Mz48VTMxNTA+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJBRVMKKzxVQkU5MD4gIjxVMzE0Mz48VTMxNTA+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJBRVNTCis8VUJFOTE+ICI8VTMxNDM+PFUzMTUwPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCQUVORworPFVCRTkyPiAiPFUzMTQzPjxVMzE1MD48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFFSgorPFVCRTkzPiAiPFUzMTQzPjxVMzE1MD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFFQworPFVCRTk0PiAiPFUzMTQzPjxVMzE1MD48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFFSworPFVCRTk1PiAiPFUzMTQzPjxVMzE1MD48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFFVAorPFVCRTk2PiAiPFUzMTQzPjxVMzE1MD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFFUAorPFVCRTk3PiAiPFUzMTQzPjxVMzE1MD48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkFFSAorPFVCRTk4PiAiPFUzMTQzPjxVMzE1MT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUEKKzxVQkU5OT4gIjxVMzE0Mz48VTMxNTE+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZQUcKKzxVQkU5QT4gIjxVMzE0Mz48VTMxNTE+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZQUdHCis8VUJFOUI+ICI8VTMxNDM+PFUzMTUxPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUFHUworPFVCRTlDPiAiPFUzMTQzPjxVMzE1MT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllBTgorPFVCRTlEPiAiPFUzMTQzPjxVMzE1MT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllBTkkKKzxVQkU5RT4gIjxVMzE0Mz48VTMxNTE+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZQU5ICis8VUJFOUY+ICI8VTMxNDM+PFUzMTUxPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUFECis8VUJFQTA+ICI8VTMxNDM+PFUzMTUxPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUFMCis8VUJFQTE+ICI8VTMxNDM+PFUzMTUxPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUFMRworPFVCRUEyPiAiPFUzMTQzPjxVMzE1MT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllBTE0KKzxVQkVBMz4gIjxVMzE0Mz48VTMxNTE+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZQUxCCis8VUJFQTQ+ICI8VTMxNDM+PFUzMTUxPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUFMUworPFVCRUE1PiAiPFUzMTQzPjxVMzE1MT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllBTFQKKzxVQkVBNj4gIjxVMzE0Mz48VTMxNTE+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZQUxQCis8VUJFQTc+ICI8VTMxNDM+PFUzMTUxPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUFMSAorPFVCRUE4PiAiPFUzMTQzPjxVMzE1MT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllBTQorPFVCRUE5PiAiPFUzMTQzPjxVMzE1MT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllBQgorPFVCRUFBPiAiPFUzMTQzPjxVMzE1MT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllBQlMKKzxVQkVBQj4gIjxVMzE0Mz48VTMxNTE+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZQVMKKzxVQkVBQz4gIjxVMzE0Mz48VTMxNTE+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZQVNTCis8VUJFQUQ+ICI8VTMxNDM+PFUzMTUxPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUFORworPFVCRUFFPiAiPFUzMTQzPjxVMzE1MT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllBSgorPFVCRUFGPiAiPFUzMTQzPjxVMzE1MT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllBQworPFVCRUIwPiAiPFUzMTQzPjxVMzE1MT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllBSworPFVCRUIxPiAiPFUzMTQzPjxVMzE1MT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllBVAorPFVCRUIyPiAiPFUzMTQzPjxVMzE1MT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllBUAorPFVCRUIzPiAiPFUzMTQzPjxVMzE1MT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllBSAorPFVCRUI0PiAiPFUzMTQzPjxVMzE1Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUFFCis8VUJFQjU+ICI8VTMxNDM+PFUzMTUyPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUFFRworPFVCRUI2PiAiPFUzMTQzPjxVMzE1Mj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllBRUdHCis8VUJFQjc+ICI8VTMxNDM+PFUzMTUyPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUFFR1MKKzxVQkVCOD4gIjxVMzE0Mz48VTMxNTI+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZQUVOCis8VUJFQjk+ICI8VTMxNDM+PFUzMTUyPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUFFTkkKKzxVQkVCQT4gIjxVMzE0Mz48VTMxNTI+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZQUVOSAorPFVCRUJCPiAiPFUzMTQzPjxVMzE1Mj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllBRUQKKzxVQkVCQz4gIjxVMzE0Mz48VTMxNTI+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZQUVMCis8VUJFQkQ+ICI8VTMxNDM+PFUzMTUyPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUFFTEcKKzxVQkVCRT4gIjxVMzE0Mz48VTMxNTI+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZQUVMTQorPFVCRUJGPiAiPFUzMTQzPjxVMzE1Mj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllBRUxCCis8VUJFQzA+ICI8VTMxNDM+PFUzMTUyPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUFFTFMKKzxVQkVDMT4gIjxVMzE0Mz48VTMxNTI+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZQUVMVAorPFVCRUMyPiAiPFUzMTQzPjxVMzE1Mj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllBRUxQCis8VUJFQzM+ICI8VTMxNDM+PFUzMTUyPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUFFTEgKKzxVQkVDND4gIjxVMzE0Mz48VTMxNTI+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZQUVNCis8VUJFQzU+ICI8VTMxNDM+PFUzMTUyPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUFFQgorPFVCRUM2PiAiPFUzMTQzPjxVMzE1Mj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllBRUJTCis8VUJFQzc+ICI8VTMxNDM+PFUzMTUyPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUFFUworPFVCRUM4PiAiPFUzMTQzPjxVMzE1Mj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllBRVNTCis8VUJFQzk+ICI8VTMxNDM+PFUzMTUyPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUFFTkcKKzxVQkVDQT4gIjxVMzE0Mz48VTMxNTI+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZQUVKCis8VUJFQ0I+ICI8VTMxNDM+PFUzMTUyPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUFFQworPFVCRUNDPiAiPFUzMTQzPjxVMzE1Mj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllBRUsKKzxVQkVDRD4gIjxVMzE0Mz48VTMxNTI+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZQUVUCis8VUJFQ0U+ICI8VTMxNDM+PFUzMTUyPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUFFUAorPFVCRUNGPiAiPFUzMTQzPjxVMzE1Mj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllBRUgKKzxVQkVEMD4gIjxVMzE0Mz48VTMxNTM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVPCis8VUJFRDE+ICI8VTMxNDM+PFUzMTUzPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCRU9HCis8VUJFRDI+ICI8VTMxNDM+PFUzMTUzPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCRU9HRworPFVCRUQzPiAiPFUzMTQzPjxVMzE1Mz48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVPR1MKKzxVQkVEND4gIjxVMzE0Mz48VTMxNTM+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFT04KKzxVQkVENT4gIjxVMzE0Mz48VTMxNTM+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFT05JCis8VUJFRDY+ICI8VTMxNDM+PFUzMTUzPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCRU9OSAorPFVCRUQ3PiAiPFUzMTQzPjxVMzE1Mz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVPRAorPFVCRUQ4PiAiPFUzMTQzPjxVMzE1Mz48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVPTAorPFVCRUQ5PiAiPFUzMTQzPjxVMzE1Mz48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVPTEcKKzxVQkVEQT4gIjxVMzE0Mz48VTMxNTM+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFT0xNCis8VUJFREI+ICI8VTMxNDM+PFUzMTUzPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCRU9MQgorPFVCRURDPiAiPFUzMTQzPjxVMzE1Mz48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVPTFMKKzxVQkVERD4gIjxVMzE0Mz48VTMxNTM+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFT0xUCis8VUJFREU+ICI8VTMxNDM+PFUzMTUzPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCRU9MUAorPFVCRURGPiAiPFUzMTQzPjxVMzE1Mz48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVPTEgKKzxVQkVFMD4gIjxVMzE0Mz48VTMxNTM+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFT00KKzxVQkVFMT4gIjxVMzE0Mz48VTMxNTM+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFT0IKKzxVQkVFMj4gIjxVMzE0Mz48VTMxNTM+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFT0JTCis8VUJFRTM+ICI8VTMxNDM+PFUzMTUzPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCRU9TCis8VUJFRTQ+ICI8VTMxNDM+PFUzMTUzPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCRU9TUworPFVCRUU1PiAiPFUzMTQzPjxVMzE1Mz48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVPTkcKKzxVQkVFNj4gIjxVMzE0Mz48VTMxNTM+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFT0oKKzxVQkVFNz4gIjxVMzE0Mz48VTMxNTM+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFT0MKKzxVQkVFOD4gIjxVMzE0Mz48VTMxNTM+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFT0sKKzxVQkVFOT4gIjxVMzE0Mz48VTMxNTM+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFT1QKKzxVQkVFQT4gIjxVMzE0Mz48VTMxNTM+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFT1AKKzxVQkVFQj4gIjxVMzE0Mz48VTMxNTM+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFT0gKKzxVQkVFQz4gIjxVMzE0Mz48VTMxNTQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkUKKzxVQkVFRD4gIjxVMzE0Mz48VTMxNTQ+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFRworPFVCRUVFPiAiPFUzMTQzPjxVMzE1ND48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVHRworPFVCRUVGPiAiPFUzMTQzPjxVMzE1ND48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVHUworPFVCRUYwPiAiPFUzMTQzPjxVMzE1ND48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVOCis8VUJFRjE+ICI8VTMxNDM+PFUzMTU0PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCRU5JCis8VUJFRjI+ICI8VTMxNDM+PFUzMTU0PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCRU5ICis8VUJFRjM+ICI8VTMxNDM+PFUzMTU0PjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCRUQKKzxVQkVGND4gIjxVMzE0Mz48VTMxNTQ+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFTAorPFVCRUY1PiAiPFUzMTQzPjxVMzE1ND48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVMRworPFVCRUY2PiAiPFUzMTQzPjxVMzE1ND48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVMTQorPFVCRUY3PiAiPFUzMTQzPjxVMzE1ND48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVMQgorPFVCRUY4PiAiPFUzMTQzPjxVMzE1ND48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVMUworPFVCRUY5PiAiPFUzMTQzPjxVMzE1ND48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVMVAorPFVCRUZBPiAiPFUzMTQzPjxVMzE1ND48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVMUAorPFVCRUZCPiAiPFUzMTQzPjxVMzE1ND48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVMSAorPFVCRUZDPiAiPFUzMTQzPjxVMzE1ND48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVNCis8VUJFRkQ+ICI8VTMxNDM+PFUzMTU0PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCRUIKKzxVQkVGRT4gIjxVMzE0Mz48VTMxNTQ+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFQlMKKzxVQkVGRj4gIjxVMzE0Mz48VTMxNTQ+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFUworPFVCRjAwPiAiPFUzMTQzPjxVMzE1ND48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVTUworPFVCRjAxPiAiPFUzMTQzPjxVMzE1ND48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVORworPFVCRjAyPiAiPFUzMTQzPjxVMzE1ND48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVKCis8VUJGMDM+ICI8VTMxNDM+PFUzMTU0PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCRUMKKzxVQkYwND4gIjxVMzE0Mz48VTMxNTQ+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFSworPFVCRjA1PiAiPFUzMTQzPjxVMzE1ND48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVUCis8VUJGMDY+ICI8VTMxNDM+PFUzMTU0PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCRVAKKzxVQkYwNz4gIjxVMzE0Mz48VTMxNTQ+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFSAorPFVCRjA4PiAiPFUzMTQzPjxVMzE1NT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUVPCis8VUJGMDk+ICI8VTMxNDM+PFUzMTU1PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUVPRworPFVCRjBBPiAiPFUzMTQzPjxVMzE1NT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllFT0dHCis8VUJGMEI+ICI8VTMxNDM+PFUzMTU1PjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUVPR1MKKzxVQkYwQz4gIjxVMzE0Mz48VTMxNTU+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZRU9OCis8VUJGMEQ+ICI8VTMxNDM+PFUzMTU1PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUVPTkkKKzxVQkYwRT4gIjxVMzE0Mz48VTMxNTU+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZRU9OSAorPFVCRjBGPiAiPFUzMTQzPjxVMzE1NT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllFT0QKKzxVQkYxMD4gIjxVMzE0Mz48VTMxNTU+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZRU9MCis8VUJGMTE+ICI8VTMxNDM+PFUzMTU1PjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUVPTEcKKzxVQkYxMj4gIjxVMzE0Mz48VTMxNTU+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZRU9MTQorPFVCRjEzPiAiPFUzMTQzPjxVMzE1NT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllFT0xCCis8VUJGMTQ+ICI8VTMxNDM+PFUzMTU1PjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUVPTFMKKzxVQkYxNT4gIjxVMzE0Mz48VTMxNTU+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZRU9MVAorPFVCRjE2PiAiPFUzMTQzPjxVMzE1NT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllFT0xQCis8VUJGMTc+ICI8VTMxNDM+PFUzMTU1PjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUVPTEgKKzxVQkYxOD4gIjxVMzE0Mz48VTMxNTU+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZRU9NCis8VUJGMTk+ICI8VTMxNDM+PFUzMTU1PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUVPQgorPFVCRjFBPiAiPFUzMTQzPjxVMzE1NT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllFT0JTCis8VUJGMUI+ICI8VTMxNDM+PFUzMTU1PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUVPUworPFVCRjFDPiAiPFUzMTQzPjxVMzE1NT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllFT1NTCis8VUJGMUQ+ICI8VTMxNDM+PFUzMTU1PjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUVPTkcKKzxVQkYxRT4gIjxVMzE0Mz48VTMxNTU+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZRU9KCis8VUJGMUY+ICI8VTMxNDM+PFUzMTU1PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUVPQworPFVCRjIwPiAiPFUzMTQzPjxVMzE1NT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllFT0sKKzxVQkYyMT4gIjxVMzE0Mz48VTMxNTU+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZRU9UCis8VUJGMjI+ICI8VTMxNDM+PFUzMTU1PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUVPUAorPFVCRjIzPiAiPFUzMTQzPjxVMzE1NT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllFT0gKKzxVQkYyND4gIjxVMzE0Mz48VTMxNTY+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllFCis8VUJGMjU+ICI8VTMxNDM+PFUzMTU2PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUVHCis8VUJGMjY+ICI8VTMxNDM+PFUzMTU2PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUVHRworPFVCRjI3PiAiPFUzMTQzPjxVMzE1Nj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllFR1MKKzxVQkYyOD4gIjxVMzE0Mz48VTMxNTY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZRU4KKzxVQkYyOT4gIjxVMzE0Mz48VTMxNTY+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZRU5JCis8VUJGMkE+ICI8VTMxNDM+PFUzMTU2PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUVOSAorPFVCRjJCPiAiPFUzMTQzPjxVMzE1Nj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllFRAorPFVCRjJDPiAiPFUzMTQzPjxVMzE1Nj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllFTAorPFVCRjJEPiAiPFUzMTQzPjxVMzE1Nj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllFTEcKKzxVQkYyRT4gIjxVMzE0Mz48VTMxNTY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZRUxNCis8VUJGMkY+ICI8VTMxNDM+PFUzMTU2PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUVMQgorPFVCRjMwPiAiPFUzMTQzPjxVMzE1Nj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllFTFMKKzxVQkYzMT4gIjxVMzE0Mz48VTMxNTY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZRUxUCis8VUJGMzI+ICI8VTMxNDM+PFUzMTU2PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUVMUAorPFVCRjMzPiAiPFUzMTQzPjxVMzE1Nj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllFTEgKKzxVQkYzND4gIjxVMzE0Mz48VTMxNTY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZRU0KKzxVQkYzNT4gIjxVMzE0Mz48VTMxNTY+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZRUIKKzxVQkYzNj4gIjxVMzE0Mz48VTMxNTY+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZRUJTCis8VUJGMzc+ICI8VTMxNDM+PFUzMTU2PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUVTCis8VUJGMzg+ICI8VTMxNDM+PFUzMTU2PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUVTUworPFVCRjM5PiAiPFUzMTQzPjxVMzE1Nj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllFTkcKKzxVQkYzQT4gIjxVMzE0Mz48VTMxNTY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZRUoKKzxVQkYzQj4gIjxVMzE0Mz48VTMxNTY+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZRUMKKzxVQkYzQz4gIjxVMzE0Mz48VTMxNTY+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZRUsKKzxVQkYzRD4gIjxVMzE0Mz48VTMxNTY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZRVQKKzxVQkYzRT4gIjxVMzE0Mz48VTMxNTY+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZRVAKKzxVQkYzRj4gIjxVMzE0Mz48VTMxNTY+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZRUgKKzxVQkY0MD4gIjxVMzE0Mz48VTMxNTc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQk8KKzxVQkY0MT4gIjxVMzE0Mz48VTMxNTc+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJPRworPFVCRjQyPiAiPFUzMTQzPjxVMzE1Nz48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBCQk9HRworPFVCRjQzPiAiPFUzMTQzPjxVMzE1Nz48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQk9HUworPFVCRjQ0PiAiPFUzMTQzPjxVMzE1Nz48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCQk9OCis8VUJGNDU+ICI8VTMxNDM+PFUzMTU3PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCT05JCis8VUJGNDY+ICI8VTMxNDM+PFUzMTU3PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCT05ICis8VUJGNDc+ICI8VTMxNDM+PFUzMTU3PjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCT0QKKzxVQkY0OD4gIjxVMzE0Mz48VTMxNTc+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJPTAorPFVCRjQ5PiAiPFUzMTQzPjxVMzE1Nz48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBCQk9MRworPFVCRjRBPiAiPFUzMTQzPjxVMzE1Nz48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBCQk9MTQorPFVCRjRCPiAiPFUzMTQzPjxVMzE1Nz48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBCQk9MQgorPFVCRjRDPiAiPFUzMTQzPjxVMzE1Nz48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBCQk9MUworPFVCRjREPiAiPFUzMTQzPjxVMzE1Nz48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBCQk9MVAorPFVCRjRFPiAiPFUzMTQzPjxVMzE1Nz48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBCQk9MUAorPFVCRjRGPiAiPFUzMTQzPjxVMzE1Nz48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBCQk9MSAorPFVCRjUwPiAiPFUzMTQzPjxVMzE1Nz48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBCQk9NCis8VUJGNTE+ICI8VTMxNDM+PFUzMTU3PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCT0IKKzxVQkY1Mj4gIjxVMzE0Mz48VTMxNTc+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJPQlMKKzxVQkY1Mz4gIjxVMzE0Mz48VTMxNTc+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJPUworPFVCRjU0PiAiPFUzMTQzPjxVMzE1Nz48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBCQk9TUworPFVCRjU1PiAiPFUzMTQzPjxVMzE1Nz48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQk9ORworPFVCRjU2PiAiPFUzMTQzPjxVMzE1Nz48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBCQk9KCis8VUJGNTc+ICI8VTMxNDM+PFUzMTU3PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCT0MKKzxVQkY1OD4gIjxVMzE0Mz48VTMxNTc+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJPSworPFVCRjU5PiAiPFUzMTQzPjxVMzE1Nz48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQk9UCis8VUJGNUE+ICI8VTMxNDM+PFUzMTU3PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCT1AKKzxVQkY1Qj4gIjxVMzE0Mz48VTMxNTc+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJPSAorPFVCRjVDPiAiPFUzMTQzPjxVMzE1OD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0EKKzxVQkY1RD4gIjxVMzE0Mz48VTMxNTg+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXQUcKKzxVQkY1RT4gIjxVMzE0Mz48VTMxNTg+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXQUdHCis8VUJGNUY+ICI8VTMxNDM+PFUzMTU4PjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0FHUworPFVCRjYwPiAiPFUzMTQzPjxVMzE1OD48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldBTgorPFVCRjYxPiAiPFUzMTQzPjxVMzE1OD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldBTkkKKzxVQkY2Mj4gIjxVMzE0Mz48VTMxNTg+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXQU5ICis8VUJGNjM+ICI8VTMxNDM+PFUzMTU4PjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0FECis8VUJGNjQ+ICI8VTMxNDM+PFUzMTU4PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0FMCis8VUJGNjU+ICI8VTMxNDM+PFUzMTU4PjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0FMRworPFVCRjY2PiAiPFUzMTQzPjxVMzE1OD48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldBTE0KKzxVQkY2Nz4gIjxVMzE0Mz48VTMxNTg+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXQUxCCis8VUJGNjg+ICI8VTMxNDM+PFUzMTU4PjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0FMUworPFVCRjY5PiAiPFUzMTQzPjxVMzE1OD48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldBTFQKKzxVQkY2QT4gIjxVMzE0Mz48VTMxNTg+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXQUxQCis8VUJGNkI+ICI8VTMxNDM+PFUzMTU4PjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0FMSAorPFVCRjZDPiAiPFUzMTQzPjxVMzE1OD48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldBTQorPFVCRjZEPiAiPFUzMTQzPjxVMzE1OD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldBQgorPFVCRjZFPiAiPFUzMTQzPjxVMzE1OD48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldBQlMKKzxVQkY2Rj4gIjxVMzE0Mz48VTMxNTg+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXQVMKKzxVQkY3MD4gIjxVMzE0Mz48VTMxNTg+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXQVNTCis8VUJGNzE+ICI8VTMxNDM+PFUzMTU4PjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0FORworPFVCRjcyPiAiPFUzMTQzPjxVMzE1OD48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldBSgorPFVCRjczPiAiPFUzMTQzPjxVMzE1OD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldBQworPFVCRjc0PiAiPFUzMTQzPjxVMzE1OD48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldBSworPFVCRjc1PiAiPFUzMTQzPjxVMzE1OD48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldBVAorPFVCRjc2PiAiPFUzMTQzPjxVMzE1OD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldBUAorPFVCRjc3PiAiPFUzMTQzPjxVMzE1OD48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldBSAorPFVCRjc4PiAiPFUzMTQzPjxVMzE1OT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0FFCis8VUJGNzk+ICI8VTMxNDM+PFUzMTU5PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0FFRworPFVCRjdBPiAiPFUzMTQzPjxVMzE1OT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldBRUdHCis8VUJGN0I+ICI8VTMxNDM+PFUzMTU5PjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0FFR1MKKzxVQkY3Qz4gIjxVMzE0Mz48VTMxNTk+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXQUVOCis8VUJGN0Q+ICI8VTMxNDM+PFUzMTU5PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0FFTkkKKzxVQkY3RT4gIjxVMzE0Mz48VTMxNTk+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXQUVOSAorPFVCRjdGPiAiPFUzMTQzPjxVMzE1OT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldBRUQKKzxVQkY4MD4gIjxVMzE0Mz48VTMxNTk+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXQUVMCis8VUJGODE+ICI8VTMxNDM+PFUzMTU5PjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0FFTEcKKzxVQkY4Mj4gIjxVMzE0Mz48VTMxNTk+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXQUVMTQorPFVCRjgzPiAiPFUzMTQzPjxVMzE1OT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldBRUxCCis8VUJGODQ+ICI8VTMxNDM+PFUzMTU5PjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0FFTFMKKzxVQkY4NT4gIjxVMzE0Mz48VTMxNTk+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXQUVMVAorPFVCRjg2PiAiPFUzMTQzPjxVMzE1OT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldBRUxQCis8VUJGODc+ICI8VTMxNDM+PFUzMTU5PjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0FFTEgKKzxVQkY4OD4gIjxVMzE0Mz48VTMxNTk+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXQUVNCis8VUJGODk+ICI8VTMxNDM+PFUzMTU5PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0FFQgorPFVCRjhBPiAiPFUzMTQzPjxVMzE1OT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldBRUJTCis8VUJGOEI+ICI8VTMxNDM+PFUzMTU5PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0FFUworPFVCRjhDPiAiPFUzMTQzPjxVMzE1OT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldBRVNTCis8VUJGOEQ+ICI8VTMxNDM+PFUzMTU5PjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0FFTkcKKzxVQkY4RT4gIjxVMzE0Mz48VTMxNTk+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXQUVKCis8VUJGOEY+ICI8VTMxNDM+PFUzMTU5PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0FFQworPFVCRjkwPiAiPFUzMTQzPjxVMzE1OT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldBRUsKKzxVQkY5MT4gIjxVMzE0Mz48VTMxNTk+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXQUVUCis8VUJGOTI+ICI8VTMxNDM+PFUzMTU5PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0FFUAorPFVCRjkzPiAiPFUzMTQzPjxVMzE1OT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldBRUgKKzxVQkY5ND4gIjxVMzE0Mz48VTMxNUE+IgklIEhBTkdVTCBTWUxMQUJMRSBCQk9FCis8VUJGOTU+ICI8VTMxNDM+PFUzMTVBPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCT0VHCis8VUJGOTY+ICI8VTMxNDM+PFUzMTVBPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCT0VHRworPFVCRjk3PiAiPFUzMTQzPjxVMzE1QT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQk9FR1MKKzxVQkY5OD4gIjxVMzE0Mz48VTMxNUE+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJPRU4KKzxVQkY5OT4gIjxVMzE0Mz48VTMxNUE+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJPRU5JCis8VUJGOUE+ICI8VTMxNDM+PFUzMTVBPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCT0VOSAorPFVCRjlCPiAiPFUzMTQzPjxVMzE1QT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQk9FRAorPFVCRjlDPiAiPFUzMTQzPjxVMzE1QT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBCQk9FTAorPFVCRjlEPiAiPFUzMTQzPjxVMzE1QT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBCQk9FTEcKKzxVQkY5RT4gIjxVMzE0Mz48VTMxNUE+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJPRUxNCis8VUJGOUY+ICI8VTMxNDM+PFUzMTVBPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCT0VMQgorPFVCRkEwPiAiPFUzMTQzPjxVMzE1QT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBCQk9FTFMKKzxVQkZBMT4gIjxVMzE0Mz48VTMxNUE+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJPRUxUCis8VUJGQTI+ICI8VTMxNDM+PFUzMTVBPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCT0VMUAorPFVCRkEzPiAiPFUzMTQzPjxVMzE1QT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBCQk9FTEgKKzxVQkZBND4gIjxVMzE0Mz48VTMxNUE+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJPRU0KKzxVQkZBNT4gIjxVMzE0Mz48VTMxNUE+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJPRUIKKzxVQkZBNj4gIjxVMzE0Mz48VTMxNUE+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJPRUJTCis8VUJGQTc+ICI8VTMxNDM+PFUzMTVBPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCT0VTCis8VUJGQTg+ICI8VTMxNDM+PFUzMTVBPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCT0VTUworPFVCRkE5PiAiPFUzMTQzPjxVMzE1QT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQk9FTkcKKzxVQkZBQT4gIjxVMzE0Mz48VTMxNUE+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJPRUoKKzxVQkZBQj4gIjxVMzE0Mz48VTMxNUE+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJPRUMKKzxVQkZBQz4gIjxVMzE0Mz48VTMxNUE+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJPRUsKKzxVQkZBRD4gIjxVMzE0Mz48VTMxNUE+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJPRVQKKzxVQkZBRT4gIjxVMzE0Mz48VTMxNUE+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJPRVAKKzxVQkZBRj4gIjxVMzE0Mz48VTMxNUE+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJPRUgKKzxVQkZCMD4gIjxVMzE0Mz48VTMxNUI+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllPCis8VUJGQjE+ICI8VTMxNDM+PFUzMTVCPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWU9HCis8VUJGQjI+ICI8VTMxNDM+PFUzMTVCPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWU9HRworPFVCRkIzPiAiPFUzMTQzPjxVMzE1Qj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllPR1MKKzxVQkZCND4gIjxVMzE0Mz48VTMxNUI+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZT04KKzxVQkZCNT4gIjxVMzE0Mz48VTMxNUI+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZT05JCis8VUJGQjY+ICI8VTMxNDM+PFUzMTVCPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWU9OSAorPFVCRkI3PiAiPFUzMTQzPjxVMzE1Qj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllPRAorPFVCRkI4PiAiPFUzMTQzPjxVMzE1Qj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllPTAorPFVCRkI5PiAiPFUzMTQzPjxVMzE1Qj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllPTEcKKzxVQkZCQT4gIjxVMzE0Mz48VTMxNUI+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZT0xNCis8VUJGQkI+ICI8VTMxNDM+PFUzMTVCPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWU9MQgorPFVCRkJDPiAiPFUzMTQzPjxVMzE1Qj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllPTFMKKzxVQkZCRD4gIjxVMzE0Mz48VTMxNUI+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZT0xUCis8VUJGQkU+ICI8VTMxNDM+PFUzMTVCPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWU9MUAorPFVCRkJGPiAiPFUzMTQzPjxVMzE1Qj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllPTEgKKzxVQkZDMD4gIjxVMzE0Mz48VTMxNUI+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZT00KKzxVQkZDMT4gIjxVMzE0Mz48VTMxNUI+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZT0IKKzxVQkZDMj4gIjxVMzE0Mz48VTMxNUI+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZT0JTCis8VUJGQzM+ICI8VTMxNDM+PFUzMTVCPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWU9TCis8VUJGQzQ+ICI8VTMxNDM+PFUzMTVCPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWU9TUworPFVCRkM1PiAiPFUzMTQzPjxVMzE1Qj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllPTkcKKzxVQkZDNj4gIjxVMzE0Mz48VTMxNUI+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZT0oKKzxVQkZDNz4gIjxVMzE0Mz48VTMxNUI+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZT0MKKzxVQkZDOD4gIjxVMzE0Mz48VTMxNUI+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZT0sKKzxVQkZDOT4gIjxVMzE0Mz48VTMxNUI+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZT1QKKzxVQkZDQT4gIjxVMzE0Mz48VTMxNUI+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZT1AKKzxVQkZDQj4gIjxVMzE0Mz48VTMxNUI+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZT0gKKzxVQkZDQz4gIjxVMzE0Mz48VTMxNUM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQlUKKzxVQkZDRD4gIjxVMzE0Mz48VTMxNUM+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJVRworPFVCRkNFPiAiPFUzMTQzPjxVMzE1Qz48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBCQlVHRworPFVCRkNGPiAiPFUzMTQzPjxVMzE1Qz48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQlVHUworPFVCRkQwPiAiPFUzMTQzPjxVMzE1Qz48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCQlVOCis8VUJGRDE+ICI8VTMxNDM+PFUzMTVDPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCVU5JCis8VUJGRDI+ICI8VTMxNDM+PFUzMTVDPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCVU5ICis8VUJGRDM+ICI8VTMxNDM+PFUzMTVDPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCVUQKKzxVQkZEND4gIjxVMzE0Mz48VTMxNUM+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJVTAorPFVCRkQ1PiAiPFUzMTQzPjxVMzE1Qz48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBCQlVMRworPFVCRkQ2PiAiPFUzMTQzPjxVMzE1Qz48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBCQlVMTQorPFVCRkQ3PiAiPFUzMTQzPjxVMzE1Qz48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBCQlVMQgorPFVCRkQ4PiAiPFUzMTQzPjxVMzE1Qz48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBCQlVMUworPFVCRkQ5PiAiPFUzMTQzPjxVMzE1Qz48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBCQlVMVAorPFVCRkRBPiAiPFUzMTQzPjxVMzE1Qz48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBCQlVMUAorPFVCRkRCPiAiPFUzMTQzPjxVMzE1Qz48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBCQlVMSAorPFVCRkRDPiAiPFUzMTQzPjxVMzE1Qz48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBCQlVNCis8VUJGREQ+ICI8VTMxNDM+PFUzMTVDPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCVUIKKzxVQkZERT4gIjxVMzE0Mz48VTMxNUM+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJVQlMKKzxVQkZERj4gIjxVMzE0Mz48VTMxNUM+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJVUworPFVCRkUwPiAiPFUzMTQzPjxVMzE1Qz48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBCQlVTUworPFVCRkUxPiAiPFUzMTQzPjxVMzE1Qz48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQlVORworPFVCRkUyPiAiPFUzMTQzPjxVMzE1Qz48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBCQlVKCis8VUJGRTM+ICI8VTMxNDM+PFUzMTVDPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCVUMKKzxVQkZFND4gIjxVMzE0Mz48VTMxNUM+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJVSworPFVCRkU1PiAiPFUzMTQzPjxVMzE1Qz48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQlVUCis8VUJGRTY+ICI8VTMxNDM+PFUzMTVDPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCVVAKKzxVQkZFNz4gIjxVMzE0Mz48VTMxNUM+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJVSAorPFVCRkU4PiAiPFUzMTQzPjxVMzE1RD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0VPCis8VUJGRTk+ICI8VTMxNDM+PFUzMTVEPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0VPRworPFVCRkVBPiAiPFUzMTQzPjxVMzE1RD48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldFT0dHCis8VUJGRUI+ICI8VTMxNDM+PFUzMTVEPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0VPR1MKKzxVQkZFQz4gIjxVMzE0Mz48VTMxNUQ+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXRU9OCis8VUJGRUQ+ICI8VTMxNDM+PFUzMTVEPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0VPTkkKKzxVQkZFRT4gIjxVMzE0Mz48VTMxNUQ+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXRU9OSAorPFVCRkVGPiAiPFUzMTQzPjxVMzE1RD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldFT0QKKzxVQkZGMD4gIjxVMzE0Mz48VTMxNUQ+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXRU9MCis8VUJGRjE+ICI8VTMxNDM+PFUzMTVEPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0VPTEcKKzxVQkZGMj4gIjxVMzE0Mz48VTMxNUQ+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXRU9MTQorPFVCRkYzPiAiPFUzMTQzPjxVMzE1RD48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldFT0xCCis8VUJGRjQ+ICI8VTMxNDM+PFUzMTVEPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0VPTFMKKzxVQkZGNT4gIjxVMzE0Mz48VTMxNUQ+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXRU9MVAorPFVCRkY2PiAiPFUzMTQzPjxVMzE1RD48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldFT0xQCis8VUJGRjc+ICI8VTMxNDM+PFUzMTVEPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0VPTEgKKzxVQkZGOD4gIjxVMzE0Mz48VTMxNUQ+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXRU9NCis8VUJGRjk+ICI8VTMxNDM+PFUzMTVEPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0VPQgorPFVCRkZBPiAiPFUzMTQzPjxVMzE1RD48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldFT0JTCis8VUJGRkI+ICI8VTMxNDM+PFUzMTVEPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0VPUworPFVCRkZDPiAiPFUzMTQzPjxVMzE1RD48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldFT1NTCis8VUJGRkQ+ICI8VTMxNDM+PFUzMTVEPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0VPTkcKKzxVQkZGRT4gIjxVMzE0Mz48VTMxNUQ+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXRU9KCis8VUJGRkY+ICI8VTMxNDM+PFUzMTVEPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0VPQworPFVDMDAwPiAiPFUzMTQzPjxVMzE1RD48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldFT0sKKzxVQzAwMT4gIjxVMzE0Mz48VTMxNUQ+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXRU9UCis8VUMwMDI+ICI8VTMxNDM+PFUzMTVEPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0VPUAorPFVDMDAzPiAiPFUzMTQzPjxVMzE1RD48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldFT0gKKzxVQzAwND4gIjxVMzE0Mz48VTMxNUU+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldFCis8VUMwMDU+ICI8VTMxNDM+PFUzMTVFPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0VHCis8VUMwMDY+ICI8VTMxNDM+PFUzMTVFPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0VHRworPFVDMDA3PiAiPFUzMTQzPjxVMzE1RT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldFR1MKKzxVQzAwOD4gIjxVMzE0Mz48VTMxNUU+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXRU4KKzxVQzAwOT4gIjxVMzE0Mz48VTMxNUU+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXRU5JCis8VUMwMEE+ICI8VTMxNDM+PFUzMTVFPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0VOSAorPFVDMDBCPiAiPFUzMTQzPjxVMzE1RT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldFRAorPFVDMDBDPiAiPFUzMTQzPjxVMzE1RT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldFTAorPFVDMDBEPiAiPFUzMTQzPjxVMzE1RT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldFTEcKKzxVQzAwRT4gIjxVMzE0Mz48VTMxNUU+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXRUxNCis8VUMwMEY+ICI8VTMxNDM+PFUzMTVFPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0VMQgorPFVDMDEwPiAiPFUzMTQzPjxVMzE1RT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldFTFMKKzxVQzAxMT4gIjxVMzE0Mz48VTMxNUU+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXRUxUCis8VUMwMTI+ICI8VTMxNDM+PFUzMTVFPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0VMUAorPFVDMDEzPiAiPFUzMTQzPjxVMzE1RT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldFTEgKKzxVQzAxND4gIjxVMzE0Mz48VTMxNUU+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXRU0KKzxVQzAxNT4gIjxVMzE0Mz48VTMxNUU+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXRUIKKzxVQzAxNj4gIjxVMzE0Mz48VTMxNUU+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXRUJTCis8VUMwMTc+ICI8VTMxNDM+PFUzMTVFPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0VTCis8VUMwMTg+ICI8VTMxNDM+PFUzMTVFPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0VTUworPFVDMDE5PiAiPFUzMTQzPjxVMzE1RT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldFTkcKKzxVQzAxQT4gIjxVMzE0Mz48VTMxNUU+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXRUoKKzxVQzAxQj4gIjxVMzE0Mz48VTMxNUU+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXRUMKKzxVQzAxQz4gIjxVMzE0Mz48VTMxNUU+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXRUsKKzxVQzAxRD4gIjxVMzE0Mz48VTMxNUU+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXRVQKKzxVQzAxRT4gIjxVMzE0Mz48VTMxNUU+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXRVAKKzxVQzAxRj4gIjxVMzE0Mz48VTMxNUU+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXRUgKKzxVQzAyMD4gIjxVMzE0Mz48VTMxNUY+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldJCis8VUMwMjE+ICI8VTMxNDM+PFUzMTVGPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0lHCis8VUMwMjI+ICI8VTMxNDM+PFUzMTVGPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0lHRworPFVDMDIzPiAiPFUzMTQzPjxVMzE1Rj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldJR1MKKzxVQzAyND4gIjxVMzE0Mz48VTMxNUY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXSU4KKzxVQzAyNT4gIjxVMzE0Mz48VTMxNUY+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXSU5JCis8VUMwMjY+ICI8VTMxNDM+PFUzMTVGPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0lOSAorPFVDMDI3PiAiPFUzMTQzPjxVMzE1Rj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldJRAorPFVDMDI4PiAiPFUzMTQzPjxVMzE1Rj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldJTAorPFVDMDI5PiAiPFUzMTQzPjxVMzE1Rj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldJTEcKKzxVQzAyQT4gIjxVMzE0Mz48VTMxNUY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXSUxNCis8VUMwMkI+ICI8VTMxNDM+PFUzMTVGPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0lMQgorPFVDMDJDPiAiPFUzMTQzPjxVMzE1Rj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldJTFMKKzxVQzAyRD4gIjxVMzE0Mz48VTMxNUY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXSUxUCis8VUMwMkU+ICI8VTMxNDM+PFUzMTVGPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0lMUAorPFVDMDJGPiAiPFUzMTQzPjxVMzE1Rj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldJTEgKKzxVQzAzMD4gIjxVMzE0Mz48VTMxNUY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXSU0KKzxVQzAzMT4gIjxVMzE0Mz48VTMxNUY+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXSUIKKzxVQzAzMj4gIjxVMzE0Mz48VTMxNUY+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXSUJTCis8VUMwMzM+ICI8VTMxNDM+PFUzMTVGPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0lTCis8VUMwMzQ+ICI8VTMxNDM+PFUzMTVGPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCV0lTUworPFVDMDM1PiAiPFUzMTQzPjxVMzE1Rj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQldJTkcKKzxVQzAzNj4gIjxVMzE0Mz48VTMxNUY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXSUoKKzxVQzAzNz4gIjxVMzE0Mz48VTMxNUY+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXSUMKKzxVQzAzOD4gIjxVMzE0Mz48VTMxNUY+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXSUsKKzxVQzAzOT4gIjxVMzE0Mz48VTMxNUY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXSVQKKzxVQzAzQT4gIjxVMzE0Mz48VTMxNUY+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXSVAKKzxVQzAzQj4gIjxVMzE0Mz48VTMxNUY+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJXSUgKKzxVQzAzQz4gIjxVMzE0Mz48VTMxNjA+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllVCis8VUMwM0Q+ICI8VTMxNDM+PFUzMTYwPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWVVHCis8VUMwM0U+ICI8VTMxNDM+PFUzMTYwPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWVVHRworPFVDMDNGPiAiPFUzMTQzPjxVMzE2MD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllVR1MKKzxVQzA0MD4gIjxVMzE0Mz48VTMxNjA+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZVU4KKzxVQzA0MT4gIjxVMzE0Mz48VTMxNjA+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZVU5JCis8VUMwNDI+ICI8VTMxNDM+PFUzMTYwPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWVVOSAorPFVDMDQzPiAiPFUzMTQzPjxVMzE2MD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllVRAorPFVDMDQ0PiAiPFUzMTQzPjxVMzE2MD48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllVTAorPFVDMDQ1PiAiPFUzMTQzPjxVMzE2MD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllVTEcKKzxVQzA0Nj4gIjxVMzE0Mz48VTMxNjA+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZVUxNCis8VUMwNDc+ICI8VTMxNDM+PFUzMTYwPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWVVMQgorPFVDMDQ4PiAiPFUzMTQzPjxVMzE2MD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllVTFMKKzxVQzA0OT4gIjxVMzE0Mz48VTMxNjA+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZVUxUCis8VUMwNEE+ICI8VTMxNDM+PFUzMTYwPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWVVMUAorPFVDMDRCPiAiPFUzMTQzPjxVMzE2MD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllVTEgKKzxVQzA0Qz4gIjxVMzE0Mz48VTMxNjA+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZVU0KKzxVQzA0RD4gIjxVMzE0Mz48VTMxNjA+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZVUIKKzxVQzA0RT4gIjxVMzE0Mz48VTMxNjA+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZVUJTCis8VUMwNEY+ICI8VTMxNDM+PFUzMTYwPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWVVTCis8VUMwNTA+ICI8VTMxNDM+PFUzMTYwPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWVVTUworPFVDMDUxPiAiPFUzMTQzPjxVMzE2MD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllVTkcKKzxVQzA1Mj4gIjxVMzE0Mz48VTMxNjA+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZVUoKKzxVQzA1Mz4gIjxVMzE0Mz48VTMxNjA+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZVUMKKzxVQzA1ND4gIjxVMzE0Mz48VTMxNjA+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZVUsKKzxVQzA1NT4gIjxVMzE0Mz48VTMxNjA+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZVVQKKzxVQzA1Nj4gIjxVMzE0Mz48VTMxNjA+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZVVAKKzxVQzA1Nz4gIjxVMzE0Mz48VTMxNjA+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZVUgKKzxVQzA1OD4gIjxVMzE0Mz48VTMxNjE+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVVCis8VUMwNTk+ICI8VTMxNDM+PFUzMTYxPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCRVVHCis8VUMwNUE+ICI8VTMxNDM+PFUzMTYxPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCRVVHRworPFVDMDVCPiAiPFUzMTQzPjxVMzE2MT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVVR1MKKzxVQzA1Qz4gIjxVMzE0Mz48VTMxNjE+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFVU4KKzxVQzA1RD4gIjxVMzE0Mz48VTMxNjE+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFVU5JCis8VUMwNUU+ICI8VTMxNDM+PFUzMTYxPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCRVVOSAorPFVDMDVGPiAiPFUzMTQzPjxVMzE2MT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVVRAorPFVDMDYwPiAiPFUzMTQzPjxVMzE2MT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVVTAorPFVDMDYxPiAiPFUzMTQzPjxVMzE2MT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVVTEcKKzxVQzA2Mj4gIjxVMzE0Mz48VTMxNjE+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFVUxNCis8VUMwNjM+ICI8VTMxNDM+PFUzMTYxPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCRVVMQgorPFVDMDY0PiAiPFUzMTQzPjxVMzE2MT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVVTFMKKzxVQzA2NT4gIjxVMzE0Mz48VTMxNjE+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFVUxUCis8VUMwNjY+ICI8VTMxNDM+PFUzMTYxPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCRVVMUAorPFVDMDY3PiAiPFUzMTQzPjxVMzE2MT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVVTEgKKzxVQzA2OD4gIjxVMzE0Mz48VTMxNjE+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFVU0KKzxVQzA2OT4gIjxVMzE0Mz48VTMxNjE+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFVUIKKzxVQzA2QT4gIjxVMzE0Mz48VTMxNjE+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFVUJTCis8VUMwNkI+ICI8VTMxNDM+PFUzMTYxPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCRVVTCis8VUMwNkM+ICI8VTMxNDM+PFUzMTYxPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCRVVTUworPFVDMDZEPiAiPFUzMTQzPjxVMzE2MT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkVVTkcKKzxVQzA2RT4gIjxVMzE0Mz48VTMxNjE+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFVUoKKzxVQzA2Rj4gIjxVMzE0Mz48VTMxNjE+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFVUMKKzxVQzA3MD4gIjxVMzE0Mz48VTMxNjE+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFVUsKKzxVQzA3MT4gIjxVMzE0Mz48VTMxNjE+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFVVQKKzxVQzA3Mj4gIjxVMzE0Mz48VTMxNjE+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFVVAKKzxVQzA3Mz4gIjxVMzE0Mz48VTMxNjE+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJFVUgKKzxVQzA3ND4gIjxVMzE0Mz48VTMxNjI+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllJCis8VUMwNzU+ICI8VTMxNDM+PFUzMTYyPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUlHCis8VUMwNzY+ICI8VTMxNDM+PFUzMTYyPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUlHRworPFVDMDc3PiAiPFUzMTQzPjxVMzE2Mj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllJR1MKKzxVQzA3OD4gIjxVMzE0Mz48VTMxNjI+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZSU4KKzxVQzA3OT4gIjxVMzE0Mz48VTMxNjI+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZSU5JCis8VUMwN0E+ICI8VTMxNDM+PFUzMTYyPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUlOSAorPFVDMDdCPiAiPFUzMTQzPjxVMzE2Mj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllJRAorPFVDMDdDPiAiPFUzMTQzPjxVMzE2Mj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllJTAorPFVDMDdEPiAiPFUzMTQzPjxVMzE2Mj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllJTEcKKzxVQzA3RT4gIjxVMzE0Mz48VTMxNjI+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZSUxNCis8VUMwN0Y+ICI8VTMxNDM+PFUzMTYyPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUlMQgorPFVDMDgwPiAiPFUzMTQzPjxVMzE2Mj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllJTFMKKzxVQzA4MT4gIjxVMzE0Mz48VTMxNjI+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZSUxUCis8VUMwODI+ICI8VTMxNDM+PFUzMTYyPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUlMUAorPFVDMDgzPiAiPFUzMTQzPjxVMzE2Mj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllJTEgKKzxVQzA4ND4gIjxVMzE0Mz48VTMxNjI+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZSU0KKzxVQzA4NT4gIjxVMzE0Mz48VTMxNjI+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZSUIKKzxVQzA4Nj4gIjxVMzE0Mz48VTMxNjI+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZSUJTCis8VUMwODc+ICI8VTMxNDM+PFUzMTYyPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUlTCis8VUMwODg+ICI8VTMxNDM+PFUzMTYyPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCWUlTUworPFVDMDg5PiAiPFUzMTQzPjxVMzE2Mj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQllJTkcKKzxVQzA4QT4gIjxVMzE0Mz48VTMxNjI+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZSUoKKzxVQzA4Qj4gIjxVMzE0Mz48VTMxNjI+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZSUMKKzxVQzA4Qz4gIjxVMzE0Mz48VTMxNjI+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZSUsKKzxVQzA4RD4gIjxVMzE0Mz48VTMxNjI+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZSVQKKzxVQzA4RT4gIjxVMzE0Mz48VTMxNjI+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZSVAKKzxVQzA4Rj4gIjxVMzE0Mz48VTMxNjI+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJZSUgKKzxVQzA5MD4gIjxVMzE0Mz48VTMxNjM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQkkKKzxVQzA5MT4gIjxVMzE0Mz48VTMxNjM+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJJRworPFVDMDkyPiAiPFUzMTQzPjxVMzE2Mz48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBCQklHRworPFVDMDkzPiAiPFUzMTQzPjxVMzE2Mz48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQklHUworPFVDMDk0PiAiPFUzMTQzPjxVMzE2Mz48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBCQklOCis8VUMwOTU+ICI8VTMxNDM+PFUzMTYzPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCSU5JCis8VUMwOTY+ICI8VTMxNDM+PFUzMTYzPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCSU5ICis8VUMwOTc+ICI8VTMxNDM+PFUzMTYzPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEJCSUQKKzxVQzA5OD4gIjxVMzE0Mz48VTMxNjM+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJJTAorPFVDMDk5PiAiPFUzMTQzPjxVMzE2Mz48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBCQklMRworPFVDMDlBPiAiPFUzMTQzPjxVMzE2Mz48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBCQklMTQorPFVDMDlCPiAiPFUzMTQzPjxVMzE2Mz48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBCQklMQgorPFVDMDlDPiAiPFUzMTQzPjxVMzE2Mz48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBCQklMUworPFVDMDlEPiAiPFUzMTQzPjxVMzE2Mz48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBCQklMVAorPFVDMDlFPiAiPFUzMTQzPjxVMzE2Mz48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBCQklMUAorPFVDMDlGPiAiPFUzMTQzPjxVMzE2Mz48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBCQklMSAorPFVDMEEwPiAiPFUzMTQzPjxVMzE2Mz48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBCQklNCis8VUMwQTE+ICI8VTMxNDM+PFUzMTYzPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEJCSUIKKzxVQzBBMj4gIjxVMzE0Mz48VTMxNjM+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJJQlMKKzxVQzBBMz4gIjxVMzE0Mz48VTMxNjM+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJJUworPFVDMEE0PiAiPFUzMTQzPjxVMzE2Mz48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBCQklTUworPFVDMEE1PiAiPFUzMTQzPjxVMzE2Mz48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBCQklORworPFVDMEE2PiAiPFUzMTQzPjxVMzE2Mz48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBCQklKCis8VUMwQTc+ICI8VTMxNDM+PFUzMTYzPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEJCSUMKKzxVQzBBOD4gIjxVMzE0Mz48VTMxNjM+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJJSworPFVDMEE5PiAiPFUzMTQzPjxVMzE2Mz48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBCQklUCis8VUMwQUE+ICI8VTMxNDM+PFUzMTYzPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEJCSVAKKzxVQzBBQj4gIjxVMzE0Mz48VTMxNjM+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQkJJSAorPFVDMEFDPiAiPFUzMTQ1PjxVMzE0Rj4iCSUgSEFOR1VMIFNZTExBQkxFIFNBCis8VUMwQUQ+ICI8VTMxNDU+PFUzMTRGPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFNBRworPFVDMEFFPiAiPFUzMTQ1PjxVMzE0Rj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBTQUdHCis8VUMwQUY+ICI8VTMxNDU+PFUzMTRGPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFNBR1MKKzxVQzBCMD4gIjxVMzE0NT48VTMxNEY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU0FOCis8VUMwQjE+ICI8VTMxNDU+PFUzMTRGPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFNBTkkKKzxVQzBCMj4gIjxVMzE0NT48VTMxNEY+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU0FOSAorPFVDMEIzPiAiPFUzMTQ1PjxVMzE0Rj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBTQUQKKzxVQzBCND4gIjxVMzE0NT48VTMxNEY+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgU0FMCis8VUMwQjU+ICI8VTMxNDU+PFUzMTRGPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFNBTEcKKzxVQzBCNj4gIjxVMzE0NT48VTMxNEY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0FMTQorPFVDMEI3PiAiPFUzMTQ1PjxVMzE0Rj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBTQUxCCis8VUMwQjg+ICI8VTMxNDU+PFUzMTRGPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFNBTFMKKzxVQzBCOT4gIjxVMzE0NT48VTMxNEY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0FMVAorPFVDMEJBPiAiPFUzMTQ1PjxVMzE0Rj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBTQUxQCis8VUMwQkI+ICI8VTMxNDU+PFUzMTRGPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFNBTEgKKzxVQzBCQz4gIjxVMzE0NT48VTMxNEY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0FNCis8VUMwQkQ+ICI8VTMxNDU+PFUzMTRGPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFNBQgorPFVDMEJFPiAiPFUzMTQ1PjxVMzE0Rj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTQUJTCis8VUMwQkY+ICI8VTMxNDU+PFUzMTRGPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFNBUworPFVDMEMwPiAiPFUzMTQ1PjxVMzE0Rj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBTQVNTCis8VUMwQzE+ICI8VTMxNDU+PFUzMTRGPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFNBTkcKKzxVQzBDMj4gIjxVMzE0NT48VTMxNEY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgU0FKCis8VUMwQzM+ICI8VTMxNDU+PFUzMTRGPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFNBQworPFVDMEM0PiAiPFUzMTQ1PjxVMzE0Rj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBTQUsKKzxVQzBDNT4gIjxVMzE0NT48VTMxNEY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0FUCis8VUMwQzY+ICI8VTMxNDU+PFUzMTRGPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFNBUAorPFVDMEM3PiAiPFUzMTQ1PjxVMzE0Rj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBTQUgKKzxVQzBDOD4gIjxVMzE0NT48VTMxNTA+IgklIEhBTkdVTCBTWUxMQUJMRSBTQUUKKzxVQzBDOT4gIjxVMzE0NT48VTMxNTA+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0FFRworPFVDMENBPiAiPFUzMTQ1PjxVMzE1MD48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBTQUVHRworPFVDMENCPiAiPFUzMTQ1PjxVMzE1MD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBTQUVHUworPFVDMENDPiAiPFUzMTQ1PjxVMzE1MD48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTQUVOCis8VUMwQ0Q+ICI8VTMxNDU+PFUzMTUwPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFNBRU5JCis8VUMwQ0U+ICI8VTMxNDU+PFUzMTUwPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFNBRU5ICis8VUMwQ0Y+ICI8VTMxNDU+PFUzMTUwPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFNBRUQKKzxVQzBEMD4gIjxVMzE0NT48VTMxNTA+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgU0FFTAorPFVDMEQxPiAiPFUzMTQ1PjxVMzE1MD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBTQUVMRworPFVDMEQyPiAiPFUzMTQ1PjxVMzE1MD48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBTQUVMTQorPFVDMEQzPiAiPFUzMTQ1PjxVMzE1MD48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBTQUVMQgorPFVDMEQ0PiAiPFUzMTQ1PjxVMzE1MD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBTQUVMUworPFVDMEQ1PiAiPFUzMTQ1PjxVMzE1MD48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBTQUVMVAorPFVDMEQ2PiAiPFUzMTQ1PjxVMzE1MD48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBTQUVMUAorPFVDMEQ3PiAiPFUzMTQ1PjxVMzE1MD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBTQUVMSAorPFVDMEQ4PiAiPFUzMTQ1PjxVMzE1MD48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBTQUVNCis8VUMwRDk+ICI8VTMxNDU+PFUzMTUwPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFNBRUIKKzxVQzBEQT4gIjxVMzE0NT48VTMxNTA+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU0FFQlMKKzxVQzBEQj4gIjxVMzE0NT48VTMxNTA+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgU0FFUworPFVDMERDPiAiPFUzMTQ1PjxVMzE1MD48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBTQUVTUworPFVDMEREPiAiPFUzMTQ1PjxVMzE1MD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBTQUVORworPFVDMERFPiAiPFUzMTQ1PjxVMzE1MD48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBTQUVKCis8VUMwREY+ICI8VTMxNDU+PFUzMTUwPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFNBRUMKKzxVQzBFMD4gIjxVMzE0NT48VTMxNTA+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0FFSworPFVDMEUxPiAiPFUzMTQ1PjxVMzE1MD48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBTQUVUCis8VUMwRTI+ICI8VTMxNDU+PFUzMTUwPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFNBRVAKKzxVQzBFMz4gIjxVMzE0NT48VTMxNTA+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0FFSAorPFVDMEU0PiAiPFUzMTQ1PjxVMzE1MT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQQorPFVDMEU1PiAiPFUzMTQ1PjxVMzE1MT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUFHCis8VUMwRTY+ICI8VTMxNDU+PFUzMTUxPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQUdHCis8VUMwRTc+ICI8VTMxNDU+PFUzMTUxPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQUdTCis8VUMwRTg+ICI8VTMxNDU+PFUzMTUxPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQU4KKzxVQzBFOT4gIjxVMzE0NT48VTMxNTE+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lBTkkKKzxVQzBFQT4gIjxVMzE0NT48VTMxNTE+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lBTkgKKzxVQzBFQj4gIjxVMzE0NT48VTMxNTE+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lBRAorPFVDMEVDPiAiPFUzMTQ1PjxVMzE1MT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUFMCis8VUMwRUQ+ICI8VTMxNDU+PFUzMTUxPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQUxHCis8VUMwRUU+ICI8VTMxNDU+PFUzMTUxPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQUxNCis8VUMwRUY+ICI8VTMxNDU+PFUzMTUxPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQUxCCis8VUMwRjA+ICI8VTMxNDU+PFUzMTUxPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQUxTCis8VUMwRjE+ICI8VTMxNDU+PFUzMTUxPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQUxUCis8VUMwRjI+ICI8VTMxNDU+PFUzMTUxPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQUxQCis8VUMwRjM+ICI8VTMxNDU+PFUzMTUxPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQUxICis8VUMwRjQ+ICI8VTMxNDU+PFUzMTUxPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQU0KKzxVQzBGNT4gIjxVMzE0NT48VTMxNTE+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lBQgorPFVDMEY2PiAiPFUzMTQ1PjxVMzE1MT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUFCUworPFVDMEY3PiAiPFUzMTQ1PjxVMzE1MT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUFTCis8VUMwRjg+ICI8VTMxNDU+PFUzMTUxPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQVNTCis8VUMwRjk+ICI8VTMxNDU+PFUzMTUxPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQU5HCis8VUMwRkE+ICI8VTMxNDU+PFUzMTUxPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQUoKKzxVQzBGQj4gIjxVMzE0NT48VTMxNTE+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lBQworPFVDMEZDPiAiPFUzMTQ1PjxVMzE1MT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUFLCis8VUMwRkQ+ICI8VTMxNDU+PFUzMTUxPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQVQKKzxVQzBGRT4gIjxVMzE0NT48VTMxNTE+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lBUAorPFVDMEZGPiAiPFUzMTQ1PjxVMzE1MT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUFICis8VUMxMDA+ICI8VTMxNDU+PFUzMTUyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lBRQorPFVDMTAxPiAiPFUzMTQ1PjxVMzE1Mj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUFFRworPFVDMTAyPiAiPFUzMTQ1PjxVMzE1Mj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUFFR0cKKzxVQzEwMz4gIjxVMzE0NT48VTMxNTI+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lBRUdTCis8VUMxMDQ+ICI8VTMxNDU+PFUzMTUyPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQUVOCis8VUMxMDU+ICI8VTMxNDU+PFUzMTUyPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQUVOSQorPFVDMTA2PiAiPFUzMTQ1PjxVMzE1Mj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUFFTkgKKzxVQzEwNz4gIjxVMzE0NT48VTMxNTI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lBRUQKKzxVQzEwOD4gIjxVMzE0NT48VTMxNTI+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lBRUwKKzxVQzEwOT4gIjxVMzE0NT48VTMxNTI+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lBRUxHCis8VUMxMEE+ICI8VTMxNDU+PFUzMTUyPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQUVMTQorPFVDMTBCPiAiPFUzMTQ1PjxVMzE1Mj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUFFTEIKKzxVQzEwQz4gIjxVMzE0NT48VTMxNTI+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lBRUxTCis8VUMxMEQ+ICI8VTMxNDU+PFUzMTUyPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQUVMVAorPFVDMTBFPiAiPFUzMTQ1PjxVMzE1Mj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUFFTFAKKzxVQzEwRj4gIjxVMzE0NT48VTMxNTI+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lBRUxICis8VUMxMTA+ICI8VTMxNDU+PFUzMTUyPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQUVNCis8VUMxMTE+ICI8VTMxNDU+PFUzMTUyPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQUVCCis8VUMxMTI+ICI8VTMxNDU+PFUzMTUyPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQUVCUworPFVDMTEzPiAiPFUzMTQ1PjxVMzE1Mj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUFFUworPFVDMTE0PiAiPFUzMTQ1PjxVMzE1Mj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUFFU1MKKzxVQzExNT4gIjxVMzE0NT48VTMxNTI+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lBRU5HCis8VUMxMTY+ICI8VTMxNDU+PFUzMTUyPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQUVKCis8VUMxMTc+ICI8VTMxNDU+PFUzMTUyPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQUVDCis8VUMxMTg+ICI8VTMxNDU+PFUzMTUyPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQUVLCis8VUMxMTk+ICI8VTMxNDU+PFUzMTUyPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQUVUCis8VUMxMUE+ICI8VTMxNDU+PFUzMTUyPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQUVQCis8VUMxMUI+ICI8VTMxNDU+PFUzMTUyPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZQUVICis8VUMxMUM+ICI8VTMxNDU+PFUzMTUzPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VPCis8VUMxMUQ+ICI8VTMxNDU+PFUzMTUzPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFNFT0cKKzxVQzExRT4gIjxVMzE0NT48VTMxNTM+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VPR0cKKzxVQzExRj4gIjxVMzE0NT48VTMxNTM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VPR1MKKzxVQzEyMD4gIjxVMzE0NT48VTMxNTM+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VPTgorPFVDMTIxPiAiPFUzMTQ1PjxVMzE1Mz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBTRU9OSQorPFVDMTIyPiAiPFUzMTQ1PjxVMzE1Mz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBTRU9OSAorPFVDMTIzPiAiPFUzMTQ1PjxVMzE1Mz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBTRU9ECis8VUMxMjQ+ICI8VTMxNDU+PFUzMTUzPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFNFT0wKKzxVQzEyNT4gIjxVMzE0NT48VTMxNTM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VPTEcKKzxVQzEyNj4gIjxVMzE0NT48VTMxNTM+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VPTE0KKzxVQzEyNz4gIjxVMzE0NT48VTMxNTM+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VPTEIKKzxVQzEyOD4gIjxVMzE0NT48VTMxNTM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VPTFMKKzxVQzEyOT4gIjxVMzE0NT48VTMxNTM+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VPTFQKKzxVQzEyQT4gIjxVMzE0NT48VTMxNTM+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VPTFAKKzxVQzEyQj4gIjxVMzE0NT48VTMxNTM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VPTEgKKzxVQzEyQz4gIjxVMzE0NT48VTMxNTM+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VPTQorPFVDMTJEPiAiPFUzMTQ1PjxVMzE1Mz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBTRU9CCis8VUMxMkU+ICI8VTMxNDU+PFUzMTUzPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFNFT0JTCis8VUMxMkY+ICI8VTMxNDU+PFUzMTUzPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFNFT1MKKzxVQzEzMD4gIjxVMzE0NT48VTMxNTM+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VPU1MKKzxVQzEzMT4gIjxVMzE0NT48VTMxNTM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VPTkcKKzxVQzEzMj4gIjxVMzE0NT48VTMxNTM+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VPSgorPFVDMTMzPiAiPFUzMTQ1PjxVMzE1Mz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBTRU9DCis8VUMxMzQ+ICI8VTMxNDU+PFUzMTUzPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFNFT0sKKzxVQzEzNT4gIjxVMzE0NT48VTMxNTM+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VPVAorPFVDMTM2PiAiPFUzMTQ1PjxVMzE1Mz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTRU9QCis8VUMxMzc+ICI8VTMxNDU+PFUzMTUzPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFNFT0gKKzxVQzEzOD4gIjxVMzE0NT48VTMxNTQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTRQorPFVDMTM5PiAiPFUzMTQ1PjxVMzE1ND48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBTRUcKKzxVQzEzQT4gIjxVMzE0NT48VTMxNTQ+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VHRworPFVDMTNCPiAiPFUzMTQ1PjxVMzE1ND48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBTRUdTCis8VUMxM0M+ICI8VTMxNDU+PFUzMTU0PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFNFTgorPFVDMTNEPiAiPFUzMTQ1PjxVMzE1ND48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBTRU5JCis8VUMxM0U+ICI8VTMxNDU+PFUzMTU0PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFNFTkgKKzxVQzEzRj4gIjxVMzE0NT48VTMxNTQ+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VECis8VUMxNDA+ICI8VTMxNDU+PFUzMTU0PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFNFTAorPFVDMTQxPiAiPFUzMTQ1PjxVMzE1ND48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBTRUxHCis8VUMxNDI+ICI8VTMxNDU+PFUzMTU0PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFNFTE0KKzxVQzE0Mz4gIjxVMzE0NT48VTMxNTQ+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VMQgorPFVDMTQ0PiAiPFUzMTQ1PjxVMzE1ND48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBTRUxTCis8VUMxNDU+ICI8VTMxNDU+PFUzMTU0PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFNFTFQKKzxVQzE0Nj4gIjxVMzE0NT48VTMxNTQ+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VMUAorPFVDMTQ3PiAiPFUzMTQ1PjxVMzE1ND48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBTRUxICis8VUMxNDg+ICI8VTMxNDU+PFUzMTU0PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFNFTQorPFVDMTQ5PiAiPFUzMTQ1PjxVMzE1ND48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBTRUIKKzxVQzE0QT4gIjxVMzE0NT48VTMxNTQ+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VCUworPFVDMTRCPiAiPFUzMTQ1PjxVMzE1ND48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBTRVMKKzxVQzE0Qz4gIjxVMzE0NT48VTMxNTQ+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VTUworPFVDMTREPiAiPFUzMTQ1PjxVMzE1ND48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBTRU5HCis8VUMxNEU+ICI8VTMxNDU+PFUzMTU0PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFNFSgorPFVDMTRGPiAiPFUzMTQ1PjxVMzE1ND48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBTRUMKKzxVQzE1MD4gIjxVMzE0NT48VTMxNTQ+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VLCis8VUMxNTE+ICI8VTMxNDU+PFUzMTU0PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFNFVAorPFVDMTUyPiAiPFUzMTQ1PjxVMzE1ND48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTRVAKKzxVQzE1Mz4gIjxVMzE0NT48VTMxNTQ+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VICis8VUMxNTQ+ICI8VTMxNDU+PFUzMTU1PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lFTworPFVDMTU1PiAiPFUzMTQ1PjxVMzE1NT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUVPRworPFVDMTU2PiAiPFUzMTQ1PjxVMzE1NT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUVPR0cKKzxVQzE1Nz4gIjxVMzE0NT48VTMxNTU+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lFT0dTCis8VUMxNTg+ICI8VTMxNDU+PFUzMTU1PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFNZRU9OCis8VUMxNTk+ICI8VTMxNDU+PFUzMTU1PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZRU9OSQorPFVDMTVBPiAiPFUzMTQ1PjxVMzE1NT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUVPTkgKKzxVQzE1Qj4gIjxVMzE0NT48VTMxNTU+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lFT0QKKzxVQzE1Qz4gIjxVMzE0NT48VTMxNTU+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lFT0wKKzxVQzE1RD4gIjxVMzE0NT48VTMxNTU+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lFT0xHCis8VUMxNUU+ICI8VTMxNDU+PFUzMTU1PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFNZRU9MTQorPFVDMTVGPiAiPFUzMTQ1PjxVMzE1NT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUVPTEIKKzxVQzE2MD4gIjxVMzE0NT48VTMxNTU+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lFT0xTCis8VUMxNjE+ICI8VTMxNDU+PFUzMTU1PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZRU9MVAorPFVDMTYyPiAiPFUzMTQ1PjxVMzE1NT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUVPTFAKKzxVQzE2Mz4gIjxVMzE0NT48VTMxNTU+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lFT0xICis8VUMxNjQ+ICI8VTMxNDU+PFUzMTU1PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZRU9NCis8VUMxNjU+ICI8VTMxNDU+PFUzMTU1PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFNZRU9CCis8VUMxNjY+ICI8VTMxNDU+PFUzMTU1PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFNZRU9CUworPFVDMTY3PiAiPFUzMTQ1PjxVMzE1NT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUVPUworPFVDMTY4PiAiPFUzMTQ1PjxVMzE1NT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUVPU1MKKzxVQzE2OT4gIjxVMzE0NT48VTMxNTU+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lFT05HCis8VUMxNkE+ICI8VTMxNDU+PFUzMTU1PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFNZRU9KCis8VUMxNkI+ICI8VTMxNDU+PFUzMTU1PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZRU9DCis8VUMxNkM+ICI8VTMxNDU+PFUzMTU1PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFNZRU9LCis8VUMxNkQ+ICI8VTMxNDU+PFUzMTU1PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFNZRU9UCis8VUMxNkU+ICI8VTMxNDU+PFUzMTU1PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFNZRU9QCis8VUMxNkY+ICI8VTMxNDU+PFUzMTU1PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZRU9ICis8VUMxNzA+ICI8VTMxNDU+PFUzMTU2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lFCis8VUMxNzE+ICI8VTMxNDU+PFUzMTU2PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZRUcKKzxVQzE3Mj4gIjxVMzE0NT48VTMxNTY+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lFR0cKKzxVQzE3Mz4gIjxVMzE0NT48VTMxNTY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lFR1MKKzxVQzE3ND4gIjxVMzE0NT48VTMxNTY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lFTgorPFVDMTc1PiAiPFUzMTQ1PjxVMzE1Nj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUVOSQorPFVDMTc2PiAiPFUzMTQ1PjxVMzE1Nj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUVOSAorPFVDMTc3PiAiPFUzMTQ1PjxVMzE1Nj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUVECis8VUMxNzg+ICI8VTMxNDU+PFUzMTU2PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZRUwKKzxVQzE3OT4gIjxVMzE0NT48VTMxNTY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lFTEcKKzxVQzE3QT4gIjxVMzE0NT48VTMxNTY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lFTE0KKzxVQzE3Qj4gIjxVMzE0NT48VTMxNTY+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lFTEIKKzxVQzE3Qz4gIjxVMzE0NT48VTMxNTY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lFTFMKKzxVQzE3RD4gIjxVMzE0NT48VTMxNTY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lFTFQKKzxVQzE3RT4gIjxVMzE0NT48VTMxNTY+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lFTFAKKzxVQzE3Rj4gIjxVMzE0NT48VTMxNTY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lFTEgKKzxVQzE4MD4gIjxVMzE0NT48VTMxNTY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lFTQorPFVDMTgxPiAiPFUzMTQ1PjxVMzE1Nj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUVCCis8VUMxODI+ICI8VTMxNDU+PFUzMTU2PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFNZRUJTCis8VUMxODM+ICI8VTMxNDU+PFUzMTU2PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZRVMKKzxVQzE4ND4gIjxVMzE0NT48VTMxNTY+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lFU1MKKzxVQzE4NT4gIjxVMzE0NT48VTMxNTY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lFTkcKKzxVQzE4Nj4gIjxVMzE0NT48VTMxNTY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lFSgorPFVDMTg3PiAiPFUzMTQ1PjxVMzE1Nj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUVDCis8VUMxODg+ICI8VTMxNDU+PFUzMTU2PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFNZRUsKKzxVQzE4OT4gIjxVMzE0NT48VTMxNTY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lFVAorPFVDMThBPiAiPFUzMTQ1PjxVMzE1Nj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUVQCis8VUMxOEI+ICI8VTMxNDU+PFUzMTU2PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZRUgKKzxVQzE4Qz4gIjxVMzE0NT48VTMxNTc+IgklIEhBTkdVTCBTWUxMQUJMRSBTTworPFVDMThEPiAiPFUzMTQ1PjxVMzE1Nz48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBTT0cKKzxVQzE4RT4gIjxVMzE0NT48VTMxNTc+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU09HRworPFVDMThGPiAiPFUzMTQ1PjxVMzE1Nz48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBTT0dTCis8VUMxOTA+ICI8VTMxNDU+PFUzMTU3PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFNPTgorPFVDMTkxPiAiPFUzMTQ1PjxVMzE1Nz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBTT05JCis8VUMxOTI+ICI8VTMxNDU+PFUzMTU3PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFNPTkgKKzxVQzE5Mz4gIjxVMzE0NT48VTMxNTc+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU09ECis8VUMxOTQ+ICI8VTMxNDU+PFUzMTU3PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFNPTAorPFVDMTk1PiAiPFUzMTQ1PjxVMzE1Nz48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBTT0xHCis8VUMxOTY+ICI8VTMxNDU+PFUzMTU3PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFNPTE0KKzxVQzE5Nz4gIjxVMzE0NT48VTMxNTc+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU09MQgorPFVDMTk4PiAiPFUzMTQ1PjxVMzE1Nz48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBTT0xTCis8VUMxOTk+ICI8VTMxNDU+PFUzMTU3PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFNPTFQKKzxVQzE5QT4gIjxVMzE0NT48VTMxNTc+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgU09MUAorPFVDMTlCPiAiPFUzMTQ1PjxVMzE1Nz48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBTT0xICis8VUMxOUM+ICI8VTMxNDU+PFUzMTU3PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFNPTQorPFVDMTlEPiAiPFUzMTQ1PjxVMzE1Nz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBTT0IKKzxVQzE5RT4gIjxVMzE0NT48VTMxNTc+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU09CUworPFVDMTlGPiAiPFUzMTQ1PjxVMzE1Nz48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBTT1MKKzxVQzFBMD4gIjxVMzE0NT48VTMxNTc+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU09TUworPFVDMUExPiAiPFUzMTQ1PjxVMzE1Nz48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBTT05HCis8VUMxQTI+ICI8VTMxNDU+PFUzMTU3PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFNPSgorPFVDMUEzPiAiPFUzMTQ1PjxVMzE1Nz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBTT0MKKzxVQzFBND4gIjxVMzE0NT48VTMxNTc+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU09LCis8VUMxQTU+ICI8VTMxNDU+PFUzMTU3PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFNPVAorPFVDMUE2PiAiPFUzMTQ1PjxVMzE1Nz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTT1AKKzxVQzFBNz4gIjxVMzE0NT48VTMxNTc+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU09ICis8VUMxQTg+ICI8VTMxNDU+PFUzMTU4PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBCis8VUMxQTk+ICI8VTMxNDU+PFUzMTU4PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFNXQUcKKzxVQzFBQT4gIjxVMzE0NT48VTMxNTg+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBR0cKKzxVQzFBQj4gIjxVMzE0NT48VTMxNTg+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBR1MKKzxVQzFBQz4gIjxVMzE0NT48VTMxNTg+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBTgorPFVDMUFEPiAiPFUzMTQ1PjxVMzE1OD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0FOSQorPFVDMUFFPiAiPFUzMTQ1PjxVMzE1OD48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0FOSAorPFVDMUFGPiAiPFUzMTQ1PjxVMzE1OD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0FECis8VUMxQjA+ICI8VTMxNDU+PFUzMTU4PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFNXQUwKKzxVQzFCMT4gIjxVMzE0NT48VTMxNTg+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBTEcKKzxVQzFCMj4gIjxVMzE0NT48VTMxNTg+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBTE0KKzxVQzFCMz4gIjxVMzE0NT48VTMxNTg+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBTEIKKzxVQzFCND4gIjxVMzE0NT48VTMxNTg+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBTFMKKzxVQzFCNT4gIjxVMzE0NT48VTMxNTg+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBTFQKKzxVQzFCNj4gIjxVMzE0NT48VTMxNTg+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBTFAKKzxVQzFCNz4gIjxVMzE0NT48VTMxNTg+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBTEgKKzxVQzFCOD4gIjxVMzE0NT48VTMxNTg+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBTQorPFVDMUI5PiAiPFUzMTQ1PjxVMzE1OD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0FCCis8VUMxQkE+ICI8VTMxNDU+PFUzMTU4PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFNXQUJTCis8VUMxQkI+ICI8VTMxNDU+PFUzMTU4PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFNXQVMKKzxVQzFCQz4gIjxVMzE0NT48VTMxNTg+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBU1MKKzxVQzFCRD4gIjxVMzE0NT48VTMxNTg+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBTkcKKzxVQzFCRT4gIjxVMzE0NT48VTMxNTg+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBSgorPFVDMUJGPiAiPFUzMTQ1PjxVMzE1OD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0FDCis8VUMxQzA+ICI8VTMxNDU+PFUzMTU4PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFNXQUsKKzxVQzFDMT4gIjxVMzE0NT48VTMxNTg+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBVAorPFVDMUMyPiAiPFUzMTQ1PjxVMzE1OD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0FQCis8VUMxQzM+ICI8VTMxNDU+PFUzMTU4PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFNXQUgKKzxVQzFDND4gIjxVMzE0NT48VTMxNTk+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0FFCis8VUMxQzU+ICI8VTMxNDU+PFUzMTU5PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFNXQUVHCis8VUMxQzY+ICI8VTMxNDU+PFUzMTU5PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFNXQUVHRworPFVDMUM3PiAiPFUzMTQ1PjxVMzE1OT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0FFR1MKKzxVQzFDOD4gIjxVMzE0NT48VTMxNTk+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBRU4KKzxVQzFDOT4gIjxVMzE0NT48VTMxNTk+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBRU5JCis8VUMxQ0E+ICI8VTMxNDU+PFUzMTU5PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFNXQUVOSAorPFVDMUNCPiAiPFUzMTQ1PjxVMzE1OT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0FFRAorPFVDMUNDPiAiPFUzMTQ1PjxVMzE1OT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0FFTAorPFVDMUNEPiAiPFUzMTQ1PjxVMzE1OT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0FFTEcKKzxVQzFDRT4gIjxVMzE0NT48VTMxNTk+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBRUxNCis8VUMxQ0Y+ICI8VTMxNDU+PFUzMTU5PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFNXQUVMQgorPFVDMUQwPiAiPFUzMTQ1PjxVMzE1OT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0FFTFMKKzxVQzFEMT4gIjxVMzE0NT48VTMxNTk+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBRUxUCis8VUMxRDI+ICI8VTMxNDU+PFUzMTU5PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFNXQUVMUAorPFVDMUQzPiAiPFUzMTQ1PjxVMzE1OT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0FFTEgKKzxVQzFEND4gIjxVMzE0NT48VTMxNTk+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBRU0KKzxVQzFENT4gIjxVMzE0NT48VTMxNTk+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBRUIKKzxVQzFENj4gIjxVMzE0NT48VTMxNTk+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBRUJTCis8VUMxRDc+ICI8VTMxNDU+PFUzMTU5PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFNXQUVTCis8VUMxRDg+ICI8VTMxNDU+PFUzMTU5PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFNXQUVTUworPFVDMUQ5PiAiPFUzMTQ1PjxVMzE1OT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0FFTkcKKzxVQzFEQT4gIjxVMzE0NT48VTMxNTk+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBRUoKKzxVQzFEQj4gIjxVMzE0NT48VTMxNTk+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBRUMKKzxVQzFEQz4gIjxVMzE0NT48VTMxNTk+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBRUsKKzxVQzFERD4gIjxVMzE0NT48VTMxNTk+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBRVQKKzxVQzFERT4gIjxVMzE0NT48VTMxNTk+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBRVAKKzxVQzFERj4gIjxVMzE0NT48VTMxNTk+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dBRUgKKzxVQzFFMD4gIjxVMzE0NT48VTMxNUE+IgklIEhBTkdVTCBTWUxMQUJMRSBTT0UKKzxVQzFFMT4gIjxVMzE0NT48VTMxNUE+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgU09FRworPFVDMUUyPiAiPFUzMTQ1PjxVMzE1QT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBTT0VHRworPFVDMUUzPiAiPFUzMTQ1PjxVMzE1QT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBTT0VHUworPFVDMUU0PiAiPFUzMTQ1PjxVMzE1QT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTT0VOCis8VUMxRTU+ICI8VTMxNDU+PFUzMTVBPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFNPRU5JCis8VUMxRTY+ICI8VTMxNDU+PFUzMTVBPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFNPRU5ICis8VUMxRTc+ICI8VTMxNDU+PFUzMTVBPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFNPRUQKKzxVQzFFOD4gIjxVMzE0NT48VTMxNUE+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgU09FTAorPFVDMUU5PiAiPFUzMTQ1PjxVMzE1QT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBTT0VMRworPFVDMUVBPiAiPFUzMTQ1PjxVMzE1QT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBTT0VMTQorPFVDMUVCPiAiPFUzMTQ1PjxVMzE1QT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBTT0VMQgorPFVDMUVDPiAiPFUzMTQ1PjxVMzE1QT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBTT0VMUworPFVDMUVEPiAiPFUzMTQ1PjxVMzE1QT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBTT0VMVAorPFVDMUVFPiAiPFUzMTQ1PjxVMzE1QT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBTT0VMUAorPFVDMUVGPiAiPFUzMTQ1PjxVMzE1QT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBTT0VMSAorPFVDMUYwPiAiPFUzMTQ1PjxVMzE1QT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBTT0VNCis8VUMxRjE+ICI8VTMxNDU+PFUzMTVBPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFNPRUIKKzxVQzFGMj4gIjxVMzE0NT48VTMxNUE+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU09FQlMKKzxVQzFGMz4gIjxVMzE0NT48VTMxNUE+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgU09FUworPFVDMUY0PiAiPFUzMTQ1PjxVMzE1QT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBTT0VTUworPFVDMUY1PiAiPFUzMTQ1PjxVMzE1QT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBTT0VORworPFVDMUY2PiAiPFUzMTQ1PjxVMzE1QT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBTT0VKCis8VUMxRjc+ICI8VTMxNDU+PFUzMTVBPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFNPRUMKKzxVQzFGOD4gIjxVMzE0NT48VTMxNUE+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU09FSworPFVDMUY5PiAiPFUzMTQ1PjxVMzE1QT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBTT0VUCis8VUMxRkE+ICI8VTMxNDU+PFUzMTVBPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFNPRVAKKzxVQzFGQj4gIjxVMzE0NT48VTMxNUE+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU09FSAorPFVDMUZDPiAiPFUzMTQ1PjxVMzE1Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFNZTworPFVDMUZEPiAiPFUzMTQ1PjxVMzE1Qj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBTWU9HCis8VUMxRkU+ICI8VTMxNDU+PFUzMTVCPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFNZT0dHCis8VUMxRkY+ICI8VTMxNDU+PFUzMTVCPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFNZT0dTCis8VUMyMDA+ICI8VTMxNDU+PFUzMTVCPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFNZT04KKzxVQzIwMT4gIjxVMzE0NT48VTMxNUI+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lPTkkKKzxVQzIwMj4gIjxVMzE0NT48VTMxNUI+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lPTkgKKzxVQzIwMz4gIjxVMzE0NT48VTMxNUI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lPRAorPFVDMjA0PiAiPFUzMTQ1PjxVMzE1Qj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBTWU9MCis8VUMyMDU+ICI8VTMxNDU+PFUzMTVCPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZT0xHCis8VUMyMDY+ICI8VTMxNDU+PFUzMTVCPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFNZT0xNCis8VUMyMDc+ICI8VTMxNDU+PFUzMTVCPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFNZT0xCCis8VUMyMDg+ICI8VTMxNDU+PFUzMTVCPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFNZT0xTCis8VUMyMDk+ICI8VTMxNDU+PFUzMTVCPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZT0xUCis8VUMyMEE+ICI8VTMxNDU+PFUzMTVCPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFNZT0xQCis8VUMyMEI+ICI8VTMxNDU+PFUzMTVCPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFNZT0xICis8VUMyMEM+ICI8VTMxNDU+PFUzMTVCPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZT00KKzxVQzIwRD4gIjxVMzE0NT48VTMxNUI+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lPQgorPFVDMjBFPiAiPFUzMTQ1PjxVMzE1Qj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTWU9CUworPFVDMjBGPiAiPFUzMTQ1PjxVMzE1Qj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBTWU9TCis8VUMyMTA+ICI8VTMxNDU+PFUzMTVCPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFNZT1NTCis8VUMyMTE+ICI8VTMxNDU+PFUzMTVCPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFNZT05HCis8VUMyMTI+ICI8VTMxNDU+PFUzMTVCPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFNZT0oKKzxVQzIxMz4gIjxVMzE0NT48VTMxNUI+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lPQworPFVDMjE0PiAiPFUzMTQ1PjxVMzE1Qj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBTWU9LCis8VUMyMTU+ICI8VTMxNDU+PFUzMTVCPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFNZT1QKKzxVQzIxNj4gIjxVMzE0NT48VTMxNUI+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lPUAorPFVDMjE3PiAiPFUzMTQ1PjxVMzE1Qj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBTWU9ICis8VUMyMTg+ICI8VTMxNDU+PFUzMTVDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1UKKzxVQzIxOT4gIjxVMzE0NT48VTMxNUM+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1VHCis8VUMyMUE+ICI8VTMxNDU+PFUzMTVDPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFNVR0cKKzxVQzIxQj4gIjxVMzE0NT48VTMxNUM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1VHUworPFVDMjFDPiAiPFUzMTQ1PjxVMzE1Qz48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTVU4KKzxVQzIxRD4gIjxVMzE0NT48VTMxNUM+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1VOSQorPFVDMjFFPiAiPFUzMTQ1PjxVMzE1Qz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBTVU5ICis8VUMyMUY+ICI8VTMxNDU+PFUzMTVDPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFNVRAorPFVDMjIwPiAiPFUzMTQ1PjxVMzE1Qz48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBTVUwKKzxVQzIyMT4gIjxVMzE0NT48VTMxNUM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1VMRworPFVDMjIyPiAiPFUzMTQ1PjxVMzE1Qz48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBTVUxNCis8VUMyMjM+ICI8VTMxNDU+PFUzMTVDPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFNVTEIKKzxVQzIyND4gIjxVMzE0NT48VTMxNUM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1VMUworPFVDMjI1PiAiPFUzMTQ1PjxVMzE1Qz48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBTVUxUCis8VUMyMjY+ICI8VTMxNDU+PFUzMTVDPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFNVTFAKKzxVQzIyNz4gIjxVMzE0NT48VTMxNUM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1VMSAorPFVDMjI4PiAiPFUzMTQ1PjxVMzE1Qz48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBTVU0KKzxVQzIyOT4gIjxVMzE0NT48VTMxNUM+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1VCCis8VUMyMkE+ICI8VTMxNDU+PFUzMTVDPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFNVQlMKKzxVQzIyQj4gIjxVMzE0NT48VTMxNUM+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1VTCis8VUMyMkM+ICI8VTMxNDU+PFUzMTVDPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFNVU1MKKzxVQzIyRD4gIjxVMzE0NT48VTMxNUM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1VORworPFVDMjJFPiAiPFUzMTQ1PjxVMzE1Qz48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBTVUoKKzxVQzIyRj4gIjxVMzE0NT48VTMxNUM+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1VDCis8VUMyMzA+ICI8VTMxNDU+PFUzMTVDPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFNVSworPFVDMjMxPiAiPFUzMTQ1PjxVMzE1Qz48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBTVVQKKzxVQzIzMj4gIjxVMzE0NT48VTMxNUM+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1VQCis8VUMyMzM+ICI8VTMxNDU+PFUzMTVDPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFNVSAorPFVDMjM0PiAiPFUzMTQ1PjxVMzE1RD4iCSUgSEFOR1VMIFNZTExBQkxFIFNXRU8KKzxVQzIzNT4gIjxVMzE0NT48VTMxNUQ+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dFT0cKKzxVQzIzNj4gIjxVMzE0NT48VTMxNUQ+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dFT0dHCis8VUMyMzc+ICI8VTMxNDU+PFUzMTVEPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFNXRU9HUworPFVDMjM4PiAiPFUzMTQ1PjxVMzE1RD48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0VPTgorPFVDMjM5PiAiPFUzMTQ1PjxVMzE1RD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0VPTkkKKzxVQzIzQT4gIjxVMzE0NT48VTMxNUQ+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dFT05ICis8VUMyM0I+ICI8VTMxNDU+PFUzMTVEPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFNXRU9ECis8VUMyM0M+ICI8VTMxNDU+PFUzMTVEPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFNXRU9MCis8VUMyM0Q+ICI8VTMxNDU+PFUzMTVEPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFNXRU9MRworPFVDMjNFPiAiPFUzMTQ1PjxVMzE1RD48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0VPTE0KKzxVQzIzRj4gIjxVMzE0NT48VTMxNUQ+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dFT0xCCis8VUMyNDA+ICI8VTMxNDU+PFUzMTVEPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFNXRU9MUworPFVDMjQxPiAiPFUzMTQ1PjxVMzE1RD48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0VPTFQKKzxVQzI0Mj4gIjxVMzE0NT48VTMxNUQ+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dFT0xQCis8VUMyNDM+ICI8VTMxNDU+PFUzMTVEPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFNXRU9MSAorPFVDMjQ0PiAiPFUzMTQ1PjxVMzE1RD48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0VPTQorPFVDMjQ1PiAiPFUzMTQ1PjxVMzE1RD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0VPQgorPFVDMjQ2PiAiPFUzMTQ1PjxVMzE1RD48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0VPQlMKKzxVQzI0Nz4gIjxVMzE0NT48VTMxNUQ+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dFT1MKKzxVQzI0OD4gIjxVMzE0NT48VTMxNUQ+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dFT1NTCis8VUMyNDk+ICI8VTMxNDU+PFUzMTVEPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFNXRU9ORworPFVDMjRBPiAiPFUzMTQ1PjxVMzE1RD48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0VPSgorPFVDMjRCPiAiPFUzMTQ1PjxVMzE1RD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0VPQworPFVDMjRDPiAiPFUzMTQ1PjxVMzE1RD48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0VPSworPFVDMjREPiAiPFUzMTQ1PjxVMzE1RD48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0VPVAorPFVDMjRFPiAiPFUzMTQ1PjxVMzE1RD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0VPUAorPFVDMjRGPiAiPFUzMTQ1PjxVMzE1RD48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0VPSAorPFVDMjUwPiAiPFUzMTQ1PjxVMzE1RT4iCSUgSEFOR1VMIFNZTExBQkxFIFNXRQorPFVDMjUxPiAiPFUzMTQ1PjxVMzE1RT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0VHCis8VUMyNTI+ICI8VTMxNDU+PFUzMTVFPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFNXRUdHCis8VUMyNTM+ICI8VTMxNDU+PFUzMTVFPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFNXRUdTCis8VUMyNTQ+ICI8VTMxNDU+PFUzMTVFPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFNXRU4KKzxVQzI1NT4gIjxVMzE0NT48VTMxNUU+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dFTkkKKzxVQzI1Nj4gIjxVMzE0NT48VTMxNUU+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dFTkgKKzxVQzI1Nz4gIjxVMzE0NT48VTMxNUU+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dFRAorPFVDMjU4PiAiPFUzMTQ1PjxVMzE1RT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0VMCis8VUMyNTk+ICI8VTMxNDU+PFUzMTVFPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFNXRUxHCis8VUMyNUE+ICI8VTMxNDU+PFUzMTVFPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFNXRUxNCis8VUMyNUI+ICI8VTMxNDU+PFUzMTVFPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFNXRUxCCis8VUMyNUM+ICI8VTMxNDU+PFUzMTVFPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFNXRUxTCis8VUMyNUQ+ICI8VTMxNDU+PFUzMTVFPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFNXRUxUCis8VUMyNUU+ICI8VTMxNDU+PFUzMTVFPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFNXRUxQCis8VUMyNUY+ICI8VTMxNDU+PFUzMTVFPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFNXRUxICis8VUMyNjA+ICI8VTMxNDU+PFUzMTVFPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFNXRU0KKzxVQzI2MT4gIjxVMzE0NT48VTMxNUU+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dFQgorPFVDMjYyPiAiPFUzMTQ1PjxVMzE1RT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0VCUworPFVDMjYzPiAiPFUzMTQ1PjxVMzE1RT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0VTCis8VUMyNjQ+ICI8VTMxNDU+PFUzMTVFPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFNXRVNTCis8VUMyNjU+ICI8VTMxNDU+PFUzMTVFPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFNXRU5HCis8VUMyNjY+ICI8VTMxNDU+PFUzMTVFPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFNXRUoKKzxVQzI2Nz4gIjxVMzE0NT48VTMxNUU+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dFQworPFVDMjY4PiAiPFUzMTQ1PjxVMzE1RT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0VLCis8VUMyNjk+ICI8VTMxNDU+PFUzMTVFPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFNXRVQKKzxVQzI2QT4gIjxVMzE0NT48VTMxNUU+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dFUAorPFVDMjZCPiAiPFUzMTQ1PjxVMzE1RT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0VICis8VUMyNkM+ICI8VTMxNDU+PFUzMTVGPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dJCis8VUMyNkQ+ICI8VTMxNDU+PFUzMTVGPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFNXSUcKKzxVQzI2RT4gIjxVMzE0NT48VTMxNUY+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dJR0cKKzxVQzI2Rj4gIjxVMzE0NT48VTMxNUY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dJR1MKKzxVQzI3MD4gIjxVMzE0NT48VTMxNUY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dJTgorPFVDMjcxPiAiPFUzMTQ1PjxVMzE1Rj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0lOSQorPFVDMjcyPiAiPFUzMTQ1PjxVMzE1Rj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0lOSAorPFVDMjczPiAiPFUzMTQ1PjxVMzE1Rj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0lECis8VUMyNzQ+ICI8VTMxNDU+PFUzMTVGPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFNXSUwKKzxVQzI3NT4gIjxVMzE0NT48VTMxNUY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dJTEcKKzxVQzI3Nj4gIjxVMzE0NT48VTMxNUY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dJTE0KKzxVQzI3Nz4gIjxVMzE0NT48VTMxNUY+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dJTEIKKzxVQzI3OD4gIjxVMzE0NT48VTMxNUY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dJTFMKKzxVQzI3OT4gIjxVMzE0NT48VTMxNUY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dJTFQKKzxVQzI3QT4gIjxVMzE0NT48VTMxNUY+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dJTFAKKzxVQzI3Qj4gIjxVMzE0NT48VTMxNUY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dJTEgKKzxVQzI3Qz4gIjxVMzE0NT48VTMxNUY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dJTQorPFVDMjdEPiAiPFUzMTQ1PjxVMzE1Rj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0lCCis8VUMyN0U+ICI8VTMxNDU+PFUzMTVGPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFNXSUJTCis8VUMyN0Y+ICI8VTMxNDU+PFUzMTVGPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFNXSVMKKzxVQzI4MD4gIjxVMzE0NT48VTMxNUY+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dJU1MKKzxVQzI4MT4gIjxVMzE0NT48VTMxNUY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dJTkcKKzxVQzI4Mj4gIjxVMzE0NT48VTMxNUY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dJSgorPFVDMjgzPiAiPFUzMTQ1PjxVMzE1Rj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0lDCis8VUMyODQ+ICI8VTMxNDU+PFUzMTVGPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFNXSUsKKzxVQzI4NT4gIjxVMzE0NT48VTMxNUY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1dJVAorPFVDMjg2PiAiPFUzMTQ1PjxVMzE1Rj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTV0lQCis8VUMyODc+ICI8VTMxNDU+PFUzMTVGPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFNXSUgKKzxVQzI4OD4gIjxVMzE0NT48VTMxNjA+IgklIEhBTkdVTCBTWUxMQUJMRSBTWVUKKzxVQzI4OT4gIjxVMzE0NT48VTMxNjA+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lVRworPFVDMjhBPiAiPFUzMTQ1PjxVMzE2MD48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBTWVVHRworPFVDMjhCPiAiPFUzMTQ1PjxVMzE2MD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBTWVVHUworPFVDMjhDPiAiPFUzMTQ1PjxVMzE2MD48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTWVVOCis8VUMyOEQ+ICI8VTMxNDU+PFUzMTYwPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZVU5JCis8VUMyOEU+ICI8VTMxNDU+PFUzMTYwPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFNZVU5ICis8VUMyOEY+ICI8VTMxNDU+PFUzMTYwPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFNZVUQKKzxVQzI5MD4gIjxVMzE0NT48VTMxNjA+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lVTAorPFVDMjkxPiAiPFUzMTQ1PjxVMzE2MD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBTWVVMRworPFVDMjkyPiAiPFUzMTQ1PjxVMzE2MD48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBTWVVMTQorPFVDMjkzPiAiPFUzMTQ1PjxVMzE2MD48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBTWVVMQgorPFVDMjk0PiAiPFUzMTQ1PjxVMzE2MD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBTWVVMUworPFVDMjk1PiAiPFUzMTQ1PjxVMzE2MD48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBTWVVMVAorPFVDMjk2PiAiPFUzMTQ1PjxVMzE2MD48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBTWVVMUAorPFVDMjk3PiAiPFUzMTQ1PjxVMzE2MD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBTWVVMSAorPFVDMjk4PiAiPFUzMTQ1PjxVMzE2MD48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBTWVVNCis8VUMyOTk+ICI8VTMxNDU+PFUzMTYwPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFNZVUIKKzxVQzI5QT4gIjxVMzE0NT48VTMxNjA+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lVQlMKKzxVQzI5Qj4gIjxVMzE0NT48VTMxNjA+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lVUworPFVDMjlDPiAiPFUzMTQ1PjxVMzE2MD48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBTWVVTUworPFVDMjlEPiAiPFUzMTQ1PjxVMzE2MD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBTWVVORworPFVDMjlFPiAiPFUzMTQ1PjxVMzE2MD48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBTWVVKCis8VUMyOUY+ICI8VTMxNDU+PFUzMTYwPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZVUMKKzxVQzJBMD4gIjxVMzE0NT48VTMxNjA+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lVSworPFVDMkExPiAiPFUzMTQ1PjxVMzE2MD48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBTWVVUCis8VUMyQTI+ICI8VTMxNDU+PFUzMTYwPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFNZVVAKKzxVQzJBMz4gIjxVMzE0NT48VTMxNjA+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lVSAorPFVDMkE0PiAiPFUzMTQ1PjxVMzE2MT4iCSUgSEFOR1VMIFNZTExBQkxFIFNFVQorPFVDMkE1PiAiPFUzMTQ1PjxVMzE2MT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBTRVVHCis8VUMyQTY+ICI8VTMxNDU+PFUzMTYxPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFNFVUdHCis8VUMyQTc+ICI8VTMxNDU+PFUzMTYxPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFNFVUdTCis8VUMyQTg+ICI8VTMxNDU+PFUzMTYxPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFNFVU4KKzxVQzJBOT4gIjxVMzE0NT48VTMxNjE+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VVTkkKKzxVQzJBQT4gIjxVMzE0NT48VTMxNjE+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VVTkgKKzxVQzJBQj4gIjxVMzE0NT48VTMxNjE+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VVRAorPFVDMkFDPiAiPFUzMTQ1PjxVMzE2MT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBTRVVMCis8VUMyQUQ+ICI8VTMxNDU+PFUzMTYxPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFNFVUxHCis8VUMyQUU+ICI8VTMxNDU+PFUzMTYxPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFNFVUxNCis8VUMyQUY+ICI8VTMxNDU+PFUzMTYxPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFNFVUxCCis8VUMyQjA+ICI8VTMxNDU+PFUzMTYxPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFNFVUxTCis8VUMyQjE+ICI8VTMxNDU+PFUzMTYxPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFNFVUxUCis8VUMyQjI+ICI8VTMxNDU+PFUzMTYxPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFNFVUxQCis8VUMyQjM+ICI8VTMxNDU+PFUzMTYxPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFNFVUxICis8VUMyQjQ+ICI8VTMxNDU+PFUzMTYxPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFNFVU0KKzxVQzJCNT4gIjxVMzE0NT48VTMxNjE+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VVQgorPFVDMkI2PiAiPFUzMTQ1PjxVMzE2MT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTRVVCUworPFVDMkI3PiAiPFUzMTQ1PjxVMzE2MT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBTRVVTCis8VUMyQjg+ICI8VTMxNDU+PFUzMTYxPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFNFVVNTCis8VUMyQjk+ICI8VTMxNDU+PFUzMTYxPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFNFVU5HCis8VUMyQkE+ICI8VTMxNDU+PFUzMTYxPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFNFVUoKKzxVQzJCQj4gIjxVMzE0NT48VTMxNjE+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VVQworPFVDMkJDPiAiPFUzMTQ1PjxVMzE2MT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBTRVVLCis8VUMyQkQ+ICI8VTMxNDU+PFUzMTYxPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFNFVVQKKzxVQzJCRT4gIjxVMzE0NT48VTMxNjE+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0VVUAorPFVDMkJGPiAiPFUzMTQ1PjxVMzE2MT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBTRVVICis8VUMyQzA+ICI8VTMxNDU+PFUzMTYyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lJCis8VUMyQzE+ICI8VTMxNDU+PFUzMTYyPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZSUcKKzxVQzJDMj4gIjxVMzE0NT48VTMxNjI+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lJR0cKKzxVQzJDMz4gIjxVMzE0NT48VTMxNjI+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lJR1MKKzxVQzJDND4gIjxVMzE0NT48VTMxNjI+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lJTgorPFVDMkM1PiAiPFUzMTQ1PjxVMzE2Mj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUlOSQorPFVDMkM2PiAiPFUzMTQ1PjxVMzE2Mj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUlOSAorPFVDMkM3PiAiPFUzMTQ1PjxVMzE2Mj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUlECis8VUMyQzg+ICI8VTMxNDU+PFUzMTYyPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZSUwKKzxVQzJDOT4gIjxVMzE0NT48VTMxNjI+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lJTEcKKzxVQzJDQT4gIjxVMzE0NT48VTMxNjI+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lJTE0KKzxVQzJDQj4gIjxVMzE0NT48VTMxNjI+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lJTEIKKzxVQzJDQz4gIjxVMzE0NT48VTMxNjI+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lJTFMKKzxVQzJDRD4gIjxVMzE0NT48VTMxNjI+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lJTFQKKzxVQzJDRT4gIjxVMzE0NT48VTMxNjI+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lJTFAKKzxVQzJDRj4gIjxVMzE0NT48VTMxNjI+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lJTEgKKzxVQzJEMD4gIjxVMzE0NT48VTMxNjI+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lJTQorPFVDMkQxPiAiPFUzMTQ1PjxVMzE2Mj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUlCCis8VUMyRDI+ICI8VTMxNDU+PFUzMTYyPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFNZSUJTCis8VUMyRDM+ICI8VTMxNDU+PFUzMTYyPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZSVMKKzxVQzJEND4gIjxVMzE0NT48VTMxNjI+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lJU1MKKzxVQzJENT4gIjxVMzE0NT48VTMxNjI+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lJTkcKKzxVQzJENj4gIjxVMzE0NT48VTMxNjI+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lJSgorPFVDMkQ3PiAiPFUzMTQ1PjxVMzE2Mj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUlDCis8VUMyRDg+ICI8VTMxNDU+PFUzMTYyPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFNZSUsKKzxVQzJEOT4gIjxVMzE0NT48VTMxNjI+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1lJVAorPFVDMkRBPiAiPFUzMTQ1PjxVMzE2Mj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTWUlQCis8VUMyREI+ICI8VTMxNDU+PFUzMTYyPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFNZSUgKKzxVQzJEQz4gIjxVMzE0NT48VTMxNjM+IgklIEhBTkdVTCBTWUxMQUJMRSBTSQorPFVDMkREPiAiPFUzMTQ1PjxVMzE2Mz48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBTSUcKKzxVQzJERT4gIjxVMzE0NT48VTMxNjM+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0lHRworPFVDMkRGPiAiPFUzMTQ1PjxVMzE2Mz48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBTSUdTCis8VUMyRTA+ICI8VTMxNDU+PFUzMTYzPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFNJTgorPFVDMkUxPiAiPFUzMTQ1PjxVMzE2Mz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBTSU5JCis8VUMyRTI+ICI8VTMxNDU+PFUzMTYzPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFNJTkgKKzxVQzJFMz4gIjxVMzE0NT48VTMxNjM+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU0lECis8VUMyRTQ+ICI8VTMxNDU+PFUzMTYzPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFNJTAorPFVDMkU1PiAiPFUzMTQ1PjxVMzE2Mz48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBTSUxHCis8VUMyRTY+ICI8VTMxNDU+PFUzMTYzPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFNJTE0KKzxVQzJFNz4gIjxVMzE0NT48VTMxNjM+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0lMQgorPFVDMkU4PiAiPFUzMTQ1PjxVMzE2Mz48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBTSUxTCis8VUMyRTk+ICI8VTMxNDU+PFUzMTYzPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFNJTFQKKzxVQzJFQT4gIjxVMzE0NT48VTMxNjM+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0lMUAorPFVDMkVCPiAiPFUzMTQ1PjxVMzE2Mz48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBTSUxICis8VUMyRUM+ICI8VTMxNDU+PFUzMTYzPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFNJTQorPFVDMkVEPiAiPFUzMTQ1PjxVMzE2Mz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBTSUIKKzxVQzJFRT4gIjxVMzE0NT48VTMxNjM+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU0lCUworPFVDMkVGPiAiPFUzMTQ1PjxVMzE2Mz48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBTSVMKKzxVQzJGMD4gIjxVMzE0NT48VTMxNjM+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU0lTUworPFVDMkYxPiAiPFUzMTQ1PjxVMzE2Mz48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBTSU5HCis8VUMyRjI+ICI8VTMxNDU+PFUzMTYzPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFNJSgorPFVDMkYzPiAiPFUzMTQ1PjxVMzE2Mz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBTSUMKKzxVQzJGND4gIjxVMzE0NT48VTMxNjM+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0lLCis8VUMyRjU+ICI8VTMxNDU+PFUzMTYzPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFNJVAorPFVDMkY2PiAiPFUzMTQ1PjxVMzE2Mz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTSVAKKzxVQzJGNz4gIjxVMzE0NT48VTMxNjM+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU0lICis8VUMyRjg+ICI8VTMxNDY+PFUzMTRGPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBCis8VUMyRjk+ICI8VTMxNDY+PFUzMTRGPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTQUcKKzxVQzJGQT4gIjxVMzE0Nj48VTMxNEY+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBR0cKKzxVQzJGQj4gIjxVMzE0Nj48VTMxNEY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBR1MKKzxVQzJGQz4gIjxVMzE0Nj48VTMxNEY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBTgorPFVDMkZEPiAiPFUzMTQ2PjxVMzE0Rj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0FOSQorPFVDMkZFPiAiPFUzMTQ2PjxVMzE0Rj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0FOSAorPFVDMkZGPiAiPFUzMTQ2PjxVMzE0Rj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0FECis8VUMzMDA+ICI8VTMxNDY+PFUzMTRGPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTQUwKKzxVQzMwMT4gIjxVMzE0Nj48VTMxNEY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBTEcKKzxVQzMwMj4gIjxVMzE0Nj48VTMxNEY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBTE0KKzxVQzMwMz4gIjxVMzE0Nj48VTMxNEY+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBTEIKKzxVQzMwND4gIjxVMzE0Nj48VTMxNEY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBTFMKKzxVQzMwNT4gIjxVMzE0Nj48VTMxNEY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBTFQKKzxVQzMwNj4gIjxVMzE0Nj48VTMxNEY+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBTFAKKzxVQzMwNz4gIjxVMzE0Nj48VTMxNEY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBTEgKKzxVQzMwOD4gIjxVMzE0Nj48VTMxNEY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBTQorPFVDMzA5PiAiPFUzMTQ2PjxVMzE0Rj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0FCCis8VUMzMEE+ICI8VTMxNDY+PFUzMTRGPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTQUJTCis8VUMzMEI+ICI8VTMxNDY+PFUzMTRGPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTQVMKKzxVQzMwQz4gIjxVMzE0Nj48VTMxNEY+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBU1MKKzxVQzMwRD4gIjxVMzE0Nj48VTMxNEY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBTkcKKzxVQzMwRT4gIjxVMzE0Nj48VTMxNEY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBSgorPFVDMzBGPiAiPFUzMTQ2PjxVMzE0Rj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0FDCis8VUMzMTA+ICI8VTMxNDY+PFUzMTRGPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTQUsKKzxVQzMxMT4gIjxVMzE0Nj48VTMxNEY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBVAorPFVDMzEyPiAiPFUzMTQ2PjxVMzE0Rj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0FQCis8VUMzMTM+ICI8VTMxNDY+PFUzMTRGPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTQUgKKzxVQzMxND4gIjxVMzE0Nj48VTMxNTA+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0FFCis8VUMzMTU+ICI8VTMxNDY+PFUzMTUwPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTQUVHCis8VUMzMTY+ICI8VTMxNDY+PFUzMTUwPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTQUVHRworPFVDMzE3PiAiPFUzMTQ2PjxVMzE1MD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0FFR1MKKzxVQzMxOD4gIjxVMzE0Nj48VTMxNTA+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBRU4KKzxVQzMxOT4gIjxVMzE0Nj48VTMxNTA+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBRU5JCis8VUMzMUE+ICI8VTMxNDY+PFUzMTUwPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTQUVOSAorPFVDMzFCPiAiPFUzMTQ2PjxVMzE1MD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0FFRAorPFVDMzFDPiAiPFUzMTQ2PjxVMzE1MD48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0FFTAorPFVDMzFEPiAiPFUzMTQ2PjxVMzE1MD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0FFTEcKKzxVQzMxRT4gIjxVMzE0Nj48VTMxNTA+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBRUxNCis8VUMzMUY+ICI8VTMxNDY+PFUzMTUwPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFNTQUVMQgorPFVDMzIwPiAiPFUzMTQ2PjxVMzE1MD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0FFTFMKKzxVQzMyMT4gIjxVMzE0Nj48VTMxNTA+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBRUxUCis8VUMzMjI+ICI8VTMxNDY+PFUzMTUwPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTQUVMUAorPFVDMzIzPiAiPFUzMTQ2PjxVMzE1MD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0FFTEgKKzxVQzMyND4gIjxVMzE0Nj48VTMxNTA+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBRU0KKzxVQzMyNT4gIjxVMzE0Nj48VTMxNTA+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBRUIKKzxVQzMyNj4gIjxVMzE0Nj48VTMxNTA+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBRUJTCis8VUMzMjc+ICI8VTMxNDY+PFUzMTUwPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTQUVTCis8VUMzMjg+ICI8VTMxNDY+PFUzMTUwPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTQUVTUworPFVDMzI5PiAiPFUzMTQ2PjxVMzE1MD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0FFTkcKKzxVQzMyQT4gIjxVMzE0Nj48VTMxNTA+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBRUoKKzxVQzMyQj4gIjxVMzE0Nj48VTMxNTA+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBRUMKKzxVQzMyQz4gIjxVMzE0Nj48VTMxNTA+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBRUsKKzxVQzMyRD4gIjxVMzE0Nj48VTMxNTA+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBRVQKKzxVQzMyRT4gIjxVMzE0Nj48VTMxNTA+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBRVAKKzxVQzMyRj4gIjxVMzE0Nj48VTMxNTA+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NBRUgKKzxVQzMzMD4gIjxVMzE0Nj48VTMxNTE+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lBCis8VUMzMzE+ICI8VTMxNDY+PFUzMTUxPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUFHCis8VUMzMzI+ICI8VTMxNDY+PFUzMTUxPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUFHRworPFVDMzMzPiAiPFUzMTQ2PjxVMzE1MT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lBR1MKKzxVQzMzND4gIjxVMzE0Nj48VTMxNTE+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZQU4KKzxVQzMzNT4gIjxVMzE0Nj48VTMxNTE+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZQU5JCis8VUMzMzY+ICI8VTMxNDY+PFUzMTUxPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUFOSAorPFVDMzM3PiAiPFUzMTQ2PjxVMzE1MT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lBRAorPFVDMzM4PiAiPFUzMTQ2PjxVMzE1MT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lBTAorPFVDMzM5PiAiPFUzMTQ2PjxVMzE1MT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lBTEcKKzxVQzMzQT4gIjxVMzE0Nj48VTMxNTE+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZQUxNCis8VUMzM0I+ICI8VTMxNDY+PFUzMTUxPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUFMQgorPFVDMzNDPiAiPFUzMTQ2PjxVMzE1MT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lBTFMKKzxVQzMzRD4gIjxVMzE0Nj48VTMxNTE+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZQUxUCis8VUMzM0U+ICI8VTMxNDY+PFUzMTUxPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUFMUAorPFVDMzNGPiAiPFUzMTQ2PjxVMzE1MT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lBTEgKKzxVQzM0MD4gIjxVMzE0Nj48VTMxNTE+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZQU0KKzxVQzM0MT4gIjxVMzE0Nj48VTMxNTE+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZQUIKKzxVQzM0Mj4gIjxVMzE0Nj48VTMxNTE+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZQUJTCis8VUMzNDM+ICI8VTMxNDY+PFUzMTUxPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUFTCis8VUMzNDQ+ICI8VTMxNDY+PFUzMTUxPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUFTUworPFVDMzQ1PiAiPFUzMTQ2PjxVMzE1MT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lBTkcKKzxVQzM0Nj4gIjxVMzE0Nj48VTMxNTE+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZQUoKKzxVQzM0Nz4gIjxVMzE0Nj48VTMxNTE+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZQUMKKzxVQzM0OD4gIjxVMzE0Nj48VTMxNTE+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZQUsKKzxVQzM0OT4gIjxVMzE0Nj48VTMxNTE+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZQVQKKzxVQzM0QT4gIjxVMzE0Nj48VTMxNTE+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZQVAKKzxVQzM0Qj4gIjxVMzE0Nj48VTMxNTE+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZQUgKKzxVQzM0Qz4gIjxVMzE0Nj48VTMxNTI+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lBRQorPFVDMzREPiAiPFUzMTQ2PjxVMzE1Mj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lBRUcKKzxVQzM0RT4gIjxVMzE0Nj48VTMxNTI+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZQUVHRworPFVDMzRGPiAiPFUzMTQ2PjxVMzE1Mj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lBRUdTCis8VUMzNTA+ICI8VTMxNDY+PFUzMTUyPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUFFTgorPFVDMzUxPiAiPFUzMTQ2PjxVMzE1Mj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lBRU5JCis8VUMzNTI+ICI8VTMxNDY+PFUzMTUyPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUFFTkgKKzxVQzM1Mz4gIjxVMzE0Nj48VTMxNTI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZQUVECis8VUMzNTQ+ICI8VTMxNDY+PFUzMTUyPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUFFTAorPFVDMzU1PiAiPFUzMTQ2PjxVMzE1Mj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lBRUxHCis8VUMzNTY+ICI8VTMxNDY+PFUzMTUyPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUFFTE0KKzxVQzM1Nz4gIjxVMzE0Nj48VTMxNTI+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZQUVMQgorPFVDMzU4PiAiPFUzMTQ2PjxVMzE1Mj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lBRUxTCis8VUMzNTk+ICI8VTMxNDY+PFUzMTUyPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUFFTFQKKzxVQzM1QT4gIjxVMzE0Nj48VTMxNTI+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZQUVMUAorPFVDMzVCPiAiPFUzMTQ2PjxVMzE1Mj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lBRUxICis8VUMzNUM+ICI8VTMxNDY+PFUzMTUyPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUFFTQorPFVDMzVEPiAiPFUzMTQ2PjxVMzE1Mj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lBRUIKKzxVQzM1RT4gIjxVMzE0Nj48VTMxNTI+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZQUVCUworPFVDMzVGPiAiPFUzMTQ2PjxVMzE1Mj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lBRVMKKzxVQzM2MD4gIjxVMzE0Nj48VTMxNTI+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZQUVTUworPFVDMzYxPiAiPFUzMTQ2PjxVMzE1Mj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lBRU5HCis8VUMzNjI+ICI8VTMxNDY+PFUzMTUyPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUFFSgorPFVDMzYzPiAiPFUzMTQ2PjxVMzE1Mj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lBRUMKKzxVQzM2ND4gIjxVMzE0Nj48VTMxNTI+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZQUVLCis8VUMzNjU+ICI8VTMxNDY+PFUzMTUyPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUFFVAorPFVDMzY2PiAiPFUzMTQ2PjxVMzE1Mj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lBRVAKKzxVQzM2Nz4gIjxVMzE0Nj48VTMxNTI+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZQUVICis8VUMzNjg+ICI8VTMxNDY+PFUzMTUzPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFTworPFVDMzY5PiAiPFUzMTQ2PjxVMzE1Mz48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0VPRworPFVDMzZBPiAiPFUzMTQ2PjxVMzE1Mz48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0VPR0cKKzxVQzM2Qj4gIjxVMzE0Nj48VTMxNTM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFT0dTCis8VUMzNkM+ICI8VTMxNDY+PFUzMTUzPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRU9OCis8VUMzNkQ+ICI8VTMxNDY+PFUzMTUzPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRU9OSQorPFVDMzZFPiAiPFUzMTQ2PjxVMzE1Mz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0VPTkgKKzxVQzM2Rj4gIjxVMzE0Nj48VTMxNTM+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFT0QKKzxVQzM3MD4gIjxVMzE0Nj48VTMxNTM+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFT0wKKzxVQzM3MT4gIjxVMzE0Nj48VTMxNTM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFT0xHCis8VUMzNzI+ICI8VTMxNDY+PFUzMTUzPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRU9MTQorPFVDMzczPiAiPFUzMTQ2PjxVMzE1Mz48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0VPTEIKKzxVQzM3ND4gIjxVMzE0Nj48VTMxNTM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFT0xTCis8VUMzNzU+ICI8VTMxNDY+PFUzMTUzPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRU9MVAorPFVDMzc2PiAiPFUzMTQ2PjxVMzE1Mz48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0VPTFAKKzxVQzM3Nz4gIjxVMzE0Nj48VTMxNTM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFT0xICis8VUMzNzg+ICI8VTMxNDY+PFUzMTUzPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRU9NCis8VUMzNzk+ICI8VTMxNDY+PFUzMTUzPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRU9CCis8VUMzN0E+ICI8VTMxNDY+PFUzMTUzPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRU9CUworPFVDMzdCPiAiPFUzMTQ2PjxVMzE1Mz48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0VPUworPFVDMzdDPiAiPFUzMTQ2PjxVMzE1Mz48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0VPU1MKKzxVQzM3RD4gIjxVMzE0Nj48VTMxNTM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFT05HCis8VUMzN0U+ICI8VTMxNDY+PFUzMTUzPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRU9KCis8VUMzN0Y+ICI8VTMxNDY+PFUzMTUzPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRU9DCis8VUMzODA+ICI8VTMxNDY+PFUzMTUzPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRU9LCis8VUMzODE+ICI8VTMxNDY+PFUzMTUzPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRU9UCis8VUMzODI+ICI8VTMxNDY+PFUzMTUzPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRU9QCis8VUMzODM+ICI8VTMxNDY+PFUzMTUzPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRU9ICis8VUMzODQ+ICI8VTMxNDY+PFUzMTU0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFCis8VUMzODU+ICI8VTMxNDY+PFUzMTU0PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRUcKKzxVQzM4Nj4gIjxVMzE0Nj48VTMxNTQ+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFR0cKKzxVQzM4Nz4gIjxVMzE0Nj48VTMxNTQ+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFR1MKKzxVQzM4OD4gIjxVMzE0Nj48VTMxNTQ+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFTgorPFVDMzg5PiAiPFUzMTQ2PjxVMzE1ND48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0VOSQorPFVDMzhBPiAiPFUzMTQ2PjxVMzE1ND48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0VOSAorPFVDMzhCPiAiPFUzMTQ2PjxVMzE1ND48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0VECis8VUMzOEM+ICI8VTMxNDY+PFUzMTU0PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRUwKKzxVQzM4RD4gIjxVMzE0Nj48VTMxNTQ+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFTEcKKzxVQzM4RT4gIjxVMzE0Nj48VTMxNTQ+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFTE0KKzxVQzM4Rj4gIjxVMzE0Nj48VTMxNTQ+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFTEIKKzxVQzM5MD4gIjxVMzE0Nj48VTMxNTQ+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFTFMKKzxVQzM5MT4gIjxVMzE0Nj48VTMxNTQ+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFTFQKKzxVQzM5Mj4gIjxVMzE0Nj48VTMxNTQ+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFTFAKKzxVQzM5Mz4gIjxVMzE0Nj48VTMxNTQ+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFTEgKKzxVQzM5ND4gIjxVMzE0Nj48VTMxNTQ+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFTQorPFVDMzk1PiAiPFUzMTQ2PjxVMzE1ND48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0VCCis8VUMzOTY+ICI8VTMxNDY+PFUzMTU0PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRUJTCis8VUMzOTc+ICI8VTMxNDY+PFUzMTU0PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRVMKKzxVQzM5OD4gIjxVMzE0Nj48VTMxNTQ+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFU1MKKzxVQzM5OT4gIjxVMzE0Nj48VTMxNTQ+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFTkcKKzxVQzM5QT4gIjxVMzE0Nj48VTMxNTQ+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFSgorPFVDMzlCPiAiPFUzMTQ2PjxVMzE1ND48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0VDCis8VUMzOUM+ICI8VTMxNDY+PFUzMTU0PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRUsKKzxVQzM5RD4gIjxVMzE0Nj48VTMxNTQ+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFVAorPFVDMzlFPiAiPFUzMTQ2PjxVMzE1ND48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0VQCis8VUMzOUY+ICI8VTMxNDY+PFUzMTU0PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRUgKKzxVQzNBMD4gIjxVMzE0Nj48VTMxNTU+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lFTworPFVDM0ExPiAiPFUzMTQ2PjxVMzE1NT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lFT0cKKzxVQzNBMj4gIjxVMzE0Nj48VTMxNTU+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZRU9HRworPFVDM0EzPiAiPFUzMTQ2PjxVMzE1NT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lFT0dTCis8VUMzQTQ+ICI8VTMxNDY+PFUzMTU1PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUVPTgorPFVDM0E1PiAiPFUzMTQ2PjxVMzE1NT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lFT05JCis8VUMzQTY+ICI8VTMxNDY+PFUzMTU1PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUVPTkgKKzxVQzNBNz4gIjxVMzE0Nj48VTMxNTU+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZRU9ECis8VUMzQTg+ICI8VTMxNDY+PFUzMTU1PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUVPTAorPFVDM0E5PiAiPFUzMTQ2PjxVMzE1NT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lFT0xHCis8VUMzQUE+ICI8VTMxNDY+PFUzMTU1PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUVPTE0KKzxVQzNBQj4gIjxVMzE0Nj48VTMxNTU+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZRU9MQgorPFVDM0FDPiAiPFUzMTQ2PjxVMzE1NT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lFT0xTCis8VUMzQUQ+ICI8VTMxNDY+PFUzMTU1PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUVPTFQKKzxVQzNBRT4gIjxVMzE0Nj48VTMxNTU+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZRU9MUAorPFVDM0FGPiAiPFUzMTQ2PjxVMzE1NT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lFT0xICis8VUMzQjA+ICI8VTMxNDY+PFUzMTU1PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUVPTQorPFVDM0IxPiAiPFUzMTQ2PjxVMzE1NT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lFT0IKKzxVQzNCMj4gIjxVMzE0Nj48VTMxNTU+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZRU9CUworPFVDM0IzPiAiPFUzMTQ2PjxVMzE1NT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lFT1MKKzxVQzNCND4gIjxVMzE0Nj48VTMxNTU+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZRU9TUworPFVDM0I1PiAiPFUzMTQ2PjxVMzE1NT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lFT05HCis8VUMzQjY+ICI8VTMxNDY+PFUzMTU1PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUVPSgorPFVDM0I3PiAiPFUzMTQ2PjxVMzE1NT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lFT0MKKzxVQzNCOD4gIjxVMzE0Nj48VTMxNTU+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZRU9LCis8VUMzQjk+ICI8VTMxNDY+PFUzMTU1PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUVPVAorPFVDM0JBPiAiPFUzMTQ2PjxVMzE1NT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lFT1AKKzxVQzNCQj4gIjxVMzE0Nj48VTMxNTU+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZRU9ICis8VUMzQkM+ICI8VTMxNDY+PFUzMTU2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZRQorPFVDM0JEPiAiPFUzMTQ2PjxVMzE1Nj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lFRworPFVDM0JFPiAiPFUzMTQ2PjxVMzE1Nj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lFR0cKKzxVQzNCRj4gIjxVMzE0Nj48VTMxNTY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZRUdTCis8VUMzQzA+ICI8VTMxNDY+PFUzMTU2PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUVOCis8VUMzQzE+ICI8VTMxNDY+PFUzMTU2PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUVOSQorPFVDM0MyPiAiPFUzMTQ2PjxVMzE1Nj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lFTkgKKzxVQzNDMz4gIjxVMzE0Nj48VTMxNTY+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZRUQKKzxVQzNDND4gIjxVMzE0Nj48VTMxNTY+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZRUwKKzxVQzNDNT4gIjxVMzE0Nj48VTMxNTY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZRUxHCis8VUMzQzY+ICI8VTMxNDY+PFUzMTU2PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUVMTQorPFVDM0M3PiAiPFUzMTQ2PjxVMzE1Nj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lFTEIKKzxVQzNDOD4gIjxVMzE0Nj48VTMxNTY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZRUxTCis8VUMzQzk+ICI8VTMxNDY+PFUzMTU2PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUVMVAorPFVDM0NBPiAiPFUzMTQ2PjxVMzE1Nj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lFTFAKKzxVQzNDQj4gIjxVMzE0Nj48VTMxNTY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZRUxICis8VUMzQ0M+ICI8VTMxNDY+PFUzMTU2PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUVNCis8VUMzQ0Q+ICI8VTMxNDY+PFUzMTU2PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUVCCis8VUMzQ0U+ICI8VTMxNDY+PFUzMTU2PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUVCUworPFVDM0NGPiAiPFUzMTQ2PjxVMzE1Nj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lFUworPFVDM0QwPiAiPFUzMTQ2PjxVMzE1Nj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lFU1MKKzxVQzNEMT4gIjxVMzE0Nj48VTMxNTY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZRU5HCis8VUMzRDI+ICI8VTMxNDY+PFUzMTU2PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUVKCis8VUMzRDM+ICI8VTMxNDY+PFUzMTU2PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUVDCis8VUMzRDQ+ICI8VTMxNDY+PFUzMTU2PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUVLCis8VUMzRDU+ICI8VTMxNDY+PFUzMTU2PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUVUCis8VUMzRDY+ICI8VTMxNDY+PFUzMTU2PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUVQCis8VUMzRDc+ICI8VTMxNDY+PFUzMTU2PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUVICis8VUMzRDg+ICI8VTMxNDY+PFUzMTU3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NPCis8VUMzRDk+ICI8VTMxNDY+PFUzMTU3PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTT0cKKzxVQzNEQT4gIjxVMzE0Nj48VTMxNTc+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NPR0cKKzxVQzNEQj4gIjxVMzE0Nj48VTMxNTc+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NPR1MKKzxVQzNEQz4gIjxVMzE0Nj48VTMxNTc+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NPTgorPFVDM0REPiAiPFUzMTQ2PjxVMzE1Nz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBTU09OSQorPFVDM0RFPiAiPFUzMTQ2PjxVMzE1Nz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBTU09OSAorPFVDM0RGPiAiPFUzMTQ2PjxVMzE1Nz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBTU09ECis8VUMzRTA+ICI8VTMxNDY+PFUzMTU3PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTT0wKKzxVQzNFMT4gIjxVMzE0Nj48VTMxNTc+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NPTEcKKzxVQzNFMj4gIjxVMzE0Nj48VTMxNTc+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NPTE0KKzxVQzNFMz4gIjxVMzE0Nj48VTMxNTc+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NPTEIKKzxVQzNFND4gIjxVMzE0Nj48VTMxNTc+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NPTFMKKzxVQzNFNT4gIjxVMzE0Nj48VTMxNTc+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NPTFQKKzxVQzNFNj4gIjxVMzE0Nj48VTMxNTc+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NPTFAKKzxVQzNFNz4gIjxVMzE0Nj48VTMxNTc+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NPTEgKKzxVQzNFOD4gIjxVMzE0Nj48VTMxNTc+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NPTQorPFVDM0U5PiAiPFUzMTQ2PjxVMzE1Nz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBTU09CCis8VUMzRUE+ICI8VTMxNDY+PFUzMTU3PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTT0JTCis8VUMzRUI+ICI8VTMxNDY+PFUzMTU3PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTT1MKKzxVQzNFQz4gIjxVMzE0Nj48VTMxNTc+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NPU1MKKzxVQzNFRD4gIjxVMzE0Nj48VTMxNTc+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NPTkcKKzxVQzNFRT4gIjxVMzE0Nj48VTMxNTc+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NPSgorPFVDM0VGPiAiPFUzMTQ2PjxVMzE1Nz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBTU09DCis8VUMzRjA+ICI8VTMxNDY+PFUzMTU3PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTT0sKKzxVQzNGMT4gIjxVMzE0Nj48VTMxNTc+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NPVAorPFVDM0YyPiAiPFUzMTQ2PjxVMzE1Nz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTU09QCis8VUMzRjM+ICI8VTMxNDY+PFUzMTU3PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTT0gKKzxVQzNGND4gIjxVMzE0Nj48VTMxNTg+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dBCis8VUMzRjU+ICI8VTMxNDY+PFUzMTU4PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0FHCis8VUMzRjY+ICI8VTMxNDY+PFUzMTU4PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0FHRworPFVDM0Y3PiAiPFUzMTQ2PjxVMzE1OD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dBR1MKKzxVQzNGOD4gIjxVMzE0Nj48VTMxNTg+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXQU4KKzxVQzNGOT4gIjxVMzE0Nj48VTMxNTg+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXQU5JCis8VUMzRkE+ICI8VTMxNDY+PFUzMTU4PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0FOSAorPFVDM0ZCPiAiPFUzMTQ2PjxVMzE1OD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dBRAorPFVDM0ZDPiAiPFUzMTQ2PjxVMzE1OD48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dBTAorPFVDM0ZEPiAiPFUzMTQ2PjxVMzE1OD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dBTEcKKzxVQzNGRT4gIjxVMzE0Nj48VTMxNTg+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXQUxNCis8VUMzRkY+ICI8VTMxNDY+PFUzMTU4PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0FMQgorPFVDNDAwPiAiPFUzMTQ2PjxVMzE1OD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dBTFMKKzxVQzQwMT4gIjxVMzE0Nj48VTMxNTg+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXQUxUCis8VUM0MDI+ICI8VTMxNDY+PFUzMTU4PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0FMUAorPFVDNDAzPiAiPFUzMTQ2PjxVMzE1OD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dBTEgKKzxVQzQwND4gIjxVMzE0Nj48VTMxNTg+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXQU0KKzxVQzQwNT4gIjxVMzE0Nj48VTMxNTg+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXQUIKKzxVQzQwNj4gIjxVMzE0Nj48VTMxNTg+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXQUJTCis8VUM0MDc+ICI8VTMxNDY+PFUzMTU4PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0FTCis8VUM0MDg+ICI8VTMxNDY+PFUzMTU4PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0FTUworPFVDNDA5PiAiPFUzMTQ2PjxVMzE1OD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dBTkcKKzxVQzQwQT4gIjxVMzE0Nj48VTMxNTg+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXQUoKKzxVQzQwQj4gIjxVMzE0Nj48VTMxNTg+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXQUMKKzxVQzQwQz4gIjxVMzE0Nj48VTMxNTg+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXQUsKKzxVQzQwRD4gIjxVMzE0Nj48VTMxNTg+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXQVQKKzxVQzQwRT4gIjxVMzE0Nj48VTMxNTg+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXQVAKKzxVQzQwRj4gIjxVMzE0Nj48VTMxNTg+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXQUgKKzxVQzQxMD4gIjxVMzE0Nj48VTMxNTk+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dBRQorPFVDNDExPiAiPFUzMTQ2PjxVMzE1OT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dBRUcKKzxVQzQxMj4gIjxVMzE0Nj48VTMxNTk+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXQUVHRworPFVDNDEzPiAiPFUzMTQ2PjxVMzE1OT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dBRUdTCis8VUM0MTQ+ICI8VTMxNDY+PFUzMTU5PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0FFTgorPFVDNDE1PiAiPFUzMTQ2PjxVMzE1OT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dBRU5JCis8VUM0MTY+ICI8VTMxNDY+PFUzMTU5PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0FFTkgKKzxVQzQxNz4gIjxVMzE0Nj48VTMxNTk+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXQUVECis8VUM0MTg+ICI8VTMxNDY+PFUzMTU5PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0FFTAorPFVDNDE5PiAiPFUzMTQ2PjxVMzE1OT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dBRUxHCis8VUM0MUE+ICI8VTMxNDY+PFUzMTU5PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0FFTE0KKzxVQzQxQj4gIjxVMzE0Nj48VTMxNTk+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXQUVMQgorPFVDNDFDPiAiPFUzMTQ2PjxVMzE1OT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dBRUxTCis8VUM0MUQ+ICI8VTMxNDY+PFUzMTU5PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0FFTFQKKzxVQzQxRT4gIjxVMzE0Nj48VTMxNTk+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXQUVMUAorPFVDNDFGPiAiPFUzMTQ2PjxVMzE1OT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dBRUxICis8VUM0MjA+ICI8VTMxNDY+PFUzMTU5PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0FFTQorPFVDNDIxPiAiPFUzMTQ2PjxVMzE1OT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dBRUIKKzxVQzQyMj4gIjxVMzE0Nj48VTMxNTk+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXQUVCUworPFVDNDIzPiAiPFUzMTQ2PjxVMzE1OT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dBRVMKKzxVQzQyND4gIjxVMzE0Nj48VTMxNTk+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXQUVTUworPFVDNDI1PiAiPFUzMTQ2PjxVMzE1OT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dBRU5HCis8VUM0MjY+ICI8VTMxNDY+PFUzMTU5PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0FFSgorPFVDNDI3PiAiPFUzMTQ2PjxVMzE1OT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dBRUMKKzxVQzQyOD4gIjxVMzE0Nj48VTMxNTk+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXQUVLCis8VUM0Mjk+ICI8VTMxNDY+PFUzMTU5PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0FFVAorPFVDNDJBPiAiPFUzMTQ2PjxVMzE1OT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dBRVAKKzxVQzQyQj4gIjxVMzE0Nj48VTMxNTk+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXQUVICis8VUM0MkM+ICI8VTMxNDY+PFUzMTVBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NPRQorPFVDNDJEPiAiPFUzMTQ2PjxVMzE1QT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBTU09FRworPFVDNDJFPiAiPFUzMTQ2PjxVMzE1QT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBTU09FR0cKKzxVQzQyRj4gIjxVMzE0Nj48VTMxNUE+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NPRUdTCis8VUM0MzA+ICI8VTMxNDY+PFUzMTVBPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTT0VOCis8VUM0MzE+ICI8VTMxNDY+PFUzMTVBPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTT0VOSQorPFVDNDMyPiAiPFUzMTQ2PjxVMzE1QT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBTU09FTkgKKzxVQzQzMz4gIjxVMzE0Nj48VTMxNUE+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NPRUQKKzxVQzQzND4gIjxVMzE0Nj48VTMxNUE+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NPRUwKKzxVQzQzNT4gIjxVMzE0Nj48VTMxNUE+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NPRUxHCis8VUM0MzY+ICI8VTMxNDY+PFUzMTVBPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTT0VMTQorPFVDNDM3PiAiPFUzMTQ2PjxVMzE1QT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBTU09FTEIKKzxVQzQzOD4gIjxVMzE0Nj48VTMxNUE+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NPRUxTCis8VUM0Mzk+ICI8VTMxNDY+PFUzMTVBPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTT0VMVAorPFVDNDNBPiAiPFUzMTQ2PjxVMzE1QT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBTU09FTFAKKzxVQzQzQj4gIjxVMzE0Nj48VTMxNUE+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NPRUxICis8VUM0M0M+ICI8VTMxNDY+PFUzMTVBPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTT0VNCis8VUM0M0Q+ICI8VTMxNDY+PFUzMTVBPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTT0VCCis8VUM0M0U+ICI8VTMxNDY+PFUzMTVBPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTT0VCUworPFVDNDNGPiAiPFUzMTQ2PjxVMzE1QT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBTU09FUworPFVDNDQwPiAiPFUzMTQ2PjxVMzE1QT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBTU09FU1MKKzxVQzQ0MT4gIjxVMzE0Nj48VTMxNUE+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NPRU5HCis8VUM0NDI+ICI8VTMxNDY+PFUzMTVBPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFNTT0VKCis8VUM0NDM+ICI8VTMxNDY+PFUzMTVBPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTT0VDCis8VUM0NDQ+ICI8VTMxNDY+PFUzMTVBPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTT0VLCis8VUM0NDU+ICI8VTMxNDY+PFUzMTVBPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFNTT0VUCis8VUM0NDY+ICI8VTMxNDY+PFUzMTVBPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFNTT0VQCis8VUM0NDc+ICI8VTMxNDY+PFUzMTVBPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTT0VICis8VUM0NDg+ICI8VTMxNDY+PFUzMTVCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZTworPFVDNDQ5PiAiPFUzMTQ2PjxVMzE1Qj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lPRworPFVDNDRBPiAiPFUzMTQ2PjxVMzE1Qj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lPR0cKKzxVQzQ0Qj4gIjxVMzE0Nj48VTMxNUI+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZT0dTCis8VUM0NEM+ICI8VTMxNDY+PFUzMTVCPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWU9OCis8VUM0NEQ+ICI8VTMxNDY+PFUzMTVCPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWU9OSQorPFVDNDRFPiAiPFUzMTQ2PjxVMzE1Qj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lPTkgKKzxVQzQ0Rj4gIjxVMzE0Nj48VTMxNUI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZT0QKKzxVQzQ1MD4gIjxVMzE0Nj48VTMxNUI+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZT0wKKzxVQzQ1MT4gIjxVMzE0Nj48VTMxNUI+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZT0xHCis8VUM0NTI+ICI8VTMxNDY+PFUzMTVCPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWU9MTQorPFVDNDUzPiAiPFUzMTQ2PjxVMzE1Qj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lPTEIKKzxVQzQ1ND4gIjxVMzE0Nj48VTMxNUI+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZT0xTCis8VUM0NTU+ICI8VTMxNDY+PFUzMTVCPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWU9MVAorPFVDNDU2PiAiPFUzMTQ2PjxVMzE1Qj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lPTFAKKzxVQzQ1Nz4gIjxVMzE0Nj48VTMxNUI+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZT0xICis8VUM0NTg+ICI8VTMxNDY+PFUzMTVCPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWU9NCis8VUM0NTk+ICI8VTMxNDY+PFUzMTVCPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWU9CCis8VUM0NUE+ICI8VTMxNDY+PFUzMTVCPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWU9CUworPFVDNDVCPiAiPFUzMTQ2PjxVMzE1Qj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lPUworPFVDNDVDPiAiPFUzMTQ2PjxVMzE1Qj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lPU1MKKzxVQzQ1RD4gIjxVMzE0Nj48VTMxNUI+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZT05HCis8VUM0NUU+ICI8VTMxNDY+PFUzMTVCPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWU9KCis8VUM0NUY+ICI8VTMxNDY+PFUzMTVCPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWU9DCis8VUM0NjA+ICI8VTMxNDY+PFUzMTVCPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWU9LCis8VUM0NjE+ICI8VTMxNDY+PFUzMTVCPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWU9UCis8VUM0NjI+ICI8VTMxNDY+PFUzMTVCPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWU9QCis8VUM0NjM+ICI8VTMxNDY+PFUzMTVCPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWU9ICis8VUM0NjQ+ICI8VTMxNDY+PFUzMTVDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NVCis8VUM0NjU+ICI8VTMxNDY+PFUzMTVDPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTVUcKKzxVQzQ2Nj4gIjxVMzE0Nj48VTMxNUM+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NVR0cKKzxVQzQ2Nz4gIjxVMzE0Nj48VTMxNUM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NVR1MKKzxVQzQ2OD4gIjxVMzE0Nj48VTMxNUM+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NVTgorPFVDNDY5PiAiPFUzMTQ2PjxVMzE1Qz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1VOSQorPFVDNDZBPiAiPFUzMTQ2PjxVMzE1Qz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1VOSAorPFVDNDZCPiAiPFUzMTQ2PjxVMzE1Qz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1VECis8VUM0NkM+ICI8VTMxNDY+PFUzMTVDPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTVUwKKzxVQzQ2RD4gIjxVMzE0Nj48VTMxNUM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NVTEcKKzxVQzQ2RT4gIjxVMzE0Nj48VTMxNUM+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NVTE0KKzxVQzQ2Rj4gIjxVMzE0Nj48VTMxNUM+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NVTEIKKzxVQzQ3MD4gIjxVMzE0Nj48VTMxNUM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NVTFMKKzxVQzQ3MT4gIjxVMzE0Nj48VTMxNUM+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NVTFQKKzxVQzQ3Mj4gIjxVMzE0Nj48VTMxNUM+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NVTFAKKzxVQzQ3Mz4gIjxVMzE0Nj48VTMxNUM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NVTEgKKzxVQzQ3ND4gIjxVMzE0Nj48VTMxNUM+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NVTQorPFVDNDc1PiAiPFUzMTQ2PjxVMzE1Qz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1VCCis8VUM0NzY+ICI8VTMxNDY+PFUzMTVDPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTVUJTCis8VUM0Nzc+ICI8VTMxNDY+PFUzMTVDPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTVVMKKzxVQzQ3OD4gIjxVMzE0Nj48VTMxNUM+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NVU1MKKzxVQzQ3OT4gIjxVMzE0Nj48VTMxNUM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NVTkcKKzxVQzQ3QT4gIjxVMzE0Nj48VTMxNUM+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NVSgorPFVDNDdCPiAiPFUzMTQ2PjxVMzE1Qz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1VDCis8VUM0N0M+ICI8VTMxNDY+PFUzMTVDPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTVUsKKzxVQzQ3RD4gIjxVMzE0Nj48VTMxNUM+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NVVAorPFVDNDdFPiAiPFUzMTQ2PjxVMzE1Qz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1VQCis8VUM0N0Y+ICI8VTMxNDY+PFUzMTVDPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTVUgKKzxVQzQ4MD4gIjxVMzE0Nj48VTMxNUQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dFTworPFVDNDgxPiAiPFUzMTQ2PjxVMzE1RD48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dFT0cKKzxVQzQ4Mj4gIjxVMzE0Nj48VTMxNUQ+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXRU9HRworPFVDNDgzPiAiPFUzMTQ2PjxVMzE1RD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dFT0dTCis8VUM0ODQ+ICI8VTMxNDY+PFUzMTVEPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0VPTgorPFVDNDg1PiAiPFUzMTQ2PjxVMzE1RD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dFT05JCis8VUM0ODY+ICI8VTMxNDY+PFUzMTVEPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0VPTkgKKzxVQzQ4Nz4gIjxVMzE0Nj48VTMxNUQ+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXRU9ECis8VUM0ODg+ICI8VTMxNDY+PFUzMTVEPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0VPTAorPFVDNDg5PiAiPFUzMTQ2PjxVMzE1RD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dFT0xHCis8VUM0OEE+ICI8VTMxNDY+PFUzMTVEPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0VPTE0KKzxVQzQ4Qj4gIjxVMzE0Nj48VTMxNUQ+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXRU9MQgorPFVDNDhDPiAiPFUzMTQ2PjxVMzE1RD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dFT0xTCis8VUM0OEQ+ICI8VTMxNDY+PFUzMTVEPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0VPTFQKKzxVQzQ4RT4gIjxVMzE0Nj48VTMxNUQ+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXRU9MUAorPFVDNDhGPiAiPFUzMTQ2PjxVMzE1RD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dFT0xICis8VUM0OTA+ICI8VTMxNDY+PFUzMTVEPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0VPTQorPFVDNDkxPiAiPFUzMTQ2PjxVMzE1RD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dFT0IKKzxVQzQ5Mj4gIjxVMzE0Nj48VTMxNUQ+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXRU9CUworPFVDNDkzPiAiPFUzMTQ2PjxVMzE1RD48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dFT1MKKzxVQzQ5ND4gIjxVMzE0Nj48VTMxNUQ+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXRU9TUworPFVDNDk1PiAiPFUzMTQ2PjxVMzE1RD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dFT05HCis8VUM0OTY+ICI8VTMxNDY+PFUzMTVEPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0VPSgorPFVDNDk3PiAiPFUzMTQ2PjxVMzE1RD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dFT0MKKzxVQzQ5OD4gIjxVMzE0Nj48VTMxNUQ+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXRU9LCis8VUM0OTk+ICI8VTMxNDY+PFUzMTVEPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0VPVAorPFVDNDlBPiAiPFUzMTQ2PjxVMzE1RD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dFT1AKKzxVQzQ5Qj4gIjxVMzE0Nj48VTMxNUQ+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXRU9ICis8VUM0OUM+ICI8VTMxNDY+PFUzMTVFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXRQorPFVDNDlEPiAiPFUzMTQ2PjxVMzE1RT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dFRworPFVDNDlFPiAiPFUzMTQ2PjxVMzE1RT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dFR0cKKzxVQzQ5Rj4gIjxVMzE0Nj48VTMxNUU+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXRUdTCis8VUM0QTA+ICI8VTMxNDY+PFUzMTVFPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0VOCis8VUM0QTE+ICI8VTMxNDY+PFUzMTVFPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0VOSQorPFVDNEEyPiAiPFUzMTQ2PjxVMzE1RT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dFTkgKKzxVQzRBMz4gIjxVMzE0Nj48VTMxNUU+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXRUQKKzxVQzRBND4gIjxVMzE0Nj48VTMxNUU+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXRUwKKzxVQzRBNT4gIjxVMzE0Nj48VTMxNUU+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXRUxHCis8VUM0QTY+ICI8VTMxNDY+PFUzMTVFPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0VMTQorPFVDNEE3PiAiPFUzMTQ2PjxVMzE1RT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dFTEIKKzxVQzRBOD4gIjxVMzE0Nj48VTMxNUU+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXRUxTCis8VUM0QTk+ICI8VTMxNDY+PFUzMTVFPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0VMVAorPFVDNEFBPiAiPFUzMTQ2PjxVMzE1RT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dFTFAKKzxVQzRBQj4gIjxVMzE0Nj48VTMxNUU+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXRUxICis8VUM0QUM+ICI8VTMxNDY+PFUzMTVFPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0VNCis8VUM0QUQ+ICI8VTMxNDY+PFUzMTVFPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0VCCis8VUM0QUU+ICI8VTMxNDY+PFUzMTVFPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0VCUworPFVDNEFGPiAiPFUzMTQ2PjxVMzE1RT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dFUworPFVDNEIwPiAiPFUzMTQ2PjxVMzE1RT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dFU1MKKzxVQzRCMT4gIjxVMzE0Nj48VTMxNUU+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXRU5HCis8VUM0QjI+ICI8VTMxNDY+PFUzMTVFPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0VKCis8VUM0QjM+ICI8VTMxNDY+PFUzMTVFPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0VDCis8VUM0QjQ+ICI8VTMxNDY+PFUzMTVFPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0VLCis8VUM0QjU+ICI8VTMxNDY+PFUzMTVFPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0VUCis8VUM0QjY+ICI8VTMxNDY+PFUzMTVFPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0VQCis8VUM0Qjc+ICI8VTMxNDY+PFUzMTVFPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0VICis8VUM0Qjg+ICI8VTMxNDY+PFUzMTVGPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXSQorPFVDNEI5PiAiPFUzMTQ2PjxVMzE1Rj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dJRworPFVDNEJBPiAiPFUzMTQ2PjxVMzE1Rj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dJR0cKKzxVQzRCQj4gIjxVMzE0Nj48VTMxNUY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXSUdTCis8VUM0QkM+ICI8VTMxNDY+PFUzMTVGPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0lOCis8VUM0QkQ+ICI8VTMxNDY+PFUzMTVGPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0lOSQorPFVDNEJFPiAiPFUzMTQ2PjxVMzE1Rj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dJTkgKKzxVQzRCRj4gIjxVMzE0Nj48VTMxNUY+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXSUQKKzxVQzRDMD4gIjxVMzE0Nj48VTMxNUY+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXSUwKKzxVQzRDMT4gIjxVMzE0Nj48VTMxNUY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXSUxHCis8VUM0QzI+ICI8VTMxNDY+PFUzMTVGPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0lMTQorPFVDNEMzPiAiPFUzMTQ2PjxVMzE1Rj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dJTEIKKzxVQzRDND4gIjxVMzE0Nj48VTMxNUY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXSUxTCis8VUM0QzU+ICI8VTMxNDY+PFUzMTVGPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0lMVAorPFVDNEM2PiAiPFUzMTQ2PjxVMzE1Rj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dJTFAKKzxVQzRDNz4gIjxVMzE0Nj48VTMxNUY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXSUxICis8VUM0Qzg+ICI8VTMxNDY+PFUzMTVGPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0lNCis8VUM0Qzk+ICI8VTMxNDY+PFUzMTVGPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0lCCis8VUM0Q0E+ICI8VTMxNDY+PFUzMTVGPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0lCUworPFVDNENCPiAiPFUzMTQ2PjxVMzE1Rj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dJUworPFVDNENDPiAiPFUzMTQ2PjxVMzE1Rj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1dJU1MKKzxVQzRDRD4gIjxVMzE0Nj48VTMxNUY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NXSU5HCis8VUM0Q0U+ICI8VTMxNDY+PFUzMTVGPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0lKCis8VUM0Q0Y+ICI8VTMxNDY+PFUzMTVGPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0lDCis8VUM0RDA+ICI8VTMxNDY+PFUzMTVGPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0lLCis8VUM0RDE+ICI8VTMxNDY+PFUzMTVGPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0lUCis8VUM0RDI+ICI8VTMxNDY+PFUzMTVGPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0lQCis8VUM0RDM+ICI8VTMxNDY+PFUzMTVGPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTV0lICis8VUM0RDQ+ICI8VTMxNDY+PFUzMTYwPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZVQorPFVDNEQ1PiAiPFUzMTQ2PjxVMzE2MD48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lVRworPFVDNEQ2PiAiPFUzMTQ2PjxVMzE2MD48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lVR0cKKzxVQzRENz4gIjxVMzE0Nj48VTMxNjA+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZVUdTCis8VUM0RDg+ICI8VTMxNDY+PFUzMTYwPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWVVOCis8VUM0RDk+ICI8VTMxNDY+PFUzMTYwPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWVVOSQorPFVDNERBPiAiPFUzMTQ2PjxVMzE2MD48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lVTkgKKzxVQzREQj4gIjxVMzE0Nj48VTMxNjA+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZVUQKKzxVQzREQz4gIjxVMzE0Nj48VTMxNjA+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZVUwKKzxVQzRERD4gIjxVMzE0Nj48VTMxNjA+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZVUxHCis8VUM0REU+ICI8VTMxNDY+PFUzMTYwPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWVVMTQorPFVDNERGPiAiPFUzMTQ2PjxVMzE2MD48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lVTEIKKzxVQzRFMD4gIjxVMzE0Nj48VTMxNjA+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZVUxTCis8VUM0RTE+ICI8VTMxNDY+PFUzMTYwPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWVVMVAorPFVDNEUyPiAiPFUzMTQ2PjxVMzE2MD48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lVTFAKKzxVQzRFMz4gIjxVMzE0Nj48VTMxNjA+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZVUxICis8VUM0RTQ+ICI8VTMxNDY+PFUzMTYwPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWVVNCis8VUM0RTU+ICI8VTMxNDY+PFUzMTYwPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWVVCCis8VUM0RTY+ICI8VTMxNDY+PFUzMTYwPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWVVCUworPFVDNEU3PiAiPFUzMTQ2PjxVMzE2MD48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lVUworPFVDNEU4PiAiPFUzMTQ2PjxVMzE2MD48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lVU1MKKzxVQzRFOT4gIjxVMzE0Nj48VTMxNjA+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZVU5HCis8VUM0RUE+ICI8VTMxNDY+PFUzMTYwPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWVVKCis8VUM0RUI+ICI8VTMxNDY+PFUzMTYwPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWVVDCis8VUM0RUM+ICI8VTMxNDY+PFUzMTYwPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWVVLCis8VUM0RUQ+ICI8VTMxNDY+PFUzMTYwPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWVVUCis8VUM0RUU+ICI8VTMxNDY+PFUzMTYwPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWVVQCis8VUM0RUY+ICI8VTMxNDY+PFUzMTYwPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWVVICis8VUM0RjA+ICI8VTMxNDY+PFUzMTYxPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFVQorPFVDNEYxPiAiPFUzMTQ2PjxVMzE2MT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0VVRworPFVDNEYyPiAiPFUzMTQ2PjxVMzE2MT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0VVR0cKKzxVQzRGMz4gIjxVMzE0Nj48VTMxNjE+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFVUdTCis8VUM0RjQ+ICI8VTMxNDY+PFUzMTYxPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRVVOCis8VUM0RjU+ICI8VTMxNDY+PFUzMTYxPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRVVOSQorPFVDNEY2PiAiPFUzMTQ2PjxVMzE2MT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0VVTkgKKzxVQzRGNz4gIjxVMzE0Nj48VTMxNjE+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFVUQKKzxVQzRGOD4gIjxVMzE0Nj48VTMxNjE+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFVUwKKzxVQzRGOT4gIjxVMzE0Nj48VTMxNjE+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFVUxHCis8VUM0RkE+ICI8VTMxNDY+PFUzMTYxPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRVVMTQorPFVDNEZCPiAiPFUzMTQ2PjxVMzE2MT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0VVTEIKKzxVQzRGQz4gIjxVMzE0Nj48VTMxNjE+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFVUxTCis8VUM0RkQ+ICI8VTMxNDY+PFUzMTYxPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRVVMVAorPFVDNEZFPiAiPFUzMTQ2PjxVMzE2MT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0VVTFAKKzxVQzRGRj4gIjxVMzE0Nj48VTMxNjE+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFVUxICis8VUM1MDA+ICI8VTMxNDY+PFUzMTYxPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRVVNCis8VUM1MDE+ICI8VTMxNDY+PFUzMTYxPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRVVCCis8VUM1MDI+ICI8VTMxNDY+PFUzMTYxPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRVVCUworPFVDNTAzPiAiPFUzMTQ2PjxVMzE2MT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0VVUworPFVDNTA0PiAiPFUzMTQ2PjxVMzE2MT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0VVU1MKKzxVQzUwNT4gIjxVMzE0Nj48VTMxNjE+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NFVU5HCis8VUM1MDY+ICI8VTMxNDY+PFUzMTYxPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRVVKCis8VUM1MDc+ICI8VTMxNDY+PFUzMTYxPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRVVDCis8VUM1MDg+ICI8VTMxNDY+PFUzMTYxPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRVVLCis8VUM1MDk+ICI8VTMxNDY+PFUzMTYxPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRVVUCis8VUM1MEE+ICI8VTMxNDY+PFUzMTYxPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRVVQCis8VUM1MEI+ICI8VTMxNDY+PFUzMTYxPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTRVVICis8VUM1MEM+ICI8VTMxNDY+PFUzMTYyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZSQorPFVDNTBEPiAiPFUzMTQ2PjxVMzE2Mj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lJRworPFVDNTBFPiAiPFUzMTQ2PjxVMzE2Mj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lJR0cKKzxVQzUwRj4gIjxVMzE0Nj48VTMxNjI+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZSUdTCis8VUM1MTA+ICI8VTMxNDY+PFUzMTYyPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUlOCis8VUM1MTE+ICI8VTMxNDY+PFUzMTYyPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUlOSQorPFVDNTEyPiAiPFUzMTQ2PjxVMzE2Mj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lJTkgKKzxVQzUxMz4gIjxVMzE0Nj48VTMxNjI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZSUQKKzxVQzUxND4gIjxVMzE0Nj48VTMxNjI+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZSUwKKzxVQzUxNT4gIjxVMzE0Nj48VTMxNjI+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZSUxHCis8VUM1MTY+ICI8VTMxNDY+PFUzMTYyPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUlMTQorPFVDNTE3PiAiPFUzMTQ2PjxVMzE2Mj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lJTEIKKzxVQzUxOD4gIjxVMzE0Nj48VTMxNjI+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZSUxTCis8VUM1MTk+ICI8VTMxNDY+PFUzMTYyPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUlMVAorPFVDNTFBPiAiPFUzMTQ2PjxVMzE2Mj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lJTFAKKzxVQzUxQj4gIjxVMzE0Nj48VTMxNjI+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZSUxICis8VUM1MUM+ICI8VTMxNDY+PFUzMTYyPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUlNCis8VUM1MUQ+ICI8VTMxNDY+PFUzMTYyPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUlCCis8VUM1MUU+ICI8VTMxNDY+PFUzMTYyPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUlCUworPFVDNTFGPiAiPFUzMTQ2PjxVMzE2Mj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lJUworPFVDNTIwPiAiPFUzMTQ2PjxVMzE2Mj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBTU1lJU1MKKzxVQzUyMT4gIjxVMzE0Nj48VTMxNjI+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NZSU5HCis8VUM1MjI+ICI8VTMxNDY+PFUzMTYyPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUlKCis8VUM1MjM+ICI8VTMxNDY+PFUzMTYyPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUlDCis8VUM1MjQ+ICI8VTMxNDY+PFUzMTYyPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUlLCis8VUM1MjU+ICI8VTMxNDY+PFUzMTYyPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUlUCis8VUM1MjY+ICI8VTMxNDY+PFUzMTYyPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUlQCis8VUM1Mjc+ICI8VTMxNDY+PFUzMTYyPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTWUlICis8VUM1Mjg+ICI8VTMxNDY+PFUzMTYzPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NJCis8VUM1Mjk+ICI8VTMxNDY+PFUzMTYzPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTSUcKKzxVQzUyQT4gIjxVMzE0Nj48VTMxNjM+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NJR0cKKzxVQzUyQj4gIjxVMzE0Nj48VTMxNjM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NJR1MKKzxVQzUyQz4gIjxVMzE0Nj48VTMxNjM+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NJTgorPFVDNTJEPiAiPFUzMTQ2PjxVMzE2Mz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0lOSQorPFVDNTJFPiAiPFUzMTQ2PjxVMzE2Mz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0lOSAorPFVDNTJGPiAiPFUzMTQ2PjxVMzE2Mz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0lECis8VUM1MzA+ICI8VTMxNDY+PFUzMTYzPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTSUwKKzxVQzUzMT4gIjxVMzE0Nj48VTMxNjM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NJTEcKKzxVQzUzMj4gIjxVMzE0Nj48VTMxNjM+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NJTE0KKzxVQzUzMz4gIjxVMzE0Nj48VTMxNjM+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NJTEIKKzxVQzUzND4gIjxVMzE0Nj48VTMxNjM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NJTFMKKzxVQzUzNT4gIjxVMzE0Nj48VTMxNjM+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NJTFQKKzxVQzUzNj4gIjxVMzE0Nj48VTMxNjM+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NJTFAKKzxVQzUzNz4gIjxVMzE0Nj48VTMxNjM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NJTEgKKzxVQzUzOD4gIjxVMzE0Nj48VTMxNjM+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NJTQorPFVDNTM5PiAiPFUzMTQ2PjxVMzE2Mz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0lCCis8VUM1M0E+ICI8VTMxNDY+PFUzMTYzPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFNTSUJTCis8VUM1M0I+ICI8VTMxNDY+PFUzMTYzPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTSVMKKzxVQzUzQz4gIjxVMzE0Nj48VTMxNjM+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NJU1MKKzxVQzUzRD4gIjxVMzE0Nj48VTMxNjM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NJTkcKKzxVQzUzRT4gIjxVMzE0Nj48VTMxNjM+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NJSgorPFVDNTNGPiAiPFUzMTQ2PjxVMzE2Mz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0lDCis8VUM1NDA+ICI8VTMxNDY+PFUzMTYzPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFNTSUsKKzxVQzU0MT4gIjxVMzE0Nj48VTMxNjM+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgU1NJVAorPFVDNTQyPiAiPFUzMTQ2PjxVMzE2Mz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBTU0lQCis8VUM1NDM+ICI8VTMxNDY+PFUzMTYzPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFNTSUgKKzxVQzU0ND4gIjxVMzE0Nz48VTMxNEY+IgklIEhBTkdVTCBTWUxMQUJMRSBBCis8VUM1NDU+ICI8VTMxNDc+PFUzMTRGPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEFHCis8VUM1NDY+ICI8VTMxNDc+PFUzMTRGPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEFHRworPFVDNTQ3PiAiPFUzMTQ3PjxVMzE0Rj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBBR1MKKzxVQzU0OD4gIjxVMzE0Nz48VTMxNEY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQU4KKzxVQzU0OT4gIjxVMzE0Nz48VTMxNEY+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQU5JCis8VUM1NEE+ICI8VTMxNDc+PFUzMTRGPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEFOSAorPFVDNTRCPiAiPFUzMTQ3PjxVMzE0Rj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBBRAorPFVDNTRDPiAiPFUzMTQ3PjxVMzE0Rj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBBTAorPFVDNTREPiAiPFUzMTQ3PjxVMzE0Rj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBBTEcKKzxVQzU0RT4gIjxVMzE0Nz48VTMxNEY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQUxNCis8VUM1NEY+ICI8VTMxNDc+PFUzMTRGPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEFMQgorPFVDNTUwPiAiPFUzMTQ3PjxVMzE0Rj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBBTFMKKzxVQzU1MT4gIjxVMzE0Nz48VTMxNEY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQUxUCis8VUM1NTI+ICI8VTMxNDc+PFUzMTRGPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEFMUAorPFVDNTUzPiAiPFUzMTQ3PjxVMzE0Rj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBBTEgKKzxVQzU1ND4gIjxVMzE0Nz48VTMxNEY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQU0KKzxVQzU1NT4gIjxVMzE0Nz48VTMxNEY+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQUIKKzxVQzU1Nj4gIjxVMzE0Nz48VTMxNEY+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQUJTCis8VUM1NTc+ICI8VTMxNDc+PFUzMTRGPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEFTCis8VUM1NTg+ICI8VTMxNDc+PFUzMTRGPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEFTUworPFVDNTU5PiAiPFUzMTQ3PjxVMzE0Rj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBBTkcKKzxVQzU1QT4gIjxVMzE0Nz48VTMxNEY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQUoKKzxVQzU1Qj4gIjxVMzE0Nz48VTMxNEY+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQUMKKzxVQzU1Qz4gIjxVMzE0Nz48VTMxNEY+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQUsKKzxVQzU1RD4gIjxVMzE0Nz48VTMxNEY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQVQKKzxVQzU1RT4gIjxVMzE0Nz48VTMxNEY+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgQVAKKzxVQzU1Rj4gIjxVMzE0Nz48VTMxNEY+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQUgKKzxVQzU2MD4gIjxVMzE0Nz48VTMxNTA+IgklIEhBTkdVTCBTWUxMQUJMRSBBRQorPFVDNTYxPiAiPFUzMTQ3PjxVMzE1MD48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBBRUcKKzxVQzU2Mj4gIjxVMzE0Nz48VTMxNTA+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQUVHRworPFVDNTYzPiAiPFUzMTQ3PjxVMzE1MD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBBRUdTCis8VUM1NjQ+ICI8VTMxNDc+PFUzMTUwPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEFFTgorPFVDNTY1PiAiPFUzMTQ3PjxVMzE1MD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBBRU5JCis8VUM1NjY+ICI8VTMxNDc+PFUzMTUwPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEFFTkgKKzxVQzU2Nz4gIjxVMzE0Nz48VTMxNTA+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQUVECis8VUM1Njg+ICI8VTMxNDc+PFUzMTUwPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEFFTAorPFVDNTY5PiAiPFUzMTQ3PjxVMzE1MD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBBRUxHCis8VUM1NkE+ICI8VTMxNDc+PFUzMTUwPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEFFTE0KKzxVQzU2Qj4gIjxVMzE0Nz48VTMxNTA+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQUVMQgorPFVDNTZDPiAiPFUzMTQ3PjxVMzE1MD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBBRUxTCis8VUM1NkQ+ICI8VTMxNDc+PFUzMTUwPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEFFTFQKKzxVQzU2RT4gIjxVMzE0Nz48VTMxNTA+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgQUVMUAorPFVDNTZGPiAiPFUzMTQ3PjxVMzE1MD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBBRUxICis8VUM1NzA+ICI8VTMxNDc+PFUzMTUwPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEFFTQorPFVDNTcxPiAiPFUzMTQ3PjxVMzE1MD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBBRUIKKzxVQzU3Mj4gIjxVMzE0Nz48VTMxNTA+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQUVCUworPFVDNTczPiAiPFUzMTQ3PjxVMzE1MD48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBBRVMKKzxVQzU3ND4gIjxVMzE0Nz48VTMxNTA+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQUVTUworPFVDNTc1PiAiPFUzMTQ3PjxVMzE1MD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBBRU5HCis8VUM1NzY+ICI8VTMxNDc+PFUzMTUwPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEFFSgorPFVDNTc3PiAiPFUzMTQ3PjxVMzE1MD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBBRUMKKzxVQzU3OD4gIjxVMzE0Nz48VTMxNTA+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQUVLCis8VUM1Nzk+ICI8VTMxNDc+PFUzMTUwPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEFFVAorPFVDNTdBPiAiPFUzMTQ3PjxVMzE1MD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBBRVAKKzxVQzU3Qj4gIjxVMzE0Nz48VTMxNTA+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQUVICis8VUM1N0M+ICI8VTMxNDc+PFUzMTUxPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUEKKzxVQzU3RD4gIjxVMzE0Nz48VTMxNTE+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUFHCis8VUM1N0U+ICI8VTMxNDc+PFUzMTUxPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFlBR0cKKzxVQzU3Rj4gIjxVMzE0Nz48VTMxNTE+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUFHUworPFVDNTgwPiAiPFUzMTQ3PjxVMzE1MT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBZQU4KKzxVQzU4MT4gIjxVMzE0Nz48VTMxNTE+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgWUFOSQorPFVDNTgyPiAiPFUzMTQ3PjxVMzE1MT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBZQU5ICis8VUM1ODM+ICI8VTMxNDc+PFUzMTUxPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFlBRAorPFVDNTg0PiAiPFUzMTQ3PjxVMzE1MT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBZQUwKKzxVQzU4NT4gIjxVMzE0Nz48VTMxNTE+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUFMRworPFVDNTg2PiAiPFUzMTQ3PjxVMzE1MT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBZQUxNCis8VUM1ODc+ICI8VTMxNDc+PFUzMTUxPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFlBTEIKKzxVQzU4OD4gIjxVMzE0Nz48VTMxNTE+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUFMUworPFVDNTg5PiAiPFUzMTQ3PjxVMzE1MT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBZQUxUCis8VUM1OEE+ICI8VTMxNDc+PFUzMTUxPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFlBTFAKKzxVQzU4Qj4gIjxVMzE0Nz48VTMxNTE+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUFMSAorPFVDNThDPiAiPFUzMTQ3PjxVMzE1MT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBZQU0KKzxVQzU4RD4gIjxVMzE0Nz48VTMxNTE+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUFCCis8VUM1OEU+ICI8VTMxNDc+PFUzMTUxPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFlBQlMKKzxVQzU4Rj4gIjxVMzE0Nz48VTMxNTE+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgWUFTCis8VUM1OTA+ICI8VTMxNDc+PFUzMTUxPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFlBU1MKKzxVQzU5MT4gIjxVMzE0Nz48VTMxNTE+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgWUFORworPFVDNTkyPiAiPFUzMTQ3PjxVMzE1MT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBZQUoKKzxVQzU5Mz4gIjxVMzE0Nz48VTMxNTE+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUFDCis8VUM1OTQ+ICI8VTMxNDc+PFUzMTUxPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFlBSworPFVDNTk1PiAiPFUzMTQ3PjxVMzE1MT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBZQVQKKzxVQzU5Nj4gIjxVMzE0Nz48VTMxNTE+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUFQCis8VUM1OTc+ICI8VTMxNDc+PFUzMTUxPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFlBSAorPFVDNTk4PiAiPFUzMTQ3PjxVMzE1Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFlBRQorPFVDNTk5PiAiPFUzMTQ3PjxVMzE1Mj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBZQUVHCis8VUM1OUE+ICI8VTMxNDc+PFUzMTUyPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFlBRUdHCis8VUM1OUI+ICI8VTMxNDc+PFUzMTUyPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFlBRUdTCis8VUM1OUM+ICI8VTMxNDc+PFUzMTUyPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFlBRU4KKzxVQzU5RD4gIjxVMzE0Nz48VTMxNTI+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgWUFFTkkKKzxVQzU5RT4gIjxVMzE0Nz48VTMxNTI+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgWUFFTkgKKzxVQzU5Rj4gIjxVMzE0Nz48VTMxNTI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgWUFFRAorPFVDNUEwPiAiPFUzMTQ3PjxVMzE1Mj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBZQUVMCis8VUM1QTE+ICI8VTMxNDc+PFUzMTUyPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFlBRUxHCis8VUM1QTI+ICI8VTMxNDc+PFUzMTUyPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFlBRUxNCis8VUM1QTM+ICI8VTMxNDc+PFUzMTUyPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFlBRUxCCis8VUM1QTQ+ICI8VTMxNDc+PFUzMTUyPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFlBRUxTCis8VUM1QTU+ICI8VTMxNDc+PFUzMTUyPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFlBRUxUCis8VUM1QTY+ICI8VTMxNDc+PFUzMTUyPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFlBRUxQCis8VUM1QTc+ICI8VTMxNDc+PFUzMTUyPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFlBRUxICis8VUM1QTg+ICI8VTMxNDc+PFUzMTUyPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFlBRU0KKzxVQzVBOT4gIjxVMzE0Nz48VTMxNTI+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUFFQgorPFVDNUFBPiAiPFUzMTQ3PjxVMzE1Mj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBZQUVCUworPFVDNUFCPiAiPFUzMTQ3PjxVMzE1Mj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBZQUVTCis8VUM1QUM+ICI8VTMxNDc+PFUzMTUyPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFlBRVNTCis8VUM1QUQ+ICI8VTMxNDc+PFUzMTUyPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFlBRU5HCis8VUM1QUU+ICI8VTMxNDc+PFUzMTUyPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFlBRUoKKzxVQzVBRj4gIjxVMzE0Nz48VTMxNTI+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUFFQworPFVDNUIwPiAiPFUzMTQ3PjxVMzE1Mj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBZQUVLCis8VUM1QjE+ICI8VTMxNDc+PFUzMTUyPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFlBRVQKKzxVQzVCMj4gIjxVMzE0Nz48VTMxNTI+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUFFUAorPFVDNUIzPiAiPFUzMTQ3PjxVMzE1Mj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBZQUVICis8VUM1QjQ+ICI8VTMxNDc+PFUzMTUzPiIJJSBIQU5HVUwgU1lMTEFCTEUgRU8KKzxVQzVCNT4gIjxVMzE0Nz48VTMxNTM+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgRU9HCis8VUM1QjY+ICI8VTMxNDc+PFUzMTUzPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEVPR0cKKzxVQzVCNz4gIjxVMzE0Nz48VTMxNTM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgRU9HUworPFVDNUI4PiAiPFUzMTQ3PjxVMzE1Mz48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBFT04KKzxVQzVCOT4gIjxVMzE0Nz48VTMxNTM+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgRU9OSQorPFVDNUJBPiAiPFUzMTQ3PjxVMzE1Mz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBFT05ICis8VUM1QkI+ICI8VTMxNDc+PFUzMTUzPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEVPRAorPFVDNUJDPiAiPFUzMTQ3PjxVMzE1Mz48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBFT0wKKzxVQzVCRD4gIjxVMzE0Nz48VTMxNTM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRU9MRworPFVDNUJFPiAiPFUzMTQ3PjxVMzE1Mz48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBFT0xNCis8VUM1QkY+ICI8VTMxNDc+PFUzMTUzPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEVPTEIKKzxVQzVDMD4gIjxVMzE0Nz48VTMxNTM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgRU9MUworPFVDNUMxPiAiPFUzMTQ3PjxVMzE1Mz48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBFT0xUCis8VUM1QzI+ICI8VTMxNDc+PFUzMTUzPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEVPTFAKKzxVQzVDMz4gIjxVMzE0Nz48VTMxNTM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgRU9MSAorPFVDNUM0PiAiPFUzMTQ3PjxVMzE1Mz48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBFT00KKzxVQzVDNT4gIjxVMzE0Nz48VTMxNTM+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRU9CCis8VUM1QzY+ICI8VTMxNDc+PFUzMTUzPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEVPQlMKKzxVQzVDNz4gIjxVMzE0Nz48VTMxNTM+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgRU9TCis8VUM1Qzg+ICI8VTMxNDc+PFUzMTUzPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEVPU1MKKzxVQzVDOT4gIjxVMzE0Nz48VTMxNTM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRU9ORworPFVDNUNBPiAiPFUzMTQ3PjxVMzE1Mz48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBFT0oKKzxVQzVDQj4gIjxVMzE0Nz48VTMxNTM+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgRU9DCis8VUM1Q0M+ICI8VTMxNDc+PFUzMTUzPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEVPSworPFVDNUNEPiAiPFUzMTQ3PjxVMzE1Mz48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBFT1QKKzxVQzVDRT4gIjxVMzE0Nz48VTMxNTM+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgRU9QCis8VUM1Q0Y+ICI8VTMxNDc+PFUzMTUzPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEVPSAorPFVDNUQwPiAiPFUzMTQ3PjxVMzE1ND4iCSUgSEFOR1VMIFNZTExBQkxFIEUKKzxVQzVEMT4gIjxVMzE0Nz48VTMxNTQ+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgRUcKKzxVQzVEMj4gIjxVMzE0Nz48VTMxNTQ+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRUdHCis8VUM1RDM+ICI8VTMxNDc+PFUzMTU0PjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEVHUworPFVDNUQ0PiAiPFUzMTQ3PjxVMzE1ND48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBFTgorPFVDNUQ1PiAiPFUzMTQ3PjxVMzE1ND48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBFTkkKKzxVQzVENj4gIjxVMzE0Nz48VTMxNTQ+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgRU5ICis8VUM1RDc+ICI8VTMxNDc+PFUzMTU0PjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEVECis8VUM1RDg+ICI8VTMxNDc+PFUzMTU0PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEVMCis8VUM1RDk+ICI8VTMxNDc+PFUzMTU0PjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEVMRworPFVDNURBPiAiPFUzMTQ3PjxVMzE1ND48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBFTE0KKzxVQzVEQj4gIjxVMzE0Nz48VTMxNTQ+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRUxCCis8VUM1REM+ICI8VTMxNDc+PFUzMTU0PjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEVMUworPFVDNUREPiAiPFUzMTQ3PjxVMzE1ND48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBFTFQKKzxVQzVERT4gIjxVMzE0Nz48VTMxNTQ+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgRUxQCis8VUM1REY+ICI8VTMxNDc+PFUzMTU0PjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEVMSAorPFVDNUUwPiAiPFUzMTQ3PjxVMzE1ND48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBFTQorPFVDNUUxPiAiPFUzMTQ3PjxVMzE1ND48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBFQgorPFVDNUUyPiAiPFUzMTQ3PjxVMzE1ND48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBFQlMKKzxVQzVFMz4gIjxVMzE0Nz48VTMxNTQ+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgRVMKKzxVQzVFND4gIjxVMzE0Nz48VTMxNTQ+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgRVNTCis8VUM1RTU+ICI8VTMxNDc+PFUzMTU0PjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEVORworPFVDNUU2PiAiPFUzMTQ3PjxVMzE1ND48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBFSgorPFVDNUU3PiAiPFUzMTQ3PjxVMzE1ND48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBFQworPFVDNUU4PiAiPFUzMTQ3PjxVMzE1ND48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBFSworPFVDNUU5PiAiPFUzMTQ3PjxVMzE1ND48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBFVAorPFVDNUVBPiAiPFUzMTQ3PjxVMzE1ND48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBFUAorPFVDNUVCPiAiPFUzMTQ3PjxVMzE1ND48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBFSAorPFVDNUVDPiAiPFUzMTQ3PjxVMzE1NT4iCSUgSEFOR1VMIFNZTExBQkxFIFlFTworPFVDNUVEPiAiPFUzMTQ3PjxVMzE1NT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBZRU9HCis8VUM1RUU+ICI8VTMxNDc+PFUzMTU1PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFlFT0dHCis8VUM1RUY+ICI8VTMxNDc+PFUzMTU1PjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFlFT0dTCis8VUM1RjA+ICI8VTMxNDc+PFUzMTU1PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFlFT04KKzxVQzVGMT4gIjxVMzE0Nz48VTMxNTU+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgWUVPTkkKKzxVQzVGMj4gIjxVMzE0Nz48VTMxNTU+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgWUVPTkgKKzxVQzVGMz4gIjxVMzE0Nz48VTMxNTU+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgWUVPRAorPFVDNUY0PiAiPFUzMTQ3PjxVMzE1NT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBZRU9MCis8VUM1RjU+ICI8VTMxNDc+PFUzMTU1PjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFlFT0xHCis8VUM1RjY+ICI8VTMxNDc+PFUzMTU1PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFlFT0xNCis8VUM1Rjc+ICI8VTMxNDc+PFUzMTU1PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFlFT0xCCis8VUM1Rjg+ICI8VTMxNDc+PFUzMTU1PjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFlFT0xTCis8VUM1Rjk+ICI8VTMxNDc+PFUzMTU1PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFlFT0xUCis8VUM1RkE+ICI8VTMxNDc+PFUzMTU1PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFlFT0xQCis8VUM1RkI+ICI8VTMxNDc+PFUzMTU1PjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFlFT0xICis8VUM1RkM+ICI8VTMxNDc+PFUzMTU1PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFlFT00KKzxVQzVGRD4gIjxVMzE0Nz48VTMxNTU+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUVPQgorPFVDNUZFPiAiPFUzMTQ3PjxVMzE1NT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBZRU9CUworPFVDNUZGPiAiPFUzMTQ3PjxVMzE1NT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBZRU9TCis8VUM2MDA+ICI8VTMxNDc+PFUzMTU1PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFlFT1NTCis8VUM2MDE+ICI8VTMxNDc+PFUzMTU1PjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFlFT05HCis8VUM2MDI+ICI8VTMxNDc+PFUzMTU1PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFlFT0oKKzxVQzYwMz4gIjxVMzE0Nz48VTMxNTU+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUVPQworPFVDNjA0PiAiPFUzMTQ3PjxVMzE1NT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBZRU9LCis8VUM2MDU+ICI8VTMxNDc+PFUzMTU1PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFlFT1QKKzxVQzYwNj4gIjxVMzE0Nz48VTMxNTU+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUVPUAorPFVDNjA3PiAiPFUzMTQ3PjxVMzE1NT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBZRU9ICis8VUM2MDg+ICI8VTMxNDc+PFUzMTU2PiIJJSBIQU5HVUwgU1lMTEFCTEUgWUUKKzxVQzYwOT4gIjxVMzE0Nz48VTMxNTY+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUVHCis8VUM2MEE+ICI8VTMxNDc+PFUzMTU2PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFlFR0cKKzxVQzYwQj4gIjxVMzE0Nz48VTMxNTY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUVHUworPFVDNjBDPiAiPFUzMTQ3PjxVMzE1Nj48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBZRU4KKzxVQzYwRD4gIjxVMzE0Nz48VTMxNTY+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgWUVOSQorPFVDNjBFPiAiPFUzMTQ3PjxVMzE1Nj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBZRU5ICis8VUM2MEY+ICI8VTMxNDc+PFUzMTU2PjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFlFRAorPFVDNjEwPiAiPFUzMTQ3PjxVMzE1Nj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBZRUwKKzxVQzYxMT4gIjxVMzE0Nz48VTMxNTY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUVMRworPFVDNjEyPiAiPFUzMTQ3PjxVMzE1Nj48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBZRUxNCis8VUM2MTM+ICI8VTMxNDc+PFUzMTU2PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFlFTEIKKzxVQzYxND4gIjxVMzE0Nz48VTMxNTY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUVMUworPFVDNjE1PiAiPFUzMTQ3PjxVMzE1Nj48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBZRUxUCis8VUM2MTY+ICI8VTMxNDc+PFUzMTU2PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFlFTFAKKzxVQzYxNz4gIjxVMzE0Nz48VTMxNTY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUVMSAorPFVDNjE4PiAiPFUzMTQ3PjxVMzE1Nj48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBZRU0KKzxVQzYxOT4gIjxVMzE0Nz48VTMxNTY+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUVCCis8VUM2MUE+ICI8VTMxNDc+PFUzMTU2PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFlFQlMKKzxVQzYxQj4gIjxVMzE0Nz48VTMxNTY+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgWUVTCis8VUM2MUM+ICI8VTMxNDc+PFUzMTU2PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFlFU1MKKzxVQzYxRD4gIjxVMzE0Nz48VTMxNTY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgWUVORworPFVDNjFFPiAiPFUzMTQ3PjxVMzE1Nj48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBZRUoKKzxVQzYxRj4gIjxVMzE0Nz48VTMxNTY+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUVDCis8VUM2MjA+ICI8VTMxNDc+PFUzMTU2PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFlFSworPFVDNjIxPiAiPFUzMTQ3PjxVMzE1Nj48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBZRVQKKzxVQzYyMj4gIjxVMzE0Nz48VTMxNTY+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUVQCis8VUM2MjM+ICI8VTMxNDc+PFUzMTU2PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFlFSAorPFVDNjI0PiAiPFUzMTQ3PjxVMzE1Nz4iCSUgSEFOR1VMIFNZTExBQkxFIE8KKzxVQzYyNT4gIjxVMzE0Nz48VTMxNTc+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgT0cKKzxVQzYyNj4gIjxVMzE0Nz48VTMxNTc+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgT0dHCis8VUM2Mjc+ICI8VTMxNDc+PFUzMTU3PjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIE9HUworPFVDNjI4PiAiPFUzMTQ3PjxVMzE1Nz48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBPTgorPFVDNjI5PiAiPFUzMTQ3PjxVMzE1Nz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBPTkkKKzxVQzYyQT4gIjxVMzE0Nz48VTMxNTc+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgT05ICis8VUM2MkI+ICI8VTMxNDc+PFUzMTU3PjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIE9ECis8VUM2MkM+ICI8VTMxNDc+PFUzMTU3PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIE9MCis8VUM2MkQ+ICI8VTMxNDc+PFUzMTU3PjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIE9MRworPFVDNjJFPiAiPFUzMTQ3PjxVMzE1Nz48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBPTE0KKzxVQzYyRj4gIjxVMzE0Nz48VTMxNTc+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgT0xCCis8VUM2MzA+ICI8VTMxNDc+PFUzMTU3PjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIE9MUworPFVDNjMxPiAiPFUzMTQ3PjxVMzE1Nz48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBPTFQKKzxVQzYzMj4gIjxVMzE0Nz48VTMxNTc+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgT0xQCis8VUM2MzM+ICI8VTMxNDc+PFUzMTU3PjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIE9MSAorPFVDNjM0PiAiPFUzMTQ3PjxVMzE1Nz48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBPTQorPFVDNjM1PiAiPFUzMTQ3PjxVMzE1Nz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBPQgorPFVDNjM2PiAiPFUzMTQ3PjxVMzE1Nz48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBPQlMKKzxVQzYzNz4gIjxVMzE0Nz48VTMxNTc+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgT1MKKzxVQzYzOD4gIjxVMzE0Nz48VTMxNTc+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgT1NTCis8VUM2Mzk+ICI8VTMxNDc+PFUzMTU3PjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIE9ORworPFVDNjNBPiAiPFUzMTQ3PjxVMzE1Nz48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBPSgorPFVDNjNCPiAiPFUzMTQ3PjxVMzE1Nz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBPQworPFVDNjNDPiAiPFUzMTQ3PjxVMzE1Nz48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBPSworPFVDNjNEPiAiPFUzMTQ3PjxVMzE1Nz48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBPVAorPFVDNjNFPiAiPFUzMTQ3PjxVMzE1Nz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBPUAorPFVDNjNGPiAiPFUzMTQ3PjxVMzE1Nz48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBPSAorPFVDNjQwPiAiPFUzMTQ3PjxVMzE1OD4iCSUgSEFOR1VMIFNZTExBQkxFIFdBCis8VUM2NDE+ICI8VTMxNDc+PFUzMTU4PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFdBRworPFVDNjQyPiAiPFUzMTQ3PjxVMzE1OD48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBXQUdHCis8VUM2NDM+ICI8VTMxNDc+PFUzMTU4PjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFdBR1MKKzxVQzY0ND4gIjxVMzE0Nz48VTMxNTg+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgV0FOCis8VUM2NDU+ICI8VTMxNDc+PFUzMTU4PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFdBTkkKKzxVQzY0Nj4gIjxVMzE0Nz48VTMxNTg+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgV0FOSAorPFVDNjQ3PiAiPFUzMTQ3PjxVMzE1OD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBXQUQKKzxVQzY0OD4gIjxVMzE0Nz48VTMxNTg+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgV0FMCis8VUM2NDk+ICI8VTMxNDc+PFUzMTU4PjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFdBTEcKKzxVQzY0QT4gIjxVMzE0Nz48VTMxNTg+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0FMTQorPFVDNjRCPiAiPFUzMTQ3PjxVMzE1OD48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBXQUxCCis8VUM2NEM+ICI8VTMxNDc+PFUzMTU4PjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFdBTFMKKzxVQzY0RD4gIjxVMzE0Nz48VTMxNTg+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0FMVAorPFVDNjRFPiAiPFUzMTQ3PjxVMzE1OD48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBXQUxQCis8VUM2NEY+ICI8VTMxNDc+PFUzMTU4PjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFdBTEgKKzxVQzY1MD4gIjxVMzE0Nz48VTMxNTg+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0FNCis8VUM2NTE+ICI8VTMxNDc+PFUzMTU4PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFdBQgorPFVDNjUyPiAiPFUzMTQ3PjxVMzE1OD48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBXQUJTCis8VUM2NTM+ICI8VTMxNDc+PFUzMTU4PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFdBUworPFVDNjU0PiAiPFUzMTQ3PjxVMzE1OD48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBXQVNTCis8VUM2NTU+ICI8VTMxNDc+PFUzMTU4PjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFdBTkcKKzxVQzY1Nj4gIjxVMzE0Nz48VTMxNTg+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgV0FKCis8VUM2NTc+ICI8VTMxNDc+PFUzMTU4PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFdBQworPFVDNjU4PiAiPFUzMTQ3PjxVMzE1OD48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBXQUsKKzxVQzY1OT4gIjxVMzE0Nz48VTMxNTg+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0FUCis8VUM2NUE+ICI8VTMxNDc+PFUzMTU4PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFdBUAorPFVDNjVCPiAiPFUzMTQ3PjxVMzE1OD48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBXQUgKKzxVQzY1Qz4gIjxVMzE0Nz48VTMxNTk+IgklIEhBTkdVTCBTWUxMQUJMRSBXQUUKKzxVQzY1RD4gIjxVMzE0Nz48VTMxNTk+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0FFRworPFVDNjVFPiAiPFUzMTQ3PjxVMzE1OT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBXQUVHRworPFVDNjVGPiAiPFUzMTQ3PjxVMzE1OT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBXQUVHUworPFVDNjYwPiAiPFUzMTQ3PjxVMzE1OT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBXQUVOCis8VUM2NjE+ICI8VTMxNDc+PFUzMTU5PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFdBRU5JCis8VUM2NjI+ICI8VTMxNDc+PFUzMTU5PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFdBRU5ICis8VUM2NjM+ICI8VTMxNDc+PFUzMTU5PjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFdBRUQKKzxVQzY2ND4gIjxVMzE0Nz48VTMxNTk+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgV0FFTAorPFVDNjY1PiAiPFUzMTQ3PjxVMzE1OT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBXQUVMRworPFVDNjY2PiAiPFUzMTQ3PjxVMzE1OT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBXQUVMTQorPFVDNjY3PiAiPFUzMTQ3PjxVMzE1OT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBXQUVMQgorPFVDNjY4PiAiPFUzMTQ3PjxVMzE1OT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBXQUVMUworPFVDNjY5PiAiPFUzMTQ3PjxVMzE1OT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBXQUVMVAorPFVDNjZBPiAiPFUzMTQ3PjxVMzE1OT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBXQUVMUAorPFVDNjZCPiAiPFUzMTQ3PjxVMzE1OT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBXQUVMSAorPFVDNjZDPiAiPFUzMTQ3PjxVMzE1OT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBXQUVNCis8VUM2NkQ+ICI8VTMxNDc+PFUzMTU5PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFdBRUIKKzxVQzY2RT4gIjxVMzE0Nz48VTMxNTk+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgV0FFQlMKKzxVQzY2Rj4gIjxVMzE0Nz48VTMxNTk+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgV0FFUworPFVDNjcwPiAiPFUzMTQ3PjxVMzE1OT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBXQUVTUworPFVDNjcxPiAiPFUzMTQ3PjxVMzE1OT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBXQUVORworPFVDNjcyPiAiPFUzMTQ3PjxVMzE1OT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBXQUVKCis8VUM2NzM+ICI8VTMxNDc+PFUzMTU5PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFdBRUMKKzxVQzY3ND4gIjxVMzE0Nz48VTMxNTk+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0FFSworPFVDNjc1PiAiPFUzMTQ3PjxVMzE1OT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBXQUVUCis8VUM2NzY+ICI8VTMxNDc+PFUzMTU5PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFdBRVAKKzxVQzY3Nz4gIjxVMzE0Nz48VTMxNTk+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0FFSAorPFVDNjc4PiAiPFUzMTQ3PjxVMzE1QT4iCSUgSEFOR1VMIFNZTExBQkxFIE9FCis8VUM2Nzk+ICI8VTMxNDc+PFUzMTVBPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIE9FRworPFVDNjdBPiAiPFUzMTQ3PjxVMzE1QT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBPRUdHCis8VUM2N0I+ICI8VTMxNDc+PFUzMTVBPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIE9FR1MKKzxVQzY3Qz4gIjxVMzE0Nz48VTMxNUE+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgT0VOCis8VUM2N0Q+ICI8VTMxNDc+PFUzMTVBPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIE9FTkkKKzxVQzY3RT4gIjxVMzE0Nz48VTMxNUE+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgT0VOSAorPFVDNjdGPiAiPFUzMTQ3PjxVMzE1QT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBPRUQKKzxVQzY4MD4gIjxVMzE0Nz48VTMxNUE+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgT0VMCis8VUM2ODE+ICI8VTMxNDc+PFUzMTVBPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIE9FTEcKKzxVQzY4Mj4gIjxVMzE0Nz48VTMxNUE+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgT0VMTQorPFVDNjgzPiAiPFUzMTQ3PjxVMzE1QT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBPRUxCCis8VUM2ODQ+ICI8VTMxNDc+PFUzMTVBPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIE9FTFMKKzxVQzY4NT4gIjxVMzE0Nz48VTMxNUE+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgT0VMVAorPFVDNjg2PiAiPFUzMTQ3PjxVMzE1QT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBPRUxQCis8VUM2ODc+ICI8VTMxNDc+PFUzMTVBPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIE9FTEgKKzxVQzY4OD4gIjxVMzE0Nz48VTMxNUE+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgT0VNCis8VUM2ODk+ICI8VTMxNDc+PFUzMTVBPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIE9FQgorPFVDNjhBPiAiPFUzMTQ3PjxVMzE1QT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBPRUJTCis8VUM2OEI+ICI8VTMxNDc+PFUzMTVBPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIE9FUworPFVDNjhDPiAiPFUzMTQ3PjxVMzE1QT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBPRVNTCis8VUM2OEQ+ICI8VTMxNDc+PFUzMTVBPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIE9FTkcKKzxVQzY4RT4gIjxVMzE0Nz48VTMxNUE+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgT0VKCis8VUM2OEY+ICI8VTMxNDc+PFUzMTVBPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIE9FQworPFVDNjkwPiAiPFUzMTQ3PjxVMzE1QT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBPRUsKKzxVQzY5MT4gIjxVMzE0Nz48VTMxNUE+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgT0VUCis8VUM2OTI+ICI8VTMxNDc+PFUzMTVBPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIE9FUAorPFVDNjkzPiAiPFUzMTQ3PjxVMzE1QT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBPRUgKKzxVQzY5ND4gIjxVMzE0Nz48VTMxNUI+IgklIEhBTkdVTCBTWUxMQUJMRSBZTworPFVDNjk1PiAiPFUzMTQ3PjxVMzE1Qj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBZT0cKKzxVQzY5Nj4gIjxVMzE0Nz48VTMxNUI+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgWU9HRworPFVDNjk3PiAiPFUzMTQ3PjxVMzE1Qj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBZT0dTCis8VUM2OTg+ICI8VTMxNDc+PFUzMTVCPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFlPTgorPFVDNjk5PiAiPFUzMTQ3PjxVMzE1Qj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBZT05JCis8VUM2OUE+ICI8VTMxNDc+PFUzMTVCPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFlPTkgKKzxVQzY5Qj4gIjxVMzE0Nz48VTMxNUI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgWU9ECis8VUM2OUM+ICI8VTMxNDc+PFUzMTVCPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFlPTAorPFVDNjlEPiAiPFUzMTQ3PjxVMzE1Qj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBZT0xHCis8VUM2OUU+ICI8VTMxNDc+PFUzMTVCPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFlPTE0KKzxVQzY5Rj4gIjxVMzE0Nz48VTMxNUI+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgWU9MQgorPFVDNkEwPiAiPFUzMTQ3PjxVMzE1Qj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBZT0xTCis8VUM2QTE+ICI8VTMxNDc+PFUzMTVCPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFlPTFQKKzxVQzZBMj4gIjxVMzE0Nz48VTMxNUI+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgWU9MUAorPFVDNkEzPiAiPFUzMTQ3PjxVMzE1Qj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBZT0xICis8VUM2QTQ+ICI8VTMxNDc+PFUzMTVCPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFlPTQorPFVDNkE1PiAiPFUzMTQ3PjxVMzE1Qj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBZT0IKKzxVQzZBNj4gIjxVMzE0Nz48VTMxNUI+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgWU9CUworPFVDNkE3PiAiPFUzMTQ3PjxVMzE1Qj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBZT1MKKzxVQzZBOD4gIjxVMzE0Nz48VTMxNUI+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgWU9TUworPFVDNkE5PiAiPFUzMTQ3PjxVMzE1Qj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBZT05HCis8VUM2QUE+ICI8VTMxNDc+PFUzMTVCPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFlPSgorPFVDNkFCPiAiPFUzMTQ3PjxVMzE1Qj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBZT0MKKzxVQzZBQz4gIjxVMzE0Nz48VTMxNUI+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgWU9LCis8VUM2QUQ+ICI8VTMxNDc+PFUzMTVCPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFlPVAorPFVDNkFFPiAiPFUzMTQ3PjxVMzE1Qj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBZT1AKKzxVQzZBRj4gIjxVMzE0Nz48VTMxNUI+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgWU9ICis8VUM2QjA+ICI8VTMxNDc+PFUzMTVDPiIJJSBIQU5HVUwgU1lMTEFCTEUgVQorPFVDNkIxPiAiPFUzMTQ3PjxVMzE1Qz48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBVRworPFVDNkIyPiAiPFUzMTQ3PjxVMzE1Qz48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBVR0cKKzxVQzZCMz4gIjxVMzE0Nz48VTMxNUM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgVUdTCis8VUM2QjQ+ICI8VTMxNDc+PFUzMTVDPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFVOCis8VUM2QjU+ICI8VTMxNDc+PFUzMTVDPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFVOSQorPFVDNkI2PiAiPFUzMTQ3PjxVMzE1Qz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBVTkgKKzxVQzZCNz4gIjxVMzE0Nz48VTMxNUM+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgVUQKKzxVQzZCOD4gIjxVMzE0Nz48VTMxNUM+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgVUwKKzxVQzZCOT4gIjxVMzE0Nz48VTMxNUM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgVUxHCis8VUM2QkE+ICI8VTMxNDc+PFUzMTVDPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFVMTQorPFVDNkJCPiAiPFUzMTQ3PjxVMzE1Qz48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBVTEIKKzxVQzZCQz4gIjxVMzE0Nz48VTMxNUM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgVUxTCis8VUM2QkQ+ICI8VTMxNDc+PFUzMTVDPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFVMVAorPFVDNkJFPiAiPFUzMTQ3PjxVMzE1Qz48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBVTFAKKzxVQzZCRj4gIjxVMzE0Nz48VTMxNUM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgVUxICis8VUM2QzA+ICI8VTMxNDc+PFUzMTVDPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFVNCis8VUM2QzE+ICI8VTMxNDc+PFUzMTVDPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFVCCis8VUM2QzI+ICI8VTMxNDc+PFUzMTVDPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFVCUworPFVDNkMzPiAiPFUzMTQ3PjxVMzE1Qz48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBVUworPFVDNkM0PiAiPFUzMTQ3PjxVMzE1Qz48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBVU1MKKzxVQzZDNT4gIjxVMzE0Nz48VTMxNUM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgVU5HCis8VUM2QzY+ICI8VTMxNDc+PFUzMTVDPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFVKCis8VUM2Qzc+ICI8VTMxNDc+PFUzMTVDPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFVDCis8VUM2Qzg+ICI8VTMxNDc+PFUzMTVDPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFVLCis8VUM2Qzk+ICI8VTMxNDc+PFUzMTVDPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFVUCis8VUM2Q0E+ICI8VTMxNDc+PFUzMTVDPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFVQCis8VUM2Q0I+ICI8VTMxNDc+PFUzMTVDPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFVICis8VUM2Q0M+ICI8VTMxNDc+PFUzMTVEPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0VPCis8VUM2Q0Q+ICI8VTMxNDc+PFUzMTVEPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFdFT0cKKzxVQzZDRT4gIjxVMzE0Nz48VTMxNUQ+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0VPR0cKKzxVQzZDRj4gIjxVMzE0Nz48VTMxNUQ+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0VPR1MKKzxVQzZEMD4gIjxVMzE0Nz48VTMxNUQ+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgV0VPTgorPFVDNkQxPiAiPFUzMTQ3PjxVMzE1RD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBXRU9OSQorPFVDNkQyPiAiPFUzMTQ3PjxVMzE1RD48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBXRU9OSAorPFVDNkQzPiAiPFUzMTQ3PjxVMzE1RD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBXRU9ECis8VUM2RDQ+ICI8VTMxNDc+PFUzMTVEPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFdFT0wKKzxVQzZENT4gIjxVMzE0Nz48VTMxNUQ+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0VPTEcKKzxVQzZENj4gIjxVMzE0Nz48VTMxNUQ+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0VPTE0KKzxVQzZENz4gIjxVMzE0Nz48VTMxNUQ+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0VPTEIKKzxVQzZEOD4gIjxVMzE0Nz48VTMxNUQ+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0VPTFMKKzxVQzZEOT4gIjxVMzE0Nz48VTMxNUQ+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0VPTFQKKzxVQzZEQT4gIjxVMzE0Nz48VTMxNUQ+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0VPTFAKKzxVQzZEQj4gIjxVMzE0Nz48VTMxNUQ+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0VPTEgKKzxVQzZEQz4gIjxVMzE0Nz48VTMxNUQ+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0VPTQorPFVDNkREPiAiPFUzMTQ3PjxVMzE1RD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBXRU9CCis8VUM2REU+ICI8VTMxNDc+PFUzMTVEPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFdFT0JTCis8VUM2REY+ICI8VTMxNDc+PFUzMTVEPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFdFT1MKKzxVQzZFMD4gIjxVMzE0Nz48VTMxNUQ+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgV0VPU1MKKzxVQzZFMT4gIjxVMzE0Nz48VTMxNUQ+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgV0VPTkcKKzxVQzZFMj4gIjxVMzE0Nz48VTMxNUQ+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgV0VPSgorPFVDNkUzPiAiPFUzMTQ3PjxVMzE1RD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBXRU9DCis8VUM2RTQ+ICI8VTMxNDc+PFUzMTVEPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFdFT0sKKzxVQzZFNT4gIjxVMzE0Nz48VTMxNUQ+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0VPVAorPFVDNkU2PiAiPFUzMTQ3PjxVMzE1RD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBXRU9QCis8VUM2RTc+ICI8VTMxNDc+PFUzMTVEPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFdFT0gKKzxVQzZFOD4gIjxVMzE0Nz48VTMxNUU+IgklIEhBTkdVTCBTWUxMQUJMRSBXRQorPFVDNkU5PiAiPFUzMTQ3PjxVMzE1RT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBXRUcKKzxVQzZFQT4gIjxVMzE0Nz48VTMxNUU+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0VHRworPFVDNkVCPiAiPFUzMTQ3PjxVMzE1RT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBXRUdTCis8VUM2RUM+ICI8VTMxNDc+PFUzMTVFPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFdFTgorPFVDNkVEPiAiPFUzMTQ3PjxVMzE1RT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBXRU5JCis8VUM2RUU+ICI8VTMxNDc+PFUzMTVFPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFdFTkgKKzxVQzZFRj4gIjxVMzE0Nz48VTMxNUU+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgV0VECis8VUM2RjA+ICI8VTMxNDc+PFUzMTVFPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFdFTAorPFVDNkYxPiAiPFUzMTQ3PjxVMzE1RT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBXRUxHCis8VUM2RjI+ICI8VTMxNDc+PFUzMTVFPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFdFTE0KKzxVQzZGMz4gIjxVMzE0Nz48VTMxNUU+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0VMQgorPFVDNkY0PiAiPFUzMTQ3PjxVMzE1RT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBXRUxTCis8VUM2RjU+ICI8VTMxNDc+PFUzMTVFPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFdFTFQKKzxVQzZGNj4gIjxVMzE0Nz48VTMxNUU+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0VMUAorPFVDNkY3PiAiPFUzMTQ3PjxVMzE1RT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBXRUxICis8VUM2Rjg+ICI8VTMxNDc+PFUzMTVFPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFdFTQorPFVDNkY5PiAiPFUzMTQ3PjxVMzE1RT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBXRUIKKzxVQzZGQT4gIjxVMzE0Nz48VTMxNUU+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgV0VCUworPFVDNkZCPiAiPFUzMTQ3PjxVMzE1RT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBXRVMKKzxVQzZGQz4gIjxVMzE0Nz48VTMxNUU+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgV0VTUworPFVDNkZEPiAiPFUzMTQ3PjxVMzE1RT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBXRU5HCis8VUM2RkU+ICI8VTMxNDc+PFUzMTVFPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFdFSgorPFVDNkZGPiAiPFUzMTQ3PjxVMzE1RT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBXRUMKKzxVQzcwMD4gIjxVMzE0Nz48VTMxNUU+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0VLCis8VUM3MDE+ICI8VTMxNDc+PFUzMTVFPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFdFVAorPFVDNzAyPiAiPFUzMTQ3PjxVMzE1RT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBXRVAKKzxVQzcwMz4gIjxVMzE0Nz48VTMxNUU+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0VICis8VUM3MDQ+ICI8VTMxNDc+PFUzMTVGPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0kKKzxVQzcwNT4gIjxVMzE0Nz48VTMxNUY+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0lHCis8VUM3MDY+ICI8VTMxNDc+PFUzMTVGPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFdJR0cKKzxVQzcwNz4gIjxVMzE0Nz48VTMxNUY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0lHUworPFVDNzA4PiAiPFUzMTQ3PjxVMzE1Rj48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBXSU4KKzxVQzcwOT4gIjxVMzE0Nz48VTMxNUY+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgV0lOSQorPFVDNzBBPiAiPFUzMTQ3PjxVMzE1Rj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBXSU5ICis8VUM3MEI+ICI8VTMxNDc+PFUzMTVGPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFdJRAorPFVDNzBDPiAiPFUzMTQ3PjxVMzE1Rj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBXSUwKKzxVQzcwRD4gIjxVMzE0Nz48VTMxNUY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0lMRworPFVDNzBFPiAiPFUzMTQ3PjxVMzE1Rj48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBXSUxNCis8VUM3MEY+ICI8VTMxNDc+PFUzMTVGPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFdJTEIKKzxVQzcxMD4gIjxVMzE0Nz48VTMxNUY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0lMUworPFVDNzExPiAiPFUzMTQ3PjxVMzE1Rj48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBXSUxUCis8VUM3MTI+ICI8VTMxNDc+PFUzMTVGPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFdJTFAKKzxVQzcxMz4gIjxVMzE0Nz48VTMxNUY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0lMSAorPFVDNzE0PiAiPFUzMTQ3PjxVMzE1Rj48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBXSU0KKzxVQzcxNT4gIjxVMzE0Nz48VTMxNUY+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0lCCis8VUM3MTY+ICI8VTMxNDc+PFUzMTVGPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFdJQlMKKzxVQzcxNz4gIjxVMzE0Nz48VTMxNUY+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgV0lTCis8VUM3MTg+ICI8VTMxNDc+PFUzMTVGPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFdJU1MKKzxVQzcxOT4gIjxVMzE0Nz48VTMxNUY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgV0lORworPFVDNzFBPiAiPFUzMTQ3PjxVMzE1Rj48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBXSUoKKzxVQzcxQj4gIjxVMzE0Nz48VTMxNUY+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0lDCis8VUM3MUM+ICI8VTMxNDc+PFUzMTVGPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFdJSworPFVDNzFEPiAiPFUzMTQ3PjxVMzE1Rj48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBXSVQKKzxVQzcxRT4gIjxVMzE0Nz48VTMxNUY+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgV0lQCis8VUM3MUY+ICI8VTMxNDc+PFUzMTVGPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFdJSAorPFVDNzIwPiAiPFUzMTQ3PjxVMzE2MD4iCSUgSEFOR1VMIFNZTExBQkxFIFlVCis8VUM3MjE+ICI8VTMxNDc+PFUzMTYwPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFlVRworPFVDNzIyPiAiPFUzMTQ3PjxVMzE2MD48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBZVUdHCis8VUM3MjM+ICI8VTMxNDc+PFUzMTYwPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFlVR1MKKzxVQzcyND4gIjxVMzE0Nz48VTMxNjA+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgWVVOCis8VUM3MjU+ICI8VTMxNDc+PFUzMTYwPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFlVTkkKKzxVQzcyNj4gIjxVMzE0Nz48VTMxNjA+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgWVVOSAorPFVDNzI3PiAiPFUzMTQ3PjxVMzE2MD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBZVUQKKzxVQzcyOD4gIjxVMzE0Nz48VTMxNjA+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgWVVMCis8VUM3Mjk+ICI8VTMxNDc+PFUzMTYwPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFlVTEcKKzxVQzcyQT4gIjxVMzE0Nz48VTMxNjA+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgWVVMTQorPFVDNzJCPiAiPFUzMTQ3PjxVMzE2MD48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBZVUxCCis8VUM3MkM+ICI8VTMxNDc+PFUzMTYwPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFlVTFMKKzxVQzcyRD4gIjxVMzE0Nz48VTMxNjA+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgWVVMVAorPFVDNzJFPiAiPFUzMTQ3PjxVMzE2MD48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBZVUxQCis8VUM3MkY+ICI8VTMxNDc+PFUzMTYwPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFlVTEgKKzxVQzczMD4gIjxVMzE0Nz48VTMxNjA+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgWVVNCis8VUM3MzE+ICI8VTMxNDc+PFUzMTYwPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFlVQgorPFVDNzMyPiAiPFUzMTQ3PjxVMzE2MD48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBZVUJTCis8VUM3MzM+ICI8VTMxNDc+PFUzMTYwPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFlVUworPFVDNzM0PiAiPFUzMTQ3PjxVMzE2MD48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBZVVNTCis8VUM3MzU+ICI8VTMxNDc+PFUzMTYwPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFlVTkcKKzxVQzczNj4gIjxVMzE0Nz48VTMxNjA+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgWVVKCis8VUM3Mzc+ICI8VTMxNDc+PFUzMTYwPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFlVQworPFVDNzM4PiAiPFUzMTQ3PjxVMzE2MD48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBZVUsKKzxVQzczOT4gIjxVMzE0Nz48VTMxNjA+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgWVVUCis8VUM3M0E+ICI8VTMxNDc+PFUzMTYwPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFlVUAorPFVDNzNCPiAiPFUzMTQ3PjxVMzE2MD48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBZVUgKKzxVQzczQz4gIjxVMzE0Nz48VTMxNjE+IgklIEhBTkdVTCBTWUxMQUJMRSBFVQorPFVDNzNEPiAiPFUzMTQ3PjxVMzE2MT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBFVUcKKzxVQzczRT4gIjxVMzE0Nz48VTMxNjE+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgRVVHRworPFVDNzNGPiAiPFUzMTQ3PjxVMzE2MT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBFVUdTCis8VUM3NDA+ICI8VTMxNDc+PFUzMTYxPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEVVTgorPFVDNzQxPiAiPFUzMTQ3PjxVMzE2MT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBFVU5JCis8VUM3NDI+ICI8VTMxNDc+PFUzMTYxPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEVVTkgKKzxVQzc0Mz4gIjxVMzE0Nz48VTMxNjE+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgRVVECis8VUM3NDQ+ICI8VTMxNDc+PFUzMTYxPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEVVTAorPFVDNzQ1PiAiPFUzMTQ3PjxVMzE2MT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBFVUxHCis8VUM3NDY+ICI8VTMxNDc+PFUzMTYxPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEVVTE0KKzxVQzc0Nz4gIjxVMzE0Nz48VTMxNjE+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgRVVMQgorPFVDNzQ4PiAiPFUzMTQ3PjxVMzE2MT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBFVUxTCis8VUM3NDk+ICI8VTMxNDc+PFUzMTYxPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEVVTFQKKzxVQzc0QT4gIjxVMzE0Nz48VTMxNjE+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgRVVMUAorPFVDNzRCPiAiPFUzMTQ3PjxVMzE2MT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBFVUxICis8VUM3NEM+ICI8VTMxNDc+PFUzMTYxPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEVVTQorPFVDNzREPiAiPFUzMTQ3PjxVMzE2MT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBFVUIKKzxVQzc0RT4gIjxVMzE0Nz48VTMxNjE+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgRVVCUworPFVDNzRGPiAiPFUzMTQ3PjxVMzE2MT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBFVVMKKzxVQzc1MD4gIjxVMzE0Nz48VTMxNjE+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgRVVTUworPFVDNzUxPiAiPFUzMTQ3PjxVMzE2MT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBFVU5HCis8VUM3NTI+ICI8VTMxNDc+PFUzMTYxPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEVVSgorPFVDNzUzPiAiPFUzMTQ3PjxVMzE2MT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBFVUMKKzxVQzc1ND4gIjxVMzE0Nz48VTMxNjE+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgRVVLCis8VUM3NTU+ICI8VTMxNDc+PFUzMTYxPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEVVVAorPFVDNzU2PiAiPFUzMTQ3PjxVMzE2MT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBFVVAKKzxVQzc1Nz4gIjxVMzE0Nz48VTMxNjE+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgRVVICis8VUM3NTg+ICI8VTMxNDc+PFUzMTYyPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUkKKzxVQzc1OT4gIjxVMzE0Nz48VTMxNjI+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUlHCis8VUM3NUE+ICI8VTMxNDc+PFUzMTYyPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFlJR0cKKzxVQzc1Qj4gIjxVMzE0Nz48VTMxNjI+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUlHUworPFVDNzVDPiAiPFUzMTQ3PjxVMzE2Mj48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBZSU4KKzxVQzc1RD4gIjxVMzE0Nz48VTMxNjI+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgWUlOSQorPFVDNzVFPiAiPFUzMTQ3PjxVMzE2Mj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBZSU5ICis8VUM3NUY+ICI8VTMxNDc+PFUzMTYyPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFlJRAorPFVDNzYwPiAiPFUzMTQ3PjxVMzE2Mj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBZSUwKKzxVQzc2MT4gIjxVMzE0Nz48VTMxNjI+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUlMRworPFVDNzYyPiAiPFUzMTQ3PjxVMzE2Mj48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBZSUxNCis8VUM3NjM+ICI8VTMxNDc+PFUzMTYyPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFlJTEIKKzxVQzc2ND4gIjxVMzE0Nz48VTMxNjI+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUlMUworPFVDNzY1PiAiPFUzMTQ3PjxVMzE2Mj48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBZSUxUCis8VUM3NjY+ICI8VTMxNDc+PFUzMTYyPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFlJTFAKKzxVQzc2Nz4gIjxVMzE0Nz48VTMxNjI+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUlMSAorPFVDNzY4PiAiPFUzMTQ3PjxVMzE2Mj48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBZSU0KKzxVQzc2OT4gIjxVMzE0Nz48VTMxNjI+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUlCCis8VUM3NkE+ICI8VTMxNDc+PFUzMTYyPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFlJQlMKKzxVQzc2Qj4gIjxVMzE0Nz48VTMxNjI+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgWUlTCis8VUM3NkM+ICI8VTMxNDc+PFUzMTYyPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFlJU1MKKzxVQzc2RD4gIjxVMzE0Nz48VTMxNjI+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgWUlORworPFVDNzZFPiAiPFUzMTQ3PjxVMzE2Mj48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBZSUoKKzxVQzc2Rj4gIjxVMzE0Nz48VTMxNjI+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUlDCis8VUM3NzA+ICI8VTMxNDc+PFUzMTYyPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFlJSworPFVDNzcxPiAiPFUzMTQ3PjxVMzE2Mj48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBZSVQKKzxVQzc3Mj4gIjxVMzE0Nz48VTMxNjI+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgWUlQCis8VUM3NzM+ICI8VTMxNDc+PFUzMTYyPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFlJSAorPFVDNzc0PiAiPFUzMTQ3PjxVMzE2Mz4iCSUgSEFOR1VMIFNZTExBQkxFIEkKKzxVQzc3NT4gIjxVMzE0Nz48VTMxNjM+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSUcKKzxVQzc3Nj4gIjxVMzE0Nz48VTMxNjM+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSUdHCis8VUM3Nzc+ICI8VTMxNDc+PFUzMTYzPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIElHUworPFVDNzc4PiAiPFUzMTQ3PjxVMzE2Mz48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBJTgorPFVDNzc5PiAiPFUzMTQ3PjxVMzE2Mz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBJTkkKKzxVQzc3QT4gIjxVMzE0Nz48VTMxNjM+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSU5ICis8VUM3N0I+ICI8VTMxNDc+PFUzMTYzPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIElECis8VUM3N0M+ICI8VTMxNDc+PFUzMTYzPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIElMCis8VUM3N0Q+ICI8VTMxNDc+PFUzMTYzPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIElMRworPFVDNzdFPiAiPFUzMTQ3PjxVMzE2Mz48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBJTE0KKzxVQzc3Rj4gIjxVMzE0Nz48VTMxNjM+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSUxCCis8VUM3ODA+ICI8VTMxNDc+PFUzMTYzPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIElMUworPFVDNzgxPiAiPFUzMTQ3PjxVMzE2Mz48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBJTFQKKzxVQzc4Mj4gIjxVMzE0Nz48VTMxNjM+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSUxQCis8VUM3ODM+ICI8VTMxNDc+PFUzMTYzPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIElMSAorPFVDNzg0PiAiPFUzMTQ3PjxVMzE2Mz48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBJTQorPFVDNzg1PiAiPFUzMTQ3PjxVMzE2Mz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBJQgorPFVDNzg2PiAiPFUzMTQ3PjxVMzE2Mz48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBJQlMKKzxVQzc4Nz4gIjxVMzE0Nz48VTMxNjM+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSVMKKzxVQzc4OD4gIjxVMzE0Nz48VTMxNjM+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSVNTCis8VUM3ODk+ICI8VTMxNDc+PFUzMTYzPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIElORworPFVDNzhBPiAiPFUzMTQ3PjxVMzE2Mz48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBJSgorPFVDNzhCPiAiPFUzMTQ3PjxVMzE2Mz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBJQworPFVDNzhDPiAiPFUzMTQ3PjxVMzE2Mz48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBJSworPFVDNzhEPiAiPFUzMTQ3PjxVMzE2Mz48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBJVAorPFVDNzhFPiAiPFUzMTQ3PjxVMzE2Mz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBJUAorPFVDNzhGPiAiPFUzMTQ3PjxVMzE2Mz48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBJSAorPFVDNzkwPiAiPFUzMTQ4PjxVMzE0Rj4iCSUgSEFOR1VMIFNZTExBQkxFIEpBCis8VUM3OTE+ICI8VTMxNDg+PFUzMTRGPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEpBRworPFVDNzkyPiAiPFUzMTQ4PjxVMzE0Rj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBKQUdHCis8VUM3OTM+ICI8VTMxNDg+PFUzMTRGPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEpBR1MKKzxVQzc5ND4gIjxVMzE0OD48VTMxNEY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkFOCis8VUM3OTU+ICI8VTMxNDg+PFUzMTRGPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEpBTkkKKzxVQzc5Nj4gIjxVMzE0OD48VTMxNEY+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkFOSAorPFVDNzk3PiAiPFUzMTQ4PjxVMzE0Rj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBKQUQKKzxVQzc5OD4gIjxVMzE0OD48VTMxNEY+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkFMCis8VUM3OTk+ICI8VTMxNDg+PFUzMTRGPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEpBTEcKKzxVQzc5QT4gIjxVMzE0OD48VTMxNEY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkFMTQorPFVDNzlCPiAiPFUzMTQ4PjxVMzE0Rj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBKQUxCCis8VUM3OUM+ICI8VTMxNDg+PFUzMTRGPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEpBTFMKKzxVQzc5RD4gIjxVMzE0OD48VTMxNEY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkFMVAorPFVDNzlFPiAiPFUzMTQ4PjxVMzE0Rj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBKQUxQCis8VUM3OUY+ICI8VTMxNDg+PFUzMTRGPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEpBTEgKKzxVQzdBMD4gIjxVMzE0OD48VTMxNEY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkFNCis8VUM3QTE+ICI8VTMxNDg+PFUzMTRGPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEpBQgorPFVDN0EyPiAiPFUzMTQ4PjxVMzE0Rj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKQUJTCis8VUM3QTM+ICI8VTMxNDg+PFUzMTRGPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEpBUworPFVDN0E0PiAiPFUzMTQ4PjxVMzE0Rj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBKQVNTCis8VUM3QTU+ICI8VTMxNDg+PFUzMTRGPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEpBTkcKKzxVQzdBNj4gIjxVMzE0OD48VTMxNEY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkFKCis8VUM3QTc+ICI8VTMxNDg+PFUzMTRGPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEpBQworPFVDN0E4PiAiPFUzMTQ4PjxVMzE0Rj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBKQUsKKzxVQzdBOT4gIjxVMzE0OD48VTMxNEY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkFUCis8VUM3QUE+ICI8VTMxNDg+PFUzMTRGPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEpBUAorPFVDN0FCPiAiPFUzMTQ4PjxVMzE0Rj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBKQUgKKzxVQzdBQz4gIjxVMzE0OD48VTMxNTA+IgklIEhBTkdVTCBTWUxMQUJMRSBKQUUKKzxVQzdBRD4gIjxVMzE0OD48VTMxNTA+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkFFRworPFVDN0FFPiAiPFUzMTQ4PjxVMzE1MD48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBKQUVHRworPFVDN0FGPiAiPFUzMTQ4PjxVMzE1MD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBKQUVHUworPFVDN0IwPiAiPFUzMTQ4PjxVMzE1MD48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKQUVOCis8VUM3QjE+ICI8VTMxNDg+PFUzMTUwPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEpBRU5JCis8VUM3QjI+ICI8VTMxNDg+PFUzMTUwPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEpBRU5ICis8VUM3QjM+ICI8VTMxNDg+PFUzMTUwPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEpBRUQKKzxVQzdCND4gIjxVMzE0OD48VTMxNTA+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkFFTAorPFVDN0I1PiAiPFUzMTQ4PjxVMzE1MD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBKQUVMRworPFVDN0I2PiAiPFUzMTQ4PjxVMzE1MD48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBKQUVMTQorPFVDN0I3PiAiPFUzMTQ4PjxVMzE1MD48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBKQUVMQgorPFVDN0I4PiAiPFUzMTQ4PjxVMzE1MD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBKQUVMUworPFVDN0I5PiAiPFUzMTQ4PjxVMzE1MD48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBKQUVMVAorPFVDN0JBPiAiPFUzMTQ4PjxVMzE1MD48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBKQUVMUAorPFVDN0JCPiAiPFUzMTQ4PjxVMzE1MD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBKQUVMSAorPFVDN0JDPiAiPFUzMTQ4PjxVMzE1MD48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBKQUVNCis8VUM3QkQ+ICI8VTMxNDg+PFUzMTUwPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEpBRUIKKzxVQzdCRT4gIjxVMzE0OD48VTMxNTA+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkFFQlMKKzxVQzdCRj4gIjxVMzE0OD48VTMxNTA+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkFFUworPFVDN0MwPiAiPFUzMTQ4PjxVMzE1MD48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBKQUVTUworPFVDN0MxPiAiPFUzMTQ4PjxVMzE1MD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBKQUVORworPFVDN0MyPiAiPFUzMTQ4PjxVMzE1MD48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBKQUVKCis8VUM3QzM+ICI8VTMxNDg+PFUzMTUwPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEpBRUMKKzxVQzdDND4gIjxVMzE0OD48VTMxNTA+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkFFSworPFVDN0M1PiAiPFUzMTQ4PjxVMzE1MD48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBKQUVUCis8VUM3QzY+ICI8VTMxNDg+PFUzMTUwPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEpBRVAKKzxVQzdDNz4gIjxVMzE0OD48VTMxNTA+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkFFSAorPFVDN0M4PiAiPFUzMTQ4PjxVMzE1MT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQQorPFVDN0M5PiAiPFUzMTQ4PjxVMzE1MT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUFHCis8VUM3Q0E+ICI8VTMxNDg+PFUzMTUxPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQUdHCis8VUM3Q0I+ICI8VTMxNDg+PFUzMTUxPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQUdTCis8VUM3Q0M+ICI8VTMxNDg+PFUzMTUxPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQU4KKzxVQzdDRD4gIjxVMzE0OD48VTMxNTE+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSllBTkkKKzxVQzdDRT4gIjxVMzE0OD48VTMxNTE+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSllBTkgKKzxVQzdDRj4gIjxVMzE0OD48VTMxNTE+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSllBRAorPFVDN0QwPiAiPFUzMTQ4PjxVMzE1MT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUFMCis8VUM3RDE+ICI8VTMxNDg+PFUzMTUxPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQUxHCis8VUM3RDI+ICI8VTMxNDg+PFUzMTUxPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQUxNCis8VUM3RDM+ICI8VTMxNDg+PFUzMTUxPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQUxCCis8VUM3RDQ+ICI8VTMxNDg+PFUzMTUxPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQUxTCis8VUM3RDU+ICI8VTMxNDg+PFUzMTUxPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQUxUCis8VUM3RDY+ICI8VTMxNDg+PFUzMTUxPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQUxQCis8VUM3RDc+ICI8VTMxNDg+PFUzMTUxPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQUxICis8VUM3RDg+ICI8VTMxNDg+PFUzMTUxPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQU0KKzxVQzdEOT4gIjxVMzE0OD48VTMxNTE+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllBQgorPFVDN0RBPiAiPFUzMTQ4PjxVMzE1MT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUFCUworPFVDN0RCPiAiPFUzMTQ4PjxVMzE1MT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUFTCis8VUM3REM+ICI8VTMxNDg+PFUzMTUxPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQVNTCis8VUM3REQ+ICI8VTMxNDg+PFUzMTUxPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQU5HCis8VUM3REU+ICI8VTMxNDg+PFUzMTUxPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQUoKKzxVQzdERj4gIjxVMzE0OD48VTMxNTE+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllBQworPFVDN0UwPiAiPFUzMTQ4PjxVMzE1MT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUFLCis8VUM3RTE+ICI8VTMxNDg+PFUzMTUxPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQVQKKzxVQzdFMj4gIjxVMzE0OD48VTMxNTE+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllBUAorPFVDN0UzPiAiPFUzMTQ4PjxVMzE1MT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUFICis8VUM3RTQ+ICI8VTMxNDg+PFUzMTUyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllBRQorPFVDN0U1PiAiPFUzMTQ4PjxVMzE1Mj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUFFRworPFVDN0U2PiAiPFUzMTQ4PjxVMzE1Mj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUFFR0cKKzxVQzdFNz4gIjxVMzE0OD48VTMxNTI+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllBRUdTCis8VUM3RTg+ICI8VTMxNDg+PFUzMTUyPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQUVOCis8VUM3RTk+ICI8VTMxNDg+PFUzMTUyPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQUVOSQorPFVDN0VBPiAiPFUzMTQ4PjxVMzE1Mj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUFFTkgKKzxVQzdFQj4gIjxVMzE0OD48VTMxNTI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSllBRUQKKzxVQzdFQz4gIjxVMzE0OD48VTMxNTI+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgSllBRUwKKzxVQzdFRD4gIjxVMzE0OD48VTMxNTI+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllBRUxHCis8VUM3RUU+ICI8VTMxNDg+PFUzMTUyPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQUVMTQorPFVDN0VGPiAiPFUzMTQ4PjxVMzE1Mj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUFFTEIKKzxVQzdGMD4gIjxVMzE0OD48VTMxNTI+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllBRUxTCis8VUM3RjE+ICI8VTMxNDg+PFUzMTUyPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQUVMVAorPFVDN0YyPiAiPFUzMTQ4PjxVMzE1Mj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUFFTFAKKzxVQzdGMz4gIjxVMzE0OD48VTMxNTI+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllBRUxICis8VUM3RjQ+ICI8VTMxNDg+PFUzMTUyPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQUVNCis8VUM3RjU+ICI8VTMxNDg+PFUzMTUyPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQUVCCis8VUM3RjY+ICI8VTMxNDg+PFUzMTUyPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQUVCUworPFVDN0Y3PiAiPFUzMTQ4PjxVMzE1Mj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUFFUworPFVDN0Y4PiAiPFUzMTQ4PjxVMzE1Mj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUFFU1MKKzxVQzdGOT4gIjxVMzE0OD48VTMxNTI+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSllBRU5HCis8VUM3RkE+ICI8VTMxNDg+PFUzMTUyPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQUVKCis8VUM3RkI+ICI8VTMxNDg+PFUzMTUyPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQUVDCis8VUM3RkM+ICI8VTMxNDg+PFUzMTUyPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQUVLCis8VUM3RkQ+ICI8VTMxNDg+PFUzMTUyPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQUVUCis8VUM3RkU+ICI8VTMxNDg+PFUzMTUyPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQUVQCis8VUM3RkY+ICI8VTMxNDg+PFUzMTUyPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZQUVICis8VUM4MDA+ICI8VTMxNDg+PFUzMTUzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVPCis8VUM4MDE+ICI8VTMxNDg+PFUzMTUzPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEpFT0cKKzxVQzgwMj4gIjxVMzE0OD48VTMxNTM+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVPR0cKKzxVQzgwMz4gIjxVMzE0OD48VTMxNTM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVPR1MKKzxVQzgwND4gIjxVMzE0OD48VTMxNTM+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVPTgorPFVDODA1PiAiPFUzMTQ4PjxVMzE1Mz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBKRU9OSQorPFVDODA2PiAiPFUzMTQ4PjxVMzE1Mz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBKRU9OSAorPFVDODA3PiAiPFUzMTQ4PjxVMzE1Mz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBKRU9ECis8VUM4MDg+ICI8VTMxNDg+PFUzMTUzPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEpFT0wKKzxVQzgwOT4gIjxVMzE0OD48VTMxNTM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVPTEcKKzxVQzgwQT4gIjxVMzE0OD48VTMxNTM+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVPTE0KKzxVQzgwQj4gIjxVMzE0OD48VTMxNTM+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVPTEIKKzxVQzgwQz4gIjxVMzE0OD48VTMxNTM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVPTFMKKzxVQzgwRD4gIjxVMzE0OD48VTMxNTM+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVPTFQKKzxVQzgwRT4gIjxVMzE0OD48VTMxNTM+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVPTFAKKzxVQzgwRj4gIjxVMzE0OD48VTMxNTM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVPTEgKKzxVQzgxMD4gIjxVMzE0OD48VTMxNTM+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVPTQorPFVDODExPiAiPFUzMTQ4PjxVMzE1Mz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBKRU9CCis8VUM4MTI+ICI8VTMxNDg+PFUzMTUzPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEpFT0JTCis8VUM4MTM+ICI8VTMxNDg+PFUzMTUzPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEpFT1MKKzxVQzgxND4gIjxVMzE0OD48VTMxNTM+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVPU1MKKzxVQzgxNT4gIjxVMzE0OD48VTMxNTM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVPTkcKKzxVQzgxNj4gIjxVMzE0OD48VTMxNTM+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVPSgorPFVDODE3PiAiPFUzMTQ4PjxVMzE1Mz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBKRU9DCis8VUM4MTg+ICI8VTMxNDg+PFUzMTUzPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEpFT0sKKzxVQzgxOT4gIjxVMzE0OD48VTMxNTM+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVPVAorPFVDODFBPiAiPFUzMTQ4PjxVMzE1Mz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKRU9QCis8VUM4MUI+ICI8VTMxNDg+PFUzMTUzPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEpFT0gKKzxVQzgxQz4gIjxVMzE0OD48VTMxNTQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKRQorPFVDODFEPiAiPFUzMTQ4PjxVMzE1ND48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBKRUcKKzxVQzgxRT4gIjxVMzE0OD48VTMxNTQ+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVHRworPFVDODFGPiAiPFUzMTQ4PjxVMzE1ND48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBKRUdTCis8VUM4MjA+ICI8VTMxNDg+PFUzMTU0PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEpFTgorPFVDODIxPiAiPFUzMTQ4PjxVMzE1ND48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBKRU5JCis8VUM4MjI+ICI8VTMxNDg+PFUzMTU0PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEpFTkgKKzxVQzgyMz4gIjxVMzE0OD48VTMxNTQ+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVECis8VUM4MjQ+ICI8VTMxNDg+PFUzMTU0PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEpFTAorPFVDODI1PiAiPFUzMTQ4PjxVMzE1ND48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBKRUxHCis8VUM4MjY+ICI8VTMxNDg+PFUzMTU0PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEpFTE0KKzxVQzgyNz4gIjxVMzE0OD48VTMxNTQ+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVMQgorPFVDODI4PiAiPFUzMTQ4PjxVMzE1ND48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBKRUxTCis8VUM4Mjk+ICI8VTMxNDg+PFUzMTU0PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEpFTFQKKzxVQzgyQT4gIjxVMzE0OD48VTMxNTQ+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVMUAorPFVDODJCPiAiPFUzMTQ4PjxVMzE1ND48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBKRUxICis8VUM4MkM+ICI8VTMxNDg+PFUzMTU0PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEpFTQorPFVDODJEPiAiPFUzMTQ4PjxVMzE1ND48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBKRUIKKzxVQzgyRT4gIjxVMzE0OD48VTMxNTQ+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVCUworPFVDODJGPiAiPFUzMTQ4PjxVMzE1ND48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBKRVMKKzxVQzgzMD4gIjxVMzE0OD48VTMxNTQ+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVTUworPFVDODMxPiAiPFUzMTQ4PjxVMzE1ND48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBKRU5HCis8VUM4MzI+ICI8VTMxNDg+PFUzMTU0PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEpFSgorPFVDODMzPiAiPFUzMTQ4PjxVMzE1ND48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBKRUMKKzxVQzgzND4gIjxVMzE0OD48VTMxNTQ+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVLCis8VUM4MzU+ICI8VTMxNDg+PFUzMTU0PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEpFVAorPFVDODM2PiAiPFUzMTQ4PjxVMzE1ND48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKRVAKKzxVQzgzNz4gIjxVMzE0OD48VTMxNTQ+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVICis8VUM4Mzg+ICI8VTMxNDg+PFUzMTU1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSllFTworPFVDODM5PiAiPFUzMTQ4PjxVMzE1NT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUVPRworPFVDODNBPiAiPFUzMTQ4PjxVMzE1NT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUVPR0cKKzxVQzgzQj4gIjxVMzE0OD48VTMxNTU+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllFT0dTCis8VUM4M0M+ICI8VTMxNDg+PFUzMTU1PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEpZRU9OCis8VUM4M0Q+ICI8VTMxNDg+PFUzMTU1PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZRU9OSQorPFVDODNFPiAiPFUzMTQ4PjxVMzE1NT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUVPTkgKKzxVQzgzRj4gIjxVMzE0OD48VTMxNTU+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSllFT0QKKzxVQzg0MD4gIjxVMzE0OD48VTMxNTU+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgSllFT0wKKzxVQzg0MT4gIjxVMzE0OD48VTMxNTU+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllFT0xHCis8VUM4NDI+ICI8VTMxNDg+PFUzMTU1PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEpZRU9MTQorPFVDODQzPiAiPFUzMTQ4PjxVMzE1NT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUVPTEIKKzxVQzg0ND4gIjxVMzE0OD48VTMxNTU+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllFT0xTCis8VUM4NDU+ICI8VTMxNDg+PFUzMTU1PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZRU9MVAorPFVDODQ2PiAiPFUzMTQ4PjxVMzE1NT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUVPTFAKKzxVQzg0Nz4gIjxVMzE0OD48VTMxNTU+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllFT0xICis8VUM4NDg+ICI8VTMxNDg+PFUzMTU1PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZRU9NCis8VUM4NDk+ICI8VTMxNDg+PFUzMTU1PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEpZRU9CCis8VUM4NEE+ICI8VTMxNDg+PFUzMTU1PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEpZRU9CUworPFVDODRCPiAiPFUzMTQ4PjxVMzE1NT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUVPUworPFVDODRDPiAiPFUzMTQ4PjxVMzE1NT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUVPU1MKKzxVQzg0RD4gIjxVMzE0OD48VTMxNTU+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSllFT05HCis8VUM4NEU+ICI8VTMxNDg+PFUzMTU1PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEpZRU9KCis8VUM4NEY+ICI8VTMxNDg+PFUzMTU1PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZRU9DCis8VUM4NTA+ICI8VTMxNDg+PFUzMTU1PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEpZRU9LCis8VUM4NTE+ICI8VTMxNDg+PFUzMTU1PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEpZRU9UCis8VUM4NTI+ICI8VTMxNDg+PFUzMTU1PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEpZRU9QCis8VUM4NTM+ICI8VTMxNDg+PFUzMTU1PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZRU9ICis8VUM4NTQ+ICI8VTMxNDg+PFUzMTU2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSllFCis8VUM4NTU+ICI8VTMxNDg+PFUzMTU2PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZRUcKKzxVQzg1Nj4gIjxVMzE0OD48VTMxNTY+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllFR0cKKzxVQzg1Nz4gIjxVMzE0OD48VTMxNTY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllFR1MKKzxVQzg1OD4gIjxVMzE0OD48VTMxNTY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSllFTgorPFVDODU5PiAiPFUzMTQ4PjxVMzE1Nj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUVOSQorPFVDODVBPiAiPFUzMTQ4PjxVMzE1Nj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUVOSAorPFVDODVCPiAiPFUzMTQ4PjxVMzE1Nj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUVECis8VUM4NUM+ICI8VTMxNDg+PFUzMTU2PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZRUwKKzxVQzg1RD4gIjxVMzE0OD48VTMxNTY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllFTEcKKzxVQzg1RT4gIjxVMzE0OD48VTMxNTY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllFTE0KKzxVQzg1Rj4gIjxVMzE0OD48VTMxNTY+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllFTEIKKzxVQzg2MD4gIjxVMzE0OD48VTMxNTY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllFTFMKKzxVQzg2MT4gIjxVMzE0OD48VTMxNTY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllFTFQKKzxVQzg2Mj4gIjxVMzE0OD48VTMxNTY+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllFTFAKKzxVQzg2Mz4gIjxVMzE0OD48VTMxNTY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllFTEgKKzxVQzg2ND4gIjxVMzE0OD48VTMxNTY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllFTQorPFVDODY1PiAiPFUzMTQ4PjxVMzE1Nj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUVCCis8VUM4NjY+ICI8VTMxNDg+PFUzMTU2PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEpZRUJTCis8VUM4Njc+ICI8VTMxNDg+PFUzMTU2PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZRVMKKzxVQzg2OD4gIjxVMzE0OD48VTMxNTY+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSllFU1MKKzxVQzg2OT4gIjxVMzE0OD48VTMxNTY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSllFTkcKKzxVQzg2QT4gIjxVMzE0OD48VTMxNTY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgSllFSgorPFVDODZCPiAiPFUzMTQ4PjxVMzE1Nj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUVDCis8VUM4NkM+ICI8VTMxNDg+PFUzMTU2PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEpZRUsKKzxVQzg2RD4gIjxVMzE0OD48VTMxNTY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllFVAorPFVDODZFPiAiPFUzMTQ4PjxVMzE1Nj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUVQCis8VUM4NkY+ICI8VTMxNDg+PFUzMTU2PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZRUgKKzxVQzg3MD4gIjxVMzE0OD48VTMxNTc+IgklIEhBTkdVTCBTWUxMQUJMRSBKTworPFVDODcxPiAiPFUzMTQ4PjxVMzE1Nz48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBKT0cKKzxVQzg3Mj4gIjxVMzE0OD48VTMxNTc+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSk9HRworPFVDODczPiAiPFUzMTQ4PjxVMzE1Nz48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBKT0dTCis8VUM4NzQ+ICI8VTMxNDg+PFUzMTU3PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEpPTgorPFVDODc1PiAiPFUzMTQ4PjxVMzE1Nz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBKT05JCis8VUM4NzY+ICI8VTMxNDg+PFUzMTU3PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEpPTkgKKzxVQzg3Nz4gIjxVMzE0OD48VTMxNTc+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSk9ECis8VUM4Nzg+ICI8VTMxNDg+PFUzMTU3PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEpPTAorPFVDODc5PiAiPFUzMTQ4PjxVMzE1Nz48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBKT0xHCis8VUM4N0E+ICI8VTMxNDg+PFUzMTU3PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEpPTE0KKzxVQzg3Qj4gIjxVMzE0OD48VTMxNTc+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSk9MQgorPFVDODdDPiAiPFUzMTQ4PjxVMzE1Nz48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBKT0xTCis8VUM4N0Q+ICI8VTMxNDg+PFUzMTU3PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEpPTFQKKzxVQzg3RT4gIjxVMzE0OD48VTMxNTc+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSk9MUAorPFVDODdGPiAiPFUzMTQ4PjxVMzE1Nz48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBKT0xICis8VUM4ODA+ICI8VTMxNDg+PFUzMTU3PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEpPTQorPFVDODgxPiAiPFUzMTQ4PjxVMzE1Nz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBKT0IKKzxVQzg4Mj4gIjxVMzE0OD48VTMxNTc+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSk9CUworPFVDODgzPiAiPFUzMTQ4PjxVMzE1Nz48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBKT1MKKzxVQzg4ND4gIjxVMzE0OD48VTMxNTc+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSk9TUworPFVDODg1PiAiPFUzMTQ4PjxVMzE1Nz48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBKT05HCis8VUM4ODY+ICI8VTMxNDg+PFUzMTU3PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEpPSgorPFVDODg3PiAiPFUzMTQ4PjxVMzE1Nz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBKT0MKKzxVQzg4OD4gIjxVMzE0OD48VTMxNTc+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSk9LCis8VUM4ODk+ICI8VTMxNDg+PFUzMTU3PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEpPVAorPFVDODhBPiAiPFUzMTQ4PjxVMzE1Nz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKT1AKKzxVQzg4Qj4gIjxVMzE0OD48VTMxNTc+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSk9ICis8VUM4OEM+ICI8VTMxNDg+PFUzMTU4PiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBCis8VUM4OEQ+ICI8VTMxNDg+PFUzMTU4PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEpXQUcKKzxVQzg4RT4gIjxVMzE0OD48VTMxNTg+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBR0cKKzxVQzg4Rj4gIjxVMzE0OD48VTMxNTg+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBR1MKKzxVQzg5MD4gIjxVMzE0OD48VTMxNTg+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBTgorPFVDODkxPiAiPFUzMTQ4PjxVMzE1OD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0FOSQorPFVDODkyPiAiPFUzMTQ4PjxVMzE1OD48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0FOSAorPFVDODkzPiAiPFUzMTQ4PjxVMzE1OD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0FECis8VUM4OTQ+ICI8VTMxNDg+PFUzMTU4PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEpXQUwKKzxVQzg5NT4gIjxVMzE0OD48VTMxNTg+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBTEcKKzxVQzg5Nj4gIjxVMzE0OD48VTMxNTg+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBTE0KKzxVQzg5Nz4gIjxVMzE0OD48VTMxNTg+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBTEIKKzxVQzg5OD4gIjxVMzE0OD48VTMxNTg+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBTFMKKzxVQzg5OT4gIjxVMzE0OD48VTMxNTg+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBTFQKKzxVQzg5QT4gIjxVMzE0OD48VTMxNTg+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBTFAKKzxVQzg5Qj4gIjxVMzE0OD48VTMxNTg+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBTEgKKzxVQzg5Qz4gIjxVMzE0OD48VTMxNTg+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBTQorPFVDODlEPiAiPFUzMTQ4PjxVMzE1OD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0FCCis8VUM4OUU+ICI8VTMxNDg+PFUzMTU4PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEpXQUJTCis8VUM4OUY+ICI8VTMxNDg+PFUzMTU4PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEpXQVMKKzxVQzhBMD4gIjxVMzE0OD48VTMxNTg+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBU1MKKzxVQzhBMT4gIjxVMzE0OD48VTMxNTg+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBTkcKKzxVQzhBMj4gIjxVMzE0OD48VTMxNTg+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBSgorPFVDOEEzPiAiPFUzMTQ4PjxVMzE1OD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0FDCis8VUM4QTQ+ICI8VTMxNDg+PFUzMTU4PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEpXQUsKKzxVQzhBNT4gIjxVMzE0OD48VTMxNTg+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBVAorPFVDOEE2PiAiPFUzMTQ4PjxVMzE1OD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0FQCis8VUM4QTc+ICI8VTMxNDg+PFUzMTU4PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEpXQUgKKzxVQzhBOD4gIjxVMzE0OD48VTMxNTk+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0FFCis8VUM4QTk+ICI8VTMxNDg+PFUzMTU5PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEpXQUVHCis8VUM4QUE+ICI8VTMxNDg+PFUzMTU5PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEpXQUVHRworPFVDOEFCPiAiPFUzMTQ4PjxVMzE1OT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0FFR1MKKzxVQzhBQz4gIjxVMzE0OD48VTMxNTk+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBRU4KKzxVQzhBRD4gIjxVMzE0OD48VTMxNTk+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBRU5JCis8VUM4QUU+ICI8VTMxNDg+PFUzMTU5PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEpXQUVOSAorPFVDOEFGPiAiPFUzMTQ4PjxVMzE1OT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0FFRAorPFVDOEIwPiAiPFUzMTQ4PjxVMzE1OT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0FFTAorPFVDOEIxPiAiPFUzMTQ4PjxVMzE1OT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0FFTEcKKzxVQzhCMj4gIjxVMzE0OD48VTMxNTk+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBRUxNCis8VUM4QjM+ICI8VTMxNDg+PFUzMTU5PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEpXQUVMQgorPFVDOEI0PiAiPFUzMTQ4PjxVMzE1OT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0FFTFMKKzxVQzhCNT4gIjxVMzE0OD48VTMxNTk+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBRUxUCis8VUM4QjY+ICI8VTMxNDg+PFUzMTU5PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEpXQUVMUAorPFVDOEI3PiAiPFUzMTQ4PjxVMzE1OT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0FFTEgKKzxVQzhCOD4gIjxVMzE0OD48VTMxNTk+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBRU0KKzxVQzhCOT4gIjxVMzE0OD48VTMxNTk+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBRUIKKzxVQzhCQT4gIjxVMzE0OD48VTMxNTk+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBRUJTCis8VUM4QkI+ICI8VTMxNDg+PFUzMTU5PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEpXQUVTCis8VUM4QkM+ICI8VTMxNDg+PFUzMTU5PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEpXQUVTUworPFVDOEJEPiAiPFUzMTQ4PjxVMzE1OT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0FFTkcKKzxVQzhCRT4gIjxVMzE0OD48VTMxNTk+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBRUoKKzxVQzhCRj4gIjxVMzE0OD48VTMxNTk+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBRUMKKzxVQzhDMD4gIjxVMzE0OD48VTMxNTk+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBRUsKKzxVQzhDMT4gIjxVMzE0OD48VTMxNTk+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBRVQKKzxVQzhDMj4gIjxVMzE0OD48VTMxNTk+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBRVAKKzxVQzhDMz4gIjxVMzE0OD48VTMxNTk+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldBRUgKKzxVQzhDND4gIjxVMzE0OD48VTMxNUE+IgklIEhBTkdVTCBTWUxMQUJMRSBKT0UKKzxVQzhDNT4gIjxVMzE0OD48VTMxNUE+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSk9FRworPFVDOEM2PiAiPFUzMTQ4PjxVMzE1QT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBKT0VHRworPFVDOEM3PiAiPFUzMTQ4PjxVMzE1QT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBKT0VHUworPFVDOEM4PiAiPFUzMTQ4PjxVMzE1QT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKT0VOCis8VUM4Qzk+ICI8VTMxNDg+PFUzMTVBPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEpPRU5JCis8VUM4Q0E+ICI8VTMxNDg+PFUzMTVBPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEpPRU5ICis8VUM4Q0I+ICI8VTMxNDg+PFUzMTVBPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEpPRUQKKzxVQzhDQz4gIjxVMzE0OD48VTMxNUE+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgSk9FTAorPFVDOENEPiAiPFUzMTQ4PjxVMzE1QT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBKT0VMRworPFVDOENFPiAiPFUzMTQ4PjxVMzE1QT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBKT0VMTQorPFVDOENGPiAiPFUzMTQ4PjxVMzE1QT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBKT0VMQgorPFVDOEQwPiAiPFUzMTQ4PjxVMzE1QT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBKT0VMUworPFVDOEQxPiAiPFUzMTQ4PjxVMzE1QT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBKT0VMVAorPFVDOEQyPiAiPFUzMTQ4PjxVMzE1QT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBKT0VMUAorPFVDOEQzPiAiPFUzMTQ4PjxVMzE1QT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBKT0VMSAorPFVDOEQ0PiAiPFUzMTQ4PjxVMzE1QT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBKT0VNCis8VUM4RDU+ICI8VTMxNDg+PFUzMTVBPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEpPRUIKKzxVQzhENj4gIjxVMzE0OD48VTMxNUE+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSk9FQlMKKzxVQzhENz4gIjxVMzE0OD48VTMxNUE+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSk9FUworPFVDOEQ4PiAiPFUzMTQ4PjxVMzE1QT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBKT0VTUworPFVDOEQ5PiAiPFUzMTQ4PjxVMzE1QT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBKT0VORworPFVDOERBPiAiPFUzMTQ4PjxVMzE1QT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBKT0VKCis8VUM4REI+ICI8VTMxNDg+PFUzMTVBPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEpPRUMKKzxVQzhEQz4gIjxVMzE0OD48VTMxNUE+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSk9FSworPFVDOEREPiAiPFUzMTQ4PjxVMzE1QT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBKT0VUCis8VUM4REU+ICI8VTMxNDg+PFUzMTVBPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEpPRVAKKzxVQzhERj4gIjxVMzE0OD48VTMxNUE+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSk9FSAorPFVDOEUwPiAiPFUzMTQ4PjxVMzE1Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEpZTworPFVDOEUxPiAiPFUzMTQ4PjxVMzE1Qj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBKWU9HCis8VUM4RTI+ICI8VTMxNDg+PFUzMTVCPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEpZT0dHCis8VUM4RTM+ICI8VTMxNDg+PFUzMTVCPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEpZT0dTCis8VUM4RTQ+ICI8VTMxNDg+PFUzMTVCPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEpZT04KKzxVQzhFNT4gIjxVMzE0OD48VTMxNUI+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSllPTkkKKzxVQzhFNj4gIjxVMzE0OD48VTMxNUI+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSllPTkgKKzxVQzhFNz4gIjxVMzE0OD48VTMxNUI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSllPRAorPFVDOEU4PiAiPFUzMTQ4PjxVMzE1Qj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBKWU9MCis8VUM4RTk+ICI8VTMxNDg+PFUzMTVCPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZT0xHCis8VUM4RUE+ICI8VTMxNDg+PFUzMTVCPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEpZT0xNCis8VUM4RUI+ICI8VTMxNDg+PFUzMTVCPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEpZT0xCCis8VUM4RUM+ICI8VTMxNDg+PFUzMTVCPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEpZT0xTCis8VUM4RUQ+ICI8VTMxNDg+PFUzMTVCPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZT0xUCis8VUM4RUU+ICI8VTMxNDg+PFUzMTVCPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEpZT0xQCis8VUM4RUY+ICI8VTMxNDg+PFUzMTVCPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEpZT0xICis8VUM4RjA+ICI8VTMxNDg+PFUzMTVCPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZT00KKzxVQzhGMT4gIjxVMzE0OD48VTMxNUI+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllPQgorPFVDOEYyPiAiPFUzMTQ4PjxVMzE1Qj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKWU9CUworPFVDOEYzPiAiPFUzMTQ4PjxVMzE1Qj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBKWU9TCis8VUM4RjQ+ICI8VTMxNDg+PFUzMTVCPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEpZT1NTCis8VUM4RjU+ICI8VTMxNDg+PFUzMTVCPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEpZT05HCis8VUM4RjY+ICI8VTMxNDg+PFUzMTVCPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEpZT0oKKzxVQzhGNz4gIjxVMzE0OD48VTMxNUI+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllPQworPFVDOEY4PiAiPFUzMTQ4PjxVMzE1Qj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBKWU9LCis8VUM4Rjk+ICI8VTMxNDg+PFUzMTVCPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEpZT1QKKzxVQzhGQT4gIjxVMzE0OD48VTMxNUI+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllPUAorPFVDOEZCPiAiPFUzMTQ4PjxVMzE1Qj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBKWU9ICis8VUM4RkM+ICI8VTMxNDg+PFUzMTVDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSlUKKzxVQzhGRD4gIjxVMzE0OD48VTMxNUM+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSlVHCis8VUM4RkU+ICI8VTMxNDg+PFUzMTVDPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEpVR0cKKzxVQzhGRj4gIjxVMzE0OD48VTMxNUM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSlVHUworPFVDOTAwPiAiPFUzMTQ4PjxVMzE1Qz48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKVU4KKzxVQzkwMT4gIjxVMzE0OD48VTMxNUM+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSlVOSQorPFVDOTAyPiAiPFUzMTQ4PjxVMzE1Qz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBKVU5ICis8VUM5MDM+ICI8VTMxNDg+PFUzMTVDPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEpVRAorPFVDOTA0PiAiPFUzMTQ4PjxVMzE1Qz48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBKVUwKKzxVQzkwNT4gIjxVMzE0OD48VTMxNUM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSlVMRworPFVDOTA2PiAiPFUzMTQ4PjxVMzE1Qz48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBKVUxNCis8VUM5MDc+ICI8VTMxNDg+PFUzMTVDPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEpVTEIKKzxVQzkwOD4gIjxVMzE0OD48VTMxNUM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSlVMUworPFVDOTA5PiAiPFUzMTQ4PjxVMzE1Qz48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBKVUxUCis8VUM5MEE+ICI8VTMxNDg+PFUzMTVDPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEpVTFAKKzxVQzkwQj4gIjxVMzE0OD48VTMxNUM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSlVMSAorPFVDOTBDPiAiPFUzMTQ4PjxVMzE1Qz48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBKVU0KKzxVQzkwRD4gIjxVMzE0OD48VTMxNUM+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSlVCCis8VUM5MEU+ICI8VTMxNDg+PFUzMTVDPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEpVQlMKKzxVQzkwRj4gIjxVMzE0OD48VTMxNUM+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSlVTCis8VUM5MTA+ICI8VTMxNDg+PFUzMTVDPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEpVU1MKKzxVQzkxMT4gIjxVMzE0OD48VTMxNUM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSlVORworPFVDOTEyPiAiPFUzMTQ4PjxVMzE1Qz48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBKVUoKKzxVQzkxMz4gIjxVMzE0OD48VTMxNUM+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSlVDCis8VUM5MTQ+ICI8VTMxNDg+PFUzMTVDPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEpVSworPFVDOTE1PiAiPFUzMTQ4PjxVMzE1Qz48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBKVVQKKzxVQzkxNj4gIjxVMzE0OD48VTMxNUM+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgSlVQCis8VUM5MTc+ICI8VTMxNDg+PFUzMTVDPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEpVSAorPFVDOTE4PiAiPFUzMTQ4PjxVMzE1RD4iCSUgSEFOR1VMIFNZTExBQkxFIEpXRU8KKzxVQzkxOT4gIjxVMzE0OD48VTMxNUQ+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldFT0cKKzxVQzkxQT4gIjxVMzE0OD48VTMxNUQ+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldFT0dHCis8VUM5MUI+ICI8VTMxNDg+PFUzMTVEPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEpXRU9HUworPFVDOTFDPiAiPFUzMTQ4PjxVMzE1RD48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0VPTgorPFVDOTFEPiAiPFUzMTQ4PjxVMzE1RD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0VPTkkKKzxVQzkxRT4gIjxVMzE0OD48VTMxNUQ+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSldFT05ICis8VUM5MUY+ICI8VTMxNDg+PFUzMTVEPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEpXRU9ECis8VUM5MjA+ICI8VTMxNDg+PFUzMTVEPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEpXRU9MCis8VUM5MjE+ICI8VTMxNDg+PFUzMTVEPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEpXRU9MRworPFVDOTIyPiAiPFUzMTQ4PjxVMzE1RD48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0VPTE0KKzxVQzkyMz4gIjxVMzE0OD48VTMxNUQ+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldFT0xCCis8VUM5MjQ+ICI8VTMxNDg+PFUzMTVEPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEpXRU9MUworPFVDOTI1PiAiPFUzMTQ4PjxVMzE1RD48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0VPTFQKKzxVQzkyNj4gIjxVMzE0OD48VTMxNUQ+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldFT0xQCis8VUM5Mjc+ICI8VTMxNDg+PFUzMTVEPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEpXRU9MSAorPFVDOTI4PiAiPFUzMTQ4PjxVMzE1RD48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0VPTQorPFVDOTI5PiAiPFUzMTQ4PjxVMzE1RD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0VPQgorPFVDOTJBPiAiPFUzMTQ4PjxVMzE1RD48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0VPQlMKKzxVQzkyQj4gIjxVMzE0OD48VTMxNUQ+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSldFT1MKKzxVQzkyQz4gIjxVMzE0OD48VTMxNUQ+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSldFT1NTCis8VUM5MkQ+ICI8VTMxNDg+PFUzMTVEPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEpXRU9ORworPFVDOTJFPiAiPFUzMTQ4PjxVMzE1RD48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0VPSgorPFVDOTJGPiAiPFUzMTQ4PjxVMzE1RD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0VPQworPFVDOTMwPiAiPFUzMTQ4PjxVMzE1RD48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0VPSworPFVDOTMxPiAiPFUzMTQ4PjxVMzE1RD48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0VPVAorPFVDOTMyPiAiPFUzMTQ4PjxVMzE1RD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0VPUAorPFVDOTMzPiAiPFUzMTQ4PjxVMzE1RD48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0VPSAorPFVDOTM0PiAiPFUzMTQ4PjxVMzE1RT4iCSUgSEFOR1VMIFNZTExBQkxFIEpXRQorPFVDOTM1PiAiPFUzMTQ4PjxVMzE1RT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0VHCis8VUM5MzY+ICI8VTMxNDg+PFUzMTVFPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEpXRUdHCis8VUM5Mzc+ICI8VTMxNDg+PFUzMTVFPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEpXRUdTCis8VUM5Mzg+ICI8VTMxNDg+PFUzMTVFPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEpXRU4KKzxVQzkzOT4gIjxVMzE0OD48VTMxNUU+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSldFTkkKKzxVQzkzQT4gIjxVMzE0OD48VTMxNUU+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSldFTkgKKzxVQzkzQj4gIjxVMzE0OD48VTMxNUU+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSldFRAorPFVDOTNDPiAiPFUzMTQ4PjxVMzE1RT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0VMCis8VUM5M0Q+ICI8VTMxNDg+PFUzMTVFPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEpXRUxHCis8VUM5M0U+ICI8VTMxNDg+PFUzMTVFPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEpXRUxNCis8VUM5M0Y+ICI8VTMxNDg+PFUzMTVFPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEpXRUxCCis8VUM5NDA+ICI8VTMxNDg+PFUzMTVFPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEpXRUxTCis8VUM5NDE+ICI8VTMxNDg+PFUzMTVFPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEpXRUxUCis8VUM5NDI+ICI8VTMxNDg+PFUzMTVFPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEpXRUxQCis8VUM5NDM+ICI8VTMxNDg+PFUzMTVFPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEpXRUxICis8VUM5NDQ+ICI8VTMxNDg+PFUzMTVFPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEpXRU0KKzxVQzk0NT4gIjxVMzE0OD48VTMxNUU+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldFQgorPFVDOTQ2PiAiPFUzMTQ4PjxVMzE1RT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0VCUworPFVDOTQ3PiAiPFUzMTQ4PjxVMzE1RT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0VTCis8VUM5NDg+ICI8VTMxNDg+PFUzMTVFPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEpXRVNTCis8VUM5NDk+ICI8VTMxNDg+PFUzMTVFPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEpXRU5HCis8VUM5NEE+ICI8VTMxNDg+PFUzMTVFPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEpXRUoKKzxVQzk0Qj4gIjxVMzE0OD48VTMxNUU+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldFQworPFVDOTRDPiAiPFUzMTQ4PjxVMzE1RT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0VLCis8VUM5NEQ+ICI8VTMxNDg+PFUzMTVFPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEpXRVQKKzxVQzk0RT4gIjxVMzE0OD48VTMxNUU+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldFUAorPFVDOTRGPiAiPFUzMTQ4PjxVMzE1RT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0VICis8VUM5NTA+ICI8VTMxNDg+PFUzMTVGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldJCis8VUM5NTE+ICI8VTMxNDg+PFUzMTVGPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEpXSUcKKzxVQzk1Mj4gIjxVMzE0OD48VTMxNUY+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldJR0cKKzxVQzk1Mz4gIjxVMzE0OD48VTMxNUY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldJR1MKKzxVQzk1ND4gIjxVMzE0OD48VTMxNUY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSldJTgorPFVDOTU1PiAiPFUzMTQ4PjxVMzE1Rj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0lOSQorPFVDOTU2PiAiPFUzMTQ4PjxVMzE1Rj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0lOSAorPFVDOTU3PiAiPFUzMTQ4PjxVMzE1Rj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0lECis8VUM5NTg+ICI8VTMxNDg+PFUzMTVGPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEpXSUwKKzxVQzk1OT4gIjxVMzE0OD48VTMxNUY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldJTEcKKzxVQzk1QT4gIjxVMzE0OD48VTMxNUY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldJTE0KKzxVQzk1Qj4gIjxVMzE0OD48VTMxNUY+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldJTEIKKzxVQzk1Qz4gIjxVMzE0OD48VTMxNUY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldJTFMKKzxVQzk1RD4gIjxVMzE0OD48VTMxNUY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldJTFQKKzxVQzk1RT4gIjxVMzE0OD48VTMxNUY+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldJTFAKKzxVQzk1Rj4gIjxVMzE0OD48VTMxNUY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldJTEgKKzxVQzk2MD4gIjxVMzE0OD48VTMxNUY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldJTQorPFVDOTYxPiAiPFUzMTQ4PjxVMzE1Rj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0lCCis8VUM5NjI+ICI8VTMxNDg+PFUzMTVGPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEpXSUJTCis8VUM5NjM+ICI8VTMxNDg+PFUzMTVGPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEpXSVMKKzxVQzk2ND4gIjxVMzE0OD48VTMxNUY+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSldJU1MKKzxVQzk2NT4gIjxVMzE0OD48VTMxNUY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSldJTkcKKzxVQzk2Nj4gIjxVMzE0OD48VTMxNUY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgSldJSgorPFVDOTY3PiAiPFUzMTQ4PjxVMzE1Rj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0lDCis8VUM5Njg+ICI8VTMxNDg+PFUzMTVGPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEpXSUsKKzxVQzk2OT4gIjxVMzE0OD48VTMxNUY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSldJVAorPFVDOTZBPiAiPFUzMTQ4PjxVMzE1Rj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKV0lQCis8VUM5NkI+ICI8VTMxNDg+PFUzMTVGPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEpXSUgKKzxVQzk2Qz4gIjxVMzE0OD48VTMxNjA+IgklIEhBTkdVTCBTWUxMQUJMRSBKWVUKKzxVQzk2RD4gIjxVMzE0OD48VTMxNjA+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllVRworPFVDOTZFPiAiPFUzMTQ4PjxVMzE2MD48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBKWVVHRworPFVDOTZGPiAiPFUzMTQ4PjxVMzE2MD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBKWVVHUworPFVDOTcwPiAiPFUzMTQ4PjxVMzE2MD48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKWVVOCis8VUM5NzE+ICI8VTMxNDg+PFUzMTYwPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZVU5JCis8VUM5NzI+ICI8VTMxNDg+PFUzMTYwPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEpZVU5ICis8VUM5NzM+ICI8VTMxNDg+PFUzMTYwPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEpZVUQKKzxVQzk3ND4gIjxVMzE0OD48VTMxNjA+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgSllVTAorPFVDOTc1PiAiPFUzMTQ4PjxVMzE2MD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBKWVVMRworPFVDOTc2PiAiPFUzMTQ4PjxVMzE2MD48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBKWVVMTQorPFVDOTc3PiAiPFUzMTQ4PjxVMzE2MD48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBKWVVMQgorPFVDOTc4PiAiPFUzMTQ4PjxVMzE2MD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBKWVVMUworPFVDOTc5PiAiPFUzMTQ4PjxVMzE2MD48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBKWVVMVAorPFVDOTdBPiAiPFUzMTQ4PjxVMzE2MD48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBKWVVMUAorPFVDOTdCPiAiPFUzMTQ4PjxVMzE2MD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBKWVVMSAorPFVDOTdDPiAiPFUzMTQ4PjxVMzE2MD48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBKWVVNCis8VUM5N0Q+ICI8VTMxNDg+PFUzMTYwPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEpZVUIKKzxVQzk3RT4gIjxVMzE0OD48VTMxNjA+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSllVQlMKKzxVQzk3Rj4gIjxVMzE0OD48VTMxNjA+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSllVUworPFVDOTgwPiAiPFUzMTQ4PjxVMzE2MD48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBKWVVTUworPFVDOTgxPiAiPFUzMTQ4PjxVMzE2MD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBKWVVORworPFVDOTgyPiAiPFUzMTQ4PjxVMzE2MD48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBKWVVKCis8VUM5ODM+ICI8VTMxNDg+PFUzMTYwPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZVUMKKzxVQzk4ND4gIjxVMzE0OD48VTMxNjA+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllVSworPFVDOTg1PiAiPFUzMTQ4PjxVMzE2MD48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBKWVVUCis8VUM5ODY+ICI8VTMxNDg+PFUzMTYwPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEpZVVAKKzxVQzk4Nz4gIjxVMzE0OD48VTMxNjA+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllVSAorPFVDOTg4PiAiPFUzMTQ4PjxVMzE2MT4iCSUgSEFOR1VMIFNZTExBQkxFIEpFVQorPFVDOTg5PiAiPFUzMTQ4PjxVMzE2MT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBKRVVHCis8VUM5OEE+ICI8VTMxNDg+PFUzMTYxPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEpFVUdHCis8VUM5OEI+ICI8VTMxNDg+PFUzMTYxPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEpFVUdTCis8VUM5OEM+ICI8VTMxNDg+PFUzMTYxPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEpFVU4KKzxVQzk4RD4gIjxVMzE0OD48VTMxNjE+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVVTkkKKzxVQzk4RT4gIjxVMzE0OD48VTMxNjE+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVVTkgKKzxVQzk4Rj4gIjxVMzE0OD48VTMxNjE+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVVRAorPFVDOTkwPiAiPFUzMTQ4PjxVMzE2MT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBKRVVMCis8VUM5OTE+ICI8VTMxNDg+PFUzMTYxPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEpFVUxHCis8VUM5OTI+ICI8VTMxNDg+PFUzMTYxPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEpFVUxNCis8VUM5OTM+ICI8VTMxNDg+PFUzMTYxPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEpFVUxCCis8VUM5OTQ+ICI8VTMxNDg+PFUzMTYxPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEpFVUxTCis8VUM5OTU+ICI8VTMxNDg+PFUzMTYxPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEpFVUxUCis8VUM5OTY+ICI8VTMxNDg+PFUzMTYxPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEpFVUxQCis8VUM5OTc+ICI8VTMxNDg+PFUzMTYxPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEpFVUxICis8VUM5OTg+ICI8VTMxNDg+PFUzMTYxPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEpFVU0KKzxVQzk5OT4gIjxVMzE0OD48VTMxNjE+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVVQgorPFVDOTlBPiAiPFUzMTQ4PjxVMzE2MT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKRVVCUworPFVDOTlCPiAiPFUzMTQ4PjxVMzE2MT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBKRVVTCis8VUM5OUM+ICI8VTMxNDg+PFUzMTYxPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEpFVVNTCis8VUM5OUQ+ICI8VTMxNDg+PFUzMTYxPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEpFVU5HCis8VUM5OUU+ICI8VTMxNDg+PFUzMTYxPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEpFVUoKKzxVQzk5Rj4gIjxVMzE0OD48VTMxNjE+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVVQworPFVDOUEwPiAiPFUzMTQ4PjxVMzE2MT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBKRVVLCis8VUM5QTE+ICI8VTMxNDg+PFUzMTYxPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEpFVVQKKzxVQzlBMj4gIjxVMzE0OD48VTMxNjE+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkVVUAorPFVDOUEzPiAiPFUzMTQ4PjxVMzE2MT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBKRVVICis8VUM5QTQ+ICI8VTMxNDg+PFUzMTYyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllJCis8VUM5QTU+ICI8VTMxNDg+PFUzMTYyPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZSUcKKzxVQzlBNj4gIjxVMzE0OD48VTMxNjI+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllJR0cKKzxVQzlBNz4gIjxVMzE0OD48VTMxNjI+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllJR1MKKzxVQzlBOD4gIjxVMzE0OD48VTMxNjI+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSllJTgorPFVDOUE5PiAiPFUzMTQ4PjxVMzE2Mj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUlOSQorPFVDOUFBPiAiPFUzMTQ4PjxVMzE2Mj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUlOSAorPFVDOUFCPiAiPFUzMTQ4PjxVMzE2Mj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUlECis8VUM5QUM+ICI8VTMxNDg+PFUzMTYyPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZSUwKKzxVQzlBRD4gIjxVMzE0OD48VTMxNjI+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllJTEcKKzxVQzlBRT4gIjxVMzE0OD48VTMxNjI+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllJTE0KKzxVQzlBRj4gIjxVMzE0OD48VTMxNjI+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllJTEIKKzxVQzlCMD4gIjxVMzE0OD48VTMxNjI+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllJTFMKKzxVQzlCMT4gIjxVMzE0OD48VTMxNjI+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllJTFQKKzxVQzlCMj4gIjxVMzE0OD48VTMxNjI+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllJTFAKKzxVQzlCMz4gIjxVMzE0OD48VTMxNjI+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllJTEgKKzxVQzlCND4gIjxVMzE0OD48VTMxNjI+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllJTQorPFVDOUI1PiAiPFUzMTQ4PjxVMzE2Mj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUlCCis8VUM5QjY+ICI8VTMxNDg+PFUzMTYyPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEpZSUJTCis8VUM5Qjc+ICI8VTMxNDg+PFUzMTYyPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZSVMKKzxVQzlCOD4gIjxVMzE0OD48VTMxNjI+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSllJU1MKKzxVQzlCOT4gIjxVMzE0OD48VTMxNjI+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSllJTkcKKzxVQzlCQT4gIjxVMzE0OD48VTMxNjI+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgSllJSgorPFVDOUJCPiAiPFUzMTQ4PjxVMzE2Mj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUlDCis8VUM5QkM+ICI8VTMxNDg+PFUzMTYyPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEpZSUsKKzxVQzlCRD4gIjxVMzE0OD48VTMxNjI+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSllJVAorPFVDOUJFPiAiPFUzMTQ4PjxVMzE2Mj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKWUlQCis8VUM5QkY+ICI8VTMxNDg+PFUzMTYyPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEpZSUgKKzxVQzlDMD4gIjxVMzE0OD48VTMxNjM+IgklIEhBTkdVTCBTWUxMQUJMRSBKSQorPFVDOUMxPiAiPFUzMTQ4PjxVMzE2Mz48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBKSUcKKzxVQzlDMj4gIjxVMzE0OD48VTMxNjM+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSklHRworPFVDOUMzPiAiPFUzMTQ4PjxVMzE2Mz48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBKSUdTCis8VUM5QzQ+ICI8VTMxNDg+PFUzMTYzPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEpJTgorPFVDOUM1PiAiPFUzMTQ4PjxVMzE2Mz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBKSU5JCis8VUM5QzY+ICI8VTMxNDg+PFUzMTYzPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEpJTkgKKzxVQzlDNz4gIjxVMzE0OD48VTMxNjM+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSklECis8VUM5Qzg+ICI8VTMxNDg+PFUzMTYzPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEpJTAorPFVDOUM5PiAiPFUzMTQ4PjxVMzE2Mz48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBKSUxHCis8VUM5Q0E+ICI8VTMxNDg+PFUzMTYzPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEpJTE0KKzxVQzlDQj4gIjxVMzE0OD48VTMxNjM+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSklMQgorPFVDOUNDPiAiPFUzMTQ4PjxVMzE2Mz48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBKSUxTCis8VUM5Q0Q+ICI8VTMxNDg+PFUzMTYzPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEpJTFQKKzxVQzlDRT4gIjxVMzE0OD48VTMxNjM+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSklMUAorPFVDOUNGPiAiPFUzMTQ4PjxVMzE2Mz48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBKSUxICis8VUM5RDA+ICI8VTMxNDg+PFUzMTYzPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEpJTQorPFVDOUQxPiAiPFUzMTQ4PjxVMzE2Mz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBKSUIKKzxVQzlEMj4gIjxVMzE0OD48VTMxNjM+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSklCUworPFVDOUQzPiAiPFUzMTQ4PjxVMzE2Mz48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBKSVMKKzxVQzlEND4gIjxVMzE0OD48VTMxNjM+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSklTUworPFVDOUQ1PiAiPFUzMTQ4PjxVMzE2Mz48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBKSU5HCis8VUM5RDY+ICI8VTMxNDg+PFUzMTYzPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEpJSgorPFVDOUQ3PiAiPFUzMTQ4PjxVMzE2Mz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBKSUMKKzxVQzlEOD4gIjxVMzE0OD48VTMxNjM+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSklLCis8VUM5RDk+ICI8VTMxNDg+PFUzMTYzPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEpJVAorPFVDOURBPiAiPFUzMTQ4PjxVMzE2Mz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKSVAKKzxVQzlEQj4gIjxVMzE0OD48VTMxNjM+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSklICis8VUM5REM+ICI8VTMxNDk+PFUzMTRGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBCis8VUM5REQ+ICI8VTMxNDk+PFUzMTRGPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKQUcKKzxVQzlERT4gIjxVMzE0OT48VTMxNEY+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBR0cKKzxVQzlERj4gIjxVMzE0OT48VTMxNEY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBR1MKKzxVQzlFMD4gIjxVMzE0OT48VTMxNEY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBTgorPFVDOUUxPiAiPFUzMTQ5PjxVMzE0Rj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkFOSQorPFVDOUUyPiAiPFUzMTQ5PjxVMzE0Rj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkFOSAorPFVDOUUzPiAiPFUzMTQ5PjxVMzE0Rj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkFECis8VUM5RTQ+ICI8VTMxNDk+PFUzMTRGPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKQUwKKzxVQzlFNT4gIjxVMzE0OT48VTMxNEY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBTEcKKzxVQzlFNj4gIjxVMzE0OT48VTMxNEY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBTE0KKzxVQzlFNz4gIjxVMzE0OT48VTMxNEY+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBTEIKKzxVQzlFOD4gIjxVMzE0OT48VTMxNEY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBTFMKKzxVQzlFOT4gIjxVMzE0OT48VTMxNEY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBTFQKKzxVQzlFQT4gIjxVMzE0OT48VTMxNEY+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBTFAKKzxVQzlFQj4gIjxVMzE0OT48VTMxNEY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBTEgKKzxVQzlFQz4gIjxVMzE0OT48VTMxNEY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBTQorPFVDOUVEPiAiPFUzMTQ5PjxVMzE0Rj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkFCCis8VUM5RUU+ICI8VTMxNDk+PFUzMTRGPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKQUJTCis8VUM5RUY+ICI8VTMxNDk+PFUzMTRGPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKQVMKKzxVQzlGMD4gIjxVMzE0OT48VTMxNEY+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBU1MKKzxVQzlGMT4gIjxVMzE0OT48VTMxNEY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBTkcKKzxVQzlGMj4gIjxVMzE0OT48VTMxNEY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBSgorPFVDOUYzPiAiPFUzMTQ5PjxVMzE0Rj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkFDCis8VUM5RjQ+ICI8VTMxNDk+PFUzMTRGPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKQUsKKzxVQzlGNT4gIjxVMzE0OT48VTMxNEY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBVAorPFVDOUY2PiAiPFUzMTQ5PjxVMzE0Rj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkFQCis8VUM5Rjc+ICI8VTMxNDk+PFUzMTRGPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKQUgKKzxVQzlGOD4gIjxVMzE0OT48VTMxNTA+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkFFCis8VUM5Rjk+ICI8VTMxNDk+PFUzMTUwPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKQUVHCis8VUM5RkE+ICI8VTMxNDk+PFUzMTUwPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKQUVHRworPFVDOUZCPiAiPFUzMTQ5PjxVMzE1MD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkFFR1MKKzxVQzlGQz4gIjxVMzE0OT48VTMxNTA+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBRU4KKzxVQzlGRD4gIjxVMzE0OT48VTMxNTA+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBRU5JCis8VUM5RkU+ICI8VTMxNDk+PFUzMTUwPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKQUVOSAorPFVDOUZGPiAiPFUzMTQ5PjxVMzE1MD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkFFRAorPFVDQTAwPiAiPFUzMTQ5PjxVMzE1MD48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkFFTAorPFVDQTAxPiAiPFUzMTQ5PjxVMzE1MD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkFFTEcKKzxVQ0EwMj4gIjxVMzE0OT48VTMxNTA+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBRUxNCis8VUNBMDM+ICI8VTMxNDk+PFUzMTUwPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEpKQUVMQgorPFVDQTA0PiAiPFUzMTQ5PjxVMzE1MD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkFFTFMKKzxVQ0EwNT4gIjxVMzE0OT48VTMxNTA+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBRUxUCis8VUNBMDY+ICI8VTMxNDk+PFUzMTUwPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKQUVMUAorPFVDQTA3PiAiPFUzMTQ5PjxVMzE1MD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkFFTEgKKzxVQ0EwOD4gIjxVMzE0OT48VTMxNTA+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBRU0KKzxVQ0EwOT4gIjxVMzE0OT48VTMxNTA+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBRUIKKzxVQ0EwQT4gIjxVMzE0OT48VTMxNTA+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBRUJTCis8VUNBMEI+ICI8VTMxNDk+PFUzMTUwPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKQUVTCis8VUNBMEM+ICI8VTMxNDk+PFUzMTUwPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKQUVTUworPFVDQTBEPiAiPFUzMTQ5PjxVMzE1MD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkFFTkcKKzxVQ0EwRT4gIjxVMzE0OT48VTMxNTA+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBRUoKKzxVQ0EwRj4gIjxVMzE0OT48VTMxNTA+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBRUMKKzxVQ0ExMD4gIjxVMzE0OT48VTMxNTA+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBRUsKKzxVQ0ExMT4gIjxVMzE0OT48VTMxNTA+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBRVQKKzxVQ0ExMj4gIjxVMzE0OT48VTMxNTA+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBRVAKKzxVQ0ExMz4gIjxVMzE0OT48VTMxNTA+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpBRUgKKzxVQ0ExND4gIjxVMzE0OT48VTMxNTE+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllBCis8VUNBMTU+ICI8VTMxNDk+PFUzMTUxPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUFHCis8VUNBMTY+ICI8VTMxNDk+PFUzMTUxPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUFHRworPFVDQTE3PiAiPFUzMTQ5PjxVMzE1MT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllBR1MKKzxVQ0ExOD4gIjxVMzE0OT48VTMxNTE+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZQU4KKzxVQ0ExOT4gIjxVMzE0OT48VTMxNTE+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZQU5JCis8VUNBMUE+ICI8VTMxNDk+PFUzMTUxPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUFOSAorPFVDQTFCPiAiPFUzMTQ5PjxVMzE1MT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllBRAorPFVDQTFDPiAiPFUzMTQ5PjxVMzE1MT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllBTAorPFVDQTFEPiAiPFUzMTQ5PjxVMzE1MT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllBTEcKKzxVQ0ExRT4gIjxVMzE0OT48VTMxNTE+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZQUxNCis8VUNBMUY+ICI8VTMxNDk+PFUzMTUxPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUFMQgorPFVDQTIwPiAiPFUzMTQ5PjxVMzE1MT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllBTFMKKzxVQ0EyMT4gIjxVMzE0OT48VTMxNTE+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZQUxUCis8VUNBMjI+ICI8VTMxNDk+PFUzMTUxPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUFMUAorPFVDQTIzPiAiPFUzMTQ5PjxVMzE1MT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllBTEgKKzxVQ0EyND4gIjxVMzE0OT48VTMxNTE+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZQU0KKzxVQ0EyNT4gIjxVMzE0OT48VTMxNTE+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZQUIKKzxVQ0EyNj4gIjxVMzE0OT48VTMxNTE+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZQUJTCis8VUNBMjc+ICI8VTMxNDk+PFUzMTUxPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUFTCis8VUNBMjg+ICI8VTMxNDk+PFUzMTUxPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUFTUworPFVDQTI5PiAiPFUzMTQ5PjxVMzE1MT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllBTkcKKzxVQ0EyQT4gIjxVMzE0OT48VTMxNTE+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZQUoKKzxVQ0EyQj4gIjxVMzE0OT48VTMxNTE+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZQUMKKzxVQ0EyQz4gIjxVMzE0OT48VTMxNTE+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZQUsKKzxVQ0EyRD4gIjxVMzE0OT48VTMxNTE+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZQVQKKzxVQ0EyRT4gIjxVMzE0OT48VTMxNTE+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZQVAKKzxVQ0EyRj4gIjxVMzE0OT48VTMxNTE+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZQUgKKzxVQ0EzMD4gIjxVMzE0OT48VTMxNTI+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllBRQorPFVDQTMxPiAiPFUzMTQ5PjxVMzE1Mj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllBRUcKKzxVQ0EzMj4gIjxVMzE0OT48VTMxNTI+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZQUVHRworPFVDQTMzPiAiPFUzMTQ5PjxVMzE1Mj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllBRUdTCis8VUNBMzQ+ICI8VTMxNDk+PFUzMTUyPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUFFTgorPFVDQTM1PiAiPFUzMTQ5PjxVMzE1Mj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllBRU5JCis8VUNBMzY+ICI8VTMxNDk+PFUzMTUyPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUFFTkgKKzxVQ0EzNz4gIjxVMzE0OT48VTMxNTI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZQUVECis8VUNBMzg+ICI8VTMxNDk+PFUzMTUyPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUFFTAorPFVDQTM5PiAiPFUzMTQ5PjxVMzE1Mj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllBRUxHCis8VUNBM0E+ICI8VTMxNDk+PFUzMTUyPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUFFTE0KKzxVQ0EzQj4gIjxVMzE0OT48VTMxNTI+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZQUVMQgorPFVDQTNDPiAiPFUzMTQ5PjxVMzE1Mj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllBRUxTCis8VUNBM0Q+ICI8VTMxNDk+PFUzMTUyPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUFFTFQKKzxVQ0EzRT4gIjxVMzE0OT48VTMxNTI+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZQUVMUAorPFVDQTNGPiAiPFUzMTQ5PjxVMzE1Mj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllBRUxICis8VUNBNDA+ICI8VTMxNDk+PFUzMTUyPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUFFTQorPFVDQTQxPiAiPFUzMTQ5PjxVMzE1Mj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllBRUIKKzxVQ0E0Mj4gIjxVMzE0OT48VTMxNTI+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZQUVCUworPFVDQTQzPiAiPFUzMTQ5PjxVMzE1Mj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllBRVMKKzxVQ0E0ND4gIjxVMzE0OT48VTMxNTI+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZQUVTUworPFVDQTQ1PiAiPFUzMTQ5PjxVMzE1Mj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllBRU5HCis8VUNBNDY+ICI8VTMxNDk+PFUzMTUyPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUFFSgorPFVDQTQ3PiAiPFUzMTQ5PjxVMzE1Mj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllBRUMKKzxVQ0E0OD4gIjxVMzE0OT48VTMxNTI+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZQUVLCis8VUNBNDk+ICI8VTMxNDk+PFUzMTUyPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUFFVAorPFVDQTRBPiAiPFUzMTQ5PjxVMzE1Mj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllBRVAKKzxVQ0E0Qj4gIjxVMzE0OT48VTMxNTI+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZQUVICis8VUNBNEM+ICI8VTMxNDk+PFUzMTUzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFTworPFVDQTREPiAiPFUzMTQ5PjxVMzE1Mz48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkVPRworPFVDQTRFPiAiPFUzMTQ5PjxVMzE1Mz48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkVPR0cKKzxVQ0E0Rj4gIjxVMzE0OT48VTMxNTM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFT0dTCis8VUNBNTA+ICI8VTMxNDk+PFUzMTUzPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRU9OCis8VUNBNTE+ICI8VTMxNDk+PFUzMTUzPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRU9OSQorPFVDQTUyPiAiPFUzMTQ5PjxVMzE1Mz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkVPTkgKKzxVQ0E1Mz4gIjxVMzE0OT48VTMxNTM+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFT0QKKzxVQ0E1ND4gIjxVMzE0OT48VTMxNTM+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFT0wKKzxVQ0E1NT4gIjxVMzE0OT48VTMxNTM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFT0xHCis8VUNBNTY+ICI8VTMxNDk+PFUzMTUzPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRU9MTQorPFVDQTU3PiAiPFUzMTQ5PjxVMzE1Mz48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkVPTEIKKzxVQ0E1OD4gIjxVMzE0OT48VTMxNTM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFT0xTCis8VUNBNTk+ICI8VTMxNDk+PFUzMTUzPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRU9MVAorPFVDQTVBPiAiPFUzMTQ5PjxVMzE1Mz48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkVPTFAKKzxVQ0E1Qj4gIjxVMzE0OT48VTMxNTM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFT0xICis8VUNBNUM+ICI8VTMxNDk+PFUzMTUzPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRU9NCis8VUNBNUQ+ICI8VTMxNDk+PFUzMTUzPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRU9CCis8VUNBNUU+ICI8VTMxNDk+PFUzMTUzPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRU9CUworPFVDQTVGPiAiPFUzMTQ5PjxVMzE1Mz48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkVPUworPFVDQTYwPiAiPFUzMTQ5PjxVMzE1Mz48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkVPU1MKKzxVQ0E2MT4gIjxVMzE0OT48VTMxNTM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFT05HCis8VUNBNjI+ICI8VTMxNDk+PFUzMTUzPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRU9KCis8VUNBNjM+ICI8VTMxNDk+PFUzMTUzPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRU9DCis8VUNBNjQ+ICI8VTMxNDk+PFUzMTUzPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRU9LCis8VUNBNjU+ICI8VTMxNDk+PFUzMTUzPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRU9UCis8VUNBNjY+ICI8VTMxNDk+PFUzMTUzPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRU9QCis8VUNBNjc+ICI8VTMxNDk+PFUzMTUzPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRU9ICis8VUNBNjg+ICI8VTMxNDk+PFUzMTU0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFCis8VUNBNjk+ICI8VTMxNDk+PFUzMTU0PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRUcKKzxVQ0E2QT4gIjxVMzE0OT48VTMxNTQ+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFR0cKKzxVQ0E2Qj4gIjxVMzE0OT48VTMxNTQ+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFR1MKKzxVQ0E2Qz4gIjxVMzE0OT48VTMxNTQ+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFTgorPFVDQTZEPiAiPFUzMTQ5PjxVMzE1ND48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkVOSQorPFVDQTZFPiAiPFUzMTQ5PjxVMzE1ND48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkVOSAorPFVDQTZGPiAiPFUzMTQ5PjxVMzE1ND48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkVECis8VUNBNzA+ICI8VTMxNDk+PFUzMTU0PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRUwKKzxVQ0E3MT4gIjxVMzE0OT48VTMxNTQ+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFTEcKKzxVQ0E3Mj4gIjxVMzE0OT48VTMxNTQ+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFTE0KKzxVQ0E3Mz4gIjxVMzE0OT48VTMxNTQ+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFTEIKKzxVQ0E3ND4gIjxVMzE0OT48VTMxNTQ+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFTFMKKzxVQ0E3NT4gIjxVMzE0OT48VTMxNTQ+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFTFQKKzxVQ0E3Nj4gIjxVMzE0OT48VTMxNTQ+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFTFAKKzxVQ0E3Nz4gIjxVMzE0OT48VTMxNTQ+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFTEgKKzxVQ0E3OD4gIjxVMzE0OT48VTMxNTQ+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFTQorPFVDQTc5PiAiPFUzMTQ5PjxVMzE1ND48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkVCCis8VUNBN0E+ICI8VTMxNDk+PFUzMTU0PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRUJTCis8VUNBN0I+ICI8VTMxNDk+PFUzMTU0PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRVMKKzxVQ0E3Qz4gIjxVMzE0OT48VTMxNTQ+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFU1MKKzxVQ0E3RD4gIjxVMzE0OT48VTMxNTQ+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFTkcKKzxVQ0E3RT4gIjxVMzE0OT48VTMxNTQ+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFSgorPFVDQTdGPiAiPFUzMTQ5PjxVMzE1ND48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkVDCis8VUNBODA+ICI8VTMxNDk+PFUzMTU0PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRUsKKzxVQ0E4MT4gIjxVMzE0OT48VTMxNTQ+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFVAorPFVDQTgyPiAiPFUzMTQ5PjxVMzE1ND48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkVQCis8VUNBODM+ICI8VTMxNDk+PFUzMTU0PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRUgKKzxVQ0E4ND4gIjxVMzE0OT48VTMxNTU+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllFTworPFVDQTg1PiAiPFUzMTQ5PjxVMzE1NT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllFT0cKKzxVQ0E4Nj4gIjxVMzE0OT48VTMxNTU+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZRU9HRworPFVDQTg3PiAiPFUzMTQ5PjxVMzE1NT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllFT0dTCis8VUNBODg+ICI8VTMxNDk+PFUzMTU1PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUVPTgorPFVDQTg5PiAiPFUzMTQ5PjxVMzE1NT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllFT05JCis8VUNBOEE+ICI8VTMxNDk+PFUzMTU1PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUVPTkgKKzxVQ0E4Qj4gIjxVMzE0OT48VTMxNTU+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZRU9ECis8VUNBOEM+ICI8VTMxNDk+PFUzMTU1PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUVPTAorPFVDQThEPiAiPFUzMTQ5PjxVMzE1NT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllFT0xHCis8VUNBOEU+ICI8VTMxNDk+PFUzMTU1PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUVPTE0KKzxVQ0E4Rj4gIjxVMzE0OT48VTMxNTU+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZRU9MQgorPFVDQTkwPiAiPFUzMTQ5PjxVMzE1NT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllFT0xTCis8VUNBOTE+ICI8VTMxNDk+PFUzMTU1PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUVPTFQKKzxVQ0E5Mj4gIjxVMzE0OT48VTMxNTU+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZRU9MUAorPFVDQTkzPiAiPFUzMTQ5PjxVMzE1NT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllFT0xICis8VUNBOTQ+ICI8VTMxNDk+PFUzMTU1PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUVPTQorPFVDQTk1PiAiPFUzMTQ5PjxVMzE1NT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllFT0IKKzxVQ0E5Nj4gIjxVMzE0OT48VTMxNTU+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZRU9CUworPFVDQTk3PiAiPFUzMTQ5PjxVMzE1NT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllFT1MKKzxVQ0E5OD4gIjxVMzE0OT48VTMxNTU+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZRU9TUworPFVDQTk5PiAiPFUzMTQ5PjxVMzE1NT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllFT05HCis8VUNBOUE+ICI8VTMxNDk+PFUzMTU1PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUVPSgorPFVDQTlCPiAiPFUzMTQ5PjxVMzE1NT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllFT0MKKzxVQ0E5Qz4gIjxVMzE0OT48VTMxNTU+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZRU9LCis8VUNBOUQ+ICI8VTMxNDk+PFUzMTU1PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUVPVAorPFVDQTlFPiAiPFUzMTQ5PjxVMzE1NT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllFT1AKKzxVQ0E5Rj4gIjxVMzE0OT48VTMxNTU+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZRU9ICis8VUNBQTA+ICI8VTMxNDk+PFUzMTU2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZRQorPFVDQUExPiAiPFUzMTQ5PjxVMzE1Nj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllFRworPFVDQUEyPiAiPFUzMTQ5PjxVMzE1Nj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllFR0cKKzxVQ0FBMz4gIjxVMzE0OT48VTMxNTY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZRUdTCis8VUNBQTQ+ICI8VTMxNDk+PFUzMTU2PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUVOCis8VUNBQTU+ICI8VTMxNDk+PFUzMTU2PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUVOSQorPFVDQUE2PiAiPFUzMTQ5PjxVMzE1Nj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllFTkgKKzxVQ0FBNz4gIjxVMzE0OT48VTMxNTY+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZRUQKKzxVQ0FBOD4gIjxVMzE0OT48VTMxNTY+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZRUwKKzxVQ0FBOT4gIjxVMzE0OT48VTMxNTY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZRUxHCis8VUNBQUE+ICI8VTMxNDk+PFUzMTU2PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUVMTQorPFVDQUFCPiAiPFUzMTQ5PjxVMzE1Nj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllFTEIKKzxVQ0FBQz4gIjxVMzE0OT48VTMxNTY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZRUxTCis8VUNBQUQ+ICI8VTMxNDk+PFUzMTU2PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUVMVAorPFVDQUFFPiAiPFUzMTQ5PjxVMzE1Nj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllFTFAKKzxVQ0FBRj4gIjxVMzE0OT48VTMxNTY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZRUxICis8VUNBQjA+ICI8VTMxNDk+PFUzMTU2PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUVNCis8VUNBQjE+ICI8VTMxNDk+PFUzMTU2PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUVCCis8VUNBQjI+ICI8VTMxNDk+PFUzMTU2PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUVCUworPFVDQUIzPiAiPFUzMTQ5PjxVMzE1Nj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllFUworPFVDQUI0PiAiPFUzMTQ5PjxVMzE1Nj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllFU1MKKzxVQ0FCNT4gIjxVMzE0OT48VTMxNTY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZRU5HCis8VUNBQjY+ICI8VTMxNDk+PFUzMTU2PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUVKCis8VUNBQjc+ICI8VTMxNDk+PFUzMTU2PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUVDCis8VUNBQjg+ICI8VTMxNDk+PFUzMTU2PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUVLCis8VUNBQjk+ICI8VTMxNDk+PFUzMTU2PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUVUCis8VUNBQkE+ICI8VTMxNDk+PFUzMTU2PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUVQCis8VUNBQkI+ICI8VTMxNDk+PFUzMTU2PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUVICis8VUNBQkM+ICI8VTMxNDk+PFUzMTU3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpPCis8VUNBQkQ+ICI8VTMxNDk+PFUzMTU3PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKT0cKKzxVQ0FCRT4gIjxVMzE0OT48VTMxNTc+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpPR0cKKzxVQ0FCRj4gIjxVMzE0OT48VTMxNTc+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpPR1MKKzxVQ0FDMD4gIjxVMzE0OT48VTMxNTc+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpPTgorPFVDQUMxPiAiPFUzMTQ5PjxVMzE1Nz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBKSk9OSQorPFVDQUMyPiAiPFUzMTQ5PjxVMzE1Nz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBKSk9OSAorPFVDQUMzPiAiPFUzMTQ5PjxVMzE1Nz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBKSk9ECis8VUNBQzQ+ICI8VTMxNDk+PFUzMTU3PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKT0wKKzxVQ0FDNT4gIjxVMzE0OT48VTMxNTc+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpPTEcKKzxVQ0FDNj4gIjxVMzE0OT48VTMxNTc+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpPTE0KKzxVQ0FDNz4gIjxVMzE0OT48VTMxNTc+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpPTEIKKzxVQ0FDOD4gIjxVMzE0OT48VTMxNTc+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpPTFMKKzxVQ0FDOT4gIjxVMzE0OT48VTMxNTc+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpPTFQKKzxVQ0FDQT4gIjxVMzE0OT48VTMxNTc+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpPTFAKKzxVQ0FDQj4gIjxVMzE0OT48VTMxNTc+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpPTEgKKzxVQ0FDQz4gIjxVMzE0OT48VTMxNTc+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpPTQorPFVDQUNEPiAiPFUzMTQ5PjxVMzE1Nz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBKSk9CCis8VUNBQ0U+ICI8VTMxNDk+PFUzMTU3PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKT0JTCis8VUNBQ0Y+ICI8VTMxNDk+PFUzMTU3PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKT1MKKzxVQ0FEMD4gIjxVMzE0OT48VTMxNTc+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpPU1MKKzxVQ0FEMT4gIjxVMzE0OT48VTMxNTc+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpPTkcKKzxVQ0FEMj4gIjxVMzE0OT48VTMxNTc+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpPSgorPFVDQUQzPiAiPFUzMTQ5PjxVMzE1Nz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBKSk9DCis8VUNBRDQ+ICI8VTMxNDk+PFUzMTU3PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKT0sKKzxVQ0FENT4gIjxVMzE0OT48VTMxNTc+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpPVAorPFVDQUQ2PiAiPFUzMTQ5PjxVMzE1Nz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKSk9QCis8VUNBRDc+ICI8VTMxNDk+PFUzMTU3PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKT0gKKzxVQ0FEOD4gIjxVMzE0OT48VTMxNTg+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldBCis8VUNBRDk+ICI8VTMxNDk+PFUzMTU4PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0FHCis8VUNBREE+ICI8VTMxNDk+PFUzMTU4PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0FHRworPFVDQURCPiAiPFUzMTQ5PjxVMzE1OD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldBR1MKKzxVQ0FEQz4gIjxVMzE0OT48VTMxNTg+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXQU4KKzxVQ0FERD4gIjxVMzE0OT48VTMxNTg+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXQU5JCis8VUNBREU+ICI8VTMxNDk+PFUzMTU4PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0FOSAorPFVDQURGPiAiPFUzMTQ5PjxVMzE1OD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldBRAorPFVDQUUwPiAiPFUzMTQ5PjxVMzE1OD48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldBTAorPFVDQUUxPiAiPFUzMTQ5PjxVMzE1OD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldBTEcKKzxVQ0FFMj4gIjxVMzE0OT48VTMxNTg+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXQUxNCis8VUNBRTM+ICI8VTMxNDk+PFUzMTU4PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0FMQgorPFVDQUU0PiAiPFUzMTQ5PjxVMzE1OD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldBTFMKKzxVQ0FFNT4gIjxVMzE0OT48VTMxNTg+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXQUxUCis8VUNBRTY+ICI8VTMxNDk+PFUzMTU4PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0FMUAorPFVDQUU3PiAiPFUzMTQ5PjxVMzE1OD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldBTEgKKzxVQ0FFOD4gIjxVMzE0OT48VTMxNTg+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXQU0KKzxVQ0FFOT4gIjxVMzE0OT48VTMxNTg+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXQUIKKzxVQ0FFQT4gIjxVMzE0OT48VTMxNTg+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXQUJTCis8VUNBRUI+ICI8VTMxNDk+PFUzMTU4PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0FTCis8VUNBRUM+ICI8VTMxNDk+PFUzMTU4PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0FTUworPFVDQUVEPiAiPFUzMTQ5PjxVMzE1OD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldBTkcKKzxVQ0FFRT4gIjxVMzE0OT48VTMxNTg+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXQUoKKzxVQ0FFRj4gIjxVMzE0OT48VTMxNTg+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXQUMKKzxVQ0FGMD4gIjxVMzE0OT48VTMxNTg+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXQUsKKzxVQ0FGMT4gIjxVMzE0OT48VTMxNTg+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXQVQKKzxVQ0FGMj4gIjxVMzE0OT48VTMxNTg+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXQVAKKzxVQ0FGMz4gIjxVMzE0OT48VTMxNTg+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXQUgKKzxVQ0FGND4gIjxVMzE0OT48VTMxNTk+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldBRQorPFVDQUY1PiAiPFUzMTQ5PjxVMzE1OT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldBRUcKKzxVQ0FGNj4gIjxVMzE0OT48VTMxNTk+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXQUVHRworPFVDQUY3PiAiPFUzMTQ5PjxVMzE1OT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldBRUdTCis8VUNBRjg+ICI8VTMxNDk+PFUzMTU5PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0FFTgorPFVDQUY5PiAiPFUzMTQ5PjxVMzE1OT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldBRU5JCis8VUNBRkE+ICI8VTMxNDk+PFUzMTU5PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0FFTkgKKzxVQ0FGQj4gIjxVMzE0OT48VTMxNTk+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXQUVECis8VUNBRkM+ICI8VTMxNDk+PFUzMTU5PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0FFTAorPFVDQUZEPiAiPFUzMTQ5PjxVMzE1OT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldBRUxHCis8VUNBRkU+ICI8VTMxNDk+PFUzMTU5PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0FFTE0KKzxVQ0FGRj4gIjxVMzE0OT48VTMxNTk+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXQUVMQgorPFVDQjAwPiAiPFUzMTQ5PjxVMzE1OT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldBRUxTCis8VUNCMDE+ICI8VTMxNDk+PFUzMTU5PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0FFTFQKKzxVQ0IwMj4gIjxVMzE0OT48VTMxNTk+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXQUVMUAorPFVDQjAzPiAiPFUzMTQ5PjxVMzE1OT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldBRUxICis8VUNCMDQ+ICI8VTMxNDk+PFUzMTU5PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0FFTQorPFVDQjA1PiAiPFUzMTQ5PjxVMzE1OT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldBRUIKKzxVQ0IwNj4gIjxVMzE0OT48VTMxNTk+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXQUVCUworPFVDQjA3PiAiPFUzMTQ5PjxVMzE1OT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldBRVMKKzxVQ0IwOD4gIjxVMzE0OT48VTMxNTk+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXQUVTUworPFVDQjA5PiAiPFUzMTQ5PjxVMzE1OT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldBRU5HCis8VUNCMEE+ICI8VTMxNDk+PFUzMTU5PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0FFSgorPFVDQjBCPiAiPFUzMTQ5PjxVMzE1OT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldBRUMKKzxVQ0IwQz4gIjxVMzE0OT48VTMxNTk+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXQUVLCis8VUNCMEQ+ICI8VTMxNDk+PFUzMTU5PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0FFVAorPFVDQjBFPiAiPFUzMTQ5PjxVMzE1OT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldBRVAKKzxVQ0IwRj4gIjxVMzE0OT48VTMxNTk+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXQUVICis8VUNCMTA+ICI8VTMxNDk+PFUzMTVBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpPRQorPFVDQjExPiAiPFUzMTQ5PjxVMzE1QT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBKSk9FRworPFVDQjEyPiAiPFUzMTQ5PjxVMzE1QT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBKSk9FR0cKKzxVQ0IxMz4gIjxVMzE0OT48VTMxNUE+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpPRUdTCis8VUNCMTQ+ICI8VTMxNDk+PFUzMTVBPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKT0VOCis8VUNCMTU+ICI8VTMxNDk+PFUzMTVBPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKT0VOSQorPFVDQjE2PiAiPFUzMTQ5PjxVMzE1QT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBKSk9FTkgKKzxVQ0IxNz4gIjxVMzE0OT48VTMxNUE+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpPRUQKKzxVQ0IxOD4gIjxVMzE0OT48VTMxNUE+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpPRUwKKzxVQ0IxOT4gIjxVMzE0OT48VTMxNUE+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpPRUxHCis8VUNCMUE+ICI8VTMxNDk+PFUzMTVBPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKT0VMTQorPFVDQjFCPiAiPFUzMTQ5PjxVMzE1QT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBKSk9FTEIKKzxVQ0IxQz4gIjxVMzE0OT48VTMxNUE+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpPRUxTCis8VUNCMUQ+ICI8VTMxNDk+PFUzMTVBPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKT0VMVAorPFVDQjFFPiAiPFUzMTQ5PjxVMzE1QT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBKSk9FTFAKKzxVQ0IxRj4gIjxVMzE0OT48VTMxNUE+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpPRUxICis8VUNCMjA+ICI8VTMxNDk+PFUzMTVBPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKT0VNCis8VUNCMjE+ICI8VTMxNDk+PFUzMTVBPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKT0VCCis8VUNCMjI+ICI8VTMxNDk+PFUzMTVBPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKT0VCUworPFVDQjIzPiAiPFUzMTQ5PjxVMzE1QT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBKSk9FUworPFVDQjI0PiAiPFUzMTQ5PjxVMzE1QT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBKSk9FU1MKKzxVQ0IyNT4gIjxVMzE0OT48VTMxNUE+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpPRU5HCis8VUNCMjY+ICI8VTMxNDk+PFUzMTVBPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEpKT0VKCis8VUNCMjc+ICI8VTMxNDk+PFUzMTVBPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKT0VDCis8VUNCMjg+ICI8VTMxNDk+PFUzMTVBPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKT0VLCis8VUNCMjk+ICI8VTMxNDk+PFUzMTVBPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEpKT0VUCis8VUNCMkE+ICI8VTMxNDk+PFUzMTVBPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEpKT0VQCis8VUNCMkI+ICI8VTMxNDk+PFUzMTVBPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKT0VICis8VUNCMkM+ICI8VTMxNDk+PFUzMTVCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZTworPFVDQjJEPiAiPFUzMTQ5PjxVMzE1Qj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllPRworPFVDQjJFPiAiPFUzMTQ5PjxVMzE1Qj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllPR0cKKzxVQ0IyRj4gIjxVMzE0OT48VTMxNUI+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZT0dTCis8VUNCMzA+ICI8VTMxNDk+PFUzMTVCPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWU9OCis8VUNCMzE+ICI8VTMxNDk+PFUzMTVCPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWU9OSQorPFVDQjMyPiAiPFUzMTQ5PjxVMzE1Qj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllPTkgKKzxVQ0IzMz4gIjxVMzE0OT48VTMxNUI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZT0QKKzxVQ0IzND4gIjxVMzE0OT48VTMxNUI+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZT0wKKzxVQ0IzNT4gIjxVMzE0OT48VTMxNUI+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZT0xHCis8VUNCMzY+ICI8VTMxNDk+PFUzMTVCPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWU9MTQorPFVDQjM3PiAiPFUzMTQ5PjxVMzE1Qj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllPTEIKKzxVQ0IzOD4gIjxVMzE0OT48VTMxNUI+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZT0xTCis8VUNCMzk+ICI8VTMxNDk+PFUzMTVCPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWU9MVAorPFVDQjNBPiAiPFUzMTQ5PjxVMzE1Qj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllPTFAKKzxVQ0IzQj4gIjxVMzE0OT48VTMxNUI+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZT0xICis8VUNCM0M+ICI8VTMxNDk+PFUzMTVCPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWU9NCis8VUNCM0Q+ICI8VTMxNDk+PFUzMTVCPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWU9CCis8VUNCM0U+ICI8VTMxNDk+PFUzMTVCPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWU9CUworPFVDQjNGPiAiPFUzMTQ5PjxVMzE1Qj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllPUworPFVDQjQwPiAiPFUzMTQ5PjxVMzE1Qj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllPU1MKKzxVQ0I0MT4gIjxVMzE0OT48VTMxNUI+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZT05HCis8VUNCNDI+ICI8VTMxNDk+PFUzMTVCPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWU9KCis8VUNCNDM+ICI8VTMxNDk+PFUzMTVCPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWU9DCis8VUNCNDQ+ICI8VTMxNDk+PFUzMTVCPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWU9LCis8VUNCNDU+ICI8VTMxNDk+PFUzMTVCPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWU9UCis8VUNCNDY+ICI8VTMxNDk+PFUzMTVCPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWU9QCis8VUNCNDc+ICI8VTMxNDk+PFUzMTVCPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWU9ICis8VUNCNDg+ICI8VTMxNDk+PFUzMTVDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpVCis8VUNCNDk+ICI8VTMxNDk+PFUzMTVDPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKVUcKKzxVQ0I0QT4gIjxVMzE0OT48VTMxNUM+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpVR0cKKzxVQ0I0Qj4gIjxVMzE0OT48VTMxNUM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpVR1MKKzxVQ0I0Qz4gIjxVMzE0OT48VTMxNUM+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpVTgorPFVDQjREPiAiPFUzMTQ5PjxVMzE1Qz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBKSlVOSQorPFVDQjRFPiAiPFUzMTQ5PjxVMzE1Qz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBKSlVOSAorPFVDQjRGPiAiPFUzMTQ5PjxVMzE1Qz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBKSlVECis8VUNCNTA+ICI8VTMxNDk+PFUzMTVDPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKVUwKKzxVQ0I1MT4gIjxVMzE0OT48VTMxNUM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpVTEcKKzxVQ0I1Mj4gIjxVMzE0OT48VTMxNUM+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpVTE0KKzxVQ0I1Mz4gIjxVMzE0OT48VTMxNUM+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpVTEIKKzxVQ0I1ND4gIjxVMzE0OT48VTMxNUM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpVTFMKKzxVQ0I1NT4gIjxVMzE0OT48VTMxNUM+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpVTFQKKzxVQ0I1Nj4gIjxVMzE0OT48VTMxNUM+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpVTFAKKzxVQ0I1Nz4gIjxVMzE0OT48VTMxNUM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpVTEgKKzxVQ0I1OD4gIjxVMzE0OT48VTMxNUM+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpVTQorPFVDQjU5PiAiPFUzMTQ5PjxVMzE1Qz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBKSlVCCis8VUNCNUE+ICI8VTMxNDk+PFUzMTVDPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKVUJTCis8VUNCNUI+ICI8VTMxNDk+PFUzMTVDPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKVVMKKzxVQ0I1Qz4gIjxVMzE0OT48VTMxNUM+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpVU1MKKzxVQ0I1RD4gIjxVMzE0OT48VTMxNUM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpVTkcKKzxVQ0I1RT4gIjxVMzE0OT48VTMxNUM+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpVSgorPFVDQjVGPiAiPFUzMTQ5PjxVMzE1Qz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBKSlVDCis8VUNCNjA+ICI8VTMxNDk+PFUzMTVDPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKVUsKKzxVQ0I2MT4gIjxVMzE0OT48VTMxNUM+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpVVAorPFVDQjYyPiAiPFUzMTQ5PjxVMzE1Qz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKSlVQCis8VUNCNjM+ICI8VTMxNDk+PFUzMTVDPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKVUgKKzxVQ0I2ND4gIjxVMzE0OT48VTMxNUQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldFTworPFVDQjY1PiAiPFUzMTQ5PjxVMzE1RD48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldFT0cKKzxVQ0I2Nj4gIjxVMzE0OT48VTMxNUQ+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXRU9HRworPFVDQjY3PiAiPFUzMTQ5PjxVMzE1RD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldFT0dTCis8VUNCNjg+ICI8VTMxNDk+PFUzMTVEPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0VPTgorPFVDQjY5PiAiPFUzMTQ5PjxVMzE1RD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldFT05JCis8VUNCNkE+ICI8VTMxNDk+PFUzMTVEPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0VPTkgKKzxVQ0I2Qj4gIjxVMzE0OT48VTMxNUQ+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXRU9ECis8VUNCNkM+ICI8VTMxNDk+PFUzMTVEPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0VPTAorPFVDQjZEPiAiPFUzMTQ5PjxVMzE1RD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldFT0xHCis8VUNCNkU+ICI8VTMxNDk+PFUzMTVEPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0VPTE0KKzxVQ0I2Rj4gIjxVMzE0OT48VTMxNUQ+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXRU9MQgorPFVDQjcwPiAiPFUzMTQ5PjxVMzE1RD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldFT0xTCis8VUNCNzE+ICI8VTMxNDk+PFUzMTVEPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0VPTFQKKzxVQ0I3Mj4gIjxVMzE0OT48VTMxNUQ+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXRU9MUAorPFVDQjczPiAiPFUzMTQ5PjxVMzE1RD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldFT0xICis8VUNCNzQ+ICI8VTMxNDk+PFUzMTVEPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0VPTQorPFVDQjc1PiAiPFUzMTQ5PjxVMzE1RD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldFT0IKKzxVQ0I3Nj4gIjxVMzE0OT48VTMxNUQ+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXRU9CUworPFVDQjc3PiAiPFUzMTQ5PjxVMzE1RD48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldFT1MKKzxVQ0I3OD4gIjxVMzE0OT48VTMxNUQ+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXRU9TUworPFVDQjc5PiAiPFUzMTQ5PjxVMzE1RD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldFT05HCis8VUNCN0E+ICI8VTMxNDk+PFUzMTVEPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0VPSgorPFVDQjdCPiAiPFUzMTQ5PjxVMzE1RD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldFT0MKKzxVQ0I3Qz4gIjxVMzE0OT48VTMxNUQ+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXRU9LCis8VUNCN0Q+ICI8VTMxNDk+PFUzMTVEPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0VPVAorPFVDQjdFPiAiPFUzMTQ5PjxVMzE1RD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldFT1AKKzxVQ0I3Rj4gIjxVMzE0OT48VTMxNUQ+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXRU9ICis8VUNCODA+ICI8VTMxNDk+PFUzMTVFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXRQorPFVDQjgxPiAiPFUzMTQ5PjxVMzE1RT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldFRworPFVDQjgyPiAiPFUzMTQ5PjxVMzE1RT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldFR0cKKzxVQ0I4Mz4gIjxVMzE0OT48VTMxNUU+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXRUdTCis8VUNCODQ+ICI8VTMxNDk+PFUzMTVFPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0VOCis8VUNCODU+ICI8VTMxNDk+PFUzMTVFPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0VOSQorPFVDQjg2PiAiPFUzMTQ5PjxVMzE1RT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldFTkgKKzxVQ0I4Nz4gIjxVMzE0OT48VTMxNUU+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXRUQKKzxVQ0I4OD4gIjxVMzE0OT48VTMxNUU+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXRUwKKzxVQ0I4OT4gIjxVMzE0OT48VTMxNUU+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXRUxHCis8VUNCOEE+ICI8VTMxNDk+PFUzMTVFPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0VMTQorPFVDQjhCPiAiPFUzMTQ5PjxVMzE1RT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldFTEIKKzxVQ0I4Qz4gIjxVMzE0OT48VTMxNUU+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXRUxTCis8VUNCOEQ+ICI8VTMxNDk+PFUzMTVFPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0VMVAorPFVDQjhFPiAiPFUzMTQ5PjxVMzE1RT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldFTFAKKzxVQ0I4Rj4gIjxVMzE0OT48VTMxNUU+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXRUxICis8VUNCOTA+ICI8VTMxNDk+PFUzMTVFPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0VNCis8VUNCOTE+ICI8VTMxNDk+PFUzMTVFPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0VCCis8VUNCOTI+ICI8VTMxNDk+PFUzMTVFPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0VCUworPFVDQjkzPiAiPFUzMTQ5PjxVMzE1RT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldFUworPFVDQjk0PiAiPFUzMTQ5PjxVMzE1RT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldFU1MKKzxVQ0I5NT4gIjxVMzE0OT48VTMxNUU+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXRU5HCis8VUNCOTY+ICI8VTMxNDk+PFUzMTVFPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0VKCis8VUNCOTc+ICI8VTMxNDk+PFUzMTVFPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0VDCis8VUNCOTg+ICI8VTMxNDk+PFUzMTVFPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0VLCis8VUNCOTk+ICI8VTMxNDk+PFUzMTVFPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0VUCis8VUNCOUE+ICI8VTMxNDk+PFUzMTVFPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0VQCis8VUNCOUI+ICI8VTMxNDk+PFUzMTVFPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0VICis8VUNCOUM+ICI8VTMxNDk+PFUzMTVGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXSQorPFVDQjlEPiAiPFUzMTQ5PjxVMzE1Rj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldJRworPFVDQjlFPiAiPFUzMTQ5PjxVMzE1Rj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldJR0cKKzxVQ0I5Rj4gIjxVMzE0OT48VTMxNUY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXSUdTCis8VUNCQTA+ICI8VTMxNDk+PFUzMTVGPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0lOCis8VUNCQTE+ICI8VTMxNDk+PFUzMTVGPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0lOSQorPFVDQkEyPiAiPFUzMTQ5PjxVMzE1Rj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldJTkgKKzxVQ0JBMz4gIjxVMzE0OT48VTMxNUY+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXSUQKKzxVQ0JBND4gIjxVMzE0OT48VTMxNUY+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXSUwKKzxVQ0JBNT4gIjxVMzE0OT48VTMxNUY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXSUxHCis8VUNCQTY+ICI8VTMxNDk+PFUzMTVGPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0lMTQorPFVDQkE3PiAiPFUzMTQ5PjxVMzE1Rj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldJTEIKKzxVQ0JBOD4gIjxVMzE0OT48VTMxNUY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXSUxTCis8VUNCQTk+ICI8VTMxNDk+PFUzMTVGPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0lMVAorPFVDQkFBPiAiPFUzMTQ5PjxVMzE1Rj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldJTFAKKzxVQ0JBQj4gIjxVMzE0OT48VTMxNUY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXSUxICis8VUNCQUM+ICI8VTMxNDk+PFUzMTVGPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0lNCis8VUNCQUQ+ICI8VTMxNDk+PFUzMTVGPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0lCCis8VUNCQUU+ICI8VTMxNDk+PFUzMTVGPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0lCUworPFVDQkFGPiAiPFUzMTQ5PjxVMzE1Rj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldJUworPFVDQkIwPiAiPFUzMTQ5PjxVMzE1Rj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBKSldJU1MKKzxVQ0JCMT4gIjxVMzE0OT48VTMxNUY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpXSU5HCis8VUNCQjI+ICI8VTMxNDk+PFUzMTVGPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0lKCis8VUNCQjM+ICI8VTMxNDk+PFUzMTVGPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0lDCis8VUNCQjQ+ICI8VTMxNDk+PFUzMTVGPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0lLCis8VUNCQjU+ICI8VTMxNDk+PFUzMTVGPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0lUCis8VUNCQjY+ICI8VTMxNDk+PFUzMTVGPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0lQCis8VUNCQjc+ICI8VTMxNDk+PFUzMTVGPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKV0lICis8VUNCQjg+ICI8VTMxNDk+PFUzMTYwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZVQorPFVDQkI5PiAiPFUzMTQ5PjxVMzE2MD48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllVRworPFVDQkJBPiAiPFUzMTQ5PjxVMzE2MD48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllVR0cKKzxVQ0JCQj4gIjxVMzE0OT48VTMxNjA+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZVUdTCis8VUNCQkM+ICI8VTMxNDk+PFUzMTYwPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWVVOCis8VUNCQkQ+ICI8VTMxNDk+PFUzMTYwPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWVVOSQorPFVDQkJFPiAiPFUzMTQ5PjxVMzE2MD48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllVTkgKKzxVQ0JCRj4gIjxVMzE0OT48VTMxNjA+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZVUQKKzxVQ0JDMD4gIjxVMzE0OT48VTMxNjA+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZVUwKKzxVQ0JDMT4gIjxVMzE0OT48VTMxNjA+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZVUxHCis8VUNCQzI+ICI8VTMxNDk+PFUzMTYwPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWVVMTQorPFVDQkMzPiAiPFUzMTQ5PjxVMzE2MD48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllVTEIKKzxVQ0JDND4gIjxVMzE0OT48VTMxNjA+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZVUxTCis8VUNCQzU+ICI8VTMxNDk+PFUzMTYwPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWVVMVAorPFVDQkM2PiAiPFUzMTQ5PjxVMzE2MD48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllVTFAKKzxVQ0JDNz4gIjxVMzE0OT48VTMxNjA+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZVUxICis8VUNCQzg+ICI8VTMxNDk+PFUzMTYwPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWVVNCis8VUNCQzk+ICI8VTMxNDk+PFUzMTYwPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWVVCCis8VUNCQ0E+ICI8VTMxNDk+PFUzMTYwPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWVVCUworPFVDQkNCPiAiPFUzMTQ5PjxVMzE2MD48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllVUworPFVDQkNDPiAiPFUzMTQ5PjxVMzE2MD48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllVU1MKKzxVQ0JDRD4gIjxVMzE0OT48VTMxNjA+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZVU5HCis8VUNCQ0U+ICI8VTMxNDk+PFUzMTYwPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWVVKCis8VUNCQ0Y+ICI8VTMxNDk+PFUzMTYwPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWVVDCis8VUNCRDA+ICI8VTMxNDk+PFUzMTYwPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWVVLCis8VUNCRDE+ICI8VTMxNDk+PFUzMTYwPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWVVUCis8VUNCRDI+ICI8VTMxNDk+PFUzMTYwPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWVVQCis8VUNCRDM+ICI8VTMxNDk+PFUzMTYwPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWVVICis8VUNCRDQ+ICI8VTMxNDk+PFUzMTYxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFVQorPFVDQkQ1PiAiPFUzMTQ5PjxVMzE2MT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkVVRworPFVDQkQ2PiAiPFUzMTQ5PjxVMzE2MT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkVVR0cKKzxVQ0JENz4gIjxVMzE0OT48VTMxNjE+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFVUdTCis8VUNCRDg+ICI8VTMxNDk+PFUzMTYxPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRVVOCis8VUNCRDk+ICI8VTMxNDk+PFUzMTYxPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRVVOSQorPFVDQkRBPiAiPFUzMTQ5PjxVMzE2MT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkVVTkgKKzxVQ0JEQj4gIjxVMzE0OT48VTMxNjE+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFVUQKKzxVQ0JEQz4gIjxVMzE0OT48VTMxNjE+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFVUwKKzxVQ0JERD4gIjxVMzE0OT48VTMxNjE+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFVUxHCis8VUNCREU+ICI8VTMxNDk+PFUzMTYxPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRVVMTQorPFVDQkRGPiAiPFUzMTQ5PjxVMzE2MT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkVVTEIKKzxVQ0JFMD4gIjxVMzE0OT48VTMxNjE+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFVUxTCis8VUNCRTE+ICI8VTMxNDk+PFUzMTYxPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRVVMVAorPFVDQkUyPiAiPFUzMTQ5PjxVMzE2MT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkVVTFAKKzxVQ0JFMz4gIjxVMzE0OT48VTMxNjE+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFVUxICis8VUNCRTQ+ICI8VTMxNDk+PFUzMTYxPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRVVNCis8VUNCRTU+ICI8VTMxNDk+PFUzMTYxPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRVVCCis8VUNCRTY+ICI8VTMxNDk+PFUzMTYxPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRVVCUworPFVDQkU3PiAiPFUzMTQ5PjxVMzE2MT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkVVUworPFVDQkU4PiAiPFUzMTQ5PjxVMzE2MT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBKSkVVU1MKKzxVQ0JFOT4gIjxVMzE0OT48VTMxNjE+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpFVU5HCis8VUNCRUE+ICI8VTMxNDk+PFUzMTYxPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRVVKCis8VUNCRUI+ICI8VTMxNDk+PFUzMTYxPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRVVDCis8VUNCRUM+ICI8VTMxNDk+PFUzMTYxPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRVVLCis8VUNCRUQ+ICI8VTMxNDk+PFUzMTYxPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRVVUCis8VUNCRUU+ICI8VTMxNDk+PFUzMTYxPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRVVQCis8VUNCRUY+ICI8VTMxNDk+PFUzMTYxPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKRVVICis8VUNCRjA+ICI8VTMxNDk+PFUzMTYyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZSQorPFVDQkYxPiAiPFUzMTQ5PjxVMzE2Mj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllJRworPFVDQkYyPiAiPFUzMTQ5PjxVMzE2Mj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllJR0cKKzxVQ0JGMz4gIjxVMzE0OT48VTMxNjI+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZSUdTCis8VUNCRjQ+ICI8VTMxNDk+PFUzMTYyPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUlOCis8VUNCRjU+ICI8VTMxNDk+PFUzMTYyPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUlOSQorPFVDQkY2PiAiPFUzMTQ5PjxVMzE2Mj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllJTkgKKzxVQ0JGNz4gIjxVMzE0OT48VTMxNjI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZSUQKKzxVQ0JGOD4gIjxVMzE0OT48VTMxNjI+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZSUwKKzxVQ0JGOT4gIjxVMzE0OT48VTMxNjI+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZSUxHCis8VUNCRkE+ICI8VTMxNDk+PFUzMTYyPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUlMTQorPFVDQkZCPiAiPFUzMTQ5PjxVMzE2Mj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllJTEIKKzxVQ0JGQz4gIjxVMzE0OT48VTMxNjI+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZSUxTCis8VUNCRkQ+ICI8VTMxNDk+PFUzMTYyPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUlMVAorPFVDQkZFPiAiPFUzMTQ5PjxVMzE2Mj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllJTFAKKzxVQ0JGRj4gIjxVMzE0OT48VTMxNjI+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZSUxICis8VUNDMDA+ICI8VTMxNDk+PFUzMTYyPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUlNCis8VUNDMDE+ICI8VTMxNDk+PFUzMTYyPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUlCCis8VUNDMDI+ICI8VTMxNDk+PFUzMTYyPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUlCUworPFVDQzAzPiAiPFUzMTQ5PjxVMzE2Mj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllJUworPFVDQzA0PiAiPFUzMTQ5PjxVMzE2Mj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBKSllJU1MKKzxVQ0MwNT4gIjxVMzE0OT48VTMxNjI+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpZSU5HCis8VUNDMDY+ICI8VTMxNDk+PFUzMTYyPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUlKCis8VUNDMDc+ICI8VTMxNDk+PFUzMTYyPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUlDCis8VUNDMDg+ICI8VTMxNDk+PFUzMTYyPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUlLCis8VUNDMDk+ICI8VTMxNDk+PFUzMTYyPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUlUCis8VUNDMEE+ICI8VTMxNDk+PFUzMTYyPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUlQCis8VUNDMEI+ICI8VTMxNDk+PFUzMTYyPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKWUlICis8VUNDMEM+ICI8VTMxNDk+PFUzMTYzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpJCis8VUNDMEQ+ICI8VTMxNDk+PFUzMTYzPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKSUcKKzxVQ0MwRT4gIjxVMzE0OT48VTMxNjM+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpJR0cKKzxVQ0MwRj4gIjxVMzE0OT48VTMxNjM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpJR1MKKzxVQ0MxMD4gIjxVMzE0OT48VTMxNjM+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpJTgorPFVDQzExPiAiPFUzMTQ5PjxVMzE2Mz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBKSklOSQorPFVDQzEyPiAiPFUzMTQ5PjxVMzE2Mz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBKSklOSAorPFVDQzEzPiAiPFUzMTQ5PjxVMzE2Mz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBKSklECis8VUNDMTQ+ICI8VTMxNDk+PFUzMTYzPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKSUwKKzxVQ0MxNT4gIjxVMzE0OT48VTMxNjM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpJTEcKKzxVQ0MxNj4gIjxVMzE0OT48VTMxNjM+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpJTE0KKzxVQ0MxNz4gIjxVMzE0OT48VTMxNjM+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpJTEIKKzxVQ0MxOD4gIjxVMzE0OT48VTMxNjM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpJTFMKKzxVQ0MxOT4gIjxVMzE0OT48VTMxNjM+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpJTFQKKzxVQ0MxQT4gIjxVMzE0OT48VTMxNjM+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpJTFAKKzxVQ0MxQj4gIjxVMzE0OT48VTMxNjM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpJTEgKKzxVQ0MxQz4gIjxVMzE0OT48VTMxNjM+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpJTQorPFVDQzFEPiAiPFUzMTQ5PjxVMzE2Mz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBKSklCCis8VUNDMUU+ICI8VTMxNDk+PFUzMTYzPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEpKSUJTCis8VUNDMUY+ICI8VTMxNDk+PFUzMTYzPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKSVMKKzxVQ0MyMD4gIjxVMzE0OT48VTMxNjM+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpJU1MKKzxVQ0MyMT4gIjxVMzE0OT48VTMxNjM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpJTkcKKzxVQ0MyMj4gIjxVMzE0OT48VTMxNjM+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpJSgorPFVDQzIzPiAiPFUzMTQ5PjxVMzE2Mz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBKSklDCis8VUNDMjQ+ICI8VTMxNDk+PFUzMTYzPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEpKSUsKKzxVQ0MyNT4gIjxVMzE0OT48VTMxNjM+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSkpJVAorPFVDQzI2PiAiPFUzMTQ5PjxVMzE2Mz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBKSklQCis8VUNDMjc+ICI8VTMxNDk+PFUzMTYzPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEpKSUgKKzxVQ0MyOD4gIjxVMzE0QT48VTMxNEY+IgklIEhBTkdVTCBTWUxMQUJMRSBDQQorPFVDQzI5PiAiPFUzMTRBPjxVMzE0Rj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBDQUcKKzxVQ0MyQT4gIjxVMzE0QT48VTMxNEY+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0FHRworPFVDQzJCPiAiPFUzMTRBPjxVMzE0Rj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBDQUdTCis8VUNDMkM+ICI8VTMxNEE+PFUzMTRGPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIENBTgorPFVDQzJEPiAiPFUzMTRBPjxVMzE0Rj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBDQU5JCis8VUNDMkU+ICI8VTMxNEE+PFUzMTRGPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIENBTkgKKzxVQ0MyRj4gIjxVMzE0QT48VTMxNEY+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0FECis8VUNDMzA+ICI8VTMxNEE+PFUzMTRGPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIENBTAorPFVDQzMxPiAiPFUzMTRBPjxVMzE0Rj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBDQUxHCis8VUNDMzI+ICI8VTMxNEE+PFUzMTRGPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIENBTE0KKzxVQ0MzMz4gIjxVMzE0QT48VTMxNEY+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0FMQgorPFVDQzM0PiAiPFUzMTRBPjxVMzE0Rj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBDQUxTCis8VUNDMzU+ICI8VTMxNEE+PFUzMTRGPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIENBTFQKKzxVQ0MzNj4gIjxVMzE0QT48VTMxNEY+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0FMUAorPFVDQzM3PiAiPFUzMTRBPjxVMzE0Rj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBDQUxICis8VUNDMzg+ICI8VTMxNEE+PFUzMTRGPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIENBTQorPFVDQzM5PiAiPFUzMTRBPjxVMzE0Rj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBDQUIKKzxVQ0MzQT4gIjxVMzE0QT48VTMxNEY+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0FCUworPFVDQzNCPiAiPFUzMTRBPjxVMzE0Rj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBDQVMKKzxVQ0MzQz4gIjxVMzE0QT48VTMxNEY+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0FTUworPFVDQzNEPiAiPFUzMTRBPjxVMzE0Rj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBDQU5HCis8VUNDM0U+ICI8VTMxNEE+PFUzMTRGPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIENBSgorPFVDQzNGPiAiPFUzMTRBPjxVMzE0Rj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBDQUMKKzxVQ0M0MD4gIjxVMzE0QT48VTMxNEY+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0FLCis8VUNDNDE+ICI8VTMxNEE+PFUzMTRGPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIENBVAorPFVDQzQyPiAiPFUzMTRBPjxVMzE0Rj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBDQVAKKzxVQ0M0Mz4gIjxVMzE0QT48VTMxNEY+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0FICis8VUNDNDQ+ICI8VTMxNEE+PFUzMTUwPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0FFCis8VUNDNDU+ICI8VTMxNEE+PFUzMTUwPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIENBRUcKKzxVQ0M0Nj4gIjxVMzE0QT48VTMxNTA+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0FFR0cKKzxVQ0M0Nz4gIjxVMzE0QT48VTMxNTA+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0FFR1MKKzxVQ0M0OD4gIjxVMzE0QT48VTMxNTA+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0FFTgorPFVDQzQ5PiAiPFUzMTRBPjxVMzE1MD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBDQUVOSQorPFVDQzRBPiAiPFUzMTRBPjxVMzE1MD48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBDQUVOSAorPFVDQzRCPiAiPFUzMTRBPjxVMzE1MD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBDQUVECis8VUNDNEM+ICI8VTMxNEE+PFUzMTUwPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIENBRUwKKzxVQ0M0RD4gIjxVMzE0QT48VTMxNTA+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0FFTEcKKzxVQ0M0RT4gIjxVMzE0QT48VTMxNTA+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0FFTE0KKzxVQ0M0Rj4gIjxVMzE0QT48VTMxNTA+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0FFTEIKKzxVQ0M1MD4gIjxVMzE0QT48VTMxNTA+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0FFTFMKKzxVQ0M1MT4gIjxVMzE0QT48VTMxNTA+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0FFTFQKKzxVQ0M1Mj4gIjxVMzE0QT48VTMxNTA+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0FFTFAKKzxVQ0M1Mz4gIjxVMzE0QT48VTMxNTA+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0FFTEgKKzxVQ0M1ND4gIjxVMzE0QT48VTMxNTA+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0FFTQorPFVDQzU1PiAiPFUzMTRBPjxVMzE1MD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBDQUVCCis8VUNDNTY+ICI8VTMxNEE+PFUzMTUwPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIENBRUJTCis8VUNDNTc+ICI8VTMxNEE+PFUzMTUwPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIENBRVMKKzxVQ0M1OD4gIjxVMzE0QT48VTMxNTA+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0FFU1MKKzxVQ0M1OT4gIjxVMzE0QT48VTMxNTA+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0FFTkcKKzxVQ0M1QT4gIjxVMzE0QT48VTMxNTA+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0FFSgorPFVDQzVCPiAiPFUzMTRBPjxVMzE1MD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBDQUVDCis8VUNDNUM+ICI8VTMxNEE+PFUzMTUwPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIENBRUsKKzxVQ0M1RD4gIjxVMzE0QT48VTMxNTA+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0FFVAorPFVDQzVFPiAiPFUzMTRBPjxVMzE1MD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBDQUVQCis8VUNDNUY+ICI8VTMxNEE+PFUzMTUwPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIENBRUgKKzxVQ0M2MD4gIjxVMzE0QT48VTMxNTE+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUEKKzxVQ0M2MT4gIjxVMzE0QT48VTMxNTE+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lBRworPFVDQzYyPiAiPFUzMTRBPjxVMzE1MT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFHRworPFVDQzYzPiAiPFUzMTRBPjxVMzE1MT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFHUworPFVDQzY0PiAiPFUzMTRBPjxVMzE1MT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFOCis8VUNDNjU+ICI8VTMxNEE+PFUzMTUxPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIENZQU5JCis8VUNDNjY+ICI8VTMxNEE+PFUzMTUxPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIENZQU5ICis8VUNDNjc+ICI8VTMxNEE+PFUzMTUxPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIENZQUQKKzxVQ0M2OD4gIjxVMzE0QT48VTMxNTE+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lBTAorPFVDQzY5PiAiPFUzMTRBPjxVMzE1MT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFMRworPFVDQzZBPiAiPFUzMTRBPjxVMzE1MT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFMTQorPFVDQzZCPiAiPFUzMTRBPjxVMzE1MT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFMQgorPFVDQzZDPiAiPFUzMTRBPjxVMzE1MT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFMUworPFVDQzZEPiAiPFUzMTRBPjxVMzE1MT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFMVAorPFVDQzZFPiAiPFUzMTRBPjxVMzE1MT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFMUAorPFVDQzZGPiAiPFUzMTRBPjxVMzE1MT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFMSAorPFVDQzcwPiAiPFUzMTRBPjxVMzE1MT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFNCis8VUNDNzE+ICI8VTMxNEE+PFUzMTUxPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIENZQUIKKzxVQ0M3Mj4gIjxVMzE0QT48VTMxNTE+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lBQlMKKzxVQ0M3Mz4gIjxVMzE0QT48VTMxNTE+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lBUworPFVDQzc0PiAiPFUzMTRBPjxVMzE1MT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFTUworPFVDQzc1PiAiPFUzMTRBPjxVMzE1MT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFORworPFVDQzc2PiAiPFUzMTRBPjxVMzE1MT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFKCis8VUNDNzc+ICI8VTMxNEE+PFUzMTUxPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIENZQUMKKzxVQ0M3OD4gIjxVMzE0QT48VTMxNTE+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lBSworPFVDQzc5PiAiPFUzMTRBPjxVMzE1MT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFUCis8VUNDN0E+ICI8VTMxNEE+PFUzMTUxPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIENZQVAKKzxVQ0M3Qj4gIjxVMzE0QT48VTMxNTE+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lBSAorPFVDQzdDPiAiPFUzMTRBPjxVMzE1Mj4iCSUgSEFOR1VMIFNZTExBQkxFIENZQUUKKzxVQ0M3RD4gIjxVMzE0QT48VTMxNTI+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lBRUcKKzxVQ0M3RT4gIjxVMzE0QT48VTMxNTI+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lBRUdHCis8VUNDN0Y+ICI8VTMxNEE+PFUzMTUyPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIENZQUVHUworPFVDQzgwPiAiPFUzMTRBPjxVMzE1Mj48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFFTgorPFVDQzgxPiAiPFUzMTRBPjxVMzE1Mj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFFTkkKKzxVQ0M4Mj4gIjxVMzE0QT48VTMxNTI+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lBRU5ICis8VUNDODM+ICI8VTMxNEE+PFUzMTUyPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIENZQUVECis8VUNDODQ+ICI8VTMxNEE+PFUzMTUyPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIENZQUVMCis8VUNDODU+ICI8VTMxNEE+PFUzMTUyPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIENZQUVMRworPFVDQzg2PiAiPFUzMTRBPjxVMzE1Mj48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFFTE0KKzxVQ0M4Nz4gIjxVMzE0QT48VTMxNTI+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lBRUxCCis8VUNDODg+ICI8VTMxNEE+PFUzMTUyPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIENZQUVMUworPFVDQzg5PiAiPFUzMTRBPjxVMzE1Mj48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFFTFQKKzxVQ0M4QT4gIjxVMzE0QT48VTMxNTI+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lBRUxQCis8VUNDOEI+ICI8VTMxNEE+PFUzMTUyPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIENZQUVMSAorPFVDQzhDPiAiPFUzMTRBPjxVMzE1Mj48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFFTQorPFVDQzhEPiAiPFUzMTRBPjxVMzE1Mj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFFQgorPFVDQzhFPiAiPFUzMTRBPjxVMzE1Mj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFFQlMKKzxVQ0M4Rj4gIjxVMzE0QT48VTMxNTI+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lBRVMKKzxVQ0M5MD4gIjxVMzE0QT48VTMxNTI+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lBRVNTCis8VUNDOTE+ICI8VTMxNEE+PFUzMTUyPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIENZQUVORworPFVDQzkyPiAiPFUzMTRBPjxVMzE1Mj48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFFSgorPFVDQzkzPiAiPFUzMTRBPjxVMzE1Mj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFFQworPFVDQzk0PiAiPFUzMTRBPjxVMzE1Mj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFFSworPFVDQzk1PiAiPFUzMTRBPjxVMzE1Mj48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFFVAorPFVDQzk2PiAiPFUzMTRBPjxVMzE1Mj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFFUAorPFVDQzk3PiAiPFUzMTRBPjxVMzE1Mj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUFFSAorPFVDQzk4PiAiPFUzMTRBPjxVMzE1Mz4iCSUgSEFOR1VMIFNZTExBQkxFIENFTworPFVDQzk5PiAiPFUzMTRBPjxVMzE1Mz48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBDRU9HCis8VUNDOUE+ICI8VTMxNEE+PFUzMTUzPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIENFT0dHCis8VUNDOUI+ICI8VTMxNEE+PFUzMTUzPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIENFT0dTCis8VUNDOUM+ICI8VTMxNEE+PFUzMTUzPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIENFT04KKzxVQ0M5RD4gIjxVMzE0QT48VTMxNTM+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0VPTkkKKzxVQ0M5RT4gIjxVMzE0QT48VTMxNTM+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0VPTkgKKzxVQ0M5Rj4gIjxVMzE0QT48VTMxNTM+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0VPRAorPFVDQ0EwPiAiPFUzMTRBPjxVMzE1Mz48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBDRU9MCis8VUNDQTE+ICI8VTMxNEE+PFUzMTUzPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIENFT0xHCis8VUNDQTI+ICI8VTMxNEE+PFUzMTUzPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIENFT0xNCis8VUNDQTM+ICI8VTMxNEE+PFUzMTUzPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIENFT0xCCis8VUNDQTQ+ICI8VTMxNEE+PFUzMTUzPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIENFT0xTCis8VUNDQTU+ICI8VTMxNEE+PFUzMTUzPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIENFT0xUCis8VUNDQTY+ICI8VTMxNEE+PFUzMTUzPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIENFT0xQCis8VUNDQTc+ICI8VTMxNEE+PFUzMTUzPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIENFT0xICis8VUNDQTg+ICI8VTMxNEE+PFUzMTUzPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIENFT00KKzxVQ0NBOT4gIjxVMzE0QT48VTMxNTM+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0VPQgorPFVDQ0FBPiAiPFUzMTRBPjxVMzE1Mz48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBDRU9CUworPFVDQ0FCPiAiPFUzMTRBPjxVMzE1Mz48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBDRU9TCis8VUNDQUM+ICI8VTMxNEE+PFUzMTUzPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIENFT1NTCis8VUNDQUQ+ICI8VTMxNEE+PFUzMTUzPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIENFT05HCis8VUNDQUU+ICI8VTMxNEE+PFUzMTUzPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIENFT0oKKzxVQ0NBRj4gIjxVMzE0QT48VTMxNTM+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0VPQworPFVDQ0IwPiAiPFUzMTRBPjxVMzE1Mz48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBDRU9LCis8VUNDQjE+ICI8VTMxNEE+PFUzMTUzPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIENFT1QKKzxVQ0NCMj4gIjxVMzE0QT48VTMxNTM+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0VPUAorPFVDQ0IzPiAiPFUzMTRBPjxVMzE1Mz48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBDRU9ICis8VUNDQjQ+ICI8VTMxNEE+PFUzMTU0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0UKKzxVQ0NCNT4gIjxVMzE0QT48VTMxNTQ+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0VHCis8VUNDQjY+ICI8VTMxNEE+PFUzMTU0PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIENFR0cKKzxVQ0NCNz4gIjxVMzE0QT48VTMxNTQ+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0VHUworPFVDQ0I4PiAiPFUzMTRBPjxVMzE1ND48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBDRU4KKzxVQ0NCOT4gIjxVMzE0QT48VTMxNTQ+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0VOSQorPFVDQ0JBPiAiPFUzMTRBPjxVMzE1ND48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBDRU5ICis8VUNDQkI+ICI8VTMxNEE+PFUzMTU0PjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIENFRAorPFVDQ0JDPiAiPFUzMTRBPjxVMzE1ND48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBDRUwKKzxVQ0NCRD4gIjxVMzE0QT48VTMxNTQ+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0VMRworPFVDQ0JFPiAiPFUzMTRBPjxVMzE1ND48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBDRUxNCis8VUNDQkY+ICI8VTMxNEE+PFUzMTU0PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIENFTEIKKzxVQ0NDMD4gIjxVMzE0QT48VTMxNTQ+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0VMUworPFVDQ0MxPiAiPFUzMTRBPjxVMzE1ND48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBDRUxUCis8VUNDQzI+ICI8VTMxNEE+PFUzMTU0PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIENFTFAKKzxVQ0NDMz4gIjxVMzE0QT48VTMxNTQ+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0VMSAorPFVDQ0M0PiAiPFUzMTRBPjxVMzE1ND48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBDRU0KKzxVQ0NDNT4gIjxVMzE0QT48VTMxNTQ+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0VCCis8VUNDQzY+ICI8VTMxNEE+PFUzMTU0PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIENFQlMKKzxVQ0NDNz4gIjxVMzE0QT48VTMxNTQ+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0VTCis8VUNDQzg+ICI8VTMxNEE+PFUzMTU0PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIENFU1MKKzxVQ0NDOT4gIjxVMzE0QT48VTMxNTQ+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0VORworPFVDQ0NBPiAiPFUzMTRBPjxVMzE1ND48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBDRUoKKzxVQ0NDQj4gIjxVMzE0QT48VTMxNTQ+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0VDCis8VUNDQ0M+ICI8VTMxNEE+PFUzMTU0PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIENFSworPFVDQ0NEPiAiPFUzMTRBPjxVMzE1ND48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBDRVQKKzxVQ0NDRT4gIjxVMzE0QT48VTMxNTQ+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0VQCis8VUNDQ0Y+ICI8VTMxNEE+PFUzMTU0PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIENFSAorPFVDQ0QwPiAiPFUzMTRBPjxVMzE1NT4iCSUgSEFOR1VMIFNZTExBQkxFIENZRU8KKzxVQ0NEMT4gIjxVMzE0QT48VTMxNTU+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lFT0cKKzxVQ0NEMj4gIjxVMzE0QT48VTMxNTU+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lFT0dHCis8VUNDRDM+ICI8VTMxNEE+PFUzMTU1PjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIENZRU9HUworPFVDQ0Q0PiAiPFUzMTRBPjxVMzE1NT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUVPTgorPFVDQ0Q1PiAiPFUzMTRBPjxVMzE1NT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUVPTkkKKzxVQ0NENj4gIjxVMzE0QT48VTMxNTU+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lFT05ICis8VUNDRDc+ICI8VTMxNEE+PFUzMTU1PjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIENZRU9ECis8VUNDRDg+ICI8VTMxNEE+PFUzMTU1PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIENZRU9MCis8VUNDRDk+ICI8VTMxNEE+PFUzMTU1PjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIENZRU9MRworPFVDQ0RBPiAiPFUzMTRBPjxVMzE1NT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUVPTE0KKzxVQ0NEQj4gIjxVMzE0QT48VTMxNTU+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lFT0xCCis8VUNDREM+ICI8VTMxNEE+PFUzMTU1PjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIENZRU9MUworPFVDQ0REPiAiPFUzMTRBPjxVMzE1NT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUVPTFQKKzxVQ0NERT4gIjxVMzE0QT48VTMxNTU+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lFT0xQCis8VUNDREY+ICI8VTMxNEE+PFUzMTU1PjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIENZRU9MSAorPFVDQ0UwPiAiPFUzMTRBPjxVMzE1NT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUVPTQorPFVDQ0UxPiAiPFUzMTRBPjxVMzE1NT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUVPQgorPFVDQ0UyPiAiPFUzMTRBPjxVMzE1NT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUVPQlMKKzxVQ0NFMz4gIjxVMzE0QT48VTMxNTU+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lFT1MKKzxVQ0NFND4gIjxVMzE0QT48VTMxNTU+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lFT1NTCis8VUNDRTU+ICI8VTMxNEE+PFUzMTU1PjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIENZRU9ORworPFVDQ0U2PiAiPFUzMTRBPjxVMzE1NT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUVPSgorPFVDQ0U3PiAiPFUzMTRBPjxVMzE1NT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUVPQworPFVDQ0U4PiAiPFUzMTRBPjxVMzE1NT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUVPSworPFVDQ0U5PiAiPFUzMTRBPjxVMzE1NT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUVPVAorPFVDQ0VBPiAiPFUzMTRBPjxVMzE1NT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUVPUAorPFVDQ0VCPiAiPFUzMTRBPjxVMzE1NT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUVPSAorPFVDQ0VDPiAiPFUzMTRBPjxVMzE1Nj4iCSUgSEFOR1VMIFNZTExBQkxFIENZRQorPFVDQ0VEPiAiPFUzMTRBPjxVMzE1Nj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUVHCis8VUNDRUU+ICI8VTMxNEE+PFUzMTU2PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIENZRUdHCis8VUNDRUY+ICI8VTMxNEE+PFUzMTU2PjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIENZRUdTCis8VUNDRjA+ICI8VTMxNEE+PFUzMTU2PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIENZRU4KKzxVQ0NGMT4gIjxVMzE0QT48VTMxNTY+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lFTkkKKzxVQ0NGMj4gIjxVMzE0QT48VTMxNTY+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lFTkgKKzxVQ0NGMz4gIjxVMzE0QT48VTMxNTY+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lFRAorPFVDQ0Y0PiAiPFUzMTRBPjxVMzE1Nj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUVMCis8VUNDRjU+ICI8VTMxNEE+PFUzMTU2PjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIENZRUxHCis8VUNDRjY+ICI8VTMxNEE+PFUzMTU2PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIENZRUxNCis8VUNDRjc+ICI8VTMxNEE+PFUzMTU2PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIENZRUxCCis8VUNDRjg+ICI8VTMxNEE+PFUzMTU2PjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIENZRUxTCis8VUNDRjk+ICI8VTMxNEE+PFUzMTU2PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIENZRUxUCis8VUNDRkE+ICI8VTMxNEE+PFUzMTU2PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIENZRUxQCis8VUNDRkI+ICI8VTMxNEE+PFUzMTU2PjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIENZRUxICis8VUNDRkM+ICI8VTMxNEE+PFUzMTU2PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIENZRU0KKzxVQ0NGRD4gIjxVMzE0QT48VTMxNTY+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lFQgorPFVDQ0ZFPiAiPFUzMTRBPjxVMzE1Nj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUVCUworPFVDQ0ZGPiAiPFUzMTRBPjxVMzE1Nj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUVTCis8VUNEMDA+ICI8VTMxNEE+PFUzMTU2PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIENZRVNTCis8VUNEMDE+ICI8VTMxNEE+PFUzMTU2PjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIENZRU5HCis8VUNEMDI+ICI8VTMxNEE+PFUzMTU2PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIENZRUoKKzxVQ0QwMz4gIjxVMzE0QT48VTMxNTY+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lFQworPFVDRDA0PiAiPFUzMTRBPjxVMzE1Nj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUVLCis8VUNEMDU+ICI8VTMxNEE+PFUzMTU2PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIENZRVQKKzxVQ0QwNj4gIjxVMzE0QT48VTMxNTY+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lFUAorPFVDRDA3PiAiPFUzMTRBPjxVMzE1Nj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUVICis8VUNEMDg+ICI8VTMxNEE+PFUzMTU3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ08KKzxVQ0QwOT4gIjxVMzE0QT48VTMxNTc+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09HCis8VUNEMEE+ICI8VTMxNEE+PFUzMTU3PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIENPR0cKKzxVQ0QwQj4gIjxVMzE0QT48VTMxNTc+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09HUworPFVDRDBDPiAiPFUzMTRBPjxVMzE1Nz48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBDT04KKzxVQ0QwRD4gIjxVMzE0QT48VTMxNTc+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09OSQorPFVDRDBFPiAiPFUzMTRBPjxVMzE1Nz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBDT05ICis8VUNEMEY+ICI8VTMxNEE+PFUzMTU3PjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIENPRAorPFVDRDEwPiAiPFUzMTRBPjxVMzE1Nz48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBDT0wKKzxVQ0QxMT4gIjxVMzE0QT48VTMxNTc+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09MRworPFVDRDEyPiAiPFUzMTRBPjxVMzE1Nz48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBDT0xNCis8VUNEMTM+ICI8VTMxNEE+PFUzMTU3PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIENPTEIKKzxVQ0QxND4gIjxVMzE0QT48VTMxNTc+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09MUworPFVDRDE1PiAiPFUzMTRBPjxVMzE1Nz48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBDT0xUCis8VUNEMTY+ICI8VTMxNEE+PFUzMTU3PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIENPTFAKKzxVQ0QxNz4gIjxVMzE0QT48VTMxNTc+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09MSAorPFVDRDE4PiAiPFUzMTRBPjxVMzE1Nz48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBDT00KKzxVQ0QxOT4gIjxVMzE0QT48VTMxNTc+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09CCis8VUNEMUE+ICI8VTMxNEE+PFUzMTU3PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIENPQlMKKzxVQ0QxQj4gIjxVMzE0QT48VTMxNTc+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09TCis8VUNEMUM+ICI8VTMxNEE+PFUzMTU3PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIENPU1MKKzxVQ0QxRD4gIjxVMzE0QT48VTMxNTc+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09ORworPFVDRDFFPiAiPFUzMTRBPjxVMzE1Nz48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBDT0oKKzxVQ0QxRj4gIjxVMzE0QT48VTMxNTc+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09DCis8VUNEMjA+ICI8VTMxNEE+PFUzMTU3PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIENPSworPFVDRDIxPiAiPFUzMTRBPjxVMzE1Nz48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBDT1QKKzxVQ0QyMj4gIjxVMzE0QT48VTMxNTc+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09QCis8VUNEMjM+ICI8VTMxNEE+PFUzMTU3PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIENPSAorPFVDRDI0PiAiPFUzMTRBPjxVMzE1OD4iCSUgSEFOR1VMIFNZTExBQkxFIENXQQorPFVDRDI1PiAiPFUzMTRBPjxVMzE1OD48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0FHCis8VUNEMjY+ICI8VTMxNEE+PFUzMTU4PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIENXQUdHCis8VUNEMjc+ICI8VTMxNEE+PFUzMTU4PjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIENXQUdTCis8VUNEMjg+ICI8VTMxNEE+PFUzMTU4PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIENXQU4KKzxVQ0QyOT4gIjxVMzE0QT48VTMxNTg+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dBTkkKKzxVQ0QyQT4gIjxVMzE0QT48VTMxNTg+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dBTkgKKzxVQ0QyQj4gIjxVMzE0QT48VTMxNTg+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dBRAorPFVDRDJDPiAiPFUzMTRBPjxVMzE1OD48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0FMCis8VUNEMkQ+ICI8VTMxNEE+PFUzMTU4PjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIENXQUxHCis8VUNEMkU+ICI8VTMxNEE+PFUzMTU4PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIENXQUxNCis8VUNEMkY+ICI8VTMxNEE+PFUzMTU4PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIENXQUxCCis8VUNEMzA+ICI8VTMxNEE+PFUzMTU4PjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIENXQUxTCis8VUNEMzE+ICI8VTMxNEE+PFUzMTU4PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIENXQUxUCis8VUNEMzI+ICI8VTMxNEE+PFUzMTU4PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIENXQUxQCis8VUNEMzM+ICI8VTMxNEE+PFUzMTU4PjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIENXQUxICis8VUNEMzQ+ICI8VTMxNEE+PFUzMTU4PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIENXQU0KKzxVQ0QzNT4gIjxVMzE0QT48VTMxNTg+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dBQgorPFVDRDM2PiAiPFUzMTRBPjxVMzE1OD48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0FCUworPFVDRDM3PiAiPFUzMTRBPjxVMzE1OD48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0FTCis8VUNEMzg+ICI8VTMxNEE+PFUzMTU4PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIENXQVNTCis8VUNEMzk+ICI8VTMxNEE+PFUzMTU4PjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIENXQU5HCis8VUNEM0E+ICI8VTMxNEE+PFUzMTU4PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIENXQUoKKzxVQ0QzQj4gIjxVMzE0QT48VTMxNTg+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dBQworPFVDRDNDPiAiPFUzMTRBPjxVMzE1OD48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0FLCis8VUNEM0Q+ICI8VTMxNEE+PFUzMTU4PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIENXQVQKKzxVQ0QzRT4gIjxVMzE0QT48VTMxNTg+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dBUAorPFVDRDNGPiAiPFUzMTRBPjxVMzE1OD48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0FICis8VUNENDA+ICI8VTMxNEE+PFUzMTU5PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dBRQorPFVDRDQxPiAiPFUzMTRBPjxVMzE1OT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0FFRworPFVDRDQyPiAiPFUzMTRBPjxVMzE1OT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0FFR0cKKzxVQ0Q0Mz4gIjxVMzE0QT48VTMxNTk+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dBRUdTCis8VUNENDQ+ICI8VTMxNEE+PFUzMTU5PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIENXQUVOCis8VUNENDU+ICI8VTMxNEE+PFUzMTU5PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIENXQUVOSQorPFVDRDQ2PiAiPFUzMTRBPjxVMzE1OT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0FFTkgKKzxVQ0Q0Nz4gIjxVMzE0QT48VTMxNTk+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dBRUQKKzxVQ0Q0OD4gIjxVMzE0QT48VTMxNTk+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dBRUwKKzxVQ0Q0OT4gIjxVMzE0QT48VTMxNTk+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dBRUxHCis8VUNENEE+ICI8VTMxNEE+PFUzMTU5PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIENXQUVMTQorPFVDRDRCPiAiPFUzMTRBPjxVMzE1OT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0FFTEIKKzxVQ0Q0Qz4gIjxVMzE0QT48VTMxNTk+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dBRUxTCis8VUNENEQ+ICI8VTMxNEE+PFUzMTU5PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIENXQUVMVAorPFVDRDRFPiAiPFUzMTRBPjxVMzE1OT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0FFTFAKKzxVQ0Q0Rj4gIjxVMzE0QT48VTMxNTk+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dBRUxICis8VUNENTA+ICI8VTMxNEE+PFUzMTU5PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIENXQUVNCis8VUNENTE+ICI8VTMxNEE+PFUzMTU5PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIENXQUVCCis8VUNENTI+ICI8VTMxNEE+PFUzMTU5PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIENXQUVCUworPFVDRDUzPiAiPFUzMTRBPjxVMzE1OT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0FFUworPFVDRDU0PiAiPFUzMTRBPjxVMzE1OT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0FFU1MKKzxVQ0Q1NT4gIjxVMzE0QT48VTMxNTk+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dBRU5HCis8VUNENTY+ICI8VTMxNEE+PFUzMTU5PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIENXQUVKCis8VUNENTc+ICI8VTMxNEE+PFUzMTU5PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIENXQUVDCis8VUNENTg+ICI8VTMxNEE+PFUzMTU5PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIENXQUVLCis8VUNENTk+ICI8VTMxNEE+PFUzMTU5PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIENXQUVUCis8VUNENUE+ICI8VTMxNEE+PFUzMTU5PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIENXQUVQCis8VUNENUI+ICI8VTMxNEE+PFUzMTU5PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIENXQUVICis8VUNENUM+ICI8VTMxNEE+PFUzMTVBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09FCis8VUNENUQ+ICI8VTMxNEE+PFUzMTVBPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIENPRUcKKzxVQ0Q1RT4gIjxVMzE0QT48VTMxNUE+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09FR0cKKzxVQ0Q1Rj4gIjxVMzE0QT48VTMxNUE+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09FR1MKKzxVQ0Q2MD4gIjxVMzE0QT48VTMxNUE+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09FTgorPFVDRDYxPiAiPFUzMTRBPjxVMzE1QT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBDT0VOSQorPFVDRDYyPiAiPFUzMTRBPjxVMzE1QT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBDT0VOSAorPFVDRDYzPiAiPFUzMTRBPjxVMzE1QT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBDT0VECis8VUNENjQ+ICI8VTMxNEE+PFUzMTVBPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIENPRUwKKzxVQ0Q2NT4gIjxVMzE0QT48VTMxNUE+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09FTEcKKzxVQ0Q2Nj4gIjxVMzE0QT48VTMxNUE+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09FTE0KKzxVQ0Q2Nz4gIjxVMzE0QT48VTMxNUE+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09FTEIKKzxVQ0Q2OD4gIjxVMzE0QT48VTMxNUE+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09FTFMKKzxVQ0Q2OT4gIjxVMzE0QT48VTMxNUE+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09FTFQKKzxVQ0Q2QT4gIjxVMzE0QT48VTMxNUE+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09FTFAKKzxVQ0Q2Qj4gIjxVMzE0QT48VTMxNUE+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09FTEgKKzxVQ0Q2Qz4gIjxVMzE0QT48VTMxNUE+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09FTQorPFVDRDZEPiAiPFUzMTRBPjxVMzE1QT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBDT0VCCis8VUNENkU+ICI8VTMxNEE+PFUzMTVBPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIENPRUJTCis8VUNENkY+ICI8VTMxNEE+PFUzMTVBPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIENPRVMKKzxVQ0Q3MD4gIjxVMzE0QT48VTMxNUE+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09FU1MKKzxVQ0Q3MT4gIjxVMzE0QT48VTMxNUE+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09FTkcKKzxVQ0Q3Mj4gIjxVMzE0QT48VTMxNUE+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09FSgorPFVDRDczPiAiPFUzMTRBPjxVMzE1QT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBDT0VDCis8VUNENzQ+ICI8VTMxNEE+PFUzMTVBPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIENPRUsKKzxVQ0Q3NT4gIjxVMzE0QT48VTMxNUE+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ09FVAorPFVDRDc2PiAiPFUzMTRBPjxVMzE1QT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBDT0VQCis8VUNENzc+ICI8VTMxNEE+PFUzMTVBPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIENPRUgKKzxVQ0Q3OD4gIjxVMzE0QT48VTMxNUI+IgklIEhBTkdVTCBTWUxMQUJMRSBDWU8KKzxVQ0Q3OT4gIjxVMzE0QT48VTMxNUI+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lPRworPFVDRDdBPiAiPFUzMTRBPjxVMzE1Qj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBDWU9HRworPFVDRDdCPiAiPFUzMTRBPjxVMzE1Qj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBDWU9HUworPFVDRDdDPiAiPFUzMTRBPjxVMzE1Qj48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBDWU9OCis8VUNEN0Q+ICI8VTMxNEE+PFUzMTVCPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIENZT05JCis8VUNEN0U+ICI8VTMxNEE+PFUzMTVCPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIENZT05ICis8VUNEN0Y+ICI8VTMxNEE+PFUzMTVCPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIENZT0QKKzxVQ0Q4MD4gIjxVMzE0QT48VTMxNUI+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lPTAorPFVDRDgxPiAiPFUzMTRBPjxVMzE1Qj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBDWU9MRworPFVDRDgyPiAiPFUzMTRBPjxVMzE1Qj48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBDWU9MTQorPFVDRDgzPiAiPFUzMTRBPjxVMzE1Qj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBDWU9MQgorPFVDRDg0PiAiPFUzMTRBPjxVMzE1Qj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBDWU9MUworPFVDRDg1PiAiPFUzMTRBPjxVMzE1Qj48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBDWU9MVAorPFVDRDg2PiAiPFUzMTRBPjxVMzE1Qj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBDWU9MUAorPFVDRDg3PiAiPFUzMTRBPjxVMzE1Qj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBDWU9MSAorPFVDRDg4PiAiPFUzMTRBPjxVMzE1Qj48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBDWU9NCis8VUNEODk+ICI8VTMxNEE+PFUzMTVCPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIENZT0IKKzxVQ0Q4QT4gIjxVMzE0QT48VTMxNUI+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lPQlMKKzxVQ0Q4Qj4gIjxVMzE0QT48VTMxNUI+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lPUworPFVDRDhDPiAiPFUzMTRBPjxVMzE1Qj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBDWU9TUworPFVDRDhEPiAiPFUzMTRBPjxVMzE1Qj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBDWU9ORworPFVDRDhFPiAiPFUzMTRBPjxVMzE1Qj48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBDWU9KCis8VUNEOEY+ICI8VTMxNEE+PFUzMTVCPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIENZT0MKKzxVQ0Q5MD4gIjxVMzE0QT48VTMxNUI+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lPSworPFVDRDkxPiAiPFUzMTRBPjxVMzE1Qj48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBDWU9UCis8VUNEOTI+ICI8VTMxNEE+PFUzMTVCPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIENZT1AKKzxVQ0Q5Mz4gIjxVMzE0QT48VTMxNUI+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lPSAorPFVDRDk0PiAiPFUzMTRBPjxVMzE1Qz4iCSUgSEFOR1VMIFNZTExBQkxFIENVCis8VUNEOTU+ICI8VTMxNEE+PFUzMTVDPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIENVRworPFVDRDk2PiAiPFUzMTRBPjxVMzE1Qz48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBDVUdHCis8VUNEOTc+ICI8VTMxNEE+PFUzMTVDPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIENVR1MKKzxVQ0Q5OD4gIjxVMzE0QT48VTMxNUM+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1VOCis8VUNEOTk+ICI8VTMxNEE+PFUzMTVDPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIENVTkkKKzxVQ0Q5QT4gIjxVMzE0QT48VTMxNUM+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1VOSAorPFVDRDlCPiAiPFUzMTRBPjxVMzE1Qz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBDVUQKKzxVQ0Q5Qz4gIjxVMzE0QT48VTMxNUM+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1VMCis8VUNEOUQ+ICI8VTMxNEE+PFUzMTVDPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIENVTEcKKzxVQ0Q5RT4gIjxVMzE0QT48VTMxNUM+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1VMTQorPFVDRDlGPiAiPFUzMTRBPjxVMzE1Qz48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBDVUxCCis8VUNEQTA+ICI8VTMxNEE+PFUzMTVDPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIENVTFMKKzxVQ0RBMT4gIjxVMzE0QT48VTMxNUM+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1VMVAorPFVDREEyPiAiPFUzMTRBPjxVMzE1Qz48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBDVUxQCis8VUNEQTM+ICI8VTMxNEE+PFUzMTVDPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIENVTEgKKzxVQ0RBND4gIjxVMzE0QT48VTMxNUM+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1VNCis8VUNEQTU+ICI8VTMxNEE+PFUzMTVDPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIENVQgorPFVDREE2PiAiPFUzMTRBPjxVMzE1Qz48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBDVUJTCis8VUNEQTc+ICI8VTMxNEE+PFUzMTVDPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIENVUworPFVDREE4PiAiPFUzMTRBPjxVMzE1Qz48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBDVVNTCis8VUNEQTk+ICI8VTMxNEE+PFUzMTVDPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIENVTkcKKzxVQ0RBQT4gIjxVMzE0QT48VTMxNUM+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1VKCis8VUNEQUI+ICI8VTMxNEE+PFUzMTVDPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIENVQworPFVDREFDPiAiPFUzMTRBPjxVMzE1Qz48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBDVUsKKzxVQ0RBRD4gIjxVMzE0QT48VTMxNUM+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1VUCis8VUNEQUU+ICI8VTMxNEE+PFUzMTVDPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIENVUAorPFVDREFGPiAiPFUzMTRBPjxVMzE1Qz48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBDVUgKKzxVQ0RCMD4gIjxVMzE0QT48VTMxNUQ+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0VPCis8VUNEQjE+ICI8VTMxNEE+PFUzMTVEPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIENXRU9HCis8VUNEQjI+ICI8VTMxNEE+PFUzMTVEPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIENXRU9HRworPFVDREIzPiAiPFUzMTRBPjxVMzE1RD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0VPR1MKKzxVQ0RCND4gIjxVMzE0QT48VTMxNUQ+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dFT04KKzxVQ0RCNT4gIjxVMzE0QT48VTMxNUQ+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dFT05JCis8VUNEQjY+ICI8VTMxNEE+PFUzMTVEPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIENXRU9OSAorPFVDREI3PiAiPFUzMTRBPjxVMzE1RD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0VPRAorPFVDREI4PiAiPFUzMTRBPjxVMzE1RD48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0VPTAorPFVDREI5PiAiPFUzMTRBPjxVMzE1RD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0VPTEcKKzxVQ0RCQT4gIjxVMzE0QT48VTMxNUQ+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dFT0xNCis8VUNEQkI+ICI8VTMxNEE+PFUzMTVEPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIENXRU9MQgorPFVDREJDPiAiPFUzMTRBPjxVMzE1RD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0VPTFMKKzxVQ0RCRD4gIjxVMzE0QT48VTMxNUQ+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dFT0xUCis8VUNEQkU+ICI8VTMxNEE+PFUzMTVEPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIENXRU9MUAorPFVDREJGPiAiPFUzMTRBPjxVMzE1RD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0VPTEgKKzxVQ0RDMD4gIjxVMzE0QT48VTMxNUQ+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dFT00KKzxVQ0RDMT4gIjxVMzE0QT48VTMxNUQ+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dFT0IKKzxVQ0RDMj4gIjxVMzE0QT48VTMxNUQ+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dFT0JTCis8VUNEQzM+ICI8VTMxNEE+PFUzMTVEPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIENXRU9TCis8VUNEQzQ+ICI8VTMxNEE+PFUzMTVEPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIENXRU9TUworPFVDREM1PiAiPFUzMTRBPjxVMzE1RD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0VPTkcKKzxVQ0RDNj4gIjxVMzE0QT48VTMxNUQ+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dFT0oKKzxVQ0RDNz4gIjxVMzE0QT48VTMxNUQ+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dFT0MKKzxVQ0RDOD4gIjxVMzE0QT48VTMxNUQ+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dFT0sKKzxVQ0RDOT4gIjxVMzE0QT48VTMxNUQ+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dFT1QKKzxVQ0RDQT4gIjxVMzE0QT48VTMxNUQ+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dFT1AKKzxVQ0RDQj4gIjxVMzE0QT48VTMxNUQ+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dFT0gKKzxVQ0RDQz4gIjxVMzE0QT48VTMxNUU+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0UKKzxVQ0RDRD4gIjxVMzE0QT48VTMxNUU+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dFRworPFVDRENFPiAiPFUzMTRBPjxVMzE1RT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0VHRworPFVDRENGPiAiPFUzMTRBPjxVMzE1RT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0VHUworPFVDREQwPiAiPFUzMTRBPjxVMzE1RT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0VOCis8VUNERDE+ICI8VTMxNEE+PFUzMTVFPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIENXRU5JCis8VUNERDI+ICI8VTMxNEE+PFUzMTVFPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIENXRU5ICis8VUNERDM+ICI8VTMxNEE+PFUzMTVFPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIENXRUQKKzxVQ0REND4gIjxVMzE0QT48VTMxNUU+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dFTAorPFVDREQ1PiAiPFUzMTRBPjxVMzE1RT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0VMRworPFVDREQ2PiAiPFUzMTRBPjxVMzE1RT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0VMTQorPFVDREQ3PiAiPFUzMTRBPjxVMzE1RT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0VMQgorPFVDREQ4PiAiPFUzMTRBPjxVMzE1RT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0VMUworPFVDREQ5PiAiPFUzMTRBPjxVMzE1RT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0VMVAorPFVDRERBPiAiPFUzMTRBPjxVMzE1RT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0VMUAorPFVDRERCPiAiPFUzMTRBPjxVMzE1RT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0VMSAorPFVDRERDPiAiPFUzMTRBPjxVMzE1RT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0VNCis8VUNEREQ+ICI8VTMxNEE+PFUzMTVFPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIENXRUIKKzxVQ0RERT4gIjxVMzE0QT48VTMxNUU+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dFQlMKKzxVQ0RERj4gIjxVMzE0QT48VTMxNUU+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dFUworPFVDREUwPiAiPFUzMTRBPjxVMzE1RT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0VTUworPFVDREUxPiAiPFUzMTRBPjxVMzE1RT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0VORworPFVDREUyPiAiPFUzMTRBPjxVMzE1RT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0VKCis8VUNERTM+ICI8VTMxNEE+PFUzMTVFPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIENXRUMKKzxVQ0RFND4gIjxVMzE0QT48VTMxNUU+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dFSworPFVDREU1PiAiPFUzMTRBPjxVMzE1RT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0VUCis8VUNERTY+ICI8VTMxNEE+PFUzMTVFPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIENXRVAKKzxVQ0RFNz4gIjxVMzE0QT48VTMxNUU+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dFSAorPFVDREU4PiAiPFUzMTRBPjxVMzE1Rj4iCSUgSEFOR1VMIFNZTExBQkxFIENXSQorPFVDREU5PiAiPFUzMTRBPjxVMzE1Rj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0lHCis8VUNERUE+ICI8VTMxNEE+PFUzMTVGPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIENXSUdHCis8VUNERUI+ICI8VTMxNEE+PFUzMTVGPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIENXSUdTCis8VUNERUM+ICI8VTMxNEE+PFUzMTVGPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIENXSU4KKzxVQ0RFRD4gIjxVMzE0QT48VTMxNUY+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dJTkkKKzxVQ0RFRT4gIjxVMzE0QT48VTMxNUY+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dJTkgKKzxVQ0RFRj4gIjxVMzE0QT48VTMxNUY+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dJRAorPFVDREYwPiAiPFUzMTRBPjxVMzE1Rj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0lMCis8VUNERjE+ICI8VTMxNEE+PFUzMTVGPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIENXSUxHCis8VUNERjI+ICI8VTMxNEE+PFUzMTVGPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIENXSUxNCis8VUNERjM+ICI8VTMxNEE+PFUzMTVGPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIENXSUxCCis8VUNERjQ+ICI8VTMxNEE+PFUzMTVGPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIENXSUxTCis8VUNERjU+ICI8VTMxNEE+PFUzMTVGPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIENXSUxUCis8VUNERjY+ICI8VTMxNEE+PFUzMTVGPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIENXSUxQCis8VUNERjc+ICI8VTMxNEE+PFUzMTVGPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIENXSUxICis8VUNERjg+ICI8VTMxNEE+PFUzMTVGPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIENXSU0KKzxVQ0RGOT4gIjxVMzE0QT48VTMxNUY+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dJQgorPFVDREZBPiAiPFUzMTRBPjxVMzE1Rj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0lCUworPFVDREZCPiAiPFUzMTRBPjxVMzE1Rj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0lTCis8VUNERkM+ICI8VTMxNEE+PFUzMTVGPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIENXSVNTCis8VUNERkQ+ICI8VTMxNEE+PFUzMTVGPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIENXSU5HCis8VUNERkU+ICI8VTMxNEE+PFUzMTVGPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIENXSUoKKzxVQ0RGRj4gIjxVMzE0QT48VTMxNUY+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dJQworPFVDRTAwPiAiPFUzMTRBPjxVMzE1Rj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0lLCis8VUNFMDE+ICI8VTMxNEE+PFUzMTVGPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIENXSVQKKzxVQ0UwMj4gIjxVMzE0QT48VTMxNUY+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1dJUAorPFVDRTAzPiAiPFUzMTRBPjxVMzE1Rj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBDV0lICis8VUNFMDQ+ICI8VTMxNEE+PFUzMTYwPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lVCis8VUNFMDU+ICI8VTMxNEE+PFUzMTYwPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIENZVUcKKzxVQ0UwNj4gIjxVMzE0QT48VTMxNjA+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lVR0cKKzxVQ0UwNz4gIjxVMzE0QT48VTMxNjA+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lVR1MKKzxVQ0UwOD4gIjxVMzE0QT48VTMxNjA+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lVTgorPFVDRTA5PiAiPFUzMTRBPjxVMzE2MD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBDWVVOSQorPFVDRTBBPiAiPFUzMTRBPjxVMzE2MD48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBDWVVOSAorPFVDRTBCPiAiPFUzMTRBPjxVMzE2MD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBDWVVECis8VUNFMEM+ICI8VTMxNEE+PFUzMTYwPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIENZVUwKKzxVQ0UwRD4gIjxVMzE0QT48VTMxNjA+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lVTEcKKzxVQ0UwRT4gIjxVMzE0QT48VTMxNjA+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lVTE0KKzxVQ0UwRj4gIjxVMzE0QT48VTMxNjA+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lVTEIKKzxVQ0UxMD4gIjxVMzE0QT48VTMxNjA+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lVTFMKKzxVQ0UxMT4gIjxVMzE0QT48VTMxNjA+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lVTFQKKzxVQ0UxMj4gIjxVMzE0QT48VTMxNjA+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lVTFAKKzxVQ0UxMz4gIjxVMzE0QT48VTMxNjA+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lVTEgKKzxVQ0UxND4gIjxVMzE0QT48VTMxNjA+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lVTQorPFVDRTE1PiAiPFUzMTRBPjxVMzE2MD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBDWVVCCis8VUNFMTY+ICI8VTMxNEE+PFUzMTYwPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIENZVUJTCis8VUNFMTc+ICI8VTMxNEE+PFUzMTYwPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIENZVVMKKzxVQ0UxOD4gIjxVMzE0QT48VTMxNjA+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lVU1MKKzxVQ0UxOT4gIjxVMzE0QT48VTMxNjA+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lVTkcKKzxVQ0UxQT4gIjxVMzE0QT48VTMxNjA+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lVSgorPFVDRTFCPiAiPFUzMTRBPjxVMzE2MD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBDWVVDCis8VUNFMUM+ICI8VTMxNEE+PFUzMTYwPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIENZVUsKKzxVQ0UxRD4gIjxVMzE0QT48VTMxNjA+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lVVAorPFVDRTFFPiAiPFUzMTRBPjxVMzE2MD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBDWVVQCis8VUNFMUY+ICI8VTMxNEE+PFUzMTYwPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIENZVUgKKzxVQ0UyMD4gIjxVMzE0QT48VTMxNjE+IgklIEhBTkdVTCBTWUxMQUJMRSBDRVUKKzxVQ0UyMT4gIjxVMzE0QT48VTMxNjE+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0VVRworPFVDRTIyPiAiPFUzMTRBPjxVMzE2MT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBDRVVHRworPFVDRTIzPiAiPFUzMTRBPjxVMzE2MT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBDRVVHUworPFVDRTI0PiAiPFUzMTRBPjxVMzE2MT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBDRVVOCis8VUNFMjU+ICI8VTMxNEE+PFUzMTYxPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIENFVU5JCis8VUNFMjY+ICI8VTMxNEE+PFUzMTYxPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIENFVU5ICis8VUNFMjc+ICI8VTMxNEE+PFUzMTYxPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIENFVUQKKzxVQ0UyOD4gIjxVMzE0QT48VTMxNjE+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0VVTAorPFVDRTI5PiAiPFUzMTRBPjxVMzE2MT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBDRVVMRworPFVDRTJBPiAiPFUzMTRBPjxVMzE2MT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBDRVVMTQorPFVDRTJCPiAiPFUzMTRBPjxVMzE2MT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBDRVVMQgorPFVDRTJDPiAiPFUzMTRBPjxVMzE2MT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBDRVVMUworPFVDRTJEPiAiPFUzMTRBPjxVMzE2MT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBDRVVMVAorPFVDRTJFPiAiPFUzMTRBPjxVMzE2MT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBDRVVMUAorPFVDRTJGPiAiPFUzMTRBPjxVMzE2MT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBDRVVMSAorPFVDRTMwPiAiPFUzMTRBPjxVMzE2MT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBDRVVNCis8VUNFMzE+ICI8VTMxNEE+PFUzMTYxPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIENFVUIKKzxVQ0UzMj4gIjxVMzE0QT48VTMxNjE+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0VVQlMKKzxVQ0UzMz4gIjxVMzE0QT48VTMxNjE+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0VVUworPFVDRTM0PiAiPFUzMTRBPjxVMzE2MT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBDRVVTUworPFVDRTM1PiAiPFUzMTRBPjxVMzE2MT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBDRVVORworPFVDRTM2PiAiPFUzMTRBPjxVMzE2MT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBDRVVKCis8VUNFMzc+ICI8VTMxNEE+PFUzMTYxPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIENFVUMKKzxVQ0UzOD4gIjxVMzE0QT48VTMxNjE+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0VVSworPFVDRTM5PiAiPFUzMTRBPjxVMzE2MT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBDRVVUCis8VUNFM0E+ICI8VTMxNEE+PFUzMTYxPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIENFVVAKKzxVQ0UzQj4gIjxVMzE0QT48VTMxNjE+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0VVSAorPFVDRTNDPiAiPFUzMTRBPjxVMzE2Mj4iCSUgSEFOR1VMIFNZTExBQkxFIENZSQorPFVDRTNEPiAiPFUzMTRBPjxVMzE2Mj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUlHCis8VUNFM0U+ICI8VTMxNEE+PFUzMTYyPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIENZSUdHCis8VUNFM0Y+ICI8VTMxNEE+PFUzMTYyPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIENZSUdTCis8VUNFNDA+ICI8VTMxNEE+PFUzMTYyPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIENZSU4KKzxVQ0U0MT4gIjxVMzE0QT48VTMxNjI+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lJTkkKKzxVQ0U0Mj4gIjxVMzE0QT48VTMxNjI+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lJTkgKKzxVQ0U0Mz4gIjxVMzE0QT48VTMxNjI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lJRAorPFVDRTQ0PiAiPFUzMTRBPjxVMzE2Mj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUlMCis8VUNFNDU+ICI8VTMxNEE+PFUzMTYyPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIENZSUxHCis8VUNFNDY+ICI8VTMxNEE+PFUzMTYyPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIENZSUxNCis8VUNFNDc+ICI8VTMxNEE+PFUzMTYyPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIENZSUxCCis8VUNFNDg+ICI8VTMxNEE+PFUzMTYyPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIENZSUxTCis8VUNFNDk+ICI8VTMxNEE+PFUzMTYyPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIENZSUxUCis8VUNFNEE+ICI8VTMxNEE+PFUzMTYyPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIENZSUxQCis8VUNFNEI+ICI8VTMxNEE+PFUzMTYyPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIENZSUxICis8VUNFNEM+ICI8VTMxNEE+PFUzMTYyPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIENZSU0KKzxVQ0U0RD4gIjxVMzE0QT48VTMxNjI+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lJQgorPFVDRTRFPiAiPFUzMTRBPjxVMzE2Mj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUlCUworPFVDRTRGPiAiPFUzMTRBPjxVMzE2Mj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUlTCis8VUNFNTA+ICI8VTMxNEE+PFUzMTYyPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIENZSVNTCis8VUNFNTE+ICI8VTMxNEE+PFUzMTYyPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIENZSU5HCis8VUNFNTI+ICI8VTMxNEE+PFUzMTYyPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIENZSUoKKzxVQ0U1Mz4gIjxVMzE0QT48VTMxNjI+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lJQworPFVDRTU0PiAiPFUzMTRBPjxVMzE2Mj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUlLCis8VUNFNTU+ICI8VTMxNEE+PFUzMTYyPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIENZSVQKKzxVQ0U1Nj4gIjxVMzE0QT48VTMxNjI+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ1lJUAorPFVDRTU3PiAiPFUzMTRBPjxVMzE2Mj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBDWUlICis8VUNFNTg+ICI8VTMxNEE+PFUzMTYzPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0kKKzxVQ0U1OT4gIjxVMzE0QT48VTMxNjM+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0lHCis8VUNFNUE+ICI8VTMxNEE+PFUzMTYzPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIENJR0cKKzxVQ0U1Qj4gIjxVMzE0QT48VTMxNjM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0lHUworPFVDRTVDPiAiPFUzMTRBPjxVMzE2Mz48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBDSU4KKzxVQ0U1RD4gIjxVMzE0QT48VTMxNjM+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0lOSQorPFVDRTVFPiAiPFUzMTRBPjxVMzE2Mz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBDSU5ICis8VUNFNUY+ICI8VTMxNEE+PFUzMTYzPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIENJRAorPFVDRTYwPiAiPFUzMTRBPjxVMzE2Mz48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBDSUwKKzxVQ0U2MT4gIjxVMzE0QT48VTMxNjM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0lMRworPFVDRTYyPiAiPFUzMTRBPjxVMzE2Mz48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBDSUxNCis8VUNFNjM+ICI8VTMxNEE+PFUzMTYzPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIENJTEIKKzxVQ0U2ND4gIjxVMzE0QT48VTMxNjM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0lMUworPFVDRTY1PiAiPFUzMTRBPjxVMzE2Mz48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBDSUxUCis8VUNFNjY+ICI8VTMxNEE+PFUzMTYzPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIENJTFAKKzxVQ0U2Nz4gIjxVMzE0QT48VTMxNjM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0lMSAorPFVDRTY4PiAiPFUzMTRBPjxVMzE2Mz48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBDSU0KKzxVQ0U2OT4gIjxVMzE0QT48VTMxNjM+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0lCCis8VUNFNkE+ICI8VTMxNEE+PFUzMTYzPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIENJQlMKKzxVQ0U2Qj4gIjxVMzE0QT48VTMxNjM+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0lTCis8VUNFNkM+ICI8VTMxNEE+PFUzMTYzPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIENJU1MKKzxVQ0U2RD4gIjxVMzE0QT48VTMxNjM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0lORworPFVDRTZFPiAiPFUzMTRBPjxVMzE2Mz48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBDSUoKKzxVQ0U2Rj4gIjxVMzE0QT48VTMxNjM+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0lDCis8VUNFNzA+ICI8VTMxNEE+PFUzMTYzPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIENJSworPFVDRTcxPiAiPFUzMTRBPjxVMzE2Mz48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBDSVQKKzxVQ0U3Mj4gIjxVMzE0QT48VTMxNjM+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgQ0lQCis8VUNFNzM+ICI8VTMxNEE+PFUzMTYzPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIENJSAorPFVDRTc0PiAiPFUzMTRCPjxVMzE0Rj4iCSUgSEFOR1VMIFNZTExBQkxFIEtBCis8VUNFNzU+ICI8VTMxNEI+PFUzMTRGPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEtBRworPFVDRTc2PiAiPFUzMTRCPjxVMzE0Rj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBLQUdHCis8VUNFNzc+ICI8VTMxNEI+PFUzMTRGPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEtBR1MKKzxVQ0U3OD4gIjxVMzE0Qj48VTMxNEY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgS0FOCis8VUNFNzk+ICI8VTMxNEI+PFUzMTRGPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEtBTkkKKzxVQ0U3QT4gIjxVMzE0Qj48VTMxNEY+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgS0FOSAorPFVDRTdCPiAiPFUzMTRCPjxVMzE0Rj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBLQUQKKzxVQ0U3Qz4gIjxVMzE0Qj48VTMxNEY+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgS0FMCis8VUNFN0Q+ICI8VTMxNEI+PFUzMTRGPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEtBTEcKKzxVQ0U3RT4gIjxVMzE0Qj48VTMxNEY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0FMTQorPFVDRTdGPiAiPFUzMTRCPjxVMzE0Rj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBLQUxCCis8VUNFODA+ICI8VTMxNEI+PFUzMTRGPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEtBTFMKKzxVQ0U4MT4gIjxVMzE0Qj48VTMxNEY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0FMVAorPFVDRTgyPiAiPFUzMTRCPjxVMzE0Rj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBLQUxQCis8VUNFODM+ICI8VTMxNEI+PFUzMTRGPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEtBTEgKKzxVQ0U4ND4gIjxVMzE0Qj48VTMxNEY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0FNCis8VUNFODU+ICI8VTMxNEI+PFUzMTRGPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEtBQgorPFVDRTg2PiAiPFUzMTRCPjxVMzE0Rj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBLQUJTCis8VUNFODc+ICI8VTMxNEI+PFUzMTRGPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEtBUworPFVDRTg4PiAiPFUzMTRCPjxVMzE0Rj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBLQVNTCis8VUNFODk+ICI8VTMxNEI+PFUzMTRGPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEtBTkcKKzxVQ0U4QT4gIjxVMzE0Qj48VTMxNEY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgS0FKCis8VUNFOEI+ICI8VTMxNEI+PFUzMTRGPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEtBQworPFVDRThDPiAiPFUzMTRCPjxVMzE0Rj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBLQUsKKzxVQ0U4RD4gIjxVMzE0Qj48VTMxNEY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0FUCis8VUNFOEU+ICI8VTMxNEI+PFUzMTRGPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEtBUAorPFVDRThGPiAiPFUzMTRCPjxVMzE0Rj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBLQUgKKzxVQ0U5MD4gIjxVMzE0Qj48VTMxNTA+IgklIEhBTkdVTCBTWUxMQUJMRSBLQUUKKzxVQ0U5MT4gIjxVMzE0Qj48VTMxNTA+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0FFRworPFVDRTkyPiAiPFUzMTRCPjxVMzE1MD48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBLQUVHRworPFVDRTkzPiAiPFUzMTRCPjxVMzE1MD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBLQUVHUworPFVDRTk0PiAiPFUzMTRCPjxVMzE1MD48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBLQUVOCis8VUNFOTU+ICI8VTMxNEI+PFUzMTUwPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEtBRU5JCis8VUNFOTY+ICI8VTMxNEI+PFUzMTUwPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEtBRU5ICis8VUNFOTc+ICI8VTMxNEI+PFUzMTUwPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEtBRUQKKzxVQ0U5OD4gIjxVMzE0Qj48VTMxNTA+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgS0FFTAorPFVDRTk5PiAiPFUzMTRCPjxVMzE1MD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBLQUVMRworPFVDRTlBPiAiPFUzMTRCPjxVMzE1MD48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBLQUVMTQorPFVDRTlCPiAiPFUzMTRCPjxVMzE1MD48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBLQUVMQgorPFVDRTlDPiAiPFUzMTRCPjxVMzE1MD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBLQUVMUworPFVDRTlEPiAiPFUzMTRCPjxVMzE1MD48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBLQUVMVAorPFVDRTlFPiAiPFUzMTRCPjxVMzE1MD48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBLQUVMUAorPFVDRTlGPiAiPFUzMTRCPjxVMzE1MD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBLQUVMSAorPFVDRUEwPiAiPFUzMTRCPjxVMzE1MD48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBLQUVNCis8VUNFQTE+ICI8VTMxNEI+PFUzMTUwPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEtBRUIKKzxVQ0VBMj4gIjxVMzE0Qj48VTMxNTA+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgS0FFQlMKKzxVQ0VBMz4gIjxVMzE0Qj48VTMxNTA+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgS0FFUworPFVDRUE0PiAiPFUzMTRCPjxVMzE1MD48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBLQUVTUworPFVDRUE1PiAiPFUzMTRCPjxVMzE1MD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBLQUVORworPFVDRUE2PiAiPFUzMTRCPjxVMzE1MD48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBLQUVKCis8VUNFQTc+ICI8VTMxNEI+PFUzMTUwPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEtBRUMKKzxVQ0VBOD4gIjxVMzE0Qj48VTMxNTA+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0FFSworPFVDRUE5PiAiPFUzMTRCPjxVMzE1MD48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBLQUVUCis8VUNFQUE+ICI8VTMxNEI+PFUzMTUwPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEtBRVAKKzxVQ0VBQj4gIjxVMzE0Qj48VTMxNTA+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0FFSAorPFVDRUFDPiAiPFUzMTRCPjxVMzE1MT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQQorPFVDRUFEPiAiPFUzMTRCPjxVMzE1MT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUFHCis8VUNFQUU+ICI8VTMxNEI+PFUzMTUxPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQUdHCis8VUNFQUY+ICI8VTMxNEI+PFUzMTUxPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQUdTCis8VUNFQjA+ICI8VTMxNEI+PFUzMTUxPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQU4KKzxVQ0VCMT4gIjxVMzE0Qj48VTMxNTE+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lBTkkKKzxVQ0VCMj4gIjxVMzE0Qj48VTMxNTE+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lBTkgKKzxVQ0VCMz4gIjxVMzE0Qj48VTMxNTE+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lBRAorPFVDRUI0PiAiPFUzMTRCPjxVMzE1MT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUFMCis8VUNFQjU+ICI8VTMxNEI+PFUzMTUxPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQUxHCis8VUNFQjY+ICI8VTMxNEI+PFUzMTUxPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQUxNCis8VUNFQjc+ICI8VTMxNEI+PFUzMTUxPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQUxCCis8VUNFQjg+ICI8VTMxNEI+PFUzMTUxPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQUxTCis8VUNFQjk+ICI8VTMxNEI+PFUzMTUxPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQUxUCis8VUNFQkE+ICI8VTMxNEI+PFUzMTUxPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQUxQCis8VUNFQkI+ICI8VTMxNEI+PFUzMTUxPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQUxICis8VUNFQkM+ICI8VTMxNEI+PFUzMTUxPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQU0KKzxVQ0VCRD4gIjxVMzE0Qj48VTMxNTE+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lBQgorPFVDRUJFPiAiPFUzMTRCPjxVMzE1MT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUFCUworPFVDRUJGPiAiPFUzMTRCPjxVMzE1MT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUFTCis8VUNFQzA+ICI8VTMxNEI+PFUzMTUxPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQVNTCis8VUNFQzE+ICI8VTMxNEI+PFUzMTUxPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQU5HCis8VUNFQzI+ICI8VTMxNEI+PFUzMTUxPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQUoKKzxVQ0VDMz4gIjxVMzE0Qj48VTMxNTE+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lBQworPFVDRUM0PiAiPFUzMTRCPjxVMzE1MT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUFLCis8VUNFQzU+ICI8VTMxNEI+PFUzMTUxPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQVQKKzxVQ0VDNj4gIjxVMzE0Qj48VTMxNTE+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lBUAorPFVDRUM3PiAiPFUzMTRCPjxVMzE1MT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUFICis8VUNFQzg+ICI8VTMxNEI+PFUzMTUyPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lBRQorPFVDRUM5PiAiPFUzMTRCPjxVMzE1Mj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUFFRworPFVDRUNBPiAiPFUzMTRCPjxVMzE1Mj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUFFR0cKKzxVQ0VDQj4gIjxVMzE0Qj48VTMxNTI+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lBRUdTCis8VUNFQ0M+ICI8VTMxNEI+PFUzMTUyPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQUVOCis8VUNFQ0Q+ICI8VTMxNEI+PFUzMTUyPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQUVOSQorPFVDRUNFPiAiPFUzMTRCPjxVMzE1Mj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUFFTkgKKzxVQ0VDRj4gIjxVMzE0Qj48VTMxNTI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lBRUQKKzxVQ0VEMD4gIjxVMzE0Qj48VTMxNTI+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lBRUwKKzxVQ0VEMT4gIjxVMzE0Qj48VTMxNTI+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lBRUxHCis8VUNFRDI+ICI8VTMxNEI+PFUzMTUyPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQUVMTQorPFVDRUQzPiAiPFUzMTRCPjxVMzE1Mj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUFFTEIKKzxVQ0VEND4gIjxVMzE0Qj48VTMxNTI+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lBRUxTCis8VUNFRDU+ICI8VTMxNEI+PFUzMTUyPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQUVMVAorPFVDRUQ2PiAiPFUzMTRCPjxVMzE1Mj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUFFTFAKKzxVQ0VENz4gIjxVMzE0Qj48VTMxNTI+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lBRUxICis8VUNFRDg+ICI8VTMxNEI+PFUzMTUyPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQUVNCis8VUNFRDk+ICI8VTMxNEI+PFUzMTUyPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQUVCCis8VUNFREE+ICI8VTMxNEI+PFUzMTUyPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQUVCUworPFVDRURCPiAiPFUzMTRCPjxVMzE1Mj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUFFUworPFVDRURDPiAiPFUzMTRCPjxVMzE1Mj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUFFU1MKKzxVQ0VERD4gIjxVMzE0Qj48VTMxNTI+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lBRU5HCis8VUNFREU+ICI8VTMxNEI+PFUzMTUyPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQUVKCis8VUNFREY+ICI8VTMxNEI+PFUzMTUyPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQUVDCis8VUNFRTA+ICI8VTMxNEI+PFUzMTUyPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQUVLCis8VUNFRTE+ICI8VTMxNEI+PFUzMTUyPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQUVUCis8VUNFRTI+ICI8VTMxNEI+PFUzMTUyPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQUVQCis8VUNFRTM+ICI8VTMxNEI+PFUzMTUyPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZQUVICis8VUNFRTQ+ICI8VTMxNEI+PFUzMTUzPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VPCis8VUNFRTU+ICI8VTMxNEI+PFUzMTUzPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEtFT0cKKzxVQ0VFNj4gIjxVMzE0Qj48VTMxNTM+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VPR0cKKzxVQ0VFNz4gIjxVMzE0Qj48VTMxNTM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VPR1MKKzxVQ0VFOD4gIjxVMzE0Qj48VTMxNTM+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VPTgorPFVDRUU5PiAiPFUzMTRCPjxVMzE1Mz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBLRU9OSQorPFVDRUVBPiAiPFUzMTRCPjxVMzE1Mz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBLRU9OSAorPFVDRUVCPiAiPFUzMTRCPjxVMzE1Mz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBLRU9ECis8VUNFRUM+ICI8VTMxNEI+PFUzMTUzPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEtFT0wKKzxVQ0VFRD4gIjxVMzE0Qj48VTMxNTM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VPTEcKKzxVQ0VFRT4gIjxVMzE0Qj48VTMxNTM+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VPTE0KKzxVQ0VFRj4gIjxVMzE0Qj48VTMxNTM+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VPTEIKKzxVQ0VGMD4gIjxVMzE0Qj48VTMxNTM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VPTFMKKzxVQ0VGMT4gIjxVMzE0Qj48VTMxNTM+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VPTFQKKzxVQ0VGMj4gIjxVMzE0Qj48VTMxNTM+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VPTFAKKzxVQ0VGMz4gIjxVMzE0Qj48VTMxNTM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VPTEgKKzxVQ0VGND4gIjxVMzE0Qj48VTMxNTM+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VPTQorPFVDRUY1PiAiPFUzMTRCPjxVMzE1Mz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBLRU9CCis8VUNFRjY+ICI8VTMxNEI+PFUzMTUzPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEtFT0JTCis8VUNFRjc+ICI8VTMxNEI+PFUzMTUzPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEtFT1MKKzxVQ0VGOD4gIjxVMzE0Qj48VTMxNTM+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VPU1MKKzxVQ0VGOT4gIjxVMzE0Qj48VTMxNTM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VPTkcKKzxVQ0VGQT4gIjxVMzE0Qj48VTMxNTM+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VPSgorPFVDRUZCPiAiPFUzMTRCPjxVMzE1Mz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBLRU9DCis8VUNFRkM+ICI8VTMxNEI+PFUzMTUzPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEtFT0sKKzxVQ0VGRD4gIjxVMzE0Qj48VTMxNTM+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VPVAorPFVDRUZFPiAiPFUzMTRCPjxVMzE1Mz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBLRU9QCis8VUNFRkY+ICI8VTMxNEI+PFUzMTUzPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEtFT0gKKzxVQ0YwMD4gIjxVMzE0Qj48VTMxNTQ+IgklIEhBTkdVTCBTWUxMQUJMRSBLRQorPFVDRjAxPiAiPFUzMTRCPjxVMzE1ND48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBLRUcKKzxVQ0YwMj4gIjxVMzE0Qj48VTMxNTQ+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VHRworPFVDRjAzPiAiPFUzMTRCPjxVMzE1ND48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBLRUdTCis8VUNGMDQ+ICI8VTMxNEI+PFUzMTU0PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEtFTgorPFVDRjA1PiAiPFUzMTRCPjxVMzE1ND48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBLRU5JCis8VUNGMDY+ICI8VTMxNEI+PFUzMTU0PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEtFTkgKKzxVQ0YwNz4gIjxVMzE0Qj48VTMxNTQ+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VECis8VUNGMDg+ICI8VTMxNEI+PFUzMTU0PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEtFTAorPFVDRjA5PiAiPFUzMTRCPjxVMzE1ND48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBLRUxHCis8VUNGMEE+ICI8VTMxNEI+PFUzMTU0PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEtFTE0KKzxVQ0YwQj4gIjxVMzE0Qj48VTMxNTQ+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VMQgorPFVDRjBDPiAiPFUzMTRCPjxVMzE1ND48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBLRUxTCis8VUNGMEQ+ICI8VTMxNEI+PFUzMTU0PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEtFTFQKKzxVQ0YwRT4gIjxVMzE0Qj48VTMxNTQ+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VMUAorPFVDRjBGPiAiPFUzMTRCPjxVMzE1ND48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBLRUxICis8VUNGMTA+ICI8VTMxNEI+PFUzMTU0PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEtFTQorPFVDRjExPiAiPFUzMTRCPjxVMzE1ND48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBLRUIKKzxVQ0YxMj4gIjxVMzE0Qj48VTMxNTQ+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VCUworPFVDRjEzPiAiPFUzMTRCPjxVMzE1ND48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBLRVMKKzxVQ0YxND4gIjxVMzE0Qj48VTMxNTQ+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VTUworPFVDRjE1PiAiPFUzMTRCPjxVMzE1ND48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBLRU5HCis8VUNGMTY+ICI8VTMxNEI+PFUzMTU0PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEtFSgorPFVDRjE3PiAiPFUzMTRCPjxVMzE1ND48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBLRUMKKzxVQ0YxOD4gIjxVMzE0Qj48VTMxNTQ+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VLCis8VUNGMTk+ICI8VTMxNEI+PFUzMTU0PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEtFVAorPFVDRjFBPiAiPFUzMTRCPjxVMzE1ND48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBLRVAKKzxVQ0YxQj4gIjxVMzE0Qj48VTMxNTQ+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VICis8VUNGMUM+ICI8VTMxNEI+PFUzMTU1PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lFTworPFVDRjFEPiAiPFUzMTRCPjxVMzE1NT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUVPRworPFVDRjFFPiAiPFUzMTRCPjxVMzE1NT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUVPR0cKKzxVQ0YxRj4gIjxVMzE0Qj48VTMxNTU+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lFT0dTCis8VUNGMjA+ICI8VTMxNEI+PFUzMTU1PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEtZRU9OCis8VUNGMjE+ICI8VTMxNEI+PFUzMTU1PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZRU9OSQorPFVDRjIyPiAiPFUzMTRCPjxVMzE1NT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUVPTkgKKzxVQ0YyMz4gIjxVMzE0Qj48VTMxNTU+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lFT0QKKzxVQ0YyND4gIjxVMzE0Qj48VTMxNTU+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lFT0wKKzxVQ0YyNT4gIjxVMzE0Qj48VTMxNTU+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lFT0xHCis8VUNGMjY+ICI8VTMxNEI+PFUzMTU1PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEtZRU9MTQorPFVDRjI3PiAiPFUzMTRCPjxVMzE1NT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUVPTEIKKzxVQ0YyOD4gIjxVMzE0Qj48VTMxNTU+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lFT0xTCis8VUNGMjk+ICI8VTMxNEI+PFUzMTU1PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZRU9MVAorPFVDRjJBPiAiPFUzMTRCPjxVMzE1NT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUVPTFAKKzxVQ0YyQj4gIjxVMzE0Qj48VTMxNTU+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lFT0xICis8VUNGMkM+ICI8VTMxNEI+PFUzMTU1PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZRU9NCis8VUNGMkQ+ICI8VTMxNEI+PFUzMTU1PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEtZRU9CCis8VUNGMkU+ICI8VTMxNEI+PFUzMTU1PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEtZRU9CUworPFVDRjJGPiAiPFUzMTRCPjxVMzE1NT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUVPUworPFVDRjMwPiAiPFUzMTRCPjxVMzE1NT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUVPU1MKKzxVQ0YzMT4gIjxVMzE0Qj48VTMxNTU+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lFT05HCis8VUNGMzI+ICI8VTMxNEI+PFUzMTU1PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEtZRU9KCis8VUNGMzM+ICI8VTMxNEI+PFUzMTU1PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZRU9DCis8VUNGMzQ+ICI8VTMxNEI+PFUzMTU1PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEtZRU9LCis8VUNGMzU+ICI8VTMxNEI+PFUzMTU1PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEtZRU9UCis8VUNGMzY+ICI8VTMxNEI+PFUzMTU1PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEtZRU9QCis8VUNGMzc+ICI8VTMxNEI+PFUzMTU1PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZRU9ICis8VUNGMzg+ICI8VTMxNEI+PFUzMTU2PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lFCis8VUNGMzk+ICI8VTMxNEI+PFUzMTU2PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZRUcKKzxVQ0YzQT4gIjxVMzE0Qj48VTMxNTY+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lFR0cKKzxVQ0YzQj4gIjxVMzE0Qj48VTMxNTY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lFR1MKKzxVQ0YzQz4gIjxVMzE0Qj48VTMxNTY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lFTgorPFVDRjNEPiAiPFUzMTRCPjxVMzE1Nj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUVOSQorPFVDRjNFPiAiPFUzMTRCPjxVMzE1Nj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUVOSAorPFVDRjNGPiAiPFUzMTRCPjxVMzE1Nj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUVECis8VUNGNDA+ICI8VTMxNEI+PFUzMTU2PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZRUwKKzxVQ0Y0MT4gIjxVMzE0Qj48VTMxNTY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lFTEcKKzxVQ0Y0Mj4gIjxVMzE0Qj48VTMxNTY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lFTE0KKzxVQ0Y0Mz4gIjxVMzE0Qj48VTMxNTY+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lFTEIKKzxVQ0Y0ND4gIjxVMzE0Qj48VTMxNTY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lFTFMKKzxVQ0Y0NT4gIjxVMzE0Qj48VTMxNTY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lFTFQKKzxVQ0Y0Nj4gIjxVMzE0Qj48VTMxNTY+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lFTFAKKzxVQ0Y0Nz4gIjxVMzE0Qj48VTMxNTY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lFTEgKKzxVQ0Y0OD4gIjxVMzE0Qj48VTMxNTY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lFTQorPFVDRjQ5PiAiPFUzMTRCPjxVMzE1Nj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUVCCis8VUNGNEE+ICI8VTMxNEI+PFUzMTU2PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEtZRUJTCis8VUNGNEI+ICI8VTMxNEI+PFUzMTU2PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZRVMKKzxVQ0Y0Qz4gIjxVMzE0Qj48VTMxNTY+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lFU1MKKzxVQ0Y0RD4gIjxVMzE0Qj48VTMxNTY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lFTkcKKzxVQ0Y0RT4gIjxVMzE0Qj48VTMxNTY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lFSgorPFVDRjRGPiAiPFUzMTRCPjxVMzE1Nj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUVDCis8VUNGNTA+ICI8VTMxNEI+PFUzMTU2PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEtZRUsKKzxVQ0Y1MT4gIjxVMzE0Qj48VTMxNTY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lFVAorPFVDRjUyPiAiPFUzMTRCPjxVMzE1Nj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUVQCis8VUNGNTM+ICI8VTMxNEI+PFUzMTU2PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZRUgKKzxVQ0Y1ND4gIjxVMzE0Qj48VTMxNTc+IgklIEhBTkdVTCBTWUxMQUJMRSBLTworPFVDRjU1PiAiPFUzMTRCPjxVMzE1Nz48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBLT0cKKzxVQ0Y1Nj4gIjxVMzE0Qj48VTMxNTc+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgS09HRworPFVDRjU3PiAiPFUzMTRCPjxVMzE1Nz48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBLT0dTCis8VUNGNTg+ICI8VTMxNEI+PFUzMTU3PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEtPTgorPFVDRjU5PiAiPFUzMTRCPjxVMzE1Nz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBLT05JCis8VUNGNUE+ICI8VTMxNEI+PFUzMTU3PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEtPTkgKKzxVQ0Y1Qj4gIjxVMzE0Qj48VTMxNTc+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgS09ECis8VUNGNUM+ICI8VTMxNEI+PFUzMTU3PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEtPTAorPFVDRjVEPiAiPFUzMTRCPjxVMzE1Nz48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBLT0xHCis8VUNGNUU+ICI8VTMxNEI+PFUzMTU3PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEtPTE0KKzxVQ0Y1Rj4gIjxVMzE0Qj48VTMxNTc+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgS09MQgorPFVDRjYwPiAiPFUzMTRCPjxVMzE1Nz48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBLT0xTCis8VUNGNjE+ICI8VTMxNEI+PFUzMTU3PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEtPTFQKKzxVQ0Y2Mj4gIjxVMzE0Qj48VTMxNTc+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgS09MUAorPFVDRjYzPiAiPFUzMTRCPjxVMzE1Nz48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBLT0xICis8VUNGNjQ+ICI8VTMxNEI+PFUzMTU3PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEtPTQorPFVDRjY1PiAiPFUzMTRCPjxVMzE1Nz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBLT0IKKzxVQ0Y2Nj4gIjxVMzE0Qj48VTMxNTc+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgS09CUworPFVDRjY3PiAiPFUzMTRCPjxVMzE1Nz48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBLT1MKKzxVQ0Y2OD4gIjxVMzE0Qj48VTMxNTc+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgS09TUworPFVDRjY5PiAiPFUzMTRCPjxVMzE1Nz48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBLT05HCis8VUNGNkE+ICI8VTMxNEI+PFUzMTU3PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEtPSgorPFVDRjZCPiAiPFUzMTRCPjxVMzE1Nz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBLT0MKKzxVQ0Y2Qz4gIjxVMzE0Qj48VTMxNTc+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgS09LCis8VUNGNkQ+ICI8VTMxNEI+PFUzMTU3PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEtPVAorPFVDRjZFPiAiPFUzMTRCPjxVMzE1Nz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBLT1AKKzxVQ0Y2Rj4gIjxVMzE0Qj48VTMxNTc+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgS09ICis8VUNGNzA+ICI8VTMxNEI+PFUzMTU4PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBCis8VUNGNzE+ICI8VTMxNEI+PFUzMTU4PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEtXQUcKKzxVQ0Y3Mj4gIjxVMzE0Qj48VTMxNTg+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBR0cKKzxVQ0Y3Mz4gIjxVMzE0Qj48VTMxNTg+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBR1MKKzxVQ0Y3ND4gIjxVMzE0Qj48VTMxNTg+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBTgorPFVDRjc1PiAiPFUzMTRCPjxVMzE1OD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0FOSQorPFVDRjc2PiAiPFUzMTRCPjxVMzE1OD48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0FOSAorPFVDRjc3PiAiPFUzMTRCPjxVMzE1OD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0FECis8VUNGNzg+ICI8VTMxNEI+PFUzMTU4PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEtXQUwKKzxVQ0Y3OT4gIjxVMzE0Qj48VTMxNTg+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBTEcKKzxVQ0Y3QT4gIjxVMzE0Qj48VTMxNTg+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBTE0KKzxVQ0Y3Qj4gIjxVMzE0Qj48VTMxNTg+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBTEIKKzxVQ0Y3Qz4gIjxVMzE0Qj48VTMxNTg+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBTFMKKzxVQ0Y3RD4gIjxVMzE0Qj48VTMxNTg+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBTFQKKzxVQ0Y3RT4gIjxVMzE0Qj48VTMxNTg+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBTFAKKzxVQ0Y3Rj4gIjxVMzE0Qj48VTMxNTg+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBTEgKKzxVQ0Y4MD4gIjxVMzE0Qj48VTMxNTg+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBTQorPFVDRjgxPiAiPFUzMTRCPjxVMzE1OD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0FCCis8VUNGODI+ICI8VTMxNEI+PFUzMTU4PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEtXQUJTCis8VUNGODM+ICI8VTMxNEI+PFUzMTU4PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEtXQVMKKzxVQ0Y4ND4gIjxVMzE0Qj48VTMxNTg+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBU1MKKzxVQ0Y4NT4gIjxVMzE0Qj48VTMxNTg+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBTkcKKzxVQ0Y4Nj4gIjxVMzE0Qj48VTMxNTg+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBSgorPFVDRjg3PiAiPFUzMTRCPjxVMzE1OD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0FDCis8VUNGODg+ICI8VTMxNEI+PFUzMTU4PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEtXQUsKKzxVQ0Y4OT4gIjxVMzE0Qj48VTMxNTg+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBVAorPFVDRjhBPiAiPFUzMTRCPjxVMzE1OD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0FQCis8VUNGOEI+ICI8VTMxNEI+PFUzMTU4PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEtXQUgKKzxVQ0Y4Qz4gIjxVMzE0Qj48VTMxNTk+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0FFCis8VUNGOEQ+ICI8VTMxNEI+PFUzMTU5PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEtXQUVHCis8VUNGOEU+ICI8VTMxNEI+PFUzMTU5PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEtXQUVHRworPFVDRjhGPiAiPFUzMTRCPjxVMzE1OT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0FFR1MKKzxVQ0Y5MD4gIjxVMzE0Qj48VTMxNTk+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBRU4KKzxVQ0Y5MT4gIjxVMzE0Qj48VTMxNTk+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBRU5JCis8VUNGOTI+ICI8VTMxNEI+PFUzMTU5PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEtXQUVOSAorPFVDRjkzPiAiPFUzMTRCPjxVMzE1OT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0FFRAorPFVDRjk0PiAiPFUzMTRCPjxVMzE1OT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0FFTAorPFVDRjk1PiAiPFUzMTRCPjxVMzE1OT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0FFTEcKKzxVQ0Y5Nj4gIjxVMzE0Qj48VTMxNTk+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBRUxNCis8VUNGOTc+ICI8VTMxNEI+PFUzMTU5PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEtXQUVMQgorPFVDRjk4PiAiPFUzMTRCPjxVMzE1OT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0FFTFMKKzxVQ0Y5OT4gIjxVMzE0Qj48VTMxNTk+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBRUxUCis8VUNGOUE+ICI8VTMxNEI+PFUzMTU5PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEtXQUVMUAorPFVDRjlCPiAiPFUzMTRCPjxVMzE1OT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0FFTEgKKzxVQ0Y5Qz4gIjxVMzE0Qj48VTMxNTk+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBRU0KKzxVQ0Y5RD4gIjxVMzE0Qj48VTMxNTk+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBRUIKKzxVQ0Y5RT4gIjxVMzE0Qj48VTMxNTk+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBRUJTCis8VUNGOUY+ICI8VTMxNEI+PFUzMTU5PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEtXQUVTCis8VUNGQTA+ICI8VTMxNEI+PFUzMTU5PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEtXQUVTUworPFVDRkExPiAiPFUzMTRCPjxVMzE1OT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0FFTkcKKzxVQ0ZBMj4gIjxVMzE0Qj48VTMxNTk+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBRUoKKzxVQ0ZBMz4gIjxVMzE0Qj48VTMxNTk+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBRUMKKzxVQ0ZBND4gIjxVMzE0Qj48VTMxNTk+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBRUsKKzxVQ0ZBNT4gIjxVMzE0Qj48VTMxNTk+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBRVQKKzxVQ0ZBNj4gIjxVMzE0Qj48VTMxNTk+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBRVAKKzxVQ0ZBNz4gIjxVMzE0Qj48VTMxNTk+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dBRUgKKzxVQ0ZBOD4gIjxVMzE0Qj48VTMxNUE+IgklIEhBTkdVTCBTWUxMQUJMRSBLT0UKKzxVQ0ZBOT4gIjxVMzE0Qj48VTMxNUE+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgS09FRworPFVDRkFBPiAiPFUzMTRCPjxVMzE1QT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBLT0VHRworPFVDRkFCPiAiPFUzMTRCPjxVMzE1QT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBLT0VHUworPFVDRkFDPiAiPFUzMTRCPjxVMzE1QT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBLT0VOCis8VUNGQUQ+ICI8VTMxNEI+PFUzMTVBPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEtPRU5JCis8VUNGQUU+ICI8VTMxNEI+PFUzMTVBPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEtPRU5ICis8VUNGQUY+ICI8VTMxNEI+PFUzMTVBPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEtPRUQKKzxVQ0ZCMD4gIjxVMzE0Qj48VTMxNUE+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgS09FTAorPFVDRkIxPiAiPFUzMTRCPjxVMzE1QT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBLT0VMRworPFVDRkIyPiAiPFUzMTRCPjxVMzE1QT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBLT0VMTQorPFVDRkIzPiAiPFUzMTRCPjxVMzE1QT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBLT0VMQgorPFVDRkI0PiAiPFUzMTRCPjxVMzE1QT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBLT0VMUworPFVDRkI1PiAiPFUzMTRCPjxVMzE1QT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBLT0VMVAorPFVDRkI2PiAiPFUzMTRCPjxVMzE1QT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBLT0VMUAorPFVDRkI3PiAiPFUzMTRCPjxVMzE1QT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBLT0VMSAorPFVDRkI4PiAiPFUzMTRCPjxVMzE1QT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBLT0VNCis8VUNGQjk+ICI8VTMxNEI+PFUzMTVBPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEtPRUIKKzxVQ0ZCQT4gIjxVMzE0Qj48VTMxNUE+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgS09FQlMKKzxVQ0ZCQj4gIjxVMzE0Qj48VTMxNUE+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgS09FUworPFVDRkJDPiAiPFUzMTRCPjxVMzE1QT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBLT0VTUworPFVDRkJEPiAiPFUzMTRCPjxVMzE1QT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBLT0VORworPFVDRkJFPiAiPFUzMTRCPjxVMzE1QT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBLT0VKCis8VUNGQkY+ICI8VTMxNEI+PFUzMTVBPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEtPRUMKKzxVQ0ZDMD4gIjxVMzE0Qj48VTMxNUE+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgS09FSworPFVDRkMxPiAiPFUzMTRCPjxVMzE1QT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBLT0VUCis8VUNGQzI+ICI8VTMxNEI+PFUzMTVBPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEtPRVAKKzxVQ0ZDMz4gIjxVMzE0Qj48VTMxNUE+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgS09FSAorPFVDRkM0PiAiPFUzMTRCPjxVMzE1Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEtZTworPFVDRkM1PiAiPFUzMTRCPjxVMzE1Qj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBLWU9HCis8VUNGQzY+ICI8VTMxNEI+PFUzMTVCPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEtZT0dHCis8VUNGQzc+ICI8VTMxNEI+PFUzMTVCPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEtZT0dTCis8VUNGQzg+ICI8VTMxNEI+PFUzMTVCPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEtZT04KKzxVQ0ZDOT4gIjxVMzE0Qj48VTMxNUI+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lPTkkKKzxVQ0ZDQT4gIjxVMzE0Qj48VTMxNUI+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lPTkgKKzxVQ0ZDQj4gIjxVMzE0Qj48VTMxNUI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lPRAorPFVDRkNDPiAiPFUzMTRCPjxVMzE1Qj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBLWU9MCis8VUNGQ0Q+ICI8VTMxNEI+PFUzMTVCPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZT0xHCis8VUNGQ0U+ICI8VTMxNEI+PFUzMTVCPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEtZT0xNCis8VUNGQ0Y+ICI8VTMxNEI+PFUzMTVCPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEtZT0xCCis8VUNGRDA+ICI8VTMxNEI+PFUzMTVCPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEtZT0xTCis8VUNGRDE+ICI8VTMxNEI+PFUzMTVCPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZT0xUCis8VUNGRDI+ICI8VTMxNEI+PFUzMTVCPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEtZT0xQCis8VUNGRDM+ICI8VTMxNEI+PFUzMTVCPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEtZT0xICis8VUNGRDQ+ICI8VTMxNEI+PFUzMTVCPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZT00KKzxVQ0ZENT4gIjxVMzE0Qj48VTMxNUI+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lPQgorPFVDRkQ2PiAiPFUzMTRCPjxVMzE1Qj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBLWU9CUworPFVDRkQ3PiAiPFUzMTRCPjxVMzE1Qj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBLWU9TCis8VUNGRDg+ICI8VTMxNEI+PFUzMTVCPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEtZT1NTCis8VUNGRDk+ICI8VTMxNEI+PFUzMTVCPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEtZT05HCis8VUNGREE+ICI8VTMxNEI+PFUzMTVCPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEtZT0oKKzxVQ0ZEQj4gIjxVMzE0Qj48VTMxNUI+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lPQworPFVDRkRDPiAiPFUzMTRCPjxVMzE1Qj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBLWU9LCis8VUNGREQ+ICI8VTMxNEI+PFUzMTVCPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEtZT1QKKzxVQ0ZERT4gIjxVMzE0Qj48VTMxNUI+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lPUAorPFVDRkRGPiAiPFUzMTRCPjxVMzE1Qj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBLWU9ICis8VUNGRTA+ICI8VTMxNEI+PFUzMTVDPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1UKKzxVQ0ZFMT4gIjxVMzE0Qj48VTMxNUM+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1VHCis8VUNGRTI+ICI8VTMxNEI+PFUzMTVDPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEtVR0cKKzxVQ0ZFMz4gIjxVMzE0Qj48VTMxNUM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1VHUworPFVDRkU0PiAiPFUzMTRCPjxVMzE1Qz48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBLVU4KKzxVQ0ZFNT4gIjxVMzE0Qj48VTMxNUM+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1VOSQorPFVDRkU2PiAiPFUzMTRCPjxVMzE1Qz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBLVU5ICis8VUNGRTc+ICI8VTMxNEI+PFUzMTVDPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEtVRAorPFVDRkU4PiAiPFUzMTRCPjxVMzE1Qz48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBLVUwKKzxVQ0ZFOT4gIjxVMzE0Qj48VTMxNUM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1VMRworPFVDRkVBPiAiPFUzMTRCPjxVMzE1Qz48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBLVUxNCis8VUNGRUI+ICI8VTMxNEI+PFUzMTVDPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEtVTEIKKzxVQ0ZFQz4gIjxVMzE0Qj48VTMxNUM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1VMUworPFVDRkVEPiAiPFUzMTRCPjxVMzE1Qz48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBLVUxUCis8VUNGRUU+ICI8VTMxNEI+PFUzMTVDPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEtVTFAKKzxVQ0ZFRj4gIjxVMzE0Qj48VTMxNUM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1VMSAorPFVDRkYwPiAiPFUzMTRCPjxVMzE1Qz48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBLVU0KKzxVQ0ZGMT4gIjxVMzE0Qj48VTMxNUM+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1VCCis8VUNGRjI+ICI8VTMxNEI+PFUzMTVDPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEtVQlMKKzxVQ0ZGMz4gIjxVMzE0Qj48VTMxNUM+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1VTCis8VUNGRjQ+ICI8VTMxNEI+PFUzMTVDPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEtVU1MKKzxVQ0ZGNT4gIjxVMzE0Qj48VTMxNUM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1VORworPFVDRkY2PiAiPFUzMTRCPjxVMzE1Qz48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBLVUoKKzxVQ0ZGNz4gIjxVMzE0Qj48VTMxNUM+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1VDCis8VUNGRjg+ICI8VTMxNEI+PFUzMTVDPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEtVSworPFVDRkY5PiAiPFUzMTRCPjxVMzE1Qz48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBLVVQKKzxVQ0ZGQT4gIjxVMzE0Qj48VTMxNUM+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1VQCis8VUNGRkI+ICI8VTMxNEI+PFUzMTVDPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEtVSAorPFVDRkZDPiAiPFUzMTRCPjxVMzE1RD4iCSUgSEFOR1VMIFNZTExBQkxFIEtXRU8KKzxVQ0ZGRD4gIjxVMzE0Qj48VTMxNUQ+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dFT0cKKzxVQ0ZGRT4gIjxVMzE0Qj48VTMxNUQ+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dFT0dHCis8VUNGRkY+ICI8VTMxNEI+PFUzMTVEPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEtXRU9HUworPFVEMDAwPiAiPFUzMTRCPjxVMzE1RD48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0VPTgorPFVEMDAxPiAiPFUzMTRCPjxVMzE1RD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0VPTkkKKzxVRDAwMj4gIjxVMzE0Qj48VTMxNUQ+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dFT05ICis8VUQwMDM+ICI8VTMxNEI+PFUzMTVEPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEtXRU9ECis8VUQwMDQ+ICI8VTMxNEI+PFUzMTVEPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEtXRU9MCis8VUQwMDU+ICI8VTMxNEI+PFUzMTVEPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEtXRU9MRworPFVEMDA2PiAiPFUzMTRCPjxVMzE1RD48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0VPTE0KKzxVRDAwNz4gIjxVMzE0Qj48VTMxNUQ+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dFT0xCCis8VUQwMDg+ICI8VTMxNEI+PFUzMTVEPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEtXRU9MUworPFVEMDA5PiAiPFUzMTRCPjxVMzE1RD48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0VPTFQKKzxVRDAwQT4gIjxVMzE0Qj48VTMxNUQ+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dFT0xQCis8VUQwMEI+ICI8VTMxNEI+PFUzMTVEPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEtXRU9MSAorPFVEMDBDPiAiPFUzMTRCPjxVMzE1RD48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0VPTQorPFVEMDBEPiAiPFUzMTRCPjxVMzE1RD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0VPQgorPFVEMDBFPiAiPFUzMTRCPjxVMzE1RD48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0VPQlMKKzxVRDAwRj4gIjxVMzE0Qj48VTMxNUQ+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dFT1MKKzxVRDAxMD4gIjxVMzE0Qj48VTMxNUQ+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dFT1NTCis8VUQwMTE+ICI8VTMxNEI+PFUzMTVEPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEtXRU9ORworPFVEMDEyPiAiPFUzMTRCPjxVMzE1RD48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0VPSgorPFVEMDEzPiAiPFUzMTRCPjxVMzE1RD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0VPQworPFVEMDE0PiAiPFUzMTRCPjxVMzE1RD48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0VPSworPFVEMDE1PiAiPFUzMTRCPjxVMzE1RD48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0VPVAorPFVEMDE2PiAiPFUzMTRCPjxVMzE1RD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0VPUAorPFVEMDE3PiAiPFUzMTRCPjxVMzE1RD48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0VPSAorPFVEMDE4PiAiPFUzMTRCPjxVMzE1RT4iCSUgSEFOR1VMIFNZTExBQkxFIEtXRQorPFVEMDE5PiAiPFUzMTRCPjxVMzE1RT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0VHCis8VUQwMUE+ICI8VTMxNEI+PFUzMTVFPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEtXRUdHCis8VUQwMUI+ICI8VTMxNEI+PFUzMTVFPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEtXRUdTCis8VUQwMUM+ICI8VTMxNEI+PFUzMTVFPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEtXRU4KKzxVRDAxRD4gIjxVMzE0Qj48VTMxNUU+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dFTkkKKzxVRDAxRT4gIjxVMzE0Qj48VTMxNUU+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dFTkgKKzxVRDAxRj4gIjxVMzE0Qj48VTMxNUU+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dFRAorPFVEMDIwPiAiPFUzMTRCPjxVMzE1RT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0VMCis8VUQwMjE+ICI8VTMxNEI+PFUzMTVFPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEtXRUxHCis8VUQwMjI+ICI8VTMxNEI+PFUzMTVFPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEtXRUxNCis8VUQwMjM+ICI8VTMxNEI+PFUzMTVFPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEtXRUxCCis8VUQwMjQ+ICI8VTMxNEI+PFUzMTVFPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEtXRUxTCis8VUQwMjU+ICI8VTMxNEI+PFUzMTVFPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEtXRUxUCis8VUQwMjY+ICI8VTMxNEI+PFUzMTVFPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEtXRUxQCis8VUQwMjc+ICI8VTMxNEI+PFUzMTVFPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEtXRUxICis8VUQwMjg+ICI8VTMxNEI+PFUzMTVFPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEtXRU0KKzxVRDAyOT4gIjxVMzE0Qj48VTMxNUU+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dFQgorPFVEMDJBPiAiPFUzMTRCPjxVMzE1RT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0VCUworPFVEMDJCPiAiPFUzMTRCPjxVMzE1RT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0VTCis8VUQwMkM+ICI8VTMxNEI+PFUzMTVFPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEtXRVNTCis8VUQwMkQ+ICI8VTMxNEI+PFUzMTVFPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEtXRU5HCis8VUQwMkU+ICI8VTMxNEI+PFUzMTVFPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEtXRUoKKzxVRDAyRj4gIjxVMzE0Qj48VTMxNUU+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dFQworPFVEMDMwPiAiPFUzMTRCPjxVMzE1RT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0VLCis8VUQwMzE+ICI8VTMxNEI+PFUzMTVFPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEtXRVQKKzxVRDAzMj4gIjxVMzE0Qj48VTMxNUU+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dFUAorPFVEMDMzPiAiPFUzMTRCPjxVMzE1RT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0VICis8VUQwMzQ+ICI8VTMxNEI+PFUzMTVGPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dJCis8VUQwMzU+ICI8VTMxNEI+PFUzMTVGPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEtXSUcKKzxVRDAzNj4gIjxVMzE0Qj48VTMxNUY+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dJR0cKKzxVRDAzNz4gIjxVMzE0Qj48VTMxNUY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dJR1MKKzxVRDAzOD4gIjxVMzE0Qj48VTMxNUY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dJTgorPFVEMDM5PiAiPFUzMTRCPjxVMzE1Rj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0lOSQorPFVEMDNBPiAiPFUzMTRCPjxVMzE1Rj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0lOSAorPFVEMDNCPiAiPFUzMTRCPjxVMzE1Rj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0lECis8VUQwM0M+ICI8VTMxNEI+PFUzMTVGPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEtXSUwKKzxVRDAzRD4gIjxVMzE0Qj48VTMxNUY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dJTEcKKzxVRDAzRT4gIjxVMzE0Qj48VTMxNUY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dJTE0KKzxVRDAzRj4gIjxVMzE0Qj48VTMxNUY+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dJTEIKKzxVRDA0MD4gIjxVMzE0Qj48VTMxNUY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dJTFMKKzxVRDA0MT4gIjxVMzE0Qj48VTMxNUY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dJTFQKKzxVRDA0Mj4gIjxVMzE0Qj48VTMxNUY+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dJTFAKKzxVRDA0Mz4gIjxVMzE0Qj48VTMxNUY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dJTEgKKzxVRDA0ND4gIjxVMzE0Qj48VTMxNUY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dJTQorPFVEMDQ1PiAiPFUzMTRCPjxVMzE1Rj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0lCCis8VUQwNDY+ICI8VTMxNEI+PFUzMTVGPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEtXSUJTCis8VUQwNDc+ICI8VTMxNEI+PFUzMTVGPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEtXSVMKKzxVRDA0OD4gIjxVMzE0Qj48VTMxNUY+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dJU1MKKzxVRDA0OT4gIjxVMzE0Qj48VTMxNUY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dJTkcKKzxVRDA0QT4gIjxVMzE0Qj48VTMxNUY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dJSgorPFVEMDRCPiAiPFUzMTRCPjxVMzE1Rj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0lDCis8VUQwNEM+ICI8VTMxNEI+PFUzMTVGPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEtXSUsKKzxVRDA0RD4gIjxVMzE0Qj48VTMxNUY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1dJVAorPFVEMDRFPiAiPFUzMTRCPjxVMzE1Rj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBLV0lQCis8VUQwNEY+ICI8VTMxNEI+PFUzMTVGPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEtXSUgKKzxVRDA1MD4gIjxVMzE0Qj48VTMxNjA+IgklIEhBTkdVTCBTWUxMQUJMRSBLWVUKKzxVRDA1MT4gIjxVMzE0Qj48VTMxNjA+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lVRworPFVEMDUyPiAiPFUzMTRCPjxVMzE2MD48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBLWVVHRworPFVEMDUzPiAiPFUzMTRCPjxVMzE2MD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBLWVVHUworPFVEMDU0PiAiPFUzMTRCPjxVMzE2MD48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBLWVVOCis8VUQwNTU+ICI8VTMxNEI+PFUzMTYwPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZVU5JCis8VUQwNTY+ICI8VTMxNEI+PFUzMTYwPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEtZVU5ICis8VUQwNTc+ICI8VTMxNEI+PFUzMTYwPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEtZVUQKKzxVRDA1OD4gIjxVMzE0Qj48VTMxNjA+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lVTAorPFVEMDU5PiAiPFUzMTRCPjxVMzE2MD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBLWVVMRworPFVEMDVBPiAiPFUzMTRCPjxVMzE2MD48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBLWVVMTQorPFVEMDVCPiAiPFUzMTRCPjxVMzE2MD48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBLWVVMQgorPFVEMDVDPiAiPFUzMTRCPjxVMzE2MD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBLWVVMUworPFVEMDVEPiAiPFUzMTRCPjxVMzE2MD48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBLWVVMVAorPFVEMDVFPiAiPFUzMTRCPjxVMzE2MD48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBLWVVMUAorPFVEMDVGPiAiPFUzMTRCPjxVMzE2MD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBLWVVMSAorPFVEMDYwPiAiPFUzMTRCPjxVMzE2MD48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBLWVVNCis8VUQwNjE+ICI8VTMxNEI+PFUzMTYwPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEtZVUIKKzxVRDA2Mj4gIjxVMzE0Qj48VTMxNjA+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lVQlMKKzxVRDA2Mz4gIjxVMzE0Qj48VTMxNjA+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lVUworPFVEMDY0PiAiPFUzMTRCPjxVMzE2MD48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBLWVVTUworPFVEMDY1PiAiPFUzMTRCPjxVMzE2MD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBLWVVORworPFVEMDY2PiAiPFUzMTRCPjxVMzE2MD48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBLWVVKCis8VUQwNjc+ICI8VTMxNEI+PFUzMTYwPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZVUMKKzxVRDA2OD4gIjxVMzE0Qj48VTMxNjA+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lVSworPFVEMDY5PiAiPFUzMTRCPjxVMzE2MD48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBLWVVUCis8VUQwNkE+ICI8VTMxNEI+PFUzMTYwPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEtZVVAKKzxVRDA2Qj4gIjxVMzE0Qj48VTMxNjA+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lVSAorPFVEMDZDPiAiPFUzMTRCPjxVMzE2MT4iCSUgSEFOR1VMIFNZTExBQkxFIEtFVQorPFVEMDZEPiAiPFUzMTRCPjxVMzE2MT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBLRVVHCis8VUQwNkU+ICI8VTMxNEI+PFUzMTYxPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEtFVUdHCis8VUQwNkY+ICI8VTMxNEI+PFUzMTYxPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEtFVUdTCis8VUQwNzA+ICI8VTMxNEI+PFUzMTYxPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEtFVU4KKzxVRDA3MT4gIjxVMzE0Qj48VTMxNjE+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VVTkkKKzxVRDA3Mj4gIjxVMzE0Qj48VTMxNjE+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VVTkgKKzxVRDA3Mz4gIjxVMzE0Qj48VTMxNjE+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VVRAorPFVEMDc0PiAiPFUzMTRCPjxVMzE2MT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBLRVVMCis8VUQwNzU+ICI8VTMxNEI+PFUzMTYxPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEtFVUxHCis8VUQwNzY+ICI8VTMxNEI+PFUzMTYxPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEtFVUxNCis8VUQwNzc+ICI8VTMxNEI+PFUzMTYxPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEtFVUxCCis8VUQwNzg+ICI8VTMxNEI+PFUzMTYxPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEtFVUxTCis8VUQwNzk+ICI8VTMxNEI+PFUzMTYxPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEtFVUxUCis8VUQwN0E+ICI8VTMxNEI+PFUzMTYxPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEtFVUxQCis8VUQwN0I+ICI8VTMxNEI+PFUzMTYxPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEtFVUxICis8VUQwN0M+ICI8VTMxNEI+PFUzMTYxPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEtFVU0KKzxVRDA3RD4gIjxVMzE0Qj48VTMxNjE+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VVQgorPFVEMDdFPiAiPFUzMTRCPjxVMzE2MT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBLRVVCUworPFVEMDdGPiAiPFUzMTRCPjxVMzE2MT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBLRVVTCis8VUQwODA+ICI8VTMxNEI+PFUzMTYxPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEtFVVNTCis8VUQwODE+ICI8VTMxNEI+PFUzMTYxPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEtFVU5HCis8VUQwODI+ICI8VTMxNEI+PFUzMTYxPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEtFVUoKKzxVRDA4Mz4gIjxVMzE0Qj48VTMxNjE+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VVQworPFVEMDg0PiAiPFUzMTRCPjxVMzE2MT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBLRVVLCis8VUQwODU+ICI8VTMxNEI+PFUzMTYxPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEtFVVQKKzxVRDA4Nj4gIjxVMzE0Qj48VTMxNjE+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0VVUAorPFVEMDg3PiAiPFUzMTRCPjxVMzE2MT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBLRVVICis8VUQwODg+ICI8VTMxNEI+PFUzMTYyPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lJCis8VUQwODk+ICI8VTMxNEI+PFUzMTYyPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZSUcKKzxVRDA4QT4gIjxVMzE0Qj48VTMxNjI+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lJR0cKKzxVRDA4Qj4gIjxVMzE0Qj48VTMxNjI+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lJR1MKKzxVRDA4Qz4gIjxVMzE0Qj48VTMxNjI+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lJTgorPFVEMDhEPiAiPFUzMTRCPjxVMzE2Mj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUlOSQorPFVEMDhFPiAiPFUzMTRCPjxVMzE2Mj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUlOSAorPFVEMDhGPiAiPFUzMTRCPjxVMzE2Mj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUlECis8VUQwOTA+ICI8VTMxNEI+PFUzMTYyPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZSUwKKzxVRDA5MT4gIjxVMzE0Qj48VTMxNjI+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lJTEcKKzxVRDA5Mj4gIjxVMzE0Qj48VTMxNjI+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lJTE0KKzxVRDA5Mz4gIjxVMzE0Qj48VTMxNjI+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lJTEIKKzxVRDA5ND4gIjxVMzE0Qj48VTMxNjI+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lJTFMKKzxVRDA5NT4gIjxVMzE0Qj48VTMxNjI+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lJTFQKKzxVRDA5Nj4gIjxVMzE0Qj48VTMxNjI+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lJTFAKKzxVRDA5Nz4gIjxVMzE0Qj48VTMxNjI+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lJTEgKKzxVRDA5OD4gIjxVMzE0Qj48VTMxNjI+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lJTQorPFVEMDk5PiAiPFUzMTRCPjxVMzE2Mj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUlCCis8VUQwOUE+ICI8VTMxNEI+PFUzMTYyPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEtZSUJTCis8VUQwOUI+ICI8VTMxNEI+PFUzMTYyPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZSVMKKzxVRDA5Qz4gIjxVMzE0Qj48VTMxNjI+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lJU1MKKzxVRDA5RD4gIjxVMzE0Qj48VTMxNjI+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lJTkcKKzxVRDA5RT4gIjxVMzE0Qj48VTMxNjI+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lJSgorPFVEMDlGPiAiPFUzMTRCPjxVMzE2Mj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUlDCis8VUQwQTA+ICI8VTMxNEI+PFUzMTYyPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEtZSUsKKzxVRDBBMT4gIjxVMzE0Qj48VTMxNjI+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgS1lJVAorPFVEMEEyPiAiPFUzMTRCPjxVMzE2Mj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBLWUlQCis8VUQwQTM+ICI8VTMxNEI+PFUzMTYyPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEtZSUgKKzxVRDBBND4gIjxVMzE0Qj48VTMxNjM+IgklIEhBTkdVTCBTWUxMQUJMRSBLSQorPFVEMEE1PiAiPFUzMTRCPjxVMzE2Mz48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBLSUcKKzxVRDBBNj4gIjxVMzE0Qj48VTMxNjM+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0lHRworPFVEMEE3PiAiPFUzMTRCPjxVMzE2Mz48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBLSUdTCis8VUQwQTg+ICI8VTMxNEI+PFUzMTYzPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEtJTgorPFVEMEE5PiAiPFUzMTRCPjxVMzE2Mz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBLSU5JCis8VUQwQUE+ICI8VTMxNEI+PFUzMTYzPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEtJTkgKKzxVRDBBQj4gIjxVMzE0Qj48VTMxNjM+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgS0lECis8VUQwQUM+ICI8VTMxNEI+PFUzMTYzPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEtJTAorPFVEMEFEPiAiPFUzMTRCPjxVMzE2Mz48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBLSUxHCis8VUQwQUU+ICI8VTMxNEI+PFUzMTYzPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEtJTE0KKzxVRDBBRj4gIjxVMzE0Qj48VTMxNjM+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0lMQgorPFVEMEIwPiAiPFUzMTRCPjxVMzE2Mz48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBLSUxTCis8VUQwQjE+ICI8VTMxNEI+PFUzMTYzPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEtJTFQKKzxVRDBCMj4gIjxVMzE0Qj48VTMxNjM+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0lMUAorPFVEMEIzPiAiPFUzMTRCPjxVMzE2Mz48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBLSUxICis8VUQwQjQ+ICI8VTMxNEI+PFUzMTYzPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEtJTQorPFVEMEI1PiAiPFUzMTRCPjxVMzE2Mz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBLSUIKKzxVRDBCNj4gIjxVMzE0Qj48VTMxNjM+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgS0lCUworPFVEMEI3PiAiPFUzMTRCPjxVMzE2Mz48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBLSVMKKzxVRDBCOD4gIjxVMzE0Qj48VTMxNjM+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgS0lTUworPFVEMEI5PiAiPFUzMTRCPjxVMzE2Mz48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBLSU5HCis8VUQwQkE+ICI8VTMxNEI+PFUzMTYzPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEtJSgorPFVEMEJCPiAiPFUzMTRCPjxVMzE2Mz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBLSUMKKzxVRDBCQz4gIjxVMzE0Qj48VTMxNjM+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0lLCis8VUQwQkQ+ICI8VTMxNEI+PFUzMTYzPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEtJVAorPFVEMEJFPiAiPFUzMTRCPjxVMzE2Mz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBLSVAKKzxVRDBCRj4gIjxVMzE0Qj48VTMxNjM+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgS0lICis8VUQwQzA+ICI8VTMxNEM+PFUzMTRGPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEEKKzxVRDBDMT4gIjxVMzE0Qz48VTMxNEY+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEFHCis8VUQwQzI+ICI8VTMxNEM+PFUzMTRGPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFRBR0cKKzxVRDBDMz4gIjxVMzE0Qz48VTMxNEY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEFHUworPFVEMEM0PiAiPFUzMTRDPjxVMzE0Rj48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBUQU4KKzxVRDBDNT4gIjxVMzE0Qz48VTMxNEY+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgVEFOSQorPFVEMEM2PiAiPFUzMTRDPjxVMzE0Rj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBUQU5ICis8VUQwQzc+ICI8VTMxNEM+PFUzMTRGPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFRBRAorPFVEMEM4PiAiPFUzMTRDPjxVMzE0Rj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBUQUwKKzxVRDBDOT4gIjxVMzE0Qz48VTMxNEY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEFMRworPFVEMENBPiAiPFUzMTRDPjxVMzE0Rj48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBUQUxNCis8VUQwQ0I+ICI8VTMxNEM+PFUzMTRGPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFRBTEIKKzxVRDBDQz4gIjxVMzE0Qz48VTMxNEY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEFMUworPFVEMENEPiAiPFUzMTRDPjxVMzE0Rj48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBUQUxUCis8VUQwQ0U+ICI8VTMxNEM+PFUzMTRGPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFRBTFAKKzxVRDBDRj4gIjxVMzE0Qz48VTMxNEY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEFMSAorPFVEMEQwPiAiPFUzMTRDPjxVMzE0Rj48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBUQU0KKzxVRDBEMT4gIjxVMzE0Qz48VTMxNEY+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEFCCis8VUQwRDI+ICI8VTMxNEM+PFUzMTRGPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFRBQlMKKzxVRDBEMz4gIjxVMzE0Qz48VTMxNEY+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgVEFTCis8VUQwRDQ+ICI8VTMxNEM+PFUzMTRGPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFRBU1MKKzxVRDBENT4gIjxVMzE0Qz48VTMxNEY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgVEFORworPFVEMEQ2PiAiPFUzMTRDPjxVMzE0Rj48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBUQUoKKzxVRDBENz4gIjxVMzE0Qz48VTMxNEY+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEFDCis8VUQwRDg+ICI8VTMxNEM+PFUzMTRGPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFRBSworPFVEMEQ5PiAiPFUzMTRDPjxVMzE0Rj48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBUQVQKKzxVRDBEQT4gIjxVMzE0Qz48VTMxNEY+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEFQCis8VUQwREI+ICI8VTMxNEM+PFUzMTRGPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFRBSAorPFVEMERDPiAiPFUzMTRDPjxVMzE1MD4iCSUgSEFOR1VMIFNZTExBQkxFIFRBRQorPFVEMEREPiAiPFUzMTRDPjxVMzE1MD48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBUQUVHCis8VUQwREU+ICI8VTMxNEM+PFUzMTUwPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFRBRUdHCis8VUQwREY+ICI8VTMxNEM+PFUzMTUwPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFRBRUdTCis8VUQwRTA+ICI8VTMxNEM+PFUzMTUwPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFRBRU4KKzxVRDBFMT4gIjxVMzE0Qz48VTMxNTA+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgVEFFTkkKKzxVRDBFMj4gIjxVMzE0Qz48VTMxNTA+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgVEFFTkgKKzxVRDBFMz4gIjxVMzE0Qz48VTMxNTA+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgVEFFRAorPFVEMEU0PiAiPFUzMTRDPjxVMzE1MD48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBUQUVMCis8VUQwRTU+ICI8VTMxNEM+PFUzMTUwPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFRBRUxHCis8VUQwRTY+ICI8VTMxNEM+PFUzMTUwPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFRBRUxNCis8VUQwRTc+ICI8VTMxNEM+PFUzMTUwPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFRBRUxCCis8VUQwRTg+ICI8VTMxNEM+PFUzMTUwPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFRBRUxTCis8VUQwRTk+ICI8VTMxNEM+PFUzMTUwPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFRBRUxUCis8VUQwRUE+ICI8VTMxNEM+PFUzMTUwPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFRBRUxQCis8VUQwRUI+ICI8VTMxNEM+PFUzMTUwPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFRBRUxICis8VUQwRUM+ICI8VTMxNEM+PFUzMTUwPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFRBRU0KKzxVRDBFRD4gIjxVMzE0Qz48VTMxNTA+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEFFQgorPFVEMEVFPiAiPFUzMTRDPjxVMzE1MD48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBUQUVCUworPFVEMEVGPiAiPFUzMTRDPjxVMzE1MD48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBUQUVTCis8VUQwRjA+ICI8VTMxNEM+PFUzMTUwPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFRBRVNTCis8VUQwRjE+ICI8VTMxNEM+PFUzMTUwPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFRBRU5HCis8VUQwRjI+ICI8VTMxNEM+PFUzMTUwPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFRBRUoKKzxVRDBGMz4gIjxVMzE0Qz48VTMxNTA+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEFFQworPFVEMEY0PiAiPFUzMTRDPjxVMzE1MD48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBUQUVLCis8VUQwRjU+ICI8VTMxNEM+PFUzMTUwPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFRBRVQKKzxVRDBGNj4gIjxVMzE0Qz48VTMxNTA+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEFFUAorPFVEMEY3PiAiPFUzMTRDPjxVMzE1MD48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBUQUVICis8VUQwRjg+ICI8VTMxNEM+PFUzMTUxPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBCis8VUQwRjk+ICI8VTMxNEM+PFUzMTUxPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFRZQUcKKzxVRDBGQT4gIjxVMzE0Qz48VTMxNTE+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBR0cKKzxVRDBGQj4gIjxVMzE0Qz48VTMxNTE+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBR1MKKzxVRDBGQz4gIjxVMzE0Qz48VTMxNTE+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBTgorPFVEMEZEPiAiPFUzMTRDPjxVMzE1MT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUFOSQorPFVEMEZFPiAiPFUzMTRDPjxVMzE1MT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUFOSAorPFVEMEZGPiAiPFUzMTRDPjxVMzE1MT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUFECis8VUQxMDA+ICI8VTMxNEM+PFUzMTUxPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFRZQUwKKzxVRDEwMT4gIjxVMzE0Qz48VTMxNTE+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBTEcKKzxVRDEwMj4gIjxVMzE0Qz48VTMxNTE+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBTE0KKzxVRDEwMz4gIjxVMzE0Qz48VTMxNTE+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBTEIKKzxVRDEwND4gIjxVMzE0Qz48VTMxNTE+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBTFMKKzxVRDEwNT4gIjxVMzE0Qz48VTMxNTE+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBTFQKKzxVRDEwNj4gIjxVMzE0Qz48VTMxNTE+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBTFAKKzxVRDEwNz4gIjxVMzE0Qz48VTMxNTE+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBTEgKKzxVRDEwOD4gIjxVMzE0Qz48VTMxNTE+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBTQorPFVEMTA5PiAiPFUzMTRDPjxVMzE1MT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUFCCis8VUQxMEE+ICI8VTMxNEM+PFUzMTUxPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFRZQUJTCis8VUQxMEI+ICI8VTMxNEM+PFUzMTUxPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFRZQVMKKzxVRDEwQz4gIjxVMzE0Qz48VTMxNTE+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBU1MKKzxVRDEwRD4gIjxVMzE0Qz48VTMxNTE+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBTkcKKzxVRDEwRT4gIjxVMzE0Qz48VTMxNTE+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBSgorPFVEMTBGPiAiPFUzMTRDPjxVMzE1MT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUFDCis8VUQxMTA+ICI8VTMxNEM+PFUzMTUxPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFRZQUsKKzxVRDExMT4gIjxVMzE0Qz48VTMxNTE+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBVAorPFVEMTEyPiAiPFUzMTRDPjxVMzE1MT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUFQCis8VUQxMTM+ICI8VTMxNEM+PFUzMTUxPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFRZQUgKKzxVRDExND4gIjxVMzE0Qz48VTMxNTI+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUFFCis8VUQxMTU+ICI8VTMxNEM+PFUzMTUyPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFRZQUVHCis8VUQxMTY+ICI8VTMxNEM+PFUzMTUyPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFRZQUVHRworPFVEMTE3PiAiPFUzMTRDPjxVMzE1Mj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUFFR1MKKzxVRDExOD4gIjxVMzE0Qz48VTMxNTI+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBRU4KKzxVRDExOT4gIjxVMzE0Qz48VTMxNTI+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBRU5JCis8VUQxMUE+ICI8VTMxNEM+PFUzMTUyPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFRZQUVOSAorPFVEMTFCPiAiPFUzMTRDPjxVMzE1Mj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUFFRAorPFVEMTFDPiAiPFUzMTRDPjxVMzE1Mj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUFFTAorPFVEMTFEPiAiPFUzMTRDPjxVMzE1Mj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUFFTEcKKzxVRDExRT4gIjxVMzE0Qz48VTMxNTI+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBRUxNCis8VUQxMUY+ICI8VTMxNEM+PFUzMTUyPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFRZQUVMQgorPFVEMTIwPiAiPFUzMTRDPjxVMzE1Mj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUFFTFMKKzxVRDEyMT4gIjxVMzE0Qz48VTMxNTI+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBRUxUCis8VUQxMjI+ICI8VTMxNEM+PFUzMTUyPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFRZQUVMUAorPFVEMTIzPiAiPFUzMTRDPjxVMzE1Mj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUFFTEgKKzxVRDEyND4gIjxVMzE0Qz48VTMxNTI+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBRU0KKzxVRDEyNT4gIjxVMzE0Qz48VTMxNTI+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBRUIKKzxVRDEyNj4gIjxVMzE0Qz48VTMxNTI+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBRUJTCis8VUQxMjc+ICI8VTMxNEM+PFUzMTUyPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFRZQUVTCis8VUQxMjg+ICI8VTMxNEM+PFUzMTUyPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFRZQUVTUworPFVEMTI5PiAiPFUzMTRDPjxVMzE1Mj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUFFTkcKKzxVRDEyQT4gIjxVMzE0Qz48VTMxNTI+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBRUoKKzxVRDEyQj4gIjxVMzE0Qz48VTMxNTI+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBRUMKKzxVRDEyQz4gIjxVMzE0Qz48VTMxNTI+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBRUsKKzxVRDEyRD4gIjxVMzE0Qz48VTMxNTI+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBRVQKKzxVRDEyRT4gIjxVMzE0Qz48VTMxNTI+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBRVAKKzxVRDEyRj4gIjxVMzE0Qz48VTMxNTI+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlBRUgKKzxVRDEzMD4gIjxVMzE0Qz48VTMxNTM+IgklIEhBTkdVTCBTWUxMQUJMRSBURU8KKzxVRDEzMT4gIjxVMzE0Qz48VTMxNTM+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVPRworPFVEMTMyPiAiPFUzMTRDPjxVMzE1Mz48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBURU9HRworPFVEMTMzPiAiPFUzMTRDPjxVMzE1Mz48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBURU9HUworPFVEMTM0PiAiPFUzMTRDPjxVMzE1Mz48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBURU9OCis8VUQxMzU+ICI8VTMxNEM+PFUzMTUzPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFRFT05JCis8VUQxMzY+ICI8VTMxNEM+PFUzMTUzPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFRFT05ICis8VUQxMzc+ICI8VTMxNEM+PFUzMTUzPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFRFT0QKKzxVRDEzOD4gIjxVMzE0Qz48VTMxNTM+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVPTAorPFVEMTM5PiAiPFUzMTRDPjxVMzE1Mz48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBURU9MRworPFVEMTNBPiAiPFUzMTRDPjxVMzE1Mz48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBURU9MTQorPFVEMTNCPiAiPFUzMTRDPjxVMzE1Mz48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBURU9MQgorPFVEMTNDPiAiPFUzMTRDPjxVMzE1Mz48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBURU9MUworPFVEMTNEPiAiPFUzMTRDPjxVMzE1Mz48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBURU9MVAorPFVEMTNFPiAiPFUzMTRDPjxVMzE1Mz48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBURU9MUAorPFVEMTNGPiAiPFUzMTRDPjxVMzE1Mz48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBURU9MSAorPFVEMTQwPiAiPFUzMTRDPjxVMzE1Mz48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBURU9NCis8VUQxNDE+ICI8VTMxNEM+PFUzMTUzPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFRFT0IKKzxVRDE0Mj4gIjxVMzE0Qz48VTMxNTM+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVPQlMKKzxVRDE0Mz4gIjxVMzE0Qz48VTMxNTM+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVPUworPFVEMTQ0PiAiPFUzMTRDPjxVMzE1Mz48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBURU9TUworPFVEMTQ1PiAiPFUzMTRDPjxVMzE1Mz48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBURU9ORworPFVEMTQ2PiAiPFUzMTRDPjxVMzE1Mz48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBURU9KCis8VUQxNDc+ICI8VTMxNEM+PFUzMTUzPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFRFT0MKKzxVRDE0OD4gIjxVMzE0Qz48VTMxNTM+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVPSworPFVEMTQ5PiAiPFUzMTRDPjxVMzE1Mz48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBURU9UCis8VUQxNEE+ICI8VTMxNEM+PFUzMTUzPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFRFT1AKKzxVRDE0Qj4gIjxVMzE0Qz48VTMxNTM+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVPSAorPFVEMTRDPiAiPFUzMTRDPjxVMzE1ND4iCSUgSEFOR1VMIFNZTExBQkxFIFRFCis8VUQxNEQ+ICI8VTMxNEM+PFUzMTU0PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFRFRworPFVEMTRFPiAiPFUzMTRDPjxVMzE1ND48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBURUdHCis8VUQxNEY+ICI8VTMxNEM+PFUzMTU0PjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFRFR1MKKzxVRDE1MD4gIjxVMzE0Qz48VTMxNTQ+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVOCis8VUQxNTE+ICI8VTMxNEM+PFUzMTU0PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFRFTkkKKzxVRDE1Mj4gIjxVMzE0Qz48VTMxNTQ+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVOSAorPFVEMTUzPiAiPFUzMTRDPjxVMzE1ND48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBURUQKKzxVRDE1ND4gIjxVMzE0Qz48VTMxNTQ+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVMCis8VUQxNTU+ICI8VTMxNEM+PFUzMTU0PjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFRFTEcKKzxVRDE1Nj4gIjxVMzE0Qz48VTMxNTQ+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVMTQorPFVEMTU3PiAiPFUzMTRDPjxVMzE1ND48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBURUxCCis8VUQxNTg+ICI8VTMxNEM+PFUzMTU0PjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFRFTFMKKzxVRDE1OT4gIjxVMzE0Qz48VTMxNTQ+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVMVAorPFVEMTVBPiAiPFUzMTRDPjxVMzE1ND48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBURUxQCis8VUQxNUI+ICI8VTMxNEM+PFUzMTU0PjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFRFTEgKKzxVRDE1Qz4gIjxVMzE0Qz48VTMxNTQ+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVNCis8VUQxNUQ+ICI8VTMxNEM+PFUzMTU0PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFRFQgorPFVEMTVFPiAiPFUzMTRDPjxVMzE1ND48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBURUJTCis8VUQxNUY+ICI8VTMxNEM+PFUzMTU0PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFRFUworPFVEMTYwPiAiPFUzMTRDPjxVMzE1ND48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBURVNTCis8VUQxNjE+ICI8VTMxNEM+PFUzMTU0PjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFRFTkcKKzxVRDE2Mj4gIjxVMzE0Qz48VTMxNTQ+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVKCis8VUQxNjM+ICI8VTMxNEM+PFUzMTU0PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFRFQworPFVEMTY0PiAiPFUzMTRDPjxVMzE1ND48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBURUsKKzxVRDE2NT4gIjxVMzE0Qz48VTMxNTQ+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVUCis8VUQxNjY+ICI8VTMxNEM+PFUzMTU0PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFRFUAorPFVEMTY3PiAiPFUzMTRDPjxVMzE1ND48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBURUgKKzxVRDE2OD4gIjxVMzE0Qz48VTMxNTU+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUVPCis8VUQxNjk+ICI8VTMxNEM+PFUzMTU1PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFRZRU9HCis8VUQxNkE+ICI8VTMxNEM+PFUzMTU1PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFRZRU9HRworPFVEMTZCPiAiPFUzMTRDPjxVMzE1NT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUVPR1MKKzxVRDE2Qz4gIjxVMzE0Qz48VTMxNTU+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlFT04KKzxVRDE2RD4gIjxVMzE0Qz48VTMxNTU+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlFT05JCis8VUQxNkU+ICI8VTMxNEM+PFUzMTU1PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFRZRU9OSAorPFVEMTZGPiAiPFUzMTRDPjxVMzE1NT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUVPRAorPFVEMTcwPiAiPFUzMTRDPjxVMzE1NT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUVPTAorPFVEMTcxPiAiPFUzMTRDPjxVMzE1NT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUVPTEcKKzxVRDE3Mj4gIjxVMzE0Qz48VTMxNTU+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlFT0xNCis8VUQxNzM+ICI8VTMxNEM+PFUzMTU1PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFRZRU9MQgorPFVEMTc0PiAiPFUzMTRDPjxVMzE1NT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUVPTFMKKzxVRDE3NT4gIjxVMzE0Qz48VTMxNTU+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlFT0xUCis8VUQxNzY+ICI8VTMxNEM+PFUzMTU1PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFRZRU9MUAorPFVEMTc3PiAiPFUzMTRDPjxVMzE1NT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUVPTEgKKzxVRDE3OD4gIjxVMzE0Qz48VTMxNTU+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlFT00KKzxVRDE3OT4gIjxVMzE0Qz48VTMxNTU+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlFT0IKKzxVRDE3QT4gIjxVMzE0Qz48VTMxNTU+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlFT0JTCis8VUQxN0I+ICI8VTMxNEM+PFUzMTU1PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFRZRU9TCis8VUQxN0M+ICI8VTMxNEM+PFUzMTU1PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFRZRU9TUworPFVEMTdEPiAiPFUzMTRDPjxVMzE1NT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUVPTkcKKzxVRDE3RT4gIjxVMzE0Qz48VTMxNTU+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlFT0oKKzxVRDE3Rj4gIjxVMzE0Qz48VTMxNTU+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlFT0MKKzxVRDE4MD4gIjxVMzE0Qz48VTMxNTU+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlFT0sKKzxVRDE4MT4gIjxVMzE0Qz48VTMxNTU+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlFT1QKKzxVRDE4Mj4gIjxVMzE0Qz48VTMxNTU+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlFT1AKKzxVRDE4Mz4gIjxVMzE0Qz48VTMxNTU+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlFT0gKKzxVRDE4ND4gIjxVMzE0Qz48VTMxNTY+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUUKKzxVRDE4NT4gIjxVMzE0Qz48VTMxNTY+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlFRworPFVEMTg2PiAiPFUzMTRDPjxVMzE1Nj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUVHRworPFVEMTg3PiAiPFUzMTRDPjxVMzE1Nj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUVHUworPFVEMTg4PiAiPFUzMTRDPjxVMzE1Nj48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUVOCis8VUQxODk+ICI8VTMxNEM+PFUzMTU2PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFRZRU5JCis8VUQxOEE+ICI8VTMxNEM+PFUzMTU2PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFRZRU5ICis8VUQxOEI+ICI8VTMxNEM+PFUzMTU2PjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFRZRUQKKzxVRDE4Qz4gIjxVMzE0Qz48VTMxNTY+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlFTAorPFVEMThEPiAiPFUzMTRDPjxVMzE1Nj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUVMRworPFVEMThFPiAiPFUzMTRDPjxVMzE1Nj48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUVMTQorPFVEMThGPiAiPFUzMTRDPjxVMzE1Nj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUVMQgorPFVEMTkwPiAiPFUzMTRDPjxVMzE1Nj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUVMUworPFVEMTkxPiAiPFUzMTRDPjxVMzE1Nj48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUVMVAorPFVEMTkyPiAiPFUzMTRDPjxVMzE1Nj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUVMUAorPFVEMTkzPiAiPFUzMTRDPjxVMzE1Nj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUVMSAorPFVEMTk0PiAiPFUzMTRDPjxVMzE1Nj48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUVNCis8VUQxOTU+ICI8VTMxNEM+PFUzMTU2PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFRZRUIKKzxVRDE5Nj4gIjxVMzE0Qz48VTMxNTY+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlFQlMKKzxVRDE5Nz4gIjxVMzE0Qz48VTMxNTY+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlFUworPFVEMTk4PiAiPFUzMTRDPjxVMzE1Nj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUVTUworPFVEMTk5PiAiPFUzMTRDPjxVMzE1Nj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUVORworPFVEMTlBPiAiPFUzMTRDPjxVMzE1Nj48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUVKCis8VUQxOUI+ICI8VTMxNEM+PFUzMTU2PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFRZRUMKKzxVRDE5Qz4gIjxVMzE0Qz48VTMxNTY+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlFSworPFVEMTlEPiAiPFUzMTRDPjxVMzE1Nj48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUVUCis8VUQxOUU+ICI8VTMxNEM+PFUzMTU2PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFRZRVAKKzxVRDE5Rj4gIjxVMzE0Qz48VTMxNTY+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlFSAorPFVEMUEwPiAiPFUzMTRDPjxVMzE1Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFRPCis8VUQxQTE+ICI8VTMxNEM+PFUzMTU3PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFRPRworPFVEMUEyPiAiPFUzMTRDPjxVMzE1Nz48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBUT0dHCis8VUQxQTM+ICI8VTMxNEM+PFUzMTU3PjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFRPR1MKKzxVRDFBND4gIjxVMzE0Qz48VTMxNTc+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgVE9OCis8VUQxQTU+ICI8VTMxNEM+PFUzMTU3PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFRPTkkKKzxVRDFBNj4gIjxVMzE0Qz48VTMxNTc+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgVE9OSAorPFVEMUE3PiAiPFUzMTRDPjxVMzE1Nz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBUT0QKKzxVRDFBOD4gIjxVMzE0Qz48VTMxNTc+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgVE9MCis8VUQxQTk+ICI8VTMxNEM+PFUzMTU3PjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFRPTEcKKzxVRDFBQT4gIjxVMzE0Qz48VTMxNTc+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgVE9MTQorPFVEMUFCPiAiPFUzMTRDPjxVMzE1Nz48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBUT0xCCis8VUQxQUM+ICI8VTMxNEM+PFUzMTU3PjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFRPTFMKKzxVRDFBRD4gIjxVMzE0Qz48VTMxNTc+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgVE9MVAorPFVEMUFFPiAiPFUzMTRDPjxVMzE1Nz48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBUT0xQCis8VUQxQUY+ICI8VTMxNEM+PFUzMTU3PjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFRPTEgKKzxVRDFCMD4gIjxVMzE0Qz48VTMxNTc+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgVE9NCis8VUQxQjE+ICI8VTMxNEM+PFUzMTU3PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFRPQgorPFVEMUIyPiAiPFUzMTRDPjxVMzE1Nz48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBUT0JTCis8VUQxQjM+ICI8VTMxNEM+PFUzMTU3PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFRPUworPFVEMUI0PiAiPFUzMTRDPjxVMzE1Nz48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBUT1NTCis8VUQxQjU+ICI8VTMxNEM+PFUzMTU3PjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFRPTkcKKzxVRDFCNj4gIjxVMzE0Qz48VTMxNTc+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgVE9KCis8VUQxQjc+ICI8VTMxNEM+PFUzMTU3PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFRPQworPFVEMUI4PiAiPFUzMTRDPjxVMzE1Nz48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBUT0sKKzxVRDFCOT4gIjxVMzE0Qz48VTMxNTc+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgVE9UCis8VUQxQkE+ICI8VTMxNEM+PFUzMTU3PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFRPUAorPFVEMUJCPiAiPFUzMTRDPjxVMzE1Nz48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBUT0gKKzxVRDFCQz4gIjxVMzE0Qz48VTMxNTg+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0EKKzxVRDFCRD4gIjxVMzE0Qz48VTMxNTg+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdBRworPFVEMUJFPiAiPFUzMTRDPjxVMzE1OD48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FHRworPFVEMUJGPiAiPFUzMTRDPjxVMzE1OD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FHUworPFVEMUMwPiAiPFUzMTRDPjxVMzE1OD48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FOCis8VUQxQzE+ICI8VTMxNEM+PFUzMTU4PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFRXQU5JCis8VUQxQzI+ICI8VTMxNEM+PFUzMTU4PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFRXQU5ICis8VUQxQzM+ICI8VTMxNEM+PFUzMTU4PjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFRXQUQKKzxVRDFDND4gIjxVMzE0Qz48VTMxNTg+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdBTAorPFVEMUM1PiAiPFUzMTRDPjxVMzE1OD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FMRworPFVEMUM2PiAiPFUzMTRDPjxVMzE1OD48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FMTQorPFVEMUM3PiAiPFUzMTRDPjxVMzE1OD48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FMQgorPFVEMUM4PiAiPFUzMTRDPjxVMzE1OD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FMUworPFVEMUM5PiAiPFUzMTRDPjxVMzE1OD48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FMVAorPFVEMUNBPiAiPFUzMTRDPjxVMzE1OD48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FMUAorPFVEMUNCPiAiPFUzMTRDPjxVMzE1OD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FMSAorPFVEMUNDPiAiPFUzMTRDPjxVMzE1OD48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FNCis8VUQxQ0Q+ICI8VTMxNEM+PFUzMTU4PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFRXQUIKKzxVRDFDRT4gIjxVMzE0Qz48VTMxNTg+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdBQlMKKzxVRDFDRj4gIjxVMzE0Qz48VTMxNTg+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdBUworPFVEMUQwPiAiPFUzMTRDPjxVMzE1OD48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FTUworPFVEMUQxPiAiPFUzMTRDPjxVMzE1OD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FORworPFVEMUQyPiAiPFUzMTRDPjxVMzE1OD48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FKCis8VUQxRDM+ICI8VTMxNEM+PFUzMTU4PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFRXQUMKKzxVRDFEND4gIjxVMzE0Qz48VTMxNTg+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdBSworPFVEMUQ1PiAiPFUzMTRDPjxVMzE1OD48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FUCis8VUQxRDY+ICI8VTMxNEM+PFUzMTU4PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFRXQVAKKzxVRDFENz4gIjxVMzE0Qz48VTMxNTg+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdBSAorPFVEMUQ4PiAiPFUzMTRDPjxVMzE1OT4iCSUgSEFOR1VMIFNZTExBQkxFIFRXQUUKKzxVRDFEOT4gIjxVMzE0Qz48VTMxNTk+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdBRUcKKzxVRDFEQT4gIjxVMzE0Qz48VTMxNTk+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdBRUdHCis8VUQxREI+ICI8VTMxNEM+PFUzMTU5PjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFRXQUVHUworPFVEMURDPiAiPFUzMTRDPjxVMzE1OT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FFTgorPFVEMUREPiAiPFUzMTRDPjxVMzE1OT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FFTkkKKzxVRDFERT4gIjxVMzE0Qz48VTMxNTk+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdBRU5ICis8VUQxREY+ICI8VTMxNEM+PFUzMTU5PjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFRXQUVECis8VUQxRTA+ICI8VTMxNEM+PFUzMTU5PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFRXQUVMCis8VUQxRTE+ICI8VTMxNEM+PFUzMTU5PjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFRXQUVMRworPFVEMUUyPiAiPFUzMTRDPjxVMzE1OT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FFTE0KKzxVRDFFMz4gIjxVMzE0Qz48VTMxNTk+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdBRUxCCis8VUQxRTQ+ICI8VTMxNEM+PFUzMTU5PjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFRXQUVMUworPFVEMUU1PiAiPFUzMTRDPjxVMzE1OT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FFTFQKKzxVRDFFNj4gIjxVMzE0Qz48VTMxNTk+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdBRUxQCis8VUQxRTc+ICI8VTMxNEM+PFUzMTU5PjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFRXQUVMSAorPFVEMUU4PiAiPFUzMTRDPjxVMzE1OT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FFTQorPFVEMUU5PiAiPFUzMTRDPjxVMzE1OT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FFQgorPFVEMUVBPiAiPFUzMTRDPjxVMzE1OT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FFQlMKKzxVRDFFQj4gIjxVMzE0Qz48VTMxNTk+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdBRVMKKzxVRDFFQz4gIjxVMzE0Qz48VTMxNTk+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdBRVNTCis8VUQxRUQ+ICI8VTMxNEM+PFUzMTU5PjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFRXQUVORworPFVEMUVFPiAiPFUzMTRDPjxVMzE1OT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FFSgorPFVEMUVGPiAiPFUzMTRDPjxVMzE1OT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FFQworPFVEMUYwPiAiPFUzMTRDPjxVMzE1OT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FFSworPFVEMUYxPiAiPFUzMTRDPjxVMzE1OT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FFVAorPFVEMUYyPiAiPFUzMTRDPjxVMzE1OT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FFUAorPFVEMUYzPiAiPFUzMTRDPjxVMzE1OT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0FFSAorPFVEMUY0PiAiPFUzMTRDPjxVMzE1QT4iCSUgSEFOR1VMIFNZTExBQkxFIFRPRQorPFVEMUY1PiAiPFUzMTRDPjxVMzE1QT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBUT0VHCis8VUQxRjY+ICI8VTMxNEM+PFUzMTVBPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFRPRUdHCis8VUQxRjc+ICI8VTMxNEM+PFUzMTVBPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFRPRUdTCis8VUQxRjg+ICI8VTMxNEM+PFUzMTVBPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFRPRU4KKzxVRDFGOT4gIjxVMzE0Qz48VTMxNUE+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgVE9FTkkKKzxVRDFGQT4gIjxVMzE0Qz48VTMxNUE+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgVE9FTkgKKzxVRDFGQj4gIjxVMzE0Qz48VTMxNUE+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgVE9FRAorPFVEMUZDPiAiPFUzMTRDPjxVMzE1QT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBUT0VMCis8VUQxRkQ+ICI8VTMxNEM+PFUzMTVBPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFRPRUxHCis8VUQxRkU+ICI8VTMxNEM+PFUzMTVBPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFRPRUxNCis8VUQxRkY+ICI8VTMxNEM+PFUzMTVBPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFRPRUxCCis8VUQyMDA+ICI8VTMxNEM+PFUzMTVBPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFRPRUxTCis8VUQyMDE+ICI8VTMxNEM+PFUzMTVBPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFRPRUxUCis8VUQyMDI+ICI8VTMxNEM+PFUzMTVBPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFRPRUxQCis8VUQyMDM+ICI8VTMxNEM+PFUzMTVBPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFRPRUxICis8VUQyMDQ+ICI8VTMxNEM+PFUzMTVBPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFRPRU0KKzxVRDIwNT4gIjxVMzE0Qz48VTMxNUE+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgVE9FQgorPFVEMjA2PiAiPFUzMTRDPjxVMzE1QT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBUT0VCUworPFVEMjA3PiAiPFUzMTRDPjxVMzE1QT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBUT0VTCis8VUQyMDg+ICI8VTMxNEM+PFUzMTVBPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFRPRVNTCis8VUQyMDk+ICI8VTMxNEM+PFUzMTVBPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFRPRU5HCis8VUQyMEE+ICI8VTMxNEM+PFUzMTVBPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFRPRUoKKzxVRDIwQj4gIjxVMzE0Qz48VTMxNUE+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgVE9FQworPFVEMjBDPiAiPFUzMTRDPjxVMzE1QT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBUT0VLCis8VUQyMEQ+ICI8VTMxNEM+PFUzMTVBPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFRPRVQKKzxVRDIwRT4gIjxVMzE0Qz48VTMxNUE+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgVE9FUAorPFVEMjBGPiAiPFUzMTRDPjxVMzE1QT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBUT0VICis8VUQyMTA+ICI8VTMxNEM+PFUzMTVCPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlPCis8VUQyMTE+ICI8VTMxNEM+PFUzMTVCPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFRZT0cKKzxVRDIxMj4gIjxVMzE0Qz48VTMxNUI+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlPR0cKKzxVRDIxMz4gIjxVMzE0Qz48VTMxNUI+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlPR1MKKzxVRDIxND4gIjxVMzE0Qz48VTMxNUI+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlPTgorPFVEMjE1PiAiPFUzMTRDPjxVMzE1Qj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBUWU9OSQorPFVEMjE2PiAiPFUzMTRDPjxVMzE1Qj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBUWU9OSAorPFVEMjE3PiAiPFUzMTRDPjxVMzE1Qj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBUWU9ECis8VUQyMTg+ICI8VTMxNEM+PFUzMTVCPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFRZT0wKKzxVRDIxOT4gIjxVMzE0Qz48VTMxNUI+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlPTEcKKzxVRDIxQT4gIjxVMzE0Qz48VTMxNUI+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlPTE0KKzxVRDIxQj4gIjxVMzE0Qz48VTMxNUI+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlPTEIKKzxVRDIxQz4gIjxVMzE0Qz48VTMxNUI+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlPTFMKKzxVRDIxRD4gIjxVMzE0Qz48VTMxNUI+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlPTFQKKzxVRDIxRT4gIjxVMzE0Qz48VTMxNUI+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlPTFAKKzxVRDIxRj4gIjxVMzE0Qz48VTMxNUI+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlPTEgKKzxVRDIyMD4gIjxVMzE0Qz48VTMxNUI+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlPTQorPFVEMjIxPiAiPFUzMTRDPjxVMzE1Qj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBUWU9CCis8VUQyMjI+ICI8VTMxNEM+PFUzMTVCPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFRZT0JTCis8VUQyMjM+ICI8VTMxNEM+PFUzMTVCPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFRZT1MKKzxVRDIyND4gIjxVMzE0Qz48VTMxNUI+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlPU1MKKzxVRDIyNT4gIjxVMzE0Qz48VTMxNUI+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlPTkcKKzxVRDIyNj4gIjxVMzE0Qz48VTMxNUI+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlPSgorPFVEMjI3PiAiPFUzMTRDPjxVMzE1Qj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBUWU9DCis8VUQyMjg+ICI8VTMxNEM+PFUzMTVCPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFRZT0sKKzxVRDIyOT4gIjxVMzE0Qz48VTMxNUI+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlPVAorPFVEMjJBPiAiPFUzMTRDPjxVMzE1Qj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBUWU9QCis8VUQyMkI+ICI8VTMxNEM+PFUzMTVCPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFRZT0gKKzxVRDIyQz4gIjxVMzE0Qz48VTMxNUM+IgklIEhBTkdVTCBTWUxMQUJMRSBUVQorPFVEMjJEPiAiPFUzMTRDPjxVMzE1Qz48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBUVUcKKzxVRDIyRT4gIjxVMzE0Qz48VTMxNUM+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFVHRworPFVEMjJGPiAiPFUzMTRDPjxVMzE1Qz48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBUVUdTCis8VUQyMzA+ICI8VTMxNEM+PFUzMTVDPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFRVTgorPFVEMjMxPiAiPFUzMTRDPjxVMzE1Qz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBUVU5JCis8VUQyMzI+ICI8VTMxNEM+PFUzMTVDPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFRVTkgKKzxVRDIzMz4gIjxVMzE0Qz48VTMxNUM+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFVECis8VUQyMzQ+ICI8VTMxNEM+PFUzMTVDPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFRVTAorPFVEMjM1PiAiPFUzMTRDPjxVMzE1Qz48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBUVUxHCis8VUQyMzY+ICI8VTMxNEM+PFUzMTVDPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFRVTE0KKzxVRDIzNz4gIjxVMzE0Qz48VTMxNUM+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFVMQgorPFVEMjM4PiAiPFUzMTRDPjxVMzE1Qz48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBUVUxTCis8VUQyMzk+ICI8VTMxNEM+PFUzMTVDPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFRVTFQKKzxVRDIzQT4gIjxVMzE0Qz48VTMxNUM+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFVMUAorPFVEMjNCPiAiPFUzMTRDPjxVMzE1Qz48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBUVUxICis8VUQyM0M+ICI8VTMxNEM+PFUzMTVDPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFRVTQorPFVEMjNEPiAiPFUzMTRDPjxVMzE1Qz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBUVUIKKzxVRDIzRT4gIjxVMzE0Qz48VTMxNUM+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFVCUworPFVEMjNGPiAiPFUzMTRDPjxVMzE1Qz48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBUVVMKKzxVRDI0MD4gIjxVMzE0Qz48VTMxNUM+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFVTUworPFVEMjQxPiAiPFUzMTRDPjxVMzE1Qz48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBUVU5HCis8VUQyNDI+ICI8VTMxNEM+PFUzMTVDPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFRVSgorPFVEMjQzPiAiPFUzMTRDPjxVMzE1Qz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBUVUMKKzxVRDI0ND4gIjxVMzE0Qz48VTMxNUM+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFVLCis8VUQyNDU+ICI8VTMxNEM+PFUzMTVDPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFRVVAorPFVEMjQ2PiAiPFUzMTRDPjxVMzE1Qz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBUVVAKKzxVRDI0Nz4gIjxVMzE0Qz48VTMxNUM+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFVICis8VUQyNDg+ICI8VTMxNEM+PFUzMTVEPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdFTworPFVEMjQ5PiAiPFUzMTRDPjxVMzE1RD48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0VPRworPFVEMjRBPiAiPFUzMTRDPjxVMzE1RD48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0VPR0cKKzxVRDI0Qj4gIjxVMzE0Qz48VTMxNUQ+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdFT0dTCis8VUQyNEM+ICI8VTMxNEM+PFUzMTVEPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFRXRU9OCis8VUQyNEQ+ICI8VTMxNEM+PFUzMTVEPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFRXRU9OSQorPFVEMjRFPiAiPFUzMTRDPjxVMzE1RD48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0VPTkgKKzxVRDI0Rj4gIjxVMzE0Qz48VTMxNUQ+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdFT0QKKzxVRDI1MD4gIjxVMzE0Qz48VTMxNUQ+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdFT0wKKzxVRDI1MT4gIjxVMzE0Qz48VTMxNUQ+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdFT0xHCis8VUQyNTI+ICI8VTMxNEM+PFUzMTVEPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFRXRU9MTQorPFVEMjUzPiAiPFUzMTRDPjxVMzE1RD48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0VPTEIKKzxVRDI1ND4gIjxVMzE0Qz48VTMxNUQ+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdFT0xTCis8VUQyNTU+ICI8VTMxNEM+PFUzMTVEPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFRXRU9MVAorPFVEMjU2PiAiPFUzMTRDPjxVMzE1RD48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0VPTFAKKzxVRDI1Nz4gIjxVMzE0Qz48VTMxNUQ+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdFT0xICis8VUQyNTg+ICI8VTMxNEM+PFUzMTVEPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFRXRU9NCis8VUQyNTk+ICI8VTMxNEM+PFUzMTVEPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFRXRU9CCis8VUQyNUE+ICI8VTMxNEM+PFUzMTVEPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFRXRU9CUworPFVEMjVCPiAiPFUzMTRDPjxVMzE1RD48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0VPUworPFVEMjVDPiAiPFUzMTRDPjxVMzE1RD48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0VPU1MKKzxVRDI1RD4gIjxVMzE0Qz48VTMxNUQ+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdFT05HCis8VUQyNUU+ICI8VTMxNEM+PFUzMTVEPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFRXRU9KCis8VUQyNUY+ICI8VTMxNEM+PFUzMTVEPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFRXRU9DCis8VUQyNjA+ICI8VTMxNEM+PFUzMTVEPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFRXRU9LCis8VUQyNjE+ICI8VTMxNEM+PFUzMTVEPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFRXRU9UCis8VUQyNjI+ICI8VTMxNEM+PFUzMTVEPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFRXRU9QCis8VUQyNjM+ICI8VTMxNEM+PFUzMTVEPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFRXRU9ICis8VUQyNjQ+ICI8VTMxNEM+PFUzMTVFPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdFCis8VUQyNjU+ICI8VTMxNEM+PFUzMTVFPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFRXRUcKKzxVRDI2Nj4gIjxVMzE0Qz48VTMxNUU+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdFR0cKKzxVRDI2Nz4gIjxVMzE0Qz48VTMxNUU+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdFR1MKKzxVRDI2OD4gIjxVMzE0Qz48VTMxNUU+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdFTgorPFVEMjY5PiAiPFUzMTRDPjxVMzE1RT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0VOSQorPFVEMjZBPiAiPFUzMTRDPjxVMzE1RT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0VOSAorPFVEMjZCPiAiPFUzMTRDPjxVMzE1RT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0VECis8VUQyNkM+ICI8VTMxNEM+PFUzMTVFPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFRXRUwKKzxVRDI2RD4gIjxVMzE0Qz48VTMxNUU+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdFTEcKKzxVRDI2RT4gIjxVMzE0Qz48VTMxNUU+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdFTE0KKzxVRDI2Rj4gIjxVMzE0Qz48VTMxNUU+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdFTEIKKzxVRDI3MD4gIjxVMzE0Qz48VTMxNUU+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdFTFMKKzxVRDI3MT4gIjxVMzE0Qz48VTMxNUU+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdFTFQKKzxVRDI3Mj4gIjxVMzE0Qz48VTMxNUU+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdFTFAKKzxVRDI3Mz4gIjxVMzE0Qz48VTMxNUU+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdFTEgKKzxVRDI3ND4gIjxVMzE0Qz48VTMxNUU+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdFTQorPFVEMjc1PiAiPFUzMTRDPjxVMzE1RT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0VCCis8VUQyNzY+ICI8VTMxNEM+PFUzMTVFPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFRXRUJTCis8VUQyNzc+ICI8VTMxNEM+PFUzMTVFPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFRXRVMKKzxVRDI3OD4gIjxVMzE0Qz48VTMxNUU+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdFU1MKKzxVRDI3OT4gIjxVMzE0Qz48VTMxNUU+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdFTkcKKzxVRDI3QT4gIjxVMzE0Qz48VTMxNUU+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdFSgorPFVEMjdCPiAiPFUzMTRDPjxVMzE1RT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0VDCis8VUQyN0M+ICI8VTMxNEM+PFUzMTVFPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFRXRUsKKzxVRDI3RD4gIjxVMzE0Qz48VTMxNUU+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdFVAorPFVEMjdFPiAiPFUzMTRDPjxVMzE1RT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0VQCis8VUQyN0Y+ICI8VTMxNEM+PFUzMTVFPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFRXRUgKKzxVRDI4MD4gIjxVMzE0Qz48VTMxNUY+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0kKKzxVRDI4MT4gIjxVMzE0Qz48VTMxNUY+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdJRworPFVEMjgyPiAiPFUzMTRDPjxVMzE1Rj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0lHRworPFVEMjgzPiAiPFUzMTRDPjxVMzE1Rj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0lHUworPFVEMjg0PiAiPFUzMTRDPjxVMzE1Rj48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0lOCis8VUQyODU+ICI8VTMxNEM+PFUzMTVGPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFRXSU5JCis8VUQyODY+ICI8VTMxNEM+PFUzMTVGPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFRXSU5ICis8VUQyODc+ICI8VTMxNEM+PFUzMTVGPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFRXSUQKKzxVRDI4OD4gIjxVMzE0Qz48VTMxNUY+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdJTAorPFVEMjg5PiAiPFUzMTRDPjxVMzE1Rj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0lMRworPFVEMjhBPiAiPFUzMTRDPjxVMzE1Rj48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0lMTQorPFVEMjhCPiAiPFUzMTRDPjxVMzE1Rj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0lMQgorPFVEMjhDPiAiPFUzMTRDPjxVMzE1Rj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0lMUworPFVEMjhEPiAiPFUzMTRDPjxVMzE1Rj48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0lMVAorPFVEMjhFPiAiPFUzMTRDPjxVMzE1Rj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0lMUAorPFVEMjhGPiAiPFUzMTRDPjxVMzE1Rj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0lMSAorPFVEMjkwPiAiPFUzMTRDPjxVMzE1Rj48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0lNCis8VUQyOTE+ICI8VTMxNEM+PFUzMTVGPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFRXSUIKKzxVRDI5Mj4gIjxVMzE0Qz48VTMxNUY+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdJQlMKKzxVRDI5Mz4gIjxVMzE0Qz48VTMxNUY+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdJUworPFVEMjk0PiAiPFUzMTRDPjxVMzE1Rj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0lTUworPFVEMjk1PiAiPFUzMTRDPjxVMzE1Rj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0lORworPFVEMjk2PiAiPFUzMTRDPjxVMzE1Rj48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0lKCis8VUQyOTc+ICI8VTMxNEM+PFUzMTVGPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFRXSUMKKzxVRDI5OD4gIjxVMzE0Qz48VTMxNUY+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdJSworPFVEMjk5PiAiPFUzMTRDPjxVMzE1Rj48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBUV0lUCis8VUQyOUE+ICI8VTMxNEM+PFUzMTVGPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFRXSVAKKzxVRDI5Qj4gIjxVMzE0Qz48VTMxNUY+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFdJSAorPFVEMjlDPiAiPFUzMTRDPjxVMzE2MD4iCSUgSEFOR1VMIFNZTExBQkxFIFRZVQorPFVEMjlEPiAiPFUzMTRDPjxVMzE2MD48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBUWVVHCis8VUQyOUU+ICI8VTMxNEM+PFUzMTYwPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFRZVUdHCis8VUQyOUY+ICI8VTMxNEM+PFUzMTYwPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFRZVUdTCis8VUQyQTA+ICI8VTMxNEM+PFUzMTYwPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFRZVU4KKzxVRDJBMT4gIjxVMzE0Qz48VTMxNjA+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlVTkkKKzxVRDJBMj4gIjxVMzE0Qz48VTMxNjA+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlVTkgKKzxVRDJBMz4gIjxVMzE0Qz48VTMxNjA+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlVRAorPFVEMkE0PiAiPFUzMTRDPjxVMzE2MD48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBUWVVMCis8VUQyQTU+ICI8VTMxNEM+PFUzMTYwPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFRZVUxHCis8VUQyQTY+ICI8VTMxNEM+PFUzMTYwPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFRZVUxNCis8VUQyQTc+ICI8VTMxNEM+PFUzMTYwPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFRZVUxCCis8VUQyQTg+ICI8VTMxNEM+PFUzMTYwPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFRZVUxTCis8VUQyQTk+ICI8VTMxNEM+PFUzMTYwPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFRZVUxUCis8VUQyQUE+ICI8VTMxNEM+PFUzMTYwPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFRZVUxQCis8VUQyQUI+ICI8VTMxNEM+PFUzMTYwPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFRZVUxICis8VUQyQUM+ICI8VTMxNEM+PFUzMTYwPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFRZVU0KKzxVRDJBRD4gIjxVMzE0Qz48VTMxNjA+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlVQgorPFVEMkFFPiAiPFUzMTRDPjxVMzE2MD48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBUWVVCUworPFVEMkFGPiAiPFUzMTRDPjxVMzE2MD48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBUWVVTCis8VUQyQjA+ICI8VTMxNEM+PFUzMTYwPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFRZVVNTCis8VUQyQjE+ICI8VTMxNEM+PFUzMTYwPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFRZVU5HCis8VUQyQjI+ICI8VTMxNEM+PFUzMTYwPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFRZVUoKKzxVRDJCMz4gIjxVMzE0Qz48VTMxNjA+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlVQworPFVEMkI0PiAiPFUzMTRDPjxVMzE2MD48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBUWVVLCis8VUQyQjU+ICI8VTMxNEM+PFUzMTYwPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFRZVVQKKzxVRDJCNj4gIjxVMzE0Qz48VTMxNjA+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlVUAorPFVEMkI3PiAiPFUzMTRDPjxVMzE2MD48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBUWVVICis8VUQyQjg+ICI8VTMxNEM+PFUzMTYxPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVVCis8VUQyQjk+ICI8VTMxNEM+PFUzMTYxPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFRFVUcKKzxVRDJCQT4gIjxVMzE0Qz48VTMxNjE+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVVR0cKKzxVRDJCQj4gIjxVMzE0Qz48VTMxNjE+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVVR1MKKzxVRDJCQz4gIjxVMzE0Qz48VTMxNjE+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVVTgorPFVEMkJEPiAiPFUzMTRDPjxVMzE2MT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBURVVOSQorPFVEMkJFPiAiPFUzMTRDPjxVMzE2MT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBURVVOSAorPFVEMkJGPiAiPFUzMTRDPjxVMzE2MT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBURVVECis8VUQyQzA+ICI8VTMxNEM+PFUzMTYxPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFRFVUwKKzxVRDJDMT4gIjxVMzE0Qz48VTMxNjE+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVVTEcKKzxVRDJDMj4gIjxVMzE0Qz48VTMxNjE+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVVTE0KKzxVRDJDMz4gIjxVMzE0Qz48VTMxNjE+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVVTEIKKzxVRDJDND4gIjxVMzE0Qz48VTMxNjE+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVVTFMKKzxVRDJDNT4gIjxVMzE0Qz48VTMxNjE+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVVTFQKKzxVRDJDNj4gIjxVMzE0Qz48VTMxNjE+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVVTFAKKzxVRDJDNz4gIjxVMzE0Qz48VTMxNjE+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVVTEgKKzxVRDJDOD4gIjxVMzE0Qz48VTMxNjE+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVVTQorPFVEMkM5PiAiPFUzMTRDPjxVMzE2MT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBURVVCCis8VUQyQ0E+ICI8VTMxNEM+PFUzMTYxPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFRFVUJTCis8VUQyQ0I+ICI8VTMxNEM+PFUzMTYxPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFRFVVMKKzxVRDJDQz4gIjxVMzE0Qz48VTMxNjE+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVVU1MKKzxVRDJDRD4gIjxVMzE0Qz48VTMxNjE+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVVTkcKKzxVRDJDRT4gIjxVMzE0Qz48VTMxNjE+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVVSgorPFVEMkNGPiAiPFUzMTRDPjxVMzE2MT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBURVVDCis8VUQyRDA+ICI8VTMxNEM+PFUzMTYxPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFRFVUsKKzxVRDJEMT4gIjxVMzE0Qz48VTMxNjE+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgVEVVVAorPFVEMkQyPiAiPFUzMTRDPjxVMzE2MT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBURVVQCis8VUQyRDM+ICI8VTMxNEM+PFUzMTYxPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFRFVUgKKzxVRDJEND4gIjxVMzE0Qz48VTMxNjI+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUkKKzxVRDJENT4gIjxVMzE0Qz48VTMxNjI+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlJRworPFVEMkQ2PiAiPFUzMTRDPjxVMzE2Mj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUlHRworPFVEMkQ3PiAiPFUzMTRDPjxVMzE2Mj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUlHUworPFVEMkQ4PiAiPFUzMTRDPjxVMzE2Mj48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUlOCis8VUQyRDk+ICI8VTMxNEM+PFUzMTYyPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFRZSU5JCis8VUQyREE+ICI8VTMxNEM+PFUzMTYyPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFRZSU5ICis8VUQyREI+ICI8VTMxNEM+PFUzMTYyPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFRZSUQKKzxVRDJEQz4gIjxVMzE0Qz48VTMxNjI+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlJTAorPFVEMkREPiAiPFUzMTRDPjxVMzE2Mj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUlMRworPFVEMkRFPiAiPFUzMTRDPjxVMzE2Mj48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUlMTQorPFVEMkRGPiAiPFUzMTRDPjxVMzE2Mj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUlMQgorPFVEMkUwPiAiPFUzMTRDPjxVMzE2Mj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUlMUworPFVEMkUxPiAiPFUzMTRDPjxVMzE2Mj48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUlMVAorPFVEMkUyPiAiPFUzMTRDPjxVMzE2Mj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUlMUAorPFVEMkUzPiAiPFUzMTRDPjxVMzE2Mj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUlMSAorPFVEMkU0PiAiPFUzMTRDPjxVMzE2Mj48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUlNCis8VUQyRTU+ICI8VTMxNEM+PFUzMTYyPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFRZSUIKKzxVRDJFNj4gIjxVMzE0Qz48VTMxNjI+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlJQlMKKzxVRDJFNz4gIjxVMzE0Qz48VTMxNjI+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlJUworPFVEMkU4PiAiPFUzMTRDPjxVMzE2Mj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUlTUworPFVEMkU5PiAiPFUzMTRDPjxVMzE2Mj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUlORworPFVEMkVBPiAiPFUzMTRDPjxVMzE2Mj48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUlKCis8VUQyRUI+ICI8VTMxNEM+PFUzMTYyPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFRZSUMKKzxVRDJFQz4gIjxVMzE0Qz48VTMxNjI+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlJSworPFVEMkVEPiAiPFUzMTRDPjxVMzE2Mj48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBUWUlUCis8VUQyRUU+ICI8VTMxNEM+PFUzMTYyPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFRZSVAKKzxVRDJFRj4gIjxVMzE0Qz48VTMxNjI+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgVFlJSAorPFVEMkYwPiAiPFUzMTRDPjxVMzE2Mz4iCSUgSEFOR1VMIFNZTExBQkxFIFRJCis8VUQyRjE+ICI8VTMxNEM+PFUzMTYzPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFRJRworPFVEMkYyPiAiPFUzMTRDPjxVMzE2Mz48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBUSUdHCis8VUQyRjM+ICI8VTMxNEM+PFUzMTYzPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFRJR1MKKzxVRDJGND4gIjxVMzE0Qz48VTMxNjM+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgVElOCis8VUQyRjU+ICI8VTMxNEM+PFUzMTYzPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFRJTkkKKzxVRDJGNj4gIjxVMzE0Qz48VTMxNjM+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgVElOSAorPFVEMkY3PiAiPFUzMTRDPjxVMzE2Mz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBUSUQKKzxVRDJGOD4gIjxVMzE0Qz48VTMxNjM+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgVElMCis8VUQyRjk+ICI8VTMxNEM+PFUzMTYzPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFRJTEcKKzxVRDJGQT4gIjxVMzE0Qz48VTMxNjM+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgVElMTQorPFVEMkZCPiAiPFUzMTRDPjxVMzE2Mz48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBUSUxCCis8VUQyRkM+ICI8VTMxNEM+PFUzMTYzPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFRJTFMKKzxVRDJGRD4gIjxVMzE0Qz48VTMxNjM+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgVElMVAorPFVEMkZFPiAiPFUzMTRDPjxVMzE2Mz48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBUSUxQCis8VUQyRkY+ICI8VTMxNEM+PFUzMTYzPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFRJTEgKKzxVRDMwMD4gIjxVMzE0Qz48VTMxNjM+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgVElNCis8VUQzMDE+ICI8VTMxNEM+PFUzMTYzPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFRJQgorPFVEMzAyPiAiPFUzMTRDPjxVMzE2Mz48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBUSUJTCis8VUQzMDM+ICI8VTMxNEM+PFUzMTYzPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFRJUworPFVEMzA0PiAiPFUzMTRDPjxVMzE2Mz48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBUSVNTCis8VUQzMDU+ICI8VTMxNEM+PFUzMTYzPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFRJTkcKKzxVRDMwNj4gIjxVMzE0Qz48VTMxNjM+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgVElKCis8VUQzMDc+ICI8VTMxNEM+PFUzMTYzPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFRJQworPFVEMzA4PiAiPFUzMTRDPjxVMzE2Mz48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBUSUsKKzxVRDMwOT4gIjxVMzE0Qz48VTMxNjM+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgVElUCis8VUQzMEE+ICI8VTMxNEM+PFUzMTYzPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFRJUAorPFVEMzBCPiAiPFUzMTRDPjxVMzE2Mz48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBUSUgKKzxVRDMwQz4gIjxVMzE0RD48VTMxNEY+IgklIEhBTkdVTCBTWUxMQUJMRSBQQQorPFVEMzBEPiAiPFUzMTREPjxVMzE0Rj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBQQUcKKzxVRDMwRT4gIjxVMzE0RD48VTMxNEY+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEFHRworPFVEMzBGPiAiPFUzMTREPjxVMzE0Rj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBQQUdTCis8VUQzMTA+ICI8VTMxNEQ+PFUzMTRGPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFBBTgorPFVEMzExPiAiPFUzMTREPjxVMzE0Rj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBQQU5JCis8VUQzMTI+ICI8VTMxNEQ+PFUzMTRGPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFBBTkgKKzxVRDMxMz4gIjxVMzE0RD48VTMxNEY+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUEFECis8VUQzMTQ+ICI8VTMxNEQ+PFUzMTRGPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFBBTAorPFVEMzE1PiAiPFUzMTREPjxVMzE0Rj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBQQUxHCis8VUQzMTY+ICI8VTMxNEQ+PFUzMTRGPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFBBTE0KKzxVRDMxNz4gIjxVMzE0RD48VTMxNEY+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEFMQgorPFVEMzE4PiAiPFUzMTREPjxVMzE0Rj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBQQUxTCis8VUQzMTk+ICI8VTMxNEQ+PFUzMTRGPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFBBTFQKKzxVRDMxQT4gIjxVMzE0RD48VTMxNEY+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEFMUAorPFVEMzFCPiAiPFUzMTREPjxVMzE0Rj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBQQUxICis8VUQzMUM+ICI8VTMxNEQ+PFUzMTRGPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFBBTQorPFVEMzFEPiAiPFUzMTREPjxVMzE0Rj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBQQUIKKzxVRDMxRT4gIjxVMzE0RD48VTMxNEY+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgUEFCUworPFVEMzFGPiAiPFUzMTREPjxVMzE0Rj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBQQVMKKzxVRDMyMD4gIjxVMzE0RD48VTMxNEY+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUEFTUworPFVEMzIxPiAiPFUzMTREPjxVMzE0Rj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBQQU5HCis8VUQzMjI+ICI8VTMxNEQ+PFUzMTRGPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFBBSgorPFVEMzIzPiAiPFUzMTREPjxVMzE0Rj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBQQUMKKzxVRDMyND4gIjxVMzE0RD48VTMxNEY+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEFLCis8VUQzMjU+ICI8VTMxNEQ+PFUzMTRGPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFBBVAorPFVEMzI2PiAiPFUzMTREPjxVMzE0Rj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBQQVAKKzxVRDMyNz4gIjxVMzE0RD48VTMxNEY+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEFICis8VUQzMjg+ICI8VTMxNEQ+PFUzMTUwPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEFFCis8VUQzMjk+ICI8VTMxNEQ+PFUzMTUwPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFBBRUcKKzxVRDMyQT4gIjxVMzE0RD48VTMxNTA+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEFFR0cKKzxVRDMyQj4gIjxVMzE0RD48VTMxNTA+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEFFR1MKKzxVRDMyQz4gIjxVMzE0RD48VTMxNTA+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgUEFFTgorPFVEMzJEPiAiPFUzMTREPjxVMzE1MD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBQQUVOSQorPFVEMzJFPiAiPFUzMTREPjxVMzE1MD48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBQQUVOSAorPFVEMzJGPiAiPFUzMTREPjxVMzE1MD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBQQUVECis8VUQzMzA+ICI8VTMxNEQ+PFUzMTUwPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFBBRUwKKzxVRDMzMT4gIjxVMzE0RD48VTMxNTA+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEFFTEcKKzxVRDMzMj4gIjxVMzE0RD48VTMxNTA+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEFFTE0KKzxVRDMzMz4gIjxVMzE0RD48VTMxNTA+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEFFTEIKKzxVRDMzND4gIjxVMzE0RD48VTMxNTA+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEFFTFMKKzxVRDMzNT4gIjxVMzE0RD48VTMxNTA+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEFFTFQKKzxVRDMzNj4gIjxVMzE0RD48VTMxNTA+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEFFTFAKKzxVRDMzNz4gIjxVMzE0RD48VTMxNTA+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEFFTEgKKzxVRDMzOD4gIjxVMzE0RD48VTMxNTA+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEFFTQorPFVEMzM5PiAiPFUzMTREPjxVMzE1MD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBQQUVCCis8VUQzM0E+ICI8VTMxNEQ+PFUzMTUwPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFBBRUJTCis8VUQzM0I+ICI8VTMxNEQ+PFUzMTUwPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFBBRVMKKzxVRDMzQz4gIjxVMzE0RD48VTMxNTA+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUEFFU1MKKzxVRDMzRD4gIjxVMzE0RD48VTMxNTA+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUEFFTkcKKzxVRDMzRT4gIjxVMzE0RD48VTMxNTA+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgUEFFSgorPFVEMzNGPiAiPFUzMTREPjxVMzE1MD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBQQUVDCis8VUQzNDA+ICI8VTMxNEQ+PFUzMTUwPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFBBRUsKKzxVRDM0MT4gIjxVMzE0RD48VTMxNTA+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEFFVAorPFVEMzQyPiAiPFUzMTREPjxVMzE1MD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBQQUVQCis8VUQzNDM+ICI8VTMxNEQ+PFUzMTUwPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFBBRUgKKzxVRDM0ND4gIjxVMzE0RD48VTMxNTE+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUEKKzxVRDM0NT4gIjxVMzE0RD48VTMxNTE+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlBRworPFVEMzQ2PiAiPFUzMTREPjxVMzE1MT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFHRworPFVEMzQ3PiAiPFUzMTREPjxVMzE1MT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFHUworPFVEMzQ4PiAiPFUzMTREPjxVMzE1MT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFOCis8VUQzNDk+ICI8VTMxNEQ+PFUzMTUxPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFBZQU5JCis8VUQzNEE+ICI8VTMxNEQ+PFUzMTUxPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFBZQU5ICis8VUQzNEI+ICI8VTMxNEQ+PFUzMTUxPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFBZQUQKKzxVRDM0Qz4gIjxVMzE0RD48VTMxNTE+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlBTAorPFVEMzREPiAiPFUzMTREPjxVMzE1MT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFMRworPFVEMzRFPiAiPFUzMTREPjxVMzE1MT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFMTQorPFVEMzRGPiAiPFUzMTREPjxVMzE1MT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFMQgorPFVEMzUwPiAiPFUzMTREPjxVMzE1MT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFMUworPFVEMzUxPiAiPFUzMTREPjxVMzE1MT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFMVAorPFVEMzUyPiAiPFUzMTREPjxVMzE1MT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFMUAorPFVEMzUzPiAiPFUzMTREPjxVMzE1MT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFMSAorPFVEMzU0PiAiPFUzMTREPjxVMzE1MT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFNCis8VUQzNTU+ICI8VTMxNEQ+PFUzMTUxPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFBZQUIKKzxVRDM1Nj4gIjxVMzE0RD48VTMxNTE+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlBQlMKKzxVRDM1Nz4gIjxVMzE0RD48VTMxNTE+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlBUworPFVEMzU4PiAiPFUzMTREPjxVMzE1MT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFTUworPFVEMzU5PiAiPFUzMTREPjxVMzE1MT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFORworPFVEMzVBPiAiPFUzMTREPjxVMzE1MT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFKCis8VUQzNUI+ICI8VTMxNEQ+PFUzMTUxPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFBZQUMKKzxVRDM1Qz4gIjxVMzE0RD48VTMxNTE+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlBSworPFVEMzVEPiAiPFUzMTREPjxVMzE1MT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFUCis8VUQzNUU+ICI8VTMxNEQ+PFUzMTUxPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFBZQVAKKzxVRDM1Rj4gIjxVMzE0RD48VTMxNTE+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlBSAorPFVEMzYwPiAiPFUzMTREPjxVMzE1Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFBZQUUKKzxVRDM2MT4gIjxVMzE0RD48VTMxNTI+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlBRUcKKzxVRDM2Mj4gIjxVMzE0RD48VTMxNTI+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlBRUdHCis8VUQzNjM+ICI8VTMxNEQ+PFUzMTUyPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFBZQUVHUworPFVEMzY0PiAiPFUzMTREPjxVMzE1Mj48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFFTgorPFVEMzY1PiAiPFUzMTREPjxVMzE1Mj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFFTkkKKzxVRDM2Nj4gIjxVMzE0RD48VTMxNTI+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlBRU5ICis8VUQzNjc+ICI8VTMxNEQ+PFUzMTUyPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFBZQUVECis8VUQzNjg+ICI8VTMxNEQ+PFUzMTUyPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFBZQUVMCis8VUQzNjk+ICI8VTMxNEQ+PFUzMTUyPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFBZQUVMRworPFVEMzZBPiAiPFUzMTREPjxVMzE1Mj48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFFTE0KKzxVRDM2Qj4gIjxVMzE0RD48VTMxNTI+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlBRUxCCis8VUQzNkM+ICI8VTMxNEQ+PFUzMTUyPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFBZQUVMUworPFVEMzZEPiAiPFUzMTREPjxVMzE1Mj48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFFTFQKKzxVRDM2RT4gIjxVMzE0RD48VTMxNTI+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlBRUxQCis8VUQzNkY+ICI8VTMxNEQ+PFUzMTUyPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFBZQUVMSAorPFVEMzcwPiAiPFUzMTREPjxVMzE1Mj48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFFTQorPFVEMzcxPiAiPFUzMTREPjxVMzE1Mj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFFQgorPFVEMzcyPiAiPFUzMTREPjxVMzE1Mj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFFQlMKKzxVRDM3Mz4gIjxVMzE0RD48VTMxNTI+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlBRVMKKzxVRDM3ND4gIjxVMzE0RD48VTMxNTI+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlBRVNTCis8VUQzNzU+ICI8VTMxNEQ+PFUzMTUyPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFBZQUVORworPFVEMzc2PiAiPFUzMTREPjxVMzE1Mj48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFFSgorPFVEMzc3PiAiPFUzMTREPjxVMzE1Mj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFFQworPFVEMzc4PiAiPFUzMTREPjxVMzE1Mj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFFSworPFVEMzc5PiAiPFUzMTREPjxVMzE1Mj48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFFVAorPFVEMzdBPiAiPFUzMTREPjxVMzE1Mj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFFUAorPFVEMzdCPiAiPFUzMTREPjxVMzE1Mj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUFFSAorPFVEMzdDPiAiPFUzMTREPjxVMzE1Mz4iCSUgSEFOR1VMIFNZTExBQkxFIFBFTworPFVEMzdEPiAiPFUzMTREPjxVMzE1Mz48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBQRU9HCis8VUQzN0U+ICI8VTMxNEQ+PFUzMTUzPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFBFT0dHCis8VUQzN0Y+ICI8VTMxNEQ+PFUzMTUzPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFBFT0dTCis8VUQzODA+ICI8VTMxNEQ+PFUzMTUzPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFBFT04KKzxVRDM4MT4gIjxVMzE0RD48VTMxNTM+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUEVPTkkKKzxVRDM4Mj4gIjxVMzE0RD48VTMxNTM+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUEVPTkgKKzxVRDM4Mz4gIjxVMzE0RD48VTMxNTM+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUEVPRAorPFVEMzg0PiAiPFUzMTREPjxVMzE1Mz48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBQRU9MCis8VUQzODU+ICI8VTMxNEQ+PFUzMTUzPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFBFT0xHCis8VUQzODY+ICI8VTMxNEQ+PFUzMTUzPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFBFT0xNCis8VUQzODc+ICI8VTMxNEQ+PFUzMTUzPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFBFT0xCCis8VUQzODg+ICI8VTMxNEQ+PFUzMTUzPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFBFT0xTCis8VUQzODk+ICI8VTMxNEQ+PFUzMTUzPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFBFT0xUCis8VUQzOEE+ICI8VTMxNEQ+PFUzMTUzPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFBFT0xQCis8VUQzOEI+ICI8VTMxNEQ+PFUzMTUzPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFBFT0xICis8VUQzOEM+ICI8VTMxNEQ+PFUzMTUzPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFBFT00KKzxVRDM4RD4gIjxVMzE0RD48VTMxNTM+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEVPQgorPFVEMzhFPiAiPFUzMTREPjxVMzE1Mz48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBQRU9CUworPFVEMzhGPiAiPFUzMTREPjxVMzE1Mz48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBQRU9TCis8VUQzOTA+ICI8VTMxNEQ+PFUzMTUzPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFBFT1NTCis8VUQzOTE+ICI8VTMxNEQ+PFUzMTUzPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFBFT05HCis8VUQzOTI+ICI8VTMxNEQ+PFUzMTUzPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFBFT0oKKzxVRDM5Mz4gIjxVMzE0RD48VTMxNTM+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEVPQworPFVEMzk0PiAiPFUzMTREPjxVMzE1Mz48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBQRU9LCis8VUQzOTU+ICI8VTMxNEQ+PFUzMTUzPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFBFT1QKKzxVRDM5Nj4gIjxVMzE0RD48VTMxNTM+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEVPUAorPFVEMzk3PiAiPFUzMTREPjxVMzE1Mz48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBQRU9ICis8VUQzOTg+ICI8VTMxNEQ+PFUzMTU0PiIJJSBIQU5HVUwgU1lMTEFCTEUgUEUKKzxVRDM5OT4gIjxVMzE0RD48VTMxNTQ+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEVHCis8VUQzOUE+ICI8VTMxNEQ+PFUzMTU0PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFBFR0cKKzxVRDM5Qj4gIjxVMzE0RD48VTMxNTQ+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEVHUworPFVEMzlDPiAiPFUzMTREPjxVMzE1ND48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBQRU4KKzxVRDM5RD4gIjxVMzE0RD48VTMxNTQ+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUEVOSQorPFVEMzlFPiAiPFUzMTREPjxVMzE1ND48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBQRU5ICis8VUQzOUY+ICI8VTMxNEQ+PFUzMTU0PjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFBFRAorPFVEM0EwPiAiPFUzMTREPjxVMzE1ND48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBQRUwKKzxVRDNBMT4gIjxVMzE0RD48VTMxNTQ+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEVMRworPFVEM0EyPiAiPFUzMTREPjxVMzE1ND48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBQRUxNCis8VUQzQTM+ICI8VTMxNEQ+PFUzMTU0PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFBFTEIKKzxVRDNBND4gIjxVMzE0RD48VTMxNTQ+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEVMUworPFVEM0E1PiAiPFUzMTREPjxVMzE1ND48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBQRUxUCis8VUQzQTY+ICI8VTMxNEQ+PFUzMTU0PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFBFTFAKKzxVRDNBNz4gIjxVMzE0RD48VTMxNTQ+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEVMSAorPFVEM0E4PiAiPFUzMTREPjxVMzE1ND48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBQRU0KKzxVRDNBOT4gIjxVMzE0RD48VTMxNTQ+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEVCCis8VUQzQUE+ICI8VTMxNEQ+PFUzMTU0PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFBFQlMKKzxVRDNBQj4gIjxVMzE0RD48VTMxNTQ+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUEVTCis8VUQzQUM+ICI8VTMxNEQ+PFUzMTU0PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFBFU1MKKzxVRDNBRD4gIjxVMzE0RD48VTMxNTQ+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUEVORworPFVEM0FFPiAiPFUzMTREPjxVMzE1ND48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBQRUoKKzxVRDNBRj4gIjxVMzE0RD48VTMxNTQ+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEVDCis8VUQzQjA+ICI8VTMxNEQ+PFUzMTU0PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFBFSworPFVEM0IxPiAiPFUzMTREPjxVMzE1ND48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBQRVQKKzxVRDNCMj4gIjxVMzE0RD48VTMxNTQ+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEVQCis8VUQzQjM+ICI8VTMxNEQ+PFUzMTU0PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFBFSAorPFVEM0I0PiAiPFUzMTREPjxVMzE1NT4iCSUgSEFOR1VMIFNZTExBQkxFIFBZRU8KKzxVRDNCNT4gIjxVMzE0RD48VTMxNTU+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlFT0cKKzxVRDNCNj4gIjxVMzE0RD48VTMxNTU+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlFT0dHCis8VUQzQjc+ICI8VTMxNEQ+PFUzMTU1PjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFBZRU9HUworPFVEM0I4PiAiPFUzMTREPjxVMzE1NT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUVPTgorPFVEM0I5PiAiPFUzMTREPjxVMzE1NT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUVPTkkKKzxVRDNCQT4gIjxVMzE0RD48VTMxNTU+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlFT05ICis8VUQzQkI+ICI8VTMxNEQ+PFUzMTU1PjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFBZRU9ECis8VUQzQkM+ICI8VTMxNEQ+PFUzMTU1PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFBZRU9MCis8VUQzQkQ+ICI8VTMxNEQ+PFUzMTU1PjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFBZRU9MRworPFVEM0JFPiAiPFUzMTREPjxVMzE1NT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUVPTE0KKzxVRDNCRj4gIjxVMzE0RD48VTMxNTU+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlFT0xCCis8VUQzQzA+ICI8VTMxNEQ+PFUzMTU1PjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFBZRU9MUworPFVEM0MxPiAiPFUzMTREPjxVMzE1NT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUVPTFQKKzxVRDNDMj4gIjxVMzE0RD48VTMxNTU+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlFT0xQCis8VUQzQzM+ICI8VTMxNEQ+PFUzMTU1PjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFBZRU9MSAorPFVEM0M0PiAiPFUzMTREPjxVMzE1NT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUVPTQorPFVEM0M1PiAiPFUzMTREPjxVMzE1NT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUVPQgorPFVEM0M2PiAiPFUzMTREPjxVMzE1NT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUVPQlMKKzxVRDNDNz4gIjxVMzE0RD48VTMxNTU+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlFT1MKKzxVRDNDOD4gIjxVMzE0RD48VTMxNTU+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlFT1NTCis8VUQzQzk+ICI8VTMxNEQ+PFUzMTU1PjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFBZRU9ORworPFVEM0NBPiAiPFUzMTREPjxVMzE1NT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUVPSgorPFVEM0NCPiAiPFUzMTREPjxVMzE1NT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUVPQworPFVEM0NDPiAiPFUzMTREPjxVMzE1NT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUVPSworPFVEM0NEPiAiPFUzMTREPjxVMzE1NT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUVPVAorPFVEM0NFPiAiPFUzMTREPjxVMzE1NT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUVPUAorPFVEM0NGPiAiPFUzMTREPjxVMzE1NT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUVPSAorPFVEM0QwPiAiPFUzMTREPjxVMzE1Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFBZRQorPFVEM0QxPiAiPFUzMTREPjxVMzE1Nj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUVHCis8VUQzRDI+ICI8VTMxNEQ+PFUzMTU2PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFBZRUdHCis8VUQzRDM+ICI8VTMxNEQ+PFUzMTU2PjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFBZRUdTCis8VUQzRDQ+ICI8VTMxNEQ+PFUzMTU2PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFBZRU4KKzxVRDNENT4gIjxVMzE0RD48VTMxNTY+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlFTkkKKzxVRDNENj4gIjxVMzE0RD48VTMxNTY+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlFTkgKKzxVRDNENz4gIjxVMzE0RD48VTMxNTY+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlFRAorPFVEM0Q4PiAiPFUzMTREPjxVMzE1Nj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUVMCis8VUQzRDk+ICI8VTMxNEQ+PFUzMTU2PjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFBZRUxHCis8VUQzREE+ICI8VTMxNEQ+PFUzMTU2PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFBZRUxNCis8VUQzREI+ICI8VTMxNEQ+PFUzMTU2PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFBZRUxCCis8VUQzREM+ICI8VTMxNEQ+PFUzMTU2PjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFBZRUxTCis8VUQzREQ+ICI8VTMxNEQ+PFUzMTU2PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFBZRUxUCis8VUQzREU+ICI8VTMxNEQ+PFUzMTU2PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFBZRUxQCis8VUQzREY+ICI8VTMxNEQ+PFUzMTU2PjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFBZRUxICis8VUQzRTA+ICI8VTMxNEQ+PFUzMTU2PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFBZRU0KKzxVRDNFMT4gIjxVMzE0RD48VTMxNTY+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlFQgorPFVEM0UyPiAiPFUzMTREPjxVMzE1Nj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUVCUworPFVEM0UzPiAiPFUzMTREPjxVMzE1Nj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUVTCis8VUQzRTQ+ICI8VTMxNEQ+PFUzMTU2PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFBZRVNTCis8VUQzRTU+ICI8VTMxNEQ+PFUzMTU2PjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFBZRU5HCis8VUQzRTY+ICI8VTMxNEQ+PFUzMTU2PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFBZRUoKKzxVRDNFNz4gIjxVMzE0RD48VTMxNTY+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlFQworPFVEM0U4PiAiPFUzMTREPjxVMzE1Nj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUVLCis8VUQzRTk+ICI8VTMxNEQ+PFUzMTU2PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFBZRVQKKzxVRDNFQT4gIjxVMzE0RD48VTMxNTY+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlFUAorPFVEM0VCPiAiPFUzMTREPjxVMzE1Nj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUVICis8VUQzRUM+ICI8VTMxNEQ+PFUzMTU3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUE8KKzxVRDNFRD4gIjxVMzE0RD48VTMxNTc+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9HCis8VUQzRUU+ICI8VTMxNEQ+PFUzMTU3PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFBPR0cKKzxVRDNFRj4gIjxVMzE0RD48VTMxNTc+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9HUworPFVEM0YwPiAiPFUzMTREPjxVMzE1Nz48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBQT04KKzxVRDNGMT4gIjxVMzE0RD48VTMxNTc+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9OSQorPFVEM0YyPiAiPFUzMTREPjxVMzE1Nz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBQT05ICis8VUQzRjM+ICI8VTMxNEQ+PFUzMTU3PjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFBPRAorPFVEM0Y0PiAiPFUzMTREPjxVMzE1Nz48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBQT0wKKzxVRDNGNT4gIjxVMzE0RD48VTMxNTc+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9MRworPFVEM0Y2PiAiPFUzMTREPjxVMzE1Nz48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBQT0xNCis8VUQzRjc+ICI8VTMxNEQ+PFUzMTU3PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFBPTEIKKzxVRDNGOD4gIjxVMzE0RD48VTMxNTc+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9MUworPFVEM0Y5PiAiPFUzMTREPjxVMzE1Nz48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBQT0xUCis8VUQzRkE+ICI8VTMxNEQ+PFUzMTU3PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFBPTFAKKzxVRDNGQj4gIjxVMzE0RD48VTMxNTc+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9MSAorPFVEM0ZDPiAiPFUzMTREPjxVMzE1Nz48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBQT00KKzxVRDNGRD4gIjxVMzE0RD48VTMxNTc+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9CCis8VUQzRkU+ICI8VTMxNEQ+PFUzMTU3PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFBPQlMKKzxVRDNGRj4gIjxVMzE0RD48VTMxNTc+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9TCis8VUQ0MDA+ICI8VTMxNEQ+PFUzMTU3PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFBPU1MKKzxVRDQwMT4gIjxVMzE0RD48VTMxNTc+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9ORworPFVENDAyPiAiPFUzMTREPjxVMzE1Nz48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBQT0oKKzxVRDQwMz4gIjxVMzE0RD48VTMxNTc+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9DCis8VUQ0MDQ+ICI8VTMxNEQ+PFUzMTU3PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFBPSworPFVENDA1PiAiPFUzMTREPjxVMzE1Nz48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBQT1QKKzxVRDQwNj4gIjxVMzE0RD48VTMxNTc+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9QCis8VUQ0MDc+ICI8VTMxNEQ+PFUzMTU3PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFBPSAorPFVENDA4PiAiPFUzMTREPjxVMzE1OD4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQQorPFVENDA5PiAiPFUzMTREPjxVMzE1OD48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0FHCis8VUQ0MEE+ICI8VTMxNEQ+PFUzMTU4PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQUdHCis8VUQ0MEI+ICI8VTMxNEQ+PFUzMTU4PjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQUdTCis8VUQ0MEM+ICI8VTMxNEQ+PFUzMTU4PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQU4KKzxVRDQwRD4gIjxVMzE0RD48VTMxNTg+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdBTkkKKzxVRDQwRT4gIjxVMzE0RD48VTMxNTg+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdBTkgKKzxVRDQwRj4gIjxVMzE0RD48VTMxNTg+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdBRAorPFVENDEwPiAiPFUzMTREPjxVMzE1OD48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0FMCis8VUQ0MTE+ICI8VTMxNEQ+PFUzMTU4PjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQUxHCis8VUQ0MTI+ICI8VTMxNEQ+PFUzMTU4PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQUxNCis8VUQ0MTM+ICI8VTMxNEQ+PFUzMTU4PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQUxCCis8VUQ0MTQ+ICI8VTMxNEQ+PFUzMTU4PjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQUxTCis8VUQ0MTU+ICI8VTMxNEQ+PFUzMTU4PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQUxUCis8VUQ0MTY+ICI8VTMxNEQ+PFUzMTU4PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQUxQCis8VUQ0MTc+ICI8VTMxNEQ+PFUzMTU4PjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQUxICis8VUQ0MTg+ICI8VTMxNEQ+PFUzMTU4PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQU0KKzxVRDQxOT4gIjxVMzE0RD48VTMxNTg+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdBQgorPFVENDFBPiAiPFUzMTREPjxVMzE1OD48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0FCUworPFVENDFCPiAiPFUzMTREPjxVMzE1OD48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0FTCis8VUQ0MUM+ICI8VTMxNEQ+PFUzMTU4PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQVNTCis8VUQ0MUQ+ICI8VTMxNEQ+PFUzMTU4PjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQU5HCis8VUQ0MUU+ICI8VTMxNEQ+PFUzMTU4PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQUoKKzxVRDQxRj4gIjxVMzE0RD48VTMxNTg+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdBQworPFVENDIwPiAiPFUzMTREPjxVMzE1OD48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0FLCis8VUQ0MjE+ICI8VTMxNEQ+PFUzMTU4PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQVQKKzxVRDQyMj4gIjxVMzE0RD48VTMxNTg+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdBUAorPFVENDIzPiAiPFUzMTREPjxVMzE1OD48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0FICis8VUQ0MjQ+ICI8VTMxNEQ+PFUzMTU5PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdBRQorPFVENDI1PiAiPFUzMTREPjxVMzE1OT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0FFRworPFVENDI2PiAiPFUzMTREPjxVMzE1OT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0FFR0cKKzxVRDQyNz4gIjxVMzE0RD48VTMxNTk+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdBRUdTCis8VUQ0Mjg+ICI8VTMxNEQ+PFUzMTU5PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQUVOCis8VUQ0Mjk+ICI8VTMxNEQ+PFUzMTU5PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQUVOSQorPFVENDJBPiAiPFUzMTREPjxVMzE1OT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0FFTkgKKzxVRDQyQj4gIjxVMzE0RD48VTMxNTk+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdBRUQKKzxVRDQyQz4gIjxVMzE0RD48VTMxNTk+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdBRUwKKzxVRDQyRD4gIjxVMzE0RD48VTMxNTk+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdBRUxHCis8VUQ0MkU+ICI8VTMxNEQ+PFUzMTU5PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQUVMTQorPFVENDJGPiAiPFUzMTREPjxVMzE1OT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0FFTEIKKzxVRDQzMD4gIjxVMzE0RD48VTMxNTk+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdBRUxTCis8VUQ0MzE+ICI8VTMxNEQ+PFUzMTU5PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQUVMVAorPFVENDMyPiAiPFUzMTREPjxVMzE1OT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0FFTFAKKzxVRDQzMz4gIjxVMzE0RD48VTMxNTk+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdBRUxICis8VUQ0MzQ+ICI8VTMxNEQ+PFUzMTU5PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQUVNCis8VUQ0MzU+ICI8VTMxNEQ+PFUzMTU5PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQUVCCis8VUQ0MzY+ICI8VTMxNEQ+PFUzMTU5PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQUVCUworPFVENDM3PiAiPFUzMTREPjxVMzE1OT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0FFUworPFVENDM4PiAiPFUzMTREPjxVMzE1OT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0FFU1MKKzxVRDQzOT4gIjxVMzE0RD48VTMxNTk+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdBRU5HCis8VUQ0M0E+ICI8VTMxNEQ+PFUzMTU5PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQUVKCis8VUQ0M0I+ICI8VTMxNEQ+PFUzMTU5PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQUVDCis8VUQ0M0M+ICI8VTMxNEQ+PFUzMTU5PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQUVLCis8VUQ0M0Q+ICI8VTMxNEQ+PFUzMTU5PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQUVUCis8VUQ0M0U+ICI8VTMxNEQ+PFUzMTU5PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQUVQCis8VUQ0M0Y+ICI8VTMxNEQ+PFUzMTU5PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFBXQUVICis8VUQ0NDA+ICI8VTMxNEQ+PFUzMTVBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9FCis8VUQ0NDE+ICI8VTMxNEQ+PFUzMTVBPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFBPRUcKKzxVRDQ0Mj4gIjxVMzE0RD48VTMxNUE+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9FR0cKKzxVRDQ0Mz4gIjxVMzE0RD48VTMxNUE+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9FR1MKKzxVRDQ0ND4gIjxVMzE0RD48VTMxNUE+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9FTgorPFVENDQ1PiAiPFUzMTREPjxVMzE1QT48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBQT0VOSQorPFVENDQ2PiAiPFUzMTREPjxVMzE1QT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBQT0VOSAorPFVENDQ3PiAiPFUzMTREPjxVMzE1QT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBQT0VECis8VUQ0NDg+ICI8VTMxNEQ+PFUzMTVBPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFBPRUwKKzxVRDQ0OT4gIjxVMzE0RD48VTMxNUE+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9FTEcKKzxVRDQ0QT4gIjxVMzE0RD48VTMxNUE+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9FTE0KKzxVRDQ0Qj4gIjxVMzE0RD48VTMxNUE+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9FTEIKKzxVRDQ0Qz4gIjxVMzE0RD48VTMxNUE+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9FTFMKKzxVRDQ0RD4gIjxVMzE0RD48VTMxNUE+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9FTFQKKzxVRDQ0RT4gIjxVMzE0RD48VTMxNUE+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9FTFAKKzxVRDQ0Rj4gIjxVMzE0RD48VTMxNUE+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9FTEgKKzxVRDQ1MD4gIjxVMzE0RD48VTMxNUE+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9FTQorPFVENDUxPiAiPFUzMTREPjxVMzE1QT48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBQT0VCCis8VUQ0NTI+ICI8VTMxNEQ+PFUzMTVBPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFBPRUJTCis8VUQ0NTM+ICI8VTMxNEQ+PFUzMTVBPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFBPRVMKKzxVRDQ1ND4gIjxVMzE0RD48VTMxNUE+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9FU1MKKzxVRDQ1NT4gIjxVMzE0RD48VTMxNUE+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9FTkcKKzxVRDQ1Nj4gIjxVMzE0RD48VTMxNUE+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9FSgorPFVENDU3PiAiPFUzMTREPjxVMzE1QT48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBQT0VDCis8VUQ0NTg+ICI8VTMxNEQ+PFUzMTVBPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFBPRUsKKzxVRDQ1OT4gIjxVMzE0RD48VTMxNUE+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgUE9FVAorPFVENDVBPiAiPFUzMTREPjxVMzE1QT48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBQT0VQCis8VUQ0NUI+ICI8VTMxNEQ+PFUzMTVBPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFBPRUgKKzxVRDQ1Qz4gIjxVMzE0RD48VTMxNUI+IgklIEhBTkdVTCBTWUxMQUJMRSBQWU8KKzxVRDQ1RD4gIjxVMzE0RD48VTMxNUI+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlPRworPFVENDVFPiAiPFUzMTREPjxVMzE1Qj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBQWU9HRworPFVENDVGPiAiPFUzMTREPjxVMzE1Qj48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBQWU9HUworPFVENDYwPiAiPFUzMTREPjxVMzE1Qj48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBQWU9OCis8VUQ0NjE+ICI8VTMxNEQ+PFUzMTVCPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFBZT05JCis8VUQ0NjI+ICI8VTMxNEQ+PFUzMTVCPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFBZT05ICis8VUQ0NjM+ICI8VTMxNEQ+PFUzMTVCPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFBZT0QKKzxVRDQ2ND4gIjxVMzE0RD48VTMxNUI+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlPTAorPFVENDY1PiAiPFUzMTREPjxVMzE1Qj48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBQWU9MRworPFVENDY2PiAiPFUzMTREPjxVMzE1Qj48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBQWU9MTQorPFVENDY3PiAiPFUzMTREPjxVMzE1Qj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBQWU9MQgorPFVENDY4PiAiPFUzMTREPjxVMzE1Qj48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBQWU9MUworPFVENDY5PiAiPFUzMTREPjxVMzE1Qj48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBQWU9MVAorPFVENDZBPiAiPFUzMTREPjxVMzE1Qj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBQWU9MUAorPFVENDZCPiAiPFUzMTREPjxVMzE1Qj48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBQWU9MSAorPFVENDZDPiAiPFUzMTREPjxVMzE1Qj48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBQWU9NCis8VUQ0NkQ+ICI8VTMxNEQ+PFUzMTVCPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFBZT0IKKzxVRDQ2RT4gIjxVMzE0RD48VTMxNUI+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlPQlMKKzxVRDQ2Rj4gIjxVMzE0RD48VTMxNUI+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlPUworPFVENDcwPiAiPFUzMTREPjxVMzE1Qj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBQWU9TUworPFVENDcxPiAiPFUzMTREPjxVMzE1Qj48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBQWU9ORworPFVENDcyPiAiPFUzMTREPjxVMzE1Qj48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBQWU9KCis8VUQ0NzM+ICI8VTMxNEQ+PFUzMTVCPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFBZT0MKKzxVRDQ3ND4gIjxVMzE0RD48VTMxNUI+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlPSworPFVENDc1PiAiPFUzMTREPjxVMzE1Qj48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBQWU9UCis8VUQ0NzY+ICI8VTMxNEQ+PFUzMTVCPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFBZT1AKKzxVRDQ3Nz4gIjxVMzE0RD48VTMxNUI+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlPSAorPFVENDc4PiAiPFUzMTREPjxVMzE1Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFBVCis8VUQ0Nzk+ICI8VTMxNEQ+PFUzMTVDPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFBVRworPFVENDdBPiAiPFUzMTREPjxVMzE1Qz48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBQVUdHCis8VUQ0N0I+ICI8VTMxNEQ+PFUzMTVDPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFBVR1MKKzxVRDQ3Qz4gIjxVMzE0RD48VTMxNUM+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFVOCis8VUQ0N0Q+ICI8VTMxNEQ+PFUzMTVDPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFBVTkkKKzxVRDQ3RT4gIjxVMzE0RD48VTMxNUM+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFVOSAorPFVENDdGPiAiPFUzMTREPjxVMzE1Qz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBQVUQKKzxVRDQ4MD4gIjxVMzE0RD48VTMxNUM+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFVMCis8VUQ0ODE+ICI8VTMxNEQ+PFUzMTVDPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFBVTEcKKzxVRDQ4Mj4gIjxVMzE0RD48VTMxNUM+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFVMTQorPFVENDgzPiAiPFUzMTREPjxVMzE1Qz48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBQVUxCCis8VUQ0ODQ+ICI8VTMxNEQ+PFUzMTVDPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFBVTFMKKzxVRDQ4NT4gIjxVMzE0RD48VTMxNUM+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFVMVAorPFVENDg2PiAiPFUzMTREPjxVMzE1Qz48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBQVUxQCis8VUQ0ODc+ICI8VTMxNEQ+PFUzMTVDPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFBVTEgKKzxVRDQ4OD4gIjxVMzE0RD48VTMxNUM+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFVNCis8VUQ0ODk+ICI8VTMxNEQ+PFUzMTVDPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFBVQgorPFVENDhBPiAiPFUzMTREPjxVMzE1Qz48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBQVUJTCis8VUQ0OEI+ICI8VTMxNEQ+PFUzMTVDPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFBVUworPFVENDhDPiAiPFUzMTREPjxVMzE1Qz48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBQVVNTCis8VUQ0OEQ+ICI8VTMxNEQ+PFUzMTVDPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFBVTkcKKzxVRDQ4RT4gIjxVMzE0RD48VTMxNUM+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFVKCis8VUQ0OEY+ICI8VTMxNEQ+PFUzMTVDPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFBVQworPFVENDkwPiAiPFUzMTREPjxVMzE1Qz48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBQVUsKKzxVRDQ5MT4gIjxVMzE0RD48VTMxNUM+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFVUCis8VUQ0OTI+ICI8VTMxNEQ+PFUzMTVDPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFBVUAorPFVENDkzPiAiPFUzMTREPjxVMzE1Qz48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBQVUgKKzxVRDQ5ND4gIjxVMzE0RD48VTMxNUQ+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0VPCis8VUQ0OTU+ICI8VTMxNEQ+PFUzMTVEPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFBXRU9HCis8VUQ0OTY+ICI8VTMxNEQ+PFUzMTVEPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFBXRU9HRworPFVENDk3PiAiPFUzMTREPjxVMzE1RD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0VPR1MKKzxVRDQ5OD4gIjxVMzE0RD48VTMxNUQ+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdFT04KKzxVRDQ5OT4gIjxVMzE0RD48VTMxNUQ+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdFT05JCis8VUQ0OUE+ICI8VTMxNEQ+PFUzMTVEPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFBXRU9OSAorPFVENDlCPiAiPFUzMTREPjxVMzE1RD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0VPRAorPFVENDlDPiAiPFUzMTREPjxVMzE1RD48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0VPTAorPFVENDlEPiAiPFUzMTREPjxVMzE1RD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0VPTEcKKzxVRDQ5RT4gIjxVMzE0RD48VTMxNUQ+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdFT0xNCis8VUQ0OUY+ICI8VTMxNEQ+PFUzMTVEPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFBXRU9MQgorPFVENEEwPiAiPFUzMTREPjxVMzE1RD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0VPTFMKKzxVRDRBMT4gIjxVMzE0RD48VTMxNUQ+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdFT0xUCis8VUQ0QTI+ICI8VTMxNEQ+PFUzMTVEPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFBXRU9MUAorPFVENEEzPiAiPFUzMTREPjxVMzE1RD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0VPTEgKKzxVRDRBND4gIjxVMzE0RD48VTMxNUQ+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdFT00KKzxVRDRBNT4gIjxVMzE0RD48VTMxNUQ+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdFT0IKKzxVRDRBNj4gIjxVMzE0RD48VTMxNUQ+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdFT0JTCis8VUQ0QTc+ICI8VTMxNEQ+PFUzMTVEPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFBXRU9TCis8VUQ0QTg+ICI8VTMxNEQ+PFUzMTVEPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFBXRU9TUworPFVENEE5PiAiPFUzMTREPjxVMzE1RD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0VPTkcKKzxVRDRBQT4gIjxVMzE0RD48VTMxNUQ+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdFT0oKKzxVRDRBQj4gIjxVMzE0RD48VTMxNUQ+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdFT0MKKzxVRDRBQz4gIjxVMzE0RD48VTMxNUQ+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdFT0sKKzxVRDRBRD4gIjxVMzE0RD48VTMxNUQ+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdFT1QKKzxVRDRBRT4gIjxVMzE0RD48VTMxNUQ+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdFT1AKKzxVRDRBRj4gIjxVMzE0RD48VTMxNUQ+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdFT0gKKzxVRDRCMD4gIjxVMzE0RD48VTMxNUU+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0UKKzxVRDRCMT4gIjxVMzE0RD48VTMxNUU+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdFRworPFVENEIyPiAiPFUzMTREPjxVMzE1RT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0VHRworPFVENEIzPiAiPFUzMTREPjxVMzE1RT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0VHUworPFVENEI0PiAiPFUzMTREPjxVMzE1RT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0VOCis8VUQ0QjU+ICI8VTMxNEQ+PFUzMTVFPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFBXRU5JCis8VUQ0QjY+ICI8VTMxNEQ+PFUzMTVFPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFBXRU5ICis8VUQ0Qjc+ICI8VTMxNEQ+PFUzMTVFPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFBXRUQKKzxVRDRCOD4gIjxVMzE0RD48VTMxNUU+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdFTAorPFVENEI5PiAiPFUzMTREPjxVMzE1RT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0VMRworPFVENEJBPiAiPFUzMTREPjxVMzE1RT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0VMTQorPFVENEJCPiAiPFUzMTREPjxVMzE1RT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0VMQgorPFVENEJDPiAiPFUzMTREPjxVMzE1RT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0VMUworPFVENEJEPiAiPFUzMTREPjxVMzE1RT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0VMVAorPFVENEJFPiAiPFUzMTREPjxVMzE1RT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0VMUAorPFVENEJGPiAiPFUzMTREPjxVMzE1RT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0VMSAorPFVENEMwPiAiPFUzMTREPjxVMzE1RT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0VNCis8VUQ0QzE+ICI8VTMxNEQ+PFUzMTVFPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFBXRUIKKzxVRDRDMj4gIjxVMzE0RD48VTMxNUU+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdFQlMKKzxVRDRDMz4gIjxVMzE0RD48VTMxNUU+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdFUworPFVENEM0PiAiPFUzMTREPjxVMzE1RT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0VTUworPFVENEM1PiAiPFUzMTREPjxVMzE1RT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0VORworPFVENEM2PiAiPFUzMTREPjxVMzE1RT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0VKCis8VUQ0Qzc+ICI8VTMxNEQ+PFUzMTVFPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFBXRUMKKzxVRDRDOD4gIjxVMzE0RD48VTMxNUU+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdFSworPFVENEM5PiAiPFUzMTREPjxVMzE1RT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0VUCis8VUQ0Q0E+ICI8VTMxNEQ+PFUzMTVFPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFBXRVAKKzxVRDRDQj4gIjxVMzE0RD48VTMxNUU+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdFSAorPFVENENDPiAiPFUzMTREPjxVMzE1Rj4iCSUgSEFOR1VMIFNZTExBQkxFIFBXSQorPFVENENEPiAiPFUzMTREPjxVMzE1Rj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0lHCis8VUQ0Q0U+ICI8VTMxNEQ+PFUzMTVGPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFBXSUdHCis8VUQ0Q0Y+ICI8VTMxNEQ+PFUzMTVGPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFBXSUdTCis8VUQ0RDA+ICI8VTMxNEQ+PFUzMTVGPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFBXSU4KKzxVRDREMT4gIjxVMzE0RD48VTMxNUY+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdJTkkKKzxVRDREMj4gIjxVMzE0RD48VTMxNUY+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdJTkgKKzxVRDREMz4gIjxVMzE0RD48VTMxNUY+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdJRAorPFVENEQ0PiAiPFUzMTREPjxVMzE1Rj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0lMCis8VUQ0RDU+ICI8VTMxNEQ+PFUzMTVGPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFBXSUxHCis8VUQ0RDY+ICI8VTMxNEQ+PFUzMTVGPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFBXSUxNCis8VUQ0RDc+ICI8VTMxNEQ+PFUzMTVGPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFBXSUxCCis8VUQ0RDg+ICI8VTMxNEQ+PFUzMTVGPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFBXSUxTCis8VUQ0RDk+ICI8VTMxNEQ+PFUzMTVGPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFBXSUxUCis8VUQ0REE+ICI8VTMxNEQ+PFUzMTVGPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFBXSUxQCis8VUQ0REI+ICI8VTMxNEQ+PFUzMTVGPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFBXSUxICis8VUQ0REM+ICI8VTMxNEQ+PFUzMTVGPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFBXSU0KKzxVRDRERD4gIjxVMzE0RD48VTMxNUY+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdJQgorPFVENERFPiAiPFUzMTREPjxVMzE1Rj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0lCUworPFVENERGPiAiPFUzMTREPjxVMzE1Rj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0lTCis8VUQ0RTA+ICI8VTMxNEQ+PFUzMTVGPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFBXSVNTCis8VUQ0RTE+ICI8VTMxNEQ+PFUzMTVGPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFBXSU5HCis8VUQ0RTI+ICI8VTMxNEQ+PFUzMTVGPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFBXSUoKKzxVRDRFMz4gIjxVMzE0RD48VTMxNUY+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdJQworPFVENEU0PiAiPFUzMTREPjxVMzE1Rj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0lLCis8VUQ0RTU+ICI8VTMxNEQ+PFUzMTVGPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFBXSVQKKzxVRDRFNj4gIjxVMzE0RD48VTMxNUY+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFdJUAorPFVENEU3PiAiPFUzMTREPjxVMzE1Rj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBQV0lICis8VUQ0RTg+ICI8VTMxNEQ+PFUzMTYwPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlVCis8VUQ0RTk+ICI8VTMxNEQ+PFUzMTYwPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIFBZVUcKKzxVRDRFQT4gIjxVMzE0RD48VTMxNjA+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlVR0cKKzxVRDRFQj4gIjxVMzE0RD48VTMxNjA+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlVR1MKKzxVRDRFQz4gIjxVMzE0RD48VTMxNjA+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlVTgorPFVENEVEPiAiPFUzMTREPjxVMzE2MD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBQWVVOSQorPFVENEVFPiAiPFUzMTREPjxVMzE2MD48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBQWVVOSAorPFVENEVGPiAiPFUzMTREPjxVMzE2MD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBQWVVECis8VUQ0RjA+ICI8VTMxNEQ+PFUzMTYwPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIFBZVUwKKzxVRDRGMT4gIjxVMzE0RD48VTMxNjA+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlVTEcKKzxVRDRGMj4gIjxVMzE0RD48VTMxNjA+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlVTE0KKzxVRDRGMz4gIjxVMzE0RD48VTMxNjA+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlVTEIKKzxVRDRGND4gIjxVMzE0RD48VTMxNjA+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlVTFMKKzxVRDRGNT4gIjxVMzE0RD48VTMxNjA+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlVTFQKKzxVRDRGNj4gIjxVMzE0RD48VTMxNjA+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlVTFAKKzxVRDRGNz4gIjxVMzE0RD48VTMxNjA+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlVTEgKKzxVRDRGOD4gIjxVMzE0RD48VTMxNjA+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlVTQorPFVENEY5PiAiPFUzMTREPjxVMzE2MD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBQWVVCCis8VUQ0RkE+ICI8VTMxNEQ+PFUzMTYwPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFBZVUJTCis8VUQ0RkI+ICI8VTMxNEQ+PFUzMTYwPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIFBZVVMKKzxVRDRGQz4gIjxVMzE0RD48VTMxNjA+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlVU1MKKzxVRDRGRD4gIjxVMzE0RD48VTMxNjA+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlVTkcKKzxVRDRGRT4gIjxVMzE0RD48VTMxNjA+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlVSgorPFVENEZGPiAiPFUzMTREPjxVMzE2MD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBQWVVDCis8VUQ1MDA+ICI8VTMxNEQ+PFUzMTYwPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFBZVUsKKzxVRDUwMT4gIjxVMzE0RD48VTMxNjA+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlVVAorPFVENTAyPiAiPFUzMTREPjxVMzE2MD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBQWVVQCis8VUQ1MDM+ICI8VTMxNEQ+PFUzMTYwPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFBZVUgKKzxVRDUwND4gIjxVMzE0RD48VTMxNjE+IgklIEhBTkdVTCBTWUxMQUJMRSBQRVUKKzxVRDUwNT4gIjxVMzE0RD48VTMxNjE+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEVVRworPFVENTA2PiAiPFUzMTREPjxVMzE2MT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBQRVVHRworPFVENTA3PiAiPFUzMTREPjxVMzE2MT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBQRVVHUworPFVENTA4PiAiPFUzMTREPjxVMzE2MT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBQRVVOCis8VUQ1MDk+ICI8VTMxNEQ+PFUzMTYxPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIFBFVU5JCis8VUQ1MEE+ICI8VTMxNEQ+PFUzMTYxPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIFBFVU5ICis8VUQ1MEI+ICI8VTMxNEQ+PFUzMTYxPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFBFVUQKKzxVRDUwQz4gIjxVMzE0RD48VTMxNjE+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgUEVVTAorPFVENTBEPiAiPFUzMTREPjxVMzE2MT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBQRVVMRworPFVENTBFPiAiPFUzMTREPjxVMzE2MT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBQRVVMTQorPFVENTBGPiAiPFUzMTREPjxVMzE2MT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBQRVVMQgorPFVENTEwPiAiPFUzMTREPjxVMzE2MT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBQRVVMUworPFVENTExPiAiPFUzMTREPjxVMzE2MT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBQRVVMVAorPFVENTEyPiAiPFUzMTREPjxVMzE2MT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBQRVVMUAorPFVENTEzPiAiPFUzMTREPjxVMzE2MT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBQRVVMSAorPFVENTE0PiAiPFUzMTREPjxVMzE2MT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBQRVVNCis8VUQ1MTU+ICI8VTMxNEQ+PFUzMTYxPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFBFVUIKKzxVRDUxNj4gIjxVMzE0RD48VTMxNjE+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgUEVVQlMKKzxVRDUxNz4gIjxVMzE0RD48VTMxNjE+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUEVVUworPFVENTE4PiAiPFUzMTREPjxVMzE2MT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBQRVVTUworPFVENTE5PiAiPFUzMTREPjxVMzE2MT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBQRVVORworPFVENTFBPiAiPFUzMTREPjxVMzE2MT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBQRVVKCis8VUQ1MUI+ICI8VTMxNEQ+PFUzMTYxPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIFBFVUMKKzxVRDUxQz4gIjxVMzE0RD48VTMxNjE+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEVVSworPFVENTFEPiAiPFUzMTREPjxVMzE2MT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBQRVVUCis8VUQ1MUU+ICI8VTMxNEQ+PFUzMTYxPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIFBFVVAKKzxVRDUxRj4gIjxVMzE0RD48VTMxNjE+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEVVSAorPFVENTIwPiAiPFUzMTREPjxVMzE2Mj4iCSUgSEFOR1VMIFNZTExBQkxFIFBZSQorPFVENTIxPiAiPFUzMTREPjxVMzE2Mj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUlHCis8VUQ1MjI+ICI8VTMxNEQ+PFUzMTYyPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFBZSUdHCis8VUQ1MjM+ICI8VTMxNEQ+PFUzMTYyPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIFBZSUdTCis8VUQ1MjQ+ICI8VTMxNEQ+PFUzMTYyPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIFBZSU4KKzxVRDUyNT4gIjxVMzE0RD48VTMxNjI+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlJTkkKKzxVRDUyNj4gIjxVMzE0RD48VTMxNjI+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlJTkgKKzxVRDUyNz4gIjxVMzE0RD48VTMxNjI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlJRAorPFVENTI4PiAiPFUzMTREPjxVMzE2Mj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUlMCis8VUQ1Mjk+ICI8VTMxNEQ+PFUzMTYyPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIFBZSUxHCis8VUQ1MkE+ICI8VTMxNEQ+PFUzMTYyPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIFBZSUxNCis8VUQ1MkI+ICI8VTMxNEQ+PFUzMTYyPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFBZSUxCCis8VUQ1MkM+ICI8VTMxNEQ+PFUzMTYyPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIFBZSUxTCis8VUQ1MkQ+ICI8VTMxNEQ+PFUzMTYyPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIFBZSUxUCis8VUQ1MkU+ICI8VTMxNEQ+PFUzMTYyPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFBZSUxQCis8VUQ1MkY+ICI8VTMxNEQ+PFUzMTYyPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIFBZSUxICis8VUQ1MzA+ICI8VTMxNEQ+PFUzMTYyPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIFBZSU0KKzxVRDUzMT4gIjxVMzE0RD48VTMxNjI+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlJQgorPFVENTMyPiAiPFUzMTREPjxVMzE2Mj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUlCUworPFVENTMzPiAiPFUzMTREPjxVMzE2Mj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUlTCis8VUQ1MzQ+ICI8VTMxNEQ+PFUzMTYyPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFBZSVNTCis8VUQ1MzU+ICI8VTMxNEQ+PFUzMTYyPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIFBZSU5HCis8VUQ1MzY+ICI8VTMxNEQ+PFUzMTYyPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIFBZSUoKKzxVRDUzNz4gIjxVMzE0RD48VTMxNjI+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlJQworPFVENTM4PiAiPFUzMTREPjxVMzE2Mj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUlLCis8VUQ1Mzk+ICI8VTMxNEQ+PFUzMTYyPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIFBZSVQKKzxVRDUzQT4gIjxVMzE0RD48VTMxNjI+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgUFlJUAorPFVENTNCPiAiPFUzMTREPjxVMzE2Mj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBQWUlICis8VUQ1M0M+ICI8VTMxNEQ+PFUzMTYzPiIJJSBIQU5HVUwgU1lMTEFCTEUgUEkKKzxVRDUzRD4gIjxVMzE0RD48VTMxNjM+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgUElHCis8VUQ1M0U+ICI8VTMxNEQ+PFUzMTYzPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIFBJR0cKKzxVRDUzRj4gIjxVMzE0RD48VTMxNjM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgUElHUworPFVENTQwPiAiPFUzMTREPjxVMzE2Mz48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBQSU4KKzxVRDU0MT4gIjxVMzE0RD48VTMxNjM+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUElOSQorPFVENTQyPiAiPFUzMTREPjxVMzE2Mz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBQSU5ICis8VUQ1NDM+ICI8VTMxNEQ+PFUzMTYzPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIFBJRAorPFVENTQ0PiAiPFUzMTREPjxVMzE2Mz48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBQSUwKKzxVRDU0NT4gIjxVMzE0RD48VTMxNjM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUElMRworPFVENTQ2PiAiPFUzMTREPjxVMzE2Mz48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBQSUxNCis8VUQ1NDc+ICI8VTMxNEQ+PFUzMTYzPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIFBJTEIKKzxVRDU0OD4gIjxVMzE0RD48VTMxNjM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgUElMUworPFVENTQ5PiAiPFUzMTREPjxVMzE2Mz48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBQSUxUCis8VUQ1NEE+ICI8VTMxNEQ+PFUzMTYzPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIFBJTFAKKzxVRDU0Qj4gIjxVMzE0RD48VTMxNjM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgUElMSAorPFVENTRDPiAiPFUzMTREPjxVMzE2Mz48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBQSU0KKzxVRDU0RD4gIjxVMzE0RD48VTMxNjM+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgUElCCis8VUQ1NEU+ICI8VTMxNEQ+PFUzMTYzPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIFBJQlMKKzxVRDU0Rj4gIjxVMzE0RD48VTMxNjM+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgUElTCis8VUQ1NTA+ICI8VTMxNEQ+PFUzMTYzPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIFBJU1MKKzxVRDU1MT4gIjxVMzE0RD48VTMxNjM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgUElORworPFVENTUyPiAiPFUzMTREPjxVMzE2Mz48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBQSUoKKzxVRDU1Mz4gIjxVMzE0RD48VTMxNjM+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgUElDCis8VUQ1NTQ+ICI8VTMxNEQ+PFUzMTYzPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIFBJSworPFVENTU1PiAiPFUzMTREPjxVMzE2Mz48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBQSVQKKzxVRDU1Nj4gIjxVMzE0RD48VTMxNjM+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgUElQCis8VUQ1NTc+ICI8VTMxNEQ+PFUzMTYzPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIFBJSAorPFVENTU4PiAiPFUzMTRFPjxVMzE0Rj4iCSUgSEFOR1VMIFNZTExBQkxFIEhBCis8VUQ1NTk+ICI8VTMxNEU+PFUzMTRGPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEhBRworPFVENTVBPiAiPFUzMTRFPjxVMzE0Rj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBIQUdHCis8VUQ1NUI+ICI8VTMxNEU+PFUzMTRGPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEhBR1MKKzxVRDU1Qz4gIjxVMzE0RT48VTMxNEY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSEFOCis8VUQ1NUQ+ICI8VTMxNEU+PFUzMTRGPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEhBTkkKKzxVRDU1RT4gIjxVMzE0RT48VTMxNEY+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSEFOSAorPFVENTVGPiAiPFUzMTRFPjxVMzE0Rj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBIQUQKKzxVRDU2MD4gIjxVMzE0RT48VTMxNEY+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgSEFMCis8VUQ1NjE+ICI8VTMxNEU+PFUzMTRGPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEhBTEcKKzxVRDU2Mj4gIjxVMzE0RT48VTMxNEY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEFMTQorPFVENTYzPiAiPFUzMTRFPjxVMzE0Rj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBIQUxCCis8VUQ1NjQ+ICI8VTMxNEU+PFUzMTRGPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEhBTFMKKzxVRDU2NT4gIjxVMzE0RT48VTMxNEY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEFMVAorPFVENTY2PiAiPFUzMTRFPjxVMzE0Rj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBIQUxQCis8VUQ1Njc+ICI8VTMxNEU+PFUzMTRGPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEhBTEgKKzxVRDU2OD4gIjxVMzE0RT48VTMxNEY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEFNCis8VUQ1Njk+ICI8VTMxNEU+PFUzMTRGPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEhBQgorPFVENTZBPiAiPFUzMTRFPjxVMzE0Rj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBIQUJTCis8VUQ1NkI+ICI8VTMxNEU+PFUzMTRGPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEhBUworPFVENTZDPiAiPFUzMTRFPjxVMzE0Rj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBIQVNTCis8VUQ1NkQ+ICI8VTMxNEU+PFUzMTRGPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEhBTkcKKzxVRDU2RT4gIjxVMzE0RT48VTMxNEY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgSEFKCis8VUQ1NkY+ICI8VTMxNEU+PFUzMTRGPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEhBQworPFVENTcwPiAiPFUzMTRFPjxVMzE0Rj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBIQUsKKzxVRDU3MT4gIjxVMzE0RT48VTMxNEY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEFUCis8VUQ1NzI+ICI8VTMxNEU+PFUzMTRGPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEhBUAorPFVENTczPiAiPFUzMTRFPjxVMzE0Rj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBIQUgKKzxVRDU3ND4gIjxVMzE0RT48VTMxNTA+IgklIEhBTkdVTCBTWUxMQUJMRSBIQUUKKzxVRDU3NT4gIjxVMzE0RT48VTMxNTA+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEFFRworPFVENTc2PiAiPFUzMTRFPjxVMzE1MD48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBIQUVHRworPFVENTc3PiAiPFUzMTRFPjxVMzE1MD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBIQUVHUworPFVENTc4PiAiPFUzMTRFPjxVMzE1MD48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBIQUVOCis8VUQ1Nzk+ICI8VTMxNEU+PFUzMTUwPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEhBRU5JCis8VUQ1N0E+ICI8VTMxNEU+PFUzMTUwPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEhBRU5ICis8VUQ1N0I+ICI8VTMxNEU+PFUzMTUwPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEhBRUQKKzxVRDU3Qz4gIjxVMzE0RT48VTMxNTA+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgSEFFTAorPFVENTdEPiAiPFUzMTRFPjxVMzE1MD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBIQUVMRworPFVENTdFPiAiPFUzMTRFPjxVMzE1MD48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBIQUVMTQorPFVENTdGPiAiPFUzMTRFPjxVMzE1MD48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBIQUVMQgorPFVENTgwPiAiPFUzMTRFPjxVMzE1MD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBIQUVMUworPFVENTgxPiAiPFUzMTRFPjxVMzE1MD48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBIQUVMVAorPFVENTgyPiAiPFUzMTRFPjxVMzE1MD48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBIQUVMUAorPFVENTgzPiAiPFUzMTRFPjxVMzE1MD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBIQUVMSAorPFVENTg0PiAiPFUzMTRFPjxVMzE1MD48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBIQUVNCis8VUQ1ODU+ICI8VTMxNEU+PFUzMTUwPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEhBRUIKKzxVRDU4Nj4gIjxVMzE0RT48VTMxNTA+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSEFFQlMKKzxVRDU4Nz4gIjxVMzE0RT48VTMxNTA+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSEFFUworPFVENTg4PiAiPFUzMTRFPjxVMzE1MD48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBIQUVTUworPFVENTg5PiAiPFUzMTRFPjxVMzE1MD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBIQUVORworPFVENThBPiAiPFUzMTRFPjxVMzE1MD48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBIQUVKCis8VUQ1OEI+ICI8VTMxNEU+PFUzMTUwPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEhBRUMKKzxVRDU4Qz4gIjxVMzE0RT48VTMxNTA+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEFFSworPFVENThEPiAiPFUzMTRFPjxVMzE1MD48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBIQUVUCis8VUQ1OEU+ICI8VTMxNEU+PFUzMTUwPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEhBRVAKKzxVRDU4Rj4gIjxVMzE0RT48VTMxNTA+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEFFSAorPFVENTkwPiAiPFUzMTRFPjxVMzE1MT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQQorPFVENTkxPiAiPFUzMTRFPjxVMzE1MT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUFHCis8VUQ1OTI+ICI8VTMxNEU+PFUzMTUxPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQUdHCis8VUQ1OTM+ICI8VTMxNEU+PFUzMTUxPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQUdTCis8VUQ1OTQ+ICI8VTMxNEU+PFUzMTUxPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQU4KKzxVRDU5NT4gIjxVMzE0RT48VTMxNTE+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlBTkkKKzxVRDU5Nj4gIjxVMzE0RT48VTMxNTE+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlBTkgKKzxVRDU5Nz4gIjxVMzE0RT48VTMxNTE+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlBRAorPFVENTk4PiAiPFUzMTRFPjxVMzE1MT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUFMCis8VUQ1OTk+ICI8VTMxNEU+PFUzMTUxPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQUxHCis8VUQ1OUE+ICI8VTMxNEU+PFUzMTUxPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQUxNCis8VUQ1OUI+ICI8VTMxNEU+PFUzMTUxPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQUxCCis8VUQ1OUM+ICI8VTMxNEU+PFUzMTUxPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQUxTCis8VUQ1OUQ+ICI8VTMxNEU+PFUzMTUxPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQUxUCis8VUQ1OUU+ICI8VTMxNEU+PFUzMTUxPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQUxQCis8VUQ1OUY+ICI8VTMxNEU+PFUzMTUxPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQUxICis8VUQ1QTA+ICI8VTMxNEU+PFUzMTUxPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQU0KKzxVRDVBMT4gIjxVMzE0RT48VTMxNTE+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlBQgorPFVENUEyPiAiPFUzMTRFPjxVMzE1MT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUFCUworPFVENUEzPiAiPFUzMTRFPjxVMzE1MT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUFTCis8VUQ1QTQ+ICI8VTMxNEU+PFUzMTUxPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQVNTCis8VUQ1QTU+ICI8VTMxNEU+PFUzMTUxPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQU5HCis8VUQ1QTY+ICI8VTMxNEU+PFUzMTUxPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQUoKKzxVRDVBNz4gIjxVMzE0RT48VTMxNTE+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlBQworPFVENUE4PiAiPFUzMTRFPjxVMzE1MT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUFLCis8VUQ1QTk+ICI8VTMxNEU+PFUzMTUxPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQVQKKzxVRDVBQT4gIjxVMzE0RT48VTMxNTE+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlBUAorPFVENUFCPiAiPFUzMTRFPjxVMzE1MT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUFICis8VUQ1QUM+ICI8VTMxNEU+PFUzMTUyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlBRQorPFVENUFEPiAiPFUzMTRFPjxVMzE1Mj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUFFRworPFVENUFFPiAiPFUzMTRFPjxVMzE1Mj48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUFFR0cKKzxVRDVBRj4gIjxVMzE0RT48VTMxNTI+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlBRUdTCis8VUQ1QjA+ICI8VTMxNEU+PFUzMTUyPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQUVOCis8VUQ1QjE+ICI8VTMxNEU+PFUzMTUyPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQUVOSQorPFVENUIyPiAiPFUzMTRFPjxVMzE1Mj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUFFTkgKKzxVRDVCMz4gIjxVMzE0RT48VTMxNTI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlBRUQKKzxVRDVCND4gIjxVMzE0RT48VTMxNTI+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlBRUwKKzxVRDVCNT4gIjxVMzE0RT48VTMxNTI+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlBRUxHCis8VUQ1QjY+ICI8VTMxNEU+PFUzMTUyPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQUVMTQorPFVENUI3PiAiPFUzMTRFPjxVMzE1Mj48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUFFTEIKKzxVRDVCOD4gIjxVMzE0RT48VTMxNTI+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlBRUxTCis8VUQ1Qjk+ICI8VTMxNEU+PFUzMTUyPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQUVMVAorPFVENUJBPiAiPFUzMTRFPjxVMzE1Mj48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUFFTFAKKzxVRDVCQj4gIjxVMzE0RT48VTMxNTI+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlBRUxICis8VUQ1QkM+ICI8VTMxNEU+PFUzMTUyPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQUVNCis8VUQ1QkQ+ICI8VTMxNEU+PFUzMTUyPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQUVCCis8VUQ1QkU+ICI8VTMxNEU+PFUzMTUyPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQUVCUworPFVENUJGPiAiPFUzMTRFPjxVMzE1Mj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUFFUworPFVENUMwPiAiPFUzMTRFPjxVMzE1Mj48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUFFU1MKKzxVRDVDMT4gIjxVMzE0RT48VTMxNTI+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlBRU5HCis8VUQ1QzI+ICI8VTMxNEU+PFUzMTUyPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQUVKCis8VUQ1QzM+ICI8VTMxNEU+PFUzMTUyPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQUVDCis8VUQ1QzQ+ICI8VTMxNEU+PFUzMTUyPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQUVLCis8VUQ1QzU+ICI8VTMxNEU+PFUzMTUyPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQUVUCis8VUQ1QzY+ICI8VTMxNEU+PFUzMTUyPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQUVQCis8VUQ1Qzc+ICI8VTMxNEU+PFUzMTUyPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZQUVICis8VUQ1Qzg+ICI8VTMxNEU+PFUzMTUzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVPCis8VUQ1Qzk+ICI8VTMxNEU+PFUzMTUzPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEhFT0cKKzxVRDVDQT4gIjxVMzE0RT48VTMxNTM+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVPR0cKKzxVRDVDQj4gIjxVMzE0RT48VTMxNTM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVPR1MKKzxVRDVDQz4gIjxVMzE0RT48VTMxNTM+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVPTgorPFVENUNEPiAiPFUzMTRFPjxVMzE1Mz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBIRU9OSQorPFVENUNFPiAiPFUzMTRFPjxVMzE1Mz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBIRU9OSAorPFVENUNGPiAiPFUzMTRFPjxVMzE1Mz48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBIRU9ECis8VUQ1RDA+ICI8VTMxNEU+PFUzMTUzPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEhFT0wKKzxVRDVEMT4gIjxVMzE0RT48VTMxNTM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVPTEcKKzxVRDVEMj4gIjxVMzE0RT48VTMxNTM+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVPTE0KKzxVRDVEMz4gIjxVMzE0RT48VTMxNTM+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVPTEIKKzxVRDVEND4gIjxVMzE0RT48VTMxNTM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVPTFMKKzxVRDVENT4gIjxVMzE0RT48VTMxNTM+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVPTFQKKzxVRDVENj4gIjxVMzE0RT48VTMxNTM+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVPTFAKKzxVRDVENz4gIjxVMzE0RT48VTMxNTM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVPTEgKKzxVRDVEOD4gIjxVMzE0RT48VTMxNTM+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVPTQorPFVENUQ5PiAiPFUzMTRFPjxVMzE1Mz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBIRU9CCis8VUQ1REE+ICI8VTMxNEU+PFUzMTUzPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEhFT0JTCis8VUQ1REI+ICI8VTMxNEU+PFUzMTUzPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEhFT1MKKzxVRDVEQz4gIjxVMzE0RT48VTMxNTM+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVPU1MKKzxVRDVERD4gIjxVMzE0RT48VTMxNTM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVPTkcKKzxVRDVERT4gIjxVMzE0RT48VTMxNTM+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVPSgorPFVENURGPiAiPFUzMTRFPjxVMzE1Mz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBIRU9DCis8VUQ1RTA+ICI8VTMxNEU+PFUzMTUzPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEhFT0sKKzxVRDVFMT4gIjxVMzE0RT48VTMxNTM+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVPVAorPFVENUUyPiAiPFUzMTRFPjxVMzE1Mz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBIRU9QCis8VUQ1RTM+ICI8VTMxNEU+PFUzMTUzPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEhFT0gKKzxVRDVFND4gIjxVMzE0RT48VTMxNTQ+IgklIEhBTkdVTCBTWUxMQUJMRSBIRQorPFVENUU1PiAiPFUzMTRFPjxVMzE1ND48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBIRUcKKzxVRDVFNj4gIjxVMzE0RT48VTMxNTQ+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVHRworPFVENUU3PiAiPFUzMTRFPjxVMzE1ND48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBIRUdTCis8VUQ1RTg+ICI8VTMxNEU+PFUzMTU0PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEhFTgorPFVENUU5PiAiPFUzMTRFPjxVMzE1ND48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBIRU5JCis8VUQ1RUE+ICI8VTMxNEU+PFUzMTU0PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEhFTkgKKzxVRDVFQj4gIjxVMzE0RT48VTMxNTQ+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVECis8VUQ1RUM+ICI8VTMxNEU+PFUzMTU0PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEhFTAorPFVENUVEPiAiPFUzMTRFPjxVMzE1ND48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBIRUxHCis8VUQ1RUU+ICI8VTMxNEU+PFUzMTU0PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEhFTE0KKzxVRDVFRj4gIjxVMzE0RT48VTMxNTQ+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVMQgorPFVENUYwPiAiPFUzMTRFPjxVMzE1ND48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBIRUxTCis8VUQ1RjE+ICI8VTMxNEU+PFUzMTU0PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEhFTFQKKzxVRDVGMj4gIjxVMzE0RT48VTMxNTQ+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVMUAorPFVENUYzPiAiPFUzMTRFPjxVMzE1ND48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBIRUxICis8VUQ1RjQ+ICI8VTMxNEU+PFUzMTU0PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEhFTQorPFVENUY1PiAiPFUzMTRFPjxVMzE1ND48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBIRUIKKzxVRDVGNj4gIjxVMzE0RT48VTMxNTQ+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVCUworPFVENUY3PiAiPFUzMTRFPjxVMzE1ND48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBIRVMKKzxVRDVGOD4gIjxVMzE0RT48VTMxNTQ+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVTUworPFVENUY5PiAiPFUzMTRFPjxVMzE1ND48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBIRU5HCis8VUQ1RkE+ICI8VTMxNEU+PFUzMTU0PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEhFSgorPFVENUZCPiAiPFUzMTRFPjxVMzE1ND48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBIRUMKKzxVRDVGQz4gIjxVMzE0RT48VTMxNTQ+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVLCis8VUQ1RkQ+ICI8VTMxNEU+PFUzMTU0PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEhFVAorPFVENUZFPiAiPFUzMTRFPjxVMzE1ND48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBIRVAKKzxVRDVGRj4gIjxVMzE0RT48VTMxNTQ+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVICis8VUQ2MDA+ICI8VTMxNEU+PFUzMTU1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlFTworPFVENjAxPiAiPFUzMTRFPjxVMzE1NT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUVPRworPFVENjAyPiAiPFUzMTRFPjxVMzE1NT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUVPR0cKKzxVRDYwMz4gIjxVMzE0RT48VTMxNTU+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlFT0dTCis8VUQ2MDQ+ICI8VTMxNEU+PFUzMTU1PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEhZRU9OCis8VUQ2MDU+ICI8VTMxNEU+PFUzMTU1PjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZRU9OSQorPFVENjA2PiAiPFUzMTRFPjxVMzE1NT48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUVPTkgKKzxVRDYwNz4gIjxVMzE0RT48VTMxNTU+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlFT0QKKzxVRDYwOD4gIjxVMzE0RT48VTMxNTU+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlFT0wKKzxVRDYwOT4gIjxVMzE0RT48VTMxNTU+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlFT0xHCis8VUQ2MEE+ICI8VTMxNEU+PFUzMTU1PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEhZRU9MTQorPFVENjBCPiAiPFUzMTRFPjxVMzE1NT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUVPTEIKKzxVRDYwQz4gIjxVMzE0RT48VTMxNTU+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlFT0xTCis8VUQ2MEQ+ICI8VTMxNEU+PFUzMTU1PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZRU9MVAorPFVENjBFPiAiPFUzMTRFPjxVMzE1NT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUVPTFAKKzxVRDYwRj4gIjxVMzE0RT48VTMxNTU+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlFT0xICis8VUQ2MTA+ICI8VTMxNEU+PFUzMTU1PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZRU9NCis8VUQ2MTE+ICI8VTMxNEU+PFUzMTU1PjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEhZRU9CCis8VUQ2MTI+ICI8VTMxNEU+PFUzMTU1PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEhZRU9CUworPFVENjEzPiAiPFUzMTRFPjxVMzE1NT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUVPUworPFVENjE0PiAiPFUzMTRFPjxVMzE1NT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUVPU1MKKzxVRDYxNT4gIjxVMzE0RT48VTMxNTU+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlFT05HCis8VUQ2MTY+ICI8VTMxNEU+PFUzMTU1PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEhZRU9KCis8VUQ2MTc+ICI8VTMxNEU+PFUzMTU1PjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZRU9DCis8VUQ2MTg+ICI8VTMxNEU+PFUzMTU1PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEhZRU9LCis8VUQ2MTk+ICI8VTMxNEU+PFUzMTU1PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEhZRU9UCis8VUQ2MUE+ICI8VTMxNEU+PFUzMTU1PjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEhZRU9QCis8VUQ2MUI+ICI8VTMxNEU+PFUzMTU1PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZRU9ICis8VUQ2MUM+ICI8VTMxNEU+PFUzMTU2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlFCis8VUQ2MUQ+ICI8VTMxNEU+PFUzMTU2PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZRUcKKzxVRDYxRT4gIjxVMzE0RT48VTMxNTY+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlFR0cKKzxVRDYxRj4gIjxVMzE0RT48VTMxNTY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlFR1MKKzxVRDYyMD4gIjxVMzE0RT48VTMxNTY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlFTgorPFVENjIxPiAiPFUzMTRFPjxVMzE1Nj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUVOSQorPFVENjIyPiAiPFUzMTRFPjxVMzE1Nj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUVOSAorPFVENjIzPiAiPFUzMTRFPjxVMzE1Nj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUVECis8VUQ2MjQ+ICI8VTMxNEU+PFUzMTU2PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZRUwKKzxVRDYyNT4gIjxVMzE0RT48VTMxNTY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlFTEcKKzxVRDYyNj4gIjxVMzE0RT48VTMxNTY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlFTE0KKzxVRDYyNz4gIjxVMzE0RT48VTMxNTY+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlFTEIKKzxVRDYyOD4gIjxVMzE0RT48VTMxNTY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlFTFMKKzxVRDYyOT4gIjxVMzE0RT48VTMxNTY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlFTFQKKzxVRDYyQT4gIjxVMzE0RT48VTMxNTY+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlFTFAKKzxVRDYyQj4gIjxVMzE0RT48VTMxNTY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlFTEgKKzxVRDYyQz4gIjxVMzE0RT48VTMxNTY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlFTQorPFVENjJEPiAiPFUzMTRFPjxVMzE1Nj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUVCCis8VUQ2MkU+ICI8VTMxNEU+PFUzMTU2PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEhZRUJTCis8VUQ2MkY+ICI8VTMxNEU+PFUzMTU2PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZRVMKKzxVRDYzMD4gIjxVMzE0RT48VTMxNTY+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlFU1MKKzxVRDYzMT4gIjxVMzE0RT48VTMxNTY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlFTkcKKzxVRDYzMj4gIjxVMzE0RT48VTMxNTY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlFSgorPFVENjMzPiAiPFUzMTRFPjxVMzE1Nj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUVDCis8VUQ2MzQ+ICI8VTMxNEU+PFUzMTU2PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEhZRUsKKzxVRDYzNT4gIjxVMzE0RT48VTMxNTY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlFVAorPFVENjM2PiAiPFUzMTRFPjxVMzE1Nj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUVQCis8VUQ2Mzc+ICI8VTMxNEU+PFUzMTU2PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZRUgKKzxVRDYzOD4gIjxVMzE0RT48VTMxNTc+IgklIEhBTkdVTCBTWUxMQUJMRSBITworPFVENjM5PiAiPFUzMTRFPjxVMzE1Nz48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBIT0cKKzxVRDYzQT4gIjxVMzE0RT48VTMxNTc+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSE9HRworPFVENjNCPiAiPFUzMTRFPjxVMzE1Nz48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBIT0dTCis8VUQ2M0M+ICI8VTMxNEU+PFUzMTU3PjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEhPTgorPFVENjNEPiAiPFUzMTRFPjxVMzE1Nz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBIT05JCis8VUQ2M0U+ICI8VTMxNEU+PFUzMTU3PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEhPTkgKKzxVRDYzRj4gIjxVMzE0RT48VTMxNTc+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSE9ECis8VUQ2NDA+ICI8VTMxNEU+PFUzMTU3PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEhPTAorPFVENjQxPiAiPFUzMTRFPjxVMzE1Nz48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBIT0xHCis8VUQ2NDI+ICI8VTMxNEU+PFUzMTU3PjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEhPTE0KKzxVRDY0Mz4gIjxVMzE0RT48VTMxNTc+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSE9MQgorPFVENjQ0PiAiPFUzMTRFPjxVMzE1Nz48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBIT0xTCis8VUQ2NDU+ICI8VTMxNEU+PFUzMTU3PjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEhPTFQKKzxVRDY0Nj4gIjxVMzE0RT48VTMxNTc+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSE9MUAorPFVENjQ3PiAiPFUzMTRFPjxVMzE1Nz48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBIT0xICis8VUQ2NDg+ICI8VTMxNEU+PFUzMTU3PjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEhPTQorPFVENjQ5PiAiPFUzMTRFPjxVMzE1Nz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBIT0IKKzxVRDY0QT4gIjxVMzE0RT48VTMxNTc+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSE9CUworPFVENjRCPiAiPFUzMTRFPjxVMzE1Nz48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBIT1MKKzxVRDY0Qz4gIjxVMzE0RT48VTMxNTc+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSE9TUworPFVENjREPiAiPFUzMTRFPjxVMzE1Nz48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBIT05HCis8VUQ2NEU+ICI8VTMxNEU+PFUzMTU3PjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEhPSgorPFVENjRGPiAiPFUzMTRFPjxVMzE1Nz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBIT0MKKzxVRDY1MD4gIjxVMzE0RT48VTMxNTc+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSE9LCis8VUQ2NTE+ICI8VTMxNEU+PFUzMTU3PjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEhPVAorPFVENjUyPiAiPFUzMTRFPjxVMzE1Nz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBIT1AKKzxVRDY1Mz4gIjxVMzE0RT48VTMxNTc+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSE9ICis8VUQ2NTQ+ICI8VTMxNEU+PFUzMTU4PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBCis8VUQ2NTU+ICI8VTMxNEU+PFUzMTU4PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEhXQUcKKzxVRDY1Nj4gIjxVMzE0RT48VTMxNTg+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBR0cKKzxVRDY1Nz4gIjxVMzE0RT48VTMxNTg+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBR1MKKzxVRDY1OD4gIjxVMzE0RT48VTMxNTg+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBTgorPFVENjU5PiAiPFUzMTRFPjxVMzE1OD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0FOSQorPFVENjVBPiAiPFUzMTRFPjxVMzE1OD48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0FOSAorPFVENjVCPiAiPFUzMTRFPjxVMzE1OD48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0FECis8VUQ2NUM+ICI8VTMxNEU+PFUzMTU4PjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEhXQUwKKzxVRDY1RD4gIjxVMzE0RT48VTMxNTg+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBTEcKKzxVRDY1RT4gIjxVMzE0RT48VTMxNTg+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBTE0KKzxVRDY1Rj4gIjxVMzE0RT48VTMxNTg+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBTEIKKzxVRDY2MD4gIjxVMzE0RT48VTMxNTg+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBTFMKKzxVRDY2MT4gIjxVMzE0RT48VTMxNTg+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBTFQKKzxVRDY2Mj4gIjxVMzE0RT48VTMxNTg+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBTFAKKzxVRDY2Mz4gIjxVMzE0RT48VTMxNTg+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBTEgKKzxVRDY2ND4gIjxVMzE0RT48VTMxNTg+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBTQorPFVENjY1PiAiPFUzMTRFPjxVMzE1OD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0FCCis8VUQ2NjY+ICI8VTMxNEU+PFUzMTU4PjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEhXQUJTCis8VUQ2Njc+ICI8VTMxNEU+PFUzMTU4PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEhXQVMKKzxVRDY2OD4gIjxVMzE0RT48VTMxNTg+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBU1MKKzxVRDY2OT4gIjxVMzE0RT48VTMxNTg+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBTkcKKzxVRDY2QT4gIjxVMzE0RT48VTMxNTg+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBSgorPFVENjZCPiAiPFUzMTRFPjxVMzE1OD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0FDCis8VUQ2NkM+ICI8VTMxNEU+PFUzMTU4PjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEhXQUsKKzxVRDY2RD4gIjxVMzE0RT48VTMxNTg+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBVAorPFVENjZFPiAiPFUzMTRFPjxVMzE1OD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0FQCis8VUQ2NkY+ICI8VTMxNEU+PFUzMTU4PjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEhXQUgKKzxVRDY3MD4gIjxVMzE0RT48VTMxNTk+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0FFCis8VUQ2NzE+ICI8VTMxNEU+PFUzMTU5PjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEhXQUVHCis8VUQ2NzI+ICI8VTMxNEU+PFUzMTU5PjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEhXQUVHRworPFVENjczPiAiPFUzMTRFPjxVMzE1OT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0FFR1MKKzxVRDY3ND4gIjxVMzE0RT48VTMxNTk+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBRU4KKzxVRDY3NT4gIjxVMzE0RT48VTMxNTk+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBRU5JCis8VUQ2NzY+ICI8VTMxNEU+PFUzMTU5PjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEhXQUVOSAorPFVENjc3PiAiPFUzMTRFPjxVMzE1OT48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0FFRAorPFVENjc4PiAiPFUzMTRFPjxVMzE1OT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0FFTAorPFVENjc5PiAiPFUzMTRFPjxVMzE1OT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0FFTEcKKzxVRDY3QT4gIjxVMzE0RT48VTMxNTk+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBRUxNCis8VUQ2N0I+ICI8VTMxNEU+PFUzMTU5PjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEhXQUVMQgorPFVENjdDPiAiPFUzMTRFPjxVMzE1OT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0FFTFMKKzxVRDY3RD4gIjxVMzE0RT48VTMxNTk+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBRUxUCis8VUQ2N0U+ICI8VTMxNEU+PFUzMTU5PjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEhXQUVMUAorPFVENjdGPiAiPFUzMTRFPjxVMzE1OT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0FFTEgKKzxVRDY4MD4gIjxVMzE0RT48VTMxNTk+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBRU0KKzxVRDY4MT4gIjxVMzE0RT48VTMxNTk+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBRUIKKzxVRDY4Mj4gIjxVMzE0RT48VTMxNTk+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBRUJTCis8VUQ2ODM+ICI8VTMxNEU+PFUzMTU5PjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEhXQUVTCis8VUQ2ODQ+ICI8VTMxNEU+PFUzMTU5PjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEhXQUVTUworPFVENjg1PiAiPFUzMTRFPjxVMzE1OT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0FFTkcKKzxVRDY4Nj4gIjxVMzE0RT48VTMxNTk+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBRUoKKzxVRDY4Nz4gIjxVMzE0RT48VTMxNTk+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBRUMKKzxVRDY4OD4gIjxVMzE0RT48VTMxNTk+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBRUsKKzxVRDY4OT4gIjxVMzE0RT48VTMxNTk+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBRVQKKzxVRDY4QT4gIjxVMzE0RT48VTMxNTk+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBRVAKKzxVRDY4Qj4gIjxVMzE0RT48VTMxNTk+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdBRUgKKzxVRDY4Qz4gIjxVMzE0RT48VTMxNUE+IgklIEhBTkdVTCBTWUxMQUJMRSBIT0UKKzxVRDY4RD4gIjxVMzE0RT48VTMxNUE+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSE9FRworPFVENjhFPiAiPFUzMTRFPjxVMzE1QT48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBIT0VHRworPFVENjhGPiAiPFUzMTRFPjxVMzE1QT48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBIT0VHUworPFVENjkwPiAiPFUzMTRFPjxVMzE1QT48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBIT0VOCis8VUQ2OTE+ICI8VTMxNEU+PFUzMTVBPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEhPRU5JCis8VUQ2OTI+ICI8VTMxNEU+PFUzMTVBPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEhPRU5ICis8VUQ2OTM+ICI8VTMxNEU+PFUzMTVBPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEhPRUQKKzxVRDY5ND4gIjxVMzE0RT48VTMxNUE+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgSE9FTAorPFVENjk1PiAiPFUzMTRFPjxVMzE1QT48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBIT0VMRworPFVENjk2PiAiPFUzMTRFPjxVMzE1QT48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBIT0VMTQorPFVENjk3PiAiPFUzMTRFPjxVMzE1QT48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBIT0VMQgorPFVENjk4PiAiPFUzMTRFPjxVMzE1QT48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBIT0VMUworPFVENjk5PiAiPFUzMTRFPjxVMzE1QT48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBIT0VMVAorPFVENjlBPiAiPFUzMTRFPjxVMzE1QT48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBIT0VMUAorPFVENjlCPiAiPFUzMTRFPjxVMzE1QT48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBIT0VMSAorPFVENjlDPiAiPFUzMTRFPjxVMzE1QT48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBIT0VNCis8VUQ2OUQ+ICI8VTMxNEU+PFUzMTVBPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEhPRUIKKzxVRDY5RT4gIjxVMzE0RT48VTMxNUE+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSE9FQlMKKzxVRDY5Rj4gIjxVMzE0RT48VTMxNUE+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSE9FUworPFVENkEwPiAiPFUzMTRFPjxVMzE1QT48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBIT0VTUworPFVENkExPiAiPFUzMTRFPjxVMzE1QT48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBIT0VORworPFVENkEyPiAiPFUzMTRFPjxVMzE1QT48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBIT0VKCis8VUQ2QTM+ICI8VTMxNEU+PFUzMTVBPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEhPRUMKKzxVRDZBND4gIjxVMzE0RT48VTMxNUE+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSE9FSworPFVENkE1PiAiPFUzMTRFPjxVMzE1QT48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBIT0VUCis8VUQ2QTY+ICI8VTMxNEU+PFUzMTVBPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEhPRVAKKzxVRDZBNz4gIjxVMzE0RT48VTMxNUE+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSE9FSAorPFVENkE4PiAiPFUzMTRFPjxVMzE1Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEhZTworPFVENkE5PiAiPFUzMTRFPjxVMzE1Qj48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBIWU9HCis8VUQ2QUE+ICI8VTMxNEU+PFUzMTVCPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEhZT0dHCis8VUQ2QUI+ICI8VTMxNEU+PFUzMTVCPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEhZT0dTCis8VUQ2QUM+ICI8VTMxNEU+PFUzMTVCPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEhZT04KKzxVRDZBRD4gIjxVMzE0RT48VTMxNUI+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlPTkkKKzxVRDZBRT4gIjxVMzE0RT48VTMxNUI+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlPTkgKKzxVRDZBRj4gIjxVMzE0RT48VTMxNUI+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlPRAorPFVENkIwPiAiPFUzMTRFPjxVMzE1Qj48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBIWU9MCis8VUQ2QjE+ICI8VTMxNEU+PFUzMTVCPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZT0xHCis8VUQ2QjI+ICI8VTMxNEU+PFUzMTVCPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEhZT0xNCis8VUQ2QjM+ICI8VTMxNEU+PFUzMTVCPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEhZT0xCCis8VUQ2QjQ+ICI8VTMxNEU+PFUzMTVCPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEhZT0xTCis8VUQ2QjU+ICI8VTMxNEU+PFUzMTVCPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZT0xUCis8VUQ2QjY+ICI8VTMxNEU+PFUzMTVCPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEhZT0xQCis8VUQ2Qjc+ICI8VTMxNEU+PFUzMTVCPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEhZT0xICis8VUQ2Qjg+ICI8VTMxNEU+PFUzMTVCPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZT00KKzxVRDZCOT4gIjxVMzE0RT48VTMxNUI+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlPQgorPFVENkJBPiAiPFUzMTRFPjxVMzE1Qj48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBIWU9CUworPFVENkJCPiAiPFUzMTRFPjxVMzE1Qj48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBIWU9TCis8VUQ2QkM+ICI8VTMxNEU+PFUzMTVCPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEhZT1NTCis8VUQ2QkQ+ICI8VTMxNEU+PFUzMTVCPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEhZT05HCis8VUQ2QkU+ICI8VTMxNEU+PFUzMTVCPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEhZT0oKKzxVRDZCRj4gIjxVMzE0RT48VTMxNUI+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlPQworPFVENkMwPiAiPFUzMTRFPjxVMzE1Qj48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBIWU9LCis8VUQ2QzE+ICI8VTMxNEU+PFUzMTVCPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEhZT1QKKzxVRDZDMj4gIjxVMzE0RT48VTMxNUI+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlPUAorPFVENkMzPiAiPFUzMTRFPjxVMzE1Qj48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBIWU9ICis8VUQ2QzQ+ICI8VTMxNEU+PFUzMTVDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFUKKzxVRDZDNT4gIjxVMzE0RT48VTMxNUM+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFVHCis8VUQ2QzY+ICI8VTMxNEU+PFUzMTVDPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEhVR0cKKzxVRDZDNz4gIjxVMzE0RT48VTMxNUM+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFVHUworPFVENkM4PiAiPFUzMTRFPjxVMzE1Qz48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBIVU4KKzxVRDZDOT4gIjxVMzE0RT48VTMxNUM+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFVOSQorPFVENkNBPiAiPFUzMTRFPjxVMzE1Qz48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBIVU5ICis8VUQ2Q0I+ICI8VTMxNEU+PFUzMTVDPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEhVRAorPFVENkNDPiAiPFUzMTRFPjxVMzE1Qz48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBIVUwKKzxVRDZDRD4gIjxVMzE0RT48VTMxNUM+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFVMRworPFVENkNFPiAiPFUzMTRFPjxVMzE1Qz48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBIVUxNCis8VUQ2Q0Y+ICI8VTMxNEU+PFUzMTVDPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEhVTEIKKzxVRDZEMD4gIjxVMzE0RT48VTMxNUM+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFVMUworPFVENkQxPiAiPFUzMTRFPjxVMzE1Qz48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBIVUxUCis8VUQ2RDI+ICI8VTMxNEU+PFUzMTVDPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEhVTFAKKzxVRDZEMz4gIjxVMzE0RT48VTMxNUM+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFVMSAorPFVENkQ0PiAiPFUzMTRFPjxVMzE1Qz48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBIVU0KKzxVRDZENT4gIjxVMzE0RT48VTMxNUM+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFVCCis8VUQ2RDY+ICI8VTMxNEU+PFUzMTVDPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEhVQlMKKzxVRDZENz4gIjxVMzE0RT48VTMxNUM+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFVTCis8VUQ2RDg+ICI8VTMxNEU+PFUzMTVDPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEhVU1MKKzxVRDZEOT4gIjxVMzE0RT48VTMxNUM+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFVORworPFVENkRBPiAiPFUzMTRFPjxVMzE1Qz48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBIVUoKKzxVRDZEQj4gIjxVMzE0RT48VTMxNUM+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFVDCis8VUQ2REM+ICI8VTMxNEU+PFUzMTVDPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEhVSworPFVENkREPiAiPFUzMTRFPjxVMzE1Qz48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBIVVQKKzxVRDZERT4gIjxVMzE0RT48VTMxNUM+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFVQCis8VUQ2REY+ICI8VTMxNEU+PFUzMTVDPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEhVSAorPFVENkUwPiAiPFUzMTRFPjxVMzE1RD4iCSUgSEFOR1VMIFNZTExBQkxFIEhXRU8KKzxVRDZFMT4gIjxVMzE0RT48VTMxNUQ+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdFT0cKKzxVRDZFMj4gIjxVMzE0RT48VTMxNUQ+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdFT0dHCis8VUQ2RTM+ICI8VTMxNEU+PFUzMTVEPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEhXRU9HUworPFVENkU0PiAiPFUzMTRFPjxVMzE1RD48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0VPTgorPFVENkU1PiAiPFUzMTRFPjxVMzE1RD48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0VPTkkKKzxVRDZFNj4gIjxVMzE0RT48VTMxNUQ+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdFT05ICis8VUQ2RTc+ICI8VTMxNEU+PFUzMTVEPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEhXRU9ECis8VUQ2RTg+ICI8VTMxNEU+PFUzMTVEPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEhXRU9MCis8VUQ2RTk+ICI8VTMxNEU+PFUzMTVEPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEhXRU9MRworPFVENkVBPiAiPFUzMTRFPjxVMzE1RD48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0VPTE0KKzxVRDZFQj4gIjxVMzE0RT48VTMxNUQ+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdFT0xCCis8VUQ2RUM+ICI8VTMxNEU+PFUzMTVEPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEhXRU9MUworPFVENkVEPiAiPFUzMTRFPjxVMzE1RD48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0VPTFQKKzxVRDZFRT4gIjxVMzE0RT48VTMxNUQ+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdFT0xQCis8VUQ2RUY+ICI8VTMxNEU+PFUzMTVEPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEhXRU9MSAorPFVENkYwPiAiPFUzMTRFPjxVMzE1RD48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0VPTQorPFVENkYxPiAiPFUzMTRFPjxVMzE1RD48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0VPQgorPFVENkYyPiAiPFUzMTRFPjxVMzE1RD48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0VPQlMKKzxVRDZGMz4gIjxVMzE0RT48VTMxNUQ+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdFT1MKKzxVRDZGND4gIjxVMzE0RT48VTMxNUQ+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdFT1NTCis8VUQ2RjU+ICI8VTMxNEU+PFUzMTVEPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEhXRU9ORworPFVENkY2PiAiPFUzMTRFPjxVMzE1RD48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0VPSgorPFVENkY3PiAiPFUzMTRFPjxVMzE1RD48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0VPQworPFVENkY4PiAiPFUzMTRFPjxVMzE1RD48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0VPSworPFVENkY5PiAiPFUzMTRFPjxVMzE1RD48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0VPVAorPFVENkZBPiAiPFUzMTRFPjxVMzE1RD48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0VPUAorPFVENkZCPiAiPFUzMTRFPjxVMzE1RD48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0VPSAorPFVENkZDPiAiPFUzMTRFPjxVMzE1RT4iCSUgSEFOR1VMIFNZTExBQkxFIEhXRQorPFVENkZEPiAiPFUzMTRFPjxVMzE1RT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0VHCis8VUQ2RkU+ICI8VTMxNEU+PFUzMTVFPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEhXRUdHCis8VUQ2RkY+ICI8VTMxNEU+PFUzMTVFPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEhXRUdTCis8VUQ3MDA+ICI8VTMxNEU+PFUzMTVFPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEhXRU4KKzxVRDcwMT4gIjxVMzE0RT48VTMxNUU+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdFTkkKKzxVRDcwMj4gIjxVMzE0RT48VTMxNUU+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdFTkgKKzxVRDcwMz4gIjxVMzE0RT48VTMxNUU+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdFRAorPFVENzA0PiAiPFUzMTRFPjxVMzE1RT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0VMCis8VUQ3MDU+ICI8VTMxNEU+PFUzMTVFPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEhXRUxHCis8VUQ3MDY+ICI8VTMxNEU+PFUzMTVFPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEhXRUxNCis8VUQ3MDc+ICI8VTMxNEU+PFUzMTVFPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEhXRUxCCis8VUQ3MDg+ICI8VTMxNEU+PFUzMTVFPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEhXRUxTCis8VUQ3MDk+ICI8VTMxNEU+PFUzMTVFPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEhXRUxUCis8VUQ3MEE+ICI8VTMxNEU+PFUzMTVFPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEhXRUxQCis8VUQ3MEI+ICI8VTMxNEU+PFUzMTVFPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEhXRUxICis8VUQ3MEM+ICI8VTMxNEU+PFUzMTVFPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEhXRU0KKzxVRDcwRD4gIjxVMzE0RT48VTMxNUU+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdFQgorPFVENzBFPiAiPFUzMTRFPjxVMzE1RT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0VCUworPFVENzBGPiAiPFUzMTRFPjxVMzE1RT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0VTCis8VUQ3MTA+ICI8VTMxNEU+PFUzMTVFPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEhXRVNTCis8VUQ3MTE+ICI8VTMxNEU+PFUzMTVFPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEhXRU5HCis8VUQ3MTI+ICI8VTMxNEU+PFUzMTVFPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEhXRUoKKzxVRDcxMz4gIjxVMzE0RT48VTMxNUU+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdFQworPFVENzE0PiAiPFUzMTRFPjxVMzE1RT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0VLCis8VUQ3MTU+ICI8VTMxNEU+PFUzMTVFPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEhXRVQKKzxVRDcxNj4gIjxVMzE0RT48VTMxNUU+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdFUAorPFVENzE3PiAiPFUzMTRFPjxVMzE1RT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0VICis8VUQ3MTg+ICI8VTMxNEU+PFUzMTVGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdJCis8VUQ3MTk+ICI8VTMxNEU+PFUzMTVGPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEhXSUcKKzxVRDcxQT4gIjxVMzE0RT48VTMxNUY+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdJR0cKKzxVRDcxQj4gIjxVMzE0RT48VTMxNUY+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdJR1MKKzxVRDcxQz4gIjxVMzE0RT48VTMxNUY+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdJTgorPFVENzFEPiAiPFUzMTRFPjxVMzE1Rj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0lOSQorPFVENzFFPiAiPFUzMTRFPjxVMzE1Rj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0lOSAorPFVENzFGPiAiPFUzMTRFPjxVMzE1Rj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0lECis8VUQ3MjA+ICI8VTMxNEU+PFUzMTVGPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEhXSUwKKzxVRDcyMT4gIjxVMzE0RT48VTMxNUY+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdJTEcKKzxVRDcyMj4gIjxVMzE0RT48VTMxNUY+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdJTE0KKzxVRDcyMz4gIjxVMzE0RT48VTMxNUY+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdJTEIKKzxVRDcyND4gIjxVMzE0RT48VTMxNUY+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdJTFMKKzxVRDcyNT4gIjxVMzE0RT48VTMxNUY+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdJTFQKKzxVRDcyNj4gIjxVMzE0RT48VTMxNUY+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdJTFAKKzxVRDcyNz4gIjxVMzE0RT48VTMxNUY+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdJTEgKKzxVRDcyOD4gIjxVMzE0RT48VTMxNUY+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdJTQorPFVENzI5PiAiPFUzMTRFPjxVMzE1Rj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0lCCis8VUQ3MkE+ICI8VTMxNEU+PFUzMTVGPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEhXSUJTCis8VUQ3MkI+ICI8VTMxNEU+PFUzMTVGPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEhXSVMKKzxVRDcyQz4gIjxVMzE0RT48VTMxNUY+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdJU1MKKzxVRDcyRD4gIjxVMzE0RT48VTMxNUY+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdJTkcKKzxVRDcyRT4gIjxVMzE0RT48VTMxNUY+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdJSgorPFVENzJGPiAiPFUzMTRFPjxVMzE1Rj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0lDCis8VUQ3MzA+ICI8VTMxNEU+PFUzMTVGPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEhXSUsKKzxVRDczMT4gIjxVMzE0RT48VTMxNUY+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFdJVAorPFVENzMyPiAiPFUzMTRFPjxVMzE1Rj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBIV0lQCis8VUQ3MzM+ICI8VTMxNEU+PFUzMTVGPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEhXSUgKKzxVRDczND4gIjxVMzE0RT48VTMxNjA+IgklIEhBTkdVTCBTWUxMQUJMRSBIWVUKKzxVRDczNT4gIjxVMzE0RT48VTMxNjA+PFUzMTMxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlVRworPFVENzM2PiAiPFUzMTRFPjxVMzE2MD48VTMxMzI+IgklIEhBTkdVTCBTWUxMQUJMRSBIWVVHRworPFVENzM3PiAiPFUzMTRFPjxVMzE2MD48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBIWVVHUworPFVENzM4PiAiPFUzMTRFPjxVMzE2MD48VTMxMzQ+IgklIEhBTkdVTCBTWUxMQUJMRSBIWVVOCis8VUQ3Mzk+ICI8VTMxNEU+PFUzMTYwPjxVMzEzNT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZVU5JCis8VUQ3M0E+ICI8VTMxNEU+PFUzMTYwPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEhZVU5ICis8VUQ3M0I+ICI8VTMxNEU+PFUzMTYwPjxVMzEzNz4iCSUgSEFOR1VMIFNZTExBQkxFIEhZVUQKKzxVRDczQz4gIjxVMzE0RT48VTMxNjA+PFUzMTM5PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlVTAorPFVENzNEPiAiPFUzMTRFPjxVMzE2MD48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBIWVVMRworPFVENzNFPiAiPFUzMTRFPjxVMzE2MD48VTMxM0I+IgklIEhBTkdVTCBTWUxMQUJMRSBIWVVMTQorPFVENzNGPiAiPFUzMTRFPjxVMzE2MD48VTMxM0M+IgklIEhBTkdVTCBTWUxMQUJMRSBIWVVMQgorPFVENzQwPiAiPFUzMTRFPjxVMzE2MD48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBIWVVMUworPFVENzQxPiAiPFUzMTRFPjxVMzE2MD48VTMxM0U+IgklIEhBTkdVTCBTWUxMQUJMRSBIWVVMVAorPFVENzQyPiAiPFUzMTRFPjxVMzE2MD48VTMxM0Y+IgklIEhBTkdVTCBTWUxMQUJMRSBIWVVMUAorPFVENzQzPiAiPFUzMTRFPjxVMzE2MD48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBIWVVMSAorPFVENzQ0PiAiPFUzMTRFPjxVMzE2MD48VTMxNDE+IgklIEhBTkdVTCBTWUxMQUJMRSBIWVVNCis8VUQ3NDU+ICI8VTMxNEU+PFUzMTYwPjxVMzE0Mj4iCSUgSEFOR1VMIFNZTExBQkxFIEhZVUIKKzxVRDc0Nj4gIjxVMzE0RT48VTMxNjA+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlVQlMKKzxVRDc0Nz4gIjxVMzE0RT48VTMxNjA+PFUzMTQ1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlVUworPFVENzQ4PiAiPFUzMTRFPjxVMzE2MD48VTMxNDY+IgklIEhBTkdVTCBTWUxMQUJMRSBIWVVTUworPFVENzQ5PiAiPFUzMTRFPjxVMzE2MD48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBIWVVORworPFVENzRBPiAiPFUzMTRFPjxVMzE2MD48VTMxNDg+IgklIEhBTkdVTCBTWUxMQUJMRSBIWVVKCis8VUQ3NEI+ICI8VTMxNEU+PFUzMTYwPjxVMzE0QT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZVUMKKzxVRDc0Qz4gIjxVMzE0RT48VTMxNjA+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlVSworPFVENzREPiAiPFUzMTRFPjxVMzE2MD48VTMxNEM+IgklIEhBTkdVTCBTWUxMQUJMRSBIWVVUCis8VUQ3NEU+ICI8VTMxNEU+PFUzMTYwPjxVMzE0RD4iCSUgSEFOR1VMIFNZTExBQkxFIEhZVVAKKzxVRDc0Rj4gIjxVMzE0RT48VTMxNjA+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlVSAorPFVENzUwPiAiPFUzMTRFPjxVMzE2MT4iCSUgSEFOR1VMIFNZTExBQkxFIEhFVQorPFVENzUxPiAiPFUzMTRFPjxVMzE2MT48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBIRVVHCis8VUQ3NTI+ICI8VTMxNEU+PFUzMTYxPjxVMzEzMj4iCSUgSEFOR1VMIFNZTExBQkxFIEhFVUdHCis8VUQ3NTM+ICI8VTMxNEU+PFUzMTYxPjxVMzEzMz4iCSUgSEFOR1VMIFNZTExBQkxFIEhFVUdTCis8VUQ3NTQ+ICI8VTMxNEU+PFUzMTYxPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEhFVU4KKzxVRDc1NT4gIjxVMzE0RT48VTMxNjE+PFUzMTM1PiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVVTkkKKzxVRDc1Nj4gIjxVMzE0RT48VTMxNjE+PFUzMTM2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVVTkgKKzxVRDc1Nz4gIjxVMzE0RT48VTMxNjE+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVVRAorPFVENzU4PiAiPFUzMTRFPjxVMzE2MT48VTMxMzk+IgklIEhBTkdVTCBTWUxMQUJMRSBIRVVMCis8VUQ3NTk+ICI8VTMxNEU+PFUzMTYxPjxVMzEzQT4iCSUgSEFOR1VMIFNZTExBQkxFIEhFVUxHCis8VUQ3NUE+ICI8VTMxNEU+PFUzMTYxPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEhFVUxNCis8VUQ3NUI+ICI8VTMxNEU+PFUzMTYxPjxVMzEzQz4iCSUgSEFOR1VMIFNZTExBQkxFIEhFVUxCCis8VUQ3NUM+ICI8VTMxNEU+PFUzMTYxPjxVMzEzRD4iCSUgSEFOR1VMIFNZTExBQkxFIEhFVUxTCis8VUQ3NUQ+ICI8VTMxNEU+PFUzMTYxPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEhFVUxUCis8VUQ3NUU+ICI8VTMxNEU+PFUzMTYxPjxVMzEzRj4iCSUgSEFOR1VMIFNZTExBQkxFIEhFVUxQCis8VUQ3NUY+ICI8VTMxNEU+PFUzMTYxPjxVMzE0MD4iCSUgSEFOR1VMIFNZTExBQkxFIEhFVUxICis8VUQ3NjA+ICI8VTMxNEU+PFUzMTYxPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEhFVU0KKzxVRDc2MT4gIjxVMzE0RT48VTMxNjE+PFUzMTQyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVVQgorPFVENzYyPiAiPFUzMTRFPjxVMzE2MT48VTMxNDQ+IgklIEhBTkdVTCBTWUxMQUJMRSBIRVVCUworPFVENzYzPiAiPFUzMTRFPjxVMzE2MT48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBIRVVTCis8VUQ3NjQ+ICI8VTMxNEU+PFUzMTYxPjxVMzE0Nj4iCSUgSEFOR1VMIFNZTExBQkxFIEhFVVNTCis8VUQ3NjU+ICI8VTMxNEU+PFUzMTYxPjxVMzE0Nz4iCSUgSEFOR1VMIFNZTExBQkxFIEhFVU5HCis8VUQ3NjY+ICI8VTMxNEU+PFUzMTYxPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEhFVUoKKzxVRDc2Nz4gIjxVMzE0RT48VTMxNjE+PFUzMTRBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVVQworPFVENzY4PiAiPFUzMTRFPjxVMzE2MT48VTMxNEI+IgklIEhBTkdVTCBTWUxMQUJMRSBIRVVLCis8VUQ3Njk+ICI8VTMxNEU+PFUzMTYxPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEhFVVQKKzxVRDc2QT4gIjxVMzE0RT48VTMxNjE+PFUzMTREPiIJJSBIQU5HVUwgU1lMTEFCTEUgSEVVUAorPFVENzZCPiAiPFUzMTRFPjxVMzE2MT48VTMxNEU+IgklIEhBTkdVTCBTWUxMQUJMRSBIRVVICis8VUQ3NkM+ICI8VTMxNEU+PFUzMTYyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlJCis8VUQ3NkQ+ICI8VTMxNEU+PFUzMTYyPjxVMzEzMT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZSUcKKzxVRDc2RT4gIjxVMzE0RT48VTMxNjI+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlJR0cKKzxVRDc2Rj4gIjxVMzE0RT48VTMxNjI+PFUzMTMzPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlJR1MKKzxVRDc3MD4gIjxVMzE0RT48VTMxNjI+PFUzMTM0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlJTgorPFVENzcxPiAiPFUzMTRFPjxVMzE2Mj48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUlOSQorPFVENzcyPiAiPFUzMTRFPjxVMzE2Mj48VTMxMzY+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUlOSAorPFVENzczPiAiPFUzMTRFPjxVMzE2Mj48VTMxMzc+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUlECis8VUQ3NzQ+ICI8VTMxNEU+PFUzMTYyPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZSUwKKzxVRDc3NT4gIjxVMzE0RT48VTMxNjI+PFUzMTNBPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlJTEcKKzxVRDc3Nj4gIjxVMzE0RT48VTMxNjI+PFUzMTNCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlJTE0KKzxVRDc3Nz4gIjxVMzE0RT48VTMxNjI+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlJTEIKKzxVRDc3OD4gIjxVMzE0RT48VTMxNjI+PFUzMTNEPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlJTFMKKzxVRDc3OT4gIjxVMzE0RT48VTMxNjI+PFUzMTNFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlJTFQKKzxVRDc3QT4gIjxVMzE0RT48VTMxNjI+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlJTFAKKzxVRDc3Qj4gIjxVMzE0RT48VTMxNjI+PFUzMTQwPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlJTEgKKzxVRDc3Qz4gIjxVMzE0RT48VTMxNjI+PFUzMTQxPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlJTQorPFVENzdEPiAiPFUzMTRFPjxVMzE2Mj48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUlCCis8VUQ3N0U+ICI8VTMxNEU+PFUzMTYyPjxVMzE0ND4iCSUgSEFOR1VMIFNZTExBQkxFIEhZSUJTCis8VUQ3N0Y+ICI8VTMxNEU+PFUzMTYyPjxVMzE0NT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZSVMKKzxVRDc4MD4gIjxVMzE0RT48VTMxNjI+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlJU1MKKzxVRDc4MT4gIjxVMzE0RT48VTMxNjI+PFUzMTQ3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlJTkcKKzxVRDc4Mj4gIjxVMzE0RT48VTMxNjI+PFUzMTQ4PiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlJSgorPFVENzgzPiAiPFUzMTRFPjxVMzE2Mj48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUlDCis8VUQ3ODQ+ICI8VTMxNEU+PFUzMTYyPjxVMzE0Qj4iCSUgSEFOR1VMIFNZTExBQkxFIEhZSUsKKzxVRDc4NT4gIjxVMzE0RT48VTMxNjI+PFUzMTRDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSFlJVAorPFVENzg2PiAiPFUzMTRFPjxVMzE2Mj48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBIWUlQCis8VUQ3ODc+ICI8VTMxNEU+PFUzMTYyPjxVMzE0RT4iCSUgSEFOR1VMIFNZTExBQkxFIEhZSUgKKzxVRDc4OD4gIjxVMzE0RT48VTMxNjM+IgklIEhBTkdVTCBTWUxMQUJMRSBISQorPFVENzg5PiAiPFUzMTRFPjxVMzE2Mz48VTMxMzE+IgklIEhBTkdVTCBTWUxMQUJMRSBISUcKKzxVRDc4QT4gIjxVMzE0RT48VTMxNjM+PFUzMTMyPiIJJSBIQU5HVUwgU1lMTEFCTEUgSElHRworPFVENzhCPiAiPFUzMTRFPjxVMzE2Mz48VTMxMzM+IgklIEhBTkdVTCBTWUxMQUJMRSBISUdTCis8VUQ3OEM+ICI8VTMxNEU+PFUzMTYzPjxVMzEzND4iCSUgSEFOR1VMIFNZTExBQkxFIEhJTgorPFVENzhEPiAiPFUzMTRFPjxVMzE2Mz48VTMxMzU+IgklIEhBTkdVTCBTWUxMQUJMRSBISU5JCis8VUQ3OEU+ICI8VTMxNEU+PFUzMTYzPjxVMzEzNj4iCSUgSEFOR1VMIFNZTExBQkxFIEhJTkgKKzxVRDc4Rj4gIjxVMzE0RT48VTMxNjM+PFUzMTM3PiIJJSBIQU5HVUwgU1lMTEFCTEUgSElECis8VUQ3OTA+ICI8VTMxNEU+PFUzMTYzPjxVMzEzOT4iCSUgSEFOR1VMIFNZTExBQkxFIEhJTAorPFVENzkxPiAiPFUzMTRFPjxVMzE2Mz48VTMxM0E+IgklIEhBTkdVTCBTWUxMQUJMRSBISUxHCis8VUQ3OTI+ICI8VTMxNEU+PFUzMTYzPjxVMzEzQj4iCSUgSEFOR1VMIFNZTExBQkxFIEhJTE0KKzxVRDc5Mz4gIjxVMzE0RT48VTMxNjM+PFUzMTNDPiIJJSBIQU5HVUwgU1lMTEFCTEUgSElMQgorPFVENzk0PiAiPFUzMTRFPjxVMzE2Mz48VTMxM0Q+IgklIEhBTkdVTCBTWUxMQUJMRSBISUxTCis8VUQ3OTU+ICI8VTMxNEU+PFUzMTYzPjxVMzEzRT4iCSUgSEFOR1VMIFNZTExBQkxFIEhJTFQKKzxVRDc5Nj4gIjxVMzE0RT48VTMxNjM+PFUzMTNGPiIJJSBIQU5HVUwgU1lMTEFCTEUgSElMUAorPFVENzk3PiAiPFUzMTRFPjxVMzE2Mz48VTMxNDA+IgklIEhBTkdVTCBTWUxMQUJMRSBISUxICis8VUQ3OTg+ICI8VTMxNEU+PFUzMTYzPjxVMzE0MT4iCSUgSEFOR1VMIFNZTExBQkxFIEhJTQorPFVENzk5PiAiPFUzMTRFPjxVMzE2Mz48VTMxNDI+IgklIEhBTkdVTCBTWUxMQUJMRSBISUIKKzxVRDc5QT4gIjxVMzE0RT48VTMxNjM+PFUzMTQ0PiIJJSBIQU5HVUwgU1lMTEFCTEUgSElCUworPFVENzlCPiAiPFUzMTRFPjxVMzE2Mz48VTMxNDU+IgklIEhBTkdVTCBTWUxMQUJMRSBISVMKKzxVRDc5Qz4gIjxVMzE0RT48VTMxNjM+PFUzMTQ2PiIJJSBIQU5HVUwgU1lMTEFCTEUgSElTUworPFVENzlEPiAiPFUzMTRFPjxVMzE2Mz48VTMxNDc+IgklIEhBTkdVTCBTWUxMQUJMRSBISU5HCis8VUQ3OUU+ICI8VTMxNEU+PFUzMTYzPjxVMzE0OD4iCSUgSEFOR1VMIFNZTExBQkxFIEhJSgorPFVENzlGPiAiPFUzMTRFPjxVMzE2Mz48VTMxNEE+IgklIEhBTkdVTCBTWUxMQUJMRSBISUMKKzxVRDdBMD4gIjxVMzE0RT48VTMxNjM+PFUzMTRCPiIJJSBIQU5HVUwgU1lMTEFCTEUgSElLCis8VUQ3QTE+ICI8VTMxNEU+PFUzMTYzPjxVMzE0Qz4iCSUgSEFOR1VMIFNZTExBQkxFIEhJVAorPFVEN0EyPiAiPFUzMTRFPjxVMzE2Mz48VTMxNEQ+IgklIEhBTkdVTCBTWUxMQUJMRSBISVAKKzxVRDdBMz4gIjxVMzE0RT48VTMxNjM+PFUzMTRFPiIJJSBIQU5HVUwgU1lMTEFCTEUgSElICisKK3RyYW5zbGl0X2VuZAorCitFTkQgTENfQ1RZUEUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RyYW5zbGl0X25hcnJvdyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RyYW5zbGl0X25hcnJvdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWExZGQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdHJhbnNsaXRfbmFycm93CkBAIC0wLDAgKzEsMTM4IEBACitlc2NhcGVfY2hhciAvCitjb21tZW50X2NoYXIgJQorCislIFRyYW5zbGl0ZXJhdGlvbnMgb2YgbmFycm93IGVxdWl2YWxlbnRzLgorJSBHZW5lcmF0ZWQgdGhyb3VnaAorJSAgICQgZ3JlcCAnXlteO10qO1teO10qO1teO10qO1teO10qO1teO10qOzxuYXJyb3c+W147XSo7JyBVbmljb2RlRGF0YS50eHQgfCBcCislICAgICBzZWQgLWUgJ3MvXlwoW147XSpcKTtcKFteO10qXCk7W147XSo7W147XSo7W147XSo7PG5hcnJvdz4gXChbXjtdKlwpOy4qJC88VVwxPiA8VVwzPiAlIFwyLycKKworTENfQ1RZUEUKKwordHJhbnNsaXRfc3RhcnQKKworPFVGRjYxPiA8VTMwMDI+ICUgSEFMRldJRFRIIElERU9HUkFQSElDIEZVTEwgU1RPUAorPFVGRjYyPiA8VTMwMEM+ICUgSEFMRldJRFRIIExFRlQgQ09STkVSIEJSQUNLRVQKKzxVRkY2Mz4gPFUzMDBEPiAlIEhBTEZXSURUSCBSSUdIVCBDT1JORVIgQlJBQ0tFVAorPFVGRjY0PiA8VTMwMDE+ICUgSEFMRldJRFRIIElERU9HUkFQSElDIENPTU1BCis8VUZGNjU+IDxVMzBGQj4gJSBIQUxGV0lEVEggS0FUQUtBTkEgTUlERExFIERPVAorPFVGRjY2PiA8VTMwRjI+ICUgSEFMRldJRFRIIEtBVEFLQU5BIExFVFRFUiBXTworPFVGRjY3PiA8VTMwQTE+ICUgSEFMRldJRFRIIEtBVEFLQU5BIExFVFRFUiBTTUFMTCBBCis8VUZGNjg+IDxVMzBBMz4gJSBIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFNNQUxMIEkKKzxVRkY2OT4gPFUzMEE1PiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgU01BTEwgVQorPFVGRjZBPiA8VTMwQTc+ICUgSEFMRldJRFRIIEtBVEFLQU5BIExFVFRFUiBTTUFMTCBFCis8VUZGNkI+IDxVMzBBOT4gJSBIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFNNQUxMIE8KKzxVRkY2Qz4gPFUzMEUzPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgU01BTEwgWUEKKzxVRkY2RD4gPFUzMEU1PiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgU01BTEwgWVUKKzxVRkY2RT4gPFUzMEU3PiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgU01BTEwgWU8KKzxVRkY2Rj4gPFUzMEMzPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgU01BTEwgVFUKKzxVRkY3MD4gPFUzMEZDPiAlIEhBTEZXSURUSCBLQVRBS0FOQS1ISVJBR0FOQSBQUk9MT05HRUQgU09VTkQgTUFSSworPFVGRjcxPiA8VTMwQTI+ICUgSEFMRldJRFRIIEtBVEFLQU5BIExFVFRFUiBBCis8VUZGNzI+IDxVMzBBND4gJSBIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIEkKKzxVRkY3Mz4gPFUzMEE2PiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgVQorPFVGRjc0PiA8VTMwQTg+ICUgSEFMRldJRFRIIEtBVEFLQU5BIExFVFRFUiBFCis8VUZGNzU+IDxVMzBBQT4gJSBIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIE8KKzxVRkY3Nj4gPFUzMEFCPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgS0EKKzxVRkY3Nz4gPFUzMEFEPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgS0kKKzxVRkY3OD4gPFUzMEFGPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgS1UKKzxVRkY3OT4gPFUzMEIxPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgS0UKKzxVRkY3QT4gPFUzMEIzPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgS08KKzxVRkY3Qj4gPFUzMEI1PiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgU0EKKzxVRkY3Qz4gPFUzMEI3PiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgU0kKKzxVRkY3RD4gPFUzMEI5PiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgU1UKKzxVRkY3RT4gPFUzMEJCPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgU0UKKzxVRkY3Rj4gPFUzMEJEPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgU08KKzxVRkY4MD4gPFUzMEJGPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgVEEKKzxVRkY4MT4gPFUzMEMxPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgVEkKKzxVRkY4Mj4gPFUzMEM0PiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgVFUKKzxVRkY4Mz4gPFUzMEM2PiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgVEUKKzxVRkY4ND4gPFUzMEM4PiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgVE8KKzxVRkY4NT4gPFUzMENBPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgTkEKKzxVRkY4Nj4gPFUzMENCPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgTkkKKzxVRkY4Nz4gPFUzMENDPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgTlUKKzxVRkY4OD4gPFUzMENEPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgTkUKKzxVRkY4OT4gPFUzMENFPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgTk8KKzxVRkY4QT4gPFUzMENGPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgSEEKKzxVRkY4Qj4gPFUzMEQyPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgSEkKKzxVRkY4Qz4gPFUzMEQ1PiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgSFUKKzxVRkY4RD4gPFUzMEQ4PiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgSEUKKzxVRkY4RT4gPFUzMERCPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgSE8KKzxVRkY4Rj4gPFUzMERFPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgTUEKKzxVRkY5MD4gPFUzMERGPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgTUkKKzxVRkY5MT4gPFUzMEUwPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgTVUKKzxVRkY5Mj4gPFUzMEUxPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgTUUKKzxVRkY5Mz4gPFUzMEUyPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgTU8KKzxVRkY5ND4gPFUzMEU0PiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgWUEKKzxVRkY5NT4gPFUzMEU2PiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgWVUKKzxVRkY5Nj4gPFUzMEU4PiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgWU8KKzxVRkY5Nz4gPFUzMEU5PiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgUkEKKzxVRkY5OD4gPFUzMEVBPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgUkkKKzxVRkY5OT4gPFUzMEVCPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgUlUKKzxVRkY5QT4gPFUzMEVDPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgUkUKKzxVRkY5Qj4gPFUzMEVEPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgUk8KKzxVRkY5Qz4gPFUzMEVGPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgV0EKKzxVRkY5RD4gPFUzMEYzPiAlIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgTgorPFVGRjlFPiA8VTMwOTk+ICUgSEFMRldJRFRIIEtBVEFLQU5BIFZPSUNFRCBTT1VORCBNQVJLCis8VUZGOUY+IDxVMzA5QT4gJSBIQUxGV0lEVEggS0FUQUtBTkEgU0VNSS1WT0lDRUQgU09VTkQgTUFSSworPFVGRkEwPiA8VTMxNjQ+ICUgSEFMRldJRFRIIEhBTkdVTCBGSUxMRVIKKzxVRkZBMT4gPFUzMTMxPiAlIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIEtJWUVPSworPFVGRkEyPiA8VTMxMzI+ICUgSEFMRldJRFRIIEhBTkdVTCBMRVRURVIgU1NBTkdLSVlFT0sKKzxVRkZBMz4gPFUzMTMzPiAlIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIEtJWUVPSy1TSU9TCis8VUZGQTQ+IDxVMzEzND4gJSBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBOSUVVTgorPFVGRkE1PiA8VTMxMzU+ICUgSEFMRldJRFRIIEhBTkdVTCBMRVRURVIgTklFVU4tQ0lFVUMKKzxVRkZBNj4gPFUzMTM2PiAlIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIE5JRVVOLUhJRVVICis8VUZGQTc+IDxVMzEzNz4gJSBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBUSUtFVVQKKzxVRkZBOD4gPFUzMTM4PiAlIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFNTQU5HVElLRVVUCis8VUZGQTk+IDxVMzEzOT4gJSBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBSSUVVTAorPFVGRkFBPiA8VTMxM0E+ICUgSEFMRldJRFRIIEhBTkdVTCBMRVRURVIgUklFVUwtS0lZRU9LCis8VUZGQUI+IDxVMzEzQj4gJSBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBSSUVVTC1NSUVVTQorPFVGRkFDPiA8VTMxM0M+ICUgSEFMRldJRFRIIEhBTkdVTCBMRVRURVIgUklFVUwtUElFVVAKKzxVRkZBRD4gPFUzMTNEPiAlIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFJJRVVMLVNJT1MKKzxVRkZBRT4gPFUzMTNFPiAlIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFJJRVVMLVRISUVVVEgKKzxVRkZBRj4gPFUzMTNGPiAlIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFJJRVVMLVBISUVVUEgKKzxVRkZCMD4gPFUzMTQwPiAlIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFJJRVVMLUhJRVVICis8VUZGQjE+IDxVMzE0MT4gJSBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBNSUVVTQorPFVGRkIyPiA8VTMxNDI+ICUgSEFMRldJRFRIIEhBTkdVTCBMRVRURVIgUElFVVAKKzxVRkZCMz4gPFUzMTQzPiAlIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFNTQU5HUElFVVAKKzxVRkZCND4gPFUzMTQ0PiAlIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFBJRVVQLVNJT1MKKzxVRkZCNT4gPFUzMTQ1PiAlIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFNJT1MKKzxVRkZCNj4gPFUzMTQ2PiAlIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFNTQU5HU0lPUworPFVGRkI3PiA8VTMxNDc+ICUgSEFMRldJRFRIIEhBTkdVTCBMRVRURVIgSUVVTkcKKzxVRkZCOD4gPFUzMTQ4PiAlIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIENJRVVDCis8VUZGQjk+IDxVMzE0OT4gJSBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBTU0FOR0NJRVVDCis8VUZGQkE+IDxVMzE0QT4gJSBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBDSElFVUNICis8VUZGQkI+IDxVMzE0Qj4gJSBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBLSElFVUtICis8VUZGQkM+IDxVMzE0Qz4gJSBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBUSElFVVRICis8VUZGQkQ+IDxVMzE0RD4gJSBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBQSElFVVBICis8VUZGQkU+IDxVMzE0RT4gJSBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBISUVVSAorPFVGRkMyPiA8VTMxNEY+ICUgSEFMRldJRFRIIEhBTkdVTCBMRVRURVIgQQorPFVGRkMzPiA8VTMxNTA+ICUgSEFMRldJRFRIIEhBTkdVTCBMRVRURVIgQUUKKzxVRkZDND4gPFUzMTUxPiAlIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFlBCis8VUZGQzU+IDxVMzE1Mj4gJSBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBZQUUKKzxVRkZDNj4gPFUzMTUzPiAlIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIEVPCis8VUZGQzc+IDxVMzE1ND4gJSBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBFCis8VUZGQ0E+IDxVMzE1NT4gJSBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBZRU8KKzxVRkZDQj4gPFUzMTU2PiAlIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFlFCis8VUZGQ0M+IDxVMzE1Nz4gJSBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBPCis8VUZGQ0Q+IDxVMzE1OD4gJSBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBXQQorPFVGRkNFPiA8VTMxNTk+ICUgSEFMRldJRFRIIEhBTkdVTCBMRVRURVIgV0FFCis8VUZGQ0Y+IDxVMzE1QT4gJSBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBPRQorPFVGRkQyPiA8VTMxNUI+ICUgSEFMRldJRFRIIEhBTkdVTCBMRVRURVIgWU8KKzxVRkZEMz4gPFUzMTVDPiAlIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFUKKzxVRkZEND4gPFUzMTVEPiAlIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFdFTworPFVGRkQ1PiA8VTMxNUU+ICUgSEFMRldJRFRIIEhBTkdVTCBMRVRURVIgV0UKKzxVRkZENj4gPFUzMTVGPiAlIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFdJCis8VUZGRDc+IDxVMzE2MD4gJSBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBZVQorPFVGRkRBPiA8VTMxNjE+ICUgSEFMRldJRFRIIEhBTkdVTCBMRVRURVIgRVUKKzxVRkZEQj4gPFUzMTYyPiAlIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFlJCis8VUZGREM+IDxVMzE2Mz4gJSBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBJCis8VUZGRTg+IDxVMjUwMj4gJSBIQUxGV0lEVEggRk9STVMgTElHSFQgVkVSVElDQUwKKzxVRkZFOT4gPFUyMTkwPiAlIEhBTEZXSURUSCBMRUZUV0FSRFMgQVJST1cKKzxVRkZFQT4gPFUyMTkxPiAlIEhBTEZXSURUSCBVUFdBUkRTIEFSUk9XCis8VUZGRUI+IDxVMjE5Mj4gJSBIQUxGV0lEVEggUklHSFRXQVJEUyBBUlJPVworPFVGRkVDPiA8VTIxOTM+ICUgSEFMRldJRFRIIERPV05XQVJEUyBBUlJPVworPFVGRkVEPiA8VTI1QTA+ICUgSEFMRldJRFRIIEJMQUNLIFNRVUFSRQorPFVGRkVFPiA8VTI1Q0I+ICUgSEFMRldJRFRIIFdISVRFIENJUkNMRQorCit0cmFuc2xpdF9lbmQKKworRU5EIExDX0NUWVBFCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy90cmFuc2xpdF9uZXV0cmFsIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdHJhbnNsaXRfbmV1dHJhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODgzZDI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdHJhbnNsaXRfbmV1dHJhbApAQCAtMCwwICsxLDMxOCBAQAorZXNjYXBlX2NoYXIgLworY29tbWVudF9jaGFyICUKKworJSBMYW5ndWFnZSBhbmQgbG9jYWxlIG5ldXRyYWwgdHJhbnNsaXRlcmF0aW9ucy4KKworTENfQ1RZUEUKKwordHJhbnNsaXRfc3RhcnQKKworaW5jbHVkZSAidHJhbnNsaXRfY2lyY2xlIjsiIgoraW5jbHVkZSAidHJhbnNsaXRfY2prX2NvbXBhdCI7IiIKK2luY2x1ZGUgInRyYW5zbGl0X2NvbXBhdCI7IiIKK2luY2x1ZGUgInRyYW5zbGl0X2ZvbnQiOyIiCitpbmNsdWRlICJ0cmFuc2xpdF9mcmFjdGlvbiI7IiIKK2luY2x1ZGUgInRyYW5zbGl0X25hcnJvdyI7IiIKK2luY2x1ZGUgInRyYW5zbGl0X3NtYWxsIjsiIgoraW5jbHVkZSAidHJhbnNsaXRfd2lkZSI7IiIKKworJSBOTy1CUkVBSyBTUEFDRQorPFUwMEEwPiA8VTAwMjA+CislIENPUFlSSUdIVCBTSUdOCis8VTAwQTk+ICI8VTAwMjg+PFUwMDQzPjxVMDAyOT4iCislIExFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLCis8VTAwQUI+ICI8VTAwM0M+PFUwMDNDPiIKKyUgU09GVCBIWVBIRU4KKzxVMDBBRD4gPFUwMDJEPgorJSBSRUdJU1RFUkVEIFNJR04KKzxVMDBBRT4gIjxVMDAyOD48VTAwNTI+PFUwMDI5PiIKKyUgQ0VESUxMQQorPFUwMEI4PiA8VTAwMkM+CislIFJJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSSworPFUwMEJCPiAiPFUwMDNFPjxVMDAzRT4iCislIE1VTFRJUExJQ0FUSU9OIFNJR04KKzxVMDBENz4gPFUwMDc4PgorJSBMQVRJTiBDQVBJVEFMIExFVFRFUiBBRQorPFUwMEM2PiAiPFUwMDQxPjxVMDA0NT4iCislIExBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTCis8VTAwREY+ICI8VTAwNzM+PFUwMDczPiIKKyUgTEFUSU4gU01BTEwgTEVUVEVSIEFFCis8VTAwRTY+ICI8VTAwNjE+PFUwMDY1PiIKKyUgTU9ESUZJRVIgTEVUVEVSIFBSSU1FCis8VTAyQjk+IDxVMjAzMj47PFUwMEI0PgorJSBNT0RJRklFUiBMRVRURVIgRE9VQkxFIFBSSU1FCis8VTAyQkE+IDxVMjAzMz47IjxVMDBCND48VTAwQjQ+IgorJSBNT0RJRklFUiBMRVRURVIgVFVSTkVEIENPTU1BCis8VTAyQkI+IDxVMjAxOD4KKyUgTU9ESUZJRVIgTEVUVEVSIEFQT1NUUk9QSEUKKzxVMDJCQz4gPFUyMDE5Pjs8VTAwMjc+CislIE1PRElGSUVSIExFVFRFUiBSRVZFUlNFRCBDT01NQQorPFUwMkJEPiA8VTIwMUI+CislIE1PRElGSUVSIExFVFRFUiBDSVJDVU1GTEVYIEFDQ0VOVAorPFUwMkM2PiA8VTAwNUU+CislIE1PRElGSUVSIExFVFRFUiBWRVJUSUNBTCBMSU5FCis8VTAyQzg+IDxVMDAyNz4KKyUgTU9ESUZJRVIgTEVUVEVSIE1BQ1JPTgorPFUwMkM5PiA8VTAwQUY+CislIE1PRElGSUVSIExFVFRFUiBBQ1VURSBBQ0NFTlQKKzxVMDJDQT4gPFUwMEI0PgorJSBNT0RJRklFUiBMRVRURVIgR1JBVkUgQUNDRU5UCis8VTAyQ0I+IDxVMDA2MD4KKyUgTU9ESUZJRVIgTEVUVEVSIExPVyBNQUNST04KKzxVMDJDRD4gPFUwMDVGPgorJSBNT0RJRklFUiBMRVRURVIgVFJJQU5HVUxBUiBDT0xPTgorPFUwMkQwPiA8VTAwM0E+CislIFNNQUxMIFRJTERFCis8VTAyREM+IDxVMDA3RT4KKyUgWkVSTyBXSURUSCBTUEFDRQorPFUyMDBCPiAiIgorJSBIWVBIRU4KKzxVMjAxMD4gPFUwMDJEPgorJSBOT04tQlJFQUtJTkcgSFlQSEVOCis8VTIwMTE+IDxVMDAyRD4KKyUgRklHVVJFIERBU0gKKzxVMjAxMj4gPFUwMDJEPgorJSBFTiBEQVNICis8VTIwMTM+IDxVMDAyRD4KKyUgRU0gREFTSAorPFUyMDE0PiAiPFUwMDJEPjxVMDAyRD4iCislIEhPUklaT05UQUwgQkFSCis8VTIwMTU+IDxVMDAyRD4KKyUgTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUksKKzxVMjAxOD4gPFUwMDI3PiAgICAgICAgICUgbm90IDxVMDA2MD4gYmVjYXVzZSBpdCBtdXN0IHBhaXIgd2l0aCA8VTIwMTk+CislIFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSworPFUyMDE5PiA8VTAwMjc+ICAgICAgICAgJSBub3QgPFUwMEI0PiBiZWNhdXNlIGl0J3Mgb2Z0ZW4gdXNlZCBhcyBhbiBhcG9zdHJvcGhlCislIFNJTkdMRSBMT1ctOSBRVU9UQVRJT04gTUFSSworPFUyMDFBPiA8VTAwMkM+CislIFNJTkdMRSBISUdILVJFVkVSU0VELTkgUVVPVEFUSU9OIE1BUksKKzxVMjAxQj4gPFUwMDI3PiAgICAgICAgICUgbm90IDxVMDA2MD4gYmVjYXVzZSBpdCBtdXN0IHBhaXIgd2l0aCA8VTIwMTk+CislIExFRlQgRE9VQkxFIFFVT1RBVElPTiBNQVJLCis8VTIwMUM+IDxVMDAyMj4KKyUgUklHSFQgRE9VQkxFIFFVT1RBVElPTiBNQVJLCis8VTIwMUQ+IDxVMDAyMj4KKyUgRE9VQkxFIExPVy05IFFVT1RBVElPTiBNQVJLCis8VTIwMUU+ICI8VTAwMkM+PFUwMDJDPiIKKyUgRE9VQkxFIEhJR0gtUkVWRVJTRUQtOSBRVU9UQVRJT04gTUFSSworPFUyMDFGPiA8VTAwMjI+CislIERBR0dFUgorPFUyMDIwPiA8VTAwMkI+CislIEJVTExFVAorPFUyMDIyPiA8VTAwNkY+CislIE5BUlJPVyBOTy1CUkVBSyBTUEFDRQorPFUyMDJGPiA8VTAwQTA+OzxVMDAyMD4KKyUgUFJJTUUKKzxVMjAzMj4gPFUwMEI0PgorJSBET1VCTEUgUFJJTUUKKzxVMjAzMz4gIjxVMjAzMj48VTIwMzI+IjsiPFUwMEI0PjxVMDBCND4iCislIFRSSVBMRSBQUklNRQorPFUyMDM0PiAiPFUyMDMyPjxVMjAzMj48VTIwMzI+IjsiPFUwMEI0PjxVMDBCND48VTAwQjQ+IgorJSBSRVZFUlNFRCBQUklNRQorPFUyMDM1PiA8VTAwNjA+CislIFJFVkVSU0VEIERPVUJMRSBQUklNRQorPFUyMDM2PiAiPFUyMDM1PjxVMjAzNT4iOyI8VTAwNjA+PFUwMDYwPiIKKyUgUkVWRVJTRUQgVFJJUExFIFBSSU1FCis8VTIwMzc+ICI8VTIwMzU+PFUyMDM1PjxVMjAzNT4iOyI8VTAwNjA+PFUwMDYwPjxVMDA2MD4iCislIFNJTkdMRSBMRUZULVBPSU5USU5HIEFOR0xFIFFVT1RBVElPTiBNQVJLCis8VTIwMzk+IDxVMDAzQz4KKyUgU0lOR0xFIFJJR0hULVBPSU5USU5HIEFOR0xFIFFVT1RBVElPTiBNQVJLCis8VTIwM0E+IDxVMDAzRT4KKyUgRlJBQ1RJT04gU0xBU0gKKzxVMjA0ND4gPFUwMDJGPgorJSBXT1JEIEpPSU5FUgorPFUyMDYwPiAiIgorJSBGVU5DVElPTiBBUFBMSUNBVElPTgorPFUyMDYxPiAiIgorJSBJTlZJU0lCTEUgVElNRVMKKzxVMjA2Mj4gIiIKKyUgSU5WSVNJQkxFIFNFUEFSQVRPUgorPFUyMDYzPiAiIgorJSBET05HIFNJR04KKzxVMjBBQj4gIjxVMDExMD48VTFFRDM+PFUwMDZFPjxVMDA2Nz4iCislIEVVUk8gU0lHTgorPFUyMEFDPiAiPFUwMDQ1PjxVMDA1NT48VTAwNTI+IgorJSBUUkFERSBNQVJLIFNJR04KKzxVMjEyMj4gIjxVMDAyOD48VTAwNTQ+PFUwMDREPjxVMDAyOT4iCislIE9ITSBTSUdOCis8VTIxMjY+IDxVMDNBOT47IjxVMDA0Rj48VTAwNjg+PFUwMDZEPiIKKyUgRVNUSU1BVEVEIFNZTUJPTAorPFUyMTJFPiA8VTAwNjU+CislIExFRlRXQVJEUyBBUlJPVworPFUyMTkwPiAiPFUwMDNDPjxVMDAyRD4iCislIFJJR0hUV0FSRFMgQVJST1cKKzxVMjE5Mj4gIjxVMDAyRD48VTAwM0U+IgorJSBMRUZUIFJJR0hUIEFSUk9XCis8VTIxOTQ+ICI8VTAwM0M+PFUwMDJEPjxVMDAzRT4iCislIExFRlRXQVJEUyBET1VCTEUgQVJST1cKKzxVMjFEMD4gIjxVMDAzQz48VTAwM0Q+IgorJSBMRUZUIFJJR0hUIERPVUJMRSBBUlJPVworPFUyMUQ0PiAiPFUwMDNDPjxVMDAzRD48VTAwM0U+IgorJSBSSUdIVFdBUkRTIERPVUJMRSBBUlJPVworPFUyMUQyPiAiPFUwMDNEPjxVMDAzRT4iCislIE1JTlVTIFNJR04KKzxVMjIxMj4gPFUyMDEzPjs8VTAwMkQ+CislIERJVklTSU9OIFNMQVNICis8VTIyMTU+IDxVMDAyRj4KKyUgU0VUIE1JTlVTCis8VTIyMTY+IDxVMDA1Qz4KKyUgQVNURVJJU0sgT1BFUkFUT1IKKzxVMjIxNz4gPFUwMDJBPgorJSBCVUxMRVQgT1BFUkFUT1IKKzxVMjIxOT4gPFUyMDIyPjs8VTAwQjc+CislIERJVklERVMKKzxVMjIyMz4gPFUwMDdDPgorJSBSQVRJTworPFUyMjM2PiA8VTAwM0E+CislIFRJTERFIE9QRVJBVE9SCis8VTIyM0M+IDxVMDA3RT4KKyUgTEVTUy1USEFOIE9SIEVRVUFMIFRPCis8VTIyNjQ+ICI8VTAwM0M+PFUwMDNEPiIKKyUgR1JFQVRFUi1USEFOIE9SIEVRVUFMIFRPCis8VTIyNjU+ICI8VTAwM0U+PFUwMDNEPiIKKyUgTVVDSCBMRVNTLVRIQU4KKzxVMjI2QT4gIjxVMDAzQz48VTAwM0M+IgorJSBNVUNIIEdSRUFURVItVEhBTgorPFUyMjZCPiAiPFUwMDNFPjxVMDAzRT4iCislIERPVCBPUEVSQVRPUgorPFUyMkM1PiA8VTAwQjc+CislIFZFUlkgTVVDSCBMRVNTLVRIQU4KKzxVMjJEOD4gIjxVMDAzQz48VTAwM0M+PFUwMDNDPiIKKyUgVkVSWSBNVUNIIEdSRUFURVItVEhBTgorPFUyMkQ5PiAiPFUwMDNFPjxVMDAzRT48VTAwM0U+IgorJSBNSURMSU5FIEhPUklaT05UQUwgRUxMSVBTSVMKKzxVMjJFRj4gIjxVMDBCNz48VTAwQjc+PFUwMEI3PiIKKyUgU1lNQk9MIEZPUiBOVUxMCis8VTI0MDA+ICI8VTAwNEU+PFUwMDU1PjxVMDA0Qz4iCislIFNZTUJPTCBGT1IgU1RBUlQgT0YgSEVBRElORworPFUyNDAxPiAiPFUwMDUzPjxVMDA0Rj48VTAwNDg+IgorJSBTWU1CT0wgRk9SIFNUQVJUIE9GIFRFWFQKKzxVMjQwMj4gIjxVMDA1Mz48VTAwNTQ+PFUwMDU4PiIKKyUgU1lNQk9MIEZPUiBFTkQgT0YgVEVYVAorPFUyNDAzPiAiPFUwMDQ1PjxVMDA1ND48VTAwNTg+IgorJSBTWU1CT0wgRk9SIEVORCBPRiBUUkFOU01JU1NJT04KKzxVMjQwND4gIjxVMDA0NT48VTAwNEY+PFUwMDU0PiIKKyUgU1lNQk9MIEZPUiBFTlFVSVJZCis8VTI0MDU+ICI8VTAwNDU+PFUwMDRFPjxVMDA1MT4iCislIFNZTUJPTCBGT1IgQUNLTk9XTEVER0UKKzxVMjQwNj4gIjxVMDA0MT48VTAwNDM+PFUwMDRCPiIKKyUgU1lNQk9MIEZPUiBCRUxMCis8VTI0MDc+ICI8VTAwNDI+PFUwMDQ1PjxVMDA0Qz4iCislIFNZTUJPTCBGT1IgQkFDS1NQQUNFCis8VTI0MDg+ICI8VTAwNDI+PFUwMDUzPiIKKyUgU1lNQk9MIEZPUiBIT1JJWk9OVEFMIFRBQlVMQVRJT04KKzxVMjQwOT4gIjxVMDA0OD48VTAwNTQ+IgorJSBTWU1CT0wgRk9SIExJTkUgRkVFRAorPFUyNDBBPiAiPFUwMDRDPjxVMDA0Nj4iCislIFNZTUJPTCBGT1IgVkVSVElDQUwgVEFCVUxBVElPTgorPFUyNDBCPiAiPFUwMDU2PjxVMDA1ND4iCislIFNZTUJPTCBGT1IgRk9STSBGRUVECis8VTI0MEM+ICI8VTAwNDY+PFUwMDQ2PiIKKyUgU1lNQk9MIEZPUiBDQVJSSUFHRSBSRVRVUk4KKzxVMjQwRD4gIjxVMDA0Mz48VTAwNTI+IgorJSBTWU1CT0wgRk9SIFNISUZUIE9VVAorPFUyNDBFPiAiPFUwMDUzPjxVMDA0Rj4iCislIFNZTUJPTCBGT1IgU0hJRlQgSU4KKzxVMjQwRj4gIjxVMDA1Mz48VTAwNDk+IgorJSBTWU1CT0wgRk9SIERBVEEgTElOSyBFU0NBUEUKKzxVMjQxMD4gIjxVMDA0ND48VTAwNEM+PFUwMDQ1PiIKKyUgU1lNQk9MIEZPUiBERVZJQ0UgQ09OVFJPTCBPTkUKKzxVMjQxMT4gIjxVMDA0ND48VTAwNDM+PFUwMDMxPiIKKyUgU1lNQk9MIEZPUiBERVZJQ0UgQ09OVFJPTCBUV08KKzxVMjQxMj4gIjxVMDA0ND48VTAwNDM+PFUwMDMyPiIKKyUgU1lNQk9MIEZPUiBERVZJQ0UgQ09OVFJPTCBUSFJFRQorPFUyNDEzPiAiPFUwMDQ0PjxVMDA0Mz48VTAwMzM+IgorJSBTWU1CT0wgRk9SIERFVklDRSBDT05UUk9MIEZPVVIKKzxVMjQxND4gIjxVMDA0ND48VTAwNDM+PFUwMDM0PiIKKyUgU1lNQk9MIEZPUiBORUdBVElWRSBBQ0tOT1dMRURHRQorPFUyNDE1PiAiPFUwMDRFPjxVMDA0MT48VTAwNEI+IgorJSBTWU1CT0wgRk9SIFNZTkNIUk9OT1VTIElETEUKKzxVMjQxNj4gIjxVMDA1Mz48VTAwNTk+PFUwMDRFPiIKKyUgU1lNQk9MIEZPUiBFTkQgT0YgVFJBTlNNSVNTSU9OIEJMT0NLCis8VTI0MTc+ICI8VTAwNDU+PFUwMDU0PjxVMDA0Mj4iCislIFNZTUJPTCBGT1IgQ0FOQ0VMCis8VTI0MTg+ICI8VTAwNDM+PFUwMDQxPjxVMDA0RT4iCislIFNZTUJPTCBGT1IgRU5EIE9GIE1FRElVTQorPFUyNDE5PiAiPFUwMDQ1PjxVMDA0RD4iCislIFNZTUJPTCBGT1IgU1VCU1RJVFVURQorPFUyNDFBPiAiPFUwMDUzPjxVMDA1NT48VTAwNDI+IgorJSBTWU1CT0wgRk9SIEVTQ0FQRQorPFUyNDFCPiAiPFUwMDQ1PjxVMDA1Mz48VTAwNDM+IgorJSBTWU1CT0wgRk9SIEZJTEUgU0VQQVJBVE9SCis8VTI0MUM+ICI8VTAwNDY+PFUwMDUzPiIKKyUgU1lNQk9MIEZPUiBHUk9VUCBTRVBBUkFUT1IKKzxVMjQxRD4gIjxVMDA0Nz48VTAwNTM+IgorJSBTWU1CT0wgRk9SIFJFQ09SRCBTRVBBUkFUT1IKKzxVMjQxRT4gIjxVMDA1Mj48VTAwNTM+IgorJSBTWU1CT0wgRk9SIFVOSVQgU0VQQVJBVE9SCis8VTI0MUY+ICI8VTAwNTU+PFUwMDUzPiIKKyUgU1lNQk9MIEZPUiBTUEFDRQorPFUyNDIwPiAiPFUwMDUzPjxVMDA1MD4iCislIFNZTUJPTCBGT1IgREVMRVRFCis8VTI0MjE+ICI8VTAwNDQ+PFUwMDQ1PjxVMDA0Qz4iCislIE9QRU4gQk9YCis8VTI0MjM+IDxVMDA1Rj4KKyUgU1lNQk9MIEZPUiBORVdMSU5FCis8VTI0MjQ+ICI8VTAwNEU+PFUwMDRDPiIKKyUgQk9YIERSQVdJTkdTIExJR0hUIEhPUklaT05UQUwKKzxVMjUwMD4gPFUwMDJEPgorJSBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwKKzxVMjUwMj4gPFUwMDdDPgorJSBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgUklHSFQKKzxVMjUwQz4gPFUwMDJCPgorJSBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgTEVGVAorPFUyNTEwPiA8VTAwMkI+CislIEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgUklHSFQKKzxVMjUxND4gPFUwMDJCPgorJSBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIExFRlQKKzxVMjUxOD4gPFUwMDJCPgorJSBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIFJJR0hUCis8VTI1MUM+IDxVMDAyQj4KKyUgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBMRUZUCis8VTI1MjQ+IDxVMDAyQj4KKyUgQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIEhPUklaT05UQUwKKzxVMjUyQz4gPFUwMDJCPgorJSBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIEhPUklaT05UQUwKKzxVMjUzND4gPFUwMDJCPgorJSBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIEhPUklaT05UQUwKKzxVMjUzQz4gPFUwMDJCPgorJSBXSElURSBCVUxMRVQKKzxVMjVFNj4gPFUwMDZGPgorJSBLQVRBS0FOQS1ISVJBR0FOQSBET1VCTEUgSFlQSEVOCis8VTMwQTA+IDxVMDAzRD4KKyUgVkFSSUFUSU9OIFNFTEVDVE9SLTEKKzxVRkUwMD4gIiIKKyUgVkFSSUFUSU9OIFNFTEVDVE9SLTIKKzxVRkUwMT4gIiIKKyUgVkFSSUFUSU9OIFNFTEVDVE9SLTMKKzxVRkUwMj4gIiIKKyUgVkFSSUFUSU9OIFNFTEVDVE9SLTQKKzxVRkUwMz4gIiIKKyUgVkFSSUFUSU9OIFNFTEVDVE9SLTUKKzxVRkUwND4gIiIKKyUgVkFSSUFUSU9OIFNFTEVDVE9SLTYKKzxVRkUwNT4gIiIKKyUgVkFSSUFUSU9OIFNFTEVDVE9SLTcKKzxVRkUwNj4gIiIKKyUgVkFSSUFUSU9OIFNFTEVDVE9SLTgKKzxVRkUwNz4gIiIKKyUgVkFSSUFUSU9OIFNFTEVDVE9SLTkKKzxVRkUwOD4gIiIKKyUgVkFSSUFUSU9OIFNFTEVDVE9SLTEwCis8VUZFMDk+ICIiCislIFZBUklBVElPTiBTRUxFQ1RPUi0xMQorPFVGRTBBPiAiIgorJSBWQVJJQVRJT04gU0VMRUNUT1ItMTIKKzxVRkUwQj4gIiIKKyUgVkFSSUFUSU9OIFNFTEVDVE9SLTEzCis8VUZFMEM+ICIiCislIFZBUklBVElPTiBTRUxFQ1RPUi0xNAorPFVGRTBEPiAiIgorJSBWQVJJQVRJT04gU0VMRUNUT1ItMTUKKzxVRkUwRT4gIiIKKyUgVkFSSUFUSU9OIFNFTEVDVE9SLTE2Cis8VUZFMEY+ICIiCislIFpFUk8gV0lEVEggTk8tQlJFQUsgU1BBQ0UKKzxVRkVGRj4gIiIKKwordHJhbnNsaXRfZW5kCisKK0VORCBMQ19DVFlQRQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdHJhbnNsaXRfc21hbGwgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy90cmFuc2xpdF9zbWFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzY4N2M4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdHJhbnNsaXRfc21hbGwKQEAgLTAsMCArMSw4MyBAQAorZXNjYXBlX2NoYXIgLworY29tbWVudF9jaGFyICUKKworJSBUcmFuc2xpdGVyYXRpb25zIG9mIHNtYWxsIGVxdWl2YWxlbnRzLgorJSBHZW5lcmF0ZWQgdGhyb3VnaAorJSAgICQgZ3JlcCAnXlteO10qO1teO10qO1teO10qO1teO10qO1teO10qOzxzbWFsbD5bXjtdKjsnIFVuaWNvZGVEYXRhLnR4dCB8IFwKKyUgICAgIHNlZCAtZSAncy9eXChbXjtdKlwpO1woW147XSpcKTtbXjtdKjtbXjtdKjtbXjtdKjs8c21hbGw+IFwoW147XSpcKTsuKiQvPFVcMT4gPFVcMz4gJSBcMi8nCislIGFuZCBhZGRlZCB0aGUgc21hbGwgSGlyYWdhbmEgYW5kIHNtYWxsIEthdGFrYW5hIG1hbnVhbGx5LgorCitMQ19DVFlQRQorCit0cmFuc2xpdF9zdGFydAorCis8VTMwNDE+IDxVMzA0Mj4gJSBISVJBR0FOQSBMRVRURVIgU01BTEwgQQorPFUzMDQzPiA8VTMwNDQ+ICUgSElSQUdBTkEgTEVUVEVSIFNNQUxMIEkKKzxVMzA0NT4gPFUzMDQ2PiAlIEhJUkFHQU5BIExFVFRFUiBTTUFMTCBVCis8VTMwNDc+IDxVMzA0OD4gJSBISVJBR0FOQSBMRVRURVIgU01BTEwgRQorPFUzMDQ5PiA8VTMwNEE+ICUgSElSQUdBTkEgTEVUVEVSIFNNQUxMIE8KKzxVMzA2Mz4gPFUzMDY0PiAlIEhJUkFHQU5BIExFVFRFUiBTTUFMTCBUVQorPFUzMDgzPiA8VTMwODQ+ICUgSElSQUdBTkEgTEVUVEVSIFNNQUxMIFlBCis8VTMwODU+IDxVMzA4Nj4gJSBISVJBR0FOQSBMRVRURVIgU01BTEwgWVUKKzxVMzA4Nz4gPFUzMDg4PiAlIEhJUkFHQU5BIExFVFRFUiBTTUFMTCBZTworPFUzMDhFPiA8VTMwOEY+ICUgSElSQUdBTkEgTEVUVEVSIFNNQUxMIFdBCis8VTMwOTU+IDxVMzA0Qj4gJSBISVJBR0FOQSBMRVRURVIgU01BTEwgS0EKKzxVMzA5Nj4gPFUzMDUxPiAlIEhJUkFHQU5BIExFVFRFUiBTTUFMTCBLRQorPFUzMEExPiA8VTMwQTI+ICUgS0FUQUtBTkEgTEVUVEVSIFNNQUxMIEEKKzxVMzBBMz4gPFUzMEE0PiAlIEtBVEFLQU5BIExFVFRFUiBTTUFMTCBJCis8VTMwQTU+IDxVMzBBNj4gJSBLQVRBS0FOQSBMRVRURVIgU01BTEwgVQorPFUzMEE3PiA8VTMwQTg+ICUgS0FUQUtBTkEgTEVUVEVSIFNNQUxMIEUKKzxVMzBBOT4gPFUzMEFBPiAlIEtBVEFLQU5BIExFVFRFUiBTTUFMTCBPCis8VTMwQzM+IDxVMzBDND4gJSBLQVRBS0FOQSBMRVRURVIgU01BTEwgVFUKKzxVMzBFMz4gPFUzMEU0PiAlIEtBVEFLQU5BIExFVFRFUiBTTUFMTCBZQQorPFUzMEU1PiA8VTMwRTY+ICUgS0FUQUtBTkEgTEVUVEVSIFNNQUxMIFlVCis8VTMwRTc+IDxVMzBFOD4gJSBLQVRBS0FOQSBMRVRURVIgU01BTEwgWU8KKzxVMzBFRT4gPFUzMEVGPiAlIEtBVEFLQU5BIExFVFRFUiBTTUFMTCBXQQorPFUzMEY1PiA8VTMwQUI+ICUgS0FUQUtBTkEgTEVUVEVSIFNNQUxMIEtBCis8VTMwRjY+IDxVMzBCMT4gJSBLQVRBS0FOQSBMRVRURVIgU01BTEwgS0UKKzxVMzFGMD4gPFUzMEFGPiAlIEtBVEFLQU5BIExFVFRFUiBTTUFMTCBLVQorPFUzMUYxPiA8VTMwQjc+ICUgS0FUQUtBTkEgTEVUVEVSIFNNQUxMIFNJCis8VTMxRjI+IDxVMzBCOT4gJSBLQVRBS0FOQSBMRVRURVIgU01BTEwgU1UKKzxVMzFGMz4gPFUzMEM4PiAlIEtBVEFLQU5BIExFVFRFUiBTTUFMTCBUTworPFUzMUY0PiA8VTMwQ0M+ICUgS0FUQUtBTkEgTEVUVEVSIFNNQUxMIE5VCis8VTMxRjU+IDxVMzBDRj4gJSBLQVRBS0FOQSBMRVRURVIgU01BTEwgSEEKKzxVMzFGNj4gPFUzMEQyPiAlIEtBVEFLQU5BIExFVFRFUiBTTUFMTCBISQorPFUzMUY3PiA8VTMwRDU+ICUgS0FUQUtBTkEgTEVUVEVSIFNNQUxMIEhVCis8VTMxRjg+IDxVMzBEOD4gJSBLQVRBS0FOQSBMRVRURVIgU01BTEwgSEUKKzxVMzFGOT4gPFUzMERCPiAlIEtBVEFLQU5BIExFVFRFUiBTTUFMTCBITworPFUzMUZBPiA8VTMwRTA+ICUgS0FUQUtBTkEgTEVUVEVSIFNNQUxMIE1VCis8VTMxRkI+IDxVMzBFOT4gJSBLQVRBS0FOQSBMRVRURVIgU01BTEwgUkEKKzxVMzFGQz4gPFUzMEVBPiAlIEtBVEFLQU5BIExFVFRFUiBTTUFMTCBSSQorPFUzMUZEPiA8VTMwRUI+ICUgS0FUQUtBTkEgTEVUVEVSIFNNQUxMIFJVCis8VTMxRkU+IDxVMzBFQz4gJSBLQVRBS0FOQSBMRVRURVIgU01BTEwgUkUKKzxVMzFGRj4gPFUzMEVEPiAlIEtBVEFLQU5BIExFVFRFUiBTTUFMTCBSTworPFVGRTUwPiA8VTAwMkM+ICUgU01BTEwgQ09NTUEKKzxVRkU1MT4gPFUzMDAxPiAlIFNNQUxMIElERU9HUkFQSElDIENPTU1BCis8VUZFNTI+IDxVMDAyRT4gJSBTTUFMTCBGVUxMIFNUT1AKKzxVRkU1ND4gPFUwMDNCPiAlIFNNQUxMIFNFTUlDT0xPTgorPFVGRTU1PiA8VTAwM0E+ICUgU01BTEwgQ09MT04KKzxVRkU1Nj4gPFUwMDNGPiAlIFNNQUxMIFFVRVNUSU9OIE1BUksKKzxVRkU1Nz4gPFUwMDIxPiAlIFNNQUxMIEVYQ0xBTUFUSU9OIE1BUksKKzxVRkU1OD4gPFUyMDE0PiAlIFNNQUxMIEVNIERBU0gKKzxVRkU1OT4gPFUwMDI4PiAlIFNNQUxMIExFRlQgUEFSRU5USEVTSVMKKzxVRkU1QT4gPFUwMDI5PiAlIFNNQUxMIFJJR0hUIFBBUkVOVEhFU0lTCis8VUZFNUI+IDxVMDA3Qj4gJSBTTUFMTCBMRUZUIENVUkxZIEJSQUNLRVQKKzxVRkU1Qz4gPFUwMDdEPiAlIFNNQUxMIFJJR0hUIENVUkxZIEJSQUNLRVQKKzxVRkU1RD4gPFUzMDE0PiAlIFNNQUxMIExFRlQgVE9SVE9JU0UgU0hFTEwgQlJBQ0tFVAorPFVGRTVFPiA8VTMwMTU+ICUgU01BTEwgUklHSFQgVE9SVE9JU0UgU0hFTEwgQlJBQ0tFVAorPFVGRTVGPiA8VTAwMjM+ICUgU01BTEwgTlVNQkVSIFNJR04KKzxVRkU2MD4gPFUwMDI2PiAlIFNNQUxMIEFNUEVSU0FORAorPFVGRTYxPiA8VTAwMkE+ICUgU01BTEwgQVNURVJJU0sKKzxVRkU2Mj4gPFUwMDJCPiAlIFNNQUxMIFBMVVMgU0lHTgorPFVGRTYzPiA8VTAwMkQ+ICUgU01BTEwgSFlQSEVOLU1JTlVTCis8VUZFNjQ+IDxVMDAzQz4gJSBTTUFMTCBMRVNTLVRIQU4gU0lHTgorPFVGRTY1PiA8VTAwM0U+ICUgU01BTEwgR1JFQVRFUi1USEFOIFNJR04KKzxVRkU2Nj4gPFUwMDNEPiAlIFNNQUxMIEVRVUFMUyBTSUdOCis8VUZFNjg+IDxVMDA1Qz4gJSBTTUFMTCBSRVZFUlNFIFNPTElEVVMKKzxVRkU2OT4gPFUwMDI0PiAlIFNNQUxMIERPTExBUiBTSUdOCis8VUZFNkE+IDxVMDAyNT4gJSBTTUFMTCBQRVJDRU5UIFNJR04KKzxVRkU2Qj4gPFUwMDQwPiAlIFNNQUxMIENPTU1FUkNJQUwgQVQKKwordHJhbnNsaXRfZW5kCisKK0VORCBMQ19DVFlQRQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdHJhbnNsaXRfd2lkZSBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RyYW5zbGl0X3dpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMzYjVlYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3RyYW5zbGl0X3dpZGUKQEAgLTAsMCArMSwxMjAgQEAKK2VzY2FwZV9jaGFyIC8KK2NvbW1lbnRfY2hhciAlCisKKyUgVHJhbnNsaXRlcmF0aW9ucyBvZiB3aWRlIGVxdWl2YWxlbnRzLgorJSBHZW5lcmF0ZWQgdGhyb3VnaAorJSAgICQgZ3JlcCAnXlteO10qO1teO10qO1teO10qO1teO10qO1teO10qOzx3aWRlPlteO10qOycgVW5pY29kZURhdGEudHh0IHwgXAorJSAgICAgc2VkIC1lICdzL15cKFteO10qXCk7XChbXjtdKlwpO1teO10qO1teO10qO1teO10qOzx3aWRlPiBcKFteO10qXCk7LiokLzxVXDE+IDxVXDM+ICUgXDIvJworCitMQ19DVFlQRQorCit0cmFuc2xpdF9zdGFydAorCis8VTMwMDA+IDxVMDAyMD4gJSBJREVPR1JBUEhJQyBTUEFDRQorPFVGRjAxPiA8VTAwMjE+ICUgRlVMTFdJRFRIIEVYQ0xBTUFUSU9OIE1BUksKKzxVRkYwMj4gPFUwMDIyPiAlIEZVTExXSURUSCBRVU9UQVRJT04gTUFSSworPFVGRjAzPiA8VTAwMjM+ICUgRlVMTFdJRFRIIE5VTUJFUiBTSUdOCis8VUZGMDQ+IDxVMDAyND4gJSBGVUxMV0lEVEggRE9MTEFSIFNJR04KKzxVRkYwNT4gPFUwMDI1PiAlIEZVTExXSURUSCBQRVJDRU5UIFNJR04KKzxVRkYwNj4gPFUwMDI2PiAlIEZVTExXSURUSCBBTVBFUlNBTkQKKzxVRkYwNz4gPFUwMDI3PiAlIEZVTExXSURUSCBBUE9TVFJPUEhFCis8VUZGMDg+IDxVMDAyOD4gJSBGVUxMV0lEVEggTEVGVCBQQVJFTlRIRVNJUworPFVGRjA5PiA8VTAwMjk+ICUgRlVMTFdJRFRIIFJJR0hUIFBBUkVOVEhFU0lTCis8VUZGMEE+IDxVMDAyQT4gJSBGVUxMV0lEVEggQVNURVJJU0sKKzxVRkYwQj4gPFUwMDJCPiAlIEZVTExXSURUSCBQTFVTIFNJR04KKzxVRkYwQz4gPFUwMDJDPiAlIEZVTExXSURUSCBDT01NQQorPFVGRjBEPiA8VTAwMkQ+ICUgRlVMTFdJRFRIIEhZUEhFTi1NSU5VUworPFVGRjBFPiA8VTAwMkU+ICUgRlVMTFdJRFRIIEZVTEwgU1RPUAorPFVGRjBGPiA8VTAwMkY+ICUgRlVMTFdJRFRIIFNPTElEVVMKKzxVRkYxMD4gPFUwMDMwPiAlIEZVTExXSURUSCBESUdJVCBaRVJPCis8VUZGMTE+IDxVMDAzMT4gJSBGVUxMV0lEVEggRElHSVQgT05FCis8VUZGMTI+IDxVMDAzMj4gJSBGVUxMV0lEVEggRElHSVQgVFdPCis8VUZGMTM+IDxVMDAzMz4gJSBGVUxMV0lEVEggRElHSVQgVEhSRUUKKzxVRkYxND4gPFUwMDM0PiAlIEZVTExXSURUSCBESUdJVCBGT1VSCis8VUZGMTU+IDxVMDAzNT4gJSBGVUxMV0lEVEggRElHSVQgRklWRQorPFVGRjE2PiA8VTAwMzY+ICUgRlVMTFdJRFRIIERJR0lUIFNJWAorPFVGRjE3PiA8VTAwMzc+ICUgRlVMTFdJRFRIIERJR0lUIFNFVkVOCis8VUZGMTg+IDxVMDAzOD4gJSBGVUxMV0lEVEggRElHSVQgRUlHSFQKKzxVRkYxOT4gPFUwMDM5PiAlIEZVTExXSURUSCBESUdJVCBOSU5FCis8VUZGMUE+IDxVMDAzQT4gJSBGVUxMV0lEVEggQ09MT04KKzxVRkYxQj4gPFUwMDNCPiAlIEZVTExXSURUSCBTRU1JQ09MT04KKzxVRkYxQz4gPFUwMDNDPiAlIEZVTExXSURUSCBMRVNTLVRIQU4gU0lHTgorPFVGRjFEPiA8VTAwM0Q+ICUgRlVMTFdJRFRIIEVRVUFMUyBTSUdOCis8VUZGMUU+IDxVMDAzRT4gJSBGVUxMV0lEVEggR1JFQVRFUi1USEFOIFNJR04KKzxVRkYxRj4gPFUwMDNGPiAlIEZVTExXSURUSCBRVUVTVElPTiBNQVJLCis8VUZGMjA+IDxVMDA0MD4gJSBGVUxMV0lEVEggQ09NTUVSQ0lBTCBBVAorPFVGRjIxPiA8VTAwNDE+ICUgRlVMTFdJRFRIIExBVElOIENBUElUQUwgTEVUVEVSIEEKKzxVRkYyMj4gPFUwMDQyPiAlIEZVTExXSURUSCBMQVRJTiBDQVBJVEFMIExFVFRFUiBCCis8VUZGMjM+IDxVMDA0Mz4gJSBGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgQworPFVGRjI0PiA8VTAwNDQ+ICUgRlVMTFdJRFRIIExBVElOIENBUElUQUwgTEVUVEVSIEQKKzxVRkYyNT4gPFUwMDQ1PiAlIEZVTExXSURUSCBMQVRJTiBDQVBJVEFMIExFVFRFUiBFCis8VUZGMjY+IDxVMDA0Nj4gJSBGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgRgorPFVGRjI3PiA8VTAwNDc+ICUgRlVMTFdJRFRIIExBVElOIENBUElUQUwgTEVUVEVSIEcKKzxVRkYyOD4gPFUwMDQ4PiAlIEZVTExXSURUSCBMQVRJTiBDQVBJVEFMIExFVFRFUiBICis8VUZGMjk+IDxVMDA0OT4gJSBGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgSQorPFVGRjJBPiA8VTAwNEE+ICUgRlVMTFdJRFRIIExBVElOIENBUElUQUwgTEVUVEVSIEoKKzxVRkYyQj4gPFUwMDRCPiAlIEZVTExXSURUSCBMQVRJTiBDQVBJVEFMIExFVFRFUiBLCis8VUZGMkM+IDxVMDA0Qz4gJSBGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgTAorPFVGRjJEPiA8VTAwNEQ+ICUgRlVMTFdJRFRIIExBVElOIENBUElUQUwgTEVUVEVSIE0KKzxVRkYyRT4gPFUwMDRFPiAlIEZVTExXSURUSCBMQVRJTiBDQVBJVEFMIExFVFRFUiBOCis8VUZGMkY+IDxVMDA0Rj4gJSBGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgTworPFVGRjMwPiA8VTAwNTA+ICUgRlVMTFdJRFRIIExBVElOIENBUElUQUwgTEVUVEVSIFAKKzxVRkYzMT4gPFUwMDUxPiAlIEZVTExXSURUSCBMQVRJTiBDQVBJVEFMIExFVFRFUiBRCis8VUZGMzI+IDxVMDA1Mj4gJSBGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgUgorPFVGRjMzPiA8VTAwNTM+ICUgRlVMTFdJRFRIIExBVElOIENBUElUQUwgTEVUVEVSIFMKKzxVRkYzND4gPFUwMDU0PiAlIEZVTExXSURUSCBMQVRJTiBDQVBJVEFMIExFVFRFUiBUCis8VUZGMzU+IDxVMDA1NT4gJSBGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgVQorPFVGRjM2PiA8VTAwNTY+ICUgRlVMTFdJRFRIIExBVElOIENBUElUQUwgTEVUVEVSIFYKKzxVRkYzNz4gPFUwMDU3PiAlIEZVTExXSURUSCBMQVRJTiBDQVBJVEFMIExFVFRFUiBXCis8VUZGMzg+IDxVMDA1OD4gJSBGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgWAorPFVGRjM5PiA8VTAwNTk+ICUgRlVMTFdJRFRIIExBVElOIENBUElUQUwgTEVUVEVSIFkKKzxVRkYzQT4gPFUwMDVBPiAlIEZVTExXSURUSCBMQVRJTiBDQVBJVEFMIExFVFRFUiBaCis8VUZGM0I+IDxVMDA1Qj4gJSBGVUxMV0lEVEggTEVGVCBTUVVBUkUgQlJBQ0tFVAorPFVGRjNDPiA8VTAwNUM+ICUgRlVMTFdJRFRIIFJFVkVSU0UgU09MSURVUworPFVGRjNEPiA8VTAwNUQ+ICUgRlVMTFdJRFRIIFJJR0hUIFNRVUFSRSBCUkFDS0VUCis8VUZGM0U+IDxVMDA1RT4gJSBGVUxMV0lEVEggQ0lSQ1VNRkxFWCBBQ0NFTlQKKzxVRkYzRj4gPFUwMDVGPiAlIEZVTExXSURUSCBMT1cgTElORQorPFVGRjQwPiA8VTAwNjA+ICUgRlVMTFdJRFRIIEdSQVZFIEFDQ0VOVAorPFVGRjQxPiA8VTAwNjE+ICUgRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBBCis8VUZGNDI+IDxVMDA2Mj4gJSBGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIEIKKzxVRkY0Mz4gPFUwMDYzPiAlIEZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgQworPFVGRjQ0PiA8VTAwNjQ+ICUgRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBECis8VUZGNDU+IDxVMDA2NT4gJSBGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIEUKKzxVRkY0Nj4gPFUwMDY2PiAlIEZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgRgorPFVGRjQ3PiA8VTAwNjc+ICUgRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBHCis8VUZGNDg+IDxVMDA2OD4gJSBGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIEgKKzxVRkY0OT4gPFUwMDY5PiAlIEZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgSQorPFVGRjRBPiA8VTAwNkE+ICUgRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBKCis8VUZGNEI+IDxVMDA2Qj4gJSBGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIEsKKzxVRkY0Qz4gPFUwMDZDPiAlIEZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgTAorPFVGRjREPiA8VTAwNkQ+ICUgRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBNCis8VUZGNEU+IDxVMDA2RT4gJSBGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIE4KKzxVRkY0Rj4gPFUwMDZGPiAlIEZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgTworPFVGRjUwPiA8VTAwNzA+ICUgRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBQCis8VUZGNTE+IDxVMDA3MT4gJSBGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIFEKKzxVRkY1Mj4gPFUwMDcyPiAlIEZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgUgorPFVGRjUzPiA8VTAwNzM+ICUgRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBTCis8VUZGNTQ+IDxVMDA3ND4gJSBGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIFQKKzxVRkY1NT4gPFUwMDc1PiAlIEZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgVQorPFVGRjU2PiA8VTAwNzY+ICUgRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBWCis8VUZGNTc+IDxVMDA3Nz4gJSBGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIFcKKzxVRkY1OD4gPFUwMDc4PiAlIEZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgWAorPFVGRjU5PiA8VTAwNzk+ICUgRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBZCis8VUZGNUE+IDxVMDA3QT4gJSBGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIFoKKzxVRkY1Qj4gPFUwMDdCPiAlIEZVTExXSURUSCBMRUZUIENVUkxZIEJSQUNLRVQKKzxVRkY1Qz4gPFUwMDdDPiAlIEZVTExXSURUSCBWRVJUSUNBTCBMSU5FCis8VUZGNUQ+IDxVMDA3RD4gJSBGVUxMV0lEVEggUklHSFQgQ1VSTFkgQlJBQ0tFVAorPFVGRjVFPiA8VTAwN0U+ICUgRlVMTFdJRFRIIFRJTERFCis8VUZGNUY+IDxVMjk4NT4gJSBGVUxMV0lEVEggTEVGVCBXSElURSBQQVJFTlRIRVNJUworPFVGRjYwPiA8VTI5ODY+ICUgRlVMTFdJRFRIIFJJR0hUIFdISVRFIFBBUkVOVEhFU0lTCis8VUZGRTA+IDxVMDBBMj4gJSBGVUxMV0lEVEggQ0VOVCBTSUdOCis8VUZGRTE+IDxVMDBBMz4gJSBGVUxMV0lEVEggUE9VTkQgU0lHTgorPFVGRkUyPiA8VTAwQUM+ICUgRlVMTFdJRFRIIE5PVCBTSUdOCis8VUZGRTM+IDxVMDBBRj4gJSBGVUxMV0lEVEggTUFDUk9OCis8VUZGRTQ+IDxVMDBBNj4gJSBGVUxMV0lEVEggQlJPS0VOIEJBUgorPFVGRkU1PiA8VTAwQTU+ICUgRlVMTFdJRFRIIFlFTiBTSUdOCis8VUZGRTY+IDxVMjBBOT4gJSBGVUxMV0lEVEggV09OIFNJR04KKwordHJhbnNsaXRfZW5kCisKK0VORCBMQ19DVFlQRQpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdHNfWkEgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy90c19aQQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTBjYmEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdHNfWkEKQEAgLTAsMCArMSwyODUgQEAKK2VzY2FwZV9jaGFyICAvCitjb21tZW50X2NoYXIgICUKKworJSBDaGFyc2V0OiBVVEYtOAorCislIENoYW5nZUxvZworJSAwLjMgKDIwMDUtMTAtMTIpOgorJSAgICAgMjAwNS0xMC0xMiBEd2F5bmUgQmFpbGV5IDxkd2F5bmVAdHJhbnNsYXRlLm9yZy56YT4KKyUgICAgICAgLSBBZGRlZCAnQ2hhcnNldDogVVRGLTgnIGluZm9ybWF0aW9uCislICAgICAgIC0gVXBkYXRlIGNvbnRhY3QgaW5mb3JtYXRpb24KKyUgICAgICAgLSBBbGxpZ24gc3BlbGxpbmdzIG9mIG1vbnRoIGFuZCB3ZWVrZGF5IG5hbWVzIHdpdGggRGVwdC4gb2YKKyUgICAgICAgICBBcnQgYW5kIEN1bHR1cmUnczogTXVsdGlsaW5ndWFsIE1hdGhlbWF0aWNzIERpY3Rpb25hcnkKKyUgMC4yICgyMDA0LTExLTA5KToKKyUgICAgIDIwMDQtMTEtMDkgRHdheW5lIEJhaWxleSA8ZHdheW5lQHRyYW5zbGF0ZS5vcmcuemE+CislICAgICAgIC0gQ2hhbmdlICVkIHRvICUtZSBmb3IgZF90X2ZtdCBhbmQgZGF0ZV9mbXQKKyUgICAgICAgLSA8VU5OTk4+IGVzY2FwZSBldmVyeXRoaW5nCislICAgICAgIC0gQ2hhbmdlZCBhbGwgY29udGFjdCBpbmZvcm1hdGlvbgorJSAgICAgICAtIFJlbW92ZWQgLiogZnJvbSB5ZXMvbm9leHByCislICAgICAyMDA0LTAzLTMwIER3YXluZSBCYWlsZXkgPGR3YXluZUB0cmFuc2xhdGUub3JnLnphPgorJSAgICAgICAtIEFkZGVkIGNvdW50cnlfYWIyLzMsIGNvdW50cnlfbnVtCislICAgICAyMDA0LTAyLTI3IER3YXluZSBCYWlsZXkgPGR3YXluZUB0cmFuc2xhdGUub3JnLnphPgorJQkgICAgLSBDb3JyZWN0IGNhcGF0aWxpc2F0aW9uIG9mIGxhbmdfbmFtZQorJSAwLjEgKDIwMDQtMDItMjQpOgorJQkgICAtIEluaXRpYWwgVHNvbmdhIGxvY2FsZSBmb3IgU291dGggQWZyaWNhCislCSAgICAgYnkgWnV6YSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJUc29uZ2EgbG9jYWxlIGZvciBTb3V0aCBBZnJpY2EiCitzb3VyY2UgICAgICJadXphIFNvZnR3YXJlIEZvdW5kYXRpb24gKFRyYW5zbGF0ZS5vcmcuemEpIgorYWRkcmVzcyAgICAiUE8gQm94IDI4MzY0LCBTdW5ueXNpZGUsIDAxMzIsIFNvdXRoIEFmcmljYSIKK2NvbnRhY3QgICAgIkR3YXluZSBCYWlsZXkiCitlbWFpbCAgICAgICJkd2F5bmVAdHJhbnNsYXRlLm9yZy56YSIKK3RlbCAgICAgICAgIisyNyAxMiA0NjAgMTA5NSIKK2ZheCAgICAgICAgIisyNyAxMiA0NjAgMTA5NSIKK2xhbmd1YWdlICAgIlRzb25nYSIKK3RlcnJpdG9yeSAgIlNvdXRoIEFmcmljYSIKK3JldmlzaW9uICAgIjAuMyIKK2RhdGUgICAgICAgIjIwMDUtMTAtMTIiCislCitjYXRlZ29yeSAgInRzX1pBOjIwMDQiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgInRzX1pBOjIwMDQiO0xDX0NUWVBFCitjYXRlZ29yeSAgInRzX1pBOjIwMDQiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAidHNfWkE6MjAwNCI7TENfVElNRQorY2F0ZWdvcnkgICJ0c19aQToyMDA0IjtMQ19OVU1FUklDCitjYXRlZ29yeSAgInRzX1pBOjIwMDQiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgInRzX1pBOjIwMDQiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgInRzX1pBOjIwMDQiO0xDX1BBUEVSCitjYXRlZ29yeSAgInRzX1pBOjIwMDQiO0xDX05BTUUKK2NhdGVnb3J5ICAidHNfWkE6MjAwNCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJ0c19aQToyMDA0IjtMQ19URUxFUEhPTkUKK2NhdGVnb3J5ICAidHNfWkE6MjAwNCI7TENfTUVBU1VSRU1FTlQKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCislIFVzZSB0aGUgY2hhcmFjdGVycyBkZXNjcmliZWQgaW4gdGhlIGNoYXJtYXAgZmlsZSAiaTE4bi50Z3oiCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxIGkuZS4KKyUgdXNlIHRoZSBydWxlcyB0aGVyZSB3aGVuIG1ha2luZyBvcmRlcmVkIGxpc3RzIG9mIHdvcmRzLgorY29weSAiaXNvMTQ2NTFfdDEiCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQorY29weSAiZW5fWkEiCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworY29weSAiZW5fWkEiCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCisKKyUgYWJkYXkgLSBUaGUgYWJicmV2aWF0aW9ucyBmb3IgdGhlIHdlZWsgZGF5czoKKyUgLSBTb24sIE11cywgQmlyLCBIYXIsIE5lLCBUbGgsIE11ZworYWJkYXkgICAgICAgIjxVMDA1Mz48VTAwNkY+PFUwMDZFPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNzU+PFUwMDczPiI7LworICAgICAgICAgICAgIjxVMDA0Mj48VTAwNjk+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA0OD48VTAwNjE+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA0RT48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA2Qz48VTAwNjg+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA3NT48VTAwNjc+IgorCislIGRheSAtIFRoZSBmdWxsIG5hbWVzIG9mIHRoZSB3ZWVrIGRheXM6CislIC0gU29udG8sIE11c3VtYmh1bnVrdSwgUmF2dW1iaXJoaSwgUmF2dW5oYXJodSwgUmF2dW11bmUsIFJhdnVudGxoYW51LCBNdWdxaXZlbGEKK2RheSAgICAgICAgICI8VTAwNTM+PFUwMDZGPjxVMDA2RT48VTAwNzQ+PFUwMDZGPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNzU+PFUwMDczPjxVMDA3NT48VTAwNkQ+PFUwMDYyPjxVMDA2OD48VTAwNzU+PFUwMDZFPjxVMDA3NT48VTAwNkI+PFUwMDc1PiI7LworICAgICAgICAgICAgIjxVMDA1Mj48VTAwNjE+PFUwMDc2PjxVMDA3NT48VTAwNkQ+PFUwMDYyPjxVMDA2OT48VTAwNzI+PFUwMDY4PjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNTI+PFUwMDYxPjxVMDA3Nj48VTAwNzU+PFUwMDZFPjxVMDA2OD48VTAwNjE+PFUwMDcyPjxVMDA2OD48VTAwNzU+IjsvCisgICAgICAgICAgICAiPFUwMDUyPjxVMDA2MT48VTAwNzY+PFUwMDc1PjxVMDA2RD48VTAwNzU+PFUwMDZFPjxVMDA2NT4iOy8KKyAgICAgICAgICAgICI8VTAwNTI+PFUwMDYxPjxVMDA3Nj48VTAwNzU+PFUwMDZFPjxVMDA3ND48VTAwNkM+PFUwMDY4PjxVMDA2MT48VTAwNkU+PFUwMDc1PiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNzU+PFUwMDY3PjxVMDA3MT48VTAwNjk+PFUwMDc2PjxVMDA2NT48VTAwNkM+PFUwMDYxPiIKKworCislIGFibW9uIC0gVGhlIGFiYnJldmlhdGlvbnMgZm9yIHRoZSBtb250aHMKKyUgLSBTdW4sIFlhbiwgS3VsLCBEemksIE11ZCwgS2hvLCBNYXcsIE1oYSwgTmR6LCBOaGwsIEh1aywgTid3CithYm1vbiAgICAgICAiPFUwMDUzPjxVMDA3NT48VTAwNkU+IjsiPFUwMDU5PjxVMDA2MT48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDRCPjxVMDA3NT48VTAwNkM+IjsiPFUwMDQ0PjxVMDA3QT48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA3NT48VTAwNjQ+IjsiPFUwMDRCPjxVMDA2OD48VTAwNkY+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzc+IjsiPFUwMDREPjxVMDA2OD48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2ND48VTAwN0E+IjsiPFUwMDRFPjxVMDA2OD48VTAwNkM+IjsvCisgICAgICAgICAgICAiPFUwMDQ4PjxVMDA3NT48VTAwNkI+IjsiPFUwMDRFPjxVMDAyNz48VTAwNzc+IgorCislIG1vbiAtIFRoZSBmdWxsIG5hbWVzIG9mIHRoZSBtb250aHMgLQorJSAtIFN1bmd1dGksIE55ZW55ZW55YW5pLCBOeWVueWFua3VsdSwgRHppdmFtaXNva28sIE11ZHlheGloaSwgS2hvdGF2dXhpa2EKKyUgICBNYXd1d2FuaSwgTWhhd3VyaSwgTmR6aGF0aSwgTmhsYW5ndWxhLCBIdWt1cmksIE4nd2VuZHphbWhhbGEKK21vbiAgICAgICAgICI8VTAwNTM+PFUwMDc1PjxVMDA2RT48VTAwNjc+PFUwMDc1PjxVMDA3ND48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA3OT48VTAwNjU+PFUwMDZFPjxVMDA3OT48VTAwNjU+PFUwMDZFPjxVMDA3OT48VTAwNjE+PFUwMDZFPjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNEU+PFUwMDc5PjxVMDA2NT48VTAwNkU+PFUwMDc5PjxVMDA2MT48VTAwNkU+PFUwMDZCPjxVMDA3NT48VTAwNkM+PFUwMDc1PiI7LworICAgICAgICAgICAgIjxVMDA0ND48VTAwN0E+PFUwMDY5PjxVMDA3Nj48VTAwNjE+PFUwMDZEPjxVMDA2OT48VTAwNzM+PFUwMDZGPjxVMDA2Qj48VTAwNkY+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA3NT48VTAwNjQ+PFUwMDc5PjxVMDA2MT48VTAwNzg+PFUwMDY5PjxVMDA2OD48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDRCPjxVMDA2OD48VTAwNkY+PFUwMDc0PjxVMDA2MT48VTAwNzY+PFUwMDc1PjxVMDA3OD48VTAwNjk+PFUwMDZCPjxVMDA2MT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Nz48VTAwNzU+PFUwMDc3PjxVMDA2MT48VTAwNkU+PFUwMDY5PiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjg+PFUwMDYxPjxVMDA3Nz48VTAwNzU+PFUwMDcyPjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNEU+PFUwMDY0PjxVMDA3QT48VTAwNjg+PFUwMDYxPjxVMDA3ND48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2OD48VTAwNkM+PFUwMDYxPjxVMDA2RT48VTAwNjc+PFUwMDc1PjxVMDA2Qz48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDQ4PjxVMDA3NT48VTAwNkI+PFUwMDc1PjxVMDA3Mj48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDAyNz48VTAwNzc+PFUwMDY1PjxVMDA2RT48VTAwNjQ+PFUwMDdBPjxVMDA2MT48VTAwNkQ+PFUwMDY4PjxVMDA2MT48VTAwNkM+PFUwMDYxPiIKKworJSBBYnJldmlhdGVkIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24gdG8gYmUgcmVmZXJlbmNlZCBieSB0aGUgIiVjIiBmaWVsZCBkZXNjcmlwdG9yIC0KK2RfdF9mbXQgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDJEPjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislICIlYSIgKHNob3J0IHdlZWtkYXkgbmFtZSksCislICIlLWUiIChkYXkgb2YgbW9udGggYXMgYSBkZWNpbWFsIG51bWJlciksCislICIlYiIgKHNob3J0IG1vbnRoIG5hbWUpLAorJSAiJVkiICh5ZWFyIHdpdGggY2VudHVyeSBhcyBhIGRlY2ltYWwgbnVtYmVyKSwKKyUgIiVUIiAoMjQtaG91ciBjbG9jayB0aW1lIGluIGZvcm1hdCBISDpNTTpTUyksCislICIlWiIgKFRpbWUgem9uZSBuYW1lKQorCislIERhdGUgcmVwcmVzZW50YXRpb24gdG8gYmUgcmVmZXJlbmNlZCBieSB0aGUgIiV4IiBmaWVsZCBkZXNjcmlwdG9yIC0KK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNTk+IgorJSAiJWQvJW0vJVkiLCBkYXkvbW9udGgveWVhciBhcyBkZWNpbWFsIG51bWJlcnMgKDAxLzAxLzIwMDApLgorCislIFRpbWUgcmVwcmVzZW50YXRpb24gdG8gYmUgcmVmZXJlbmNlZCBieSB0aGUgIiVYIiBmaWVsZCBkZXNjcmlwdG9yIC0KK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDU0PiIKKyUgIiVUIiAoMjQtaG91ciBjbG9jayB0aW1lIGluIGZvcm1hdCBISDpNTTpTUykKKworJSBEZWZpbmUgcmVwcmVzZW50YXRpb24gb2YgYW50ZSBtZXJpZGllbSBhbmQgcG9zdCBtZXJpZGllbSBzdHJpbmdzIC0KK2FtX3BtICAgICAgICIiOyIiCislIFRoZSAiIiBtZWFuICdkZWZhdWx0IHRvICJBTSIgYW5kICJQTSIuCisKKyUgRGVmaW5lIHRpbWUgcmVwcmVzZW50YXRpb24gaW4gMTItaG91ciBmb3JtYXQgd2l0aCAiYW1fcG0iLCB0byBiZSByZWZlcmVuY2VkIGJ5IHRoZSAiJXIiCit0X2ZtdF9hbXBtICAiIgorJSBUaGUgIiIgbWVhbnMgdGhhdCB0aGlzIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLgorCislIERhdGUgcmVwcmVzZW50YXRpb24gbm90IGRlc2NyaWJlZCBpbiBJU08vSUVDIDE0NjUyLiBDb21lcyBvdXQgYXMgLQorJSAiJWEgJWIgJS1lICVIOiVNOiVTICVaICVZIiB3aGljaCBpcyBkZWZhdWx0ICJkYXRlIiBjb21tYW5kIG91dHB1dAorZGF0ZV9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwMkQ+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKKyUKKyUgJWEgLSBhYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWUsCislICViIC0gYWJyZXZpYXRlZCBtb250aCBuYW1lLAorJSAlLWUgLSBkYXkgb2YgbW9udGggYXMgYSBkZWNpbWFsIG51bWJlciB3aXRob3V0IGxlYWRpbmcgc3BhY2UgKDEgdG8gMzEpLAorJSAlSCAtIGhvdXIgKDI0LWhvdXIgY2xvY2spIGFzIGEgZGVjaW1hbCBudW1iZXIgKDAwIHRvIDIzKSwKKyUgJU0gLSBtaW51dGUgYXMgYSBkZWNpbWFsIG51bWJlciAoMDAgdG8gNTkpLAorJSAlUyAtIHNlY29uZHMgYXMgYSBkZWNpbWFsIG51bWJlciAoMDAgdG8gNTkpLAorJSAlWiAtIHRpbWUtem9uZSBuYW1lLAorJSAlWSAtIHllYXIgd2l0aCBjZW50dXJ5IGFzIGEgZGVjaW1hbCBudW1iZXIsZS5nLiAyMDAxLgorCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworJSBGSVhNRTogQ2hlY2sgYm90aCBvZiB0aGVzZQorJSBUaGUgYWZmaXJtYXRpdmUgcmVzcG9uc2UgLSBUT0RPCislICJeW3lZXSIKK3llc2V4cHIgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA3OT48VTAwNTk+PFUwMDVEPiIKKworJSBUaGUgbmVnYXRpdmUgcmVzcG9uc2UgLSBUT0RPCislICJeW25OXSIKK25vZXhwciAgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19QQVBFUgorY29weSAiZW5fWkEiCitFTkQgTENfUEFQRVIKKworTENfVEVMRVBIT05FCitjb3B5ICJlbl9aQSIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgImVuX1pBIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKKyUgRm9ybWF0IGZvciBhZGRyZXNzaW5nIGEgcGVyc29uLgorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorJSAiJWQldCVnJXQlbSV0JWYiCislICJTYWx1dGF0aW9uIiwKKyUgIkVtcHR5IHN0cmluZywgb3IgPFNwYWNlPiIsCislICJGaXJzdCBnaXZlbiBuYW1lIiwKKyUgIkVtcHR5IHN0cmluZywgb3IgPFNwYWNlPiIsCislICJNaWRkbGUgbmFtZXMiLAorJSAiRW1wdHkgc3RyaW5nLCBvciA8U3BhY2U+IiwKKyUgIkNsYW4gbmFtZXMiCisKKyUgRklYTUUgLSBkZWZpbmUgYWxsIHRoZSBmb2xsb3dpbmcgbmFtZV8qCislIEdlbmVyYWwgc2FsdXRhdGlvbiBmb3IgYW55IHNleAorJSBuYW1lX2dlbiAgICAiIgorCislIFNhbHV0YXRpb24gZm9yIHVubWFycmllZCBmZW1hbGVzIC0gIiIKKyUgbmFtZV9taXNzICAgIiIKKworJSBTYWx1dGF0aW9uIGZvciBtYWxlcyAtICIiCislIG5hbWVfbXIgICAgICIiCisKKyUgU2FsdXRhdGlvbiBmb3IgbWFycmllZCBmZW1hbGVzIC0gIiIKKyUgbmFtZV9tcnMgICAgIiIKKworJSBTYWx1dGF0aW9uIHZhbGlkIGZvciBhbGwgZmVtYWxlcyAtICIiIChubyB0ZXJtKQorJSBuYW1lX21zICAgICAiIgorCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCislIENvdW50cnkgbmFtZSBpbiBUc29uZ2EgLSAiQWZyaWthIER6b25nYSIKK2NvdW50cnlfbmFtZSAiPFUwMDQxPjxVMDA2Nj48VTAwNzI+PFUwMDY5PjxVMDA2Qj48VTAwNjE+PFUwMDIwPjxVMDA0ND48VTAwN0E+PFUwMDZGPjxVMDA2RT48VTAwNjc+PFUwMDYxPiIKKworJSBBYmJyZXZpYXRlZCBjb3VudHJ5IHBvc3RhbCBuYW1lIC0gIlpBIgorY291bnRyeV9wb3N0ICI8VTAwNUE+PFUwMDQxPiIKKworJSBVTiBHZW5ldmUgMTk0OTo2OCBEaXN0aW5ndWlzaGluZyBzaWducyBvZiB2ZWhpY2xlcyBpbiBpbnRlcm5hdGlvbmFsIHRyYWZmaWMKKyUgaHR0cDovL3d3dy51bmVjZS5vcmcvdHJhbnMvY29udmVudG4vZGlzdGluZy1zaWducy01LTIwMDEucGRmCislICJaQSIKK2NvdW50cnlfY2FyICAgIjxVMDA1QT48VTAwNDE+IgorCislIEZJWE1FIGRlZmluZSB0aGUgZm9sbG93aW5nIGNvcnJlY3RseQorJSBjb3VudHJ5X2lzYm4gIiIKKworJSBMYW5ndWFnZSBuYW1lIGluIFRzb25nYSAtICJYaXRzb25nYSIKK2xhbmdfbmFtZSAiPFUwMDU4PjxVMDA2OT48VTAwNzQ+PFUwMDczPjxVMDA2Rj48VTAwNkU+PFUwMDY3PjxVMDA2MT4iCisKKyUgSVNPIDYzOSB0d28gYW5kIHRocmVlIGxldHRlciBsYW5ndWFnZSBuYW1lcworJSBzZWUgaHR0cDovL3d3dy5sb2MuZ292L3N0YW5kYXJkcy9pc282MzktMi9lbmdsYW5nbi5odG1sCislICJ0cyIsICJ0c28iCitsYW5nX2FiICAgIjxVMDA3ND48VTAwNzM+IgorbGFuZ190ZXJtICI8VTAwNzQ+PFUwMDczPjxVMDA2Rj4iCisKKyUgUmVwcmVzZW50YXRpb24gb2YgcG9zdGFsIGFkZHJlc3NlcyAobWludXMgdGhlIGFkZHJlc3NlZSdzIG5hbWUpIGluIFNvdXRoCislIEFmcmljYS4gKElnbm9yZWQgZm9yIG5vdykKK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPi8KKzxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+PFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCislICIlZiVOJWElTiVkJU4lYiVOJXMgJWggJWUgJXIlTiV6ICVUJU4lYyVOIiwgd2hpY2ggZ2l2ZXMgLQorJSAiZmlybSBuYW1lIiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgIkMvTyBhZGRyZXNzIiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgImRlcGFydG1lbnQgbmFtZSIsCislICJCdWlsZGluZyBuYW1lIiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgInN0cmVldCBvciBibG9jayBuYW1lIiwKKyUgInNwYWNlIiwKKyUgImhvdXNlIG51bWJlciBvciBkZXNpZ25hdGlvbiIsCislICJzcGFjZSIsCislICJmbG9vciBudW1iZXIiLAorJSAic3BhY2UiLAorJSAicm9vbSBudW1iZXIsIGRvb3IgZGVzaWduYXRpb24iLAorJSAiZW5kIG9mIGxpbmUiLAorJSAicG9zdGFsIGNvZGUiLAorJSAic3BhY2UiLAorJSAidG93biwgY2l0eSIsCislICJlbmQgb2YgbGluZSIsCislICJjb3VudHJ5IGRlc2lnbmF0aW9uIGZvciB0aGUgPGNvdW50cnlfcG9zdD4ga2V5d29yZCIsCislICJlbmQgb2YgbGluZQorJQorCislIElTTyAzMTY2IGNvdW50cnkgbnVtYmVyIGFuZCAyIGFuZCAzIGxldHRlciBhYnJldmlhdGlvbnMKKyUgaHR0cDovL3d3dy51bmljb2RlLm9yZy9vbmxpbmVkYXQvY291bnRyaWVzLmh0bWwKKyUgIlpBIiwgIlpBRiIKK2NvdW50cnlfbnVtICAgNzEwCitjb3VudHJ5X2FiMiAgICI8VTAwNUE+PFUwMDQxPiIKK2NvdW50cnlfYWIzICAgIjxVMDA1QT48VTAwNDE+PFUwMDQ2PiIKKworRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3R0X1JVIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdHRfUlUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZhNmJiOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3R0X1JVCkBAIC0wLDAgKzEsMzIyIEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgVGF0YXIgTGFuZ3VhZ2UgTG9jYWxlIGZvciBSdXNzaWEKKyUgU291cmNlOgorJSBDb250YWN0OiBQYWJsbyBTYXJhdHhhZ2EsIFJpbmF0IE5vcmtpbgorJSBFbWFpbDogPHBhYmxvQG1hbmRyYWtlc29mdC5jb20+LCA8cmluYXRAdGFpZi5ydT4KKyUgTGFuZ3VhZ2U6IHR0CislIFRlcnJpdG9yeTogUlUKKyUgUmV2aXNpb246IDAuNAorJSBEYXRlOiAyMDAxLTAxLTI4CislIEFwcGxpY2F0aW9uOiBnZW5lcmFsCislIFVzZXJzOiBnZW5lcmFsCislIENoYXJzZXQ6IFRBVEFSLUNZUgorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCislCislIFRPRE86IGNoZWNrIExDX0NPTExBVEUKKyUKKyUgbmVlZGVkIGV4dHJhIGNoYXJzOiA8VTA0RDk+LCA8VTA0RTk+LCA8VTA0OTc+LCA8VTA0QkI+LCA8VTA0QTM+CislCislIE5vdGU6IFRhdGFyc3RhbiBhZG9wdGVkIGxhdGluIGFscGhhYmV0IGluIDIwMDAsIGl0IHNob3VsZCBncmFkdWFsbHkKKyUgcmVwbGFjZSBjeXJpbGxpYyBhbHBoYWJldAorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgIlRhdGFyIGxhbmd1YWdlIGxvY2FsZSBmb3IgUnVzc2lhIgorc291cmNlICJSaW5hdCBOb3JraW4iCithZGRyZXNzICIiCitjb250YWN0ICJQYWJsbyBTYXJhdHhhZ2EsIFJpbmF0IE5vcmtpbiIKK2VtYWlsICJwYWJsb0BtYW5kcmFrZXNvZnQuY29tLCByaW5hdEB0YWlmLnJ1IgordGVsICIiCitmYXggIiIKK2xhbmd1YWdlICJUYXRhciIKK3RlcnJpdG9yeSAiUnVzc2lhIgorcmV2aXNpb24gIjAuNCIKK2RhdGUgIjIwMDEtMDEtMjgiCisKK2NhdGVnb3J5IHR0X1JVOjIwMDA7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5IHR0X1JVOjIwMDA7TENfQ1RZUEUKK2NhdGVnb3J5IHR0X1JVOjIwMDA7TENfQ09MTEFURQorY2F0ZWdvcnkgdHRfUlU6MjAwMDtMQ19USU1FCitjYXRlZ29yeSB0dF9SVToyMDAwO0xDX05VTUVSSUMKK2NhdGVnb3J5IHR0X1JVOjIwMDA7TENfUEFQRVIKK2NhdGVnb3J5IHR0X1JVOjIwMDA7TENfVEVMRVBIT05FCitjYXRlZ29yeSB0dF9SVToyMDAwO0xDX01FQVNVUkVNRU5UCitjYXRlZ29yeSB0dF9SVToyMDAwO0xDX0FERFJFU1MKK2NhdGVnb3J5IHR0X1JVOjIwMDA7TENfTU9ORVRBUlkKK2NhdGVnb3J5IHR0X1JVOjIwMDA7TENfTUVTU0FHRVMKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKK3RyYW5zbGl0X2VuZAorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKKworJSBUaGUgbmV3ICgyMDAwKSBsYXRpbiB0YXRhciBhbHBoYWJldCBpczoKKyUgYSwgc3csIGIsIGMsIGMsLCBkLCBlLCBmLCBnLCBnKCwgaCwgaSAoZG90bGVzcyBpKSwKKyUgaS4gKGkgd2l0aCBkb3QpLCBqLCBrLCBxLCBsLCBtLCBuLCBuZywgbywgby0tLCBwLCByLCBzLCBzLCwKKyUgdCwgdSwgdTosIHYsIHcsIHgsIHksIHoKKyUgPFUwNDMwPiw8VTA0RDk+LDxVMDQzMT4sPFUwNEI5Piw8VTA0NDc+LDxVMDQzND4sPFUwNDM1Piw8VTA0NDQ+LDxVMDQ5RD4sPFUwNDkzPiw8VTA0QkI+LAorJSA8VTA0NEI+LCAgICAgICAgICAgICA8VTA0Mzg+LCAgICAgICAgICAgICA8VTA0MzY+LDxVMDQzQT4sPFUwNDMzPiw8VTA0M0I+LDxVMDQzQz4sPFUwNDNEPiw8VTA0QTM+LAorJSA8VTA0M0U+LDxVMDRFOT4sPFUwNDNGPiw8VTA0NDA+LDxVMDQ0MT4sPFUwNDQ4Piw8VTA0NDI+LDxVMDQ0Mz4sPFUwNEFGPiw8VTA0MzI+LD8/PywgPFUwNDQ1Piw8VTA0NTg+LDxVMDQzNz4KKyUKKyUgSG93ZXZlciwgYSBjb21tb25seSB1c2VkIGFscGhhYmV0IGluIGludGVybmV0IHVzZXMgPFUwMEU0PiwgPFUwMEY2PiBhbmQgPFUwMEYxPgorJSBmb3IgcmVzcGVjdGl2ZWx5IDxVMDI1OT4sIDxVMDI3NT4gYW5kIDxVMDE0Qj4KKworY29weSAiaXNvMTQ2NTFfdDEiCisKK2NvbGxhdGluZy1zeW1ib2wgPHN3PgorY29sbGF0aW5nLXN5bWJvbCA8Yyw+Citjb2xsYXRpbmctc3ltYm9sIDxnKD4KK2NvbGxhdGluZy1zeW1ib2wgPGkuPgorY29sbGF0aW5nLXN5bWJvbCA8bmc+Citjb2xsYXRpbmctc3ltYm9sIDxvLS0+Citjb2xsYXRpbmctc3ltYm9sIDxzLD4KK2NvbGxhdGluZy1zeW1ib2wgPHU6PgorCitjb2xsYXRpbmctc3ltYm9sIDxnLT0+Citjb2xsYXRpbmctc3ltYm9sIDxzdz0+Citjb2xsYXRpbmctc3ltYm9sIDxrLy89PgorY29sbGF0aW5nLXN5bWJvbCA8by09PgorY29sbGF0aW5nLXN5bWJvbCA8dSc9PgorY29sbGF0aW5nLXN5bWJvbCA8aCc9PgorY29sbGF0aW5nLXN5bWJvbCA8YyUvLz0+Citjb2xsYXRpbmctc3ltYm9sIDxuLD0+CisKK3Jlb3JkZXItYWZ0ZXIgPGE+Cis8c3c+CityZW9yZGVyLWFmdGVyIDxjPgorPGMsPgorcmVvcmRlci1hZnRlciA8Zz4KKzxnKD4KK3Jlb3JkZXItYWZ0ZXIgPGg+Cis8aT4KKzxpLj4KKzxqPgorPGs+Cis8cT4KK3Jlb3JkZXItYWZ0ZXIgPG4+Cis8bmc+CityZW9yZGVyLWFmdGVyIDxvPgorPG8tLT4KK3Jlb3JkZXItYWZ0ZXIgPHM+Cis8cyw+CityZW9yZGVyLWFmdGVyIDx1PgorPHU6PgorCislIEZJWE1FOiBjaGVjayBvcmRlciBvZiBjeXJpbGxpYyBsZXR0ZXJzIChJIGNvcGllZCBmcm9tIGN5ciBBemVyaSkKK3Jlb3JkZXItYWZ0ZXIgPENZUi1HSEU+Cis8Zy09PgorcmVvcmRlci1hZnRlciA8Q1lSLUlFPgorPHN3PT4KK3Jlb3JkZXItYWZ0ZXIgPENZUi1LQT4KKzxrLy89PgorcmVvcmRlci1hZnRlciA8Q1lSLUVOPgorPG4sPT4KK3Jlb3JkZXItYWZ0ZXIgPENZUi1PPgorPG8tPT4KK3Jlb3JkZXItYWZ0ZXIgPENZUi1PVUJSRT4KKzx1Jz0+CityZW9yZGVyLWFmdGVyIDxDWVItSEE+Cis8aCc9PgorcmVvcmRlci1hZnRlciA8Q1lSLUNIRT4KKzxjJS8vPT4KKworcmVvcmRlci1hZnRlciA8VTAwNjE+Cis8VTAyNTk+IDxzdz47PFBDTD47PE1JTj47SUdOT1JFCis8VTAwRTQ+IDxzdz47PFJFVT47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0MT4KKzxVMDE4Rj4gPHN3Pjs8UENMPjs8Q0FQPjtJR05PUkUKKzxVMDBDND4gPHN3Pjs8UkVVPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNjM+Cis8VTAwRTc+IDxjLD47PENEST47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0Mz4KKzxVMDBDNz4gPGMsPjs8Q0RJPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNjc+Cis8VTAxMUY+IDxnKD47PEJSRT47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0Nz4KKzxVMDExRT4gPGcoPjs8QlJFPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNjg+Cis8VTAxMzE+IDxpPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDA2OT4gPGkuPjs8UENUPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDQ4PgorPFUwMDQ5PiA8aT47PEJBUz47PENBUD47SUdOT1JFCis8VTAxMzA+IDxpLj47PFBDVD47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDZFPgorPFUwMTRCPiA8bmc+OzxQQ0w+OzxNSU4+O0lHTk9SRQorPFUwMEYxPiA8bmc+OzxUSUw+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNEU+Cis8VTAxNEE+IDxuZz47PFBDTD47PENBUD47SUdOT1JFCis8VTAwRDE+IDxuZz47PFRJTD47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDZGPgorPFUwMjc1PiA8by0tPjs8UkVVPjs8TUlOPjtJR05PUkUKKzxVMDBGNj4gPG8tLT47PFJFVT47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0Rj4KKzxVMDE5Rj4gPG8tLT47PFJFVT47PENBUD47SUdOT1JFCis8VTAwRDY+IDxvLS0+OzxSRVU+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA3Mz4KKzxVMDE1Rj4gPHMsPjs8Q0RJPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDUzPgorPFUwMTVFPiA8cyw+OzxDREk+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA3NT4KKzxVMDBGQz4gPHU6Pjs8UkVVPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDU1PgorPFUwMERDPiA8dTo+OzxSRVU+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDQzMz4KKzxVMDQ5Mz4gPGctPT47PFBDTD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDQxMz4KKzxVMDQ5Mj4gPGctPT47PFBDTD47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwNDM1PgorPFUwNEQ5PiA8c3c9Pjs8UENMPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwNDE1PgorPFUwNEQ4PiA8c3c9Pjs8UENMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTA0M0E+Cis8VTA0OUQ+IDxrLy89Pjs8UENMPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwNDFBPgorPFUwNDlDPiA8ay8vPT47PFBDTD47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwNDNEPgorPFUwNEEzPiA8biw9Pjs8UENMPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwNDFEPgorPFUwNEEyPiA8biw9Pjs8UENMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTA0M0U+Cis8VTA0RTk+IDxvLT0+OzxQQ0w+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTA0MUU+Cis8VTA0RTg+IDxvLT0+OzxQQ0w+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDQ0Mz4KKzxVMDRBRj4gPHUnPT47PFBDTD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDQyMz4KKzxVMDRBRT4gPHUnPT47PFBDTD47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwNDQ1PgorPFUwNEJCPiA8aCc9Pjs8UENMPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwNDI1PgorPFUwNEJBPiA8aCc9Pjs8UENMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTA0NDc+Cis8VTA0Qjk+IDxjJS8vPT47PFBDTD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDQyNz4KKzxVMDRCOD4gPGMlLy89Pjs8UENMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1lbmQKKworCitFTkQgTENfQ09MTEFURQorCitMQ19NRVNTQUdFUworeWVzc3RyICAiPFUwNEQ4PjxVMDQzOT48VTA0MzU+Igorbm9zdHIgICAiPFUwNDJFPjxVMDQzQT4iCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDQxND48VTA0MzQ+PFUwMDU5PjxVMDA3OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDQxRD48VTA0M0Q+PFUwMDRFPjxVMDA2RT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitFTkQgTENfTUVTU0FHRVMKKworTENfTU9ORVRBUlkKK2ludF9jdXJyX3N5bWJvbCAgICAgICAgICAgIjxVMDA1Mj48VTAwNTU+PFUwMDQyPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgICAgICI8VTA0NDA+PFUwNDQzPjxVMDQzMT4iCittb25fZGVjaW1hbF9wb2ludCAgICAgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgICAiPFUwMDIwPiIKK21vbl9ncm91cGluZyAgICAgICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAgICAgMAorcF9zZXBfYnlfc3BhY2UgICAgICAgICAgICAxCituX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDAKK25fc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorcF9zaWduX3Bvc24gICAgICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJydV9SVSIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2RheSAgICAgIjxVMDQyRj48VTA0M0E+PFUwNDQ4PjxVMDREOT48VTA0M0M+PFUwNDMxPjxVMDQzNT4iOy8KKyAgICAgICAgIjxVMDQxND48VTA0NEI+PFUwNDQ4PjxVMDREOT48VTA0M0M+PFUwNDMxPjxVMDQzNT4iOy8KKyAgICAgICAgIjxVMDQyMT48VTA0Mzg+PFUwNDQ4PjxVMDREOT48VTA0M0M+PFUwNDMxPjxVMDQzNT4iOy8KKyAgICAgICAgIjxVMDQyNz48VTA0RDk+PFUwNDQwPjxVMDQ0OD48VTA0RDk+PFUwNEQ5PjxVMDQzQz48VTA0MzE+PFUwNDM1PiI7LworICAgICAgICAiPFUwNDFGPjxVMDREOT48VTA0M0Q+PFUwNDk3PjxVMDQzNT48VTA0NDg+PFUwNDNDPjxVMDQzMT48VTA0MzU+IjsvCisgICAgICAgICI8VTA0OTY+PFUwNDNFPjxVMDQzQz48VTA0MzM+PFUwNDMwPiI7LworICAgICAgICAiPFUwNDI4PjxVMDQzOD48VTA0M0M+PFUwNDMxPjxVMDREOT4iCithYmRheSAgICI8VTA0MkY+PFUwNDNBPjxVMDQ0OD4iOy8KKyAgICAgICAgIjxVMDQxND48VTA0NEI+PFUwNDQ4PiI7LworICAgICAgICAiPFUwNDIxPjxVMDQzOD48VTA0NDg+IjsvCisgICAgICAgICI8VTA0Mjc+PFUwNEQ5PjxVMDQ0MD48VTA0NDg+IjsvCisgICAgICAgICI8VTA0MUY+PFUwNEQ5PjxVMDQzRD48VTA0OTc+IjsvCisgICAgICAgICI8VTA0OTY+PFUwNDNFPjxVMDQzQz4iOy8KKyAgICAgICAgIjxVMDQyOD48VTA0Mzg+PFUwNDNDPiIKK21vbiAgICAgIjxVMDQyRj48VTA0M0Q+PFUwNDMyPjxVMDQzMD48VTA0NDA+PFUwNDRGPiI7LworICAgICAgICAiPFUwNDI0PjxVMDQzNT48VTA0MzI+PFUwNDQwPjxVMDQzMD48VTA0M0I+PFUwNDRGPiI7LworICAgICAgICAiPFUwNDFDPjxVMDQzMD48VTA0NDA+PFUwNDQyPjxVMDQzMD4iOy8KKyAgICAgICAgIjxVMDQxMD48VTA0M0Y+PFUwNDQwPjxVMDQzNT48VTA0M0I+PFUwNDRGPiI7LworICAgICAgICAiPFUwNDFDPjxVMDQzMD48VTA0NEY+IjsvCisgICAgICAgICI8VTA0MTg+PFUwNDRFPjxVMDQzRD48VTA0NEY+IjsvCisgICAgICAgICI8VTA0MTg+PFUwNDRFPjxVMDQzQj48VTA0NEY+IjsvCisgICAgICAgICI8VTA0MTA+PFUwNDMyPjxVMDQzMz48VTA0NDM+PFUwNDQxPjxVMDQ0Mj48VTA0MzA+IjsvCisgICAgICAgICI8VTA0MjE+PFUwNDM1PjxVMDQzRD48VTA0NDI+PFUwNDRGPjxVMDQzMT48VTA0NDA+PFUwNDRGPiI7LworICAgICAgICAiPFUwNDFFPjxVMDQzQT48VTA0NDI+PFUwNDRGPjxVMDQzMT48VTA0NDA+PFUwNDRGPiI7LworICAgICAgICAiPFUwNDFEPjxVMDQzRT48VTA0NEY+PFUwNDMxPjxVMDQ0MD48VTA0NEY+IjsvCisgICAgICAgICI8VTA0MTQ+PFUwNDM1PjxVMDQzQT48VTA0MzA+PFUwNDMxPjxVMDQ0MD48VTA0NEY+IgorYWJtb24gICAiPFUwNDJGPjxVMDQzRD48VTA0MzI+IjsvCisgICAgICAgICI8VTA0MjQ+PFUwNDM1PjxVMDQzMj4iOy8KKyAgICAgICAgIjxVMDQxQz48VTA0MzA+PFUwNDQwPiI7LworICAgICAgICAiPFUwNDEwPjxVMDQzRj48VTA0NDA+IjsvCisgICAgICAgICI8VTA0MUM+PFUwNDMwPjxVMDQzOT4iOy8KKyAgICAgICAgIjxVMDQxOD48VTA0NEU+PFUwNDNEPiI7LworICAgICAgICAiPFUwNDE4PjxVMDQ0RT48VTA0M0I+IjsvCisgICAgICAgICI8VTA0MTA+PFUwNDMyPjxVMDQzMz4iOy8KKyAgICAgICAgIjxVMDQyMT48VTA0MzU+PFUwNDNEPiI7LworICAgICAgICAiPFUwNDFFPjxVMDQzQT48VTA0NDI+IjsvCisgICAgICAgICI8VTA0MUQ+PFUwNDNFPjxVMDQ0Rj4iOy8KKyAgICAgICAgIjxVMDQxND48VTA0MzU+PFUwNDNBPiIKK2RfdF9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+LworPFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+IgorZF9mbXQgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjU+PFUwMDZEPjxVMDAyRT48VTAwMjU+PFUwMDU5PiIKK3RfZm10ICAgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICAgIiI7IiIKK3RfZm10X2FtcG0gIiIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCitjb3B5ICJydV9SVSIKK0VORCBMQ19QQVBFUgorCitMQ19NRUFTVVJFTUVOVAorY29weSAicnVfUlUiCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorJSBGSVhNRQorbmFtZV9mbXQgIj8/PyIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKKyUgRklYTUUKK3Bvc3RhbF9mbXQgIj8/PyIKK0VORCBMQ19BRERSRVNTCisKK0xDX1RFTEVQSE9ORQorY29weSAicnVfUlUiCitFTkQgTENfVEVMRVBIT05FCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy90dF9SVUBpcXRlbGlmIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdHRfUlVAaXF0ZWxpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTY0NzgzCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdHRfUlVAaXF0ZWxpZgpAQCAtMCwwICsxLDE4OCBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIFRhdGFyIExhbmd1YWdlIExvY2FsZSB1c2luZyBJUVRFbGlmIGFscGhhYmV0OyBmb3IgVGF0YXJzdGFuLCBSdXNzaWFuIEZlZGVyYXRpb24KKyUgU291cmNlOglSZXNoYXQgU2FiaXEKKyUgQ29udGFjdDoJUmVzaGF0IFNhYmlxCislIEVtYWlsOgk8dGF0YXIuaXF0ZWxpZi5pMThuQGdtYWlsLmNvbT4KKyUgTGFuZ3VhZ2U6CXR0QGlxdGVsaWYKKyUgVGVycml0b3J5OglSVQkKKyUgUmV2aXNpb246CTAuMQorJSBEYXRlOgkJMjAwNi0xMC0xMgorJSBBcHBsaWNhdGlvbjoJZ2VuZXJhbAorJSBVc2VyczoJZ2VuZXJhbAorJSBDaGFyc2V0OglJU08tODg1OS05CislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZQkJIlRhdGFyIGxhbmd1YWdlIGxvY2FsZSB1c2luZyBJUVRFbGlmIGFscGhhYmV0OyBmb3IgVGF0YXJzdGFuLCBSdXNzaWFuIEZlZGVyYXRpb24iCitzb3VyY2UJCSIiCithZGRyZXNzCQkiIgorY29udGFjdAkJIlJlc2hhdCBTYWJpcSIKK2VtYWlsCQkidGF0YXIuaXF0ZWxpZi5pMThuQGdtYWlsLmNvbSIKK3RlbAkJIiIKK2ZheAkJIiIKK2xhbmd1YWdlCSJUYXRhciIKK3RlcnJpdG9yeQkiVGF0YXJzdGFuLCBSdXNzaWFuIEZlZGVyYXRpb24iCityZXZpc2lvbgkiMC4xIgorZGF0ZQkJIjIwMDYtMTAtMTIiCisKK2NhdGVnb3J5ICJ0dF9SVUBpcXRlbGlmOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAidHRfUlVAaXF0ZWxpZjoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgInR0X1JVQGlxdGVsaWY6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgInR0X1JVQGlxdGVsaWY6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgInR0X1JVQGlxdGVsaWY6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgInR0X1JVQGlxdGVsaWY6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICJ0dF9SVUBpcXRlbGlmOjIwMDAiO0xDX1RFTEVQSE9ORQorY2F0ZWdvcnkgInR0X1JVQGlxdGVsaWY6MjAwMCI7TENfTUVBU1VSRU1FTlQKK2NhdGVnb3J5ICJ0dF9SVUBpcXRlbGlmOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICJ0dF9SVUBpcXRlbGlmOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAidHRfUlVAaXF0ZWxpZjoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgInR0X1JVQGlxdGVsaWY6MjAwMCI7TENfTkFNRQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworJSBUT0RPOiBmdXJ0aGVyIHRlc3QgTENfQ09MTEFURQorCitMQ19DT0xMQVRFCislIElRVEVsaWY6CislIDxhPiwgPGI+LCA8Yz4sIDxjLD4sIDxkPiwgPGU+LCA8Zj4sIDxnPiwgPGcoPiwgPGg+LCAKKyUgPGk+IChkb3RsZXNzIGkpLCA8aS4+IChpIHdpdGggZG90KSwgPGknPiwgPGo+LCA8az4sIDxsPiwgPG0+LCA8bj4sIDxuPz4sIDxvPiwKKyUgPG86PiwgPHA+LCA8cT4sIDxyPiwgPHM+LCA8cyw+LCA8dD4sIDx1PiwgPHU6PiwgPHY+LCA8dz4sIDx4PiwgPHk+LCA8ej4KKworY29weSAiY3JoX1VBIgorCitjb2xsYXRpbmctc3ltYm9sIDxpJz4KKworcmVvcmRlci1hZnRlciA8aS4+Cis8aSc+CisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDY5PgorPFUwMEVEPiA8aSc+OzxBQ0E+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAxMzA+Cis8VTAwQ0Q+IDxpJz47PEFDQT47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItZW5kCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX0NUWVBFCitjb3B5ICJ0cl9UUiIKK0VORCBMQ19DVFlQRQorCitMQ19NRVNTQUdFUworJSBUT0RPOiBObyBpcyAieXVxIjsgaXMgaXQgT0sgdGhhdCBpdCBjb3JyZXNwb25kcyB3aXRoIEVuZ2xpc2ggInllcyI/Cit5ZXNzdHIgICI8VTAwNjU+PFUwMDc5PjxVMDBFRD4iCitub3N0ciAgICI8VTAwNzk+PFUwMDc1PjxVMDA3MT4iCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA0NT48VTAwNjU+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNTk+PFUwMDc5PjxVMDA0RT48VTAwNkU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAgICI8VTAwNTI+PFUwMDU1PjxVMDA0Mj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICAgICAiPFUwMDczPjxVMDA3NT48VTAwNkQ+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICAgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAgICAgIjxVMjAwMj4iCittb25fZ3JvdXBpbmcgICAgICAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDAKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgICAgICAwCituX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgICAgICAxCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludCAgICAgICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgICAgIjxVMDAyRT4iCitncm91cGluZyAgICAgICAgICAgICAgICAgIDM7MworRU5EIExDX05VTUVSSUMKKworTENfVElNRQorZGF5ICAgICAiPFUwMDU5PjxVMDA2NT48VTAwNkI+PFUwMTVGPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDBFRD4iOy8KKyAgICAgICAgIjxVMDA0ND48VTAwRkM+PFUwMTVGPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDBFRD4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNjk+PFUwMTVGPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDBFRD4iOy8KKyAgICAgICAgIjxVMDBDNz48VTAwNjU+PFUwMDcyPjxVMDE1Rj48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwRUQ+IjsvCisgICAgICAgICI8VTAwNTA+PFUwMDY1PjxVMDA2RT48VTAwNjM+PFUwMEVEPjxVMDE1Rj48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwRUQ+IjsvCisgICAgICAgICI8VTAwNDM+PFUwMDZGPjxVMDA2RD48VTAxMUY+PFUwMDYxPiI7LworICAgICAgICAiPFUwMTVFPjxVMDA2OT48VTAwNkQ+PFUwMDYyPjxVMDA2NT4iCithYmRheSAgICI8VTAwNTk+PFUwMDY1PjxVMDA2Qj4iOy8KKyAgICAgICAgIjxVMDA0ND48VTAwRkM+PFUwMTVGPiI7LworICAgICAgICAiPFUwMDUzPjxVMDA2OT48VTAxNUY+IjsvCisgICAgICAgICI8VTAwQzc+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA1MD48VTAwNjU+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDQzPjxVMDA2Rj48VTAwNkQ+IjsvCisgICAgICAgICI8VTAxNUU+PFUwMDY5PjxVMDA2RD4iCislIFJGRVJMLWJhc2VkIG1vbnRoIHQxMm46Cittb24gICAgICI8VTAxMUU+PFUwMTMxPjxVMDA2RT48VTAwNzc+PFUwMDYxPjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA0Nj48VTAwNjk+PFUwMDc3PjxVMDA3Mj48VTAwNjE+PFUwMDZDPjxVMDAyNz4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA0MT48VTAwNzA+PFUwMDcyPjxVMDA2OT48VTAwNkM+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgIjxVMDA1OT48VTAwRkM+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDU5PjxVMDBGQz48VTAwNkM+IjsvCisgICAgICAgICI8VTAwNDE+PFUwMDc3PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNjk+PFUwMDZFPjxVMDA3ND48VTAwNjU+PFUwMDYyPjxVMDBFRD48VTAwNzI+IjsvCisgICAgICAgICI8VTAwREM+PFUwMDZCPjxVMDA3ND48VTAwNjU+PFUwMDYyPjxVMDBFRD48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNEU+PFUwMDZGPjxVMDA3OT48VTAwNjU+PFUwMDYyPjxVMDBFRD48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNDQ+PFUwMDY5PjxVMDA2Qj48VTAwNjU+PFUwMDYyPjxVMDBFRD48VTAwNzI+IgorYWJtb24gICAiPFUwMTFFPjxVMDEzMT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNDY+PFUwMDY5PjxVMDA3Nz4iOy8KKyAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDQxPjxVMDA3MD48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgIjxVMDA1OT48VTAwRkM+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDU5PjxVMDBGQz48VTAwNkM+IjsvCisgICAgICAgICI8VTAwNDE+PFUwMDc3PjxVMDA2Nz4iOy8KKyAgICAgICAgIjxVMDA1Mz48VTAwNjk+PFUwMDZFPiI7LworICAgICAgICAiPFUwMERDPjxVMDA2Qj48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNEU+PFUwMDZGPjxVMDA3OT4iOy8KKyAgICAgICAgIjxVMDA0ND48VTAwNjk+PFUwMDZCPiIKK2RfdF9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNjI+LworPFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+IgorZF9mbXQgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjU+PFUwMDZEPjxVMDAyRT48VTAwMjU+PFUwMDU5PiIKK3RfZm10ICAgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICAgIjxVMDBENj48VTAwNDE+IjsiPFUwMEQ2PjxVMDA1Mz4iCit0X2ZtdF9hbXBtICI8VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPi8KKzxVMDAyMD48VTAwMjU+PFUwMDcwPiIKK2RhdGVfZm10ICAgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKK0xDX1BBUEVSCitoZWlnaHQgICAgICAyOTcKK3dpZHRoICAgICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX01FQVNVUkVNRU5UCittZWFzdXJlbWVudCAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfYWIyICI8VTAwNTI+PFUwMDU1PiIKK2NvdW50cnlfYWIzICI8VTAwNTI+PFUwMDU1PjxVMDA1Mz4iCitjb3VudHJ5X251bSA2NDMKK0VORCBMQ19BRERSRVNTCisKK0xDX1RFTEVQSE9ORQordGVsX2ludF9mbXQgICAgIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyMD48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+LworPFUwMDZDPiIKK2ludF9wcmVmaXggICAgICI8VTAwMzc+IgoraW50X3NlbGVjdCAgICAgIjxVMDAzMD48VTAwN0U+PFUwMDMxPjxVMDAzMD4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX05BTUUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK0VORCBMQ19OQU1FCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy91Z19DTiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3VnX0NOCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MzJkN2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy91Z19DTgpAQCAtMCwwICsxLDMzMiBAQAorZXNjYXBlX2NoYXIgLworY29tbWVudF9jaGFyICUKKyUKKyUgVXlnaHVyIGxhbmd1YWdlIGxvY2FsZSBmb3IgQ2hpbmEKKyUgU291cmNlOgorJSBDb250YWN0OiBQYWJsbyBTYXJhdHhhZ2EKKyUgRW1haWw6IHBhYmxvQG1hbmRyaXZhLmNvbQorJSBMYW5ndWFnZTogdWcKKyUgVGVycml0b3J5OiBDTgorJSBSZXZpc2lvbjogMC4xCislIERhdGU6IDIwMDUtMTEtMDgKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogVVRGLTgKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlV5Z2h1ciBsb2NhbGUgZm9yIENoaW5hIgorc291cmNlICAgICAiIgorYWRkcmVzcyAgICAiIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAicGFibG9AbWFuZHJpdmEuY29tIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiVXlnaHVyIgordGVycml0b3J5ICAiQ2hpbmEiCityZXZpc2lvbiAgICIwLjEiCitkYXRlICAgICAgICIyMDA1LTExLTA4IgorJQorY2F0ZWdvcnkgICJ1Z19DTjoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJ1Z19DTjoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJ1Z19DTjoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgInVnX0NOOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAidWdfQ046MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJ1Z19DTjoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJ1Z19DTjoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJ1Z19DTjoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJ1Z19DTjoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgInVnX0NOOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAidWdfQ046MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DT0xMQVRFCisKKyUgbGV0dGVycyBsaXN0IGFuZCBzb3J0IG9yZGVyIGZyb20KKyUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9VeWdodXJfbGFuZ3VhZ2UKKyUgc29ydGluZyBvcmRlciBndWVzc2VkIGZvciBvbGQgbGF0aW4gd3JpdHRpbmcKKyUKKyUgb2xkIGxhdGluIHdyaXR0aW5nIGlzIGJhc2VkIGluIHBpbnlpbiwgd2l0aCBzb21lIGV4dHJhIGxldHRlcnM6CislIDxzY2h3YT4sIDx6IHdpdGggdGFpbD4sIDxnaD4sIDxrIHdpdGggdGFpbD4sIDxoIHdpdGggdGFpbD4sCislIDxiYXJyZWQgbz4gKHRoZXkgc2VlbSBpbnNwaXJlZCBmcm9tIGN5cmlsbGljKQorJSB0YWlsIGxldHRlcnMgY2FuIGJlIHdyaXR0ZW4gd2l0aCBiYXNlIGxldHRlciArIGNvbWJpbmluZyB0YWlsIFUrMDMyMQorJSB0aGVyZSBhcmUgYWxzbyByZXNlcnZlZCBjb2RlcG9pbnRzIFUrMkM2Ny1VKzJDNkMgZm9yIHRoZW0gaW4KKyUgdW5pY29kZSA1LjAgcHJvcG9zYWwuCislIFUrMDIyNCwgVSswMjI1IGFyZSBhbHNvIHNpbWlsYXIgdG8genRhaWwgYW5kIGFyZSBzb3J0ZWQgdGhlIHNhbWUuCislCislIG5ldyBhcmFiaWMgd3JpdHRpbmcgdXNlcyBzb21lIGV4dHJhIGxldHRlcnMgdG9vLgorJSBhbGwgdm93ZWxzIGFyZSBub3RlZCwgYW5kIGluIGJlZ2lubmluZyBvZiB0aGUgd29yZCB0aGVyZSBpcyBhCislICJ5ZWggd2l0aCBoYW16YSIgKFUrMDYyNikgaW4gdGhlIGZyb250OyBzaG91bGQgaXQgYmUgaWdub3JlZAorJSBpbiBzb3J0aW5nPworJQorJSBhcmFiaWMgICAgIG9sZCBsYXRpbiAgICAgICB0dXJraWMgKGZyb20gYXplcmksIHdoaWNoIGhhcyBzYW1lIHBob25lbWVzKQorJSA9PT09PT09PT09ID09PT09PT09PT09PT09PSA9PT09PT0KKyUgYWxlZiAgMDYyNyBhICAgICAgICAgICAgICAgYQorJSBhZSAgICAwNmQ1IHNjaHdhIDAxOEYsMDI1OSDDpAorJSBiZWggICAwNjI4IGIgICAgICAgICAgICAgICBiCislIHBlaCAgIDA2N2UgcCAgICAgICAgICAgICAgIHAKKyUgdGVoICAgMDYyYSB0ICAgICAgICAgICAgICAgdAorJSBqZWVtICAwNjJjIGogICAgICAgICAgICAgICBjIDwKKyUgdGNoZWggMDY4NiBxICAgICAgICAgICAgICAgw6cgPAorJSBraGFoICAwNjJlIGggICAgICAgICAgICAgICB4IDwKKyUgZGFsICAgMDYyZiBkICAgICAgICAgICAgICAgZAorJSByZWggICAwNjMxIHIgICAgICAgICAgICAgICByCislIHphaW4gIDA2MzIgeiAgICAgICAgICAgICAgIHoKKyUgamVoICAgMDY5OCB6dGFpbCAwMjI0LDAyMjUgaiA8CislIHNlZW4gIDA2MzMgcyAgICAgICAgICAgICAgIHMKKyUgc2hlZW4gMDYzNCB4ICAgICAgICAgICAgICAgxZ8KKyUgZ2hhaW4gMDYzYSBnaCAwMWEyLDAxYTMgICAgxJ8gPAorJSBmZWggICAwNjQxIGYgICAgICAgICAgICAgICBmCislIHFhZiAgIDA2NDIga3RhaWwgICAgICAgICAgIHEgPAorJSBrYWYgICAwNjQzIGsgICAgICAgICAgICAgICBrCislIG5nICAgIDA2YWQgbmcgICAgICAgICAgICAgIMOxIDwKKyUgZ2FmICAgMDZhZiBnICAgICAgICAgICAgICAgZworJSBsYW0gICAwNjQ0IGwgICAgICAgICAgICAgICBsCislIG1lZW0gIDA2NDUgbSAgICAgICAgICAgICAgIG0KKyUgbm9vbiAgMDY0NiBuICAgICAgICAgICAgICAgbgorJSBoZWggICAwNjQ3IGh0YWlsICAgICAgICAgICBoIDwKKyUgd2F3ICAgMDY0OCBvICAgICAgICAgICAgICAgbworJSB1ICAgICAwNmM3IHUgICAgICAgICAgICAgICB1CislIG9lICAgIDA2YzYgb2JhciAwMTlmLDAyNzUgIMO2IDwKKyUgeXUgICAgMDZjOCDDvCAgICAgICAgICAgICAgIMO8CislIHZlICAgIDA2Y2IgdiAgICAgICAgICAgICAgIHYKKyUgZSAgICAgMDZkMCBlICAgICAgICAgICAgICAgZQorJSBmLnllaCAwNmNjIGkgICAgICAgICAgICAgICBpICAgICAgKG9yIGFsZWYgbWFxc3VyYSAwNjQ5PykKKyUgeWVoICAgMDY0YSB5ICAgICAgICAgICAgICAgeQorJSAoPCk6IGRpZmZlcmVuY2VzIGJldHdlZW4gb2xkIGxhdGluIGFuZCB0dXJraWMgd3JpdHRpbmcKKworY29weSAiaXNvMTQ2NTFfdDEiCisKK2NvbGxhdGluZy1zeW1ib2wgIDxzY2h3YT4KK2NvbGxhdGluZy1zeW1ib2wgIDxnaD4KK2NvbGxhdGluZy1zeW1ib2wgIDxuZz4KK2NvbGxhdGluZy1zeW1ib2wgIDxjY2VkaWxsYT4KK2NvbGxhdGluZy1zeW1ib2wgIDxzY2VkaWxsYT4KK2NvbGxhdGluZy1zeW1ib2wgIDxodGFpbD4KK2NvbGxhdGluZy1zeW1ib2wgIDxrdGFpbD4KK2NvbGxhdGluZy1zeW1ib2wgIDx6dGFpbD4KK2NvbGxhdGluZy1zeW1ib2wgIDxvYmFyPgorY29sbGF0aW5nLXN5bWJvbCAgPHVkaWFlcmVzaXM+CisKK2NvbGxhdGluZy1lbGVtZW50IDxoLD4gZnJvbSAiPFUwMDY4PjxVMDMyMT4iCitjb2xsYXRpbmctZWxlbWVudCA8SCw+IGZyb20gIjxVMDA0OD48VTAzMjE+IgorY29sbGF0aW5nLWVsZW1lbnQgPGssPiBmcm9tICI8VTAwNkI+PFUwMzIxPiIKK2NvbGxhdGluZy1lbGVtZW50IDxLLD4gZnJvbSAiPFUwMDRCPjxVMDMyMT4iCitjb2xsYXRpbmctZWxlbWVudCA8eiw+IGZyb20gIjxVMDA3QT48VTAzMjE+IgorY29sbGF0aW5nLWVsZW1lbnQgPFosPiBmcm9tICI8VTAwNUE+PFUwMzIxPiIKKworY29sbGF0aW5nLXN5bWJvbCAgPGFyX2FlPgorY29sbGF0aW5nLXN5bWJvbCAgPGFyX25nPgorY29sbGF0aW5nLXN5bWJvbCAgPGFyX3U+Citjb2xsYXRpbmctc3ltYm9sICA8YXJfb2U+Citjb2xsYXRpbmctc3ltYm9sICA8YXJfeXU+Citjb2xsYXRpbmctc3ltYm9sICA8YXJfdmU+Citjb2xsYXRpbmctc3ltYm9sICA8YXJfZT4KK2NvbGxhdGluZy1zeW1ib2wgIDxhcl9pPgorY29sbGF0aW5nLXN5bWJvbCAgPGFyX3k+CisKKyUgbGF0aW4KK3Jlb3JkZXItYWZ0ZXIgPGE+Cis8c2Nod2E+CityZW9yZGVyLWFmdGVyIDxjPgorPGNjZWRpbGxhPgorcmVvcmRlci1hZnRlciA8Zz4KKzxnaD4KK3Jlb3JkZXItYWZ0ZXIgPGg+Cis8aHRhaWw+CityZW9yZGVyLWFmdGVyIDxrPgorPGt0YWlsPgorcmVvcmRlci1hZnRlciA8bj4KKzxuZz4KK3Jlb3JkZXItYWZ0ZXIgPG8+Cis8b2Jhcj4KK3Jlb3JkZXItYWZ0ZXIgPHM+Cis8c2NlZGlsbGE+CityZW9yZGVyLWFmdGVyIDx1PgorPHVkaWFlcmVzaXM+CityZW9yZGVyLWFmdGVyIDx6PgorPHp0YWlsPgorCityZW9yZGVyLWFmdGVyIDxVMDA2MT4KKzxVMDI1OT4gICA8c2Nod2E+OzxQQ0w+OzxNSU4+O0lHTk9SRQorPFUwMEU0PiAgIDxzY2h3YT47PFJFVT47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0MT4KKzxVMDE4Rj4gICA8c2Nod2E+OzxQQ0w+OzxDQVA+O0lHTk9SRQorPFUwMEM0PiAgIDxzY2h3YT47PFJFVT47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDYzPgorPFUwMEU3PiA8Y2NlZGlsbGE+OzxDREk+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNDM+Cis8VTAwQzc+IDxjY2VkaWxsYT47PENEST47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDY3PgorPFUwMUEzPiAgIDxnaD47PFBDTD47PE1JTj47SUdOT1JFCis8VTAxMUY+ICAgPGdoPjs8QlJFPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDQ3PgorPFUwMUEyPiAgIDxnaD47PFBDTD47PENBUD47SUdOT1JFCis8VTAxMUU+ICAgPGdoPjs8QlJFPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNjg+Cis8VTJDNjg+IDxodGFpbD47PFBDTD47PE1JTj47SUdOT1JFCis8aCw+ICAgIDxodGFpbD47PFBDTD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0OD4KKzxVMkM2Nz4gPGh0YWlsPjs8UENMPjs8Q0FQPjtJR05PUkUKKzxILD4gICAgPGh0YWlsPjs8UENMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNkI+Cis8VTJDNkE+IDxrdGFpbD47PFBDTD47PE1JTj47SUdOT1JFCis8ayw+ICAgIDxrdGFpbD47PFBDTD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0Qj4KKzxVMkM2OT4gPGt0YWlsPjs8UENMPjs8Q0FQPjtJR05PUkUKKzxLLD4gICAgPGt0YWlsPjs8UENMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNkU+Cis8VTAwRjE+IDxuZz47PFRJTD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0RT4KKzxVMDBEMT4gPG5nPjs8VElMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNkY+Cis8VTAyNzU+IDxvYmFyPjs8UENMPjs8TUlOPjtJR05PUkUKKzxVMDBGNj4gPG9iYXI+OzxSRVU+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNEY+Cis8VTAxOUY+IDxvYmFyPjs8UENMPjs8Q0FQPjtJR05PUkUKKzxVMDBENj4gPG9iYXI+OzxSRVU+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA3Mz4KKzxVMDE1Rj4gPHNjZWRpbGxhPjs8Q0RJPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDUzPgorPFUwMTVFPiA8c2NlZGlsbGE+OzxDREk+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA3NT4KKzxVMDBGQz4gPHVkaWFlcmVzaXM+OzxSRVU+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNTU+Cis8VTAwREM+IDx1ZGlhZXJlc2lzPjs8UkVVPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwN0E+Cis8VTJDNkM+IDx6dGFpbD47PFBDTD47PE1JTj47SUdOT1JFCis8eiw+ICAgIDx6dGFpbD47PFBDTD47PE1JTj47SUdOT1JFCis8VTAyMjU+IDx6dGFpbD47PFBDTD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA1QT4KKzxVMkM2Qj4gPHp0YWlsPjs8UENMPjs8Q0FQPjtJR05PUkUKKzxaLD4gICAgPHp0YWlsPjs8UENMPjs8Q0FQPjtJR05PUkUKKzxVMDIyND4gPHp0YWlsPjs8UENMPjs8Q0FQPjtJR05PUkUKKworJSBhcmFiaWMKK3Jlb3JkZXItYWZ0ZXIgPGFsZWY+Cis8YXJfYWU+CityZW9yZGVyLWFmdGVyIDxrZWhlaD4KKzxhcl9uZz4KK3Jlb3JkZXItYWZ0ZXIgPHdhdz4KKzxhcl91PgorPGFyX29lPgorPGFyX3l1PgorPGFyX3ZlPgorPGFyX2U+Cis8YXJfaT4KKzxhcl95PgorCityZW9yZGVyLWFmdGVyIDxVMDYyNz4KKzxVMDZENT4gPGFyX2FlPjs8QkFTPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwNkE5PgorPFUwNkFEPiA8YXJfbmc+OzxCQVM+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTA2NDg+Cis8VTA2Qzc+IDxhcl91Pjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDZDNj4gPGFyX29lPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDZDOD4gPGFyX3l1Pjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDZDQj4gPGFyX3ZlPjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMDZEMD4gPGFyX2U+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNkNDPiA8YXJfaT47PEJBUz47PE1JTj47SUdOT1JFCis8VTA2NEE+IDxhcl95Pjs8QkFTPjs8TUlOPjtJR05PUkUKKworcmVvcmRlci1lbmQKKworRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKKyUgRklYTUUKK2NvcHkgImVuX0RLIgorRU5EIExDX0NUWVBFCisKK0xDX01PTkVUQVJZCitjb3B5ICJ6aF9DTiIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJ6aF9DTiIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RFTEVQSE9ORQorY29weSAiemhfQ04iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX1RJTUUKKyUgRklYTUUKK2FiZGF5ICAgICI8VTAwNTM+PFUwMDc1PjxVMDA2RT4iOyI8VTAwNEQ+PFUwMDZGPjxVMDA2RT4iOy8KKyAgICAgICAgICI8VTAwNTQ+PFUwMDc1PjxVMDA2NT4iOyI8VTAwNTc+PFUwMDY1PjxVMDA2ND4iOy8KKyAgICAgICAgICI8VTAwNTQ+PFUwMDY4PjxVMDA3NT4iOyI8VTAwNDY+PFUwMDcyPjxVMDA2OT4iOy8KKyAgICAgICAgICI8VTAwNTM+PFUwMDYxPjxVMDA3ND4iCitkYXkgICAgICAiPFUwMDUzPjxVMDA3NT48VTAwNkU+PFUwMDY0PjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICAiPFUwMDREPjxVMDA2Rj48VTAwNkU+PFUwMDY0PjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICAiPFUwMDU0PjxVMDA3NT48VTAwNjU+PFUwMDczPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgIjxVMDA1Nz48VTAwNjU+PFUwMDY0PjxVMDA2RT48VTAwNjU+PFUwMDczPjxVMDA2ND48VTAwNjE+PFUwMDc5PiI7LworICAgICAgICAgIjxVMDA1ND48VTAwNjg+PFUwMDc1PjxVMDA3Mj48VTAwNzM+PFUwMDY0PjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICAiPFUwMDQ2PjxVMDA3Mj48VTAwNjk+PFUwMDY0PjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICAiPFUwMDUzPjxVMDA2MT48VTAwNzQ+PFUwMDc1PjxVMDA3Mj48VTAwNjQ+PFUwMDYxPjxVMDA3OT4iCithYm1vbiAgICAiPFUwMDRBPjxVMDA2MT48VTAwNkU+IjsiPFUwMDQ2PjxVMDA2NT48VTAwNjI+IjsvCisgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzI+IjsiPFUwMDQxPjxVMDA3MD48VTAwNzI+IjsvCisgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+IjsiPFUwMDRBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkM+IjsiPFUwMDQxPjxVMDA3NT48VTAwNjc+IjsvCisgICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNzA+IjsiPFUwMDRGPjxVMDA2Mz48VTAwNzQ+IjsvCisgICAgICAgICAiPFUwMDRFPjxVMDA2Rj48VTAwNzY+IjsiPFUwMDQ0PjxVMDA2NT48VTAwNjM+IgorbW9uICAgICAgIjxVMDA0QT48VTAwNjE+PFUwMDZFPjxVMDA3NT48VTAwNjE+PFUwMDcyPjxVMDA3OT4iOy8KKyAgICAgICAgICI8VTAwNDY+PFUwMDY1PjxVMDA2Mj48VTAwNzI+PFUwMDc1PjxVMDA2MT48VTAwNzI+PFUwMDc5PiI7LworICAgICAgICAgIjxVMDA0RD48VTAwNjE+PFUwMDcyPjxVMDA2Mz48VTAwNjg+IjsvCisgICAgICAgICAiPFUwMDQxPjxVMDA3MD48VTAwNzI+PFUwMDY5PjxVMDA2Qz4iOy8KKyAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3OT4iOy8KKyAgICAgICAgICI8VTAwNEE+PFUwMDc1PjxVMDA2RT48VTAwNjU+IjsvCisgICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkM+PFUwMDc5PiI7LworICAgICAgICAgIjxVMDA0MT48VTAwNzU+PFUwMDY3PjxVMDA3NT48VTAwNzM+PFUwMDc0PiI7LworICAgICAgICAgIjxVMDA1Mz48VTAwNjU+PFUwMDcwPjxVMDA3ND48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAgIjxVMDA0Rj48VTAwNjM+PFUwMDc0PjxVMDA2Rj48VTAwNjI+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgICI8VTAwNEU+PFUwMDZGPjxVMDA3Nj48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+PFUwMDcyPiI7LworICAgICAgICAgIjxVMDA0ND48VTAwNjU+PFUwMDYzPjxVMDA2NT48VTAwNkQ+PFUwMDYyPjxVMDA2NT48VTAwNzI+IgorJSBkYXRlIGZvcm1hdHMgZm9sbG93aW5nIElTTyA4NjAxLTE5ODgKK2RfdF9mbXQgICI8VTAwMjU+PFUwMDU5PjxVMDAyRD48VTAwMjU+PFUwMDZEPjxVMDAyRD48VTAwMjU+PFUwMDY0PjxVMDA1ND48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgICI8VTAwMjU+PFUwMDU5PjxVMDAyRD48VTAwMjU+PFUwMDZEPjxVMDAyRD48VTAwMjU+PFUwMDY0PiIKK3RfZm10ICAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgICIiOyIiCit0X2ZtdF9hbXBtICAiIgorZGF0ZV9mbXQJIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorRU5EIExDX1RJTUUKKworTENfTUVTU0FHRVMKKyUgRklYTUUKK3llc2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDAzMT48VTAwNEE+PFUwMDZBPjxVMDA3Mz48VTAwNTM+PFUwMDc5PjxVMDA1OT48VTAwNkY+PFUwMDRGPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgICI8VTAwNUU+PFUwMDVCPjxVMDAzMD48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK3llc3N0ciAgICAgICJ5ZXMiCitub3N0ciAgICAgICAibm8iCitFTkQgTENfTUVTU0FHRVMKKworJSBEZWZhdWx0IHBhcGVyOiBBNAorTENfUEFQRVIKK2hlaWdodCAyOTcKK3dpZHRoIDIxMAorRU5EIExDX1BBUEVSCisKKyUgTWV0cmljIFN5c3RlbSAoSVNPIDEwMDApCitMQ19NRUFTVVJFTUVOVAorbWVhc3VyZW1lbnQgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKKyUgRklYTUUKK2NvcHkgImVuX0RLIgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworJSBGSVhNRQorY29weSAiZW5fREsiCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdWtfVUEgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy91a19VQQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGYxZjdiCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdWtfVUEKQEAgLTAsMCArMSwxMzIxIEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDYgVm9sb2R5bXlyIE0uIExpc2l2a2EgPHZfbGlzaXZrYUBzb3VyY2Vmb3JnZS5uZXQ+CislIENvcHlyaWdodCAoQykgMjAwNiBNYXggS3V0bnkgPG1rdXRueUBnbWFpbC5jb20+CislCislIFVrcmFpbmlhbiBMYW5ndWFnZSBMb2NhbGUgZm9yIFVrcmFpbmUKKyUgU291cmNlOiAKKyUgQ29udGFjdDogVm9sb2R5bXlyIE0uIExpc2l2a2EKKyUgRW1haWw6IHZfbGlzaXZrYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQKKyUgQ29udGFjdDogTWF4IEt1dG55CislIEVtYWlsOiBta3V0bnlAZ21haWwuY29tCislIExhbmd1YWdlOiB1aworJSBUZXJyaXRvcnk6IFVBCislIFJldmlzaW9uOiAyLjEuMTIKKyUgRGF0ZTogMjAwNi0wNS0yMAorJSBBcHBsaWNhdGlvbjogZ2VuZXJhbAorJSBVc2VyczogZ2VuZXJhbAorJSBDaGFyc2V0OiBVVEYtOAorJQorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorJQorJSBLZXl3b3JkcyBpbiB0aGlzIGZpbGUgYXJlIHRyZWF0ZWQgYWNjb3JkaW5nIHRvIElTTy9JRUMgMTQ2NTIKKyUgaHR0cDovL2FudWJpcy5ka3V1Zy5kay9qdGMxL3NjMjIvd2cyMC9kb2NzLzE0NjUyZmNkLnR4dAorJQorJSBNaW5vciBmaXhlcyBhbmQgb3ZlcmFsbCBjbGVhbnVwIGJ5IE1heCBLdXRueSA8bWt1dG55QGdtYWlsLmNvbT4KKyUKKworCitMQ19JREVOVElGSUNBVElPTgorCislIFRpdGxlIG9mIGRvY3VtZW50OiBVa3JhaW5pYW4gTGFuZ3VhZ2UgTG9jYWxlIGZvciBVa3JhaW5lCit0aXRsZSAgICAgICJVa3JhaW5pYW4gTGFuZ3VhZ2UgTG9jYWxlIGZvciBVa3JhaW5lIgorCislIE9yZ2FuaXphdGlvbiBuYW1lLgorc291cmNlICAgICAiIgorCislIE9yZ2FuaXphdGlvbiBwb3N0YWwgYWRkcmVzcy4KK2FkZHJlc3MgICAgIiIKKworJSBOYW1lIG9mIGNvbnRhY3QgcGVyc29uLgorY29udGFjdCAgICAiR05VIGxpYmMgbWFpbnRhaW5lcnMiCisKKyUgRWxlY3Ryb25pYyBhZGRyZXNzIG9mIG9yZ2FuaXphdGlvbiBvciBjb250YWN0IHBlcnNvbi4KK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCisKKyUgVGVsZXBob25lIG51bWJlciBvZiBvcmdhbml6YXRpb24gaW4gaW50ZXJuYXRpb25hbCBmb3JtYXQuCit0ZWwgICAgICAgICIiCisKKyUgRmF4IG51bWJlciBvZiBvcmdhbml6YXRpb24gaW4gaW50ZXJuYXRpb25hbCBmb3JtYXQuCitmYXggICAgICAgICIiCisKKyUgQ29kZSBvZiBsYW5ndWFnZSwgdG8gd2hpY2ggdGhpcyBkb2N1bWVudCBhcHBsaWVzLgorbGFuZ3VhZ2UgICAidWsiCisKKyUgQ29kZSBvZiBjb3VudHJ5L2dlb2dyYXBoaWMgZXh0ZW50IChJU08gMzE2NiksIHRvIHdoaWNoIHRoaXMgZG9jdW1lbnQgYXBwbGllcy4KK3RlcnJpdG9yeSAgIlVBIgorCislIEludGVuZGVkIHVzZXIgYXVkaWVuY2UuCithdWRpZW5jZSAgICJnZW5lcmFsIgorCislIElmIGZvciB1c2Ugd2l0aCBzcGVjaWFsIGFwcGxpY2F0aW9uLCBhIGRlc2NyaXB0aW9uIG9mIHRoaXMgYXBwbGljYXRpb24uCithcHBsaWNhdGlvbiAiZ2VuZXJhbCIKKworJSBTaG9ydCBuYW1lLgorYWJicmV2aWF0aW9uICJVTFUtMi4xLjEyIgorCislIFJldmlzaW9uIChudW1iZXJzIGFuZCBkb3RzKS4KK3JldmlzaW9uICAgIjIuMS4xMiIKKworJSBSZXZpc2lvbiBkYXRlCitkYXRlICAgICAgICIyMDA2LTA1LTIwIgorCitjYXRlZ29yeSAgImkxOG46MjAwMiI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiaTE4bjoyMDAyIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJpMThuOjIwMDIiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgInBvc2l4OjE5OTMiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiaTE4bjoyMDAyIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJpMThuOjIwMDIiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgImkxOG46MjAwMiI7TENfUEFQRVIKK2NhdGVnb3J5ICAiaTE4bjoyMDAyIjtMQ19OQU1FCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJpMThuOjIwMDIiO0xDX1RFTEVQSE9ORQorY2F0ZWdvcnkgICJwb3NpeDoxOTkzIjtMQ19NRUFTVVJFTUVOVAorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworCitMQ19DVFlQRQorCitjb3B5ICI8VTAwNjk+PFUwMDMxPjxVMDAzOD48VTAwNkU+IgorCit0cmFuc2xpdF9zdGFydAorCislIGh0dHA6Ly93d3cucmFkYS5nb3YudWEvdHJhbnNsaXQuaHRtCislIFVLUkFJTklBTi1FTkdMSVNIIFRSQU5TTElURVJBVElPTiBUQUJMRQorJQorJSBPbiAxOSBBcHJpbCAxOTk2LCBhbiBvZmZpY2lhbCBVa3JhaW5pYW4tRW5nbGlzaCB0cmFuc2xpdGVyYXRpb24gc3lzdGVtCislIHdhcyBhZG9wdGVkIGJ5IHRoZSBVa3JhaW5pYW4gTGVnYWwgVGVybWlub2xvZ3kgQ29tbWlzc2lvbiAoRGVjaXNpb24KKyUgTm8gOSkuCislCislICAgICogVXNlIG9mIHRoZSBhcHByb3ZlZCBzeXN0ZW0gaXMgbm90IG1hbmRhdG9yeSBmb3IgdGhlIHRyYW5zbGl0ZXJhdGlvbgorJSBvZiBmb3JlaWduIG5hbWVzIGludG8gVWtyYWluaWFuLgorJSAgICAqIFRyYW5zbGl0ZXJhdGlvbiBzaG91bGQgYmUgbWFkZSBkaXJlY3RseSBiZXR3ZWVuIFVrcmFpbmlhbiBhbmQgRW5nbGlzaAorJSB3aXRob3V0IHRoZSB1c2Ugb2YgYW55IGludGVybWVkaWFyeSBsYW5ndWFnZXMuCislICAgICogRGVjaXNpb24gTm85LCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIExlZ2FsIFRlcm1pbm9sb2d5IENvbW1pc3Npb24ncworJSBleHByZXNzIGF1dGhvcml0eSwgaXMgYmluZGluZyBvbmx5IGZvciB0aGUgdHJhbnNsaXRlcmF0aW9uIG9mIFVrcmFpbmlhbgorJSBuYW1lcyBpbiBFbmdsaXNoIGluIGxlZ2lzbGF0aXZlIGFuZCBvZmZpY2lhbCBhY3RzLgorJSAgICAqIEZvciBicmV2aXR5J3Mgc2FrZSwgdGhlIHN5c3RlbSByb3V0aW5lbHkgYWxsb3dzIGZvciBuYW1lcyBzdWNoIGFzIHRoZQorJSBjaXR5IG9mICdaYXBvcml6aHpoaWEnIHRvIGJlIGdpdmVuIGFzICdaYXBvcml6aGlhLCcgJ0xgdml2JyBhcyAnTHZpdicsCislIGV0Yy4gQWxzbyBpbmNsdWRlZCBpcyBhIHNob3J0IGxpc3Qgb2Ygb2ZmaWNpYWwgc3BlbGxpbmdzIGZvciBtaXNjZWxsYW5lb3VzCislIHRlcm1zOiAnVWtyYWluZScgKG5vIHVzZSBvZiB0aGUgYXJ0aWNsZSAndGhlJyksICdDcmltZWEnIChhcyBvcHBvc2VkIHRvCislICdLcnltJyksICdCbGFjayBTZWEsJyBhbmQgJ1NlYSBvZiBBem92Jy4gSW4gY2VydGFpbiBjYXNlcywgJ3RyYWRpdGlvbmFsJworJSBmb3JtcyBtYXkgYmUgc2hvd24gaW4gcGFyZW50aGVzZXMgYWZ0ZXIgdGhlIG9mZmljaWFsIGZvcm06CislICdEbmlwcm8gKERuaWVwZXIpLicKKyUgICAgKiBJbiBhZGRpdGlvbiwgYXBvc3Ryb3BoZSBtYXJrcyBhbmQgc29mdGVuaW5nIG1hcmtzIG1heSBiZSBvbWl0dGVkIHVwb24KKyUgIHRyYW5zbGl0ZXJhdGlvbiBpbnRvIEVuZ2xpc2guCislCislIFVrcmFpbmlhbiAgRW5nbGlzaCAgTm90ZSAgRXhhbXBsZQorJSBsZXR0ZXIgICAgIGxldHRlciAKKyUKKworJSA8VTA0MTA+CTxVMDQxMD4JLQk8VTA0MTA+PFUwNDNCPjxVMDQ0Mz48VTA0NDg+PFUwNDQyPjxVMDQzMD4gLSBBbHVzaHRhCis8VTA0MTA+ICI8VTAwNDE+IgorPFUwNDMwPiAiPFUwMDYxPiIKKworJSA8VTA0MTE+CUIJLQk8VTA0MTE+PFUwNDNFPjxVMDQ0MD48VTA0NDk+PFUwNDMwPjxVMDQzMz48VTA0NTY+PFUwNDMyPjxVMDQzQT48VTA0MzA+IC0gQm9yc2NoYWhpdmthCis8VTA0MTE+ICI8VTAwNDI+IgorPFUwNDMxPiAiPFUwMDYyPiIKKworJSA8VTA0MTI+CVYJLQk8VTA0MTI+PFUwNDM4PjxVMDQ0OD48VTA0MzM+PFUwNDNFPjxVMDQ0MD48VTA0M0U+PFUwNDM0PiAtIFZ5c2hob3JvZAorPFUwNDEyPiAiPFUwMDU2PiIKKzxVMDQzMj4gIjxVMDA3Nj4iCisKKyUgPFUwNDEzPglILCBnaAk8VTA0MUQ+LWluIG1vc3QgY2FzZXMsIGdoIC0gd2hlbiByZWNyZWF0aW5nIHRoZSBjb21iaW5hdGlvbiAiPFUwNDM3PjxVMDQzMz4iCTxVMDQxMz48VTA0MzA+PFUwNDM0PjxVMDQ0Rj48VTA0NDc+IC0gSGFkaWFjaDsgPFUwNDE3PjxVMDQzMz48VTA0M0U+PFUwNDQwPjxVMDQzMD48VTA0M0Q+PFUwNDM4PiAtIFpnaG9yYW55Cis8VTA0MTM+ICI8VTAwNDg+IgorPFUwNDMzPiAiPFUwMDY4PiIKKzxVMDQxNz48VTA0MTM+ICI8VTAwNUE+PFUwMDQ3PjxVMDA0OD4iCis8VTA0MTc+PFUwNDMzPiAiPFUwMDVBPjxVMDA2Nz48VTAwNjg+IgorPFUwNDM3PjxVMDQxMz4gIjxVMDA3QT48VTAwNDc+PFUwMDQ4PiIKKzxVMDQzNz48VTA0MzM+ICI8VTAwN0E+PFUwMDY3PjxVMDA2OD4iCisKKyUgPFUwNDkwPglHCS0JPFUwNDkwPjxVMDQzMD48VTA0M0I+PFUwNDMwPjxVMDQ5MT48VTA0MzA+PFUwNDNEPiAtIEdhbGFnYW4KKzxVMDQ5MD4gIjxVMDA0Nz4iCis8VTA0OTE+ICI8VTAwNjc+IgorCislIDxVMDQxND4JRAktCTxVMDQxND48VTA0M0U+PFUwNDNEPiAtIERvbgorPFUwNDE0PiAiPFUwMDQ0PiIKKzxVMDQzND4gIjxVMDA2ND4iCisKKyUgPFUwNDE1PglFCS0JPFUwNDIwPjxVMDQ1Nj48VTA0MzI+PFUwNDNEPjxVMDQzNT4gLSBSaXZuZQorPFUwNDE1PiAiPFUwMDQ1PiIKKzxVMDQzNT4gIjxVMDA2NT4iCisKKyUgPFUwNDA0PglZZSwgaWUJWWUgLSBhdCB0aGUgYmVnaW5uaW5nIG9mIHdvcmRzLCBpZSAtIGluIG90aGVyIHBvc2l0aW9ucyAJPFUwNDA0PjxVMDQzRD48VTA0MzA+PFUwNDNBPjxVMDQ1Nj48VTA0NTQ+PFUwNDMyPjxVMDQzNT4gLSBZZW5ha2lpZXZlOyA8VTA0MUQ+PFUwNDMwPjxVMDQ1ND48VTA0M0Q+PFUwNDNBPjxVMDQzRT4gLSBOYWllbmtvCis8VTA0MDQ+ICI8VTAwNTk+PFUwMDQ1PiIKKzxVMDQ1ND4gIjxVMDA3OT48VTAwNjU+IgorJSBUT0RPOiAnaWUnIGlmIGFmdGVyIGFueSBsZXR0ZXIKKworJSA8VTA0MTY+CVpoCS0JPFUwNDE2PjxVMDQzOD48VTA0NDI+PFUwNDNFPjxVMDQzQz48VTA0Mzg+PFUwNDQwPiAtIFpoeXRvbXlyCis8VTA0MTY+ICI8VTAwNUE+PFUwMDQ4PiIKKzxVMDQzNj4gIjxVMDA3QT48VTAwNjg+IgorCislIDxVMDQxNz4JWgktCTxVMDQxNz48VTA0MzA+PFUwNDNBPjxVMDQzMD48VTA0NDA+PFUwNDNGPjxVMDQzMD48VTA0NDI+PFUwNDQyPjxVMDQ0Rj4gLSBaYWthcnBhdHRpYQorPFUwNDE3PiAiPFUwMDVBPiIKKzxVMDQzNz4gIjxVMDA3QT4iCisKKyUgPFUwNDE4PglZCS0JPFUwNDFDPjxVMDQzNT48VTA0MzQ+PFUwNDMyPjxVMDQzOD48VTA0M0Q+IC0gTWVkdnluCis8VTA0MTg+ICI8VTAwNTk+IgorPFUwNDM4PiAiPFUwMDc5PiIKKworJSA8VTA0MDY+CUkJLQk8VTA0MDY+PFUwNDQwPjxVMDQ0OD48VTA0MzA+PFUwNDMyPjxVMDQzMD4gLSBJcnNoYXZhCis8VTA0MDY+ICI8VTAwNDk+IgorPFUwNDU2PiAiPFUwMDY5PiIKKworJSA8VTA0MDc+CVlpLCBJCVlpIC0gYXQgdGhlIGJlZ2lubmluZyBvZiB3b3JkcywgaSAtIGluIG90aGVyIHBvc2l0aW9ucwk8VTA0MDc+PFUwNDM2PjxVMDQzMD48VTA0M0E+PFUwNDM1PjxVMDQzMj48VTA0Mzg+PFUwNDQ3PiAtIFlpemhha2V2eWNoOyA8VTA0MUE+PFUwNDMwPjxVMDQzND48VTA0NTY+PFUwNDU3PjxVMDQzMj48VTA0M0E+PFUwNDMwPiAtIEthZGlpdmthCis8VTA0MDc+ICI8VTAwNTk+PFUwMDQ5PiIKKzxVMDQ1Nz4gIjxVMDA3OT48VTAwNjk+IgorCislIFRPRE86ICdpJyBpZiBhZnRlciBhbnkgbGV0dGVyCislIDxVMDQxOT4JWSwgaQlZIC0gYXQgdGhlIGJlZ2lubmluZyBvZiB3b3JkcywgaSAtIGluIG90aGVyIHBvc2l0aW9ucwk8VTA0MTk+PFUwNDNFPjxVMDQ0MT48VTA0Mzg+PFUwNDNGPjxVMDQ1Nj48VTA0MzI+PFUwNDNBPjxVMDQzMD4gLSBZb3N5cGl2a2E7IDxVMDQyMT48VTA0NDI+PFUwNDQwPjxVMDQzOD48VTA0Mzk+IC0gU3RyeWkKKzxVMDQxOT4gIjxVMDA1OT4iCis8VTA0Mzk+ICI8VTAwNzk+IgorJSBUT0RPOiAnaScgaWYgYWZ0ZXIgYW55IGxldHRlcgorCislIDxVMDQxQT4JSwktCTxVMDQxQT48VTA0Mzg+PFUwNDU3PjxVMDQzMj4gLSBLeWl2Cis8VTA0MUE+ICI8VTAwNEI+IgorPFUwNDNBPiAiPFUwMDZCPiIKKworJSA8VTA0MUI+CUwJLQk8VTA0MUI+PFUwNDM1PjxVMDQzMT48VTA0MzU+PFUwNDM0PjxVMDQzOD48VTA0M0Q+IC0gTGViZWR5bgorPFUwNDFCPiAiPFUwMDRDPiIKKzxVMDQzQj4gIjxVMDA2Qz4iCisKKyUgPFUwNDFDPglNCS0JPFUwNDFDPjxVMDQzOD48VTA0M0E+PFUwNDNFPjxVMDQzQj48VTA0MzA+PFUwNDU3PjxVMDQzMj4gLSBNeWtvbGFpdgorPFUwNDFDPiAiPFUwMDREPiIKKzxVMDQzQz4gIjxVMDA2RD4iCisKKyUgPFUwNDFEPglOCS0JPFUwNDFEPjxVMDQ1Nj48VTA0MzY+PFUwNDM4PjxVMDQzRD4gLSBOaXpoaW4KKzxVMDQxRD4gIjxVMDA0RT4iCis8VTA0M0Q+ICI8VTAwNkU+IgorCislIDxVMDQxRT4JTwktCTxVMDQxRT48VTA0MzQ+PFUwNDM1PjxVMDQ0MT48VTA0MzA+IC0gT2Rlc2EKKzxVMDQxRT4gIjxVMDA0Rj4iCis8VTA0M0U+ICI8VTAwNkY+IgorCislIDxVMDQxRj4JUAktCTxVMDQxRj48VTA0M0U+PFUwNDNCPjxVMDQ0Mj48VTA0MzA+PFUwNDMyPjxVMDQzMD4gLSBQb2x0YXZhCis8VTA0MUY+ICI8VTAwNTA+IgorPFUwNDNGPiAiPFUwMDcwPiIKKworJSA8VTA0MjA+CVIJLQk8VTA0MjA+PFUwNDNFPjxVMDQzQz48VTA0M0Q+PFUwNDM4PiAtIFJvbW55Cis8VTA0MjA+ICI8VTAwNTI+IgorPFUwNDQwPiAiPFUwMDcyPiIKKworJSA8VTA0MjE+CVMJLQk8VTA0MjE+PFUwNDQzPjxVMDQzQz48VTA0Mzg+IC0gU3VteQorPFUwNDIxPiAiPFUwMDUzPiIKKzxVMDQ0MT4gIjxVMDA3Mz4iCisKKyUgPFUwNDIyPglUCS0JPFUwNDIyPjxVMDQzNT48VTA0NDI+PFUwNDM1PjxVMDQ0MD48VTA0NTY+PFUwNDMyPiAtIFRldGVyaXYKKzxVMDQyMj4gIjxVMDA1ND4iCis8VTA0NDI+ICI8VTAwNzQ+IgorCislIDxVMDQyMz4JVQktCTxVMDQyMz48VTA0MzY+PFUwNDMzPjxVMDQzRT48VTA0NDA+PFUwNDNFPjxVMDQzND4gLSBVemhob3JvZAorPFUwNDIzPiAiPFUwMDU1PiIKKzxVMDQ0Mz4gIjxVMDA3NT4iCisKKyUgPFUwNDI0PglGCS0JPFUwNDI0PjxVMDQzMD48VTA0NDE+PFUwNDQyPjxVMDQ1Nj48VTA0MzI+IC0gRmFzdGl2Cis8VTA0MjQ+ICI8VTAwNDY+IgorPFUwNDQ0PiAiPFUwMDY2PiIKKworJSA8VTA0MjU+CUtoCS0JPFUwNDI1PjxVMDQzMD48VTA0NDA+PFUwNDNBPjxVMDQ1Nj48VTA0MzI+IC0gS2hhcmtpdgorPFUwNDI1PiAiPFUwMDRCPjxVMDA0OD4iCis8VTA0NDU+ICI8VTAwNkI+PFUwMDY4PiIKKworJSA8VTA0MjY+CVRzCS0JPFUwNDExPjxVMDQ1Nj48VTA0M0I+PFUwNDMwPiA8VTA0MjY+PFUwNDM1PjxVMDQ0MD48VTA0M0E+PFUwNDMyPjxVMDQzMD4gLSBCaWxhIFRzZXJrdmEKKzxVMDQyNj4gIjxVMDA1ND48VTAwNTM+IgorPFUwNDQ2PiAiPFUwMDc0PjxVMDA3Mz4iCisKKyUgPFUwNDI3PglDaAktCTxVMDQyNz48VTA0MzU+PFUwNDQwPjxVMDQzRD48VTA0NTY+PFUwNDMyPjxVMDQ0Nj48VTA0NTY+IC0gQ2hlcm5pdnRzaQorPFUwNDI3PiAiPFUwMDQzPjxVMDA0OD4iCis8VTA0NDc+ICI8VTAwNjM+PFUwMDY4PiIKKworJSA8VTA0Mjg+CVNoCS0JPFUwNDI4PjxVMDQzRT48VTA0NDE+PFUwNDQyPjxVMDQzQT48VTA0MzA+IC0gU2hvc3RrYQorPFUwNDI4PiAiPFUwMDUzPjxVMDA0OD4iCis8VTA0NDg+ICI8VTAwNzM+PFUwMDY4PiIKKworJSA8VTA0Mjk+CVNjaAktCTxVMDQxMz48VTA0M0U+PFUwNDQ5PjxVMDQzMD4gLSBIb3NjaGEKKzxVMDQyOT4gIjxVMDA1Mz48VTAwNDM+PFUwMDQ4PiIKKzxVMDQ0OT4gIjxVMDA3Mz48VTAwNjM+PFUwMDY4PiIKKworJSA8VTA0MkM+CWAJKHNlZSBjb21tZW50YXJ5KQk8VTA0MjA+PFUwNDQzPjxVMDQ0MT48VTA0NEM+IC0gUnVzYDsgPFUwNDFCPjxVMDQ0Qz48VTA0MzI+PFUwNDU2PjxVMDQzMj4gLSBMYHZpdgorPFUwNDJDPiAiPFUwMDYwPiIKKzxVMDQ0Qz4gIjxVMDA2MD4iCisKKyUgPFUwNDJFPglZdSwgaXUJWXUgLSBhdCB0aGUgYmVnaW5uaW5nIG9mIHdvcmRzLCBpdSAtIGluIG90aGVyIHBvc2l0aW9ucyAJPFUwNDJFPjxVMDQ0MD48VTA0NTY+PFUwNDM5PiAtIFl1cmlpOzxVMDQxQT48VTA0NDA+PFUwNDRFPjxVMDQzQT48VTA0NTY+PFUwNDMyPjxVMDQzQT48VTA0MzA+IC0gS3J1a2l2a2EKKzxVMDQyRT4gIjxVMDA1OT48VTAwNTU+IgorPFUwNDRFPiAiPFUwMDc5PjxVMDA3NT4iCislIFRPRE86ICdpdScgaWYgYWZ0ZXIgYW55IGxldHRlcgorCislIDxVMDQyRj4JWWEsIGlhCVlhIC0gYXQgdGhlIGJlZ2lubmluZyBvZiB3b3JkcywgaWEgLSBpbiBvdGhlciBwb3NpdGlvbnMgCTxVMDQyRj48VTA0MzM+PFUwNDNFPjxVMDQ0Mj48VTA0Mzg+PFUwNDNEPiAtIFlhaG90eW47STxVMDQ0Nz48VTA0M0Q+PFUwNDRGPiAtIEljaG5pYQorPFUwNDJGPiAiPFUwMDU5PjxVMDA0MT4iCis8VTA0NEY+ICI8VTAwNzk+PFUwMDYxPiIKKworJSBUT0RPOiAnaWEnIGlmIGFmdGVyIGFueSBsZXR0ZXIKKyUgJwknCShzZWUgY29tbWVudGFyeSkJPFUwNDE3PjxVMDQzRD48VTA0MzA+PFUwNDNDPic8VTA0NEY+PFUwNDNEPjxVMDQzQT48VTA0MzA+IC0gWm5hbWlhbmthCisKKworJSBTcGVjaWFsczoKKworJSBOVU1FUk8gU0lHTgorPFUyMTE2PiAiPFUwMDRFPjxVMDA2Rj4iCisKKyUgTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKKzxVMDBBQj4gIjxVMDAzQz48VTAwM0M+IgorCislIFJJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSSworPFUwMEJCPiAiPFUwMDNFPjxVMDAzRT4iCisKK3RyYW5zbGl0X2VuZAorCitFTkQgTENfQ1RZUEUKKworCisKK0xDX0NPTExBVEUKKyUgVWtyYWluaWFuIEFscGFoYWJldCAoMTg4MS0xOTMzKSAob2xkIGFuZCBjb3JyZWN0KQorJQorJSA8VTA0MTA+PFUwNDMwPiA8VTA0MTE+PFUwNDMxPiA8VTA0MTI+PFUwNDMyPiA8VTA0MTM+PFUwNDMzPgorJSA8VTA0OTA+PFUwNDkxPiA8VTA0MTQ+PFUwNDM0PiA8VTA0MTU+PFUwNDM1PiA8VTA0MDQ+PFUwNDU0PgorJSA8VTA0MTY+PFUwNDM2PiA8VTA0MTc+PFUwNDM3PiA8VTA0MTg+PFUwNDM4PiA8VTA0MDY+PFUwNDU2PgorJSA8VTA0MDc+PFUwNDU3PiA8VTA0MTk+PFUwNDM5PiA8VTA0MUE+PFUwNDNBPiA8VTA0MUI+PFUwNDNCPgorJSA8VTA0MUM+PFUwNDNDPiA8VTA0MUQ+PFUwNDNEPiA8VTA0MUU+PFUwNDNFPiA8VTA0MUY+PFUwNDNGPgorJSA8VTA0MjA+PFUwNDQwPiA8VTA0MjE+PFUwNDQxPiA8VTA0MjI+PFUwNDQyPiA8VTA0MjM+PFUwNDQzPgorJSA8VTA0MjQ+PFUwNDQ0PiA8VTA0MjU+PFUwNDQ1PiA8VTA0MjY+PFUwNDQ2PiA8VTA0Mjc+PFUwNDQ3PgorJSA8VTA0Mjg+PFUwNDQ4PiA8VTA0Mjk+PFUwNDQ5PiA8VTA0MkU+PFUwNDRFPiA8VTA0MkY+PFUwNDRGPgorJSA8VTA0MkM+PFUwNDRDPgorJQorJQorJSBVa3JhaW5pYW4gQWxwYWhhYmV0ICgxOTMzLTE5OTEpIChvbGQpCislCislIDxVMDQxMD48VTA0MzA+IDxVMDQxMT48VTA0MzE+IDxVMDQxMj48VTA0MzI+IDxVMDQxMz48VTA0MzM+CislIDxVMDQxND48VTA0MzQ+IDxVMDQxNT48VTA0MzU+IDxVMDQwND48VTA0NTQ+IDxVMDQxNj48VTA0MzY+CislIDxVMDQxNz48VTA0Mzc+IDxVMDQxOD48VTA0Mzg+IDxVMDQwNj48VTA0NTY+IDxVMDQwNz48VTA0NTc+CislIDxVMDQxOT48VTA0Mzk+IDxVMDQxQT48VTA0M0E+IDxVMDQxQj48VTA0M0I+IDxVMDQxQz48VTA0M0M+CislIDxVMDQxRD48VTA0M0Q+IDxVMDQxRT48VTA0M0U+IDxVMDQxRj48VTA0M0Y+IDxVMDQyMD48VTA0NDA+CislIDxVMDQyMT48VTA0NDE+IDxVMDQyMj48VTA0NDI+IDxVMDQyMz48VTA0NDM+IDxVMDQyND48VTA0NDQ+CislIDxVMDQyNT48VTA0NDU+IDxVMDQyNj48VTA0NDY+IDxVMDQyNz48VTA0NDc+IDxVMDQyOD48VTA0NDg+CislIDxVMDQyOT48VTA0NDk+IDxVMDQyRT48VTA0NEU+IDxVMDQyRj48VTA0NEY+IDxVMDQyQz48VTA0NEM+CislCislIE5vdGU6CislIFVrcmFpbmlhbiBsZXR0ZXIgR0hFX1dJVEhfVVBUVVJOICg8VTA0OTA+KSB3YXMgcmVtb3ZlZCBmcm9tIFVrcmFpbmlhbgorJSBhbHBoYWJldCBieSBTdGFsaW4gaW4gMTkzMyBhbmQgd2FzIHJldHVybmVkIGJhY2sgaW4gMTk5MSB3aGVuCislIFVrcmFpbmUgYmVjYW1lIGluZGVwZW5kZW50IGZyb20gU292aWV0IFVuaW9uLgorJQorJSBVa3JhaW5pYW4gQWxwaGFiZXQgKDE5OTEpIChjdXJyZW50IGJ1dCBub3QgY29ycmVjdCkKKyUKKyUgPFUwNDEwPjxVMDQzMD4gPFUwNDExPjxVMDQzMT4gPFUwNDEyPjxVMDQzMj4gPFUwNDEzPjxVMDQzMz4KKyUgPFUwNDkwPjxVMDQ5MT4gPFUwNDE0PjxVMDQzND4gPFUwNDE1PjxVMDQzNT4gPFUwNDA0PjxVMDQ1ND4KKyUgPFUwNDE2PjxVMDQzNj4gPFUwNDE3PjxVMDQzNz4gPFUwNDE4PjxVMDQzOD4gPFUwNDA2PjxVMDQ1Nj4KKyUgPFUwNDA3PjxVMDQ1Nz4gPFUwNDE5PjxVMDQzOT4gPFUwNDFBPjxVMDQzQT4gPFUwNDFCPjxVMDQzQj4KKyUgPFUwNDFDPjxVMDQzQz4gPFUwNDFEPjxVMDQzRD4gPFUwNDFFPjxVMDQzRT4gPFUwNDFGPjxVMDQzRj4KKyUgPFUwNDIwPjxVMDQ0MD4gPFUwNDIxPjxVMDQ0MT4gPFUwNDIyPjxVMDQ0Mj4gPFUwNDIzPjxVMDQ0Mz4KKyUgPFUwNDI0PjxVMDQ0ND4gPFUwNDI1PjxVMDQ0NT4gPFUwNDI2PjxVMDQ0Nj4gPFUwNDI3PjxVMDQ0Nz4KKyUgPFUwNDI4PjxVMDQ0OD4gPFUwNDI5PjxVMDQ0OT4gPFUwNDJDPjxVMDQ0Qz4gPFUwNDJFPjxVMDQ0RT4KKyUgPFUwNDJGPjxVMDQ0Rj4KKyUKKyUgTm90ZToKKyUgU29mdCBzaWduICg8VTA0MkM+KSBpcyBub3QgY29uc2lkZXJlZCB0byBiZSBhIGxldHRlciBhbmQgdGhlcmVmb3JlIHNob3VsZCBoYXZlIGJlZW4KKyUgcGxhY2VkIGF0IHRoZSBlbmQgb2YgdGhlIHRhYmxlLiBVbmZvcnR1bmF0ZWx5IHRoaXMgbGV0dGVyIHdhcyByZW9yZGVyZWQgaW4KKyUgVWtyYWluaWFuIGFscGFiZXQgcmlnaHQgYmVmb3JlIFVrcmFpbmUgZ290IGluZGVwZW5kZW5jeSAoMTk5MC0xOTkxKSBieSBTb3ZpZXQKKyUgYWNhZGVtaWMgSXZhbmVua28gd2hvIHRyaWVkIHRvIG1ha2UgTVMgRE9TIGNvZGUgcGFnZXMgY29tcGF0aWJsZSBiZXR3ZWVuCislIFJ1c3NpYW4sIFVrcmFpbmlhbiBhbmQgQmVsYXJ1c2lhbiBsYW5ndWFnZXMuCislCislIFNlZSAiPFUwMDUwPjxVMDA3Mj48VTAwNkY+PFUwMDYyPjxVMDA2Qz48VTAwNjU+PFUwMDZEPjxVMDA3OT48VTAwMjA+PFUwMDc1PjxVMDA2Qj48VTAwNzI+PFUwMDYxPjxVMDA2OT48VTAwNkU+PFUwMDY5PjxVMDA3QT48VTAwNjE+PFUwMDc0PjxVMDA2Mz48VTAwNjk+PFUwMDY5PjxVMDAyMD48VTAwNkI+PFUwMDZGPjxVMDA2RD48VTAwNzA+PFUwMDc1PjxVMDA3ND48VTAwNjU+PFUwMDcyPjxVMDA2OT48VTAwNzY+IiBOMiAoVURLIDY4MS4zLjA2KSwgcC4gMTYKKyUgSXZhbmVua28gTC4gTS4gIk5hIHNobGlha2h1IHBvYnVkb3Z5IDw8aWRlYWxub2hvPj4gc3RhbmRhcnR1IGFibworJSBzeW5paSBwdGFraCBOZW9reXJ5bHl0Y2kiLgorCitjb3B5ICI8VTAwNjk+PFUwMDczPjxVMDA2Rj48VTAwMzE+PFUwMDM0PjxVMDAzNj48VTAwMzU+PFUwMDMxPjxVMDA1Rj48VTAwNzQ+PFUwMDMxPiIKKworJSBVa3JhaW5pYW4gZ2hlIGlzIG1pc3NpbmcgaW4gaXNvMTQ2NTFfdDEKK2NvbGxhdGluZy1zeW1ib2wgPFVLUi1HSEU+CisKKyUgU29mdCBzaWduIGFuZCBhcG9zdHJvcGhlIG11c3QgYmUgaWdub3JlZCBkdXJpbmcgc29ydGluZyBiZWNhdXNlIHRoZXkgYXJlCislIGp1c3Qgc2lnbnMsIG5vdCByZWFsIGxldHRlcnMuCislICggIjxVMDA2RT48VTAwNjA+Ij09IjxVMDA2RT4iLCAiPFUwMDI3PjxVMDA3OT48VTAwNjE+Ij09IjxVMDA3OT48VTAwNjE+IiwgZXRjLiApCislCislIEFwb3N0cm9waGUgYWxyZWFkeSBpZ25vcmVkIGJ5IGlzbzE0NjUxX3QxLgorJQorJSBTb2Z0IHNpZ24gJzxVMDQ0Qz4nIG1heSBmb2xsb3cgb25seSB0aGlzIHNldCBvZiBuaW5lIGNoYXJhY3RlcnMgWzxVMDQzMj48VTA0MzQ+PFUwNDM3PjxVMDQzQj48VTA0M0Q+PFUwNDQwPjxVMDQ0MT48VTA0NDI+PFUwNDQ2Pl0uCislIEl0IG9ubHkgc29mdGVucyBwcm9udW5jaWF0aW9uIG9mIHRoZXNlIGNoYXJhY3RlcnMgc28gaXQncyBzaG91bGQgbm90IGltcGFjdAorJSBzb3J0aW5nLgorCisKK2NvbGxhdGluZy1zeW1ib2wgPFYrU1M+Citjb2xsYXRpbmctZWxlbWVudCA8Vi1TUz4gZnJvbSAiPFUwNDEyPjxVMDQyQz4iCitjb2xsYXRpbmctZWxlbWVudCA8Vi1zcz4gZnJvbSAiPFUwNDEyPjxVMDQ0Qz4iCitjb2xsYXRpbmctZWxlbWVudCA8di1TUz4gZnJvbSAiPFUwNDMyPjxVMDQyQz4iCitjb2xsYXRpbmctZWxlbWVudCA8di1zcz4gZnJvbSAiPFUwNDMyPjxVMDQ0Qz4iCisKK2NvbGxhdGluZy1zeW1ib2wgPEQrU1M+Citjb2xsYXRpbmctZWxlbWVudCA8RC1TUz4gZnJvbSAiPFUwNDE0PjxVMDQyQz4iCitjb2xsYXRpbmctZWxlbWVudCA8RC1zcz4gZnJvbSAiPFUwNDE0PjxVMDQ0Qz4iCitjb2xsYXRpbmctZWxlbWVudCA8ZC1TUz4gZnJvbSAiPFUwNDM0PjxVMDQyQz4iCitjb2xsYXRpbmctZWxlbWVudCA8ZC1zcz4gZnJvbSAiPFUwNDM0PjxVMDQ0Qz4iCisKK2NvbGxhdGluZy1zeW1ib2wgPForU1M+Citjb2xsYXRpbmctZWxlbWVudCA8Wi1TUz4gZnJvbSAiPFUwNDE3PjxVMDQyQz4iCitjb2xsYXRpbmctZWxlbWVudCA8Wi1zcz4gZnJvbSAiPFUwNDE3PjxVMDQ0Qz4iCitjb2xsYXRpbmctZWxlbWVudCA8ei1TUz4gZnJvbSAiPFUwNDM3PjxVMDQyQz4iCitjb2xsYXRpbmctZWxlbWVudCA8ei1zcz4gZnJvbSAiPFUwNDM3PjxVMDQ0Qz4iCisKK2NvbGxhdGluZy1zeW1ib2wgPEwrU1M+Citjb2xsYXRpbmctZWxlbWVudCA8TC1TUz4gZnJvbSAiPFUwNDFCPjxVMDQyQz4iCitjb2xsYXRpbmctZWxlbWVudCA8TC1zcz4gZnJvbSAiPFUwNDFCPjxVMDQ0Qz4iCitjb2xsYXRpbmctZWxlbWVudCA8bC1TUz4gZnJvbSAiPFUwNDNCPjxVMDQyQz4iCitjb2xsYXRpbmctZWxlbWVudCA8bC1zcz4gZnJvbSAiPFUwNDNCPjxVMDQ0Qz4iCisKK2NvbGxhdGluZy1zeW1ib2wgPE4rU1M+Citjb2xsYXRpbmctZWxlbWVudCA8Ti1TUz4gZnJvbSAiPFUwNDFEPjxVMDQyQz4iCitjb2xsYXRpbmctZWxlbWVudCA8Ti1zcz4gZnJvbSAiPFUwNDFEPjxVMDQ0Qz4iCitjb2xsYXRpbmctZWxlbWVudCA8bi1TUz4gZnJvbSAiPFUwNDNEPjxVMDQyQz4iCitjb2xsYXRpbmctZWxlbWVudCA8bi1zcz4gZnJvbSAiPFUwNDNEPjxVMDQ0Qz4iCisKK2NvbGxhdGluZy1zeW1ib2wgPFIrU1M+Citjb2xsYXRpbmctZWxlbWVudCA8Ui1TUz4gZnJvbSAiPFUwNDIwPjxVMDQyQz4iCitjb2xsYXRpbmctZWxlbWVudCA8Ui1zcz4gZnJvbSAiPFUwNDIwPjxVMDQ0Qz4iCitjb2xsYXRpbmctZWxlbWVudCA8ci1TUz4gZnJvbSAiPFUwNDQwPjxVMDQyQz4iCitjb2xsYXRpbmctZWxlbWVudCA8ci1zcz4gZnJvbSAiPFUwNDQwPjxVMDQ0Qz4iCisKK2NvbGxhdGluZy1zeW1ib2wgPFMrU1M+Citjb2xsYXRpbmctZWxlbWVudCA8Uy1TUz4gZnJvbSAiPFUwNDIxPjxVMDQyQz4iCitjb2xsYXRpbmctZWxlbWVudCA8Uy1zcz4gZnJvbSAiPFUwNDIxPjxVMDQ0Qz4iCitjb2xsYXRpbmctZWxlbWVudCA8cy1TUz4gZnJvbSAiPFUwNDQxPjxVMDQyQz4iCitjb2xsYXRpbmctZWxlbWVudCA8cy1zcz4gZnJvbSAiPFUwNDQxPjxVMDQ0Qz4iCisKK2NvbGxhdGluZy1zeW1ib2wgPFQrU1M+Citjb2xsYXRpbmctZWxlbWVudCA8VC1TUz4gZnJvbSAiPFUwNDIyPjxVMDQyQz4iCitjb2xsYXRpbmctZWxlbWVudCA8VC1zcz4gZnJvbSAiPFUwNDIyPjxVMDQ0Qz4iCitjb2xsYXRpbmctZWxlbWVudCA8dC1TUz4gZnJvbSAiPFUwNDQyPjxVMDQyQz4iCitjb2xsYXRpbmctZWxlbWVudCA8dC1zcz4gZnJvbSAiPFUwNDQyPjxVMDQ0Qz4iCisKK2NvbGxhdGluZy1zeW1ib2wgPFRTRStTUz4KK2NvbGxhdGluZy1lbGVtZW50IDxUUy1TUz4gZnJvbSAiPFUwNDI2PjxVMDQyQz4iCitjb2xsYXRpbmctZWxlbWVudCA8VFMtc3M+IGZyb20gIjxVMDQyNj48VTA0NEM+IgorY29sbGF0aW5nLWVsZW1lbnQgPHRzLVNTPiBmcm9tICI8VTA0NDY+PFUwNDJDPiIKK2NvbGxhdGluZy1lbGVtZW50IDx0cy1zcz4gZnJvbSAiPFUwNDQ2PjxVMDQ0Qz4iCisKKworY29sbGF0aW5nLXN5bWJvbCA8Q0FQLU1JTj4KK2NvbGxhdGluZy1zeW1ib2wgPE1JTi1DQVA+CisKKyUgVGFrZW4gZnJvbSBiZ19CRyAyLjAuMToKKworJSBXZSBoYXZlIG1hZGUgdGhlIGZvbGxvd2luZyBjaGFuZ2VzIHRvIHRoZSBiYXNpYyBjb2xsYXRpb24gc2NoZW1lIGluCislIHRoZSBmaWxlIGlzbzE0NjUxX3QxOgorJSAgIDEuIFRoZSBDeXJpbGxpYyBzY3JpcHQgaXMgZmlyc3QgaW4gdGhlIG9yZGVyLgorJSAgIDIuIFRoZSBub24tQnVsZ2FyaWFuIEN5cmlsbGljIGxldHRlcnMgYXJlIHNvcnRlZCBhY2NvcmRpbmcgdG8KKyUgICAgICB0aGVpciB0cmFuc2xpdGVyYXRpb24gd2l0aCBCdWxnYXJpYW4gQ3lyaWxsaWMgbGV0dGVycy4KKworJSBMb2NhbCBjaGFuZ2VzOgorJSBBZGRlZCA8VUtSLUdIRT4gY29sbGF0aW9uIHN5bWJvbCBhdCBwcm9wZXIgcG9zaXRpb24uCislIFJlb3JkZXJpbmcgb2YgPFVLUi1JPiw8VUtSLVlJPiB0byB3cm9uZyBwb3NpdGlvbnMgKGFjY29yZGluZyB0byBVa3JhaW5pYW4KKyUgYWxoYWJldCkgd2FzIHJlbW92ZWQuCisKK3Jlb3JkZXItYWZ0ZXIgPDk+Cis8Q1lSLUE+Cis8Q1lSLUJFPgorPENZUi1WRT4KKzxDWVItR0hFPgorPFVLUi1HSEU+Cis8Q1lSLURFPgorPENZUi1HWkhFPgorPENZUi1ESkU+Cis8Q1lSLUlFPgorPFVLUi1JRT4KKzxDWVItSU8+Cis8Q1lSLVpIRT4KKzxDWVItWkU+Cis8Q1lSLURaRT4KKzxDWVItST4KKzxVS1ItST4KKzxVS1ItWUk+Cis8Q1lSLUlCUkU+Cis8Q1lSLUpFPgorPENZUi1LQT4KKzxDWVItRUw+Cis8Q1lSLUxKRT4KKzxDWVItRU0+Cis8Q1lSLUVOPgorPENZUi1OSkU+Cis8Q1lSLU8+Cis8Q1lSLVBFPgorPENZUi1FUj4KKzxDWVItRVM+Cis8Q1lSLVRFPgorPENZUi1LSkU+Cis8Q1lSLVRTSEU+Cis8Q1lSLU9VPgorPENZUi1PVUJSRT4KKzxDWVItRUY+Cis8Q1lSLUhBPgorPENZUi1UU0U+Cis8Q1lSLUNIRT4KKzxDWVItRENIRT4KKzxDWVItU0hBPgorPENZUi1TSFRTSEE+Cis8Q1lSLVNJR0RVUj4KKzxDWVItWUVST1U+Cis8Q1lSLVNJR01PVUlMPgorPENZUi1FPgorPENZUi1ZT1U+Cis8Q1lSLVlBPgorCislIFBsYWNpbmcgPFVLUi1HSEU+IHRvIHByb3BlciBwb3NpdGlvbi4KK3Jlb3JkZXItYWZ0ZXIgPFUwNDEzPgorPFUwNDkwPiA8VUtSLUdIRT47PEJBUz47PENBUD47SUdOT1JFCis8VTA0MDM+IDxDWVItR0hFPjs8Q1lSLUdaSEU+OzxDQVA+O0lHTk9SRSAlIE1hYy4gZ2plCityZW9yZGVyLWFmdGVyIDxVMDQzMz4KKzxVMDQ5MT4gPFVLUi1HSEU+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUwNDUzPiA8Q1lSLUdIRT47PENZUi1HWkhFPjs8TUlOPjtJR05PUkUgJSBNYWMuIGdqZQorCityZW9yZGVyLWFmdGVyIDxVMDQxND4KKzxVMDQwMj4gIjxVMDAzQz48VTAwNDM+PFUwMDU5PjxVMDA1Mj48VTAwMkQ+PFUwMDQ0PjxVMDA0NT48VTAwM0U+PFUwMDNDPjxVMDA0Mz48VTAwNTk+PFUwMDUyPjxVMDAyRD48VTAwNUE+PFUwMDQ4PjxVMDA0NT48VTAwM0U+IjsiPFUwMDNDPjxVMDA0Qz48VTAwNDk+PFUwMDQ3PjxVMDAzRT48VTAwM0M+PFUwMDRDPjxVMDA0OT48VTAwNDc+PFUwMDNFPiI7IjxVMDAzQz48VTAwNDM+PFUwMDQxPjxVMDA1MD48VTAwM0U+PFUwMDNDPjxVMDA0Mz48VTAwNDE+PFUwMDUwPjxVMDAzRT4iO0lHTk9SRSAlIENZUi1ESkUKKzxVMDQwRj4gIjxVMDAzQz48VTAwNDM+PFUwMDU5PjxVMDA1Mj48VTAwMkQ+PFUwMDQ0PjxVMDA0NT48VTAwM0U+PFUwMDNDPjxVMDA0Mz48VTAwNTk+PFUwMDUyPjxVMDAyRD48VTAwNUE+PFUwMDQ4PjxVMDA0NT48VTAwM0U+IjsiPFUwMDNDPjxVMDA0Mz48VTAwNTk+PFUwMDUyPjxVMDAyRD48VTAwNDQ+PFUwMDQzPjxVMDA0OD48VTAwNDU+PFUwMDNFPjxVMDAzQz48VTAwNEM+PFUwMDQ5PjxVMDA0Nz48VTAwM0U+IjsiPFUwMDNDPjxVMDA0Mz48VTAwNDE+PFUwMDUwPjxVMDAzRT48VTAwM0M+PFUwMDQzPjxVMDA0MT48VTAwNTA+PFUwMDNFPiI7SUdOT1JFICUgQ1lSLURDSEUKKzxVMDQwNT4gIjxVMDAzQz48VTAwNDM+PFUwMDU5PjxVMDA1Mj48VTAwMkQ+PFUwMDQ0PjxVMDA0NT48VTAwM0U+PFUwMDNDPjxVMDA0Mz48VTAwNTk+PFUwMDUyPjxVMDAyRD48VTAwNUE+PFUwMDQ1PjxVMDAzRT4iOyI8VTAwM0M+PFUwMDRDPjxVMDA0OT48VTAwNDc+PFUwMDNFPjxVMDAzQz48VTAwNEM+PFUwMDQ5PjxVMDA0Nz48VTAwM0U+IjsiPFUwMDNDPjxVMDA0Mz48VTAwNDE+PFUwMDUwPjxVMDAzRT48VTAwM0M+PFUwMDQzPjxVMDA0MT48VTAwNTA+PFUwMDNFPiI7SUdOT1JFICUgQ1lSLURaRQorcmVvcmRlci1hZnRlciA8VTA0MzQ+Cis8VTA0NTI+ICI8VTAwM0M+PFUwMDQzPjxVMDA1OT48VTAwNTI+PFUwMDJEPjxVMDA0ND48VTAwNDU+PFUwMDNFPjxVMDAzQz48VTAwNDM+PFUwMDU5PjxVMDA1Mj48VTAwMkQ+PFUwMDVBPjxVMDA0OD48VTAwNDU+PFUwMDNFPiI7IjxVMDAzQz48VTAwNEM+PFUwMDQ5PjxVMDA0Nz48VTAwM0U+PFUwMDNDPjxVMDA0Qz48VTAwNDk+PFUwMDQ3PjxVMDAzRT4iOyI8VTAwM0M+PFUwMDREPjxVMDA0OT48VTAwNEU+PFUwMDNFPjxVMDAzQz48VTAwNEQ+PFUwMDQ5PjxVMDA0RT48VTAwM0U+IjtJR05PUkUgJSBDWVItREpFCis8VTA0NUY+ICI8VTAwM0M+PFUwMDQzPjxVMDA1OT48VTAwNTI+PFUwMDJEPjxVMDA0ND48VTAwNDU+PFUwMDNFPjxVMDAzQz48VTAwNDM+PFUwMDU5PjxVMDA1Mj48VTAwMkQ+PFUwMDVBPjxVMDA0OD48VTAwNDU+PFUwMDNFPiI7IjxVMDAzQz48VTAwNDM+PFUwMDU5PjxVMDA1Mj48VTAwMkQ+PFUwMDQ0PjxVMDA0Mz48VTAwNDg+PFUwMDQ1PjxVMDAzRT48VTAwM0M+PFUwMDRDPjxVMDA0OT48VTAwNDc+PFUwMDNFPiI7IjxVMDAzQz48VTAwNEQ+PFUwMDQ5PjxVMDA0RT48VTAwM0U+PFUwMDNDPjxVMDA0RD48VTAwNDk+PFUwMDRFPjxVMDAzRT4iO0lHTk9SRSAlIENZUi1EQ0hFCis8VTA0NTU+ICI8VTAwM0M+PFUwMDQzPjxVMDA1OT48VTAwNTI+PFUwMDJEPjxVMDA0ND48VTAwNDU+PFUwMDNFPjxVMDAzQz48VTAwNDM+PFUwMDU5PjxVMDA1Mj48VTAwMkQ+PFUwMDVBPjxVMDA0NT48VTAwM0U+IjsiPFUwMDNDPjxVMDA0Qz48VTAwNDk+PFUwMDQ3PjxVMDAzRT48VTAwM0M+PFUwMDRDPjxVMDA0OT48VTAwNDc+PFUwMDNFPiI7IjxVMDAzQz48VTAwNEQ+PFUwMDQ5PjxVMDA0RT48VTAwM0U+PFUwMDNDPjxVMDA0RD48VTAwNDk+PFUwMDRFPjxVMDAzRT4iO0lHTk9SRSAlIENZUi1EWkUKKworcmVvcmRlci1hZnRlciA8VTA0MzU+Cis8VTA0NTQ+IDxDWVItSUU+OzxVS1ItSUU+OzxNSU4+O0lHTk9SRQorPFUwNDUxPiA8Q1lSLUlFPjs8Q1lSLUlPPjs8TUlOPjtJR05PUkUKKzxVMDQ0RD4gPENZUi1JRT47PENZUi1FPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwNDE1PgorPFUwNDA0PiA8Q1lSLUlFPjs8VUtSLUlFPjs8Q0FQPjtJR05PUkUKKzxVMDQwMT4gPENZUi1JRT47PENZUi1JTz47PENBUD47SUdOT1JFCis8VTA0MkQ+IDxDWVItSUU+OzxDWVItRT47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwNDFBPgorPFUwNDBDPiA8Q1lSLUtBPjs8Q1lSLUtKRT47PENBUD47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDQzQT4KKzxVMDQ1Qz4gPENZUi1LQT47PENZUi1LSkU+OzxNSU4+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDQxRD4KKzxVMDQwQT4gIjxVMDAzQz48VTAwNDM+PFUwMDU5PjxVMDA1Mj48VTAwMkQ+PFUwMDQ1PjxVMDA0RT48VTAwM0U+PFUwMDNDPjxVMDA0Mz48VTAwNTk+PFUwMDUyPjxVMDAyRD48VTAwNTM+PFUwMDQ5PjxVMDA0Nz48VTAwNEQ+PFUwMDRGPjxVMDA1NT48VTAwNDk+PFUwMDRDPjxVMDAzRT4iOyI8VTAwM0M+PFUwMDRDPjxVMDA0OT48VTAwNDc+PFUwMDNFPjxVMDAzQz48VTAwNEM+PFUwMDQ5PjxVMDA0Nz48VTAwM0U+IjsiPFUwMDNDPjxVMDA0Mz48VTAwNDE+PFUwMDUwPjxVMDAzRT48VTAwM0M+PFUwMDQzPjxVMDA0MT48VTAwNTA+PFUwMDNFPiI7SUdOT1JFICUgQ1lSLU5KRQorcmVvcmRlci1hZnRlciA8VTA0M0Q+Cis8VTA0NUE+ICI8VTAwM0M+PFUwMDQzPjxVMDA1OT48VTAwNTI+PFUwMDJEPjxVMDA0NT48VTAwNEU+PFUwMDNFPjxVMDAzQz48VTAwNDM+PFUwMDU5PjxVMDA1Mj48VTAwMkQ+PFUwMDUzPjxVMDA0OT48VTAwNDc+PFUwMDREPjxVMDA0Rj48VTAwNTU+PFUwMDQ5PjxVMDA0Qz48VTAwM0U+IjsiPFUwMDNDPjxVMDA0Qz48VTAwNDk+PFUwMDQ3PjxVMDAzRT48VTAwM0M+PFUwMDRDPjxVMDA0OT48VTAwNDc+PFUwMDNFPiI7IjxVMDAzQz48VTAwNEQ+PFUwMDQ5PjxVMDA0RT48VTAwM0U+PFUwMDNDPjxVMDA0RD48VTAwNDk+PFUwMDRFPjxVMDAzRT4iO0lHTk9SRSAlIENZUi1OSkUKKworcmVvcmRlci1hZnRlciA8VTA0Mjc+Cis8VTA0MEI+IDxDWVItQ0hFPjs8Q1lSLVRTSEU+OzxDQVA+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTA0NDc+Cis8VTA0NUI+IDxDWVItQ0hFPjs8Q1lSLVRTSEU+OzxNSU4+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDQxQj4KKzxVMDQwOT4gIjxVMDAzQz48VTAwNDM+PFUwMDU5PjxVMDA1Mj48VTAwMkQ+PFUwMDQ1PjxVMDA0Qz48VTAwM0U+PFUwMDNDPjxVMDA0Mz48VTAwNTk+PFUwMDUyPjxVMDAyRD48VTAwNTM+PFUwMDQ5PjxVMDA0Nz48VTAwNEQ+PFUwMDRGPjxVMDA1NT48VTAwNDk+PFUwMDRDPjxVMDAzRT4iOyI8VTAwM0M+PFUwMDRDPjxVMDA0OT48VTAwNDc+PFUwMDNFPjxVMDAzQz48VTAwNEM+PFUwMDQ5PjxVMDA0Nz48VTAwM0U+IjsiPFUwMDNDPjxVMDA0Mz48VTAwNDE+PFUwMDUwPjxVMDAzRT48VTAwM0M+PFUwMDQzPjxVMDA0MT48VTAwNTA+PFUwMDNFPiI7SUdOT1JFICUgQ1lSLUxKRQorcmVvcmRlci1hZnRlciA8VTA0M0I+Cis8VTA0NTk+ICI8VTAwM0M+PFUwMDQzPjxVMDA1OT48VTAwNTI+PFUwMDJEPjxVMDA0NT48VTAwNEM+PFUwMDNFPjxVMDAzQz48VTAwNDM+PFUwMDU5PjxVMDA1Mj48VTAwMkQ+PFUwMDUzPjxVMDA0OT48VTAwNDc+PFUwMDREPjxVMDA0Rj48VTAwNTU+PFUwMDQ5PjxVMDA0Qz48VTAwM0U+IjsiPFUwMDNDPjxVMDA0Qz48VTAwNDk+PFUwMDQ3PjxVMDAzRT48VTAwM0M+PFUwMDRDPjxVMDA0OT48VTAwNDc+PFUwMDNFPiI7IjxVMDAzQz48VTAwNEQ+PFUwMDQ5PjxVMDA0RT48VTAwM0U+PFUwMDNDPjxVMDA0RD48VTAwNDk+PFUwMDRFPjxVMDAzRT4iO0lHTk9SRSAlIENZUi1MSkUKKworcmVvcmRlci1hZnRlciA8VTA0MjM+Cis8VTA0MEU+IDxDWVItT1U+OzxDWVItT1VCUkU+OzxDQVA+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTA0NDM+Cis8VTA0NUU+IDxDWVItT1U+OzxDWVItT1VCUkU+OzxNSU4+O0lHTk9SRQorCislIENhcGl0YWwgbGV0dGVycyBnbyBiZWZvcmUgc21hbGwgbGV0dGVycy4gKCI8VTAwNDE+IjwiPFUwMDYxPiIpCityZW9yZGVyLWFmdGVyIDxDQVA+Cis8Q0FQLU1JTj4KKzxNSU4tQ0FQPgorPE1JTj4KKworCislIFJlb3JkZXIgbGV0dGVycyB3aXRoIHNvZnQgc2lnbgorJSBbPFUwNDMyPjxVMDQzND48VTA0Mzc+PFUwNDNCPjxVMDQzRD48VTA0NDA+PFUwNDQxPjxVMDQ0Mj48VTA0NDY+XSArIDxVMDQ0Qz4KKworcmVvcmRlci1hZnRlciA8Q1lSLVZFPgorPFYrU1M+CityZW9yZGVyLWFmdGVyIDxVMDQxMj4KKzxWLVNTPiA8Q1lSLVZFPjs8QkFTPjs8Q0FQPjs8VitTUz4KKzxWLXNzPiA8Q1lSLVZFPjs8QkFTPjs8Q0FQLU1JTj47PFYrU1M+CityZW9yZGVyLWFmdGVyIDxVMDQzMj4KKzx2LVNTPiA8Q1lSLVZFPjs8QkFTPjs8TUlOLUNBUD47PFYrU1M+Cis8di1zcz4gPENZUi1WRT47PEJBUz47PE1JTj47PFYrU1M+CisKK3Jlb3JkZXItYWZ0ZXIgPENZUi1ERT4KKzxEK1NTPgorcmVvcmRlci1hZnRlciA8VTA0MTQ+Cis8RC1TUz4gPENZUi1ERT47PEJBUz47PENBUD47PEQrU1M+Cis8RC1zcz4gPENZUi1ERT47PEJBUz47PENBUC1NSU4+OzxEK1NTPgorcmVvcmRlci1hZnRlciA8VTA0MzQ+Cis8ZC1TUz4gPENZUi1ERT47PEJBUz47PE1JTi1DQVA+OzxEK1NTPgorPGQtc3M+IDxDWVItREU+OzxCQVM+OzxNSU4+OzxEK1NTPgorCityZW9yZGVyLWFmdGVyIDxDWVItWkU+Cis8WitTUz4KK3Jlb3JkZXItYWZ0ZXIgPFUwNDE3PgorPFotU1M+IDxDWVItWkU+OzxCQVM+OzxDQVA+OzxaK1NTPgorPFotc3M+IDxDWVItWkU+OzxCQVM+OzxDQVAtTUlOPjs8WitTUz4KK3Jlb3JkZXItYWZ0ZXIgPFUwNDM3PgorPHotU1M+IDxDWVItWkU+OzxCQVM+OzxNSU4tQ0FQPjs8WitTUz4KKzx6LXNzPiA8Q1lSLVpFPjs8QkFTPjs8TUlOPjs8WitTUz4KKworcmVvcmRlci1hZnRlciA8Q1lSLUVMPgorPEwrU1M+CityZW9yZGVyLWFmdGVyIDxVMDQxQj4KKzxMLVNTPiA8Q1lSLUVMPjs8QkFTPjs8Q0FQPjs8TCtTUz4KKzxMLXNzPiA8Q1lSLUVMPjs8QkFTPjs8Q0FQLU1JTj47PEwrU1M+CityZW9yZGVyLWFmdGVyIDxVMDQzQj4KKzxsLVNTPiA8Q1lSLUVMPjs8QkFTPjs8TUlOLUNBUD47PEwrU1M+Cis8bC1zcz4gPENZUi1FTD47PEJBUz47PE1JTj47PEwrU1M+CisKK3Jlb3JkZXItYWZ0ZXIgPENZUi1FTj4KKzxOK1NTPgorcmVvcmRlci1hZnRlciA8VTA0MUQ+Cis8Ti1TUz4gPENZUi1FTj47PEJBUz47PENBUD47PE4rU1M+Cis8Ti1zcz4gPENZUi1FTj47PEJBUz47PENBUC1NSU4+OzxOK1NTPgorcmVvcmRlci1hZnRlciA8VTA0M0Q+Cis8bi1TUz4gPENZUi1FTj47PEJBUz47PE1JTi1DQVA+OzxOK1NTPgorPG4tc3M+IDxDWVItRU4+OzxCQVM+OzxNSU4+OzxOK1NTPgorCityZW9yZGVyLWFmdGVyIDxDWVItRVI+Cis8UitTUz4KK3Jlb3JkZXItYWZ0ZXIgPFUwNDIwPgorPFItU1M+IDxDWVItRVI+OzxCQVM+OzxDQVA+OzxSK1NTPgorPFItc3M+IDxDWVItRVI+OzxCQVM+OzxDQVAtTUlOPjs8UitTUz4KK3Jlb3JkZXItYWZ0ZXIgPFUwNDQwPgorPHItU1M+IDxDWVItRVI+OzxCQVM+OzxNSU4tQ0FQPjs8UitTUz4KKzxyLXNzPiA8Q1lSLUVSPjs8QkFTPjs8TUlOPjs8UitTUz4KKworcmVvcmRlci1hZnRlciA8Q1lSLUVTPgorPFMrU1M+CityZW9yZGVyLWFmdGVyIDxVMDQyMT4KKzxTLVNTPiA8Q1lSLUVTPjs8QkFTPjs8Q0FQPjs8UytTUz4KKzxTLXNzPiA8Q1lSLUVTPjs8QkFTPjs8Q0FQLU1JTj47PFMrU1M+CityZW9yZGVyLWFmdGVyIDxVMDQ0MT4KKzxzLVNTPiA8Q1lSLUVTPjs8QkFTPjs8TUlOLUNBUD47PFMrU1M+Cis8cy1zcz4gPENZUi1FUz47PEJBUz47PE1JTj47PFMrU1M+CisKK3Jlb3JkZXItYWZ0ZXIgPENZUi1URT4KKzxUK1NTPgorcmVvcmRlci1hZnRlciA8VTA0MjI+Cis8VC1TUz4gPENZUi1URT47PEJBUz47PENBUD47PFQrU1M+Cis8VC1zcz4gPENZUi1URT47PEJBUz47PENBUC1NSU4+OzxUK1NTPgorcmVvcmRlci1hZnRlciA8VTA0NDI+Cis8dC1TUz4gPENZUi1URT47PEJBUz47PE1JTi1DQVA+OzxUK1NTPgorPHQtc3M+IDxDWVItVEU+OzxCQVM+OzxNSU4+OzxUK1NTPgorCityZW9yZGVyLWFmdGVyIDxDWVItVFNFPgorPFRTRStTUz4KK3Jlb3JkZXItYWZ0ZXIgPFUwNDI2PgorPFRTLVNTPiA8Q1lSLVRTRT47PEJBUz47PENBUD47PFRTRStTUz4KKzxUUy1zcz4gPENZUi1UU0U+OzxCQVM+OzxDQVAtTUlOPjs8VFNFK1NTPgorcmVvcmRlci1hZnRlciA8VTA0NDY+Cis8dHMtU1M+IDxDWVItVFNFPjs8QkFTPjs8TUlOLUNBUD47PFRTRStTUz4KKzx0cy1zcz4gPENZUi1UU0U+OzxCQVM+OzxNSU4+OzxUU0UrU1M+CisKKyUgVG8gZ2V0IGJhY2sgdG8gY29ycmVjdCBidXQgc3RpbGwgdW5vZmZpY2lhbCBwcmUtMTk5MSBhbHBoYWJldCB1bmNvbW1lbnQgdGhlCislIGZvbGxvd2luZyBsaW5lcyB0aGF0IG1vdmUgc29mdCBzaWduICg8Q1lSLVlFUk9VPikgdG8gdGhlIGVuZCBvZiB0aGUgYWxwaGFiZXQuCislCislIHJlb3JkZXItYWZ0ZXIgPENZUi1ZQT4KKyUgPENZUi1ZRVJPVT4KKyUgcmVvcmRlci1hZnRlciA8VTA0MkY+CislIDxVMDQyQz4gPENZUi1ZRVJPVT47PEJBUz47PENBUD47SUdOT1JFCislIHJlb3JkZXItYWZ0ZXIgPFUwNDRGPgorJSA8VTA0NEM+IDxDWVItWUVST1U+OzxCQVM+OzxNSU4+O0lHTk9SRQorCityZW9yZGVyLWVuZAorCisKK0VORCBMQ19DT0xMQVRFCisKKworCitMQ19NRVNTQUdFUworCisKKyUgV0FSTklORzogc3ltYm9scyAiPFUwMDU5PiIgYW5kICI8VTAwNDM+PFUwMDc5PjxVMDA3Mj48VTAwNjk+PFUwMDZDPjxVMDA2Qz48VTAwNjk+PFUwMDYzPjxVMDA1Rj48VTAwNEU+IiBhcmUgcGxhY2VkIGF0IG9uZSBrZXkgaW4gVWtyYWluaWFuIGtleWJvYXJkCislIGxheW91dCBhbHRob3VnaCB0aGUgbWVhbmluZyBpcyBzZW1hbnRpY2FsbHkgb3Bwb3NpdGUgKCI8VTAwNTk+IiBzdGFuZHMgZm9yICI8VTAwNTk+PFUwMDY1PjxVMDA3Mz4iCislIHdoaWxlICI8VTAwNDM+PFUwMDc5PjxVMDA3Mj48VTAwNjk+PFUwMDZDPjxVMDA2Qz48VTAwNjk+PFUwMDYzPjxVMDA1Rj48VTAwNEU+IiBzdGFuZHMgZm9yICI8VTAwNEU+PFUwMDZGPiIpLgorJQorJSBUaGlzIHByb2JsZW0gbWF5IGJlIGRlYWx0IHdpdGggYnkgcmVxdWlyaW5nIGF0IGxlYXN0IHR3byBsZXR0ZXJzIHRvIGJlCislIGVudGVyZWQgaW4gVWtyYWluaWFuIGxhbmd1YWdlLgorCislIEEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgZGVzY3JpYmVzIHBvc3NpYmxlIHllcy1yZXNwb25zZXMKKyUgIjxVMDA3OT4iLCAiPFUwMDU5PiIsICI8VTAwMkI+IiwgIjxVMDA3ND48VTAwNjE+IiBvciAiPFUwMDc0PjxVMDA2MT48VTAwNkI+IiBpbiBDeXJpbGxpYworeWVzZXhwciAiPFUwMDVFPjxVMDAyOD48VTAwNUI+PFUwMDU5PjxVMDA3OT48VTAwMkI+PFUwMDVEPjxVMDA3Qz48VTAwNUI+PFUwNDIyPjxVMDQ0Mj48VTAwNUQ+PFUwMDVCPjxVMDQxMD48VTA0MzA+PFUwMDVEPjxVMDA1Qj48VTA0MUE+PFUwNDNBPjxVMDA1RD48VTAwM0Y+PFUwMDI5PjxVMDAyND4iCisKKyUgV0FSTklORzogc3ltYm9scyAiPFUwMDRFPiIgYW5kICI8VTAwNDM+PFUwMDc5PjxVMDA3Mj48VTAwNjk+PFUwMDZDPjxVMDA2Qz48VTAwNjk+PFUwMDYzPjxVMDA1Rj48VTAwNTQ+IiBhcmUgcGxhY2VkIGF0IG9uZSBrZXkgaW4gVWtyYWluaWFuCislIGtleWJvYXJkIGxheW91dCBhbHRob3VnaCB0aGUgbWVhbmluZyBpcyBzZW1hbnRpY2FsbHkgb3Bwb3NpdGUgKCI8VTAwNEU+IiBzdGFuZHMgZm9yCislICI8VTAwNEU+PFUwMDZGPiIgd2hpbGUgIjxVMDA0Mz48VTAwNzk+PFUwMDcyPjxVMDA2OT48VTAwNkM+PFUwMDZDPjxVMDA2OT48VTAwNjM+PFUwMDVGPjxVMDA1ND4iIHN0YW5kcyBmb3IgIjxVMDA1OT48VTAwNjU+PFUwMDczPiIpLgorJQorJSBXZSBtYXkgcmVxdWlyZSB0d28gVWtyYWluaWFuIGxldHRlcnMgYXMgaW5wdXQgdG8gZGVhbCB3aXRoIHRoaXMgcG90ZW50aWFsCislIHByb2JsZW0uCisKKyUgQSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBkZXNjcmliZXMgcG9zc2libGUgbm8tcmVzcG9uc2VzLgorJSAiPFUwMDZFPiIsICI8VTAwNEU+IiwgIjxVMDAyRD4iIG9yIHdvcmQgIjxVMDA2RT48VTAwNjk+IiBpbiBDeXJpbGxpYworbm9leHByICAiPFUwMDVFPjxVMDAyOD48VTAwNUI+PFUwMDRFPjxVMDA2RT48VTAwMkQ+PFUwMDVEPjxVMDA3Qz48VTAwNUI+PFUwNDFEPjxVMDQzRD48VTAwNUQ+PFUwMDVCPjxVMDQwNj48VTA0NTY+PFUwMDVEPjxVMDAyOT48VTAwMjQ+IgorJSAiPFUwMDZFPiIgIjxVMDA0RT4iICI8VTAwMkQ+IiBvciB3b3JkICI8VTAwNkU+PFUwMDY5PiIgaW4gQ3lyaWxsaWMKKworCislIE91dHB1dCBzdHJpbmcgZm9yIGBgeWVzJycgKCI8VTAwNzQ+PFUwMDYxPjxVMDA2Qj4iKS4KK3llc3N0ciAiPFUwNDQyPjxVMDQzMD48VTA0M0E+IgorCislIE91dHB1dCBzdHJpbmcgZm9yIGBgbm8nJyAoIjxVMDA2RT48VTAwNjk+IikuCitub3N0ciAiPFUwNDNEPjxVMDQ1Nj4iCisKK0VORCBMQ19NRVNTQUdFUworCisKKworTENfTU9ORVRBUlkKKworJSBFeGFtcGxlczoKKyUKKyUgMTAwLDAwIGhyCislIC0xMDAsMDAgaHIKKyUgVUFIIDEwMCwwMAorJSBVQUggLTEwMCwwMAorJQorJSAgICAgICAgIDAsMDEgaHIKKyUgICAgICAgICAwLDEwIGhyCislICAgICAgICAgMSwwMCBocgorJSAgICAgICAgMTAsMDAgaHIKKyUgICAgICAgMTAwLDAwIGhyCislICAgICAgMTAwMCwwMCBociAoRVhDRVBUSU9OKQorJSAgICAxMCAwMDAsMDAgaHIKKyUgICAxMDAgMDAwLDAwIGhyCislIDEgMDAwIDAwMCwwMCBocgorJSAuLi4KKyUKKyUgTm90ZToKKyUgVGhlcmUgaXMgcG90ZW50aWFsIGNvbmZsaWN0IGJldHdlZW4gIjxVMDA2OD48VTAwNzI+PFUwMDc5PjxVMDA3Nj48VTAwNkU+PFUwMDc5PjxVMDA2MT4iICgiPFUwMDY4PjxVMDA3Mj4iLCAiPFUwMDY4PjxVMDA3Mj48VTAwNzY+PFUwMDJFPiIsIG1vbmV5KSwKKyUgIjxVMDA2OD48VTAwNzI+PFUwMDYxPjxVMDA2RD4iICgiPFUwMDY4PiIsIjxVMDA2OD48VTAwNzI+PFUwMDJFPiIsIHdlaWdodCkgYW5kICI8VTAwNjg+PFUwMDZGPjxVMDA2ND48VTAwNzk+PFUwMDZFPjxVMDA2MT4iICgiPFUwMDY4PjxVMDA2Rj48VTAwNjQ+IiwiPFUwMDY4PjxVMDA2Rj48VTAwNjQ+PFUwMDJFPiIsIHRpbWUpLAorJSBiZWNhdXNlIHNvbWUgcGVvcGxlIHVzZXMgIjxVMDA2OD4iIGZvciAiPFUwMDY4PjxVMDA2Rj48VTAwNjQ+PFUwMDc5PjxVMDA2RT48VTAwNzk+IiwgIjxVMDA2OD48VTAwNzI+IiBmb3IgIjxVMDA2OD48VTAwNzI+PFUwMDYxPjxVMDA2RD48VTAwNzk+IiwgZXRjLgorJQorJSAyMDBoIC0gMjAwIGhyYW0gKHdlaWdodCkKKyUgMjAwIGhyLiAtIDIwMCBocmFtICh3ZWlnaHQpCislIDIwMGhkIC0gMjAwIGhvZHluICh0aW1lKQorJSAyMDAgaG9kLiAtIDIwMCBob2R5biAodGltZSkKKyUgMjAwaHIgLSAyMDAgaHJ5dmVuIChtb25leSkKKyUgMjAwIGhydi4gLSAyMDAgaHJ5dmVuIChtb25leSkKKworJSB0aGUgbG9jYWwgY3VycmVuY3kgc3ltYm9sCitjdXJyZW5jeV9zeW1ib2wgICAgICAgICAgICI8VTA0MzM+PFUwNDQwPiIgJSBociAoaHJ5dm55YSkKKworJSBUaGlzIG11c3QgYmUgYSA0LWNoYXJhY3RlciBzdHJpbmcgY29udGFpbmluZyB0aGUgaW50ZXJuYXRpb25hbCBjdXJyZW5jeQorJSBzeW1ib2wgYXMgZGVmaW5lZCBieSB0aGUgSVNPIDQyMTcgc3RhbmRhcmQgKHRocmVlIGNoYXJhY3RlcnMpIGZvbGxvd2VkCislIGJ5IGEgc2VwYXJhdG9yLgorJQorJSBEU1RVIElTTyAzMTY2CislIENvZGUgICBOYW1lICAgIE5hbWUgaW4gRW5nbGlzaCBsYW5ndWFnZQorJSBVQUggICAgPFUwNDMzPjxVMDQ0MD48VTA0Mzg+PFUwNDMyPjxVMDQzRD48VTA0NEY+ICBocnl2bnlhCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAgICI8VTAwNTU+PFUwMDQxPjxVMDA0OD48VTAwMjA+IgorCislIFRoaXMgc3RyaW5nIGlzIHVzZWQgYXMgdGhlIGRlY2ltYWwgZGVsaW1pdGVyIHdoZW4gZm9ybWF0dGluZyBtb25ldGFyeQorJSBxdWFudGl0aWVzLgorJSBzZWUgTENfTlVNRVJJQzpkZWNpbWFsX3BvaW50Cittb25fZGVjaW1hbF9wb2ludCAgICAgICAgICI8VTAwMkM+IgorCislIFRoaXMgc3RyaW5nIGlzIHVzZWQgYXMgYSB0aG91c2FuZHMgc2VwYXJhdG9yIHdoZW4gZm9ybWF0dGluZyBtb25ldGFyeQorJSBxdWFudGl0aWVzLgorJSBzZWUgTENfTlVNRVJJQzp0aG91c2FuZHMgc2VwYXJhdG9yCittb25fdGhvdXNhbmRzX3NlcCAgICAgICAgICI8VTAwQTA+IiAlIDxOQlNQPiAoMHhBMCkKKworJSBEZWZpbmUgIHRoZSAgc2l6ZSBvZiBlYWNoIGdyb3VwIG9mIGRpZ2l0cyBpbiBmb3JtYXR0ZWQgbW9uZXRhcnkKKyUgcXVhbnRpdGllcy4gIFRoZSBvcGVyYW5kIGlzIGEgc2VxdWVuY2Ugb2YgaW50ZWdlcnMgc2VwYXJhdGVkIGJ5CislIHNlbWljb2xvbnMuIEVhY2ggaW50ZWdlciBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBkaWdpdHMgaW4gZWFjaAorJSBncm91cCwgIHdpdGggdGhlIGluaXRpYWwgaW50ZWdlciBkZWZpbmluZyB0aGUgc2l6ZSBvZiB0aGUgZ3JvdXAKKyUgaW1tZWRpYXRlbHkgIHByZWNlZGluZyB0aGUgZGVjaW1hbCBkZWxpbWl0ZXIsIGFuZCB0aGUgZm9sbG93aW5nCislIGludGVnZXJzICBkZWZpbmluZyB0aGUgcHJlY2VkaW5nIGdyb3Vwcy4gSWYgdGhlIGxhc3QgaW50ZWdlciBpcworJSBub3QgIC0xLCAgdGhlbiB0aGUgc2l6ZSBvZiB0aGUgcHJldmlvdXMgZ3JvdXAgKGlmIGFueSkgc2hhbGwgYmUKKyUgcmVwZWF0ZWRseSAgdXNlZCAgZm9yICB0aGUgcmVtYWluZGVyIG9mIHRoZSBkaWdpdHMuIElmIHRoZSBsYXN0CislIGludGVnZXIgaXMgLTEsIHRoZW4gbm8gZnVydGhlciBncm91cGluZyBzaGFsbCBiZSBwZXJmb3JtZWQuCislCislIEZJWE1FOgorJSAgIE5vdGUgZGlmZmVyZW5jZSBiZXR3ZWVuICI8VTAwMzE+PFUwMDMyPjxVMDAzMz48VTAwMjA+PFUwMDM0PjxVMDAzNT48VTAwMzY+PFUwMDIwPjxVMDAzNz48VTAwMzg+PFUwMDM5PjxVMDAyQz48VTAwMzA+PFUwMDMxPiIgYW5kICI8VTAwMzE+PFUwMDMyPjxVMDAzMz48VTAwMzQ+PFUwMDJDPjxVMDAzNT48VTAwMzY+Ii4KKyUgICBVbmZvcnR1bmF0ZWx5LCBpdCBjYW4ndCBiZSBpbXBsZW1lbnRlZCB3aXRoIGN1cnJlbnQgKDIuMy42KSBnbGliYy4KK21vbl9ncm91cGluZyAgICAgICAgICAgICAgMzszCisKKyUgU3RyaW5nIHRoYXQgaXMgdXNlZCB0byBpbmRpY2F0ZSBhIHBvc2l0aXZlIHNpZ24gZm9yIG1vbmV0YXJ5CislIHF1YW50aXRpZXMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAgICAgIiIKKworJSBTdHJpbmcgdGhhdCBpcyB1c2VkIHRvIGluZGljYXRlIGEgbmVnYXRpdmUgc2lnbiBmb3IgbW9uZXRhcnkKKyUgcXVhbnRpdGllcworbmVnYXRpdmVfc2lnbiAgICAgICAgICAgICAiPFUwMDJEPiIKKworJSBBbiBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgbnVtYmVyIG9mIGZyYWN0aW9uYWwgZGlnaXRzICh0aG9zZSB0byB0aGUgcmlnaHQgb2YKKyUgdGhlIGRlY2ltYWwgZGVsaW1pdGVyKSB0byBiZSB3cml0dGVuIGluIGEgZm9ybWF0dGVkIG1vbmV0YXJ5IHF1YW50aXR5IHVzaW5nCislIGludF9jdXJyX3N5bWJvbC4KK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgICAgMgorCislIEFuIGludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBudW1iZXIgb2YgZnJhY3Rpb25hbCBkaWdpdHMgKHRob3NlIHRvIHRoZSByaWdodCBvZgorJSB0aGUgZGVjaW1hbCBkZWxpbWl0ZXIpIHRvIGJlIHdyaXR0ZW4gaW4gYSBmb3JtYXR0ZWQgbW9uZXRhcnkgcXVhbnRpdHkgdXNpbmcKKyUgY3VycmVuY3lfc3ltYm9sLgorZnJhY19kaWdpdHMgICAgICAgICAgICAgICAyCisKKyUgMSAtIHRoZSBjdXJyZW5jeV9zeW1ib2wgb3IgaW50X2N1cnJfc3ltYm9sIHNob3VsZCBwcmVjZWRlIHRoZQorJSBmb3JtYXR0ZWQgbW9uZXRhcnkgcXVhbnRpdHkuCislIDAgLSB0aGUgc3ltYm9sIHN1Y2NlZWRzIHRoZSB2YWx1ZS4KK3BfY3NfcHJlY2VkZXMgICAgICAgICAgICAgMAoraW50X3BfY3NfcHJlY2VkZXMgICAgICAgICAxCisKKyUgMCAtIHRoZSBjdXJyZW5jeV9zeW1ib2wgc3VjY2VlZHMgdGhlIG5lZ2F0aXZlIHZhbHVlLgorJSAxIC0gdGhlIGN1cnJlbmN5X3N5bWJvbCBwcmVjZWRlcyB0aGUgbmVnYXRpdmUgdmFsdWUuCituX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDAKK2ludF9uX2NzX3ByZWNlZGVzICAgICAgICAgMQorCislIDAgLSBtZWFucyB0aGF0IG5vIHNwYWNlIHNob3VsZCBiZSBwcmludGVkIGJldHdlZW4gdGhlIGN1cnJlbmN5X3N5bWJvbAorJSBhbmQgdGhlIHZhbHVlIGZvciBhIG1vbmV0YXJ5IHF1YW50aXR5IHdpdGggYSBub24tbmVnYXRpdmUgdmFsdWUuCislIDEgLSBtZWFucyB0aGF0IGEgc3BhY2Ugc2hvdWxkIGJlIHByaW50ZWQgYmV0d2VlbiB0aGUgY3VycmVuY3lfc3ltYm9sCislIGFuZCB0aGUgdmFsdWUuCislIDIgLSBtZWFucyB0aGF0IGEgc3BhY2Ugc2hvdWxkIGJlIHByaW50ZWQgYmV0d2VlbiB0aGUgc3ltYm9sIGFuZCB0aGUKKyUgc2lnbiBzdHJpbmcsIGlmIGFkamFjZW50LgorcF9zZXBfYnlfc3BhY2UgICAgICAgICAgICAyCitpbnRfcF9zZXBfYnlfc3BhY2UgICAgICAgIDIKKworJSAwIC0gbm8gc3BhY2Ugc2VwYXJhdGVzIHRoZSBjdXJyZW5jeV9zeW1ib2wgb3IgaW50X2N1cnJfc3ltYm9sIGZyb20gdGhlCislIHZhbHVlIGZvciBhIG5lZ2F0aXZlIG1vbmV0YXJ5IHF1YW50aXR5LgorJSAxIC0gYSBzcGFjZSBzZXBhcmF0ZXMgdGhlIHN5bWJvbCBmcm9tIHRoZSB2YWx1ZS4KKyUgMiAtIGEgc3BhY2Ugc2VwYXJhdGVzIHRoZSBzeW1ib2wgYW5kIHRoZSBzaWduIHN0cmluZywgaWYgYWRqYWNlbnQuCituX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK2ludF9uX3NlcF9ieV9zcGFjZSAgICAgICAgMQorCislIEFuIGludGVnZXIgc2V0IHRvIGEgdmFsdWUgaW5kaWNhdGluZyB0aGUgcG9zaXRpb25pbmcgb2YgdGhlCislIHBvc2l0aXZlX3NpZ24gZm9yIGEgbW9uZXRhcnkgcXVhbnRpdHkgd2l0aCBhIG5vbi1uZWdhdGl2ZSB2YWx1ZS4KKyUKKyUgMCAtIFBhcmVudGhlc2VzIGVuY2xvc2UgdGhlIHF1YW50aXR5IGFuZCB0aGUgY3VycmVuY3lfc3ltYm9sIG9yCislIGludF9jdXJyX3N5bWJvbC4KKyUgMSAtIFRoZSBzaWduIHN0cmluZyBwcmVjZWRlcyB0aGUgcXVhbnRpdHkgYW5kIHRoZSBjdXJyZW5jeV9zeW1ib2wgb3IgdGhlCislIGludF9jdXJyX3N5bWJvbC4KKyUgMiAtIFRoZSBzaWduIHN0cmluZyBzdWNjZWVkcyB0aGUgcXVhbnRpdHkgYW5kIHRoZSBjdXJyZW5jeV9zeW1ib2wgb3IgdGhlCislIGludF9jdXJyX3N5bWJvbC4KKyUgMyAtIFRoZSBzaWduIHN0cmluZyBwcmVjZWRlcyB0aGUgY3VycmVuY3lfc3ltYm9sIG9yIHRoZSBpbnRfY3Vycl9zeW1ib2wuCislIDQgLSBUaGUgc2lnbiBzdHJpbmcgc3VjY2VlZHMgdGhlIGN1cnJlbmN5X3N5bWJvbCBvciB0aGUgaW50X2N1cnJfc3ltYm9sLgorcF9zaWduX3Bvc24gICAgICAgICAgICAgICAxCitpbnRfcF9zaWduX3Bvc24gICAgICAgICAgIDQKKworJSBBbiBpbnRlZ2VyIHNldCB0byBhIHZhbHVlIGluZGljYXRpbmcgdGhlIHBvc2l0aW9uaW5nIG9mIHRoZQorJSBuZWdhdGl2ZV9zaWduIGZvciBhIG1vbmV0YXJ5IHF1YW50aXR5IHdpdGggYSBuZWdhdGl2ZSB2YWx1ZS4KKyUKKyUgMCAtIFBhcmVudGhlc2VzIGVuY2xvc2UgdGhlIHF1YW50aXR5IGFuZCB0aGUgY3VycmVuY3lfc3ltYm9sIG9yCislIGludF9jdXJyX3N5bWJvbC4KKyUgMSAtIFRoZSBzaWduIHN0cmluZyBwcmVjZWRlcyB0aGUgcXVhbnRpdHkgYW5kIHRoZSBjdXJyZW5jeV9zeW1ib2wgb3IgdGhlCislIGludF9jdXJyX3N5bWJvbC4KKyUgMiAtIFRoZSBzaWduIHN0cmluZyBzdWNjZWVkcyB0aGUgcXVhbnRpdHkgYW5kIHRoZSBjdXJyZW5jeV9zeW1ib2wgb3IgdGhlCislIGludF9jdXJyX3N5bWJvbC4KKyUgMyAtIFRoZSBzaWduIHN0cmluZyBwcmVjZWRlcyB0aGUgY3VycmVuY3lfc3ltYm9sIG9yIHRoZSBpbnRfY3Vycl9zeW1ib2wuCislIDQgLSBUaGUgc2lnbiBzdHJpbmcgc3VjY2VlZHMgdGhlIGN1cnJlbmN5X3N5bWJvbCBvciB0aGUgaW50X2N1cnJfc3ltYm9sLgorbl9zaWduX3Bvc24gICAgICAgICAgICAgICAxCitpbnRfbl9zaWduX3Bvc24gICAgICAgICAgIDQKKworRU5EIExDX01PTkVUQVJZCisKKworCitMQ19OVU1FUklDCisKKyUgRXhhbXBsZXM6CislCislICAgICAgICAgMQorJQkgMTAKKyUgICAgICAgMTAwCislICAgICAgMTAwMCAoRVhDRVBUSU9OKQorJSAgICAxMCAwMDAKKyUgICAxMDAgMDAwCislIDEgMDAwIDAwMAorJQorJSAxLDAKKyUgMCwxCislIDAsMDEKKyUgMCwwMDEKKyUgMCwwMDAxCislIDAsMDAwMDEKKyUgCislICAxCislIC0xCislCislIExpc3Qgd2l0aCBudW1iZXJzIC0gMSwwOyAyLDA7IDMsMDsgNCwwLgorJQorJSBOb3RlOgorJSBXZSB1c2UgJzsnIGFzIHNlcGFyYXRvciBiZXR3ZWVuIG51bWJlcnMuCisKKyUgVGhlIHN0cmluZyB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVjaW1hbCBkZWxpbWl0ZXIgd2hlbiBmb3JtYXR0aW5nCislIG51bWVyaWMgcXVhbnRpdGllcy4KK2RlY2ltYWxfcG9pbnQgICAgICAgICAgICAgIjxVMDAyQz4iICUgc2VlIExDX01PTkVUQVJZOm1vbl9kZWNpbWFsX3BpbnQKKyUgQ29tbWEgY2F1c2UgbG90IG9mIHByb2JsZW1zIC0gY2hhbmdlZCB0byBkb3QuCislIGRlY2ltYWxfcG9pbnQgICAgICAgICAgICAgIjxVMDAyRT4iICUgc2VlIExDX01PTkVUQVJZOm1vbl9kZWNpbWFsX3BpbnQKKworJSBUaGUgc3RyaW5nIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGEgZ3JvdXAgc2VwYXJhdG9yIHdoZW4gZm9ybWF0dGluZworJSBudW1lcmljIHF1YW50aXRpZXMuCislIHNlZSBMQ19NT05FVEFSWTptb25fdGhvdXNhbmRzX3NlcAordGhvdXNhbmRzX3NlcCAgICAgICAgICAgICAiPFUwMEEwPiIgJSA8TkJTUD4gKDB4QTApCisKKyUgQSBzdHJpbmcgdGhhdCBkZXNjcmliZXMgdGhlIGZvcm1hdHRpbmcgb2YgbnVtZXJpYyBxdWFudGl0aWVzLgorJQorJSBTZWUgbW9uX2dyb3VwaW5nCislCislIEZJWE1FOgorJSAgIE5vdGUgZGlmZmVyZW5jZSBiZXR3ZWVuICI8VTAwMzE+PFUwMDMyPjxVMDAzMz48VTAwMjA+PFUwMDM0PjxVMDAzNT48VTAwMzY+PFUwMDIwPjxVMDAzNz48VTAwMzg+PFUwMDM5PjxVMDAyQz48VTAwMzA+PFUwMDMxPiIgYW5kICI8VTAwMzE+PFUwMDMyPjxVMDAzMz48VTAwMzQ+PFUwMDJDPjxVMDAzNT48VTAwMzY+Ii4KKyUgICBVbmZvcnR1bmF0ZWx5LCBpdCBjYW4ndCBiZSBpbXBsZW1lbnRlZCB3aXRoIGN1cnJlbnQgZ2xpYmMuCitncm91cGluZyAgICAgICAgICAgICAgICAgIDM7MworCitFTkQgTENfTlVNRVJJQworCisKKworTENfVElNRQorCislIEV4YW1wbGVzIG9mIGRhdGU6CislCislIHNlcmVkYSwgY2hvdHlybmFkdGN5YXRlIHRyYXZueWEgZHZpdHlzeWFjaGkgdHJldGBvaG8gcm9rdSBuLmUuCislIHNlcmVkYSwgY2hvdHlybmFkdGN5YXRlIHRyYXZueWEgZHZpdHlzeWFjaGkgdHJldGBvaG8gcm9rdQorJSBzZXJlZGEsIDE0LWUgdHJhdm55YSAyMDAzLWhvIHJva3Ugbi5lLgorJSBzZXJlZGEsIDEtZSB0cmF2bnlhIDIwMDMtaG8gcm9rdQorJSBzZXJlZGEsIDEgdHJhdm55YSAyMDAzCislIHNlcmVkYSwgMDEtdHJhLTIwMDMKKyUgc3IsIDAxLXRyYS0wMworJSBzciwgMDEtdHJhLTIwMDMKKyUgMDEuMDUuMDMgKFJlY29tZW5kZWQgYnkgRFNUVSkKKyUgMDEuMDUuMjAwMyAoQWxsb3dlZCBidXQgbm90IHJlY29tZW5kZWQgYnkgRFNUVSkKKyUgMjAwMy4wNS4wMSAoQWxsb3dlZCBidXQgbm90IHJlY29tZW5kZWQgYnkgRFNUVSkKKyUgMDEvdHJhLzAzIChEZXByZWNhdGVkLCBidXQgc3RpbGwgY29tbW9ubHkgdXNlZCBmb3JtYXQpCislIDEtZSB0cmF2bnlhIChub3QgIjxVMDAzMT48VTAwMjA+PFUwMDc0PjxVMDA3Mj48VTAwNjE+PFUwMDc2PjxVMDA2RT48VTAwNzk+PFUwMDYxPiIgb3IgIjxVMDAzMT48VTAwMjA+PFUwMDc0PjxVMDA3Mj48VTAwNjE+PFUwMDc2PjxVMDA2NT48VTAwNkU+PFUwMDYwPiIgb3IgIjxVMDAzMT48VTAwMkQ+PFUwMDc0PjxVMDA3Mj48VTAwNjE+IikKKyUKKyUgTm90ZXM6CislICBtb250aCBhZnRlciBkYXksIHllYXIgYWZ0ZXIgbW9udGgKKyUgIGFsbCBtb250aC93ZWVrZGF5IG5hbWVzIGFuZCBhYmJyZXZpYXRpb25zIGluIGxvd2VyIGNhc2UKKyUgIG1vbnRoIG5hbWUgaW4gZGF0ZSBtdXN0IGJlIHVzZWQgaW4gYW5vdGhlciBmb3JtLCB0aGFuIGluIGNhbGVuZGFyCislICBkYXkgbmFtZSBtYXkgYmUgdXNlZCBpbiBhbm90aGVyIGZvcm0gaW4gYW5vdGhlciBjb250ZXh0CislICAoc2VyZWRhLCB2IHNlcmVkdSwgdGNpeWV5aSBzZXJlZHksIGV0Yy4pCisKKyUgRXhhbXBsZXMgb2YgdGltZToKKyUgMjM6NTk6NTkgKzAyMDAKKyUgMDA6MDA6MDAgKzAyMDAKKyUgMDA6MDAKKworJSBXZWVrIGRlc2NyaXB0aW9uLCBjb25zaXN0cyBvZiB0aHJlZSBmaWVsZHM6CislIDEuIE51bWJlciBvZiBkYXlzIGluIGEgd2Vlay4KKyUgMi4gR3JlZ29yaWFuIGRhdGUgdGhhdCBpcyBhIGZpcnN0IHdlZWtkYXkgKDE5OTcxMTMwIGZvciBTdW5kYXksIDE5OTcxMjAxIGZvciBNb25kYXkpLgorJSAzLiBUaGUgd2Vla2RheSBudW1iZXIgdG8gYmUgY29udGFpbmVkIGluIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLgorJQorJSBJU08gODYwMSBjb25mb3JtaW5nIGFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHRoZSB2YWx1ZXMgNywgMTk5NzEyMDEgKGEKKyUgTW9uZGF5KSwgYW5kIDQgKFRodXJzZGF5KSwgcmVzcGVjdGl2ZWx5Lgord2VlayA3OzE5OTcxMjAxOzQKKworJSBBIGxpc3Qgb2YgYWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcy4gKCVhKQorJQorJSBCVUc6IGdsaWJjLTIuMy42CislICAgVmlvbGF0aW9uIG9mIElTTy9JRUMgVFIxNDY1MjoyMDAyIC0gd2Vla2RheSBsaXN0IG11c3QgY29ycmVsYXRlIHdpdGggdmFsdWUKKyUgICBvZiA8d2Vlaz4ga2V5d29yZCAoZS5nLiBzdGFydCBmcm9tIE1vbmRheSBpbiBvdXIgY2FzZSkgYnV0IGdsaWJjIGFzc3VtZXMgdGhhdAorJSAgIGl0IGFsd2F5cyBzdGFydHMgZnJvbSBTdW5kYXkuIFN0aWNrIHRvIFN1bmRheSB0b28gdW50aWwgdGhlIGJ1ZyBpcyBmaXhlZC4KKworJSBOb3RlOgorJSBOZXZlciB1c2UgdGhyZWUgbGV0dGVycyBmb3IgZGF5IGFiYnJldmlhdGlvbnMgYmVjYXVzZSBvZiBjb25mbGljdCBiZXR3ZWVuCislIFNFUmVkYSAoZGF5IG5hbWUpIGFuZAorJSBTRVJwZW5gIChtb250aCBuYW1lKS4KK2FiZGF5IC8KKyAgICAgICAgIjxVMDQzRD48VTA0MzQ+IjsgJW5kICAvCisgICAgICAgICI8VTA0M0Y+PFUwNDNEPiI7ICVwbiAgLworICAgICAgICAiPFUwNDMyPjxVMDQ0Mj4iOyAldnQgIC8KKyAgICAgICAgIjxVMDQ0MT48VTA0NDA+IjsgJXNyICAvCisgICAgICAgICI8VTA0NDc+PFUwNDQyPiI7ICVjaHQgLworICAgICAgICAiPFUwNDNGPjxVMDQ0Mj4iOyAlcHQgIC8KKyAgICAgICAgIjxVMDQ0MT48VTA0MzE+IiAgJXNiCisKKyUgQSBsaXN0IG9mIHdlZWtkYXkgbmFtZXMgc3RhcnRpbmcgd2l0aCBmaXJzdCBkYXkgb2Ygd2VlayBhcyBkZWZpbmVkIGJ5IDx3ZWVrPiBrZXl3b3JkLiAoJUEpCislCislIEJVRzogZ2xpYmMtMi4zLjYKKyUgICBWaW9sYXRpb24gb2YgSVNPL0lFQyBUUjE0NjUyOjIwMDIgLSB3ZWVrZGF5IGxpc3QgbXVzdCBjb3JyZWxhdGUgd2l0aCB2YWx1ZQorJSAgIG9mIDx3ZWVrPiBrZXl3b3JkIChlLmcuIHN0YXJ0IGZyb20gTW9uZGF5IGluIG91ciBjYXNlKSBidXQgZ2xpYmMgYXNzdW1lcyB0aGF0CislICAgaXQgYWx3YXlzIHN0YXJ0cyBmcm9tIFN1bmRheS4gU3RpY2sgdG8gU3VuZGF5IHRvbyB1bnRpbCB0aGUgYnVnIGlzIGZpeGVkLgorCitkYXkgLworICAgICAgICAiPFUwNDNEPjxVMDQzNT48VTA0MzQ+PFUwNDU2PjxVMDQzQj48VTA0NEY+IjsgICAgJW5lZGlseWEgICAvCisJIjxVMDQzRj48VTA0M0U+PFUwNDNEPjxVMDQzNT48VTA0MzQ+PFUwNDU2PjxVMDQzQj48VTA0M0U+PFUwNDNBPiI7ICVwb25lZGlsb2sgLworICAgICAgICAiPFUwNDMyPjxVMDQ1Nj48VTA0MzI+PFUwNDQyPjxVMDQzRT48VTA0NDA+PFUwNDNFPjxVMDQzQT4iOyAgJXZpdnRvcm9rICAvCisJIjxVMDQ0MT48VTA0MzU+PFUwNDQwPjxVMDQzNT48VTA0MzQ+PFUwNDMwPiI7ICAgICVzZXJlZGEgICAgLworICAgICAgICAiPFUwNDQ3PjxVMDQzNT48VTA0NDI+PFUwNDMyPjxVMDQzNT48VTA0NDA+IjsgICAgJWNoZXR2ZXIgICAvCisgICAgICAgICI8VTA0M0Y+PFUwMDI3PjxVMDQ0Rj48VTA0NDI+PFUwNDNEPjxVMDQzOD48VTA0NDY+PFUwNDRGPiI7ICAlcGphdG55Y3lhIC8KKyAgICAgICAgIjxVMDQ0MT48VTA0NDM+PFUwNDMxPjxVMDQzRT48VTA0NDI+PFUwNDMwPiIgICAgICVzdWJvdGEKKworJSBBIGxpc3Qgb2YgYWJicmV2aWF0ZWQgbW9udGggbmFtZXMuICglYikKK2FibW9uIC8KKyAgICAgICAgIjxVMDQ0MT48VTA0NTY+PFUwNDQ3PiI7ICVzaWNoIC8KKyAgICAgICAgIjxVMDQzQj48VTA0NEU+PFUwNDQyPiI7ICVseXV0IC8KKyAgICAgICAgIjxVMDQzMT48VTA0MzU+PFUwNDQwPiI7ICViZXIgIC8KKyAgICAgICAgIjxVMDQzQT48VTA0MzI+PFUwNDU2PiI7ICVrdmkgIC8KKyAgICAgICAgIjxVMDQ0Mj48VTA0NDA+PFUwNDMwPiI7ICV0cmEgIC8KKyAgICAgICAgIjxVMDQ0Nz48VTA0MzU+PFUwNDQwPiI7ICVjaGVyIC8KKyAgICAgICAgIjxVMDQzQj48VTA0Mzg+PFUwNDNGPiI7ICVseXAgIC8KKyAgICAgICAgIjxVMDQ0MT48VTA0MzU+PFUwNDQwPiI7ICVzZXIgIC8KKyAgICAgICAgIjxVMDQzMj48VTA0MzU+PFUwNDQwPiI7ICV2ZXIgIC8KKyAgICAgICAgIjxVMDQzNj48VTA0M0U+PFUwNDMyPiI7ICV6aG92IC8KKyAgICAgICAgIjxVMDQzQj48VTA0Mzg+PFUwNDQxPiI7ICVseXMgIC8KKyAgICAgICAgIjxVMDQzMz48VTA0NDA+PFUwNDQzPiIgICVocnUgCisKKyUgQSBsaXN0IG9mIG1vbnRoIG5hbWVzIGluIHByb3BlciBmb3JtIGZvciBjYWxlbmRhciwgc2VlIGFsdF9kaWdpdHMuICglQikKK21vbiAvCisgICAgICAgICI8VTA0NDE+PFUwNDU2PjxVMDQ0Nz48VTA0MzU+PFUwNDNEPjxVMDQ0Qz4iOyAgICVzaWNoZW5gICAvCisgICAgICAgICI8VTA0M0I+PFUwNDRFPjxVMDQ0Mj48VTA0Mzg+PFUwNDM5PiI7ICAgICVseXV0eWogICAvCisgICAgICAgICI8VTA0MzE+PFUwNDM1PjxVMDQ0MD48VTA0MzU+PFUwNDM3PjxVMDQzNT48VTA0M0Q+PFUwNDRDPiI7ICViZXJlemVuYCAvCisgICAgICAgICI8VTA0M0E+PFUwNDMyPjxVMDQ1Nj48VTA0NDI+PFUwNDM1PjxVMDQzRD48VTA0NEM+IjsgICVrdml0ZW5gICAvCisgICAgICAgICI8VTA0NDI+PFUwNDQwPjxVMDQzMD48VTA0MzI+PFUwNDM1PjxVMDQzRD48VTA0NEM+IjsgICV0cmF2ZW5gICAvCisgICAgICAgICI8VTA0NDc+PFUwNDM1PjxVMDQ0MD48VTA0MzI+PFUwNDM1PjxVMDQzRD48VTA0NEM+IjsgICVjaGVydmVuYCAvCisgICAgICAgICI8VTA0M0I+PFUwNDM4PjxVMDQzRj48VTA0MzU+PFUwNDNEPjxVMDQ0Qz4iOyAgICVseXBlbmAgICAvCisgICAgICAgICI8VTA0NDE+PFUwNDM1PjxVMDQ0MD48VTA0M0Y+PFUwNDM1PjxVMDQzRD48VTA0NEM+IjsgICVzZXJwZW5gICAvCisgICAgICAgICI8VTA0MzI+PFUwNDM1PjxVMDQ0MD48VTA0MzU+PFUwNDQxPjxVMDQzNT48VTA0M0Q+PFUwNDRDPiI7ICV2ZXJlc2VuYCAvCisgICAgICAgICI8VTA0MzY+PFUwNDNFPjxVMDQzMj48VTA0NDI+PFUwNDM1PjxVMDQzRD48VTA0NEM+IjsgICV6aG92dGVuYCAvCisgICAgICAgICI8VTA0M0I+PFUwNDM4PjxVMDQ0MT48VTA0NDI+PFUwNDNFPjxVMDQzRj48VTA0MzA+PFUwNDM0PiI7ICVseXN0b3BhZCAvCisgICAgICAgICI8VTA0MzM+PFUwNDQwPjxVMDQ0Mz48VTA0MzQ+PFUwNDM1PjxVMDQzRD48VTA0NEM+IiAgICVocnVkZW5gIAorCislIEluaXRpYWxseSBhbHRfZGlnaXRzIHdhcyBzdXBwb3NlZCB0byBob2xkIGFsdGVybmF0aXZlIHN5bWJvbHMgZm9yIF9kaWdpdHNfLAorJSBjb3JyZXNwb25kaW5nIHRvICVPIG1vZGlmaWVkIGNvbnZlcnNpb24gc3BlY2lmaWNhdGlvbi4KKyUgQWx0aG91Z2ggaW4gVWtyYWluaWFuIGxhbmd1YWdlIGFsdGVybmF0ZSBfbmFtZXNfIGFyZSB1c2VkIGluc3RlYWQgb2YgZGlnaXRzLgorJSBXZSdsbCB1c2UgdGhpcyBrZXl3b3JkIHRvIHByZXNlbnQgYSBsaXN0IG9mIG1vbnRoIG5hbWVzIGluIHByb3BlciBmb3JtIGZvcgorJSBkYXRlLCBzZWUgbW9uLiAgKCVPbSkKKyUKKyUgVGhpcyBoYWNrIGlzIGRlZGljYXRlZCBmb3IgbW9udGhzIGl0IHdvbid0IHdvcmsgZm9yIG90aGVyICVPKiBtb2RpZmllcnMKKyUgKHdlZWtzLCBkYXlzIGV0YykuCislCithbHRfZGlnaXRzICI8VTAwMzA+IjsJICAgICAlIGRpZ2l0cyBhcmUgc3RhcnRpbmcgZnJvbSB6ZXJvIC8KKyAgICAgICAgIjxVMDQ0MT48VTA0NTY+PFUwNDQ3PjxVMDQzRD48VTA0NEY+IjsgICAgICUgc2ljaG55YSAgIC8KKyAgICAgICAgIjxVMDQzQj48VTA0NEU+PFUwNDQyPjxVMDQzRT48VTA0MzM+PFUwNDNFPiI7ICAgICUgbHl1dG9obyAgIC8KKyAgICAgICAgIjxVMDQzMT48VTA0MzU+PFUwNDQwPjxVMDQzNT48VTA0Mzc+PFUwNDNEPjxVMDQ0Rj4iOyAgICUgYmVyZXpueWEgIC8KKyAgICAgICAgIjxVMDQzQT48VTA0MzI+PFUwNDU2PjxVMDQ0Mj48VTA0M0Q+PFUwNDRGPiI7ICAgICUga3ZpdG55YSAgIC8KKyAgICAgICAgIjxVMDQ0Mj48VTA0NDA+PFUwNDMwPjxVMDQzMj48VTA0M0Q+PFUwNDRGPiI7ICAgICUgdHJhdm55YSAgIC8KKyAgICAgICAgIjxVMDQ0Nz48VTA0MzU+PFUwNDQwPjxVMDQzMj48VTA0M0Q+PFUwNDRGPiI7ICAgICUgY2hlcnZueWEgIC8KKyAgICAgICAgIjxVMDQzQj48VTA0Mzg+PFUwNDNGPjxVMDQzRD48VTA0NEY+IjsgICAgICUgbHlwbnlhICAgIC8KKyAgICAgICAgIjxVMDQ0MT48VTA0MzU+PFUwNDQwPjxVMDQzRj48VTA0M0Q+PFUwNDRGPiI7ICAgICUgc2VycG55YSAgIC8KKyAgICAgICAgIjxVMDQzMj48VTA0MzU+PFUwNDQwPjxVMDQzNT48VTA0NDE+PFUwNDNEPjxVMDQ0Rj4iOyAgICUgdmVyZXNueWEgIC8KKyAgICAgICAgIjxVMDQzNj48VTA0M0U+PFUwNDMyPjxVMDQ0Mj48VTA0M0Q+PFUwNDRGPiI7ICAgICUgemhvdnRueWEgIC8KKyAgICAgICAgIjxVMDQzQj48VTA0Mzg+PFUwNDQxPjxVMDQ0Mj48VTA0M0U+PFUwNDNGPjxVMDQzMD48VTA0MzQ+PFUwNDMwPiI7ICUgbHlzdG9wYWRhIC8KKyAgICAgICAgIjxVMDQzMz48VTA0NDA+PFUwNDQzPjxVMDQzND48VTA0M0Q+PFUwNDRGPiIgICAgICUgaHJ1ZG55YQorCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gZm9yIGRhdGUoMSkuCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA0MT48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwMkQ+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDRGPjxVMDA2RD48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1OD48VTAwMjA+PFUwMDI1PjxVMDA3QT4iCisKKyUgVGhlIGFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgZm9ybWF0LiAoJWMpCitkX3RfZm10ICAiPFUwMDI1PjxVMDA2MT48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDJEPjxVMDAyNT48VTAwNjI+PFUwMDJEPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTg+PFUwMDIwPjxVMDAyNT48VTAwN0E+IgorCislIFRoZSBhcHByb3ByaWF0ZSBkYXRlIGZvcm1hdC4gKCV4KQorZF9mbXQgICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRT48VTAwMjU+PFUwMDZEPjxVMDAyRT48VTAwMjU+PFUwMDc5PiIKKworJSBUaGUgYXBwcm9wcmlhdGUgdGltZSBmb3JtYXQuICglWCkKK3RfZm10ICAgICAiPFUwMDI1PjxVMDA1ND4iCisKKyUgVGhlIGFwcHJvcHJpYXRlIHRpbWUgZm9ybWF0IHdoZW4gdXNpbmcgMTJoIGNsb2NrIGZvcm1hdC4gKCVyKQorJSBJZiB0aGUgc3RyaW5nIGlzIGVtcHR5IHRoZSAxMi1ob3VyIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGluIHRoZSBGRENDLXNldC4KK3RfZm10X2FtcG0gIiIKKworJVRoZSBhcHByb3ByaWF0ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgYW0gYW5kIHBtIHN0cmluZ3MuICglcCkKKyVhbV9wbSAgICAgIjxVMDQzND48VTA0M0U+IjsiPFUwNDNGPjxVMDQzRT4iICAgJSAiPFUwMDY0PjxVMDA2Rj4iIDsgIjxVMDA3MD48VTAwNkY+IiAtIGRvIG9iaWR1L3BvIG9iaWRpCislIEVtcHR5IHN0cmluZ3MgYXJlIHVzZWQgdG8gZm9yY2UgMjRoIHRpbWUgZm9ybWF0LgorYW1fcG0gICAgICIiOyIiCisKKyUgRGVmaW5lIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgdG8gYmUgZGlzcGxheWVkIGluIGEgY2FsZW5kYXIuCislIFRoaXMgd2Vla2RheSBpcyByZWxhdGl2ZSB0byB0aGUgZGF0ZSBkZWZpbmVkIGluIHRoZSA8d2Vlaz4ga2V5d29yZC4KK2ZpcnN0X3dlZWtkYXkgMQorCislIERlZmluZSB0aGUgZmlyc3Qgd29ya2RheSByZWxhdGl2ZSB0byB0aGUgPHdlZWs+IGtleXdvcmQKK2ZpcnN0X3dvcmtkYXkgMQorCislIFp5bW92eWogQ0hhcyAod2ludGVyIHRpbWUpIG9yIHouY2guIChvciBub3RoaW5nKQorJSBMaXRuaWogQ0hhcyAoc3VtbWVyIHRpbWUpIG9yIGwuY2guCislCislICggb3IgRUVUL0VFU1QgKEVhc3RlciBFdXJvcGUgW1N1bW1lcl0gVGltZSkgKQorJSAoIG9yIEV1cm9wZS9LeWl2IChvciBLaWV2LCBpbiBSdXNzaWFuKSApCislCislIEZvcm1hdDoKKyUKKyUgPFpvbmVOYW1lPjxPZmZzZXQ+PFpvbmVOYW1lPjxPZmZzZXQ+LDxydWxlPiw8cnVsZT5bLC4uLl0KKyUKKyUgIFpvbmVOYW1lIC0gYXQgbGVhc3QgMyBsZXR0ZXJzLCB1cCB0byAxMAorJSAgT2Zmc2V0IC0gKCt8LSloaFs6bW1bOnNzXV0KKyUgICAgIC0gLSB0aW1lIHpvbmUgaXMgZWFzdCBvZiBQcmltZSBNZXJpZGlhbgorJSAgICAgKyAtIHRpbWUgem9uZSBpcyB3ZXN0IG9mIFByaW1lIE1lcmlkaWFuCislICBydWxlOiA8ZGF0ZT5bL3RpbWVbL3llYXJdXQorJSAgIGRhdGU6CislICAgICBKPEp1bGlhbkRheT4gLCAxLTM2NSAod2l0aG91dCAyOS4wMikKKyUgICAgIDxKdWxpYW5EYXk+ICwgMC0zNjQgKHdpdGhvdXQgMjkuMDIpCislICAgICBNPG0+LjxuPi48ZD4gLSBtIC0gbW9udGgoMS0xMikKKyUgICAgICAgICAgICAgICAgICAgIG4gLSB3ZWVrKDEtNSkKKyUgICAgICAgICAgICAgICAgICAgIGQgLSBkYXkgb2Ygd2VlaygwLTcpLCBkYXkgemVybyBhbmQgZGF5IHNldmVuIGlzIFN1bmRheQorJSAgIHRpbWUgLSB0aGUgc2FtZSBhcyA8b2Zmc2V0PiAoYnV0IHdpdGhvdXQgbGVhZGluZyArLy0pCislCit0aW1lem9uZSAiPFUwNDM3PjxVMDAyRT48VTA0NDc+PFUwMDJFPjxVMDAyRD48VTAwMzA+PFUwMDMyPjxVMDAzQT48VTAwMzA+PFUwMDMwPjxVMDQzQj48VTAwMkU+PFUwNDQ3PjxVMDAyRT48VTAwMkQ+PFUwMDMwPjxVMDAzMz48VTAwM0E+PFUwMDMwPjxVMDAzMD48VTAwMkM+PFUwMDREPjxVMDAzMz48VTAwMkU+PFUwMDM1PjxVMDAyRT48VTAwMzA+PFUwMDJGPjxVMDAzMD48VTAwMzM+PFUwMDNBPjxVMDAzMD48VTAwMzA+PFUwMDJDPjxVMDA0RD48VTAwMzE+PFUwMDMwPjxVMDAyRT48VTAwMzU+PFUwMDJFPjxVMDAzMD48VTAwMkY+PFUwMDMwPjxVMDAzND48VTAwM0E+PFUwMDMwPjxVMDAzMD4iCisKKyUgRXhhbXBsZToKKyUKKyUgICAgICAgICAgIHRyYXZlbmAgICAgICAgICBjaGVydmVuYAorJSBwbiAgICAgIDUgMTIgMTkgMjYgICAgICAgMiAgOSAxNiAyMyAzMAorJSB2dCAgICAgIDYgMTMgMjAgMjcgICAgICAgMyAxMCAxNyAyNAorJSBzciAgICAgIDcgMTQgMjEgMjggICAgICAgNCAxMSAxOCAyNQorJSBjdCAgKzErIDggMTUgMjIgMjkgICAgICAgNSAxMiAxOSAyNgorJSBwdCAgKzIrKzkrMTYgMjMgMzAgICAgICAgNiAxMyAyMCAyNworJSAqc2IqICozKjEwKjE3KjI0KjMxKiAgICAgKjcqMTQqMjErMjgrCislICtuZCsgKzQrMTErMTgrMjUrICAgICsxKyArOCsxNSsyMisyOSsKKyUgCislICsgLSBtZWFucyByZWQgY29sb3IKKyUgKiAtIG1lYW5zIGJvbGQgZm9udAorJQorJSBEaXJlY3Rpb24gb2YgdGhlIGRpc3BsYXkgb2YgY2FsZW5kYXIgZGF0ZXM6CislIDEgLSBsZWZ0LXJpZ2h0IGZyb20gdG9wCislIDIgLSB0b3AtZG93biBmcm9tIGxlZnQKKyUgMyAtIHJpZ2h0LWxlZnQgZnJvbSB0b3AKK2NhbF9kaXJlY3Rpb24gMgorCitFTkQgTENfVElNRQorCisKKworTENfUEFQRVIKKyUgRGVmYXVsdCBwYXBlcjogQTQKK2hlaWdodCAgIDI5NyAlIGluIG1pbGxpbWV0ZXJzCit3aWR0aCAgICAyMTAgJSBpbiBtaWxsaW1ldGVycworRU5EIExDX1BBUEVSCisKKworCitMQ19URUxFUEhPTkUKKworJSBGb3JtYXQgb2YgYSB0ZWxlcGhvbmUgbnVtYmVyIGZvciBpbnRlcm5hdGlvbmFsIHVzZS4KKyUKKyUgYSBhcmVhIGNvZGUgd2l0aG91dCBuYXRpb253aWRlIHByZWZpeCAocHJlZml4IGlzIG9mdGVuIDwwPikuIAorJSBBIGFyZWEgY29kZSBpbmNsdWRpbmcgbmF0aW9ud2lkZSBwcmVmaXggKHByZWZpeCBpcyBvZnRlbiA8MD4pLiAKKyUgbCBsb2NhbCBudW1iZXIgKHdpdGhpbiBhcmVhIGNvZGUpLiAKKyUgZSBleHRlbnNpb24gKHRvIGxvY2FsIG51bWJlcikgCislIGMgY291bnRyeSBjb2RlIAorJSBDIGFsdGVybmF0ZSBjYXJyaWVyIHNlcnZpY2UgY29kZSB1c2VkIGZvciBkaWFsbGluZyBhYnJvYWQgCislIHQgSW5zZXJ0IGEgPHNwYWNlPiBpZiB0aGUgcHJldmlvdXMgZGVzY3JpcHRvcidzIHZhbHVlIHdhcyBub3QgYW4gZW1wdHkKKyUgIHN0cmluZzsgb3RoZXJ3aXNlIGlnbm9yZS4KKyUKKyUgRXhhbXBsZTogKzM4MCA0NCA0OTA4ODg4CislCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNkM+IgorCislIEZvcm1hdCBvZiBhIHRlbGVwaG9uZSBudW1iZXIgZm9yIGRvbWVzdGljIHVzZS4KKyUgU2VlIHRlbF9pbnRfZm10LgorJQorJSBFeGFtcGxlOiAgKDA0NCkgNDkwODg4OAorJQordGVsX2RvbV9mbXQgICAgIjxVMDAyOD48VTAwMjU+PFUwMDQxPjxVMDAyOT48VTAwMjA+PFUwMDI1PjxVMDA2Qz4iCisKKyUgUHJlZml4IHRvIGNhbGwgaW50ZXJuYXRpb25hbCBwaG9uZSBudW1iZXJzLgoraW50X3NlbGVjdCAgICAgIjxVMDAzOD48VTAwN0U+PFUwMDMxPjxVMDAzMD4iCisKKyUgUHJlZml4IHVzZWQgZnJvbSBvdGhlciBjb3VudHJpZXMgdG8gZGlhbCBVa3JhaW5lLiAoJWMpCitpbnRfcHJlZml4ICAgICAiPFUwMDMzPjxVMDAzOD48VTAwMzA+IgorCitFTkQgTENfVEVMRVBIT05FCisKKworCitMQ19NRUFTVVJFTUVOVAorJSAxIC0gSVNPIDEwMDAKKyUgMiAtIFUuUy5BLgorJSAzIC0gb3RoZXIKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVAorCisKKworTENfTkFNRQorJSBFeGFtcGxlczoKKyUgRnVsbCBuYW1lOiBwYW4gVm9sb2R5bXlyIE15a29sYXlvdnljaCBMaXNpdmthCislIE1lYW5zOgorJSAgICAgcGFuIC0gbWlzdGVyCislICAgICBWb2xvZHlteXIgLSB0aGUgbWFuIG5hbWUgKGJlIExvcmQgb2YgdGhlIFdvcmxkIDopICkKKyUgICAgIE15a29sYXlvdnljaCAtIG1pZGRsZSBuYW1lIChzb24gb2YgTXlrb2xhKQorJSAgICAgTGlzaXZrYSAtIGZhbWlseSBuYW1lCislCislIEZvciBkb2N1bWVudHM6IExpc2l2a2EgVi4gTS4KKyUgUmVndWxhciBuYW1lOiBwYW4gVm9sb2R5bXlyIExpc2l2a2EKKyUgQm9zc25hbWU6IFZvbG9keW15ciBNeWtvbGF5b3Z5Y2gKKyUgRm9yIGZyaWVuZHM6IFZvbG9keWEKKyUgRm9yIGZhbWlseTogVm92a2EgKGZvciBicm90aGVycyksIFZvdmEoZm9yIG1vdGhlcikKKyUKKyUgQmVnaW5pbmcgb2Ygb2ZmaWNpYWwgbGV0dGVyczoKKyUgIFNoYW5vdm55aigtbmEpIFZvbG9keW15cmUgTGlzaXZrYSwgLi4uCislCislIEEgc2FsdXRhdGlvbiB0byBub3Qgd2VsbCBrbm93biBwZXJzb246CislICAgcGFuZSBMaXNpdmthCislCislIEEgc2FsdXRhdGlvbiB0byBib3NzOgorJSAgIFZvbG9keW15cmUgTXlrb2xheW92eWNodQorJQorJSBBIHNhbHV0YXRpb24gdG8gd2VsbCBrbm93biBwZXJzb24gKGJ1dCBub3QgYSBmcmllbmQpOgorJSAgIHBhbmUgVm9sb2R5bXlyZQorJQorJSBGSVhNRToKKyUgIHRvIG1ha2UgcHJvcGVyIHNhbHV0YXRpb24sIHdlIG11c3QgY2hhbmdlIHBlcnNvbiBuYW1lIGFuZCBtaWRkbGUgbmFtZQorJSAgdG8gcHJvcGVyIGZvcm1zIChrbHljaG5hIGZvcm1hKSwgYnV0IHRoaXMgaXMgaW1wb3NpYmxlIHdpdGhvdXQKKyUgIGlzcGVsbC1saWtlIHJ1bGVzLiAKKyUgIE5vdyBJIHVzZSByZWd1bGFyIGZvcm0sIGxpa2UgaW4gUnVzc2lhbiAoc2ljISkgbGFuZ2F1Z2UuCisKKyUgRmllbGQgZGVzY3JpcHRvcnMgZm9yIHRoZSA8bmFtZV9mbXQ+IGtleXdvcmQ6IAorJSBmIC0gZmFtaWx5IG5hbWUKKyUgRiAtIGZhbWlseSBuYW1lIGluIHVwcGVyY2FzZQorJSBnIC0gZmlyc3QgZ2l2ZW4gbmFtZQorJSBHIC0gZmlyc3QgZ2l2ZW4gaW5pdGlhbAorJSBsIC0gZmlyc3QgZ2l2ZW4gbmFtZSB3aXRoIExhdGluIGxldHRlcnMKKyUgbyAtIG90aGVyIHNob3J0ZXIgbmFtZQorJSBtIC0gYWRkaXRpb25hbCBnaXZlbiBuYW1lCislIE0gLSBpbml0aWFscyBmb3IgYWRkaXRpb25hbCBnaXZlbiBuYW1lcworJSBwIC0gcHJvZmVzc2lvbgorJSBzIC0gc2FsdXRhdGlvbiwgc3VjaCBhcyAiPFUwMDQ0PjxVMDA2Rj48VTAwNjM+PFUwMDc0PjxVMDA2Rj48VTAwNzI+IgorJSBTIC0gYWJicmV2aWF0ZWQgc2FsdXRhdGlvbiwgc3VjaCBhcyAiPFUwMDREPjxVMDA3Mj48VTAwMkU+IiBvciAiPFUwMDQ0PjxVMDA3Mj48VTAwMkU+IgorJSBkIC0gc2FsdXRhdGlvbiwgdXNpbmcgdGhlIEZEQ0Mtc2V0cyBjb252ZW50aW9ucworJSAgICAxIGZvciB0aGUgbmFtZV9nZW4KKyUgICAgMiBmb3IgbmFtZV9tcgorJSAgICAzIGZvciBuYW1lX21ycworJSAgICA0IGZvciBuYW1lX21pc3MKKyUgICAgNSBmb3IgbmFtZV9tcworJSB0IC0gaWYgdGhlIHByZWNlZGluZyBmaWVsZCBkZXNjcmlwdG9yIHJlc3VsdGVkIGluIGFuIGVtcHR5IHN0cmluZywKKyUgICAgIHRoZW4gdGhlIGVtcHR5IHN0cmluZywgZWxzZSBhIDxzcGFjZT4uCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iICUgcGFuIFZvbG9keW15ciBNeWtvbGF5b3Z5Y2ggTGlzaXZrYQorCislIEEgc2FsdXRhdGlvbiB2YWxpZCBmb3IgYWxsIHBlcnNvbnMKK25hbWVfZ2VuICAgICI8VTA0NDg+PFUwNDMwPjxVMDQzRD48VTA0M0U+PFUwNDMyPjxVMDQzRD48VTA0Mzg+PFUwNDM5PjxVMDAyOD48VTAwMkQ+PFUwNDNEPjxVMDQzMD48VTAwMjk+IiAlIHNoYW5vdm55aigtbmEpCisKKyUgQSBzYWx1dGF0aW9uIHZhbGlkIGZvciBtYWxlcworbmFtZV9tciAgICAgIjxVMDQzRj48VTA0MzA+PFUwNDNEPiIgJSBwYW5lCisKKyUgQSBzYWx1dGF0aW9uIHZhbGlkIGZvciBhbGwgZmVtYWxlcworbmFtZV9tcyAgICAgIjxVMDQzRj48VTA0MzA+PFUwNDNEPjxVMDQ1Nj4iICUgcGFuaQorCislIEEgc2FsdXRhdGlvbiB2YWxpZCBmb3IgbWFycmllZCBmZW1hbGVzCituYW1lX21ycyAgICAiPFUwNDNGPjxVMDQzMD48VTA0M0Q+PFUwNDU2PiIgJSBwYW5pCisKKyUgQSBzYWx1dGF0aW9uIHZhbGlkIGZvciB1bm1hcnJpZWQgZmVtYWxlcworbmFtZV9taXNzICAgIjxVMDQzRj48VTA0MzA+PFUwNDNEPjxVMDQzRD48VTA0MzA+IiAlIHBhbm5hCisKK0VORCBMQ19OQU1FCisKKworCitMQ19BRERSRVNTCisKKyUgRXhhbXBsZSBvZiBhZGRyZXNzIGluIGEgY2l0eToKKyUKKyUgIFZvbG9keW15cnUgTGlzaXZ0Y2kKKyUgIHZ1bC4gUHVsYHV5YSA5LCBrdi4gMjEKKyUgIG0uIExgdml2CislICA3OTAwNQorJQorJSBNZWFuczoKKyUgIFZvbG9keW15cnUgTGlzaXZ0Y2kgLSB0byB3aGF0IHBlcnNvbgorJSAgdnVsLiBQdWxgdXlhIDksIGt2LiAyMSAtIHN0cmVldCBhbmQgYnVpbGRpbmcsIGFwYXJ0bWVudCBudW1iZXIgKG9yIGZpcm0gbmFtZSkKKyUgIG0uIExgdml2IC0gY2l0eSBuYW1lIChtLiAtIG1pc3RvKQorJSAgNzkwMDUgLSBaSVAgY29kZQorJQorJSBFeGFtcGxlIG9mIGZpcm0gYWRkcmVzcyBpbiBhIGNpdHk6CislCislICBWb2xvZHlteXJ1IExpc2l2dGNpLCBmaXJtYSAiPFUwMDREPjxVMDA2OT48VTAwNzM+PFUwMDc0PjxVMDA2NT48VTAwNzI+PFUwMDY5PjxVMDA3OT48VTAwNjE+IgorJSAgdnVsLiBOYXVrb3ZhIDVhLCAyLXlqIHBvdmVyaCwgay4gMjM5CislICBtLiBMYHZpdgorJSAgNzkwMDUKKyUKKyUgTWVhbnM6CislICBmaXJtYSAiPFUwMDREPjxVMDA2OT48VTAwNzM+PFUwMDc0PjxVMDA2NT48VTAwNzI+PFUwMDY5PjxVMDA3OT48VTAwNjE+IiAtIGZpcm0gbmFtZQorJSAgMi15aiBwb3ZlcmggLSBmbG9vciBudW1iZXIgKGdyb3VuZCBmbG9vciBoYXMgbnVtYmVyIG9uZSkKKyUKKyUgRXhhbXBsZSBvZiBhZGRyZXNzIGluIGEgdG93bjoKKyUKKyUgIFZvbG9keW15cnUgTGlzaXZ0Y2kKKyUgIHZ1bC4gTXlydSwga3YuIDE5CislICBtLiBaZG9sYnVuaXYKKyUgIFJpdm5lbnNga29qaSBvYmxhc3RpCislICAwMDAwMAorJQorJSBNZWFuczoKKyUgIFJpdm5lbnNga29qaSBvYmxhc3RpIC0gaW4gcmVnaW9uIG9mIGNpdHkgUml2bmUgKG9ibGFzdGApCislCislIEV4YW1wbGUgb2YgYWRkcmVzcyBpbiBhIHZpbGxhZ2U6CislCislICBWb2xvZHlteXJ1IExpc2l2dGNpCislICB2dWwuIEhyYW55Y2huYSA3CislICBzLiBCb2hkYXNoaXYKKyUgIFpkb2xidW5pdnNga29obyByYWpvbnUgUml2bmVuc2Brb2ppIG9ibGFzdGkKKyUgIDAwMDAwCislCislIE1lYW5zOgorJSAgdnVsLiBIcmFueWNobmEgNyAtIHN0cmVldCBhbmQgYnVpbGRpbmcKKyUgIHMuIEJvaGRhc2hpdiAtIHZpbGxhZ2UgbmFtZSAocy4gLSBzZWxvKQorJSAgWmRvbGJ1bml2c2Brb2hvIHJham9udSAtIGluIHJlZ2lvbiBvZiB0b3duIFpkb2xidW5pdiAocmFqb24pIAorCisKKyUgbiBQZXJzb24ncyBuYW1lLCBwb3NzaWJseSBjb25zdHJ1Y3RlZCB3aXRoIHRoZSBMQ19OQU1FIDxuYW1lX2ZtdD4ga2V5d29yZC4gCislIGEgQ2FyZSBvZiBwZXJzb24sIG9yIG9yZ2FuaXphdGlvbi4gCislIGYgRmlybSBuYW1lLiAKKyUgZCBEZXBhcnRtZW50IG5hbWUuIAorJSBiIEJ1aWxkaW5nIG5hbWUuIAorJSBzIFN0cmVldCBvciBibG9jayAoZWcuIEphcGFuZXNlKSBuYW1lLiAKKyUgaCBIb3VzZSBudW1iZXIgb3IgZGVzaWduYXRpb24uIAorJSBOIEluc2VydCBhbiA8ZW5kLW9mLWxpbmU+IGlmIHRoZSBwcmV2aW91cyBkZXNjcmlwdG9yIHMgdmFsdWUgd2FzIG5vdCBhbiBlbXB0eQorJSBzdHJpbmc7IG90aGVyd2lzZSBpZ25vcmUuCislIHQgSW5zZXJ0IGEgPHNwYWNlPiBpZiB0aGUgcHJldmlvdXMgZGVzY3JpcHRvciBzIHZhbHVlIHdhcyBub3QgYW4gZW1wdHkgc3RyaW5nOworJSBvdGhlcndpc2UgaWdub3JlLgorJSByIFJvb20gbnVtYmVyLCBkb29yIGRlc2lnbmF0aW9uLiAKKyUgZSBGbG9vciBudW1iZXIuIAorJSBDIENvdW50cnkgZGVzaWduYXRpb24sIGZyb20gdGhlIDxjb3VudHJ5X3Bvc3Q+IGtleXdvcmQuIAorJSBsIExvY2FsIHRvd25zaGlwIHdpdGhpbiB0b3duIG9yIGNpdHkgCislIHogWmlwIG51bWJlciwgcG9zdGFsIGNvZGUuIAorJSBUIFRvd24sIGNpdHkuIAorJSBTIFN0YXRlLCBwcm92aW5jZSwgb3IgcHJlZmVjdHVyZS4gCislIGMgQ291bnRyeSwgYXMgdGFrZW4gZnJvbSBkYXRhIHJlY29yZC4KKyUKKyUgRWFjaCBmaWVsZCBkZXNjcmlwdG9yIG1heSBoYXZlIGFuIDxSPiBhZnRlciB0aGUgPCU+IHRvIHNwZWNpZnkgdGhhdCB0aGUKKyUgaW5mb3JtYXRpb24gaXMgdGFrZW4gZnJvbSBhIFJvbWFuaXplZCB2ZXJzaW9uIHN0cmluZyBvZiB0aGUKKyUgZW50aXR5LgorJQorJSBCVUc6ICVuIGVzY2FwZSBzZXF1ZW5jZSBmcm9tIElTTy9JRUMgMTQ2NTI6MjAwMiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGdsaWJjLTIuMy4yLgorJSBCVUc6ICVsIGVzY2FwZSBzZXF1ZW5jZSBmcm9tIElTTy9JRUMgMTQ2NTI6MjAwMiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGdsaWJjLTIuMy4yLgorJXBvc3RhbF9mbXQgIjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDZFPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2OD48VTAwMjU+PFUwMDc0PjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDcyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Qz48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDUzPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjM+IgorcG9zdGFsX2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjg+PFUwMDI1PjxVMDA3ND48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY1PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA3Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDUzPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjM+IgorCislIEdpdmluZzogCislCislIENhcmUgb2YgcGVyc29uIFBlcnNvbidzIG5hbWUgRmlybSBEZXBhcnRtZW50IAorJSBTdHJlZXQgTnVtYmVyLCBCdWlsZGluZyBGbG9vciBSb29tIAorJSBUb3duIENpdHkgU3RhdGUKKyUgWmlwCislIENvdW50cnkKKworJSBDb3VudHJ5IG5hbWUgaW4gdGhlIGxhbmd1YWdlIG9mIHRoZSBjdXJyZW50IGRvY3VtZW50LgorY291bnRyeV9uYW1lICAiPFUwNDIzPjxVMDQzQT48VTA0NDA+PFUwNDMwPjxVMDQ1Nz48VTA0M0Q+PFUwNDMwPiIgJSBVa3JheWluYQorCislIExhbmd1YWdlIG5hbWUgaW4gdGhlIGxhbmd1YWdlIG9mIHRoZSBjdXJyZW50IGRvY3VtZW50LgorbGFuZ19uYW1lICAgICAiPFUwNDQzPjxVMDQzQT48VTA0NDA+PFUwNDMwPjxVMDQ1Nz48VTA0M0Q+PFUwNDQxPjxVMDQ0Qz48VTA0M0E+PFUwNDMwPiIgJSB1a3JheWluc2BrYSBbbW92YV0KKworJSBBYmJyZXZpYXRpb24gb2YgdGhlIGNvdW50cnksIHNlZSBDRVJULU1BSUxDT0RFUy4gKCVjKQorY291bnRyeV9wb3N0ICAiPFUwMDU1PjxVMDA0MT4iCisKKyUgVHdvLWxldHRlciBhYmJyZXZpYXRpb24gb2YgdGhlIGNvdW50cnksIHNlZSBJU08gMzE2Ni4KK2NvdW50cnlfYWIyICAgIjxVMDA1NT48VTAwNDE+IgorCislIFRocmVlLWxldHRlciBhYmJyZXZpYXRpb24gb2YgdGhlIGNvdW50cnksIHNlZSBJU08gMzE2Ni4KK2NvdW50cnlfYWIzICAgIjxVMDA1NT48VTAwNEI+PFUwMDUyPiIKKworJSBOdW1lcmljIGNvdW50cnkgY29kZSwgc2VlIElTTyAzMTY2LgorY291bnRyeV9udW0gICA4MDQKKworJSBDb2RlIGZvciBjb3VudHJ5IGNhciBudW1iZXIuCitjb3VudHJ5X2NhciAgICI8VTAwNTU+PFUwMDQxPiIKKworJSBJU0JOIGNvZGUsIGZvciBib29rcy4KK2NvdW50cnlfaXNibiAgOTY2CisKKyUgVHdvLWxldHRlciBhYmJyZXZpYXRpb24gb2YgdGhlIGxhbmd1YWdlLCBzZWUgSVNPIDYzOS4KK2xhbmdfYWIgICAgICAgIjxVMDA3NT48VTAwNkI+IgorJSBsYW5nX2FiMiAgICAgICI8VTAwNzU+PFUwMDZCPiIgJSBJU08vSUVDIDE0NjUyOjIwMDIKKworJSBUaHJlZS1sZXR0ZXIgYWJicmV2aWF0aW9uIG9mIHRoZSBsYW5ndWFnZSwgc2VlIElTTyA2MzktMi4KK2xhbmdfdGVybSAgICAgIjxVMDA3NT48VTAwNkI+PFUwMDcyPiIKKyUgbGFuZ19hYjNfdGVybSAiPFUwMDc1PjxVMDA2Qj48VTAwNzI+IiAlIElTTy9JRUMgMTQ2NTI6MjAwMgorCislIFRocmVlLWxldHRlciBhYmJyZXZpYXRpb24gb2YgdGhlIGxhbmd1YWdlIGZvciBsaWJyYXJ5IHVzZSwgc2VlIElTTyA2MzktMi4KK2xhbmdfbGliICAgICAgIjxVMDA3NT48VTAwNkI+PFUwMDcyPiIKKyUgbGFuZ19hYjNfbGliICAiPFUwMDc1PjxVMDA2Qj48VTAwNzI+IiAlIElTTy9JRUMgMTQ2NTI6MjAwMgorCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdXJfUEsgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy91cl9QSwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzljZmI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdXJfUEsKQEAgLTAsMCArMSwyMDMgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJQorJSBVcmR1IExhbmd1YWdlIExvY2FsZSBmb3IgUGFraXN0YW4KKyUgU291cmNlOgorJSBDb250YWN0OiBTaGVoemFkIEFzaGlxIEFsaSwgUGFibG8gU2FyYXR4YWdhCislIEVtYWlsOiBzaGVoemFkYXNoaXFAaG90bWFpbC5jb20sIDxwYWJsb0BtYW5kcmFrZXNvZnQuY29tPgorJSBMYW5ndWFnZTogdXIKKyUgVGVycml0b3J5OiBQSworJSBSZXZpc2lvbjogMC4zCislIERhdGU6IDIwMDAtMDctMTEKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogQ1AxMjU2CislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJVcmR1IExhbmd1YWdlIExvY2FsZSBmb3IgUGFraXN0YW4iCitzb3VyY2UgICAgICIiCithZGRyZXNzICAgICIiCitjb250YWN0ICAgICIiCitlbWFpbCAgICAgICJidWctZ2xpYmMtbG9jYWxlc0BnbnUub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiVXJkdSIKK3RlcnJpdG9yeSAgIlBha2lzdGFuIgorcmV2aXNpb24gICAiMC4zIgorZGF0ZSAgICAgICAiMjAwMC0wNy0xMSIKKyUKK2NhdGVnb3J5ICAidXJfUEs6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAidXJfUEs6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAidXJfUEs6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJ1cl9QSzoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgInVyX1BLOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAidXJfUEs6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAidXJfUEs6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAidXJfUEs6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAidXJfUEs6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJ1cl9QSzoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgInVyX1BLOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAidHJhbnNsaXRfY29tYmluaW5nIjsiIgorCislIHRob3NlIHR3byBsZXR0ZXMgYXJlIG5vdCBpbiBjcDEyNTYuLi4KKworJSBNYWRkYWggYWJvdmUgLT4gQWxlZiB3aXRoIG1hZGRhIGFib3ZlCis8VTA2NTM+ICI8VTA2MjI+IgorJSBGYXJzaSB5ZWggLT4geWVoCis8VTA2Q0M+ICI8VTA2NEE+IgorCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCitjb3B5ICJlbl9ESyIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCislaXQgaXMgbWVhbnQgdG8gYmUgUGFrIFJTLCBjb3VsZCB5b3Ugc2VlIGlmIGl0IGlzIGNvcnJlY3QgcGxlYXNlCitpbnRfY3Vycl9zeW1ib2wgIjxVMDA1MD48VTAwNEI+PFUwMDUyPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgIjxVMDA1Mj48VTAwNzM+IgorbW9uX2RlY2ltYWxfcG9pbnQgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgMzszCitwb3NpdGl2ZV9zaWduICIiCituZWdhdGl2ZV9zaWduICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzIDIKK2ZyYWNfZGlnaXRzIDIKK3BfY3NfcHJlY2VkZXMgMQorcF9zZXBfYnlfc3BhY2UgMQorbl9jc19wcmVjZWRlcyAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgMAorcF9zaWduX3Bvc24gMgorbl9zaWduX3Bvc24gMQorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgIjxVMDAyRT4iCit0aG91c2FuZHNfc2VwICI8VTAwMkM+IgorZ3JvdXBpbmcgMzszCitFTkQgTENfTlVNRVJJQworCislIFNpbmNlIHRoZWlyIGlzIG5vIGFiYnJldmlhdGVkIHZlcnNpb24gb2YgdGhlIGRheXMgaW4gdXJkdSBJIGhhdmUgdXNlZCB0aGUKKyUgZnVsbCBuYW1lcyBvZiB0aGUgZGF5cworJSBVc2luZyBvbmx5IHRoZSBmaXJzdCBsZXR0ZXJzIG9mIHRoZSBkYXkgd291bGQgaGF2ZSBjYXVzZWQgYSBjb25mbGljdCBoZXJlCislIGFzIGJvdGggIkp1bWFpcmF0KFRodXJzKSIgYW5kICJKdW1hKEZyaWRheSkiIGhhdmUgdGhlIHNhbWUgc3RhcnRpbmcgbGV0dGVyCislIEplZW0gPFUwNjJDPgorTENfVElNRQorCithYmRheSAgICI8VTA2Mjc+PFUwNjJBPjxVMDY0OD48VTA2Mjc+PFUwNjMxPiI7LworCSI8VTA2N0U+PFUwNjRBPjxVMDYzMT4iOy8KKwkiPFUwNjQ1PjxVMDY0Nj48VTA2QUY+PFUwNjQ0PiI7LworCSI8VTA2Mjg+PFUwNjJGPjxVMDZCRT4iOy8KKwkiPFUwNjJDPjxVMDY0NT48VTA2Mzk+PFUwNjMxPjxVMDYyNz48VTA2MkE+IjsvCisJIjxVMDYyQz48VTA2NDU+PFUwNjM5PjxVMDY0Nz4iOy8KKwkiPFUwNjQ3PjxVMDY0MT48VTA2MkE+PFUwNjQ3PiIKK2RheQkiPFUwNjI3PjxVMDYyQT48VTA2NDg+PFUwNjI3PjxVMDYzMT4iOy8KKwkiPFUwNjdFPjxVMDY0QT48VTA2MzE+IjsvCisJIjxVMDY0NT48VTA2NDY+PFUwNkFGPjxVMDY0ND4iOy8KKwkiPFUwNjI4PjxVMDYyRj48VTA2QkU+IjsvCisJIjxVMDYyQz48VTA2NDU+PFUwNjM5PjxVMDYzMT48VTA2Mjc+PFUwNjJBPiI7LworCSI8VTA2MkM+PFUwNjQ1PjxVMDYzOT48VTA2NDc+IjsvCisJIjxVMDY0Nz48VTA2NDE+PFUwNjJBPjxVMDY0Nz4iCithYm1vbgkiPFUwNjJDPjxVMDY0Nj48VTA2NDg+PFUwNjMxPjxVMDY0QT4iOy8KKwkiPFUwNjQxPjxVMDYzMT48VTA2NDg+PFUwNjMxPjxVMDY0QT4iOy8KKwkiPFUwNjQ1PjxVMDYyNz48VTA2MzE+PFUwNjg2PiI7LworCSI8VTA2Mjc+PFUwNjdFPjxVMDYzMT48VTA2NEE+PFUwNjQ0PiI7LworCSI8VTA2NDU+PFUwNjUzPjxVMDZDQz4iOy8KKwkiPFUwNjJDPjxVMDY0OD48VTA2NDY+IjsvCisJIjxVMDYyQz48VTA2NDg+PFUwNjQ0PjxVMDYyNz48VTA2NEE+IjsvCisJIjxVMDYyNz48VTA2QUY+PFUwNjMzPjxVMDYyQT4iOy8KKwkiPFUwNjMzPjxVMDYyQT48VTA2NDU+PFUwNjI4PjxVMDYzMT4iOy8KKwkiPFUwNjI3PjxVMDY0Mz48VTA2MkE+PFUwNjQ4PjxVMDYyOD48VTA2MzE+IjsvCisJIjxVMDY0Nj48VTA2NDg+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IjsvCisJIjxVMDYyRj48VTA2MzM+PFUwNjQ1PjxVMDYyOD48VTA2MzE+IgorbW9uCSI8VTA2MkM+PFUwNjQ2PjxVMDY0OD48VTA2MzE+PFUwNjRBPiI7LworCSI8VTA2NDE+PFUwNjMxPjxVMDY0OD48VTA2MzE+PFUwNjRBPiI7LworCSI8VTA2NDU+PFUwNjI3PjxVMDYzMT48VTA2ODY+IjsvCisJIjxVMDYyNz48VTA2N0U+PFUwNjMxPjxVMDY0QT48VTA2NDQ+IjsvCisJIjxVMDY0NT48VTA2NTM+PFUwNkNDPiI7LworCSI8VTA2MkM+PFUwNjQ4PjxVMDY0Nj4iOy8KKwkiPFUwNjJDPjxVMDY0OD48VTA2NDQ+PFUwNjI3PjxVMDY0QT4iOy8KKwkiPFUwNjI3PjxVMDZBRj48VTA2MzM+PFUwNjJBPiI7LworCSI8VTA2MzM+PFUwNjJBPjxVMDY0NT48VTA2Mjg+PFUwNjMxPiI7LworCSI8VTA2Mjc+PFUwNjQzPjxVMDYyQT48VTA2NDg+PFUwNjI4PjxVMDYzMT4iOy8KKwkiPFUwNjQ2PjxVMDY0OD48VTA2NDU+PFUwNjI4PjxVMDYzMT4iOy8KKwkiPFUwNjJGPjxVMDYzMz48VTA2NDU+PFUwNjI4PjxVMDYzMT4iCisKKyUgRGF0ZSBUaW1lIEZvcm1hdAorZF90X2ZtdCAiPFUwNjQ4PjxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDVBPjxVMDAyMD48VTA2MkE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNDI+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorCislIGRhdGUgRm9ybWF0LiBJIGhhdmUgcHV0IHRoaXMgaW4gcmV2ZXJzZSBvcmRlciB0byB0cnkgdG8gZ2V0IHRoZSBkYXRlCislIGluIFItPkwgb3JkZXIKK2RfZm10ICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDU5PiIKKworJSB0aW1lIGZvcm1hdAordF9mbXQgIjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+IgorCislPFUwNjM1PiBzdGFuZHMgZm9yIDxVMDYzNT48VTA2Mjg+PFUwNjJEPgorJTxVMDYzND4gc3RhbmRzIGZvciA8VTA2MzQ+PFUwNjI3PjxVMDY0NT4KK2FtX3BtICI8VTA2MzU+IjsiPFUwNjM0PiIKKworJXRpbWUgZm9ybWF0IGluIDEyIGhvdXIgY2xvY2sKK3RfZm10X2FtcG0gIjxVMDAyNT48VTAwNTA+PFUwMDIwPjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+IgorCislIGRpc3BsYXkgY29sdW1ucyByaWdodCB0byBsZWZ0ID8KK2NhbF9kaXJlY3Rpb24JMworRU5EIExDX1RJTUUKKworTENfTUVTU0FHRVMKKworJSBsb2NhbGUgYmFzZWQgbWVzc2FnZXMKKyUgQ2FuIHdlIHB1dCBpbiB0aGUgdmFsdWVzIGZvciBhIGNhbmNlbCBleHJlc3Npb24gaGVyZT8/IEkgZm91bmQgYSB0ZXJtIHRoYXQKKyUgd291bGQgZGVmaW5lIGNhbmNlbCBhcHByb3ByaWF0ZWx5CislIDxVMDY0Nz4gPSA8VTA2NDc+PFUwNjI3PjxVMDZCQT4gLCB0aGUgbGFzdCB0YWcgaXMgZm9yIG5vb24tZ2h1bm5hIQorJSA8VTA2Mjg+ID0gPFUwNjI4PjxVMDY0ND48VTA2NDM+PFUwNjQ0PgorJSBhZ2FpbiA8VTAwNjY+IGFuZCA8VTAwNkY+IGFyZSBwbGFjZSBob2xkZXJzCislIDxVMDY0Nj4gPSA8VTA2NDY+PFUwNjQ3PjxVMDY0QT48VTA2QkE+Cit5ZXNzdHIJIjxVMDYyOD48VTA2NDQ+PFUwNjQzPjxVMDY0ND4iCitub3N0cgkiPFUwNjQ2PjxVMDY0Nz48VTA2NEE+PFUwNkJBPiIKK3llc2V4cHIJIjxVMDA1RT48VTAwNUI+PFUwMDc5PjxVMDA1OT48VTA2NDc+PFUwNjI4PjxVMDA2Nj48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCitub2V4cHIJIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTA2NDY+PFUwMDZGPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKKworRU5EIExDX01FU1NBR0VTCisKKyVEcmFmdCBGaW5pc2hlZDogMTc6MDAgMDkvMDcvMjAwMAorCitMQ19QQVBFUgoraGVpZ2h0ICAgICAgMjk3Cit3aWR0aCAgICAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19NRUFTVVJFTUVOVAorbWVhc3VyZW1lbnQgMQorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05BTUUKKyUgRklYTUUKK2NvcHkgImVuX0RLIgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworJSBGSVhNRQorcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjg+LworPFUwMDIwPjxVMDAyNT48VTAwNzM+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDdBPjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKKworY291bnRyeV9hYjIgIjxVMDA1MD48VTAwNEI+IgorY291bnRyeV9hYjMgIjxVMDA1MD48VTAwNDE+PFUwMDRCPiIKK2NvdW50cnlfbnVtIDU4NgorRU5EIExDX0FERFJFU1MKKworTENfVEVMRVBIT05FCislIEZJWE1FCitjb3B5ICJlbl9ESyIKK0VORCBMQ19URUxFUEhPTkUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3V6X1VaIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdXpfVVoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAwM2JjNgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3V6X1VaCkBAIC0wLDAgKzEsMzIyIEBACitlc2NhcGVfY2hhciAgLworY29tbWVudF9jaGFyICAlCisKKyUgVXpiZWsgKGxhdGluKSBsYW5ndWFnZSBsb2NhbGUgZm9yIFV6YmVraXN0YW4KKyUgU291cmNlOiBCb2JpciBJc21haWxvdgorJSBDb250YWN0OiBCb2JpciBJc21haWxvdiwgUGFibG8gU2FyYXR4YWdhLCBNYXNocmFiIEt1dmF0b3YKKyUgRW1haWw6IGJvYmlyX2lzQHlhaG9vLmNvbSwgcGFibG9AbWFuZHJha2Vzb2Z0LmNvbSwga21hc2hyYWJAdW5pLWJyZW1lbi5kZQorJSBUZWw6CislIEZheDoKKyUgTGFuZ3VhZ2U6IHV6CislIFRlcnJpdG9yeTogVVoKKyUgUmV2aXNpb246IDAuNQorJSBEYXRlOiAyMDAzLTA2LTI3CislIFVzZXJzOiBnZW5lcmFsCislIENoYXJzZXQ6IFVURi04CislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCislIEhpc3Rvcnk6CislIDIwMDItMDktMDkgTWFzaHJhYiBLdXZhdG92IDxrbWFzaHJhYkB1bmktYnJlbWVuLmRlPgorJSBMQ19USU1FLWRheTogQ2hhbmdlZCB0aGUgZmlyc3QgbGV0dGVyIG9mIGFsbCBkYXkgbmFtZXMgdG8gdXBwZXIgY2FzZS4KKyUgTENfVElNRS1tb246IENoYW5nZWQgdGhlIGZpcnN0IGxldHRlciBvZiBhbGwgbW9udGggbmFtZXMgdG8gdXBwZXIgY2FzZS4KKyUgICAgICAgICAgICAgIEZpeGVkIGEgdHlwby4gU2VwdGVtYmVyIGlzIG5vdCBTZW55YWJyLCBidXQgU2VudHlhYnIuCislIExDX1RJTUUtYWJtb246IENvcnJlY3RlZCAiWWF2IiAoWWFudmFyKSB0byAiWWFuIi4KKyUKKyUgMjAwMy0wMi0yNCBNYXNocmFiIEt1dmF0b3YgPGttYXNocmFiQHVuaS1icmVtZW4uZGU+CislIENoYW5nZWQgY2hhcnNldCB0byBVVEYtOAorJQorJSA/Pz8/Pz8/Pz8/IFBhYmxvIFNhcmF0eGFnYSA8cGFibG9AbWFuZHJha2Vzb2Z0LmNvbT4KKyUgTENfQ1RZUEU6IEFkZGVkIHRyYW5zbGl0ZXJhdGlvbiBmcm9tIGN5cmlsbGljIHRvIGxhdGluLgorJSBMQ19DT0xMQVRFOiBBZGRlZCByZW9kZXJpbmcgZGVmaW5pdGlvbi4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlV6YmVrIChsYXRpbikgbG9jYWxlIGZvciBVemJla2lzdGFuIgorc291cmNlICAgICAiQm9iaXIgSXNtYWlsb3YiCithZGRyZXNzICAgICIiCitjb250YWN0ICAgICJCb2JpciBJc21haWxvdiwgUGFibG8gU2FyYXR4YWdhLCBNYXNocmFiIEt1dmF0b3YiCitlbWFpbCAgICAgICJib2Jpcl9pc0B5YWhvby5jb20sIHBhYmxvQG1hbmRyYWtlc29mdC5jb20sIGttYXNocmFiQHVuaS1icmVtZW4uZGUiCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJVemJlayIKK3RlcnJpdG9yeSAgIlV6YmVraXN0YW4iCityZXZpc2lvbiAgICIwLjUiCitkYXRlICAgICAgICIyMDAzLTA2LTI3IgorJQorY2F0ZWdvcnkgICJ1el9VWjoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJ1el9VWjoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJ1el9VWjoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgInV6X1VaOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAidXpfVVo6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJ1el9VWjoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJ1el9VWjoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJ1el9VWjoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJ1el9VWjoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgInV6X1VaOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAidXpfVVo6MjAwMCI7TENfVEVMRVBIT05FCitjYXRlZ29yeSAgInV6X1VaOjIwMDAiO0xDX01FQVNVUkVNRU5UCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiaTE4biIKKwordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKKworJSBjeXJpbGxpYyAtPiBsYXRpbgorJSBsb3dlciBjYXNlIGxldHRlcnMKKworPFUwNDMwPiAiPFUwMDYxPiIgJSBhPSAtPiBhCis8VTA0MzE+ICI8VTAwNjI+IiAlIGI9IC0+IGIKKzxVMDQzMj4gIjxVMDA3Nj4iICUgdj0gLT4gdgorPFUwNDMzPiAiPFUwMDY3PiIgJSBnPSAtPiBnCis8VTA0MzQ+ICI8VTAwNjQ+IiAlIGQ9IC0+IGQKKzxVMDQzNT4gIjxVMDA2NT4iICUgZT0gLT4gZSAoeWUgYWxzbywgYnV0IGNvbnRleHQgZGVwZW5kZW50KQorPFUwNDUxPiAiPFUwMDc5PjxVMDA2Rj4iICUgaW8gLT4geW8KKzxVMDQzNj4gIjxVMDA2QT4iICUgeiUgLT4gagorPFUwNDM3PiAiPFUwMDdBPiIgJSB6PSAtPiB6Cis8VTA0Mzg+ICI8VTAwNjk+IiAlIGk9IC0+IGkKKzxVMDQzOT4gIjxVMDA3OT4iICUgaj0gLT4geQorPFUwNDNBPiAiPFUwMDZCPiIgJSBrPSAtPiBrCis8VTA0M0I+ICI8VTAwNkM+IiAlIGw9IC0+IGwKKzxVMDQzQz4gIjxVMDA2RD4iICUgbT0gLT4gbQorPFUwNDNEPiAiPFUwMDZFPiIgJSBuPSAtPiBuCis8VTA0M0U+ICI8VTAwNkY+IiAlIG89IC0+IG8KKzxVMDQzRj4gIjxVMDA3MD4iICUgcD0gLT4gcAorPFUwNDQwPiAiPFUwMDcyPiIgJSByPSAtPiByCis8VTA0NDE+ICI8VTAwNzM+IiAlIHM9IC0+IHMKKzxVMDQ0Mj4gIjxVMDA3ND4iICUgdD0gLT4gdAorPFUwNDQzPiAiPFUwMDc1PiIgJSB1PSAtPiB1Cis8VTA0NDQ+ICI8VTAwNjY+IiAlIGY9IC0+IGYKKzxVMDQ0NT4gIjxVMDA3OD4iICUgaD0gLT4geAorPFUwNDQ2PiAiPFUwMDc0PjxVMDA3Mz4iICUgYz0gLT4gdHMKKzxVMDQ0Nz4gIjxVMDA2Mz48VTAwNjg+IiAlIGMlIC0+IGNoCis8VTA0NDg+ICI8VTAwNzM+PFUwMDY4PiIgJSBzJSAtPiBzaAorPFUwNDQ5PiAiPFUwMDczPjxVMDA2OD4iICUgc2hjaGEgLT4gc2gKKzxVMDQ0QT4gIjxVMDAyNz4iICAgICAgICAlIGhhcmQgc2lnbj0gLT4gJyAKKzxVMDQ0Qj4gIjxVMDA2OT4iICAgICAgICAlIHllcnUgLT4gMQorPFUwNDRDPiAiIiAgICAgICAgICAgICAgICUgc29mdCBzaWduIG9taXR0ZWQuIG5vdCBpbiBsYXRpbi11emJlayBhbHBoYWJldC4gc3R1cGlkLCBidXQgaXQgaXMgYSBmYWN0LgorPFUwNDREPiAiPFUwMDY1PiIgICAgICAgICUgamU9IC0+IGUgCis8VTA0NEU+ICI8VTAwNzk+PFUwMDc1PiIgJSBqdSAtPiB5dQorPFUwNDRGPiAiPFUwMDc5PjxVMDA2MT4iICUgamEgLT4geWEKKzxVMDQ1RT4gIjxVMDA2Rj48VTAwMjc+IiAlIHYlIC0+IG8nCis8VTA0OUI+ICI8VTAwNzE+IiAgICAgICAgJSBrLD0gLT4gcQorPFUwNDkzPiAiPFUwMDY3PjxVMDAyNz4iICUgZy09IC0+IGcnCis8VTA0QjM+ICI8VTAwNjg+IiAgICAgICAgJSBoLD0gLT4gaAorCislIHVwcGVyIGNhc2UgbGV0dGVycworCis8VTA0MTA+ICI8VTAwNDE+IiAlIGE9IC0+IGEKKzxVMDQxMT4gIjxVMDA0Mj4iICUgYj0gLT4gYgorPFUwNDEyPiAiPFUwMDU2PiIgJSB2PSAtPiB2Cis8VTA0MTM+ICI8VTAwNDc+IiAlIGc9IC0+IGcKKzxVMDQxND4gIjxVMDA0ND4iICUgZD0gLT4gZAorPFUwNDE1PiAiPFUwMDQ1PiIgJSBlPSAtPiBlICh5ZSBhbHNvLCBidXQgY29udGV4dCBkZXBlbmRlbnQpCis8VTA0MDE+ICI8VTAwNTk+PFUwMDZGPiIgJSBpbyAtPiB5bworPFUwNDE2PiAiPFUwMDRBPiIgJSB6JSAtPiBqCis8VTA0MTc+ICI8VTAwNUE+IiAlIHo9IC0+IHoKKzxVMDQxOD4gIjxVMDA0OT4iICUgaT0gLT4gaQorPFUwNDE5PiAiPFUwMDU5PiIgJSBqPSAtPiB5Cis8VTA0MUE+ICI8VTAwNEI+IiAlIGs9IC0+IGsKKzxVMDQxQj4gIjxVMDA0Qz4iICUgbD0gLT4gbAorPFUwNDFDPiAiPFUwMDREPiIgJSBtPSAtPiBtCis8VTA0MUQ+ICI8VTAwNEU+IiAlIG49IC0+IG4KKzxVMDQxRT4gIjxVMDA0Rj4iICUgbz0gLT4gbworPFUwNDFGPiAiPFUwMDUwPiIgJSBwPSAtPiBwCis8VTA0MjA+ICI8VTAwNTI+IiAlIHI9IC0+IHIKKzxVMDQyMT4gIjxVMDA1Mz4iICUgcz0gLT4gcworPFUwNDIyPiAiPFUwMDU0PiIgJSB0PSAtPiB0Cis8VTA0MjM+ICI8VTAwNTU+IiAlIHU9IC0+IHUKKzxVMDQyND4gIjxVMDA0Nj4iICUgZj0gLT4gZgorPFUwNDI1PiAiPFUwMDU4PiIgJSBoPSAtPiB4Cis8VTA0MjY+ICI8VTAwNTQ+PFUwMDczPiIgJSBjPSAtPiB0cworPFUwNDI3PiAiPFUwMDQzPjxVMDA2OD4iICUgYyUgLT4gY2gKKzxVMDQyOD4gIjxVMDA1Mz48VTAwNjg+IiAlIHMlIC0+IHNoCis8VTA0Mjk+ICI8VTAwNTM+PFUwMDY4PiIgJSBzaGNoYSAtPiBzaAorPFUwNDJBPiAiPFUwMDI3PiIgICAgICAgICUgaGFyZCBzaWduPSAtPiAnCis8VTA0MkI+ICI8VTAwNDk+IiAgICAgICAgJSB5ZXJ1IC0+IGkKKzxVMDQyQz4gIiIgICAgICAgICAgICAgICAlIHNvZnQgc2lnbiBvbWl0dGVkLiBub3QgaW4gbGF0aW4tdXpiZWsgYWxwaGFiZXQuIHN0dXBpZCwgYnV0IGl0IGlzIGEgZmFjdC4KKzxVMDQyRD4gIjxVMDA0NT4iICAgICAgICAlIGplIC0+IGUKKzxVMDQyRT4gIjxVMDA1OT48VTAwNzU+IiAlIGp1IC0+IHl1Cis8VTA0MkY+ICI8VTAwNTk+PFUwMDYxPiIgJSBqYSAtPiB5YQorPFUwNDBFPiAiPFUwMDRGPjxVMDAyNz4iICUgdiUgLT4gbycKKzxVMDQ5QT4gIjxVMDA1MT4iICAgICAgICAlIGssPSAtPiBxCis8VTA0OTI+ICI8VTAwNDc+PFUwMDI3PiIgJSBnLT0gLT4gZycKKzxVMDRCMj4gIjxVMDA0OD4iICAgICAgICAlIGgsPSAtPiBoCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCitjb3B5ICJpc28xNDY1MV90MSIKKworJSUgYSBiIGMgZCBlIGYgZyBnJyBoIGkgaiBrIGwgbSBuIG8gbycgcCBxIHIgcyB0IHUgdiB4IHkgegorJSUgY3lyOiBhPSwgYj0sIHY9LCBnPSwgZD0sIGU9LCBpbywgeiUsIHo9LCBpPSwgaj0sIGs9LCBsPSwgbT0sIG49LCBvPSwKKyUlCXA9LCByPSwgcz0sIHQ9LCB1PSwgZj0sIGg9LCBjPSwgYyUsIHMlLCBzYywgPScgLCB5PSwgamUsIGp1LCBqYSwKKyUlCXYlLCBrLD0sIGctPSwgaCw9Citjb2xsYXRpbmctc3ltYm9sICA8Zy0nLXV6PgorY29sbGF0aW5nLWVsZW1lbnQgPGctJz4gZnJvbSAiPFUwMDY3PjxVMDAyNz4iCitjb2xsYXRpbmctZWxlbWVudCA8Ry0nPiBmcm9tICI8VTAwNDc+PFUwMDI3PiIKK2NvbGxhdGluZy1zeW1ib2wgIDxvLSctdXo+Citjb2xsYXRpbmctZWxlbWVudCA8by0nPiBmcm9tICI8VTAwNkY+PFUwMDI3PiIKK2NvbGxhdGluZy1lbGVtZW50IDxPLSc+IGZyb20gIjxVMDA0Rj48VTAwMjc+IgorCitjb2xsYXRpbmctc3ltYm9sIDxrLD0+Citjb2xsYXRpbmctc3ltYm9sIDxnLT0+Citjb2xsYXRpbmctc3ltYm9sIDxoLD0+CisKK3Jlb3JkZXItYWZ0ZXIgPGc+Cis8Zy0nLXV6PgorcmVvcmRlci1hZnRlciA8bz4KKzxvLSctdXo+CityZW9yZGVyLWFmdGVyIDxDWVItWUE+Cis8Q1lSLU9VQlJFPgorPGssPT4KKzxnLT0+Cis8aCw9PgorCityZW9yZGVyLWFmdGVyIDxVMDA2Nz4KKzxnLSc+CTxnLSctdXo+OzxQQ0w+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNDc+Cis8Ry0nPgk8Zy0nLXV6Pjs8UENMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNkY+Cis8by0nPgk8by0nLXV6Pjs8UENMPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDRGPgorPE8tJz4JPG8tJy11ej47PFBDTD47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwNDRGPgorPFUwNDVFPiA8Q1lSLU9VQlJFPjs8UENMPjs8TUlOPjtJR05PUkUKKzxVMDQ5Qj4gPGssPT47PFBDTD47PE1JTj47SUdOT1JFCis8VTA0OTM+IDxnLT0+OzxQQ0w+OzxNSU4+O0lHTk9SRQorPFUwNEIzPiA8aCw9Pjs8UENMPjs8TUlOPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTA0MkY+Cis8VTA0MEU+IDxDWVItT1VCUkU+OzxQQ0w+OzxDQVA+O0lHTk9SRQorPFUwNDlBPiA8ayw9Pjs8UENMPjs8Q0FQPjtJR05PUkUKKzxVMDQ5Mj4gPGctPT47PFBDTD47PENBUD47SUdOT1JFCis8VTA0QjI+IDxoLD0+OzxQQ0w+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWVuZAorCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgICAgIjxVMDA1NT48VTAwNUE+PFUwMDUzPjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgICAiPFUwMDczPjxVMDA2Rj48VTAwMjc+PFUwMDZEPiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgIDIKK2ZyYWNfZGlnaXRzICAgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgIDAKK25fY3NfcHJlY2VkZXMgICAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAgIDAKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgIDEKK25fc2lnbl9wb3NuICAgICAgICAgICAgIDEKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitkZWNpbWFsX3BvaW50ICAgICAgICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgICI8VTAwMkM+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAgMzszCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCithYmRheSAgICAgICAiPFUwMDU5PjxVMDA2MT48VTAwNkI+IjsiPFUwMDQ0PjxVMDA3NT4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDY1PiI7IjxVMDA0Mz48VTAwNjg+PFUwMDZGPiI7LworICAgICAgICAgICAgIjxVMDA1MD48VTAwNjE+PFUwMDc5PiI7IjxVMDA0QT48VTAwNzU+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2OD48VTAwNjE+IgorZGF5ICAgICAgICAgIjxVMDA1OT48VTAwNjE+PFUwMDZCPjxVMDA3Mz48VTAwNjg+PFUwMDYxPjxVMDA2RT48VTAwNjI+PFUwMDYxPiI7LworICAgICAgICAgICAgIjxVMDA0ND48VTAwNzU+PFUwMDczPjxVMDA2OD48VTAwNjE+PFUwMDZFPjxVMDA2Mj48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2NT48VTAwNzM+PFUwMDY4PjxVMDA2MT48VTAwNkU+PFUwMDYyPjxVMDA2MT4iOy8KKyAgICAgICAgICAgICI8VTAwNDM+PFUwMDY4PjxVMDA2Rj48VTAwNzI+PFUwMDczPjxVMDA2OD48VTAwNjE+PFUwMDZFPjxVMDA2Mj48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDUwPjxVMDA2MT48VTAwNzk+PFUwMDczPjxVMDA2OD48VTAwNjE+PFUwMDZFPjxVMDA2Mj48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDA3NT48VTAwNkQ+PFUwMDYxPiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjg+PFUwMDYxPjxVMDA2RT48VTAwNjI+PFUwMDYxPiIKK2FibW9uICAgICAgICI8VTAwNTk+PFUwMDYxPjxVMDA2RT4iOyI8VTAwNDY+PFUwMDY1PjxVMDA3Nj4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNDE+PFUwMDcwPjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDYxPjxVMDA3OT4iOyI8VTAwNDk+PFUwMDc5PjxVMDA2RT4iOy8KKyAgICAgICAgICAgICI8VTAwNDk+PFUwMDc5PjxVMDA2Qz4iOyI8VTAwNDE+PFUwMDc2PjxVMDA2Nz4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA2RT4iOyI8VTAwNEY+PFUwMDZCPjxVMDA3ND4iOy8KKyAgICAgICAgICAgICI8VTAwNEU+PFUwMDZGPjxVMDA3OT4iOyI8VTAwNDQ+PFUwMDY1PjxVMDA2Qj4iCittb24gICAgICAgICAiPFUwMDU5PjxVMDA2MT48VTAwNkU+PFUwMDc2PjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAgICAgICAiPFUwMDQ2PjxVMDA2NT48VTAwNzY+PFUwMDcyPjxVMDA2MT48VTAwNkM+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzI+PFUwMDc0PiI7LworICAgICAgICAgICAgIjxVMDA0MT48VTAwNzA+PFUwMDcyPjxVMDA2NT48VTAwNkM+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICAgICAiPFUwMDQ5PjxVMDA3OT48VTAwNzU+PFUwMDZFPiI7LworICAgICAgICAgICAgIjxVMDA0OT48VTAwNzk+PFUwMDc1PjxVMDA2Qz4iOy8KKyAgICAgICAgICAgICI8VTAwNDE+PFUwMDc2PjxVMDA2Nz48VTAwNzU+PFUwMDczPjxVMDA3ND4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDY1PjxVMDA2RT48VTAwNzQ+PFUwMDc5PjxVMDA2MT48VTAwNjI+PFUwMDcyPiI7LworICAgICAgICAgICAgIjxVMDA0Rj48VTAwNkI+PFUwMDc0PjxVMDA3OT48VTAwNjE+PFUwMDYyPjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNEU+PFUwMDZGPjxVMDA3OT48VTAwNjE+PFUwMDYyPjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTAwNDQ+PFUwMDY1PjxVMDA2Qj48VTAwNjE+PFUwMDYyPjxVMDA3Mj4iCitkX3RfZm10ICAiPFUwMDI1PjxVMDA1ND48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNDI+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwNzk+PFUwMDY5PjxVMDA2Qz48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNDE+IgorZF9mbXQgICAgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNzk+IgordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNTQ+IgorYW1fcG0gICAgICAgIiI7IiIKK3RfZm10X2FtcG0gICIiCitkYXRlX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDA3OT48VTAwNjk+PFUwMDZDPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA0MT4iCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworJSBOT1RFOiBObyBpcyAieW8ncSI7IHRoYXQgY29uZmxpY3RzIHdpdGggRW5nbGlzaCAieWVzIi4uLiBzbyAiam8ncSIgaXMgdXNlZC4KK3llc3N0ciAgIjxVMDA0OD48VTAwNjE+Igorbm9zdHIgICAiPFUwMDU5PjxVMDA2Rj48VTAwMjc+PFUwMDcxPiIKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDU5PjxVMDA3OT48VTAwNDg+PFUwMDY4PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwMDRBPjxVMDA2QT48VTAwNEU+PFUwMDZFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19QQVBFUgoraGVpZ2h0ICAgMjk3Cit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKKyUgRklYTUU6IHRvZG8KK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDMyPjxVMDAzNz4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNkQ+IgorbmFtZV9nZW4gICAgIkh1cm1hdGxpIgorbmFtZV9tciAgICAgIkphbm9iIgorbmFtZV9tcnMgICAgIlhvbmltIgorJSBGSVhNRTogd2hhdCBpcyBtaXNzID8KK25hbWVfbWlzcyAgICIiCislIEZJWE1FOiB3aGF0IGlzIG1zID8KK25hbWVfbXMgICAgICIiCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCislIGZvcm1hdDogJUMlTiVTJU4lVCVOJXMgJWglTiVmJU4lYiVOJWQlTiVlICVyJU4lYSVOJXoKKyUgYnV0ICVTIHNlZW1zIG5vdCByZWNvZ25pemVkIHlldCA/IHNvICVDJU4lVCVOJXMgJWglTiVmJU4lYiVOJWQlTiVlICVyJU4lYSVOJXoKKyUgaXMgdXNlZC4KK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNDM+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDU0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz48VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1Pi8KKzxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3QT4iCitjb3VudHJ5X25hbWUgIjxVMDA0Rj48VTAwMjc+PFUwMDdBPjxVMDA2Mj48VTAwNjU+PFUwMDZCPjxVMDA2OT48VTAwNzM+PFUwMDc0PjxVMDA2MT48VTAwNkU+IgorY291bnRyeV9wb3N0ICJVWiIgJSA/PworY291bnRyeV9hYjIgICJVWiIKK2NvdW50cnlfYWIzICAiVVpCIgorY291bnRyeV9udW0gIDg2MAorJSBGSVhNRTogSVNCTiBudW1iZXI/CislY291bnRyeV9pc2JuICIiCitjb3VudHJ5X2NhciAiVVoiCitsYW5nX25hbWUgICAiPFUwMDRGPjxVMDAyNz48VTAwN0E+PFUwMDYyPjxVMDA2NT48VTAwNkI+IgorbGFuZ19hYiAgICAgInV6IgorbGFuZ190ZXJtICAgInV6YiIKK2xhbmdfbGliICAgICJ1emIiCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdXpfVVpAY3lyaWxsaWMgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy91el9VWkBjeXJpbGxpYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzNmNzUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdXpfVVpAY3lyaWxsaWMKQEAgLTAsMCArMSwzMjMgQEAKK2VzY2FwZV9jaGFyICAvCitjb21tZW50X2NoYXIgICUKKworJSBVemJlayBsYW5ndWFnZSAoY3lyaWxsaWMpIGxvY2FsZSBmb3IgVXpiZWtpc3RhbgorJSBTb3VyY2U6IE1hc2hyYWIgS3V2YXRvdgorJSBDb250YWN0OiBNYXNocmFiIEt1dmF0b3YsIFBhYmxvIFNhcmF0eGFnYQorJSBFbWFpbDoga21hc2hyYWJAdW5pLWJyZW1lbi5kZSwgcGFibG9AbWFuZHJha2Vzb2Z0LmNvbQorJSBUZWw6CislIEZheDoKKyUgTGFuZ3VhZ2U6IHV6CislIFRlcnJpdG9yeTogVVoKKyUgUmV2aXNpb246IDAuMQorJSBEYXRlOiAyMDAzLTA1LTMwCislIFVzZXJzOiBnZW5lcmFsCislIENoYXJzZXQ6IFVURi04CislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCislIEhpc3Rvcnk6CislCislIDIwMDMtMDUtMzAgTWFzaHJhYiBLdXZhdG92IDxrbWFzaHJhYkB1bmktYnJlbWVuLmRlPgorJSBDcmVhdGVkLgorJQorJSAyMDAzLTA2LTMwIE1hc2hyYWIgS3V2YXRvdiA8a21hc2hyYWJAdW5pLWJyZW1lbi5kZT4KKyUgTENfQ1RZUEU6IEFkZGVkIHRyYW5zbGl0ZXJhdGlvbiBmcm9tIGN5cmlsbGljIHRvIGxhdGluLgorJSBMQ19DT0xMQVRFOiBBZGRlZCByZW9kZXJpbmcgZGVmaW5pdGlvbi4KKyUgQWxsIGNyZWRpdHMgdG8gUGFibG8uIDotKQorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiVXpiZWsgKGN5cmlsbGljKSBsb2NhbGUgZm9yIFV6YmVraXN0YW4iCitzb3VyY2UgICAgICJNYXNocmFiIEt1dmF0b3YiCithZGRyZXNzICAgICIiCitjb250YWN0ICAgICJNYXNocmFiIEt1dmF0b3YsIFBhYmxvIFNhcmF0eGFnYSIKK2VtYWlsICAgICAgImttYXNocmFiQHVuaS1icmVtZW4uZGUsIHBhYmxvQG1hbmRyYWtlc29mdC5jb20iCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJVemJlayIKK3RlcnJpdG9yeSAgIlV6YmVraXN0YW4iCityZXZpc2lvbiAgICIwLjEiCitkYXRlICAgICAgICIyMDAzLTA1LTMwIgorJQorY2F0ZWdvcnkgICJ1el9VWjoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJ1el9VWjoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJ1el9VWjoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgInV6X1VaOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAidXpfVVo6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJ1el9VWjoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJ1el9VWjoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJ1el9VWjoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJ1el9VWjoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgInV6X1VaOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAidXpfVVo6MjAwMCI7TENfVEVMRVBIT05FCitjYXRlZ29yeSAgInV6X1VaOjIwMDAiO0xDX01FQVNVUkVNRU5UCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiaTE4biIKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCisKKyUgY3lyaWxsaWMgLT4gbGF0aW4KKyUgbG93ZXIgY2FzZSBsZXR0ZXJzCisKKzxVMDQzMD4gIjxVMDA2MT4iICUgYT0gLT4gYQorPFUwNDMxPiAiPFUwMDYyPiIgJSBiPSAtPiBiCis8VTA0MzI+ICI8VTAwNzY+IiAlIHY9IC0+IHYKKzxVMDQzMz4gIjxVMDA2Nz4iICUgZz0gLT4gZworPFUwNDM0PiAiPFUwMDY0PiIgJSBkPSAtPiBkCis8VTA0MzU+ICI8VTAwNjU+IiAlIGU9IC0+IGUgKHllIGFsc28sIGJ1dCBjb250ZXh0IGRlcGVuZGVudCkKKzxVMDQ1MT4gIjxVMDA3OT48VTAwNkY+IiAlIGlvIC0+IHlvCis8VTA0MzY+ICI8VTAwNkE+IiAlIHolIC0+IGoKKzxVMDQzNz4gIjxVMDA3QT4iICUgej0gLT4gegorPFUwNDM4PiAiPFUwMDY5PiIgJSBpPSAtPiBpCis8VTA0Mzk+ICI8VTAwNzk+IiAlIGo9IC0+IHkKKzxVMDQzQT4gIjxVMDA2Qj4iICUgaz0gLT4gaworPFUwNDNCPiAiPFUwMDZDPiIgJSBsPSAtPiBsCis8VTA0M0M+ICI8VTAwNkQ+IiAlIG09IC0+IG0KKzxVMDQzRD4gIjxVMDA2RT4iICUgbj0gLT4gbgorPFUwNDNFPiAiPFUwMDZGPiIgJSBvPSAtPiBvCis8VTA0M0Y+ICI8VTAwNzA+IiAlIHA9IC0+IHAKKzxVMDQ0MD4gIjxVMDA3Mj4iICUgcj0gLT4gcgorPFUwNDQxPiAiPFUwMDczPiIgJSBzPSAtPiBzCis8VTA0NDI+ICI8VTAwNzQ+IiAlIHQ9IC0+IHQKKzxVMDQ0Mz4gIjxVMDA3NT4iICUgdT0gLT4gdQorPFUwNDQ0PiAiPFUwMDY2PiIgJSBmPSAtPiBmCis8VTA0NDU+ICI8VTAwNzg+IiAlIGg9IC0+IHgKKzxVMDQ0Nj4gIjxVMDA3ND48VTAwNzM+IiAlIGM9IC0+IHRzCis8VTA0NDc+ICI8VTAwNjM+PFUwMDY4PiIgJSBjJSAtPiBjaAorPFUwNDQ4PiAiPFUwMDczPjxVMDA2OD4iICUgcyUgLT4gc2gKKzxVMDQ0OT4gIjxVMDA3Mz48VTAwNjg+IiAlIHNoY2hhIC0+IHNoCis8VTA0NEE+ICI8VTAwMjc+IiAgICAgICAgJSBoYXJkIHNpZ249IC0+ICcgCis8VTA0NEI+ICI8VTAwNjk+IiAgICAgICAgJSB5ZXJ1IC0+IDEKKzxVMDQ0Qz4gIiIgICAgICAgICAgICAgICAlIHNvZnQgc2lnbiBvbWl0dGVkLiBub3QgaW4gbGF0aW4tdXpiZWsgYWxwaGFiZXQuIHN0dXBpZCwgYnV0IGl0IGlzIGEgZmFjdC4KKzxVMDQ0RD4gIjxVMDA2NT4iICAgICAgICAlIGplPSAtPiBlIAorPFUwNDRFPiAiPFUwMDc5PjxVMDA3NT4iICUganUgLT4geXUKKzxVMDQ0Rj4gIjxVMDA3OT48VTAwNjE+IiAlIGphIC0+IHlhCis8VTA0NUU+ICI8VTAwNkY+PFUwMDI3PiIgJSB2JSAtPiBvJworPFUwNDlCPiAiPFUwMDcxPiIgICAgICAgICUgayw9IC0+IHEKKzxVMDQ5Mz4gIjxVMDA2Nz48VTAwMjc+IiAlIGctPSAtPiBnJworPFUwNEIzPiAiPFUwMDY4PiIgICAgICAgICUgaCw9IC0+IGgKKworJSB1cHBlciBjYXNlIGxldHRlcnMKKworPFUwNDEwPiAiPFUwMDQxPiIgJSBhPSAtPiBhCis8VTA0MTE+ICI8VTAwNDI+IiAlIGI9IC0+IGIKKzxVMDQxMj4gIjxVMDA1Nj4iICUgdj0gLT4gdgorPFUwNDEzPiAiPFUwMDQ3PiIgJSBnPSAtPiBnCis8VTA0MTQ+ICI8VTAwNDQ+IiAlIGQ9IC0+IGQKKzxVMDQxNT4gIjxVMDA0NT4iICUgZT0gLT4gZSAoeWUgYWxzbywgYnV0IGNvbnRleHQgZGVwZW5kZW50KQorPFUwNDAxPiAiPFUwMDU5PjxVMDA2Rj4iICUgaW8gLT4geW8KKzxVMDQxNj4gIjxVMDA0QT4iICUgeiUgLT4gagorPFUwNDE3PiAiPFUwMDVBPiIgJSB6PSAtPiB6Cis8VTA0MTg+ICI8VTAwNDk+IiAlIGk9IC0+IGkKKzxVMDQxOT4gIjxVMDA1OT4iICUgaj0gLT4geQorPFUwNDFBPiAiPFUwMDRCPiIgJSBrPSAtPiBrCis8VTA0MUI+ICI8VTAwNEM+IiAlIGw9IC0+IGwKKzxVMDQxQz4gIjxVMDA0RD4iICUgbT0gLT4gbQorPFUwNDFEPiAiPFUwMDRFPiIgJSBuPSAtPiBuCis8VTA0MUU+ICI8VTAwNEY+IiAlIG89IC0+IG8KKzxVMDQxRj4gIjxVMDA1MD4iICUgcD0gLT4gcAorPFUwNDIwPiAiPFUwMDUyPiIgJSByPSAtPiByCis8VTA0MjE+ICI8VTAwNTM+IiAlIHM9IC0+IHMKKzxVMDQyMj4gIjxVMDA1ND4iICUgdD0gLT4gdAorPFUwNDIzPiAiPFUwMDU1PiIgJSB1PSAtPiB1Cis8VTA0MjQ+ICI8VTAwNDY+IiAlIGY9IC0+IGYKKzxVMDQyNT4gIjxVMDA1OD4iICUgaD0gLT4geAorPFUwNDI2PiAiPFUwMDU0PjxVMDA3Mz4iICUgYz0gLT4gdHMKKzxVMDQyNz4gIjxVMDA0Mz48VTAwNjg+IiAlIGMlIC0+IGNoCis8VTA0Mjg+ICI8VTAwNTM+PFUwMDY4PiIgJSBzJSAtPiBzaAorPFUwNDI5PiAiPFUwMDUzPjxVMDA2OD4iICUgc2hjaGEgLT4gc2gKKzxVMDQyQT4gIjxVMDAyNz4iICAgICAgICAlIGhhcmQgc2lnbj0gLT4gJworPFUwNDJCPiAiPFUwMDQ5PiIgICAgICAgICUgeWVydSAtPiBpCis8VTA0MkM+ICIiICAgICAgICAgICAgICAgJSBzb2Z0IHNpZ24gb21pdHRlZC4gbm90IGluIGxhdGluLXV6YmVrIGFscGhhYmV0LiBzdHVwaWQsIGJ1dCBpdCBpcyBhIGZhY3QuCis8VTA0MkQ+ICI8VTAwNDU+IiAgICAgICAgJSBqZSAtPiBlCis8VTA0MkU+ICI8VTAwNTk+PFUwMDc1PiIgJSBqdSAtPiB5dQorPFUwNDJGPiAiPFUwMDU5PjxVMDA2MT4iICUgamEgLT4geWEKKzxVMDQwRT4gIjxVMDA0Rj48VTAwMjc+IiAlIHYlIC0+IG8nCis8VTA0OUE+ICI8VTAwNTE+IiAgICAgICAgJSBrLD0gLT4gcQorPFUwNDkyPiAiPFUwMDQ3PjxVMDAyNz4iICUgZy09IC0+IGcnCis8VTA0QjI+ICI8VTAwNDg+IiAgICAgICAgJSBoLD0gLT4gaAordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDEiCislJSBhIGIgYyBkIGUgZiBnIGcnIGggaSBqIGsgbCBtIG4gbyBvJyBwIHEgciBzIHQgdSB2IHggeSB6CislJSBjeXI6IGE9LCBiPSwgdj0sIGc9LCBkPSwgZT0sIGlvLCB6JSwgej0sIGk9LCBqPSwgaz0sIGw9LCBtPSwgbj0sIG89LAorJSUJcD0sIHI9LCBzPSwgdD0sIHU9LCBmPSwgaD0sIGM9LCBjJSwgcyUsIHNjLCA9JyAsIHk9LCBqZSwganUsIGphLAorJSUJdiUsIGssPSwgZy09LCBoLD0KK2NvbGxhdGluZy1zeW1ib2wgIDxnLSctdXo+Citjb2xsYXRpbmctZWxlbWVudCA8Zy0nPiBmcm9tICI8VTAwNjc+PFUwMDI3PiIKK2NvbGxhdGluZy1lbGVtZW50IDxHLSc+IGZyb20gIjxVMDA0Nz48VTAwMjc+IgorY29sbGF0aW5nLXN5bWJvbCAgPG8tJy11ej4KK2NvbGxhdGluZy1lbGVtZW50IDxvLSc+IGZyb20gIjxVMDA2Rj48VTAwMjc+IgorY29sbGF0aW5nLWVsZW1lbnQgPE8tJz4gZnJvbSAiPFUwMDRGPjxVMDAyNz4iCisKK2NvbGxhdGluZy1zeW1ib2wgPGssPT4KK2NvbGxhdGluZy1zeW1ib2wgPGctPT4KK2NvbGxhdGluZy1zeW1ib2wgPGgsPT4KKworcmVvcmRlci1hZnRlciA8Zz4KKzxnLSctdXo+CityZW9yZGVyLWFmdGVyIDxvPgorPG8tJy11ej4KK3Jlb3JkZXItYWZ0ZXIgPENZUi1ZQT4KKzxDWVItT1VCUkU+Cis8ayw9PgorPGctPT4KKzxoLD0+CisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDY3PgorPGctJz4JPGctJy11ej47PFBDTD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0Nz4KKzxHLSc+CTxnLSctdXo+OzxQQ0w+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA2Rj4KKzxvLSc+CTxvLSctdXo+OzxQQ0w+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNEY+Cis8Ty0nPgk8by0nLXV6Pjs8UENMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTA0NEY+Cis8VTA0NUU+IDxDWVItT1VCUkU+OzxQQ0w+OzxNSU4+O0lHTk9SRQorPFUwNDlCPiA8ayw9Pjs8UENMPjs8TUlOPjtJR05PUkUKKzxVMDQ5Mz4gPGctPT47PFBDTD47PE1JTj47SUdOT1JFCis8VTA0QjM+IDxoLD0+OzxQQ0w+OzxNSU4+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDQyRj4KKzxVMDQwRT4gPENZUi1PVUJSRT47PFBDTD47PENBUD47SUdOT1JFCis8VTA0OUE+IDxrLD0+OzxQQ0w+OzxDQVA+O0lHTk9SRQorPFUwNDkyPiA8Zy09Pjs8UENMPjs8Q0FQPjtJR05PUkUKKzxVMDRCMj4gPGgsPT47PFBDTD47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItZW5kCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAiPFUwMDU1PjxVMDA1QT48VTAwNTM+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICI8VTA0NDE+PFUwNDVFPjxVMDQzQz4iCittb25fZGVjaW1hbF9wb2ludCAgICAgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgICAwCituX2NzX3ByZWNlZGVzICAgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgICAwCitwX3NpZ25fcG9zbiAgICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgICAxCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludCAgICAgICAgICAgIjxVMDAyRT4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICAiPFUwMDJDPiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgIDM7MworRU5EIExDX05VTUVSSUMKKworTENfVElNRQorYWJkYXkgICAiPFUwNDJGPjxVMDQzQT48VTA0NDg+IjsvCisgICAgICAgICI8VTA0MTQ+PFUwNDQzPjxVMDQ0OD4iOy8KKyAgICAgICAgIjxVMDQyMT48VTA0MzU+PFUwNDQ4PiI7LworICAgICAgICAiPFUwNDI3PjxVMDQzRT48VTA0NDA+IjsvCisgICAgICAgICI8VTA0MUY+PFUwNDMwPjxVMDQzOT4iOy8KKyAgICAgICAgIjxVMDQxNj48VTA0NDM+PFUwNDNDPiI7LworICAgICAgICAiPFUwNDI4PjxVMDQzMD48VTA0M0Q+IgorZGF5ICAgICAiPFUwNDJGPjxVMDQzQT48VTA0NDg+PFUwNDMwPjxVMDQzRD48VTA0MzE+PFUwNDMwPiI7LworICAgICAgICAiPFUwNDE0PjxVMDQ0Mz48VTA0NDg+PFUwNDMwPjxVMDQzRD48VTA0MzE+PFUwNDMwPiI7LworICAgICAgICAiPFUwNDIxPjxVMDQzNT48VTA0NDg+PFUwNDMwPjxVMDQzRD48VTA0MzE+PFUwNDMwPiI7LworICAgICAgICAiPFUwNDI3PjxVMDQzRT48VTA0NDA+PFUwNDQ4PjxVMDQzMD48VTA0M0Q+PFUwNDMxPjxVMDQzMD4iOy8KKyAgICAgICAgIjxVMDQxRj48VTA0MzA+PFUwNDM5PjxVMDQ0OD48VTA0MzA+PFUwNDNEPjxVMDQzMT48VTA0MzA+IjsvCisgICAgICAgICI8VTA0MTY+PFUwNDQzPjxVMDQzQz48VTA0MzA+IjsvCisgICAgICAgICI8VTA0Mjg+PFUwNDMwPjxVMDQzRD48VTA0MzE+PFUwNDMwPiIKK2FibW9uICAgIjxVMDQyRj48VTA0M0Q+PFUwNDMyPiI7LworICAgICAgICAiPFUwNDI0PjxVMDQzNT48VTA0MzI+IjsvCisgICAgICAgICI8VTA0MUM+PFUwNDMwPjxVMDQ0MD4iOy8KKyAgICAgICAgIjxVMDQxMD48VTA0M0Y+PFUwNDQwPiI7LworICAgICAgICAiPFUwNDFDPjxVMDQzMD48VTA0Mzk+IjsvCisgICAgICAgICI8VTA0MTg+PFUwNDRFPjxVMDQzRD4iOy8KKyAgICAgICAgIjxVMDQxOD48VTA0NEU+PFUwNDNCPiI7LworICAgICAgICAiPFUwNDEwPjxVMDQzMj48VTA0MzM+IjsvCisgICAgICAgICI8VTA0MjE+PFUwNDM1PjxVMDQzRD4iOy8KKyAgICAgICAgIjxVMDQxRT48VTA0M0E+PFUwNDQyPiI7LworICAgICAgICAiPFUwNDFEPjxVMDQzRT48VTA0NEY+IjsvCisgICAgICAgICI8VTA0MTQ+PFUwNDM1PjxVMDQzQT4iCittb24gICAgICI8VTA0MkY+PFUwNDNEPjxVMDQzMj48VTA0MzA+PFUwNDQwPjxVMDQ0Qz4iOy8KKyAgICAgICAgIjxVMDQyND48VTA0MzU+PFUwNDMyPjxVMDQ0MD48VTA0MzA+PFUwNDNCPjxVMDQ0Qz4iOy8KKyAgICAgICAgIjxVMDQxQz48VTA0MzA+PFUwNDQwPjxVMDQ0Mj4iOy8KKyAgICAgICAgIjxVMDQxMD48VTA0M0Y+PFUwNDQwPjxVMDQzNT48VTA0M0I+PFUwNDRDPiI7LworICAgICAgICAiPFUwNDFDPjxVMDQzMD48VTA0Mzk+IjsvCisgICAgICAgICI8VTA0MTg+PFUwNDRFPjxVMDQzRD48VTA0NEM+IjsvCisgICAgICAgICI8VTA0MTg+PFUwNDRFPjxVMDQzQj48VTA0NEM+IjsvCisgICAgICAgICI8VTA0MTA+PFUwNDMyPjxVMDQzMz48VTA0NDM+PFUwNDQxPjxVMDQ0Mj4iOy8KKyAgICAgICAgIjxVMDQyMT48VTA0MzU+PFUwNDNEPjxVMDQ0Mj48VTA0NEY+PFUwNDMxPjxVMDQ0MD48VTA0NEM+IjsvCisgICAgICAgICI8VTA0MUU+PFUwNDNBPjxVMDQ0Mj48VTA0NEY+PFUwNDMxPjxVMDQ0MD48VTA0NEM+IjsvCisgICAgICAgICI8VTA0MUQ+PFUwNDNFPjxVMDQ0Rj48VTA0MzE+PFUwNDQwPjxVMDQ0Qz4iOy8KKyAgICAgICAgIjxVMDQxND48VTA0MzU+PFUwNDNBPjxVMDQzMD48VTA0MzE+PFUwNDQwPjxVMDQ0Qz4iCitkX3RfZm10ICI8VTAwMjU+PFUwMDU0PjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDQzOT48VTA0Mzg+PFUwNDNCPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA0MT4iCitkX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA3OT4iCit0X2ZtdCAgICAgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICAgICAiIjsiIgordF9mbXRfYW1wbSAgIiIKK2RhdGVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDQyPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwNDM5PjxVMDQzOD48VTA0M0I+PFUwMDJDPjxVMDAyMD48VTAwMjU+PFUwMDQxPiIKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCit5ZXNzdHIgICI8VTA0QjI+PFUwNDMwPiIKK25vc3RyICAgIjxVMDQxOT48VTA0NUU+PFUwNDlCPiIKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwNEIyPjxVMDRCMz48VTAwNTk+PFUwMDc5PjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgIjxVMDA1RT48VTAwNUI+PFUwNDE5PjxVMDQzOT48VTAwNEU+PFUwMDZFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCitMQ19QQVBFUgoraGVpZ2h0ICAgMjk3Cit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10ICAgICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2Qz4iCitpbnRfcHJlZml4ICAgICAiPFUwMDMyPjxVMDAzNz4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNkQ+IgorbmFtZV9nZW4gICAgIjxVMDRCMj48VTA0NDM+PFUwNDQwPjxVMDQzQz48VTA0MzA+PFUwNDQyPjxVMDQzQj48VTA0Mzg+IgorbmFtZV9tciAgICAgIjxVMDQxNj48VTA0MzA+PFUwNDNEPjxVMDQzRT48VTA0MzE+IgorbmFtZV9tcnMgICAgIjxVMDQyNT48VTA0M0U+PFUwNDNEPjxVMDQzOD48VTA0M0M+IgorJSBGSVhNRTogd2hhdCBpcyBtaXNzID8KK25hbWVfbWlzcyAgICIiCislIEZJWE1FOiB3aGF0IGlzIG1zID8KK25hbWVfbXMgICAgICIiCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCislIGZvcm1hdDogJUMlTiVTJU4lVCVOJXMgJWglTiVmJU4lYiVOJWQlTiVlICVyJU4lYSVOJXoKKyUgYnV0ICVTIHNlZW1zIG5vdCByZWNvZ25pemVkIHlldCA/IHNvICVDJU4lVCVOJXMgJWglTiVmJU4lYiVOJWQlTiVlICVyJU4lYSVOJXoKKyUgaXMgdXNlZC4KK3Bvc3RhbF9mbXQgICAgIjxVMDAyNT48VTAwNDM+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDU0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz48VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1Pi8KKzxVMDA2ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDYxPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3QT4iCitjb3VudHJ5X25hbWUgIjxVMDQwRT48VTA0Mzc+PFUwNDMxPjxVMDQzNT48VTA0M0E+PFUwNDM4PjxVMDQ0MT48VTA0NDI+PFUwNDNFPjxVMDQzRD4iCitjb3VudHJ5X3Bvc3QgIjxVMDA1NT48VTAwNUE+IiAlID8/Citjb3VudHJ5X2FiMiAgIjxVMDA1NT48VTAwNUE+IgorY291bnRyeV9hYjMgICI8VTAwNTU+PFUwMDVBPjxVMDA0Mj4iCitjb3VudHJ5X251bSAgODYwCislIEZJWE1FOiBJU0JOIG51bWJlcj8KKyVjb3VudHJ5X2lzYm4gIiIKK2NvdW50cnlfY2FyICI8VTAwNTU+PFUwMDVBPiIKK2xhbmdfbmFtZSAgICI8VTA0MEU+PFUwNDM3PjxVMDQzMT48VTA0MzU+PFUwNDNBPjxVMDQ0Nz48VTA0MzA+IgorbGFuZ19hYiAgICAgIjxVMDA3NT48VTAwN0E+IgorbGFuZ190ZXJtICAgIjxVMDA3NT48VTAwN0E+PFUwMDYyPiIKK2xhbmdfbGliICAgICI8VTAwNzU+PFUwMDdBPjxVMDA2Mj4iCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdmVfWkEgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy92ZV9aQQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzE1Y2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdmVfWkEKQEAgLTAsMCArMSwyOTEgQEAKK2VzY2FwZV9jaGFyICAvCitjb21tZW50X2NoYXIgICUKKworJSBDaGFyc2V0OiBVVEYtOAorCislIENoYW5nZUxvZworJSAwLjMgKDIwMDUtMTAtMTMpOgorJSAgICAgIDIwMDUtMTAtMTIgRHdheW5lIEJhaWxleSA8ZHdheW5lQHRyYW5zbGF0ZS5vcmcuemE+CislICAgICAgICAtIEFkZGVkICdDaGFyc2V0OiBVVEYtOCcgaW5mb3JtYXRpb24KKyUgICAgICAgIC0gVXBkYXRlIGNvbnRhY3QgaW5mb3JtYXRpb24KKyUgICAgICAgIC0gQWxsaWduIHNwZWxsaW5ncyBvZiBtb250aCBhbmQgd2Vla2RheSBuYW1lcyB3aXRoIERlcHQuIG9mCislICAgICAgICAgIEFydCBhbmQgQ3VsdHVyZSdzOiBNdWx0aWxpbmd1YWwgTWF0aGVtYXRpY3MgRGljdGlvbmFyeQorJSAwLjIgKDIwMDQtMTAtMjkpOgorJSAgICAgIDIwMDQtMTAtMjkgRHdheW5lIEJhaWxleSA8ZHdheW5lQHRyYW5zbGF0ZS5vcmcuemE+CislICAgICAgICAtIENvbnZlcnRlZCB0byA8VU5OTk4+IHN5bnRheCBmb3IgZXZlcnl0aGluZworJSAgICAgICAgLSBDb3JyZWN0IHllcy9ub2V4cHIKKyUgICAgICAgIC0gQ29ycmVjdGVkIHNvbWUgZGF5cyBvZiB0aGUgd2VlaworJSAgICAgIDIwMDQtMTAtMjggRHdheW5lIEJhaWxleSA8ZHdheW5lQHRyYW5zbGF0ZS5vcmcuemE+CislICAgICAgICAtIFVwZGF0ZWQgYWxsIGNvbnRhY3QgaW5mb3JtYXRpb24KKyUgICAgICAgIC0gQWRkZWQgVHJhbnNsYXRlLm9yZy56YSB0byAic291cmNlIiBmb3IgY2xhcml0eQorJSAgICAgIDIwMDQtMDMtMzAgRHdheW5lIEJhaWxleSA8ZHdheW5lQHRyYW5zbGF0ZS5vcmcuemE+CislICAgICAgICAtIEFkZGVkIGNvdW50cnlfYWIyLzMsIGNvdW50cnlfbnVtCislICAgICAgMjAwNC0wMi0yNyBEd2F5bmUgQmFpbGV5IDxkd2F5bmVAdHJhbnNsYXRlLm9yZy56YT4KKyUJICAgICAtIENvcnJlY3QgY2FwYXRpbGlzYXRpb24gb2YgbGFuZ19uYW1lCislIDAuMSAoMjAwNC0wMi0yNCk6CislCSAgIDIwMDQtMDItMjQgRHdheW5lIEJhaWxleSA8ZHdheW5lQHRyYW5zbGF0ZS5vcmcuemE+CislCSAgICAgLSBJbml0aWFsIFZlbmRhIGxvY2FsZSBmb3IgU291dGggQWZyaWNhCislICAgICAgICAgIGJ5IFp1emEgU29mdHdhcmUgRm91bmRhdGlvbgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiVmVuZGEgbG9jYWxlIGZvciBTb3V0aCBBZnJpY2EiCitzb3VyY2UgICAgICJadXphIFNvZnR3YXJlIEZvdW5kYXRpb24gKFRyYW5zbGF0ZS5vcmcuemEpIgorYWRkcmVzcyAgICAiUE8gQm94IDI4MzY0LCBTdW5ueXNpZGUsIDAxMzIsIFNvdXRoIEFmcmljYSIKK2NvbnRhY3QgICAgIkR3YXluZSBCYWlsZXkiCitlbWFpbCAgICAgICJkd2F5bmVAdHJhbnNsYXRlLm9yZy56YSIKK3RlbCAgICAgICAgIisyNyAxMiA0NjAgMTA5NSIKK2ZheCAgICAgICAgIisyNyAxMiA0NjAgMTA5NSIKK2xhbmd1YWdlICAgIlZlbmRhIgordGVycml0b3J5ICAiU291dGggQWZyaWNhIgorcmV2aXNpb24gICAiMC4zIgorZGF0ZSAgICAgICAiMjAwNS0xMC0xMyIKKyUKK2NhdGVnb3J5ICAidmVfWkE6MjAwNCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAidmVfWkE6MjAwNCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAidmVfWkE6MjAwNCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJ2ZV9aQToyMDA0IjtMQ19USU1FCitjYXRlZ29yeSAgInZlX1pBOjIwMDQiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAidmVfWkE6MjAwNCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAidmVfWkE6MjAwNCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAidmVfWkE6MjAwNCI7TENfUEFQRVIKK2NhdGVnb3J5ICAidmVfWkE6MjAwNCI7TENfTkFNRQorY2F0ZWdvcnkgICJ2ZV9aQToyMDA0IjtMQ19BRERSRVNTCitjYXRlZ29yeSAgInZlX1pBOjIwMDQiO0xDX1RFTEVQSE9ORQorY2F0ZWdvcnkgICJ2ZV9aQToyMDA0IjtMQ19NRUFTVVJFTUVOVAorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKKyUgVXNlIHRoZSBjaGFyYWN0ZXJzIGRlc2NyaWJlZCBpbiB0aGUgY2hhcm1hcCBmaWxlICJpMThuLnRneiIKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEgaS5lLgorJSB1c2UgdGhlIHJ1bGVzIHRoZXJlIHdoZW4gbWFraW5nIG9yZGVyZWQgbGlzdHMgb2Ygd29yZHMuCitjb3B5ICJpc28xNDY1MV90MSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCitjb3B5ICJlbl9aQSIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJlbl9aQSIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKKworJSBhYmRheSAtIFRoZSBhYmJyZXZpYXRpb25zIGZvciB0aGUgd2VlayBkYXlzOgorJSAtIFN3bywgTXVzLCBWaGksIFJhciwgTF5hLCBUXmFuLCBNdWcKK2FiZGF5ICAgICAgICI8VTAwNTM+PFUwMDc3PjxVMDA2Rj4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDc1PjxVMDA3Mz4iOy8KKyAgICAgICAgICAgICI8VTAwNTY+PFUwMDY4PjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNTI+PFUwMDYxPjxVMDA3Mj4iOy8KKyAgICAgICAgICAgICI8VTFFNEI+PFUwMDYxPiI7LworICAgICAgICAgICAgIjxVMUU3MD48VTAwNjE+PFUwMDZFPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNzU+PFUwMDY3PiIKKworJSBkYXkgLSBUaGUgZnVsbCBuYW1lcyBvZiB0aGUgd2VlayBkYXlzOgorJSAtIFN3b25kYWhhLCBNdXN1bWJ1bHV3bywgTF5hdmh1dmhpbGksIExeYXZodXJhcnUsIExeYXZodW5eYSwgTF5hdmh1dF5hbnUsIE11Z2l2aGVsYQorZGF5ICAgICAgICAgIjxVMDA1Mz48VTAwNzc+PFUwMDZGPjxVMDA2RT48VTAwNjQ+PFUwMDYxPjxVMDA2OD48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA3NT48VTAwNzM+PFUwMDc1PjxVMDA2RD48VTAwNjI+PFUwMDc1PjxVMDA2Qz48VTAwNzU+PFUwMDc3PjxVMDA2Rj4iOy8KKyAgICAgICAgICAgICI8VTFFM0M+PFUwMDYxPjxVMDA3Nj48VTAwNjg+PFUwMDc1PjxVMDA3Nj48VTAwNjg+PFUwMDY5PjxVMDA2Qz48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUxRTNDPjxVMDA2MT48VTAwNzY+PFUwMDY4PjxVMDA3NT48VTAwNzI+PFUwMDYxPjxVMDA3Mj48VTAwNzU+IjsvCisgICAgICAgICAgICAiPFUxRTNDPjxVMDA2MT48VTAwNzY+PFUwMDY4PjxVMDA3NT48VTFFNEI+PFUwMDYxPiI7LworICAgICAgICAgICAgIjxVMUUzQz48VTAwNjE+PFUwMDc2PjxVMDA2OD48VTAwNzU+PFUxRTcxPjxVMDA2MT48VTAwNkU+PFUwMDc1PiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNzU+PFUwMDY3PjxVMDA2OT48VTAwNzY+PFUwMDY4PjxVMDA2NT48VTAwNkM+PFUwMDYxPiIKKworJSBhYm1vbiAtIFRoZSBhYmJyZXZpYXRpb25zIGZvciB0aGUgbW9udGhzCislIC0gUGhhLCBMdWgsIEZhbSwgTGFtLCBTaHUsIEx3aSwgTHdhLCBOZ3UsIEtodSwgVHNoLCBMXmFyLCBOeWUKK2FibW9uICAgICAgICI8VTAwNTA+PFUwMDY4PjxVMDA2MT4iOyI8VTAwNEM+PFUwMDc1PjxVMDA2OD4iOy8KKyAgICAgICAgICAgICI8VTAwNDY+PFUwMDYxPjxVMDA2RD4iOyI8VTAwNEM+PFUwMDYxPjxVMDA2RD4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDY4PjxVMDA3NT4iOyI8VTAwNEM+PFUwMDc3PjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNEM+PFUwMDc3PjxVMDA2MT4iOyI8VTAwNEU+PFUwMDY3PjxVMDA3NT4iOy8KKyAgICAgICAgICAgICI8VTAwNEI+PFUwMDY4PjxVMDA3NT4iOyI8VTAwNTQ+PFUwMDczPjxVMDA2OD4iOy8KKyAgICAgICAgICAgICI8VTFFM0M+PFUwMDYxPjxVMDA3Mj4iOyI8VTAwNEU+PFUwMDc5PjxVMDA2NT4iCisKKyUgbW9uIC0gVGhlIGZ1bGwgbmFtZXMgb2YgdGhlIG1vbnRocyAtCislIC0gUGhhbmRvLCBMdWh1aGksIFReaGFmYW11aHdlLCBMYW1iYW1haSwgU2h1bmR1bnRodWxlLCBGdWx3aQorJSAgIEZ1bHdhbmEsIFReaGFuZ3VsZSwgS2h1YnZ1bWVkemksIFRzaGltZWR6aSwgTF5hcmEsIE55ZW5kYXZodXNpa3UKK21vbiAgICAgICAgICI8VTAwNTA+PFUwMDY4PjxVMDA2MT48VTAwNkU+PFUwMDY0PjxVMDA2Rj4iOy8KKyAgICAgICAgICAgICI8VTAwNEM+PFUwMDc1PjxVMDA2OD48VTAwNzU+PFUwMDY4PjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTFFNzA+PFUwMDY4PjxVMDA2MT48VTAwNjY+PFUwMDYxPjxVMDA2RD48VTAwNzU+PFUwMDY4PjxVMDA3Nz48VTAwNjU+IjsvCisgICAgICAgICAgICAiPFUwMDRDPjxVMDA2MT48VTAwNkQ+PFUwMDYyPjxVMDA2MT48VTAwNkQ+PFUwMDYxPjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNTM+PFUwMDY4PjxVMDA3NT48VTAwNkU+PFUwMDY0PjxVMDA3NT48VTAwNkU+PFUwMDc0PjxVMDA2OD48VTAwNzU+PFUwMDZDPjxVMDA2NT4iOy8KKyAgICAgICAgICAgICI8VTAwNDY+PFUwMDc1PjxVMDA2Qz48VTAwNzc+PFUwMDY5PiI7LworICAgICAgICAgICAgIjxVMDA0Nj48VTAwNzU+PFUwMDZDPjxVMDA3Nz48VTAwNjE+PFUwMDZFPjxVMDA2MT4iOy8KKyAgICAgICAgICAgICI8VTFFNzA+PFUwMDY4PjxVMDA2MT48VTAwNkU+PFUwMDY3PjxVMDA3NT48VTAwNkM+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA0Qj48VTAwNjg+PFUwMDc1PjxVMDA2Mj48VTAwNzY+PFUwMDc1PjxVMDA2RD48VTAwNjU+PFUwMDY0PjxVMDA3QT48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA3Mz48VTAwNjg+PFUwMDY5PjxVMDA2RD48VTAwNjU+PFUwMDY0PjxVMDA3QT48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUxRTNDPjxVMDA2MT48VTAwNzI+PFUwMDYxPiI7LworICAgICAgICAgICAgIjxVMDA0RT48VTAwNzk+PFUwMDY1PjxVMDA2RT48VTAwNjQ+PFUwMDYxPjxVMDA3Nj48VTAwNjg+PFUwMDc1PjxVMDA3Mz48VTAwNjk+PFUwMDZCPjxVMDA3NT4iCisKKyUgQWJyZXZpYXRlZCBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uIHRvIGJlIHJlZmVyZW5jZWQgYnkgdGhlICIlYyIgZmllbGQgZGVzY3JpcHRvciAtCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislICIlYSIgKHNob3J0IHdlZWtkYXkgbmFtZSksCislICIlZCIgKGRheSBvZiBtb250aCBhcyBhIGRlY2ltYWwgbnVtYmVyKSwKKyUgIiViIiAoc2hvcnQgbW9udGggbmFtZSksCislICIlWSIgKHllYXIgd2l0aCBjZW50dXJ5IGFzIGEgZGVjaW1hbCBudW1iZXIpLAorJSAiJVQiICgyNC1ob3VyIGNsb2NrIHRpbWUgaW4gZm9ybWF0IEhIOk1NOlNTKSwKKyUgIiVaIiAoVGltZSB6b25lIG5hbWUpCisKKyUgRGF0ZSByZXByZXNlbnRhdGlvbiB0byBiZSByZWZlcmVuY2VkIGJ5IHRoZSAiJXgiIGZpZWxkIGRlc2NyaXB0b3IgLQorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA1OT4iCislICIlZC8lbS8lWSIsIGRheS9tb250aC95ZWFyIGFzIGRlY2ltYWwgbnVtYmVycyAoMDEvMDEvMjAwMCkuCisKKyUgVGltZSByZXByZXNlbnRhdGlvbiB0byBiZSByZWZlcmVuY2VkIGJ5IHRoZSAiJVgiIGZpZWxkIGRlc2NyaXB0b3IgLQordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNTQ+IgorJSAiJVQiICgyNC1ob3VyIGNsb2NrIHRpbWUgaW4gZm9ybWF0IEhIOk1NOlNTKQorCislIERlZmluZSByZXByZXNlbnRhdGlvbiBvZiBhbnRlIG1lcmlkaWVtIGFuZCBwb3N0IG1lcmlkaWVtIHN0cmluZ3MgLQorYW1fcG0gICAgICAgIiI7IiIKKyUgVGhlICIiIG1lYW4gJ2RlZmF1bHQgdG8gIkFNIiBhbmQgIlBNIi4KKworJSBEZWZpbmUgdGltZSByZXByZXNlbnRhdGlvbiBpbiAxMi1ob3VyIGZvcm1hdCB3aXRoICJhbV9wbSIsIHRvIGJlIHJlZmVyZW5jZWQgYnkgdGhlICIlciIKK3RfZm10X2FtcG0gICIiCislIFRoZSAiIiBtZWFucyB0aGF0IHRoaXMgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuCisKKyUgRGF0ZSByZXByZXNlbnRhdGlvbiBub3QgZGVzY3JpYmVkIGluIElTTy9JRUMgMTQ2NTIuIENvbWVzIG91dCBhcyAtCislICIlYSAlYiAlZSAlSDolTTolUyAlWiAlWSIgd2hpY2ggaXMgZGVmYXVsdCAiZGF0ZSIgY29tbWFuZCBvdXRwdXQKK2RhdGVfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKKyUKKyUgJWEgLSBhYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWUsCislICViIC0gYWJyZXZpYXRlZCBtb250aCBuYW1lLAorJSAlZSAtIGRheSBvZiBtb250aCBhcyBhIGRlY2ltYWwgbnVtYmVyIHdpdGggbGVhZGluZyBzcGFjZSAoMSB0byAzMSksCislICVIIC0gaG91ciAoMjQtaG91ciBjbG9jaykgYXMgYSBkZWNpbWFsIG51bWJlciAoMDAgdG8gMjMpLAorJSAlTSAtIG1pbnV0ZSBhcyBhIGRlY2ltYWwgbnVtYmVyICgwMCB0byA1OSksCislICVTIC0gc2Vjb25kcyBhcyBhIGRlY2ltYWwgbnVtYmVyICgwMCB0byA1OSksCislICVaIC0gdGltZS16b25lIG5hbWUsCislICVZIC0geWVhciB3aXRoIGNlbnR1cnkgYXMgYSBkZWNpbWFsIG51bWJlcixlLmcuIDIwMDEuCisKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCislIEZJWE1FOiBDaGVjayBib3RoIG9mIHRoZXNlCislIFRoZSBhZmZpcm1hdGl2ZSByZXNwb25zZSAtIGVlCislICJeW3lZZUVdIgoreWVzZXhwciAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDc5PjxVMDA1OT48VTAwNjU+PFUwMDQ1PjxVMDA1RD4iCisKKyUgVGhlIG5lZ2F0aXZlIHJlc3BvbnNlIC0gaGFpCislICJeW25OaEhdIgorbm9leHByICAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNjg+PFUwMDQ4PjxVMDA1RD4iCitFTkQgTENfTUVTU0FHRVMKKworTENfUEFQRVIKK2NvcHkgImVuX1pBIgorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQorY29weSAiZW5fWkEiCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJlbl9aQSIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCislIEZvcm1hdCBmb3IgYWRkcmVzc2luZyBhIHBlcnNvbi4KK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKKyUgIiVkJXQlZyV0JW0ldCVmIgorJSAiU2FsdXRhdGlvbiIsCislICJFbXB0eSBzdHJpbmcsIG9yIDxTcGFjZT4iLAorJSAiRmlyc3QgZ2l2ZW4gbmFtZSIsCislICJFbXB0eSBzdHJpbmcsIG9yIDxTcGFjZT4iLAorJSAiTWlkZGxlIG5hbWVzIiwKKyUgIkVtcHR5IHN0cmluZywgb3IgPFNwYWNlPiIsCislICJDbGFuIG5hbWVzIgorCislIEZJWE1FIC0gZGVmaW5lIGFsbCB0aGUgZm9sbG93aW5nIG5hbWVfKgorJSBHZW5lcmFsIHNhbHV0YXRpb24gZm9yIGFueSBzZXgKKyUgbmFtZV9nZW4gICAgIiIKKworJSBTYWx1dGF0aW9uIGZvciB1bm1hcnJpZWQgZmVtYWxlcyAtICIiCislIG5hbWVfbWlzcyAgICIiCisKKyUgU2FsdXRhdGlvbiBmb3IgbWFsZXMgLSAiIgorJSBuYW1lX21yICAgICAiIgorCislIFNhbHV0YXRpb24gZm9yIG1hcnJpZWQgZmVtYWxlcyAtICIiCislIG5hbWVfbXJzICAgICIiCisKKyUgU2FsdXRhdGlvbiB2YWxpZCBmb3IgYWxsIGZlbWFsZXMgLSAiIiAobm8gdGVybSkKKyUgbmFtZV9tcyAgICAgIiIKKworRU5EIExDX05BTUUKKworTENfQUREUkVTUworJSBDb3VudHJ5IG5hbWUgaW4gVmVuZGEgLSAiQWZ1cmlrYSBUc2hpcGVtYmUiCitjb3VudHJ5X25hbWUgIjxVMDA0MT48VTAwNjY+PFUwMDc1PjxVMDA3Mj48VTAwNjk+PFUwMDZCPjxVMDA2MT48VTAwMjA+LworPFUwMDU0PjxVMDA3Mz48VTAwNjg+PFUwMDY5PjxVMDA3MD48VTAwNjU+PFUwMDZEPjxVMDA2Mj48VTAwNjU+IgorCislIEFiYnJldmlhdGVkIGNvdW50cnkgcG9zdGFsIG5hbWUgLSAiWkEiCitjb3VudHJ5X3Bvc3QgIjxVMDA1QT48VTAwNDE+IgorCislIFVOIEdlbmV2ZSAxOTQ5OjY4IERpc3Rpbmd1aXNoaW5nIHNpZ25zIG9mIHZlaGljbGVzIGluIGludGVybmF0aW9uYWwgdHJhZmZpYworJSBodHRwOi8vd3d3LnVuZWNlLm9yZy90cmFucy9jb252ZW50bi9kaXN0aW5nLXNpZ25zLTUtMjAwMS5wZGYKKyUgIlpBIgorY291bnRyeV9jYXIgICAiPFUwMDVBPjxVMDA0MT4iCisKKyUgRklYTUUgZGVmaW5lIHRoZSBmb2xsb3dpbmcgY29ycmVjdGx5CislIGNvdW50cnlfaXNibiAiIgorCislIExhbmd1YWdlIG5hbWUgaW4gVmVuZGEgLSAiVHNoaXZlbmReYSIKK2xhbmdfbmFtZSAiPFUwMDU0PjxVMDA3Mz48VTAwNjg+PFUwMDY5PjxVMDA3Nj48VTAwNjU+PFUwMDZFPjxVMUUxMz48VTAwNjE+IgorCislIElTTyA2MzkgdHdvIGFuZCB0aHJlZSBsZXR0ZXIgbGFuZ3VhZ2UgbmFtZXMKKyUgc2VlIGh0dHA6Ly93d3cubG9jLmdvdi9zdGFuZGFyZHMvaXNvNjM5LTIvZW5nbGFuZ24uaHRtbAorJSAidmUiLCAidmVuIiwgOnZlbiIKK2xhbmdfYWIgICAgICAgICAiPFUwMDc2PjxVMDA2NT4iCitsYW5nX3Rlcm0gICAgICAgIjxVMDA3Nj48VTAwNjU+PFUwMDZFPiIKKyUgRklYTUUgdGhlcmUgc2VlbXMgdG8gYmUgYW4gZXJyb3Igd2l0aCB0aGUgZm9sbG93aW5nIGJ1dCBhbSB1bmFibGUgdG8KKyUgZGV0ZXJtaW5lIHdoYXQgYXMgaXQgd29ya3MgY29ycmVjdGx5IGluIG90aGVyIGxvY2FsZSBmaWxlcworJSBsYW5nX2xpYiAgICAgICAgIjxVMDA3Nj48VTAwNjU+PFUwMDZFPiIKKworJSBSZXByZXNlbnRhdGlvbiBvZiBwb3N0YWwgYWRkcmVzc2VzIChtaW51cyB0aGUgYWRkcmVzc2VlJ3MgbmFtZSkgaW4gU291dGgKKyUgQWZyaWNhLiAoSWdub3JlZCBmb3Igbm93KQorcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKKyUgIiVmJU4lYSVOJWQlTiViJU4lcyAlaCAlZSAlciVOJXogJVQlTiVjJU4iLCB3aGljaCBnaXZlcyAtCislICJmaXJtIG5hbWUiLAorJSAiZW5kIG9mIGxpbmUiLAorJSAiQy9PIGFkZHJlc3MiLAorJSAiZW5kIG9mIGxpbmUiLAorJSAiZGVwYXJ0bWVudCBuYW1lIiwKKyUgIkJ1aWxkaW5nIG5hbWUiLAorJSAiZW5kIG9mIGxpbmUiLAorJSAic3RyZWV0IG9yIGJsb2NrIG5hbWUiLAorJSAic3BhY2UiLAorJSAiaG91c2UgbnVtYmVyIG9yIGRlc2lnbmF0aW9uIiwKKyUgInNwYWNlIiwKKyUgImZsb29yIG51bWJlciIsCislICJzcGFjZSIsCislICJyb29tIG51bWJlciwgZG9vciBkZXNpZ25hdGlvbiIsCislICJlbmQgb2YgbGluZSIsCislICJwb3N0YWwgY29kZSIsCislICJzcGFjZSIsCislICJ0b3duLCBjaXR5IiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgImNvdW50cnkgZGVzaWduYXRpb24gZm9yIHRoZSA8Y291bnRyeV9wb3N0PiBrZXl3b3JkIiwKKyUgImVuZCBvZiBsaW5lCislCisKKyUgSVNPIDMxNjYgY291bnRyeSBudW1iZXIgYW5kIDIgYW5kIDMgbGV0dGVyIGFicmV2aWF0aW9ucworJSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL29ubGluZWRhdC9jb3VudHJpZXMuaHRtbAorJSAiWkEiLCAiWkFGIgorY291bnRyeV9udW0gICA3MTAKK2NvdW50cnlfYWIyICAgIjxVMDA1QT48VTAwNDE+IgorY291bnRyeV9hYjMgICAiPFUwMDVBPjxVMDA0MT48VTAwNDY+IgorCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdmlfVk4gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy92aV9WTgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODJmMDY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvdmlfVk4KQEAgLTAsMCArMSwzNTQgQEAKK2VzY2FwZV9jaGFyIC8KK2NvbW1lbnRfY2hhciAlCislCislIFZpZXRuYW1lc2UgbGFuZ3VhZ2UgbG9jYWxlIGZvciBWaWV0bmFtCislIFNvdXJjZTogZ2xpYmMgbG9jYWxlIGFuZCBpbmZvIGZyb20gdmlldG5hbWVzZSBuYXRpdmUgc3BlYWtlcnMKKyUgQWRkcmVzczoKKyUgQ29udGFjdDogUGFibG8gU2FyYXR4YWdhCislIEVtYWlsOiBwYWJsb0BtYW5kcmFrZXNvZnQuY29tCislIFRlbDoKKyUgRmF4OgorJSBMYW5ndWFnZTogdmkKKyUgVGVycml0b3J5OiBWTgorJSBSZXZpc2lvbjogMS4xCislIERhdGU6IDIwMDQtMDEtMDkKKyUgVXNlcnM6IGdlbmVyYWwKKyUgUmVwZXJ0b2lyZW1hcDoKKyUgQ2hhcnNldDogVVRGLTgKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlZpZXRuYW1lc2UgbGFuZ3VhZ2UgbG9jYWxlIGZvciBWaWV0bmFtIgorc291cmNlICAgICAiZ2xpYmMgbG9jYWxlIGFuZCBpbmZvIGZyb20gdmlldG5hbWVzZSBuYXRpdmUgc3BlYWtlcnMiCithZGRyZXNzICAgICIiCitjb250YWN0ICAgICJQYWJsbyBTYXJhdHhhZ2EiCitlbWFpbCAgICAgICJwYWJsb0BtYW5kcmFrZXNvZnQuY29tIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiVmlldG5hbWVzZSIKK3RlcnJpdG9yeSAgIlZpZXRuYW0iCityZXZpc2lvbiAgICIxLjEiCitkYXRlICAgICAgICIyMDA0LTAxLTA5IgorJQorY2F0ZWdvcnkgICJ2aV9WTjoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJ2aV9WTjoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJ2aV9WTjoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgInZpX1ZOOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAidmlfVk46MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJ2aV9WTjoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJ2aV9WTjoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJ2aV9WTjoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJ2aV9WTjoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgInZpX1ZOOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAidmlfVk46MjAwMCI7TENfVEVMRVBIT05FCitjYXRlZ29yeSAgInZpX1ZOOjIwMDAiO0xDX01FQVNVUkVNRU5UCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorY29weSAiaTE4biIKK3RyYW5zbGl0X3N0YXJ0CisKK2luY2x1ZGUgICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCisKKyUgZG9uZyBzaWduIC0+IGQvLyAtPiBkZAorPFUyMEFCPiAiPFUwMTExPiI7IjxVMDA2ND48VTAwNjQ+IgorCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCislIENvcHkgdGhlIHRlbXBsYXRlIGZyb20gSVNPL0lFQyAxNDY1MQorY29weSAiaXNvMTQ2NTFfdDEiCisKKyUgQSggQV4gRV4gTysgVSsgREQgYXJlIHRyZWF0ZWFkIGFzIGJhc2UgbGV0dGVycworJSBvcmRlcmluZyBvZiBhY2NlbnRzIGlzOiBncmF2ZSwgaG9vaywgdGlsZGUsIGFjdXRlLCBkb3QgYmVsb3cKKyUgYSBhKCBhPiBiIGMgZCBkLyBlIGU+IGYgZyBoIGkgaiBrIGwgbSBuIG8gbysgcCBxIHIgcyB0IHUgdSsgdiB3IHggeSB6CisKK2NvbGxhdGluZy1zeW1ib2wgPGEoPgorY29sbGF0aW5nLXN5bWJvbCA8YS8+PgorY29sbGF0aW5nLXN5bWJvbCA8ZC8vPgorY29sbGF0aW5nLXN5bWJvbCA8ZS8+PgorY29sbGF0aW5nLXN5bWJvbCA8by8+PgorY29sbGF0aW5nLXN5bWJvbCA8bzk+Citjb2xsYXRpbmctc3ltYm9sIDx1OT4KKworcmVvcmRlci1hZnRlciA8QkFTPgorPEdSQT4KKzxIT0s+Cis8VElMPgorPEFDQT4KKzxQQ1Q+CisKK3Jlb3JkZXItYWZ0ZXIgPGE+Cis8YSg+Cis8YS8+PgorcmVvcmRlci1hZnRlciA8ZD4KKzxkLy8+CityZW9yZGVyLWFmdGVyIDxlPgorPGUvPj4KK3Jlb3JkZXItYWZ0ZXIgPG8+Cis8by8+PgorPG85PgorcmVvcmRlci1hZnRlciA8dT4KKzx1OT4KKworcmVvcmRlci1hZnRlciA8VTAwNjE+Cis8VTFFQTM+IDxhPjs8SE9LPjs8TUlOPjtJR05PUkUKKzxVMUVBMT4gPGE+OzxQQ1Q+OzxNSU4+O0lHTk9SRQorPFUwMTAzPiA8YSg+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUxRUIxPiA8YSg+OzxHUkE+OzxNSU4+O0lHTk9SRQorPFUxRUIzPiA8YSg+OzxIT0s+OzxNSU4+O0lHTk9SRQorPFUxRUI1PiA8YSg+OzxUSUw+OzxNSU4+O0lHTk9SRQorPFUxRUFGPiA8YSg+OzxBQ0E+OzxNSU4+O0lHTk9SRQorPFUxRUI3PiA8YSg+OzxQQ1Q+OzxNSU4+O0lHTk9SRQorPFUwMEUyPiA8YS8+Pjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMUVBNz4gPGEvPj47PEdSQT47PE1JTj47SUdOT1JFCis8VTFFQTk+IDxhLz4+OzxIT0s+OzxNSU4+O0lHTk9SRQorPFUxRUFCPiA8YS8+Pjs8VElMPjs8TUlOPjtJR05PUkUKKzxVMUVBNT4gPGEvPj47PEFDQT47PE1JTj47SUdOT1JFCis8VTFFQUQ+IDxhLz4+OzxQQ1Q+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNDE+Cis8VTFFQTI+IDxhPjs8SE9LPjs8Q0FQPjtJR05PUkUKKzxVMUVBMD4gPGE+OzxQQ1Q+OzxDQVA+O0lHTk9SRQorPFUwMTAyPiA8YSg+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUxRUIwPiA8YSg+OzxHUkE+OzxDQVA+O0lHTk9SRQorPFUxRUIyPiA8YSg+OzxIT0s+OzxDQVA+O0lHTk9SRQorPFUxRUI0PiA8YSg+OzxUSUw+OzxDQVA+O0lHTk9SRQorPFUxRUFFPiA8YSg+OzxBQ0E+OzxDQVA+O0lHTk9SRQorPFUxRUI2PiA8YSg+OzxQQ1Q+OzxDQVA+O0lHTk9SRQorPFUwMEMyPiA8YS8+Pjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMUVBNj4gPGEvPj47PEdSQT47PENBUD47SUdOT1JFCis8VTFFQTg+IDxhLz4+OzxIT0s+OzxDQVA+O0lHTk9SRQorPFUxRUFBPiA8YS8+Pjs8VElMPjs8Q0FQPjtJR05PUkUKKzxVMUVBND4gPGEvPj47PEFDQT47PENBUD47SUdOT1JFCis8VTFFQUM+IDxhLz4+OzxQQ1Q+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA2ND4KKzxVMDExMT4gPGQvLz47PEJBUz47PE1JTj47SUdOT1JFCis8VTAwRjA+IDxkLy8+OzxQQ0w+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNDQ+Cis8VTAxMTA+IDxkLy8+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUwMEQwPiA8ZC8vPjs8UENMPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNjU+Cis8VTFFQkI+IDxlPjs8SE9LPjs8TUlOPjtJR05PUkUKKzxVMUVCRD4gPGU+OzxUSUw+OzxNSU4+O0lHTk9SRQorPFUxRUI5PiA8ZT47PFBDVD47PE1JTj47SUdOT1JFCis8VTAwRUE+IDxlLz4+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUxRUMxPiA8ZS8+Pjs8R1JBPjs8TUlOPjtJR05PUkUKKzxVMUVDMz4gPGUvPj47PEhPSz47PE1JTj47SUdOT1JFCis8VTFFQzU+IDxlLz4+OzxUSUw+OzxNSU4+O0lHTk9SRQorPFUxRUJGPiA8ZS8+Pjs8QUNBPjs8TUlOPjtJR05PUkUKKzxVMUVDNz4gPGUvPj47PFBDVD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0NT4KKzxVMUVCQT4gPGU+OzxIT0s+OzxDQVA+O0lHTk9SRQorPFUxRUJDPiA8ZT47PFRJTD47PENBUD47SUdOT1JFCis8VTFFQjg+IDxlPjs8UENUPjs8Q0FQPjtJR05PUkUKKzxVMDBDQT4gPGUvPj47PEJBUz47PENBUD47SUdOT1JFCis8VTFFQzA+IDxlLz4+OzxHUkE+OzxDQVA+O0lHTk9SRQorPFUxRUMyPiA8ZS8+Pjs8SE9LPjs8Q0FQPjtJR05PUkUKKzxVMUVDND4gPGUvPj47PFRJTD47PENBUD47SUdOT1JFCis8VTFFQkU+IDxlLz4+OzxBQ0E+OzxDQVA+O0lHTk9SRQorPFUxRUM2PiA8ZS8+Pjs8UENUPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNjk+Cis8VTFFQzk+IDxpPjs8SE9LPjs8TUlOPjtJR05PUkUKKzxVMUVDQj4gPGk+OzxQQ1Q+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNDk+Cis8VTFFQzg+IDxpPjs8SE9LPjs8Q0FQPjtJR05PUkUKKzxVMUVDQT4gPGk+OzxQQ1Q+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA2Rj4KKzxVMUVDRj4gPG8+OzxIT0s+OzxNSU4+O0lHTk9SRQorPFUxRUNEPiA8bz47PFBDVD47PE1JTj47SUdOT1JFCis8VTAwRjQ+IDxvLz4+OzxCQVM+OzxNSU4+O0lHTk9SRQorPFUxRUQzPiA8by8+Pjs8R1JBPjs8TUlOPjtJR05PUkUKKzxVMUVENT4gPG8vPj47PEhPSz47PE1JTj47SUdOT1JFCis8VTFFRDc+IDxvLz4+OzxUSUw+OzxNSU4+O0lHTk9SRQorPFUxRUQxPiA8by8+Pjs8QUNBPjs8TUlOPjtJR05PUkUKKzxVMUVEOT4gPG8vPj47PFBDVD47PE1JTj47SUdOT1JFCis8VTAxQTE+IDxvOT47PEJBUz47PE1JTj47SUdOT1JFCis8VTFFREQ+IDxvOT47PEdSQT47PE1JTj47SUdOT1JFCis8VTFFREY+IDxvOT47PEhPSz47PE1JTj47SUdOT1JFCis8VTFFRTE+IDxvOT47PFRJTD47PE1JTj47SUdOT1JFCis8VTFFREI+IDxvOT47PEFDQT47PE1JTj47SUdOT1JFCis8VTFFRTM+IDxvOT47PFBDVD47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0Rj4KKzxVMUVDRT4gPG8+OzxIT0s+OzxDQVA+O0lHTk9SRQorPFUxRUNDPiA8bz47PFBDVD47PENBUD47SUdOT1JFCis8VTAwRDQ+IDxvLz4+OzxCQVM+OzxDQVA+O0lHTk9SRQorPFUxRUQyPiA8by8+Pjs8R1JBPjs8Q0FQPjtJR05PUkUKKzxVMUVEND4gPG8vPj47PEhPSz47PENBUD47SUdOT1JFCis8VTFFRDY+IDxvLz4+OzxUSUw+OzxDQVA+O0lHTk9SRQorPFUxRUQwPiA8by8+Pjs8QUNBPjs8Q0FQPjtJR05PUkUKKzxVMUVEOD4gPG8vPj47PFBDVD47PENBUD47SUdOT1JFCis8VTAxQTA+IDxvOT47PEJBUz47PENBUD47SUdOT1JFCis8VTFFREM+IDxvOT47PEdSQT47PENBUD47SUdOT1JFCis8VTFFREU+IDxvOT47PEhPSz47PENBUD47SUdOT1JFCis8VTFFRTA+IDxvOT47PFRJTD47PENBUD47SUdOT1JFCis8VTFFREE+IDxvOT47PEFDQT47PENBUD47SUdOT1JFCis8VTFFRTI+IDxvOT47PFBDVD47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDc1PgorPFUxRUU3PiA8dT47PEhPSz47PE1JTj47SUdOT1JFCis8VTFFRTU+IDx1Pjs8UENUPjs8TUlOPjtJR05PUkUKKzxVMDFCMD4gPHU5Pjs8QkFTPjs8TUlOPjtJR05PUkUKKzxVMUVFQj4gPHU5Pjs8R1JBPjs8TUlOPjtJR05PUkUKKzxVMUVFRD4gPHU5Pjs8SE9LPjs8TUlOPjtJR05PUkUKKzxVMUVFRj4gPHU5Pjs8VElMPjs8TUlOPjtJR05PUkUKKzxVMUVFOT4gPHU5Pjs8QUNBPjs8TUlOPjtJR05PUkUKKzxVMUVGMT4gPHU5Pjs8UENUPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDU1PgorPFUxRUU2PiA8dT47PEhPSz47PENBUD47SUdOT1JFCis8VTFFRTQ+IDx1Pjs8UENUPjs8Q0FQPjtJR05PUkUKKzxVMDFBRj4gPHU5Pjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxVMUVFQT4gPHU5Pjs8R1JBPjs8Q0FQPjtJR05PUkUKKzxVMUVFQz4gPHU5Pjs8SE9LPjs8Q0FQPjtJR05PUkUKKzxVMUVFRT4gPHU5Pjs8VElMPjs8Q0FQPjtJR05PUkUKKzxVMUVFOD4gPHU5Pjs8QUNBPjs8Q0FQPjtJR05PUkUKKzxVMUVGMD4gPHU5Pjs8UENUPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNzk+Cis8VTFFRjM+IDx5Pjs8R1JBPjs8TUlOPjtJR05PUkUKKzxVMUVGNz4gPHk+OzxIT0s+OzxNSU4+O0lHTk9SRQorPFUxRUY5PiA8eT47PFRJTD47PE1JTj47SUdOT1JFCis8VTFFRjU+IDx5Pjs8UENUPjs8TUlOPjtJR05PUkUKK3Jlb3JkZXItYWZ0ZXIgPFUwMDU5PgorPFUxRUYyPiA8eT47PEdSQT47PENBUD47SUdOT1JFCis8VTFFRjY+IDx5Pjs8SE9LPjs8Q0FQPjtJR05PUkUKKzxVMUVGOD4gPHk+OzxUSUw+OzxDQVA+O0lHTk9SRQorPFUxRUY0PiA8eT47PFBDVD47PENBUD47SUdOT1JFCisKK3Jlb3JkZXItZW5kCisKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgIjxVMDA1Nj48VTAwNEU+PFUwMDQ0PjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAgICAgIjxVMjBBQj4iCittb25fZGVjaW1hbF9wb2ludCAgICAgIjxVMDAyQz4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgIjxVMDAyRT4iCittb25fZ3JvdXBpbmcgICAgICAgICAgMzszCitwb3NpdGl2ZV9zaWduICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAwCitmcmFjX2RpZ2l0cyAgICAgICAgICAgMAorcF9jc19wcmVjZWRlcyAgICAgICAgIDAKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAwCituX2NzX3ByZWNlZGVzICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgIDAKK3Bfc2lnbl9wb3NuICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgMQorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAgICAgICI8VTAwMkM+IgordGhvdXNhbmRzX3NlcCAgICAgICAgIjxVMDAyRT4iCitncm91cGluZyAgICAgICAgICAgICAzOzMKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5ICAgICI8VTAwNDM+PFUwMDRFPiI7LworICAgICAgICAgIjxVMDA1ND48VTAwMzI+IjsvCisgICAgICAgICAiPFUwMDU0PjxVMDAzMz4iOy8KKyAgICAgICAgICI8VTAwNTQ+PFUwMDM0PiI7LworICAgICAgICAgIjxVMDA1ND48VTAwMzU+IjsvCisgICAgICAgICAiPFUwMDU0PjxVMDAzNj4iOy8KKyAgICAgICAgICI8VTAwNTQ+PFUwMDM3PiIKK2RheSAgICAgICI8VTAwNDM+PFUwMDY4PjxVMUVFNz48VTAwMjA+PFUwMDZFPjxVMDA2OD48VTFFQUQ+PFUwMDc0PiI7LworICAgICAgICAgIjxVMDA1ND48VTAwNjg+PFUxRUU5PjxVMDAyMD48VTAwNjg+PFUwMDYxPjxVMDA2OT4iOy8KKyAgICAgICAgICI8VTAwNTQ+PFUwMDY4PjxVMUVFOT48VTAwMjA+PFUwMDYyPjxVMDA2MT4iOy8KKyAgICAgICAgICI8VTAwNTQ+PFUwMDY4PjxVMUVFOT48VTAwMjA+PFUwMDc0PjxVMDFCMD4iOy8KKyAgICAgICAgICI8VTAwNTQ+PFUwMDY4PjxVMUVFOT48VTAwMjA+PFUwMDZFPjxVMDEwMz48VTAwNkQ+IjsvCisgICAgICAgICAiPFUwMDU0PjxVMDA2OD48VTFFRTk+PFUwMDIwPjxVMDA3Mz48VTAwRTE+PFUwMDc1PiI7LworICAgICAgICAgIjxVMDA1ND48VTAwNjg+PFUxRUU5PjxVMDAyMD48VTAwNjI+PFUxRUEzPjxVMDA3OT4iCithYm1vbiAgICAiPFUwMDU0PjxVMDA2OD48VTAwMzA+PFUwMDMxPiI7LworICAgICAgICAgIjxVMDA1ND48VTAwNjg+PFUwMDMwPjxVMDAzMj4iOy8KKyAgICAgICAgICI8VTAwNTQ+PFUwMDY4PjxVMDAzMD48VTAwMzM+IjsvCisgICAgICAgICAiPFUwMDU0PjxVMDA2OD48VTAwMzA+PFUwMDM0PiI7LworICAgICAgICAgIjxVMDA1ND48VTAwNjg+PFUwMDMwPjxVMDAzNT4iOy8KKyAgICAgICAgICI8VTAwNTQ+PFUwMDY4PjxVMDAzMD48VTAwMzY+IjsvCisgICAgICAgICAiPFUwMDU0PjxVMDA2OD48VTAwMzA+PFUwMDM3PiI7LworICAgICAgICAgIjxVMDA1ND48VTAwNjg+PFUwMDMwPjxVMDAzOD4iOy8KKyAgICAgICAgICI8VTAwNTQ+PFUwMDY4PjxVMDAzMD48VTAwMzk+IjsvCisgICAgICAgICAiPFUwMDU0PjxVMDA2OD48VTAwMzE+PFUwMDMwPiI7LworICAgICAgICAgIjxVMDA1ND48VTAwNjg+PFUwMDMxPjxVMDAzMT4iOy8KKyAgICAgICAgICI8VTAwNTQ+PFUwMDY4PjxVMDAzMT48VTAwMzI+IgorbW9uICAgICAgIjxVMDA1ND48VTAwNjg+PFUwMEUxPjxVMDA2RT48VTAwNjc+PFUwMDIwPjxVMDA2RD48VTFFRDk+PFUwMDc0PiI7LworICAgICAgICAgIjxVMDA1ND48VTAwNjg+PFUwMEUxPjxVMDA2RT48VTAwNjc+PFUwMDIwPjxVMDA2OD48VTAwNjE+PFUwMDY5PiI7LworICAgICAgICAgIjxVMDA1ND48VTAwNjg+PFUwMEUxPjxVMDA2RT48VTAwNjc+PFUwMDIwPjxVMDA2Mj48VTAwNjE+IjsvCisgICAgICAgICAiPFUwMDU0PjxVMDA2OD48VTAwRTE+PFUwMDZFPjxVMDA2Nz48VTAwMjA+PFUwMDc0PjxVMDFCMD4iOy8KKyAgICAgICAgICI8VTAwNTQ+PFUwMDY4PjxVMDBFMT48VTAwNkU+PFUwMDY3PjxVMDAyMD48VTAwNkU+PFUwMTAzPjxVMDA2RD4iOy8KKyAgICAgICAgICI8VTAwNTQ+PFUwMDY4PjxVMDBFMT48VTAwNkU+PFUwMDY3PjxVMDAyMD48VTAwNzM+PFUwMEUxPjxVMDA3NT4iOy8KKyAgICAgICAgICI8VTAwNTQ+PFUwMDY4PjxVMDBFMT48VTAwNkU+PFUwMDY3PjxVMDAyMD48VTAwNjI+PFUxRUEzPjxVMDA3OT4iOy8KKyAgICAgICAgICI8VTAwNTQ+PFUwMDY4PjxVMDBFMT48VTAwNkU+PFUwMDY3PjxVMDAyMD48VTAwNzQ+PFUwMEUxPjxVMDA2RD4iOy8KKyAgICAgICAgICI8VTAwNTQ+PFUwMDY4PjxVMDBFMT48VTAwNkU+PFUwMDY3PjxVMDAyMD48VTAwNjM+PFUwMDY4PjxVMDBFRD48VTAwNkU+IjsvCisgICAgICAgICAiPFUwMDU0PjxVMDA2OD48VTAwRTE+PFUwMDZFPjxVMDA2Nz48VTAwMjA+PFUwMDZEPjxVMDFCMD48VTFFREQ+PFUwMDY5PiI7LworICAgICAgICAgIjxVMDA1ND48VTAwNjg+PFUwMEUxPjxVMDA2RT48VTAwNjc+PFUwMDIwPjxVMDA2RD48VTAxQjA+PFUxRUREPjxVMDA2OT48VTAwMjA+PFUwMDZEPjxVMUVEOT48VTAwNzQ+IjsvCisgICAgICAgICAiPFUwMDU0PjxVMDA2OD48VTAwRTE+PFUwMDZFPjxVMDA2Nz48VTAwMjA+PFUwMDZEPjxVMDFCMD48VTFFREQ+PFUwMDY5PjxVMDAyMD48VTAwNjg+PFUwMDYxPjxVMDA2OT4iCitkX3RfZm10ICAiPFUwMDI1PjxVMDA0MT48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDAyNT48VTAwNDI+PFUwMDIwPjxVMDA0RT48VTAxMDM+PFUwMDZEPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK2RfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDU5PiIKK3RfZm10ICAgICI8VTAwMjU+PFUwMDU0PiIKK2FtX3BtICAgICI8VTAwNDE+PFUwMDREPiI7IjxVMDA1MD48VTAwNEQ+IgordF9mbXRfYW1wbSAgIjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDIwPjxVMDAyNT48VTAwNzA+IgorZGF0ZV9mbXQgICI8VTAwMjU+PFUwMDQxPjxVMDAyQz48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDZFPjxVMDEwMz48VTAwNkQ+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorRU5EIExDX1RJTUUKKworJSB5ZXM6IFZhXm5nIC8gRGEuCislIG5vOiBLaG9ebmcKK0xDX01FU1NBR0VTCit5ZXNzdHIgICAiPFUwMDQzPjxVMDBGMz4iCitub3N0ciAgICAiPFUwMDRCPjxVMDA2OD48VTAwRjQ+PFUwMDZFPjxVMDA2Nz4iCit5ZXNleHByICAiPFUwMDVFPjxVMDA1Qj48VTAwMzE+PFUwMDc5PjxVMDA1OT48VTAwNjM+PFUwMDQzPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK25vZXhwciAgICI8VTAwNUU+PFUwMDVCPjxVMDAzMD48VTAwNkU+PFUwMDRFPjxVMDA2Qj48VTAwNEI+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCitoZWlnaHQgICAgICAyOTcKK3dpZHRoICAgICAgIDIxMAorRU5EIExDX1BBUEVSCisKK0xDX05BTUUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUgTENfTkFNRSBjYXRlZ29yeS4KKyUKK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDcwPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PiIKK25hbWVfZ2VuICAgICIiCituYW1lX21yICAgICAiPFUwMEQ0PjxVMDAyRT4iCituYW1lX21ycyAgICAiPFUwMDQyPjxVMDAyRT4iCituYW1lX21pc3MgICAiPFUwMDQzPjxVMDAyRT4iCituYW1lX21zICAgICAiIgorCitFTkQgTENfTkFNRQorCisKK0xDX0FERFJFU1MKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUgTENfQUREUkVTUworcG9zdGFsX2ZtdCAgIjxVMDAyNT48VTAwN0E+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDU0PjxVMDAyNT48VTAwNzM+LworPFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDY1PjxVMDAyNT48VTAwNzI+IgorY291bnRyeV9uYW1lICI8VTAwNTY+PFUwMDY5PjxVMUVDNz48VTAwNzQ+PFUwMDIwPjxVMDA2RT48VTAwNjE+PFUwMDZEPiIKK2xhbmdfbmFtZSAiPFUwMDU2PjxVMDA2OT48VTFFQzc+PFUwMDc0PjxVMDAyMD48VTAwNkU+PFUwMDY3PjxVMUVFRj4iCisKK2NvdW50cnlfYWIyICI8VTAwNTY+PFUwMDRFPiIKK2NvdW50cnlfYWIzICI8VTAwNTY+PFUwMDRFPjxVMDA0RD4iCitjb3VudHJ5X251bSA3MDQKK0VORCBMQ19BRERSRVNTCisKKworTENfVEVMRVBIT05FCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislCit0ZWxfaW50X2ZtdCAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAzQj48VTAwMjU+PFUwMDYxPjxVMDAyMD4vCis8VTAwM0I+PFUwMDI1PjxVMDA2Qz4iCitpbnRfcHJlZml4ICAiPFUwMDM4PjxVMDAzND4iCitpbnRfc2VsZWN0ICAiPFUwMDMwPjxVMDAzMD4iCisKK0VORCBMQ19URUxFUEhPTkUKKworTENfTUVBU1VSRU1FTlQKK21lYXN1cmVtZW50IDEKK0VORCBMQ19NRUFTVVJFTUVOVApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvd2FfQkUgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy93YV9CRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDJlNTI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvd2FfQkUKQEAgLTAsMCArMSwxNzYgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJSBjaGFyc2V0ICJVVEYtOCIKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbyBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICJXYWxsb29uIExhbmd1YWdlIExvY2FsZSBmb3IgQmVsZ2l1bSIKK3NvdXJjZSAiRGphbiBTQUNSRSIKK2NvbnRhY3QgIlBhYmxvIFNhcmF0eGFnYSIKK2VtYWlsICJwYWJsb0BtYW5kcmFrZXNvZnQuY29tIgorYWRkcmVzcyAiIgordGVsICIiCitmYXggIiIKK2xhbmd1YWdlICJXYWxsb29uIgordGVycml0b3J5ICJCZWxnaXVtIgorcmV2aXNpb24gIjAuOSIKK2RhdGUgIjIwMDMtMDgtMjUiCisKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgaTE4bjoyMDAwO0xDX0NPTExBVEUKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19DVFlQRQorY2F0ZWdvcnkgaTE4bjoyMDAwO0xDX01FU1NBR0VTCitjYXRlZ29yeSBpMThuOjIwMDA7TENfTU9ORVRBUlkKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19OVU1FUklDCitjYXRlZ29yeSBpMThuOjIwMDA7TENfVElNRQorY2F0ZWdvcnkgaTE4bjoyMDAwO0xDX1BBUEVSCitjYXRlZ29yeSBpMThuOjIwMDA7TENfTUVBU1VSRU1FTlQKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19URUxFUEhPTkUKK2NhdGVnb3J5IGkxOG46MjAwMDtMQ19BRERSRVNTCitjYXRlZ29yeSBpMThuOjIwMDA7TENfTkFNRQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQUREUkVTUworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKK2NvdW50cnlfbmFtZSAiPFUwMDQyPjxVMDA2NT48VTAwNkM+PFUwMDZBPjxVMDA2OT48VTAwNkI+PFUwMDY1PiIKK2NvdW50cnlfcG9zdCAiQiIKK2NvdW50cnlfYWIyICJCRSIKK2NvdW50cnlfYWIzICJCRUwiCitjb3VudHJ5X251bSA1NgorY291bnRyeV9pc2JuICIyIgorY291bnRyeV9jYXIgIkIiCitsYW5nX25hbWUgIjxVMDA1Nz48VTAwNjE+PFUwMDZDPjxVMDA2Rj48VTAwNkU+IgorbGFuZ19hYiAid2EiCitsYW5nX3Rlcm0gIndsbiIKK2xhbmdfbGliICJ3bG4iCitFTkQgTENfQUREUkVTUworCitMQ19DVFlQRQorY29weSAiaTE4biIKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCisKKyUgQS1ib2xlIC0+IEEtY2lyY29uZmxlY3NlIC0+IEFVCis8VTAwQzU+ICI8VTAwNDE+PFUwMzBBPiI7IjxVMDA0MT4iOyI8VTAwNDE+PFUwMDU1PiIKKzxVMDBFNT4gIjxVMDA2MT48VTAzMEE+IjsiPFUwMDYxPiI7IjxVMDA2MT48VTAwNzU+IgorCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCitjb3B5ICJmcl9CRSIKK0VORCBMQ19DT0xMQVRFCisKKyUgQ09NSU5UQUlSRSA6IGRqJyBhIHJhZGpvdXTDqSBvbiAiYSIgZXQgb24gInciIHBvIGxlcyB5ZXNleHByCislIHBhY2Uga2kgIm95aSIgc2kgcG91dCBkaXJlIG9zc2kgImF3w6giIChMw65kamUpLCBheWkgKMOFcmRlbmUpCislIGV0ICJ3YXkiIChOaXZlbGUpLgorTENfTUVTU0FHRVMKK3llc3N0ciAgIjxVMDA0Rj48VTAwNzk+PFUwMDY5PiIKK25vc3RyICAgIjxVMDA0RT48VTAwNjU+PFUwMDZFPjxVMDA2OT4iCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA2Rj48VTAwNEY+PFUwMDc5PjxVMDA1OT48VTAwNjE+PFUwMDQxPjxVMDA3Nz48VTAwNTc+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD48VTAwMkU+PFUwMDJBPiIKK0VORCBMQ19NRVNTQUdFUworCislIENPTUlOVEFJUkU6IGRvZXQgZXNzZSBsaSBtaW5tZSBraSBwbyBmcl9CRS4KK0xDX01PTkVUQVJZCitjb3B5ICJmcl9CRSIKK0VORCBMQ19NT05FVEFSWQorCislIENPTUlOVEFJUkU6IGRvZXQgZXNzZSBsaSBtaW5tZSBraSBwbyBmcl9CRS4KK0xDX05VTUVSSUMKK2NvcHkgImZyX0JFIgorRU5EIExDX05VTUVSSUMKKworJSBDT01JTlRBSVJFOiBkb2V0IGVzc2UgbGkgbWlubWUga2kgcG8gZnJfQkUuCitMQ19QQVBFUgorY29weSAiZnJfQkUiCitFTkQgTENfUEFQRVIKKworJSBDT01JTlRBSVJFOiBkb2V0IGVzc2UgbGkgbWlubWUga2kgcG8gZnJfQkUuCitMQ19NRUFTVVJFTUVOVAorY29weSAiZnJfQkUiCitFTkQgTENfTUVBU1VSRU1FTlQKKworJSBDT01JTlRBSVJFOiBkb2V0IGVzc2UgbGkgbWlubWUga2kgcG8gZnJfQkUuCitMQ19URUxFUEhPTkUKK2NvcHkgImZyX0JFIgorRU5EIExDX1RFTEVQSE9ORQorCislIENPTUlOVEFJUkU6IGEgw6d1IGtpIGRqaSBzYWksIGkgZ24gYSBub3UgcmFzY291cnRpIF9vZmljaXJfCislIHBvIGxlcyBtb2VzIGV0IGxlcyBkam/Du3MuCislIERvbmssIGRqaSBmd2FpIGNvbWUgw6dhIF9taV8gc2hvbm5lIGxvZGppa2UuCislCislIFBvIGxlcyByYXNjb3V0aXMsIG9uIGEgbWV0b3UgImRqbiIgcG8gZGp1biwgZXQgImRqbCIgcG8gZGp1bGV0ZS4KKworTENfVElNRQorYWJkYXkgICAiPFUwMDY0PjxVMDA2OT48VTAwNkQ+IjsiPFUwMDZDPjxVMDA2Rj48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMEU1PjxVMDA3Mj4iOyI8VTAwNkQ+PFUwMDY5PjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwNkE+PFUwMDc1PiI7IjxVMDA3Nj48VTAwRTk+PFUwMDZFPiI7LworICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNkQ+IgorZGF5ICAgICAiPFUwMDY0PjxVMDA2OT48VTAwNkQ+PFUwMDY1PjxVMDA2Nz48VTAwNkU+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDZDPjxVMDA2Rj48VTAwNkU+PFUwMDY0PjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwRTU+PFUwMDcyPjxVMDA2ND48VTAwNjk+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDY5PjxVMDA2NT48VTAwNzI+PFUwMDZCPjxVMDA2OT48VTAwNjQ+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDY0PjxVMDA2QT48VTAwNzU+PFUwMDY0PjxVMDA2OT4iOy8KKyAgICAgICAgIjxVMDA3Nj48VTAwRTk+PFUwMDZFPjxVMDA3Mj48VTAwNjQ+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNkQ+PFUwMDY0PjxVMDA2OT4iCithYm1vbiAgICI8VTAwNjQ+PFUwMDZBPjxVMDA2MT4iOyI8VTAwNjY+PFUwMDY1PjxVMDA3Nj4iOy8KKyAgICAgICAgIjxVMDA2RD48VTAwRTU+PFUwMDczPiI7IjxVMDA2MT48VTAwNzY+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+IjsiPFUwMDY0PjxVMDA2QT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNjQ+PFUwMDZBPjxVMDA2Qz4iOyI8VTAwNjE+PFUwMDc3PjxVMDA2Rj4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNjU+PFUwMDc0PiI7IjxVMDA2Rj48VTAwNjM+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDZFPjxVMDBGND48VTAwNzY+IjsiPFUwMDY0PjxVMDA2NT48VTAwNjM+IgorbW9uICAgICAiPFUwMDY0PjxVMDA2QT48VTAwNjE+PFUwMDZFPjxVMDA3Nj48VTAwRUU+IjsvCisgICAgICAgICI8VTAwNjY+PFUwMDY1PjxVMDA3Nj48VTAwNzI+PFUwMEVFPiI7LworICAgICAgICAiPFUwMDZEPjxVMDBFNT48VTAwNzM+PFUwMDczPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA3Nj48VTAwNzI+PFUwMDY5PiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzk+IjsvCisgICAgICAgICI8VTAwNjQ+PFUwMDZBPjxVMDA3NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNjQ+PFUwMDZBPjxVMDA3NT48VTAwNkM+PFUwMDY1PjxVMDA3ND48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDc3PjxVMDA2Rj48VTAwNzU+PFUwMDczPjxVMDA3Mz48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3ND48VTAwNjk+PFUwMDZEPjxVMDA2Mj48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkY+PFUwMDYzPjxVMDA3ND48VTAwRjQ+PFUwMDYyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2RT48VTAwRjQ+PFUwMDc2PjxVMDA2OT48VTAwNkQ+PFUwMDYyPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA2ND48VTAwNjU+PFUwMDYzPjxVMDA2OT48VTAwNkQ+PFUwMDYyPjxVMDA2NT4iCislIFBvbCBjb2duZSBkZXMgZGF0ZXMgKGxpIGxvbmd1ZSBjb2duZSksIGMnIGVzdCBvbiBww7QgbcOlbMOlamhleSwgY2EgaSBmw6V0CislIHN0aXRjaMOuIG9uICJkaSIgb3Ugb24gImQnIiBwYSBkdmFudCBsaSBubyBkbyBtb2VzLiBEb25rOgorJSAiTGkgcHJ1bcOuIiBvdSAiTGkgMSBkaSBkamFudsOuIDE5OTkiCislIGRpIGZldnLDrgorJSBkaSBtw6VzcworJSBkJyBhdnJpCislIGRpIG1heQorJSBkaSBkanVuCislIGRpIGRqdWxldGUKKyUgZCcgYXdvdXNzZQorJSBkaSBzZXRpbWJlCislIGQnIG9jdMO0YmUKKyUgZGkgbsO0dmltYmUKKyUgZGkgZGVjaW1iZQorJSBFc3Qgw6draSBjJyBlc3QgcG9zc2liZSBkJyBhdmV1ciAiZGkiIG91ICJkJyIgc29ybG9uIGtpIGxpIG5vIGRvIG1vZXMKKyUgY21pbmNlIGF2b3UgZW5lIHZveWFsZSBvdSBlbmUgY29zc291bmU/CislCislIE5lbmkgOi0oCisKK2RfdF9mbXQgIjxVMDA0Qz48VTAwNjk+PFUwMDIwPjxVMDAyNT48VTAwNDE+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDA2ND48VTAwNjk+PFUwMDIwPjxVMDAyNT48VTAwNDI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJSBDaGFsLCDDp2EgdmEKK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNTk+IgordF9mbXQgICAiPFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4iCithbV9wbSAgICI8VTAwNDE+PFUwMDREPiI7IjxVMDA1MD48VTAwNEQ+IgordF9mbXRfYW1wbSAiPFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD4iCislIHBydW3DriBkam/DuyBkZWwgc2Ftd2lubmUgKDE9bG9uZGkpCitmaXJzdF93ZWVrZGF5IDEKK0VORCBMQ19USU1FCisKK0xDX05BTUUKK25hbWVfZm10ICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKK25hbWVfZ2VuICIiCituYW1lX21yICJNLiIKK25hbWVfbXJzICJNbWUiCituYW1lX21pc3MgIk1sZSIKK25hbWVfbXMgIk1tZSIKK0VORCBMQ19OQU1FCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy93YV9CRUBldXJvIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvd2FfQkVAZXVybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODhiOTA2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvd2FfQkVAZXVybwpAQCAtMCwwICsxLDgzIEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgIC8KKyUKKyUgV2FsbG9vbiBMYW5ndWFnZSBMb2NhbGUgZm9yIEJlbGdpdW0gd2l0aCBFdXJvCislIExhbmd1YWdlOiB3YQorJSBUZXJyaXRvcnk6IEJFCislIE9wdGlvbjogZXVybworJSBEYXRlOiAyMDAyLTAyLTIzCislIFVzZXJzOiBnZW5lcmFsCislIENoYXJzZXQ6IElTTy04ODU5LTE1CislIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJXYWxsb29uIGxvY2FsZSBmb3IgQmVsZ2l1bSB3aXRoIEV1cm8iCitzb3VyY2UgICAgICJGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4iCithZGRyZXNzICAgICI1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAiYnVnLWdsaWJjLWxvY2FsZXNAZ251Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIldhbGxvb24iCit0ZXJyaXRvcnkgICJCZWxnaXVtIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMi0wMi0yMyIKKyUKK2NhdGVnb3J5ICAid2FfQkVAZXVybzoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJ3YV9CRUBldXJvOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgIndhX0JFQGV1cm86MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJ3YV9CRUBldXJvOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAid2FfQkVAZXVybzoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgIndhX0JFQGV1cm86MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAid2FfQkVAZXVybzoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJ3YV9CRUBldXJvOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgIndhX0JFQGV1cm86MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJ3YV9CRUBldXJvOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAid2FfQkVAZXVybzoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJ3YV9CRSIKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCitjb3B5ICJ3YV9CRSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01FU1NBR0VTCitjb3B5ICJ3YV9CRSIKK0VORCBMQ19NRVNTQUdFUworCitMQ19NT05FVEFSWQorY29weSAiZnJfQkVAZXVybyIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJ3YV9CRSIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2NvcHkgIndhX0JFIgorRU5EIExDX1RJTUUKKworTENfUEFQRVIKK2NvcHkgIndhX0JFIgorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQorY29weSAid2FfQkUiCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJ3YV9CRSIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCitjb3B5ICJ3YV9CRSIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK2NvcHkgIndhX0JFIgorRU5EIExDX0FERFJFU1MKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3dhbF9FVCBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3dhbF9FVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzk1M2NkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvd2FsX0VUCkBAIC0wLDAgKzEsMjM3IEBACitjb21tZW50X2NoYXIgICAgJQorZXNjYXBlX2NoYXIgICAgIC8KKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSBTaWRhbWEgbGFuZ3VhZ2UgbG9jYWxlIGZvciBFdGhpb3BpYS4KKyUKKyUgQ2hhcnNldDogVVRGLTgKKyUKKyUgUHJlcGFyZWQgYW5kIGNvbnRyaWJ1dGVkIHRvIGdsaWJjIGJ5IERhbmllbCBZYWNvYiA8bG9jYWxlc0BnZWV6Lm9yZz4uCislCislIFRoaXMgbG9jYWxlIGRhdGEgaGFzIGJlZW4gZGV2ZWxvcGVkIHVuZGVyIHRoZSBZZWhhIFByb2plY3Q6CislICAgICAgaHR0cDovL3llaGEuc291cmNlZm9yZ2UubmV0LworJQorJSBidWlsZCB3aXRoOiBsb2NhbGVkZWYgLWYgVVRGLTggLWkgd2FsX0VUIHdhbF9FVAorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworCitMQ19JREVOVElGSUNBVElPTgorJQordGl0bGUgICAgICAiV2FsYWl0YSBsYW5ndWFnZSBsb2NhbGUgZm9yIEV0aGlvcGlhLiIKK3NvdXJjZSAgICAgIkdlJ2V6IEZyb250aWVyIEZvdW5kYXRpb24iCithZGRyZXNzICAgICI3ODAyIFNvbG9tb24gU2VhbCBEci4sIFNwcmluZ2ZpZWxkLCBWQSAyMjE1MiwgVVNBIgorY29udGFjdCAgICAiIgorZW1haWwgICAgICAibG9jYWxlc0BnZWV6Lm9yZyIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIndhbCIKK3RlcnJpdG9yeSAgIkVUIgorcmV2aXNpb24gICAiMC4xMCIKK2RhdGUgICAgICAgIjIwMDQtMDQtMjUiCislCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgImkxOG46MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NRUFTVVJFTUVOVAorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgInBvc2l4OjE5OTMiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX1RFTEVQSE9ORQorY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJpMThuOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiaTE4bjoyMDAwIjtMQ19USU1FCislCitFTkQgTENfSURFTlRJRklDQVRJT04KKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSAgRXRoaW9waWMgU3BlY2lmYyBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfQ09MTEFURQorY29weSAiYW1fRVQiCitFTkQgTENfQ09MTEFURQorCitMQ19DVFlQRQorY29weSAidGlfRVQiCitFTkQgTENfQ1RZUEUKKworCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorJQorJSAgRXRoaW9waWEgU3BlY2lmYyBhbmQgU2hhcmVkIERhdGE6CislCislJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorCitMQ19NRUFTVVJFTUVOVAorY29weSAidGlfRVQiCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTU9ORVRBUlkKK2NvcHkgInRpX0VUIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgInRpX0VUIgorRU5EIExDX05VTUVSSUMKKworTENfUEFQRVIKK2NvcHkgInRpX0VUIgorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQorY29weSAidGlfRVQiCitFTkQgTENfVEVMRVBIT05FCisKKworJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKyUKKyUgIFNpZGFtYSBTcGVjaWZpYyBEYXRhOgorJQorJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKKworTENfQUREUkVTUworJQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19BRERSRVNTIGNhdGVnb3J5LgorJQorcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA3QT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNTQ+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNjU+PFUwMDI1PjxVMDA3Mj4iCitjb3VudHJ5X25hbWUgICI8VTEyQTI+PFUxMjc1PjxVMTJFRT48VTEzMzU+PFUxMkVCPiIKK2NvdW50cnlfcG9zdCAgIjxVMDA0NT48VTAwNTQ+PFUwMDQ4PiIKK2NvdW50cnlfYWIyICAgIjxVMDA0NT48VTAwNTQ+IgorY291bnRyeV9hYjMgICAiPFUwMDQ1PjxVMDA1ND48VTAwNDg+IgorY291bnRyeV9udW0gICAyMzEgICAlIDIxMCBmb3VuZCBpbiBhdCBsZWFzdCBvbmUgSVNPIDMxNjYgZG9jCislIGNvdW50cnlfY2FyICAgdW5rbm93bgorJSBjb3VudHJ5X2lzYm4gIHVua25vd24sIE5lZWQgSVNPIDIxMDgKK2xhbmdfbmFtZSAgICAgIjxVMTJDOD48VTEyMEI+PFUxMkVEPjxVMTI3Mz48VTEyNzE+IgorbGFuZ19hYiAgICAgICAiPFUwMDc3PjxVMDA2MT48VTAwNkM+IgorbGFuZ190ZXJtICAgICAiPFUwMDc3PjxVMDA2MT48VTAwNkM+IgorbGFuZ19saWIgICAgICAiPFUwMDc3PjxVMDA2MT48VTAwNkM+IgorCisKKyUKK0VORCBMQ19BRERSRVNTCisKKworTENfTUVTU0FHRVMKK2NvcHkgInRpX0VUIgorRU5EIExDX01FU1NBR0VTCisKKworTENfTkFNRQorJQorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OQU1FIGNhdGVnb3J5LgorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorbmFtZV9nZW4gICAgIiIKK25hbWVfbXIgICAgICI8VTEyMUE+PFUxMjMyPjxVMTJFQj4iCituYW1lX21ycyAgICAiPFUxMkFDPjxVMTI3Mz48VTEyQ0I+IgorbmFtZV9taXNzICAgIjxVMTJBQz48VTEyNzM+PFUxMkU5PiIKK25hbWVfbXMgICAgICI8VTEyQUM+PFUxMjczPjxVMTJFOT4iCislCitFTkQgTENfTkFNRQorCisKK0xDX1RJTUUKKyUKKyUgQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyAoJWEpCislCithYmRheSAgICI8VTEyQzg+PFUxMzBCPiAiOy8KKyAgICAgICAgIjxVMTIzMz48VTEyRUQ+PFUxMjk2PiI7LworICAgICAgICAiPFUxMjFCPjxVMTI0Nj48VTEyMzM+IjsvCisgICAgICAgICI8VTEyQTA+PFUxMjI5PjxVMTJDQj4iOy8KKyAgICAgICAgIjxVMTIwMz48VTEyMTk+PFUxMjMzPiI7LworICAgICAgICAiPFUxMkEwPjxVMTIyRD48VTEyNjM+IjsvCisgICAgICAgICI8VTEyNDQ+PFUxMjJCPiAiCislCislIEZ1bGwgd2Vla2RheSBuYW1lcyAoJUEpCislCislIG1vbiAgYWxzbyA8VTEyMzA+PFUxMjlFPgorJSB0dWVzIGFsc28gPFUxMjFCPjxVMTIzMD48VTEyQTg+PFUxMjlFPgorJSB3ZWQgIGFsc28gPFUxMjJFPjxVMTJDQj4KKyUgdGhydSBhbHNvIDxVMTIxMD48VTEyMTk+PFUxMjMzPgorJQorZGF5ICAgICAiPFUxMkM4PjxVMTMwQj4iOy8KKwkiPFUxMjMzPjxVMTJFRD48VTEyOTY+IjsvCisJIjxVMTIxQj48VTEyNDY+PFUxMjMzPjxVMTI5Qj4iOy8KKwkiPFUxMkEwPjxVMTIyOT48VTEyQ0I+IjsvCisJIjxVMTIwMz48VTEyMTk+PFUxMjMzPiI7LworCSI8VTEyQTA+PFUxMjJEPjxVMTI2Mz4iOy8KKwkiPFUxMjQ0PjxVMTIyQj4iCislCislIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzICglYikKKyUKK2FibW9uICAgICI8VTEzMDM+PFUxMjk1PjxVMTJFOT4iOy8KKyAgICAgICAgICI8VTEzNEM+PFUxMjY1PjxVMTIyOT4iOy8KKyAgICAgICAgICI8VTEyMUI+PFUxMjJEPjxVMTI3RD4iOy8KKyAgICAgICAgICI8VTEyQTQ+PFUxMzU1PjxVMTIyOD4iOy8KKyAgICAgICAgICI8VTEyMUM+PFUxMkVEPjxVMDAyMD4iOy8KKyAgICAgICAgICI8VTEzMDE+PFUxMjk1PjxVMDAyMD4iOy8KKyAgICAgICAgICI8VTEzMDE+PFUxMjBCPjxVMTJFRD4iOy8KKyAgICAgICAgICI8VTEyQTY+PFUxMzA4PjxVMTIzNT4iOy8KKyAgICAgICAgICI8VTEyMzQ+PFUxMzU1PjxVMTI3ND4iOy8KKyAgICAgICAgICI8VTEyQTY+PFUxMkFEPjxVMTI3MD4iOy8KKyAgICAgICAgICI8VTEyOTY+PFUxMjZDPjxVMTIxRD4iOy8KKyAgICAgICAgICI8VTEyRjI+PFUxMjM0PjxVMTIxRD4iCislCislIEZ1bGwgbW9udGggbmFtZXMgKCVCKQorJQorbW9uICAgICAgIjxVMTMwMz48VTEyOTU+PFUxMkU5PjxVMTJDOD48VTEyMkE+IjsvCisgICAgICAgICAiPFUxMzRDPjxVMTI2NT48VTEyMjk+PFUxMkM4PjxVMTIyQT4iOy8KKyAgICAgICAgICI8VTEyMUI+PFUxMjJEPjxVMTI3RD4iOy8KKyAgICAgICAgICI8VTEyQTQ+PFUxMzU1PjxVMTIyOD48VTEyMEQ+IjsvCisgICAgICAgICAiPFUxMjFDPjxVMTJFRD4iOy8KKyAgICAgICAgICI8VTEzMDE+PFUxMjk1PiI7LworICAgICAgICAgIjxVMTMwMT48VTEyMEI+PFUxMkVEPiI7LworICAgICAgICAgIjxVMTJBNj48VTEzMDg+PFUxMjM1PjxVMTI3NT4iOy8KKyAgICAgICAgICI8VTEyMzQ+PFUxMzU1PjxVMTI3ND48VTEyMUQ+PFUxMjYwPjxVMTIyRD4iOy8KKyAgICAgICAgICI8VTEyQTY+PFUxMkFEPjxVMTI3MD48VTEyQ0Q+PFUxMjYwPjxVMTIyRD4iOy8KKyAgICAgICAgICI8VTEyOTY+PFUxMjZDPjxVMTIxRD48VTEyNjA+PFUxMjJEPiI7LworICAgICAgICAgIjxVMTJGMj48VTEyMzQ+PFUxMjFEPjxVMTI2MD48VTEyMkQ+IgorJQorJSBFcXVpdmFsZW50IG9mIEFNIFBNCislCislIGFsc28gPFUxMzBCPjxVMTIwQj48VTEyMzM+CislIGFsc28gPFUxMkExPjxVMTIxOD48VTEyMkQ+PFUxMjMyPgorJQorYW1fcG0gICAgIjxVMTIxQj48VTEyMDg+PFUxMkY2PiI7LworICAgICAgICAgIjxVMTI0Mz48VTEyMUI+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uICgleCkKKyUJIiVkLyVtLyVZIgorJQorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA1OT4iCislCislIEFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24gKCVYKQorJQkiJWw6JU06JVMiCislCit0X2ZtdCAiPFUwMDI1PjxVMDA2Qz48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz4iCislCislIEFwcHJvcHJpYXRlIEFNL1BNIHRpbWUgcmVwcmVzZW50YXRpb24gKCVyKQorJQkiJVggJXAiCislCit0X2ZtdF9hbXBtICI8VTAwMjU+PFUwMDU4PjxVMDAyMD48VTAwMjU+PFUwMDcwPiIKKyUKKyUgQXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbiAoJWMpCislCSIlQeGNoyAlQiAlZSDhjIvhiIvhiLMgICVZICVyICVaCislCitkX3RfZm10ICAgICI8VTAwMjU+PFUwMDQxPjxVMTM2Mz48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUxMzBCPjxVMTIwQj48VTEyMzM+LworPFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uIChkYXRlKDEpKQorJQkiJUHhjaMgJUIgJWUg4YyL4YiL4YizICVyICVaICVZIOGMjS/hiIsKKyUKK2RhdGVfZm10ICAgICI8VTAwMjU+PFUwMDQxPjxVMTM2Mz48VTAwMjA+PFUwMDI1PjxVMDA0Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUxMzBCPjxVMTIwQj48VTEyMzM+LworPFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDIwPjxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+LworPFUwMDIwPjxVMTMwRD48VTAwMkY+PFUxMjBCPiIKK0VORCBMQ19USU1FCislCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy93b19TTiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3dvX1NOCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlOTFkYmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy93b19TTgpAQCAtMCwwICsxLDE4MCBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIFdvbG9mIGxvY2FsZSBmb3IgU2VuZWdhbAorJSBTb3VyY2U6IFRoZSBEZWJpYW4gUHJvamVjdAorJSBDb250YWN0OiBDaHJpc3RpYW4gUGVycmllci9TYW1iYSBOZGFvIERpb3AKKyUgRW1haWw6IGJ1YnVsbGVAZGViaWFuLm9yZy9zYW1iYS5uZGFvLmRpb3BAdGlzY2FsaS5mcgorJSBUZWw6ICszMyAtIDEzMDY5OTIyMgorJSBMYW5ndWFnZTogd28KKyUgVGVycml0b3J5OiBTTgorJSBSZXZpc2lvbjogMS4wCislIERhdGU6IDIwMDQtMDktMTUKKyUgVXNlcnM6IGdlbmVyYWwKKyUgQ2hhcnNldDogVVRGLTgKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbworJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIldvbG9mIGxvY2FsZSBmb3IgU2VuZWdhbCIKK3NvdXJjZSAgICAgIlRoZSBEZWJpYW4gUHJvamVjdCIKK2FkZHJlc3MgICAgIiIKK2NvbnRhY3QgICAgIkNocmlzdGlhbiBQZXJyaWVyIgorZW1haWwgICAgICAiYnVidWxsZUBkZWJpYW4ub3JnIgordGVsICAgICAgICAiIgorZmF4ICAgICAgICAiIgorbGFuZ3VhZ2UgICAiV29sb2YiCit0ZXJyaXRvcnkgICJTZW5lZ2FsIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwNC0wOS0wOCIKKyUKK2NhdGVnb3J5ICAibWdfTUc6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAibWdfTUc6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAibWdfTUc6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJtZ19NRzoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgIm1nX01HOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAibWdfTUc6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAibWdfTUc6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAibWdfTUc6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAibWdfTUc6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJtZ19NRzoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgIm1nX01HOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CisKKyUgQWNjZW50cyBhcmUgc2ltcGx5IG9taXR0ZWQgaWYgdGhleSBjYW5ub3QgYmUgcmVwcmVzZW50ZWQuCitpbmNsdWRlICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCisKK3RyYW5zbGl0X2VuZAorCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEKK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfTUVTU0FHRVMKKyUgWWVzPVdhYXcKKyUgTm89ROlldAoreWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNzc+PFUwMDU3PjxVMDA3OT48VTAwNTk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNjQ+PFUwMDQ0PjxVMDA2RT48VTAwNEU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAgICI8VTAwNTg+PFUwMDRGPjxVMDA0Nj48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICAgICAiPFUwMDQzPjxVMDA0Nj48VTAwNDE+IgorbW9uX2RlY2ltYWxfcG9pbnQgICAgICAgICAiPFUwMDJDPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAgICAgIjxVMDAyMD4iCittb25fZ3JvdXBpbmcgICAgICAgICAgICAgIDM7MworcG9zaXRpdmVfc2lnbiAgICAgICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDAKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgICAgMQorbl9jc19wcmVjZWRlcyAgICAgICAgICAgICAwCituX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgICAgICAxCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludCAgICAgICAgICAgICAiPFUwMDJDPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgICAgIiIKK2dyb3VwaW5nICAgICAgICAgICAgICAgICAgMDswCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCislIGRpYidlZXIgKGRpYiksIGFsdGluZSAoYWx0KSwgdGFsYWF0YSAodGFsKSwgYWxsYXJiYSAoYWxsKSwgYWx4YW1lcyAoYWx4KSwKKyUgYWpqdW1hIChhamopLCBnYWF3dSAoZ2FhKQorJSBTdW5kYXksIE1vbmRheS4uLi4KK2FiZGF5ICAgIjxVMDA2ND48VTAwNjk+PFUwMDYyPiI7IjxVMDA2MT48VTAwNkM+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDc0PjxVMDA2MT48VTAwNkM+IjsiPFUwMDYxPjxVMDA2Qz48VTAwNkM+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDZDPjxVMDA3OD4iOyI8VTAwNjE+PFUwMDZBPjxVMDA2QT4iOy8KKyAgICAgICAgIjxVMDA2Nz48VTAwNjE+PFUwMDYxPiIKK2RheSAgICAgIjxVMDA2ND48VTAwNjk+PFUwMDYyPjxVMDAyNz48VTAwNjU+PFUwMDY1PjxVMDA3Mj4iOy8KKyAgICAgICAgIjxVMDA2MT48VTAwNkM+PFUwMDc0PjxVMDA2OT48VTAwNkU+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDc0PjxVMDA2MT48VTAwNkM+PFUwMDYxPjxVMDA2MT48VTAwNzQ+PFUwMDYxPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA2Qz48VTAwNkM+PFUwMDYxPjxVMDA3Mj48VTAwNjI+PFUwMDYxPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA2Qz48VTAwNzg+PFUwMDYxPjxVMDA2RD48VTAwNjU+PFUwMDczPiI7LworICAgICAgICAiPFUwMDYxPjxVMDA2QT48VTAwNkE+PFUwMDc1PjxVMDA2RD48VTAwNjE+IjsvCisgICAgICAgICI8VTAwNjc+PFUwMDYxPjxVMDA2MT48VTAwNzc+PFUwMDc1PiIKKyUgU2Fud2l5J2UsICBmZWVicml5J2UsIG1hcnMsICBhd3JpbCwgbWUsICBzdXdlbiwgc3VsZXQsICB1dXQsIHNlcHRhYW1iYXIsCislIG9rdG9vYmFyLCBub3dhYW1iYXIsIGRlc2FhbWJhci4KK2FibW9uICAgIjxVMDA3Mz48VTAwNjE+PFUwMDZFPiI7IjxVMDA2Nj48VTAwNjU+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2MT48VTAwNzI+IjsiPFUwMDYxPjxVMDA3Nz48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDY1PjxVMDAyMD4iOyI8VTAwNzM+PFUwMDc1PjxVMDA3Nz4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNzU+PFUwMDZDPiI7IjxVMDA3NT48VTAwNzU+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDczPjxVMDA2NT48VTAwNzA+IjsiPFUwMDZGPjxVMDA2Qj48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNkU+PFUwMDZGPjxVMDA3Nz4iOyI8VTAwNjQ+PFUwMDY1PjxVMDA3Mz4iCittb24gICAgICI8VTAwNzM+PFUwMDYxPjxVMDA2RT48VTAwNzc+PFUwMDY5PjxVMDA3OT48VTAwMjc+PFUwMDY1PiI7LworICAgICAgICAiPFUwMDY2PjxVMDA2NT48VTAwNjU+PFUwMDYyPjxVMDA3Mj48VTAwNjk+PFUwMDc5PjxVMDAyNz48VTAwNjU+IjsvCisgICAgICAgICI8VTAwNkQ+PFUwMDYxPjxVMDA3Mj48VTAwNzM+IjsvCisgICAgICAgICI8VTAwNjE+PFUwMDc3PjxVMDA3Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAiPFUwMDZEPjxVMDA2NT4iOy8KKyAgICAgICAgIjxVMDA3Mz48VTAwNzU+PFUwMDc3PjxVMDA2NT48VTAwNkU+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDc1PjxVMDA2Qz48VTAwNjU+PFUwMDc0PiI7LworICAgICAgICAiPFUwMDc1PjxVMDA3NT48VTAwNzQ+IjsvCisgICAgICAgICI8VTAwNzM+PFUwMDY1PjxVMDA3MD48VTAwNzQ+PFUwMDYxPjxVMDA2MT48VTAwNkQ+PFUwMDYyPjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNkY+PFUwMDZCPjxVMDA3ND48VTAwNkY+PFUwMDZGPjxVMDA2Mj48VTAwNjE+PFUwMDcyPiI7LworICAgICAgICAiPFUwMDZFPjxVMDA2Rj48VTAwNzc+PFUwMDYxPjxVMDA2MT48VTAwNkQ+PFUwMDYyPjxVMDA2MT48VTAwNzI+IjsvCisgICAgICAgICI8VTAwNjQ+PFUwMDY1PjxVMDA3Mz48VTAwNjE+PFUwMDYxPjxVMDA2RD48VTAwNjI+PFUwMDYxPjxVMDA3Mj4iCislICVhICVkICViICVZICVUICVaCitkX3RfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDY0PjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDU5PjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUgJWQuJW0uJVkKK2RfZm10ICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJFPjxVMDAyNT48VTAwNkQ+PFUwMDJFPjxVMDAyNT48VTAwNTk+IgorJSAlVAordF9mbXQgICAiPFUwMDI1PjxVMDA1ND4iCithbV9wbSAgICIiOyIiCit0X2ZtdF9hbXBtICIiCislICVhICViICVlICVIOiVNOiVTICVaICVZCitkYXRlX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCitFTkQgTENfVElNRQorCitMQ19QQVBFUgoraGVpZ2h0ICAgMjk3Cit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKKyUgKyVDICVhICVsCit0ZWxfaW50X2ZtdCAgICAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT4vCis8VTAwNkM+IgorJSAlYSAlbAordGVsX2RvbV9mbXQgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNkM+IgorJSAyMjEKK2ludF9wcmVmaXggICAgICI8VTAwMzI+PFUwMDMyPjxVMDAzMT4iCislIDAwCitpbnRfc2VsZWN0ICAgICAiPFUwMDMwPjxVMDAzMD4iCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCittZWFzdXJlbWVudCAgICAxCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorJSAlZCV0JWcldCVtJXQlZgorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+LworPFUwMDI1PjxVMDA2RD48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjY+IgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworJSAlZiVOJWElTiVkJU4lYiVOJXMgJWggJWUgJXIlTiV6ICVUJU4lYyVOCitwb3N0YWxfZm10ICAgICI8VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz4vCis8VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+LworPFUwMDRFPjxVMDAyNT48VTAwN0E+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDYzPjxVMDAyNT48VTAwNEU+IgorY291bnRyeV9hYjIgIjxVMDA0RD48VTAwNDc+IgorY291bnRyeV9hYjMgIjxVMDA0RD48VTAwNDQ+PFUwMDQ3PiIKK2NvdW50cnlfbnVtIDQ1MAorRU5EIExDX0FERFJFU1MKKwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMveGhfWkEgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy94aF9aQQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGY1NmVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMveGhfWkEKQEAgLTAsMCArMSwyNzcgQEAKK2VzY2FwZV9jaGFyICAvCitjb21tZW50X2NoYXIgICUKKworJSBDaGFyc2V0OiBVVEYtOAorCislIENoYW5nZUxvZworJSAwLjMgKDIwMDUtMTAtMTMpOgorJSAgICAgMjAwNS0xMC0xMiBEd2F5bmUgQmFpbGV5IDxkd2F5bmVAdHJhbnNsYXRlLm9yZy56YT4KKyUgICAgICAgLSBBZGRlZCAnQ2hhcnNldDogVVRGLTgnIGluZm9ybWF0aW9uCislICAgICAgIC0gVXBkYXRlIGNvbnRhY3QgaW5mb3JtYXRpb24KKyUgICAgICAgLSBBbGxpZ24gc3BlbGxpbmdzIG9mIG1vbnRoIGFuZCB3ZWVrZGF5IG5hbWVzIHdpdGggRGVwdC4gb2YKKyUgICAgICAgICBBcnQgYW5kIEN1bHR1cmUnczogTXVsdGlsaW5ndWFsIE1hdGhlbWF0aWNzIERpY3Rpb25hcnkKKyUgMC4yICgyMDA0LTExLTAyKToKKyUgICAgIDIwMDQtMTEtMDEgRHdheW5lIEJhaWxleSA8ZHdheW5lQHRyYW5zbGF0ZS5vcmcuemE+CislICAgICAgIC0gQ2hhbmdlIGFsbCBjb250YWN0IGluZm9ybWF0aW9uCislICAgICAgIC0gZF90X2ZtdCwgZGF0ZV9mbXQgY2FobmdlZCBkYXkgbnVtYmVyICVlIHRvICUtZSB0byByZW1vdmUKKyUgICAgICAgICBzcGFjZSBwYWRkaW5nIGluIGRheS4KKyUgICAgICAgLSBSZW1vdmUgLiogZnJvbSB5ZXMvbm9leHByCislICAgICAyMDA0LTAzLTMwIER3YXluZSBCYWlsZXkgPGR3YXluZUB0cmFuc2xhdGUub3JnLnphPgorJSAgICAgICAtIEFkZGVkIGNvdW50cnlfYWIyLzMsIGNvdW50cnlfbnVtCislICAgICAgIC0gQWRkZWQgY291bnRyeV9jYXIKKyUgICAgIDIwMDQtMDMtMjkgRHdheW5lIEJhaWxleSA8ZHdheW5lQHRyYW5zbGF0ZS5vcmcuemE+CislICAgICAgIC0gQWRkZWQgbGFuZ19hYiBhbmQgbGFuZ190ZXJtCislICAgICAyMDA0LTAyLTI3IER3YXluZSBCYWlsZXkgPGR3YXluZUB0cmFuc2xhdGUub3JnLnphPgorJSAgICAgICAtIEFkZCBsYW5nX25hbWUKKyUgMC4xICgyMDAzLTA1LTA4KToKKyUgICAgLSBJbml0aWFsIFhob3NhIGxvY2FsZSBieSBadXphIFNvZnR3YXJlIEZvdW5kYXRpb24KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlhob3NhIGxvY2FsZSBmb3IgU291dGggQWZyaWNhIgorc291cmNlICAgICAiWnV6YSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChUcmFuc2xhdGUub3JnLnphKSIKK2FkZHJlc3MgICAgIlBPIEJveCAyODM2NCwgU3VubnlzaWRlLCAwMTMyLCBTb3V0aCBBZnJpY2EiCitjb250YWN0ICAgICJEd2F5bmUgQmFpbGV5IgorZW1haWwgICAgICAiZHdheW5lQHRyYW5zbGF0ZS5vcmcuemEiCit0ZWwgICAgICAgICIrMjcgMTIgNDYwIDEwOTUiCitmYXggICAgICAgICIrMjcgMTIgNDYwIDEwOTUiCitsYW5ndWFnZSAgICJYaG9zYSIKK3RlcnJpdG9yeSAgIlNvdXRoIEFmcmljYSIKK3JldmlzaW9uICAgIjAuMyIKK2RhdGUgICAgICAgIjIwMDUtMTAtMTMiCislCitjYXRlZ29yeSAgInhoX1pBOjIwMDMiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgInhoX1pBOjIwMDMiO0xDX0NUWVBFCitjYXRlZ29yeSAgInhoX1pBOjIwMDMiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAieGhfWkE6MjAwMyI7TENfVElNRQorY2F0ZWdvcnkgICJ4aF9aQToyMDAzIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgInhoX1pBOjIwMDMiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgInhoX1pBOjIwMDMiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgInhoX1pBOjIwMDMiO0xDX1BBUEVSCitjYXRlZ29yeSAgInhoX1pBOjIwMDMiO0xDX05BTUUKK2NhdGVnb3J5ICAieGhfWkE6MjAwMyI7TENfQUREUkVTUworY2F0ZWdvcnkgICJ4aF9aQToyMDAzIjtMQ19URUxFUEhPTkUKK2NhdGVnb3J5ICAieGhfWkE6MjAwMyI7TENfTUVBU1VSRU1FTlQKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCislIFVzZSB0aGUgY2hhcmFjdGVycyBkZXNjcmliZWQgaW4gdGhlIGNoYXJtYXAgZmlsZSAiaTE4bi50Z3oiCitjb3B5ICJpMThuIgorCit0cmFuc2xpdF9zdGFydAoraW5jbHVkZSAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCitFTkQgTENfQ1RZUEUKKworTENfQ09MTEFURQorJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEgaS5lLgorJSB1c2UgdGhlIHJ1bGVzIHRoZXJlIHdoZW4gbWFraW5nIG9yZGVyZWQgbGlzdHMgb2Ygd29yZHMuCitjb3B5ICJpc28xNDY1MV90MSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCitjb3B5ICJlbl9aQSIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJlbl9aQSIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKKyUgVGhlIGFiYnJldmlhdGlvbnMgZm9yIHRoZSB3ZWVrIGRheXM6CislIC0gQ2F3LCBNdnUsIEJpbiwgVGhhLCBTaW4sIEhsYSwgTWdxCithYmRheSAgICAgICAiPFUwMDQzPjxVMDA2MT48VTAwNzc+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA3Nj48VTAwNzU+IjsvCisgICAgICAgICAgICAiPFUwMDQyPjxVMDA2OT48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDU0PjxVMDA2OD48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA2OT48VTAwNkU+IjsvCisgICAgICAgICAgICAiPFUwMDQ4PjxVMDA2Qz48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2Nz48VTAwNzE+IgorJQorJSBUaGUgZnVsbCBuYW1lcyBvZiB0aGUgd2VlayBkYXlzOgorJSAtIGlDYXdhLCB1TXZ1bG8sIGx3ZXNpQmluaSwgbHdlc2lUaGF0aHUsIHVsd2VTaW5lLCBsd2VzaUhsYW51LCB1TWdxaWJlbG8KK2RheSAgICAgICAgICI8VTAwNjk+PFUwMDQzPjxVMDA2MT48VTAwNzc+PFUwMDYxPiI7LworICAgICAgICAgICAgIjxVMDA3NT48VTAwNEQ+PFUwMDc2PjxVMDA3NT48VTAwNkM+PFUwMDZGPiI7LworICAgICAgICAgICAgIjxVMDA2Qz48VTAwNzc+PFUwMDY1PjxVMDA3Mz48VTAwNjk+PFUwMDQyPjxVMDA2OT48VTAwNkU+PFUwMDY5PiI7LworICAgICAgICAgICAgIjxVMDA2Qz48VTAwNzc+PFUwMDY1PjxVMDA3Mz48VTAwNjk+PFUwMDU0PjxVMDA2OD48VTAwNjE+PFUwMDc0PjxVMDA2OD48VTAwNzU+IjsvCisgICAgICAgICAgICAiPFUwMDc1PjxVMDA2Qz48VTAwNzc+PFUwMDY1PjxVMDA1Mz48VTAwNjk+PFUwMDZFPjxVMDA2NT4iOy8KKyAgICAgICAgICAgICI8VTAwNkM+PFUwMDc3PjxVMDA2NT48VTAwNzM+PFUwMDY5PjxVMDA0OD48VTAwNkM+PFUwMDYxPjxVMDA2RT48VTAwNzU+IjsvCisgICAgICAgICAgICAiPFUwMDc1PjxVMDA0RD48VTAwNjc+PFUwMDcxPjxVMDA2OT48VTAwNjI+PFUwMDY1PjxVMDA2Qz48VTAwNkY+IgorJQorJSBUaGUgYWJicmV2aWF0aW9ucyBmb3IgdGhlIG1vbnRocworJSAtIE1xdSwgTWR1LCBLd2ksIFRzaCwgQ2FuLCBTaWwsIEtoYSwgVGh1LCBNc2ksIER3YSwgTmthLCBNbmcKK2FibW9uICAgICAgICI8VTAwNEQ+PFUwMDcxPjxVMDA3NT4iOyI8VTAwNEQ+PFUwMDY0PjxVMDA3NT4iOy8KKyAgICAgICAgICAgICI8VTAwNEI+PFUwMDc3PjxVMDA2OT4iOyI8VTAwNTQ+PFUwMDczPjxVMDA2OD4iOy8KKyAgICAgICAgICAgICI8VTAwNDM+PFUwMDYxPjxVMDA2RT4iOyI8VTAwNTM+PFUwMDY5PjxVMDA2Qz4iOy8KKyAgICAgICAgICAgICI8VTAwNEI+PFUwMDY4PjxVMDA2MT4iOyI8VTAwNTQ+PFUwMDY4PjxVMDA3NT4iOy8KKyAgICAgICAgICAgICI8VTAwNEQ+PFUwMDczPjxVMDA2OT4iOyI8VTAwNDQ+PFUwMDc3PjxVMDA2MT4iOy8KKyAgICAgICAgICAgICI8VTAwNEU+PFUwMDZCPjxVMDA2MT4iOyI8VTAwNEQ+PFUwMDZFPjxVMDA2Nz4iCislCislIFRoZSBmdWxsIG5hbWVzIG9mIHRoZSBtb250aHMgLQorJSAtIGV5b01xdW5ndSwgZXlvTWR1bWJhLCBleW9Ld2luZGxhLCB1VHNoYXppbXB1emksIHVDYW56aWJlLCBleWVTaWxpbWVsYQorJSAgIGV5ZUtoYWxhLCBleWVUaHVwYSwgZXlvTXNpbnRzaSwgZXllRHdhcmhhLCBleWVOa2FuZ2EsIGV5b01uZ2EKK21vbiAgICAgICAgICI8VTAwNjU+PFUwMDc5PjxVMDA2Rj48VTAwNEQ+PFUwMDcxPjxVMDA3NT48VTAwNkU+PFUwMDY3PjxVMDA3NT4iOy8KKyAgICAgICAgICAgICI8VTAwNjU+PFUwMDc5PjxVMDA2Rj48VTAwNEQ+PFUwMDY0PjxVMDA3NT48VTAwNkQ+PFUwMDYyPjxVMDA2MT4iOy8KKyAgICAgICAgICAgICI8VTAwNjU+PFUwMDc5PjxVMDA2Rj48VTAwNEI+PFUwMDc3PjxVMDA2OT48VTAwNkU+PFUwMDY0PjxVMDA2Qz48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDc1PjxVMDA1ND48VTAwNzM+PFUwMDY4PjxVMDA2MT48VTAwN0E+PFUwMDY5PjxVMDA2RD48VTAwNzA+PFUwMDc1PjxVMDA3QT48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDc1PjxVMDA0Mz48VTAwNjE+PFUwMDZFPjxVMDA3QT48VTAwNjk+PFUwMDYyPjxVMDA2NT4iOy8KKyAgICAgICAgICAgICI8VTAwNjU+PFUwMDc5PjxVMDA2NT48VTAwNTM+PFUwMDY5PjxVMDA2Qz48VTAwNjk+PFUwMDZEPjxVMDA2NT48VTAwNkM+PFUwMDYxPiI7LworICAgICAgICAgICAgIjxVMDA2NT48VTAwNzk+PFUwMDY1PjxVMDA0Qj48VTAwNjg+PFUwMDYxPjxVMDA2Qz48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDY1PjxVMDA3OT48VTAwNjU+PFUwMDU0PjxVMDA2OD48VTAwNzU+PFUwMDcwPjxVMDA2MT4iOy8KKyAgICAgICAgICAgICI8VTAwNjU+PFUwMDc5PjxVMDA2Rj48VTAwNEQ+PFUwMDczPjxVMDA2OT48VTAwNkU+PFUwMDc0PjxVMDA3Mz48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDY1PjxVMDA3OT48VTAwNjU+PFUwMDQ0PjxVMDA3Nz48VTAwNjE+PFUwMDcyPjxVMDA2OD48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDY1PjxVMDA3OT48VTAwNjU+PFUwMDRFPjxVMDA2Qj48VTAwNjE+PFUwMDZFPjxVMDA2Nz48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDY1PjxVMDA3OT48VTAwNkY+PFUwMDREPjxVMDA2RT48VTAwNjc+PFUwMDYxPiIKKyUKKyUgQWJyZXZpYXRlZCBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uIHRvIGJlIHJlZmVyZW5jZWQgYnkgdGhlICIlYyIgZmllbGQgZGVzY3JpcHRvciAtCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDAyRD48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorJSAiJWEiICh3ZWVrZGF5IG5hbWUpLAorJSAiJS1lIiAoZGF5IG9mIG1vbnRoIGFzIGEgZGVjaW1hbCBudW1iZXIpLAorJSAiJWIiIChtb250aCBuYW1lKSwKKyUgIiVZIiAoeWVhciB3aXRoIGNlbnR1cnkgYXMgYSBkZWNpbWFsIG51bWJlciksCislICIlVCIgKDI0LWhvdXIgY2xvY2sgdGltZSBpbiBmb3JtYXQgSEg6TU06U1MpLAorJSAiJVoiIChUaW1lIHpvbmUgbmFtZSkKKyUKKyUgRGF0ZSByZXByZXNlbnRhdGlvbiB0byBiZSByZWZlcmVuY2VkIGJ5IHRoZSAiJXgiIGZpZWxkICUgZGVzY3JpcHRvciAtCislICIlZC8lbS8lWSIsIGRheS9tb250aC95ZWFyIGFzIGRlY2ltYWwgbnVtYmVycyAoMDEvMDEvMjAwMCkuCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDU5PiIKKyUKKyUgVGltZSByZXByZXNlbnRhdGlvbiB0byBiZSByZWZlcmVuY2VkIGJ5IHRoZSAiJVgiIGZpZWxkIGRlc2NyaXB0b3IgLQorJSAiJVQiICgyNC1ob3VyIGNsb2NrIHRpbWUgaW4gZm9ybWF0IEhIOk1NOlNTKQordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNTQ+IgorJQorJSBEZWZpbmUgcmVwcmVzZW50YXRpb24gb2YgYW50ZSBtZXJpZGllbSBhbmQgcG9zdCBtZXJpZGllbSBzdHJpbmdzIC0KKyUgVGhlICIicyBtZWFucyBkZWZhdWx0IHRvICJBTSIgYW5kICJQTSIuCithbV9wbSAgICAgICAiIjsiIgorJQorJSBEZWZpbmUgdGltZSByZXByZXNlbnRhdGlvbiBpbiAxMi1ob3VyIGZvcm1hdCB3aXRoICJhbV9wbSIsIHRvIGJlIHJlZmVyZW5jZWQgYnkgdGhlICIlciIKKyUgZmllbGQgZGVzY3JpcHRvciAtCislIFRoZSAiIiBtZWFucyB0aGF0IHRoaXMgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuCit0X2ZtdF9hbXBtICAiIgorJQorJSBEYXRlIHJlcHJlc2VudGF0aW9uIG5vdCBkZXNjcmliZWQgaW4gSVNPL0lFQyAxNDY1Mi4KKyUgQ29tZXMgb3V0IGFzIC0gIiVhICViICUtZSAlSDolTTolUyAlWiAlWSIKK2RhdGVfZm10ICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDJEPjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCislIHdoaWNoIGlzOgorJSBhYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWUsCislIGRheSBvZiBtb250aCBhcyBhIGRlY2ltYWwgbnVtYmVyICgwMSB0byAzMSksCislIGRheSBvZiBtb250aCBhcyBhIGRlY2ltYWwgbnVtYmVyIHdpdGggbGVhZGluZyBzcGFjZSAoMSB0byAzMSksCislIGhvdXIgKDI0LWhvdXIgY2xvY2spIGFzIGEgZGVjaW1hbCBudW1iZXIgKDAwIHRvIDIzKSwKKyUgbWludXRlIGFzIGEgZGVjaW1hbCBudW1iZXIgKDAwIHRvIDU5KSwKKyUgc2Vjb25kcyBhcyBhIGRlY2ltYWwgbnVtYmVyICgwMCB0byA1OSksCislIHRpbWUtem9uZSBuYW1lLAorJSB5ZWFyIHdpdGggY2VudHVyeSBhcyBhIGRlY2ltYWwgbnVtYmVyLGUuZy4gMjAwMS4KKyUKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCislIFRoZSBhZmZpcm1hdGl2ZSByZXNwb25zZSAtCislICJeW3lZZUVdIgoreWVzZXhwciAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDc5PjxVMDA1OT48VTAwNjU+PFUwMDQ1PjxVMDA1RD4iCislCislIFRoZSBuZWdhdGl2ZSByZXNwb25zZSAtCislICJeW25OaEhdIgorbm9leHByICAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDZFPjxVMDA0RT48VTAwNjg+PFUwMDQ4PjxVMDA1RD4iCislCitFTkQgTENfTUVTU0FHRVMKKworTENfUEFQRVIKK2NvcHkgImVuX1pBIgorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQorY29weSAiZW5fWkEiCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJlbl9aQSIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCislIEZvcm1hdCBmb3IgYWRkcmVzc2luZyBhIHBlcnNvbi4KK25hbWVfZm10ICAgICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz48VTAwMjU+PFUwMDc0Pi8KKzxVMDAyNT48VTAwNkQ+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PiIKKyUgIiVkJXQlZyV0JW0ldCVmIgorJSAiU2FsdXRhdGlvbiIsCislICJFbXB0eSBzdHJpbmcsIG9yIDxTcGFjZT4iLAorJSAiRmlyc3QgZ2l2ZW4gbmFtZSIsCislICJFbXB0eSBzdHJpbmcsIG9yIDxTcGFjZT4iLAorJSAiTWlkZGxlIG5hbWVzIiwKKyUgIkVtcHR5IHN0cmluZywgb3IgPFNwYWNlPiIsCislICJDbGFuIG5hbWVzIgorJQorJSBTYWx1dGF0aW9uIGZvciB1bm1hcnJpZWQgZmVtYWxlcyAtICJOa29zYXphbmEiCituYW1lX21pc3MgICAiPFUwMDRFPjxVMDA2Qj48VTAwNkY+PFUwMDczPjxVMDA2MT48VTAwN0E+PFUwMDYxPjxVMDA2RT48VTAwNjE+IgorJQorJSBTYWx1dGF0aW9uIGZvciBtYWxlcyAtICJNbnVtemFuYSIKK25hbWVfbXIgICAgICI8VTAwNEQ+PFUwMDZFPjxVMDA3NT48VTAwNkQ+PFUwMDdBPjxVMDA2MT48VTAwNkU+PFUwMDYxPiIKKyUKKyUgU2FsdXRhdGlvbiBmb3IgbWFycmllZCBmZW1hbGVzIC0gIk5rb3Npa2F6aSIKK25hbWVfbXJzICAgICI8VTAwNEU+PFUwMDZCPjxVMDA2Rj48VTAwNzM+PFUwMDY5PjxVMDA2Qj48VTAwNjE+PFUwMDdBPjxVMDA2OT4iCislCislIFNhbHV0YXRpb24gdmFsaWQgZm9yIGFsbCBmZW1hbGVzIC0gIiIgKG5vIHRlcm0pCituYW1lX21zICAgICAiIgorRU5EIExDX05BTUUKKworTENfQUREUkVTUworJSBDb3VudHJ5IG5hbWUgaW4gWGhvc2EgLSAiTXphbnRzaSBBZnJpa2EiCitjb3VudHJ5X25hbWUgIjxVMDA0RD48VTAwN0E+PFUwMDYxPjxVMDA2RT48VTAwNzQ+PFUwMDczPjxVMDA2OT48VTAwMjA+LworPFUwMDQxPjxVMDA2Nj48VTAwNzI+PFUwMDY5PjxVMDA2Qj48VTAwNjE+IgorJQorJSBBYmJyZXZpYXRlZCBjb3VudHJ5IHBvc3RhbCBuYW1lIC0gIlpBIgorY291bnRyeV9wb3N0ICI8VTAwNUE+PFUwMDQxPiIKKyUKKyUgTGFuZ3VhZ2UgbmFtZSBpbiBTb3RobyAtICJJc2lYaG9zYSIKK2xhbmdfbmFtZSAiPFUwMDQ5PjxVMDA3Mz48VTAwNjk+PFUwMDU4PjxVMDA2OD48VTAwNkY+PFUwMDczPjxVMDA2MT4iCisKKyUgVU4gR2VuZXZlIDE5NDk6NjggRGlzdGluZ3Vpc2hpbmcgc2lnbnMgb2YgdmVoaWNsZXMgaW4gaW50ZXJuYXRpb25hbCB0cmFmZmljCislIGh0dHA6Ly93d3cudW5lY2Uub3JnL3RyYW5zL2NvbnZlbnRuL2Rpc3Rpbmctc2lnbnMtNS0yMDAxLnBkZgorJSAiWkEiCitjb3VudHJ5X2NhciAgICI8VTAwNUE+PFUwMDQxPiIKKworJSBJU08gNjM5IHR3byBhbmQgdGhyZWUgbGV0dGVyIGxhbmd1YWdlIG5hbWVzCislIHNlZSBodHRwOi8vd3d3LmxvYy5nb3Yvc3RhbmRhcmRzL2lzbzYzOS0yL2VuZ2xhbmduLmh0bWwKK2xhbmdfYWIgICAiPFUwMDc4PjxVMDA2OD4iCitsYW5nX3Rlcm0gIjxVMDA3OD48VTAwNjg+PFUwMDZGPiIKKworJSBSZXByZXNlbnRhdGlvbiBvZiBwb3N0YWwgYWRkcmVzc2VzIChtaW51cyB0aGUgYWRkcmVzc2VlJ3MgbmFtZSkgaW4gU291dGgKKyUgQWZyaWNhLiAoSWdub3JlZCBmb3Igbm93KQorcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKKyUgIiVmJU4lYSVOJWQlTiViJU4lcyAlaCAlZSAlciVOJXogJVQlTiVjJU4iLCB3aGljaCBnaXZlcyAtCislICJmaXJtIG5hbWUiLAorJSAiZW5kIG9mIGxpbmUiLAorJSAiQy9PIGFkZHJlc3MiLAorJSAiZW5kIG9mIGxpbmUiLAorJSAiZGVwYXJ0bWVudCBuYW1lIiwKKyUgIkJ1aWxkaW5nIG5hbWUiLAorJSAiZW5kIG9mIGxpbmUiLAorJSAic3RyZWV0IG9yIGJsb2NrIG5hbWUiLAorJSAic3BhY2UiLAorJSAiaG91c2UgbnVtYmVyIG9yIGRlc2lnbmF0aW9uIiwKKyUgInNwYWNlIiwKKyUgImZsb29yIG51bWJlciIsCislICJzcGFjZSIsCislICJyb29tIG51bWJlciwgZG9vciBkZXNpZ25hdGlvbiIsCislICJlbmQgb2YgbGluZSIsCislICJwb3N0YWwgY29kZSIsCislICJzcGFjZSIsCislICJ0b3duLCBjaXR5IiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgImNvdW50cnkgZGVzaWduYXRpb24gZm9yIHRoZSA8Y291bnRyeV9wb3N0PiBrZXl3b3JkIiwKKyUgImVuZCBvZiBsaW5lCislCisKKyUgSVNPIDMxNjYgY291bnRyeSBudW1iZXIgYW5kIDIgYW5kIDMgbGV0dGVyIGFicmV2aWF0aW9ucworJSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL29ubGluZWRhdC9jb3VudHJpZXMuaHRtbAorJSAiWkEiLCAiWkFGIgorY291bnRyeV9udW0gICA3MTAKK2NvdW50cnlfYWIyICAgIjxVMDA1QT48VTAwNDE+IgorY291bnRyeV9hYjMgICAiPFUwMDVBPjxVMDA0MT48VTAwNDY+IgorCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMveWlfVVMgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy95aV9VUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzRlZWVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMveWlfVVMKQEAgLTAsMCArMSwyMDEgQEAKK2NvbW1lbnRfY2hhciAlCitlc2NhcGVfY2hhciAgLworJSBjaGFyc2V0ICJVVEYtOCIKKyUgRGlzdHJpYnV0aW9uIGFuZCB1c2UgaXMgZnJlZSwgYWxzbyBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKyUKKyUgMjAwMy0wOC0xNjogY29ycmVjdGlvbnMgZnJvbSBSYXBoYWVsIEZpbmtlbCA8cmFwaGFlbEBjcy51a3kuZWR1PgorJQorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgIllpZGRpc2ggTGFuZ3VhZ2UgbG9jYWxlIGZvciB0aGUgVVNBIgorc291cmNlICJodHRwOi8vLy93d3cudXlpcC5vcmcvLyIKK2FkZHJlc3MgIiIKK2NvbnRhY3QgIlBhYmxvIFNhcmF0eGFnYSIKK2VtYWlsICJwYWJsb0BtYW5kcmFrZXNvZnQuY29tIgordGVsICIiCitmYXggIiIKK2xhbmd1YWdlICJZaWRkaXNoIgordGVycml0b3J5ICJVU0EiCityZXZpc2lvbiAiMC40IgorZGF0ZSAiMjAwMy0wOC0xNiIKKworY2F0ZWdvcnkgInlpX1VTOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAieWlfVVM6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgInlpX1VTOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAieWlfVVM6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICJ5aV9VUzoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgInlpX1VTOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICJ5aV9VUzoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAieWlfVVM6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICJ5aV9VUzoyMDAwIjtMQ19NRUFTVVJFTUVOVAorY2F0ZWdvcnkgInlpX1VTOjIwMDAiO0xDX1RFTEVQSE9ORQorY2F0ZWdvcnkgInlpX1VTOjIwMDAiO0xDX0FERFJFU1MKKworJSBJU08vSUVDIDE0NjUyOiBDb252ZXJ0ZWQgY29tbWVudHMgdG8gTENfSURFTlRJRklDQVRJT04KKyUgIGFkZGVkIExDX1BBUEVSLCBMQ19NRUFTVVJFTUVOVCwgTENfSURFTlRJRklDQVRJT04sIExDX0FERFJFU1MKKyUgLS0gbWNraW5zdHJ5QGNvbXB1dGVyLm9yZywgMjAwMC0wNy0wMworCitFTkQgTENfSURFTlRJRklDQVRJT04KKworCitMQ19BRERSRVNTCitwb3N0YWxfZm10ICI8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDYyPjxVMDAyNT48VTAwNEU+LworPFUwMDI1PjxVMDA3Mz48VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDM1PjxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNDM+PFUwMDI1PjxVMDA3QT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X25hbWUgIjxVMDVEMz48VTA1RDk+PFUwMDIwPjxVMDVFND48VTA1QkY+PFUwNUQwPjxVMDVFOD48VTA1RDA+PFUwNUYyPjxVMDVFMD48VTA1RDk+PFUwNUU3PjxVMDVEOD48VTA1RTI+PFUwMDIwPjxVMDVFOT48VTA1RDg+PFUwNUQwPjxVMDVCNz48VTA1RDg+PFUwNURGPiIKK2NvdW50cnlfcG9zdCAiVVNBIgorY291bnRyeV9hYjIgIlVTIgorY291bnRyeV9hYjMgIlVTQSIKK2NvdW50cnlfbnVtIDg0MAorY291bnRyeV9jYXIgIlVTQSIKKyUgRklYTUUgQ2hlY2sgd2hpY2ggaXNibiBmb3IgWWlkZGlzaCBpbiBVU0EKK2NvdW50cnlfaXNibiAiMCIKK2xhbmdfbmFtZSAiPFUwNUQ5PjxVMDVEOT48VTA1QjQ+PFUwNUQzPjxVMDVEOT48VTA1RTk+IgorbGFuZ19hYiAieWkiCitsYW5nX3Rlcm0gInlpZCIKK2xhbmdfbGliICJ5aWQiCitFTkQgTENfQUREUkVTUworCitMQ19DVFlQRQorY29weSAiaTE4biIKKwordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgInRyYW5zbGl0X2NvbWJpbmluZyI7IiIKKworJSBpZiBkaWdyYXBocyBhcmUgbm90IGF2YWlsYWJsZSAodGhpcyBpcyB0aGUgY2FzZSB3aXRoIGlzby04ODU5LTgpCislIHRoZW4gdXNlIHRoZSBzaW5nbGUgbGV0dGVycworPFUwNUYwPiAiPFUwNUQ1PjxVMDVENT4iOyI8VTAwNzc+PFUwMDc3PiIKKzxVMDVGMT4gIjxVMDVENT48VTA1RDk+IjsiPFUwMDc3PjxVMDA2QT4iCis8VTA1RjI+ICI8VTA1RDk+PFUwNUQ5PiI7IjxVMDA2QT48VTAwNkE+IgordHJhbnNsaXRfZW5kCisKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCitjb3B5ICJpc28xNDY1MV90MSIKKworY29sbGF0aW5nLXN5bWJvbCAgPGItaC15aT4KK2NvbGxhdGluZy1lbGVtZW50IDxCKydILT4gZnJvbSAiPFUwNUQxPjxVMDVCRj4iCitjb2xsYXRpbmctc3ltYm9sICA8ay1tLXlpPgorY29sbGF0aW5nLWVsZW1lbnQgPEsrLk1IPiBmcm9tICI8VTA1REI+PFUwNUJDPiIKK2NvbGxhdGluZy1zeW1ib2wgIDxwLW0teWk+Citjb2xsYXRpbmctZWxlbWVudCA8UCsuTUg+IGZyb20gIjxVMDVFND48VTA1QkM+IgorY29sbGF0aW5nLXN5bWJvbCAgPHAtaC15aT4KK2NvbGxhdGluZy1lbGVtZW50IDxQKydILT4gZnJvbSAiPFUwNUU0PjxVMDVCRj4iCitjb2xsYXRpbmctc3ltYm9sICA8cy1oLXlpPgorY29sbGF0aW5nLWVsZW1lbnQgPFNoJ0guTD4gZnJvbSAiPFUwNUU5PjxVMDVDMj4iCitjb2xsYXRpbmctc3ltYm9sICA8dC1tLXlpPgorY29sbGF0aW5nLWVsZW1lbnQgPFQrLk1IPiBmcm9tICI8VTA1RUE+PFUwNUJDPiIKKworcmVvcmRlci1hZnRlciA8YmV0PgorPGItaC15aT4KK3Jlb3JkZXItYWZ0ZXIgPHlvZD4KKzxrLW0teWk+CityZW9yZGVyLWFmdGVyIDxheWluPgorPHAtbS15aT4KKzxwLWgteWk+CityZW9yZGVyLWFmdGVyIDxzaGluPgorPHMtaC15aT4KKzx0LW0teWk+CisKK3Jlb3JkZXItYWZ0ZXIgPFUwNUQxPgorPEIrJ0gtPgk8Yi1oLXlpPjs8UENUPjtJR05PUkU7SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDVENT4KKzxVMDVGMD4JIjx2YXY+PHZhdj4iOyI8TElHPjxMSUc+IjtJR05PUkU7SUdOT1JFCis8VTA1RjE+CSI8dmF2Pjx5b2Q+IjsiPExJRz48TElHPiI7SUdOT1JFO0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTA1RDk+Cis8VTA1RjI+CSI8eW9kPjx5b2Q+IjsiPExJRz48TElHPiI7SUdOT1JFO0lHTk9SRQorPEsrLk1IPgk8ay1tLXlpPjs8UENUPjtJR05PUkU7SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDVFMj4KKzxQKy5NSD4JPHAtbS15aT47PFBDVD47SUdOT1JFO0lHTk9SRQorPFArJ0gtPgk8cC1oLXlpPjs8UENUPjtJR05PUkU7SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDVFOT4KKzxTaCdILkw+CTxzLWgteWk+OzxQQ1Q+O0lHTk9SRTtJR05PUkUKKzxUKy5NSD4JPHQtbS15aT47PFBDVD47SUdOT1JFO0lHTk9SRQorCityZW9yZGVyLWVuZAorCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgIjxVMDA1NT48VTAwNTM+PFUwMDQ0PjxVMDAyMD4iCitjdXJyZW5jeV9zeW1ib2wgICAiPFUwMDI0PiIKK21vbl9kZWNpbWFsX3BvaW50ICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAzOzMKK3Bvc2l0aXZlX3NpZ24gICAgICIiCituZWdhdGl2ZV9zaWduICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgIDIKK2ZyYWNfZGlnaXRzICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgIDEKK25fY3NfcHJlY2VkZXMgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgIDEKK3Bfc2lnbl9wb3NuICAgICAgIDIKK25fc2lnbl9wb3NuICAgICAgIDIKK0VORCBMQ19NT05FVEFSWQorCitMQ19URUxFUEhPTkUKK2NvcHkgImVuX1VTIgorRU5EIExDX1RFTEVQSE9ORQorCitMQ19QQVBFUgorY29weSAiZW5fVVMiCitFTkQgTENfUEFQRVIKKworTENfTUVBU1VSRU1FTlQKK2NvcHkgImVuX1VTIgorRU5EIExDX01FQVNVUkVNRU5UCisKK0xDX05VTUVSSUMKK2NvcHkgImVuX1VTIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorYWJkYXkgICAiPFUwNUQ2PjxVMDVENT48VTA1RTA+PFUwMDI3PiI7IjxVMDVERT48VTA1RDA+PFUwNUI4PjxVMDVFMD48VTAwMjc+IjsiPFUwNUQzPjxVMDVEOT48VTA1RTA+PFUwMDI3PiI7LworICAgICAgICAiPFUwNURFPjxVMDVEOT48VTA1RDg+PFUwMDI3PiI7IjxVMDVEMz48VTA1RDA+PFUwNUI4PjxVMDVFMD48VTAwMjc+IjsiPFUwNUU0PjxVMDVCRj48VTA1RTg+PFUwNUYyPjxVMDVCNz48VTAwMjc+IjsvCisJIjxVMDVFOT48VTA1RDE+PFUwNUVBPiIKK2RheSAgICAgIjxVMDVENj48VTA1RDU+PFUwNUUwPjxVMDVEOD48VTA1RDk+PFUwNUU3PiI7LworICAgICAgICAiPFUwNURFPjxVMDVEMD48VTA1Qjg+PFUwNUUwPjxVMDVEOD48VTA1RDk+PFUwNUU3PiI7LworICAgICAgICAiPFUwNUQzPjxVMDVEOT48VTA1RTA+PFUwNUUxPjxVMDVEOD48VTA1RDk+PFUwNUU3PiI7LworICAgICAgICAiPFUwNURFPjxVMDVEOT48VTA1RDg+PFUwNUYwPjxVMDVEMD48VTA1Qjg+PFUwNURBPiI7LworICAgICAgICAiPFUwNUQzPjxVMDVEMD48VTA1Qjg+PFUwNUUwPjxVMDVFMj48VTA1RTg+PFUwNUU5PjxVMDVEOD48VTA1RDk+PFUwNUU3PiI7LworICAgICAgICAiPFUwNUU0PjxVMDVCRj48VTA1RTg+PFUwNUYyPjxVMDVCNz48VTA1RDg+PFUwNUQ5PjxVMDVFNz4iOy8KKyAgICAgICAgIjxVMDVFOT48VTA1RDE+PFUwNUVBPiIKK21vbiAgICAgIjxVMDVEOT48VTA1RDA+PFUwNUI3PjxVMDVFMD48VTA1RDU+PFUwNUQwPjxVMDVCNz48VTA1RTg+IjsvCisJIjxVMDVFND48VTA1QkY+PFUwNUUyPjxVMDVEMT48VTA1RTg+PFUwNUQ1PjxVMDVEMD48VTA1Qjc+PFUwNUU4PiI7LworICAgICAgICAiPFUwNURFPjxVMDVEMD48VTA1Qjc+PFUwNUU4PjxVMDVFNT4iOy8KKyAgICAgICAgIjxVMDVEMD48VTA1Qjc+PFUwNUU0PjxVMDVCQz48VTA1RTg+PFUwNUQ5PjxVMDVEQz4iOy8KKyAgICAgICAgIjxVMDVERT48VTA1RjI+PFUwNUI3PiI7LworICAgICAgICAiPFUwNUQ5PjxVMDVENT48VTA1RTA+PFUwNUQ5PiI7LworICAgICAgICAiPFUwNUQ5PjxVMDVENT48VTA1REM+PFUwNUQ5PiI7LworICAgICAgICAiPFUwNUQwPjxVMDVGMT48VTA1RDI+PFUwNUQ1PjxVMDVFMT48VTA1RDg+IjsvCisgICAgICAgICI8VTA1RTE+PFUwNUUyPjxVMDVFND48VTA1QkM+PFUwNUQ4PjxVMDVFMj48VTA1REU+PFUwNUQxPjxVMDVFMj48VTA1RTg+IjsvCisgICAgICAgICI8VTA1RDA+PFUwNUI4PjxVMDVFNz48VTA1RDg+PFUwNUQwPjxVMDVCOD48VTA1RDE+PFUwNUUyPjxVMDVFOD4iOy8KKyAgICAgICAgIjxVMDVFMD48VTA1RDA+PFUwNUI4PjxVMDVGMD48VTA1RTI+PFUwNURFPjxVMDVEMT48VTA1RTI+PFUwNUU4PiI7LworICAgICAgICAiPFUwNUQzPjxVMDVFMj48VTA1RTY+PFUwNUUyPjxVMDVERT48VTA1RDE+PFUwNUUyPjxVMDVFOD4iCithYm1vbiAgICI8VTA1RDk+PFUwNUQwPjxVMDVCNz48VTA1RTA+IjsiPFUwNUU0PjxVMDVCRj48VTA1RTI+PFUwNUQxPiI7LworICAgICAgICAiPFUwNURFPjxVMDVEMD48VTA1Qjc+PFUwNUU4PiI7IjxVMDVEMD48VTA1Qjc+PFUwNUU0PjxVMDVCQz48VTA1RTg+IjsvCisgICAgICAgICI8VTA1REU+PFUwNUYyPjxVMDVCNz48VTAwMjA+IjsiPFUwNUQ5PjxVMDVENT48VTA1RTA+IjsvCisgICAgICAgICI8VTA1RDk+PFUwNUQ1PjxVMDVEQz4iOyI8VTA1RDA+PFUwNUYxPjxVMDVEMj4iOy8KKyAgICAgICAgIjxVMDVFMT48VTA1RTI+PFUwNUU0PjxVMDVCQz4iOyI8VTA1RDA+PFUwNUI4PjxVMDVFNz48VTA1RDg+IjsvCisgICAgICAgICI8VTA1RTA+PFUwNUQwPjxVMDVCOD48VTA1RjA+IjsiPFUwNUQzPjxVMDVFMj48VTA1RTY+IgorZF90X2ZtdCAiPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2MT4iCitkX2ZtdCAgICI8VTAwMjU+PFUwMDY0PjxVMDAyRj48VTAwMjU+PFUwMDZEPjxVMDAyRj48VTAwMjU+PFUwMDc5PiIKK3RfZm10ICAgIjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+IgorYW1fcG0gICAiPFUwMDQxPjxVMDA0RD4iOyI8VTAwNTA+PFUwMDREPiIKK3RfZm10X2FtcG0gICI8VTAwMjU+PFUwMDQ5PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDUwPiIKK2NhbF9kaXJlY3Rpb24JMworRU5EIExDX1RJTUUKKworTENfTUVTU0FHRVMKK3llc2V4cHIgIjxVMDA1RT48VTAwNUI+PFUwMDU5PjxVMDA3OT48VTA1RDk+PFUwMDVEPjxVMDAyRT48VTAwMkE+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNEU+PFUwMDZFPjxVMDVFMD48VTA1RTc+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgoreWVzc3RyCSI8VTA1RDk+PFUwNUQwPjxVMDVCOD4iCitub3N0cgkiPFUwNUU3PjxVMDVGMj48VTA1REY+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX05BTUUKKyUgRklYTUUKK2NvcHkgImVuX1VTIgorRU5EIExDX05BTUUKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3lvX05HIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMveW9fTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE1ZGM3OAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3lvX05HCkBAIC0wLDAgKzEsNTExIEBACitlc2NhcGVfY2hhciAvCitjb21tZW50X2NoYXIgJQorJQorJSBZb3J1YmEgbGFuZ3VhZ2UgbG9jYWxlIGZvciBOaWdlcmlhCislIFNvdXJjZTogCislIENvbnRhY3Q6IFBhYmxvIFNhcmF0eGFnYQorJSBFbWFpbDogcGFibG9AbWFuZHJpdmEuY29tCislIExhbmd1YWdlOiB5bworJSBUZXJyaXRvcnk6IE5HCislIFJldmlzaW9uOiAwLjIKKyUgRGF0ZTogMjAwNS0xMS0yMQorJSBVc2VyczogZ2VuZXJhbAorJSBDaGFyc2V0OiBVVEYtOAorJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCislIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiWW9ydWJhIGxvY2FsZSBmb3IgTmlnZXJpYSIKK3NvdXJjZSAgICAgIiIKK2FkZHJlc3MgICAgIiIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgInBhYmxvQG1hbmRyaXZhLmNvbSIKK3RlbCAgICAgICAgIiIKK2ZheCAgICAgICAgIiIKK2xhbmd1YWdlICAgIllvcnViYSIKK3RlcnJpdG9yeSAgIk5pZ2VyaWEiCityZXZpc2lvbiAgICIwLjIiCitkYXRlICAgICAgICIyMDA1LTExLTIwIgorJQorY2F0ZWdvcnkgICJ5b19ORzoyMDAwIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJ5b19ORzoyMDAwIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJ5b19ORzoyMDAwIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgInlvX05HOjIwMDAiO0xDX1RJTUUKK2NhdGVnb3J5ICAieW9fTkc6MjAwMCI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJ5b19ORzoyMDAwIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJ5b19ORzoyMDAwIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJ5b19ORzoyMDAwIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJ5b19ORzoyMDAwIjtMQ19OQU1FCitjYXRlZ29yeSAgInlvX05HOjIwMDAiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAieW9fTkc6MjAwMCI7TENfVEVMRVBIT05FCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DT0xMQVRFCisKKyUgWW9ydWJhIHVzZXMgdGhlIGZvbGxvd2luZyBleHRyYSBsZXR0ZXJzOgorJSBlZG90YmVsb3csIG9kb3RiZWxvdywgc2RvdGJlbG93CislIHBsdXMgYWN1dGUgYW5kIGdyYXZlIGNvbWJpbmluZyBtYXJrcyBvdmVyIHZvd2VscyBhbmQgbgorJSBvZiB0aG9zZSwgdGhlIGZvbGxvd2luZyBoYXZlIHByZWNvbWJpbmVkIGZvcm1zOgorJSBhYWN1dGUsIGVhY3V0ZSwgaWFjdXRlLCBvYWN1dGUsIHVhY3V0ZSwgbmFjdXRlCislIGFncmF2ZSwgZWdyYXZlLCBpZ3JhdmUsIG9ncmF2ZSwgdWdyYXZlLCBuZ3JhdmUKKyUgKiBtIGFuZCBuIG1heSBiZSBuYXphbGl6YXRpb24gbWFya3Mgd2hlbiB0aGV5IGZvbGxvdyBhIHZvd2VsOworJSAgIG9yIHRoZXkgY2FuIGJlIHZvY2FsaWMsIGluIHN1Y2ggY2FzZSB0aGV5IGdldCB0aGUgdGhyZWUKKyUgICB0b25lcywgYW5kIG1pZGRsZSB0b25lIGlzIG1hcmtlZCB3aXRoIGEgbWFjcm9uCislICogYSBzYW1lIHZvd2VsIHdpdGggZm9sbG93aW5nIHVwL2Rvd24gb3IgZG93bi91cCB0b25lcyAKKyUgICBtYXkgYmUgd3JpdHRlbiB3aXRoIHJlc3BlY3RpdmVseSBhIGNpcmN1bWZsZXggb3IgYSBjYXJvbiwKKyUgICBlZzogw6HDoCA9IMOiLCDDoMOhID0gx44KKyUgKiBvbGQgb3J0aG9ncmFwaHkgYWxzbyBoYXMgdGlsZGUgb24gdm93ZWxzLCBidXQgaXMgZGVwcmVjYXRlZAorJSAgIChub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyB5b19ORyBmaWxlKQorJSAqIGluZm8gZnJvbTogaHR0cDovL3d3dy5la2kuZWUvbGV0dGVyCislCislIG9yZGVyOiBhLCBiLCBjLCBkLCBlLCBlLiwgZiwgZywgZ2IsIGgsIGksIGosIGssIGwsIG0sIG4sIG8sIG8uLCBwCislIFtxXSwgciwgcywgcy4sIHQsIHUsIFt2XSwgdywgW3hdLCB5LCBbel0KKworY29weSAiaXNvMTQ2NTFfdDEiCisKKyUgZGlncmFwaHMgKGdiKQorY29sbGF0aW5nLXN5bWJvbCAgPGctYi15bz4KK2NvbGxhdGluZy1lbGVtZW50IDxHLUI+IGZyb20gIjxVMDA0Nz48VTAwNDI+IgorY29sbGF0aW5nLWVsZW1lbnQgPGctYj4gZnJvbSAiPFUwMDY3PjxVMDA2Mj4iCitjb2xsYXRpbmctZWxlbWVudCA8Ry1iPiBmcm9tICI8VTAwNDc+PFUwMDYyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxnLUI+IGZyb20gIjxVMDA2Nz48VTAwNDI+IgorJSBiZWxvd2RvdCAo4bq5LCDhu40sIMiZKQorY29sbGF0aW5nLXN5bWJvbCAgPGViZWxvd2RvdD4KK2NvbGxhdGluZy1lbGVtZW50IDxFXz4gIGZyb20gIjxVMDA0NT48VTAzMjM+IgorY29sbGF0aW5nLWVsZW1lbnQgPGVfPiAgZnJvbSAiPFUwMDY1PjxVMDMyMz4iCitjb2xsYXRpbmctZWxlbWVudCA8RV8nPiBmcm9tICI8VTFFQjg+PFUwMzAxPiIKK2NvbGxhdGluZy1lbGVtZW50IDxlXyc+IGZyb20gIjxVMUVCOT48VTAzMDE+IgorY29sbGF0aW5nLWVsZW1lbnQgPEVfYD4gZnJvbSAiPFUxRUI4PjxVMDMwMD4iCitjb2xsYXRpbmctZWxlbWVudCA8ZV9gPiBmcm9tICI8VTFFQjk+PFUwMzAwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxFXzInPiBmcm9tICI8VTAwNDU+PFUwMzIzPjxVMDMwMT4iCitjb2xsYXRpbmctZWxlbWVudCA8ZV8yJz4gZnJvbSAiPFUwMDY1PjxVMDMyMz48VTAzMDE+IgorY29sbGF0aW5nLWVsZW1lbnQgPEVfMmA+IGZyb20gIjxVMDA0NT48VTAzMjM+PFUwMzAwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxlXzJgPiBmcm9tICI8VTAwNjU+PFUwMzIzPjxVMDMwMD4iCitjb2xsYXRpbmctc3ltYm9sICA8b2JlbG93ZG90PgorY29sbGF0aW5nLWVsZW1lbnQgPE9fPiAgZnJvbSAiPFUwMDRGPjxVMDMyMz4iCitjb2xsYXRpbmctZWxlbWVudCA8b18+ICBmcm9tICI8VTAwNkY+PFUwMzIzPiIKK2NvbGxhdGluZy1lbGVtZW50IDxPXyc+IGZyb20gIjxVMUVDQz48VTAzMDE+IgorY29sbGF0aW5nLWVsZW1lbnQgPG9fJz4gZnJvbSAiPFUxRUNEPjxVMDMwMT4iCitjb2xsYXRpbmctZWxlbWVudCA8T19gPiBmcm9tICI8VTFFQ0M+PFUwMzAwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxvX2A+IGZyb20gIjxVMUVDRD48VTAzMDA+IgorY29sbGF0aW5nLWVsZW1lbnQgPE9fMic+IGZyb20gIjxVMDA0Rj48VTAzMjM+PFUwMzAxPiIKK2NvbGxhdGluZy1lbGVtZW50IDxvXzInPiBmcm9tICI8VTAwNkY+PFUwMzIzPjxVMDMwMT4iCitjb2xsYXRpbmctZWxlbWVudCA8T18yYD4gZnJvbSAiPFUwMDRGPjxVMDMyMz48VTAzMDA+IgorY29sbGF0aW5nLWVsZW1lbnQgPG9fMmA+IGZyb20gIjxVMDA2Rj48VTAzMjM+PFUwMzAwPiIKK2NvbGxhdGluZy1zeW1ib2wgIDxzYmVsb3dkb3Q+Citjb2xsYXRpbmctZWxlbWVudCA8U18+IGZyb20gIjxVMDA1Mz48VTAzMjM+IgorY29sbGF0aW5nLWVsZW1lbnQgPHNfPiBmcm9tICI8VTAwNzM+PFUwMzIzPiIKKyUgYWN1dGUgKMOhw6nDreG4v8WEw7PDujsgZm9yIGFjdXRlIG9uIOG6ueG7jSBsb29rIGFib3ZlKQorY29sbGF0aW5nLWVsZW1lbnQgPEEnPiBmcm9tICI8VTAwNDE+PFUwMzAxPiIKK2NvbGxhdGluZy1lbGVtZW50IDxhJz4gZnJvbSAiPFUwMDYxPjxVMDMwMT4iCitjb2xsYXRpbmctZWxlbWVudCA8RSc+IGZyb20gIjxVMDA0NT48VTAzMDE+IgorY29sbGF0aW5nLWVsZW1lbnQgPGUnPiBmcm9tICI8VTAwNjU+PFUwMzAxPiIKK2NvbGxhdGluZy1lbGVtZW50IDxJJz4gZnJvbSAiPFUwMDQ5PjxVMDMwMT4iCitjb2xsYXRpbmctZWxlbWVudCA8aSc+IGZyb20gIjxVMDA2OT48VTAzMDE+IgorY29sbGF0aW5nLWVsZW1lbnQgPE0nPiBmcm9tICI8VTAwNEQ+PFUwMzAxPiIKK2NvbGxhdGluZy1lbGVtZW50IDxtJz4gZnJvbSAiPFUwMDZEPjxVMDMwMT4iCitjb2xsYXRpbmctZWxlbWVudCA8Tic+IGZyb20gIjxVMDA0RT48VTAzMDE+IgorY29sbGF0aW5nLWVsZW1lbnQgPG4nPiBmcm9tICI8VTAwNkU+PFUwMzAxPiIKK2NvbGxhdGluZy1lbGVtZW50IDxPJz4gZnJvbSAiPFUwMDRGPjxVMDMwMT4iCitjb2xsYXRpbmctZWxlbWVudCA8byc+IGZyb20gIjxVMDA2Rj48VTAzMDE+IgorY29sbGF0aW5nLWVsZW1lbnQgPFUnPiBmcm9tICI8VTAwNTU+PFUwMzAxPiIKK2NvbGxhdGluZy1lbGVtZW50IDx1Jz4gZnJvbSAiPFUwMDc1PjxVMDMwMT4iCislIGdyYXZlICjDoMOow6xtzIDHucOyw7k7IGZvciBncmF2ZSBvbiDhurnhu40gbG9vayBhYm92ZSkKK2NvbGxhdGluZy1lbGVtZW50IDxBYD4gZnJvbSAiPFUwMDQxPjxVMDMwMD4iCitjb2xsYXRpbmctZWxlbWVudCA8YWA+IGZyb20gIjxVMDA2MT48VTAzMDA+IgorY29sbGF0aW5nLWVsZW1lbnQgPEVgPiBmcm9tICI8VTAwNDU+PFUwMzAwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxlYD4gZnJvbSAiPFUwMDY1PjxVMDMwMD4iCitjb2xsYXRpbmctZWxlbWVudCA8SWA+IGZyb20gIjxVMDA0OT48VTAzMDA+IgorY29sbGF0aW5nLWVsZW1lbnQgPGlgPiBmcm9tICI8VTAwNjk+PFUwMzAwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxNYD4gZnJvbSAiPFUwMDREPjxVMDMwMD4iCitjb2xsYXRpbmctZWxlbWVudCA8bWA+IGZyb20gIjxVMDA2RD48VTAzMDA+IgorY29sbGF0aW5nLWVsZW1lbnQgPE5gPiBmcm9tICI8VTAwNEU+PFUwMzAwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxuYD4gZnJvbSAiPFUwMDZFPjxVMDMwMD4iCitjb2xsYXRpbmctZWxlbWVudCA8T2A+IGZyb20gIjxVMDA0Rj48VTAzMDA+IgorY29sbGF0aW5nLWVsZW1lbnQgPG9gPiBmcm9tICI8VTAwNkY+PFUwMzAwPiIKK2NvbGxhdGluZy1lbGVtZW50IDxVYD4gZnJvbSAiPFUwMDU1PjxVMDMwMD4iCitjb2xsYXRpbmctZWxlbWVudCA8dWA+IGZyb20gIjxVMDA3NT48VTAzMDA+IgorJSBtYWNyb24gKG3MhSwgbsyFOyBub3QgaW1wbGVtZW50ZWQgb24gb3RoZXIgbGV0dGVycykKK2NvbGxhdGluZy1lbGVtZW50IDxNLT4gZnJvbSAiPFUwMDREPjxVMDMwND4iCitjb2xsYXRpbmctZWxlbWVudCA8bS0+IGZyb20gIjxVMDA2RD48VTAzMDQ+IgorY29sbGF0aW5nLWVsZW1lbnQgPE4tPiBmcm9tICI8VTAwNEU+PFUwMzA0PiIKK2NvbGxhdGluZy1lbGVtZW50IDxuLT4gZnJvbSAiPFUwMDZFPjxVMDMwND4iCislIGNpcmN1bWZsZXggKMOiw6rhurnMgsOuw7Thu43MgsO7KQorY29sbGF0aW5nLWVsZW1lbnQgPEEvPj4gZnJvbSAiPFUwMDQxPjxVMDMwMj4iCitjb2xsYXRpbmctZWxlbWVudCA8YS8+PiBmcm9tICI8VTAwNjE+PFUwMzAyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxFLz4+IGZyb20gIjxVMDA0NT48VTAzMDI+IgorY29sbGF0aW5nLWVsZW1lbnQgPGUvPj4gZnJvbSAiPFUwMDY1PjxVMDMwMj4iCitjb2xsYXRpbmctZWxlbWVudCA8RV8vPj4gZnJvbSAiPFUxRUI4PjxVMDMwMj4iCitjb2xsYXRpbmctZWxlbWVudCA8ZV8vPj4gZnJvbSAiPFUxRUI5PjxVMDMwMj4iCitjb2xsYXRpbmctZWxlbWVudCA8SS8+PiBmcm9tICI8VTAwNDk+PFUwMzAyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxpLz4+IGZyb20gIjxVMDA2OT48VTAzMDI+IgorY29sbGF0aW5nLWVsZW1lbnQgPE8vPj4gZnJvbSAiPFUwMDRGPjxVMDMwMj4iCitjb2xsYXRpbmctZWxlbWVudCA8by8+PiBmcm9tICI8VTAwNkY+PFUwMzAyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxPXy8+PiBmcm9tICI8VTFFQ0M+PFUwMzAyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxvXy8+PiBmcm9tICI8VTFFQ0Q+PFUwMzAyPiIKK2NvbGxhdGluZy1lbGVtZW50IDxVLz4+IGZyb20gIjxVMDA1NT48VTAzMDI+IgorY29sbGF0aW5nLWVsZW1lbnQgPHUvPj4gZnJvbSAiPFUwMDc1PjxVMDMwMj4iCislIGNhcm9uICjHjsSb4bq5zIzHkMeS4buNzIzHlCkKK2NvbGxhdGluZy1lbGVtZW50IDxBPD4gZnJvbSAiPFUwMDQxPjxVMDMwQz4iCitjb2xsYXRpbmctZWxlbWVudCA8YTw+IGZyb20gIjxVMDA2MT48VTAzMEM+IgorY29sbGF0aW5nLWVsZW1lbnQgPEU8PiBmcm9tICI8VTAwNDU+PFUwMzBDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxlPD4gZnJvbSAiPFUwMDY1PjxVMDMwQz4iCitjb2xsYXRpbmctZWxlbWVudCA8RV88PiBmcm9tICI8VTFFQjg+PFUwMzBDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxlXzw+IGZyb20gIjxVMUVCOT48VTAzMEM+IgorY29sbGF0aW5nLWVsZW1lbnQgPEk8PiBmcm9tICI8VTAwNDk+PFUwMzBDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxpPD4gZnJvbSAiPFUwMDY5PjxVMDMwQz4iCitjb2xsYXRpbmctZWxlbWVudCA8Tzw+IGZyb20gIjxVMDA0Rj48VTAzMEM+IgorY29sbGF0aW5nLWVsZW1lbnQgPG88PiBmcm9tICI8VTAwNkY+PFUwMzBDPiIKK2NvbGxhdGluZy1lbGVtZW50IDxPXzw+IGZyb20gIjxVMUVDQz48VTAzMEM+IgorY29sbGF0aW5nLWVsZW1lbnQgPG9fPD4gZnJvbSAiPFUxRUNEPjxVMDMwQz4iCitjb2xsYXRpbmctZWxlbWVudCA8VTw+IGZyb20gIjxVMDA1NT48VTAzMEM+IgorY29sbGF0aW5nLWVsZW1lbnQgPHU8PiBmcm9tICI8VTAwNzU+PFUwMzBDPiIKKyUgdGlsZGUgKG5vdCBpbXBsZW1lbnRlZDsgb2xkIG9ydGhvZ3JhcGh5KQorCitjb2xsYXRpbmctc3ltYm9sIDxDQVAtTUlOPgorY29sbGF0aW5nLXN5bWJvbCA8TUlOLUNBUD4KKyAKK3Jlb3JkZXItYWZ0ZXIgPEJBUz4KKzxBQ0E+Cis8TUFDPgorPEdSQT4KKworcmVvcmRlci1hZnRlciA8TUlOPgorPE1JTi1DQVA+CisgCityZW9yZGVyLWFmdGVyIDxDQVA+Cis8Q0FQLU1JTj4KKworcmVvcmRlci1hZnRlciA8ZT4KKzxlYmVsb3dkb3Q+CityZW9yZGVyLWFmdGVyIDxnPgorPGctYi15bz4KK3Jlb3JkZXItYWZ0ZXIgPG8+Cis8b2JlbG93ZG90PgorcmVvcmRlci1hZnRlciA8cz4KKzxzYmVsb3dkb3Q+CisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDYxPgorPFUwMEUxPiA8YT47PEFDQT47PE1JTj47SUdOT1JFCis8YSc+ICAgIDxhPjs8QUNBPjs8TUlOPjtJR05PUkUKKzxVMDBFMj4gIjxhPjxhPiI7IjxBQ0E+PEdSQT4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxhLz4+ICAgIjxhPjxhPiI7IjxBQ0E+PEdSQT4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMDBFMD4gPGE+OzxHUkE+OzxNSU4+O0lHTk9SRQorPGFgPiAgICA8YT47PEdSQT47PE1JTj47SUdOT1JFCis8VTAxQ0U+ICI8YT48YT4iOyI8R1JBPjxBQ0E+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8YTw+ICAgICI8YT48YT4iOyI8R1JBPjxBQ0E+IjsiPE1JTj48TUlOPiI7SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0MT4KKzxVMDBDMT4gPGE+OzxBQ0E+OzxDQVA+O0lHTk9SRQorPEEnPiAgICA8YT47PEFDQT47PENBUD47SUdOT1JFCis8VTAwQzI+ICI8YT48YT4iOyI8QUNBPjxHUkE+IjsiPENBUD48Q0FQPiI7SUdOT1JFCis8QS8+PiAgICI8YT48YT4iOyI8QUNBPjxHUkE+IjsiPENBUD48Q0FQPiI7SUdOT1JFCis8VTAwQzA+IDxhPjs8R1JBPjs8Q0FQPjtJR05PUkUKKzxBYD4gICAgPGE+OzxHUkE+OzxDQVA+O0lHTk9SRQorPFUwMUNEPiAiPGE+PGE+IjsiPEdSQT48QUNBPiI7IjxDQVA+PENBUD4iO0lHTk9SRQorPEE8PiAgICAiPGE+PGE+IjsiPEdSQT48QUNBPiI7IjxDQVA+PENBUD4iO0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA2NT4KKzxVMDBFOT4gPGU+OzxBQ0E+OzxNSU4+O0lHTk9SRQorPGUnPiAgICA8ZT47PEFDQT47PE1JTj47SUdOT1JFCis8VTAwRUE+ICI8ZT48ZT4iOyI8QUNBPjxHUkE+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8ZS8+PiAgICI8ZT48ZT4iOyI8QUNBPjxHUkE+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTAwRTg+IDxlPjs8R1JBPjs8TUlOPjtJR05PUkUKKzxlYD4gICAgPGU+OzxHUkE+OzxNSU4+O0lHTk9SRQorPFUwMTFCPiAiPGU+PGU+IjsiPEdSQT48QUNBPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPGU8PiAgICAiPGU+PGU+IjsiPEdSQT48QUNBPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUxRUI5PiA8ZWJlbG93ZG90Pjs8QkFTPjs8TUlOPjtJR05PUkUKKzxlXz4gICAgPGViZWxvd2RvdD47PEJBUz47PE1JTj47SUdOT1JFCis8ZV8nPiAgIDxlYmVsb3dkb3Q+OzxBQ0E+OzxNSU4+O0lHTk9SRQorPGVfMic+ICA8ZWJlbG93ZG90Pjs8QUNBPjs8TUlOPjtJR05PUkUKKzxlXy8+PiAgIjxlYmVsb3dkb3Q+PGViZWxvd2RvdD4iOyI8QUNBPjxHUkE+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8ZV9gPiAgIDxlYmVsb3dkb3Q+OzxHUkE+OzxNSU4+O0lHTk9SRQorPGVfMmA+ICA8ZWJlbG93ZG90Pjs8R1JBPjs8TUlOPjtJR05PUkUKKzxlXzw+ICAgIjxlYmVsb3dkb3Q+PGViZWxvd2RvdD4iOyI8R1JBPjxBQ0E+IjsiPE1JTj48TUlOPiI7SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0NT4KKzxVMDBDOT4gPGU+OzxBQ0E+OzxDQVA+O0lHTk9SRQorPEUnPiAgICA8ZT47PEFDQT47PENBUD47SUdOT1JFCis8VTAwQ0E+ICI8ZT48ZT4iOyI8QUNBPjxHUkE+IjsiPENBUD48Q0FQPiI7SUdOT1JFCis8RS8+PiAgICI8ZT48ZT4iOyI8QUNBPjxHUkE+IjsiPENBUD48Q0FQPiI7SUdOT1JFCis8VTAwQzg+IDxlPjs8R1JBPjs8Q0FQPjtJR05PUkUKKzxFYD4gICAgPGU+OzxHUkE+OzxDQVA+O0lHTk9SRQorPFUwMTFBPiAiPGU+PGU+IjsiPEdSQT48QUNBPiI7IjxDQVA+PENBUD4iO0lHTk9SRQorPEU8PiAgICAiPGU+PGU+IjsiPEdSQT48QUNBPiI7IjxDQVA+PENBUD4iO0lHTk9SRQorPFUxRUI4PiA8ZWJlbG93ZG90Pjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxFXz4gICAgPGViZWxvd2RvdD47PENBUD47PENBUD47SUdOT1JFCis8RV8nPiAgIDxlYmVsb3dkb3Q+OzxBQ0E+OzxDQVA+O0lHTk9SRQorPEVfMic+ICA8ZWJlbG93ZG90Pjs8QUNBPjs8Q0FQPjtJR05PUkUKKzxFXy8+PiAgIjxlYmVsb3dkb3Q+PGViZWxvd2RvdD4iOyI8QUNBPjxHUkE+IjsiPENBUD48Q0FQPiI7SUdOT1JFCis8RV9gPiAgIDxlYmVsb3dkb3Q+OzxHUkE+OzxDQVA+O0lHTk9SRQorPEVfMmA+ICA8ZWJlbG93ZG90Pjs8R1JBPjs8Q0FQPjtJR05PUkUKKzxFXzw+ICAgIjxlYmVsb3dkb3Q+PGViZWxvd2RvdD4iOyI8R1JBPjxBQ0E+IjsiPENBUD48Q0FQPiI7SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDY3PgorPGctYj4gICA8Zy1iLXlvPjs8UENMPjs8TUlOPjtJR05PUkUKKzxnLUI+ICAgPGctYi15bz47PFBDTD47PE1JTi1DQVA+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNDc+Cis8Ry1CPiAgIDxnLWIteW8+OzxQQ0w+OzxDQVA+O0lHTk9SRQorPEctYj4gICA8Zy1iLXlvPjs8UENMPjs8Q0FQLU1JTj47SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDY5PgorPFUwMEVEPiA8aT47PEFDQT47PE1JTj47SUdOT1JFCis8aSc+ICAgIDxpPjs8QUNBPjs8TUlOPjtJR05PUkUKKzxVMDBFRT4gIjxpPjxpPiI7IjxBQ0E+PEdSQT4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxpLz4+ICAgIjxpPjxpPiI7IjxBQ0E+PEdSQT4iOyI8TUlOPjxNSU4+IjtJR05PUkUKKzxVMDBFQz4gPGk+OzxHUkE+OzxNSU4+O0lHTk9SRQorPGlgPiAgICA8aT47PEdSQT47PE1JTj47SUdOT1JFCis8VTAxRDA+ICI8aT48aT4iOyI8R1JBPjxBQ0E+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8aTw+ICAgICI8aT48aT4iOyI8R1JBPjxBQ0E+IjsiPE1JTj48TUlOPiI7SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0OT4KKzxVMDBDRD4gPGk+OzxBQ0E+OzxDQVA+O0lHTk9SRQorPEknPiAgICA8aT47PEFDQT47PENBUD47SUdOT1JFCis8VTAwQ0U+ICI8aT48aT4iOyI8QUNBPjxHUkE+IjsiPENBUD48Q0FQPiI7SUdOT1JFCis8SS8+PiAgICI8aT48aT4iOyI8QUNBPjxHUkE+IjsiPENBUD48Q0FQPiI7SUdOT1JFCis8VTAwQ0M+IDxpPjs8R1JBPjs8Q0FQPjtJR05PUkUKKzxJYD4gICAgPGk+OzxHUkE+OzxDQVA+O0lHTk9SRQorPFUwMUNGPiAiPGk+PGk+IjsiPEdSQT48QUNBPiI7IjxDQVA+PENBUD4iO0lHTk9SRQorPEk8PiAgICAiPGk+PGk+IjsiPEdSQT48QUNBPiI7IjxDQVA+PENBUD4iO0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA2RD4KKzxVMUUzRj4gPG0+OzxBQ0E+OzxNSU4+O0lHTk9SRQorPG0nPiAgICA8bT47PEFDQT47PE1JTj47SUdOT1JFCis8bS0+ICAgIDxtPjs8TUFDPjs8TUlOPjtJR05PUkUKKzxtYD4gICAgPG0+OzxHUkE+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNEU+Cis8VTFFM0U+IDxtPjs8QUNBPjs8Q0FQPjtJR05PUkUKKzxNJz4gICAgPG0+OzxBQ0E+OzxDQVA+O0lHTk9SRQorPE0tPiAgICA8bT47PE1BQz47PENBUD47SUdOT1JFCis8TWA+ICAgIDxtPjs8R1JBPjs8Q0FQPjtJR05PUkUKKworcmVvcmRlci1hZnRlciA8VTAwNkU+Cis8VTAxNDQ+IDxuPjs8QUNBPjs8TUlOPjtJR05PUkUKKzxuJz4gICAgPG4+OzxBQ0E+OzxNSU4+O0lHTk9SRQorPG4tPiAgICA8bj47PE1BQz47PE1JTj47SUdOT1JFCis8VTAxRjk+IDxuPjs8R1JBPjs8TUlOPjtJR05PUkUKKzxuYD4gICAgPG4+OzxHUkE+OzxNSU4+O0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNEU+Cis8VTAxNDM+IDxuPjs8QUNBPjs8Q0FQPjtJR05PUkUKKzxOJz4gICAgPG4+OzxBQ0E+OzxDQVA+O0lHTk9SRQorPE4tPiAgICA8bj47PE1BQz47PENBUD47SUdOT1JFCis8VTAxRjg+IDxuPjs8R1JBPjs8Q0FQPjtJR05PUkUKKzxOYD4gICAgPG4+OzxHUkE+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA2Rj4KKzxVMDBGMz4gPG8+OzxBQ0E+OzxNSU4+O0lHTk9SRQorPG8nPiAgICA8bz47PEFDQT47PE1JTj47SUdOT1JFCis8VTAwRjQ+ICI8bz48bz4iOyI8QUNBPjxHUkE+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8by8+PiAgICI8bz48bz4iOyI8QUNBPjxHUkE+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTAwRjI+IDxvPjs8R1JBPjs8TUlOPjtJR05PUkUKKzxvYD4gICAgPG8+OzxHUkE+OzxNSU4+O0lHTk9SRQorPFUwMUQyPiAiPG8+PG8+IjsiPEdSQT48QUNBPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPG88PiAgICAiPG8+PG8+IjsiPEdSQT48QUNBPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPFUxRUNEPiA8b2JlbG93ZG90Pjs8QkFTPjs8TUlOPjtJR05PUkUKKzxvXz4gICAgPG9iZWxvd2RvdD47PEJBUz47PE1JTj47SUdOT1JFCis8b18nPiAgIDxvYmVsb3dkb3Q+OzxBQ0E+OzxNSU4+O0lHTk9SRQorPG9fMic+ICA8b2JlbG93ZG90Pjs8QUNBPjs8TUlOPjtJR05PUkUKKzxvXy8+PiAgIjxvYmVsb3dkb3Q+PG9iZWxvd2RvdD4iOyI8QUNBPjxHUkE+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8b19gPiAgIDxvYmVsb3dkb3Q+OzxHUkE+OzxNSU4+O0lHTk9SRQorPG9fMmA+ICA8b2JlbG93ZG90Pjs8R1JBPjs8TUlOPjtJR05PUkUKKzxvXzw+ICAgIjxvYmVsb3dkb3Q+PG9iZWxvd2RvdD4iOyI8R1JBPjxBQ0E+IjsiPE1JTj48TUlOPiI7SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA0Rj4KKzxVMDBEMz4gPG8+OzxBQ0E+OzxDQVA+O0lHTk9SRQorPE8nPiAgICA8bz47PEFDQT47PENBUD47SUdOT1JFCis8VTAwRDQ+ICI8bz48bz4iOyI8QUNBPjxHUkE+IjsiPENBUD48Q0FQPiI7SUdOT1JFCis8Ty8+PiAgICI8bz48bz4iOyI8QUNBPjxHUkE+IjsiPENBUD48Q0FQPiI7SUdOT1JFCis8VTAwRDI+IDxvPjs8R1JBPjs8Q0FQPjtJR05PUkUKKzxPYD4gICAgPG8+OzxHUkE+OzxDQVA+O0lHTk9SRQorPFUwMUQxPiAiPG8+PG8+IjsiPEdSQT48QUNBPiI7IjxDQVA+PENBUD4iO0lHTk9SRQorPE88PiAgICAiPG8+PG8+IjsiPEdSQT48QUNBPiI7IjxDQVA+PENBUD4iO0lHTk9SRQorPFUxRUNDPiA8b2JlbG93ZG90Pjs8QkFTPjs8Q0FQPjtJR05PUkUKKzxPXz4gICAgPG9iZWxvd2RvdD47PEJBUz47PENBUD47SUdOT1JFCis8T18nPiAgIDxvYmVsb3dkb3Q+OzxBQ0E+OzxDQVA+O0lHTk9SRQorPE9fMic+ICA8b2JlbG93ZG90Pjs8QUNBPjs8Q0FQPjtJR05PUkUKKzxPXy8+PiAgIjxvYmVsb3dkb3Q+PG9iZWxvd2RvdD4iOyI8QUNBPjxHUkE+IjsiPENBUD48Q0FQPiI7SUdOT1JFCis8T19gPiAgIDxvYmVsb3dkb3Q+OzxHUkE+OzxDQVA+O0lHTk9SRQorPE9fMmA+ICA8b2JlbG93ZG90Pjs8R1JBPjs8Q0FQPjtJR05PUkUKKzxPXzw+ICAgIjxvYmVsb3dkb3Q+PG9iZWxvd2RvdD4iOyI8R1JBPjxBQ0E+IjsiPENBUD48Q0FQPiI7SUdOT1JFCisKK3Jlb3JkZXItYWZ0ZXIgPFUwMDczPgorPFUxRTYzPiA8c2JlbG93ZG90Pjs8QkFTPjs8TUlOPjtJR05PUkUKKzxzXz4gICAgPHNiZWxvd2RvdD47PEJBUz47PE1JTj47SUdOT1JFCityZW9yZGVyLWFmdGVyIDxVMDA1Mz4KKzxVMUU2Mj4gPHNiZWxvd2RvdD47PEJBUz47PENBUD47SUdOT1JFCis8U18+ICAgIDxzYmVsb3dkb3Q+OzxCQVM+OzxDQVA+O0lHTk9SRQorCityZW9yZGVyLWFmdGVyIDxVMDA3NT4KKzxVMDBGQT4gPHU+OzxBQ0E+OzxNSU4+O0lHTk9SRQorPHUnPiAgICA8dT47PEFDQT47PE1JTj47SUdOT1JFCis8VTAwRkI+ICI8dT48dT4iOyI8QUNBPjxHUkE+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8dS8+PiAgICI8dT48dT4iOyI8QUNBPjxHUkE+IjsiPE1JTj48TUlOPiI7SUdOT1JFCis8VTAwRjk+IDx1Pjs8R1JBPjs8TUlOPjtJR05PUkUKKzx1YD4gICAgPHU+OzxHUkE+OzxNSU4+O0lHTk9SRQorPFUwMUQ0PiAiPHU+PHU+IjsiPEdSQT48QUNBPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorPHU8PiAgICAiPHU+PHU+IjsiPEdSQT48QUNBPiI7IjxNSU4+PE1JTj4iO0lHTk9SRQorcmVvcmRlci1hZnRlciA8VTAwNTU+Cis8VTAwREE+IDx1Pjs8QUNBPjs8Q0FQPjtJR05PUkUKKzxVJz4gICAgPHU+OzxBQ0E+OzxDQVA+O0lHTk9SRQorPFUwMERCPiAiPHU+PHU+IjsiPEFDQT48R1JBPiI7IjxDQVA+PENBUD4iO0lHTk9SRQorPFUvPj4gICAiPHU+PHU+IjsiPEFDQT48R1JBPiI7IjxDQVA+PENBUD4iO0lHTk9SRQorPFUwMEQ5PiA8dT47PEdSQT47PENBUD47SUdOT1JFCis8VWA+ICAgIDx1Pjs8R1JBPjs8Q0FQPjtJR05PUkUKKzxVMDFEMz4gIjx1Pjx1PiI7IjxHUkE+PEFDQT4iOyI8Q0FQPjxDQVA+IjtJR05PUkUKKzxVPD4gICAgIjx1Pjx1PiI7IjxHUkE+PEFDQT4iOyI8Q0FQPjxDQVA+IjtJR05PUkUKKworcmVvcmRlci1lbmQKKworRU5EIExDX0NPTExBVEUKKworTENfQ1RZUEUKK2NvcHkgImVuX05HIgorRU5EIExDX0NUWVBFCisKK0xDX01PTkVUQVJZCitjb3B5ICJlbl9ORyIKK0VORCBMQ19NT05FVEFSWQorCitMQ19OVU1FUklDCitjb3B5ICJlbl9ORyIKK0VORCBMQ19OVU1FUklDCisKK0xDX1RFTEVQSE9ORQorY29weSAiZW5fTkciCitFTkQgTENfVEVMRVBIT05FCisgCitMQ19USU1FCislIFNVTiwgTU9OLCBUVUUsIFdFRCwgVEhVLCBGUkksIFNBVAorYWJkYXkgICAgICAgIjxVMDA1Mz48VTAwNTU+PFUwMDRFPiI7IjxVMDA0RD48VTAwNEY+PFUwMDRFPiI7LworICAgICAgICAgICAgIjxVMDA1ND48VTAwNTU+PFUwMDQ1PiI7IjxVMDA1Nz48VTAwNDU+PFUwMDQ0PiI7LworICAgICAgICAgICAgIjxVMDA1ND48VTAwNDg+PFUwMDU1PiI7IjxVMDA0Nj48VTAwNTI+PFUwMDQ5PiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNDE+PFUwMDU0PiIKKyUgw4DDrGvDuiwgQWrDqSwgw4zhuaPhurnMgWd1biwg4buMauG7jcyBcsO6LCDhu4xq4buNzIFi4buNzIAsIOG6uMyAdMOsLCDDgGLDoW3hurnMgXRhCitkYXkgICAgICAgICAiPFUwMEMwPjxVMDBFQz48VTAwNkI+PFUwMEZBPiI7IjxVMDA0MT48VTAwNkE+PFUwMEU5PiI7LworICAgICAgICAgICAgIjxVMDBDQz48VTFFNjM+PFUxRUI5PjxVMDMwMT48VTAwNjc+PFUwMDc1PjxVMDA2RT4iOy8KKyAgICAgICAgICAgICI8VTFFQ0M+PFUwMDZBPjxVMUVDRD48VTAzMDE+PFUwMDcyPjxVMDBGQT4iOy8KKyAgICAgICAgICAgICI8VTFFQ0M+PFUwMDZBPjxVMUVDRD48VTAzMDE+PFUwMDYyPjxVMUVDRD48VTAzMDA+IjsvCisgICAgICAgICAgICAiPFUxRUI4PjxVMDMwMD48VTAwNzQ+PFUwMEVDPiI7LworICAgICAgICAgICAgIjxVMDBDMD48VTAwNjI+PFUwMEUxPjxVMDA2RD48VTFFQjk+PFUwMzAxPjxVMDA3ND48VTAwNjE+IgorJSBKQU4sIEZFQiwgTUFSLCBBUFIsIE1BWSwgSlVOLCBKVUwsIEFVRywgU0VQLCBPQ1QsIE5PViwgREVDCithYm1vbiAgICAgICAiPFUwMDRBPjxVMDA0MT48VTAwNEU+IjsiPFUwMDQ2PjxVMDA0NT48VTAwNDI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA0MT48VTAwNTI+IjsiPFUwMDQxPjxVMDA1MD48VTAwNTI+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA0MT48VTAwNTk+IjsiPFUwMDRBPjxVMDA1NT48VTAwNEU+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDA1NT48VTAwNEM+IjsiPFUwMDQxPjxVMDA1NT48VTAwNDc+IjsvCisgICAgICAgICAgICAiPFUwMDUzPjxVMDA0NT48VTAwNTA+IjsiPFUwMDRGPjxVMDA0Mz48VTAwNTQ+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA0Rj48VTAwNTY+IjsiPFUwMDQ0PjxVMDA0NT48VTAwNDM+IgorJSBKw6Fuw7rDoXLDrCwgRuG6ucyBYsO6w6Fyw6wsIE3DocOg4bmjw6wsIMOJcMOtcsOsLCBNw6nDqCwgSsO6w7luw7ksIErDumzDocOsLAorJSDhu4zMgeG7jcyBZ+G7jXPDrCwgU+G6ucyAdOG6ucyAxYRiw6AsIOG7jHTDs2LDoCwgTsOyZuG6ucyAxYRiw6AsIETDrHPhurnMgMWEYsOgCittb24gICAgICAgICAiPFUwMDRBPjxVMDBFMT48VTAwNkU+PFUwMEZBPjxVMDBFMT48VTAwNzI+PFUwMEVDPiI7LworICAgICAgICAgICAgIjxVMDA0Nj48VTFFQjk+PFUwMzAxPjxVMDA2Mj48VTAwRkE+PFUwMEUxPjxVMDA3Mj48VTAwRUM+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDBFMT48VTAwRTA+PFUxRTYzPjxVMDBFQz4iOy8KKyAgICAgICAgICAgICI8VTAwQzk+PFUwMDcwPjxVMDBFRD48VTAwNzI+PFUwMEVDPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwRTk+PFUwMEU4PiI7LworICAgICAgICAgICAgIjxVMDA0QT48VTAwRkE+PFUwMEY5PjxVMDA2RT48VTAwRjk+IjsvCisgICAgICAgICAgICAiPFUwMDRBPjxVMDBGQT48VTAwNkM+PFUwMEUxPjxVMDBFQz4iOy8KKyAgICAgICAgICAgICI8VTFFQ0M+PFUwMzAxPjxVMUVDRD48VTAzMDE+PFUwMDY3PjxVMUVDRD48VTAwNzM+PFUwMEVDPiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTFFQjk+PFUwMzAwPjxVMDA3ND48VTFFQjk+PFUwMzAwPjxVMDE0ND48VTAwNjI+PFUwMEUwPiI7LworICAgICAgICAgICAgIjxVMUVDQz48VTAwNzQ+PFUwMEYzPjxVMDA2Mj48VTAwRTA+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDBGMj48VTAwNjY+PFUxRUI5PjxVMDMwMD48VTAxNDQ+PFUwMDYyPjxVMDBFMD4iOy8KKyAgICAgICAgICAgICI8VTAwNDQ+PFUwMEVDPjxVMDA3Mz48VTFFQjk+PFUwMzAwPjxVMDE0ND48VTAwNjI+PFUwMEUwPiIKKyUg4buNauG7jcyBICVBLCAlZCBv4bmjw7kgJUIg4buNZMO6biAlWQorZF90X2ZtdCAgICAgIjxVMUVDRD48VTAwNkE+PFUxRUNEPjxVMDMwMT48VTAwMjA+PFUwMDI1PjxVMDA0MT48VTAwMkM+PFUwMDIwPjxVMDAyNT48VTAwNjQ+PFUwMDIwPjxVMDA2Rj48VTFFNjM+PFUwMEY5PjxVMDAyMD48VTAwMjU+PFUwMDQyPjxVMDAyMD48VTFFQ0Q+PFUwMDY0PjxVMDBGQT48VTAwNkU+PFUwMDIwPjxVMDAyNT48VTAwNTk+PFUwMDIwPjxVMDAyNT48VTAwNTQ+PFUwMDIwPjxVMDAyNT48VTAwNUE+IgorZF9mbXQgICAgICAgIjxVMDAyNT48VTAwNjQ+PFUwMDJGPjxVMDAyNT48VTAwNkQ+PFUwMDJGPjxVMDAyNT48VTAwNzk+IgordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNzI+IgorYW1fcG0gICAgICAgIjxVMDA0MT48VTAwNEQ+IjsiPFUwMDUwPjxVMDA0RD4iCit0X2ZtdF9hbXBtICAiPFUwMDI1PjxVMDA0OT48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+PFUwMDI1PjxVMDA3MD4iCitFTkQgTENfVElNRQorCislIEZJWE1FCitMQ19NRVNTQUdFUworJSB5ZXM6IELhurnMgeG6ucyAIG5pCit5ZXNzdHIgICAgICAiPFUwMDQyPjxVMUVCOT48VTAzMDE+PFUxRUI5PjxVMDMwMD48VTAwMjA+PFUwMDZFPjxVMDA2OT4iCislIF5bRWVZeV0KK3llc2V4cHIgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA0NT48VTAwNjU+PFUwMDc5PjxVMDA1OT48VTAwNUQ+PFUwMDJFPjxVMDAyQT4iCislIELhurnMgeG6ucyAIGvhu43MgQorbm9zdHIgICAgICAgIjxVMDA0Mj48VTFFQjk+PFUwMzAxPjxVMUVCOT48VTAzMDA+PFUwMDIwPjxVMDA2Qj48VTFFQ0Q+PFUwMzAxPiIKKyUgXltSck9vS2tObl0KK25vZXhwciAgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA3Mj48VTAwNTI+PFUwMDRGPjxVMDA2Rj48VTAwNEI+PFUwMDZCPjxVMDA0RT48VTAwNkU+PFUwMDVEPjxVMDAyRT48VTAwMkE+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCitjb3B5ICJlbl9ORyIKK0VORCBMQ19QQVBFUgorCitMQ19NRUFTVVJFTUVOVAorY29weSAiZW5fTkciCitFTkQgTENfTUVBU1VSRU1FTlQKKworTENfTkFNRQorJSBGSVhNRQorY29weSAiZW5fTkciCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCislIEZJWE1FCislIFJlcHJlc2VudGF0aW9uIG9mIHBvc3RhbCBhZGRyZXNzZXMgKG1pbnVzIHRoZSBhZGRyZXNzZWUncyBuYW1lKSBpbiBTb3V0aAorJSBBZnJpY2EuIChJZ25vcmVkIGZvciBub3cpCislICIlZiVOJWElTiVkJU4lYiVOJXMgJWggJWUgJXIlTiV6ICVUJU4lYyVOIiwgd2hpY2ggZ2l2ZXMgLQorJQorJSAiZmlybSBuYW1lIiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgIkMvTyBhZGRyZXNzIiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgImRlcGFydG1lbnQgbmFtZSIsCislICJCdWlsZGluZyBuYW1lIiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgInN0cmVldCBvciBibG9jayBuYW1lIiwKKyUgInNwYWNlIiwKKyUgImhvdXNlIG51bWJlciBvciBkZXNpZ25hdGlvbiIsCislICJzcGFjZSIsCislICJmbG9vciBudW1iZXIiLAorJSAic3BhY2UiLAorJSAicm9vbSBudW1iZXIsIGRvb3IgZGVzaWduYXRpb24iLAorJSAiZW5kIG9mIGxpbmUiLAorJSAicG9zdGFsIGNvZGUiLAorJSAic3BhY2UiLAorJSAidG93biwgY2l0eSIsCislICJlbmQgb2YgbGluZSIsCislICJjb3VudHJ5IGRlc2lnbmF0aW9uIGZvciB0aGUgPGNvdW50cnlfcG9zdD4ga2V5d29yZCIsCislICJlbmQgb2YgbGluZQorcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKKworJSBGSVhNRQorJSBDb3VudHJ5IG5hbWUgaW4gWW9ydWJhIC0gIk5pZ2VyaWEiCitjb3VudHJ5X25hbWUgICI8VTAwNEU+PFUwMDY5PjxVMDA2Nz48VTAwNjU+PFUwMDcyPjxVMDA2OT48VTAwNjE+IgorCislIExhbmd1YWdlIG5hbWUgaW4gWW9ydWJhIC0gIllvcsO5YsOhIgorbGFuZ19uYW1lICAgICAiPFUwMDU5PjxVMDA2Rj48VTAwNzI+PFUwMEY5PjxVMDA2Mj48VTAwRTE+IgorCislIENFUFQgTUFJTENPREVTIGFyZSBzdWdnZXN0ZWQKKyUgQWx0ZXJuYXRpdmVseSB1c2UgdGhlIGNvZGUgZm91bmQgb24geW91ciBjb3VudHJpZXMgcG9zdGFsIGl0ZW0gdHJhY2tpbmcgbnVtYmVyCislICJORyI/CislY291bnRyeV9wb3N0ICAgIjxVMDA0RT48VTAwNDc+IgorCislIFVOIEdlbmV2ZSAxOTQ5OjY4IERpc3Rpbmd1aXNoaW5nIHNpZ25zIG9mIHZlaGljbGVzIGluIGludGVybmF0aW9uYWwgdHJhZmZpYworJSBodHRwOi8vd3d3LnVuZWNlLm9yZy90cmFucy9jb252ZW50bi9EaXN0c2lnbnNfU2VwdDIwMDMucGRmCislICJXQU4iCitjb3VudHJ5X2NhciAgICI8VTAwNTc+PFUwMDQxPjxVMDA0RT4iCisKKyUgSVNPIDIxMDgKKyUgaHR0cDovL3d3dy5pc2JuLWludGVybmF0aW9uYWwub3JnLworY291bnRyeV9pc2JuICA5NzgKKworJSBJU08gNjM5IGxhbmd1YWdlIGFiYnJldmlhdGlvbnM6CislIDYzOS0xIDIgbGV0dGVyLCA2MzktMiAzIGxldHRlciB0ZXJtaW5vbG9neQorJSBodHRwOi8vd3d3LmxvYy5nb3Yvc3RhbmRhcmRzL2lzbzYzOS0yL2VuZ2xhZ24uaHRtbAorJSAieW8iLCAieW9yIgorbGFuZ19hYiAgICAgICAiPFUwMDc5PjxVMDA2Rj4iCitsYW5nX3Rlcm0gICAgICI8VTAwNzk+PFUwMDZGPjxVMDA3Mj4iCitsYW5nX2xpYiAgICAgICI8VTAwNzk+PFUwMDZGPjxVMDA3Mj4iCisKKyUgSVNPIDMxNjYgY291bnRyeSBudW1iZXIgYW5kIDIgYW5kIDMgbGV0dGVyIGFicmV2aWF0aW9ucworJSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL29ubGluZWRhdC9jb3VudHJpZXMuaHRtbAorJSAiTkciLCAiTkdBIgorY291bnRyeV9hYjIgICAiPFUwMDRFPjxVMDA0Nz4iCitjb3VudHJ5X2FiMyAgICI8VTAwNEU+PFUwMDQ3PjxVMDA0MT4iCitjb3VudHJ5X251bSAgIDU2NgorCitFTkQgTENfQUREUkVTUworCmRpZmYgLS1naXQgYS9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy96aF9DTiBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3poX0NOCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZGYwMDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy96aF9DTgpAQCAtMCwwICsxLDE5MiBAQAorY29tbWVudF9jaGFyICUKK2VzY2FwZV9jaGFyICAvCislCislIENoaW5lc2UgbGFuZ3VhZ2UgbG9jYWxlIGZvciB0aGUgUGVvcGxlcyBSZXB1YmxpYyBvZiBDaGluYQorJQorJSBUaGlzIHdvcmsgaXMgYmFzZWQgb24gSVNPIFBEVFIgMTQ2NTIsIFVuaWNvZGUgMy4wLCBsb2NhbGUgZGVmaW5pdGlvbgorJSBmaWxlIGZvciB6aF9DTiByZXZpc2lvbiAxLjAgKGhhc2hhb0BjaGluYS5jb20sIDE5OTktMDQtMjgpIGFuZAorJSBjaGFybWFwIGZpbGUgZm9yIEdCSyB2ZXJzaW9uIDEuMCAoc2Vhbi5jaGVuQHR1cmJvbGludXguY29tKS4KKyUKKyUgVGhlIGZpbGUgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIG11bHRpcGxlIGNoYXJzZXRzLiAgVG8gZWFzZSB0aGUKKyUgbWFpbnRhbmNlIGFuZCBhZGRpbmcgc3VwcG9ydCBmb3IgbmV3IGNoYXJzZXRzLCBhbGwgY2hhcmFjdGVycyBhcmUKKyUgaW4gVUNTIG5vdGF0aW9uIGFuZCBwcmVzZW50ZWQgaW4gVW5pY29kZSBvcmRlci4KKyUKKyUgQ2hhbmdlbG9nOgorJSBUdWUgSnVsIDI1IDIwMDAgWW9uZyBMaSA8cmlnZWw4NjNAaG90bWFpbC5jb20+CislIC0gZmlyc3QgdmVyc2lvbiBmb3IgZ2xpYmMgMi4yCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJDaGluZXNlIGxvY2FsZSBmb3IgUGVvcGxlcyBSZXB1YmxpYyBvZiBDaGluYSIKK3NvdXJjZSAgICAgIiIKK2FkZHJlc3MgICAgIiIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJDaGluZXNlIgordGVycml0b3J5ICAiUC5SLiBvZiBDaGluYSIKK3JldmlzaW9uICAgIjAuMSIKK2RhdGUgICAgICAgIjIwMDAtMDctMjUiCislCitjYXRlZ29yeSAgInpoX0NOOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgInpoX0NOOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgInpoX0NOOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiemhfQ046MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJ6aF9DTjoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgInpoX0NOOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgInpoX0NOOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgInpoX0NOOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgInpoX0NOOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiemhfQ046MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJ6aF9DTjoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKKworTENfQ1RZUEUKKyUgVGhpcyBpcyBhIGNvcHkgb2YgdGhlICJpMThuIiBMQ19DVFlQRSB3aXRoIHRoZSBmb2xsb3dpbmcgbW9kaWZpY2F0aW9uczoKKyUgLSBBZGRpdGlvbmFsIGNsYXNzZXM6IGhhbnppCisKK2NvcHkgImkxOG4iCisKK3RyYW5zbGl0X3N0YXJ0CitpbmNsdWRlICAidHJhbnNsaXRfY29tYmluaW5nIjsiIgordHJhbnNsaXRfZW5kCisKK2NsYXNzCSJoYW56aSI7IC8KKyUJPFUzNDAwPi4uPFU0REJGPjsvCisJPFU0RTAwPi4uPFU5RkE1PjsvCisJPFVGOTJDPjs8VUY5Nzk+OzxVRjk5NT47PFVGOUU3Pjs8VUY5RjE+OzxVRkEwQz47PFVGQTBEPjs8VUZBMEU+Oy8KKwk8VUZBMEY+OzxVRkExMT47PFVGQTEzPjs8VUZBMTQ+OzxVRkExOD47PFVGQTFGPjs8VUZBMjA+OzxVRkEyMT47LworCTxVRkEyMz47PFVGQTI0Pjs8VUZBMjc+OzxVRkEyOD47PFVGQTI5PgorRU5EIExDX0NUWVBFCisKKyUgSVNPIDE0NjUxIGNvbGxhdGlvbiBzZXF1ZW5jZQorTENfQ09MTEFURQorY29weSAiaXNvMTQ2NTFfdDFfcGlueWluIgorRU5EIExDX0NPTExBVEUKKworCitMQ19NT05FVEFSWQoraW50X2N1cnJfc3ltYm9sICAgICAgICAgICAiPFUwMDQzPjxVMDA0RT48VTAwNTk+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICAgIjxVRkZFNT4iCittb25fZGVjaW1hbF9wb2ludCAgICAgICAgICI8VTAwMkU+IgorbW9uX3Rob3VzYW5kc19zZXAgICAgICAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgICAgICAgMworcG9zaXRpdmVfc2lnbiAgICAgICAgICAgICAiIgorbmVnYXRpdmVfc2lnbiAgICAgICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgICAgICAyCitwX2NzX3ByZWNlZGVzICAgICAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAgICAgMAorbl9jc19wcmVjZWRlcyAgICAgICAgICAgICAxCituX3NlcF9ieV9zcGFjZSAgICAgICAgICAgIDAKK2ludF9wX2NzX3ByZWNlZGVzICAgICAgICAgMQoraW50X3Bfc2VwX2J5X3NwYWNlICAgICAgICAwCitpbnRfbl9jc19wcmVjZWRlcyAgICAgICAgIDEKK2ludF9uX3NlcF9ieV9zcGFjZSAgICAgICAgMAorcF9zaWduX3Bvc24gICAgICAgICAgICAgICA0CituX3NpZ25fcG9zbiAgICAgICAgICAgICAgIDQKK2ludF9wX3NpZ25fcG9zbiAgICAgICAgICAgMQoraW50X25fc2lnbl9wb3NuICAgICAgICAgICAxCitFTkQgTENfTU9ORVRBUlkKKworTENfTlVNRVJJQworZGVjaW1hbF9wb2ludCAgICAgICAgICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgICAgIjxVMDAyQz4iCitncm91cGluZyAgICAgICAgICAgICAgICAgIDMKK0VORCBMQ19OVU1FUklDCisKK0xDX1RJTUUKK2FiZGF5IAkiPFU2NUU1PiI7IjxVNEUwMD4iOyI8VTRFOEM+IjsiPFU0RTA5PiI7IjxVNTZEQj4iOyI8VTRFOTQ+IjsiPFU1MTZEPiIKKworZGF5IAkiPFU2NjFGPjxVNjcxRj48VTY1RTU+IjsvCisJIjxVNjYxRj48VTY3MUY+PFU0RTAwPiI7LworCSI8VTY2MUY+PFU2NzFGPjxVNEU4Qz4iOy8KKwkiPFU2NjFGPjxVNjcxRj48VTRFMDk+IjsvCisJIjxVNjYxRj48VTY3MUY+PFU1NkRCPiI7LworCSI8VTY2MUY+PFU2NzFGPjxVNEU5ND4iOy8KKwkiPFU2NjFGPjxVNjcxRj48VTUxNkQ+IgorCithYm1vbgkiPFUwMDIwPjxVMDAzMT48VTY3MDg+IjsiPFUwMDIwPjxVMDAzMj48VTY3MDg+IjsvCisJIjxVMDAyMD48VTAwMzM+PFU2NzA4PiI7IjxVMDAyMD48VTAwMzQ+PFU2NzA4PiI7LworCSI8VTAwMjA+PFUwMDM1PjxVNjcwOD4iOyI8VTAwMjA+PFUwMDM2PjxVNjcwOD4iOy8KKwkiPFUwMDIwPjxVMDAzNz48VTY3MDg+IjsiPFUwMDIwPjxVMDAzOD48VTY3MDg+IjsvCisJIjxVMDAyMD48VTAwMzk+PFU2NzA4PiI7IjxVMDAzMT48VTAwMzA+PFU2NzA4PiI7LworCSI8VTAwMzE+PFUwMDMxPjxVNjcwOD4iOyI8VTAwMzE+PFUwMDMyPjxVNjcwOD4iCisKK21vbgkiPFU0RTAwPjxVNjcwOD4iOyI8VTRFOEM+PFU2NzA4PiI7IjxVNEUwOT48VTY3MDg+IjsvCisJIjxVNTZEQj48VTY3MDg+IjsiPFU0RTk0PjxVNjcwOD4iOyI8VTUxNkQ+PFU2NzA4PiI7LworCSI8VTRFMDM+PFU2NzA4PiI7IjxVNTE2Qj48VTY3MDg+IjsiPFU0RTVEPjxVNjcwOD4iOy8KKwkiPFU1MzQxPjxVNjcwOD4iOyI8VTUzNDE+PFU0RTAwPjxVNjcwOD4iOyI8VTUzNDE+PFU0RThDPjxVNjcwOD4iCisKK2RfdF9mbXQgIjxVMDAyNT48VTAwNTk+PFU1RTc0PjxVMDAyNT48VTAwNkQ+PFU2NzA4PjxVMDAyNT48VTAwNjQ+PFU2NUU1PjxVMDAyMD4vCis8VTAwMjU+PFUwMDQxPjxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVNjVGNj48VTAwMjU+PFUwMDREPjxVNTIwNj48VTAwMjU+LworPFUwMDUzPjxVNzlEMj4iCisKK2RfZm10ICAgIjxVMDAyNT48VTAwNTk+PFU1RTc0PjxVMDAyNT48VTAwNkQ+PFU2NzA4PjxVMDAyNT48VTAwNjQ+PFU2NUU1PiIKKwordF9mbXQgICAiPFUwMDI1PjxVMDA0OD48VTY1RjY+PFUwMDI1PjxVMDA0RD48VTUyMDY+PFUwMDI1PjxVMDA1Mz48VTc5RDI+IgorCithbV9wbSAgICI8VTRFMEE+PFU1MzQ4PiI7IjxVNEUwQj48VTUzNDg+IgorCit0X2ZtdF9hbXBtICI8VTAwMjU+PFUwMDcwPjxVMDAyMD48VTAwMjU+PFUwMDQ5PjxVNjVGNj48VTAwMjU+PFUwMDREPjxVNTIwNj48VTAwMjU+PFUwMDUzPjxVNzlEMj4iCisKK2RhdGVfZm10ICAgICAgICI8VTAwMjU+PFUwMDU5PjxVNUU3ND48VTAwMjA+PFUwMDI1PjxVMDA2RD48VTY3MDg+PFUwMDIwPi8KKzxVMDAyNT48VTAwNjQ+PFU2NUU1PjxVMDAyMD48VTAwMjU+PFUwMDQxPjxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT4vCis8VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKK0VORCBMQ19USU1FCisKK0xDX01FU1NBR0VTCislIEFueSBzdHJpbmcgc3RhcnRpbmcgd2l0aCBhIExhdGluIFkoeSkgb3IgQ2hpbmVzZSAiU2hpNCIgaXMgcmVjb2duaXplZAorJSBhcyBhZmZpcm1hdGl2ZSBhbnN3ZXIuCislIEFueSBzdHJpbmcgc3RhcnRpbmcgd2l0aCBhIExhdGluIE4obikgb3IgQ2hpbmVzZSAiQnU0IiBvciAiRm91MyIgaXMKKyUgcmVjb2duaXplZCBhcyBuZWdhdGl2ZSBhbnN3ZXIuCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA3OT48VTAwNTk+PFU2NjJGPjxVMDA1RD4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFU0RTBEPjxVNTQyNj48VTAwNUQ+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCislIEkgYXNzdW1lIEE0LCBGSVhNRQoraGVpZ2h0ICAgMjk3Cit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKK3RlbF9pbnRfZm10CSI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Qz4iCit0ZWxfZG9tX2ZtdAkiPFUwMDMwPjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNkM+IgoraW50X3NlbGVjdAkiPFUwMDMwPjxVMDAzMD4iCitpbnRfcHJlZml4CSI8VTAwMzg+PFUwMDM2PiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTkFNRQorbmFtZV9mbXQJIjxVMDAyNT48VTAwNjY+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY3PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2ND4iCituYW1lX2dlbgkiIgorbmFtZV9taXNzCSI8VTVDMEY+PFU1OUQwPiIKK25hbWVfbXIJCSI8VTUxNDg+PFU3NTFGPiIKK25hbWVfbXJzCSI8VTU5MkE+PFU1OTJBPiIKK25hbWVfbXMJCSI8VTU5NzM+PFU1OEVCPiIKK0VORCBMQ19OQU1FCisKK0xDX0FERFJFU1MKK3Bvc3RhbF9mbXQJIjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA0RT48VTAwMjU+LworPFUwMDU0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA3Mz48VTAwMjA+PFUwMDI1PjxVMDA2OD48VTAwMjA+PFUwMDI1Pi8KKzxVMDA2NT48VTAwMjA+PFUwMDI1PjxVMDA3Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+LworPFUwMDI1PjxVMDA0RT4iCitjb3VudHJ5X25hbWUJIjxVNEUyRD48VTUzNEU+PFU0RUJBPjxVNkMxMT48VTUxNzE+PFU1NDhDPjxVNTZGRD4iCislY291bnRyeV9wb3N0CSJGSVhNRSIKK2NvdW50cnlfYWIyCSI8VTAwNDM+PFUwMDRFPiIKK2NvdW50cnlfYWIzCSI8VTAwNDM+PFUwMDQ4PjxVMDA0RT4iCitjb3VudHJ5X251bQkxNTYKKyVjb3VudHJ5X2NhcgkiRklYTUUiCitjb3VudHJ5X2lzYm4JIjxVMDAzNz4iCitsYW5nX25hbWUJIjxVNEUyRD48VTY1ODc+IgorbGFuZ19hYgkJIjxVMDA3QT48VTAwNjg+IgorbGFuZ190ZXJtCSI8VTAwN0E+PFUwMDY4PjxVMDA2Rj4iCitsYW5nX2xpYgkiPFUwMDYzPjxVMDA2OD48VTAwNjk+IgorRU5EIExDX0FERFJFU1MKKworTENfTUVBU1VSRU1FTlQKK21lYXN1cmVtZW50ICAgIDEKK0VORCBMQ19NRUFTVVJFTUVOVApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvemhfSEsgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy96aF9ISwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmRjY2MyCi0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvemhfSEsKQEAgLTAsMCArMSwyMDUgQEAKK2NvbW1lbnRfY2hhciAgICAlCitlc2NhcGVfY2hhciAgICAgLworJSBDaGluZXNlIGxhbmd1YWdlIGxvY2FsZSBmb3IgSG9uZyBLb25nLgorJSBDb250cmlidXRlZCBieSBLZW50YXJvaCBOb2ppIDxrbm9qaUBqcC5pYm0uY29tPiBhbmQKKyUgVGV0c3VqaSBPcml0YSA8b3JpdGFAanAuaWJtLmNvbT4uCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJDaGluZXNlIGxhbmd1YWdlIGxvY2FsZSBmb3IgSG9uZyBLb25nIgorc291cmNlICAgICAiSUJNIEdsb2JhbGl6YXRpb24gQ2VudGVyIG9mIENvbXBldGVuY3ksIFlhbWF0byBTb2Z0d2FyZSBMYWJvcmF0b3J5IgorYWRkcmVzcyAgICAiMTYyMy0xNCwgU2hpbW90c3VydW1hLCBZYW1hdG8tc2hpLCBLYW5hZ2F3YS1rZW4sIDI0Mi04NTAyLCBKYXBhbiIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJDaGluZXNlIgordGVycml0b3J5ICAiSG9uZyBLb25nIgorcmV2aXNpb24gICAiMS4wIgorZGF0ZSAgICAgICAiMjAwMC0wNy0yMCIKKyUKK2NhdGVnb3J5ICAiemhfSEs6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiemhfSEs6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiemhfSEs6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJ6aF9ISzoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgInpoX0hLOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiemhfSEs6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiemhfSEs6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiemhfSEs6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiemhfSEs6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJ6aF9ISzoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgInpoX0hLOjIwMDAiO0xDX1RFTEVQSE9ORQorCitFTkQgTENfSURFTlRJRklDQVRJT04KKworTENfQ1RZUEUKK2NvcHkgInpoX0NOIgorRU5EIExDX0NUWVBFCisKK0xDX0NPTExBVEUKKworJSBDb3B5IHRoZSB0ZW1wbGF0ZSBmcm9tIElTTy9JRUMgMTQ2NTEKK2NvcHkgImlzbzE0NjUxX3QxIgorCitFTkQgTENfQ09MTEFURQorCitMQ19NT05FVEFSWQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiB0aGUgTENfTU9ORVRBUlkgY2F0ZWdvcnkuCislIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gWE1MIGJhc2UgTG9jYWxlIGRpZmludGlvbiBmaWxlCislIGZvciBJQk0gQ2xhc3MgZm9yIFVuaWNvZGUvSmF2YQorJQoraW50X2N1cnJfc3ltYm9sICAgICAgICI8VTAwNDg+PFUwMDRCPjxVMDA0ND48VTAwMjA+IgorY3VycmVuY3lfc3ltYm9sICAgICAgICI8VTAwNDg+PFUwMDRCPjxVMDAyND4iCittb25fZGVjaW1hbF9wb2ludCAgICAgIjxVMDAyRT4iCittb25fdGhvdXNhbmRzX3NlcCAgICAgIjxVMDAyQz4iCittb25fZ3JvdXBpbmcgICAgICAgICAgMworcG9zaXRpdmVfc2lnbiAgICAgICAgICIiCituZWdhdGl2ZV9zaWduICAgICAgICAgIjxVMDAyRD4iCitpbnRfZnJhY19kaWdpdHMgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgIDIKK3BfY3NfcHJlY2VkZXMgICAgICAgICAxCitwX3NlcF9ieV9zcGFjZSAgICAgICAgMAorbl9jc19wcmVjZWRlcyAgICAgICAgIDEKK25fc2VwX2J5X3NwYWNlICAgICAgICAwCitwX3NpZ25fcG9zbiAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgIDAKKyUKK0VORCBMQ19NT05FVEFSWQorCisKK0xDX05VTUVSSUMKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19OVU1FUklDICBjYXRlZ29yeS4KKyUKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgIjxVMDAyRT4iCit0aG91c2FuZHNfc2VwICAgICAgICAgICI8VTAwMkM+IgorZ3JvdXBpbmcgICAgICAgICAgICAgICAzCislCitFTkQgTENfTlVNRVJJQworCisKK0xDX1RJTUUKKyUgVGhpcyBpcyB0aGUgUE9TSVggTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19USU1FIGNhdGVnb3J5LgorJSBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIFhNTCBiYXNlIExvY2FsZSBkaWZpbnRpb24gZmlsZQorJSBmb3IgSUJNIENsYXNzIGZvciBVbmljb2RlL0phdmEKKyUKKyUgUmVtb3ZlZCB0cmFpbGluZyBzcGFjZSwgYnkgQW50aG9ueSBGb2sgPGFudGhvbnlAdGhpemxpbnV4LmNvbT4sIEZlYiAyMDAyCislIEFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZXMgKCVhKQorYWJkYXkgICAgICAgIjxVNjVFNT4iOyI8VTRFMDA+IjsvCisgICAgICAgICAgICAiPFU0RThDPiI7IjxVNEUwOT4iOy8KKyAgICAgICAgICAgICI8VTU2REI+IjsiPFU0RTk0PiI7LworICAgICAgICAgICAgIjxVNTE2RD4iCislCislIFJlbW92ZWQgdHJhaWxpbmcgc3BhY2UsIGJ5IEFudGhvbnkgRm9rIDxhbnRob255QHRoaXpsaW51eC5jb20+LCBGZWIgMjAwMgorJSBGdWxsIHdlZWtkYXkgbmFtZXMgKCVBKQorZGF5ICAgICAgICAgIjxVNjYxRj48VTY3MUY+PFU2NUU1PiI7IjxVNjYxRj48VTY3MUY+PFU0RTAwPiI7LworICAgICAgICAgICAgIjxVNjYxRj48VTY3MUY+PFU0RThDPiI7IjxVNjYxRj48VTY3MUY+PFU0RTA5PiI7LworICAgICAgICAgICAgIjxVNjYxRj48VTY3MUY+PFU1NkRCPiI7IjxVNjYxRj48VTY3MUY+PFU0RTk0PiI7LworICAgICAgICAgICAgIjxVNjYxRj48VTY3MUY+PFU1MTZEPiIKKyUKKyUgQWJicmV2aWF0ZWQgbW9udGggbmFtZXMgKCViKQorYWJtb24gICAgICAgIjxVMDAzMT48VTY3MDg+IjsiPFUwMDMyPjxVNjcwOD4iOy8KKyAgICAgICAgICAgICI8VTAwMzM+PFU2NzA4PiI7IjxVMDAzND48VTY3MDg+IjsvCisgICAgICAgICAgICAiPFUwMDM1PjxVNjcwOD4iOyI8VTAwMzY+PFU2NzA4PiI7LworICAgICAgICAgICAgIjxVMDAzNz48VTY3MDg+IjsiPFUwMDM4PjxVNjcwOD4iOy8KKyAgICAgICAgICAgICI8VTAwMzk+PFU2NzA4PiI7IjxVMDAzMT48VTAwMzA+PFU2NzA4PiI7LworICAgICAgICAgICAgIjxVMDAzMT48VTAwMzE+PFU2NzA4PiI7IjxVMDAzMT48VTAwMzI+PFU2NzA4PiIKKyUKKyUgRnVsbCBtb250aCBuYW1lcyAoJUIpCittb24gICAgICAgICAiPFU0RTAwPjxVNjcwOD4iOyI8VTRFOEM+PFU2NzA4PiI7LworICAgICAgICAgICAgIjxVNEUwOT48VTY3MDg+IjsiPFU1NkRCPjxVNjcwOD4iOy8KKyAgICAgICAgICAgICI8VTRFOTQ+PFU2NzA4PiI7IjxVNTE2RD48VTY3MDg+IjsvCisgICAgICAgICAgICAiPFU0RTAzPjxVNjcwOD4iOyI8VTUxNkI+PFU2NzA4PiI7LworICAgICAgICAgICAgIjxVNEU1RD48VTY3MDg+IjsiPFU1MzQxPjxVNjcwOD4iOy8KKyAgICAgICAgICAgICI8VTUzNDE+PFU0RTAwPjxVNjcwOD4iOyI8VTUzNDE+PFU0RThDPjxVNjcwOD4iCislCislIEVxdWl2YWxlbnQgb2YgQU0gUE0KK2FtX3BtICAgICAgICI8VTRFMEE+PFU1MzQ4PiI7IjxVNEUwQj48VTUzNDg+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uCislIFVwZGF0ZSBieSBSb2dlciBTbyA8cm9nZXIuc29Ac3ctbGludXguY29tPgorJSBDaGFuZ2VkICViIHRvICVtLCBieSBBbnRob255IEZvayA8YW50aG9ueUB0aGl6bGludXguY29tPiwgRmViIDIwMDIKK2RfdF9mbXQgICAgICI8VTAwMjU+PFUwMDU5PjxVNUU3ND48VTAwMjU+PFUwMDZEPjxVNjcwOD48VTAwMjU+PFUwMDY0PjxVNjVFNT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0MT48VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD4vCis8VTAwM0E+PFUwMDI1PjxVMDA1Mz4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24KKyUgQ2hhbmdlZCAlYiB0byAlbSwgYnkgQW50aG9ueSBGb2sgPGFudGhvbnlAdGhpemxpbnV4LmNvbT4sIEZlYiAyMDAyCislICVZlE4lbYyOJWST+iAlQQorZF9mbXQgICAgICAgIjxVMDAyNT48VTAwNTk+PFU1RTc0PjxVMDAyNT48VTAwNkQ+PFU2NzA4PjxVMDAyNT48VTAwNjQ+LworPFU2NUU1PjxVMDAyMD48VTAwMjU+PFUwMDQxPiIKKyUKKyUgQXBwcm9wcmlhdGUgdGltZSByZXByZXNlbnRhdGlvbgorJSAlSY6eJU2VqiVTlWIgJVoKK3RfZm10ICAgICAgICI8VTAwMjU+PFUwMDQ5PjxVNjY0Mj48VTAwMjU+PFUwMDREPjxVNTIwNj48VTAwMjU+PFUwMDUzPi8KKzxVNzlEMj48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIDEyIGggdGltZSByZXByZXNlbnRhdGlvbiAoJXIpCislIFVwZGF0ZSBieSBSb2dlciBTbyA8cm9nZXIuc29Ac3ctbGludXguY29tPgordF9mbXRfYW1wbSAgIjxVMDAyNT48VTAwNzA+PFUwMDIwPjxVMDAyNT48VTAwNDk+PFUwMDNBPjxVMDAyNT48VTAwNEQ+LworPFUwMDNBPjxVMDAyNT48VTAwNTM+IgorJQorJSBBcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uIChkYXRlKDEpKSAgICIlYSAlYiAlZSAlSDolTTolUyAlWiAlWSIKK2RhdGVfZm10ICAgICAgICI8VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwMjU+PFUwMDYyPjxVMDAyMD48VTAwMjU+PFUwMDY1Pi8KKzxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVMDAzQT48VTAwMjU+PFUwMDREPjxVMDAzQT48VTAwMjU+PFUwMDUzPjxVMDAyMD4vCis8VTAwMjU+PFUwMDVBPjxVMDAyMD48VTAwMjU+PFUwMDU5PiIKK0VORCBMQ19USU1FCisKKworTENfTUVTU0FHRVMKKyUgeWVzZXhwciAgICAgIl5bPHk+PFk+PENKSyBTaGk0Pl0iCislIG5vZXhwciAgICAgICJeWzxuPjxOPjxDSksgQnU0PjxDSksgRm91Mz5dIgoreWVzZXhwciAiPFUwMDVFPjxVMDA1Qj48VTAwNzk+PFUwMDU5PjxVNjYyRj48VTAwNUQ+Igorbm9leHByICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVNEUwRD48VTU0MjY+PFUwMDVEPiIKK0VORCBMQ19NRVNTQUdFUworCisKK0xDX1BBUEVSCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislIExDX1BBUEVSIGNhdGVnb3J5CitoZWlnaHQgICAgICAyOTcKK3dpZHRoICAgICAgIDIxMAorCitFTkQgTENfUEFQRVIKKworCitMQ19OQU1FCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislIExDX05BTUUgY2F0ZWdvcnkuCislCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjQ+PFUwMDMxPiIKK25hbWVfZ2VuICAgICI8VTU0MUI+IgorbmFtZV9tciAgICAgIjxVNTE0OD48VTc1MUY+IgorbmFtZV9tcnMgICAgIjxVNTkyQj48VTRFQkE+PFUwMDJFPiIKK25hbWVfbWlzcyAgICI8VTVDMEY+PFU1OUQwPiIKK25hbWVfbXMgICAgICI8VTU5NzM+PFU1OEVCPiIKKworRU5EIExDX05BTUUKKworCitMQ19BRERSRVNTCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislIExDX0FERFJFU1MKK3Bvc3RhbF9mbXQgICI8VTAwMjU+PFUwMDdBPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDczPi8KKzxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA2NT48VTAwMjU+PFUwMDcyPiIKKworY291bnRyeV9hYjIgIjxVMDA0OD48VTAwNEI+IgorY291bnRyeV9hYjMgIjxVMDA0OD48VTAwNEI+PFUwMDQ3PiIKK2NvdW50cnlfbnVtIDM0NAorRU5EIExDX0FERFJFU1MKKworCitMQ19URUxFUEhPTkUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUKKyUKK3RlbF9pbnRfZm10ICI8VTAwMkI+PFUwMDI1PjxVMDA2Mz48VTAwMjA+PFUwMDNCPjxVMDAyNT48VTAwNjE+PFUwMDIwPi8KKzxVMDAzQj48VTAwMjU+PFUwMDZDPiIKK2ludF9wcmVmaXggICI8VTAwMzg+PFUwMDM1PjxVMDAzMj4iCitpbnRfc2VsZWN0ICAiPFUwMDMwPjxVMDAzMD48VTAwMzE+IgorRU5EIExDX1RFTEVQSE9ORQorCisKK0xDX01FQVNVUkVNRU5UCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlCislCittZWFzdXJlbWVudCAxCisKK0VORCBMQ19NRUFTVVJFTUVOVApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvemhfU0cgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy96aF9TRwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmU1YjY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvemhfU0cKQEAgLTAsMCArMSwyMTMgQEAKK2NvbW1lbnRfY2hhciAgICAlCitlc2NhcGVfY2hhciAgICAgLworJSBDaGluZXNlIGxhbmd1YWdlIGxvY2FsZSBmb3IgU2luZ2Fwb3JlLgorJSBDb250cmlidXRlZCBieSBLZW50YXJvaCBOb2ppIDxrbm9qaUBqcC5pYm0uY29tPiBhbmQKKyUgVGV0c3VqaSBPcml0YSA8b3JpdGFAanAuaWJtLmNvbT4uCisKK0xDX0lERU5USUZJQ0FUSU9OCit0aXRsZSAgICAgICJDaGluZXNlIGxhbmd1YWdlIGxvY2FsZSBmb3IgU2luZ2Fwb3JlIgorc291cmNlICAgICAiSUJNIEdsb2JhbGl6YXRpb24gQ2VudGVyIG9mIENvbXBldGVuY3ksIFlhbWF0byBTb2Z0d2FyZSBMYWJvcmF0b3J5IgorYWRkcmVzcyAgICAiMTYyMy0xNCwgU2hpbW90c3VydW1hLCBZYW1hdG8tc2hpLCBLYW5hZ2F3YS1rZW4sIDI0Mi04NTAyLCBKYXBhbiIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICAiIgorZmF4ICAgICAgICAgIiIKK2xhbmd1YWdlICAgICJDaGluZXNlIgordGVycml0b3J5ICAgIlNpbmdhcG9yZSIKK3JldmlzaW9uICAgICIxLjAiCitkYXRlICAgICAgICAiMjAwMCxPY3RvYmVyLDI3IChYTUwgc291cmNlOjIwMDAsSnVseSwyMCkiCislCitjYXRlZ29yeSAgInpoX1NHOjIwMDAiO0xDX0lERU5USUZJQ0FUSU9OCitjYXRlZ29yeSAgInpoX1NHOjIwMDAiO0xDX0NUWVBFCitjYXRlZ29yeSAgInpoX1NHOjIwMDAiO0xDX0NPTExBVEUKK2NhdGVnb3J5ICAiemhfU0c6MjAwMCI7TENfVElNRQorY2F0ZWdvcnkgICJ6aF9TRzoyMDAwIjtMQ19OVU1FUklDCitjYXRlZ29yeSAgInpoX1NHOjIwMDAiO0xDX01PTkVUQVJZCitjYXRlZ29yeSAgInpoX1NHOjIwMDAiO0xDX01FU1NBR0VTCitjYXRlZ29yeSAgInpoX1NHOjIwMDAiO0xDX1BBUEVSCitjYXRlZ29yeSAgInpoX1NHOjIwMDAiO0xDX05BTUUKK2NhdGVnb3J5ICAiemhfU0c6MjAwMCI7TENfQUREUkVTUworY2F0ZWdvcnkgICJ6aF9TRzoyMDAwIjtMQ19URUxFUEhPTkUKKworRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJ6aF9DTiIKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCisKKyUgQ29weSB0aGUgdGVtcGxhdGUgZnJvbSBJU08vSUVDIDE0NjUxCitjb3B5ICJpc28xNDY1MV90MSIKKworRU5EIExDX0NPTExBVEUKKworCitMQ19NT05FVEFSWQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiB0aGUgTENfTU9ORVRBUlkgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGVmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS4KKyUKK2ludF9jdXJyX3N5bWJvbCAgICAgICAiPFUwMDUzPjxVMDA0Nz48VTAwNDQ+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAiPFUwMDI0PiIKK21vbl9kZWNpbWFsX3BvaW50ICAgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAiPFUwMDJDPiIKK21vbl9ncm91cGluZyAgICAgICAgICAzCitwb3NpdGl2ZV9zaWduICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAiPFUwMDJEPiIKK2ludF9mcmFjX2RpZ2l0cyAgICAgICAyCitmcmFjX2RpZ2l0cyAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgIDEKK3Bfc2VwX2J5X3NwYWNlICAgICAgICAwCituX2NzX3ByZWNlZGVzICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgIDAKK3Bfc2lnbl9wb3NuICAgICAgICAgICAxCituX3NpZ25fcG9zbiAgICAgICAgICAgMAorJQorRU5EIExDX01PTkVUQVJZCisKKworTENfTlVNRVJJQworJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX05VTUVSSUMgIGNhdGVnb3J5LgorJQorZGVjaW1hbF9wb2ludCAgICAgICAgICAiPFUwMDJFPiIKK3Rob3VzYW5kc19zZXAgICAgICAgICAgIjxVMDAyQz4iCitncm91cGluZyAgICAgICAgICAgICAgIDMKKyUKK0VORCBMQ19OVU1FUklDCisKKworTENfVElNRQorJSBUaGlzIGlzIHRoZSBQT1NJWCBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX1RJTUUgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS4KKyUKKyUgQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyAoJWEpCithYmRheSAgICAgICAiPFU2NjFGPjxVNjcxRj48VTY1RTU+IjsiPFU2NjFGPjxVNjcxRj48VTRFMDA+IjsvCisgICAgICAgICAgICAiPFU2NjFGPjxVNjcxRj48VTRFOEM+IjsiPFU2NjFGPjxVNjcxRj48VTRFMDk+IjsvCisgICAgICAgICAgICAiPFU2NjFGPjxVNjcxRj48VTU2REI+IjsiPFU2NjFGPjxVNjcxRj48VTRFOTQ+IjsvCisgICAgICAgICAgICAiPFU2NjFGPjxVNjcxRj48VTUxNkQ+IgorJQorJSBGdWxsIHdlZWtkYXkgbmFtZXMgKCVBKQorZGF5ICAgICAgICAgIjxVNjYxRj48VTY3MUY+PFU2NUU1PiI7IjxVNjYxRj48VTY3MUY+PFU0RTAwPiI7LworICAgICAgICAgICAgIjxVNjYxRj48VTY3MUY+PFU0RThDPiI7IjxVNjYxRj48VTY3MUY+PFU0RTA5PiI7LworICAgICAgICAgICAgIjxVNjYxRj48VTY3MUY+PFU1NkRCPiI7IjxVNjYxRj48VTY3MUY+PFU0RTk0PiI7LworICAgICAgICAgICAgIjxVNjYxRj48VTY3MUY+PFU1MTZEPiIKKyUKKyUgQWJicmV2aWF0ZWQgbW9udGggbmFtZXMgKCViKQorYWJtb24gICAgICAgIjxVNEUwMD48VTY3MDg+IjsiPFU0RThDPjxVNjcwOD4iOy8KKyAgICAgICAgICAgICI8VTRFMDk+PFU2NzA4PiI7IjxVNTZEQj48VTY3MDg+IjsvCisgICAgICAgICAgICAiPFU0RTk0PjxVNjcwOD4iOyI8VTUxNkQ+PFU2NzA4PiI7LworICAgICAgICAgICAgIjxVNEUwMz48VTY3MDg+IjsiPFU1MTZCPjxVNjcwOD4iOy8KKyAgICAgICAgICAgICI8VTRFNUQ+PFU2NzA4PiI7IjxVNTM0MT48VTY3MDg+IjsvCisgICAgICAgICAgICAiPFU1MzQxPjxVNEUwMD48VTY3MDg+IjsiPFU1MzQxPjxVNEU4Qz48VTY3MDg+IgorJQorJSBGdWxsIG1vbnRoIG5hbWVzICglQikKK21vbiAgICAgICAgICI8VTRFMDA+PFU2NzA4PiI7IjxVNEU4Qz48VTY3MDg+IjsvCisgICAgICAgICAgICAiPFU0RTA5PjxVNjcwOD4iOyI8VTU2REI+PFU2NzA4PiI7LworICAgICAgICAgICAgIjxVNEU5ND48VTY3MDg+IjsiPFU1MTZEPjxVNjcwOD4iOy8KKyAgICAgICAgICAgICI8VTRFMDM+PFU2NzA4PiI7IjxVNTE2Qj48VTY3MDg+IjsvCisgICAgICAgICAgICAiPFU0RTVEPjxVNjcwOD4iOyI8VTUzNDE+PFU2NzA4PiI7LworICAgICAgICAgICAgIjxVNTM0MT48VTRFMDA+PFU2NzA4PiI7IjxVNTM0MT48VTRFOEM+PFU2NzA4PiIKKyUKKyUgRXF1aXZhbGVudCBvZiBBTSBQTQorYW1fcG0gICAgICAgIjxVNEUwQT48VTUzNDg+IjsiPFU0RTBCPjxVNTM0OD4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24KKyUgJVlcdTVlNzQlbVx1NjcwOCVkXHU2NWU1ICVIXHU2NWY2JU1cdTUyMDYlU1x1NzlkMiAlWgorZF90X2ZtdCAgICAgIjxVMDAyNT48VTAwNTk+PFU1RTc0PjxVMDAyNT48VTAwNkQ+PFU2NzA4PjxVMDAyNT48VTAwNjQ+PFU2NUU1PjxVMDAyMD48VTAwMjU+PFUwMDQ4PjxVNjVGNj48VTAwMjU+PFUwMDREPjxVNTIwNj48VTAwMjU+PFUwMDUzPjxVNzlEMj48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislIEFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24KKyUgJVlcdTVlNzQlbVx1NjcwOCVkXHU2NWU1CitkX2ZtdCAgICAgICAiPFUwMDI1PjxVMDA1OT48VTVFNzQ+PFUwMDI1PjxVMDA2RD48VTY3MDg+PFUwMDI1PjxVMDA2ND48VTY1RTU+IgorJQorJSBBcHByb3ByaWF0ZSB0aW1lIHJlcHJlc2VudGF0aW9uCislICVIXHU2NWY2JU1cdTUyMDYlU1x1NzlkMiAlWgordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNDg+PFU2NUY2PjxVMDAyNT48VTAwNEQ+PFU1MjA2PjxVMDAyNT48VTAwNTM+PFU3OUQyPjxVMDAyMD48VTAwMjU+PFUwMDVBPiIKKyUKKyUgQXBwcm9wcmlhdGUgMTIgaCB0aW1lIHJlcHJlc2VudGF0aW9uICglcikKK3RfZm10X2FtcG0gICIiCislCitFTkQgTENfVElNRQorCisKK0xDX01FU1NBR0VTCislIFRoaXMgaXMgdGhlIFBPU0lYIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTUVTU0FHRVMgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KKyUgVGhlc2UgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiBYTUwgYmFzZSBMb2NhbGUgZGlmaW50aW9uIGZpbGUKKyUgZm9yIElCTSBDbGFzcyBmb3IgVW5pY29kZS4KKyUKKyUgXlt5WV0KK3llc2V4cHIgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA3OT48VTAwNTk+PFUwMDVEPiIKKworJSBTeW50YXggb24gVW5pY29kZSBSZWd1bGFyIEV4cHJlc3Npb24gR3VpZGVsaW5lcyBUUiMxOAorJSB5ZXNleHByICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNzk+PFUwMDU5PjxVMDA1RD4iCisKKyUKKyUgXltuTl0KK25vZXhwciAgICAgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFUwMDVEPiIKKworJSBTeW50YXggb24gVW5pY29kZSBSZWd1bGFyIEV4cHJlc3Npb24gR3VpZGVsaW5lcyBUUiMxOAorJSBub2V4cHIgICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA1RD4iCislCisKKyUgWWVzCit5ZXNzdHIgICAgICAiPFUwMDU5PjxVMDA2NT48VTAwNzM+IgorJQorJSBObworbm9zdHIgICAgICAgIjxVMDA0RT48VTAwNkY+IgorJQorRU5EIExDX01FU1NBR0VTCisKKworTENfUEFQRVIKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfUEFQRVIgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KK2hlaWdodCAgICAgIDI5Nword2lkdGggICAgICAgMjEwCisKK0VORCBMQ19QQVBFUgorCisKK0xDX05BTUUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfTkFNRSBjYXRlZ29yeQorJSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorJQorJQorbmFtZV9mbXQgICAgIjxVMDAyNT48VTAwNzA+PFUwMDI1PjxVMDA3ND48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nz4iCituYW1lX2dlbiAgICAiIgorbmFtZV9tciAgICAgIjxVMDA0RD48VTAwNzI+PFUwMDJFPiIKK25hbWVfbXJzICAgICI8VTAwNEQ+PFUwMDcyPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9taXNzICAgIjxVMDA0RD48VTAwNjk+PFUwMDczPjxVMDA3Mz48VTAwMkU+IgorbmFtZV9tcyAgICAgIjxVMDA0RD48VTAwNzM+PFUwMDJFPiIKKworRU5EIExDX05BTUUKKworCitMQ19BRERSRVNTCislIFRoaXMgaXMgdGhlIElTT19JRUMgVFIxNDY1MiBMb2NhbGUgZGVmaW5pdGlvbiBmb3IgdGhlIExDX0FERFJFU1MgY2F0ZWdvcnkKKyUgZ2VuZXJhdGVkIGJ5IElCTSBCYXNpYyBDb3VudHJ5UGFjayBUcmFuc2Zvcm1lci4KK3Bvc3RhbF9mbXQgICI8VTAwMjU+PFUwMDdBPjxVMDAyNT48VTAwNjM+PFUwMDI1PjxVMDA1ND48VTAwMjU+PFUwMDczPjxVMDAyNT48VTAwNjI+PFUwMDI1PjxVMDA2NT48VTAwMjU+PFUwMDcyPiIKKworY291bnRyeV9hYjIgIjxVMDA1Mz48VTAwNDc+IgorY291bnRyeV9hYjMgIjxVMDA1Mz48VTAwNDc+PFUwMDUwPiIKK2NvdW50cnlfbnVtIDcwMgorRU5EIExDX0FERFJFU1MKKworCitMQ19URUxFUEhPTkUKKyUgVGhpcyBpcyB0aGUgSVNPX0lFQyBUUjE0NjUyIExvY2FsZSBkZWZpbml0aW9uIGZvciB0aGUgTENfVEVMRVBIT05FCislIGdlbmVyYXRlZCBieSBJQk0gQmFzaWMgQ291bnRyeVBhY2sgVHJhbnNmb3JtZXIuCit0ZWxfaW50X2ZtdCAiPFUwMDJCPjxVMDAyNT48VTAwNjM+PFUwMDIwPjxVMDAzQj48VTAwMjU+PFUwMDYxPjxVMDAyMD48VTAwM0I+PFUwMDI1PjxVMDA2Qz4iCisKK0VORCBMQ19URUxFUEhPTkUKKworCitMQ19NRUFTVVJFTUVOVAorJSBUaGlzIGlzIHRoZSBJU09fSUVDIFRSMTQ2NTIgTG9jYWxlIGRlZmluaXRpb24gZm9yIHRoZSBMQ19NRUFTVVJFTUVOVAorJSBjYXRlZ29yeSBnZW5lcmF0ZWQgYnkgSUJNIEJhc2ljIENvdW50cnlQYWNrIFRyYW5zZm9ybWVyLgorbWVhc3VyZW1lbnQgMQorCitFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3poX1RXIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvemhfVFcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllYTdhYQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzL3poX1RXCkBAIC0wLDAgKzEsMjEwIEBACitjb21tZW50X2NoYXIgJQorZXNjYXBlX2NoYXIgLworJQorJSBDaGluZXNlIGxhbmd1YWdlIGxvY2FsZSBmb3IgVGFpd2FuCislIGNoYXJtYXA6IEJJRzUtQ1A5NTAKKyUKKyUgT3JpZ2luYWwgQXV0aG9yOgorJSAgICBNaW5nLUNoZSBDaHVhbmcKKyUgCVBQRSBvZiBOVFUsIFRhaXdhbiwgUk9DCislCislIEN1cnJlbnRseSBNYWludGFpbmVkIGJ5OgorJSAgICBZdWFuLUNodW5nIENoZW5nCislCXBsYXRpbkBtczMxLmhpbmV0Lm5ldAorJSAgICBUdW5nLUhhbiBIc2llaAorJQl0aGhzaWVoQGxpbnV4Lm9yZy50dworJQorJSBSZWZlcmVuY2U6CWh0dHA6Ly93d3dvbGQuZGt1dWcuZGsvSlRDMS9TQzIyL1dHMjAvZG9jcy9uNjkwLnBkZgorCitMQ19JREVOVElGSUNBVElPTgordGl0bGUgICAgICAiQ2hpbmVzZSBsb2NhbGUgZm9yIFRhaXdhbiIKK3NvdXJjZSAgICAgIiIKK2FkZHJlc3MgICAgIiIKK2NvbnRhY3QgICAgIiIKK2VtYWlsICAgICAgImJ1Zy1nbGliYy1sb2NhbGVzQGdudS5vcmciCit0ZWwgICAgICAgICIiCitmYXggICAgICAgICIiCitsYW5ndWFnZSAgICJDaGluZXNlIgordGVycml0b3J5ICAiVGFpd2FuIgorcmV2aXNpb24gICAiMC4yIgorZGF0ZSAgICAgICAiMjAwMC0wOC0wMiIKKyUKK2NhdGVnb3J5ICAiemhfVFc6MjAwMCI7TENfSURFTlRJRklDQVRJT04KK2NhdGVnb3J5ICAiemhfVFc6MjAwMCI7TENfQ1RZUEUKK2NhdGVnb3J5ICAiemhfVFc6MjAwMCI7TENfQ09MTEFURQorY2F0ZWdvcnkgICJ6aF9UVzoyMDAwIjtMQ19USU1FCitjYXRlZ29yeSAgInpoX1RXOjIwMDAiO0xDX05VTUVSSUMKK2NhdGVnb3J5ICAiemhfVFc6MjAwMCI7TENfTU9ORVRBUlkKK2NhdGVnb3J5ICAiemhfVFc6MjAwMCI7TENfTUVTU0FHRVMKK2NhdGVnb3J5ICAiemhfVFc6MjAwMCI7TENfUEFQRVIKK2NhdGVnb3J5ICAiemhfVFc6MjAwMCI7TENfTkFNRQorY2F0ZWdvcnkgICJ6aF9UVzoyMDAwIjtMQ19BRERSRVNTCitjYXRlZ29yeSAgInpoX1RXOjIwMDAiO0xDX1RFTEVQSE9ORQorRU5EIExDX0lERU5USUZJQ0FUSU9OCisKK0xDX0NUWVBFCitjb3B5ICJ6aF9DTiIKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCitjb3B5ICJpc28xNDY1MV90MSIKK0VORCBMQ19DT0xMQVRFCisKK0xDX01PTkVUQVJZCitpbnRfY3Vycl9zeW1ib2wgICAgICAgICAiPFUwMDU0PjxVMDA1Nz48VTAwNDQ+PFUwMDIwPiIKK2N1cnJlbmN5X3N5bWJvbCAgICAgICAgICI8VTAwNEU+PFUwMDU0PjxVMDAyND4iCittb25fZGVjaW1hbF9wb2ludCAgICAgICAiPFUwMDJFPiIKK21vbl90aG91c2FuZHNfc2VwICAgICAgICI8VTAwMkM+IgorbW9uX2dyb3VwaW5nICAgICAgICAgICAgMworcG9zaXRpdmVfc2lnbiAgICAgICAgICAgIiIKK25lZ2F0aXZlX3NpZ24gICAgICAgICAgICI8VTAwMkQ+IgoraW50X2ZyYWNfZGlnaXRzICAgICAgICAgMgorZnJhY19kaWdpdHMgICAgICAgICAgICAgMgorcF9jc19wcmVjZWRlcyAgICAgICAgICAgMQorcF9zZXBfYnlfc3BhY2UgICAgICAgICAgMAorbl9jc19wcmVjZWRlcyAgICAgICAgICAgMQorbl9zZXBfYnlfc3BhY2UgICAgICAgICAgMAoraW50X3BfY3NfcHJlY2VkZXMgICAgICAgMQoraW50X3Bfc2VwX2J5X3NwYWNlICAgICAgMAoraW50X25fY3NfcHJlY2VkZXMgICAgICAgMQoraW50X25fc2VwX2J5X3NwYWNlICAgICAgMAorcF9zaWduX3Bvc24gICAgICAgICAgICAgMQorbl9zaWduX3Bvc24gICAgICAgICAgICAgMQoraW50X3Bfc2lnbl9wb3NuICAgICAgICAgMQoraW50X25fc2lnbl9wb3NuICAgICAgICAgMQorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2RlY2ltYWxfcG9pbnQgICAgICAgICAgICI8VTAwMkU+IgordGhvdXNhbmRzX3NlcCAgICAgICAgICAgIjxVMDAyQz4iCitncm91cGluZyAgICAgICAgICAgICAgICAzCitFTkQgTENfTlVNRVJJQworCitMQ19USU1FCislIGRheTogU3VuLCBNb24sIFR1ZSwgV2VkLCBUaHIsIEZyaSwgU2F0CithYmRheQkiPFU2NUU1PiI7IjxVNEUwMD4iOyI8VTRFOEM+IjsiPFU0RTA5PiI7LworCSI8VTU2REI+IjsiPFU0RTk0PiI7IjxVNTE2RD4iCisKK2RheQkiPFU5MDMxPjxVNjVFNT4iOy8KKwkiPFU5MDMxPjxVNEUwMD4iOy8KKwkiPFU5MDMxPjxVNEU4Qz4iOy8KKwkiPFU5MDMxPjxVNEUwOT4iOy8KKwkiPFU5MDMxPjxVNTZEQj4iOy8KKwkiPFU5MDMxPjxVNEU5ND4iOy8KKwkiPFU5MDMxPjxVNTE2RD4iCisKKyUgbW9udGg6IEphbiwgRmViLCBNYXIsIEFwciwgTWF5LCBKdW4sIEp1bCwgQXVnLCBTZXAsIE9jdCwgTm92LCBEZWMuCithYm1vbgkiPFUwMDIwPjxVMDAzMT48VTY3MDg+IjsiPFUwMDIwPjxVMDAzMj48VTY3MDg+IjsvCisJIjxVMDAyMD48VTAwMzM+PFU2NzA4PiI7IjxVMDAyMD48VTAwMzQ+PFU2NzA4PiI7LworCSI8VTAwMjA+PFUwMDM1PjxVNjcwOD4iOyI8VTAwMjA+PFUwMDM2PjxVNjcwOD4iOy8KKwkiPFUwMDIwPjxVMDAzNz48VTY3MDg+IjsiPFUwMDIwPjxVMDAzOD48VTY3MDg+IjsvCisJIjxVMDAyMD48VTAwMzk+PFU2NzA4PiI7IjxVMDAzMT48VTAwMzA+PFU2NzA4PiI7LworCSI8VTAwMzE+PFUwMDMxPjxVNjcwOD4iOyI8VTAwMzE+PFUwMDMyPjxVNjcwOD4iCisKK21vbgkiPFU0RTAwPjxVNjcwOD4iOyI8VTRFOEM+PFU2NzA4PiI7IjxVNEUwOT48VTY3MDg+IjsvCisJIjxVNTZEQj48VTY3MDg+IjsiPFU0RTk0PjxVNjcwOD4iOyI8VTUxNkQ+PFU2NzA4PiI7LworCSI8VTRFMDM+PFU2NzA4PiI7IjxVNTE2Qj48VTY3MDg+IjsiPFU0RTVEPjxVNjcwOD4iOy8KKwkiPFU1MzQxPjxVNjcwOD4iOyI8VTUzNDE+PFU0RTAwPjxVNjcwOD4iOyI8VTUzNDE+PFU0RThDPjxVNjcwOD4iCisKKyUgZF90X2ZtdDogIiVZPHk+JW08bT4lZDxkPiAoJUEpICVIPGhyPiVNPG0+JVM8cz4iCitkX3RfZm10ICI8VTg5N0Y+PFU1MTQzPjxVMDAyNT48VTAwNTk+PFU1RTc0Pi8KKzxVMDAyNT48VTAwNkQ+PFU2NzA4PjxVMDAyNT48VTAwNjQ+PFU2NUU1Pi8KKzxVMDAyMD48VTAwMjg+PFUwMDI1PjxVMDA0MT48VTAwMjk+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFU2NjQyPi8KKzxVMDAyNT48VTAwNEQ+PFU1MjA2PjxVMDAyNT48VTAwNTM+PFU3OUQyPiIKKworZF9mbXQJIjxVODk3Rj48VTUxNDM+PFUwMDI1PjxVMDA1OT48VTVFNzQ+LworPFUwMDI1PjxVMDA2RD48VTY3MDg+PFUwMDI1PjxVMDA2ND48VTY1RTU+IgorCit0X2ZtdAkiPFUwMDI1PjxVMDA0OD48VTY2NDI+PFUwMDI1PjxVMDA0RD48VTUyMDY+PFUwMDI1PjxVMDA1Mz48VTc5RDI+IgorCithbV9wbQkiPFU0RTBBPjxVNTM0OD4iOyI8VTRFMEI+PFU1MzQ4PiIKKworJSB0X2ZtdF9hbXBtOiAiJXAgJUk8aD4lTTxtPiVTPHM+IgordF9mbXRfYW1wbSAgIjxVMDAyNT48VTAwNzA+PFUwMDIwPjxVMDAyNT48VTAwNDk+PFU2NjQyPi8KKzxVMDAyNT48VTAwNEQ+PFU1MjA2PjxVMDAyNT48VTAwNTM+PFU3OUQyPiIKKworZGF0ZV9mbXQgICAgICAgIjxVMDAyNT48VTAwNjE+PFUwMDIwPjxVMDAyNT48VTAwNjI+PFUwMDIwPjxVMDAyNT48VTAwNjU+LworPFUwMDIwPjxVMDAyNT48VTAwNDg+PFUwMDNBPjxVMDAyNT48VTAwNEQ+PFUwMDNBPjxVMDAyNT48VTAwNTM+PFUwMDIwPi8KKzxVMDAyNT48VTAwNUE+PFUwMDIwPjxVMDAyNT48VTAwNTk+IgorCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworJSBBbnkgc3RyaW5nIHN0YXJ0aW5nIHdpdGggYSBMYXRpbiBZKHkpIG9yIENoaW5lc2UgIlNoaTQiIGlzIHJlY29nbml6ZWQKKyUgYXMgYWZmaXJtYXRpdmUgYW5zd2VyLgorJSBBbnkgc3RyaW5nIHN0YXJ0aW5nIHdpdGggYSBMYXRpbiBOKG4pIG9yIENoaW5lc2UgIkJ1NCIgb3IgIkZvdTMiIGlzCislIHJlY29nbml6ZWQgYXMgbmVnYXRpdmUgYW5zd2VyLgorJSB5ZXNleHByICAgICAiXls8eT48WT48Q0pLIFNoaTQ+XSIKKyUgbm9leHByICAgICAgIl5bPG4+PE4+PENKSyBCdTQ+PENKSyBGb3UzPl0iCit5ZXNleHByICI8VTAwNUU+PFUwMDVCPjxVMDA3OT48VTAwNTk+PFU2NjJGPjxVMDA1RD4iCitub2V4cHIgICI8VTAwNUU+PFUwMDVCPjxVMDA2RT48VTAwNEU+PFU0RTBEPjxVNTQyNj48VTAwNUQ+IgorRU5EIExDX01FU1NBR0VTCisKK0xDX1BBUEVSCislIEkgYXNzdW1lIEE0LCBGSVhNRQoraGVpZ2h0ICAgMjk3Cit3aWR0aCAgICAyMTAKK0VORCBMQ19QQVBFUgorCitMQ19URUxFUEhPTkUKKyUgdGVsX2ludF9mbXQ6ICAiKyVjLSVhLSVsIgordGVsX2ludF9mbXQJIjxVMDAyQj48VTAwMjU+PFUwMDYzPjxVMDAyRD48VTAwMjU+PFUwMDYxPi8KKzxVMDAyRD48VTAwMjU+PFUwMDZDPiIKKworJSB0ZWxfZG9tX2ZtdDogICIlQS0lbCIKK3RlbF9kb21fZm10CSI8VTAwMjU+PFUwMDQxPjxVMDAyRD48VTAwMjU+PFUwMDZDPiIKKworJSBpbnRfc2VsZWN0OiAgICIwMCIKK2ludF9zZWxlY3QJIjxVMDAzMD48VTAwMzA+IgorCislIGludF9wcmVmaXg6ICAgIjg4NiIKK2ludF9wcmVmaXgJIjxVMDAzOD48VTAwMzg+PFUwMDM2PiIKK0VORCBMQ19URUxFUEhPTkUKKworTENfTkFNRQorJSBuYW1lX2ZtdDoJIiVmJXQlZyV0JWQiCituYW1lX2ZtdAkiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDY0PiIKKworbmFtZV9nZW4JIiIKK25hbWVfbWlzcwkiPFU1QzBGPjxVNTlEMD4iCituYW1lX21yCQkiPFU1MTQ4PjxVNzUxRj4iCituYW1lX21ycwkiPFU1OTJBPjxVNTkyQT4iCituYW1lX21zCQkiPFU1OTczPjxVNThFQj4iCitFTkQgTENfTkFNRQorCitMQ19BRERSRVNTCislIHBvc3RhbF9mbXQ6CSIlYyVOJVQlTiVzICVoICVlICVyJU4lYiVOJWQlTiVmJU4lYSVOIgorcG9zdGFsX2ZtdAkiPFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPjxVMDAyNT4vCis8VTAwNTQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDczPjxVMDAyMD48VTAwMjU+PFUwMDY4PjxVMDAyMD48VTAwMjU+LworPFUwMDY1PjxVMDAyMD48VTAwMjU+PFUwMDcyPjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPi8KKzxVMDAyNT48VTAwNjQ+PFUwMDI1PjxVMDA0RT48VTAwMjU+PFUwMDY2PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2MT4vCis8VTAwMjU+PFUwMDRFPiIKKworJSBSZWZlcmVuY2U6CWh0dHA6Ly93d3cudW4ub3JnL0RlcHRzL3Vuc2QvbWV0aG9kcy9tNDlhbHBoYS5odG0KKyUJCWh0dHA6Ly93d3cuaXNibi5zcGstYmVybGluLmRlL2h0bWwvcHJlZml4Lmh0bQorJSBjb3VudHJ5X2FiMjoJVFcKKyUgY291bnRyeV9hYjM6CVRXTgorJSBjb3VudHJ5X2lzYm46CTk1NworY291bnRyeV9uYW1lCSI8VTRFMkQ+PFU4M0VGPjxVNkMxMT48VTU3MEI+IgorJWNvdW50cnlfcG9zdAkiRklYTUUiCitjb3VudHJ5X2FiMgkiPFUwMDU0PjxVMDA1Nz4iCitjb3VudHJ5X2FiMwkiPFUwMDU0PjxVMDA1Nz48VTAwNEU+IgorY291bnRyeV9udW0JMTU4CislY291bnRyeV9jYXIgICAgIkZJWE1FIgorY291bnRyeV9pc2JuCSI8VTAwMzk+PFUwMDM1PjxVMDAzNz4iCisKKyUgUmVmZXJlbmNlOglodHRwOi8vbGN3ZWIubG9jLmdvdi9zdGFuZGFyZHMvaXNvNjM5LTIvbGFuZ2hvbWUuaHRtbAorJSBsYW5nX2FiOgl6aAorJSBsYW5nX3Rlcm06CXpobworJSBsYW5nX2xpYjoJY2hpCitsYW5nX25hbWUJIjxVNEUyRD48VTY1ODc+IgorbGFuZ19hYgkJIjxVMDA3QT48VTAwNjg+IgorbGFuZ190ZXJtCSI8VTAwN0E+PFUwMDY4PjxVMDA2Rj4iCitsYW5nX2xpYgkiPFUwMDYzPjxVMDA2OD48VTAwNjk+IgorRU5EIExDX0FERFJFU1MKKworTENfTUVBU1VSRU1FTlQKK21lYXN1cmVtZW50CTEKK0VORCBMQ19NRUFTVVJFTUVOVApkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvenVfWkEgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy96dV9aQQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzRlNmU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9pMThuL2xvY2FsZXMvenVfWkEKQEAgLTAsMCArMSwyODUgQEAKK2VzY2FwZV9jaGFyICAvCitjb21tZW50X2NoYXIgICUKKworJSBDaGFyc2V0OiBVVEYtOAorCislIENoYW5nZUxvZworJSAwLjMgKDIwMDUtMTAtMTMpOgorJSAgICAgMjAwNS0xMC0xMiBEd2F5bmUgQmFpbGV5IDxkd2F5bmVAdHJhbnNsYXRlLm9yZy56YT4KKyUgICAgICAgIC0gQWRkZWQgJ0NoYXJzZXQ6IFVURi04JyBpbmZvcm1hdGlvbgorJSAgICAgICAgLSBVcGRhdGUgY29udGFjdCBpbmZvcm1hdGlvbgorJSAgICAgICAgLSBBbGxpZ24gc3BlbGxpbmdzIG9mIG1vbnRoIGFuZCB3ZWVrZGF5IG5hbWVzIHdpdGggRGVwdC4gb2YKKyUgICAgICAgICAgQXJ0IGFuZCBDdWx0dXJlJ3M6IE11bHRpbGluZ3VhbCBNYXRoZW1hdGljcyBEaWN0aW9uYXJ5CislIDAuMiAoMjAwNC0xMC0yOCk6CislICAgICAyMDA0LTEwLTI4IER3YXluZSBCYWlsZXkgPGR3YXluZUB0cmFuc2xhdGUub3JnLnphPgorJSAgICAgICAgLSBBZGRlZCBsYW5nX2xpYgorJSAgICAgICAgLSBSZXZlcnRlZCB2ZXJzaW9uIG51bWJlciB0byAwLjIgLSBuZWVkcyBtb3JlIHRlc3RpbmcKKyUgICAgIDIwMDQtMTAtMjcgRHdheW5lIEJhaWxleSA8ZHdheW5lQHRyYW5zbGF0ZS5vcmcuemE+CislICAgICAgICAtIEFkZCBUcmFuc2xhdGUub3JnLnphIHRvICJzb3VyY2UiIGZvciBjbGFyaXR5CislICAgICAgICAtIFVwZGF0ZSBhbGwgY29udGFjdCBkZXRhaWxzCislICAgICAgICAtIFJlbW92ZSAuKiBmcm9tIHllcy9ub2V4cHIKKyUgICAgIDIwMDQtMDMtMzAgRHdheW5lIEJhaWxleSA8ZHdheW5lQHRyYW5zbGF0ZS5vcmcuemE+CislICAgICAgICAtIEFkZGVkIGNvdW50cnlfYWIyLzMsIGNvdW50cnlfbnVtCislICAgICAgICAtIEFkZGVkIGNvdW50cnlfY2FyCislICAgICAyMDA0LTAzLTI5IER3YXluZSBCYWlsZXkgPGR3YXluZUB0cmFuc2xhdGUub3JnLnphPgorJSAgICAgICAtIEFkZGVkIGxhbmdfYWIgYW5kIGxhbmdfdGVybQorJSAgICAgMjAwNC0wMi0yNyBEd2F5bmUgQmFpbGV5IDxkd2F5bmVAdHJhbnNsYXRlLm9yZy56YT4KKyUJICAgIC0gQ29ycmVjdCBjYXBhdGlsaXNhdGlvbiBvZiBsYW5nX25hbWUKKyUgMC4xICgyMDAzLTA0LTE5KToKKyUgICAgIDIwMDMtMDQtMTk6CislICAgICAgIC0gSW5pdGlhbCBadWx1IGxvY2FsZSBieSBadXphIFNvZnR3YXJlIEZvdW5kYXRpb24KKworTENfSURFTlRJRklDQVRJT04KK3RpdGxlICAgICAgIlp1bHUgbG9jYWxlIGZvciBTb3V0aCBBZnJpY2EiCitzb3VyY2UgICAgICJadXphIFNvZnR3YXJlIEZvdW5kYXRpb24gKFRyYW5zbGF0ZS5vcmcuemEpIgorYWRkcmVzcyAgICAiQm94IDI4MzY0LCBTdW5ueXNpZGUsIDAxMzIsIFNvdXRoIEFmcmljYSIKK2NvbnRhY3QgICAgIkR3YXluZSBCYWlsZXkiCitlbWFpbCAgICAgICJkd2F5bmVAdHJhbnNsYXRlLm9yZy56YSIKK3RlbCAgICAgICAgIisyNyAxMiA0NjAgMTA5NSIKK2ZheCAgICAgICAgIisyNyAxMiA0NjAgMTA5NSIKK2xhbmd1YWdlICAgIlp1bHUiCit0ZXJyaXRvcnkgICJTb3V0aCBBZnJpY2EiCityZXZpc2lvbiAgICIwLjMiCitkYXRlICAgICAgICIyMDA1LTEwLTEzIgorJQorY2F0ZWdvcnkgICJ6dV9aQToyMDAzIjtMQ19JREVOVElGSUNBVElPTgorY2F0ZWdvcnkgICJ6dV9aQToyMDAzIjtMQ19DVFlQRQorY2F0ZWdvcnkgICJ6dV9aQToyMDAzIjtMQ19DT0xMQVRFCitjYXRlZ29yeSAgInp1X1pBOjIwMDMiO0xDX1RJTUUKK2NhdGVnb3J5ICAienVfWkE6MjAwMyI7TENfTlVNRVJJQworY2F0ZWdvcnkgICJ6dV9aQToyMDAzIjtMQ19NT05FVEFSWQorY2F0ZWdvcnkgICJ6dV9aQToyMDAzIjtMQ19NRVNTQUdFUworY2F0ZWdvcnkgICJ6dV9aQToyMDAzIjtMQ19QQVBFUgorY2F0ZWdvcnkgICJ6dV9aQToyMDAzIjtMQ19OQU1FCitjYXRlZ29yeSAgInp1X1pBOjIwMDMiO0xDX0FERFJFU1MKK2NhdGVnb3J5ICAienVfWkE6MjAwMyI7TENfVEVMRVBIT05FCitjYXRlZ29yeSAgInp1X1pBOjIwMDMiO0xDX01FQVNVUkVNRU5UCisKK0VORCBMQ19JREVOVElGSUNBVElPTgorCitMQ19DVFlQRQorJSBVc2UgdGhlIGNoYXJhY3RlcnMgZGVzY3JpYmVkIGluIHRoZSBjaGFybWFwIGZpbGUgImkxOG4udGd6IgorJQorY29weSAiaTE4biIKKwordHJhbnNsaXRfc3RhcnQKK2luY2x1ZGUgICJ0cmFuc2xpdF9jb21iaW5pbmciOyIiCit0cmFuc2xpdF9lbmQKK0VORCBMQ19DVFlQRQorCitMQ19DT0xMQVRFCislIENvcHkgdGhlIHRlbXBsYXRlIGZyb20gSVNPL0lFQyAxNDY1MSBpLmUuCislIHVzZSB0aGUgcnVsZXMgdGhlcmUgd2hlbiBtYWtpbmcgb3JkZXJlZCBsaXN0cyBvZiB3b3Jkcy4KKyUKK2NvcHkgImlzbzE0NjUxX3QxIgorRU5EIExDX0NPTExBVEUKKworTENfTU9ORVRBUlkKK2NvcHkgImVuX1pBIgorRU5EIExDX01PTkVUQVJZCisKK0xDX05VTUVSSUMKK2NvcHkgImVuX1pBIgorRU5EIExDX05VTUVSSUMKKworTENfVElNRQorJSBhYmRheSAtIFRoZSBhYmJyZXZpYXRpb25zIGZvciB0aGUgd2VlayBkYXlzOgorJSAtIFNvbiwgTXNvLCBCaWwsIFRoYSwgU2luLCBIbGEsIE1ncQorYWJkYXkgICAgICAgIjxVMDA1Mz48VTAwNkY+PFUwMDZFPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNzM+PFUwMDZGPiI7LworICAgICAgICAgICAgIjxVMDA0Mj48VTAwNjk+PFUwMDZDPiI7LworICAgICAgICAgICAgIjxVMDA1ND48VTAwNjg+PFUwMDYxPiI7LworICAgICAgICAgICAgIjxVMDA1Mz48VTAwNjk+PFUwMDZFPiI7LworICAgICAgICAgICAgIjxVMDA0OD48VTAwNkM+PFUwMDYxPiI7LworICAgICAgICAgICAgIjxVMDA0RD48VTAwNjc+PFUwMDcxPiIKKworJSBkYXkgLSBUaGUgZnVsbCBuYW1lcyBvZiB0aGUgd2VlayBkYXlzOgorJSAtIGlTb250bywgdU1zb21idWx1a28sIHVMd2VzaWJpbGksIHVMd2VzaXRoYXRodSwgdUx3ZXNpbmUsIHVMd2VzaWhsYW51LCB1TWdxaWJlbG8KK2RheSAgICAgICAgICI8VTAwNjk+PFUwMDUzPjxVMDA2Rj48VTAwNkU+PFUwMDc0PjxVMDA2Rj4iOy8KKyAgICAgICAgICAgICI8VTAwNzU+PFUwMDREPjxVMDA3Mz48VTAwNkY+PFUwMDZEPjxVMDA2Mj48VTAwNzU+PFUwMDZDPjxVMDA3NT48VTAwNkI+PFUwMDZGPiI7LworICAgICAgICAgICAgIjxVMDA3NT48VTAwNEM+PFUwMDc3PjxVMDA2NT48VTAwNzM+PFUwMDY5PjxVMDA2Mj48VTAwNjk+PFUwMDZDPjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNzU+PFUwMDRDPjxVMDA3Nz48VTAwNjU+PFUwMDczPjxVMDA2OT48VTAwNzQ+PFUwMDY4PjxVMDA2MT48VTAwNzQ+PFUwMDY4PjxVMDA3NT4iOy8KKyAgICAgICAgICAgICI8VTAwNzU+PFUwMDRDPjxVMDA3Nz48VTAwNjU+PFUwMDczPjxVMDA2OT48VTAwNkU+PFUwMDY1PiI7LworICAgICAgICAgICAgIjxVMDA3NT48VTAwNEM+PFUwMDc3PjxVMDA2NT48VTAwNzM+PFUwMDY5PjxVMDA2OD48VTAwNkM+PFUwMDYxPjxVMDA2RT48VTAwNzU+IjsvCisgICAgICAgICAgICAiPFUwMDc1PjxVMDA0RD48VTAwNjc+PFUwMDcxPjxVMDA2OT48VTAwNjI+PFUwMDY1PjxVMDA2Qz48VTAwNkY+IgorCislIGFibW9uIC0gVGhlIGFiYnJldmlhdGlvbnMgZm9yIHRoZSBtb250aHMKKyUgLSBNYXMsIE9sYSwgTmRhLCBNYmEsIEFiYSwgQW5nLCBOdHUsIE5jdywgTWFuLCBNZnUsIEx3ZSwgWmliCithYm1vbiAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNzM+IjsiPFUwMDRGPjxVMDA2Qz48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA2ND48VTAwNjE+IjsiPFUwMDREPjxVMDA2Mj48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDQxPjxVMDA2Mj48VTAwNjE+IjsiPFUwMDQxPjxVMDA2RT48VTAwNjc+IjsvCisgICAgICAgICAgICAiPFUwMDRFPjxVMDA3ND48VTAwNzU+IjsiPFUwMDRFPjxVMDA2Mz48VTAwNzc+IjsvCisgICAgICAgICAgICAiPFUwMDREPjxVMDA2MT48VTAwNkU+IjsiPFUwMDREPjxVMDA2Nj48VTAwNzU+IjsvCisgICAgICAgICAgICAiPFUwMDRDPjxVMDA3Nz48VTAwNjU+IjsiPFUwMDVBPjxVMDA2OT48VTAwNjI+IgorCislIG1vbiAtIFRoZSBmdWxsIG5hbWVzIG9mIHRoZSBtb250aHMgLQorJSAtIHVNYXNpbmdhbmEsIHVOaGxvbGFuamEsIHVOZGFzYSwgdU1iYXNhLCB1TmhsYWJhLCB1TmhsYW5ndWxhbmEKKyUgICB1TnR1bGlrYXppLCB1TmN3YWJhLCB1TWFuZHVsbywgdU1mdW1mdSwgdUx3ZXppLCB1WmliYW5kbGVsYQorbW9uICAgICAgICAgIjxVMDA3NT48VTAwNEQ+PFUwMDYxPjxVMDA3Mz48VTAwNjk+PFUwMDZFPjxVMDA2Nz48VTAwNjE+PFUwMDZFPjxVMDA2MT4iOy8KKyAgICAgICAgICAgICI8VTAwNzU+PFUwMDRFPjxVMDA2OD48VTAwNkM+PFUwMDZGPjxVMDA2Qz48VTAwNjE+PFUwMDZFPjxVMDA2QT48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDc1PjxVMDA0RT48VTAwNjQ+PFUwMDYxPjxVMDA3Mz48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDc1PjxVMDA0RD48VTAwNjI+PFUwMDYxPjxVMDA3Mz48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDc1PjxVMDA0RT48VTAwNjg+PFUwMDZDPjxVMDA2MT48VTAwNjI+PFUwMDYxPiI7LworICAgICAgICAgICAgIjxVMDA3NT48VTAwNEU+PFUwMDY4PjxVMDA2Qz48VTAwNjE+PFUwMDZFPjxVMDA2Nz48VTAwNzU+PFUwMDZDPjxVMDA2MT48VTAwNkU+PFUwMDYxPiI7LworICAgICAgICAgICAgIjxVMDA3NT48VTAwNEU+PFUwMDc0PjxVMDA3NT48VTAwNkM+PFUwMDY5PjxVMDA2Qj48VTAwNjE+PFUwMDdBPjxVMDA2OT4iOy8KKyAgICAgICAgICAgICI8VTAwNzU+PFUwMDRFPjxVMDA2Mz48VTAwNzc+PFUwMDYxPjxVMDA2Mj48VTAwNjE+IjsvCisgICAgICAgICAgICAiPFUwMDc1PjxVMDA0RD48VTAwNjE+PFUwMDZFPjxVMDA2ND48VTAwNzU+PFUwMDZDPjxVMDA2Rj4iOy8KKyAgICAgICAgICAgICI8VTAwNzU+PFUwMDREPjxVMDA2Nj48VTAwNzU+PFUwMDZEPjxVMDA2Nj48VTAwNzU+IjsvCisgICAgICAgICAgICAiPFUwMDc1PjxVMDA0Qz48VTAwNzc+PFUwMDY1PjxVMDA3QT48VTAwNjk+IjsvCisgICAgICAgICAgICAiPFUwMDc1PjxVMDA1QT48VTAwNjk+PFUwMDYyPjxVMDA2MT48VTAwNkU+PFUwMDY0PjxVMDA2Qz48VTAwNjU+PFUwMDZDPjxVMDA2MT4iCisKKyUgQWJyZXZpYXRlZCBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uIHRvIGJlIHJlZmVyZW5jZWQgYnkgdGhlICIlYyIgZmllbGQgZGVzY3JpcHRvciAtCitkX3RfZm10ICAgICAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2ND48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA1OT48VTAwMjA+PFUwMDI1PjxVMDA1ND48VTAwMjA+PFUwMDI1PjxVMDA1QT4iCislCislICIlYSIgKHNob3J0IHdlZWtkYXkgbmFtZSksCislICIlZCIgKGRheSBvZiBtb250aCBhcyBhIGRlY2ltYWwgbnVtYmVyKSwKKyUgIiViIiAoc2hvcnQgbW9udGggbmFtZSksCislICIlWSIgKHllYXIgd2l0aCBjZW50dXJ5IGFzIGEgZGVjaW1hbCBudW1iZXIpLAorJSAiJVQiICgyNC1ob3VyIGNsb2NrIHRpbWUgaW4gZm9ybWF0IEhIOk1NOlNTKSwKKyUgIiVaIiAoVGltZSB6b25lIG5hbWUpCisKKyUgRGF0ZSByZXByZXNlbnRhdGlvbiB0byBiZSByZWZlcmVuY2VkIGJ5IHRoZSAiJXgiIGZpZWxkIGRlc2NyaXB0b3IgLQorJSAiJWQvJW0vJVkiLCBkYXkvbW9udGgveWVhciBhcyBkZWNpbWFsIG51bWJlcnMgKDAxLzAxLzIwMDApLgorZF9mbXQgICAiPFUwMDI1PjxVMDA2ND48VTAwMkY+PFUwMDI1PjxVMDA2RD48VTAwMkY+PFUwMDI1PjxVMDA1OT4iCisKKyUgVGltZSByZXByZXNlbnRhdGlvbiB0byBiZSByZWZlcmVuY2VkIGJ5IHRoZSAiJVgiIGZpZWxkIGRlc2NyaXB0b3IgLQorJSAiJVQiICgyNC1ob3VyIGNsb2NrIHRpbWUgaW4gZm9ybWF0IEhIOk1NOlNTKQordF9mbXQgICAgICAgIjxVMDAyNT48VTAwNTQ+IgorCislIERlZmluZSByZXByZXNlbnRhdGlvbiBvZiBhbnRlIG1lcmlkaWVtIGFuZCBwb3N0IG1lcmlkaWVtIHN0cmluZ3MgLQorJSBUaGUgIiJzIG1lYW4gZGVmYXVsdCB0byAiQU0iIGFuZCAiUE0iLgorYW1fcG0gICAgICAgIiI7IiIKKworJSBEZWZpbmUgdGltZSByZXByZXNlbnRhdGlvbiBpbiAxMi1ob3VyIGZvcm1hdCB3aXRoICJhbV9wbSIsIHRvIGJlIHJlZmVyZW5jZWQgYnkgdGhlICIlciIKKyUgZmllbGQgZGVzY3JpcHRvciAtCislIFRoZSAiIiBtZWFucyB0aGF0IHRoaXMgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuCit0X2ZtdF9hbXBtICAiIgorCislIERhdGUgcmVwcmVzZW50YXRpb24gbm90IGRlc2NyaWJlZCBpbiBJU08vSUVDIDE0NjUyLiBDb21lcyBvdXQgYXMgLQorJSAiJWEgJWIgJWUgJUg6JU06JVMgJVogJVkiCitkYXRlX2ZtdCAiPFUwMDI1PjxVMDA2MT48VTAwMjA+PFUwMDI1PjxVMDA2Mj48VTAwMjA+PFUwMDI1PjxVMDA2NT4vCis8VTAwMjA+PFUwMDI1PjxVMDA0OD48VTAwM0E+PFUwMDI1PjxVMDA0RD48VTAwM0E+PFUwMDI1PjxVMDA1Mz48VTAwMjA+LworPFUwMDI1PjxVMDA1QT48VTAwMjA+PFUwMDI1PjxVMDA1OT4iCislIHdoaWNoIGlzCislICVhIC0gYWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lLAorJSAlYiAtIGFicmV2aWF0ZWQgbW9udGggbmFtZSwKKyUgJWUgLSBkYXkgb2YgbW9udGggYXMgYSBkZWNpbWFsIG51bWJlciB3aXRoIGxlYWRpbmcgc3BhY2UgKDEgdG8gMzEpLAorJSAlSCAtIGhvdXIgKDI0LWhvdXIgY2xvY2spIGFzIGEgZGVjaW1hbCBudW1iZXIgKDAwIHRvIDIzKSwKKyUgJU0gLSBtaW51dGUgYXMgYSBkZWNpbWFsIG51bWJlciAoMDAgdG8gNTkpLAorJSAlUyAtIHNlY29uZHMgYXMgYSBkZWNpbWFsIG51bWJlciAoMDAgdG8gNTkpLAorJSAlWiAtIHRpbWUtem9uZSBuYW1lLAorJSAlWSAtIHllYXIgd2l0aCBjZW50dXJ5IGFzIGEgZGVjaW1hbCBudW1iZXIsZS5nLiAyMDAxLgorCitFTkQgTENfVElNRQorCitMQ19NRVNTQUdFUworeWVzZXhwciAgICAgIjxVMDA1RT48VTAwNUI+PFUwMDc5PjxVMDA1OT48VTAwNUQ+IgorJSBUaGUgYWZmaXJtYXRpdmUgcmVzcG9uc2UgLQorJSAiXlt5WV0iCislCitub2V4cHIgICAgICAiPFUwMDVFPjxVMDA1Qj48VTAwNkU+PFUwMDRFPjxVMDA2Mz48VTAwNDM+PFUwMDVEPiIKKyUgVGhlIG5lZ2F0aXZlIHJlc3BvbnNlIC0KKyUgIl5bbk5jQ10iCislCitFTkQgTENfTUVTU0FHRVMKKworTENfUEFQRVIKK2NvcHkgImVuX1pBIgorRU5EIExDX1BBUEVSCisKK0xDX1RFTEVQSE9ORQorY29weSAiZW5fWkEiCitFTkQgTENfVEVMRVBIT05FCisKK0xDX01FQVNVUkVNRU5UCitjb3B5ICJlbl9aQSIKK0VORCBMQ19NRUFTVVJFTUVOVAorCitMQ19OQU1FCituYW1lX2ZtdCAgICAiPFUwMDI1PjxVMDA2ND48VTAwMjU+PFUwMDc0PjxVMDAyNT48VTAwNjc+PFUwMDI1PjxVMDA3ND4vCis8VTAwMjU+PFUwMDZEPjxVMDAyNT48VTAwNzQ+PFUwMDI1PjxVMDA2Nj4iCislIEZvcm1hdCBmb3IgYWRkcmVzc2luZyBhIHBlcnNvbi4KKyUgIiVkJXQlZyV0JW0ldCVmIgorJSAiU2FsdXRhdGlvbiIsCislICJFbXB0eSBzdHJpbmcsIG9yIDxTcGFjZT4iLAorJSAiRmlyc3QgZ2l2ZW4gbmFtZSIsCislICJFbXB0eSBzdHJpbmcsIG9yIDxTcGFjZT4iLAorJSAiTWlkZGxlIG5hbWVzIiwKKyUgIkVtcHR5IHN0cmluZywgb3IgPFNwYWNlPiIsCislICJDbGFuIG5hbWVzIgorJQorbmFtZV9taXNzICAgIjxVMDA0RT48VTAwNkI+PFUwMDZGPjxVMDA3Mz48VTAwNjE+PFUwMDdBPjxVMDA2MT48VTAwNkU+PFUwMDY1PiIKKyUgU2FsdXRhdGlvbiBmb3IgdW5tYXJyaWVkIGZlbWFsZXMgLSAiTmtvc2F6YW5lIgorJQorbmFtZV9tciAgICAgIjxVMDA0RD48VTAwNkU+PFUwMDc1PjxVMDA2RD48VTAwN0E+PFUwMDYxPjxVMDA2RT48VTAwNjU+IgorJSBTYWx1dGF0aW9uIGZvciBtYWxlcyAtICJNbnVtemFuZSIKKyUKK25hbWVfbXJzICAgICI8VTAwNEU+PFUwMDZCPjxVMDA2Rj48VTAwNzM+PFUwMDY5PjxVMDA2Qj48VTAwNjE+PFUwMDdBPjxVMDA2OT4iCislIFNhbHV0YXRpb24gZm9yIG1hcnJpZWQgZmVtYWxlcyAtICJOa29zaWthemkiCislCituYW1lX21zICAgICAiIgorJSBTYWx1dGF0aW9uIHZhbGlkIGZvciBhbGwgZmVtYWxlcyAtICIiIChubyB0ZXJtKQorRU5EIExDX05BTUUKKworTENfQUREUkVTUworY291bnRyeV9uYW1lICI8VTAwNEQ+PFUwMDdBPjxVMDA2MT48VTAwNkU+PFUwMDczPjxVMDA2OT48VTAwMjA+LworPFUwMDQxPjxVMDA2Nj48VTAwNzI+PFUwMDY5PjxVMDA2Qj48VTAwNjE+IgorJSBDb3VudHJ5IG5hbWUgaW4gWnVsdSAtICJNemFuc2kgQWZyaWthIgorJQorY291bnRyeV9wb3N0ICI8VTAwNUE+PFUwMDQxPiIKKyUgQWJicmV2aWF0ZWQgY291bnRyeSBwb3N0YWwgbmFtZSAtICJaQSIKKyUKK2xhbmdfbmFtZSAiPFUwMDQ5PjxVMDA3Mz48VTAwNjk+PFUwMDVBPjxVMDA3NT48VTAwNkM+PFUwMDc1PiIKKyUgTGFuZ3VhZ2UgbmFtZSBpbiBadWx1IC0gIklzaVp1bHUiCisKKyUgVU4gR2VuZXZlIDE5NDk6NjggRGlzdGluZ3Vpc2hpbmcgc2lnbnMgb2YgdmVoaWNsZXMgaW4gaW50ZXJuYXRpb25hbCB0cmFmZmljCislIGh0dHA6Ly93d3cudW5lY2Uub3JnL3RyYW5zL2NvbnZlbnRuL2Rpc3Rpbmctc2lnbnMtNS0yMDAxLnBkZgorJSAiWkEiCitjb3VudHJ5X2NhciAgICI8VTAwNUE+PFUwMDQxPiIKKworJSBJU08gNjM5IHR3byBhbmQgdGhyZWUgbGV0dGVyIGxhbmd1YWdlIG5hbWVzCislIHNlZSBodHRwOi8vd3d3LmxvYy5nb3Yvc3RhbmRhcmRzL2lzbzYzOS0yL2VuZ2xhbmduLmh0bWwKKyUgInp1IiwgInp1bCIsICJ6dWwiCitsYW5nX2FiICAgIjxVMDA3QT48VTAwNzU+IgorbGFuZ190ZXJtICI8VTAwN0E+PFUwMDc1PjxVMDA2Qz4iCitsYW5nX2xpYiAgIjxVMDA3QT48VTAwNzU+PFUwMDZDPiIKKworcG9zdGFsX2ZtdCAgICAiPFUwMDI1PjxVMDA2Nj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNjE+PFUwMDI1PjxVMDA0RT4vCis8VTAwMjU+PFUwMDY0PjxVMDAyNT48VTAwNEU+PFUwMDI1PjxVMDA2Mj48VTAwMjU+PFUwMDRFPjxVMDAyNT48VTAwNzM+LworPFUwMDIwPjxVMDAyNT48VTAwNjg+PFUwMDIwPjxVMDAyNT48VTAwNjU+PFUwMDIwPjxVMDAyNT48VTAwNzI+PFUwMDI1Pi8KKzxVMDA0RT48VTAwMjU+PFUwMDdBPjxVMDAyMD48VTAwMjU+PFUwMDU0PjxVMDAyNT4vCis8VTAwNEU+PFUwMDI1PjxVMDA2Mz48VTAwMjU+PFUwMDRFPiIKKyUgUmVwcmVzZW50YXRpb24gb2YgcG9zdGFsIGFkZHJlc3NlcyAobWludXMgdGhlIGFkZHJlc3NlZSdzIG5hbWUpIGluIFNvdXRoCislIEFmcmljYS4gKElnbm9yZWQgZm9yIG5vdykKKyUgIiVmJU4lYSVOJWQlTiViJU4lcyAlaCAlZSAlciVOJXogJVQlTiVjJU4iLCB3aGljaCBnaXZlcyAtCislICJmaXJtIG5hbWUiLAorJSAiZW5kIG9mIGxpbmUiLAorJSAiQy9PIGFkZHJlc3MiLAorJSAiZW5kIG9mIGxpbmUiLAorJSAiZGVwYXJ0bWVudCBuYW1lIiwKKyUgIkJ1aWxkaW5nIG5hbWUiLAorJSAiZW5kIG9mIGxpbmUiLAorJSAic3RyZWV0IG9yIGJsb2NrIG5hbWUiLAorJSAic3BhY2UiLAorJSAiaG91c2UgbnVtYmVyIG9yIGRlc2lnbmF0aW9uIiwKKyUgInNwYWNlIiwKKyUgImZsb29yIG51bWJlciIsCislICJzcGFjZSIsCislICJyb29tIG51bWJlciwgZG9vciBkZXNpZ25hdGlvbiIsCislICJlbmQgb2YgbGluZSIsCislICJwb3N0YWwgY29kZSIsCislICJzcGFjZSIsCislICJ0b3duLCBjaXR5IiwKKyUgImVuZCBvZiBsaW5lIiwKKyUgImNvdW50cnkgZGVzaWduYXRpb24gZm9yIHRoZSA8Y291bnRyeV9wb3N0PiBrZXl3b3JkIiwKKyUgImVuZCBvZiBsaW5lCislCisKKyUgSVNPIDMxNjYgY291bnRyeSBudW1iZXIgYW5kIDIgYW5kIDMgbGV0dGVyIGFicmV2aWF0aW9ucworJSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL29ubGluZWRhdC9jb3VudHJpZXMuaHRtbAorJSAiWkEiLCAiWkFGIgorY291bnRyeV9udW0gICA3MTAKK2NvdW50cnlfYWIyICAgIjxVMDA1QT48VTAwNDE+IgorY291bnRyeV9hYjMgICAiPFUwMDVBPjxVMDA0MT48VTAwNDY+IgorCitFTkQgTENfQUREUkVTUwpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9sb2NhbGUvYmUvTENfTUVTU0FHRVMvbGliYy5tbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2JlL0xDX01FU1NBR0VTL2xpYmMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc2YmJlZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2JlL0xDX01FU1NBR0VTL2xpYmMubW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9sb2NhbGUvYmcvTENfTUVTU0FHRVMvbGliYy5tbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2JnL0xDX01FU1NBR0VTL2xpYmMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAwYmY3NwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2JnL0xDX01FU1NBR0VTL2xpYmMubW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9sb2NhbGUvY2EvTENfTUVTU0FHRVMvbGliYy5tbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2NhL0xDX01FU1NBR0VTL2xpYmMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIyOTRkMwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2NhL0xDX01FU1NBR0VTL2xpYmMubW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9sb2NhbGUvY3MvTENfTUVTU0FHRVMvbGliYy5tbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2NzL0xDX01FU1NBR0VTL2xpYmMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMxMjFlZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2NzL0xDX01FU1NBR0VTL2xpYmMubW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9sb2NhbGUvZGEvTENfTUVTU0FHRVMvbGliYy5tbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2RhL0xDX01FU1NBR0VTL2xpYmMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMzNDBjZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2RhL0xDX01FU1NBR0VTL2xpYmMubW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9sb2NhbGUvZGUvTENfTUVTU0FHRVMvbGliYy5tbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2RlL0xDX01FU1NBR0VTL2xpYmMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUyNTgwZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2RlL0xDX01FU1NBR0VTL2xpYmMubW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9sb2NhbGUvZWwvTENfTUVTU0FHRVMvbGliYy5tbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2VsL0xDX01FU1NBR0VTL2xpYmMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk2YWUzNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2VsL0xDX01FU1NBR0VTL2xpYmMubW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9sb2NhbGUvZW5fR0IvTENfTUVTU0FHRVMvbGliYy5tbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2VuX0dCL0xDX01FU1NBR0VTL2xpYmMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFmZjBjNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2VuX0dCL0xDX01FU1NBR0VTL2xpYmMubW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9sb2NhbGUvZXMvTENfTUVTU0FHRVMvbGliYy5tbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2VzL0xDX01FU1NBR0VTL2xpYmMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdjMmEyOAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2VzL0xDX01FU1NBR0VTL2xpYmMubW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9sb2NhbGUvZmkvTENfTUVTU0FHRVMvbGliYy5tbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2ZpL0xDX01FU1NBR0VTL2xpYmMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkwMDUwMAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2ZpL0xDX01FU1NBR0VTL2xpYmMubW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9sb2NhbGUvZnIvTENfTUVTU0FHRVMvbGliYy5tbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2ZyL0xDX01FU1NBR0VTL2xpYmMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFjODJhYgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2ZyL0xDX01FU1NBR0VTL2xpYmMubW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9sb2NhbGUvZ2wvTENfTUVTU0FHRVMvbGliYy5tbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2dsL0xDX01FU1NBR0VTL2xpYmMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU0ZmYzOQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2dsL0xDX01FU1NBR0VTL2xpYmMubW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9sb2NhbGUvaHIvTENfTUVTU0FHRVMvbGliYy5tbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2hyL0xDX01FU1NBR0VTL2xpYmMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcyYjgwZAotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2hyL0xDX01FU1NBR0VTL2xpYmMubW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9sb2NhbGUvaHUvTENfTUVTU0FHRVMvbGliYy5tbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2h1L0xDX01FU1NBR0VTL2xpYmMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FkNWQ1NgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2h1L0xDX01FU1NBR0VTL2xpYmMubW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9sb2NhbGUvaWQvTENfTUVTU0FHRVMvbGliYy5tbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2lkL0xDX01FU1NBR0VTL2xpYmMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JiZjI2ZgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2lkL0xDX01FU1NBR0VTL2xpYmMubW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9sb2NhbGUvaXQvTENfTUVTU0FHRVMvbGliYy5tbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2l0L0xDX01FU1NBR0VTL2xpYmMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU1MDc0NgotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2l0L0xDX01FU1NBR0VTL2xpYmMubW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9sb2NhbGUvamEvTENfTUVTU0FHRVMvbGliYy5tbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2phL0xDX01FU1NBR0VTL2xpYmMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYzY2E3ZQotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2phL0xDX01FU1NBR0VTL2xpYmMubW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9sb2NhbGUva28vTENfTUVTU0FHRVMvbGliYy5tbyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2tvL0xDX01FU1NBR0VTL2xpYmMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JiODFhNwotLS0gL2Rldi9udWxsCisrKyBiL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2tvL0xDX01FU1NBR0VTL2xpYmMubW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9sb2NhbGUvbG9jYWxlLmFsaWFzIGIvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9zaGFyZS9sb2NhbGUvbG9jYWxlLmFsaWFzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1Yzk3OWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS9sb2NhbGUuYWxpYXMKQEAgLTAsMCArMSw3NCBAQAorIyBMb2NhbGUgbmFtZSBhbGlhcyBkYXRhIGJhc2UuCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDAxLDIwMDMsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKworIyBUaGUgZm9ybWF0IG9mIHRoaXMgZmlsZSBpcyB0aGUgc2FtZSBhcyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZmlsZSBvZgorIyB0aGUgWCBXaW5kb3cgU3lzdGVtLCB3aGljaCBub3JtYWxseSBjYW4gYmUgZm91bmQgaW4KKyMJL3Vzci9saWIvWDExL2xvY2FsZS9sb2NhbGUuYWxpYXMKKyMgQSBzaW5nbGUgbGluZSBjb250YWlucyB0d28gZmllbGRzOiBhbiBhbGlhcyBhbmQgYSBzdWJzdGl0dXRpb24gdmFsdWUuCisjIEFsbCBlbnRyaWVzIGFyZSBjYXNlIGluZGVwZW5kZW50LgorCisjIE5vdGU6IFRoaXMgZmlsZSBpcyBvYnNvbGV0ZSBhbmQgaXMga2VwdCBhcm91bmQgZm9yIHRoZSB0aW1lIGJlaW5nIGZvcgorIyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgTm9ib2R5IHNob3VsZCByZWx5IG9uIHRoZSBuYW1lcyBkZWZpbmVkIGhlcmUuCisjIExvY2FsZXMgc2hvdWxkIGFsd2F5cyBiZSBzcGVjaWZpZWQgYnkgdGhlaXIgZnVsbCBuYW1lLgorCitib2ttYWwJCW5iX05PLklTTy04ODU5LTEKK2Jva23lbAkJbmJfTk8uSVNPLTg4NTktMQorY2F0YWxhbgkJY2FfRVMuSVNPLTg4NTktMQorY3JvYXRpYW4JaHJfSFIuSVNPLTg4NTktMgorY3plY2gJCWNzX0NaLklTTy04ODU5LTIKK2RhbmlzaCAgICAgICAgICBkYV9ESy5JU08tODg1OS0xCitkYW5zawkJZGFfREsuSVNPLTg4NTktMQorZGV1dHNjaAkJZGVfREUuSVNPLTg4NTktMQorZHV0Y2gJCW5sX05MLklTTy04ODU5LTEKK2Vlc3RpCQlldF9FRS5JU08tODg1OS0xCitlc3RvbmlhbglldF9FRS5JU08tODg1OS0xCitmaW5uaXNoICAgICAgICAgZmlfRkkuSVNPLTg4NTktMQorZnJhbudhaXMJZnJfRlIuSVNPLTg4NTktMQorZnJlbmNoCQlmcl9GUi5JU08tODg1OS0xCitnYWxlZ28JCWdsX0VTLklTTy04ODU5LTEKK2dhbGljaWFuCWdsX0VTLklTTy04ODU5LTEKK2dlcm1hbgkJZGVfREUuSVNPLTg4NTktMQorZ3JlZWsgICAgICAgICAgIGVsX0dSLklTTy04ODU5LTcKK2hlYnJldyAgICAgICAgICBoZV9JTC5JU08tODg1OS04CitocnZhdHNraQlocl9IUi5JU08tODg1OS0yCitodW5nYXJpYW4gICAgICAgaHVfSFUuSVNPLTg4NTktMgoraWNlbGFuZGljICAgICAgIGlzX0lTLklTTy04ODU5LTEKK2l0YWxpYW4gICAgICAgICBpdF9JVC5JU08tODg1OS0xCitqYXBhbmVzZQlqYV9KUC5ldWNKUAoramFwYW5lc2UuZXVjCWphX0pQLmV1Y0pQCitqYV9KUAkJamFfSlAuZXVjSlAKK2phX0pQLnVqaXMJamFfSlAuZXVjSlAKK2phcGFuZXNlLnNqaXMJamFfSlAuU0pJUwora29yZWFuCQlrb19LUi5ldWNLUgora29yZWFuLmV1YyAJa29fS1IuZXVjS1IKK2tvX0tSCQlrb19LUi5ldWNLUgorbGl0aHVhbmlhbiAgICAgIGx0X0xULklTTy04ODU5LTEzCitub19OTwkJbmJfTk8uSVNPLTg4NTktMQorbm9fTk8uSVNPLTg4NTktMSBuYl9OTy5JU08tODg1OS0xCitub3J3ZWdpYW4gICAgICAgbmJfTk8uSVNPLTg4NTktMQorbnlub3JzawkJbm5fTk8uSVNPLTg4NTktMQorcG9saXNoICAgICAgICAgIHBsX1BMLklTTy04ODU5LTIKK3BvcnR1Z3Vlc2UgICAgICBwdF9QVC5JU08tODg1OS0xCityb21hbmlhbiAgICAgICAgcm9fUk8uSVNPLTg4NTktMgorcnVzc2lhbiAgICAgICAgIHJ1X1JVLklTTy04ODU5LTUKK3Nsb3ZhayAgICAgICAgICBza19TSy5JU08tODg1OS0yCitzbG92ZW5lICAgICAgICAgc2xfU0kuSVNPLTg4NTktMgorc2xvdmVuaWFuICAgICAgIHNsX1NJLklTTy04ODU5LTIKK3NwYW5pc2ggICAgICAgICBlc19FUy5JU08tODg1OS0xCitzd2VkaXNoICAgICAgICAgc3ZfU0UuSVNPLTg4NTktMQordGhhaQkJdGhfVEguVElTLTYyMAordHVya2lzaCAgICAgICAgIHRyX1RSLklTTy04ODU5LTkKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL2x0L0xDX01FU1NBR0VTL2xpYmMubW8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS9sdC9MQ19NRVNTQUdFUy9saWJjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MTBjN2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS9sdC9MQ19NRVNTQUdFUy9saWJjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL25iL0xDX01FU1NBR0VTL2xpYmMubW8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS9uYi9MQ19NRVNTQUdFUy9saWJjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNDQ1NTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS9uYi9MQ19NRVNTQUdFUy9saWJjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL25sL0xDX01FU1NBR0VTL2xpYmMubW8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS9ubC9MQ19NRVNTQUdFUy9saWJjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1N2MxMTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS9ubC9MQ19NRVNTQUdFUy9saWJjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL3BsL0xDX01FU1NBR0VTL2xpYmMubW8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS9wbC9MQ19NRVNTQUdFUy9saWJjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMjY3NjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS9wbC9MQ19NRVNTQUdFUy9saWJjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL3B0X0JSL0xDX01FU1NBR0VTL2xpYmMubW8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS9wdF9CUi9MQ19NRVNTQUdFUy9saWJjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwYmJhMmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS9wdF9CUi9MQ19NRVNTQUdFUy9saWJjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL3J1L0xDX01FU1NBR0VTL2xpYmMubW8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS9ydS9MQ19NRVNTQUdFUy9saWJjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YWQ5YWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS9ydS9MQ19NRVNTQUdFUy9saWJjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL3J3L0xDX01FU1NBR0VTL2xpYmMubW8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS9ydy9MQ19NRVNTQUdFUy9saWJjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzY2ExOTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS9ydy9MQ19NRVNTQUdFUy9saWJjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL3NrL0xDX01FU1NBR0VTL2xpYmMubW8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS9zay9MQ19NRVNTQUdFUy9saWJjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNzJmNTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS9zay9MQ19NRVNTQUdFUy9saWJjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL3N2L0xDX01FU1NBR0VTL2xpYmMubW8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS9zdi9MQ19NRVNTQUdFUy9saWJjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZTA0ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS9zdi9MQ19NRVNTQUdFUy9saWJjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL3RyL0xDX01FU1NBR0VTL2xpYmMubW8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS90ci9MQ19NRVNTQUdFUy9saWJjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YjM5YTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS90ci9MQ19NRVNTQUdFUy9saWJjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL3ZpL0xDX01FU1NBR0VTL2xpYmMubW8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS92aS9MQ19NRVNTQUdFUy9saWJjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMDFkMjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS92aS9MQ19NRVNTQUdFUy9saWJjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL3poX0NOL0xDX01FU1NBR0VTL2xpYmMubW8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS96aF9DTi9MQ19NRVNTQUdFUy9saWJjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZDM5MmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS96aF9DTi9MQ19NRVNTQUdFUy9saWJjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdC91c3Ivc2hhcmUvbG9jYWxlL3poX1RXL0xDX01FU1NBR0VTL2xpYmMubW8gYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS96aF9UVy9MQ19NRVNTQUdFUy9saWJjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlN2ZiNDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3QvdXNyL3NoYXJlL2xvY2FsZS96aF9UVy9MQ19NRVNTQUdFUy9saWJjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Jpbi9hY2xvY2FsIGIvYmluL2FjbG9jYWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGY1OTM0MgotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hY2xvY2FsCkBAIC0wLDAgKzEsMTA5MiBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjIC0qLSBwZXJsIC0qLQorIyBHZW5lcmF0ZWQgZnJvbSBhY2xvY2FsLmluOyBkbyBub3QgZWRpdCBieSBoYW5kLgorCitldmFsICdjYXNlICQjIGluIDApIGV4ZWMgL3Vzci9iaW4vcGVybCAtUyAiJDAiOzsgKikgZXhlYyAvdXNyL2Jpbi9wZXJsIC1TICIkMCIgIiRAIjs7IGVzYWMnCisgICAgaWYgMDsKKworIyBhY2xvY2FsIC0gY3JlYXRlIGFjbG9jYWwubTQgYnkgc2Nhbm5pbmcgY29uZmlndXJlLmFjCisKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LAorIyAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgV3JpdHRlbiBieSBUb20gVHJvbWV5IDx0cm9tZXlAcmVkaGF0LmNvbT4sIGFuZAorIyBBbGV4YW5kcmUgRHVyZXQtTHV0eiA8YWRsQGdudS5vcmc+LgorCitCRUdJTgoreworICBteSAkcGVybGxpYmRpciA9ICRFTlZ7J3BlcmxsaWJkaXInfSB8fCAnL3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyL3NoYXJlL2F1dG9tYWtlLTEuMTEnOworICB1bnNoaWZ0IEBJTkMsIChzcGxpdCAnOicsICRwZXJsbGliZGlyKTsKK30KKwordXNlIHN0cmljdDsKKwordXNlIEF1dG9tYWtlOjpDb25maWc7Cit1c2UgQXV0b21ha2U6OkdlbmVyYWw7Cit1c2UgQXV0b21ha2U6OkNvbmZpZ3VyZV9hYzsKK3VzZSBBdXRvbWFrZTo6Q2hhbm5lbHM7Cit1c2UgQXV0b21ha2U6OkNoYW5uZWxEZWZzOwordXNlIEF1dG9tYWtlOjpYRmlsZTsKK3VzZSBBdXRvbWFrZTo6RmlsZVV0aWxzOwordXNlIEZpbGU6OkJhc2VuYW1lOwordXNlIEZpbGU6OnN0YXQ7Cit1c2UgQ3dkOworCisjIFNvbWUgZ2xvYmFscy4KKworIyBXZSBkbyBub3Qgb3BlcmF0ZSBpbiB0aHJlYWRlZCBtb2RlLgorJHBlcmxfdGhyZWFkcyA9IDA7CisKKyMgSW5jbHVkZSBwYXRocyBmb3Igc2VhcmNoaW5nIG1hY3Jvcy4gIFdlIHNlYXJjaCBtYWNyb3MgaW4gdGhpcyBvcmRlcjoKKyMgdXNlci1zdXBwbGllZCBkaXJlY3RvcmllcyBmaXJzdCwgdGhlbiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlCisjIGF1dG9tYWtlIG1hY3JvcywgYW5kIGZpbmFsbHkgdGhlIHN5c3RlbS13aWRlIGRpcmVjdG9yaWVzIGZvcgorIyB0aGlyZC1wYXJ0eSBtYWNyby4gIEB1c2VyX2luY2x1ZGVzIGNhbiBiZSBhdWdtZW50ZWQgd2l0aCAtSS4KKyMgQHN5c3RlbV9pbmNsdWRlcyBjYW4gYmUgYXVnbWVudGVkIHdpdGggdGhlIGBkaXJsaXN0JyBmaWxlLiAgQWxzbworIyAtLWFjZGlyIHdpbGwgcmVzZXQgYm90aCBAYXV0b21ha2VfaW5jbHVkZXMgYW5kIEBzeXN0ZW1faW5jbHVkZXMuCitteSBAdXNlcl9pbmNsdWRlcyA9ICgpOworbXkgQGF1dG9tYWtlX2luY2x1ZGVzID0gKCIvdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3Ivc2hhcmUvYWNsb2NhbC0kQVBJVkVSU0lPTiIpOworbXkgQHN5c3RlbV9pbmNsdWRlcyA9ICgnL3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyL3NoYXJlL2FjbG9jYWwnKTsKKworIyBXaGV0aGVyIHdlIHNob3VsZCBjb3B5IE00IGZpbGUgaW4gJHVzZXJfaW5jbHVkZXNbMF0uCitteSAkaW5zdGFsbCA9IDA7CisKKyMgLS1kaWZmCitteSBAZGlmZl9jb21tYW5kOworCisjIC0tZHJ5LXJ1bgorbXkgJGRyeV9ydW4gPSAwOworCisjIGNvbmZpZ3VyZS5hYyBvciBjb25maWd1cmUuaW4uCitteSAkY29uZmlndXJlX2FjOworCisjIE91dHB1dCBmaWxlIG5hbWUuCitteSAkb3V0cHV0X2ZpbGUgPSAnYWNsb2NhbC5tNCc7CisKKyMgT3B0aW9uIC0tZm9yY2UuCitteSAkZm9yY2Vfb3V0cHV0ID0gMDsKKworIyBNb2RpZmljYXRpb24gdGltZSBvZiB0aGUgeW91bmdlc3QgZGVwZW5kZW5jeS4KK215ICRncmVhdGVzdF9tdGltZSA9IDA7CisKKyMgV2hpY2ggbWFjcm9zIGhhdmUgYmVlbiBzZWVuLgorbXkgJW1hY3JvX3NlZW4gPSAoKTsKKworIyBSZW1lbWJlciB0aGUgb3JkZXIgaW50byB3aGljaCB3ZSBzY2FubmVkIHRoZSBmaWxlcy4KKyMgSXQncyBpbXBvcnRhbnQgdG8gb3V0cHV0IHRoZSBjb250ZW50cyBvZiBhY2xvY2FsLm00IGluIHRoZSBvcHBvc2l0ZSBvcmRlci4KKyMgKERlZmluaXRpb25zIGluIGZpcnN0IGZpbGVzIHdlIGhhdmUgc2Nhbm5lZCBzaG91bGQgb3ZlcnJpZGUgdGhvc2UgZnJvbQorIyBsYXRlciBmaWxlcy4gIFNvIHRoZXkgbXVzdCBhcHBlYXIgbGFzdCBpbiB0aGUgb3V0cHV0LikKK215IEBmaWxlX29yZGVyID0gKCk7CisKKyMgTWFwIG1hY3JvIG5hbWVzIHRvIGZpbGUgbmFtZXMuCitteSAlbWFwID0gKCk7CisKKyMgRGl0dG8sIGJ1dCByZWNvcmRzIHRoZSBsYXN0IGRlZmluaXRpb24gb2YgZWFjaCBtYWNybyBhcyByZXR1cm5lZCBieSAtLXRyYWNlLgorbXkgJW1hcF90cmFjZWRfZGVmcyA9ICgpOworCisjIE1hcCBiYXNlbmFtZXMgdG8gbWFjcm8gbmFtZXMuCitteSAlaW52bWFwID0gKCk7CisKKyMgTWFwIGZpbGUgbmFtZXMgdG8gZmlsZSBjb250ZW50cy4KK215ICVmaWxlX2NvbnRlbnRzID0gKCk7CisKKyMgTWFwIGZpbGUgbmFtZXMgdG8gZmlsZSB0eXBlcy4KK215ICVmaWxlX3R5cGUgPSAoKTsKK3VzZSBjb25zdGFudCBGVF9VU0VSID0+IDE7Cit1c2UgY29uc3RhbnQgRlRfQVVUT01BS0UgPT4gMjsKK3VzZSBjb25zdGFudCBGVF9TWVNURU0gPT4gMzsKKworIyBNYXAgZmlsZSBuYW1lcyB0byBpbmNsdWRlZCBmaWxlcyAodHJhbnNpdGl2ZWx5IGNsb3NlZCkuCitteSAlZmlsZV9pbmNsdWRlcyA9ICgpOworCisjIEZpbGVzIHdoaWNoIGhhdmUgYWxyZWFkeSBiZWVuIGFkZGVkLgorbXkgJWZpbGVfYWRkZWQgPSAoKTsKKworIyBGaWxlcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHNjYW5uZWQuCitteSAlc2Nhbm5lZF9jb25maWd1cmVfZGVwID0gKCk7CisKKyMgU2VyaWFsIG51bWJlcnMsIGZvciBmaWxlcyB0aGF0IGhhdmUgb25lLgorIyBUaGUga2V5IGlzIHRoZSBiYXNlbmFtZSBvZiB0aGUgZmlsZSwKKyMgdGhlIHZhbHVlIGlzIHRoZSBzZXJpYWwgbnVtYmVyIHJlcHJlc2VudGVkIGFzIGEgbGlzdC4KK215ICVzZXJpYWwgPSAoKTsKKworIyBNYXRjaGVzIGEgbWFjcm8gZGVmaW5pdGlvbi4KKyMgICBBQ19ERUZVTihbbWFjcm9uYW1lXSwgLi4uKQorIyBvcgorIyAgIEFDX0RFRlVOKG1hY3JvbmFtZSwgLi4uKQorIyBXaGVuIG1hY3JvbmFtZSBpcyBgWyctcXVvdGVkICwgd2UgYWNjZXB0IGFueSBjaGFyYWN0ZXIgaW4gdGhlIG5hbWUsCisjIGV4Y2VwdCBgXScuICBPdGhlcndpc2UgbWFjcm9uYW1lIHN0b3BzIG9uIHRoZSBmaXJzdCBgXScsIGAsJywgYCknLAorIyBvciBgXG4nIGVuY291bnRlcmVkLgorbXkgJGFjX2RlZnVuX3J4ID0KKyAgIig/OkFVX0FMSUFTfEFbQ1VdX0RFRlVOfEFDX0RFRlVOX09OQ0UpXFwoKD86XFxbKFteXV0rKVxcXXwoW15dLClcbl0rKSkiOworCisjIE1hdGNoZXMgYW4gQUNfUkVRVUlSRSBsaW5lLgorbXkgJGFjX3JlcXVpcmVfcnggPSAiQUNfUkVRVUlSRVxcKCg/OlxcWyhbXl1dKylcXF18KFteXSwpXG5dKykpXFwpIjsKKworIyBNYXRjaGVzIGFuIG00X2luY2x1ZGUgbGluZS4KK215ICRtNF9pbmNsdWRlX3J4ID0gIihtNF98bTRfc3xzKWluY2x1ZGVcXCgoPzpcXFsoW15dXSspXFxdfChbXl0sKVxuXSspKVxcKSI7CisKKyMgTWF0Y2ggYSBzZXJpYWwgbnVtYmVyLgorbXkgJHNlcmlhbF9saW5lX3J4ID0gJ14jXHMqc2VyaWFsXHMrKFxTKiknOworbXkgJHNlcmlhbF9udW1iZXJfcnggPSAnXlxkKyg/OlwuXGQrKSokJzsKKworIyBBdXRvY29uZiB2ZXJzaW9uCisjIFNldCBieSB0cmFjZV91c2VkX21hY3Jvcy4KK215ICRhY192ZXJzaW9uOworCisjIElmIHNldCwgbmFtZXMgYSB0ZW1wb3JhcnkgZmlsZSB0aGF0IG11c3QgYmUgZXJhc2VkIG9uIGFibm9ybWFsIGV4aXQuCitteSAkZXJhc2VfbWU7CisMCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgRXJhc2UgdGVtcG9yYXJ5IGZpbGUgRVJBU0VfTUUuICBIYW5kbGUgc2lnbmFscy4KK3N1YiB1bmxpbmtfdG1wCit7CisgIG15ICgkc2lnKSA9IEBfOworCisgIGlmICgkc2lnKQorICAgIHsKKyAgICAgIHZlcmIgImNhdWdodCBTSUckc2lnLCBiYWlsaW5nIG91dCI7CisgICAgfQorICBpZiAoZGVmaW5lZCAkZXJhc2VfbWUgJiYgLWUgJGVyYXNlX21lICYmICF1bmxpbmsgKCRlcmFzZV9tZSkpCisgICAgeworICAgICAgZmF0YWwgImNvdWxkIG5vdCByZW1vdmUgYCRlcmFzZV9tZSc6ICQhIjsKKyAgICB9CisgIHVuZGVmICRlcmFzZV9tZTsKKworICAjIHJlcmFpc2UgZGVmYXVsdCBoYW5kbGVyLgorICBpZiAoJHNpZykKKyAgICB7CisgICAgICAkU0lHeyRzaWd9ID0gJ0RFRkFVTFQnOworICAgICAga2lsbCAkc2lnID0+ICQkOworICAgIH0KK30KKworJFNJR3snSU5UJ30gPSAkU0lHeydURVJNJ30gPSAkU0lHeydRVUlUJ30gPSAkU0lHeydIVVAnfSA9ICd1bmxpbmtfdG1wJzsKK0VORCB7IHVubGlua190bXAgfQorCisjIENoZWNrIG1hY3JvcyBpbiBhY2luY2x1ZGUubTQuICBJZiBvbmUgaXMgbm90IHVzZWQsIHdhcm4uCitzdWIgY2hlY2tfYWNpbmNsdWRlICgpCit7CisgIGZvcmVhY2ggbXkgJGtleSAoa2V5cyAlbWFwKQorICAgIHsKKyAgICAgICMgRklYTUU6IHNob3VsZCBwcmludCBsaW5lIG51bWJlciBvZiBhY2luY2x1ZGUubTQuCisgICAgICBtc2cgKCdzeW50YXgnLCAid2FybmluZzogbWFjcm8gYCRrZXknIGRlZmluZWQgaW4gIgorCSAgIC4gImFjaW5jbHVkZS5tNCBidXQgbmV2ZXIgdXNlZCIpCisJaWYgJG1hcHska2V5fSBlcSAnYWNpbmNsdWRlLm00JyAmJiAhIGV4aXN0cyAkbWFjcm9fc2Vlbnska2V5fTsKKyAgICB9Cit9CisKK3N1YiByZXNldF9tYXBzICgpCit7CisgICRncmVhdGVzdF9tdGltZSA9IDA7CisgICVtYWNyb19zZWVuID0gKCk7CisgIEBmaWxlX29yZGVyID0gKCk7CisgICVtYXAgPSAoKTsKKyAgJW1hcF90cmFjZWRfZGVmcyA9ICgpOworICAlZmlsZV9jb250ZW50cyA9ICgpOworICAlZmlsZV90eXBlID0gKCk7CisgICVmaWxlX2luY2x1ZGVzID0gKCk7CisgICVmaWxlX2FkZGVkID0gKCk7CisgICVzY2FubmVkX2NvbmZpZ3VyZV9kZXAgPSAoKTsKKyAgJWludm1hcCA9ICgpOworICAlc2VyaWFsID0gKCk7CisgIHVuZGVmICZzZWFyY2g7Cit9CisKKyMgaW5zdGFsbF9maWxlICgkU1JDLCAkREVTVCkKK3N1YiBpbnN0YWxsX2ZpbGUgKCQkKQoreworICBteSAoJHNyYywgJGRlc3QpID0gQF87CisgIG15ICRkaWZmX2Rlc3Q7CisKKyAgaWYgKCRmb3JjZV9vdXRwdXQKKyAgICAgIHx8ICFleGlzdHMgJGZpbGVfY29udGVudHN7JGRlc3R9CisgICAgICB8fCAkZmlsZV9jb250ZW50c3skc3JjfSBuZSAkZmlsZV9jb250ZW50c3skZGVzdH0pCisgICAgeworICAgICAgaWYgKC1lICRkZXN0KQorCXsKKwkgIG1zZyAnbm90ZScsICJvdmVyd3JpdGluZyBgJGRlc3QnIHdpdGggYCRzcmMnIjsKKwkgICRkaWZmX2Rlc3QgPSAkZGVzdDsKKwl9CisgICAgICBlbHNlCisJeworCSAgbXNnICdub3RlJywgImluc3RhbGxpbmcgYCRkZXN0JyBmcm9tIGAkc3JjJyI7CisJfQorCisgICAgICBpZiAoQGRpZmZfY29tbWFuZCkKKwl7CisJICBpZiAoISBkZWZpbmVkICRkaWZmX2Rlc3QpCisJICAgIHsKKwkgICAgICAjICRkZXN0IGRvZXMgbm90IGV4aXN0LiAgV2UgY3JlYXRlIGFuIGVtcHR5IG9uZSBqdXN0IHRvCisJICAgICAgIyBydW4gZGlmZiwgYW5kIHdlIGVyYXNlIGl0IGFmdGVyd2FyZC4gIFVzaW5nIHRoZSByZWFsCisJICAgICAgIyB0aGUgZGVzdGluYXRpb24gZmlsZSAocmF0aGVyIHRoYW4gYSB0ZW1wb3JhcnkgZmlsZSkgaXMKKwkgICAgICAjIGdvb2Qgd2hlbiBkaWZmIGlzIHJ1biB3aXRoIG9wdGlvbnMgdGhhdCBkaXNwbGF5IHRoZQorCSAgICAgICMgZmlsZSBuYW1lLgorCSAgICAgICMKKwkgICAgICAjIElmIGNyZWF0aW5nICRkZXN0IGZhaWxzLCBmYWxsIGJhY2sgdG8gL2Rldi9udWxsLiAgQXQKKwkgICAgICAjIGxlYXN0IG9uZSBkaWZmIGltcGxlbWVudGF0aW9uIChUcnU2NCdzKSBjYW5ub3QgZGVhbAorCSAgICAgICMgd2l0aCAvZGV2L251bGwuICBIb3dldmVyIHdvcmtpbmcgYXJvdW5kIHRoaXMgaXMgbm90CisJICAgICAgIyB3b3J0aCB0aGUgdHJvdWJsZSBzaW5jZSBub2JvZHkgcnVuIGFjbG9jYWwgb24gYQorCSAgICAgICMgcmVhZC1vbmx5IHRyZWUgYW55d2F5LgorCSAgICAgICRlcmFzZV9tZSA9ICRkZXN0OworCSAgICAgIG15ICRmID0gbmV3IElPOjpGaWxlICI+ICRkZXN0IjsKKwkgICAgICBpZiAoISBkZWZpbmVkICRmKQorCQl7CisJCSAgdW5kZWYgJGVyYXNlX21lOworCQkgICRkaWZmX2Rlc3QgPSAnL2Rldi9udWxsJzsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgICRkaWZmX2Rlc3QgPSAkZGVzdDsKKwkJICAkZi0+Y2xvc2U7CisJCX0KKwkgICAgfQorCSAgbXkgQGNtZCA9IChAZGlmZl9jb21tYW5kLCAkZGlmZl9kZXN0LCAkc3JjKTsKKwkgICQhID0gMDsKKwkgIHZlcmIgInJ1bm5pbmc6IEBjbWQiOworCSAgbXkgJHJlcyA9IHN5c3RlbSAoQGNtZCk7CisJICBBdXRvbWFrZTo6RmlsZVV0aWxzOjpoYW5kbGVfZXhlY19lcnJvcnMgIkBjbWQiLCAxCisJICAgIGlmICRyZXM7CisJICB1bmxpbmtfdG1wOworCX0KKyAgICAgIGVsc2lmICghJGRyeV9ydW4pCisJeworCSAgeHN5c3RlbSAoJ2NwJywgJHNyYywgJGRlc3QpOworCX0KKyAgICB9Cit9CisKKyMgQ29tcGFyZSB0d28gbGlzdHMgb2YgbnVtYmVycy4KK3N1YiBsaXN0X2NvbXBhcmUgKFxAXEApCit7CisgIG15IEBsID0gQHskX1swXX07CisgIG15IEByID0gQHskX1sxXX07CisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGlmICgwID09IEBsKQorCXsKKwkgIHJldHVybiAoMCA9PSBAcikgPyAwIDogLTE7CisJfQorICAgICAgZWxzaWYgKDAgPT0gQHIpCisJeworCSAgcmV0dXJuIDE7CisJfQorICAgICAgZWxzaWYgKCRsWzBdIDwgJHJbMF0pCisJeworCSAgcmV0dXJuIC0xOworCX0KKyAgICAgIGVsc2lmICgkbFswXSA+ICRyWzBdKQorCXsKKwkgIHJldHVybiAxOworCX0KKyAgICAgIHNoaWZ0IEBsOworICAgICAgc2hpZnQgQHI7CisgICAgfQorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgc2Nhbl9tNF9kaXJzKCRUWVBFLCBARElSUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2NhbiBhbGwgTTQgZmlsZXMgaW5zdGFsbGVkIGluIEBESVJTIGZvciBuZXcgbWFjcm8gZGVmaW5pdGlvbnMuCisjIFJlZ2lzdGVyIGVhY2ggZmlsZSBhcyBvZiB0eXBlICRUWVBFIChvbmUgb2YgdGhlIEZUXyogY29uc3RhbnRzKS4KK3N1YiBzY2FuX200X2RpcnMgKCRAKQoreworICBteSAoJHR5cGUsIEBkaXJsaXN0KSA9IEBfOworCisgIGZvcmVhY2ggbXkgJG00ZGlyIChAZGlybGlzdCkKKyAgICB7CisgICAgICBpZiAoISBvcGVuZGlyIChESVIsICRtNGRpcikpCisJeworCSAgZmF0YWwgImNvdWxkbid0IG9wZW4gZGlyZWN0b3J5IGAkbTRkaXInOiAkISI7CisJfQorCisgICAgICAjIFdlIHJldmVyc2UgdGhlIGRpcmVjdG9yeSBjb250ZW50cyBzbyB0aGF0IGZvbzIubTQgZ2V0cworICAgICAgIyB1c2VkIGluIHByZWZlcmVuY2UgdG8gZm9vMS5tNC4KKyAgICAgIGZvcmVhY2ggbXkgJGZpbGUgKHJldmVyc2Ugc29ydCBncmVwICghIC9eXC4vLCByZWFkZGlyIChESVIpKSkKKwl7CisJICAjIE9ubHkgZXhhbWluZSAubTQgZmlsZXMuCisJICBuZXh0IHVubGVzcyAkZmlsZSA9fiAvXC5tNCQvOworCisJICAjIFNraXAgc29tZSBmaWxlcyB3aGVuIHJ1bm5pbmcgb3V0IG9mIHNyY2Rpci4KKwkgIG5leHQgaWYgJGZpbGUgZXEgJ2FjbG9jYWwubTQnOworCisJICBteSAkZnVsbGZpbGUgPSBGaWxlOjpTcGVjLT5jYW5vbnBhdGggKCIkbTRkaXIvJGZpbGUiKTsKKwkgICAgJnNjYW5fZmlsZSAoJHR5cGUsICRmdWxsZmlsZSwgJ2FjbG9jYWwnKTsKKwl9CisgICAgICBjbG9zZWRpciAoRElSKTsKKyAgICB9Cit9CisKKyMgU2NhbiBhbGwgdGhlIGluc3RhbGxlZCBtNCBmaWxlcyBhbmQgY29uc3RydWN0IGEgbWFwLgorc3ViIHNjYW5fbTRfZmlsZXMgKCkKK3sKKyAgIyBGaXJzdCwgc2NhbiBjb25maWd1cmUuYWMuICBJdCBtYXkgY29udGFpbiBtYWNybyBkZWZpbml0aW9ucywKKyAgIyBvciBtYXkgaW5jbHVkZSBvdGhlciBmaWxlcyB0aGF0IGRlZmluZSBtYWNyb3MuCisgICZzY2FuX2ZpbGUgKEZUX1VTRVIsICRjb25maWd1cmVfYWMsICdhY2xvY2FsJyk7CisKKyAgIyBUaGVuLCBzY2FuIGFjaW5jbHVkZS5tNCBpZiBpdCBleGlzdHMuCisgIGlmICgtZiAnYWNpbmNsdWRlLm00JykKKyAgICB7CisgICAgICAmc2Nhbl9maWxlIChGVF9VU0VSLCAnYWNpbmNsdWRlLm00JywgJ2FjbG9jYWwnKTsKKyAgICB9CisKKyAgIyBGaW5hbGx5LCBzY2FuIGFsbCBmaWxlcyBpbiBvdXIgc2VhcmNoIHBhdGhzLgorICBzY2FuX200X2RpcnMgKEZUX1VTRVIsIEB1c2VyX2luY2x1ZGVzKTsKKyAgc2Nhbl9tNF9kaXJzIChGVF9BVVRPTUFLRSwgQGF1dG9tYWtlX2luY2x1ZGVzKTsKKyAgc2Nhbl9tNF9kaXJzIChGVF9TWVNURU0sIEBzeXN0ZW1faW5jbHVkZXMpOworCisgICMgQ29uc3RydWN0IGEgbmV3IGZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgc2VhcmNoaW5nLiAgV2UgdXNlIGEKKyAgIyBmdW5jdGlvbiAoaW5zdGVhZCBvZiBqdXN0IGV2YWx1YXRpbmcgJHNlYXJjaCBpbiB0aGUgbG9vcCkgc28gdGhhdAorICAjICJkaWUiIGlzIGNvcnJlY3RseSBhbmQgZWFzaWx5IHByb3BhZ2F0ZWQgaWYgcnVuLgorICBteSAkc2VhcmNoID0gInN1YiBzZWFyY2gge1xubXkgXCRmb3VuZCA9IDA7XG4iOworICBmb3JlYWNoIG15ICRrZXkgKHJldmVyc2Ugc29ydCBrZXlzICVtYXApCisgICAgeworICAgICAgJHNlYXJjaCAuPSAoJ2lmICgvXGJcUScgLiAka2V5IC4gJ1xFKD8hXHcpLykgeyAmIGFkZF9tYWNybyAoIicgLiAka2V5CisJCSAgLiAnIik7ICRmb3VuZCA9IDE7IH0nIC4gIlxuIik7CisgICAgfQorICAkc2VhcmNoIC49ICJyZXR1cm4gXCRmb3VuZDtcbn07XG4iOworICBldmFsICRzZWFyY2g7CisgIHByb2dfZXJyb3IgIiRAXG4gc2VhcmNoIGlzICRzZWFyY2giIGlmICRAOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQWRkIGEgbWFjcm8gdG8gdGhlIG91dHB1dC4KK3N1YiBhZGRfbWFjcm8gKCQpCit7CisgIG15ICgkbWFjcm8pID0gQF87CisKKyAgIyBJZ25vcmUgdW5rbm93biByZXF1aXJlZCBtYWNyb3MuICBFaXRoZXIgdGhleSBhcmUgbm90IHJlYWxseQorICAjIG5lZWRlZCAoZS5nLiwgYSBjb25kaXRpb25hbCBBQ19SRVFVSVJFKSwgaW4gd2hpY2ggY2FzZSBhY2xvY2FsCisgICMgc2hvdWxkIGJlIHF1aWV0LCBvciB0aGV5IGFyZSBuZWVkZWQgYW5kIEF1dG9jb25mIGl0c2VsZiB3aWxsCisgICMgY29tcGxhaW4gd2hlbiB3ZSB0cmFjZSBmb3IgbWFjcm8gdXNhZ2UgbGF0ZXIuCisgIHJldHVybiB1bmxlc3MgZGVmaW5lZCAkbWFweyRtYWNyb307CisKKyAgdmVyYiAic2F3IG1hY3JvICRtYWNybyI7CisgICRtYWNyb19zZWVueyRtYWNyb30gPSAxOworICAmYWRkX2ZpbGUgKCRtYXB7JG1hY3JvfSk7Cit9CisKKyMgc2Nhbl9jb25maWd1cmVfZGVwICgkZmlsZSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2NhbiBhIGNvbmZpZ3VyZSBkZXBlbmRlbmN5IChjb25maWd1cmUuYWMsIG9yIHNlcGFyYXRlIG00IGZpbGVzKQorIyBmb3IgdXNlcyBvZiBrbm93biBtYWNyb3MgYW5kIEFDX1JFUVVJUkVzIG9mIHBvc3NpYmx5IHVua25vd24gbWFjcm9zLgorIyBSZWN1cnNpdmVseSBzY2FuIG00X2luY2x1ZGVkIGZpbGVzLgorc3ViIHNjYW5fY29uZmlndXJlX2RlcCAoJCkKK3sKKyAgbXkgKCRmaWxlKSA9IEBfOworICAjIERvIG5vdCBzY2FuIGEgZmlsZSB0d2ljZS4KKyAgcmV0dXJuICgpCisgICAgaWYgZXhpc3RzICRzY2FubmVkX2NvbmZpZ3VyZV9kZXB7JGZpbGV9OworICAkc2Nhbm5lZF9jb25maWd1cmVfZGVweyRmaWxlfSA9IDE7CisKKyAgbXkgJG10aW1lID0gbXRpbWUgJGZpbGU7CisgICRncmVhdGVzdF9tdGltZSA9ICRtdGltZSBpZiAkZ3JlYXRlc3RfbXRpbWUgPCAkbXRpbWU7CisKKyAgbXkgJGNvbnRlbnRzID0gZXhpc3RzICRmaWxlX2NvbnRlbnRzeyRmaWxlfSA/CisgICAgJGZpbGVfY29udGVudHN7JGZpbGV9IDogY29udGVudHMgJGZpbGU7CisKKyAgbXkgJGxpbmUgPSAwOworICBteSBAcmxpc3QgPSAoKTsKKyAgbXkgQGlsaXN0ID0gKCk7CisgIGZvcmVhY2ggKHNwbGl0ICgiXG4iLCAkY29udGVudHMpKQorICAgIHsKKyAgICAgICsrJGxpbmU7CisgICAgICAjIFJlbW92ZSBjb21tZW50cyBmcm9tIGN1cnJlbnQgbGluZS4KKyAgICAgIHMvXGJkbmxcYi4qJC8vOworICAgICAgcy9cIy4qJC8vOworICAgICAgIyBBdm9pZCBydW5uaW5nIGFsbCB0aGUgZm9sbG93aW5nIHJlZ2V4ZXMgb24gd2hpdGUgbGluZXMuCisgICAgICBuZXh0IGlmIC9eXHMqJC87CisKKyAgICAgIHdoaWxlICgvJG00X2luY2x1ZGVfcngvZ28pCisJeworCSAgbXkgJGlmaWxlID0gJDIgfHwgJDM7CisJICAjIFNraXAgbWlzc2luZyBgc2luY2x1ZGUnZCBmaWxlcy4KKwkgIG5leHQgaWYgJDEgbmUgJ200XycgJiYgISAtZiAkaWZpbGU7CisJICBwdXNoIEBpbGlzdCwgJGlmaWxlOworCX0KKworICAgICAgd2hpbGUgKC8kYWNfcmVxdWlyZV9yeC9nbykKKwl7CisJICBwdXNoIChAcmxpc3QsICQxIHx8ICQyKTsKKwl9CisKKyAgICAgICMgVGhlIHNlYXJjaCBmdW5jdGlvbiBpcyBjb25zdHJ1Y3RlZCBkeW5hbWljYWxseSBieQorICAgICAgIyBzY2FuX200X2ZpbGVzLiAgVGhlIGxhc3QgcGFyZW50aGV0aWNhbCBtYXRjaCBtYWtlcyBzdXJlIHdlCisgICAgICAjIGRvbid0IG1hdGNoIHRoaW5ncyB0aGF0IGxvb2sgbGlrZSBtYWNybyBhc3NpZ25tZW50cyBvcgorICAgICAgIyBBQ19TVUJTVHMuCisgICAgICBpZiAoISAmc2VhcmNoICYmIC8oXnxccyspKEFNX1tBLVowLTlfXSspKCR8W15cXVwpPUEtWjAtOV9dKS8pCisJeworCSAgIyBNYWNybyBub3QgZm91bmQsIGJ1dCBBTV8gcHJlZml4IGZvdW5kLgorCSAgIyBNYWtlIHRoaXMganVzdCBhIHdhcm5pbmcsIGJlY2F1c2Ugd2UgZG8gbm90IGtub3cgd2hldGhlcgorCSAgIyB0aGUgbWFjcm8gaXMgYWN0dWFsbHkgdXNlZCAoaXQgY291bGQgYmUgY2FsbGVkIGNvbmRpdGlvbmFsbHkpLgorCSAgbXNnICgndW5zdXBwb3J0ZWQnLCAiJGZpbGU6JGxpbmUiLAorCSAgICAgICAid2FybmluZzogbWFjcm8gYCQyJyBub3QgZm91bmQgaW4gbGlicmFyeSIpOworCX0KKyAgICB9CisKKyAgYWRkX21hY3JvICgkXykgZm9yZWFjaCAoQHJsaXN0KTsKKyAgJnNjYW5fY29uZmlndXJlX2RlcCAoJF8pIGZvcmVhY2ggQGlsaXN0OworfQorCisjIGFkZF9maWxlICgkRklMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBBZGQgJEZJTEUgdG8gb3V0cHV0Lgorc3ViIGFkZF9maWxlICgkKQoreworICBteSAoJGZpbGUpID0gQF87CisKKyAgIyBPbmx5IGFkZCBhIGZpbGUgb25jZS4KKyAgcmV0dXJuIGlmICgkZmlsZV9hZGRlZHskZmlsZX0pOworICAkZmlsZV9hZGRlZHskZmlsZX0gPSAxOworCisgIHNjYW5fY29uZmlndXJlX2RlcCAkZmlsZTsKK30KKworIyBQb2ludCB0byB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdW5kZXJxdW90ZWQgQUNfREVGVU4gb25seSBvbmNlLgorbXkgJHVuZGVycXVvdGVkX21hbnVhbF9vbmNlID0gMDsKKworIyBzY2FuX2ZpbGUgKCRUWVBFLCAkRklMRSwgJFdIRVJFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTY2FuIGEgc2luZ2xlIE00IGZpbGUgKCRGSUxFKSwgYW5kIGFsbCBmaWxlcyBpdCBpbmNsdWRlcy4KKyMgUmV0dXJuIHRoZSBsaXN0IG9mIGluY2x1ZGVkIGZpbGVzLgorIyAkVFlQRSBpcyBvbmUgb2YgRlRfVVNFUiwgRlRfQVVUT01BS0UsIG9yIEZUX1NZU1RFTSwgZGVwZW5kaW5nCisjIG9uIHdoZXJlIHRoZSBmaWxlIGNvbWVzIGZyb20uCisjICRXSEVSRSBpcyB0aGUgbG9jYXRpb24gdG8gdXNlIGluIHRoZSBkaWFnbm9zdGljIGlmIHRoZSBmaWxlCisjIGRvZXMgbm90IGV4aXN0Lgorc3ViIHNjYW5fZmlsZSAoJCQkKQoreworICBteSAoJHR5cGUsICRmaWxlLCAkd2hlcmUpID0gQF87CisgIG15ICRiYXNlbmFtZSA9IGJhc2VuYW1lICRmaWxlOworCisgICMgRG8gbm90IHNjYW4gdGhlIHNhbWUgZmlsZSB0d2ljZS4KKyAgcmV0dXJuIEB7JGZpbGVfaW5jbHVkZXN7JGZpbGV9fSBpZiBleGlzdHMgJGZpbGVfaW5jbHVkZXN7JGZpbGV9OworICAjIFByZXZlbnQgcG90ZW50aWFsIGluZmluaXRlIHJlY3Vyc2lvbiAoaWYgdHdvIGZpbGVzIGluY2x1ZGUgZWFjaCBvdGhlcikuCisgIHJldHVybiAoKSBpZiBleGlzdHMgJGZpbGVfY29udGVudHN7JGZpbGV9OworCisgIHVuc2hpZnQgQGZpbGVfb3JkZXIsICRmaWxlOworCisgICRmaWxlX3R5cGV7JGZpbGV9ID0gJHR5cGU7CisKKyAgZmF0YWwgIiR3aGVyZTogZmlsZSBgJGZpbGUnIGRvZXMgbm90IGV4aXN0IiBpZiAhIC1lICRmaWxlOworCisgIG15ICRmaCA9IG5ldyBBdXRvbWFrZTo6WEZpbGUgJGZpbGU7CisgIG15ICRjb250ZW50cyA9ICcnOworICBteSBAaW5jX2ZpbGVzID0gKCk7CisgIG15ICVpbmNfbGluZXMgPSAoKTsKKworICBteSAkZGVmdW5fc2VlbiA9IDA7CisgIG15ICRzZXJpYWxfc2VlbiA9IDA7CisgIG15ICRzZXJpYWxfb2xkZXIgPSAwOworCisgIHdoaWxlICgkXyA9ICRmaC0+Z2V0bGluZSkKKyAgICB7CisgICAgICAjIElnbm9yZSBgIyMnIGxpbmVzLgorICAgICAgbmV4dCBpZiAvXiMjLzsKKworICAgICAgJGNvbnRlbnRzIC49ICRfOworICAgICAgbXkgJGxpbmUgPSAkXzsKKworICAgICAgaWYgKCRsaW5lID1+IC8kc2VyaWFsX2xpbmVfcngvZ28pCisJeworCSAgbXkgJG51bWJlciA9ICQxOworCSAgaWYgKCRudW1iZXIgIX4gLyRzZXJpYWxfbnVtYmVyX3J4L2dvKQorCSAgICB7CisJICAgICAgbXNnICgnc3ludGF4JywgIiRmaWxlOiQuIiwKKwkJICAgIndhcm5pbmc6IGlsbC1mb3JtZWQgc2VyaWFsIG51bWJlciBgJG51bWJlcicsICIKKwkJICAgLiAiZXhwZWN0aW5nIGEgdmVyc2lvbiBzdHJpbmcgd2l0aCBvbmx5IGRpZ2l0cyBhbmQgZG90cyIpOworCSAgICB9CisJICBlbHNpZiAoJGRlZnVuX3NlZW4pCisJICAgIHsKKwkgICAgICAjIGFjbG9jYWwgcmVtb3ZlcyBhbGwgZGVmaW5pdGlvbnMgZnJvbSBNNCBmaWxlIHdpdGggdGhlCisJICAgICAgIyBzYW1lIGJhc2VuYW1lIGlmIGEgZ3JlYXRlciBzZXJpYWwgbnVtYmVyIGlzIGZvdW5kLgorCSAgICAgICMgRW5jb3VudGVyaW5nIGEgc2VyaWFsIGFmdGVyIHNvbWUgbWFjcm9zIHdpbGwgdW5kZWZpbmUKKwkgICAgICAjIHRoZXNlIG1hY3Jvcy4uLgorCSAgICAgIG1zZyAoJ3N5bnRheCcsICIkZmlsZTokLiIsCisJCSAgICd0aGUgc2VyaWFsIG51bWJlciBtdXN0IGFwcGVhciBiZWZvcmUgYW55IG1hY3JvIGRlZmluaXRpb24nKTsKKwkgICAgfQorCSAgIyBXZSByZWFsbHkgY2FyZSBhYm91dCBzZXJpYWxzIG9ubHkgZm9yIG5vbi1hdXRvbWFrZSBtYWNyb3MKKwkgICMgYW5kIHdoZW4gLS1pbnN0YWxsIGlzIHVzZWQuICBCdXQgdGhlIGFib3ZlIGRpYWdub3N0aWNzIGFyZQorCSAgIyBtYWRlIHJlZ2FyZGxlc3Mgb2YgdGhpcywgYmVjYXVzZSBub3QgdXNpbmcgLS1pbnN0YWxsIGlzCisJICAjIG5vdCBhIHJlYXNvbiBub3QgdGhlIGZpeCBtYWNybyBmaWxlcy4KKwkgIGVsc2lmICgkaW5zdGFsbCAmJiAkdHlwZSAhPSBGVF9BVVRPTUFLRSkKKwkgICAgeworCSAgICAgICRzZXJpYWxfc2VlbiA9IDE7CisJICAgICAgbXkgQG5ldyA9IHNwbGl0ICgvXC4vLCAkbnVtYmVyKTsKKworCSAgICAgIHZlcmIgIiRmaWxlOiQuOiBzZXJpYWwgJG51bWJlciI7CisKKwkgICAgICBpZiAoIWV4aXN0cyAkc2VyaWFseyRiYXNlbmFtZX0KKwkJICB8fCBsaXN0X2NvbXBhcmUgKEBuZXcsIEB7JHNlcmlhbHskYmFzZW5hbWV9fSkgPiAwKQorCQl7CisJCSAgIyBEZWxldGUgYW55IGRlZmluaXRpb24gd2Uga25ldyBmcm9tIHRoZSBvbGQgbWFjcm8uCisJCSAgZm9yZWFjaCBteSAkZGVmIChAeyRpbnZtYXB7JGJhc2VuYW1lfX0pCisJCSAgICB7CisJCSAgICAgIHZlcmIgIiRmaWxlOiQuOiBpZ25vcmluZyBwcmV2aW91cyBkZWZpbml0aW9uIG9mICRkZWYiOworCQkgICAgICBkZWxldGUgJG1hcHskZGVmfTsKKwkJICAgIH0KKwkJICAkaW52bWFweyRiYXNlbmFtZX0gPSBbXTsKKwkJICAkc2VyaWFseyRiYXNlbmFtZX0gPSBcQG5ldzsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgICRzZXJpYWxfb2xkZXIgPSAxOworCQl9CisJICAgIH0KKwl9CisKKyAgICAgICMgUmVtb3ZlIGNvbW1lbnRzIGZyb20gY3VycmVudCBsaW5lLgorICAgICAgIyBEbyBub3QgZG8gaXQgZWFybGllciwgYmVjYXVzZSB0aGUgc2VyaWFsIGxpbmUgaXMgYSBjb21tZW50LgorICAgICAgJGxpbmUgPX4gcy9cYmRubFxiLiokLy87CisgICAgICAkbGluZSA9fiBzL1wjLiokLy87CisKKyAgICAgIHdoaWxlICgkbGluZSA9fiAvJGFjX2RlZnVuX3J4L2dvKQorCXsKKwkgICRkZWZ1bl9zZWVuID0gMTsKKwkgIGlmICghIGRlZmluZWQgJDEpCisJICAgIHsKKwkgICAgICBtc2cgKCdzeW50YXgnLCAiJGZpbGU6JC4iLCAid2FybmluZzogdW5kZXJxdW90ZWQgZGVmaW5pdGlvbiBvZiAkMiIKKwkJICAgLiAiXG4gIHJ1biBpbmZvICcoYXV0b21ha2UpRXh0ZW5kaW5nIGFjbG9jYWwnXG4iCisJCSAgIC4gIiAgb3Igc2VlIGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vYXV0b21ha2UvIgorCQkgICAuICJhdXRvbWFrZS5odG1sI0V4dGVuZGluZy1hY2xvY2FsIikKKwkJdW5sZXNzICR1bmRlcnF1b3RlZF9tYW51YWxfb25jZTsKKwkgICAgICAkdW5kZXJxdW90ZWRfbWFudWFsX29uY2UgPSAxOworCSAgICB9CisKKwkgICMgSWYgdGhpcyBtYWNybyBkb2VzIG5vdCBoYXZlIGEgc2VyaWFsIGFuZCB3ZSBoYXZlIGFscmVhZHkKKwkgICMgc2VlbiBhIG1hY3JvIHdpdGggdGhlIHNhbWUgYmFzZW5hbWUgZWFybGllciwgd2Ugc2hvdWxkCisJICAjIGlnbm9yZSB0aGUgbWFjcm8gKGRvbid0IGV4aXQgaW1tZWRpYXRlbHkgc28gd2UgY2FuIHN0aWxsCisJICAjIGRpYWdub3NlIGxhdGVyICNzZXJpYWwgbnVtYmVycyBhbmQgdW5kZXJxdW90ZWQgbWFjcm9zKS4KKwkgICRzZXJpYWxfb2xkZXIgfHw9ICgkdHlwZSAhPSBGVF9BVVRPTUFLRQorCQkJICAgICAmJiAhJHNlcmlhbF9zZWVuICYmIGV4aXN0cyAkc2VyaWFseyRiYXNlbmFtZX0pOworCisJICBteSAkbWFjcm8gPSAkMSB8fCAkMjsKKwkgIGlmICghJHNlcmlhbF9vbGRlciAmJiAhZGVmaW5lZCAkbWFweyRtYWNyb30pCisJICAgIHsKKwkgICAgICB2ZXJiICJmb3VuZCBtYWNybyAkbWFjcm8gaW4gJGZpbGU6ICQuIjsKKwkgICAgICAkbWFweyRtYWNyb30gPSAkZmlsZTsKKwkgICAgICBwdXNoIEB7JGludm1hcHskYmFzZW5hbWV9fSwgJG1hY3JvOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAjIE5vdGU6IHdlIHVzZWQgdG8gZ2l2ZSBhbiBlcnJvciBoZXJlIGlmIHdlIHNhdyBhCisJICAgICAgIyBkdXBsaWNhdGVkIG1hY3JvLiAgSG93ZXZlciwgdGhpcyB0dXJucyBvdXQgdG8gYmUKKwkgICAgICAjIGV4dHJlbWVseSB1bnBvcHVsYXIuICBJdCBjYXVzZXMgYWN0dWFsIHByb2JsZW1zIHdoaWNoCisJICAgICAgIyBhcmUgaGFyZCB0byB3b3JrIGFyb3VuZCwgZXNwZWNpYWxseSB3aGVuIHlvdSBtdXN0CisJICAgICAgIyBtaXgtYW5kLW1hdGNoIHRvb2wgdmVyc2lvbnMuCisJICAgICAgdmVyYiAiaWdub3JpbmcgbWFjcm8gJG1hY3JvIGluICRmaWxlOiAkLiI7CisJICAgIH0KKwl9CisKKyAgICAgIHdoaWxlICgkbGluZSA9fiAvJG00X2luY2x1ZGVfcngvZ28pCisJeworCSAgbXkgJGlmaWxlID0gJDIgfHwgJDM7CisJICAjIFNraXAgbWlzc2luZyBgc2luY2x1ZGUnZCBmaWxlcy4KKwkgIG5leHQgaWYgJDEgbmUgJ200XycgJiYgISAtZiAkaWZpbGU7CisJICBwdXNoIChAaW5jX2ZpbGVzLCAkaWZpbGUpOworCSAgJGluY19saW5lc3skaWZpbGV9ID0gJC47CisJfQorICAgIH0KKworICAjIElnbm9yZSBhbnkgZmlsZSB0aGF0IGhhcyBhbiBvbGQgc2VyaWFsIChvciBubyBzZXJpYWwgaWYgd2Uga25vdworICAjIGFub3RoZXIgb25lIHdpdGggYSBzZXJpYWwpLgorICByZXR1cm4gKCkKKyAgICBpZiAoJHNlcmlhbF9vbGRlciB8fAorCSgkdHlwZSAhPSBGVF9BVVRPTUFLRSAmJiAhJHNlcmlhbF9zZWVuICYmIGV4aXN0cyAkc2VyaWFseyRiYXNlbmFtZX0pKTsKKworICAkZmlsZV9jb250ZW50c3skZmlsZX0gPSAkY29udGVudHM7CisKKyAgIyBGb3Igc29tZSByZWFzb24gSSBkb24ndCB1bmRlcnN0YW5kLCBpdCBkb2VzIG5vdCB3b3JrCisgICMgdG8gZG8gYG1hcCB7IHNjYW5fZmlsZSAoJF8sIC4uLikgfSBAaW5jX2ZpbGVzJyBiZWxvdy4KKyAgIyBXaXRoIFBlcmwgNS44LjIgaXQgdW5kZWZpbmVzIEBpbmNfZmlsZXMuCisgIG15IEBjb3B5ID0gQGluY19maWxlczsKKyAgbXkgQGFsbF9pbmNfZmlsZXMgPSAoQGluY19maWxlcywKKwkJICAgICAgIG1hcCB7IHNjYW5fZmlsZSAoJHR5cGUsICRfLAorCQkJCQkiJGZpbGU6JGluY19saW5lc3skX30iKSB9IEBjb3B5KTsKKyAgJGZpbGVfaW5jbHVkZXN7JGZpbGV9ID0gXEBhbGxfaW5jX2ZpbGVzOworICByZXR1cm4gQGFsbF9pbmNfZmlsZXM7Cit9CisKKyMgc3RyaXBfcmVkdW5kYW50X2luY2x1ZGVzICglRklMRVMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFYWNoIGtleSBpbiAlRklMRVMgaXMgYSBmaWxlIHRoYXQgbXVzdCBiZSBwcmVzZW50IGluIHRoZSBvdXRwdXQuCisjIEhvd2V2ZXIgc29tZSBvZiB0aGVzZSBmaWxlcyBtaWdodCBhbHJlYWR5IGluY2x1ZGUgb3RoZXIgZmlsZXMgaW4gJUZJTEVTLAorIyBzbyB0aGVyZSBpcyBubyBwb2ludCBpbiBpbmNsdWRpbmcgdGhlbSBhbm90aGVyIHRpbWUuCisjIFRoaXMgcmVtb3ZlcyBpdGVtcyBvZiAlRklMRVMgd2hpY2ggYXJlIGFscmVhZHkgaW5jbHVkZWQgYnkgYW5vdGhlciBmaWxlLgorc3ViIHN0cmlwX3JlZHVuZGFudF9pbmNsdWRlcyAoJSkKK3sKKyAgbXkgJWZpbGVzID0gQF87CisKKyAgIyBBbHdheXMgaW5jbHVkZSBhY2luY2x1ZGUubTQsIGV2ZW4gaWYgaXQgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHVzZWQuCisgICRmaWxlc3snYWNpbmNsdWRlLm00J30gPSAxIGlmIC1mICdhY2luY2x1ZGUubTQnOworICAjIEZpbGUgaW5jbHVkZWQgYnkgJGNvbmZpZ3VyZV9hYyBhcmUgcmVkdW5kYW50LgorICAkZmlsZXN7JGNvbmZpZ3VyZV9hY30gPSAxOworCisgICMgRmlsZXMgYXQgdGhlIGVuZCBvZiBAZmlsZV9vcmRlciBzaG91bGQgb3ZlcnJpZGUgdGhvc2UgYXQgdGhlIGJlZ2lubmluZywKKyAgIyBzbyBpdCBpcyBpbXBvcnRhbnQgdG8gcHJlc2VydmUgdGhlc2UgdHJhaWxpbmcgZmlsZXMuICBXZSBjYW4gcmVtb3ZlCisgICMgYSBmaWxlIEEgaWYgaXQgaXMgZ29pbmcgdG8gYmUgb3V0cHV0IGJlZm9yZSBhIGZpbGUgQiB0aGF0IGluY2x1ZGVzCisgICMgZmlsZSBBLCBub3QgdGhlIGNvbnZlcnNlLgorICBmb3JlYWNoIG15ICRmaWxlIChyZXZlcnNlIEBmaWxlX29yZGVyKQorICAgIHsKKyAgICAgIG5leHQgdW5sZXNzIGV4aXN0cyAkZmlsZXN7JGZpbGV9OworICAgICAgZm9yZWFjaCBteSAkaWZpbGUgKEB7JGZpbGVfaW5jbHVkZXN7JGZpbGV9fSkKKwl7CisJICBuZXh0IHVubGVzcyBleGlzdHMgJGZpbGVzeyRpZmlsZX07CisJICBkZWxldGUgJGZpbGVzeyRpZmlsZX07CisJICB2ZXJiICIkaWZpbGUgaXMgYWxyZWFkeSBpbmNsdWRlZCBieSAkZmlsZSI7CisJfQorICAgIH0KKworICAjIGNvbmZpZ3VyZS5hYyBpcyBpbXBsaWNpdGx5IGluY2x1ZGVkLgorICBkZWxldGUgJGZpbGVzeyRjb25maWd1cmVfYWN9OworCisgIHJldHVybiAlZmlsZXM7Cit9CisKK3N1YiB0cmFjZV91c2VkX21hY3JvcyAoKQoreworICBteSAlZmlsZXMgPSBtYXAgeyAkbWFweyRffSA9PiAxIH0ga2V5cyAlbWFjcm9fc2VlbjsKKyAgJWZpbGVzID0gc3RyaXBfcmVkdW5kYW50X2luY2x1ZGVzICVmaWxlczsKKworICBteSAkdHJhY2VzID0gKCRFTlZ7QVVUT000VEV9IHx8ICdhdXRvbTR0ZScpOworICAkdHJhY2VzIC49ICIgLS1sYW5ndWFnZSBBdXRvY29uZi13aXRob3V0LWFjbG9jYWwtbTQgIjsKKyAgIyBBbGwgY2FuZGlkYXRlIGZpbGVzLgorICAkdHJhY2VzIC49IGpvaW4gKCcgJywKKwkJICAgKG1hcCB7ICInJF8nIiB9CisJCSAgICAoZ3JlcCB7IGV4aXN0cyAkZmlsZXN7JF99IH0gQGZpbGVfb3JkZXIpKSkgLiAiICI7CisgICMgQWxsIGNhbmRpZGF0ZSBtYWNyb3MuCisgICR0cmFjZXMgLj0gam9pbiAoJyAnLAorCQkgICAobWFwIHsgIi0tdHJhY2U9JyRfOlwkZjo6XCRuOjpcJDEnIiB9CisJCSAgICAoJ0FDX0RFRlVOJywKKwkJICAgICAnQUNfREVGVU5fT05DRScsCisJCSAgICAgJ0FVX0RFRlVOJywKKwkJICAgICAnX0FNX0FVVE9DT05GX1ZFUlNJT04nKSksCisJCSAgICMgRG8gbm90IHRyYWNlICQxIGZvciBhbGwgb3RoZXIgbWFjcm9zIGFzIHdlIGRvCisJCSAgICMgbm90IG5lZWQgaXQgYW5kIGl0IG1pZ2h0IGNvbnRhaW5zIGhhcm1mdWwKKwkJICAgIyBjaGFyYWN0ZXJzIChsaWtlIG5ld2xpbmVzKS4KKwkJICAgKG1hcCB7ICItLXRyYWNlPSckXzpcJGY6OlwkbiciIH0gKGtleXMgJW1hY3JvX3NlZW4pKSk7CisKKyAgdmVyYiAicnVubmluZyAkdHJhY2VzICRjb25maWd1cmVfYWMiOworCisgIG15ICR0cmFjZWZoID0gbmV3IEF1dG9tYWtlOjpYRmlsZSAoIiR0cmFjZXMgJGNvbmZpZ3VyZV9hYyB8Iik7CisKKyAgbXkgJXRyYWNlZCA9ICgpOworCisgIHdoaWxlICgkXyA9ICR0cmFjZWZoLT5nZXRsaW5lKQorICAgIHsKKyAgICAgIGNob21wOworICAgICAgbXkgKCRmaWxlLCAkbWFjcm8sICRhcmcxKSA9IHNwbGl0ICgvOjovKTsKKworICAgICAgJHRyYWNlZHskbWFjcm99ID0gMSBpZiBleGlzdHMgJG1hY3JvX3NlZW57JG1hY3JvfTsKKworICAgICAgJG1hcF90cmFjZWRfZGVmc3skYXJnMX0gPSAkZmlsZQorCWlmICgkbWFjcm8gZXEgJ0FDX0RFRlVOJworCSAgICB8fCAkbWFjcm8gZXEgJ0FDX0RFRlVOX09OQ0UnCisJICAgIHx8ICRtYWNybyBlcSAnQVVfREVGVU4nKTsKKworICAgICAgJGFjX3ZlcnNpb24gPSAkYXJnMSBpZiAkbWFjcm8gZXEgJ19BTV9BVVRPQ09ORl9WRVJTSU9OJzsKKyAgICB9CisKKyAgJHRyYWNlZmgtPmNsb3NlOworCisgIHJldHVybiAldHJhY2VkOworfQorCitzdWIgc2Nhbl9jb25maWd1cmUgKCkKK3sKKyAgIyBNYWtlIHN1cmUgd2UgaW5jbHVkZSBhY2luY2x1ZGUubTQgaWYgaXQgZXhpc3RzLgorICBpZiAoLWYgJ2FjaW5jbHVkZS5tNCcpCisgICAgeworICAgICAgYWRkX2ZpbGUgKCdhY2luY2x1ZGUubTQnKTsKKyAgICB9CisgIHNjYW5fY29uZmlndXJlX2RlcCAoJGNvbmZpZ3VyZV9hYyk7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBXcml0ZSBvdXRwdXQuCisjIFJldHVybiAwIGlmZiBzb21lIGZpbGVzIHdlcmUgaW5zdGFsbGVkIGxvY2FsbHkuCitzdWIgd3JpdGVfYWNsb2NhbCAoJEApCit7CisgIG15ICgkb3V0cHV0X2ZpbGUsIEBtYWNyb3MpID0gQF87CisgIG15ICRvdXRwdXQgPSAnJzsKKworICBteSAlZmlsZXMgPSAoKTsKKyAgIyBHZXQgdGhlIGxpc3Qgb2YgZmlsZXMgY29udGFpbmluZyBkZWZpbml0aW9ucyBmb3IgdGhlIG1hY3JvcyB1c2VkLgorICAjIChGaWx0ZXIgb3V0IHVudXNlZCBtYWNybyBkZWZpbml0aW9ucyB3aXRoICRtYXBfdHJhY2VkX2RlZnMuICBUaGlzCisgICMgY2FuIGhhcHBlbiB3aGVuIGFuIEF1dG9jb25mIG1hY3JvIGlzIGNvbmRpdGlvbmFsbHkgZGVmaW5lZDoKKyAgIyBhY2xvY2FsIHNlZXMgdGhlIHBvdGVudGlhbCBkZWZpbml0aW9uLCBidXQgdGhpcyBkZWZpbml0aW9uIGlzCisgICMgYWN0dWFsbHkgbmV2ZXIgcHJvY2Vzc2VkIGFuZCB0aGUgQXV0b2NvbmYgaW1wbGVtZW50YXRpb24gaXMgdXNlZAorICAjIGluc3RlYWQuKQorICBmb3IgbXkgJG0gKEBtYWNyb3MpCisgICAgeworICAgICAgJGZpbGVzeyRtYXB7JG19fSA9IDEKKwlpZiAoZXhpc3RzICRtYXBfdHJhY2VkX2RlZnN7JG19CisJICAgICYmICRtYXB7JG19IGVxICRtYXBfdHJhY2VkX2RlZnN7JG19KTsKKyAgICB9CisgICMgRG8gbm90IGV4cGxpY2l0bHkgaW5jbHVkZSBhIGZpbGUgdGhhdCBpcyBhbHJlYWR5IGluZGlyZWN0bHkgaW5jbHVkZWQuCisgICVmaWxlcyA9IHN0cmlwX3JlZHVuZGFudF9pbmNsdWRlcyAlZmlsZXM7CisKKyAgbXkgJGluc3RhbGxlZCA9IDA7CisKKyAgZm9yIG15ICRmaWxlIChncmVwIHsgZXhpc3RzICRmaWxlc3skX30gfSBAZmlsZV9vcmRlcikKKyAgICB7CisgICAgICAjIENoZWNrIHRoZSB0aW1lIHN0YW1wIG9mIHRoaXMgZmlsZSwgYW5kIG9mIGFsbCBmaWxlcyBpdCBpbmNsdWRlcy4KKyAgICAgIGZvciBteSAkaWZpbGUgKCRmaWxlLCBAeyRmaWxlX2luY2x1ZGVzeyRmaWxlfX0pCisJeworCSAgbXkgJG10aW1lID0gbXRpbWUgJGlmaWxlOworCSAgJGdyZWF0ZXN0X210aW1lID0gJG10aW1lIGlmICRncmVhdGVzdF9tdGltZSA8ICRtdGltZTsKKwl9CisKKyAgICAgICMgSWYgdGhlIGZpbGUgdG8gYWRkIGxvb2tzIGxpa2Ugb3V0c2lkZSB0aGUgcHJvamVjdCwgY29weSBpdAorICAgICAgIyB0byB0aGUgb3V0cHV0LiAgVGhlIHJlZ2V4IGNhdGNoZXMgZmlsZW5hbWVzIHN0YXJ0aW5nIHdpdGgKKyAgICAgICMgdGhpbmdzIGxpa2UgYC8nLCBgXCcsIG9yIGBjOlwnLgorICAgICAgaWYgKCRmaWxlX3R5cGV7JGZpbGV9ICE9IEZUX1VTRVIKKwkgIHx8ICRmaWxlID1+IG0sXig/Olx3Oik/W1xcL10sKQorCXsKKwkgIGlmICghJGluc3RhbGwgfHwgJGZpbGVfdHlwZXskZmlsZX0gIT0gRlRfU1lTVEVNKQorCSAgICB7CisJICAgICAgIyBDb3B5IHRoZSBmaWxlIGludG8gYWNsb2NhbC5tNC4KKwkgICAgICAkb3V0cHV0IC49ICRmaWxlX2NvbnRlbnRzeyRmaWxlfSAuICJcbiI7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgICMgSW5zdGFsbCB0aGUgZmlsZSAoYW5kIGFueSBmaWxlIGl0IGluY2x1ZGVzKS4KKwkgICAgICBteSAkZGVzdDsKKwkgICAgICBmb3IgbXkgJGlmaWxlIChAeyRmaWxlX2luY2x1ZGVzeyRmaWxlfX0sICRmaWxlKQorCQl7CisJCSAgJGRlc3QgPSAiJHVzZXJfaW5jbHVkZXNbMF0vIiAuIGJhc2VuYW1lICRpZmlsZTsKKwkJICB2ZXJiICJpbnN0YWxsaW5nICRpZmlsZSB0byAkZGVzdCI7CisJCSAgaW5zdGFsbF9maWxlICgkaWZpbGUsICRkZXN0KTsKKwkJfQorCSAgICAgICRpbnN0YWxsZWQgPSAxOworCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgICMgT3RoZXJ3aXNlLCBzaW1wbHkgaW5jbHVkZSB0aGUgZmlsZS4KKwkgICRvdXRwdXQgLj0gIm00X2luY2x1ZGUoWyRmaWxlXSlcbiI7CisJfQorICAgIH0KKworICBpZiAoJGluc3RhbGxlZCkKKyAgICB7CisgICAgICB2ZXJiICJydW5uaW5nIGFjbG9jYWwgYW5ldywgYmVjYXVzZSBzb21lIGZpbGVzIHdlcmUgaW5zdGFsbGVkIGxvY2FsbHkiOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICMgTm90aGluZyB0byBvdXRwdXQ/IQorICAjIEZJWE1FOiBTaG91bGRuJ3Qgd2UgZGlhZ25vc2UgdGhpcz8KKyAgcmV0dXJuIDEgaWYgISBsZW5ndGggKCRvdXRwdXQpOworCisgIGlmICgkYWNfdmVyc2lvbikKKyAgICB7CisgICAgICAjIERvIG5vdCB1c2UgIiRvdXRwdXRfZmlsZSIgaGVyZSBmb3IgdGhlIHNhbWUgcmVhc29uIHdlIGRvIG5vdAorICAgICAgIyB1c2UgaXQgaW4gdGhlIGhlYWRlciBiZWxvdy4gIGF1dG9tNHRlIHdpbGwgb3V0cHV0IHRoZSBuYW1lIG9mCisgICAgICAjIHRoZSBmaWxlIGluIHRoZSBkaWFnbm9zdGljIGFueXdheS4KKyAgICAgICRvdXRwdXQgPSAibTRfaWZuZGVmKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSwKKyAgW200X2NvcHkoW200X1BBQ0tBR0VfVkVSU0lPTl0sIFtBQ19BVVRPQ09ORl9WRVJTSU9OXSldKWRubAorbTRfaWYobTRfZGVmbihbQUNfQVVUT0NPTkZfVkVSU0lPTl0pLCBbJGFjX3ZlcnNpb25dLCwKK1ttNF93YXJuaW5nKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgJGFjX3ZlcnNpb24uCitZb3UgaGF2ZSBhbm90aGVyIHZlcnNpb24gb2YgYXV0b2NvbmYuICBJdCBtYXkgd29yaywgYnV0IGlzIG5vdCBndWFyYW50ZWVkIHRvLgorSWYgeW91IGhhdmUgcHJvYmxlbXMsIHlvdSBtYXkgbmVlZCB0byByZWdlbmVyYXRlIHRoZSBidWlsZCBzeXN0ZW0gZW50aXJlbHkuCitUbyBkbyBzbywgdXNlIHRoZSBwcm9jZWR1cmUgZG9jdW1lbnRlZCBieSB0aGUgcGFja2FnZSwgdHlwaWNhbGx5IGBhdXRvcmVjb25mJy5dKV0pCisKKyRvdXRwdXQiOworICAgIH0KKworICAjIFdlIHVzZWQgdG8gcHJpbnQgYCMgJG91dHB1dF9maWxlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGV0Yy4nICBCdXQKKyAgIyB0aGlzIGNyZWF0ZXMgc3B1cmlvdXMgZGlmZmVyZW5jZXMgd2hlbiB1c2luZyBhdXRvcmVjb25mLiAgQXV0b3JlY29uZgorICAjIGNyZWF0ZXMgYWNsb2NhbC5tNHQgYW5kIHRoZW4gcmVuYW1lIGl0IHRvIGFjbG9jYWwubTQsIGJ1dCB0aGUKKyAgIyByZWJ1aWxkIHJ1bGVzIGdlbmVyYXRlZCBieSBBdXRvbWFrZSBjcmVhdGUgYWNsb2NhbC5tNCBkaXJlY3RseSAtLQorICAjIHRoaXMgd291bGQgZ2l2ZXMgdHdvIHdheXMgdG8gZ2V0IHRoZSBzYW1lIGZpbGUsIHdpdGggYSBkaWZmZXJlbnQKKyAgIyBuYW1lIGluIHRoZSBoZWFkZXIuCisgICRvdXRwdXQgPSAiIyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBhY2xvY2FsICRWRVJTSU9OIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsCisjIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCiskb3V0cHV0IjsKKworICAjIFdlIHRyeSBub3QgdG8gdXBkYXRlICRvdXRwdXRfZmlsZSB1bmxlc3MgbmVjZXNzYXJ5LCBiZWNhdXNlCisgICMgZG9pbmcgc28gaW52YWxpZGF0ZSBBdXRvbTR0ZSdzIGNhY2hlIGFuZCB0aGVyZWZvcmUgc2xvd3MgZG93bgorICAjIHRvb2xzIGNhbGxlZCBhZnRlciBhY2xvY2FsLgorICAjCisgICMgV2UgbmVlZCB0byBvdmVyd3JpdGUgJG91dHB1dF9maWxlIGluIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9ucy4KKyAgIyAgICogVGhlIC0tZm9yY2Ugb3B0aW9uIGlzIGluIHVzZS4KKyAgIyAgICogT25lIG9mIHRoZSBkZXBlbmRlbmNpZXMgaXMgeW91bmdlci4KKyAgIyAgICAgKE5vdCB1cGRhdGluZyAkb3V0cHV0X2ZpbGUgaW4gdGhpcyBzaXR1YXRpb24gd291bGQgY2F1c2UKKyAgIyAgICAgbWFrZSB0byBjYWxsIGFjbG9jYWwgaW4gbG9vcC4pCisgICMgICAqIFRoZSBjb250ZW50cyBvZiB0aGUgY3VycmVudCBmaWxlIGFyZSBkaWZmZXJlbnQgZnJvbSB3aGF0CisgICMgICAgIHdlIGhhdmUgY29tcHV0ZWQuCisgIGlmICghJGZvcmNlX291dHB1dAorICAgICAgJiYgJGdyZWF0ZXN0X210aW1lIDwgbXRpbWUgKCRvdXRwdXRfZmlsZSkKKyAgICAgICYmICRvdXRwdXQgZXEgY29udGVudHMgKCRvdXRwdXRfZmlsZSkpCisgICAgeworICAgICAgdmVyYiAiJG91dHB1dF9maWxlIHVuY2hhbmdlZCI7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgdmVyYiAid3JpdGluZyAkb3V0cHV0X2ZpbGUiOworCisgIGlmICghJGRyeV9ydW4pCisgICAgeworICAgICAgaWYgKC1lICRvdXRwdXRfZmlsZSAmJiAhdW5saW5rICRvdXRwdXRfZmlsZSkKKyAgICAgICAgeworCSAgZmF0YWwgImNvdWxkIG5vdCByZW1vdmUgYCRvdXRwdXRfZmlsZSc6ICQhIjsKKwl9CisgICAgICBteSAkb3V0ID0gbmV3IEF1dG9tYWtlOjpYRmlsZSAiPiAkb3V0cHV0X2ZpbGUiOworICAgICAgcHJpbnQgJG91dCAkb3V0cHV0OworICAgIH0KKyAgcmV0dXJuIDE7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBQcmludCB1c2FnZSBhbmQgZXhpdC4KK3N1YiB1c2FnZSAoJCkKK3sKKyAgbXkgKCRzdGF0dXMpID0gQF87CisKKyAgcHJpbnQgIlVzYWdlOiBhY2xvY2FsIFtPUFRJT05TXSAuLi4KKworR2VuZXJhdGUgYGFjbG9jYWwubTQnIGJ5IHNjYW5uaW5nIGBjb25maWd1cmUuYWMnIG9yIGBjb25maWd1cmUuaW4nCisKK09wdGlvbnM6CisgICAgICAtLWFjZGlyPURJUiAgICAgICAgICAgZGlyZWN0b3J5IGhvbGRpbmcgY29uZmlnIGZpbGVzIChmb3IgZGVidWdnaW5nKQorICAgICAgLS1kaWZmWz1DT01NQU5EXSAgICAgIHJ1biBDT01NQU5EIFtkaWZmIC11XSBvbiBNNCBmaWxlcyB0aGF0IHdvdWxkIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIChpbXBsaWVzIC0taW5zdGFsbCBhbmQgLS1kcnktcnVuKQorICAgICAgLS1kcnktcnVuICAgICAgICAgICAgIHByZXRlbmQgdG8sIGJ1dCBkbyBub3QgYWN0dWFsbHkgdXBkYXRlIGFueSBmaWxlCisgICAgICAtLWZvcmNlICAgICAgICAgICAgICAgYWx3YXlzIHVwZGF0ZSBvdXRwdXQgZmlsZQorICAgICAgLS1oZWxwICAgICAgICAgICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC1JIERJUiAgICAgICAgICAgICAgICAgICAgYWRkIGRpcmVjdG9yeSB0byBzZWFyY2ggbGlzdCBmb3IgLm00IGZpbGVzCisgICAgICAtLWluc3RhbGwgICAgICAgICAgICAgY29weSB0aGlyZC1wYXJ0eSBmaWxlcyB0byB0aGUgZmlyc3QgLUkgZGlyZWN0b3J5CisgICAgICAtLW91dHB1dD1GSUxFICAgICAgICAgcHV0IG91dHB1dCBpbiBGSUxFIChkZWZhdWx0IGFjbG9jYWwubTQpCisgICAgICAtLXByaW50LWFjLWRpciAgICAgICAgcHJpbnQgbmFtZSBvZiBkaXJlY3RvcnkgaG9sZGluZyBtNCBmaWxlcywgdGhlbiBleGl0CisgICAgICAtLXZlcmJvc2UgICAgICAgICAgICAgZG9uJ3QgYmUgc2lsZW50CisgICAgICAtLXZlcnNpb24gICAgICAgICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorICAtVywgLS13YXJuaW5ncz1DQVRFR09SWSAgIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGluZyBpbiBDQVRFR09SWQorCitXYXJuaW5nIGNhdGVnb3JpZXMgaW5jbHVkZToKKyAgYHN5bnRheCcgICAgICAgIGR1YmlvdXMgc3ludGFjdGljIGNvbnN0cnVjdHMgKGRlZmF1bHQpCisgIGB1bnN1cHBvcnRlZCcgICB1bmtub3duIG1hY3JvcyAoZGVmYXVsdCkKKyAgYGFsbCcgICAgICAgICAgIGFsbCB0aGUgd2FybmluZ3MgKGRlZmF1bHQpCisgIGBuby1DQVRFR09SWScgICB0dXJuIG9mZiB3YXJuaW5ncyBpbiBDQVRFR09SWQorICBgbm9uZScgICAgICAgICAgdHVybiBvZmYgYWxsIHRoZSB3YXJuaW5ncworICBgZXJyb3InICAgICAgICAgdHJlYXQgd2FybmluZ3MgYXMgZXJyb3JzCisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VcQGdudS5vcmc+LlxuIjsKKworICBleGl0ICRzdGF0dXM7Cit9CisKKyMgUHJpbnQgdmVyc2lvbiBhbmQgZXhpdC4KK3N1YiB2ZXJzaW9uKCkKK3sKKyAgcHJpbnQgPDxFT0Y7CithY2xvY2FsIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OCitDb3B5cmlnaHQgKEMpIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitMaWNlbnNlIEdQTHYyKzogR05VIEdQTCB2ZXJzaW9uIDIgb3IgbGF0ZXIgPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbD4KK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRlIGl0LgorVGhlcmUgaXMgTk8gV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy4KKworV3JpdHRlbiBieSBUb20gVHJvbWV5IDx0cm9tZXlcQHJlZGhhdC5jb20+CisgICAgICAgYW5kIEFsZXhhbmRyZSBEdXJldC1MdXR6IDxhZGxcQGdudS5vcmc+LgorRU9GCisgIGV4aXQgMDsKK30KKworIyBQYXJzZSBjb21tYW5kIGxpbmUuCitzdWIgcGFyc2VfYXJndW1lbnRzICgpCit7CisgIG15ICRwcmludF9hbmRfZXhpdCA9IDA7CisgIG15ICRkaWZmX2NvbW1hbmQ7CisKKyAgbXkgJWNsaV9vcHRpb25zID0KKyAgICAoCisgICAgICdhY2Rpcj1zJwkJPT4gc3ViICMgU2V0dGluZyAtLWFjZGlyIG92ZXJyaWRlcyBib3RoIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICMgYXV0b21ha2UgKHZlcnNpb25lZCkgZGlyZWN0b3J5IGFuZCB0aGUKKwkJCSAgICAgICAjIHB1YmxpYyAodW52ZXJzaW9uZWQpIHN5c3RlbSBkaXJlY3RvcnkuCisJCQkgICAgICAgQGF1dG9tYWtlX2luY2x1ZGVzID0gKCk7CisJCQkgICAgICAgQHN5c3RlbV9pbmNsdWRlcyA9ICgkX1sxXSkKKwkJCSAgICAgfSwKKyAgICAgJ2RpZmY6cycJCT0+IFwkZGlmZl9jb21tYW5kLAorICAgICAnZHJ5LXJ1bicJCT0+IFwkZHJ5X3J1biwKKyAgICAgJ2ZvcmNlJwkJPT4gXCRmb3JjZV9vdXRwdXQsCisgICAgICdJPXMnCQk9PiBcQHVzZXJfaW5jbHVkZXMsCisgICAgICdpbnN0YWxsJyAgICAgICAgICA9PiBcJGluc3RhbGwsCisgICAgICdvdXRwdXQ9cycJCT0+IFwkb3V0cHV0X2ZpbGUsCisgICAgICdwcmludC1hYy1kaXInICAgICA9PiBcJHByaW50X2FuZF9leGl0LAorICAgICAndmVyYm9zZScJCT0+IHN1YiB7IHNldHVwX2NoYW5uZWwgJ3ZlcmInLCBzaWxlbnQgPT4gMDsgfSwKKyAgICAgJ1d8d2FybmluZ3M9cycgICAgID0+IFwmcGFyc2Vfd2FybmluZ3MsCisgICAgICk7CisgIHVzZSBHZXRvcHQ6Okxvbmc7CisgIEdldG9wdDo6TG9uZzo6Y29uZmlnICgiYnVuZGxpbmciLCAicGFzc190aHJvdWdoIik7CisKKyAgIyBTZWUgaWYgLS12ZXJzaW9uIG9yIC0taGVscCBpcyB1c2VkLiAgV2Ugd2FudCB0byBwcm9jZXNzIHRoZXNlIGJlZm9yZQorICAjIGFueXRoaW5nIGVsc2UgYmVjYXVzZSB0aGUgR05VIENvZGluZyBTdGFuZGFyZHMgcmVxdWlyZSB1cyB0bworICAjIGBleGl0IDAnIGFmdGVyIHByb2Nlc3NpbmcgdGhlc2Ugb3B0aW9ucywgYW5kIHdlIGNhbid0IGd1YXJhbnRlZSB0aGlzCisgICMgaWYgd2UgdHJlYXQgb3RoZXIgb3B0aW9ucyBmaXJzdC4gIChIYW5kbGluZyBvdGhlciBvcHRpb25zIGZpcnN0CisgICMgY291bGQgcHJvZHVjZSBlcnJvciBkaWFnbm9zdGljcywgYW5kIGluIHRoaXMgY29uZGl0aW9uIGl0IGlzCisgICMgY29uZnVzaW5nIGlmIGFjbG9jYWwgZG9lcyBgZXhpdCAwJy4pCisgIG15ICVjbGlfb3B0aW9uc18xc3RfcGFzcyA9CisgICAgKAorICAgICAndmVyc2lvbicgPT4gXCZ2ZXJzaW9uLAorICAgICAnaGVscCcgICAgPT4gc3ViIHsgdXNhZ2UoMCk7IH0sCisgICAgICMgUmVjb2duaXplIGFsbCBvdGhlciBvcHRpb25zIChhbmQgdGhlaXIgYXJndW1lbnRzKSBidXQgZG8gbm90aGluZy4KKyAgICAgbWFwIHsgJF8gPT4gc3ViIHt9IH0gKGtleXMgJWNsaV9vcHRpb25zKQorICAgICApOworICBteSBAQVJHVl9iYWNrdXAgPSBAQVJHVjsKKyAgR2V0b3B0OjpMb25nOjpHZXRPcHRpb25zICVjbGlfb3B0aW9uc18xc3RfcGFzcworICAgIG9yIGV4aXQgMTsKKyAgQEFSR1YgPSBAQVJHVl9iYWNrdXA7CisKKyAgIyBOb3cgKnJlYWxseSogcHJvY2VzcyB0aGUgb3B0aW9ucy4gIFRoaXMgdGltZSB3ZSBrbm93IHRoYXQgLS1oZWxwCisgICMgYW5kIC0tdmVyc2lvbiBhcmUgbm90IHByZXNlbnQsIGJ1dCB3ZSBzcGVjaWZ5IHRoZW0gbm9uZXRoZWxlc3Mgc28KKyAgIyB0aGF0IGFtYmlndW91cyBhYmJyZXZpYXRpb24gYXJlIGRpYWdub3NlZC4KKyAgR2V0b3B0OjpMb25nOjpHZXRPcHRpb25zICVjbGlfb3B0aW9ucywgJ3ZlcnNpb24nID0+IHN1YiB7fSwgJ2hlbHAnID0+IHN1YiB7fQorICAgIG9yIGV4aXQgMTsKKworICBpZiAoQEFSR1YpCisgICAgeworICAgICAgbXkgJWFyZ29wdHM7CisgICAgICBmb3IgbXkgJGsgKGtleXMgJWNsaV9vcHRpb25zKQorCXsKKwkgIGlmICgkayA9fiAvKC4qKT1zJC8pCisJICAgIHsKKwkgICAgICBtYXAgeyAkYXJnb3B0c3sobGVuZ3RoICgkXykgPT0gMSkKKwkJCSAgICAgPyAiLSRfIiA6ICItLSRfIiB9ID0gMTsgfSAoc3BsaXQgKC9cfC8sICQxKSk7CisJICAgIH0KKwl9CisgICAgICBpZiAoZXhpc3RzICRhcmdvcHRzeyRBUkdWWzBdfSkKKwl7CisJICBmYXRhbCAoIm9wdGlvbiBgJEFSR1ZbMF0nIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCisJCSAuICJUcnkgYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIik7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGZhdGFsICgidW5yZWNvZ25pemVkIG9wdGlvbiBgJEFSR1ZbMF0nXG4iCisJCSAuICJUcnkgYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIik7CisJfQorICAgIH0KKworICBpZiAoJHByaW50X2FuZF9leGl0KQorICAgIHsKKyAgICAgIHByaW50ICJAc3lzdGVtX2luY2x1ZGVzXG4iOworICAgICAgZXhpdCAwOworICAgIH0KKworICBpZiAoZGVmaW5lZCAkZGlmZl9jb21tYW5kKQorICAgIHsKKyAgICAgICRkaWZmX2NvbW1hbmQgPSAnZGlmZiAtdScgaWYgJGRpZmZfY29tbWFuZCBlcSAnJzsKKyAgICAgIEBkaWZmX2NvbW1hbmQgPSBzcGxpdCAoJyAnLCAkZGlmZl9jb21tYW5kKTsKKyAgICAgICRpbnN0YWxsID0gMTsKKyAgICAgICRkcnlfcnVuID0gMTsKKyAgICB9CisKKyAgaWYgKCRpbnN0YWxsICYmICFAdXNlcl9pbmNsdWRlcykKKyAgICB7CisgICAgICBmYXRhbCAoIi0taW5zdGFsbCBzaG91bGQgY29weSBtYWNyb3MgaW4gdGhlIGRpcmVjdG9yeSBpbmRpY2F0ZWQgYnkgdGhlIgorCSAgICAgLiAiXG5maXJzdCAtSSBvcHRpb24sIGJ1dCBubyAtSSB3YXMgc3VwcGxpZWQuIik7CisgICAgfQorCisgIGlmICghIC1kICRzeXN0ZW1faW5jbHVkZXNbMF0pCisgICAgeworICAgICAgIyBCeSBkZWZhdWx0ICQoZGF0YWRpcikvYWNsb2NhbCBkb2Vzbid0IGV4aXN0LiAgV2UgZG9uJ3Qgd2FudCB0bworICAgICAgIyBnZXQgYW4gZXJyb3IgaW4gdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIHNlYXJjaGluZyB0aGUgZGVmYXVsdAorICAgICAgIyBkaXJlY3RvcnkgYW5kIGl0IGhhc24ndCBiZWVuIGNyZWF0ZWQuICAoV2Uga25vdworICAgICAgIyBAc3lzdGVtX2luY2x1ZGVzIGhhcyBpdHMgZGVmYXVsdCB2YWx1ZSBpZiBAYXV0b21ha2VfaW5jbHVkZXMKKyAgICAgICMgaXMgbm90IGVtcHR5LCBiZWNhdXNlIC0tYWNkaXIgaXMgdGhlIG9ubHkgd2F5IHRvIGNoYW5nZSB0aGlzLikKKyAgICAgIEBzeXN0ZW1faW5jbHVkZXMgPSAoKSBpZiBAYXV0b21ha2VfaW5jbHVkZXM7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgIyBGaW5hbGx5LCBhZGRzIGFueSBkaXJlY3RvcnkgbGlzdGVkIGluIHRoZSBgZGlybGlzdCcgZmlsZS4KKyAgICAgIGlmIChvcGVuIChESVJMSVNULCAiJHN5c3RlbV9pbmNsdWRlc1swXS9kaXJsaXN0IikpCisJeworCSAgd2hpbGUgKDxESVJMSVNUPikKKwkgICAgeworCSAgICAgICMgSWdub3JlICcjJyBsaW5lcy4KKwkgICAgICBuZXh0IGlmIC9eIy87CisJICAgICAgIyBzdHJpcCBvZmYgbmV3bGluZXMgYW5kIGVuZC1vZi1saW5lIGNvbW1lbnRzCisJICAgICAgcy9ccypcIy4qJC8vOworCSAgICAgIGNob21wOworCSAgICAgIGZvcmVhY2ggbXkgJGRpciAoZ2xvYikKKwkJeworCQkgIHB1c2ggKEBzeXN0ZW1faW5jbHVkZXMsICRkaXIpIGlmIC1kICRkaXI7CisJCX0KKwkgICAgfQorCSAgY2xvc2UgKERJUkxJU1QpOworCX0KKyAgICB9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworcGFyc2VfV0FSTklOR1M7CQkgICAgIyBQYXJzZSB0aGUgV0FSTklOR1MgZW52aXJvbm1lbnQgdmFyaWFibGUuCitwYXJzZV9hcmd1bWVudHM7CiskY29uZmlndXJlX2FjID0gcmVxdWlyZV9jb25maWd1cmVfYWM7CisKKyMgV2UgbWF5IGhhdmUgdG8gcmVydW4gYWNsb2NhbCBpZiBzb21lIGZpbGUgaGF2ZSBiZWVuIGluc3RhbGxlZCwgYnV0CisjIGl0IHNob3VsZCBub3QgaGFwcGVuIG1vcmUgdGhhbiBvbmNlLiAgVGhlIHJlYXNvbiB3ZSBtdXN0IHJ1biBhZ2FpbgorIyBpcyB0aGF0IG9uY2UgdGhlIGZpbGUgaGFzIGJlZW4gbW92ZWQgZnJvbSAvdXNyL3NoYXJlL2FjbG9jYWwvIHRvIHRoZQorIyBsb2NhbCBtNC8gZGlyZWN0b3J5IGl0IGFwcGVhcnMgYXQgYSBuZXcgcGxhY2UgaW4gdGhlIHNlYXJjaCBwYXRoLAorIyBoZW5jZSBpdCBzaG91bGQgYmUgb3V0cHV0IGF0IGEgZGlmZmVyZW50IHBvc2l0aW9uIGluIGFjbG9jYWwubTQuICBJZgorIyB3ZSBkaWQgbm90IHJlcnVuIGFjbG9jYWwsIHRoZSBuZXh0IHJ1biBvZiBhY2xvY2FsIHdvdWxkIHByb2R1Y2UgYQorIyBkaWZmZXJlbnQgYWNsb2NhbC5tNC4KK215ICRsb29wID0gMDsKK3doaWxlICgxKQorICB7CisgICAgKyskbG9vcDsKKyAgICBwcm9nX2Vycm9yICJUb28gbWFueSBsb29wcy4iIGlmICRsb29wID4gMjsKKworICAgIHJlc2V0X21hcHM7CisgICAgc2Nhbl9tNF9maWxlczsKKyAgICBzY2FuX2NvbmZpZ3VyZTsKKyAgICBsYXN0IGlmICRleGl0X2NvZGU7CisgICAgbXkgJW1hY3JvX3RyYWNlZCA9IHRyYWNlX3VzZWRfbWFjcm9zOworICAgIGxhc3QgaWYgd3JpdGVfYWNsb2NhbCAoJG91dHB1dF9maWxlLCBrZXlzICVtYWNyb190cmFjZWQpOworICAgIGxhc3QgaWYgJGRyeV9ydW47CisgIH0KK2NoZWNrX2FjaW5jbHVkZTsKKworZXhpdCAkZXhpdF9jb2RlOworCisjIyMgU2V0dXAgIkdOVSIgc3R5bGUgZm9yIHBlcmwtbW9kZSBhbmQgY3BlcmwtbW9kZS4KKyMjIExvY2FsIFZhcmlhYmxlczoKKyMjIHBlcmwtaW5kZW50LWxldmVsOiAyCisjIyBwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLWltYWdpbmFyeS1vZmZzZXQ6IDAKKyMjIHBlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtaW5kZW50LWxldmVsOiAyCisjIyBjcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWV4dHJhLW5ld2xpbmUtYmVmb3JlLWJyYWNlOiB0CisjIyBjcGVybC1tZXJnZS10cmFpbGluZy1lbHNlOiBuaWwKKyMjIGNwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBFbmQ6CmRpZmYgLS1naXQgYS9iaW4vYWNsb2NhbC0xLjExIGIvYmluL2FjbG9jYWwtMS4xMQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZjU5MzQyCi0tLSAvZGV2L251bGwKKysrIGIvYmluL2FjbG9jYWwtMS4xMQpAQCAtMCwwICsxLDEwOTIgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworIyAtKi0gcGVybCAtKi0KKyMgR2VuZXJhdGVkIGZyb20gYWNsb2NhbC5pbjsgZG8gbm90IGVkaXQgYnkgaGFuZC4KKworZXZhbCAnY2FzZSAkIyBpbiAwKSBleGVjIC91c3IvYmluL3BlcmwgLVMgIiQwIjs7ICopIGV4ZWMgL3Vzci9iaW4vcGVybCAtUyAiJDAiICIkQCI7OyBlc2FjJworICAgIGlmIDA7CisKKyMgYWNsb2NhbCAtIGNyZWF0ZSBhY2xvY2FsLm00IGJ5IHNjYW5uaW5nIGNvbmZpZ3VyZS5hYworCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwKKyMgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFdyaXR0ZW4gYnkgVG9tIFRyb21leSA8dHJvbWV5QHJlZGhhdC5jb20+LCBhbmQKKyMgQWxleGFuZHJlIER1cmV0LUx1dHogPGFkbEBnbnUub3JnPi4KKworQkVHSU4KK3sKKyAgbXkgJHBlcmxsaWJkaXIgPSAkRU5WeydwZXJsbGliZGlyJ30gfHwgJy91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9ob3N0L3Vzci9zaGFyZS9hdXRvbWFrZS0xLjExJzsKKyAgdW5zaGlmdCBASU5DLCAoc3BsaXQgJzonLCAkcGVybGxpYmRpcik7Cit9CisKK3VzZSBzdHJpY3Q7CisKK3VzZSBBdXRvbWFrZTo6Q29uZmlnOwordXNlIEF1dG9tYWtlOjpHZW5lcmFsOwordXNlIEF1dG9tYWtlOjpDb25maWd1cmVfYWM7Cit1c2UgQXV0b21ha2U6OkNoYW5uZWxzOwordXNlIEF1dG9tYWtlOjpDaGFubmVsRGVmczsKK3VzZSBBdXRvbWFrZTo6WEZpbGU7Cit1c2UgQXV0b21ha2U6OkZpbGVVdGlsczsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKK3VzZSBGaWxlOjpzdGF0OwordXNlIEN3ZDsKKworIyBTb21lIGdsb2JhbHMuCisKKyMgV2UgZG8gbm90IG9wZXJhdGUgaW4gdGhyZWFkZWQgbW9kZS4KKyRwZXJsX3RocmVhZHMgPSAwOworCisjIEluY2x1ZGUgcGF0aHMgZm9yIHNlYXJjaGluZyBtYWNyb3MuICBXZSBzZWFyY2ggbWFjcm9zIGluIHRoaXMgb3JkZXI6CisjIHVzZXItc3VwcGxpZWQgZGlyZWN0b3JpZXMgZmlyc3QsIHRoZW4gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZQorIyBhdXRvbWFrZSBtYWNyb3MsIGFuZCBmaW5hbGx5IHRoZSBzeXN0ZW0td2lkZSBkaXJlY3RvcmllcyBmb3IKKyMgdGhpcmQtcGFydHkgbWFjcm8uICBAdXNlcl9pbmNsdWRlcyBjYW4gYmUgYXVnbWVudGVkIHdpdGggLUkuCisjIEBzeXN0ZW1faW5jbHVkZXMgY2FuIGJlIGF1Z21lbnRlZCB3aXRoIHRoZSBgZGlybGlzdCcgZmlsZS4gIEFsc28KKyMgLS1hY2RpciB3aWxsIHJlc2V0IGJvdGggQGF1dG9tYWtlX2luY2x1ZGVzIGFuZCBAc3lzdGVtX2luY2x1ZGVzLgorbXkgQHVzZXJfaW5jbHVkZXMgPSAoKTsKK215IEBhdXRvbWFrZV9pbmNsdWRlcyA9ICgiL3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyL3NoYXJlL2FjbG9jYWwtJEFQSVZFUlNJT04iKTsKK215IEBzeXN0ZW1faW5jbHVkZXMgPSAoJy91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9ob3N0L3Vzci9zaGFyZS9hY2xvY2FsJyk7CisKKyMgV2hldGhlciB3ZSBzaG91bGQgY29weSBNNCBmaWxlIGluICR1c2VyX2luY2x1ZGVzWzBdLgorbXkgJGluc3RhbGwgPSAwOworCisjIC0tZGlmZgorbXkgQGRpZmZfY29tbWFuZDsKKworIyAtLWRyeS1ydW4KK215ICRkcnlfcnVuID0gMDsKKworIyBjb25maWd1cmUuYWMgb3IgY29uZmlndXJlLmluLgorbXkgJGNvbmZpZ3VyZV9hYzsKKworIyBPdXRwdXQgZmlsZSBuYW1lLgorbXkgJG91dHB1dF9maWxlID0gJ2FjbG9jYWwubTQnOworCisjIE9wdGlvbiAtLWZvcmNlLgorbXkgJGZvcmNlX291dHB1dCA9IDA7CisKKyMgTW9kaWZpY2F0aW9uIHRpbWUgb2YgdGhlIHlvdW5nZXN0IGRlcGVuZGVuY3kuCitteSAkZ3JlYXRlc3RfbXRpbWUgPSAwOworCisjIFdoaWNoIG1hY3JvcyBoYXZlIGJlZW4gc2Vlbi4KK215ICVtYWNyb19zZWVuID0gKCk7CisKKyMgUmVtZW1iZXIgdGhlIG9yZGVyIGludG8gd2hpY2ggd2Ugc2Nhbm5lZCB0aGUgZmlsZXMuCisjIEl0J3MgaW1wb3J0YW50IHRvIG91dHB1dCB0aGUgY29udGVudHMgb2YgYWNsb2NhbC5tNCBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIuCisjIChEZWZpbml0aW9ucyBpbiBmaXJzdCBmaWxlcyB3ZSBoYXZlIHNjYW5uZWQgc2hvdWxkIG92ZXJyaWRlIHRob3NlIGZyb20KKyMgbGF0ZXIgZmlsZXMuICBTbyB0aGV5IG11c3QgYXBwZWFyIGxhc3QgaW4gdGhlIG91dHB1dC4pCitteSBAZmlsZV9vcmRlciA9ICgpOworCisjIE1hcCBtYWNybyBuYW1lcyB0byBmaWxlIG5hbWVzLgorbXkgJW1hcCA9ICgpOworCisjIERpdHRvLCBidXQgcmVjb3JkcyB0aGUgbGFzdCBkZWZpbml0aW9uIG9mIGVhY2ggbWFjcm8gYXMgcmV0dXJuZWQgYnkgLS10cmFjZS4KK215ICVtYXBfdHJhY2VkX2RlZnMgPSAoKTsKKworIyBNYXAgYmFzZW5hbWVzIHRvIG1hY3JvIG5hbWVzLgorbXkgJWludm1hcCA9ICgpOworCisjIE1hcCBmaWxlIG5hbWVzIHRvIGZpbGUgY29udGVudHMuCitteSAlZmlsZV9jb250ZW50cyA9ICgpOworCisjIE1hcCBmaWxlIG5hbWVzIHRvIGZpbGUgdHlwZXMuCitteSAlZmlsZV90eXBlID0gKCk7Cit1c2UgY29uc3RhbnQgRlRfVVNFUiA9PiAxOwordXNlIGNvbnN0YW50IEZUX0FVVE9NQUtFID0+IDI7Cit1c2UgY29uc3RhbnQgRlRfU1lTVEVNID0+IDM7CisKKyMgTWFwIGZpbGUgbmFtZXMgdG8gaW5jbHVkZWQgZmlsZXMgKHRyYW5zaXRpdmVseSBjbG9zZWQpLgorbXkgJWZpbGVfaW5jbHVkZXMgPSAoKTsKKworIyBGaWxlcyB3aGljaCBoYXZlIGFscmVhZHkgYmVlbiBhZGRlZC4KK215ICVmaWxlX2FkZGVkID0gKCk7CisKKyMgRmlsZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBzY2FubmVkLgorbXkgJXNjYW5uZWRfY29uZmlndXJlX2RlcCA9ICgpOworCisjIFNlcmlhbCBudW1iZXJzLCBmb3IgZmlsZXMgdGhhdCBoYXZlIG9uZS4KKyMgVGhlIGtleSBpcyB0aGUgYmFzZW5hbWUgb2YgdGhlIGZpbGUsCisjIHRoZSB2YWx1ZSBpcyB0aGUgc2VyaWFsIG51bWJlciByZXByZXNlbnRlZCBhcyBhIGxpc3QuCitteSAlc2VyaWFsID0gKCk7CisKKyMgTWF0Y2hlcyBhIG1hY3JvIGRlZmluaXRpb24uCisjICAgQUNfREVGVU4oW21hY3JvbmFtZV0sIC4uLikKKyMgb3IKKyMgICBBQ19ERUZVTihtYWNyb25hbWUsIC4uLikKKyMgV2hlbiBtYWNyb25hbWUgaXMgYFsnLXF1b3RlZCAsIHdlIGFjY2VwdCBhbnkgY2hhcmFjdGVyIGluIHRoZSBuYW1lLAorIyBleGNlcHQgYF0nLiAgT3RoZXJ3aXNlIG1hY3JvbmFtZSBzdG9wcyBvbiB0aGUgZmlyc3QgYF0nLCBgLCcsIGApJywKKyMgb3IgYFxuJyBlbmNvdW50ZXJlZC4KK215ICRhY19kZWZ1bl9yeCA9CisgICIoPzpBVV9BTElBU3xBW0NVXV9ERUZVTnxBQ19ERUZVTl9PTkNFKVxcKCg/OlxcWyhbXl1dKylcXF18KFteXSwpXG5dKykpIjsKKworIyBNYXRjaGVzIGFuIEFDX1JFUVVJUkUgbGluZS4KK215ICRhY19yZXF1aXJlX3J4ID0gIkFDX1JFUVVJUkVcXCgoPzpcXFsoW15dXSspXFxdfChbXl0sKVxuXSspKVxcKSI7CisKKyMgTWF0Y2hlcyBhbiBtNF9pbmNsdWRlIGxpbmUuCitteSAkbTRfaW5jbHVkZV9yeCA9ICIobTRffG00X3N8cylpbmNsdWRlXFwoKD86XFxbKFteXV0rKVxcXXwoW15dLClcbl0rKSlcXCkiOworCisjIE1hdGNoIGEgc2VyaWFsIG51bWJlci4KK215ICRzZXJpYWxfbGluZV9yeCA9ICdeI1xzKnNlcmlhbFxzKyhcUyopJzsKK215ICRzZXJpYWxfbnVtYmVyX3J4ID0gJ15cZCsoPzpcLlxkKykqJCc7CisKKyMgQXV0b2NvbmYgdmVyc2lvbgorIyBTZXQgYnkgdHJhY2VfdXNlZF9tYWNyb3MuCitteSAkYWNfdmVyc2lvbjsKKworIyBJZiBzZXQsIG5hbWVzIGEgdGVtcG9yYXJ5IGZpbGUgdGhhdCBtdXN0IGJlIGVyYXNlZCBvbiBhYm5vcm1hbCBleGl0LgorbXkgJGVyYXNlX21lOworDAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEVyYXNlIHRlbXBvcmFyeSBmaWxlIEVSQVNFX01FLiAgSGFuZGxlIHNpZ25hbHMuCitzdWIgdW5saW5rX3RtcAoreworICBteSAoJHNpZykgPSBAXzsKKworICBpZiAoJHNpZykKKyAgICB7CisgICAgICB2ZXJiICJjYXVnaHQgU0lHJHNpZywgYmFpbGluZyBvdXQiOworICAgIH0KKyAgaWYgKGRlZmluZWQgJGVyYXNlX21lICYmIC1lICRlcmFzZV9tZSAmJiAhdW5saW5rICgkZXJhc2VfbWUpKQorICAgIHsKKyAgICAgIGZhdGFsICJjb3VsZCBub3QgcmVtb3ZlIGAkZXJhc2VfbWUnOiAkISI7CisgICAgfQorICB1bmRlZiAkZXJhc2VfbWU7CisKKyAgIyByZXJhaXNlIGRlZmF1bHQgaGFuZGxlci4KKyAgaWYgKCRzaWcpCisgICAgeworICAgICAgJFNJR3skc2lnfSA9ICdERUZBVUxUJzsKKyAgICAgIGtpbGwgJHNpZyA9PiAkJDsKKyAgICB9Cit9CisKKyRTSUd7J0lOVCd9ID0gJFNJR3snVEVSTSd9ID0gJFNJR3snUVVJVCd9ID0gJFNJR3snSFVQJ30gPSAndW5saW5rX3RtcCc7CitFTkQgeyB1bmxpbmtfdG1wIH0KKworIyBDaGVjayBtYWNyb3MgaW4gYWNpbmNsdWRlLm00LiAgSWYgb25lIGlzIG5vdCB1c2VkLCB3YXJuLgorc3ViIGNoZWNrX2FjaW5jbHVkZSAoKQoreworICBmb3JlYWNoIG15ICRrZXkgKGtleXMgJW1hcCkKKyAgICB7CisgICAgICAjIEZJWE1FOiBzaG91bGQgcHJpbnQgbGluZSBudW1iZXIgb2YgYWNpbmNsdWRlLm00LgorICAgICAgbXNnICgnc3ludGF4JywgIndhcm5pbmc6IG1hY3JvIGAka2V5JyBkZWZpbmVkIGluICIKKwkgICAuICJhY2luY2x1ZGUubTQgYnV0IG5ldmVyIHVzZWQiKQorCWlmICRtYXB7JGtleX0gZXEgJ2FjaW5jbHVkZS5tNCcgJiYgISBleGlzdHMgJG1hY3JvX3NlZW57JGtleX07CisgICAgfQorfQorCitzdWIgcmVzZXRfbWFwcyAoKQoreworICAkZ3JlYXRlc3RfbXRpbWUgPSAwOworICAlbWFjcm9fc2VlbiA9ICgpOworICBAZmlsZV9vcmRlciA9ICgpOworICAlbWFwID0gKCk7CisgICVtYXBfdHJhY2VkX2RlZnMgPSAoKTsKKyAgJWZpbGVfY29udGVudHMgPSAoKTsKKyAgJWZpbGVfdHlwZSA9ICgpOworICAlZmlsZV9pbmNsdWRlcyA9ICgpOworICAlZmlsZV9hZGRlZCA9ICgpOworICAlc2Nhbm5lZF9jb25maWd1cmVfZGVwID0gKCk7CisgICVpbnZtYXAgPSAoKTsKKyAgJXNlcmlhbCA9ICgpOworICB1bmRlZiAmc2VhcmNoOworfQorCisjIGluc3RhbGxfZmlsZSAoJFNSQywgJERFU1QpCitzdWIgaW5zdGFsbF9maWxlICgkJCkKK3sKKyAgbXkgKCRzcmMsICRkZXN0KSA9IEBfOworICBteSAkZGlmZl9kZXN0OworCisgIGlmICgkZm9yY2Vfb3V0cHV0CisgICAgICB8fCAhZXhpc3RzICRmaWxlX2NvbnRlbnRzeyRkZXN0fQorICAgICAgfHwgJGZpbGVfY29udGVudHN7JHNyY30gbmUgJGZpbGVfY29udGVudHN7JGRlc3R9KQorICAgIHsKKyAgICAgIGlmICgtZSAkZGVzdCkKKwl7CisJICBtc2cgJ25vdGUnLCAib3ZlcndyaXRpbmcgYCRkZXN0JyB3aXRoIGAkc3JjJyI7CisJICAkZGlmZl9kZXN0ID0gJGRlc3Q7CisJfQorICAgICAgZWxzZQorCXsKKwkgIG1zZyAnbm90ZScsICJpbnN0YWxsaW5nIGAkZGVzdCcgZnJvbSBgJHNyYyciOworCX0KKworICAgICAgaWYgKEBkaWZmX2NvbW1hbmQpCisJeworCSAgaWYgKCEgZGVmaW5lZCAkZGlmZl9kZXN0KQorCSAgICB7CisJICAgICAgIyAkZGVzdCBkb2VzIG5vdCBleGlzdC4gIFdlIGNyZWF0ZSBhbiBlbXB0eSBvbmUganVzdCB0bworCSAgICAgICMgcnVuIGRpZmYsIGFuZCB3ZSBlcmFzZSBpdCBhZnRlcndhcmQuICBVc2luZyB0aGUgcmVhbAorCSAgICAgICMgdGhlIGRlc3RpbmF0aW9uIGZpbGUgKHJhdGhlciB0aGFuIGEgdGVtcG9yYXJ5IGZpbGUpIGlzCisJICAgICAgIyBnb29kIHdoZW4gZGlmZiBpcyBydW4gd2l0aCBvcHRpb25zIHRoYXQgZGlzcGxheSB0aGUKKwkgICAgICAjIGZpbGUgbmFtZS4KKwkgICAgICAjCisJICAgICAgIyBJZiBjcmVhdGluZyAkZGVzdCBmYWlscywgZmFsbCBiYWNrIHRvIC9kZXYvbnVsbC4gIEF0CisJICAgICAgIyBsZWFzdCBvbmUgZGlmZiBpbXBsZW1lbnRhdGlvbiAoVHJ1NjQncykgY2Fubm90IGRlYWwKKwkgICAgICAjIHdpdGggL2Rldi9udWxsLiAgSG93ZXZlciB3b3JraW5nIGFyb3VuZCB0aGlzIGlzIG5vdAorCSAgICAgICMgd29ydGggdGhlIHRyb3VibGUgc2luY2Ugbm9ib2R5IHJ1biBhY2xvY2FsIG9uIGEKKwkgICAgICAjIHJlYWQtb25seSB0cmVlIGFueXdheS4KKwkgICAgICAkZXJhc2VfbWUgPSAkZGVzdDsKKwkgICAgICBteSAkZiA9IG5ldyBJTzo6RmlsZSAiPiAkZGVzdCI7CisJICAgICAgaWYgKCEgZGVmaW5lZCAkZikKKwkJeworCQkgIHVuZGVmICRlcmFzZV9tZTsKKwkJICAkZGlmZl9kZXN0ID0gJy9kZXYvbnVsbCc7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICAkZGlmZl9kZXN0ID0gJGRlc3Q7CisJCSAgJGYtPmNsb3NlOworCQl9CisJICAgIH0KKwkgIG15IEBjbWQgPSAoQGRpZmZfY29tbWFuZCwgJGRpZmZfZGVzdCwgJHNyYyk7CisJICAkISA9IDA7CisJICB2ZXJiICJydW5uaW5nOiBAY21kIjsKKwkgIG15ICRyZXMgPSBzeXN0ZW0gKEBjbWQpOworCSAgQXV0b21ha2U6OkZpbGVVdGlsczo6aGFuZGxlX2V4ZWNfZXJyb3JzICJAY21kIiwgMQorCSAgICBpZiAkcmVzOworCSAgdW5saW5rX3RtcDsKKwl9CisgICAgICBlbHNpZiAoISRkcnlfcnVuKQorCXsKKwkgIHhzeXN0ZW0gKCdjcCcsICRzcmMsICRkZXN0KTsKKwl9CisgICAgfQorfQorCisjIENvbXBhcmUgdHdvIGxpc3RzIG9mIG51bWJlcnMuCitzdWIgbGlzdF9jb21wYXJlIChcQFxAKQoreworICBteSBAbCA9IEB7JF9bMF19OworICBteSBAciA9IEB7JF9bMV19OworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBpZiAoMCA9PSBAbCkKKwl7CisJICByZXR1cm4gKDAgPT0gQHIpID8gMCA6IC0xOworCX0KKyAgICAgIGVsc2lmICgwID09IEByKQorCXsKKwkgIHJldHVybiAxOworCX0KKyAgICAgIGVsc2lmICgkbFswXSA8ICRyWzBdKQorCXsKKwkgIHJldHVybiAtMTsKKwl9CisgICAgICBlbHNpZiAoJGxbMF0gPiAkclswXSkKKwl7CisJICByZXR1cm4gMTsKKwl9CisgICAgICBzaGlmdCBAbDsKKyAgICAgIHNoaWZ0IEByOworICAgIH0KK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIHNjYW5fbTRfZGlycygkVFlQRSwgQERJUlMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNjYW4gYWxsIE00IGZpbGVzIGluc3RhbGxlZCBpbiBARElSUyBmb3IgbmV3IG1hY3JvIGRlZmluaXRpb25zLgorIyBSZWdpc3RlciBlYWNoIGZpbGUgYXMgb2YgdHlwZSAkVFlQRSAob25lIG9mIHRoZSBGVF8qIGNvbnN0YW50cykuCitzdWIgc2Nhbl9tNF9kaXJzICgkQCkKK3sKKyAgbXkgKCR0eXBlLCBAZGlybGlzdCkgPSBAXzsKKworICBmb3JlYWNoIG15ICRtNGRpciAoQGRpcmxpc3QpCisgICAgeworICAgICAgaWYgKCEgb3BlbmRpciAoRElSLCAkbTRkaXIpKQorCXsKKwkgIGZhdGFsICJjb3VsZG4ndCBvcGVuIGRpcmVjdG9yeSBgJG00ZGlyJzogJCEiOworCX0KKworICAgICAgIyBXZSByZXZlcnNlIHRoZSBkaXJlY3RvcnkgY29udGVudHMgc28gdGhhdCBmb28yLm00IGdldHMKKyAgICAgICMgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIGZvbzEubTQuCisgICAgICBmb3JlYWNoIG15ICRmaWxlIChyZXZlcnNlIHNvcnQgZ3JlcCAoISAvXlwuLywgcmVhZGRpciAoRElSKSkpCisJeworCSAgIyBPbmx5IGV4YW1pbmUgLm00IGZpbGVzLgorCSAgbmV4dCB1bmxlc3MgJGZpbGUgPX4gL1wubTQkLzsKKworCSAgIyBTa2lwIHNvbWUgZmlsZXMgd2hlbiBydW5uaW5nIG91dCBvZiBzcmNkaXIuCisJICBuZXh0IGlmICRmaWxlIGVxICdhY2xvY2FsLm00JzsKKworCSAgbXkgJGZ1bGxmaWxlID0gRmlsZTo6U3BlYy0+Y2Fub25wYXRoICgiJG00ZGlyLyRmaWxlIik7CisJICAgICZzY2FuX2ZpbGUgKCR0eXBlLCAkZnVsbGZpbGUsICdhY2xvY2FsJyk7CisJfQorICAgICAgY2xvc2VkaXIgKERJUik7CisgICAgfQorfQorCisjIFNjYW4gYWxsIHRoZSBpbnN0YWxsZWQgbTQgZmlsZXMgYW5kIGNvbnN0cnVjdCBhIG1hcC4KK3N1YiBzY2FuX200X2ZpbGVzICgpCit7CisgICMgRmlyc3QsIHNjYW4gY29uZmlndXJlLmFjLiAgSXQgbWF5IGNvbnRhaW4gbWFjcm8gZGVmaW5pdGlvbnMsCisgICMgb3IgbWF5IGluY2x1ZGUgb3RoZXIgZmlsZXMgdGhhdCBkZWZpbmUgbWFjcm9zLgorICAmc2Nhbl9maWxlIChGVF9VU0VSLCAkY29uZmlndXJlX2FjLCAnYWNsb2NhbCcpOworCisgICMgVGhlbiwgc2NhbiBhY2luY2x1ZGUubTQgaWYgaXQgZXhpc3RzLgorICBpZiAoLWYgJ2FjaW5jbHVkZS5tNCcpCisgICAgeworICAgICAgJnNjYW5fZmlsZSAoRlRfVVNFUiwgJ2FjaW5jbHVkZS5tNCcsICdhY2xvY2FsJyk7CisgICAgfQorCisgICMgRmluYWxseSwgc2NhbiBhbGwgZmlsZXMgaW4gb3VyIHNlYXJjaCBwYXRocy4KKyAgc2Nhbl9tNF9kaXJzIChGVF9VU0VSLCBAdXNlcl9pbmNsdWRlcyk7CisgIHNjYW5fbTRfZGlycyAoRlRfQVVUT01BS0UsIEBhdXRvbWFrZV9pbmNsdWRlcyk7CisgIHNjYW5fbTRfZGlycyAoRlRfU1lTVEVNLCBAc3lzdGVtX2luY2x1ZGVzKTsKKworICAjIENvbnN0cnVjdCBhIG5ldyBmdW5jdGlvbiB0aGF0IGRvZXMgdGhlIHNlYXJjaGluZy4gIFdlIHVzZSBhCisgICMgZnVuY3Rpb24gKGluc3RlYWQgb2YganVzdCBldmFsdWF0aW5nICRzZWFyY2ggaW4gdGhlIGxvb3ApIHNvIHRoYXQKKyAgIyAiZGllIiBpcyBjb3JyZWN0bHkgYW5kIGVhc2lseSBwcm9wYWdhdGVkIGlmIHJ1bi4KKyAgbXkgJHNlYXJjaCA9ICJzdWIgc2VhcmNoIHtcbm15IFwkZm91bmQgPSAwO1xuIjsKKyAgZm9yZWFjaCBteSAka2V5IChyZXZlcnNlIHNvcnQga2V5cyAlbWFwKQorICAgIHsKKyAgICAgICRzZWFyY2ggLj0gKCdpZiAoL1xiXFEnIC4gJGtleSAuICdcRSg/IVx3KS8pIHsgJiBhZGRfbWFjcm8gKCInIC4gJGtleQorCQkgIC4gJyIpOyAkZm91bmQgPSAxOyB9JyAuICJcbiIpOworICAgIH0KKyAgJHNlYXJjaCAuPSAicmV0dXJuIFwkZm91bmQ7XG59O1xuIjsKKyAgZXZhbCAkc2VhcmNoOworICBwcm9nX2Vycm9yICIkQFxuIHNlYXJjaCBpcyAkc2VhcmNoIiBpZiAkQDsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEFkZCBhIG1hY3JvIHRvIHRoZSBvdXRwdXQuCitzdWIgYWRkX21hY3JvICgkKQoreworICBteSAoJG1hY3JvKSA9IEBfOworCisgICMgSWdub3JlIHVua25vd24gcmVxdWlyZWQgbWFjcm9zLiAgRWl0aGVyIHRoZXkgYXJlIG5vdCByZWFsbHkKKyAgIyBuZWVkZWQgKGUuZy4sIGEgY29uZGl0aW9uYWwgQUNfUkVRVUlSRSksIGluIHdoaWNoIGNhc2UgYWNsb2NhbAorICAjIHNob3VsZCBiZSBxdWlldCwgb3IgdGhleSBhcmUgbmVlZGVkIGFuZCBBdXRvY29uZiBpdHNlbGYgd2lsbAorICAjIGNvbXBsYWluIHdoZW4gd2UgdHJhY2UgZm9yIG1hY3JvIHVzYWdlIGxhdGVyLgorICByZXR1cm4gdW5sZXNzIGRlZmluZWQgJG1hcHskbWFjcm99OworCisgIHZlcmIgInNhdyBtYWNybyAkbWFjcm8iOworICAkbWFjcm9fc2VlbnskbWFjcm99ID0gMTsKKyAgJmFkZF9maWxlICgkbWFweyRtYWNyb30pOworfQorCisjIHNjYW5fY29uZmlndXJlX2RlcCAoJGZpbGUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNjYW4gYSBjb25maWd1cmUgZGVwZW5kZW5jeSAoY29uZmlndXJlLmFjLCBvciBzZXBhcmF0ZSBtNCBmaWxlcykKKyMgZm9yIHVzZXMgb2Yga25vd24gbWFjcm9zIGFuZCBBQ19SRVFVSVJFcyBvZiBwb3NzaWJseSB1bmtub3duIG1hY3Jvcy4KKyMgUmVjdXJzaXZlbHkgc2NhbiBtNF9pbmNsdWRlZCBmaWxlcy4KK3N1YiBzY2FuX2NvbmZpZ3VyZV9kZXAgKCQpCit7CisgIG15ICgkZmlsZSkgPSBAXzsKKyAgIyBEbyBub3Qgc2NhbiBhIGZpbGUgdHdpY2UuCisgIHJldHVybiAoKQorICAgIGlmIGV4aXN0cyAkc2Nhbm5lZF9jb25maWd1cmVfZGVweyRmaWxlfTsKKyAgJHNjYW5uZWRfY29uZmlndXJlX2RlcHskZmlsZX0gPSAxOworCisgIG15ICRtdGltZSA9IG10aW1lICRmaWxlOworICAkZ3JlYXRlc3RfbXRpbWUgPSAkbXRpbWUgaWYgJGdyZWF0ZXN0X210aW1lIDwgJG10aW1lOworCisgIG15ICRjb250ZW50cyA9IGV4aXN0cyAkZmlsZV9jb250ZW50c3skZmlsZX0gPworICAgICRmaWxlX2NvbnRlbnRzeyRmaWxlfSA6IGNvbnRlbnRzICRmaWxlOworCisgIG15ICRsaW5lID0gMDsKKyAgbXkgQHJsaXN0ID0gKCk7CisgIG15IEBpbGlzdCA9ICgpOworICBmb3JlYWNoIChzcGxpdCAoIlxuIiwgJGNvbnRlbnRzKSkKKyAgICB7CisgICAgICArKyRsaW5lOworICAgICAgIyBSZW1vdmUgY29tbWVudHMgZnJvbSBjdXJyZW50IGxpbmUuCisgICAgICBzL1xiZG5sXGIuKiQvLzsKKyAgICAgIHMvXCMuKiQvLzsKKyAgICAgICMgQXZvaWQgcnVubmluZyBhbGwgdGhlIGZvbGxvd2luZyByZWdleGVzIG9uIHdoaXRlIGxpbmVzLgorICAgICAgbmV4dCBpZiAvXlxzKiQvOworCisgICAgICB3aGlsZSAoLyRtNF9pbmNsdWRlX3J4L2dvKQorCXsKKwkgIG15ICRpZmlsZSA9ICQyIHx8ICQzOworCSAgIyBTa2lwIG1pc3NpbmcgYHNpbmNsdWRlJ2QgZmlsZXMuCisJICBuZXh0IGlmICQxIG5lICdtNF8nICYmICEgLWYgJGlmaWxlOworCSAgcHVzaCBAaWxpc3QsICRpZmlsZTsKKwl9CisKKyAgICAgIHdoaWxlICgvJGFjX3JlcXVpcmVfcngvZ28pCisJeworCSAgcHVzaCAoQHJsaXN0LCAkMSB8fCAkMik7CisJfQorCisgICAgICAjIFRoZSBzZWFyY2ggZnVuY3Rpb24gaXMgY29uc3RydWN0ZWQgZHluYW1pY2FsbHkgYnkKKyAgICAgICMgc2Nhbl9tNF9maWxlcy4gIFRoZSBsYXN0IHBhcmVudGhldGljYWwgbWF0Y2ggbWFrZXMgc3VyZSB3ZQorICAgICAgIyBkb24ndCBtYXRjaCB0aGluZ3MgdGhhdCBsb29rIGxpa2UgbWFjcm8gYXNzaWdubWVudHMgb3IKKyAgICAgICMgQUNfU1VCU1RzLgorICAgICAgaWYgKCEgJnNlYXJjaCAmJiAvKF58XHMrKShBTV9bQS1aMC05X10rKSgkfFteXF1cKT1BLVowLTlfXSkvKQorCXsKKwkgICMgTWFjcm8gbm90IGZvdW5kLCBidXQgQU1fIHByZWZpeCBmb3VuZC4KKwkgICMgTWFrZSB0aGlzIGp1c3QgYSB3YXJuaW5nLCBiZWNhdXNlIHdlIGRvIG5vdCBrbm93IHdoZXRoZXIKKwkgICMgdGhlIG1hY3JvIGlzIGFjdHVhbGx5IHVzZWQgKGl0IGNvdWxkIGJlIGNhbGxlZCBjb25kaXRpb25hbGx5KS4KKwkgIG1zZyAoJ3Vuc3VwcG9ydGVkJywgIiRmaWxlOiRsaW5lIiwKKwkgICAgICAgIndhcm5pbmc6IG1hY3JvIGAkMicgbm90IGZvdW5kIGluIGxpYnJhcnkiKTsKKwl9CisgICAgfQorCisgIGFkZF9tYWNybyAoJF8pIGZvcmVhY2ggKEBybGlzdCk7CisgICZzY2FuX2NvbmZpZ3VyZV9kZXAgKCRfKSBmb3JlYWNoIEBpbGlzdDsKK30KKworIyBhZGRfZmlsZSAoJEZJTEUpCisjIC0tLS0tLS0tLS0tLS0tLS0KKyMgQWRkICRGSUxFIHRvIG91dHB1dC4KK3N1YiBhZGRfZmlsZSAoJCkKK3sKKyAgbXkgKCRmaWxlKSA9IEBfOworCisgICMgT25seSBhZGQgYSBmaWxlIG9uY2UuCisgIHJldHVybiBpZiAoJGZpbGVfYWRkZWR7JGZpbGV9KTsKKyAgJGZpbGVfYWRkZWR7JGZpbGV9ID0gMTsKKworICBzY2FuX2NvbmZpZ3VyZV9kZXAgJGZpbGU7Cit9CisKKyMgUG9pbnQgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIHVuZGVycXVvdGVkIEFDX0RFRlVOIG9ubHkgb25jZS4KK215ICR1bmRlcnF1b3RlZF9tYW51YWxfb25jZSA9IDA7CisKKyMgc2Nhbl9maWxlICgkVFlQRSwgJEZJTEUsICRXSEVSRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2NhbiBhIHNpbmdsZSBNNCBmaWxlICgkRklMRSksIGFuZCBhbGwgZmlsZXMgaXQgaW5jbHVkZXMuCisjIFJldHVybiB0aGUgbGlzdCBvZiBpbmNsdWRlZCBmaWxlcy4KKyMgJFRZUEUgaXMgb25lIG9mIEZUX1VTRVIsIEZUX0FVVE9NQUtFLCBvciBGVF9TWVNURU0sIGRlcGVuZGluZworIyBvbiB3aGVyZSB0aGUgZmlsZSBjb21lcyBmcm9tLgorIyAkV0hFUkUgaXMgdGhlIGxvY2F0aW9uIHRvIHVzZSBpbiB0aGUgZGlhZ25vc3RpYyBpZiB0aGUgZmlsZQorIyBkb2VzIG5vdCBleGlzdC4KK3N1YiBzY2FuX2ZpbGUgKCQkJCkKK3sKKyAgbXkgKCR0eXBlLCAkZmlsZSwgJHdoZXJlKSA9IEBfOworICBteSAkYmFzZW5hbWUgPSBiYXNlbmFtZSAkZmlsZTsKKworICAjIERvIG5vdCBzY2FuIHRoZSBzYW1lIGZpbGUgdHdpY2UuCisgIHJldHVybiBAeyRmaWxlX2luY2x1ZGVzeyRmaWxlfX0gaWYgZXhpc3RzICRmaWxlX2luY2x1ZGVzeyRmaWxlfTsKKyAgIyBQcmV2ZW50IHBvdGVudGlhbCBpbmZpbml0ZSByZWN1cnNpb24gKGlmIHR3byBmaWxlcyBpbmNsdWRlIGVhY2ggb3RoZXIpLgorICByZXR1cm4gKCkgaWYgZXhpc3RzICRmaWxlX2NvbnRlbnRzeyRmaWxlfTsKKworICB1bnNoaWZ0IEBmaWxlX29yZGVyLCAkZmlsZTsKKworICAkZmlsZV90eXBleyRmaWxlfSA9ICR0eXBlOworCisgIGZhdGFsICIkd2hlcmU6IGZpbGUgYCRmaWxlJyBkb2VzIG5vdCBleGlzdCIgaWYgISAtZSAkZmlsZTsKKworICBteSAkZmggPSBuZXcgQXV0b21ha2U6OlhGaWxlICRmaWxlOworICBteSAkY29udGVudHMgPSAnJzsKKyAgbXkgQGluY19maWxlcyA9ICgpOworICBteSAlaW5jX2xpbmVzID0gKCk7CisKKyAgbXkgJGRlZnVuX3NlZW4gPSAwOworICBteSAkc2VyaWFsX3NlZW4gPSAwOworICBteSAkc2VyaWFsX29sZGVyID0gMDsKKworICB3aGlsZSAoJF8gPSAkZmgtPmdldGxpbmUpCisgICAgeworICAgICAgIyBJZ25vcmUgYCMjJyBsaW5lcy4KKyAgICAgIG5leHQgaWYgL14jIy87CisKKyAgICAgICRjb250ZW50cyAuPSAkXzsKKyAgICAgIG15ICRsaW5lID0gJF87CisKKyAgICAgIGlmICgkbGluZSA9fiAvJHNlcmlhbF9saW5lX3J4L2dvKQorCXsKKwkgIG15ICRudW1iZXIgPSAkMTsKKwkgIGlmICgkbnVtYmVyICF+IC8kc2VyaWFsX251bWJlcl9yeC9nbykKKwkgICAgeworCSAgICAgIG1zZyAoJ3N5bnRheCcsICIkZmlsZTokLiIsCisJCSAgICJ3YXJuaW5nOiBpbGwtZm9ybWVkIHNlcmlhbCBudW1iZXIgYCRudW1iZXInLCAiCisJCSAgIC4gImV4cGVjdGluZyBhIHZlcnNpb24gc3RyaW5nIHdpdGggb25seSBkaWdpdHMgYW5kIGRvdHMiKTsKKwkgICAgfQorCSAgZWxzaWYgKCRkZWZ1bl9zZWVuKQorCSAgICB7CisJICAgICAgIyBhY2xvY2FsIHJlbW92ZXMgYWxsIGRlZmluaXRpb25zIGZyb20gTTQgZmlsZSB3aXRoIHRoZQorCSAgICAgICMgc2FtZSBiYXNlbmFtZSBpZiBhIGdyZWF0ZXIgc2VyaWFsIG51bWJlciBpcyBmb3VuZC4KKwkgICAgICAjIEVuY291bnRlcmluZyBhIHNlcmlhbCBhZnRlciBzb21lIG1hY3JvcyB3aWxsIHVuZGVmaW5lCisJICAgICAgIyB0aGVzZSBtYWNyb3MuLi4KKwkgICAgICBtc2cgKCdzeW50YXgnLCAiJGZpbGU6JC4iLAorCQkgICAndGhlIHNlcmlhbCBudW1iZXIgbXVzdCBhcHBlYXIgYmVmb3JlIGFueSBtYWNybyBkZWZpbml0aW9uJyk7CisJICAgIH0KKwkgICMgV2UgcmVhbGx5IGNhcmUgYWJvdXQgc2VyaWFscyBvbmx5IGZvciBub24tYXV0b21ha2UgbWFjcm9zCisJICAjIGFuZCB3aGVuIC0taW5zdGFsbCBpcyB1c2VkLiAgQnV0IHRoZSBhYm92ZSBkaWFnbm9zdGljcyBhcmUKKwkgICMgbWFkZSByZWdhcmRsZXNzIG9mIHRoaXMsIGJlY2F1c2Ugbm90IHVzaW5nIC0taW5zdGFsbCBpcworCSAgIyBub3QgYSByZWFzb24gbm90IHRoZSBmaXggbWFjcm8gZmlsZXMuCisJICBlbHNpZiAoJGluc3RhbGwgJiYgJHR5cGUgIT0gRlRfQVVUT01BS0UpCisJICAgIHsKKwkgICAgICAkc2VyaWFsX3NlZW4gPSAxOworCSAgICAgIG15IEBuZXcgPSBzcGxpdCAoL1wuLywgJG51bWJlcik7CisKKwkgICAgICB2ZXJiICIkZmlsZTokLjogc2VyaWFsICRudW1iZXIiOworCisJICAgICAgaWYgKCFleGlzdHMgJHNlcmlhbHskYmFzZW5hbWV9CisJCSAgfHwgbGlzdF9jb21wYXJlIChAbmV3LCBAeyRzZXJpYWx7JGJhc2VuYW1lfX0pID4gMCkKKwkJeworCQkgICMgRGVsZXRlIGFueSBkZWZpbml0aW9uIHdlIGtuZXcgZnJvbSB0aGUgb2xkIG1hY3JvLgorCQkgIGZvcmVhY2ggbXkgJGRlZiAoQHskaW52bWFweyRiYXNlbmFtZX19KQorCQkgICAgeworCQkgICAgICB2ZXJiICIkZmlsZTokLjogaWdub3JpbmcgcHJldmlvdXMgZGVmaW5pdGlvbiBvZiAkZGVmIjsKKwkJICAgICAgZGVsZXRlICRtYXB7JGRlZn07CisJCSAgICB9CisJCSAgJGludm1hcHskYmFzZW5hbWV9ID0gW107CisJCSAgJHNlcmlhbHskYmFzZW5hbWV9ID0gXEBuZXc7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICAkc2VyaWFsX29sZGVyID0gMTsKKwkJfQorCSAgICB9CisJfQorCisgICAgICAjIFJlbW92ZSBjb21tZW50cyBmcm9tIGN1cnJlbnQgbGluZS4KKyAgICAgICMgRG8gbm90IGRvIGl0IGVhcmxpZXIsIGJlY2F1c2UgdGhlIHNlcmlhbCBsaW5lIGlzIGEgY29tbWVudC4KKyAgICAgICRsaW5lID1+IHMvXGJkbmxcYi4qJC8vOworICAgICAgJGxpbmUgPX4gcy9cIy4qJC8vOworCisgICAgICB3aGlsZSAoJGxpbmUgPX4gLyRhY19kZWZ1bl9yeC9nbykKKwl7CisJICAkZGVmdW5fc2VlbiA9IDE7CisJICBpZiAoISBkZWZpbmVkICQxKQorCSAgICB7CisJICAgICAgbXNnICgnc3ludGF4JywgIiRmaWxlOiQuIiwgIndhcm5pbmc6IHVuZGVycXVvdGVkIGRlZmluaXRpb24gb2YgJDIiCisJCSAgIC4gIlxuICBydW4gaW5mbyAnKGF1dG9tYWtlKUV4dGVuZGluZyBhY2xvY2FsJ1xuIgorCQkgICAuICIgIG9yIHNlZSBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2F1dG9tYWtlLyIKKwkJICAgLiAiYXV0b21ha2UuaHRtbCNFeHRlbmRpbmctYWNsb2NhbCIpCisJCXVubGVzcyAkdW5kZXJxdW90ZWRfbWFudWFsX29uY2U7CisJICAgICAgJHVuZGVycXVvdGVkX21hbnVhbF9vbmNlID0gMTsKKwkgICAgfQorCisJICAjIElmIHRoaXMgbWFjcm8gZG9lcyBub3QgaGF2ZSBhIHNlcmlhbCBhbmQgd2UgaGF2ZSBhbHJlYWR5CisJICAjIHNlZW4gYSBtYWNybyB3aXRoIHRoZSBzYW1lIGJhc2VuYW1lIGVhcmxpZXIsIHdlIHNob3VsZAorCSAgIyBpZ25vcmUgdGhlIG1hY3JvIChkb24ndCBleGl0IGltbWVkaWF0ZWx5IHNvIHdlIGNhbiBzdGlsbAorCSAgIyBkaWFnbm9zZSBsYXRlciAjc2VyaWFsIG51bWJlcnMgYW5kIHVuZGVycXVvdGVkIG1hY3JvcykuCisJICAkc2VyaWFsX29sZGVyIHx8PSAoJHR5cGUgIT0gRlRfQVVUT01BS0UKKwkJCSAgICAgJiYgISRzZXJpYWxfc2VlbiAmJiBleGlzdHMgJHNlcmlhbHskYmFzZW5hbWV9KTsKKworCSAgbXkgJG1hY3JvID0gJDEgfHwgJDI7CisJICBpZiAoISRzZXJpYWxfb2xkZXIgJiYgIWRlZmluZWQgJG1hcHskbWFjcm99KQorCSAgICB7CisJICAgICAgdmVyYiAiZm91bmQgbWFjcm8gJG1hY3JvIGluICRmaWxlOiAkLiI7CisJICAgICAgJG1hcHskbWFjcm99ID0gJGZpbGU7CisJICAgICAgcHVzaCBAeyRpbnZtYXB7JGJhc2VuYW1lfX0sICRtYWNybzsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgIyBOb3RlOiB3ZSB1c2VkIHRvIGdpdmUgYW4gZXJyb3IgaGVyZSBpZiB3ZSBzYXcgYQorCSAgICAgICMgZHVwbGljYXRlZCBtYWNyby4gIEhvd2V2ZXIsIHRoaXMgdHVybnMgb3V0IHRvIGJlCisJICAgICAgIyBleHRyZW1lbHkgdW5wb3B1bGFyLiAgSXQgY2F1c2VzIGFjdHVhbCBwcm9ibGVtcyB3aGljaAorCSAgICAgICMgYXJlIGhhcmQgdG8gd29yayBhcm91bmQsIGVzcGVjaWFsbHkgd2hlbiB5b3UgbXVzdAorCSAgICAgICMgbWl4LWFuZC1tYXRjaCB0b29sIHZlcnNpb25zLgorCSAgICAgIHZlcmIgImlnbm9yaW5nIG1hY3JvICRtYWNybyBpbiAkZmlsZTogJC4iOworCSAgICB9CisJfQorCisgICAgICB3aGlsZSAoJGxpbmUgPX4gLyRtNF9pbmNsdWRlX3J4L2dvKQorCXsKKwkgIG15ICRpZmlsZSA9ICQyIHx8ICQzOworCSAgIyBTa2lwIG1pc3NpbmcgYHNpbmNsdWRlJ2QgZmlsZXMuCisJICBuZXh0IGlmICQxIG5lICdtNF8nICYmICEgLWYgJGlmaWxlOworCSAgcHVzaCAoQGluY19maWxlcywgJGlmaWxlKTsKKwkgICRpbmNfbGluZXN7JGlmaWxlfSA9ICQuOworCX0KKyAgICB9CisKKyAgIyBJZ25vcmUgYW55IGZpbGUgdGhhdCBoYXMgYW4gb2xkIHNlcmlhbCAob3Igbm8gc2VyaWFsIGlmIHdlIGtub3cKKyAgIyBhbm90aGVyIG9uZSB3aXRoIGEgc2VyaWFsKS4KKyAgcmV0dXJuICgpCisgICAgaWYgKCRzZXJpYWxfb2xkZXIgfHwKKwkoJHR5cGUgIT0gRlRfQVVUT01BS0UgJiYgISRzZXJpYWxfc2VlbiAmJiBleGlzdHMgJHNlcmlhbHskYmFzZW5hbWV9KSk7CisKKyAgJGZpbGVfY29udGVudHN7JGZpbGV9ID0gJGNvbnRlbnRzOworCisgICMgRm9yIHNvbWUgcmVhc29uIEkgZG9uJ3QgdW5kZXJzdGFuZCwgaXQgZG9lcyBub3Qgd29yaworICAjIHRvIGRvIGBtYXAgeyBzY2FuX2ZpbGUgKCRfLCAuLi4pIH0gQGluY19maWxlcycgYmVsb3cuCisgICMgV2l0aCBQZXJsIDUuOC4yIGl0IHVuZGVmaW5lcyBAaW5jX2ZpbGVzLgorICBteSBAY29weSA9IEBpbmNfZmlsZXM7CisgIG15IEBhbGxfaW5jX2ZpbGVzID0gKEBpbmNfZmlsZXMsCisJCSAgICAgICBtYXAgeyBzY2FuX2ZpbGUgKCR0eXBlLCAkXywKKwkJCQkJIiRmaWxlOiRpbmNfbGluZXN7JF99IikgfSBAY29weSk7CisgICRmaWxlX2luY2x1ZGVzeyRmaWxlfSA9IFxAYWxsX2luY19maWxlczsKKyAgcmV0dXJuIEBhbGxfaW5jX2ZpbGVzOworfQorCisjIHN0cmlwX3JlZHVuZGFudF9pbmNsdWRlcyAoJUZJTEVTKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRWFjaCBrZXkgaW4gJUZJTEVTIGlzIGEgZmlsZSB0aGF0IG11c3QgYmUgcHJlc2VudCBpbiB0aGUgb3V0cHV0LgorIyBIb3dldmVyIHNvbWUgb2YgdGhlc2UgZmlsZXMgbWlnaHQgYWxyZWFkeSBpbmNsdWRlIG90aGVyIGZpbGVzIGluICVGSUxFUywKKyMgc28gdGhlcmUgaXMgbm8gcG9pbnQgaW4gaW5jbHVkaW5nIHRoZW0gYW5vdGhlciB0aW1lLgorIyBUaGlzIHJlbW92ZXMgaXRlbXMgb2YgJUZJTEVTIHdoaWNoIGFyZSBhbHJlYWR5IGluY2x1ZGVkIGJ5IGFub3RoZXIgZmlsZS4KK3N1YiBzdHJpcF9yZWR1bmRhbnRfaW5jbHVkZXMgKCUpCit7CisgIG15ICVmaWxlcyA9IEBfOworCisgICMgQWx3YXlzIGluY2x1ZGUgYWNpbmNsdWRlLm00LCBldmVuIGlmIGl0IGRvZXMgbm90IGFwcGVhciB0byBiZSB1c2VkLgorICAkZmlsZXN7J2FjaW5jbHVkZS5tNCd9ID0gMSBpZiAtZiAnYWNpbmNsdWRlLm00JzsKKyAgIyBGaWxlIGluY2x1ZGVkIGJ5ICRjb25maWd1cmVfYWMgYXJlIHJlZHVuZGFudC4KKyAgJGZpbGVzeyRjb25maWd1cmVfYWN9ID0gMTsKKworICAjIEZpbGVzIGF0IHRoZSBlbmQgb2YgQGZpbGVfb3JkZXIgc2hvdWxkIG92ZXJyaWRlIHRob3NlIGF0IHRoZSBiZWdpbm5pbmcsCisgICMgc28gaXQgaXMgaW1wb3J0YW50IHRvIHByZXNlcnZlIHRoZXNlIHRyYWlsaW5nIGZpbGVzLiAgV2UgY2FuIHJlbW92ZQorICAjIGEgZmlsZSBBIGlmIGl0IGlzIGdvaW5nIHRvIGJlIG91dHB1dCBiZWZvcmUgYSBmaWxlIEIgdGhhdCBpbmNsdWRlcworICAjIGZpbGUgQSwgbm90IHRoZSBjb252ZXJzZS4KKyAgZm9yZWFjaCBteSAkZmlsZSAocmV2ZXJzZSBAZmlsZV9vcmRlcikKKyAgICB7CisgICAgICBuZXh0IHVubGVzcyBleGlzdHMgJGZpbGVzeyRmaWxlfTsKKyAgICAgIGZvcmVhY2ggbXkgJGlmaWxlIChAeyRmaWxlX2luY2x1ZGVzeyRmaWxlfX0pCisJeworCSAgbmV4dCB1bmxlc3MgZXhpc3RzICRmaWxlc3skaWZpbGV9OworCSAgZGVsZXRlICRmaWxlc3skaWZpbGV9OworCSAgdmVyYiAiJGlmaWxlIGlzIGFscmVhZHkgaW5jbHVkZWQgYnkgJGZpbGUiOworCX0KKyAgICB9CisKKyAgIyBjb25maWd1cmUuYWMgaXMgaW1wbGljaXRseSBpbmNsdWRlZC4KKyAgZGVsZXRlICRmaWxlc3skY29uZmlndXJlX2FjfTsKKworICByZXR1cm4gJWZpbGVzOworfQorCitzdWIgdHJhY2VfdXNlZF9tYWNyb3MgKCkKK3sKKyAgbXkgJWZpbGVzID0gbWFwIHsgJG1hcHskX30gPT4gMSB9IGtleXMgJW1hY3JvX3NlZW47CisgICVmaWxlcyA9IHN0cmlwX3JlZHVuZGFudF9pbmNsdWRlcyAlZmlsZXM7CisKKyAgbXkgJHRyYWNlcyA9ICgkRU5We0FVVE9NNFRFfSB8fCAnYXV0b200dGUnKTsKKyAgJHRyYWNlcyAuPSAiIC0tbGFuZ3VhZ2UgQXV0b2NvbmYtd2l0aG91dC1hY2xvY2FsLW00ICI7CisgICMgQWxsIGNhbmRpZGF0ZSBmaWxlcy4KKyAgJHRyYWNlcyAuPSBqb2luICgnICcsCisJCSAgIChtYXAgeyAiJyRfJyIgfQorCQkgICAgKGdyZXAgeyBleGlzdHMgJGZpbGVzeyRffSB9IEBmaWxlX29yZGVyKSkpIC4gIiAiOworICAjIEFsbCBjYW5kaWRhdGUgbWFjcm9zLgorICAkdHJhY2VzIC49IGpvaW4gKCcgJywKKwkJICAgKG1hcCB7ICItLXRyYWNlPSckXzpcJGY6Olwkbjo6XCQxJyIgfQorCQkgICAgKCdBQ19ERUZVTicsCisJCSAgICAgJ0FDX0RFRlVOX09OQ0UnLAorCQkgICAgICdBVV9ERUZVTicsCisJCSAgICAgJ19BTV9BVVRPQ09ORl9WRVJTSU9OJykpLAorCQkgICAjIERvIG5vdCB0cmFjZSAkMSBmb3IgYWxsIG90aGVyIG1hY3JvcyBhcyB3ZSBkbworCQkgICAjIG5vdCBuZWVkIGl0IGFuZCBpdCBtaWdodCBjb250YWlucyBoYXJtZnVsCisJCSAgICMgY2hhcmFjdGVycyAobGlrZSBuZXdsaW5lcykuCisJCSAgIChtYXAgeyAiLS10cmFjZT0nJF86XCRmOjpcJG4nIiB9IChrZXlzICVtYWNyb19zZWVuKSkpOworCisgIHZlcmIgInJ1bm5pbmcgJHRyYWNlcyAkY29uZmlndXJlX2FjIjsKKworICBteSAkdHJhY2VmaCA9IG5ldyBBdXRvbWFrZTo6WEZpbGUgKCIkdHJhY2VzICRjb25maWd1cmVfYWMgfCIpOworCisgIG15ICV0cmFjZWQgPSAoKTsKKworICB3aGlsZSAoJF8gPSAkdHJhY2VmaC0+Z2V0bGluZSkKKyAgICB7CisgICAgICBjaG9tcDsKKyAgICAgIG15ICgkZmlsZSwgJG1hY3JvLCAkYXJnMSkgPSBzcGxpdCAoLzo6Lyk7CisKKyAgICAgICR0cmFjZWR7JG1hY3JvfSA9IDEgaWYgZXhpc3RzICRtYWNyb19zZWVueyRtYWNyb307CisKKyAgICAgICRtYXBfdHJhY2VkX2RlZnN7JGFyZzF9ID0gJGZpbGUKKwlpZiAoJG1hY3JvIGVxICdBQ19ERUZVTicKKwkgICAgfHwgJG1hY3JvIGVxICdBQ19ERUZVTl9PTkNFJworCSAgICB8fCAkbWFjcm8gZXEgJ0FVX0RFRlVOJyk7CisKKyAgICAgICRhY192ZXJzaW9uID0gJGFyZzEgaWYgJG1hY3JvIGVxICdfQU1fQVVUT0NPTkZfVkVSU0lPTic7CisgICAgfQorCisgICR0cmFjZWZoLT5jbG9zZTsKKworICByZXR1cm4gJXRyYWNlZDsKK30KKworc3ViIHNjYW5fY29uZmlndXJlICgpCit7CisgICMgTWFrZSBzdXJlIHdlIGluY2x1ZGUgYWNpbmNsdWRlLm00IGlmIGl0IGV4aXN0cy4KKyAgaWYgKC1mICdhY2luY2x1ZGUubTQnKQorICAgIHsKKyAgICAgIGFkZF9maWxlICgnYWNpbmNsdWRlLm00Jyk7CisgICAgfQorICBzY2FuX2NvbmZpZ3VyZV9kZXAgKCRjb25maWd1cmVfYWMpOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgV3JpdGUgb3V0cHV0LgorIyBSZXR1cm4gMCBpZmYgc29tZSBmaWxlcyB3ZXJlIGluc3RhbGxlZCBsb2NhbGx5Lgorc3ViIHdyaXRlX2FjbG9jYWwgKCRAKQoreworICBteSAoJG91dHB1dF9maWxlLCBAbWFjcm9zKSA9IEBfOworICBteSAkb3V0cHV0ID0gJyc7CisKKyAgbXkgJWZpbGVzID0gKCk7CisgICMgR2V0IHRoZSBsaXN0IG9mIGZpbGVzIGNvbnRhaW5pbmcgZGVmaW5pdGlvbnMgZm9yIHRoZSBtYWNyb3MgdXNlZC4KKyAgIyAoRmlsdGVyIG91dCB1bnVzZWQgbWFjcm8gZGVmaW5pdGlvbnMgd2l0aCAkbWFwX3RyYWNlZF9kZWZzLiAgVGhpcworICAjIGNhbiBoYXBwZW4gd2hlbiBhbiBBdXRvY29uZiBtYWNybyBpcyBjb25kaXRpb25hbGx5IGRlZmluZWQ6CisgICMgYWNsb2NhbCBzZWVzIHRoZSBwb3RlbnRpYWwgZGVmaW5pdGlvbiwgYnV0IHRoaXMgZGVmaW5pdGlvbiBpcworICAjIGFjdHVhbGx5IG5ldmVyIHByb2Nlc3NlZCBhbmQgdGhlIEF1dG9jb25mIGltcGxlbWVudGF0aW9uIGlzIHVzZWQKKyAgIyBpbnN0ZWFkLikKKyAgZm9yIG15ICRtIChAbWFjcm9zKQorICAgIHsKKyAgICAgICRmaWxlc3skbWFweyRtfX0gPSAxCisJaWYgKGV4aXN0cyAkbWFwX3RyYWNlZF9kZWZzeyRtfQorCSAgICAmJiAkbWFweyRtfSBlcSAkbWFwX3RyYWNlZF9kZWZzeyRtfSk7CisgICAgfQorICAjIERvIG5vdCBleHBsaWNpdGx5IGluY2x1ZGUgYSBmaWxlIHRoYXQgaXMgYWxyZWFkeSBpbmRpcmVjdGx5IGluY2x1ZGVkLgorICAlZmlsZXMgPSBzdHJpcF9yZWR1bmRhbnRfaW5jbHVkZXMgJWZpbGVzOworCisgIG15ICRpbnN0YWxsZWQgPSAwOworCisgIGZvciBteSAkZmlsZSAoZ3JlcCB7IGV4aXN0cyAkZmlsZXN7JF99IH0gQGZpbGVfb3JkZXIpCisgICAgeworICAgICAgIyBDaGVjayB0aGUgdGltZSBzdGFtcCBvZiB0aGlzIGZpbGUsIGFuZCBvZiBhbGwgZmlsZXMgaXQgaW5jbHVkZXMuCisgICAgICBmb3IgbXkgJGlmaWxlICgkZmlsZSwgQHskZmlsZV9pbmNsdWRlc3skZmlsZX19KQorCXsKKwkgIG15ICRtdGltZSA9IG10aW1lICRpZmlsZTsKKwkgICRncmVhdGVzdF9tdGltZSA9ICRtdGltZSBpZiAkZ3JlYXRlc3RfbXRpbWUgPCAkbXRpbWU7CisJfQorCisgICAgICAjIElmIHRoZSBmaWxlIHRvIGFkZCBsb29rcyBsaWtlIG91dHNpZGUgdGhlIHByb2plY3QsIGNvcHkgaXQKKyAgICAgICMgdG8gdGhlIG91dHB1dC4gIFRoZSByZWdleCBjYXRjaGVzIGZpbGVuYW1lcyBzdGFydGluZyB3aXRoCisgICAgICAjIHRoaW5ncyBsaWtlIGAvJywgYFwnLCBvciBgYzpcJy4KKyAgICAgIGlmICgkZmlsZV90eXBleyRmaWxlfSAhPSBGVF9VU0VSCisJICB8fCAkZmlsZSA9fiBtLF4oPzpcdzopP1tcXC9dLCkKKwl7CisJICBpZiAoISRpbnN0YWxsIHx8ICRmaWxlX3R5cGV7JGZpbGV9ICE9IEZUX1NZU1RFTSkKKwkgICAgeworCSAgICAgICMgQ29weSB0aGUgZmlsZSBpbnRvIGFjbG9jYWwubTQuCisJICAgICAgJG91dHB1dCAuPSAkZmlsZV9jb250ZW50c3skZmlsZX0gLiAiXG4iOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAjIEluc3RhbGwgdGhlIGZpbGUgKGFuZCBhbnkgZmlsZSBpdCBpbmNsdWRlcykuCisJICAgICAgbXkgJGRlc3Q7CisJICAgICAgZm9yIG15ICRpZmlsZSAoQHskZmlsZV9pbmNsdWRlc3skZmlsZX19LCAkZmlsZSkKKwkJeworCQkgICRkZXN0ID0gIiR1c2VyX2luY2x1ZGVzWzBdLyIgLiBiYXNlbmFtZSAkaWZpbGU7CisJCSAgdmVyYiAiaW5zdGFsbGluZyAkaWZpbGUgdG8gJGRlc3QiOworCQkgIGluc3RhbGxfZmlsZSAoJGlmaWxlLCAkZGVzdCk7CisJCX0KKwkgICAgICAkaW5zdGFsbGVkID0gMTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICAjIE90aGVyd2lzZSwgc2ltcGx5IGluY2x1ZGUgdGhlIGZpbGUuCisJICAkb3V0cHV0IC49ICJtNF9pbmNsdWRlKFskZmlsZV0pXG4iOworCX0KKyAgICB9CisKKyAgaWYgKCRpbnN0YWxsZWQpCisgICAgeworICAgICAgdmVyYiAicnVubmluZyBhY2xvY2FsIGFuZXcsIGJlY2F1c2Ugc29tZSBmaWxlcyB3ZXJlIGluc3RhbGxlZCBsb2NhbGx5IjsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAjIE5vdGhpbmcgdG8gb3V0cHV0PyEKKyAgIyBGSVhNRTogU2hvdWxkbid0IHdlIGRpYWdub3NlIHRoaXM/CisgIHJldHVybiAxIGlmICEgbGVuZ3RoICgkb3V0cHV0KTsKKworICBpZiAoJGFjX3ZlcnNpb24pCisgICAgeworICAgICAgIyBEbyBub3QgdXNlICIkb3V0cHV0X2ZpbGUiIGhlcmUgZm9yIHRoZSBzYW1lIHJlYXNvbiB3ZSBkbyBub3QKKyAgICAgICMgdXNlIGl0IGluIHRoZSBoZWFkZXIgYmVsb3cuICBhdXRvbTR0ZSB3aWxsIG91dHB1dCB0aGUgbmFtZSBvZgorICAgICAgIyB0aGUgZmlsZSBpbiB0aGUgZGlhZ25vc3RpYyBhbnl3YXkuCisgICAgICAkb3V0cHV0ID0gIm00X2lmbmRlZihbQUNfQVVUT0NPTkZfVkVSU0lPTl0sCisgIFttNF9jb3B5KFttNF9QQUNLQUdFX1ZFUlNJT05dLCBbQUNfQVVUT0NPTkZfVkVSU0lPTl0pXSlkbmwKK200X2lmKG00X2RlZm4oW0FDX0FVVE9DT05GX1ZFUlNJT05dKSwgWyRhY192ZXJzaW9uXSwsCitbbTRfd2FybmluZyhbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mICRhY192ZXJzaW9uLgorWW91IGhhdmUgYW5vdGhlciB2ZXJzaW9uIG9mIGF1dG9jb25mLiAgSXQgbWF5IHdvcmssIGJ1dCBpcyBub3QgZ3VhcmFudGVlZCB0by4KK0lmIHlvdSBoYXZlIHByb2JsZW1zLCB5b3UgbWF5IG5lZWQgdG8gcmVnZW5lcmF0ZSB0aGUgYnVpbGQgc3lzdGVtIGVudGlyZWx5LgorVG8gZG8gc28sIHVzZSB0aGUgcHJvY2VkdXJlIGRvY3VtZW50ZWQgYnkgdGhlIHBhY2thZ2UsIHR5cGljYWxseSBgYXV0b3JlY29uZicuXSldKQorCiskb3V0cHV0IjsKKyAgICB9CisKKyAgIyBXZSB1c2VkIHRvIHByaW50IGAjICRvdXRwdXRfZmlsZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBldGMuJyAgQnV0CisgICMgdGhpcyBjcmVhdGVzIHNwdXJpb3VzIGRpZmZlcmVuY2VzIHdoZW4gdXNpbmcgYXV0b3JlY29uZi4gIEF1dG9yZWNvbmYKKyAgIyBjcmVhdGVzIGFjbG9jYWwubTR0IGFuZCB0aGVuIHJlbmFtZSBpdCB0byBhY2xvY2FsLm00LCBidXQgdGhlCisgICMgcmVidWlsZCBydWxlcyBnZW5lcmF0ZWQgYnkgQXV0b21ha2UgY3JlYXRlIGFjbG9jYWwubTQgZGlyZWN0bHkgLS0KKyAgIyB0aGlzIHdvdWxkIGdpdmVzIHR3byB3YXlzIHRvIGdldCB0aGUgc2FtZSBmaWxlLCB3aXRoIGEgZGlmZmVyZW50CisgICMgbmFtZSBpbiB0aGUgaGVhZGVyLgorICAkb3V0cHV0ID0gIiMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgYWNsb2NhbCAkVkVSU0lPTiAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LAorIyAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworJG91dHB1dCI7CisKKyAgIyBXZSB0cnkgbm90IHRvIHVwZGF0ZSAkb3V0cHV0X2ZpbGUgdW5sZXNzIG5lY2Vzc2FyeSwgYmVjYXVzZQorICAjIGRvaW5nIHNvIGludmFsaWRhdGUgQXV0b200dGUncyBjYWNoZSBhbmQgdGhlcmVmb3JlIHNsb3dzIGRvd24KKyAgIyB0b29scyBjYWxsZWQgYWZ0ZXIgYWNsb2NhbC4KKyAgIworICAjIFdlIG5lZWQgdG8gb3ZlcndyaXRlICRvdXRwdXRfZmlsZSBpbiB0aGUgZm9sbG93aW5nIHNpdHVhdGlvbnMuCisgICMgICAqIFRoZSAtLWZvcmNlIG9wdGlvbiBpcyBpbiB1c2UuCisgICMgICAqIE9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGlzIHlvdW5nZXIuCisgICMgICAgIChOb3QgdXBkYXRpbmcgJG91dHB1dF9maWxlIGluIHRoaXMgc2l0dWF0aW9uIHdvdWxkIGNhdXNlCisgICMgICAgIG1ha2UgdG8gY2FsbCBhY2xvY2FsIGluIGxvb3AuKQorICAjICAgKiBUaGUgY29udGVudHMgb2YgdGhlIGN1cnJlbnQgZmlsZSBhcmUgZGlmZmVyZW50IGZyb20gd2hhdAorICAjICAgICB3ZSBoYXZlIGNvbXB1dGVkLgorICBpZiAoISRmb3JjZV9vdXRwdXQKKyAgICAgICYmICRncmVhdGVzdF9tdGltZSA8IG10aW1lICgkb3V0cHV0X2ZpbGUpCisgICAgICAmJiAkb3V0cHV0IGVxIGNvbnRlbnRzICgkb3V0cHV0X2ZpbGUpKQorICAgIHsKKyAgICAgIHZlcmIgIiRvdXRwdXRfZmlsZSB1bmNoYW5nZWQiOworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgIHZlcmIgIndyaXRpbmcgJG91dHB1dF9maWxlIjsKKworICBpZiAoISRkcnlfcnVuKQorICAgIHsKKyAgICAgIGlmICgtZSAkb3V0cHV0X2ZpbGUgJiYgIXVubGluayAkb3V0cHV0X2ZpbGUpCisgICAgICAgIHsKKwkgIGZhdGFsICJjb3VsZCBub3QgcmVtb3ZlIGAkb3V0cHV0X2ZpbGUnOiAkISI7CisJfQorICAgICAgbXkgJG91dCA9IG5ldyBBdXRvbWFrZTo6WEZpbGUgIj4gJG91dHB1dF9maWxlIjsKKyAgICAgIHByaW50ICRvdXQgJG91dHB1dDsKKyAgICB9CisgIHJldHVybiAxOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgUHJpbnQgdXNhZ2UgYW5kIGV4aXQuCitzdWIgdXNhZ2UgKCQpCit7CisgIG15ICgkc3RhdHVzKSA9IEBfOworCisgIHByaW50ICJVc2FnZTogYWNsb2NhbCBbT1BUSU9OU10gLi4uCisKK0dlbmVyYXRlIGBhY2xvY2FsLm00JyBieSBzY2FubmluZyBgY29uZmlndXJlLmFjJyBvciBgY29uZmlndXJlLmluJworCitPcHRpb25zOgorICAgICAgLS1hY2Rpcj1ESVIgICAgICAgICAgIGRpcmVjdG9yeSBob2xkaW5nIGNvbmZpZyBmaWxlcyAoZm9yIGRlYnVnZ2luZykKKyAgICAgIC0tZGlmZls9Q09NTUFORF0gICAgICBydW4gQ09NTUFORCBbZGlmZiAtdV0gb24gTTQgZmlsZXMgdGhhdCB3b3VsZCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCAoaW1wbGllcyAtLWluc3RhbGwgYW5kIC0tZHJ5LXJ1bikKKyAgICAgIC0tZHJ5LXJ1biAgICAgICAgICAgICBwcmV0ZW5kIHRvLCBidXQgZG8gbm90IGFjdHVhbGx5IHVwZGF0ZSBhbnkgZmlsZQorICAgICAgLS1mb3JjZSAgICAgICAgICAgICAgIGFsd2F5cyB1cGRhdGUgb3V0cHV0IGZpbGUKKyAgICAgIC0taGVscCAgICAgICAgICAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtSSBESVIgICAgICAgICAgICAgICAgICAgIGFkZCBkaXJlY3RvcnkgdG8gc2VhcmNoIGxpc3QgZm9yIC5tNCBmaWxlcworICAgICAgLS1pbnN0YWxsICAgICAgICAgICAgIGNvcHkgdGhpcmQtcGFydHkgZmlsZXMgdG8gdGhlIGZpcnN0IC1JIGRpcmVjdG9yeQorICAgICAgLS1vdXRwdXQ9RklMRSAgICAgICAgIHB1dCBvdXRwdXQgaW4gRklMRSAoZGVmYXVsdCBhY2xvY2FsLm00KQorICAgICAgLS1wcmludC1hYy1kaXIgICAgICAgIHByaW50IG5hbWUgb2YgZGlyZWN0b3J5IGhvbGRpbmcgbTQgZmlsZXMsIHRoZW4gZXhpdAorICAgICAgLS12ZXJib3NlICAgICAgICAgICAgIGRvbid0IGJlIHNpbGVudAorICAgICAgLS12ZXJzaW9uICAgICAgICAgICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKyAgLVcsIC0td2FybmluZ3M9Q0FURUdPUlkgICByZXBvcnQgdGhlIHdhcm5pbmdzIGZhbGxpbmcgaW4gQ0FURUdPUlkKKworV2FybmluZyBjYXRlZ29yaWVzIGluY2x1ZGU6CisgIGBzeW50YXgnICAgICAgICBkdWJpb3VzIHN5bnRhY3RpYyBjb25zdHJ1Y3RzIChkZWZhdWx0KQorICBgdW5zdXBwb3J0ZWQnICAgdW5rbm93biBtYWNyb3MgKGRlZmF1bHQpCisgIGBhbGwnICAgICAgICAgICBhbGwgdGhlIHdhcm5pbmdzIChkZWZhdWx0KQorICBgbm8tQ0FURUdPUlknICAgdHVybiBvZmYgd2FybmluZ3MgaW4gQ0FURUdPUlkKKyAgYG5vbmUnICAgICAgICAgIHR1cm4gb2ZmIGFsbCB0aGUgd2FybmluZ3MKKyAgYGVycm9yJyAgICAgICAgIHRyZWF0IHdhcm5pbmdzIGFzIGVycm9ycworCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9tYWtlXEBnbnUub3JnPi5cbiI7CisKKyAgZXhpdCAkc3RhdHVzOworfQorCisjIFByaW50IHZlcnNpb24gYW5kIGV4aXQuCitzdWIgdmVyc2lvbigpCit7CisgIHByaW50IDw8RU9GOworYWNsb2NhbCAoR05VICRQQUNLQUdFKSAkVkVSU0lPTgorQ29weXJpZ2h0IChDKSAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorTGljZW5zZSBHUEx2Mis6IEdOVSBHUEwgdmVyc2lvbiAyIG9yIGxhdGVyIDxodHRwOi8vZ251Lm9yZy9saWNlbnNlcy9ncGwtMi4wLmh0bWw+CitUaGlzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBhcmUgZnJlZSB0byBjaGFuZ2UgYW5kIHJlZGlzdHJpYnV0ZSBpdC4KK1RoZXJlIGlzIE5PIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuCisKK1dyaXR0ZW4gYnkgVG9tIFRyb21leSA8dHJvbWV5XEByZWRoYXQuY29tPgorICAgICAgIGFuZCBBbGV4YW5kcmUgRHVyZXQtTHV0eiA8YWRsXEBnbnUub3JnPi4KK0VPRgorICBleGl0IDA7Cit9CisKKyMgUGFyc2UgY29tbWFuZCBsaW5lLgorc3ViIHBhcnNlX2FyZ3VtZW50cyAoKQoreworICBteSAkcHJpbnRfYW5kX2V4aXQgPSAwOworICBteSAkZGlmZl9jb21tYW5kOworCisgIG15ICVjbGlfb3B0aW9ucyA9CisgICAgKAorICAgICAnYWNkaXI9cycJCT0+IHN1YiAjIFNldHRpbmcgLS1hY2RpciBvdmVycmlkZXMgYm90aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAjIGF1dG9tYWtlICh2ZXJzaW9uZWQpIGRpcmVjdG9yeSBhbmQgdGhlCisJCQkgICAgICAgIyBwdWJsaWMgKHVudmVyc2lvbmVkKSBzeXN0ZW0gZGlyZWN0b3J5LgorCQkJICAgICAgIEBhdXRvbWFrZV9pbmNsdWRlcyA9ICgpOworCQkJICAgICAgIEBzeXN0ZW1faW5jbHVkZXMgPSAoJF9bMV0pCisJCQkgICAgIH0sCisgICAgICdkaWZmOnMnCQk9PiBcJGRpZmZfY29tbWFuZCwKKyAgICAgJ2RyeS1ydW4nCQk9PiBcJGRyeV9ydW4sCisgICAgICdmb3JjZScJCT0+IFwkZm9yY2Vfb3V0cHV0LAorICAgICAnST1zJwkJPT4gXEB1c2VyX2luY2x1ZGVzLAorICAgICAnaW5zdGFsbCcgICAgICAgICAgPT4gXCRpbnN0YWxsLAorICAgICAnb3V0cHV0PXMnCQk9PiBcJG91dHB1dF9maWxlLAorICAgICAncHJpbnQtYWMtZGlyJyAgICAgPT4gXCRwcmludF9hbmRfZXhpdCwKKyAgICAgJ3ZlcmJvc2UnCQk9PiBzdWIgeyBzZXR1cF9jaGFubmVsICd2ZXJiJywgc2lsZW50ID0+IDA7IH0sCisgICAgICdXfHdhcm5pbmdzPXMnICAgICA9PiBcJnBhcnNlX3dhcm5pbmdzLAorICAgICApOworICB1c2UgR2V0b3B0OjpMb25nOworICBHZXRvcHQ6Okxvbmc6OmNvbmZpZyAoImJ1bmRsaW5nIiwgInBhc3NfdGhyb3VnaCIpOworCisgICMgU2VlIGlmIC0tdmVyc2lvbiBvciAtLWhlbHAgaXMgdXNlZC4gIFdlIHdhbnQgdG8gcHJvY2VzcyB0aGVzZSBiZWZvcmUKKyAgIyBhbnl0aGluZyBlbHNlIGJlY2F1c2UgdGhlIEdOVSBDb2RpbmcgU3RhbmRhcmRzIHJlcXVpcmUgdXMgdG8KKyAgIyBgZXhpdCAwJyBhZnRlciBwcm9jZXNzaW5nIHRoZXNlIG9wdGlvbnMsIGFuZCB3ZSBjYW4ndCBndWFyYW50ZWUgdGhpcworICAjIGlmIHdlIHRyZWF0IG90aGVyIG9wdGlvbnMgZmlyc3QuICAoSGFuZGxpbmcgb3RoZXIgb3B0aW9ucyBmaXJzdAorICAjIGNvdWxkIHByb2R1Y2UgZXJyb3IgZGlhZ25vc3RpY3MsIGFuZCBpbiB0aGlzIGNvbmRpdGlvbiBpdCBpcworICAjIGNvbmZ1c2luZyBpZiBhY2xvY2FsIGRvZXMgYGV4aXQgMCcuKQorICBteSAlY2xpX29wdGlvbnNfMXN0X3Bhc3MgPQorICAgICgKKyAgICAgJ3ZlcnNpb24nID0+IFwmdmVyc2lvbiwKKyAgICAgJ2hlbHAnICAgID0+IHN1YiB7IHVzYWdlKDApOyB9LAorICAgICAjIFJlY29nbml6ZSBhbGwgb3RoZXIgb3B0aW9ucyAoYW5kIHRoZWlyIGFyZ3VtZW50cykgYnV0IGRvIG5vdGhpbmcuCisgICAgIG1hcCB7ICRfID0+IHN1YiB7fSB9IChrZXlzICVjbGlfb3B0aW9ucykKKyAgICAgKTsKKyAgbXkgQEFSR1ZfYmFja3VwID0gQEFSR1Y7CisgIEdldG9wdDo6TG9uZzo6R2V0T3B0aW9ucyAlY2xpX29wdGlvbnNfMXN0X3Bhc3MKKyAgICBvciBleGl0IDE7CisgIEBBUkdWID0gQEFSR1ZfYmFja3VwOworCisgICMgTm93ICpyZWFsbHkqIHByb2Nlc3MgdGhlIG9wdGlvbnMuICBUaGlzIHRpbWUgd2Uga25vdyB0aGF0IC0taGVscAorICAjIGFuZCAtLXZlcnNpb24gYXJlIG5vdCBwcmVzZW50LCBidXQgd2Ugc3BlY2lmeSB0aGVtIG5vbmV0aGVsZXNzIHNvCisgICMgdGhhdCBhbWJpZ3VvdXMgYWJicmV2aWF0aW9uIGFyZSBkaWFnbm9zZWQuCisgIEdldG9wdDo6TG9uZzo6R2V0T3B0aW9ucyAlY2xpX29wdGlvbnMsICd2ZXJzaW9uJyA9PiBzdWIge30sICdoZWxwJyA9PiBzdWIge30KKyAgICBvciBleGl0IDE7CisKKyAgaWYgKEBBUkdWKQorICAgIHsKKyAgICAgIG15ICVhcmdvcHRzOworICAgICAgZm9yIG15ICRrIChrZXlzICVjbGlfb3B0aW9ucykKKwl7CisJICBpZiAoJGsgPX4gLyguKik9cyQvKQorCSAgICB7CisJICAgICAgbWFwIHsgJGFyZ29wdHN7KGxlbmd0aCAoJF8pID09IDEpCisJCQkgICAgID8gIi0kXyIgOiAiLS0kXyIgfSA9IDE7IH0gKHNwbGl0ICgvXHwvLCAkMSkpOworCSAgICB9CisJfQorICAgICAgaWYgKGV4aXN0cyAkYXJnb3B0c3skQVJHVlswXX0pCisJeworCSAgZmF0YWwgKCJvcHRpb24gYCRBUkdWWzBdJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorCQkgLiAiVHJ5IGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBmYXRhbCAoInVucmVjb2duaXplZCBvcHRpb24gYCRBUkdWWzBdJ1xuIgorCQkgLiAiVHJ5IGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIpOworCX0KKyAgICB9CisKKyAgaWYgKCRwcmludF9hbmRfZXhpdCkKKyAgICB7CisgICAgICBwcmludCAiQHN5c3RlbV9pbmNsdWRlc1xuIjsKKyAgICAgIGV4aXQgMDsKKyAgICB9CisKKyAgaWYgKGRlZmluZWQgJGRpZmZfY29tbWFuZCkKKyAgICB7CisgICAgICAkZGlmZl9jb21tYW5kID0gJ2RpZmYgLXUnIGlmICRkaWZmX2NvbW1hbmQgZXEgJyc7CisgICAgICBAZGlmZl9jb21tYW5kID0gc3BsaXQgKCcgJywgJGRpZmZfY29tbWFuZCk7CisgICAgICAkaW5zdGFsbCA9IDE7CisgICAgICAkZHJ5X3J1biA9IDE7CisgICAgfQorCisgIGlmICgkaW5zdGFsbCAmJiAhQHVzZXJfaW5jbHVkZXMpCisgICAgeworICAgICAgZmF0YWwgKCItLWluc3RhbGwgc2hvdWxkIGNvcHkgbWFjcm9zIGluIHRoZSBkaXJlY3RvcnkgaW5kaWNhdGVkIGJ5IHRoZSIKKwkgICAgIC4gIlxuZmlyc3QgLUkgb3B0aW9uLCBidXQgbm8gLUkgd2FzIHN1cHBsaWVkLiIpOworICAgIH0KKworICBpZiAoISAtZCAkc3lzdGVtX2luY2x1ZGVzWzBdKQorICAgIHsKKyAgICAgICMgQnkgZGVmYXVsdCAkKGRhdGFkaXIpL2FjbG9jYWwgZG9lc24ndCBleGlzdC4gIFdlIGRvbid0IHdhbnQgdG8KKyAgICAgICMgZ2V0IGFuIGVycm9yIGluIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSBzZWFyY2hpbmcgdGhlIGRlZmF1bHQKKyAgICAgICMgZGlyZWN0b3J5IGFuZCBpdCBoYXNuJ3QgYmVlbiBjcmVhdGVkLiAgKFdlIGtub3cKKyAgICAgICMgQHN5c3RlbV9pbmNsdWRlcyBoYXMgaXRzIGRlZmF1bHQgdmFsdWUgaWYgQGF1dG9tYWtlX2luY2x1ZGVzCisgICAgICAjIGlzIG5vdCBlbXB0eSwgYmVjYXVzZSAtLWFjZGlyIGlzIHRoZSBvbmx5IHdheSB0byBjaGFuZ2UgdGhpcy4pCisgICAgICBAc3lzdGVtX2luY2x1ZGVzID0gKCkgaWYgQGF1dG9tYWtlX2luY2x1ZGVzOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgICMgRmluYWxseSwgYWRkcyBhbnkgZGlyZWN0b3J5IGxpc3RlZCBpbiB0aGUgYGRpcmxpc3QnIGZpbGUuCisgICAgICBpZiAob3BlbiAoRElSTElTVCwgIiRzeXN0ZW1faW5jbHVkZXNbMF0vZGlybGlzdCIpKQorCXsKKwkgIHdoaWxlICg8RElSTElTVD4pCisJICAgIHsKKwkgICAgICAjIElnbm9yZSAnIycgbGluZXMuCisJICAgICAgbmV4dCBpZiAvXiMvOworCSAgICAgICMgc3RyaXAgb2ZmIG5ld2xpbmVzIGFuZCBlbmQtb2YtbGluZSBjb21tZW50cworCSAgICAgIHMvXHMqXCMuKiQvLzsKKwkgICAgICBjaG9tcDsKKwkgICAgICBmb3JlYWNoIG15ICRkaXIgKGdsb2IpCisJCXsKKwkJICBwdXNoIChAc3lzdGVtX2luY2x1ZGVzLCAkZGlyKSBpZiAtZCAkZGlyOworCQl9CisJICAgIH0KKwkgIGNsb3NlIChESVJMSVNUKTsKKwl9CisgICAgfQorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3BhcnNlX1dBUk5JTkdTOwkJICAgICMgUGFyc2UgdGhlIFdBUk5JTkdTIGVudmlyb25tZW50IHZhcmlhYmxlLgorcGFyc2VfYXJndW1lbnRzOworJGNvbmZpZ3VyZV9hYyA9IHJlcXVpcmVfY29uZmlndXJlX2FjOworCisjIFdlIG1heSBoYXZlIHRvIHJlcnVuIGFjbG9jYWwgaWYgc29tZSBmaWxlIGhhdmUgYmVlbiBpbnN0YWxsZWQsIGJ1dAorIyBpdCBzaG91bGQgbm90IGhhcHBlbiBtb3JlIHRoYW4gb25jZS4gIFRoZSByZWFzb24gd2UgbXVzdCBydW4gYWdhaW4KKyMgaXMgdGhhdCBvbmNlIHRoZSBmaWxlIGhhcyBiZWVuIG1vdmVkIGZyb20gL3Vzci9zaGFyZS9hY2xvY2FsLyB0byB0aGUKKyMgbG9jYWwgbTQvIGRpcmVjdG9yeSBpdCBhcHBlYXJzIGF0IGEgbmV3IHBsYWNlIGluIHRoZSBzZWFyY2ggcGF0aCwKKyMgaGVuY2UgaXQgc2hvdWxkIGJlIG91dHB1dCBhdCBhIGRpZmZlcmVudCBwb3NpdGlvbiBpbiBhY2xvY2FsLm00LiAgSWYKKyMgd2UgZGlkIG5vdCByZXJ1biBhY2xvY2FsLCB0aGUgbmV4dCBydW4gb2YgYWNsb2NhbCB3b3VsZCBwcm9kdWNlIGEKKyMgZGlmZmVyZW50IGFjbG9jYWwubTQuCitteSAkbG9vcCA9IDA7Cit3aGlsZSAoMSkKKyAgeworICAgICsrJGxvb3A7CisgICAgcHJvZ19lcnJvciAiVG9vIG1hbnkgbG9vcHMuIiBpZiAkbG9vcCA+IDI7CisKKyAgICByZXNldF9tYXBzOworICAgIHNjYW5fbTRfZmlsZXM7CisgICAgc2Nhbl9jb25maWd1cmU7CisgICAgbGFzdCBpZiAkZXhpdF9jb2RlOworICAgIG15ICVtYWNyb190cmFjZWQgPSB0cmFjZV91c2VkX21hY3JvczsKKyAgICBsYXN0IGlmIHdyaXRlX2FjbG9jYWwgKCRvdXRwdXRfZmlsZSwga2V5cyAlbWFjcm9fdHJhY2VkKTsKKyAgICBsYXN0IGlmICRkcnlfcnVuOworICB9CitjaGVja19hY2luY2x1ZGU7CisKK2V4aXQgJGV4aXRfY29kZTsKKworIyMjIFNldHVwICJHTlUiIHN0eWxlIGZvciBwZXJsLW1vZGUgYW5kIGNwZXJsLW1vZGUuCisjIyBMb2NhbCBWYXJpYWJsZXM6CisjIyBwZXJsLWluZGVudC1sZXZlbDogMgorIyMgcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1pbWFnaW5hcnktb2Zmc2V0OiAwCisjIyBwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWluZGVudC1sZXZlbDogMgorIyMgY3BlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1leHRyYS1uZXdsaW5lLWJlZm9yZS1icmFjZTogdAorIyMgY3BlcmwtbWVyZ2UtdHJhaWxpbmctZWxzZTogbmlsCisjIyBjcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgRW5kOgpkaWZmIC0tZ2l0IGEvYmluL2FybS1saW51eC1hZGRyMmxpbmUgYi9iaW4vYXJtLWxpbnV4LWFkZHIybGluZQpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5iZDdhNTBhCi0tLSAvZGV2L251bGwKKysrIGIvYmluL2FybS1saW51eC1hZGRyMmxpbmUKQEAgLTAsMCArMSBAQAorYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1hZGRyMmxpbmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaW4vYXJtLWxpbnV4LWFyIGIvYmluL2FybS1saW51eC1hcgpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi4xMmYwNTc2Ci0tLSAvZGV2L251bGwKKysrIGIvYmluL2FybS1saW51eC1hcgpAQCAtMCwwICsxIEBACithcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLWFyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYmluL2FybS1saW51eC1hcyBiL2Jpbi9hcm0tbGludXgtYXMKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uMzI4M2YxYwotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hcm0tbGludXgtYXMKQEAgLTAsMCArMSBAQAorYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1hcwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Jpbi9hcm0tbGludXgtYysrIGIvYmluL2FybS1saW51eC1jKysKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uODE3MjAwNQotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hcm0tbGludXgtYysrCkBAIC0wLDAgKzEgQEAKK2FybS11bmtub3duLWxpbnV4LWdudWVhYmktYysrClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYmluL2FybS1saW51eC1jKytmaWx0IGIvYmluL2FybS1saW51eC1jKytmaWx0Cm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLmQyMzY0Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYXJtLWxpbnV4LWMrK2ZpbHQKQEAgLTAsMCArMSBAQAorYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1jKytmaWx0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYmluL2FybS1saW51eC1jYyBiL2Jpbi9hcm0tbGludXgtY2MKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uNTViNmQ3YgotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hcm0tbGludXgtY2MKQEAgLTAsMCArMSBAQAorYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1jYwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Jpbi9hcm0tbGludXgtY3BwIGIvYmluL2FybS1saW51eC1jcHAKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uOWI0M2MwNAotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hcm0tbGludXgtY3BwCkBAIC0wLDAgKzEgQEAKK2FybS11bmtub3duLWxpbnV4LWdudWVhYmktY3BwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYmluL2FybS1saW51eC1jdC1uZy5jb25maWcgYi9iaW4vYXJtLWxpbnV4LWN0LW5nLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi44MTI3MzA5Ci0tLSAvZGV2L251bGwKKysrIGIvYmluL2FybS1saW51eC1jdC1uZy5jb25maWcKQEAgLTAsMCArMSBAQAorYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1jdC1uZy5jb25maWcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaW4vYXJtLWxpbnV4LWcrKyBiL2Jpbi9hcm0tbGludXgtZysrCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjZlYzM5NDgKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYXJtLWxpbnV4LWcrKwpAQCAtMCwwICsxIEBACithcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLWcrKwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Jpbi9hcm0tbGludXgtZ2NjIGIvYmluL2FybS1saW51eC1nY2MKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uYjE0ZDRkNgotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hcm0tbGludXgtZ2NjCkBAIC0wLDAgKzEgQEAKK2FybS11bmtub3duLWxpbnV4LWdudWVhYmktZ2NjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYmluL2FybS1saW51eC1nY2MtNC41LjMgYi9iaW4vYXJtLWxpbnV4LWdjYy00LjUuMwpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi4wMjBhNWMxCi0tLSAvZGV2L251bGwKKysrIGIvYmluL2FybS1saW51eC1nY2MtNC41LjMKQEAgLTAsMCArMSBAQAorYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1nY2MtNC41LjMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaW4vYXJtLWxpbnV4LWdjY2J1ZyBiL2Jpbi9hcm0tbGludXgtZ2NjYnVnCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjYyZjU4MmIKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYXJtLWxpbnV4LWdjY2J1ZwpAQCAtMCwwICsxIEBACithcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLWdjY2J1ZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Jpbi9hcm0tbGludXgtZ2NvdiBiL2Jpbi9hcm0tbGludXgtZ2NvdgpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5mNDFkYWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYmluL2FybS1saW51eC1nY292CkBAIC0wLDAgKzEgQEAKK2FybS11bmtub3duLWxpbnV4LWdudWVhYmktZ2NvdgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Jpbi9hcm0tbGludXgtZ2RiIGIvYmluL2FybS1saW51eC1nZGIKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uODVmYWZlNwotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hcm0tbGludXgtZ2RiCkBAIC0wLDAgKzEgQEAKK2FybS11bmtub3duLWxpbnV4LWdudWVhYmktZ2RiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYmluL2FybS1saW51eC1ncHJvZiBiL2Jpbi9hcm0tbGludXgtZ3Byb2YKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uZDYwN2Y4ZgotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hcm0tbGludXgtZ3Byb2YKQEAgLTAsMCArMSBAQAorYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1ncHJvZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Jpbi9hcm0tbGludXgtbGQgYi9iaW4vYXJtLWxpbnV4LWxkCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLmUwOTg4MzQKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYXJtLWxpbnV4LWxkCkBAIC0wLDAgKzEgQEAKK2FybS11bmtub3duLWxpbnV4LWdudWVhYmktbGQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaW4vYXJtLWxpbnV4LWxkZCBiL2Jpbi9hcm0tbGludXgtbGRkCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLmQwMGEyZmYKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYXJtLWxpbnV4LWxkZApAQCAtMCwwICsxIEBACithcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLWxkZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Jpbi9hcm0tbGludXgtbm0gYi9iaW4vYXJtLWxpbnV4LW5tCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjJmYTIzZDQKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYXJtLWxpbnV4LW5tCkBAIC0wLDAgKzEgQEAKK2FybS11bmtub3duLWxpbnV4LWdudWVhYmktbm0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaW4vYXJtLWxpbnV4LW9iamNvcHkgYi9iaW4vYXJtLWxpbnV4LW9iamNvcHkKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uOTc4ZWE5NwotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hcm0tbGludXgtb2JqY29weQpAQCAtMCwwICsxIEBACithcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLW9iamNvcHkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaW4vYXJtLWxpbnV4LW9iamR1bXAgYi9iaW4vYXJtLWxpbnV4LW9iamR1bXAKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uMTdiNWY5MwotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hcm0tbGludXgtb2JqZHVtcApAQCAtMCwwICsxIEBACithcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLW9iamR1bXAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaW4vYXJtLWxpbnV4LXBvcHVsYXRlIGIvYmluL2FybS1saW51eC1wb3B1bGF0ZQpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5iOTkzMDgzCi0tLSAvZGV2L251bGwKKysrIGIvYmluL2FybS1saW51eC1wb3B1bGF0ZQpAQCAtMCwwICsxIEBACithcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLXBvcHVsYXRlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYmluL2FybS1saW51eC1yYW5saWIgYi9iaW4vYXJtLWxpbnV4LXJhbmxpYgpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5hNmY4ZTQxCi0tLSAvZGV2L251bGwKKysrIGIvYmluL2FybS1saW51eC1yYW5saWIKQEAgLTAsMCArMSBAQAorYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1yYW5saWIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaW4vYXJtLWxpbnV4LXJlYWRlbGYgYi9iaW4vYXJtLWxpbnV4LXJlYWRlbGYKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uYmI5NDYwMgotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hcm0tbGludXgtcmVhZGVsZgpAQCAtMCwwICsxIEBACithcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLXJlYWRlbGYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaW4vYXJtLWxpbnV4LXNpemUgYi9iaW4vYXJtLWxpbnV4LXNpemUKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uZjQxMjQ3YgotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hcm0tbGludXgtc2l6ZQpAQCAtMCwwICsxIEBACithcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLXNpemUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaW4vYXJtLWxpbnV4LXN0cmluZ3MgYi9iaW4vYXJtLWxpbnV4LXN0cmluZ3MKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uNDM4Yjc3OQotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hcm0tbGludXgtc3RyaW5ncwpAQCAtMCwwICsxIEBACithcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLXN0cmluZ3MKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaW4vYXJtLWxpbnV4LXN0cmlwIGIvYmluL2FybS1saW51eC1zdHJpcApuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5kM2U0OTY3Ci0tLSAvZGV2L251bGwKKysrIGIvYmluL2FybS1saW51eC1zdHJpcApAQCAtMCwwICsxIEBACithcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLXN0cmlwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktYWRkcjJsaW5lIGIvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktYWRkcjJsaW5lCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY1ZTNkYTYKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1hZGRyMmxpbmUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktYXIgYi9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1hcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZGU1MmJiCi0tLSAvZGV2L251bGwKKysrIGIvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktYXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktYXMgYi9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1hcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNTkwNTkyCi0tLSAvZGV2L251bGwKKysrIGIvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktYXMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktYysrIGIvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktYysrCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhjNTFlN2UKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1jKysKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktYysrZmlsdCBiL2Jpbi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLWMrK2ZpbHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmU0NmU0MwotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLWMrK2ZpbHQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktY2MgYi9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1jYwpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5iMTRkNGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktY2MKQEAgLTAsMCArMSBAQAorYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1nY2MKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1jcHAgYi9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1jcHAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWFmOGJjZgotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLWNwcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1jdC1uZy5jb25maWcgYi9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1jdC1uZy5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTM3NWU4ZgotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLWN0LW5nLmNvbmZpZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1nKysgYi9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1nKysKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGM1MWU3ZQotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLWcrKwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1nY2MgYi9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1nY2MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTBkMWRiMwotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLWdjYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1nY2MtNC41LjMgYi9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1nY2MtNC41LjMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTBkMWRiMwotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLWdjYy00LjUuMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1nY2NidWcgYi9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1nY2NidWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzIxYjQzYwotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLWdjY2J1ZwpAQCAtMCwwICsxLDU1OCBAQAorIyEvYmluL3NoCisjIFN1Ym1pdCBhIHByb2JsZW0gcmVwb3J0IHRvIGEgR05BVFMgc2l0ZS4KKyMgQ29weXJpZ2h0IChDKSAxOTkzLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb250cmlidXRlZCBieSBCcmVuZGFuIEtlaG9lIChicmVuZGFuQGN5Z251cy5jb20pLCBiYXNlZCBvbiBhCisjIHZlcnNpb24gd3JpdHRlbiBieSBIZWlueiBHLiBTZWlkbCAoaGdzQGN5Z251cy5jb20pLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgR05BVFMuCisjCisjIEdOVSBHTkFUUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIEdOVSBHTkFUUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggR05VIEdOQVRTOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBUaGUgdmVyc2lvbiBvZiB0aGlzIHNlbmQtcHIuCitWRVJTSU9OPTMuMTEzCisKKyMgVGhlIHN1Ym1pdHRlci1pZCBmb3IgeW91ciBzaXRlLgorU1VCTUlUVEVSPW5ldAorCisjIFRoZSBkZWZhdWx0IG1haWwgYWRkcmVzcyBmb3IgUFIgc3VibWlzc2lvbnMuIAorR05BVFNfQUREUj1nY2MtZ25hdHNAZ2NjLmdudS5vcmcKKworIyBUaGUgZGVmYXVsdCByZWxlYXNlIGZvciB0aGlzIGhvc3QuCisjIFdlIGhhdmUgdG8gZ3Vlc3MgYXQgd2hhdCBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIG1pZ2h0IGhhdmUgZG9uZS4KKyMgInNlZCAxcSIgYmVjYXVzZSBuZWl0aGVyICJoZWFkIC0xIiBub3IgImhlYWQgLW4gMSIgaXMgdW5pdmVyc2FsLCBhcmdoLgorCitERUZBVUxUX0dDQz0iYGVjaG8gJDAgfCBzZWQgLWUgJ3MvYnVnLy8nYCIKK0RFRkFVTFRfUkVMRUFTRT0iYCRERUZBVUxUX0dDQyAtLXZlcnNpb24gfCBzZWQgMXFgIgorCisjIFRoZSBkZWZhdWx0IG9yZ2FuaXphdGlvbi4KK0RFRkFVTFRfT1JHQU5JWkFUSU9OPQorCisjIFdoYXQgbWFpbGVyIHRvIHVzZS4gIFRoaXMgbXVzdCBjb21lIGFmdGVyIHRoZSBjb25maWcgZmlsZSwgc2luY2UgaXQgaXMKKyMgaG9zdC1kZXBlbmRlbnQuCisjIENvcGllZCBmcm9tIGN2c2J1ZworaWYgWyAtZiAvdXNyL3NiaW4vc2VuZG1haWwgXTsgdGhlbiAgCisgICAgTUFJTF9BR0VOVD0iL3Vzci9zYmluL3NlbmRtYWlsIC1vaSAtdCIKK2Vsc2UgIAorICAgIE1BSUxfQUdFTlQ9Ii91c3IvbGliL3NlbmRtYWlsIC1vaSAtdCIKK2ZpCitNQUlMRVI9YGVjaG8gJE1BSUxfQUdFTlQgfCBzZWQgLWUgJ3MsIC4qLCwnYAoraWYgWyAhIC1mICIkTUFJTEVSIiBdIDsgdGhlbgorICAgIGVjaG8gIiRDT01NQU5EOiBDYW5ub3QgZmlsZSBtYWlsIHByb2dyYW0gXCIkTUFJTEVSXCIuIgorICAgIGVjaG8gIiRDT01NQU5EOiBQbGVhc2UgZml4IHRoZSBNQUlMX0FHRU5UIGVudHJ5IGluIHRoZSAkQ09NTUFORCBmaWxlLiIKKyAgICBleGl0IDEKK2ZpCisKKworIyBIb3cgdG8gcmVhZCB0aGUgcGFzc3dkIGRhdGFiYXNlLgorUEFTU1dEPSJjYXQgL2V0Yy9wYXNzd2QiCisKK0VDSE9OPWJzZAorCitpZiBbICRFQ0hPTiA9IGJzZCBdIDsgdGhlbgorICBFQ0hPTjE9ImVjaG8gLW4iCisgIEVDSE9OMj0KK2VsaWYgWyAkRUNIT04gPSBzeXN2IF0gOyB0aGVuCisgIEVDSE9OMT1lY2hvCisgIEVDSE9OMj0nXGMnCitlbHNlCisgIEVDSE9OMT1lY2hvCisgIEVDSE9OMj0KK2ZpCisKKyMMCisKK2lmIFsgLXogIiRUTVBESVIiIF07IHRoZW4KKyAgVE1QRElSPS90bXAKK2Vsc2UKKyAgaWYgWyAiYGVjaG8gJFRNUERJUiB8IGdyZXAgJy8kJ2AiICE9ICIiIF07IHRoZW4KKyAgICBUTVBESVI9ImBlY2hvICRUTVBESVIgfCBzZWQgLWUgJ3MsLyQsLCdgIgorICBmaQorZmkKKworaWYgWyB5ZXMgPSB5ZXMgXTsgdGhlbgorCVRFTVAwPWBta3RlbXAgJFRNUERJUi9wb1hYWFhYWGAgfHwgZXhpdCAxCisJVEVNUD1gbWt0ZW1wICRUTVBESVIvcFhYWFhYWGAgfHwgZXhpdCAxCisJQkFEPWBta3RlbXAgJFRNUERJUi9wYmFkWFhYWFhYYCB8fCBleGl0IDEKKwlSRUY9YG1rdGVtcCAkVE1QRElSL3BmWFhYWFhYYCB8fCBleGl0IDEKKwlSRU1PVkVfVEVNUD0icm0gLWYgJFRFTVAwICRURU1QICRCQUQgJFJFRiIKK2Vsc2UKKwlURU1QRD0kVE1QRElSL3BkJCQKKwlURU1QMD0kVEVNUEQvcG8kJAorCVRFTVA9JFRFTVBEL3AkJAorCUJBRD0kVEVNUEQvcGJhZCQkCisJUkVGPSRURU1QRC9wZiQkCisJbWtkaXIgJFRFTVBEIHx8IGV4aXQgMQorCVJFTU9WRV9URU1QPSJybSAtcmYgJFRFTVBEIgorZmkKKworIyBmaW5kIGEgdXNlciBuYW1lCitpZiBbICIkTE9HTkFNRSIgPSAiIiBdOyB0aGVuCisJaWYgWyAiJFVTRVIiICE9ICIiIF07IHRoZW4KKwkJTE9HTkFNRT0iJFVTRVIiCisJZWxzZQorCQlMT0dOQU1FPSJVTktOT1dOIgorCWZpCitmaQorCitGUk9NPSIkTE9HTkFNRSIKK1JFUExZX1RPPSIke1JFUExZX1RPOi0ke1JFUExZVE86LSRMT0dOQU1FfX0iCisKKyMgRmluZCBvdXQgdGhlIG5hbWUgb2YgdGhlIG9yaWdpbmF0b3Igb2YgdGhpcyBQUi4KK2lmIFsgLW4gIiROQU1FIiBdOyB0aGVuCisgIE9SSUdJTkFUT1I9IiROQU1FIgorZWxpZiBbIC1mICRIT01FLy5mdWxsbmFtZSBdOyB0aGVuCisgIE9SSUdJTkFUT1I9ImBzZWQgLWUgJzFxJyAkSE9NRS8uZnVsbG5hbWVgIgorZWxzZQorICAjIE11c3QgdXNlIHRlbXAgZmlsZSBkdWUgdG8gaW5jb21wYXRpYmlsaXRpZXMgaW4gcXVvdGluZyBiZWhhdmlvcgorICAjIGFuZCB0byBwcm90ZWN0IHNoZWxsIG1ldGFjaGFyYWN0ZXJzIGluIHRoZSBleHBhbnNpb24gb2YgJExPR05BTUUKKyAgJFBBU1NXRCB8IGdyZXAgIl4kTE9HTkFNRToiIHwgYXdrIC1GOiAne3ByaW50ICQ1fScgfCBzZWQgLWUgJ3MvLC4qLy8nID4gJFRFTVAwCisgIE9SSUdJTkFUT1I9ImBjYXQgJFRFTVAwYCIKKyAgcm0gLWYgJFRFTVAwCitmaQorCitpZiBbIC1uICIkT1JHQU5JWkFUSU9OIiBdOyB0aGVuCisgIGlmIFsgLWYgIiRPUkdBTklaQVRJT04iIF07IHRoZW4KKyAgICBPUkdBTklaQVRJT049ImBjYXQgJE9SR0FOSVpBVElPTmAiCisgIGZpCitlbHNlCisgIGlmIFsgLW4gIiRERUZBVUxUX09SR0FOSVpBVElPTiIgXTsgdGhlbgorICAgIE9SR0FOSVpBVElPTj0iJERFRkFVTFRfT1JHQU5JWkFUSU9OIgorICBlbGlmIFsgLWYgJEhPTUUvLm9yZ2FuaXphdGlvbiBdOyB0aGVuCisgICAgT1JHQU5JWkFUSU9OPSJgY2F0ICRIT01FLy5vcmdhbml6YXRpb25gIgorICBmaQorZmkKKworIyBJZiB0aGV5IGRvbid0IGhhdmUgYSBwcmVmZXJyZWQgZWRpdG9yIHNldCwgdGhlbiB1c2UKK2lmIFsgLXogIiRWSVNVQUwiIF07IHRoZW4KKyAgaWYgWyAteiAiJEVESVRPUiIgXTsgdGhlbgorICAgIEVESVQ9dmkKKyAgZWxzZQorICAgIEVESVQ9IiRFRElUT1IiCisgIGZpCitlbHNlCisgIEVESVQ9IiRWSVNVQUwiCitmaQorCisjIEZpbmQgb3V0IHNvbWUgaW5mb3JtYXRpb24uCitTWVNURU09YCggWyAtZiAvYmluL3VuYW1lIF0gJiYgL2Jpbi91bmFtZSAtYSApIHx8IFwKKyAgICAgICAgKCBbIC1mIC91c3IvYmluL3VuYW1lIF0gJiYgL3Vzci9iaW4vdW5hbWUgLWEgKSB8fCBlY2hvICIiYAorQVJDSD1gWyAtZiAvYmluL2FyY2ggXSAmJiAvYmluL2FyY2hgCitNQUNISU5FPWBbIC1mIC9iaW4vbWFjaGluZSBdICYmIC9iaW4vbWFjaGluZWAKKworQ09NTUFORD1gZWNobyAkMCB8IHNlZCAtZSAncywuKi8sLCdgCitVU0FHRT0iVXNhZ2U6ICRDT01NQU5EIFstUFZMXSBbLXQgYWRkcmVzc10gWy1mIGZpbGVuYW1lXSBbLXMgc2V2ZXJpdHldCisgICAgICAgWy1jIGFkZHJlc3NdIFstLXJlcXVlc3QtaWRdIFstLXZlcnNpb25dIgorUkVNT1ZFPQorQkFUQ0g9CitDQz0KK1NFVkVSSVRZX0M9CisKK3doaWxlIFsgJCMgLWd0IDAgXTsgZG8KKyAgY2FzZSAiJDEiIGluCisgICAgLXIpIDs7IAkJIyBJZ25vcmUgZm9yIGJhY2t3YXJkIGNvbXBhdC4KKyAgICAtdCB8IC0tdG8pIGlmIFsgJCMgLWVxIDEgXTsgdGhlbiBlY2hvICIkVVNBR0UiOyAkUkVNT1ZFX1RFTVA7IGV4aXQgMTsgZmkKKwlzaGlmdCA7IEdOQVRTX0FERFI9IiQxIgorCUVYUExJQ0lUX0dOQVRTX0FERFI9dHJ1ZQorICAgICAgICA7OworICAgIC1mIHwgLS1maWxlKSBpZiBbICQjIC1lcSAxIF07IHRoZW4gZWNobyAiJFVTQUdFIjsgJFJFTU9WRV9URU1QOyBleGl0IDE7IGZpCisJc2hpZnQgOyBJTl9GSUxFPSIkMSIKKwlpZiBbICIkSU5fRklMRSIgIT0gIi0iIC1hICEgLXIgIiRJTl9GSUxFIiBdOyB0aGVuCisJICBlY2hvICIkQ09NTUFORDogY2Fubm90IHJlYWQgJElOX0ZJTEUiCisJICAkUkVNT1ZFX1RFTVAKKwkgIGV4aXQgMQorCWZpCisJOzsKKyAgICAtYiB8IC0tYmF0Y2gpIEJBVENIPXRydWUgOzsKKyAgICAtYyB8IC0tY2MpIGlmIFsgJCMgLWVxIDEgXTsgdGhlbiBlY2hvICIkVVNBR0UiOyAkUkVNT1ZFX1RFTVA7IGV4aXQgMTsgZmkKKwlzaGlmdCA7IENDPSIkMSIKKwk7OworICAgIC1zIHwgLS1zZXZlcml0eSkgaWYgWyAkIyAtZXEgMSBdOyB0aGVuIGVjaG8gIiRVU0FHRSI7ICRSRU1PVkVfVEVNUDsgZXhpdCAxOyBmaQorCXNoaWZ0IDsgU0VWRVJJVFlfQz0iJDEiCisJOzsKKyAgICAtcCB8IC1QIHwgLS1wcmludCkgUFJJTlQ9dHJ1ZSA7OworICAgIC1MIHwgLS1saXN0KSBGT1JNQVQ9bm9ybSA7OworICAgIC1sIHwgLUNMIHwgLS1saXNwKSBGT1JNQVQ9bGlzcCA7OworICAgIC0tcmVxdWVzdC1pZCkgUkVRVUVTVF9JRD10cnVlIDs7CisgICAgLWggfCAtLWhlbHApIGVjaG8gIiRVU0FHRSI7ICRSRU1PVkVfVEVNUDsgZXhpdCAwIDs7CisgICAgLVYgfCAtLXZlcnNpb24pIGNhdCA8PEVPRgorZ2NjYnVnIChHQ0MpICRERUZBVUxUX1JFTEVBU0UKK0NvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworRU9GCisJJFJFTU9WRV9URU1QOyBleGl0IDAgOzsKKyAgICAtKikgZWNobyAiJFVTQUdFIiA7ICRSRU1PVkVfVEVNUDsgZXhpdCAxIDs7CisgICAgKikgZWNobyAiJFVTQUdFIiA7ICRSRU1PVkVfVEVNUDsgZXhpdCAxCisgZXNhYworIHNoaWZ0Citkb25lCisKKyMgc3BhbSBkb2VzIG5vdCBuZWVkIHRvIGJlIGxpc3RlZCBoZXJlCitDQVRFR09SSUVTPSJhZGEgYm9vdHN0cmFwIGMrKyBjIGRlYnVnIGRyaXZlciBmb3J0cmFuIGlubGluZS1hc20gamF2YSBsaWJnY2ogbGlib2JqYyBsaWJzdGRjKysgbWlkZGxlLWVuZCBvYmpjIG90aGVyIHBjaCBwcmVwcm9jZXNzb3IgcnRsLW9wdGltaXphdGlvbiB0YXJnZXQgdHJlZS1vcHRpbWl6YXRpb24gd2ViIgorCitjYXNlICIkRk9STUFUIiBpbgorICBsaXNwKSBlY2hvICIkQ0FURUdPUklFUyIgfCBcCisgICAgICAgIGF3ayAnQkVHSU4ge3ByaW50ZiAiKCAifSB7cHJpbnRmICIoXCIlc1wiKSAiLCQwfSBFTkQge3ByaW50ZiAiKVxuIn0nCisJJFJFTU9WRV9URU1QCisgICAgICAgIGV4aXQgMAorICAgICAgICA7OworICBub3JtKSBsPWBlY2hvICIkQ0FURUdPUklFUyIgfCBcCisJYXdrICdCRUdJTiB7bWF4ID0gMDsgfSB7IGlmIChsZW5ndGgoJDApID4gbWF4KSB7IG1heCA9IGxlbmd0aCgkMCk7IH0gfQorCSAgICAgRU5EIHtwcmludCBtYXggKyAxO30nYAorCWM9YGV4cHIgNzAgLyAkbGAKKwlpZiBbICRjIC1lcSAwIF07IHRoZW4gYz0xOyBmaQorCWVjaG8gIiRDQVRFR09SSUVTIiB8IFwKKyAgICAgICAgYXdrICdCRUdJTiB7cHJpbnQgIktub3duIGNhdGVnb3JpZXM6IjsgaSA9IDAgfQorICAgICAgICAgIHsgcHJpbnRmICgiJS0nJGwnLickbCdzIiwgJDApOyBpZiAoKCsraSAlICckYycpID09IDApIHsgcHJpbnQgIiIgfSB9CisgICAgICAgICAgICBFTkQgeyBwcmludCAiIjsgfScKKwkkUkVNT1ZFX1RFTVAKKyAgICAgICAgZXhpdCAwCisgICAgICAgIDs7Citlc2FjCisKK09SSUdJTkFUT1JfQz0nPG5hbWUgb2YgdGhlIFBSIGF1dGhvciAob25lIGxpbmUpPicKK09SR0FOSVpBVElPTl9DPSc8b3JnYW5pemF0aW9uIG9mIFBSIGF1dGhvciAobXVsdGlwbGUgbGluZXMpPicKK1NZTk9QU0lTX0M9JzxzeW5vcHNpcyBvZiB0aGUgcHJvYmxlbSAob25lIGxpbmUpPicKK2lmIFsgLXogIiRTRVZFUklUWV9DIiBdOyB0aGVuCisgIFNFVkVSSVRZX0M9JzxbIG5vbi1jcml0aWNhbCB8IHNlcmlvdXMgfCBjcml0aWNhbCBdIChvbmUgbGluZSk+JworZmkKK1BSSU9SSVRZX0M9JzxbIGxvdyB8IG1lZGl1bSBdIChvbmUgbGluZSk+JworQ0FURUdPUllfQz0nPGNob29zZSBmcm9tIHRoZSB0b3Agb2YgdGhpcyBmaWxlIChvbmUgbGluZSk+JworUkVMRUFTRV9DPSc8cmVsZWFzZSBudW1iZXIgb3IgdGFnIChvbmUgbGluZSk+JworRU5WSVJPTk1FTlRfQz0nPG1hY2hpbmUsIG9zLCB0YXJnZXQsIGxpYnJhcmllcyAobXVsdGlwbGUgbGluZXMpPicKK0RFU0NSSVBUSU9OX0M9JzxwcmVjaXNlIGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9ibGVtIChtdWx0aXBsZSBsaW5lcyk+JworSE9XX1RPX1JFUEVBVF9DPSc8V2hlbiByZXBvcnRpbmcgYSBjb21waWxlciBlcnJvciwgcHJlcHJvY2Vzc29yIG91dHB1dCBtdXN0IGJlIGluY2x1ZGVkPicKK0ZJWF9DPSc8aG93IHRvIGNvcnJlY3Qgb3Igd29yayBhcm91bmQgdGhlIHByb2JsZW0sIGlmIGtub3duIChtdWx0aXBsZSBsaW5lcyk+JworCisjIENhdGNoIHNvbWUgc2lnbmFscy4gKCR4cyBrbHVkZ2UgbmVlZGVkIGJ5IFN1biAvYmluL3NoKQoreHM9MAordHJhcCAnJFJFTU9WRV9URU1QOyBleGl0ICR4cycgMAordHJhcCAnZWNobyAiJENPTU1BTkQ6IEFib3J0aW5nIC4uLiI7ICRSRU1PVkVfVEVNUDsgeHM9MTsgZXhpdCcgMSAzIDEzIDE1CisKKyMgSWYgdGhleSB0b2xkIHVzIHRvIHVzZSBhIHNwZWNpZmljIGZpbGUsIHRoZW4gZG8gc28uCitpZiBbIC1uICIkSU5fRklMRSIgXTsgdGhlbgorICBpZiBbICIkSU5fRklMRSIgPSAiLSIgXTsgdGhlbgorICAgICMgVGhlIFBSIGlzIGNvbWluZyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4KKyAgICBpZiBbIC1uICIkRVhQTElDSVRfR05BVFNfQUREUiIgXTsgdGhlbgorICAgICAgc2VkIC1lICJzO15bVHRdW09vXTouKjtUbzogJEdOQVRTX0FERFI7IiA+ICRURU1QCisgICAgZWxzZQorICAgICAgY2F0ID4gJFRFTVAKKyAgICBmaQorICBlbHNlCisgICAgIyBVc2UgdGhlIGZpbGUgdGhleSBuYW1lZC4KKyAgICBpZiBbIC1uICIkRVhQTElDSVRfR05BVFNfQUREUiIgXTsgdGhlbgorICAgICAgc2VkIC1lICJzO15bVHRdW09vXTouKjtUbzogJEdOQVRTX0FERFI7IiAkSU5fRklMRSA+ICRURU1QCisgICAgZWxzZQorICAgICAgY2F0ICRJTl9GSUxFID4gJFRFTVAKKyAgICBmaQorICBmaQorZWxzZQorCisgIGlmIFsgLW4gIiRQUl9GT1JNIiAtYSAteiAiJFBSSU5UX0lOVEVSTiIgXTsgdGhlbgorICAgICMgSWYgdGhlaXIgUFJfRk9STSBwb2ludHMgdG8gYSBib2d1cyBlbnRyeSwgdGhlbiBiYWlsLgorICAgIGlmIFsgISAtZiAiJFBSX0ZPUk0iIC1vICEgLXIgIiRQUl9GT1JNIiAtbyAhIC1zICIkUFJfRk9STSIgXTsgdGhlbgorICAgICAgZWNobyAiJENPTU1BTkQ6IGNhbid0IHNlZW0gdG8gcmVhZCB5b3VyIHRlbXBsYXRlIGZpbGUgKFxgJFBSX0ZPUk0nKSwgaWdub3JpbmcgUFJfRk9STSIKKyAgICAgIHNsZWVwIDEKKyAgICAgIFBSSU5UX0lOVEVSTj1iYWRfcHJmb3JtCisgICAgZmkKKyAgZmkKKworICBpZiBbIC1uICIkUFJfRk9STSIgLWEgLXogIiRQUklOVF9JTlRFUk4iIF07IHRoZW4KKyAgICBjcCAkUFJfRk9STSAkVEVNUCB8fCAKKyAgICAgICggZWNobyAiJENPTU1BTkQ6IGNvdWxkIG5vdCBjb3B5ICRQUl9GT1JNIiA7IHhzPTE7IGV4aXQgKQorICBlbHNlCisgICAgZm9yIGZpbGUgaW4gJFRFTVAgJFJFRiA7IGRvCisgICAgICBjYXQgID4gJGZpbGUgPDwgJ19fRU9GX18nCitTRU5ELVBSOiAtKi0gc2VuZC1wciAtKi0KK1NFTkQtUFI6IExpbmVzIHN0YXJ0aW5nIHdpdGggYFNFTkQtUFInIHdpbGwgYmUgcmVtb3ZlZCBhdXRvbWF0aWNhbGx5LCBhcworU0VORC1QUjogd2lsbCBhbGwgY29tbWVudHMgKHRleHQgZW5jbG9zZWQgaW4gYDwnIGFuZCBgPicpLgorU0VORC1QUjogCitTRU5ELVBSOiBQbGVhc2UgY29uc3VsdCB0aGUgR0NDIG1hbnVhbCBpZiB5b3UgYXJlIG5vdCBzdXJlIGhvdyB0bworU0VORC1QUjogZmlsbCBvdXQgYSBwcm9ibGVtIHJlcG9ydC4KK1NFTkQtUFI6IE5vdGUgdGhhdCB0aGUgU3lub3BzaXMgZmllbGQgaXMgbWFuZGF0b3J5LiAgVGhlIFN1YmplY3QgKGZvcgorU0VORC1QUjogdGhlIG1haWwpIHdpbGwgYmUgbWFkZSB0aGUgc2FtZSBhcyBTeW5vcHNpcyB1bmxlc3MgZXhwbGljaXRseQorU0VORC1QUjogY2hhbmdlZC4KK1NFTkQtUFI6CitTRU5ELVBSOiBDaG9vc2UgZnJvbSB0aGUgZm9sbG93aW5nIGNhdGVnb3JpZXM6CitTRU5ELVBSOgorX19FT0ZfXworCisgICAgICAjIEZvcm1hdCB0aGUgY2F0ZWdvcmllcyBzbyB0aGV5IGZpdCBvbnRvIGxpbmVzLgorCWw9YGVjaG8gIiRDQVRFR09SSUVTIiB8IFwKKwlhd2sgJ0JFR0lOIHttYXggPSAwOyB9IHsgaWYgKGxlbmd0aCgkMCkgPiBtYXgpIHsgbWF4ID0gbGVuZ3RoKCQwKTsgfSB9CisJICAgICBFTkQge3ByaW50IG1heCArIDE7fSdgCisJYz1gZXhwciA2MSAvICRsYAorCWlmIFsgJGMgLWVxIDAgXTsgdGhlbiBjPTE7IGZpCisJZWNobyAiJENBVEVHT1JJRVMiIHwgXAorICAgICAgICBhd2sgJ0JFR0lOIHtwcmludGYgIlNFTkQtUFI6ICI7IGkgPSAwIH0KKyAgICAgICAgICB7IHByaW50ZiAoIiUtJyRsJy4nJGwncyIsICQwKTsKKwkgICAgaWYgKCgrK2kgJSAnJGMnKSA9PSAwKSB7IHByaW50ZiAiXG5TRU5ELVBSOiAiIH0gfQorICAgICAgICAgICAgRU5EIHsgcHJpbnRmICJcblNFTkQtUFI6XG4iOyB9JyA+PiAkZmlsZQorCisgICAgICBjYXQgPj4gJGZpbGUgPDwgX19FT0ZfXworVG86ICRHTkFUU19BRERSCitTdWJqZWN0OiAKK0Zyb206ICRGUk9NCitSZXBseS1UbzogJFJFUExZVE8KK0NjOiAkQ0MKK1gtc2VuZC1wci12ZXJzaW9uOiAkVkVSU0lPTgorWC1HTkFUUy1Ob3RpZnk6IAorCisKKz5TdWJtaXR0ZXItSWQ6CSRTVUJNSVRURVIKKz5PcmlnaW5hdG9yOgkkT1JJR0lOQVRPUgorPk9yZ2FuaXphdGlvbjoJJHtPUkdBTklaQVRJT04tJE9SR0FOSVpBVElPTl9DfQorPkNvbmZpZGVudGlhbDoJbm8KK1NFTkQtUFI6IExlYXZlICJDb25maWRlbnRpYWwiIGFzICJubyI7IGFsbCBHQ0MgUFJzIGFyZSBwdWJsaWMuCis+U3lub3BzaXM6CSRTWU5PUFNJU19DCis+U2V2ZXJpdHk6CSRTRVZFUklUWV9DCitTRU5ELVBSOiBjcml0aWNhbCAgICAgR0NDIGlzIGNvbXBsZXRlbHkgbm90IG9wZXJhdGlvbmFsOyBubyB3b3JrLWFyb3VuZCBrbm93bi4KK1NFTkQtUFI6IHNlcmlvdXMgICAgICBHQ0MgaXMgbm90IHdvcmtpbmcgcHJvcGVybHk7IGEgd29yay1hcm91bmQgaXMgcG9zc2libGUuCitTRU5ELVBSOiBub24tY3JpdGljYWwgUmVwb3J0IGluZGljYXRlcyBtaW5vciBwcm9ibGVtLgorPlByaW9yaXR5OgkkUFJJT1JJVFlfQworU0VORC1QUjogbWVkaXVtICAgICAgIFRoZSBwcm9ibGVtIHNob3VsZCBiZSBzb2x2ZWQgaW4gdGhlIG5leHQgcmVsZWFzZS4KK1NFTkQtUFI6IGxvdyAgICAgICAgICBUaGUgcHJvYmxlbSBzaG91bGQgYmUgc29sdmUgaW4gYSBmdXR1cmUgcmVsZWFzZS4KKz5DYXRlZ29yeToJJENBVEVHT1JZX0MKKz5DbGFzczoJCTxbIGRvYy1idWcgfCBhY2NlcHRzLWlsbGVnYWwgfCByZWplY3RzLWxlZ2FsIHwgd3JvbmctY29kZSB8IGljZS1vbi1sZWdhbC1jb2RlfCBpY2Utb24taWxsZWdhbC1jb2RlIHwgcGVzc2ltaXplcy1jb2RlIHwgc3ctYnVnIHwgY2hhbmdlLXJlcXVlc3QgfCBzdXBwb3J0IF0gKG9uZSBsaW5lKT4KK1NFTkQtUFI6IGRvYy1idWcgICAgICAgICAgVGhlIGRvY3VtZW50YXRpb24gaXMgaW5jb3JyZWN0LgorU0VORC1QUjogYWNjZXB0cy1pbGxlZ2FsICBHQ0MgZmFpbHMgdG8gcmVqZWN0IGVycm9uZW91cyBjb2RlLgorU0VORC1QUjogcmVqZWN0cy1sZWdhbCAgICBHQ0MgZ2l2ZXMgYW4gZXJyb3IgbWVzc2FnZSBmb3IgY29ycmVjdCBjb2RlLgorU0VORC1QUjogd3JvbmctY29kZSAgICAgICBUaGUgbWFjaGluZSBjb2RlIGdlbmVyYXRlZCBieSBnY2MgaXMgaW5jb3JyZWN0LgorU0VORC1QUjogaWNlLW9uLWxlZ2FsLWNvZGUgICBHQ0MgZ2l2ZXMgYW4gSW50ZXJuYWwgQ29tcGlsZXIgRXJyb3IgKElDRSkKK1NFTkQtUFI6ICAgICAgICAgICAgICAgICAgICAgZm9yIGNvcnJlY3QgY29kZQorU0VORC1QUjogaWNlLW9uLWlsbGVnYWwtY29kZSBHQ0MgZ2l2ZXMgYW4gSUNFIGluc3RlYWQgb2YgcmVwb3J0aW5nIGFuIGVycm9yCitTRU5ELVBSOiBwZXNzaW1pemVzLWNvZGUgICAgIEdDQyBtaXNzZXMgYW4gaW1wb3J0YW50IG9wdGltaXphdGlvbiBvcHBvcnR1bml0eQorU0VORC1QUjogc3ctYnVnICAgICAgICAgICAgICBTb2Z0d2FyZSBidWcgb2Ygc29tZSBvdGhlciBjbGFzcyB0aGFuIGFib3ZlCitTRU5ELVBSOiBjaGFuZ2UtcmVxdWVzdCAgICAgIEEgZmVhdHVyZSBpbiBHQ0MgaXMgbWlzc2luZy4KK1NFTkQtUFI6IHN1cHBvcnQgICAgICAgICAgICAgSSBuZWVkIGhlbHAgd2l0aCBnY2MuCis+UmVsZWFzZToJJHtERUZBVUxUX1JFTEVBU0UtJFJFTEVBU0VfQ30KKz5FbnZpcm9ubWVudDoKK2BbIC1uICIkU1lTVEVNIiBdICYmIGVjaG8gU3lzdGVtOiAkU1lTVEVNYAorYFsgLW4gIiRBUkNIIiBdICYmIGVjaG8gQXJjaGl0ZWN0dXJlOiAkQVJDSGAKK2BbIC1uICIkTUFDSElORSIgXSAmJiBlY2hvIE1hY2hpbmU6ICRNQUNISU5FYAorCSRFTlZJUk9OTUVOVF9DCitob3N0OiB4ODZfNjQtYnVpbGRfdW5rbm93bi1saW51eC1nbnUKK2J1aWxkOiB4ODZfNjQtYnVpbGRfdW5rbm93bi1saW51eC1nbnUKK3RhcmdldDogYXJtLXVua25vd24tbGludXgtZ251ZWFiaQorX19FT0ZfXworICAgICAgY2F0ID4+ICRmaWxlIDw8IFxfX0VPRl9fCitjb25maWd1cmVkIHdpdGg6IC91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9idWlsZC9idWlsZC10b29sY2hhaW4vLmJ1aWxkL3NyYy9nY2MtNC41LjMvY29uZmlndXJlIC0tYnVpbGQ9eDg2XzY0LWJ1aWxkX3Vua25vd24tbGludXgtZ251IC0taG9zdD14ODZfNjQtYnVpbGRfdW5rbm93bi1saW51eC1nbnUgLS10YXJnZXQ9YXJtLXVua25vd24tbGludXgtZ251ZWFiaSAtLXByZWZpeD0vdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3IgLS13aXRoLXN5c3Jvb3Q9L3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdCAtLWVuYWJsZS1sYW5ndWFnZXM9YyxjKysgLS1kaXNhYmxlLW11bHRpbGliIC0td2l0aC1hcmNoPWFybXY3LWEgLS13aXRoLXR1bmU9Y29ydGV4LWE5IC0td2l0aC1wa2d2ZXJzaW9uPSdjcm9zc3Rvb2wtTkcgMS4xMy40IC0gYnVpbGRyb290IDIwMTIuMDItMDAwNjYtZzViYjI2MjknIC0tZW5hYmxlLV9fY3hhX2F0ZXhpdCAtLWRpc2FibGUtbGlibXVkZmxhcCAtLWRpc2FibGUtbGliZ29tcCAtLWRpc2FibGUtbGlic3NwIC0td2l0aC1nbXA9L3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2J1aWxkL2J1aWxkLXRvb2xjaGFpbi8uYnVpbGQvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9idWlsZC9zdGF0aWMgLS13aXRoLW1wZnI9L3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2J1aWxkL2J1aWxkLXRvb2xjaGFpbi8uYnVpbGQvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9idWlsZC9zdGF0aWMgLS13aXRoLW1wYz0vdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvYnVpbGQvYnVpbGQtdG9vbGNoYWluLy5idWlsZC9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2J1aWxkL3N0YXRpYyAtLXdpdGgtcHBsPS91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9idWlsZC9idWlsZC10b29sY2hhaW4vLmJ1aWxkL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYnVpbGQvc3RhdGljIC0td2l0aC1jbG9vZz0vdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvYnVpbGQvYnVpbGQtdG9vbGNoYWluLy5idWlsZC9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2J1aWxkL3N0YXRpYyAtLXdpdGgtbGliZWxmPS91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9idWlsZC9idWlsZC10b29sY2hhaW4vLmJ1aWxkL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYnVpbGQvc3RhdGljIC0td2l0aC1ob3N0LWxpYnN0ZGN4eD0nLXN0YXRpYy1saWJnY2MgLVdsLC1Cc3RhdGljLC1sc3RkYysrLC1CZHluYW1pYyAtbG0nIC0tZW5hYmxlLXRocmVhZHM9cG9zaXggLS1lbmFibGUtdGFyZ2V0LW9wdHNwYWNlIC0td2l0aC1sb2NhbC1wcmVmaXg9L3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdCAtLWRpc2FibGUtbmxzIC0tZW5hYmxlLWM5OSAtLWVuYWJsZS1sb25nLWxvbmcKK19fRU9GX18KKyAgICAgIGNhdCA+PiAkZmlsZSA8PCBfX0VPRl9fCis+RGVzY3JpcHRpb246CisJJERFU0NSSVBUSU9OX0MKKz5Ib3ctVG8tUmVwZWF0OgorCSRIT1dfVE9fUkVQRUFUX0MKKz5GaXg6CisJJEZJWF9DCitfX0VPRl9fCisgICAgZG9uZQorICBmaQorCisgIGlmIFsgIiRQUklOVCIgPSB0cnVlIC1vICIkUFJJTlRfSU5URVJOIiA9IHRydWUgXTsgdGhlbgorICAgIGNhdCAkVEVNUAorICAgIHhzPTA7IGV4aXQKKyAgZmkKKworICBjaG1vZCB1K3cgJFRFTVAKKyAgaWYgWyAteiAiJFJFUVVFU1RfSUQiIF07IHRoZW4KKyAgICBldmFsICRFRElUICRURU1QCisgIGVsc2UKKyAgICBlZCAtcyAkVEVNUCA8PCAnX19FT0ZfXycKKy9eU3ViamVjdC9zL15TdWJqZWN0Oi4qL1N1YmplY3Q6IHJlcXVlc3QgZm9yIGEgY3VzdG9tZXIgaWQvCisvXj5DYXRlZ29yeS9zL14+Q2F0ZWdvcnk6LiovPkNhdGVnb3J5OiBzZW5kLXByLwordworcQorX19FT0ZfXworICBmaQorCisgIGlmIGNtcCAtcyAkUkVGICRURU1QIDsgdGhlbgorICAgIGVjaG8gIiRDT01NQU5EOiBwcm9ibGVtIHJlcG9ydCBub3QgZmlsbGVkIG91dCwgdGhlcmVmb3JlIG5vdCBzZW50IgorICAgIHhzPTE7IGV4aXQKKyAgZmkKK2ZpCisKKyMMCisjCUNoZWNrIHRoZSBlbnVtZXJhdGlvbiBmaWVsZHMKKworIyBUaGlzIGlzIGEgInNlZC1zdWJyb3V0aW5lIiB3aXRoIG9uZSBrZXl3b3JkIHBhcmFtZXRlciAKKyMgKHdpdGggd29ya2Fyb3VuZCBmb3IgU3VuIHNlZCBidWcpCisjCitTRURfQ01EPScKKy8kUEFUVEVSTi97CitzfHx8CitzfDwuKj58fAorc3xeWyAJXSp8fAorc3xbIAldKiR8fAorcAorcQorfScKKworCit3aGlsZSBbIC16ICIkUkVRVUVTVF9JRCIgXTsgZG8KKyAgQ05UPTAKKworICAjIDEpIENvbmZpZGVudGlhbAorICAjCisgIFBBVFRFUk49Ij5Db25maWRlbnRpYWw6IgorICBDT05GSURFTlRJQUw9YGV2YWwgc2VkIC1uIC1lICJcIiRTRURfQ01EXCIiICRURU1QYAorICBjYXNlICIkQ09ORklERU5USUFMIiBpbgorICAgIG5vKSBDTlQ9YGV4cHIgJENOVCArIDFgIDs7CisgICAgKikgZWNobyAiJENPTU1BTkQ6IFxgJENPTkZJREVOVElBTCcgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIFxgQ29uZmlkZW50aWFsJy4iIDs7CisgIGVzYWMKKyAgIworICAjIDIpIFNldmVyaXR5CisgICMKKyAgUEFUVEVSTj0iPlNldmVyaXR5OiIKKyAgU0VWRVJJVFk9YGV2YWwgc2VkIC1uIC1lICJcIiRTRURfQ01EXCIiICRURU1QYAorICBjYXNlICIkU0VWRVJJVFkiIGluCisgICAgIiJ8bm9uLWNyaXRpY2FsfHNlcmlvdXN8Y3JpdGljYWwpIENOVD1gZXhwciAkQ05UICsgMWAgOzsKKyAgICAqKSAgZWNobyAiJENPTU1BTkQ6IFxgJFNFVkVSSVRZJyBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgXGBTZXZlcml0eScuIgorICBlc2FjCisgICMKKyAgIyAzKSBQcmlvcml0eQorICAjCisgIFBBVFRFUk49Ij5Qcmlvcml0eToiCisgIFBSSU9SSVRZPWBldmFsIHNlZCAtbiAtZSAiXCIkU0VEX0NNRFwiIiAkVEVNUGAKKyAgY2FzZSAiJFBSSU9SSVRZIiBpbgorICAgICIifGxvd3xtZWRpdW0pIENOVD1gZXhwciAkQ05UICsgMWAgOzsKKyAgICBoaWdoKSBlY2hvICIkQ09NTUFORDogXGBQcmlvcml0eTogaGlnaCcgaXMgcmVzZXJ2ZWQgZm9yIEdDQyBtYWludGFpbmVycy4iIDs7CisgICAgKikgIGVjaG8gIiRDT01NQU5EOiBcYCRQUklPUklUWScgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIFxgUHJpb3JpdHknLiIKKyAgZXNhYworICAjCisgICMgNCkgQ2F0ZWdvcnkKKyAgIworICBQQVRURVJOPSI+Q2F0ZWdvcnk6IgorICBDQVRFR09SWT1gZXZhbCBzZWQgLW4gLWUgIlwiJFNFRF9DTURcIiIgJFRFTVBgCisgIEZPVU5EPQorICBmb3IgQyBpbiAkQ0FURUdPUklFUworICBkbworICAgIGlmIFsgIiRDIiA9ICIkQ0FURUdPUlkiIF07IHRoZW4gRk9VTkQ9dHJ1ZSA7IGJyZWFrIDsgZmkKKyAgZG9uZQorICBpZiBbIC1uICIkRk9VTkQiIF07IHRoZW4KKyAgICBDTlQ9YGV4cHIgJENOVCArIDFgCQorICBlbHNlCisgICAgaWYgWyAteiAiJENBVEVHT1JZIiBdOyB0aGVuCisgICAgICBlY2hvICIkQ09NTUFORDogeW91IG11c3QgaW5jbHVkZSBhIENhdGVnb3J5OiBmaWVsZCBpbiB5b3VyIHJlcG9ydC4iCisgICAgZWxzZQorICAgICAgZWNobyAiJENPTU1BTkQ6IFxgJENBVEVHT1JZJyBpcyBub3QgYSBrbm93biBjYXRlZ29yeS4iCisgICAgZmkKKyAgZmkKKyAgIworICAjIDUpIENsYXNzCisgICMKKyAgUEFUVEVSTj0iPkNsYXNzOiIKKyAgQ0xBU1M9YGV2YWwgc2VkIC1uIC1lICJcIiRTRURfQ01EXCIiICRURU1QYAorICBjYXNlICIkQ0xBU1MiIGluCisgICAgIiJ8ZG9jLWJ1Z3xhY2NlcHRzLWlsbGVnYWx8cmVqZWN0cy1sZWdhbHx3cm9uZy1jb2RlfGljZS1vbi1sZWdhbC1jb2RlfGljZS1vbi1pbGxlZ2FsLWNvZGV8cGVzc2ltaXplcy1jb2RlfHN3LWJ1Z3xjaGFuZ2UtcmVxdWVzdHxzdXBwb3J0KSBDTlQ9YGV4cHIgJENOVCArIDFgIDs7CisgICAgKikgIGVjaG8gIiRDT01NQU5EOiBcYCRDTEFTUycgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIFxgQ2xhc3MnLiIKKyAgZXNhYworICAjCisgICMgNikgQ2hlY2sgdGhhdCBzeW5vcHNpcyBpcyBub3QgZW1wdHkKKyAgIworICBpZiBncmVwICJePlN5bm9wc2lzOlsgCV0qJHtTWU5PUFNJU19DfVwkIiAkVEVNUCA+IC9kZXYvbnVsbAorICB0aGVuCisgICAgZWNobyAiJENPTU1BTkQ6IFN5bm9wc2lzIG11c3Qgbm90IGJlIGVtcHR5LiIKKyAgZWxzZQorICAgIENOVD1gZXhwciAkQ05UICsgMWAKKyAgZmkKKworICBbICRDTlQgLWx0IDYgLWEgLXogIiRCQVRDSCIgXSAmJiAKKyAgICBlY2hvICJFcnJvcnMgd2VyZSBmb3VuZCB3aXRoIHRoZSBwcm9ibGVtIHJlcG9ydC4iCisKKyAgd2hpbGUgdHJ1ZTsgZG8KKyAgICBpZiBbIC16ICIkQkFUQ0giIF07IHRoZW4KKyAgICAgICRFQ0hPTjEgImEpYm9ydCwgZSlkaXQgb3IgcyllbmQ/ICRFQ0hPTjIiCisgICAgICByZWFkIGlucHV0CisgICAgZWxzZQorICAgICAgaWYgWyAkQ05UIC1lcSA2IF07IHRoZW4KKyAgICAgICAgaW5wdXQ9cworICAgICAgZWxzZQorICAgICAgICBpbnB1dD1hCisgICAgICBmaQorICAgIGZpCisgICAgY2FzZSAiJGlucHV0IiBpbgorICAgICAgYSopCisJaWYgWyAteiAiJEJBVENIIiBdOyB0aGVuCisJICBlY2hvICIkQ09NTUFORDogdGhlIHByb2JsZW0gcmVwb3J0IHJlbWFpbnMgaW4gJEJBRCBhbmQgaXMgbm90IHNlbnQuIgorCSAgUkVNT1ZFX1RFTVA9InJtIC1mICRURU1QMCAkVEVNUCAkUkVGIgorCSAgbXYgJFRFTVAgJEJBRAorICAgICAgICBlbHNlCisJICBlY2hvICIkQ09NTUFORDogdGhlIHByb2JsZW0gcmVwb3J0IGlzIG5vdCBzZW50LiIKKwlmaQorCXhzPTE7IGV4aXQKKwk7OworICAgICAgZSopCisgICAgICAgIGV2YWwgJEVESVQgJFRFTVAKKwljb250aW51ZSAyCisJOzsKKyAgICAgIHMqKQorCWJyZWFrIDIKKwk7OworICAgIGVzYWMKKyAgZG9uZQorZG9uZQorCisjCisjIE1ha2Ugc3VyZSB0aGUgbWFpbCBoYXMgZ290IGEgU3ViamVjdC4gIElmIG5vdCwgdXNlIHRoZSBzYW1lIGFzCisjIGluIFN5bm9wc2lzLgorIworCitpZiBncmVwICdeU3ViamVjdDpbIAldKiQnICRURU1QID4gL2Rldi9udWxsCit0aGVuCisgIFNZTk9QU0lTPWBncmVwICdePlN5bm9wc2lzOicgJFRFTVAgfCBzZWQgLWUgJ3MvXj5TeW5vcHNpczpbIAldKi8vJ2AKKyAgZWQgLXMgJFRFTVAgPDwgX19FT0ZfXworL15TdWJqZWN0Oi9zLzouKlwkLzogJFNZTk9QU0lTLwordworcQorX19FT0ZfXworZmkKKworIworIwlSZW1vdmUgY29tbWVudHMgYW5kIHNlbmQgdGhlIHByb2JsZW0gcmVwb3J0CisjCSh3ZSBoYXZlIHRvIHVzZSBwYXR0ZXJucywgd2hlcmUgdGhlIGNvbW1lbnQgY29udGFpbnMgcmVnZXggY2hhcnMpCisjCisjIC9ePk9yaWdpbmF0b3I6L3M7JE9SSUdJTkFUT1I7Oworc2VkICAtZSAiCisvXlNFTkQtUFI6L2QKKy9ePk9yZ2FuaXphdGlvbjovLC9ePltBLVphLXotXSo6L3M7JE9SR0FOSVpBVElPTl9DOzsKKy9ePkNvbmZpZGVudGlhbDovczs8Lio+OzsKKy9ePlN5bm9wc2lzOi9zOyRTWU5PUFNJU19DOzsKKy9ePlNldmVyaXR5Oi9zOzwuKj47OworL14+UHJpb3JpdHk6L3M7PC4qPjs7CisvXj5DYXRlZ29yeTovczskQ0FURUdPUllfQzs7CisvXj5DbGFzczovczs8Lio+OzsKKy9ePlJlbGVhc2U6LywvXj5bQS1aYS16LV0qOi9zOyRSRUxFQVNFX0M7OworL14+RW52aXJvbm1lbnQ6LywvXj5bQS1aYS16LV0qOi9zOyRFTlZJUk9OTUVOVF9DOzsKKy9ePkRlc2NyaXB0aW9uOi8sL14+W0EtWmEtei1dKjovczskREVTQ1JJUFRJT05fQzs7CisvXj5Ib3ctVG8tUmVwZWF0Oi8sL14+W0EtWmEtei1dKjovczskSE9XX1RPX1JFUEVBVF9DOzsKKy9ePkZpeDovLC9ePltBLVphLXotXSo6L3M7JEZJWF9DOzsKKyIgJFRFTVAgPiAkUkVGCisKK2lmICRNQUlMX0FHRU5UIDwgJFJFRjsgdGhlbgorICBlY2hvICIkQ09NTUFORDogcHJvYmxlbSByZXBvcnQgc2VudCIKKyAgeHM9MDsgZXhpdAorZWxzZQorICBlY2hvICIkQ09NTUFORDogbXlzdGVyaW91cyBtYWlsIGZhaWx1cmUuIgorICBpZiBbIC16ICIkQkFUQ0giIF07IHRoZW4KKyAgICBlY2hvICIkQ09NTUFORDogdGhlIHByb2JsZW0gcmVwb3J0IHJlbWFpbnMgaW4gJEJBRCBhbmQgaXMgbm90IHNlbnQuIgorICAgIFJFTU9WRV9URU1QPSJybSAtZiAkVEVNUDAgJFRFTVAgJFJFRiIKKyAgICBtdiAkUkVGICRCQUQKKyAgZWxzZQorICAgIGVjaG8gIiRDT01NQU5EOiB0aGUgcHJvYmxlbSByZXBvcnQgaXMgbm90IHNlbnQuIgorICBmaQorICB4cz0xOyBleGl0CitmaQpkaWZmIC0tZ2l0IGEvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktZ2NvdiBiL2Jpbi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLWdjb3YKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzdiZWFmNQotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLWdjb3YKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktZ2RiIGIvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktZ2RiCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ5ZWM5YTcKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1nZGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktZ3Byb2YgYi9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1ncHJvZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jYjgxY2EyCi0tLSAvZGV2L251bGwKKysrIGIvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktZ3Byb2YKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktbGQgYi9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1sZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNTg5NmY3Ci0tLSAvZGV2L251bGwKKysrIGIvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktbGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktbGRkIGIvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktbGRkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU0OTE3NTEKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1sZGQKQEAgLTAsMCArMSwzNTIgQEAKKyMhL2Jpbi9iYXNoCisKKyMgTk9OLUNPTkZJR1VSQUJMRSBTVFVGRiEKK2V4cG9ydCBMQ19BTEw9QwordmVyc2lvbj0iMS4xMy40IgorYml0cz0iMzIiCitzZWQ9Ii9iaW4vc2VkIgorZ3JlcD0iL2Jpbi9ncmVwIgorCitteV9uYW1lPSIkKCBiYXNlbmFtZSAiJHswfSIgKSIKK3ByZWZpeD0iJHswJS1sZGR9IgorZ2NjPSIke3ByZWZpeH0tZ2NjIgorcmVhZGVsZj0iJHtwcmVmaXh9LXJlYWRlbGYiCitmYWtlX2xvYWRfYWRkcl9yb290PSIkKCgweGRlYWRiZWVmKSkiCitmYWtlX2xvYWRfYWRkcl9ycGF0aD0iJCgoMHhkZWFkYzBkZSkpIgorZmFrZV9sb2FkX2FkZHJfc3lzcm9vdD0iJCgoMHg4YmFkZjAwZCkpIgorbGRfbGlicmFyeV9wYXRoPSIvbGliOi91c3IvbGliIgorCitkb19lcnJvcigpIHsKKyAgICBwcmludGYgIiVzOiAlc1xuIiAiJHtteV9uYW1lfSIgIiQqIiA+JjIKK30KKworZG9fb3B0X2Vycm9yKCkgeworICAgIGRvX2Vycm9yICIkQCIKKyAgICBwcmludGYgIlRyeSBcYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb25cbiIgIiR7bXlfbmFtZX0iID4mMgorfQorCitkb190cmFjZSgpIHsKKyAgICBsb2NhbCBkZXB0aD0wCisKKyAgICBbIC16ICIke0NUX1hMRERfVkVSQk9TRX0iIF0gJiYgcmV0dXJuIDAKKworICAgIGZvcigoZGVwdGg9MDsgIiR7I0ZVTkNOQU1FWyQoKGRlcHRoKzEpKV19IiAhPSAwOyBkZXB0aCsrKSk7IGRvIDo7IGRvbmUKKyAgICBwcmludGYgIiUqcyIgJCgoNCooZGVwdGgtMSkpKSAiIiA+JjIKKyAgICBwcmludGYgLS0gIiRAIiA+JjIKK30KKworc2hvd192ZXJzaW9uKCkgeworICAgICMgRmFrZSBhIHJlYWwgbGRkLCBqdXN0IGluIGNhc2Ugc29tZSBkdW1iIHNjcmlwdCB3b3VsZCBjaGVjaworICAgIGNhdCA8PF9FT0ZfCitsZGQgKGNyb3NzdG9vbC1ORykgJHt2ZXJzaW9ufQorQ29weXJpZ2h0IChDKSAyMDEwICJZYW5uIEUuIE1PUklOIiA8eWFubi5tb3Jpbi4xOTk4QGFuY2llbnMuZW5pYi5mcj4KK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KK0xpY2Vuc2VkIHVuZGVyIHRoZSBHUEx2Miwgc2VlIHRoZSBmaWxlIExJQ0VOU0VTIGluIHRoZSB0b3AtZGlyZWN0b3J5IG9mIHRoZQorc291cmNlcyBmb3IgdGhpcyBwYWNrYWdlLgorX0VPRl8KK30KKworc2hvd19oZWxwKCkgeworICAgIGNhdCA8PF9FT0ZfCitVc2FnZTogJHtteV9uYW1lfSBbT1BUSU9OXS4uLiAtLXJvb3QgRElSIEZJTEUuLi4KKyAgICAgIC0taGVscCAgICAgICAgICAgICAgcHJpbnQgdGhpcyBoZWxwIGFuZCBleGl0CisgICAgICAtLXZlcnNpb24gICAgICAgICAgIHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKyAgICAgIC0tcm9vdCBkaXIgICAgICAgICAgdHJlYXQgZGlyIGFzIGJlaW5nIHRoZSByb290IG9mIHRoZSB0YXJnZXQKKyAgLXMsIC0tc2hvdy1zeXN0ZW0gICAgICAgbWFyayBsaWJzIGZyb20gdGhlIHN5c3Jvb3Qgd2l0aCBhIHRyYWlsaW5nICdbKl0nCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBsaWJzIGZvdW5kIHZpYSBSUEFUSCB3aXRoIGEgdHJhaWxpbmcgJ1srXScKKworX0VPRl8KKyAgICBjYXQgPDxfRU9GXyB8Zm10Ciske215X25hbWV9IHRyaWVzIHRvIG1pbWljayB0aGUgYmVoYXZpb3Igb2YgYSByZWFsIG5hdGl2ZSBsZGQsIGJ1dCBjYW4gYmUKK3VzZWQgaW4gYSBjcm9zcy1kZXZlbG9wbWVudCBlbnZpcm9ubWVudC4gSGVyZSBpcyBob3cgaXQgZGlmZmVycyBmcm9tIGEKK3JlYWwgbmF0aXZlIGxkZDoKKworSWYgdGhlIENUX1hMRERfVkVSQk9TRSB2YXJpYWJsZSBpcyBzZXQgYW5kIG5vbi1lbXB0eSwgdGhlbiAke215X25hbWV9IHdpbGwKK3ByaW50IGEgbG90IG9mIGRlYnVnIG1lc3NhZ2VzLCBleHBsYWluaW5nIGhvdyBpdCBidWlsZHMgdGhlIGxpYnJhcnkKK3NlYXJjaCBwYXRoLCBhbmQgaG93IGVhY2ggbGlicmFyeSB3YXMgZm91bmQgYW5kIHdoeS4KKworVGhlIExEX0xJQlJBUllfUEFUSCB2YXJpYWJsZSBpcyBub3QgdXNlZCwgYXMgaXQgY2FuIG5vdCByZWxpYWJseSBiZQorZ3Vlc3NlZCBleGNlcHQgYXQgcnVudGltZSwgYW5kIHdlIGNhbid0IHJ1bi4KKworJHtteV9uYW1lfSBkb2VzIG5vdCBzY2FuIC9ldGMvbGQuc28uY2FjaGUsIGJ1dCBpbnN0ZWFkIHVzZXMgL2V0Yy9sZC5zby5jb25mCisoaXQgdW5kZXJzdGFuZHMgdGhlIGluY2x1ZGUgZGlyZWN0aXZlcyB0aGVyZWluIGZvciBsaWJjZXMgdGhhdCBoYXZlIHRoYXQpLgorCiske215X25hbWV9IGFsc28gaW50ZXJwcmV0cyAodHJpZXMgdG8hKSB0aGUgUlBBVEgvUlVOUEFUSCByZWNvcmRzIGZvdW5kIGluCit0aGUgZHluYW1pYyBFTEYgc2VjdGlvbi4gU3VjaCBwYXRocyBhcmUgc2VhcmNoZWQgZm9yIG9ubHkgcmVsYXRpdmUgdG8KK3RoZSBzcGVjaWZpZWQgcm9vdCwgbm90IGZyb20gdGhlIHN5c3Jvb3QgKHNlZSBiZWxvdykuIEFsc28sIHRob3NlIHBhdGhzCithcmUgc2VhcmNoZWQgZm9yIG5vdCBvbmx5IGZvciB0aGUgZmlsZSB0aGV5IGFwcGVhciBpbiwgYnV0IGFsc28gZm9yIGl0cworZGVwZW5kZW5jaWVzLgorCiske215X25hbWV9IHdpbGwgc2VhcmNoIHRoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIHdpdGggLS1yb290IGZvciBsaWJyYXJpZXMKK3RvIHJlc29sdmUgdGhlIE5FRURFRCB0YWdzLiBJZiAtLXJvb3QgaXMgbm90IHNldCwgdGhlbiAke215X25hbWV9IHdpbGwKK3VzZSB0aGUgdmFsdWUgaW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFwke0NUX1hMRERfUk9PVH0uIElmIG5laXRoZXIKK2lzIHNldCwgdGhlbiB0aGlzIGlzIGFuIGVycm9yLgorCitJZiBORUVERUQgbGlicmFyaWVzIGNhbid0IGJlIGZvdW5kIGluIHRoZSBzcGVjaWZpZWQgcm9vdCBkaXJlY3RvcnksIHRoZW4KKyR7bXlfbmFtZX0gd2lsbCBhbHNvIGxvb2sgaW4gdGhlIHN5c3Jvb3Qgb2YgdGhlIHRvb2xjaGFpbiB0byBzZWUgaWYgaXQKK2NhbiBmaW5kIHRoZW0uCisKK0ZvciBORUVERUQgbGlicmFyaWVzIHRoYXQgd2VyZSBmb3VuZCwgdGhlIG91dHB1dCB3aWxsIGxvb2sgbGlrZToKKyAgICAgICAgbGlibmVlZGVkLnNvID0+IC9wYXRoL3RvL2xpYm5lZWRlZC5zbyAoMHhsb2FkYWRkcikKKworYW5kIGZvciB0aG9zZSB0aGF0IHdlcmUgbm90IGZvdW5kLCB0aGUgb3V0cHV0IHdpbGwgbG9vayBsaWtlOgorICAgICAgICBsaWJuZWVkZWQuc28gbm90IGZvdW5kCisKK1RoZSBwYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlIHNwZWNpZmllZCByb290IGRpcmVjdG9yeSwgb3IgdG8gdGhlIHN5c3Jvb3QKKyhlZy4gL2xpYi9saWJuZWVkZWQuc28sIC91c3IvbGliL2xpYm5lZWRlZC5zbywgYW5kIHNvIG9uLi4uKS4KKworVGhlIGV4cGVjdGVkIGxvYWQgYWRkcmVzcyAnbG9hZGFkZHInIGlzIGEgZmFrZWQgYWRkcmVzcyB0byBtYXRjaCB0aGUgb3V0cHV0CitvZiB0aGUgcmVhbCBsZGQsIGJ1dCBoYXMgbm8gYWN0dWFsIG1lYW5pbmcgKHNldCB0byBzb21lIGNvbnN0YW50cyBmb3Igbm93LAorMHg4YmFkZjAwZCBmb3IgbGlicmFyaWVzIGZyb20gdGhlIHN5c3Jvb3QsIDB4ZGVhZGMwZGUgZm9yIHRob3NlIGZvdW5kIHZpYQordGhlIFJQQVRIL1JVTlBBVEggcmVjb3JkcywgYW5kIDB4ZGVhZGJlZWYgZm9yIG90aGVycykuCitfRU9GXworCisjIFVuaW1wbGVtZXRlZCB5ZXQ6CisjICAtZCwgLS1kYXRhLXJlbG9jcyAgICAgICBwcm9jZXNzIGRhdGEgcmVsb2NhdGlvbnMKKyMgIC1yLCAtLWZ1bmN0aW9uLXJlbG9jcyAgIHByb2Nlc3MgZGF0YSBhbmQgZnVuY3Rpb24gcmVsb2NhdGlvbnMKKyMgIC11LCAtLXVudXNlZCAgICAgICAgICAgIHByaW50IHVudXNlZCBkaXJlY3QgZGVwZW5kZW5jaWVzCisjICAtdiwgLS12ZXJib3NlICAgICAgICAgICBwcmludCBhbGwgaW5mb3JtYXRpb24KKworIyBTZWUgYWxzbyB0aGlzIHRocmVhZDoKKyMgIGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9tbC9jcm9zc2djYy8yMDA4LTA5L21zZzAwMDU3Lmh0bWwKK30KKworIyBQYXJzZSBjb21tYW5kIGxpbmUgb3B0aW9ucworcm9vdD0iJHtDVF9YTEREX1JPT1R9Igorc2hvd19zeXN0ZW09Cit3aGlsZSB0cnVlOyBkbworICAgIGNhc2UgIiR7MX0iIGluCisgICAgICAgIC0taGVscCkKKyAgICAgICAgICAgIHNob3dfaGVscAorICAgICAgICAgICAgZXhpdCAwCisgICAgICAgICAgICA7OworICAgICAgICAtLXZlcnNpb24pCisgICAgICAgICAgICBzaG93X3ZlcnNpb24KKyAgICAgICAgICAgIGV4aXQgMAorICAgICAgICAgICAgOzsKKyAgICAgICAgLS1yb290KQorICAgICAgICAgICAgcm9vdD0iJDIiCisgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgOzsKKyAgICAgICAgLS1yb290PSopCisgICAgICAgICAgICByb290PSIkezEjLS1yb290PX0iCisgICAgICAgICAgICA7OworICAgICAgICAtLXNob3ctc3lzdGVtfC1zKQorICAgICAgICAgICAgc2hvd19zeXN0ZW09MQorICAgICAgICAgICAgOzsKKyAgICAgICAgLSopCisgICAgICAgICAgICBkb19vcHRfZXJyb3IgInVucmVjb2duaXplZCBvcHRpb24gXGAkezF9JyIKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICA7OworICAgIGVzYWMKKyAgICBzaGlmdAorZG9uZQorCisjIFNhbml0eSBjaGVja3MKK2lmIFsgLXogIiR7cm9vdH0iIF07IHRoZW4KKyAgICBkb19vcHRfZXJyb3IgIm5vIHJvb3QgZ2l2ZW4iCisgICAgZXhpdCAxCitmaQoraWYgWyAhIC1kICIke3Jvb3R9IiBdOyB0aGVuCisgICAgZG9fZXJyb3IgIlxgJHtyb290fSc6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiCisgICAgZXhpdCAxCitmaQorCitzeXNyb290PSIkKCAiJHtnY2N9IiAtcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbCApIgoraWYgWyAteiAiJHtzeXNyb290fSIgXTsgdGhlbgorICAgIHN5c3Jvb3Q9IiQoICIke2djY30iIC1wcmludC1maWxlLW5hbWU9bGliYy5zbyAyPi9kZXYvbnVsbCAgIFwKKyAgICAgICAgICAgICAgICB8c2VkIC1yIC1lICdzOi91c3IvbGliL2xpYmMuc28kOjo7JyAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICkiCitmaQoraWYgWyAteiAiJHtzeXNyb290fSIgXTsgdGhlbgorICAgIGRvX2Vycm9yICJ1bmFibGUgdG8gZmluZCBzeXNyb290IGZvciBcYCR7Z2NjfSciCitmaQorCitkb19yZXBvcnRfbmVlZGVkX2ZvdW5kKCkgeworICAgIGxvY2FsIG5lZWRlZD0iJHsxfSIKKyAgICBsb2NhbCBwYXRoPSIkezJ9IgorICAgIGxvY2FsIG9yaWdpbj0iJHszfSIKKyAgICBsb2NhbCBsb2FkYWRkcgorICAgIGxvY2FsIHN5cworCisgICAgY2FzZSAiJHtvcmlnaW59IiBpbgorICAgICAgICByb290KQorICAgICAgICAgICAgbG9hZGFkZHI9IiR7ZmFrZV9sb2FkX2FkZHJfcm9vdH0iCisgICAgICAgICAgICA7OworICAgICAgICBycGF0aCkKKyAgICAgICAgICAgIGxvYWRhZGRyPSIke2Zha2VfbG9hZF9hZGRyX3JwYXRofSIKKyAgICAgICAgICAgIGlmIFsgLW4gIiR7c2hvd19zeXN0ZW19IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgc3lzPSIgWytdIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgIHN5c3Jvb3QpCisgICAgICAgICAgICBsb2FkYWRkcj0iJHtmYWtlX2xvYWRfYWRkcl9zeXNyb290fSIKKyAgICAgICAgICAgIGlmIFsgLW4gIiR7c2hvd19zeXN0ZW19IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgc3lzPSIgWypdIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworCisgICAgcHJpbnRmICIlOHMlcyA9PiAlcyAoMHglMCp4KSVzXG4iICAgXAorICAgICAgICAgICAiIiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIiR7bmVlZGVkfSIgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICIke3BhdGh9IiAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAiJCgoYml0cy80KSkiICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIiR7bG9hZGFkZHJ9IiAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICIke3N5c30iCit9CisKKyMgU2VhcmNoIGEgbmVlZGVkIGZpbGUsIHNjYW5uaW5nICR7bGliX2Rpcn0gaW4gdGhlIHJvb3QgZGlyZWN0b3J5Citkb19maW5kX25lZWRlZCgpIHsKKyAgICBsb2NhbCBuZWVkZWQ9IiR7MX0iCisgICAgbG9jYWwgLWEgbGlzdAorICAgIGxvY2FsIC1hIGRpcnMKKyAgICBsb2NhbCBmb3VuZAorICAgIGxvY2FsIHdoZXJlCisgICAgbG9jYWwgYmFzZQorICAgIGxvY2FsIGQgaQorCisgICAgZG9fdHJhY2UgIlNlYXJjaGluZyBmb3IgJyVzJ1xuIiAiJHtuZWVkZWR9IgorCisgICAgIyBycGF0aCBzaGFsbCBjb21lIGZpcnN0IQorICAgIGxpc3Q9KCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJycGF0aDoke3Jvb3R9IiAgICAgICAgIFwKKyAgICAgICAgInJvb3Q6JHtyb290fSIgICAgICAgICAgXAorICAgICAgICAic3lzcm9vdDoke3N5c3Jvb3R9IiAgICBcCisgICAgKQorCisgICAgZm9yIGkgaW4gIiR7bGlzdFtAXX0iOyBkbworICAgICAgICB3aGVyZT0iJHtpJSU6Kn0iCisgICAgICAgIGJhc2U9IiR7aSMqOn0iCisgICAgICAgIGlmIFsgIiR7d2hlcmV9IiA9ICJycGF0aCIgXTsgdGhlbgorICAgICAgICAgICAgZGlycz0oICIke3NlYXJjaF9ycGF0aFtAXX0iICkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGlycz0oICIke25lZWRlZF9zZWFyY2hfcGF0aFtAXX0iICkKKyAgICAgICAgZmkKKyAgICAgICAgZm9yIGQgaW4gIiR7ZGlyc1tAXX0iOyBkbworICAgICAgICAgICAgZG9fdHJhY2UgIi0+IGxvb2tpbmcgaW4gJyVzJyAoJXMpXG4iICIke2R9IiAiJHt3aGVyZX0iCisgICAgICAgICAgICBpZiBbIC1mICIke2Jhc2V9JHtkfS8ke25lZWRlZH0iIF07IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZD0iJHtkfS8ke25lZWRlZH0iCisgICAgICAgICAgICAgICAgZG9fdHJhY2UgIi0tLT4gZm91bmRcbiIKKyAgICAgICAgICAgICAgICBicmVhayAyCisgICAgICAgICAgICBmaQorICAgICAgICBkb25lCisgICAgZG9uZQorCisgICAgaWYgWyAtbiAiJHtmb3VuZH0iIF07IHRoZW4KKyAgICAgICAgZG9fcmVwb3J0X25lZWRlZF9mb3VuZCAiJHtuZWVkZWR9IiAiJHtmb3VuZH0iICIke3doZXJlfSIKKyAgICAgICAgZG9fcHJvY2Vzc19maWxlICIke2Jhc2V9JHtmb3VuZH0iCisgICAgZWxzZQorICAgICAgICBwcmludGYgIiU4cyVzIG5vdCBmb3VuZFxuIiAiIiAiJHtuZWVkZWR9IgorICAgIGZpCisKKyAgICBkb190cmFjZSAiRG9uZSBzZWFyY2hpbmcgZm9yICclcydcbiIgIiR7bmVlZGVkfSIKK30KKworIyBTY2FuIGEgZmlsZSBmb3IgYWxsIE5FRURFRCB0YWdzCitkb19wcm9jZXNzX2ZpbGUoKSB7CisgICAgbG9jYWwgZmlsZT0iJHsxfSIKKyAgICBsb2NhbCAtYSBzYXZlX3NlYXJjaF9ycGF0aAorICAgIGxvY2FsIG4gbQorICAgIGxvY2FsIGZvdW5kCisKKyAgICBkb190cmFjZSAiUGFyc2luZyBmaWxlICclcydcbiIgIiR7ZmlsZX0iCisKKyAgICBzYXZlX3NlYXJjaF9ycGF0aD0oICIke3NlYXJjaF9ycGF0aFtAXX0iICkKKyAgICBmb3IgbiBpbiAkKCAiJHtyZWFkZWxmfSIgLWQgIiR7ZmlsZX0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB8IiR7Z3JlcH0iIC1FICdcKChSUEFUSHxSVU5QQVRIKVwpJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB8IiR7c2VkfSIgLXIgLWUgJ3MvXi4qTGlicmFyeSByKHx1bilwYXRoOltbOnNwYWNlOl1dK1xbKC4qKVxdJC9cMi87J1wKKyAgICAgICAgICAgICAgKTsgZG8KKyAgICAgICAgZG9fdHJhY2UgIi0+IGFkZGluZyBycGF0aCAnJXMnXG4iICIke259IgorICAgICAgICBzZWFyY2hfcnBhdGgrPSggIiR7bn0iICkKKyAgICBkb25lCisgICAgZG9fdHJhY2UgIjogc2VhcmNoIHBhdGg6XG4iCisgICAgZm9yIG4gaW4gIiR7c2VhcmNoX3JwYXRoW0BdfSIgIiR7bmVlZGVkX3NlYXJjaF9wYXRoW0BdfSI7IGRvCisgICAgICAgIGRvX3RyYWNlICI6IC0gJyVzJ1xuIiAiJHtufSIKKyAgICBkb25lCisgICAgZG9fdHJhY2UgIjogZW5kIHNlYXJjaCBwYXRoIgorCisgICAgZm9yIG4gaW4gJCggIiR7cmVhZGVsZn0iIC1kICIke2ZpbGV9IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgfCIke2dyZXB9IiAtRSAnXChORUVERURcKScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgfCIke3NlZH0iIC1yIC1lICdzL14uKlNoYXJlZCBsaWJyYXJ5OltbOnNwYWNlOl1dK1xbKC4qKVxdJC9cMS87JyAgICBcCisgICAgICAgICAgICAgICk7IGRvCisgICAgICAgIGZvdW5kPTAKKyAgICAgICAgZm9yIG0gaW4gIiR7bmVlZGVkX2xpc3RbQF19IjsgZG8KKyAgICAgICAgICAgIFsgIiR7bn0iID0gIiR7bX0iIF0gJiYgZm91bmQ9MSAmJiBicmVhaworICAgICAgICBkb25lCisgICAgICAgIGlmIFsgJHtmb3VuZH0gLW5lIDAgXTsgdGhlbgorICAgICAgICAgICAgZG9fdHJhY2UgIi0+IHNraXBwaW5nIGFscmVhZHkga25vd24gZGVwZW5kZW5jeSAnJXMnXG4iICIke259IgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZmkKKyAgICAgICAgZG9fdHJhY2UgIi0+IGhhbmRsaW5nIG5ldyBkZXBlbmRlbmN5ICclcydcbiIgIiR7bn0iCisgICAgICAgIG5lZWRlZF9saXN0Kz0oICIke259IiApCisgICAgICAgIGRvX2ZpbmRfbmVlZGVkICIke259IgorICAgICAgICBkb190cmFjZSAiLT4gZG9uZSBoYW5kbGluZyBkZXBlbmRlbmN5ICclcydcbiIgIiR7bn0iCisgICAgZG9uZQorCisgICAgc2VhcmNoX3JwYXRoPSggIiR7c2F2ZV9zZWFyY2hfcnBhdGhbQF19IiApCisKKyAgICBkb190cmFjZSAiRmluaXNoZWQgcGFyc2luZyBmaWxlICclcydcbiIgIiR7ZmlsZX0iCit9CisKKyMgUmVjdXJzaXZlbHkgc2NhbiBhIC9ldGMvbGQuc28uY29uZiBmaWxlCitkb19zY2FuX2V0Y19sZHNvY29uZigpIHsKKyAgICBsb2NhbCBsZHNvY29uZj0iJHsxfSIKKyAgICBsb2NhbCBnCisgICAgbG9jYWwgZgorCisgICAgWyAtZiAiJHtsZHNvY29uZn0iIF0gfHwgcmV0dXJuIDAKKyAgICBkb190cmFjZSAiUGFyc2luZyBsZC5zby5jb25mOiAnJXMnXG4iICIke2xkc29jb25mfSIKKworICAgIHdoaWxlIHJlYWQgbGluZTsgZG8KKyAgICAgICAgY2FzZSAiJHtsaW5lfSIgaW4KKyAgICAgICAgICAgIGluY2x1ZGVcICopCisgICAgICAgICAgICAgICAgZz0iJHtyb290fSR7bGluZSNpbmNsdWRlIH0iCisgICAgICAgICAgICAgICAgZG9fdHJhY2UgIi0+IGhhbmRsaW5nIGluY2x1ZGUgZGlyZWN0aXZlICclcydcbiIgIiR7Z30iCisgICAgICAgICAgICAgICAgZm9yIGYgaW4gJHtnfTsgZG8KKyAgICAgICAgICAgICAgICAgICAgZG9fc2Nhbl9ldGNfbGRzb2NvbmYgIiR7Zn0iCisgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgIGRvX3RyYWNlICItPiBmaW5pc2hlZCBoYW5kbGluZyBpbmNsdWRlIGRpcmVjdGl2ZSAnJXMnXG4iICIke2d9IgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBcIyp8IiIpCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgZG9fdHJhY2UgIi0+IGFkZGluZyBzZWFyY2ggZGlyICclcydcbiIgIiR7bGluZX0iCisgICAgICAgICAgICAgICAgbmVlZGVkX3NlYXJjaF9wYXRoKz0oICIke2xpbmV9IiApCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgIGRvbmUgPCIke2xkc29jb25mfSIKKworICAgIGRvX3RyYWNlICJGaW5pc2hlZCBwYXJzaW5nIGxkLnNvLmNvbmY6ICclcydcbiIgIiR7bGRzb2NvbmZ9IgorfQorCisjIEJ1aWxkIHVwIHRoZSBmdWxsIGxpc3Qgb2Ygc2VhcmNoIGRpcmVjdG9yaWVzCitkZWNsYXJlIC1hIG5lZWRlZF9zZWFyY2hfcGF0aAorZG9fdHJhY2UgIkFkZGluZyBiYXNpYyBsaWIgZGlyc1xuIgorbGRfbGlicmFyeV9wYXRoPSIke2xkX2xpYnJhcnlfcGF0aH06Igord2hpbGUgWyAtbiAiJHtsZF9saWJyYXJ5X3BhdGh9IiBdOyBkbworICAgIGQ9IiR7bGRfbGlicmFyeV9wYXRoJSU6Kn0iCisgICAgaWYgWyAtbiAiJHtkfSIgXTsgdGhlbgorICAgICAgICBkb190cmFjZSAiLT4gYWRkaW5nIHNlYXJjaCBkaXIgJyVzJ1xuIiAiJHtkfSIKKyAgICAgICAgbmVlZGVkX3NlYXJjaF9wYXRoKz0oICIke2R9IiApCisgICAgZmkKKyAgICBsZF9saWJyYXJ5X3BhdGg9IiR7bGRfbGlicmFyeV9wYXRoIyo6fSIKK2RvbmUKK2RvX3RyYWNlICJEb25lIGFkZGluZyBiYXNpYyBsaWIgZGlyc1xuIgorZG9fdHJhY2UgIlNjYW5uaW5nICcvZXRjL2xkLnNvLmNvbmYnXG4iCitkb19zY2FuX2V0Y19sZHNvY29uZiAiJHtyb290fS9ldGMvbGQuc28uY29uZiIKK2RvX3RyYWNlICJEb25lIHNjYW5uaW5nICcvZXRjL2xkLnNvLmNvbmYnXG4iCitkb190cmFjZSAiU2VhcmNoIHBhdGg6XG4iCitmb3IgcCBpbiAiJHtuZWVkZWRfc2VhcmNoX3BhdGhbQF19IjsgZG8KKyAgICBkb190cmFjZSAiLT4gJyVzJ1xuIiAiJHtwfSIKK2RvbmUKKworZGVjbGFyZSAtYSBuZWVkZWRfbGlzdAorZGVjbGFyZSAtYSBzZWFyY2hfcnBhdGgKK2RvX3RyYWNlICJTY2FubmluZyBmaWxlICclcydcbiIgIiR7MX0iCitkb19wcm9jZXNzX2ZpbGUgIiR7MX0iCitkb190cmFjZSAiRG9uZSBzY2FubmluZyBmaWxlICclcydcbiIgIiR7MX0iCmRpZmYgLS1naXQgYS9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1ubSBiL2Jpbi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLW5tCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk0OTAwZjQKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1ubQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1vYmpjb3B5IGIvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktb2JqY29weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYzZjNzE1Ci0tLSAvZGV2L251bGwKKysrIGIvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktb2JqY29weQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1vYmpkdW1wIGIvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktb2JqZHVtcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZmEyMGQxCi0tLSAvZGV2L251bGwKKysrIGIvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktb2JqZHVtcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1wb3B1bGF0ZSBiL2Jpbi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLXBvcHVsYXRlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFlYzFlODAKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1wb3B1bGF0ZQpAQCAtMCwwICsxLDI5NyBAQAorIyEvYmluL3NoCisjIFRoaXMgc2NyaXB0IHdpbGwgcG9wdWxhdGUgdGhlIHJvb3QgZGlyZWN0b3J5IHdpdGggbGlicyBmcm9tIHRoZSBzeXNyb290LgorIyAoQykgMjAwNyBZYW5uIEUuIE1PUklOCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgdjIKK3NldCAtZQorCisjIFVzZSB0aGUgdG9vbHMgZGlzY292ZXJlZCBieSBjcm9zc3Rvb2wtTkcncyAuL2NvbmZpZ3VyZToKK2luc3RhbGw9Ii91c3IvYmluL2luc3RhbGwiCitncmVwPSIvYmluL2dyZXAiCitzZWQ9Ii9iaW4vc2VkIgorCisjIERldGVjdCB3aGVyZSB0aGUgdG9vbGNoYWluIGlzOgorQ1RfUFJFRklYX0RJUj0iJChjZCAiJChkaXJuYW1lICIkMCIpLy4uIjsgcHdkKSIKK0NUX0dDQz0iJHswJS1wb3B1bGF0ZX0tZ2NjIgorQ1RfUkVBREVMRj0iJHswJS1wb3B1bGF0ZX0tcmVhZGVsZiIKK0NUX0NGR19QUkVGSVhfRElSPSIkKCIke0NUX0dDQ30iIC12IDI+JjEgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICB8dHIgJyAnICdcbicgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgfCIke2dyZXB9IiAtRSAtLSAnLS1wcmVmaXg9JyAgIFwKKyAgICAgICAgICAgICAgICAgICAgIHxjdXQgLWQgPSAtZiAyLQorICAgICAgICAgICAgICAgICAgICApIgorQ1RfQ0ZHX1NZU1JPT1RfRElSPSIkKCIke0NUX0dDQ30iIC12IDI+JjEgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIHx0ciAnICcgJ1xuJyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIHwiJHtncmVwfSIgLUUgLS0gJy0td2l0aC1zeXNyb290PScgICAgXAorICAgICAgICAgICAgICAgICAgICAgIHxjdXQgLWQgPSAtZiAyLQorICAgICAgICAgICAgICAgICAgICAgKSIKK0NUX1NZU1JPT1RfRElSPSIkKHByaW50ZiAiJHtDVF9DRkdfU1lTUk9PVF9ESVJ9XG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgfCIke3NlZH0iIC1yIC1lICJzOl4ke0NUX0NGR19QUkVGSVhfRElSfToke0NUX1BSRUZJWF9ESVJ9OjsiICBcCisgICAgICAgICAgICAgICAgICB8IiR7c2VkfSIgLXIgLWUgJ3MsLyssLyxnOycgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgKSIKKworbXluYW1lPSQoYmFzZW5hbWUgIiQwIikKKworZG9IZWxwKCkgeworICAgIGNhdCA8PF9FT0ZfCitOQU1FCisgICAgJG15bmFtZSAtIHBvcHVsYXRlIHRoZSB0YXJnZXQgcm9vdCBmaWxlIHN5c3RlbQorCitTWU5PUFNJUworICAgICRteW5hbWUgT1BUSU9OUyAtcyBzb3VyY2Vfcm9vdCAtZCBkZXN0aW5hdGlvbl9yb290CisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBzY3JpcHQgd2lsbCAncG9wdWxhdGUnIHlvdXIgdGFyZ2V0IHJvb3QgZmlsZSBzeXN0ZW0gJ3NvdXJjZV9yb290JworICAgIHdpdGggbGlicmFyaWVzIGZyb20gdGhlIHRvb2xjaGFpbiAoZWcuIGxpYmMuc28uLi4pLCBzdG9yaW5nIHRoZSByZXN1bHQKKyAgICBpbnRvICdkc3RfZGlyJy4KKworT1BUSU9OUworICAgIC1zIHNyY19kaXIKKyAgICAgICAgVXNlICdzcmNfZGlyJyBhcyB0aGUgdW4tcG9wdWxhdGVkIChzb3VyY2UpIHJvb3QgZGlyZWN0b3J5LgorCisgICAgLWQgZHN0X2RpcgorICAgICAgICBVc2UgJ2RzdF9kaXInIGFzIHRoZSBwbGFjZSB0byBwdXQgdGhlIHBvcHVsYXRlZCByb290IGRpcmVjdG9yeS4KKyAgICAgICAgU2VlIHRoZSAtZiBhbmQgLW0gb3B0aW9ucywgYmVsb3csIG9uIHRoZSByZXF1aXJlZCAobm9uLSlleGlzdGVuY2UKKyAgICAgICAgb2YgdGhpcyBkaXJlY3RvcnkuCisKKyAgICAtciBzeXNyb290X2RpcgorICAgICAgICBVc2UgJ3N5c3Jvb3RfZGlyJyBhcyB0aGUgc3lzcm9vdCBpbnN0ZWFkIG9mIHRoZSB0b29sY2hhaW4gZGVmYXVsdC4KKworICAgIC1sIG5hbWUxWzpuYW1lMlsuLi5dXQorICAgICAgICBBbHdheXMgYWRkIHRoZSBzcGVjaWZpZWQgc2hhcmVkIGxpYnJhcnkvaWVzIG5hbWUxLCBuYW1lMi4uLiBmcm9tIHRoZQorICAgICAgICB0b29sY2hhaW4gKGluIHRoZSBzeXNyb290KS4gQWN0dWFsIGxpYnJhcnkgbmFtZXMgYXJlIHNlYXJjaGVkIGFzCisgICAgICAgIGZvbGxvd3MgKHdoZXJlICduYW1lJyBpcyByZXBsYWNlZCB3aXRoIHRoZSBnaXZlbiBuYW1lKSBpbiB0aGUKKyAgICAgICAgc3lzcm9vdCBkaXJlY3Rvcnk6CisgICAgICAgICAgLSBsaWJuYW1lLnNvCisgICAgICAgICAgLSBuYW1lLnNvCisgICAgICAgICAgLSBuYW1lCisgICAgICAgIElmIHRoZSBmaWxlIGlzIGZvdW5kLCB0aGVuIHRoZSBTT05BTUUgb2YgdGhlIGxpYnJhcnkgaXMgdXNlZCwgYW5kIHRoZQorICAgICAgICBsaWJyYXJ5IGlzIGNvcGllZCB3aXRoIHRoYXQgbmFtZS4gSWYgdGhlIGxpYnJhcnkgd2FzIG5vdCBmb3VuZCwgdGhpcworICAgICAgICB5aWVsZHMgYW4gZXJyb3IgKHVubGVzcyAtZiB3YXMgZ2l2ZW4pLgorCisgICAgLUwgZmlsZQorICAgICAgICBSZWFkICdmaWxlJyBmb3IgYSBsaXN0IG9mIHNoYXJlZCBsaWJyYXJpZXMgdG8gYWx3YXlzIGFkZCBmcm9tIHRoZQorICAgICAgICB0b29sY2hhaW4uIFRoZSBmaWxlIHNob3VsZCBjb250YWluIG9uZSBsaWJyYXJ5IG5hbWUgcGVyIGxpbmU7IHRleHQKKyAgICAgICAgYWZ0ZXIgYSAjIGlzIGlnbm9yZWQgdW50aWwgdGhlIGVuZCBvZiB0aGUgbGluZTsgc3BhY2VzIGFyZSBpZ25vcmVkOworICAgICAgICBlbXB0eSBsaW5lcyBhcmUgaWdub3JlZC4gTGlicmFyaWVzIGFyZSBzZWFyY2hlZCBmb3IgYXMgd2l0aCAtbC4KKworICAgIC1mICBGb3JjZSBleGVjdXRpb246IGlmIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cywgaXQgd2lsbCBiZQorICAgICAgICByZW1vdmVkIGZpcnN0OyBpZiBhIHNwZWNpZmllZCBsaWJyYXJ5IChhYm92ZSkgd2FzIG5vdCBmb3VuZCwgY29udGludWUuCisgICAgICAgIE5vdGU6IGlmIHVzaW5nIC1tIGFuZCB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzLCBpdAorICAgICAgICBpcyAqbm90KiByZW1vdmVkLCBzZWUgYmVsb3cuCisKKyAgICAtbSAgTWVyZ2UgdGhlIHNvdXJjZSByb290IGRpcmVjdG9yeSB3aXRoIHRoZSBkZXN0aW5hdGlvbiByb290IGRpcmVjdG9yeS4KKyAgICAgICAgSWYgdGhlIGxhdHRlciBkb2VzIG5vdCBleGlzdCwgaXQgaXMgY3JlYXRlZCwgYW5kIC1tIGlzIGlnbm9yZWQuCisgICAgICAgIElmIHRoZSBkZXN0aW5hdGlvbiByb290IGRpcmVjdG9yeSBleGlzdHMsIHRoZW4gdGhlIGNvbnRlbnQgb2YgdGhlCisgICAgICAgIHNvdXJjZSByb290IGRpcmVjdG9yeSBpcyBjb3BpZWQgaW4gdGhlcmUsIGFuZCB0aGUgcmVzdWx0IGlzIHBvcHVsYXRlZAorICAgICAgICBhcyB1c3VhbC4KKyAgICAgICAgSXQgY2FuIGJlIHVzZWZ1bCBpZiBjb25zdHJ1Y3RpbmcgYSByb290ZnMgaW5jcmVtZW50YWxseSBmcm9tIG1hbnkKKyAgICAgICAgc21hbGxlciBzb3VyY2Ugcm9vdCBkaXJlY3Rvcmllcywgb3IgaWYgeW91ciBkZXN0aW5hdGlvbiByb290IGRpcmVjdG9yeQorICAgICAgICBpcyBhbiBORlMgZXhwb3J0IHRoYXQgeW91ciB0YXJnZXQgbW91bnRzIGFzIC8gKGFuZCB5b3UgZG9uJ3Qgd2FudCB0bworICAgICAgICByZS1ydW4gZXhwb3J0ZnMgLWF2IGV2ZXJ5dGltZSkuIFVTRSBXSVRIIENBUkUhCisKKyAgICAtdiAgQmUgdmVyYm9zZS4gQnkgZGVmYXVsdCwgcG9wdWxhdGUgaXMgYWJzb2x1dGVseSBzaWxlbnQuCisKK19FT0ZfCit9CisKK0NUX1JPT1RfU1JDX0RJUj0KK0NUX1JPT1RfRFNUX0RJUj0KK0NUX0xJQl9MSVNUPQorQ1RfTElCX0ZJTEU9CitDVF9NRVJHRT0KK0NUX0ZPUkNFPQorQ1RfUFJJTlRGPToKK09QVElORD0xCit3aGlsZSBnZXRvcHRzICI6czpkOnI6bDpMOmZtdmgiIENUX09QVDsgZG8KKyAgICBjYXNlICIke0NUX09QVH0iIGluCisgICAgICAgIHMpICBDVF9ST09UX1NSQ19ESVI9IiR7T1BUQVJHfSI7OworICAgICAgICBkKSAgQ1RfUk9PVF9EU1RfRElSPSIke09QVEFSR30iOzsKKyAgICAgICAgcikgIENUX1NZU1JPT1RfRElSPSIke09QVEFSR30iOzsKKyAgICAgICAgbCkgIENUX0xJQl9MSVNUPSIke0NUX0xJQl9MSVNUfToke09QVEFSR30iOzsKKyAgICAgICAgTCkgIENUX0xJQl9GSUxFPSIke09QVEFSR30iOzsKKyAgICAgICAgZikgIENUX0ZPUkNFPXk7OworICAgICAgICBtKSAgQ1RfTUVSR0U9eTs7CisgICAgICAgIHYpICBDVF9QUklOVEY9cHJpbnRmOzsKKyAgICAgICAgaCkgIGRvSGVscAorICAgICAgICAgICAgZXhpdCAwCisgICAgICAgICAgICA7OworICAgICAgICA6KSAgcHJpbnRmICIkbXluYW1lOiAnLSR7T1BUQVJHfScgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQuXG4iCisgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgICAgIDs7CisgICAgICAgID8pICBwcmludGYgIiRteW5hbWU6IHVua25vd24gb3B0aW9uICctJHtPUFRBUkd9Jy5cbiIKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKKyMgU2FuaXR5IGNoZWNrcworaWYgWyAteiAiJHtDVF9ST09UX1NSQ19ESVJ9IiAtbyAteiAiJHtDVF9ST09UX0RTVF9ESVJ9IiBdOyB0aGVuCisgICAgZG9IZWxwCisgICAgZXhpdCAxCitmaQoraWYgWyAhIC1kICIke0NUX1JPT1RfU1JDX0RJUn0iIF07IHRoZW4KKyAgICBwcmludGYgIiRteW5hbWU6ICcke0NUX1JPT1RfU1JDX0RJUn0nOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XG4iCisgICAgZXhpdCAxCitmaQoraWYgWyAhIC1kICIke0NUX1NZU1JPT1RfRElSfSIgXTsgdGhlbgorICAgIHByaW50ZiAiJG15bmFtZTogJyR7Q1RfU1lTUk9PVF9ESVJ9Jzogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVxuIgorICAgIGV4aXQgMQorZmkKKyMgSWYgdGhlIGRlc3QgZGlyIGRvZXMgbm90IGV4aXN0LCBhbGwgaXMgd2VsbAorIyBJZiBtZXJnaW5nLCB3ZSBhY2NlcHQgYW4gZXhpc3RpbmcgZGVzdCBkaXJlY3RvcnkKKyMgSWYgZm9yY2luZyBhbmQgbm90IG1lcmdpbmcsIHdlIHJlbW92ZSBhbiBleGl0aW5nIGRlc3QgZGlyZWN0b3J5CisjIElmIG5vdCBmb3JjaW5nIGFuZCBub3QgbWVyZ2luZywgd2UgZG8gbm90IGFjY2VwdCBhbiBleGl0aW5nIGRlc3QgZGlyZWN0b3J5CitpZiBbIC1kICIke0NUX1JPT1RfRFNUX0RJUn0iIF07IHRoZW4KKyAgICBjYXNlICIke0NUX0ZPUkNFfToke0NUX01FUkdFfSIgaW4KKyAgICAgICAgKjp5KSAgICA7OworICAgICAgICB5OikgICAgIHJtIC1yZiAiJHtDVF9ST09UX0RTVF9ESVJ9Ijs7CisgICAgICAgIDopICAgICAgcHJpbnRmICIkbXluYW1lOiAnJHtDVF9ST09UX0RTVF9ESVJ9JzogYWxyZWFkeSBleGlzdHNcbiIKKyAgICAgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgICAgICAgICA7OworICAgIGVzYWMKK2ZpCitzcmNfaW5vZGU9JChscyAtMWlkICIke0NUX1JPT1RfU1JDX0RJUn0vLiIgfGF3ayAneyBwcmludCAkMSB9JykKK2RzdF9pbm9kZT0kKGxzIC0xaWQgIiR7Q1RfUk9PVF9EU1RfRElSfS8uIiAyPi9kZXYvbnVsbCB8YXdrICd7IHByaW50ICQxIH0nKQoraWYgWyAiJHtzcmNfaW5vZGV9IiAtZXEgIiQoKGRzdF9pbm9kZSswKSkiIF07IHRoZW4KKyAgICBwcmludGYgIiRteW5hbWU6IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIVxuIgorICAgIGV4aXQgMQorZmkKKworIyBDaGVjayBleGlzdGVuY2Ugb2YgdGhlIGZvcmNlZCBsaWJyYXJpZXMgZmlsZQoraWYgWyAtbiAiJHtDVF9MSUJfRklMRX0iIC1hICEgXCggLWYgIiR7Q1RfTElCX0ZJTEV9IiAtYSAtciAiJHtDVF9MSUJfRklMRX0iIFwpIF07IHRoZW4KKyAgICBwcmludGYgIiRteW5hbWU6IGZvcmNlZCBsaWJyYXJpZXMgZmlsZSAnJHtDVF9MSUJfRklMRX0nIG5vdCBmb3VuZCFcbiIKKyAgICBleGl0IDEKK2ZpCisKKyMgQ3JlYXRlIHRoZSB3b3JraW5nIGNvcHksIG5vIGlzc3VlIGlmIGFscmVhZHkgZXhpc3RpbmcKK21rZGlyIC1wICIke0NUX1JPT1RfRFNUX0RJUn0iCisKKyMgTWFrZSBhbGwgcGF0aCBhYnNvbHV0ZQorQ1RfUk9PVF9TUkNfRElSPSQoY2QgIiR7Q1RfUk9PVF9TUkNfRElSfSI7IHB3ZCkKK0NUX1JPT1RfRFNUX0RJUj0kKGNkICIke0NUX1JPT1RfRFNUX0RJUn0iOyBwd2QpCitDVF9TWVNST09UX0RJUj0kKGNkICIke0NUX1NZU1JPT1RfRElSfSI7IHB3ZCkKKworIyBQb3B1bGF0ZSB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IHdpdGggZmlsZXMgZnJvbSB0aGUgc291cmNlIGRpcmVjdG9yeQorY2QgIiR7Q1RfUk9PVF9TUkNfRElSfSIKK2NwIC1hIC4gIiR7Q1RfUk9PVF9EU1RfRElSfSIKK2NkIC0gPi9kZXYvbnVsbAorCisjIEEgZnVuY3Rpb24gZG8gc2VhcmNoIGZvciBhIGxpYnJhcnkKKyMgVXNhZ2U6IGRvX2FkZF9saWIgbGlibmFtZQorIyByZXR1cm5zOiAwIGlmIGxpYnJhcnkgd2FzIGZvdW5kIGFuZCBhZGRlZCwgITAgb3RoZXJ3aXNlCitkb19hZGRfbGliKCkgeworICAgIGxvY2FsIGxpYm5hbWU9IiQxIgorICAgIGxvY2FsIHRydWVfbGlibmFtZQorICAgIGxvY2FsIGRpcgorICAgIGxvY2FsIG1vZGUKKworICAgIGZvciBkaXIgaW4gbGliIHVzci9saWI7IGRvCisgICAgICAgIGlmIFsgLWUgIiR7ZGlyfS8ke2xpYm5hbWV9IiBdOyB0aGVuCisgICAgICAgICAgICAke0NUX1BSSU5URn0gIiAgICBhbHJlYWR5IHByZXNlbnRcbiIKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGZpCisgICAgZG9uZQorICAgIGZvciBkaXIgaW4gbGliIHVzci9saWI7IGRvCisgICAgICAgICR7Q1RfUFJJTlRGfSAiICAgIHRyeWluZyBpbiAnJXMnIiAiJHtkaXJ9IgorICAgICAgICBsaWJmaWxlPSIke0NUX1NZU1JPT1RfRElSfS8ke2Rpcn0vJHtsaWJuYW1lfSIKKyAgICAgICAgJHtDVF9QUklOVEZ9ICI6ICclcydcbiIgIiR7bGliZmlsZX0iCisgICAgICAgIGlmIFsgLWUgIiR7bGliZmlsZX0iIF07IHRoZW4KKyAgICAgICAgICAgIG1rZGlyIC1wICIke2Rpcn0iCisgICAgICAgICAgICB0cnVlX2xpYm5hbWU9JCgiJHtDVF9SRUFERUxGfSIgLWQgIiR7bGliZmlsZX0iICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwiJHtncmVwfSIgIkxpYnJhcnkgc29uYW1lOiIgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgfCIke3NlZH0iIC1yIC1lICdzLC4rXFsoLispXF0gKiQsXDEsOycgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGNhc2UgIiR7bGliZmlsZX0iIGluCisgICAgICAgICAgICAgICAgKi9sZCopICBtb2RlPTA3NTU7OworICAgICAgICAgICAgICAgICopICAgICAgbW9kZT0wNjQ0OzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICR7Q1RfUFJJTlRGfSAiICAgICAgaW5zdGFsbGluZyBhcyAnJXMvJXMnLCBtb2RlPSclcydcbiIgIiR7ZGlyfSIgIiR7dHJ1ZV9saWJuYW1lfSIgIiR7bW9kZX0iCisgICAgICAgICAgICAiJHtpbnN0YWxsfSIgLW0gIiR7bW9kZX0iICIke2xpYmZpbGV9IiAiJHtkaXJ9LyR7dHJ1ZV9saWJuYW1lfSIKKyAgICAgICAgICAgIGRvX3Jlc29sdmVfZGVwcyAiJHtkaXJ9LyR7dHJ1ZV9saWJuYW1lfSIKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGZpCisgICAgZG9uZQorICAgIHJldHVybiAxCit9CisKKyMgQSBmdW5jdGlvbiB0byByZXNvbHZlIGFsbCBORUVERUQgZW50cmllcyBmb3IgdGhlIGdpdmVuIGZpbGUsIHJlbGF0aXZlCisjIHRvIHRoZSB3b3JraW5nIGRpcmVjdG9yeSAoZWcuIGRzdF9kaXIpCisjIFVzYWdlOiBkb19yZXNvbHZlX2RlcHMgc29tZS93aGVyZS9zb21lL2ZpbGUKKyMgUmV0dXJuczogMCwgbWVhbmluZyBhbGwgZGVwZW5kZW5jaWVzIHdlcmUgZm91bmQKKyMgSWYgbm90IGFsbCBkZXBlbmRlbmNpZXMgY291bGQgYmUgZm91bmQsIGV4aXN0cyB3aXRoIGVycm9yIGNvZGUgMQorIyAodW5sZXNzIGZvcmNlZCkKK2RvX3Jlc29sdmVfZGVwcygpIHsKKyAgICBsb2NhbCBmaWxlPSIkezF9IgorICAgIGxvY2FsIGxpYm5hbWUKKyAgICAKKyAgICBmb3IgbGlibmFtZSBpbiAkKCIke0NUX1JFQURFTEZ9IiAtZCAiJHtmaWxlfSIgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICB8IiR7Z3JlcH0iIC1FICdcKE5FRURFRFwpW1s6c3BhY2U6XV0rU2hhcmVkIGxpYnJhcnk6JyAgXAorICAgICAgICAgICAgICAgICAgICAgfCIke3NlZH0iIC1yIC1lICdzLC4rXFsoLispXF0gKiQsXDEsOycgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgKTsgZG8KKyAgICAgICAgWyAtbiAiJHtsaWJuYW1lfSIgXSB8fCBjb250aW51ZQorICAgICAgICAke0NUX1BSSU5URn0gIlNlYXJjaGluZyBmb3IgJyVzJyBuZWVkZWQgYnkgJyVzJ1xuIiAiJHtsaWJuYW1lfSIgIiR7ZmlsZX0iCisgICAgICAgIGlmICEgZG9fYWRkX2xpYiAiJHtsaWJuYW1lfSI7IHRoZW4KKyAgICAgICAgICAgIHByaW50ZiAiJG15bmFtZTogbGlicmFyeSAnJHtsaWJuYW1lfScgbm90IGZvdW5kIVxuIgorICAgICAgICAgICAgWyAiJHtDVF9GT1JDRX0iID0gInkiIF0gfHwgZXhpdCAxCisgICAgICAgIGZpCisgICAgZG9uZQorfQorCisjIFdlJ2xsIHdvcmsgaW4gdGhlIGNvcGllZCByb290ZnMKK2NkICIke0NUX1JPT1RfRFNUX0RJUn0iCisKKyMgRmlyc3Qgb2YsIGNvcHkgdGhlIGZvcmNlZCBsaWJyYXJpZXMgaW50byB0aGUgd29ya2luZyBjb3B5CitsaWJfbGlzdD0KK2lmIFsgLW4gIiR7Q1RfTElCX0ZJTEV9IiBdOyB0aGVuCisgICAgbGliX2xpc3Q9JCgiJHtzZWR9IiAtciAtZSAnOmxvb3A7IHMvIy4qLy87JyAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzL1tbOnNwYWNlOl1dKy8vZzsnICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvKFteOl0pJC9cMTovOycgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAnLyQvTjsgcy9cbi8vOyB0bG9vcDsnICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICIke0NUX0xJQl9GSUxFfSIKKyAgICAgICAgICAgICAgKQorZmkKK0NUX0xJQl9MSVNUPSQocHJpbnRmICIke0NUX0xJQl9MSVNUfToke2xpYl9saXN0fVxuIiAgICAgICAgIFwKKyAgICAgICAgICAgICAgfCIke3NlZH0iIC1yIC1lICdzL146Ky8vOyBzLzorJC8vOyBzLzorLyAvZzsnIFwKKyAgICAgICAgICAgICApCitpZiBbIC1uICIke0NUX0xJQl9MSVNUfSIgXTsgdGhlbgorICAgIGZvciBuYW1lIGluICR7Q1RfTElCX0xJU1R9OyBkbworICAgICAgICBbIC16ICIke25hbWV9IiBdICYmIGNvbnRpbnVlCisgICAgICAgIGZvdW5kPTAKKyAgICAgICAgZm9yIGxpYm5hbWUgaW4gImxpYiR7bmFtZX0uc28iICIke25hbWV9LnNvIiAiJHtuYW1lfSI7IGRvCisgICAgICAgICAgICAke0NUX1BSSU5URn0gIlNlYXJjaGluZyBmb3IgZm9yY2VkIGxpYnJhcnkgJyVzJ1xuIiAiJHtsaWJuYW1lfSIKKyAgICAgICAgICAgIGlmIGRvX2FkZF9saWIgIiR7bGlibmFtZX0iOyB0aGVuCisgICAgICAgICAgICAgICAgZm91bmQ9MQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmaQorICAgICAgICBkb25lCisgICAgICAgIGlmIFsgJHtmb3VuZH0gLWVxIDAgXTsgdGhlbgorICAgICAgICAgICAgcHJpbnRmICIkbXluYW1lOiBsaWJyYXJ5ICcke2xpYm5hbWV9JyBub3QgZm91bmQhXG4iCisgICAgICAgICAgICBbICIke0NUX0ZPUkNFfSIgPSAieSIgXSB8fCBleGl0IDEKKyAgICAgICAgZmkKKyAgICBkb25lCitmaQorCisjIENyZWF0ZSBhIHRlbXBvcmFyeSBwbGFjZSB3aGVyZSB0byBzdG9yZS4uLiB0ZW1wIGZpbGVzLgorcmFuZD0iJCggZGQgaWY9L2Rldi91cmFuZG9tIGJzPTEwMjQgY291bnQ9MSAyPi9kZXYvbnVsbCBcCisgICAgICAgICB8bWQ1c3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIHxhd2sgJ3sgcHJpbnQgJDE7IH0nCisgICAgICAgKSIKK0NUX1RNUF9ESVI9IiR7VE1QRElSOi0vdG1wfS9wb3B1bGF0ZS0ke3JhbmR9LSR7JH0iCisoIHVtYXNrIDAwNzc7IG1rZGlyICIke0NUX1RNUF9ESVJ9IiApIHx8IHsgcHJpbnRmICJDb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSBkaXJlY3RvcnlcbiI7IGV4aXQgMTsgfQordHJhcCAicm0gLXJmICR7Q1RfVE1QX0RJUn0iIEVYSVQKKworIyBMaXN0IGFsbCBFTEYgKGV4ZWN1dGFibGVzfHNoYXJlZCBvYmplY3RzKS4uLgorZmluZCAuIC10eXBlIGYgLWV4ZWMgZmlsZSB7fSBcOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3wiJHtncmVwfSIgLUUgJzogRUxGIFtbOmRpZ2l0Ol1dKy1iaXQgKEx8TSlTQiAoZXhlY3V0YWJsZXxzaGFyZWQgb2JqZWN0KSwnICBcCit8Y3V0IC1kICI6IiAtZiAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorPiIke0NUX1RNUF9ESVJ9L2ZpbGVzLmxpc3QiCisKKyMgLi4uIGFuZCB1c2UgdGhhdCBsaXN0IHRvIGZpbmQgbWlzc2luZyBkZXBlbmRlbmNpZXMKK3doaWxlIHJlYWQgZmlsZTsgZG8KKyAgICBkb19yZXNvbHZlX2RlcHMgIiR7ZmlsZX0iCitkb25lIDwiJHtDVF9UTVBfRElSfS9maWxlcy5saXN0IgorCitybSAtcmYgIiR7Q1RfVE1QX0RJUn0iCit0cmFwIC0gRVhJVAorCisjIE9LLCB3ZSdyZSBkb25lLiBCYWNrIG9mZi4KK2NkIC0gPi9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktcmFubGliIGIvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktcmFubGliCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU1OGU0MDQKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1yYW5saWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktcmVhZGVsZiBiL2Jpbi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLXJlYWRlbGYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDM0NmFkYgotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLXJlYWRlbGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktc2l6ZSBiL2Jpbi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLXNpemUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZThiOTI5MQotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLXNpemUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktc3RyaW5ncyBiL2Jpbi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLXN0cmluZ3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjRlYmE1NAotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLXN0cmluZ3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktc3RyaXAgYi9iaW4vYXJtLXVua25vd24tbGludXgtZ251ZWFiaS1zdHJpcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYjIxYjhmCi0tLSAvZGV2L251bGwKKysrIGIvYmluL2FybS11bmtub3duLWxpbnV4LWdudWVhYmktc3RyaXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYmluL2F1dG9jb25mIGIvYmluL2F1dG9jb25mCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIxNzJiMTkKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYXV0b2NvbmYKQEAgLTAsMCArMSw0OTIgQEAKKyMhIC9iaW4vc2gKKyMgR2VuZXJhdGVkIGZyb20gYXV0b2NvbmYuYXMgYnkgR05VIEF1dG9jb25mIDIuNjUuCisjIEdlbmVyYXRlZCBmcm9tIGF1dG9jb25mLmluOyBkbyBub3QgZWRpdCBieSBoYW5kLgorIyBhdXRvY29uZiAtLSBjcmVhdGUgYGNvbmZpZ3VyZScgdXNpbmcgbTQgbWFjcm9zCisKKyMgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk2LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLAorIyAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggSW5pdGlhbGl6YXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYworZmkKKworCithc19ubD0nCisnCitleHBvcnQgYXNfbmwKKyMgUHJpbnRpbmcgYSBsb25nIHN0cmluZyBjcmFzaGVzIFNvbGFyaXMgNyAvdXNyL2Jpbi9wcmludGYuCithc19lY2hvPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworIyBQcmVmZXIgYSBrc2ggc2hlbGwgYnVpbHRpbiBvdmVyIGFuIGV4dGVybmFsIHByaW50ZiBwcm9ncmFtIG9uIFNvbGFyaXMsCisjIGJ1dCB3aXRob3V0IHdhc3RpbmcgZm9ya3MgZm9yIGJhc2ggb3IgenNoLgoraWYgdGVzdCAteiAiJEJBU0hfVkVSU0lPTiRaU0hfVkVSU0lPTiIgXAorICAgICYmICh0ZXN0ICJYYHByaW50IC1yIC0tICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnQgLXIgLS0nCisgIGFzX2VjaG9fbj0ncHJpbnQgLXJuIC0tJworZWxpZiAodGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludGYgJXNcbicKKyAgYXNfZWNob19uPSdwcmludGYgJXMnCitlbHNlCisgIGlmIHRlc3QgIlhgKC91c3IvdWNiL2VjaG8gLW4gLW4gJGFzX2VjaG8pIDI+L2Rldi9udWxsYCIgPSAiWC1uICRhc19lY2hvIjsgdGhlbgorICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkMSRhc19ubCInCisgICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJworICBlbHNlCisgICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKKyAgICBhc19lY2hvX25fYm9keT0nZXZhbAorICAgICAgYXJnPSQxOworICAgICAgY2FzZSAkYXJnIGluICMoCisgICAgICAqIiRhc19ubCIqKQorCWV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkkYXNfbmwiOworCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7CisgICAgICBlc2FjOworICAgICAgZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSIgfCB0ciAtZCAiJGFzX25sIgorICAgICcKKyAgICBleHBvcnQgYXNfZWNob19uX2JvZHkKKyAgICBhc19lY2hvX249J3NoIC1jICRhc19lY2hvX25fYm9keSBhc19lY2hvJworICBmaQorICBleHBvcnQgYXNfZWNob19ib2R5CisgIGFzX2VjaG89J3NoIC1jICRhc19lY2hvX2JvZHkgYXNfZWNobycKK2ZpCisKKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSAmJiB7CisgICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKKyAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICB9CitmaQorCisKKyMgSUZTCisjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCisjIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKKyMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKK0lGUz0iICIiCSRhc19ubCIKKworIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KK2Nhc2UgJDAgaW4gIygoCisgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKyAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICAgICA7OworZXNhYworIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCitpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCisgIGFzX215c2VsZj0kMAorZmkKK2lmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKKyAgZXhpdCAxCitmaQorCisjIFVuc2V0IHZhcmlhYmxlcyB0aGF0IHdlIGRvIG5vdCBuZWVkIGFuZCB3aGljaCBjYXVzZSBidWdzIChlLmcuIGluCisjIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVzZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiCisjIHN1cHByZXNzZXMgYW55ICJTZWdtZW50YXRpb24gZmF1bHQiIG1lc3NhZ2UgdGhlcmUuICAnKCgnIGNvdWxkCisjIHRyaWdnZXIgYSBidWcgaW4gcGRrc2ggNS4yLjE0LgorZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBNQUlMUEFUSAorZG8gZXZhbCB0ZXN0IHhcJHskYXNfdmFyK3NldH0gPSB4c2V0IFwKKyAgJiYgKCAodW5zZXQgJGFzX3ZhcikgfHwgZXhpdCAxKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgJGFzX3ZhciB8fCA6Citkb25lCitQUzE9JyQgJworUFMyPSc+ICcKK1BTND0nKyAnCisKKyMgTkxTIG51aXNhbmNlcy4KK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCitMQU5HVUFHRT1DCitleHBvcnQgTEFOR1VBR0UKKworIyBDRFBBVEguCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK2lmIHRlc3QgIngkQ09ORklHX1NIRUxMIiA9IHg7IHRoZW4KKyAgYXNfYm91cm5lX2NvbXBhdGlibGU9ImlmIHRlc3QgLW4gXCJcJHtaU0hfVkVSU0lPTitzZXR9XCIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gXCR7MStcIlwkQFwifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJ1wkezErXCJcJEBcIn0nPSdcIlwkQFwiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIFxgKHNldCAtbykgMj4vZGV2L251bGxcYCBpbiAjKAorICAqcG9zaXgqKSA6CisgICAgc2V0IC1vIHBvc2l4IDs7ICMoCisgICopIDoKKyAgICAgOzsKK2VzYWMKK2ZpCisiCisgIGFzX3JlcXVpcmVkPSJhc19mbl9yZXR1cm4gKCkgeyAoZXhpdCBcJDEpOyB9Cithc19mbl9zdWNjZXNzICgpIHsgYXNfZm5fcmV0dXJuIDA7IH0KK2FzX2ZuX2ZhaWx1cmUgKCkgeyBhc19mbl9yZXR1cm4gMTsgfQorYXNfZm5fcmV0X3N1Y2Nlc3MgKCkgeyByZXR1cm4gMDsgfQorYXNfZm5fcmV0X2ZhaWx1cmUgKCkgeyByZXR1cm4gMTsgfQorCitleGl0Y29kZT0wCithc19mbl9zdWNjZXNzIHx8IHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9zdWNjZXNzIGZhaWxlZC47IH0KK2FzX2ZuX2ZhaWx1cmUgJiYgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX2ZhaWx1cmUgc3VjY2VlZGVkLjsgfQorYXNfZm5fcmV0X3N1Y2Nlc3MgfHwgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3JldF9zdWNjZXNzIGZhaWxlZC47IH0KK2FzX2ZuX3JldF9mYWlsdXJlICYmIHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9yZXRfZmFpbHVyZSBzdWNjZWVkZWQuOyB9CitpZiAoIHNldCB4OyBhc19mbl9yZXRfc3VjY2VzcyB5ICYmIHRlc3QgeCA9IFwiXCQxXCIgKTsgdGhlbiA6CisKK2Vsc2UKKyAgZXhpdGNvZGU9MTsgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCitmaQordGVzdCB4XCRleGl0Y29kZSA9IHgwIHx8IGV4aXQgMSIKKyAgYXNfc3VnZ2VzdGVkPSIiCisgIGlmIChldmFsICIkYXNfcmVxdWlyZWQiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCitlbHNlCisgIGFzX2hhdmVfcmVxdWlyZWQ9bm8KK2ZpCisgIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geHllcyAmJiAoZXZhbCAiJGFzX3N1Z2dlc3RlZCIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKworZWxzZQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCithc19mb3VuZD1mYWxzZQorZm9yIGFzX2RpciBpbiAvYmluJFBBVEhfU0VQQVJBVE9SL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBhc19mb3VuZD06CisgIGNhc2UgJGFzX2RpciBpbiAjKAorCSAvKikKKwkgICBmb3IgYXNfYmFzZSBpbiBzaCBiYXNoIGtzaCBzaDU7IGRvCisJICAgICAjIFRyeSBvbmx5IHNoZWxscyB0aGF0IGV4aXN0LCB0byBzYXZlIHNldmVyYWwgZm9ya3MuCisJICAgICBhc19zaGVsbD0kYXNfZGlyLyRhc19iYXNlCisJICAgICBpZiB7IHRlc3QgLWYgIiRhc19zaGVsbCIgfHwgdGVzdCAtZiAiJGFzX3NoZWxsLmV4ZSI7IH0gJiYKKwkJICAgIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3JlcXVpcmVkIiB8IGFzX3J1bj1hICIkYXNfc2hlbGwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgQ09ORklHX1NIRUxMPSRhc19zaGVsbCBhc19oYXZlX3JlcXVpcmVkPXllcworCQkgICBicmVhayAyCitmaQorCSAgIGRvbmU7OworICAgICAgIGVzYWMKKyAgYXNfZm91bmQ9ZmFsc2UKK2RvbmUKKyRhc19mb3VuZCB8fCB7IGlmIHsgdGVzdCAtZiAiJFNIRUxMIiB8fCB0ZXN0IC1mICIkU0hFTEwuZXhlIjsgfSAmJgorCSAgICAgIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3JlcXVpcmVkIiB8IGFzX3J1bj1hICIkU0hFTEwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgQ09ORklHX1NIRUxMPSRTSEVMTCBhc19oYXZlX3JlcXVpcmVkPXllcworZmk7IH0KK0lGUz0kYXNfc2F2ZV9JRlMKKworCisgICAgICBpZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgIT0geDsgdGhlbiA6CisgICMgV2UgY2Fubm90IHlldCBhc3N1bWUgYSBkZWNlbnQgc2hlbGwsIHNvIHdlIGhhdmUgdG8gcHJvdmlkZSBhCisJIyBuZXV0cmFsaXphdGlvbiB2YWx1ZSBmb3Igc2hlbGxzIHdpdGhvdXQgdW5zZXQ7IGFuZCB0aGlzIGFsc28KKwkjIHdvcmtzIGFyb3VuZCBzaGVsbHMgdGhhdCBjYW5ub3QgdW5zZXQgbm9uZXhpc3RlbnQgdmFyaWFibGVzLgorCUJBU0hfRU5WPS9kZXYvbnVsbAorCUVOVj0vZGV2L251bGwKKwkodW5zZXQgQkFTSF9FTlYpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBCQVNIX0VOViBFTlYKKwlleHBvcnQgQ09ORklHX1NIRUxMCisJZXhlYyAiJENPTkZJR19TSEVMTCIgIiRhc19teXNlbGYiICR7MSsiJEAifQorZmkKKworICAgIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geG5vOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiQwOiBUaGlzIHNjcmlwdCByZXF1aXJlcyBhIHNoZWxsIG1vcmUgbW9kZXJuIHRoYW4gYWxsIgorICAkYXNfZWNobyAiJDA6IHRoZSBzaGVsbHMgdGhhdCBJIGZvdW5kIG9uIHlvdXIgc3lzdGVtLiIKKyAgaWYgdGVzdCB4JHtaU0hfVkVSU0lPTitzZXR9ID0geHNldCA7IHRoZW4KKyAgICAkYXNfZWNobyAiJDA6IEluIHBhcnRpY3VsYXIsIHpzaCAkWlNIX1ZFUlNJT04gaGFzIGJ1Z3MgYW5kIHNob3VsZCIKKyAgICAkYXNfZWNobyAiJDA6IGJlIHVwZ3JhZGVkIHRvIHpzaCA0LjMuNCBvciBsYXRlci4iCisgIGVsc2UKKyAgICAkYXNfZWNobyAiJDA6IFBsZWFzZSB0ZWxsIGJ1Zy1hdXRvY29uZkBnbnUub3JnIGFib3V0IHlvdXIgc3lzdGVtLAorJDA6IGluY2x1ZGluZyBhbnkgZXJyb3IgcG9zc2libHkgb3V0cHV0IGJlZm9yZSB0aGlzCiskMDogbWVzc2FnZS4gVGhlbiBpbnN0YWxsIGEgbW9kZXJuIHNoZWxsLCBvciBtYW51YWxseSBydW4KKyQwOiB0aGUgc2NyaXB0IHVuZGVyIHN1Y2ggYSBzaGVsbCBpZiB5b3UgZG8gaGF2ZSBvbmUuIgorICBmaQorICBleGl0IDEKK2ZpCitmaQorZmkKK1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CitleHBvcnQgU0hFTEwKKyMgVW5zZXQgbW9yZSB2YXJpYWJsZXMga25vd24gdG8gaW50ZXJmZXJlIHdpdGggYmVoYXZpb3Igb2YgY29tbW9uIHRvb2xzLgorQ0xJQ09MT1JfRk9SQ0U9IEdSRVBfT1BUSU9OUz0KK3Vuc2V0IENMSUNPTE9SX0ZPUkNFIEdSRVBfT1BUSU9OUworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggU2hlbGwgRnVuY3Rpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIGFzX2ZuX3Vuc2V0IFZBUgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgUG9ydGFibHkgdW5zZXQgVkFSLgorYXNfZm5fdW5zZXQgKCkKK3sKKyAgeyBldmFsICQxPTsgdW5zZXQgJDE7fQorfQorYXNfdW5zZXQ9YXNfZm5fdW5zZXQKKworIyBhc19mbl9zZXRfc3RhdHVzIFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuCithc19mbl9zZXRfc3RhdHVzICgpCit7CisgIHJldHVybiAkMQorfSAjIGFzX2ZuX3NldF9zdGF0dXMKKworIyBhc19mbl9leGl0IFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBFeGl0IHRoZSBzaGVsbCB3aXRoIFNUQVRVUywgZXZlbiBpbiBhICJ0cmFwIDAiIG9yICJzZXQgLWUiIGNvbnRleHQuCithc19mbl9leGl0ICgpCit7CisgIHNldCArZQorICBhc19mbl9zZXRfc3RhdHVzICQxCisgIGV4aXQgJDEKK30gIyBhc19mbl9leGl0CisKKworIyBhc19mbl9lcnJvciBFUlJPUgorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBPdXRwdXQgImBiYXNlbmFtZSAkMGA6IGVycm9yOiBFUlJPUiIgdG8gc3RkZXJyLiBUaGVuIGV4aXQgdGhlIHNjcmlwdCB3aXRoCisjIHN0YXR1cyAkPywgdXNpbmcgMSBpZiB0aGF0IHdhcyAwLgorYXNfZm5fZXJyb3IgKCkKK3sKKyAgYXNfc3RhdHVzPSQ/OyB0ZXN0ICRhc19zdGF0dXMgLWVxIDAgJiYgYXNfc3RhdHVzPTEKKyAgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6ICQxIiA+JjIKKyAgYXNfZm5fZXhpdCAkYXNfc3RhdHVzCit9ICMgYXNfZm5fZXJyb3IKKworaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKKyAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCisgIGFzX2V4cHI9ZXhwcgorZWxzZQorICBhc19leHByPWZhbHNlCitmaQorCitpZiAoYmFzZW5hbWUgLS0gLykgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLS0gLyAyPiYxYCIgPSAiWC8iOyB0aGVuCisgIGFzX2Jhc2VuYW1lPWJhc2VuYW1lCitlbHNlCisgIGFzX2Jhc2VuYW1lPWZhbHNlCitmaQorCithc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwKKyRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCisJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWC8iJDAiIHwKKyAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNYWluIGJvZHkgb2Ygc2NyaXB0LiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKwordXNhZ2U9IlwKK1VzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVEVNUExBVEUtRklMRV0KKworR2VuZXJhdGUgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBmcm9tIGEgVEVNUExBVEUtRklMRSBpZiBnaXZlbiwgb3IKK1xgY29uZmlndXJlLmFjJyBpZiBwcmVzZW50LCBvciBlbHNlIFxgY29uZmlndXJlLmluJy4gIE91dHB1dCBpcyBzZW50Cit0byB0aGUgc3RhbmRhcmQgb3V0cHV0IGlmIFRFTVBMQVRFLUZJTEUgaXMgZ2l2ZW4sIGVsc2UgaW50bworXGBjb25maWd1cmUnLgorCitPcGVyYXRpb24gbW9kZXM6CisgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgdmVyYm9zZWx5IHJlcG9ydCBwcm9jZXNzaW5nCisgIC1kLCAtLWRlYnVnICAgICAgICAgICAgICAgZG9uJ3QgcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcworICAtZiwgLS1mb3JjZSAgICAgICAgICAgICAgIGNvbnNpZGVyIGFsbCBmaWxlcyBvYnNvbGV0ZQorICAtbywgLS1vdXRwdXQ9RklMRSAgICAgICAgIHNhdmUgb3V0cHV0IGluIEZJTEUgKHN0ZG91dCBpcyB0aGUgZGVmYXVsdCkKKyAgLVcsIC0td2FybmluZ3M9Q0FURUdPUlkgICByZXBvcnQgdGhlIHdhcm5pbmdzIGZhbGxpbmcgaW4gQ0FURUdPUlkgW3N5bnRheF0KKworV2FybmluZyBjYXRlZ29yaWVzIGluY2x1ZGU6CisgIFxgY3Jvc3MnICAgICAgICAgY3Jvc3MgY29tcGlsYXRpb24gaXNzdWVzCisgIFxgb2Jzb2xldGUnICAgICAgb2Jzb2xldGUgY29uc3RydWN0cworICBcYHN5bnRheCcgICAgICAgIGR1YmlvdXMgc3ludGFjdGljIGNvbnN0cnVjdHMKKyAgXGBhbGwnICAgICAgICAgICBhbGwgdGhlIHdhcm5pbmdzCisgIFxgbm8tQ0FURUdPUlknICAgdHVybiBvZmYgdGhlIHdhcm5pbmdzIG9uIENBVEVHT1JZCisgIFxgbm9uZScgICAgICAgICAgdHVybiBvZmYgYWxsIHRoZSB3YXJuaW5ncworICBcYGVycm9yJyAgICAgICAgIHdhcm5pbmdzIGFyZSBlcnJvcgorCitUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIFxgTTQnIGFuZCBcYFdBUk5JTkdTJyBhcmUgaG9ub3JlZC4KKworTGlicmFyeSBkaXJlY3RvcmllczoKKyAgLUIsIC0tcHJlcGVuZC1pbmNsdWRlPURJUiAgcHJlcGVuZCBkaXJlY3RvcnkgRElSIHRvIHNlYXJjaCBwYXRoCisgIC1JLCAtLWluY2x1ZGU9RElSICAgICAgICAgIGFwcGVuZCBkaXJlY3RvcnkgRElSIHRvIHNlYXJjaCBwYXRoCisKK1RyYWNpbmc6CisgIC10LCAtLXRyYWNlPU1BQ1JPWzpGT1JNQVRdICByZXBvcnQgdGhlIGxpc3Qgb2YgY2FsbHMgdG8gTUFDUk8KKyAgLWksIC0taW5pdGlhbGl6YXRpb24gICAgICAgIGFsc28gdHJhY2UgQXV0b2NvbmYncyBpbml0aWFsaXphdGlvbiBwcm9jZXNzCisKK0luIHRyYWNpbmcgbW9kZSwgbm8gY29uZmlndXJhdGlvbiBzY3JpcHQgaXMgY3JlYXRlZC4gIEZPUk1BVCBkZWZhdWx0cwordG8gXGBcJGY6XCRsOlwkbjpcJCUnOyBzZWUgXGBhdXRvbTR0ZSAtLWhlbHAnIGZvciBpbmZvcm1hdGlvbiBhYm91dCBGT1JNQVQuCisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b2NvbmZAZ251Lm9yZz4uCitHTlUgQXV0b2NvbmYgaG9tZSBwYWdlOiA8aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9jb25mLz4uCitHZW5lcmFsIGhlbHAgdXNpbmcgR05VIHNvZnR3YXJlOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPi4iCisKK3ZlcnNpb249IlwKK2F1dG9jb25mIChHTlUgQXV0b2NvbmYpIDIuNjUKK0NvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0xpY2Vuc2UgR1BMdjMrL0F1dG9jb25mOiBHTlUgR1BMIHZlcnNpb24gMyBvciBsYXRlcgorPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sPiwgPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2V4Y2VwdGlvbnMuaHRtbD4KK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRlIGl0LgorVGhlcmUgaXMgTk8gV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy4KKworV3JpdHRlbiBieSBEYXZpZCBKLiBNYWNLZW56aWUgYW5kIEFraW0gRGVtYWlsbGUuIgorCitoZWxwPSJcCitUcnkgXGAkYXNfbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisKK2V4aXRfbWlzc2luZ19hcmc9JworICBhc19mbl9lcnJvciAib3B0aW9uIFxgJDEnXCcnIHJlcXVpcmVzIGFuIGFyZ3VtZW50JGFzX25sJGhlbHAiJworIyByZXN0b3JlIGZvbnQtbG9jazogJworCisjIFZhcmlhYmxlcy4KKzogJHtBVVRPTTRURT0nL3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyL2Jpbi9hdXRvbTR0ZSd9CithdXRvbTR0ZV9vcHRpb25zPQorb3V0ZmlsZT0KK3ZlcmJvc2U9ZmFsc2UKKworIyBQYXJzZSBjb21tYW5kIGxpbmUuCit3aGlsZSB0ZXN0ICQjIC1ndCAwIDsgZG8KKyAgb3B0aW9uPWBleHByICJ4JDEiIDogJ3hcKC0tW149XSpcKScgXHwgXAorCSAgICAgICAieCQxIiA6ICd4XCgtLlwpJ2AKKyAgb3B0YXJnPWBleHByICJ4JDEiIDogJ3gtLVtePV0qPVwoLipcKScgXHwgXAorCSAgICAgICAieCQxIiA6ICd4LS5cKC4qXCknYAorICBjYXNlICQxIGluCisgICAgLS12ZXJzaW9uIHwgLVYgKQorICAgICAgIGVjaG8gIiR2ZXJzaW9uIiA7IGV4aXQgOzsKKyAgICAtLWhlbHAgfCAtaCApCisgICAgICAgJGFzX2VjaG8gIiR1c2FnZSI7IGV4aXQgOzsKKworICAgIC0tdmVyYm9zZSB8IC12ICkKKyAgICAgICB2ZXJib3NlPToKKyAgICAgICBhdXRvbTR0ZV9vcHRpb25zPSIkYXV0b200dGVfb3B0aW9ucyAkMSI7IHNoaWZ0IDs7CisKKyAgICAjIEFyZ3VtZW50cyBwYXNzZWQgYXMgaXMgdG8gYXV0b200dGUuCisgICAgLS1kZWJ1ZyAgICAgIHwgLWQgICB8IFwKKyAgICAtLWZvcmNlICAgICAgfCAtZiAgIHwgXAorICAgIC0taW5jbHVkZT0qICB8IC1JPyogfCBcCisgICAgLS1wcmVwZW5kLWluY2x1ZGU9KiB8IC1CPyogfCBcCisgICAgLS13YXJuaW5ncz0qIHwgLVc/KiApCisgICAgICAgY2FzZSAkMSBpbgorCSAqXCcqKSBhcmc9YCRhc19lY2hvICIkMSIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsgIycKKwkgKikgYXJnPSQxIDs7CisgICAgICAgZXNhYworICAgICAgIGF1dG9tNHRlX29wdGlvbnM9IiRhdXRvbTR0ZV9vcHRpb25zICckYXJnJyI7IHNoaWZ0IDs7CisgICAgIyBPcHRpb25zIHdpdGggc2VwYXJhdGVkIGFyZyBwYXNzZWQgYXMgaXMgdG8gYXV0b200dGUuCisgICAgLS1pbmNsdWRlICB8IC1JIHwgXAorICAgIC0tcHJlcGVuZC1pbmNsdWRlICB8IC1CIHwgXAorICAgIC0td2FybmluZ3MgfCAtVyApCisgICAgICAgdGVzdCAkIyA9IDEgJiYgZXZhbCAiJGV4aXRfbWlzc2luZ19hcmciCisgICAgICAgY2FzZSAkMiBpbgorCSAqXCcqKSBhcmc9YCRhc19lY2hvICIkMiIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsgIycKKwkgKikgYXJnPSQyIDs7CisgICAgICAgZXNhYworICAgICAgIGF1dG9tNHRlX29wdGlvbnM9IiRhdXRvbTR0ZV9vcHRpb25zICRvcHRpb24gJyRhcmcnIgorICAgICAgIHNoaWZ0OyBzaGlmdCA7OworCisgICAgLS10cmFjZT0qIHwgLXQ/KiApCisgICAgICAgdHJhY2VzPSIkdHJhY2VzIC0tdHJhY2U9JyJgJGFzX2VjaG8gIiRvcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIiciCisgICAgICAgc2hpZnQgOzsKKyAgICAtLXRyYWNlIHwgLXQgKQorICAgICAgIHRlc3QgJCMgPSAxICYmIGV2YWwgIiRleGl0X21pc3NpbmdfYXJnIgorICAgICAgIHRyYWNlcz0iJHRyYWNlcyAtLXRyYWNlPSciYCRhc19lY2hvICIkMiIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAiJyIKKyAgICAgICBzaGlmdDsgc2hpZnQgOzsKKyAgICAtLWluaXRpYWxpemF0aW9uIHwgLWkgKQorICAgICAgIGF1dG9tNHRlX29wdGlvbnM9IiRhdXRvbTR0ZV9vcHRpb25zIC0tbWVsdCIKKyAgICAgICBzaGlmdDs7CisKKyAgICAtLW91dHB1dD0qIHwgLW8/KiApCisgICAgICAgb3V0ZmlsZT0kb3B0YXJnCisgICAgICAgc2hpZnQgOzsKKyAgICAtLW91dHB1dCB8IC1vICkKKyAgICAgICB0ZXN0ICQjID0gMSAmJiBldmFsICIkZXhpdF9taXNzaW5nX2FyZyIKKyAgICAgICBvdXRmaWxlPSQyCisgICAgICAgc2hpZnQ7IHNoaWZ0IDs7CisKKyAgICAtLSApICAgICAjIFN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKKyAgICAgICBzaGlmdDsgYnJlYWsgOzsKKyAgICAtICkJIyBVc2Ugc3RkaW4gYXMgaW5wdXQuCisgICAgICAgYnJlYWsgOzsKKyAgICAtKiApCisgICAgICAgZXhlYyA+JjIKKyAgICAgICBhc19mbl9lcnJvciAiaW52YWxpZCBvcHRpb24gXGAkMSckYXNfbmwkaGVscCIgOzsgI2AKKyAgICAqICkKKyAgICAgICBicmVhayA7OworICBlc2FjCitkb25lCisKKyMgRmluZCB0aGUgaW5wdXQgZmlsZS4KK2Nhc2UgJCMgaW4KKyAgMCkKKyAgICBpZiB0ZXN0IC1mIGNvbmZpZ3VyZS5hYzsgdGhlbgorICAgICAgaWYgdGVzdCAtZiBjb25maWd1cmUuaW47IHRoZW4KKwkkYXNfZWNobyAiJGFzX21lOiB3YXJuaW5nOiBib3RoIFxgY29uZmlndXJlLmFjJyBhbmQgXGBjb25maWd1cmUuaW4nIGFyZSBwcmVzZW50LiIgPiYyCisJJGFzX2VjaG8gIiRhc19tZTogd2FybmluZzogcHJvY2VlZGluZyB3aXRoIFxgY29uZmlndXJlLmFjJy4iID4mMgorICAgICAgZmkKKyAgICAgIGluZmlsZT1jb25maWd1cmUuYWMKKyAgICBlbGlmIHRlc3QgLWYgY29uZmlndXJlLmluOyB0aGVuCisgICAgICBpbmZpbGU9Y29uZmlndXJlLmluCisgICAgZWxzZQorICAgICAgYXNfZm5fZXJyb3IgIm5vIGlucHV0IGZpbGUiCisgICAgZmkKKyAgICB0ZXN0IC16ICIkdHJhY2VzIiAmJiB0ZXN0IC16ICIkb3V0ZmlsZSIgJiYgb3V0ZmlsZT1jb25maWd1cmU7OworICAxKQorICAgIGluZmlsZT0kMSA7OworICAqKSBleGVjID4mMgorICAgICBhc19mbl9lcnJvciAiaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzJGFzX25sJGhlbHAiIDs7Citlc2FjCisKKyMgVW5sZXNzIHNwZWNpZmllZCwgdGhlIG91dHB1dCBpcyBzdGRvdXQuCit0ZXN0IC16ICIkb3V0ZmlsZSIgJiYgb3V0ZmlsZT0tCisKKyMgUnVuIGF1dG9tNHRlIHdpdGggZXhwYW5zaW9uLgorZXZhbCBzZXQgeCAiJGF1dG9tNHRlX29wdGlvbnMiIFwKKyAgLS1sYW5ndWFnZT1hdXRvY29uZiAtLW91dHB1dD1cIlwkb3V0ZmlsZVwiICIkdHJhY2VzIiBcIlwkaW5maWxlXCIKK3NoaWZ0CiskdmVyYm9zZSAmJiAkYXNfZWNobyAiJGFzX21lOiBydW5uaW5nICRBVVRPTTRURSAkKiIgPiYyCitleGVjICIkQVVUT000VEUiICIkQCIKZGlmZiAtLWdpdCBhL2Jpbi9hdXRvaGVhZGVyIGIvYmluL2F1dG9oZWFkZXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjQ5YjA0MwotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hdXRvaGVhZGVyCkBAIC0wLDAgKzEsMzA0IEBACisjISAvdXNyL2Jpbi9wZXJsCisjIC0qLSBQZXJsIC0qLQorIyBHZW5lcmF0ZWQgZnJvbSBhdXRvaGVhZGVyLmluOyBkbyBub3QgZWRpdCBieSBoYW5kLgorCitldmFsICdjYXNlICQjIGluIDApIGV4ZWMgL3Vzci9iaW4vcGVybCAtUyAiJDAiOzsgKikgZXhlYyAvdXNyL2Jpbi9wZXJsIC1TICIkMCIgIiRAIjs7IGVzYWMnCisgICAgaWYgMDsKKworIyBhdXRvaGVhZGVyIC0tIGNyZWF0ZSBgY29uZmlnLmguaW4nIGZyb20gYGNvbmZpZ3VyZS5hYycKKworIyBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFdyaXR0ZW4gYnkgUm9sYW5kIE1jR3JhdGguCisjIFJld3JpdHRlbiBpbiBQZXJsIGJ5IEFraW0gRGVtYWlsbGUuCisKK0JFR0lOCit7CisgIG15ICRwa2dkYXRhZGlyID0gJEVOVnsnYXV0b200dGVfcGVybGxpYmRpcid9IHx8ICcvdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3Ivc2hhcmUvYXV0b2NvbmYnOworICB1bnNoaWZ0IEBJTkMsICIkcGtnZGF0YWRpciI7CisKKyAgIyBPdmVycmlkZSBTSEVMTC4gIE9uIERKR1BQIFNIRUxMIG1heSBub3QgYmUgc2V0IHRvIGEgc2hlbGwKKyAgIyB0aGF0IGNhbiBoYW5kbGUgcmVkaXJlY3Rpb24gYW5kIHF1b3RlIGFyZ3VtZW50cyBjb3JyZWN0bHksCisgICMgZS5nLjogQ09NTUFORC5DT00uICBGb3IgREpHUFAgYWx3YXlzIHVzZSB0aGUgc2hlbGwgdGhhdCBjb25maWd1cmUKKyAgIyBoYXMgZGV0ZWN0ZWQuCisgICRFTlZ7J1NIRUxMJ30gPSAnL2Jpbi9zaCcgaWYgKCReTyBlcSAnZG9zJyk7Cit9CisKK3VzZSBBdXRvbTR0ZTo6Q2hhbm5lbERlZnM7Cit1c2UgQXV0b200dGU6OkNoYW5uZWxzOwordXNlIEF1dG9tNHRlOjpDb25maWd1cmVfYWM7Cit1c2UgQXV0b200dGU6OkZpbGVVdGlsczsKK3VzZSBBdXRvbTR0ZTo6R2VuZXJhbDsKK3VzZSBBdXRvbTR0ZTo6WEZpbGU7Cit1c2Ugc3RyaWN0OworCisjIFVzaW5nIGBkbyBGSUxFJywgd2UgbmVlZCBgbG9jYWwnIHZhcnMuCit1c2UgdmFycyBxdyAoJGNvbmZpZ19oICV2ZXJiYXRpbSAlc3ltYm9sKTsKKworIyBMaWIgZmlsZXMuCitteSAkYXV0b200dGUgPSAkRU5WeydBVVRPTTRURSd9IHx8ICcvdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3IvYmluL2F1dG9tNHRlJzsKK2xvY2FsICRjb25maWdfaDsKK215ICRjb25maWdfaF9pbjsKK215IEBwcmVwZW5kX2luY2x1ZGU7CitteSBAaW5jbHVkZTsKKworCisjICRIRUxQCisjIC0tLS0tCiskaGVscCA9ICJVc2FnZTogJDAgW09QVElPTl0uLi4gW1RFTVBMQVRFLUZJTEVdCisKK0NyZWF0ZSBhIHRlbXBsYXRlIGZpbGUgb2YgQyBcYFwjZGVmaW5lXCcgc3RhdGVtZW50cyBmb3IgXGBjb25maWd1cmVcJyB0bwordXNlLiAgVG8gdGhpcyBlbmQsIHNjYW4gVEVNUExBVEUtRklMRSwgb3IgXGBjb25maWd1cmUuYWNcJyBpZiBwcmVzZW50LAorb3IgZWxzZSBcYGNvbmZpZ3VyZS5pblwnLgorCisgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgdmVyYm9zZWx5IHJlcG9ydCBwcm9jZXNzaW5nCisgIC1kLCAtLWRlYnVnICAgICAgICAgICAgICBkb25cJ3QgcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcworICAtZiwgLS1mb3JjZSAgICAgICAgICAgICAgY29uc2lkZXIgYWxsIGZpbGVzIG9ic29sZXRlCisgIC1XLCAtLXdhcm5pbmdzPUNBVEVHT1JZICByZXBvcnQgdGhlIHdhcm5pbmdzIGZhbGxpbmcgaW4gQ0FURUdPUlkKKworIiAuIEF1dG9tNHRlOjpDaGFubmVsRGVmczo6dXNhZ2UgKCkgLiAiCisKK0xpYnJhcnkgZGlyZWN0b3JpZXM6CisgIC1CLCAtLXByZXBlbmQtaW5jbHVkZT1ESVIgIHByZXBlbmQgZGlyZWN0b3J5IERJUiB0byBzZWFyY2ggcGF0aAorICAtSSwgLS1pbmNsdWRlPURJUiAgICAgICAgICBhcHBlbmQgZGlyZWN0b3J5IERJUiB0byBzZWFyY2ggcGF0aAorCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9jb25mXEBnbnUub3JnPi4KK0dOVSBBdXRvY29uZiBob21lIHBhZ2U6IDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYvPi4KK0dlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LgorIjsKKworCisjICRWRVJTSU9OCisjIC0tLS0tLS0tCiskdmVyc2lvbiA9ICJhdXRvaGVhZGVyIChHTlUgQXV0b2NvbmYpIDIuNjUKK0NvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0xpY2Vuc2UgR1BMdjMrL0F1dG9jb25mOiBHTlUgR1BMIHZlcnNpb24gMyBvciBsYXRlcgorPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sPiwgPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2V4Y2VwdGlvbnMuaHRtbD4KK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRlIGl0LgorVGhlcmUgaXMgTk8gV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy4KKworV3JpdHRlbiBieSBSb2xhbmQgTWNHcmF0aCBhbmQgQWtpbSBEZW1haWxsZS4KKyI7CisKKworIyMgLS0tLS0tLS0tLSAjIworIyMgUm91dGluZXMuICAjIworIyMgLS0tLS0tLS0tLSAjIworCisKKyMgcGFyc2VfYXJncyAoKQorIyAtLS0tLS0tLS0tLS0tCisjIFByb2Nlc3MgYW55IGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCitzdWIgcGFyc2VfYXJncyAoKQoreworICBteSAkc3JjZGlyOworCisgIHBhcnNlX1dBUk5JTkdTOworICBnZXRvcHQgKCdJfGluY2x1ZGU9cycgICAgICAgICA9PiBcQGluY2x1ZGUsCisJICAnQnxwcmVwZW5kLWluY2x1ZGU9cycgPT4gXEBwcmVwZW5kX2luY2x1ZGUsCisJICAnV3x3YXJuaW5ncz1zJyAgICAgICAgPT4gXCZwYXJzZV93YXJuaW5ncyk7CisKKyAgaWYgKCEgQEFSR1YpCisgICAgeworICAgICAgbXkgJGNvbmZpZ3VyZV9hYyA9IHJlcXVpcmVfY29uZmlndXJlX2FjOworICAgICAgcHVzaCBAQVJHViwgJGNvbmZpZ3VyZV9hYzsKKyAgICB9Cit9CisKKworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1haW4gcHJvZ3JhbS4gICMjCisjIyAtLS0tLS0tLS0tLS0tLSAjIworCitta3RtcGRpciAoJ2FoJyk7Citzd2l0Y2hfd2FybmluZyAnb2Jzb2xldGUnOworcGFyc2VfYXJnczsKKworIyBQcmVhY2guCitteSAkY29uZmlnX2hfdG9wID0gZmluZF9maWxlICgiY29uZmlnLmgudG9wPyIsCisJCQkgICAgICByZXZlcnNlIChAcHJlcGVuZF9pbmNsdWRlKSwgQGluY2x1ZGUpOworbXkgJGNvbmZpZ19oX2JvdCA9IGZpbmRfZmlsZSAoImNvbmZpZy5oLmJvdD8iLAorCQkJICAgICAgcmV2ZXJzZSAoQHByZXBlbmRfaW5jbHVkZSksIEBpbmNsdWRlKTsKK215ICRhY2NvbmZpZ19oID0gZmluZF9maWxlICgiYWNjb25maWcuaD8iLAorCQkJICAgIHJldmVyc2UgKEBwcmVwZW5kX2luY2x1ZGUpLCBAaW5jbHVkZSk7CitpZiAoJGNvbmZpZ19oX3RvcCB8fCAkY29uZmlnX2hfYm90IHx8ICRhY2NvbmZpZ19oKQorICB7CisgICAgbXkgJG1zZyA9IDw8ICJFTkQiOworICAgIFVzaW5nIGF1eGlsaWFyeSBmaWxlcyBzdWNoIGFzIFxgYWNjb25maWcuaFwnLCBcYGNvbmZpZy5oLmJvdFwnCisgICAgYW5kIFxgY29uZmlnLmgudG9wXCcsIHRvIGRlZmluZSB0ZW1wbGF0ZXMgZm9yIFxgY29uZmlnLmguaW5cJworICAgIGlzIGRlcHJlY2F0ZWQgYW5kIGRpc2NvdXJhZ2VkLgorCisgICAgVXNpbmcgdGhlIHRoaXJkIGFyZ3VtZW50IG9mIFxgQUNfREVGSU5FXCcgYW5kCisgICAgXGBBQ19ERUZJTkVfVU5RVU9URURcJyBhbGxvd3Mgb25lIHRvIGRlZmluZSBhIHRlbXBsYXRlIHdpdGhvdXQKKyAgICBcYGFjY29uZmlnLmhcJzoKKworICAgICAgQUNfREVGSU5FKFtORUVEX0ZVTkNfTUFJTl0sIDEsCisJCVtEZWZpbmUgaWYgYSBmdW5jdGlvbiBcYG1haW5cJyBpcyBuZWVkZWQuXSkKKworICAgIE1vcmUgc29waGlzdGljYXRlZCB0ZW1wbGF0ZXMgY2FuIGFsc28gYmUgcHJvZHVjZWQsIHNlZSB0aGUKKyAgICBkb2N1bWVudGF0aW9uLgorRU5ECisgICAgJG1zZyA9fiBzL14gICAgL1dBUk5JTkc6IC9nbTsKKyAgICBtc2cgJ29ic29sZXRlJywgJG1zZzsKKyAgfQorCisjIFNldCB1cCBhdXRvY29uZi4KK215ICRhdXRvY29uZiA9ICInJGF1dG9tNHRlJyAtLWxhbmd1YWdlPWF1dG9jb25mICI7CiskYXV0b2NvbmYgLj0gam9pbiAoJyAtLWluY2x1ZGU9JywgJycsIG1hcCB7IHNoZWxsX3F1b3RlICgkXykgfSBAaW5jbHVkZSk7CiskYXV0b2NvbmYgLj0gam9pbiAoJyAtLXByZXBlbmQtaW5jbHVkZT0nLCAnJywgbWFwIHsgc2hlbGxfcXVvdGUgKCRfKSB9IEBwcmVwZW5kX2luY2x1ZGUpOworJGF1dG9jb25mIC49ICcgLS1kZWJ1ZycgaWYgJGRlYnVnOworJGF1dG9jb25mIC49ICcgLS1mb3JjZScgaWYgJGZvcmNlOworJGF1dG9jb25mIC49ICcgLS12ZXJib3NlJyBpZiAkdmVyYm9zZTsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisjIFJlYWwgd29yayBzdGFydHMgaGVyZS4gICMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworCisjIFNvdXJjZSB3aGF0IHRoZSB0cmFjZXMgYXJlIHRyeWluZyB0byB0ZWxsIHVzLgordmVyYiAiJG1lOiBydW5uaW5nICRhdXRvY29uZiB0byB0cmFjZSBmcm9tICRBUkdWWzBdIjsKK215ICRxdW90ZWRfdG1wID0gc2hlbGxfcXVvdGUgKCR0bXApOworeHN5c3RlbSAoIiRhdXRvY29uZiIKKwkgIyBJZiB5b3UgY2hhbmdlIHRoaXMgbGlzdCwgdXBkYXRlIHRoZQorCSAjIGBBdXRvaGVhZGVyLXByZXNlbGVjdGlvbnMnIHNlY3Rpb24gb2YgYXV0b200dGUuaW4uCisJIC4gJyAtLXRyYWNlIEFDX0NPTkZJR19IRUFERVJTOlwnJCRjb25maWdfaCB8fD0gXCciXCciXCckMVwnIlwnIlwnO1wnJworCSAuICcgLS10cmFjZSBBSF9PVVRQVVQ6XCckJHZlcmJhdGlte1wnIlwnIlwnJDFcJyJcJyJcJ30gPSBcJyJcJyJcJyQyXCciXCciXCc7XCcnCisJIC4gJyAtLXRyYWNlIEFDX0RFRklORV9UUkFDRV9MSVRFUkFMOlwnJCRzeW1ib2x7XCciXCciXCckMVwnIlwnIlwnfSA9IDE7XCcnCisJIC4gIiAiIC4gc2hlbGxfcXVvdGUgKCRBUkdWWzBdKSAuICIgPiRxdW90ZWRfdG1wL3RyYWNlcy5wbCIpOworCitsb2NhbCAoJXZlcmJhdGltLCAlc3ltYm9sKTsKK2RlYnVnICIkbWU6IFxgZG8naW5nICR0bXAvdHJhY2VzLnBsOlxuIiAuIGBzZWQgJ3MvXi98IC8nICRxdW90ZWRfdG1wL3RyYWNlcy5wbGA7CitkbyAiJHRtcC90cmFjZXMucGwiOword2FybiAiY291bGRuJ3QgcGFyc2UgJHRtcC90cmFjZXMucGw6ICRAIiBpZiAkQDsKK3VubGVzcyAoJGNvbmZpZ19oKQorICB7CisgICAgZXJyb3IgImVycm9yOiBBQ19DT05GSUdfSEVBREVSUyBub3QgZm91bmQgaW4gJEFSR1ZbMF0iOworICAgIGV4aXQgMTsKKyAgfQorCisjIFdlIHRlbXBsYXRlIG9ubHkgdGhlIGZpcnN0IENPTkZJR19IRUFERVIuCiskY29uZmlnX2ggPX4gcy8gLiovLzsKKyMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlXSIsIGRlZmF1bHRpbmcgaW5maWxlPSJvdXRmaWxlLmluIi4KKygkY29uZmlnX2gsICRjb25maWdfaF9pbikgPSBzcGxpdCAoJzonLCAkY29uZmlnX2gsIDIpOworJGNvbmZpZ19oX2luIHx8PSAiJGNvbmZpZ19oLmluIjsKKworIyAlU1lNQk9MIG1pZ2h0IGNvbnRhaW4gdGhpbmdzIGxpa2UgYEY3N19GVU5DKG5hbWUsTkFNRSknLCBidXQgd2Uga2VlcAorIyBvbmx5IHRoZSBuYW1lIG9mIHRoZSBtYWNyby4KKyVzeW1ib2wgPSBtYXAgeyBzL1woLiovLzsgJF8gPT4gMSB9IGtleXMgJXN5bWJvbDsKKworbXkgJG91dCA9IG5ldyBBdXRvbTR0ZTo6WEZpbGUgKCI+ICIgLiBvcGVuX3F1b3RlICgiJHRtcC9jb25maWcuaGluIikpOworCisjIERvbid0IHdyaXRlICJkbyBub3QgZWRpdCIgLS0gaXQgd2lsbCBnZXQgY29waWVkIGludG8gdGhlCisjIGNvbmZpZy5oLCB3aGljaCBpdCdzIG9rIHRvIGVkaXQuCitwcmludCAkb3V0ICIvKiAkY29uZmlnX2hfaW4uICBHZW5lcmF0ZWQgZnJvbSAkQVJHVlswXSBieSBhdXRvaGVhZGVyLiAgKi9cbiI7CisKKyMgRHVtcCB0aGUgdG9wLgoraWYgKCRjb25maWdfaF90b3ApCisgIHsKKyAgICBteSAkaW4gPSBuZXcgQXV0b200dGU6OlhGaWxlICgiPCAiIC4gb3Blbl9xdW90ZSAoJGNvbmZpZ19oX3RvcCkpOworICAgIHdoaWxlICgkXyA9ICRpbi0+Z2V0bGluZSkKKyAgICAgIHsKKwlwcmludCAkb3V0ICRfOworICAgICAgfQorICB9CisKKyMgRHVtcCBgYWNjb25maWcuaCcsIGV4Y2VwdCBmb3IgaXRzIGJvdHRvbSBwb3J0aW9uLgoraWYgKCRhY2NvbmZpZ19oKQorICB7CisgICAgbXkgJGluID0gbmV3IEF1dG9tNHRlOjpYRmlsZSAoIjwgIiAuIG9wZW5fcXVvdGUgKCRhY2NvbmZpZ19oKSk7CisgICAgd2hpbGUgKCRfID0gJGluLT5nZXRsaW5lKQorICAgICAgeworCWxhc3QgaWYgL1xAQk9UVE9NXEAvOworCW5leHQgaWYgL1xAVE9QXEAvOworCXByaW50ICRvdXQgJF87CisgICAgICB9CisgIH0KKworIyBEdW1wIHRoZSB0ZW1wbGF0ZXMgZnJvbSBgY29uZmlndXJlLmFjJy4KK2ZvcmVhY2ggKHNvcnQga2V5cyAldmVyYmF0aW0pCisgIHsKKyAgICBwcmludCAkb3V0ICJcbiR2ZXJiYXRpbXskX31cbiI7CisgIH0KKworIyBEdW1wIGJvdHRvbSBwb3J0aW9uIG9mIGBhY2NvbmZpZy5oJy4KK2lmICgkYWNjb25maWdfaCkKKyAgeworICAgIG15ICRpbiA9IG5ldyBBdXRvbTR0ZTo6WEZpbGUgKCI8ICIgLiBvcGVuX3F1b3RlICgkYWNjb25maWdfaCkpOworICAgIG15ICRkdW1wID0gMDsKKyAgICB3aGlsZSAoJF8gPSAkaW4tPmdldGxpbmUpCisgICAgICB7CisJcHJpbnQgJG91dCAkXyBpZiAkZHVtcDsKKwkkZHVtcCA9IDEgIGlmIC9cQEJPVFRPTVxALzsKKyAgICAgIH0KKyAgfQorCisjIER1bXAgdGhlIGJvdHRvbS4KK2lmICgkY29uZmlnX2hfYm90KQorICB7CisgICAgbXkgJGluID0gbmV3IEF1dG9tNHRlOjpYRmlsZSAoIjwgIiAuIG9wZW5fcXVvdGUgKCRjb25maWdfaF9ib3QpKTsKKyAgICB3aGlsZSAoJF8gPSAkaW4tPmdldGxpbmUpCisgICAgICB7CisJcHJpbnQgJG91dCAkXzsKKyAgICAgIH0KKyAgfQorCiskb3V0LT5jbG9zZTsKKworIyBDaGVjayB0aGF0IGFsbCB0aGUgc3ltYm9scyBoYXZlIGEgdGVtcGxhdGUuCit7CisgIG15ICRpbiA9IG5ldyBBdXRvbTR0ZTo6WEZpbGUgKCI8ICIgLiBvcGVuX3F1b3RlICgiJHRtcC9jb25maWcuaGluIikpOworICBteSAkc3VnZ2VzdF9hY19kZWZpbmUgPSAxOworICB3aGlsZSAoJF8gPSAkaW4tPmdldGxpbmUpCisgICAgeworICAgICAgbXkgKCRzeW1ib2wpID0gL15cI1xzKlx3K1xzKyhcdyspLworCW9yIG5leHQ7CisgICAgICBkZWxldGUgJHN5bWJvbHskc3ltYm9sfTsKKyAgICB9CisgIGZvcmVhY2ggKHNvcnQga2V5cyAlc3ltYm9sKQorICAgIHsKKyAgICAgIG1zZyAnc3ludGF4JywgIndhcm5pbmc6IG1pc3NpbmcgdGVtcGxhdGU6ICRfIjsKKyAgICAgIGlmICgkc3VnZ2VzdF9hY19kZWZpbmUpCisJeworCSAgbXNnICdzeW50YXgnLCAgIlVzZSBBQ19ERUZJTkUoWyRfXSwgW10sIFtEZXNjcmlwdGlvbl0pIjsKKwkgICRzdWdnZXN0X2FjX2RlZmluZSA9IDA7CisJfQorCisgICAgfQorICBleGl0IDEKKyAgICBpZiBrZXlzICVzeW1ib2w7Cit9CisKK3VwZGF0ZV9maWxlICgiJHRtcC9jb25maWcuaGluIiwgIiRjb25maWdfaF9pbiIsICRmb3JjZSk7CisKKyMjIyBTZXR1cCAiR05VIiBzdHlsZSBmb3IgcGVybC1tb2RlIGFuZCBjcGVybC1tb2RlLgorIyMgTG9jYWwgVmFyaWFibGVzOgorIyMgcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIHBlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIHBlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2UtaW1hZ2luYXJ5LW9mZnNldDogMAorIyMgcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIGNwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtZXh0cmEtbmV3bGluZS1iZWZvcmUtYnJhY2U6IHQKKyMjIGNwZXJsLW1lcmdlLXRyYWlsaW5nLWVsc2U6IG5pbAorIyMgY3BlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIEVuZDoKZGlmZiAtLWdpdCBhL2Jpbi9hdXRvbTR0ZSBiL2Jpbi9hdXRvbTR0ZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYTdiNzM5Ci0tLSAvZGV2L251bGwKKysrIGIvYmluL2F1dG9tNHRlCkBAIC0wLDAgKzEsMTA3MiBAQAorIyEgL3Vzci9iaW4vcGVybCAtdworIyAtKi0gcGVybCAtKi0KKyMgR2VuZXJhdGVkIGZyb20gYXV0b200dGUuaW47IGRvIG5vdCBlZGl0IGJ5IGhhbmQuCisKK2V2YWwgJ2Nhc2UgJCMgaW4gMCkgZXhlYyAvdXNyL2Jpbi9wZXJsIC1TICIkMCI7OyAqKSBleGVjIC91c3IvYmluL3BlcmwgLVMgIiQwIiAiJEAiOzsgZXNhYycKKyAgICBpZiAwOworCisjIGF1dG9tNHRlIC0gV3JhcHBlciBhcm91bmQgTTQgbGlicmFyaWVzLgorIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisKK0JFR0lOCit7CisgIG15ICRwa2dkYXRhZGlyID0gJEVOVnsnYXV0b200dGVfcGVybGxpYmRpcid9IHx8ICcvdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3Ivc2hhcmUvYXV0b2NvbmYnOworICB1bnNoaWZ0IEBJTkMsICRwa2dkYXRhZGlyOworCisgICMgT3ZlcnJpZGUgU0hFTEwuICBPbiBESkdQUCBTSEVMTCBtYXkgbm90IGJlIHNldCB0byBhIHNoZWxsCisgICMgdGhhdCBjYW4gaGFuZGxlIHJlZGlyZWN0aW9uIGFuZCBxdW90ZSBhcmd1bWVudHMgY29ycmVjdGx5LAorICAjIGUuZy46IENPTU1BTkQuQ09NLiAgRm9yIERKR1BQIGFsd2F5cyB1c2UgdGhlIHNoZWxsIHRoYXQgY29uZmlndXJlCisgICMgaGFzIGRldGVjdGVkLgorICAkRU5WeydTSEVMTCd9ID0gJy9iaW4vc2gnIGlmICgkXk8gZXEgJ2RvcycpOworfQorCit1c2UgQXV0b200dGU6OkM0Y2hlOwordXNlIEF1dG9tNHRlOjpDaGFubmVsRGVmczsKK3VzZSBBdXRvbTR0ZTo6Q2hhbm5lbHM7Cit1c2UgQXV0b200dGU6OkZpbGVVdGlsczsKK3VzZSBBdXRvbTR0ZTo6R2VuZXJhbDsKK3VzZSBBdXRvbTR0ZTo6WEZpbGU7Cit1c2UgRmlsZTo6QmFzZW5hbWU7Cit1c2Ugc3RyaWN0OworCisjIERhdGEgZGlyZWN0b3J5LgorbXkgJHBrZ2RhdGFkaXIgPSAkRU5WeydBQ19NQUNST0RJUid9IHx8ICcvdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3Ivc2hhcmUvYXV0b2NvbmYnOworCisjICRMQU5HVUFHRXtMQU5HVUFHRX0gLS0gQXV0b21hdGljIG9wdGlvbnMgZm9yIExBTkdVQUdFLgorbXkgJWxhbmd1YWdlOworCitteSAkb3V0cHV0ID0gJy0nOworCisjIE1vZGUgb2YgdGhlIG91dHB1dCBmaWxlIGV4Y2VwdCBmb3IgdHJhY2VzLgorbXkgJG1vZGUgPSAiMDY2NiI7CisKKyMgSWYgbWVsdCwgZG9uJ3QgdXNlIGZyb3plbiBmaWxlcy4KK215ICRtZWx0ID0gMDsKKworIyBOYW1lcyBvZiB0aGUgY2FjaGUgZGlyZWN0b3J5LCBjYWNoZSBkaXJlY3RvcnkgaW5kZXgsIHRyYWNlIGNhY2hlCisjIHByZWZpeCwgYW5kIG91dHB1dCBjYWNoZSBwcmVmaXguICBBbmQgdGhlIElPIG9iamVjdCBmb3IgdGhlIGluZGV4LgorbXkgJGNhY2hlOworbXkgJGljYWNoZTsKK215ICR0Y2FjaGU7CitteSAkb2NhY2hlOworbXkgJGljYWNoZV9maWxlOworCitteSAkZmxvY2tfaW1wbGVtZW50ZWQgPSAneWVzJzsKKworIyBUaGUgbWFjcm9zIHRvIHRyYWNlIG1hcHBlZCB0byB0aGVpciBmb3JtYXQsIGFzIHNwZWNpZmllZCBieSB0aGUKKyMgdXNlci4KK215ICV0cmFjZTsKKworIyBUaGUgbWFjcm9zIHRoZSB1c2VyIHdpbGwgd2FudCB0byB0cmFjZSBpbiB0aGUgZnV0dXJlLgorIyBXZSBuZWVkIGBpbmNsdWRlJyB0byBnZXQgdGhlIGluY2x1ZGVkIGZpbGUsIGBtNF9wYXR0ZXJuX2ZvcmJpZCcgYW5kCisjIGBtNF9wYXR0ZXJuX2FsbG93JyB0byBjaGVjayB0aGUgb3V0cHV0LgorIworIyBGSVhNRTogV2hhdCBhYm91dCBgc2luY2x1ZGUnPworbXkgQHByZXNlbGVjdCA9ICgnaW5jbHVkZScsCisJCSAnbTRfcGF0dGVybl9hbGxvdycsICdtNF9wYXR0ZXJuX2ZvcmJpZCcsCisJCSAnX200X3dhcm4nKTsKKworIyBNNCBpbmNsdWRlIHBhdGguCitteSBAaW5jbHVkZTsKKworIyBEbyB3ZSBmcmVlemU/CitteSAkZnJlZXplID0gMDsKKworIyAkTTQuCitteSAkbTQgPSAkRU5WeyJNNCJ9IHx8ICcvdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3IvYmluL200JzsKKyMgU29tZSBub24tR05VIG00J3MgZG9uJ3QgcmVqZWN0IHRoZSAtLWhlbHAgb3B0aW9uLCBzbyBnaXZlIHRoZW0gL2Rldi9udWxsLgorZmF0YWwgIm5lZWQgR05VIG00IDEuNCBvciBsYXRlcjogJG00IgorICBpZiBzeXN0ZW0gIiRtNCAtLWhlbHAgPC9kZXYvbnVsbCAyPiYxIHwgZ3JlcCByZWxvYWQtc3RhdGUgPi9kZXYvbnVsbCI7CisKKyMgU2V0IHNvbWUgaGlnaCByZWN1cnNpb24gbGltaXQgYXMgdGhlIGRlZmF1bHQgbGltaXQsIDI1MCwgaGFzIGFscmVhZHkKKyMgYmVlbiBoaXQgd2l0aCBBQ19PVVRQVVQuICBEb24ndCBvdmVycmlkZSB0aGUgdXNlcidzIGNob2ljZS4KKyRtNCAuPSAnIC0tbmVzdGluZy1saW1pdD0xMDI0JworICBpZiAiICRtNCAiICF+IC8gKC0tbmVzdGluZy1saW1pdCg9WzAtOV0rKT98LUxbMC05XSopIC87CisKKworIyBATTRfQlVJTFRJTiAtLSBNNCBidWlsdGlucyBhbmQgYSB1c2VmdWwgY29tbWVudC4KK215IEBtNF9idWlsdGluID0gYGVjaG8gZHVtcGRlZiB8ICRtNCAyPiYxID4vZGV2L251bGxgOworbWFwIHsgcy86LiovLztzL1xXLy8gfSBAbTRfYnVpbHRpbjsKKworCisjICVNNF9CVUlMVElOX0FMVEVSTkFURV9OQU1FCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoZSBidWlsdGlucyBhcmUgcmVuYW1lZCwgZS5nLiwgYGRlZmluZScgaXMgcmVuYW1lZCBgbTRfZGVmaW5lJy4KKyMgU28gbWFwIGBkZWZpbmUnIHRvIGBtNF9kZWZpbmUnIGFuZCBjb252ZXJzZWx5LgorIyBTb21lIG1hY3JvcyBkb24ndCBmb2xsb3cgdGhpcyBzY2hlbWU6IGJlIHN1cmUgdG8gcHJvcGVybHkgbWFwIHRvIHRoZWlyCisjIGFsdGVybmF0ZSBuYW1lIHRvby4KKyMKKyMgRklYTUU6IFRyYWNlIHN0YXR1cyBvZiByZW5hbWVkIGJ1aWx0aW5zIHdhcyBmaXhlZCBpbiBNNCAxLjQuNSwgd2hpY2gKKyMgd2Ugbm93IGRlcGVuZCBvbjsgZG8gd2Ugc3RpbGwgbmVlZCB0byBkbyB0aGlzIG1hcHBpbmc/CisjCisjIFNvIHdlIHdpbGwgbWVyZ2UgdGhlbSwgaS5lLiwgdHJhY2luZyBgQlVJTFRJTicgb3IgdHJhY2luZworIyBgbTRfQlVJTFRJTicgd2lsbCBiZSB0aGUgc2FtZTogdHJhY2luZyBib3RoLCBidXQgaG9ub3JpbmcgdGhlCisjICpsYXN0KiB0cmFjZSBzcGVjaWZpY2F0aW9uLgorIworIyBGSVhNRTogVGhpcyBpcyBub3QgZW5vdWdoOiBpbiB0aGUgb3V0cHV0IGAkMCcgd2lsbCBiZSBgQlVJTFRJTicKKyMgc29tZXRpbWVzIGFuZCBgbTRfQlVJTFRJTicgYXQgb3RoZXJzLiAgV2Ugc2hvdWxkIHJldHVybiBhIHVuaXF1ZSBuYW1lLAorIyB0aGUgb25lIHNwZWNpZmllZCBieSB0aGUgdXNlci4KKyMKKyMgRklYTUU6IFRvIGJlIGFic29sdXRlbHkgcmlnb3JvdXMsIEkgd291bGQgc2F5IHRoYXQgZ2l2ZW4gdGhhdCB3ZQorIyBfcmVkZWZpbmVfIGRpdmVydCAoaW5zdGVhZCBvZiBfY29weWluZ18gaXQpLCBkaXZlcnQgYW5kIHRoZSBsaWtlCisjIHNob3VsZCBub3QgYmUgcGFydCBvZiB0aGlzIGxpc3QuCitteSAlbTRfYnVpbHRpbl9hbHRlcm5hdGVfbmFtZTsKK0BtNF9idWlsdGluX2FsdGVybmF0ZV9uYW1leyIkXyIsICJtNF8kXyJ9ID0gKCJtNF8kXyIsICIkXyIpCisgIGZvcmVhY2ggKGdyZXAgeyAhL200d3JhcHxtNGV4aXR8ZG5sfGlmZWxzZXxfXy4qX18vIH0gQG00X2J1aWx0aW4pOworQG00X2J1aWx0aW5fYWx0ZXJuYXRlX25hbWV7ImlmZWxzZSIsICJtNF9pZiJ9ICAgPSAoIm00X2lmIiwgImlmZWxzZSIpOworQG00X2J1aWx0aW5fYWx0ZXJuYXRlX25hbWV7Im00ZXhpdCIsICJtNF9leGl0In0gPSAoIm00X2V4aXQiLCAibTRleGl0Iik7CitAbTRfYnVpbHRpbl9hbHRlcm5hdGVfbmFtZXsibTR3cmFwIiwgIm00X3dyYXAifSA9ICgibTRfd3JhcCIsICJtNHdyYXAiKTsKKworCisjICRIRUxQCisjIC0tLS0tCiskaGVscCA9ICJVc2FnZTogJDAgW09QVElPTl0uLi4gW0ZJTEVTXQorCitSdW4gR05VIE00IG9uIHRoZSBGSUxFUywgYXZvaWRpbmcgdXNlbGVzcyBydW5zLiAgT3V0cHV0IHRoZSB0cmFjZXMgaWYgdHJhY2luZywKK3RoZSBmcm96ZW4gZmlsZSBpZiBmcmVlemluZywgb3RoZXJ3aXNlIHRoZSBleHBhbnNpb24gb2YgdGhlIEZJTEVTLgorCitJZiBzb21lIG9mIHRoZSBGSUxFUyBhcmUgbmFtZWQgXGBGSUxFLm00ZlwnIHRoZXkgYXJlIGNvbnNpZGVyZWQgdG8gYmUgTTQKK2Zyb3plbiBmaWxlcyBvZiBhbGwgdGhlIHByZXZpb3VzIGZpbGVzICh3aGljaCBhcmUgdGhlcmVmb3JlIG5vdCBsb2FkZWQpLgorSWYgXGBGSUxFLm00ZlwnIGlzIG5vdCBmb3VuZCwgdGhlbiBcYEZJTEUubTRcJyB3aWxsIGJlIHVzZWQsIHRvZ2V0aGVyIHdpdGgKK2FsbCB0aGUgcHJldmlvdXMgZmlsZXMuCisKK1NvbWUgZmlsZXMgbWF5IGJlIG9wdGlvbmFsLCBpLmUuLCB3aWxsIG9ubHkgYmUgcHJvY2Vzc2VkIGlmIGZvdW5kIGluIHRoZQoraW5jbHVkZSBwYXRoLCBidXQgdGhlbiBtdXN0IGVuZCBpbiBcYC5tND9cJzsgIHRoZSBxdWVzdGlvbiBtYXJrIGlzIG5vdCBwYXJ0IG9mCit0aGUgYWN0dWFsIGZpbGUgbmFtZS4KKworT3BlcmF0aW9uIG1vZGVzOgorICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKyAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgIHZlcmJvc2VseSByZXBvcnQgcHJvY2Vzc2luZworICAtZCwgLS1kZWJ1ZyAgICAgICAgICAgICAgZG9uXCd0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKyAgLW8sIC0tb3V0cHV0PUZJTEUgICAgICAgIHNhdmUgb3V0cHV0IGluIEZJTEUgKGRlZmF1bHRzIHRvIFxgLVwnLCBzdGRvdXQpCisgIC1mLCAtLWZvcmNlICAgICAgICAgICAgICBkb25cJ3QgcmVseSBvbiBjYWNoZWQgdmFsdWVzCisgIC1XLCAtLXdhcm5pbmdzPUNBVEVHT1JZICByZXBvcnQgdGhlIHdhcm5pbmdzIGZhbGxpbmcgaW4gQ0FURUdPUlkKKyAgLWwsIC0tbGFuZ3VhZ2U9TEFORyAgICAgIHNwZWNpZnkgdGhlIHNldCBvZiBNNCBtYWNyb3MgdG8gdXNlCisgIC1DLCAtLWNhY2hlPURJUkVDVE9SWSAgICBwcmVzZXJ2ZSByZXN1bHRzIGZvciBmdXR1cmUgcnVucyBpbiBESVJFQ1RPUlkKKyAgICAgIC0tbm8tY2FjaGUgICAgICAgICAgIGRpc2FibGUgdGhlIGNhY2hlCisgIC1tLCAtLW1vZGU9T0NUQUwgICAgICAgICBjaGFuZ2UgdGhlIG5vbiB0cmFjZSBvdXRwdXQgZmlsZSBtb2RlICgwNjY2KQorICAtTSwgLS1tZWx0ICAgICAgICAgICAgICAgZG9uXCd0IHVzZSBNNCBmcm96ZW4gZmlsZXMKKworTGFuZ3VhZ2VzIGluY2x1ZGU6CisgIFxgQXV0b2NvbmZcJyAgIGNyZWF0ZSBBdXRvY29uZiBjb25maWd1cmUgc2NyaXB0cworICBcYEF1dG90ZXN0XCcgICBjcmVhdGUgQXV0b3Rlc3QgdGVzdCBzdWl0ZXMKKyAgXGBNNHNoXCcgICAgICAgY3JlYXRlIE00c2ggc2hlbGwgc2NyaXB0cworICBcYE00c3VnYXJcJyAgICBjcmVhdGUgTTRzdWdhciBvdXRwdXQKKworIiAuIEF1dG9tNHRlOjpDaGFubmVsRGVmczo6dXNhZ2UgLiAiCisKK1RoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgXGBNNFwnIGFuZCBcYFdBUk5JTkdTXCcgYXJlIGhvbm9yZWQuCisKK0xpYnJhcnkgZGlyZWN0b3JpZXM6CisgIC1CLCAtLXByZXBlbmQtaW5jbHVkZT1ESVIgIHByZXBlbmQgZGlyZWN0b3J5IERJUiB0byBzZWFyY2ggcGF0aAorICAtSSwgLS1pbmNsdWRlPURJUiAgICAgICAgICBhcHBlbmQgZGlyZWN0b3J5IERJUiB0byBzZWFyY2ggcGF0aAorCitUcmFjaW5nOgorICAtdCwgLS10cmFjZT1NQUNST1s6Rk9STUFUXSAgcmVwb3J0IHRoZSBNQUNSTyBpbnZvY2F0aW9ucworICAtcCwgLS1wcmVzZWxlY3Q9TUFDUk8gICAgICAgcHJlcGFyZSB0byB0cmFjZSBNQUNSTyBpbiBhIGZ1dHVyZSBydW4KKworRnJlZXppbmc6CisgIC1GLCAtLWZyZWV6ZSAgIHByb2R1Y2UgYW4gTTQgZnJvemVuIHN0YXRlIGZpbGUgZm9yIEZJTEVTCisKK0ZPUk1BVCBkZWZhdWx0cyB0byBcYFwkZjpcJGw6XCRuOlwkJVwnLCBhbmQgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGVzY2FwZXM6CisgIFwkXCQgICAgIGxpdGVyYWwgXCQKKyAgXCRmICAgICBmaWxlIHdoZXJlIG1hY3JvIHdhcyBjYWxsZWQKKyAgXCRsICAgICBsaW5lIHdoZXJlIG1hY3JvIHdhcyBjYWxsZWQKKyAgXCRkICAgICBuZXN0aW5nIGRlcHRoIG9mIG1hY3JvIGNhbGwKKyAgXCRuICAgICBuYW1lIG9mIHRoZSBtYWNybworICBcJE5VTSAgIGFyZ3VtZW50IE5VTSwgdW5xdW90ZWQgYW5kIHdpdGggbmV3bGluZXMKKyAgXCRTRVBcQCAgYWxsIGFyZ3VtZW50cywgd2l0aCBuZXdsaW5lcywgcXVvdGVkLCBhbmQgc2VwYXJhdGVkIGJ5IFNFUAorICBcJFNFUCogIGFsbCBhcmd1bWVudHMsIHdpdGggbmV3bGluZXMsIHVucXVvdGVkLCBhbmQgc2VwYXJhdGVkIGJ5IFNFUAorICBcJFNFUCUgIGFsbCBhcmd1bWVudHMsIHdpdGhvdXQgbmV3bGluZXMsIHVucXVvdGVkLCBhbmQgc2VwYXJhdGVkIGJ5IFNFUAorU0VQIGNhbiBiZSBlbXB0eSBmb3IgdGhlIGRlZmF1bHQgKGNvbW1hIGZvciBcQCBhbmQgKiwgY29sb24gZm9yICUpLAorYSBzaW5nbGUgY2hhcmFjdGVyIGZvciB0aGF0IGNoYXJhY3Rlciwgb3Ige1NUUklOR30gdG8gdXNlIGEgc3RyaW5nLgorCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9jb25mXEBnbnUub3JnPi4KK0dOVSBBdXRvY29uZiBob21lIHBhZ2U6IDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYvPi4KK0dlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LgorIjsKKworIyAkVkVSU0lPTgorIyAtLS0tLS0tLQorJHZlcnNpb24gPSAgPDwiRU9GIjsKK2F1dG9tNHRlIChHTlUgQXV0b2NvbmYpIDIuNjUKK0NvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0xpY2Vuc2UgR1BMdjMrL0F1dG9jb25mOiBHTlUgR1BMIHZlcnNpb24gMyBvciBsYXRlcgorPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sPiwgPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2V4Y2VwdGlvbnMuaHRtbD4KK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRlIGl0LgorVGhlcmUgaXMgTk8gV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy4KKworV3JpdHRlbiBieSBBa2ltIERlbWFpbGxlLgorRU9GCisKKworIyMgLS0tLS0tLS0tLSAjIworIyMgUm91dGluZXMuICAjIworIyMgLS0tLS0tLS0tLSAjIworCisKKyMgJE9QVElPTgorIyBmaWxlc190b19vcHRpb25zIChARklMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyYW5zZm9ybSBBdXRvbTR0ZSBjb252ZW50aW9ucyAoZS5nLiwgdXNpbmcgZm9vLm00ZiB0byBkZXNpZ25hdGUgYSBmcm96ZW4KKyMgZmlsZSkgaW50byBhIHN1aXRhYmxlIGNvbW1hbmQgbGluZSBmb3IgTTQgKGUuZy4sIHVzaW5nIC0tcmVsb2FkLXN0YXRlKS4KKyMgcGFyc2VfYXJncyBndWFyYW50ZWVzIHRoYXQgd2Ugd2lsbCBzZWUgYXQgbW9zdCBvbmUgZnJvemVuIGZpbGUsIGFuZCB0aGF0CisjIGlmIGEgZnJvemVuIGZpbGUgaXMgcHJlc2VudCwgaXQgaXMgdGhlIGZpcnN0IGFyZ3VtZW50Lgorc3ViIGZpbGVzX3RvX29wdGlvbnMgKEApCit7CisgIG15IChAZmlsZSkgPSBAXzsKKyAgbXkgQHJlczsKKyAgZm9yZWFjaCBteSAkZmlsZSAoQGZpbGUpCisgICAgeworICAgICAgbXkgJGFyZyA9IHNoZWxsX3F1b3RlICgkZmlsZSk7CisgICAgICBpZiAoJGZpbGUgPX4gL1wubTRmJC8pCisJeworCSAgJGFyZyA9ICItLXJlbG9hZC1zdGF0ZT0kYXJnIjsKKwkgICMgSWYgdGhlIHVzZXIgZG93bmdyYWRlZCBNNCBmcm9tIDEuNiB0byAxLjQueCBhZnRlciBmcmVlemluZworCSAgIyB0aGUgZmlsZSwgdGhlbiB3ZSBlbnN1cmUgdGhlIGZyb3plbiBfX200X3ZlcnNpb25fXyB3aWxsCisJICAjIG5vdCBjYXVzZSBtNF9pbml0IHRvIG1ha2UgdGhlIHdyb25nIGRlY2lzaW9uIGFib3V0IHRoZQorCSAgIyBjdXJyZW50IE00IHZlcnNpb24uCisJICAkYXJnIC49ICIgLS11bmRlZmluZT1fX200X3ZlcnNpb25fXyIKKwkgICAgdW5sZXNzIGdyZXAgey9fX200X3ZlcnNpb25fXy99IEBtNF9idWlsdGluOworCX0KKyAgICAgIHB1c2ggQHJlcywgJGFyZzsKKyAgICB9CisgIHJldHVybiBqb2luICcgJywgQHJlczsKK30KKworCisjIGxvYWRfY29uZmlndXJhdGlvbiAoJEZJTEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExvYWQgdGhlIGNvbmZpZ3VyYXRpb24gJEZJTEUuCitzdWIgbG9hZF9jb25maWd1cmF0aW9uICgkKQoreworICBteSAoJGZpbGUpID0gQF87CisgIHVzZSBUZXh0OjpQYXJzZVdvcmRzOworCisgIG15ICRjZmcgPSBuZXcgQXV0b200dGU6OlhGaWxlICgiPCAiIC4gb3Blbl9xdW90ZSAoJGZpbGUpKTsKKyAgbXkgJGxhbmc7CisgIHdoaWxlICgkXyA9ICRjZmctPmdldGxpbmUpCisgICAgeworICAgICAgY2hvbXA7CisgICAgICAjIENvbW1lbnRzLgorICAgICAgbmV4dAorCWlmIC9eXHMqKFwjLiopPyQvOworCisgICAgICBteSBAd29yZHMgPSBzaGVsbHdvcmRzICgkXyk7CisgICAgICBteSAkdHlwZSA9IHNoaWZ0IEB3b3JkczsKKyAgICAgIGlmICgkdHlwZSBlcSAnYmVnaW4tbGFuZ3VhZ2U6JykKKwl7CisJICBmYXRhbCAiJGZpbGU6JC46IGVuZC1sYW5ndWFnZSBtaXNzaW5nIGZvcjogJGxhbmciCisJICAgIGlmIGRlZmluZWQgJGxhbmc7CisJICAkbGFuZyA9IGxjICR3b3Jkc1swXTsKKwl9CisgICAgICBlbHNpZiAoJHR5cGUgZXEgJ2VuZC1sYW5ndWFnZTonKQorCXsKKwkgIGVycm9yICIkZmlsZTokLjogZW5kLWxhbmd1YWdlIG1pc21hdGNoOiAkbGFuZyIKKwkgICAgaWYgJGxhbmcgbmUgbGMgJHdvcmRzWzBdOworCSAgJGxhbmcgPSB1bmRlZjsKKwl9CisgICAgICBlbHNpZiAoJHR5cGUgZXEgJ2FyZ3M6JykKKwl7CisJICBmYXRhbCAiJGZpbGU6JC46IG5vIGN1cnJlbnQgbGFuZ3VhZ2UiCisJICAgIHVubGVzcyBkZWZpbmVkICRsYW5nOworCSAgcHVzaCBAeyRsYW5ndWFnZXskbGFuZ319LCBAd29yZHM7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGVycm9yICIkZmlsZTokLjogdW5rbm93biBkaXJlY3RpdmU6ICR0eXBlIjsKKwl9CisgICAgfQorfQorCisKKyMgcGFyc2VfYXJncyAoKQorIyAtLS0tLS0tLS0tLS0tCisjIFByb2Nlc3MgYW55IGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCitzdWIgcGFyc2VfYXJncyAoKQoreworICAjIFdlIHdhbnQgdG8gbG9vayBmb3IgdGhlIGVhcmx5IG9wdGlvbnMsIHdoaWNoIHNob3VsZCBub3QgYmUgZm91bmQKKyAgIyBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLiAgUHJlcGVuZCB0byB0aGUgdXNlciBhcmd1bWVudHMuCisgICMgUGVyZm9ybSB0aGlzIHJlcGVhdGVkbHkgc28gdGhhdCB3ZSBjYW4gdXNlIC0tbGFuZ3VhZ2UgaW4gbGFuZ3VhZ2UKKyAgIyBkZWZpbml0aW9ucy4gIEJld2FyZSB0aGF0IHRoZXJlIGNhbiBiZSBzZXZlcmFsIC0tbGFuZ3VhZ2UKKyAgIyBpbnZvY2F0aW9ucy4KKyAgbXkgQGxhbmd1YWdlOworICBkbyB7CisgICAgQGxhbmd1YWdlID0gKCk7CisgICAgdXNlIEdldG9wdDo6TG9uZzsKKyAgICBHZXRvcHQ6Okxvbmc6OkNvbmZpZ3VyZSAoInBhc3NfdGhyb3VnaCIsICJwZXJtdXRlIik7CisgICAgR2V0T3B0aW9ucyAoImx8bGFuZ3VhZ2U9cyIgPT4gXEBsYW5ndWFnZSk7CisKKyAgICBmb3JlYWNoIChAbGFuZ3VhZ2UpCisgICAgICB7CisJZXJyb3IgInVua25vd24gbGFuZ3VhZ2U6ICRfIgorCSAgdW5sZXNzIGV4aXN0cyAkbGFuZ3VhZ2V7bGMgJF99OworCXVuc2hpZnQgQEFSR1YsIEB7JGxhbmd1YWdle2xjICRffX07CisgICAgICB9CisgIH0gd2hpbGUgQGxhbmd1YWdlOworCisgICMgLS1kZWJ1ZyBpcyB1c2VsZXNzOiBpdCBpcyBwYXJzZWQgYmVsb3cuCisgIGlmIChleGlzdHMgJEVOVnsnQVVUT000VEVfREVCVUcnfSkKKyAgICB7CisgICAgICBwcmludCBTVERFUlIgIiRtZTogY29uY3JldGUgYXJndW1lbnRzOlxuIjsKKyAgICAgIGZvcmVhY2ggbXkgJGFyZyAoQEFSR1YpCisJeworCSAgcHJpbnQgU1RERVJSICJ8ICRhcmdcbiI7CisJfQorICAgIH0KKworICAjIFByb2Nlc3MgdGhlIGFyZ3VtZW50cyBmb3IgcmVhbCB0aGlzIHRpbWUuCisgIG15IEB0cmFjZTsKKyAgbXkgQHByZXBlbmRfaW5jbHVkZTsKKyAgcGFyc2VfV0FSTklOR1M7CisgIGdldG9wdAorICAgICgKKyAgICAgIyBPcGVyYXRpb24gbW9kZXM6CisgICAgICJvfG91dHB1dD1zIiAgID0+IFwkb3V0cHV0LAorICAgICAiV3x3YXJuaW5ncz1zIiA9PiBcJnBhcnNlX3dhcm5pbmdzLAorICAgICAibXxtb2RlPXMiICAgICA9PiBcJG1vZGUsCisgICAgICJNfG1lbHQiICAgICAgID0+IFwkbWVsdCwKKworICAgICAjIExpYnJhcnkgZGlyZWN0b3JpZXM6CisgICAgICJCfHByZXBlbmQtaW5jbHVkZT1zIiA9PiBcQHByZXBlbmRfaW5jbHVkZSwKKyAgICAgIkl8aW5jbHVkZT1zIiAgICAgICAgID0+IFxAaW5jbHVkZSwKKworICAgICAjIFRyYWNpbmc6CisgICAgICMgVXNpbmcgYSBoYXNoIGZvciB0cmFjZXMgaXMgc2VkdWNpbmcuICBVbmZvcnR1bmF0ZWx5LCB1cG9uIGAtdCBGT08nLAorICAgICAjIGluc3RlYWQgb2YgbWFwcGluZyBgRk9PJyB0byB1bmRlZiwgR2V0b3B0IG1hcHMgaXQgdG8gYDEnLCBwcmV2ZW50aW5nCisgICAgICMgdXMgZnJvbSBkaXN0aW5ndWlzaGluZyBgLXQgRk9PJyBmcm9tIGAtdCBGT089MScuICBTbyBsZXQncyBkbyBpdAorICAgICAjIGJ5IGhhbmQuCisgICAgICJ0fHRyYWNlPXMiICAgICA9PiBcQHRyYWNlLAorICAgICAicHxwcmVzZWxlY3Q9cyIgPT4gXEBwcmVzZWxlY3QsCisKKyAgICAgIyBGcmVlemluZy4KKyAgICAgIkZ8ZnJlZXplIiA9PiBcJGZyZWV6ZSwKKworICAgICAjIENhY2hpbmcuCisgICAgICJDfGNhY2hlPXMiID0+IFwkY2FjaGUsCisgICAgICJuby1jYWNoZSIgID0+IHN1YiB7ICRjYWNoZSA9IHVuZGVmOyB9LAorICAgICk7CisKKyAgZmF0YWwgInRvbyBmZXcgYXJndW1lbnRzCitUcnkgYCRtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyAgICB1bmxlc3MgQEFSR1Y7CisKKyAgIyBGcmVlemluZzoKKyAgIyBXZSBjYW5ub3QgdHJhY2UgYXQgdGhlIHNhbWUgdGltZSAod2VsbCwgd2UgY2FuLCBidXQgaXQgc291bmRzIGluc2FuZSkuCisgICMgQW5kIGl0IGltcGxpZXMgbWVsdGluZzogdGhlcmUgaXMgcmlzayBub3QgdG8gdXBkYXRlIHByb3Blcmx5IHVzaW5nCisgICMgb2xkIGZyb3plbiBmaWxlcywgYW5kIHdvcnNlIHlldDogd2UgY291bGQgbG9hZCBhIGZyb3plbiBmaWxlIGFuZAorICAjIHJlZnJlZXplIGl0ISAgQSBzb3J0IG9mIGNhY2hpbmcgOikKKyAgZmF0YWwgImNhbm5vdCBmcmVlemUgYW5kIHRyYWNlIgorICAgIGlmICRmcmVlemUgJiYgQHRyYWNlOworICAkbWVsdCA9IDEKKyAgICBpZiAkZnJlZXplOworCisgICMgTmFtZXMgb2YgdGhlIGNhY2hlIGRpcmVjdG9yeSwgY2FjaGUgZGlyZWN0b3J5IGluZGV4LCB0cmFjZSBjYWNoZQorICAjIHByZWZpeCwgYW5kIG91dHB1dCBjYWNoZSBwcmVmaXguICBJZiB0aGUgY2FjaGUgaXMgbm90IHRvIGJlCisgICMgcHJlc2VydmVkLCBkZWZhdWx0IHRvIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSAoYXV0b21hdGljYWxseSByZW1vdmVkCisgICMgb24gZXhpdCkuCisgICRjYWNoZSA9ICR0bXAKKyAgICB1bmxlc3MgJGNhY2hlOworICAkaWNhY2hlID0gIiRjYWNoZS9yZXF1ZXN0cyI7CisgICR0Y2FjaGUgPSAiJGNhY2hlL3RyYWNlcy4iOworICAkb2NhY2hlID0gIiRjYWNoZS9vdXRwdXQuIjsKKworICAjIE5vcm1hbGl6ZSB0aGUgaW5jbHVkZXM6IHRoZSBmaXJzdCBvY2N1cnJlbmNlIGlzIGVub3VnaCwgc2V2ZXJhbCBpcworICAjIGEgcGFpbiBzaW5jZSBpdCBpbnRyb2R1Y2VzIGEgdXNlbGVzcyBkaWZmZXJlbmNlIGluIHRoZSBwYXRoIHdoaWNoCisgICMgaW52YWxpZGF0ZXMgdGhlIGNhY2hlLiAgQW5kIHN0cmlwIGAuJyB3aGljaCBpcyBpbXBsaWNpdCBhbmQgYWx3YXlzCisgICMgZmlyc3QuCisgIEBpbmNsdWRlID0gZ3JlcCB7ICEvXlwuJC8gfSB1bmlxIChyZXZlcnNlKEBwcmVwZW5kX2luY2x1ZGUpLCBAaW5jbHVkZSk7CisKKyAgIyBDb252ZXJ0IEB0cmFjZSB0byAldHJhY2UsIGFuZCB3b3JrIGFyb3VuZCB0aGUgTTQgYnVpbHRpbnMgdHJhY2luZworICAjIHByb2JsZW0uCisgICMgVGhlIGRlZmF1bHQgZm9ybWF0IGlzIGAkZjokbDokbjokJScuCisgIGZvcmVhY2ggKEB0cmFjZSkKKyAgICB7CisgICAgICAvXihbXjpdKykoPzo6KC4qKSk/JC9tczsKKyAgICAgICR0cmFjZXskMX0gPSBkZWZpbmVkICQyID8gJDIgOiAnJGY6JGw6JG46JCUnOworICAgICAgJHRyYWNleyRtNF9idWlsdGluX2FsdGVybmF0ZV9uYW1leyQxfX0gPSAkdHJhY2V7JDF9CisJaWYgZXhpc3RzICRtNF9idWlsdGluX2FsdGVybmF0ZV9uYW1leyQxfTsKKyAgICB9CisKKyAgIyBXb3JrIGFyb3VuZCB0aGUgTTQgYnVpbHRpbnMgdHJhY2luZyBwcm9ibGVtIGZvciBAUFJFU0VMRUNULgorICAjIEZJWE1FOiBJcyB0aGlzIHN0aWxsIG5lZWRlZCwgbm93IHRoYXQgd2UgcmVseSBvbiBNNCAxLjQuNT8KKyAgcHVzaCAoQHByZXNlbGVjdCwKKwltYXAgeyAkbTRfYnVpbHRpbl9hbHRlcm5hdGVfbmFtZXskX30gfQorCWdyZXAgeyBleGlzdHMgJG00X2J1aWx0aW5fYWx0ZXJuYXRlX25hbWV7JF99IH0gQHByZXNlbGVjdCk7CisKKyAgIyBJZiB3ZSBmaW5kIGZyb3plbiBmaWxlcywgdGhlbiBhbGwgdGhlIGZpbGVzIGJlZm9yZSBpdCBhcmUKKyAgIyBkaXNjYXJkZWQ6IHRoZSBmcm96ZW4gZmlsZSBpcyBzdXBwb3NlZCB0byBpbmNsdWRlIHRoZW0gYWxsLgorICAjCisgICMgV2UgZG9uJ3Qgd2FudCB0byBkZXBlbmQgdXBvbiBtNCdzIC0taW5jbHVkZSB0byBmaW5kIHRoZSB0b3AgbGV2ZWwKKyAgIyBmaWxlcywgc28gd2UgdXNlIGBmaW5kX2ZpbGUnIGhlcmUuICBUcnkgdG8gZ2V0IGEgY2Fub25pY2FsIG5hbWUsCisgICMgYXMgaXQncyBwYXJ0IG9mIHRoZSBrZXkgZm9yIGNhY2hpbmcuICBBbmQgc29tZSBmaWxlcyBhcmUgb3B0aW9uYWwKKyAgIyAoYWxzbyBoYW5kbGVkIGJ5IGBmaW5kX2ZpbGUnKS4KKyAgbXkgQGFyZ3Y7CisgIGZvcmVhY2ggKEBBUkdWKQorICAgIHsKKyAgICAgIGlmICgkXyBlcSAnLScpCisJeworCSAgcHVzaCBAYXJndiwgJF87CisJfQorICAgICAgZWxzaWYgKC9cLm00ZiQvKQorCXsKKwkgICMgRnJvemVuIGZpbGVzIGFyZSBvcHRpb25hbCA9PiBwYXNzIGEgYD8nIHRvIGBmaW5kX2ZpbGUnLgorCSAgbXkgJGZpbGUgPSBmaW5kX2ZpbGUgKCIkXz8iLCBAaW5jbHVkZSk7CisJICBpZiAoISRtZWx0ICYmICRmaWxlKQorCSAgICB7CisJICAgICAgQGFyZ3YgPSAoJGZpbGUpOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBzL1wubTRmJC8ubTQvOworCSAgICAgIHB1c2ggQGFyZ3YsIGZpbmRfZmlsZSAoJF8sIEBpbmNsdWRlKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICBteSAkZmlsZSA9IGZpbmRfZmlsZSAoJF8sIEBpbmNsdWRlKTsKKwkgIHB1c2ggQGFyZ3YsICRmaWxlCisJICAgIGlmICRmaWxlOworCX0KKyAgICB9CisgIEBBUkdWID0gQGFyZ3Y7Cit9CisKKworIyBoYW5kbGVfbTQgKCRSRVEsIEBNQUNSTykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJ1biBtNCBvbiB0aGUgaW5wdXQgZmlsZXMsIGFuZCBzYXZlIHRoZSB0cmFjZXMgb24gdGhlIEBNQUNSTy4KK3N1YiBoYW5kbGVfbTQgKCRAKQoreworICBteSAoJHJlcSwgQG1hY3JvKSA9IEBfOworCisgICMgR05VIG00IGFwcGVuZHMgd2hlbiB1c2luZyAtLWRlYnVnZmlsZS8tLWVycm9yLW91dHB1dC4KKyAgdW5saW5rICgkdGNhY2hlIC4gJHJlcS0+aWQgLiAidCIpOworCisgICMgUnVuIG00LgorICAjCisgICMgV2UgZG9uJ3Qgb3V0cHV0IGRpcmVjdGx5IHRvIHRoZSBjYWNoZSBmaWxlcywgdG8gYXZvaWQgcHJvYmxlbXMKKyAgIyB3aGVuIHdlIGFyZSBpbnRlcnJ1cHRlZCAodGhhdCBsZWF2ZXMgY29ycnVwdGVkIGZpbGVzKS4KKyAgeHN5c3RlbSAoIiRtNCAtLWdudSIKKwkgICAuIGpvaW4gKCcgLS1pbmNsdWRlPScsICcnLCBtYXAgeyBzaGVsbF9xdW90ZSAoJF8pIH0gQGluY2x1ZGUpCisJICAgLiAnIC0tZGVidWc9YWZscScKKwkgICAuICghZXhpc3RzICRFTlZ7J0FVVE9NNFRFX05PX0ZBVEFMJ30gPyAnIC0tZmF0YWwtd2FybmluZycgOiAnJykKKwkgICAuICIgLS1kZWJ1Z2ZpbGU9IiAuIHNoZWxsX3F1b3RlICgiJHRjYWNoZSIgLiAkcmVxLT5pZCAuICJ0IikKKwkgICAuIGpvaW4gKCcgLS10cmFjZT0nLCAnJywgbWFwIHsgc2hlbGxfcXVvdGUgKCRfKSB9IHNvcnQgQG1hY3JvKQorCSAgIC4gIiAiIC4gZmlsZXNfdG9fb3B0aW9ucyAoQEFSR1YpCisJICAgLiAiID4gIiAuIHNoZWxsX3F1b3RlICgiJG9jYWNoZSIgLiAkcmVxLT5pZCAuICJ0IikpOworCisgICMgRXZlcnl0aGluZyB3ZW50IG9rOiBwcmVzZXJ2ZSB0aGUgb3V0cHV0cy4KKyAgZm9yZWFjaCBteSAkZmlsZSAobWFwIHsgJF8gLiAkcmVxLT5pZCB9ICgkdGNhY2hlLCAkb2NhY2hlKSkKKyAgICB7CisgICAgICB1c2UgRmlsZTo6Q29weTsKKyAgICAgIG1vdmUgKCIke2ZpbGV9dCIsICIkZmlsZSIpCisJb3IgZmF0YWwgImNhbm5vdCByZW5hbWUgJHtmaWxlfXQgYXMgJGZpbGU6ICQhIjsKKyAgICB9Cit9CisKKworIyB3YXJuX2ZvcmJpZGRlbiAoJFdIRVJFLCAkV09SRCwgJUZPUkJJRERFTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICRXT1JEIGlzIGZvcmJpZGRlbi4gIFdhcm4gd2l0aCBhIGRlZGljYXRlZCBlcnJvciBtZXNzYWdlIGlmIGluCisjICVGT1JCSURERU4sIG90aGVyd2lzZSBhIHNpbXBsZSBgZXJyb3I6IHBvc3NpYmx5IHVuZGVmaW5lZCBtYWNybycKKyMgd2lsbCBkby4KK215ICRmaXJzdF93YXJuX2ZvcmJpZGRlbiA9IDE7CitzdWIgd2Fybl9mb3JiaWRkZW4gKCQkJSkKK3sKKyAgbXkgKCR3aGVyZSwgJHdvcmQsICVmb3JiaWRkZW4pID0gQF87CisgIG15ICRtZXNzYWdlOworCisgIGZvciBteSAkcmUgKHNvcnQga2V5cyAlZm9yYmlkZGVuKQorICAgIHsKKyAgICAgIGlmICgkd29yZCA9fiAkcmUpCisJeworCSAgJG1lc3NhZ2UgPSAkZm9yYmlkZGVueyRyZX07CisJICBsYXN0OworCX0KKyAgICB9CisgICRtZXNzYWdlIHx8PSAicG9zc2libHkgdW5kZWZpbmVkIG1hY3JvOiAkd29yZCI7CisgIHdhcm4gIiR3aGVyZTogZXJyb3I6ICRtZXNzYWdlXG4iOworICBpZiAoJGZpcnN0X3dhcm5fZm9yYmlkZGVuKQorICAgIHsKKyAgICAgIHdhcm4gPDxFT0Y7CisgICAgICBJZiB0aGlzIHRva2VuIGFuZCBvdGhlcnMgYXJlIGxlZ2l0aW1hdGUsIHBsZWFzZSB1c2UgbTRfcGF0dGVybl9hbGxvdy4KKyAgICAgIFNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbi4KK0VPRgorICAgICAgJGZpcnN0X3dhcm5fZm9yYmlkZGVuID0gMDsKKyAgICB9Cit9CisKKworIyBoYW5kbGVfb3V0cHV0ICgkUkVRLCAkT1VUUFVUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSdW4gbTQgb24gdGhlIGlucHV0IGZpbGVzLCBwZXJmb3JtIHF1YWRyaWdyYXBocyBzdWJzdGl0dXRpb24sIGNoZWNrIGZvcgorIyBmb3JiaWRkZW4gdG9rZW5zLCBhbmQgc2F2ZSBpbnRvICRPVVRQVVQuCitzdWIgaGFuZGxlX291dHB1dCAoJCQpCit7CisgIG15ICgkcmVxLCAkb3V0cHV0KSA9IEBfOworCisgIHZlcmIgImNyZWF0aW5nICRvdXRwdXQiOworCisgICMgTG9hZCB0aGUgZm9yYmlkZGVuL2FsbG93ZWQgcGF0dGVybnMuCisgIGhhbmRsZV90cmFjZXMgKCRyZXEsICIkdG1wL3BhdHRlcm5zIiwKKwkJICgnbTRfcGF0dGVybl9mb3JiaWQnID0+ICdmb3JiaWQ6JDE6JDInLAorCQkgICdtNF9wYXR0ZXJuX2FsbG93JyAgPT4gJ2FsbG93OiQxJykpOworICBteSBAcGF0dGVybnMgPSBuZXcgQXV0b200dGU6OlhGaWxlICgiPCAiIC4gb3Blbl9xdW90ZSAoIiR0bXAvcGF0dGVybnMiKSktPmdldGxpbmVzOworICBjaG9tcCBAcGF0dGVybnM7CisgIG15ICVmb3JiaWRkZW4gPQorICAgIG1hcCB7IC9eZm9yYmlkOihbXjpdKyk6LiskLyA9PiAvXmZvcmJpZDpbXjpdKzooLispJC8gfSBAcGF0dGVybnM7CisgIG15ICRmb3JiaWRkZW4gPSBqb2luICgnfCcsIG1hcCB7IC9eZm9yYmlkOihbXjpdKykvIH0gQHBhdHRlcm5zKSB8fCAiXlwkIjsKKyAgbXkgJGFsbG93ZWQgICA9IGpvaW4gKCd8JywgbWFwIHsgL15hbGxvdzooW146XSspLyAgfSBAcGF0dGVybnMpIHx8ICJeXCQiOworCisgIHZlcmIgImZvcmJpZGRlbiB0b2tlbnM6ICRmb3JiaWRkZW4iOworICB2ZXJiICJmb3JiaWRkZW4gdG9rZW4gOiAkXyA9PiAkZm9yYmlkZGVueyRffSIKKyAgICBmb3JlYWNoIChzb3J0IGtleXMgJWZvcmJpZGRlbik7CisgIHZlcmIgImFsbG93ZWQgICB0b2tlbnM6ICRhbGxvd2VkIjsKKworICAjIFJlYWQgdGhlIChjYWNoZWQpIHJhdyBNNCBvdXRwdXQsIHByb2R1Y2UgdGhlIGFjdHVhbCByZXN1bHQuICBXZQorICAjIGhhdmUgdG8gdXNlIHRoZSAybmQgYXJnIHRvIGhhdmUgQXV0b200dGU6OlhGaWxlIGhvbm9yIHRoZSB0aGlyZCwgYnV0IHRoZW4KKyAgIyBzdGRvdXQgaXMgdG8gYmUgaGFuZGxlZCBieSBoYW5kIDooLiAgRG9uJ3QgdXNlIGZkb3BlbiBhcyBpdCBtZWFucworICAjIHdlIHdpbGwgY2xvc2UgU1RET1VULCB3aGljaCB3ZSBhbHJlYWR5IGRvIGluIEVORC4KKyAgbXkgJG91dCA9IG5ldyBBdXRvbTR0ZTo6WEZpbGU7CisgIGlmICgkb3V0cHV0IGVxICctJykKKyAgICB7CisgICAgICAkb3V0LT5vcGVuICgiPiRvdXRwdXQiKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAkb3V0LT5vcGVuKCRvdXRwdXQsIE9fQ1JFQVQgfCBPX1dST05MWSB8IE9fVFJVTkMsIG9jdCAoJG1vZGUpKTsKKyAgICB9CisgIGZhdGFsICJjYW5ub3QgY3JlYXRlICRvdXRwdXQ6ICQhIgorICAgIHVubGVzcyAkb3V0OworICBteSAkaW4gPSBuZXcgQXV0b200dGU6OlhGaWxlICgiPCAiIC4gb3Blbl9xdW90ZSAoJG9jYWNoZSAuICRyZXEtPmlkKSk7CisKKyAgbXkgJXByb2hpYml0ZWQ7CisgIG15ICRyZXM7CisgIHdoaWxlICgkXyA9ICRpbi0+Z2V0bGluZSkKKyAgICB7CisgICAgICBzL1xzKyQvLzsKKyAgICAgIHMvX19vbGluZV9fLyQuL2c7CisgICAgICBzL1xAPDpcQC9bL2c7CisgICAgICBzL1xAOj5cQC9dL2c7CisgICAgICBzL1xAXHs6XEAvKC9nOworICAgICAgcy9cQDpcfVxALykvZzsKKyAgICAgIHMvXEBTXHxcQC9cJC9nOworICAgICAgcy9cQCU6XEAvIy9nOworCisgICAgICAkcmVzID0gJF87CisKKyAgICAgICMgRG9uJ3QgY29tcGxhaW4gaW4gY29tbWVudHMuICBXZWxsLCB1bnRpbCB3ZSBoYXZlIHNvbWV0aGluZworICAgICAgIyBiZXR0ZXIsIGRvbid0IGNvbnNpZGVyIGAjaW5jbHVkZScgZXRjLiBhcmUgY29tbWVudHMuCisgICAgICBzL1wjLiovLworCXVubGVzcyAvXlwjXHMqKGlmfGluY2x1ZGV8ZW5kaWZ8aWZkZWZ8aWZuZGVmfGRlZmluZSlcYi87CisgICAgICBmb3JlYWNoIChzcGxpdCAoL1xXKy8pKQorCXsKKwkgICRwcm9oaWJpdGVkeyRffSA9ICQuCisJICAgIGlmICEvXiQvICYmIC8kZm9yYmlkZGVuL28gJiYgIS8kYWxsb3dlZC9vICYmICEgZXhpc3RzICRwcm9oaWJpdGVkeyRffTsKKwl9CisKKyAgICAgICMgUGVyZm9ybWVkICpsYXN0KjogdGhlIGVtcHR5IHF1YWRyaWdyYXBoLgorICAgICAgJHJlcyA9fiBzL1xAJnRcQC8vZzsKKworICAgICAgcHJpbnQgJG91dCAiJHJlc1xuIjsKKyAgICB9CisKKyAgJG91dC0+Y2xvc2UoKTsKKworICAjIElmIG5vIGZvcmJpZGRlbiB3b3Jkcywgd2UncmUgZG9uZS4KKyAgcmV0dXJuCisgICAgaWYgISAlcHJvaGliaXRlZDsKKworICAjIExvY2F0ZSB0aGUgZm9yYmlkZGVuIHdvcmRzIGluIHRoZSBsYXN0IGlucHV0IGZpbGUuCisgICMgVGhpcyBpcyB1bnNhdGlzZnlpbmcgYnV0Li4uCisgICRleGl0X2NvZGUgPSAxOworICBpZiAoJEFSR1ZbJCNBUkdWXSBuZSAnLScpCisgICAgeworICAgICAgbXkgJHByb2hpYml0ZWQgPSAnXGIoJyAuIGpvaW4gKCd8Jywga2V5cyAlcHJvaGliaXRlZCkgLiAnKVxiJzsKKyAgICAgIG15ICRmaWxlID0gbmV3IEF1dG9tNHRlOjpYRmlsZSAoIjwgIiAuIG9wZW5fcXVvdGUgKCRBUkdWWyQjQVJHVl0pKTsKKworICAgICAgd2hpbGUgKCRfID0gJGZpbGUtPmdldGxpbmUpCisJeworCSAgIyBEb24ndCBjb21wbGFpbiBpbiBjb21tZW50cy4gIFdlbGwsIHVudGlsIHdlIGhhdmUgc29tZXRoaW5nCisJICAjIGJldHRlciwgZG9uJ3QgY29uc2lkZXIgYCNpbmNsdWRlJyBldGMuIHRvIGJlIGNvbW1lbnRzLgorCSAgcy9cIy4qLy8KKwkgICAgdW5sZXNzIC9eXCMoaWZ8aW5jbHVkZXxlbmRpZnxpZmRlZnxpZm5kZWZ8ZGVmaW5lKVxiLzsKKworCSAgIyBDb21wbGFpbiBvbmNlIHBlciB3b3JkLCBidXQgcG9zc2libHkgc2V2ZXJhbCB0aW1lcyBwZXIgbGluZS4KKwkgIHdoaWxlICgvJHByb2hpYml0ZWQvKQorCSAgICB7CisJICAgICAgbXkgJHdvcmQgPSAkMTsKKwkgICAgICB3YXJuX2ZvcmJpZGRlbiAoIiRBUkdWWyQjQVJHVl06JC4iLCAkd29yZCwgJWZvcmJpZGRlbik7CisJICAgICAgZGVsZXRlICRwcm9oaWJpdGVkeyR3b3JkfTsKKwkgICAgICAjIElmIHdlJ3JlIGRvbmUsIGV4aXQuCisJICAgICAgcmV0dXJuCisJCWlmICEgJXByb2hpYml0ZWQ7CisJICAgICAgJHByb2hpYml0ZWQgPSAnXGIoJyAuIGpvaW4gKCd8Jywga2V5cyAlcHJvaGliaXRlZCkgLiAnKVxiJzsKKwkgICAgfQorCX0KKyAgICB9CisgIHdhcm5fZm9yYmlkZGVuICgiJG91dHB1dDokcHJvaGliaXRlZHskX30iLCAkXywgJWZvcmJpZGRlbikKKyAgICBmb3JlYWNoIChzb3J0IHsgJHByb2hpYml0ZWR7JGF9IDw9PiAkcHJvaGliaXRlZHskYn0gfSBrZXlzICVwcm9oaWJpdGVkKTsKK30KKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEhhbmRsaW5nIHRoZSB0cmFjZXMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyAkTTRfTUFDUk8KKyMgdHJhY2VfZm9ybWF0X3RvX200ICgkRk9STUFUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbnZlcnQgYSB0cmFjZSAkRk9STUFUIGludG8gYSBNNCB0cmFjZSBwcm9jZXNzaW5nIG1hY3JvJ3MgYm9keS4KK3N1YiB0cmFjZV9mb3JtYXRfdG9fbTQgKCQpCit7CisgIG15ICgkZm9ybWF0KSA9IEBfOworICBteSAkdW5kZXJzY29yZSA9ICRfOworICBteSAlZXNjYXBlID0gKCMgRmlsZSBuYW1lLgorCQknZicgPT4gJyQxJywKKwkJIyBMaW5lIG51bWJlci4KKwkJJ2wnID0+ICckMicsCisJCSMgRGVwdGguCisJCSdkJyA9PiAnJDMnLAorCQkjIE5hbWUgKGFsc28gYXZhaWxhYmxlIGFzICQwKS4KKwkJJ24nID0+ICckNCcsCisJCSMgRXNjYXBlZCBkb2xsYXIuCisJCSckJyA9PiAnJCcpOworCisgIG15ICRyZXMgPSAnJzsKKyAgJF8gPSAkZm9ybWF0OworICB3aGlsZSAoJF8pCisgICAgeworICAgICAgIyAkbiAtPiAkKG4gKyA0KQorICAgICAgaWYgKHMvXlwkKFxkKykvLykKKwl7CisJICAkcmVzIC49ICJcJCIgLiAoJDEgKyA0KTsKKwl9CisgICAgICAjICR4LCBubyBzZXBhcmF0b3IgZ2l2ZW4uCisgICAgICBlbHNpZiAocy9eXCQoW2ZsZG5cJF0pLy8pCisJeworCSAgJHJlcyAuPSAkZXNjYXBleyQxfTsKKwl9CisgICAgICAjICQueCBvciAke3NlcH14LgorICAgICAgZWxzaWYgKHMvXlwkXHsoW159XSopXH0oW0AqJV0pLy8KKwkgICAgfHwgcy9eXCQoLj8pKFtAKiVdKS8vKQorCXsKKwkgICMgJEAsIGxpc3Qgb2YgcXVvdGVkIGVmZmVjdGl2ZSBhcmd1bWVudHMuCisJICBpZiAoJDIgZXEgJ0AnKQorCSAgICB7CisJICAgICAgJHJlcyAuPSAnXWF0X2F0KFsnIC4gKCQxID8gJDEgOiAnLCcpIC4gJ10sICRAKVsnOworCSAgICB9CisJICAjICQqLCBsaXN0IG9mIHVucXVvdGVkIGVmZmVjdGl2ZSBhcmd1bWVudHMuCisJICBlbHNpZiAoJDIgZXEgJyonKQorCSAgICB7CisJICAgICAgJHJlcyAuPSAnXWF0X3N0YXIoWycgLiAoJDEgPyAkMSA6ICcsJykgLiAnXSwgJEApWyc7CisJICAgIH0KKwkgICMgJCUsIGxpc3Qgb2YgZmxhdHRlbmVkIHVucXVvdGVkIGVmZmVjdGl2ZSBhcmd1bWVudHMuCisJICBlbHNpZiAoJDIgZXEgJyUnKQorCSAgICB7CisJICAgICAgJHJlcyAuPSAnXWF0X3BlcmNlbnQoWycgLiAoJDEgPyAkMSA6ICc6JykgLiAnXSwgJEApWyc7CisJICAgIH0KKwl9CisgICAgICBlbHNpZiAoL14oXCQuKS8pCisJeworCSAgZXJyb3IgImludmFsaWQgZXNjYXBlOiAkMSI7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHMvXihbXlwkXSspLy87CisJICAkcmVzIC49ICQxOworCX0KKyAgICB9CisKKyAgJF8gPSAkdW5kZXJzY29yZTsKKyAgcmV0dXJuICdbWycgLiAkcmVzIC4gJ11dJzsKK30KKworCisjIGhhbmRsZV90cmFjZXMoJFJFUSwgJE9VVFBVVCwgJVRSQUNFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgV2UgdXNlIE00IGl0c2VsZiB0byBwcm9jZXNzIHRoZSB0cmFjZXMuICBCdXQgdG8gYXZvaWQgbmFtZSBjbGFzaGVzIHdoZW4KKyMgcHJvY2Vzc2luZyB0aGUgdHJhY2VzLCB0aGUgYnVpbHRpbnMgYXJlIGRpc2FibGVkLCBhbmQgbW92ZWQgaW50byBgYXRfJy4KKyMgQWN0dWFsbHksIGFsbCB0aGUgbG93IGxldmVsIHByb2Nlc3NpbmcgbWFjcm9zIGFyZSBpbiBgYXRfJyAoYW5kIGBfYXRfJykuCisjIFRvIGF2b2lkIGNsYXNoZXMgYmV0d2VlbiB1c2VyIG1hY3JvcyBhbmQgYGF0XycgbWFjcm9zLCB0aGUgbWFjcm9zIHdoaWNoCisjIGltcGxlbWVudCB0cmFjaW5nIGFyZSBpbiBgQVRfJy4KKyMKKyMgSGF2aW5nICRSRVEgaXMgbmVlZGVkIHRvIG5ldXRyYWxpemUgdGhlIG1hY3JvcyB3aGljaCBoYXZlIGJlZW4gdHJhY2VkLAorIyBidXQgYXJlIG5vdCB3YW50ZWQgbm93Lgorc3ViIGhhbmRsZV90cmFjZXMgKCQkJSkKK3sKKyAgbXkgKCRyZXEsICRvdXRwdXQsICV0cmFjZSkgPSBAXzsKKworICB2ZXJiICJmb3JtYXR0aW5nIHRyYWNlcyBmb3IgYCRvdXRwdXQnOiAiIC4gam9pbiAoJywgJywgc29ydCBrZXlzICV0cmFjZSk7CisKKyAgIyBQcm9jZXNzaW5nIHRoZSB0cmFjZXMuCisgIG15ICR0cmFjZV9tNCA9IG5ldyBBdXRvbTR0ZTo6WEZpbGUgKCI+ICIgLiBvcGVuX3F1b3RlICgiJHRtcC90cmFjZXMubTQiKSk7CisKKyAgJF8gPSA8PCdFT0YnOworICBkaXZlcnQoLTEpCisgIGNoYW5nZXF1b3RlKFssIF0pCisgICMgX2F0X01PREUoU0VQQVJBVE9SLCBFTFQxLCBFTFQyLi4uKQorICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIyBMaXN0IHRoZSBlbGVtZW50cywgc2VwYXJhdGluZyB0aGVuIHdpdGggU0VQQVJBVE9SLgorICAjIE1PREUgY2FuIGJlOgorICAjICBgYXQnICAgICAgIC0tIHRoZSBlbGVtZW50cyBhcmUgZW5jbG9zZWQgaW4gYnJhY2tldHMuCisgICMgIGBzdGFyJyAgICAgLS0gdGhlIGVsZW1lbnRzIGFyZSBsaXN0ZWQgYXMgYXJlLgorICAjICBgcGVyY2VudCcgIC0tIHRoZSBlbGVtZW50cyBhcmUgYGZsYXR0ZW5lZCc6IHNwYWNlcyBhcmUgc2luZ2xlZCBvdXQsCisgICMgICAgICAgICAgICAgICAgYW5kIG5vIG5ldyBsaW5lIHJlbWFpbnMuCisgIGRlZmluZShbX2F0X2F0XSwKKyAgW2F0X2lmZWxzZShbJCNdLCBbMV0sIFtdLAorCSAgICAgWyQjXSwgWzJdLCBbW1skMl1dXSwKKwkgICAgIFtbWyQyXV1bJDFdJDAoWyQxXSwgYXRfc2hpZnQoYXRfc2hpZnQoJEApKSldKV0pCisKKyAgZGVmaW5lKFtfYXRfcGVyY2VudF0sCisgIFthdF9pZmVsc2UoWyQjXSwgWzFdLCBbXSwKKwkgICAgIFskI10sIFsyXSwgW2F0X2ZsYXR0ZW4oWyQyXSldLAorCSAgICAgW2F0X2ZsYXR0ZW4oWyQyXSlbJDFdJDAoWyQxXSwgYXRfc2hpZnQoYXRfc2hpZnQoJEApKSldKV0pCisKKyAgZGVmaW5lKFtfYXRfc3Rhcl0sCisgIFthdF9pZmVsc2UoWyQjXSwgWzFdLCBbXSwKKwkgICAgIFskI10sIFsyXSwgW1skMl1dLAorCSAgICAgW1skMl1bJDFdJDAoWyQxXSwgYXRfc2hpZnQoYXRfc2hpZnQoJEApKSldKV0pCisKKyAgIyBGTEFUVEVOIHF1b3RlcyBpdHMgcmVzdWx0LgorICAjIE5vdGUgdGhhdCB0aGUgc2Vjb25kIHBhdHRlcm4gaXMgYG5ld2xpbmUsIHRhYiBvciBzcGFjZScuICBEb24ndCBsb3NlCisgICMgdGhlIHRhYiEKKyAgZGVmaW5lKFthdF9mbGF0dGVuXSwKKyAgW2F0X3BhdHN1YnN0KGF0X3BhdHN1YnN0KFtbWyQxXV1dLCBbXFxcbl0pLCBbW1xuXHQgXStdLCBbIF0pXSkKKworICBkZWZpbmUoW2F0X2FyZ3NdLCAgICBbYXRfc2hpZnQoYXRfc2hpZnQoYXRfc2hpZnQoYXRfc2hpZnQoYXRfc2hpZnQoJEApKSkpKV0pCisgIGRlZmluZShbYXRfYXRdLCAgICAgIFtfJDAoWyQxXSwgYXRfYXJncygkQCkpXSkKKyAgZGVmaW5lKFthdF9wZXJjZW50XSwgW18kMChbJDFdLCBhdF9hcmdzKCRAKSldKQorICBkZWZpbmUoW2F0X3N0YXJdLCAgICBbXyQwKFskMV0sIGF0X2FyZ3MoJEApKV0pCisKK0VPRgorICBzL14gIC8vbWc7cy9cXHQvXHQvbWc7cy9cXG4vXG4vbWc7CisgIHByaW50ICR0cmFjZV9tNCAkXzsKKworICAjIElmIHlvdSB0cmFjZSBgZGVmaW5lJywgdGhlbiBvbiBgZGVmaW5lKFttNF9leGl0XSwgZGVmbihbbTRleGl0XSknIHlvdQorICAjIHdpbGwgcHJvZHVjZQorICAjCisgICMgICAgQVRfZGVmaW5lKFttNHN1Z2FyLm00XSwgWzExNV0sIFsxXSwgW2RlZmluZV0sIFttNF9leGl0XSwgPG00ZXhpdD4pCisgICMKKyAgIyBTaW5jZSBgPG00ZXhpdD4nIGlzIG5vdCBxdW90ZWQsIHRoZSBvdXRlciBtNCwgd2hlbiBwcm9jZXNzaW5nCisgICMgYHRyYWNlLm00JyB3aWxsIGV4aXQgcHJlbWF0dXJlbHkuICBIZW5jZSwgbW92ZSBhbGwgdGhlIGJ1aWx0aW5zIHRvCisgICMgdGhlIGBhdF8nIG5hbWUgc3BhY2UuCisKKyAgcHJpbnQgJHRyYWNlX200ICIjIENvcHkgdGhlIGJ1aWx0aW5zLlxuIjsKKyAgbWFwIHsgcHJpbnQgJHRyYWNlX200ICJkZWZpbmUoW2F0XyRfXSwgZGVmbihbJF9dKSlcbiIgfSBAbTRfYnVpbHRpbjsKKyAgcHJpbnQgJHRyYWNlX200ICJcbiI7CisKKyAgcHJpbnQgJHRyYWNlX200ICIjIERpc2FibGUgdGhlbS5cbiI7CisgIG1hcCB7IHByaW50ICR0cmFjZV9tNCAiYXRfdW5kZWZpbmUoWyRfXSlcbiIgfSBAbTRfYnVpbHRpbjsKKyAgcHJpbnQgJHRyYWNlX200ICJcbiI7CisKKworICAjIE5ldXRyYWxpemUgdHJhY2VzOiB3ZSBkb24ndCB3YW50IHRyYWNlcyBvZiBjYWNoZWQgcmVxdWVzdHMgKCVSRVFVRVNUKS4KKyAgcHJpbnQgJHRyYWNlX200CisgICAiIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyNcbiIsCisgICAiIyMgQnkgZGVmYXVsdCBuZXV0cmFsaXplIGFsbCB0aGUgdHJhY2VzLiAgIyNcbiIsCisgICAiIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyNcbiIsCisgICAiXG4iOworICBwcmludCAkdHJhY2VfbTQgImF0X2RlZmluZShbQVRfJF9dLCBbYXRfZG5sXSlcbiIKKyAgICBmb3JlYWNoIChzb3J0IGtleXMgJXskcmVxLT5tYWNyb30pOworICBwcmludCAkdHJhY2VfbTQgIlxuIjsKKworICAjIEltcGxlbWVudCB0cmFjZXMgZm9yIGN1cnJlbnQgcmVxdWVzdHMgKCVUUkFDRSkuCisgIHByaW50ICR0cmFjZV9tNAorICAgICIjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjXG4iLAorICAgICIjIyBUcmFjZSBwcm9jZXNzaW5nIG1hY3Jvcy4gICMjXG4iLAorICAgICIjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjXG4iLAorICAgICJcbiI7CisgIGZvcmVhY2ggKHNvcnQga2V5cyAldHJhY2UpCisgICAgeworICAgICAgIyBUcmFjZSByZXF1ZXN0IGNhbiBiZSBlbWJlZCBcbi4KKyAgICAgIChteSAkY29tbWVudCA9ICJUcmFjZSAkXzokdHJhY2V7JF99IikgPX4gcy9eL1wjIC87CisgICAgICBwcmludCAkdHJhY2VfbTQgIiRjb21tZW50XG4iOworICAgICAgcHJpbnQgJHRyYWNlX200ICJhdF9kZWZpbmUoW0FUXyRfXSxcbiI7CisgICAgICBwcmludCAkdHJhY2VfbTQgdHJhY2VfZm9ybWF0X3RvX200ICgkdHJhY2V7JF99KSAuICIpXG5cbiI7CisgICAgfQorICBwcmludCAkdHJhY2VfbTQgIlxuIjsKKworICAjIFJlZW5hYmxlIG91dHB1dC4KKyAgcHJpbnQgJHRyYWNlX200ICJhdF9kaXZlcnQoMClhdF9kbmxcbiI7CisKKyAgIyBUcmFuc2Zvcm0gdGhlIHRyYWNlcyBmcm9tIG00IGludG8gYW4gbTQgaW5wdXQgZmlsZS4KKyAgIyBUeXBpY2FsbHksIHRyYW5zZm9ybToKKyAgIworICAjIHwgbTR0cmFjZTpjb25maWd1cmUuYWM6MzogLTEtIEFDX1NVQlNUKFtleGVjX3ByZWZpeF0sIFtOT05FXSkKKyAgIworICAjIGludG8KKyAgIworICAjIHwgQVRfQUNfU1VCU1QoW2NvbmZpZ3VyZS5hY10sIFszXSwgWzFdLCBbQUNfU1VCU1RdLCBbZXhlY19wcmVmaXhdLCBbTk9ORV0pCisgICMKKyAgIyBQYXkgYXR0ZW50aW9uIHRoYXQgdGhlIGZpbGUgbmFtZSBtaWdodCBpbmNsdWRlIGNvbG9ucywgaWYgdW5kZXIgRE9TCisgICMgZm9yIGluc3RhbmNlLCBzbyB3ZSBkb24ndCB1c2UgYFteOl0rJy4KKyAgbXkgJHRyYWNlcyA9IG5ldyBBdXRvbTR0ZTo6WEZpbGUgKCI8ICIgLiBvcGVuX3F1b3RlICgkdGNhY2hlIC4gJHJlcS0+aWQpKTsKKyAgd2hpbGUgKCRfID0gJHRyYWNlcy0+Z2V0bGluZSkKKyAgICB7CisgICAgICAjIFRyYWNlIHdpdGggYXJndW1lbnRzLCBhcyB0aGUgZXhhbXBsZSBhYm92ZS4gIFdlIGRvbid0IHRyeQorICAgICAgIyB0byBtYXRjaCB0aGUgdHJhaWxpbmcgcGFyZW50aGVzaXMgYXMgaXQgbWlnaHQgYmUgb24gYQorICAgICAgIyBzZXBhcmF0ZSBsaW5lLgorICAgICAgc3tebTR0cmFjZTooLispOihcZCspOiAtKFxkKyktIChbXihdKylcKCguKikkfQorICAgICAgIHtBVF8kNChbJDFdLCBbJDJdLCBbJDNdLCBbJDRdLCAkNX07CisgICAgICAjIFRyYWNlcyB3aXRob3V0IGFyZ3VtZW50cywgYWx3YXlzIG9uIGEgc2luZ2xlIGxpbmUuCisgICAgICBze15tNHRyYWNlOiguKyk6KFxkKyk6IC0oXGQrKS0gKFteKV0qKVxuJH0KKyAgICAgICB7QVRfJDQoWyQxXSwgWyQyXSwgWyQzXSwgWyQ0XSlcbn07CisgICAgICBwcmludCAkdHJhY2VfbTQgIiRfIjsKKyAgICB9CisgICR0cmFjZV9tNC0+Y2xvc2U7CisKKyAgbXkgJGluID0gbmV3IEF1dG9tNHRlOjpYRmlsZSAoIiRtNCAiIC4gc2hlbGxfcXVvdGUgKCIkdG1wL3RyYWNlcy5tNCIpIC4gIiB8Iik7CisgIG15ICRvdXQgPSBuZXcgQXV0b200dGU6OlhGaWxlICgiPiAiIC4gb3Blbl9xdW90ZSAoJG91dHB1dCkpOworCisgICMgVGhpcyBpcyBkdWJpb3VzOiBzaG91bGQgd2UgcmVhbGx5IHRyYW5zZm9ybSB0aGUgcXVhZHJpZ3JhcGhzIGluCisgICMgdHJhY2VzPyAgSXQgbWlnaHQgYnJlYWsgYmFsYW5jZWQgWyBdIGV0Yy4gaW4gdGhlIG91dHB1dC4gIFRoZQorICAjIGNvbnNlbnN1cyBzZWVlbXMgdG8gYmUgdGhhdCB0cmFjZXMgYXJlIG1vcmUgdXNlZnVsIHRoaXMgd2F5LgorICB3aGlsZSAoJF8gPSAkaW4tPmdldGxpbmUpCisgICAgeworICAgICAgIyBJdCBtYWtlcyBubyBzZW5zZSB0byB0cnkgdG8gdHJhbnNmb3JtIF9fb2xpbmVfXy4KKyAgICAgIHMvXEA8OlxAL1svZzsKKyAgICAgIHMvXEA6PlxAL10vZzsKKyAgICAgIHMvXEBcezpcQC8oL2c7CisgICAgICBzL1xAOlx9XEAvKS9nOworICAgICAgcy9cQFNcfFxAL1wkL2c7CisgICAgICBzL1xAJTpcQC8jL2c7CisgICAgICBzL1xAJnRcQC8vZzsKKyAgICAgIHByaW50ICRvdXQgJF87CisgICAgfQorfQorCisKKyMgJEJPT0wKKyMgdXBfdG9fZGF0ZSAoJFJFUSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXJlIHRoZSBjYWNoZSBmaWxlcyBvZiAkUkVRIHVwIHRvIGRhdGU/CisjICRSRVEgaXMgYHZhbGlkJyBpZiBpdCBjb3JyZXNwb25kcyB0byB0aGUgcmVxdWVzdCBhbmQgZXhpc3RzLCB3aGljaAorIyBkb2VzIG5vdCBtZWFuIGl0IGlzIHVwIHRvIGRhdGUuICBJdCBpcyB1cCB0byBkYXRlIGlmLCBpbiBhZGRpdGlvbiwKKyMgaXRzIGZpbGVzIGFyZSB5b3VuZ2VyIHRoYW4gaXRzIGRlcGVuZGVuY2llcy4KK3N1YiB1cF90b19kYXRlICgkKQoreworICBteSAoJHJlcSkgPSBAXzsKKworICByZXR1cm4gMAorICAgIGlmICEgJHJlcS0+dmFsaWQ7CisKKyAgbXkgJHRmaWxlID0gJHRjYWNoZSAuICRyZXEtPmlkOworICBteSAkb2ZpbGUgPSAkb2NhY2hlIC4gJHJlcS0+aWQ7CisKKyAgIyBXZSBjYW4ndCBhbnN3ZXIgcHJvcGVybHkgaWYgdGhlIHRyYWNlcyBhcmUgbm90IGNvbXB1dGVkIHNpbmNlIHdlCisgICMgbmVlZCB0byBrbm93IHdoYXQgb3RoZXIgZmlsZXMgd2VyZSBpbmNsdWRlZC4gIEFjdHVhbGx5LCBpZiBhbnkgb2YKKyAgIyB0aGUgY2FjaGUgZmlsZXMgaXMgbWlzc2luZywgd2UgYXJlIG5vdCB1cCB0byBkYXRlLgorICByZXR1cm4gMAorICAgIGlmICEgLWYgJHRmaWxlIHx8ICEgLWYgJG9maWxlOworCisgICMgVGhlIHlvdW5nZXN0IG9mIHRoZSBjYWNoZSBmaWxlcyBtdXN0IGJlIG9sZGVyIHRoYW4gdGhlIG9sZGVzdCBvZgorICAjIHRoZSBkZXBlbmRlbmNpZXMuCisgIG15ICR0bXRpbWUgPSBtdGltZSAoJHRmaWxlKTsKKyAgbXkgJG9tdGltZSA9IG10aW1lICgkb2ZpbGUpOworICBteSAoJGZpbGUsICRtdGltZSkgPSAoJHRtdGltZSA8ICRvbXRpbWUKKwkJCT8gKCRvZmlsZSwgJG9tdGltZSkgOiAoJHRmaWxlLCAkdG10aW1lKSk7CisKKyAgIyBXZSBkZXBlbmQgYXQgbGVhc3QgdXBvbiB0aGUgYXJndW1lbnRzLgorICBteSBAZGVwID0gQEFSR1Y7CisKKyAgIyBzdGRpbiBpcyBhbHdheXMgb3V0IG9mIGRhdGUuCisgIGlmIChncmVwIHsgJF8gZXEgJy0nIH0gQGRlcCkKKyAgICB7IHJldHVybiAwIH0KKworICAjIEZpbGVzIG1heSBpbmNsdWRlIG90aGVycy4gIFdlIGNhbiB1c2UgdHJhY2VzIHNpbmNlIHdlIGp1c3QgY2hlY2tlZAorICAjIGlmIHRoZXkgYXJlIGF2YWlsYWJsZS4KKyAgaGFuZGxlX3RyYWNlcyAoJHJlcSwgIiR0bXAvZGVwZW5kZW5jaWVzIiwKKwkJICgnaW5jbHVkZScgICAgPT4gJyQxJywKKwkJICAnbTRfaW5jbHVkZScgPT4gJyQxJykpOworICBteSAkZGVwcyA9IG5ldyBBdXRvbTR0ZTo6WEZpbGUgKCI8ICIgLiBvcGVuX3F1b3RlICgiJHRtcC9kZXBlbmRlbmNpZXMiKSk7CisgIHdoaWxlICgkXyA9ICRkZXBzLT5nZXRsaW5lKQorICAgIHsKKyAgICAgIGNob21wOworICAgICAgbXkgJGZpbGUgPSBmaW5kX2ZpbGUgKCIkXz8iLCBAaW5jbHVkZSk7CisgICAgICAjIElmIGEgZmlsZSB3aGljaCB1c2VkIHRvIGJlIGluY2x1ZGVkIGlzIG5vIGxvbmdlciB0aGVyZSwgdGhlbgorICAgICAgIyBkb24ndCBzYXkgaXQncyBtaXNzaW5nIChpdCBtaWdodCBubyBsb25nZXIgYmUgaW5jbHVkZWQpLiAgQnV0CisgICAgICAjIG9mIGNvdXJzZSwgdGhhdCBjYXVzZXMgdGhlIG91dHB1dCB0byBiZSBvdXRkYXRlZCAoYXMgaWYgdGhlCisgICAgICAjIHRpbWUgc3RhbXAgb2YgdGhhdCBtaXNzaW5nIGZpbGUgd2FzIG5ld2VyKS4KKyAgICAgIHJldHVybiAwCisJaWYgISAkZmlsZTsKKyAgICAgIHB1c2ggQGRlcCwgJGZpbGU7CisgICAgfQorCisgICMgSWYgJEZJTEUgaXMgeW91bmdlciB0aGFuIG9uZSBvZiBpdHMgZGVwZW5kZW5jaWVzLCBpdCBpcyBvdXRkYXRlZC4KKyAgcmV0dXJuIHVwX3RvX2RhdGVfcCAoJGZpbGUsIEBkZXApOworfQorCisKKyMjIC0tLS0tLS0tLS0gIyMKKyMjIEZyZWV6aW5nLiAgIyMKKyMjIC0tLS0tLS0tLS0gIyMKKworIyBmcmVlemUgKCRPVVRQVVQpCisjIC0tLS0tLS0tLS0tLS0tLS0KK3N1YiBmcmVlemUgKCQpCit7CisgIG15ICgkb3V0cHV0KSA9IEBfOworCisgICMgV2hlbiBwcm9jZXNzaW5nIHRoZSBmaWxlIHdpdGggZGl2ZXJzaW9uIGRpc2FibGVkLCB0aGVyZSBtdXN0IGJlIG5vCisgICMgb3V0cHV0IGJ1dCBjb21tZW50cyBhbmQgZW1wdHkgbGluZXMuCisgIG15ICRyZXN1bHQgPSB4cXggKCIkbTQiCisJCSAgICAuICcgLS1mYXRhbC13YXJuaW5nJworCQkgICAgLiBqb2luICgnIC0taW5jbHVkZT0nLCAnJywgbWFwIHsgc2hlbGxfcXVvdGUgKCRfKSB9IEBpbmNsdWRlKQorCQkgICAgLiAnIC0tZGVmaW5lPWRpdmVydCcKKwkJICAgIC4gIiAiIC4gZmlsZXNfdG9fb3B0aW9ucyAoQEFSR1YpCisJCSAgICAuICcgPC9kZXYvbnVsbCcpOworICAkcmVzdWx0ID1+IHMvIy4qXG4vL2c7CisgICRyZXN1bHQgPX4gcy9eXG4vL21nOworCisgIGZhdGFsICJmcmVlemluZyBwcm9kdWNlZCBvdXRwdXQ6XG4kcmVzdWx0IgorICAgIGlmICRyZXN1bHQ7CisKKyAgIyBJZiBmcmVlemluZyBwcm9kdWNlcyBvdXRwdXQsIHNvbWV0aGluZyB3ZW50IHdyb25nOiBhIGJhZCBgZGl2ZXJ0JywKKyAgIyBvciBhbiBpbXByb3BlciBwYXJlbiBldGMuCisgIHhzeXN0ZW0gKCIkbTQiCisJICAgLiAnIC0tZmF0YWwtd2FybmluZycKKwkgICAuIGpvaW4gKCcgLS1pbmNsdWRlPScsICcnLCBtYXAgeyBzaGVsbF9xdW90ZSAoJF8pIH0gQGluY2x1ZGUpCisJICAgLiAiIC0tZnJlZXplLXN0YXRlPSIgLiBzaGVsbF9xdW90ZSAoJG91dHB1dCkKKwkgICAuICIgIiAuIGZpbGVzX3RvX29wdGlvbnMgKEBBUkdWKQorCSAgIC4gJyA8L2Rldi9udWxsJyk7Cit9CisKKyMjIC0tLS0tLS0tLS0tLS0tICMjCisjIyBNYWluIHByb2dyYW0uICAjIworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKworbWt0bXBkaXIgKCdhbTR0Jyk7Citsb2FkX2NvbmZpZ3VyYXRpb24gKCRFTlZ7J0FVVE9NNFRFX0NGRyd9IHx8ICIkcGtnZGF0YWRpci9hdXRvbTR0ZS5jZmciKTsKK2xvYWRfY29uZmlndXJhdGlvbiAoIiRFTlZ7J0hPTUUnfS8uYXV0b200dGUuY2ZnIikKKyAgaWYgZXhpc3RzICRFTlZ7J0hPTUUnfSAmJiAtZiAiJEVOVnsnSE9NRSd9Ly5hdXRvbTR0ZS5jZmciOworbG9hZF9jb25maWd1cmF0aW9uICgiLmF1dG9tNHRlLmNmZyIpCisgIGlmIC1mICIuYXV0b200dGUuY2ZnIjsKK3BhcnNlX2FyZ3M7CisKKyMgRnJlZXppbmcgZG9lcyBub3QgaW52b2x2ZSB0aGUgY2FjaGUuCitpZiAoJGZyZWV6ZSkKKyAgeworICAgIGZyZWV6ZSAoJG91dHB1dCk7CisgICAgZXhpdCAkZXhpdF9jb2RlOworICB9CisKKyMgV2UgbmVlZCBvdXIgY2FjaGUgZGlyZWN0b3J5LiAgRG9uJ3QgZmFpbCB3aXRoIHBhcmFsbGVsIGNyZWF0aW9uLgoraWYgKCEgLWQgIiRjYWNoZSIpCisgIHsKKyAgICBta2RpciAiJGNhY2hlIiwgMDc1NQorICAgICAgb3IgLWQgIiRjYWNoZSIKKyAgICAgIG9yIGZhdGFsICJjYW5ub3QgY3JlYXRlICRjYWNoZTogJCEiOworICB9CisKKyMgT3BlbiB0aGUgaW5kZXggZm9yIHVwZGF0ZSwgYW5kIGxvY2sgaXQuICBhdXRvbTR0ZSBoYW5kbGVzIHNldmVyYWwKKyMgZmlsZXMsIGJ1dCB0aGUgaW5kZXggaXMgdGhlIGZpcnN0IGFuZCBsYXN0IGZpbGUgdG8gYmUgdXBkYXRlZCwgc28KKyMgbG9ja2luZyBpdCBpcyBzdWZmaWNpZW50LgorJGljYWNoZV9maWxlID0gbmV3IEF1dG9tNHRlOjpYRmlsZSAkaWNhY2hlLCBPX1JEV1J8T19DUkVBVDsKKyRpY2FjaGVfZmlsZS0+bG9jayAoTE9DS19FWCkKKyAgaWYgKCRmbG9ja19pbXBsZW1lbnRlZCBlcSAieWVzIik7CisKKyMgUmVhZCB0aGUgY2FjaGUgaW5kZXggaWYgYXZhaWxhYmxlIGFuZCBvbGRlciB0aGFuIGF1dG9tNHRlIGl0c2VsZi4KKyMgSWYgYXV0b200dGUgaXMgeW91bmdlciwgdGhlbiBzb21lIHN0cnVjdHVyZXMgc3VjaCBhcyBDNGNoZSBtaWdodAorIyBoYXZlIGNoYW5nZWQsIHdoaWNoIHdvdWxkIGNvcnJ1cHQgaXRzIHByb2Nlc3NpbmcuCitBdXRvbTR0ZTo6QzRjaGUtPmxvYWQgKCRpY2FjaGVfZmlsZSkKKyAgaWYgLWYgJGljYWNoZSAmJiBtdGltZSAoJGljYWNoZSkgPiBtdGltZSAoJDApOworCisjIEFkZCB0aGUgbmV3IHRyYWNlIHJlcXVlc3RzLgorbXkgJHJlcSA9IEF1dG9tNHRlOjpDNGNoZS0+cmVxdWVzdCAoJ2lucHV0JyA9PiBcQEFSR1YsCisJCQkJICAgICdwYXRoJyAgPT4gXEBpbmNsdWRlLAorCQkJCSAgICAnbWFjcm8nID0+IFtrZXlzICV0cmFjZSwgQHByZXNlbGVjdF0pOworCisjIElmICRSRVEncyBjYWNoZSBmaWxlcyBhcmUgbm90IHVwIHRvIGRhdGUsIG9yIHNpbXBseSBpZiB0aGUgdXNlcgorIyBkaXNjYXJkZWQgdGhlbSAoLWYpLCBkZWNsYXJlIGl0IGludmFsaWQuCiskcmVxLT52YWxpZCAoMCkKKyAgaWYgJGZvcmNlIHx8ICEgdXBfdG9fZGF0ZSAoJHJlcSk7CisKKyMgV2Ugbm93IGtub3cgd2hldGhlciB3ZSBjYW4gdHJ1c3QgdGhlIFJlcXVlc3Qgb2JqZWN0LiAgU2F5IGl0LgordmVyYiAidGhlIHRyYWNlIHJlcXVlc3Qgb2JqZWN0IGlzOlxuIiAuICRyZXEtPm1hcnNoYWxsOworCisjIFdlIG5lZWQgdG8gcnVuIE00IGlmIChpKSB0aGUgdXNlciB3YW50cyBpdCAoLS1mb3JjZSksIChpaSkgJFJFUSBpcworIyBpbnZhbGlkLgoraGFuZGxlX200ICgkcmVxLCBrZXlzICV7JHJlcS0+bWFjcm99KQorICBpZiAkZm9yY2UgfHwgISAkcmVxLT52YWxpZDsKKworIyBJc3N1ZSB0aGUgd2FybmluZ3MgZWFjaCB0aW1lIGF1dG9tNHRlIHdhcyBydW4uCitteSAkc2VwYXJhdG9yID0gIlxuIiAuICgnLScgeCAyNSkgLiAiIEVORCBPRiBXQVJOSU5HICIgLiAoJy0nIHggMjUpIC4gIlxuXG4iOworaGFuZGxlX3RyYWNlcyAoJHJlcSwgIiR0bXAvd2FybmluZ3MiLAorCSAgICAgICAoJ19tNF93YXJuJyA9PiAiXCQxOjpcJGY6XCRsOjpcJDI6OlwkMyRzZXBhcmF0b3IiKSk7CisjIFN3YWxsb3cgZXhjZXNzaXZlIG5ld2xpbmVzLgorZm9yIChzcGxpdCAoL1xuKiRzZXBhcmF0b3JcbiovbywgY29udGVudHMgKCIkdG1wL3dhcm5pbmdzIikpKQoreworICAjIFRoZSBtZXNzYWdlIGxvb2tzIGxpa2U6CisgICMgfCBzeW50YXg6OmlucHV0LmFzOjU6Om91Y2gKKyAgIyB8IDo6aW5wdXQuYXM6NDogYmF6IGlzIGV4cGFuZGVkIGZyb20uLi4KKyAgIyB8IGlucHV0LmFzOjI6IGJhciBpcyBleHBhbmRlZCBmcm9tLi4uCisgICMgfCBpbnB1dC5hczozOiBmb28gaXMgZXhwYW5kZWQgZnJvbS4uLgorICAjIHwgaW5wdXQuYXM6NTogdGhlIHRvcCBsZXZlbAorICBteSAoJGNhdCwgJGxvYywgJG1zZywgJHN0YWNrdHJhY2UpID0gc3BsaXQgKCc6OicsICRfLCA0KTsKKyAgbXNnICRjYXQsICRsb2MsICJ3YXJuaW5nOiAkbXNnIjsKKyAgZm9yIChzcGxpdCAvXG4vLCAkc3RhY2t0cmFjZSkKKyAgICB7CisgICAgICBteSAoJGxvYywgJHRyYWNlKSA9IHNwbGl0ICgnOiAnLCAkXywgMik7CisgICAgICBtc2cgJGNhdCwgJGxvYywgJHRyYWNlOworICAgIH0KK30KKworIyBOb3cgb3V0cHV0Li4uCitpZiAoJXRyYWNlKQorICB7CisgICAgIyBBbHdheXMgcHJvZHVjZSB0cmFjZXMsIHNpbmNlIGV2ZW4gaWYgdGhlIG91dHB1dCBpcyB5b3VuZyBlbm91Z2gsCisgICAgIyB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUgdHJhY2VzIHVzZSB0aGUgc2FtZSAqZm9ybWF0KgorICAgICMgKGUuZy4sIGAtdCBGT086Zm9vJyBhbmQgYC10IEZPTzpiYXInIGFyZSBib3RoIHVzaW5nIHRoZSBzYW1lIE00CisgICAgIyB0cmFjZXMsIGhlbmNlIHRoZSBNNCB0cmFjZXMgY2FjaGUgaXMgdXNhYmxlLCBidXQgaXRzIGZvcm1hdHRpbmcKKyAgICAjIHdpbGwgeWllbGQgZGlmZmVyZW50IHJlc3VsdHMpLgorICAgIGhhbmRsZV90cmFjZXMgKCRyZXEsICRvdXRwdXQsICV0cmFjZSk7CisgIH0KK2Vsc2UKKyAgeworICAgICMgQWN0dWFsIE00IGV4cGFuc2lvbiwgaWYgdGhlIHVzZXIgd2FudHMgaXQsIG9yIGlmICRvdXRwdXQgaXMgb2xkCisgICAgIyAoU1RET1VUIGlzIHByZXR0eSBvbGQpLgorICAgIGhhbmRsZV9vdXRwdXQgKCRyZXEsICRvdXRwdXQpCisgICAgICBpZiAkZm9yY2UgfHwgbXRpbWUgKCRvdXRwdXQpIDwgbXRpbWUgKCRvY2FjaGUgLiAkcmVxLT5pZCk7CisgIH0KKworIyBJZiB3ZSByYW4gdXAgdG8gaGVyZSwgdGhlIGNhY2hlIGlzIHZhbGlkLgorJHJlcS0+dmFsaWQgKDEpOworQXV0b200dGU6OkM0Y2hlLT5zYXZlICgkaWNhY2hlX2ZpbGUpOworCitleGl0ICRleGl0X2NvZGU7CisKKyMjIyBTZXR1cCAiR05VIiBzdHlsZSBmb3IgcGVybC1tb2RlIGFuZCBjcGVybC1tb2RlLgorIyMgTG9jYWwgVmFyaWFibGVzOgorIyMgcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIHBlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIHBlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2UtaW1hZ2luYXJ5LW9mZnNldDogMAorIyMgcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIGNwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtZXh0cmEtbmV3bGluZS1iZWZvcmUtYnJhY2U6IHQKKyMjIGNwZXJsLW1lcmdlLXRyYWlsaW5nLWVsc2U6IG5pbAorIyMgY3BlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIEVuZDoKZGlmZiAtLWdpdCBhL2Jpbi9hdXRvbWFrZSBiL2Jpbi9hdXRvbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MjljMWZhCi0tLSAvZGV2L251bGwKKysrIGIvYmluL2F1dG9tYWtlCkBAIC0wLDAgKzEsODcyMiBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjIC0qLSBwZXJsIC0qLQorIyBHZW5lcmF0ZWQgZnJvbSBhdXRvbWFrZS5pbjsgZG8gbm90IGVkaXQgYnkgaGFuZC4KKworZXZhbCAnY2FzZSAkIyBpbiAwKSBleGVjIC91c3IvYmluL3BlcmwgLVMgIiQwIjs7ICopIGV4ZWMgL3Vzci9iaW4vcGVybCAtUyAiJDAiICIkQCI7OyBlc2FjJworICAgIGlmIDA7CisKKyMgYXV0b21ha2UgLSBjcmVhdGUgTWFrZWZpbGUuaW4gZnJvbSBNYWtlZmlsZS5hbQorIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgRGF2aWQgTWFja2VuemllIDxkam1AZ251LmFpLm1pdC5lZHU+LgorIyBQZXJsIHJlaW1wbGVtZW50YXRpb24gYnkgVG9tIFRyb21leSA8dHJvbWV5QHJlZGhhdC5jb20+LCBhbmQKKyMgQWxleGFuZHJlIER1cmV0LUx1dHogPGFkbEBnbnUub3JnPi4KKworcGFja2FnZSBMYW5ndWFnZTsKKworQkVHSU4KK3sKKyAgbXkgJHBlcmxsaWJkaXIgPSAkRU5WeydwZXJsbGliZGlyJ30gfHwgJy91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9ob3N0L3Vzci9zaGFyZS9hdXRvbWFrZS0xLjExJzsKKyAgdW5zaGlmdCBASU5DLCAoc3BsaXQgJzonLCAkcGVybGxpYmRpcik7CisKKyAgIyBPdmVycmlkZSBTSEVMTC4gIFRoaXMgaXMgcmVxdWlyZWQgb24gREpHUFAgc28gdGhhdCBzeXN0ZW0oKSB1c2VzCisgICMgYmFzaCwgbm90IENPTU1BTkQuQ09NIHdoaWNoIGRvZXNuJ3QgcXVvdGUgYXJndW1lbnRzIHByb3Blcmx5LgorICAjIE90aGVyIHN5c3RlbXMgYXJlbid0IGV4cGVjdGVkIHRvIHVzZSAkU0hFTEwgd2hlbiBBdXRvbWFrZQorICAjIHJ1bnMsIGJ1dCBpdCBzaG91bGQgYmUgc2FmZSB0byBkcm9wIHRoZSBgaWYgREpHUFAnIGd1YXJkIGlmCisgICMgaXQgdHVybnMgdXAgb3RoZXIgc3lzdGVtcyBuZWVkIHRoZSBzYW1lIHRoaW5nLiAgQWZ0ZXIgYWxsLAorICAjIGlmIFNIRUxMIGlzIHVzZWQsIC4vY29uZmlndXJlJ3MgU0hFTEwgaXMgYWx3YXlzIGJldHRlciB0aGFuCisgICMgdGhlIHVzZXIncyBTSEVMTCAod2hpY2ggbWF5IGJlIHNvbWV0aGluZyBsaWtlIHRjc2gpLgorICAkRU5WeydTSEVMTCd9ID0gJy9iaW4vc2gnIGlmIGV4aXN0cyAkRU5WeydESkRJUid9OworfQorCit1c2UgQXV0b21ha2U6OlN0cnVjdDsKK3N0cnVjdCAoIyBTaG9ydCBuYW1lIG9mIHRoZSBsYW5ndWFnZSAoYywgZjc3Li4uKS4KKwknbmFtZScgPT4gIlwkIiwKKwkjIE5pY2UgbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgKEMsIEZvcnRyYW4gNzcuLi4pLgorCSdOYW1lJyA9PiAiXCQiLAorCisJIyBMaXN0IG9mIGNvbmZpZ3VyZSB2YXJpYWJsZXMgd2hpY2ggbXVzdCBiZSBkZWZpbmVkLgorCSdjb25maWdfdmFycycgPT4gJ0AnLAorCisJJ2Fuc2knICAgID0+ICJcJCIsCisJIyBgcHVyZScgaXMgYDEnIG9yIGAnLiAgQSBgcHVyZScgbGFuZ3VhZ2UgaXMgb25lIHdoZXJlLCBpZgorCSMgYWxsIHRoZSBmaWxlcyBpbiBhIGRpcmVjdG9yeSBhcmUgb2YgdGhhdCBsYW5ndWFnZSwgdGhlbiB3ZQorCSMgZG8gbm90IHJlcXVpcmUgdGhlIEMgY29tcGlsZXIgb3IgYW55IGNvZGUgdG8gY2FsbCBpdC4KKwkncHVyZScgICA9PiAiXCQiLAorCisJJ2F1dG9kZXAnID0+ICJcJCIsCisKKwkjIE5hbWUgb2YgdGhlIGNvbXBpbGluZyB2YXJpYWJsZSAoQ09NUElMRSkuCisJJ2NvbXBpbGVyJyAgPT4gIlwkIiwKKwkjIENvbnRlbnQgb2YgdGhlIGNvbXBpbGluZyB2YXJpYWJsZS4KKwknY29tcGlsZScgID0+ICJcJCIsCisJIyBGbGFnIHRvIHJlcXVpcmUgY29tcGlsYXRpb24gd2l0aG91dCBsaW5raW5nICgtYykuCisJJ2NvbXBpbGVfZmxhZycgPT4gIlwkIiwKKwknZXh0ZW5zaW9ucycgPT4gJ0AnLAorCSMgQSBzdWJyb3V0aW5lIHRvIGNvbXB1dGUgYSBsaXN0IG9mIHBvc3NpYmxlIGV4dGVuc2lvbnMgb2YKKwkjIHRoZSBwcm9kdWN0IGdpdmVuIHRoZSBpbnB1dCBleHRlbnNpb25zLgorCSMgKGRlZmF1bHRzIHRvIGEgc3Vicm91dGluZSB3aGljaCByZXR1cm5zICgnLiQoT0JKRVhUKScsICcubG8nKSkKKwknb3V0cHV0X2V4dGVuc2lvbnMnID0+ICJcJCIsCisJIyBBIGxpc3Qgb2YgZmxhZyB2YXJpYWJsZXMgdXNlZCBpbiAnY29tcGlsZScuCisJIyAoZGVmYXVsdHMgdG8gW10pCisJJ2ZsYWdzJyA9PiAiQCIsCisKKwkjIEFueSB0YWcgdG8gcGFzcyB0byBsaWJ0b29sIHdoaWxlIGNvbXBpbGluZy4KKwknbGlidG9vbF90YWcnID0+ICJcJCIsCisKKwkjIFRoZSBmaWxlIHRvIHVzZSB3aGVuIGdlbmVyYXRpbmcgcnVsZXMgZm9yIHRoaXMgbGFuZ3VhZ2UuCisJIyBUaGUgZGVmYXVsdCBpcyAnZGVwZW5kMicuCisJJ3J1bGVfZmlsZScgPT4gIlwkIiwKKworCSMgTmFtZSBvZiB0aGUgbGlua2luZyB2YXJpYWJsZSAoTElOSykuCisJJ2xpbmtlcicgPT4gIlwkIiwKKwkjIENvbnRlbnQgb2YgdGhlIGxpbmtpbmcgdmFyaWFibGUuCisJJ2xpbmsnID0+ICJcJCIsCisKKwkjIE5hbWUgb2YgdGhlIGNvbXBpbGVyIHZhcmlhYmxlIChDQykuCisJJ2NjZXInID0+ICJcJCIsCisKKwkjIE5hbWUgb2YgdGhlIGxpbmtlciB2YXJpYWJsZSAoTEQpLgorCSdsZGVyJyA9PiAiXCQiLAorCSMgQ29udGVudCBvZiB0aGUgbGlua2VyIHZhcmlhYmxlICgkKENDKSkuCisJJ2xkJyA9PiAiXCQiLAorCisJIyBGbGFnIHRvIHNwZWNpZnkgdGhlIG91dHB1dCBmaWxlICgtbykuCisJJ291dHB1dF9mbGFnJyA9PiAiXCQiLAorCSdfZmluaXNoJyA9PiAiXCQiLAorCisJIyBUaGlzIGlzIGEgc3Vicm91dGluZSB3aGljaCBpcyBjYWxsZWQgd2hlbmV2ZXIgd2UgZmluYWxseQorCSMgZGV0ZXJtaW5lIHRoZSBjb250ZXh0IGluIHdoaWNoIGEgc291cmNlIGZpbGUgd2lsbCBiZQorCSMgY29tcGlsZWQuCisJJ190YXJnZXRfaG9vaycgPT4gIlwkIiwKKworCSMgSWYgVFJVRSwgbm9kaXN0XyBzb3VyY2VzIHdpbGwgYmUgY29tcGlsZWQgdXNpbmcgc3BlY2lmaWMgcnVsZXMKKwkjIChpLmUuIG5vdCBpbmZlcmVuY2UgcnVsZXMpLiAgVGhlIGRlZmF1bHQgaXMgRkFMU0UuCisJJ25vZGlzdF9zcGVjaWZpYycgPT4gIlwkIik7CisKKworc3ViIGZpbmlzaCAoJCkKK3sKKyAgbXkgKCRzZWxmKSA9IEBfOworICBpZiAoZGVmaW5lZCAkc2VsZi0+X2ZpbmlzaCkKKyAgICB7CisgICAgICAmeyRzZWxmLT5fZmluaXNofSAoQF8pOworICAgIH0KK30KKworc3ViIHRhcmdldF9ob29rICgkJCQkJSkKK3sKKyAgICBteSAoJHNlbGYpID0gQF87CisgICAgaWYgKGRlZmluZWQgJHNlbGYtPl90YXJnZXRfaG9vaykKKyAgICB7CisJJnskc2VsZi0+X3RhcmdldF9ob29rfSAoQF8pOworICAgIH0KK30KKworcGFja2FnZSBBdXRvbWFrZTsKKwordXNlIHN0cmljdDsKK3VzZSBBdXRvbWFrZTo6Q29uZmlnOworQkVHSU4KK3sKKyAgaWYgKCRwZXJsX3RocmVhZHMpCisgICAgeworICAgICAgcmVxdWlyZSB0aHJlYWRzOworICAgICAgaW1wb3J0IHRocmVhZHM7CisgICAgICByZXF1aXJlIFRocmVhZDo6UXVldWU7CisgICAgICBpbXBvcnQgVGhyZWFkOjpRdWV1ZTsKKyAgICB9Cit9Cit1c2UgQXV0b21ha2U6OkdlbmVyYWw7Cit1c2UgQXV0b21ha2U6OlhGaWxlOwordXNlIEF1dG9tYWtlOjpDaGFubmVsczsKK3VzZSBBdXRvbWFrZTo6Q2hhbm5lbERlZnM7Cit1c2UgQXV0b21ha2U6OkNvbmZpZ3VyZV9hYzsKK3VzZSBBdXRvbWFrZTo6RmlsZVV0aWxzOwordXNlIEF1dG9tYWtlOjpMb2NhdGlvbjsKK3VzZSBBdXRvbWFrZTo6Q29uZGl0aW9uIHF3L1RSVUUgRkFMU0UvOwordXNlIEF1dG9tYWtlOjpEaXNqQ29uZGl0aW9uczsKK3VzZSBBdXRvbWFrZTo6T3B0aW9uczsKK3VzZSBBdXRvbWFrZTo6VmVyc2lvbjsKK3VzZSBBdXRvbWFrZTo6VmFyaWFibGU7Cit1c2UgQXV0b21ha2U6OlZhckRlZjsKK3VzZSBBdXRvbWFrZTo6UnVsZTsKK3VzZSBBdXRvbWFrZTo6UnVsZURlZjsKK3VzZSBBdXRvbWFrZTo6V3JhcCAnbWFrZWZpbGVfd3JhcCc7Cit1c2UgRmlsZTo6QmFzZW5hbWU7Cit1c2UgRmlsZTo6U3BlYzsKK3VzZSBDYXJwOworCisjIyAtLS0tLS0tLS0tLSAjIworIyMgQ29uc3RhbnRzLiAgIyMKKyMjIC0tLS0tLS0tLS0tICMjCisKKyMgU29tZSByZWd1bGFyIGV4cHJlc3Npb25zLiAgT25lIHJlYXNvbiB0byBwdXQgdGhlbSBoZXJlIGlzIHRoYXQgaXQKKyMgbWFrZXMgaW5kZW50YXRpb24gd29yayBiZXR0ZXIgaW4gRW1hY3MuCisKKyMgV3JpdGluZyBzaW5nbGVkLXF1b3RlZC0kLXRlcm1pbmF0ZWQgcmVnZXhlcyBpcyBhIHBhaW4gYmVjYXVzZQorIyBwZXJsLW1vZGUgdGhpbmtzIG9mICQnIGFzIHRoZSAkeyd9IHZhcmlhYmxlIChpbnN0ZWFkIG9mIGEgJCBmb2xsb3dlZAorIyBieSBhIGNsb3NpbmcgcXVvdGUuICBMZXR0aW5nIHBlcmwtbW9kZSB0aGluayB0aGUgcXVvdGUgaXMgbm90IGNsb3NlZAorIyBsZWFkcyB0byBhbGwgc29ydCBvZiBtaXNpbmRlbnRhdGlvbnMuICBPbiB0aGUgb3RoZXIgaGFuZCwgZGVmaW5pbmcKKyMgcmVnZXhlcyBhcyBkb3VibGUtcXVvdGVkIHN0cmluZ3MgaXMgZmFyIGxlc3MgcmVhZGFibGUuICBTbyB1c3VhbGx5CisjIHdlIHdpbGwgd3JpdGU6CisjCisjICAkUkVHRVggPSAnXnJlZ2V4X3ZhbHVlJyAuICJcJCI7CisKK215ICRJR05PUkVfUEFUVEVSTiA9ICdeXHMqIyMoW14jXG5dLiopP1xuJzsKK215ICRXSElURV9QQVRURVJOID0gJ15ccyonIC4gIlwkIjsKK215ICRDT01NRU5UX1BBVFRFUk4gPSAnXiMnOworbXkgJFRBUkdFVF9QQVRURVJOPSdbJGEtekEtWjAtOV8uQCVdWy0uYS16QS1aMC05Xygpe30vJCtAJV0qJzsKKyMgQSBydWxlIGhhcyB0aHJlZSBwYXJ0czogYSBsaXN0IG9mIHRhcmdldHMsIGEgbGlzdCBvZiBkZXBlbmRlbmNpZXMsCisjIGFuZCBvcHRpb25hbGx5IGFjdGlvbnMuCitteSAkUlVMRV9QQVRURVJOID0KKyAgIl4oJFRBUkdFVF9QQVRURVJOKD86KD86XFxcXFxufFxccykrJFRBUkdFVF9QQVRURVJOKSopICo6KFtePV0uKnwpXCQiOworCisjIE9ubHkgcmVjb2duaXplIGxlYWRpbmcgc3BhY2VzLCBub3QgbGVhZGluZyB0YWJzLiAgSWYgd2UgcmVjb2duaXplCisjIGxlYWRpbmcgdGFicyBoZXJlIHRoZW4gd2UgbmVlZCB0byBtYWtlIHRoZSByZWFkZXIgc21hcnRlciwgYmVjYXVzZQorIyBvdGhlcndpc2UgaXQgd2lsbCB0aGluayBydWxlcyBsaWtlIGBmb289YmFyOyBcJyBhcmUgZXJyb3JzLgorbXkgJEFTU0lHTk1FTlRfUEFUVEVSTiA9ICdeICooW14gXHQ9OitdKilccyooWzorXT8pPVxzKiguKiknIC4gIlwkIjsKKyMgVGhpcyBwYXR0ZXJuIHJlY29nbml6ZXMgYSBHbml0cyB2ZXJzaW9uIGlkIGFuZCBzZXRzICQxIGlmIHRoZQorIyByZWxlYXNlIGlzIGFuIGFscGhhIHJlbGVhc2UuICBXZSBhbHNvIGFsbG93IGEgc3VmZml4IHdoaWNoIGNhbiBiZQorIyB1c2VkIHRvIGV4dGVuZCB0aGUgdmVyc2lvbiBudW1iZXIgd2l0aCBhICJmb3JrIiBpZGVudGlmaWVyLgorbXkgJEdOSVRTX1ZFUlNJT05fUEFUVEVSTiA9ICdcZCtcLlxkKyhbYS16XXxcLlxkKyk/KC1bQS1aYS16MC05XSspPyc7CisKK215ICRJRl9QQVRURVJOID0gJ15pZlxzKyghPylccyooW0EtWmEtel1bQS1aYS16MC05X10qKVxzKig/OiMuKik/JyAuICJcJCI7CitteSAkRUxTRV9QQVRURVJOID0KKyAgJ15lbHNlKD86XHMrKCE/KVxzKihbQS1aYS16XVtBLVphLXowLTlfXSopKT9ccyooPzojLiopPycgLiAiXCQiOworbXkgJEVORElGX1BBVFRFUk4gPQorICAnXmVuZGlmKD86XHMrKCE/KVxzKihbQS1aYS16XVtBLVphLXowLTlfXSopKT9ccyooPzojLiopPycgLiAiXCQiOworbXkgJFBBVEhfUEFUVEVSTiA9ICcoXHd8WysvLi1dKSsnOworIyBUaGlzIHdpbGwgcGFzcyB0aHJvdWdoIGFueXRoaW5nIG5vdCBvZiB0aGUgcHJlc2NyaWJlZCBmb3JtLgorbXkgJElOQ0xVREVfUEFUVEVSTiA9ICgnXmluY2x1ZGVccysnCisJCSAgICAgICAuICcoKFwkXCh0b3Bfc3JjZGlyXCkvJyAuICRQQVRIX1BBVFRFUk4gLiAnKScKKwkJICAgICAgIC4gJ3woXCRcKHNyY2RpclwpLycgLiAkUEFUSF9QQVRURVJOIC4gJyknCisJCSAgICAgICAuICd8KFteL1wkXScgLiAkUEFUSF9QQVRURVJOIC4gJykpXHMqKCMuKik/JyAuICJcJCIpOworCisjIE1hdGNoIGAtZCcgYXMgYSBjb21tYW5kLWxpbmUgYXJndW1lbnQgaW4gYSBzdHJpbmcuCitteSAkREFTSF9EX1BBVFRFUk4gPSAiKF58XFxzKS1kKFxcc3xcJCkiOworIyBEaXJlY3RvcmllcyBpbnN0YWxsZWQgZHVyaW5nICdpbnN0YWxsLWV4ZWMnIHBoYXNlLgorbXkgJEVYRUNfRElSX1BBVFRFUk4gPQorICAnXig/OmJpbnxzYmlufGxpYmV4ZWN8c3lzY29uZnxsb2NhbHN0YXRlfGxpYnxwa2dsaWJ8LipleGVjLiopJyAuICJcJCI7CisKKyMgVmFsdWVzIGZvciBBQ19DQU5PTklDQUxfKgordXNlIGNvbnN0YW50IEFDX0NBTk9OSUNBTF9CVUlMRCAgPT4gMTsKK3VzZSBjb25zdGFudCBBQ19DQU5PTklDQUxfSE9TVCAgID0+IDI7Cit1c2UgY29uc3RhbnQgQUNfQ0FOT05JQ0FMX1RBUkdFVCA9PiAzOworCisjIFZhbHVlcyBpbmRpY2F0aW5nIHdoZW4gc29tZXRoaW5nIHNob3VsZCBiZSBjbGVhbmVkLgordXNlIGNvbnN0YW50IE1PU1RMWV9DTEVBTiAgICAgPT4gMDsKK3VzZSBjb25zdGFudCBDTEVBTiAgICAgICAgICAgID0+IDE7Cit1c2UgY29uc3RhbnQgRElTVF9DTEVBTiAgICAgICA9PiAyOwordXNlIGNvbnN0YW50IE1BSU5UQUlORVJfQ0xFQU4gPT4gMzsKKworIyBMaWJ0b29sIGZpbGVzLgorbXkgQGxpYnRvb2xfZmlsZXMgPSBxdyhsdG1haW4uc2ggY29uZmlnLmd1ZXNzIGNvbmZpZy5zdWIpOworIyBsdGNvbmZpZyBhcHBlYXJzIGhlcmUgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgdmVyc2lvbnMgb2YgbGlidG9vbC4KK215IEBsaWJ0b29sX3NvbWV0aW1lcyA9IHF3KGx0Y29uZmlnIGx0Y2YtYy5zaCBsdGNmLWN4eC5zaCBsdGNmLWdjai5zaCk7CisKKyMgQ29tbW9ubHkgZm91bmQgZmlsZXMgd2UgbG9vayBmb3IgYW5kIGF1dG9tYXRpY2FsbHkgaW5jbHVkZSBpbgorIyBESVNURklMRVMuCitteSBAY29tbW9uX2ZpbGVzID0KKyAgICAocXcoQUJPVVQtR05VIEFCT1VULU5MUyBBVVRIT1JTIEJBQ0tMT0cgQ09QWUlORyBDT1BZSU5HLkRPQyBDT1BZSU5HLkxJQgorCUNPUFlJTkcuTEVTU0VSIENoYW5nZUxvZyBJTlNUQUxMIE5FV1MgUkVBRE1FIFRIQU5LUyBUT0RPCisJYW5zaTJrbnIuMSBhbnNpMmtuci5jIGNvbXBpbGUgY29uZmlnLmd1ZXNzIGNvbmZpZy5ycGF0aCBjb25maWcuc3ViCisJZGVwY29tcCBlbGlzcC1jb21wIGluc3RhbGwtc2ggbGlidmVyc2lvbi5pbiBtZGF0ZS1zaCBtaXNzaW5nCisJbWtpbnN0YWxsZGlycyBweS1jb21waWxlIHRleGluZm8udGV4IHlsd3JhcCksCisgICAgIEBsaWJ0b29sX2ZpbGVzLCBAbGlidG9vbF9zb21ldGltZXMpOworCisjIENvbW1vbmx5IHVzZWQgZmlsZXMgd2UgYXV0by1pbmNsdWRlLCBidXQgb25seSBzb21ldGltZXMuICBUaGlzIGxpc3QKKyMgaXMgdXNlZCBmb3IgdGhlIC0taGVscCBvdXRwdXQgb25seS4KK215IEBjb21tb25fc29tZXRpbWVzID0KKyAgcXcoYWNsb2NhbC5tNCBhY2NvbmZpZy5oIGNvbmZpZy5oLnRvcCBjb25maWcuaC5ib3QgY29uZmlndXJlCisgICAgIGNvbmZpZ3VyZS5hYyBjb25maWd1cmUuaW4gc3RhbXAtdnRpKTsKKworIyBTdGFuZGFyZCBkaXJlY3RvcmllcyBmcm9tIHRoZSBHTlUgQ29kaW5nIFN0YW5kYXJkcywgYW5kIGFkZGl0aW9uYWwKKyMgcGtnKiBkaXJlY3RvcmllcyBmcm9tIEF1dG9tYWtlLiAgU3RvcmVkIGluIGEgaGFzaCBmb3IgZmFzdCBtZW1iZXIgY2hlY2suCitteSAlc3RhbmRhcmRfcHJlZml4ID0KKyAgICBtYXAgeyAkXyA9PiAxIH0gKHF3KGJpbiBkYXRhIGRhdGFyb290IGR2aSBleGVjIGh0bWwgaW5jbHVkZSBpbmZvCisJCQlsaWIgbGliZXhlYyBsaXNwIGxvY2Fsc3RhdGUgbWFuIG1hbjEgbWFuMiBtYW4zCisJCQltYW40IG1hbjUgbWFuNiBtYW43IG1hbjggbWFuOSBvbGRpbmNsdWRlIHBkZgorCQkJcGtnZGF0YWRpciBwa2dpbmNsdWRlZGlyIHBrZ2xpYmRpciBwa2dsaWJleGVjZGlyCisJCQlwcyBzYmluIHNoYXJlZHN0YXRlIHN5c2NvbmYpKTsKKworIyBDb3B5cmlnaHQgb24gZ2VuZXJhdGVkIE1ha2VmaWxlLmlucy4KK215ICRnZW5fY29weXJpZ2h0ID0gIlwKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisiOworCisjIFRoZXNlIGNvbnN0YW50cyBhcmUgcmV0dXJuZWQgYnkgdGhlIGxhbmdfKl9yZXdyaXRlIGZ1bmN0aW9ucy4KKyMgTEFOR19TVUJESVIgbWVhbnMgdGhhdCB0aGUgcmVzdWx0aW5nIG9iamVjdCBmaWxlIHNob3VsZCBiZSBpbiBhCisjIHN1YmRpciBpZiB0aGUgc291cmNlIGZpbGUgaXMuICBJbiB0aGlzIGNhc2UgdGhlIGZpbGUgbmFtZSBjYW5ub3QKKyMgaGF2ZSBgLi4nIGNvbXBvbmVudHMuCit1c2UgY29uc3RhbnQgTEFOR19JR05PUkUgID0+IDA7Cit1c2UgY29uc3RhbnQgTEFOR19QUk9DRVNTID0+IDE7Cit1c2UgY29uc3RhbnQgTEFOR19TVUJESVIgID0+IDI7CisKKyMgVGhlc2UgYXJlIHVzZWQgd2hlbiBrZWVwaW5nIHRyYWNrIG9mIHdoZXRoZXIgYW4gb2JqZWN0IGNhbiBiZSBidWlsdAorIyBieSB0d28gZGlmZmVyZW50IHBhdGhzLgordXNlIGNvbnN0YW50IENPTVBJTEVfTElCVE9PTCAgPT4gMTsKK3VzZSBjb25zdGFudCBDT01QSUxFX09SRElOQVJZID0+IDI7CisKKyMgV2UgY2FuJ3QgYWx3YXlzIGFzc29jaWF0ZSBhIGxvY2F0aW9uIHRvIGEgdmFyaWFibGUgb3IgYSBydWxlLAorIyB3aGVuIGl0J3MgZGVmaW5lZCBieSBBdXRvbWFrZS4gIFdlIHVzZSBJTlRFUk5BTCBpbiB0aGlzIGNhc2UuCit1c2UgY29uc3RhbnQgSU5URVJOQUwgPT4gbmV3IEF1dG9tYWtlOjpMb2NhdGlvbjsKKworIyBTZXJpYWxpemF0aW9uIGtleXMgZm9yIG1lc3NhZ2UgcXVldWVzLgordXNlIGNvbnN0YW50IFFVRVVFX01FU1NBR0UgICA9PiAibXNnIjsKK3VzZSBjb25zdGFudCBRVUVVRV9DT05GX0ZJTEUgPT4gImNvbmYgZmlsZSI7Cit1c2UgY29uc3RhbnQgUVVFVUVfTE9DQVRJT04gID0+ICJsb2NhdGlvbiI7Cit1c2UgY29uc3RhbnQgUVVFVUVfU1RSSU5HICAgID0+ICJzdHJpbmciOworDAorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBWYXJpYWJsZXMgcmVsYXRlZCB0byB0aGUgb3B0aW9ucy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgVFJVRSBpZiB3ZSBzaG91bGQgYWx3YXlzIGdlbmVyYXRlIE1ha2VmaWxlLmluLgorbXkgJGZvcmNlX2dlbmVyYXRpb24gPSAxOworCisjIEZyb20gdGhlIFBlcmwgbWFudWFsLgorbXkgJHN5bWxpbmtfZXhpc3RzID0gKGV2YWwgJ3N5bWxpbmsgKCIiLCAiIik7JywgJEAgZXEgJycpOworCisjIFRSVUUgaWYgbWlzc2luZyBzdGFuZGFyZCBmaWxlcyBzaG91bGQgYmUgaW5zdGFsbGVkLgorbXkgJGFkZF9taXNzaW5nID0gMDsKKworIyBUUlVFIGlmIHdlIHNob3VsZCBjb3B5IG1pc3NpbmcgZmlsZXM7IG90aGVyd2lzZSBzeW1saW5rIGlmIHBvc3NpYmxlLgorbXkgJGNvcHlfbWlzc2luZyA9IDA7CisKKyMgVFJVRSBpZiB3ZSBzaG91bGQgYWx3YXlzIHVwZGF0ZSBmaWxlcyB0aGF0IHdlIGtub3cgYWJvdXQuCitteSAkZm9yY2VfbWlzc2luZyA9IDA7CisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgVmFyaWFibGVzIGZpbGxlZCBkdXJpbmcgZmlsZXMgc2Nhbm5pbmcuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIE5hbWUgb2YgdGhlIGNvbmZpZ3VyZS5hYyBmaWxlLgorbXkgJGNvbmZpZ3VyZV9hYzsKKworIyBGaWxlcyBmb3VuZCBieSBzY2FubmluZyBjb25maWd1cmUuYWMgZm9yIExJQk9CSlMuCitteSAlbGlic291cmNlcyA9ICgpOworCisjIE5hbWVzIHVzZWQgaW4gQUNfQ09ORklHX0hFQURFUiBjYWxsLgorbXkgQGNvbmZpZ19oZWFkZXJzID0gKCk7CisKKyMgTmFtZXMgdXNlZCBpbiBBQ19DT05GSUdfTElOS1MgY2FsbC4KK215IEBjb25maWdfbGlua3MgPSAoKTsKKworIyBEaXJlY3Rvcnkgd2hlcmUgb3V0cHV0IGZpbGVzIGdvLiAgQWN0dWFsbHksIG91dHB1dCBmaWxlcyBhcmUKKyMgcmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkuCitteSAkb3V0cHV0X2RpcmVjdG9yeTsKKworIyBMaXN0IG9mIE1ha2VmaWxlLmFtJ3MgdG8gcHJvY2VzcywgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgb3V0cHV0cy4KK215IEBpbnB1dF9maWxlcyA9ICgpOworbXkgJW91dHB1dF9maWxlcyA9ICgpOworCisjIENvbXBsZXRlIGxpc3Qgb2YgTWFrZWZpbGUuYW0ncyB0aGF0IGV4aXN0LgorbXkgQGNvbmZpZ3VyZV9pbnB1dF9maWxlcyA9ICgpOworCisjIExpc3Qgb2YgZmlsZXMgaW4gQUNfQ09ORklHX0ZJTEVTL0FDX09VVFBVVCB3aXRob3V0IE1ha2VmaWxlLmFtJ3MsCisjIGFuZCB0aGVpciBvdXRwdXRzLgorbXkgQG90aGVyX2lucHV0X2ZpbGVzID0gKCk7CisjIFdoZXJlIGVhY2ggQUNfQ09ORklHX0ZJTEVTL0FDX09VVFBVVC9BQ19DT05GSUdfTElOSy9BQ19DT05GSUdfSEVBREVSIGFwcGVhcnMuCisjIFRoZSBrZXlzIGFyZSB0aGUgZmlsZXMgY3JlYXRlZCBieSB0aGVzZSBtYWNyb3MuCitteSAlYWNfY29uZmlnX2ZpbGVzX2xvY2F0aW9uID0gKCk7CisjIFRoZSBjb25kaXRpb24gdW5kZXIgd2hpY2ggQUNfQ09ORklHX0ZPT1MgYXBwZWFycy4KK215ICVhY19jb25maWdfZmlsZXNfY29uZGl0aW9uID0gKCk7CisKKyMgRGlyZWN0b3J5IHRvIHNlYXJjaCBmb3IgY29uZmlndXJlLXJlcXVpcmVkIGZpbGVzLiAgVGhpcworIyB3aWxsIGJlIGNvbXB1dGVkIGJ5ICZsb2NhdGVfYXV4X2RpciBhbmQgY2FuIGJlIHNldCB1c2luZworIyBBQ19DT05GSUdfQVVYX0RJUiBpbiBjb25maWd1cmUuYWMuCisjICRDT05GSUdfQVVYX0RJUiBpcyB0aGUgYHJhdycgZGlyZWN0b3J5LCB2YWxpZCBvbmx5IGluIHRoZSBzb3VyY2UtdHJlZS4KK215ICRjb25maWdfYXV4X2RpciA9ICcnOworbXkgJGNvbmZpZ19hdXhfZGlyX3NldF9pbl9jb25maWd1cmVfYWMgPSAwOworIyAkQU1fQ09ORklHX0FVWF9ESVIgaXMgcHJlZml4ZWQgd2l0aCAkKHRvcF9zcmNkaXIpLCBzbyBpdCBjYW4gYmUgdXNlZAorIyBpbiBNYWtlZmlsZXMuCitteSAkYW1fY29uZmlnX2F1eF9kaXIgPSAnJzsKKworIyBEaXJlY3RvcnkgdG8gc2VhcmNoIGZvciBBQ19MSUJTT1VSQ0UgZmlsZXMsIGFzIHNldCBieSBBQ19DT05GSUdfTElCT0JKX0RJUgorIyBpbiBjb25maWd1cmUuYWMuCitteSAkY29uZmlnX2xpYm9ial9kaXIgPSAnJzsKKworIyBXaGV0aGVyIEFNX0dOVV9HRVRURVhUIGhhcyBiZWVuIHNlZW4gaW4gY29uZmlndXJlLmFjLgorbXkgJHNlZW5fZ2V0dGV4dCA9IDA7CisjIFdoZXRoZXIgQU1fR05VX0dFVFRFWFQoW2V4dGVybmFsXSkgaXMgdXNlZC4KK215ICRzZWVuX2dldHRleHRfZXh0ZXJuYWwgPSAwOworIyBXaGVyZSBBTV9HTlVfR0VUVEVYVCBhcHBlYXJzLgorbXkgJGFjX2dldHRleHRfbG9jYXRpb247CisjIFdoZXRoZXIgQU1fR05VX0dFVFRFWFRfSU5UTF9TVUJESVIgaGFzIGJlZW4gc2Vlbi4KK215ICRzZWVuX2dldHRleHRfaW50bCA9IDA7CisKKyMgTGlzdHMgb2YgdGFncyBzdXBwb3J0ZWQgYnkgTGlidG9vbC4KK215ICVsaWJ0b29sX3RhZ3MgPSAoKTsKKyMgMSBpZiBMaWJ0b29sIHVzZXMgTFRfU1VQUE9SVEVEX1RBRy4gIElmIGl0IGRvZXMsIHRoZW4gaXQgYWxzbworIyB1c2VzIEFDX1JFUVVJUkVfQVVYX0ZJTEUuCitteSAkbGlidG9vbF9uZXdfYXBpID0gMDsKKworIyBNb3N0IGltcG9ydGFudCBBQ19DQU5PTklDQUxfKiBtYWNybyBzZWVuIHNvIGZhci4KK215ICRzZWVuX2Nhbm9uaWNhbCA9IDA7CisjIExvY2F0aW9uIG9mIHRoYXQgbWFjcm8uCitteSAkY2Fub25pY2FsX2xvY2F0aW9uOworCisjIFdoZXJlIEFNX01BSU5UQUlORVJfTU9ERSBhcHBlYXJzLgorbXkgJHNlZW5fbWFpbnRfbW9kZTsKKworIyBBY3R1YWwgdmVyc2lvbiB3ZSd2ZSBzZWVuLgorbXkgJHBhY2thZ2VfdmVyc2lvbiA9ICcnOworCisjIFdoZXJlIHZlcnNpb24gaXMgZGVmaW5lZC4KK215ICRwYWNrYWdlX3ZlcnNpb25fbG9jYXRpb247CisKKyMgVFJVRSBpZiB3ZSd2ZSBzZWVuIEFNX0VOQUJMRV9NVUxUSUxJQi4KK215ICRzZWVuX211bHRpbGliID0gMDsKKworIyBUUlVFIGlmIHdlJ3ZlIHNlZW4gQU1fUFJPR19DQ19DX08KK215ICRzZWVuX2NjX2NfbyA9IDA7CisKKyMgTG9jYXRpb24gb2YgQUNfUkVRVUlSRV9BVVhfRklMRSBjYWxscywgaW5kZXhlZCBieSB0aGVpciBhcmd1bWVudC4KK215ICVyZXF1aXJlZF9hdXhfZmlsZSA9ICgpOworCisjIFdoZXJlIEFNX0lOSVRfQVVUT01BS0UgaXMgY2FsbGVkOworbXkgJHNlZW5faW5pdF9hdXRvbWFrZSA9IDA7CisKKyMgVFJVRSBpZiB3ZSd2ZSBzZWVuIEFNX0FVVE9NQUtFX1ZFUlNJT04uCitteSAkc2Vlbl9hdXRvbWFrZV92ZXJzaW9uID0gMDsKKworIyBIYXNoIHRhYmxlIG9mIGRpc2NvdmVyZWQgY29uZmlndXJlIHN1YnN0aXR1dGlvbnMuICBLZXlzIGFyZSBuYW1lcywKKyMgdmFsdWVzIGFyZSBgRklMRTpMSU5FJyBzdHJpbmdzIHdoaWNoIGFyZSB1c2VkIGJ5IGVycm9yIG1lc3NhZ2UKKyMgZ2VuZXJhdGlvbi4KK215ICVjb25maWd1cmVfdmFycyA9ICgpOworCisjIElnbm9yZWQgY29uZmlndXJlIHN1YnN0aXR1dGlvbnMgKGkuZS4sIHZhcmlhYmxlcyBub3QgdG8gYmUgb3V0cHV0IGluCisjIE1ha2VmaWxlLmluKQorbXkgJWlnbm9yZWRfY29uZmlndXJlX3ZhcnMgPSAoKTsKKworIyBGaWxlcyBpbmNsdWRlZCBieSAkY29uZmlndXJlX2FjLgorbXkgQGNvbmZpZ3VyZV9kZXBzID0gKCk7CisKKyMgR3JlYXRlc3QgdGltZXN0YW1wIG9mIGNvbmZpZ3VyZSdzIGRlcGVuZGVuY2llcy4KK215ICRjb25maWd1cmVfZGVwc19ncmVhdGVzdF90aW1lc3RhbXAgPSAwOworCisjIEhhc2ggdGFibGUgb2YgQU1fQ09ORElUSU9OQUwgdmFyaWFibGVzIHNlZW4gaW4gY29uZmlndXJlLgorbXkgJWNvbmZpZ3VyZV9jb25kID0gKCk7CisKKyMgVGhpcyBtYXBzIGV4dGVuc2lvbnMgb250byBsYW5ndWFnZSBuYW1lcy4KK215ICVleHRlbnNpb25fbWFwID0gKCk7CisKKyMgTGlzdCBvZiB0aGUgRElTVF9DT01NT04gZmlsZXMgd2UgZGlzY292ZXJlZCB3aGlsZSByZWFkaW5nCisjIGNvbmZpZ3VyZS5pbgorbXkgJGNvbmZpZ3VyZV9kaXN0X2NvbW1vbiA9ICcnOworCisjIFRoaXMgbWFwcyBsYW5ndWFnZXMgbmFtZXMgb250byBvYmplY3RzLgorbXkgJWxhbmd1YWdlcyA9ICgpOworIyBNYXBzIGVhY2ggbGlua2VyIHZhcmlhYmxlIG9udG8gYSBsYW5ndWFnZSBvYmplY3QuCitteSAlbGlua19sYW5ndWFnZXMgPSAoKTsKKworIyBtYXBzIGV4dGVuc2lvbnMgdG8gbmVlZGVkIHNvdXJjZSBmbGFncy4KK215ICVzb3VyY2VmbGFncyA9ICgpOworCisjIExpc3Qgb2YgdGFyZ2V0cyB3ZSBtdXN0IGFsd2F5cyBvdXRwdXQuCisjIEZJWE1FOiBDb21wbGV0ZSwgYW5kIHJlbW92ZSBmYWxzZWx5IHJlcXVpcmVkIHRhcmdldHMuCitteSAlcmVxdWlyZWRfdGFyZ2V0cyA9CisgICgKKyAgICdhbGwnICAgICAgICAgID0+IDEsCisgICAnZHZpJwkgID0+IDEsCisgICAncGRmJwkgID0+IDEsCisgICAncHMnCQkgID0+IDEsCisgICAnaW5mbycJICA9PiAxLAorICAgJ2luc3RhbGwtaW5mbycgPT4gMSwKKyAgICdpbnN0YWxsJyAgICAgID0+IDEsCisgICAnaW5zdGFsbC1kYXRhJyA9PiAxLAorICAgJ2luc3RhbGwtZXhlYycgPT4gMSwKKyAgICd1bmluc3RhbGwnICAgID0+IDEsCisKKyAgICMgRklYTUU6IE5vdCByZXF1aXJlZCwgdGVtcG9yYXJ5IGhhY2tzLgorICAgIyBXZWxsLCBhY3R1YWxseSB0aGV5IGFyZSBzb3J0IG9mIHJlcXVpcmVkOiB0aGUgLXJlY3Vyc2l2ZQorICAgIyB0YXJnZXRzIHdpbGwgcnVuIHRoZW0gYW55d2F5Li4uCisgICAnaHRtbC1hbScgICAgICAgICA9PiAxLAorICAgJ2R2aS1hbScgICAgICAgICAgPT4gMSwKKyAgICdwZGYtYW0nICAgICAgICAgID0+IDEsCisgICAncHMtYW0nICAgICAgICAgICA9PiAxLAorICAgJ2luZm8tYW0nICAgICAgICAgPT4gMSwKKyAgICdpbnN0YWxsLWRhdGEtYW0nID0+IDEsCisgICAnaW5zdGFsbC1leGVjLWFtJyA9PiAxLAorICAgJ2luc3RhbGwtaHRtbC1hbScgPT4gMSwKKyAgICdpbnN0YWxsLWR2aS1hbScgID0+IDEsCisgICAnaW5zdGFsbC1wZGYtYW0nICA9PiAxLAorICAgJ2luc3RhbGwtcHMtYW0nICAgPT4gMSwKKyAgICdpbnN0YWxsLWluZm8tYW0nID0+IDEsCisgICAnaW5zdGFsbGNoZWNrLWFtJyA9PiAxLAorICAgJ3VuaW5zdGFsbC1hbScgPT4gMSwKKworICAgJ2luc3RhbGwtbWFuJyA9PiAxLAorICApOworCisjIFNldCB0byAxIGlmIHRoaXMgcnVuIHdpbGwgY3JlYXRlIHRoZSBNYWtlZmlsZS5pbiB0aGF0IGRpc3RyaWJ1dGVzCisjIHRoZSBmaWxlcyBpbiBjb25maWdfYXV4X2Rpci4KK215ICRhdXRvbWFrZV93aWxsX3Byb2Nlc3NfYXV4X2RpciA9IDA7CisKKyMgVGhlIG5hbWUgb2YgdGhlIE1ha2VmaWxlIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQuCitteSAkYW1fZmlsZSA9ICdCVUcnOworDAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgVmFyaWFibGVzIHJlc2V0IGJ5ICZpbml0aWFsaXplX3Blcl9pbnB1dC4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBCYXNlbmFtZSBhbmQgcmVsYXRpdmUgZGlyIG9mIHRoZSBpbnB1dCBmaWxlLgorbXkgJGFtX2ZpbGVfbmFtZTsKK215ICRhbV9yZWxhdGl2ZV9kaXI7CisKKyMgU2FtZSBidXQgd3J0IE1ha2VmaWxlLmluLgorbXkgJGluX2ZpbGVfbmFtZTsKK215ICRyZWxhdGl2ZV9kaXI7CisKKyMgUmVsYXRpdmUgcGF0aCB0byB0aGUgdG9wIGRpcmVjdG9yeS4KK215ICR0b3BzcmNkaXI7CisKKyMgR3JlYXRlc3QgdGltZXN0YW1wIG9mIHRoZSBvdXRwdXQncyBkZXBlbmRlbmNpZXMgKGV4Y2x1ZGluZworIyBjb25maWd1cmUncyBkZXBlbmRlbmNpZXMpLgorbXkgJG91dHB1dF9kZXBzX2dyZWF0ZXN0X3RpbWVzdGFtcDsKKworIyBUaGVzZSB2YXJpYWJsZXMgYXJlIHVzZWQgd2hlbiBnZW5lcmF0aW5nIGVhY2ggTWFrZWZpbGUuaW4uCisjIFRoZXkgaG9sZCB0aGUgTWFrZWZpbGUuaW4gdW50aWwgaXQgaXMgcmVhZHkgdG8gYmUgcHJpbnRlZC4KK215ICRvdXRwdXRfdmFyczsKK215ICRvdXRwdXRfYWxsOworbXkgJG91dHB1dF9oZWFkZXI7CitteSAkb3V0cHV0X3J1bGVzOworbXkgJG91dHB1dF90cmFpbGVyOworCisjIFRoaXMgaXMgdGhlIGNvbmRpdGlvbmFsIHN0YWNrLCB1cGRhdGVkIG9uIGlmL2Vsc2UvZW5kaWYsIGFuZAorIyB1c2VkIHRvIGJ1aWxkIENvbmRpdGlvbiBvYmplY3RzLgorbXkgQGNvbmRfc3RhY2s7CisKKyMgVGhpcyBob2xkcyB0aGUgc2V0IG9mIGluY2x1ZGVkIGZpbGVzLgorbXkgQGluY2x1ZGVfc3RhY2s7CisKKyMgTGlzdCBvZiBkZXBlbmRlbmNpZXMgZm9yIHRoZSBvYnZpb3VzIHRhcmdldHMuCitteSBAYWxsOworbXkgQGNoZWNrOworbXkgQGNoZWNrX3Rlc3RzOworCisjIEtleXMgaW4gdGhpcyBoYXNoIHRhYmxlIGFyZSBmaWxlcyB0byBkZWxldGUuICBUaGUgYXNzb2NpYXRlZAorIyB2YWx1ZSB0ZWxscyB3aGVuIHRoaXMgc2hvdWxkIGhhcHBlbiAoTU9TVExZX0NMRUFOLCBESVNUX0NMRUFOLCBldGMuKQorbXkgJWNsZWFuX2ZpbGVzOworCisjIEtleXMgaW4gdGhpcyBoYXNoIHRhYmxlIGFyZSBvYmplY3QgZmlsZXMgb3Igb3RoZXIgZmlsZXMgaW4KKyMgc3ViZGlyZWN0b3JpZXMgd2hpY2ggbmVlZCB0byBiZSByZW1vdmVkLiAgVGhpcyBvbmx5IGhvbGRzIGZpbGVzCisjIHdoaWNoIGFyZSBjcmVhdGVkIGJ5IGNvbXBpbGF0aW9ucy4gIFRoZSB2YWx1ZSBpbiB0aGUgaGFzaCBpbmRpY2F0ZXMKKyMgd2hlbiB0aGUgZmlsZSBzaG91bGQgYmUgcmVtb3ZlZC4KK215ICVjb21waWxlX2NsZWFuX2ZpbGVzOworCisjIEtleXMgaW4gdGhpcyBoYXNoIHRhYmxlIGFyZSBkaXJlY3RvcmllcyB3aGVyZSB3ZSBleHBlY3QgdG8gYnVpbGQgYQorIyBsaWJ0b29sIG9iamVjdC4gIFdlIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIGRlY2lkZSB3aGF0IGRpcmVjdG9yaWVzCisjIHRvIGRlbGV0ZS4KK215ICVsaWJ0b29sX2NsZWFuX2RpcmVjdG9yaWVzOworCisjIFZhbHVlIG9mIGAkKFNPVVJDRVMpJywgdXNlZCBieSB0YWdzLmFtLgorbXkgQHNvdXJjZXM7CisjIFNvdXJjZXMgd2hpY2ggZ28gaW4gdGhlIGRpc3RyaWJ1dGlvbi4KK215IEBkaXN0X3NvdXJjZXM7CisKKyMgVGhpcyBoYXNoIG1hcHMgb2JqZWN0IGZpbGUgbmFtZXMgb250byB0aGVpciBjb3JyZXNwb25kaW5nIHNvdXJjZQorIyBmaWxlIG5hbWVzLiAgVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IGVhY2ggb2JqZWN0IGlzIGNyZWF0ZWQKKyMgYnkgYSBzaW5nbGUgc291cmNlIGZpbGUuCitteSAlb2JqZWN0X21hcDsKKworIyBUaGlzIGhhc2ggbWFwcyBvYmplY3QgZmlsZSBuYW1lcyBvbnRvIGFuIGludGVnZXIgdmFsdWUgcmVwcmVzZW50aW5nCisjIHdoZXRoZXIgdGhpcyBvYmplY3QgaGFzIGJlZW4gYnVpbHQgdmlhIG9yZGluYXJ5IGNvbXBpbGF0aW9uIG9yCisjIGxpYnRvb2wgY29tcGlsYXRpb24gKHRoZSBDT01QSUxFXyogY29uc3RhbnRzKS4KK215ICVvYmplY3RfY29tcGlsYXRpb25fbWFwOworCisKKyMgVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZGlyZWN0b3JpZXMgZm9yIHdoaWNoIHdlJ3ZlIGFscmVhZHkKKyMgY3JlYXRlZCBkaXJzdGFtcCBjb2RlLiAgS2V5cyBhcmUgZGlyZWN0b3JpZXMsIHZhbHVlcyBhcmUgc3RhbXAgZmlsZXMuCisjIFNldmVyYWwga2V5cyBjYW4gc2hhcmUgdGhlIHNhbWUgc3RhbXAgZmlsZXMgaWYgdGhleSBhcmUgZXF1aXZhbGVudAorIyAoYXMgYXJlIGAuLy9mb28nIGFuZCBgZm9vJykuCitteSAlZGlyZWN0b3J5X21hcDsKKworIyBBbGwgLlAgZmlsZXMuCitteSAlZGVwX2ZpbGVzOworCisjIFRoaXMgaXMgYSBsaXN0IG9mIGFsbCB0YXJnZXRzIHRvIHJ1biBkdXJpbmcgIm1ha2UgZGlzdCIuCitteSBAZGlzdF90YXJnZXRzOworCisjIEtlZXAgdHJhY2sgb2YgYWxsIHByb2dyYW1zIGRlY2xhcmVkIGluIHRoaXMgTWFrZWZpbGUsIHdpdGhvdXQKKyMgJChFWEVFWFQpLiAgQHN1YnN0aXR1dGlvbnNAIGFyZSBub3QgbGlzdGVkLgorbXkgJWtub3duX3Byb2dyYW1zOworbXkgJWtub3duX2xpYnJhcmllczsKKworIyBLZXlzIGluIHRoaXMgaGFzaCBhcmUgdGhlIGJhc2VuYW1lcyBvZiBmaWxlcyB3aGljaCBtdXN0IGRlcGVuZCBvbgorIyBhbnNpMmtuci4gIFZhbHVlcyBhcmUgZWl0aGVyIHRoZSBlbXB0eSBzdHJpbmcsIG9yIHRoZSBkaXJlY3RvcnkgaW4KKyMgd2hpY2ggdGhlIEFOU0kgc291cmNlIGZpbGUgYXBwZWFyczsgdGhlIGRpcmVjdG9yeSBtdXN0IGhhdmUgYQorIyB0cmFpbGluZyBgLycuCitteSAlZGVfYW5zaV9maWxlczsKKworIyBUaGlzIGtlZXBzIHRyYWNrIG9mIHdoaWNoIGV4dGVuc2lvbnMgd2UndmUgc2VlbiAodGhhdCB3ZSBjYXJlCisjIGFib3V0KS4KK215ICVleHRlbnNpb25fc2VlbjsKKworIyBUaGlzIGlzIHJhbmRvbSBzY3JhdGNoIHNwYWNlIGZvciB0aGUgbGFuZ3VhZ2UgZmluaXNoIGZ1bmN0aW9ucy4KKyMgRG9uJ3QgcmFuZG9tbHkgb3ZlcndyaXRlIGl0OyBleGFtaW5lIG90aGVyIHVzZXMgb2Yga2V5cyBmaXJzdC4KK215ICVsYW5ndWFnZV9zY3JhdGNoOworCisjIFdlIGtlZXAgdHJhY2sgb2Ygd2hpY2ggb2JqZWN0cyBuZWVkIHNwZWNpYWwgKHBlci1leGVjdXRhYmxlKQorIyBoYW5kbGluZyBvbiBhIHBlci1sYW5ndWFnZSBiYXNpcy4KK215ICVsYW5nX3NwZWNpZmljX2ZpbGVzOworCisjIFRoaXMgaXMgc2V0IHdoZW4gYGhhbmRsZV9kaXN0JyBoYXMgZmluaXNoZWQuICBPbmNlIHRoaXMgaGFwcGVucywKKyMgd2Ugc2hvdWxkIG5vIGxvbmdlciBwdXNoIG9uIGRpc3RfY29tbW9uLgorbXkgJGhhbmRsZV9kaXN0X3J1bjsKKworIyBVc2VkIHRvIHN0b3JlIGEgc2V0IG9mIGxpbmtlcnMgbmVlZGVkIHRvIGdlbmVyYXRlIHRoZSBzb3VyY2VzIGN1cnJlbnRseQorIyB1bmRlciBjb25zaWRlcmF0aW9uLgorbXkgJWxpbmtlcnNfdXNlZDsKKworIyBUcnVlIGlmIHdlIG5lZWQgYExJTksnIGRlZmluZWQuICBUaGlzIGlzIGEgaGFjay4KK215ICRuZWVkX2xpbms7CisKKyMgV2FzIGdldF9vYmplY3RfZXh0ZW5zaW9uIHJ1bj8KKyMgRklYTUU6IFRoaXMgaXMgYSBoYWNrLiBhIGJldHRlciBzd2l0Y2ggc2hvdWxkIGJlIGZvdW5kLgorbXkgJGdldF9vYmplY3RfZXh0ZW5zaW9uX3dhc19ydW47CisKKyMgUmVjb3JkIGVhY2ggZmlsZSBwcm9jZXNzZWQgYnkgbWFrZV9wYXJhZ3JhcGhzLgorbXkgJXRyYW5zZm9ybWVkX2ZpbGVzOworDAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFZhcmlhYmxlcyBub3QgcmVzZXQgYnkgJmluaXRpYWxpemVfcGVyX2lucHV0LiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBDYWNoZSBlYWNoIGZpbGUgcHJvY2Vzc2VkIGJ5IG1ha2VfcGFyYWdyYXBocy4KKyMgKFRoaXMgaXMgZGlmZmVyZW50IGZyb20gJXRyYW5zZm9ybWVkX2ZpbGVzIGJlY2F1c2UKKyMgJXRyYW5zZm9ybWVkX2ZpbGVzIGlzIHJlc2V0IGZvciBlYWNoIGZpbGUgd2hpbGUgJWFtX2ZpbGVfY2FjaGUKKyMgaXQgZ2xvYmFsIHRvIHRoZSBydW4uKQorbXkgJWFtX2ZpbGVfY2FjaGU7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyB2YXJfU1VGRklYRVNfdHJpZ2dlciAoJFRZUEUsICRWQUxVRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgaXMgY2FsbGVkIGJ5IEF1dG9tYWtlOjpWYXJpYWJsZTo6ZGVmaW5lKCkgd2hlbiBTVUZGSVhFUworIyBpcyBkZWZpbmVkICgkVFlQRSBlcSAnJykgb3IgYXBwZW5kZWQgKCRUWVBFIGVxICcrJykuCisjIFRoZSB3b3JrIGhlcmUgbmVlZHMgdG8gYmUgcGVyZm9ybWVkIGFzIGEgc2lkZS1lZmZlY3Qgb2YgdGhlCisjIG1hY3JvX2RlZmluZSgpIGNhbGwgYmVjYXVzZSBTVUZGSVhFUyBkZWZpbml0aW9ucyBpbXBhY3QKKyMgb24gJEtOT1dOX0VYVEVOU0lPTlNfUEFUVEVSTiB3aGljaCBpcyB1c2VkIHVzZWQgd2hlbiBwYXJzaW5nCisjIHRoZSBpbnB1dCBhbSBmaWxlLgorc3ViIHZhcl9TVUZGSVhFU190cmlnZ2VyICgkJCkKK3sKKyAgICBteSAoJHR5cGUsICR2YWx1ZSkgPSBAXzsKKyAgICBhY2NlcHRfZXh0ZW5zaW9ucyAoc3BsaXQgKCcgJywgJHZhbHVlKSk7Cit9CitBdXRvbWFrZTo6VmFyaWFibGU6Omhvb2sgKCdTVUZGSVhFUycsIFwmdmFyX1NVRkZJWEVTX3RyaWdnZXIpOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRm9yd2FyZCBzdWJyb3V0aW5lIGRlY2xhcmF0aW9ucy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK3N1YiByZWdpc3Rlcl9sYW5ndWFnZSAoJSk7CitzdWIgZmlsZV9jb250ZW50c19pbnRlcm5hbCAoJCQkJSk7CitzdWIgZGVmaW5lX2ZpbGVzX3ZhcmlhYmxlICgkXEAkJCk7CisKKworIyAmaW5pdGlhbGl6ZV9wZXJfaW5wdXQgKCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIChSZSktSW5pdGlhbGl6ZSBwZXItTWFrZWZpbGUuYW0gdmFyaWFibGVzLgorc3ViIGluaXRpYWxpemVfcGVyX2lucHV0ICgpCit7CisgICAgcmVzZXRfbG9jYWxfZHVwbGljYXRlcyAoKTsKKworICAgICRhbV9maWxlX25hbWUgPSB1bmRlZjsKKyAgICAkYW1fcmVsYXRpdmVfZGlyID0gdW5kZWY7CisKKyAgICAkaW5fZmlsZV9uYW1lID0gdW5kZWY7CisgICAgJHJlbGF0aXZlX2RpciA9IHVuZGVmOworICAgICR0b3BzcmNkaXIgPSB1bmRlZjsKKworICAgICRvdXRwdXRfZGVwc19ncmVhdGVzdF90aW1lc3RhbXAgPSAwOworCisgICAgJG91dHB1dF92YXJzID0gJyc7CisgICAgJG91dHB1dF9hbGwgPSAnJzsKKyAgICAkb3V0cHV0X2hlYWRlciA9ICcnOworICAgICRvdXRwdXRfcnVsZXMgPSAnJzsKKyAgICAkb3V0cHV0X3RyYWlsZXIgPSAnJzsKKworICAgIEF1dG9tYWtlOjpPcHRpb25zOjpyZXNldDsKKyAgICBBdXRvbWFrZTo6VmFyaWFibGU6OnJlc2V0OworICAgIEF1dG9tYWtlOjpSdWxlOjpyZXNldDsKKworICAgIEBjb25kX3N0YWNrID0gKCk7CisKKyAgICBAaW5jbHVkZV9zdGFjayA9ICgpOworCisgICAgQGFsbCA9ICgpOworICAgIEBjaGVjayA9ICgpOworICAgIEBjaGVja190ZXN0cyA9ICgpOworCisgICAgJWNsZWFuX2ZpbGVzID0gKCk7CisgICAgJWNvbXBpbGVfY2xlYW5fZmlsZXMgPSAoKTsKKworICAgICMgV2UgYWx3YXlzIGluY2x1ZGUgYC4nLiAgVGhpcyBpc24ndCBzdHJpY3RseSBjb3JyZWN0LgorICAgICVsaWJ0b29sX2NsZWFuX2RpcmVjdG9yaWVzID0gKCcuJyA9PiAxKTsKKworICAgIEBzb3VyY2VzID0gKCk7CisgICAgQGRpc3Rfc291cmNlcyA9ICgpOworCisgICAgJW9iamVjdF9tYXAgPSAoKTsKKyAgICAlb2JqZWN0X2NvbXBpbGF0aW9uX21hcCA9ICgpOworCisgICAgJWRpcmVjdG9yeV9tYXAgPSAoKTsKKworICAgICVkZXBfZmlsZXMgPSAoKTsKKworICAgIEBkaXN0X3RhcmdldHMgPSAoKTsKKworICAgICVrbm93bl9wcm9ncmFtcyA9ICgpOworICAgICVrbm93bl9saWJyYXJpZXM9ICgpOworCisgICAgJWRlX2Fuc2lfZmlsZXMgPSAoKTsKKworICAgICVleHRlbnNpb25fc2VlbiA9ICgpOworCisgICAgJWxhbmd1YWdlX3NjcmF0Y2ggPSAoKTsKKworICAgICVsYW5nX3NwZWNpZmljX2ZpbGVzID0gKCk7CisKKyAgICAkaGFuZGxlX2Rpc3RfcnVuID0gMDsKKworICAgICRuZWVkX2xpbmsgPSAwOworCisgICAgJGdldF9vYmplY3RfZXh0ZW5zaW9uX3dhc19ydW4gPSAwOworCisgICAgJXRyYW5zZm9ybWVkX2ZpbGVzID0gKCk7Cit9CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEluaXRpYWxpemUgb3VyIGxpc3Qgb2YgbGFuZ3VhZ2VzIHRoYXQgYXJlIGludGVybmFsbHkgc3VwcG9ydGVkLgorCisjIEMuCityZWdpc3Rlcl9sYW5ndWFnZSAoJ25hbWUnID0+ICdjJywKKwkJICAgJ05hbWUnID0+ICdDJywKKwkJICAgJ2NvbmZpZ192YXJzJyA9PiBbJ0NDJ10sCisJCSAgICdhbnNpJyA9PiAxLAorCQkgICAnYXV0b2RlcCcgPT4gJycsCisJCSAgICdmbGFncycgPT4gWydDRkxBR1MnLCAnQ1BQRkxBR1MnXSwKKwkJICAgJ2NjZXInID0+ICdDQycsCisJCSAgICdjb21waWxlcicgPT4gJ0NPTVBJTEUnLAorCQkgICAnY29tcGlsZScgPT4gJyQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpJywKKwkJICAgJ2xkZXInID0+ICdDQ0xEJywKKwkJICAgJ2xkJyA9PiAnJChDQyknLAorCQkgICAnbGlua2VyJyA9PiAnTElOSycsCisJCSAgICdsaW5rJyA9PiAnJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQCcsCisJCSAgICdjb21waWxlX2ZsYWcnID0+ICctYycsCisJCSAgICdsaWJ0b29sX3RhZycgPT4gJ0NDJywKKwkJICAgJ2V4dGVuc2lvbnMnID0+IFsnLmMnXSwKKwkJICAgJ19maW5pc2gnID0+IFwmbGFuZ19jX2ZpbmlzaCk7CisKKyMgQysrLgorcmVnaXN0ZXJfbGFuZ3VhZ2UgKCduYW1lJyA9PiAnY3h4JywKKwkJICAgJ05hbWUnID0+ICdDKysnLAorCQkgICAnY29uZmlnX3ZhcnMnID0+IFsnQ1hYJ10sCisJCSAgICdsaW5rZXInID0+ICdDWFhMSU5LJywKKwkJICAgJ2xpbmsnID0+ICckKENYWExEKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAnLAorCQkgICAnYXV0b2RlcCcgPT4gJ0NYWCcsCisJCSAgICdmbGFncycgPT4gWydDWFhGTEFHUycsICdDUFBGTEFHUyddLAorCQkgICAnY29tcGlsZScgPT4gJyQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUyknLAorCQkgICAnY2NlcicgPT4gJ0NYWCcsCisJCSAgICdjb21waWxlcicgPT4gJ0NYWENPTVBJTEUnLAorCQkgICAnY29tcGlsZV9mbGFnJyA9PiAnLWMnLAorCQkgICAnb3V0cHV0X2ZsYWcnID0+ICctbycsCisJCSAgICdsaWJ0b29sX3RhZycgPT4gJ0NYWCcsCisJCSAgICdsZGVyJyA9PiAnQ1hYTEQnLAorCQkgICAnbGQnID0+ICckKENYWCknLAorCQkgICAncHVyZScgPT4gMSwKKwkJICAgJ2V4dGVuc2lvbnMnID0+IFsnLmMrKycsICcuY2MnLCAnLmNwcCcsICcuY3h4JywgJy5DJ10pOworCisjIE9iamVjdGl2ZSBDLgorcmVnaXN0ZXJfbGFuZ3VhZ2UgKCduYW1lJyA9PiAnb2JqYycsCisJCSAgICdOYW1lJyA9PiAnT2JqZWN0aXZlIEMnLAorCQkgICAnY29uZmlnX3ZhcnMnID0+IFsnT0JKQyddLAorCQkgICAnbGlua2VyJyA9PiAnT0JKQ0xJTksnLAorCQkgICAnbGluaycgPT4gJyQoT0JKQ0xEKSAkKEFNX09CSkNGTEFHUykgJChPQkpDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQCcsCisJCSAgICdhdXRvZGVwJyA9PiAnT0JKQycsCisJCSAgICdmbGFncycgPT4gWydPQkpDRkxBR1MnLCAnQ1BQRkxBR1MnXSwKKwkJICAgJ2NvbXBpbGUnID0+ICckKE9CSkMpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX09CSkNGTEFHUykgJChPQkpDRkxBR1MpJywKKwkJICAgJ2NjZXInID0+ICdPQkpDJywKKwkJICAgJ2NvbXBpbGVyJyA9PiAnT0JKQ0NPTVBJTEUnLAorCQkgICAnY29tcGlsZV9mbGFnJyA9PiAnLWMnLAorCQkgICAnb3V0cHV0X2ZsYWcnID0+ICctbycsCisJCSAgICdsZGVyJyA9PiAnT0JKQ0xEJywKKwkJICAgJ2xkJyA9PiAnJChPQkpDKScsCisJCSAgICdwdXJlJyA9PiAxLAorCQkgICAnZXh0ZW5zaW9ucycgPT4gWycubSddKTsKKworIyBVbmlmaWVkIFBhcmFsbGVsIEMuCityZWdpc3Rlcl9sYW5ndWFnZSAoJ25hbWUnID0+ICd1cGMnLAorCQkgICAnTmFtZScgPT4gJ1VuaWZpZWQgUGFyYWxsZWwgQycsCisJCSAgICdjb25maWdfdmFycycgPT4gWydVUEMnXSwKKwkJICAgJ2xpbmtlcicgPT4gJ1VQQ0xJTksnLAorCQkgICAnbGluaycgPT4gJyQoVVBDTEQpICQoQU1fVVBDRkxBR1MpICQoVVBDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQCcsCisJCSAgICdhdXRvZGVwJyA9PiAnVVBDJywKKwkJICAgJ2ZsYWdzJyA9PiBbJ1VQQ0ZMQUdTJywgJ0NQUEZMQUdTJ10sCisJCSAgICdjb21waWxlJyA9PiAnJChVUEMpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX1VQQ0ZMQUdTKSAkKFVQQ0ZMQUdTKScsCisJCSAgICdjY2VyJyA9PiAnVVBDJywKKwkJICAgJ2NvbXBpbGVyJyA9PiAnVVBDQ09NUElMRScsCisJCSAgICdjb21waWxlX2ZsYWcnID0+ICctYycsCisJCSAgICdvdXRwdXRfZmxhZycgPT4gJy1vJywKKwkJICAgJ2xkZXInID0+ICdVUENMRCcsCisJCSAgICdsZCcgPT4gJyQoVVBDKScsCisJCSAgICdwdXJlJyA9PiAxLAorCQkgICAnZXh0ZW5zaW9ucycgPT4gWycudXBjJ10pOworCisjIEhlYWRlcnMuCityZWdpc3Rlcl9sYW5ndWFnZSAoJ25hbWUnID0+ICdoZWFkZXInLAorCQkgICAnTmFtZScgPT4gJ0hlYWRlcicsCisJCSAgICdleHRlbnNpb25zJyA9PiBbJy5oJywgJy5IJywgJy5oeHgnLCAnLmgrKycsICcuaGgnLAorCQkJCSAgICAnLmhwcCcsICcuaW5jJ10sCisJCSAgICMgTm8gb3V0cHV0LgorCQkgICAnb3V0cHV0X2V4dGVuc2lvbnMnID0+IHN1YiB7IHJldHVybiAoKSB9LAorCQkgICAjIE5vdGhpbmcgdG8gZG8uCisJCSAgICdfZmluaXNoJyA9PiBzdWIgeyB9KTsKKworIyBWYWxhCityZWdpc3Rlcl9sYW5ndWFnZSAoJ25hbWUnID0+ICd2YWxhJywKKwkJICAgJ05hbWUnID0+ICdWYWxhJywKKwkJICAgJ2NvbmZpZ192YXJzJyA9PiBbJ1ZBTEFDJ10sCisJCSAgICdmbGFncycgPT4gW10sCisJCSAgICdjb21waWxlJyA9PiAnJChWQUxBQykgJChBTV9WQUxBRkxBR1MpICQoVkFMQUZMQUdTKScsCisJCSAgICdjY2VyJyA9PiAnVkFMQUMnLAorCQkgICAnY29tcGlsZXInID0+ICdWQUxBQ09NUElMRScsCisJCSAgICdleHRlbnNpb25zJyA9PiBbJy52YWxhJ10sCisJCSAgICdvdXRwdXRfZXh0ZW5zaW9ucycgPT4gc3ViIHsgKG15ICRleHQgPSAkX1swXSkgPX4gcy92YWxhJC9jLzsKKwkJCQkJCXJldHVybiAoJGV4dCwpIH0sCisJCSAgICdydWxlX2ZpbGUnID0+ICd2YWxhJywKKwkJICAgJ19maW5pc2gnID0+IFwmbGFuZ192YWxhX2ZpbmlzaCwKKwkJICAgJ190YXJnZXRfaG9vaycgPT4gXCZsYW5nX3ZhbGFfdGFyZ2V0X2hvb2ssCisJCSAgICdub2Rpc3Rfc3BlY2lmaWMnID0+IDEpOworCisjIFlhY2MgKEMgJiBDKyspLgorcmVnaXN0ZXJfbGFuZ3VhZ2UgKCduYW1lJyA9PiAneWFjYycsCisJCSAgICdOYW1lJyA9PiAnWWFjYycsCisJCSAgICdjb25maWdfdmFycycgPT4gWydZQUNDJ10sCisJCSAgICdmbGFncycgPT4gWydZRkxBR1MnXSwKKwkJICAgJ2NvbXBpbGUnID0+ICckKFlBQ0MpICQoWUZMQUdTKSAkKEFNX1lGTEFHUyknLAorCQkgICAnY2NlcicgPT4gJ1lBQ0MnLAorCQkgICAnY29tcGlsZXInID0+ICdZQUNDQ09NUElMRScsCisJCSAgICdleHRlbnNpb25zJyA9PiBbJy55J10sCisJCSAgICdvdXRwdXRfZXh0ZW5zaW9ucycgPT4gc3ViIHsgKG15ICRleHQgPSAkX1swXSkgPX4gdHIveS9jLzsKKwkJCQkJCXJldHVybiAoJGV4dCwpIH0sCisJCSAgICdydWxlX2ZpbGUnID0+ICd5YWNjJywKKwkJICAgJ19maW5pc2gnID0+IFwmbGFuZ195YWNjX2ZpbmlzaCwKKwkJICAgJ190YXJnZXRfaG9vaycgPT4gXCZsYW5nX3lhY2NfdGFyZ2V0X2hvb2ssCisJCSAgICdub2Rpc3Rfc3BlY2lmaWMnID0+IDEpOworcmVnaXN0ZXJfbGFuZ3VhZ2UgKCduYW1lJyA9PiAneWFjY3h4JywKKwkJICAgJ05hbWUnID0+ICdZYWNjIChDKyspJywKKwkJICAgJ2NvbmZpZ192YXJzJyA9PiBbJ1lBQ0MnXSwKKwkJICAgJ3J1bGVfZmlsZScgPT4gJ3lhY2MnLAorCQkgICAnZmxhZ3MnID0+IFsnWUZMQUdTJ10sCisJCSAgICdjY2VyJyA9PiAnWUFDQycsCisJCSAgICdjb21waWxlcicgPT4gJ1lBQ0NDT01QSUxFJywKKwkJICAgJ2NvbXBpbGUnID0+ICckKFlBQ0MpICQoWUZMQUdTKSAkKEFNX1lGTEFHUyknLAorCQkgICAnZXh0ZW5zaW9ucycgPT4gWycueSsrJywgJy55eScsICcueXh4JywgJy55cHAnXSwKKwkJICAgJ291dHB1dF9leHRlbnNpb25zJyA9PiBzdWIgeyAobXkgJGV4dCA9ICRfWzBdKSA9fiB0ci95L2MvOworCQkJCQkJcmV0dXJuICgkZXh0LCkgfSwKKwkJICAgJ19maW5pc2gnID0+IFwmbGFuZ195YWNjX2ZpbmlzaCwKKwkJICAgJ190YXJnZXRfaG9vaycgPT4gXCZsYW5nX3lhY2NfdGFyZ2V0X2hvb2ssCisJCSAgICdub2Rpc3Rfc3BlY2lmaWMnID0+IDEpOworCisjIExleCAoQyAmIEMrKykuCityZWdpc3Rlcl9sYW5ndWFnZSAoJ25hbWUnID0+ICdsZXgnLAorCQkgICAnTmFtZScgPT4gJ0xleCcsCisJCSAgICdjb25maWdfdmFycycgPT4gWydMRVgnXSwKKwkJICAgJ3J1bGVfZmlsZScgPT4gJ2xleCcsCisJCSAgICdmbGFncycgPT4gWydMRkxBR1MnXSwKKwkJICAgJ2NvbXBpbGUnID0+ICckKExFWCkgJChMRkxBR1MpICQoQU1fTEZMQUdTKScsCisJCSAgICdjY2VyJyA9PiAnTEVYJywKKwkJICAgJ2NvbXBpbGVyJyA9PiAnTEVYQ09NUElMRScsCisJCSAgICdleHRlbnNpb25zJyA9PiBbJy5sJ10sCisJCSAgICdvdXRwdXRfZXh0ZW5zaW9ucycgPT4gc3ViIHsgKG15ICRleHQgPSAkX1swXSkgPX4gdHIvbC9jLzsKKwkJCQkJCXJldHVybiAoJGV4dCwpIH0sCisJCSAgICdfZmluaXNoJyA9PiBcJmxhbmdfbGV4X2ZpbmlzaCwKKwkJICAgJ190YXJnZXRfaG9vaycgPT4gXCZsYW5nX2xleF90YXJnZXRfaG9vaywKKwkJICAgJ25vZGlzdF9zcGVjaWZpYycgPT4gMSk7CityZWdpc3Rlcl9sYW5ndWFnZSAoJ25hbWUnID0+ICdsZXh4eCcsCisJCSAgICdOYW1lJyA9PiAnTGV4IChDKyspJywKKwkJICAgJ2NvbmZpZ192YXJzJyA9PiBbJ0xFWCddLAorCQkgICAncnVsZV9maWxlJyA9PiAnbGV4JywKKwkJICAgJ2ZsYWdzJyA9PiBbJ0xGTEFHUyddLAorCQkgICAnY29tcGlsZScgPT4gJyQoTEVYKSAkKExGTEFHUykgJChBTV9MRkxBR1MpJywKKwkJICAgJ2NjZXInID0+ICdMRVgnLAorCQkgICAnY29tcGlsZXInID0+ICdMRVhDT01QSUxFJywKKwkJICAgJ2V4dGVuc2lvbnMnID0+IFsnLmwrKycsICcubGwnLCAnLmx4eCcsICcubHBwJ10sCisJCSAgICdvdXRwdXRfZXh0ZW5zaW9ucycgPT4gc3ViIHsgKG15ICRleHQgPSAkX1swXSkgPX4gdHIvbC9jLzsKKwkJCQkJCXJldHVybiAoJGV4dCwpIH0sCisJCSAgICdfZmluaXNoJyA9PiBcJmxhbmdfbGV4X2ZpbmlzaCwKKwkJICAgJ190YXJnZXRfaG9vaycgPT4gXCZsYW5nX2xleF90YXJnZXRfaG9vaywKKwkJICAgJ25vZGlzdF9zcGVjaWZpYycgPT4gMSk7CisKKyMgQXNzZW1ibGVyLgorcmVnaXN0ZXJfbGFuZ3VhZ2UgKCduYW1lJyA9PiAnYXNtJywKKwkJICAgJ05hbWUnID0+ICdBc3NlbWJsZXInLAorCQkgICAnY29uZmlnX3ZhcnMnID0+IFsnQ0NBUycsICdDQ0FTRkxBR1MnXSwKKworCQkgICAnZmxhZ3MnID0+IFsnQ0NBU0ZMQUdTJ10sCisJCSAgICMgVXNlcnMgY2FuIHNldCBBTV9DQ0FTRkxBR1MgdG8gaW5jbHVkZSBERUZTLCBJTkNMVURFUywKKwkJICAgIyBvciBhbnl0aGluZyBlbHNlIHJlcXVpcmVkLiAgVGhleSBjYW4gYWxzbyBzZXQgQ0NBUy4KKwkJICAgIyBPciBzaW1wbHkgdXNlIFByZXByb2Nlc3NlZCBBc3NlbWJsZXIuCisJCSAgICdjb21waWxlJyA9PiAnJChDQ0FTKSAkKEFNX0NDQVNGTEFHUykgJChDQ0FTRkxBR1MpJywKKwkJICAgJ2NjZXInID0+ICdDQ0FTJywKKwkJICAgJ2NvbXBpbGVyJyA9PiAnQ0NBU0NPTVBJTEUnLAorCQkgICAnY29tcGlsZV9mbGFnJyA9PiAnLWMnLAorCQkgICAnb3V0cHV0X2ZsYWcnID0+ICctbycsCisJCSAgICdleHRlbnNpb25zJyA9PiBbJy5zJ10sCisKKwkJICAgIyBXaXRoIGFzc2VtYmx5IHdlIHN0aWxsIHVzZSB0aGUgQyBsaW5rZXIuCisJCSAgICdfZmluaXNoJyA9PiBcJmxhbmdfY19maW5pc2gpOworCisjIFByZXByb2Nlc3NlZCBBc3NlbWJsZXIuCityZWdpc3Rlcl9sYW5ndWFnZSAoJ25hbWUnID0+ICdjcHBhc20nLAorCQkgICAnTmFtZScgPT4gJ1ByZXByb2Nlc3NlZCBBc3NlbWJsZXInLAorCQkgICAnY29uZmlnX3ZhcnMnID0+IFsnQ0NBUycsICdDQ0FTRkxBR1MnXSwKKworCQkgICAnYXV0b2RlcCcgPT4gJ0NDQVMnLAorCQkgICAnZmxhZ3MnID0+IFsnQ0NBU0ZMQUdTJywgJ0NQUEZMQUdTJ10sCisJCSAgICdjb21waWxlJyA9PiAnJChDQ0FTKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DQ0FTRkxBR1MpICQoQ0NBU0ZMQUdTKScsCisJCSAgICdjY2VyJyA9PiAnQ1BQQVMnLAorCQkgICAnY29tcGlsZXInID0+ICdDUFBBU0NPTVBJTEUnLAorCQkgICAnY29tcGlsZV9mbGFnJyA9PiAnLWMnLAorCQkgICAnb3V0cHV0X2ZsYWcnID0+ICctbycsCisJCSAgICdleHRlbnNpb25zJyA9PiBbJy5TJywgJy5zeCddLAorCisJCSAgICMgV2l0aCBhc3NlbWJseSB3ZSBzdGlsbCB1c2UgdGhlIEMgbGlua2VyLgorCQkgICAnX2ZpbmlzaCcgPT4gXCZsYW5nX2NfZmluaXNoKTsKKworIyBGb3J0cmFuIDc3CityZWdpc3Rlcl9sYW5ndWFnZSAoJ25hbWUnID0+ICdmNzcnLAorCQkgICAnTmFtZScgPT4gJ0ZvcnRyYW4gNzcnLAorCQkgICAnY29uZmlnX3ZhcnMnID0+IFsnRjc3J10sCisJCSAgICdsaW5rZXInID0+ICdGNzdMSU5LJywKKwkJICAgJ2xpbmsnID0+ICckKEY3N0xEKSAkKEFNX0ZGTEFHUykgJChGRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQCcsCisJCSAgICdmbGFncycgPT4gWydGRkxBR1MnXSwKKwkJICAgJ2NvbXBpbGUnID0+ICckKEY3NykgJChBTV9GRkxBR1MpICQoRkZMQUdTKScsCisJCSAgICdjY2VyJyA9PiAnRjc3JywKKwkJICAgJ2NvbXBpbGVyJyA9PiAnRjc3Q09NUElMRScsCisJCSAgICdjb21waWxlX2ZsYWcnID0+ICctYycsCisJCSAgICdvdXRwdXRfZmxhZycgPT4gJy1vJywKKwkJICAgJ2xpYnRvb2xfdGFnJyA9PiAnRjc3JywKKwkJICAgJ2xkZXInID0+ICdGNzdMRCcsCisJCSAgICdsZCcgPT4gJyQoRjc3KScsCisJCSAgICdwdXJlJyA9PiAxLAorCQkgICAnZXh0ZW5zaW9ucycgPT4gWycuZicsICcuZm9yJ10pOworCisjIEZvcnRyYW4KK3JlZ2lzdGVyX2xhbmd1YWdlICgnbmFtZScgPT4gJ2ZjJywKKwkJICAgJ05hbWUnID0+ICdGb3J0cmFuJywKKwkJICAgJ2NvbmZpZ192YXJzJyA9PiBbJ0ZDJ10sCisJCSAgICdsaW5rZXInID0+ICdGQ0xJTksnLAorCQkgICAnbGluaycgPT4gJyQoRkNMRCkgJChBTV9GQ0ZMQUdTKSAkKEZDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQCcsCisJCSAgICdmbGFncycgPT4gWydGQ0ZMQUdTJ10sCisJCSAgICdjb21waWxlJyA9PiAnJChGQykgJChBTV9GQ0ZMQUdTKSAkKEZDRkxBR1MpJywKKwkJICAgJ2NjZXInID0+ICdGQycsCisJCSAgICdjb21waWxlcicgPT4gJ0ZDQ09NUElMRScsCisJCSAgICdjb21waWxlX2ZsYWcnID0+ICctYycsCisJCSAgICdvdXRwdXRfZmxhZycgPT4gJy1vJywKKwkJICAgJ2xpYnRvb2xfdGFnJyA9PiAnRkMnLAorCQkgICAnbGRlcicgPT4gJ0ZDTEQnLAorCQkgICAnbGQnID0+ICckKEZDKScsCisJCSAgICdwdXJlJyA9PiAxLAorCQkgICAnZXh0ZW5zaW9ucycgPT4gWycuZjkwJywgJy5mOTUnLCAnLmYwMycsICcuZjA4J10pOworCisjIFByZXByb2Nlc3NlZCBGb3J0cmFuCityZWdpc3Rlcl9sYW5ndWFnZSAoJ25hbWUnID0+ICdwcGZjJywKKwkJICAgJ05hbWUnID0+ICdQcmVwcm9jZXNzZWQgRm9ydHJhbicsCisJCSAgICdjb25maWdfdmFycycgPT4gWydGQyddLAorCQkgICAnbGlua2VyJyA9PiAnRkNMSU5LJywKKwkJICAgJ2xpbmsnID0+ICckKEZDTEQpICQoQU1fRkNGTEFHUykgJChGQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAnLAorCQkgICAnbGRlcicgPT4gJ0ZDTEQnLAorCQkgICAnbGQnID0+ICckKEZDKScsCisJCSAgICdmbGFncycgPT4gWydGQ0ZMQUdTJywgJ0NQUEZMQUdTJ10sCisJCSAgICdjY2VyJyA9PiAnUFBGQycsCisJCSAgICdjb21waWxlcicgPT4gJ1BQRkNDT01QSUxFJywKKwkJICAgJ2NvbXBpbGUnID0+ICckKEZDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9GQ0ZMQUdTKSAkKEZDRkxBR1MpJywKKwkJICAgJ2NvbXBpbGVfZmxhZycgPT4gJy1jJywKKwkJICAgJ291dHB1dF9mbGFnJyA9PiAnLW8nLAorCQkgICAnbGlidG9vbF90YWcnID0+ICdGQycsCisJCSAgICdwdXJlJyA9PiAxLAorCQkgICAnZXh0ZW5zaW9ucycgPT4gWycuRjkwJywnLkY5NScsICcuRjAzJywgJy5GMDgnXSk7CisKKyMgUHJlcHJvY2Vzc2VkIEZvcnRyYW4gNzcKKyMKKyMgVGhlIGN1cnJlbnQgc3VwcG9ydCBmb3IgcHJlcHJvY2Vzc2luZyBGb3J0cmFuIDc3IGp1c3QgaW52b2x2ZXMKKyMgcGFzc2luZyBgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpCisjICQoQ1BQRkxBR1MpJyBhcyBhZGRpdGlvbmFsIGZsYWdzIHRvIHRoZSBGb3J0cmFuIDc3IGNvbXBpbGVyLCBzaW5jZQorIyB0aGlzIGlzIGhvdyBHTlUgTWFrZSBkb2VzIGl0OyBzZWUgdGhlIGBHTlUgTWFrZSBNYW51YWwsIEVkaXRpb24gMC41MQorIyBmb3IgYG1ha2UnIFZlcnNpb24gMy43NiBCZXRhJyAoc3BlY2lmaWNhbGx5LCBmcm9tIGluZm8gZmlsZQorIyBgKG1ha2UpQ2F0YWxvZ3VlIG9mIFJ1bGVzJykuCisjCisjIEEgYmV0dGVyIGFwcHJvYWNoIHdvdWxkIGJlIHRvIHdyaXRlIGFuIEF1dG9jb25mIHRlc3QKKyMgKGkuZS4gQUNfUFJPR19GUFApIGZvciBhIEZvcnRyYW4gNzcgcHJlcHJvY2Vzc29yLCBiZWNhdXNlIG5vdCBhbGwKKyMgRm9ydHJhbiA3NyBjb21waWxlcnMga25vdyBob3cgdG8gZG8gcHJlcHJvY2Vzc2luZy4gIFRoZSBBdXRvY29uZgorIyBtYWNybyBBQ19QUk9HX0ZQUCBzaG91bGQgdGVzdCB0aGUgRm9ydHJhbiA3NyBjb21waWxlciBmaXJzdCBmb3IKKyMgcHJlcHJvY2Vzc2luZyBjYXBhYmlsaXRpZXMsIGFuZCB0aGVuIGZhbGwgYmFjayBvbiBjcHAgKGlmIGNwcCB3ZXJlCisjIGF2YWlsYWJsZSkuCityZWdpc3Rlcl9sYW5ndWFnZSAoJ25hbWUnID0+ICdwcGY3NycsCisJCSAgICdOYW1lJyA9PiAnUHJlcHJvY2Vzc2VkIEZvcnRyYW4gNzcnLAorCQkgICAnY29uZmlnX3ZhcnMnID0+IFsnRjc3J10sCisJCSAgICdsaW5rZXInID0+ICdGNzdMSU5LJywKKwkJICAgJ2xpbmsnID0+ICckKEY3N0xEKSAkKEFNX0ZGTEFHUykgJChGRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQCcsCisJCSAgICdsZGVyJyA9PiAnRjc3TEQnLAorCQkgICAnbGQnID0+ICckKEY3NyknLAorCQkgICAnZmxhZ3MnID0+IFsnRkZMQUdTJywgJ0NQUEZMQUdTJ10sCisJCSAgICdjY2VyJyA9PiAnUFBGNzcnLAorCQkgICAnY29tcGlsZXInID0+ICdQUEY3N0NPTVBJTEUnLAorCQkgICAnY29tcGlsZScgPT4gJyQoRjc3KSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9GRkxBR1MpICQoRkZMQUdTKScsCisJCSAgICdjb21waWxlX2ZsYWcnID0+ICctYycsCisJCSAgICdvdXRwdXRfZmxhZycgPT4gJy1vJywKKwkJICAgJ2xpYnRvb2xfdGFnJyA9PiAnRjc3JywKKwkJICAgJ3B1cmUnID0+IDEsCisJCSAgICdleHRlbnNpb25zJyA9PiBbJy5GJ10pOworCisjIFJhdGZvci4KK3JlZ2lzdGVyX2xhbmd1YWdlICgnbmFtZScgPT4gJ3JhdGZvcicsCisJCSAgICdOYW1lJyA9PiAnUmF0Zm9yJywKKwkJICAgJ2NvbmZpZ192YXJzJyA9PiBbJ0Y3NyddLAorCQkgICAnbGlua2VyJyA9PiAnRjc3TElOSycsCisJCSAgICdsaW5rJyA9PiAnJChGNzdMRCkgJChBTV9GRkxBR1MpICQoRkZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAnLAorCQkgICAnbGRlcicgPT4gJ0Y3N0xEJywKKwkJICAgJ2xkJyA9PiAnJChGNzcpJywKKwkJICAgJ2ZsYWdzJyA9PiBbJ1JGTEFHUycsICdGRkxBR1MnXSwKKwkJICAgIyBGSVhNRSBhbHNvIEZGTEFHUy4KKwkJICAgJ2NvbXBpbGUnID0+ICckKEY3NykgJChBTV9GRkxBR1MpICQoRkZMQUdTKSAkKEFNX1JGTEFHUykgJChSRkxBR1MpJywKKwkJICAgJ2NjZXInID0+ICdGNzcnLAorCQkgICAnY29tcGlsZXInID0+ICdSQ09NUElMRScsCisJCSAgICdjb21waWxlX2ZsYWcnID0+ICctYycsCisJCSAgICdvdXRwdXRfZmxhZycgPT4gJy1vJywKKwkJICAgJ2xpYnRvb2xfdGFnJyA9PiAnRjc3JywKKwkJICAgJ3B1cmUnID0+IDEsCisJCSAgICdleHRlbnNpb25zJyA9PiBbJy5yJ10pOworCisjIEphdmEgdmlhIGdjai4KK3JlZ2lzdGVyX2xhbmd1YWdlICgnbmFtZScgPT4gJ2phdmEnLAorCQkgICAnTmFtZScgPT4gJ0phdmEnLAorCQkgICAnY29uZmlnX3ZhcnMnID0+IFsnR0NKJ10sCisJCSAgICdsaW5rZXInID0+ICdHQ0pMSU5LJywKKwkJICAgJ2xpbmsnID0+ICckKEdDSkxEKSAkKEFNX0dDSkZMQUdTKSAkKEdDSkZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAnLAorCQkgICAnYXV0b2RlcCcgPT4gJ0dDSicsCisJCSAgICdmbGFncycgPT4gWydHQ0pGTEFHUyddLAorCQkgICAnY29tcGlsZScgPT4gJyQoR0NKKSAkKEFNX0dDSkZMQUdTKSAkKEdDSkZMQUdTKScsCisJCSAgICdjY2VyJyA9PiAnR0NKJywKKwkJICAgJ2NvbXBpbGVyJyA9PiAnR0NKQ09NUElMRScsCisJCSAgICdjb21waWxlX2ZsYWcnID0+ICctYycsCisJCSAgICdvdXRwdXRfZmxhZycgPT4gJy1vJywKKwkJICAgJ2xpYnRvb2xfdGFnJyA9PiAnR0NKJywKKwkJICAgJ2xkZXInID0+ICdHQ0pMRCcsCisJCSAgICdsZCcgPT4gJyQoR0NKKScsCisJCSAgICdwdXJlJyA9PiAxLAorCQkgICAnZXh0ZW5zaW9ucycgPT4gWycuamF2YScsICcuY2xhc3MnLCAnLnppcCcsICcuamFyJ10pOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgRXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9ucy4KKworIyBlcnJfYW0gKCRNRVNTQUdFLCBbJU9QVElPTlNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBVbmNhdGVnb3JpemVkIGVycm9ycyBhYm91dCB0aGUgY3VycmVudCBNYWtlZmlsZS5hbS4KK3N1YiBlcnJfYW0gKCQ7JSkKK3sKKyAgbXNnX2FtICgnZXJyb3InLCBAXyk7Cit9CisKKyMgZXJyX2FjICgkTUVTU0FHRSwgWyVPUFRJT05TXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVW5jYXRlZ29yaXplZCBlcnJvcnMgYWJvdXQgY29uZmlndXJlLmFjLgorc3ViIGVycl9hYyAoJDslKQoreworICBtc2dfYWMgKCdlcnJvcicsIEBfKTsKK30KKworIyBtc2dfYW0gKCRDSEFOTkVMLCAkTUVTU0FHRSwgWyVPUFRJT05TXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1lc3NhZ2VzIGFib3V0IGFib3V0IHRoZSBjdXJyZW50IE1ha2VmaWxlLmFtLgorc3ViIG1zZ19hbSAoJCQ7JSkKK3sKKyAgbXkgKCRjaGFubmVsLCAkbXNnLCAlb3B0cykgPSBAXzsKKyAgbXNnICRjaGFubmVsLCAiJHthbV9maWxlfS5hbSIsICRtc2csICVvcHRzOworfQorCisjIG1zZ19hYyAoJENIQU5ORUwsICRNRVNTQUdFLCBbJU9QVElPTlNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTWVzc2FnZXMgYWJvdXQgYWJvdXQgY29uZmlndXJlLmFjLgorc3ViIG1zZ19hYyAoJCQ7JSkKK3sKKyAgbXkgKCRjaGFubmVsLCAkbXNnLCAlb3B0cykgPSBAXzsKKyAgbXNnICRjaGFubmVsLCAkY29uZmlndXJlX2FjLCAkbXNnLCAlb3B0czsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIHN1YnN0ICgkVEVYVCkKKyMgLS0tLS0tLS0tLS0tLQorIyBSZXR1cm4gYSBjb25maWd1cmUtc3R5bGUgc3Vic3RpdHV0aW9uIHVzaW5nIHRoZSBpbmRpY2F0ZWQgdGV4dC4KKyMgV2UgZG8gdGhpcyB0byBhdm9pZCBoYXZpbmcgdGhlIHN1YnN0aXR1dGlvbnMgZGlyZWN0bHkgaW4gYXV0b21ha2UuaW47CisjIHdoZW4gd2UgZG8gdGhhdCB0aGV5IGFyZSBzb21ldGltZXMgcmVtb3ZlZCBhbmQgdGhpcyBjYXVzZXMgY29uZnVzaW9uCisjIGFuZCBidWdzLgorc3ViIHN1YnN0ICgkKQoreworICAgIG15ICgkdGV4dCkgPSBAXzsKKyAgICByZXR1cm4gJ0AnIC4gJHRleHQgLiAnQCc7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCisjICRCQUNLUEFUSAorIyAmYmFja25hbWUgKCRSRUwtRElSKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZiBJIGBjZCAkUkVMLURJUicsIHRoZW4gdG8gY29tZSBiYWNrLCBJIHNob3VsZCBgY2QgJEJBQ0tQQVRIJy4KKyMgRm9yIGluc3RhbmNlIGBzcmMvZm9vJyA9PiBgLi4vLi4nLgorIyBXb3JrcyB3aXRoIG5vbiBzdHJpY3RseSBpbmNyZWFzaW5nIHBhdGhzLCBpLmUuLCBgc3JjLy4uL2xpYicgPT4gYC4uJy4KK3N1YiBiYWNrbmFtZSAoJCkKK3sKKyAgICBteSAoJGZpbGUpID0gQF87CisgICAgbXkgQHJlczsKKyAgICBmb3JlYWNoIChzcGxpdCAoL1wvLywgJGZpbGUpKQorICAgIHsKKwluZXh0IGlmICRfIGVxICcuJyB8fCAkXyBlcSAnJzsKKwlpZiAoJF8gZXEgJy4uJykKKwl7CisJICAgIHBvcCBAcmVzCisJICAgICAgb3IgcHJvZ19lcnJvciAoInRyeWluZyB0byByZXZlcnNlIHBhdGggYCRmaWxlJyBwb2ludGluZyBvdXRzaWRlIHRyZWUiKTsKKwl9CisJZWxzZQorCXsKKwkgICAgcHVzaCAoQHJlcywgJy4uJyk7CisJfQorICAgIH0KKyAgICByZXR1cm4gam9pbiAoJy8nLCBAcmVzKSB8fCAnLic7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBgc2lsZW50LXJ1bGVzJyBtb2RlIGhhbmRsaW5nIGZ1bmN0aW9ucy4KKworIyB2ZXJib3NlX3ZhciAoTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoZSBwdWJsaWMgdmFyaWFibGUgc3RlbSB1c2VkIHRvIGltcGxlbWVudCBgc2lsZW50LXJ1bGVzJy4KK3N1YiB2ZXJib3NlX3ZhciAoJCkKK3sKKyAgICBteSAoJG5hbWUpID0gQF87CisgICAgcmV0dXJuICdBTV9WXycgLiAkbmFtZTsKK30KKworIyB2ZXJib3NlX3ByaXZhdGVfdmFyIChOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGUgbmFtaW5nIHBvbGljeSBmb3IgdGhlIHByaXZhdGUgdmFyaWFibGVzIGZvciBgc2lsZW50LXJ1bGVzJy4KK3N1YiB2ZXJib3NlX3ByaXZhdGVfdmFyICgkKQoreworICAgIG15ICgkbmFtZSkgPSBAXzsKKyAgICByZXR1cm4gJ2FtX192XycgLiAkbmFtZTsKK30KKworIyBkZWZpbmVfdmVyYm9zZV92YXIgKE5BTUUsIFZBTCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZvciBgc2lsZW50LXJ1bGVzJyBtb2RlLCBzZXR1cCBWQVIgYW5kIGRpc3BhdGNoZXIsIHRvIGV4cGFuZCB0byBWQUwgaWYgc2lsZW50Lgorc3ViIGRlZmluZV92ZXJib3NlX3ZhciAoJCQpCit7CisgICAgbXkgKCRuYW1lLCAkdmFsKSA9IEBfOworICAgIG15ICR2YXIgPSB2ZXJib3NlX3ZhciAoJG5hbWUpOworICAgIG15ICRwdmFyID0gdmVyYm9zZV9wcml2YXRlX3ZhciAoJG5hbWUpOworICAgIG15ICRzaWxlbnRfdmFyID0gJHB2YXIgLiAnXzAnOworICAgIGlmIChvcHRpb24gJ3NpbGVudC1ydWxlcycpCisgICAgICB7CisJIyBVc2luZyBgJFYnIGluc3RlYWQgb2YgYCQoViknIGJyZWFrcyBJUklYIG1ha2UuCisJZGVmaW5lX3ZhcmlhYmxlICgkdmFyLCAnJCgnIC4gJHB2YXIgLiAnXyQoVikpJywgSU5URVJOQUwpOworCWRlZmluZV92YXJpYWJsZSAoJHB2YXIgLiAnXycsICckKCcgLiAkcHZhciAuICdfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpJywgSU5URVJOQUwpOworCUF1dG9tYWtlOjpWYXJpYWJsZTo6ZGVmaW5lICgkc2lsZW50X3ZhciwgVkFSX0FVVE9NQUtFLCAnJywgVFJVRSwgJHZhbCwKKwkJCQkgICAgJycsIElOVEVSTkFMLCBWQVJfQVNJUykKKwkgIGlmICghIHZhcmRlZiAoJHNpbGVudF92YXIsIFRSVUUpKTsKKyAgICAgIH0KK30KKworIyBBYm92ZSBzaG91bGQgbm90IGJlIG5lZWRlZCBpbiB0aGUgZ2VuZXJhbCBhdXRvbWFrZSBjb2RlLgorCisjIHZlcmJvc2VfZmxhZyAoTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb250ZW50cyBvZiAlVkVSQk9TRSU6IHZhcmlhYmxlIHRvIGV4cGFuZCBiZWZvcmUgcnVsZSBjb21tYW5kLgorc3ViIHZlcmJvc2VfZmxhZyAoJCkKK3sKKyAgICBteSAoJG5hbWUpID0gQF87CisgICAgcmV0dXJuICckKCcgLiB2ZXJib3NlX3ZhciAoJG5hbWUpIC4gJyknCisgICAgICBpZiAob3B0aW9uICdzaWxlbnQtcnVsZXMnKTsKKyAgICByZXR1cm4gJyc7Cit9CisKKyMgc2lsZW50X2ZsYWcKKyMgLS0tLS0tLS0tLS0KKyMgQ29udGVudHMgb2YgJVNJTEVOVCU6IHZhcmlhYmxlIHRvIGV4cGFuZCB0byBgQCcgd2hlbiBzaWxlbnQuCitzdWIgc2lsZW50X2ZsYWcgKCkKK3sKKyAgICByZXR1cm4gdmVyYm9zZV9mbGFnICgnYXQnKTsKK30KKworIyBkZWZpbmVfdmVyYm9zZV90YWd2YXIgKE5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5nYWdlIHRoZSBuZWVkZWQgYHNpbGVudC1ydWxlcycgbWFjaGluZXJ5IGZvciB0YWcgTkFNRS4KK3N1YiBkZWZpbmVfdmVyYm9zZV90YWd2YXIgKCQpCit7CisgICAgbXkgKCRuYW1lKSA9IEBfOworICAgIGlmIChvcHRpb24gJ3NpbGVudC1ydWxlcycpCisgICAgICB7CisJZGVmaW5lX3ZlcmJvc2VfdmFyICgkbmFtZSwgJ0BlY2hvICIgICcuICRuYW1lIC4gJyAnIHggKDYgLSBsZW5ndGggKCRuYW1lKSkgLiAnIiAkQDsnKTsKKwlkZWZpbmVfdmVyYm9zZV92YXIgKCdhdCcsICdAJyk7CisgICAgICB9Cit9CisKKyMgZGVmaW5lX3ZlcmJvc2VfbGlidG9vbAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuZ2FnZSB0aGUgbmVlZGVkIGBzaWxlbnQtcnVsZXMnIG1hY2hpbmVyeSBmb3IgYGxpYnRvb2wgLS1zaWxlbnQnLgorc3ViIGRlZmluZV92ZXJib3NlX2xpYnRvb2wgKCkKK3sKKyAgICBkZWZpbmVfdmVyYm9zZV92YXIgKCdsdCcsICctLXNpbGVudCcpOworICAgIHJldHVybiB2ZXJib3NlX2ZsYWcgKCdsdCcpOworfQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCisjIEhhbmRsZSBBVVRPTUFLRV9PUFRJT05TIHZhcmlhYmxlLiAgUmV0dXJuIDEgb24gZXJyb3IsIDAgb3RoZXJ3aXNlLgorc3ViIGhhbmRsZV9vcHRpb25zCit7CisgIG15ICR2YXIgPSB2YXIgKCdBVVRPTUFLRV9PUFRJT05TJyk7CisgIGlmICgkdmFyKQorICAgIHsKKyAgICAgIGlmICgkdmFyLT5oYXNfY29uZGl0aW9uYWxfY29udGVudHMpCisJeworCSAgbXNnX3ZhciAoJ3Vuc3VwcG9ydGVkJywgJHZhciwKKwkJICAgImBBVVRPTUFLRV9PUFRJT05TJyBjYW5ub3QgaGF2ZSBjb25kaXRpb25hbCBjb250ZW50cyIpOworCX0KKyAgICAgIGZvcmVhY2ggbXkgJGxvY3ZhbHMgKCR2YXItPnZhbHVlX2FzX2xpc3RfcmVjdXJzaXZlIChjb25kX2ZpbHRlciA9PiBUUlVFLAorCQkJCQkJCSAgbG9jYXRpb24gPT4gMSkpCisJeworCSAgbXkgKCRsb2MsICR2YWx1ZSkgPSBAJGxvY3ZhbHM7CisJICByZXR1cm4gMSBpZiAocHJvY2Vzc19vcHRpb25fbGlzdCAoJGxvYywgJHZhbHVlKSkKKwl9CisgICAgfQorCisgICMgT3ZlcnJpZGUgcG9ydGFiaWxpdHktcmVjdXJzaXZlIHdhcm5pbmcuCisgIHN3aXRjaF93YXJuaW5nICgnbm8tcG9ydGFiaWxpdHktcmVjdXJzaXZlJykKKyAgICBpZiBvcHRpb24gJ3NpbGVudC1ydWxlcyc7CisKKyAgaWYgKCRzdHJpY3RuZXNzID09IEdOSVRTKQorICAgIHsKKyAgICAgIHNldF9vcHRpb24gKCdyZWFkbWUtYWxwaGEnLCBJTlRFUk5BTCk7CisgICAgICBzZXRfb3B0aW9uICgnc3RkLW9wdGlvbnMnLCBJTlRFUk5BTCk7CisgICAgICBzZXRfb3B0aW9uICgnY2hlY2stbmV3cycsIElOVEVSTkFMKTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKyMgc2hhZG93X3VuY29uZGl0aW9uYWxseSAoJHZhcm5hbWUsICR3aGVyZSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmV0dXJuIGEgJCh2YXJpYWJsZSkgdGhhdCBjb250YWlucyBhbGwgcG9zc2libGUgdmFsdWVzCisjICR2YXJuYW1lIGNhbiB0YWtlLgorIyBJZiB0aGUgVkFSIHdhc24ndCBkZWZpbmVkIGNvbmRpdGlvbmFsbHksIHJldHVybiAkKFZBUikuCisjIE90aGVyd2lzZSB3ZSBjcmVhdGUgYW4gYW1fX1ZBUl9ESVNUIHZhcmlhYmxlIHdoaWNoIGNvbnRhaW5zCisjIGFsbCBwb3NzaWJsZSB2YWx1ZXMsIGFuZCByZXR1cm4gJChhbV9fVkFSX0RJU1QpLgorc3ViIHNoYWRvd191bmNvbmRpdGlvbmFsbHkgKCQkKQoreworICBteSAoJHZhcm5hbWUsICR3aGVyZSkgPSBAXzsKKyAgbXkgJHZhciA9IHZhciAkdmFybmFtZTsKKyAgaWYgKCR2YXItPmhhc19jb25kaXRpb25hbF9jb250ZW50cykKKyAgICB7CisgICAgICAkdmFybmFtZSA9ICJhbV9fJHt2YXJuYW1lfV9ESVNUIjsKKyAgICAgIG15IEBmaWxlcyA9IHVuaXEgKCR2YXItPnZhbHVlX2FzX2xpc3RfcmVjdXJzaXZlKTsKKyAgICAgIGRlZmluZV9wcmV0dHlfdmFyaWFibGUgKCR2YXJuYW1lLCBUUlVFLCAkd2hlcmUsIEBmaWxlcyk7CisgICAgfQorICByZXR1cm4gIlwkKCR2YXJuYW1lKSIKK30KKworIyBnZXRfb2JqZWN0X2V4dGVuc2lvbiAoJEVYVEVOU0lPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByZWZpeCAkRVhURU5TSU9OIHdpdGggJFUgaWYgYW5zaTJrbnIgaXMgaW4gdXNlLgorc3ViIGdldF9vYmplY3RfZXh0ZW5zaW9uICgkKQoreworICAgIG15ICgkZXh0ZW5zaW9uKSA9IEBfOworCisgICAgIyBDaGVjayBmb3IgYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24uCisgICAgJGV4dGVuc2lvbiA9ICckVScgLiAkZXh0ZW5zaW9uCisgICAgICBpZiBvcHRpb24gJ2Fuc2kya25yJzsKKworICAgICRnZXRfb2JqZWN0X2V4dGVuc2lvbl93YXNfcnVuID0gMTsKKworICAgIHJldHVybiAkZXh0ZW5zaW9uOworfQorCisjIGNoZWNrX3VzZXJfdmFyaWFibGVzIChATElTVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNYWtlIHN1cmUgZWFjaCB2YXJpYWJsZSBWQVIgaW4gQExJU1QgZG9lcyBub3QgZXhpc3QsIHN1Z2dlc3QgdXNpbmcgQU1fVkFSCisjIG90aGVyd2lzZS4KK3N1YiBjaGVja191c2VyX3ZhcmlhYmxlcyAoQCkKK3sKKyAgbXkgQGRvbnRfb3ZlcnJpZGUgPSBAXzsKKyAgZm9yZWFjaCBteSAkZmxhZyAoQGRvbnRfb3ZlcnJpZGUpCisgICAgeworICAgICAgbXkgJHZhciA9IHZhciAkZmxhZzsKKyAgICAgIGlmICgkdmFyKQorCXsKKwkgIGZvciBteSAkY29uZCAoJHZhci0+Y29uZGl0aW9ucy0+Y29uZHMpCisJICAgIHsKKwkgICAgICBpZiAoJHZhci0+cmRlZiAoJGNvbmQpLT5vd25lciA9PSBWQVJfTUFLRUZJTEUpCisJCXsKKwkJICBtc2dfY29uZF92YXIgKCdnbnUnLCAkY29uZCwgJGZsYWcsCisJCQkJImAkZmxhZycgaXMgYSB1c2VyIHZhcmlhYmxlLCAiCisJCQkJLiAieW91IHNob3VsZCBub3Qgb3ZlcnJpZGUgaXQ7XG4iCisJCQkJLiAidXNlIGBBTV8kZmxhZycgaW5zdGVhZC4iKTsKKwkJfQorCSAgICB9CisJfQorICAgIH0KK30KKworIyBDYWxsIGZpbmlzaCBmdW5jdGlvbiBmb3IgZWFjaCBsYW5ndWFnZSB0aGF0IHdhcyB1c2VkLgorc3ViIGhhbmRsZV9sYW5ndWFnZXMKK3sKKyAgICBpZiAoISBvcHRpb24gJ25vLWRlcGVuZGVuY2llcycpCisgICAgeworCSMgSW5jbHVkZSBhdXRvLWRlcCBjb2RlLiAgRG9uJ3QgaW5jbHVkZSBpdCBpZiBERVBfRklMRVMgd291bGQKKwkjIGJlIGVtcHR5LgorCWlmICgmc2F3X3NvdXJjZXNfcCAoMCkgJiYga2V5cyAlZGVwX2ZpbGVzKQorCXsKKwkgICAgIyBTZXQgbG9jYXRpb24gb2YgZGVwY29tcC4KKwkgICAgJmRlZmluZV92YXJpYWJsZSAoJ2RlcGNvbXAnLAorCQkJICAgICAgIlwkKFNIRUxMKSAkYW1fY29uZmlnX2F1eF9kaXIvZGVwY29tcCIsCisJCQkgICAgICBJTlRFUk5BTCk7CisJICAgICZkZWZpbmVfdmFyaWFibGUgKCdhbV9fZGVwZmlsZXNfbWF5YmUnLCAnZGVwZmlsZXMnLCBJTlRFUk5BTCk7CisKKwkgICAgcmVxdWlyZV9jb25mX2ZpbGUgKCIkYW1fZmlsZS5hbSIsIEZPUkVJR04sICdkZXBjb21wJyk7CisKKwkgICAgbXkgQGRlcGxpc3QgPSBzb3J0IGtleXMgJWRlcF9maWxlczsKKwkgICAgIyBHZW5lcmF0ZSBlYWNoIGBpbmNsdWRlJyBpbmRpdmlkdWFsbHkuICBJcml4IDYgbWFrZSB3aWxsCisJICAgICMgbm90IHByb3Blcmx5IGluY2x1ZGUgc2V2ZXJhbCBmaWxlcyByZXN1bHRpbmcgZnJvbSBhCisJICAgICMgdmFyaWFibGUgZXhwYW5zaW9uOyBnZW5lcmF0aW5nIG1hbnkgc2VwYXJhdGUgaW5jbHVkZXMKKwkgICAgIyBzZWVtcyBzYWZlc3QuCisJICAgICRvdXRwdXRfcnVsZXMgLj0gIlxuIjsKKwkgICAgZm9yZWFjaCBteSAkaXRlciAoQGRlcGxpc3QpCisJICAgIHsKKwkJJG91dHB1dF9ydWxlcyAuPSAoc3Vic3QgKCdBTURFUF9UUlVFJykKKwkJCQkgIC4gc3Vic3QgKCdhbV9faW5jbHVkZScpCisJCQkJICAuICcgJworCQkJCSAgLiBzdWJzdCAoJ2FtX19xdW90ZScpCisJCQkJICAuICRpdGVyCisJCQkJICAuIHN1YnN0ICgnYW1fX3F1b3RlJykKKwkJCQkgIC4gIlxuIik7CisJICAgIH0KKworCSAgICAjIENvbXB1dGUgdGhlIHNldCBvZiBkaXJlY3RvcmllcyB0byByZW1vdmUgaW4gZGlzdGNsZWFuLWRlcGVuZC4KKwkgICAgbXkgQGRlcGRpcnMgPSB1bmlxIChtYXAgeyBkaXJuYW1lICgkXykgfSBAZGVwbGlzdCk7CisJICAgICRvdXRwdXRfcnVsZXMgLj0gJmZpbGVfY29udGVudHMgKCdkZXBlbmQnLAorCQkJCQkgICAgIG5ldyBBdXRvbWFrZTo6TG9jYXRpb24sCisJCQkJCSAgICAgREVQRElSUyA9PiAiQGRlcGRpcnMiKTsKKwl9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJJmRlZmluZV92YXJpYWJsZSAoJ2RlcGNvbXAnLCAnJywgSU5URVJOQUwpOworCSZkZWZpbmVfdmFyaWFibGUgKCdhbV9fZGVwZmlsZXNfbWF5YmUnLCAnJywgSU5URVJOQUwpOworICAgIH0KKworICAgIG15ICVkb25lOworCisgICAgIyBJcyB0aGUgYyBsaW5rZXIgbmVlZGVkPworICAgIG15ICRuZWVkc19jID0gMDsKKyAgICBmb3JlYWNoIG15ICRleHQgKHNvcnQga2V5cyAlZXh0ZW5zaW9uX3NlZW4pCisgICAgeworCW5leHQgdW5sZXNzICRleHRlbnNpb25fbWFweyRleHR9OworCisJbXkgJGxhbmcgPSAkbGFuZ3VhZ2VzeyRleHRlbnNpb25fbWFweyRleHR9fTsKKworCW15ICRydWxlX2ZpbGUgPSAkbGFuZy0+cnVsZV9maWxlIHx8ICdkZXBlbmQyJzsKKworCSMgR2V0IGluZm9ybWF0aW9uIG9uICRMQU5HLgorCW15ICRwZnggPSAkbGFuZy0+YXV0b2RlcDsKKwlteSAkZnBmeCA9ICgkcGZ4IGVxICcnKSA/ICdDQycgOiAkcGZ4OworCisJbXkgKCRBTURFUCwgJEZBU1RERVApID0KKwkgIChvcHRpb24gJ25vLWRlcGVuZGVuY2llcycgfHwgJGxhbmctPmF1dG9kZXAgZXEgJ25vJykKKwkgID8gKCdGQUxTRScsICdGQUxTRScpIDogKCdBTURFUCcsICJhbV9fZmFzdGRlcCRmcGZ4Iik7CisKKwlteSAkdmVyYm9zZSA9IHZlcmJvc2VfZmxhZyAoJGxhbmctPmNjZXIgfHwgJ0dFTicpOworCW15ICRzaWxlbnQgPSBzaWxlbnRfZmxhZyAoKTsKKworCW15ICV0cmFuc2Zvcm0gPSAoJ0VYVCcgICAgID0+ICRleHQsCisJCQkgJ1BGWCcgICAgID0+ICRwZngsCisJCQkgJ0ZQRlgnICAgID0+ICRmcGZ4LAorCQkJICdBTURFUCcgICA9PiAkQU1ERVAsCisJCQkgJ0ZBU1RERVAnID0+ICRGQVNUREVQLAorCQkJICctYycgICAgICA9PiAkbGFuZy0+Y29tcGlsZV9mbGFnIHx8ICcnLAorCQkJICMgVGhlc2UgYXJlIG5vdCB1c2VkLCBidXQgdGhleSBuZWVkIHRvIGJlIGRlZmluZWQKKwkJCSAjIHNvICZ0cmFuc2Zvcm0gZG8gbm90IGNvbXBsYWluLgorCQkJIFNVQkRJUk9CSiAgICAgPT4gMCwKKwkJCSAnREVSSVZFRC1FWFQnID0+ICdCVUcnLAorCQkJIERJU1RfU09VUkNFICAgPT4gMSwKKwkJCSBWRVJCT1NFICAgPT4gJHZlcmJvc2UsCisJCQkgU0lMRU5UICAgID0+ICRzaWxlbnQsCisJCQkpOworCisJIyBHZW5lcmF0ZSB0aGUgYXBwcm9wcmlhdGUgcnVsZXMgZm9yIHRoaXMgZXh0ZW5zaW9uLgorCWlmICgoKCEgb3B0aW9uICduby1kZXBlbmRlbmNpZXMnKSAmJiAkbGFuZy0+YXV0b2RlcCBuZSAnbm8nKQorCSAgICB8fCBkZWZpbmVkICRsYW5nLT5jb21waWxlKQorCXsKKwkgICAgIyBTb21lIEMgY29tcGlsZXJzIGRvbid0IHN1cHBvcnQgLWMgLW8uICBVc2UgaXQgb25seSBpZiByZWFsbHkKKwkgICAgIyBuZWVkZWQuCisJICAgIG15ICRvdXRwdXRfZmxhZyA9ICRsYW5nLT5vdXRwdXRfZmxhZyB8fCAnJzsKKwkgICAgJG91dHB1dF9mbGFnID0gJy1vJworCSAgICAgIGlmICghICRvdXRwdXRfZmxhZworCQkgICYmICRsYW5nLT5uYW1lIGVxICdjJworCQkgICYmIG9wdGlvbiAnc3ViZGlyLW9iamVjdHMnKTsKKworCSAgICAjIENvbXB1dGUgYSBwb3NzaWJsZSBkZXJpdmVkIGV4dGVuc2lvbi4KKwkgICAgIyBUaGlzIGlzIG5vdCB1c2VkIGJ5IGRlcGVuZDIuYW0uCisJICAgIG15ICRkZXJfZXh0ID0gKCZ7JGxhbmctPm91dHB1dF9leHRlbnNpb25zfSAoJGV4dCkpWzBdOworCisJICAgICMgV2hlbiB3ZSBvdXRwdXQgYW4gaW5mZXJlbmNlIHJ1bGUgbGlrZSBgLmMubzonIHdlCisJICAgICMgaGF2ZSB0d28gY2FzZXMgdG8gY29uc2lkZXI6IGVpdGhlciBzdWJkaXItb2JqZWN0cworCSAgICAjIGlzIHVzZWQsIG9yIGl0IGlzIG5vdC4KKwkgICAgIworCSAgICAjIEluIHRoZSBsYXR0ZXIgY2FzZSB0aGUgcnVsZSBpcyB1c2VkIHRvIGJ1aWxkIG9iamVjdHMKKwkgICAgIyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIGFuZCBkZXBlbmRlbmNpZXMgYWx3YXlzCisJICAgICMgZ28gaW50byBgLi8kKERFUERJUikvJy4gIFdlIGNhbiBoYXJkLWNvZGUgdGhpcyB2YWx1ZS4KKwkgICAgIworCSAgICAjIEluIHRoZSBmb3JtZXIgY2FzZSB0aGUgcnVsZSBjYW4gYmUgdXNlZCB0byBidWlsZAorCSAgICAjIG9iamVjdHMgaW4gc3ViLWRpcmVjdG9yaWVzIHRvby4gIERlcGVuZGVuY2llcyBzaG91bGQKKwkgICAgIyBnbyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBzdWItZGlyZWN0b3JpZXMsIGUuZy4sCisJICAgICMgYHN1Yi8kKERFUERJUikvJy4gIFRoZSB2YWx1ZSBvZiB0aGlzIGRpcmVjdG9yeQorCSAgICAjIG5lZWRzIHRvIGJlIGNvbXB1dGVkIG9uLXRoZS1mbHkuCisJICAgICMKKwkgICAgIyBERVBCQVNFIGhvbGRzIHRoZSBuYW1lIG9mIHRoaXMgZGlyZWN0b3J5LCBwbHVzIHRoZQorCSAgICAjIGJhc2VuYW1lIHBhcnQgb2YgdGhlIG9iamVjdCBmaWxlIChleHRlbnNpb25zIFBvLCBUUG8sCisJICAgICMgUGxvLCBUUGxvIHdpbGwgYmUgYWRkZWQgbGF0ZXIgYXMgYXBwcm9wcmlhdGUpLiAgSXQgaXMKKwkgICAgIyBlaXRoZXIgaGFyZGNvZGVkLCBvciBhIHNoZWxsIHZhcmlhYmxlIChgJGRlcGJhc2UnKSB0aGF0CisJICAgICMgd2lsbCBiZSBjb21wdXRlZCBieSB0aGUgcnVsZS4KKwkgICAgbXkgJGRlcGJhc2UgPQorCSAgICAgIG9wdGlvbiAoJ3N1YmRpci1vYmplY3RzJykgPyAnJCRkZXBiYXNlJyA6ICckKERFUERJUikvJConOworCSAgICAkb3V0cHV0X3J1bGVzIC49CisJICAgICAgZmlsZV9jb250ZW50cyAoJHJ1bGVfZmlsZSwKKwkJCSAgICAgbmV3IEF1dG9tYWtlOjpMb2NhdGlvbiwKKwkJCSAgICAgJXRyYW5zZm9ybSwKKwkJCSAgICAgR0VORVJJQyAgID0+IDEsCisKKwkJCSAgICAgJ0RFUklWRUQtRVhUJyA9PiAkZGVyX2V4dCwKKworCQkJICAgICBERVBCQVNFICAgPT4gJGRlcGJhc2UsCisJCQkgICAgIEJBU0UgICAgICA9PiAnJConLAorCQkJICAgICBTT1VSQ0UgICAgPT4gJyQ8JywKKwkJCSAgICAgU09VUkNFRkxBRyA9PiAkc291cmNlZmxhZ3N7JGV4dH0gfHwgJycsCisJCQkgICAgIE9CSiAgICAgICA9PiAnJEAnLAorCQkJICAgICBPQkpPQkogICAgPT4gJyRAJywKKwkJCSAgICAgTFRPQkogICAgID0+ICckQCcsCisKKwkJCSAgICAgQ09NUElMRSAgID0+ICckKCcgLiAkbGFuZy0+Y29tcGlsZXIgLiAnKScsCisJCQkgICAgIExUQ09NUElMRSA9PiAnJChMVCcgLiAkbGFuZy0+Y29tcGlsZXIgLiAnKScsCisJCQkgICAgIC1vICAgICAgICA9PiAkb3V0cHV0X2ZsYWcsCisJCQkgICAgIFNVQkRJUk9CSiA9PiAhISBvcHRpb24gJ3N1YmRpci1vYmplY3RzJyk7CisJfQorCisJIyBOb3cgaW5jbHVkZSBjb2RlIGZvciBlYWNoIHNwZWNpYWxseSBoYW5kbGVkIG9iamVjdCB3aXRoIHRoaXMKKwkjIGxhbmd1YWdlLgorCW15ICVzZWVuX2ZpbGVzID0gKCk7CisJZm9yZWFjaCBteSAkZmlsZSAoQHskbGFuZ19zcGVjaWZpY19maWxlc3skbGFuZy0+bmFtZX19KQorCXsKKwkgICAgbXkgKCRkZXJpdmVkLCAkc291cmNlLCAkb2JqLCAkbXlleHQsICRzcmNleHQsICVmaWxlX3RyYW5zZm9ybSkgPSBAJGZpbGU7CisKKwkgICAgIyBXZSBtaWdodCBzZWUgYSBnaXZlbiBvYmplY3QgdHdpY2UsIGZvciBpbnN0YW5jZSBpZiBpdCBpcworCSAgICAjIHVzZWQgdW5kZXIgZGlmZmVyZW50IGNvbmRpdGlvbnMuCisJICAgIG5leHQgaWYgZGVmaW5lZCAkc2Vlbl9maWxlc3skb2JqfTsKKwkgICAgJHNlZW5fZmlsZXN7JG9ian0gPSAxOworCisJICAgIHByb2dfZXJyb3IgKCJmb3VuZCAiIC4gJGxhbmctPm5hbWUgLgorCQkJIiBpbiBoYW5kbGVfbGFuZ3VhZ2VzLCBidXQgY29tcGlsZXIgbm90IGRlZmluZWQiKQorCSAgICAgIHVubGVzcyBkZWZpbmVkICRsYW5nLT5jb21waWxlOworCisJICAgIG15ICRvYmpfY29tcGlsZSA9ICRsYW5nLT5jb21waWxlOworCisJICAgICMgUmV3cml0ZSBlYWNoIG9jY3VycmVuY2Ugb2YgYEFNXyRmbGFnJyBpbiB0aGUgY29tcGlsZQorCSAgICAjIHJ1bGUgaW50byBgJHtkZXJpdmVkfV8kZmxhZycgaWYgaXQgZXhpc3RzLgorCSAgICBmb3IgbXkgJGZsYWcgKEB7JGxhbmctPmZsYWdzfSkKKwkgICAgICB7CisJCW15ICR2YWwgPSAiJHtkZXJpdmVkfV8kZmxhZyI7CisJCSRvYmpfY29tcGlsZSA9fiBzL1woQU1fJGZsYWdcKS9cKCR2YWxcKS8KKwkJICBpZiBzZXRfc2VlbiAoJHZhbCk7CisJICAgICAgfQorCisJICAgIG15ICRsaWJ0b29sX3RhZyA9ICcnOworCSAgICBpZiAoJGxhbmctPmxpYnRvb2xfdGFnICYmIGV4aXN0cyAkbGlidG9vbF90YWdzeyRsYW5nLT5saWJ0b29sX3RhZ30pCisJICAgICAgeworCQkkbGlidG9vbF90YWcgPSAnLS10YWc9JyAuICRsYW5nLT5saWJ0b29sX3RhZyAuICcgJworCSAgICAgIH0KKworCSAgICBteSAkcHRsdGZsYWdzID0gIiR7ZGVyaXZlZH1fTElCVE9PTEZMQUdTIjsKKwkgICAgJHB0bHRmbGFncyA9ICdBTV9MSUJUT09MRkxBR1MnIHVubGVzcyBzZXRfc2VlbiAkcHRsdGZsYWdzOworCisJICAgIG15ICRsdHZlcmJvc2UgPSBkZWZpbmVfdmVyYm9zZV9saWJ0b29sICgpOworCSAgICBteSAkb2JqX2x0Y29tcGlsZSA9CisJICAgICAgIlwkKExJQlRPT0wpICRsdHZlcmJvc2UgJGxpYnRvb2xfdGFnXCQoJHB0bHRmbGFncykgXCQoTElCVE9PTEZMQUdTKSAiCisJICAgICAgLiAiLS1tb2RlPWNvbXBpbGUgJG9ial9jb21waWxlIjsKKworCSAgICAjIFdlIF9uZWVkXyBgLW8nIGZvciBwZXIgb2JqZWN0IHJ1bGVzLgorCSAgICBteSAkb3V0cHV0X2ZsYWcgPSAkbGFuZy0+b3V0cHV0X2ZsYWcgfHwgJy1vJzsKKworCSAgICBteSAkZGVwYmFzZSA9IGRpcm5hbWUgKCRvYmopOworCSAgICAkZGVwYmFzZSA9ICcnCisJCWlmICRkZXBiYXNlIGVxICcuJzsKKwkgICAgJGRlcGJhc2UgLj0gJy8nCisJCXVubGVzcyAkZGVwYmFzZSBlcSAnJzsKKwkgICAgJGRlcGJhc2UgLj0gJyQoREVQRElSKS8nIC4gYmFzZW5hbWUgKCRvYmopOworCisJICAgICMgU3VwcG9ydCBmb3IgZGVhbnNpZmllZCBmaWxlcyBpbiBzdWJkaXJlY3RvcmllcyBpcyB1Z2x5CisJICAgICMgZW5vdWdoIHRvIGRlc2VydmUgYW4gZXhwbGFuYXRpb24uCisJICAgICMKKwkgICAgIyBBIE5vdGUgYWJvdXQgbm9ybWFsIGFuc2kya25yIHByb2Nlc3NpbmcgZmlyc3QuICBPbgorCSAgICAjCisJICAgICMgICBBVVRPTUFLRV9PUFRJT05TID0gYW5zaTJrbnIKKwkgICAgIyAgIGJpbl9QUk9HUkFNUyA9IGZvbworCSAgICAjICAgZm9vX1NPVVJDRVMgPSBmb28uYworCSAgICAjCisJICAgICMgd2UgZ2VuZXJhdGUgcnVsZXMgc2ltaWxhciB0bzoKKwkgICAgIworCSAgICAjICAgZm9vOiBmb28kVS5vOyBsaW5rIC4uLgorCSAgICAjICAgZm9vJFUubzogZm9vJFUuYzsgY29tcGlsZSAuLi4KKwkgICAgIyAgIGZvb18uYzogZm9vLmM7IGFuc2kya25yIC4uLgorCSAgICAjCisJICAgICMgdGhpcyBpcyBmYWlybHkgY29tcGFjdCwgYW5kIHdpbGwgY2FsbCBhbnNpMmtuciBkZXBlbmRpbmcKKwkgICAgIyBvbiB0aGUgdmFsdWUgb2YgJFUgKGAnIG9yIGBfJykuCisJICAgICMKKwkgICAgIyBJdCdzIGhhcmRlciB3aXRoIHN1YmRpciBzb3VyY2VzLiBPbgorCSAgICAjCisJICAgICMgICBBVVRPTUFLRV9PUFRJT05TID0gYW5zaTJrbnIKKwkgICAgIyAgIGJpbl9QUk9HUkFNUyA9IGZvbworCSAgICAjICAgZm9vX1NPVVJDRVMgPSBzdWIvZm9vLmMKKwkgICAgIworCSAgICAjIHdlIGhhdmUgdG8gY3JlYXRlIGZvb18uYyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisJICAgICMgKFVubGVzcyB0aGUgdXNlciBhc2tzICdzdWJkaXItb2JqZWN0cycuKSAgVGhpcyBpcyBpbXBvcnRhbnQKKwkgICAgIyBpbiBjYXNlIHRoZSBzYW1lIGZpbGUgKGBmb28uYycpIGlzIGNvbXBpbGVkIGZyb20gb3RoZXIKKwkgICAgIyBkaXJlY3RvcmllcyB3aXRoIGRpZmZlcmVudCBjcHAgb3B0aW9uczogZm9vXy5jIHdvdWxkCisJICAgICMgYmUgcHJlcHJvY2Vzc2VkIGZvciBvbmx5IG9uZSBzZXQgb2Ygb3B0aW9ucyBpZiBpdCB3ZXJlCisJICAgICMgcHV0IGluIHRoZSBzdWJkaXJlY3RvcnkuCisJICAgICMKKwkgICAgIyBCZWNhdXNlIGZvbyRVLm8gbXVzdCBiZSBidWlsdCBmcm9tIGVpdGhlciBmb29fLmMgb3IKKwkgICAgIyBzdWIvZm9vLmMgd2UgY2FuJ3QgYmUgYXMgY29uY2lzZSBhcyBpbiB0aGUgZmlyc3QgZXhhbXBsZS4KKwkgICAgIyBJbnN0ZWFkIHdlIG91dHB1dAorCSAgICAjCisJICAgICMgICBmb286IGZvbyRVLm87IGxpbmsgLi4uCisJICAgICMgICBmb29fLm86IGZvb18uYzsgY29tcGlsZSAuLi4KKwkgICAgIyAgIGZvby5vOiBzdWIvZm9vLmM7IGNvbXBpbGUgLi4uCisJICAgICMgICBmb29fLmM6IGZvby5jOyBhbnNpMmtuciAuLi4KKwkgICAgIworCSAgICAjIFRoaXMgaXMgd2h5IHdlJ2xsIG5vdyB0cmFuc2Zvcm0gJHJ1bGVfZmlsZSB0d2ljZQorCSAgICAjIGlmIHdlIGRldGVjdCB0aGlzIGNhc2UuCisJICAgICMgQSBmaXJzdCB0aW1lIHdlIG91dHB1dCB0aGUgY29tcGlsZSBydWxlIHdpdGggYCRVJworCSAgICAjIHJlcGxhY2VkIGJ5IGBfJyBhbmQgdGhlIHNvdXJjZSBkaXJlY3RvcnkgcmVtb3ZlZCwKKwkgICAgIyBhbmQgYW5vdGhlciB0aW1lIHdlIHNpbXBseSByZW1vdmUgYCRVJy4KKwkgICAgIworCSAgICAjIE5vdGUgdGhhdCBhdCB0aGlzIHBvaW50ICRzb3VyY2UgKGFzIGNvbXB1dGVkIGJ5CisJICAgICMgJmhhbmRsZV9zaW5nbGVfdHJhbnNmb3JtKSBpcyBgc3ViL2ZvbyRVLmMnLgorCSAgICAjIFRoaXMgY2FuIGJlIGNvbmZ1c2luZzogaXQgY2FuIGJlIHVzZWQgYXMtaXMgd2hlbgorCSAgICAjIHN1YmRpci1vYmplY3RzIGlzIHNldCwgb3RoZXJ3aXNlIHlvdSBoYXZlIHRvIGtub3cKKwkgICAgIyBpdCByZWFsbHkgbWVhbnMgYGZvb18uYycgb3IgYHN1Yi9mb28uYycuCisJICAgIG15ICRvYmpkaXIgPSBkaXJuYW1lICgkb2JqKTsKKwkgICAgbXkgJHNyY2RpciA9IGRpcm5hbWUgKCRzb3VyY2UpOworCSAgICBpZiAoJGxhbmctPmFuc2kgJiYgJG9iaiA9fiAvXCRVLykKKwkgICAgICB7CisJCXByb2dfZXJyb3IgImAkb2JqJyBjb250YWlucyBcJFUsIGJ1dCBgJHNvdXJjZScgZG9lc24ndC4iCisJCSAgaWYgJHNvdXJjZSAhfiAvXCRVLzsKKworCQkobXkgJHNvdXJjZV8gPSAkc291cmNlKSA9fiBzL1wkVS9fL2c7CisJCSMgT3V0cHV0IGFuIGFkZGl0aW9uYWwgcnVsZSBpZiBfLmMgYW5kIC5jIGFyZSBub3QgaW4KKwkJIyB0aGUgc2FtZSBkaXJlY3RvcnkuICAoXy5jIGlzIGFsd2F5cyBpbiAkb2JqZGlyLikKKwkJaWYgKCRvYmpkaXIgbmUgJHNyY2RpcikKKwkJICB7CisJCSAgICAobXkgJG9ial8gPSAkb2JqKSA9fiBzL1wkVS9fL2c7CisJCSAgICAobXkgJGRlcGJhc2VfID0gJGRlcGJhc2UpID1+IHMvXCRVL18vZzsKKwkJICAgICRzb3VyY2VfID0gYmFzZW5hbWUgKCRzb3VyY2VfKTsKKworCQkgICAgJG91dHB1dF9ydWxlcyAuPQorCQkgICAgICBmaWxlX2NvbnRlbnRzICgkcnVsZV9maWxlLAorCQkJCSAgICAgbmV3IEF1dG9tYWtlOjpMb2NhdGlvbiwKKwkJCQkgICAgICV0cmFuc2Zvcm0sCisJCQkJICAgICBHRU5FUklDICAgPT4gMCwKKworCQkJCSAgICAgREVQQkFTRSAgID0+ICRkZXBiYXNlXywKKwkJCQkgICAgIEJBU0UgICAgICA9PiAkb2JqXywKKwkJCQkgICAgIFNPVVJDRSAgICA9PiAkc291cmNlXywKKwkJCQkgICAgIFNPVVJDRUZMQUcgPT4gJHNvdXJjZWZsYWdzeyRzcmNleHR9IHx8ICcnLAorCQkJCSAgICAgT0JKICAgICAgID0+ICIkb2JqXyRteWV4dCIsCisJCQkJICAgICBPQkpPQkogICAgPT4gIiRvYmpfLm9iaiIsCisJCQkJICAgICBMVE9CSiAgICAgPT4gIiRvYmpfLmxvIiwKKworCQkJCSAgICAgQ09NUElMRSAgID0+ICRvYmpfY29tcGlsZSwKKwkJCQkgICAgIExUQ09NUElMRSA9PiAkb2JqX2x0Y29tcGlsZSwKKwkJCQkgICAgIC1vICAgICAgICA9PiAkb3V0cHV0X2ZsYWcsCisJCQkJICAgICAlZmlsZV90cmFuc2Zvcm0pOworCQkgICAgJG9iaiA9fiBzL1wkVS8vZzsKKwkJICAgICRkZXBiYXNlID1+IHMvXCRVLy9nOworCQkgICAgJHNvdXJjZSA9fiBzL1wkVS8vZzsKKwkJICB9CisJICAgICAgfQorCisJICAgICRvdXRwdXRfcnVsZXMgLj0KKwkgICAgICBmaWxlX2NvbnRlbnRzICgkcnVsZV9maWxlLAorCQkJICAgICBuZXcgQXV0b21ha2U6OkxvY2F0aW9uLAorCQkJICAgICAldHJhbnNmb3JtLAorCQkJICAgICBHRU5FUklDICAgPT4gMCwKKworCQkJICAgICBERVBCQVNFICAgPT4gJGRlcGJhc2UsCisJCQkgICAgIEJBU0UgICAgICA9PiAkb2JqLAorCQkJICAgICBTT1VSQ0UgICAgPT4gJHNvdXJjZSwKKwkJCSAgICAgU09VUkNFRkxBRyA9PiAkc291cmNlZmxhZ3N7JHNyY2V4dH0gfHwgJycsCisJCQkgICAgICMgVXNlICRteWV4dCBhbmQgbm90IGAubycgaGVyZSwgaW4gY2FzZQorCQkJICAgICAjIHdlIGFyZSBhY3R1YWxseSBidWlsZGluZyBhIG5ldyBzb3VyY2UKKwkJCSAgICAgIyBmaWxlIC0tIGUuZy4gdmlhIHlhY2MuCisJCQkgICAgIE9CSiAgICAgICA9PiAiJG9iaiRteWV4dCIsCisJCQkgICAgIE9CSk9CSiAgICA9PiAiJG9iai5vYmoiLAorCQkJICAgICBMVE9CSiAgICAgPT4gIiRvYmoubG8iLAorCisJCQkgICAgIFZFUkJPU0UgICA9PiAkdmVyYm9zZSwKKwkJCSAgICAgU0lMRU5UICAgID0+ICRzaWxlbnQsCisJCQkgICAgIENPTVBJTEUgICA9PiAkb2JqX2NvbXBpbGUsCisJCQkgICAgIExUQ09NUElMRSA9PiAkb2JqX2x0Y29tcGlsZSwKKwkJCSAgICAgLW8gICAgICAgID0+ICRvdXRwdXRfZmxhZywKKwkJCSAgICAgJWZpbGVfdHJhbnNmb3JtKTsKKwl9CisKKwkjIFRoZSByZXN0IG9mIHRoZSBsb29wIGlzIGRvbmUgb25jZSBwZXIgbGFuZ3VhZ2UuCisJbmV4dCBpZiBkZWZpbmVkICRkb25leyRsYW5nfTsKKwkkZG9uZXskbGFuZ30gPSAxOworCisJIyBMb2FkIHRoZSBsYW5ndWFnZSBkZXBlbmRlbnQgTWFrZWZpbGUgY2h1bmtzLgorCW15ICVsYW5nID0gbWFwIHsgdWMgKCRfKSA9PiAwIH0ga2V5cyAlbGFuZ3VhZ2VzOworCSRsYW5ne3VjICgkbGFuZy0+bmFtZSl9ID0gMTsKKwkkb3V0cHV0X3J1bGVzIC49IGZpbGVfY29udGVudHMgKCdsYW5nLWNvbXBpbGUnLAorCQkJCQluZXcgQXV0b21ha2U6OkxvY2F0aW9uLAorCQkJCQkldHJhbnNmb3JtLCAlbGFuZyk7CisKKwkjIElmIHRoZSBzb3VyY2UgdG8gYSBwcm9ncmFtIGNvbnNpc3RzIGVudGlyZWx5IG9mIGNvZGUgZnJvbSBhCisJIyBgcHVyZScgbGFuZ3VhZ2UsIGZvciBpbnN0YW5jZSBDKysgb3IgRm9ydHJhbiA3NywgdGhlbiB3ZQorCSMgZG9uJ3QgbmVlZCB0aGUgQyBjb21waWxlciBjb2RlLiAgSG93ZXZlciBpZiB3ZSBydW4gaW50bworCSMgc29tZXRoaW5nIHVudXN1YWwgdGhlbiB3ZSBkbyBnZW5lcmF0ZSB0aGUgQyBjb2RlLiAgVGhlcmUgYXJlCisJIyBwcm9iYWJseSBjb3JuZXIgY2FzZXMgaGVyZSB0aGF0IGRvIG5vdCB3b3JrIHByb3Blcmx5LgorCSMgUGVvcGxlIGxpbmtpbmcgSmF2YSBjb2RlIHRvIEZvcnRyYW4gY29kZSBkZXNlcnZlIHBhaW4uCisJJG5lZWRzX2MgfHw9ICEgJGxhbmctPnB1cmU7CisKKwlkZWZpbmVfY29tcGlsZXJfdmFyaWFibGUgKCRsYW5nKQorCSAgaWYgKCRsYW5nLT5jb21waWxlKTsKKworCWRlZmluZV9saW5rZXJfdmFyaWFibGUgKCRsYW5nKQorCSAgaWYgKCRsYW5nLT5saW5rKTsKKworCXJlcXVpcmVfdmFyaWFibGVzICgiJGFtX2ZpbGUuYW0iLCAkbGFuZy0+TmFtZSAuICIgc291cmNlIHNlZW4iLAorCQkJICAgVFJVRSwgQHskbGFuZy0+Y29uZmlnX3ZhcnN9KTsKKworCSMgQ2FsbCB0aGUgZmluaXNoZXIuCisJJGxhbmctPmZpbmlzaDsKKworCSMgRmxhZ3MgbGlzdGVkIGluIGAtPmZsYWdzJyBhcmUgdXNlciB2YXJpYWJsZXMgKHBlciBHTlUgU3RhbmRhcmRzKSwKKwkjIHRoZXkgc2hvdWxkIG5vdCBiZSBvdmVycmlkZGVuIGluIHRoZSBNYWtlZmlsZS4uLgorCW15IEBkb250X292ZXJyaWRlID0gQHskbGFuZy0+ZmxhZ3N9OworCSMgLi4uIGFuZCBzbyBpcyBMREZMQUdTLgorCXB1c2ggQGRvbnRfb3ZlcnJpZGUsICdMREZMQUdTJyBpZiAkbGFuZy0+bGluazsKKworCWNoZWNrX3VzZXJfdmFyaWFibGVzIEBkb250X292ZXJyaWRlOworICAgIH0KKworICAgICMgSWYgdGhlIHByb2plY3QgaXMgZW50aXJlbHkgQysrIG9yIGVudGlyZWx5IEZvcnRyYW4gNzcgKGkuZS4sIDEKKyAgICAjIHN1ZmZpeCBydWxlIHdhcyBsZWFybmVkKSwgZG9uJ3QgYm90aGVyIHdpdGggdGhlIEMgc3R1ZmYuICBCdXQgaWYKKyAgICAjIGFueXRoaW5nIGVsc2UgY3JlZXBzIGluLCB0aGVuIHVzZSBpdC4KKyAgICAkbmVlZHNfYyA9IDEKKyAgICAgIGlmICRuZWVkX2xpbmsgfHwgc3VmZml4X3J1bGVzX2NvdW50ID4gMTsKKworICAgIGlmICgkbmVlZHNfYykKKyAgICAgIHsKKwkmZGVmaW5lX2NvbXBpbGVyX3ZhcmlhYmxlICgkbGFuZ3VhZ2VzeydjJ30pCisJICB1bmxlc3MgZGVmaW5lZCAkZG9uZXskbGFuZ3VhZ2VzeydjJ319OworCWRlZmluZV9saW5rZXJfdmFyaWFibGUgKCRsYW5ndWFnZXN7J2MnfSk7CisgICAgICB9CisKKyAgICAjIEFsd2F5cyBwcm92aWRlIHRoZSB1c2VyIHdpdGggYEFNX1ZfR0VOJyBmb3IgYHNpbGVudC1ydWxlcycgbW9kZS4KKyAgICBkZWZpbmVfdmVyYm9zZV90YWd2YXIgKCdHRU4nKTsKK30KKworCisjIGFwcGVuZF9leGVleHQgeyBQUkVESUNBVEUgfSAkTUFDUk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgJChFWEVFWFQpIHRvIGVhY2ggZmlsZW5hbWUgaW4gJEYgYXBwZWFyaW5nIGluIHRoZSBNYWtlZmlsZQorIyB2YXJpYWJsZSAkTUFDUk8gaWYgJlBSRURJQ0FURSgkRikgaXMgdHJ1ZS4gIEBzdWJzdGl0dXRpb25zQCBhcmUKKyMgaWdub3JlZC4KKyMKKyMgVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBvbiBhbGwgZmlsZW5hbWVzIG9mICpfUFJPR1JBTVMsIGFuZCBmaWxlbmFtZXMKKyMgb2YgVEVTVFMgdGhhdCBhcmUgcHJvZ3JhbXMuCitzdWIgYXBwZW5kX2V4ZWV4dCAoJiQpCit7CisgIG15ICgkcHJlZCwgJG1hY3JvKSA9IEBfOworCisgIHRyYW5zZm9ybV92YXJpYWJsZV9yZWN1cnNpdmVseQorICAgICgkbWFjcm8sICRtYWNybywgJ2FtX19FWEVFWFQnLCAwLCBJTlRFUk5BTCwKKyAgICAgc3ViIHsKKyAgICAgICBteSAoJHN1YnZhciwgJHZhbCwgJGNvbmQsICRmdWxsX2NvbmQpID0gQF87CisgICAgICAgIyBBcHBlbmQgJChFWEVFWFQpIHVubGVzcyB0aGUgdXNlciBkaWQgaXQgYWxyZWFkeSwgb3IgaXQncyBhCisgICAgICAgIyBAc3Vic3RpdHV0aW9uQC4KKyAgICAgICAkdmFsIC49ICckKEVYRUVYVCknCisJIGlmICR2YWwgIX4gLyg/OlwkXChFWEVFWFRcKSR8XltAXVx3K1tAXSQpLyAmJiAmJHByZWQgKCR2YWwpOworICAgICAgIHJldHVybiAkdmFsOworICAgICB9KTsKK30KKworCisjIENoZWNrIHRvIG1ha2Ugc3VyZSBhIHNvdXJjZSBkZWZpbmVkIGluIExJQk9CSlMgaXMgbm90IGV4cGxpY2l0bHkKKyMgbWVudGlvbmVkLiAgVGhpcyBpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIChhcyBvcHBvc2VkIHRvIGJlaW5nIGlubGluZWQKKyMgaW4gaGFuZGxlX3NvdXJjZV90cmFuc2Zvcm0pIGJlY2F1c2UgaXQgaXNuJ3QgYWx3YXlzIGFwcHJvcHJpYXRlIHRvCisjIGRvIHRoaXMgY2hlY2suCitzdWIgY2hlY2tfbGlib2Jqc19zb3VyY2VzCit7CisgIG15ICgkb25lX2ZpbGUsICR1bnhmb3JtZWQpID0gQF87CisKKyAgZm9yZWFjaCBteSAkcHJlZml4ICgnJywgJ0VYVFJBXycsICdkaXN0XycsICdub2Rpc3RfJywKKwkJICAgICAgJ2Rpc3RfRVhUUkFfJywgJ25vZGlzdF9FWFRSQV8nKQorICAgIHsKKyAgICAgIG15IEBmaWxlczsKKyAgICAgIG15ICR2YXJuYW1lID0gJHByZWZpeCAuICRvbmVfZmlsZSAuICdfU09VUkNFUyc7CisgICAgICBteSAkdmFyID0gdmFyICgkdmFybmFtZSk7CisgICAgICBpZiAoJHZhcikKKwl7CisJICBAZmlsZXMgPSAkdmFyLT52YWx1ZV9hc19saXN0X3JlY3Vyc2l2ZTsKKwl9CisgICAgICBlbHNpZiAoJHByZWZpeCBlcSAnJykKKwl7CisJICBAZmlsZXMgPSAoJHVueGZvcm1lZCAuICcuYycpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBuZXh0OworCX0KKworICAgICAgZm9yZWFjaCBteSAkZmlsZSAoQGZpbGVzKQorCXsKKwkgIGVycl92YXIgKCRwcmVmaXggLiAkb25lX2ZpbGUgLiAnX1NPVVJDRVMnLAorCQkgICAiYXV0b21hdGljYWxseSBkaXNjb3ZlcmVkIGZpbGUgYCRmaWxlJyBzaG91bGQgbm90IiAuCisJCSAgICIgYmUgZXhwbGljaXRseSBtZW50aW9uZWQiKQorCSAgICBpZiBkZWZpbmVkICRsaWJzb3VyY2VzeyRmaWxlfTsKKwl9CisgICAgfQorfQorCisKKyMgQE9CSkVDVFMKKyMgaGFuZGxlX3NpbmdsZV90cmFuc2Zvcm0gKCRWQVIsICRUT1BQQVJFTlQsICRERVJJVkVELCAkT0JKLCAkRklMRSwgJVRSQU5TRk9STSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRG9lcyBtdWNoIG9mIHRoZSBhY3R1YWwgd29yayBmb3IgaGFuZGxlX3NvdXJjZV90cmFuc2Zvcm0uCisjIEFyZ3VtZW50cyBhcmU6CisjICAgJFZBUiBpcyB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdGhhdCB0aGUgc291cmNlIGZpbGVuYW1lcyBjb21lIGZyb20KKyMgICAkVE9QUEFSRU5UIGlzIHRoZSBuYW1lIG9mIHRoZSBfU09VUkNFUyB2YXJpYWJsZSB3aGljaCBpcyBiZWluZyBwcm9jZXNzZWQKKyMgICAkREVSSVZFRCBpcyB0aGUgbmFtZSBvZiByZXN1bHRpbmcgZXhlY3V0YWJsZSBvciBsaWJyYXJ5CisjICAgJE9CSiBpcyB0aGUgb2JqZWN0IGV4dGVuc2lvbiAoZS5nLiwgYCRVLmxvJykKKyMgICAkRklMRSB0aGUgc291cmNlIGZpbGUgdG8gdHJhbnNmb3JtCisjICAgJVRSQU5TRk9STSBjb250YWlucyBleHRyYXMgYXJndW1lbnRzIHRvIHBhc3MgdG8gZmlsZV9jb250ZW50cworIyAgICAgd2hlbiBwcm9kdWNpbmcgZXhwbGljaXQgcnVsZXMKKyMgUmVzdWx0IGlzIGEgbGlzdCBvZiB0aGUgbmFtZXMgb2Ygb2JqZWN0cworIyAlbGlua2Vyc191c2VkIHdpbGwgYmUgdXBkYXRlZCB3aXRoIGFueSBsaW5rZXJzIG5lZWRlZAorc3ViIGhhbmRsZV9zaW5nbGVfdHJhbnNmb3JtICgkJCQkJCUpCit7CisgICAgbXkgKCR2YXIsICR0b3BwYXJlbnQsICRkZXJpdmVkLCAkb2JqLCAkX2ZpbGUsICV0cmFuc2Zvcm0pID0gQF87CisgICAgbXkgQGZpbGVzID0gKCRfZmlsZSk7CisgICAgbXkgQHJlc3VsdCA9ICgpOworICAgIG15ICRub25hbnNpX29iaiA9ICRvYmo7CisgICAgJG5vbmFuc2lfb2JqID1+IHMvXCRVLy9nOworCisgICAgIyBUdXJuIHNvdXJjZXMgaW50byBvYmplY3RzLiAgV2UgdXNlIGEgd2hpbGUgbG9vcCBsaWtlIHRoaXMKKyAgICAjIGJlY2F1c2Ugd2UgbWlnaHQgYWRkIHRvIEBmaWxlcyBpbiB0aGUgbG9vcC4KKyAgICB3aGlsZSAoc2NhbGFyIEBmaWxlcyA+IDApCisgICAgeworCSRfID0gc2hpZnQgQGZpbGVzOworCisJIyBDb25maWd1cmUgc3Vic3RpdHV0aW9ucyBpbiBfU09VUkNFUyB2YXJpYWJsZXMgYXJlIGVycm9ycy4KKwlpZiAoL15cQC4qXEAkLykKKwl7CisJICBteSAkcGFyZW50X21zZyA9ICcnOworCSAgJHBhcmVudF9tc2cgPSAiXG5hbmQgaXMgcmVmZXJyZWQgdG8gZnJvbSBgJHRvcHBhcmVudCciCisJICAgIGlmICR0b3BwYXJlbnQgbmUgJHZhci0+bmFtZTsKKwkgIGVycl92YXIgKCR2YXIsCisJCSAgICJgIiAuICR2YXItPm5hbWUgLiAiJyBpbmNsdWRlcyBjb25maWd1cmUgc3Vic3RpdHV0aW9uIGAkXyciCisJCSAgIC4gJHBhcmVudF9tc2cgLiAiO1xuY29uZmlndXJlICIgLgorCQkgICAic3Vic3RpdHV0aW9ucyBhcmUgbm90IGFsbG93ZWQgaW4gX1NPVVJDRVMgdmFyaWFibGVzIik7CisJICBuZXh0OworCX0KKworCSMgSWYgdGhlIHNvdXJjZSBmaWxlIGlzIGluIGEgc3ViZGlyZWN0b3J5IHRoZW4gdGhlIGAubycgaXMgcHV0CisJIyBpbnRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgdW5sZXNzIHRoZSBzdWJkaXItb2JqZWN0cyBvcHRpb24KKwkjIGlzIGluIGVmZmVjdC4KKworCSMgU3BsaXQgZmlsZSBuYW1lIGludG8gYmFzZSBhbmQgZXh0ZW5zaW9uLgorCW5leHQgaWYgISAvXig/OiguKilcLyk/KFteXC9dKikoJEtOT1dOX0VYVEVOU0lPTlNfUEFUVEVSTikkLzsKKwlteSAkZnVsbCA9ICRfOworCW15ICRkaXJlY3RvcnkgPSAkMSB8fCAnJzsKKwlteSAkYmFzZSA9ICQyOworCW15ICRleHRlbnNpb24gPSAkMzsKKworCSMgV2UgbXVzdCBnZW5lcmF0ZSBhIHJ1bGUgZm9yIHRoZSBvYmplY3QgaWYgaXQgcmVxdWlyZXMgaXRzIG93biBmbGFncy4KKwlteSAkcmVuYW1lZCA9IDA7CisJbXkgKCRsaW5rZXIsICRvYmplY3QpOworCisJIyBUaGlzIHJlY29yZHMgd2hldGhlciB3ZSd2ZSBzZWVuIGEgZGVyaXZlZCBzb3VyY2UgZmlsZSAoZS5nLgorCSMgeWFjYyBvdXRwdXQpLgorCW15ICRkZXJpdmVkX3NvdXJjZSA9IDA7CisKKwkjIFRoaXMgaG9sZHMgdGhlIGBhZ2dyZWdhdGUgY29udGV4dCcgb2YgdGhlIGZpbGUgd2UgYXJlCisJIyBjdXJyZW50bHkgZXhhbWluaW5nLiAgSWYgdGhlIGZpbGUgaXMgY29tcGlsZWQgd2l0aAorCSMgcGVyLW9iamVjdCBmbGFncywgdGhlbiBpdCB3aWxsIGJlIHRoZSBuYW1lIG9mIHRoZSBvYmplY3QuCisJIyBPdGhlcndpc2UgaXQgd2lsbCBiZSBgQU0nLiAgVGhpcyBpcyB1c2VkIGJ5IHRoZSB0YXJnZXQgaG9vaworCSMgbGFuZ3VhZ2UgZnVuY3Rpb24uCisJbXkgJGFnZ3JlZ2F0ZSA9ICdBTSc7CisKKwkkZXh0ZW5zaW9uID0gJmRlcml2ZV9zdWZmaXggKCRleHRlbnNpb24sICRub25hbnNpX29iaik7CisJbXkgJGxhbmc7CisJaWYgKCRleHRlbnNpb25fbWFweyRleHRlbnNpb259ICYmCisJICAgICgkbGFuZyA9ICRsYW5ndWFnZXN7JGV4dGVuc2lvbl9tYXB7JGV4dGVuc2lvbn19KSkKKwl7CisJICAgICMgRm91bmQgdGhlIGxhbmd1YWdlLCBzbyBzZWUgd2hhdCBpdCBzYXlzLgorCSAgICAmc2F3X2V4dGVuc2lvbiAoJGV4dGVuc2lvbik7CisKKwkgICAgIyBEbyB3ZSBoYXZlIHBlci1leGVjdXRhYmxlIGZsYWdzIGZvciB0aGlzIGV4ZWN1dGFibGU/CisJICAgIG15ICRoYXZlX3Blcl9leGVjX2ZsYWdzID0gMDsKKwkgICAgbXkgQHBlZmxhZ3MgPSBAeyRsYW5nLT5mbGFnc307CisJICAgIHB1c2ggQHBlZmxhZ3MsICdMSUJUT09MRkxBR1MnIGlmICRub25hbnNpX29iaiBlcSAnLmxvJzsKKwkgICAgZm9yZWFjaCBteSAkZmxhZyAoQHBlZmxhZ3MpCisJICAgICAgeworCQlpZiAoc2V0X3NlZW4gKCIke2Rlcml2ZWR9XyRmbGFnIikpCisJCSAgeworCQkgICAgJGhhdmVfcGVyX2V4ZWNfZmxhZ3MgPSAxOworCQkgICAgbGFzdDsKKwkJICB9CisJICAgICAgfQorCisJICAgICMgTm90ZTogY29tcHV0ZWQgc3ViciBjYWxsLiAgVGhlIGxhbmd1YWdlIHJld3JpdGUgZnVuY3Rpb24KKwkgICAgIyBzaG91bGQgcmV0dXJuIG9uZSBvZiB0aGUgTEFOR18qIGNvbnN0YW50cy4gIEl0IGNvdWxkCisJICAgICMgYWxzbyByZXR1cm4gYSBsaXN0IHdob3NlIGZpcnN0IHZhbHVlIGlzIHN1Y2ggYSBjb25zdGFudAorCSAgICAjIGFuZCB3aG9zZSBzZWNvbmQgdmFsdWUgaXMgYSBuZXcgc291cmNlIGV4dGVuc2lvbiB3aGljaAorCSAgICAjIHNob3VsZCBiZSBhcHBsaWVkLiAgVGhpcyBtZWFucyB0aGlzIHBhcnRpY3VsYXIgbGFuZ3VhZ2UKKwkgICAgIyBnZW5lcmF0ZXMgYW5vdGhlciBzb3VyY2UgZmlsZSB3aGljaCB3ZSBtdXN0IHRoZW4gcHJvY2VzcworCSAgICAjIGZ1cnRoZXIuCisJICAgIG15ICRzdWJyID0gXCZ7J2xhbmdfJyAuICRsYW5nLT5uYW1lIC4gJ19yZXdyaXRlJ307CisJICAgIG15ICgkciwgJHNvdXJjZV9leHRlbnNpb24pCisJCT0gJiRzdWJyICgkZGlyZWN0b3J5LCAkYmFzZSwgJGV4dGVuc2lvbiwKKwkJCSAgJG5vbmFuc2lfb2JqLCAkaGF2ZV9wZXJfZXhlY19mbGFncywgJHZhcik7CisJICAgICMgU2tpcCB0aGlzIGVudHJ5IGlmIHdlIHdlcmUgYXNrZWQgbm90IHRvIHByb2Nlc3MgaXQuCisJICAgIG5leHQgaWYgJHIgPT0gTEFOR19JR05PUkU7CisKKwkgICAgIyBOb3cgZXh0cmFjdCBsaW5rZXIgYW5kIG90aGVyIGluZm8uCisJICAgICRsaW5rZXIgPSAkbGFuZy0+bGlua2VyOworCisJICAgIG15ICR0aGlzX29ial9leHQ7CisJICAgIGlmIChkZWZpbmVkICRzb3VyY2VfZXh0ZW5zaW9uKQorCSAgICB7CisJCSR0aGlzX29ial9leHQgPSAkc291cmNlX2V4dGVuc2lvbjsKKwkJJGRlcml2ZWRfc291cmNlID0gMTsKKwkgICAgfQorCSAgICBlbHNpZiAoJGxhbmctPmFuc2kpCisJICAgIHsKKwkJJHRoaXNfb2JqX2V4dCA9ICRvYmo7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCSR0aGlzX29ial9leHQgPSAkbm9uYW5zaV9vYmo7CisJICAgIH0KKwkgICAgJG9iamVjdCA9ICRiYXNlIC4gJHRoaXNfb2JqX2V4dDsKKworCSAgICBpZiAoJGhhdmVfcGVyX2V4ZWNfZmxhZ3MpCisJICAgIHsKKwkJIyBXZSBoYXZlIGEgcGVyLWV4ZWN1dGFibGUgZmxhZyBpbiBlZmZlY3QgZm9yIHRoaXMKKwkJIyBvYmplY3QuICBJbiB0aGlzIGNhc2Ugd2UgcmV3cml0ZSB0aGUgb2JqZWN0J3MKKwkJIyBuYW1lIHRvIGVuc3VyZSBpdCBpcyB1bmlxdWUuCisKKwkJIyBXZSBjaG9vc2UgdGhlIG5hbWUgYERFUklWRURfT0JKRUNUJyB0byBlbnN1cmUKKwkJIyAoMSkgdW5pcXVlbmVzcywgYW5kICgyKSBjb250aW51aXR5IGJldHdlZW4KKwkJIyBpbnZvY2F0aW9ucy4gIEhvd2V2ZXIsIHRoaXMgd2lsbCByZXN1bHQgaW4gYQorCQkjIG5hbWUgdGhhdCBpcyB0b28gbG9uZyBmb3IgbG9zaW5nIHN5c3RlbXMsIGluCisJCSMgc29tZSBzaXR1YXRpb25zLiAgU28gd2UgcHJvdmlkZSBfU0hPUlROQU1FIHRvCisJCSMgb3ZlcnJpZGUuCisKKwkJbXkgJGRuYW1lID0gJGRlcml2ZWQ7CisJCW15ICR2YXIgPSB2YXIgKCRkZXJpdmVkIC4gJ19TSE9SVE5BTUUnKTsKKwkJaWYgKCR2YXIpCisJCXsKKwkJICAgICMgRklYTUU6IHNob3VsZCB1c2UgdGhlIHNhbWUgQ29uZGl0aW9uIGFzCisJCSAgICAjIHRoZSBfU09VUkNFUyB2YXJpYWJsZS4gIEJ1dCB0aGlzIGlzIHJlYWxseQorCQkgICAgIyBzaWxseSBvdmVya2lsbCAtLSBub2JvZHkgc2hvdWxkIGhhdmUKKwkJICAgICMgY29uZGl0aW9uYWwgc2hvcnRuYW1lcy4KKwkJICAgICRkbmFtZSA9ICR2YXItPnZhcmlhYmxlX3ZhbHVlOworCQl9CisJCSRvYmplY3QgPSAkZG5hbWUgLiAnLScgLiAkb2JqZWN0OworCisJCXByb2dfZXJyb3IgKCRsYW5nLT5uYW1lIC4gIiBmbGFncyBkZWZpbmVkIHdpdGhvdXQgY29tcGlsZXIiKQorCQkgIGlmICEgZGVmaW5lZCAkbGFuZy0+Y29tcGlsZTsKKworCQkkcmVuYW1lZCA9IDE7CisJICAgIH0KKworCSAgICAjIElmIHJld3JpdGUgc2FpZCBpdCB3YXMgb2ssIHB1dCB0aGUgb2JqZWN0IGludG8gYQorCSAgICAjIHN1YmRpci4KKwkgICAgaWYgKCRyID09IExBTkdfU1VCRElSICYmICRkaXJlY3RvcnkgbmUgJycpCisJICAgIHsKKwkJJG9iamVjdCA9ICRkaXJlY3RvcnkgLiAnLycgLiAkb2JqZWN0OworCSAgICB9CisKKwkgICAgIyBJZiB0aGUgb2JqZWN0IGZpbGUgaGFzIGJlZW4gcmVuYW1lZCAoYmVjYXVzZSBwZXItdGFyZ2V0CisJICAgICMgZmxhZ3MgYXJlIHVzZWQpIHdlIGNhbm5vdCBjb21waWxlIHRoZSBmaWxlIHdpdGggYW4KKwkgICAgIyBpbmZlcmVuY2UgcnVsZTogd2UgbmVlZCBhbiBleHBsaWNpdCBydWxlLgorCSAgICAjCisJICAgICMgSWYgdGhlIHNvdXJjZSBpcyBpbiBhIHN1YmRpcmVjdG9yeSBhbmQgdGhlIG9iamVjdCBpcyBpbgorCSAgICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgd2UgYWxzbyBuZWVkIGFuIGV4cGxpY2l0IHJ1bGUuCisJICAgICMKKwkgICAgIyBJZiBib3RoIHNvdXJjZSBhbmQgb2JqZWN0IGZpbGVzIGFyZSBpbiBhIHN1YmRpcmVjdG9yeQorCSAgICAjICh0aGlzIGhhcHBlbnMgd2hlbiB0aGUgc3ViZGlyLW9iamVjdHMgb3B0aW9uIGlzIHVzZWQpLAorCSAgICAjIHRoZW4gdGhlIGluZmVyZW5jZSB3aWxsIHdvcmsuCisJICAgICMKKwkgICAgIyBUaGUgbGF0dGVyIGNhc2UgZGVzZXJ2ZXMgYSBoaXN0b3JpY2FsIG5vdGUuICBXaGVuIHRoZQorCSAgICAjIHN1YmRpci1vYmplY3RzIG9wdGlvbiB3YXMgYWRkZWQgb24gMTk5OS0wNC0xMSBpdCB3YXMKKwkgICAgIyB0aG91Z2h0IHRoYXQgaW5mZXJlbmNlcyBydWxlcyB3b3VsZCB3b3JrIGZvcgorCSAgICAjIHN1YmRpcmVjdG9yeSBvYmplY3RzIHRvby4gIExhdGVyLCBvbiAxOTk5LTExLTIyLAorCSAgICAjIGF1dG9tYWtlIHdhcyBjaGFuZ2VkIHRvIG91dHB1dCBleHBsaWNpdCBydWxlcyBldmVuIGZvcgorCSAgICAjIHN1YmRpci1vYmplY3RzLiAgTm9ib2R5IHJlbWVtYmVycyB3aHksIGJ1dCB0aGlzIG9jY3VycmVkCisJICAgICMgc29vbiBhZnRlciB0aGUgbWVyZ2Ugb2YgdGhlIHVzZXItZGVwLWdlbi1icmFuY2ggc28gaXQKKwkgICAgIyBtaWdodCBiZSByZWxhdGVkLiAgSW4gbGF0ZSAyMDAzIHBlb3BsZSBjb21wbGFpbmVkIGFib3V0CisJICAgICMgdGhlIHNpemUgb2YgdGhlIGdlbmVyYXRlZCBNYWtlZmlsZS5pbnMgKGxpYmdjaiwgd2l0aAorCSAgICAjIDIyMDArIHN1YmRpciBvYmplY3RzIHdhcyByZXBvcnRlZCB0byBoYXZlIGEgOU1CCisJICAgICMgTWFrZWZpbGUpLCBzbyB3ZSBub3cgcmVseSBvbiBpbmZlcmVuY2UgcnVsZXMgYWdhaW4uCisJICAgICMgTWF5YmUgd2UnbGwgcnVuIGFjcm9zcyB0aGUgc2FtZSBpc3N1ZSBhcyBpbiB0aGUgcGFzdCwKKwkgICAgIyBidXQgYXQgbGVhc3QgdGhpcyB0aW1lIHdlIGNhbiBkb2N1bWVudCBpdC4gIEhvd2V2ZXIgc2luY2UKKwkgICAgIyBkZXBlbmRlbmN5IHRyYWNraW5nIGhhcyBldm9sdmVkIGl0IGlzIHBvc3NpYmxlIHRoYXQKKwkgICAgIyBvdXIgb2xkIHByb2JsZW0gbm8gbG9uZ2VyIGV4aXN0cy4KKwkgICAgIyBVc2luZyBpbmZlcmVuY2UgcnVsZXMgZm9yIHN1YmRpci1vYmplY3RzIGhhcyBiZWVuIHRlc3RlZAorCSAgICAjIHdpdGggR05VIG1ha2UsIFNvbGFyaXMgbWFrZSwgVWx0cml4IG1ha2UsIEJTRCBtYWtlLAorCSAgICAjIEhQLVVYIG1ha2UsIGFuZCBPU0YxIG1ha2Ugc3VjY2Vzc2Z1bGx5LgorCSAgICBpZiAoJHJlbmFtZWQKKwkJfHwgKCRkaXJlY3RvcnkgbmUgJycgJiYgISBvcHRpb24gJ3N1YmRpci1vYmplY3RzJykKKwkJIyBXZSBtdXN0IGFsc28gdXNlIHNwZWNpZmljIHJ1bGVzIGZvciBhIG5vZGlzdF8gc291cmNlCisJCSMgaWYgaXRzIGxhbmd1YWdlIHJlcXVlc3RzIGl0LgorCQl8fCAoJGxhbmctPm5vZGlzdF9zcGVjaWZpYyAmJiAhICR0cmFuc2Zvcm17J0RJU1RfU09VUkNFJ30pKQorCSAgICB7CisJCW15ICRvYmpfc2Fuc19leHQgPSBzdWJzdHIgKCRvYmplY3QsIDAsCisJCQkJCSAgIC0gbGVuZ3RoICgkdGhpc19vYmpfZXh0KSk7CisJCW15ICRmdWxsX2Fuc2k7CisJCWlmICgkZGlyZWN0b3J5IG5lICcnKQorCSAgICAgICAgICB7CisJCQkkZnVsbF9hbnNpID0gJGRpcmVjdG9yeSAuICcvJyAuICRiYXNlIC4gJGV4dGVuc2lvbjsKKwkgICAgICAgICAgfQorCQllbHNlCisJICAgICAgICAgIHsKKwkJCSRmdWxsX2Fuc2kgPSAkYmFzZSAuICRleHRlbnNpb247CisJICAgICAgICAgIH0KKworCQlpZiAoJGxhbmctPmFuc2kgJiYgb3B0aW9uICdhbnNpMmtucicpCisJCSAgeworCQkgICAgJGZ1bGxfYW5zaSA9fiBzLyRLTk9XTl9FWFRFTlNJT05TX1BBVFRFUk4kL1wkVSQmLzsKKwkJICAgICRvYmpfc2Fuc19leHQgLj0gJyRVJzsKKwkJICB9CisKKwkJbXkgQHNwZWNpZmljcyA9ICgkZnVsbF9hbnNpLCAkb2JqX3NhbnNfZXh0LAorCQkJCSAjIE9ubHkgdXNlICR0aGlzX29ial9leHQgaW4gdGhlIGRlcml2ZWQKKwkJCQkgIyBzb3VyY2UgY2FzZSBiZWNhdXNlIGluIHRoZSBvdGhlciBjYXNlIHdlCisJCQkJICMgKmRvbid0KiB3YW50ICQoT0JKRVhUKSB0byBhcHBlYXIgaGVyZS4KKwkJCQkgKCRkZXJpdmVkX3NvdXJjZSA/ICR0aGlzX29ial9leHQgOiAnLm8nKSwKKwkJCQkgJGV4dGVuc2lvbik7CisKKwkJIyBJZiB3ZSByZW5hbWVkIHRoZSBvYmplY3QgdGhlbiB3ZSB3YW50IHRvIHVzZSB0aGUKKwkJIyBwZXItZXhlY3V0YWJsZSBmbGFnIG5hbWUuICBCdXQgaWYgdGhpcyBpcyBzaW1wbHkgYQorCQkjIHN1YmRpciBidWlsZCB0aGVuIHdlIHN0aWxsIHdhbnQgdG8gdXNlIHRoZSBBTV8gZmxhZworCQkjIG5hbWUuCisJCWlmICgkcmVuYW1lZCkKKwkJICB7CisJCSAgICB1bnNoaWZ0IEBzcGVjaWZpY3MsICRkZXJpdmVkOworCQkgICAgJGFnZ3JlZ2F0ZSA9ICRkZXJpdmVkOworCQkgIH0KKwkJZWxzZQorCQkgIHsKKwkJICAgIHVuc2hpZnQgQHNwZWNpZmljcywgJ0FNJzsKKwkJICB9CisKKwkJIyBFYWNoIGl0ZW0gb24gdGhpcyBsaXN0IGlzIGEgcmVmZXJlbmNlIHRvIGEgbGlzdCBjb25zaXN0aW5nCisJCSMgb2YgZm91ciB2YWx1ZXMgZm9sbG93ZWQgYnkgYWRkaXRpb25hbCB0cmFuc2Zvcm0gZmxhZ3MgZm9yCisJCSMgZmlsZV9jb250ZW50cy4gICBUaGUgZm91ciB2YWx1ZXMgYXJlIHRoZSBkZXJpdmVkIGZsYWcgcHJlZml4CisJCSMgKGUuZy4gZm9yIGBmb29fQ0ZMQUdTJywgaXQgaXMgYGZvbycpLCB0aGUgbmFtZSBvZiB0aGUKKwkJIyBzb3VyY2UgZmlsZSwgdGhlIGJhc2UgbmFtZSBvZiB0aGUgb3V0cHV0IGZpbGUsIGFuZAorCQkjIHRoZSBleHRlbnNpb24gZm9yIHRoZSBvYmplY3QgZmlsZS4KKwkJcHVzaCAoQHskbGFuZ19zcGVjaWZpY19maWxlc3skbGFuZy0+bmFtZX19LAorCQkgICAgICBbQHNwZWNpZmljcywgJXRyYW5zZm9ybV0pOworCSAgICB9CisJfQorCWVsc2lmICgkZXh0ZW5zaW9uIGVxICRub25hbnNpX29iaikKKwl7CisJICAgICMgVGhpcyBpcyBwcm9iYWJseSB0aGUgcmVzdWx0IG9mIGEgZGlyZWN0IHN1ZmZpeCBydWxlLgorCSAgICAjIEluIHRoaXMgY2FzZSB3ZSBqdXN0IGFjY2VwdCB0aGUgcmV3cml0ZS4KKwkgICAgJG9iamVjdCA9ICIkYmFzZSRleHRlbnNpb24iOworCSAgICAkb2JqZWN0ID0gIiRkaXJlY3RvcnkvJG9iamVjdCIgaWYgJGRpcmVjdG9yeSBuZSAnJzsKKwkgICAgJGxpbmtlciA9ICcnOworCX0KKwllbHNlCisJeworCSAgICAjIE5vIGVycm9yIG1lc3NhZ2UgaGVyZS4gIFVzZWQgdG8gaGF2ZSBvbmUsIGJ1dCBpdCB3YXMKKwkgICAgIyB2ZXJ5IHVucG9wdWxhci4KKwkgICAgIyBGSVhNRTogd2UgY291bGQgcG90ZW50aWFsbHkgZG8gbW9yZSBwcm9jZXNzaW5nIGhlcmUsCisJICAgICMgcGVyaGFwcyB0cmVhdGluZyB0aGUgbmV3IGV4dGVuc2lvbiBhcyB0aG91Z2ggaXQgd2VyZSBhCisJICAgICMgbmV3IHNvdXJjZSBleHRlbnNpb24gKGFzIGFib3ZlKS4gIFRoaXMgd291bGQgcmVxdWlyZQorCSAgICAjIG1vcmUgcmVzdHJ1Y3R1cmluZyB0aGFuIGlzIGFwcHJvcHJpYXRlIHJpZ2h0IG5vdy4KKwkgICAgbmV4dDsKKwl9CisKKwllcnJfYW0gIm9iamVjdCBgJG9iamVjdCcgY3JlYXRlZCBieSBgJGZ1bGwnIGFuZCBgJG9iamVjdF9tYXB7JG9iamVjdH0nIgorCSAgaWYgKGRlZmluZWQgJG9iamVjdF9tYXB7JG9iamVjdH0KKwkgICAgICAmJiAkb2JqZWN0X21hcHskb2JqZWN0fSBuZSAkZnVsbCk7CisKKwlteSAkY29tcF92YWwgPSAoKCRvYmplY3QgPX4gL1wubG8kLykKKwkJCT8gQ09NUElMRV9MSUJUT09MIDogQ09NUElMRV9PUkRJTkFSWSk7CisJKG15ICRjb21wX29iaiA9ICRvYmplY3QpID1+IHMvXC5sbyQvLlwkKE9CSkVYVCkvOworCWlmIChkZWZpbmVkICRvYmplY3RfY29tcGlsYXRpb25fbWFweyRjb21wX29ian0KKwkgICAgJiYgJG9iamVjdF9jb21waWxhdGlvbl9tYXB7JGNvbXBfb2JqfSAhPSAwCisJICAgICMgT25seSBzZWUgdGhlIGVycm9yIG9uY2UuCisJICAgICYmICgkb2JqZWN0X2NvbXBpbGF0aW9uX21hcHskY29tcF9vYmp9CisJCSE9IChDT01QSUxFX0xJQlRPT0wgfCBDT01QSUxFX09SRElOQVJZKSkKKwkgICAgJiYgJG9iamVjdF9jb21waWxhdGlvbl9tYXB7JGNvbXBfb2JqfSAhPSAkY29tcF92YWwpCisJICB7CisJICAgIGVycl9hbSAib2JqZWN0IGAkY29tcF9vYmonIGNyZWF0ZWQgYm90aCB3aXRoIGxpYnRvb2wgYW5kIHdpdGhvdXQiOworCSAgfQorCSRvYmplY3RfY29tcGlsYXRpb25fbWFweyRjb21wX29ian0gfD0gJGNvbXBfdmFsOworCisJaWYgKGRlZmluZWQgJGxhbmcpCisJeworCSAgICAjIExldCB0aGUgbGFuZ3VhZ2UgZG8gc29tZSBzcGVjaWFsIG1hZ2ljIGlmIHJlcXVpcmVkLgorCSAgICAkbGFuZy0+dGFyZ2V0X2hvb2sgKCRhZ2dyZWdhdGUsICRvYmplY3QsICRmdWxsLCAldHJhbnNmb3JtKTsKKwl9CisKKwlpZiAoJGRlcml2ZWRfc291cmNlKQorCSAgeworCSAgICBwcm9nX2Vycm9yICgkbGFuZy0+bmFtZSAuICIgaGFzIGF1dG9tYXRpYyBkZXBlbmRlbmN5IHRyYWNraW5nIikKKwkgICAgICBpZiAkbGFuZy0+YXV0b2RlcCBuZSAnbm8nOworCSAgICAjIE1ha2Ugc3VyZSB0aGlzIG5ldyBzb3VyY2UgZmlsZSBpcyBoYW5kbGVkIG5leHQuICBUaGF0IHdpbGwKKwkgICAgIyBtYWtlIGl0IGFwcGVhciB0byBiZSBhdCB0aGUgcmlnaHQgcGxhY2UgaW4gdGhlIGxpc3QuCisJICAgIHVuc2hpZnQgKEBmaWxlcywgJG9iamVjdCk7CisJICAgICMgRGlzdHJpYnV0ZSBkZXJpdmVkIHNvdXJjZXMgdW5sZXNzIHRoZSBzb3VyY2UgdGhleSBhcmUKKwkgICAgIyBkZXJpdmVkIGZyb20gaXMgbm90LgorCSAgICAmcHVzaF9kaXN0X2NvbW1vbiAoJG9iamVjdCkKKwkgICAgICB1bmxlc3MgKCR0b3BwYXJlbnQgPX4gL14oPzpub2Jhc2VfKT9ub2Rpc3RfLyk7CisJICAgIG5leHQ7CisJICB9CisKKwkkbGlua2Vyc191c2VkeyRsaW5rZXJ9ID0gMTsKKworCXB1c2ggKEByZXN1bHQsICRvYmplY3QpOworCisJaWYgKCEgZGVmaW5lZCAkb2JqZWN0X21hcHskb2JqZWN0fSkKKwl7CisJICAgIG15IEBkZXBfbGlzdCA9ICgpOworCSAgICAkb2JqZWN0X21hcHskb2JqZWN0fSA9ICRmdWxsOworCisJICAgICMgSWYgcmVzdWx0aW5nIG9iamVjdCBpcyBpbiBzdWJkaXIsIHdlIG5lZWQgdG8gbWFrZQorCSAgICAjIHN1cmUgdGhlIHN1YmRpciBleGlzdHMgYXQgYnVpbGQgdGltZS4KKwkgICAgaWYgKCRvYmplY3QgPX4gL1wvLykKKwkgICAgeworCQkjIEZJWE1FOiBjaGVjayB0aGF0ICRESVJFQ1RPUlkgaXMgc29tZXdoZXJlIGluIHRoZQorCQkjIHByb2plY3QKKworCQkjIEZvciBKYXZhLCB0aGUgd2F5IHdlJ3JlIGhhbmRsaW5nIGl0IHJpZ2h0IG5vdywgYQorCQkjIGAuLicgY29tcG9uZW50IGRvZXNuJ3QgbWFrZSBzZW5zZS4KKwkJaWYgKCRsYW5nICYmICRsYW5nLT5uYW1lIGVxICdqYXZhJyAmJiAkb2JqZWN0ID1+IC8oXC98XilcLlwuXC8vKQorCQkgIHsKKwkJICAgIGVycl9hbSAiYCRmdWxsJyBzaG91bGQgbm90IGNvbnRhaW4gYSBgLi4nIGNvbXBvbmVudCI7CisJCSAgfQorCisJCSMgTWFrZSBzdXJlIG9iamVjdCBpcyByZW1vdmVkIGJ5IGBtYWtlIG1vc3RseWNsZWFuJy4KKwkJJGNvbXBpbGVfY2xlYW5fZmlsZXN7JG9iamVjdH0gPSBNT1NUTFlfQ0xFQU47CisJCSMgSWYgd2UgaGF2ZSBhIGxpYnRvb2wgb2JqZWN0IHRoZW4gd2UgYWxzbyBtdXN0IHJlbW92ZQorCQkjIHRoZSBvcmRpbmFyeSAuby4KKwkJaWYgKCRvYmplY3QgPX4gL1wubG8kLykKKwkJeworCQkgICAgKG15ICR4b2JqID0gJG9iamVjdCkgPX4gcyxsbyQsXCQoT0JKRVhUKSw7CisJCSAgICAkY29tcGlsZV9jbGVhbl9maWxlc3skeG9ian0gPSBNT1NUTFlfQ0xFQU47CisKKwkJICAgICMgUmVtb3ZlIGFueSBsaWJ0b29sIG9iamVjdCBpbiB0aGlzIGRpcmVjdG9yeS4KKwkJICAgICRsaWJ0b29sX2NsZWFuX2RpcmVjdG9yaWVzeyRkaXJlY3Rvcnl9ID0gMTsKKwkJfQorCisJCXB1c2ggKEBkZXBfbGlzdCwgcmVxdWlyZV9idWlsZF9kaXJlY3RvcnkgKCRkaXJlY3RvcnkpKTsKKworCQkjIElmIHdlJ3JlIGdlbmVyYXRpbmcgZGVwZW5kZW5jaWVzLCB3ZSBhbHNvIHdhbnQKKwkJIyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYXBwcm9wcmlhdGUgc3ViZGlyIG9mIHRoZQorCQkjIC5kZXBzIGRpcmVjdG9yeSBpcyBjcmVhdGVkLgorCQlwdXNoIChAZGVwX2xpc3QsCisJCSAgICAgIHJlcXVpcmVfYnVpbGRfZGlyZWN0b3J5ICgkZGlyZWN0b3J5IC4gJy8kKERFUERJUiknKSkKKwkJICB1bmxlc3Mgb3B0aW9uICduby1kZXBlbmRlbmNpZXMnOworCSAgICB9CisKKwkgICAgJnByZXR0eV9wcmludF9ydWxlICgkb2JqZWN0IC4gJzonLCAiXHQiLCBAZGVwX2xpc3QpCisJCWlmIHNjYWxhciBAZGVwX2xpc3QgPiAwOworCX0KKworCSMgVHJhbnNmb3JtIC5vIG9yICRvIGZpbGUgaW50byAuUCBmaWxlIChmb3IgYXV0b21hdGljCisJIyBkZXBlbmRlbmN5IGNvZGUpLgorCWlmICgkbGFuZyAmJiAkbGFuZy0+YXV0b2RlcCBuZSAnbm8nKQorCXsKKwkgICAgbXkgJGRlcGZpbGUgPSAkb2JqZWN0OworCSAgICAkZGVwZmlsZSA9fiBzL1wuKFteLl0qKSQvLlAkMS87CisJICAgICRkZXBmaWxlID1+IHMvXCRcKE9CSkVYVFwpJC9vLzsKKwkgICAgJGRlcF9maWxlc3tkaXJuYW1lICgkZGVwZmlsZSkgLiAnLyQoREVQRElSKS8nCisJCQkgLiBiYXNlbmFtZSAoJGRlcGZpbGUpfSA9IDE7CisJfQorICAgIH0KKworICAgIHJldHVybiBAcmVzdWx0OworfQorCisKKyMgJExJTktFUgorIyBkZWZpbmVfb2JqZWN0c19mcm9tX3NvdXJjZXMgKCRWQVIsICRPQkpWQVIsICROT0RFRklORSwgJE9ORV9GSUxFLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRPQkosICRQQVJFTlQsICRUT1BQQVJFTlQsICRXSEVSRSwgJVRSQU5TRk9STSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBhbiBfT0JKRUNUUyB2YXJpYWJsZSBmb3IgYSBfU09VUkNFUyB2YXJpYWJsZSAob3Igc3VidmFyaWFibGUpCisjCisjIEFyZ3VtZW50cyBhcmU6CisjICAgJFZBUiBpcyB0aGUgbmFtZSBvZiB0aGUgX1NPVVJDRVMgdmFyaWFibGUKKyMgICAkT0JKVkFSIGlzIHRoZSBuYW1lIG9mIHRoZSBfT0JKRUNUUyB2YXJpYWJsZSBpZiBrbm93biAob3RoZXJ3aXNlCisjICAgICBpdCB3aWxsIGJlIGdlbmVyYXRlZCBhbmQgcmV0dXJuZWQpLgorIyAgICROT0RFRklORSBpcyBhIGJvb2xlYW46IGlmIHRydWUsICRPQkpWQVIgd2lsbCBub3QgYmUgZGVmaW5lZCAoYnV0CisjICAgICB3b3JrIGRvbmUgdG8gZGV0ZXJtaW5lIHRoZSBsaW5rZXIgd2lsbCBiZSkuCisjICAgJE9ORV9GSUxFIGlzIHRoZSBjYW5vbmljYWwgKHRyYW5zZm9ybWVkKSBuYW1lIG9mIG9iamVjdCB0byBidWlsZAorIyAgICRPQkogaXMgdGhlIG9iamVjdCBleHRlbnNpb24gKGkuZS4gZWl0aGVyIGAubycgb3IgYC5sbycpLgorIyAgICRUT1BQQVJFTlQgaXMgdGhlIF9TT1VSQ0VTIHZhcmlhYmxlIGJlaW5nIHByb2Nlc3NlZC4KKyMgICAkV0hFUkUgY29udGV4dCBpbnRvIHdoaWNoIHRoaXMgZGVmaW5pdGlvbiBpcyBkb25lCisjICAgJVRSQU5TRk9STSBleHRyYSBhcmd1bWVudHMgdG8gcGFzcyB0byBmaWxlX2NvbnRlbnRzIHdoZW4gcHJvZHVjaW5nCisjICAgICBydWxlcworIworIyBSZXN1bHQgaXMgYSBwYWlyICgkTElOS0VSLCAkT0JKVkFSKToKKyMgICAgJExJTktFUiBpcyBhIGJvb2xlYW4sIHRydWUgaWYgYSBsaW5rZXIgaXMgbmVlZGVkIHRvIGRlYWwgd2l0aCB0aGUgb2JqZWN0cworc3ViIGRlZmluZV9vYmplY3RzX2Zyb21fc291cmNlcyAoJCQkJCQkJCUpCit7CisgIG15ICgkdmFyLCAkb2JqdmFyLCAkbm9kZWZpbmUsICRvbmVfZmlsZSwKKyAgICAgICRvYmosICR0b3BwYXJlbnQsICR3aGVyZSwgJXRyYW5zZm9ybSkgPSBAXzsKKworICBteSAkbmVlZGxpbmtlciA9ICIiOworCisgIHRyYW5zZm9ybV92YXJpYWJsZV9yZWN1cnNpdmVseQorICAgICgkdmFyLCAkb2JqdmFyLCAnYW1fX29iamVjdHMnLCAkbm9kZWZpbmUsICR3aGVyZSwKKyAgICAgIyBUaGUgdHJhbnNmb3JtIGNvZGUgdG8gcnVuIG9uIGVhY2ggZmlsZW5hbWUuCisgICAgIHN1YiB7CisgICAgICAgbXkgKCRzdWJ2YXIsICR2YWwsICRjb25kLCAkZnVsbF9jb25kKSA9IEBfOworICAgICAgIG15IEB0cmFucyA9IGhhbmRsZV9zaW5nbGVfdHJhbnNmb3JtICgkc3VidmFyLCAkdG9wcGFyZW50LAorCQkJCQkgICAgJG9uZV9maWxlLCAkb2JqLCAkdmFsLAorCQkJCQkgICAgJXRyYW5zZm9ybSk7CisgICAgICAgJG5lZWRsaW5rZXIgPSAidHJ1ZSIgaWYgQHRyYW5zOworICAgICAgIHJldHVybiBAdHJhbnM7CisgICAgIH0pOworCisgIHJldHVybiAkbmVlZGxpbmtlcjsKK30KKworCisjIGhhbmRsZV9zb3VyY2VfdHJhbnNmb3JtICgkQ0FOT05fVEFSR0VULCAkVEFSR0VULCAkT0JKRVhULCAkV0hFUkUsICVUUkFOU0ZPUk0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEhhbmRsZSBTT1VSQ0UtPk9CSkVDVCB0cmFuc2Zvcm0gZm9yIG9uZSBwcm9ncmFtIG9yIGxpYnJhcnkuCisjIEFyZ3VtZW50cyBhcmU6CisjICAgY2Fub25pY2FsICh0cmFuc2Zvcm1lZCkgbmFtZSBvZiB0YXJnZXQgdG8gYnVpbGQKKyMgICBhY3R1YWwgdGFyZ2V0IG9mIG9iamVjdCB0byBidWlsZAorIyAgIG9iamVjdCBleHRlbnNpb24gKGkuZS4sIGVpdGhlciBgLm8nIG9yIGAkbycpCisjICAgbG9jYXRpb24gb2YgdGhlIHNvdXJjZSB2YXJpYWJsZQorIyAgIGV4dHJhIGFyZ3VtZW50cyB0byBwYXNzIHRvIGZpbGVfY29udGVudHMgd2hlbiBwcm9kdWNpbmcgcnVsZXMKKyMgUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBsaW5rZXIgdmFyaWFibGUgdGhhdCBtdXN0IGJlIHVzZWQuCisjIEVtcHR5IHJldHVybiBtZWFucyBqdXN0IHVzZSBgTElOSycuCitzdWIgaGFuZGxlX3NvdXJjZV90cmFuc2Zvcm0gKCQkJCQlKQoreworICAgICMgb25lX2ZpbGUgaXMgY2Fub25pY2FsIG5hbWUuICB1bnhmb3JtZWQgaXMgZ2l2ZW4gbmFtZS4gIG9iaiBpcworICAgICMgb2JqZWN0IGV4dGVuc2lvbi4KKyAgICBteSAoJG9uZV9maWxlLCAkdW54Zm9ybWVkLCAkb2JqLCAkd2hlcmUsICV0cmFuc2Zvcm0pID0gQF87CisKKyAgICBteSAkbGlua2VyID0gJyc7CisKKyAgICAjIE5vIHBvaW50IGluIGNvbnRpbnVpbmcgaWYgX09CSkVDVFMgaXMgZGVmaW5lZC4KKyAgICByZXR1cm4gaWYgcmVqZWN0X3ZhciAoJG9uZV9maWxlIC4gJ19PQkpFQ1RTJywKKwkJCSAgJG9uZV9maWxlIC4gJ19PQkpFQ1RTIHNob3VsZCBub3QgYmUgZGVmaW5lZCcpOworCisgICAgbXkgJXVzZWRfcGZ4ID0gKCk7CisgICAgbXkgJG5lZWRsaW5rZXI7CisgICAgJWxpbmtlcnNfdXNlZCA9ICgpOworICAgIGZvcmVhY2ggbXkgJHByZWZpeCAoJycsICdFWFRSQV8nLCAnZGlzdF8nLCAnbm9kaXN0XycsCisJCQknZGlzdF9FWFRSQV8nLCAnbm9kaXN0X0VYVFJBXycpCisgICAgeworCW15ICR2YXJuYW1lID0gJHByZWZpeCAuICRvbmVfZmlsZSAuICJfU09VUkNFUyI7CisJbXkgJHZhciA9IHZhciAkdmFybmFtZTsKKwluZXh0IHVubGVzcyAkdmFyOworCisJIyBXZSBhcmUgZ29pbmcgdG8gZGVmaW5lIF9PQkpFQ1RTIHZhcmlhYmxlcyB1c2luZyB0aGUgcHJlZml4LgorCSMgVGhlbiB3ZSBnbG9tIHRoZW0gYWxsIHRvZ2V0aGVyLiAgU28gd2UgY2FuJ3QgdXNlIHRoZSBudWxsCisJIyBwcmVmaXggaGVyZSBhcyB3ZSBuZWVkIGl0IGxhdGVyLgorCW15ICR4cGZ4ID0gKCRwcmVmaXggZXEgJycpID8gJ2FtXycgOiAkcHJlZml4OworCisJIyBLZWVwIHRyYWNrIG9mIHdoaWNoIHByZWZpeGVzIHdlIHNhdy4KKwkkdXNlZF9wZnh7JHhwZnh9ID0gMQorCSAgdW5sZXNzICRwcmVmaXggPX4gL0VYVFJBXy87CisKKwlwdXNoIEBzb3VyY2VzLCAiXCQoJHZhcm5hbWUpIjsKKwlwdXNoIEBkaXN0X3NvdXJjZXMsIHNoYWRvd191bmNvbmRpdGlvbmFsbHkgKCR2YXJuYW1lLCAkd2hlcmUpCisJICB1bmxlc3MgKG9wdGlvbiAoJ25vLWRpc3QnKSB8fCAkcHJlZml4ID1+IC9ebm9kaXN0Xy8pOworCisJJG5lZWRsaW5rZXIgfD0KKwkgICAgZGVmaW5lX29iamVjdHNfZnJvbV9zb3VyY2VzICgkdmFybmFtZSwKKwkJCQkJICR4cGZ4IC4gJG9uZV9maWxlIC4gJ19PQkpFQ1RTJywKKwkJCQkJICRwcmVmaXggPX4gL0VYVFJBXy8sCisJCQkJCSAkb25lX2ZpbGUsICRvYmosICR2YXJuYW1lLCAkd2hlcmUsCisJCQkJCSBESVNUX1NPVVJDRSA9PiAoJHByZWZpeCAhfiAvXm5vZGlzdF8vKSwKKwkJCQkJICV0cmFuc2Zvcm0pOworICAgIH0KKyAgICBpZiAoJG5lZWRsaW5rZXIpCisgICAgeworCSRsaW5rZXIgfHw9ICZyZXNvbHZlX2xpbmtlciAoJWxpbmtlcnNfdXNlZCk7CisgICAgfQorCisgICAgbXkgQGtleXMgPSBzb3J0IGtleXMgJXVzZWRfcGZ4OworICAgIGlmIChzY2FsYXIgQGtleXMgPT0gMCkKKyAgICB7CisJIyBUaGUgZGVmYXVsdCBzb3VyY2UgZm9yIGxpYmZvby5sYSBpcyBsaWJmb28uYywgYnV0IGZvcgorCSMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3ZSBmaXJzdCBsb29rIGF0IGxpYmZvb19sYS5jLAorCSMgaWYgbm8gZGVmYXVsdCBzb3VyY2Ugc3VmZml4IGlzIGdpdmVuLgorCW15ICRvbGRfZGVmYXVsdF9zb3VyY2UgPSAiJG9uZV9maWxlLmMiOworCW15ICRleHRfdmFyID0gdmFyICgnQU1fREVGQVVMVF9TT1VSQ0VfRVhUJyk7CisJbXkgJGRlZmF1bHRfc291cmNlX2V4dCA9ICRleHRfdmFyID8gdmFyaWFibGVfdmFsdWUgKCRleHRfdmFyKSA6ICcuYyc7CisJbXNnX3ZhciAoJ3Vuc3VwcG9ydGVkJywgJGV4dF92YXIsICRleHRfdmFyLT5uYW1lIC4gIiBjYW4gYXNzdW1lIGF0IG1vc3Qgb25lIHZhbHVlIikKKwkgIGlmICRkZWZhdWx0X3NvdXJjZV9leHQgPX4gL1tcdCBdLzsKKwkobXkgJGRlZmF1bHRfc291cmNlID0gJHVueGZvcm1lZCkgPX4gcywoXC5bXi4vXFxdKik/JCwkZGVmYXVsdF9zb3VyY2VfZXh0LDsKKwlpZiAoJG9sZF9kZWZhdWx0X3NvdXJjZSBuZSAkZGVmYXVsdF9zb3VyY2UKKwkgICAgJiYgISRleHRfdmFyCisJICAgICYmIChydWxlICRvbGRfZGVmYXVsdF9zb3VyY2UKKwkJfHwgcnVsZSAnJChzcmNkaXIpLycgLiAkb2xkX2RlZmF1bHRfc291cmNlCisJCXx8IHJ1bGUgJyR7c3JjZGlyfS8nIC4gJG9sZF9kZWZhdWx0X3NvdXJjZQorCQl8fCAtZiAkb2xkX2RlZmF1bHRfc291cmNlKSkKKwkgIHsKKwkgICAgbXkgJGxvYyA9ICR3aGVyZS0+Y2xvbmU7CisJICAgICRsb2MtPnBvcF9jb250ZXh0OworCSAgICBtc2cgKCdvYnNvbGV0ZScsICRsb2MsCisJCSAidGhlIGRlZmF1bHQgc291cmNlIGZvciBgJHVueGZvcm1lZCcgaGFzIGJlZW4gY2hhbmdlZCAiCisJCSAuICJ0byBgJGRlZmF1bHRfc291cmNlJy5cbihVc2luZyBgJG9sZF9kZWZhdWx0X3NvdXJjZScgZm9yICIKKwkJIC4gImJhY2t3YXJkIGNvbXBhdGliaWxpdHkuKSIpOworCSAgICAkZGVmYXVsdF9zb3VyY2UgPSAkb2xkX2RlZmF1bHRfc291cmNlOworCSAgfQorCSMgSWYgYSBydWxlIGV4aXN0cyB0byBidWlsZCB0aGlzIHNvdXJjZSB3aXRoIGEgJChzcmNkaXIpCisJIyBwcmVmaXgsIHVzZSB0aGF0IHByZWZpeCBpbiBvdXIgdmFyaWFibGVzIHRvby4gIFRoaXMgaXMgZm9yCisJIyB0aGUgc2FrZSBvZiBCU0QgTWFrZS4KKwlpZiAocnVsZSAnJChzcmNkaXIpLycgLiAkZGVmYXVsdF9zb3VyY2UKKwkgICAgfHwgcnVsZSAnJHtzcmNkaXJ9LycgLiAkZGVmYXVsdF9zb3VyY2UpCisJICB7CisJICAgICRkZWZhdWx0X3NvdXJjZSA9ICckKHNyY2RpcikvJyAuICRkZWZhdWx0X3NvdXJjZTsKKwkgIH0KKworCSZkZWZpbmVfdmFyaWFibGUgKCRvbmVfZmlsZSAuICJfU09VUkNFUyIsICRkZWZhdWx0X3NvdXJjZSwgJHdoZXJlKTsKKwlwdXNoIChAc291cmNlcywgJGRlZmF1bHRfc291cmNlKTsKKwlwdXNoIChAZGlzdF9zb3VyY2VzLCAkZGVmYXVsdF9zb3VyY2UpOworCisJJWxpbmtlcnNfdXNlZCA9ICgpOworCW15IChAcmVzdWx0KSA9CisJICBoYW5kbGVfc2luZ2xlX3RyYW5zZm9ybSAoJG9uZV9maWxlIC4gJ19TT1VSQ0VTJywKKwkJCQkgICAkb25lX2ZpbGUgLiAnX1NPVVJDRVMnLAorCQkJCSAgICRvbmVfZmlsZSwgJG9iaiwKKwkJCQkgICAkZGVmYXVsdF9zb3VyY2UsICV0cmFuc2Zvcm0pOworCSRsaW5rZXIgfHw9ICZyZXNvbHZlX2xpbmtlciAoJWxpbmtlcnNfdXNlZCk7CisJZGVmaW5lX3ByZXR0eV92YXJpYWJsZSAoJG9uZV9maWxlIC4gJ19PQkpFQ1RTJywgVFJVRSwgJHdoZXJlLCBAcmVzdWx0KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlAa2V5cyA9IG1hcCB7ICckKCcgLiAkXyAuICRvbmVfZmlsZSAuICdfT0JKRUNUUyknIH0gQGtleXM7CisJZGVmaW5lX3ByZXR0eV92YXJpYWJsZSAoJG9uZV9maWxlIC4gJ19PQkpFQ1RTJywgVFJVRSwgJHdoZXJlLCBAa2V5cyk7CisgICAgfQorCisgICAgIyBJZiB3ZSB3YW50IHRvIHVzZSBgTElOSycgd2UgbXVzdCBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZC4KKyAgICBpZiAoJGxpbmtlciBlcSAnJykKKyAgICB7CisJJG5lZWRfbGluayA9IDE7CisgICAgfQorCisgICAgcmV0dXJuICRsaW5rZXI7Cit9CisKKworIyBoYW5kbGVfbGliX29iamVjdHMgKCRYTkFNRSwgJFZBUikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNwZWNpYWwtY2FzZSBBTExPQ0EgYW5kIExJQk9CSlMgc3Vic3RpdHV0aW9ucyBpbiBfTERBREQgb3IgX0xJQkFERCB2YXJpYWJsZXMuCisjIEFsc28sIGdlbmVyYXRlIF9ERVBFTkRFTkNJRVMgdmFyaWFibGUgaWYgYXBwcm9wcmlhdGUuCisjIEFyZ3VtZW50cyBhcmU6CisjICAgdHJhbnNmb3JtZWQgbmFtZSBvZiBvYmplY3QgYmVpbmcgYnVpbHQsIG9yIGVtcHR5IHN0cmluZyBpZiBubyBvYmplY3QKKyMgICBuYW1lIG9mIF9MREFERC9fTElCQURELXR5cGUgdmFyaWFibGUgdG8gZXhhbWluZQorIyBSZXR1cm5zIDEgaWYgTElCT0JKUyBzZWVuLCAwIG90aGVyd2lzZS4KK3N1YiBoYW5kbGVfbGliX29iamVjdHMKK3sKKyAgbXkgKCR4bmFtZSwgJHZhcm5hbWUpID0gQF87CisKKyAgbXkgJHZhciA9IHZhciAoJHZhcm5hbWUpOworICBwcm9nX2Vycm9yICJoYW5kbGVfbGliX29iamVjdHM6IGAkdmFybmFtZScgdW5kZWZpbmVkIgorICAgIHVubGVzcyAkdmFyOworICBwcm9nX2Vycm9yICJoYW5kbGVfbGliX29iamVjdHM6IHVuZXhwZWN0ZWQgdmFyaWFibGUgbmFtZSBgJHZhcm5hbWUnIgorICAgIHVubGVzcyAkdmFybmFtZSA9fiAvXiguKikoPzpMSUJ8TEQpQUREJC87CisgIG15ICRwcmVmaXggPSAkMSB8fCAnQU1fJzsKKworICBteSAkc2Vlbl9saWJvYmpzID0gMDsKKyAgbXkgJGZsYWd2YXIgPSAwOworCisgIHRyYW5zZm9ybV92YXJpYWJsZV9yZWN1cnNpdmVseQorICAgICgkdmFybmFtZSwgJHhuYW1lIC4gJ19ERVBFTkRFTkNJRVMnLCAnYW1fX0RFUEVOREVOQ0lFUycsCisgICAgICEgJHhuYW1lLCBJTlRFUk5BTCwKKyAgICAgIyBUcmFuc2Zvcm1hdGlvbiBmdW5jdGlvbiwgcnVuIG9uIGVhY2ggZmlsZW5hbWUuCisgICAgIHN1YiB7CisgICAgICAgbXkgKCRzdWJ2YXIsICR2YWwsICRjb25kLCAkZnVsbF9jb25kKSA9IEBfOworCisgICAgICAgaWYgKCR2YWwgPX4gL14tLykKKwkgeworCSAgICMgU2tpcCAtbGZvbyBhbmQgLUxkaXIgc2lsZW50bHk7IHRoZXNlIGFyZSBleHBsaWNpdGx5IGFsbG93ZWQuCisJICAgaWYgKCR2YWwgIX4gL14tW2xMXS8gJiYKKwkgICAgICAgIyBTa2lwIC1kbG9wZW4gYW5kIC1kbHByZW9wZW47IHRoZXNlIGFyZSBleHBsaWNpdGx5IGFsbG93ZWQKKwkgICAgICAgIyBmb3IgTGlidG9vbCBsaWJyYXJpZXMgb3IgcHJvZ3JhbXMuICAoQWN0dWFsbHkgd2UgYXJlIGEgYml0CisJICAgICAgICMgbGF4ZSBoZXJlIHNpbmNlIHRoaXMgY29kZSBhbHNvIGFwcGxpZXMgdG8gbm9uLWxpYnRvb2wKKwkgICAgICAgIyBsaWJyYXJpZXMgb3IgcHJvZ3JhbXMsIGZvciB3aGljaCAtZGxvcGVuIGFuZCAtZGxvcHJlb3BlbgorCSAgICAgICAjIGFyZSBwdXJlIG5vbnNlbnNlLiAgRGlhZ25vc2luZyB0aGlzIGRvZXNuJ3Qgc2VlbSB2ZXJ5CisJICAgICAgICMgaW1wb3J0YW50OiB0aGUgZGV2ZWxvcGVyIHdpbGwgcXVpY2tseSBnZXQgY29tcGxhaW50cyBmcm9tCisJICAgICAgICMgdGhlIGxpbmtlci4pCisJICAgICAgICR2YWwgIX4gL14tZGwoPzpwcmUpP29wZW4kLyAmJgorCSAgICAgICAjIE9ubHkgZ2V0IHRoaXMgZXJyb3Igb25jZS4KKwkgICAgICAgISAkZmxhZ3ZhcikKKwkgICAgIHsKKwkgICAgICAgJGZsYWd2YXIgPSAxOworCSAgICAgICAjIEZJWE1FOiBzaG91bGQgZGlzcGxheSBhIHN0YWNrIG9mIG5lc3RlZCB2YXJpYWJsZXMKKwkgICAgICAgIyBhcyBjb250ZXh0IHdoZW4gJHZhciAhPSAkc3VidmFyLgorCSAgICAgICBlcnJfdmFyICgkdmFyLCAibGlua2VyIGZsYWdzIHN1Y2ggYXMgYCR2YWwnIGJlbG9uZyBpbiAiCisJCQkuICJgJHtwcmVmaXh9TERGTEFHUyIpOworCSAgICAgfQorCSAgIHJldHVybiAoKTsKKwkgfQorICAgICAgIGVsc2lmICgkdmFsICF+IC9eXEAuKlxAJC8pCisJIHsKKwkgICAjIEFzc3VtZSB3ZSBoYXZlIGEgZmlsZSBvZiBzb21lIHNvcnQsIGFuZCBvdXRwdXQgaXQgaW50byB0aGUKKwkgICAjIGRlcGVuZGVuY3kgdmFyaWFibGUuICBBdXRvY29uZiBzdWJzdGl0dXRpb25zIGFyZSBub3Qgb3V0cHV0OworCSAgICMgcmFyZWx5IGlzIGEgbmV3IGRlcGVuZGVuY3kgc3Vic3RpdHV0ZWQgaW50byBlLmcuIGZvb19MREFERAorCSAgICMgLS0gYnV0IGJhZCB0aGluZ3MgKGUuZy4gLWxYMTEpIGFyZSByb3V0aW5lbHkgc3Vic3RpdHV0ZWQuCisJICAgIyBOb3RlIHRoYXQgTElCT0JKUyBhbmQgQUxMT0NBIGFyZSBleGNlcHRpb25zIHRvIHRoaXMgcnVsZSwKKwkgICAjIGFuZCBoYW5kbGVkIHNwZWNpYWxseSBiZWxvdy4KKwkgICByZXR1cm4gJHZhbDsKKwkgfQorICAgICAgIGVsc2lmICgkdmFsID1+IC9eXEAoTFQpP0xJQk9CSlNcQCQvKQorCSB7CisJICAgaGFuZGxlX0xJQk9CSlMgKCRzdWJ2YXIsICRjb25kLCAkMSk7CisJICAgJHNlZW5fbGlib2JqcyA9IDE7CisJICAgcmV0dXJuICR2YWw7CisJIH0KKyAgICAgICBlbHNpZiAoJHZhbCA9fiAvXlxAKExUKT9BTExPQ0FcQCQvKQorCSB7CisJICAgaGFuZGxlX0FMTE9DQSAoJHN1YnZhciwgJGNvbmQsICQxKTsKKwkgICByZXR1cm4gJHZhbDsKKwkgfQorICAgICAgIGVsc2UKKwkgeworCSAgIHJldHVybiAoKTsKKwkgfQorICAgICB9KTsKKworICByZXR1cm4gJHNlZW5fbGlib2JqczsKK30KKworIyBoYW5kbGVfTElCT0JKU19vcl9BTExPQ0EgKCRWQVIpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5pdGlvbnMgY29tbW9uIHRvIExJQk9CSlMgYW5kIEFMTE9DQS4KKyMgVkFSIHNob3VsZCBiZSBvbmUgb2YgTElCT0JKUywgTFRMSUJPQkpTLCBBTExPQ0EsIG9yIExUQUxMT0NBLgorc3ViIGhhbmRsZV9MSUJPQkpTX29yX0FMTE9DQSAoJCkKK3sKKyAgbXkgKCR2YXIpID0gQF87CisKKyAgbXkgJGRpciA9ICcnOworCisgICMgSWYgTElCT0JKUyBmaWxlcyBtdXN0IGJlIGJ1aWx0IGluIGFub3RoZXIgZGlyZWN0b3J5IHdlIGhhdmUKKyAgIyB0byBkZWZpbmUgTElCT0JKRElSIGFuZCBlbnN1cmUgdGhlIGZpbGVzIGdldCBjbGVhbmVkLgorICAjIE90aGVyd2lzZSBMSUJPQkpESVIgY2FuIGJlIGxlZnQgdW5kZWZpbmVkLCBhbmQgdGhlIGNsZWFuaW5nCisgICMgaXMgYWNoaWV2ZWQgYnkgYHJtIC1mICouJChPQkpFWFQpJyBpbiBjb21waWxlLmFtLgorICBpZiAoJGNvbmZpZ19saWJvYmpfZGlyCisgICAgICAmJiAkcmVsYXRpdmVfZGlyIG5lICRjb25maWdfbGlib2JqX2RpcikKKyAgICB7CisgICAgICBpZiAob3B0aW9uICdzdWJkaXItb2JqZWN0cycpCisJeworCSAgIyBJbiB0aGUgdG9wLWxldmVsIE1ha2VmaWxlIHdlIGRvIG5vdCB1c2UgJCh0b3BfYnVpbGRkaXIpLCBiZWNhdXNlCisJICAjIHdlIGFyZSBhbHJlYWR5IHRoZXJlLCBhbmQgc2luY2UgdGhlIHRhcmdldHMgYXJlIGJ1aWx0IHdpdGhvdXQKKwkgICMgYSAkKHRvcF9idWlsZGRpciksIGl0IGhlbHBzIEJTRCBNYWtlIHRvIG1hdGNoIHRoZW0gd2l0aAorCSAgIyBkZXBlbmRlbmNpZXMuCisJICAkZGlyID0gIiRjb25maWdfbGlib2JqX2Rpci8iIGlmICRjb25maWdfbGlib2JqX2RpciBuZSAnLic7CisJICAkZGlyID0gIiR0b3BzcmNkaXIvJGRpciIgaWYgJHJlbGF0aXZlX2RpciBuZSAnLic7CisJICBkZWZpbmVfdmFyaWFibGUgKCdMSUJPQkpESVInLCAiJGRpciIsIElOVEVSTkFMKTsKKwkgICRjbGVhbl9maWxlc3siXCQoJHZhcikifSA9IE1PU1RMWV9DTEVBTjsKKwkgICMgSWYgTFRMSUJPQkpTIGlzIHVzZWQsIHdlIG11c3QgYWxzbyBjbGVhciBMSUJPQkpTICh3aGljaCBtaWdodAorCSAgIyBiZSBjcmVhdGVkIGJ5IGxpYnRvb2wgYXMgYSBzaWRlLWVmZmVjdCBvZiBjcmVhdGluZyBMVExJQk9CSlMpLgorCSAgJGNsZWFuX2ZpbGVzeyJcJCgkdmFyKSJ9ID0gTU9TVExZX0NMRUFOIGlmICR2YXIgPX4gcy9eTFQvLzsKKwl9CisgICAgICBlbHNlCisJeworCSAgZXJyb3IgKCJgXCQoJHZhciknIGNhbm5vdCBiZSB1c2VkIG91dHNpZGUgYCRjb25maWdfbGlib2JqX2RpcicgaWYiCisJCSAuICIgYHN1YmRpci1vYmplY3RzJyBpcyBub3Qgc2V0Iik7CisJfQorICAgIH0KKworICByZXR1cm4gJGRpcjsKK30KKworc3ViIGhhbmRsZV9MSUJPQkpTICgkJCQpCit7CisgIG15ICgkdmFyLCAkY29uZCwgJGx0KSA9IEBfOworICBteSAkbXlvYmpleHQgPSAkbHQgPyAnbG8nIDogJ28nOworICAkbHQgfHw9ICcnOworCisgICR2YXItPnJlcXVpcmVzX3ZhcmlhYmxlcyAoIlxAJHtsdH1MSUJPQkpTXEAgdXNlZCIsICRsdCAuICdMSUJPQkpTJykKKyAgICBpZiAhIGtleXMgJWxpYnNvdXJjZXM7CisKKyAgbXkgJGRpciA9IGhhbmRsZV9MSUJPQkpTX29yX0FMTE9DQSAiJHtsdH1MSUJPQkpTIjsKKworICBmb3JlYWNoIG15ICRpdGVyIChrZXlzICVsaWJzb3VyY2VzKQorICAgIHsKKyAgICAgIGlmICgkaXRlciA9fiAvXC5bY2x5XSQvKQorCXsKKwkgICZzYXdfZXh0ZW5zaW9uICgkJik7CisJICAmc2F3X2V4dGVuc2lvbiAoJy5jJyk7CisJfQorCisgICAgICBpZiAoJGl0ZXIgPX4gL1wuaCQvKQorCXsKKwkgIHJlcXVpcmVfbGlic291cmNlX3dpdGhfbWFjcm8gKCRjb25kLCAkdmFyLCBGT1JFSUdOLCAkaXRlcik7CisJfQorICAgICAgZWxzaWYgKCRpdGVyIG5lICdhbGxvY2EuYycpCisJeworCSAgbXkgJHJld3JpdGUgPSAkaXRlcjsKKwkgICRyZXdyaXRlID1+IHMvXC5jJC8uUCRteW9iamV4dC87CisJICAkZGVwX2ZpbGVzeyRkaXIgLiAnJChERVBESVIpLycgLiAkcmV3cml0ZX0gPSAxOworCSAgJHJld3JpdGUgPSAiXiIgLiBxdW90ZW1ldGEgKCRpdGVyKSAuICJcJCI7CisJICAjIE9ubHkgcmVxdWlyZSB0aGUgZmlsZSBpZiBpdCBpcyBub3QgYSBidWlsdCBzb3VyY2UuCisJICBteSAkYnMgPSB2YXIgKCdCVUlMVF9TT1VSQ0VTJyk7CisJICBpZiAoISAkYnMgfHwgISBncmVwICgvJHJld3JpdGUvLCAkYnMtPnZhbHVlX2FzX2xpc3RfcmVjdXJzaXZlKSkKKwkgICAgeworCSAgICAgIHJlcXVpcmVfbGlic291cmNlX3dpdGhfbWFjcm8gKCRjb25kLCAkdmFyLCBGT1JFSUdOLCAkaXRlcik7CisJICAgIH0KKwl9CisgICAgfQorfQorCitzdWIgaGFuZGxlX0FMTE9DQSAoJCQkKQoreworICBteSAoJHZhciwgJGNvbmQsICRsdCkgPSBAXzsKKyAgbXkgJG15b2JqZXh0ID0gJGx0ID8gJ2xvJyA6ICdvJzsKKyAgJGx0IHx8PSAnJzsKKyAgbXkgJGRpciA9IGhhbmRsZV9MSUJPQkpTX29yX0FMTE9DQSAiJHtsdH1BTExPQ0EiOworCisgICR2YXItPnJlcXVpcmVzX3ZhcmlhYmxlcyAoIlxAJHtsdH1BTExPQ0FcQCB1c2VkIiwgJGx0IC4gJ0FMTE9DQScpOworICAkZGVwX2ZpbGVzeyRkaXIgLiAnJChERVBESVIpL2FsbG9jYS5QJyAuICRteW9iamV4dH0gPSAxOworICByZXF1aXJlX2xpYnNvdXJjZV93aXRoX21hY3JvICgkY29uZCwgJHZhciwgRk9SRUlHTiwgJ2FsbG9jYS5jJyk7CisgICZzYXdfZXh0ZW5zaW9uICgnLmMnKTsKK30KKworIyBDYW5vbmljYWxpemUgdGhlIGlucHV0IHBhcmFtZXRlcgorc3ViIGNhbm9uaWNhbGl6ZQoreworICAgIG15ICgkc3RyaW5nKSA9IEBfOworICAgICRzdHJpbmcgPX4gdHIvQS1aYS16MC05X1xAL18vYzsKKyAgICByZXR1cm4gJHN0cmluZzsKK30KKworIyBDYW5vbmljYWxpemUgYSBuYW1lLCBhbmQgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBub24tY2Fub25pY2FsIG5hbWUKKyMgaXMgbmV2ZXIgdXNlZC4gIFJldHVybnMgY2Fub25pY2FsIG5hbWUuICBBcmd1bWVudHMgYXJlIG5hbWUgYW5kIGEKKyMgbGlzdCBvZiBzdWZmaXhlcyB0byBjaGVjayBmb3IuCitzdWIgY2hlY2tfY2Fub25pY2FsX3NwZWxsaW5nCit7CisgIG15ICgkbmFtZSwgQHN1ZmZpeGVzKSA9IEBfOworCisgIG15ICR4bmFtZSA9ICZjYW5vbmljYWxpemUgKCRuYW1lKTsKKyAgaWYgKCR4bmFtZSBuZSAkbmFtZSkKKyAgICB7CisgICAgICBmb3JlYWNoIG15ICR4dCAoQHN1ZmZpeGVzKQorCXsKKwkgIHJlamVjdF92YXIgKCIkbmFtZSR4dCIsICJ1c2UgYCR4bmFtZSR4dCcsIG5vdCBgJG5hbWUkeHQnIik7CisJfQorICAgIH0KKworICByZXR1cm4gJHhuYW1lOworfQorCisKKyMgaGFuZGxlX2NvbXBpbGUgKCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IHVwIHRoZSBjb21waWxlIHN1aXRlLgorc3ViIGhhbmRsZV9jb21waWxlICgpCit7CisgICAgcmV0dXJuCisgICAgICB1bmxlc3MgJGdldF9vYmplY3RfZXh0ZW5zaW9uX3dhc19ydW47CisKKyAgICAjIEJvaWxlcnBsYXRlLgorICAgIG15ICRkZWZhdWx0X2luY2x1ZGVzID0gJyc7CisgICAgaWYgKCEgb3B0aW9uICdub3N0ZGluYycpCisgICAgICB7CisJbXkgQGluY3MgPSAoJy1JLicsIHN1YnN0ICgnYW1fX2lzcmMnKSk7CisKKwlteSAkdmFyID0gdmFyICdDT05GSUdfSEVBREVSJzsKKwlpZiAoJHZhcikKKwkgIHsKKwkgICAgZm9yZWFjaCBteSAkaGRyIChzcGxpdCAoJyAnLCAkdmFyLT52YXJpYWJsZV92YWx1ZSkpCisJICAgICAgeworCQlwdXNoIEBpbmNzLCAnLUknIC4gZGlybmFtZSAoJGhkcik7CisJICAgICAgfQorCSAgfQorCSMgV2Ugd2FudCBgLUkuIC1JJChzcmNkaXIpJywgYnV0IHRoZSBsYXR0ZXIgLUkgaXMgcmVkdW5kYW50CisJIyBhbmQgdW5hZXN0aGV0aWMgaW4gbm9uLVZQQVRIIGJ1aWxkcy4gIFdlIHVzZSBgLUkuQGFtX19pc3JjQGAKKwkjIGluc3RlYWQuICBJdCB3aWxsIGJlIHJlcGxhY2VkIGJ5ICctSS4nIG9yICctSS4gLUkkKHNyY2RpciknLgorCSMgSXRlbXMgaW4gQ09ORklHX0hFQURFUiBhcmUgbmV2ZXIgaW4gJChzcmNkaXIpIHNvIGl0IGlzIHNhZmUKKwkjIHRvIGp1c3QgcHV0IEBhbV9faXNyY0AgcmlnaHQgYWZ0ZXIgYC1JLicsIHdpdGhvdXQgYSBzcGFjZS4KKwkoJGRlZmF1bHRfaW5jbHVkZXMgPSAnICcgLiB1bmlxIChAaW5jcykpID1+IHMvIEAvQC87CisgICAgICB9CisKKyAgICBteSAoQG1vc3RseV9ybXMsIEBkaXN0X3Jtcyk7CisgICAgZm9yZWFjaCBteSAkaXRlbSAoc29ydCBrZXlzICVjb21waWxlX2NsZWFuX2ZpbGVzKQorICAgIHsKKwlpZiAoJGNvbXBpbGVfY2xlYW5fZmlsZXN7JGl0ZW19ID09IE1PU1RMWV9DTEVBTikKKwl7CisJICAgIHB1c2ggKEBtb3N0bHlfcm1zLCAiXHQtcm0gLWYgJGl0ZW0iKTsKKwl9CisJZWxzaWYgKCRjb21waWxlX2NsZWFuX2ZpbGVzeyRpdGVtfSA9PSBESVNUX0NMRUFOKQorCXsKKwkgICAgcHVzaCAoQGRpc3Rfcm1zLCAiXHQtcm0gLWYgJGl0ZW0iKTsKKwl9CisJZWxzZQorCXsKKwkgIHByb2dfZXJyb3IgJ2ludmFsaWQgZW50cnkgaW4gJWNvbXBpbGVfY2xlYW5fZmlsZXMnOworCX0KKyAgICB9CisKKyAgICBteSAoJGNvbXMsICR2YXJzLCAkcnVsZXMpID0KKyAgICAgICZmaWxlX2NvbnRlbnRzX2ludGVybmFsICgxLCAiJGxpYmRpci9hbS9jb21waWxlLmFtIiwKKwkJCSAgICAgICBuZXcgQXV0b21ha2U6OkxvY2F0aW9uLAorCQkJICAgICAgICgnREVGQVVMVF9JTkNMVURFUycgPT4gJGRlZmF1bHRfaW5jbHVkZXMsCisJCQkJJ01PU1RMWVJNUycgPT4gam9pbiAoIlxuIiwgQG1vc3RseV9ybXMpLAorCQkJCSdESVNUUk1TJyA9PiBqb2luICgiXG4iLCBAZGlzdF9ybXMpKSk7CisgICAgJG91dHB1dF92YXJzIC49ICR2YXJzOworICAgICRvdXRwdXRfcnVsZXMgLj0gIiRjb21zJHJ1bGVzIjsKKworICAgICMgQ2hlY2sgZm9yIGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uLgorICAgIGlmIChvcHRpb24gJ2Fuc2kya25yJykKKyAgICAgIHsKKwlteSAoJGFuc2kya25yX2ZpbGVuYW1lLCAkYW5zaTJrbnJfd2hlcmUpID0gQHtvcHRpb24gJ2Fuc2kya25yJ307CisJbXkgJGFuc2kya25yX2RpciA9ICcnOworCisJcmVxdWlyZV92YXJpYWJsZXMgKCRhbnNpMmtucl93aGVyZSwgIm9wdGlvbiBgYW5zaTJrbnInIGlzIHVzZWQiLAorCQkJICAgVFJVRSwgIkFOU0kyS05SIiwgIlUiKTsKKworCSMgdG9wZGlyIGlzIHdoZXJlIGFuc2kya25yIHNob3VsZCBiZS4KKwlpZiAoJGFuc2kya25yX2ZpbGVuYW1lIGVxICdhbnNpMmtucicpCisJICB7CisJICAgICMgT25seSByZXF1aXJlIGFuc2kya25yIGZpbGVzIGlmIHRoZXkgc2hvdWxkIGFwcGVhciBpbgorCSAgICAjIHRoaXMgZGlyZWN0b3J5LgorCSAgICByZXF1aXJlX2ZpbGUgKCRhbnNpMmtucl93aGVyZSwgRk9SRUlHTiwKKwkJCSAgJ2Fuc2kya25yLmMnLCAnYW5zaTJrbnIuMScpOworCisJICAgICMgYW5zaTJrbnIgbmVlZHMgdG8gYmUgYnVpbHQgYmVmb3JlIHN1YmRpcnMsIHNvIHVuc2hpZnQgaXQuCisJICAgIHVuc2hpZnQgKEBhbGwsICckKEFOU0kyS05SKScpOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgJGFuc2kya25yX2RpciA9IGRpcm5hbWUgKCRhbnNpMmtucl9maWxlbmFtZSk7CisJICB9CisKKwkkb3V0cHV0X3J1bGVzIC49ICZmaWxlX2NvbnRlbnRzICgnYW5zaTJrbnInLAorCQkJCQkgbmV3IEF1dG9tYWtlOjpMb2NhdGlvbiwKKwkJCQkJICdBTlNJMktOUi1ESVInID0+ICRhbnNpMmtucl9kaXIpOworCisgICAgfQorfQorCisjIGhhbmRsZV9saWJ0b29sICgpCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIEhhbmRsZSBsaWJ0b29sIHJ1bGVzLgorc3ViIGhhbmRsZV9saWJ0b29sCit7CisgIHJldHVybiB1bmxlc3MgdmFyICgnTElCVE9PTCcpOworCisgICMgTGlidG9vbCByZXF1aXJlcyBzb21lIGZpbGVzLCBidXQgb25seSBhdCB0b3AgbGV2ZWwuCisgICMgKFN0YXJ0aW5nIHdpdGggTGlidG9vbCAyLjAgd2UgZG8gbm90IGhhdmUgdG8gYm90aGVyLiAgVGhlc2UKKyAgIyByZXF1aXJlbWVudHMgYXJlIGRvbmUgd2l0aCBBQ19SRVFVSVJFX0FVWF9GSUxFLikKKyAgcmVxdWlyZV9jb25mX2ZpbGVfd2l0aF9tYWNybyAoVFJVRSwgJ0xJQlRPT0wnLCBGT1JFSUdOLCBAbGlidG9vbF9maWxlcykKKyAgICBpZiAkcmVsYXRpdmVfZGlyIGVxICcuJyAmJiAhICRsaWJ0b29sX25ld19hcGk7CisKKyAgbXkgQGxpYnRvb2xfcm1zOworICBmb3JlYWNoIG15ICRpdGVtIChzb3J0IGtleXMgJWxpYnRvb2xfY2xlYW5fZGlyZWN0b3JpZXMpCisgICAgeworICAgICAgbXkgJGRpciA9ICgkaXRlbSBlcSAnLicpID8gJycgOiAiJGl0ZW0vIjsKKyAgICAgICMgLmxpYnMgaXMgZm9yIFVuaXgsIF9saWJzIGZvciBET1MuCisgICAgICBwdXNoIChAbGlidG9vbF9ybXMsICJcdC1ybSAtcmYgJHtkaXJ9LmxpYnMgJHtkaXJ9X2xpYnMiKTsKKyAgICB9CisKKyAgY2hlY2tfdXNlcl92YXJpYWJsZXMgJ0xJQlRPT0xGTEFHUyc7CisKKyAgIyBPdXRwdXQgdGhlIGxpYnRvb2wgY29tcGlsYXRpb24gcnVsZXMuCisgICRvdXRwdXRfcnVsZXMgLj0gJmZpbGVfY29udGVudHMgKCdsaWJ0b29sJywKKwkJCQkgICBuZXcgQXV0b21ha2U6OkxvY2F0aW9uLAorCQkJCSAgIExUUk1TID0+IGpvaW4gKCJcbiIsIEBsaWJ0b29sX3JtcykpOworfQorCisjIGhhbmRsZV9wcm9ncmFtcyAoKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgSGFuZGxlIEMgcHJvZ3JhbXMuCitzdWIgaGFuZGxlX3Byb2dyYW1zCit7CisgIG15IEBwcm9nbGlzdCA9ICZhbV9pbnN0YWxsX3ZhciAoJ3Byb2dzJywgJ1BST0dSQU1TJywKKwkJCQkgICdiaW4nLCAnc2JpbicsICdsaWJleGVjJywgJ3BrZ2xpYicsCisJCQkJICAnbm9pbnN0JywgJ2NoZWNrJyk7CisgIHJldHVybiBpZiAhIEBwcm9nbGlzdDsKKworICBteSAkc2Vlbl9nbG9iYWxfbGlib2JqcyA9CisgICAgdmFyICgnTERBREQnKSAmJiAmaGFuZGxlX2xpYl9vYmplY3RzICgnJywgJ0xEQUREJyk7CisKKyAgZm9yZWFjaCBteSAkcGFpciAoQHByb2dsaXN0KQorICAgIHsKKyAgICAgIG15ICgkd2hlcmUsICRvbmVfZmlsZSkgPSBAJHBhaXI7CisKKyAgICAgIG15ICRzZWVuX2xpYm9ianMgPSAwOworICAgICAgbXkgJG9iaiA9IGdldF9vYmplY3RfZXh0ZW5zaW9uICcuJChPQkpFWFQpJzsKKworICAgICAgJGtub3duX3Byb2dyYW1zeyRvbmVfZmlsZX0gPSAkd2hlcmU7CisKKyAgICAgICMgQ2Fub25pY2FsaXplIG5hbWVzIGFuZCBjaGVjayBmb3IgbWlzc3BlbGxpbmdzLgorICAgICAgbXkgJHhuYW1lID0gJmNoZWNrX2Nhbm9uaWNhbF9zcGVsbGluZyAoJG9uZV9maWxlLCAnX0xEQUREJywgJ19MREZMQUdTJywKKwkJCQkJICAgICAnX1NPVVJDRVMnLCAnX09CSkVDVFMnLAorCQkJCQkgICAgICdfREVQRU5ERU5DSUVTJyk7CisKKyAgICAgICR3aGVyZS0+cHVzaF9jb250ZXh0ICgid2hpbGUgcHJvY2Vzc2luZyBwcm9ncmFtIGAkb25lX2ZpbGUnIik7CisgICAgICAkd2hlcmUtPnNldCAoSU5URVJOQUwtPmdldCk7CisKKyAgICAgIG15ICRsaW5rZXIgPSAmaGFuZGxlX3NvdXJjZV90cmFuc2Zvcm0gKCR4bmFtZSwgJG9uZV9maWxlLCAkb2JqLCAkd2hlcmUsCisJCQkJCSAgICAgTk9OTElCVE9PTCA9PiAxLCBMSUJUT09MID0+IDApOworCisgICAgICBpZiAodmFyICgkeG5hbWUgLiAiX0xEQUREIikpCisJeworCSAgJHNlZW5fbGlib2JqcyA9ICZoYW5kbGVfbGliX29iamVjdHMgKCR4bmFtZSwgJHhuYW1lIC4gJ19MREFERCcpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAjIFVzZXIgZGlkbid0IGRlZmluZSBwcm9nX0xEQUREIG92ZXJyaWRlLiAgU28gZG8gaXQuCisJICAmZGVmaW5lX3ZhcmlhYmxlICgkeG5hbWUgLiAnX0xEQUREJywgJyQoTERBREQpJywgJHdoZXJlKTsKKworCSAgIyBUaGlzIGRvZXMgYSBiaXQgdG9vIG11Y2ggd29yay4gIEJ1dCB3ZSBuZWVkIGl0IHRvCisJICAjIGdlbmVyYXRlIF9ERVBFTkRFTkNJRVMgd2hlbiBhcHByb3ByaWF0ZS4KKwkgIGlmICh2YXIgKCdMREFERCcpKQorCSAgICB7CisJICAgICAgJHNlZW5fbGlib2JqcyA9ICZoYW5kbGVfbGliX29iamVjdHMgKCR4bmFtZSwgJ0xEQUREJyk7CisJICAgIH0KKwl9CisKKyAgICAgIHJlamVjdF92YXIgKCR4bmFtZSAuICdfTElCQUREJywKKwkJICAidXNlIGAke3huYW1lfV9MREFERCcsIG5vdCBgJHt4bmFtZX1fTElCQUREJyIpOworCisgICAgICBzZXRfc2VlbiAoJHhuYW1lIC4gJ19ERVBFTkRFTkNJRVMnKTsKKyAgICAgIHNldF9zZWVuICgkeG5hbWUgLiAnX0xERkxBR1MnKTsKKworICAgICAgIyBEZXRlcm1pbmUgcHJvZ3JhbSB0byB1c2UgZm9yIGxpbmsuCisgICAgICBteSgkeGxpbmssICR2bGluaykgPSAmZGVmaW5lX3Blcl90YXJnZXRfbGlua2VyX3ZhcmlhYmxlICgkbGlua2VyLCAkeG5hbWUpOworICAgICAgJHZsaW5rID0gdmVyYm9zZV9mbGFnICgkdmxpbmsgfHwgJ0dFTicpOworCisgICAgICAjIElmIHRoZSByZXN1bHRpbmcgcHJvZ3JhbSBsaWVzIGludG8gYSBzdWJkaXJlY3RvcnksCisgICAgICAjIG1ha2Ugc3VyZSB0aGlzIGRpcmVjdG9yeSB3aWxsIGV4aXN0LgorICAgICAgbXkgJGRpcnN0YW1wID0gcmVxdWlyZV9idWlsZF9kaXJlY3RvcnlfbWF5YmUgKCRvbmVfZmlsZSk7CisKKyAgICAgICRsaWJ0b29sX2NsZWFuX2RpcmVjdG9yaWVze2Rpcm5hbWUgKCRvbmVfZmlsZSl9ID0gMTsKKworICAgICAgJG91dHB1dF9ydWxlcyAuPSAmZmlsZV9jb250ZW50cyAoJ3Byb2dyYW0nLAorCQkJCSAgICAgICAkd2hlcmUsCisJCQkJICAgICAgIFBST0dSQU0gID0+ICRvbmVfZmlsZSwKKwkJCQkgICAgICAgWFBST0dSQU0gPT4gJHhuYW1lLAorCQkJCSAgICAgICBYTElOSyAgICA9PiAkeGxpbmssCisJCQkJICAgICAgIFZFUkJPU0UgID0+ICR2bGluaywKKwkJCQkgICAgICAgRElSU1RBTVAgPT4gJGRpcnN0YW1wLAorCQkJCSAgICAgICBFWEVFWFQgICA9PiAnJChFWEVFWFQpJyk7CisKKyAgICAgIGlmICgkc2Vlbl9saWJvYmpzIHx8ICRzZWVuX2dsb2JhbF9saWJvYmpzKQorCXsKKwkgIGlmICh2YXIgKCR4bmFtZSAuICdfTERBREQnKSkKKwkgICAgeworCSAgICAgICZjaGVja19saWJvYmpzX3NvdXJjZXMgKCR4bmFtZSwgJHhuYW1lIC4gJ19MREFERCcpOworCSAgICB9CisJICBlbHNpZiAodmFyICgnTERBREQnKSkKKwkgICAgeworCSAgICAgICZjaGVja19saWJvYmpzX3NvdXJjZXMgKCR4bmFtZSwgJ0xEQUREJyk7CisJICAgIH0KKwl9CisgICAgfQorfQorCisKKyMgaGFuZGxlX2xpYnJhcmllcyAoKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIEhhbmRsZSBsaWJyYXJpZXMuCitzdWIgaGFuZGxlX2xpYnJhcmllcworeworICBteSBAbGlibGlzdCA9ICZhbV9pbnN0YWxsX3ZhciAoJ2xpYnMnLCAnTElCUkFSSUVTJywKKwkJCQkgJ2xpYicsICdwa2dsaWInLCAnbm9pbnN0JywgJ2NoZWNrJyk7CisgIHJldHVybiBpZiAhIEBsaWJsaXN0OworCisgIG15IEBwcmVmaXggPSBhbV9wcmltYXJ5X3ByZWZpeGVzICgnTElCUkFSSUVTJywgMCwgJ2xpYicsICdwa2dsaWInLAorCQkJCSAgICAnbm9pbnN0JywgJ2NoZWNrJyk7CisKKyAgaWYgKEBwcmVmaXgpCisgICAgeworICAgICAgbXkgJHZhciA9IHJ2YXIgKCRwcmVmaXhbMF0gLiAnX0xJQlJBUklFUycpOworICAgICAgJHZhci0+cmVxdWlyZXNfdmFyaWFibGVzICgnbGlicmFyeSB1c2VkJywgJ1JBTkxJQicpOworICAgIH0KKworICAmZGVmaW5lX3ZhcmlhYmxlICgnQVInLCAnYXInLCBJTlRFUk5BTCk7CisgICZkZWZpbmVfdmFyaWFibGUgKCdBUkZMQUdTJywgJ2NydScsIElOVEVSTkFMKTsKKyAgJmRlZmluZV92ZXJib3NlX3RhZ3ZhciAoJ0FSJyk7CisKKyAgZm9yZWFjaCBteSAkcGFpciAoQGxpYmxpc3QpCisgICAgeworICAgICAgbXkgKCR3aGVyZSwgJG9uZWxpYikgPSBAJHBhaXI7CisKKyAgICAgIG15ICRzZWVuX2xpYm9ianMgPSAwOworICAgICAgIyBDaGVjayB0aGF0IHRoZSBsaWJyYXJ5IGZpdHMgdGhlIHN0YW5kYXJkIG5hbWluZyBjb252ZW50aW9uLgorICAgICAgbXkgJGJuID0gYmFzZW5hbWUgKCRvbmVsaWIpOworICAgICAgaWYgKCRibiAhfiAvXmxpYi4qXC5hJC8pCisJeworCSAgJGJuID1+IHMvXig/OmxpYik/KC4qPykoPzpcLlteLl0qKT8kL2xpYiQxLmEvOworCSAgbXkgJHN1Z2dlc3Rpb24gPSBkaXJuYW1lICgkb25lbGliKSAuICIvJGJuIjsKKwkgICRzdWdnZXN0aW9uID1+IHN8XlwuL3x8ZzsKKwkgIG1zZyAoJ2Vycm9yLWdudS93YXJuJywgJHdoZXJlLAorCSAgICAgICAiYCRvbmVsaWInIGlzIG5vdCBhIHN0YW5kYXJkIGxpYnJhcnkgbmFtZVxuIgorCSAgICAgICAuICJkaWQgeW91IG1lYW4gYCRzdWdnZXN0aW9uJz8iKQorCX0KKworICAgICAgKCRrbm93bl9saWJyYXJpZXN7JG9uZWxpYn0gPSAkYm4pID1+IHMvXC5hJC8vOworCisgICAgICAkd2hlcmUtPnB1c2hfY29udGV4dCAoIndoaWxlIHByb2Nlc3NpbmcgbGlicmFyeSBgJG9uZWxpYiciKTsKKyAgICAgICR3aGVyZS0+c2V0IChJTlRFUk5BTC0+Z2V0KTsKKworICAgICAgbXkgJG9iaiA9IGdldF9vYmplY3RfZXh0ZW5zaW9uICcuJChPQkpFWFQpJzsKKworICAgICAgIyBDYW5vbmljYWxpemUgbmFtZXMgYW5kIGNoZWNrIGZvciBtaXNzcGVsbGluZ3MuCisgICAgICBteSAkeGxpYiA9ICZjaGVja19jYW5vbmljYWxfc3BlbGxpbmcgKCRvbmVsaWIsICdfTElCQUREJywgJ19TT1VSQ0VTJywKKwkJCQkJICAgICdfT0JKRUNUUycsICdfREVQRU5ERU5DSUVTJywKKwkJCQkJICAgICdfQVInKTsKKworICAgICAgaWYgKCEgdmFyICgkeGxpYiAuICdfQVInKSkKKwl7CisJICAmZGVmaW5lX3ZhcmlhYmxlICgkeGxpYiAuICdfQVInLCAnJChBUikgJChBUkZMQUdTKScsICR3aGVyZSk7CisJfQorCisgICAgICAjIEdlbmVyYXRlIHN1cHBvcnQgZm9yIGNvbmRpdGlvbmFsIG9iamVjdCBpbmNsdXNpb24gaW4KKyAgICAgICMgbGlicmFyaWVzLgorICAgICAgaWYgKHZhciAoJHhsaWIgLiAnX0xJQkFERCcpKQorCXsKKwkgIGlmICgmaGFuZGxlX2xpYl9vYmplY3RzICgkeGxpYiwgJHhsaWIgLiAnX0xJQkFERCcpKQorCSAgICB7CisJICAgICAgJHNlZW5fbGlib2JqcyA9IDE7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgJmRlZmluZV92YXJpYWJsZSAoJHhsaWIgLiAiX0xJQkFERCIsICcnLCAkd2hlcmUpOworCX0KKworICAgICAgcmVqZWN0X3ZhciAoJHhsaWIgLiAnX0xEQUREJywKKwkJICAidXNlIGAke3hsaWJ9X0xJQkFERCcsIG5vdCBgJHt4bGlifV9MREFERCciKTsKKworICAgICAgIyBNYWtlIHN1cmUgd2UgYXQgbG9vayBhdCB0aGlzLgorICAgICAgc2V0X3NlZW4gKCR4bGliIC4gJ19ERVBFTkRFTkNJRVMnKTsKKworICAgICAgJmhhbmRsZV9zb3VyY2VfdHJhbnNmb3JtICgkeGxpYiwgJG9uZWxpYiwgJG9iaiwgJHdoZXJlLAorCQkJCU5PTkxJQlRPT0wgPT4gMSwgTElCVE9PTCA9PiAwKTsKKworICAgICAgIyBJZiB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgbGllcyBpbnRvIGEgc3ViZGlyZWN0b3J5LAorICAgICAgIyBtYWtlIHN1cmUgdGhpcyBkaXJlY3Rvcnkgd2lsbCBleGlzdC4KKyAgICAgIG15ICRkaXJzdGFtcCA9IHJlcXVpcmVfYnVpbGRfZGlyZWN0b3J5X21heWJlICgkb25lbGliKTsKKyAgICAgIG15ICR2ZXJib3NlID0gdmVyYm9zZV9mbGFnICgnQVInKTsKKyAgICAgIG15ICRzaWxlbnQgPSBzaWxlbnRfZmxhZyAoKTsKKworICAgICAgJG91dHB1dF9ydWxlcyAuPSAmZmlsZV9jb250ZW50cyAoJ2xpYnJhcnknLAorCQkJCSAgICAgICAkd2hlcmUsCisJCQkJICAgICAgIFZFUkJPU0UgID0+ICR2ZXJib3NlLAorCQkJCSAgICAgICBTSUxFTlQgICA9PiAkc2lsZW50LAorCQkJCSAgICAgICBMSUJSQVJZICA9PiAkb25lbGliLAorCQkJCSAgICAgICBYTElCUkFSWSA9PiAkeGxpYiwKKwkJCQkgICAgICAgRElSU1RBTVAgPT4gJGRpcnN0YW1wKTsKKworICAgICAgaWYgKCRzZWVuX2xpYm9ianMpCisJeworCSAgaWYgKHZhciAoJHhsaWIgLiAnX0xJQkFERCcpKQorCSAgICB7CisJICAgICAgJmNoZWNrX2xpYm9ianNfc291cmNlcyAoJHhsaWIsICR4bGliIC4gJ19MSUJBREQnKTsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKKworIyBoYW5kbGVfbHRsaWJyYXJpZXMgKCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEhhbmRsZSBzaGFyZWQgbGlicmFyaWVzLgorc3ViIGhhbmRsZV9sdGxpYnJhcmllcworeworICBteSBAbGlibGlzdCA9ICZhbV9pbnN0YWxsX3ZhciAoJ2x0bGliJywgJ0xUTElCUkFSSUVTJywKKwkJCQkgJ25vaW5zdCcsICdsaWInLCAncGtnbGliJywgJ2NoZWNrJyk7CisgIHJldHVybiBpZiAhIEBsaWJsaXN0OworCisgIG15IEBwcmVmaXggPSBhbV9wcmltYXJ5X3ByZWZpeGVzICgnTFRMSUJSQVJJRVMnLCAwLCAnbGliJywgJ3BrZ2xpYicsCisJCQkJICAgICdub2luc3QnLCAnY2hlY2snKTsKKworICBpZiAoQHByZWZpeCkKKyAgICB7CisgICAgICBteSAkdmFyID0gcnZhciAoJHByZWZpeFswXSAuICdfTFRMSUJSQVJJRVMnKTsKKyAgICAgICR2YXItPnJlcXVpcmVzX3ZhcmlhYmxlcyAoJ0xpYnRvb2wgbGlicmFyeSB1c2VkJywgJ0xJQlRPT0wnKTsKKyAgICB9CisKKyAgbXkgJWluc3RkaXJzID0gKCk7CisgIG15ICVpbnN0c3ViZGlycyA9ICgpOworICBteSAlaW5zdGNvbmRzID0gKCk7CisgIG15ICVsaWJsb2NhdGlvbnMgPSAoKTsJIyBMb2NhdGlvbiAoaW4gTWFrZWZpbGUuYW0pIG9mIGVhY2ggbGlicmFyeS4KKworICBmb3JlYWNoIG15ICRrZXkgKEBwcmVmaXgpCisgICAgeworICAgICAgIyBHZXQgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3Rvcnkgb2YgZWFjaCBsaWJyYXJ5LgorICAgICAgbXkgJGRpciA9ICRrZXk7CisgICAgICBteSAkc3RyaXBfc3ViZGlyID0gMTsKKyAgICAgIGlmICgkZGlyID1+IC9ebm9iYXNlXy8pCisgICAgICAgIHsKKwkgICRkaXIgPX4gcy9ebm9iYXNlXy8vOworCSAgJHN0cmlwX3N1YmRpciA9IDA7CisJfQorICAgICAgbXkgJHZhciA9IHJ2YXIgKCRrZXkgLiAnX0xUTElCUkFSSUVTJyk7CisKKyAgICAgICMgV2UgcmVqZWN0IGxpYnJhcmllcyB3aGljaCBhcmUgaW5zdGFsbGVkIGluIHNldmVyYWwgcGxhY2VzCisgICAgICAjIGluIHRoZSBzYW1lIGNvbmRpdGlvbiwgYmVjYXVzZSB3ZSBjYW4gb25seSBzcGVjaWZ5IG9uZQorICAgICAgIyBgLXJwYXRoJyBvcHRpb24uCisgICAgICAkdmFyLT50cmF2ZXJzZV9yZWN1cnNpdmVseQorCShzdWIKKwkgeworCSAgIG15ICgkdmFyLCAkdmFsLCAkY29uZCwgJGZ1bGxfY29uZCkgPSBAXzsKKwkgICBteSAkaGNvbmQgPSAkZnVsbF9jb25kLT5odW1hbjsKKwkgICBteSAkd2hlcmUgPSAkdmFyLT5yZGVmICgkY29uZCktPmxvY2F0aW9uOworCSAgIG15ICRsZGlyID0gJyc7CisJICAgJGxkaXIgPSAnLycgLiBkaXJuYW1lICgkdmFsKQorCSAgICAgaWYgKCEkc3RyaXBfc3ViZGlyKTsKKwkgICAjIEEgbGlicmFyeSBjYW5ub3QgYmUgaW5zdGFsbGVkIGluIGRpZmZlcmVudCBkaXJlY3RvcmllcworCSAgICMgaW4gb3ZlcmxhcHBpbmcgY29uZGl0aW9ucy4KKwkgICBpZiAoZXhpc3RzICRpbnN0Y29uZHN7JHZhbH0pCisJICAgICB7CisJICAgICAgIG15ICgkbXNnLCAkYWNvbmQpID0KKwkJICRpbnN0Y29uZHN7JHZhbH0tPmFtYmlndW91c19wICgkdmFsLCAkZnVsbF9jb25kKTsKKworCSAgICAgICBpZiAoJG1zZykKKwkJIHsKKwkJICAgZXJyb3IgKCR3aGVyZSwgJG1zZywgcGFydGlhbCA9PiAxKTsKKwkJICAgbXkgJGRpcnR4dCA9ICJpbnN0YWxsZWQgIiAuICgkc3RyaXBfc3ViZGlyID8gImluIiA6ICJiZWxvdyIpIC4gIiBgJGRpciciOworCQkgICAkZGlydHh0ID0gImJ1aWx0IGZvciBgJGRpciciCisJCSAgICAgaWYgJGRpciBlcSAnRVhUUkEnIHx8ICRkaXIgZXEgJ25vaW5zdCcgfHwgJGRpciBlcSAnY2hlY2snOworCQkgICBteSAkZGlyY29uZCA9CisJCSAgICAgJGZ1bGxfY29uZC0+dHJ1ZSA/ICIiIDogIiBpbiBjb25kaXRpb24gJGhjb25kIjsKKworCQkgICBlcnJvciAoJHdoZXJlLCAiYCR2YWwnIHNob3VsZCBiZSAkZGlydHh0JGRpcmNvbmQgLi4uIiwKKwkJCSAgcGFydGlhbCA9PiAxKTsKKworCQkgICBteSAkaGFjb25kID0gJGFjb25kLT5odW1hbjsKKwkJICAgbXkgJGFkaXIgPSAkaW5zdGRpcnN7JHZhbH17JGFjb25kfTsKKwkJICAgbXkgJGFkaXJ0eHQgPSAiaW5zdGFsbGVkIGluIGAkYWRpciciOworCQkgICAkYWRpcnR4dCA9ICJidWlsdCBmb3IgYCRhZGlyJyIKKwkJICAgICBpZiAoJGFkaXIgZXEgJ0VYVFJBJyB8fCAkYWRpciBlcSAnbm9pbnN0JworCQkJIHx8ICRhZGlyIGVxICdjaGVjaycpOworCQkgICBteSAkYWRpcmNvbmQgPSAkYWNvbmQtPnRydWUgPyAiIiA6ICIgaW4gY29uZGl0aW9uICRoYWNvbmQiOworCisJCSAgIG15ICRvbmx5b25lID0gKCRkaXIgbmUgJGFkaXIpID8KKwkJICAgICAoIlxuTGlidG9vbCBsaWJyYXJpZXMgY2FuIGJlIGJ1aWx0IGZvciBvbmx5IG9uZSAiCisJCSAgICAgIC4gImRlc3RpbmF0aW9uLiIpIDogIiI7CisKKwkJICAgZXJyb3IgKCRsaWJsb2NhdGlvbnN7JHZhbH17JGFjb25kfSwKKwkJCSAgIi4uLiBhbmQgc2hvdWxkIGFsc28gYmUgJGFkaXJ0eHQkYWRpcmNvbmQuJG9ubHlvbmUiKTsKKwkJICAgcmV0dXJuOworCQkgfQorCSAgICAgfQorCSAgIGVsc2UKKwkgICAgIHsKKwkgICAgICAgJGluc3Rjb25kc3skdmFsfSA9IG5ldyBBdXRvbWFrZTo6RGlzakNvbmRpdGlvbnM7CisJICAgICB9CisJICAgJGluc3RkaXJzeyR2YWx9eyRmdWxsX2NvbmR9ID0gJGRpcjsKKwkgICAkaW5zdHN1YmRpcnN7JHZhbH17JGZ1bGxfY29uZH0gPSAkbGRpcjsKKwkgICAkbGlibG9jYXRpb25zeyR2YWx9eyRmdWxsX2NvbmR9ID0gJHdoZXJlOworCSAgICRpbnN0Y29uZHN7JHZhbH0gPSAkaW5zdGNvbmRzeyR2YWx9LT5tZXJnZSAoJGZ1bGxfY29uZCk7CisJIH0sCisJIHN1YgorCSB7CisJICAgcmV0dXJuICgpOworCSB9LAorCSBza2lwX2FjX3N1YnN0ID0+IDEpOworICAgIH0KKworICBmb3JlYWNoIG15ICRwYWlyIChAbGlibGlzdCkKKyAgICB7CisgICAgICBteSAoJHdoZXJlLCAkb25lbGliKSA9IEAkcGFpcjsKKworICAgICAgbXkgJHNlZW5fbGlib2JqcyA9IDA7CisgICAgICBteSAkb2JqID0gZ2V0X29iamVjdF9leHRlbnNpb24gJy5sbyc7CisKKyAgICAgICMgQ2Fub25pY2FsaXplIG5hbWVzIGFuZCBjaGVjayBmb3IgbWlzc3BlbGxpbmdzLgorICAgICAgbXkgJHhsaWIgPSAmY2hlY2tfY2Fub25pY2FsX3NwZWxsaW5nICgkb25lbGliLCAnX0xJQkFERCcsICdfTERGTEFHUycsCisJCQkJCSAgICAnX1NPVVJDRVMnLCAnX09CSkVDVFMnLAorCQkJCQkgICAgJ19ERVBFTkRFTkNJRVMnKTsKKworICAgICAgIyBDaGVjayB0aGF0IHRoZSBsaWJyYXJ5IGZpdHMgdGhlIHN0YW5kYXJkIG5hbWluZyBjb252ZW50aW9uLgorICAgICAgbXkgJGxpYm5hbWVfcnggPSAnXmxpYi4qXC5sYSc7CisgICAgICBteSAkbGR2YXIgPSB2YXIgKCIke3hsaWJ9X0xERkxBR1MiKSB8fCB2YXIgKCdBTV9MREZMQUdTJyk7CisgICAgICBteSAkbGR2YXIyID0gdmFyICgnTERGTEFHUycpOworICAgICAgaWYgKCgkbGR2YXIgJiYgZ3JlcCAoLy1tb2R1bGUvLCAkbGR2YXItPnZhbHVlX2FzX2xpc3RfcmVjdXJzaXZlKSkKKwkgIHx8ICgkbGR2YXIyICYmIGdyZXAgKC8tbW9kdWxlLywgJGxkdmFyMi0+dmFsdWVfYXNfbGlzdF9yZWN1cnNpdmUpKSkKKwl7CisJICAjIFJlbGF4IG5hbWUgY2hlY2tpbmcgZm9yIGxpYnRvb2wgbW9kdWxlcy4KKwkgICRsaWJuYW1lX3J4ID0gJ1wubGEnOworCX0KKworICAgICAgbXkgJGJuID0gYmFzZW5hbWUgKCRvbmVsaWIpOworICAgICAgaWYgKCRibiAhfiAvJGxpYm5hbWVfcngkLykKKwl7CisJICBteSAkdHlwZSA9ICdsaWJyYXJ5JzsKKwkgIGlmICgkbGlibmFtZV9yeCBlcSAnXC5sYScpCisJICAgIHsKKwkgICAgICAkYm4gPX4gcy9eKGxpYnwpKC4qPykoPzpcLlteLl0qKT8kLyQxJDIubGEvOworCSAgICAgICR0eXBlID0gJ21vZHVsZSc7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgICRibiA9fiBzL14oPzpsaWIpPyguKj8pKD86XC5bXi5dKik/JC9saWIkMS5sYS87CisJICAgIH0KKwkgIG15ICRzdWdnZXN0aW9uID0gZGlybmFtZSAoJG9uZWxpYikgLiAiLyRibiI7CisJICAkc3VnZ2VzdGlvbiA9fiBzfF5cLi98fGc7CisJICBtc2cgKCdlcnJvci1nbnUvd2FybicsICR3aGVyZSwKKwkgICAgICAgImAkb25lbGliJyBpcyBub3QgYSBzdGFuZGFyZCBsaWJ0b29sICR0eXBlIG5hbWVcbiIKKwkgICAgICAgLiAiZGlkIHlvdSBtZWFuIGAkc3VnZ2VzdGlvbic/IikKKwl9CisKKyAgICAgICgka25vd25fbGlicmFyaWVzeyRvbmVsaWJ9ID0gJGJuKSA9fiBzL1wubGEkLy87CisKKyAgICAgICR3aGVyZS0+cHVzaF9jb250ZXh0ICgid2hpbGUgcHJvY2Vzc2luZyBMaWJ0b29sIGxpYnJhcnkgYCRvbmVsaWInIik7CisgICAgICAkd2hlcmUtPnNldCAoSU5URVJOQUwtPmdldCk7CisKKyAgICAgICMgTWFrZSBzdXJlIHdlIGxvb2sgYXQgdGhlc2UuCisgICAgICBzZXRfc2VlbiAoJHhsaWIgLiAnX0xERkxBR1MnKTsKKyAgICAgIHNldF9zZWVuICgkeGxpYiAuICdfREVQRU5ERU5DSUVTJyk7CisKKyAgICAgICMgR2VuZXJhdGUgc3VwcG9ydCBmb3IgY29uZGl0aW9uYWwgb2JqZWN0IGluY2x1c2lvbiBpbgorICAgICAgIyBsaWJyYXJpZXMuCisgICAgICBpZiAodmFyICgkeGxpYiAuICdfTElCQUREJykpCisJeworCSAgaWYgKCZoYW5kbGVfbGliX29iamVjdHMgKCR4bGliLCAkeGxpYiAuICdfTElCQUREJykpCisJICAgIHsKKwkgICAgICAkc2Vlbl9saWJvYmpzID0gMTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICAmZGVmaW5lX3ZhcmlhYmxlICgkeGxpYiAuICJfTElCQUREIiwgJycsICR3aGVyZSk7CisJfQorCisgICAgICByZWplY3RfdmFyICgiJHt4bGlifV9MREFERCIsCisJCSAgInVzZSBgJHt4bGlifV9MSUJBREQnLCBub3QgYCR7eGxpYn1fTERBREQnIik7CisKKworICAgICAgbXkgJGxpbmtlciA9ICZoYW5kbGVfc291cmNlX3RyYW5zZm9ybSAoJHhsaWIsICRvbmVsaWIsICRvYmosICR3aGVyZSwKKwkJCQkJICAgICBOT05MSUJUT09MID0+IDAsIExJQlRPT0wgPT4gMSk7CisKKyAgICAgICMgRGV0ZXJtaW5lIHByb2dyYW0gdG8gdXNlIGZvciBsaW5rLgorICAgICAgbXkoJHhsaW5rLCAkdmxpbmspID0gJmRlZmluZV9wZXJfdGFyZ2V0X2xpbmtlcl92YXJpYWJsZSAoJGxpbmtlciwgJHhsaWIpOworICAgICAgJHZsaW5rID0gdmVyYm9zZV9mbGFnICgkdmxpbmsgfHwgJ0dFTicpOworCisgICAgICBteSAkcnBhdGh2YXIgPSAiYW1fJHt4bGlifV9ycGF0aCI7CisgICAgICBteSAkcnBhdGggPSAiXCQoJHJwYXRodmFyKSI7CisgICAgICBmb3JlYWNoIG15ICRyY29uZCAoJGluc3Rjb25kc3skb25lbGlifS0+Y29uZHMpCisJeworCSAgbXkgJHZhbDsKKwkgIGlmICgkaW5zdGRpcnN7JG9uZWxpYn17JHJjb25kfSBlcSAnRVhUUkEnCisJICAgICAgfHwgJGluc3RkaXJzeyRvbmVsaWJ9eyRyY29uZH0gZXEgJ25vaW5zdCcKKwkgICAgICB8fCAkaW5zdGRpcnN7JG9uZWxpYn17JHJjb25kfSBlcSAnY2hlY2snKQorCSAgICB7CisJICAgICAgIyBJdCdzIGFuIEVYVFJBXyBsaWJyYXJ5LCBzbyB3ZSBjYW4ndCBzcGVjaWZ5IC1ycGF0aCwKKwkgICAgICAjIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGVyZSB0aGUgbGlicmFyeSB3aWxsIGVuZCB1cC4KKwkgICAgICAjIFRoZSB1c2VyIHByb2JhYmx5IGtub3dzLCBidXQgZ2VuZXJhbGx5IHNwZWFraW5nIGF1dG9tYWtlCisJICAgICAgIyBkb2Vzbid0IC0tIGFuZCBpbiBmYWN0IGNvbmZpZ3VyZSBjb3VsZCBkZWNpZGUKKwkgICAgICAjIGR5bmFtaWNhbGx5IGJldHdlZW4gdHdvIGRpZmZlcmVudCBsb2NhdGlvbnMuCisJICAgICAgJHZhbCA9ICcnOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAkdmFsID0gKCctcnBhdGggJCgnIC4gJGluc3RkaXJzeyRvbmVsaWJ9eyRyY29uZH0gLiAnZGlyKScpOworCSAgICAgICR2YWwgLj0gJGluc3RzdWJkaXJzeyRvbmVsaWJ9eyRyY29uZH0KKwkgICAgICAgIGlmIGRlZmluZWQgJGluc3RzdWJkaXJzeyRvbmVsaWJ9eyRyY29uZH07CisJICAgIH0KKwkgIGlmICgkcmNvbmQtPnRydWUpCisJICAgIHsKKwkgICAgICAjIElmICRyY29uZCBpcyB0cnVlIHRoZXJlIGlzIG9ubHkgb25lIGNvbmRpdGlvbiBhbmQKKwkgICAgICAjIHRoZXJlIGlzIG5vIHBvaW50IGRlZmluaW5nIGFuIGhlbHBlciB2YXJpYWJsZS4KKwkgICAgICAkcnBhdGggPSAkdmFsOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBkZWZpbmVfcHJldHR5X3ZhcmlhYmxlICgkcnBhdGh2YXIsICRyY29uZCwgSU5URVJOQUwsICR2YWwpOworCSAgICB9CisJfQorCisgICAgICAjIElmIHRoZSByZXN1bHRpbmcgbGlicmFyeSBsaWVzIGludG8gYSBzdWJkaXJlY3RvcnksCisgICAgICAjIG1ha2Ugc3VyZSB0aGlzIGRpcmVjdG9yeSB3aWxsIGV4aXN0LgorICAgICAgbXkgJGRpcnN0YW1wID0gcmVxdWlyZV9idWlsZF9kaXJlY3RvcnlfbWF5YmUgKCRvbmVsaWIpOworCisgICAgICAjIFJlbWVtYmVyIHRvIGNsZWFudXAgLmxpYnMvIGluIHRoaXMgZGlyZWN0b3J5LgorICAgICAgbXkgJGRpcm5hbWUgPSBkaXJuYW1lICRvbmVsaWI7CisgICAgICAkbGlidG9vbF9jbGVhbl9kaXJlY3Rvcmllc3skZGlybmFtZX0gPSAxOworCisgICAgICAkb3V0cHV0X3J1bGVzIC49ICZmaWxlX2NvbnRlbnRzICgnbHRsaWJyYXJ5JywKKwkJCQkgICAgICAgJHdoZXJlLAorCQkJCSAgICAgICBMVExJQlJBUlkgID0+ICRvbmVsaWIsCisJCQkJICAgICAgIFhMVExJQlJBUlkgPT4gJHhsaWIsCisJCQkJICAgICAgIFJQQVRIICAgICAgPT4gJHJwYXRoLAorCQkJCSAgICAgICBYTElOSyAgICAgID0+ICR4bGluaywKKwkJCQkgICAgICAgVkVSQk9TRSAgICA9PiAkdmxpbmssCisJCQkJICAgICAgIERJUlNUQU1QICAgPT4gJGRpcnN0YW1wKTsKKyAgICAgIGlmICgkc2Vlbl9saWJvYmpzKQorCXsKKwkgIGlmICh2YXIgKCR4bGliIC4gJ19MSUJBREQnKSkKKwkgICAgeworCSAgICAgICZjaGVja19saWJvYmpzX3NvdXJjZXMgKCR4bGliLCAkeGxpYiAuICdfTElCQUREJyk7CisJICAgIH0KKwl9CisgICAgfQorfQorCisjIFNlZSBpZiBhbnkgX1NPVVJDRVMgdmFyaWFibGUgd2VyZSBtaXNzcGVsbGVkLgorc3ViIGNoZWNrX3R5cG9zICgpCit7CisgICMgSXQgaXMgb2sgaWYgdGhlIHVzZXIgc2V0cyB0aGlzIHBhcnRpY3VsYXIgdmFyaWFibGUuCisgIHNldF9zZWVuICdBTV9MREZMQUdTJzsKKworICBmb3JlYWNoIG15ICRwcmltYXJ5ICgnU09VUkNFUycsICdMSUJBREQnLCAnTERBREQnLCAnTERGTEFHUycsICdERVBFTkRFTkNJRVMnKQorICAgIHsKKyAgICAgIGZvcmVhY2ggbXkgJHZhciAodmFyaWFibGVzICRwcmltYXJ5KQorCXsKKwkgIG15ICR2YXJuYW1lID0gJHZhci0+bmFtZTsKKwkgICMgQSBjb25maWd1cmUgdmFyaWFibGUgaXMgYWx3YXlzIGxlZ2l0aW1hdGUuCisJICBuZXh0IGlmIGV4aXN0cyAkY29uZmlndXJlX3ZhcnN7JHZhcm5hbWV9OworCisJICBmb3IgbXkgJGNvbmQgKCR2YXItPmNvbmRpdGlvbnMtPmNvbmRzKQorCSAgICB7CisJICAgICAgJHZhcm5hbWUgPX4gL14oPzpub2Jhc2VfKT8oPzpkaXN0X3xub2Rpc3RfKT8oLiopX1tbOmFsbnVtOl1dKyQvOworCSAgICAgIG1zZ192YXIgKCdzeW50YXgnLCAkdmFyLCAidmFyaWFibGUgYCR2YXJuYW1lJyBpcyBkZWZpbmVkIGJ1dCBubyIKKwkJICAgICAgIC4gIiBwcm9ncmFtIG9yXG5saWJyYXJ5IGhhcyBgJDEnIGFzIGNhbm9uaWNhbCBuYW1lIgorCQkgICAgICAgLiAiIChwb3NzaWJsZSB0eXBvKSIpCisJCXVubGVzcyAkdmFyLT5yZGVmICgkY29uZCktPnNlZW47CisJICAgIH0KKwl9CisgICAgfQorfQorCisKKyMgSGFuZGxlIHNjcmlwdHMuCitzdWIgaGFuZGxlX3NjcmlwdHMKK3sKKyAgICAjIE5PVEUgd2Ugbm8gbG9uZ2VyIGF1dG9tYXRpY2FsbHkgY2xlYW4gU0NSSVBUUywgYmVjYXVzZSBpdCBpcworICAgICMgdXNlZnVsIHRvIHNvbWV0aW1lcyBkaXN0cmlidXRlIHNjcmlwdHMgdmVyYmF0aW0uICBUaGlzIGhhcHBlbnMKKyAgICAjIGUuZy4gaW4gQXV0b21ha2UgaXRzZWxmLgorICAgICZhbV9pbnN0YWxsX3ZhciAoJy1jYW5kaXN0JywgJ3NjcmlwdHMnLCAnU0NSSVBUUycsCisJCSAgICAgJ2JpbicsICdzYmluJywgJ2xpYmV4ZWMnLCAncGtnZGF0YScsCisJCSAgICAgJ25vaW5zdCcsICdjaGVjaycpOworfQorCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEhhbmRsaW5nIFRleGluZm8gZmlsZXMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgKCRPVVRGSUxFLCAkVkZJTEUsIEBDTEVBTl9GSUxFUykKKyMgJnNjYW5fdGV4aW5mb19maWxlICgkRklMRU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAkT1VURklMRSAgICAgLSBuYW1lIG9mIHRoZSBpbmZvIGZpbGUgcHJvZHVjZWQgYnkgJEZJTEVOQU1FLgorIyAkVkZJTEUgICAgICAgLSBuYW1lIG9mIHRoZSB2ZXJzaW9uLnRleGkgZmlsZSB1c2VkICh1bmRlZiBpZiBub25lKS4KKyMgQENMRUFOX0ZJTEVTIC0gbGlzdCBvZiBieXByb2R1Y3RzIChpbmRleGVzIGV0Yy4pCitzdWIgc2Nhbl90ZXhpbmZvX2ZpbGUgKCQpCit7CisgIG15ICgkZmlsZW5hbWUpID0gQF87CisKKyAgIyBTb21lIG9mIHRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9ucyBhcmUgYWx3YXlzIGNyZWF0ZWQsIG5vIG1hdHRlcgorICAjIHdoZXRoZXIgaW5kZXhlcyBhcmUgdXNlZCBvciBub3QuICBPdGhlciAobGlrZSBjcHMsIGZucywgLi4uIHBncykKKyAgIyBhcmUgb25seSBjcmVhdGVkIHdoZW4gdGhleSBhcmUgdXNlZC4gIFdlIHVzZWQgdG8gc2NhbiAkRklMRU5BTUUKKyAgIyBmb3IgdGhlaXIgdXNlLCBidXQgdGhhdCBpcyBub3QgZW5vdWdoOiB0aGV5IGNvdWxkIGJlIHVzZWQgaW4KKyAgIyBpbmNsdWRlZCBmaWxlcy4gIFdlIGNhbid0IHNjYW4gaW5jbHVkZWQgZmlsZXMgYmVjYXVzZSB3ZSBkb24ndAorICAjIGtub3cgdGhlIGluY2x1ZGUgcGF0aC4gIFRoZXJlZm9yZSB3ZSBhbHdheXMgZXJhc2UgdGhlc2UgZmlsZXMsIG5vCisgICMgbWF0dGVyIHdoZXRoZXIgdGhleSBhcmUgdXNlZCBvciBub3QuCisgICMKKyAgIyAodG1wIGlzIG9ubHkgY3JlYXRlZCBpZiBhbiBAbWFjcm8gaXMgdXNlZCBhbmQgYSBjZXJ0YWluIGUtVGVYCisgICMgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlLikKKyAgbXkgJWNsZWFuX3N1ZmZpeGVzID0KKyAgICBtYXAgeyAkXyA9PiAxIH0gKHF3KGF1eCBsb2cgdG9jIHRtcAorCQkJY3AgY3BzCisJCQlmbiBmbnMKKwkJCWt5IGt5cworCQkJdnIgdnJzCisJCQl0cCB0cHMKKwkJCXBnIHBncykpOyAjIGdyZXAgJ25ldy4qaW5kZXgnIHRleGluZm8udGV4CisKKyAgbXkgJHRleGkgPSBuZXcgQXV0b21ha2U6OlhGaWxlICI8ICRmaWxlbmFtZSI7CisgIHZlcmIgInJlYWRpbmcgJGZpbGVuYW1lIjsKKworICBteSAoJG91dGZpbGUsICR2ZmlsZSk7CisgIHdoaWxlICgkXyA9ICR0ZXhpLT5nZXRsaW5lKQorICAgIHsKKyAgICAgIGlmICgvXlxAc2V0ZmlsZW5hbWUgKyhcUyspLykKKwl7CisJICAjIEhvbm9yIG9ubHkgdGhlIGZpcnN0IEBzZXRmaWxlbmFtZS4gIChJdCdzIHBvc3NpYmxlIHRvIGhhdmUKKwkgICMgbW9yZSBvY2N1cnJlbmNlcyBsYXRlciBpZiB0aGUgbWFudWFsIHNob3dzIGV4YW1wbGVzIG9mIGhvdworCSAgIyB0byB1c2UgQHNldGZpbGVuYW1lLi4uKQorCSAgbmV4dCBpZiAkb3V0ZmlsZTsKKworCSAgJG91dGZpbGUgPSAkMTsKKwkgIGlmICgkb3V0ZmlsZSA9fiAvXC4oW14uXSspJC8gJiYgJDEgbmUgJ2luZm8nKQorCSAgICB7CisJICAgICAgZXJyb3IgKCIkZmlsZW5hbWU6JC4iLAorCQkgICAgICJvdXRwdXQgYCRvdXRmaWxlJyBoYXMgdW5yZWNvZ25pemVkIGV4dGVuc2lvbiIpOworCSAgICAgIHJldHVybjsKKwkgICAgfQorCX0KKyAgICAgICMgQSAidmVyc2lvbi50ZXhpIiBmaWxlIGlzIGFjdHVhbGx5IGFueSBmaWxlIHdob3NlIG5hbWUgbWF0Y2hlcworICAgICAgIyAidmVycyoudGV4aSIuCisgICAgICBlbHNpZiAoL15cQGluY2x1ZGVccysodmVyc1teLl0qXC50ZXhpKVxzKiQvKQorCXsKKwkgICR2ZmlsZSA9ICQxOworCX0KKworICAgICAgIyBUcnkgdG8gZmluZCBuZXcgb3IgdW51c2VkIGluZGV4ZXMuCisKKyAgICAgICMgQ3JlYXRpbmcgYSBuZXcgY2F0ZWdvcnkgb2YgaW5kZXguCisgICAgICBlbHNpZiAoL15cQGRlZihjb2RlKT9pbmRleCAoXHcrKS8pCisJeworCSAgJGNsZWFuX3N1ZmZpeGVzeyQyfSA9IDE7CisJICAkY2xlYW5fc3VmZml4ZXN7IiQycyJ9ID0gMTsKKwl9CisKKyAgICAgICMgTWVyZ2luZyBhbiBpbmRleCBpbnRvIGFuIGFub3RoZXIuCisgICAgICBlbHNpZiAoL15cQHN5bihjb2RlKT9pbmRleCAoXHcrKSAoXHcrKS8pCisJeworCSAgZGVsZXRlICRjbGVhbl9zdWZmaXhlc3siJDJzIn07CisJICAkY2xlYW5fc3VmZml4ZXN7IiQzcyJ9ID0gMTsKKwl9CisKKyAgICB9CisKKyAgaWYgKCEgJG91dGZpbGUpCisgICAgeworICAgICAgZXJyX2FtICJgJGZpbGVuYW1lJyBtaXNzaW5nIFxAc2V0ZmlsZW5hbWUiOworICAgICAgcmV0dXJuOworICAgIH0KKworICBteSAkaW5mb2Jhc2UgPSBiYXNlbmFtZSAoJGZpbGVuYW1lKTsKKyAgJGluZm9iYXNlID1+IHMvXC50ZT94aShuZm8pPyQvLzsKKyAgcmV0dXJuICgkb3V0ZmlsZSwgJHZmaWxlLAorCSAgbWFwIHsgIiRpbmZvYmFzZS4kXyIgfSAoc29ydCBrZXlzICVjbGVhbl9zdWZmaXhlcykpOworfQorCisKKyMgKCRESVJTVEFNUCwgQENMRUFOX0ZJTEVTKQorIyBvdXRwdXRfdGV4aW5mb19idWlsZF9ydWxlcyAoJFNPVVJDRSwgJERFU1QsICRJTlNSQywgQERFUEVOREVOQ0lFUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNPVVJDRSAtIHRoZSBzb3VyY2UgVGV4aW5mbyBmaWxlCisjIERFU1QgLSB0aGUgZGVzdGluYXRpb24gSW5mbyBmaWxlCisjIElOU1JDIC0gd2V0aGVyIERFU1Qgc2hvdWxkIGJlIGJ1aWx0IGluIHRoZSBzb3VyY2UgdHJlZQorIyBERVBFTkRFTkNJRVMgLSBrbm93biBkZXBlbmRlbmNpZXMKK3N1YiBvdXRwdXRfdGV4aW5mb19idWlsZF9ydWxlcyAoJCQkQCkKK3sKKyAgbXkgKCRzb3VyY2UsICRkZXN0LCAkaW5zcmMsIEBkZXBzKSA9IEBfOworCisgICMgU3BsaXQgYGEudGV4aScgaW50byBgYScgYW5kIGAudGV4aScuCisgIG15ICgkc3BmeCwgJHNzZngpID0gKCRzb3VyY2UgPX4gL14oLio/KShcLlteLl0qKT8kLyk7CisgIG15ICgkZHBmeCwgJGRzZngpID0gKCRkZXN0ID1+IC9eKC4qPykoXC5bXi5dKik/JC8pOworCisgICRzc2Z4IHx8PSAiIjsKKyAgJGRzZnggfHw9ICIiOworCisgICMgV2UgY2FuIG91dHB1dCB0d28ga2luZHMgb2YgcnVsZXM6IHRoZSAiZ2VuZXJpYyIgcnVsZXMgdXNlIE1ha2UKKyAgIyBzdWZmaXggcnVsZXMgYW5kIGFyZSBhcHByb3ByaWF0ZSB3aGVuICRzb3VyY2UgYW5kICRkZXN0IGRvIG5vdCBsaWUKKyAgIyBpbiBhIHN1Yi1kaXJlY3Rvcnk7IHRoZSAic3BlY2lmaWMiIHJ1bGVzIGFyZSBuZWVkZWQgaW4gdGhlIG90aGVyCisgICMgY2FzZS4KKyAgIworICAjIFRoZSBmb3JtZXIgYXJlIG91dHB1dCBvbmx5IG9uY2UgKHRoaXMgaXMgbm90IHJlYWxseSBhcHBhcmVudCBoZXJlLAorICAjIGJ1dCBqdXN0IHJlbWVtYmVyIHRoYXQgc29tZSBsb2dpYyBkZWVwZXIgaW4gQXV0b21ha2Ugd2lsbCBub3QKKyAgIyBvdXRwdXQgdGhlIHNhbWUgcnVsZSB0d2ljZSk7IHdoaWxlIHRoZSBsYXRlciBuZWVkIHRvIGJlIG91dHB1dCBmb3IKKyAgIyBlYWNoIFRleGluZm8gc291cmNlLgorICBteSAkZ2VuZXJpYzsKKyAgbXkgJG1ha2VpbmZvZmxhZ3M7CisgIG15ICRzZGlyID0gZGlybmFtZSAkc291cmNlOworICBpZiAoJHNkaXIgZXEgJy4nICYmIGRpcm5hbWUgKCRkZXN0KSBlcSAnLicpCisgICAgeworICAgICAgJGdlbmVyaWMgPSAxOworICAgICAgJG1ha2VpbmZvZmxhZ3MgPSAnLUkgJChzcmNkaXIpJzsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAkZ2VuZXJpYyA9IDA7CisgICAgICAkbWFrZWluZm9mbGFncyA9ICItSSAkc2RpciAtSSBcJChzcmNkaXIpLyRzZGlyIjsKKyAgICB9CisKKyAgIyBBIGRpcmVjdG9yeSBjYW4gY29udGFpbiB0d28ga2luZHMgb2YgaW5mbyBmaWxlczogc29tZSBidWlsdCBpbiB0aGUKKyAgIyBzb3VyY2UgdHJlZSwgYW5kIHNvbWUgYnVpbHQgaW4gdGhlIGJ1aWxkIHRyZWUuICBUaGUgcnVsZXMgYXJlCisgICMgZGlmZmVyZW50IGluIGVhY2ggY2FzZS4gIEhvd2V2ZXIgd2UgY2Fubm90IG91dHB1dCB0d28gZGlmZmVyZW50CisgICMgc2V0IG9mIGdlbmVyaWMgcnVsZXMuICBCZWNhdXNlIGluLXNvdXJjZSBidWlsZHMgYXJlIG1vcmUgdXN1YWwsIHdlCisgICMgdXNlIGdlbmVyaWMgcnVsZXMgaW4gdGhpcyBjYXNlIGFuZCBmYWxsIGJhY2sgdG8gInNwZWNpZmljIiBydWxlcworICAjIGZvciBidWlsZC1kaXIgYnVpbGRzLiAgKEl0IHNob3VsZCBub3QgYmUgYSBwcm9ibGVtIHRvIGludmVydCB0aGlzCisgICMgaWYgbmVlZGVkLikKKyAgJGdlbmVyaWMgPSAwIHVubGVzcyAkaW5zcmM7CisKKyAgIyBXZSBjYW5ub3QgdXNlIGEgc3VmZml4IHJ1bGUgdG8gYnVpbGQgaW5mbyBmaWxlcyB3aXRoIGFuIGVtcHR5CisgICMgZXh0ZW5zaW9uLiAgT3RoZXJ3aXNlIHdlIHdvdWxkIG91dHB1dCBhIHNpbmdsZSBzdWZmaXggaW5mZXJlbmNlCisgICMgcnVsZSwgd2l0aCBzZXBhcmF0ZSBkZXBlbmRlbmNpZXMsIGFzIGluCisgICMKKyAgIyAgICAudGV4aToKKyAgIyAgICAgICAgICAgICAkKE1BS0VJTkZPKSAuLi4KKyAgIyAgICBmb28uaW5mbzogZm9vLnRleGkKKyAgIworICAjIHdoaWNoIGNvbmZ1c2UgU29sYXJpcyBtYWtlLiAgKFNlZSB0aGUgQXV0b2NvbmYgbWFudWFsIGZvcgorICAjIGRldGFpbHMuKSAgVGhlcmVmb3JlIHdlIHVzZSBhIHNwZWNpZmljIHJ1bGUgaW4gdGhpcyBjYXNlLiAgVGhpcworICAjIGFwcGxpZXMgdG8gaW5mbyBmaWxlcyBvbmx5IChkdmkgYW5kIHBkZiBmaWxlcyBhbHdheXMgaGF2ZSBhbgorICAjIGV4dGVuc2lvbikuCisgIG15ICRnZW5lcmljX2luZm8gPSAoJGdlbmVyaWMgJiYgJGRzZngpID8gMSA6IDA7CisKKyAgIyBJZiB0aGUgcmVzdWx0aW5nIGZpbGUgbGllIGludG8gYSBzdWJkaXJlY3RvcnksCisgICMgbWFrZSBzdXJlIHRoaXMgZGlyZWN0b3J5IHdpbGwgZXhpc3QuCisgIG15ICRkaXJzdGFtcCA9IHJlcXVpcmVfYnVpbGRfZGlyZWN0b3J5X21heWJlICgkZGVzdCk7CisKKyAgbXkgJGRpcGZ4ID0gKCRpbnNyYyA/ICckKHNyY2RpcikvJyA6ICcnKSAuICRkcGZ4OworCisgICRvdXRwdXRfcnVsZXMgLj0gZmlsZV9jb250ZW50cyAoJ3RleGlidWlsZCcsCisJCQkJICBuZXcgQXV0b21ha2U6OkxvY2F0aW9uLAorCQkJCSAgREVQUyAgICAgICAgICAgICA9PiAiQGRlcHMiLAorCQkJCSAgREVTVF9QUkVGSVggICAgICA9PiAkZHBmeCwKKwkJCQkgIERFU1RfSU5GT19QUkVGSVggPT4gJGRpcGZ4LAorCQkJCSAgREVTVF9TVUZGSVggICAgICA9PiAkZHNmeCwKKwkJCQkgIERJUlNUQU1QICAgICAgICAgPT4gJGRpcnN0YW1wLAorCQkJCSAgR0VORVJJQyAgICAgICAgICA9PiAkZ2VuZXJpYywKKwkJCQkgIEdFTkVSSUNfSU5GTyAgICAgPT4gJGdlbmVyaWNfaW5mbywKKwkJCQkgIElOU1JDCQkgICA9PiAkaW5zcmMsCisJCQkJICBNQUtFSU5GT0ZMQUdTICAgID0+ICRtYWtlaW5mb2ZsYWdzLAorCQkJCSAgU09VUkNFICAgICAgICAgICA9PiAoJGdlbmVyaWMKKwkJCQkJCSAgICAgICA/ICckPCcgOiAkc291cmNlKSwKKwkJCQkgIFNPVVJDRV9JTkZPICAgICAgPT4gKCRnZW5lcmljX2luZm8KKwkJCQkJCSAgICAgICA/ICckPCcgOiAkc291cmNlKSwKKwkJCQkgIFNPVVJDRV9SRUFMICAgICAgPT4gJHNvdXJjZSwKKwkJCQkgIFNPVVJDRV9TVUZGSVggICAgPT4gJHNzZngsCisJCQkJICApOworICByZXR1cm4gKCRkaXJzdGFtcCwgIiRkcGZ4LmR2aSIsICIkZHBmeC5wZGYiLCAiJGRwZngucHMiLCAiJGRwZnguaHRtbCIpOworfQorCisKKyMgKCRNT1NUTFlDTEVBTiwgJFRFWElDTEVBTiwgJE1BSU5UQ0xFQU4pCisjIGhhbmRsZV90ZXhpbmZvX2hlbHBlciAoJGluZm9fdGV4aW5mb3MpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEhhbmRsZSBhbGwgVGV4aW5mbyBzb3VyY2U7IGhlbHBlciBmb3IgaGFuZGxlX3RleGluZm8uCitzdWIgaGFuZGxlX3RleGluZm9faGVscGVyICgkKQoreworICBteSAoJGluZm9fdGV4aW5mb3MpID0gQF87CisgIG15IChAaW5mb2Jhc2UsIEBpbmZvX2RlcHNfbGlzdCwgQHRleGlfZGVwcyk7CisgIG15ICV2ZXJzaW9uczsKKyAgbXkgJGRvbmUgPSAwOworICBteSAoQG1vc3RseV9jbGVhbnMsIEB0ZXhpX2NsZWFucywgQG1haW50X2NsZWFucykgPSAoJycsICcnLCAnJyk7CisKKyAgIyBCdWlsZCBhIHJlZ2V4IG1hdGNoaW5nIHVzZXItY2xlYW5lZCBmaWxlcy4KKyAgbXkgJGQgPSB2YXIgJ0RJU1RDTEVBTkZJTEVTJzsKKyAgbXkgJGMgPSB2YXIgJ0NMRUFORklMRVMnOworICBteSBAZiA9ICgpOworICBwdXNoIEBmLCAkZC0+dmFsdWVfYXNfbGlzdF9yZWN1cnNpdmUgKGlubmVyX2V4cGFuZCA9PiAxKSBpZiAkZDsKKyAgcHVzaCBAZiwgJGMtPnZhbHVlX2FzX2xpc3RfcmVjdXJzaXZlIChpbm5lcl9leHBhbmQgPT4gMSkgaWYgJGM7CisgIEBmID0gbWFwIHsgc3xbXkEtWmEtel8wLTkqXFtcXVwtXXxcXCQmfGc7IHN8XCp8W14vXSp8ZzsgJF87IH0gQGY7CisgIG15ICR1c2VyX2NsZWFuZWRfZmlsZXMgPSAnXig/OicgLiBqb2luICgnfCcsIEBmKSAuICcpJCc7CisKKyAgZm9yZWFjaCBteSAkdGV4aQorICAgICAgKCRpbmZvX3RleGluZm9zLT52YWx1ZV9hc19saXN0X3JlY3Vyc2l2ZSAoaW5uZXJfZXhwYW5kID0+IDEpKQorICAgIHsKKyAgICAgIG15ICRpbmZvYmFzZSA9ICR0ZXhpOworICAgICAgJGluZm9iYXNlID1+IHMvXC4odHhpfHRleGluZm98dGV4aSkkLy87CisKKyAgICAgIGlmICgkaW5mb2Jhc2UgZXEgJHRleGkpCisJeworCSAgIyBGSVhNRTogcmVwb3J0IGxpbmUgbnVtYmVyLgorCSAgZXJyX2FtICJ0ZXhpbmZvIGZpbGUgYCR0ZXhpJyBoYXMgdW5yZWNvZ25pemVkIGV4dGVuc2lvbiI7CisJICBuZXh0OworCX0KKworICAgICAgcHVzaCBAaW5mb2Jhc2UsICRpbmZvYmFzZTsKKworICAgICAgIyBJZiAndmVyc2lvbi50ZXhpJyBpcyByZWZlcmVuY2VkIGJ5IGlucHV0IGZpbGUsIHRoZW4gaW5jbHVkZQorICAgICAgIyBhdXRvbWF0aWMgdmVyc2lvbmluZyBjYXBhYmlsaXR5LgorICAgICAgbXkgKCRvdXRfZmlsZSwgJHZ0ZXhpLCBAY2xlYW5fZmlsZXMpID0KKwlzY2FuX3RleGluZm9fZmlsZSAoIiRyZWxhdGl2ZV9kaXIvJHRleGkiKQorCW9yIG5leHQ7CisgICAgICBwdXNoIChAbW9zdGx5X2NsZWFucywgQGNsZWFuX2ZpbGVzKTsKKworICAgICAgIyBJZiB0aGUgVGV4aW5mbyBzb3VyY2UgaXMgaW4gYSBzdWJkaXJlY3RvcnksIGNyZWF0ZSB0aGUKKyAgICAgICMgcmVzdWx0aW5nIGluZm8gaW4gdGhpcyBzdWJkaXJlY3RvcnkuICBJZiBpdCBpcyBpbiB0aGUgY3VycmVudAorICAgICAgIyBkaXJlY3RvcnksIHRyeSBoYXJkIHRvIG5vdCBwcmVmaXggIi4vIiBiZWNhdXNlIGl0IGJyZWFrcyB0aGUKKyAgICAgICMgZ2VuZXJpYyBydWxlcy4KKyAgICAgIG15ICRvdXRkaXIgPSBkaXJuYW1lICgkdGV4aSkgLiAnLyc7CisgICAgICAkb3V0ZGlyID0gIiIgaWYgJG91dGRpciBlcSAnLi8nOworICAgICAgJG91dF9maWxlID0gICRvdXRkaXIgLiAkb3V0X2ZpbGU7CisKKyAgICAgICMgVW50aWwgQXV0b21ha2UgMS42LjMsIC5pbmZvIGZpbGVzIHdlcmUgYnVpbHQgaW4gdGhlCisgICAgICAjIHNvdXJjZSB0cmVlLiAgVGhpcyB3YXMgYW4gb2JzdGFjbGUgdG8gdGhlIHN1cHBvcnQgb2YKKyAgICAgICMgbm9uLWRpc3RyaWJ1dGVkIC5pbmZvIGZpbGVzLCBhbmQgbm9uLWRpc3RyaWJ1dGVkIC50ZXhpCisgICAgICAjIGZpbGVzLgorICAgICAgIworICAgICAgIyAqIE5vbi1kaXN0cmlidXRlZCAudGV4aSBmaWxlcyBpcyBpbXBvcnRhbnQgaW4gc29tZSBwYWNrYWdlcworICAgICAgIyAgIHdoZXJlIC50ZXhpIGZpbGVzIGFyZSBidWlsdCBhdCBtYWtlIHRpbWUsIHByb2JhYmx5IHVzaW5nCisgICAgICAjICAgb3RoZXIgYmluYXJpZXMgYnVpbHQgaW4gdGhlIHBhY2thZ2UgaXRzZWxmLCBtYXliZSB1c2luZworICAgICAgIyAgIHRvb2xzIG9yIGluZm9ybWF0aW9uIGZvdW5kIG9uIHRoZSBidWlsZCBob3N0LiAgQmVjYXVzZQorICAgICAgIyAgIHRoZXNlIGZpbGVzIGFyZSBub3QgZGlzdHJpYnV0ZWQgdGhleSBhcmUgYWx3YXlzIHJlYnVpbHQKKyAgICAgICMgICBhdCBtYWtlIHRpbWU7IHRoZXkgc2hvdWxkIHRoZXJlZm9yZSBub3QgbGllIGluIHRoZSBzb3VyY2UKKyAgICAgICMgICBkaXJlY3RvcnkuICBPbmUgcGxhbiB3YXMgdG8gc3VwcG9ydCB0aGlzIHVzaW5nCisgICAgICAjICAgbm9kaXN0X2luZm9fVEVYSU5GT1Mgb3Igc29tZXRoaW5nIHNpbWlsYXIuICAoRG9pbmcgdGhpcworICAgICAgIyAgIHJlcXVpcmVzIHNvbWUgc2FuaXR5IGNoZWNrcy4gIEZvciBpbnN0YW5jZSBBdXRvbWFrZSBzaG91bGQKKyAgICAgICMgICBub3QgYWxsb3c6CisgICAgICAjICAgICAgZGlzdF9pbmZvX1RFWElORk9TID0gZm9vLnRleGkKKyAgICAgICMgICAgICBub2Rpc3RfZm9vX1RFWElORk9TID0gaW5jbHVkZWQudGV4aQorICAgICAgIyAgIGJlY2F1c2UgYSBkaXN0cmlidXRlZCBmaWxlIHNob3VsZCBuZXZlciBkZXBlbmQgb24gYQorICAgICAgIyAgIG5vbi1kaXN0cmlidXRlZCBmaWxlLikKKyAgICAgICMKKyAgICAgICMgKiBJZiAudGV4aSBmaWxlcyBhcmUgbm90IGRpc3RyaWJ1dGVkLCB0aGVuIC5pbmZvIGZpbGVzIHNob3VsZAorICAgICAgIyAgIG5vdCBiZSBkaXN0cmlidXRlZCBlaXRoZXIuICBUaGVyZSBhcmUgYWxzbyBjYXNlcyB3aGVyZSBvbmUKKyAgICAgICMgICB3YW50cyB0byBkaXN0cmlidXRlIC50ZXhpIGZpbGVzLCBidXQgZG9lcyBub3Qgd2FudCB0bworICAgICAgIyAgIGRpc3RyaWJ1dGUgdGhlIC5pbmZvIGZpbGVzLiAgRm9yIGluc3RhbmNlIHRoZSBUZXhpbmZvIHBhY2thZ2UKKyAgICAgICMgICBkaXN0cmlidXRlcyB0aGUgdG9vbCB1c2VkIHRvIGJ1aWxkIHRoZXNlIGZpbGVzOyBpdCB3b3VsZAorICAgICAgIyAgIGJlIGEgd2FzdGUgb2Ygc3BhY2UgdG8gZGlzdHJpYnV0ZSB0aGVtLiAgSXQncyBub3QgY2xlYXIKKyAgICAgICMgICB3aGljaCBzeW50YXggd2Ugc2hvdWxkIHVzZSB0byBpbmRpY2F0ZSB0aGF0IC5pbmZvIGZpbGVzIHNob3VsZAorICAgICAgIyAgIG5vdCBiZSBkaXN0cmlidXRlZC4gIEFraW0gRGVtYWlsbGUgc3VnZ2VzdGVkIHRoYXQgZXZlbnR1YWxseQorICAgICAgIyAgIHdlIHN3aXRjaCB0byBhIG5ldyBzeW50YXg6CisgICAgICAjICAgfCAgTWF5YmUgd2Ugc2hvdWxkIHRha2Ugc29tZSBpbnNwaXJhdGlvbiBmcm9tIHdoYXQncyBhbHJlYWR5CisgICAgICAjICAgfCAgZG9uZSBpbiB0aGUgcmVzdCBvZiBBdXRvbWFrZS4gIE1heWJlIHRoZXJlIGlzIHRvbyBtdWNoCisgICAgICAjICAgfCAgc3ludGFjdGljIHN1Z2FyIGhlcmUsIGFuZCB5b3Ugd2FudAorICAgICAgIyAgIHwgICAgIG5vZGlzdF9JTkZPID0gYmFyLmluZm8KKyAgICAgICMgICB8ICAgICBkaXN0X2Jhcl9pbmZvX1NPVVJDRVMgPSBiYXIudGV4aQorICAgICAgIyAgIHwgICAgIGJhcl90ZXhpX0RFUEVOREVOQ0lFUyA9IGZvby50ZXhpCisgICAgICAjICAgfCAgd2l0aCBhIGJpdCBvZiBtYWdpYyB0byBoYXZlIGJhci5pbmZvIHJlcHJlc2VudCB0aGUgd2hvbGUKKyAgICAgICMgICB8ICBiYXIqaW5mbyBzZXQuICBUaGF0J3MgYSBsb3QgbW9yZSB2ZXJib3NlIHRoYXQgdGhlIGN1cnJlbnQKKyAgICAgICMgICB8ICBzaXR1YXRpb24sIGJ1dCBpdCBpcyAjIG5vdCBuZXcsIGhlbmNlIHRoZSB1c2VyIGhhcyBsZXNzCisgICAgICAjICAgfCAgdG8gbGVhcm4uCisgICAgICAjCSAgfAorICAgICAgIyAgIHwgIEJ1dCB0aGVyZSBpcyBzdGlsbCB0b28gbXVjaCByb29tIGZvciBtZWFuaW5nbGVzcyBzcGVjczoKKyAgICAgICMgICB8ICAgICBub2Rpc3RfSU5GTyA9IGJhci5pbmZvCisgICAgICAjICAgfCAgICAgZGlzdF9iYXJfaW5mb19TT1VSQ0VTID0gYmFyLnRleGkKKyAgICAgICMgICB8ICAgICBkaXN0X1BTID0gYmFyLnBzIHNvbWV0aGluZy13cml0dGVuLWJ5LWhhbmQucHMKKyAgICAgICMgICB8ICAgICBub2Rpc3RfYmFyX3BzX1NPVVJDRVMgPSBiYXIudGV4aQorICAgICAgIyAgIHwgICAgIGJhcl90ZXhpX0RFUEVOREVOQ0lFUyA9IGZvby50ZXhpCisgICAgICAjICAgfCAgaGVyZSBiYXIudGV4aSBpcyBkaXN0XyBpbiBsaW5lIDIsIGFuZCBub2Rpc3RfIGluIDQuCisgICAgICAjCisgICAgICAjIEJhY2sgdG8gdGhlIHBvaW50LCBpdCBzaG91bGQgYmUgY2xlYXIgdGhhdCBpbiBvcmRlciB0byBzdXBwb3J0CisgICAgICAjIG5vbi1kaXN0cmlidXRlZCAuaW5mbyBmaWxlcywgd2UgbmVlZCB0byBidWlsZCB0aGVtIGluIHRoZQorICAgICAgIyBidWlsZCB0cmVlLCBub3QgaW4gdGhlIHNvdXJjZSB0cmVlIChub24tZGlzdHJpYnV0ZWQgLnRleGkKKyAgICAgICMgZmlsZXMgYXJlIGxlc3Mgb2YgYSBwcm9ibGVtLCBiZWNhdXNlIHdlIGRvIG5vdCBvdXRwdXQgYnVpbGQKKyAgICAgICMgcnVsZXMgZm9yIHRoZW0pLiAgSW4gQXV0b21ha2UgMS43IC5pbmZvIGJ1aWxkIHJ1bGVzIGhhdmUgYmVlbgorICAgICAgIyBsYXJnZWx5IGNsZWFuZWQgdXAgc28gdGhhdCAuaW5mbyBmaWxlcyBnZXQgYWx3YXlzIGJ1aWxkIGluIHRoZQorICAgICAgIyBidWlsZCB0cmVlLCBldmVuIHdoZW4gZGlzdHJpYnV0ZWQuICBUaGUgaWRlYSB3YXMgdGhhdAorICAgICAgIyAgICgxKSBpZiBkdXJpbmcgYSBWUEFUSCBidWlsZCB0aGUgLmluZm8gZmlsZSB3YXMgZm91bmQgdG8gYmUKKyAgICAgICMgICAgICAgYWJzZW50IG9yIG91dC1vZi1kYXRlIChpbiB0aGUgc291cmNlIHRyZWUgb3IgaW4gdGhlCisgICAgICAjICAgICAgIGJ1aWxkIHRyZWUpLCBNYWtlIHdvdWxkIHJlYnVpbGQgaXQgaW4gdGhlIGJ1aWxkIHRyZWUuCisgICAgICAjICAgICAgIElmIGFuIHVwLXRvLWRhdGUgc291cmNlLXRyZWUgb2YgdGhlIC5pbmZvIGZpbGUgZXhpc3RlZCwKKyAgICAgICMgICAgICAgbWFrZSB3b3VsZCBub3QgcmVidWlsZCBpdCBpbiB0aGUgYnVpbGQgdHJlZS4KKyAgICAgICMgICAoMikgaGF2aW5nIHR3byBjb3BpZXMgb2YgLmluZm8gZmlsZXMsIG9uZSBpbiB0aGUgc291cmNlIHRyZWUKKyAgICAgICMgICAgICAgYW5kIG9uZSAobmV3ZXIpIGluIHRoZSBidWlsZCB0cmVlIGlzIG5vdCBhIHByb2JsZW0KKyAgICAgICMgICAgICAgYmVjYXVzZSBgbWFrZSBkaXN0JyBhbHdheXMgcGljayBmaWxlcyBpbiB0aGUgYnVpbGQgdHJlZQorICAgICAgIyAgICAgICBmaXJzdC4KKyAgICAgICMgSG93ZXZlciBpdCB0dXJuZWQgb3V0IHRoZSBiZSBhIGJhZCBpZGVhIGZvciBzZXZlcmFsIHJlYXNvbnM6CisgICAgICAjICAgKiBUcnU2NCwgT3BlbkJTRCwgYW5kIEZyZWVCU0QgKG5vdCBOZXRCU0QpIE1ha2UgZG8gbm90IGJlaGF2ZQorICAgICAgIyAgICAgbGlrZSBHTlUgTWFrZSBvbiBwb2ludCAoMSkgYWJvdmUuICBUaGVzZSBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICMgICAgIG9mIE1ha2Ugd291bGQgYWx3YXlzIHJlYnVpbGQgLmluZm8gZmlsZXMgaW4gdGhlIGJ1aWxkCisgICAgICAjICAgICB0cmVlLCBldmVuIGlmIHN1Y2ggZmlsZXMgd2VyZSB1cCB0byBkYXRlIGluIHRoZSBzb3VyY2UKKyAgICAgICMgICAgIHRyZWUuICBDb25zZXF1ZW50bHksIGl0IHdhcyBpbXBvc3NpYmxlIHRvIHBlcmZvcm0gYSBWUEFUSAorICAgICAgIyAgICAgYnVpbGQgb2YgYSBwYWNrYWdlIGNvbnRhaW5pbmcgVGV4aW5mbyBmaWxlcyB1c2luZyB0aGVzZQorICAgICAgIyAgICAgTWFrZSBpbXBsZW1lbnRhdGlvbnMuCisgICAgICAjICAgICAoUmVmZXIgdG8gdGhlIEF1dG9jb25mIE1hbnVhbCwgc2VjdGlvbiAiTGltaXRhdGlvbiBvZgorICAgICAgIyAgICAgTWFrZSIsIHBhcmFncmFwaCAiVlBBVEgiLCBpdGVtICJ0YXJnZXQgbG9va3VwIiwgZm9yCisgICAgICAjICAgICBhbiBhY2NvdW50IG9mIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZXNlCisgICAgICAjICAgICBpbXBsZW1lbnRhdGlvbnMuKQorICAgICAgIyAgICogVGhlIEdOVSBDb2RpbmcgU3RhbmRhcmRzIHJlcXVpcmUgdGhlc2UgZmlsZXMgdG8gYmUgYnVpbHQKKyAgICAgICMgICAgIGluIHRoZSBzb3VyY2UtdHJlZSAod2hlbiB0aGV5IGFyZSBkaXN0cmlidXRlZCwgdGhhdCBpcykuCisgICAgICAjICAgKiBLZWVwaW5nIGEgZnJlc2hlciBjb3B5IG9mIGRpc3RyaWJ1dGVkIGZpbGVzIGluIHRoZQorICAgICAgIyAgICAgYnVpbGQgdHJlZSBjYW4gYmUgYW5ub3lpbmcgZHVyaW5nIGRldmVsb3BtZW50IGJlY2F1c2UKKyAgICAgICMgICAgIC0gaWYgdGhlIGZpbGVzIGlzIGtlcHQgdW5kZXIgQ1ZTLCB5b3UgcmVhbGx5IHdhbnQgaXQKKyAgICAgICMgICAgICAgdG8gYmUgdXBkYXRlZCBpbiB0aGUgc291cmNlIHRyZWUKKyAgICAgICMgICAgIC0gaXQgaXMgY29uZnVzaW5nIHRoYXQgYG1ha2UgZGlzdGNsZWFuJyBkb2VzIG5vdCBlcmFzZQorICAgICAgIyAgICAgICBhbGwgZmlsZXMgaW4gdGhlIGJ1aWxkIHRyZWUuCisgICAgICAjCisgICAgICAjIENvbnNlcXVlbnRseSwgc3RhcnRpbmcgd2l0aCBBdXRvbWFrZSAxLjgsIC5pbmZvIGZpbGVzIGFyZQorICAgICAgIyBidWlsdCBpbiB0aGUgc291cmNlIHRyZWUgYWdhaW4uICBCZWNhdXNlIHdlIHN0aWxsIHBsYW4gdG8KKyAgICAgICMgc3VwcG9ydCBub24tZGlzdHJpYnV0ZWQgLmluZm8gZmlsZXMgYXQgc29tZSBwb2ludCwgd2UKKyAgICAgICMgaGF2ZSBhIHNpbmdsZSB2YXJpYWJsZSAoJElOU1JDKSB0aGF0IGNvbnRyb2xzIHdoZXRoZXIKKyAgICAgICMgdGhlIGN1cnJlbnQgLmluZm8gZmlsZSBtdXN0IGJlIGJ1aWx0IGluIHRoZSBzb3VyY2UgdHJlZQorICAgICAgIyBvciBpbiB0aGUgYnVpbGQgdHJlZS4gIEFjdHVhbGx5IHRoaXMgdmFyaWFibGUgaXMgc3dpdGNoZWQKKyAgICAgICMgb2ZmIGZvciAuaW5mbyBmaWxlcyB0aGF0IGFwcGVhciB0byBiZSBjbGVhbmVkOyB0aGlzIGlzCisgICAgICAjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggcGFja2FnZSBzdWNoIGFzIFRleGluZm8sCisgICAgICAjIHdoaWNoIGRvIHRoaW5ncyBsaWtlCisgICAgICAjICAgaW5mb19URVhJTkZPUyA9IHRleGluZm8udHhpIGluZm8tc3RuZC50ZXhpIGluZm8udGV4aQorICAgICAgIyAgIERJU1RDTEVBTkZJTEVTID0gdGV4aW5mbyB0ZXhpbmZvLSogaW5mbyouaW5mbyoKKyAgICAgICMgICAjIERvIG5vdCBjcmVhdGUgaW5mbyBmaWxlcyBmb3IgZGlzdHJpYnV0aW9uLgorICAgICAgIyAgIGRpc3QtaW5mbzoKKyAgICAgICMgaW4gb3JkZXIgbm90IHRvIGRpc3RyaWJ1dGUgLmluZm8gZmlsZXMuCisgICAgICBteSAkaW5zcmMgPSAoJG91dF9maWxlID1+ICR1c2VyX2NsZWFuZWRfZmlsZXMpID8gMCA6IDE7CisKKyAgICAgIG15ICRzb3V0ZGlyID0gJyQoc3JjZGlyKS8nIC4gJG91dGRpcjsKKyAgICAgICRvdXRkaXIgPSAkc291dGRpciBpZiAkaW5zcmM7CisKKyAgICAgICMgSWYgdXNlciBzcGVjaWZpZWQgZmlsZV9URVhJTkZPUywgdGhlbiB1c2UgdGhhdCBhcyBleHBsaWNpdAorICAgICAgIyBkZXBlbmRlbmN5IGxpc3QuCisgICAgICBAdGV4aV9kZXBzID0gKCk7CisgICAgICBwdXNoIChAdGV4aV9kZXBzLCAiJHNvdXRkaXIkdnRleGkiKSBpZiAkdnRleGk7CisKKyAgICAgIG15ICRjYW5vbmljYWwgPSBjYW5vbmljYWxpemUgKCRpbmZvYmFzZSk7CisgICAgICBpZiAodmFyICgkY2Fub25pY2FsIC4gIl9URVhJTkZPUyIpKQorCXsKKwkgIHB1c2ggKEB0ZXhpX2RlcHMsICckKCcgLiAkY2Fub25pY2FsIC4gJ19URVhJTkZPUyknKTsKKwkgIHB1c2hfZGlzdF9jb21tb24gKCckKCcgLiAkY2Fub25pY2FsIC4gJ19URVhJTkZPUyknKTsKKwl9CisKKyAgICAgIG15ICgkZGlyc3RhbXAsIEBjZmlsZXMpID0KKwlvdXRwdXRfdGV4aW5mb19idWlsZF9ydWxlcyAoJHRleGksICRvdXRfZmlsZSwgJGluc3JjLCBAdGV4aV9kZXBzKTsKKyAgICAgIHB1c2ggKEB0ZXhpX2NsZWFucywgQGNmaWxlcyk7CisKKyAgICAgIHB1c2ggKEBpbmZvX2RlcHNfbGlzdCwgJG91dF9maWxlKTsKKworICAgICAgIyBJZiBhIHZlcnMqLnRleGkgZmlsZSBpcyBuZWVkZWQsIGVtaXQgdGhlIHJ1bGUuCisgICAgICBpZiAoJHZ0ZXhpKQorCXsKKwkgIGVycl9hbSAoImAkdnRleGknLCBpbmNsdWRlZCBpbiBgJHRleGknLCAiCisJCSAgLiAiYWxzbyBpbmNsdWRlZCBpbiBgJHZlcnNpb25zeyR2dGV4aX0nIikKKwkgICAgaWYgZGVmaW5lZCAkdmVyc2lvbnN7JHZ0ZXhpfTsKKwkgICR2ZXJzaW9uc3skdnRleGl9ID0gJHRleGk7CisKKwkgICMgV2UgbnVtYmVyIHRoZSBzdGFtcC12dGkgZmlsZXMuICBUaGlzIGlzIGRvYWJsZSBzaW5jZSB0aGUKKwkgICMgYWN0dWFsIG5hbWVzIGRvbid0IG1hdHRlciBtdWNoLiAgV2Ugb25seSBudW1iZXIgc3RhcnRpbmcKKwkgICMgd2l0aCB0aGUgc2Vjb25kIG9uZSwgc28gdGhhdCB0aGUgY29tbW9uIGNhc2UgbG9va3MgbmljZS4KKwkgIG15ICR2dGkgPSAoJGRvbmUgPyAkZG9uZSA6ICd2dGknKTsKKwkgICsrJGRvbmU7CisKKwkgICMgVGhpcyBpcyB1Z2x5LCBidXQgaXQgaXMgb3VyIGhpc3RvcmljYWwgcHJhY3RpY2UuCisJICBpZiAoJGNvbmZpZ19hdXhfZGlyX3NldF9pbl9jb25maWd1cmVfYWMpCisJICAgIHsKKwkgICAgICByZXF1aXJlX2NvbmZfZmlsZV93aXRoX21hY3JvIChUUlVFLCAnaW5mb19URVhJTkZPUycsIEZPUkVJR04sCisJCQkJCSAgICAnbWRhdGUtc2gnKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgcmVxdWlyZV9maWxlX3dpdGhfbWFjcm8gKFRSVUUsICdpbmZvX1RFWElORk9TJywKKwkJCQkgICAgICAgRk9SRUlHTiwgJ21kYXRlLXNoJyk7CisJICAgIH0KKworCSAgbXkgJGNvbmZfZGlyOworCSAgaWYgKCRjb25maWdfYXV4X2Rpcl9zZXRfaW5fY29uZmlndXJlX2FjKQorCSAgICB7CisJICAgICAgJGNvbmZfZGlyID0gIiRhbV9jb25maWdfYXV4X2Rpci8iOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAkY29uZl9kaXIgPSAnJChzcmNkaXIpLyc7CisJICAgIH0KKwkgICRvdXRwdXRfcnVsZXMgLj0gZmlsZV9jb250ZW50cyAoJ3RleGktdmVycycsCisJCQkJCSAgbmV3IEF1dG9tYWtlOjpMb2NhdGlvbiwKKwkJCQkJICBURVhJICAgICA9PiAkdGV4aSwKKwkJCQkJICBWVEkgICAgICA9PiAkdnRpLAorCQkJCQkgIFNUQU1QVlRJID0+ICIke3NvdXRkaXJ9c3RhbXAtJHZ0aSIsCisJCQkJCSAgVlRFWEkgICAgPT4gIiRzb3V0ZGlyJHZ0ZXhpIiwKKwkJCQkJICBNRERJUiAgICA9PiAkY29uZl9kaXIsCisJCQkJCSAgRElSU1RBTVAgPT4gJGRpcnN0YW1wKTsKKwl9CisgICAgfQorCisgICMgSGFuZGxlIGxvY2F0aW9uIG9mIHRleGluZm8udGV4LgorICBteSAkbmVlZF90ZXhpX2ZpbGUgPSAwOworICBteSAkdGV4aW5mb2RpcjsKKyAgaWYgKHZhciAoJ1RFWElORk9fVEVYJykpCisgICAgeworICAgICAgIyBUaGUgdXNlciBkZWZpbmVkIFRFWElORk9fVEVYIHNvIGFzc3VtZSBoZSBrbm93cyB3aGF0IGhlIGlzCisgICAgICAjIGRvaW5nLgorICAgICAgJHRleGluZm9kaXIgPSAoJyQoc3JjZGlyKS8nCisJCSAgICAgLiBkaXJuYW1lICh2YXJpYWJsZV92YWx1ZSAoJ1RFWElORk9fVEVYJykpKTsKKyAgICB9CisgIGVsc2lmIChvcHRpb24gJ2N5Z251cycpCisgICAgeworICAgICAgJHRleGluZm9kaXIgPSAnJCh0b3Bfc3JjZGlyKS8uLi90ZXhpbmZvJzsKKyAgICAgIGRlZmluZV92YXJpYWJsZSAoJ1RFWElORk9fVEVYJywgIiR0ZXhpbmZvZGlyL3RleGluZm8udGV4IiwgSU5URVJOQUwpOworICAgIH0KKyAgZWxzaWYgKCRjb25maWdfYXV4X2Rpcl9zZXRfaW5fY29uZmlndXJlX2FjKQorICAgIHsKKyAgICAgICR0ZXhpbmZvZGlyID0gJGFtX2NvbmZpZ19hdXhfZGlyOworICAgICAgZGVmaW5lX3ZhcmlhYmxlICgnVEVYSU5GT19URVgnLCAiJHRleGluZm9kaXIvdGV4aW5mby50ZXgiLCBJTlRFUk5BTCk7CisgICAgICAkbmVlZF90ZXhpX2ZpbGUgPSAyOyAjIHNvIHRoYXQgd2UgcmVxdWlyZV9jb25mX2ZpbGUgbGF0ZXIKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAkdGV4aW5mb2RpciA9ICckKHNyY2RpciknOworICAgICAgJG5lZWRfdGV4aV9maWxlID0gMTsKKyAgICB9CisgIGRlZmluZV92YXJpYWJsZSAoJ2FtX19URVhJTkZPX1RFWF9ESVInLCAkdGV4aW5mb2RpciwgSU5URVJOQUwpOworCisgIHB1c2ggKEBkaXN0X3RhcmdldHMsICdkaXN0LWluZm8nKTsKKworICBpZiAoISBvcHRpb24gJ25vLWluc3RhbGxpbmZvJykKKyAgICB7CisgICAgICAjIE1ha2Ugc3VyZSBkb2N1bWVudGF0aW9uIGlzIG1hZGUgYW5kIGluc3RhbGxlZCBmaXJzdC4gIFVzZQorICAgICAgIyAkKElORk9fREVQUyksIG5vdCAnaW5mbycsIGJlY2F1c2Ugb3RoZXJ3aXNlIHJlY3Vyc2l2ZSBtYWtlcworICAgICAgIyBnZXQgcnVuIHR3aWNlIGR1cmluZyAibWFrZSBhbGwiLgorICAgICAgdW5zaGlmdCAoQGFsbCwgJyQoSU5GT19ERVBTKScpOworICAgIH0KKworICBkZWZpbmVfZmlsZXNfdmFyaWFibGUgKCJEVklTIiwgQGluZm9iYXNlLCAnZHZpJywgSU5URVJOQUwpOworICBkZWZpbmVfZmlsZXNfdmFyaWFibGUgKCJQREZTIiwgQGluZm9iYXNlLCAncGRmJywgSU5URVJOQUwpOworICBkZWZpbmVfZmlsZXNfdmFyaWFibGUgKCJQU1MiLCBAaW5mb2Jhc2UsICdwcycsIElOVEVSTkFMKTsKKyAgZGVmaW5lX2ZpbGVzX3ZhcmlhYmxlICgiSFRNTFMiLCBAaW5mb2Jhc2UsICdodG1sJywgSU5URVJOQUwpOworCisgICMgVGhpcyBuZXh0IGlzbid0IHN0cmljdGx5IG5lZWRlZCBub3cgLS0gdGhlIHBsYWNlcyB0aGF0IGxvb2sgaGVyZQorICAjIGNvdWxkIGVhc2lseSBiZSBjaGFuZ2VkIHRvIGxvb2sgaW4gaW5mb19URVhJTkZPUy4gIEJ1dCB0aGlzIGlzCisgICMgcHJvYmFibHkgYmV0dGVyLCBpbiBjYXNlIG5vaW5zdF9URVhJTkZPUyBpcyBldmVyIHN1cHBvcnRlZC4KKyAgZGVmaW5lX3ZhcmlhYmxlICgiVEVYSU5GT1MiLCB2YXJpYWJsZV92YWx1ZSAoJ2luZm9fVEVYSU5GT1MnKSwgSU5URVJOQUwpOworCisgICMgRG8gc29tZSBlcnJvciBjaGVja2luZy4gIE5vdGUgdGhhdCB0aGlzIGZpbGUgaXMgbm90IHJlcXVpcmVkCisgICMgd2hlbiBpbiBDeWdudXMgbW9kZTsgaW5zdGVhZCB3ZSBkZWZpbmVkIFRFWElORk9fVEVYIGV4cGxpY2l0bHkKKyAgIyB1cCBhYm92ZS4KKyAgaWYgKCRuZWVkX3RleGlfZmlsZSAmJiAhIG9wdGlvbiAnbm8tdGV4aW5mby50ZXgnKQorICAgIHsKKyAgICAgIGlmICgkbmVlZF90ZXhpX2ZpbGUgPiAxKQorCXsKKwkgIHJlcXVpcmVfY29uZl9maWxlX3dpdGhfbWFjcm8gKFRSVUUsICdpbmZvX1RFWElORk9TJywgRk9SRUlHTiwKKwkJCQkJJ3RleGluZm8udGV4Jyk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHJlcXVpcmVfZmlsZV93aXRoX21hY3JvIChUUlVFLCAnaW5mb19URVhJTkZPUycsIEZPUkVJR04sCisJCQkJICAgJ3RleGluZm8udGV4Jyk7CisJfQorICAgIH0KKworICByZXR1cm4gKG1ha2VmaWxlX3dyYXAgKCIiLCAiXHQgICIsIEBtb3N0bHlfY2xlYW5zKSwKKwkgIG1ha2VmaWxlX3dyYXAgKCIiLCAiXHQgICIsIEB0ZXhpX2NsZWFucyksCisJICBtYWtlZmlsZV93cmFwICgiIiwgIlx0ICAiLCBAbWFpbnRfY2xlYW5zKSk7Cit9CisKKworIyBoYW5kbGVfdGV4aW5mbyAoKQorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBIYW5kbGUgYWxsIFRleGluZm8gc291cmNlLgorc3ViIGhhbmRsZV90ZXhpbmZvICgpCit7CisgIHJlamVjdF92YXIgJ1RFWElORk9TJywgImBURVhJTkZPUycgaXMgYW4gYW5hY2hyb25pc207IHVzZSBgaW5mb19URVhJTkZPUyciOworICAjIEZJWE1FOiBJIHRoaW5rIHRoaXMgaXMgYW4gb2Jzb2xldGUgZnV0dXJlIGZlYXR1cmUgbmFtZS4KKyAgcmVqZWN0X3ZhciAnaHRtbF9URVhJTkZPUycsICJIVE1MIGdlbmVyYXRpb24gbm90IHlldCBzdXBwb3J0ZWQiOworCisgIG15ICRpbmZvX3RleGluZm9zID0gdmFyICgnaW5mb19URVhJTkZPUycpOworICBteSAoJG1vc3RseWNsZWFuLCAkY2xlYW4sICRtYWludGNsZWFuKSA9ICgnJywgJycsICcnKTsKKyAgaWYgKCRpbmZvX3RleGluZm9zKQorICAgIHsKKyAgICAgICgkbW9zdGx5Y2xlYW4sICRjbGVhbiwgJG1haW50Y2xlYW4pID0gaGFuZGxlX3RleGluZm9faGVscGVyICgkaW5mb190ZXhpbmZvcyk7CisgICAgICBjaG9tcCAkbW9zdGx5Y2xlYW47CisgICAgICBjaG9tcCAkY2xlYW47CisgICAgICBjaG9tcCAkbWFpbnRjbGVhbjsKKyAgICB9CisKKyAgJG91dHB1dF9ydWxlcyAuPSAgZmlsZV9jb250ZW50cyAoJ3RleGluZm9zJywKKwkJCQkgICBuZXcgQXV0b21ha2U6OkxvY2F0aW9uLAorCQkJCSAgIE1PU1RMWUNMRUFOICAgPT4gJG1vc3RseWNsZWFuLAorCQkJCSAgIFRFWElDTEVBTiAgICAgPT4gJGNsZWFuLAorCQkJCSAgIE1BSU5UQ0xFQU4gICAgPT4gJG1haW50Y2xlYW4sCisJCQkJICAgJ0xPQ0FMLVRFWElTJyA9PiAhISRpbmZvX3RleGluZm9zKTsKK30KKworCisjIEhhbmRsZSBhbnkgbWFuIHBhZ2VzLgorc3ViIGhhbmRsZV9tYW5fcGFnZXMKK3sKKyAgcmVqZWN0X3ZhciAnTUFOUycsICJgTUFOUycgaXMgYW4gYW5hY2hyb25pc207IHVzZSBgbWFuX01BTlMnIjsKKworICAjIEZpbmQgYWxsIHRoZSBzZWN0aW9ucyBpbiB1c2UuICBXZSBkbyB0aGlzIGJ5IGZpcnN0IGxvb2tpbmcgZm9yCisgICMgInN0YW5kYXJkIiBzZWN0aW9ucywgYW5kIHRoZW4gbG9va2luZyBmb3IgYW55IGFkZGl0aW9uYWwKKyAgIyBzZWN0aW9ucyB1c2VkIGluIG1hbl9NQU5TLgorICBteSAoJXNlY3Rpb25zLCAlbm90cmFuc19zZWN0aW9ucywgJXRyYW5zX3NlY3Rpb25zLAorICAgICAgJW5vdHJhbnNfdmFycywgJXRyYW5zX3ZhcnMsICVub3RyYW5zX3NlY3RfdmFycywgJXRyYW5zX3NlY3RfdmFycyk7CisgICMgV2UgaGFuZGxlIG5vZGlzdF8gZm9yIHVuaWZvcm1pdHkuICBtYW4gcGFnZXMgYXJlbid0IGRpc3RyaWJ1dGVkCisgICMgYnkgZGVmYXVsdCBzbyBpdCBpc24ndCBhY3R1YWxseSB2ZXJ5IGltcG9ydGFudC4KKyAgZm9yZWFjaCBteSAkbnBmeCAoJycsICdub3RyYW5zXycpCisgICAgeworICAgICAgZm9yZWFjaCBteSAkcGZ4ICgnJywgJ2Rpc3RfJywgJ25vZGlzdF8nKQorCXsKKwkgICMgQWRkIG1vcmUgc2VjdGlvbnMgYXMgbmVlZGVkLgorCSAgZm9yZWFjaCBteSAkc2VjdGlvbiAoJzAnLi4nOScsICduJywgJ2wnKQorCSAgICB7CisJICAgICAgbXkgJHZhcm5hbWUgPSAkbnBmeCAuICRwZnggLiAnbWFuJyAuICRzZWN0aW9uIC4gJ19NQU5TJzsKKwkgICAgICBpZiAodmFyICgkdmFybmFtZSkpCisJCXsKKwkJICAkc2VjdGlvbnN7JHNlY3Rpb259ID0gMTsKKwkJICAkdmFybmFtZSA9ICckKCcgLiAkdmFybmFtZSAuICcpJzsKKwkJICBpZiAoJG5wZnggZXEgJ25vdHJhbnNfJykKKwkJICAgIHsKKwkJICAgICAgJG5vdHJhbnNfc2VjdGlvbnN7JHNlY3Rpb259ID0gMTsKKwkJICAgICAgJG5vdHJhbnNfc2VjdF92YXJzeyR2YXJuYW1lfSA9IDE7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICAkdHJhbnNfc2VjdGlvbnN7JHNlY3Rpb259ID0gMTsKKwkJICAgICAgJHRyYW5zX3NlY3RfdmFyc3skdmFybmFtZX0gPSAxOworCQkgICAgfQorCisJCSAgJnB1c2hfZGlzdF9jb21tb24gKCR2YXJuYW1lKQorCQkgICAgaWYgJHBmeCBlcSAnZGlzdF8nOworCQl9CisJICAgIH0KKworCSAgbXkgJHZhcm5hbWUgPSAkbnBmeCAuICRwZnggLiAnbWFuX01BTlMnOworCSAgbXkgJHZhciA9IHZhciAoJHZhcm5hbWUpOworCSAgaWYgKCR2YXIpCisJICAgIHsKKwkgICAgICBmb3JlYWNoICgkdmFyLT52YWx1ZV9hc19saXN0X3JlY3Vyc2l2ZSkKKwkJeworCQkgICMgQSBwYWdlIGxpa2UgYGZvby4xYycgZ29lcyBpbnRvIG1hbjFkaXIuCisJCSAgaWYgKC9cLihbMC05YS16XSkoW2Etel0qKSQvKQorCQkgICAgeworCQkgICAgICAkc2VjdGlvbnN7JDF9ID0gMTsKKwkJICAgICAgaWYgKCRucGZ4IGVxICdub3RyYW5zXycpCisJCQl7CisJCQkgICRub3RyYW5zX3NlY3Rpb25zeyQxfSA9IDE7CisJCQl9CisJCSAgICAgIGVsc2UKKwkJCXsKKwkJCSAgJHRyYW5zX3NlY3Rpb25zeyQxfSA9IDE7CisJCQl9CisJCSAgICB9CisJCX0KKworCSAgICAgICR2YXJuYW1lID0gJyQoJyAuICR2YXJuYW1lIC4gJyknOworCSAgICAgIGlmICgkbnBmeCBlcSAnbm90cmFuc18nKQorCQl7CisJCSAgJG5vdHJhbnNfdmFyc3skdmFybmFtZX0gPSAxOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgJHRyYW5zX3ZhcnN7JHZhcm5hbWV9ID0gMTsKKwkJfQorCSAgICAgICZwdXNoX2Rpc3RfY29tbW9uICgkdmFybmFtZSkKKwkJaWYgJHBmeCBlcSAnZGlzdF8nOworCSAgICB9CisJfQorICAgIH0KKworICByZXR1cm4gdW5sZXNzICVzZWN0aW9uczsKKworICBteSBAdW5zb3J0ZWRfZGVwczsKKworICAjIEJ1aWxkIHNlY3Rpb24gaW5kZXBlbmRlbnQgdmFyaWFibGVzLgorICBteSAkaGF2ZV9ub3RyYW5zID0gJW5vdHJhbnNfdmFyczsKKyAgbXkgQG5vdHJhbnNfbGlzdCA9IHNvcnQga2V5cyAlbm90cmFuc192YXJzOworICBteSAkaGF2ZV90cmFucyA9ICV0cmFuc192YXJzOworICBteSBAdHJhbnNfbGlzdCA9IHNvcnQga2V5cyAldHJhbnNfdmFyczsKKworICAjIE5vdyBmb3IgZWFjaCBzZWN0aW9uLCBnZW5lcmF0ZSBhbiBpbnN0YWxsIGFuZCB1bmluc3RhbGwgcnVsZS4KKyAgIyBTb3J0IHNlY3Rpb25zIHNvIG91dHB1dCBpcyBkZXRlcm1pbmlzdGljLgorICBmb3JlYWNoIG15ICRzZWN0aW9uIChzb3J0IGtleXMgJXNlY3Rpb25zKQorICAgIHsKKyAgICAgICMgQnVpbGQgc2VjdGlvbiBkZXBlbmRlbnQgdmFyaWFibGVzLgorICAgICAgbXkgJG5vdHJhbnNfbWFucyA9ICRoYXZlX25vdHJhbnMgfHwgZXhpc3RzICRub3RyYW5zX3NlY3Rpb25zeyRzZWN0aW9ufTsKKyAgICAgIG15ICR0cmFuc19tYW5zID0gJGhhdmVfdHJhbnMgfHwgZXhpc3RzICR0cmFuc19zZWN0aW9uc3skc2VjdGlvbn07CisgICAgICBteSAoJW5vdHJhbnNfdGhpc19zZWN0LCAldHJhbnNfdGhpc19zZWN0KTsKKyAgICAgIG15ICRleHByID0gJ21hbicgLiAkc2VjdGlvbiAuICdfTUFOUyc7CisgICAgICBmb3JlYWNoIG15ICR2YXJuYW1lIChrZXlzICVub3RyYW5zX3NlY3RfdmFycykKKwl7CisJICBpZiAoJHZhcm5hbWUgPX4gLyRleHByLykKKwkgICAgeworCSAgICAgICRub3RyYW5zX3RoaXNfc2VjdHskdmFybmFtZX0gPSAxOworCSAgICB9CisJfQorICAgICAgZm9yZWFjaCBteSAkdmFybmFtZSAoa2V5cyAldHJhbnNfc2VjdF92YXJzKQorCXsKKwkgIGlmICgkdmFybmFtZSA9fiAvJGV4cHIvKQorCSAgICB7CisJICAgICAgJHRyYW5zX3RoaXNfc2VjdHskdmFybmFtZX0gPSAxOworCSAgICB9CisJfQorICAgICAgbXkgQG5vdHJhbnNfc2VjdF9saXN0ID0gc29ydCBrZXlzICVub3RyYW5zX3RoaXNfc2VjdDsKKyAgICAgIG15IEB0cmFuc19zZWN0X2xpc3QgPSBzb3J0IGtleXMgJXRyYW5zX3RoaXNfc2VjdDsKKyAgICAgIEB1bnNvcnRlZF9kZXBzID0gKGtleXMgJW5vdHJhbnNfdmFycywga2V5cyAldHJhbnNfdmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleXMgJW5vdHJhbnNfdGhpc19zZWN0LCBrZXlzICV0cmFuc190aGlzX3NlY3QpOworICAgICAgbXkgQGRlcHMgPSBzb3J0IEB1bnNvcnRlZF9kZXBzOworICAgICAgJG91dHB1dF9ydWxlcyAuPSAmZmlsZV9jb250ZW50cyAoJ21hbnMnLAorCQkJCSAgICAgICBuZXcgQXV0b21ha2U6OkxvY2F0aW9uLAorCQkJCSAgICAgICBTRUNUSU9OICAgICAgICAgICA9PiAkc2VjdGlvbiwKKwkJCQkgICAgICAgREVQUyAgICAgICAgICAgICAgPT4gIkBkZXBzIiwKKwkJCQkgICAgICAgTk9UUkFOU19NQU5TICAgICAgPT4gJG5vdHJhbnNfbWFucywKKwkJCQkgICAgICAgTk9UUkFOU19TRUNUX0xJU1QgPT4gIkBub3RyYW5zX3NlY3RfbGlzdCIsCisJCQkJICAgICAgIEhBVkVfTk9UUkFOUyAgICAgID0+ICRoYXZlX25vdHJhbnMsCisJCQkJICAgICAgIE5PVFJBTlNfTElTVCAgICAgID0+ICJAbm90cmFuc19saXN0IiwKKwkJCQkgICAgICAgVFJBTlNfTUFOUyAgICAgICAgPT4gJHRyYW5zX21hbnMsCisJCQkJICAgICAgIFRSQU5TX1NFQ1RfTElTVCAgID0+ICJAdHJhbnNfc2VjdF9saXN0IiwKKwkJCQkgICAgICAgSEFWRV9UUkFOUyAgICAgICAgPT4gJGhhdmVfdHJhbnMsCisJCQkJICAgICAgIFRSQU5TX0xJU1QgICAgICAgID0+ICJAdHJhbnNfbGlzdCIpOworICAgIH0KKworICBAdW5zb3J0ZWRfZGVwcyAgPSAoa2V5cyAlbm90cmFuc192YXJzLCBrZXlzICV0cmFuc192YXJzLAorICAgICAgICAgICAgICAgICAgICAga2V5cyAlbm90cmFuc19zZWN0X3ZhcnMsIGtleXMgJXRyYW5zX3NlY3RfdmFycyk7CisgIG15IEBtYW5zID0gc29ydCBAdW5zb3J0ZWRfZGVwczsKKyAgJG91dHB1dF92YXJzIC49IGZpbGVfY29udGVudHMgKCdtYW5zLXZhcnMnLAorCQkJCSBuZXcgQXV0b21ha2U6OkxvY2F0aW9uLAorCQkJCSBNQU5TID0+ICJAbWFucyIpOworCisgIHB1c2ggKEBhbGwsICckKE1BTlMpJykKKyAgICB1bmxlc3Mgb3B0aW9uICduby1pbnN0YWxsbWFuJzsKK30KKworIyBIYW5kbGUgREFUQSB2YXJpYWJsZXMuCitzdWIgaGFuZGxlX2RhdGEKK3sKKyAgICAmYW1faW5zdGFsbF92YXIgKCctbm9leHRyYScsICctY2FuZGlzdCcsICdkYXRhJywgJ0RBVEEnLAorCQkgICAgICdkYXRhJywgJ2RhdGFyb290JywgJ2R2aScsICdodG1sJywgJ3BkZicsICdwcycsCisJCSAgICAgJ3N5c2NvbmYnLCAnc2hhcmVkc3RhdGUnLCAnbG9jYWxzdGF0ZScsCisJCSAgICAgJ3BrZ2RhdGEnLCAnbGlzcCcsICdub2luc3QnLCAnY2hlY2snKTsKK30KKworIyBIYW5kbGUgVEFHUy4KK3N1YiBoYW5kbGVfdGFncworeworICAgIG15IEB0YWdfZGVwcyA9ICgpOworICAgIG15IEBjdGFnX2RlcHMgPSAoKTsKKyAgICBpZiAodmFyICgnU1VCRElSUycpKQorICAgIHsKKwkkb3V0cHV0X3J1bGVzIC49ICgidGFncy1yZWN1cnNpdmU6XG4iCisJCQkgIC4gIlx0bGlzdD1cJ1wkKFNVQkRJUlMpXCc7IGZvciBzdWJkaXIgaW4gXCRcJGxpc3Q7IGRvIFxcXG4iCisJCQkgICMgTmV2ZXIgZmFpbCBoZXJlIGlmIGEgc3ViZGlyIGZhaWxzOyBpdAorCQkJICAjIGlzbid0IGltcG9ydGFudC4KKwkJCSAgLiAiXHQgIHRlc3QgXCJcJFwkc3ViZGlyXCIgPSAuIHx8IChcJChhbV9fY2QpIFwkXCRzdWJkaXIiCisJCQkgIC4gIiAmJiBcJChNQUtFKSBcJChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcXFxuIgorCQkJICAuICJcdGRvbmVcbiIpOworCXB1c2ggKEB0YWdfZGVwcywgJ3RhZ3MtcmVjdXJzaXZlJyk7CisJJmRlcGVuZCAoJy5QSE9OWScsICd0YWdzLXJlY3Vyc2l2ZScpOworCSZkZXBlbmQgKCcuTUFLRScsICd0YWdzLXJlY3Vyc2l2ZScpOworCisJJG91dHB1dF9ydWxlcyAuPSAoImN0YWdzLXJlY3Vyc2l2ZTpcbiIKKwkJCSAgLiAiXHRsaXN0PVwnXCQoU1VCRElSUylcJzsgZm9yIHN1YmRpciBpbiBcJFwkbGlzdDsgZG8gXFxcbiIKKwkJCSAgIyBOZXZlciBmYWlsIGhlcmUgaWYgYSBzdWJkaXIgZmFpbHM7IGl0CisJCQkgICMgaXNuJ3QgaW1wb3J0YW50LgorCQkJICAuICJcdCAgdGVzdCBcIlwkXCRzdWJkaXJcIiA9IC4gfHwgKFwkKGFtX19jZCkgXCRcJHN1YmRpciIKKwkJCSAgLiAiICYmIFwkKE1BS0UpIFwkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcXFxuIgorCQkJICAuICJcdGRvbmVcbiIpOworCXB1c2ggKEBjdGFnX2RlcHMsICdjdGFncy1yZWN1cnNpdmUnKTsKKwkmZGVwZW5kICgnLlBIT05ZJywgJ2N0YWdzLXJlY3Vyc2l2ZScpOworCSZkZXBlbmQgKCcuTUFLRScsICdjdGFncy1yZWN1cnNpdmUnKTsKKyAgICB9CisKKyAgICBpZiAoJnNhd19zb3VyY2VzX3AgKDEpCisJfHwgdmFyICgnRVRBR1NfQVJHUycpCisJfHwgQHRhZ19kZXBzKQorICAgIHsKKwlteSBAY29uZmlnOworCWZvcmVhY2ggbXkgJHNwZWMgKEBjb25maWdfaGVhZGVycykKKwl7CisJICAgIG15ICgkb3V0LCBAaW5zKSA9IHNwbGl0X2NvbmZpZ19maWxlX3NwZWMgKCRzcGVjKTsKKwkgICAgZm9yZWFjaCBteSAkaW4gKEBpbnMpCisJICAgICAgeworCQkjIElmIHRoZSBjb25maWcgaGVhZGVyIHNvdXJjZSBpcyBpbiB0aGlzIGRpcmVjdG9yeSwKKwkJIyByZXF1aXJlIGl0LgorCQlwdXNoIEBjb25maWcsIGJhc2VuYW1lICgkaW4pCisJCSAgaWYgJHJlbGF0aXZlX2RpciBlcSBkaXJuYW1lICgkaW4pOworCSAgICAgIH0KKwl9CisJJG91dHB1dF9ydWxlcyAuPSAmZmlsZV9jb250ZW50cyAoJ3RhZ3MnLAorCQkJCQkgbmV3IEF1dG9tYWtlOjpMb2NhdGlvbiwKKwkJCQkJIENPTkZJRyAgICA9PiAiQGNvbmZpZyIsCisJCQkJCSBUQUdTRElSUyAgPT4gIkB0YWdfZGVwcyIsCisJCQkJCSBDVEFHU0RJUlMgPT4gIkBjdGFnX2RlcHMiKTsKKworCXNldF9zZWVuICdUQUdTX0RFUEVOREVOQ0lFUyc7CisgICAgfQorICAgIGVsc2lmIChyZWplY3RfdmFyICgnVEFHU19ERVBFTkRFTkNJRVMnLAorCQkgICAgICAgImRvZXNuJ3QgbWFrZSBzZW5zZSB0byBkZWZpbmUgYFRBR1NfREVQRU5ERU5DSUVTJyIKKwkJICAgICAgIC4gIndpdGhvdXRcbnNvdXJjZXMgb3IgYEVUQUdTX0FSR1MnIikpCisgICAgeworICAgIH0KKyAgICBlbHNlCisgICAgeworCSMgRXZlcnkgTWFrZWZpbGUgbXVzdCBkZWZpbmUgc29tZSBzb3J0IG9mIFRBR1MgcnVsZS4KKwkjIE90aGVyd2lzZSwgaXQgd291bGQgYmUgcG9zc2libGUgZm9yIGEgdG9wLWxldmVsICJtYWtlIFRBR1MiCisJIyB0byBmYWlsIGJlY2F1c2Ugc29tZSBzdWJkaXJlY3RvcnkgZmFpbGVkLgorCSRvdXRwdXRfcnVsZXMgLj0gInRhZ3M6IFRBR1NcblRBR1M6XG5cbiI7CisJIyBEaXR0byBjdGFncy4KKwkkb3V0cHV0X3J1bGVzIC49ICJjdGFnczogQ1RBR1NcbkNUQUdTOlxuXG4iOworICAgIH0KK30KKworIyBIYW5kbGUgbXVsdGlsaWIgc3VwcG9ydC4KK3N1YiBoYW5kbGVfbXVsdGlsaWIKK3sKKyAgaWYgKCRzZWVuX211bHRpbGliICYmICRyZWxhdGl2ZV9kaXIgZXEgJy4nKQorICAgIHsKKyAgICAgICRvdXRwdXRfcnVsZXMgLj0gJmZpbGVfY29udGVudHMgKCdtdWx0aWxpYicsIG5ldyBBdXRvbWFrZTo6TG9jYXRpb24pOworICAgICAgcHVzaCAoQGFsbCwgJ2FsbC1tdWx0aScpOworICAgIH0KK30KKworCisjIHVzZXJfcGhvbnlfcnVsZSAoJE5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJldHVybiBmYWxzZSBpZiBydWxlICROQU1FIGRvZXMgbm90IGV4aXN0LiAgT3RoZXJ3aXNlLAorIyBkZWNsYXJlIGl0IGFzIHBob255LCBjb21wbGV0ZSBpdHMgZGVmaW5pdGlvbiAoaW4gY2FzZSBpdCBpcworIyBjb25kaXRpb25hbCksIGFuZCByZXR1cm4gaXRzIEF1dG9tYWtlOjpSdWxlIGluc3RhbmNlLgorc3ViIHVzZXJfcGhvbnlfcnVsZSAoJCkKK3sKKyAgbXkgKCRuYW1lKSA9IEBfOworICBteSAkcnVsZSA9IHJ1bGUgJG5hbWU7CisgIGlmICgkcnVsZSkKKyAgICB7CisgICAgICBkZXBlbmQgKCcuUEhPTlknLCAkbmFtZSk7CisgICAgICAjIERlZmluZSAkTkFNRSBpbiBhbGwgY29uZGl0aW9uIHdoZXJlIGl0IGlzIG5vdCBhbHJlYWR5IGRlZmluZWQsCisgICAgICAjIHNvIHRoYXQgaXQgaXMgYWx3YXlzIE9LIHRvIGRlcGVuZCBvbiAkTkFNRS4KKyAgICAgIGZvciBteSAkYyAoJHJ1bGUtPm5vdF9hbHdheXNfZGVmaW5lZF9pbl9jb25kIChUUlVFKS0+Y29uZHMpCisJeworCSAgQXV0b21ha2U6OlJ1bGU6OmRlZmluZSAoJG5hbWUsICdpbnRlcm5hbCcsIFJVTEVfQVVUT01BS0UsCisJCQkJICAkYywgSU5URVJOQUwpOworCSAgJG91dHB1dF9ydWxlcyAuPSAkYy0+c3Vic3Rfc3RyaW5nIC4gIiRuYW1lOlxuIjsKKwl9CisgICAgfQorICByZXR1cm4gJHJ1bGU7Cit9CisKKworIyAkQk9PTEVBTgorIyAmZm9yX2Rpc3RfY29tbW9uICgkQSwgJEIpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU3Vicm91dGluZSBmb3IgJmhhbmRsZV9kaXN0OiBzb3J0IGZpbGVzIHRvIGRpc3QuCisjCisjIFdlIHB1dCBSRUFETUUgZmlyc3QgYmVjYXVzZSBpdCB0aGVuIGJlY29tZXMgZWFzaWVyIHRvIG1ha2UgYQorIyBVc2VuZXQtY29tcGxpYW50IHNoYXIgZmlsZSAoaW4gdGhlc2UsIFJFQURNRSBtdXN0IGJlIGZpcnN0KS4KKyMKKyMgRklYTUU6IGRvIG1vcmUgb3JkZXJpbmcgb2YgZmlsZXMgaGVyZS4KK3N1YiBmb3JfZGlzdF9jb21tb24KK3sKKyAgICByZXR1cm4gMAorCWlmICRhIGVxICRiOworICAgIHJldHVybiAtMQorCWlmICRhIGVxICdSRUFETUUnOworICAgIHJldHVybiAxCisJaWYgJGIgZXEgJ1JFQURNRSc7CisgICAgcmV0dXJuICRhIGNtcCAkYjsKK30KKworIyBoYW5kbGVfZGlzdAorIyAtLS0tLS0tLS0tLQorIyBIYW5kbGUgJ2Rpc3QnIHRhcmdldC4KK3N1YiBoYW5kbGVfZGlzdCAoKQoreworICAjIFN1YnN0aXR1dGlvbnMgZm9yIGRpc3RkaXIuYW0KKyAgbXkgJXRyYW5zZm9ybTsKKworICAjIERlZmluZSBESVNUX1NVQkRJUlMuICBUaGlzIG11c3QgYWx3YXlzIGJlIGRvbmUsIHJlZ2FyZGxlc3Mgb2YgdGhlCisgICMgbm8tZGlzdCBzZXR0aW5nOiB0YXJnZXQgbGlrZSBgZGlzdGNsZWFuJyBvciBgbWFpbnRhaW5lci1jbGVhbicgdXNlIGl0LgorICBteSAkc3ViZGlycyA9IHZhciAoJ1NVQkRJUlMnKTsKKyAgaWYgKCRzdWJkaXJzKQorICAgIHsKKyAgICAgICMgSWYgU1VCRElSUyBpcyBjb25kaXRpb25hbGx5IGRlZmluZWQsIHRoZW4gc2V0IERJU1RfU1VCRElSUworICAgICAgIyB0byBhbGwgcG9zc2libGUgZGlyZWN0b3JpZXMsIGFuZCB1c2UgaXQuICBJZiBESVNUX1NVQkRJUlMgaXMKKyAgICAgICMgZGVmaW5lZCwganVzdCB1c2UgaXQuCisKKyAgICAgICMgTm90ZSB0aGF0IHdlIGNoZWNrIERJU1RfU1VCRElSUyBmaXJzdCBvbiBwdXJwb3NlLCBzbyB0aGF0CisgICAgICAjIHdlIGRvbid0IGNhbGwgaGFzX2NvbmRpdGlvbmFsX2NvbnRlbnRzIGZvciBub3cgcmVhc29uLgorICAgICAgIyAoSW4gdGhlIHBhc3Qgb25lIHByb2plY3QgdXNlZCBzbyBtYW55IGNvbmRpdGlvbmFsIHN1YmRpcmVjdG9yaWVzCisgICAgICAjIHRoYXQgY2FsbGluZyBoYXNfY29uZGl0aW9uYWxfY29udGVudHMgb24gU1VCRElSUyBjYXVzZWQKKyAgICAgICMgYXV0b21ha2UgdG8gZ3JvdyB0byAxNTBNYiAtLSB0aGlzIHNob3VsZCBub3QgaGFwcGVuIHdpdGgKKyAgICAgICMgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgaGFzX2NvbmRpdGlvbmFsX2NvbnRlbnRzLAorICAgICAgIyBidXQgaXQncyBtb3JlIGVmZmljaWVudCB0byBhdm9pZCB0aGUgY2FsbCBhbnl3YXkuKQorICAgICAgaWYgKHZhciAoJ0RJU1RfU1VCRElSUycpKQorCXsKKwl9CisgICAgICBlbHNpZiAoJHN1YmRpcnMtPmhhc19jb25kaXRpb25hbF9jb250ZW50cykKKwl7CisJICBkZWZpbmVfcHJldHR5X3ZhcmlhYmxlCisJICAgICgnRElTVF9TVUJESVJTJywgVFJVRSwgSU5URVJOQUwsCisJICAgICB1bmlxICgkc3ViZGlycy0+dmFsdWVfYXNfbGlzdF9yZWN1cnNpdmUpKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgIyBXZSBhbHdheXMgZGVmaW5lIHRoaXMgYmVjYXVzZSB0aGF0IGlzIHdoYXQgYGRpc3RjbGVhbicKKwkgICMgd2FudHMuCisJICBkZWZpbmVfcHJldHR5X3ZhcmlhYmxlICgnRElTVF9TVUJESVJTJywgVFJVRSwgSU5URVJOQUwsCisJCQkJICAnJChTVUJESVJTKScpOworCX0KKyAgICB9CisKKyAgIyBUaGUgcmVtYWluaW5nIGRlZmluaXRpb25zIGFyZSBvbmx5IHJlcXVpcmVkIHdoZW4gYSBkaXN0IHRhcmdldCBpcyB1c2VkLgorICByZXR1cm4gaWYgb3B0aW9uICduby1kaXN0JzsKKworICAjIEF0IGxlYXN0IG9uZSBvZiB0aGUgYXJjaGl2ZSBmb3JtYXRzIG11c3QgYmUgZW5hYmxlZC4KKyAgaWYgKCRyZWxhdGl2ZV9kaXIgZXEgJy4nKQorICAgIHsKKyAgICAgIG15ICRhcmNoaXZlX2RlZmluZWQgPSBvcHRpb24gJ25vLWRpc3QtZ3ppcCcgPyAwIDogMTsKKyAgICAgICRhcmNoaXZlX2RlZmluZWQgfHw9CisJZ3JlcCB7IG9wdGlvbiAiZGlzdC0kXyIgfSBxdyhzaGFyIHppcCB0YXJaIGJ6aXAyIGx6bWEgeHopOworICAgICAgZXJyb3IgKG9wdGlvbiAnbm8tZGlzdC1nemlwJywKKwkgICAgICJuby1kaXN0LWd6aXAgc3BlY2lmaWVkIGJ1dCBubyBkaXN0LSogc3BlY2lmaWVkLCAiCisJICAgICAuICJhdCBsZWFzdCBvbmUgYXJjaGl2ZSBmb3JtYXQgbXVzdCBiZSBlbmFibGVkIikKKwl1bmxlc3MgJGFyY2hpdmVfZGVmaW5lZDsKKyAgICB9CisKKyAgIyBMb29rIGZvciBjb21tb24gZmlsZXMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gZGlzdHJpYnV0aW9uLgorICAjIElmIHRoZSBhdXggZGlyIGlzIHNldCwgYW5kIGl0IGRvZXMgbm90IGhhdmUgYSBNYWtlZmlsZS5hbSwgdGhlbgorICAjIHdlIGNoZWNrIGZvciB0aGVzZSBmaWxlcyB0aGVyZSBhcyB3ZWxsLgorICBteSAkY2hlY2tfYXV4ID0gMDsKKyAgaWYgKCRyZWxhdGl2ZV9kaXIgZXEgJy4nCisgICAgICAmJiAkY29uZmlnX2F1eF9kaXJfc2V0X2luX2NvbmZpZ3VyZV9hYykKKyAgICB7CisgICAgICBpZiAoISAmaXNfbWFrZV9kaXIgKCRjb25maWdfYXV4X2RpcikpCisJeworCSAgJGNoZWNrX2F1eCA9IDE7CisJfQorICAgIH0KKyAgZm9yZWFjaCBteSAkY2ZpbGUgKEBjb21tb25fZmlsZXMpCisgICAgeworICAgICAgaWYgKGRpcl9oYXNfY2FzZV9tYXRjaGluZ19maWxlICgkcmVsYXRpdmVfZGlyLCAkY2ZpbGUpCisJICAjIFRoZSBmaWxlIG1pZ2h0IGJlIGFic2VudCwgYnV0IGlmIGl0IGNhbiBiZSBidWlsdCBpdCdzIG9rLgorCSAgfHwgcnVsZSAkY2ZpbGUpCisJeworCSAgJnB1c2hfZGlzdF9jb21tb24gKCRjZmlsZSk7CisJfQorCisgICAgICAjIERvbid0IHVzZSBgZWxzaWYnIGhlcmUgYmVjYXVzZSBhIGZpbGUgbWlnaHQgbWVhbmluZ2Z1bGx5CisgICAgICAjIGFwcGVhciBpbiBib3RoIGRpcmVjdG9yaWVzLgorICAgICAgaWYgKCRjaGVja19hdXggJiYgZGlyX2hhc19jYXNlX21hdGNoaW5nX2ZpbGUgKCRjb25maWdfYXV4X2RpciwgJGNmaWxlKSkKKwl7CisJICAmcHVzaF9kaXN0X2NvbW1vbiAoIiRjb25maWdfYXV4X2Rpci8kY2ZpbGUiKQorCX0KKyAgICB9CisKKyAgIyBXZSBtaWdodCBjb3B5IGVsZW1lbnRzIGZyb20gJGNvbmZpZ3VyZV9kaXN0X2NvbW1vbiB0bworICAjICVkaXN0X2NvbW1vbiBpZiB3ZSB0aGluayB3ZSBuZWVkIHRvLiAgSWYgdGhlIGZpbGUgYXBwZWFycyBpbiBvdXIKKyAgIyBkaXJlY3RvcnksIHdlIHdvdWxkIGhhdmUgZGlzY292ZXJlZCBpdCBhbHJlYWR5LCBzbyB3ZSBkb24ndAorICAjIGNoZWNrIHRoYXQuICBCdXQgaWYgdGhlIGZpbGUgaXMgaW4gYSBzdWJkaXIgd2l0aG91dCBhIE1ha2VmaWxlLAorICAjIHdlIHdhbnQgdG8gZGlzdHJpYnV0ZSBpdCBoZXJlIGlmIHdlIGFyZSBkb2luZyBgLicuICBVZ2x5IQorICBpZiAoJHJlbGF0aXZlX2RpciBlcSAnLicpCisgICAgeworICAgICAgZm9yZWFjaCBteSAkZmlsZSAoc3BsaXQgKCcgJyAsICRjb25maWd1cmVfZGlzdF9jb21tb24pKQorCXsKKwkgIHB1c2hfZGlzdF9jb21tb24gKCRmaWxlKQorCSAgICB1bmxlc3MgaXNfbWFrZV9kaXIgKGRpcm5hbWUgKCRmaWxlKSk7CisJfQorICAgIH0KKworICAjIEZpbGVzIHRvIGRpc3RyaWJ1dGVkLiAgRG9uJ3QgdXNlIC0+dmFsdWVfYXNfbGlzdF9yZWN1cnNpdmUKKyAgIyBhcyBpdCByZWN1cnNpdmVseSBleHBhbmRzIGAkKGRpc3RfcGtnZGF0YV9EQVRBKScgZXRjLgorICBteSBAZGlzdF9jb21tb24gPSBzcGxpdCAoJyAnLCBydmFyICgnRElTVF9DT01NT04nKS0+dmFyaWFibGVfdmFsdWUpOworICBAZGlzdF9jb21tb24gPSB1bmlxIChzb3J0IGZvcl9kaXN0X2NvbW1vbiAoQGRpc3RfY29tbW9uKSk7CisgIHZhcmlhYmxlX2RlbGV0ZSAnRElTVF9DT01NT04nOworICBkZWZpbmVfcHJldHR5X3ZhcmlhYmxlICgnRElTVF9DT01NT04nLCBUUlVFLCBJTlRFUk5BTCwgQGRpc3RfY29tbW9uKTsKKworICAjIE5vdyB0aGF0IHdlJ3ZlIHByb2Nlc3NlZCBESVNUX0NPTU1PTiwgZGlzYWxsb3cgZnVydGhlciBhdHRlbXB0cworICAjIHRvIHNldCBpdC4KKyAgJGhhbmRsZV9kaXN0X3J1biA9IDE7CisKKyAgIyBTY2FuIEVYVFJBX0RJU1QgdG8gc2VlIGlmIHdlIG5lZWQgdG8gZGlzdHJpYnV0ZSBhbnl0aGluZyBmcm9tIGEKKyAgIyBzdWJkaXIuICBJZiBzbywgYWRkIGl0IHRvIHRoZSBsaXN0LiAgSSBkaWRuJ3Qgd2FudCB0byBkbyB0aGlzCisgICMgb3JpZ2luYWxseSwgYnV0IHRoZXJlIHdlcmUgc28gbWFueSByZXF1ZXN0cyB0aGF0IEkgZmluYWxseQorICAjIHJlbGVudGVkLgorICBteSAkZXh0cmFfZGlzdCA9IHZhciAoJ0VYVFJBX0RJU1QnKTsKKworICAkdHJhbnNmb3JteydESVNUQ0hFQ0stSE9PSyd9ID0gISEgcnVsZSAnZGlzdGNoZWNrLWhvb2snOworICAkdHJhbnNmb3JteydHRVRURVhUJ30gPSAkc2Vlbl9nZXR0ZXh0ICYmICEkc2Vlbl9nZXR0ZXh0X2V4dGVybmFsOworCisgICMgSWYgdGhlIHRhcmdldCBgZGlzdC1ob29rJyBleGlzdHMsIG1ha2Ugc3VyZSBpdCBpcyBydW4uICBUaGlzCisgICMgYWxsb3dzIHVzZXJzIHRvIGRvIHJhbmRvbSB3ZWlyZCB0aGluZ3MgdG8gdGhlIGRpc3RyaWJ1dGlvbgorICAjIGJlZm9yZSBpdCBpcyBwYWNrYWdlZCB1cC4KKyAgcHVzaCAoQGRpc3RfdGFyZ2V0cywgJ2Rpc3QtaG9vaycpCisgICAgaWYgdXNlcl9waG9ueV9ydWxlICdkaXN0LWhvb2snOworICAkdHJhbnNmb3JteydESVNULVRBUkdFVFMnfSA9IGpvaW4gKCcgJywgQGRpc3RfdGFyZ2V0cyk7CisKKyAgbXkgJGZsbSA9IG9wdGlvbiAoJ2ZpbGVuYW1lLWxlbmd0aC1tYXgnKTsKKyAgbXkgJGZpbGVuYW1lX2ZpbHRlciA9ICRmbG0gPyAnLicgeCAkZmxtLT5bMV0gOiAnJzsKKworICAkb3V0cHV0X3J1bGVzIC49ICZmaWxlX2NvbnRlbnRzICgnZGlzdGRpcicsCisJCQkJICAgbmV3IEF1dG9tYWtlOjpMb2NhdGlvbiwKKwkJCQkgICAldHJhbnNmb3JtLAorCQkJCSAgIEZJTEVOQU1FX0ZJTFRFUiA9PiAkZmlsZW5hbWVfZmlsdGVyKTsKK30KKworCisjIGNoZWNrX2RpcmVjdG9yeSAoJE5BTUUsICRXSEVSRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgJE5BTUUgaXMgYSBkaXJlY3RvcnksIGFuZCB0aGF0IGl0IHVzZXMgYSBzYW5lIG5hbWUuCisjIFVzZSAkV0hFUkUgYXMgYSBsb2NhdGlvbiBpbiB0aGUgZGlhZ25vc3RpYywgaWYgYW55Lgorc3ViIGNoZWNrX2RpcmVjdG9yeSAoJCQpCit7CisgIG15ICgkZGlyLCAkd2hlcmUpID0gQF87CisKKyAgZXJyb3IgJHdoZXJlLCAicmVxdWlyZWQgZGlyZWN0b3J5ICRyZWxhdGl2ZV9kaXIvJGRpciBkb2VzIG5vdCBleGlzdCIKKyAgICB1bmxlc3MgLWQgIiRyZWxhdGl2ZV9kaXIvJGRpciI7CisKKyAgIyBJZiBhbiBgb2JqLycgZGlyZWN0b3J5IGV4aXN0cywgQlNEIG1ha2Ugd2lsbCBlbnRlciBpdCBiZWZvcmUKKyAgIyByZWFkaW5nIGBNYWtlZmlsZScuICBIZW5jZSB0aGUgYE1ha2VmaWxlJyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkKKyAgIyB3aWxsIG5vdCBiZSByZWFkLgorICAjCisgICMgICUgY2F0IE1ha2VmaWxlCisgICMgIGFsbDoKKyAgIyAgICAgICAgICBlY2hvIEhlbGxvCisgICMgICUgY2F0IG9iai9NYWtlZmlsZQorICAjICBhbGw6CisgICMgICAgICAgICAgZWNobyBXb3JsZAorICAjICAlIG1ha2UgICAgICAjIEdOVSBtYWtlCisgICMgIGVjaG8gSGVsbG8KKyAgIyAgSGVsbG8KKyAgIyAgJSBwbWFrZSAgICAgIyBCU0QgbWFrZQorICAjICBlY2hvIFdvcmxkCisgICMgIFdvcmxkCisgIG1zZyAoJ3BvcnRhYmlsaXR5JywgJHdoZXJlLAorICAgICAgICJuYW1pbmcgYSBzdWJkaXJlY3RvcnkgYG9iaicgY2F1c2VzIHRyb3VibGVzIHdpdGggQlNEIG1ha2UiKQorICAgIGlmICRkaXIgZXEgJ29iaic7CisKKyAgIyBgYXV4JyBpcyBwcm9iYWJseSB0aGUgbW9zdCBpbXBvcnRhbnQgb2YgdGhlIGZvbGxvd2luZyBmb3JiaWRkZW4gbmFtZSwKKyAgIyBzaW5jZSBpdCdzIHRlbXB0aW5nIHRvIHVzZSBpdCBhcyBhbiBBQ19DT05GSUdfQVVYX0RJUi4KKyAgbXNnICgncG9ydGFiaWxpdHknLCAkd2hlcmUsCisgICAgICAgIm5hbWUgYCRkaXInIGlzIHJlc2VydmVkIG9uIFczMiBhbmQgRE9TIHBsYXRmb3JtcyIpCisgICAgaWYgZ3JlcCAoL15cUSRkaXJcRSQvaSwgcXcvYXV4IGxwdDEgbHB0MiBscHQzIGNvbTEgY29tMiBjb20zIGNvbTQgY29uIHBybi8pOworfQorCisjIGNoZWNrX2RpcmVjdG9yaWVzX2luX3ZhciAoJFZBUklBQkxFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVjdXJzaXZlbHkgY2hlY2sgYWxsIGl0ZW1zIGluIHZhcmlhYmxlcyAkVkFSSUFCTEUgYXMgZGlyZWN0b3JpZXMKK3N1YiBjaGVja19kaXJlY3Rvcmllc19pbl92YXIgKCQpCit7CisgIG15ICgkdmFyKSA9IEBfOworICAkdmFyLT50cmF2ZXJzZV9yZWN1cnNpdmVseQorICAgIChzdWIKKyAgICAgeworICAgICAgIG15ICgkdmFyLCAkdmFsLCAkY29uZCwgJGZ1bGxfY29uZCkgPSBAXzsKKyAgICAgICBjaGVja19kaXJlY3RvcnkgKCR2YWwsICR2YXItPnJkZWYgKCRjb25kKS0+bG9jYXRpb24pOworICAgICAgIHJldHVybiAoKTsKKyAgICAgfSwKKyAgICAgdW5kZWYsCisgICAgIHNraXBfYWNfc3Vic3QgPT4gMSk7Cit9CisKKyMgJmhhbmRsZV9zdWJkaXJzICgpCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBIYW5kbGUgc3ViZGlyZWN0b3JpZXMuCitzdWIgaGFuZGxlX3N1YmRpcnMgKCkKK3sKKyAgbXkgJHN1YmRpcnMgPSB2YXIgKCdTVUJESVJTJyk7CisgIHJldHVybgorICAgIHVubGVzcyAkc3ViZGlyczsKKworICBjaGVja19kaXJlY3Rvcmllc19pbl92YXIgJHN1YmRpcnM7CisKKyAgbXkgJGRzdWJkaXJzID0gdmFyICgnRElTVF9TVUJESVJTJyk7CisgIGNoZWNrX2RpcmVjdG9yaWVzX2luX3ZhciAkZHN1YmRpcnMKKyAgICBpZiAkZHN1YmRpcnM7CisKKyAgJG91dHB1dF9ydWxlcyAuPSAmZmlsZV9jb250ZW50cyAoJ3N1YmRpcnMnLCBuZXcgQXV0b21ha2U6OkxvY2F0aW9uKTsKKyAgcnZhciAoJ1JFQ1VSU0lWRV9UQVJHRVRTJyktPnJkZWYgKFRSVUUpLT57J3ByZXR0eSd9ID0gVkFSX1NPUlRFRDsgIyBHcm9zcyEKK30KKworCisjICgkUkVHRU4sIEBERVBFTkRFTkNJRVMpCisjICZzY2FuX2FjbG9jYWxfbTQKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBJZiBhY2xvY2FsLm00IGNyZWF0aW9uIGlzIGF1dG9tYXRlZCwgcmV0dXJuIHRoZSBsaXN0IG9mIGl0cyBkZXBlbmRlbmNpZXMuCitzdWIgc2Nhbl9hY2xvY2FsX200ICgpCit7CisgIG15ICRyZWdlbl9hY2xvY2FsID0gMDsKKworICBzZXRfc2VlbiAnQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMnOworICBzZXRfc2VlbiAnQ09ORklHVVJFX0RFUEVOREVOQ0lFUyc7CisKKyAgaWYgKC1mICdhY2xvY2FsLm00JykKKyAgICB7CisgICAgICAmZGVmaW5lX3ZhcmlhYmxlICgiQUNMT0NBTF9NNCIsICckKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQnLCBJTlRFUk5BTCk7CisKKyAgICAgIG15ICRhY2xvY2FsID0gbmV3IEF1dG9tYWtlOjpYRmlsZSAiPCBhY2xvY2FsLm00IjsKKyAgICAgIG15ICRsaW5lID0gJGFjbG9jYWwtPmdldGxpbmU7CisgICAgICAkcmVnZW5fYWNsb2NhbCA9ICRsaW5lID1+ICdnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBhY2xvY2FsJzsKKyAgICB9CisKKyAgbXkgQGFjX2RlcHMgPSAoKTsKKworICBpZiAoc2V0X3NlZW4gKCdBQ0xPQ0FMX000X1NPVVJDRVMnKSkKKyAgICB7CisgICAgICBwdXNoIChAYWNfZGVwcywgJyQoQUNMT0NBTF9NNF9TT1VSQ0VTKScpOworICAgICAgbXNnX3ZhciAoJ29ic29sZXRlJywgJ0FDTE9DQUxfTTRfU09VUkNFUycsCisJICAgICAgICJgQUNMT0NBTF9NNF9TT1VSQ0VTJyBpcyBvYnNvbGV0ZS5cbiIKKwkgICAgICAgLiAiSXQgc2hvdWxkIGJlIHNhZmUgdG8gc2ltcGx5IHJlbW92ZSBpdC4iKTsKKyAgICB9CisKKyAgIyBOb3RlIHRoYXQgaXQgbWlnaHQgYmUgcG9zc2libGUgdGhhdCBhY2xvY2FsLm00IGRvZXNuJ3QgZXhpc3QgYnV0CisgICMgc2hvdWxkIGJlIGF1dG8tZ2VuZXJhdGVkLiAgVGhpcyBjYXNlIHByb2JhYmx5IGlzbid0IHZlcnkKKyAgIyBpbXBvcnRhbnQuCisKKyAgcmV0dXJuICgkcmVnZW5fYWNsb2NhbCwgQGFjX2RlcHMpOworfQorCisKKyMgSGVscGVyIGZ1bmN0aW9uIGZvciBzdWJzdGl0dXRlX2FjX3N1YnN0X3ZhcmlhYmxlcy4KK3N1YiBzdWJzdGl0dXRlX2FjX3N1YnN0X3ZhcmlhYmxlc193b3JrZXIoJCkKK3sKKyAgbXkgKCR0b2tlbikgPSBAXzsKKyAgcmV0dXJuICJcQCR0b2tlblxAIiBpZiB2YXIgJHRva2VuOworICByZXR1cm4gIlwkeyR0b2tlblx9IjsKK30KKworIyBzdWJzdGl0dXRlX2FjX3N1YnN0X3ZhcmlhYmxlcyAoJFRFWFQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVwbGFjZSBhbnkgb2NjdXJyZW5jZSBvZiAke0ZPT30gaW4gJFRFWFQgYnkgQEZPT0AgaWYgRk9PIGlzIGFuIEFDX1NVQlNUCisjIHZhcmlhYmxlLgorc3ViIHN1YnN0aXR1dGVfYWNfc3Vic3RfdmFyaWFibGVzICgkKQoreworICBteSAoJHRleHQpID0gQF87CisgICR0ZXh0ID1+IHMvXCR7KFteIFx0PTore31dKyl9LyZzdWJzdGl0dXRlX2FjX3N1YnN0X3ZhcmlhYmxlc193b3JrZXIgKCQxKS9nZTsKKyAgcmV0dXJuICR0ZXh0OworfQorCisjIEBERVBFTkRFTkNJRVMKKyMgJnByZXBlbmRfc3JjZGlyIChASU5QVVRTKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByZXBlbmQgJChzcmNkaXIpIG9yICQodG9wX3NyY2RpcikgdG8gYWxsIEBJTlBVVFMuICBUaGUgaWRlYSBpcyB0aGF0CisjIGlmIGFuIGlucHV0IGZpbGUgaGFzIGEgZGlyZWN0b3J5IHBhcnQgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQKKyMgZGlyZWN0b3J5LCB0aGVuIHRoZSBkaXJlY3RvcnkgcGFydCBpcyBzaW1wbHkgcmVwbGFjZWQgYnkgJChzcmNkaXIpLgorIyBCdXQgaWYgdGhlIGRpcmVjdG9yeSBwYXJ0IGlzIGRpZmZlcmVudCwgdGhlbiAkKHRvcF9zcmNkaXIpIGlzCisjIHByZXBlbmRlZC4KK3N1YiBwcmVwZW5kX3NyY2RpciAoQCkKK3sKKyAgbXkgKEBpbnB1dHMpID0gQF87CisgIG15IEBuZXdpbnB1dHM7CisKKyAgZm9yZWFjaCBteSAkc2luZ2xlIChAaW5wdXRzKQorICAgIHsKKyAgICAgIGlmIChkaXJuYW1lICgkc2luZ2xlKSBlcSAkcmVsYXRpdmVfZGlyKQorCXsKKwkgIHB1c2ggKEBuZXdpbnB1dHMsICckKHNyY2RpcikvJyAuIGJhc2VuYW1lICgkc2luZ2xlKSk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHB1c2ggKEBuZXdpbnB1dHMsICckKHRvcF9zcmNkaXIpLycgLiAkc2luZ2xlKTsKKwl9CisgICAgfQorICByZXR1cm4gQG5ld2lucHV0czsKK30KKworIyBAREVQRU5ERU5DSUVTCisjIHJld3JpdGVfaW5wdXRzX2ludG9fZGVwZW5kZW5jaWVzICgkT1VUUFVULCBASU5QVVRTKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcHV0ZSBhIGxpc3Qgb2YgZGVwZW5kZW5jaWVzIGFwcHJvcHJpYXRlIGZvciB0aGUgcmVidWlsZAorIyBydWxlIG9mCisjICAgQUNfQ09ORklHX0ZJTEVTKCRPVVRQVVQ6JElOUFVUWzBdOiRJTlBVVFNbMV06Li4uKQorIyBBbHNvIGRpc3RyaWJ1dGUgJElOUFVUcyB3aGljaCBhcmUgbm90IGJ1aWx0IGJ5IGFub3RoZXIgQUNfQ09ORklHX0ZPT1MuCitzdWIgcmV3cml0ZV9pbnB1dHNfaW50b19kZXBlbmRlbmNpZXMgKCRAKQoreworICBteSAoJGZpbGUsIEBpbnB1dHMpID0gQF87CisgIG15IEByZXMgPSAoKTsKKworICBmb3IgbXkgJGkgKEBpbnB1dHMpCisgICAgeworICAgICAgIyBXZSBjYW5ub3QgY3JlYXRlIGRlcGVuZGVuY2llcyBvbiBzaGVsbCB2YXJpYWJsZXMuCisgICAgICBuZXh0IGlmIChzdWJzdGl0dXRlX2FjX3N1YnN0X3ZhcmlhYmxlcyAkaSkgPX4gL1wkLzsKKworICAgICAgaWYgKGV4aXN0cyAkYWNfY29uZmlnX2ZpbGVzX2xvY2F0aW9ueyRpfSAmJiAkaSBuZSAkZmlsZSkKKwl7CisJICBteSAkZGkgPSBkaXJuYW1lICRpOworCSAgaWYgKCRkaSBlcSAkcmVsYXRpdmVfZGlyKQorCSAgICB7CisJICAgICAgJGkgPSBiYXNlbmFtZSAkaTsKKwkgICAgfQorCSAgIyBJbiB0aGUgdG9wLWxldmVsIE1ha2VmaWxlIHdlIGRvIG5vdCB1c2UgJCh0b3BfYnVpbGRkaXIpLCBiZWNhdXNlCisJICAjIHdlIGFyZSBhbHJlYWR5IHRoZXJlLCBhbmQgc2luY2UgdGhlIHRhcmdldHMgYXJlIGJ1aWx0IHdpdGhvdXQKKwkgICMgYSAkKHRvcF9idWlsZGRpciksIGl0IGhlbHBzIEJTRCBNYWtlIHRvIG1hdGNoIHRoZW0gd2l0aAorCSAgIyBkZXBlbmRlbmNpZXMuCisJICBlbHNpZiAoJHJlbGF0aXZlX2RpciBuZSAnLicpCisJICAgIHsKKwkgICAgICAkaSA9ICckKHRvcF9idWlsZGRpcikvJyAuICRpOworCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIG1zZyAoJ2Vycm9yJywgJGFjX2NvbmZpZ19maWxlc19sb2NhdGlvbnskZmlsZX0sCisJICAgICAgICJyZXF1aXJlZCBmaWxlIGAkaScgbm90IGZvdW5kIikKKwkgICAgdW5sZXNzICRpID1+IC9cJC8gfHwgZXhpc3RzICRvdXRwdXRfZmlsZXN7JGl9IHx8IC1mICRpOworCSAgKCRpKSA9IHByZXBlbmRfc3JjZGlyICgkaSk7CisJICBwdXNoX2Rpc3RfY29tbW9uICgkaSk7CisJfQorICAgICAgcHVzaCBAcmVzLCAkaTsKKyAgICB9CisgIHJldHVybiBAcmVzOworfQorCisKKworIyAmaGFuZGxlX2NvbmZpZ3VyZSAoJE1BS0VGSUxFX0FNLCAkTUFLRUZJTEVfSU4sICRNQUtFRklMRSwgQElOUFVUUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEhhbmRsZSByZW1ha2luZyBhbmQgY29uZmlndXJlIHN0dWZmLgorIyBXZSBuZWVkIHRoZSBuYW1lIG9mIHRoZSBpbnB1dCBmaWxlLCB0byBkbyBwcm9wZXIgcmVtYWtpbmcgcnVsZXMuCitzdWIgaGFuZGxlX2NvbmZpZ3VyZSAoJCQkQCkKK3sKKyAgbXkgKCRtYWtlZmlsZV9hbSwgJG1ha2VmaWxlX2luLCAkbWFrZWZpbGUsIEBpbnB1dHMpID0gQF87CisKKyAgcHJvZ19lcnJvciAnZW1wdHkgQGlucHV0cycKKyAgICB1bmxlc3MgQGlucHV0czsKKworICBteSAoJHJlbF9tYWtlZmlsZV9hbSwgJHJlbF9tYWtlZmlsZV9pbikgPSBwcmVwZW5kX3NyY2RpciAoJG1ha2VmaWxlX2FtLAorCQkJCQkJCSAgICAkbWFrZWZpbGVfaW4pOworICBteSAkcmVsX21ha2VmaWxlID0gYmFzZW5hbWUgJG1ha2VmaWxlOworCisgIG15ICRjb2xvbl9pbmZpbGUgPSAnOicgLiBqb2luICgnOicsIEBpbnB1dHMpOworICAkY29sb25faW5maWxlID0gJycgaWYgJGNvbG9uX2luZmlsZSBlcSAiOiRtYWtlZmlsZS5pbiI7CisgIG15IEByZXdyaXR0ZW4gPSByZXdyaXRlX2lucHV0c19pbnRvX2RlcGVuZGVuY2llcyAoJG1ha2VmaWxlLCBAaW5wdXRzKTsKKyAgbXkgKCRyZWdlbl9hY2xvY2FsX200LCBAYWNsb2NhbF9tNF9kZXBzKSA9IHNjYW5fYWNsb2NhbF9tNDsKKyAgZGVmaW5lX3ByZXR0eV92YXJpYWJsZSAoJ2FtX19hY2xvY2FsX200X2RlcHMnLCBUUlVFLCBJTlRFUk5BTCwKKwkJCSAgQGNvbmZpZ3VyZV9kZXBzLCBAYWNsb2NhbF9tNF9kZXBzLAorCQkJICAnJCh0b3Bfc3JjZGlyKS8nIC4gJGNvbmZpZ3VyZV9hYyk7CisgIG15IEBjb25maWd1cmVkZXBzID0gKCckKGFtX19hY2xvY2FsX200X2RlcHMpJywgJyQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUyknKTsKKyAgcHVzaCBAY29uZmlndXJlZGVwcywgJyQoQUNMT0NBTF9NNCknIGlmIC1mICdhY2xvY2FsLm00JzsKKyAgZGVmaW5lX3ByZXR0eV92YXJpYWJsZSAoJ2FtX19jb25maWd1cmVfZGVwcycsIFRSVUUsIElOVEVSTkFMLAorCQkJICBAY29uZmlndXJlZGVwcyk7CisKKyAgbXkgJGF1dG9tYWtlX29wdGlvbnMgPSAnLS0nIC4gKGdsb2JhbF9vcHRpb24gJ2N5Z251cycgPyAnY3lnbnVzJyA6ICRzdHJpY3RuZXNzX25hbWUpCisJCQkgLiAoZ2xvYmFsX29wdGlvbiAnbm8tZGVwZW5kZW5jaWVzJyA/ICcgLS1pZ25vcmUtZGVwcycgOiAnJyk7CisKKyAgJG91dHB1dF9ydWxlcyAuPSBmaWxlX2NvbnRlbnRzCisgICAgKCdjb25maWd1cmUnLAorICAgICBuZXcgQXV0b21ha2U6OkxvY2F0aW9uLAorICAgICBNQUtFRklMRSAgICAgICAgICAgICAgPT4gJHJlbF9tYWtlZmlsZSwKKyAgICAgJ01BS0VGSUxFLURFUFMnICAgICAgID0+ICJAcmV3cml0dGVuIiwKKyAgICAgJ0NPTkZJRy1NQUtFRklMRScgICAgID0+ICgkcmVsYXRpdmVfZGlyIGVxICcuJykgPyAnJEAnIDogJyQoc3ViZGlyKS8kQCcsCisgICAgICdNQUtFRklMRS1JTicgICAgICAgICA9PiAkcmVsX21ha2VmaWxlX2luLAorICAgICAnTUFLRUZJTEUtSU4tREVQUycgICAgPT4gIkBpbmNsdWRlX3N0YWNrIiwKKyAgICAgJ01BS0VGSUxFLUFNJyAgICAgICAgID0+ICRyZWxfbWFrZWZpbGVfYW0sCisgICAgICdBVVRPTUFLRS1PUFRJT05TJyAgICA9PiAkYXV0b21ha2Vfb3B0aW9ucywKKyAgICAgJ01BS0VGSUxFLUFNLVNPVVJDRVMnID0+ICIkbWFrZWZpbGUkY29sb25faW5maWxlIiwKKyAgICAgJ1JFR0VOLUFDTE9DQUwtTTQnICAgID0+ICRyZWdlbl9hY2xvY2FsX200LAorICAgICBWRVJCT1NFICAgICAgICAgICAgICAgPT4gdmVyYm9zZV9mbGFnICgnR0VOJykpOworCisgIGlmICgkcmVsYXRpdmVfZGlyIGVxICcuJykKKyAgICB7CisgICAgICAmcHVzaF9kaXN0X2NvbW1vbiAoJ2FjY29uZmlnLmgnKQorCWlmIC1mICdhY2NvbmZpZy5oJzsKKyAgICB9CisKKyAgIyBJZiB3ZSBoYXZlIGEgY29uZmlndXJlIGhlYWRlciwgcmVxdWlyZSBpdC4KKyAgbXkgJGhkcl9pbmRleCA9IDA7CisgIG15IEBkaXN0Y2xlYW5fY29uZmlnOworICBmb3JlYWNoIG15ICRzcGVjIChAY29uZmlnX2hlYWRlcnMpCisgICAgeworICAgICAgJGhkcl9pbmRleCArPSAxOworICAgICAgIyAkQ09ORklHX0hfUEFUSDogY29uZmlnLmggZnJvbSB0b3AgbGV2ZWwuCisgICAgICBteSAoJGNvbmZpZ19oX3BhdGgsIEBpbnMpID0gc3BsaXRfY29uZmlnX2ZpbGVfc3BlYyAoJHNwZWMpOworICAgICAgbXkgJGNvbmZpZ19oX2RpciA9IGRpcm5hbWUgKCRjb25maWdfaF9wYXRoKTsKKworICAgICAgIyBJZiB0aGUgaGVhZGVyIGlzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3ZSB3YW50IHRvIGJ1aWxkCisgICAgICAjIHRoZSBoZWFkZXIgaGVyZS4gIE90aGVyd2lzZSwgaWYgd2UncmUgYXQgdGhlIHRvcG1vc3QKKyAgICAgICMgZGlyZWN0b3J5IGFuZCB0aGUgaGVhZGVyJ3MgZGlyZWN0b3J5IGRvZXNuJ3QgaGF2ZSBhCisgICAgICAjIE1ha2VmaWxlLCB0aGVuIHdlIGFsc28gd2FudCB0byBidWlsZCB0aGUgaGVhZGVyLgorICAgICAgaWYgKCRyZWxhdGl2ZV9kaXIgZXEgJGNvbmZpZ19oX2RpcgorCSAgfHwgKCRyZWxhdGl2ZV9kaXIgZXEgJy4nICYmICEgJmlzX21ha2VfZGlyICgkY29uZmlnX2hfZGlyKSkpCisJeworCSAgbXkgKCRjbl9zYW5zX2RpciwgJHN0YW1wX2Rpcik7CisJICBpZiAoJHJlbGF0aXZlX2RpciBlcSAkY29uZmlnX2hfZGlyKQorCSAgICB7CisJICAgICAgJGNuX3NhbnNfZGlyID0gYmFzZW5hbWUgKCRjb25maWdfaF9wYXRoKTsKKwkgICAgICAkc3RhbXBfZGlyID0gJyc7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgICRjbl9zYW5zX2RpciA9ICRjb25maWdfaF9wYXRoOworCSAgICAgIGlmICgkY29uZmlnX2hfZGlyIGVxICcuJykKKwkJeworCQkgICRzdGFtcF9kaXIgPSAnJzsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgICRzdGFtcF9kaXIgPSAkY29uZmlnX2hfZGlyIC4gJy8nOworCQl9CisJICAgIH0KKworCSAgIyBUaGlzIHdpbGwgYWxzbyBkaXN0cmlidXRlIGFsbCBpbnB1dHMuCisJICBAaW5zID0gcmV3cml0ZV9pbnB1dHNfaW50b19kZXBlbmRlbmNpZXMgKCRjb25maWdfaF9wYXRoLCBAaW5zKTsKKworCSAgIyBDYW5ub3QgZGVmaW5lIHJlYnVpbGQgcnVsZXMgZm9yIGZpbGVuYW1lcyB3aXRoIHNoZWxsIHZhcmlhYmxlcy4KKwkgIG5leHQgaWYgKHN1YnN0aXR1dGVfYWNfc3Vic3RfdmFyaWFibGVzICRjb25maWdfaF9wYXRoKSA9fiAvXCQvOworCisJICAjIEhlYWRlciBkZWZpbmVkIGluIHRoaXMgZGlyZWN0b3J5LgorCSAgbXkgQGZpbGVzOworCSAgaWYgKC1mICRjb25maWdfaF9wYXRoIC4gJy50b3AnKQorCSAgICB7CisJICAgICAgcHVzaCAoQGZpbGVzLCAiJGNuX3NhbnNfZGlyLnRvcCIpOworCSAgICB9CisJICBpZiAoLWYgJGNvbmZpZ19oX3BhdGggLiAnLmJvdCcpCisJICAgIHsKKwkgICAgICBwdXNoIChAZmlsZXMsICIkY25fc2Fuc19kaXIuYm90Iik7CisJICAgIH0KKworCSAgcHVzaF9kaXN0X2NvbW1vbiAoQGZpbGVzKTsKKworCSAgIyBGb3Igbm93LCBhY2NvbmZpZy5oIGNhbiBvbmx5IGFwcGVhciBpbiB0aGUgdG9wIHNyY2Rpci4KKwkgIGlmICgtZiAnYWNjb25maWcuaCcpCisJICAgIHsKKwkgICAgICBwdXNoIChAZmlsZXMsICckKHRvcF9zcmNkaXIpL2FjY29uZmlnLmgnKTsKKwkgICAgfQorCisJICBteSAkc3RhbXAgPSAiJHtzdGFtcF9kaXJ9c3RhbXAtaCR7aGRyX2luZGV4fSI7CisJICAkb3V0cHV0X3J1bGVzIC49CisJICAgIGZpbGVfY29udGVudHMgKCdyZW1ha2UtaGRyJywKKwkJCSAgIG5ldyBBdXRvbWFrZTo6TG9jYXRpb24sCisJCQkgICBGSUxFUyAgICAgICAgICAgID0+ICJAZmlsZXMiLAorCQkJICAgQ09ORklHX0ggICAgICAgICA9PiAkY25fc2Fuc19kaXIsCisJCQkgICBDT05GSUdfSElOICAgICAgID0+ICRpbnNbMF0sCisJCQkgICBDT05GSUdfSF9ERVBTICAgID0+ICJAaW5zIiwKKwkJCSAgIENPTkZJR19IX1BBVEggICAgPT4gJGNvbmZpZ19oX3BhdGgsCisJCQkgICBTVEFNUCAgICAgICAgICAgID0+ICIkc3RhbXAiKTsKKworCSAgcHVzaCBAZGlzdGNsZWFuX2NvbmZpZywgJGNuX3NhbnNfZGlyLCAkc3RhbXA7CisJfQorICAgIH0KKworICAkb3V0cHV0X3J1bGVzIC49IGZpbGVfY29udGVudHMgKCdjbGVhbi1oZHInLAorCQkJCSAgbmV3IEF1dG9tYWtlOjpMb2NhdGlvbiwKKwkJCQkgIEZJTEVTID0+ICJAZGlzdGNsZWFuX2NvbmZpZyIpCisgICAgaWYgQGRpc3RjbGVhbl9jb25maWc7CisKKyAgIyBEaXN0cmlidXRlIGFuZCBkZWZpbmUgbWtpbnN0YWxsZGlycyBvbmx5IGlmIGl0IGlzIGFscmVhZHkgcHJlc2VudAorICAjIGluIHRoZSBwYWNrYWdlLCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAoc29tZSBwZW9wbGUgbWF5IHN0aWxsCisgICMgdXNlICQobWtpbnN0YWxsZGlycykpLgorICBteSAkbWtpZHBhdGggPSAiJGNvbmZpZ19hdXhfZGlyL21raW5zdGFsbGRpcnMiOworICBpZiAoLWYgJG1raWRwYXRoKQorICAgIHsKKyAgICAgICMgVXNlIHJlcXVpcmVfZmlsZSBzbyB0aGF0IGFueSBleGlzdGluZyBzY3JpcHQgZ2V0cyB1cGRhdGVkCisgICAgICAjIGJ5IC0tZm9yY2UtbWlzc2luZy4KKyAgICAgIHJlcXVpcmVfY29uZl9maWxlICgkbWtpZHBhdGgsIEZPUkVJR04sICdta2luc3RhbGxkaXJzJyk7CisgICAgICBkZWZpbmVfdmFyaWFibGUgKCdta2luc3RhbGxkaXJzJywKKwkJICAgICAgICJcJChTSEVMTCkgJGFtX2NvbmZpZ19hdXhfZGlyL21raW5zdGFsbGRpcnMiLCBJTlRFUk5BTCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgIyBVc2UgJChpbnN0YWxsX3NoKSwgbm90ICQoTUtESVJfUCkgYmVjYXVzZSB0aGUgbGF0dGVyIHJlcXVpcmVzCisgICAgICAjIGF0IGxlYXN0IG9uZSBhcmd1bWVudCwgYW5kICQobWtpbnN0YWxsZGlycykgdXNlZCB0byB3b3JrCisgICAgICAjIGV2ZW4gd2l0aG91dCBhcmd1bWVudHMgKGUuZy4gJChta2luc3RhbGxkaXJzKSAkKGNvbmRpdGlvbmFsX2RpcikpLgorICAgICAgZGVmaW5lX3ZhcmlhYmxlICgnbWtpbnN0YWxsZGlycycsICckKGluc3RhbGxfc2gpIC1kJywgSU5URVJOQUwpOworICAgIH0KKworICByZWplY3RfdmFyICgnQ09ORklHX0hFQURFUicsCisJICAgICAgImBDT05GSUdfSEVBREVSJyBpcyBhbiBhbmFjaHJvbmlzbTsgbm93IGRldGVybWluZWQgIgorCSAgICAgIC4gImF1dG9tYXRpY2FsbHlcbmZyb20gYCRjb25maWd1cmVfYWMnIik7CisKKyAgbXkgQGNvbmZpZ19oOworICBmb3JlYWNoIG15ICRzcGVjIChAY29uZmlnX2hlYWRlcnMpCisgICAgeworICAgICAgbXkgKCRvdXQsIEBpbnMpID0gc3BsaXRfY29uZmlnX2ZpbGVfc3BlYyAoJHNwZWMpOworICAgICAgIyBHZW5lcmF0ZSBDT05GSUdfSEVBREVSIGRlZmluZS4KKyAgICAgIGlmICgkcmVsYXRpdmVfZGlyIGVxIGRpcm5hbWUgKCRvdXQpKQorCXsKKwkgIHB1c2ggQGNvbmZpZ19oLCBiYXNlbmFtZSAoJG91dCk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHB1c2ggQGNvbmZpZ19oLCAiXCQodG9wX2J1aWxkZGlyKS8kb3V0IjsKKwl9CisgICAgfQorICBkZWZpbmVfdmFyaWFibGUgKCJDT05GSUdfSEVBREVSIiwgIkBjb25maWdfaCIsIElOVEVSTkFMKQorICAgIGlmIEBjb25maWdfaDsKKworICAjIE5vdyBsb29rIGZvciBvdGhlciBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSB3aGljaCBtdXN0IGJlIHJlbWFkZQorICAjIGJ5IGNvbmZpZy5zdGF0dXMsIGFuZCBnZW5lcmF0ZSBydWxlcyBmb3IgdGhlbS4KKyAgbXkgQGFjdHVhbF9vdGhlcl9maWxlcyA9ICgpOworICAjIFRoZXNlIGdldCBjbGVhbmVkIG9ubHkgaW4gYSBWUEFUSCBidWlsZC4KKyAgbXkgQGFjdHVhbF9vdGhlcl92cGF0aF9maWxlcyA9ICgpOworICBmb3JlYWNoIG15ICRsZmlsZSAoQG90aGVyX2lucHV0X2ZpbGVzKQorICAgIHsKKyAgICAgIG15ICRmaWxlOworICAgICAgbXkgQGlucHV0czsKKyAgICAgIGlmICgkbGZpbGUgPX4gL14oW146XSopOiguKikkLykKKwl7CisJICAjIFRoaXMgaXMgdGhlICI6IiBzeW50YXggb2YgQUNfT1VUUFVULgorCSAgJGZpbGUgPSAkMTsKKwkgIEBpbnB1dHMgPSBzcGxpdCAoJzonLCAkMik7CisJfQorICAgICAgZWxzZQorCXsKKwkgICMgTm9ybWFsIHVzYWdlLgorCSAgJGZpbGUgPSAkbGZpbGU7CisJICBAaW5wdXRzID0gJGZpbGUgLiAnLmluJzsKKwl9CisKKyAgICAgICMgQXV0b21ha2UgZmlsZXMgc2hvdWxkIG5vdCBiZSBzdG9yZWQgaW4gaGVyZSwgYnV0IGluICVNQUtFX0xJU1QuCisgICAgICBwcm9nX2Vycm9yICgiJGxmaWxlIGluIFxAb3RoZXJfaW5wdXRfZmlsZXNcbiIKKwkJICAuICJcQG90aGVyX2lucHV0X2ZpbGVzID0gKEBvdGhlcl9pbnB1dF9maWxlcykiKQorCWlmIC1mICRmaWxlIC4gJy5hbSc7CisKKyAgICAgIG15ICRsb2NhbCA9IGJhc2VuYW1lICgkZmlsZSk7CisKKyAgICAgICMgV2Ugc2tpcCBmaWxlcyB0aGF0IGFyZW4ndCBpbiB0aGlzIGRpcmVjdG9yeS4gIEhvd2V2ZXIsIGlmCisgICAgICAjIHRoZSBmaWxlJ3MgZGlyZWN0b3J5IGRvZXMgbm90IGhhdmUgYSBNYWtlZmlsZSwgYW5kIHdlIGFyZQorICAgICAgIyBjdXJyZW50bHkgZG9pbmcgYC4nLCB0aGVuIHdlIGNyZWF0ZSBhIHJ1bGUgdG8gcmVidWlsZCB0aGUKKyAgICAgICMgZmlsZSBpbiB0aGUgc3ViZGlyLgorICAgICAgbXkgJGZkID0gZGlybmFtZSAoJGZpbGUpOworICAgICAgaWYgKCRmZCBuZSAkcmVsYXRpdmVfZGlyKQorCXsKKwkgIGlmICgkcmVsYXRpdmVfZGlyIGVxICcuJyAmJiAhICZpc19tYWtlX2RpciAoJGZkKSkKKwkgICAgeworCSAgICAgICRsb2NhbCA9ICRmaWxlOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBuZXh0OworCSAgICB9CisJfQorCisgICAgICBteSBAcmV3cml0dGVuX2lucHV0cyA9IHJld3JpdGVfaW5wdXRzX2ludG9fZGVwZW5kZW5jaWVzICgkZmlsZSwgQGlucHV0cyk7CisKKyAgICAgICMgQ2Fubm90IG91dHB1dCBydWxlcyBmb3Igc2hlbGwgdmFyaWFibGVzLgorICAgICAgbmV4dCBpZiAoc3Vic3RpdHV0ZV9hY19zdWJzdF92YXJpYWJsZXMgJGxvY2FsKSA9fiAvXCQvOworCisgICAgICBteSAkY29uZHN0ciA9ICcnOworICAgICAgbXkgJGNvbmQgPSAkYWNfY29uZmlnX2ZpbGVzX2NvbmRpdGlvbnskbGZpbGV9OworICAgICAgaWYgKGRlZmluZWQgJGNvbmQpCisgICAgICAgIHsKKwkgICRjb25kc3RyID0gJGNvbmQtPnN1YnN0X3N0cmluZzsKKwkgIEF1dG9tYWtlOjpSdWxlOjpkZWZpbmUgKCRsb2NhbCwgJGNvbmZpZ3VyZV9hYywgUlVMRV9BVVRPTUFLRSwgJGNvbmQsCisJCQkJICAkYWNfY29uZmlnX2ZpbGVzX2xvY2F0aW9ueyRmaWxlfSk7CisgICAgICAgIH0KKyAgICAgICRvdXRwdXRfcnVsZXMgLj0gKCRjb25kc3RyIC4gJGxvY2FsIC4gJzogJworCQkJLiAnJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJworCQkJLiAiQHJld3JpdHRlbl9pbnB1dHNcbiIKKwkJCS4gJGNvbmRzdHIgLiAiXHQiCisJCQkuICdjZCAkKHRvcF9idWlsZGRpcikgJiYgJworCQkJLiAnJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICcKKwkJCS4gKCRyZWxhdGl2ZV9kaXIgZXEgJy4nID8gJycgOiAnJChzdWJkaXIpLycpCisJCQkuICckQCcKKwkJCS4gIlxuIik7CisgICAgICBwdXNoIChAYWN0dWFsX290aGVyX2ZpbGVzLCAkbG9jYWwpOworICAgIH0KKworICAjIEZvciBsaW5rcyB3ZSBzaG91bGQgY2xlYW4gZGVzdGluYXRpb25zIGFuZCBkaXN0cmlidXRlIHNvdXJjZXMuCisgIGZvcmVhY2ggbXkgJHNwZWMgKEBjb25maWdfbGlua3MpCisgICAgeworICAgICAgbXkgKCRsaW5rLCAkZmlsZSkgPSBzcGxpdCAvOi8sICRzcGVjOworICAgICAgIyBTb21lIHBlb3BsZSBkbyBBQ19DT05GSUdfTElOS1MoJGNvbXB1dGVkKS4gIFdlIG9ubHkgaGFuZGxlCisgICAgICAjIHRoZSBERVNUOlNSQyBmb3JtLgorICAgICAgbmV4dCB1bmxlc3MgJGZpbGU7CisgICAgICBteSAkd2hlcmUgPSAkYWNfY29uZmlnX2ZpbGVzX2xvY2F0aW9ueyRsaW5rfTsKKworICAgICAgIyBTa2lwIGRlc3RpbmF0aW9ucyB0aGF0IGNvbnRhaW4gc2hlbGwgdmFyaWFibGVzLgorICAgICAgaWYgKChzdWJzdGl0dXRlX2FjX3N1YnN0X3ZhcmlhYmxlcyAkbGluaykgIX4gL1wkLykKKwl7CisJICAjIFdlIHNraXAgbGlua3MgdGhhdCBhcmVuJ3QgaW4gdGhpcyBkaXJlY3RvcnkuICBIb3dldmVyLCBpZgorCSAgIyB0aGUgbGluaydzIGRpcmVjdG9yeSBkb2VzIG5vdCBoYXZlIGEgTWFrZWZpbGUsIGFuZCB3ZSBhcmUKKwkgICMgY3VycmVudGx5IGRvaW5nIGAuJywgdGhlbiB3ZSBhZGQgdGhlIGxpbmsgdG8gQ09ORklHX0NMRUFOX0ZJTEVTCisJICAjIGluIGAuJ3MgTWFrZWZpbGUuaW4uCisJICBteSAkbG9jYWwgPSBiYXNlbmFtZSAoJGxpbmspOworCSAgbXkgJGZkID0gZGlybmFtZSAoJGxpbmspOworCSAgaWYgKCRmZCBuZSAkcmVsYXRpdmVfZGlyKQorCSAgICB7CisJICAgICAgaWYgKCRyZWxhdGl2ZV9kaXIgZXEgJy4nICYmICEgJmlzX21ha2VfZGlyICgkZmQpKQorCQl7CisJCSAgJGxvY2FsID0gJGxpbms7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICAkbG9jYWwgPSB1bmRlZjsKKwkJfQorCSAgICB9CisJICBpZiAoJGZpbGUgbmUgJGxpbmspCisJICAgIHsKKwkgICAgICBwdXNoIEBhY3R1YWxfb3RoZXJfZmlsZXMsICRsb2NhbCBpZiAkbG9jYWw7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHB1c2ggQGFjdHVhbF9vdGhlcl92cGF0aF9maWxlcywgJGxvY2FsIGlmICRsb2NhbDsKKwkgICAgfQorCX0KKworICAgICAgIyBEbyBub3QgcHJvY2VzcyBzb3VyY2VzIHRoYXQgY29udGFpbiBzaGVsbCB2YXJpYWJsZXMuCisgICAgICBpZiAoKHN1YnN0aXR1dGVfYWNfc3Vic3RfdmFyaWFibGVzICRmaWxlKSAhfiAvXCQvKQorCXsKKwkgIG15ICRmZCA9IGRpcm5hbWUgKCRmaWxlKTsKKworCSAgIyBXZSBkaXN0cmlidXRlIGZpbGVzIHRoYXQgYXJlIGluIHRoaXMgZGlyZWN0b3J5LgorCSAgIyBBdCB0aGUgdG9wLWxldmVsIChgLicpIHdlIGFsc28gZGlzdHJpYnV0ZSBmaWxlcyB3aG9zZQorCSAgIyBkaXJlY3RvcnkgZG9lcyBub3QgaGF2ZSBhIE1ha2VmaWxlLgorCSAgaWYgKCgkZmQgZXEgJHJlbGF0aXZlX2RpcikKKwkgICAgICB8fCAoJHJlbGF0aXZlX2RpciBlcSAnLicgJiYgISAmaXNfbWFrZV9kaXIgKCRmZCkpKQorCSAgICB7CisJICAgICAgIyBUaGUgZm9sbG93aW5nIHdpbGwgZGlzdHJpYnV0ZSAkZmlsZSBhcyBhIHNpZGUtZWZmZWN0IHdoZW4KKwkgICAgICAjIGl0IGlzIGFwcHJvcHJpYXRlIChpLmUuLCB3aGVuICRmaWxlIGlzIG5vdCBhbHJlYWR5IGFuIG91dHB1dCkuCisJICAgICAgIyBXZSBkbyBub3QgbmVlZCB0aGUgcmVzdWx0LCBqdXN0IHRoZSBzaWRlLWVmZmVjdC4KKwkgICAgICByZXdyaXRlX2lucHV0c19pbnRvX2RlcGVuZGVuY2llcyAoJGxpbmssICRmaWxlKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgIyBUaGVzZSBmaWxlcyBnZXQgcmVtb3ZlZCBieSAibWFrZSBkaXN0Y2xlYW4iLgorICBkZWZpbmVfcHJldHR5X3ZhcmlhYmxlICgnQ09ORklHX0NMRUFOX0ZJTEVTJywgVFJVRSwgSU5URVJOQUwsCisJCQkgIEBhY3R1YWxfb3RoZXJfZmlsZXMpOworICBkZWZpbmVfcHJldHR5X3ZhcmlhYmxlICgnQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTJywgVFJVRSwgSU5URVJOQUwsCisJCQkgIEBhY3R1YWxfb3RoZXJfdnBhdGhfZmlsZXMpOworfQorCisjIEhhbmRsZSBDIGhlYWRlcnMuCitzdWIgaGFuZGxlX2hlYWRlcnMKK3sKKyAgICBteSBAciA9ICZhbV9pbnN0YWxsX3ZhciAoJy1kZWZhdWx0ZGlzdCcsICdoZWFkZXInLCAnSEVBREVSUycsICdpbmNsdWRlJywKKwkJCSAgICAgJ29sZGluY2x1ZGUnLCAncGtnaW5jbHVkZScsCisJCQkgICAgICdub2luc3QnLCAnY2hlY2snKTsKKyAgICBmb3JlYWNoIChAcikKKyAgICB7CisgICAgICBuZXh0IHVubGVzcyAkXy0+WzFdID1+IC9cLi4qJC87CisgICAgICAmc2F3X2V4dGVuc2lvbiAoJCYpOworICAgIH0KK30KKworc3ViIGhhbmRsZV9nZXR0ZXh0Cit7CisgIHJldHVybiBpZiAhICRzZWVuX2dldHRleHQgfHwgJHJlbGF0aXZlX2RpciBuZSAnLic7CisKKyAgbXkgJHN1YmRpcnMgPSB2YXIgJ1NVQkRJUlMnOworCisgIGlmICghICRzdWJkaXJzKQorICAgIHsKKyAgICAgIGVycl9hYyAiQU1fR05VX0dFVFRFWFQgdXNlZCBidXQgU1VCRElSUyBub3QgZGVmaW5lZCI7CisgICAgICByZXR1cm47CisgICAgfQorCisgICMgUGVyZm9ybSBzb21lIHNhbml0eSBjaGVja3MgdG8gaGVscCB1c2VycyBnZXQgdGhlIHJpZ2h0IHNldHVwLgorICAjIFdlIGRpc2FibGUgdGhlc2UgdGVzdHMgd2hlbiBwby8gZG9lc24ndCBleGlzdCBpbiBvcmRlciBub3QgdG8gZGlzYWxsb3cKKyAgIyB1bnVzdWFsIGdldHRleHQgc2V0dXBzLgorICAjCisgICMgQnJ1bm8gSGFpYmxlOgorICAjIHwgVGhlIGlkZWEgaXM6CisgICMgfAorICAjIHwgIDEpIElmIGEgcGFja2FnZSBkb2Vzbid0IGhhdmUgYSBkaXJlY3RvcnkgcG8vIGF0IHRvcCBsZXZlbCwgaXQKKyAgIyB8ICAgICB3aWxsIGxpa2VseSBoYXZlIG11bHRpcGxlIHBvLyBkaXJlY3RvcmllcyBpbiBzdWJwYWNrYWdlcy4KKyAgIyB8CisgICMgfCAgMikgSXQgaXMgdXNlZnVsIHRvIHdhcm4gZm9yIHRoZSBhYnNlbmNlIG9mIGludGwvIGlmIEFNX0dOVV9HRVRURVhUCisgICMgfCAgICAgaXMgdXNlZCB3aXRob3V0ICdleHRlcm5hbCcuIEl0IGlzIGFsc28gdXNlZnVsIHRvIHdhcm4gZm9yIHRoZQorICAjIHwgICAgIHByZXNlbmNlIG9mIGludGwvIGlmIEFNX0dOVV9HRVRURVhUKFtleHRlcm5hbF0pIGlzIHVzZWQuIEJvdGgKKyAgIyB8ICAgICB3YXJuaW5ncyBhcHBseSBvbmx5IHRvIHRoZSB1c3VhbCBsYXlvdXQgb2YgcGFja2FnZXMsIHRoZXJlZm9yZQorICAjIHwgICAgIHRoZXkgc2hvdWxkIGJvdGggYmUgZGlzYWJsZWQgaWYgbm8gcG8vIGRpcmVjdG9yeSBpcyBmb3VuZCBhdAorICAjIHwgICAgIHRvcCBsZXZlbC4KKworICBpZiAoLWQgJ3BvJykKKyAgICB7CisgICAgICBteSBAc3ViZGlycyA9ICRzdWJkaXJzLT52YWx1ZV9hc19saXN0X3JlY3Vyc2l2ZTsKKworICAgICAgbXNnX3ZhciAoJ3N5bnRheCcsICRzdWJkaXJzLAorCSAgICAgICAiQU1fR05VX0dFVFRFWFQgdXNlZCBidXQgYHBvJyBub3QgaW4gU1VCRElSUyIpCisJaWYgISBncmVwICgkXyBlcSAncG8nLCBAc3ViZGlycyk7CisKKyAgICAgICMgaW50bC8gaXMgbm90IHJlcXVpcmVkIHdoZW4gQU1fR05VX0dFVFRFWFQgaXMgY2FsbGVkIHdpdGggdGhlCisgICAgICAjIGBleHRlcm5hbCcgb3B0aW9uIGFuZCBBTV9HTlVfR0VUVEVYVF9JTlRMX1NVQkRJUiBpcyBub3QgY2FsbGVkLgorICAgICAgbXNnX3ZhciAoJ3N5bnRheCcsICRzdWJkaXJzLAorCSAgICAgICAiQU1fR05VX0dFVFRFWFQgdXNlZCBidXQgYGludGwnIG5vdCBpbiBTVUJESVJTIikKKwlpZiAoISAoJHNlZW5fZ2V0dGV4dF9leHRlcm5hbCAmJiAhICRzZWVuX2dldHRleHRfaW50bCkKKwkgICAgJiYgISBncmVwICgkXyBlcSAnaW50bCcsIEBzdWJkaXJzKSk7CisKKyAgICAgICMgaW50bC8gc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggQU1fR05VX0dFVFRFWFQoW2V4dGVybmFsXSksIGV4Y2VwdAorICAgICAgIyBpZiBBTV9HTlVfR0VUVEVYVF9JTlRMX1NVQkRJUiBpcyBjYWxsZWQuCisgICAgICBtc2dfdmFyICgnc3ludGF4JywgJHN1YmRpcnMsCisJICAgICAgICJgaW50bCcgc2hvdWxkIG5vdCBiZSBpbiBTVUJESVJTIHdoZW4gIgorCSAgICAgICAuICJBTV9HTlVfR0VUVEVYVChbZXh0ZXJuYWxdKSBpcyB1c2VkIikKKwlpZiAoJHNlZW5fZ2V0dGV4dF9leHRlcm5hbCAmJiAhICRzZWVuX2dldHRleHRfaW50bAorCSAgICAmJiBncmVwICgkXyBlcSAnaW50bCcsIEBzdWJkaXJzKSk7CisgICAgfQorCisgIHJlcXVpcmVfZmlsZSAoJGFjX2dldHRleHRfbG9jYXRpb24sIEdOVSwgJ0FCT1VULU5MUycpOworfQorCisjIEhhbmRsZSBmb290ZXIgZWxlbWVudHMuCitzdWIgaGFuZGxlX2Zvb3RlcgoreworICAgIHJlamVjdF9ydWxlICgnLlNVRkZJWEVTJywKKwkJICJ1c2UgdmFyaWFibGUgYFNVRkZJWEVTJywgbm90IHRhcmdldCBgLlNVRkZJWEVTJyIpOworCisgICAgIyBOb3RlOiBBSVggNC4xIC9iaW4vbWFrZSB3aWxsIGZhaWwgaWYgYW55IHN1ZmZpeCBydWxlIGFwcGVhcnMKKyAgICAjIGJlZm9yZSAuU1VGRklYRVMuICBTbyB3ZSBtYWtlIHN1cmUgdGhhdCAuU1VGRklYRVMgYXBwZWFycyBiZWZvcmUKKyAgICAjIGFueXRoaW5nIGVsc2UsIGJ5IHN0aWNraW5nIGl0IHJpZ2h0IGFmdGVyIHRoZSBkZWZhdWx0OiB0YXJnZXQuCisgICAgJG91dHB1dF9oZWFkZXIgLj0gIi5TVUZGSVhFUzpcbiI7CisgICAgbXkgJHN1ZmZpeGVzID0gdmFyICdTVUZGSVhFUyc7CisgICAgbXkgQHN1ZmZpeGVzID0gQXV0b21ha2U6OlJ1bGU6OnN1ZmZpeGVzOworICAgIGlmIChAc3VmZml4ZXMgfHwgJHN1ZmZpeGVzKQorICAgIHsKKwkjIE1ha2Ugc3VyZSBTVUZGSVhFUyBoYXMgdW5pcXVlIGVsZW1lbnRzLiAgU29ydCB0aGVtIHRvIGVuc3VyZQorCSMgdGhlIG91dHB1dCByZW1haW5zIGNvbnNpc3RlbnQuICBIb3dldmVyLCAkKFNVRkZJWEVTKSBpcworCSMgYWx3YXlzIGF0IHRoZSBzdGFydCBvZiB0aGUgbGlzdCwgdW5zb3J0ZWQuICBUaGlzIGlzIGRvbmUKKwkjIGJlY2F1c2UgbWFrZSB3aWxsIGNob29zZSBydWxlcyBkZXBlbmRpbmcgb24gdGhlIG9yZGVyaW5nIG9mCisJIyBzdWZmaXhlcywgYW5kIHRoaXMgbGV0cyB0aGUgdXNlciBoYXZlIHNvbWUgY29udHJvbC4gIFB1c2gKKwkjIGFjdHVhbCBzdWZmaXhlcywgYW5kIG5vdCAkKFNVRkZJWEVTKS4gIFNvbWUgdmVyc2lvbnMgb2YgbWFrZQorCSMgZG8gbm90IGxpa2UgdmFyaWFibGUgc3Vic3RpdHV0aW9ucyBvbiB0aGUgLlNVRkZJWEVTIGxpbmUuCisJbXkgQHVzZXJfc3VmZml4ZXMgPSAoJHN1ZmZpeGVzCisJCQkgICAgID8gJHN1ZmZpeGVzLT52YWx1ZV9hc19saXN0X3JlY3Vyc2l2ZSA6ICgpKTsKKworCW15ICVzdWZmaXhlcyA9IG1hcCB7ICRfID0+IDEgfSBAc3VmZml4ZXM7CisJZGVsZXRlIEBzdWZmaXhlc3tAdXNlcl9zdWZmaXhlc307CisKKwkkb3V0cHV0X2hlYWRlciAuPSAoIi5TVUZGSVhFUzogIgorCQkJICAgLiBqb2luICgnICcsIEB1c2VyX3N1ZmZpeGVzLCBzb3J0IGtleXMgJXN1ZmZpeGVzKQorCQkJICAgLiAiXG4iKTsKKyAgICB9CisKKyAgICAkb3V0cHV0X3RyYWlsZXIgLj0gZmlsZV9jb250ZW50cyAoJ2Zvb3RlcicsIG5ldyBBdXRvbWFrZTo6TG9jYXRpb24pOworfQorCisKKyMgR2VuZXJhdGUgYG1ha2UgaW5zdGFsbCcgcnVsZXMuCitzdWIgaGFuZGxlX2luc3RhbGwgKCkKK3sKKyAgJG91dHB1dF9ydWxlcyAuPSAmZmlsZV9jb250ZW50cworICAgICgnaW5zdGFsbCcsCisgICAgIG5ldyBBdXRvbWFrZTo6TG9jYXRpb24sCisgICAgIG1heWJlX0JVSUxUX1NPVVJDRVMgPT4gKHNldF9zZWVuICgnQlVJTFRfU09VUkNFUycpCisJCQkgICAgID8gKCIgXCQoQlVJTFRfU09VUkNFUylcbiIKKwkJCQkuICJcdFwkKE1BS0UpIFwkKEFNX01BS0VGTEFHUykiKQorCQkJICAgICA6ICcnKSwKKyAgICAgJ2luc3RhbGxkaXJzLWxvY2FsJyA9PiAodXNlcl9waG9ueV9ydWxlICdpbnN0YWxsZGlycy1sb2NhbCcKKwkJCSAgICAgPyAnIGluc3RhbGxkaXJzLWxvY2FsJyA6ICcnKSwKKyAgICAgYW1fX2luc3RhbGxkaXJzID0+IHZhcmlhYmxlX3ZhbHVlICgnYW1fX2luc3RhbGxkaXJzJykgfHwgJycpOworfQorCisKKyMgRGVhbCB3aXRoIGFsbCBhbmQgYWxsLWFtLgorc3ViIGhhbmRsZV9hbGwgKCQpCit7CisgICAgbXkgKCRtYWtlZmlsZSkgPSBAXzsKKworICAgICMgT3V0cHV0IGBhbGwtYW0nLgorCisgICAgIyBQdXQgdGhpcyBhdCB0aGUgYmVnaW5uaW5nIGZvciB0aGUgc2FrZSBvZiBub24tR05VIG1ha2VzLiAgVGhpcworICAgICMgaXMgc3RpbGwgd3JvbmcgaWYgdGhlc2UgbWFrZXMgY2FuIHJ1biBwYXJhbGxlbCBqb2JzLiAgQnV0IGl0IGlzCisgICAgIyByaWdodCBlbm91Z2guCisgICAgdW5zaGlmdCAoQGFsbCwgYmFzZW5hbWUgKCRtYWtlZmlsZSkpOworCisgICAgZm9yZWFjaCBteSAkc3BlYyAoQGNvbmZpZ19oZWFkZXJzKQorICAgICAgeworCW15ICgkb3V0LCBAaW5zKSA9IHNwbGl0X2NvbmZpZ19maWxlX3NwZWMgKCRzcGVjKTsKKwlwdXNoIChAYWxsLCBiYXNlbmFtZSAoJG91dCkpCisJICBpZiBkaXJuYW1lICgkb3V0KSBlcSAkcmVsYXRpdmVfZGlyOworICAgICAgfQorCisgICAgIyBJbnN0YWxsIGBhbGwnIGhvb2tzLgorICAgIHB1c2ggKEBhbGwsICJhbGwtbG9jYWwiKQorICAgICAgaWYgdXNlcl9waG9ueV9ydWxlICJhbGwtbG9jYWwiOworCisgICAgJnByZXR0eV9wcmludF9ydWxlICgiYWxsLWFtOiIsICJcdFx0IiwgQGFsbCk7CisgICAgJmRlcGVuZCAoJy5QSE9OWScsICdhbGwtYW0nLCAnYWxsJyk7CisKKworICAgICMgT3V0cHV0IGBhbGwnLgorCisgICAgbXkgQGxvY2FsX2hlYWRlcnMgPSAoKTsKKyAgICBwdXNoIEBsb2NhbF9oZWFkZXJzLCAnJChCVUlMVF9TT1VSQ0VTKScKKyAgICAgIGlmIHZhciAoJ0JVSUxUX1NPVVJDRVMnKTsKKyAgICBmb3JlYWNoIG15ICRzcGVjIChAY29uZmlnX2hlYWRlcnMpCisgICAgICB7CisJbXkgKCRvdXQsIEBpbnMpID0gc3BsaXRfY29uZmlnX2ZpbGVfc3BlYyAoJHNwZWMpOworCXB1c2ggQGxvY2FsX2hlYWRlcnMsIGJhc2VuYW1lICgkb3V0KQorCSAgaWYgZGlybmFtZSAoJG91dCkgZXEgJHJlbGF0aXZlX2RpcjsKKyAgICAgIH0KKworICAgIGlmIChAbG9jYWxfaGVhZGVycykKKyAgICAgIHsKKwkjIFdlIG5lZWQgdG8gbWFrZSBzdXJlIGNvbmZpZy5oIGlzIGJ1aWx0IGJlZm9yZSB3ZSByZWN1cnNlLgorCSMgV2UgYWxzbyB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IGJ1aWx0IHNvdXJjZXMgYXJlIGJ1aWx0CisJIyBiZWZvcmUgYW55IG9yZGluYXJ5IGBhbGwnIHRhcmdldHMgYXJlIHJ1bi4gIFdlIGNhbid0IGRvIHRoaXMKKwkjIGJ5IGNoYW5naW5nIHRoZSBvcmRlciBvZiBkZXBlbmRlbmNpZXMgdG8gdGhlICJhbGwiIGJlY2F1c2UKKwkjIHRoYXQgYnJlYWtzIHdoZW4gdXNpbmcgcGFyYWxsZWwgbWFrZXMuICBJbnN0ZWFkIHdlIGhhbmRsZQorCSMgdGhpbmdzIGV4cGxpY2l0bHkuCisJJG91dHB1dF9hbGwgLj0gKCJhbGw6IEBsb2NhbF9oZWFkZXJzIgorCQkJLiAiXG5cdCIKKwkJCS4gJyQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICcKKwkJCS4gKHZhciAoJ1NVQkRJUlMnKSA/ICdhbGwtcmVjdXJzaXZlJyA6ICdhbGwtYW0nKQorCQkJLiAiXG5cbiIpOworICAgICAgICBkZXBlbmQgKCcuTUFLRScsICdhbGwnKTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisJJG91dHB1dF9hbGwgLj0gImFsbDogIiAuICh2YXIgKCdTVUJESVJTJykKKwkJCQkgID8gJ2FsbC1yZWN1cnNpdmUnIDogJ2FsbC1hbScpIC4gIlxuXG4iOworICAgICAgfQorfQorCisKKyMgJmRvX2NoZWNrX21lcmdlX3RhcmdldCAoKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEhhbmRsZSBjaGVjayBtZXJnZSB0YXJnZXQgc3BlY2lhbGx5Lgorc3ViIGRvX2NoZWNrX21lcmdlX3RhcmdldCAoKQoreworICAjIEluY2x1ZGUgdXNlci1kZWZpbmVkIGxvY2FsIGZvcm0gb2YgdGFyZ2V0LgorICBwdXNoIEBjaGVja190ZXN0cywgJ2NoZWNrLWxvY2FsJworICAgIGlmIHVzZXJfcGhvbnlfcnVsZSAnY2hlY2stbG9jYWwnOworCisgICMgSW4gLS1jeWdudXMgbW9kZSwgY2hlY2sgZG9lc24ndCBkZXBlbmQgb24gYWxsLgorICBpZiAob3B0aW9uICdjeWdudXMnKQorICAgIHsKKyAgICAgICMgSnVzdCBydW4gdGhlIGxvY2FsIGNoZWNrIHJ1bGVzLgorICAgICAgcHJldHR5X3ByaW50X3J1bGUgKCdjaGVjay1hbTonLCAiXHRcdCIsIEBjaGVjayk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgIyBUaGUgY2hlY2sgdGFyZ2V0IG11c3QgZGVwZW5kIG9uIHRoZSBsb2NhbCBlcXVpdmFsZW50IG9mCisgICAgICAjIGBhbGwnLCB0byBlbnN1cmUgYWxsIHRoZSBwcmltYXJ5IHRhcmdldHMgYXJlIGJ1aWx0LiAgVGhlbiBpdAorICAgICAgIyBtdXN0IGJ1aWxkIHRoZSBsb2NhbCBjaGVjayBydWxlcy4KKyAgICAgICRvdXRwdXRfcnVsZXMgLj0gImNoZWNrLWFtOiBhbGwtYW1cbiI7CisgICAgICBpZiAoQGNoZWNrKQorICAgICAgICB7CisJICBwcmV0dHlfcHJpbnRfcnVsZSAoIlx0XCQoTUFLRSkgXCQoQU1fTUFLRUZMQUdTKSIsICJcdCAgIiwKKwkJCSAgICAgQGNoZWNrKTsKKwkgIGRlcGVuZCAoJy5NQUtFJywgJ2NoZWNrLWFtJyk7CisJfQorICAgIH0KKyAgaWYgKEBjaGVja190ZXN0cykKKyAgICB7CisgICAgICBwcmV0dHlfcHJpbnRfcnVsZSAoIlx0XCQoTUFLRSkgXCQoQU1fTUFLRUZMQUdTKSIsICJcdCAgIiwKKwkJCSBAY2hlY2tfdGVzdHMpOworICAgICAgZGVwZW5kICgnLk1BS0UnLCAnY2hlY2stYW0nKTsKKyAgICB9CisKKyAgZGVwZW5kICcuUEhPTlknLCAnY2hlY2snLCAnY2hlY2stYW0nOworICAjIEhhbmRsZSByZWN1cnNpb24uICBXZSBoYXZlIHRvIGhvbm9yIEJVSUxUX1NPVVJDRVMgbGlrZSBmb3IgYGFsbDonLgorICAkb3V0cHV0X3J1bGVzIC49ICgiY2hlY2s6ICIKKwkJICAgIC4gKHZhciAoJ0JVSUxUX1NPVVJDRVMnKQorCQkgICAgICAgPyAiXCQoQlVJTFRfU09VUkNFUylcblx0XCQoTUFLRSkgXCQoQU1fTUFLRUZMQUdTKSAiCisJCSAgICAgICA6ICcnKQorCQkgICAgLiAodmFyICgnU1VCRElSUycpID8gJ2NoZWNrLXJlY3Vyc2l2ZScgOiAnY2hlY2stYW0nKQorCQkgICAgLiAiXG4iKTsKKyAgZGVwZW5kICgnLk1BS0UnLCAnY2hlY2snKQorICAgIGlmIHZhciAoJ0JVSUxUX1NPVVJDRVMnKTsKK30KKworIyBoYW5kbGVfY2xlYW4gKCRNQUtFRklMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEhhbmRsZSBhbGwgJ2NsZWFuJyB0YXJnZXRzLgorc3ViIGhhbmRsZV9jbGVhbiAoJCkKK3sKKyAgbXkgKCRtYWtlZmlsZSkgPSBAXzsKKworICAjIENsZWFuIHRoZSBmaWxlcyBsaXN0ZWQgaW4gdXNlciB2YXJpYWJsZXMgaWYgdGhleSBleGlzdC4KKyAgJGNsZWFuX2ZpbGVzeyckKE1PU1RMWUNMRUFORklMRVMpJ30gPSBNT1NUTFlfQ0xFQU4KKyAgICBpZiB2YXIgKCdNT1NUTFlDTEVBTkZJTEVTJyk7CisgICRjbGVhbl9maWxlc3snJChDTEVBTkZJTEVTKSd9ID0gQ0xFQU4KKyAgICBpZiB2YXIgKCdDTEVBTkZJTEVTJyk7CisgICRjbGVhbl9maWxlc3snJChESVNUQ0xFQU5GSUxFUyknfSA9IERJU1RfQ0xFQU4KKyAgICBpZiB2YXIgKCdESVNUQ0xFQU5GSUxFUycpOworICAkY2xlYW5fZmlsZXN7JyQoTUFJTlRBSU5FUkNMRUFORklMRVMpJ30gPSBNQUlOVEFJTkVSX0NMRUFOCisgICAgaWYgdmFyICgnTUFJTlRBSU5FUkNMRUFORklMRVMnKTsKKworICAjIEJ1aWx0IHNvdXJjZXMgYXJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBieSBtYWludGFpbmVyLWNsZWFuLgorICAkY2xlYW5fZmlsZXN7JyQoQlVJTFRfU09VUkNFUyknfSA9IE1BSU5UQUlORVJfQ0xFQU4KKyAgICBpZiB2YXIgKCdCVUlMVF9TT1VSQ0VTJyk7CisKKyAgIyBDb21wdXRlIGEgbGlzdCBvZiAicm0icyB0byBydW4gZm9yIGVhY2ggdGFyZ2V0LgorICBteSAlcm1zID0gKE1PU1RMWV9DTEVBTiwgW10sCisJICAgICBDTEVBTiwgW10sCisJICAgICBESVNUX0NMRUFOLCBbXSwKKwkgICAgIE1BSU5UQUlORVJfQ0xFQU4sIFtdKTsKKworICBmb3JlYWNoIG15ICRmaWxlIChrZXlzICVjbGVhbl9maWxlcykKKyAgICB7CisgICAgICBteSAkd2hlbiA9ICRjbGVhbl9maWxlc3skZmlsZX07CisgICAgICBwcm9nX2Vycm9yICdpbnZhbGlkIGVudHJ5IGluICVjbGVhbl9maWxlcycKKwl1bmxlc3MgZXhpc3RzICRybXN7JHdoZW59OworCisgICAgICBteSAkcm0gPSAicm0gLWYgJGZpbGUiOworICAgICAgIyBJZiBmaWxlIGlzIGEgdmFyaWFibGUsIG1ha2Ugc3VyZSB3aGVuIGRvbid0IGNhbGwgYHJtIC1mJyB3aXRob3V0IGFyZ3MuCisgICAgICAkcm0gPSJ0ZXN0IC16IFwiJGZpbGVcIiB8fCAkcm0iCisJaWYgKCRmaWxlID1+IC9eXHMqXCQoXCguKlwpfFx7LipcfSlccyokLyk7CisKKyAgICAgIHB1c2ggQHskcm1zeyR3aGVufX0sICJcdC0kcm1cbiI7CisgICAgfQorCisgICRvdXRwdXRfcnVsZXMgLj0gJmZpbGVfY29udGVudHMKKyAgICAoJ2NsZWFuJywKKyAgICAgbmV3IEF1dG9tYWtlOjpMb2NhdGlvbiwKKyAgICAgTU9TVExZQ0xFQU5fUk1TICAgICAgPT4gam9pbiAoJycsIHNvcnQgQHskcm1zeyZNT1NUTFlfQ0xFQU59fSksCisgICAgIENMRUFOX1JNUyAgICAgICAgICAgID0+IGpvaW4gKCcnLCBzb3J0IEB7JHJtc3smQ0xFQU59fSksCisgICAgIERJU1RDTEVBTl9STVMgICAgICAgID0+IGpvaW4gKCcnLCBzb3J0IEB7JHJtc3smRElTVF9DTEVBTn19KSwKKyAgICAgTUFJTlRBSU5FUl9DTEVBTl9STVMgPT4gam9pbiAoJycsIHNvcnQgQHskcm1zeyZNQUlOVEFJTkVSX0NMRUFOfX0pLAorICAgICBNQUtFRklMRSAgICAgICAgICAgICA9PiBiYXNlbmFtZSAkbWFrZWZpbGUsCisgICAgICk7Cit9CisKKworIyAmdGFyZ2V0X2NtcCAoJEEsICRCKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTdWJyb3V0aW5lIGZvciAmaGFuZGxlX2ZhY3RvcmVkX2RlcGVuZGVuY2llcyB0byBsZXQgYC5QSE9OWScgYW5kCisjIG90aGVyIGAuVEFSR0VUUycgYmUgbGFzdC4KK3N1YiB0YXJnZXRfY21wCit7CisgIHJldHVybiAwIGlmICRhIGVxICRiOworCisgIG15ICRhMSA9IHN1YnN0ciAoJGEsIDAsIDEpOworICBteSAkYjEgPSBzdWJzdHIgKCRiLCAwLCAxKTsKKyAgaWYgKCRhMSBuZSAkYjEpCisgICAgeworICAgICAgcmV0dXJuIC0xIGlmICRiMSBlcSAnLic7CisgICAgICByZXR1cm4gMSBpZiAkYTEgZXEgJy4nOworICAgIH0KKyAgcmV0dXJuICRhIGNtcCAkYjsKK30KKworCisjICZoYW5kbGVfZmFjdG9yZWRfZGVwZW5kZW5jaWVzICgpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEhhbmRsZSBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gZ2F0aGVyZWQgdGFyZ2V0cy4KK3N1YiBoYW5kbGVfZmFjdG9yZWRfZGVwZW5kZW5jaWVzCit7CisgICMgUmVqZWN0IGJhZCBob29rcy4KKyAgZm9yZWFjaCBteSAkdXRhcmcgKCd1bmluc3RhbGwtZGF0YS1sb2NhbCcsICd1bmluc3RhbGwtZGF0YS1ob29rJywKKwkJICAgICAndW5pbnN0YWxsLWV4ZWMtbG9jYWwnLCAndW5pbnN0YWxsLWV4ZWMtaG9vaycsCisJCSAgICAgJ3VuaW5zdGFsbC1kdmktbG9jYWwnLAorCQkgICAgICd1bmluc3RhbGwtaHRtbC1sb2NhbCcsCisJCSAgICAgJ3VuaW5zdGFsbC1pbmZvLWxvY2FsJywKKwkJICAgICAndW5pbnN0YWxsLXBkZi1sb2NhbCcsCisJCSAgICAgJ3VuaW5zdGFsbC1wcy1sb2NhbCcpCisgICAgeworICAgICAgbXkgJHggPSAkdXRhcmc7CisgICAgICAkeCA9fiBzLy0uKi0vLS87CisgICAgICByZWplY3RfcnVsZSAoJHV0YXJnLCAidXNlIGAkeCcsIG5vdCBgJHV0YXJnJyIpOworICAgIH0KKworICByZWplY3RfcnVsZSAoJ2luc3RhbGwtbG9jYWwnLAorCSAgICAgICAidXNlIGBpbnN0YWxsLWRhdGEtbG9jYWwnIG9yIGBpbnN0YWxsLWV4ZWMtbG9jYWwnLCAiCisJICAgICAgIC4gIm5vdCBgaW5zdGFsbC1sb2NhbCciKTsKKworICByZWplY3RfcnVsZSAoJ2luc3RhbGwtaG9vaycsCisJICAgICAgICJ1c2UgYGluc3RhbGwtZGF0YS1ob29rJyBvciBgaW5zdGFsbC1leGVjLWhvb2snLCAiCisJICAgICAgIC4gIm5vdCBgaW5zdGFsbC1ob29rJyIpOworCisgICMgSW5zdGFsbCB0aGUgLWxvY2FsIGhvb2tzLgorICBmb3JlYWNoIChrZXlzICVkZXBlbmRlbmNpZXMpCisgICAgeworICAgICAgIyBIb29rcyBhcmUgaW5zdGFsbGVkIG9uIHRoZSAtYW0gdGFyZ2V0cy4KKyAgICAgIHMvLWFtJC8vIG9yIG5leHQ7CisgICAgICBkZXBlbmQgKCIkXy1hbSIsICIkXy1sb2NhbCIpCisJaWYgdXNlcl9waG9ueV9ydWxlICIkXy1sb2NhbCI7CisgICAgfQorCisgICMgSW5zdGFsbCB0aGUgLWhvb2sgaG9va3MuCisgICMgRklYTUU6IFdoeSBub3QgYmUgYXMgbGliZXJhbCBhcyB3ZSBhcmUgd2l0aCAtbG9jYWwgaG9va3M/CisgIGZvcmVhY2ggKCdpbnN0YWxsLWV4ZWMnLCAnaW5zdGFsbC1kYXRhJywgJ3VuaW5zdGFsbCcpCisgICAgeworICAgICAgaWYgKHVzZXJfcGhvbnlfcnVsZSAiJF8taG9vayIpCisJeworCSAgZGVwZW5kICgnLk1BS0UnLCAiJF8tYW0iKTsKKwkgIHJlZ2lzdGVyX2FjdGlvbigiJF8tYW0iLAorCQkJICAoIlx0XEBcJChOT1JNQUxfSU5TVEFMTClcbiIKKwkJCSAgIC4gIlx0XCQoTUFLRSkgXCQoQU1fTUFLRUZMQUdTKSAkXy1ob29rIikpOworCX0KKyAgICB9CisKKyAgIyBBbGwgdGhlIHJlcXVpcmVkIHRhcmdldHMgYXJlIHBob255LgorICBkZXBlbmQgKCcuUEhPTlknLCBrZXlzICVyZXF1aXJlZF90YXJnZXRzKTsKKworICAjIEFjdHVhbGx5IG91dHB1dCBnYXRoZXJlZCB0YXJnZXRzLgorICBmb3JlYWNoIChzb3J0IHRhcmdldF9jbXAga2V5cyAlZGVwZW5kZW5jaWVzKQorICAgIHsKKyAgICAgICMgSWYgdGhlcmUgaXMgbm90aGluZyBhYm91dCB0aGlzIGd1eSwgc2tpcCBpdC4KKyAgICAgIG5leHQKKwl1bmxlc3MgKEB7JGRlcGVuZGVuY2llc3skX319CisJCXx8ICRhY3Rpb25zeyRffQorCQl8fCAkcmVxdWlyZWRfdGFyZ2V0c3skX30pOworCisgICAgICAjIERlZmluZSBnYXRoZXJlZCB0YXJnZXRzIGluIHVuZGVmaW5lZCBjb25kaXRpb25zLgorICAgICAgIyBGSVhNRTogUmlnaHQgbm93IHdlIG11c3QgaGFuZGxlIC5QSE9OWSBhcyBhbiBleGNlcHRpb24sCisgICAgICAjIGJlY2F1c2UgcGVvcGxlIHdyaXRlIHRoaW5ncyBsaWtlCisgICAgICAjICAgIC5QSE9OWTogbXlwaG9ueXRhcmdldAorICAgICAgIyB0byBhcHBlbmQgZGVwZW5kZW5jaWVzLiAgVGhpcyB3b3VsZCBub3Qgd29yayBpZiBBdXRvbWFrZQorICAgICAgIyByZWZyYWluZWQgZnJvbSBkZWZpbmluZyBpdHMgb3duIC5QSE9OWSB0YXJnZXQgYXMgaXQgZG9lcworICAgICAgIyB3aXRoIG90aGVyIG92ZXJyaWRkZW4gdGFyZ2V0cy4KKyAgICAgICMgTGlrZXdpc2UgZm9yIGAuTUFLRScuCisgICAgICBteSBAdW5kZWZpbmVkX2NvbmRzID0gKFRSVUUsKTsKKyAgICAgIGlmICgkXyBuZSAnLlBIT05ZJyAmJiAkXyBuZSAnLk1BS0UnKQorCXsKKwkgIEB1bmRlZmluZWRfY29uZHMgPQorCSAgICBBdXRvbWFrZTo6UnVsZTo6ZGVmaW5lICgkXywgJ2ludGVybmFsJywKKwkJCQkgICAgUlVMRV9BVVRPTUFLRSwgVFJVRSwgSU5URVJOQUwpOworCX0KKyAgICAgIG15IEB1bmlxX2RlcHMgPSB1bmlxIChzb3J0IEB7JGRlcGVuZGVuY2llc3skX319KTsKKyAgICAgIGZvcmVhY2ggbXkgJGNvbmQgKEB1bmRlZmluZWRfY29uZHMpCisJeworCSAgbXkgJGNvbmRzdHIgPSAkY29uZC0+c3Vic3Rfc3RyaW5nOworCSAgJnByZXR0eV9wcmludF9ydWxlICgiJGNvbmRzdHIkXzoiLCAiJGNvbmRzdHJcdCIsIEB1bmlxX2RlcHMpOworCSAgJG91dHB1dF9ydWxlcyAuPSAkYWN0aW9uc3skX30gaWYgZGVmaW5lZCAkYWN0aW9uc3skX307CisJICAkb3V0cHV0X3J1bGVzIC49ICJcbiI7CisJfQorICAgIH0KK30KKworCisjICZoYW5kbGVfdGVzdHNfZGVqYWdudSAoKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N1YiBoYW5kbGVfdGVzdHNfZGVqYWdudQoreworICAgIHB1c2ggKEBjaGVja190ZXN0cywgJ2NoZWNrLURFSkFHTlUnKTsKKyAgICAkb3V0cHV0X3J1bGVzIC49IGZpbGVfY29udGVudHMgKCdkZWphZ251JywgbmV3IEF1dG9tYWtlOjpMb2NhdGlvbik7Cit9CisKKworIyBIYW5kbGUgVEVTVFMgdmFyaWFibGUgYW5kIG90aGVyIGNoZWNrcy4KK3N1YiBoYW5kbGVfdGVzdHMKK3sKKyAgaWYgKG9wdGlvbiAnZGVqYWdudScpCisgICAgeworICAgICAgJmhhbmRsZV90ZXN0c19kZWphZ251OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGZvcmVhY2ggbXkgJGMgKCdERUpBVE9PTCcsICdSVU5URVNUJywgJ1JVTlRFU1RGTEFHUycpCisJeworCSAgcmVqZWN0X3ZhciAoJGMsICJgJGMnIGRlZmluZWQgYnV0IGBkZWphZ251JyBub3QgaW4gIgorCQkgICAgICAuICJgQVVUT01BS0VfT1BUSU9OUyciKTsKKwl9CisgICAgfQorCisgIGlmICh2YXIgKCdURVNUUycpKQorICAgIHsKKyAgICAgIHB1c2ggKEBjaGVja190ZXN0cywgJ2NoZWNrLVRFU1RTJyk7CisgICAgICAkb3V0cHV0X3J1bGVzIC49ICZmaWxlX2NvbnRlbnRzICgnY2hlY2snLCBuZXcgQXV0b21ha2U6OkxvY2F0aW9uLAorCQkJCSAgICAgICBDT0xPUiA9PiAhISBvcHRpb24gJ2NvbG9yLXRlc3RzJywKKwkJCQkgICAgICAgUEFSQUxMRUxfVEVTVFMgPT4gISEgb3B0aW9uICdwYXJhbGxlbC10ZXN0cycpOworCisgICAgICAjIFRlc3RzIHRoYXQgYXJlIGtub3duIHByb2dyYW1zIHNob3VsZCBoYXZlICQoRVhFRVhUKSBhcHBlbmRlZC4KKyAgICAgICMgRm9yIG1hdGNoaW5nIHB1cnBvc2VzLCB3ZSBuZWVkIHRvIGFkanVzdCBYRkFJTF9URVNUUyBhcyB3ZWxsLgorICAgICAgYXBwZW5kX2V4ZWV4dCB7IGV4aXN0cyAka25vd25fcHJvZ3JhbXN7JF9bMF19IH0gJ1RFU1RTJzsKKyAgICAgIGFwcGVuZF9leGVleHQgeyBleGlzdHMgJGtub3duX3Byb2dyYW1zeyRfWzBdfSB9ICdYRkFJTF9URVNUUycKKwlpZiAodmFyICgnWEZBSUxfVEVTVFMnKSk7CisKKyAgICAgIGlmIChvcHRpb24gJ3BhcmFsbGVsLXRlc3RzJykKKyAgICAgICAgeworCSAgZGVmaW5lX3ZhcmlhYmxlICgnVEVTVF9TVUlURV9MT0cnLCAndGVzdC1zdWl0ZS5sb2cnLCBJTlRFUk5BTCk7CisJICBkZWZpbmVfdmFyaWFibGUgKCdURVNUX1NVSVRFX0hUTUwnLCAnJChURVNUX1NVSVRFX0xPRzoubG9nPS5odG1sKScsIElOVEVSTkFMKTsKKwkgIG15ICRzdWZmID0gJy50ZXN0JzsKKwkgIG15ICRhdF9leGVleHQgPSAnJzsKKwkgIG15ICRoYW5kbGVfZXhlZXh0ID0gZXhpc3RzICRjb25maWd1cmVfdmFyc3snRVhFRVhUJ307CisJICBpZiAoJGhhbmRsZV9leGVleHQpCisJICAgIHsKKwkgICAgICAkYXRfZXhlZXh0ID0gc3Vic3QgKCdFWEVFWFQnKTsKKwkgICAgICAkc3VmZiA9ICRhdF9leGVleHQgIC4gJyAnIC4gJHN1ZmY7CisJICAgIH0KKwkgIGRlZmluZV92YXJpYWJsZSAoJ1RFU1RfRVhURU5TSU9OUycsICRzdWZmLCBJTlRFUk5BTCk7CisJICAjIEZJWE1FOiB0aGlzIG1pc2hhbmRsZXMgY29uZGl0aW9ucy4KKwkgIG15IEB0ZXN0X3N1ZmZpeGVzID0gKHZhciAnVEVTVF9FWFRFTlNJT05TJyktPnZhbHVlX2FzX2xpc3RfcmVjdXJzaXZlOworCSAgaWYgKCRoYW5kbGVfZXhlZXh0KQorCSAgICB7CisJICAgICAgdW5zaGlmdCAoQHRlc3Rfc3VmZml4ZXMsICRhdF9leGVleHQpCisJICAgICAgICB1bmxlc3MgJHRlc3Rfc3VmZml4ZXNbMF0gZXEgJGF0X2V4ZWV4dDsKKwkgICAgfQorCSAgdW5zaGlmdCAoQHRlc3Rfc3VmZml4ZXMsICcnKTsKKworCSAgdHJhbnNmb3JtX3ZhcmlhYmxlX3JlY3Vyc2l2ZWx5CisJICAgICgnVEVTVFMnLCAnVEVTVF9MT0dTJywgJ2FtX190ZXN0bG9ncycsIDEsIElOVEVSTkFMLAorCSAgICAgIHN1YiB7CisJICAgICAgICBteSAoJHN1YnZhciwgJHZhbCwgJGNvbmQsICRmdWxsX2NvbmQpID0gQF87CisJCW15ICRvYmogPSAkdmFsOworCQlyZXR1cm4gJG9iagorCQkgIGlmICR2YWwgPX4gL15cQC4qXEAkLzsKKwkJJG9iaiA9fiBzL1wkXChFWEVFWFRcKSQvL287CisKKwkJaWYgKCR2YWwgPX4gLyhcJFwoKHRvcF8pP3NyY2RpclwpKVwvL28pCisJCSAgeworCQkgICAgbXNnICgnZXJyb3InLCAkc3VidmFyLT5yZGVmICgkY29uZCktPmxvY2F0aW9uLAorCQkJICJwYXJhbGxlbC10ZXN0czogdXNpbmcgYCQxJyBpbiBURVNUUyBpcyBjdXJyZW50bHkgYnJva2VuOiBgJHZhbCciKTsKKwkJICB9CisKKwkJZm9yZWFjaCBteSAkdGVzdF9zdWZmaXggKEB0ZXN0X3N1ZmZpeGVzKQorCQkgIHsKKwkJICAgIG5leHQKKwkJICAgICAgaWYgJHRlc3Rfc3VmZml4IGVxICRhdF9leGVleHQgfHwgJHRlc3Rfc3VmZml4IGVxICcnOworCQkgICAgcmV0dXJuIHN1YnN0ciAoJG9iaiwgMCwgbGVuZ3RoICgkb2JqKSAtIGxlbmd0aCAoJHRlc3Rfc3VmZml4KSkgLiAnLmxvZycKKwkJICAgICAgaWYgc3Vic3RyICgkb2JqLCAtIGxlbmd0aCAoJHRlc3Rfc3VmZml4KSkgZXEgJHRlc3Rfc3VmZml4OworCQkgIH0KKwkJJG9iaiAuPSAnLmxvZyc7CisJCW15ICRjb21waWxlID0gJ0xPR19DT01QSUxFJzsKKwkJZGVmaW5lX3ZhcmlhYmxlICgkY29tcGlsZSwKKwkJCQkgJyQoTE9HX0NPTVBJTEVSKSAkKEFNX0xPR19GTEFHUykgJChMT0dfRkxBR1MpJywgSU5URVJOQUwpOworCQkkb3V0cHV0X3J1bGVzIC49IGZpbGVfY29udGVudHMgKCdjaGVjazInLCBuZXcgQXV0b21ha2U6OkxvY2F0aW9uLAorCQkJCQkJR0VORVJJQyA9PiAwLAorCQkJCQkJT0JKID0+ICRvYmosCisJCQkJCQlTT1VSQ0UgPT4gJHZhbCwKKwkJCQkJCUNPTVBJTEUgPT4nJCgnIC4gJGNvbXBpbGUgLiAnKScsCisJCQkJCQlFWFQgPT4gJycsCisJCQkJCQlhbV9fRVhFRVhUID0+ICdGQUxTRScpOworCSAgICAgICAgcmV0dXJuICRvYmo7CisJICAgICAgfSk7CisKKwkgIG15ICRuaGVscGVyPTE7CisJICBteSAkcHJldiA9ICdURVNUUyc7CisJICBteSAkcG9zdCA9ICcnOworCSAgbXkgJGxhc3Rfc3VmZml4ID0gJHRlc3Rfc3VmZml4ZXNbJCN0ZXN0X3N1ZmZpeGVzXTsKKwkgIG15ICRjdXIgPSAnJzsKKwkgIGZvcmVhY2ggbXkgJHRlc3Rfc3VmZml4IChAdGVzdF9zdWZmaXhlcykKKwkgICAgeworCSAgICAgIGlmICgkdGVzdF9zdWZmaXggZXEgJGxhc3Rfc3VmZml4KQorCSAgICAgICAgeworCQkgICRjdXIgPSAnVEVTVF9MT0dTJzsKKwkJfQorCSAgICAgIGVsc2UKKwkgICAgICAgIHsKKwkJICAkY3VyID0gJ2FtX190ZXN0X2xvZ3MnIC4gJG5oZWxwZXI7CisJCX0KKwkgICAgICBkZWZpbmVfdmFyaWFibGUgKCRjdXIsCisJCSckKCcgLiAkcHJldiAuICc6JyAuICR0ZXN0X3N1ZmZpeCAuICRwb3N0IC4gJz0ubG9nKScsIElOVEVSTkFMKTsKKwkgICAgICAkcG9zdCA9ICcubG9nJzsKKwkgICAgICAkcHJldiA9ICRjdXI7CisJICAgICAgJG5oZWxwZXIrKzsKKwkgICAgICBpZiAoJHRlc3Rfc3VmZml4IG5lICRhdF9leGVleHQgJiYgJHRlc3Rfc3VmZml4IG5lICcnKQorCSAgICAgICAgeworCQkgIChteSAkZXh0ID0gJHRlc3Rfc3VmZml4KSA9fiBzL15cLi8vOworCQkgICRleHQgPSB1YyAkZXh0OworCQkgIG15ICRjb21waWxlID0gJGV4dCAuICdfTE9HX0NPTVBJTEUnOworCQkgIGRlZmluZV92YXJpYWJsZSAoJGNvbXBpbGUsCisJCQkJICAgJyQoJyAuICRleHQgLiAnX0xPR19DT01QSUxFUikgJChBTV8nIC4gICRleHQgLiAnX0xPR19GTEFHUyknCisJCQkJICAgLiAnICQoJyAuICRleHQgLiAnX0xPR19GTEFHUyknLCBJTlRFUk5BTCk7CisJCSAgbXkgJGFtX2V4ZWV4dCA9ICRoYW5kbGVfZXhlZXh0ID8gJ2FtX19FWEVFWFQnIDogJ0ZBTFNFJzsKKwkJICAkb3V0cHV0X3J1bGVzIC49IGZpbGVfY29udGVudHMgKCdjaGVjazInLCBuZXcgQXV0b21ha2U6OkxvY2F0aW9uLAorCQkJCQkJICBHRU5FUklDID0+IDEsCisJCQkJCQkgIE9CSiA9PiAnJywKKwkJCQkJCSAgU09VUkNFID0+ICckPCcsCisJCQkJCQkgIENPTVBJTEUgPT4gJyQoJyAuICRjb21waWxlIC4gJyknLAorCQkJCQkJICBFWFQgPT4gJHRlc3Rfc3VmZml4LAorCQkJCQkJICBhbV9fRVhFRVhUID0+ICRhbV9leGVleHQpOworCSAgICAgICAgfQorCSAgICB9CisKKwkgIGRlZmluZV92YXJpYWJsZSAoJ1RFU1RfTE9HU19UTVAnLCAnJChURVNUX0xPR1M6LmxvZz0ubG9nLXQpJywgSU5URVJOQUwpOworCisJICAkY2xlYW5fZmlsZXN7JyQoVEVTVF9MT0dTX1RNUCknfSA9IE1PU1RMWV9DTEVBTjsKKwkgICRjbGVhbl9maWxlc3snJChURVNUX0xPR1MpJ30gPSBNT1NUTFlfQ0xFQU47CisJICAkY2xlYW5fZmlsZXN7JyQoVEVTVF9TVUlURV9MT0cpJ30gPSBNT1NUTFlfQ0xFQU47CisJICAkY2xlYW5fZmlsZXN7JyQoVEVTVF9TVUlURV9IVE1MKSd9ID0gTU9TVExZX0NMRUFOOworCX0KKyAgICB9Cit9CisKKyMgSGFuZGxlIEVtYWNzIExpc3AuCitzdWIgaGFuZGxlX2VtYWNzX2xpc3AKK3sKKyAgbXkgQGVsZmlsZXMgPSAmYW1faW5zdGFsbF92YXIgKCctY2FuZGlzdCcsICdsaXNwJywgJ0xJU1AnLAorCQkJCSAnbGlzcCcsICdub2luc3QnKTsKKworICByZXR1cm4gaWYgISBAZWxmaWxlczsKKworICBkZWZpbmVfcHJldHR5X3ZhcmlhYmxlICgnYW1fX0VMRklMRVMnLCBUUlVFLCBJTlRFUk5BTCwKKwkJCSAgbWFwIHsgJF8tPlsxXSB9IEBlbGZpbGVzKTsKKyAgZGVmaW5lX3ByZXR0eV92YXJpYWJsZSAoJ2FtX19FTENGSUxFUycsIFRSVUUsIElOVEVSTkFMLAorCQkJICAnJChhbV9fRUxGSUxFUzouZWw9LmVsYyknKTsKKyAgIyBUaGlzIG9uZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB1c2Vycy4KKyAgZGVmaW5lX3ByZXR0eV92YXJpYWJsZSAoJ0VMQ0ZJTEVTJywgVFJVRSwgSU5URVJOQUwsICckKExJU1A6LmVsPS5lbGMpJyk7CisKKyAgcHVzaCBAYWxsLCAnJChFTENGSUxFUyknOworCisgIHJlcXVpcmVfdmFyaWFibGVzICgkZWxmaWxlc1swXVswXSwgIkVtYWNzIExpc3Agc291cmNlcyBzZWVuIiwgVFJVRSwKKwkJICAgICAnRU1BQ1MnLCAnbGlzcGRpcicpOworICByZXF1aXJlX2NvbmZfZmlsZSAoJGVsZmlsZXNbMF1bMF0sIEZPUkVJR04sICdlbGlzcC1jb21wJyk7CisgICZkZWZpbmVfdmFyaWFibGUgKCdlbGlzcF9jb21wJywgIiRhbV9jb25maWdfYXV4X2Rpci9lbGlzcC1jb21wIiwgSU5URVJOQUwpOworfQorCisjIEhhbmRsZSBQeXRob24KK3N1YiBoYW5kbGVfcHl0aG9uCit7CisgIG15IEBweWZpbGVzID0gJmFtX2luc3RhbGxfdmFyICgnLWRlZmF1bHRkaXN0JywgJ3B5dGhvbicsICdQWVRIT04nLAorCQkJCSAnbm9pbnN0Jyk7CisgIHJldHVybiBpZiAhIEBweWZpbGVzOworCisgIHJlcXVpcmVfdmFyaWFibGVzICgkcHlmaWxlc1swXVswXSwgIlB5dGhvbiBzb3VyY2VzIHNlZW4iLCBUUlVFLCAnUFlUSE9OJyk7CisgIHJlcXVpcmVfY29uZl9maWxlICgkcHlmaWxlc1swXVswXSwgRk9SRUlHTiwgJ3B5LWNvbXBpbGUnKTsKKyAgJmRlZmluZV92YXJpYWJsZSAoJ3B5X2NvbXBpbGUnLCAiJGFtX2NvbmZpZ19hdXhfZGlyL3B5LWNvbXBpbGUiLCBJTlRFUk5BTCk7Cit9CisKKyMgSGFuZGxlIEphdmEuCitzdWIgaGFuZGxlX2phdmEKK3sKKyAgICBteSBAc291cmNlbGlzdCA9ICZhbV9pbnN0YWxsX3ZhciAoJy1jYW5kaXN0JywKKwkJCQkgICAgICAnamF2YScsICdKQVZBJywKKwkJCQkgICAgICAnamF2YScsICdub2luc3QnLCAnY2hlY2snKTsKKyAgICByZXR1cm4gaWYgISBAc291cmNlbGlzdDsKKworICAgIG15IEBwcmVmaXggPSBhbV9wcmltYXJ5X3ByZWZpeGVzICgnSkFWQScsIDEsCisJCQkJICAgICAgJ2phdmEnLCAnbm9pbnN0JywgJ2NoZWNrJyk7CisKKyAgICBteSAkZGlyOworICAgIGZvcmVhY2ggbXkgJGN1cnMgKEBwcmVmaXgpCisgICAgICB7CisJbmV4dAorCSAgaWYgJGN1cnMgZXEgJ0VYVFJBJzsKKworCWVycl92YXIgIiR7Y3Vyc31fSkFWQSIsICJtdWx0aXBsZSBfSkFWQSBwcmltYXJpZXMgaW4gdXNlIgorCSAgaWYgZGVmaW5lZCAkZGlyOworCSRkaXIgPSAkY3VyczsKKyAgICAgIH0KKworCisgICAgcHVzaCAoQGFsbCwgJ2NsYXNzJyAuICRkaXIgLiAnLnN0YW1wJyk7Cit9CisKKworIyBIYW5kbGUgc29tZSBvZiB0aGUgbWlub3Igb3B0aW9ucy4KK3N1YiBoYW5kbGVfbWlub3Jfb3B0aW9ucworeworICBpZiAob3B0aW9uICdyZWFkbWUtYWxwaGEnKQorICAgIHsKKyAgICAgIGlmICgkcmVsYXRpdmVfZGlyIGVxICcuJykKKwl7CisJICBpZiAoJHBhY2thZ2VfdmVyc2lvbiAhfiAvXiRHTklUU19WRVJTSU9OX1BBVFRFUk4kLykKKwkgICAgeworCSAgICAgIG1zZyAoJ2Vycm9yLWduaXRzJywgJHBhY2thZ2VfdmVyc2lvbl9sb2NhdGlvbiwKKwkJICAgInZlcnNpb24gYCRwYWNrYWdlX3ZlcnNpb24nIGRvZXNuJ3QgZm9sbG93ICIgLgorCQkgICAiR25pdHMgc3RhbmRhcmRzIik7CisJICAgIH0KKwkgIGlmIChkZWZpbmVkICQxICYmIC1mICdSRUFETUUtYWxwaGEnKQorCSAgICB7CisJICAgICAgIyBUaGlzIG1lYW5zIHdlIGhhdmUgYW4gYWxwaGEgcmVsZWFzZS4gIFNlZQorCSAgICAgICMgR05JVFNfVkVSU0lPTl9QQVRURVJOIGZvciBkZXRhaWxzLgorCSAgICAgIHB1c2hfZGlzdF9jb21tb24gKCdSRUFETUUtYWxwaGEnKTsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyAoJE9VVFBVVCwgQElOUFVUUykKKyMgJnNwbGl0X2NvbmZpZ19maWxlX3NwZWMgKCRTUEVDKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlY29kZSB0aGUgQXV0b2NvbmYgc3ludGF4IGZvciBjb25maWcgZmlsZXMgKGZpbGVzLCBoZWFkZXJzLCBsaW5rcworIyBldGMuKS4KK3N1YiBzcGxpdF9jb25maWdfZmlsZV9zcGVjICgkKQoreworICBteSAoJHNwZWMpID0gQF87CisgIG15ICgkb3V0cHV0LCBAaW5wdXRzKSA9IHNwbGl0ICgvOi8sICRzcGVjKTsKKworICBwdXNoIEBpbnB1dHMsICIkb3V0cHV0LmluIgorICAgIHVubGVzcyBAaW5wdXRzOworCisgIHJldHVybiAoJG91dHB1dCwgQGlucHV0cyk7Cit9CisKKyMgJGlucHV0CisjIGxvY2F0ZV9hbSAoQFBPU1NJQkxFX1NPVVJDRVMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFDX0NPTkZJR19GSUxFUyBhbGxvdyBzcGVjaWZpY2F0aW9ucyBzdWNoIGFzIE1ha2VmaWxlOnRvcC5pbjptaWQuaW46Ym90LmluCisjIFRoaXMgZnVuY3Rpb25zIHJldHVybnMgdGhlIGZpcnN0ICouaW4gZmlsZSBmb3Igd2hpY2ggYSAqLmFtIGV4aXN0cy4KKyMgSXQgcmV0dXJucyB1bmRlZiBvdGhlcndpc2UuCitzdWIgbG9jYXRlX2FtIChAKQoreworICBteSAoQHJlc3QpID0gQF87CisgIG15ICRpbnB1dDsKKyAgZm9yZWFjaCBteSAkZmlsZSAoQHJlc3QpCisgICAgeworICAgICAgaWYgKCgkZmlsZSA9fiAvXiguKilcLmluJC8pICYmIC1mICIkMS5hbSIpCisJeworCSAgJGlucHV0ID0gJGZpbGU7CisJICBsYXN0OworCX0KKyAgICB9CisgIHJldHVybiAkaW5wdXQ7Cit9CisKK215ICVtYWtlX2xpc3Q7CisKKyMgJnNjYW5fYXV0b2NvbmZfY29uZmlnX2ZpbGVzICgkV0hFUkUsICRDT05GSUctRklMRVMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTdHVkeSAkQ09ORklHLUZJTEVTIHdoaWNoIGlzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBBQ19DT05GSUdfRklMRVMKKyMgKG9yIEFDX09VVFBVVCkuCitzdWIgc2Nhbl9hdXRvY29uZl9jb25maWdfZmlsZXMgKCQkKQoreworICBteSAoJHdoZXJlLCAkY29uZmlnX2ZpbGVzKSA9IEBfOworCisgICMgTG9vayBhdCBwb3RlbnRpYWwgTWFrZWZpbGUuYW0ncy4KKyAgZm9yZWFjaCAoc3BsaXQgJyAnLCAkY29uZmlnX2ZpbGVzKQorICAgIHsKKyAgICAgICMgTXVzdCBza2lwIGVtcHR5IHN0cmluZyBmb3IgUGVybCA0LgorICAgICAgbmV4dCBpZiAkXyBlcSAiXFwiIHx8ICRfIGVxICcnOworCisgICAgICAjIEhhbmRsZSAkbG9jYWw6JGlucHV0IHN5bnRheC4KKyAgICAgIG15ICgkbG9jYWwsIEByZXN0KSA9IHNwbGl0ICgvOi8pOworICAgICAgQHJlc3QgPSAoIiRsb2NhbC5pbiIsKSB1bmxlc3MgQHJlc3Q7CisgICAgICBtc2cgKCdwb3J0YWJpbGl0eScsICR3aGVyZSwKKwkgICJPbWl0IGxlYWRpbmcgYC4vJyBmcm9tIGNvbmZpZyBmaWxlIG5hbWVzIHN1Y2ggYXMgYCRsb2NhbCcsIgorCSAgLiAiXG5hcyBub3QgYWxsIG1ha2UgaW1wbGVtZW50YXRpb25zIHRyZWF0IGBmaWxlJyBhbmQgYC4vZmlsZScgZXF1YWxseS4iKQorCWlmICgkbG9jYWwgPX4gL15cLlwvLyk7CisgICAgICBteSAkaW5wdXQgPSBsb2NhdGVfYW0gQHJlc3Q7CisgICAgICBpZiAoJGlucHV0KQorCXsKKwkgICMgV2UgaGF2ZSBhIGZpbGUgdGhhdCBhdXRvbWFrZSBzaG91bGQgZ2VuZXJhdGUuCisJICAkbWFrZV9saXN0eyRpbnB1dH0gPSBqb2luICgnOicsICgkbG9jYWwsIEByZXN0KSk7CisJfQorICAgICAgZWxzZQorCXsKKwkgICMgV2UgaGF2ZSBhIGZpbGUgdGhhdCBhdXRvbWFrZSBzaG91bGQgY2F1c2UgdG8gYmUKKwkgICMgcmVidWlsdCwgYnV0IHNob3VsZG4ndCBnZW5lcmF0ZSBpdHNlbGYuCisJICBwdXNoIChAb3RoZXJfaW5wdXRfZmlsZXMsICRfKTsKKwl9CisgICAgICAkYWNfY29uZmlnX2ZpbGVzX2xvY2F0aW9ueyRsb2NhbH0gPSAkd2hlcmU7CisgICAgICAkYWNfY29uZmlnX2ZpbGVzX2NvbmRpdGlvbnskbG9jYWx9ID0KKyAgICAgICAgbmV3IEF1dG9tYWtlOjpDb25kaXRpb24gKEBjb25kX3N0YWNrKQorICAgICAgICAgIGlmIChAY29uZF9zdGFjayk7CisgICAgfQorfQorCisKKyMgJnNjYW5fYXV0b2NvbmZfdHJhY2VzICgkRklMRU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3ViIHNjYW5fYXV0b2NvbmZfdHJhY2VzICgkKQoreworICBteSAoJGZpbGVuYW1lKSA9IEBfOworCisgICMgTWFjcm9zIHRvIHRyYWNlLCB3aXRoIHRoZWlyIG1pbmltYWwgbnVtYmVyIG9mIGFyZ3VtZW50cy4KKyAgIworICAjIElNUE9SVEFOVDogSWYgeW91IGFkZCBhIG1hY3JvIGhlcmUsIHlvdSBzaG91bGQgYWxzbyBhZGQgdGhpcyBtYWNybworICAjID09PT09PT09PSAgdG8gQXV0b21ha2UtcHJlc2VsZWN0aW9uIGluIGF1dG9jb25mL2xpYi9hdXRvbTR0ZS5pbi4KKyAgbXkgJXRyYWNlZCA9ICgKKwkJQUNfQ0FOT05JQ0FMX0JVSUxEID0+IDAsCisJCUFDX0NBTk9OSUNBTF9IT1NUID0+IDAsCisJCUFDX0NBTk9OSUNBTF9UQVJHRVQgPT4gMCwKKwkJQUNfQ09ORklHX0FVWF9ESVIgPT4gMSwKKwkJQUNfQ09ORklHX0ZJTEVTID0+IDEsCisJCUFDX0NPTkZJR19IRUFERVJTID0+IDEsCisJCUFDX0NPTkZJR19MSUJPQkpfRElSID0+IDEsCisJCUFDX0NPTkZJR19MSU5LUyA9PiAxLAorCQlBQ19GQ19TUkNFWFQgPT4gMSwKKwkJQUNfSU5JVCA9PiAwLAorCQlBQ19MSUJTT1VSQ0UgPT4gMSwKKwkJQUNfUkVRVUlSRV9BVVhfRklMRSA9PiAxLAorCQlBQ19TVUJTVF9UUkFDRSA9PiAxLAorCQlBTV9BVVRPTUFLRV9WRVJTSU9OID0+IDEsCisJCUFNX0NPTkRJVElPTkFMID0+IDIsCisJCUFNX0VOQUJMRV9NVUxUSUxJQiA9PiAwLAorCQlBTV9HTlVfR0VUVEVYVCA9PiAwLAorCQlBTV9HTlVfR0VUVEVYVF9JTlRMX1NVQkRJUiA9PiAwLAorCQlBTV9JTklUX0FVVE9NQUtFID0+IDAsCisJCUFNX01BSU5UQUlORVJfTU9ERSA9PiAwLAorCQlBTV9QUk9HX0NDX0NfTyA9PiAwLAorCQlBTV9TSUxFTlRfUlVMRVMgPT4gMCwKKwkJX0FNX1NVQlNUX05PVE1BS0UgPT4gMSwKKwkJX0FNX0NPTkRfSUYgPT4gMSwKKwkJX0FNX0NPTkRfRUxTRSA9PiAxLAorCQlfQU1fQ09ORF9FTkRJRiA9PiAxLAorCQlMVF9TVVBQT1JURURfVEFHID0+IDEsCisJCV9MVF9BQ19UQUdDT05GSUcgPT4gMCwKKwkJbTRfaW5jbHVkZSA9PiAxLAorCQltNF9zaW5jbHVkZSA9PiAxLAorCQlzaW5jbHVkZSA9PiAxLAorCSAgICAgICk7CisKKyAgbXkgJHRyYWNlcyA9ICgkRU5We0FVVE9DT05GfSB8fCAnYXV0b2NvbmYnKSAuICIgIjsKKworICAjIFVzZSBhIHNlcGFyYXRvciB1bmxpa2VseSB0byBiZSB1c2VkLCBub3QgYDonLCB0aGUgZGVmYXVsdCwgd2hpY2gKKyAgIyBoYXMgYSBwcmVjaXNlIG1lYW5pbmcgZm9yIEFDX0NPTkZJR19GSUxFUyBhbmQgc28gb24uCisgICR0cmFjZXMgLj0gam9pbiAoJyAnLAorCQkgICBtYXAgeyAiLS10cmFjZT0kXyIgLiAnOlwkZjpcJGw6OlwkZDo6XCRuOjpcJHs6On0lJyB9CisJCSAgIChrZXlzICV0cmFjZWQpKTsKKworICBteSAkdHJhY2VmaCA9IG5ldyBBdXRvbWFrZTo6WEZpbGUgKCIkdHJhY2VzICRmaWxlbmFtZSB8Iik7CisgIHZlcmIgInJlYWRpbmcgJHRyYWNlcyI7CisKKyAgQGNvbmRfc3RhY2sgPSAoKTsKKyAgbXkgJHdoZXJlOworCisgIHdoaWxlICgkXyA9ICR0cmFjZWZoLT5nZXRsaW5lKQorICAgIHsKKyAgICAgIGNob21wOworICAgICAgbXkgKCRoZXJlLCAkZGVwdGgsIEBhcmdzKSA9IHNwbGl0ICgvOjovKTsKKyAgICAgICR3aGVyZSA9IG5ldyBBdXRvbWFrZTo6TG9jYXRpb24gJGhlcmU7CisgICAgICBteSAkbWFjcm8gPSAkYXJnc1swXTsKKworICAgICAgcHJvZ19lcnJvciAoInVucmVxdWVzdGVkIHRyYWNlIGAkbWFjcm8nIikKKwl1bmxlc3MgZXhpc3RzICR0cmFjZWR7JG1hY3JvfTsKKworICAgICAgIyBTa2lwIGFuZCBkaWFnbm9zZSBtYWxmb3JtZWQgY2FsbHMuCisgICAgICBpZiAoJCNhcmdzIDwgJHRyYWNlZHskbWFjcm99KQorCXsKKwkgIG1zZyAoJ3N5bnRheCcsICR3aGVyZSwgIm5vdCBlbm91Z2ggYXJndW1lbnRzIGZvciAkbWFjcm8iKTsKKwkgIG5leHQ7CisJfQorCisgICAgICAjIEFscGhhYmV0aWNhbCBvcmRlcmluZyBwbGVhc2UuCisgICAgICBpZiAoJG1hY3JvIGVxICdBQ19DQU5PTklDQUxfQlVJTEQnKQorCXsKKwkgIGlmICgkc2Vlbl9jYW5vbmljYWwgPD0gQUNfQ0FOT05JQ0FMX0JVSUxEKQorCSAgICB7CisJICAgICAgJHNlZW5fY2Fub25pY2FsID0gQUNfQ0FOT05JQ0FMX0JVSUxEOworCSAgICAgICRjYW5vbmljYWxfbG9jYXRpb24gPSAkd2hlcmU7CisJICAgIH0KKwl9CisgICAgICBlbHNpZiAoJG1hY3JvIGVxICdBQ19DQU5PTklDQUxfSE9TVCcpCisJeworCSAgaWYgKCRzZWVuX2Nhbm9uaWNhbCA8PSBBQ19DQU5PTklDQUxfSE9TVCkKKwkgICAgeworCSAgICAgICRzZWVuX2Nhbm9uaWNhbCA9IEFDX0NBTk9OSUNBTF9IT1NUOworCSAgICAgICRjYW5vbmljYWxfbG9jYXRpb24gPSAkd2hlcmU7CisJICAgIH0KKwl9CisgICAgICBlbHNpZiAoJG1hY3JvIGVxICdBQ19DQU5PTklDQUxfVEFSR0VUJykKKwl7CisJICAkc2Vlbl9jYW5vbmljYWwgPSBBQ19DQU5PTklDQUxfVEFSR0VUOworCSAgJGNhbm9uaWNhbF9sb2NhdGlvbiA9ICR3aGVyZTsKKwl9CisgICAgICBlbHNpZiAoJG1hY3JvIGVxICdBQ19DT05GSUdfQVVYX0RJUicpCisJeworCSAgaWYgKCRzZWVuX2luaXRfYXV0b21ha2UpCisJICAgIHsKKwkgICAgICBlcnJvciAoJHdoZXJlLCAiQUNfQ09ORklHX0FVWF9ESVIgbXVzdCBiZSBjYWxsZWQgYmVmb3JlICIKKwkJICAgICAuICJBTV9JTklUX0FVVE9NQUtFLi4uIiwgcGFydGlhbCA9PiAxKTsKKwkgICAgICBlcnJvciAoJHNlZW5faW5pdF9hdXRvbWFrZSwgIi4uLiBBTV9JTklUX0FVVE9NQUtFIGNhbGxlZCBoZXJlIik7CisJICAgIH0KKwkgICRjb25maWdfYXV4X2RpciA9ICRhcmdzWzFdOworCSAgJGNvbmZpZ19hdXhfZGlyX3NldF9pbl9jb25maWd1cmVfYWMgPSAxOworCSAgJHJlbGF0aXZlX2RpciA9ICcuJzsKKwkgIGNoZWNrX2RpcmVjdG9yeSAoJGNvbmZpZ19hdXhfZGlyLCAkd2hlcmUpOworCX0KKyAgICAgIGVsc2lmICgkbWFjcm8gZXEgJ0FDX0NPTkZJR19GSUxFUycpCisJeworCSAgIyBMb29rIGF0IHBvdGVudGlhbCBNYWtlZmlsZS5hbSdzLgorCSAgc2Nhbl9hdXRvY29uZl9jb25maWdfZmlsZXMgKCR3aGVyZSwgJGFyZ3NbMV0pOworCX0KKyAgICAgIGVsc2lmICgkbWFjcm8gZXEgJ0FDX0NPTkZJR19IRUFERVJTJykKKwl7CisJICBmb3JlYWNoIG15ICRzcGVjIChzcGxpdCAoJyAnLCAkYXJnc1sxXSkpCisJICAgIHsKKwkgICAgICBteSAoJGRlc3QsIEBzcmMpID0gc3BsaXQgKCc6JywgJHNwZWMpOworCSAgICAgICRhY19jb25maWdfZmlsZXNfbG9jYXRpb257JGRlc3R9ID0gJHdoZXJlOworCSAgICAgIHB1c2ggQGNvbmZpZ19oZWFkZXJzLCAkc3BlYzsKKwkgICAgfQorCX0KKyAgICAgIGVsc2lmICgkbWFjcm8gZXEgJ0FDX0NPTkZJR19MSUJPQkpfRElSJykKKwl7CisJICAkY29uZmlnX2xpYm9ial9kaXIgPSAkYXJnc1sxXTsKKwkgICRyZWxhdGl2ZV9kaXIgPSAnLic7CisJICBjaGVja19kaXJlY3RvcnkgKCRjb25maWdfbGlib2JqX2RpciwgJHdoZXJlKTsKKwl9CisgICAgICBlbHNpZiAoJG1hY3JvIGVxICdBQ19DT05GSUdfTElOS1MnKQorCXsKKwkgIGZvcmVhY2ggbXkgJHNwZWMgKHNwbGl0ICgnICcsICRhcmdzWzFdKSkKKwkgICAgeworCSAgICAgIG15ICgkZGVzdCwgJHNyYykgPSBzcGxpdCAoJzonLCAkc3BlYyk7CisJICAgICAgJGFjX2NvbmZpZ19maWxlc19sb2NhdGlvbnskZGVzdH0gPSAkd2hlcmU7CisJICAgICAgcHVzaCBAY29uZmlnX2xpbmtzLCAkc3BlYzsKKwkgICAgfQorCX0KKyAgICAgIGVsc2lmICgkbWFjcm8gZXEgJ0FDX0ZDX1NSQ0VYVCcpCisJeworCSAgbXkgJHN1ZmZpeCA9ICRhcmdzWzFdOworCSAgIyBUaGVzZSBmbGFncyBhcmUgdXNlZCBhcyAlU09VUkNFRkxBRyUgaW4gZGVwZW5kMi5hbSwKKwkgICMgd2hlcmUgdGhlIHRyYWlsaW5nIHNwYWNlIGlzIGltcG9ydGFudC4KKwkgICRzb3VyY2VmbGFnc3snLicgLiAkc3VmZml4fSA9ICckKEZDRkxBR1NfJyAuICRzdWZmaXggLiAnKSAnCisJICAgIGlmICgkc3VmZml4IGVxICdmOTAnIHx8ICRzdWZmaXggZXEgJ2Y5NScgfHwgJHN1ZmZpeCBlcSAnZjAzJyB8fCAkc3VmZml4IGVxICdmMDgnKTsKKwl9CisgICAgICBlbHNpZiAoJG1hY3JvIGVxICdBQ19JTklUJykKKwl7CisJICBpZiAoZGVmaW5lZCAkYXJnc1syXSkKKwkgICAgeworCSAgICAgICRwYWNrYWdlX3ZlcnNpb24gPSAkYXJnc1syXTsKKwkgICAgICAkcGFja2FnZV92ZXJzaW9uX2xvY2F0aW9uID0gJHdoZXJlOworCSAgICB9CisJfQorICAgICAgZWxzaWYgKCRtYWNybyBlcSAnQUNfTElCU09VUkNFJykKKwl7CisJICAkbGlic291cmNlc3skYXJnc1sxXX0gPSAkaGVyZTsKKwl9CisgICAgICBlbHNpZiAoJG1hY3JvIGVxICdBQ19SRVFVSVJFX0FVWF9GSUxFJykKKwl7CisJICAjIE9ubHkgcmVtZW1iZXIgdGhlIGZpcnN0IHRpbWUgYSBmaWxlIGlzIHJlcXVpcmVkLgorCSAgJHJlcXVpcmVkX2F1eF9maWxleyRhcmdzWzFdfSA9ICR3aGVyZQorCSAgICB1bmxlc3MgZXhpc3RzICRyZXF1aXJlZF9hdXhfZmlsZXskYXJnc1sxXX07CisJfQorICAgICAgZWxzaWYgKCRtYWNybyBlcSAnQUNfU1VCU1RfVFJBQ0UnKQorCXsKKwkgICMgSnVzdCBjaGVjayBmb3IgYWxwaGFudW1lcmljIGluIEFDX1NVQlNUX1RSQUNFLiAgSWYgeW91IGRvCisJICAjIEFDX1NVQlNUKDUpLCB0aGVuIHRvbyBiYWQuCisJICAkY29uZmlndXJlX3ZhcnN7JGFyZ3NbMV19ID0gJHdoZXJlCisJICAgIGlmICRhcmdzWzFdID1+IC9eXHcrJC87CisJfQorICAgICAgZWxzaWYgKCRtYWNybyBlcSAnQU1fQVVUT01BS0VfVkVSU0lPTicpCisJeworCSAgZXJyb3IgKCR3aGVyZSwKKwkJICJ2ZXJzaW9uIG1pc21hdGNoLiAgVGhpcyBpcyBBdXRvbWFrZSAkVkVSU0lPTixcbiIgLgorCQkgImJ1dCB0aGUgZGVmaW5pdGlvbiB1c2VkIGJ5IHRoaXMgQU1fSU5JVF9BVVRPTUFLRVxuIiAuCisJCSAiY29tZXMgZnJvbSBBdXRvbWFrZSAkYXJnc1sxXS4gIFlvdSBzaG91bGQgcmVjcmVhdGVcbiIgLgorCQkgImFjbG9jYWwubTQgd2l0aCBhY2xvY2FsIGFuZCBydW4gYXV0b21ha2UgYWdhaW4uXG4iLAorCQkgIyAkPyA9IDYzIGlzIHVzZWQgdG8gaW5kaWNhdGUgdmVyc2lvbiBtaXNtYXRjaCB0byBtaXNzaW5nLgorCQkgZXhpdF9jb2RlID0+IDYzKQorCSAgICBpZiAkVkVSU0lPTiBuZSAkYXJnc1sxXTsKKworCSAgJHNlZW5fYXV0b21ha2VfdmVyc2lvbiA9IDE7CisJfQorICAgICAgZWxzaWYgKCRtYWNybyBlcSAnQU1fQ09ORElUSU9OQUwnKQorCXsKKwkgICRjb25maWd1cmVfY29uZHskYXJnc1sxXX0gPSAkd2hlcmU7CisJfQorICAgICAgZWxzaWYgKCRtYWNybyBlcSAnQU1fRU5BQkxFX01VTFRJTElCJykKKwl7CisJICAkc2Vlbl9tdWx0aWxpYiA9ICR3aGVyZTsKKwl9CisgICAgICBlbHNpZiAoJG1hY3JvIGVxICdBTV9HTlVfR0VUVEVYVCcpCisJeworCSAgJHNlZW5fZ2V0dGV4dCA9ICR3aGVyZTsKKwkgICRhY19nZXR0ZXh0X2xvY2F0aW9uID0gJHdoZXJlOworCSAgJHNlZW5fZ2V0dGV4dF9leHRlcm5hbCA9IGdyZXAgKCRfIGVxICdleHRlcm5hbCcsIEBhcmdzKTsKKwl9CisgICAgICBlbHNpZiAoJG1hY3JvIGVxICdBTV9HTlVfR0VUVEVYVF9JTlRMX1NVQkRJUicpCisJeworCSAgJHNlZW5fZ2V0dGV4dF9pbnRsID0gJHdoZXJlOworCX0KKyAgICAgIGVsc2lmICgkbWFjcm8gZXEgJ0FNX0lOSVRfQVVUT01BS0UnKQorCXsKKwkgICRzZWVuX2luaXRfYXV0b21ha2UgPSAkd2hlcmU7CisJICBpZiAoZGVmaW5lZCAkYXJnc1syXSkKKwkgICAgeworCSAgICAgICRwYWNrYWdlX3ZlcnNpb24gPSAkYXJnc1syXTsKKwkgICAgICAkcGFja2FnZV92ZXJzaW9uX2xvY2F0aW9uID0gJHdoZXJlOworCSAgICB9CisJICBlbHNpZiAoZGVmaW5lZCAkYXJnc1sxXSkKKwkgICAgeworCSAgICAgIGV4aXQgJGV4aXRfY29kZQorCQlpZiAocHJvY2Vzc19nbG9iYWxfb3B0aW9uX2xpc3QgKCR3aGVyZSwKKwkJCQkJCXNwbGl0ICgnICcsICRhcmdzWzFdKSkpOworCSAgICB9CisJfQorICAgICAgZWxzaWYgKCRtYWNybyBlcSAnQU1fTUFJTlRBSU5FUl9NT0RFJykKKwl7CisJICAkc2Vlbl9tYWludF9tb2RlID0gJHdoZXJlOworCX0KKyAgICAgIGVsc2lmICgkbWFjcm8gZXEgJ0FNX1BST0dfQ0NfQ19PJykKKwl7CisJICAkc2Vlbl9jY19jX28gPSAkd2hlcmU7CisJfQorICAgICAgZWxzaWYgKCRtYWNybyBlcSAnQU1fU0lMRU5UX1JVTEVTJykKKyAgICAgICAgeworCSAgc2V0X2dsb2JhbF9vcHRpb24gKCdzaWxlbnQtcnVsZXMnLCAkd2hlcmUpOworCX0KKyAgICAgIGVsc2lmICgkbWFjcm8gZXEgJ19BTV9DT05EX0lGJykKKyAgICAgICAgeworCSAgY29uZF9zdGFja19pZiAoJycsICRhcmdzWzFdLCAkd2hlcmUpOworCSAgZXJyb3IgKCR3aGVyZSwgIm1pc3NpbmcgbTQgcXVvdGluZywgbWFjcm8gZGVwdGggJGRlcHRoIikKKwkgICAgaWYgKCRkZXB0aCAhPSAxKTsKKwl9CisgICAgICBlbHNpZiAoJG1hY3JvIGVxICdfQU1fQ09ORF9FTFNFJykKKyAgICAgICAgeworCSAgY29uZF9zdGFja19lbHNlICgnIScsICRhcmdzWzFdLCAkd2hlcmUpOworCSAgZXJyb3IgKCR3aGVyZSwgIm1pc3NpbmcgbTQgcXVvdGluZywgbWFjcm8gZGVwdGggJGRlcHRoIikKKwkgICAgaWYgKCRkZXB0aCAhPSAxKTsKKwl9CisgICAgICBlbHNpZiAoJG1hY3JvIGVxICdfQU1fQ09ORF9FTkRJRicpCisgICAgICAgIHsKKwkgIGNvbmRfc3RhY2tfZW5kaWYgKHVuZGVmLCB1bmRlZiwgJHdoZXJlKTsKKwkgIGVycm9yICgkd2hlcmUsICJtaXNzaW5nIG00IHF1b3RpbmcsIG1hY3JvIGRlcHRoICRkZXB0aCIpCisJICAgIGlmICgkZGVwdGggIT0gMSk7CisJfQorICAgICAgZWxzaWYgKCRtYWNybyBlcSAnX0FNX1NVQlNUX05PVE1BS0UnKQorCXsKKwkgICRpZ25vcmVkX2NvbmZpZ3VyZV92YXJzeyRhcmdzWzFdfSA9ICR3aGVyZTsKKwl9CisgICAgICBlbHNpZiAoJG1hY3JvIGVxICdtNF9pbmNsdWRlJworCSAgICAgfHwgJG1hY3JvIGVxICdtNF9zaW5jbHVkZScKKwkgICAgIHx8ICRtYWNybyBlcSAnc2luY2x1ZGUnKQorCXsKKwkgICMgU2tpcCBtaXNzaW5nIGBzaW5jbHVkZSdkIGZpbGVzLgorCSAgbmV4dCBpZiAkbWFjcm8gbmUgJ200X2luY2x1ZGUnICYmICEgLWYgJGFyZ3NbMV07CisKKwkgICMgU29tZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBBdXRvY29uZiBkb24ndCB1c2UKKwkgICMgZnJvemVuIGZpbGVzLiAgQ29uc2VxdWVudGx5IGl0J3MgcG9zc2libGUgdGhhdCB3ZSBzZWUgYWxsCisJICAjIG00X2luY2x1ZGUncyBwZXJmb3JtZWQgZHVyaW5nIEF1dG9jb25mJ3Mgc3RhcnR1cC4KKwkgICMgT2J2aW91c2x5IHdlIGRvbid0IHdhbnQgdG8gZGlzdHJpYnV0ZSBBdXRvY29uZidzIGZpbGVzCisJICAjIHNvIHdlIHNraXAgYWJzb2x1dGUgZmlsZW5hbWVzIGhlcmUuCisJICBwdXNoIEBjb25maWd1cmVfZGVwcywgJyQodG9wX3NyY2RpcikvJyAuICRhcmdzWzFdCisJICAgIHVubGVzcyAkaGVyZSA9fiBtLF4oPzpcdzopP1tcXC9dLDsKKwkgICMgS2VlcCB0cmFjayBvZiB0aGUgZ3JlYXRlc3QgdGltZXN0YW1wLgorCSAgaWYgKC1lICRhcmdzWzFdKQorCSAgICB7CisJICAgICAgbXkgJG10aW1lID0gbXRpbWUgJGFyZ3NbMV07CisJICAgICAgJGNvbmZpZ3VyZV9kZXBzX2dyZWF0ZXN0X3RpbWVzdGFtcCA9ICRtdGltZQorCQlpZiAkbXRpbWUgPiAkY29uZmlndXJlX2RlcHNfZ3JlYXRlc3RfdGltZXN0YW1wOworCSAgICB9CisJfQorICAgICAgZWxzaWYgKCRtYWNybyBlcSAnTFRfU1VQUE9SVEVEX1RBRycpCisJeworCSAgJGxpYnRvb2xfdGFnc3skYXJnc1sxXX0gPSAxOworCSAgJGxpYnRvb2xfbmV3X2FwaSA9IDE7CisJfQorICAgICAgZWxzaWYgKCRtYWNybyBlcSAnX0xUX0FDX1RBR0NPTkZJRycpCisJeworCSAgIyBfTFRfQUNfVEFHQ09ORklHIGlzIGFuIG9sZCBtYWNybyBwcmVzZW50IGluIExpYnRvb2wgMS41LgorCSAgIyBXZSB1c2UgaXQgdG8gZGV0ZWN0IHdoZXRoZXIgdGFncyBhcmUgc3VwcG9ydGVkLiAgT3VyCisJICAjIHByZWZlcnJlZCBpbnRlcmZhY2UgaXMgTFRfU1VQUE9SVEVEX1RBRywgYnV0IGl0IHdhcworCSAgIyBpbnRyb2R1Y2VkIGluIExpYnRvb2wgMS42LgorCSAgaWYgKDAgPT0ga2V5cyAlbGlidG9vbF90YWdzKQorCSAgICB7CisJICAgICAgIyBIYXJkY29kZSB0aGUgdGFncyBzdXBwb3J0ZWQgYnkgTGlidG9vbCAxLjUuCisJICAgICAgJWxpYnRvb2xfdGFncyA9IChDQyA9PiAxLCBDWFggPT4gMSwgR0NKID0+IDEsIEY3NyA9PiAxKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgZXJyb3IgKCR3aGVyZSwgImNvbmRpdGlvbiBzdGFjayBub3QgcHJvcGVybHkgY2xvc2VkIikKKyAgICBpZiAoQGNvbmRfc3RhY2spOworCisgICR0cmFjZWZoLT5jbG9zZTsKK30KKworCisjICZzY2FuX2F1dG9jb25mX2ZpbGVzICgpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgd2UgdXNlIGBjb25maWd1cmUuYWMnIG9yIGBjb25maWd1cmUuaW4nLgorIyBTY2FuIGl0IChhbmQgcG9zc2libHkgYGFjbG9jYWwubTQnKSBmb3IgaW50ZXJlc3RpbmcgdGhpbmdzLgorIyBXZSBtdXN0IHNjYW4gYWNsb2NhbC5tNCBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIEFDX1NVQlNUcyBhbmQgc3VjaCB0aGVyZS4KK3N1YiBzY2FuX2F1dG9jb25mX2ZpbGVzICgpCit7CisgICMgUmVpbml0aWFsaXplIGxpYnNvdXJjZXMgaGVyZS4gIFRoaXMgaXNuJ3QgcmVhbGx5IG5lY2Vzc2FyeSwKKyAgIyBzaW5jZSB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoZXJlIGlzIG9ubHkgb25lIGNvbmZpZ3VyZS5hYy4gIEJ1dAorICAjIHRoYXQgd29uJ3QgYWx3YXlzIGJlIHRoZSBjYXNlLgorICAlbGlic291cmNlcyA9ICgpOworCisgICMgS2VlcCB0cmFjayBvZiB0aGUgeW91bmdlc3QgY29uZmlndXJlIGRlcGVuZGVuY3kuCisgICRjb25maWd1cmVfZGVwc19ncmVhdGVzdF90aW1lc3RhbXAgPSBtdGltZSAkY29uZmlndXJlX2FjOworICBpZiAoLWUgJ2FjbG9jYWwubTQnKQorICAgIHsKKyAgICAgIG15ICRtdGltZSA9IG10aW1lICdhY2xvY2FsLm00JzsKKyAgICAgICRjb25maWd1cmVfZGVwc19ncmVhdGVzdF90aW1lc3RhbXAgPSAkbXRpbWUKKwlpZiAkbXRpbWUgPiAkY29uZmlndXJlX2RlcHNfZ3JlYXRlc3RfdGltZXN0YW1wOworICAgIH0KKworICBzY2FuX2F1dG9jb25mX3RyYWNlcyAoJGNvbmZpZ3VyZV9hYyk7CisKKyAgQGNvbmZpZ3VyZV9pbnB1dF9maWxlcyA9IHNvcnQga2V5cyAlbWFrZV9saXN0OworICAjIFNldCBpbnB1dCBhbmQgb3V0cHV0IGZpbGVzIGlmIG5vdCBzcGVjaWZpZWQgYnkgdXNlci4KKyAgaWYgKCEgQGlucHV0X2ZpbGVzKQorICAgIHsKKyAgICAgIEBpbnB1dF9maWxlcyA9IEBjb25maWd1cmVfaW5wdXRfZmlsZXM7CisgICAgICAlb3V0cHV0X2ZpbGVzID0gJW1ha2VfbGlzdDsKKyAgICB9CisKKworICBpZiAoISAkc2Vlbl9pbml0X2F1dG9tYWtlKQorICAgIHsKKyAgICAgIGVycl9hYyAoIm5vIHByb3BlciBpbnZvY2F0aW9uIG9mIEFNX0lOSVRfQVVUT01BS0Ugd2FzIGZvdW5kLlxuWW91ICIKKwkgICAgICAuICJzaG91bGQgdmVyaWZ5IHRoYXQgJGNvbmZpZ3VyZV9hYyBpbnZva2VzIEFNX0lOSVRfQVVUT01BS0UsIgorCSAgICAgIC4gIlxudGhhdCBhY2xvY2FsLm00IGlzIHByZXNlbnQgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnksXG4iCisJICAgICAgLiAiYW5kIHRoYXQgYWNsb2NhbC5tNCB3YXMgcmVjZW50bHkgcmVnZW5lcmF0ZWQgIgorCSAgICAgIC4gIih1c2luZyBhY2xvY2FsKS4iKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoISAkc2Vlbl9hdXRvbWFrZV92ZXJzaW9uKQorCXsKKwkgIGlmICgtZiAnYWNsb2NhbC5tNCcpCisJICAgIHsKKwkgICAgICBlcnJvciAoJHNlZW5faW5pdF9hdXRvbWFrZSwKKwkJICAgICAieW91ciBpbXBsZW1lbnRhdGlvbiBvZiBBTV9JTklUX0FVVE9NQUtFIGNvbWVzIGZyb20gIiAuCisJCSAgICAgImFuXG5vbGQgQXV0b21ha2UgdmVyc2lvbi4gIFlvdSBzaG91bGQgcmVjcmVhdGUgIiAuCisJCSAgICAgImFjbG9jYWwubTRcbndpdGggYWNsb2NhbCBhbmQgcnVuIGF1dG9tYWtlIGFnYWluLlxuIiwKKwkJICAgICAjICQ/ID0gNjMgaXMgdXNlZCB0byBpbmRpY2F0ZSB2ZXJzaW9uIG1pc21hdGNoIHRvIG1pc3NpbmcuCisJCSAgICAgZXhpdF9jb2RlID0+IDYzKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgZXJyb3IgKCRzZWVuX2luaXRfYXV0b21ha2UsCisJCSAgICAgIm5vIHByb3BlciBpbXBsZW1lbnRhdGlvbiBvZiBBTV9JTklUX0FVVE9NQUtFIHdhcyAiIC4KKwkJICAgICAiZm91bmQsXG5wcm9iYWJseSBiZWNhdXNlIGFjbG9jYWwubTQgaXMgbWlzc2luZy4uLlxuIiAuCisJCSAgICAgIllvdSBzaG91bGQgcnVuIGFjbG9jYWwgdG8gY3JlYXRlIHRoaXMgZmlsZSwgdGhlblxuIiAuCisJCSAgICAgInJ1biBhdXRvbWFrZSBhZ2Fpbi5cbiIpOworCSAgICB9CisJfQorICAgIH0KKworICBsb2NhdGVfYXV4X2RpciAoKTsKKworICAjIFJlb3JkZXIgQGlucHV0X2ZpbGVzIHNvIHRoYXQgdGhlIE1ha2VmaWxlIHRoYXQgZGlzdHJpYnV0ZXMgYXV4CisgICMgZmlsZXMgaXMgcHJvY2Vzc2VkIGxhc3QuICBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGVhY2ggZGlyZWN0b3J5CisgICMgY2FuIHJlcXVpcmUgYXV4aWxpYXJ5IHNjcmlwdHMgYW5kIHdlIHNob3VsZCB3YWl0IHVudGlsIHRoZXkgaGF2ZQorICAjIGJlZW4gaW5zdGFsbGVkIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlbS4KKworICAjIFRoZSBNYWtlZmlsZS5pbiB0aGF0IGRpc3RyaWJ1dGUgdGhlIGF1eCBmaWxlcyBpcyB0aGUgb25lIGluCisgICMgJGNvbmZpZ19hdXhfZGlyIG9yIHRoZSB0b3AtbGV2ZWwgTWFrZWZpbGUuCisgIG15ICRhdXhkaXJkaXN0ID0gaXNfbWFrZV9kaXIgKCRjb25maWdfYXV4X2RpcikgPyAkY29uZmlnX2F1eF9kaXIgOiAnLic7CisgIG15IEBuZXdfaW5wdXRfZmlsZXMgPSAoKTsKKyAgd2hpbGUgKEBpbnB1dF9maWxlcykKKyAgICB7CisgICAgICBteSAkaW4gPSBwb3AgQGlucHV0X2ZpbGVzOworICAgICAgbXkgQGlucyA9IHNwbGl0ICgvOi8sICRvdXRwdXRfZmlsZXN7JGlufSk7CisgICAgICBpZiAoZGlybmFtZSAoJGluc1swXSkgZXEgJGF1eGRpcmRpc3QpCisJeworCSAgcHVzaCBAbmV3X2lucHV0X2ZpbGVzLCAkaW47CisJICAkYXV0b21ha2Vfd2lsbF9wcm9jZXNzX2F1eF9kaXIgPSAxOworCX0KKyAgICAgIGVsc2UKKwl7CisJICB1bnNoaWZ0IEBuZXdfaW5wdXRfZmlsZXMsICRpbjsKKwl9CisgICAgfQorICBAaW5wdXRfZmlsZXMgPSBAbmV3X2lucHV0X2ZpbGVzOworCisgICMgSWYgbmVpdGhlciB0aGUgYXV4ZGlyL01ha2VmaWxlIG5vciB0aGUgLi9NYWtlZmlsZSBhcmUgZ2VuZXJhdGVkCisgICMgYnkgQXV0b21ha2UsIHdlIHdvbid0IGRpc3RyaWJ1dGUgdGhlIGF1eCBmaWxlcyBhbnl3YXkuICBBc3N1bWUKKyAgIyB0aGUgdXNlciBrbm93IHdoYXQgKHMpaGUgZG9lcywgYW5kIHByZXRlbmQgd2Ugd2lsbCBkaXN0cmlidXRlCisgICMgdGhlbSB0byBkaXNhYmxlIHRoZSBlcnJvciBpbiByZXF1aXJlX2ZpbGVfaW50ZXJuYWwuCisgICRhdXRvbWFrZV93aWxsX3Byb2Nlc3NfYXV4X2RpciA9IDEgaWYgISBpc19tYWtlX2RpciAoJGF1eGRpcmRpc3QpOworCisgICMgTG9vayBmb3Igc29tZSBmaWxlcyB3ZSBuZWVkLiAgQWx3YXlzIGNoZWNrIGZvciB0aGVzZS4gIFRoaXMKKyAgIyBjaGVjayBtdXN0IGJlIGRvbmUgZm9yIGV2ZXJ5IHJ1biwgZXZlbiB0aG9zZSB3aGVyZSB3ZSBhcmUgb25seQorICAjIGxvb2tpbmcgYXQgYSBzdWJkaXIgTWFrZWZpbGUuICBXZSBtdXN0IHNldCByZWxhdGl2ZV9kaXIgZm9yCisgICMgbWF5YmVfcHVzaF9yZXF1aXJlZF9maWxlIHRvIHdvcmsuCisgICMgU29ydCB0aGUgZmlsZXMgZm9yIHN0YWJsZSB2ZXJib3NlIG91dHB1dC4KKyAgJHJlbGF0aXZlX2RpciA9ICcuJzsKKyAgZm9yZWFjaCBteSAkZmlsZSAoc29ydCBrZXlzICVyZXF1aXJlZF9hdXhfZmlsZSkKKyAgICB7CisgICAgICByZXF1aXJlX2NvbmZfZmlsZSAoJHJlcXVpcmVkX2F1eF9maWxleyRmaWxlfS0+Z2V0LCBGT1JFSUdOLCAkZmlsZSkKKyAgICB9CisgIGVycl9hbSAiYGluc3RhbGwuc2gnIGlzIGFuIGFuYWNocm9uaXNtOyB1c2UgYGluc3RhbGwtc2gnIGluc3RlYWQiCisgICAgaWYgLWYgJGNvbmZpZ19hdXhfZGlyIC4gJy9pbnN0YWxsLnNoJzsKKworICAjIFByZXNlcnZlIGRpc3RfY29tbW9uIGZvciBsYXRlci4KKyAgJGNvbmZpZ3VyZV9kaXN0X2NvbW1vbiA9IHZhcmlhYmxlX3ZhbHVlICgnRElTVF9DT01NT04nKSB8fCAnJzsKKworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgU2V0IHVwIGZvciBDeWdudXMgbW9kZS4KK3N1YiBjaGVja19jeWdudXMKK3sKKyAgbXkgJGN5Z251cyA9IG9wdGlvbiAnY3lnbnVzJzsKKyAgcmV0dXJuIHVubGVzcyAkY3lnbnVzOworCisgIHNldF9zdHJpY3RuZXNzICgnZm9yZWlnbicpOworICBzZXRfb3B0aW9uICgnbm8taW5zdGFsbGluZm8nLCAkY3lnbnVzKTsKKyAgc2V0X29wdGlvbiAoJ25vLWRlcGVuZGVuY2llcycsICRjeWdudXMpOworICBzZXRfb3B0aW9uICgnbm8tZGlzdCcsICRjeWdudXMpOworCisgIGVycl9hYyAiYEFNX01BSU5UQUlORVJfTU9ERScgcmVxdWlyZWQgd2hlbiAtLWN5Z251cyBzcGVjaWZpZWQiCisgICAgaWYgISRzZWVuX21haW50X21vZGU7Cit9CisKKyMgRG8gYW55IGV4dHJhIGNoZWNraW5nIGZvciBHTlUgc3RhbmRhcmRzLgorc3ViIGNoZWNrX2dudV9zdGFuZGFyZHMKK3sKKyAgaWYgKCRyZWxhdGl2ZV9kaXIgZXEgJy4nKQorICAgIHsKKyAgICAgICMgSW4gdG9wIGxldmVsIChvciBvbmx5KSBkaXJlY3RvcnkuCisgICAgICByZXF1aXJlX2ZpbGUgKCIkYW1fZmlsZS5hbSIsIEdOVSwKKwkJICAgIHF3L0lOU1RBTEwgTkVXUyBSRUFETUUgQVVUSE9SUyBDaGFuZ2VMb2cvKTsKKworICAgICAgIyBBY2NlcHQgb25lIG9mIHRoZXNlIHRocmVlIGxpY2Vuc2VzOyBkZWZhdWx0IHRvIENPUFlJTkcuCisgICAgICAjIE1ha2Ugc3VyZSB3ZSBkbyBub3Qgb3ZlcndyaXRlIGFuIGV4aXN0aW5nIGxpY2Vuc2UuCisgICAgICBteSAkbGljZW5zZTsKKyAgICAgIGZvcmVhY2ggKHF3IC9DT1BZSU5HIENPUFlJTkcuTElCIENPUFlJTkcuTEVTU0VSLykKKwl7CisJICBpZiAoLWYgJF8pCisJICAgIHsKKwkgICAgICAkbGljZW5zZSA9ICRfOworCSAgICAgIGxhc3Q7CisJICAgIH0KKwl9CisgICAgICByZXF1aXJlX2ZpbGUgKCIkYW1fZmlsZS5hbSIsIEdOVSwgJ0NPUFlJTkcnKQorCXVubGVzcyAkbGljZW5zZTsKKyAgICB9CisKKyAgZm9yIG15ICRvcHQgKCduby1pbnN0YWxsbWFuJywgJ25vLWluc3RhbGxpbmZvJykKKyAgICB7CisgICAgICBtc2cgKCdlcnJvci1nbnUnLCBvcHRpb24gJG9wdCwKKwkgICAib3B0aW9uIGAkb3B0JyBkaXNhbGxvd2VkIGJ5IEdOVSBzdGFuZGFyZHMiKQorCWlmIG9wdGlvbiAkb3B0OworICAgIH0KK30KKworIyBEbyBhbnkgZXh0cmEgY2hlY2tpbmcgZm9yIEdOSVRTIHN0YW5kYXJkcy4KK3N1YiBjaGVja19nbml0c19zdGFuZGFyZHMKK3sKKyAgaWYgKCRyZWxhdGl2ZV9kaXIgZXEgJy4nKQorICAgIHsKKyAgICAgICMgSW4gdG9wIGxldmVsIChvciBvbmx5KSBkaXJlY3RvcnkuCisgICAgICByZXF1aXJlX2ZpbGUgKCIkYW1fZmlsZS5hbSIsIEdOSVRTLCAnVEhBTktTJyk7CisgICAgfQorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEZ1bmN0aW9ucyB0byBoYW5kbGUgZmlsZXMgb2YgZWFjaCBsYW5ndWFnZS4KKworIyBFYWNoIGBsYW5nX1hfcmV3cml0ZSgkRElSRUNUT1JZLCAkQkFTRSwgJEVYVCknIGZ1bmN0aW9uIGZvbGxvd3MgYQorIyBzaW1wbGUgZm9ybXVsYTogUmV0dXJuIHZhbHVlIGlzIExBTkdfU1VCRElSIGlmIHRoZSByZXN1bHRpbmcgb2JqZWN0CisjIGZpbGUgc2hvdWxkIGJlIGluIGEgc3ViZGlyIGlmIHRoZSBzb3VyY2UgZmlsZSBpcywgTEFOR19QUk9DRVNTIGlmCisjIGZpbGUgaXMgdG8gYmUgZGVhbHQgd2l0aCwgTEFOR19JR05PUkUgb3RoZXJ3aXNlLgorCisjIE11Y2ggb2YgdGhlIGFjdHVhbCBwcm9jZXNzaW5nIGlzIGhhbmRsZWQgaW4KKyMgaGFuZGxlX3NpbmdsZV90cmFuc2Zvcm0uICBUaGVzZSBmdW5jdGlvbnMgZXhpc3Qgc28gdGhhdAorIyBhdXhpbGlhcnkgaW5mb3JtYXRpb24gY2FuIGJlIHJlY29yZGVkIGZvciBhIGxhdGVyIGNsZWFudXAgcGFzcy4KKyMgTm90ZSB0aGF0IHRoZSBjYWxscyB0byB0aGVzZSBmdW5jdGlvbnMgYXJlIGNvbXB1dGVkLCBzbyBkb24ndCBib3RoZXIKKyMgc2VhcmNoaW5nIGZvciB0aGVpciBwcmVjaXNlIG5hbWVzIGluIHRoZSBzb3VyY2UuCisKKyMgVGhpcyBpcyBqdXN0IGEgY29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUKKyMgd2hlbiBhIHN1YmRpciBvYmplY3Qgc2hvdWxkIGJlIHVzZWQuCitzdWIgbGFuZ19zdWJfb2JqCit7CisgICAgcmV0dXJuIG9wdGlvbiAnc3ViZGlyLW9iamVjdHMnID8gTEFOR19TVUJESVIgOiBMQU5HX1BST0NFU1M7Cit9CisKKyMgUmV3cml0ZSBhIHNpbmdsZSBDIHNvdXJjZSBmaWxlLgorc3ViIGxhbmdfY19yZXdyaXRlCit7CisgIG15ICgkZGlyZWN0b3J5LCAkYmFzZSwgJGV4dCwgJG5vbmFuc2lfb2JqLCAkaGF2ZV9wZXJfZXhlY19mbGFncywgJHZhcikgPSBAXzsKKworICBpZiAob3B0aW9uICdhbnNpMmtucicgJiYgJGJhc2UgPX4gL18kLykKKyAgICB7CisgICAgICAjIEZJWE1FOiBpbmNsdWRlIGxpbmUgbnVtYmVyIGluIGVycm9yLgorICAgICAgZXJyX2FtICJDIHNvdXJjZSBmaWxlIGAkYmFzZS5jJyB3b3VsZCBiZSBkZWxldGVkIGJ5IGFuc2kya25yIHJ1bGVzIjsKKyAgICB9CisKKyAgbXkgJHIgPSBMQU5HX1BST0NFU1M7CisgIGlmIChvcHRpb24gJ3N1YmRpci1vYmplY3RzJykKKyAgICB7CisgICAgICAkciA9IExBTkdfU1VCRElSOworICAgICAgaWYgKCRkaXJlY3RvcnkgJiYgJGRpcmVjdG9yeSBuZSAnLicpCisJeworCSAgJGJhc2UgPSAkZGlyZWN0b3J5IC4gJy8nIC4gJGJhc2U7CisKKwkgICMgbGlidG9vbCBpcyBhbHdheXMgYWJsZSB0byBwdXQgdGhlIG9iamVjdCBhdCB0aGUgcHJvcGVyIHBsYWNlLAorCSAgIyBzbyB3ZSBkbyBub3QgaGF2ZSB0byByZXF1aXJlIEFNX1BST0dfQ0NfQ19PIHdoZW4gYnVpbGRpbmcgLmxvIGZpbGVzLgorCSAgbXNnX3ZhciAoJ3BvcnRhYmlsaXR5JywgJHZhciwKKwkJICAgImNvbXBpbGluZyBgJGJhc2UuYycgaW4gc3ViZGlyIHJlcXVpcmVzICIKKwkJICAgLiAiYEFNX1BST0dfQ0NfQ19PJyBpbiBgJGNvbmZpZ3VyZV9hYyciLAorCQkgICB1bmlxX3Njb3BlID0+IFVTX0dMT0JBTCwKKwkJICAgdW5pcV9wYXJ0ID0+ICdBTV9QUk9HX0NDX0NfTyBzdWJkaXInKQorCSAgICB1bmxlc3MgJHNlZW5fY2NfY19vIHx8ICRub25hbnNpX29iaiBlcSAnLmxvJzsKKwl9CisKKyAgICAgICMgSW4gdGhpcyBjYXNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgZGlyZWN0b3J5IGluZm9ybWF0aW9uLCBzbworICAgICAgIyBkb24ndCBhZGQgaXQgYWdhaW4uCisgICAgICAkZGVfYW5zaV9maWxlc3skYmFzZX0gPSAnJzsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAkZGVfYW5zaV9maWxlc3skYmFzZX0gPSAoKCRkaXJlY3RvcnkgZXEgJy4nIHx8ICRkaXJlY3RvcnkgZXEgJycpCisJCQkgICAgICAgPyAnJworCQkJICAgICAgIDogIiRkaXJlY3RvcnkvIik7CisgICAgfQorCisgIGlmICghICRzZWVuX2NjX2NfbworICAgICAgJiYgJGhhdmVfcGVyX2V4ZWNfZmxhZ3MKKyAgICAgICYmICEgb3B0aW9uICdzdWJkaXItb2JqZWN0cycKKyAgICAgICYmICRub25hbnNpX29iaiBuZSAnLmxvJykKKyAgICB7CisgICAgICBtc2dfdmFyICgncG9ydGFiaWxpdHknLAorCSAgICAgICAkdmFyLCAiY29tcGlsaW5nIGAkYmFzZS5jJyB3aXRoIHBlci10YXJnZXQgZmxhZ3MgcmVxdWlyZXMgIgorCSAgICAgICAuICJgQU1fUFJPR19DQ19DX08nIGluIGAkY29uZmlndXJlX2FjJyIsCisJICAgICAgIHVuaXFfc2NvcGUgPT4gVVNfR0xPQkFMLAorCSAgICAgICB1bmlxX3BhcnQgPT4gJ0FNX1BST0dfQ0NfQ19PIHBlci10YXJnZXQnKQorICAgIH0KKworICAgIHJldHVybiAkcjsKK30KKworIyBSZXdyaXRlIGEgc2luZ2xlIEMrKyBzb3VyY2UgZmlsZS4KK3N1YiBsYW5nX2N4eF9yZXdyaXRlCit7CisgICAgcmV0dXJuICZsYW5nX3N1Yl9vYmo7Cit9CisKKyMgUmV3cml0ZSBhIHNpbmdsZSBoZWFkZXIgZmlsZS4KK3N1YiBsYW5nX2hlYWRlcl9yZXdyaXRlCit7CisgICAgIyBIZWFkZXIgZmlsZXMgYXJlIHNpbXBseSBpZ25vcmVkLgorICAgIHJldHVybiBMQU5HX0lHTk9SRTsKK30KKworIyBSZXdyaXRlIGEgc2luZ2xlIFZhbGEgc291cmNlIGZpbGUuCitzdWIgbGFuZ192YWxhX3Jld3JpdGUKK3sKKyAgICBteSAoJGRpcmVjdG9yeSwgJGJhc2UsICRleHQpID0gQF87CisKKyAgICAobXkgJG5ld2V4dCA9ICRleHQpID1+IHMvdmFsYSQvYy87CisgICAgcmV0dXJuIChMQU5HX1NVQkRJUiwgJG5ld2V4dCk7Cit9CisKKyMgUmV3cml0ZSBhIHNpbmdsZSB5YWNjIGZpbGUuCitzdWIgbGFuZ195YWNjX3Jld3JpdGUKK3sKKyAgICBteSAoJGRpcmVjdG9yeSwgJGJhc2UsICRleHQpID0gQF87CisKKyAgICBteSAkciA9ICZsYW5nX3N1Yl9vYmo7CisgICAgKG15ICRuZXdleHQgPSAkZXh0KSA9fiB0ci95L2MvOworICAgIHJldHVybiAoJHIsICRuZXdleHQpOworfQorCisjIFJld3JpdGUgYSBzaW5nbGUgeWFjYysrIGZpbGUuCitzdWIgbGFuZ195YWNjeHhfcmV3cml0ZQoreworICAgIG15ICgkZGlyZWN0b3J5LCAkYmFzZSwgJGV4dCkgPSBAXzsKKworICAgIG15ICRyID0gJmxhbmdfc3ViX29iajsKKyAgICAobXkgJG5ld2V4dCA9ICRleHQpID1+IHRyL3kvYy87CisgICAgcmV0dXJuICgkciwgJG5ld2V4dCk7Cit9CisKKyMgUmV3cml0ZSBhIHNpbmdsZSBsZXggZmlsZS4KK3N1YiBsYW5nX2xleF9yZXdyaXRlCit7CisgICAgbXkgKCRkaXJlY3RvcnksICRiYXNlLCAkZXh0KSA9IEBfOworCisgICAgbXkgJHIgPSAmbGFuZ19zdWJfb2JqOworICAgIChteSAkbmV3ZXh0ID0gJGV4dCkgPX4gdHIvbC9jLzsKKyAgICByZXR1cm4gKCRyLCAkbmV3ZXh0KTsKK30KKworIyBSZXdyaXRlIGEgc2luZ2xlIGxleCsrIGZpbGUuCitzdWIgbGFuZ19sZXh4eF9yZXdyaXRlCit7CisgICAgbXkgKCRkaXJlY3RvcnksICRiYXNlLCAkZXh0KSA9IEBfOworCisgICAgbXkgJHIgPSAmbGFuZ19zdWJfb2JqOworICAgIChteSAkbmV3ZXh0ID0gJGV4dCkgPX4gdHIvbC9jLzsKKyAgICByZXR1cm4gKCRyLCAkbmV3ZXh0KTsKK30KKworIyBSZXdyaXRlIGEgc2luZ2xlIGFzc2VtYmx5IGZpbGUuCitzdWIgbGFuZ19hc21fcmV3cml0ZQoreworICAgIHJldHVybiAmbGFuZ19zdWJfb2JqOworfQorCisjIFJld3JpdGUgYSBzaW5nbGUgcHJlcHJvY2Vzc2VkIGFzc2VtYmx5IGZpbGUuCitzdWIgbGFuZ19jcHBhc21fcmV3cml0ZQoreworICAgIHJldHVybiAmbGFuZ19zdWJfb2JqOworfQorCisjIFJld3JpdGUgYSBzaW5nbGUgRm9ydHJhbiA3NyBmaWxlLgorc3ViIGxhbmdfZjc3X3Jld3JpdGUKK3sKKyAgICByZXR1cm4gJmxhbmdfc3ViX29iajsKK30KKworIyBSZXdyaXRlIGEgc2luZ2xlIEZvcnRyYW4gZmlsZS4KK3N1YiBsYW5nX2ZjX3Jld3JpdGUKK3sKKyAgICByZXR1cm4gJmxhbmdfc3ViX29iajsKK30KKworIyBSZXdyaXRlIGEgc2luZ2xlIHByZXByb2Nlc3NlZCBGb3J0cmFuIGZpbGUuCitzdWIgbGFuZ19wcGZjX3Jld3JpdGUKK3sKKyAgICByZXR1cm4gJmxhbmdfc3ViX29iajsKK30KKworIyBSZXdyaXRlIGEgc2luZ2xlIHByZXByb2Nlc3NlZCBGb3J0cmFuIDc3IGZpbGUuCitzdWIgbGFuZ19wcGY3N19yZXdyaXRlCit7CisgICAgcmV0dXJuICZsYW5nX3N1Yl9vYmo7Cit9CisKKyMgUmV3cml0ZSBhIHNpbmdsZSByYXRmb3IgZmlsZS4KK3N1YiBsYW5nX3JhdGZvcl9yZXdyaXRlCit7CisgICAgcmV0dXJuICZsYW5nX3N1Yl9vYmo7Cit9CisKKyMgUmV3cml0ZSBhIHNpbmdsZSBPYmplY3RpdmUgQyBmaWxlLgorc3ViIGxhbmdfb2JqY19yZXdyaXRlCit7CisgICAgcmV0dXJuICZsYW5nX3N1Yl9vYmo7Cit9CisKKyMgUmV3cml0ZSBhIHNpbmdsZSBVbmlmaWVkIFBhcmFsbGVsIEMgZmlsZS4KK3N1YiBsYW5nX3VwY19yZXdyaXRlCit7CisgICAgcmV0dXJuICZsYW5nX3N1Yl9vYmo7Cit9CisKKyMgUmV3cml0ZSBhIHNpbmdsZSBKYXZhIGZpbGUuCitzdWIgbGFuZ19qYXZhX3Jld3JpdGUKK3sKKyAgICByZXR1cm4gTEFOR19TVUJESVI7Cit9CisKKyMgVGhlIGxhbmdfWF9maW5pc2ggZnVuY3Rpb25zIGFyZSBjYWxsZWQgYWZ0ZXIgYWxsIHNvdXJjZSBmaWxlCisjIHByb2Nlc3NpbmcgaXMgZG9uZS4gIEVhY2ggc2hvdWxkIGhhbmRsZSBkZWZpbmluZyBydWxlcyBmb3IgdGhlCisjIGxhbmd1YWdlLCBldGMuICBBIGZpbmlzaCBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBpZiBhIHNvdXJjZSBmaWxlIG9mCisjIHRoZSBhcHByb3ByaWF0ZSB0eXBlIGhhcyBiZWVuIHNlZW4uCisKK3N1YiBsYW5nX2NfZmluaXNoCit7CisgICAgIyBQdXNoIGFsbCBsaWJvYmpzIGZpbGVzIG9udG8gZGVfYW5zaV9maWxlcy4gIFdlIGFjdHVhbGx5IG9ubHkKKyAgICAjIHB1c2ggZmlsZXMgd2hpY2ggZXhpc3QgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBhbmQgd2hpY2ggYXJlCisgICAgIyBnZW51aW5lIHNvdXJjZSBmaWxlcy4KKyAgICBmb3JlYWNoIG15ICRmaWxlIChrZXlzICVsaWJzb3VyY2VzKQorICAgIHsKKwlpZiAoJGZpbGUgPX4gL14oLiopXC5bY2x5XSQvICYmIC1mICIkcmVsYXRpdmVfZGlyLyRmaWxlIikKKwl7CisJICAgICRkZV9hbnNpX2ZpbGVzeyQxfSA9ICcnCisJfQorICAgIH0KKworICAgIGlmIChvcHRpb24gJ2Fuc2kya25yJyAmJiBrZXlzICVkZV9hbnNpX2ZpbGVzKQorICAgIHsKKwkjIE1ha2UgYWxsIF8uYyBmaWxlcyBkZXBlbmQgb24gdGhlaXIgY29ycmVzcG9uZGluZyAuYyBmaWxlcy4KKwlteSBAb2JqZWN0czsKKwlmb3JlYWNoIG15ICRiYXNlIChzb3J0IGtleXMgJWRlX2Fuc2lfZmlsZXMpCisJeworCSAgICAjIEVhY2ggXy5jIGZpbGUgbXVzdCBkZXBlbmQgb24gYW5zaTJrbnI7IG90aGVyd2lzZSBpdAorCSAgICAjIG1pZ2h0IGJlIHVzZWQgaW4gYSBwYXJhbGxlbCBidWlsZCBiZWZvcmUgaXQgaXMgYnVpbHQuCisJICAgICMgV2UgbmVlZCB0byBzdXBwb3J0IGZpbGVzIGluIHRoZSBzcmNkaXIgYW5kIGluIHRoZSBidWlsZAorCSAgICAjIGRpciAoYmVjYXVzZSB0aGVzZSBmaWxlcyBtaWdodCBiZSBhdXRvLWdlbmVyYXRlZC4gIEJ1dAorCSAgICAjIHdlIGNhbid0IHVzZSAkPCAtLSBzb21lIG1ha2VzIG9ubHkgZGVmaW5lICQ8IGR1cmluZyBhCisJICAgICMgc3VmZml4IHJ1bGUuCisJICAgIG15ICRhbnNmaWxlID0gJGRlX2Fuc2lfZmlsZXN7JGJhc2V9IC4gJGJhc2UgLiAnLmMnOworCSAgICAkb3V0cHV0X3J1bGVzIC49ICgkYmFzZSAuICJfLmM6ICRhbnNmaWxlIFwkKEFOU0kyS05SKVxuXHQiCisJCQkgICAgICAuICckKENQUCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICcKKwkJCSAgICAgIC4gJ2BpZiB0ZXN0IC1mICQoc3JjZGlyKS8nIC4gJGFuc2ZpbGUKKwkJCSAgICAgIC4gJzsgdGhlbiBlY2hvICQoc3JjZGlyKS8nIC4gJGFuc2ZpbGUKKwkJCSAgICAgIC4gJzsgZWxzZSBlY2hvICcgLiAkYW5zZmlsZSAuICc7IGZpYCAnCisJCQkgICAgICAuICJ8IHNlZCAncy9eIyBcXChbMC05XVxcKS8jbGluZSBcXDEvJyAiCisJCQkgICAgICAuICd8ICQoQU5TSTJLTlIpID4gJEAnCisJCQkgICAgICAjIElmIGFuc2kya25yIGZhaWxzIHRoZW4gd2Ugc2hvdWxkbid0CisJCQkgICAgICAjIGNyZWF0ZSB0aGUgXy5jIGZpbGUKKwkJCSAgICAgIC4gIiB8fCBybSAtZiBcJFxAXG4iKTsKKwkgICAgcHVzaCAoQG9iamVjdHMsICRiYXNlIC4gJ18uJChPQkpFWFQpJyk7CisJICAgIHB1c2ggKEBvYmplY3RzLCAkYmFzZSAuICdfLmxvJykKKwkgICAgICBpZiB2YXIgKCdMSUJUT09MJyk7CisKKwkgICAgIyBFeHBsaWNpdGx5IGNsZWFuIHRoZSBfLmMgZmlsZXMgaWYgdGhleSBhcmUgaW4gYQorCSAgICAjIHN1YmRpcmVjdG9yeS4gKEluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0aGV5IGdldCBlcmFzZWQKKwkgICAgIyBieSBhIGBybSAtZiAqXy5jJyBydWxlLikKKwkgICAgJGNsZWFuX2ZpbGVzeyRiYXNlIC4gJ18uYyd9ID0gTU9TVExZX0NMRUFOCisJICAgICAgaWYgZGlybmFtZSAoJGJhc2UpIG5lICcuJzsKKwl9CisKKwkjIE1ha2UgYWxsIF8ubyAoYW5kIF8ubG8pIGZpbGVzIGRlcGVuZCBvbiBhbnNpMmtuci4KKwkjIFVzZSBhIHNuZWFreSBsaXR0bGUgaGFjayB0byBtYWtlIGl0IHByaW50IG5pY2VseS4KKwkmcHJldHR5X3ByaW50X3J1bGUgKCcnLCAnJywgQG9iamVjdHMsICc6JywgJyQoQU5TSTJLTlIpJyk7CisgICAgfQorfQorCitzdWIgbGFuZ192YWxhX2ZpbmlzaF90YXJnZXQgKCQkKQoreworICBteSAoJHNlbGYsICRuYW1lKSA9IEBfOworCisgIG15ICRkZXJpdmVkID0gY2Fub25pY2FsaXplICgkbmFtZSk7CisgIG15ICR2YXJuYW1lID0gJGRlcml2ZWQgLiAnX1NPVVJDRVMnOworICBteSAkdmFyID0gdmFyICgkdmFybmFtZSk7CisKKyAgaWYgKCR2YXIpCisgICAgeworICAgICAgZm9yZWFjaCBteSAkZmlsZSAoJHZhci0+dmFsdWVfYXNfbGlzdF9yZWN1cnNpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAkb3V0cHV0X3J1bGVzIC49ICJcJChzcmNkaXIpLyRmaWxlOiBcJChzcmNkaXIpLyR7ZGVyaXZlZH1fdmFsYS5zdGFtcFxuIi4KKyAgICAgICAgICAgICJcdFxAaWYgdGVzdCAtZiBcJEA7IHRoZW4gOjsgZWxzZSBcXFxuIi4KKyAgICAgICAgICAgICJcdCAgcm0gLWYgXCQoc3JjZGlyKS8ke2Rlcml2ZWR9X3ZhbGEuc3RhbXA7IFxcXG4iLgorICAgICAgICAgICAgIlx0ICBcJChhbV9fY2QpIFwkKHNyY2RpcikgJiYgXCQoTUFLRSkgXCQoQU1fTUFLRUZMQUdTKSAke2Rlcml2ZWR9X3ZhbGEuc3RhbXA7IFxcXG4iLgorICAgICAgICAgICAgIlx0ZmlcbiIKKyAgICAgICAgICAgIGlmICRmaWxlID1+IHMvKC4qKVwudmFsYSQvJDEuYy87CisgICAgICAgIH0KKyAgICB9CisKKyAgIyBBZGQgcmVidWlsZCBydWxlcyBmb3IgZ2VuZXJhdGVkIGhlYWRlciBhbmQgdmFwaSBmaWxlcworICBteSAkZmxhZ3MgPSB2YXIgKCRkZXJpdmVkIC4gJ19WQUxBRkxBR1MnKTsKKyAgaWYgKCRmbGFncykKKyAgICB7CisgICAgICBteSAkbGFzdGZsYWcgPSAnJzsKKyAgICAgIGZvcmVhY2ggbXkgJGZsYWcgKCRmbGFncy0+dmFsdWVfYXNfbGlzdF9yZWN1cnNpdmUpCisJeworCSAgaWYgKGdyZXAgKC8kbGFzdGZsYWcvLCAoJy1IJywgJy1oJywgJy0taGVhZGVyJywgJy0taW50ZXJuYWwtaGVhZGVyJywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICctLXZhcGknLCAnLS1pbnRlcm5hbC12YXBpJywgJy0tZ2lyJykpKQorCSAgICB7CisJICAgICAgbXkgJGhlYWRlcmZpbGUgPSAkZmxhZzsKKwkgICAgICAkb3V0cHV0X3J1bGVzIC49ICJcJChzcmNkaXIpLyRoZWFkZXJmaWxlOiBcJChzcmNkaXIpLyR7ZGVyaXZlZH1fdmFsYS5zdGFtcFxuIi4KKwkJIlx0XEBpZiB0ZXN0IC1mIFwkQDsgdGhlbiA6OyBlbHNlIFxcXG4iLgorCQkiXHQgIHJtIC1mIFwkKHNyY2RpcikvJHtkZXJpdmVkfV92YWxhLnN0YW1wOyBcXFxuIi4KKwkJIlx0ICBcJChhbV9fY2QpIFwkKHNyY2RpcikgJiYgXCQoTUFLRSkgXCQoQU1fTUFLRUZMQUdTKSAke2Rlcml2ZWR9X3ZhbGEuc3RhbXA7IFxcXG4iLgorCQkiXHRmaVxuIjsKKworCSAgICAgICMgdmFsYWMgaXMgbm90IHVzZWQgd2hlbiBidWlsZGluZyBmcm9tIGRpc3QgdGFyYmFsbHMKKwkgICAgICAjIGRpc3RyaWJ1dGUgdGhlIGdlbmVyYXRlZCBmaWxlcworCSAgICAgIHB1c2hfZGlzdF9jb21tb24gKCRoZWFkZXJmaWxlKTsKKwkgICAgICAkY2xlYW5fZmlsZXN7JGhlYWRlcmZpbGV9ID0gTUFJTlRBSU5FUl9DTEVBTjsKKwkgICAgfQorCSAgJGxhc3RmbGFnID0gJGZsYWc7CisJfQorICAgIH0KKworICBteSAkY29tcGlsZSA9ICRzZWxmLT5jb21waWxlOworCisgICMgUmV3cml0ZSBlYWNoIG9jY3VycmVuY2Ugb2YgYEFNX1ZBTEFGTEFHUycgaW4gdGhlIGNvbXBpbGUKKyAgIyBydWxlIGludG8gYCR7ZGVyaXZlZH1fVkFMQUZMQUdTJyBpZiBpdCBleGlzdHMuCisgIG15ICR2YWwgPSAiJHtkZXJpdmVkfV9WQUxBRkxBR1MiOworICAkY29tcGlsZSA9fiBzL1woQU1fVkFMQUZMQUdTXCkvXCgkdmFsXCkvCisgICAgaWYgc2V0X3NlZW4gKCR2YWwpOworCisgICMgVkFMQUZMQUdTIGlzIGEgdXNlciB2YXJpYWJsZSAocGVyIEdOVSBTdGFuZGFyZHMpLAorICAjIGl0IHNob3VsZCBub3QgYmUgb3ZlcnJpZGRlbiBpbiB0aGUgTWFrZWZpbGUuLi4KKyAgY2hlY2tfdXNlcl92YXJpYWJsZXMgWydWQUxBRkxBR1MnXTsKKworICBteSAkZGlybmFtZSA9IGRpcm5hbWUgKCRuYW1lKTsKKworICAjIE9ubHkgZ2VuZXJhdGUgQyBjb2RlLCBkbyBub3QgcnVuIEMgY29tcGlsZXIKKyAgJGNvbXBpbGUgLj0gIiAtQyI7CisKKyAgbXkgJHZlcmJvc2UgPSB2ZXJib3NlX2ZsYWcgKCdWQUxBQycpOworICBteSAkc2lsZW50ID0gc2lsZW50X2ZsYWcgKCk7CisKKyAgJG91dHB1dF9ydWxlcyAuPQorICAgICIke2Rlcml2ZWR9X3ZhbGEuc3RhbXA6IFwkKCR7ZGVyaXZlZH1fU09VUkNFUylcbiIuCisgICAgIlx0JHt2ZXJib3NlfSR7Y29tcGlsZX0gXCQoJHtkZXJpdmVkfV9TT1VSQ0VTKVxuIi4KKyAgICAiXHQke3NpbGVudH10b3VjaCBcJEBcbiI7CisKKyAgcHVzaF9kaXN0X2NvbW1vbiAoIiR7ZGVyaXZlZH1fdmFsYS5zdGFtcCIpOworCisgICRjbGVhbl9maWxlc3siJHtkZXJpdmVkfV92YWxhLnN0YW1wIn0gPSBNQUlOVEFJTkVSX0NMRUFOOworfQorCisjIEFkZCBvdXRwdXQgcnVsZXMgdG8gaW52b2tlIHZhbGFjIGFuZCBjcmVhdGUgc3RhbXAgZmlsZSBhcyBhIHdpdG5lc3MKKyMgdG8gaGFuZGxlIG11bHRpcGxlIG91dHB1dHMuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGFsbCBzb3VyY2UKKyMgZmlsZSBwcm9jZXNzaW5nIGlzIGRvbmUuCitzdWIgbGFuZ192YWxhX2ZpbmlzaAoreworICBteSAoJHNlbGYpID0gQF87CisKKyAgZm9yZWFjaCBteSAkcHJvZyAoa2V5cyAla25vd25fcHJvZ3JhbXMpCisgICAgeworICAgICAgbGFuZ192YWxhX2ZpbmlzaF90YXJnZXQgKCRzZWxmLCAkcHJvZyk7CisgICAgfQorCisgIHdoaWxlIChteSAoJG5hbWUpID0gZWFjaCAla25vd25fbGlicmFyaWVzKQorICAgIHsKKyAgICAgIGxhbmdfdmFsYV9maW5pc2hfdGFyZ2V0ICgkc2VsZiwgJG5hbWUpOworICAgIH0KK30KKworIyBUaGUgYnVpbHQgLmMgZmlsZXMgc2hvdWxkIGJlIGNsZWFuZWQgb25seSBvbiBtYWludGFpbmVyLWNsZWFuCisjIGFzIHRoZSAuYyBmaWxlcyBhcmUgZGlzdHJpYnV0ZWQuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBlYWNoCisjIC52YWxhIHNvdXJjZSBmaWxlLgorc3ViIGxhbmdfdmFsYV90YXJnZXRfaG9vaworeworICBteSAoJHNlbGYsICRhZ2dyZWdhdGUsICRvdXRwdXQsICRpbnB1dCwgJXRyYW5zZm9ybSkgPSBAXzsKKworICAkY2xlYW5fZmlsZXN7JG91dHB1dH0gPSBNQUlOVEFJTkVSX0NMRUFOOworfQorCisjIFRoaXMgaXMgYSB5YWNjIGhlbHBlciB3aGljaCBpcyBjYWxsZWQgd2hlbmV2ZXIgd2UgaGF2ZSBkZWNpZGVkIHRvCisjIGNvbXBpbGUgYSB5YWNjIGZpbGUuCitzdWIgbGFuZ195YWNjX3RhcmdldF9ob29rCit7CisgICAgbXkgKCRzZWxmLCAkYWdncmVnYXRlLCAkb3V0cHV0LCAkaW5wdXQsICV0cmFuc2Zvcm0pID0gQF87CisKKyAgICBteSAkZmxhZyA9ICRhZ2dyZWdhdGUgLiAiX1lGTEFHUyI7CisgICAgbXkgJGZsYWd2YXIgPSB2YXIgJGZsYWc7CisgICAgbXkgJFlGTEFHU3ZhciA9IHZhciAnWUZMQUdTJzsKKyAgICBpZiAoKCRmbGFndmFyICYmICRmbGFndmFyLT52YXJpYWJsZV92YWx1ZSA9fiAvJERBU0hfRF9QQVRURVJOL28pCisJfHwgKCRZRkxBR1N2YXIgJiYgJFlGTEFHU3Zhci0+dmFyaWFibGVfdmFsdWUgPX4gLyREQVNIX0RfUEFUVEVSTi9vKSkKKyAgICB7CisJKG15ICRvdXRwdXRfYmFzZSA9ICRvdXRwdXQpID1+IHMvJEtOT1dOX0VYVEVOU0lPTlNfUEFUVEVSTiQvLzsKKwlteSAkaGVhZGVyID0gJG91dHB1dF9iYXNlIC4gJy5oJzsKKworCSMgRm91bmQgYSBgLWQnIHRoYXQgYXBwbGllcyB0byB0aGUgY29tcGlsYXRpb24gb2YgdGhpcyBmaWxlLgorCSMgQWRkIGEgZGVwZW5kZW5jeSBmb3IgdGhlIGdlbmVyYXRlZCBoZWFkZXIgZmlsZSwgYW5kIGFycmFuZ2UKKwkjIGZvciB0aGF0IGZpbGUgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGRpc3RyaWJ1dGlvbi4KKwlmb3JlYWNoIG15ICRjb25kIChBdXRvbWFrZTo6UnVsZTo6ZGVmaW5lICgke2hlYWRlcn0sICdpbnRlcm5hbCcsCisJCQkJCQkgIFJVTEVfQVVUT01BS0UsIFRSVUUsCisJCQkJCQkgIElOVEVSTkFMKSkKKwkgIHsKKwkgICAgbXkgJGNvbmRzdHIgPSAkY29uZC0+c3Vic3Rfc3RyaW5nOworCSAgICAkb3V0cHV0X3J1bGVzIC49CisJICAgICAgIiRjb25kc3RyJHtoZWFkZXJ9OiAkb3V0cHV0XG4iCisJICAgICAgIyBSZWNvdmVyIGZyb20gcmVtb3ZhbCBvZiAkaGVhZGVyCisJICAgICAgLiAiJGNvbmRzdHJcdFxAaWYgdGVzdCAhIC1mIFwkQDsgdGhlbiBcXFxuIgorCSAgICAgIC4gIiRjb25kc3RyXHQgIHJtIC1mICRvdXRwdXQ7IFxcXG4iCisJICAgICAgLiAiJGNvbmRzdHJcdCAgXCQoTUFLRSkgXCQoQU1fTUFLRUZMQUdTKSAkb3V0cHV0OyBcXFxuIgorCSAgICAgIC4gIiRjb25kc3RyXHRlbHNlIDo7IGZpXG4iOworCSAgfQorCSMgRGlzdHJpYnV0ZSB0aGUgZ2VuZXJhdGVkIGZpbGUsIHVubGVzcyBpdHMgLnkgc291cmNlIHdhcworCSMgbGlzdGVkIGluIGEgbm9kaXN0XyB2YXJpYWJsZS4gICgmaGFuZGxlX3NvdXJjZV90cmFuc2Zvcm0KKwkjIHdpbGwgc2V0IERJU1RfU09VUkNFLikKKwkmcHVzaF9kaXN0X2NvbW1vbiAoJGhlYWRlcikKKwkgIGlmICR0cmFuc2Zvcm17J0RJU1RfU09VUkNFJ307CisKKwkjIElmIHRoZSBmaWxlcyBhcmUgYnVpbHQgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeSwgdGhlbiB3ZSB3YW50CisJIyB0byByZW1vdmUgdGhlbSB3aXRoIGBtYWtlIGNsZWFuJy4gIElmIHRoZXkgYXJlIGluIHNyY2RpcgorCSMgdGhleSBzaG91bGRuJ3QgYmUgdG91Y2hlZC4gIEhvd2V2ZXIsIHdlIGNhbid0IGRldGVybWluZSB0aGlzCisJIyBzdGF0aWNhbGx5LCBhbmQgdGhlIEdOVSBydWxlcyBzYXkgdGhhdCB5YWNjL2xleCBvdXRwdXQgZmlsZXMKKwkjIHNob3VsZCBiZSByZW1vdmVkIGJ5IG1haW50YWluZXItY2xlYW4uICBTbyB0aGF0J3Mgd2hhdCB3ZQorCSMgZG8uCisJJGNsZWFuX2ZpbGVzeyRoZWFkZXJ9ID0gTUFJTlRBSU5FUl9DTEVBTjsKKyAgICB9CisgICAgIyBFcmFzZSAkT1VUUFVUIG9uIGBtYWtlIG1haW50YWluZXItY2xlYW4nIChieSBHTlUgc3RhbmRhcmRzKS4KKyAgICAjIFNlZSB0aGUgY29tbWVudCBhYm92ZSBmb3IgJEhFQURFUi4KKyAgICAkY2xlYW5fZmlsZXN7JG91dHB1dH0gPSBNQUlOVEFJTkVSX0NMRUFOOworfQorCisjIFRoaXMgaXMgYSBsZXggaGVscGVyIHdoaWNoIGlzIGNhbGxlZCB3aGVuZXZlciB3ZSBoYXZlIGRlY2lkZWQgdG8KKyMgY29tcGlsZSBhIGxleCBmaWxlLgorc3ViIGxhbmdfbGV4X3RhcmdldF9ob29rCit7CisgICAgbXkgKCRzZWxmLCAkYWdncmVnYXRlLCAkb3V0cHV0LCAkaW5wdXQpID0gQF87CisgICAgIyBJZiB0aGUgZmlsZXMgYXJlIGJ1aWx0IGluIHRoZSBidWlsZCBkaXJlY3RvcnksIHRoZW4gd2Ugd2FudCB0bworICAgICMgcmVtb3ZlIHRoZW0gd2l0aCBgbWFrZSBjbGVhbicuICBJZiB0aGV5IGFyZSBpbiBzcmNkaXIgdGhleQorICAgICMgc2hvdWxkbid0IGJlIHRvdWNoZWQuICBIb3dldmVyLCB3ZSBjYW4ndCBkZXRlcm1pbmUgdGhpcworICAgICMgc3RhdGljYWxseSwgYW5kIHRoZSBHTlUgcnVsZXMgc2F5IHRoYXQgeWFjYy9sZXggb3V0cHV0IGZpbGVzCisgICAgIyBzaG91bGQgYmUgcmVtb3ZlZCBieSBtYWludGFpbmVyLWNsZWFuLiAgU28gdGhhdCdzIHdoYXQgd2UgZG8uCisgICAgJGNsZWFuX2ZpbGVzeyRvdXRwdXR9ID0gTUFJTlRBSU5FUl9DTEVBTjsKK30KKworIyBUaGlzIGlzIGEgaGVscGVyIGZvciBib3RoIGxleCBhbmQgeWFjYy4KK3N1YiB5YWNjX2xleF9maW5pc2hfaGVscGVyCit7CisgIHJldHVybiBpZiBkZWZpbmVkICRsYW5ndWFnZV9zY3JhdGNoeydsZXgteWFjYy1kb25lJ307CisgICRsYW5ndWFnZV9zY3JhdGNoeydsZXgteWFjYy1kb25lJ30gPSAxOworCisgICMgRklYTUU6IGZvciBub3csIG5vIGxpbmUgbnVtYmVyLgorICByZXF1aXJlX2NvbmZfZmlsZSAoJGNvbmZpZ3VyZV9hYywgRk9SRUlHTiwgJ3lsd3JhcCcpOworICAmZGVmaW5lX3ZhcmlhYmxlICgnWUxXUkFQJywgIiRhbV9jb25maWdfYXV4X2Rpci95bHdyYXAiLCBJTlRFUk5BTCk7Cit9CisKK3N1YiBsYW5nX3lhY2NfZmluaXNoCit7CisgIHJldHVybiBpZiBkZWZpbmVkICRsYW5ndWFnZV9zY3JhdGNoeyd5YWNjLWRvbmUnfTsKKyAgJGxhbmd1YWdlX3NjcmF0Y2h7J3lhY2MtZG9uZSd9ID0gMTsKKworICByZWplY3RfdmFyICdZQUNDRkxBR1MnLCAiYFlBQ0NGTEFHUycgb2Jzb2xldGU7IHVzZSBgWUZMQUdTJyBpbnN0ZWFkIjsKKworICB5YWNjX2xleF9maW5pc2hfaGVscGVyOworfQorCisKK3N1YiBsYW5nX2xleF9maW5pc2gKK3sKKyAgcmV0dXJuIGlmIGRlZmluZWQgJGxhbmd1YWdlX3NjcmF0Y2h7J2xleC1kb25lJ307CisgICRsYW5ndWFnZV9zY3JhdGNoeydsZXgtZG9uZSd9ID0gMTsKKworICB5YWNjX2xleF9maW5pc2hfaGVscGVyOworfQorCisKKyMgR2l2ZW4gYSBoYXNoIHRhYmxlIG9mIGxpbmtlciBuYW1lcywgcGljayB0aGUgbmFtZSB0aGF0IGhhcyB0aGUgbW9zdAorIyBwcmVjZWRlbmNlLiAgVGhpcyBpcyBsYW1lLCBidXQgc29tZXRoaW5nIGhhcyB0byBoYXZlIGdsb2JhbAorIyBrbm93bGVkZ2UgaW4gb3JkZXIgdG8gZWxpbWluYXRlIHRoZSBjb25mbGljdC4gIEFkZCBtb3JlIGxpbmtlcnMgYXMKKyMgcmVxdWlyZWQuCitzdWIgcmVzb2x2ZV9saW5rZXIKK3sKKyAgICBteSAoJWxpbmtlcnMpID0gQF87CisKKyAgICBmb3JlYWNoIG15ICRsIChxdyhHQ0pMSU5LIENYWExJTksgRjc3TElOSyBGQ0xJTksgT0JKQ0xJTksgVVBDTElOSykpCisgICAgeworCXJldHVybiAkbCBpZiBkZWZpbmVkICRsaW5rZXJzeyRsfTsKKyAgICB9CisgICAgcmV0dXJuICdMSU5LJzsKK30KKworIyBDYWxsZWQgdG8gaW5kaWNhdGUgdGhhdCBhbiBleHRlbnNpb24gd2FzIHVzZWQuCitzdWIgc2F3X2V4dGVuc2lvbgoreworICAgIG15ICgkZXh0KSA9IEBfOworICAgIGlmICghIGRlZmluZWQgJGV4dGVuc2lvbl9zZWVueyRleHR9KQorICAgIHsKKwkkZXh0ZW5zaW9uX3NlZW57JGV4dH0gPSAxOworICAgIH0KKyAgICBlbHNlCisgICAgeworCSsrJGV4dGVuc2lvbl9zZWVueyRleHR9OworICAgIH0KK30KKworIyBSZXR1cm4gdGhlIG51bWJlciBvZiBmaWxlcyBzZWVuIGZvciBhIGdpdmVuIGxhbmd1YWdlLiAgS25vd3MgYWJvdXQKKyMgc3BlY2lhbCBjYXNlcyB3ZSBjYXJlIGFib3V0LiAgRklYTUU6IHRoaXMgaXMgaGlkZW91cy4gIFdlIG5lZWQKKyMgc29tZXRoaW5nIHRoYXQgaW52b2x2ZXMgcmVhbCBsYW5ndWFnZSBvYmplY3RzLiAgRm9yIGluc3RhbmNlIHlhY2MKKyMgYW5kIHlhY2N4eCBjb3VsZCBib3RoIGRlcml2ZSBmcm9tIGEgY29tbW9uIHlhY2MgY2xhc3Mgd2hpY2ggd291bGQKKyMga25vdyBhYm91dCB0aGUgc3RyYW5nZSB5bHdyYXAgcmVxdWlyZW1lbnQuICAoT3IgYmV0dGVyIHlldCB3ZSBjb3VsZAorIyBqdXN0IG5vdCBzdXBwb3J0IGxlZ2FjeSB5YWNjISkKK3N1YiBjb3VudF9maWxlc19mb3JfbGFuZ3VhZ2UKK3sKKyAgICBteSAoJG5hbWUpID0gQF87CisKKyAgICBteSBAbmFtZXM7CisgICAgaWYgKCRuYW1lIGVxICd5YWNjJyB8fCAkbmFtZSBlcSAneWFjY3h4JykKKyAgICB7CisJQG5hbWVzID0gKCd5YWNjJywgJ3lhY2N4eCcpOworICAgIH0KKyAgICBlbHNpZiAoJG5hbWUgZXEgJ2xleCcgfHwgJG5hbWUgZXEgJ2xleHh4JykKKyAgICB7CisJQG5hbWVzID0gKCdsZXgnLCAnbGV4eHgnKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlAbmFtZXMgPSAoJG5hbWUpOworICAgIH0KKworICAgIG15ICRyID0gMDsKKyAgICBmb3JlYWNoICRuYW1lIChAbmFtZXMpCisgICAgeworCW15ICRsYW5nID0gJGxhbmd1YWdlc3skbmFtZX07CisJZm9yZWFjaCBteSAkZXh0IChAeyRsYW5nLT5leHRlbnNpb25zfSkKKwl7CisJICAgICRyICs9ICRleHRlbnNpb25fc2VlbnskZXh0fQorCQlpZiBkZWZpbmVkICRleHRlbnNpb25fc2VlbnskZXh0fTsKKwl9CisgICAgfQorCisgICAgcmV0dXJuICRyCit9CisKKyMgQ2FsbGVkIHRvIGFzayB3aGV0aGVyIHNvdXJjZSBmaWxlcyBoYXZlIGJlZW4gc2VlbiAuIElmIEhFQURFUlMgaXMgMSwKKyMgaGVhZGVycyBjYW4gYmUgaW5jbHVkZWQuCitzdWIgc2F3X3NvdXJjZXNfcAoreworICAgIG15ICgkaGVhZGVycykgPSBAXzsKKworICAgICMgY291bnQgYWxsIHRoZSBzb3VyY2VzCisgICAgbXkgJGNvdW50ID0gMDsKKyAgICBmb3JlYWNoIG15ICR2YWwgKHZhbHVlcyAlZXh0ZW5zaW9uX3NlZW4pCisgICAgeworCSRjb3VudCArPSAkdmFsOworICAgIH0KKworICAgIGlmICghJGhlYWRlcnMpCisgICAgeworCSRjb3VudCAtPSBjb3VudF9maWxlc19mb3JfbGFuZ3VhZ2UgKCdoZWFkZXInKTsKKyAgICB9CisKKyAgICByZXR1cm4gJGNvdW50ID4gMDsKK30KKworCisjIHJlZ2lzdGVyX2xhbmd1YWdlICglQVRUUklCVVRFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVnaXN0ZXIgYSBzaW5nbGUgbGFuZ3VhZ2UuCisjIEVhY2ggJUFUVFJJQlVURSBpcyBvZiB0aGUgZm9ybSBBVFRSSUJVVEUgPT4gVkFMVUUuCitzdWIgcmVnaXN0ZXJfbGFuZ3VhZ2UgKCUpCit7CisgIG15ICglb3B0aW9uKSA9IEBfOworCisgICMgU2V0IHRoZSBkZWZhdWx0cy4KKyAgJG9wdGlvbnsnYW5zaSd9ID0gMAorICAgIHVubGVzcyBkZWZpbmVkICRvcHRpb257J2Fuc2knfTsKKyAgJG9wdGlvbnsnYXV0b2RlcCd9ID0gJ25vJworICAgIHVubGVzcyBkZWZpbmVkICRvcHRpb257J2F1dG9kZXAnfTsKKyAgJG9wdGlvbnsnbGlua2VyJ30gPSAnJworICAgIHVubGVzcyBkZWZpbmVkICRvcHRpb257J2xpbmtlcid9OworICAkb3B0aW9ueydmbGFncyd9ID0gW10KKyAgICB1bmxlc3MgZGVmaW5lZCAkb3B0aW9ueydmbGFncyd9OworICAkb3B0aW9ueydvdXRwdXRfZXh0ZW5zaW9ucyd9ID0gc3ViIHsgcmV0dXJuICggJy4kKE9CSkVYVCknLCAnLmxvJyApIH0KKyAgICB1bmxlc3MgZGVmaW5lZCAkb3B0aW9ueydvdXRwdXRfZXh0ZW5zaW9ucyd9OworICAkb3B0aW9ueydub2Rpc3Rfc3BlY2lmaWMnfSA9IDAKKyAgICB1bmxlc3MgZGVmaW5lZCAkb3B0aW9ueydub2Rpc3Rfc3BlY2lmaWMnfTsKKworICBteSAkbGFuZyA9IG5ldyBMYW5ndWFnZSAoJW9wdGlvbik7CisKKyAgIyBGaWxsIGluZGV4ZXMuCisgICRleHRlbnNpb25fbWFweyRffSA9ICRsYW5nLT5uYW1lIGZvcmVhY2ggQHskbGFuZy0+ZXh0ZW5zaW9uc307CisgICRsYW5ndWFnZXN7JGxhbmctPm5hbWV9ID0gJGxhbmc7CisgIG15ICRsaW5rID0gJGxhbmctPmxpbmtlcjsKKyAgaWYgKCRsaW5rKQorICAgIHsKKyAgICAgIGlmIChleGlzdHMgJGxpbmtfbGFuZ3VhZ2VzeyRsaW5rfSkKKwl7CisJICBwcm9nX2Vycm9yICgiYCRsaW5rJyBoYXMgZGlmZmVyZW50IGRlZmluaXRpb25zIGluICIKKwkJICAgICAgLiAkbGFuZy0+bmFtZSAuICIgYW5kICIgLiAkbGlua19sYW5ndWFnZXN7JGxpbmt9LT5uYW1lKQorCSAgICBpZiAkbGFuZy0+bGluayBuZSAkbGlua19sYW5ndWFnZXN7JGxpbmt9LT5saW5rOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAkbGlua19sYW5ndWFnZXN7JGxpbmt9ID0gJGxhbmc7CisJfQorICAgIH0KKworICAjIFVwZGF0ZSB0aGUgcGF0dGVybiBvZiBrbm93biBleHRlbnNpb25zLgorICBhY2NlcHRfZXh0ZW5zaW9ucyAoQHskbGFuZy0+ZXh0ZW5zaW9uc30pOworCisgICMgVXBhdGUgdGhlICRzdWZmaXhfcnVsZSBtYXAuCisgIGZvcmVhY2ggbXkgJHN1ZmZpeCAoQHskbGFuZy0+ZXh0ZW5zaW9uc30pCisgICAgeworICAgICAgZm9yZWFjaCBteSAkZGVzdCAoJnskbGFuZy0+b3V0cHV0X2V4dGVuc2lvbnN9ICgkc3VmZml4KSkKKwl7CisJICByZWdpc3Rlcl9zdWZmaXhfcnVsZSAoSU5URVJOQUwsICRzdWZmaXgsICRkZXN0KTsKKwl9CisgICAgfQorfQorCisjIGRlcml2ZV9zdWZmaXggKCRFWFQsICRPQkopCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBmaW5kIGEgcGF0aCBmcm9tIGEgdXNlci1zcGVjaWZpZWQgc3VmZml4ICRFWFQKKyMgdG8gJE9CSiBvciB0byBzb21lIG90aGVyIHN1ZmZpeCB3ZSByZWNvZ25pemUgaW50ZXJuYWxseSwgZS5nLiBgY2MnLgorc3ViIGRlcml2ZV9zdWZmaXggKCQkKQoreworICBteSAoJHNvdXJjZV9leHQsICRvYmopID0gQF87CisKKyAgd2hpbGUgKCEgJGV4dGVuc2lvbl9tYXB7JHNvdXJjZV9leHR9CisJICYmICRzb3VyY2VfZXh0IG5lICRvYmoKKwkgJiYgZXhpc3RzICRzdWZmaXhfcnVsZXMtPnskc291cmNlX2V4dH0KKwkgJiYgZXhpc3RzICRzdWZmaXhfcnVsZXMtPnskc291cmNlX2V4dH17JG9ian0pCisgICAgeworICAgICAgJHNvdXJjZV9leHQgPSAkc3VmZml4X3J1bGVzLT57JHNvdXJjZV9leHR9eyRvYmp9WzBdOworICAgIH0KKworICByZXR1cm4gJHNvdXJjZV9leHQ7Cit9CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFByZXR0eS1wcmludCBzb21ldGhpbmcgYW5kIGFwcGVuZCB0byBvdXRwdXRfcnVsZXMuCitzdWIgcHJldHR5X3ByaW50X3J1bGUKK3sKKyAgICAkb3V0cHV0X3J1bGVzIC49ICZtYWtlZmlsZV93cmFwIChAXyk7Cit9CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBIYW5kbGluZyB0aGUgY29uZGl0aW9uYWwgc3RhY2suICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjICRTVFJJTkcKKyMgbWFrZV9jb25kaXRpb25hbF9zdHJpbmcgKCRORUdBVEUsICRDT05EKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdWIgbWFrZV9jb25kaXRpb25hbF9zdHJpbmcgKCQkKQoreworICBteSAoJG5lZ2F0ZSwgJGNvbmQpID0gQF87CisgICRjb25kID0gIiR7Y29uZH1fVFJVRSIKKyAgICB1bmxlc3MgJGNvbmQgPX4gL15UUlVFfEZBTFNFJC87CisgICRjb25kID0gQXV0b21ha2U6OkNvbmRpdGlvbjo6Y29uZGl0aW9uYWxfbmVnYXRlICgkY29uZCkKKyAgICBpZiAkbmVnYXRlOworICByZXR1cm4gJGNvbmQ7Cit9CisKKworbXkgJV9hbV9tYWNyb19mb3JfY29uZCA9CisgICgKKyAgQU1ERVAgPT4gIm9uZSBvZiB0aGUgY29tcGlsZXIgdGVzdHNcbiIKKwkgICAuICIgICAgQUNfUFJPR19DQywgQUNfUFJPR19DWFgsIEFDX1BST0dfQ1hYLCBBQ19QUk9HX09CSkMsXG4iCisJICAgLiAiICAgIEFNX1BST0dfQVMsIEFNX1BST0dfR0NKLCBBTV9QUk9HX1VQQyIsCisgIGFtX19mYXN0ZGVwQ0MgPT4gJ0FDX1BST0dfQ0MnLAorICBhbV9fZmFzdGRlcENDQVMgPT4gJ0FNX1BST0dfQVMnLAorICBhbV9fZmFzdGRlcENYWCA9PiAnQUNfUFJPR19DWFgnLAorICBhbV9fZmFzdGRlcEdDSiA9PiAnQU1fUFJPR19HQ0onLAorICBhbV9fZmFzdGRlcE9CSkMgPT4gJ0FDX1BST0dfT0JKQycsCisgIGFtX19mYXN0ZGVwVVBDID0+ICdBTV9QUk9HX1VQQycKKyAgKTsKKworIyAkQ09ORAorIyBjb25kX3N0YWNrX2lmICgkTkVHQVRFLCAkQ09ORCwgJFdIRVJFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3ViIGNvbmRfc3RhY2tfaWYgKCQkJCkKK3sKKyAgbXkgKCRuZWdhdGUsICRjb25kLCAkd2hlcmUpID0gQF87CisKKyAgaWYgKCEgJGNvbmZpZ3VyZV9jb25keyRjb25kfSAmJiAkY29uZCAhfiAvXlRSVUV8RkFMU0UkLykKKyAgICB7CisgICAgICBteSAkdGV4dCA9ICIkY29uZCBkb2VzIG5vdCBhcHBlYXIgaW4gQU1fQ09ORElUSU9OQUwiOworICAgICAgbXkgJHNjb3BlID0gVVNfTE9DQUw7CisgICAgICBpZiAoZXhpc3RzICRfYW1fbWFjcm9fZm9yX2NvbmR7JGNvbmR9KQorCXsKKwkgIG15ICRtYWMgPSAkX2FtX21hY3JvX2Zvcl9jb25keyRjb25kfTsKKwkgICR0ZXh0IC49ICJcbiAgVGhlIHVzdWFsIHdheSB0byBkZWZpbmUgYCRjb25kJyBpcyB0byBhZGQgIjsKKwkgICR0ZXh0IC49ICgkbWFjID1+IC8gLykgPyAkbWFjIDogImAkbWFjJyI7CisJICAkdGV4dCAuPSAiXG4gIHRvIGAkY29uZmlndXJlX2FjJyBhbmQgcnVuIGBhY2xvY2FsJyBhbmQgYGF1dG9jb25mJyBhZ2Fpbi4iOworCSAgIyBUaGVzZSB3YXJuaW5ncyBhcHBlYXIgaW4gQXV0b21ha2UgZmlsZXMgKGRlcGVuZDIuYW0pLAorCSAgIyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIGRpc3BsYXkgdGhlbSBtb3JlIHRoYW4gb25jZToKKwkgICRzY29wZSA9IFVTX0dMT0JBTDsKKwl9CisgICAgICBlcnJvciAkd2hlcmUsICR0ZXh0LCB1bmlxX3Njb3BlID0+ICRzY29wZTsKKyAgICB9CisKKyAgcHVzaCAoQGNvbmRfc3RhY2ssIG1ha2VfY29uZGl0aW9uYWxfc3RyaW5nICgkbmVnYXRlLCAkY29uZCkpOworCisgIHJldHVybiBuZXcgQXV0b21ha2U6OkNvbmRpdGlvbiAoQGNvbmRfc3RhY2spOworfQorCisKKyMgJENPTkQKKyMgY29uZF9zdGFja19lbHNlICgkTkVHQVRFLCAkQ09ORCwgJFdIRVJFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdWIgY29uZF9zdGFja19lbHNlICgkJCQpCit7CisgIG15ICgkbmVnYXRlLCAkY29uZCwgJHdoZXJlKSA9IEBfOworCisgIGlmICghIEBjb25kX3N0YWNrKQorICAgIHsKKyAgICAgIGVycm9yICR3aGVyZSwgImVsc2Ugd2l0aG91dCBpZiI7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICRjb25kX3N0YWNrWyQjY29uZF9zdGFja10gPQorICAgIEF1dG9tYWtlOjpDb25kaXRpb246OmNvbmRpdGlvbmFsX25lZ2F0ZSAoJGNvbmRfc3RhY2tbJCNjb25kX3N0YWNrXSk7CisKKyAgIyBJZiAkQ09ORCBpcyBnaXZlbiwgY2hlY2sgYWdhaW5zdCBpdC4KKyAgaWYgKGRlZmluZWQgJGNvbmQpCisgICAgeworICAgICAgJGNvbmQgPSBtYWtlX2NvbmRpdGlvbmFsX3N0cmluZyAoJG5lZ2F0ZSwgJGNvbmQpOworCisgICAgICBlcnJvciAoJHdoZXJlLCAiZWxzZSByZW1pbmRlciAoJG5lZ2F0ZSRjb25kKSBpbmNvbXBhdGlibGUgd2l0aCAiCisJICAgICAuICJjdXJyZW50IGNvbmRpdGlvbmFsOiAkY29uZF9zdGFja1skI2NvbmRfc3RhY2tdIikKKwlpZiAkY29uZF9zdGFja1skI2NvbmRfc3RhY2tdIG5lICRjb25kOworICAgIH0KKworICByZXR1cm4gbmV3IEF1dG9tYWtlOjpDb25kaXRpb24gKEBjb25kX3N0YWNrKTsKK30KKworCisjICRDT05ECisjIGNvbmRfc3RhY2tfZW5kaWYgKCRORUdBVEUsICRDT05ELCAkV0hFUkUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdWIgY29uZF9zdGFja19lbmRpZiAoJCQkKQoreworICBteSAoJG5lZ2F0ZSwgJGNvbmQsICR3aGVyZSkgPSBAXzsKKyAgbXkgJG9sZF9jb25kOworCisgIGlmICghIEBjb25kX3N0YWNrKQorICAgIHsKKyAgICAgIGVycm9yICR3aGVyZSwgImVuZGlmIHdpdGhvdXQgaWYiOworICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICMgSWYgJENPTkQgaXMgZ2l2ZW4sIGNoZWNrIGFnYWluc3QgaXQuCisgIGlmIChkZWZpbmVkICRjb25kKQorICAgIHsKKyAgICAgICRjb25kID0gbWFrZV9jb25kaXRpb25hbF9zdHJpbmcgKCRuZWdhdGUsICRjb25kKTsKKworICAgICAgZXJyb3IgKCR3aGVyZSwgImVuZGlmIHJlbWluZGVyICgkbmVnYXRlJGNvbmQpIGluY29tcGF0aWJsZSB3aXRoICIKKwkgICAgIC4gImN1cnJlbnQgY29uZGl0aW9uYWw6ICRjb25kX3N0YWNrWyQjY29uZF9zdGFja10iKQorCWlmICRjb25kX3N0YWNrWyQjY29uZF9zdGFja10gbmUgJGNvbmQ7CisgICAgfQorCisgIHBvcCBAY29uZF9zdGFjazsKKworICByZXR1cm4gbmV3IEF1dG9tYWtlOjpDb25kaXRpb24gKEBjb25kX3N0YWNrKTsKK30KKworCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEhhbmRsaW5nIHRoZSB2YXJpYWJsZXMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyAmZGVmaW5lX3ByZXR0eV92YXJpYWJsZSAoJFZBUiwgJENPTkQsICRXSEVSRSwgQFZBTFVFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWtlIGRlZmluZV92YXJpYWJsZSwgYnV0IHRoZSB2YWx1ZSBpcyBhIGxpc3QsIGFuZCB0aGUgdmFyaWFibGUgbWF5CisjIGJlIGRlZmluZWQgY29uZGl0aW9uYWxseS4gIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGNvbmRpdGlvbgorIyB1bmRlciB3aGljaCB0aGUgdmFsdWUgc2hvdWxkIGJlIGRlZmluZWQ7IHRoaXMgc2hvdWxkIGJlIHRoZSBlbXB0eQorIyBzdHJpbmcgdG8gZGVmaW5lIHRoZSB2YXJpYWJsZSB1bmNvbmRpdGlvbmFsbHkuICBUaGUgdGhpcmQgYXJndW1lbnQKKyMgaXMgYSBsaXN0IGhvbGRpbmcgdGhlIHZhbHVlcyB0byB1c2UgZm9yIHRoZSB2YXJpYWJsZS4gIFRoZSB2YWx1ZSBpcworIyBwcmV0dHkgcHJpbnRlZCBpbiB0aGUgb3V0cHV0IGZpbGUuCitzdWIgZGVmaW5lX3ByZXR0eV92YXJpYWJsZSAoJCQkQCkKK3sKKyAgICBteSAoJHZhciwgJGNvbmQsICR3aGVyZSwgQHZhbHVlKSA9IEBfOworCisgICAgaWYgKCEgdmFyZGVmICgkdmFyLCAkY29uZCkpCisgICAgeworCUF1dG9tYWtlOjpWYXJpYWJsZTo6ZGVmaW5lICgkdmFyLCBWQVJfQVVUT01BS0UsICcnLCAkY29uZCwgIkB2YWx1ZSIsCisJCQkJICAgICcnLCAkd2hlcmUsIFZBUl9QUkVUVFkpOworCXJ2YXIgKCR2YXIpLT5yZGVmICgkY29uZCktPnNldF9zZWVuOworICAgIH0KK30KKworCisjIGRlZmluZV92YXJpYWJsZSAoJFZBUiwgJFZBTFVFLCAkV0hFUkUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBhIG5ldyBBdXRvbWFrZSBNYWtlZmlsZSB2YXJpYWJsZSBWQVIgdG8gVkFMVUUsIGJ1dCBvbmx5IGlmCisjIG5vdCBhbHJlYWR5IGRlZmluZWQuCitzdWIgZGVmaW5lX3ZhcmlhYmxlICgkJCQpCit7CisgICAgbXkgKCR2YXIsICR2YWx1ZSwgJHdoZXJlKSA9IEBfOworICAgIGRlZmluZV9wcmV0dHlfdmFyaWFibGUgKCR2YXIsIFRSVUUsICR3aGVyZSwgJHZhbHVlKTsKK30KKworCisjIGRlZmluZV9maWxlc192YXJpYWJsZSAoJFZBUiwgXEBCQVNFTkFNRSwgJEVYVEVOU0lPTiwgJFdIRVJFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgdGhlICRWQVIgd2hpY2ggY29udGVudCBpcyB0aGUgbGlzdCBvZiBmaWxlIG5hbWVzIGNvbXBvc2VkIG9mCisjIGEgQEJBU0VOQU1FIGFuZCB0aGUgJEVYVEVOU0lPTi4KK3N1YiBkZWZpbmVfZmlsZXNfdmFyaWFibGUgKCRcQCQkKQoreworICBteSAoJHZhciwgJGJhc2VuYW1lLCAkZXh0ZW5zaW9uLCAkd2hlcmUpID0gQF87CisgIGRlZmluZV92YXJpYWJsZSAoJHZhciwKKwkJICAgam9pbiAoJyAnLCBtYXAgeyAiJF8uJGV4dGVuc2lvbiIgfSBAJGJhc2VuYW1lKSwKKwkJICAgJHdoZXJlKTsKK30KKworCisjIExpa2UgZGVmaW5lX3ZhcmlhYmxlLCBidXQgZGVmaW5lIGEgdmFyaWFibGUgdG8gYmUgdGhlIGNvbmZpZ3VyZQorIyBzdWJzdGl0dXRpb24gYnkgdGhlIHNhbWUgbmFtZS4KK3N1YiBkZWZpbmVfY29uZmlndXJlX3ZhcmlhYmxlICgkKQoreworICBteSAoJHZhcikgPSBAXzsKKworICBteSAkcHJldHR5ID0gVkFSX0FTSVM7CisgIG15ICRvd25lciA9IFZBUl9DT05GSUdVUkU7CisKKyAgIyBTb21lIHZhcmlhYmxlcyB3ZSBkbyBub3Qgd2FudCB0byBvdXRwdXQuICBGb3IgaW5zdGFuY2UgaXQKKyAgIyB3b3VsZCBiZSBhIGJhZCBpZGVhIHRvIG91dHB1dCBgVSA9IEBVQGAgd2hlbiBgQFVAYCBjYW4gYmUKKyAgIyBzdWJzdGl0dXRlZCBhcyBgXGAuCisgICRwcmV0dHkgPSBWQVJfU0lMRU5UIGlmIGV4aXN0cyAkaWdub3JlZF9jb25maWd1cmVfdmFyc3skdmFyfTsKKworICAjIEFOU0kyS05SIGlzIGEgdmFyaWFibGUgdGhhdCBBdXRvbWFrZSB3YW50cyB0byByZWRlZmluZSwgc28KKyAgIyBpdCBtdXN0IGJlIG93bmVkIGJ5IEF1dG9tYWtlLiAgKEl0IGlzIGFsc28gdXNlZCBhcyBhIHByb29mCisgICMgdGhhdCBBTV9DX1BST1RPVFlQRVMgaGFzIGJlZW4gcnVuLCB0aGF0J3Mgd2h5IHdlIGRvIG5vdCBzaW1wbHkKKyAgIyBvbWl0IHRoZSBBQ19TVUJTVC4pCisgICRvd25lciA9IFZBUl9BVVRPTUFLRSBpZiAkdmFyIGVxICdBTlNJMktOUic7CisKKyAgQXV0b21ha2U6OlZhcmlhYmxlOjpkZWZpbmUgKCR2YXIsICRvd25lciwgJycsIFRSVUUsIHN1YnN0ICR2YXIsCisJCQkgICAgICAnJywgJGNvbmZpZ3VyZV92YXJzeyR2YXJ9LCAkcHJldHR5KTsKK30KKworCisjIGRlZmluZV9jb21waWxlcl92YXJpYWJsZSAoJExBTkcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBhIGNvbXBpbGVyIHZhcmlhYmxlLiAgV2UgYWxzbyBoYW5kbGUgZGVmaW5pbmcgdGhlIGBMVCcKKyMgdmVyc2lvbiBvZiB0aGUgY29tbWFuZCB3aGVuIHVzaW5nIGxpYnRvb2wuCitzdWIgZGVmaW5lX2NvbXBpbGVyX3ZhcmlhYmxlICgkKQoreworICAgIG15ICgkbGFuZykgPSBAXzsKKworICAgIG15ICgkdmFyLCAkdmFsdWUpID0gKCRsYW5nLT5jb21waWxlciwgJGxhbmctPmNvbXBpbGUpOworICAgIG15ICRsaWJ0b29sX3RhZyA9ICcnOworICAgICRsaWJ0b29sX3RhZyA9ICctLXRhZz0nIC4gJGxhbmctPmxpYnRvb2xfdGFnIC4gJyAnCisgICAgICBpZiAkbGFuZy0+bGlidG9vbF90YWcgJiYgZXhpc3RzICRsaWJ0b29sX3RhZ3N7JGxhbmctPmxpYnRvb2xfdGFnfTsKKyAgICAmZGVmaW5lX3ZhcmlhYmxlICgkdmFyLCAkdmFsdWUsIElOVEVSTkFMKTsKKyAgICBpZiAodmFyICgnTElCVE9PTCcpKQorICAgICAgeworCW15ICR2ZXJib3NlID0gZGVmaW5lX3ZlcmJvc2VfbGlidG9vbCAoKTsKKwkmZGVmaW5lX3ZhcmlhYmxlICgiTFQkdmFyIiwKKwkJCSAgIlwkKExJQlRPT0wpICR2ZXJib3NlICRsaWJ0b29sX3RhZ1wkKEFNX0xJQlRPT0xGTEFHUykgIgorCQkJICAuICJcJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICR2YWx1ZSIsCisJCQkgIElOVEVSTkFMKTsKKyAgICAgIH0KKyAgICBkZWZpbmVfdmVyYm9zZV90YWd2YXIgKCRsYW5nLT5jY2VyIHx8ICdHRU4nKTsKK30KKworCisjIGRlZmluZV9saW5rZXJfdmFyaWFibGUgKCRMQU5HKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIGxpbmtlciB2YXJpYWJsZXMuCitzdWIgZGVmaW5lX2xpbmtlcl92YXJpYWJsZSAoJCkKK3sKKyAgICBteSAoJGxhbmcpID0gQF87CisKKyAgICBteSAkbGlidG9vbF90YWcgPSAnJzsKKyAgICAkbGlidG9vbF90YWcgPSAnLS10YWc9JyAuICRsYW5nLT5saWJ0b29sX3RhZyAuICcgJworICAgICAgaWYgJGxhbmctPmxpYnRvb2xfdGFnICYmIGV4aXN0cyAkbGlidG9vbF90YWdzeyRsYW5nLT5saWJ0b29sX3RhZ307CisgICAgIyBDQ0xEID0gJChDQykuCisgICAgJmRlZmluZV92YXJpYWJsZSAoJGxhbmctPmxkZXIsICRsYW5nLT5sZCwgSU5URVJOQUwpOworICAgICMgQ0NMSU5LID0gJChDQ0xEKSBibGFoIGJsYWguLi4KKyAgICBteSAkbGluayA9ICcnOworICAgIGlmICh2YXIgKCdMSUJUT09MJykpCisgICAgICB7CisJbXkgJHZlcmJvc2UgPSBkZWZpbmVfdmVyYm9zZV9saWJ0b29sICgpOworCSRsaW5rID0gIlwkKExJQlRPT0wpICR2ZXJib3NlICRsaWJ0b29sX3RhZ1wkKEFNX0xJQlRPT0xGTEFHUykgIgorCQkuICJcJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICI7CisgICAgICB9CisgICAgJmRlZmluZV92YXJpYWJsZSAoJGxhbmctPmxpbmtlciwgJGxpbmsgLiAkbGFuZy0+bGluaywgSU5URVJOQUwpOworICAgICZkZWZpbmVfdmFyaWFibGUgKCRsYW5nLT5jb21waWxlciwgICRsYW5nKTsKKyAgICAmZGVmaW5lX3ZlcmJvc2VfdGFndmFyICgkbGFuZy0+bGRlciB8fCAnR0VOJyk7Cit9CisKK3N1YiBkZWZpbmVfcGVyX3RhcmdldF9saW5rZXJfdmFyaWFibGUgKCQkKQoreworICBteSAoJGxpbmtlciwgJHRhcmdldCkgPSBAXzsKKworICAjIElmIHRoZSB1c2VyIHdyb3RlIGEgY3VzdG9tIGxpbmsgY29tbWFuZCwgd2UgZG9uJ3QgZGVmaW5lIG91cnMuCisgIHJldHVybiAiJHt0YXJnZXR9X0xJTksiCisgICAgaWYgc2V0X3NlZW4gIiR7dGFyZ2V0fV9MSU5LIjsKKworICBteSAkeGxpbmsgPSAkbGlua2VyID8gJGxpbmtlciA6ICdMSU5LJzsKKworICBteSAkbGFuZyA9ICRsaW5rX2xhbmd1YWdlc3skeGxpbmt9OworICBwcm9nX2Vycm9yICJVbmtub3duIGxhbmd1YWdlIGZvciBsaW5rZXIgdmFyaWFibGUgYCR4bGluayciCisgICAgdW5sZXNzICRsYW5nOworCisgIG15ICRsaW5rX2NvbW1hbmQgPSAkbGFuZy0+bGluazsKKyAgaWYgKHZhciAnTElCVE9PTCcpCisgICAgeworICAgICAgbXkgJGxpYnRvb2xfdGFnID0gJyc7CisgICAgICAkbGlidG9vbF90YWcgPSAnLS10YWc9JyAuICRsYW5nLT5saWJ0b29sX3RhZyAuICcgJworCWlmICRsYW5nLT5saWJ0b29sX3RhZyAmJiBleGlzdHMgJGxpYnRvb2xfdGFnc3skbGFuZy0+bGlidG9vbF90YWd9OworCisgICAgICBteSAkdmVyYm9zZSA9IGRlZmluZV92ZXJib3NlX2xpYnRvb2wgKCk7CisgICAgICAkbGlua19jb21tYW5kID0KKwkiXCQoTElCVE9PTCkgJHZlcmJvc2UgJGxpYnRvb2xfdGFnXCQoQU1fTElCVE9PTEZMQUdTKSBcJChMSUJUT09MRkxBR1MpICIKKwkuICItLW1vZGU9bGluayAiIC4gJGxpbmtfY29tbWFuZDsKKyAgICB9CisKKyAgIyBSZXdyaXRlIGVhY2ggb2NjdXJyZW5jZSBvZiBgQU1fJGZsYWcnIGluIHRoZSBsaW5rCisgICMgY29tbWFuZCBpbnRvIGAke2Rlcml2ZWR9XyRmbGFnJyBpZiBpdCBleGlzdHMuCisgIG15ICRvcmlnX2NvbW1hbmQgPSAkbGlua19jb21tYW5kOworICBteSBAZmxhZ3MgPSAoQHskbGFuZy0+ZmxhZ3N9LCAnTERGTEFHUycpOworICBwdXNoIEBmbGFncywgJ0xJQlRPT0xGTEFHUycgaWYgdmFyICdMSUJUT09MJzsKKyAgZm9yIG15ICRmbGFnIChAZmxhZ3MpCisgICAgeworICAgICAgbXkgJHZhbCA9ICIke3RhcmdldH1fJGZsYWciOworICAgICAgJGxpbmtfY29tbWFuZCA9fiBzL1woQU1fJGZsYWdcKS9cKCR2YWxcKS8KKwlpZiBzZXRfc2VlbiAoJHZhbCk7CisgICAgfQorCisgICMgSWYgdGhlIGNvbXB1dGVkIGNvbW1hbmQgaXMgdGhlIHNhbWUgYXMgdGhlIGdlbmVyaWMgY29tbWFuZCwgdXNlCisgICMgdGhlIGNvbW1hbmQgbGlua2VyIHZhcmlhYmxlLgorICByZXR1cm4gKCRsYW5nLT5saW5rZXIsICRsYW5nLT5sZGVyKQorICAgIGlmICRsaW5rX2NvbW1hbmQgZXEgJG9yaWdfY29tbWFuZDsKKworICAmZGVmaW5lX3ZhcmlhYmxlICgiJHt0YXJnZXR9X0xJTksiLCAkbGlua19jb21tYW5kLCBJTlRFUk5BTCk7CisgIHJldHVybiAoIiR7dGFyZ2V0fV9MSU5LIiwgJGxhbmctPmxkZXIpOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgJmNoZWNrX3RyYWlsaW5nX3NsYXNoICgkV0hFUkUsICRMSU5FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZXR1cm4gMSBpZmYgJExJTkUgZW5kcyB3aXRoIGEgc2xhc2guCisjIE1pZ2h0IG1vZGlmeSAkTElORS4KK3N1YiBjaGVja190cmFpbGluZ19zbGFzaCAoJFwkKQoreworICBteSAoJHdoZXJlLCAkbGluZSkgPSBAXzsKKworICAjIElnbm9yZSBgIyMnIGxpbmVzLgorICByZXR1cm4gMCBpZiAkJGxpbmUgPX4gLyRJR05PUkVfUEFUVEVSTi9vOworCisgICMgQ2F0Y2ggYW5kIGZpeCBhIGNvbW1vbiBlcnJvci4KKyAgbXNnICJzeW50YXgiLCAkd2hlcmUsICJ3aGl0ZXNwYWNlIGZvbGxvd2luZyB0cmFpbGluZyBiYWNrc2xhc2giCisgICAgaWYgJCRsaW5lID1+IHMvXFxccytcbiQvXFxcbi87CisKKyAgcmV0dXJuICQkbGluZSA9fiAvXFwkLzsKK30KKworCisjICZyZWFkX2FtX2ZpbGUgKCRBTUZJTEUsICRXSEVSRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWFkIE1ha2VmaWxlLmFtIGFuZCBzZXQgdXAgJWNvbnRlbnRzLiAgU2ltdWx0YW5lb3VzbHkgY29weSBsaW5lcworIyBmcm9tIE1ha2VmaWxlLmFtIGludG8gJG91dHB1dF90cmFpbGVyLCBvciBkZWZpbmUgdmFyaWFibGVzIGFzCisjIGFwcHJvcHJpYXRlLiAgTk9URSB3ZSBwdXQgcnVsZXMgaW4gdGhlIHRyYWlsZXIgc2VjdGlvbi4gIFdlIHdhbnQKKyMgdXNlciBydWxlcyB0byBjb21lIGFmdGVyIG91ciBnZW5lcmF0ZWQgc3R1ZmYuCitzdWIgcmVhZF9hbV9maWxlICgkJCkKK3sKKyAgICBteSAoJGFtZmlsZSwgJHdoZXJlKSA9IEBfOworCisgICAgbXkgJGFtX2ZpbGUgPSBuZXcgQXV0b21ha2U6OlhGaWxlICgiPCAkYW1maWxlIik7CisgICAgdmVyYiAicmVhZGluZyAkYW1maWxlIjsKKworICAgICMgS2VlcCB0cmFjayBvZiB0aGUgeW91bmdlc3Qgb3V0cHV0IGRlcGVuZGVuY3kuCisgICAgbXkgJG10aW1lID0gbXRpbWUgJGFtZmlsZTsKKyAgICAkb3V0cHV0X2RlcHNfZ3JlYXRlc3RfdGltZXN0YW1wID0gJG10aW1lCisgICAgICBpZiAkbXRpbWUgPiAkb3V0cHV0X2RlcHNfZ3JlYXRlc3RfdGltZXN0YW1wOworCisgICAgbXkgJHNwYWNpbmcgPSAnJzsKKyAgICBteSAkY29tbWVudCA9ICcnOworICAgIG15ICRibGFuayA9IDA7CisgICAgbXkgJHNhd19iayA9IDA7CisgICAgbXkgJHZhcl9sb29rID0gVkFSX0FTSVM7CisKKyAgICB1c2UgY29uc3RhbnQgSU5fVkFSX0RFRiA9PiAwOworICAgIHVzZSBjb25zdGFudCBJTl9SVUxFX0RFRiA9PiAxOworICAgIHVzZSBjb25zdGFudCBJTl9DT01NRU5UID0+IDI7CisgICAgbXkgJHByZXZfc3RhdGUgPSBJTl9SVUxFX0RFRjsKKworICAgIHdoaWxlICgkXyA9ICRhbV9maWxlLT5nZXRsaW5lKQorICAgIHsKKwkkd2hlcmUtPnNldCAoIiRhbWZpbGU6JC4iKTsKKwlpZiAoLyRJR05PUkVfUEFUVEVSTi9vKQorCXsKKwkgICAgIyBNZXJlbHkgZGVsZXRlIGNvbW1lbnRzIGJlZ2lubmluZyB3aXRoIHR3byBoYXNoZXMuCisJfQorCWVsc2lmICgvJFdISVRFX1BBVFRFUk4vbykKKwl7CisJICAgIGVycm9yICR3aGVyZSwgImJsYW5rIGxpbmUgZm9sbG93aW5nIHRyYWlsaW5nIGJhY2tzbGFzaCIKKwkgICAgICBpZiAkc2F3X2JrOworCSAgICAjIFN0aWNrIGEgc2luZ2xlIHdoaXRlIGxpbmUgYmVmb3JlIHRoZSBpbmNvbWluZyBtYWNybyBvciBydWxlLgorCSAgICAkc3BhY2luZyA9ICJcbiI7CisJICAgICRibGFuayA9IDE7CisJICAgICMgRmx1c2ggYWxsIGNvbW1lbnRzIHNlZW4gc28gZmFyLgorCSAgICBpZiAoJGNvbW1lbnQgbmUgJycpCisJICAgIHsKKwkJJG91dHB1dF92YXJzIC49ICRjb21tZW50OworCQkkY29tbWVudCA9ICcnOworCSAgICB9CisJfQorCWVsc2lmICgvJENPTU1FTlRfUEFUVEVSTi9vKQorCXsKKwkgICAgIyBTdGljayBjb21tZW50cyBiZWZvcmUgdGhlIGluY29taW5nIG1hY3JvIG9yIHJ1bGUuICBNYWtlCisJICAgICMgc3VyZSBhIGJsYW5rIGxpbmUgcHJlY2VkZXMgdGhlIGZpcnN0IGJsb2NrIG9mIGNvbW1lbnRzLgorCSAgICAkc3BhY2luZyA9ICJcbiIgdW5sZXNzICRibGFuazsKKwkgICAgJGJsYW5rID0gMTsKKwkgICAgJGNvbW1lbnQgLj0gJHNwYWNpbmcgLiAkXzsKKwkgICAgJHNwYWNpbmcgPSAnJzsKKwkgICAgJHByZXZfc3RhdGUgPSBJTl9DT01NRU5UOworCX0KKwllbHNlCisJeworCSAgICBsYXN0OworCX0KKwkkc2F3X2JrID0gY2hlY2tfdHJhaWxpbmdfc2xhc2ggKCR3aGVyZSwgJF8pOworICAgIH0KKworICAgICMgV2Ugc2F2ZSB0aGUgY29uZGl0aW9uYWwgc3RhY2sgb24gZW50cnksIGFuZCB0aGVuIGNoZWNrIHRvIG1ha2UKKyAgICAjIHN1cmUgaXQgaXMgdGhlIHNhbWUgb24gZXhpdC4gIFRoaXMgbGV0cyB1cyBjb25kaXRpb25hbGx5IGluY2x1ZGUKKyAgICAjIG90aGVyIGZpbGVzLgorICAgIG15IEBzYXZlZF9jb25kX3N0YWNrID0gQGNvbmRfc3RhY2s7CisgICAgbXkgJGNvbmQgPSBuZXcgQXV0b21ha2U6OkNvbmRpdGlvbiAoQGNvbmRfc3RhY2spOworCisgICAgbXkgJGxhc3RfdmFyX25hbWUgPSAnJzsKKyAgICBteSAkbGFzdF92YXJfdHlwZSA9ICcnOworICAgIG15ICRsYXN0X3Zhcl92YWx1ZSA9ICcnOworICAgIG15ICRsYXN0X3doZXJlOworICAgICMgRklYTUU6IHNob3VsZG4ndCB1c2UgJF8gaW4gdGhpcyBsb29wOyBpdCBpcyB0b28gYmlnLgorICAgIHdoaWxlICgkXykKKyAgICB7CisJJHdoZXJlLT5zZXQgKCIkYW1maWxlOiQuIik7CisKKwkjIE1ha2Ugc3VyZSB0aGUgbGluZSBpcyBcbi10ZXJtaW5hdGVkLgorCWNob21wOworCSRfIC49ICJcbiI7CisKKwkjIERvbid0IGxvb2sgYXQgTUFJTlRBSU5FUl9NT0RFX1RSVUUgaGVyZS4gIFRoYXQgc2hvdWxkbid0IGJlCisJIyB1c2VkIGJ5IHVzZXJzLiAgQE1BSU5UQCBpcyBhbiBhbmFjaHJvbmlzbSBub3cuCisJJF8gPX4gcy9cQE1BSU5UXEAvL2cKKwkgICAgdW5sZXNzICRzZWVuX21haW50X21vZGU7CisKKwlteSAkbmV3X3Nhd19iayA9IGNoZWNrX3RyYWlsaW5nX3NsYXNoICgkd2hlcmUsICRfKTsKKworCWlmICgvJElHTk9SRV9QQVRURVJOL28pCisJeworCSAgICAjIE1lcmVseSBkZWxldGUgY29tbWVudHMgYmVnaW5uaW5nIHdpdGggdHdvIGhhc2hlcy4KKworCSAgICAjIEtlZXAgYW55IGJhY2tzbGFzaCBmcm9tIHRoZSBwcmV2aW91cyBsaW5lLgorCSAgICAkbmV3X3Nhd19iayA9ICRzYXdfYms7CisJfQorCWVsc2lmICgvJFdISVRFX1BBVFRFUk4vbykKKwl7CisJICAgICMgU3RpY2sgYSBzaW5nbGUgd2hpdGUgbGluZSBiZWZvcmUgdGhlIGluY29taW5nIG1hY3JvIG9yIHJ1bGUuCisJICAgICRzcGFjaW5nID0gIlxuIjsKKwkgICAgZXJyb3IgJHdoZXJlLCAiYmxhbmsgbGluZSBmb2xsb3dpbmcgdHJhaWxpbmcgYmFja3NsYXNoIgorCSAgICAgIGlmICRzYXdfYms7CisJfQorCWVsc2lmICgvJENPTU1FTlRfUEFUVEVSTi9vKQorCXsKKwkgICAgZXJyb3IgJHdoZXJlLCAiY29tbWVudCBmb2xsb3dpbmcgdHJhaWxpbmcgYmFja3NsYXNoIgorCSAgICAgIGlmICRzYXdfYmsgJiYgJHByZXZfc3RhdGUgIT0gSU5fQ09NTUVOVDsKKworCSAgICAjIFN0aWNrIGNvbW1lbnRzIGJlZm9yZSB0aGUgaW5jb21pbmcgbWFjcm8gb3IgcnVsZS4KKwkgICAgJGNvbW1lbnQgLj0gJHNwYWNpbmcgLiAkXzsKKwkgICAgJHNwYWNpbmcgPSAnJzsKKwkgICAgJHByZXZfc3RhdGUgPSBJTl9DT01NRU5UOworCX0KKwllbHNpZiAoJHNhd19iaykKKwl7CisJICAgIGlmICgkcHJldl9zdGF0ZSA9PSBJTl9SVUxFX0RFRikKKwkgICAgeworCSAgICAgIG15ICRjb25kID0gbmV3IEF1dG9tYWtlOjpDb25kaXRpb24gQGNvbmRfc3RhY2s7CisJICAgICAgJG91dHB1dF90cmFpbGVyIC49ICRjb25kLT5zdWJzdF9zdHJpbmc7CisJICAgICAgJG91dHB1dF90cmFpbGVyIC49ICRfOworCSAgICB9CisJICAgIGVsc2lmICgkcHJldl9zdGF0ZSA9PSBJTl9DT01NRU5UKQorCSAgICB7CisJCSMgSWYgdGhlIGxpbmUgZG9lc24ndCBzdGFydCB3aXRoIGEgYCMnLCBhZGQgaXQuCisJCSMgV2UgZG8gdGhpcyBiZWNhdXNlIGEgY29udGludWVkIGNvbW1lbnQgbGlrZQorCQkjICAgIyBBID0gZm9vIFwKKwkJIyAgICAgICAgIGJhciBcCisJCSMgICAgICAgICBiYXoKKwkJIyBpcyBub3QgcG9ydGFibGUuICBCU0QgbWFrZSBkb2Vzbid0IGhvbm9yCisJCSMgZXNjYXBlZCBuZXdsaW5lcyBpbiBjb21tZW50cy4KKwkJcy9eIz8vIy87CisJCSRjb21tZW50IC49ICRzcGFjaW5nIC4gJF87CisJICAgIH0KKwkgICAgZWxzZSAjICRwcmV2X3N0YXRlID09IElOX1ZBUl9ERUYKKwkgICAgeworCSAgICAgICRsYXN0X3Zhcl92YWx1ZSAuPSAnICcKKwkJdW5sZXNzICRsYXN0X3Zhcl92YWx1ZSA9fiAvXHMkLzsKKwkgICAgICAkbGFzdF92YXJfdmFsdWUgLj0gJF87CisKKwkgICAgICBpZiAoIS9cXCQvKQorCQl7CisJCSAgQXV0b21ha2U6OlZhcmlhYmxlOjpkZWZpbmUgKCRsYXN0X3Zhcl9uYW1lLCBWQVJfTUFLRUZJTEUsCisJCQkJCSAgICAgICRsYXN0X3Zhcl90eXBlLCAkY29uZCwKKwkJCQkJICAgICAgJGxhc3RfdmFyX3ZhbHVlLCAkY29tbWVudCwKKwkJCQkJICAgICAgJGxhc3Rfd2hlcmUsIFZBUl9BU0lTKQorCQkgICAgaWYgJGNvbmQgIT0gRkFMU0U7CisJCSAgJGNvbW1lbnQgPSAkc3BhY2luZyA9ICcnOworCQl9CisJICAgIH0KKwl9CisKKwllbHNpZiAoLyRJRl9QQVRURVJOL28pCisJICB7CisJICAgICRjb25kID0gY29uZF9zdGFja19pZiAoJDEsICQyLCAkd2hlcmUpOworCSAgfQorCWVsc2lmICgvJEVMU0VfUEFUVEVSTi9vKQorCSAgeworCSAgICAkY29uZCA9IGNvbmRfc3RhY2tfZWxzZSAoJDEsICQyLCAkd2hlcmUpOworCSAgfQorCWVsc2lmICgvJEVORElGX1BBVFRFUk4vbykKKwkgIHsKKwkgICAgJGNvbmQgPSBjb25kX3N0YWNrX2VuZGlmICgkMSwgJDIsICR3aGVyZSk7CisJICB9CisKKwllbHNpZiAoLyRSVUxFX1BBVFRFUk4vbykKKwl7CisJICAgICMgRm91bmQgYSBydWxlLgorCSAgICAkcHJldl9zdGF0ZSA9IElOX1JVTEVfREVGOworCisJICAgICMgRm9yIG5vdyB3ZSBoYXZlIHRvIG91dHB1dCBhbGwgZGVmaW5pdGlvbnMgb2YgdXNlciBydWxlcworCSAgICAjIGFuZCBjYW4ndCBkaWFnbm9zZSBkdXBsaWNhdGVzIChzZWUgdGhlIGNvbW1lbnQgaW4KKwkgICAgIyBBdXRvbWFrZTo6UnVsZTo6ZGVmaW5lKS4gU28gd2UgZ28gb24gYW5kIGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlLgorCSAgICBBdXRvbWFrZTo6UnVsZTo6ZGVmaW5lICgkMSwgJGFtZmlsZSwgUlVMRV9VU0VSLCAkY29uZCwgJHdoZXJlKTsKKworCSAgICBjaGVja192YXJpYWJsZV9leHBhbnNpb25zICgkXywgJHdoZXJlKTsKKworCSAgICAkb3V0cHV0X3RyYWlsZXIgLj0gJGNvbW1lbnQgLiAkc3BhY2luZzsKKwkgICAgbXkgJGNvbmQgPSBuZXcgQXV0b21ha2U6OkNvbmRpdGlvbiBAY29uZF9zdGFjazsKKwkgICAgJG91dHB1dF90cmFpbGVyIC49ICRjb25kLT5zdWJzdF9zdHJpbmc7CisJICAgICRvdXRwdXRfdHJhaWxlciAuPSAkXzsKKwkgICAgJGNvbW1lbnQgPSAkc3BhY2luZyA9ICcnOworCX0KKwllbHNpZiAoLyRBU1NJR05NRU5UX1BBVFRFUk4vbykKKwl7CisJICAgICMgRm91bmQgYSBtYWNybyBkZWZpbml0aW9uLgorCSAgICAkcHJldl9zdGF0ZSA9IElOX1ZBUl9ERUY7CisJICAgICRsYXN0X3Zhcl9uYW1lID0gJDE7CisJICAgICRsYXN0X3Zhcl90eXBlID0gJDI7CisJICAgICRsYXN0X3Zhcl92YWx1ZSA9ICQzOworCSAgICAkbGFzdF93aGVyZSA9ICR3aGVyZS0+Y2xvbmU7CisJICAgIGlmICgkMyBuZSAnJyAmJiBzdWJzdHIgKCQzLCAtMSkgZXEgIlxcIikKKwkgICAgICB7CisJCSMgV2UgcHJlc2VydmUgdGhlIGBcJyBiZWNhdXNlIG90aGVyd2lzZSB0aGUgbG9uZyBsaW5lcworCQkjIHRoYXQgYXJlIGdlbmVyYXRlZCB3aWxsIGJlIHRydW5jYXRlZCBieSBicm9rZW4KKwkJIyBgc2VkJ3MuCisJCSRsYXN0X3Zhcl92YWx1ZSA9ICQzIC4gIlxuIjsKKwkgICAgICB9CisJICAgICMgTm9ybWFsbHkgd2UgdHJ5IHRvIG91dHB1dCB2YXJpYWJsZSBkZWZpbml0aW9ucyBpbiB0aGUKKwkgICAgIyBzYW1lIGZvcm1hdCB0aGV5IHdlcmUgaW5wdXQuICBIb3dldmVyLCBQT1NJWCBjb21wbGlhbnQKKwkgICAgIyBzeXN0ZW1zIGFyZSBub3QgcmVxdWlyZWQgdG8gc3VwcG9ydCBsaW5lcyBsb25nZXIgdGhhbgorCSAgICAjIDIwNDggYnl0ZXMgKG1vc3Qgbm90YWJseSwgc29tZSBzZWQgaW1wbGVtZW50YXRpb24gYXJlCisJICAgICMgbGltaXRlZCB0byA0MDAwIGJ5dGVzLCBhbmQgc2VkIGlzIHVzZWQgYnkgY29uZmlnLnN0YXR1cworCSAgICAjIHRvIHJld3JpdGUgTWFrZWZpbGUuaW4gaW50byBNYWtlZmlsZSkuICBNb3Jlb3ZlciBub2JvZHkKKwkgICAgIyB3b3VsZCByZWFsbHkgd3JpdGUgc3VjaCBsb25nIGxpbmVzIGJ5IGhhbmQgc2luY2UgaXQgaXMKKwkgICAgIyBoYXJkbHkgbWFpbnRhaW5hYmxlLiAgU28gaWYgYSBsaW5lIGlzIGxvbmdlciB0aGF0IDEwMDAKKwkgICAgIyBieXRlcyAoYW4gYXJiaXRyYXJ5IGxpbWl0KSwgYXNzdW1lIGl0IGhhcyBiZWVuCisJICAgICMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgc29tZSB0b29scywgYW5kIGZsYXR0ZW4gdGhlCisJICAgICMgdmFyaWFibGUgZGVmaW5pdGlvbi4gIE90aGVyd2lzZSwga2VlcCB0aGUgdmFyaWFibGUgYXMgaXQKKwkgICAgIyBhcyBiZWVuIGlucHV0LgorCSAgICAkdmFyX2xvb2sgPSBWQVJfUFJFVFRZIGlmIGxlbmd0aCAoJGxhc3RfdmFyX3ZhbHVlKSA+PSAxMDAwOworCisJICAgIGlmICghL1xcJC8pCisJICAgICAgeworCQlBdXRvbWFrZTo6VmFyaWFibGU6OmRlZmluZSAoJGxhc3RfdmFyX25hbWUsIFZBUl9NQUtFRklMRSwKKwkJCQkJICAgICRsYXN0X3Zhcl90eXBlLCAkY29uZCwKKwkJCQkJICAgICRsYXN0X3Zhcl92YWx1ZSwgJGNvbW1lbnQsCisJCQkJCSAgICAkbGFzdF93aGVyZSwgJHZhcl9sb29rKQorCQkgIGlmICRjb25kICE9IEZBTFNFOworCQkkY29tbWVudCA9ICRzcGFjaW5nID0gJyc7CisJCSR2YXJfbG9vayA9IFZBUl9BU0lTOworCSAgICAgIH0KKwl9CisJZWxzaWYgKC8kSU5DTFVERV9QQVRURVJOL28pCisJeworCSAgICBteSAkcGF0aCA9ICQxOworCisJICAgIGlmICgkcGF0aCA9fiBzL15cJFwodG9wX3NyY2RpclwpXC8vLykKKwkgICAgICB7CisJCXB1c2ggKEBpbmNsdWRlX3N0YWNrLCAiXCRcKHRvcF9zcmNkaXJcKS8kcGF0aCIpOworCQkjIERpc3RyaWJ1dGUgYW55IGluY2x1ZGVkIGZpbGUuCisKKwkJIyBBbHdheXMgdXNlIHRoZSAkKHRvcF9zcmNkaXIpIHByZWZpeCBpbiBESVNUX0NPTU1PTiwKKwkJIyBvdGhlcndpc2UgT1NGIG1ha2Ugd2lsbCBpbXBsaWNpdGx5IGNvcHkgdGhlIGluY2x1ZGVkCisJCSMgZmlsZSBpbiB0aGUgYnVpbGQgdHJlZSBkdXJpbmcgYG1ha2UgZGlzdGRpcicgdG8gc2F0aXNmeQorCQkjIHRoZSBkZXBlbmRlbmN5LgorCQkjIChzdWJkaXJjb25kMi50ZXN0IGFuZCBzdWJkaXJjb25kMy50ZXN0IHdpbGwgZmFpbC4pCisJCXB1c2hfZGlzdF9jb21tb24gKCJcJFwodG9wX3NyY2RpclwpLyRwYXRoIik7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgeworCQkkcGF0aCA9fiBzL1wkXChzcmNkaXJcKVwvLy87CisJCXB1c2ggKEBpbmNsdWRlX3N0YWNrLCAiXCRcKHNyY2RpclwpLyRwYXRoIik7CisJCSMgQWx3YXlzIHVzZSB0aGUgJChzcmNkaXIpIHByZWZpeCBpbiBESVNUX0NPTU1PTiwKKwkJIyBvdGhlcndpc2UgT1NGIG1ha2Ugd2lsbCBpbXBsaWNpdGx5IGNvcHkgdGhlIGluY2x1ZGVkCisJCSMgZmlsZSBpbiB0aGUgYnVpbGQgdHJlZSBkdXJpbmcgYG1ha2UgZGlzdGRpcicgdG8gc2F0aXNmeQorCQkjIHRoZSBkZXBlbmRlbmN5LgorCQkjIChzdWJkaXJjb25kMi50ZXN0IGFuZCBzdWJkaXJjb25kMy50ZXN0IHdpbGwgZmFpbC4pCisJCXB1c2hfZGlzdF9jb21tb24gKCJcJFwoc3JjZGlyXCkvJHBhdGgiKTsKKwkJJHBhdGggPSAkcmVsYXRpdmVfZGlyIC4gIi8iIC4gJHBhdGggaWYgJHJlbGF0aXZlX2RpciBuZSAnLic7CisJICAgICAgfQorCSAgICAkd2hlcmUtPnB1c2hfY29udGV4dCAoImAkcGF0aCcgaW5jbHVkZWQgZnJvbSBoZXJlIik7CisJICAgICZyZWFkX2FtX2ZpbGUgKCRwYXRoLCAkd2hlcmUpOworCSAgICAkd2hlcmUtPnBvcF9jb250ZXh0OworCX0KKwllbHNlCisJeworCSAgICAjIFRoaXMgaXNuJ3QgYW4gZXJyb3I7IGl0IGlzIHByb2JhYmx5IGEgY29udGludWVkIHJ1bGUuCisJICAgICMgSW4gZmFjdCwgdGhpcyBpcyB3aGF0IHdlIGFzc3VtZS4KKwkgICAgJHByZXZfc3RhdGUgPSBJTl9SVUxFX0RFRjsKKwkgICAgY2hlY2tfdmFyaWFibGVfZXhwYW5zaW9ucyAoJF8sICR3aGVyZSk7CisJICAgICRvdXRwdXRfdHJhaWxlciAuPSAkY29tbWVudCAuICRzcGFjaW5nOworCSAgICBteSAkY29uZCA9IG5ldyBBdXRvbWFrZTo6Q29uZGl0aW9uIEBjb25kX3N0YWNrOworCSAgICAkb3V0cHV0X3RyYWlsZXIgLj0gJGNvbmQtPnN1YnN0X3N0cmluZzsKKwkgICAgJG91dHB1dF90cmFpbGVyIC49ICRfOworCSAgICAkY29tbWVudCA9ICRzcGFjaW5nID0gJyc7CisJICAgIGVycm9yICR3aGVyZSwgImAjJyBjb21tZW50IGF0IHN0YXJ0IG9mIHJ1bGUgaXMgdW5wb3J0YWJsZSIKKwkgICAgICBpZiAkXyA9fiAvXlx0XHMqXCMvOworCX0KKworCSRzYXdfYmsgPSAkbmV3X3Nhd19iazsKKwkkXyA9ICRhbV9maWxlLT5nZXRsaW5lOworICAgIH0KKworICAgICRvdXRwdXRfdHJhaWxlciAuPSAkY29tbWVudDsKKworICAgIGVycm9yICgkd2hlcmUsICJ0cmFpbGluZyBiYWNrc2xhc2ggb24gbGFzdCBsaW5lIikKKyAgICAgIGlmICRzYXdfYms7CisKKyAgICBlcnJvciAoJHdoZXJlLCAoQGNvbmRfc3RhY2sgPyAidW50ZXJtaW5hdGVkIGNvbmRpdGlvbmFsczogQGNvbmRfc3RhY2siCisJCSAgICA6ICJ0b28gbWFueSBjb25kaXRpb25hbHMgY2xvc2VkIGluIGluY2x1ZGUgZmlsZSIpKQorICAgICAgaWYgIkBzYXZlZF9jb25kX3N0YWNrIiBuZSAiQGNvbmRfc3RhY2siOworfQorCisKKyMgZGVmaW5lX3N0YW5kYXJkX3ZhcmlhYmxlcyAoKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEEgaGVscGVyIGZvciByZWFkX21haW5fYW1fZmlsZSB3aGljaCBpbml0aWFsaXplcyBjb25maWd1cmUgdmFyaWFibGVzCisjIGFuZCB2YXJpYWJsZXMgZnJvbSBoZWFkZXItdmFycy5hbS4KK3N1YiBkZWZpbmVfc3RhbmRhcmRfdmFyaWFibGVzCit7CisgIG15ICRzYXZlZF9vdXRwdXRfdmFycyA9ICRvdXRwdXRfdmFyczsKKyAgbXkgKCRjb21tZW50cywgdW5kZWYsICRydWxlcykgPQorICAgIGZpbGVfY29udGVudHNfaW50ZXJuYWwgKDEsICIkbGliZGlyL2FtL2hlYWRlci12YXJzLmFtIiwKKwkJCSAgICBuZXcgQXV0b21ha2U6OkxvY2F0aW9uKTsKKworICBmb3JlYWNoIG15ICR2YXIgKHNvcnQga2V5cyAlY29uZmlndXJlX3ZhcnMpCisgICAgeworICAgICAgJmRlZmluZV9jb25maWd1cmVfdmFyaWFibGUgKCR2YXIpOworICAgIH0KKworICAkb3V0cHV0X3ZhcnMgLj0gJGNvbW1lbnRzIC4gJHJ1bGVzOworfQorCisjIFJlYWQgbWFpbiBhbSBmaWxlLgorc3ViIHJlYWRfbWFpbl9hbV9maWxlCit7CisgICAgbXkgKCRhbWZpbGUpID0gQF87CisKKyAgICAjIFRoaXMgc3VwcG9ydHMgdGhlIHN0cmFuZ2UgdmFyaWFibGUgdHJpY2tzIHdlIGFyZSBhYm91dCB0byBwbGF5LgorICAgIHByb2dfZXJyb3IgKG1hY3Jvc19kdW1wICgpIC4gInZhcmlhYmxlIGRlZmluZWQgYmVmb3JlIHJlYWRfbWFpbl9hbV9maWxlIikKKyAgICAgIGlmIChzY2FsYXIgKHZhcmlhYmxlcykgPiAwKTsKKworICAgICMgR2VuZXJhdGUgY29weXJpZ2h0IGhlYWRlciBmb3IgZ2VuZXJhdGVkIE1ha2VmaWxlLmluLgorICAgICMgV2UgZG8gZGlzY2FyZCB0aGUgb3V0cHV0IG9mIHByZWRlZmluZWQgdmFyaWFibGVzLCBoYW5kbGVkIGJlbG93LgorICAgICRvdXRwdXRfdmFycyA9ICgiIyAkaW5fZmlsZV9uYW1lIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAiCisJCSAgIC4gJFZFUlNJT04gLiAiIGZyb20gJGFtX2ZpbGVfbmFtZS5cbiIpOworICAgICRvdXRwdXRfdmFycyAuPSAnIyAnIC4gc3Vic3QgKCdjb25maWd1cmVfaW5wdXQnKSAuICJcbiI7CisgICAgJG91dHB1dF92YXJzIC49ICRnZW5fY29weXJpZ2h0OworCisgICAgIyBXZSB3YW50IHRvIHByZWRlZmluZSBhcyBtYW55IHZhcmlhYmxlcyBhcyBwb3NzaWJsZS4gIFRoaXMgbGV0cworICAgICMgdGhlIHVzZXIgc2V0IHRoZW0gd2l0aCBgKz0nIGluIE1ha2VmaWxlLmFtLgorICAgICZkZWZpbmVfc3RhbmRhcmRfdmFyaWFibGVzOworCisgICAgIyBSZWFkIHVzZXIgZmlsZSwgd2hpY2ggbWlnaHQgb3ZlcnJpZGUgc29tZSBvZiBvdXIgdmFsdWVzLgorICAgICZyZWFkX2FtX2ZpbGUgKCRhbWZpbGUsIG5ldyBBdXRvbWFrZTo6TG9jYXRpb24pOworfQorCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjICRGTEFUVEVORUQKKyMgJmZsYXR0ZW4gKCRTVFJJTkcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBGbGF0dGVuIHRoZSAkU1RSSU5HIGFuZCByZXR1cm4gdGhlIHJlc3VsdC4KK3N1YiBmbGF0dGVuCit7CisgICRfID0gc2hpZnQ7CisKKyAgcy9cXFxuLy9zb21nOworICBzL1xzKy8gL2c7CisgIHMvXiAvLzsKKyAgcy8gJC8vOworCisgIHJldHVybiAkXzsKK30KKworCisjIHRyYW5zZm9ybV90b2tlbiAoJFRPS0VOLCBcJVBBSVJTLCAkS0VZKQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgUmV0dXJuIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHRvICRLRVkgaW4gJVBBSVJTLCBhcyB1c2VkIG9uICRUT0tFTgorIyAod2hpY2ggc2hvdWxkIGJlID9LRVk/IG9yIGFueSBvZiB0aGUgc3BlY2lhbCAlJSByZXF1ZXN0cykuLgorc3ViIHRyYW5zZm9ybV90b2tlbiAoJCQkKQoreworICBteSAoJHRva2VuLCAkdHJhbnNmb3JtLCAka2V5KSA9IEBfOworICBteSAkcmVzID0gJHRyYW5zZm9ybS0+eyRrZXl9OworICBwcm9nX2Vycm9yICJVbmtub3duIGtleSBgJGtleScgaW4gYCR0b2tlbiciIHVubGVzcyBkZWZpbmVkICRyZXM7CisgIHJldHVybiAkcmVzOworfQorCisKKyMgdHJhbnNmb3JtICgkVE9LRU4sIFwlUEFJUlMpCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBJZiAoJFRPS0VOLCAkVkFMKSBpcyBpbiAlUEFJUlM6CisjICAgLSByZXBsYWNlcyAlS0VZJSB3aXRoICRWQUwsCisjICAgLSBlbmFibGVzL2Rpc2FibGVzID9LRVk/IGFuZCA/IUtFWT8sCisjICAgLSByZXBsYWNlcyAlP0tFWSUgd2l0aCBUUlVFIG9yIEZBTFNFLgorIyAgIC0gcmVwbGFjZXMgJUtFWT9JRlRSVUUlLCAlS0VZOklGRkFMU0UlLCBhbmQgJUtFWT9JRlRSVUU6SUZGQUxTRSUgd2l0aAorIyAgICAgSUZUUlVFIC8gSUZGQUxTRSwgYXMgYXBwcm9wcmlhdGUuCitzdWIgdHJhbnNmb3JtICgkJCkKK3sKKyAgbXkgKCR0b2tlbiwgJHRyYW5zZm9ybSkgPSBAXzsKKworICAjICVLRVklLgorICAjIE11c3QgYmUgYmVmb3JlIHRoZSBmb2xsb3dpbmcgcGF0dGVybiB0byBleGNsdWRlIHRoZSBjYXNlCisgICMgd2hlbiB0aGVyZSBpcyBuZWl0aGVyIElGVFJVRSBub3IgSUZGQUxTRS4KKyAgaWYgKCR0b2tlbiA9fiAvXiUoW1x3XC1dKyklJC8pCisgICAgeworICAgICAgcmV0dXJuIHRyYW5zZm9ybV90b2tlbiAoJHRva2VuLCAkdHJhbnNmb3JtLCAkMSk7CisgICAgfQorICAjICVLRVk/SUZUUlVFJSwgJUtFWTpJRkZBTFNFJSwgYW5kICVLRVk/SUZUUlVFOklGRkFMU0UlLgorICBlbHNpZiAoJHRva2VuID1+IC9eJShbXHdcLV0rKSg/Olw/KFtePzolXSspKT8oPzo6KFtePzolXSspKT8lJC8pCisgICAgeworICAgICAgcmV0dXJuIHRyYW5zZm9ybV90b2tlbiAoJHRva2VuLCAkdHJhbnNmb3JtLCAkMSkgPyAoJDIgfHwgJycpIDogKCQzIHx8ICcnKTsKKyAgICB9CisgICMgJT9LRVklLgorICBlbHNpZiAoJHRva2VuID1+IC9eJVw/KFtcd1wtXSspJSQvKQorICAgIHsKKyAgICAgIHJldHVybiB0cmFuc2Zvcm1fdG9rZW4gKCR0b2tlbiwgJHRyYW5zZm9ybSwgJDEpID8gJ1RSVUUnIDogJ0ZBTFNFJzsKKyAgICB9CisgICMgP0tFWT8gYW5kID8hS0VZPy4KKyAgZWxzaWYgKCR0b2tlbiA9fiAvXiBcPyAoIT8pIChbXHdcLV0rKSBcPyAkL3gpCisgICAgeworICAgICAgbXkgJG5lZyA9ICgkMSBlcSAnIScpID8gMSA6IDA7CisgICAgICBteSAkdmFsID0gdHJhbnNmb3JtX3Rva2VuICgkdG9rZW4sICR0cmFuc2Zvcm0sICQyKTsKKyAgICAgIHJldHVybiAoISEkdmFsID09ICRuZWcpID8gJyMjJScgOiAnJzsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBwcm9nX2Vycm9yICJVbmtub3duIHJlcXVlc3QgZm9ybWF0OiAkdG9rZW4iOworICAgIH0KK30KKworCisjIEBQQVJBR1JBUEhTCisjICZtYWtlX3BhcmFncmFwaHMgKCRNQUtFRklMRSwgWyVUUkFOU0ZPUk1dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTG9hZCBhICRNQUtFRklMRSwgYXBwbHkgdGhlICVUUkFOU0ZPUk0sIGFuZCByZXR1cm4gaXQgYXMgYSBsaXN0IG9mCisjIHBhcmFncmFwaHMuCitzdWIgbWFrZV9wYXJhZ3JhcGhzICgkJSkKK3sKKyAgbXkgKCRmaWxlLCAldHJhbnNmb3JtKSA9IEBfOworCisgICMgQ29tcGxldGUgJXRyYW5zZm9ybSB3aXRoIGdsb2JhbCBvcHRpb25zLgorICAjIE5vdGUgdGhhdCAldHJhbnNmb3JtIGdvZXMgbGFzdCwgc28gaXQgb3ZlcnJpZGVzIGdsb2JhbCBvcHRpb25zLgorICAldHJhbnNmb3JtID0gKCdDWUdOVVMnICAgICAgPT4gISEgb3B0aW9uICdjeWdudXMnLAorCQkgJ01BSU5UQUlORVItTU9ERScKKwkJID0+ICRzZWVuX21haW50X21vZGUgPyBzdWJzdCAoJ01BSU5UQUlORVJfTU9ERV9UUlVFJykgOiAnJywKKworCQkgJ1haJyAgICAgICAgICA9PiAhISBvcHRpb24gJ2Rpc3QteHonLAorCQkgJ0xaTUEnICAgICAgICA9PiAhISBvcHRpb24gJ2Rpc3QtbHptYScsCisJCSAnQlpJUDInICAgICAgID0+ICEhIG9wdGlvbiAnZGlzdC1iemlwMicsCisJCSAnQ09NUFJFU1MnICAgID0+ICEhIG9wdGlvbiAnZGlzdC10YXJaJywKKwkJICdHWklQJyAgICAgICAgPT4gICEgb3B0aW9uICduby1kaXN0LWd6aXAnLAorCQkgJ1NIQVInICAgICAgICA9PiAhISBvcHRpb24gJ2Rpc3Qtc2hhcicsCisJCSAnWklQJyAgICAgICAgID0+ICEhIG9wdGlvbiAnZGlzdC16aXAnLAorCisJCSAnSU5TVEFMTC1JTkZPJyA9PiAgISBvcHRpb24gJ25vLWluc3RhbGxpbmZvJywKKwkJICdJTlNUQUxMLU1BTicgID0+ICAhIG9wdGlvbiAnbm8taW5zdGFsbG1hbicsCisJCSAnSEFWRS1NQU5TJyAgICA9PiAhISB2YXIgKCdNQU5TJyksCisJCSAnQ0stTkVXUycgICAgICA9PiAhISBvcHRpb24gJ2NoZWNrLW5ld3MnLAorCisJCSAnU1VCRElSUycgICAgICA9PiAhISB2YXIgKCdTVUJESVJTJyksCisJCSAnVE9QRElSX1AnICAgICA9PiAkcmVsYXRpdmVfZGlyIGVxICcuJywKKworCQkgJ0JVSUxEJyAgICA9PiAoJHNlZW5fY2Fub25pY2FsID49IEFDX0NBTk9OSUNBTF9CVUlMRCksCisJCSAnSE9TVCcgICAgID0+ICgkc2Vlbl9jYW5vbmljYWwgPj0gQUNfQ0FOT05JQ0FMX0hPU1QpLAorCQkgJ1RBUkdFVCcgICA9PiAoJHNlZW5fY2Fub25pY2FsID49IEFDX0NBTk9OSUNBTF9UQVJHRVQpLAorCisJCSAnTElCVE9PTCcgICAgICA9PiAhISB2YXIgKCdMSUJUT09MJyksCisJCSAnTk9OTElCVE9PTCcgICA9PiAxLAorCQkgJ0ZJUlNUJyAgICAgICAgPT4gISAkdHJhbnNmb3JtZWRfZmlsZXN7JGZpbGV9LAorCQkldHJhbnNmb3JtKTsKKworICAkdHJhbnNmb3JtZWRfZmlsZXN7JGZpbGV9ID0gMTsKKyAgJF8gPSAkYW1fZmlsZV9jYWNoZXskZmlsZX07CisKKyAgaWYgKCEgZGVmaW5lZCAkXykKKyAgICB7CisgICAgICB2ZXJiICJyZWFkaW5nICRmaWxlIjsKKyAgICAgICMgU3dhbGxvdyB0aGUgd2hvbGUgZmlsZS4KKyAgICAgIG15ICRmY19maWxlID0gbmV3IEF1dG9tYWtlOjpYRmlsZSAiPCAkZmlsZSI7CisgICAgICBteSAkc2F2ZWRfZG9sbGFyX3NsYXNoID0gJC87CisgICAgICB1bmRlZiAkLzsKKyAgICAgICRfID0gJGZjX2ZpbGUtPmdldGxpbmU7CisgICAgICAkLyA9ICRzYXZlZF9kb2xsYXJfc2xhc2g7CisgICAgICAkZmNfZmlsZS0+Y2xvc2U7CisKKyAgICAgICMgUmVtb3ZlICMjLWNvbW1lbnRzLgorICAgICAgIyBCZXNpZGVzIHdlIGRvbid0IG5lZWQgbW9yZSB0aGFuIHR3byBjb25zZWN1dGl2ZSBuZXctbGluZXMuCisgICAgICBzLyg/OiRJR05PUkVfUEFUVEVSTnwoPzw9XG5cbilcbispLy9nb207CisKKyAgICAgICRhbV9maWxlX2NhY2hleyRmaWxlfSA9ICRfOworICAgIH0KKworICAjIFN1YnN0aXR1dGUgQXV0b21ha2UgdGVtcGxhdGUgdG9rZW5zLgorICBzLyg/OiAlIFw/PyBbXHdcLV0rICUKKyAgICAgIHwgJSBbXHdcLV0rICg/Olw/W14/OiVdKyk/ICg/OjpbXj86JV0rKT8gJQorICAgICAgfCBcPyAhPyBbXHdcLV0rIFw/CisgICAgKS90cmFuc2Zvcm0oJCYsIFwldHJhbnNmb3JtKS9nZXg7CisgICMgdHJhbnNmb3JtKCkgbWF5IGhhdmUgYWRkZWQgc29tZSAjIyUtY29tbWVudHMgdG8gc3RyaXAuCisgICMgKHdlIHVzZSBgIyMlJyBpbnN0ZWFkIG9mIGAjIycgc28gd2UgY2FuIGRpc3Rpbmd1aXNoICMjJSMjJSMjJSBmcm9tCisgICMgIyMjIyMjIyBhbmQgZG8gbm90IHJlbW92ZSB0aGUgbGF0dGVyLikKKyAgcy9eWyBcdF0qKD86IyMlKSsuKlxuLy9nbTsKKworICAjIFNwbGl0IGF0IHVuZXNjYXBlZCBuZXcgbGluZXMuCisgIG15IEBsaW5lcyA9IHNwbGl0ICgvKD88IVxcKVxuLywgJF8pOworICBteSBAcmVzOworCisgIHdoaWxlIChkZWZpbmVkICgkXyA9IHNoaWZ0IEBsaW5lcykpCisgICAgeworICAgICAgbXkgJHBhcmFncmFwaCA9ICRfOworICAgICAgIyBJZiB3ZSBhcmUgYSBydWxlLCBlYXQgYXMgbG9uZyBhcyB3ZSBzdGFydCB3aXRoIGEgdGFiLgorICAgICAgaWYgKC8kUlVMRV9QQVRURVJOL3NtbykKKwl7CisJICB3aGlsZSAoZGVmaW5lZCAoJF8gPSBzaGlmdCBAbGluZXMpICYmICRfID1+IC9eXHQvKQorCSAgICB7CisJICAgICAgJHBhcmFncmFwaCAuPSAiXG4kXyI7CisJICAgIH0KKwkgIHVuc2hpZnQgKEBsaW5lcywgJF8pOworCX0KKworICAgICAgIyBJZiB3ZSBhcmUgYSBjb21tZW50cywgZWF0IGFzIG11Y2ggY29tbWVudHMgYXMgeW91IGNhbi4KKyAgICAgIGVsc2lmICgvJENPTU1FTlRfUEFUVEVSTi9zbW8pCisJeworCSAgd2hpbGUgKGRlZmluZWQgKCRfID0gc2hpZnQgQGxpbmVzKQorCQkgJiYgJF8gPX4gLyRDT01NRU5UX1BBVFRFUk4vc21vKQorCSAgICB7CisJICAgICAgJHBhcmFncmFwaCAuPSAiXG4kXyI7CisJICAgIH0KKwkgIHVuc2hpZnQgKEBsaW5lcywgJF8pOworCX0KKworICAgICAgcHVzaCBAcmVzLCAkcGFyYWdyYXBoOworICAgIH0KKworICByZXR1cm4gQHJlczsKK30KKworCisKKyMgKCRDT01NRU5ULCAkVkFSSUFCTEVTLCAkUlVMRVMpCisjICZmaWxlX2NvbnRlbnRzX2ludGVybmFsICgkSVNfQU0sICRGSUxFLCAkV0hFUkUsIFslVFJBTlNGT1JNXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZXR1cm4gY29udGVudHMgb2YgYSBmaWxlIGZyb20gJGxpYmRpci9hbSwgYXV0b21hdGljYWxseSBza2lwcGluZworIyBtYWNyb3Mgb3IgcnVsZXMgd2hpY2ggYXJlIGFscmVhZHkga25vd24uICRJU19BTSBpZmYgdGhlIGNhbGxlciBpcworIyByZWFkaW5nIGFuIEF1dG9tYWtlIGZpbGUgKGFzIG9wcG9zZWQgdG8gdGhlIHVzZXIncyBNYWtlZmlsZS5hbSkuCitzdWIgZmlsZV9jb250ZW50c19pbnRlcm5hbCAoJCQkJSkKK3sKKyAgICBteSAoJGlzX2FtLCAkZmlsZSwgJHdoZXJlLCAldHJhbnNmb3JtKSA9IEBfOworCisgICAgJHdoZXJlLT5zZXQgKCRmaWxlKTsKKworICAgIG15ICRyZXN1bHRfdmFycyA9ICcnOworICAgIG15ICRyZXN1bHRfcnVsZXMgPSAnJzsKKyAgICBteSAkY29tbWVudCA9ICcnOworICAgIG15ICRzcGFjaW5nID0gJyc7CisKKyAgICAjIFRoZSBmb2xsb3dpbmcgZmxhZ3MgYXJlIHVzZWQgdG8gdHJhY2sgcnVsZXMgc3Bhbm5pbmcgYWNyb3NzCisgICAgIyBtdWx0aXBsZSBwYXJhZ3JhcGhzLgorICAgIG15ICRpc19ydWxlID0gMDsJCSMgMSBpZiB3ZSBhcmUgcHJvY2Vzc2luZyBhIHJ1bGUuCisgICAgbXkgJGRpc2NhcmRfcnVsZSA9IDA7CSMgMSBpZiB0aGUgY3VycmVudCBydWxlIHNob3VsZCBub3QgYmUgb3V0cHV0LgorCisgICAgIyBXZSBzYXZlIHRoZSBjb25kaXRpb25hbCBzdGFjayBvbiBlbnRyeSwgYW5kIHRoZW4gY2hlY2sgdG8gbWFrZQorICAgICMgc3VyZSBpdCBpcyB0aGUgc2FtZSBvbiBleGl0LiAgVGhpcyBsZXRzIHVzIGNvbmRpdGlvbmFsbHkgaW5jbHVkZQorICAgICMgb3RoZXIgZmlsZXMuCisgICAgbXkgQHNhdmVkX2NvbmRfc3RhY2sgPSBAY29uZF9zdGFjazsKKyAgICBteSAkY29uZCA9IG5ldyBBdXRvbWFrZTo6Q29uZGl0aW9uIChAY29uZF9zdGFjayk7CisKKyAgICBmb3JlYWNoIChtYWtlX3BhcmFncmFwaHMgKCRmaWxlLCAldHJhbnNmb3JtKSkKKyAgICB7CisJIyBGSVhNRTogbm8gbGluZSBudW1iZXIgYXZhaWxhYmxlLgorCSR3aGVyZS0+c2V0ICgkZmlsZSk7CisKKwkjIFNhbml0eSBjaGVja3MuCisJZXJyb3IgJHdoZXJlLCAiYmxhbmsgbGluZSBmb2xsb3dpbmcgdHJhaWxpbmcgYmFja3NsYXNoOlxuJF8iCisJICBpZiAvXFwkLzsKKwllcnJvciAkd2hlcmUsICJjb21tZW50IGZvbGxvd2luZyB0cmFpbGluZyBiYWNrc2xhc2g6XG4kXyIKKwkgIGlmIC9cXCMvOworCisJaWYgKC9eJC8pCisJeworCSAgICAkaXNfcnVsZSA9IDA7CisJICAgICMgU3RpY2sgZW1wdHkgbGluZSBiZWZvcmUgdGhlIGluY29taW5nIG1hY3JvIG9yIHJ1bGUuCisJICAgICRzcGFjaW5nID0gIlxuIjsKKwl9CisJZWxzaWYgKC8kQ09NTUVOVF9QQVRURVJOL21zbykKKwl7CisJICAgICRpc19ydWxlID0gMDsKKwkgICAgIyBTdGljayBjb21tZW50cyBiZWZvcmUgdGhlIGluY29taW5nIG1hY3JvIG9yIHJ1bGUuCisJICAgICRjb21tZW50ID0gIiRfXG4iOworCX0KKworCSMgSGFuZGxlIGluY2x1c2lvbiBvZiBvdGhlciBmaWxlcy4KKwllbHNpZiAoLyRJTkNMVURFX1BBVFRFUk4vbykKKwl7CisJICAgIGlmICgkY29uZCAhPSBGQUxTRSkKKwkgICAgICB7CisJCW15ICRmaWxlID0gKCRpc19hbSA/ICIkbGliZGlyL2FtLyIgOiAnJykgLiAkMTsKKwkJJHdoZXJlLT5wdXNoX2NvbnRleHQgKCJgJGZpbGUnIGluY2x1ZGVkIGZyb20gaGVyZSIpOworCQkjIE4tYXJ5IGAuPScgZmFpbHMuCisJCW15ICgkY29tLCAkdmFycywgJHJ1bGVzKQorCQkgID0gZmlsZV9jb250ZW50c19pbnRlcm5hbCAoJGlzX2FtLCAkZmlsZSwgJHdoZXJlLCAldHJhbnNmb3JtKTsKKwkJJHdoZXJlLT5wb3BfY29udGV4dDsKKwkJJGNvbW1lbnQgLj0gJGNvbTsKKwkJJHJlc3VsdF92YXJzIC49ICR2YXJzOworCQkkcmVzdWx0X3J1bGVzIC49ICRydWxlczsKKwkgICAgICB9CisJfQorCisJIyBIYW5kbGluZyB0aGUgY29uZGl0aW9uYWxzLgorCWVsc2lmICgvJElGX1BBVFRFUk4vbykKKwkgIHsKKwkgICAgJGNvbmQgPSBjb25kX3N0YWNrX2lmICgkMSwgJDIsICRmaWxlKTsKKwkgIH0KKwllbHNpZiAoLyRFTFNFX1BBVFRFUk4vbykKKwkgIHsKKwkgICAgJGNvbmQgPSBjb25kX3N0YWNrX2Vsc2UgKCQxLCAkMiwgJGZpbGUpOworCSAgfQorCWVsc2lmICgvJEVORElGX1BBVFRFUk4vbykKKwkgIHsKKwkgICAgJGNvbmQgPSBjb25kX3N0YWNrX2VuZGlmICgkMSwgJDIsICRmaWxlKTsKKwkgIH0KKworCSMgSGFuZGxpbmcgcnVsZXMuCisJZWxzaWYgKC8kUlVMRV9QQVRURVJOL21zbykKKwl7CisJICAkaXNfcnVsZSA9IDE7CisJICAkZGlzY2FyZF9ydWxlID0gMDsKKwkgICMgU2VwYXJhdGUgcmVsYXRpb25zaGlwIGZyb20gb3B0aW9uYWwgYWN0aW9uczogdGhlIGZpcnN0CisJICAjIGBuZXctbGluZSB0YWIiIG5vdCBwcmVjZWRlZCBieSBiYWNrc2xhc2ggKGNvbnRpbnVhdGlvbgorCSAgIyBsaW5lKS4KKwkgIG15ICRwYXJhZ3JhcGggPSAkXzsKKwkgIC9eKC4qPykoPzooPzwhXFwpXG4oXHQuKikpPyQvczsKKwkgIG15ICgkcmVsYXRpb25zaGlwLCAkYWN0aW9ucykgPSAoJDEsICQyIHx8ICcnKTsKKworCSAgIyBTZXBhcmF0ZSB0YXJnZXRzIGZyb20gZGVwZW5kZW5jaWVzOiB0aGUgZmlyc3QgY29sb24uCisJICAkcmVsYXRpb25zaGlwID1+IC9eKFteOl0rXFMrKSAqOiAqKC4qKSQvc29tOworCSAgbXkgKCR0YXJnZXRzLCAkZGVwZW5kZW5jaWVzKSA9ICgkMSwgJDIpOworCSAgIyBSZW1vdmUgdGhlIGVzY2FwZWQgbmV3IGxpbmVzLgorCSAgIyBJIGRvbid0IGtub3cgd2h5LCBidXQgSSBoYXZlIHRvIHVzZSBhIHRtcCAkZmxhdF9kZXBzLgorCSAgbXkgJGZsYXRfZGVwcyA9ICZmbGF0dGVuICgkZGVwZW5kZW5jaWVzKTsKKwkgIG15IEBkZXBzID0gc3BsaXQgKCcgJywgJGZsYXRfZGVwcyk7CisKKwkgIGZvcmVhY2ggKHNwbGl0ICgnICcsICR0YXJnZXRzKSkKKwkgICAgeworCSAgICAgICMgRklYTUU6IDEuIFdlIGFyZSBub3Qgcm9idXN0IHRvIHBlb3BsZSBkZWZpbmluZyBzZXZlcmFsIHRhcmdldHMKKwkgICAgICAjIGF0IG9uY2UsIG9ubHkgc29tZSBvZiB0aGVtIGJlaW5nIGluICVkZXBlbmRlbmNpZXMuICBUaGUKKwkgICAgICAjIGFjdGlvbnMgZnJvbSB0aGUgdGFyZ2V0cyBpbiAlZGVwZW5kZW5jaWVzIGFyZSB1c3VhbGx5IGdlbmVyYXRlZAorCSAgICAgICMgZnJvbSB0aGUgY29udGVudCBvZiAlYWN0aW9ucywgYnV0IGlmIHNvbWUgdGFyZ2V0cyBpbiAkdGFyZ2V0cworCSAgICAgICMgYXJlIG5vdCBpbiAlZGVwZW5kZW5jaWVzIHRoZSBFTFNFIGJyYW5jaCB3aWxsIG91dHB1dAorCSAgICAgICMgYSBydWxlIGZvciBhbGwgJHRhcmdldHMgKGkuZS4gdGhlIHRhcmdldHMgd2hpY2ggYXJlIGJvdGgKKwkgICAgICAjIGluICVkZXBlbmRlbmNpZXMgYW5kICR0YXJnZXRzIHdpbGwgaGF2ZSB0d28gcnVsZXMpLgorCisJICAgICAgIyBGSVhNRTogMi4gVGhlIGxvZ2ljIGhlcmUgaXMgbm90IGFibGUgdG8gb3V0cHV0IGEKKwkgICAgICAjIG11bHRpLXBhcmFncmFwaCBydWxlIHNldmVyYWwgdGltZSAoZS5nLiBmb3IgZWFjaCBjb25kaXRpb24KKwkgICAgICAjIGl0IGlzIGRlZmluZWQgZm9yKSBiZWNhdXNlIGl0IG9ubHkga25vd3MgdGhlIGZpcnN0IHBhcmFncmFwaC4KKworCSAgICAgICMgRklYTUU6IDMuIFdlIGFyZSBub3Qgcm9idXN0IHRvIHBlb3BsZSBkZWZpbmluZyBhIHN1YnNldAorCSAgICAgICMgb2YgYSBwcmV2aW91c2x5IGRlZmluZWQgIm11bHRpcGxlLXRhcmdldCIgcnVsZS4gIEUuZy4KKwkgICAgICAjIGBmb286JyBhZnRlciBgZm9vIGJhcjonLgorCisJICAgICAgIyBPdXRwdXQgb25seSBpZiBub3QgaW4gRkFMU0UuCisJICAgICAgaWYgKGRlZmluZWQgJGRlcGVuZGVuY2llc3skX30gJiYgJGNvbmQgIT0gRkFMU0UpCisJCXsKKwkJICAmZGVwZW5kICgkXywgQGRlcHMpOworCQkgIHJlZ2lzdGVyX2FjdGlvbiAoJF8sICRhY3Rpb25zKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgICMgRnJlZS1sYW5jZSBkZXBlbmRlbmN5LiAgT3V0cHV0IHRoZSBydWxlIGZvciBhbGwgdGhlCisJCSAgIyB0YXJnZXRzIGluc3RlYWQgb2Ygb25lIGJ5IG9uZS4KKwkJICBteSBAdW5kZWZpbmVkX2NvbmRzID0KKwkJICAgIEF1dG9tYWtlOjpSdWxlOjpkZWZpbmUgKCR0YXJnZXRzLCAkZmlsZSwKKwkJCQkJICAgICRpc19hbSA/IFJVTEVfQVVUT01BS0UgOiBSVUxFX1VTRVIsCisJCQkJCSAgICAkY29uZCwgJHdoZXJlKTsKKwkJICBmb3IgbXkgJHVuZGVmaW5lZF9jb25kIChAdW5kZWZpbmVkX2NvbmRzKQorCQkgICAgeworCQkgICAgICBteSAkY29uZHBhcmFncmFwaCA9ICRwYXJhZ3JhcGg7CisJCSAgICAgICRjb25kcGFyYWdyYXBoID1+IHMvXi8kdW5kZWZpbmVkX2NvbmQtPnN1YnN0X3N0cmluZy9nbWU7CisJCSAgICAgICRyZXN1bHRfcnVsZXMgLj0gIiRzcGFjaW5nJGNvbW1lbnQkY29uZHBhcmFncmFwaFxuIjsKKwkJICAgIH0KKwkJICBpZiAoc2NhbGFyIEB1bmRlZmluZWRfY29uZHMgPT0gMCkKKwkJICAgIHsKKwkJICAgICAgIyBSZW1lbWJlciB0byBkaXNjYXJkIG5leHQgcGFyYWdyYXBocworCQkgICAgICAjIGlmIHRoZXkgYmVsb25nIHRvIHRoaXMgcnVsZS4KKwkJICAgICAgIyAoYnV0IHNlZSBhbHNvIEZJWE1FOiAjMiBhYm92ZS4pCisJCSAgICAgICRkaXNjYXJkX3J1bGUgPSAxOworCQkgICAgfQorCQkgICRjb21tZW50ID0gJHNwYWNpbmcgPSAnJzsKKwkJICBsYXN0OworCQl9CisJICAgIH0KKwl9CisKKwllbHNpZiAoLyRBU1NJR05NRU5UX1BBVFRFUk4vbXNvKQorCXsKKwkgICAgbXkgKCR2YXIsICR0eXBlLCAkdmFsKSA9ICgkMSwgJDIsICQzKTsKKwkgICAgZXJyb3IgJHdoZXJlLCAidmFyaWFibGUgYCR2YXInIHdpdGggdHJhaWxpbmcgYmFja3NsYXNoIgorCSAgICAgIGlmIC9cXCQvOworCisJICAgICRpc19ydWxlID0gMDsKKworCSAgICBBdXRvbWFrZTo6VmFyaWFibGU6OmRlZmluZSAoJHZhciwKKwkJCQkJJGlzX2FtID8gVkFSX0FVVE9NQUtFIDogVkFSX01BS0VGSUxFLAorCQkJCQkkdHlwZSwgJGNvbmQsICR2YWwsICRjb21tZW50LCAkd2hlcmUsCisJCQkJCVZBUl9BU0lTKQorCSAgICAgIGlmICRjb25kICE9IEZBTFNFOworCisJICAgICRjb21tZW50ID0gJHNwYWNpbmcgPSAnJzsKKwl9CisJZWxzZQorCXsKKwkgICAgIyBUaGlzIGlzbid0IGFuIGVycm9yOyBpdCBpcyBwcm9iYWJseSBzb21lIHRva2VucyB3aGljaAorCSAgICAjIGNvbmZpZ3VyZSBpcyBzdXBwb3NlZCB0byByZXBsYWNlLCBzdWNoIGFzIGBAU0VULU1BS0VAJywKKwkgICAgIyBvciBzb21lIHBhcnQgb2YgYSBydWxlIGN1dCBieSBhbiBpZi9lbmRpZi4KKwkgICAgaWYgKCEgJGNvbmQtPmZhbHNlICYmICEgKCRpc19ydWxlICYmICRkaXNjYXJkX3J1bGUpKQorCSAgICAgIHsKKwkJcy9eLyRjb25kLT5zdWJzdF9zdHJpbmcvZ21lOworCQkkcmVzdWx0X3J1bGVzIC49ICIkc3BhY2luZyRjb21tZW50JF9cbiI7CisJICAgICAgfQorCSAgICAkY29tbWVudCA9ICRzcGFjaW5nID0gJyc7CisJfQorICAgIH0KKworICAgIGVycm9yICgkd2hlcmUsIEBjb25kX3N0YWNrID8KKwkgICAidW50ZXJtaW5hdGVkIGNvbmRpdGlvbmFsczogQGNvbmRfc3RhY2siIDoKKwkgICAidG9vIG1hbnkgY29uZGl0aW9uYWxzIGNsb3NlZCBpbiBpbmNsdWRlIGZpbGUiKQorICAgICAgaWYgIkBzYXZlZF9jb25kX3N0YWNrIiBuZSAiQGNvbmRfc3RhY2siOworCisgICAgcmV0dXJuICgkY29tbWVudCwgJHJlc3VsdF92YXJzLCAkcmVzdWx0X3J1bGVzKTsKK30KKworCisjICRDT05URU5UUworIyAmZmlsZV9jb250ZW50cyAoJEJBU0VOQU1FLCAkV0hFUkUsIFslVFJBTlNGT1JNXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJldHVybiBjb250ZW50cyBvZiBhIGZpbGUgZnJvbSAkbGliZGlyL2FtLCBhdXRvbWF0aWNhbGx5IHNraXBwaW5nCisjIG1hY3JvcyBvciBydWxlcyB3aGljaCBhcmUgYWxyZWFkeSBrbm93bi4KK3N1YiBmaWxlX2NvbnRlbnRzICgkJCUpCit7CisgICAgbXkgKCRiYXNlbmFtZSwgJHdoZXJlLCAldHJhbnNmb3JtKSA9IEBfOworICAgIG15ICgkY29tbWVudHMsICR2YXJpYWJsZXMsICRydWxlcykgPQorICAgICAgZmlsZV9jb250ZW50c19pbnRlcm5hbCAoMSwgIiRsaWJkaXIvYW0vJGJhc2VuYW1lLmFtIiwgJHdoZXJlLAorCQkJICAgICAgJXRyYW5zZm9ybSk7CisgICAgcmV0dXJuICIkY29tbWVudHMkdmFyaWFibGVzJHJ1bGVzIjsKK30KKworCisjIEBQUkVGSVgKKyMgJmFtX3ByaW1hcnlfcHJlZml4ZXMgKCRQUklNQVJZLCAkQ0FOX0RJU1QsIEBQUkVGSVhFUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZCBhbGwgdmFyaWFibGUgcHJlZml4ZXMgdGhhdCBhcmUgdXNlZCBmb3IgaW5zdGFsbCBkaXJlY3Rvcmllcy4gIEEKKyMgcHJlZml4IGB6YXInIHF1YWxpZmllcyBpZmY6CisjCisjICogYHphcmRpcicgaXMgYSB2YXJpYWJsZS4KKyMgKiBgemFyX1BSSU1BUlknIGlzIGEgdmFyaWFibGUuCisjCisjIEFzIGEgc2lkZSBlZmZlY3QsIGl0IGxvb2tzIGZvciBtaXNzcGVsbGluZ3MuICBJdCBpcyBhbiBlcnJvciB0byBoYXZlCisjIGEgdmFyaWFibGUgZW5kaW5nIGluIGEgInJlc2VydmVkIiBzdWZmaXggd2hvc2UgcHJlZml4IGlzIHVua25vd24sIGUuZy4KKyMgImJuaV9QUk9HUkFNUyIuICBIb3dldmVyLCB1bnVzdWFsIHByZWZpeGVzIGFyZSBhbGxvd2VkIGlmIGEgdmFyaWFibGUKKyMgb2YgdGhlIHNhbWUgbmFtZSAod2l0aCAiZGlyIiBhcHBlbmRlZCkgZXhpc3RzLiAgRm9yIGluc3RhbmNlLCBpZiB0aGUKKyMgdmFyaWFibGUgInphcmRpciIgaXMgZGVmaW5lZCwgdGhlbiAiemFyX1BST0dSQU1TIiBiZWNvbWVzIHZhbGlkLgorIyBUaGlzIGlzIHRvIHByb3ZpZGUgYSBsaXR0bGUgZXh0cmEgZmxleGliaWxpdHkgaW4gdGhvc2UgY2FzZXMgd2hpY2gKKyMgbmVlZCBpdC4KK3N1YiBhbV9wcmltYXJ5X3ByZWZpeGVzICgkJEApCit7CisgIG15ICgkcHJpbWFyeSwgJGNhbl9kaXN0LCBAcHJlZml4ZXMpID0gQF87CisKKyAgbG9jYWwgJF87CisgIG15ICV2YWxpZCA9IG1hcCB7ICRfID0+IDAgfSBAcHJlZml4ZXM7CisgICR2YWxpZHsnRVhUUkEnfSA9IDA7CisgIGZvcmVhY2ggbXkgJHZhciAodmFyaWFibGVzICRwcmltYXJ5KQorICAgIHsKKyAgICAgICMgQXV0b21ha2UgaXMgYWxsb3dlZCB0byBkZWZpbmUgdmFyaWFibGVzIHRoYXQgbG9vayBsaWtlIHByaW1hcmllcworICAgICAgIyBidXQgd2hpY2ggYXJlbid0LiAgRS5nLiBJTlNUQUxMX3NoX0RBVEEuCisgICAgICAjIEF1dG9jb25mIGNhbiBhbHNvIGRlZmluZSB2YXJpYWJsZXMgbGlrZSBJTlNUQUxMX0RBVEEsIHNvCisgICAgICAjIGlnbm9yZSBhbGwgY29uZmlndXJlIHZhcmlhYmxlcyAoYXQgbGVhc3QgdGhvc2Ugd2hpY2ggYXJlIG5vdAorICAgICAgIyByZWRlZmluZWQgaW4gTWFrZWZpbGUuYW0pLgorICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIHZhcmlhYmxlcyBhcmUgbm90CisgICAgICAjIGNvbmRpdGlvbmFsbHkgZGVmaW5lZCAob3IgZWxzZSBhZGp1c3QgdGhlIGNvbmRpdGlvbiBiZWxvdykuCisgICAgICBteSAkZGVmID0gJHZhci0+ZGVmIChUUlVFKTsKKyAgICAgIG5leHQgaWYgJGRlZiAmJiAkZGVmLT5vd25lciAhPSBWQVJfTUFLRUZJTEU7CisKKyAgICAgIG15ICR2YXJuYW1lID0gJHZhci0+bmFtZTsKKworICAgICAgaWYgKCR2YXJuYW1lID1+IC9eKG5vYmFzZV8pPyhkaXN0X3xub2Rpc3RfKT8oLiopX1tbOmFsbnVtOl1dKyQvKQorCXsKKwkgIG15ICgkYmFzZSwgJGRpc3QsICRYKSA9ICgkMSB8fCAnJywgJDIgfHwgJycsICQzIHx8ICcnKTsKKwkgIGlmICgkZGlzdCBuZSAnJyAmJiAhICRjYW5fZGlzdCkKKwkgICAgeworCSAgICAgIGVycl92YXIgKCR2YXIsCisJCSAgICAgICAiaW52YWxpZCB2YXJpYWJsZSBgJHZhcm5hbWUnOiBgZGlzdCcgaXMgZm9yYmlkZGVuIik7CisJICAgIH0KKwkgICMgU3RhbmRhcmQgZGlyZWN0b3JpZXMgbXVzdCBiZSBleHBsaWNpdGx5IGFsbG93ZWQuCisJICBlbHNpZiAoISBkZWZpbmVkICR2YWxpZHskWH0gJiYgZXhpc3RzICRzdGFuZGFyZF9wcmVmaXh7JFh9KQorCSAgICB7CisJICAgICAgZXJyX3ZhciAoJHZhciwKKwkJICAgICAgICJgJHtYfWRpcicgaXMgbm90IGEgbGVnaXRpbWF0ZSBkaXJlY3RvcnkgIiAuCisJCSAgICAgICAiZm9yIGAkcHJpbWFyeSciKTsKKwkgICAgfQorCSAgIyBBIG5vdCBleHBsaWNpdGx5IHZhbGlkIGRpcmVjdG9yeSBpcyBhbGxvd2VkIGlmIFhkaXIgaXMgZGVmaW5lZC4KKwkgIGVsc2lmICghIGRlZmluZWQgJHZhbGlkeyRYfSAmJgorCQkgJHZhci0+cmVxdWlyZXNfdmFyaWFibGVzICgiYCR2YXJuYW1lJyBpcyB1c2VkIiwgIiR7WH1kaXIiKSkKKwkgICAgeworCSAgICAgICMgTm90aGluZyB0byBkby4gIEFueSBlcnJvciBtZXNzYWdlIGhhcyBiZWVuIG91dHB1dAorCSAgICAgICMgYnkgJHZhci0+cmVxdWlyZXNfdmFyaWFibGVzLgorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAjIEVuc3VyZSBhbGwgZXh0ZW5kZWQgcHJlZml4ZXMgYXJlIGFjdHVhbGx5IHVzZWQuCisJICAgICAgJHZhbGlkeyIkYmFzZSRkaXN0JFgifSA9IDE7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgcHJvZ19lcnJvciAidW5leHBlY3RlZCB2YXJpYWJsZSBuYW1lOiAkdmFybmFtZSI7CisJfQorICAgIH0KKworICAjIFJldHVybiBvbmx5IHRob3NlIHdoaWNoIGFyZSBhY3R1YWxseSBkZWZpbmVkLgorICByZXR1cm4gc29ydCBncmVwIHsgdmFyICgkXyAuICdfJyAuICRwcmltYXJ5KSB9IGtleXMgJXZhbGlkOworfQorCisKKyMgSGFuZGxlIGB3aGVyZV9IT1cnIHZhcmlhYmxlIG1hZ2ljLiAgRG9lcyBhbGwgbG9va3VwcywgZ2VuZXJhdGVzCisjIGluc3RhbGwgY29kZSwgYW5kIHBvc3NpYmx5IGdlbmVyYXRlcyBjb2RlIHRvIGRlZmluZSB0aGUgcHJpbWFyeQorIyB2YXJpYWJsZS4gIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgLmFtIGZpbGUgdG8gbXVuZ2UsCisjIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIHByaW1hcnkgdmFyaWFibGUgKGUuZy4gSEVBREVSUyksIGFuZCBhbGwKKyMgc3Vic2VxdWVudCBhcmd1bWVudHMgYXJlIHBvc3NpYmxlIGluc3RhbGxhdGlvbiBsb2NhdGlvbnMuCisjCisjIFJldHVybnMgbGlzdCBvZiBbJGxvY2F0aW9uLCAkdmFsdWVdIHBhaXJzLCB3aGVyZQorIyAkdmFsdWUncyBhcmUgdGhlIHZhbHVlcyBpbiBhbGwgd2hlcmVfSE9XIHZhcmlhYmxlLCBhbmQgJGxvY2F0aW9uCisjIHRoZXJlIGFzc29jaWF0ZWQgbG9jYXRpb24gKHRoZSBwbGFjZSBoZXJlIHRoZWlyIHBhcmVudCB2YXJpYWJsZXMgd2VyZQorIyBkZWZpbmVkKS4KKyMKKyMgRklYTUU6IHRoaXMgc2hvdWxkIGJlIHJld3JpdHRlbiB0byBiZSBjbGVhbmVyLiAgSXQgc2hvdWxkIGJlIGJyb2tlbgorIyB1cCBpbnRvIG11bHRpcGxlIGZ1bmN0aW9ucy4KKyMKKyMgVXNhZ2UgaXM6IGFtX2luc3RhbGxfdmFyIChPUFRJT04uLi4sIGZpbGUsIEhPVywgd2hlcmUuLi4pCitzdWIgYW1faW5zdGFsbF92YXIKK3sKKyAgbXkgKEBhcmdzKSA9IEBfOworCisgIG15ICRkb19yZXF1aXJlID0gMTsKKyAgbXkgJGNhbl9kaXN0ID0gMDsKKyAgbXkgJGRlZmF1bHRfZGlzdCA9IDA7CisgIHdoaWxlIChAYXJncykKKyAgICB7CisgICAgICBpZiAoJGFyZ3NbMF0gZXEgJy1ub2V4dHJhJykKKwl7CisJICAkZG9fcmVxdWlyZSA9IDA7CisJfQorICAgICAgZWxzaWYgKCRhcmdzWzBdIGVxICctY2FuZGlzdCcpCisJeworCSAgJGNhbl9kaXN0ID0gMTsKKwl9CisgICAgICBlbHNpZiAoJGFyZ3NbMF0gZXEgJy1kZWZhdWx0ZGlzdCcpCisJeworCSAgJGRlZmF1bHRfZGlzdCA9IDE7CisJICAkY2FuX2Rpc3QgPSAxOworCX0KKyAgICAgIGVsc2lmICgkYXJnc1swXSAhfiAvXi0vKQorCXsKKwkgIGxhc3Q7CisJfQorICAgICAgc2hpZnQgKEBhcmdzKTsKKyAgICB9CisKKyAgbXkgKCRmaWxlLCAkcHJpbWFyeSwgQHByZWZpeCkgPSBAYXJnczsKKworICAjIE5vdyB0aGF0IGNvbmZpZ3VyZSBzdWJzdGl0dXRpb25zIGFyZSBhbGxvd2VkIGluIHdoZXJlX0hPVworICAjIHZhcmlhYmxlcywgaXQgaXMgYW4gZXJyb3IgdG8gYWN0dWFsbHkgZGVmaW5lIHRoZSBwcmltYXJ5LiAgV2UKKyAgIyBhbGxvdyBgSkFWQScsIGFzIGl0IGlzIGN1c3RvbWFyaWx5IHVzZWQgdG8gbWVhbiB0aGUgSmF2YQorICAjIGludGVycHJldGVyLiAgVGhpcyBpcyBidXQgb25lIG9mIHNldmVyYWwgSmF2YSBoYWNrcy4gIFNpbWlsYXJseSwKKyAgIyBgUFlUSE9OJyBpcyBjdXN0b21hcmlseSB1c2VkIHRvIG1lYW4gdGhlIFB5dGhvbiBpbnRlcnByZXRlci4KKyAgcmVqZWN0X3ZhciAkcHJpbWFyeSwgImAkcHJpbWFyeScgaXMgYW4gYW5hY2hyb25pc20iCisgICAgdW5sZXNzICRwcmltYXJ5IGVxICdKQVZBJyB8fCAkcHJpbWFyeSBlcSAnUFlUSE9OJzsKKworICAjIEdldCB0aGUgcHJlZml4ZXMgd2hpY2ggYXJlIHZhbGlkIGFuZCBhY3R1YWxseSB1c2VkLgorICBAcHJlZml4ID0gYW1fcHJpbWFyeV9wcmVmaXhlcyAoJHByaW1hcnksICRjYW5fZGlzdCwgQHByZWZpeCk7CisKKyAgIyBJZiBhIHByaW1hcnkgaW5jbHVkZXMgYSBjb25maWd1cmUgc3Vic3RpdHV0aW9uLCB0aGVuIHRoZSBFWFRSQV8KKyAgIyBmb3JtIGlzIHJlcXVpcmVkLiAgT3RoZXJ3aXNlIHdlIGNhbid0IHByb3Blcmx5IGRvIG91ciBqb2IuCisgIG15ICRyZXF1aXJlX2V4dHJhOworCisgIG15IEB1c2VkID0gKCk7CisgIG15IEByZXN1bHQgPSAoKTsKKworICBmb3JlYWNoIG15ICRYIChAcHJlZml4KQorICAgIHsKKyAgICAgIG15ICRub2Rpcl9uYW1lID0gJFg7CisgICAgICBteSAkb25lX25hbWUgPSAkWCAuICdfJyAuICRwcmltYXJ5OworICAgICAgbXkgJG9uZV92YXIgPSB2YXIgJG9uZV9uYW1lOworCisgICAgICBteSAkc3RyaXBfc3ViZGlyID0gMTsKKyAgICAgICMgSWYgc3ViZGlyIHByZWZpeCBzaG91bGQgYmUgcHJlc2VydmVkLCBkbyBzby4KKyAgICAgIGlmICgkbm9kaXJfbmFtZSA9fiAvXm5vYmFzZV8vKQorCXsKKwkgICRzdHJpcF9zdWJkaXIgPSAwOworCSAgJG5vZGlyX25hbWUgPX4gcy9ebm9iYXNlXy8vOworCX0KKworICAgICAgIyBJZiBmaWxlcyBzaG91bGQgYmUgZGlzdHJpYnV0ZWQsIGRvIHNvLgorICAgICAgbXkgJGRpc3RfcCA9IDA7CisgICAgICBpZiAoJGNhbl9kaXN0KQorCXsKKwkgICRkaXN0X3AgPSAoKCRkZWZhdWx0X2Rpc3QgJiYgJG5vZGlyX25hbWUgIX4gL15ub2Rpc3RfLykKKwkJICAgICB8fCAoISAkZGVmYXVsdF9kaXN0ICYmICRub2Rpcl9uYW1lID1+IC9eZGlzdF8vKSk7CisJICAkbm9kaXJfbmFtZSA9fiBzL14oZGlzdHxub2Rpc3QpXy8vOworCX0KKworCisgICAgICAjIFVzZSB0aGUgbG9jYXRpb24gb2YgdGhlIGN1cnJlbnRseSBwcm9jZXNzZWQgdmFyaWFibGUuCisgICAgICAjIFdlIGFyZSBub3QgcHJvY2Vzc2luZyBhIHBhcnRpY3VsYXIgY29uZGl0aW9uLCBzbyBwaWNrIHRoZSBmaXJzdAorICAgICAgIyBhdmFpbGFibGUuCisgICAgICBteSAkdG1wY29uZCA9ICRvbmVfdmFyLT5jb25kaXRpb25zLT5vbmVfY29uZDsKKyAgICAgIG15ICR3aGVyZSA9ICRvbmVfdmFyLT5yZGVmICgkdG1wY29uZCktPmxvY2F0aW9uLT5jbG9uZTsKKworICAgICAgIyBBcHBlbmQgYWN0dWFsIGNvbnRlbnRzIG9mIHdoZXJlX1BSSU1BUlkgdmFyaWFibGUgdG8KKyAgICAgICMgQHJlc3VsdCwgc2tpcHBpbmcgQHN1YnN0aXR1dGlvbnNALgorICAgICAgZm9yZWFjaCBteSAkbG9jdmFscyAoJG9uZV92YXItPnZhbHVlX2FzX2xpc3RfcmVjdXJzaXZlIChsb2NhdGlvbiA9PiAxKSkKKwl7CisJICBteSAoJGxvYywgJHZhbHVlKSA9IEAkbG9jdmFsczsKKwkgICMgU2tpcCBjb25maWd1cmUgc3Vic3RpdHV0aW9ucy4KKwkgIGlmICgkdmFsdWUgPX4gL15cQC4qXEAkLykKKwkgICAgeworCSAgICAgIGlmICgkbm9kaXJfbmFtZSBlcSAnRVhUUkEnKQorCQl7CisJCSAgZXJyb3IgKCR3aGVyZSwKKwkJCSAiYCRvbmVfbmFtZScgY29udGFpbnMgY29uZmlndXJlIHN1YnN0aXR1dGlvbiwgIgorCQkJIC4gImJ1dCBzaG91bGRuJ3QiKTsKKwkJfQorCSAgICAgICMgQ2hlY2sgaGVyZSB0byBtYWtlIHN1cmUgdmFyaWFibGVzIGRlZmluZWQgaW4KKwkgICAgICAjIGNvbmZpZ3VyZS5hYyBkbyBub3QgaW1wbHkgdGhhdCBFWFRSQV9QUklNQVJZCisJICAgICAgIyBtdXN0IGJlIGRlZmluZWQuCisJICAgICAgZWxzaWYgKCEgZGVmaW5lZCAkY29uZmlndXJlX3ZhcnN7JG9uZV9uYW1lfSkKKwkJeworCQkgICRyZXF1aXJlX2V4dHJhID0gJG9uZV9uYW1lCisJCSAgICBpZiAkZG9fcmVxdWlyZTsKKwkJfQorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAjIFN0cmlwIGFueSAkKEVYRUVYVCkgc3VmZml4IHRoZSB1c2VyIG1pZ2h0IGhhdmUgYWRkZWQsIG9yIHRoaXMKKwkgICAgICAjIHdpbGwgY29uZnVzZSAmaGFuZGxlX3NvdXJjZV90cmFuc2Zvcm0gYW5kICZjaGVja19jYW5vbmljYWxfc3BlbGxpbmcuCisJICAgICAgIyBXZSdsbCBhZGQgJChFWEVFWFQpIGJhY2sgbGF0ZXIgYW55d2F5LgorCSAgICAgICMgRG8gaXQgaGVyZSByYXRoZXIgdGhhbiBpbiBoYW5kbGVfcHJvZ3JhbXMgc28gdGhlIHVuaXF1aWZ5aW5nIGF0IHRoZQorCSAgICAgICMgZW5kIG9mIHRoaXMgZnVuY3Rpb24gd29ya3MuCisJICAgICAgJHskbG9jdmFsc31bMV0gPX4gcy9cJFwoRVhFRVhUXCkkLy8KKwkgICAgICAgIGlmICRwcmltYXJ5IGVxICdQUk9HUkFNUyc7CisKKwkgICAgICBwdXNoIChAcmVzdWx0LCAkbG9jdmFscyk7CisJICAgIH0KKwl9CisgICAgICAjIEEgYmxhdGFudCBoYWNrOiB3ZSByZXdyaXRlIGVhY2ggX1BST0dSQU1TIHByaW1hcnkgdG8gaW5jbHVkZQorICAgICAgIyBFWEVFWFQuCisgICAgICBhcHBlbmRfZXhlZXh0IHsgMSB9ICRvbmVfbmFtZQorCWlmICRwcmltYXJ5IGVxICdQUk9HUkFNUyc7CisgICAgICAjICJFWFRSQSIgc2hvdWxkbid0IGJlIHVzZWQgd2hlbiBnZW5lcmF0aW5nIGNsZWFuIHRhcmdldHMsCisgICAgICAjIGFsbCwgb3IgaW5zdGFsbCB0YXJnZXRzLiAgV2UgdXNlZCB0byB3YXJuIGlmIEVYVFJBX0ZPTyB3YXMKKyAgICAgICMgZGVmaW5lZCB1c2VsZXNzbHksIGJ1dCB0aGlzIHdhcyBhbm5veWluZy4KKyAgICAgIG5leHQKKwlpZiAkbm9kaXJfbmFtZSBlcSAnRVhUUkEnOworCisgICAgICBpZiAoJG5vZGlyX25hbWUgZXEgJ2NoZWNrJykKKwl7CisJICBwdXNoIChAY2hlY2ssICckKCcgLiAkb25lX25hbWUgLiAnKScpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBwdXNoIChAdXNlZCwgJyQoJyAuICRvbmVfbmFtZSAuICcpJyk7CisJfQorCisgICAgICAjIElzIHRoaXMgdG8gYmUgaW5zdGFsbGVkPworICAgICAgbXkgJGluc3RhbGxfcCA9ICRub2Rpcl9uYW1lIG5lICdub2luc3QnICYmICRub2Rpcl9uYW1lIG5lICdjaGVjayc7CisKKyAgICAgICMgSWYgc28sIHdpdGggaW5zdGFsbC1leGVjPyAob3IgaW5zdGFsbC1kYXRhPykuCisgICAgICBteSAkZXhlY19wID0gKCRub2Rpcl9uYW1lID1+IC8kRVhFQ19ESVJfUEFUVEVSTi9vKTsKKworICAgICAgbXkgJGNoZWNrX29wdGlvbnNfcCA9ICRpbnN0YWxsX3AgJiYgISEgb3B0aW9uICdzdGQtb3B0aW9ucyc7CisKKyAgICAgICMgVXNlIHRoZSBsb2NhdGlvbiBvZiB0aGUgY3VycmVudGx5IHByb2Nlc3NlZCB2YXJpYWJsZSBhcyBjb250ZXh0LgorICAgICAgJHdoZXJlLT5wdXNoX2NvbnRleHQgKCJ3aGlsZSBwcm9jZXNzaW5nIGAkb25lX25hbWUnIik7CisKKyAgICAgICMgVGhlIHZhcmlhYmxlIGNvbnRhaW5pbmcgYWxsIGZpbGVzIHRvIGRpc3RyaWJ1dGUuCisgICAgICBteSAkZGlzdHZhciA9ICJcJCgkb25lX25hbWUpIjsKKyAgICAgICRkaXN0dmFyID0gc2hhZG93X3VuY29uZGl0aW9uYWxseSAoJG9uZV9uYW1lLCAkd2hlcmUpCisJaWYgKCRkaXN0X3AgJiYgJG9uZV92YXItPmhhc19jb25kaXRpb25hbF9jb250ZW50cyk7CisKKyAgICAgICMgU2luZ3VsYXIgZm9ybSBvZiAkUFJJTUFSWS4KKyAgICAgIChteSAkb25lX3ByaW1hcnkgPSAkcHJpbWFyeSkgPX4gcy9TJC8vOworICAgICAgJG91dHB1dF9ydWxlcyAuPSAmZmlsZV9jb250ZW50cyAoJGZpbGUsICR3aGVyZSwKKwkJCQkgICAgICAgUFJJTUFSWSAgICAgPT4gJHByaW1hcnksCisJCQkJICAgICAgIE9ORV9QUklNQVJZID0+ICRvbmVfcHJpbWFyeSwKKwkJCQkgICAgICAgRElSICAgICAgICAgPT4gJFgsCisJCQkJICAgICAgIE5ESVIgICAgICAgID0+ICRub2Rpcl9uYW1lLAorCQkJCSAgICAgICBCQVNFICAgICAgICA9PiAkc3RyaXBfc3ViZGlyLAorCisJCQkJICAgICAgIEVYRUMgICAgICA9PiAkZXhlY19wLAorCQkJCSAgICAgICBJTlNUQUxMICAgPT4gJGluc3RhbGxfcCwKKwkJCQkgICAgICAgRElTVCAgICAgID0+ICRkaXN0X3AsCisJCQkJICAgICAgIERJU1RWQVIgICA9PiAkZGlzdHZhciwKKwkJCQkgICAgICAgJ0NLLU9QVFMnID0+ICRjaGVja19vcHRpb25zX3ApOworICAgIH0KKworICAjIFRoZSBKQVZBIHZhcmlhYmxlIGlzIHVzZWQgYXMgdGhlIG5hbWUgb2YgdGhlIEphdmEgaW50ZXJwcmV0ZXIuCisgICMgVGhlIFBZVEhPTiB2YXJpYWJsZSBpcyB1c2VkIGFzIHRoZSBuYW1lIG9mIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIuCisgIGlmIChAdXNlZCAmJiAkcHJpbWFyeSBuZSAnSkFWQScgJiYgJHByaW1hcnkgbmUgJ1BZVEhPTicpCisgICAgeworICAgICAgIyBEZWZpbmUgaXQuCisgICAgICBkZWZpbmVfcHJldHR5X3ZhcmlhYmxlICgkcHJpbWFyeSwgVFJVRSwgSU5URVJOQUwsIEB1c2VkKTsKKyAgICAgICRvdXRwdXRfdmFycyAuPSAiXG4iOworICAgIH0KKworICBlcnJfdmFyICgkcmVxdWlyZV9leHRyYSwKKwkgICAiYCRyZXF1aXJlX2V4dHJhJyBjb250YWlucyBjb25maWd1cmUgc3Vic3RpdHV0aW9uLFxuIgorCSAgIC4gImJ1dCBgRVhUUkFfJHByaW1hcnknIG5vdCBkZWZpbmVkIikKKyAgICBpZiAoJHJlcXVpcmVfZXh0cmEgJiYgISB2YXIgKCdFWFRSQV8nIC4gJHByaW1hcnkpKTsKKworICAjIFB1c2ggaGVyZSBiZWNhdXNlIFBSSU1BUlkgbWlnaHQgYmUgY29uZmlndXJlIHRpbWUgZGV0ZXJtaW5lZC4KKyAgcHVzaCAoQGFsbCwgJyQoJyAuICRwcmltYXJ5IC4gJyknKQorICAgIGlmIEB1c2VkICYmICRwcmltYXJ5IG5lICdKQVZBJyAmJiAkcHJpbWFyeSBuZSAnUFlUSE9OJzsKKworICAjIE1ha2UgdGhlIHJlc3VsdCB1bmlxdWUuICBUaGlzIGxldHMgdGhlIHVzZXIgdXNlIGNvbmRpdGlvbmFscyBpbgorICAjIGEgbmF0dXJhbCB3YXksIGJ1dCBzdGlsbCBsZXRzIHVzIHByb2dyYW0gbGF6aWx5IC0tIHdlIGRvbid0IGhhdmUKKyAgIyB0byB3b3JyeSBhYm91dCBoYW5kbGluZyBhIHBhcnRpY3VsYXIgb2JqZWN0IG1vcmUgdGhhbiBvbmNlLgorICAjIFdlIHdpbGwga2VlcCBvbmx5IG9uZSBsb2NhdGlvbiBwZXIgb2JqZWN0LgorICBteSAlcmVzdWx0ID0gKCk7CisgIGZvciBteSAkcGFpciAoQHJlc3VsdCkKKyAgICB7CisgICAgICBteSAoJGxvYywgJHZhbCkgPSBAJHBhaXI7CisgICAgICAkcmVzdWx0eyR2YWx9ID0gJGxvYzsKKyAgICB9CisgIG15IEBsID0gc29ydCBrZXlzICVyZXN1bHQ7CisgIHJldHVybiBtYXAgeyBbJHJlc3VsdHskX30tPmNsb25lLCAkX10gfSBAbDsKK30KKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgRWFjaCBrZXkgaW4gdGhpcyBoYXNoIGlzIHRoZSBuYW1lIG9mIGEgZGlyZWN0b3J5IGhvbGRpbmcgYQorIyBNYWtlZmlsZS5pbi4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgbG9jYWwgdG8gYGlzX21ha2VfZGlyJy4KK215ICVtYWtlX2RpcnMgPSAoKTsKK215ICRtYWtlX2RpcnNfc2V0ID0gMDsKKworc3ViIGlzX21ha2VfZGlyCit7CisgICAgbXkgKCRkaXIpID0gQF87CisgICAgaWYgKCEgJG1ha2VfZGlyc19zZXQpCisgICAgeworCWZvcmVhY2ggbXkgJGl0ZXIgKEBjb25maWd1cmVfaW5wdXRfZmlsZXMpCisJeworCSAgICAkbWFrZV9kaXJze2Rpcm5hbWUgKCRpdGVyKX0gPSAxOworCX0KKwkjIFdlIGFsc28gd2FudCB0byBub3RpY2UgTWFrZWZpbGUuaW4ncy4KKwlmb3JlYWNoIG15ICRpdGVyIChAb3RoZXJfaW5wdXRfZmlsZXMpCisJeworCSAgICBpZiAoJGl0ZXIgPX4gL01ha2VmaWxlXC5pbiQvKQorCSAgICB7CisJCSRtYWtlX2RpcnN7ZGlybmFtZSAoJGl0ZXIpfSA9IDE7CisJICAgIH0KKwl9CisJJG1ha2VfZGlyc19zZXQgPSAxOworICAgIH0KKyAgICByZXR1cm4gZGVmaW5lZCAkbWFrZV9kaXJzeyRkaXJ9OworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgRmluZCB0aGUgYXV4IGRpci4gIFRoaXMgc2hvdWxkIG1hdGNoIHRoZSBhbGdvcml0aG0gdXNlZCBieQorIyAuL2NvbmZpZ3VyZS4gKFNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiBmb3IgZm9yCisjIEFDX0NPTkZJR19BVVhfRElSLikKK3N1YiBsb2NhdGVfYXV4X2RpciAoKQoreworICBpZiAoISAkY29uZmlnX2F1eF9kaXJfc2V0X2luX2NvbmZpZ3VyZV9hYykKKyAgICB7CisgICAgICAjIFRoZSBkZWZhdWx0IGF1eGlsaWFyeSBkaXJlY3RvcnkgaXMgdGhlIGZpcnN0CisgICAgICAjIG9mIC4sIC4uLCBvciAuLi8uLiB0aGF0IGNvbnRhaW5zIGluc3RhbGwtc2guCisgICAgICAjIEFzc3VtZSAuIGlmIGluc3RhbGwtc2ggZG9lc24ndCBleGlzdCB5ZXQuCisgICAgICBmb3IgbXkgJGRpciAocXcgKC4gLi4gLi4vLi4pKQorCXsKKwkgIGlmICgtZiAiJGRpci9pbnN0YWxsLXNoIikKKwkgICAgeworCSAgICAgICRjb25maWdfYXV4X2RpciA9ICRkaXI7CisJICAgICAgbGFzdDsKKwkgICAgfQorCX0KKyAgICAgICRjb25maWdfYXV4X2RpciA9ICcuJyB1bmxlc3MgJGNvbmZpZ19hdXhfZGlyOworICAgIH0KKyAgIyBBdm9pZCB1bnNpZ2h0bHkgJy8uJ3MuCisgICRhbV9jb25maWdfYXV4X2RpciA9CisgICAgJyQodG9wX3NyY2RpciknIC4gKCRjb25maWdfYXV4X2RpciBlcSAnLicgPyAiIiA6ICIvJGNvbmZpZ19hdXhfZGlyIik7CisgICRhbV9jb25maWdfYXV4X2RpciA9fiBzLC8qJCwsOworfQorCisKKyMgJm1heWJlX3B1c2hfcmVxdWlyZWRfZmlsZSAoJERJUiwgJEZJTEUsICRGVUxMRklMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VlIGlmIHdlIHdhbnQgdG8gcHVzaCB0aGlzIGZpbGUgb250byBkaXN0X2NvbW1vbi4gIFRoaXMgZnVuY3Rpb24KKyMgZW5jb2RlcyB0aGUgcnVsZXMgZm9yIGRlY2lkaW5nIHdoZW4gdG8gZG8gc28uCitzdWIgbWF5YmVfcHVzaF9yZXF1aXJlZF9maWxlCit7CisgIG15ICgkZGlyLCAkZmlsZSwgJGZ1bGxmaWxlKSA9IEBfOworCisgIGlmICgkZGlyIGVxICRyZWxhdGl2ZV9kaXIpCisgICAgeworICAgICAgcHVzaF9kaXN0X2NvbW1vbiAoJGZpbGUpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICBlbHNpZiAoJHJlbGF0aXZlX2RpciBlcSAnLicgJiYgISAmaXNfbWFrZV9kaXIgKCRkaXIpKQorICAgIHsKKyAgICAgICMgSWYgd2UgYXJlIGRvaW5nIHRoZSB0b3Btb3N0IGRpcmVjdG9yeSwgYW5kIHRoZSBmaWxlIGlzIGluIGEKKyAgICAgICMgc3ViZGlyIHdoaWNoIGRvZXMgbm90IGhhdmUgYSBNYWtlZmlsZSwgdGhlbiB3ZSBkaXN0cmlidXRlIGl0CisgICAgICAjIGhlcmUuCisKKyAgICAgICMgSWYgYSByZXF1aXJlZCBmaWxlIGlzIGFib3ZlIHRoZSBzb3VyY2UgdHJlZSwgaXQgaXMgaW1wb3J0YW50CisgICAgICAjIHRvIHByZWZpeCBpdCB3aXRoIGAkKHNyY2RpciknIHNvIHRoYXQgbm8gVlBBVEggc2VhcmNoIGlzCisgICAgICAjIHBlcmZvcm1lZC4gIE90aGVyd2lzZSBwcm9ibGVtcyBvY2N1ciB3aXRoIE1ha2UgaW1wbGVtZW50YXRpb25zCisgICAgICAjIHRoYXQgcmV3cml0ZSBhbmQgc2ltcGxpZnkgcnVsZXMgd2hvc2UgZGVwZW5kZW5jaWVzIGFyZSBmb3VuZCBpbiBhCisgICAgICAjIFZQQVRIIGxvY2F0aW9uLiAgSGVyZSBpcyBhbiBleGFtcGxlIHdpdGggT1NGMS9UcnU2NCBNYWtlLgorICAgICAgIworICAgICAgIyAgICUgY2F0IE1ha2VmaWxlCisgICAgICAjICAgVlBBVEggPSBzdWIKKyAgICAgICMgICBkaXN0ZGlyOiAuLi9hCisgICAgICAjCSAgICAgICAgICBlY2hvIC4uL2EKKyAgICAgICMgICAlIGxzCisgICAgICAjICAgTWFrZWZpbGUgYQorICAgICAgIyAgICUgbWFrZQorICAgICAgIyAgIGVjaG8gYQorICAgICAgIyAgIGEKKyAgICAgICMKKyAgICAgICMgRGVwZW5kZW5jeSBgLi4vYScgd2FzIGZvdW5kIGluIGBzdWIvLi4vYScsIGJ1dCB0aGlzIG1ha2UKKyAgICAgICMgaW1wbGVtZW50YXRpb24gc2ltcGxpZmllZCBpdCBhcyBgYScuICAoTm90ZSB0aGF0IHRoZSBzdWIvCisgICAgICAjIGRpcmVjdG9yeSBkb2VzIG5vdCBldmVuIGV4aXN0LikKKyAgICAgICMKKyAgICAgICMgVGhpcyBraW5kIG9mIFZQQVRIIHJld3JpdGluZyBzZWVtcyBoYXJkIHRvIGNhbmNlbC4gIFRoZQorICAgICAgIyBkaXN0ZGlyLmFtIGhhY2sgYWdhaW5zdCBWUEFUSCByZXdyaXRpbmcgd29ya3Mgb25seSB3aGVuIG5vCisgICAgICAjIHNpbXBsaWZpY2F0aW9uIGlzIGRvbmUsIGkuZS4sIGZvciBkZXBlbmRlbmNpZXMgd2hpY2ggYXJlIGluCisgICAgICAjIHN1YmRpcmVjdG9yaWVzLCBub3QgaW4gZW5jbG9zaW5nIGRpcmVjdG9yaWVzLiAgSGVuY2UsIGluCisgICAgICAjIHRoZSBsYXR0ZXIgY2FzZSB3ZSB1c2UgYSBmdWxsIHBhdGggdG8gbWFrZSBzdXJlIG5vIFZQQVRICisgICAgICAjIHNlYXJjaCBvY2N1cnMuCisgICAgICAkZnVsbGZpbGUgPSAnJChzcmNkaXIpLycgLiAkZnVsbGZpbGUKKwlpZiAkZGlyID1+IG0sXlwuXC4oPzokfC8pLDsKKworICAgICAgcHVzaF9kaXN0X2NvbW1vbiAoJGZ1bGxmaWxlKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKKworIyBJZiBhIGZpbGUgbmFtZSBhcHBlYXJzIGFzIGEga2V5IGluIHRoaXMgaGFzaCwgdGhlbiBpdCBoYXMgYWxyZWFkeQorIyBiZWVuIGNoZWNrZWQgZm9yLiAgVGhpcyBhbGxvd3MgdXMgbm90IHRvIHJlcG9ydCB0aGUgc2FtZSBlcnJvciBtb3JlCisjIHRoYW4gb25jZS4KK215ICVyZXF1aXJlZF9maWxlX25vdF9mb3VuZCA9ICgpOworCisjICZyZXF1aXJlX2ZpbGVfaW50ZXJuYWwgKCRXSEVSRSwgJE1ZU1RSSUNULCAkRElSRUNUT1JZLCBARklMRVMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFZlcmlmeSB0aGF0IHRoZSBmaWxlIG11c3QgZXhpc3QgaW4gJERJUkVDVE9SWSwgb3IgaW5zdGFsbCBpdC4KKyMgJE1ZU1RSSUNUIGlzIHRoZSBzdHJpY3RuZXNzIGxldmVsIGF0IHdoaWNoIHRoaXMgZmlsZSBiZWNvbWVzIHJlcXVpcmVkLgorc3ViIHJlcXVpcmVfZmlsZV9pbnRlcm5hbCAoJCQkQCkKK3sKKyAgbXkgKCR3aGVyZSwgJG15c3RyaWN0LCAkZGlyLCBAZmlsZXMpID0gQF87CisKKyAgZm9yZWFjaCBteSAkZmlsZSAoQGZpbGVzKQorICAgIHsKKyAgICAgIG15ICRmdWxsZmlsZSA9ICIkZGlyLyRmaWxlIjsKKyAgICAgIG15ICRmb3VuZF9pdCA9IDA7CisgICAgICBteSAkZGFuZ2xpbmdfc3ltID0gMDsKKworICAgICAgaWYgKC1sICRmdWxsZmlsZSAmJiAhIC1mICRmdWxsZmlsZSkKKwl7CisJICAkZGFuZ2xpbmdfc3ltID0gMTsKKwl9CisgICAgICBlbHNpZiAoZGlyX2hhc19jYXNlX21hdGNoaW5nX2ZpbGUgKCRkaXIsICRmaWxlKSkKKwl7CisJICAkZm91bmRfaXQgPSAxOworCSAgbWF5YmVfcHVzaF9yZXF1aXJlZF9maWxlICgkZGlyLCAkZmlsZSwgJGZ1bGxmaWxlKTsKKwl9CisKKyAgICAgICMgYC0tZm9yY2UtbWlzc2luZycgb25seSBoYXMgYW4gZWZmZWN0IGlmIGAtLWFkZC1taXNzaW5nJyBpcworICAgICAgIyBzcGVjaWZpZWQuCisgICAgICBpZiAoJGZvdW5kX2l0ICYmICghICRhZGRfbWlzc2luZyB8fCAhICRmb3JjZV9taXNzaW5nKSkKKwl7CisJICBuZXh0OworCX0KKyAgICAgIGVsc2UKKwl7CisJICAjIElmIHdlJ3ZlIGFscmVhZHkgbG9va2VkIGZvciBpdCwgd2UncmUgZG9uZS4gIFlvdSBtaWdodAorCSAgIyB3b25kZXIgd2h5IHdlIGRvbid0IGRvIHRoaXMgYmVmb3JlIHNlYXJjaGluZyBmb3IgdGhlCisJICAjIGZpbGUuICBJZiB3ZSBkbyB0aGF0LCB0aGVuIHNvbWV0aGluZyBsaWtlCisJICAjIEFDX09VVFBVVChzdWJkaXIvZm9vIGZvbykgd2lsbCBmYWlsIHRvIHB1dCBmb28uaW4gaW50bworCSAgIyBESVNUX0NPTU1PTi4KKwkgIGlmICghICRmb3VuZF9pdCkKKwkgICAgeworCSAgICAgIG5leHQgaWYgZGVmaW5lZCAkcmVxdWlyZWRfZmlsZV9ub3RfZm91bmR7JGZ1bGxmaWxlfTsKKwkgICAgICAkcmVxdWlyZWRfZmlsZV9ub3RfZm91bmR7JGZ1bGxmaWxlfSA9IDE7CisJICAgIH0KKworCSAgaWYgKCRzdHJpY3RuZXNzID49ICRteXN0cmljdCkKKwkgICAgeworCSAgICAgIGlmICgkZGFuZ2xpbmdfc3ltICYmICRhZGRfbWlzc2luZykKKwkJeworCQkgIHVubGluayAoJGZ1bGxmaWxlKTsKKwkJfQorCisJICAgICAgbXkgJHRyYWlsZXIgPSAnJzsKKwkgICAgICBteSAkdHJhaWxlcjIgPSAnJzsKKwkgICAgICBteSAkc3VwcHJlc3MgPSAwOworCisJICAgICAgIyBPbmx5IGluc3RhbGwgbWlzc2luZyBmaWxlcyBhY2NvcmRpbmcgdG8gb3VyIGRlc2lyZWQKKwkgICAgICAjIHN0cmljdG5lc3MgbGV2ZWwuCisJICAgICAgbXkgJG1lc3NhZ2UgPSAicmVxdWlyZWQgZmlsZSBgJGZ1bGxmaWxlJyBub3QgZm91bmQiOworCSAgICAgIGlmICgkYWRkX21pc3NpbmcpCisJCXsKKwkJICBpZiAoLWYgIiRsaWJkaXIvJGZpbGUiKQorCQkgICAgeworCQkgICAgICAkc3VwcHJlc3MgPSAxOworCisJCSAgICAgICMgSW5zdGFsbCB0aGUgbWlzc2luZyBmaWxlLiAgU3ltbGluayBpZiB3ZQorCQkgICAgICAjIGNhbiwgY29weSBpZiB3ZSBtdXN0LiAgTm90ZTogZGVsZXRlIHRoZSBmaWxlCisJCSAgICAgICMgZmlyc3QsIGluIGNhc2UgaXQgaXMgYSBkYW5nbGluZyBzeW1saW5rLgorCQkgICAgICAkbWVzc2FnZSA9ICJpbnN0YWxsaW5nIGAkZnVsbGZpbGUnIjsKKworCQkgICAgICAjIFRoZSBsaWNlbnNlIGZpbGUgc2hvdWxkIG5vdCBiZSB2b2xhdGlsZS4KKwkJICAgICAgaWYgKCRmaWxlIGVxICJDT1BZSU5HIikKKwkJICAgICAgICB7CisJCQkgICRtZXNzYWdlIC49ICIgdXNpbmcgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjMgZmlsZSI7CisJCQkgICR0cmFpbGVyMiA9ICJcbiAgICBDb25zaWRlciBhZGRpbmcgdGhlIENPUFlJTkcgZmlsZSIKKwkJCQkgICAgLiAiIHRvIHRoZSB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIgorCQkJCSAgICAuICJcbiAgICBmb3IgeW91ciBjb2RlLCB0byBhdm9pZCBxdWVzdGlvbnMiCisJCQkJICAgIC4gIiBhYm91dCB3aGljaCBsaWNlbnNlIHlvdXIgcHJvamVjdCB1c2VzLiI7CisJCQl9CisKKwkJICAgICAgIyBXaW5kb3dzIFBlcmwgd2lsbCBoYW5nIGlmIHdlIHRyeSB0byBkZWxldGUgYQorCQkgICAgICAjIGZpbGUgdGhhdCBkb2Vzbid0IGV4aXN0LgorCQkgICAgICB1bmxpbmsgKCRmdWxsZmlsZSkgaWYgLWYgJGZ1bGxmaWxlOworCQkgICAgICBpZiAoJHN5bWxpbmtfZXhpc3RzICYmICEgJGNvcHlfbWlzc2luZykKKwkJCXsKKwkJCSAgaWYgKCEgc3ltbGluayAoIiRsaWJkaXIvJGZpbGUiLCAkZnVsbGZpbGUpCisJCQkgICAgICB8fCAhIC1lICRmdWxsZmlsZSkKKwkJCSAgICB7CisJCQkgICAgICAkc3VwcHJlc3MgPSAwOworCQkJICAgICAgJHRyYWlsZXIgPSAiOyBlcnJvciB3aGlsZSBtYWtpbmcgbGluazogJCEiOworCQkJICAgIH0KKwkJCX0KKwkJICAgICAgZWxzaWYgKHN5c3RlbSAoJ2NwJywgIiRsaWJkaXIvJGZpbGUiLCAkZnVsbGZpbGUpKQorCQkJeworCQkJICAkc3VwcHJlc3MgPSAwOworCQkJICAkdHJhaWxlciA9ICJcbiAgICBlcnJvciB3aGlsZSBjb3B5aW5nIjsKKwkJCX0KKwkJICAgICAgc2V0X2Rpcl9jYWNoZV9maWxlICgkZGlyLCAkZmlsZSk7CisJCSAgICB9CisKKwkJICBpZiAoISBtYXliZV9wdXNoX3JlcXVpcmVkX2ZpbGUgKGRpcm5hbWUgKCRmdWxsZmlsZSksCisJCQkJCQkgICRmaWxlLCAkZnVsbGZpbGUpKQorCQkgICAgeworCQkgICAgICBpZiAoISAkZm91bmRfaXQgJiYgISAkYXV0b21ha2Vfd2lsbF9wcm9jZXNzX2F1eF9kaXIpCisJCQl7CisJCQkgICMgV2UgaGF2ZSBhZGRlZCB0aGUgZmlsZSBidXQgY291bGQgbm90IHB1c2ggaXQKKwkJCSAgIyBpbnRvIERJU1RfQ09NTU9OLCBwcm9iYWJseSBiZWNhdXNlIHRoaXMgaXMKKwkJCSAgIyBhbiBhdXhpbGlhcnkgZmlsZSBhbmQgd2UgYXJlIG5vdCBwcm9jZXNzaW5nCisJCQkgICMgdGhlIHRvcCBsZXZlbCBNYWtlZmlsZS4gIEZ1cnRoZXJtb3JlIEF1dG9tYWtlCisJCQkgICMgaGFzbid0IGJlZW4gYXNrZWQgdG8gY3JlYXRlIHRoZSBNYWtlZmlsZS5pbgorCQkJICAjIHRoYXQgZGlzdHJpYnV0ZXMgdGhlIGF1eCBkaXIgZmlsZXMuCisJCQkgIGVycm9yICgkd2hlcmUsICdQbGVhc2UgbWFrZSBhIGZ1bGwgcnVuIG9mIGF1dG9tYWtlJworCQkJCSAuICIgc28gJGZ1bGxmaWxlIGdldHMgZGlzdHJpYnV0ZWQuIik7CisJCQl9CisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICAkdHJhaWxlciA9ICJcbiAgYGF1dG9tYWtlIC0tYWRkLW1pc3NpbmcnIGNhbiBpbnN0YWxsIGAkZmlsZSciCisJCSAgICBpZiAtZiAiJGxpYmRpci8kZmlsZSI7CisJCX0KKworCSAgICAgICMgSWYgLS1mb3JjZS1taXNzaW5nIHdhcyBzcGVjaWZpZWQsIGFuZCB3ZSBoYXZlCisJICAgICAgIyBhY3R1YWxseSBmb3VuZCB0aGUgZmlsZSwgdGhlbiBkbyBub3RoaW5nLgorCSAgICAgIG5leHQKKwkJaWYgJGZvdW5kX2l0ICYmICRmb3JjZV9taXNzaW5nOworCisJICAgICAgIyBJZiB3ZSBjb3VsZG4ndCBpbnN0YWxsIHRoZSBmaWxlLCBidXQgaXQgaXMgYSB0YXJnZXQgaW4KKwkgICAgICAjIHRoZSBNYWtlZmlsZSwgZG9uJ3QgcHJpbnQgYW55dGhpbmcuICBUaGlzIGFsbG93cyBmaWxlcworCSAgICAgICMgbGlrZSBSRUFETUUsIEFVVEhPUlMsIG9yIFRIQU5LUyB0byBiZSBnZW5lcmF0ZWQuCisJICAgICAgbmV4dAorCQlpZiAhJHN1cHByZXNzICYmIHJ1bGUgJGZpbGU7CisKKwkgICAgICBtc2cgKCRzdXBwcmVzcyA/ICdub3RlJyA6ICdlcnJvcicsICR3aGVyZSwgIiRtZXNzYWdlJHRyYWlsZXIkdHJhaWxlcjIiKTsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKKyMgJnJlcXVpcmVfZmlsZSAoJFdIRVJFLCAkTVlTVFJJQ1QsIEBGSUxFUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N1YiByZXF1aXJlX2ZpbGUgKCQkQCkKK3sKKyAgICBteSAoJHdoZXJlLCAkbXlzdHJpY3QsIEBmaWxlcykgPSBAXzsKKyAgICByZXF1aXJlX2ZpbGVfaW50ZXJuYWwgKCR3aGVyZSwgJG15c3RyaWN0LCAkcmVsYXRpdmVfZGlyLCBAZmlsZXMpOworfQorCisjICZyZXF1aXJlX2ZpbGVfd2l0aF9tYWNybyAoJENPTkQsICRNQUNSTywgJE1ZU1RSSUNULCBARklMRVMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdWIgcmVxdWlyZV9maWxlX3dpdGhfbWFjcm8gKCQkJEApCit7CisgICAgbXkgKCRjb25kLCAkbWFjcm8sICRteXN0cmljdCwgQGZpbGVzKSA9IEBfOworICAgICRtYWNybyA9IHJ2YXIgKCRtYWNybykgdW5sZXNzIHJlZiAkbWFjcm87CisgICAgcmVxdWlyZV9maWxlICgkbWFjcm8tPnJkZWYgKCRjb25kKS0+bG9jYXRpb24sICRteXN0cmljdCwgQGZpbGVzKTsKK30KKworIyAmcmVxdWlyZV9saWJzb3VyY2Vfd2l0aF9tYWNybyAoJENPTkQsICRNQUNSTywgJE1ZU1RSSUNULCBARklMRVMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVxdWlyZSBhbiBBQ19MSUJTT1VSQ0VkIGZpbGUuICBJZiBBQ19DT05GSUdfTElCT0JKX0RJUiB3YXMgY2FsbGVkLCBpdAorIyBtdXN0IGJlIGluIHRoYXQgZGlyZWN0b3J5LiAgT3RoZXJ3aXNlIGV4cGVjdCBpdCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCitzdWIgcmVxdWlyZV9saWJzb3VyY2Vfd2l0aF9tYWNybyAoJCQkQCkKK3sKKyAgICBteSAoJGNvbmQsICRtYWNybywgJG15c3RyaWN0LCBAZmlsZXMpID0gQF87CisgICAgJG1hY3JvID0gcnZhciAoJG1hY3JvKSB1bmxlc3MgcmVmICRtYWNybzsKKyAgICBpZiAoJGNvbmZpZ19saWJvYmpfZGlyKQorICAgICAgeworCXJlcXVpcmVfZmlsZV9pbnRlcm5hbCAoJG1hY3JvLT5yZGVmICgkY29uZCktPmxvY2F0aW9uLCAkbXlzdHJpY3QsCisJCQkgICAgICAgJGNvbmZpZ19saWJvYmpfZGlyLCBAZmlsZXMpOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKwlyZXF1aXJlX2ZpbGUgKCRtYWNyby0+cmRlZiAoJGNvbmQpLT5sb2NhdGlvbiwgJG15c3RyaWN0LCBAZmlsZXMpOworICAgICAgfQorfQorCisjIFF1ZXVlIHRvIHB1c2ggcmVxdWlyZV9jb25mX2ZpbGUgcmVxdWlyZW1lbnRzIHRvLgorbXkgJHJlcXVpcmVkX2NvbmZfZmlsZV9xdWV1ZTsKKworIyAmcXVldWVfcmVxdWlyZWRfY29uZl9maWxlICgkUVVFVUUsICRLRVksICRESVIsICRXSEVSRSwgJE1ZU1RSSUNULCBARklMRVMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N1YiBxdWV1ZV9yZXF1aXJlZF9jb25mX2ZpbGUgKCQkJCRAKQoreworICAgIG15ICgkcXVldWUsICRrZXksICRkaXIsICR3aGVyZSwgJG15c3RyaWN0LCBAZmlsZXMpID0gQF87CisgICAgbXkgQHNlcmlhbF9sb2M7CisgICAgaWYgKHJlZiAkd2hlcmUpCisgICAgICB7CisgICAgICAgIEBzZXJpYWxfbG9jID0gKFFVRVVFX0xPQ0FUSU9OLCAkd2hlcmUtPnNlcmlhbGl6ZSAoKSk7CisgICAgICB9CisgICAgZWxzZQorICAgICAgeworICAgICAgICBAc2VyaWFsX2xvYyA9IChRVUVVRV9TVFJJTkcsICR3aGVyZSk7CisgICAgICB9CisgICAgJHF1ZXVlLT5lbnF1ZXVlICgka2V5LCAkZGlyLCBAc2VyaWFsX2xvYywgJG15c3RyaWN0LCAwICsgQGZpbGVzLCBAZmlsZXMpOworfQorCisjICZyZXF1aXJlX3F1ZXVlZF9jb25mX2ZpbGUgKCRRVUVVRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3ViIHJlcXVpcmVfcXVldWVkX2NvbmZfZmlsZSAoJCkKK3sKKyAgICBteSAoJHF1ZXVlKSA9IEBfOworICAgIG15ICR3aGVyZTsKKyAgICBteSAkZGlyID0gJHF1ZXVlLT5kZXF1ZXVlICgpOworICAgIG15ICRsb2Nfa2V5ID0gJHF1ZXVlLT5kZXF1ZXVlICgpOworICAgIGlmICgkbG9jX2tleSBlcSBRVUVVRV9MT0NBVElPTikKKyAgICAgIHsKKwkkd2hlcmUgPSBBdXRvbWFrZTo6TG9jYXRpb246OmRlc2VyaWFsaXplICgkcXVldWUpOworICAgICAgfQorICAgIGVsc2lmICgkbG9jX2tleSBlcSBRVUVVRV9TVFJJTkcpCisgICAgICB7CisJJHdoZXJlID0gJHF1ZXVlLT5kZXF1ZXVlICgpOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKwlwcm9nX2Vycm9yICJ1bmV4cGVjdGVkIGtleSAkbG9jX2tleSI7CisgICAgICB9CisgICAgbXkgJG15c3RyaWN0ID0gJHF1ZXVlLT5kZXF1ZXVlICgpOworICAgIG15ICRuZmlsZXMgPSAkcXVldWUtPmRlcXVldWUgKCk7CisgICAgbXkgQGZpbGVzOworICAgIHB1c2ggQGZpbGVzLCAkcXVldWUtPmRlcXVldWUgKCkKKyAgICAgIGZvcmVhY2ggKDEgLi4gJG5maWxlcyk7CisKKyAgICAjIERlcXVldWluZyBoYXBwZW5zIG91dHNpZGUgb2YgcGVyLW1ha2VmaWxlIGNvbnRleHQsIHNvIHdlIGhhdmUgdG8KKyAgICAjIHNldCB0aGUgdmFyaWFibGVzIHVzZWQgYnkgcmVxdWlyZV9maWxlX2ludGVybmFsIGFuZCB0aGUgZnVuY3Rpb25zCisgICAgIyBpdCBjYWxscy4gIEdyb3NzIQorICAgICRyZWxhdGl2ZV9kaXIgPSAkZGlyOworICAgIHJlcXVpcmVfZmlsZV9pbnRlcm5hbCAoJHdoZXJlLCAkbXlzdHJpY3QsICRjb25maWdfYXV4X2RpciwgQGZpbGVzKTsKK30KKworIyAmcmVxdWlyZV9jb25mX2ZpbGUgKCRXSEVSRSwgJE1ZU1RSSUNULCBARklMRVMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTG9va3MgaW4gY29uZmlndXJhdGlvbiBwYXRoLCBhcyBzcGVjaWZpZWQgYnkgQUNfQ09ORklHX0FVWF9ESVI7CisjIHdvcmtlciB0aHJlYWRzIG1heSBxdWV1ZSB1cCB0aGUgYWN0aW9uIHRvIGJlIHNlcmlhbGl6ZWQgYnkgdGhlIG1hc3Rlci4KKyMKKyMgRklYTUU6IHRoaXMgc2VyaW91c2x5IHJlbGllcyBvbiB0aGUgc2VtYW50aWNzIG9mIHJlcXVpcmVfZmlsZV9pbnRlcm5hbAorIyBhbmQgbWF5YmVfcHVzaF9yZXF1aXJlZF9maWxlLCBpbiB0aGF0IHdlIGV4cGxvaXQgdGhlIGZhY3QgdGhhdCBvbmx5IHRoZQorIyBjb250ZW50cyBvZiB0aGUgbGFzdCBoYW5kbGVkIG91dHB1dCBmaWxlIG1heSBiZSBpbXBhY3RlZCAod2hpY2ggaW4gdHVybgorIyBpcyBkZWFsdCB3aXRoIGJ5IHRoZSBtYXN0ZXIgdGhyZWFkKS4KK3N1YiByZXF1aXJlX2NvbmZfZmlsZSAoJCRAKQoreworICAgIG15ICgkd2hlcmUsICRteXN0cmljdCwgQGZpbGVzKSA9IEBfOworICAgIGlmIChkZWZpbmVkICRyZXF1aXJlZF9jb25mX2ZpbGVfcXVldWUpCisgICAgICB7CisJcXVldWVfcmVxdWlyZWRfY29uZl9maWxlICgkcmVxdWlyZWRfY29uZl9maWxlX3F1ZXVlLCBRVUVVRV9DT05GX0ZJTEUsCisJCQkJICAkcmVsYXRpdmVfZGlyLCAkd2hlcmUsICRteXN0cmljdCwgQGZpbGVzKTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisJcmVxdWlyZV9maWxlX2ludGVybmFsICgkd2hlcmUsICRteXN0cmljdCwgJGNvbmZpZ19hdXhfZGlyLCBAZmlsZXMpOworICAgICAgfQorfQorCisKKyMgJnJlcXVpcmVfY29uZl9maWxlX3dpdGhfbWFjcm8gKCRDT05ELCAkTUFDUk8sICRNWVNUUklDVCwgQEZJTEVTKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdWIgcmVxdWlyZV9jb25mX2ZpbGVfd2l0aF9tYWNybyAoJCQkQCkKK3sKKyAgICBteSAoJGNvbmQsICRtYWNybywgJG15c3RyaWN0LCBAZmlsZXMpID0gQF87CisgICAgcmVxdWlyZV9jb25mX2ZpbGUgKHJ2YXIgKCRtYWNybyktPnJkZWYgKCRjb25kKS0+bG9jYXRpb24sCisJCSAgICAgICAkbXlzdHJpY3QsIEBmaWxlcyk7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyAmcmVxdWlyZV9idWlsZF9kaXJlY3RvcnkgKCRESVJFQ1RPUlkpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbWl0IHJ1bGVzIHRvIGNyZWF0ZSAkRElSRUNUT1JZIGlmIG5lZWRlZCwgYW5kIHJldHVybgorIyB0aGUgZmlsZSB0aGF0IGFueSB0YXJnZXQgcmVxdWlyaW5nIHRoaXMgZGlyZWN0b3J5IHNob3VsZCBiZSBtYWRlCisjIGRlcGVuZGVudCB1cG9uLgorIyBXZSBkb24ndCB3YW50IHRvIGVtaXQgdGhlIHJ1bGUgdHdpY2UsIGFuZCB3YW50IHRvIHJldXNlIGl0CisjIGZvciBkaXJlY3RvcmllcyB3aXRoIGVxdWl2YWxlbnQgbmFtZXMgKGUuZy4sIGBmb28vYmFyJyBhbmQgYC4vZm9vLy9iYXInKS4KK3N1YiByZXF1aXJlX2J1aWxkX2RpcmVjdG9yeSAoJCkKK3sKKyAgbXkgJGRpcmVjdG9yeSA9IHNoaWZ0OworCisgIHJldHVybiAkZGlyZWN0b3J5X21hcHskZGlyZWN0b3J5fSBpZiBleGlzdHMgJGRpcmVjdG9yeV9tYXB7JGRpcmVjdG9yeX07CisKKyAgbXkgJGNkaXIgPSBGaWxlOjpTcGVjLT5jYW5vbnBhdGggKCRkaXJlY3RvcnkpOworCisgIGlmIChleGlzdHMgJGRpcmVjdG9yeV9tYXB7JGNkaXJ9KQorICAgIHsKKyAgICAgIG15ICRzdGFtcCA9ICRkaXJlY3RvcnlfbWFweyRjZGlyfTsKKyAgICAgICRkaXJlY3RvcnlfbWFweyRkaXJlY3Rvcnl9ID0gJHN0YW1wOworICAgICAgcmV0dXJuICRzdGFtcDsKKyAgICB9CisKKyAgbXkgJGRpcnN0YW1wID0gIiRjZGlyL1wkKGFtX19kaXJzdGFtcCkiOworCisgICRkaXJlY3RvcnlfbWFweyRkaXJlY3Rvcnl9ID0gJGRpcnN0YW1wOworICAkZGlyZWN0b3J5X21hcHskY2Rpcn0gPSAkZGlyc3RhbXA7CisKKyAgIyBTZXQgYSB2YXJpYWJsZSBmb3IgdGhlIGRpcnN0YW1wIGJhc2VuYW1lLgorICBkZWZpbmVfcHJldHR5X3ZhcmlhYmxlICgnYW1fX2RpcnN0YW1wJywgVFJVRSwgSU5URVJOQUwsCisJCQkgICckKGFtX19sZWFkaW5nX2RvdClkaXJzdGFtcCcpOworCisgICMgRGlyZWN0b3J5IG11c3QgYmUgcmVtb3ZlZCBieSBgbWFrZSBkaXN0Y2xlYW4nLgorICAkY2xlYW5fZmlsZXN7JGRpcnN0YW1wfSA9IERJU1RfQ0xFQU47CisKKyAgJG91dHB1dF9ydWxlcyAuPSAoIiRkaXJzdGFtcDpcbiIKKwkJICAgIC4gIlx0XEBcJChNS0RJUl9QKSAkZGlyZWN0b3J5XG4iCisJCSAgICAuICJcdFxAOiA+ICRkaXJzdGFtcFxuIik7CisKKyAgcmV0dXJuICRkaXJzdGFtcDsKK30KKworIyAmcmVxdWlyZV9idWlsZF9kaXJlY3RvcnlfbWF5YmUgKCRGSUxFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZiAkRklMRSBsaWVzIGluIGEgc3ViZGlyZWN0b3J5LCBlbWl0IGEgcnVsZSB0byBjcmVhdGUgdGhpcworIyBkaXJlY3RvcnkgYW5kIHJldHVybiB0aGUgZmlsZSB0aGF0ICRGSUxFIHNob3VsZCBiZSBtYWRlCisjIGRlcGVuZGVudCB1cG9uLiAgT3RoZXJ3aXNlLCBqdXN0IHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLgorc3ViIHJlcXVpcmVfYnVpbGRfZGlyZWN0b3J5X21heWJlICgkKQoreworICAgIG15ICRmaWxlID0gc2hpZnQ7CisgICAgbXkgJGRpcmVjdG9yeSA9IGRpcm5hbWUgKCRmaWxlKTsKKworICAgIGlmICgkZGlyZWN0b3J5IG5lICcuJykKKyAgICB7CisJcmV0dXJuIHJlcXVpcmVfYnVpbGRfZGlyZWN0b3J5ICgkZGlyZWN0b3J5KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlyZXR1cm4gJyc7CisgICAgfQorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgUHVzaCBhIGxpc3Qgb2YgZmlsZXMgb250byBkaXN0X2NvbW1vbi4KK3N1YiBwdXNoX2Rpc3RfY29tbW9uCit7CisgIHByb2dfZXJyb3IgInB1c2hfZGlzdF9jb21tb24gcnVuIGFmdGVyIGhhbmRsZV9kaXN0IgorICAgIGlmICRoYW5kbGVfZGlzdF9ydW47CisgIEF1dG9tYWtlOjpWYXJpYWJsZTo6ZGVmaW5lICgnRElTVF9DT01NT04nLCBWQVJfQVVUT01BS0UsICcrJywgVFJVRSwgIkBfIiwKKwkJCSAgICAgICcnLCBJTlRFUk5BTCwgVkFSX1BSRVRUWSk7Cit9CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIGdlbmVyYXRlX21ha2VmaWxlICgkTUFLRUZJTEVfQU0sICRNQUtFRklMRV9JTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBHZW5lcmF0ZSBhIE1ha2VmaWxlLmluIGdpdmVuIHRoZSBuYW1lIG9mIHRoZSBjb3JyZXNwb25kaW5nIE1ha2VmaWxlIGFuZAorIyB0aGUgbmFtZSBvZiB0aGUgZmlsZSBvdXRwdXQgYnkgY29uZmlnLnN0YXR1cy4KK3N1YiBnZW5lcmF0ZV9tYWtlZmlsZSAoJCQpCit7CisgIG15ICgkbWFrZWZpbGVfYW0sICRtYWtlZmlsZV9pbikgPSBAXzsKKworICAjIFJlc2V0IGFsbCB0aGUgTWFrZWZpbGUuYW0gcmVsYXRlZCB2YXJpYWJsZXMuCisgIGluaXRpYWxpemVfcGVyX2lucHV0OworCisgICMgQVVUT01BS0VfT1BUSU9OUyBjYW4gY29udGFpbnMgLVcgZmxhZ3MgdG8gZGlzYWJsZSBvciBlbmFibGUKKyAgIyB3YXJuaW5ncyBmb3IgdGhpcyBmaWxlLiAgU28gaG9sZCBhbnkgd2FybmluZyBpc3N1ZWQgYmVmb3JlCisgICMgd2UgaGF2ZSBwcm9jZXNzZWQgQVVUT01BS0VfT1BUSU9OUy4KKyAgYnVmZmVyX21lc3NhZ2VzICgnd2FybmluZycpOworCisgICMgTmFtZSBvZiBpbnB1dCBmaWxlICgiTWFrZWZpbGUuYW0iKSBhbmQgb3V0cHV0IGZpbGUKKyAgIyAoIk1ha2VmaWxlLmluIikuICBUaGVzZSBoYXZlIG5vIGRpcmVjdG9yeSBjb21wb25lbnRzLgorICAkYW1fZmlsZV9uYW1lID0gYmFzZW5hbWUgKCRtYWtlZmlsZV9hbSk7CisgICRpbl9maWxlX25hbWUgPSBiYXNlbmFtZSAoJG1ha2VmaWxlX2luKTsKKworICAjICRPVVRQVVQgaXMgZW5jb2RlZC4gIElmIGl0IGNvbnRhaW5zIGEgIjoiIHRoZW4gdGhlIGZpcnN0IGVsZW1lbnQKKyAgIyBpcyB0aGUgcmVhbCBvdXRwdXQgZmlsZSwgYW5kIGFsbCByZW1haW5pbmcgZWxlbWVudHMgYXJlIGlucHV0CisgICMgZmlsZXMuICBXZSBkb24ndCBzY2FuIG9yIG90aGVyd2lzZSBkZWFsIHdpdGggdGhlc2UgaW5wdXQgZmlsZXMsCisgICMgb3RoZXIgdGhhbiB0byBtYXJrIHRoZW0gYXMgZGVwZW5kZW5jaWVzLiAgU2VlCisgICMgJnNjYW5fYXV0b2NvbmZfZmlsZXMgZm9yIGRldGFpbHMuCisgIG15ICgkbWFrZWZpbGUsIEBpbnB1dHMpID0gc3BsaXQgKC86LywgJG91dHB1dF9maWxlc3skbWFrZWZpbGVfaW59KTsKKworICAkcmVsYXRpdmVfZGlyID0gZGlybmFtZSAoJG1ha2VmaWxlKTsKKyAgJGFtX3JlbGF0aXZlX2RpciA9IGRpcm5hbWUgKCRtYWtlZmlsZV9hbSk7CisgICR0b3BzcmNkaXIgPSBiYWNrbmFtZSAoJHJlbGF0aXZlX2Rpcik7CisKKyAgcmVhZF9tYWluX2FtX2ZpbGUgKCRtYWtlZmlsZV9hbSk7CisgIGlmIChoYW5kbGVfb3B0aW9ucykKKyAgICB7CisgICAgICAjIFByb2Nlc3MgYnVmZmVyZWQgd2FybmluZ3MuCisgICAgICBmbHVzaF9tZXNzYWdlczsKKyAgICAgICMgRmF0YWwgZXJyb3IuICBKdXN0IHJldHVybiwgc28gd2UgY2FuIGNvbnRpbnVlIHdpdGggbmV4dCBmaWxlLgorICAgICAgcmV0dXJuOworICAgIH0KKyAgIyBQcm9jZXNzIGJ1ZmZlcmVkIHdhcm5pbmdzLgorICBmbHVzaF9tZXNzYWdlczsKKworICAjIFRoZXJlIGFyZSBhIGZldyBpbnN0YWxsLXJlbGF0ZWQgdmFyaWFibGVzIHRoYXQgeW91IHNob3VsZCBub3QgZGVmaW5lLgorICBmb3JlYWNoIG15ICR2YXIgKCdQUkVfSU5TVEFMTCcsICdQT1NUX0lOU1RBTEwnLCAnTk9STUFMX0lOU1RBTEwnKQorICAgIHsKKyAgICAgIG15ICR2ID0gdmFyICR2YXI7CisgICAgICBpZiAoJHYpCisJeworCSAgbXkgJGRlZiA9ICR2LT5kZWYgKFRSVUUpOworCSAgcHJvZ19lcnJvciAiJHZhciBub3QgZGVmaW5lZCBpbiBjb25kaXRpb24gVFJVRSIKKwkgICAgdW5sZXNzICRkZWY7CisJICByZWplY3RfdmFyICR2YXIsICJgJHZhcicgc2hvdWxkIG5vdCBiZSBkZWZpbmVkIgorCSAgICBpZiAkZGVmLT5vd25lciAhPSBWQVJfQVVUT01BS0U7CisJfQorICAgIH0KKworICAjIENhdGNoIHNvbWUgb2Jzb2xldGUgdmFyaWFibGVzLgorICBtc2dfdmFyICgnb2Jzb2xldGUnLCAnSU5DTFVERVMnLAorCSAgICJgSU5DTFVERVMnIGlzIHRoZSBvbGQgbmFtZSBmb3IgYEFNX0NQUEZMQUdTJyAob3IgYCpfQ1BQRkxBR1MnKSIpCisgICAgaWYgdmFyICgnSU5DTFVERVMnKTsKKworICAjIE11c3QgZG8gdGhpcyBhZnRlciByZWFkaW5nIC5hbSBmaWxlLgorICBkZWZpbmVfdmFyaWFibGUgKCdzdWJkaXInLCAkcmVsYXRpdmVfZGlyLCBJTlRFUk5BTCk7CisKKyAgIyBJZiBESVNUX1NVQkRJUlMgaXMgZGVmaW5lZCwgbWFrZSBzdXJlIFNVQkRJUlMgaXMsIHNvIHRoYXQKKyAgIyByZWN1cnNpdmUgcnVsZXMgYXJlIGVuYWJsZWQuCisgIGRlZmluZV9wcmV0dHlfdmFyaWFibGUgKCdTVUJESVJTJywgVFJVRSwgSU5URVJOQUwsICcnKQorICAgIGlmIHZhciAnRElTVF9TVUJESVJTJyAmJiAhIHZhciAnU1VCRElSUyc7CisKKyAgIyBDaGVjayBmaXJzdCwgYmVjYXVzZSB3ZSBtaWdodCBtb2RpZnkgc29tZSBzdGF0ZS4KKyAgY2hlY2tfY3lnbnVzOworICBjaGVja19nbnVfc3RhbmRhcmRzOworICBjaGVja19nbml0c19zdGFuZGFyZHM7CisKKyAgaGFuZGxlX2NvbmZpZ3VyZSAoJG1ha2VmaWxlX2FtLCAkbWFrZWZpbGVfaW4sICRtYWtlZmlsZSwgQGlucHV0cyk7CisgIGhhbmRsZV9nZXR0ZXh0OworICBoYW5kbGVfbGlicmFyaWVzOworICBoYW5kbGVfbHRsaWJyYXJpZXM7CisgIGhhbmRsZV9wcm9ncmFtczsKKyAgaGFuZGxlX3NjcmlwdHM7CisKKyAgIyBUaGVzZSBtdXN0IGJlIHJ1biBhZnRlciBhbGwgdGhlIHNvdXJjZXMgYXJlIHNjYW5uZWQuICBUaGV5CisgICMgdXNlIHZhcmlhYmxlcyBkZWZpbmVkIGJ5ICZoYW5kbGVfbGlicmFyaWVzLCAmaGFuZGxlX2x0bGlicmFyaWVzLAorICAjIG9yICZoYW5kbGVfcHJvZ3JhbXMuCisgIGhhbmRsZV9jb21waWxlOworICBoYW5kbGVfbGFuZ3VhZ2VzOworICBoYW5kbGVfbGlidG9vbDsKKworICAjIFZhcmlhYmxlcyB1c2VkIGJ5IGRpc3RkaXIuYW0gYW5kIHRhZ3MuYW0uCisgIGRlZmluZV9wcmV0dHlfdmFyaWFibGUgKCdTT1VSQ0VTJywgVFJVRSwgSU5URVJOQUwsIEBzb3VyY2VzKTsKKyAgaWYgKCEgb3B0aW9uICduby1kaXN0JykKKyAgICB7CisgICAgICBkZWZpbmVfcHJldHR5X3ZhcmlhYmxlICgnRElTVF9TT1VSQ0VTJywgVFJVRSwgSU5URVJOQUwsIEBkaXN0X3NvdXJjZXMpOworICAgIH0KKworICBoYW5kbGVfbXVsdGlsaWI7CisgIGhhbmRsZV90ZXhpbmZvOworICBoYW5kbGVfZW1hY3NfbGlzcDsKKyAgaGFuZGxlX3B5dGhvbjsKKyAgaGFuZGxlX2phdmE7CisgIGhhbmRsZV9tYW5fcGFnZXM7CisgIGhhbmRsZV9kYXRhOworICBoYW5kbGVfaGVhZGVyczsKKyAgaGFuZGxlX3N1YmRpcnM7CisgIGhhbmRsZV90YWdzOworICBoYW5kbGVfbWlub3Jfb3B0aW9uczsKKyAgIyBNdXN0IGNvbWUgYWZ0ZXIgaGFuZGxlX3Byb2dyYW1zIHNvIHRoYXQgJWtub3duX3Byb2dyYW1zIGlzIHVwLXRvLWRhdGUuCisgIGhhbmRsZV90ZXN0czsKKworICAjIFRoaXMgbXVzdCBjb21lIGFmdGVyIG1vc3Qgb3RoZXIgcnVsZXMuCisgIGhhbmRsZV9kaXN0OworCisgIGhhbmRsZV9mb290ZXI7CisgIGRvX2NoZWNrX21lcmdlX3RhcmdldDsKKyAgaGFuZGxlX2FsbCAoJG1ha2VmaWxlKTsKKworICAjIEZJWE1FOiBHcm9zcyEKKyAgaWYgKHZhciAoJ2xpYl9MVExJQlJBUklFUycpICYmIHZhciAoJ2Jpbl9QUk9HUkFNUycpKQorICAgIHsKKyAgICAgICRvdXRwdXRfcnVsZXMgLj0gImluc3RhbGwtYmluUFJPR1JBTVM6IGluc3RhbGwtbGliTFRMSUJSQVJJRVNcblxuIjsKKyAgICB9CisgIGlmICh2YXIgKCdub2Jhc2VfbGliX0xUTElCUkFSSUVTJykgJiYgdmFyICgnYmluX1BST0dSQU1TJykpCisgICAgeworICAgICAgJG91dHB1dF9ydWxlcyAuPSAiaW5zdGFsbC1iaW5QUk9HUkFNUzogaW5zdGFsbC1ub2Jhc2VfbGliTFRMSUJSQVJJRVNcblxuIjsKKyAgICB9CisKKyAgaGFuZGxlX2luc3RhbGw7CisgIGhhbmRsZV9jbGVhbiAoJG1ha2VmaWxlKTsKKyAgaGFuZGxlX2ZhY3RvcmVkX2RlcGVuZGVuY2llczsKKworICAjIENvbWVzIGxhc3QsIGJlY2F1c2UgYWxsIHRoZSBhYm92ZSBwcm9jZWR1cmVzIG1heSBoYXZlCisgICMgZGVmaW5lZCBvciBvdmVycmlkZGVuIHZhcmlhYmxlcy4KKyAgJG91dHB1dF92YXJzIC49IG91dHB1dF92YXJpYWJsZXM7CisKKyAgY2hlY2tfdHlwb3M7CisKKyAgbXkgKCRvdXRfZmlsZSkgPSAkb3V0cHV0X2RpcmVjdG9yeSAuICcvJyAuICRtYWtlZmlsZV9pbjsKKworICBpZiAoJGV4aXRfY29kZSAhPSAwKQorICAgIHsKKyAgICAgIHZlcmIgIm5vdCB3cml0aW5nICRvdXRfZmlsZSBiZWNhdXNlIG9mIGVhcmxpZXIgZXJyb3JzIjsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKCEgLWQgKCRvdXRwdXRfZGlyZWN0b3J5IC4gJy8nIC4gJGFtX3JlbGF0aXZlX2RpcikpCisgICAgeworICAgICAgbWtkaXIgKCRvdXRwdXRfZGlyZWN0b3J5IC4gJy8nIC4gJGFtX3JlbGF0aXZlX2RpciwgMDc1NSk7CisgICAgfQorCisgICMgV2UgbWFrZSBzdXJlIHRoYXQgYGFsbDonIGlzIHRoZSBmaXJzdCB0YXJnZXQuCisgIG15ICRvdXRwdXQgPQorICAgICIkb3V0cHV0X3ZhcnMkb3V0cHV0X2FsbCRvdXRwdXRfaGVhZGVyJG91dHB1dF9ydWxlcyRvdXRwdXRfdHJhaWxlciI7CisKKyAgIyBEZWNpZGUgd2hldGhlciB3ZSBtdXN0IHVwZGF0ZSB0aGUgb3V0cHV0IGZpbGUgb3Igbm90LgorICAjIFdlIGhhdmUgdG8gdXBkYXRlIGluIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9ucy4KKyAgIyAgKiAkZm9yY2VfZ2VuZXJhdGlvbiBpcyBzZXQuCisgICMgICogYW55IG9mIHRoZSBvdXRwdXQgZGVwZW5kZW5jaWVzIGlzIHlvdW5nZXIgdGhhbiB0aGUgb3V0cHV0CisgICMgICogdGhlIGNvbnRlbnRzIG9mIHRoZSBvdXRwdXQgaXMgZGlmZmVyZW50ICh0aGlzIGNhbiBoYXBwZW4KKyAgIyAgICBpZiB0aGUgcHJvamVjdCBoYXMgYmVlbiBwb3B1bGF0ZWQgd2l0aCBhIGZpbGUgbGlzdGVkIGluCisgICMgICAgQGNvbW1vbl9maWxlcyBzaW5jZSB0aGUgbGFzdCBydW4pLgorICAjIE91dHB1dCdzIGRlcGVuZGVuY2llcyBhcmUgc3BsaXQgaW4gdHdvIHNldHM6CisgICMgICogZGVwZW5kZW5jaWVzIHdoaWNoIGFyZSBhbHNvIGNvbmZpZ3VyZSBkZXBlbmRlbmNpZXMKKyAgIyAgICBUaGVzZSBkbyBub3QgY2hhbmdlIGJldHdlZW4gZWFjaCBNYWtlZmlsZS5hbQorICAjICAqIG90aGVyIGRlcGVuZGVuY2llcywgc3BlY2lmaWMgdG8gdGhlIE1ha2VmaWxlLmFtIGJlaW5nIHByb2Nlc3NlZAorICAjICAgIChzdWNoIGFzIHRoZSBNYWtlZmlsZS5hbSBpdHNlbGYsIG9yIGFueSBNYWtlZmlsZSBmcmFnbWVudAorICAjICAgIGl0IGluY2x1ZGVzKS4KKyAgbXkgJHRpbWVzdGFtcCA9IG10aW1lICRvdXRfZmlsZTsKKyAgaWYgKCEgJGZvcmNlX2dlbmVyYXRpb24KKyAgICAgICYmICRjb25maWd1cmVfZGVwc19ncmVhdGVzdF90aW1lc3RhbXAgPCAkdGltZXN0YW1wCisgICAgICAmJiAkb3V0cHV0X2RlcHNfZ3JlYXRlc3RfdGltZXN0YW1wIDwgJHRpbWVzdGFtcAorICAgICAgJiYgJG91dHB1dCBlcSBjb250ZW50cyAoJG91dF9maWxlKSkKKyAgICB7CisgICAgICB2ZXJiICIkb3V0X2ZpbGUgdW5jaGFuZ2VkIjsKKyAgICAgICMgTm8gbmVlZCB0byB1cGRhdGUuCisgICAgICByZXR1cm47CisgICAgfQorCisgIGlmICgtZSAkb3V0X2ZpbGUpCisgICAgeworICAgICAgdW5saW5rICgkb3V0X2ZpbGUpCisJb3IgZmF0YWwgImNhbm5vdCByZW1vdmUgJG91dF9maWxlOiAkIVxuIjsKKyAgICB9CisKKyAgbXkgJGdtX2ZpbGUgPSBuZXcgQXV0b21ha2U6OlhGaWxlICI+ICRvdXRfZmlsZSI7CisgIHZlcmIgImNyZWF0aW5nICRvdXRfZmlsZSI7CisgIHByaW50ICRnbV9maWxlICRvdXRwdXQ7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFByaW50IHVzYWdlIGluZm9ybWF0aW9uLgorc3ViIHVzYWdlICgpCit7CisgICAgcHJpbnQgIlVzYWdlOiAkMCBbT1BUSU9OXSAuLi4gW01ha2VmaWxlXS4uLgorCitHZW5lcmF0ZSBNYWtlZmlsZS5pbiBmb3IgY29uZmlndXJlIGZyb20gTWFrZWZpbGUuYW0uCisKK09wZXJhdGlvbiBtb2RlczoKKyAgICAgIC0taGVscCAgICAgICAgICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgICAgICAtLXZlcnNpb24gICAgICAgICAgICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICB2ZXJib3NlbHkgbGlzdCBmaWxlcyBwcm9jZXNzZWQKKyAgICAgIC0tbm8tZm9yY2UgICAgICAgICAgIG9ubHkgdXBkYXRlIE1ha2VmaWxlLmluJ3MgdGhhdCBhcmUgb3V0IG9mIGRhdGUKKyAgLVcsIC0td2FybmluZ3M9Q0FURUdPUlkgIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGluZyBpbiBDQVRFR09SWQorCitEZXBlbmRlbmN5IHRyYWNraW5nOgorICAtaSwgLS1pZ25vcmUtZGVwcyAgICAgIGRpc2FibGUgZGVwZW5kZW5jeSB0cmFja2luZyBjb2RlCisgICAgICAtLWluY2x1ZGUtZGVwcyAgICAgZW5hYmxlIGRlcGVuZGVuY3kgdHJhY2tpbmcgY29kZQorCitGbGF2b3JzOgorICAgICAgLS1jeWdudXMgICAgICAgICAgIGFzc3VtZSBwcm9ncmFtIGlzIHBhcnQgb2YgQ3lnbnVzLXN0eWxlIHRyZWUKKyAgICAgIC0tZm9yZWlnbiAgICAgICAgICBzZXQgc3RyaWN0bmVzcyB0byBmb3JlaWduCisgICAgICAtLWduaXRzICAgICAgICAgICAgc2V0IHN0cmljdG5lc3MgdG8gZ25pdHMKKyAgICAgIC0tZ251ICAgICAgICAgICAgICBzZXQgc3RyaWN0bmVzcyB0byBnbnUKKworTGlicmFyeSBmaWxlczoKKyAgLWEsIC0tYWRkLW1pc3NpbmcgICAgICBhZGQgbWlzc2luZyBzdGFuZGFyZCBmaWxlcyB0byBwYWNrYWdlCisgICAgICAtLWxpYmRpcj1ESVIgICAgICAgZGlyZWN0b3J5IHN0b3JpbmcgbGlicmFyeSBmaWxlcworICAtYywgLS1jb3B5ICAgICAgICAgICAgIHdpdGggLWEsIGNvcHkgbWlzc2luZyBmaWxlcyAoZGVmYXVsdCBpcyBzeW1saW5rKQorICAtZiwgLS1mb3JjZS1taXNzaW5nICAgIGZvcmNlIHVwZGF0ZSBvZiBzdGFuZGFyZCBmaWxlcworCisiOworICAgIEF1dG9tYWtlOjpDaGFubmVsRGVmczo6dXNhZ2U7CisKKyAgICBteSAoJGxhc3QsIEBsY29tbSk7CisgICAgJGxhc3QgPSAnJzsKKyAgICBmb3JlYWNoIG15ICRpdGVyIChzb3J0ICgoQGNvbW1vbl9maWxlcywgQGNvbW1vbl9zb21ldGltZXMpKSkKKyAgICB7CisJcHVzaCAoQGxjb21tLCAkaXRlcikgdW5sZXNzICRpdGVyIGVxICRsYXN0OworCSRsYXN0ID0gJGl0ZXI7CisgICAgfQorCisgICAgbXkgQGZvdXI7CisgICAgcHJpbnQgIlxuRmlsZXMgd2hpY2ggYXJlIGF1dG9tYXRpY2FsbHkgZGlzdHJpYnV0ZWQsIGlmIGZvdW5kOlxuIjsKKyAgICBmb3JtYXQgVVNBR0VfRk9STUFUID0KKyAgQDw8PDw8PDw8PDw8PDw8PDwgICBAPDw8PDw8PDw8PDw8PDw8PCAgIEA8PDw8PDw8PDw8PDw8PDw8ICAgQDw8PDw8PDw8PDw8PDw8PDwKKyAgJGZvdXJbMF0sICAgICAgICAgICAkZm91clsxXSwgICAgICAgICAgICRmb3VyWzJdLCAgICAgICAgICAgJGZvdXJbM10KKy4KKyAgICAkfiA9ICJVU0FHRV9GT1JNQVQiOworCisgICAgbXkgJGNvbHMgPSA0OworICAgIG15ICRyb3dzID0gaW50KEBsY29tbSAvICRjb2xzKTsKKyAgICBteSAkcmVzdCA9IEBsY29tbSAlICRjb2xzOworCisgICAgaWYgKCRyZXN0KQorICAgIHsKKwkkcm93cysrOworICAgIH0KKyAgICBlbHNlCisgICAgeworCSRyZXN0ID0gJGNvbHM7CisgICAgfQorCisgICAgZm9yIChteSAkeSA9IDA7ICR5IDwgJHJvd3M7ICR5KyspCisgICAgeworCUBmb3VyID0gKCIiLCAiIiwgIiIsICIiKTsKKwlmb3IgKG15ICR4ID0gMDsgJHggPCAkY29sczsgJHgrKykKKwl7CisJICAgIGxhc3QgaWYgJHkgKyAxID09ICRyb3dzICYmICR4ID09ICRyZXN0OworCisJICAgIG15ICRpZHggPSAoKCR4ID4gJHJlc3QpCisJCSAgICAgICA/ICAoJHJvd3MgKiAkcmVzdCArICgkcm93cyAtIDEpICogKCR4IC0gJHJlc3QpKQorCQkgICAgICAgOiAoJHJvd3MgKiAkeCkpOworCisJICAgICRpZHggKz0gJHk7CisJICAgICRmb3VyWyR4XSA9ICRsY29tbVskaWR4XTsKKwl9CisJd3JpdGU7CisgICAgfQorCisgICAgcHJpbnQgIlxuUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZVxAZ251Lm9yZz4uXG4iOworCisgICAgIyAtLWhlbHAgYWx3YXlzIHJldHVybnMgMCBwZXIgR05VIHN0YW5kYXJkcy4KKyAgICBleGl0IDA7Cit9CisKKworIyAmdmVyc2lvbiAoKQorIyAtLS0tLS0tLS0tLQorIyBQcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uCitzdWIgdmVyc2lvbiAoKQoreworICBwcmludCA8PEVPRjsKK2F1dG9tYWtlIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OCitDb3B5cmlnaHQgKEMpIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitMaWNlbnNlIEdQTHYyKzogR05VIEdQTCB2ZXJzaW9uIDIgb3IgbGF0ZXIgPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbD4KK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRlIGl0LgorVGhlcmUgaXMgTk8gV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy4KKworV3JpdHRlbiBieSBUb20gVHJvbWV5IDx0cm9tZXlcQHJlZGhhdC5jb20+CisgICAgICAgYW5kIEFsZXhhbmRyZSBEdXJldC1MdXR6IDxhZGxcQGdudS5vcmc+LgorRU9GCisgICMgLS12ZXJzaW9uIGFsd2F5cyByZXR1cm5zIDAgcGVyIEdOVSBzdGFuZGFyZHMuCisgIGV4aXQgMDsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFBhcnNlIGNvbW1hbmQgbGluZS4KK3N1YiBwYXJzZV9hcmd1bWVudHMgKCkKK3sKKyAgIyBTdGFydCBvZmYgYXMgZ251LgorICBzZXRfc3RyaWN0bmVzcyAoJ2dudScpOworCisgIG15ICRjbGlfd2hlcmUgPSBuZXcgQXV0b21ha2U6OkxvY2F0aW9uOworICBteSAlY2xpX29wdGlvbnMgPQorICAgICgKKyAgICAgJ2xpYmRpcj1zJwk9PiBcJGxpYmRpciwKKyAgICAgJ2dudScJCT0+IHN1YiB7IHNldF9zdHJpY3RuZXNzICgnZ251Jyk7IH0sCisgICAgICdnbml0cycJCT0+IHN1YiB7IHNldF9zdHJpY3RuZXNzICgnZ25pdHMnKTsgfSwKKyAgICAgJ2N5Z251cycJICAgICAgICA9PiBzdWIgeyBzZXRfZ2xvYmFsX29wdGlvbiAoJ2N5Z251cycsICRjbGlfd2hlcmUpOyB9LAorICAgICAnZm9yZWlnbicgICAgICAgICAgPT4gc3ViIHsgc2V0X3N0cmljdG5lc3MgKCdmb3JlaWduJyk7IH0sCisgICAgICdpbmNsdWRlLWRlcHMnCT0+IHN1YiB7IHVuc2V0X2dsb2JhbF9vcHRpb24gKCduby1kZXBlbmRlbmNpZXMnKTsgfSwKKyAgICAgJ2l8aWdub3JlLWRlcHMnCT0+IHN1YiB7IHNldF9nbG9iYWxfb3B0aW9uICgnbm8tZGVwZW5kZW5jaWVzJywKKwkJCQkJCSAgICAkY2xpX3doZXJlKTsgfSwKKyAgICAgJ25vLWZvcmNlJwk9PiBzdWIgeyAkZm9yY2VfZ2VuZXJhdGlvbiA9IDA7IH0sCisgICAgICdmfGZvcmNlLW1pc3NpbmcnICA9PiBcJGZvcmNlX21pc3NpbmcsCisgICAgICdvfG91dHB1dC1kaXI9cycJPT4gXCRvdXRwdXRfZGlyZWN0b3J5LAorICAgICAnYXxhZGQtbWlzc2luZycJPT4gXCRhZGRfbWlzc2luZywKKyAgICAgJ2N8Y29weScJCT0+IFwkY29weV9taXNzaW5nLAorICAgICAndnx2ZXJib3NlJwk9PiBzdWIgeyBzZXR1cF9jaGFubmVsICd2ZXJiJywgc2lsZW50ID0+IDA7IH0sCisgICAgICdXfHdhcm5pbmdzPXMnICAgICA9PiBcJnBhcnNlX3dhcm5pbmdzLAorICAgICAjIFRoZXNlIGxvbmcgb3B0aW9ucyAoLS1XZXJyb3IgYW5kIC0tV25vLWVycm9yKSBmb3IgYmFja3dhcmQKKyAgICAgIyBjb21wYXRpYmlsaXR5LiAgVXNlIC1XZXJyb3IgYW5kIC1Xbm8tZXJyb3IgdG9kYXkuCisgICAgICdXZXJyb3InICAgICAgICAgICA9PiBzdWIgeyBwYXJzZV93YXJuaW5ncyAnVycsICdlcnJvcic7IH0sCisgICAgICdXbm8tZXJyb3InICAgICAgICA9PiBzdWIgeyBwYXJzZV93YXJuaW5ncyAnVycsICduby1lcnJvcic7IH0sCisgICAgICk7CisgIHVzZSBHZXRvcHQ6Okxvbmc7CisgIEdldG9wdDo6TG9uZzo6Y29uZmlnICgiYnVuZGxpbmciLCAicGFzc190aHJvdWdoIik7CisKKyAgIyBTZWUgaWYgLS12ZXJzaW9uIG9yIC0taGVscCBpcyB1c2VkLiAgV2Ugd2FudCB0byBwcm9jZXNzIHRoZXNlIGJlZm9yZQorICAjIGFueXRoaW5nIGVsc2UgYmVjYXVzZSB0aGUgR05VIENvZGluZyBTdGFuZGFyZHMgcmVxdWlyZSB1cyB0bworICAjIGBleGl0IDAnIGFmdGVyIHByb2Nlc3NpbmcgdGhlc2Ugb3B0aW9ucywgYW5kIHdlIGNhbid0IGd1YXJhbnRlZSB0aGlzCisgICMgaWYgd2UgdHJlYXQgb3RoZXIgb3B0aW9ucyBmaXJzdC4gIChIYW5kbGluZyBvdGhlciBvcHRpb25zIGZpcnN0CisgICMgY291bGQgcHJvZHVjZSBlcnJvciBkaWFnbm9zdGljcywgYW5kIGluIHRoaXMgY29uZGl0aW9uIGl0IGlzCisgICMgY29uZnVzaW5nIGlmIEF1dG9tYWtlIGRvZXMgYGV4aXQgMCcuKQorICBteSAlY2xpX29wdGlvbnNfMXN0X3Bhc3MgPQorICAgICgKKyAgICAgJ3ZlcnNpb24nID0+IFwmdmVyc2lvbiwKKyAgICAgJ2hlbHAnICAgID0+IFwmdXNhZ2UsCisgICAgICMgUmVjb2duaXplIGFsbCBvdGhlciBvcHRpb25zIChhbmQgdGhlaXIgYXJndW1lbnRzKSBidXQgZG8gbm90aGluZy4KKyAgICAgbWFwIHsgJF8gPT4gc3ViIHt9IH0gKGtleXMgJWNsaV9vcHRpb25zKQorICAgICApOworICBteSBAQVJHVl9iYWNrdXAgPSBAQVJHVjsKKyAgR2V0b3B0OjpMb25nOjpHZXRPcHRpb25zICVjbGlfb3B0aW9uc18xc3RfcGFzcworICAgIG9yIGV4aXQgMTsKKyAgQEFSR1YgPSBAQVJHVl9iYWNrdXA7CisKKyAgIyBOb3cgKnJlYWxseSogcHJvY2VzcyB0aGUgb3B0aW9ucy4gIFRoaXMgdGltZSB3ZSBrbm93IHRoYXQgLS1oZWxwCisgICMgYW5kIC0tdmVyc2lvbiBhcmUgbm90IHByZXNlbnQsIGJ1dCB3ZSBzcGVjaWZ5IHRoZW0gbm9uZXRoZWxlc3Mgc28KKyAgIyB0aGF0IGFtYmlndW91cyBhYmJyZXZpYXRpb24gYXJlIGRpYWdub3NlZC4KKyAgR2V0b3B0OjpMb25nOjpHZXRPcHRpb25zICVjbGlfb3B0aW9ucywgJ3ZlcnNpb24nID0+IHN1YiB7fSwgJ2hlbHAnID0+IHN1YiB7fQorICAgIG9yIGV4aXQgMTsKKworICBpZiAoZGVmaW5lZCAkb3V0cHV0X2RpcmVjdG9yeSkKKyAgICB7CisgICAgICBtc2cgJ29ic29sZXRlJywgImAtLW91dHB1dC1kaXInIGlzIGRlcHJlY2F0ZWRcbiI7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgIyBJbiB0aGUgbmV4dCByZWxlYXNlIHdlJ2xsIHJlbW92ZSB0aGlzIGVudGlyZWx5LgorICAgICAgJG91dHB1dF9kaXJlY3RvcnkgPSAnLic7CisgICAgfQorCisgIHJldHVybiB1bmxlc3MgQEFSR1Y7CisKKyAgaWYgKCRBUkdWWzBdID1+IC9eLS4vKQorICAgIHsKKyAgICAgIG15ICVhcmdvcHRzOworICAgICAgZm9yIG15ICRrIChrZXlzICVjbGlfb3B0aW9ucykKKwl7CisJICBpZiAoJGsgPX4gLyguKik9cyQvKQorCSAgICB7CisJICAgICAgbWFwIHsgJGFyZ29wdHN7KGxlbmd0aCAoJF8pID09IDEpCisJCQkgICAgID8gIi0kXyIgOiAiLS0kXyIgfSA9IDE7IH0gKHNwbGl0ICgvXHwvLCAkMSkpOworCSAgICB9CisJfQorICAgICAgaWYgKCRBUkdWWzBdIGVxICctLScpCisJeworCSAgc2hpZnQgQEFSR1Y7CisJfQorICAgICAgZWxzaWYgKGV4aXN0cyAkYXJnb3B0c3skQVJHVlswXX0pCisJeworCSAgZmF0YWwgKCJvcHRpb24gYCRBUkdWWzBdJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorCQkgLiAiVHJ5IGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBmYXRhbCAoInVucmVjb2duaXplZCBvcHRpb24gYCRBUkdWWzBdJy5cbiIKKwkJIC4gIlRyeSBgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iKTsKKwl9CisgICAgfQorCisgIG15ICRlcnJzcGVjID0gMDsKKyAgZm9yZWFjaCBteSAkYXJnIChAQVJHVikKKyAgICB7CisgICAgICBmYXRhbCAoImVtcHR5IGFyZ3VtZW50XG5UcnkgYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIikKKwlpZiAoJGFyZyBlcSAnJyk7CisKKyAgICAgICMgSGFuZGxlICRsb2NhbDokaW5wdXQgc3ludGF4LgorICAgICAgbXkgKCRsb2NhbCwgQHJlc3QpID0gc3BsaXQgKC86LywgJGFyZyk7CisgICAgICBAcmVzdCA9ICgiJGxvY2FsLmluIiwpIHVubGVzcyBAcmVzdDsKKyAgICAgIG15ICRpbnB1dCA9IGxvY2F0ZV9hbSBAcmVzdDsKKyAgICAgIGlmICgkaW5wdXQpCisJeworCSAgcHVzaCBAaW5wdXRfZmlsZXMsICRpbnB1dDsKKwkgICRvdXRwdXRfZmlsZXN7JGlucHV0fSA9IGpvaW4gKCc6JywgKCRsb2NhbCwgQHJlc3QpKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgZXJyb3IgIm5vIEF1dG9tYWtlIGlucHV0IGZpbGUgZm91bmQgZm9yIGAkYXJnJyI7CisJICAkZXJyc3BlYyA9IDE7CisJfQorICAgIH0KKyAgZmF0YWwgIm5vIGlucHV0IGZpbGUgZm91bmQgYW1vbmcgc3VwcGxpZWQgYXJndW1lbnRzIgorICAgIGlmICRlcnJzcGVjICYmICEgQGlucHV0X2ZpbGVzOworfQorCisKKyMgaGFuZGxlX21ha2VmaWxlICgkTUFLRUZJTEVfSU4pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWFsIHdpdGggJE1BS0VGSUxFX0lOLgorc3ViIGhhbmRsZV9tYWtlZmlsZSAoJCkKK3sKKyAgbXkgKCRmaWxlKSA9ICBAXzsKKyAgKCRhbV9maWxlID0gJGZpbGUpID1+IHMvXC5pbiQvLzsKKyAgaWYgKCEgLWYgKCRhbV9maWxlIC4gJy5hbScpKQorICAgIHsKKyAgICAgIGVycm9yICJgJGFtX2ZpbGUuYW0nIGRvZXMgbm90IGV4aXN0IjsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAjIEFueSB3YXJuaW5nIHNldHRpbmcgbm93IGxvY2FsIHRvIHRoaXMgTWFrZWZpbGUuYW0uCisgICAgICBkdXBfY2hhbm5lbF9zZXR1cDsKKworICAgICAgZ2VuZXJhdGVfbWFrZWZpbGUgKCRhbV9maWxlIC4gJy5hbScsICRmaWxlKTsKKworICAgICAgIyBCYWNrIG91dCBhbnkgd2FybmluZyBzZXR0aW5nLgorICAgICAgZHJvcF9jaGFubmVsX3NldHVwOworICAgIH0KK30KKworIyBoYW5kbGVfbWFrZWZpbGVzX3NlcmlhbCAoKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWFsIHdpdGggYWxsIG1ha2VmaWxlcywgd2l0aG91dCB0aHJlYWRzLgorc3ViIGhhbmRsZV9tYWtlZmlsZXNfc2VyaWFsICgpCit7CisgIGZvcmVhY2ggbXkgJGZpbGUgKEBpbnB1dF9maWxlcykKKyAgICB7CisgICAgICBoYW5kbGVfbWFrZWZpbGUgKCRmaWxlKTsKKyAgICB9Cit9CisKKyMgZ2V0X251bWJlcl9vZl90aHJlYWRzICgpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMb2dpYyBmb3IgZGVjaWRpbmcgaG93IG1hbnkgd29ya2VyIHRocmVhZHMgdG8gdXNlLgorc3ViIGdldF9udW1iZXJfb2ZfdGhyZWFkcworeworICBteSAkbnRocmVhZHMgPSAkRU5WeydBVVRPTUFLRV9KT0JTJ30gfHwgMDsKKworICAkbnRocmVhZHMgPSAwCisgICAgdW5sZXNzICRudGhyZWFkcyA9fiAvXlswLTldKyQvOworCisgICMgSXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIHVzZSBtb3JlIHRocmVhZHMgdGhhbiBtYWtlZmlsZXMsCisgIG15ICRtYXhfdGhyZWFkcyA9IEBpbnB1dF9maWxlczsKKworICAjIGJ1dCBhIHNpbmdsZSB3b3JrZXIgdGhyZWFkIGlzIGhlbHBmdWwgZm9yIGV4cG9zaW5nIGJ1Z3MuCisgIGlmICgkYXV0b21ha2Vfd2lsbF9wcm9jZXNzX2F1eF9kaXIgJiYgJG1heF90aHJlYWRzID4gMSkKKyAgICB7CisgICAgICAkbWF4X3RocmVhZHMtLTsKKyAgICB9CisgIGlmICgkbnRocmVhZHMgPiAkbWF4X3RocmVhZHMpCisgICAgeworICAgICAgJG50aHJlYWRzID0gJG1heF90aHJlYWRzOworICAgIH0KKyAgcmV0dXJuICRudGhyZWFkczsKK30KKworIyBoYW5kbGVfbWFrZWZpbGVzX3RocmVhZGVkICgkTlRIUkVBRFMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVhbCB3aXRoIGFsbCBtYWtlZmlsZXMsIHVzaW5nIHRocmVhZHMuICBUaGUgZ2VuZXJhbCBzdHJhdGVneSBpcyB0bworIyBzcGF3biBOVEhSRUFEUyB3b3JrZXIgdGhyZWFkcywgZGlzcGF0Y2ggbWFrZWZpbGVzIHRvIHRoZW0sIGFuZCBsZXQgdGhlCisjIHdvcmtlciB0aHJlYWRzIHB1c2ggYmFjayBldmVyeXRoaW5nIHRoYXQgbmVlZHMgc2VyaWFsaXphdGlvbjoKKyMgKiB3YXJuaW5nIGFuZCAobm9ybWFsKSBlcnJvciBtZXNzYWdlcywgZm9yIHN0YWJsZSBzdGRlcnIgb3V0cHV0CisjICAgb3JkZXIgYW5kIGNvbnRlbnQgKGF2b2lkaW5nIGR1cGxpY2F0ZXMsIGZvciBleGFtcGxlKSwKKyMgKiByYWNlcyB3aGVuIGluc3RhbGxpbmcgYXV4IGZpbGVzIChhbmQgcmVzcGVjdGl2ZSBtZXNzYWdlcyksCisjICogcmFjZXMgd2hlbiBjb2xsZWN0aW5nIGF1eCBmaWxlcyBmb3IgZGlzdHJpYnV0aW9uLgorIworIyBUaGUgbGF0dGVyIHJlcXVpcmVzIHRoYXQgdGhlIG1ha2VmaWxlIHRoYXQgZGVhbHMgd2l0aCB0aGUgYXV4IGRpcgorIyBmaWxlcyBiZSBoYW5kbGVkIGxhc3QsIGRvbmUgYnkgdGhlIG1hc3RlciB0aHJlYWQuCitzdWIgaGFuZGxlX21ha2VmaWxlc190aHJlYWRlZCAoJCkKK3sKKyAgbXkgKCRudGhyZWFkcykgPSBAXzsKKworICBteSBAcXVldWVkX2lucHV0X2ZpbGVzID0gQGlucHV0X2ZpbGVzOworICBteSAkbGFzdF9pbnB1dF9maWxlID0gdW5kZWY7CisgIGlmICgkYXV0b21ha2Vfd2lsbF9wcm9jZXNzX2F1eF9kaXIpCisgICAgeworICAgICAgJGxhc3RfaW5wdXRfZmlsZSA9IHBvcCBAcXVldWVkX2lucHV0X2ZpbGVzOworICAgIH0KKworICAjIFRoZSBmaWxlIHF1ZXVlIGRpc3RyaWJ1dGVzIGFsbCBtYWtlZmlsZXMsIHRoZSBtZXNzYWdlIHF1ZXVlcworICAjIGNvbGxlY3QgYWxsIHNlcmlhbGl6YXRpb25zIG5lZWRlZCBmb3IgcmVzcGVjdGl2ZSBmaWxlcy4KKyAgbXkgJGZpbGVfcXVldWUgPSBUaHJlYWQ6OlF1ZXVlLT5uZXc7CisgIG15ICVtc2dfcXVldWVzOworICBmb3JlYWNoIG15ICRmaWxlIChAcXVldWVkX2lucHV0X2ZpbGVzKQorICAgIHsKKyAgICAgICRtc2dfcXVldWVzeyRmaWxlfSA9IFRocmVhZDo6UXVldWUtPm5ldzsKKyAgICB9CisKKyAgdmVyYiAic3Bhd25pbmcgJG50aHJlYWRzIHdvcmtlciB0aHJlYWRzIjsKKyAgbXkgQHRocmVhZHMgPSAoMSAuLiAkbnRocmVhZHMpOworICBmb3JlYWNoIG15ICR0IChAdGhyZWFkcykKKyAgICB7CisgICAgICAkdCA9IHRocmVhZHMtPm5ldyAoc3ViCisJeworCSAgd2hpbGUgKG15ICRmaWxlID0gJGZpbGVfcXVldWUtPmRlcXVldWUpCisJICAgIHsKKwkgICAgICB2ZXJiICJoYW5kbGluZyAkZmlsZSI7CisJICAgICAgbXkgJHF1ZXVlID0gJG1zZ19xdWV1ZXN7JGZpbGV9OworCSAgICAgIHNldHVwX2NoYW5uZWxfcXVldWUgKCRxdWV1ZSwgUVVFVUVfTUVTU0FHRSk7CisJICAgICAgJHJlcXVpcmVkX2NvbmZfZmlsZV9xdWV1ZSA9ICRxdWV1ZTsKKwkgICAgICBoYW5kbGVfbWFrZWZpbGUgKCRmaWxlKTsKKwkgICAgICAkcXVldWUtPmVucXVldWUgKHVuZGVmKTsKKwkgICAgICBzZXR1cF9jaGFubmVsX3F1ZXVlICh1bmRlZiwgdW5kZWYpOworCSAgICAgICRyZXF1aXJlZF9jb25mX2ZpbGVfcXVldWUgPSB1bmRlZjsKKwkgICAgfQorCSAgcmV0dXJuICRleGl0X2NvZGU7CisJfSk7CisgICAgfQorCisgICMgUXVldWUgYWxsIG5vcm1hbCBtYWtlZmlsZXMuCisgIHZlcmIgInF1ZXVpbmcgIiAuIEBxdWV1ZWRfaW5wdXRfZmlsZXMgLiAiIGlucHV0IGZpbGVzIjsKKyAgJGZpbGVfcXVldWUtPmVucXVldWUgKEBxdWV1ZWRfaW5wdXRfZmlsZXMsICh1bmRlZikgeCBAdGhyZWFkcyk7CisKKyAgIyBDb2xsZWN0IGFuZCBwcm9jZXNzIHNlcmlhbGl6YXRpb25zLgorICBmb3JlYWNoIG15ICRmaWxlIChAcXVldWVkX2lucHV0X2ZpbGVzKQorICAgIHsKKyAgICAgIHZlcmIgImRlcXVldWluZyBtZXNzYWdlcyBmb3IgIiAuICRmaWxlOworICAgICAgcmVzZXRfbG9jYWxfZHVwbGljYXRlcyAoKTsKKyAgICAgIG15ICRxdWV1ZSA9ICRtc2dfcXVldWVzeyRmaWxlfTsKKyAgICAgIHdoaWxlIChteSAka2V5ID0gJHF1ZXVlLT5kZXF1ZXVlKQorCXsKKwkgIGlmICgka2V5IGVxIFFVRVVFX01FU1NBR0UpCisJICAgIHsKKwkgICAgICBwb3BfY2hhbm5lbF9xdWV1ZSAoJHF1ZXVlKTsKKwkgICAgfQorCSAgZWxzaWYgKCRrZXkgZXEgUVVFVUVfQ09ORl9GSUxFKQorCSAgICB7CisJICAgICAgcmVxdWlyZV9xdWV1ZWRfY29uZl9maWxlICgkcXVldWUpOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBwcm9nX2Vycm9yICJ1bmV4cGVjdGVkIGtleSAka2V5IjsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgZm9yZWFjaCBteSAkdCAoQHRocmVhZHMpCisgICAgeworICAgICAgbXkgQGV4aXRfdGhyZWFkID0gJHQtPmpvaW47CisgICAgICAkZXhpdF9jb2RlID0gJGV4aXRfdGhyZWFkWzBdCisJaWYgKCRleGl0X3RocmVhZFswXSA+ICRleGl0X2NvZGUpOworICAgIH0KKworICAjIFRoZSBtYXN0ZXIgcHJvY2Vzc2VzIHRoZSBsYXN0IGZpbGUuCisgIGlmICgkYXV0b21ha2Vfd2lsbF9wcm9jZXNzX2F1eF9kaXIpCisgICAgeworICAgICAgdmVyYiAicHJvY2Vzc2luZyBsYXN0IGlucHV0IGZpbGUiOworICAgICAgaGFuZGxlX21ha2VmaWxlICgkbGFzdF9pbnB1dF9maWxlKTsKKyAgICB9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBQYXJzZSB0aGUgV0FSTklOR1MgZW52aXJvbm1lbnQgdmFyaWFibGUuCitwYXJzZV9XQVJOSU5HUzsKKworIyBQYXJzZSBjb21tYW5kIGxpbmUuCitwYXJzZV9hcmd1bWVudHM7CisKKyRjb25maWd1cmVfYWMgPSByZXF1aXJlX2NvbmZpZ3VyZV9hYzsKKworIyBEbyBjb25maWd1cmUuYWMgc2NhbiBvbmx5IG9uY2UuCitzY2FuX2F1dG9jb25mX2ZpbGVzOworCitpZiAoISBAaW5wdXRfZmlsZXMpCisgIHsKKyAgICBteSAkbXNnID0gJyc7CisgICAgJG1zZyA9ICJcbkRpZCB5b3UgZm9yZ2V0IEFDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGVdKSBpbiAkY29uZmlndXJlX2FjPyIKKyAgICAgIGlmIC1mICdNYWtlZmlsZS5hbSc7CisgICAgZmF0YWwgKCJubyBgTWFrZWZpbGUuYW0nIGZvdW5kIGZvciBhbnkgY29uZmlndXJlIG91dHB1dCRtc2ciKTsKKyAgfQorCitteSAkbnRocmVhZHMgPSBnZXRfbnVtYmVyX29mX3RocmVhZHMgKCk7CisKK2lmICgkcGVybF90aHJlYWRzICYmICRudGhyZWFkcyA+PSAxKQorICB7CisgICAgaGFuZGxlX21ha2VmaWxlc190aHJlYWRlZCAoJG50aHJlYWRzKTsKKyAgfQorZWxzZQorICB7CisgICAgaGFuZGxlX21ha2VmaWxlc19zZXJpYWwgKCk7CisgIH0KKworZXhpdCAkZXhpdF9jb2RlOworCisKKyMjIyBTZXR1cCAiR05VIiBzdHlsZSBmb3IgcGVybC1tb2RlIGFuZCBjcGVybC1tb2RlLgorIyMgTG9jYWwgVmFyaWFibGVzOgorIyMgcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIHBlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIHBlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2UtaW1hZ2luYXJ5LW9mZnNldDogMAorIyMgcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIGNwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtZXh0cmEtbmV3bGluZS1iZWZvcmUtYnJhY2U6IHQKKyMjIGNwZXJsLW1lcmdlLXRyYWlsaW5nLWVsc2U6IG5pbAorIyMgY3BlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIEVuZDoKZGlmZiAtLWdpdCBhL2Jpbi9hdXRvbWFrZS0xLjExIGIvYmluL2F1dG9tYWtlLTEuMTEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjI5YzFmYQotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hdXRvbWFrZS0xLjExCkBAIC0wLDAgKzEsODcyMiBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjIC0qLSBwZXJsIC0qLQorIyBHZW5lcmF0ZWQgZnJvbSBhdXRvbWFrZS5pbjsgZG8gbm90IGVkaXQgYnkgaGFuZC4KKworZXZhbCAnY2FzZSAkIyBpbiAwKSBleGVjIC91c3IvYmluL3BlcmwgLVMgIiQwIjs7ICopIGV4ZWMgL3Vzci9iaW4vcGVybCAtUyAiJDAiICIkQCI7OyBlc2FjJworICAgIGlmIDA7CisKKyMgYXV0b21ha2UgLSBjcmVhdGUgTWFrZWZpbGUuaW4gZnJvbSBNYWtlZmlsZS5hbQorIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgRGF2aWQgTWFja2VuemllIDxkam1AZ251LmFpLm1pdC5lZHU+LgorIyBQZXJsIHJlaW1wbGVtZW50YXRpb24gYnkgVG9tIFRyb21leSA8dHJvbWV5QHJlZGhhdC5jb20+LCBhbmQKKyMgQWxleGFuZHJlIER1cmV0LUx1dHogPGFkbEBnbnUub3JnPi4KKworcGFja2FnZSBMYW5ndWFnZTsKKworQkVHSU4KK3sKKyAgbXkgJHBlcmxsaWJkaXIgPSAkRU5WeydwZXJsbGliZGlyJ30gfHwgJy91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9ob3N0L3Vzci9zaGFyZS9hdXRvbWFrZS0xLjExJzsKKyAgdW5zaGlmdCBASU5DLCAoc3BsaXQgJzonLCAkcGVybGxpYmRpcik7CisKKyAgIyBPdmVycmlkZSBTSEVMTC4gIFRoaXMgaXMgcmVxdWlyZWQgb24gREpHUFAgc28gdGhhdCBzeXN0ZW0oKSB1c2VzCisgICMgYmFzaCwgbm90IENPTU1BTkQuQ09NIHdoaWNoIGRvZXNuJ3QgcXVvdGUgYXJndW1lbnRzIHByb3Blcmx5LgorICAjIE90aGVyIHN5c3RlbXMgYXJlbid0IGV4cGVjdGVkIHRvIHVzZSAkU0hFTEwgd2hlbiBBdXRvbWFrZQorICAjIHJ1bnMsIGJ1dCBpdCBzaG91bGQgYmUgc2FmZSB0byBkcm9wIHRoZSBgaWYgREpHUFAnIGd1YXJkIGlmCisgICMgaXQgdHVybnMgdXAgb3RoZXIgc3lzdGVtcyBuZWVkIHRoZSBzYW1lIHRoaW5nLiAgQWZ0ZXIgYWxsLAorICAjIGlmIFNIRUxMIGlzIHVzZWQsIC4vY29uZmlndXJlJ3MgU0hFTEwgaXMgYWx3YXlzIGJldHRlciB0aGFuCisgICMgdGhlIHVzZXIncyBTSEVMTCAod2hpY2ggbWF5IGJlIHNvbWV0aGluZyBsaWtlIHRjc2gpLgorICAkRU5WeydTSEVMTCd9ID0gJy9iaW4vc2gnIGlmIGV4aXN0cyAkRU5WeydESkRJUid9OworfQorCit1c2UgQXV0b21ha2U6OlN0cnVjdDsKK3N0cnVjdCAoIyBTaG9ydCBuYW1lIG9mIHRoZSBsYW5ndWFnZSAoYywgZjc3Li4uKS4KKwknbmFtZScgPT4gIlwkIiwKKwkjIE5pY2UgbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgKEMsIEZvcnRyYW4gNzcuLi4pLgorCSdOYW1lJyA9PiAiXCQiLAorCisJIyBMaXN0IG9mIGNvbmZpZ3VyZSB2YXJpYWJsZXMgd2hpY2ggbXVzdCBiZSBkZWZpbmVkLgorCSdjb25maWdfdmFycycgPT4gJ0AnLAorCisJJ2Fuc2knICAgID0+ICJcJCIsCisJIyBgcHVyZScgaXMgYDEnIG9yIGAnLiAgQSBgcHVyZScgbGFuZ3VhZ2UgaXMgb25lIHdoZXJlLCBpZgorCSMgYWxsIHRoZSBmaWxlcyBpbiBhIGRpcmVjdG9yeSBhcmUgb2YgdGhhdCBsYW5ndWFnZSwgdGhlbiB3ZQorCSMgZG8gbm90IHJlcXVpcmUgdGhlIEMgY29tcGlsZXIgb3IgYW55IGNvZGUgdG8gY2FsbCBpdC4KKwkncHVyZScgICA9PiAiXCQiLAorCisJJ2F1dG9kZXAnID0+ICJcJCIsCisKKwkjIE5hbWUgb2YgdGhlIGNvbXBpbGluZyB2YXJpYWJsZSAoQ09NUElMRSkuCisJJ2NvbXBpbGVyJyAgPT4gIlwkIiwKKwkjIENvbnRlbnQgb2YgdGhlIGNvbXBpbGluZyB2YXJpYWJsZS4KKwknY29tcGlsZScgID0+ICJcJCIsCisJIyBGbGFnIHRvIHJlcXVpcmUgY29tcGlsYXRpb24gd2l0aG91dCBsaW5raW5nICgtYykuCisJJ2NvbXBpbGVfZmxhZycgPT4gIlwkIiwKKwknZXh0ZW5zaW9ucycgPT4gJ0AnLAorCSMgQSBzdWJyb3V0aW5lIHRvIGNvbXB1dGUgYSBsaXN0IG9mIHBvc3NpYmxlIGV4dGVuc2lvbnMgb2YKKwkjIHRoZSBwcm9kdWN0IGdpdmVuIHRoZSBpbnB1dCBleHRlbnNpb25zLgorCSMgKGRlZmF1bHRzIHRvIGEgc3Vicm91dGluZSB3aGljaCByZXR1cm5zICgnLiQoT0JKRVhUKScsICcubG8nKSkKKwknb3V0cHV0X2V4dGVuc2lvbnMnID0+ICJcJCIsCisJIyBBIGxpc3Qgb2YgZmxhZyB2YXJpYWJsZXMgdXNlZCBpbiAnY29tcGlsZScuCisJIyAoZGVmYXVsdHMgdG8gW10pCisJJ2ZsYWdzJyA9PiAiQCIsCisKKwkjIEFueSB0YWcgdG8gcGFzcyB0byBsaWJ0b29sIHdoaWxlIGNvbXBpbGluZy4KKwknbGlidG9vbF90YWcnID0+ICJcJCIsCisKKwkjIFRoZSBmaWxlIHRvIHVzZSB3aGVuIGdlbmVyYXRpbmcgcnVsZXMgZm9yIHRoaXMgbGFuZ3VhZ2UuCisJIyBUaGUgZGVmYXVsdCBpcyAnZGVwZW5kMicuCisJJ3J1bGVfZmlsZScgPT4gIlwkIiwKKworCSMgTmFtZSBvZiB0aGUgbGlua2luZyB2YXJpYWJsZSAoTElOSykuCisJJ2xpbmtlcicgPT4gIlwkIiwKKwkjIENvbnRlbnQgb2YgdGhlIGxpbmtpbmcgdmFyaWFibGUuCisJJ2xpbmsnID0+ICJcJCIsCisKKwkjIE5hbWUgb2YgdGhlIGNvbXBpbGVyIHZhcmlhYmxlIChDQykuCisJJ2NjZXInID0+ICJcJCIsCisKKwkjIE5hbWUgb2YgdGhlIGxpbmtlciB2YXJpYWJsZSAoTEQpLgorCSdsZGVyJyA9PiAiXCQiLAorCSMgQ29udGVudCBvZiB0aGUgbGlua2VyIHZhcmlhYmxlICgkKENDKSkuCisJJ2xkJyA9PiAiXCQiLAorCisJIyBGbGFnIHRvIHNwZWNpZnkgdGhlIG91dHB1dCBmaWxlICgtbykuCisJJ291dHB1dF9mbGFnJyA9PiAiXCQiLAorCSdfZmluaXNoJyA9PiAiXCQiLAorCisJIyBUaGlzIGlzIGEgc3Vicm91dGluZSB3aGljaCBpcyBjYWxsZWQgd2hlbmV2ZXIgd2UgZmluYWxseQorCSMgZGV0ZXJtaW5lIHRoZSBjb250ZXh0IGluIHdoaWNoIGEgc291cmNlIGZpbGUgd2lsbCBiZQorCSMgY29tcGlsZWQuCisJJ190YXJnZXRfaG9vaycgPT4gIlwkIiwKKworCSMgSWYgVFJVRSwgbm9kaXN0XyBzb3VyY2VzIHdpbGwgYmUgY29tcGlsZWQgdXNpbmcgc3BlY2lmaWMgcnVsZXMKKwkjIChpLmUuIG5vdCBpbmZlcmVuY2UgcnVsZXMpLiAgVGhlIGRlZmF1bHQgaXMgRkFMU0UuCisJJ25vZGlzdF9zcGVjaWZpYycgPT4gIlwkIik7CisKKworc3ViIGZpbmlzaCAoJCkKK3sKKyAgbXkgKCRzZWxmKSA9IEBfOworICBpZiAoZGVmaW5lZCAkc2VsZi0+X2ZpbmlzaCkKKyAgICB7CisgICAgICAmeyRzZWxmLT5fZmluaXNofSAoQF8pOworICAgIH0KK30KKworc3ViIHRhcmdldF9ob29rICgkJCQkJSkKK3sKKyAgICBteSAoJHNlbGYpID0gQF87CisgICAgaWYgKGRlZmluZWQgJHNlbGYtPl90YXJnZXRfaG9vaykKKyAgICB7CisJJnskc2VsZi0+X3RhcmdldF9ob29rfSAoQF8pOworICAgIH0KK30KKworcGFja2FnZSBBdXRvbWFrZTsKKwordXNlIHN0cmljdDsKK3VzZSBBdXRvbWFrZTo6Q29uZmlnOworQkVHSU4KK3sKKyAgaWYgKCRwZXJsX3RocmVhZHMpCisgICAgeworICAgICAgcmVxdWlyZSB0aHJlYWRzOworICAgICAgaW1wb3J0IHRocmVhZHM7CisgICAgICByZXF1aXJlIFRocmVhZDo6UXVldWU7CisgICAgICBpbXBvcnQgVGhyZWFkOjpRdWV1ZTsKKyAgICB9Cit9Cit1c2UgQXV0b21ha2U6OkdlbmVyYWw7Cit1c2UgQXV0b21ha2U6OlhGaWxlOwordXNlIEF1dG9tYWtlOjpDaGFubmVsczsKK3VzZSBBdXRvbWFrZTo6Q2hhbm5lbERlZnM7Cit1c2UgQXV0b21ha2U6OkNvbmZpZ3VyZV9hYzsKK3VzZSBBdXRvbWFrZTo6RmlsZVV0aWxzOwordXNlIEF1dG9tYWtlOjpMb2NhdGlvbjsKK3VzZSBBdXRvbWFrZTo6Q29uZGl0aW9uIHF3L1RSVUUgRkFMU0UvOwordXNlIEF1dG9tYWtlOjpEaXNqQ29uZGl0aW9uczsKK3VzZSBBdXRvbWFrZTo6T3B0aW9uczsKK3VzZSBBdXRvbWFrZTo6VmVyc2lvbjsKK3VzZSBBdXRvbWFrZTo6VmFyaWFibGU7Cit1c2UgQXV0b21ha2U6OlZhckRlZjsKK3VzZSBBdXRvbWFrZTo6UnVsZTsKK3VzZSBBdXRvbWFrZTo6UnVsZURlZjsKK3VzZSBBdXRvbWFrZTo6V3JhcCAnbWFrZWZpbGVfd3JhcCc7Cit1c2UgRmlsZTo6QmFzZW5hbWU7Cit1c2UgRmlsZTo6U3BlYzsKK3VzZSBDYXJwOworCisjIyAtLS0tLS0tLS0tLSAjIworIyMgQ29uc3RhbnRzLiAgIyMKKyMjIC0tLS0tLS0tLS0tICMjCisKKyMgU29tZSByZWd1bGFyIGV4cHJlc3Npb25zLiAgT25lIHJlYXNvbiB0byBwdXQgdGhlbSBoZXJlIGlzIHRoYXQgaXQKKyMgbWFrZXMgaW5kZW50YXRpb24gd29yayBiZXR0ZXIgaW4gRW1hY3MuCisKKyMgV3JpdGluZyBzaW5nbGVkLXF1b3RlZC0kLXRlcm1pbmF0ZWQgcmVnZXhlcyBpcyBhIHBhaW4gYmVjYXVzZQorIyBwZXJsLW1vZGUgdGhpbmtzIG9mICQnIGFzIHRoZSAkeyd9IHZhcmlhYmxlIChpbnN0ZWFkIG9mIGEgJCBmb2xsb3dlZAorIyBieSBhIGNsb3NpbmcgcXVvdGUuICBMZXR0aW5nIHBlcmwtbW9kZSB0aGluayB0aGUgcXVvdGUgaXMgbm90IGNsb3NlZAorIyBsZWFkcyB0byBhbGwgc29ydCBvZiBtaXNpbmRlbnRhdGlvbnMuICBPbiB0aGUgb3RoZXIgaGFuZCwgZGVmaW5pbmcKKyMgcmVnZXhlcyBhcyBkb3VibGUtcXVvdGVkIHN0cmluZ3MgaXMgZmFyIGxlc3MgcmVhZGFibGUuICBTbyB1c3VhbGx5CisjIHdlIHdpbGwgd3JpdGU6CisjCisjICAkUkVHRVggPSAnXnJlZ2V4X3ZhbHVlJyAuICJcJCI7CisKK215ICRJR05PUkVfUEFUVEVSTiA9ICdeXHMqIyMoW14jXG5dLiopP1xuJzsKK215ICRXSElURV9QQVRURVJOID0gJ15ccyonIC4gIlwkIjsKK215ICRDT01NRU5UX1BBVFRFUk4gPSAnXiMnOworbXkgJFRBUkdFVF9QQVRURVJOPSdbJGEtekEtWjAtOV8uQCVdWy0uYS16QS1aMC05Xygpe30vJCtAJV0qJzsKKyMgQSBydWxlIGhhcyB0aHJlZSBwYXJ0czogYSBsaXN0IG9mIHRhcmdldHMsIGEgbGlzdCBvZiBkZXBlbmRlbmNpZXMsCisjIGFuZCBvcHRpb25hbGx5IGFjdGlvbnMuCitteSAkUlVMRV9QQVRURVJOID0KKyAgIl4oJFRBUkdFVF9QQVRURVJOKD86KD86XFxcXFxufFxccykrJFRBUkdFVF9QQVRURVJOKSopICo6KFtePV0uKnwpXCQiOworCisjIE9ubHkgcmVjb2duaXplIGxlYWRpbmcgc3BhY2VzLCBub3QgbGVhZGluZyB0YWJzLiAgSWYgd2UgcmVjb2duaXplCisjIGxlYWRpbmcgdGFicyBoZXJlIHRoZW4gd2UgbmVlZCB0byBtYWtlIHRoZSByZWFkZXIgc21hcnRlciwgYmVjYXVzZQorIyBvdGhlcndpc2UgaXQgd2lsbCB0aGluayBydWxlcyBsaWtlIGBmb289YmFyOyBcJyBhcmUgZXJyb3JzLgorbXkgJEFTU0lHTk1FTlRfUEFUVEVSTiA9ICdeICooW14gXHQ9OitdKilccyooWzorXT8pPVxzKiguKiknIC4gIlwkIjsKKyMgVGhpcyBwYXR0ZXJuIHJlY29nbml6ZXMgYSBHbml0cyB2ZXJzaW9uIGlkIGFuZCBzZXRzICQxIGlmIHRoZQorIyByZWxlYXNlIGlzIGFuIGFscGhhIHJlbGVhc2UuICBXZSBhbHNvIGFsbG93IGEgc3VmZml4IHdoaWNoIGNhbiBiZQorIyB1c2VkIHRvIGV4dGVuZCB0aGUgdmVyc2lvbiBudW1iZXIgd2l0aCBhICJmb3JrIiBpZGVudGlmaWVyLgorbXkgJEdOSVRTX1ZFUlNJT05fUEFUVEVSTiA9ICdcZCtcLlxkKyhbYS16XXxcLlxkKyk/KC1bQS1aYS16MC05XSspPyc7CisKK215ICRJRl9QQVRURVJOID0gJ15pZlxzKyghPylccyooW0EtWmEtel1bQS1aYS16MC05X10qKVxzKig/OiMuKik/JyAuICJcJCI7CitteSAkRUxTRV9QQVRURVJOID0KKyAgJ15lbHNlKD86XHMrKCE/KVxzKihbQS1aYS16XVtBLVphLXowLTlfXSopKT9ccyooPzojLiopPycgLiAiXCQiOworbXkgJEVORElGX1BBVFRFUk4gPQorICAnXmVuZGlmKD86XHMrKCE/KVxzKihbQS1aYS16XVtBLVphLXowLTlfXSopKT9ccyooPzojLiopPycgLiAiXCQiOworbXkgJFBBVEhfUEFUVEVSTiA9ICcoXHd8WysvLi1dKSsnOworIyBUaGlzIHdpbGwgcGFzcyB0aHJvdWdoIGFueXRoaW5nIG5vdCBvZiB0aGUgcHJlc2NyaWJlZCBmb3JtLgorbXkgJElOQ0xVREVfUEFUVEVSTiA9ICgnXmluY2x1ZGVccysnCisJCSAgICAgICAuICcoKFwkXCh0b3Bfc3JjZGlyXCkvJyAuICRQQVRIX1BBVFRFUk4gLiAnKScKKwkJICAgICAgIC4gJ3woXCRcKHNyY2RpclwpLycgLiAkUEFUSF9QQVRURVJOIC4gJyknCisJCSAgICAgICAuICd8KFteL1wkXScgLiAkUEFUSF9QQVRURVJOIC4gJykpXHMqKCMuKik/JyAuICJcJCIpOworCisjIE1hdGNoIGAtZCcgYXMgYSBjb21tYW5kLWxpbmUgYXJndW1lbnQgaW4gYSBzdHJpbmcuCitteSAkREFTSF9EX1BBVFRFUk4gPSAiKF58XFxzKS1kKFxcc3xcJCkiOworIyBEaXJlY3RvcmllcyBpbnN0YWxsZWQgZHVyaW5nICdpbnN0YWxsLWV4ZWMnIHBoYXNlLgorbXkgJEVYRUNfRElSX1BBVFRFUk4gPQorICAnXig/OmJpbnxzYmlufGxpYmV4ZWN8c3lzY29uZnxsb2NhbHN0YXRlfGxpYnxwa2dsaWJ8LipleGVjLiopJyAuICJcJCI7CisKKyMgVmFsdWVzIGZvciBBQ19DQU5PTklDQUxfKgordXNlIGNvbnN0YW50IEFDX0NBTk9OSUNBTF9CVUlMRCAgPT4gMTsKK3VzZSBjb25zdGFudCBBQ19DQU5PTklDQUxfSE9TVCAgID0+IDI7Cit1c2UgY29uc3RhbnQgQUNfQ0FOT05JQ0FMX1RBUkdFVCA9PiAzOworCisjIFZhbHVlcyBpbmRpY2F0aW5nIHdoZW4gc29tZXRoaW5nIHNob3VsZCBiZSBjbGVhbmVkLgordXNlIGNvbnN0YW50IE1PU1RMWV9DTEVBTiAgICAgPT4gMDsKK3VzZSBjb25zdGFudCBDTEVBTiAgICAgICAgICAgID0+IDE7Cit1c2UgY29uc3RhbnQgRElTVF9DTEVBTiAgICAgICA9PiAyOwordXNlIGNvbnN0YW50IE1BSU5UQUlORVJfQ0xFQU4gPT4gMzsKKworIyBMaWJ0b29sIGZpbGVzLgorbXkgQGxpYnRvb2xfZmlsZXMgPSBxdyhsdG1haW4uc2ggY29uZmlnLmd1ZXNzIGNvbmZpZy5zdWIpOworIyBsdGNvbmZpZyBhcHBlYXJzIGhlcmUgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgdmVyc2lvbnMgb2YgbGlidG9vbC4KK215IEBsaWJ0b29sX3NvbWV0aW1lcyA9IHF3KGx0Y29uZmlnIGx0Y2YtYy5zaCBsdGNmLWN4eC5zaCBsdGNmLWdjai5zaCk7CisKKyMgQ29tbW9ubHkgZm91bmQgZmlsZXMgd2UgbG9vayBmb3IgYW5kIGF1dG9tYXRpY2FsbHkgaW5jbHVkZSBpbgorIyBESVNURklMRVMuCitteSBAY29tbW9uX2ZpbGVzID0KKyAgICAocXcoQUJPVVQtR05VIEFCT1VULU5MUyBBVVRIT1JTIEJBQ0tMT0cgQ09QWUlORyBDT1BZSU5HLkRPQyBDT1BZSU5HLkxJQgorCUNPUFlJTkcuTEVTU0VSIENoYW5nZUxvZyBJTlNUQUxMIE5FV1MgUkVBRE1FIFRIQU5LUyBUT0RPCisJYW5zaTJrbnIuMSBhbnNpMmtuci5jIGNvbXBpbGUgY29uZmlnLmd1ZXNzIGNvbmZpZy5ycGF0aCBjb25maWcuc3ViCisJZGVwY29tcCBlbGlzcC1jb21wIGluc3RhbGwtc2ggbGlidmVyc2lvbi5pbiBtZGF0ZS1zaCBtaXNzaW5nCisJbWtpbnN0YWxsZGlycyBweS1jb21waWxlIHRleGluZm8udGV4IHlsd3JhcCksCisgICAgIEBsaWJ0b29sX2ZpbGVzLCBAbGlidG9vbF9zb21ldGltZXMpOworCisjIENvbW1vbmx5IHVzZWQgZmlsZXMgd2UgYXV0by1pbmNsdWRlLCBidXQgb25seSBzb21ldGltZXMuICBUaGlzIGxpc3QKKyMgaXMgdXNlZCBmb3IgdGhlIC0taGVscCBvdXRwdXQgb25seS4KK215IEBjb21tb25fc29tZXRpbWVzID0KKyAgcXcoYWNsb2NhbC5tNCBhY2NvbmZpZy5oIGNvbmZpZy5oLnRvcCBjb25maWcuaC5ib3QgY29uZmlndXJlCisgICAgIGNvbmZpZ3VyZS5hYyBjb25maWd1cmUuaW4gc3RhbXAtdnRpKTsKKworIyBTdGFuZGFyZCBkaXJlY3RvcmllcyBmcm9tIHRoZSBHTlUgQ29kaW5nIFN0YW5kYXJkcywgYW5kIGFkZGl0aW9uYWwKKyMgcGtnKiBkaXJlY3RvcmllcyBmcm9tIEF1dG9tYWtlLiAgU3RvcmVkIGluIGEgaGFzaCBmb3IgZmFzdCBtZW1iZXIgY2hlY2suCitteSAlc3RhbmRhcmRfcHJlZml4ID0KKyAgICBtYXAgeyAkXyA9PiAxIH0gKHF3KGJpbiBkYXRhIGRhdGFyb290IGR2aSBleGVjIGh0bWwgaW5jbHVkZSBpbmZvCisJCQlsaWIgbGliZXhlYyBsaXNwIGxvY2Fsc3RhdGUgbWFuIG1hbjEgbWFuMiBtYW4zCisJCQltYW40IG1hbjUgbWFuNiBtYW43IG1hbjggbWFuOSBvbGRpbmNsdWRlIHBkZgorCQkJcGtnZGF0YWRpciBwa2dpbmNsdWRlZGlyIHBrZ2xpYmRpciBwa2dsaWJleGVjZGlyCisJCQlwcyBzYmluIHNoYXJlZHN0YXRlIHN5c2NvbmYpKTsKKworIyBDb3B5cmlnaHQgb24gZ2VuZXJhdGVkIE1ha2VmaWxlLmlucy4KK215ICRnZW5fY29weXJpZ2h0ID0gIlwKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisiOworCisjIFRoZXNlIGNvbnN0YW50cyBhcmUgcmV0dXJuZWQgYnkgdGhlIGxhbmdfKl9yZXdyaXRlIGZ1bmN0aW9ucy4KKyMgTEFOR19TVUJESVIgbWVhbnMgdGhhdCB0aGUgcmVzdWx0aW5nIG9iamVjdCBmaWxlIHNob3VsZCBiZSBpbiBhCisjIHN1YmRpciBpZiB0aGUgc291cmNlIGZpbGUgaXMuICBJbiB0aGlzIGNhc2UgdGhlIGZpbGUgbmFtZSBjYW5ub3QKKyMgaGF2ZSBgLi4nIGNvbXBvbmVudHMuCit1c2UgY29uc3RhbnQgTEFOR19JR05PUkUgID0+IDA7Cit1c2UgY29uc3RhbnQgTEFOR19QUk9DRVNTID0+IDE7Cit1c2UgY29uc3RhbnQgTEFOR19TVUJESVIgID0+IDI7CisKKyMgVGhlc2UgYXJlIHVzZWQgd2hlbiBrZWVwaW5nIHRyYWNrIG9mIHdoZXRoZXIgYW4gb2JqZWN0IGNhbiBiZSBidWlsdAorIyBieSB0d28gZGlmZmVyZW50IHBhdGhzLgordXNlIGNvbnN0YW50IENPTVBJTEVfTElCVE9PTCAgPT4gMTsKK3VzZSBjb25zdGFudCBDT01QSUxFX09SRElOQVJZID0+IDI7CisKKyMgV2UgY2FuJ3QgYWx3YXlzIGFzc29jaWF0ZSBhIGxvY2F0aW9uIHRvIGEgdmFyaWFibGUgb3IgYSBydWxlLAorIyB3aGVuIGl0J3MgZGVmaW5lZCBieSBBdXRvbWFrZS4gIFdlIHVzZSBJTlRFUk5BTCBpbiB0aGlzIGNhc2UuCit1c2UgY29uc3RhbnQgSU5URVJOQUwgPT4gbmV3IEF1dG9tYWtlOjpMb2NhdGlvbjsKKworIyBTZXJpYWxpemF0aW9uIGtleXMgZm9yIG1lc3NhZ2UgcXVldWVzLgordXNlIGNvbnN0YW50IFFVRVVFX01FU1NBR0UgICA9PiAibXNnIjsKK3VzZSBjb25zdGFudCBRVUVVRV9DT05GX0ZJTEUgPT4gImNvbmYgZmlsZSI7Cit1c2UgY29uc3RhbnQgUVVFVUVfTE9DQVRJT04gID0+ICJsb2NhdGlvbiI7Cit1c2UgY29uc3RhbnQgUVVFVUVfU1RSSU5HICAgID0+ICJzdHJpbmciOworDAorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBWYXJpYWJsZXMgcmVsYXRlZCB0byB0aGUgb3B0aW9ucy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgVFJVRSBpZiB3ZSBzaG91bGQgYWx3YXlzIGdlbmVyYXRlIE1ha2VmaWxlLmluLgorbXkgJGZvcmNlX2dlbmVyYXRpb24gPSAxOworCisjIEZyb20gdGhlIFBlcmwgbWFudWFsLgorbXkgJHN5bWxpbmtfZXhpc3RzID0gKGV2YWwgJ3N5bWxpbmsgKCIiLCAiIik7JywgJEAgZXEgJycpOworCisjIFRSVUUgaWYgbWlzc2luZyBzdGFuZGFyZCBmaWxlcyBzaG91bGQgYmUgaW5zdGFsbGVkLgorbXkgJGFkZF9taXNzaW5nID0gMDsKKworIyBUUlVFIGlmIHdlIHNob3VsZCBjb3B5IG1pc3NpbmcgZmlsZXM7IG90aGVyd2lzZSBzeW1saW5rIGlmIHBvc3NpYmxlLgorbXkgJGNvcHlfbWlzc2luZyA9IDA7CisKKyMgVFJVRSBpZiB3ZSBzaG91bGQgYWx3YXlzIHVwZGF0ZSBmaWxlcyB0aGF0IHdlIGtub3cgYWJvdXQuCitteSAkZm9yY2VfbWlzc2luZyA9IDA7CisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgVmFyaWFibGVzIGZpbGxlZCBkdXJpbmcgZmlsZXMgc2Nhbm5pbmcuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIE5hbWUgb2YgdGhlIGNvbmZpZ3VyZS5hYyBmaWxlLgorbXkgJGNvbmZpZ3VyZV9hYzsKKworIyBGaWxlcyBmb3VuZCBieSBzY2FubmluZyBjb25maWd1cmUuYWMgZm9yIExJQk9CSlMuCitteSAlbGlic291cmNlcyA9ICgpOworCisjIE5hbWVzIHVzZWQgaW4gQUNfQ09ORklHX0hFQURFUiBjYWxsLgorbXkgQGNvbmZpZ19oZWFkZXJzID0gKCk7CisKKyMgTmFtZXMgdXNlZCBpbiBBQ19DT05GSUdfTElOS1MgY2FsbC4KK215IEBjb25maWdfbGlua3MgPSAoKTsKKworIyBEaXJlY3Rvcnkgd2hlcmUgb3V0cHV0IGZpbGVzIGdvLiAgQWN0dWFsbHksIG91dHB1dCBmaWxlcyBhcmUKKyMgcmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkuCitteSAkb3V0cHV0X2RpcmVjdG9yeTsKKworIyBMaXN0IG9mIE1ha2VmaWxlLmFtJ3MgdG8gcHJvY2VzcywgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgb3V0cHV0cy4KK215IEBpbnB1dF9maWxlcyA9ICgpOworbXkgJW91dHB1dF9maWxlcyA9ICgpOworCisjIENvbXBsZXRlIGxpc3Qgb2YgTWFrZWZpbGUuYW0ncyB0aGF0IGV4aXN0LgorbXkgQGNvbmZpZ3VyZV9pbnB1dF9maWxlcyA9ICgpOworCisjIExpc3Qgb2YgZmlsZXMgaW4gQUNfQ09ORklHX0ZJTEVTL0FDX09VVFBVVCB3aXRob3V0IE1ha2VmaWxlLmFtJ3MsCisjIGFuZCB0aGVpciBvdXRwdXRzLgorbXkgQG90aGVyX2lucHV0X2ZpbGVzID0gKCk7CisjIFdoZXJlIGVhY2ggQUNfQ09ORklHX0ZJTEVTL0FDX09VVFBVVC9BQ19DT05GSUdfTElOSy9BQ19DT05GSUdfSEVBREVSIGFwcGVhcnMuCisjIFRoZSBrZXlzIGFyZSB0aGUgZmlsZXMgY3JlYXRlZCBieSB0aGVzZSBtYWNyb3MuCitteSAlYWNfY29uZmlnX2ZpbGVzX2xvY2F0aW9uID0gKCk7CisjIFRoZSBjb25kaXRpb24gdW5kZXIgd2hpY2ggQUNfQ09ORklHX0ZPT1MgYXBwZWFycy4KK215ICVhY19jb25maWdfZmlsZXNfY29uZGl0aW9uID0gKCk7CisKKyMgRGlyZWN0b3J5IHRvIHNlYXJjaCBmb3IgY29uZmlndXJlLXJlcXVpcmVkIGZpbGVzLiAgVGhpcworIyB3aWxsIGJlIGNvbXB1dGVkIGJ5ICZsb2NhdGVfYXV4X2RpciBhbmQgY2FuIGJlIHNldCB1c2luZworIyBBQ19DT05GSUdfQVVYX0RJUiBpbiBjb25maWd1cmUuYWMuCisjICRDT05GSUdfQVVYX0RJUiBpcyB0aGUgYHJhdycgZGlyZWN0b3J5LCB2YWxpZCBvbmx5IGluIHRoZSBzb3VyY2UtdHJlZS4KK215ICRjb25maWdfYXV4X2RpciA9ICcnOworbXkgJGNvbmZpZ19hdXhfZGlyX3NldF9pbl9jb25maWd1cmVfYWMgPSAwOworIyAkQU1fQ09ORklHX0FVWF9ESVIgaXMgcHJlZml4ZWQgd2l0aCAkKHRvcF9zcmNkaXIpLCBzbyBpdCBjYW4gYmUgdXNlZAorIyBpbiBNYWtlZmlsZXMuCitteSAkYW1fY29uZmlnX2F1eF9kaXIgPSAnJzsKKworIyBEaXJlY3RvcnkgdG8gc2VhcmNoIGZvciBBQ19MSUJTT1VSQ0UgZmlsZXMsIGFzIHNldCBieSBBQ19DT05GSUdfTElCT0JKX0RJUgorIyBpbiBjb25maWd1cmUuYWMuCitteSAkY29uZmlnX2xpYm9ial9kaXIgPSAnJzsKKworIyBXaGV0aGVyIEFNX0dOVV9HRVRURVhUIGhhcyBiZWVuIHNlZW4gaW4gY29uZmlndXJlLmFjLgorbXkgJHNlZW5fZ2V0dGV4dCA9IDA7CisjIFdoZXRoZXIgQU1fR05VX0dFVFRFWFQoW2V4dGVybmFsXSkgaXMgdXNlZC4KK215ICRzZWVuX2dldHRleHRfZXh0ZXJuYWwgPSAwOworIyBXaGVyZSBBTV9HTlVfR0VUVEVYVCBhcHBlYXJzLgorbXkgJGFjX2dldHRleHRfbG9jYXRpb247CisjIFdoZXRoZXIgQU1fR05VX0dFVFRFWFRfSU5UTF9TVUJESVIgaGFzIGJlZW4gc2Vlbi4KK215ICRzZWVuX2dldHRleHRfaW50bCA9IDA7CisKKyMgTGlzdHMgb2YgdGFncyBzdXBwb3J0ZWQgYnkgTGlidG9vbC4KK215ICVsaWJ0b29sX3RhZ3MgPSAoKTsKKyMgMSBpZiBMaWJ0b29sIHVzZXMgTFRfU1VQUE9SVEVEX1RBRy4gIElmIGl0IGRvZXMsIHRoZW4gaXQgYWxzbworIyB1c2VzIEFDX1JFUVVJUkVfQVVYX0ZJTEUuCitteSAkbGlidG9vbF9uZXdfYXBpID0gMDsKKworIyBNb3N0IGltcG9ydGFudCBBQ19DQU5PTklDQUxfKiBtYWNybyBzZWVuIHNvIGZhci4KK215ICRzZWVuX2Nhbm9uaWNhbCA9IDA7CisjIExvY2F0aW9uIG9mIHRoYXQgbWFjcm8uCitteSAkY2Fub25pY2FsX2xvY2F0aW9uOworCisjIFdoZXJlIEFNX01BSU5UQUlORVJfTU9ERSBhcHBlYXJzLgorbXkgJHNlZW5fbWFpbnRfbW9kZTsKKworIyBBY3R1YWwgdmVyc2lvbiB3ZSd2ZSBzZWVuLgorbXkgJHBhY2thZ2VfdmVyc2lvbiA9ICcnOworCisjIFdoZXJlIHZlcnNpb24gaXMgZGVmaW5lZC4KK215ICRwYWNrYWdlX3ZlcnNpb25fbG9jYXRpb247CisKKyMgVFJVRSBpZiB3ZSd2ZSBzZWVuIEFNX0VOQUJMRV9NVUxUSUxJQi4KK215ICRzZWVuX211bHRpbGliID0gMDsKKworIyBUUlVFIGlmIHdlJ3ZlIHNlZW4gQU1fUFJPR19DQ19DX08KK215ICRzZWVuX2NjX2NfbyA9IDA7CisKKyMgTG9jYXRpb24gb2YgQUNfUkVRVUlSRV9BVVhfRklMRSBjYWxscywgaW5kZXhlZCBieSB0aGVpciBhcmd1bWVudC4KK215ICVyZXF1aXJlZF9hdXhfZmlsZSA9ICgpOworCisjIFdoZXJlIEFNX0lOSVRfQVVUT01BS0UgaXMgY2FsbGVkOworbXkgJHNlZW5faW5pdF9hdXRvbWFrZSA9IDA7CisKKyMgVFJVRSBpZiB3ZSd2ZSBzZWVuIEFNX0FVVE9NQUtFX1ZFUlNJT04uCitteSAkc2Vlbl9hdXRvbWFrZV92ZXJzaW9uID0gMDsKKworIyBIYXNoIHRhYmxlIG9mIGRpc2NvdmVyZWQgY29uZmlndXJlIHN1YnN0aXR1dGlvbnMuICBLZXlzIGFyZSBuYW1lcywKKyMgdmFsdWVzIGFyZSBgRklMRTpMSU5FJyBzdHJpbmdzIHdoaWNoIGFyZSB1c2VkIGJ5IGVycm9yIG1lc3NhZ2UKKyMgZ2VuZXJhdGlvbi4KK215ICVjb25maWd1cmVfdmFycyA9ICgpOworCisjIElnbm9yZWQgY29uZmlndXJlIHN1YnN0aXR1dGlvbnMgKGkuZS4sIHZhcmlhYmxlcyBub3QgdG8gYmUgb3V0cHV0IGluCisjIE1ha2VmaWxlLmluKQorbXkgJWlnbm9yZWRfY29uZmlndXJlX3ZhcnMgPSAoKTsKKworIyBGaWxlcyBpbmNsdWRlZCBieSAkY29uZmlndXJlX2FjLgorbXkgQGNvbmZpZ3VyZV9kZXBzID0gKCk7CisKKyMgR3JlYXRlc3QgdGltZXN0YW1wIG9mIGNvbmZpZ3VyZSdzIGRlcGVuZGVuY2llcy4KK215ICRjb25maWd1cmVfZGVwc19ncmVhdGVzdF90aW1lc3RhbXAgPSAwOworCisjIEhhc2ggdGFibGUgb2YgQU1fQ09ORElUSU9OQUwgdmFyaWFibGVzIHNlZW4gaW4gY29uZmlndXJlLgorbXkgJWNvbmZpZ3VyZV9jb25kID0gKCk7CisKKyMgVGhpcyBtYXBzIGV4dGVuc2lvbnMgb250byBsYW5ndWFnZSBuYW1lcy4KK215ICVleHRlbnNpb25fbWFwID0gKCk7CisKKyMgTGlzdCBvZiB0aGUgRElTVF9DT01NT04gZmlsZXMgd2UgZGlzY292ZXJlZCB3aGlsZSByZWFkaW5nCisjIGNvbmZpZ3VyZS5pbgorbXkgJGNvbmZpZ3VyZV9kaXN0X2NvbW1vbiA9ICcnOworCisjIFRoaXMgbWFwcyBsYW5ndWFnZXMgbmFtZXMgb250byBvYmplY3RzLgorbXkgJWxhbmd1YWdlcyA9ICgpOworIyBNYXBzIGVhY2ggbGlua2VyIHZhcmlhYmxlIG9udG8gYSBsYW5ndWFnZSBvYmplY3QuCitteSAlbGlua19sYW5ndWFnZXMgPSAoKTsKKworIyBtYXBzIGV4dGVuc2lvbnMgdG8gbmVlZGVkIHNvdXJjZSBmbGFncy4KK215ICVzb3VyY2VmbGFncyA9ICgpOworCisjIExpc3Qgb2YgdGFyZ2V0cyB3ZSBtdXN0IGFsd2F5cyBvdXRwdXQuCisjIEZJWE1FOiBDb21wbGV0ZSwgYW5kIHJlbW92ZSBmYWxzZWx5IHJlcXVpcmVkIHRhcmdldHMuCitteSAlcmVxdWlyZWRfdGFyZ2V0cyA9CisgICgKKyAgICdhbGwnICAgICAgICAgID0+IDEsCisgICAnZHZpJwkgID0+IDEsCisgICAncGRmJwkgID0+IDEsCisgICAncHMnCQkgID0+IDEsCisgICAnaW5mbycJICA9PiAxLAorICAgJ2luc3RhbGwtaW5mbycgPT4gMSwKKyAgICdpbnN0YWxsJyAgICAgID0+IDEsCisgICAnaW5zdGFsbC1kYXRhJyA9PiAxLAorICAgJ2luc3RhbGwtZXhlYycgPT4gMSwKKyAgICd1bmluc3RhbGwnICAgID0+IDEsCisKKyAgICMgRklYTUU6IE5vdCByZXF1aXJlZCwgdGVtcG9yYXJ5IGhhY2tzLgorICAgIyBXZWxsLCBhY3R1YWxseSB0aGV5IGFyZSBzb3J0IG9mIHJlcXVpcmVkOiB0aGUgLXJlY3Vyc2l2ZQorICAgIyB0YXJnZXRzIHdpbGwgcnVuIHRoZW0gYW55d2F5Li4uCisgICAnaHRtbC1hbScgICAgICAgICA9PiAxLAorICAgJ2R2aS1hbScgICAgICAgICAgPT4gMSwKKyAgICdwZGYtYW0nICAgICAgICAgID0+IDEsCisgICAncHMtYW0nICAgICAgICAgICA9PiAxLAorICAgJ2luZm8tYW0nICAgICAgICAgPT4gMSwKKyAgICdpbnN0YWxsLWRhdGEtYW0nID0+IDEsCisgICAnaW5zdGFsbC1leGVjLWFtJyA9PiAxLAorICAgJ2luc3RhbGwtaHRtbC1hbScgPT4gMSwKKyAgICdpbnN0YWxsLWR2aS1hbScgID0+IDEsCisgICAnaW5zdGFsbC1wZGYtYW0nICA9PiAxLAorICAgJ2luc3RhbGwtcHMtYW0nICAgPT4gMSwKKyAgICdpbnN0YWxsLWluZm8tYW0nID0+IDEsCisgICAnaW5zdGFsbGNoZWNrLWFtJyA9PiAxLAorICAgJ3VuaW5zdGFsbC1hbScgPT4gMSwKKworICAgJ2luc3RhbGwtbWFuJyA9PiAxLAorICApOworCisjIFNldCB0byAxIGlmIHRoaXMgcnVuIHdpbGwgY3JlYXRlIHRoZSBNYWtlZmlsZS5pbiB0aGF0IGRpc3RyaWJ1dGVzCisjIHRoZSBmaWxlcyBpbiBjb25maWdfYXV4X2Rpci4KK215ICRhdXRvbWFrZV93aWxsX3Byb2Nlc3NfYXV4X2RpciA9IDA7CisKKyMgVGhlIG5hbWUgb2YgdGhlIE1ha2VmaWxlIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQuCitteSAkYW1fZmlsZSA9ICdCVUcnOworDAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgVmFyaWFibGVzIHJlc2V0IGJ5ICZpbml0aWFsaXplX3Blcl9pbnB1dC4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBCYXNlbmFtZSBhbmQgcmVsYXRpdmUgZGlyIG9mIHRoZSBpbnB1dCBmaWxlLgorbXkgJGFtX2ZpbGVfbmFtZTsKK215ICRhbV9yZWxhdGl2ZV9kaXI7CisKKyMgU2FtZSBidXQgd3J0IE1ha2VmaWxlLmluLgorbXkgJGluX2ZpbGVfbmFtZTsKK215ICRyZWxhdGl2ZV9kaXI7CisKKyMgUmVsYXRpdmUgcGF0aCB0byB0aGUgdG9wIGRpcmVjdG9yeS4KK215ICR0b3BzcmNkaXI7CisKKyMgR3JlYXRlc3QgdGltZXN0YW1wIG9mIHRoZSBvdXRwdXQncyBkZXBlbmRlbmNpZXMgKGV4Y2x1ZGluZworIyBjb25maWd1cmUncyBkZXBlbmRlbmNpZXMpLgorbXkgJG91dHB1dF9kZXBzX2dyZWF0ZXN0X3RpbWVzdGFtcDsKKworIyBUaGVzZSB2YXJpYWJsZXMgYXJlIHVzZWQgd2hlbiBnZW5lcmF0aW5nIGVhY2ggTWFrZWZpbGUuaW4uCisjIFRoZXkgaG9sZCB0aGUgTWFrZWZpbGUuaW4gdW50aWwgaXQgaXMgcmVhZHkgdG8gYmUgcHJpbnRlZC4KK215ICRvdXRwdXRfdmFyczsKK215ICRvdXRwdXRfYWxsOworbXkgJG91dHB1dF9oZWFkZXI7CitteSAkb3V0cHV0X3J1bGVzOworbXkgJG91dHB1dF90cmFpbGVyOworCisjIFRoaXMgaXMgdGhlIGNvbmRpdGlvbmFsIHN0YWNrLCB1cGRhdGVkIG9uIGlmL2Vsc2UvZW5kaWYsIGFuZAorIyB1c2VkIHRvIGJ1aWxkIENvbmRpdGlvbiBvYmplY3RzLgorbXkgQGNvbmRfc3RhY2s7CisKKyMgVGhpcyBob2xkcyB0aGUgc2V0IG9mIGluY2x1ZGVkIGZpbGVzLgorbXkgQGluY2x1ZGVfc3RhY2s7CisKKyMgTGlzdCBvZiBkZXBlbmRlbmNpZXMgZm9yIHRoZSBvYnZpb3VzIHRhcmdldHMuCitteSBAYWxsOworbXkgQGNoZWNrOworbXkgQGNoZWNrX3Rlc3RzOworCisjIEtleXMgaW4gdGhpcyBoYXNoIHRhYmxlIGFyZSBmaWxlcyB0byBkZWxldGUuICBUaGUgYXNzb2NpYXRlZAorIyB2YWx1ZSB0ZWxscyB3aGVuIHRoaXMgc2hvdWxkIGhhcHBlbiAoTU9TVExZX0NMRUFOLCBESVNUX0NMRUFOLCBldGMuKQorbXkgJWNsZWFuX2ZpbGVzOworCisjIEtleXMgaW4gdGhpcyBoYXNoIHRhYmxlIGFyZSBvYmplY3QgZmlsZXMgb3Igb3RoZXIgZmlsZXMgaW4KKyMgc3ViZGlyZWN0b3JpZXMgd2hpY2ggbmVlZCB0byBiZSByZW1vdmVkLiAgVGhpcyBvbmx5IGhvbGRzIGZpbGVzCisjIHdoaWNoIGFyZSBjcmVhdGVkIGJ5IGNvbXBpbGF0aW9ucy4gIFRoZSB2YWx1ZSBpbiB0aGUgaGFzaCBpbmRpY2F0ZXMKKyMgd2hlbiB0aGUgZmlsZSBzaG91bGQgYmUgcmVtb3ZlZC4KK215ICVjb21waWxlX2NsZWFuX2ZpbGVzOworCisjIEtleXMgaW4gdGhpcyBoYXNoIHRhYmxlIGFyZSBkaXJlY3RvcmllcyB3aGVyZSB3ZSBleHBlY3QgdG8gYnVpbGQgYQorIyBsaWJ0b29sIG9iamVjdC4gIFdlIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIGRlY2lkZSB3aGF0IGRpcmVjdG9yaWVzCisjIHRvIGRlbGV0ZS4KK215ICVsaWJ0b29sX2NsZWFuX2RpcmVjdG9yaWVzOworCisjIFZhbHVlIG9mIGAkKFNPVVJDRVMpJywgdXNlZCBieSB0YWdzLmFtLgorbXkgQHNvdXJjZXM7CisjIFNvdXJjZXMgd2hpY2ggZ28gaW4gdGhlIGRpc3RyaWJ1dGlvbi4KK215IEBkaXN0X3NvdXJjZXM7CisKKyMgVGhpcyBoYXNoIG1hcHMgb2JqZWN0IGZpbGUgbmFtZXMgb250byB0aGVpciBjb3JyZXNwb25kaW5nIHNvdXJjZQorIyBmaWxlIG5hbWVzLiAgVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IGVhY2ggb2JqZWN0IGlzIGNyZWF0ZWQKKyMgYnkgYSBzaW5nbGUgc291cmNlIGZpbGUuCitteSAlb2JqZWN0X21hcDsKKworIyBUaGlzIGhhc2ggbWFwcyBvYmplY3QgZmlsZSBuYW1lcyBvbnRvIGFuIGludGVnZXIgdmFsdWUgcmVwcmVzZW50aW5nCisjIHdoZXRoZXIgdGhpcyBvYmplY3QgaGFzIGJlZW4gYnVpbHQgdmlhIG9yZGluYXJ5IGNvbXBpbGF0aW9uIG9yCisjIGxpYnRvb2wgY29tcGlsYXRpb24gKHRoZSBDT01QSUxFXyogY29uc3RhbnRzKS4KK215ICVvYmplY3RfY29tcGlsYXRpb25fbWFwOworCisKKyMgVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZGlyZWN0b3JpZXMgZm9yIHdoaWNoIHdlJ3ZlIGFscmVhZHkKKyMgY3JlYXRlZCBkaXJzdGFtcCBjb2RlLiAgS2V5cyBhcmUgZGlyZWN0b3JpZXMsIHZhbHVlcyBhcmUgc3RhbXAgZmlsZXMuCisjIFNldmVyYWwga2V5cyBjYW4gc2hhcmUgdGhlIHNhbWUgc3RhbXAgZmlsZXMgaWYgdGhleSBhcmUgZXF1aXZhbGVudAorIyAoYXMgYXJlIGAuLy9mb28nIGFuZCBgZm9vJykuCitteSAlZGlyZWN0b3J5X21hcDsKKworIyBBbGwgLlAgZmlsZXMuCitteSAlZGVwX2ZpbGVzOworCisjIFRoaXMgaXMgYSBsaXN0IG9mIGFsbCB0YXJnZXRzIHRvIHJ1biBkdXJpbmcgIm1ha2UgZGlzdCIuCitteSBAZGlzdF90YXJnZXRzOworCisjIEtlZXAgdHJhY2sgb2YgYWxsIHByb2dyYW1zIGRlY2xhcmVkIGluIHRoaXMgTWFrZWZpbGUsIHdpdGhvdXQKKyMgJChFWEVFWFQpLiAgQHN1YnN0aXR1dGlvbnNAIGFyZSBub3QgbGlzdGVkLgorbXkgJWtub3duX3Byb2dyYW1zOworbXkgJWtub3duX2xpYnJhcmllczsKKworIyBLZXlzIGluIHRoaXMgaGFzaCBhcmUgdGhlIGJhc2VuYW1lcyBvZiBmaWxlcyB3aGljaCBtdXN0IGRlcGVuZCBvbgorIyBhbnNpMmtuci4gIFZhbHVlcyBhcmUgZWl0aGVyIHRoZSBlbXB0eSBzdHJpbmcsIG9yIHRoZSBkaXJlY3RvcnkgaW4KKyMgd2hpY2ggdGhlIEFOU0kgc291cmNlIGZpbGUgYXBwZWFyczsgdGhlIGRpcmVjdG9yeSBtdXN0IGhhdmUgYQorIyB0cmFpbGluZyBgLycuCitteSAlZGVfYW5zaV9maWxlczsKKworIyBUaGlzIGtlZXBzIHRyYWNrIG9mIHdoaWNoIGV4dGVuc2lvbnMgd2UndmUgc2VlbiAodGhhdCB3ZSBjYXJlCisjIGFib3V0KS4KK215ICVleHRlbnNpb25fc2VlbjsKKworIyBUaGlzIGlzIHJhbmRvbSBzY3JhdGNoIHNwYWNlIGZvciB0aGUgbGFuZ3VhZ2UgZmluaXNoIGZ1bmN0aW9ucy4KKyMgRG9uJ3QgcmFuZG9tbHkgb3ZlcndyaXRlIGl0OyBleGFtaW5lIG90aGVyIHVzZXMgb2Yga2V5cyBmaXJzdC4KK215ICVsYW5ndWFnZV9zY3JhdGNoOworCisjIFdlIGtlZXAgdHJhY2sgb2Ygd2hpY2ggb2JqZWN0cyBuZWVkIHNwZWNpYWwgKHBlci1leGVjdXRhYmxlKQorIyBoYW5kbGluZyBvbiBhIHBlci1sYW5ndWFnZSBiYXNpcy4KK215ICVsYW5nX3NwZWNpZmljX2ZpbGVzOworCisjIFRoaXMgaXMgc2V0IHdoZW4gYGhhbmRsZV9kaXN0JyBoYXMgZmluaXNoZWQuICBPbmNlIHRoaXMgaGFwcGVucywKKyMgd2Ugc2hvdWxkIG5vIGxvbmdlciBwdXNoIG9uIGRpc3RfY29tbW9uLgorbXkgJGhhbmRsZV9kaXN0X3J1bjsKKworIyBVc2VkIHRvIHN0b3JlIGEgc2V0IG9mIGxpbmtlcnMgbmVlZGVkIHRvIGdlbmVyYXRlIHRoZSBzb3VyY2VzIGN1cnJlbnRseQorIyB1bmRlciBjb25zaWRlcmF0aW9uLgorbXkgJWxpbmtlcnNfdXNlZDsKKworIyBUcnVlIGlmIHdlIG5lZWQgYExJTksnIGRlZmluZWQuICBUaGlzIGlzIGEgaGFjay4KK215ICRuZWVkX2xpbms7CisKKyMgV2FzIGdldF9vYmplY3RfZXh0ZW5zaW9uIHJ1bj8KKyMgRklYTUU6IFRoaXMgaXMgYSBoYWNrLiBhIGJldHRlciBzd2l0Y2ggc2hvdWxkIGJlIGZvdW5kLgorbXkgJGdldF9vYmplY3RfZXh0ZW5zaW9uX3dhc19ydW47CisKKyMgUmVjb3JkIGVhY2ggZmlsZSBwcm9jZXNzZWQgYnkgbWFrZV9wYXJhZ3JhcGhzLgorbXkgJXRyYW5zZm9ybWVkX2ZpbGVzOworDAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFZhcmlhYmxlcyBub3QgcmVzZXQgYnkgJmluaXRpYWxpemVfcGVyX2lucHV0LiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBDYWNoZSBlYWNoIGZpbGUgcHJvY2Vzc2VkIGJ5IG1ha2VfcGFyYWdyYXBocy4KKyMgKFRoaXMgaXMgZGlmZmVyZW50IGZyb20gJXRyYW5zZm9ybWVkX2ZpbGVzIGJlY2F1c2UKKyMgJXRyYW5zZm9ybWVkX2ZpbGVzIGlzIHJlc2V0IGZvciBlYWNoIGZpbGUgd2hpbGUgJWFtX2ZpbGVfY2FjaGUKKyMgaXQgZ2xvYmFsIHRvIHRoZSBydW4uKQorbXkgJWFtX2ZpbGVfY2FjaGU7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyB2YXJfU1VGRklYRVNfdHJpZ2dlciAoJFRZUEUsICRWQUxVRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgaXMgY2FsbGVkIGJ5IEF1dG9tYWtlOjpWYXJpYWJsZTo6ZGVmaW5lKCkgd2hlbiBTVUZGSVhFUworIyBpcyBkZWZpbmVkICgkVFlQRSBlcSAnJykgb3IgYXBwZW5kZWQgKCRUWVBFIGVxICcrJykuCisjIFRoZSB3b3JrIGhlcmUgbmVlZHMgdG8gYmUgcGVyZm9ybWVkIGFzIGEgc2lkZS1lZmZlY3Qgb2YgdGhlCisjIG1hY3JvX2RlZmluZSgpIGNhbGwgYmVjYXVzZSBTVUZGSVhFUyBkZWZpbml0aW9ucyBpbXBhY3QKKyMgb24gJEtOT1dOX0VYVEVOU0lPTlNfUEFUVEVSTiB3aGljaCBpcyB1c2VkIHVzZWQgd2hlbiBwYXJzaW5nCisjIHRoZSBpbnB1dCBhbSBmaWxlLgorc3ViIHZhcl9TVUZGSVhFU190cmlnZ2VyICgkJCkKK3sKKyAgICBteSAoJHR5cGUsICR2YWx1ZSkgPSBAXzsKKyAgICBhY2NlcHRfZXh0ZW5zaW9ucyAoc3BsaXQgKCcgJywgJHZhbHVlKSk7Cit9CitBdXRvbWFrZTo6VmFyaWFibGU6Omhvb2sgKCdTVUZGSVhFUycsIFwmdmFyX1NVRkZJWEVTX3RyaWdnZXIpOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRm9yd2FyZCBzdWJyb3V0aW5lIGRlY2xhcmF0aW9ucy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK3N1YiByZWdpc3Rlcl9sYW5ndWFnZSAoJSk7CitzdWIgZmlsZV9jb250ZW50c19pbnRlcm5hbCAoJCQkJSk7CitzdWIgZGVmaW5lX2ZpbGVzX3ZhcmlhYmxlICgkXEAkJCk7CisKKworIyAmaW5pdGlhbGl6ZV9wZXJfaW5wdXQgKCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIChSZSktSW5pdGlhbGl6ZSBwZXItTWFrZWZpbGUuYW0gdmFyaWFibGVzLgorc3ViIGluaXRpYWxpemVfcGVyX2lucHV0ICgpCit7CisgICAgcmVzZXRfbG9jYWxfZHVwbGljYXRlcyAoKTsKKworICAgICRhbV9maWxlX25hbWUgPSB1bmRlZjsKKyAgICAkYW1fcmVsYXRpdmVfZGlyID0gdW5kZWY7CisKKyAgICAkaW5fZmlsZV9uYW1lID0gdW5kZWY7CisgICAgJHJlbGF0aXZlX2RpciA9IHVuZGVmOworICAgICR0b3BzcmNkaXIgPSB1bmRlZjsKKworICAgICRvdXRwdXRfZGVwc19ncmVhdGVzdF90aW1lc3RhbXAgPSAwOworCisgICAgJG91dHB1dF92YXJzID0gJyc7CisgICAgJG91dHB1dF9hbGwgPSAnJzsKKyAgICAkb3V0cHV0X2hlYWRlciA9ICcnOworICAgICRvdXRwdXRfcnVsZXMgPSAnJzsKKyAgICAkb3V0cHV0X3RyYWlsZXIgPSAnJzsKKworICAgIEF1dG9tYWtlOjpPcHRpb25zOjpyZXNldDsKKyAgICBBdXRvbWFrZTo6VmFyaWFibGU6OnJlc2V0OworICAgIEF1dG9tYWtlOjpSdWxlOjpyZXNldDsKKworICAgIEBjb25kX3N0YWNrID0gKCk7CisKKyAgICBAaW5jbHVkZV9zdGFjayA9ICgpOworCisgICAgQGFsbCA9ICgpOworICAgIEBjaGVjayA9ICgpOworICAgIEBjaGVja190ZXN0cyA9ICgpOworCisgICAgJWNsZWFuX2ZpbGVzID0gKCk7CisgICAgJWNvbXBpbGVfY2xlYW5fZmlsZXMgPSAoKTsKKworICAgICMgV2UgYWx3YXlzIGluY2x1ZGUgYC4nLiAgVGhpcyBpc24ndCBzdHJpY3RseSBjb3JyZWN0LgorICAgICVsaWJ0b29sX2NsZWFuX2RpcmVjdG9yaWVzID0gKCcuJyA9PiAxKTsKKworICAgIEBzb3VyY2VzID0gKCk7CisgICAgQGRpc3Rfc291cmNlcyA9ICgpOworCisgICAgJW9iamVjdF9tYXAgPSAoKTsKKyAgICAlb2JqZWN0X2NvbXBpbGF0aW9uX21hcCA9ICgpOworCisgICAgJWRpcmVjdG9yeV9tYXAgPSAoKTsKKworICAgICVkZXBfZmlsZXMgPSAoKTsKKworICAgIEBkaXN0X3RhcmdldHMgPSAoKTsKKworICAgICVrbm93bl9wcm9ncmFtcyA9ICgpOworICAgICVrbm93bl9saWJyYXJpZXM9ICgpOworCisgICAgJWRlX2Fuc2lfZmlsZXMgPSAoKTsKKworICAgICVleHRlbnNpb25fc2VlbiA9ICgpOworCisgICAgJWxhbmd1YWdlX3NjcmF0Y2ggPSAoKTsKKworICAgICVsYW5nX3NwZWNpZmljX2ZpbGVzID0gKCk7CisKKyAgICAkaGFuZGxlX2Rpc3RfcnVuID0gMDsKKworICAgICRuZWVkX2xpbmsgPSAwOworCisgICAgJGdldF9vYmplY3RfZXh0ZW5zaW9uX3dhc19ydW4gPSAwOworCisgICAgJXRyYW5zZm9ybWVkX2ZpbGVzID0gKCk7Cit9CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEluaXRpYWxpemUgb3VyIGxpc3Qgb2YgbGFuZ3VhZ2VzIHRoYXQgYXJlIGludGVybmFsbHkgc3VwcG9ydGVkLgorCisjIEMuCityZWdpc3Rlcl9sYW5ndWFnZSAoJ25hbWUnID0+ICdjJywKKwkJICAgJ05hbWUnID0+ICdDJywKKwkJICAgJ2NvbmZpZ192YXJzJyA9PiBbJ0NDJ10sCisJCSAgICdhbnNpJyA9PiAxLAorCQkgICAnYXV0b2RlcCcgPT4gJycsCisJCSAgICdmbGFncycgPT4gWydDRkxBR1MnLCAnQ1BQRkxBR1MnXSwKKwkJICAgJ2NjZXInID0+ICdDQycsCisJCSAgICdjb21waWxlcicgPT4gJ0NPTVBJTEUnLAorCQkgICAnY29tcGlsZScgPT4gJyQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpJywKKwkJICAgJ2xkZXInID0+ICdDQ0xEJywKKwkJICAgJ2xkJyA9PiAnJChDQyknLAorCQkgICAnbGlua2VyJyA9PiAnTElOSycsCisJCSAgICdsaW5rJyA9PiAnJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQCcsCisJCSAgICdjb21waWxlX2ZsYWcnID0+ICctYycsCisJCSAgICdsaWJ0b29sX3RhZycgPT4gJ0NDJywKKwkJICAgJ2V4dGVuc2lvbnMnID0+IFsnLmMnXSwKKwkJICAgJ19maW5pc2gnID0+IFwmbGFuZ19jX2ZpbmlzaCk7CisKKyMgQysrLgorcmVnaXN0ZXJfbGFuZ3VhZ2UgKCduYW1lJyA9PiAnY3h4JywKKwkJICAgJ05hbWUnID0+ICdDKysnLAorCQkgICAnY29uZmlnX3ZhcnMnID0+IFsnQ1hYJ10sCisJCSAgICdsaW5rZXInID0+ICdDWFhMSU5LJywKKwkJICAgJ2xpbmsnID0+ICckKENYWExEKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAnLAorCQkgICAnYXV0b2RlcCcgPT4gJ0NYWCcsCisJCSAgICdmbGFncycgPT4gWydDWFhGTEFHUycsICdDUFBGTEFHUyddLAorCQkgICAnY29tcGlsZScgPT4gJyQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUyknLAorCQkgICAnY2NlcicgPT4gJ0NYWCcsCisJCSAgICdjb21waWxlcicgPT4gJ0NYWENPTVBJTEUnLAorCQkgICAnY29tcGlsZV9mbGFnJyA9PiAnLWMnLAorCQkgICAnb3V0cHV0X2ZsYWcnID0+ICctbycsCisJCSAgICdsaWJ0b29sX3RhZycgPT4gJ0NYWCcsCisJCSAgICdsZGVyJyA9PiAnQ1hYTEQnLAorCQkgICAnbGQnID0+ICckKENYWCknLAorCQkgICAncHVyZScgPT4gMSwKKwkJICAgJ2V4dGVuc2lvbnMnID0+IFsnLmMrKycsICcuY2MnLCAnLmNwcCcsICcuY3h4JywgJy5DJ10pOworCisjIE9iamVjdGl2ZSBDLgorcmVnaXN0ZXJfbGFuZ3VhZ2UgKCduYW1lJyA9PiAnb2JqYycsCisJCSAgICdOYW1lJyA9PiAnT2JqZWN0aXZlIEMnLAorCQkgICAnY29uZmlnX3ZhcnMnID0+IFsnT0JKQyddLAorCQkgICAnbGlua2VyJyA9PiAnT0JKQ0xJTksnLAorCQkgICAnbGluaycgPT4gJyQoT0JKQ0xEKSAkKEFNX09CSkNGTEFHUykgJChPQkpDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQCcsCisJCSAgICdhdXRvZGVwJyA9PiAnT0JKQycsCisJCSAgICdmbGFncycgPT4gWydPQkpDRkxBR1MnLCAnQ1BQRkxBR1MnXSwKKwkJICAgJ2NvbXBpbGUnID0+ICckKE9CSkMpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX09CSkNGTEFHUykgJChPQkpDRkxBR1MpJywKKwkJICAgJ2NjZXInID0+ICdPQkpDJywKKwkJICAgJ2NvbXBpbGVyJyA9PiAnT0JKQ0NPTVBJTEUnLAorCQkgICAnY29tcGlsZV9mbGFnJyA9PiAnLWMnLAorCQkgICAnb3V0cHV0X2ZsYWcnID0+ICctbycsCisJCSAgICdsZGVyJyA9PiAnT0JKQ0xEJywKKwkJICAgJ2xkJyA9PiAnJChPQkpDKScsCisJCSAgICdwdXJlJyA9PiAxLAorCQkgICAnZXh0ZW5zaW9ucycgPT4gWycubSddKTsKKworIyBVbmlmaWVkIFBhcmFsbGVsIEMuCityZWdpc3Rlcl9sYW5ndWFnZSAoJ25hbWUnID0+ICd1cGMnLAorCQkgICAnTmFtZScgPT4gJ1VuaWZpZWQgUGFyYWxsZWwgQycsCisJCSAgICdjb25maWdfdmFycycgPT4gWydVUEMnXSwKKwkJICAgJ2xpbmtlcicgPT4gJ1VQQ0xJTksnLAorCQkgICAnbGluaycgPT4gJyQoVVBDTEQpICQoQU1fVVBDRkxBR1MpICQoVVBDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQCcsCisJCSAgICdhdXRvZGVwJyA9PiAnVVBDJywKKwkJICAgJ2ZsYWdzJyA9PiBbJ1VQQ0ZMQUdTJywgJ0NQUEZMQUdTJ10sCisJCSAgICdjb21waWxlJyA9PiAnJChVUEMpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX1VQQ0ZMQUdTKSAkKFVQQ0ZMQUdTKScsCisJCSAgICdjY2VyJyA9PiAnVVBDJywKKwkJICAgJ2NvbXBpbGVyJyA9PiAnVVBDQ09NUElMRScsCisJCSAgICdjb21waWxlX2ZsYWcnID0+ICctYycsCisJCSAgICdvdXRwdXRfZmxhZycgPT4gJy1vJywKKwkJICAgJ2xkZXInID0+ICdVUENMRCcsCisJCSAgICdsZCcgPT4gJyQoVVBDKScsCisJCSAgICdwdXJlJyA9PiAxLAorCQkgICAnZXh0ZW5zaW9ucycgPT4gWycudXBjJ10pOworCisjIEhlYWRlcnMuCityZWdpc3Rlcl9sYW5ndWFnZSAoJ25hbWUnID0+ICdoZWFkZXInLAorCQkgICAnTmFtZScgPT4gJ0hlYWRlcicsCisJCSAgICdleHRlbnNpb25zJyA9PiBbJy5oJywgJy5IJywgJy5oeHgnLCAnLmgrKycsICcuaGgnLAorCQkJCSAgICAnLmhwcCcsICcuaW5jJ10sCisJCSAgICMgTm8gb3V0cHV0LgorCQkgICAnb3V0cHV0X2V4dGVuc2lvbnMnID0+IHN1YiB7IHJldHVybiAoKSB9LAorCQkgICAjIE5vdGhpbmcgdG8gZG8uCisJCSAgICdfZmluaXNoJyA9PiBzdWIgeyB9KTsKKworIyBWYWxhCityZWdpc3Rlcl9sYW5ndWFnZSAoJ25hbWUnID0+ICd2YWxhJywKKwkJICAgJ05hbWUnID0+ICdWYWxhJywKKwkJICAgJ2NvbmZpZ192YXJzJyA9PiBbJ1ZBTEFDJ10sCisJCSAgICdmbGFncycgPT4gW10sCisJCSAgICdjb21waWxlJyA9PiAnJChWQUxBQykgJChBTV9WQUxBRkxBR1MpICQoVkFMQUZMQUdTKScsCisJCSAgICdjY2VyJyA9PiAnVkFMQUMnLAorCQkgICAnY29tcGlsZXInID0+ICdWQUxBQ09NUElMRScsCisJCSAgICdleHRlbnNpb25zJyA9PiBbJy52YWxhJ10sCisJCSAgICdvdXRwdXRfZXh0ZW5zaW9ucycgPT4gc3ViIHsgKG15ICRleHQgPSAkX1swXSkgPX4gcy92YWxhJC9jLzsKKwkJCQkJCXJldHVybiAoJGV4dCwpIH0sCisJCSAgICdydWxlX2ZpbGUnID0+ICd2YWxhJywKKwkJICAgJ19maW5pc2gnID0+IFwmbGFuZ192YWxhX2ZpbmlzaCwKKwkJICAgJ190YXJnZXRfaG9vaycgPT4gXCZsYW5nX3ZhbGFfdGFyZ2V0X2hvb2ssCisJCSAgICdub2Rpc3Rfc3BlY2lmaWMnID0+IDEpOworCisjIFlhY2MgKEMgJiBDKyspLgorcmVnaXN0ZXJfbGFuZ3VhZ2UgKCduYW1lJyA9PiAneWFjYycsCisJCSAgICdOYW1lJyA9PiAnWWFjYycsCisJCSAgICdjb25maWdfdmFycycgPT4gWydZQUNDJ10sCisJCSAgICdmbGFncycgPT4gWydZRkxBR1MnXSwKKwkJICAgJ2NvbXBpbGUnID0+ICckKFlBQ0MpICQoWUZMQUdTKSAkKEFNX1lGTEFHUyknLAorCQkgICAnY2NlcicgPT4gJ1lBQ0MnLAorCQkgICAnY29tcGlsZXInID0+ICdZQUNDQ09NUElMRScsCisJCSAgICdleHRlbnNpb25zJyA9PiBbJy55J10sCisJCSAgICdvdXRwdXRfZXh0ZW5zaW9ucycgPT4gc3ViIHsgKG15ICRleHQgPSAkX1swXSkgPX4gdHIveS9jLzsKKwkJCQkJCXJldHVybiAoJGV4dCwpIH0sCisJCSAgICdydWxlX2ZpbGUnID0+ICd5YWNjJywKKwkJICAgJ19maW5pc2gnID0+IFwmbGFuZ195YWNjX2ZpbmlzaCwKKwkJICAgJ190YXJnZXRfaG9vaycgPT4gXCZsYW5nX3lhY2NfdGFyZ2V0X2hvb2ssCisJCSAgICdub2Rpc3Rfc3BlY2lmaWMnID0+IDEpOworcmVnaXN0ZXJfbGFuZ3VhZ2UgKCduYW1lJyA9PiAneWFjY3h4JywKKwkJICAgJ05hbWUnID0+ICdZYWNjIChDKyspJywKKwkJICAgJ2NvbmZpZ192YXJzJyA9PiBbJ1lBQ0MnXSwKKwkJICAgJ3J1bGVfZmlsZScgPT4gJ3lhY2MnLAorCQkgICAnZmxhZ3MnID0+IFsnWUZMQUdTJ10sCisJCSAgICdjY2VyJyA9PiAnWUFDQycsCisJCSAgICdjb21waWxlcicgPT4gJ1lBQ0NDT01QSUxFJywKKwkJICAgJ2NvbXBpbGUnID0+ICckKFlBQ0MpICQoWUZMQUdTKSAkKEFNX1lGTEFHUyknLAorCQkgICAnZXh0ZW5zaW9ucycgPT4gWycueSsrJywgJy55eScsICcueXh4JywgJy55cHAnXSwKKwkJICAgJ291dHB1dF9leHRlbnNpb25zJyA9PiBzdWIgeyAobXkgJGV4dCA9ICRfWzBdKSA9fiB0ci95L2MvOworCQkJCQkJcmV0dXJuICgkZXh0LCkgfSwKKwkJICAgJ19maW5pc2gnID0+IFwmbGFuZ195YWNjX2ZpbmlzaCwKKwkJICAgJ190YXJnZXRfaG9vaycgPT4gXCZsYW5nX3lhY2NfdGFyZ2V0X2hvb2ssCisJCSAgICdub2Rpc3Rfc3BlY2lmaWMnID0+IDEpOworCisjIExleCAoQyAmIEMrKykuCityZWdpc3Rlcl9sYW5ndWFnZSAoJ25hbWUnID0+ICdsZXgnLAorCQkgICAnTmFtZScgPT4gJ0xleCcsCisJCSAgICdjb25maWdfdmFycycgPT4gWydMRVgnXSwKKwkJICAgJ3J1bGVfZmlsZScgPT4gJ2xleCcsCisJCSAgICdmbGFncycgPT4gWydMRkxBR1MnXSwKKwkJICAgJ2NvbXBpbGUnID0+ICckKExFWCkgJChMRkxBR1MpICQoQU1fTEZMQUdTKScsCisJCSAgICdjY2VyJyA9PiAnTEVYJywKKwkJICAgJ2NvbXBpbGVyJyA9PiAnTEVYQ09NUElMRScsCisJCSAgICdleHRlbnNpb25zJyA9PiBbJy5sJ10sCisJCSAgICdvdXRwdXRfZXh0ZW5zaW9ucycgPT4gc3ViIHsgKG15ICRleHQgPSAkX1swXSkgPX4gdHIvbC9jLzsKKwkJCQkJCXJldHVybiAoJGV4dCwpIH0sCisJCSAgICdfZmluaXNoJyA9PiBcJmxhbmdfbGV4X2ZpbmlzaCwKKwkJICAgJ190YXJnZXRfaG9vaycgPT4gXCZsYW5nX2xleF90YXJnZXRfaG9vaywKKwkJICAgJ25vZGlzdF9zcGVjaWZpYycgPT4gMSk7CityZWdpc3Rlcl9sYW5ndWFnZSAoJ25hbWUnID0+ICdsZXh4eCcsCisJCSAgICdOYW1lJyA9PiAnTGV4IChDKyspJywKKwkJICAgJ2NvbmZpZ192YXJzJyA9PiBbJ0xFWCddLAorCQkgICAncnVsZV9maWxlJyA9PiAnbGV4JywKKwkJICAgJ2ZsYWdzJyA9PiBbJ0xGTEFHUyddLAorCQkgICAnY29tcGlsZScgPT4gJyQoTEVYKSAkKExGTEFHUykgJChBTV9MRkxBR1MpJywKKwkJICAgJ2NjZXInID0+ICdMRVgnLAorCQkgICAnY29tcGlsZXInID0+ICdMRVhDT01QSUxFJywKKwkJICAgJ2V4dGVuc2lvbnMnID0+IFsnLmwrKycsICcubGwnLCAnLmx4eCcsICcubHBwJ10sCisJCSAgICdvdXRwdXRfZXh0ZW5zaW9ucycgPT4gc3ViIHsgKG15ICRleHQgPSAkX1swXSkgPX4gdHIvbC9jLzsKKwkJCQkJCXJldHVybiAoJGV4dCwpIH0sCisJCSAgICdfZmluaXNoJyA9PiBcJmxhbmdfbGV4X2ZpbmlzaCwKKwkJICAgJ190YXJnZXRfaG9vaycgPT4gXCZsYW5nX2xleF90YXJnZXRfaG9vaywKKwkJICAgJ25vZGlzdF9zcGVjaWZpYycgPT4gMSk7CisKKyMgQXNzZW1ibGVyLgorcmVnaXN0ZXJfbGFuZ3VhZ2UgKCduYW1lJyA9PiAnYXNtJywKKwkJICAgJ05hbWUnID0+ICdBc3NlbWJsZXInLAorCQkgICAnY29uZmlnX3ZhcnMnID0+IFsnQ0NBUycsICdDQ0FTRkxBR1MnXSwKKworCQkgICAnZmxhZ3MnID0+IFsnQ0NBU0ZMQUdTJ10sCisJCSAgICMgVXNlcnMgY2FuIHNldCBBTV9DQ0FTRkxBR1MgdG8gaW5jbHVkZSBERUZTLCBJTkNMVURFUywKKwkJICAgIyBvciBhbnl0aGluZyBlbHNlIHJlcXVpcmVkLiAgVGhleSBjYW4gYWxzbyBzZXQgQ0NBUy4KKwkJICAgIyBPciBzaW1wbHkgdXNlIFByZXByb2Nlc3NlZCBBc3NlbWJsZXIuCisJCSAgICdjb21waWxlJyA9PiAnJChDQ0FTKSAkKEFNX0NDQVNGTEFHUykgJChDQ0FTRkxBR1MpJywKKwkJICAgJ2NjZXInID0+ICdDQ0FTJywKKwkJICAgJ2NvbXBpbGVyJyA9PiAnQ0NBU0NPTVBJTEUnLAorCQkgICAnY29tcGlsZV9mbGFnJyA9PiAnLWMnLAorCQkgICAnb3V0cHV0X2ZsYWcnID0+ICctbycsCisJCSAgICdleHRlbnNpb25zJyA9PiBbJy5zJ10sCisKKwkJICAgIyBXaXRoIGFzc2VtYmx5IHdlIHN0aWxsIHVzZSB0aGUgQyBsaW5rZXIuCisJCSAgICdfZmluaXNoJyA9PiBcJmxhbmdfY19maW5pc2gpOworCisjIFByZXByb2Nlc3NlZCBBc3NlbWJsZXIuCityZWdpc3Rlcl9sYW5ndWFnZSAoJ25hbWUnID0+ICdjcHBhc20nLAorCQkgICAnTmFtZScgPT4gJ1ByZXByb2Nlc3NlZCBBc3NlbWJsZXInLAorCQkgICAnY29uZmlnX3ZhcnMnID0+IFsnQ0NBUycsICdDQ0FTRkxBR1MnXSwKKworCQkgICAnYXV0b2RlcCcgPT4gJ0NDQVMnLAorCQkgICAnZmxhZ3MnID0+IFsnQ0NBU0ZMQUdTJywgJ0NQUEZMQUdTJ10sCisJCSAgICdjb21waWxlJyA9PiAnJChDQ0FTKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DQ0FTRkxBR1MpICQoQ0NBU0ZMQUdTKScsCisJCSAgICdjY2VyJyA9PiAnQ1BQQVMnLAorCQkgICAnY29tcGlsZXInID0+ICdDUFBBU0NPTVBJTEUnLAorCQkgICAnY29tcGlsZV9mbGFnJyA9PiAnLWMnLAorCQkgICAnb3V0cHV0X2ZsYWcnID0+ICctbycsCisJCSAgICdleHRlbnNpb25zJyA9PiBbJy5TJywgJy5zeCddLAorCisJCSAgICMgV2l0aCBhc3NlbWJseSB3ZSBzdGlsbCB1c2UgdGhlIEMgbGlua2VyLgorCQkgICAnX2ZpbmlzaCcgPT4gXCZsYW5nX2NfZmluaXNoKTsKKworIyBGb3J0cmFuIDc3CityZWdpc3Rlcl9sYW5ndWFnZSAoJ25hbWUnID0+ICdmNzcnLAorCQkgICAnTmFtZScgPT4gJ0ZvcnRyYW4gNzcnLAorCQkgICAnY29uZmlnX3ZhcnMnID0+IFsnRjc3J10sCisJCSAgICdsaW5rZXInID0+ICdGNzdMSU5LJywKKwkJICAgJ2xpbmsnID0+ICckKEY3N0xEKSAkKEFNX0ZGTEFHUykgJChGRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQCcsCisJCSAgICdmbGFncycgPT4gWydGRkxBR1MnXSwKKwkJICAgJ2NvbXBpbGUnID0+ICckKEY3NykgJChBTV9GRkxBR1MpICQoRkZMQUdTKScsCisJCSAgICdjY2VyJyA9PiAnRjc3JywKKwkJICAgJ2NvbXBpbGVyJyA9PiAnRjc3Q09NUElMRScsCisJCSAgICdjb21waWxlX2ZsYWcnID0+ICctYycsCisJCSAgICdvdXRwdXRfZmxhZycgPT4gJy1vJywKKwkJICAgJ2xpYnRvb2xfdGFnJyA9PiAnRjc3JywKKwkJICAgJ2xkZXInID0+ICdGNzdMRCcsCisJCSAgICdsZCcgPT4gJyQoRjc3KScsCisJCSAgICdwdXJlJyA9PiAxLAorCQkgICAnZXh0ZW5zaW9ucycgPT4gWycuZicsICcuZm9yJ10pOworCisjIEZvcnRyYW4KK3JlZ2lzdGVyX2xhbmd1YWdlICgnbmFtZScgPT4gJ2ZjJywKKwkJICAgJ05hbWUnID0+ICdGb3J0cmFuJywKKwkJICAgJ2NvbmZpZ192YXJzJyA9PiBbJ0ZDJ10sCisJCSAgICdsaW5rZXInID0+ICdGQ0xJTksnLAorCQkgICAnbGluaycgPT4gJyQoRkNMRCkgJChBTV9GQ0ZMQUdTKSAkKEZDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQCcsCisJCSAgICdmbGFncycgPT4gWydGQ0ZMQUdTJ10sCisJCSAgICdjb21waWxlJyA9PiAnJChGQykgJChBTV9GQ0ZMQUdTKSAkKEZDRkxBR1MpJywKKwkJICAgJ2NjZXInID0+ICdGQycsCisJCSAgICdjb21waWxlcicgPT4gJ0ZDQ09NUElMRScsCisJCSAgICdjb21waWxlX2ZsYWcnID0+ICctYycsCisJCSAgICdvdXRwdXRfZmxhZycgPT4gJy1vJywKKwkJICAgJ2xpYnRvb2xfdGFnJyA9PiAnRkMnLAorCQkgICAnbGRlcicgPT4gJ0ZDTEQnLAorCQkgICAnbGQnID0+ICckKEZDKScsCisJCSAgICdwdXJlJyA9PiAxLAorCQkgICAnZXh0ZW5zaW9ucycgPT4gWycuZjkwJywgJy5mOTUnLCAnLmYwMycsICcuZjA4J10pOworCisjIFByZXByb2Nlc3NlZCBGb3J0cmFuCityZWdpc3Rlcl9sYW5ndWFnZSAoJ25hbWUnID0+ICdwcGZjJywKKwkJICAgJ05hbWUnID0+ICdQcmVwcm9jZXNzZWQgRm9ydHJhbicsCisJCSAgICdjb25maWdfdmFycycgPT4gWydGQyddLAorCQkgICAnbGlua2VyJyA9PiAnRkNMSU5LJywKKwkJICAgJ2xpbmsnID0+ICckKEZDTEQpICQoQU1fRkNGTEFHUykgJChGQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAnLAorCQkgICAnbGRlcicgPT4gJ0ZDTEQnLAorCQkgICAnbGQnID0+ICckKEZDKScsCisJCSAgICdmbGFncycgPT4gWydGQ0ZMQUdTJywgJ0NQUEZMQUdTJ10sCisJCSAgICdjY2VyJyA9PiAnUFBGQycsCisJCSAgICdjb21waWxlcicgPT4gJ1BQRkNDT01QSUxFJywKKwkJICAgJ2NvbXBpbGUnID0+ICckKEZDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9GQ0ZMQUdTKSAkKEZDRkxBR1MpJywKKwkJICAgJ2NvbXBpbGVfZmxhZycgPT4gJy1jJywKKwkJICAgJ291dHB1dF9mbGFnJyA9PiAnLW8nLAorCQkgICAnbGlidG9vbF90YWcnID0+ICdGQycsCisJCSAgICdwdXJlJyA9PiAxLAorCQkgICAnZXh0ZW5zaW9ucycgPT4gWycuRjkwJywnLkY5NScsICcuRjAzJywgJy5GMDgnXSk7CisKKyMgUHJlcHJvY2Vzc2VkIEZvcnRyYW4gNzcKKyMKKyMgVGhlIGN1cnJlbnQgc3VwcG9ydCBmb3IgcHJlcHJvY2Vzc2luZyBGb3J0cmFuIDc3IGp1c3QgaW52b2x2ZXMKKyMgcGFzc2luZyBgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpCisjICQoQ1BQRkxBR1MpJyBhcyBhZGRpdGlvbmFsIGZsYWdzIHRvIHRoZSBGb3J0cmFuIDc3IGNvbXBpbGVyLCBzaW5jZQorIyB0aGlzIGlzIGhvdyBHTlUgTWFrZSBkb2VzIGl0OyBzZWUgdGhlIGBHTlUgTWFrZSBNYW51YWwsIEVkaXRpb24gMC41MQorIyBmb3IgYG1ha2UnIFZlcnNpb24gMy43NiBCZXRhJyAoc3BlY2lmaWNhbGx5LCBmcm9tIGluZm8gZmlsZQorIyBgKG1ha2UpQ2F0YWxvZ3VlIG9mIFJ1bGVzJykuCisjCisjIEEgYmV0dGVyIGFwcHJvYWNoIHdvdWxkIGJlIHRvIHdyaXRlIGFuIEF1dG9jb25mIHRlc3QKKyMgKGkuZS4gQUNfUFJPR19GUFApIGZvciBhIEZvcnRyYW4gNzcgcHJlcHJvY2Vzc29yLCBiZWNhdXNlIG5vdCBhbGwKKyMgRm9ydHJhbiA3NyBjb21waWxlcnMga25vdyBob3cgdG8gZG8gcHJlcHJvY2Vzc2luZy4gIFRoZSBBdXRvY29uZgorIyBtYWNybyBBQ19QUk9HX0ZQUCBzaG91bGQgdGVzdCB0aGUgRm9ydHJhbiA3NyBjb21waWxlciBmaXJzdCBmb3IKKyMgcHJlcHJvY2Vzc2luZyBjYXBhYmlsaXRpZXMsIGFuZCB0aGVuIGZhbGwgYmFjayBvbiBjcHAgKGlmIGNwcCB3ZXJlCisjIGF2YWlsYWJsZSkuCityZWdpc3Rlcl9sYW5ndWFnZSAoJ25hbWUnID0+ICdwcGY3NycsCisJCSAgICdOYW1lJyA9PiAnUHJlcHJvY2Vzc2VkIEZvcnRyYW4gNzcnLAorCQkgICAnY29uZmlnX3ZhcnMnID0+IFsnRjc3J10sCisJCSAgICdsaW5rZXInID0+ICdGNzdMSU5LJywKKwkJICAgJ2xpbmsnID0+ICckKEY3N0xEKSAkKEFNX0ZGTEFHUykgJChGRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQCcsCisJCSAgICdsZGVyJyA9PiAnRjc3TEQnLAorCQkgICAnbGQnID0+ICckKEY3NyknLAorCQkgICAnZmxhZ3MnID0+IFsnRkZMQUdTJywgJ0NQUEZMQUdTJ10sCisJCSAgICdjY2VyJyA9PiAnUFBGNzcnLAorCQkgICAnY29tcGlsZXInID0+ICdQUEY3N0NPTVBJTEUnLAorCQkgICAnY29tcGlsZScgPT4gJyQoRjc3KSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9GRkxBR1MpICQoRkZMQUdTKScsCisJCSAgICdjb21waWxlX2ZsYWcnID0+ICctYycsCisJCSAgICdvdXRwdXRfZmxhZycgPT4gJy1vJywKKwkJICAgJ2xpYnRvb2xfdGFnJyA9PiAnRjc3JywKKwkJICAgJ3B1cmUnID0+IDEsCisJCSAgICdleHRlbnNpb25zJyA9PiBbJy5GJ10pOworCisjIFJhdGZvci4KK3JlZ2lzdGVyX2xhbmd1YWdlICgnbmFtZScgPT4gJ3JhdGZvcicsCisJCSAgICdOYW1lJyA9PiAnUmF0Zm9yJywKKwkJICAgJ2NvbmZpZ192YXJzJyA9PiBbJ0Y3NyddLAorCQkgICAnbGlua2VyJyA9PiAnRjc3TElOSycsCisJCSAgICdsaW5rJyA9PiAnJChGNzdMRCkgJChBTV9GRkxBR1MpICQoRkZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAnLAorCQkgICAnbGRlcicgPT4gJ0Y3N0xEJywKKwkJICAgJ2xkJyA9PiAnJChGNzcpJywKKwkJICAgJ2ZsYWdzJyA9PiBbJ1JGTEFHUycsICdGRkxBR1MnXSwKKwkJICAgIyBGSVhNRSBhbHNvIEZGTEFHUy4KKwkJICAgJ2NvbXBpbGUnID0+ICckKEY3NykgJChBTV9GRkxBR1MpICQoRkZMQUdTKSAkKEFNX1JGTEFHUykgJChSRkxBR1MpJywKKwkJICAgJ2NjZXInID0+ICdGNzcnLAorCQkgICAnY29tcGlsZXInID0+ICdSQ09NUElMRScsCisJCSAgICdjb21waWxlX2ZsYWcnID0+ICctYycsCisJCSAgICdvdXRwdXRfZmxhZycgPT4gJy1vJywKKwkJICAgJ2xpYnRvb2xfdGFnJyA9PiAnRjc3JywKKwkJICAgJ3B1cmUnID0+IDEsCisJCSAgICdleHRlbnNpb25zJyA9PiBbJy5yJ10pOworCisjIEphdmEgdmlhIGdjai4KK3JlZ2lzdGVyX2xhbmd1YWdlICgnbmFtZScgPT4gJ2phdmEnLAorCQkgICAnTmFtZScgPT4gJ0phdmEnLAorCQkgICAnY29uZmlnX3ZhcnMnID0+IFsnR0NKJ10sCisJCSAgICdsaW5rZXInID0+ICdHQ0pMSU5LJywKKwkJICAgJ2xpbmsnID0+ICckKEdDSkxEKSAkKEFNX0dDSkZMQUdTKSAkKEdDSkZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAnLAorCQkgICAnYXV0b2RlcCcgPT4gJ0dDSicsCisJCSAgICdmbGFncycgPT4gWydHQ0pGTEFHUyddLAorCQkgICAnY29tcGlsZScgPT4gJyQoR0NKKSAkKEFNX0dDSkZMQUdTKSAkKEdDSkZMQUdTKScsCisJCSAgICdjY2VyJyA9PiAnR0NKJywKKwkJICAgJ2NvbXBpbGVyJyA9PiAnR0NKQ09NUElMRScsCisJCSAgICdjb21waWxlX2ZsYWcnID0+ICctYycsCisJCSAgICdvdXRwdXRfZmxhZycgPT4gJy1vJywKKwkJICAgJ2xpYnRvb2xfdGFnJyA9PiAnR0NKJywKKwkJICAgJ2xkZXInID0+ICdHQ0pMRCcsCisJCSAgICdsZCcgPT4gJyQoR0NKKScsCisJCSAgICdwdXJlJyA9PiAxLAorCQkgICAnZXh0ZW5zaW9ucycgPT4gWycuamF2YScsICcuY2xhc3MnLCAnLnppcCcsICcuamFyJ10pOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgRXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9ucy4KKworIyBlcnJfYW0gKCRNRVNTQUdFLCBbJU9QVElPTlNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBVbmNhdGVnb3JpemVkIGVycm9ycyBhYm91dCB0aGUgY3VycmVudCBNYWtlZmlsZS5hbS4KK3N1YiBlcnJfYW0gKCQ7JSkKK3sKKyAgbXNnX2FtICgnZXJyb3InLCBAXyk7Cit9CisKKyMgZXJyX2FjICgkTUVTU0FHRSwgWyVPUFRJT05TXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVW5jYXRlZ29yaXplZCBlcnJvcnMgYWJvdXQgY29uZmlndXJlLmFjLgorc3ViIGVycl9hYyAoJDslKQoreworICBtc2dfYWMgKCdlcnJvcicsIEBfKTsKK30KKworIyBtc2dfYW0gKCRDSEFOTkVMLCAkTUVTU0FHRSwgWyVPUFRJT05TXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1lc3NhZ2VzIGFib3V0IGFib3V0IHRoZSBjdXJyZW50IE1ha2VmaWxlLmFtLgorc3ViIG1zZ19hbSAoJCQ7JSkKK3sKKyAgbXkgKCRjaGFubmVsLCAkbXNnLCAlb3B0cykgPSBAXzsKKyAgbXNnICRjaGFubmVsLCAiJHthbV9maWxlfS5hbSIsICRtc2csICVvcHRzOworfQorCisjIG1zZ19hYyAoJENIQU5ORUwsICRNRVNTQUdFLCBbJU9QVElPTlNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTWVzc2FnZXMgYWJvdXQgYWJvdXQgY29uZmlndXJlLmFjLgorc3ViIG1zZ19hYyAoJCQ7JSkKK3sKKyAgbXkgKCRjaGFubmVsLCAkbXNnLCAlb3B0cykgPSBAXzsKKyAgbXNnICRjaGFubmVsLCAkY29uZmlndXJlX2FjLCAkbXNnLCAlb3B0czsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIHN1YnN0ICgkVEVYVCkKKyMgLS0tLS0tLS0tLS0tLQorIyBSZXR1cm4gYSBjb25maWd1cmUtc3R5bGUgc3Vic3RpdHV0aW9uIHVzaW5nIHRoZSBpbmRpY2F0ZWQgdGV4dC4KKyMgV2UgZG8gdGhpcyB0byBhdm9pZCBoYXZpbmcgdGhlIHN1YnN0aXR1dGlvbnMgZGlyZWN0bHkgaW4gYXV0b21ha2UuaW47CisjIHdoZW4gd2UgZG8gdGhhdCB0aGV5IGFyZSBzb21ldGltZXMgcmVtb3ZlZCBhbmQgdGhpcyBjYXVzZXMgY29uZnVzaW9uCisjIGFuZCBidWdzLgorc3ViIHN1YnN0ICgkKQoreworICAgIG15ICgkdGV4dCkgPSBAXzsKKyAgICByZXR1cm4gJ0AnIC4gJHRleHQgLiAnQCc7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCisjICRCQUNLUEFUSAorIyAmYmFja25hbWUgKCRSRUwtRElSKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZiBJIGBjZCAkUkVMLURJUicsIHRoZW4gdG8gY29tZSBiYWNrLCBJIHNob3VsZCBgY2QgJEJBQ0tQQVRIJy4KKyMgRm9yIGluc3RhbmNlIGBzcmMvZm9vJyA9PiBgLi4vLi4nLgorIyBXb3JrcyB3aXRoIG5vbiBzdHJpY3RseSBpbmNyZWFzaW5nIHBhdGhzLCBpLmUuLCBgc3JjLy4uL2xpYicgPT4gYC4uJy4KK3N1YiBiYWNrbmFtZSAoJCkKK3sKKyAgICBteSAoJGZpbGUpID0gQF87CisgICAgbXkgQHJlczsKKyAgICBmb3JlYWNoIChzcGxpdCAoL1wvLywgJGZpbGUpKQorICAgIHsKKwluZXh0IGlmICRfIGVxICcuJyB8fCAkXyBlcSAnJzsKKwlpZiAoJF8gZXEgJy4uJykKKwl7CisJICAgIHBvcCBAcmVzCisJICAgICAgb3IgcHJvZ19lcnJvciAoInRyeWluZyB0byByZXZlcnNlIHBhdGggYCRmaWxlJyBwb2ludGluZyBvdXRzaWRlIHRyZWUiKTsKKwl9CisJZWxzZQorCXsKKwkgICAgcHVzaCAoQHJlcywgJy4uJyk7CisJfQorICAgIH0KKyAgICByZXR1cm4gam9pbiAoJy8nLCBAcmVzKSB8fCAnLic7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBgc2lsZW50LXJ1bGVzJyBtb2RlIGhhbmRsaW5nIGZ1bmN0aW9ucy4KKworIyB2ZXJib3NlX3ZhciAoTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoZSBwdWJsaWMgdmFyaWFibGUgc3RlbSB1c2VkIHRvIGltcGxlbWVudCBgc2lsZW50LXJ1bGVzJy4KK3N1YiB2ZXJib3NlX3ZhciAoJCkKK3sKKyAgICBteSAoJG5hbWUpID0gQF87CisgICAgcmV0dXJuICdBTV9WXycgLiAkbmFtZTsKK30KKworIyB2ZXJib3NlX3ByaXZhdGVfdmFyIChOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGUgbmFtaW5nIHBvbGljeSBmb3IgdGhlIHByaXZhdGUgdmFyaWFibGVzIGZvciBgc2lsZW50LXJ1bGVzJy4KK3N1YiB2ZXJib3NlX3ByaXZhdGVfdmFyICgkKQoreworICAgIG15ICgkbmFtZSkgPSBAXzsKKyAgICByZXR1cm4gJ2FtX192XycgLiAkbmFtZTsKK30KKworIyBkZWZpbmVfdmVyYm9zZV92YXIgKE5BTUUsIFZBTCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZvciBgc2lsZW50LXJ1bGVzJyBtb2RlLCBzZXR1cCBWQVIgYW5kIGRpc3BhdGNoZXIsIHRvIGV4cGFuZCB0byBWQUwgaWYgc2lsZW50Lgorc3ViIGRlZmluZV92ZXJib3NlX3ZhciAoJCQpCit7CisgICAgbXkgKCRuYW1lLCAkdmFsKSA9IEBfOworICAgIG15ICR2YXIgPSB2ZXJib3NlX3ZhciAoJG5hbWUpOworICAgIG15ICRwdmFyID0gdmVyYm9zZV9wcml2YXRlX3ZhciAoJG5hbWUpOworICAgIG15ICRzaWxlbnRfdmFyID0gJHB2YXIgLiAnXzAnOworICAgIGlmIChvcHRpb24gJ3NpbGVudC1ydWxlcycpCisgICAgICB7CisJIyBVc2luZyBgJFYnIGluc3RlYWQgb2YgYCQoViknIGJyZWFrcyBJUklYIG1ha2UuCisJZGVmaW5lX3ZhcmlhYmxlICgkdmFyLCAnJCgnIC4gJHB2YXIgLiAnXyQoVikpJywgSU5URVJOQUwpOworCWRlZmluZV92YXJpYWJsZSAoJHB2YXIgLiAnXycsICckKCcgLiAkcHZhciAuICdfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpJywgSU5URVJOQUwpOworCUF1dG9tYWtlOjpWYXJpYWJsZTo6ZGVmaW5lICgkc2lsZW50X3ZhciwgVkFSX0FVVE9NQUtFLCAnJywgVFJVRSwgJHZhbCwKKwkJCQkgICAgJycsIElOVEVSTkFMLCBWQVJfQVNJUykKKwkgIGlmICghIHZhcmRlZiAoJHNpbGVudF92YXIsIFRSVUUpKTsKKyAgICAgIH0KK30KKworIyBBYm92ZSBzaG91bGQgbm90IGJlIG5lZWRlZCBpbiB0aGUgZ2VuZXJhbCBhdXRvbWFrZSBjb2RlLgorCisjIHZlcmJvc2VfZmxhZyAoTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb250ZW50cyBvZiAlVkVSQk9TRSU6IHZhcmlhYmxlIHRvIGV4cGFuZCBiZWZvcmUgcnVsZSBjb21tYW5kLgorc3ViIHZlcmJvc2VfZmxhZyAoJCkKK3sKKyAgICBteSAoJG5hbWUpID0gQF87CisgICAgcmV0dXJuICckKCcgLiB2ZXJib3NlX3ZhciAoJG5hbWUpIC4gJyknCisgICAgICBpZiAob3B0aW9uICdzaWxlbnQtcnVsZXMnKTsKKyAgICByZXR1cm4gJyc7Cit9CisKKyMgc2lsZW50X2ZsYWcKKyMgLS0tLS0tLS0tLS0KKyMgQ29udGVudHMgb2YgJVNJTEVOVCU6IHZhcmlhYmxlIHRvIGV4cGFuZCB0byBgQCcgd2hlbiBzaWxlbnQuCitzdWIgc2lsZW50X2ZsYWcgKCkKK3sKKyAgICByZXR1cm4gdmVyYm9zZV9mbGFnICgnYXQnKTsKK30KKworIyBkZWZpbmVfdmVyYm9zZV90YWd2YXIgKE5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5nYWdlIHRoZSBuZWVkZWQgYHNpbGVudC1ydWxlcycgbWFjaGluZXJ5IGZvciB0YWcgTkFNRS4KK3N1YiBkZWZpbmVfdmVyYm9zZV90YWd2YXIgKCQpCit7CisgICAgbXkgKCRuYW1lKSA9IEBfOworICAgIGlmIChvcHRpb24gJ3NpbGVudC1ydWxlcycpCisgICAgICB7CisJZGVmaW5lX3ZlcmJvc2VfdmFyICgkbmFtZSwgJ0BlY2hvICIgICcuICRuYW1lIC4gJyAnIHggKDYgLSBsZW5ndGggKCRuYW1lKSkgLiAnIiAkQDsnKTsKKwlkZWZpbmVfdmVyYm9zZV92YXIgKCdhdCcsICdAJyk7CisgICAgICB9Cit9CisKKyMgZGVmaW5lX3ZlcmJvc2VfbGlidG9vbAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuZ2FnZSB0aGUgbmVlZGVkIGBzaWxlbnQtcnVsZXMnIG1hY2hpbmVyeSBmb3IgYGxpYnRvb2wgLS1zaWxlbnQnLgorc3ViIGRlZmluZV92ZXJib3NlX2xpYnRvb2wgKCkKK3sKKyAgICBkZWZpbmVfdmVyYm9zZV92YXIgKCdsdCcsICctLXNpbGVudCcpOworICAgIHJldHVybiB2ZXJib3NlX2ZsYWcgKCdsdCcpOworfQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCisjIEhhbmRsZSBBVVRPTUFLRV9PUFRJT05TIHZhcmlhYmxlLiAgUmV0dXJuIDEgb24gZXJyb3IsIDAgb3RoZXJ3aXNlLgorc3ViIGhhbmRsZV9vcHRpb25zCit7CisgIG15ICR2YXIgPSB2YXIgKCdBVVRPTUFLRV9PUFRJT05TJyk7CisgIGlmICgkdmFyKQorICAgIHsKKyAgICAgIGlmICgkdmFyLT5oYXNfY29uZGl0aW9uYWxfY29udGVudHMpCisJeworCSAgbXNnX3ZhciAoJ3Vuc3VwcG9ydGVkJywgJHZhciwKKwkJICAgImBBVVRPTUFLRV9PUFRJT05TJyBjYW5ub3QgaGF2ZSBjb25kaXRpb25hbCBjb250ZW50cyIpOworCX0KKyAgICAgIGZvcmVhY2ggbXkgJGxvY3ZhbHMgKCR2YXItPnZhbHVlX2FzX2xpc3RfcmVjdXJzaXZlIChjb25kX2ZpbHRlciA9PiBUUlVFLAorCQkJCQkJCSAgbG9jYXRpb24gPT4gMSkpCisJeworCSAgbXkgKCRsb2MsICR2YWx1ZSkgPSBAJGxvY3ZhbHM7CisJICByZXR1cm4gMSBpZiAocHJvY2Vzc19vcHRpb25fbGlzdCAoJGxvYywgJHZhbHVlKSkKKwl9CisgICAgfQorCisgICMgT3ZlcnJpZGUgcG9ydGFiaWxpdHktcmVjdXJzaXZlIHdhcm5pbmcuCisgIHN3aXRjaF93YXJuaW5nICgnbm8tcG9ydGFiaWxpdHktcmVjdXJzaXZlJykKKyAgICBpZiBvcHRpb24gJ3NpbGVudC1ydWxlcyc7CisKKyAgaWYgKCRzdHJpY3RuZXNzID09IEdOSVRTKQorICAgIHsKKyAgICAgIHNldF9vcHRpb24gKCdyZWFkbWUtYWxwaGEnLCBJTlRFUk5BTCk7CisgICAgICBzZXRfb3B0aW9uICgnc3RkLW9wdGlvbnMnLCBJTlRFUk5BTCk7CisgICAgICBzZXRfb3B0aW9uICgnY2hlY2stbmV3cycsIElOVEVSTkFMKTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKyMgc2hhZG93X3VuY29uZGl0aW9uYWxseSAoJHZhcm5hbWUsICR3aGVyZSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmV0dXJuIGEgJCh2YXJpYWJsZSkgdGhhdCBjb250YWlucyBhbGwgcG9zc2libGUgdmFsdWVzCisjICR2YXJuYW1lIGNhbiB0YWtlLgorIyBJZiB0aGUgVkFSIHdhc24ndCBkZWZpbmVkIGNvbmRpdGlvbmFsbHksIHJldHVybiAkKFZBUikuCisjIE90aGVyd2lzZSB3ZSBjcmVhdGUgYW4gYW1fX1ZBUl9ESVNUIHZhcmlhYmxlIHdoaWNoIGNvbnRhaW5zCisjIGFsbCBwb3NzaWJsZSB2YWx1ZXMsIGFuZCByZXR1cm4gJChhbV9fVkFSX0RJU1QpLgorc3ViIHNoYWRvd191bmNvbmRpdGlvbmFsbHkgKCQkKQoreworICBteSAoJHZhcm5hbWUsICR3aGVyZSkgPSBAXzsKKyAgbXkgJHZhciA9IHZhciAkdmFybmFtZTsKKyAgaWYgKCR2YXItPmhhc19jb25kaXRpb25hbF9jb250ZW50cykKKyAgICB7CisgICAgICAkdmFybmFtZSA9ICJhbV9fJHt2YXJuYW1lfV9ESVNUIjsKKyAgICAgIG15IEBmaWxlcyA9IHVuaXEgKCR2YXItPnZhbHVlX2FzX2xpc3RfcmVjdXJzaXZlKTsKKyAgICAgIGRlZmluZV9wcmV0dHlfdmFyaWFibGUgKCR2YXJuYW1lLCBUUlVFLCAkd2hlcmUsIEBmaWxlcyk7CisgICAgfQorICByZXR1cm4gIlwkKCR2YXJuYW1lKSIKK30KKworIyBnZXRfb2JqZWN0X2V4dGVuc2lvbiAoJEVYVEVOU0lPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByZWZpeCAkRVhURU5TSU9OIHdpdGggJFUgaWYgYW5zaTJrbnIgaXMgaW4gdXNlLgorc3ViIGdldF9vYmplY3RfZXh0ZW5zaW9uICgkKQoreworICAgIG15ICgkZXh0ZW5zaW9uKSA9IEBfOworCisgICAgIyBDaGVjayBmb3IgYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24uCisgICAgJGV4dGVuc2lvbiA9ICckVScgLiAkZXh0ZW5zaW9uCisgICAgICBpZiBvcHRpb24gJ2Fuc2kya25yJzsKKworICAgICRnZXRfb2JqZWN0X2V4dGVuc2lvbl93YXNfcnVuID0gMTsKKworICAgIHJldHVybiAkZXh0ZW5zaW9uOworfQorCisjIGNoZWNrX3VzZXJfdmFyaWFibGVzIChATElTVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNYWtlIHN1cmUgZWFjaCB2YXJpYWJsZSBWQVIgaW4gQExJU1QgZG9lcyBub3QgZXhpc3QsIHN1Z2dlc3QgdXNpbmcgQU1fVkFSCisjIG90aGVyd2lzZS4KK3N1YiBjaGVja191c2VyX3ZhcmlhYmxlcyAoQCkKK3sKKyAgbXkgQGRvbnRfb3ZlcnJpZGUgPSBAXzsKKyAgZm9yZWFjaCBteSAkZmxhZyAoQGRvbnRfb3ZlcnJpZGUpCisgICAgeworICAgICAgbXkgJHZhciA9IHZhciAkZmxhZzsKKyAgICAgIGlmICgkdmFyKQorCXsKKwkgIGZvciBteSAkY29uZCAoJHZhci0+Y29uZGl0aW9ucy0+Y29uZHMpCisJICAgIHsKKwkgICAgICBpZiAoJHZhci0+cmRlZiAoJGNvbmQpLT5vd25lciA9PSBWQVJfTUFLRUZJTEUpCisJCXsKKwkJICBtc2dfY29uZF92YXIgKCdnbnUnLCAkY29uZCwgJGZsYWcsCisJCQkJImAkZmxhZycgaXMgYSB1c2VyIHZhcmlhYmxlLCAiCisJCQkJLiAieW91IHNob3VsZCBub3Qgb3ZlcnJpZGUgaXQ7XG4iCisJCQkJLiAidXNlIGBBTV8kZmxhZycgaW5zdGVhZC4iKTsKKwkJfQorCSAgICB9CisJfQorICAgIH0KK30KKworIyBDYWxsIGZpbmlzaCBmdW5jdGlvbiBmb3IgZWFjaCBsYW5ndWFnZSB0aGF0IHdhcyB1c2VkLgorc3ViIGhhbmRsZV9sYW5ndWFnZXMKK3sKKyAgICBpZiAoISBvcHRpb24gJ25vLWRlcGVuZGVuY2llcycpCisgICAgeworCSMgSW5jbHVkZSBhdXRvLWRlcCBjb2RlLiAgRG9uJ3QgaW5jbHVkZSBpdCBpZiBERVBfRklMRVMgd291bGQKKwkjIGJlIGVtcHR5LgorCWlmICgmc2F3X3NvdXJjZXNfcCAoMCkgJiYga2V5cyAlZGVwX2ZpbGVzKQorCXsKKwkgICAgIyBTZXQgbG9jYXRpb24gb2YgZGVwY29tcC4KKwkgICAgJmRlZmluZV92YXJpYWJsZSAoJ2RlcGNvbXAnLAorCQkJICAgICAgIlwkKFNIRUxMKSAkYW1fY29uZmlnX2F1eF9kaXIvZGVwY29tcCIsCisJCQkgICAgICBJTlRFUk5BTCk7CisJICAgICZkZWZpbmVfdmFyaWFibGUgKCdhbV9fZGVwZmlsZXNfbWF5YmUnLCAnZGVwZmlsZXMnLCBJTlRFUk5BTCk7CisKKwkgICAgcmVxdWlyZV9jb25mX2ZpbGUgKCIkYW1fZmlsZS5hbSIsIEZPUkVJR04sICdkZXBjb21wJyk7CisKKwkgICAgbXkgQGRlcGxpc3QgPSBzb3J0IGtleXMgJWRlcF9maWxlczsKKwkgICAgIyBHZW5lcmF0ZSBlYWNoIGBpbmNsdWRlJyBpbmRpdmlkdWFsbHkuICBJcml4IDYgbWFrZSB3aWxsCisJICAgICMgbm90IHByb3Blcmx5IGluY2x1ZGUgc2V2ZXJhbCBmaWxlcyByZXN1bHRpbmcgZnJvbSBhCisJICAgICMgdmFyaWFibGUgZXhwYW5zaW9uOyBnZW5lcmF0aW5nIG1hbnkgc2VwYXJhdGUgaW5jbHVkZXMKKwkgICAgIyBzZWVtcyBzYWZlc3QuCisJICAgICRvdXRwdXRfcnVsZXMgLj0gIlxuIjsKKwkgICAgZm9yZWFjaCBteSAkaXRlciAoQGRlcGxpc3QpCisJICAgIHsKKwkJJG91dHB1dF9ydWxlcyAuPSAoc3Vic3QgKCdBTURFUF9UUlVFJykKKwkJCQkgIC4gc3Vic3QgKCdhbV9faW5jbHVkZScpCisJCQkJICAuICcgJworCQkJCSAgLiBzdWJzdCAoJ2FtX19xdW90ZScpCisJCQkJICAuICRpdGVyCisJCQkJICAuIHN1YnN0ICgnYW1fX3F1b3RlJykKKwkJCQkgIC4gIlxuIik7CisJICAgIH0KKworCSAgICAjIENvbXB1dGUgdGhlIHNldCBvZiBkaXJlY3RvcmllcyB0byByZW1vdmUgaW4gZGlzdGNsZWFuLWRlcGVuZC4KKwkgICAgbXkgQGRlcGRpcnMgPSB1bmlxIChtYXAgeyBkaXJuYW1lICgkXykgfSBAZGVwbGlzdCk7CisJICAgICRvdXRwdXRfcnVsZXMgLj0gJmZpbGVfY29udGVudHMgKCdkZXBlbmQnLAorCQkJCQkgICAgIG5ldyBBdXRvbWFrZTo6TG9jYXRpb24sCisJCQkJCSAgICAgREVQRElSUyA9PiAiQGRlcGRpcnMiKTsKKwl9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJJmRlZmluZV92YXJpYWJsZSAoJ2RlcGNvbXAnLCAnJywgSU5URVJOQUwpOworCSZkZWZpbmVfdmFyaWFibGUgKCdhbV9fZGVwZmlsZXNfbWF5YmUnLCAnJywgSU5URVJOQUwpOworICAgIH0KKworICAgIG15ICVkb25lOworCisgICAgIyBJcyB0aGUgYyBsaW5rZXIgbmVlZGVkPworICAgIG15ICRuZWVkc19jID0gMDsKKyAgICBmb3JlYWNoIG15ICRleHQgKHNvcnQga2V5cyAlZXh0ZW5zaW9uX3NlZW4pCisgICAgeworCW5leHQgdW5sZXNzICRleHRlbnNpb25fbWFweyRleHR9OworCisJbXkgJGxhbmcgPSAkbGFuZ3VhZ2VzeyRleHRlbnNpb25fbWFweyRleHR9fTsKKworCW15ICRydWxlX2ZpbGUgPSAkbGFuZy0+cnVsZV9maWxlIHx8ICdkZXBlbmQyJzsKKworCSMgR2V0IGluZm9ybWF0aW9uIG9uICRMQU5HLgorCW15ICRwZnggPSAkbGFuZy0+YXV0b2RlcDsKKwlteSAkZnBmeCA9ICgkcGZ4IGVxICcnKSA/ICdDQycgOiAkcGZ4OworCisJbXkgKCRBTURFUCwgJEZBU1RERVApID0KKwkgIChvcHRpb24gJ25vLWRlcGVuZGVuY2llcycgfHwgJGxhbmctPmF1dG9kZXAgZXEgJ25vJykKKwkgID8gKCdGQUxTRScsICdGQUxTRScpIDogKCdBTURFUCcsICJhbV9fZmFzdGRlcCRmcGZ4Iik7CisKKwlteSAkdmVyYm9zZSA9IHZlcmJvc2VfZmxhZyAoJGxhbmctPmNjZXIgfHwgJ0dFTicpOworCW15ICRzaWxlbnQgPSBzaWxlbnRfZmxhZyAoKTsKKworCW15ICV0cmFuc2Zvcm0gPSAoJ0VYVCcgICAgID0+ICRleHQsCisJCQkgJ1BGWCcgICAgID0+ICRwZngsCisJCQkgJ0ZQRlgnICAgID0+ICRmcGZ4LAorCQkJICdBTURFUCcgICA9PiAkQU1ERVAsCisJCQkgJ0ZBU1RERVAnID0+ICRGQVNUREVQLAorCQkJICctYycgICAgICA9PiAkbGFuZy0+Y29tcGlsZV9mbGFnIHx8ICcnLAorCQkJICMgVGhlc2UgYXJlIG5vdCB1c2VkLCBidXQgdGhleSBuZWVkIHRvIGJlIGRlZmluZWQKKwkJCSAjIHNvICZ0cmFuc2Zvcm0gZG8gbm90IGNvbXBsYWluLgorCQkJIFNVQkRJUk9CSiAgICAgPT4gMCwKKwkJCSAnREVSSVZFRC1FWFQnID0+ICdCVUcnLAorCQkJIERJU1RfU09VUkNFICAgPT4gMSwKKwkJCSBWRVJCT1NFICAgPT4gJHZlcmJvc2UsCisJCQkgU0lMRU5UICAgID0+ICRzaWxlbnQsCisJCQkpOworCisJIyBHZW5lcmF0ZSB0aGUgYXBwcm9wcmlhdGUgcnVsZXMgZm9yIHRoaXMgZXh0ZW5zaW9uLgorCWlmICgoKCEgb3B0aW9uICduby1kZXBlbmRlbmNpZXMnKSAmJiAkbGFuZy0+YXV0b2RlcCBuZSAnbm8nKQorCSAgICB8fCBkZWZpbmVkICRsYW5nLT5jb21waWxlKQorCXsKKwkgICAgIyBTb21lIEMgY29tcGlsZXJzIGRvbid0IHN1cHBvcnQgLWMgLW8uICBVc2UgaXQgb25seSBpZiByZWFsbHkKKwkgICAgIyBuZWVkZWQuCisJICAgIG15ICRvdXRwdXRfZmxhZyA9ICRsYW5nLT5vdXRwdXRfZmxhZyB8fCAnJzsKKwkgICAgJG91dHB1dF9mbGFnID0gJy1vJworCSAgICAgIGlmICghICRvdXRwdXRfZmxhZworCQkgICYmICRsYW5nLT5uYW1lIGVxICdjJworCQkgICYmIG9wdGlvbiAnc3ViZGlyLW9iamVjdHMnKTsKKworCSAgICAjIENvbXB1dGUgYSBwb3NzaWJsZSBkZXJpdmVkIGV4dGVuc2lvbi4KKwkgICAgIyBUaGlzIGlzIG5vdCB1c2VkIGJ5IGRlcGVuZDIuYW0uCisJICAgIG15ICRkZXJfZXh0ID0gKCZ7JGxhbmctPm91dHB1dF9leHRlbnNpb25zfSAoJGV4dCkpWzBdOworCisJICAgICMgV2hlbiB3ZSBvdXRwdXQgYW4gaW5mZXJlbmNlIHJ1bGUgbGlrZSBgLmMubzonIHdlCisJICAgICMgaGF2ZSB0d28gY2FzZXMgdG8gY29uc2lkZXI6IGVpdGhlciBzdWJkaXItb2JqZWN0cworCSAgICAjIGlzIHVzZWQsIG9yIGl0IGlzIG5vdC4KKwkgICAgIworCSAgICAjIEluIHRoZSBsYXR0ZXIgY2FzZSB0aGUgcnVsZSBpcyB1c2VkIHRvIGJ1aWxkIG9iamVjdHMKKwkgICAgIyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIGFuZCBkZXBlbmRlbmNpZXMgYWx3YXlzCisJICAgICMgZ28gaW50byBgLi8kKERFUERJUikvJy4gIFdlIGNhbiBoYXJkLWNvZGUgdGhpcyB2YWx1ZS4KKwkgICAgIworCSAgICAjIEluIHRoZSBmb3JtZXIgY2FzZSB0aGUgcnVsZSBjYW4gYmUgdXNlZCB0byBidWlsZAorCSAgICAjIG9iamVjdHMgaW4gc3ViLWRpcmVjdG9yaWVzIHRvby4gIERlcGVuZGVuY2llcyBzaG91bGQKKwkgICAgIyBnbyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBzdWItZGlyZWN0b3JpZXMsIGUuZy4sCisJICAgICMgYHN1Yi8kKERFUERJUikvJy4gIFRoZSB2YWx1ZSBvZiB0aGlzIGRpcmVjdG9yeQorCSAgICAjIG5lZWRzIHRvIGJlIGNvbXB1dGVkIG9uLXRoZS1mbHkuCisJICAgICMKKwkgICAgIyBERVBCQVNFIGhvbGRzIHRoZSBuYW1lIG9mIHRoaXMgZGlyZWN0b3J5LCBwbHVzIHRoZQorCSAgICAjIGJhc2VuYW1lIHBhcnQgb2YgdGhlIG9iamVjdCBmaWxlIChleHRlbnNpb25zIFBvLCBUUG8sCisJICAgICMgUGxvLCBUUGxvIHdpbGwgYmUgYWRkZWQgbGF0ZXIgYXMgYXBwcm9wcmlhdGUpLiAgSXQgaXMKKwkgICAgIyBlaXRoZXIgaGFyZGNvZGVkLCBvciBhIHNoZWxsIHZhcmlhYmxlIChgJGRlcGJhc2UnKSB0aGF0CisJICAgICMgd2lsbCBiZSBjb21wdXRlZCBieSB0aGUgcnVsZS4KKwkgICAgbXkgJGRlcGJhc2UgPQorCSAgICAgIG9wdGlvbiAoJ3N1YmRpci1vYmplY3RzJykgPyAnJCRkZXBiYXNlJyA6ICckKERFUERJUikvJConOworCSAgICAkb3V0cHV0X3J1bGVzIC49CisJICAgICAgZmlsZV9jb250ZW50cyAoJHJ1bGVfZmlsZSwKKwkJCSAgICAgbmV3IEF1dG9tYWtlOjpMb2NhdGlvbiwKKwkJCSAgICAgJXRyYW5zZm9ybSwKKwkJCSAgICAgR0VORVJJQyAgID0+IDEsCisKKwkJCSAgICAgJ0RFUklWRUQtRVhUJyA9PiAkZGVyX2V4dCwKKworCQkJICAgICBERVBCQVNFICAgPT4gJGRlcGJhc2UsCisJCQkgICAgIEJBU0UgICAgICA9PiAnJConLAorCQkJICAgICBTT1VSQ0UgICAgPT4gJyQ8JywKKwkJCSAgICAgU09VUkNFRkxBRyA9PiAkc291cmNlZmxhZ3N7JGV4dH0gfHwgJycsCisJCQkgICAgIE9CSiAgICAgICA9PiAnJEAnLAorCQkJICAgICBPQkpPQkogICAgPT4gJyRAJywKKwkJCSAgICAgTFRPQkogICAgID0+ICckQCcsCisKKwkJCSAgICAgQ09NUElMRSAgID0+ICckKCcgLiAkbGFuZy0+Y29tcGlsZXIgLiAnKScsCisJCQkgICAgIExUQ09NUElMRSA9PiAnJChMVCcgLiAkbGFuZy0+Y29tcGlsZXIgLiAnKScsCisJCQkgICAgIC1vICAgICAgICA9PiAkb3V0cHV0X2ZsYWcsCisJCQkgICAgIFNVQkRJUk9CSiA9PiAhISBvcHRpb24gJ3N1YmRpci1vYmplY3RzJyk7CisJfQorCisJIyBOb3cgaW5jbHVkZSBjb2RlIGZvciBlYWNoIHNwZWNpYWxseSBoYW5kbGVkIG9iamVjdCB3aXRoIHRoaXMKKwkjIGxhbmd1YWdlLgorCW15ICVzZWVuX2ZpbGVzID0gKCk7CisJZm9yZWFjaCBteSAkZmlsZSAoQHskbGFuZ19zcGVjaWZpY19maWxlc3skbGFuZy0+bmFtZX19KQorCXsKKwkgICAgbXkgKCRkZXJpdmVkLCAkc291cmNlLCAkb2JqLCAkbXlleHQsICRzcmNleHQsICVmaWxlX3RyYW5zZm9ybSkgPSBAJGZpbGU7CisKKwkgICAgIyBXZSBtaWdodCBzZWUgYSBnaXZlbiBvYmplY3QgdHdpY2UsIGZvciBpbnN0YW5jZSBpZiBpdCBpcworCSAgICAjIHVzZWQgdW5kZXIgZGlmZmVyZW50IGNvbmRpdGlvbnMuCisJICAgIG5leHQgaWYgZGVmaW5lZCAkc2Vlbl9maWxlc3skb2JqfTsKKwkgICAgJHNlZW5fZmlsZXN7JG9ian0gPSAxOworCisJICAgIHByb2dfZXJyb3IgKCJmb3VuZCAiIC4gJGxhbmctPm5hbWUgLgorCQkJIiBpbiBoYW5kbGVfbGFuZ3VhZ2VzLCBidXQgY29tcGlsZXIgbm90IGRlZmluZWQiKQorCSAgICAgIHVubGVzcyBkZWZpbmVkICRsYW5nLT5jb21waWxlOworCisJICAgIG15ICRvYmpfY29tcGlsZSA9ICRsYW5nLT5jb21waWxlOworCisJICAgICMgUmV3cml0ZSBlYWNoIG9jY3VycmVuY2Ugb2YgYEFNXyRmbGFnJyBpbiB0aGUgY29tcGlsZQorCSAgICAjIHJ1bGUgaW50byBgJHtkZXJpdmVkfV8kZmxhZycgaWYgaXQgZXhpc3RzLgorCSAgICBmb3IgbXkgJGZsYWcgKEB7JGxhbmctPmZsYWdzfSkKKwkgICAgICB7CisJCW15ICR2YWwgPSAiJHtkZXJpdmVkfV8kZmxhZyI7CisJCSRvYmpfY29tcGlsZSA9fiBzL1woQU1fJGZsYWdcKS9cKCR2YWxcKS8KKwkJICBpZiBzZXRfc2VlbiAoJHZhbCk7CisJICAgICAgfQorCisJICAgIG15ICRsaWJ0b29sX3RhZyA9ICcnOworCSAgICBpZiAoJGxhbmctPmxpYnRvb2xfdGFnICYmIGV4aXN0cyAkbGlidG9vbF90YWdzeyRsYW5nLT5saWJ0b29sX3RhZ30pCisJICAgICAgeworCQkkbGlidG9vbF90YWcgPSAnLS10YWc9JyAuICRsYW5nLT5saWJ0b29sX3RhZyAuICcgJworCSAgICAgIH0KKworCSAgICBteSAkcHRsdGZsYWdzID0gIiR7ZGVyaXZlZH1fTElCVE9PTEZMQUdTIjsKKwkgICAgJHB0bHRmbGFncyA9ICdBTV9MSUJUT09MRkxBR1MnIHVubGVzcyBzZXRfc2VlbiAkcHRsdGZsYWdzOworCisJICAgIG15ICRsdHZlcmJvc2UgPSBkZWZpbmVfdmVyYm9zZV9saWJ0b29sICgpOworCSAgICBteSAkb2JqX2x0Y29tcGlsZSA9CisJICAgICAgIlwkKExJQlRPT0wpICRsdHZlcmJvc2UgJGxpYnRvb2xfdGFnXCQoJHB0bHRmbGFncykgXCQoTElCVE9PTEZMQUdTKSAiCisJICAgICAgLiAiLS1tb2RlPWNvbXBpbGUgJG9ial9jb21waWxlIjsKKworCSAgICAjIFdlIF9uZWVkXyBgLW8nIGZvciBwZXIgb2JqZWN0IHJ1bGVzLgorCSAgICBteSAkb3V0cHV0X2ZsYWcgPSAkbGFuZy0+b3V0cHV0X2ZsYWcgfHwgJy1vJzsKKworCSAgICBteSAkZGVwYmFzZSA9IGRpcm5hbWUgKCRvYmopOworCSAgICAkZGVwYmFzZSA9ICcnCisJCWlmICRkZXBiYXNlIGVxICcuJzsKKwkgICAgJGRlcGJhc2UgLj0gJy8nCisJCXVubGVzcyAkZGVwYmFzZSBlcSAnJzsKKwkgICAgJGRlcGJhc2UgLj0gJyQoREVQRElSKS8nIC4gYmFzZW5hbWUgKCRvYmopOworCisJICAgICMgU3VwcG9ydCBmb3IgZGVhbnNpZmllZCBmaWxlcyBpbiBzdWJkaXJlY3RvcmllcyBpcyB1Z2x5CisJICAgICMgZW5vdWdoIHRvIGRlc2VydmUgYW4gZXhwbGFuYXRpb24uCisJICAgICMKKwkgICAgIyBBIE5vdGUgYWJvdXQgbm9ybWFsIGFuc2kya25yIHByb2Nlc3NpbmcgZmlyc3QuICBPbgorCSAgICAjCisJICAgICMgICBBVVRPTUFLRV9PUFRJT05TID0gYW5zaTJrbnIKKwkgICAgIyAgIGJpbl9QUk9HUkFNUyA9IGZvbworCSAgICAjICAgZm9vX1NPVVJDRVMgPSBmb28uYworCSAgICAjCisJICAgICMgd2UgZ2VuZXJhdGUgcnVsZXMgc2ltaWxhciB0bzoKKwkgICAgIworCSAgICAjICAgZm9vOiBmb28kVS5vOyBsaW5rIC4uLgorCSAgICAjICAgZm9vJFUubzogZm9vJFUuYzsgY29tcGlsZSAuLi4KKwkgICAgIyAgIGZvb18uYzogZm9vLmM7IGFuc2kya25yIC4uLgorCSAgICAjCisJICAgICMgdGhpcyBpcyBmYWlybHkgY29tcGFjdCwgYW5kIHdpbGwgY2FsbCBhbnNpMmtuciBkZXBlbmRpbmcKKwkgICAgIyBvbiB0aGUgdmFsdWUgb2YgJFUgKGAnIG9yIGBfJykuCisJICAgICMKKwkgICAgIyBJdCdzIGhhcmRlciB3aXRoIHN1YmRpciBzb3VyY2VzLiBPbgorCSAgICAjCisJICAgICMgICBBVVRPTUFLRV9PUFRJT05TID0gYW5zaTJrbnIKKwkgICAgIyAgIGJpbl9QUk9HUkFNUyA9IGZvbworCSAgICAjICAgZm9vX1NPVVJDRVMgPSBzdWIvZm9vLmMKKwkgICAgIworCSAgICAjIHdlIGhhdmUgdG8gY3JlYXRlIGZvb18uYyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisJICAgICMgKFVubGVzcyB0aGUgdXNlciBhc2tzICdzdWJkaXItb2JqZWN0cycuKSAgVGhpcyBpcyBpbXBvcnRhbnQKKwkgICAgIyBpbiBjYXNlIHRoZSBzYW1lIGZpbGUgKGBmb28uYycpIGlzIGNvbXBpbGVkIGZyb20gb3RoZXIKKwkgICAgIyBkaXJlY3RvcmllcyB3aXRoIGRpZmZlcmVudCBjcHAgb3B0aW9uczogZm9vXy5jIHdvdWxkCisJICAgICMgYmUgcHJlcHJvY2Vzc2VkIGZvciBvbmx5IG9uZSBzZXQgb2Ygb3B0aW9ucyBpZiBpdCB3ZXJlCisJICAgICMgcHV0IGluIHRoZSBzdWJkaXJlY3RvcnkuCisJICAgICMKKwkgICAgIyBCZWNhdXNlIGZvbyRVLm8gbXVzdCBiZSBidWlsdCBmcm9tIGVpdGhlciBmb29fLmMgb3IKKwkgICAgIyBzdWIvZm9vLmMgd2UgY2FuJ3QgYmUgYXMgY29uY2lzZSBhcyBpbiB0aGUgZmlyc3QgZXhhbXBsZS4KKwkgICAgIyBJbnN0ZWFkIHdlIG91dHB1dAorCSAgICAjCisJICAgICMgICBmb286IGZvbyRVLm87IGxpbmsgLi4uCisJICAgICMgICBmb29fLm86IGZvb18uYzsgY29tcGlsZSAuLi4KKwkgICAgIyAgIGZvby5vOiBzdWIvZm9vLmM7IGNvbXBpbGUgLi4uCisJICAgICMgICBmb29fLmM6IGZvby5jOyBhbnNpMmtuciAuLi4KKwkgICAgIworCSAgICAjIFRoaXMgaXMgd2h5IHdlJ2xsIG5vdyB0cmFuc2Zvcm0gJHJ1bGVfZmlsZSB0d2ljZQorCSAgICAjIGlmIHdlIGRldGVjdCB0aGlzIGNhc2UuCisJICAgICMgQSBmaXJzdCB0aW1lIHdlIG91dHB1dCB0aGUgY29tcGlsZSBydWxlIHdpdGggYCRVJworCSAgICAjIHJlcGxhY2VkIGJ5IGBfJyBhbmQgdGhlIHNvdXJjZSBkaXJlY3RvcnkgcmVtb3ZlZCwKKwkgICAgIyBhbmQgYW5vdGhlciB0aW1lIHdlIHNpbXBseSByZW1vdmUgYCRVJy4KKwkgICAgIworCSAgICAjIE5vdGUgdGhhdCBhdCB0aGlzIHBvaW50ICRzb3VyY2UgKGFzIGNvbXB1dGVkIGJ5CisJICAgICMgJmhhbmRsZV9zaW5nbGVfdHJhbnNmb3JtKSBpcyBgc3ViL2ZvbyRVLmMnLgorCSAgICAjIFRoaXMgY2FuIGJlIGNvbmZ1c2luZzogaXQgY2FuIGJlIHVzZWQgYXMtaXMgd2hlbgorCSAgICAjIHN1YmRpci1vYmplY3RzIGlzIHNldCwgb3RoZXJ3aXNlIHlvdSBoYXZlIHRvIGtub3cKKwkgICAgIyBpdCByZWFsbHkgbWVhbnMgYGZvb18uYycgb3IgYHN1Yi9mb28uYycuCisJICAgIG15ICRvYmpkaXIgPSBkaXJuYW1lICgkb2JqKTsKKwkgICAgbXkgJHNyY2RpciA9IGRpcm5hbWUgKCRzb3VyY2UpOworCSAgICBpZiAoJGxhbmctPmFuc2kgJiYgJG9iaiA9fiAvXCRVLykKKwkgICAgICB7CisJCXByb2dfZXJyb3IgImAkb2JqJyBjb250YWlucyBcJFUsIGJ1dCBgJHNvdXJjZScgZG9lc24ndC4iCisJCSAgaWYgJHNvdXJjZSAhfiAvXCRVLzsKKworCQkobXkgJHNvdXJjZV8gPSAkc291cmNlKSA9fiBzL1wkVS9fL2c7CisJCSMgT3V0cHV0IGFuIGFkZGl0aW9uYWwgcnVsZSBpZiBfLmMgYW5kIC5jIGFyZSBub3QgaW4KKwkJIyB0aGUgc2FtZSBkaXJlY3RvcnkuICAoXy5jIGlzIGFsd2F5cyBpbiAkb2JqZGlyLikKKwkJaWYgKCRvYmpkaXIgbmUgJHNyY2RpcikKKwkJICB7CisJCSAgICAobXkgJG9ial8gPSAkb2JqKSA9fiBzL1wkVS9fL2c7CisJCSAgICAobXkgJGRlcGJhc2VfID0gJGRlcGJhc2UpID1+IHMvXCRVL18vZzsKKwkJICAgICRzb3VyY2VfID0gYmFzZW5hbWUgKCRzb3VyY2VfKTsKKworCQkgICAgJG91dHB1dF9ydWxlcyAuPQorCQkgICAgICBmaWxlX2NvbnRlbnRzICgkcnVsZV9maWxlLAorCQkJCSAgICAgbmV3IEF1dG9tYWtlOjpMb2NhdGlvbiwKKwkJCQkgICAgICV0cmFuc2Zvcm0sCisJCQkJICAgICBHRU5FUklDICAgPT4gMCwKKworCQkJCSAgICAgREVQQkFTRSAgID0+ICRkZXBiYXNlXywKKwkJCQkgICAgIEJBU0UgICAgICA9PiAkb2JqXywKKwkJCQkgICAgIFNPVVJDRSAgICA9PiAkc291cmNlXywKKwkJCQkgICAgIFNPVVJDRUZMQUcgPT4gJHNvdXJjZWZsYWdzeyRzcmNleHR9IHx8ICcnLAorCQkJCSAgICAgT0JKICAgICAgID0+ICIkb2JqXyRteWV4dCIsCisJCQkJICAgICBPQkpPQkogICAgPT4gIiRvYmpfLm9iaiIsCisJCQkJICAgICBMVE9CSiAgICAgPT4gIiRvYmpfLmxvIiwKKworCQkJCSAgICAgQ09NUElMRSAgID0+ICRvYmpfY29tcGlsZSwKKwkJCQkgICAgIExUQ09NUElMRSA9PiAkb2JqX2x0Y29tcGlsZSwKKwkJCQkgICAgIC1vICAgICAgICA9PiAkb3V0cHV0X2ZsYWcsCisJCQkJICAgICAlZmlsZV90cmFuc2Zvcm0pOworCQkgICAgJG9iaiA9fiBzL1wkVS8vZzsKKwkJICAgICRkZXBiYXNlID1+IHMvXCRVLy9nOworCQkgICAgJHNvdXJjZSA9fiBzL1wkVS8vZzsKKwkJICB9CisJICAgICAgfQorCisJICAgICRvdXRwdXRfcnVsZXMgLj0KKwkgICAgICBmaWxlX2NvbnRlbnRzICgkcnVsZV9maWxlLAorCQkJICAgICBuZXcgQXV0b21ha2U6OkxvY2F0aW9uLAorCQkJICAgICAldHJhbnNmb3JtLAorCQkJICAgICBHRU5FUklDICAgPT4gMCwKKworCQkJICAgICBERVBCQVNFICAgPT4gJGRlcGJhc2UsCisJCQkgICAgIEJBU0UgICAgICA9PiAkb2JqLAorCQkJICAgICBTT1VSQ0UgICAgPT4gJHNvdXJjZSwKKwkJCSAgICAgU09VUkNFRkxBRyA9PiAkc291cmNlZmxhZ3N7JHNyY2V4dH0gfHwgJycsCisJCQkgICAgICMgVXNlICRteWV4dCBhbmQgbm90IGAubycgaGVyZSwgaW4gY2FzZQorCQkJICAgICAjIHdlIGFyZSBhY3R1YWxseSBidWlsZGluZyBhIG5ldyBzb3VyY2UKKwkJCSAgICAgIyBmaWxlIC0tIGUuZy4gdmlhIHlhY2MuCisJCQkgICAgIE9CSiAgICAgICA9PiAiJG9iaiRteWV4dCIsCisJCQkgICAgIE9CSk9CSiAgICA9PiAiJG9iai5vYmoiLAorCQkJICAgICBMVE9CSiAgICAgPT4gIiRvYmoubG8iLAorCisJCQkgICAgIFZFUkJPU0UgICA9PiAkdmVyYm9zZSwKKwkJCSAgICAgU0lMRU5UICAgID0+ICRzaWxlbnQsCisJCQkgICAgIENPTVBJTEUgICA9PiAkb2JqX2NvbXBpbGUsCisJCQkgICAgIExUQ09NUElMRSA9PiAkb2JqX2x0Y29tcGlsZSwKKwkJCSAgICAgLW8gICAgICAgID0+ICRvdXRwdXRfZmxhZywKKwkJCSAgICAgJWZpbGVfdHJhbnNmb3JtKTsKKwl9CisKKwkjIFRoZSByZXN0IG9mIHRoZSBsb29wIGlzIGRvbmUgb25jZSBwZXIgbGFuZ3VhZ2UuCisJbmV4dCBpZiBkZWZpbmVkICRkb25leyRsYW5nfTsKKwkkZG9uZXskbGFuZ30gPSAxOworCisJIyBMb2FkIHRoZSBsYW5ndWFnZSBkZXBlbmRlbnQgTWFrZWZpbGUgY2h1bmtzLgorCW15ICVsYW5nID0gbWFwIHsgdWMgKCRfKSA9PiAwIH0ga2V5cyAlbGFuZ3VhZ2VzOworCSRsYW5ne3VjICgkbGFuZy0+bmFtZSl9ID0gMTsKKwkkb3V0cHV0X3J1bGVzIC49IGZpbGVfY29udGVudHMgKCdsYW5nLWNvbXBpbGUnLAorCQkJCQluZXcgQXV0b21ha2U6OkxvY2F0aW9uLAorCQkJCQkldHJhbnNmb3JtLCAlbGFuZyk7CisKKwkjIElmIHRoZSBzb3VyY2UgdG8gYSBwcm9ncmFtIGNvbnNpc3RzIGVudGlyZWx5IG9mIGNvZGUgZnJvbSBhCisJIyBgcHVyZScgbGFuZ3VhZ2UsIGZvciBpbnN0YW5jZSBDKysgb3IgRm9ydHJhbiA3NywgdGhlbiB3ZQorCSMgZG9uJ3QgbmVlZCB0aGUgQyBjb21waWxlciBjb2RlLiAgSG93ZXZlciBpZiB3ZSBydW4gaW50bworCSMgc29tZXRoaW5nIHVudXN1YWwgdGhlbiB3ZSBkbyBnZW5lcmF0ZSB0aGUgQyBjb2RlLiAgVGhlcmUgYXJlCisJIyBwcm9iYWJseSBjb3JuZXIgY2FzZXMgaGVyZSB0aGF0IGRvIG5vdCB3b3JrIHByb3Blcmx5LgorCSMgUGVvcGxlIGxpbmtpbmcgSmF2YSBjb2RlIHRvIEZvcnRyYW4gY29kZSBkZXNlcnZlIHBhaW4uCisJJG5lZWRzX2MgfHw9ICEgJGxhbmctPnB1cmU7CisKKwlkZWZpbmVfY29tcGlsZXJfdmFyaWFibGUgKCRsYW5nKQorCSAgaWYgKCRsYW5nLT5jb21waWxlKTsKKworCWRlZmluZV9saW5rZXJfdmFyaWFibGUgKCRsYW5nKQorCSAgaWYgKCRsYW5nLT5saW5rKTsKKworCXJlcXVpcmVfdmFyaWFibGVzICgiJGFtX2ZpbGUuYW0iLCAkbGFuZy0+TmFtZSAuICIgc291cmNlIHNlZW4iLAorCQkJICAgVFJVRSwgQHskbGFuZy0+Y29uZmlnX3ZhcnN9KTsKKworCSMgQ2FsbCB0aGUgZmluaXNoZXIuCisJJGxhbmctPmZpbmlzaDsKKworCSMgRmxhZ3MgbGlzdGVkIGluIGAtPmZsYWdzJyBhcmUgdXNlciB2YXJpYWJsZXMgKHBlciBHTlUgU3RhbmRhcmRzKSwKKwkjIHRoZXkgc2hvdWxkIG5vdCBiZSBvdmVycmlkZGVuIGluIHRoZSBNYWtlZmlsZS4uLgorCW15IEBkb250X292ZXJyaWRlID0gQHskbGFuZy0+ZmxhZ3N9OworCSMgLi4uIGFuZCBzbyBpcyBMREZMQUdTLgorCXB1c2ggQGRvbnRfb3ZlcnJpZGUsICdMREZMQUdTJyBpZiAkbGFuZy0+bGluazsKKworCWNoZWNrX3VzZXJfdmFyaWFibGVzIEBkb250X292ZXJyaWRlOworICAgIH0KKworICAgICMgSWYgdGhlIHByb2plY3QgaXMgZW50aXJlbHkgQysrIG9yIGVudGlyZWx5IEZvcnRyYW4gNzcgKGkuZS4sIDEKKyAgICAjIHN1ZmZpeCBydWxlIHdhcyBsZWFybmVkKSwgZG9uJ3QgYm90aGVyIHdpdGggdGhlIEMgc3R1ZmYuICBCdXQgaWYKKyAgICAjIGFueXRoaW5nIGVsc2UgY3JlZXBzIGluLCB0aGVuIHVzZSBpdC4KKyAgICAkbmVlZHNfYyA9IDEKKyAgICAgIGlmICRuZWVkX2xpbmsgfHwgc3VmZml4X3J1bGVzX2NvdW50ID4gMTsKKworICAgIGlmICgkbmVlZHNfYykKKyAgICAgIHsKKwkmZGVmaW5lX2NvbXBpbGVyX3ZhcmlhYmxlICgkbGFuZ3VhZ2VzeydjJ30pCisJICB1bmxlc3MgZGVmaW5lZCAkZG9uZXskbGFuZ3VhZ2VzeydjJ319OworCWRlZmluZV9saW5rZXJfdmFyaWFibGUgKCRsYW5ndWFnZXN7J2MnfSk7CisgICAgICB9CisKKyAgICAjIEFsd2F5cyBwcm92aWRlIHRoZSB1c2VyIHdpdGggYEFNX1ZfR0VOJyBmb3IgYHNpbGVudC1ydWxlcycgbW9kZS4KKyAgICBkZWZpbmVfdmVyYm9zZV90YWd2YXIgKCdHRU4nKTsKK30KKworCisjIGFwcGVuZF9leGVleHQgeyBQUkVESUNBVEUgfSAkTUFDUk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgJChFWEVFWFQpIHRvIGVhY2ggZmlsZW5hbWUgaW4gJEYgYXBwZWFyaW5nIGluIHRoZSBNYWtlZmlsZQorIyB2YXJpYWJsZSAkTUFDUk8gaWYgJlBSRURJQ0FURSgkRikgaXMgdHJ1ZS4gIEBzdWJzdGl0dXRpb25zQCBhcmUKKyMgaWdub3JlZC4KKyMKKyMgVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBvbiBhbGwgZmlsZW5hbWVzIG9mICpfUFJPR1JBTVMsIGFuZCBmaWxlbmFtZXMKKyMgb2YgVEVTVFMgdGhhdCBhcmUgcHJvZ3JhbXMuCitzdWIgYXBwZW5kX2V4ZWV4dCAoJiQpCit7CisgIG15ICgkcHJlZCwgJG1hY3JvKSA9IEBfOworCisgIHRyYW5zZm9ybV92YXJpYWJsZV9yZWN1cnNpdmVseQorICAgICgkbWFjcm8sICRtYWNybywgJ2FtX19FWEVFWFQnLCAwLCBJTlRFUk5BTCwKKyAgICAgc3ViIHsKKyAgICAgICBteSAoJHN1YnZhciwgJHZhbCwgJGNvbmQsICRmdWxsX2NvbmQpID0gQF87CisgICAgICAgIyBBcHBlbmQgJChFWEVFWFQpIHVubGVzcyB0aGUgdXNlciBkaWQgaXQgYWxyZWFkeSwgb3IgaXQncyBhCisgICAgICAgIyBAc3Vic3RpdHV0aW9uQC4KKyAgICAgICAkdmFsIC49ICckKEVYRUVYVCknCisJIGlmICR2YWwgIX4gLyg/OlwkXChFWEVFWFRcKSR8XltAXVx3K1tAXSQpLyAmJiAmJHByZWQgKCR2YWwpOworICAgICAgIHJldHVybiAkdmFsOworICAgICB9KTsKK30KKworCisjIENoZWNrIHRvIG1ha2Ugc3VyZSBhIHNvdXJjZSBkZWZpbmVkIGluIExJQk9CSlMgaXMgbm90IGV4cGxpY2l0bHkKKyMgbWVudGlvbmVkLiAgVGhpcyBpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIChhcyBvcHBvc2VkIHRvIGJlaW5nIGlubGluZWQKKyMgaW4gaGFuZGxlX3NvdXJjZV90cmFuc2Zvcm0pIGJlY2F1c2UgaXQgaXNuJ3QgYWx3YXlzIGFwcHJvcHJpYXRlIHRvCisjIGRvIHRoaXMgY2hlY2suCitzdWIgY2hlY2tfbGlib2Jqc19zb3VyY2VzCit7CisgIG15ICgkb25lX2ZpbGUsICR1bnhmb3JtZWQpID0gQF87CisKKyAgZm9yZWFjaCBteSAkcHJlZml4ICgnJywgJ0VYVFJBXycsICdkaXN0XycsICdub2Rpc3RfJywKKwkJICAgICAgJ2Rpc3RfRVhUUkFfJywgJ25vZGlzdF9FWFRSQV8nKQorICAgIHsKKyAgICAgIG15IEBmaWxlczsKKyAgICAgIG15ICR2YXJuYW1lID0gJHByZWZpeCAuICRvbmVfZmlsZSAuICdfU09VUkNFUyc7CisgICAgICBteSAkdmFyID0gdmFyICgkdmFybmFtZSk7CisgICAgICBpZiAoJHZhcikKKwl7CisJICBAZmlsZXMgPSAkdmFyLT52YWx1ZV9hc19saXN0X3JlY3Vyc2l2ZTsKKwl9CisgICAgICBlbHNpZiAoJHByZWZpeCBlcSAnJykKKwl7CisJICBAZmlsZXMgPSAoJHVueGZvcm1lZCAuICcuYycpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBuZXh0OworCX0KKworICAgICAgZm9yZWFjaCBteSAkZmlsZSAoQGZpbGVzKQorCXsKKwkgIGVycl92YXIgKCRwcmVmaXggLiAkb25lX2ZpbGUgLiAnX1NPVVJDRVMnLAorCQkgICAiYXV0b21hdGljYWxseSBkaXNjb3ZlcmVkIGZpbGUgYCRmaWxlJyBzaG91bGQgbm90IiAuCisJCSAgICIgYmUgZXhwbGljaXRseSBtZW50aW9uZWQiKQorCSAgICBpZiBkZWZpbmVkICRsaWJzb3VyY2VzeyRmaWxlfTsKKwl9CisgICAgfQorfQorCisKKyMgQE9CSkVDVFMKKyMgaGFuZGxlX3NpbmdsZV90cmFuc2Zvcm0gKCRWQVIsICRUT1BQQVJFTlQsICRERVJJVkVELCAkT0JKLCAkRklMRSwgJVRSQU5TRk9STSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRG9lcyBtdWNoIG9mIHRoZSBhY3R1YWwgd29yayBmb3IgaGFuZGxlX3NvdXJjZV90cmFuc2Zvcm0uCisjIEFyZ3VtZW50cyBhcmU6CisjICAgJFZBUiBpcyB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdGhhdCB0aGUgc291cmNlIGZpbGVuYW1lcyBjb21lIGZyb20KKyMgICAkVE9QUEFSRU5UIGlzIHRoZSBuYW1lIG9mIHRoZSBfU09VUkNFUyB2YXJpYWJsZSB3aGljaCBpcyBiZWluZyBwcm9jZXNzZWQKKyMgICAkREVSSVZFRCBpcyB0aGUgbmFtZSBvZiByZXN1bHRpbmcgZXhlY3V0YWJsZSBvciBsaWJyYXJ5CisjICAgJE9CSiBpcyB0aGUgb2JqZWN0IGV4dGVuc2lvbiAoZS5nLiwgYCRVLmxvJykKKyMgICAkRklMRSB0aGUgc291cmNlIGZpbGUgdG8gdHJhbnNmb3JtCisjICAgJVRSQU5TRk9STSBjb250YWlucyBleHRyYXMgYXJndW1lbnRzIHRvIHBhc3MgdG8gZmlsZV9jb250ZW50cworIyAgICAgd2hlbiBwcm9kdWNpbmcgZXhwbGljaXQgcnVsZXMKKyMgUmVzdWx0IGlzIGEgbGlzdCBvZiB0aGUgbmFtZXMgb2Ygb2JqZWN0cworIyAlbGlua2Vyc191c2VkIHdpbGwgYmUgdXBkYXRlZCB3aXRoIGFueSBsaW5rZXJzIG5lZWRlZAorc3ViIGhhbmRsZV9zaW5nbGVfdHJhbnNmb3JtICgkJCQkJCUpCit7CisgICAgbXkgKCR2YXIsICR0b3BwYXJlbnQsICRkZXJpdmVkLCAkb2JqLCAkX2ZpbGUsICV0cmFuc2Zvcm0pID0gQF87CisgICAgbXkgQGZpbGVzID0gKCRfZmlsZSk7CisgICAgbXkgQHJlc3VsdCA9ICgpOworICAgIG15ICRub25hbnNpX29iaiA9ICRvYmo7CisgICAgJG5vbmFuc2lfb2JqID1+IHMvXCRVLy9nOworCisgICAgIyBUdXJuIHNvdXJjZXMgaW50byBvYmplY3RzLiAgV2UgdXNlIGEgd2hpbGUgbG9vcCBsaWtlIHRoaXMKKyAgICAjIGJlY2F1c2Ugd2UgbWlnaHQgYWRkIHRvIEBmaWxlcyBpbiB0aGUgbG9vcC4KKyAgICB3aGlsZSAoc2NhbGFyIEBmaWxlcyA+IDApCisgICAgeworCSRfID0gc2hpZnQgQGZpbGVzOworCisJIyBDb25maWd1cmUgc3Vic3RpdHV0aW9ucyBpbiBfU09VUkNFUyB2YXJpYWJsZXMgYXJlIGVycm9ycy4KKwlpZiAoL15cQC4qXEAkLykKKwl7CisJICBteSAkcGFyZW50X21zZyA9ICcnOworCSAgJHBhcmVudF9tc2cgPSAiXG5hbmQgaXMgcmVmZXJyZWQgdG8gZnJvbSBgJHRvcHBhcmVudCciCisJICAgIGlmICR0b3BwYXJlbnQgbmUgJHZhci0+bmFtZTsKKwkgIGVycl92YXIgKCR2YXIsCisJCSAgICJgIiAuICR2YXItPm5hbWUgLiAiJyBpbmNsdWRlcyBjb25maWd1cmUgc3Vic3RpdHV0aW9uIGAkXyciCisJCSAgIC4gJHBhcmVudF9tc2cgLiAiO1xuY29uZmlndXJlICIgLgorCQkgICAic3Vic3RpdHV0aW9ucyBhcmUgbm90IGFsbG93ZWQgaW4gX1NPVVJDRVMgdmFyaWFibGVzIik7CisJICBuZXh0OworCX0KKworCSMgSWYgdGhlIHNvdXJjZSBmaWxlIGlzIGluIGEgc3ViZGlyZWN0b3J5IHRoZW4gdGhlIGAubycgaXMgcHV0CisJIyBpbnRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgdW5sZXNzIHRoZSBzdWJkaXItb2JqZWN0cyBvcHRpb24KKwkjIGlzIGluIGVmZmVjdC4KKworCSMgU3BsaXQgZmlsZSBuYW1lIGludG8gYmFzZSBhbmQgZXh0ZW5zaW9uLgorCW5leHQgaWYgISAvXig/OiguKilcLyk/KFteXC9dKikoJEtOT1dOX0VYVEVOU0lPTlNfUEFUVEVSTikkLzsKKwlteSAkZnVsbCA9ICRfOworCW15ICRkaXJlY3RvcnkgPSAkMSB8fCAnJzsKKwlteSAkYmFzZSA9ICQyOworCW15ICRleHRlbnNpb24gPSAkMzsKKworCSMgV2UgbXVzdCBnZW5lcmF0ZSBhIHJ1bGUgZm9yIHRoZSBvYmplY3QgaWYgaXQgcmVxdWlyZXMgaXRzIG93biBmbGFncy4KKwlteSAkcmVuYW1lZCA9IDA7CisJbXkgKCRsaW5rZXIsICRvYmplY3QpOworCisJIyBUaGlzIHJlY29yZHMgd2hldGhlciB3ZSd2ZSBzZWVuIGEgZGVyaXZlZCBzb3VyY2UgZmlsZSAoZS5nLgorCSMgeWFjYyBvdXRwdXQpLgorCW15ICRkZXJpdmVkX3NvdXJjZSA9IDA7CisKKwkjIFRoaXMgaG9sZHMgdGhlIGBhZ2dyZWdhdGUgY29udGV4dCcgb2YgdGhlIGZpbGUgd2UgYXJlCisJIyBjdXJyZW50bHkgZXhhbWluaW5nLiAgSWYgdGhlIGZpbGUgaXMgY29tcGlsZWQgd2l0aAorCSMgcGVyLW9iamVjdCBmbGFncywgdGhlbiBpdCB3aWxsIGJlIHRoZSBuYW1lIG9mIHRoZSBvYmplY3QuCisJIyBPdGhlcndpc2UgaXQgd2lsbCBiZSBgQU0nLiAgVGhpcyBpcyB1c2VkIGJ5IHRoZSB0YXJnZXQgaG9vaworCSMgbGFuZ3VhZ2UgZnVuY3Rpb24uCisJbXkgJGFnZ3JlZ2F0ZSA9ICdBTSc7CisKKwkkZXh0ZW5zaW9uID0gJmRlcml2ZV9zdWZmaXggKCRleHRlbnNpb24sICRub25hbnNpX29iaik7CisJbXkgJGxhbmc7CisJaWYgKCRleHRlbnNpb25fbWFweyRleHRlbnNpb259ICYmCisJICAgICgkbGFuZyA9ICRsYW5ndWFnZXN7JGV4dGVuc2lvbl9tYXB7JGV4dGVuc2lvbn19KSkKKwl7CisJICAgICMgRm91bmQgdGhlIGxhbmd1YWdlLCBzbyBzZWUgd2hhdCBpdCBzYXlzLgorCSAgICAmc2F3X2V4dGVuc2lvbiAoJGV4dGVuc2lvbik7CisKKwkgICAgIyBEbyB3ZSBoYXZlIHBlci1leGVjdXRhYmxlIGZsYWdzIGZvciB0aGlzIGV4ZWN1dGFibGU/CisJICAgIG15ICRoYXZlX3Blcl9leGVjX2ZsYWdzID0gMDsKKwkgICAgbXkgQHBlZmxhZ3MgPSBAeyRsYW5nLT5mbGFnc307CisJICAgIHB1c2ggQHBlZmxhZ3MsICdMSUJUT09MRkxBR1MnIGlmICRub25hbnNpX29iaiBlcSAnLmxvJzsKKwkgICAgZm9yZWFjaCBteSAkZmxhZyAoQHBlZmxhZ3MpCisJICAgICAgeworCQlpZiAoc2V0X3NlZW4gKCIke2Rlcml2ZWR9XyRmbGFnIikpCisJCSAgeworCQkgICAgJGhhdmVfcGVyX2V4ZWNfZmxhZ3MgPSAxOworCQkgICAgbGFzdDsKKwkJICB9CisJICAgICAgfQorCisJICAgICMgTm90ZTogY29tcHV0ZWQgc3ViciBjYWxsLiAgVGhlIGxhbmd1YWdlIHJld3JpdGUgZnVuY3Rpb24KKwkgICAgIyBzaG91bGQgcmV0dXJuIG9uZSBvZiB0aGUgTEFOR18qIGNvbnN0YW50cy4gIEl0IGNvdWxkCisJICAgICMgYWxzbyByZXR1cm4gYSBsaXN0IHdob3NlIGZpcnN0IHZhbHVlIGlzIHN1Y2ggYSBjb25zdGFudAorCSAgICAjIGFuZCB3aG9zZSBzZWNvbmQgdmFsdWUgaXMgYSBuZXcgc291cmNlIGV4dGVuc2lvbiB3aGljaAorCSAgICAjIHNob3VsZCBiZSBhcHBsaWVkLiAgVGhpcyBtZWFucyB0aGlzIHBhcnRpY3VsYXIgbGFuZ3VhZ2UKKwkgICAgIyBnZW5lcmF0ZXMgYW5vdGhlciBzb3VyY2UgZmlsZSB3aGljaCB3ZSBtdXN0IHRoZW4gcHJvY2VzcworCSAgICAjIGZ1cnRoZXIuCisJICAgIG15ICRzdWJyID0gXCZ7J2xhbmdfJyAuICRsYW5nLT5uYW1lIC4gJ19yZXdyaXRlJ307CisJICAgIG15ICgkciwgJHNvdXJjZV9leHRlbnNpb24pCisJCT0gJiRzdWJyICgkZGlyZWN0b3J5LCAkYmFzZSwgJGV4dGVuc2lvbiwKKwkJCSAgJG5vbmFuc2lfb2JqLCAkaGF2ZV9wZXJfZXhlY19mbGFncywgJHZhcik7CisJICAgICMgU2tpcCB0aGlzIGVudHJ5IGlmIHdlIHdlcmUgYXNrZWQgbm90IHRvIHByb2Nlc3MgaXQuCisJICAgIG5leHQgaWYgJHIgPT0gTEFOR19JR05PUkU7CisKKwkgICAgIyBOb3cgZXh0cmFjdCBsaW5rZXIgYW5kIG90aGVyIGluZm8uCisJICAgICRsaW5rZXIgPSAkbGFuZy0+bGlua2VyOworCisJICAgIG15ICR0aGlzX29ial9leHQ7CisJICAgIGlmIChkZWZpbmVkICRzb3VyY2VfZXh0ZW5zaW9uKQorCSAgICB7CisJCSR0aGlzX29ial9leHQgPSAkc291cmNlX2V4dGVuc2lvbjsKKwkJJGRlcml2ZWRfc291cmNlID0gMTsKKwkgICAgfQorCSAgICBlbHNpZiAoJGxhbmctPmFuc2kpCisJICAgIHsKKwkJJHRoaXNfb2JqX2V4dCA9ICRvYmo7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCSR0aGlzX29ial9leHQgPSAkbm9uYW5zaV9vYmo7CisJICAgIH0KKwkgICAgJG9iamVjdCA9ICRiYXNlIC4gJHRoaXNfb2JqX2V4dDsKKworCSAgICBpZiAoJGhhdmVfcGVyX2V4ZWNfZmxhZ3MpCisJICAgIHsKKwkJIyBXZSBoYXZlIGEgcGVyLWV4ZWN1dGFibGUgZmxhZyBpbiBlZmZlY3QgZm9yIHRoaXMKKwkJIyBvYmplY3QuICBJbiB0aGlzIGNhc2Ugd2UgcmV3cml0ZSB0aGUgb2JqZWN0J3MKKwkJIyBuYW1lIHRvIGVuc3VyZSBpdCBpcyB1bmlxdWUuCisKKwkJIyBXZSBjaG9vc2UgdGhlIG5hbWUgYERFUklWRURfT0JKRUNUJyB0byBlbnN1cmUKKwkJIyAoMSkgdW5pcXVlbmVzcywgYW5kICgyKSBjb250aW51aXR5IGJldHdlZW4KKwkJIyBpbnZvY2F0aW9ucy4gIEhvd2V2ZXIsIHRoaXMgd2lsbCByZXN1bHQgaW4gYQorCQkjIG5hbWUgdGhhdCBpcyB0b28gbG9uZyBmb3IgbG9zaW5nIHN5c3RlbXMsIGluCisJCSMgc29tZSBzaXR1YXRpb25zLiAgU28gd2UgcHJvdmlkZSBfU0hPUlROQU1FIHRvCisJCSMgb3ZlcnJpZGUuCisKKwkJbXkgJGRuYW1lID0gJGRlcml2ZWQ7CisJCW15ICR2YXIgPSB2YXIgKCRkZXJpdmVkIC4gJ19TSE9SVE5BTUUnKTsKKwkJaWYgKCR2YXIpCisJCXsKKwkJICAgICMgRklYTUU6IHNob3VsZCB1c2UgdGhlIHNhbWUgQ29uZGl0aW9uIGFzCisJCSAgICAjIHRoZSBfU09VUkNFUyB2YXJpYWJsZS4gIEJ1dCB0aGlzIGlzIHJlYWxseQorCQkgICAgIyBzaWxseSBvdmVya2lsbCAtLSBub2JvZHkgc2hvdWxkIGhhdmUKKwkJICAgICMgY29uZGl0aW9uYWwgc2hvcnRuYW1lcy4KKwkJICAgICRkbmFtZSA9ICR2YXItPnZhcmlhYmxlX3ZhbHVlOworCQl9CisJCSRvYmplY3QgPSAkZG5hbWUgLiAnLScgLiAkb2JqZWN0OworCisJCXByb2dfZXJyb3IgKCRsYW5nLT5uYW1lIC4gIiBmbGFncyBkZWZpbmVkIHdpdGhvdXQgY29tcGlsZXIiKQorCQkgIGlmICEgZGVmaW5lZCAkbGFuZy0+Y29tcGlsZTsKKworCQkkcmVuYW1lZCA9IDE7CisJICAgIH0KKworCSAgICAjIElmIHJld3JpdGUgc2FpZCBpdCB3YXMgb2ssIHB1dCB0aGUgb2JqZWN0IGludG8gYQorCSAgICAjIHN1YmRpci4KKwkgICAgaWYgKCRyID09IExBTkdfU1VCRElSICYmICRkaXJlY3RvcnkgbmUgJycpCisJICAgIHsKKwkJJG9iamVjdCA9ICRkaXJlY3RvcnkgLiAnLycgLiAkb2JqZWN0OworCSAgICB9CisKKwkgICAgIyBJZiB0aGUgb2JqZWN0IGZpbGUgaGFzIGJlZW4gcmVuYW1lZCAoYmVjYXVzZSBwZXItdGFyZ2V0CisJICAgICMgZmxhZ3MgYXJlIHVzZWQpIHdlIGNhbm5vdCBjb21waWxlIHRoZSBmaWxlIHdpdGggYW4KKwkgICAgIyBpbmZlcmVuY2UgcnVsZTogd2UgbmVlZCBhbiBleHBsaWNpdCBydWxlLgorCSAgICAjCisJICAgICMgSWYgdGhlIHNvdXJjZSBpcyBpbiBhIHN1YmRpcmVjdG9yeSBhbmQgdGhlIG9iamVjdCBpcyBpbgorCSAgICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgd2UgYWxzbyBuZWVkIGFuIGV4cGxpY2l0IHJ1bGUuCisJICAgICMKKwkgICAgIyBJZiBib3RoIHNvdXJjZSBhbmQgb2JqZWN0IGZpbGVzIGFyZSBpbiBhIHN1YmRpcmVjdG9yeQorCSAgICAjICh0aGlzIGhhcHBlbnMgd2hlbiB0aGUgc3ViZGlyLW9iamVjdHMgb3B0aW9uIGlzIHVzZWQpLAorCSAgICAjIHRoZW4gdGhlIGluZmVyZW5jZSB3aWxsIHdvcmsuCisJICAgICMKKwkgICAgIyBUaGUgbGF0dGVyIGNhc2UgZGVzZXJ2ZXMgYSBoaXN0b3JpY2FsIG5vdGUuICBXaGVuIHRoZQorCSAgICAjIHN1YmRpci1vYmplY3RzIG9wdGlvbiB3YXMgYWRkZWQgb24gMTk5OS0wNC0xMSBpdCB3YXMKKwkgICAgIyB0aG91Z2h0IHRoYXQgaW5mZXJlbmNlcyBydWxlcyB3b3VsZCB3b3JrIGZvcgorCSAgICAjIHN1YmRpcmVjdG9yeSBvYmplY3RzIHRvby4gIExhdGVyLCBvbiAxOTk5LTExLTIyLAorCSAgICAjIGF1dG9tYWtlIHdhcyBjaGFuZ2VkIHRvIG91dHB1dCBleHBsaWNpdCBydWxlcyBldmVuIGZvcgorCSAgICAjIHN1YmRpci1vYmplY3RzLiAgTm9ib2R5IHJlbWVtYmVycyB3aHksIGJ1dCB0aGlzIG9jY3VycmVkCisJICAgICMgc29vbiBhZnRlciB0aGUgbWVyZ2Ugb2YgdGhlIHVzZXItZGVwLWdlbi1icmFuY2ggc28gaXQKKwkgICAgIyBtaWdodCBiZSByZWxhdGVkLiAgSW4gbGF0ZSAyMDAzIHBlb3BsZSBjb21wbGFpbmVkIGFib3V0CisJICAgICMgdGhlIHNpemUgb2YgdGhlIGdlbmVyYXRlZCBNYWtlZmlsZS5pbnMgKGxpYmdjaiwgd2l0aAorCSAgICAjIDIyMDArIHN1YmRpciBvYmplY3RzIHdhcyByZXBvcnRlZCB0byBoYXZlIGEgOU1CCisJICAgICMgTWFrZWZpbGUpLCBzbyB3ZSBub3cgcmVseSBvbiBpbmZlcmVuY2UgcnVsZXMgYWdhaW4uCisJICAgICMgTWF5YmUgd2UnbGwgcnVuIGFjcm9zcyB0aGUgc2FtZSBpc3N1ZSBhcyBpbiB0aGUgcGFzdCwKKwkgICAgIyBidXQgYXQgbGVhc3QgdGhpcyB0aW1lIHdlIGNhbiBkb2N1bWVudCBpdC4gIEhvd2V2ZXIgc2luY2UKKwkgICAgIyBkZXBlbmRlbmN5IHRyYWNraW5nIGhhcyBldm9sdmVkIGl0IGlzIHBvc3NpYmxlIHRoYXQKKwkgICAgIyBvdXIgb2xkIHByb2JsZW0gbm8gbG9uZ2VyIGV4aXN0cy4KKwkgICAgIyBVc2luZyBpbmZlcmVuY2UgcnVsZXMgZm9yIHN1YmRpci1vYmplY3RzIGhhcyBiZWVuIHRlc3RlZAorCSAgICAjIHdpdGggR05VIG1ha2UsIFNvbGFyaXMgbWFrZSwgVWx0cml4IG1ha2UsIEJTRCBtYWtlLAorCSAgICAjIEhQLVVYIG1ha2UsIGFuZCBPU0YxIG1ha2Ugc3VjY2Vzc2Z1bGx5LgorCSAgICBpZiAoJHJlbmFtZWQKKwkJfHwgKCRkaXJlY3RvcnkgbmUgJycgJiYgISBvcHRpb24gJ3N1YmRpci1vYmplY3RzJykKKwkJIyBXZSBtdXN0IGFsc28gdXNlIHNwZWNpZmljIHJ1bGVzIGZvciBhIG5vZGlzdF8gc291cmNlCisJCSMgaWYgaXRzIGxhbmd1YWdlIHJlcXVlc3RzIGl0LgorCQl8fCAoJGxhbmctPm5vZGlzdF9zcGVjaWZpYyAmJiAhICR0cmFuc2Zvcm17J0RJU1RfU09VUkNFJ30pKQorCSAgICB7CisJCW15ICRvYmpfc2Fuc19leHQgPSBzdWJzdHIgKCRvYmplY3QsIDAsCisJCQkJCSAgIC0gbGVuZ3RoICgkdGhpc19vYmpfZXh0KSk7CisJCW15ICRmdWxsX2Fuc2k7CisJCWlmICgkZGlyZWN0b3J5IG5lICcnKQorCSAgICAgICAgICB7CisJCQkkZnVsbF9hbnNpID0gJGRpcmVjdG9yeSAuICcvJyAuICRiYXNlIC4gJGV4dGVuc2lvbjsKKwkgICAgICAgICAgfQorCQllbHNlCisJICAgICAgICAgIHsKKwkJCSRmdWxsX2Fuc2kgPSAkYmFzZSAuICRleHRlbnNpb247CisJICAgICAgICAgIH0KKworCQlpZiAoJGxhbmctPmFuc2kgJiYgb3B0aW9uICdhbnNpMmtucicpCisJCSAgeworCQkgICAgJGZ1bGxfYW5zaSA9fiBzLyRLTk9XTl9FWFRFTlNJT05TX1BBVFRFUk4kL1wkVSQmLzsKKwkJICAgICRvYmpfc2Fuc19leHQgLj0gJyRVJzsKKwkJICB9CisKKwkJbXkgQHNwZWNpZmljcyA9ICgkZnVsbF9hbnNpLCAkb2JqX3NhbnNfZXh0LAorCQkJCSAjIE9ubHkgdXNlICR0aGlzX29ial9leHQgaW4gdGhlIGRlcml2ZWQKKwkJCQkgIyBzb3VyY2UgY2FzZSBiZWNhdXNlIGluIHRoZSBvdGhlciBjYXNlIHdlCisJCQkJICMgKmRvbid0KiB3YW50ICQoT0JKRVhUKSB0byBhcHBlYXIgaGVyZS4KKwkJCQkgKCRkZXJpdmVkX3NvdXJjZSA/ICR0aGlzX29ial9leHQgOiAnLm8nKSwKKwkJCQkgJGV4dGVuc2lvbik7CisKKwkJIyBJZiB3ZSByZW5hbWVkIHRoZSBvYmplY3QgdGhlbiB3ZSB3YW50IHRvIHVzZSB0aGUKKwkJIyBwZXItZXhlY3V0YWJsZSBmbGFnIG5hbWUuICBCdXQgaWYgdGhpcyBpcyBzaW1wbHkgYQorCQkjIHN1YmRpciBidWlsZCB0aGVuIHdlIHN0aWxsIHdhbnQgdG8gdXNlIHRoZSBBTV8gZmxhZworCQkjIG5hbWUuCisJCWlmICgkcmVuYW1lZCkKKwkJICB7CisJCSAgICB1bnNoaWZ0IEBzcGVjaWZpY3MsICRkZXJpdmVkOworCQkgICAgJGFnZ3JlZ2F0ZSA9ICRkZXJpdmVkOworCQkgIH0KKwkJZWxzZQorCQkgIHsKKwkJICAgIHVuc2hpZnQgQHNwZWNpZmljcywgJ0FNJzsKKwkJICB9CisKKwkJIyBFYWNoIGl0ZW0gb24gdGhpcyBsaXN0IGlzIGEgcmVmZXJlbmNlIHRvIGEgbGlzdCBjb25zaXN0aW5nCisJCSMgb2YgZm91ciB2YWx1ZXMgZm9sbG93ZWQgYnkgYWRkaXRpb25hbCB0cmFuc2Zvcm0gZmxhZ3MgZm9yCisJCSMgZmlsZV9jb250ZW50cy4gICBUaGUgZm91ciB2YWx1ZXMgYXJlIHRoZSBkZXJpdmVkIGZsYWcgcHJlZml4CisJCSMgKGUuZy4gZm9yIGBmb29fQ0ZMQUdTJywgaXQgaXMgYGZvbycpLCB0aGUgbmFtZSBvZiB0aGUKKwkJIyBzb3VyY2UgZmlsZSwgdGhlIGJhc2UgbmFtZSBvZiB0aGUgb3V0cHV0IGZpbGUsIGFuZAorCQkjIHRoZSBleHRlbnNpb24gZm9yIHRoZSBvYmplY3QgZmlsZS4KKwkJcHVzaCAoQHskbGFuZ19zcGVjaWZpY19maWxlc3skbGFuZy0+bmFtZX19LAorCQkgICAgICBbQHNwZWNpZmljcywgJXRyYW5zZm9ybV0pOworCSAgICB9CisJfQorCWVsc2lmICgkZXh0ZW5zaW9uIGVxICRub25hbnNpX29iaikKKwl7CisJICAgICMgVGhpcyBpcyBwcm9iYWJseSB0aGUgcmVzdWx0IG9mIGEgZGlyZWN0IHN1ZmZpeCBydWxlLgorCSAgICAjIEluIHRoaXMgY2FzZSB3ZSBqdXN0IGFjY2VwdCB0aGUgcmV3cml0ZS4KKwkgICAgJG9iamVjdCA9ICIkYmFzZSRleHRlbnNpb24iOworCSAgICAkb2JqZWN0ID0gIiRkaXJlY3RvcnkvJG9iamVjdCIgaWYgJGRpcmVjdG9yeSBuZSAnJzsKKwkgICAgJGxpbmtlciA9ICcnOworCX0KKwllbHNlCisJeworCSAgICAjIE5vIGVycm9yIG1lc3NhZ2UgaGVyZS4gIFVzZWQgdG8gaGF2ZSBvbmUsIGJ1dCBpdCB3YXMKKwkgICAgIyB2ZXJ5IHVucG9wdWxhci4KKwkgICAgIyBGSVhNRTogd2UgY291bGQgcG90ZW50aWFsbHkgZG8gbW9yZSBwcm9jZXNzaW5nIGhlcmUsCisJICAgICMgcGVyaGFwcyB0cmVhdGluZyB0aGUgbmV3IGV4dGVuc2lvbiBhcyB0aG91Z2ggaXQgd2VyZSBhCisJICAgICMgbmV3IHNvdXJjZSBleHRlbnNpb24gKGFzIGFib3ZlKS4gIFRoaXMgd291bGQgcmVxdWlyZQorCSAgICAjIG1vcmUgcmVzdHJ1Y3R1cmluZyB0aGFuIGlzIGFwcHJvcHJpYXRlIHJpZ2h0IG5vdy4KKwkgICAgbmV4dDsKKwl9CisKKwllcnJfYW0gIm9iamVjdCBgJG9iamVjdCcgY3JlYXRlZCBieSBgJGZ1bGwnIGFuZCBgJG9iamVjdF9tYXB7JG9iamVjdH0nIgorCSAgaWYgKGRlZmluZWQgJG9iamVjdF9tYXB7JG9iamVjdH0KKwkgICAgICAmJiAkb2JqZWN0X21hcHskb2JqZWN0fSBuZSAkZnVsbCk7CisKKwlteSAkY29tcF92YWwgPSAoKCRvYmplY3QgPX4gL1wubG8kLykKKwkJCT8gQ09NUElMRV9MSUJUT09MIDogQ09NUElMRV9PUkRJTkFSWSk7CisJKG15ICRjb21wX29iaiA9ICRvYmplY3QpID1+IHMvXC5sbyQvLlwkKE9CSkVYVCkvOworCWlmIChkZWZpbmVkICRvYmplY3RfY29tcGlsYXRpb25fbWFweyRjb21wX29ian0KKwkgICAgJiYgJG9iamVjdF9jb21waWxhdGlvbl9tYXB7JGNvbXBfb2JqfSAhPSAwCisJICAgICMgT25seSBzZWUgdGhlIGVycm9yIG9uY2UuCisJICAgICYmICgkb2JqZWN0X2NvbXBpbGF0aW9uX21hcHskY29tcF9vYmp9CisJCSE9IChDT01QSUxFX0xJQlRPT0wgfCBDT01QSUxFX09SRElOQVJZKSkKKwkgICAgJiYgJG9iamVjdF9jb21waWxhdGlvbl9tYXB7JGNvbXBfb2JqfSAhPSAkY29tcF92YWwpCisJICB7CisJICAgIGVycl9hbSAib2JqZWN0IGAkY29tcF9vYmonIGNyZWF0ZWQgYm90aCB3aXRoIGxpYnRvb2wgYW5kIHdpdGhvdXQiOworCSAgfQorCSRvYmplY3RfY29tcGlsYXRpb25fbWFweyRjb21wX29ian0gfD0gJGNvbXBfdmFsOworCisJaWYgKGRlZmluZWQgJGxhbmcpCisJeworCSAgICAjIExldCB0aGUgbGFuZ3VhZ2UgZG8gc29tZSBzcGVjaWFsIG1hZ2ljIGlmIHJlcXVpcmVkLgorCSAgICAkbGFuZy0+dGFyZ2V0X2hvb2sgKCRhZ2dyZWdhdGUsICRvYmplY3QsICRmdWxsLCAldHJhbnNmb3JtKTsKKwl9CisKKwlpZiAoJGRlcml2ZWRfc291cmNlKQorCSAgeworCSAgICBwcm9nX2Vycm9yICgkbGFuZy0+bmFtZSAuICIgaGFzIGF1dG9tYXRpYyBkZXBlbmRlbmN5IHRyYWNraW5nIikKKwkgICAgICBpZiAkbGFuZy0+YXV0b2RlcCBuZSAnbm8nOworCSAgICAjIE1ha2Ugc3VyZSB0aGlzIG5ldyBzb3VyY2UgZmlsZSBpcyBoYW5kbGVkIG5leHQuICBUaGF0IHdpbGwKKwkgICAgIyBtYWtlIGl0IGFwcGVhciB0byBiZSBhdCB0aGUgcmlnaHQgcGxhY2UgaW4gdGhlIGxpc3QuCisJICAgIHVuc2hpZnQgKEBmaWxlcywgJG9iamVjdCk7CisJICAgICMgRGlzdHJpYnV0ZSBkZXJpdmVkIHNvdXJjZXMgdW5sZXNzIHRoZSBzb3VyY2UgdGhleSBhcmUKKwkgICAgIyBkZXJpdmVkIGZyb20gaXMgbm90LgorCSAgICAmcHVzaF9kaXN0X2NvbW1vbiAoJG9iamVjdCkKKwkgICAgICB1bmxlc3MgKCR0b3BwYXJlbnQgPX4gL14oPzpub2Jhc2VfKT9ub2Rpc3RfLyk7CisJICAgIG5leHQ7CisJICB9CisKKwkkbGlua2Vyc191c2VkeyRsaW5rZXJ9ID0gMTsKKworCXB1c2ggKEByZXN1bHQsICRvYmplY3QpOworCisJaWYgKCEgZGVmaW5lZCAkb2JqZWN0X21hcHskb2JqZWN0fSkKKwl7CisJICAgIG15IEBkZXBfbGlzdCA9ICgpOworCSAgICAkb2JqZWN0X21hcHskb2JqZWN0fSA9ICRmdWxsOworCisJICAgICMgSWYgcmVzdWx0aW5nIG9iamVjdCBpcyBpbiBzdWJkaXIsIHdlIG5lZWQgdG8gbWFrZQorCSAgICAjIHN1cmUgdGhlIHN1YmRpciBleGlzdHMgYXQgYnVpbGQgdGltZS4KKwkgICAgaWYgKCRvYmplY3QgPX4gL1wvLykKKwkgICAgeworCQkjIEZJWE1FOiBjaGVjayB0aGF0ICRESVJFQ1RPUlkgaXMgc29tZXdoZXJlIGluIHRoZQorCQkjIHByb2plY3QKKworCQkjIEZvciBKYXZhLCB0aGUgd2F5IHdlJ3JlIGhhbmRsaW5nIGl0IHJpZ2h0IG5vdywgYQorCQkjIGAuLicgY29tcG9uZW50IGRvZXNuJ3QgbWFrZSBzZW5zZS4KKwkJaWYgKCRsYW5nICYmICRsYW5nLT5uYW1lIGVxICdqYXZhJyAmJiAkb2JqZWN0ID1+IC8oXC98XilcLlwuXC8vKQorCQkgIHsKKwkJICAgIGVycl9hbSAiYCRmdWxsJyBzaG91bGQgbm90IGNvbnRhaW4gYSBgLi4nIGNvbXBvbmVudCI7CisJCSAgfQorCisJCSMgTWFrZSBzdXJlIG9iamVjdCBpcyByZW1vdmVkIGJ5IGBtYWtlIG1vc3RseWNsZWFuJy4KKwkJJGNvbXBpbGVfY2xlYW5fZmlsZXN7JG9iamVjdH0gPSBNT1NUTFlfQ0xFQU47CisJCSMgSWYgd2UgaGF2ZSBhIGxpYnRvb2wgb2JqZWN0IHRoZW4gd2UgYWxzbyBtdXN0IHJlbW92ZQorCQkjIHRoZSBvcmRpbmFyeSAuby4KKwkJaWYgKCRvYmplY3QgPX4gL1wubG8kLykKKwkJeworCQkgICAgKG15ICR4b2JqID0gJG9iamVjdCkgPX4gcyxsbyQsXCQoT0JKRVhUKSw7CisJCSAgICAkY29tcGlsZV9jbGVhbl9maWxlc3skeG9ian0gPSBNT1NUTFlfQ0xFQU47CisKKwkJICAgICMgUmVtb3ZlIGFueSBsaWJ0b29sIG9iamVjdCBpbiB0aGlzIGRpcmVjdG9yeS4KKwkJICAgICRsaWJ0b29sX2NsZWFuX2RpcmVjdG9yaWVzeyRkaXJlY3Rvcnl9ID0gMTsKKwkJfQorCisJCXB1c2ggKEBkZXBfbGlzdCwgcmVxdWlyZV9idWlsZF9kaXJlY3RvcnkgKCRkaXJlY3RvcnkpKTsKKworCQkjIElmIHdlJ3JlIGdlbmVyYXRpbmcgZGVwZW5kZW5jaWVzLCB3ZSBhbHNvIHdhbnQKKwkJIyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYXBwcm9wcmlhdGUgc3ViZGlyIG9mIHRoZQorCQkjIC5kZXBzIGRpcmVjdG9yeSBpcyBjcmVhdGVkLgorCQlwdXNoIChAZGVwX2xpc3QsCisJCSAgICAgIHJlcXVpcmVfYnVpbGRfZGlyZWN0b3J5ICgkZGlyZWN0b3J5IC4gJy8kKERFUERJUiknKSkKKwkJICB1bmxlc3Mgb3B0aW9uICduby1kZXBlbmRlbmNpZXMnOworCSAgICB9CisKKwkgICAgJnByZXR0eV9wcmludF9ydWxlICgkb2JqZWN0IC4gJzonLCAiXHQiLCBAZGVwX2xpc3QpCisJCWlmIHNjYWxhciBAZGVwX2xpc3QgPiAwOworCX0KKworCSMgVHJhbnNmb3JtIC5vIG9yICRvIGZpbGUgaW50byAuUCBmaWxlIChmb3IgYXV0b21hdGljCisJIyBkZXBlbmRlbmN5IGNvZGUpLgorCWlmICgkbGFuZyAmJiAkbGFuZy0+YXV0b2RlcCBuZSAnbm8nKQorCXsKKwkgICAgbXkgJGRlcGZpbGUgPSAkb2JqZWN0OworCSAgICAkZGVwZmlsZSA9fiBzL1wuKFteLl0qKSQvLlAkMS87CisJICAgICRkZXBmaWxlID1+IHMvXCRcKE9CSkVYVFwpJC9vLzsKKwkgICAgJGRlcF9maWxlc3tkaXJuYW1lICgkZGVwZmlsZSkgLiAnLyQoREVQRElSKS8nCisJCQkgLiBiYXNlbmFtZSAoJGRlcGZpbGUpfSA9IDE7CisJfQorICAgIH0KKworICAgIHJldHVybiBAcmVzdWx0OworfQorCisKKyMgJExJTktFUgorIyBkZWZpbmVfb2JqZWN0c19mcm9tX3NvdXJjZXMgKCRWQVIsICRPQkpWQVIsICROT0RFRklORSwgJE9ORV9GSUxFLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRPQkosICRQQVJFTlQsICRUT1BQQVJFTlQsICRXSEVSRSwgJVRSQU5TRk9STSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBhbiBfT0JKRUNUUyB2YXJpYWJsZSBmb3IgYSBfU09VUkNFUyB2YXJpYWJsZSAob3Igc3VidmFyaWFibGUpCisjCisjIEFyZ3VtZW50cyBhcmU6CisjICAgJFZBUiBpcyB0aGUgbmFtZSBvZiB0aGUgX1NPVVJDRVMgdmFyaWFibGUKKyMgICAkT0JKVkFSIGlzIHRoZSBuYW1lIG9mIHRoZSBfT0JKRUNUUyB2YXJpYWJsZSBpZiBrbm93biAob3RoZXJ3aXNlCisjICAgICBpdCB3aWxsIGJlIGdlbmVyYXRlZCBhbmQgcmV0dXJuZWQpLgorIyAgICROT0RFRklORSBpcyBhIGJvb2xlYW46IGlmIHRydWUsICRPQkpWQVIgd2lsbCBub3QgYmUgZGVmaW5lZCAoYnV0CisjICAgICB3b3JrIGRvbmUgdG8gZGV0ZXJtaW5lIHRoZSBsaW5rZXIgd2lsbCBiZSkuCisjICAgJE9ORV9GSUxFIGlzIHRoZSBjYW5vbmljYWwgKHRyYW5zZm9ybWVkKSBuYW1lIG9mIG9iamVjdCB0byBidWlsZAorIyAgICRPQkogaXMgdGhlIG9iamVjdCBleHRlbnNpb24gKGkuZS4gZWl0aGVyIGAubycgb3IgYC5sbycpLgorIyAgICRUT1BQQVJFTlQgaXMgdGhlIF9TT1VSQ0VTIHZhcmlhYmxlIGJlaW5nIHByb2Nlc3NlZC4KKyMgICAkV0hFUkUgY29udGV4dCBpbnRvIHdoaWNoIHRoaXMgZGVmaW5pdGlvbiBpcyBkb25lCisjICAgJVRSQU5TRk9STSBleHRyYSBhcmd1bWVudHMgdG8gcGFzcyB0byBmaWxlX2NvbnRlbnRzIHdoZW4gcHJvZHVjaW5nCisjICAgICBydWxlcworIworIyBSZXN1bHQgaXMgYSBwYWlyICgkTElOS0VSLCAkT0JKVkFSKToKKyMgICAgJExJTktFUiBpcyBhIGJvb2xlYW4sIHRydWUgaWYgYSBsaW5rZXIgaXMgbmVlZGVkIHRvIGRlYWwgd2l0aCB0aGUgb2JqZWN0cworc3ViIGRlZmluZV9vYmplY3RzX2Zyb21fc291cmNlcyAoJCQkJCQkJCUpCit7CisgIG15ICgkdmFyLCAkb2JqdmFyLCAkbm9kZWZpbmUsICRvbmVfZmlsZSwKKyAgICAgICRvYmosICR0b3BwYXJlbnQsICR3aGVyZSwgJXRyYW5zZm9ybSkgPSBAXzsKKworICBteSAkbmVlZGxpbmtlciA9ICIiOworCisgIHRyYW5zZm9ybV92YXJpYWJsZV9yZWN1cnNpdmVseQorICAgICgkdmFyLCAkb2JqdmFyLCAnYW1fX29iamVjdHMnLCAkbm9kZWZpbmUsICR3aGVyZSwKKyAgICAgIyBUaGUgdHJhbnNmb3JtIGNvZGUgdG8gcnVuIG9uIGVhY2ggZmlsZW5hbWUuCisgICAgIHN1YiB7CisgICAgICAgbXkgKCRzdWJ2YXIsICR2YWwsICRjb25kLCAkZnVsbF9jb25kKSA9IEBfOworICAgICAgIG15IEB0cmFucyA9IGhhbmRsZV9zaW5nbGVfdHJhbnNmb3JtICgkc3VidmFyLCAkdG9wcGFyZW50LAorCQkJCQkgICAgJG9uZV9maWxlLCAkb2JqLCAkdmFsLAorCQkJCQkgICAgJXRyYW5zZm9ybSk7CisgICAgICAgJG5lZWRsaW5rZXIgPSAidHJ1ZSIgaWYgQHRyYW5zOworICAgICAgIHJldHVybiBAdHJhbnM7CisgICAgIH0pOworCisgIHJldHVybiAkbmVlZGxpbmtlcjsKK30KKworCisjIGhhbmRsZV9zb3VyY2VfdHJhbnNmb3JtICgkQ0FOT05fVEFSR0VULCAkVEFSR0VULCAkT0JKRVhULCAkV0hFUkUsICVUUkFOU0ZPUk0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEhhbmRsZSBTT1VSQ0UtPk9CSkVDVCB0cmFuc2Zvcm0gZm9yIG9uZSBwcm9ncmFtIG9yIGxpYnJhcnkuCisjIEFyZ3VtZW50cyBhcmU6CisjICAgY2Fub25pY2FsICh0cmFuc2Zvcm1lZCkgbmFtZSBvZiB0YXJnZXQgdG8gYnVpbGQKKyMgICBhY3R1YWwgdGFyZ2V0IG9mIG9iamVjdCB0byBidWlsZAorIyAgIG9iamVjdCBleHRlbnNpb24gKGkuZS4sIGVpdGhlciBgLm8nIG9yIGAkbycpCisjICAgbG9jYXRpb24gb2YgdGhlIHNvdXJjZSB2YXJpYWJsZQorIyAgIGV4dHJhIGFyZ3VtZW50cyB0byBwYXNzIHRvIGZpbGVfY29udGVudHMgd2hlbiBwcm9kdWNpbmcgcnVsZXMKKyMgUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBsaW5rZXIgdmFyaWFibGUgdGhhdCBtdXN0IGJlIHVzZWQuCisjIEVtcHR5IHJldHVybiBtZWFucyBqdXN0IHVzZSBgTElOSycuCitzdWIgaGFuZGxlX3NvdXJjZV90cmFuc2Zvcm0gKCQkJCQlKQoreworICAgICMgb25lX2ZpbGUgaXMgY2Fub25pY2FsIG5hbWUuICB1bnhmb3JtZWQgaXMgZ2l2ZW4gbmFtZS4gIG9iaiBpcworICAgICMgb2JqZWN0IGV4dGVuc2lvbi4KKyAgICBteSAoJG9uZV9maWxlLCAkdW54Zm9ybWVkLCAkb2JqLCAkd2hlcmUsICV0cmFuc2Zvcm0pID0gQF87CisKKyAgICBteSAkbGlua2VyID0gJyc7CisKKyAgICAjIE5vIHBvaW50IGluIGNvbnRpbnVpbmcgaWYgX09CSkVDVFMgaXMgZGVmaW5lZC4KKyAgICByZXR1cm4gaWYgcmVqZWN0X3ZhciAoJG9uZV9maWxlIC4gJ19PQkpFQ1RTJywKKwkJCSAgJG9uZV9maWxlIC4gJ19PQkpFQ1RTIHNob3VsZCBub3QgYmUgZGVmaW5lZCcpOworCisgICAgbXkgJXVzZWRfcGZ4ID0gKCk7CisgICAgbXkgJG5lZWRsaW5rZXI7CisgICAgJWxpbmtlcnNfdXNlZCA9ICgpOworICAgIGZvcmVhY2ggbXkgJHByZWZpeCAoJycsICdFWFRSQV8nLCAnZGlzdF8nLCAnbm9kaXN0XycsCisJCQknZGlzdF9FWFRSQV8nLCAnbm9kaXN0X0VYVFJBXycpCisgICAgeworCW15ICR2YXJuYW1lID0gJHByZWZpeCAuICRvbmVfZmlsZSAuICJfU09VUkNFUyI7CisJbXkgJHZhciA9IHZhciAkdmFybmFtZTsKKwluZXh0IHVubGVzcyAkdmFyOworCisJIyBXZSBhcmUgZ29pbmcgdG8gZGVmaW5lIF9PQkpFQ1RTIHZhcmlhYmxlcyB1c2luZyB0aGUgcHJlZml4LgorCSMgVGhlbiB3ZSBnbG9tIHRoZW0gYWxsIHRvZ2V0aGVyLiAgU28gd2UgY2FuJ3QgdXNlIHRoZSBudWxsCisJIyBwcmVmaXggaGVyZSBhcyB3ZSBuZWVkIGl0IGxhdGVyLgorCW15ICR4cGZ4ID0gKCRwcmVmaXggZXEgJycpID8gJ2FtXycgOiAkcHJlZml4OworCisJIyBLZWVwIHRyYWNrIG9mIHdoaWNoIHByZWZpeGVzIHdlIHNhdy4KKwkkdXNlZF9wZnh7JHhwZnh9ID0gMQorCSAgdW5sZXNzICRwcmVmaXggPX4gL0VYVFJBXy87CisKKwlwdXNoIEBzb3VyY2VzLCAiXCQoJHZhcm5hbWUpIjsKKwlwdXNoIEBkaXN0X3NvdXJjZXMsIHNoYWRvd191bmNvbmRpdGlvbmFsbHkgKCR2YXJuYW1lLCAkd2hlcmUpCisJICB1bmxlc3MgKG9wdGlvbiAoJ25vLWRpc3QnKSB8fCAkcHJlZml4ID1+IC9ebm9kaXN0Xy8pOworCisJJG5lZWRsaW5rZXIgfD0KKwkgICAgZGVmaW5lX29iamVjdHNfZnJvbV9zb3VyY2VzICgkdmFybmFtZSwKKwkJCQkJICR4cGZ4IC4gJG9uZV9maWxlIC4gJ19PQkpFQ1RTJywKKwkJCQkJICRwcmVmaXggPX4gL0VYVFJBXy8sCisJCQkJCSAkb25lX2ZpbGUsICRvYmosICR2YXJuYW1lLCAkd2hlcmUsCisJCQkJCSBESVNUX1NPVVJDRSA9PiAoJHByZWZpeCAhfiAvXm5vZGlzdF8vKSwKKwkJCQkJICV0cmFuc2Zvcm0pOworICAgIH0KKyAgICBpZiAoJG5lZWRsaW5rZXIpCisgICAgeworCSRsaW5rZXIgfHw9ICZyZXNvbHZlX2xpbmtlciAoJWxpbmtlcnNfdXNlZCk7CisgICAgfQorCisgICAgbXkgQGtleXMgPSBzb3J0IGtleXMgJXVzZWRfcGZ4OworICAgIGlmIChzY2FsYXIgQGtleXMgPT0gMCkKKyAgICB7CisJIyBUaGUgZGVmYXVsdCBzb3VyY2UgZm9yIGxpYmZvby5sYSBpcyBsaWJmb28uYywgYnV0IGZvcgorCSMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3ZSBmaXJzdCBsb29rIGF0IGxpYmZvb19sYS5jLAorCSMgaWYgbm8gZGVmYXVsdCBzb3VyY2Ugc3VmZml4IGlzIGdpdmVuLgorCW15ICRvbGRfZGVmYXVsdF9zb3VyY2UgPSAiJG9uZV9maWxlLmMiOworCW15ICRleHRfdmFyID0gdmFyICgnQU1fREVGQVVMVF9TT1VSQ0VfRVhUJyk7CisJbXkgJGRlZmF1bHRfc291cmNlX2V4dCA9ICRleHRfdmFyID8gdmFyaWFibGVfdmFsdWUgKCRleHRfdmFyKSA6ICcuYyc7CisJbXNnX3ZhciAoJ3Vuc3VwcG9ydGVkJywgJGV4dF92YXIsICRleHRfdmFyLT5uYW1lIC4gIiBjYW4gYXNzdW1lIGF0IG1vc3Qgb25lIHZhbHVlIikKKwkgIGlmICRkZWZhdWx0X3NvdXJjZV9leHQgPX4gL1tcdCBdLzsKKwkobXkgJGRlZmF1bHRfc291cmNlID0gJHVueGZvcm1lZCkgPX4gcywoXC5bXi4vXFxdKik/JCwkZGVmYXVsdF9zb3VyY2VfZXh0LDsKKwlpZiAoJG9sZF9kZWZhdWx0X3NvdXJjZSBuZSAkZGVmYXVsdF9zb3VyY2UKKwkgICAgJiYgISRleHRfdmFyCisJICAgICYmIChydWxlICRvbGRfZGVmYXVsdF9zb3VyY2UKKwkJfHwgcnVsZSAnJChzcmNkaXIpLycgLiAkb2xkX2RlZmF1bHRfc291cmNlCisJCXx8IHJ1bGUgJyR7c3JjZGlyfS8nIC4gJG9sZF9kZWZhdWx0X3NvdXJjZQorCQl8fCAtZiAkb2xkX2RlZmF1bHRfc291cmNlKSkKKwkgIHsKKwkgICAgbXkgJGxvYyA9ICR3aGVyZS0+Y2xvbmU7CisJICAgICRsb2MtPnBvcF9jb250ZXh0OworCSAgICBtc2cgKCdvYnNvbGV0ZScsICRsb2MsCisJCSAidGhlIGRlZmF1bHQgc291cmNlIGZvciBgJHVueGZvcm1lZCcgaGFzIGJlZW4gY2hhbmdlZCAiCisJCSAuICJ0byBgJGRlZmF1bHRfc291cmNlJy5cbihVc2luZyBgJG9sZF9kZWZhdWx0X3NvdXJjZScgZm9yICIKKwkJIC4gImJhY2t3YXJkIGNvbXBhdGliaWxpdHkuKSIpOworCSAgICAkZGVmYXVsdF9zb3VyY2UgPSAkb2xkX2RlZmF1bHRfc291cmNlOworCSAgfQorCSMgSWYgYSBydWxlIGV4aXN0cyB0byBidWlsZCB0aGlzIHNvdXJjZSB3aXRoIGEgJChzcmNkaXIpCisJIyBwcmVmaXgsIHVzZSB0aGF0IHByZWZpeCBpbiBvdXIgdmFyaWFibGVzIHRvby4gIFRoaXMgaXMgZm9yCisJIyB0aGUgc2FrZSBvZiBCU0QgTWFrZS4KKwlpZiAocnVsZSAnJChzcmNkaXIpLycgLiAkZGVmYXVsdF9zb3VyY2UKKwkgICAgfHwgcnVsZSAnJHtzcmNkaXJ9LycgLiAkZGVmYXVsdF9zb3VyY2UpCisJICB7CisJICAgICRkZWZhdWx0X3NvdXJjZSA9ICckKHNyY2RpcikvJyAuICRkZWZhdWx0X3NvdXJjZTsKKwkgIH0KKworCSZkZWZpbmVfdmFyaWFibGUgKCRvbmVfZmlsZSAuICJfU09VUkNFUyIsICRkZWZhdWx0X3NvdXJjZSwgJHdoZXJlKTsKKwlwdXNoIChAc291cmNlcywgJGRlZmF1bHRfc291cmNlKTsKKwlwdXNoIChAZGlzdF9zb3VyY2VzLCAkZGVmYXVsdF9zb3VyY2UpOworCisJJWxpbmtlcnNfdXNlZCA9ICgpOworCW15IChAcmVzdWx0KSA9CisJICBoYW5kbGVfc2luZ2xlX3RyYW5zZm9ybSAoJG9uZV9maWxlIC4gJ19TT1VSQ0VTJywKKwkJCQkgICAkb25lX2ZpbGUgLiAnX1NPVVJDRVMnLAorCQkJCSAgICRvbmVfZmlsZSwgJG9iaiwKKwkJCQkgICAkZGVmYXVsdF9zb3VyY2UsICV0cmFuc2Zvcm0pOworCSRsaW5rZXIgfHw9ICZyZXNvbHZlX2xpbmtlciAoJWxpbmtlcnNfdXNlZCk7CisJZGVmaW5lX3ByZXR0eV92YXJpYWJsZSAoJG9uZV9maWxlIC4gJ19PQkpFQ1RTJywgVFJVRSwgJHdoZXJlLCBAcmVzdWx0KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlAa2V5cyA9IG1hcCB7ICckKCcgLiAkXyAuICRvbmVfZmlsZSAuICdfT0JKRUNUUyknIH0gQGtleXM7CisJZGVmaW5lX3ByZXR0eV92YXJpYWJsZSAoJG9uZV9maWxlIC4gJ19PQkpFQ1RTJywgVFJVRSwgJHdoZXJlLCBAa2V5cyk7CisgICAgfQorCisgICAgIyBJZiB3ZSB3YW50IHRvIHVzZSBgTElOSycgd2UgbXVzdCBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZC4KKyAgICBpZiAoJGxpbmtlciBlcSAnJykKKyAgICB7CisJJG5lZWRfbGluayA9IDE7CisgICAgfQorCisgICAgcmV0dXJuICRsaW5rZXI7Cit9CisKKworIyBoYW5kbGVfbGliX29iamVjdHMgKCRYTkFNRSwgJFZBUikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNwZWNpYWwtY2FzZSBBTExPQ0EgYW5kIExJQk9CSlMgc3Vic3RpdHV0aW9ucyBpbiBfTERBREQgb3IgX0xJQkFERCB2YXJpYWJsZXMuCisjIEFsc28sIGdlbmVyYXRlIF9ERVBFTkRFTkNJRVMgdmFyaWFibGUgaWYgYXBwcm9wcmlhdGUuCisjIEFyZ3VtZW50cyBhcmU6CisjICAgdHJhbnNmb3JtZWQgbmFtZSBvZiBvYmplY3QgYmVpbmcgYnVpbHQsIG9yIGVtcHR5IHN0cmluZyBpZiBubyBvYmplY3QKKyMgICBuYW1lIG9mIF9MREFERC9fTElCQURELXR5cGUgdmFyaWFibGUgdG8gZXhhbWluZQorIyBSZXR1cm5zIDEgaWYgTElCT0JKUyBzZWVuLCAwIG90aGVyd2lzZS4KK3N1YiBoYW5kbGVfbGliX29iamVjdHMKK3sKKyAgbXkgKCR4bmFtZSwgJHZhcm5hbWUpID0gQF87CisKKyAgbXkgJHZhciA9IHZhciAoJHZhcm5hbWUpOworICBwcm9nX2Vycm9yICJoYW5kbGVfbGliX29iamVjdHM6IGAkdmFybmFtZScgdW5kZWZpbmVkIgorICAgIHVubGVzcyAkdmFyOworICBwcm9nX2Vycm9yICJoYW5kbGVfbGliX29iamVjdHM6IHVuZXhwZWN0ZWQgdmFyaWFibGUgbmFtZSBgJHZhcm5hbWUnIgorICAgIHVubGVzcyAkdmFybmFtZSA9fiAvXiguKikoPzpMSUJ8TEQpQUREJC87CisgIG15ICRwcmVmaXggPSAkMSB8fCAnQU1fJzsKKworICBteSAkc2Vlbl9saWJvYmpzID0gMDsKKyAgbXkgJGZsYWd2YXIgPSAwOworCisgIHRyYW5zZm9ybV92YXJpYWJsZV9yZWN1cnNpdmVseQorICAgICgkdmFybmFtZSwgJHhuYW1lIC4gJ19ERVBFTkRFTkNJRVMnLCAnYW1fX0RFUEVOREVOQ0lFUycsCisgICAgICEgJHhuYW1lLCBJTlRFUk5BTCwKKyAgICAgIyBUcmFuc2Zvcm1hdGlvbiBmdW5jdGlvbiwgcnVuIG9uIGVhY2ggZmlsZW5hbWUuCisgICAgIHN1YiB7CisgICAgICAgbXkgKCRzdWJ2YXIsICR2YWwsICRjb25kLCAkZnVsbF9jb25kKSA9IEBfOworCisgICAgICAgaWYgKCR2YWwgPX4gL14tLykKKwkgeworCSAgICMgU2tpcCAtbGZvbyBhbmQgLUxkaXIgc2lsZW50bHk7IHRoZXNlIGFyZSBleHBsaWNpdGx5IGFsbG93ZWQuCisJICAgaWYgKCR2YWwgIX4gL14tW2xMXS8gJiYKKwkgICAgICAgIyBTa2lwIC1kbG9wZW4gYW5kIC1kbHByZW9wZW47IHRoZXNlIGFyZSBleHBsaWNpdGx5IGFsbG93ZWQKKwkgICAgICAgIyBmb3IgTGlidG9vbCBsaWJyYXJpZXMgb3IgcHJvZ3JhbXMuICAoQWN0dWFsbHkgd2UgYXJlIGEgYml0CisJICAgICAgICMgbGF4ZSBoZXJlIHNpbmNlIHRoaXMgY29kZSBhbHNvIGFwcGxpZXMgdG8gbm9uLWxpYnRvb2wKKwkgICAgICAgIyBsaWJyYXJpZXMgb3IgcHJvZ3JhbXMsIGZvciB3aGljaCAtZGxvcGVuIGFuZCAtZGxvcHJlb3BlbgorCSAgICAgICAjIGFyZSBwdXJlIG5vbnNlbnNlLiAgRGlhZ25vc2luZyB0aGlzIGRvZXNuJ3Qgc2VlbSB2ZXJ5CisJICAgICAgICMgaW1wb3J0YW50OiB0aGUgZGV2ZWxvcGVyIHdpbGwgcXVpY2tseSBnZXQgY29tcGxhaW50cyBmcm9tCisJICAgICAgICMgdGhlIGxpbmtlci4pCisJICAgICAgICR2YWwgIX4gL14tZGwoPzpwcmUpP29wZW4kLyAmJgorCSAgICAgICAjIE9ubHkgZ2V0IHRoaXMgZXJyb3Igb25jZS4KKwkgICAgICAgISAkZmxhZ3ZhcikKKwkgICAgIHsKKwkgICAgICAgJGZsYWd2YXIgPSAxOworCSAgICAgICAjIEZJWE1FOiBzaG91bGQgZGlzcGxheSBhIHN0YWNrIG9mIG5lc3RlZCB2YXJpYWJsZXMKKwkgICAgICAgIyBhcyBjb250ZXh0IHdoZW4gJHZhciAhPSAkc3VidmFyLgorCSAgICAgICBlcnJfdmFyICgkdmFyLCAibGlua2VyIGZsYWdzIHN1Y2ggYXMgYCR2YWwnIGJlbG9uZyBpbiAiCisJCQkuICJgJHtwcmVmaXh9TERGTEFHUyIpOworCSAgICAgfQorCSAgIHJldHVybiAoKTsKKwkgfQorICAgICAgIGVsc2lmICgkdmFsICF+IC9eXEAuKlxAJC8pCisJIHsKKwkgICAjIEFzc3VtZSB3ZSBoYXZlIGEgZmlsZSBvZiBzb21lIHNvcnQsIGFuZCBvdXRwdXQgaXQgaW50byB0aGUKKwkgICAjIGRlcGVuZGVuY3kgdmFyaWFibGUuICBBdXRvY29uZiBzdWJzdGl0dXRpb25zIGFyZSBub3Qgb3V0cHV0OworCSAgICMgcmFyZWx5IGlzIGEgbmV3IGRlcGVuZGVuY3kgc3Vic3RpdHV0ZWQgaW50byBlLmcuIGZvb19MREFERAorCSAgICMgLS0gYnV0IGJhZCB0aGluZ3MgKGUuZy4gLWxYMTEpIGFyZSByb3V0aW5lbHkgc3Vic3RpdHV0ZWQuCisJICAgIyBOb3RlIHRoYXQgTElCT0JKUyBhbmQgQUxMT0NBIGFyZSBleGNlcHRpb25zIHRvIHRoaXMgcnVsZSwKKwkgICAjIGFuZCBoYW5kbGVkIHNwZWNpYWxseSBiZWxvdy4KKwkgICByZXR1cm4gJHZhbDsKKwkgfQorICAgICAgIGVsc2lmICgkdmFsID1+IC9eXEAoTFQpP0xJQk9CSlNcQCQvKQorCSB7CisJICAgaGFuZGxlX0xJQk9CSlMgKCRzdWJ2YXIsICRjb25kLCAkMSk7CisJICAgJHNlZW5fbGlib2JqcyA9IDE7CisJICAgcmV0dXJuICR2YWw7CisJIH0KKyAgICAgICBlbHNpZiAoJHZhbCA9fiAvXlxAKExUKT9BTExPQ0FcQCQvKQorCSB7CisJICAgaGFuZGxlX0FMTE9DQSAoJHN1YnZhciwgJGNvbmQsICQxKTsKKwkgICByZXR1cm4gJHZhbDsKKwkgfQorICAgICAgIGVsc2UKKwkgeworCSAgIHJldHVybiAoKTsKKwkgfQorICAgICB9KTsKKworICByZXR1cm4gJHNlZW5fbGlib2JqczsKK30KKworIyBoYW5kbGVfTElCT0JKU19vcl9BTExPQ0EgKCRWQVIpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5pdGlvbnMgY29tbW9uIHRvIExJQk9CSlMgYW5kIEFMTE9DQS4KKyMgVkFSIHNob3VsZCBiZSBvbmUgb2YgTElCT0JKUywgTFRMSUJPQkpTLCBBTExPQ0EsIG9yIExUQUxMT0NBLgorc3ViIGhhbmRsZV9MSUJPQkpTX29yX0FMTE9DQSAoJCkKK3sKKyAgbXkgKCR2YXIpID0gQF87CisKKyAgbXkgJGRpciA9ICcnOworCisgICMgSWYgTElCT0JKUyBmaWxlcyBtdXN0IGJlIGJ1aWx0IGluIGFub3RoZXIgZGlyZWN0b3J5IHdlIGhhdmUKKyAgIyB0byBkZWZpbmUgTElCT0JKRElSIGFuZCBlbnN1cmUgdGhlIGZpbGVzIGdldCBjbGVhbmVkLgorICAjIE90aGVyd2lzZSBMSUJPQkpESVIgY2FuIGJlIGxlZnQgdW5kZWZpbmVkLCBhbmQgdGhlIGNsZWFuaW5nCisgICMgaXMgYWNoaWV2ZWQgYnkgYHJtIC1mICouJChPQkpFWFQpJyBpbiBjb21waWxlLmFtLgorICBpZiAoJGNvbmZpZ19saWJvYmpfZGlyCisgICAgICAmJiAkcmVsYXRpdmVfZGlyIG5lICRjb25maWdfbGlib2JqX2RpcikKKyAgICB7CisgICAgICBpZiAob3B0aW9uICdzdWJkaXItb2JqZWN0cycpCisJeworCSAgIyBJbiB0aGUgdG9wLWxldmVsIE1ha2VmaWxlIHdlIGRvIG5vdCB1c2UgJCh0b3BfYnVpbGRkaXIpLCBiZWNhdXNlCisJICAjIHdlIGFyZSBhbHJlYWR5IHRoZXJlLCBhbmQgc2luY2UgdGhlIHRhcmdldHMgYXJlIGJ1aWx0IHdpdGhvdXQKKwkgICMgYSAkKHRvcF9idWlsZGRpciksIGl0IGhlbHBzIEJTRCBNYWtlIHRvIG1hdGNoIHRoZW0gd2l0aAorCSAgIyBkZXBlbmRlbmNpZXMuCisJICAkZGlyID0gIiRjb25maWdfbGlib2JqX2Rpci8iIGlmICRjb25maWdfbGlib2JqX2RpciBuZSAnLic7CisJICAkZGlyID0gIiR0b3BzcmNkaXIvJGRpciIgaWYgJHJlbGF0aXZlX2RpciBuZSAnLic7CisJICBkZWZpbmVfdmFyaWFibGUgKCdMSUJPQkpESVInLCAiJGRpciIsIElOVEVSTkFMKTsKKwkgICRjbGVhbl9maWxlc3siXCQoJHZhcikifSA9IE1PU1RMWV9DTEVBTjsKKwkgICMgSWYgTFRMSUJPQkpTIGlzIHVzZWQsIHdlIG11c3QgYWxzbyBjbGVhciBMSUJPQkpTICh3aGljaCBtaWdodAorCSAgIyBiZSBjcmVhdGVkIGJ5IGxpYnRvb2wgYXMgYSBzaWRlLWVmZmVjdCBvZiBjcmVhdGluZyBMVExJQk9CSlMpLgorCSAgJGNsZWFuX2ZpbGVzeyJcJCgkdmFyKSJ9ID0gTU9TVExZX0NMRUFOIGlmICR2YXIgPX4gcy9eTFQvLzsKKwl9CisgICAgICBlbHNlCisJeworCSAgZXJyb3IgKCJgXCQoJHZhciknIGNhbm5vdCBiZSB1c2VkIG91dHNpZGUgYCRjb25maWdfbGlib2JqX2RpcicgaWYiCisJCSAuICIgYHN1YmRpci1vYmplY3RzJyBpcyBub3Qgc2V0Iik7CisJfQorICAgIH0KKworICByZXR1cm4gJGRpcjsKK30KKworc3ViIGhhbmRsZV9MSUJPQkpTICgkJCQpCit7CisgIG15ICgkdmFyLCAkY29uZCwgJGx0KSA9IEBfOworICBteSAkbXlvYmpleHQgPSAkbHQgPyAnbG8nIDogJ28nOworICAkbHQgfHw9ICcnOworCisgICR2YXItPnJlcXVpcmVzX3ZhcmlhYmxlcyAoIlxAJHtsdH1MSUJPQkpTXEAgdXNlZCIsICRsdCAuICdMSUJPQkpTJykKKyAgICBpZiAhIGtleXMgJWxpYnNvdXJjZXM7CisKKyAgbXkgJGRpciA9IGhhbmRsZV9MSUJPQkpTX29yX0FMTE9DQSAiJHtsdH1MSUJPQkpTIjsKKworICBmb3JlYWNoIG15ICRpdGVyIChrZXlzICVsaWJzb3VyY2VzKQorICAgIHsKKyAgICAgIGlmICgkaXRlciA9fiAvXC5bY2x5XSQvKQorCXsKKwkgICZzYXdfZXh0ZW5zaW9uICgkJik7CisJICAmc2F3X2V4dGVuc2lvbiAoJy5jJyk7CisJfQorCisgICAgICBpZiAoJGl0ZXIgPX4gL1wuaCQvKQorCXsKKwkgIHJlcXVpcmVfbGlic291cmNlX3dpdGhfbWFjcm8gKCRjb25kLCAkdmFyLCBGT1JFSUdOLCAkaXRlcik7CisJfQorICAgICAgZWxzaWYgKCRpdGVyIG5lICdhbGxvY2EuYycpCisJeworCSAgbXkgJHJld3JpdGUgPSAkaXRlcjsKKwkgICRyZXdyaXRlID1+IHMvXC5jJC8uUCRteW9iamV4dC87CisJICAkZGVwX2ZpbGVzeyRkaXIgLiAnJChERVBESVIpLycgLiAkcmV3cml0ZX0gPSAxOworCSAgJHJld3JpdGUgPSAiXiIgLiBxdW90ZW1ldGEgKCRpdGVyKSAuICJcJCI7CisJICAjIE9ubHkgcmVxdWlyZSB0aGUgZmlsZSBpZiBpdCBpcyBub3QgYSBidWlsdCBzb3VyY2UuCisJICBteSAkYnMgPSB2YXIgKCdCVUlMVF9TT1VSQ0VTJyk7CisJICBpZiAoISAkYnMgfHwgISBncmVwICgvJHJld3JpdGUvLCAkYnMtPnZhbHVlX2FzX2xpc3RfcmVjdXJzaXZlKSkKKwkgICAgeworCSAgICAgIHJlcXVpcmVfbGlic291cmNlX3dpdGhfbWFjcm8gKCRjb25kLCAkdmFyLCBGT1JFSUdOLCAkaXRlcik7CisJICAgIH0KKwl9CisgICAgfQorfQorCitzdWIgaGFuZGxlX0FMTE9DQSAoJCQkKQoreworICBteSAoJHZhciwgJGNvbmQsICRsdCkgPSBAXzsKKyAgbXkgJG15b2JqZXh0ID0gJGx0ID8gJ2xvJyA6ICdvJzsKKyAgJGx0IHx8PSAnJzsKKyAgbXkgJGRpciA9IGhhbmRsZV9MSUJPQkpTX29yX0FMTE9DQSAiJHtsdH1BTExPQ0EiOworCisgICR2YXItPnJlcXVpcmVzX3ZhcmlhYmxlcyAoIlxAJHtsdH1BTExPQ0FcQCB1c2VkIiwgJGx0IC4gJ0FMTE9DQScpOworICAkZGVwX2ZpbGVzeyRkaXIgLiAnJChERVBESVIpL2FsbG9jYS5QJyAuICRteW9iamV4dH0gPSAxOworICByZXF1aXJlX2xpYnNvdXJjZV93aXRoX21hY3JvICgkY29uZCwgJHZhciwgRk9SRUlHTiwgJ2FsbG9jYS5jJyk7CisgICZzYXdfZXh0ZW5zaW9uICgnLmMnKTsKK30KKworIyBDYW5vbmljYWxpemUgdGhlIGlucHV0IHBhcmFtZXRlcgorc3ViIGNhbm9uaWNhbGl6ZQoreworICAgIG15ICgkc3RyaW5nKSA9IEBfOworICAgICRzdHJpbmcgPX4gdHIvQS1aYS16MC05X1xAL18vYzsKKyAgICByZXR1cm4gJHN0cmluZzsKK30KKworIyBDYW5vbmljYWxpemUgYSBuYW1lLCBhbmQgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBub24tY2Fub25pY2FsIG5hbWUKKyMgaXMgbmV2ZXIgdXNlZC4gIFJldHVybnMgY2Fub25pY2FsIG5hbWUuICBBcmd1bWVudHMgYXJlIG5hbWUgYW5kIGEKKyMgbGlzdCBvZiBzdWZmaXhlcyB0byBjaGVjayBmb3IuCitzdWIgY2hlY2tfY2Fub25pY2FsX3NwZWxsaW5nCit7CisgIG15ICgkbmFtZSwgQHN1ZmZpeGVzKSA9IEBfOworCisgIG15ICR4bmFtZSA9ICZjYW5vbmljYWxpemUgKCRuYW1lKTsKKyAgaWYgKCR4bmFtZSBuZSAkbmFtZSkKKyAgICB7CisgICAgICBmb3JlYWNoIG15ICR4dCAoQHN1ZmZpeGVzKQorCXsKKwkgIHJlamVjdF92YXIgKCIkbmFtZSR4dCIsICJ1c2UgYCR4bmFtZSR4dCcsIG5vdCBgJG5hbWUkeHQnIik7CisJfQorICAgIH0KKworICByZXR1cm4gJHhuYW1lOworfQorCisKKyMgaGFuZGxlX2NvbXBpbGUgKCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IHVwIHRoZSBjb21waWxlIHN1aXRlLgorc3ViIGhhbmRsZV9jb21waWxlICgpCit7CisgICAgcmV0dXJuCisgICAgICB1bmxlc3MgJGdldF9vYmplY3RfZXh0ZW5zaW9uX3dhc19ydW47CisKKyAgICAjIEJvaWxlcnBsYXRlLgorICAgIG15ICRkZWZhdWx0X2luY2x1ZGVzID0gJyc7CisgICAgaWYgKCEgb3B0aW9uICdub3N0ZGluYycpCisgICAgICB7CisJbXkgQGluY3MgPSAoJy1JLicsIHN1YnN0ICgnYW1fX2lzcmMnKSk7CisKKwlteSAkdmFyID0gdmFyICdDT05GSUdfSEVBREVSJzsKKwlpZiAoJHZhcikKKwkgIHsKKwkgICAgZm9yZWFjaCBteSAkaGRyIChzcGxpdCAoJyAnLCAkdmFyLT52YXJpYWJsZV92YWx1ZSkpCisJICAgICAgeworCQlwdXNoIEBpbmNzLCAnLUknIC4gZGlybmFtZSAoJGhkcik7CisJICAgICAgfQorCSAgfQorCSMgV2Ugd2FudCBgLUkuIC1JJChzcmNkaXIpJywgYnV0IHRoZSBsYXR0ZXIgLUkgaXMgcmVkdW5kYW50CisJIyBhbmQgdW5hZXN0aGV0aWMgaW4gbm9uLVZQQVRIIGJ1aWxkcy4gIFdlIHVzZSBgLUkuQGFtX19pc3JjQGAKKwkjIGluc3RlYWQuICBJdCB3aWxsIGJlIHJlcGxhY2VkIGJ5ICctSS4nIG9yICctSS4gLUkkKHNyY2RpciknLgorCSMgSXRlbXMgaW4gQ09ORklHX0hFQURFUiBhcmUgbmV2ZXIgaW4gJChzcmNkaXIpIHNvIGl0IGlzIHNhZmUKKwkjIHRvIGp1c3QgcHV0IEBhbV9faXNyY0AgcmlnaHQgYWZ0ZXIgYC1JLicsIHdpdGhvdXQgYSBzcGFjZS4KKwkoJGRlZmF1bHRfaW5jbHVkZXMgPSAnICcgLiB1bmlxIChAaW5jcykpID1+IHMvIEAvQC87CisgICAgICB9CisKKyAgICBteSAoQG1vc3RseV9ybXMsIEBkaXN0X3Jtcyk7CisgICAgZm9yZWFjaCBteSAkaXRlbSAoc29ydCBrZXlzICVjb21waWxlX2NsZWFuX2ZpbGVzKQorICAgIHsKKwlpZiAoJGNvbXBpbGVfY2xlYW5fZmlsZXN7JGl0ZW19ID09IE1PU1RMWV9DTEVBTikKKwl7CisJICAgIHB1c2ggKEBtb3N0bHlfcm1zLCAiXHQtcm0gLWYgJGl0ZW0iKTsKKwl9CisJZWxzaWYgKCRjb21waWxlX2NsZWFuX2ZpbGVzeyRpdGVtfSA9PSBESVNUX0NMRUFOKQorCXsKKwkgICAgcHVzaCAoQGRpc3Rfcm1zLCAiXHQtcm0gLWYgJGl0ZW0iKTsKKwl9CisJZWxzZQorCXsKKwkgIHByb2dfZXJyb3IgJ2ludmFsaWQgZW50cnkgaW4gJWNvbXBpbGVfY2xlYW5fZmlsZXMnOworCX0KKyAgICB9CisKKyAgICBteSAoJGNvbXMsICR2YXJzLCAkcnVsZXMpID0KKyAgICAgICZmaWxlX2NvbnRlbnRzX2ludGVybmFsICgxLCAiJGxpYmRpci9hbS9jb21waWxlLmFtIiwKKwkJCSAgICAgICBuZXcgQXV0b21ha2U6OkxvY2F0aW9uLAorCQkJICAgICAgICgnREVGQVVMVF9JTkNMVURFUycgPT4gJGRlZmF1bHRfaW5jbHVkZXMsCisJCQkJJ01PU1RMWVJNUycgPT4gam9pbiAoIlxuIiwgQG1vc3RseV9ybXMpLAorCQkJCSdESVNUUk1TJyA9PiBqb2luICgiXG4iLCBAZGlzdF9ybXMpKSk7CisgICAgJG91dHB1dF92YXJzIC49ICR2YXJzOworICAgICRvdXRwdXRfcnVsZXMgLj0gIiRjb21zJHJ1bGVzIjsKKworICAgICMgQ2hlY2sgZm9yIGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uLgorICAgIGlmIChvcHRpb24gJ2Fuc2kya25yJykKKyAgICAgIHsKKwlteSAoJGFuc2kya25yX2ZpbGVuYW1lLCAkYW5zaTJrbnJfd2hlcmUpID0gQHtvcHRpb24gJ2Fuc2kya25yJ307CisJbXkgJGFuc2kya25yX2RpciA9ICcnOworCisJcmVxdWlyZV92YXJpYWJsZXMgKCRhbnNpMmtucl93aGVyZSwgIm9wdGlvbiBgYW5zaTJrbnInIGlzIHVzZWQiLAorCQkJICAgVFJVRSwgIkFOU0kyS05SIiwgIlUiKTsKKworCSMgdG9wZGlyIGlzIHdoZXJlIGFuc2kya25yIHNob3VsZCBiZS4KKwlpZiAoJGFuc2kya25yX2ZpbGVuYW1lIGVxICdhbnNpMmtucicpCisJICB7CisJICAgICMgT25seSByZXF1aXJlIGFuc2kya25yIGZpbGVzIGlmIHRoZXkgc2hvdWxkIGFwcGVhciBpbgorCSAgICAjIHRoaXMgZGlyZWN0b3J5LgorCSAgICByZXF1aXJlX2ZpbGUgKCRhbnNpMmtucl93aGVyZSwgRk9SRUlHTiwKKwkJCSAgJ2Fuc2kya25yLmMnLCAnYW5zaTJrbnIuMScpOworCisJICAgICMgYW5zaTJrbnIgbmVlZHMgdG8gYmUgYnVpbHQgYmVmb3JlIHN1YmRpcnMsIHNvIHVuc2hpZnQgaXQuCisJICAgIHVuc2hpZnQgKEBhbGwsICckKEFOU0kyS05SKScpOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgJGFuc2kya25yX2RpciA9IGRpcm5hbWUgKCRhbnNpMmtucl9maWxlbmFtZSk7CisJICB9CisKKwkkb3V0cHV0X3J1bGVzIC49ICZmaWxlX2NvbnRlbnRzICgnYW5zaTJrbnInLAorCQkJCQkgbmV3IEF1dG9tYWtlOjpMb2NhdGlvbiwKKwkJCQkJICdBTlNJMktOUi1ESVInID0+ICRhbnNpMmtucl9kaXIpOworCisgICAgfQorfQorCisjIGhhbmRsZV9saWJ0b29sICgpCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIEhhbmRsZSBsaWJ0b29sIHJ1bGVzLgorc3ViIGhhbmRsZV9saWJ0b29sCit7CisgIHJldHVybiB1bmxlc3MgdmFyICgnTElCVE9PTCcpOworCisgICMgTGlidG9vbCByZXF1aXJlcyBzb21lIGZpbGVzLCBidXQgb25seSBhdCB0b3AgbGV2ZWwuCisgICMgKFN0YXJ0aW5nIHdpdGggTGlidG9vbCAyLjAgd2UgZG8gbm90IGhhdmUgdG8gYm90aGVyLiAgVGhlc2UKKyAgIyByZXF1aXJlbWVudHMgYXJlIGRvbmUgd2l0aCBBQ19SRVFVSVJFX0FVWF9GSUxFLikKKyAgcmVxdWlyZV9jb25mX2ZpbGVfd2l0aF9tYWNybyAoVFJVRSwgJ0xJQlRPT0wnLCBGT1JFSUdOLCBAbGlidG9vbF9maWxlcykKKyAgICBpZiAkcmVsYXRpdmVfZGlyIGVxICcuJyAmJiAhICRsaWJ0b29sX25ld19hcGk7CisKKyAgbXkgQGxpYnRvb2xfcm1zOworICBmb3JlYWNoIG15ICRpdGVtIChzb3J0IGtleXMgJWxpYnRvb2xfY2xlYW5fZGlyZWN0b3JpZXMpCisgICAgeworICAgICAgbXkgJGRpciA9ICgkaXRlbSBlcSAnLicpID8gJycgOiAiJGl0ZW0vIjsKKyAgICAgICMgLmxpYnMgaXMgZm9yIFVuaXgsIF9saWJzIGZvciBET1MuCisgICAgICBwdXNoIChAbGlidG9vbF9ybXMsICJcdC1ybSAtcmYgJHtkaXJ9LmxpYnMgJHtkaXJ9X2xpYnMiKTsKKyAgICB9CisKKyAgY2hlY2tfdXNlcl92YXJpYWJsZXMgJ0xJQlRPT0xGTEFHUyc7CisKKyAgIyBPdXRwdXQgdGhlIGxpYnRvb2wgY29tcGlsYXRpb24gcnVsZXMuCisgICRvdXRwdXRfcnVsZXMgLj0gJmZpbGVfY29udGVudHMgKCdsaWJ0b29sJywKKwkJCQkgICBuZXcgQXV0b21ha2U6OkxvY2F0aW9uLAorCQkJCSAgIExUUk1TID0+IGpvaW4gKCJcbiIsIEBsaWJ0b29sX3JtcykpOworfQorCisjIGhhbmRsZV9wcm9ncmFtcyAoKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgSGFuZGxlIEMgcHJvZ3JhbXMuCitzdWIgaGFuZGxlX3Byb2dyYW1zCit7CisgIG15IEBwcm9nbGlzdCA9ICZhbV9pbnN0YWxsX3ZhciAoJ3Byb2dzJywgJ1BST0dSQU1TJywKKwkJCQkgICdiaW4nLCAnc2JpbicsICdsaWJleGVjJywgJ3BrZ2xpYicsCisJCQkJICAnbm9pbnN0JywgJ2NoZWNrJyk7CisgIHJldHVybiBpZiAhIEBwcm9nbGlzdDsKKworICBteSAkc2Vlbl9nbG9iYWxfbGlib2JqcyA9CisgICAgdmFyICgnTERBREQnKSAmJiAmaGFuZGxlX2xpYl9vYmplY3RzICgnJywgJ0xEQUREJyk7CisKKyAgZm9yZWFjaCBteSAkcGFpciAoQHByb2dsaXN0KQorICAgIHsKKyAgICAgIG15ICgkd2hlcmUsICRvbmVfZmlsZSkgPSBAJHBhaXI7CisKKyAgICAgIG15ICRzZWVuX2xpYm9ianMgPSAwOworICAgICAgbXkgJG9iaiA9IGdldF9vYmplY3RfZXh0ZW5zaW9uICcuJChPQkpFWFQpJzsKKworICAgICAgJGtub3duX3Byb2dyYW1zeyRvbmVfZmlsZX0gPSAkd2hlcmU7CisKKyAgICAgICMgQ2Fub25pY2FsaXplIG5hbWVzIGFuZCBjaGVjayBmb3IgbWlzc3BlbGxpbmdzLgorICAgICAgbXkgJHhuYW1lID0gJmNoZWNrX2Nhbm9uaWNhbF9zcGVsbGluZyAoJG9uZV9maWxlLCAnX0xEQUREJywgJ19MREZMQUdTJywKKwkJCQkJICAgICAnX1NPVVJDRVMnLCAnX09CSkVDVFMnLAorCQkJCQkgICAgICdfREVQRU5ERU5DSUVTJyk7CisKKyAgICAgICR3aGVyZS0+cHVzaF9jb250ZXh0ICgid2hpbGUgcHJvY2Vzc2luZyBwcm9ncmFtIGAkb25lX2ZpbGUnIik7CisgICAgICAkd2hlcmUtPnNldCAoSU5URVJOQUwtPmdldCk7CisKKyAgICAgIG15ICRsaW5rZXIgPSAmaGFuZGxlX3NvdXJjZV90cmFuc2Zvcm0gKCR4bmFtZSwgJG9uZV9maWxlLCAkb2JqLCAkd2hlcmUsCisJCQkJCSAgICAgTk9OTElCVE9PTCA9PiAxLCBMSUJUT09MID0+IDApOworCisgICAgICBpZiAodmFyICgkeG5hbWUgLiAiX0xEQUREIikpCisJeworCSAgJHNlZW5fbGlib2JqcyA9ICZoYW5kbGVfbGliX29iamVjdHMgKCR4bmFtZSwgJHhuYW1lIC4gJ19MREFERCcpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAjIFVzZXIgZGlkbid0IGRlZmluZSBwcm9nX0xEQUREIG92ZXJyaWRlLiAgU28gZG8gaXQuCisJICAmZGVmaW5lX3ZhcmlhYmxlICgkeG5hbWUgLiAnX0xEQUREJywgJyQoTERBREQpJywgJHdoZXJlKTsKKworCSAgIyBUaGlzIGRvZXMgYSBiaXQgdG9vIG11Y2ggd29yay4gIEJ1dCB3ZSBuZWVkIGl0IHRvCisJICAjIGdlbmVyYXRlIF9ERVBFTkRFTkNJRVMgd2hlbiBhcHByb3ByaWF0ZS4KKwkgIGlmICh2YXIgKCdMREFERCcpKQorCSAgICB7CisJICAgICAgJHNlZW5fbGlib2JqcyA9ICZoYW5kbGVfbGliX29iamVjdHMgKCR4bmFtZSwgJ0xEQUREJyk7CisJICAgIH0KKwl9CisKKyAgICAgIHJlamVjdF92YXIgKCR4bmFtZSAuICdfTElCQUREJywKKwkJICAidXNlIGAke3huYW1lfV9MREFERCcsIG5vdCBgJHt4bmFtZX1fTElCQUREJyIpOworCisgICAgICBzZXRfc2VlbiAoJHhuYW1lIC4gJ19ERVBFTkRFTkNJRVMnKTsKKyAgICAgIHNldF9zZWVuICgkeG5hbWUgLiAnX0xERkxBR1MnKTsKKworICAgICAgIyBEZXRlcm1pbmUgcHJvZ3JhbSB0byB1c2UgZm9yIGxpbmsuCisgICAgICBteSgkeGxpbmssICR2bGluaykgPSAmZGVmaW5lX3Blcl90YXJnZXRfbGlua2VyX3ZhcmlhYmxlICgkbGlua2VyLCAkeG5hbWUpOworICAgICAgJHZsaW5rID0gdmVyYm9zZV9mbGFnICgkdmxpbmsgfHwgJ0dFTicpOworCisgICAgICAjIElmIHRoZSByZXN1bHRpbmcgcHJvZ3JhbSBsaWVzIGludG8gYSBzdWJkaXJlY3RvcnksCisgICAgICAjIG1ha2Ugc3VyZSB0aGlzIGRpcmVjdG9yeSB3aWxsIGV4aXN0LgorICAgICAgbXkgJGRpcnN0YW1wID0gcmVxdWlyZV9idWlsZF9kaXJlY3RvcnlfbWF5YmUgKCRvbmVfZmlsZSk7CisKKyAgICAgICRsaWJ0b29sX2NsZWFuX2RpcmVjdG9yaWVze2Rpcm5hbWUgKCRvbmVfZmlsZSl9ID0gMTsKKworICAgICAgJG91dHB1dF9ydWxlcyAuPSAmZmlsZV9jb250ZW50cyAoJ3Byb2dyYW0nLAorCQkJCSAgICAgICAkd2hlcmUsCisJCQkJICAgICAgIFBST0dSQU0gID0+ICRvbmVfZmlsZSwKKwkJCQkgICAgICAgWFBST0dSQU0gPT4gJHhuYW1lLAorCQkJCSAgICAgICBYTElOSyAgICA9PiAkeGxpbmssCisJCQkJICAgICAgIFZFUkJPU0UgID0+ICR2bGluaywKKwkJCQkgICAgICAgRElSU1RBTVAgPT4gJGRpcnN0YW1wLAorCQkJCSAgICAgICBFWEVFWFQgICA9PiAnJChFWEVFWFQpJyk7CisKKyAgICAgIGlmICgkc2Vlbl9saWJvYmpzIHx8ICRzZWVuX2dsb2JhbF9saWJvYmpzKQorCXsKKwkgIGlmICh2YXIgKCR4bmFtZSAuICdfTERBREQnKSkKKwkgICAgeworCSAgICAgICZjaGVja19saWJvYmpzX3NvdXJjZXMgKCR4bmFtZSwgJHhuYW1lIC4gJ19MREFERCcpOworCSAgICB9CisJICBlbHNpZiAodmFyICgnTERBREQnKSkKKwkgICAgeworCSAgICAgICZjaGVja19saWJvYmpzX3NvdXJjZXMgKCR4bmFtZSwgJ0xEQUREJyk7CisJICAgIH0KKwl9CisgICAgfQorfQorCisKKyMgaGFuZGxlX2xpYnJhcmllcyAoKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIEhhbmRsZSBsaWJyYXJpZXMuCitzdWIgaGFuZGxlX2xpYnJhcmllcworeworICBteSBAbGlibGlzdCA9ICZhbV9pbnN0YWxsX3ZhciAoJ2xpYnMnLCAnTElCUkFSSUVTJywKKwkJCQkgJ2xpYicsICdwa2dsaWInLCAnbm9pbnN0JywgJ2NoZWNrJyk7CisgIHJldHVybiBpZiAhIEBsaWJsaXN0OworCisgIG15IEBwcmVmaXggPSBhbV9wcmltYXJ5X3ByZWZpeGVzICgnTElCUkFSSUVTJywgMCwgJ2xpYicsICdwa2dsaWInLAorCQkJCSAgICAnbm9pbnN0JywgJ2NoZWNrJyk7CisKKyAgaWYgKEBwcmVmaXgpCisgICAgeworICAgICAgbXkgJHZhciA9IHJ2YXIgKCRwcmVmaXhbMF0gLiAnX0xJQlJBUklFUycpOworICAgICAgJHZhci0+cmVxdWlyZXNfdmFyaWFibGVzICgnbGlicmFyeSB1c2VkJywgJ1JBTkxJQicpOworICAgIH0KKworICAmZGVmaW5lX3ZhcmlhYmxlICgnQVInLCAnYXInLCBJTlRFUk5BTCk7CisgICZkZWZpbmVfdmFyaWFibGUgKCdBUkZMQUdTJywgJ2NydScsIElOVEVSTkFMKTsKKyAgJmRlZmluZV92ZXJib3NlX3RhZ3ZhciAoJ0FSJyk7CisKKyAgZm9yZWFjaCBteSAkcGFpciAoQGxpYmxpc3QpCisgICAgeworICAgICAgbXkgKCR3aGVyZSwgJG9uZWxpYikgPSBAJHBhaXI7CisKKyAgICAgIG15ICRzZWVuX2xpYm9ianMgPSAwOworICAgICAgIyBDaGVjayB0aGF0IHRoZSBsaWJyYXJ5IGZpdHMgdGhlIHN0YW5kYXJkIG5hbWluZyBjb252ZW50aW9uLgorICAgICAgbXkgJGJuID0gYmFzZW5hbWUgKCRvbmVsaWIpOworICAgICAgaWYgKCRibiAhfiAvXmxpYi4qXC5hJC8pCisJeworCSAgJGJuID1+IHMvXig/OmxpYik/KC4qPykoPzpcLlteLl0qKT8kL2xpYiQxLmEvOworCSAgbXkgJHN1Z2dlc3Rpb24gPSBkaXJuYW1lICgkb25lbGliKSAuICIvJGJuIjsKKwkgICRzdWdnZXN0aW9uID1+IHN8XlwuL3x8ZzsKKwkgIG1zZyAoJ2Vycm9yLWdudS93YXJuJywgJHdoZXJlLAorCSAgICAgICAiYCRvbmVsaWInIGlzIG5vdCBhIHN0YW5kYXJkIGxpYnJhcnkgbmFtZVxuIgorCSAgICAgICAuICJkaWQgeW91IG1lYW4gYCRzdWdnZXN0aW9uJz8iKQorCX0KKworICAgICAgKCRrbm93bl9saWJyYXJpZXN7JG9uZWxpYn0gPSAkYm4pID1+IHMvXC5hJC8vOworCisgICAgICAkd2hlcmUtPnB1c2hfY29udGV4dCAoIndoaWxlIHByb2Nlc3NpbmcgbGlicmFyeSBgJG9uZWxpYiciKTsKKyAgICAgICR3aGVyZS0+c2V0IChJTlRFUk5BTC0+Z2V0KTsKKworICAgICAgbXkgJG9iaiA9IGdldF9vYmplY3RfZXh0ZW5zaW9uICcuJChPQkpFWFQpJzsKKworICAgICAgIyBDYW5vbmljYWxpemUgbmFtZXMgYW5kIGNoZWNrIGZvciBtaXNzcGVsbGluZ3MuCisgICAgICBteSAkeGxpYiA9ICZjaGVja19jYW5vbmljYWxfc3BlbGxpbmcgKCRvbmVsaWIsICdfTElCQUREJywgJ19TT1VSQ0VTJywKKwkJCQkJICAgICdfT0JKRUNUUycsICdfREVQRU5ERU5DSUVTJywKKwkJCQkJICAgICdfQVInKTsKKworICAgICAgaWYgKCEgdmFyICgkeGxpYiAuICdfQVInKSkKKwl7CisJICAmZGVmaW5lX3ZhcmlhYmxlICgkeGxpYiAuICdfQVInLCAnJChBUikgJChBUkZMQUdTKScsICR3aGVyZSk7CisJfQorCisgICAgICAjIEdlbmVyYXRlIHN1cHBvcnQgZm9yIGNvbmRpdGlvbmFsIG9iamVjdCBpbmNsdXNpb24gaW4KKyAgICAgICMgbGlicmFyaWVzLgorICAgICAgaWYgKHZhciAoJHhsaWIgLiAnX0xJQkFERCcpKQorCXsKKwkgIGlmICgmaGFuZGxlX2xpYl9vYmplY3RzICgkeGxpYiwgJHhsaWIgLiAnX0xJQkFERCcpKQorCSAgICB7CisJICAgICAgJHNlZW5fbGlib2JqcyA9IDE7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgJmRlZmluZV92YXJpYWJsZSAoJHhsaWIgLiAiX0xJQkFERCIsICcnLCAkd2hlcmUpOworCX0KKworICAgICAgcmVqZWN0X3ZhciAoJHhsaWIgLiAnX0xEQUREJywKKwkJICAidXNlIGAke3hsaWJ9X0xJQkFERCcsIG5vdCBgJHt4bGlifV9MREFERCciKTsKKworICAgICAgIyBNYWtlIHN1cmUgd2UgYXQgbG9vayBhdCB0aGlzLgorICAgICAgc2V0X3NlZW4gKCR4bGliIC4gJ19ERVBFTkRFTkNJRVMnKTsKKworICAgICAgJmhhbmRsZV9zb3VyY2VfdHJhbnNmb3JtICgkeGxpYiwgJG9uZWxpYiwgJG9iaiwgJHdoZXJlLAorCQkJCU5PTkxJQlRPT0wgPT4gMSwgTElCVE9PTCA9PiAwKTsKKworICAgICAgIyBJZiB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgbGllcyBpbnRvIGEgc3ViZGlyZWN0b3J5LAorICAgICAgIyBtYWtlIHN1cmUgdGhpcyBkaXJlY3Rvcnkgd2lsbCBleGlzdC4KKyAgICAgIG15ICRkaXJzdGFtcCA9IHJlcXVpcmVfYnVpbGRfZGlyZWN0b3J5X21heWJlICgkb25lbGliKTsKKyAgICAgIG15ICR2ZXJib3NlID0gdmVyYm9zZV9mbGFnICgnQVInKTsKKyAgICAgIG15ICRzaWxlbnQgPSBzaWxlbnRfZmxhZyAoKTsKKworICAgICAgJG91dHB1dF9ydWxlcyAuPSAmZmlsZV9jb250ZW50cyAoJ2xpYnJhcnknLAorCQkJCSAgICAgICAkd2hlcmUsCisJCQkJICAgICAgIFZFUkJPU0UgID0+ICR2ZXJib3NlLAorCQkJCSAgICAgICBTSUxFTlQgICA9PiAkc2lsZW50LAorCQkJCSAgICAgICBMSUJSQVJZICA9PiAkb25lbGliLAorCQkJCSAgICAgICBYTElCUkFSWSA9PiAkeGxpYiwKKwkJCQkgICAgICAgRElSU1RBTVAgPT4gJGRpcnN0YW1wKTsKKworICAgICAgaWYgKCRzZWVuX2xpYm9ianMpCisJeworCSAgaWYgKHZhciAoJHhsaWIgLiAnX0xJQkFERCcpKQorCSAgICB7CisJICAgICAgJmNoZWNrX2xpYm9ianNfc291cmNlcyAoJHhsaWIsICR4bGliIC4gJ19MSUJBREQnKTsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKKworIyBoYW5kbGVfbHRsaWJyYXJpZXMgKCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEhhbmRsZSBzaGFyZWQgbGlicmFyaWVzLgorc3ViIGhhbmRsZV9sdGxpYnJhcmllcworeworICBteSBAbGlibGlzdCA9ICZhbV9pbnN0YWxsX3ZhciAoJ2x0bGliJywgJ0xUTElCUkFSSUVTJywKKwkJCQkgJ25vaW5zdCcsICdsaWInLCAncGtnbGliJywgJ2NoZWNrJyk7CisgIHJldHVybiBpZiAhIEBsaWJsaXN0OworCisgIG15IEBwcmVmaXggPSBhbV9wcmltYXJ5X3ByZWZpeGVzICgnTFRMSUJSQVJJRVMnLCAwLCAnbGliJywgJ3BrZ2xpYicsCisJCQkJICAgICdub2luc3QnLCAnY2hlY2snKTsKKworICBpZiAoQHByZWZpeCkKKyAgICB7CisgICAgICBteSAkdmFyID0gcnZhciAoJHByZWZpeFswXSAuICdfTFRMSUJSQVJJRVMnKTsKKyAgICAgICR2YXItPnJlcXVpcmVzX3ZhcmlhYmxlcyAoJ0xpYnRvb2wgbGlicmFyeSB1c2VkJywgJ0xJQlRPT0wnKTsKKyAgICB9CisKKyAgbXkgJWluc3RkaXJzID0gKCk7CisgIG15ICVpbnN0c3ViZGlycyA9ICgpOworICBteSAlaW5zdGNvbmRzID0gKCk7CisgIG15ICVsaWJsb2NhdGlvbnMgPSAoKTsJIyBMb2NhdGlvbiAoaW4gTWFrZWZpbGUuYW0pIG9mIGVhY2ggbGlicmFyeS4KKworICBmb3JlYWNoIG15ICRrZXkgKEBwcmVmaXgpCisgICAgeworICAgICAgIyBHZXQgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3Rvcnkgb2YgZWFjaCBsaWJyYXJ5LgorICAgICAgbXkgJGRpciA9ICRrZXk7CisgICAgICBteSAkc3RyaXBfc3ViZGlyID0gMTsKKyAgICAgIGlmICgkZGlyID1+IC9ebm9iYXNlXy8pCisgICAgICAgIHsKKwkgICRkaXIgPX4gcy9ebm9iYXNlXy8vOworCSAgJHN0cmlwX3N1YmRpciA9IDA7CisJfQorICAgICAgbXkgJHZhciA9IHJ2YXIgKCRrZXkgLiAnX0xUTElCUkFSSUVTJyk7CisKKyAgICAgICMgV2UgcmVqZWN0IGxpYnJhcmllcyB3aGljaCBhcmUgaW5zdGFsbGVkIGluIHNldmVyYWwgcGxhY2VzCisgICAgICAjIGluIHRoZSBzYW1lIGNvbmRpdGlvbiwgYmVjYXVzZSB3ZSBjYW4gb25seSBzcGVjaWZ5IG9uZQorICAgICAgIyBgLXJwYXRoJyBvcHRpb24uCisgICAgICAkdmFyLT50cmF2ZXJzZV9yZWN1cnNpdmVseQorCShzdWIKKwkgeworCSAgIG15ICgkdmFyLCAkdmFsLCAkY29uZCwgJGZ1bGxfY29uZCkgPSBAXzsKKwkgICBteSAkaGNvbmQgPSAkZnVsbF9jb25kLT5odW1hbjsKKwkgICBteSAkd2hlcmUgPSAkdmFyLT5yZGVmICgkY29uZCktPmxvY2F0aW9uOworCSAgIG15ICRsZGlyID0gJyc7CisJICAgJGxkaXIgPSAnLycgLiBkaXJuYW1lICgkdmFsKQorCSAgICAgaWYgKCEkc3RyaXBfc3ViZGlyKTsKKwkgICAjIEEgbGlicmFyeSBjYW5ub3QgYmUgaW5zdGFsbGVkIGluIGRpZmZlcmVudCBkaXJlY3RvcmllcworCSAgICMgaW4gb3ZlcmxhcHBpbmcgY29uZGl0aW9ucy4KKwkgICBpZiAoZXhpc3RzICRpbnN0Y29uZHN7JHZhbH0pCisJICAgICB7CisJICAgICAgIG15ICgkbXNnLCAkYWNvbmQpID0KKwkJICRpbnN0Y29uZHN7JHZhbH0tPmFtYmlndW91c19wICgkdmFsLCAkZnVsbF9jb25kKTsKKworCSAgICAgICBpZiAoJG1zZykKKwkJIHsKKwkJICAgZXJyb3IgKCR3aGVyZSwgJG1zZywgcGFydGlhbCA9PiAxKTsKKwkJICAgbXkgJGRpcnR4dCA9ICJpbnN0YWxsZWQgIiAuICgkc3RyaXBfc3ViZGlyID8gImluIiA6ICJiZWxvdyIpIC4gIiBgJGRpciciOworCQkgICAkZGlydHh0ID0gImJ1aWx0IGZvciBgJGRpciciCisJCSAgICAgaWYgJGRpciBlcSAnRVhUUkEnIHx8ICRkaXIgZXEgJ25vaW5zdCcgfHwgJGRpciBlcSAnY2hlY2snOworCQkgICBteSAkZGlyY29uZCA9CisJCSAgICAgJGZ1bGxfY29uZC0+dHJ1ZSA/ICIiIDogIiBpbiBjb25kaXRpb24gJGhjb25kIjsKKworCQkgICBlcnJvciAoJHdoZXJlLCAiYCR2YWwnIHNob3VsZCBiZSAkZGlydHh0JGRpcmNvbmQgLi4uIiwKKwkJCSAgcGFydGlhbCA9PiAxKTsKKworCQkgICBteSAkaGFjb25kID0gJGFjb25kLT5odW1hbjsKKwkJICAgbXkgJGFkaXIgPSAkaW5zdGRpcnN7JHZhbH17JGFjb25kfTsKKwkJICAgbXkgJGFkaXJ0eHQgPSAiaW5zdGFsbGVkIGluIGAkYWRpciciOworCQkgICAkYWRpcnR4dCA9ICJidWlsdCBmb3IgYCRhZGlyJyIKKwkJICAgICBpZiAoJGFkaXIgZXEgJ0VYVFJBJyB8fCAkYWRpciBlcSAnbm9pbnN0JworCQkJIHx8ICRhZGlyIGVxICdjaGVjaycpOworCQkgICBteSAkYWRpcmNvbmQgPSAkYWNvbmQtPnRydWUgPyAiIiA6ICIgaW4gY29uZGl0aW9uICRoYWNvbmQiOworCisJCSAgIG15ICRvbmx5b25lID0gKCRkaXIgbmUgJGFkaXIpID8KKwkJICAgICAoIlxuTGlidG9vbCBsaWJyYXJpZXMgY2FuIGJlIGJ1aWx0IGZvciBvbmx5IG9uZSAiCisJCSAgICAgIC4gImRlc3RpbmF0aW9uLiIpIDogIiI7CisKKwkJICAgZXJyb3IgKCRsaWJsb2NhdGlvbnN7JHZhbH17JGFjb25kfSwKKwkJCSAgIi4uLiBhbmQgc2hvdWxkIGFsc28gYmUgJGFkaXJ0eHQkYWRpcmNvbmQuJG9ubHlvbmUiKTsKKwkJICAgcmV0dXJuOworCQkgfQorCSAgICAgfQorCSAgIGVsc2UKKwkgICAgIHsKKwkgICAgICAgJGluc3Rjb25kc3skdmFsfSA9IG5ldyBBdXRvbWFrZTo6RGlzakNvbmRpdGlvbnM7CisJICAgICB9CisJICAgJGluc3RkaXJzeyR2YWx9eyRmdWxsX2NvbmR9ID0gJGRpcjsKKwkgICAkaW5zdHN1YmRpcnN7JHZhbH17JGZ1bGxfY29uZH0gPSAkbGRpcjsKKwkgICAkbGlibG9jYXRpb25zeyR2YWx9eyRmdWxsX2NvbmR9ID0gJHdoZXJlOworCSAgICRpbnN0Y29uZHN7JHZhbH0gPSAkaW5zdGNvbmRzeyR2YWx9LT5tZXJnZSAoJGZ1bGxfY29uZCk7CisJIH0sCisJIHN1YgorCSB7CisJICAgcmV0dXJuICgpOworCSB9LAorCSBza2lwX2FjX3N1YnN0ID0+IDEpOworICAgIH0KKworICBmb3JlYWNoIG15ICRwYWlyIChAbGlibGlzdCkKKyAgICB7CisgICAgICBteSAoJHdoZXJlLCAkb25lbGliKSA9IEAkcGFpcjsKKworICAgICAgbXkgJHNlZW5fbGlib2JqcyA9IDA7CisgICAgICBteSAkb2JqID0gZ2V0X29iamVjdF9leHRlbnNpb24gJy5sbyc7CisKKyAgICAgICMgQ2Fub25pY2FsaXplIG5hbWVzIGFuZCBjaGVjayBmb3IgbWlzc3BlbGxpbmdzLgorICAgICAgbXkgJHhsaWIgPSAmY2hlY2tfY2Fub25pY2FsX3NwZWxsaW5nICgkb25lbGliLCAnX0xJQkFERCcsICdfTERGTEFHUycsCisJCQkJCSAgICAnX1NPVVJDRVMnLCAnX09CSkVDVFMnLAorCQkJCQkgICAgJ19ERVBFTkRFTkNJRVMnKTsKKworICAgICAgIyBDaGVjayB0aGF0IHRoZSBsaWJyYXJ5IGZpdHMgdGhlIHN0YW5kYXJkIG5hbWluZyBjb252ZW50aW9uLgorICAgICAgbXkgJGxpYm5hbWVfcnggPSAnXmxpYi4qXC5sYSc7CisgICAgICBteSAkbGR2YXIgPSB2YXIgKCIke3hsaWJ9X0xERkxBR1MiKSB8fCB2YXIgKCdBTV9MREZMQUdTJyk7CisgICAgICBteSAkbGR2YXIyID0gdmFyICgnTERGTEFHUycpOworICAgICAgaWYgKCgkbGR2YXIgJiYgZ3JlcCAoLy1tb2R1bGUvLCAkbGR2YXItPnZhbHVlX2FzX2xpc3RfcmVjdXJzaXZlKSkKKwkgIHx8ICgkbGR2YXIyICYmIGdyZXAgKC8tbW9kdWxlLywgJGxkdmFyMi0+dmFsdWVfYXNfbGlzdF9yZWN1cnNpdmUpKSkKKwl7CisJICAjIFJlbGF4IG5hbWUgY2hlY2tpbmcgZm9yIGxpYnRvb2wgbW9kdWxlcy4KKwkgICRsaWJuYW1lX3J4ID0gJ1wubGEnOworCX0KKworICAgICAgbXkgJGJuID0gYmFzZW5hbWUgKCRvbmVsaWIpOworICAgICAgaWYgKCRibiAhfiAvJGxpYm5hbWVfcngkLykKKwl7CisJICBteSAkdHlwZSA9ICdsaWJyYXJ5JzsKKwkgIGlmICgkbGlibmFtZV9yeCBlcSAnXC5sYScpCisJICAgIHsKKwkgICAgICAkYm4gPX4gcy9eKGxpYnwpKC4qPykoPzpcLlteLl0qKT8kLyQxJDIubGEvOworCSAgICAgICR0eXBlID0gJ21vZHVsZSc7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgICRibiA9fiBzL14oPzpsaWIpPyguKj8pKD86XC5bXi5dKik/JC9saWIkMS5sYS87CisJICAgIH0KKwkgIG15ICRzdWdnZXN0aW9uID0gZGlybmFtZSAoJG9uZWxpYikgLiAiLyRibiI7CisJICAkc3VnZ2VzdGlvbiA9fiBzfF5cLi98fGc7CisJICBtc2cgKCdlcnJvci1nbnUvd2FybicsICR3aGVyZSwKKwkgICAgICAgImAkb25lbGliJyBpcyBub3QgYSBzdGFuZGFyZCBsaWJ0b29sICR0eXBlIG5hbWVcbiIKKwkgICAgICAgLiAiZGlkIHlvdSBtZWFuIGAkc3VnZ2VzdGlvbic/IikKKwl9CisKKyAgICAgICgka25vd25fbGlicmFyaWVzeyRvbmVsaWJ9ID0gJGJuKSA9fiBzL1wubGEkLy87CisKKyAgICAgICR3aGVyZS0+cHVzaF9jb250ZXh0ICgid2hpbGUgcHJvY2Vzc2luZyBMaWJ0b29sIGxpYnJhcnkgYCRvbmVsaWInIik7CisgICAgICAkd2hlcmUtPnNldCAoSU5URVJOQUwtPmdldCk7CisKKyAgICAgICMgTWFrZSBzdXJlIHdlIGxvb2sgYXQgdGhlc2UuCisgICAgICBzZXRfc2VlbiAoJHhsaWIgLiAnX0xERkxBR1MnKTsKKyAgICAgIHNldF9zZWVuICgkeGxpYiAuICdfREVQRU5ERU5DSUVTJyk7CisKKyAgICAgICMgR2VuZXJhdGUgc3VwcG9ydCBmb3IgY29uZGl0aW9uYWwgb2JqZWN0IGluY2x1c2lvbiBpbgorICAgICAgIyBsaWJyYXJpZXMuCisgICAgICBpZiAodmFyICgkeGxpYiAuICdfTElCQUREJykpCisJeworCSAgaWYgKCZoYW5kbGVfbGliX29iamVjdHMgKCR4bGliLCAkeGxpYiAuICdfTElCQUREJykpCisJICAgIHsKKwkgICAgICAkc2Vlbl9saWJvYmpzID0gMTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICAmZGVmaW5lX3ZhcmlhYmxlICgkeGxpYiAuICJfTElCQUREIiwgJycsICR3aGVyZSk7CisJfQorCisgICAgICByZWplY3RfdmFyICgiJHt4bGlifV9MREFERCIsCisJCSAgInVzZSBgJHt4bGlifV9MSUJBREQnLCBub3QgYCR7eGxpYn1fTERBREQnIik7CisKKworICAgICAgbXkgJGxpbmtlciA9ICZoYW5kbGVfc291cmNlX3RyYW5zZm9ybSAoJHhsaWIsICRvbmVsaWIsICRvYmosICR3aGVyZSwKKwkJCQkJICAgICBOT05MSUJUT09MID0+IDAsIExJQlRPT0wgPT4gMSk7CisKKyAgICAgICMgRGV0ZXJtaW5lIHByb2dyYW0gdG8gdXNlIGZvciBsaW5rLgorICAgICAgbXkoJHhsaW5rLCAkdmxpbmspID0gJmRlZmluZV9wZXJfdGFyZ2V0X2xpbmtlcl92YXJpYWJsZSAoJGxpbmtlciwgJHhsaWIpOworICAgICAgJHZsaW5rID0gdmVyYm9zZV9mbGFnICgkdmxpbmsgfHwgJ0dFTicpOworCisgICAgICBteSAkcnBhdGh2YXIgPSAiYW1fJHt4bGlifV9ycGF0aCI7CisgICAgICBteSAkcnBhdGggPSAiXCQoJHJwYXRodmFyKSI7CisgICAgICBmb3JlYWNoIG15ICRyY29uZCAoJGluc3Rjb25kc3skb25lbGlifS0+Y29uZHMpCisJeworCSAgbXkgJHZhbDsKKwkgIGlmICgkaW5zdGRpcnN7JG9uZWxpYn17JHJjb25kfSBlcSAnRVhUUkEnCisJICAgICAgfHwgJGluc3RkaXJzeyRvbmVsaWJ9eyRyY29uZH0gZXEgJ25vaW5zdCcKKwkgICAgICB8fCAkaW5zdGRpcnN7JG9uZWxpYn17JHJjb25kfSBlcSAnY2hlY2snKQorCSAgICB7CisJICAgICAgIyBJdCdzIGFuIEVYVFJBXyBsaWJyYXJ5LCBzbyB3ZSBjYW4ndCBzcGVjaWZ5IC1ycGF0aCwKKwkgICAgICAjIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGVyZSB0aGUgbGlicmFyeSB3aWxsIGVuZCB1cC4KKwkgICAgICAjIFRoZSB1c2VyIHByb2JhYmx5IGtub3dzLCBidXQgZ2VuZXJhbGx5IHNwZWFraW5nIGF1dG9tYWtlCisJICAgICAgIyBkb2Vzbid0IC0tIGFuZCBpbiBmYWN0IGNvbmZpZ3VyZSBjb3VsZCBkZWNpZGUKKwkgICAgICAjIGR5bmFtaWNhbGx5IGJldHdlZW4gdHdvIGRpZmZlcmVudCBsb2NhdGlvbnMuCisJICAgICAgJHZhbCA9ICcnOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAkdmFsID0gKCctcnBhdGggJCgnIC4gJGluc3RkaXJzeyRvbmVsaWJ9eyRyY29uZH0gLiAnZGlyKScpOworCSAgICAgICR2YWwgLj0gJGluc3RzdWJkaXJzeyRvbmVsaWJ9eyRyY29uZH0KKwkgICAgICAgIGlmIGRlZmluZWQgJGluc3RzdWJkaXJzeyRvbmVsaWJ9eyRyY29uZH07CisJICAgIH0KKwkgIGlmICgkcmNvbmQtPnRydWUpCisJICAgIHsKKwkgICAgICAjIElmICRyY29uZCBpcyB0cnVlIHRoZXJlIGlzIG9ubHkgb25lIGNvbmRpdGlvbiBhbmQKKwkgICAgICAjIHRoZXJlIGlzIG5vIHBvaW50IGRlZmluaW5nIGFuIGhlbHBlciB2YXJpYWJsZS4KKwkgICAgICAkcnBhdGggPSAkdmFsOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBkZWZpbmVfcHJldHR5X3ZhcmlhYmxlICgkcnBhdGh2YXIsICRyY29uZCwgSU5URVJOQUwsICR2YWwpOworCSAgICB9CisJfQorCisgICAgICAjIElmIHRoZSByZXN1bHRpbmcgbGlicmFyeSBsaWVzIGludG8gYSBzdWJkaXJlY3RvcnksCisgICAgICAjIG1ha2Ugc3VyZSB0aGlzIGRpcmVjdG9yeSB3aWxsIGV4aXN0LgorICAgICAgbXkgJGRpcnN0YW1wID0gcmVxdWlyZV9idWlsZF9kaXJlY3RvcnlfbWF5YmUgKCRvbmVsaWIpOworCisgICAgICAjIFJlbWVtYmVyIHRvIGNsZWFudXAgLmxpYnMvIGluIHRoaXMgZGlyZWN0b3J5LgorICAgICAgbXkgJGRpcm5hbWUgPSBkaXJuYW1lICRvbmVsaWI7CisgICAgICAkbGlidG9vbF9jbGVhbl9kaXJlY3Rvcmllc3skZGlybmFtZX0gPSAxOworCisgICAgICAkb3V0cHV0X3J1bGVzIC49ICZmaWxlX2NvbnRlbnRzICgnbHRsaWJyYXJ5JywKKwkJCQkgICAgICAgJHdoZXJlLAorCQkJCSAgICAgICBMVExJQlJBUlkgID0+ICRvbmVsaWIsCisJCQkJICAgICAgIFhMVExJQlJBUlkgPT4gJHhsaWIsCisJCQkJICAgICAgIFJQQVRIICAgICAgPT4gJHJwYXRoLAorCQkJCSAgICAgICBYTElOSyAgICAgID0+ICR4bGluaywKKwkJCQkgICAgICAgVkVSQk9TRSAgICA9PiAkdmxpbmssCisJCQkJICAgICAgIERJUlNUQU1QICAgPT4gJGRpcnN0YW1wKTsKKyAgICAgIGlmICgkc2Vlbl9saWJvYmpzKQorCXsKKwkgIGlmICh2YXIgKCR4bGliIC4gJ19MSUJBREQnKSkKKwkgICAgeworCSAgICAgICZjaGVja19saWJvYmpzX3NvdXJjZXMgKCR4bGliLCAkeGxpYiAuICdfTElCQUREJyk7CisJICAgIH0KKwl9CisgICAgfQorfQorCisjIFNlZSBpZiBhbnkgX1NPVVJDRVMgdmFyaWFibGUgd2VyZSBtaXNzcGVsbGVkLgorc3ViIGNoZWNrX3R5cG9zICgpCit7CisgICMgSXQgaXMgb2sgaWYgdGhlIHVzZXIgc2V0cyB0aGlzIHBhcnRpY3VsYXIgdmFyaWFibGUuCisgIHNldF9zZWVuICdBTV9MREZMQUdTJzsKKworICBmb3JlYWNoIG15ICRwcmltYXJ5ICgnU09VUkNFUycsICdMSUJBREQnLCAnTERBREQnLCAnTERGTEFHUycsICdERVBFTkRFTkNJRVMnKQorICAgIHsKKyAgICAgIGZvcmVhY2ggbXkgJHZhciAodmFyaWFibGVzICRwcmltYXJ5KQorCXsKKwkgIG15ICR2YXJuYW1lID0gJHZhci0+bmFtZTsKKwkgICMgQSBjb25maWd1cmUgdmFyaWFibGUgaXMgYWx3YXlzIGxlZ2l0aW1hdGUuCisJICBuZXh0IGlmIGV4aXN0cyAkY29uZmlndXJlX3ZhcnN7JHZhcm5hbWV9OworCisJICBmb3IgbXkgJGNvbmQgKCR2YXItPmNvbmRpdGlvbnMtPmNvbmRzKQorCSAgICB7CisJICAgICAgJHZhcm5hbWUgPX4gL14oPzpub2Jhc2VfKT8oPzpkaXN0X3xub2Rpc3RfKT8oLiopX1tbOmFsbnVtOl1dKyQvOworCSAgICAgIG1zZ192YXIgKCdzeW50YXgnLCAkdmFyLCAidmFyaWFibGUgYCR2YXJuYW1lJyBpcyBkZWZpbmVkIGJ1dCBubyIKKwkJICAgICAgIC4gIiBwcm9ncmFtIG9yXG5saWJyYXJ5IGhhcyBgJDEnIGFzIGNhbm9uaWNhbCBuYW1lIgorCQkgICAgICAgLiAiIChwb3NzaWJsZSB0eXBvKSIpCisJCXVubGVzcyAkdmFyLT5yZGVmICgkY29uZCktPnNlZW47CisJICAgIH0KKwl9CisgICAgfQorfQorCisKKyMgSGFuZGxlIHNjcmlwdHMuCitzdWIgaGFuZGxlX3NjcmlwdHMKK3sKKyAgICAjIE5PVEUgd2Ugbm8gbG9uZ2VyIGF1dG9tYXRpY2FsbHkgY2xlYW4gU0NSSVBUUywgYmVjYXVzZSBpdCBpcworICAgICMgdXNlZnVsIHRvIHNvbWV0aW1lcyBkaXN0cmlidXRlIHNjcmlwdHMgdmVyYmF0aW0uICBUaGlzIGhhcHBlbnMKKyAgICAjIGUuZy4gaW4gQXV0b21ha2UgaXRzZWxmLgorICAgICZhbV9pbnN0YWxsX3ZhciAoJy1jYW5kaXN0JywgJ3NjcmlwdHMnLCAnU0NSSVBUUycsCisJCSAgICAgJ2JpbicsICdzYmluJywgJ2xpYmV4ZWMnLCAncGtnZGF0YScsCisJCSAgICAgJ25vaW5zdCcsICdjaGVjaycpOworfQorCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEhhbmRsaW5nIFRleGluZm8gZmlsZXMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgKCRPVVRGSUxFLCAkVkZJTEUsIEBDTEVBTl9GSUxFUykKKyMgJnNjYW5fdGV4aW5mb19maWxlICgkRklMRU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAkT1VURklMRSAgICAgLSBuYW1lIG9mIHRoZSBpbmZvIGZpbGUgcHJvZHVjZWQgYnkgJEZJTEVOQU1FLgorIyAkVkZJTEUgICAgICAgLSBuYW1lIG9mIHRoZSB2ZXJzaW9uLnRleGkgZmlsZSB1c2VkICh1bmRlZiBpZiBub25lKS4KKyMgQENMRUFOX0ZJTEVTIC0gbGlzdCBvZiBieXByb2R1Y3RzIChpbmRleGVzIGV0Yy4pCitzdWIgc2Nhbl90ZXhpbmZvX2ZpbGUgKCQpCit7CisgIG15ICgkZmlsZW5hbWUpID0gQF87CisKKyAgIyBTb21lIG9mIHRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9ucyBhcmUgYWx3YXlzIGNyZWF0ZWQsIG5vIG1hdHRlcgorICAjIHdoZXRoZXIgaW5kZXhlcyBhcmUgdXNlZCBvciBub3QuICBPdGhlciAobGlrZSBjcHMsIGZucywgLi4uIHBncykKKyAgIyBhcmUgb25seSBjcmVhdGVkIHdoZW4gdGhleSBhcmUgdXNlZC4gIFdlIHVzZWQgdG8gc2NhbiAkRklMRU5BTUUKKyAgIyBmb3IgdGhlaXIgdXNlLCBidXQgdGhhdCBpcyBub3QgZW5vdWdoOiB0aGV5IGNvdWxkIGJlIHVzZWQgaW4KKyAgIyBpbmNsdWRlZCBmaWxlcy4gIFdlIGNhbid0IHNjYW4gaW5jbHVkZWQgZmlsZXMgYmVjYXVzZSB3ZSBkb24ndAorICAjIGtub3cgdGhlIGluY2x1ZGUgcGF0aC4gIFRoZXJlZm9yZSB3ZSBhbHdheXMgZXJhc2UgdGhlc2UgZmlsZXMsIG5vCisgICMgbWF0dGVyIHdoZXRoZXIgdGhleSBhcmUgdXNlZCBvciBub3QuCisgICMKKyAgIyAodG1wIGlzIG9ubHkgY3JlYXRlZCBpZiBhbiBAbWFjcm8gaXMgdXNlZCBhbmQgYSBjZXJ0YWluIGUtVGVYCisgICMgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlLikKKyAgbXkgJWNsZWFuX3N1ZmZpeGVzID0KKyAgICBtYXAgeyAkXyA9PiAxIH0gKHF3KGF1eCBsb2cgdG9jIHRtcAorCQkJY3AgY3BzCisJCQlmbiBmbnMKKwkJCWt5IGt5cworCQkJdnIgdnJzCisJCQl0cCB0cHMKKwkJCXBnIHBncykpOyAjIGdyZXAgJ25ldy4qaW5kZXgnIHRleGluZm8udGV4CisKKyAgbXkgJHRleGkgPSBuZXcgQXV0b21ha2U6OlhGaWxlICI8ICRmaWxlbmFtZSI7CisgIHZlcmIgInJlYWRpbmcgJGZpbGVuYW1lIjsKKworICBteSAoJG91dGZpbGUsICR2ZmlsZSk7CisgIHdoaWxlICgkXyA9ICR0ZXhpLT5nZXRsaW5lKQorICAgIHsKKyAgICAgIGlmICgvXlxAc2V0ZmlsZW5hbWUgKyhcUyspLykKKwl7CisJICAjIEhvbm9yIG9ubHkgdGhlIGZpcnN0IEBzZXRmaWxlbmFtZS4gIChJdCdzIHBvc3NpYmxlIHRvIGhhdmUKKwkgICMgbW9yZSBvY2N1cnJlbmNlcyBsYXRlciBpZiB0aGUgbWFudWFsIHNob3dzIGV4YW1wbGVzIG9mIGhvdworCSAgIyB0byB1c2UgQHNldGZpbGVuYW1lLi4uKQorCSAgbmV4dCBpZiAkb3V0ZmlsZTsKKworCSAgJG91dGZpbGUgPSAkMTsKKwkgIGlmICgkb3V0ZmlsZSA9fiAvXC4oW14uXSspJC8gJiYgJDEgbmUgJ2luZm8nKQorCSAgICB7CisJICAgICAgZXJyb3IgKCIkZmlsZW5hbWU6JC4iLAorCQkgICAgICJvdXRwdXQgYCRvdXRmaWxlJyBoYXMgdW5yZWNvZ25pemVkIGV4dGVuc2lvbiIpOworCSAgICAgIHJldHVybjsKKwkgICAgfQorCX0KKyAgICAgICMgQSAidmVyc2lvbi50ZXhpIiBmaWxlIGlzIGFjdHVhbGx5IGFueSBmaWxlIHdob3NlIG5hbWUgbWF0Y2hlcworICAgICAgIyAidmVycyoudGV4aSIuCisgICAgICBlbHNpZiAoL15cQGluY2x1ZGVccysodmVyc1teLl0qXC50ZXhpKVxzKiQvKQorCXsKKwkgICR2ZmlsZSA9ICQxOworCX0KKworICAgICAgIyBUcnkgdG8gZmluZCBuZXcgb3IgdW51c2VkIGluZGV4ZXMuCisKKyAgICAgICMgQ3JlYXRpbmcgYSBuZXcgY2F0ZWdvcnkgb2YgaW5kZXguCisgICAgICBlbHNpZiAoL15cQGRlZihjb2RlKT9pbmRleCAoXHcrKS8pCisJeworCSAgJGNsZWFuX3N1ZmZpeGVzeyQyfSA9IDE7CisJICAkY2xlYW5fc3VmZml4ZXN7IiQycyJ9ID0gMTsKKwl9CisKKyAgICAgICMgTWVyZ2luZyBhbiBpbmRleCBpbnRvIGFuIGFub3RoZXIuCisgICAgICBlbHNpZiAoL15cQHN5bihjb2RlKT9pbmRleCAoXHcrKSAoXHcrKS8pCisJeworCSAgZGVsZXRlICRjbGVhbl9zdWZmaXhlc3siJDJzIn07CisJICAkY2xlYW5fc3VmZml4ZXN7IiQzcyJ9ID0gMTsKKwl9CisKKyAgICB9CisKKyAgaWYgKCEgJG91dGZpbGUpCisgICAgeworICAgICAgZXJyX2FtICJgJGZpbGVuYW1lJyBtaXNzaW5nIFxAc2V0ZmlsZW5hbWUiOworICAgICAgcmV0dXJuOworICAgIH0KKworICBteSAkaW5mb2Jhc2UgPSBiYXNlbmFtZSAoJGZpbGVuYW1lKTsKKyAgJGluZm9iYXNlID1+IHMvXC50ZT94aShuZm8pPyQvLzsKKyAgcmV0dXJuICgkb3V0ZmlsZSwgJHZmaWxlLAorCSAgbWFwIHsgIiRpbmZvYmFzZS4kXyIgfSAoc29ydCBrZXlzICVjbGVhbl9zdWZmaXhlcykpOworfQorCisKKyMgKCRESVJTVEFNUCwgQENMRUFOX0ZJTEVTKQorIyBvdXRwdXRfdGV4aW5mb19idWlsZF9ydWxlcyAoJFNPVVJDRSwgJERFU1QsICRJTlNSQywgQERFUEVOREVOQ0lFUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNPVVJDRSAtIHRoZSBzb3VyY2UgVGV4aW5mbyBmaWxlCisjIERFU1QgLSB0aGUgZGVzdGluYXRpb24gSW5mbyBmaWxlCisjIElOU1JDIC0gd2V0aGVyIERFU1Qgc2hvdWxkIGJlIGJ1aWx0IGluIHRoZSBzb3VyY2UgdHJlZQorIyBERVBFTkRFTkNJRVMgLSBrbm93biBkZXBlbmRlbmNpZXMKK3N1YiBvdXRwdXRfdGV4aW5mb19idWlsZF9ydWxlcyAoJCQkQCkKK3sKKyAgbXkgKCRzb3VyY2UsICRkZXN0LCAkaW5zcmMsIEBkZXBzKSA9IEBfOworCisgICMgU3BsaXQgYGEudGV4aScgaW50byBgYScgYW5kIGAudGV4aScuCisgIG15ICgkc3BmeCwgJHNzZngpID0gKCRzb3VyY2UgPX4gL14oLio/KShcLlteLl0qKT8kLyk7CisgIG15ICgkZHBmeCwgJGRzZngpID0gKCRkZXN0ID1+IC9eKC4qPykoXC5bXi5dKik/JC8pOworCisgICRzc2Z4IHx8PSAiIjsKKyAgJGRzZnggfHw9ICIiOworCisgICMgV2UgY2FuIG91dHB1dCB0d28ga2luZHMgb2YgcnVsZXM6IHRoZSAiZ2VuZXJpYyIgcnVsZXMgdXNlIE1ha2UKKyAgIyBzdWZmaXggcnVsZXMgYW5kIGFyZSBhcHByb3ByaWF0ZSB3aGVuICRzb3VyY2UgYW5kICRkZXN0IGRvIG5vdCBsaWUKKyAgIyBpbiBhIHN1Yi1kaXJlY3Rvcnk7IHRoZSAic3BlY2lmaWMiIHJ1bGVzIGFyZSBuZWVkZWQgaW4gdGhlIG90aGVyCisgICMgY2FzZS4KKyAgIworICAjIFRoZSBmb3JtZXIgYXJlIG91dHB1dCBvbmx5IG9uY2UgKHRoaXMgaXMgbm90IHJlYWxseSBhcHBhcmVudCBoZXJlLAorICAjIGJ1dCBqdXN0IHJlbWVtYmVyIHRoYXQgc29tZSBsb2dpYyBkZWVwZXIgaW4gQXV0b21ha2Ugd2lsbCBub3QKKyAgIyBvdXRwdXQgdGhlIHNhbWUgcnVsZSB0d2ljZSk7IHdoaWxlIHRoZSBsYXRlciBuZWVkIHRvIGJlIG91dHB1dCBmb3IKKyAgIyBlYWNoIFRleGluZm8gc291cmNlLgorICBteSAkZ2VuZXJpYzsKKyAgbXkgJG1ha2VpbmZvZmxhZ3M7CisgIG15ICRzZGlyID0gZGlybmFtZSAkc291cmNlOworICBpZiAoJHNkaXIgZXEgJy4nICYmIGRpcm5hbWUgKCRkZXN0KSBlcSAnLicpCisgICAgeworICAgICAgJGdlbmVyaWMgPSAxOworICAgICAgJG1ha2VpbmZvZmxhZ3MgPSAnLUkgJChzcmNkaXIpJzsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAkZ2VuZXJpYyA9IDA7CisgICAgICAkbWFrZWluZm9mbGFncyA9ICItSSAkc2RpciAtSSBcJChzcmNkaXIpLyRzZGlyIjsKKyAgICB9CisKKyAgIyBBIGRpcmVjdG9yeSBjYW4gY29udGFpbiB0d28ga2luZHMgb2YgaW5mbyBmaWxlczogc29tZSBidWlsdCBpbiB0aGUKKyAgIyBzb3VyY2UgdHJlZSwgYW5kIHNvbWUgYnVpbHQgaW4gdGhlIGJ1aWxkIHRyZWUuICBUaGUgcnVsZXMgYXJlCisgICMgZGlmZmVyZW50IGluIGVhY2ggY2FzZS4gIEhvd2V2ZXIgd2UgY2Fubm90IG91dHB1dCB0d28gZGlmZmVyZW50CisgICMgc2V0IG9mIGdlbmVyaWMgcnVsZXMuICBCZWNhdXNlIGluLXNvdXJjZSBidWlsZHMgYXJlIG1vcmUgdXN1YWwsIHdlCisgICMgdXNlIGdlbmVyaWMgcnVsZXMgaW4gdGhpcyBjYXNlIGFuZCBmYWxsIGJhY2sgdG8gInNwZWNpZmljIiBydWxlcworICAjIGZvciBidWlsZC1kaXIgYnVpbGRzLiAgKEl0IHNob3VsZCBub3QgYmUgYSBwcm9ibGVtIHRvIGludmVydCB0aGlzCisgICMgaWYgbmVlZGVkLikKKyAgJGdlbmVyaWMgPSAwIHVubGVzcyAkaW5zcmM7CisKKyAgIyBXZSBjYW5ub3QgdXNlIGEgc3VmZml4IHJ1bGUgdG8gYnVpbGQgaW5mbyBmaWxlcyB3aXRoIGFuIGVtcHR5CisgICMgZXh0ZW5zaW9uLiAgT3RoZXJ3aXNlIHdlIHdvdWxkIG91dHB1dCBhIHNpbmdsZSBzdWZmaXggaW5mZXJlbmNlCisgICMgcnVsZSwgd2l0aCBzZXBhcmF0ZSBkZXBlbmRlbmNpZXMsIGFzIGluCisgICMKKyAgIyAgICAudGV4aToKKyAgIyAgICAgICAgICAgICAkKE1BS0VJTkZPKSAuLi4KKyAgIyAgICBmb28uaW5mbzogZm9vLnRleGkKKyAgIworICAjIHdoaWNoIGNvbmZ1c2UgU29sYXJpcyBtYWtlLiAgKFNlZSB0aGUgQXV0b2NvbmYgbWFudWFsIGZvcgorICAjIGRldGFpbHMuKSAgVGhlcmVmb3JlIHdlIHVzZSBhIHNwZWNpZmljIHJ1bGUgaW4gdGhpcyBjYXNlLiAgVGhpcworICAjIGFwcGxpZXMgdG8gaW5mbyBmaWxlcyBvbmx5IChkdmkgYW5kIHBkZiBmaWxlcyBhbHdheXMgaGF2ZSBhbgorICAjIGV4dGVuc2lvbikuCisgIG15ICRnZW5lcmljX2luZm8gPSAoJGdlbmVyaWMgJiYgJGRzZngpID8gMSA6IDA7CisKKyAgIyBJZiB0aGUgcmVzdWx0aW5nIGZpbGUgbGllIGludG8gYSBzdWJkaXJlY3RvcnksCisgICMgbWFrZSBzdXJlIHRoaXMgZGlyZWN0b3J5IHdpbGwgZXhpc3QuCisgIG15ICRkaXJzdGFtcCA9IHJlcXVpcmVfYnVpbGRfZGlyZWN0b3J5X21heWJlICgkZGVzdCk7CisKKyAgbXkgJGRpcGZ4ID0gKCRpbnNyYyA/ICckKHNyY2RpcikvJyA6ICcnKSAuICRkcGZ4OworCisgICRvdXRwdXRfcnVsZXMgLj0gZmlsZV9jb250ZW50cyAoJ3RleGlidWlsZCcsCisJCQkJICBuZXcgQXV0b21ha2U6OkxvY2F0aW9uLAorCQkJCSAgREVQUyAgICAgICAgICAgICA9PiAiQGRlcHMiLAorCQkJCSAgREVTVF9QUkVGSVggICAgICA9PiAkZHBmeCwKKwkJCQkgIERFU1RfSU5GT19QUkVGSVggPT4gJGRpcGZ4LAorCQkJCSAgREVTVF9TVUZGSVggICAgICA9PiAkZHNmeCwKKwkJCQkgIERJUlNUQU1QICAgICAgICAgPT4gJGRpcnN0YW1wLAorCQkJCSAgR0VORVJJQyAgICAgICAgICA9PiAkZ2VuZXJpYywKKwkJCQkgIEdFTkVSSUNfSU5GTyAgICAgPT4gJGdlbmVyaWNfaW5mbywKKwkJCQkgIElOU1JDCQkgICA9PiAkaW5zcmMsCisJCQkJICBNQUtFSU5GT0ZMQUdTICAgID0+ICRtYWtlaW5mb2ZsYWdzLAorCQkJCSAgU09VUkNFICAgICAgICAgICA9PiAoJGdlbmVyaWMKKwkJCQkJCSAgICAgICA/ICckPCcgOiAkc291cmNlKSwKKwkJCQkgIFNPVVJDRV9JTkZPICAgICAgPT4gKCRnZW5lcmljX2luZm8KKwkJCQkJCSAgICAgICA/ICckPCcgOiAkc291cmNlKSwKKwkJCQkgIFNPVVJDRV9SRUFMICAgICAgPT4gJHNvdXJjZSwKKwkJCQkgIFNPVVJDRV9TVUZGSVggICAgPT4gJHNzZngsCisJCQkJICApOworICByZXR1cm4gKCRkaXJzdGFtcCwgIiRkcGZ4LmR2aSIsICIkZHBmeC5wZGYiLCAiJGRwZngucHMiLCAiJGRwZnguaHRtbCIpOworfQorCisKKyMgKCRNT1NUTFlDTEVBTiwgJFRFWElDTEVBTiwgJE1BSU5UQ0xFQU4pCisjIGhhbmRsZV90ZXhpbmZvX2hlbHBlciAoJGluZm9fdGV4aW5mb3MpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEhhbmRsZSBhbGwgVGV4aW5mbyBzb3VyY2U7IGhlbHBlciBmb3IgaGFuZGxlX3RleGluZm8uCitzdWIgaGFuZGxlX3RleGluZm9faGVscGVyICgkKQoreworICBteSAoJGluZm9fdGV4aW5mb3MpID0gQF87CisgIG15IChAaW5mb2Jhc2UsIEBpbmZvX2RlcHNfbGlzdCwgQHRleGlfZGVwcyk7CisgIG15ICV2ZXJzaW9uczsKKyAgbXkgJGRvbmUgPSAwOworICBteSAoQG1vc3RseV9jbGVhbnMsIEB0ZXhpX2NsZWFucywgQG1haW50X2NsZWFucykgPSAoJycsICcnLCAnJyk7CisKKyAgIyBCdWlsZCBhIHJlZ2V4IG1hdGNoaW5nIHVzZXItY2xlYW5lZCBmaWxlcy4KKyAgbXkgJGQgPSB2YXIgJ0RJU1RDTEVBTkZJTEVTJzsKKyAgbXkgJGMgPSB2YXIgJ0NMRUFORklMRVMnOworICBteSBAZiA9ICgpOworICBwdXNoIEBmLCAkZC0+dmFsdWVfYXNfbGlzdF9yZWN1cnNpdmUgKGlubmVyX2V4cGFuZCA9PiAxKSBpZiAkZDsKKyAgcHVzaCBAZiwgJGMtPnZhbHVlX2FzX2xpc3RfcmVjdXJzaXZlIChpbm5lcl9leHBhbmQgPT4gMSkgaWYgJGM7CisgIEBmID0gbWFwIHsgc3xbXkEtWmEtel8wLTkqXFtcXVwtXXxcXCQmfGc7IHN8XCp8W14vXSp8ZzsgJF87IH0gQGY7CisgIG15ICR1c2VyX2NsZWFuZWRfZmlsZXMgPSAnXig/OicgLiBqb2luICgnfCcsIEBmKSAuICcpJCc7CisKKyAgZm9yZWFjaCBteSAkdGV4aQorICAgICAgKCRpbmZvX3RleGluZm9zLT52YWx1ZV9hc19saXN0X3JlY3Vyc2l2ZSAoaW5uZXJfZXhwYW5kID0+IDEpKQorICAgIHsKKyAgICAgIG15ICRpbmZvYmFzZSA9ICR0ZXhpOworICAgICAgJGluZm9iYXNlID1+IHMvXC4odHhpfHRleGluZm98dGV4aSkkLy87CisKKyAgICAgIGlmICgkaW5mb2Jhc2UgZXEgJHRleGkpCisJeworCSAgIyBGSVhNRTogcmVwb3J0IGxpbmUgbnVtYmVyLgorCSAgZXJyX2FtICJ0ZXhpbmZvIGZpbGUgYCR0ZXhpJyBoYXMgdW5yZWNvZ25pemVkIGV4dGVuc2lvbiI7CisJICBuZXh0OworCX0KKworICAgICAgcHVzaCBAaW5mb2Jhc2UsICRpbmZvYmFzZTsKKworICAgICAgIyBJZiAndmVyc2lvbi50ZXhpJyBpcyByZWZlcmVuY2VkIGJ5IGlucHV0IGZpbGUsIHRoZW4gaW5jbHVkZQorICAgICAgIyBhdXRvbWF0aWMgdmVyc2lvbmluZyBjYXBhYmlsaXR5LgorICAgICAgbXkgKCRvdXRfZmlsZSwgJHZ0ZXhpLCBAY2xlYW5fZmlsZXMpID0KKwlzY2FuX3RleGluZm9fZmlsZSAoIiRyZWxhdGl2ZV9kaXIvJHRleGkiKQorCW9yIG5leHQ7CisgICAgICBwdXNoIChAbW9zdGx5X2NsZWFucywgQGNsZWFuX2ZpbGVzKTsKKworICAgICAgIyBJZiB0aGUgVGV4aW5mbyBzb3VyY2UgaXMgaW4gYSBzdWJkaXJlY3RvcnksIGNyZWF0ZSB0aGUKKyAgICAgICMgcmVzdWx0aW5nIGluZm8gaW4gdGhpcyBzdWJkaXJlY3RvcnkuICBJZiBpdCBpcyBpbiB0aGUgY3VycmVudAorICAgICAgIyBkaXJlY3RvcnksIHRyeSBoYXJkIHRvIG5vdCBwcmVmaXggIi4vIiBiZWNhdXNlIGl0IGJyZWFrcyB0aGUKKyAgICAgICMgZ2VuZXJpYyBydWxlcy4KKyAgICAgIG15ICRvdXRkaXIgPSBkaXJuYW1lICgkdGV4aSkgLiAnLyc7CisgICAgICAkb3V0ZGlyID0gIiIgaWYgJG91dGRpciBlcSAnLi8nOworICAgICAgJG91dF9maWxlID0gICRvdXRkaXIgLiAkb3V0X2ZpbGU7CisKKyAgICAgICMgVW50aWwgQXV0b21ha2UgMS42LjMsIC5pbmZvIGZpbGVzIHdlcmUgYnVpbHQgaW4gdGhlCisgICAgICAjIHNvdXJjZSB0cmVlLiAgVGhpcyB3YXMgYW4gb2JzdGFjbGUgdG8gdGhlIHN1cHBvcnQgb2YKKyAgICAgICMgbm9uLWRpc3RyaWJ1dGVkIC5pbmZvIGZpbGVzLCBhbmQgbm9uLWRpc3RyaWJ1dGVkIC50ZXhpCisgICAgICAjIGZpbGVzLgorICAgICAgIworICAgICAgIyAqIE5vbi1kaXN0cmlidXRlZCAudGV4aSBmaWxlcyBpcyBpbXBvcnRhbnQgaW4gc29tZSBwYWNrYWdlcworICAgICAgIyAgIHdoZXJlIC50ZXhpIGZpbGVzIGFyZSBidWlsdCBhdCBtYWtlIHRpbWUsIHByb2JhYmx5IHVzaW5nCisgICAgICAjICAgb3RoZXIgYmluYXJpZXMgYnVpbHQgaW4gdGhlIHBhY2thZ2UgaXRzZWxmLCBtYXliZSB1c2luZworICAgICAgIyAgIHRvb2xzIG9yIGluZm9ybWF0aW9uIGZvdW5kIG9uIHRoZSBidWlsZCBob3N0LiAgQmVjYXVzZQorICAgICAgIyAgIHRoZXNlIGZpbGVzIGFyZSBub3QgZGlzdHJpYnV0ZWQgdGhleSBhcmUgYWx3YXlzIHJlYnVpbHQKKyAgICAgICMgICBhdCBtYWtlIHRpbWU7IHRoZXkgc2hvdWxkIHRoZXJlZm9yZSBub3QgbGllIGluIHRoZSBzb3VyY2UKKyAgICAgICMgICBkaXJlY3RvcnkuICBPbmUgcGxhbiB3YXMgdG8gc3VwcG9ydCB0aGlzIHVzaW5nCisgICAgICAjICAgbm9kaXN0X2luZm9fVEVYSU5GT1Mgb3Igc29tZXRoaW5nIHNpbWlsYXIuICAoRG9pbmcgdGhpcworICAgICAgIyAgIHJlcXVpcmVzIHNvbWUgc2FuaXR5IGNoZWNrcy4gIEZvciBpbnN0YW5jZSBBdXRvbWFrZSBzaG91bGQKKyAgICAgICMgICBub3QgYWxsb3c6CisgICAgICAjICAgICAgZGlzdF9pbmZvX1RFWElORk9TID0gZm9vLnRleGkKKyAgICAgICMgICAgICBub2Rpc3RfZm9vX1RFWElORk9TID0gaW5jbHVkZWQudGV4aQorICAgICAgIyAgIGJlY2F1c2UgYSBkaXN0cmlidXRlZCBmaWxlIHNob3VsZCBuZXZlciBkZXBlbmQgb24gYQorICAgICAgIyAgIG5vbi1kaXN0cmlidXRlZCBmaWxlLikKKyAgICAgICMKKyAgICAgICMgKiBJZiAudGV4aSBmaWxlcyBhcmUgbm90IGRpc3RyaWJ1dGVkLCB0aGVuIC5pbmZvIGZpbGVzIHNob3VsZAorICAgICAgIyAgIG5vdCBiZSBkaXN0cmlidXRlZCBlaXRoZXIuICBUaGVyZSBhcmUgYWxzbyBjYXNlcyB3aGVyZSBvbmUKKyAgICAgICMgICB3YW50cyB0byBkaXN0cmlidXRlIC50ZXhpIGZpbGVzLCBidXQgZG9lcyBub3Qgd2FudCB0bworICAgICAgIyAgIGRpc3RyaWJ1dGUgdGhlIC5pbmZvIGZpbGVzLiAgRm9yIGluc3RhbmNlIHRoZSBUZXhpbmZvIHBhY2thZ2UKKyAgICAgICMgICBkaXN0cmlidXRlcyB0aGUgdG9vbCB1c2VkIHRvIGJ1aWxkIHRoZXNlIGZpbGVzOyBpdCB3b3VsZAorICAgICAgIyAgIGJlIGEgd2FzdGUgb2Ygc3BhY2UgdG8gZGlzdHJpYnV0ZSB0aGVtLiAgSXQncyBub3QgY2xlYXIKKyAgICAgICMgICB3aGljaCBzeW50YXggd2Ugc2hvdWxkIHVzZSB0byBpbmRpY2F0ZSB0aGF0IC5pbmZvIGZpbGVzIHNob3VsZAorICAgICAgIyAgIG5vdCBiZSBkaXN0cmlidXRlZC4gIEFraW0gRGVtYWlsbGUgc3VnZ2VzdGVkIHRoYXQgZXZlbnR1YWxseQorICAgICAgIyAgIHdlIHN3aXRjaCB0byBhIG5ldyBzeW50YXg6CisgICAgICAjICAgfCAgTWF5YmUgd2Ugc2hvdWxkIHRha2Ugc29tZSBpbnNwaXJhdGlvbiBmcm9tIHdoYXQncyBhbHJlYWR5CisgICAgICAjICAgfCAgZG9uZSBpbiB0aGUgcmVzdCBvZiBBdXRvbWFrZS4gIE1heWJlIHRoZXJlIGlzIHRvbyBtdWNoCisgICAgICAjICAgfCAgc3ludGFjdGljIHN1Z2FyIGhlcmUsIGFuZCB5b3Ugd2FudAorICAgICAgIyAgIHwgICAgIG5vZGlzdF9JTkZPID0gYmFyLmluZm8KKyAgICAgICMgICB8ICAgICBkaXN0X2Jhcl9pbmZvX1NPVVJDRVMgPSBiYXIudGV4aQorICAgICAgIyAgIHwgICAgIGJhcl90ZXhpX0RFUEVOREVOQ0lFUyA9IGZvby50ZXhpCisgICAgICAjICAgfCAgd2l0aCBhIGJpdCBvZiBtYWdpYyB0byBoYXZlIGJhci5pbmZvIHJlcHJlc2VudCB0aGUgd2hvbGUKKyAgICAgICMgICB8ICBiYXIqaW5mbyBzZXQuICBUaGF0J3MgYSBsb3QgbW9yZSB2ZXJib3NlIHRoYXQgdGhlIGN1cnJlbnQKKyAgICAgICMgICB8ICBzaXR1YXRpb24sIGJ1dCBpdCBpcyAjIG5vdCBuZXcsIGhlbmNlIHRoZSB1c2VyIGhhcyBsZXNzCisgICAgICAjICAgfCAgdG8gbGVhcm4uCisgICAgICAjCSAgfAorICAgICAgIyAgIHwgIEJ1dCB0aGVyZSBpcyBzdGlsbCB0b28gbXVjaCByb29tIGZvciBtZWFuaW5nbGVzcyBzcGVjczoKKyAgICAgICMgICB8ICAgICBub2Rpc3RfSU5GTyA9IGJhci5pbmZvCisgICAgICAjICAgfCAgICAgZGlzdF9iYXJfaW5mb19TT1VSQ0VTID0gYmFyLnRleGkKKyAgICAgICMgICB8ICAgICBkaXN0X1BTID0gYmFyLnBzIHNvbWV0aGluZy13cml0dGVuLWJ5LWhhbmQucHMKKyAgICAgICMgICB8ICAgICBub2Rpc3RfYmFyX3BzX1NPVVJDRVMgPSBiYXIudGV4aQorICAgICAgIyAgIHwgICAgIGJhcl90ZXhpX0RFUEVOREVOQ0lFUyA9IGZvby50ZXhpCisgICAgICAjICAgfCAgaGVyZSBiYXIudGV4aSBpcyBkaXN0XyBpbiBsaW5lIDIsIGFuZCBub2Rpc3RfIGluIDQuCisgICAgICAjCisgICAgICAjIEJhY2sgdG8gdGhlIHBvaW50LCBpdCBzaG91bGQgYmUgY2xlYXIgdGhhdCBpbiBvcmRlciB0byBzdXBwb3J0CisgICAgICAjIG5vbi1kaXN0cmlidXRlZCAuaW5mbyBmaWxlcywgd2UgbmVlZCB0byBidWlsZCB0aGVtIGluIHRoZQorICAgICAgIyBidWlsZCB0cmVlLCBub3QgaW4gdGhlIHNvdXJjZSB0cmVlIChub24tZGlzdHJpYnV0ZWQgLnRleGkKKyAgICAgICMgZmlsZXMgYXJlIGxlc3Mgb2YgYSBwcm9ibGVtLCBiZWNhdXNlIHdlIGRvIG5vdCBvdXRwdXQgYnVpbGQKKyAgICAgICMgcnVsZXMgZm9yIHRoZW0pLiAgSW4gQXV0b21ha2UgMS43IC5pbmZvIGJ1aWxkIHJ1bGVzIGhhdmUgYmVlbgorICAgICAgIyBsYXJnZWx5IGNsZWFuZWQgdXAgc28gdGhhdCAuaW5mbyBmaWxlcyBnZXQgYWx3YXlzIGJ1aWxkIGluIHRoZQorICAgICAgIyBidWlsZCB0cmVlLCBldmVuIHdoZW4gZGlzdHJpYnV0ZWQuICBUaGUgaWRlYSB3YXMgdGhhdAorICAgICAgIyAgICgxKSBpZiBkdXJpbmcgYSBWUEFUSCBidWlsZCB0aGUgLmluZm8gZmlsZSB3YXMgZm91bmQgdG8gYmUKKyAgICAgICMgICAgICAgYWJzZW50IG9yIG91dC1vZi1kYXRlIChpbiB0aGUgc291cmNlIHRyZWUgb3IgaW4gdGhlCisgICAgICAjICAgICAgIGJ1aWxkIHRyZWUpLCBNYWtlIHdvdWxkIHJlYnVpbGQgaXQgaW4gdGhlIGJ1aWxkIHRyZWUuCisgICAgICAjICAgICAgIElmIGFuIHVwLXRvLWRhdGUgc291cmNlLXRyZWUgb2YgdGhlIC5pbmZvIGZpbGUgZXhpc3RlZCwKKyAgICAgICMgICAgICAgbWFrZSB3b3VsZCBub3QgcmVidWlsZCBpdCBpbiB0aGUgYnVpbGQgdHJlZS4KKyAgICAgICMgICAoMikgaGF2aW5nIHR3byBjb3BpZXMgb2YgLmluZm8gZmlsZXMsIG9uZSBpbiB0aGUgc291cmNlIHRyZWUKKyAgICAgICMgICAgICAgYW5kIG9uZSAobmV3ZXIpIGluIHRoZSBidWlsZCB0cmVlIGlzIG5vdCBhIHByb2JsZW0KKyAgICAgICMgICAgICAgYmVjYXVzZSBgbWFrZSBkaXN0JyBhbHdheXMgcGljayBmaWxlcyBpbiB0aGUgYnVpbGQgdHJlZQorICAgICAgIyAgICAgICBmaXJzdC4KKyAgICAgICMgSG93ZXZlciBpdCB0dXJuZWQgb3V0IHRoZSBiZSBhIGJhZCBpZGVhIGZvciBzZXZlcmFsIHJlYXNvbnM6CisgICAgICAjICAgKiBUcnU2NCwgT3BlbkJTRCwgYW5kIEZyZWVCU0QgKG5vdCBOZXRCU0QpIE1ha2UgZG8gbm90IGJlaGF2ZQorICAgICAgIyAgICAgbGlrZSBHTlUgTWFrZSBvbiBwb2ludCAoMSkgYWJvdmUuICBUaGVzZSBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICMgICAgIG9mIE1ha2Ugd291bGQgYWx3YXlzIHJlYnVpbGQgLmluZm8gZmlsZXMgaW4gdGhlIGJ1aWxkCisgICAgICAjICAgICB0cmVlLCBldmVuIGlmIHN1Y2ggZmlsZXMgd2VyZSB1cCB0byBkYXRlIGluIHRoZSBzb3VyY2UKKyAgICAgICMgICAgIHRyZWUuICBDb25zZXF1ZW50bHksIGl0IHdhcyBpbXBvc3NpYmxlIHRvIHBlcmZvcm0gYSBWUEFUSAorICAgICAgIyAgICAgYnVpbGQgb2YgYSBwYWNrYWdlIGNvbnRhaW5pbmcgVGV4aW5mbyBmaWxlcyB1c2luZyB0aGVzZQorICAgICAgIyAgICAgTWFrZSBpbXBsZW1lbnRhdGlvbnMuCisgICAgICAjICAgICAoUmVmZXIgdG8gdGhlIEF1dG9jb25mIE1hbnVhbCwgc2VjdGlvbiAiTGltaXRhdGlvbiBvZgorICAgICAgIyAgICAgTWFrZSIsIHBhcmFncmFwaCAiVlBBVEgiLCBpdGVtICJ0YXJnZXQgbG9va3VwIiwgZm9yCisgICAgICAjICAgICBhbiBhY2NvdW50IG9mIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZXNlCisgICAgICAjICAgICBpbXBsZW1lbnRhdGlvbnMuKQorICAgICAgIyAgICogVGhlIEdOVSBDb2RpbmcgU3RhbmRhcmRzIHJlcXVpcmUgdGhlc2UgZmlsZXMgdG8gYmUgYnVpbHQKKyAgICAgICMgICAgIGluIHRoZSBzb3VyY2UtdHJlZSAod2hlbiB0aGV5IGFyZSBkaXN0cmlidXRlZCwgdGhhdCBpcykuCisgICAgICAjICAgKiBLZWVwaW5nIGEgZnJlc2hlciBjb3B5IG9mIGRpc3RyaWJ1dGVkIGZpbGVzIGluIHRoZQorICAgICAgIyAgICAgYnVpbGQgdHJlZSBjYW4gYmUgYW5ub3lpbmcgZHVyaW5nIGRldmVsb3BtZW50IGJlY2F1c2UKKyAgICAgICMgICAgIC0gaWYgdGhlIGZpbGVzIGlzIGtlcHQgdW5kZXIgQ1ZTLCB5b3UgcmVhbGx5IHdhbnQgaXQKKyAgICAgICMgICAgICAgdG8gYmUgdXBkYXRlZCBpbiB0aGUgc291cmNlIHRyZWUKKyAgICAgICMgICAgIC0gaXQgaXMgY29uZnVzaW5nIHRoYXQgYG1ha2UgZGlzdGNsZWFuJyBkb2VzIG5vdCBlcmFzZQorICAgICAgIyAgICAgICBhbGwgZmlsZXMgaW4gdGhlIGJ1aWxkIHRyZWUuCisgICAgICAjCisgICAgICAjIENvbnNlcXVlbnRseSwgc3RhcnRpbmcgd2l0aCBBdXRvbWFrZSAxLjgsIC5pbmZvIGZpbGVzIGFyZQorICAgICAgIyBidWlsdCBpbiB0aGUgc291cmNlIHRyZWUgYWdhaW4uICBCZWNhdXNlIHdlIHN0aWxsIHBsYW4gdG8KKyAgICAgICMgc3VwcG9ydCBub24tZGlzdHJpYnV0ZWQgLmluZm8gZmlsZXMgYXQgc29tZSBwb2ludCwgd2UKKyAgICAgICMgaGF2ZSBhIHNpbmdsZSB2YXJpYWJsZSAoJElOU1JDKSB0aGF0IGNvbnRyb2xzIHdoZXRoZXIKKyAgICAgICMgdGhlIGN1cnJlbnQgLmluZm8gZmlsZSBtdXN0IGJlIGJ1aWx0IGluIHRoZSBzb3VyY2UgdHJlZQorICAgICAgIyBvciBpbiB0aGUgYnVpbGQgdHJlZS4gIEFjdHVhbGx5IHRoaXMgdmFyaWFibGUgaXMgc3dpdGNoZWQKKyAgICAgICMgb2ZmIGZvciAuaW5mbyBmaWxlcyB0aGF0IGFwcGVhciB0byBiZSBjbGVhbmVkOyB0aGlzIGlzCisgICAgICAjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggcGFja2FnZSBzdWNoIGFzIFRleGluZm8sCisgICAgICAjIHdoaWNoIGRvIHRoaW5ncyBsaWtlCisgICAgICAjICAgaW5mb19URVhJTkZPUyA9IHRleGluZm8udHhpIGluZm8tc3RuZC50ZXhpIGluZm8udGV4aQorICAgICAgIyAgIERJU1RDTEVBTkZJTEVTID0gdGV4aW5mbyB0ZXhpbmZvLSogaW5mbyouaW5mbyoKKyAgICAgICMgICAjIERvIG5vdCBjcmVhdGUgaW5mbyBmaWxlcyBmb3IgZGlzdHJpYnV0aW9uLgorICAgICAgIyAgIGRpc3QtaW5mbzoKKyAgICAgICMgaW4gb3JkZXIgbm90IHRvIGRpc3RyaWJ1dGUgLmluZm8gZmlsZXMuCisgICAgICBteSAkaW5zcmMgPSAoJG91dF9maWxlID1+ICR1c2VyX2NsZWFuZWRfZmlsZXMpID8gMCA6IDE7CisKKyAgICAgIG15ICRzb3V0ZGlyID0gJyQoc3JjZGlyKS8nIC4gJG91dGRpcjsKKyAgICAgICRvdXRkaXIgPSAkc291dGRpciBpZiAkaW5zcmM7CisKKyAgICAgICMgSWYgdXNlciBzcGVjaWZpZWQgZmlsZV9URVhJTkZPUywgdGhlbiB1c2UgdGhhdCBhcyBleHBsaWNpdAorICAgICAgIyBkZXBlbmRlbmN5IGxpc3QuCisgICAgICBAdGV4aV9kZXBzID0gKCk7CisgICAgICBwdXNoIChAdGV4aV9kZXBzLCAiJHNvdXRkaXIkdnRleGkiKSBpZiAkdnRleGk7CisKKyAgICAgIG15ICRjYW5vbmljYWwgPSBjYW5vbmljYWxpemUgKCRpbmZvYmFzZSk7CisgICAgICBpZiAodmFyICgkY2Fub25pY2FsIC4gIl9URVhJTkZPUyIpKQorCXsKKwkgIHB1c2ggKEB0ZXhpX2RlcHMsICckKCcgLiAkY2Fub25pY2FsIC4gJ19URVhJTkZPUyknKTsKKwkgIHB1c2hfZGlzdF9jb21tb24gKCckKCcgLiAkY2Fub25pY2FsIC4gJ19URVhJTkZPUyknKTsKKwl9CisKKyAgICAgIG15ICgkZGlyc3RhbXAsIEBjZmlsZXMpID0KKwlvdXRwdXRfdGV4aW5mb19idWlsZF9ydWxlcyAoJHRleGksICRvdXRfZmlsZSwgJGluc3JjLCBAdGV4aV9kZXBzKTsKKyAgICAgIHB1c2ggKEB0ZXhpX2NsZWFucywgQGNmaWxlcyk7CisKKyAgICAgIHB1c2ggKEBpbmZvX2RlcHNfbGlzdCwgJG91dF9maWxlKTsKKworICAgICAgIyBJZiBhIHZlcnMqLnRleGkgZmlsZSBpcyBuZWVkZWQsIGVtaXQgdGhlIHJ1bGUuCisgICAgICBpZiAoJHZ0ZXhpKQorCXsKKwkgIGVycl9hbSAoImAkdnRleGknLCBpbmNsdWRlZCBpbiBgJHRleGknLCAiCisJCSAgLiAiYWxzbyBpbmNsdWRlZCBpbiBgJHZlcnNpb25zeyR2dGV4aX0nIikKKwkgICAgaWYgZGVmaW5lZCAkdmVyc2lvbnN7JHZ0ZXhpfTsKKwkgICR2ZXJzaW9uc3skdnRleGl9ID0gJHRleGk7CisKKwkgICMgV2UgbnVtYmVyIHRoZSBzdGFtcC12dGkgZmlsZXMuICBUaGlzIGlzIGRvYWJsZSBzaW5jZSB0aGUKKwkgICMgYWN0dWFsIG5hbWVzIGRvbid0IG1hdHRlciBtdWNoLiAgV2Ugb25seSBudW1iZXIgc3RhcnRpbmcKKwkgICMgd2l0aCB0aGUgc2Vjb25kIG9uZSwgc28gdGhhdCB0aGUgY29tbW9uIGNhc2UgbG9va3MgbmljZS4KKwkgIG15ICR2dGkgPSAoJGRvbmUgPyAkZG9uZSA6ICd2dGknKTsKKwkgICsrJGRvbmU7CisKKwkgICMgVGhpcyBpcyB1Z2x5LCBidXQgaXQgaXMgb3VyIGhpc3RvcmljYWwgcHJhY3RpY2UuCisJICBpZiAoJGNvbmZpZ19hdXhfZGlyX3NldF9pbl9jb25maWd1cmVfYWMpCisJICAgIHsKKwkgICAgICByZXF1aXJlX2NvbmZfZmlsZV93aXRoX21hY3JvIChUUlVFLCAnaW5mb19URVhJTkZPUycsIEZPUkVJR04sCisJCQkJCSAgICAnbWRhdGUtc2gnKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgcmVxdWlyZV9maWxlX3dpdGhfbWFjcm8gKFRSVUUsICdpbmZvX1RFWElORk9TJywKKwkJCQkgICAgICAgRk9SRUlHTiwgJ21kYXRlLXNoJyk7CisJICAgIH0KKworCSAgbXkgJGNvbmZfZGlyOworCSAgaWYgKCRjb25maWdfYXV4X2Rpcl9zZXRfaW5fY29uZmlndXJlX2FjKQorCSAgICB7CisJICAgICAgJGNvbmZfZGlyID0gIiRhbV9jb25maWdfYXV4X2Rpci8iOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAkY29uZl9kaXIgPSAnJChzcmNkaXIpLyc7CisJICAgIH0KKwkgICRvdXRwdXRfcnVsZXMgLj0gZmlsZV9jb250ZW50cyAoJ3RleGktdmVycycsCisJCQkJCSAgbmV3IEF1dG9tYWtlOjpMb2NhdGlvbiwKKwkJCQkJICBURVhJICAgICA9PiAkdGV4aSwKKwkJCQkJICBWVEkgICAgICA9PiAkdnRpLAorCQkJCQkgIFNUQU1QVlRJID0+ICIke3NvdXRkaXJ9c3RhbXAtJHZ0aSIsCisJCQkJCSAgVlRFWEkgICAgPT4gIiRzb3V0ZGlyJHZ0ZXhpIiwKKwkJCQkJICBNRERJUiAgICA9PiAkY29uZl9kaXIsCisJCQkJCSAgRElSU1RBTVAgPT4gJGRpcnN0YW1wKTsKKwl9CisgICAgfQorCisgICMgSGFuZGxlIGxvY2F0aW9uIG9mIHRleGluZm8udGV4LgorICBteSAkbmVlZF90ZXhpX2ZpbGUgPSAwOworICBteSAkdGV4aW5mb2RpcjsKKyAgaWYgKHZhciAoJ1RFWElORk9fVEVYJykpCisgICAgeworICAgICAgIyBUaGUgdXNlciBkZWZpbmVkIFRFWElORk9fVEVYIHNvIGFzc3VtZSBoZSBrbm93cyB3aGF0IGhlIGlzCisgICAgICAjIGRvaW5nLgorICAgICAgJHRleGluZm9kaXIgPSAoJyQoc3JjZGlyKS8nCisJCSAgICAgLiBkaXJuYW1lICh2YXJpYWJsZV92YWx1ZSAoJ1RFWElORk9fVEVYJykpKTsKKyAgICB9CisgIGVsc2lmIChvcHRpb24gJ2N5Z251cycpCisgICAgeworICAgICAgJHRleGluZm9kaXIgPSAnJCh0b3Bfc3JjZGlyKS8uLi90ZXhpbmZvJzsKKyAgICAgIGRlZmluZV92YXJpYWJsZSAoJ1RFWElORk9fVEVYJywgIiR0ZXhpbmZvZGlyL3RleGluZm8udGV4IiwgSU5URVJOQUwpOworICAgIH0KKyAgZWxzaWYgKCRjb25maWdfYXV4X2Rpcl9zZXRfaW5fY29uZmlndXJlX2FjKQorICAgIHsKKyAgICAgICR0ZXhpbmZvZGlyID0gJGFtX2NvbmZpZ19hdXhfZGlyOworICAgICAgZGVmaW5lX3ZhcmlhYmxlICgnVEVYSU5GT19URVgnLCAiJHRleGluZm9kaXIvdGV4aW5mby50ZXgiLCBJTlRFUk5BTCk7CisgICAgICAkbmVlZF90ZXhpX2ZpbGUgPSAyOyAjIHNvIHRoYXQgd2UgcmVxdWlyZV9jb25mX2ZpbGUgbGF0ZXIKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAkdGV4aW5mb2RpciA9ICckKHNyY2RpciknOworICAgICAgJG5lZWRfdGV4aV9maWxlID0gMTsKKyAgICB9CisgIGRlZmluZV92YXJpYWJsZSAoJ2FtX19URVhJTkZPX1RFWF9ESVInLCAkdGV4aW5mb2RpciwgSU5URVJOQUwpOworCisgIHB1c2ggKEBkaXN0X3RhcmdldHMsICdkaXN0LWluZm8nKTsKKworICBpZiAoISBvcHRpb24gJ25vLWluc3RhbGxpbmZvJykKKyAgICB7CisgICAgICAjIE1ha2Ugc3VyZSBkb2N1bWVudGF0aW9uIGlzIG1hZGUgYW5kIGluc3RhbGxlZCBmaXJzdC4gIFVzZQorICAgICAgIyAkKElORk9fREVQUyksIG5vdCAnaW5mbycsIGJlY2F1c2Ugb3RoZXJ3aXNlIHJlY3Vyc2l2ZSBtYWtlcworICAgICAgIyBnZXQgcnVuIHR3aWNlIGR1cmluZyAibWFrZSBhbGwiLgorICAgICAgdW5zaGlmdCAoQGFsbCwgJyQoSU5GT19ERVBTKScpOworICAgIH0KKworICBkZWZpbmVfZmlsZXNfdmFyaWFibGUgKCJEVklTIiwgQGluZm9iYXNlLCAnZHZpJywgSU5URVJOQUwpOworICBkZWZpbmVfZmlsZXNfdmFyaWFibGUgKCJQREZTIiwgQGluZm9iYXNlLCAncGRmJywgSU5URVJOQUwpOworICBkZWZpbmVfZmlsZXNfdmFyaWFibGUgKCJQU1MiLCBAaW5mb2Jhc2UsICdwcycsIElOVEVSTkFMKTsKKyAgZGVmaW5lX2ZpbGVzX3ZhcmlhYmxlICgiSFRNTFMiLCBAaW5mb2Jhc2UsICdodG1sJywgSU5URVJOQUwpOworCisgICMgVGhpcyBuZXh0IGlzbid0IHN0cmljdGx5IG5lZWRlZCBub3cgLS0gdGhlIHBsYWNlcyB0aGF0IGxvb2sgaGVyZQorICAjIGNvdWxkIGVhc2lseSBiZSBjaGFuZ2VkIHRvIGxvb2sgaW4gaW5mb19URVhJTkZPUy4gIEJ1dCB0aGlzIGlzCisgICMgcHJvYmFibHkgYmV0dGVyLCBpbiBjYXNlIG5vaW5zdF9URVhJTkZPUyBpcyBldmVyIHN1cHBvcnRlZC4KKyAgZGVmaW5lX3ZhcmlhYmxlICgiVEVYSU5GT1MiLCB2YXJpYWJsZV92YWx1ZSAoJ2luZm9fVEVYSU5GT1MnKSwgSU5URVJOQUwpOworCisgICMgRG8gc29tZSBlcnJvciBjaGVja2luZy4gIE5vdGUgdGhhdCB0aGlzIGZpbGUgaXMgbm90IHJlcXVpcmVkCisgICMgd2hlbiBpbiBDeWdudXMgbW9kZTsgaW5zdGVhZCB3ZSBkZWZpbmVkIFRFWElORk9fVEVYIGV4cGxpY2l0bHkKKyAgIyB1cCBhYm92ZS4KKyAgaWYgKCRuZWVkX3RleGlfZmlsZSAmJiAhIG9wdGlvbiAnbm8tdGV4aW5mby50ZXgnKQorICAgIHsKKyAgICAgIGlmICgkbmVlZF90ZXhpX2ZpbGUgPiAxKQorCXsKKwkgIHJlcXVpcmVfY29uZl9maWxlX3dpdGhfbWFjcm8gKFRSVUUsICdpbmZvX1RFWElORk9TJywgRk9SRUlHTiwKKwkJCQkJJ3RleGluZm8udGV4Jyk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHJlcXVpcmVfZmlsZV93aXRoX21hY3JvIChUUlVFLCAnaW5mb19URVhJTkZPUycsIEZPUkVJR04sCisJCQkJICAgJ3RleGluZm8udGV4Jyk7CisJfQorICAgIH0KKworICByZXR1cm4gKG1ha2VmaWxlX3dyYXAgKCIiLCAiXHQgICIsIEBtb3N0bHlfY2xlYW5zKSwKKwkgIG1ha2VmaWxlX3dyYXAgKCIiLCAiXHQgICIsIEB0ZXhpX2NsZWFucyksCisJICBtYWtlZmlsZV93cmFwICgiIiwgIlx0ICAiLCBAbWFpbnRfY2xlYW5zKSk7Cit9CisKKworIyBoYW5kbGVfdGV4aW5mbyAoKQorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBIYW5kbGUgYWxsIFRleGluZm8gc291cmNlLgorc3ViIGhhbmRsZV90ZXhpbmZvICgpCit7CisgIHJlamVjdF92YXIgJ1RFWElORk9TJywgImBURVhJTkZPUycgaXMgYW4gYW5hY2hyb25pc207IHVzZSBgaW5mb19URVhJTkZPUyciOworICAjIEZJWE1FOiBJIHRoaW5rIHRoaXMgaXMgYW4gb2Jzb2xldGUgZnV0dXJlIGZlYXR1cmUgbmFtZS4KKyAgcmVqZWN0X3ZhciAnaHRtbF9URVhJTkZPUycsICJIVE1MIGdlbmVyYXRpb24gbm90IHlldCBzdXBwb3J0ZWQiOworCisgIG15ICRpbmZvX3RleGluZm9zID0gdmFyICgnaW5mb19URVhJTkZPUycpOworICBteSAoJG1vc3RseWNsZWFuLCAkY2xlYW4sICRtYWludGNsZWFuKSA9ICgnJywgJycsICcnKTsKKyAgaWYgKCRpbmZvX3RleGluZm9zKQorICAgIHsKKyAgICAgICgkbW9zdGx5Y2xlYW4sICRjbGVhbiwgJG1haW50Y2xlYW4pID0gaGFuZGxlX3RleGluZm9faGVscGVyICgkaW5mb190ZXhpbmZvcyk7CisgICAgICBjaG9tcCAkbW9zdGx5Y2xlYW47CisgICAgICBjaG9tcCAkY2xlYW47CisgICAgICBjaG9tcCAkbWFpbnRjbGVhbjsKKyAgICB9CisKKyAgJG91dHB1dF9ydWxlcyAuPSAgZmlsZV9jb250ZW50cyAoJ3RleGluZm9zJywKKwkJCQkgICBuZXcgQXV0b21ha2U6OkxvY2F0aW9uLAorCQkJCSAgIE1PU1RMWUNMRUFOICAgPT4gJG1vc3RseWNsZWFuLAorCQkJCSAgIFRFWElDTEVBTiAgICAgPT4gJGNsZWFuLAorCQkJCSAgIE1BSU5UQ0xFQU4gICAgPT4gJG1haW50Y2xlYW4sCisJCQkJICAgJ0xPQ0FMLVRFWElTJyA9PiAhISRpbmZvX3RleGluZm9zKTsKK30KKworCisjIEhhbmRsZSBhbnkgbWFuIHBhZ2VzLgorc3ViIGhhbmRsZV9tYW5fcGFnZXMKK3sKKyAgcmVqZWN0X3ZhciAnTUFOUycsICJgTUFOUycgaXMgYW4gYW5hY2hyb25pc207IHVzZSBgbWFuX01BTlMnIjsKKworICAjIEZpbmQgYWxsIHRoZSBzZWN0aW9ucyBpbiB1c2UuICBXZSBkbyB0aGlzIGJ5IGZpcnN0IGxvb2tpbmcgZm9yCisgICMgInN0YW5kYXJkIiBzZWN0aW9ucywgYW5kIHRoZW4gbG9va2luZyBmb3IgYW55IGFkZGl0aW9uYWwKKyAgIyBzZWN0aW9ucyB1c2VkIGluIG1hbl9NQU5TLgorICBteSAoJXNlY3Rpb25zLCAlbm90cmFuc19zZWN0aW9ucywgJXRyYW5zX3NlY3Rpb25zLAorICAgICAgJW5vdHJhbnNfdmFycywgJXRyYW5zX3ZhcnMsICVub3RyYW5zX3NlY3RfdmFycywgJXRyYW5zX3NlY3RfdmFycyk7CisgICMgV2UgaGFuZGxlIG5vZGlzdF8gZm9yIHVuaWZvcm1pdHkuICBtYW4gcGFnZXMgYXJlbid0IGRpc3RyaWJ1dGVkCisgICMgYnkgZGVmYXVsdCBzbyBpdCBpc24ndCBhY3R1YWxseSB2ZXJ5IGltcG9ydGFudC4KKyAgZm9yZWFjaCBteSAkbnBmeCAoJycsICdub3RyYW5zXycpCisgICAgeworICAgICAgZm9yZWFjaCBteSAkcGZ4ICgnJywgJ2Rpc3RfJywgJ25vZGlzdF8nKQorCXsKKwkgICMgQWRkIG1vcmUgc2VjdGlvbnMgYXMgbmVlZGVkLgorCSAgZm9yZWFjaCBteSAkc2VjdGlvbiAoJzAnLi4nOScsICduJywgJ2wnKQorCSAgICB7CisJICAgICAgbXkgJHZhcm5hbWUgPSAkbnBmeCAuICRwZnggLiAnbWFuJyAuICRzZWN0aW9uIC4gJ19NQU5TJzsKKwkgICAgICBpZiAodmFyICgkdmFybmFtZSkpCisJCXsKKwkJICAkc2VjdGlvbnN7JHNlY3Rpb259ID0gMTsKKwkJICAkdmFybmFtZSA9ICckKCcgLiAkdmFybmFtZSAuICcpJzsKKwkJICBpZiAoJG5wZnggZXEgJ25vdHJhbnNfJykKKwkJICAgIHsKKwkJICAgICAgJG5vdHJhbnNfc2VjdGlvbnN7JHNlY3Rpb259ID0gMTsKKwkJICAgICAgJG5vdHJhbnNfc2VjdF92YXJzeyR2YXJuYW1lfSA9IDE7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICAkdHJhbnNfc2VjdGlvbnN7JHNlY3Rpb259ID0gMTsKKwkJICAgICAgJHRyYW5zX3NlY3RfdmFyc3skdmFybmFtZX0gPSAxOworCQkgICAgfQorCisJCSAgJnB1c2hfZGlzdF9jb21tb24gKCR2YXJuYW1lKQorCQkgICAgaWYgJHBmeCBlcSAnZGlzdF8nOworCQl9CisJICAgIH0KKworCSAgbXkgJHZhcm5hbWUgPSAkbnBmeCAuICRwZnggLiAnbWFuX01BTlMnOworCSAgbXkgJHZhciA9IHZhciAoJHZhcm5hbWUpOworCSAgaWYgKCR2YXIpCisJICAgIHsKKwkgICAgICBmb3JlYWNoICgkdmFyLT52YWx1ZV9hc19saXN0X3JlY3Vyc2l2ZSkKKwkJeworCQkgICMgQSBwYWdlIGxpa2UgYGZvby4xYycgZ29lcyBpbnRvIG1hbjFkaXIuCisJCSAgaWYgKC9cLihbMC05YS16XSkoW2Etel0qKSQvKQorCQkgICAgeworCQkgICAgICAkc2VjdGlvbnN7JDF9ID0gMTsKKwkJICAgICAgaWYgKCRucGZ4IGVxICdub3RyYW5zXycpCisJCQl7CisJCQkgICRub3RyYW5zX3NlY3Rpb25zeyQxfSA9IDE7CisJCQl9CisJCSAgICAgIGVsc2UKKwkJCXsKKwkJCSAgJHRyYW5zX3NlY3Rpb25zeyQxfSA9IDE7CisJCQl9CisJCSAgICB9CisJCX0KKworCSAgICAgICR2YXJuYW1lID0gJyQoJyAuICR2YXJuYW1lIC4gJyknOworCSAgICAgIGlmICgkbnBmeCBlcSAnbm90cmFuc18nKQorCQl7CisJCSAgJG5vdHJhbnNfdmFyc3skdmFybmFtZX0gPSAxOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgJHRyYW5zX3ZhcnN7JHZhcm5hbWV9ID0gMTsKKwkJfQorCSAgICAgICZwdXNoX2Rpc3RfY29tbW9uICgkdmFybmFtZSkKKwkJaWYgJHBmeCBlcSAnZGlzdF8nOworCSAgICB9CisJfQorICAgIH0KKworICByZXR1cm4gdW5sZXNzICVzZWN0aW9uczsKKworICBteSBAdW5zb3J0ZWRfZGVwczsKKworICAjIEJ1aWxkIHNlY3Rpb24gaW5kZXBlbmRlbnQgdmFyaWFibGVzLgorICBteSAkaGF2ZV9ub3RyYW5zID0gJW5vdHJhbnNfdmFyczsKKyAgbXkgQG5vdHJhbnNfbGlzdCA9IHNvcnQga2V5cyAlbm90cmFuc192YXJzOworICBteSAkaGF2ZV90cmFucyA9ICV0cmFuc192YXJzOworICBteSBAdHJhbnNfbGlzdCA9IHNvcnQga2V5cyAldHJhbnNfdmFyczsKKworICAjIE5vdyBmb3IgZWFjaCBzZWN0aW9uLCBnZW5lcmF0ZSBhbiBpbnN0YWxsIGFuZCB1bmluc3RhbGwgcnVsZS4KKyAgIyBTb3J0IHNlY3Rpb25zIHNvIG91dHB1dCBpcyBkZXRlcm1pbmlzdGljLgorICBmb3JlYWNoIG15ICRzZWN0aW9uIChzb3J0IGtleXMgJXNlY3Rpb25zKQorICAgIHsKKyAgICAgICMgQnVpbGQgc2VjdGlvbiBkZXBlbmRlbnQgdmFyaWFibGVzLgorICAgICAgbXkgJG5vdHJhbnNfbWFucyA9ICRoYXZlX25vdHJhbnMgfHwgZXhpc3RzICRub3RyYW5zX3NlY3Rpb25zeyRzZWN0aW9ufTsKKyAgICAgIG15ICR0cmFuc19tYW5zID0gJGhhdmVfdHJhbnMgfHwgZXhpc3RzICR0cmFuc19zZWN0aW9uc3skc2VjdGlvbn07CisgICAgICBteSAoJW5vdHJhbnNfdGhpc19zZWN0LCAldHJhbnNfdGhpc19zZWN0KTsKKyAgICAgIG15ICRleHByID0gJ21hbicgLiAkc2VjdGlvbiAuICdfTUFOUyc7CisgICAgICBmb3JlYWNoIG15ICR2YXJuYW1lIChrZXlzICVub3RyYW5zX3NlY3RfdmFycykKKwl7CisJICBpZiAoJHZhcm5hbWUgPX4gLyRleHByLykKKwkgICAgeworCSAgICAgICRub3RyYW5zX3RoaXNfc2VjdHskdmFybmFtZX0gPSAxOworCSAgICB9CisJfQorICAgICAgZm9yZWFjaCBteSAkdmFybmFtZSAoa2V5cyAldHJhbnNfc2VjdF92YXJzKQorCXsKKwkgIGlmICgkdmFybmFtZSA9fiAvJGV4cHIvKQorCSAgICB7CisJICAgICAgJHRyYW5zX3RoaXNfc2VjdHskdmFybmFtZX0gPSAxOworCSAgICB9CisJfQorICAgICAgbXkgQG5vdHJhbnNfc2VjdF9saXN0ID0gc29ydCBrZXlzICVub3RyYW5zX3RoaXNfc2VjdDsKKyAgICAgIG15IEB0cmFuc19zZWN0X2xpc3QgPSBzb3J0IGtleXMgJXRyYW5zX3RoaXNfc2VjdDsKKyAgICAgIEB1bnNvcnRlZF9kZXBzID0gKGtleXMgJW5vdHJhbnNfdmFycywga2V5cyAldHJhbnNfdmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleXMgJW5vdHJhbnNfdGhpc19zZWN0LCBrZXlzICV0cmFuc190aGlzX3NlY3QpOworICAgICAgbXkgQGRlcHMgPSBzb3J0IEB1bnNvcnRlZF9kZXBzOworICAgICAgJG91dHB1dF9ydWxlcyAuPSAmZmlsZV9jb250ZW50cyAoJ21hbnMnLAorCQkJCSAgICAgICBuZXcgQXV0b21ha2U6OkxvY2F0aW9uLAorCQkJCSAgICAgICBTRUNUSU9OICAgICAgICAgICA9PiAkc2VjdGlvbiwKKwkJCQkgICAgICAgREVQUyAgICAgICAgICAgICAgPT4gIkBkZXBzIiwKKwkJCQkgICAgICAgTk9UUkFOU19NQU5TICAgICAgPT4gJG5vdHJhbnNfbWFucywKKwkJCQkgICAgICAgTk9UUkFOU19TRUNUX0xJU1QgPT4gIkBub3RyYW5zX3NlY3RfbGlzdCIsCisJCQkJICAgICAgIEhBVkVfTk9UUkFOUyAgICAgID0+ICRoYXZlX25vdHJhbnMsCisJCQkJICAgICAgIE5PVFJBTlNfTElTVCAgICAgID0+ICJAbm90cmFuc19saXN0IiwKKwkJCQkgICAgICAgVFJBTlNfTUFOUyAgICAgICAgPT4gJHRyYW5zX21hbnMsCisJCQkJICAgICAgIFRSQU5TX1NFQ1RfTElTVCAgID0+ICJAdHJhbnNfc2VjdF9saXN0IiwKKwkJCQkgICAgICAgSEFWRV9UUkFOUyAgICAgICAgPT4gJGhhdmVfdHJhbnMsCisJCQkJICAgICAgIFRSQU5TX0xJU1QgICAgICAgID0+ICJAdHJhbnNfbGlzdCIpOworICAgIH0KKworICBAdW5zb3J0ZWRfZGVwcyAgPSAoa2V5cyAlbm90cmFuc192YXJzLCBrZXlzICV0cmFuc192YXJzLAorICAgICAgICAgICAgICAgICAgICAga2V5cyAlbm90cmFuc19zZWN0X3ZhcnMsIGtleXMgJXRyYW5zX3NlY3RfdmFycyk7CisgIG15IEBtYW5zID0gc29ydCBAdW5zb3J0ZWRfZGVwczsKKyAgJG91dHB1dF92YXJzIC49IGZpbGVfY29udGVudHMgKCdtYW5zLXZhcnMnLAorCQkJCSBuZXcgQXV0b21ha2U6OkxvY2F0aW9uLAorCQkJCSBNQU5TID0+ICJAbWFucyIpOworCisgIHB1c2ggKEBhbGwsICckKE1BTlMpJykKKyAgICB1bmxlc3Mgb3B0aW9uICduby1pbnN0YWxsbWFuJzsKK30KKworIyBIYW5kbGUgREFUQSB2YXJpYWJsZXMuCitzdWIgaGFuZGxlX2RhdGEKK3sKKyAgICAmYW1faW5zdGFsbF92YXIgKCctbm9leHRyYScsICctY2FuZGlzdCcsICdkYXRhJywgJ0RBVEEnLAorCQkgICAgICdkYXRhJywgJ2RhdGFyb290JywgJ2R2aScsICdodG1sJywgJ3BkZicsICdwcycsCisJCSAgICAgJ3N5c2NvbmYnLCAnc2hhcmVkc3RhdGUnLCAnbG9jYWxzdGF0ZScsCisJCSAgICAgJ3BrZ2RhdGEnLCAnbGlzcCcsICdub2luc3QnLCAnY2hlY2snKTsKK30KKworIyBIYW5kbGUgVEFHUy4KK3N1YiBoYW5kbGVfdGFncworeworICAgIG15IEB0YWdfZGVwcyA9ICgpOworICAgIG15IEBjdGFnX2RlcHMgPSAoKTsKKyAgICBpZiAodmFyICgnU1VCRElSUycpKQorICAgIHsKKwkkb3V0cHV0X3J1bGVzIC49ICgidGFncy1yZWN1cnNpdmU6XG4iCisJCQkgIC4gIlx0bGlzdD1cJ1wkKFNVQkRJUlMpXCc7IGZvciBzdWJkaXIgaW4gXCRcJGxpc3Q7IGRvIFxcXG4iCisJCQkgICMgTmV2ZXIgZmFpbCBoZXJlIGlmIGEgc3ViZGlyIGZhaWxzOyBpdAorCQkJICAjIGlzbid0IGltcG9ydGFudC4KKwkJCSAgLiAiXHQgIHRlc3QgXCJcJFwkc3ViZGlyXCIgPSAuIHx8IChcJChhbV9fY2QpIFwkXCRzdWJkaXIiCisJCQkgIC4gIiAmJiBcJChNQUtFKSBcJChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcXFxuIgorCQkJICAuICJcdGRvbmVcbiIpOworCXB1c2ggKEB0YWdfZGVwcywgJ3RhZ3MtcmVjdXJzaXZlJyk7CisJJmRlcGVuZCAoJy5QSE9OWScsICd0YWdzLXJlY3Vyc2l2ZScpOworCSZkZXBlbmQgKCcuTUFLRScsICd0YWdzLXJlY3Vyc2l2ZScpOworCisJJG91dHB1dF9ydWxlcyAuPSAoImN0YWdzLXJlY3Vyc2l2ZTpcbiIKKwkJCSAgLiAiXHRsaXN0PVwnXCQoU1VCRElSUylcJzsgZm9yIHN1YmRpciBpbiBcJFwkbGlzdDsgZG8gXFxcbiIKKwkJCSAgIyBOZXZlciBmYWlsIGhlcmUgaWYgYSBzdWJkaXIgZmFpbHM7IGl0CisJCQkgICMgaXNuJ3QgaW1wb3J0YW50LgorCQkJICAuICJcdCAgdGVzdCBcIlwkXCRzdWJkaXJcIiA9IC4gfHwgKFwkKGFtX19jZCkgXCRcJHN1YmRpciIKKwkJCSAgLiAiICYmIFwkKE1BS0UpIFwkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcXFxuIgorCQkJICAuICJcdGRvbmVcbiIpOworCXB1c2ggKEBjdGFnX2RlcHMsICdjdGFncy1yZWN1cnNpdmUnKTsKKwkmZGVwZW5kICgnLlBIT05ZJywgJ2N0YWdzLXJlY3Vyc2l2ZScpOworCSZkZXBlbmQgKCcuTUFLRScsICdjdGFncy1yZWN1cnNpdmUnKTsKKyAgICB9CisKKyAgICBpZiAoJnNhd19zb3VyY2VzX3AgKDEpCisJfHwgdmFyICgnRVRBR1NfQVJHUycpCisJfHwgQHRhZ19kZXBzKQorICAgIHsKKwlteSBAY29uZmlnOworCWZvcmVhY2ggbXkgJHNwZWMgKEBjb25maWdfaGVhZGVycykKKwl7CisJICAgIG15ICgkb3V0LCBAaW5zKSA9IHNwbGl0X2NvbmZpZ19maWxlX3NwZWMgKCRzcGVjKTsKKwkgICAgZm9yZWFjaCBteSAkaW4gKEBpbnMpCisJICAgICAgeworCQkjIElmIHRoZSBjb25maWcgaGVhZGVyIHNvdXJjZSBpcyBpbiB0aGlzIGRpcmVjdG9yeSwKKwkJIyByZXF1aXJlIGl0LgorCQlwdXNoIEBjb25maWcsIGJhc2VuYW1lICgkaW4pCisJCSAgaWYgJHJlbGF0aXZlX2RpciBlcSBkaXJuYW1lICgkaW4pOworCSAgICAgIH0KKwl9CisJJG91dHB1dF9ydWxlcyAuPSAmZmlsZV9jb250ZW50cyAoJ3RhZ3MnLAorCQkJCQkgbmV3IEF1dG9tYWtlOjpMb2NhdGlvbiwKKwkJCQkJIENPTkZJRyAgICA9PiAiQGNvbmZpZyIsCisJCQkJCSBUQUdTRElSUyAgPT4gIkB0YWdfZGVwcyIsCisJCQkJCSBDVEFHU0RJUlMgPT4gIkBjdGFnX2RlcHMiKTsKKworCXNldF9zZWVuICdUQUdTX0RFUEVOREVOQ0lFUyc7CisgICAgfQorICAgIGVsc2lmIChyZWplY3RfdmFyICgnVEFHU19ERVBFTkRFTkNJRVMnLAorCQkgICAgICAgImRvZXNuJ3QgbWFrZSBzZW5zZSB0byBkZWZpbmUgYFRBR1NfREVQRU5ERU5DSUVTJyIKKwkJICAgICAgIC4gIndpdGhvdXRcbnNvdXJjZXMgb3IgYEVUQUdTX0FSR1MnIikpCisgICAgeworICAgIH0KKyAgICBlbHNlCisgICAgeworCSMgRXZlcnkgTWFrZWZpbGUgbXVzdCBkZWZpbmUgc29tZSBzb3J0IG9mIFRBR1MgcnVsZS4KKwkjIE90aGVyd2lzZSwgaXQgd291bGQgYmUgcG9zc2libGUgZm9yIGEgdG9wLWxldmVsICJtYWtlIFRBR1MiCisJIyB0byBmYWlsIGJlY2F1c2Ugc29tZSBzdWJkaXJlY3RvcnkgZmFpbGVkLgorCSRvdXRwdXRfcnVsZXMgLj0gInRhZ3M6IFRBR1NcblRBR1M6XG5cbiI7CisJIyBEaXR0byBjdGFncy4KKwkkb3V0cHV0X3J1bGVzIC49ICJjdGFnczogQ1RBR1NcbkNUQUdTOlxuXG4iOworICAgIH0KK30KKworIyBIYW5kbGUgbXVsdGlsaWIgc3VwcG9ydC4KK3N1YiBoYW5kbGVfbXVsdGlsaWIKK3sKKyAgaWYgKCRzZWVuX211bHRpbGliICYmICRyZWxhdGl2ZV9kaXIgZXEgJy4nKQorICAgIHsKKyAgICAgICRvdXRwdXRfcnVsZXMgLj0gJmZpbGVfY29udGVudHMgKCdtdWx0aWxpYicsIG5ldyBBdXRvbWFrZTo6TG9jYXRpb24pOworICAgICAgcHVzaCAoQGFsbCwgJ2FsbC1tdWx0aScpOworICAgIH0KK30KKworCisjIHVzZXJfcGhvbnlfcnVsZSAoJE5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJldHVybiBmYWxzZSBpZiBydWxlICROQU1FIGRvZXMgbm90IGV4aXN0LiAgT3RoZXJ3aXNlLAorIyBkZWNsYXJlIGl0IGFzIHBob255LCBjb21wbGV0ZSBpdHMgZGVmaW5pdGlvbiAoaW4gY2FzZSBpdCBpcworIyBjb25kaXRpb25hbCksIGFuZCByZXR1cm4gaXRzIEF1dG9tYWtlOjpSdWxlIGluc3RhbmNlLgorc3ViIHVzZXJfcGhvbnlfcnVsZSAoJCkKK3sKKyAgbXkgKCRuYW1lKSA9IEBfOworICBteSAkcnVsZSA9IHJ1bGUgJG5hbWU7CisgIGlmICgkcnVsZSkKKyAgICB7CisgICAgICBkZXBlbmQgKCcuUEhPTlknLCAkbmFtZSk7CisgICAgICAjIERlZmluZSAkTkFNRSBpbiBhbGwgY29uZGl0aW9uIHdoZXJlIGl0IGlzIG5vdCBhbHJlYWR5IGRlZmluZWQsCisgICAgICAjIHNvIHRoYXQgaXQgaXMgYWx3YXlzIE9LIHRvIGRlcGVuZCBvbiAkTkFNRS4KKyAgICAgIGZvciBteSAkYyAoJHJ1bGUtPm5vdF9hbHdheXNfZGVmaW5lZF9pbl9jb25kIChUUlVFKS0+Y29uZHMpCisJeworCSAgQXV0b21ha2U6OlJ1bGU6OmRlZmluZSAoJG5hbWUsICdpbnRlcm5hbCcsIFJVTEVfQVVUT01BS0UsCisJCQkJICAkYywgSU5URVJOQUwpOworCSAgJG91dHB1dF9ydWxlcyAuPSAkYy0+c3Vic3Rfc3RyaW5nIC4gIiRuYW1lOlxuIjsKKwl9CisgICAgfQorICByZXR1cm4gJHJ1bGU7Cit9CisKKworIyAkQk9PTEVBTgorIyAmZm9yX2Rpc3RfY29tbW9uICgkQSwgJEIpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU3Vicm91dGluZSBmb3IgJmhhbmRsZV9kaXN0OiBzb3J0IGZpbGVzIHRvIGRpc3QuCisjCisjIFdlIHB1dCBSRUFETUUgZmlyc3QgYmVjYXVzZSBpdCB0aGVuIGJlY29tZXMgZWFzaWVyIHRvIG1ha2UgYQorIyBVc2VuZXQtY29tcGxpYW50IHNoYXIgZmlsZSAoaW4gdGhlc2UsIFJFQURNRSBtdXN0IGJlIGZpcnN0KS4KKyMKKyMgRklYTUU6IGRvIG1vcmUgb3JkZXJpbmcgb2YgZmlsZXMgaGVyZS4KK3N1YiBmb3JfZGlzdF9jb21tb24KK3sKKyAgICByZXR1cm4gMAorCWlmICRhIGVxICRiOworICAgIHJldHVybiAtMQorCWlmICRhIGVxICdSRUFETUUnOworICAgIHJldHVybiAxCisJaWYgJGIgZXEgJ1JFQURNRSc7CisgICAgcmV0dXJuICRhIGNtcCAkYjsKK30KKworIyBoYW5kbGVfZGlzdAorIyAtLS0tLS0tLS0tLQorIyBIYW5kbGUgJ2Rpc3QnIHRhcmdldC4KK3N1YiBoYW5kbGVfZGlzdCAoKQoreworICAjIFN1YnN0aXR1dGlvbnMgZm9yIGRpc3RkaXIuYW0KKyAgbXkgJXRyYW5zZm9ybTsKKworICAjIERlZmluZSBESVNUX1NVQkRJUlMuICBUaGlzIG11c3QgYWx3YXlzIGJlIGRvbmUsIHJlZ2FyZGxlc3Mgb2YgdGhlCisgICMgbm8tZGlzdCBzZXR0aW5nOiB0YXJnZXQgbGlrZSBgZGlzdGNsZWFuJyBvciBgbWFpbnRhaW5lci1jbGVhbicgdXNlIGl0LgorICBteSAkc3ViZGlycyA9IHZhciAoJ1NVQkRJUlMnKTsKKyAgaWYgKCRzdWJkaXJzKQorICAgIHsKKyAgICAgICMgSWYgU1VCRElSUyBpcyBjb25kaXRpb25hbGx5IGRlZmluZWQsIHRoZW4gc2V0IERJU1RfU1VCRElSUworICAgICAgIyB0byBhbGwgcG9zc2libGUgZGlyZWN0b3JpZXMsIGFuZCB1c2UgaXQuICBJZiBESVNUX1NVQkRJUlMgaXMKKyAgICAgICMgZGVmaW5lZCwganVzdCB1c2UgaXQuCisKKyAgICAgICMgTm90ZSB0aGF0IHdlIGNoZWNrIERJU1RfU1VCRElSUyBmaXJzdCBvbiBwdXJwb3NlLCBzbyB0aGF0CisgICAgICAjIHdlIGRvbid0IGNhbGwgaGFzX2NvbmRpdGlvbmFsX2NvbnRlbnRzIGZvciBub3cgcmVhc29uLgorICAgICAgIyAoSW4gdGhlIHBhc3Qgb25lIHByb2plY3QgdXNlZCBzbyBtYW55IGNvbmRpdGlvbmFsIHN1YmRpcmVjdG9yaWVzCisgICAgICAjIHRoYXQgY2FsbGluZyBoYXNfY29uZGl0aW9uYWxfY29udGVudHMgb24gU1VCRElSUyBjYXVzZWQKKyAgICAgICMgYXV0b21ha2UgdG8gZ3JvdyB0byAxNTBNYiAtLSB0aGlzIHNob3VsZCBub3QgaGFwcGVuIHdpdGgKKyAgICAgICMgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgaGFzX2NvbmRpdGlvbmFsX2NvbnRlbnRzLAorICAgICAgIyBidXQgaXQncyBtb3JlIGVmZmljaWVudCB0byBhdm9pZCB0aGUgY2FsbCBhbnl3YXkuKQorICAgICAgaWYgKHZhciAoJ0RJU1RfU1VCRElSUycpKQorCXsKKwl9CisgICAgICBlbHNpZiAoJHN1YmRpcnMtPmhhc19jb25kaXRpb25hbF9jb250ZW50cykKKwl7CisJICBkZWZpbmVfcHJldHR5X3ZhcmlhYmxlCisJICAgICgnRElTVF9TVUJESVJTJywgVFJVRSwgSU5URVJOQUwsCisJICAgICB1bmlxICgkc3ViZGlycy0+dmFsdWVfYXNfbGlzdF9yZWN1cnNpdmUpKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgIyBXZSBhbHdheXMgZGVmaW5lIHRoaXMgYmVjYXVzZSB0aGF0IGlzIHdoYXQgYGRpc3RjbGVhbicKKwkgICMgd2FudHMuCisJICBkZWZpbmVfcHJldHR5X3ZhcmlhYmxlICgnRElTVF9TVUJESVJTJywgVFJVRSwgSU5URVJOQUwsCisJCQkJICAnJChTVUJESVJTKScpOworCX0KKyAgICB9CisKKyAgIyBUaGUgcmVtYWluaW5nIGRlZmluaXRpb25zIGFyZSBvbmx5IHJlcXVpcmVkIHdoZW4gYSBkaXN0IHRhcmdldCBpcyB1c2VkLgorICByZXR1cm4gaWYgb3B0aW9uICduby1kaXN0JzsKKworICAjIEF0IGxlYXN0IG9uZSBvZiB0aGUgYXJjaGl2ZSBmb3JtYXRzIG11c3QgYmUgZW5hYmxlZC4KKyAgaWYgKCRyZWxhdGl2ZV9kaXIgZXEgJy4nKQorICAgIHsKKyAgICAgIG15ICRhcmNoaXZlX2RlZmluZWQgPSBvcHRpb24gJ25vLWRpc3QtZ3ppcCcgPyAwIDogMTsKKyAgICAgICRhcmNoaXZlX2RlZmluZWQgfHw9CisJZ3JlcCB7IG9wdGlvbiAiZGlzdC0kXyIgfSBxdyhzaGFyIHppcCB0YXJaIGJ6aXAyIGx6bWEgeHopOworICAgICAgZXJyb3IgKG9wdGlvbiAnbm8tZGlzdC1nemlwJywKKwkgICAgICJuby1kaXN0LWd6aXAgc3BlY2lmaWVkIGJ1dCBubyBkaXN0LSogc3BlY2lmaWVkLCAiCisJICAgICAuICJhdCBsZWFzdCBvbmUgYXJjaGl2ZSBmb3JtYXQgbXVzdCBiZSBlbmFibGVkIikKKwl1bmxlc3MgJGFyY2hpdmVfZGVmaW5lZDsKKyAgICB9CisKKyAgIyBMb29rIGZvciBjb21tb24gZmlsZXMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gZGlzdHJpYnV0aW9uLgorICAjIElmIHRoZSBhdXggZGlyIGlzIHNldCwgYW5kIGl0IGRvZXMgbm90IGhhdmUgYSBNYWtlZmlsZS5hbSwgdGhlbgorICAjIHdlIGNoZWNrIGZvciB0aGVzZSBmaWxlcyB0aGVyZSBhcyB3ZWxsLgorICBteSAkY2hlY2tfYXV4ID0gMDsKKyAgaWYgKCRyZWxhdGl2ZV9kaXIgZXEgJy4nCisgICAgICAmJiAkY29uZmlnX2F1eF9kaXJfc2V0X2luX2NvbmZpZ3VyZV9hYykKKyAgICB7CisgICAgICBpZiAoISAmaXNfbWFrZV9kaXIgKCRjb25maWdfYXV4X2RpcikpCisJeworCSAgJGNoZWNrX2F1eCA9IDE7CisJfQorICAgIH0KKyAgZm9yZWFjaCBteSAkY2ZpbGUgKEBjb21tb25fZmlsZXMpCisgICAgeworICAgICAgaWYgKGRpcl9oYXNfY2FzZV9tYXRjaGluZ19maWxlICgkcmVsYXRpdmVfZGlyLCAkY2ZpbGUpCisJICAjIFRoZSBmaWxlIG1pZ2h0IGJlIGFic2VudCwgYnV0IGlmIGl0IGNhbiBiZSBidWlsdCBpdCdzIG9rLgorCSAgfHwgcnVsZSAkY2ZpbGUpCisJeworCSAgJnB1c2hfZGlzdF9jb21tb24gKCRjZmlsZSk7CisJfQorCisgICAgICAjIERvbid0IHVzZSBgZWxzaWYnIGhlcmUgYmVjYXVzZSBhIGZpbGUgbWlnaHQgbWVhbmluZ2Z1bGx5CisgICAgICAjIGFwcGVhciBpbiBib3RoIGRpcmVjdG9yaWVzLgorICAgICAgaWYgKCRjaGVja19hdXggJiYgZGlyX2hhc19jYXNlX21hdGNoaW5nX2ZpbGUgKCRjb25maWdfYXV4X2RpciwgJGNmaWxlKSkKKwl7CisJICAmcHVzaF9kaXN0X2NvbW1vbiAoIiRjb25maWdfYXV4X2Rpci8kY2ZpbGUiKQorCX0KKyAgICB9CisKKyAgIyBXZSBtaWdodCBjb3B5IGVsZW1lbnRzIGZyb20gJGNvbmZpZ3VyZV9kaXN0X2NvbW1vbiB0bworICAjICVkaXN0X2NvbW1vbiBpZiB3ZSB0aGluayB3ZSBuZWVkIHRvLiAgSWYgdGhlIGZpbGUgYXBwZWFycyBpbiBvdXIKKyAgIyBkaXJlY3RvcnksIHdlIHdvdWxkIGhhdmUgZGlzY292ZXJlZCBpdCBhbHJlYWR5LCBzbyB3ZSBkb24ndAorICAjIGNoZWNrIHRoYXQuICBCdXQgaWYgdGhlIGZpbGUgaXMgaW4gYSBzdWJkaXIgd2l0aG91dCBhIE1ha2VmaWxlLAorICAjIHdlIHdhbnQgdG8gZGlzdHJpYnV0ZSBpdCBoZXJlIGlmIHdlIGFyZSBkb2luZyBgLicuICBVZ2x5IQorICBpZiAoJHJlbGF0aXZlX2RpciBlcSAnLicpCisgICAgeworICAgICAgZm9yZWFjaCBteSAkZmlsZSAoc3BsaXQgKCcgJyAsICRjb25maWd1cmVfZGlzdF9jb21tb24pKQorCXsKKwkgIHB1c2hfZGlzdF9jb21tb24gKCRmaWxlKQorCSAgICB1bmxlc3MgaXNfbWFrZV9kaXIgKGRpcm5hbWUgKCRmaWxlKSk7CisJfQorICAgIH0KKworICAjIEZpbGVzIHRvIGRpc3RyaWJ1dGVkLiAgRG9uJ3QgdXNlIC0+dmFsdWVfYXNfbGlzdF9yZWN1cnNpdmUKKyAgIyBhcyBpdCByZWN1cnNpdmVseSBleHBhbmRzIGAkKGRpc3RfcGtnZGF0YV9EQVRBKScgZXRjLgorICBteSBAZGlzdF9jb21tb24gPSBzcGxpdCAoJyAnLCBydmFyICgnRElTVF9DT01NT04nKS0+dmFyaWFibGVfdmFsdWUpOworICBAZGlzdF9jb21tb24gPSB1bmlxIChzb3J0IGZvcl9kaXN0X2NvbW1vbiAoQGRpc3RfY29tbW9uKSk7CisgIHZhcmlhYmxlX2RlbGV0ZSAnRElTVF9DT01NT04nOworICBkZWZpbmVfcHJldHR5X3ZhcmlhYmxlICgnRElTVF9DT01NT04nLCBUUlVFLCBJTlRFUk5BTCwgQGRpc3RfY29tbW9uKTsKKworICAjIE5vdyB0aGF0IHdlJ3ZlIHByb2Nlc3NlZCBESVNUX0NPTU1PTiwgZGlzYWxsb3cgZnVydGhlciBhdHRlbXB0cworICAjIHRvIHNldCBpdC4KKyAgJGhhbmRsZV9kaXN0X3J1biA9IDE7CisKKyAgIyBTY2FuIEVYVFJBX0RJU1QgdG8gc2VlIGlmIHdlIG5lZWQgdG8gZGlzdHJpYnV0ZSBhbnl0aGluZyBmcm9tIGEKKyAgIyBzdWJkaXIuICBJZiBzbywgYWRkIGl0IHRvIHRoZSBsaXN0LiAgSSBkaWRuJ3Qgd2FudCB0byBkbyB0aGlzCisgICMgb3JpZ2luYWxseSwgYnV0IHRoZXJlIHdlcmUgc28gbWFueSByZXF1ZXN0cyB0aGF0IEkgZmluYWxseQorICAjIHJlbGVudGVkLgorICBteSAkZXh0cmFfZGlzdCA9IHZhciAoJ0VYVFJBX0RJU1QnKTsKKworICAkdHJhbnNmb3JteydESVNUQ0hFQ0stSE9PSyd9ID0gISEgcnVsZSAnZGlzdGNoZWNrLWhvb2snOworICAkdHJhbnNmb3JteydHRVRURVhUJ30gPSAkc2Vlbl9nZXR0ZXh0ICYmICEkc2Vlbl9nZXR0ZXh0X2V4dGVybmFsOworCisgICMgSWYgdGhlIHRhcmdldCBgZGlzdC1ob29rJyBleGlzdHMsIG1ha2Ugc3VyZSBpdCBpcyBydW4uICBUaGlzCisgICMgYWxsb3dzIHVzZXJzIHRvIGRvIHJhbmRvbSB3ZWlyZCB0aGluZ3MgdG8gdGhlIGRpc3RyaWJ1dGlvbgorICAjIGJlZm9yZSBpdCBpcyBwYWNrYWdlZCB1cC4KKyAgcHVzaCAoQGRpc3RfdGFyZ2V0cywgJ2Rpc3QtaG9vaycpCisgICAgaWYgdXNlcl9waG9ueV9ydWxlICdkaXN0LWhvb2snOworICAkdHJhbnNmb3JteydESVNULVRBUkdFVFMnfSA9IGpvaW4gKCcgJywgQGRpc3RfdGFyZ2V0cyk7CisKKyAgbXkgJGZsbSA9IG9wdGlvbiAoJ2ZpbGVuYW1lLWxlbmd0aC1tYXgnKTsKKyAgbXkgJGZpbGVuYW1lX2ZpbHRlciA9ICRmbG0gPyAnLicgeCAkZmxtLT5bMV0gOiAnJzsKKworICAkb3V0cHV0X3J1bGVzIC49ICZmaWxlX2NvbnRlbnRzICgnZGlzdGRpcicsCisJCQkJICAgbmV3IEF1dG9tYWtlOjpMb2NhdGlvbiwKKwkJCQkgICAldHJhbnNmb3JtLAorCQkJCSAgIEZJTEVOQU1FX0ZJTFRFUiA9PiAkZmlsZW5hbWVfZmlsdGVyKTsKK30KKworCisjIGNoZWNrX2RpcmVjdG9yeSAoJE5BTUUsICRXSEVSRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgJE5BTUUgaXMgYSBkaXJlY3RvcnksIGFuZCB0aGF0IGl0IHVzZXMgYSBzYW5lIG5hbWUuCisjIFVzZSAkV0hFUkUgYXMgYSBsb2NhdGlvbiBpbiB0aGUgZGlhZ25vc3RpYywgaWYgYW55Lgorc3ViIGNoZWNrX2RpcmVjdG9yeSAoJCQpCit7CisgIG15ICgkZGlyLCAkd2hlcmUpID0gQF87CisKKyAgZXJyb3IgJHdoZXJlLCAicmVxdWlyZWQgZGlyZWN0b3J5ICRyZWxhdGl2ZV9kaXIvJGRpciBkb2VzIG5vdCBleGlzdCIKKyAgICB1bmxlc3MgLWQgIiRyZWxhdGl2ZV9kaXIvJGRpciI7CisKKyAgIyBJZiBhbiBgb2JqLycgZGlyZWN0b3J5IGV4aXN0cywgQlNEIG1ha2Ugd2lsbCBlbnRlciBpdCBiZWZvcmUKKyAgIyByZWFkaW5nIGBNYWtlZmlsZScuICBIZW5jZSB0aGUgYE1ha2VmaWxlJyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkKKyAgIyB3aWxsIG5vdCBiZSByZWFkLgorICAjCisgICMgICUgY2F0IE1ha2VmaWxlCisgICMgIGFsbDoKKyAgIyAgICAgICAgICBlY2hvIEhlbGxvCisgICMgICUgY2F0IG9iai9NYWtlZmlsZQorICAjICBhbGw6CisgICMgICAgICAgICAgZWNobyBXb3JsZAorICAjICAlIG1ha2UgICAgICAjIEdOVSBtYWtlCisgICMgIGVjaG8gSGVsbG8KKyAgIyAgSGVsbG8KKyAgIyAgJSBwbWFrZSAgICAgIyBCU0QgbWFrZQorICAjICBlY2hvIFdvcmxkCisgICMgIFdvcmxkCisgIG1zZyAoJ3BvcnRhYmlsaXR5JywgJHdoZXJlLAorICAgICAgICJuYW1pbmcgYSBzdWJkaXJlY3RvcnkgYG9iaicgY2F1c2VzIHRyb3VibGVzIHdpdGggQlNEIG1ha2UiKQorICAgIGlmICRkaXIgZXEgJ29iaic7CisKKyAgIyBgYXV4JyBpcyBwcm9iYWJseSB0aGUgbW9zdCBpbXBvcnRhbnQgb2YgdGhlIGZvbGxvd2luZyBmb3JiaWRkZW4gbmFtZSwKKyAgIyBzaW5jZSBpdCdzIHRlbXB0aW5nIHRvIHVzZSBpdCBhcyBhbiBBQ19DT05GSUdfQVVYX0RJUi4KKyAgbXNnICgncG9ydGFiaWxpdHknLCAkd2hlcmUsCisgICAgICAgIm5hbWUgYCRkaXInIGlzIHJlc2VydmVkIG9uIFczMiBhbmQgRE9TIHBsYXRmb3JtcyIpCisgICAgaWYgZ3JlcCAoL15cUSRkaXJcRSQvaSwgcXcvYXV4IGxwdDEgbHB0MiBscHQzIGNvbTEgY29tMiBjb20zIGNvbTQgY29uIHBybi8pOworfQorCisjIGNoZWNrX2RpcmVjdG9yaWVzX2luX3ZhciAoJFZBUklBQkxFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVjdXJzaXZlbHkgY2hlY2sgYWxsIGl0ZW1zIGluIHZhcmlhYmxlcyAkVkFSSUFCTEUgYXMgZGlyZWN0b3JpZXMKK3N1YiBjaGVja19kaXJlY3Rvcmllc19pbl92YXIgKCQpCit7CisgIG15ICgkdmFyKSA9IEBfOworICAkdmFyLT50cmF2ZXJzZV9yZWN1cnNpdmVseQorICAgIChzdWIKKyAgICAgeworICAgICAgIG15ICgkdmFyLCAkdmFsLCAkY29uZCwgJGZ1bGxfY29uZCkgPSBAXzsKKyAgICAgICBjaGVja19kaXJlY3RvcnkgKCR2YWwsICR2YXItPnJkZWYgKCRjb25kKS0+bG9jYXRpb24pOworICAgICAgIHJldHVybiAoKTsKKyAgICAgfSwKKyAgICAgdW5kZWYsCisgICAgIHNraXBfYWNfc3Vic3QgPT4gMSk7Cit9CisKKyMgJmhhbmRsZV9zdWJkaXJzICgpCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBIYW5kbGUgc3ViZGlyZWN0b3JpZXMuCitzdWIgaGFuZGxlX3N1YmRpcnMgKCkKK3sKKyAgbXkgJHN1YmRpcnMgPSB2YXIgKCdTVUJESVJTJyk7CisgIHJldHVybgorICAgIHVubGVzcyAkc3ViZGlyczsKKworICBjaGVja19kaXJlY3Rvcmllc19pbl92YXIgJHN1YmRpcnM7CisKKyAgbXkgJGRzdWJkaXJzID0gdmFyICgnRElTVF9TVUJESVJTJyk7CisgIGNoZWNrX2RpcmVjdG9yaWVzX2luX3ZhciAkZHN1YmRpcnMKKyAgICBpZiAkZHN1YmRpcnM7CisKKyAgJG91dHB1dF9ydWxlcyAuPSAmZmlsZV9jb250ZW50cyAoJ3N1YmRpcnMnLCBuZXcgQXV0b21ha2U6OkxvY2F0aW9uKTsKKyAgcnZhciAoJ1JFQ1VSU0lWRV9UQVJHRVRTJyktPnJkZWYgKFRSVUUpLT57J3ByZXR0eSd9ID0gVkFSX1NPUlRFRDsgIyBHcm9zcyEKK30KKworCisjICgkUkVHRU4sIEBERVBFTkRFTkNJRVMpCisjICZzY2FuX2FjbG9jYWxfbTQKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBJZiBhY2xvY2FsLm00IGNyZWF0aW9uIGlzIGF1dG9tYXRlZCwgcmV0dXJuIHRoZSBsaXN0IG9mIGl0cyBkZXBlbmRlbmNpZXMuCitzdWIgc2Nhbl9hY2xvY2FsX200ICgpCit7CisgIG15ICRyZWdlbl9hY2xvY2FsID0gMDsKKworICBzZXRfc2VlbiAnQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMnOworICBzZXRfc2VlbiAnQ09ORklHVVJFX0RFUEVOREVOQ0lFUyc7CisKKyAgaWYgKC1mICdhY2xvY2FsLm00JykKKyAgICB7CisgICAgICAmZGVmaW5lX3ZhcmlhYmxlICgiQUNMT0NBTF9NNCIsICckKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQnLCBJTlRFUk5BTCk7CisKKyAgICAgIG15ICRhY2xvY2FsID0gbmV3IEF1dG9tYWtlOjpYRmlsZSAiPCBhY2xvY2FsLm00IjsKKyAgICAgIG15ICRsaW5lID0gJGFjbG9jYWwtPmdldGxpbmU7CisgICAgICAkcmVnZW5fYWNsb2NhbCA9ICRsaW5lID1+ICdnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBhY2xvY2FsJzsKKyAgICB9CisKKyAgbXkgQGFjX2RlcHMgPSAoKTsKKworICBpZiAoc2V0X3NlZW4gKCdBQ0xPQ0FMX000X1NPVVJDRVMnKSkKKyAgICB7CisgICAgICBwdXNoIChAYWNfZGVwcywgJyQoQUNMT0NBTF9NNF9TT1VSQ0VTKScpOworICAgICAgbXNnX3ZhciAoJ29ic29sZXRlJywgJ0FDTE9DQUxfTTRfU09VUkNFUycsCisJICAgICAgICJgQUNMT0NBTF9NNF9TT1VSQ0VTJyBpcyBvYnNvbGV0ZS5cbiIKKwkgICAgICAgLiAiSXQgc2hvdWxkIGJlIHNhZmUgdG8gc2ltcGx5IHJlbW92ZSBpdC4iKTsKKyAgICB9CisKKyAgIyBOb3RlIHRoYXQgaXQgbWlnaHQgYmUgcG9zc2libGUgdGhhdCBhY2xvY2FsLm00IGRvZXNuJ3QgZXhpc3QgYnV0CisgICMgc2hvdWxkIGJlIGF1dG8tZ2VuZXJhdGVkLiAgVGhpcyBjYXNlIHByb2JhYmx5IGlzbid0IHZlcnkKKyAgIyBpbXBvcnRhbnQuCisKKyAgcmV0dXJuICgkcmVnZW5fYWNsb2NhbCwgQGFjX2RlcHMpOworfQorCisKKyMgSGVscGVyIGZ1bmN0aW9uIGZvciBzdWJzdGl0dXRlX2FjX3N1YnN0X3ZhcmlhYmxlcy4KK3N1YiBzdWJzdGl0dXRlX2FjX3N1YnN0X3ZhcmlhYmxlc193b3JrZXIoJCkKK3sKKyAgbXkgKCR0b2tlbikgPSBAXzsKKyAgcmV0dXJuICJcQCR0b2tlblxAIiBpZiB2YXIgJHRva2VuOworICByZXR1cm4gIlwkeyR0b2tlblx9IjsKK30KKworIyBzdWJzdGl0dXRlX2FjX3N1YnN0X3ZhcmlhYmxlcyAoJFRFWFQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVwbGFjZSBhbnkgb2NjdXJyZW5jZSBvZiAke0ZPT30gaW4gJFRFWFQgYnkgQEZPT0AgaWYgRk9PIGlzIGFuIEFDX1NVQlNUCisjIHZhcmlhYmxlLgorc3ViIHN1YnN0aXR1dGVfYWNfc3Vic3RfdmFyaWFibGVzICgkKQoreworICBteSAoJHRleHQpID0gQF87CisgICR0ZXh0ID1+IHMvXCR7KFteIFx0PTore31dKyl9LyZzdWJzdGl0dXRlX2FjX3N1YnN0X3ZhcmlhYmxlc193b3JrZXIgKCQxKS9nZTsKKyAgcmV0dXJuICR0ZXh0OworfQorCisjIEBERVBFTkRFTkNJRVMKKyMgJnByZXBlbmRfc3JjZGlyIChASU5QVVRTKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByZXBlbmQgJChzcmNkaXIpIG9yICQodG9wX3NyY2RpcikgdG8gYWxsIEBJTlBVVFMuICBUaGUgaWRlYSBpcyB0aGF0CisjIGlmIGFuIGlucHV0IGZpbGUgaGFzIGEgZGlyZWN0b3J5IHBhcnQgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQKKyMgZGlyZWN0b3J5LCB0aGVuIHRoZSBkaXJlY3RvcnkgcGFydCBpcyBzaW1wbHkgcmVwbGFjZWQgYnkgJChzcmNkaXIpLgorIyBCdXQgaWYgdGhlIGRpcmVjdG9yeSBwYXJ0IGlzIGRpZmZlcmVudCwgdGhlbiAkKHRvcF9zcmNkaXIpIGlzCisjIHByZXBlbmRlZC4KK3N1YiBwcmVwZW5kX3NyY2RpciAoQCkKK3sKKyAgbXkgKEBpbnB1dHMpID0gQF87CisgIG15IEBuZXdpbnB1dHM7CisKKyAgZm9yZWFjaCBteSAkc2luZ2xlIChAaW5wdXRzKQorICAgIHsKKyAgICAgIGlmIChkaXJuYW1lICgkc2luZ2xlKSBlcSAkcmVsYXRpdmVfZGlyKQorCXsKKwkgIHB1c2ggKEBuZXdpbnB1dHMsICckKHNyY2RpcikvJyAuIGJhc2VuYW1lICgkc2luZ2xlKSk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHB1c2ggKEBuZXdpbnB1dHMsICckKHRvcF9zcmNkaXIpLycgLiAkc2luZ2xlKTsKKwl9CisgICAgfQorICByZXR1cm4gQG5ld2lucHV0czsKK30KKworIyBAREVQRU5ERU5DSUVTCisjIHJld3JpdGVfaW5wdXRzX2ludG9fZGVwZW5kZW5jaWVzICgkT1VUUFVULCBASU5QVVRTKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcHV0ZSBhIGxpc3Qgb2YgZGVwZW5kZW5jaWVzIGFwcHJvcHJpYXRlIGZvciB0aGUgcmVidWlsZAorIyBydWxlIG9mCisjICAgQUNfQ09ORklHX0ZJTEVTKCRPVVRQVVQ6JElOUFVUWzBdOiRJTlBVVFNbMV06Li4uKQorIyBBbHNvIGRpc3RyaWJ1dGUgJElOUFVUcyB3aGljaCBhcmUgbm90IGJ1aWx0IGJ5IGFub3RoZXIgQUNfQ09ORklHX0ZPT1MuCitzdWIgcmV3cml0ZV9pbnB1dHNfaW50b19kZXBlbmRlbmNpZXMgKCRAKQoreworICBteSAoJGZpbGUsIEBpbnB1dHMpID0gQF87CisgIG15IEByZXMgPSAoKTsKKworICBmb3IgbXkgJGkgKEBpbnB1dHMpCisgICAgeworICAgICAgIyBXZSBjYW5ub3QgY3JlYXRlIGRlcGVuZGVuY2llcyBvbiBzaGVsbCB2YXJpYWJsZXMuCisgICAgICBuZXh0IGlmIChzdWJzdGl0dXRlX2FjX3N1YnN0X3ZhcmlhYmxlcyAkaSkgPX4gL1wkLzsKKworICAgICAgaWYgKGV4aXN0cyAkYWNfY29uZmlnX2ZpbGVzX2xvY2F0aW9ueyRpfSAmJiAkaSBuZSAkZmlsZSkKKwl7CisJICBteSAkZGkgPSBkaXJuYW1lICRpOworCSAgaWYgKCRkaSBlcSAkcmVsYXRpdmVfZGlyKQorCSAgICB7CisJICAgICAgJGkgPSBiYXNlbmFtZSAkaTsKKwkgICAgfQorCSAgIyBJbiB0aGUgdG9wLWxldmVsIE1ha2VmaWxlIHdlIGRvIG5vdCB1c2UgJCh0b3BfYnVpbGRkaXIpLCBiZWNhdXNlCisJICAjIHdlIGFyZSBhbHJlYWR5IHRoZXJlLCBhbmQgc2luY2UgdGhlIHRhcmdldHMgYXJlIGJ1aWx0IHdpdGhvdXQKKwkgICMgYSAkKHRvcF9idWlsZGRpciksIGl0IGhlbHBzIEJTRCBNYWtlIHRvIG1hdGNoIHRoZW0gd2l0aAorCSAgIyBkZXBlbmRlbmNpZXMuCisJICBlbHNpZiAoJHJlbGF0aXZlX2RpciBuZSAnLicpCisJICAgIHsKKwkgICAgICAkaSA9ICckKHRvcF9idWlsZGRpcikvJyAuICRpOworCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIG1zZyAoJ2Vycm9yJywgJGFjX2NvbmZpZ19maWxlc19sb2NhdGlvbnskZmlsZX0sCisJICAgICAgICJyZXF1aXJlZCBmaWxlIGAkaScgbm90IGZvdW5kIikKKwkgICAgdW5sZXNzICRpID1+IC9cJC8gfHwgZXhpc3RzICRvdXRwdXRfZmlsZXN7JGl9IHx8IC1mICRpOworCSAgKCRpKSA9IHByZXBlbmRfc3JjZGlyICgkaSk7CisJICBwdXNoX2Rpc3RfY29tbW9uICgkaSk7CisJfQorICAgICAgcHVzaCBAcmVzLCAkaTsKKyAgICB9CisgIHJldHVybiBAcmVzOworfQorCisKKworIyAmaGFuZGxlX2NvbmZpZ3VyZSAoJE1BS0VGSUxFX0FNLCAkTUFLRUZJTEVfSU4sICRNQUtFRklMRSwgQElOUFVUUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEhhbmRsZSByZW1ha2luZyBhbmQgY29uZmlndXJlIHN0dWZmLgorIyBXZSBuZWVkIHRoZSBuYW1lIG9mIHRoZSBpbnB1dCBmaWxlLCB0byBkbyBwcm9wZXIgcmVtYWtpbmcgcnVsZXMuCitzdWIgaGFuZGxlX2NvbmZpZ3VyZSAoJCQkQCkKK3sKKyAgbXkgKCRtYWtlZmlsZV9hbSwgJG1ha2VmaWxlX2luLCAkbWFrZWZpbGUsIEBpbnB1dHMpID0gQF87CisKKyAgcHJvZ19lcnJvciAnZW1wdHkgQGlucHV0cycKKyAgICB1bmxlc3MgQGlucHV0czsKKworICBteSAoJHJlbF9tYWtlZmlsZV9hbSwgJHJlbF9tYWtlZmlsZV9pbikgPSBwcmVwZW5kX3NyY2RpciAoJG1ha2VmaWxlX2FtLAorCQkJCQkJCSAgICAkbWFrZWZpbGVfaW4pOworICBteSAkcmVsX21ha2VmaWxlID0gYmFzZW5hbWUgJG1ha2VmaWxlOworCisgIG15ICRjb2xvbl9pbmZpbGUgPSAnOicgLiBqb2luICgnOicsIEBpbnB1dHMpOworICAkY29sb25faW5maWxlID0gJycgaWYgJGNvbG9uX2luZmlsZSBlcSAiOiRtYWtlZmlsZS5pbiI7CisgIG15IEByZXdyaXR0ZW4gPSByZXdyaXRlX2lucHV0c19pbnRvX2RlcGVuZGVuY2llcyAoJG1ha2VmaWxlLCBAaW5wdXRzKTsKKyAgbXkgKCRyZWdlbl9hY2xvY2FsX200LCBAYWNsb2NhbF9tNF9kZXBzKSA9IHNjYW5fYWNsb2NhbF9tNDsKKyAgZGVmaW5lX3ByZXR0eV92YXJpYWJsZSAoJ2FtX19hY2xvY2FsX200X2RlcHMnLCBUUlVFLCBJTlRFUk5BTCwKKwkJCSAgQGNvbmZpZ3VyZV9kZXBzLCBAYWNsb2NhbF9tNF9kZXBzLAorCQkJICAnJCh0b3Bfc3JjZGlyKS8nIC4gJGNvbmZpZ3VyZV9hYyk7CisgIG15IEBjb25maWd1cmVkZXBzID0gKCckKGFtX19hY2xvY2FsX200X2RlcHMpJywgJyQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUyknKTsKKyAgcHVzaCBAY29uZmlndXJlZGVwcywgJyQoQUNMT0NBTF9NNCknIGlmIC1mICdhY2xvY2FsLm00JzsKKyAgZGVmaW5lX3ByZXR0eV92YXJpYWJsZSAoJ2FtX19jb25maWd1cmVfZGVwcycsIFRSVUUsIElOVEVSTkFMLAorCQkJICBAY29uZmlndXJlZGVwcyk7CisKKyAgbXkgJGF1dG9tYWtlX29wdGlvbnMgPSAnLS0nIC4gKGdsb2JhbF9vcHRpb24gJ2N5Z251cycgPyAnY3lnbnVzJyA6ICRzdHJpY3RuZXNzX25hbWUpCisJCQkgLiAoZ2xvYmFsX29wdGlvbiAnbm8tZGVwZW5kZW5jaWVzJyA/ICcgLS1pZ25vcmUtZGVwcycgOiAnJyk7CisKKyAgJG91dHB1dF9ydWxlcyAuPSBmaWxlX2NvbnRlbnRzCisgICAgKCdjb25maWd1cmUnLAorICAgICBuZXcgQXV0b21ha2U6OkxvY2F0aW9uLAorICAgICBNQUtFRklMRSAgICAgICAgICAgICAgPT4gJHJlbF9tYWtlZmlsZSwKKyAgICAgJ01BS0VGSUxFLURFUFMnICAgICAgID0+ICJAcmV3cml0dGVuIiwKKyAgICAgJ0NPTkZJRy1NQUtFRklMRScgICAgID0+ICgkcmVsYXRpdmVfZGlyIGVxICcuJykgPyAnJEAnIDogJyQoc3ViZGlyKS8kQCcsCisgICAgICdNQUtFRklMRS1JTicgICAgICAgICA9PiAkcmVsX21ha2VmaWxlX2luLAorICAgICAnTUFLRUZJTEUtSU4tREVQUycgICAgPT4gIkBpbmNsdWRlX3N0YWNrIiwKKyAgICAgJ01BS0VGSUxFLUFNJyAgICAgICAgID0+ICRyZWxfbWFrZWZpbGVfYW0sCisgICAgICdBVVRPTUFLRS1PUFRJT05TJyAgICA9PiAkYXV0b21ha2Vfb3B0aW9ucywKKyAgICAgJ01BS0VGSUxFLUFNLVNPVVJDRVMnID0+ICIkbWFrZWZpbGUkY29sb25faW5maWxlIiwKKyAgICAgJ1JFR0VOLUFDTE9DQUwtTTQnICAgID0+ICRyZWdlbl9hY2xvY2FsX200LAorICAgICBWRVJCT1NFICAgICAgICAgICAgICAgPT4gdmVyYm9zZV9mbGFnICgnR0VOJykpOworCisgIGlmICgkcmVsYXRpdmVfZGlyIGVxICcuJykKKyAgICB7CisgICAgICAmcHVzaF9kaXN0X2NvbW1vbiAoJ2FjY29uZmlnLmgnKQorCWlmIC1mICdhY2NvbmZpZy5oJzsKKyAgICB9CisKKyAgIyBJZiB3ZSBoYXZlIGEgY29uZmlndXJlIGhlYWRlciwgcmVxdWlyZSBpdC4KKyAgbXkgJGhkcl9pbmRleCA9IDA7CisgIG15IEBkaXN0Y2xlYW5fY29uZmlnOworICBmb3JlYWNoIG15ICRzcGVjIChAY29uZmlnX2hlYWRlcnMpCisgICAgeworICAgICAgJGhkcl9pbmRleCArPSAxOworICAgICAgIyAkQ09ORklHX0hfUEFUSDogY29uZmlnLmggZnJvbSB0b3AgbGV2ZWwuCisgICAgICBteSAoJGNvbmZpZ19oX3BhdGgsIEBpbnMpID0gc3BsaXRfY29uZmlnX2ZpbGVfc3BlYyAoJHNwZWMpOworICAgICAgbXkgJGNvbmZpZ19oX2RpciA9IGRpcm5hbWUgKCRjb25maWdfaF9wYXRoKTsKKworICAgICAgIyBJZiB0aGUgaGVhZGVyIGlzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3ZSB3YW50IHRvIGJ1aWxkCisgICAgICAjIHRoZSBoZWFkZXIgaGVyZS4gIE90aGVyd2lzZSwgaWYgd2UncmUgYXQgdGhlIHRvcG1vc3QKKyAgICAgICMgZGlyZWN0b3J5IGFuZCB0aGUgaGVhZGVyJ3MgZGlyZWN0b3J5IGRvZXNuJ3QgaGF2ZSBhCisgICAgICAjIE1ha2VmaWxlLCB0aGVuIHdlIGFsc28gd2FudCB0byBidWlsZCB0aGUgaGVhZGVyLgorICAgICAgaWYgKCRyZWxhdGl2ZV9kaXIgZXEgJGNvbmZpZ19oX2RpcgorCSAgfHwgKCRyZWxhdGl2ZV9kaXIgZXEgJy4nICYmICEgJmlzX21ha2VfZGlyICgkY29uZmlnX2hfZGlyKSkpCisJeworCSAgbXkgKCRjbl9zYW5zX2RpciwgJHN0YW1wX2Rpcik7CisJICBpZiAoJHJlbGF0aXZlX2RpciBlcSAkY29uZmlnX2hfZGlyKQorCSAgICB7CisJICAgICAgJGNuX3NhbnNfZGlyID0gYmFzZW5hbWUgKCRjb25maWdfaF9wYXRoKTsKKwkgICAgICAkc3RhbXBfZGlyID0gJyc7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgICRjbl9zYW5zX2RpciA9ICRjb25maWdfaF9wYXRoOworCSAgICAgIGlmICgkY29uZmlnX2hfZGlyIGVxICcuJykKKwkJeworCQkgICRzdGFtcF9kaXIgPSAnJzsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgICRzdGFtcF9kaXIgPSAkY29uZmlnX2hfZGlyIC4gJy8nOworCQl9CisJICAgIH0KKworCSAgIyBUaGlzIHdpbGwgYWxzbyBkaXN0cmlidXRlIGFsbCBpbnB1dHMuCisJICBAaW5zID0gcmV3cml0ZV9pbnB1dHNfaW50b19kZXBlbmRlbmNpZXMgKCRjb25maWdfaF9wYXRoLCBAaW5zKTsKKworCSAgIyBDYW5ub3QgZGVmaW5lIHJlYnVpbGQgcnVsZXMgZm9yIGZpbGVuYW1lcyB3aXRoIHNoZWxsIHZhcmlhYmxlcy4KKwkgIG5leHQgaWYgKHN1YnN0aXR1dGVfYWNfc3Vic3RfdmFyaWFibGVzICRjb25maWdfaF9wYXRoKSA9fiAvXCQvOworCisJICAjIEhlYWRlciBkZWZpbmVkIGluIHRoaXMgZGlyZWN0b3J5LgorCSAgbXkgQGZpbGVzOworCSAgaWYgKC1mICRjb25maWdfaF9wYXRoIC4gJy50b3AnKQorCSAgICB7CisJICAgICAgcHVzaCAoQGZpbGVzLCAiJGNuX3NhbnNfZGlyLnRvcCIpOworCSAgICB9CisJICBpZiAoLWYgJGNvbmZpZ19oX3BhdGggLiAnLmJvdCcpCisJICAgIHsKKwkgICAgICBwdXNoIChAZmlsZXMsICIkY25fc2Fuc19kaXIuYm90Iik7CisJICAgIH0KKworCSAgcHVzaF9kaXN0X2NvbW1vbiAoQGZpbGVzKTsKKworCSAgIyBGb3Igbm93LCBhY2NvbmZpZy5oIGNhbiBvbmx5IGFwcGVhciBpbiB0aGUgdG9wIHNyY2Rpci4KKwkgIGlmICgtZiAnYWNjb25maWcuaCcpCisJICAgIHsKKwkgICAgICBwdXNoIChAZmlsZXMsICckKHRvcF9zcmNkaXIpL2FjY29uZmlnLmgnKTsKKwkgICAgfQorCisJICBteSAkc3RhbXAgPSAiJHtzdGFtcF9kaXJ9c3RhbXAtaCR7aGRyX2luZGV4fSI7CisJICAkb3V0cHV0X3J1bGVzIC49CisJICAgIGZpbGVfY29udGVudHMgKCdyZW1ha2UtaGRyJywKKwkJCSAgIG5ldyBBdXRvbWFrZTo6TG9jYXRpb24sCisJCQkgICBGSUxFUyAgICAgICAgICAgID0+ICJAZmlsZXMiLAorCQkJICAgQ09ORklHX0ggICAgICAgICA9PiAkY25fc2Fuc19kaXIsCisJCQkgICBDT05GSUdfSElOICAgICAgID0+ICRpbnNbMF0sCisJCQkgICBDT05GSUdfSF9ERVBTICAgID0+ICJAaW5zIiwKKwkJCSAgIENPTkZJR19IX1BBVEggICAgPT4gJGNvbmZpZ19oX3BhdGgsCisJCQkgICBTVEFNUCAgICAgICAgICAgID0+ICIkc3RhbXAiKTsKKworCSAgcHVzaCBAZGlzdGNsZWFuX2NvbmZpZywgJGNuX3NhbnNfZGlyLCAkc3RhbXA7CisJfQorICAgIH0KKworICAkb3V0cHV0X3J1bGVzIC49IGZpbGVfY29udGVudHMgKCdjbGVhbi1oZHInLAorCQkJCSAgbmV3IEF1dG9tYWtlOjpMb2NhdGlvbiwKKwkJCQkgIEZJTEVTID0+ICJAZGlzdGNsZWFuX2NvbmZpZyIpCisgICAgaWYgQGRpc3RjbGVhbl9jb25maWc7CisKKyAgIyBEaXN0cmlidXRlIGFuZCBkZWZpbmUgbWtpbnN0YWxsZGlycyBvbmx5IGlmIGl0IGlzIGFscmVhZHkgcHJlc2VudAorICAjIGluIHRoZSBwYWNrYWdlLCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAoc29tZSBwZW9wbGUgbWF5IHN0aWxsCisgICMgdXNlICQobWtpbnN0YWxsZGlycykpLgorICBteSAkbWtpZHBhdGggPSAiJGNvbmZpZ19hdXhfZGlyL21raW5zdGFsbGRpcnMiOworICBpZiAoLWYgJG1raWRwYXRoKQorICAgIHsKKyAgICAgICMgVXNlIHJlcXVpcmVfZmlsZSBzbyB0aGF0IGFueSBleGlzdGluZyBzY3JpcHQgZ2V0cyB1cGRhdGVkCisgICAgICAjIGJ5IC0tZm9yY2UtbWlzc2luZy4KKyAgICAgIHJlcXVpcmVfY29uZl9maWxlICgkbWtpZHBhdGgsIEZPUkVJR04sICdta2luc3RhbGxkaXJzJyk7CisgICAgICBkZWZpbmVfdmFyaWFibGUgKCdta2luc3RhbGxkaXJzJywKKwkJICAgICAgICJcJChTSEVMTCkgJGFtX2NvbmZpZ19hdXhfZGlyL21raW5zdGFsbGRpcnMiLCBJTlRFUk5BTCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgIyBVc2UgJChpbnN0YWxsX3NoKSwgbm90ICQoTUtESVJfUCkgYmVjYXVzZSB0aGUgbGF0dGVyIHJlcXVpcmVzCisgICAgICAjIGF0IGxlYXN0IG9uZSBhcmd1bWVudCwgYW5kICQobWtpbnN0YWxsZGlycykgdXNlZCB0byB3b3JrCisgICAgICAjIGV2ZW4gd2l0aG91dCBhcmd1bWVudHMgKGUuZy4gJChta2luc3RhbGxkaXJzKSAkKGNvbmRpdGlvbmFsX2RpcikpLgorICAgICAgZGVmaW5lX3ZhcmlhYmxlICgnbWtpbnN0YWxsZGlycycsICckKGluc3RhbGxfc2gpIC1kJywgSU5URVJOQUwpOworICAgIH0KKworICByZWplY3RfdmFyICgnQ09ORklHX0hFQURFUicsCisJICAgICAgImBDT05GSUdfSEVBREVSJyBpcyBhbiBhbmFjaHJvbmlzbTsgbm93IGRldGVybWluZWQgIgorCSAgICAgIC4gImF1dG9tYXRpY2FsbHlcbmZyb20gYCRjb25maWd1cmVfYWMnIik7CisKKyAgbXkgQGNvbmZpZ19oOworICBmb3JlYWNoIG15ICRzcGVjIChAY29uZmlnX2hlYWRlcnMpCisgICAgeworICAgICAgbXkgKCRvdXQsIEBpbnMpID0gc3BsaXRfY29uZmlnX2ZpbGVfc3BlYyAoJHNwZWMpOworICAgICAgIyBHZW5lcmF0ZSBDT05GSUdfSEVBREVSIGRlZmluZS4KKyAgICAgIGlmICgkcmVsYXRpdmVfZGlyIGVxIGRpcm5hbWUgKCRvdXQpKQorCXsKKwkgIHB1c2ggQGNvbmZpZ19oLCBiYXNlbmFtZSAoJG91dCk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHB1c2ggQGNvbmZpZ19oLCAiXCQodG9wX2J1aWxkZGlyKS8kb3V0IjsKKwl9CisgICAgfQorICBkZWZpbmVfdmFyaWFibGUgKCJDT05GSUdfSEVBREVSIiwgIkBjb25maWdfaCIsIElOVEVSTkFMKQorICAgIGlmIEBjb25maWdfaDsKKworICAjIE5vdyBsb29rIGZvciBvdGhlciBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSB3aGljaCBtdXN0IGJlIHJlbWFkZQorICAjIGJ5IGNvbmZpZy5zdGF0dXMsIGFuZCBnZW5lcmF0ZSBydWxlcyBmb3IgdGhlbS4KKyAgbXkgQGFjdHVhbF9vdGhlcl9maWxlcyA9ICgpOworICAjIFRoZXNlIGdldCBjbGVhbmVkIG9ubHkgaW4gYSBWUEFUSCBidWlsZC4KKyAgbXkgQGFjdHVhbF9vdGhlcl92cGF0aF9maWxlcyA9ICgpOworICBmb3JlYWNoIG15ICRsZmlsZSAoQG90aGVyX2lucHV0X2ZpbGVzKQorICAgIHsKKyAgICAgIG15ICRmaWxlOworICAgICAgbXkgQGlucHV0czsKKyAgICAgIGlmICgkbGZpbGUgPX4gL14oW146XSopOiguKikkLykKKwl7CisJICAjIFRoaXMgaXMgdGhlICI6IiBzeW50YXggb2YgQUNfT1VUUFVULgorCSAgJGZpbGUgPSAkMTsKKwkgIEBpbnB1dHMgPSBzcGxpdCAoJzonLCAkMik7CisJfQorICAgICAgZWxzZQorCXsKKwkgICMgTm9ybWFsIHVzYWdlLgorCSAgJGZpbGUgPSAkbGZpbGU7CisJICBAaW5wdXRzID0gJGZpbGUgLiAnLmluJzsKKwl9CisKKyAgICAgICMgQXV0b21ha2UgZmlsZXMgc2hvdWxkIG5vdCBiZSBzdG9yZWQgaW4gaGVyZSwgYnV0IGluICVNQUtFX0xJU1QuCisgICAgICBwcm9nX2Vycm9yICgiJGxmaWxlIGluIFxAb3RoZXJfaW5wdXRfZmlsZXNcbiIKKwkJICAuICJcQG90aGVyX2lucHV0X2ZpbGVzID0gKEBvdGhlcl9pbnB1dF9maWxlcykiKQorCWlmIC1mICRmaWxlIC4gJy5hbSc7CisKKyAgICAgIG15ICRsb2NhbCA9IGJhc2VuYW1lICgkZmlsZSk7CisKKyAgICAgICMgV2Ugc2tpcCBmaWxlcyB0aGF0IGFyZW4ndCBpbiB0aGlzIGRpcmVjdG9yeS4gIEhvd2V2ZXIsIGlmCisgICAgICAjIHRoZSBmaWxlJ3MgZGlyZWN0b3J5IGRvZXMgbm90IGhhdmUgYSBNYWtlZmlsZSwgYW5kIHdlIGFyZQorICAgICAgIyBjdXJyZW50bHkgZG9pbmcgYC4nLCB0aGVuIHdlIGNyZWF0ZSBhIHJ1bGUgdG8gcmVidWlsZCB0aGUKKyAgICAgICMgZmlsZSBpbiB0aGUgc3ViZGlyLgorICAgICAgbXkgJGZkID0gZGlybmFtZSAoJGZpbGUpOworICAgICAgaWYgKCRmZCBuZSAkcmVsYXRpdmVfZGlyKQorCXsKKwkgIGlmICgkcmVsYXRpdmVfZGlyIGVxICcuJyAmJiAhICZpc19tYWtlX2RpciAoJGZkKSkKKwkgICAgeworCSAgICAgICRsb2NhbCA9ICRmaWxlOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBuZXh0OworCSAgICB9CisJfQorCisgICAgICBteSBAcmV3cml0dGVuX2lucHV0cyA9IHJld3JpdGVfaW5wdXRzX2ludG9fZGVwZW5kZW5jaWVzICgkZmlsZSwgQGlucHV0cyk7CisKKyAgICAgICMgQ2Fubm90IG91dHB1dCBydWxlcyBmb3Igc2hlbGwgdmFyaWFibGVzLgorICAgICAgbmV4dCBpZiAoc3Vic3RpdHV0ZV9hY19zdWJzdF92YXJpYWJsZXMgJGxvY2FsKSA9fiAvXCQvOworCisgICAgICBteSAkY29uZHN0ciA9ICcnOworICAgICAgbXkgJGNvbmQgPSAkYWNfY29uZmlnX2ZpbGVzX2NvbmRpdGlvbnskbGZpbGV9OworICAgICAgaWYgKGRlZmluZWQgJGNvbmQpCisgICAgICAgIHsKKwkgICRjb25kc3RyID0gJGNvbmQtPnN1YnN0X3N0cmluZzsKKwkgIEF1dG9tYWtlOjpSdWxlOjpkZWZpbmUgKCRsb2NhbCwgJGNvbmZpZ3VyZV9hYywgUlVMRV9BVVRPTUFLRSwgJGNvbmQsCisJCQkJICAkYWNfY29uZmlnX2ZpbGVzX2xvY2F0aW9ueyRmaWxlfSk7CisgICAgICAgIH0KKyAgICAgICRvdXRwdXRfcnVsZXMgLj0gKCRjb25kc3RyIC4gJGxvY2FsIC4gJzogJworCQkJLiAnJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJworCQkJLiAiQHJld3JpdHRlbl9pbnB1dHNcbiIKKwkJCS4gJGNvbmRzdHIgLiAiXHQiCisJCQkuICdjZCAkKHRvcF9idWlsZGRpcikgJiYgJworCQkJLiAnJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICcKKwkJCS4gKCRyZWxhdGl2ZV9kaXIgZXEgJy4nID8gJycgOiAnJChzdWJkaXIpLycpCisJCQkuICckQCcKKwkJCS4gIlxuIik7CisgICAgICBwdXNoIChAYWN0dWFsX290aGVyX2ZpbGVzLCAkbG9jYWwpOworICAgIH0KKworICAjIEZvciBsaW5rcyB3ZSBzaG91bGQgY2xlYW4gZGVzdGluYXRpb25zIGFuZCBkaXN0cmlidXRlIHNvdXJjZXMuCisgIGZvcmVhY2ggbXkgJHNwZWMgKEBjb25maWdfbGlua3MpCisgICAgeworICAgICAgbXkgKCRsaW5rLCAkZmlsZSkgPSBzcGxpdCAvOi8sICRzcGVjOworICAgICAgIyBTb21lIHBlb3BsZSBkbyBBQ19DT05GSUdfTElOS1MoJGNvbXB1dGVkKS4gIFdlIG9ubHkgaGFuZGxlCisgICAgICAjIHRoZSBERVNUOlNSQyBmb3JtLgorICAgICAgbmV4dCB1bmxlc3MgJGZpbGU7CisgICAgICBteSAkd2hlcmUgPSAkYWNfY29uZmlnX2ZpbGVzX2xvY2F0aW9ueyRsaW5rfTsKKworICAgICAgIyBTa2lwIGRlc3RpbmF0aW9ucyB0aGF0IGNvbnRhaW4gc2hlbGwgdmFyaWFibGVzLgorICAgICAgaWYgKChzdWJzdGl0dXRlX2FjX3N1YnN0X3ZhcmlhYmxlcyAkbGluaykgIX4gL1wkLykKKwl7CisJICAjIFdlIHNraXAgbGlua3MgdGhhdCBhcmVuJ3QgaW4gdGhpcyBkaXJlY3RvcnkuICBIb3dldmVyLCBpZgorCSAgIyB0aGUgbGluaydzIGRpcmVjdG9yeSBkb2VzIG5vdCBoYXZlIGEgTWFrZWZpbGUsIGFuZCB3ZSBhcmUKKwkgICMgY3VycmVudGx5IGRvaW5nIGAuJywgdGhlbiB3ZSBhZGQgdGhlIGxpbmsgdG8gQ09ORklHX0NMRUFOX0ZJTEVTCisJICAjIGluIGAuJ3MgTWFrZWZpbGUuaW4uCisJICBteSAkbG9jYWwgPSBiYXNlbmFtZSAoJGxpbmspOworCSAgbXkgJGZkID0gZGlybmFtZSAoJGxpbmspOworCSAgaWYgKCRmZCBuZSAkcmVsYXRpdmVfZGlyKQorCSAgICB7CisJICAgICAgaWYgKCRyZWxhdGl2ZV9kaXIgZXEgJy4nICYmICEgJmlzX21ha2VfZGlyICgkZmQpKQorCQl7CisJCSAgJGxvY2FsID0gJGxpbms7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICAkbG9jYWwgPSB1bmRlZjsKKwkJfQorCSAgICB9CisJICBpZiAoJGZpbGUgbmUgJGxpbmspCisJICAgIHsKKwkgICAgICBwdXNoIEBhY3R1YWxfb3RoZXJfZmlsZXMsICRsb2NhbCBpZiAkbG9jYWw7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHB1c2ggQGFjdHVhbF9vdGhlcl92cGF0aF9maWxlcywgJGxvY2FsIGlmICRsb2NhbDsKKwkgICAgfQorCX0KKworICAgICAgIyBEbyBub3QgcHJvY2VzcyBzb3VyY2VzIHRoYXQgY29udGFpbiBzaGVsbCB2YXJpYWJsZXMuCisgICAgICBpZiAoKHN1YnN0aXR1dGVfYWNfc3Vic3RfdmFyaWFibGVzICRmaWxlKSAhfiAvXCQvKQorCXsKKwkgIG15ICRmZCA9IGRpcm5hbWUgKCRmaWxlKTsKKworCSAgIyBXZSBkaXN0cmlidXRlIGZpbGVzIHRoYXQgYXJlIGluIHRoaXMgZGlyZWN0b3J5LgorCSAgIyBBdCB0aGUgdG9wLWxldmVsIChgLicpIHdlIGFsc28gZGlzdHJpYnV0ZSBmaWxlcyB3aG9zZQorCSAgIyBkaXJlY3RvcnkgZG9lcyBub3QgaGF2ZSBhIE1ha2VmaWxlLgorCSAgaWYgKCgkZmQgZXEgJHJlbGF0aXZlX2RpcikKKwkgICAgICB8fCAoJHJlbGF0aXZlX2RpciBlcSAnLicgJiYgISAmaXNfbWFrZV9kaXIgKCRmZCkpKQorCSAgICB7CisJICAgICAgIyBUaGUgZm9sbG93aW5nIHdpbGwgZGlzdHJpYnV0ZSAkZmlsZSBhcyBhIHNpZGUtZWZmZWN0IHdoZW4KKwkgICAgICAjIGl0IGlzIGFwcHJvcHJpYXRlIChpLmUuLCB3aGVuICRmaWxlIGlzIG5vdCBhbHJlYWR5IGFuIG91dHB1dCkuCisJICAgICAgIyBXZSBkbyBub3QgbmVlZCB0aGUgcmVzdWx0LCBqdXN0IHRoZSBzaWRlLWVmZmVjdC4KKwkgICAgICByZXdyaXRlX2lucHV0c19pbnRvX2RlcGVuZGVuY2llcyAoJGxpbmssICRmaWxlKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgIyBUaGVzZSBmaWxlcyBnZXQgcmVtb3ZlZCBieSAibWFrZSBkaXN0Y2xlYW4iLgorICBkZWZpbmVfcHJldHR5X3ZhcmlhYmxlICgnQ09ORklHX0NMRUFOX0ZJTEVTJywgVFJVRSwgSU5URVJOQUwsCisJCQkgIEBhY3R1YWxfb3RoZXJfZmlsZXMpOworICBkZWZpbmVfcHJldHR5X3ZhcmlhYmxlICgnQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTJywgVFJVRSwgSU5URVJOQUwsCisJCQkgIEBhY3R1YWxfb3RoZXJfdnBhdGhfZmlsZXMpOworfQorCisjIEhhbmRsZSBDIGhlYWRlcnMuCitzdWIgaGFuZGxlX2hlYWRlcnMKK3sKKyAgICBteSBAciA9ICZhbV9pbnN0YWxsX3ZhciAoJy1kZWZhdWx0ZGlzdCcsICdoZWFkZXInLCAnSEVBREVSUycsICdpbmNsdWRlJywKKwkJCSAgICAgJ29sZGluY2x1ZGUnLCAncGtnaW5jbHVkZScsCisJCQkgICAgICdub2luc3QnLCAnY2hlY2snKTsKKyAgICBmb3JlYWNoIChAcikKKyAgICB7CisgICAgICBuZXh0IHVubGVzcyAkXy0+WzFdID1+IC9cLi4qJC87CisgICAgICAmc2F3X2V4dGVuc2lvbiAoJCYpOworICAgIH0KK30KKworc3ViIGhhbmRsZV9nZXR0ZXh0Cit7CisgIHJldHVybiBpZiAhICRzZWVuX2dldHRleHQgfHwgJHJlbGF0aXZlX2RpciBuZSAnLic7CisKKyAgbXkgJHN1YmRpcnMgPSB2YXIgJ1NVQkRJUlMnOworCisgIGlmICghICRzdWJkaXJzKQorICAgIHsKKyAgICAgIGVycl9hYyAiQU1fR05VX0dFVFRFWFQgdXNlZCBidXQgU1VCRElSUyBub3QgZGVmaW5lZCI7CisgICAgICByZXR1cm47CisgICAgfQorCisgICMgUGVyZm9ybSBzb21lIHNhbml0eSBjaGVja3MgdG8gaGVscCB1c2VycyBnZXQgdGhlIHJpZ2h0IHNldHVwLgorICAjIFdlIGRpc2FibGUgdGhlc2UgdGVzdHMgd2hlbiBwby8gZG9lc24ndCBleGlzdCBpbiBvcmRlciBub3QgdG8gZGlzYWxsb3cKKyAgIyB1bnVzdWFsIGdldHRleHQgc2V0dXBzLgorICAjCisgICMgQnJ1bm8gSGFpYmxlOgorICAjIHwgVGhlIGlkZWEgaXM6CisgICMgfAorICAjIHwgIDEpIElmIGEgcGFja2FnZSBkb2Vzbid0IGhhdmUgYSBkaXJlY3RvcnkgcG8vIGF0IHRvcCBsZXZlbCwgaXQKKyAgIyB8ICAgICB3aWxsIGxpa2VseSBoYXZlIG11bHRpcGxlIHBvLyBkaXJlY3RvcmllcyBpbiBzdWJwYWNrYWdlcy4KKyAgIyB8CisgICMgfCAgMikgSXQgaXMgdXNlZnVsIHRvIHdhcm4gZm9yIHRoZSBhYnNlbmNlIG9mIGludGwvIGlmIEFNX0dOVV9HRVRURVhUCisgICMgfCAgICAgaXMgdXNlZCB3aXRob3V0ICdleHRlcm5hbCcuIEl0IGlzIGFsc28gdXNlZnVsIHRvIHdhcm4gZm9yIHRoZQorICAjIHwgICAgIHByZXNlbmNlIG9mIGludGwvIGlmIEFNX0dOVV9HRVRURVhUKFtleHRlcm5hbF0pIGlzIHVzZWQuIEJvdGgKKyAgIyB8ICAgICB3YXJuaW5ncyBhcHBseSBvbmx5IHRvIHRoZSB1c3VhbCBsYXlvdXQgb2YgcGFja2FnZXMsIHRoZXJlZm9yZQorICAjIHwgICAgIHRoZXkgc2hvdWxkIGJvdGggYmUgZGlzYWJsZWQgaWYgbm8gcG8vIGRpcmVjdG9yeSBpcyBmb3VuZCBhdAorICAjIHwgICAgIHRvcCBsZXZlbC4KKworICBpZiAoLWQgJ3BvJykKKyAgICB7CisgICAgICBteSBAc3ViZGlycyA9ICRzdWJkaXJzLT52YWx1ZV9hc19saXN0X3JlY3Vyc2l2ZTsKKworICAgICAgbXNnX3ZhciAoJ3N5bnRheCcsICRzdWJkaXJzLAorCSAgICAgICAiQU1fR05VX0dFVFRFWFQgdXNlZCBidXQgYHBvJyBub3QgaW4gU1VCRElSUyIpCisJaWYgISBncmVwICgkXyBlcSAncG8nLCBAc3ViZGlycyk7CisKKyAgICAgICMgaW50bC8gaXMgbm90IHJlcXVpcmVkIHdoZW4gQU1fR05VX0dFVFRFWFQgaXMgY2FsbGVkIHdpdGggdGhlCisgICAgICAjIGBleHRlcm5hbCcgb3B0aW9uIGFuZCBBTV9HTlVfR0VUVEVYVF9JTlRMX1NVQkRJUiBpcyBub3QgY2FsbGVkLgorICAgICAgbXNnX3ZhciAoJ3N5bnRheCcsICRzdWJkaXJzLAorCSAgICAgICAiQU1fR05VX0dFVFRFWFQgdXNlZCBidXQgYGludGwnIG5vdCBpbiBTVUJESVJTIikKKwlpZiAoISAoJHNlZW5fZ2V0dGV4dF9leHRlcm5hbCAmJiAhICRzZWVuX2dldHRleHRfaW50bCkKKwkgICAgJiYgISBncmVwICgkXyBlcSAnaW50bCcsIEBzdWJkaXJzKSk7CisKKyAgICAgICMgaW50bC8gc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggQU1fR05VX0dFVFRFWFQoW2V4dGVybmFsXSksIGV4Y2VwdAorICAgICAgIyBpZiBBTV9HTlVfR0VUVEVYVF9JTlRMX1NVQkRJUiBpcyBjYWxsZWQuCisgICAgICBtc2dfdmFyICgnc3ludGF4JywgJHN1YmRpcnMsCisJICAgICAgICJgaW50bCcgc2hvdWxkIG5vdCBiZSBpbiBTVUJESVJTIHdoZW4gIgorCSAgICAgICAuICJBTV9HTlVfR0VUVEVYVChbZXh0ZXJuYWxdKSBpcyB1c2VkIikKKwlpZiAoJHNlZW5fZ2V0dGV4dF9leHRlcm5hbCAmJiAhICRzZWVuX2dldHRleHRfaW50bAorCSAgICAmJiBncmVwICgkXyBlcSAnaW50bCcsIEBzdWJkaXJzKSk7CisgICAgfQorCisgIHJlcXVpcmVfZmlsZSAoJGFjX2dldHRleHRfbG9jYXRpb24sIEdOVSwgJ0FCT1VULU5MUycpOworfQorCisjIEhhbmRsZSBmb290ZXIgZWxlbWVudHMuCitzdWIgaGFuZGxlX2Zvb3RlcgoreworICAgIHJlamVjdF9ydWxlICgnLlNVRkZJWEVTJywKKwkJICJ1c2UgdmFyaWFibGUgYFNVRkZJWEVTJywgbm90IHRhcmdldCBgLlNVRkZJWEVTJyIpOworCisgICAgIyBOb3RlOiBBSVggNC4xIC9iaW4vbWFrZSB3aWxsIGZhaWwgaWYgYW55IHN1ZmZpeCBydWxlIGFwcGVhcnMKKyAgICAjIGJlZm9yZSAuU1VGRklYRVMuICBTbyB3ZSBtYWtlIHN1cmUgdGhhdCAuU1VGRklYRVMgYXBwZWFycyBiZWZvcmUKKyAgICAjIGFueXRoaW5nIGVsc2UsIGJ5IHN0aWNraW5nIGl0IHJpZ2h0IGFmdGVyIHRoZSBkZWZhdWx0OiB0YXJnZXQuCisgICAgJG91dHB1dF9oZWFkZXIgLj0gIi5TVUZGSVhFUzpcbiI7CisgICAgbXkgJHN1ZmZpeGVzID0gdmFyICdTVUZGSVhFUyc7CisgICAgbXkgQHN1ZmZpeGVzID0gQXV0b21ha2U6OlJ1bGU6OnN1ZmZpeGVzOworICAgIGlmIChAc3VmZml4ZXMgfHwgJHN1ZmZpeGVzKQorICAgIHsKKwkjIE1ha2Ugc3VyZSBTVUZGSVhFUyBoYXMgdW5pcXVlIGVsZW1lbnRzLiAgU29ydCB0aGVtIHRvIGVuc3VyZQorCSMgdGhlIG91dHB1dCByZW1haW5zIGNvbnNpc3RlbnQuICBIb3dldmVyLCAkKFNVRkZJWEVTKSBpcworCSMgYWx3YXlzIGF0IHRoZSBzdGFydCBvZiB0aGUgbGlzdCwgdW5zb3J0ZWQuICBUaGlzIGlzIGRvbmUKKwkjIGJlY2F1c2UgbWFrZSB3aWxsIGNob29zZSBydWxlcyBkZXBlbmRpbmcgb24gdGhlIG9yZGVyaW5nIG9mCisJIyBzdWZmaXhlcywgYW5kIHRoaXMgbGV0cyB0aGUgdXNlciBoYXZlIHNvbWUgY29udHJvbC4gIFB1c2gKKwkjIGFjdHVhbCBzdWZmaXhlcywgYW5kIG5vdCAkKFNVRkZJWEVTKS4gIFNvbWUgdmVyc2lvbnMgb2YgbWFrZQorCSMgZG8gbm90IGxpa2UgdmFyaWFibGUgc3Vic3RpdHV0aW9ucyBvbiB0aGUgLlNVRkZJWEVTIGxpbmUuCisJbXkgQHVzZXJfc3VmZml4ZXMgPSAoJHN1ZmZpeGVzCisJCQkgICAgID8gJHN1ZmZpeGVzLT52YWx1ZV9hc19saXN0X3JlY3Vyc2l2ZSA6ICgpKTsKKworCW15ICVzdWZmaXhlcyA9IG1hcCB7ICRfID0+IDEgfSBAc3VmZml4ZXM7CisJZGVsZXRlIEBzdWZmaXhlc3tAdXNlcl9zdWZmaXhlc307CisKKwkkb3V0cHV0X2hlYWRlciAuPSAoIi5TVUZGSVhFUzogIgorCQkJICAgLiBqb2luICgnICcsIEB1c2VyX3N1ZmZpeGVzLCBzb3J0IGtleXMgJXN1ZmZpeGVzKQorCQkJICAgLiAiXG4iKTsKKyAgICB9CisKKyAgICAkb3V0cHV0X3RyYWlsZXIgLj0gZmlsZV9jb250ZW50cyAoJ2Zvb3RlcicsIG5ldyBBdXRvbWFrZTo6TG9jYXRpb24pOworfQorCisKKyMgR2VuZXJhdGUgYG1ha2UgaW5zdGFsbCcgcnVsZXMuCitzdWIgaGFuZGxlX2luc3RhbGwgKCkKK3sKKyAgJG91dHB1dF9ydWxlcyAuPSAmZmlsZV9jb250ZW50cworICAgICgnaW5zdGFsbCcsCisgICAgIG5ldyBBdXRvbWFrZTo6TG9jYXRpb24sCisgICAgIG1heWJlX0JVSUxUX1NPVVJDRVMgPT4gKHNldF9zZWVuICgnQlVJTFRfU09VUkNFUycpCisJCQkgICAgID8gKCIgXCQoQlVJTFRfU09VUkNFUylcbiIKKwkJCQkuICJcdFwkKE1BS0UpIFwkKEFNX01BS0VGTEFHUykiKQorCQkJICAgICA6ICcnKSwKKyAgICAgJ2luc3RhbGxkaXJzLWxvY2FsJyA9PiAodXNlcl9waG9ueV9ydWxlICdpbnN0YWxsZGlycy1sb2NhbCcKKwkJCSAgICAgPyAnIGluc3RhbGxkaXJzLWxvY2FsJyA6ICcnKSwKKyAgICAgYW1fX2luc3RhbGxkaXJzID0+IHZhcmlhYmxlX3ZhbHVlICgnYW1fX2luc3RhbGxkaXJzJykgfHwgJycpOworfQorCisKKyMgRGVhbCB3aXRoIGFsbCBhbmQgYWxsLWFtLgorc3ViIGhhbmRsZV9hbGwgKCQpCit7CisgICAgbXkgKCRtYWtlZmlsZSkgPSBAXzsKKworICAgICMgT3V0cHV0IGBhbGwtYW0nLgorCisgICAgIyBQdXQgdGhpcyBhdCB0aGUgYmVnaW5uaW5nIGZvciB0aGUgc2FrZSBvZiBub24tR05VIG1ha2VzLiAgVGhpcworICAgICMgaXMgc3RpbGwgd3JvbmcgaWYgdGhlc2UgbWFrZXMgY2FuIHJ1biBwYXJhbGxlbCBqb2JzLiAgQnV0IGl0IGlzCisgICAgIyByaWdodCBlbm91Z2guCisgICAgdW5zaGlmdCAoQGFsbCwgYmFzZW5hbWUgKCRtYWtlZmlsZSkpOworCisgICAgZm9yZWFjaCBteSAkc3BlYyAoQGNvbmZpZ19oZWFkZXJzKQorICAgICAgeworCW15ICgkb3V0LCBAaW5zKSA9IHNwbGl0X2NvbmZpZ19maWxlX3NwZWMgKCRzcGVjKTsKKwlwdXNoIChAYWxsLCBiYXNlbmFtZSAoJG91dCkpCisJICBpZiBkaXJuYW1lICgkb3V0KSBlcSAkcmVsYXRpdmVfZGlyOworICAgICAgfQorCisgICAgIyBJbnN0YWxsIGBhbGwnIGhvb2tzLgorICAgIHB1c2ggKEBhbGwsICJhbGwtbG9jYWwiKQorICAgICAgaWYgdXNlcl9waG9ueV9ydWxlICJhbGwtbG9jYWwiOworCisgICAgJnByZXR0eV9wcmludF9ydWxlICgiYWxsLWFtOiIsICJcdFx0IiwgQGFsbCk7CisgICAgJmRlcGVuZCAoJy5QSE9OWScsICdhbGwtYW0nLCAnYWxsJyk7CisKKworICAgICMgT3V0cHV0IGBhbGwnLgorCisgICAgbXkgQGxvY2FsX2hlYWRlcnMgPSAoKTsKKyAgICBwdXNoIEBsb2NhbF9oZWFkZXJzLCAnJChCVUlMVF9TT1VSQ0VTKScKKyAgICAgIGlmIHZhciAoJ0JVSUxUX1NPVVJDRVMnKTsKKyAgICBmb3JlYWNoIG15ICRzcGVjIChAY29uZmlnX2hlYWRlcnMpCisgICAgICB7CisJbXkgKCRvdXQsIEBpbnMpID0gc3BsaXRfY29uZmlnX2ZpbGVfc3BlYyAoJHNwZWMpOworCXB1c2ggQGxvY2FsX2hlYWRlcnMsIGJhc2VuYW1lICgkb3V0KQorCSAgaWYgZGlybmFtZSAoJG91dCkgZXEgJHJlbGF0aXZlX2RpcjsKKyAgICAgIH0KKworICAgIGlmIChAbG9jYWxfaGVhZGVycykKKyAgICAgIHsKKwkjIFdlIG5lZWQgdG8gbWFrZSBzdXJlIGNvbmZpZy5oIGlzIGJ1aWx0IGJlZm9yZSB3ZSByZWN1cnNlLgorCSMgV2UgYWxzbyB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IGJ1aWx0IHNvdXJjZXMgYXJlIGJ1aWx0CisJIyBiZWZvcmUgYW55IG9yZGluYXJ5IGBhbGwnIHRhcmdldHMgYXJlIHJ1bi4gIFdlIGNhbid0IGRvIHRoaXMKKwkjIGJ5IGNoYW5naW5nIHRoZSBvcmRlciBvZiBkZXBlbmRlbmNpZXMgdG8gdGhlICJhbGwiIGJlY2F1c2UKKwkjIHRoYXQgYnJlYWtzIHdoZW4gdXNpbmcgcGFyYWxsZWwgbWFrZXMuICBJbnN0ZWFkIHdlIGhhbmRsZQorCSMgdGhpbmdzIGV4cGxpY2l0bHkuCisJJG91dHB1dF9hbGwgLj0gKCJhbGw6IEBsb2NhbF9oZWFkZXJzIgorCQkJLiAiXG5cdCIKKwkJCS4gJyQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICcKKwkJCS4gKHZhciAoJ1NVQkRJUlMnKSA/ICdhbGwtcmVjdXJzaXZlJyA6ICdhbGwtYW0nKQorCQkJLiAiXG5cbiIpOworICAgICAgICBkZXBlbmQgKCcuTUFLRScsICdhbGwnKTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisJJG91dHB1dF9hbGwgLj0gImFsbDogIiAuICh2YXIgKCdTVUJESVJTJykKKwkJCQkgID8gJ2FsbC1yZWN1cnNpdmUnIDogJ2FsbC1hbScpIC4gIlxuXG4iOworICAgICAgfQorfQorCisKKyMgJmRvX2NoZWNrX21lcmdlX3RhcmdldCAoKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEhhbmRsZSBjaGVjayBtZXJnZSB0YXJnZXQgc3BlY2lhbGx5Lgorc3ViIGRvX2NoZWNrX21lcmdlX3RhcmdldCAoKQoreworICAjIEluY2x1ZGUgdXNlci1kZWZpbmVkIGxvY2FsIGZvcm0gb2YgdGFyZ2V0LgorICBwdXNoIEBjaGVja190ZXN0cywgJ2NoZWNrLWxvY2FsJworICAgIGlmIHVzZXJfcGhvbnlfcnVsZSAnY2hlY2stbG9jYWwnOworCisgICMgSW4gLS1jeWdudXMgbW9kZSwgY2hlY2sgZG9lc24ndCBkZXBlbmQgb24gYWxsLgorICBpZiAob3B0aW9uICdjeWdudXMnKQorICAgIHsKKyAgICAgICMgSnVzdCBydW4gdGhlIGxvY2FsIGNoZWNrIHJ1bGVzLgorICAgICAgcHJldHR5X3ByaW50X3J1bGUgKCdjaGVjay1hbTonLCAiXHRcdCIsIEBjaGVjayk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgIyBUaGUgY2hlY2sgdGFyZ2V0IG11c3QgZGVwZW5kIG9uIHRoZSBsb2NhbCBlcXVpdmFsZW50IG9mCisgICAgICAjIGBhbGwnLCB0byBlbnN1cmUgYWxsIHRoZSBwcmltYXJ5IHRhcmdldHMgYXJlIGJ1aWx0LiAgVGhlbiBpdAorICAgICAgIyBtdXN0IGJ1aWxkIHRoZSBsb2NhbCBjaGVjayBydWxlcy4KKyAgICAgICRvdXRwdXRfcnVsZXMgLj0gImNoZWNrLWFtOiBhbGwtYW1cbiI7CisgICAgICBpZiAoQGNoZWNrKQorICAgICAgICB7CisJICBwcmV0dHlfcHJpbnRfcnVsZSAoIlx0XCQoTUFLRSkgXCQoQU1fTUFLRUZMQUdTKSIsICJcdCAgIiwKKwkJCSAgICAgQGNoZWNrKTsKKwkgIGRlcGVuZCAoJy5NQUtFJywgJ2NoZWNrLWFtJyk7CisJfQorICAgIH0KKyAgaWYgKEBjaGVja190ZXN0cykKKyAgICB7CisgICAgICBwcmV0dHlfcHJpbnRfcnVsZSAoIlx0XCQoTUFLRSkgXCQoQU1fTUFLRUZMQUdTKSIsICJcdCAgIiwKKwkJCSBAY2hlY2tfdGVzdHMpOworICAgICAgZGVwZW5kICgnLk1BS0UnLCAnY2hlY2stYW0nKTsKKyAgICB9CisKKyAgZGVwZW5kICcuUEhPTlknLCAnY2hlY2snLCAnY2hlY2stYW0nOworICAjIEhhbmRsZSByZWN1cnNpb24uICBXZSBoYXZlIHRvIGhvbm9yIEJVSUxUX1NPVVJDRVMgbGlrZSBmb3IgYGFsbDonLgorICAkb3V0cHV0X3J1bGVzIC49ICgiY2hlY2s6ICIKKwkJICAgIC4gKHZhciAoJ0JVSUxUX1NPVVJDRVMnKQorCQkgICAgICAgPyAiXCQoQlVJTFRfU09VUkNFUylcblx0XCQoTUFLRSkgXCQoQU1fTUFLRUZMQUdTKSAiCisJCSAgICAgICA6ICcnKQorCQkgICAgLiAodmFyICgnU1VCRElSUycpID8gJ2NoZWNrLXJlY3Vyc2l2ZScgOiAnY2hlY2stYW0nKQorCQkgICAgLiAiXG4iKTsKKyAgZGVwZW5kICgnLk1BS0UnLCAnY2hlY2snKQorICAgIGlmIHZhciAoJ0JVSUxUX1NPVVJDRVMnKTsKK30KKworIyBoYW5kbGVfY2xlYW4gKCRNQUtFRklMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEhhbmRsZSBhbGwgJ2NsZWFuJyB0YXJnZXRzLgorc3ViIGhhbmRsZV9jbGVhbiAoJCkKK3sKKyAgbXkgKCRtYWtlZmlsZSkgPSBAXzsKKworICAjIENsZWFuIHRoZSBmaWxlcyBsaXN0ZWQgaW4gdXNlciB2YXJpYWJsZXMgaWYgdGhleSBleGlzdC4KKyAgJGNsZWFuX2ZpbGVzeyckKE1PU1RMWUNMRUFORklMRVMpJ30gPSBNT1NUTFlfQ0xFQU4KKyAgICBpZiB2YXIgKCdNT1NUTFlDTEVBTkZJTEVTJyk7CisgICRjbGVhbl9maWxlc3snJChDTEVBTkZJTEVTKSd9ID0gQ0xFQU4KKyAgICBpZiB2YXIgKCdDTEVBTkZJTEVTJyk7CisgICRjbGVhbl9maWxlc3snJChESVNUQ0xFQU5GSUxFUyknfSA9IERJU1RfQ0xFQU4KKyAgICBpZiB2YXIgKCdESVNUQ0xFQU5GSUxFUycpOworICAkY2xlYW5fZmlsZXN7JyQoTUFJTlRBSU5FUkNMRUFORklMRVMpJ30gPSBNQUlOVEFJTkVSX0NMRUFOCisgICAgaWYgdmFyICgnTUFJTlRBSU5FUkNMRUFORklMRVMnKTsKKworICAjIEJ1aWx0IHNvdXJjZXMgYXJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBieSBtYWludGFpbmVyLWNsZWFuLgorICAkY2xlYW5fZmlsZXN7JyQoQlVJTFRfU09VUkNFUyknfSA9IE1BSU5UQUlORVJfQ0xFQU4KKyAgICBpZiB2YXIgKCdCVUlMVF9TT1VSQ0VTJyk7CisKKyAgIyBDb21wdXRlIGEgbGlzdCBvZiAicm0icyB0byBydW4gZm9yIGVhY2ggdGFyZ2V0LgorICBteSAlcm1zID0gKE1PU1RMWV9DTEVBTiwgW10sCisJICAgICBDTEVBTiwgW10sCisJICAgICBESVNUX0NMRUFOLCBbXSwKKwkgICAgIE1BSU5UQUlORVJfQ0xFQU4sIFtdKTsKKworICBmb3JlYWNoIG15ICRmaWxlIChrZXlzICVjbGVhbl9maWxlcykKKyAgICB7CisgICAgICBteSAkd2hlbiA9ICRjbGVhbl9maWxlc3skZmlsZX07CisgICAgICBwcm9nX2Vycm9yICdpbnZhbGlkIGVudHJ5IGluICVjbGVhbl9maWxlcycKKwl1bmxlc3MgZXhpc3RzICRybXN7JHdoZW59OworCisgICAgICBteSAkcm0gPSAicm0gLWYgJGZpbGUiOworICAgICAgIyBJZiBmaWxlIGlzIGEgdmFyaWFibGUsIG1ha2Ugc3VyZSB3aGVuIGRvbid0IGNhbGwgYHJtIC1mJyB3aXRob3V0IGFyZ3MuCisgICAgICAkcm0gPSJ0ZXN0IC16IFwiJGZpbGVcIiB8fCAkcm0iCisJaWYgKCRmaWxlID1+IC9eXHMqXCQoXCguKlwpfFx7LipcfSlccyokLyk7CisKKyAgICAgIHB1c2ggQHskcm1zeyR3aGVufX0sICJcdC0kcm1cbiI7CisgICAgfQorCisgICRvdXRwdXRfcnVsZXMgLj0gJmZpbGVfY29udGVudHMKKyAgICAoJ2NsZWFuJywKKyAgICAgbmV3IEF1dG9tYWtlOjpMb2NhdGlvbiwKKyAgICAgTU9TVExZQ0xFQU5fUk1TICAgICAgPT4gam9pbiAoJycsIHNvcnQgQHskcm1zeyZNT1NUTFlfQ0xFQU59fSksCisgICAgIENMRUFOX1JNUyAgICAgICAgICAgID0+IGpvaW4gKCcnLCBzb3J0IEB7JHJtc3smQ0xFQU59fSksCisgICAgIERJU1RDTEVBTl9STVMgICAgICAgID0+IGpvaW4gKCcnLCBzb3J0IEB7JHJtc3smRElTVF9DTEVBTn19KSwKKyAgICAgTUFJTlRBSU5FUl9DTEVBTl9STVMgPT4gam9pbiAoJycsIHNvcnQgQHskcm1zeyZNQUlOVEFJTkVSX0NMRUFOfX0pLAorICAgICBNQUtFRklMRSAgICAgICAgICAgICA9PiBiYXNlbmFtZSAkbWFrZWZpbGUsCisgICAgICk7Cit9CisKKworIyAmdGFyZ2V0X2NtcCAoJEEsICRCKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTdWJyb3V0aW5lIGZvciAmaGFuZGxlX2ZhY3RvcmVkX2RlcGVuZGVuY2llcyB0byBsZXQgYC5QSE9OWScgYW5kCisjIG90aGVyIGAuVEFSR0VUUycgYmUgbGFzdC4KK3N1YiB0YXJnZXRfY21wCit7CisgIHJldHVybiAwIGlmICRhIGVxICRiOworCisgIG15ICRhMSA9IHN1YnN0ciAoJGEsIDAsIDEpOworICBteSAkYjEgPSBzdWJzdHIgKCRiLCAwLCAxKTsKKyAgaWYgKCRhMSBuZSAkYjEpCisgICAgeworICAgICAgcmV0dXJuIC0xIGlmICRiMSBlcSAnLic7CisgICAgICByZXR1cm4gMSBpZiAkYTEgZXEgJy4nOworICAgIH0KKyAgcmV0dXJuICRhIGNtcCAkYjsKK30KKworCisjICZoYW5kbGVfZmFjdG9yZWRfZGVwZW5kZW5jaWVzICgpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEhhbmRsZSBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gZ2F0aGVyZWQgdGFyZ2V0cy4KK3N1YiBoYW5kbGVfZmFjdG9yZWRfZGVwZW5kZW5jaWVzCit7CisgICMgUmVqZWN0IGJhZCBob29rcy4KKyAgZm9yZWFjaCBteSAkdXRhcmcgKCd1bmluc3RhbGwtZGF0YS1sb2NhbCcsICd1bmluc3RhbGwtZGF0YS1ob29rJywKKwkJICAgICAndW5pbnN0YWxsLWV4ZWMtbG9jYWwnLCAndW5pbnN0YWxsLWV4ZWMtaG9vaycsCisJCSAgICAgJ3VuaW5zdGFsbC1kdmktbG9jYWwnLAorCQkgICAgICd1bmluc3RhbGwtaHRtbC1sb2NhbCcsCisJCSAgICAgJ3VuaW5zdGFsbC1pbmZvLWxvY2FsJywKKwkJICAgICAndW5pbnN0YWxsLXBkZi1sb2NhbCcsCisJCSAgICAgJ3VuaW5zdGFsbC1wcy1sb2NhbCcpCisgICAgeworICAgICAgbXkgJHggPSAkdXRhcmc7CisgICAgICAkeCA9fiBzLy0uKi0vLS87CisgICAgICByZWplY3RfcnVsZSAoJHV0YXJnLCAidXNlIGAkeCcsIG5vdCBgJHV0YXJnJyIpOworICAgIH0KKworICByZWplY3RfcnVsZSAoJ2luc3RhbGwtbG9jYWwnLAorCSAgICAgICAidXNlIGBpbnN0YWxsLWRhdGEtbG9jYWwnIG9yIGBpbnN0YWxsLWV4ZWMtbG9jYWwnLCAiCisJICAgICAgIC4gIm5vdCBgaW5zdGFsbC1sb2NhbCciKTsKKworICByZWplY3RfcnVsZSAoJ2luc3RhbGwtaG9vaycsCisJICAgICAgICJ1c2UgYGluc3RhbGwtZGF0YS1ob29rJyBvciBgaW5zdGFsbC1leGVjLWhvb2snLCAiCisJICAgICAgIC4gIm5vdCBgaW5zdGFsbC1ob29rJyIpOworCisgICMgSW5zdGFsbCB0aGUgLWxvY2FsIGhvb2tzLgorICBmb3JlYWNoIChrZXlzICVkZXBlbmRlbmNpZXMpCisgICAgeworICAgICAgIyBIb29rcyBhcmUgaW5zdGFsbGVkIG9uIHRoZSAtYW0gdGFyZ2V0cy4KKyAgICAgIHMvLWFtJC8vIG9yIG5leHQ7CisgICAgICBkZXBlbmQgKCIkXy1hbSIsICIkXy1sb2NhbCIpCisJaWYgdXNlcl9waG9ueV9ydWxlICIkXy1sb2NhbCI7CisgICAgfQorCisgICMgSW5zdGFsbCB0aGUgLWhvb2sgaG9va3MuCisgICMgRklYTUU6IFdoeSBub3QgYmUgYXMgbGliZXJhbCBhcyB3ZSBhcmUgd2l0aCAtbG9jYWwgaG9va3M/CisgIGZvcmVhY2ggKCdpbnN0YWxsLWV4ZWMnLCAnaW5zdGFsbC1kYXRhJywgJ3VuaW5zdGFsbCcpCisgICAgeworICAgICAgaWYgKHVzZXJfcGhvbnlfcnVsZSAiJF8taG9vayIpCisJeworCSAgZGVwZW5kICgnLk1BS0UnLCAiJF8tYW0iKTsKKwkgIHJlZ2lzdGVyX2FjdGlvbigiJF8tYW0iLAorCQkJICAoIlx0XEBcJChOT1JNQUxfSU5TVEFMTClcbiIKKwkJCSAgIC4gIlx0XCQoTUFLRSkgXCQoQU1fTUFLRUZMQUdTKSAkXy1ob29rIikpOworCX0KKyAgICB9CisKKyAgIyBBbGwgdGhlIHJlcXVpcmVkIHRhcmdldHMgYXJlIHBob255LgorICBkZXBlbmQgKCcuUEhPTlknLCBrZXlzICVyZXF1aXJlZF90YXJnZXRzKTsKKworICAjIEFjdHVhbGx5IG91dHB1dCBnYXRoZXJlZCB0YXJnZXRzLgorICBmb3JlYWNoIChzb3J0IHRhcmdldF9jbXAga2V5cyAlZGVwZW5kZW5jaWVzKQorICAgIHsKKyAgICAgICMgSWYgdGhlcmUgaXMgbm90aGluZyBhYm91dCB0aGlzIGd1eSwgc2tpcCBpdC4KKyAgICAgIG5leHQKKwl1bmxlc3MgKEB7JGRlcGVuZGVuY2llc3skX319CisJCXx8ICRhY3Rpb25zeyRffQorCQl8fCAkcmVxdWlyZWRfdGFyZ2V0c3skX30pOworCisgICAgICAjIERlZmluZSBnYXRoZXJlZCB0YXJnZXRzIGluIHVuZGVmaW5lZCBjb25kaXRpb25zLgorICAgICAgIyBGSVhNRTogUmlnaHQgbm93IHdlIG11c3QgaGFuZGxlIC5QSE9OWSBhcyBhbiBleGNlcHRpb24sCisgICAgICAjIGJlY2F1c2UgcGVvcGxlIHdyaXRlIHRoaW5ncyBsaWtlCisgICAgICAjICAgIC5QSE9OWTogbXlwaG9ueXRhcmdldAorICAgICAgIyB0byBhcHBlbmQgZGVwZW5kZW5jaWVzLiAgVGhpcyB3b3VsZCBub3Qgd29yayBpZiBBdXRvbWFrZQorICAgICAgIyByZWZyYWluZWQgZnJvbSBkZWZpbmluZyBpdHMgb3duIC5QSE9OWSB0YXJnZXQgYXMgaXQgZG9lcworICAgICAgIyB3aXRoIG90aGVyIG92ZXJyaWRkZW4gdGFyZ2V0cy4KKyAgICAgICMgTGlrZXdpc2UgZm9yIGAuTUFLRScuCisgICAgICBteSBAdW5kZWZpbmVkX2NvbmRzID0gKFRSVUUsKTsKKyAgICAgIGlmICgkXyBuZSAnLlBIT05ZJyAmJiAkXyBuZSAnLk1BS0UnKQorCXsKKwkgIEB1bmRlZmluZWRfY29uZHMgPQorCSAgICBBdXRvbWFrZTo6UnVsZTo6ZGVmaW5lICgkXywgJ2ludGVybmFsJywKKwkJCQkgICAgUlVMRV9BVVRPTUFLRSwgVFJVRSwgSU5URVJOQUwpOworCX0KKyAgICAgIG15IEB1bmlxX2RlcHMgPSB1bmlxIChzb3J0IEB7JGRlcGVuZGVuY2llc3skX319KTsKKyAgICAgIGZvcmVhY2ggbXkgJGNvbmQgKEB1bmRlZmluZWRfY29uZHMpCisJeworCSAgbXkgJGNvbmRzdHIgPSAkY29uZC0+c3Vic3Rfc3RyaW5nOworCSAgJnByZXR0eV9wcmludF9ydWxlICgiJGNvbmRzdHIkXzoiLCAiJGNvbmRzdHJcdCIsIEB1bmlxX2RlcHMpOworCSAgJG91dHB1dF9ydWxlcyAuPSAkYWN0aW9uc3skX30gaWYgZGVmaW5lZCAkYWN0aW9uc3skX307CisJICAkb3V0cHV0X3J1bGVzIC49ICJcbiI7CisJfQorICAgIH0KK30KKworCisjICZoYW5kbGVfdGVzdHNfZGVqYWdudSAoKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N1YiBoYW5kbGVfdGVzdHNfZGVqYWdudQoreworICAgIHB1c2ggKEBjaGVja190ZXN0cywgJ2NoZWNrLURFSkFHTlUnKTsKKyAgICAkb3V0cHV0X3J1bGVzIC49IGZpbGVfY29udGVudHMgKCdkZWphZ251JywgbmV3IEF1dG9tYWtlOjpMb2NhdGlvbik7Cit9CisKKworIyBIYW5kbGUgVEVTVFMgdmFyaWFibGUgYW5kIG90aGVyIGNoZWNrcy4KK3N1YiBoYW5kbGVfdGVzdHMKK3sKKyAgaWYgKG9wdGlvbiAnZGVqYWdudScpCisgICAgeworICAgICAgJmhhbmRsZV90ZXN0c19kZWphZ251OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGZvcmVhY2ggbXkgJGMgKCdERUpBVE9PTCcsICdSVU5URVNUJywgJ1JVTlRFU1RGTEFHUycpCisJeworCSAgcmVqZWN0X3ZhciAoJGMsICJgJGMnIGRlZmluZWQgYnV0IGBkZWphZ251JyBub3QgaW4gIgorCQkgICAgICAuICJgQVVUT01BS0VfT1BUSU9OUyciKTsKKwl9CisgICAgfQorCisgIGlmICh2YXIgKCdURVNUUycpKQorICAgIHsKKyAgICAgIHB1c2ggKEBjaGVja190ZXN0cywgJ2NoZWNrLVRFU1RTJyk7CisgICAgICAkb3V0cHV0X3J1bGVzIC49ICZmaWxlX2NvbnRlbnRzICgnY2hlY2snLCBuZXcgQXV0b21ha2U6OkxvY2F0aW9uLAorCQkJCSAgICAgICBDT0xPUiA9PiAhISBvcHRpb24gJ2NvbG9yLXRlc3RzJywKKwkJCQkgICAgICAgUEFSQUxMRUxfVEVTVFMgPT4gISEgb3B0aW9uICdwYXJhbGxlbC10ZXN0cycpOworCisgICAgICAjIFRlc3RzIHRoYXQgYXJlIGtub3duIHByb2dyYW1zIHNob3VsZCBoYXZlICQoRVhFRVhUKSBhcHBlbmRlZC4KKyAgICAgICMgRm9yIG1hdGNoaW5nIHB1cnBvc2VzLCB3ZSBuZWVkIHRvIGFkanVzdCBYRkFJTF9URVNUUyBhcyB3ZWxsLgorICAgICAgYXBwZW5kX2V4ZWV4dCB7IGV4aXN0cyAka25vd25fcHJvZ3JhbXN7JF9bMF19IH0gJ1RFU1RTJzsKKyAgICAgIGFwcGVuZF9leGVleHQgeyBleGlzdHMgJGtub3duX3Byb2dyYW1zeyRfWzBdfSB9ICdYRkFJTF9URVNUUycKKwlpZiAodmFyICgnWEZBSUxfVEVTVFMnKSk7CisKKyAgICAgIGlmIChvcHRpb24gJ3BhcmFsbGVsLXRlc3RzJykKKyAgICAgICAgeworCSAgZGVmaW5lX3ZhcmlhYmxlICgnVEVTVF9TVUlURV9MT0cnLCAndGVzdC1zdWl0ZS5sb2cnLCBJTlRFUk5BTCk7CisJICBkZWZpbmVfdmFyaWFibGUgKCdURVNUX1NVSVRFX0hUTUwnLCAnJChURVNUX1NVSVRFX0xPRzoubG9nPS5odG1sKScsIElOVEVSTkFMKTsKKwkgIG15ICRzdWZmID0gJy50ZXN0JzsKKwkgIG15ICRhdF9leGVleHQgPSAnJzsKKwkgIG15ICRoYW5kbGVfZXhlZXh0ID0gZXhpc3RzICRjb25maWd1cmVfdmFyc3snRVhFRVhUJ307CisJICBpZiAoJGhhbmRsZV9leGVleHQpCisJICAgIHsKKwkgICAgICAkYXRfZXhlZXh0ID0gc3Vic3QgKCdFWEVFWFQnKTsKKwkgICAgICAkc3VmZiA9ICRhdF9leGVleHQgIC4gJyAnIC4gJHN1ZmY7CisJICAgIH0KKwkgIGRlZmluZV92YXJpYWJsZSAoJ1RFU1RfRVhURU5TSU9OUycsICRzdWZmLCBJTlRFUk5BTCk7CisJICAjIEZJWE1FOiB0aGlzIG1pc2hhbmRsZXMgY29uZGl0aW9ucy4KKwkgIG15IEB0ZXN0X3N1ZmZpeGVzID0gKHZhciAnVEVTVF9FWFRFTlNJT05TJyktPnZhbHVlX2FzX2xpc3RfcmVjdXJzaXZlOworCSAgaWYgKCRoYW5kbGVfZXhlZXh0KQorCSAgICB7CisJICAgICAgdW5zaGlmdCAoQHRlc3Rfc3VmZml4ZXMsICRhdF9leGVleHQpCisJICAgICAgICB1bmxlc3MgJHRlc3Rfc3VmZml4ZXNbMF0gZXEgJGF0X2V4ZWV4dDsKKwkgICAgfQorCSAgdW5zaGlmdCAoQHRlc3Rfc3VmZml4ZXMsICcnKTsKKworCSAgdHJhbnNmb3JtX3ZhcmlhYmxlX3JlY3Vyc2l2ZWx5CisJICAgICgnVEVTVFMnLCAnVEVTVF9MT0dTJywgJ2FtX190ZXN0bG9ncycsIDEsIElOVEVSTkFMLAorCSAgICAgIHN1YiB7CisJICAgICAgICBteSAoJHN1YnZhciwgJHZhbCwgJGNvbmQsICRmdWxsX2NvbmQpID0gQF87CisJCW15ICRvYmogPSAkdmFsOworCQlyZXR1cm4gJG9iagorCQkgIGlmICR2YWwgPX4gL15cQC4qXEAkLzsKKwkJJG9iaiA9fiBzL1wkXChFWEVFWFRcKSQvL287CisKKwkJaWYgKCR2YWwgPX4gLyhcJFwoKHRvcF8pP3NyY2RpclwpKVwvL28pCisJCSAgeworCQkgICAgbXNnICgnZXJyb3InLCAkc3VidmFyLT5yZGVmICgkY29uZCktPmxvY2F0aW9uLAorCQkJICJwYXJhbGxlbC10ZXN0czogdXNpbmcgYCQxJyBpbiBURVNUUyBpcyBjdXJyZW50bHkgYnJva2VuOiBgJHZhbCciKTsKKwkJICB9CisKKwkJZm9yZWFjaCBteSAkdGVzdF9zdWZmaXggKEB0ZXN0X3N1ZmZpeGVzKQorCQkgIHsKKwkJICAgIG5leHQKKwkJICAgICAgaWYgJHRlc3Rfc3VmZml4IGVxICRhdF9leGVleHQgfHwgJHRlc3Rfc3VmZml4IGVxICcnOworCQkgICAgcmV0dXJuIHN1YnN0ciAoJG9iaiwgMCwgbGVuZ3RoICgkb2JqKSAtIGxlbmd0aCAoJHRlc3Rfc3VmZml4KSkgLiAnLmxvZycKKwkJICAgICAgaWYgc3Vic3RyICgkb2JqLCAtIGxlbmd0aCAoJHRlc3Rfc3VmZml4KSkgZXEgJHRlc3Rfc3VmZml4OworCQkgIH0KKwkJJG9iaiAuPSAnLmxvZyc7CisJCW15ICRjb21waWxlID0gJ0xPR19DT01QSUxFJzsKKwkJZGVmaW5lX3ZhcmlhYmxlICgkY29tcGlsZSwKKwkJCQkgJyQoTE9HX0NPTVBJTEVSKSAkKEFNX0xPR19GTEFHUykgJChMT0dfRkxBR1MpJywgSU5URVJOQUwpOworCQkkb3V0cHV0X3J1bGVzIC49IGZpbGVfY29udGVudHMgKCdjaGVjazInLCBuZXcgQXV0b21ha2U6OkxvY2F0aW9uLAorCQkJCQkJR0VORVJJQyA9PiAwLAorCQkJCQkJT0JKID0+ICRvYmosCisJCQkJCQlTT1VSQ0UgPT4gJHZhbCwKKwkJCQkJCUNPTVBJTEUgPT4nJCgnIC4gJGNvbXBpbGUgLiAnKScsCisJCQkJCQlFWFQgPT4gJycsCisJCQkJCQlhbV9fRVhFRVhUID0+ICdGQUxTRScpOworCSAgICAgICAgcmV0dXJuICRvYmo7CisJICAgICAgfSk7CisKKwkgIG15ICRuaGVscGVyPTE7CisJICBteSAkcHJldiA9ICdURVNUUyc7CisJICBteSAkcG9zdCA9ICcnOworCSAgbXkgJGxhc3Rfc3VmZml4ID0gJHRlc3Rfc3VmZml4ZXNbJCN0ZXN0X3N1ZmZpeGVzXTsKKwkgIG15ICRjdXIgPSAnJzsKKwkgIGZvcmVhY2ggbXkgJHRlc3Rfc3VmZml4IChAdGVzdF9zdWZmaXhlcykKKwkgICAgeworCSAgICAgIGlmICgkdGVzdF9zdWZmaXggZXEgJGxhc3Rfc3VmZml4KQorCSAgICAgICAgeworCQkgICRjdXIgPSAnVEVTVF9MT0dTJzsKKwkJfQorCSAgICAgIGVsc2UKKwkgICAgICAgIHsKKwkJICAkY3VyID0gJ2FtX190ZXN0X2xvZ3MnIC4gJG5oZWxwZXI7CisJCX0KKwkgICAgICBkZWZpbmVfdmFyaWFibGUgKCRjdXIsCisJCSckKCcgLiAkcHJldiAuICc6JyAuICR0ZXN0X3N1ZmZpeCAuICRwb3N0IC4gJz0ubG9nKScsIElOVEVSTkFMKTsKKwkgICAgICAkcG9zdCA9ICcubG9nJzsKKwkgICAgICAkcHJldiA9ICRjdXI7CisJICAgICAgJG5oZWxwZXIrKzsKKwkgICAgICBpZiAoJHRlc3Rfc3VmZml4IG5lICRhdF9leGVleHQgJiYgJHRlc3Rfc3VmZml4IG5lICcnKQorCSAgICAgICAgeworCQkgIChteSAkZXh0ID0gJHRlc3Rfc3VmZml4KSA9fiBzL15cLi8vOworCQkgICRleHQgPSB1YyAkZXh0OworCQkgIG15ICRjb21waWxlID0gJGV4dCAuICdfTE9HX0NPTVBJTEUnOworCQkgIGRlZmluZV92YXJpYWJsZSAoJGNvbXBpbGUsCisJCQkJICAgJyQoJyAuICRleHQgLiAnX0xPR19DT01QSUxFUikgJChBTV8nIC4gICRleHQgLiAnX0xPR19GTEFHUyknCisJCQkJICAgLiAnICQoJyAuICRleHQgLiAnX0xPR19GTEFHUyknLCBJTlRFUk5BTCk7CisJCSAgbXkgJGFtX2V4ZWV4dCA9ICRoYW5kbGVfZXhlZXh0ID8gJ2FtX19FWEVFWFQnIDogJ0ZBTFNFJzsKKwkJICAkb3V0cHV0X3J1bGVzIC49IGZpbGVfY29udGVudHMgKCdjaGVjazInLCBuZXcgQXV0b21ha2U6OkxvY2F0aW9uLAorCQkJCQkJICBHRU5FUklDID0+IDEsCisJCQkJCQkgIE9CSiA9PiAnJywKKwkJCQkJCSAgU09VUkNFID0+ICckPCcsCisJCQkJCQkgIENPTVBJTEUgPT4gJyQoJyAuICRjb21waWxlIC4gJyknLAorCQkJCQkJICBFWFQgPT4gJHRlc3Rfc3VmZml4LAorCQkJCQkJICBhbV9fRVhFRVhUID0+ICRhbV9leGVleHQpOworCSAgICAgICAgfQorCSAgICB9CisKKwkgIGRlZmluZV92YXJpYWJsZSAoJ1RFU1RfTE9HU19UTVAnLCAnJChURVNUX0xPR1M6LmxvZz0ubG9nLXQpJywgSU5URVJOQUwpOworCisJICAkY2xlYW5fZmlsZXN7JyQoVEVTVF9MT0dTX1RNUCknfSA9IE1PU1RMWV9DTEVBTjsKKwkgICRjbGVhbl9maWxlc3snJChURVNUX0xPR1MpJ30gPSBNT1NUTFlfQ0xFQU47CisJICAkY2xlYW5fZmlsZXN7JyQoVEVTVF9TVUlURV9MT0cpJ30gPSBNT1NUTFlfQ0xFQU47CisJICAkY2xlYW5fZmlsZXN7JyQoVEVTVF9TVUlURV9IVE1MKSd9ID0gTU9TVExZX0NMRUFOOworCX0KKyAgICB9Cit9CisKKyMgSGFuZGxlIEVtYWNzIExpc3AuCitzdWIgaGFuZGxlX2VtYWNzX2xpc3AKK3sKKyAgbXkgQGVsZmlsZXMgPSAmYW1faW5zdGFsbF92YXIgKCctY2FuZGlzdCcsICdsaXNwJywgJ0xJU1AnLAorCQkJCSAnbGlzcCcsICdub2luc3QnKTsKKworICByZXR1cm4gaWYgISBAZWxmaWxlczsKKworICBkZWZpbmVfcHJldHR5X3ZhcmlhYmxlICgnYW1fX0VMRklMRVMnLCBUUlVFLCBJTlRFUk5BTCwKKwkJCSAgbWFwIHsgJF8tPlsxXSB9IEBlbGZpbGVzKTsKKyAgZGVmaW5lX3ByZXR0eV92YXJpYWJsZSAoJ2FtX19FTENGSUxFUycsIFRSVUUsIElOVEVSTkFMLAorCQkJICAnJChhbV9fRUxGSUxFUzouZWw9LmVsYyknKTsKKyAgIyBUaGlzIG9uZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB1c2Vycy4KKyAgZGVmaW5lX3ByZXR0eV92YXJpYWJsZSAoJ0VMQ0ZJTEVTJywgVFJVRSwgSU5URVJOQUwsICckKExJU1A6LmVsPS5lbGMpJyk7CisKKyAgcHVzaCBAYWxsLCAnJChFTENGSUxFUyknOworCisgIHJlcXVpcmVfdmFyaWFibGVzICgkZWxmaWxlc1swXVswXSwgIkVtYWNzIExpc3Agc291cmNlcyBzZWVuIiwgVFJVRSwKKwkJICAgICAnRU1BQ1MnLCAnbGlzcGRpcicpOworICByZXF1aXJlX2NvbmZfZmlsZSAoJGVsZmlsZXNbMF1bMF0sIEZPUkVJR04sICdlbGlzcC1jb21wJyk7CisgICZkZWZpbmVfdmFyaWFibGUgKCdlbGlzcF9jb21wJywgIiRhbV9jb25maWdfYXV4X2Rpci9lbGlzcC1jb21wIiwgSU5URVJOQUwpOworfQorCisjIEhhbmRsZSBQeXRob24KK3N1YiBoYW5kbGVfcHl0aG9uCit7CisgIG15IEBweWZpbGVzID0gJmFtX2luc3RhbGxfdmFyICgnLWRlZmF1bHRkaXN0JywgJ3B5dGhvbicsICdQWVRIT04nLAorCQkJCSAnbm9pbnN0Jyk7CisgIHJldHVybiBpZiAhIEBweWZpbGVzOworCisgIHJlcXVpcmVfdmFyaWFibGVzICgkcHlmaWxlc1swXVswXSwgIlB5dGhvbiBzb3VyY2VzIHNlZW4iLCBUUlVFLCAnUFlUSE9OJyk7CisgIHJlcXVpcmVfY29uZl9maWxlICgkcHlmaWxlc1swXVswXSwgRk9SRUlHTiwgJ3B5LWNvbXBpbGUnKTsKKyAgJmRlZmluZV92YXJpYWJsZSAoJ3B5X2NvbXBpbGUnLCAiJGFtX2NvbmZpZ19hdXhfZGlyL3B5LWNvbXBpbGUiLCBJTlRFUk5BTCk7Cit9CisKKyMgSGFuZGxlIEphdmEuCitzdWIgaGFuZGxlX2phdmEKK3sKKyAgICBteSBAc291cmNlbGlzdCA9ICZhbV9pbnN0YWxsX3ZhciAoJy1jYW5kaXN0JywKKwkJCQkgICAgICAnamF2YScsICdKQVZBJywKKwkJCQkgICAgICAnamF2YScsICdub2luc3QnLCAnY2hlY2snKTsKKyAgICByZXR1cm4gaWYgISBAc291cmNlbGlzdDsKKworICAgIG15IEBwcmVmaXggPSBhbV9wcmltYXJ5X3ByZWZpeGVzICgnSkFWQScsIDEsCisJCQkJICAgICAgJ2phdmEnLCAnbm9pbnN0JywgJ2NoZWNrJyk7CisKKyAgICBteSAkZGlyOworICAgIGZvcmVhY2ggbXkgJGN1cnMgKEBwcmVmaXgpCisgICAgICB7CisJbmV4dAorCSAgaWYgJGN1cnMgZXEgJ0VYVFJBJzsKKworCWVycl92YXIgIiR7Y3Vyc31fSkFWQSIsICJtdWx0aXBsZSBfSkFWQSBwcmltYXJpZXMgaW4gdXNlIgorCSAgaWYgZGVmaW5lZCAkZGlyOworCSRkaXIgPSAkY3VyczsKKyAgICAgIH0KKworCisgICAgcHVzaCAoQGFsbCwgJ2NsYXNzJyAuICRkaXIgLiAnLnN0YW1wJyk7Cit9CisKKworIyBIYW5kbGUgc29tZSBvZiB0aGUgbWlub3Igb3B0aW9ucy4KK3N1YiBoYW5kbGVfbWlub3Jfb3B0aW9ucworeworICBpZiAob3B0aW9uICdyZWFkbWUtYWxwaGEnKQorICAgIHsKKyAgICAgIGlmICgkcmVsYXRpdmVfZGlyIGVxICcuJykKKwl7CisJICBpZiAoJHBhY2thZ2VfdmVyc2lvbiAhfiAvXiRHTklUU19WRVJTSU9OX1BBVFRFUk4kLykKKwkgICAgeworCSAgICAgIG1zZyAoJ2Vycm9yLWduaXRzJywgJHBhY2thZ2VfdmVyc2lvbl9sb2NhdGlvbiwKKwkJICAgInZlcnNpb24gYCRwYWNrYWdlX3ZlcnNpb24nIGRvZXNuJ3QgZm9sbG93ICIgLgorCQkgICAiR25pdHMgc3RhbmRhcmRzIik7CisJICAgIH0KKwkgIGlmIChkZWZpbmVkICQxICYmIC1mICdSRUFETUUtYWxwaGEnKQorCSAgICB7CisJICAgICAgIyBUaGlzIG1lYW5zIHdlIGhhdmUgYW4gYWxwaGEgcmVsZWFzZS4gIFNlZQorCSAgICAgICMgR05JVFNfVkVSU0lPTl9QQVRURVJOIGZvciBkZXRhaWxzLgorCSAgICAgIHB1c2hfZGlzdF9jb21tb24gKCdSRUFETUUtYWxwaGEnKTsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyAoJE9VVFBVVCwgQElOUFVUUykKKyMgJnNwbGl0X2NvbmZpZ19maWxlX3NwZWMgKCRTUEVDKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlY29kZSB0aGUgQXV0b2NvbmYgc3ludGF4IGZvciBjb25maWcgZmlsZXMgKGZpbGVzLCBoZWFkZXJzLCBsaW5rcworIyBldGMuKS4KK3N1YiBzcGxpdF9jb25maWdfZmlsZV9zcGVjICgkKQoreworICBteSAoJHNwZWMpID0gQF87CisgIG15ICgkb3V0cHV0LCBAaW5wdXRzKSA9IHNwbGl0ICgvOi8sICRzcGVjKTsKKworICBwdXNoIEBpbnB1dHMsICIkb3V0cHV0LmluIgorICAgIHVubGVzcyBAaW5wdXRzOworCisgIHJldHVybiAoJG91dHB1dCwgQGlucHV0cyk7Cit9CisKKyMgJGlucHV0CisjIGxvY2F0ZV9hbSAoQFBPU1NJQkxFX1NPVVJDRVMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFDX0NPTkZJR19GSUxFUyBhbGxvdyBzcGVjaWZpY2F0aW9ucyBzdWNoIGFzIE1ha2VmaWxlOnRvcC5pbjptaWQuaW46Ym90LmluCisjIFRoaXMgZnVuY3Rpb25zIHJldHVybnMgdGhlIGZpcnN0ICouaW4gZmlsZSBmb3Igd2hpY2ggYSAqLmFtIGV4aXN0cy4KKyMgSXQgcmV0dXJucyB1bmRlZiBvdGhlcndpc2UuCitzdWIgbG9jYXRlX2FtIChAKQoreworICBteSAoQHJlc3QpID0gQF87CisgIG15ICRpbnB1dDsKKyAgZm9yZWFjaCBteSAkZmlsZSAoQHJlc3QpCisgICAgeworICAgICAgaWYgKCgkZmlsZSA9fiAvXiguKilcLmluJC8pICYmIC1mICIkMS5hbSIpCisJeworCSAgJGlucHV0ID0gJGZpbGU7CisJICBsYXN0OworCX0KKyAgICB9CisgIHJldHVybiAkaW5wdXQ7Cit9CisKK215ICVtYWtlX2xpc3Q7CisKKyMgJnNjYW5fYXV0b2NvbmZfY29uZmlnX2ZpbGVzICgkV0hFUkUsICRDT05GSUctRklMRVMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTdHVkeSAkQ09ORklHLUZJTEVTIHdoaWNoIGlzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBBQ19DT05GSUdfRklMRVMKKyMgKG9yIEFDX09VVFBVVCkuCitzdWIgc2Nhbl9hdXRvY29uZl9jb25maWdfZmlsZXMgKCQkKQoreworICBteSAoJHdoZXJlLCAkY29uZmlnX2ZpbGVzKSA9IEBfOworCisgICMgTG9vayBhdCBwb3RlbnRpYWwgTWFrZWZpbGUuYW0ncy4KKyAgZm9yZWFjaCAoc3BsaXQgJyAnLCAkY29uZmlnX2ZpbGVzKQorICAgIHsKKyAgICAgICMgTXVzdCBza2lwIGVtcHR5IHN0cmluZyBmb3IgUGVybCA0LgorICAgICAgbmV4dCBpZiAkXyBlcSAiXFwiIHx8ICRfIGVxICcnOworCisgICAgICAjIEhhbmRsZSAkbG9jYWw6JGlucHV0IHN5bnRheC4KKyAgICAgIG15ICgkbG9jYWwsIEByZXN0KSA9IHNwbGl0ICgvOi8pOworICAgICAgQHJlc3QgPSAoIiRsb2NhbC5pbiIsKSB1bmxlc3MgQHJlc3Q7CisgICAgICBtc2cgKCdwb3J0YWJpbGl0eScsICR3aGVyZSwKKwkgICJPbWl0IGxlYWRpbmcgYC4vJyBmcm9tIGNvbmZpZyBmaWxlIG5hbWVzIHN1Y2ggYXMgYCRsb2NhbCcsIgorCSAgLiAiXG5hcyBub3QgYWxsIG1ha2UgaW1wbGVtZW50YXRpb25zIHRyZWF0IGBmaWxlJyBhbmQgYC4vZmlsZScgZXF1YWxseS4iKQorCWlmICgkbG9jYWwgPX4gL15cLlwvLyk7CisgICAgICBteSAkaW5wdXQgPSBsb2NhdGVfYW0gQHJlc3Q7CisgICAgICBpZiAoJGlucHV0KQorCXsKKwkgICMgV2UgaGF2ZSBhIGZpbGUgdGhhdCBhdXRvbWFrZSBzaG91bGQgZ2VuZXJhdGUuCisJICAkbWFrZV9saXN0eyRpbnB1dH0gPSBqb2luICgnOicsICgkbG9jYWwsIEByZXN0KSk7CisJfQorICAgICAgZWxzZQorCXsKKwkgICMgV2UgaGF2ZSBhIGZpbGUgdGhhdCBhdXRvbWFrZSBzaG91bGQgY2F1c2UgdG8gYmUKKwkgICMgcmVidWlsdCwgYnV0IHNob3VsZG4ndCBnZW5lcmF0ZSBpdHNlbGYuCisJICBwdXNoIChAb3RoZXJfaW5wdXRfZmlsZXMsICRfKTsKKwl9CisgICAgICAkYWNfY29uZmlnX2ZpbGVzX2xvY2F0aW9ueyRsb2NhbH0gPSAkd2hlcmU7CisgICAgICAkYWNfY29uZmlnX2ZpbGVzX2NvbmRpdGlvbnskbG9jYWx9ID0KKyAgICAgICAgbmV3IEF1dG9tYWtlOjpDb25kaXRpb24gKEBjb25kX3N0YWNrKQorICAgICAgICAgIGlmIChAY29uZF9zdGFjayk7CisgICAgfQorfQorCisKKyMgJnNjYW5fYXV0b2NvbmZfdHJhY2VzICgkRklMRU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3ViIHNjYW5fYXV0b2NvbmZfdHJhY2VzICgkKQoreworICBteSAoJGZpbGVuYW1lKSA9IEBfOworCisgICMgTWFjcm9zIHRvIHRyYWNlLCB3aXRoIHRoZWlyIG1pbmltYWwgbnVtYmVyIG9mIGFyZ3VtZW50cy4KKyAgIworICAjIElNUE9SVEFOVDogSWYgeW91IGFkZCBhIG1hY3JvIGhlcmUsIHlvdSBzaG91bGQgYWxzbyBhZGQgdGhpcyBtYWNybworICAjID09PT09PT09PSAgdG8gQXV0b21ha2UtcHJlc2VsZWN0aW9uIGluIGF1dG9jb25mL2xpYi9hdXRvbTR0ZS5pbi4KKyAgbXkgJXRyYWNlZCA9ICgKKwkJQUNfQ0FOT05JQ0FMX0JVSUxEID0+IDAsCisJCUFDX0NBTk9OSUNBTF9IT1NUID0+IDAsCisJCUFDX0NBTk9OSUNBTF9UQVJHRVQgPT4gMCwKKwkJQUNfQ09ORklHX0FVWF9ESVIgPT4gMSwKKwkJQUNfQ09ORklHX0ZJTEVTID0+IDEsCisJCUFDX0NPTkZJR19IRUFERVJTID0+IDEsCisJCUFDX0NPTkZJR19MSUJPQkpfRElSID0+IDEsCisJCUFDX0NPTkZJR19MSU5LUyA9PiAxLAorCQlBQ19GQ19TUkNFWFQgPT4gMSwKKwkJQUNfSU5JVCA9PiAwLAorCQlBQ19MSUJTT1VSQ0UgPT4gMSwKKwkJQUNfUkVRVUlSRV9BVVhfRklMRSA9PiAxLAorCQlBQ19TVUJTVF9UUkFDRSA9PiAxLAorCQlBTV9BVVRPTUFLRV9WRVJTSU9OID0+IDEsCisJCUFNX0NPTkRJVElPTkFMID0+IDIsCisJCUFNX0VOQUJMRV9NVUxUSUxJQiA9PiAwLAorCQlBTV9HTlVfR0VUVEVYVCA9PiAwLAorCQlBTV9HTlVfR0VUVEVYVF9JTlRMX1NVQkRJUiA9PiAwLAorCQlBTV9JTklUX0FVVE9NQUtFID0+IDAsCisJCUFNX01BSU5UQUlORVJfTU9ERSA9PiAwLAorCQlBTV9QUk9HX0NDX0NfTyA9PiAwLAorCQlBTV9TSUxFTlRfUlVMRVMgPT4gMCwKKwkJX0FNX1NVQlNUX05PVE1BS0UgPT4gMSwKKwkJX0FNX0NPTkRfSUYgPT4gMSwKKwkJX0FNX0NPTkRfRUxTRSA9PiAxLAorCQlfQU1fQ09ORF9FTkRJRiA9PiAxLAorCQlMVF9TVVBQT1JURURfVEFHID0+IDEsCisJCV9MVF9BQ19UQUdDT05GSUcgPT4gMCwKKwkJbTRfaW5jbHVkZSA9PiAxLAorCQltNF9zaW5jbHVkZSA9PiAxLAorCQlzaW5jbHVkZSA9PiAxLAorCSAgICAgICk7CisKKyAgbXkgJHRyYWNlcyA9ICgkRU5We0FVVE9DT05GfSB8fCAnYXV0b2NvbmYnKSAuICIgIjsKKworICAjIFVzZSBhIHNlcGFyYXRvciB1bmxpa2VseSB0byBiZSB1c2VkLCBub3QgYDonLCB0aGUgZGVmYXVsdCwgd2hpY2gKKyAgIyBoYXMgYSBwcmVjaXNlIG1lYW5pbmcgZm9yIEFDX0NPTkZJR19GSUxFUyBhbmQgc28gb24uCisgICR0cmFjZXMgLj0gam9pbiAoJyAnLAorCQkgICBtYXAgeyAiLS10cmFjZT0kXyIgLiAnOlwkZjpcJGw6OlwkZDo6XCRuOjpcJHs6On0lJyB9CisJCSAgIChrZXlzICV0cmFjZWQpKTsKKworICBteSAkdHJhY2VmaCA9IG5ldyBBdXRvbWFrZTo6WEZpbGUgKCIkdHJhY2VzICRmaWxlbmFtZSB8Iik7CisgIHZlcmIgInJlYWRpbmcgJHRyYWNlcyI7CisKKyAgQGNvbmRfc3RhY2sgPSAoKTsKKyAgbXkgJHdoZXJlOworCisgIHdoaWxlICgkXyA9ICR0cmFjZWZoLT5nZXRsaW5lKQorICAgIHsKKyAgICAgIGNob21wOworICAgICAgbXkgKCRoZXJlLCAkZGVwdGgsIEBhcmdzKSA9IHNwbGl0ICgvOjovKTsKKyAgICAgICR3aGVyZSA9IG5ldyBBdXRvbWFrZTo6TG9jYXRpb24gJGhlcmU7CisgICAgICBteSAkbWFjcm8gPSAkYXJnc1swXTsKKworICAgICAgcHJvZ19lcnJvciAoInVucmVxdWVzdGVkIHRyYWNlIGAkbWFjcm8nIikKKwl1bmxlc3MgZXhpc3RzICR0cmFjZWR7JG1hY3JvfTsKKworICAgICAgIyBTa2lwIGFuZCBkaWFnbm9zZSBtYWxmb3JtZWQgY2FsbHMuCisgICAgICBpZiAoJCNhcmdzIDwgJHRyYWNlZHskbWFjcm99KQorCXsKKwkgIG1zZyAoJ3N5bnRheCcsICR3aGVyZSwgIm5vdCBlbm91Z2ggYXJndW1lbnRzIGZvciAkbWFjcm8iKTsKKwkgIG5leHQ7CisJfQorCisgICAgICAjIEFscGhhYmV0aWNhbCBvcmRlcmluZyBwbGVhc2UuCisgICAgICBpZiAoJG1hY3JvIGVxICdBQ19DQU5PTklDQUxfQlVJTEQnKQorCXsKKwkgIGlmICgkc2Vlbl9jYW5vbmljYWwgPD0gQUNfQ0FOT05JQ0FMX0JVSUxEKQorCSAgICB7CisJICAgICAgJHNlZW5fY2Fub25pY2FsID0gQUNfQ0FOT05JQ0FMX0JVSUxEOworCSAgICAgICRjYW5vbmljYWxfbG9jYXRpb24gPSAkd2hlcmU7CisJICAgIH0KKwl9CisgICAgICBlbHNpZiAoJG1hY3JvIGVxICdBQ19DQU5PTklDQUxfSE9TVCcpCisJeworCSAgaWYgKCRzZWVuX2Nhbm9uaWNhbCA8PSBBQ19DQU5PTklDQUxfSE9TVCkKKwkgICAgeworCSAgICAgICRzZWVuX2Nhbm9uaWNhbCA9IEFDX0NBTk9OSUNBTF9IT1NUOworCSAgICAgICRjYW5vbmljYWxfbG9jYXRpb24gPSAkd2hlcmU7CisJICAgIH0KKwl9CisgICAgICBlbHNpZiAoJG1hY3JvIGVxICdBQ19DQU5PTklDQUxfVEFSR0VUJykKKwl7CisJICAkc2Vlbl9jYW5vbmljYWwgPSBBQ19DQU5PTklDQUxfVEFSR0VUOworCSAgJGNhbm9uaWNhbF9sb2NhdGlvbiA9ICR3aGVyZTsKKwl9CisgICAgICBlbHNpZiAoJG1hY3JvIGVxICdBQ19DT05GSUdfQVVYX0RJUicpCisJeworCSAgaWYgKCRzZWVuX2luaXRfYXV0b21ha2UpCisJICAgIHsKKwkgICAgICBlcnJvciAoJHdoZXJlLCAiQUNfQ09ORklHX0FVWF9ESVIgbXVzdCBiZSBjYWxsZWQgYmVmb3JlICIKKwkJICAgICAuICJBTV9JTklUX0FVVE9NQUtFLi4uIiwgcGFydGlhbCA9PiAxKTsKKwkgICAgICBlcnJvciAoJHNlZW5faW5pdF9hdXRvbWFrZSwgIi4uLiBBTV9JTklUX0FVVE9NQUtFIGNhbGxlZCBoZXJlIik7CisJICAgIH0KKwkgICRjb25maWdfYXV4X2RpciA9ICRhcmdzWzFdOworCSAgJGNvbmZpZ19hdXhfZGlyX3NldF9pbl9jb25maWd1cmVfYWMgPSAxOworCSAgJHJlbGF0aXZlX2RpciA9ICcuJzsKKwkgIGNoZWNrX2RpcmVjdG9yeSAoJGNvbmZpZ19hdXhfZGlyLCAkd2hlcmUpOworCX0KKyAgICAgIGVsc2lmICgkbWFjcm8gZXEgJ0FDX0NPTkZJR19GSUxFUycpCisJeworCSAgIyBMb29rIGF0IHBvdGVudGlhbCBNYWtlZmlsZS5hbSdzLgorCSAgc2Nhbl9hdXRvY29uZl9jb25maWdfZmlsZXMgKCR3aGVyZSwgJGFyZ3NbMV0pOworCX0KKyAgICAgIGVsc2lmICgkbWFjcm8gZXEgJ0FDX0NPTkZJR19IRUFERVJTJykKKwl7CisJICBmb3JlYWNoIG15ICRzcGVjIChzcGxpdCAoJyAnLCAkYXJnc1sxXSkpCisJICAgIHsKKwkgICAgICBteSAoJGRlc3QsIEBzcmMpID0gc3BsaXQgKCc6JywgJHNwZWMpOworCSAgICAgICRhY19jb25maWdfZmlsZXNfbG9jYXRpb257JGRlc3R9ID0gJHdoZXJlOworCSAgICAgIHB1c2ggQGNvbmZpZ19oZWFkZXJzLCAkc3BlYzsKKwkgICAgfQorCX0KKyAgICAgIGVsc2lmICgkbWFjcm8gZXEgJ0FDX0NPTkZJR19MSUJPQkpfRElSJykKKwl7CisJICAkY29uZmlnX2xpYm9ial9kaXIgPSAkYXJnc1sxXTsKKwkgICRyZWxhdGl2ZV9kaXIgPSAnLic7CisJICBjaGVja19kaXJlY3RvcnkgKCRjb25maWdfbGlib2JqX2RpciwgJHdoZXJlKTsKKwl9CisgICAgICBlbHNpZiAoJG1hY3JvIGVxICdBQ19DT05GSUdfTElOS1MnKQorCXsKKwkgIGZvcmVhY2ggbXkgJHNwZWMgKHNwbGl0ICgnICcsICRhcmdzWzFdKSkKKwkgICAgeworCSAgICAgIG15ICgkZGVzdCwgJHNyYykgPSBzcGxpdCAoJzonLCAkc3BlYyk7CisJICAgICAgJGFjX2NvbmZpZ19maWxlc19sb2NhdGlvbnskZGVzdH0gPSAkd2hlcmU7CisJICAgICAgcHVzaCBAY29uZmlnX2xpbmtzLCAkc3BlYzsKKwkgICAgfQorCX0KKyAgICAgIGVsc2lmICgkbWFjcm8gZXEgJ0FDX0ZDX1NSQ0VYVCcpCisJeworCSAgbXkgJHN1ZmZpeCA9ICRhcmdzWzFdOworCSAgIyBUaGVzZSBmbGFncyBhcmUgdXNlZCBhcyAlU09VUkNFRkxBRyUgaW4gZGVwZW5kMi5hbSwKKwkgICMgd2hlcmUgdGhlIHRyYWlsaW5nIHNwYWNlIGlzIGltcG9ydGFudC4KKwkgICRzb3VyY2VmbGFnc3snLicgLiAkc3VmZml4fSA9ICckKEZDRkxBR1NfJyAuICRzdWZmaXggLiAnKSAnCisJICAgIGlmICgkc3VmZml4IGVxICdmOTAnIHx8ICRzdWZmaXggZXEgJ2Y5NScgfHwgJHN1ZmZpeCBlcSAnZjAzJyB8fCAkc3VmZml4IGVxICdmMDgnKTsKKwl9CisgICAgICBlbHNpZiAoJG1hY3JvIGVxICdBQ19JTklUJykKKwl7CisJICBpZiAoZGVmaW5lZCAkYXJnc1syXSkKKwkgICAgeworCSAgICAgICRwYWNrYWdlX3ZlcnNpb24gPSAkYXJnc1syXTsKKwkgICAgICAkcGFja2FnZV92ZXJzaW9uX2xvY2F0aW9uID0gJHdoZXJlOworCSAgICB9CisJfQorICAgICAgZWxzaWYgKCRtYWNybyBlcSAnQUNfTElCU09VUkNFJykKKwl7CisJICAkbGlic291cmNlc3skYXJnc1sxXX0gPSAkaGVyZTsKKwl9CisgICAgICBlbHNpZiAoJG1hY3JvIGVxICdBQ19SRVFVSVJFX0FVWF9GSUxFJykKKwl7CisJICAjIE9ubHkgcmVtZW1iZXIgdGhlIGZpcnN0IHRpbWUgYSBmaWxlIGlzIHJlcXVpcmVkLgorCSAgJHJlcXVpcmVkX2F1eF9maWxleyRhcmdzWzFdfSA9ICR3aGVyZQorCSAgICB1bmxlc3MgZXhpc3RzICRyZXF1aXJlZF9hdXhfZmlsZXskYXJnc1sxXX07CisJfQorICAgICAgZWxzaWYgKCRtYWNybyBlcSAnQUNfU1VCU1RfVFJBQ0UnKQorCXsKKwkgICMgSnVzdCBjaGVjayBmb3IgYWxwaGFudW1lcmljIGluIEFDX1NVQlNUX1RSQUNFLiAgSWYgeW91IGRvCisJICAjIEFDX1NVQlNUKDUpLCB0aGVuIHRvbyBiYWQuCisJICAkY29uZmlndXJlX3ZhcnN7JGFyZ3NbMV19ID0gJHdoZXJlCisJICAgIGlmICRhcmdzWzFdID1+IC9eXHcrJC87CisJfQorICAgICAgZWxzaWYgKCRtYWNybyBlcSAnQU1fQVVUT01BS0VfVkVSU0lPTicpCisJeworCSAgZXJyb3IgKCR3aGVyZSwKKwkJICJ2ZXJzaW9uIG1pc21hdGNoLiAgVGhpcyBpcyBBdXRvbWFrZSAkVkVSU0lPTixcbiIgLgorCQkgImJ1dCB0aGUgZGVmaW5pdGlvbiB1c2VkIGJ5IHRoaXMgQU1fSU5JVF9BVVRPTUFLRVxuIiAuCisJCSAiY29tZXMgZnJvbSBBdXRvbWFrZSAkYXJnc1sxXS4gIFlvdSBzaG91bGQgcmVjcmVhdGVcbiIgLgorCQkgImFjbG9jYWwubTQgd2l0aCBhY2xvY2FsIGFuZCBydW4gYXV0b21ha2UgYWdhaW4uXG4iLAorCQkgIyAkPyA9IDYzIGlzIHVzZWQgdG8gaW5kaWNhdGUgdmVyc2lvbiBtaXNtYXRjaCB0byBtaXNzaW5nLgorCQkgZXhpdF9jb2RlID0+IDYzKQorCSAgICBpZiAkVkVSU0lPTiBuZSAkYXJnc1sxXTsKKworCSAgJHNlZW5fYXV0b21ha2VfdmVyc2lvbiA9IDE7CisJfQorICAgICAgZWxzaWYgKCRtYWNybyBlcSAnQU1fQ09ORElUSU9OQUwnKQorCXsKKwkgICRjb25maWd1cmVfY29uZHskYXJnc1sxXX0gPSAkd2hlcmU7CisJfQorICAgICAgZWxzaWYgKCRtYWNybyBlcSAnQU1fRU5BQkxFX01VTFRJTElCJykKKwl7CisJICAkc2Vlbl9tdWx0aWxpYiA9ICR3aGVyZTsKKwl9CisgICAgICBlbHNpZiAoJG1hY3JvIGVxICdBTV9HTlVfR0VUVEVYVCcpCisJeworCSAgJHNlZW5fZ2V0dGV4dCA9ICR3aGVyZTsKKwkgICRhY19nZXR0ZXh0X2xvY2F0aW9uID0gJHdoZXJlOworCSAgJHNlZW5fZ2V0dGV4dF9leHRlcm5hbCA9IGdyZXAgKCRfIGVxICdleHRlcm5hbCcsIEBhcmdzKTsKKwl9CisgICAgICBlbHNpZiAoJG1hY3JvIGVxICdBTV9HTlVfR0VUVEVYVF9JTlRMX1NVQkRJUicpCisJeworCSAgJHNlZW5fZ2V0dGV4dF9pbnRsID0gJHdoZXJlOworCX0KKyAgICAgIGVsc2lmICgkbWFjcm8gZXEgJ0FNX0lOSVRfQVVUT01BS0UnKQorCXsKKwkgICRzZWVuX2luaXRfYXV0b21ha2UgPSAkd2hlcmU7CisJICBpZiAoZGVmaW5lZCAkYXJnc1syXSkKKwkgICAgeworCSAgICAgICRwYWNrYWdlX3ZlcnNpb24gPSAkYXJnc1syXTsKKwkgICAgICAkcGFja2FnZV92ZXJzaW9uX2xvY2F0aW9uID0gJHdoZXJlOworCSAgICB9CisJICBlbHNpZiAoZGVmaW5lZCAkYXJnc1sxXSkKKwkgICAgeworCSAgICAgIGV4aXQgJGV4aXRfY29kZQorCQlpZiAocHJvY2Vzc19nbG9iYWxfb3B0aW9uX2xpc3QgKCR3aGVyZSwKKwkJCQkJCXNwbGl0ICgnICcsICRhcmdzWzFdKSkpOworCSAgICB9CisJfQorICAgICAgZWxzaWYgKCRtYWNybyBlcSAnQU1fTUFJTlRBSU5FUl9NT0RFJykKKwl7CisJICAkc2Vlbl9tYWludF9tb2RlID0gJHdoZXJlOworCX0KKyAgICAgIGVsc2lmICgkbWFjcm8gZXEgJ0FNX1BST0dfQ0NfQ19PJykKKwl7CisJICAkc2Vlbl9jY19jX28gPSAkd2hlcmU7CisJfQorICAgICAgZWxzaWYgKCRtYWNybyBlcSAnQU1fU0lMRU5UX1JVTEVTJykKKyAgICAgICAgeworCSAgc2V0X2dsb2JhbF9vcHRpb24gKCdzaWxlbnQtcnVsZXMnLCAkd2hlcmUpOworCX0KKyAgICAgIGVsc2lmICgkbWFjcm8gZXEgJ19BTV9DT05EX0lGJykKKyAgICAgICAgeworCSAgY29uZF9zdGFja19pZiAoJycsICRhcmdzWzFdLCAkd2hlcmUpOworCSAgZXJyb3IgKCR3aGVyZSwgIm1pc3NpbmcgbTQgcXVvdGluZywgbWFjcm8gZGVwdGggJGRlcHRoIikKKwkgICAgaWYgKCRkZXB0aCAhPSAxKTsKKwl9CisgICAgICBlbHNpZiAoJG1hY3JvIGVxICdfQU1fQ09ORF9FTFNFJykKKyAgICAgICAgeworCSAgY29uZF9zdGFja19lbHNlICgnIScsICRhcmdzWzFdLCAkd2hlcmUpOworCSAgZXJyb3IgKCR3aGVyZSwgIm1pc3NpbmcgbTQgcXVvdGluZywgbWFjcm8gZGVwdGggJGRlcHRoIikKKwkgICAgaWYgKCRkZXB0aCAhPSAxKTsKKwl9CisgICAgICBlbHNpZiAoJG1hY3JvIGVxICdfQU1fQ09ORF9FTkRJRicpCisgICAgICAgIHsKKwkgIGNvbmRfc3RhY2tfZW5kaWYgKHVuZGVmLCB1bmRlZiwgJHdoZXJlKTsKKwkgIGVycm9yICgkd2hlcmUsICJtaXNzaW5nIG00IHF1b3RpbmcsIG1hY3JvIGRlcHRoICRkZXB0aCIpCisJICAgIGlmICgkZGVwdGggIT0gMSk7CisJfQorICAgICAgZWxzaWYgKCRtYWNybyBlcSAnX0FNX1NVQlNUX05PVE1BS0UnKQorCXsKKwkgICRpZ25vcmVkX2NvbmZpZ3VyZV92YXJzeyRhcmdzWzFdfSA9ICR3aGVyZTsKKwl9CisgICAgICBlbHNpZiAoJG1hY3JvIGVxICdtNF9pbmNsdWRlJworCSAgICAgfHwgJG1hY3JvIGVxICdtNF9zaW5jbHVkZScKKwkgICAgIHx8ICRtYWNybyBlcSAnc2luY2x1ZGUnKQorCXsKKwkgICMgU2tpcCBtaXNzaW5nIGBzaW5jbHVkZSdkIGZpbGVzLgorCSAgbmV4dCBpZiAkbWFjcm8gbmUgJ200X2luY2x1ZGUnICYmICEgLWYgJGFyZ3NbMV07CisKKwkgICMgU29tZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBBdXRvY29uZiBkb24ndCB1c2UKKwkgICMgZnJvemVuIGZpbGVzLiAgQ29uc2VxdWVudGx5IGl0J3MgcG9zc2libGUgdGhhdCB3ZSBzZWUgYWxsCisJICAjIG00X2luY2x1ZGUncyBwZXJmb3JtZWQgZHVyaW5nIEF1dG9jb25mJ3Mgc3RhcnR1cC4KKwkgICMgT2J2aW91c2x5IHdlIGRvbid0IHdhbnQgdG8gZGlzdHJpYnV0ZSBBdXRvY29uZidzIGZpbGVzCisJICAjIHNvIHdlIHNraXAgYWJzb2x1dGUgZmlsZW5hbWVzIGhlcmUuCisJICBwdXNoIEBjb25maWd1cmVfZGVwcywgJyQodG9wX3NyY2RpcikvJyAuICRhcmdzWzFdCisJICAgIHVubGVzcyAkaGVyZSA9fiBtLF4oPzpcdzopP1tcXC9dLDsKKwkgICMgS2VlcCB0cmFjayBvZiB0aGUgZ3JlYXRlc3QgdGltZXN0YW1wLgorCSAgaWYgKC1lICRhcmdzWzFdKQorCSAgICB7CisJICAgICAgbXkgJG10aW1lID0gbXRpbWUgJGFyZ3NbMV07CisJICAgICAgJGNvbmZpZ3VyZV9kZXBzX2dyZWF0ZXN0X3RpbWVzdGFtcCA9ICRtdGltZQorCQlpZiAkbXRpbWUgPiAkY29uZmlndXJlX2RlcHNfZ3JlYXRlc3RfdGltZXN0YW1wOworCSAgICB9CisJfQorICAgICAgZWxzaWYgKCRtYWNybyBlcSAnTFRfU1VQUE9SVEVEX1RBRycpCisJeworCSAgJGxpYnRvb2xfdGFnc3skYXJnc1sxXX0gPSAxOworCSAgJGxpYnRvb2xfbmV3X2FwaSA9IDE7CisJfQorICAgICAgZWxzaWYgKCRtYWNybyBlcSAnX0xUX0FDX1RBR0NPTkZJRycpCisJeworCSAgIyBfTFRfQUNfVEFHQ09ORklHIGlzIGFuIG9sZCBtYWNybyBwcmVzZW50IGluIExpYnRvb2wgMS41LgorCSAgIyBXZSB1c2UgaXQgdG8gZGV0ZWN0IHdoZXRoZXIgdGFncyBhcmUgc3VwcG9ydGVkLiAgT3VyCisJICAjIHByZWZlcnJlZCBpbnRlcmZhY2UgaXMgTFRfU1VQUE9SVEVEX1RBRywgYnV0IGl0IHdhcworCSAgIyBpbnRyb2R1Y2VkIGluIExpYnRvb2wgMS42LgorCSAgaWYgKDAgPT0ga2V5cyAlbGlidG9vbF90YWdzKQorCSAgICB7CisJICAgICAgIyBIYXJkY29kZSB0aGUgdGFncyBzdXBwb3J0ZWQgYnkgTGlidG9vbCAxLjUuCisJICAgICAgJWxpYnRvb2xfdGFncyA9IChDQyA9PiAxLCBDWFggPT4gMSwgR0NKID0+IDEsIEY3NyA9PiAxKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgZXJyb3IgKCR3aGVyZSwgImNvbmRpdGlvbiBzdGFjayBub3QgcHJvcGVybHkgY2xvc2VkIikKKyAgICBpZiAoQGNvbmRfc3RhY2spOworCisgICR0cmFjZWZoLT5jbG9zZTsKK30KKworCisjICZzY2FuX2F1dG9jb25mX2ZpbGVzICgpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgd2UgdXNlIGBjb25maWd1cmUuYWMnIG9yIGBjb25maWd1cmUuaW4nLgorIyBTY2FuIGl0IChhbmQgcG9zc2libHkgYGFjbG9jYWwubTQnKSBmb3IgaW50ZXJlc3RpbmcgdGhpbmdzLgorIyBXZSBtdXN0IHNjYW4gYWNsb2NhbC5tNCBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIEFDX1NVQlNUcyBhbmQgc3VjaCB0aGVyZS4KK3N1YiBzY2FuX2F1dG9jb25mX2ZpbGVzICgpCit7CisgICMgUmVpbml0aWFsaXplIGxpYnNvdXJjZXMgaGVyZS4gIFRoaXMgaXNuJ3QgcmVhbGx5IG5lY2Vzc2FyeSwKKyAgIyBzaW5jZSB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoZXJlIGlzIG9ubHkgb25lIGNvbmZpZ3VyZS5hYy4gIEJ1dAorICAjIHRoYXQgd29uJ3QgYWx3YXlzIGJlIHRoZSBjYXNlLgorICAlbGlic291cmNlcyA9ICgpOworCisgICMgS2VlcCB0cmFjayBvZiB0aGUgeW91bmdlc3QgY29uZmlndXJlIGRlcGVuZGVuY3kuCisgICRjb25maWd1cmVfZGVwc19ncmVhdGVzdF90aW1lc3RhbXAgPSBtdGltZSAkY29uZmlndXJlX2FjOworICBpZiAoLWUgJ2FjbG9jYWwubTQnKQorICAgIHsKKyAgICAgIG15ICRtdGltZSA9IG10aW1lICdhY2xvY2FsLm00JzsKKyAgICAgICRjb25maWd1cmVfZGVwc19ncmVhdGVzdF90aW1lc3RhbXAgPSAkbXRpbWUKKwlpZiAkbXRpbWUgPiAkY29uZmlndXJlX2RlcHNfZ3JlYXRlc3RfdGltZXN0YW1wOworICAgIH0KKworICBzY2FuX2F1dG9jb25mX3RyYWNlcyAoJGNvbmZpZ3VyZV9hYyk7CisKKyAgQGNvbmZpZ3VyZV9pbnB1dF9maWxlcyA9IHNvcnQga2V5cyAlbWFrZV9saXN0OworICAjIFNldCBpbnB1dCBhbmQgb3V0cHV0IGZpbGVzIGlmIG5vdCBzcGVjaWZpZWQgYnkgdXNlci4KKyAgaWYgKCEgQGlucHV0X2ZpbGVzKQorICAgIHsKKyAgICAgIEBpbnB1dF9maWxlcyA9IEBjb25maWd1cmVfaW5wdXRfZmlsZXM7CisgICAgICAlb3V0cHV0X2ZpbGVzID0gJW1ha2VfbGlzdDsKKyAgICB9CisKKworICBpZiAoISAkc2Vlbl9pbml0X2F1dG9tYWtlKQorICAgIHsKKyAgICAgIGVycl9hYyAoIm5vIHByb3BlciBpbnZvY2F0aW9uIG9mIEFNX0lOSVRfQVVUT01BS0Ugd2FzIGZvdW5kLlxuWW91ICIKKwkgICAgICAuICJzaG91bGQgdmVyaWZ5IHRoYXQgJGNvbmZpZ3VyZV9hYyBpbnZva2VzIEFNX0lOSVRfQVVUT01BS0UsIgorCSAgICAgIC4gIlxudGhhdCBhY2xvY2FsLm00IGlzIHByZXNlbnQgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnksXG4iCisJICAgICAgLiAiYW5kIHRoYXQgYWNsb2NhbC5tNCB3YXMgcmVjZW50bHkgcmVnZW5lcmF0ZWQgIgorCSAgICAgIC4gIih1c2luZyBhY2xvY2FsKS4iKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoISAkc2Vlbl9hdXRvbWFrZV92ZXJzaW9uKQorCXsKKwkgIGlmICgtZiAnYWNsb2NhbC5tNCcpCisJICAgIHsKKwkgICAgICBlcnJvciAoJHNlZW5faW5pdF9hdXRvbWFrZSwKKwkJICAgICAieW91ciBpbXBsZW1lbnRhdGlvbiBvZiBBTV9JTklUX0FVVE9NQUtFIGNvbWVzIGZyb20gIiAuCisJCSAgICAgImFuXG5vbGQgQXV0b21ha2UgdmVyc2lvbi4gIFlvdSBzaG91bGQgcmVjcmVhdGUgIiAuCisJCSAgICAgImFjbG9jYWwubTRcbndpdGggYWNsb2NhbCBhbmQgcnVuIGF1dG9tYWtlIGFnYWluLlxuIiwKKwkJICAgICAjICQ/ID0gNjMgaXMgdXNlZCB0byBpbmRpY2F0ZSB2ZXJzaW9uIG1pc21hdGNoIHRvIG1pc3NpbmcuCisJCSAgICAgZXhpdF9jb2RlID0+IDYzKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgZXJyb3IgKCRzZWVuX2luaXRfYXV0b21ha2UsCisJCSAgICAgIm5vIHByb3BlciBpbXBsZW1lbnRhdGlvbiBvZiBBTV9JTklUX0FVVE9NQUtFIHdhcyAiIC4KKwkJICAgICAiZm91bmQsXG5wcm9iYWJseSBiZWNhdXNlIGFjbG9jYWwubTQgaXMgbWlzc2luZy4uLlxuIiAuCisJCSAgICAgIllvdSBzaG91bGQgcnVuIGFjbG9jYWwgdG8gY3JlYXRlIHRoaXMgZmlsZSwgdGhlblxuIiAuCisJCSAgICAgInJ1biBhdXRvbWFrZSBhZ2Fpbi5cbiIpOworCSAgICB9CisJfQorICAgIH0KKworICBsb2NhdGVfYXV4X2RpciAoKTsKKworICAjIFJlb3JkZXIgQGlucHV0X2ZpbGVzIHNvIHRoYXQgdGhlIE1ha2VmaWxlIHRoYXQgZGlzdHJpYnV0ZXMgYXV4CisgICMgZmlsZXMgaXMgcHJvY2Vzc2VkIGxhc3QuICBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGVhY2ggZGlyZWN0b3J5CisgICMgY2FuIHJlcXVpcmUgYXV4aWxpYXJ5IHNjcmlwdHMgYW5kIHdlIHNob3VsZCB3YWl0IHVudGlsIHRoZXkgaGF2ZQorICAjIGJlZW4gaW5zdGFsbGVkIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlbS4KKworICAjIFRoZSBNYWtlZmlsZS5pbiB0aGF0IGRpc3RyaWJ1dGUgdGhlIGF1eCBmaWxlcyBpcyB0aGUgb25lIGluCisgICMgJGNvbmZpZ19hdXhfZGlyIG9yIHRoZSB0b3AtbGV2ZWwgTWFrZWZpbGUuCisgIG15ICRhdXhkaXJkaXN0ID0gaXNfbWFrZV9kaXIgKCRjb25maWdfYXV4X2RpcikgPyAkY29uZmlnX2F1eF9kaXIgOiAnLic7CisgIG15IEBuZXdfaW5wdXRfZmlsZXMgPSAoKTsKKyAgd2hpbGUgKEBpbnB1dF9maWxlcykKKyAgICB7CisgICAgICBteSAkaW4gPSBwb3AgQGlucHV0X2ZpbGVzOworICAgICAgbXkgQGlucyA9IHNwbGl0ICgvOi8sICRvdXRwdXRfZmlsZXN7JGlufSk7CisgICAgICBpZiAoZGlybmFtZSAoJGluc1swXSkgZXEgJGF1eGRpcmRpc3QpCisJeworCSAgcHVzaCBAbmV3X2lucHV0X2ZpbGVzLCAkaW47CisJICAkYXV0b21ha2Vfd2lsbF9wcm9jZXNzX2F1eF9kaXIgPSAxOworCX0KKyAgICAgIGVsc2UKKwl7CisJICB1bnNoaWZ0IEBuZXdfaW5wdXRfZmlsZXMsICRpbjsKKwl9CisgICAgfQorICBAaW5wdXRfZmlsZXMgPSBAbmV3X2lucHV0X2ZpbGVzOworCisgICMgSWYgbmVpdGhlciB0aGUgYXV4ZGlyL01ha2VmaWxlIG5vciB0aGUgLi9NYWtlZmlsZSBhcmUgZ2VuZXJhdGVkCisgICMgYnkgQXV0b21ha2UsIHdlIHdvbid0IGRpc3RyaWJ1dGUgdGhlIGF1eCBmaWxlcyBhbnl3YXkuICBBc3N1bWUKKyAgIyB0aGUgdXNlciBrbm93IHdoYXQgKHMpaGUgZG9lcywgYW5kIHByZXRlbmQgd2Ugd2lsbCBkaXN0cmlidXRlCisgICMgdGhlbSB0byBkaXNhYmxlIHRoZSBlcnJvciBpbiByZXF1aXJlX2ZpbGVfaW50ZXJuYWwuCisgICRhdXRvbWFrZV93aWxsX3Byb2Nlc3NfYXV4X2RpciA9IDEgaWYgISBpc19tYWtlX2RpciAoJGF1eGRpcmRpc3QpOworCisgICMgTG9vayBmb3Igc29tZSBmaWxlcyB3ZSBuZWVkLiAgQWx3YXlzIGNoZWNrIGZvciB0aGVzZS4gIFRoaXMKKyAgIyBjaGVjayBtdXN0IGJlIGRvbmUgZm9yIGV2ZXJ5IHJ1biwgZXZlbiB0aG9zZSB3aGVyZSB3ZSBhcmUgb25seQorICAjIGxvb2tpbmcgYXQgYSBzdWJkaXIgTWFrZWZpbGUuICBXZSBtdXN0IHNldCByZWxhdGl2ZV9kaXIgZm9yCisgICMgbWF5YmVfcHVzaF9yZXF1aXJlZF9maWxlIHRvIHdvcmsuCisgICMgU29ydCB0aGUgZmlsZXMgZm9yIHN0YWJsZSB2ZXJib3NlIG91dHB1dC4KKyAgJHJlbGF0aXZlX2RpciA9ICcuJzsKKyAgZm9yZWFjaCBteSAkZmlsZSAoc29ydCBrZXlzICVyZXF1aXJlZF9hdXhfZmlsZSkKKyAgICB7CisgICAgICByZXF1aXJlX2NvbmZfZmlsZSAoJHJlcXVpcmVkX2F1eF9maWxleyRmaWxlfS0+Z2V0LCBGT1JFSUdOLCAkZmlsZSkKKyAgICB9CisgIGVycl9hbSAiYGluc3RhbGwuc2gnIGlzIGFuIGFuYWNocm9uaXNtOyB1c2UgYGluc3RhbGwtc2gnIGluc3RlYWQiCisgICAgaWYgLWYgJGNvbmZpZ19hdXhfZGlyIC4gJy9pbnN0YWxsLnNoJzsKKworICAjIFByZXNlcnZlIGRpc3RfY29tbW9uIGZvciBsYXRlci4KKyAgJGNvbmZpZ3VyZV9kaXN0X2NvbW1vbiA9IHZhcmlhYmxlX3ZhbHVlICgnRElTVF9DT01NT04nKSB8fCAnJzsKKworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgU2V0IHVwIGZvciBDeWdudXMgbW9kZS4KK3N1YiBjaGVja19jeWdudXMKK3sKKyAgbXkgJGN5Z251cyA9IG9wdGlvbiAnY3lnbnVzJzsKKyAgcmV0dXJuIHVubGVzcyAkY3lnbnVzOworCisgIHNldF9zdHJpY3RuZXNzICgnZm9yZWlnbicpOworICBzZXRfb3B0aW9uICgnbm8taW5zdGFsbGluZm8nLCAkY3lnbnVzKTsKKyAgc2V0X29wdGlvbiAoJ25vLWRlcGVuZGVuY2llcycsICRjeWdudXMpOworICBzZXRfb3B0aW9uICgnbm8tZGlzdCcsICRjeWdudXMpOworCisgIGVycl9hYyAiYEFNX01BSU5UQUlORVJfTU9ERScgcmVxdWlyZWQgd2hlbiAtLWN5Z251cyBzcGVjaWZpZWQiCisgICAgaWYgISRzZWVuX21haW50X21vZGU7Cit9CisKKyMgRG8gYW55IGV4dHJhIGNoZWNraW5nIGZvciBHTlUgc3RhbmRhcmRzLgorc3ViIGNoZWNrX2dudV9zdGFuZGFyZHMKK3sKKyAgaWYgKCRyZWxhdGl2ZV9kaXIgZXEgJy4nKQorICAgIHsKKyAgICAgICMgSW4gdG9wIGxldmVsIChvciBvbmx5KSBkaXJlY3RvcnkuCisgICAgICByZXF1aXJlX2ZpbGUgKCIkYW1fZmlsZS5hbSIsIEdOVSwKKwkJICAgIHF3L0lOU1RBTEwgTkVXUyBSRUFETUUgQVVUSE9SUyBDaGFuZ2VMb2cvKTsKKworICAgICAgIyBBY2NlcHQgb25lIG9mIHRoZXNlIHRocmVlIGxpY2Vuc2VzOyBkZWZhdWx0IHRvIENPUFlJTkcuCisgICAgICAjIE1ha2Ugc3VyZSB3ZSBkbyBub3Qgb3ZlcndyaXRlIGFuIGV4aXN0aW5nIGxpY2Vuc2UuCisgICAgICBteSAkbGljZW5zZTsKKyAgICAgIGZvcmVhY2ggKHF3IC9DT1BZSU5HIENPUFlJTkcuTElCIENPUFlJTkcuTEVTU0VSLykKKwl7CisJICBpZiAoLWYgJF8pCisJICAgIHsKKwkgICAgICAkbGljZW5zZSA9ICRfOworCSAgICAgIGxhc3Q7CisJICAgIH0KKwl9CisgICAgICByZXF1aXJlX2ZpbGUgKCIkYW1fZmlsZS5hbSIsIEdOVSwgJ0NPUFlJTkcnKQorCXVubGVzcyAkbGljZW5zZTsKKyAgICB9CisKKyAgZm9yIG15ICRvcHQgKCduby1pbnN0YWxsbWFuJywgJ25vLWluc3RhbGxpbmZvJykKKyAgICB7CisgICAgICBtc2cgKCdlcnJvci1nbnUnLCBvcHRpb24gJG9wdCwKKwkgICAib3B0aW9uIGAkb3B0JyBkaXNhbGxvd2VkIGJ5IEdOVSBzdGFuZGFyZHMiKQorCWlmIG9wdGlvbiAkb3B0OworICAgIH0KK30KKworIyBEbyBhbnkgZXh0cmEgY2hlY2tpbmcgZm9yIEdOSVRTIHN0YW5kYXJkcy4KK3N1YiBjaGVja19nbml0c19zdGFuZGFyZHMKK3sKKyAgaWYgKCRyZWxhdGl2ZV9kaXIgZXEgJy4nKQorICAgIHsKKyAgICAgICMgSW4gdG9wIGxldmVsIChvciBvbmx5KSBkaXJlY3RvcnkuCisgICAgICByZXF1aXJlX2ZpbGUgKCIkYW1fZmlsZS5hbSIsIEdOSVRTLCAnVEhBTktTJyk7CisgICAgfQorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEZ1bmN0aW9ucyB0byBoYW5kbGUgZmlsZXMgb2YgZWFjaCBsYW5ndWFnZS4KKworIyBFYWNoIGBsYW5nX1hfcmV3cml0ZSgkRElSRUNUT1JZLCAkQkFTRSwgJEVYVCknIGZ1bmN0aW9uIGZvbGxvd3MgYQorIyBzaW1wbGUgZm9ybXVsYTogUmV0dXJuIHZhbHVlIGlzIExBTkdfU1VCRElSIGlmIHRoZSByZXN1bHRpbmcgb2JqZWN0CisjIGZpbGUgc2hvdWxkIGJlIGluIGEgc3ViZGlyIGlmIHRoZSBzb3VyY2UgZmlsZSBpcywgTEFOR19QUk9DRVNTIGlmCisjIGZpbGUgaXMgdG8gYmUgZGVhbHQgd2l0aCwgTEFOR19JR05PUkUgb3RoZXJ3aXNlLgorCisjIE11Y2ggb2YgdGhlIGFjdHVhbCBwcm9jZXNzaW5nIGlzIGhhbmRsZWQgaW4KKyMgaGFuZGxlX3NpbmdsZV90cmFuc2Zvcm0uICBUaGVzZSBmdW5jdGlvbnMgZXhpc3Qgc28gdGhhdAorIyBhdXhpbGlhcnkgaW5mb3JtYXRpb24gY2FuIGJlIHJlY29yZGVkIGZvciBhIGxhdGVyIGNsZWFudXAgcGFzcy4KKyMgTm90ZSB0aGF0IHRoZSBjYWxscyB0byB0aGVzZSBmdW5jdGlvbnMgYXJlIGNvbXB1dGVkLCBzbyBkb24ndCBib3RoZXIKKyMgc2VhcmNoaW5nIGZvciB0aGVpciBwcmVjaXNlIG5hbWVzIGluIHRoZSBzb3VyY2UuCisKKyMgVGhpcyBpcyBqdXN0IGEgY29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUKKyMgd2hlbiBhIHN1YmRpciBvYmplY3Qgc2hvdWxkIGJlIHVzZWQuCitzdWIgbGFuZ19zdWJfb2JqCit7CisgICAgcmV0dXJuIG9wdGlvbiAnc3ViZGlyLW9iamVjdHMnID8gTEFOR19TVUJESVIgOiBMQU5HX1BST0NFU1M7Cit9CisKKyMgUmV3cml0ZSBhIHNpbmdsZSBDIHNvdXJjZSBmaWxlLgorc3ViIGxhbmdfY19yZXdyaXRlCit7CisgIG15ICgkZGlyZWN0b3J5LCAkYmFzZSwgJGV4dCwgJG5vbmFuc2lfb2JqLCAkaGF2ZV9wZXJfZXhlY19mbGFncywgJHZhcikgPSBAXzsKKworICBpZiAob3B0aW9uICdhbnNpMmtucicgJiYgJGJhc2UgPX4gL18kLykKKyAgICB7CisgICAgICAjIEZJWE1FOiBpbmNsdWRlIGxpbmUgbnVtYmVyIGluIGVycm9yLgorICAgICAgZXJyX2FtICJDIHNvdXJjZSBmaWxlIGAkYmFzZS5jJyB3b3VsZCBiZSBkZWxldGVkIGJ5IGFuc2kya25yIHJ1bGVzIjsKKyAgICB9CisKKyAgbXkgJHIgPSBMQU5HX1BST0NFU1M7CisgIGlmIChvcHRpb24gJ3N1YmRpci1vYmplY3RzJykKKyAgICB7CisgICAgICAkciA9IExBTkdfU1VCRElSOworICAgICAgaWYgKCRkaXJlY3RvcnkgJiYgJGRpcmVjdG9yeSBuZSAnLicpCisJeworCSAgJGJhc2UgPSAkZGlyZWN0b3J5IC4gJy8nIC4gJGJhc2U7CisKKwkgICMgbGlidG9vbCBpcyBhbHdheXMgYWJsZSB0byBwdXQgdGhlIG9iamVjdCBhdCB0aGUgcHJvcGVyIHBsYWNlLAorCSAgIyBzbyB3ZSBkbyBub3QgaGF2ZSB0byByZXF1aXJlIEFNX1BST0dfQ0NfQ19PIHdoZW4gYnVpbGRpbmcgLmxvIGZpbGVzLgorCSAgbXNnX3ZhciAoJ3BvcnRhYmlsaXR5JywgJHZhciwKKwkJICAgImNvbXBpbGluZyBgJGJhc2UuYycgaW4gc3ViZGlyIHJlcXVpcmVzICIKKwkJICAgLiAiYEFNX1BST0dfQ0NfQ19PJyBpbiBgJGNvbmZpZ3VyZV9hYyciLAorCQkgICB1bmlxX3Njb3BlID0+IFVTX0dMT0JBTCwKKwkJICAgdW5pcV9wYXJ0ID0+ICdBTV9QUk9HX0NDX0NfTyBzdWJkaXInKQorCSAgICB1bmxlc3MgJHNlZW5fY2NfY19vIHx8ICRub25hbnNpX29iaiBlcSAnLmxvJzsKKwl9CisKKyAgICAgICMgSW4gdGhpcyBjYXNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgZGlyZWN0b3J5IGluZm9ybWF0aW9uLCBzbworICAgICAgIyBkb24ndCBhZGQgaXQgYWdhaW4uCisgICAgICAkZGVfYW5zaV9maWxlc3skYmFzZX0gPSAnJzsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAkZGVfYW5zaV9maWxlc3skYmFzZX0gPSAoKCRkaXJlY3RvcnkgZXEgJy4nIHx8ICRkaXJlY3RvcnkgZXEgJycpCisJCQkgICAgICAgPyAnJworCQkJICAgICAgIDogIiRkaXJlY3RvcnkvIik7CisgICAgfQorCisgIGlmICghICRzZWVuX2NjX2NfbworICAgICAgJiYgJGhhdmVfcGVyX2V4ZWNfZmxhZ3MKKyAgICAgICYmICEgb3B0aW9uICdzdWJkaXItb2JqZWN0cycKKyAgICAgICYmICRub25hbnNpX29iaiBuZSAnLmxvJykKKyAgICB7CisgICAgICBtc2dfdmFyICgncG9ydGFiaWxpdHknLAorCSAgICAgICAkdmFyLCAiY29tcGlsaW5nIGAkYmFzZS5jJyB3aXRoIHBlci10YXJnZXQgZmxhZ3MgcmVxdWlyZXMgIgorCSAgICAgICAuICJgQU1fUFJPR19DQ19DX08nIGluIGAkY29uZmlndXJlX2FjJyIsCisJICAgICAgIHVuaXFfc2NvcGUgPT4gVVNfR0xPQkFMLAorCSAgICAgICB1bmlxX3BhcnQgPT4gJ0FNX1BST0dfQ0NfQ19PIHBlci10YXJnZXQnKQorICAgIH0KKworICAgIHJldHVybiAkcjsKK30KKworIyBSZXdyaXRlIGEgc2luZ2xlIEMrKyBzb3VyY2UgZmlsZS4KK3N1YiBsYW5nX2N4eF9yZXdyaXRlCit7CisgICAgcmV0dXJuICZsYW5nX3N1Yl9vYmo7Cit9CisKKyMgUmV3cml0ZSBhIHNpbmdsZSBoZWFkZXIgZmlsZS4KK3N1YiBsYW5nX2hlYWRlcl9yZXdyaXRlCit7CisgICAgIyBIZWFkZXIgZmlsZXMgYXJlIHNpbXBseSBpZ25vcmVkLgorICAgIHJldHVybiBMQU5HX0lHTk9SRTsKK30KKworIyBSZXdyaXRlIGEgc2luZ2xlIFZhbGEgc291cmNlIGZpbGUuCitzdWIgbGFuZ192YWxhX3Jld3JpdGUKK3sKKyAgICBteSAoJGRpcmVjdG9yeSwgJGJhc2UsICRleHQpID0gQF87CisKKyAgICAobXkgJG5ld2V4dCA9ICRleHQpID1+IHMvdmFsYSQvYy87CisgICAgcmV0dXJuIChMQU5HX1NVQkRJUiwgJG5ld2V4dCk7Cit9CisKKyMgUmV3cml0ZSBhIHNpbmdsZSB5YWNjIGZpbGUuCitzdWIgbGFuZ195YWNjX3Jld3JpdGUKK3sKKyAgICBteSAoJGRpcmVjdG9yeSwgJGJhc2UsICRleHQpID0gQF87CisKKyAgICBteSAkciA9ICZsYW5nX3N1Yl9vYmo7CisgICAgKG15ICRuZXdleHQgPSAkZXh0KSA9fiB0ci95L2MvOworICAgIHJldHVybiAoJHIsICRuZXdleHQpOworfQorCisjIFJld3JpdGUgYSBzaW5nbGUgeWFjYysrIGZpbGUuCitzdWIgbGFuZ195YWNjeHhfcmV3cml0ZQoreworICAgIG15ICgkZGlyZWN0b3J5LCAkYmFzZSwgJGV4dCkgPSBAXzsKKworICAgIG15ICRyID0gJmxhbmdfc3ViX29iajsKKyAgICAobXkgJG5ld2V4dCA9ICRleHQpID1+IHRyL3kvYy87CisgICAgcmV0dXJuICgkciwgJG5ld2V4dCk7Cit9CisKKyMgUmV3cml0ZSBhIHNpbmdsZSBsZXggZmlsZS4KK3N1YiBsYW5nX2xleF9yZXdyaXRlCit7CisgICAgbXkgKCRkaXJlY3RvcnksICRiYXNlLCAkZXh0KSA9IEBfOworCisgICAgbXkgJHIgPSAmbGFuZ19zdWJfb2JqOworICAgIChteSAkbmV3ZXh0ID0gJGV4dCkgPX4gdHIvbC9jLzsKKyAgICByZXR1cm4gKCRyLCAkbmV3ZXh0KTsKK30KKworIyBSZXdyaXRlIGEgc2luZ2xlIGxleCsrIGZpbGUuCitzdWIgbGFuZ19sZXh4eF9yZXdyaXRlCit7CisgICAgbXkgKCRkaXJlY3RvcnksICRiYXNlLCAkZXh0KSA9IEBfOworCisgICAgbXkgJHIgPSAmbGFuZ19zdWJfb2JqOworICAgIChteSAkbmV3ZXh0ID0gJGV4dCkgPX4gdHIvbC9jLzsKKyAgICByZXR1cm4gKCRyLCAkbmV3ZXh0KTsKK30KKworIyBSZXdyaXRlIGEgc2luZ2xlIGFzc2VtYmx5IGZpbGUuCitzdWIgbGFuZ19hc21fcmV3cml0ZQoreworICAgIHJldHVybiAmbGFuZ19zdWJfb2JqOworfQorCisjIFJld3JpdGUgYSBzaW5nbGUgcHJlcHJvY2Vzc2VkIGFzc2VtYmx5IGZpbGUuCitzdWIgbGFuZ19jcHBhc21fcmV3cml0ZQoreworICAgIHJldHVybiAmbGFuZ19zdWJfb2JqOworfQorCisjIFJld3JpdGUgYSBzaW5nbGUgRm9ydHJhbiA3NyBmaWxlLgorc3ViIGxhbmdfZjc3X3Jld3JpdGUKK3sKKyAgICByZXR1cm4gJmxhbmdfc3ViX29iajsKK30KKworIyBSZXdyaXRlIGEgc2luZ2xlIEZvcnRyYW4gZmlsZS4KK3N1YiBsYW5nX2ZjX3Jld3JpdGUKK3sKKyAgICByZXR1cm4gJmxhbmdfc3ViX29iajsKK30KKworIyBSZXdyaXRlIGEgc2luZ2xlIHByZXByb2Nlc3NlZCBGb3J0cmFuIGZpbGUuCitzdWIgbGFuZ19wcGZjX3Jld3JpdGUKK3sKKyAgICByZXR1cm4gJmxhbmdfc3ViX29iajsKK30KKworIyBSZXdyaXRlIGEgc2luZ2xlIHByZXByb2Nlc3NlZCBGb3J0cmFuIDc3IGZpbGUuCitzdWIgbGFuZ19wcGY3N19yZXdyaXRlCit7CisgICAgcmV0dXJuICZsYW5nX3N1Yl9vYmo7Cit9CisKKyMgUmV3cml0ZSBhIHNpbmdsZSByYXRmb3IgZmlsZS4KK3N1YiBsYW5nX3JhdGZvcl9yZXdyaXRlCit7CisgICAgcmV0dXJuICZsYW5nX3N1Yl9vYmo7Cit9CisKKyMgUmV3cml0ZSBhIHNpbmdsZSBPYmplY3RpdmUgQyBmaWxlLgorc3ViIGxhbmdfb2JqY19yZXdyaXRlCit7CisgICAgcmV0dXJuICZsYW5nX3N1Yl9vYmo7Cit9CisKKyMgUmV3cml0ZSBhIHNpbmdsZSBVbmlmaWVkIFBhcmFsbGVsIEMgZmlsZS4KK3N1YiBsYW5nX3VwY19yZXdyaXRlCit7CisgICAgcmV0dXJuICZsYW5nX3N1Yl9vYmo7Cit9CisKKyMgUmV3cml0ZSBhIHNpbmdsZSBKYXZhIGZpbGUuCitzdWIgbGFuZ19qYXZhX3Jld3JpdGUKK3sKKyAgICByZXR1cm4gTEFOR19TVUJESVI7Cit9CisKKyMgVGhlIGxhbmdfWF9maW5pc2ggZnVuY3Rpb25zIGFyZSBjYWxsZWQgYWZ0ZXIgYWxsIHNvdXJjZSBmaWxlCisjIHByb2Nlc3NpbmcgaXMgZG9uZS4gIEVhY2ggc2hvdWxkIGhhbmRsZSBkZWZpbmluZyBydWxlcyBmb3IgdGhlCisjIGxhbmd1YWdlLCBldGMuICBBIGZpbmlzaCBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBpZiBhIHNvdXJjZSBmaWxlIG9mCisjIHRoZSBhcHByb3ByaWF0ZSB0eXBlIGhhcyBiZWVuIHNlZW4uCisKK3N1YiBsYW5nX2NfZmluaXNoCit7CisgICAgIyBQdXNoIGFsbCBsaWJvYmpzIGZpbGVzIG9udG8gZGVfYW5zaV9maWxlcy4gIFdlIGFjdHVhbGx5IG9ubHkKKyAgICAjIHB1c2ggZmlsZXMgd2hpY2ggZXhpc3QgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBhbmQgd2hpY2ggYXJlCisgICAgIyBnZW51aW5lIHNvdXJjZSBmaWxlcy4KKyAgICBmb3JlYWNoIG15ICRmaWxlIChrZXlzICVsaWJzb3VyY2VzKQorICAgIHsKKwlpZiAoJGZpbGUgPX4gL14oLiopXC5bY2x5XSQvICYmIC1mICIkcmVsYXRpdmVfZGlyLyRmaWxlIikKKwl7CisJICAgICRkZV9hbnNpX2ZpbGVzeyQxfSA9ICcnCisJfQorICAgIH0KKworICAgIGlmIChvcHRpb24gJ2Fuc2kya25yJyAmJiBrZXlzICVkZV9hbnNpX2ZpbGVzKQorICAgIHsKKwkjIE1ha2UgYWxsIF8uYyBmaWxlcyBkZXBlbmQgb24gdGhlaXIgY29ycmVzcG9uZGluZyAuYyBmaWxlcy4KKwlteSBAb2JqZWN0czsKKwlmb3JlYWNoIG15ICRiYXNlIChzb3J0IGtleXMgJWRlX2Fuc2lfZmlsZXMpCisJeworCSAgICAjIEVhY2ggXy5jIGZpbGUgbXVzdCBkZXBlbmQgb24gYW5zaTJrbnI7IG90aGVyd2lzZSBpdAorCSAgICAjIG1pZ2h0IGJlIHVzZWQgaW4gYSBwYXJhbGxlbCBidWlsZCBiZWZvcmUgaXQgaXMgYnVpbHQuCisJICAgICMgV2UgbmVlZCB0byBzdXBwb3J0IGZpbGVzIGluIHRoZSBzcmNkaXIgYW5kIGluIHRoZSBidWlsZAorCSAgICAjIGRpciAoYmVjYXVzZSB0aGVzZSBmaWxlcyBtaWdodCBiZSBhdXRvLWdlbmVyYXRlZC4gIEJ1dAorCSAgICAjIHdlIGNhbid0IHVzZSAkPCAtLSBzb21lIG1ha2VzIG9ubHkgZGVmaW5lICQ8IGR1cmluZyBhCisJICAgICMgc3VmZml4IHJ1bGUuCisJICAgIG15ICRhbnNmaWxlID0gJGRlX2Fuc2lfZmlsZXN7JGJhc2V9IC4gJGJhc2UgLiAnLmMnOworCSAgICAkb3V0cHV0X3J1bGVzIC49ICgkYmFzZSAuICJfLmM6ICRhbnNmaWxlIFwkKEFOU0kyS05SKVxuXHQiCisJCQkgICAgICAuICckKENQUCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICcKKwkJCSAgICAgIC4gJ2BpZiB0ZXN0IC1mICQoc3JjZGlyKS8nIC4gJGFuc2ZpbGUKKwkJCSAgICAgIC4gJzsgdGhlbiBlY2hvICQoc3JjZGlyKS8nIC4gJGFuc2ZpbGUKKwkJCSAgICAgIC4gJzsgZWxzZSBlY2hvICcgLiAkYW5zZmlsZSAuICc7IGZpYCAnCisJCQkgICAgICAuICJ8IHNlZCAncy9eIyBcXChbMC05XVxcKS8jbGluZSBcXDEvJyAiCisJCQkgICAgICAuICd8ICQoQU5TSTJLTlIpID4gJEAnCisJCQkgICAgICAjIElmIGFuc2kya25yIGZhaWxzIHRoZW4gd2Ugc2hvdWxkbid0CisJCQkgICAgICAjIGNyZWF0ZSB0aGUgXy5jIGZpbGUKKwkJCSAgICAgIC4gIiB8fCBybSAtZiBcJFxAXG4iKTsKKwkgICAgcHVzaCAoQG9iamVjdHMsICRiYXNlIC4gJ18uJChPQkpFWFQpJyk7CisJICAgIHB1c2ggKEBvYmplY3RzLCAkYmFzZSAuICdfLmxvJykKKwkgICAgICBpZiB2YXIgKCdMSUJUT09MJyk7CisKKwkgICAgIyBFeHBsaWNpdGx5IGNsZWFuIHRoZSBfLmMgZmlsZXMgaWYgdGhleSBhcmUgaW4gYQorCSAgICAjIHN1YmRpcmVjdG9yeS4gKEluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0aGV5IGdldCBlcmFzZWQKKwkgICAgIyBieSBhIGBybSAtZiAqXy5jJyBydWxlLikKKwkgICAgJGNsZWFuX2ZpbGVzeyRiYXNlIC4gJ18uYyd9ID0gTU9TVExZX0NMRUFOCisJICAgICAgaWYgZGlybmFtZSAoJGJhc2UpIG5lICcuJzsKKwl9CisKKwkjIE1ha2UgYWxsIF8ubyAoYW5kIF8ubG8pIGZpbGVzIGRlcGVuZCBvbiBhbnNpMmtuci4KKwkjIFVzZSBhIHNuZWFreSBsaXR0bGUgaGFjayB0byBtYWtlIGl0IHByaW50IG5pY2VseS4KKwkmcHJldHR5X3ByaW50X3J1bGUgKCcnLCAnJywgQG9iamVjdHMsICc6JywgJyQoQU5TSTJLTlIpJyk7CisgICAgfQorfQorCitzdWIgbGFuZ192YWxhX2ZpbmlzaF90YXJnZXQgKCQkKQoreworICBteSAoJHNlbGYsICRuYW1lKSA9IEBfOworCisgIG15ICRkZXJpdmVkID0gY2Fub25pY2FsaXplICgkbmFtZSk7CisgIG15ICR2YXJuYW1lID0gJGRlcml2ZWQgLiAnX1NPVVJDRVMnOworICBteSAkdmFyID0gdmFyICgkdmFybmFtZSk7CisKKyAgaWYgKCR2YXIpCisgICAgeworICAgICAgZm9yZWFjaCBteSAkZmlsZSAoJHZhci0+dmFsdWVfYXNfbGlzdF9yZWN1cnNpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAkb3V0cHV0X3J1bGVzIC49ICJcJChzcmNkaXIpLyRmaWxlOiBcJChzcmNkaXIpLyR7ZGVyaXZlZH1fdmFsYS5zdGFtcFxuIi4KKyAgICAgICAgICAgICJcdFxAaWYgdGVzdCAtZiBcJEA7IHRoZW4gOjsgZWxzZSBcXFxuIi4KKyAgICAgICAgICAgICJcdCAgcm0gLWYgXCQoc3JjZGlyKS8ke2Rlcml2ZWR9X3ZhbGEuc3RhbXA7IFxcXG4iLgorICAgICAgICAgICAgIlx0ICBcJChhbV9fY2QpIFwkKHNyY2RpcikgJiYgXCQoTUFLRSkgXCQoQU1fTUFLRUZMQUdTKSAke2Rlcml2ZWR9X3ZhbGEuc3RhbXA7IFxcXG4iLgorICAgICAgICAgICAgIlx0ZmlcbiIKKyAgICAgICAgICAgIGlmICRmaWxlID1+IHMvKC4qKVwudmFsYSQvJDEuYy87CisgICAgICAgIH0KKyAgICB9CisKKyAgIyBBZGQgcmVidWlsZCBydWxlcyBmb3IgZ2VuZXJhdGVkIGhlYWRlciBhbmQgdmFwaSBmaWxlcworICBteSAkZmxhZ3MgPSB2YXIgKCRkZXJpdmVkIC4gJ19WQUxBRkxBR1MnKTsKKyAgaWYgKCRmbGFncykKKyAgICB7CisgICAgICBteSAkbGFzdGZsYWcgPSAnJzsKKyAgICAgIGZvcmVhY2ggbXkgJGZsYWcgKCRmbGFncy0+dmFsdWVfYXNfbGlzdF9yZWN1cnNpdmUpCisJeworCSAgaWYgKGdyZXAgKC8kbGFzdGZsYWcvLCAoJy1IJywgJy1oJywgJy0taGVhZGVyJywgJy0taW50ZXJuYWwtaGVhZGVyJywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICctLXZhcGknLCAnLS1pbnRlcm5hbC12YXBpJywgJy0tZ2lyJykpKQorCSAgICB7CisJICAgICAgbXkgJGhlYWRlcmZpbGUgPSAkZmxhZzsKKwkgICAgICAkb3V0cHV0X3J1bGVzIC49ICJcJChzcmNkaXIpLyRoZWFkZXJmaWxlOiBcJChzcmNkaXIpLyR7ZGVyaXZlZH1fdmFsYS5zdGFtcFxuIi4KKwkJIlx0XEBpZiB0ZXN0IC1mIFwkQDsgdGhlbiA6OyBlbHNlIFxcXG4iLgorCQkiXHQgIHJtIC1mIFwkKHNyY2RpcikvJHtkZXJpdmVkfV92YWxhLnN0YW1wOyBcXFxuIi4KKwkJIlx0ICBcJChhbV9fY2QpIFwkKHNyY2RpcikgJiYgXCQoTUFLRSkgXCQoQU1fTUFLRUZMQUdTKSAke2Rlcml2ZWR9X3ZhbGEuc3RhbXA7IFxcXG4iLgorCQkiXHRmaVxuIjsKKworCSAgICAgICMgdmFsYWMgaXMgbm90IHVzZWQgd2hlbiBidWlsZGluZyBmcm9tIGRpc3QgdGFyYmFsbHMKKwkgICAgICAjIGRpc3RyaWJ1dGUgdGhlIGdlbmVyYXRlZCBmaWxlcworCSAgICAgIHB1c2hfZGlzdF9jb21tb24gKCRoZWFkZXJmaWxlKTsKKwkgICAgICAkY2xlYW5fZmlsZXN7JGhlYWRlcmZpbGV9ID0gTUFJTlRBSU5FUl9DTEVBTjsKKwkgICAgfQorCSAgJGxhc3RmbGFnID0gJGZsYWc7CisJfQorICAgIH0KKworICBteSAkY29tcGlsZSA9ICRzZWxmLT5jb21waWxlOworCisgICMgUmV3cml0ZSBlYWNoIG9jY3VycmVuY2Ugb2YgYEFNX1ZBTEFGTEFHUycgaW4gdGhlIGNvbXBpbGUKKyAgIyBydWxlIGludG8gYCR7ZGVyaXZlZH1fVkFMQUZMQUdTJyBpZiBpdCBleGlzdHMuCisgIG15ICR2YWwgPSAiJHtkZXJpdmVkfV9WQUxBRkxBR1MiOworICAkY29tcGlsZSA9fiBzL1woQU1fVkFMQUZMQUdTXCkvXCgkdmFsXCkvCisgICAgaWYgc2V0X3NlZW4gKCR2YWwpOworCisgICMgVkFMQUZMQUdTIGlzIGEgdXNlciB2YXJpYWJsZSAocGVyIEdOVSBTdGFuZGFyZHMpLAorICAjIGl0IHNob3VsZCBub3QgYmUgb3ZlcnJpZGRlbiBpbiB0aGUgTWFrZWZpbGUuLi4KKyAgY2hlY2tfdXNlcl92YXJpYWJsZXMgWydWQUxBRkxBR1MnXTsKKworICBteSAkZGlybmFtZSA9IGRpcm5hbWUgKCRuYW1lKTsKKworICAjIE9ubHkgZ2VuZXJhdGUgQyBjb2RlLCBkbyBub3QgcnVuIEMgY29tcGlsZXIKKyAgJGNvbXBpbGUgLj0gIiAtQyI7CisKKyAgbXkgJHZlcmJvc2UgPSB2ZXJib3NlX2ZsYWcgKCdWQUxBQycpOworICBteSAkc2lsZW50ID0gc2lsZW50X2ZsYWcgKCk7CisKKyAgJG91dHB1dF9ydWxlcyAuPQorICAgICIke2Rlcml2ZWR9X3ZhbGEuc3RhbXA6IFwkKCR7ZGVyaXZlZH1fU09VUkNFUylcbiIuCisgICAgIlx0JHt2ZXJib3NlfSR7Y29tcGlsZX0gXCQoJHtkZXJpdmVkfV9TT1VSQ0VTKVxuIi4KKyAgICAiXHQke3NpbGVudH10b3VjaCBcJEBcbiI7CisKKyAgcHVzaF9kaXN0X2NvbW1vbiAoIiR7ZGVyaXZlZH1fdmFsYS5zdGFtcCIpOworCisgICRjbGVhbl9maWxlc3siJHtkZXJpdmVkfV92YWxhLnN0YW1wIn0gPSBNQUlOVEFJTkVSX0NMRUFOOworfQorCisjIEFkZCBvdXRwdXQgcnVsZXMgdG8gaW52b2tlIHZhbGFjIGFuZCBjcmVhdGUgc3RhbXAgZmlsZSBhcyBhIHdpdG5lc3MKKyMgdG8gaGFuZGxlIG11bHRpcGxlIG91dHB1dHMuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGFsbCBzb3VyY2UKKyMgZmlsZSBwcm9jZXNzaW5nIGlzIGRvbmUuCitzdWIgbGFuZ192YWxhX2ZpbmlzaAoreworICBteSAoJHNlbGYpID0gQF87CisKKyAgZm9yZWFjaCBteSAkcHJvZyAoa2V5cyAla25vd25fcHJvZ3JhbXMpCisgICAgeworICAgICAgbGFuZ192YWxhX2ZpbmlzaF90YXJnZXQgKCRzZWxmLCAkcHJvZyk7CisgICAgfQorCisgIHdoaWxlIChteSAoJG5hbWUpID0gZWFjaCAla25vd25fbGlicmFyaWVzKQorICAgIHsKKyAgICAgIGxhbmdfdmFsYV9maW5pc2hfdGFyZ2V0ICgkc2VsZiwgJG5hbWUpOworICAgIH0KK30KKworIyBUaGUgYnVpbHQgLmMgZmlsZXMgc2hvdWxkIGJlIGNsZWFuZWQgb25seSBvbiBtYWludGFpbmVyLWNsZWFuCisjIGFzIHRoZSAuYyBmaWxlcyBhcmUgZGlzdHJpYnV0ZWQuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBlYWNoCisjIC52YWxhIHNvdXJjZSBmaWxlLgorc3ViIGxhbmdfdmFsYV90YXJnZXRfaG9vaworeworICBteSAoJHNlbGYsICRhZ2dyZWdhdGUsICRvdXRwdXQsICRpbnB1dCwgJXRyYW5zZm9ybSkgPSBAXzsKKworICAkY2xlYW5fZmlsZXN7JG91dHB1dH0gPSBNQUlOVEFJTkVSX0NMRUFOOworfQorCisjIFRoaXMgaXMgYSB5YWNjIGhlbHBlciB3aGljaCBpcyBjYWxsZWQgd2hlbmV2ZXIgd2UgaGF2ZSBkZWNpZGVkIHRvCisjIGNvbXBpbGUgYSB5YWNjIGZpbGUuCitzdWIgbGFuZ195YWNjX3RhcmdldF9ob29rCit7CisgICAgbXkgKCRzZWxmLCAkYWdncmVnYXRlLCAkb3V0cHV0LCAkaW5wdXQsICV0cmFuc2Zvcm0pID0gQF87CisKKyAgICBteSAkZmxhZyA9ICRhZ2dyZWdhdGUgLiAiX1lGTEFHUyI7CisgICAgbXkgJGZsYWd2YXIgPSB2YXIgJGZsYWc7CisgICAgbXkgJFlGTEFHU3ZhciA9IHZhciAnWUZMQUdTJzsKKyAgICBpZiAoKCRmbGFndmFyICYmICRmbGFndmFyLT52YXJpYWJsZV92YWx1ZSA9fiAvJERBU0hfRF9QQVRURVJOL28pCisJfHwgKCRZRkxBR1N2YXIgJiYgJFlGTEFHU3Zhci0+dmFyaWFibGVfdmFsdWUgPX4gLyREQVNIX0RfUEFUVEVSTi9vKSkKKyAgICB7CisJKG15ICRvdXRwdXRfYmFzZSA9ICRvdXRwdXQpID1+IHMvJEtOT1dOX0VYVEVOU0lPTlNfUEFUVEVSTiQvLzsKKwlteSAkaGVhZGVyID0gJG91dHB1dF9iYXNlIC4gJy5oJzsKKworCSMgRm91bmQgYSBgLWQnIHRoYXQgYXBwbGllcyB0byB0aGUgY29tcGlsYXRpb24gb2YgdGhpcyBmaWxlLgorCSMgQWRkIGEgZGVwZW5kZW5jeSBmb3IgdGhlIGdlbmVyYXRlZCBoZWFkZXIgZmlsZSwgYW5kIGFycmFuZ2UKKwkjIGZvciB0aGF0IGZpbGUgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGRpc3RyaWJ1dGlvbi4KKwlmb3JlYWNoIG15ICRjb25kIChBdXRvbWFrZTo6UnVsZTo6ZGVmaW5lICgke2hlYWRlcn0sICdpbnRlcm5hbCcsCisJCQkJCQkgIFJVTEVfQVVUT01BS0UsIFRSVUUsCisJCQkJCQkgIElOVEVSTkFMKSkKKwkgIHsKKwkgICAgbXkgJGNvbmRzdHIgPSAkY29uZC0+c3Vic3Rfc3RyaW5nOworCSAgICAkb3V0cHV0X3J1bGVzIC49CisJICAgICAgIiRjb25kc3RyJHtoZWFkZXJ9OiAkb3V0cHV0XG4iCisJICAgICAgIyBSZWNvdmVyIGZyb20gcmVtb3ZhbCBvZiAkaGVhZGVyCisJICAgICAgLiAiJGNvbmRzdHJcdFxAaWYgdGVzdCAhIC1mIFwkQDsgdGhlbiBcXFxuIgorCSAgICAgIC4gIiRjb25kc3RyXHQgIHJtIC1mICRvdXRwdXQ7IFxcXG4iCisJICAgICAgLiAiJGNvbmRzdHJcdCAgXCQoTUFLRSkgXCQoQU1fTUFLRUZMQUdTKSAkb3V0cHV0OyBcXFxuIgorCSAgICAgIC4gIiRjb25kc3RyXHRlbHNlIDo7IGZpXG4iOworCSAgfQorCSMgRGlzdHJpYnV0ZSB0aGUgZ2VuZXJhdGVkIGZpbGUsIHVubGVzcyBpdHMgLnkgc291cmNlIHdhcworCSMgbGlzdGVkIGluIGEgbm9kaXN0XyB2YXJpYWJsZS4gICgmaGFuZGxlX3NvdXJjZV90cmFuc2Zvcm0KKwkjIHdpbGwgc2V0IERJU1RfU09VUkNFLikKKwkmcHVzaF9kaXN0X2NvbW1vbiAoJGhlYWRlcikKKwkgIGlmICR0cmFuc2Zvcm17J0RJU1RfU09VUkNFJ307CisKKwkjIElmIHRoZSBmaWxlcyBhcmUgYnVpbHQgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeSwgdGhlbiB3ZSB3YW50CisJIyB0byByZW1vdmUgdGhlbSB3aXRoIGBtYWtlIGNsZWFuJy4gIElmIHRoZXkgYXJlIGluIHNyY2RpcgorCSMgdGhleSBzaG91bGRuJ3QgYmUgdG91Y2hlZC4gIEhvd2V2ZXIsIHdlIGNhbid0IGRldGVybWluZSB0aGlzCisJIyBzdGF0aWNhbGx5LCBhbmQgdGhlIEdOVSBydWxlcyBzYXkgdGhhdCB5YWNjL2xleCBvdXRwdXQgZmlsZXMKKwkjIHNob3VsZCBiZSByZW1vdmVkIGJ5IG1haW50YWluZXItY2xlYW4uICBTbyB0aGF0J3Mgd2hhdCB3ZQorCSMgZG8uCisJJGNsZWFuX2ZpbGVzeyRoZWFkZXJ9ID0gTUFJTlRBSU5FUl9DTEVBTjsKKyAgICB9CisgICAgIyBFcmFzZSAkT1VUUFVUIG9uIGBtYWtlIG1haW50YWluZXItY2xlYW4nIChieSBHTlUgc3RhbmRhcmRzKS4KKyAgICAjIFNlZSB0aGUgY29tbWVudCBhYm92ZSBmb3IgJEhFQURFUi4KKyAgICAkY2xlYW5fZmlsZXN7JG91dHB1dH0gPSBNQUlOVEFJTkVSX0NMRUFOOworfQorCisjIFRoaXMgaXMgYSBsZXggaGVscGVyIHdoaWNoIGlzIGNhbGxlZCB3aGVuZXZlciB3ZSBoYXZlIGRlY2lkZWQgdG8KKyMgY29tcGlsZSBhIGxleCBmaWxlLgorc3ViIGxhbmdfbGV4X3RhcmdldF9ob29rCit7CisgICAgbXkgKCRzZWxmLCAkYWdncmVnYXRlLCAkb3V0cHV0LCAkaW5wdXQpID0gQF87CisgICAgIyBJZiB0aGUgZmlsZXMgYXJlIGJ1aWx0IGluIHRoZSBidWlsZCBkaXJlY3RvcnksIHRoZW4gd2Ugd2FudCB0bworICAgICMgcmVtb3ZlIHRoZW0gd2l0aCBgbWFrZSBjbGVhbicuICBJZiB0aGV5IGFyZSBpbiBzcmNkaXIgdGhleQorICAgICMgc2hvdWxkbid0IGJlIHRvdWNoZWQuICBIb3dldmVyLCB3ZSBjYW4ndCBkZXRlcm1pbmUgdGhpcworICAgICMgc3RhdGljYWxseSwgYW5kIHRoZSBHTlUgcnVsZXMgc2F5IHRoYXQgeWFjYy9sZXggb3V0cHV0IGZpbGVzCisgICAgIyBzaG91bGQgYmUgcmVtb3ZlZCBieSBtYWludGFpbmVyLWNsZWFuLiAgU28gdGhhdCdzIHdoYXQgd2UgZG8uCisgICAgJGNsZWFuX2ZpbGVzeyRvdXRwdXR9ID0gTUFJTlRBSU5FUl9DTEVBTjsKK30KKworIyBUaGlzIGlzIGEgaGVscGVyIGZvciBib3RoIGxleCBhbmQgeWFjYy4KK3N1YiB5YWNjX2xleF9maW5pc2hfaGVscGVyCit7CisgIHJldHVybiBpZiBkZWZpbmVkICRsYW5ndWFnZV9zY3JhdGNoeydsZXgteWFjYy1kb25lJ307CisgICRsYW5ndWFnZV9zY3JhdGNoeydsZXgteWFjYy1kb25lJ30gPSAxOworCisgICMgRklYTUU6IGZvciBub3csIG5vIGxpbmUgbnVtYmVyLgorICByZXF1aXJlX2NvbmZfZmlsZSAoJGNvbmZpZ3VyZV9hYywgRk9SRUlHTiwgJ3lsd3JhcCcpOworICAmZGVmaW5lX3ZhcmlhYmxlICgnWUxXUkFQJywgIiRhbV9jb25maWdfYXV4X2Rpci95bHdyYXAiLCBJTlRFUk5BTCk7Cit9CisKK3N1YiBsYW5nX3lhY2NfZmluaXNoCit7CisgIHJldHVybiBpZiBkZWZpbmVkICRsYW5ndWFnZV9zY3JhdGNoeyd5YWNjLWRvbmUnfTsKKyAgJGxhbmd1YWdlX3NjcmF0Y2h7J3lhY2MtZG9uZSd9ID0gMTsKKworICByZWplY3RfdmFyICdZQUNDRkxBR1MnLCAiYFlBQ0NGTEFHUycgb2Jzb2xldGU7IHVzZSBgWUZMQUdTJyBpbnN0ZWFkIjsKKworICB5YWNjX2xleF9maW5pc2hfaGVscGVyOworfQorCisKK3N1YiBsYW5nX2xleF9maW5pc2gKK3sKKyAgcmV0dXJuIGlmIGRlZmluZWQgJGxhbmd1YWdlX3NjcmF0Y2h7J2xleC1kb25lJ307CisgICRsYW5ndWFnZV9zY3JhdGNoeydsZXgtZG9uZSd9ID0gMTsKKworICB5YWNjX2xleF9maW5pc2hfaGVscGVyOworfQorCisKKyMgR2l2ZW4gYSBoYXNoIHRhYmxlIG9mIGxpbmtlciBuYW1lcywgcGljayB0aGUgbmFtZSB0aGF0IGhhcyB0aGUgbW9zdAorIyBwcmVjZWRlbmNlLiAgVGhpcyBpcyBsYW1lLCBidXQgc29tZXRoaW5nIGhhcyB0byBoYXZlIGdsb2JhbAorIyBrbm93bGVkZ2UgaW4gb3JkZXIgdG8gZWxpbWluYXRlIHRoZSBjb25mbGljdC4gIEFkZCBtb3JlIGxpbmtlcnMgYXMKKyMgcmVxdWlyZWQuCitzdWIgcmVzb2x2ZV9saW5rZXIKK3sKKyAgICBteSAoJWxpbmtlcnMpID0gQF87CisKKyAgICBmb3JlYWNoIG15ICRsIChxdyhHQ0pMSU5LIENYWExJTksgRjc3TElOSyBGQ0xJTksgT0JKQ0xJTksgVVBDTElOSykpCisgICAgeworCXJldHVybiAkbCBpZiBkZWZpbmVkICRsaW5rZXJzeyRsfTsKKyAgICB9CisgICAgcmV0dXJuICdMSU5LJzsKK30KKworIyBDYWxsZWQgdG8gaW5kaWNhdGUgdGhhdCBhbiBleHRlbnNpb24gd2FzIHVzZWQuCitzdWIgc2F3X2V4dGVuc2lvbgoreworICAgIG15ICgkZXh0KSA9IEBfOworICAgIGlmICghIGRlZmluZWQgJGV4dGVuc2lvbl9zZWVueyRleHR9KQorICAgIHsKKwkkZXh0ZW5zaW9uX3NlZW57JGV4dH0gPSAxOworICAgIH0KKyAgICBlbHNlCisgICAgeworCSsrJGV4dGVuc2lvbl9zZWVueyRleHR9OworICAgIH0KK30KKworIyBSZXR1cm4gdGhlIG51bWJlciBvZiBmaWxlcyBzZWVuIGZvciBhIGdpdmVuIGxhbmd1YWdlLiAgS25vd3MgYWJvdXQKKyMgc3BlY2lhbCBjYXNlcyB3ZSBjYXJlIGFib3V0LiAgRklYTUU6IHRoaXMgaXMgaGlkZW91cy4gIFdlIG5lZWQKKyMgc29tZXRoaW5nIHRoYXQgaW52b2x2ZXMgcmVhbCBsYW5ndWFnZSBvYmplY3RzLiAgRm9yIGluc3RhbmNlIHlhY2MKKyMgYW5kIHlhY2N4eCBjb3VsZCBib3RoIGRlcml2ZSBmcm9tIGEgY29tbW9uIHlhY2MgY2xhc3Mgd2hpY2ggd291bGQKKyMga25vdyBhYm91dCB0aGUgc3RyYW5nZSB5bHdyYXAgcmVxdWlyZW1lbnQuICAoT3IgYmV0dGVyIHlldCB3ZSBjb3VsZAorIyBqdXN0IG5vdCBzdXBwb3J0IGxlZ2FjeSB5YWNjISkKK3N1YiBjb3VudF9maWxlc19mb3JfbGFuZ3VhZ2UKK3sKKyAgICBteSAoJG5hbWUpID0gQF87CisKKyAgICBteSBAbmFtZXM7CisgICAgaWYgKCRuYW1lIGVxICd5YWNjJyB8fCAkbmFtZSBlcSAneWFjY3h4JykKKyAgICB7CisJQG5hbWVzID0gKCd5YWNjJywgJ3lhY2N4eCcpOworICAgIH0KKyAgICBlbHNpZiAoJG5hbWUgZXEgJ2xleCcgfHwgJG5hbWUgZXEgJ2xleHh4JykKKyAgICB7CisJQG5hbWVzID0gKCdsZXgnLCAnbGV4eHgnKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlAbmFtZXMgPSAoJG5hbWUpOworICAgIH0KKworICAgIG15ICRyID0gMDsKKyAgICBmb3JlYWNoICRuYW1lIChAbmFtZXMpCisgICAgeworCW15ICRsYW5nID0gJGxhbmd1YWdlc3skbmFtZX07CisJZm9yZWFjaCBteSAkZXh0IChAeyRsYW5nLT5leHRlbnNpb25zfSkKKwl7CisJICAgICRyICs9ICRleHRlbnNpb25fc2VlbnskZXh0fQorCQlpZiBkZWZpbmVkICRleHRlbnNpb25fc2VlbnskZXh0fTsKKwl9CisgICAgfQorCisgICAgcmV0dXJuICRyCit9CisKKyMgQ2FsbGVkIHRvIGFzayB3aGV0aGVyIHNvdXJjZSBmaWxlcyBoYXZlIGJlZW4gc2VlbiAuIElmIEhFQURFUlMgaXMgMSwKKyMgaGVhZGVycyBjYW4gYmUgaW5jbHVkZWQuCitzdWIgc2F3X3NvdXJjZXNfcAoreworICAgIG15ICgkaGVhZGVycykgPSBAXzsKKworICAgICMgY291bnQgYWxsIHRoZSBzb3VyY2VzCisgICAgbXkgJGNvdW50ID0gMDsKKyAgICBmb3JlYWNoIG15ICR2YWwgKHZhbHVlcyAlZXh0ZW5zaW9uX3NlZW4pCisgICAgeworCSRjb3VudCArPSAkdmFsOworICAgIH0KKworICAgIGlmICghJGhlYWRlcnMpCisgICAgeworCSRjb3VudCAtPSBjb3VudF9maWxlc19mb3JfbGFuZ3VhZ2UgKCdoZWFkZXInKTsKKyAgICB9CisKKyAgICByZXR1cm4gJGNvdW50ID4gMDsKK30KKworCisjIHJlZ2lzdGVyX2xhbmd1YWdlICglQVRUUklCVVRFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVnaXN0ZXIgYSBzaW5nbGUgbGFuZ3VhZ2UuCisjIEVhY2ggJUFUVFJJQlVURSBpcyBvZiB0aGUgZm9ybSBBVFRSSUJVVEUgPT4gVkFMVUUuCitzdWIgcmVnaXN0ZXJfbGFuZ3VhZ2UgKCUpCit7CisgIG15ICglb3B0aW9uKSA9IEBfOworCisgICMgU2V0IHRoZSBkZWZhdWx0cy4KKyAgJG9wdGlvbnsnYW5zaSd9ID0gMAorICAgIHVubGVzcyBkZWZpbmVkICRvcHRpb257J2Fuc2knfTsKKyAgJG9wdGlvbnsnYXV0b2RlcCd9ID0gJ25vJworICAgIHVubGVzcyBkZWZpbmVkICRvcHRpb257J2F1dG9kZXAnfTsKKyAgJG9wdGlvbnsnbGlua2VyJ30gPSAnJworICAgIHVubGVzcyBkZWZpbmVkICRvcHRpb257J2xpbmtlcid9OworICAkb3B0aW9ueydmbGFncyd9ID0gW10KKyAgICB1bmxlc3MgZGVmaW5lZCAkb3B0aW9ueydmbGFncyd9OworICAkb3B0aW9ueydvdXRwdXRfZXh0ZW5zaW9ucyd9ID0gc3ViIHsgcmV0dXJuICggJy4kKE9CSkVYVCknLCAnLmxvJyApIH0KKyAgICB1bmxlc3MgZGVmaW5lZCAkb3B0aW9ueydvdXRwdXRfZXh0ZW5zaW9ucyd9OworICAkb3B0aW9ueydub2Rpc3Rfc3BlY2lmaWMnfSA9IDAKKyAgICB1bmxlc3MgZGVmaW5lZCAkb3B0aW9ueydub2Rpc3Rfc3BlY2lmaWMnfTsKKworICBteSAkbGFuZyA9IG5ldyBMYW5ndWFnZSAoJW9wdGlvbik7CisKKyAgIyBGaWxsIGluZGV4ZXMuCisgICRleHRlbnNpb25fbWFweyRffSA9ICRsYW5nLT5uYW1lIGZvcmVhY2ggQHskbGFuZy0+ZXh0ZW5zaW9uc307CisgICRsYW5ndWFnZXN7JGxhbmctPm5hbWV9ID0gJGxhbmc7CisgIG15ICRsaW5rID0gJGxhbmctPmxpbmtlcjsKKyAgaWYgKCRsaW5rKQorICAgIHsKKyAgICAgIGlmIChleGlzdHMgJGxpbmtfbGFuZ3VhZ2VzeyRsaW5rfSkKKwl7CisJICBwcm9nX2Vycm9yICgiYCRsaW5rJyBoYXMgZGlmZmVyZW50IGRlZmluaXRpb25zIGluICIKKwkJICAgICAgLiAkbGFuZy0+bmFtZSAuICIgYW5kICIgLiAkbGlua19sYW5ndWFnZXN7JGxpbmt9LT5uYW1lKQorCSAgICBpZiAkbGFuZy0+bGluayBuZSAkbGlua19sYW5ndWFnZXN7JGxpbmt9LT5saW5rOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAkbGlua19sYW5ndWFnZXN7JGxpbmt9ID0gJGxhbmc7CisJfQorICAgIH0KKworICAjIFVwZGF0ZSB0aGUgcGF0dGVybiBvZiBrbm93biBleHRlbnNpb25zLgorICBhY2NlcHRfZXh0ZW5zaW9ucyAoQHskbGFuZy0+ZXh0ZW5zaW9uc30pOworCisgICMgVXBhdGUgdGhlICRzdWZmaXhfcnVsZSBtYXAuCisgIGZvcmVhY2ggbXkgJHN1ZmZpeCAoQHskbGFuZy0+ZXh0ZW5zaW9uc30pCisgICAgeworICAgICAgZm9yZWFjaCBteSAkZGVzdCAoJnskbGFuZy0+b3V0cHV0X2V4dGVuc2lvbnN9ICgkc3VmZml4KSkKKwl7CisJICByZWdpc3Rlcl9zdWZmaXhfcnVsZSAoSU5URVJOQUwsICRzdWZmaXgsICRkZXN0KTsKKwl9CisgICAgfQorfQorCisjIGRlcml2ZV9zdWZmaXggKCRFWFQsICRPQkopCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBmaW5kIGEgcGF0aCBmcm9tIGEgdXNlci1zcGVjaWZpZWQgc3VmZml4ICRFWFQKKyMgdG8gJE9CSiBvciB0byBzb21lIG90aGVyIHN1ZmZpeCB3ZSByZWNvZ25pemUgaW50ZXJuYWxseSwgZS5nLiBgY2MnLgorc3ViIGRlcml2ZV9zdWZmaXggKCQkKQoreworICBteSAoJHNvdXJjZV9leHQsICRvYmopID0gQF87CisKKyAgd2hpbGUgKCEgJGV4dGVuc2lvbl9tYXB7JHNvdXJjZV9leHR9CisJICYmICRzb3VyY2VfZXh0IG5lICRvYmoKKwkgJiYgZXhpc3RzICRzdWZmaXhfcnVsZXMtPnskc291cmNlX2V4dH0KKwkgJiYgZXhpc3RzICRzdWZmaXhfcnVsZXMtPnskc291cmNlX2V4dH17JG9ian0pCisgICAgeworICAgICAgJHNvdXJjZV9leHQgPSAkc3VmZml4X3J1bGVzLT57JHNvdXJjZV9leHR9eyRvYmp9WzBdOworICAgIH0KKworICByZXR1cm4gJHNvdXJjZV9leHQ7Cit9CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFByZXR0eS1wcmludCBzb21ldGhpbmcgYW5kIGFwcGVuZCB0byBvdXRwdXRfcnVsZXMuCitzdWIgcHJldHR5X3ByaW50X3J1bGUKK3sKKyAgICAkb3V0cHV0X3J1bGVzIC49ICZtYWtlZmlsZV93cmFwIChAXyk7Cit9CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBIYW5kbGluZyB0aGUgY29uZGl0aW9uYWwgc3RhY2suICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjICRTVFJJTkcKKyMgbWFrZV9jb25kaXRpb25hbF9zdHJpbmcgKCRORUdBVEUsICRDT05EKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdWIgbWFrZV9jb25kaXRpb25hbF9zdHJpbmcgKCQkKQoreworICBteSAoJG5lZ2F0ZSwgJGNvbmQpID0gQF87CisgICRjb25kID0gIiR7Y29uZH1fVFJVRSIKKyAgICB1bmxlc3MgJGNvbmQgPX4gL15UUlVFfEZBTFNFJC87CisgICRjb25kID0gQXV0b21ha2U6OkNvbmRpdGlvbjo6Y29uZGl0aW9uYWxfbmVnYXRlICgkY29uZCkKKyAgICBpZiAkbmVnYXRlOworICByZXR1cm4gJGNvbmQ7Cit9CisKKworbXkgJV9hbV9tYWNyb19mb3JfY29uZCA9CisgICgKKyAgQU1ERVAgPT4gIm9uZSBvZiB0aGUgY29tcGlsZXIgdGVzdHNcbiIKKwkgICAuICIgICAgQUNfUFJPR19DQywgQUNfUFJPR19DWFgsIEFDX1BST0dfQ1hYLCBBQ19QUk9HX09CSkMsXG4iCisJICAgLiAiICAgIEFNX1BST0dfQVMsIEFNX1BST0dfR0NKLCBBTV9QUk9HX1VQQyIsCisgIGFtX19mYXN0ZGVwQ0MgPT4gJ0FDX1BST0dfQ0MnLAorICBhbV9fZmFzdGRlcENDQVMgPT4gJ0FNX1BST0dfQVMnLAorICBhbV9fZmFzdGRlcENYWCA9PiAnQUNfUFJPR19DWFgnLAorICBhbV9fZmFzdGRlcEdDSiA9PiAnQU1fUFJPR19HQ0onLAorICBhbV9fZmFzdGRlcE9CSkMgPT4gJ0FDX1BST0dfT0JKQycsCisgIGFtX19mYXN0ZGVwVVBDID0+ICdBTV9QUk9HX1VQQycKKyAgKTsKKworIyAkQ09ORAorIyBjb25kX3N0YWNrX2lmICgkTkVHQVRFLCAkQ09ORCwgJFdIRVJFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3ViIGNvbmRfc3RhY2tfaWYgKCQkJCkKK3sKKyAgbXkgKCRuZWdhdGUsICRjb25kLCAkd2hlcmUpID0gQF87CisKKyAgaWYgKCEgJGNvbmZpZ3VyZV9jb25keyRjb25kfSAmJiAkY29uZCAhfiAvXlRSVUV8RkFMU0UkLykKKyAgICB7CisgICAgICBteSAkdGV4dCA9ICIkY29uZCBkb2VzIG5vdCBhcHBlYXIgaW4gQU1fQ09ORElUSU9OQUwiOworICAgICAgbXkgJHNjb3BlID0gVVNfTE9DQUw7CisgICAgICBpZiAoZXhpc3RzICRfYW1fbWFjcm9fZm9yX2NvbmR7JGNvbmR9KQorCXsKKwkgIG15ICRtYWMgPSAkX2FtX21hY3JvX2Zvcl9jb25keyRjb25kfTsKKwkgICR0ZXh0IC49ICJcbiAgVGhlIHVzdWFsIHdheSB0byBkZWZpbmUgYCRjb25kJyBpcyB0byBhZGQgIjsKKwkgICR0ZXh0IC49ICgkbWFjID1+IC8gLykgPyAkbWFjIDogImAkbWFjJyI7CisJICAkdGV4dCAuPSAiXG4gIHRvIGAkY29uZmlndXJlX2FjJyBhbmQgcnVuIGBhY2xvY2FsJyBhbmQgYGF1dG9jb25mJyBhZ2Fpbi4iOworCSAgIyBUaGVzZSB3YXJuaW5ncyBhcHBlYXIgaW4gQXV0b21ha2UgZmlsZXMgKGRlcGVuZDIuYW0pLAorCSAgIyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIGRpc3BsYXkgdGhlbSBtb3JlIHRoYW4gb25jZToKKwkgICRzY29wZSA9IFVTX0dMT0JBTDsKKwl9CisgICAgICBlcnJvciAkd2hlcmUsICR0ZXh0LCB1bmlxX3Njb3BlID0+ICRzY29wZTsKKyAgICB9CisKKyAgcHVzaCAoQGNvbmRfc3RhY2ssIG1ha2VfY29uZGl0aW9uYWxfc3RyaW5nICgkbmVnYXRlLCAkY29uZCkpOworCisgIHJldHVybiBuZXcgQXV0b21ha2U6OkNvbmRpdGlvbiAoQGNvbmRfc3RhY2spOworfQorCisKKyMgJENPTkQKKyMgY29uZF9zdGFja19lbHNlICgkTkVHQVRFLCAkQ09ORCwgJFdIRVJFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdWIgY29uZF9zdGFja19lbHNlICgkJCQpCit7CisgIG15ICgkbmVnYXRlLCAkY29uZCwgJHdoZXJlKSA9IEBfOworCisgIGlmICghIEBjb25kX3N0YWNrKQorICAgIHsKKyAgICAgIGVycm9yICR3aGVyZSwgImVsc2Ugd2l0aG91dCBpZiI7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICRjb25kX3N0YWNrWyQjY29uZF9zdGFja10gPQorICAgIEF1dG9tYWtlOjpDb25kaXRpb246OmNvbmRpdGlvbmFsX25lZ2F0ZSAoJGNvbmRfc3RhY2tbJCNjb25kX3N0YWNrXSk7CisKKyAgIyBJZiAkQ09ORCBpcyBnaXZlbiwgY2hlY2sgYWdhaW5zdCBpdC4KKyAgaWYgKGRlZmluZWQgJGNvbmQpCisgICAgeworICAgICAgJGNvbmQgPSBtYWtlX2NvbmRpdGlvbmFsX3N0cmluZyAoJG5lZ2F0ZSwgJGNvbmQpOworCisgICAgICBlcnJvciAoJHdoZXJlLCAiZWxzZSByZW1pbmRlciAoJG5lZ2F0ZSRjb25kKSBpbmNvbXBhdGlibGUgd2l0aCAiCisJICAgICAuICJjdXJyZW50IGNvbmRpdGlvbmFsOiAkY29uZF9zdGFja1skI2NvbmRfc3RhY2tdIikKKwlpZiAkY29uZF9zdGFja1skI2NvbmRfc3RhY2tdIG5lICRjb25kOworICAgIH0KKworICByZXR1cm4gbmV3IEF1dG9tYWtlOjpDb25kaXRpb24gKEBjb25kX3N0YWNrKTsKK30KKworCisjICRDT05ECisjIGNvbmRfc3RhY2tfZW5kaWYgKCRORUdBVEUsICRDT05ELCAkV0hFUkUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdWIgY29uZF9zdGFja19lbmRpZiAoJCQkKQoreworICBteSAoJG5lZ2F0ZSwgJGNvbmQsICR3aGVyZSkgPSBAXzsKKyAgbXkgJG9sZF9jb25kOworCisgIGlmICghIEBjb25kX3N0YWNrKQorICAgIHsKKyAgICAgIGVycm9yICR3aGVyZSwgImVuZGlmIHdpdGhvdXQgaWYiOworICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICMgSWYgJENPTkQgaXMgZ2l2ZW4sIGNoZWNrIGFnYWluc3QgaXQuCisgIGlmIChkZWZpbmVkICRjb25kKQorICAgIHsKKyAgICAgICRjb25kID0gbWFrZV9jb25kaXRpb25hbF9zdHJpbmcgKCRuZWdhdGUsICRjb25kKTsKKworICAgICAgZXJyb3IgKCR3aGVyZSwgImVuZGlmIHJlbWluZGVyICgkbmVnYXRlJGNvbmQpIGluY29tcGF0aWJsZSB3aXRoICIKKwkgICAgIC4gImN1cnJlbnQgY29uZGl0aW9uYWw6ICRjb25kX3N0YWNrWyQjY29uZF9zdGFja10iKQorCWlmICRjb25kX3N0YWNrWyQjY29uZF9zdGFja10gbmUgJGNvbmQ7CisgICAgfQorCisgIHBvcCBAY29uZF9zdGFjazsKKworICByZXR1cm4gbmV3IEF1dG9tYWtlOjpDb25kaXRpb24gKEBjb25kX3N0YWNrKTsKK30KKworCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEhhbmRsaW5nIHRoZSB2YXJpYWJsZXMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyAmZGVmaW5lX3ByZXR0eV92YXJpYWJsZSAoJFZBUiwgJENPTkQsICRXSEVSRSwgQFZBTFVFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWtlIGRlZmluZV92YXJpYWJsZSwgYnV0IHRoZSB2YWx1ZSBpcyBhIGxpc3QsIGFuZCB0aGUgdmFyaWFibGUgbWF5CisjIGJlIGRlZmluZWQgY29uZGl0aW9uYWxseS4gIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGNvbmRpdGlvbgorIyB1bmRlciB3aGljaCB0aGUgdmFsdWUgc2hvdWxkIGJlIGRlZmluZWQ7IHRoaXMgc2hvdWxkIGJlIHRoZSBlbXB0eQorIyBzdHJpbmcgdG8gZGVmaW5lIHRoZSB2YXJpYWJsZSB1bmNvbmRpdGlvbmFsbHkuICBUaGUgdGhpcmQgYXJndW1lbnQKKyMgaXMgYSBsaXN0IGhvbGRpbmcgdGhlIHZhbHVlcyB0byB1c2UgZm9yIHRoZSB2YXJpYWJsZS4gIFRoZSB2YWx1ZSBpcworIyBwcmV0dHkgcHJpbnRlZCBpbiB0aGUgb3V0cHV0IGZpbGUuCitzdWIgZGVmaW5lX3ByZXR0eV92YXJpYWJsZSAoJCQkQCkKK3sKKyAgICBteSAoJHZhciwgJGNvbmQsICR3aGVyZSwgQHZhbHVlKSA9IEBfOworCisgICAgaWYgKCEgdmFyZGVmICgkdmFyLCAkY29uZCkpCisgICAgeworCUF1dG9tYWtlOjpWYXJpYWJsZTo6ZGVmaW5lICgkdmFyLCBWQVJfQVVUT01BS0UsICcnLCAkY29uZCwgIkB2YWx1ZSIsCisJCQkJICAgICcnLCAkd2hlcmUsIFZBUl9QUkVUVFkpOworCXJ2YXIgKCR2YXIpLT5yZGVmICgkY29uZCktPnNldF9zZWVuOworICAgIH0KK30KKworCisjIGRlZmluZV92YXJpYWJsZSAoJFZBUiwgJFZBTFVFLCAkV0hFUkUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBhIG5ldyBBdXRvbWFrZSBNYWtlZmlsZSB2YXJpYWJsZSBWQVIgdG8gVkFMVUUsIGJ1dCBvbmx5IGlmCisjIG5vdCBhbHJlYWR5IGRlZmluZWQuCitzdWIgZGVmaW5lX3ZhcmlhYmxlICgkJCQpCit7CisgICAgbXkgKCR2YXIsICR2YWx1ZSwgJHdoZXJlKSA9IEBfOworICAgIGRlZmluZV9wcmV0dHlfdmFyaWFibGUgKCR2YXIsIFRSVUUsICR3aGVyZSwgJHZhbHVlKTsKK30KKworCisjIGRlZmluZV9maWxlc192YXJpYWJsZSAoJFZBUiwgXEBCQVNFTkFNRSwgJEVYVEVOU0lPTiwgJFdIRVJFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgdGhlICRWQVIgd2hpY2ggY29udGVudCBpcyB0aGUgbGlzdCBvZiBmaWxlIG5hbWVzIGNvbXBvc2VkIG9mCisjIGEgQEJBU0VOQU1FIGFuZCB0aGUgJEVYVEVOU0lPTi4KK3N1YiBkZWZpbmVfZmlsZXNfdmFyaWFibGUgKCRcQCQkKQoreworICBteSAoJHZhciwgJGJhc2VuYW1lLCAkZXh0ZW5zaW9uLCAkd2hlcmUpID0gQF87CisgIGRlZmluZV92YXJpYWJsZSAoJHZhciwKKwkJICAgam9pbiAoJyAnLCBtYXAgeyAiJF8uJGV4dGVuc2lvbiIgfSBAJGJhc2VuYW1lKSwKKwkJICAgJHdoZXJlKTsKK30KKworCisjIExpa2UgZGVmaW5lX3ZhcmlhYmxlLCBidXQgZGVmaW5lIGEgdmFyaWFibGUgdG8gYmUgdGhlIGNvbmZpZ3VyZQorIyBzdWJzdGl0dXRpb24gYnkgdGhlIHNhbWUgbmFtZS4KK3N1YiBkZWZpbmVfY29uZmlndXJlX3ZhcmlhYmxlICgkKQoreworICBteSAoJHZhcikgPSBAXzsKKworICBteSAkcHJldHR5ID0gVkFSX0FTSVM7CisgIG15ICRvd25lciA9IFZBUl9DT05GSUdVUkU7CisKKyAgIyBTb21lIHZhcmlhYmxlcyB3ZSBkbyBub3Qgd2FudCB0byBvdXRwdXQuICBGb3IgaW5zdGFuY2UgaXQKKyAgIyB3b3VsZCBiZSBhIGJhZCBpZGVhIHRvIG91dHB1dCBgVSA9IEBVQGAgd2hlbiBgQFVAYCBjYW4gYmUKKyAgIyBzdWJzdGl0dXRlZCBhcyBgXGAuCisgICRwcmV0dHkgPSBWQVJfU0lMRU5UIGlmIGV4aXN0cyAkaWdub3JlZF9jb25maWd1cmVfdmFyc3skdmFyfTsKKworICAjIEFOU0kyS05SIGlzIGEgdmFyaWFibGUgdGhhdCBBdXRvbWFrZSB3YW50cyB0byByZWRlZmluZSwgc28KKyAgIyBpdCBtdXN0IGJlIG93bmVkIGJ5IEF1dG9tYWtlLiAgKEl0IGlzIGFsc28gdXNlZCBhcyBhIHByb29mCisgICMgdGhhdCBBTV9DX1BST1RPVFlQRVMgaGFzIGJlZW4gcnVuLCB0aGF0J3Mgd2h5IHdlIGRvIG5vdCBzaW1wbHkKKyAgIyBvbWl0IHRoZSBBQ19TVUJTVC4pCisgICRvd25lciA9IFZBUl9BVVRPTUFLRSBpZiAkdmFyIGVxICdBTlNJMktOUic7CisKKyAgQXV0b21ha2U6OlZhcmlhYmxlOjpkZWZpbmUgKCR2YXIsICRvd25lciwgJycsIFRSVUUsIHN1YnN0ICR2YXIsCisJCQkgICAgICAnJywgJGNvbmZpZ3VyZV92YXJzeyR2YXJ9LCAkcHJldHR5KTsKK30KKworCisjIGRlZmluZV9jb21waWxlcl92YXJpYWJsZSAoJExBTkcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBhIGNvbXBpbGVyIHZhcmlhYmxlLiAgV2UgYWxzbyBoYW5kbGUgZGVmaW5pbmcgdGhlIGBMVCcKKyMgdmVyc2lvbiBvZiB0aGUgY29tbWFuZCB3aGVuIHVzaW5nIGxpYnRvb2wuCitzdWIgZGVmaW5lX2NvbXBpbGVyX3ZhcmlhYmxlICgkKQoreworICAgIG15ICgkbGFuZykgPSBAXzsKKworICAgIG15ICgkdmFyLCAkdmFsdWUpID0gKCRsYW5nLT5jb21waWxlciwgJGxhbmctPmNvbXBpbGUpOworICAgIG15ICRsaWJ0b29sX3RhZyA9ICcnOworICAgICRsaWJ0b29sX3RhZyA9ICctLXRhZz0nIC4gJGxhbmctPmxpYnRvb2xfdGFnIC4gJyAnCisgICAgICBpZiAkbGFuZy0+bGlidG9vbF90YWcgJiYgZXhpc3RzICRsaWJ0b29sX3RhZ3N7JGxhbmctPmxpYnRvb2xfdGFnfTsKKyAgICAmZGVmaW5lX3ZhcmlhYmxlICgkdmFyLCAkdmFsdWUsIElOVEVSTkFMKTsKKyAgICBpZiAodmFyICgnTElCVE9PTCcpKQorICAgICAgeworCW15ICR2ZXJib3NlID0gZGVmaW5lX3ZlcmJvc2VfbGlidG9vbCAoKTsKKwkmZGVmaW5lX3ZhcmlhYmxlICgiTFQkdmFyIiwKKwkJCSAgIlwkKExJQlRPT0wpICR2ZXJib3NlICRsaWJ0b29sX3RhZ1wkKEFNX0xJQlRPT0xGTEFHUykgIgorCQkJICAuICJcJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICR2YWx1ZSIsCisJCQkgIElOVEVSTkFMKTsKKyAgICAgIH0KKyAgICBkZWZpbmVfdmVyYm9zZV90YWd2YXIgKCRsYW5nLT5jY2VyIHx8ICdHRU4nKTsKK30KKworCisjIGRlZmluZV9saW5rZXJfdmFyaWFibGUgKCRMQU5HKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIGxpbmtlciB2YXJpYWJsZXMuCitzdWIgZGVmaW5lX2xpbmtlcl92YXJpYWJsZSAoJCkKK3sKKyAgICBteSAoJGxhbmcpID0gQF87CisKKyAgICBteSAkbGlidG9vbF90YWcgPSAnJzsKKyAgICAkbGlidG9vbF90YWcgPSAnLS10YWc9JyAuICRsYW5nLT5saWJ0b29sX3RhZyAuICcgJworICAgICAgaWYgJGxhbmctPmxpYnRvb2xfdGFnICYmIGV4aXN0cyAkbGlidG9vbF90YWdzeyRsYW5nLT5saWJ0b29sX3RhZ307CisgICAgIyBDQ0xEID0gJChDQykuCisgICAgJmRlZmluZV92YXJpYWJsZSAoJGxhbmctPmxkZXIsICRsYW5nLT5sZCwgSU5URVJOQUwpOworICAgICMgQ0NMSU5LID0gJChDQ0xEKSBibGFoIGJsYWguLi4KKyAgICBteSAkbGluayA9ICcnOworICAgIGlmICh2YXIgKCdMSUJUT09MJykpCisgICAgICB7CisJbXkgJHZlcmJvc2UgPSBkZWZpbmVfdmVyYm9zZV9saWJ0b29sICgpOworCSRsaW5rID0gIlwkKExJQlRPT0wpICR2ZXJib3NlICRsaWJ0b29sX3RhZ1wkKEFNX0xJQlRPT0xGTEFHUykgIgorCQkuICJcJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICI7CisgICAgICB9CisgICAgJmRlZmluZV92YXJpYWJsZSAoJGxhbmctPmxpbmtlciwgJGxpbmsgLiAkbGFuZy0+bGluaywgSU5URVJOQUwpOworICAgICZkZWZpbmVfdmFyaWFibGUgKCRsYW5nLT5jb21waWxlciwgICRsYW5nKTsKKyAgICAmZGVmaW5lX3ZlcmJvc2VfdGFndmFyICgkbGFuZy0+bGRlciB8fCAnR0VOJyk7Cit9CisKK3N1YiBkZWZpbmVfcGVyX3RhcmdldF9saW5rZXJfdmFyaWFibGUgKCQkKQoreworICBteSAoJGxpbmtlciwgJHRhcmdldCkgPSBAXzsKKworICAjIElmIHRoZSB1c2VyIHdyb3RlIGEgY3VzdG9tIGxpbmsgY29tbWFuZCwgd2UgZG9uJ3QgZGVmaW5lIG91cnMuCisgIHJldHVybiAiJHt0YXJnZXR9X0xJTksiCisgICAgaWYgc2V0X3NlZW4gIiR7dGFyZ2V0fV9MSU5LIjsKKworICBteSAkeGxpbmsgPSAkbGlua2VyID8gJGxpbmtlciA6ICdMSU5LJzsKKworICBteSAkbGFuZyA9ICRsaW5rX2xhbmd1YWdlc3skeGxpbmt9OworICBwcm9nX2Vycm9yICJVbmtub3duIGxhbmd1YWdlIGZvciBsaW5rZXIgdmFyaWFibGUgYCR4bGluayciCisgICAgdW5sZXNzICRsYW5nOworCisgIG15ICRsaW5rX2NvbW1hbmQgPSAkbGFuZy0+bGluazsKKyAgaWYgKHZhciAnTElCVE9PTCcpCisgICAgeworICAgICAgbXkgJGxpYnRvb2xfdGFnID0gJyc7CisgICAgICAkbGlidG9vbF90YWcgPSAnLS10YWc9JyAuICRsYW5nLT5saWJ0b29sX3RhZyAuICcgJworCWlmICRsYW5nLT5saWJ0b29sX3RhZyAmJiBleGlzdHMgJGxpYnRvb2xfdGFnc3skbGFuZy0+bGlidG9vbF90YWd9OworCisgICAgICBteSAkdmVyYm9zZSA9IGRlZmluZV92ZXJib3NlX2xpYnRvb2wgKCk7CisgICAgICAkbGlua19jb21tYW5kID0KKwkiXCQoTElCVE9PTCkgJHZlcmJvc2UgJGxpYnRvb2xfdGFnXCQoQU1fTElCVE9PTEZMQUdTKSBcJChMSUJUT09MRkxBR1MpICIKKwkuICItLW1vZGU9bGluayAiIC4gJGxpbmtfY29tbWFuZDsKKyAgICB9CisKKyAgIyBSZXdyaXRlIGVhY2ggb2NjdXJyZW5jZSBvZiBgQU1fJGZsYWcnIGluIHRoZSBsaW5rCisgICMgY29tbWFuZCBpbnRvIGAke2Rlcml2ZWR9XyRmbGFnJyBpZiBpdCBleGlzdHMuCisgIG15ICRvcmlnX2NvbW1hbmQgPSAkbGlua19jb21tYW5kOworICBteSBAZmxhZ3MgPSAoQHskbGFuZy0+ZmxhZ3N9LCAnTERGTEFHUycpOworICBwdXNoIEBmbGFncywgJ0xJQlRPT0xGTEFHUycgaWYgdmFyICdMSUJUT09MJzsKKyAgZm9yIG15ICRmbGFnIChAZmxhZ3MpCisgICAgeworICAgICAgbXkgJHZhbCA9ICIke3RhcmdldH1fJGZsYWciOworICAgICAgJGxpbmtfY29tbWFuZCA9fiBzL1woQU1fJGZsYWdcKS9cKCR2YWxcKS8KKwlpZiBzZXRfc2VlbiAoJHZhbCk7CisgICAgfQorCisgICMgSWYgdGhlIGNvbXB1dGVkIGNvbW1hbmQgaXMgdGhlIHNhbWUgYXMgdGhlIGdlbmVyaWMgY29tbWFuZCwgdXNlCisgICMgdGhlIGNvbW1hbmQgbGlua2VyIHZhcmlhYmxlLgorICByZXR1cm4gKCRsYW5nLT5saW5rZXIsICRsYW5nLT5sZGVyKQorICAgIGlmICRsaW5rX2NvbW1hbmQgZXEgJG9yaWdfY29tbWFuZDsKKworICAmZGVmaW5lX3ZhcmlhYmxlICgiJHt0YXJnZXR9X0xJTksiLCAkbGlua19jb21tYW5kLCBJTlRFUk5BTCk7CisgIHJldHVybiAoIiR7dGFyZ2V0fV9MSU5LIiwgJGxhbmctPmxkZXIpOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgJmNoZWNrX3RyYWlsaW5nX3NsYXNoICgkV0hFUkUsICRMSU5FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZXR1cm4gMSBpZmYgJExJTkUgZW5kcyB3aXRoIGEgc2xhc2guCisjIE1pZ2h0IG1vZGlmeSAkTElORS4KK3N1YiBjaGVja190cmFpbGluZ19zbGFzaCAoJFwkKQoreworICBteSAoJHdoZXJlLCAkbGluZSkgPSBAXzsKKworICAjIElnbm9yZSBgIyMnIGxpbmVzLgorICByZXR1cm4gMCBpZiAkJGxpbmUgPX4gLyRJR05PUkVfUEFUVEVSTi9vOworCisgICMgQ2F0Y2ggYW5kIGZpeCBhIGNvbW1vbiBlcnJvci4KKyAgbXNnICJzeW50YXgiLCAkd2hlcmUsICJ3aGl0ZXNwYWNlIGZvbGxvd2luZyB0cmFpbGluZyBiYWNrc2xhc2giCisgICAgaWYgJCRsaW5lID1+IHMvXFxccytcbiQvXFxcbi87CisKKyAgcmV0dXJuICQkbGluZSA9fiAvXFwkLzsKK30KKworCisjICZyZWFkX2FtX2ZpbGUgKCRBTUZJTEUsICRXSEVSRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWFkIE1ha2VmaWxlLmFtIGFuZCBzZXQgdXAgJWNvbnRlbnRzLiAgU2ltdWx0YW5lb3VzbHkgY29weSBsaW5lcworIyBmcm9tIE1ha2VmaWxlLmFtIGludG8gJG91dHB1dF90cmFpbGVyLCBvciBkZWZpbmUgdmFyaWFibGVzIGFzCisjIGFwcHJvcHJpYXRlLiAgTk9URSB3ZSBwdXQgcnVsZXMgaW4gdGhlIHRyYWlsZXIgc2VjdGlvbi4gIFdlIHdhbnQKKyMgdXNlciBydWxlcyB0byBjb21lIGFmdGVyIG91ciBnZW5lcmF0ZWQgc3R1ZmYuCitzdWIgcmVhZF9hbV9maWxlICgkJCkKK3sKKyAgICBteSAoJGFtZmlsZSwgJHdoZXJlKSA9IEBfOworCisgICAgbXkgJGFtX2ZpbGUgPSBuZXcgQXV0b21ha2U6OlhGaWxlICgiPCAkYW1maWxlIik7CisgICAgdmVyYiAicmVhZGluZyAkYW1maWxlIjsKKworICAgICMgS2VlcCB0cmFjayBvZiB0aGUgeW91bmdlc3Qgb3V0cHV0IGRlcGVuZGVuY3kuCisgICAgbXkgJG10aW1lID0gbXRpbWUgJGFtZmlsZTsKKyAgICAkb3V0cHV0X2RlcHNfZ3JlYXRlc3RfdGltZXN0YW1wID0gJG10aW1lCisgICAgICBpZiAkbXRpbWUgPiAkb3V0cHV0X2RlcHNfZ3JlYXRlc3RfdGltZXN0YW1wOworCisgICAgbXkgJHNwYWNpbmcgPSAnJzsKKyAgICBteSAkY29tbWVudCA9ICcnOworICAgIG15ICRibGFuayA9IDA7CisgICAgbXkgJHNhd19iayA9IDA7CisgICAgbXkgJHZhcl9sb29rID0gVkFSX0FTSVM7CisKKyAgICB1c2UgY29uc3RhbnQgSU5fVkFSX0RFRiA9PiAwOworICAgIHVzZSBjb25zdGFudCBJTl9SVUxFX0RFRiA9PiAxOworICAgIHVzZSBjb25zdGFudCBJTl9DT01NRU5UID0+IDI7CisgICAgbXkgJHByZXZfc3RhdGUgPSBJTl9SVUxFX0RFRjsKKworICAgIHdoaWxlICgkXyA9ICRhbV9maWxlLT5nZXRsaW5lKQorICAgIHsKKwkkd2hlcmUtPnNldCAoIiRhbWZpbGU6JC4iKTsKKwlpZiAoLyRJR05PUkVfUEFUVEVSTi9vKQorCXsKKwkgICAgIyBNZXJlbHkgZGVsZXRlIGNvbW1lbnRzIGJlZ2lubmluZyB3aXRoIHR3byBoYXNoZXMuCisJfQorCWVsc2lmICgvJFdISVRFX1BBVFRFUk4vbykKKwl7CisJICAgIGVycm9yICR3aGVyZSwgImJsYW5rIGxpbmUgZm9sbG93aW5nIHRyYWlsaW5nIGJhY2tzbGFzaCIKKwkgICAgICBpZiAkc2F3X2JrOworCSAgICAjIFN0aWNrIGEgc2luZ2xlIHdoaXRlIGxpbmUgYmVmb3JlIHRoZSBpbmNvbWluZyBtYWNybyBvciBydWxlLgorCSAgICAkc3BhY2luZyA9ICJcbiI7CisJICAgICRibGFuayA9IDE7CisJICAgICMgRmx1c2ggYWxsIGNvbW1lbnRzIHNlZW4gc28gZmFyLgorCSAgICBpZiAoJGNvbW1lbnQgbmUgJycpCisJICAgIHsKKwkJJG91dHB1dF92YXJzIC49ICRjb21tZW50OworCQkkY29tbWVudCA9ICcnOworCSAgICB9CisJfQorCWVsc2lmICgvJENPTU1FTlRfUEFUVEVSTi9vKQorCXsKKwkgICAgIyBTdGljayBjb21tZW50cyBiZWZvcmUgdGhlIGluY29taW5nIG1hY3JvIG9yIHJ1bGUuICBNYWtlCisJICAgICMgc3VyZSBhIGJsYW5rIGxpbmUgcHJlY2VkZXMgdGhlIGZpcnN0IGJsb2NrIG9mIGNvbW1lbnRzLgorCSAgICAkc3BhY2luZyA9ICJcbiIgdW5sZXNzICRibGFuazsKKwkgICAgJGJsYW5rID0gMTsKKwkgICAgJGNvbW1lbnQgLj0gJHNwYWNpbmcgLiAkXzsKKwkgICAgJHNwYWNpbmcgPSAnJzsKKwkgICAgJHByZXZfc3RhdGUgPSBJTl9DT01NRU5UOworCX0KKwllbHNlCisJeworCSAgICBsYXN0OworCX0KKwkkc2F3X2JrID0gY2hlY2tfdHJhaWxpbmdfc2xhc2ggKCR3aGVyZSwgJF8pOworICAgIH0KKworICAgICMgV2Ugc2F2ZSB0aGUgY29uZGl0aW9uYWwgc3RhY2sgb24gZW50cnksIGFuZCB0aGVuIGNoZWNrIHRvIG1ha2UKKyAgICAjIHN1cmUgaXQgaXMgdGhlIHNhbWUgb24gZXhpdC4gIFRoaXMgbGV0cyB1cyBjb25kaXRpb25hbGx5IGluY2x1ZGUKKyAgICAjIG90aGVyIGZpbGVzLgorICAgIG15IEBzYXZlZF9jb25kX3N0YWNrID0gQGNvbmRfc3RhY2s7CisgICAgbXkgJGNvbmQgPSBuZXcgQXV0b21ha2U6OkNvbmRpdGlvbiAoQGNvbmRfc3RhY2spOworCisgICAgbXkgJGxhc3RfdmFyX25hbWUgPSAnJzsKKyAgICBteSAkbGFzdF92YXJfdHlwZSA9ICcnOworICAgIG15ICRsYXN0X3Zhcl92YWx1ZSA9ICcnOworICAgIG15ICRsYXN0X3doZXJlOworICAgICMgRklYTUU6IHNob3VsZG4ndCB1c2UgJF8gaW4gdGhpcyBsb29wOyBpdCBpcyB0b28gYmlnLgorICAgIHdoaWxlICgkXykKKyAgICB7CisJJHdoZXJlLT5zZXQgKCIkYW1maWxlOiQuIik7CisKKwkjIE1ha2Ugc3VyZSB0aGUgbGluZSBpcyBcbi10ZXJtaW5hdGVkLgorCWNob21wOworCSRfIC49ICJcbiI7CisKKwkjIERvbid0IGxvb2sgYXQgTUFJTlRBSU5FUl9NT0RFX1RSVUUgaGVyZS4gIFRoYXQgc2hvdWxkbid0IGJlCisJIyB1c2VkIGJ5IHVzZXJzLiAgQE1BSU5UQCBpcyBhbiBhbmFjaHJvbmlzbSBub3cuCisJJF8gPX4gcy9cQE1BSU5UXEAvL2cKKwkgICAgdW5sZXNzICRzZWVuX21haW50X21vZGU7CisKKwlteSAkbmV3X3Nhd19iayA9IGNoZWNrX3RyYWlsaW5nX3NsYXNoICgkd2hlcmUsICRfKTsKKworCWlmICgvJElHTk9SRV9QQVRURVJOL28pCisJeworCSAgICAjIE1lcmVseSBkZWxldGUgY29tbWVudHMgYmVnaW5uaW5nIHdpdGggdHdvIGhhc2hlcy4KKworCSAgICAjIEtlZXAgYW55IGJhY2tzbGFzaCBmcm9tIHRoZSBwcmV2aW91cyBsaW5lLgorCSAgICAkbmV3X3Nhd19iayA9ICRzYXdfYms7CisJfQorCWVsc2lmICgvJFdISVRFX1BBVFRFUk4vbykKKwl7CisJICAgICMgU3RpY2sgYSBzaW5nbGUgd2hpdGUgbGluZSBiZWZvcmUgdGhlIGluY29taW5nIG1hY3JvIG9yIHJ1bGUuCisJICAgICRzcGFjaW5nID0gIlxuIjsKKwkgICAgZXJyb3IgJHdoZXJlLCAiYmxhbmsgbGluZSBmb2xsb3dpbmcgdHJhaWxpbmcgYmFja3NsYXNoIgorCSAgICAgIGlmICRzYXdfYms7CisJfQorCWVsc2lmICgvJENPTU1FTlRfUEFUVEVSTi9vKQorCXsKKwkgICAgZXJyb3IgJHdoZXJlLCAiY29tbWVudCBmb2xsb3dpbmcgdHJhaWxpbmcgYmFja3NsYXNoIgorCSAgICAgIGlmICRzYXdfYmsgJiYgJHByZXZfc3RhdGUgIT0gSU5fQ09NTUVOVDsKKworCSAgICAjIFN0aWNrIGNvbW1lbnRzIGJlZm9yZSB0aGUgaW5jb21pbmcgbWFjcm8gb3IgcnVsZS4KKwkgICAgJGNvbW1lbnQgLj0gJHNwYWNpbmcgLiAkXzsKKwkgICAgJHNwYWNpbmcgPSAnJzsKKwkgICAgJHByZXZfc3RhdGUgPSBJTl9DT01NRU5UOworCX0KKwllbHNpZiAoJHNhd19iaykKKwl7CisJICAgIGlmICgkcHJldl9zdGF0ZSA9PSBJTl9SVUxFX0RFRikKKwkgICAgeworCSAgICAgIG15ICRjb25kID0gbmV3IEF1dG9tYWtlOjpDb25kaXRpb24gQGNvbmRfc3RhY2s7CisJICAgICAgJG91dHB1dF90cmFpbGVyIC49ICRjb25kLT5zdWJzdF9zdHJpbmc7CisJICAgICAgJG91dHB1dF90cmFpbGVyIC49ICRfOworCSAgICB9CisJICAgIGVsc2lmICgkcHJldl9zdGF0ZSA9PSBJTl9DT01NRU5UKQorCSAgICB7CisJCSMgSWYgdGhlIGxpbmUgZG9lc24ndCBzdGFydCB3aXRoIGEgYCMnLCBhZGQgaXQuCisJCSMgV2UgZG8gdGhpcyBiZWNhdXNlIGEgY29udGludWVkIGNvbW1lbnQgbGlrZQorCQkjICAgIyBBID0gZm9vIFwKKwkJIyAgICAgICAgIGJhciBcCisJCSMgICAgICAgICBiYXoKKwkJIyBpcyBub3QgcG9ydGFibGUuICBCU0QgbWFrZSBkb2Vzbid0IGhvbm9yCisJCSMgZXNjYXBlZCBuZXdsaW5lcyBpbiBjb21tZW50cy4KKwkJcy9eIz8vIy87CisJCSRjb21tZW50IC49ICRzcGFjaW5nIC4gJF87CisJICAgIH0KKwkgICAgZWxzZSAjICRwcmV2X3N0YXRlID09IElOX1ZBUl9ERUYKKwkgICAgeworCSAgICAgICRsYXN0X3Zhcl92YWx1ZSAuPSAnICcKKwkJdW5sZXNzICRsYXN0X3Zhcl92YWx1ZSA9fiAvXHMkLzsKKwkgICAgICAkbGFzdF92YXJfdmFsdWUgLj0gJF87CisKKwkgICAgICBpZiAoIS9cXCQvKQorCQl7CisJCSAgQXV0b21ha2U6OlZhcmlhYmxlOjpkZWZpbmUgKCRsYXN0X3Zhcl9uYW1lLCBWQVJfTUFLRUZJTEUsCisJCQkJCSAgICAgICRsYXN0X3Zhcl90eXBlLCAkY29uZCwKKwkJCQkJICAgICAgJGxhc3RfdmFyX3ZhbHVlLCAkY29tbWVudCwKKwkJCQkJICAgICAgJGxhc3Rfd2hlcmUsIFZBUl9BU0lTKQorCQkgICAgaWYgJGNvbmQgIT0gRkFMU0U7CisJCSAgJGNvbW1lbnQgPSAkc3BhY2luZyA9ICcnOworCQl9CisJICAgIH0KKwl9CisKKwllbHNpZiAoLyRJRl9QQVRURVJOL28pCisJICB7CisJICAgICRjb25kID0gY29uZF9zdGFja19pZiAoJDEsICQyLCAkd2hlcmUpOworCSAgfQorCWVsc2lmICgvJEVMU0VfUEFUVEVSTi9vKQorCSAgeworCSAgICAkY29uZCA9IGNvbmRfc3RhY2tfZWxzZSAoJDEsICQyLCAkd2hlcmUpOworCSAgfQorCWVsc2lmICgvJEVORElGX1BBVFRFUk4vbykKKwkgIHsKKwkgICAgJGNvbmQgPSBjb25kX3N0YWNrX2VuZGlmICgkMSwgJDIsICR3aGVyZSk7CisJICB9CisKKwllbHNpZiAoLyRSVUxFX1BBVFRFUk4vbykKKwl7CisJICAgICMgRm91bmQgYSBydWxlLgorCSAgICAkcHJldl9zdGF0ZSA9IElOX1JVTEVfREVGOworCisJICAgICMgRm9yIG5vdyB3ZSBoYXZlIHRvIG91dHB1dCBhbGwgZGVmaW5pdGlvbnMgb2YgdXNlciBydWxlcworCSAgICAjIGFuZCBjYW4ndCBkaWFnbm9zZSBkdXBsaWNhdGVzIChzZWUgdGhlIGNvbW1lbnQgaW4KKwkgICAgIyBBdXRvbWFrZTo6UnVsZTo6ZGVmaW5lKS4gU28gd2UgZ28gb24gYW5kIGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlLgorCSAgICBBdXRvbWFrZTo6UnVsZTo6ZGVmaW5lICgkMSwgJGFtZmlsZSwgUlVMRV9VU0VSLCAkY29uZCwgJHdoZXJlKTsKKworCSAgICBjaGVja192YXJpYWJsZV9leHBhbnNpb25zICgkXywgJHdoZXJlKTsKKworCSAgICAkb3V0cHV0X3RyYWlsZXIgLj0gJGNvbW1lbnQgLiAkc3BhY2luZzsKKwkgICAgbXkgJGNvbmQgPSBuZXcgQXV0b21ha2U6OkNvbmRpdGlvbiBAY29uZF9zdGFjazsKKwkgICAgJG91dHB1dF90cmFpbGVyIC49ICRjb25kLT5zdWJzdF9zdHJpbmc7CisJICAgICRvdXRwdXRfdHJhaWxlciAuPSAkXzsKKwkgICAgJGNvbW1lbnQgPSAkc3BhY2luZyA9ICcnOworCX0KKwllbHNpZiAoLyRBU1NJR05NRU5UX1BBVFRFUk4vbykKKwl7CisJICAgICMgRm91bmQgYSBtYWNybyBkZWZpbml0aW9uLgorCSAgICAkcHJldl9zdGF0ZSA9IElOX1ZBUl9ERUY7CisJICAgICRsYXN0X3Zhcl9uYW1lID0gJDE7CisJICAgICRsYXN0X3Zhcl90eXBlID0gJDI7CisJICAgICRsYXN0X3Zhcl92YWx1ZSA9ICQzOworCSAgICAkbGFzdF93aGVyZSA9ICR3aGVyZS0+Y2xvbmU7CisJICAgIGlmICgkMyBuZSAnJyAmJiBzdWJzdHIgKCQzLCAtMSkgZXEgIlxcIikKKwkgICAgICB7CisJCSMgV2UgcHJlc2VydmUgdGhlIGBcJyBiZWNhdXNlIG90aGVyd2lzZSB0aGUgbG9uZyBsaW5lcworCQkjIHRoYXQgYXJlIGdlbmVyYXRlZCB3aWxsIGJlIHRydW5jYXRlZCBieSBicm9rZW4KKwkJIyBgc2VkJ3MuCisJCSRsYXN0X3Zhcl92YWx1ZSA9ICQzIC4gIlxuIjsKKwkgICAgICB9CisJICAgICMgTm9ybWFsbHkgd2UgdHJ5IHRvIG91dHB1dCB2YXJpYWJsZSBkZWZpbml0aW9ucyBpbiB0aGUKKwkgICAgIyBzYW1lIGZvcm1hdCB0aGV5IHdlcmUgaW5wdXQuICBIb3dldmVyLCBQT1NJWCBjb21wbGlhbnQKKwkgICAgIyBzeXN0ZW1zIGFyZSBub3QgcmVxdWlyZWQgdG8gc3VwcG9ydCBsaW5lcyBsb25nZXIgdGhhbgorCSAgICAjIDIwNDggYnl0ZXMgKG1vc3Qgbm90YWJseSwgc29tZSBzZWQgaW1wbGVtZW50YXRpb24gYXJlCisJICAgICMgbGltaXRlZCB0byA0MDAwIGJ5dGVzLCBhbmQgc2VkIGlzIHVzZWQgYnkgY29uZmlnLnN0YXR1cworCSAgICAjIHRvIHJld3JpdGUgTWFrZWZpbGUuaW4gaW50byBNYWtlZmlsZSkuICBNb3Jlb3ZlciBub2JvZHkKKwkgICAgIyB3b3VsZCByZWFsbHkgd3JpdGUgc3VjaCBsb25nIGxpbmVzIGJ5IGhhbmQgc2luY2UgaXQgaXMKKwkgICAgIyBoYXJkbHkgbWFpbnRhaW5hYmxlLiAgU28gaWYgYSBsaW5lIGlzIGxvbmdlciB0aGF0IDEwMDAKKwkgICAgIyBieXRlcyAoYW4gYXJiaXRyYXJ5IGxpbWl0KSwgYXNzdW1lIGl0IGhhcyBiZWVuCisJICAgICMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgc29tZSB0b29scywgYW5kIGZsYXR0ZW4gdGhlCisJICAgICMgdmFyaWFibGUgZGVmaW5pdGlvbi4gIE90aGVyd2lzZSwga2VlcCB0aGUgdmFyaWFibGUgYXMgaXQKKwkgICAgIyBhcyBiZWVuIGlucHV0LgorCSAgICAkdmFyX2xvb2sgPSBWQVJfUFJFVFRZIGlmIGxlbmd0aCAoJGxhc3RfdmFyX3ZhbHVlKSA+PSAxMDAwOworCisJICAgIGlmICghL1xcJC8pCisJICAgICAgeworCQlBdXRvbWFrZTo6VmFyaWFibGU6OmRlZmluZSAoJGxhc3RfdmFyX25hbWUsIFZBUl9NQUtFRklMRSwKKwkJCQkJICAgICRsYXN0X3Zhcl90eXBlLCAkY29uZCwKKwkJCQkJICAgICRsYXN0X3Zhcl92YWx1ZSwgJGNvbW1lbnQsCisJCQkJCSAgICAkbGFzdF93aGVyZSwgJHZhcl9sb29rKQorCQkgIGlmICRjb25kICE9IEZBTFNFOworCQkkY29tbWVudCA9ICRzcGFjaW5nID0gJyc7CisJCSR2YXJfbG9vayA9IFZBUl9BU0lTOworCSAgICAgIH0KKwl9CisJZWxzaWYgKC8kSU5DTFVERV9QQVRURVJOL28pCisJeworCSAgICBteSAkcGF0aCA9ICQxOworCisJICAgIGlmICgkcGF0aCA9fiBzL15cJFwodG9wX3NyY2RpclwpXC8vLykKKwkgICAgICB7CisJCXB1c2ggKEBpbmNsdWRlX3N0YWNrLCAiXCRcKHRvcF9zcmNkaXJcKS8kcGF0aCIpOworCQkjIERpc3RyaWJ1dGUgYW55IGluY2x1ZGVkIGZpbGUuCisKKwkJIyBBbHdheXMgdXNlIHRoZSAkKHRvcF9zcmNkaXIpIHByZWZpeCBpbiBESVNUX0NPTU1PTiwKKwkJIyBvdGhlcndpc2UgT1NGIG1ha2Ugd2lsbCBpbXBsaWNpdGx5IGNvcHkgdGhlIGluY2x1ZGVkCisJCSMgZmlsZSBpbiB0aGUgYnVpbGQgdHJlZSBkdXJpbmcgYG1ha2UgZGlzdGRpcicgdG8gc2F0aXNmeQorCQkjIHRoZSBkZXBlbmRlbmN5LgorCQkjIChzdWJkaXJjb25kMi50ZXN0IGFuZCBzdWJkaXJjb25kMy50ZXN0IHdpbGwgZmFpbC4pCisJCXB1c2hfZGlzdF9jb21tb24gKCJcJFwodG9wX3NyY2RpclwpLyRwYXRoIik7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgeworCQkkcGF0aCA9fiBzL1wkXChzcmNkaXJcKVwvLy87CisJCXB1c2ggKEBpbmNsdWRlX3N0YWNrLCAiXCRcKHNyY2RpclwpLyRwYXRoIik7CisJCSMgQWx3YXlzIHVzZSB0aGUgJChzcmNkaXIpIHByZWZpeCBpbiBESVNUX0NPTU1PTiwKKwkJIyBvdGhlcndpc2UgT1NGIG1ha2Ugd2lsbCBpbXBsaWNpdGx5IGNvcHkgdGhlIGluY2x1ZGVkCisJCSMgZmlsZSBpbiB0aGUgYnVpbGQgdHJlZSBkdXJpbmcgYG1ha2UgZGlzdGRpcicgdG8gc2F0aXNmeQorCQkjIHRoZSBkZXBlbmRlbmN5LgorCQkjIChzdWJkaXJjb25kMi50ZXN0IGFuZCBzdWJkaXJjb25kMy50ZXN0IHdpbGwgZmFpbC4pCisJCXB1c2hfZGlzdF9jb21tb24gKCJcJFwoc3JjZGlyXCkvJHBhdGgiKTsKKwkJJHBhdGggPSAkcmVsYXRpdmVfZGlyIC4gIi8iIC4gJHBhdGggaWYgJHJlbGF0aXZlX2RpciBuZSAnLic7CisJICAgICAgfQorCSAgICAkd2hlcmUtPnB1c2hfY29udGV4dCAoImAkcGF0aCcgaW5jbHVkZWQgZnJvbSBoZXJlIik7CisJICAgICZyZWFkX2FtX2ZpbGUgKCRwYXRoLCAkd2hlcmUpOworCSAgICAkd2hlcmUtPnBvcF9jb250ZXh0OworCX0KKwllbHNlCisJeworCSAgICAjIFRoaXMgaXNuJ3QgYW4gZXJyb3I7IGl0IGlzIHByb2JhYmx5IGEgY29udGludWVkIHJ1bGUuCisJICAgICMgSW4gZmFjdCwgdGhpcyBpcyB3aGF0IHdlIGFzc3VtZS4KKwkgICAgJHByZXZfc3RhdGUgPSBJTl9SVUxFX0RFRjsKKwkgICAgY2hlY2tfdmFyaWFibGVfZXhwYW5zaW9ucyAoJF8sICR3aGVyZSk7CisJICAgICRvdXRwdXRfdHJhaWxlciAuPSAkY29tbWVudCAuICRzcGFjaW5nOworCSAgICBteSAkY29uZCA9IG5ldyBBdXRvbWFrZTo6Q29uZGl0aW9uIEBjb25kX3N0YWNrOworCSAgICAkb3V0cHV0X3RyYWlsZXIgLj0gJGNvbmQtPnN1YnN0X3N0cmluZzsKKwkgICAgJG91dHB1dF90cmFpbGVyIC49ICRfOworCSAgICAkY29tbWVudCA9ICRzcGFjaW5nID0gJyc7CisJICAgIGVycm9yICR3aGVyZSwgImAjJyBjb21tZW50IGF0IHN0YXJ0IG9mIHJ1bGUgaXMgdW5wb3J0YWJsZSIKKwkgICAgICBpZiAkXyA9fiAvXlx0XHMqXCMvOworCX0KKworCSRzYXdfYmsgPSAkbmV3X3Nhd19iazsKKwkkXyA9ICRhbV9maWxlLT5nZXRsaW5lOworICAgIH0KKworICAgICRvdXRwdXRfdHJhaWxlciAuPSAkY29tbWVudDsKKworICAgIGVycm9yICgkd2hlcmUsICJ0cmFpbGluZyBiYWNrc2xhc2ggb24gbGFzdCBsaW5lIikKKyAgICAgIGlmICRzYXdfYms7CisKKyAgICBlcnJvciAoJHdoZXJlLCAoQGNvbmRfc3RhY2sgPyAidW50ZXJtaW5hdGVkIGNvbmRpdGlvbmFsczogQGNvbmRfc3RhY2siCisJCSAgICA6ICJ0b28gbWFueSBjb25kaXRpb25hbHMgY2xvc2VkIGluIGluY2x1ZGUgZmlsZSIpKQorICAgICAgaWYgIkBzYXZlZF9jb25kX3N0YWNrIiBuZSAiQGNvbmRfc3RhY2siOworfQorCisKKyMgZGVmaW5lX3N0YW5kYXJkX3ZhcmlhYmxlcyAoKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEEgaGVscGVyIGZvciByZWFkX21haW5fYW1fZmlsZSB3aGljaCBpbml0aWFsaXplcyBjb25maWd1cmUgdmFyaWFibGVzCisjIGFuZCB2YXJpYWJsZXMgZnJvbSBoZWFkZXItdmFycy5hbS4KK3N1YiBkZWZpbmVfc3RhbmRhcmRfdmFyaWFibGVzCit7CisgIG15ICRzYXZlZF9vdXRwdXRfdmFycyA9ICRvdXRwdXRfdmFyczsKKyAgbXkgKCRjb21tZW50cywgdW5kZWYsICRydWxlcykgPQorICAgIGZpbGVfY29udGVudHNfaW50ZXJuYWwgKDEsICIkbGliZGlyL2FtL2hlYWRlci12YXJzLmFtIiwKKwkJCSAgICBuZXcgQXV0b21ha2U6OkxvY2F0aW9uKTsKKworICBmb3JlYWNoIG15ICR2YXIgKHNvcnQga2V5cyAlY29uZmlndXJlX3ZhcnMpCisgICAgeworICAgICAgJmRlZmluZV9jb25maWd1cmVfdmFyaWFibGUgKCR2YXIpOworICAgIH0KKworICAkb3V0cHV0X3ZhcnMgLj0gJGNvbW1lbnRzIC4gJHJ1bGVzOworfQorCisjIFJlYWQgbWFpbiBhbSBmaWxlLgorc3ViIHJlYWRfbWFpbl9hbV9maWxlCit7CisgICAgbXkgKCRhbWZpbGUpID0gQF87CisKKyAgICAjIFRoaXMgc3VwcG9ydHMgdGhlIHN0cmFuZ2UgdmFyaWFibGUgdHJpY2tzIHdlIGFyZSBhYm91dCB0byBwbGF5LgorICAgIHByb2dfZXJyb3IgKG1hY3Jvc19kdW1wICgpIC4gInZhcmlhYmxlIGRlZmluZWQgYmVmb3JlIHJlYWRfbWFpbl9hbV9maWxlIikKKyAgICAgIGlmIChzY2FsYXIgKHZhcmlhYmxlcykgPiAwKTsKKworICAgICMgR2VuZXJhdGUgY29weXJpZ2h0IGhlYWRlciBmb3IgZ2VuZXJhdGVkIE1ha2VmaWxlLmluLgorICAgICMgV2UgZG8gZGlzY2FyZCB0aGUgb3V0cHV0IG9mIHByZWRlZmluZWQgdmFyaWFibGVzLCBoYW5kbGVkIGJlbG93LgorICAgICRvdXRwdXRfdmFycyA9ICgiIyAkaW5fZmlsZV9uYW1lIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAiCisJCSAgIC4gJFZFUlNJT04gLiAiIGZyb20gJGFtX2ZpbGVfbmFtZS5cbiIpOworICAgICRvdXRwdXRfdmFycyAuPSAnIyAnIC4gc3Vic3QgKCdjb25maWd1cmVfaW5wdXQnKSAuICJcbiI7CisgICAgJG91dHB1dF92YXJzIC49ICRnZW5fY29weXJpZ2h0OworCisgICAgIyBXZSB3YW50IHRvIHByZWRlZmluZSBhcyBtYW55IHZhcmlhYmxlcyBhcyBwb3NzaWJsZS4gIFRoaXMgbGV0cworICAgICMgdGhlIHVzZXIgc2V0IHRoZW0gd2l0aCBgKz0nIGluIE1ha2VmaWxlLmFtLgorICAgICZkZWZpbmVfc3RhbmRhcmRfdmFyaWFibGVzOworCisgICAgIyBSZWFkIHVzZXIgZmlsZSwgd2hpY2ggbWlnaHQgb3ZlcnJpZGUgc29tZSBvZiBvdXIgdmFsdWVzLgorICAgICZyZWFkX2FtX2ZpbGUgKCRhbWZpbGUsIG5ldyBBdXRvbWFrZTo6TG9jYXRpb24pOworfQorCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjICRGTEFUVEVORUQKKyMgJmZsYXR0ZW4gKCRTVFJJTkcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBGbGF0dGVuIHRoZSAkU1RSSU5HIGFuZCByZXR1cm4gdGhlIHJlc3VsdC4KK3N1YiBmbGF0dGVuCit7CisgICRfID0gc2hpZnQ7CisKKyAgcy9cXFxuLy9zb21nOworICBzL1xzKy8gL2c7CisgIHMvXiAvLzsKKyAgcy8gJC8vOworCisgIHJldHVybiAkXzsKK30KKworCisjIHRyYW5zZm9ybV90b2tlbiAoJFRPS0VOLCBcJVBBSVJTLCAkS0VZKQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgUmV0dXJuIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHRvICRLRVkgaW4gJVBBSVJTLCBhcyB1c2VkIG9uICRUT0tFTgorIyAod2hpY2ggc2hvdWxkIGJlID9LRVk/IG9yIGFueSBvZiB0aGUgc3BlY2lhbCAlJSByZXF1ZXN0cykuLgorc3ViIHRyYW5zZm9ybV90b2tlbiAoJCQkKQoreworICBteSAoJHRva2VuLCAkdHJhbnNmb3JtLCAka2V5KSA9IEBfOworICBteSAkcmVzID0gJHRyYW5zZm9ybS0+eyRrZXl9OworICBwcm9nX2Vycm9yICJVbmtub3duIGtleSBgJGtleScgaW4gYCR0b2tlbiciIHVubGVzcyBkZWZpbmVkICRyZXM7CisgIHJldHVybiAkcmVzOworfQorCisKKyMgdHJhbnNmb3JtICgkVE9LRU4sIFwlUEFJUlMpCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBJZiAoJFRPS0VOLCAkVkFMKSBpcyBpbiAlUEFJUlM6CisjICAgLSByZXBsYWNlcyAlS0VZJSB3aXRoICRWQUwsCisjICAgLSBlbmFibGVzL2Rpc2FibGVzID9LRVk/IGFuZCA/IUtFWT8sCisjICAgLSByZXBsYWNlcyAlP0tFWSUgd2l0aCBUUlVFIG9yIEZBTFNFLgorIyAgIC0gcmVwbGFjZXMgJUtFWT9JRlRSVUUlLCAlS0VZOklGRkFMU0UlLCBhbmQgJUtFWT9JRlRSVUU6SUZGQUxTRSUgd2l0aAorIyAgICAgSUZUUlVFIC8gSUZGQUxTRSwgYXMgYXBwcm9wcmlhdGUuCitzdWIgdHJhbnNmb3JtICgkJCkKK3sKKyAgbXkgKCR0b2tlbiwgJHRyYW5zZm9ybSkgPSBAXzsKKworICAjICVLRVklLgorICAjIE11c3QgYmUgYmVmb3JlIHRoZSBmb2xsb3dpbmcgcGF0dGVybiB0byBleGNsdWRlIHRoZSBjYXNlCisgICMgd2hlbiB0aGVyZSBpcyBuZWl0aGVyIElGVFJVRSBub3IgSUZGQUxTRS4KKyAgaWYgKCR0b2tlbiA9fiAvXiUoW1x3XC1dKyklJC8pCisgICAgeworICAgICAgcmV0dXJuIHRyYW5zZm9ybV90b2tlbiAoJHRva2VuLCAkdHJhbnNmb3JtLCAkMSk7CisgICAgfQorICAjICVLRVk/SUZUUlVFJSwgJUtFWTpJRkZBTFNFJSwgYW5kICVLRVk/SUZUUlVFOklGRkFMU0UlLgorICBlbHNpZiAoJHRva2VuID1+IC9eJShbXHdcLV0rKSg/Olw/KFtePzolXSspKT8oPzo6KFtePzolXSspKT8lJC8pCisgICAgeworICAgICAgcmV0dXJuIHRyYW5zZm9ybV90b2tlbiAoJHRva2VuLCAkdHJhbnNmb3JtLCAkMSkgPyAoJDIgfHwgJycpIDogKCQzIHx8ICcnKTsKKyAgICB9CisgICMgJT9LRVklLgorICBlbHNpZiAoJHRva2VuID1+IC9eJVw/KFtcd1wtXSspJSQvKQorICAgIHsKKyAgICAgIHJldHVybiB0cmFuc2Zvcm1fdG9rZW4gKCR0b2tlbiwgJHRyYW5zZm9ybSwgJDEpID8gJ1RSVUUnIDogJ0ZBTFNFJzsKKyAgICB9CisgICMgP0tFWT8gYW5kID8hS0VZPy4KKyAgZWxzaWYgKCR0b2tlbiA9fiAvXiBcPyAoIT8pIChbXHdcLV0rKSBcPyAkL3gpCisgICAgeworICAgICAgbXkgJG5lZyA9ICgkMSBlcSAnIScpID8gMSA6IDA7CisgICAgICBteSAkdmFsID0gdHJhbnNmb3JtX3Rva2VuICgkdG9rZW4sICR0cmFuc2Zvcm0sICQyKTsKKyAgICAgIHJldHVybiAoISEkdmFsID09ICRuZWcpID8gJyMjJScgOiAnJzsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBwcm9nX2Vycm9yICJVbmtub3duIHJlcXVlc3QgZm9ybWF0OiAkdG9rZW4iOworICAgIH0KK30KKworCisjIEBQQVJBR1JBUEhTCisjICZtYWtlX3BhcmFncmFwaHMgKCRNQUtFRklMRSwgWyVUUkFOU0ZPUk1dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTG9hZCBhICRNQUtFRklMRSwgYXBwbHkgdGhlICVUUkFOU0ZPUk0sIGFuZCByZXR1cm4gaXQgYXMgYSBsaXN0IG9mCisjIHBhcmFncmFwaHMuCitzdWIgbWFrZV9wYXJhZ3JhcGhzICgkJSkKK3sKKyAgbXkgKCRmaWxlLCAldHJhbnNmb3JtKSA9IEBfOworCisgICMgQ29tcGxldGUgJXRyYW5zZm9ybSB3aXRoIGdsb2JhbCBvcHRpb25zLgorICAjIE5vdGUgdGhhdCAldHJhbnNmb3JtIGdvZXMgbGFzdCwgc28gaXQgb3ZlcnJpZGVzIGdsb2JhbCBvcHRpb25zLgorICAldHJhbnNmb3JtID0gKCdDWUdOVVMnICAgICAgPT4gISEgb3B0aW9uICdjeWdudXMnLAorCQkgJ01BSU5UQUlORVItTU9ERScKKwkJID0+ICRzZWVuX21haW50X21vZGUgPyBzdWJzdCAoJ01BSU5UQUlORVJfTU9ERV9UUlVFJykgOiAnJywKKworCQkgJ1haJyAgICAgICAgICA9PiAhISBvcHRpb24gJ2Rpc3QteHonLAorCQkgJ0xaTUEnICAgICAgICA9PiAhISBvcHRpb24gJ2Rpc3QtbHptYScsCisJCSAnQlpJUDInICAgICAgID0+ICEhIG9wdGlvbiAnZGlzdC1iemlwMicsCisJCSAnQ09NUFJFU1MnICAgID0+ICEhIG9wdGlvbiAnZGlzdC10YXJaJywKKwkJICdHWklQJyAgICAgICAgPT4gICEgb3B0aW9uICduby1kaXN0LWd6aXAnLAorCQkgJ1NIQVInICAgICAgICA9PiAhISBvcHRpb24gJ2Rpc3Qtc2hhcicsCisJCSAnWklQJyAgICAgICAgID0+ICEhIG9wdGlvbiAnZGlzdC16aXAnLAorCisJCSAnSU5TVEFMTC1JTkZPJyA9PiAgISBvcHRpb24gJ25vLWluc3RhbGxpbmZvJywKKwkJICdJTlNUQUxMLU1BTicgID0+ICAhIG9wdGlvbiAnbm8taW5zdGFsbG1hbicsCisJCSAnSEFWRS1NQU5TJyAgICA9PiAhISB2YXIgKCdNQU5TJyksCisJCSAnQ0stTkVXUycgICAgICA9PiAhISBvcHRpb24gJ2NoZWNrLW5ld3MnLAorCisJCSAnU1VCRElSUycgICAgICA9PiAhISB2YXIgKCdTVUJESVJTJyksCisJCSAnVE9QRElSX1AnICAgICA9PiAkcmVsYXRpdmVfZGlyIGVxICcuJywKKworCQkgJ0JVSUxEJyAgICA9PiAoJHNlZW5fY2Fub25pY2FsID49IEFDX0NBTk9OSUNBTF9CVUlMRCksCisJCSAnSE9TVCcgICAgID0+ICgkc2Vlbl9jYW5vbmljYWwgPj0gQUNfQ0FOT05JQ0FMX0hPU1QpLAorCQkgJ1RBUkdFVCcgICA9PiAoJHNlZW5fY2Fub25pY2FsID49IEFDX0NBTk9OSUNBTF9UQVJHRVQpLAorCisJCSAnTElCVE9PTCcgICAgICA9PiAhISB2YXIgKCdMSUJUT09MJyksCisJCSAnTk9OTElCVE9PTCcgICA9PiAxLAorCQkgJ0ZJUlNUJyAgICAgICAgPT4gISAkdHJhbnNmb3JtZWRfZmlsZXN7JGZpbGV9LAorCQkldHJhbnNmb3JtKTsKKworICAkdHJhbnNmb3JtZWRfZmlsZXN7JGZpbGV9ID0gMTsKKyAgJF8gPSAkYW1fZmlsZV9jYWNoZXskZmlsZX07CisKKyAgaWYgKCEgZGVmaW5lZCAkXykKKyAgICB7CisgICAgICB2ZXJiICJyZWFkaW5nICRmaWxlIjsKKyAgICAgICMgU3dhbGxvdyB0aGUgd2hvbGUgZmlsZS4KKyAgICAgIG15ICRmY19maWxlID0gbmV3IEF1dG9tYWtlOjpYRmlsZSAiPCAkZmlsZSI7CisgICAgICBteSAkc2F2ZWRfZG9sbGFyX3NsYXNoID0gJC87CisgICAgICB1bmRlZiAkLzsKKyAgICAgICRfID0gJGZjX2ZpbGUtPmdldGxpbmU7CisgICAgICAkLyA9ICRzYXZlZF9kb2xsYXJfc2xhc2g7CisgICAgICAkZmNfZmlsZS0+Y2xvc2U7CisKKyAgICAgICMgUmVtb3ZlICMjLWNvbW1lbnRzLgorICAgICAgIyBCZXNpZGVzIHdlIGRvbid0IG5lZWQgbW9yZSB0aGFuIHR3byBjb25zZWN1dGl2ZSBuZXctbGluZXMuCisgICAgICBzLyg/OiRJR05PUkVfUEFUVEVSTnwoPzw9XG5cbilcbispLy9nb207CisKKyAgICAgICRhbV9maWxlX2NhY2hleyRmaWxlfSA9ICRfOworICAgIH0KKworICAjIFN1YnN0aXR1dGUgQXV0b21ha2UgdGVtcGxhdGUgdG9rZW5zLgorICBzLyg/OiAlIFw/PyBbXHdcLV0rICUKKyAgICAgIHwgJSBbXHdcLV0rICg/Olw/W14/OiVdKyk/ICg/OjpbXj86JV0rKT8gJQorICAgICAgfCBcPyAhPyBbXHdcLV0rIFw/CisgICAgKS90cmFuc2Zvcm0oJCYsIFwldHJhbnNmb3JtKS9nZXg7CisgICMgdHJhbnNmb3JtKCkgbWF5IGhhdmUgYWRkZWQgc29tZSAjIyUtY29tbWVudHMgdG8gc3RyaXAuCisgICMgKHdlIHVzZSBgIyMlJyBpbnN0ZWFkIG9mIGAjIycgc28gd2UgY2FuIGRpc3Rpbmd1aXNoICMjJSMjJSMjJSBmcm9tCisgICMgIyMjIyMjIyBhbmQgZG8gbm90IHJlbW92ZSB0aGUgbGF0dGVyLikKKyAgcy9eWyBcdF0qKD86IyMlKSsuKlxuLy9nbTsKKworICAjIFNwbGl0IGF0IHVuZXNjYXBlZCBuZXcgbGluZXMuCisgIG15IEBsaW5lcyA9IHNwbGl0ICgvKD88IVxcKVxuLywgJF8pOworICBteSBAcmVzOworCisgIHdoaWxlIChkZWZpbmVkICgkXyA9IHNoaWZ0IEBsaW5lcykpCisgICAgeworICAgICAgbXkgJHBhcmFncmFwaCA9ICRfOworICAgICAgIyBJZiB3ZSBhcmUgYSBydWxlLCBlYXQgYXMgbG9uZyBhcyB3ZSBzdGFydCB3aXRoIGEgdGFiLgorICAgICAgaWYgKC8kUlVMRV9QQVRURVJOL3NtbykKKwl7CisJICB3aGlsZSAoZGVmaW5lZCAoJF8gPSBzaGlmdCBAbGluZXMpICYmICRfID1+IC9eXHQvKQorCSAgICB7CisJICAgICAgJHBhcmFncmFwaCAuPSAiXG4kXyI7CisJICAgIH0KKwkgIHVuc2hpZnQgKEBsaW5lcywgJF8pOworCX0KKworICAgICAgIyBJZiB3ZSBhcmUgYSBjb21tZW50cywgZWF0IGFzIG11Y2ggY29tbWVudHMgYXMgeW91IGNhbi4KKyAgICAgIGVsc2lmICgvJENPTU1FTlRfUEFUVEVSTi9zbW8pCisJeworCSAgd2hpbGUgKGRlZmluZWQgKCRfID0gc2hpZnQgQGxpbmVzKQorCQkgJiYgJF8gPX4gLyRDT01NRU5UX1BBVFRFUk4vc21vKQorCSAgICB7CisJICAgICAgJHBhcmFncmFwaCAuPSAiXG4kXyI7CisJICAgIH0KKwkgIHVuc2hpZnQgKEBsaW5lcywgJF8pOworCX0KKworICAgICAgcHVzaCBAcmVzLCAkcGFyYWdyYXBoOworICAgIH0KKworICByZXR1cm4gQHJlczsKK30KKworCisKKyMgKCRDT01NRU5ULCAkVkFSSUFCTEVTLCAkUlVMRVMpCisjICZmaWxlX2NvbnRlbnRzX2ludGVybmFsICgkSVNfQU0sICRGSUxFLCAkV0hFUkUsIFslVFJBTlNGT1JNXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZXR1cm4gY29udGVudHMgb2YgYSBmaWxlIGZyb20gJGxpYmRpci9hbSwgYXV0b21hdGljYWxseSBza2lwcGluZworIyBtYWNyb3Mgb3IgcnVsZXMgd2hpY2ggYXJlIGFscmVhZHkga25vd24uICRJU19BTSBpZmYgdGhlIGNhbGxlciBpcworIyByZWFkaW5nIGFuIEF1dG9tYWtlIGZpbGUgKGFzIG9wcG9zZWQgdG8gdGhlIHVzZXIncyBNYWtlZmlsZS5hbSkuCitzdWIgZmlsZV9jb250ZW50c19pbnRlcm5hbCAoJCQkJSkKK3sKKyAgICBteSAoJGlzX2FtLCAkZmlsZSwgJHdoZXJlLCAldHJhbnNmb3JtKSA9IEBfOworCisgICAgJHdoZXJlLT5zZXQgKCRmaWxlKTsKKworICAgIG15ICRyZXN1bHRfdmFycyA9ICcnOworICAgIG15ICRyZXN1bHRfcnVsZXMgPSAnJzsKKyAgICBteSAkY29tbWVudCA9ICcnOworICAgIG15ICRzcGFjaW5nID0gJyc7CisKKyAgICAjIFRoZSBmb2xsb3dpbmcgZmxhZ3MgYXJlIHVzZWQgdG8gdHJhY2sgcnVsZXMgc3Bhbm5pbmcgYWNyb3NzCisgICAgIyBtdWx0aXBsZSBwYXJhZ3JhcGhzLgorICAgIG15ICRpc19ydWxlID0gMDsJCSMgMSBpZiB3ZSBhcmUgcHJvY2Vzc2luZyBhIHJ1bGUuCisgICAgbXkgJGRpc2NhcmRfcnVsZSA9IDA7CSMgMSBpZiB0aGUgY3VycmVudCBydWxlIHNob3VsZCBub3QgYmUgb3V0cHV0LgorCisgICAgIyBXZSBzYXZlIHRoZSBjb25kaXRpb25hbCBzdGFjayBvbiBlbnRyeSwgYW5kIHRoZW4gY2hlY2sgdG8gbWFrZQorICAgICMgc3VyZSBpdCBpcyB0aGUgc2FtZSBvbiBleGl0LiAgVGhpcyBsZXRzIHVzIGNvbmRpdGlvbmFsbHkgaW5jbHVkZQorICAgICMgb3RoZXIgZmlsZXMuCisgICAgbXkgQHNhdmVkX2NvbmRfc3RhY2sgPSBAY29uZF9zdGFjazsKKyAgICBteSAkY29uZCA9IG5ldyBBdXRvbWFrZTo6Q29uZGl0aW9uIChAY29uZF9zdGFjayk7CisKKyAgICBmb3JlYWNoIChtYWtlX3BhcmFncmFwaHMgKCRmaWxlLCAldHJhbnNmb3JtKSkKKyAgICB7CisJIyBGSVhNRTogbm8gbGluZSBudW1iZXIgYXZhaWxhYmxlLgorCSR3aGVyZS0+c2V0ICgkZmlsZSk7CisKKwkjIFNhbml0eSBjaGVja3MuCisJZXJyb3IgJHdoZXJlLCAiYmxhbmsgbGluZSBmb2xsb3dpbmcgdHJhaWxpbmcgYmFja3NsYXNoOlxuJF8iCisJICBpZiAvXFwkLzsKKwllcnJvciAkd2hlcmUsICJjb21tZW50IGZvbGxvd2luZyB0cmFpbGluZyBiYWNrc2xhc2g6XG4kXyIKKwkgIGlmIC9cXCMvOworCisJaWYgKC9eJC8pCisJeworCSAgICAkaXNfcnVsZSA9IDA7CisJICAgICMgU3RpY2sgZW1wdHkgbGluZSBiZWZvcmUgdGhlIGluY29taW5nIG1hY3JvIG9yIHJ1bGUuCisJICAgICRzcGFjaW5nID0gIlxuIjsKKwl9CisJZWxzaWYgKC8kQ09NTUVOVF9QQVRURVJOL21zbykKKwl7CisJICAgICRpc19ydWxlID0gMDsKKwkgICAgIyBTdGljayBjb21tZW50cyBiZWZvcmUgdGhlIGluY29taW5nIG1hY3JvIG9yIHJ1bGUuCisJICAgICRjb21tZW50ID0gIiRfXG4iOworCX0KKworCSMgSGFuZGxlIGluY2x1c2lvbiBvZiBvdGhlciBmaWxlcy4KKwllbHNpZiAoLyRJTkNMVURFX1BBVFRFUk4vbykKKwl7CisJICAgIGlmICgkY29uZCAhPSBGQUxTRSkKKwkgICAgICB7CisJCW15ICRmaWxlID0gKCRpc19hbSA/ICIkbGliZGlyL2FtLyIgOiAnJykgLiAkMTsKKwkJJHdoZXJlLT5wdXNoX2NvbnRleHQgKCJgJGZpbGUnIGluY2x1ZGVkIGZyb20gaGVyZSIpOworCQkjIE4tYXJ5IGAuPScgZmFpbHMuCisJCW15ICgkY29tLCAkdmFycywgJHJ1bGVzKQorCQkgID0gZmlsZV9jb250ZW50c19pbnRlcm5hbCAoJGlzX2FtLCAkZmlsZSwgJHdoZXJlLCAldHJhbnNmb3JtKTsKKwkJJHdoZXJlLT5wb3BfY29udGV4dDsKKwkJJGNvbW1lbnQgLj0gJGNvbTsKKwkJJHJlc3VsdF92YXJzIC49ICR2YXJzOworCQkkcmVzdWx0X3J1bGVzIC49ICRydWxlczsKKwkgICAgICB9CisJfQorCisJIyBIYW5kbGluZyB0aGUgY29uZGl0aW9uYWxzLgorCWVsc2lmICgvJElGX1BBVFRFUk4vbykKKwkgIHsKKwkgICAgJGNvbmQgPSBjb25kX3N0YWNrX2lmICgkMSwgJDIsICRmaWxlKTsKKwkgIH0KKwllbHNpZiAoLyRFTFNFX1BBVFRFUk4vbykKKwkgIHsKKwkgICAgJGNvbmQgPSBjb25kX3N0YWNrX2Vsc2UgKCQxLCAkMiwgJGZpbGUpOworCSAgfQorCWVsc2lmICgvJEVORElGX1BBVFRFUk4vbykKKwkgIHsKKwkgICAgJGNvbmQgPSBjb25kX3N0YWNrX2VuZGlmICgkMSwgJDIsICRmaWxlKTsKKwkgIH0KKworCSMgSGFuZGxpbmcgcnVsZXMuCisJZWxzaWYgKC8kUlVMRV9QQVRURVJOL21zbykKKwl7CisJICAkaXNfcnVsZSA9IDE7CisJICAkZGlzY2FyZF9ydWxlID0gMDsKKwkgICMgU2VwYXJhdGUgcmVsYXRpb25zaGlwIGZyb20gb3B0aW9uYWwgYWN0aW9uczogdGhlIGZpcnN0CisJICAjIGBuZXctbGluZSB0YWIiIG5vdCBwcmVjZWRlZCBieSBiYWNrc2xhc2ggKGNvbnRpbnVhdGlvbgorCSAgIyBsaW5lKS4KKwkgIG15ICRwYXJhZ3JhcGggPSAkXzsKKwkgIC9eKC4qPykoPzooPzwhXFwpXG4oXHQuKikpPyQvczsKKwkgIG15ICgkcmVsYXRpb25zaGlwLCAkYWN0aW9ucykgPSAoJDEsICQyIHx8ICcnKTsKKworCSAgIyBTZXBhcmF0ZSB0YXJnZXRzIGZyb20gZGVwZW5kZW5jaWVzOiB0aGUgZmlyc3QgY29sb24uCisJICAkcmVsYXRpb25zaGlwID1+IC9eKFteOl0rXFMrKSAqOiAqKC4qKSQvc29tOworCSAgbXkgKCR0YXJnZXRzLCAkZGVwZW5kZW5jaWVzKSA9ICgkMSwgJDIpOworCSAgIyBSZW1vdmUgdGhlIGVzY2FwZWQgbmV3IGxpbmVzLgorCSAgIyBJIGRvbid0IGtub3cgd2h5LCBidXQgSSBoYXZlIHRvIHVzZSBhIHRtcCAkZmxhdF9kZXBzLgorCSAgbXkgJGZsYXRfZGVwcyA9ICZmbGF0dGVuICgkZGVwZW5kZW5jaWVzKTsKKwkgIG15IEBkZXBzID0gc3BsaXQgKCcgJywgJGZsYXRfZGVwcyk7CisKKwkgIGZvcmVhY2ggKHNwbGl0ICgnICcsICR0YXJnZXRzKSkKKwkgICAgeworCSAgICAgICMgRklYTUU6IDEuIFdlIGFyZSBub3Qgcm9idXN0IHRvIHBlb3BsZSBkZWZpbmluZyBzZXZlcmFsIHRhcmdldHMKKwkgICAgICAjIGF0IG9uY2UsIG9ubHkgc29tZSBvZiB0aGVtIGJlaW5nIGluICVkZXBlbmRlbmNpZXMuICBUaGUKKwkgICAgICAjIGFjdGlvbnMgZnJvbSB0aGUgdGFyZ2V0cyBpbiAlZGVwZW5kZW5jaWVzIGFyZSB1c3VhbGx5IGdlbmVyYXRlZAorCSAgICAgICMgZnJvbSB0aGUgY29udGVudCBvZiAlYWN0aW9ucywgYnV0IGlmIHNvbWUgdGFyZ2V0cyBpbiAkdGFyZ2V0cworCSAgICAgICMgYXJlIG5vdCBpbiAlZGVwZW5kZW5jaWVzIHRoZSBFTFNFIGJyYW5jaCB3aWxsIG91dHB1dAorCSAgICAgICMgYSBydWxlIGZvciBhbGwgJHRhcmdldHMgKGkuZS4gdGhlIHRhcmdldHMgd2hpY2ggYXJlIGJvdGgKKwkgICAgICAjIGluICVkZXBlbmRlbmNpZXMgYW5kICR0YXJnZXRzIHdpbGwgaGF2ZSB0d28gcnVsZXMpLgorCisJICAgICAgIyBGSVhNRTogMi4gVGhlIGxvZ2ljIGhlcmUgaXMgbm90IGFibGUgdG8gb3V0cHV0IGEKKwkgICAgICAjIG11bHRpLXBhcmFncmFwaCBydWxlIHNldmVyYWwgdGltZSAoZS5nLiBmb3IgZWFjaCBjb25kaXRpb24KKwkgICAgICAjIGl0IGlzIGRlZmluZWQgZm9yKSBiZWNhdXNlIGl0IG9ubHkga25vd3MgdGhlIGZpcnN0IHBhcmFncmFwaC4KKworCSAgICAgICMgRklYTUU6IDMuIFdlIGFyZSBub3Qgcm9idXN0IHRvIHBlb3BsZSBkZWZpbmluZyBhIHN1YnNldAorCSAgICAgICMgb2YgYSBwcmV2aW91c2x5IGRlZmluZWQgIm11bHRpcGxlLXRhcmdldCIgcnVsZS4gIEUuZy4KKwkgICAgICAjIGBmb286JyBhZnRlciBgZm9vIGJhcjonLgorCisJICAgICAgIyBPdXRwdXQgb25seSBpZiBub3QgaW4gRkFMU0UuCisJICAgICAgaWYgKGRlZmluZWQgJGRlcGVuZGVuY2llc3skX30gJiYgJGNvbmQgIT0gRkFMU0UpCisJCXsKKwkJICAmZGVwZW5kICgkXywgQGRlcHMpOworCQkgIHJlZ2lzdGVyX2FjdGlvbiAoJF8sICRhY3Rpb25zKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgICMgRnJlZS1sYW5jZSBkZXBlbmRlbmN5LiAgT3V0cHV0IHRoZSBydWxlIGZvciBhbGwgdGhlCisJCSAgIyB0YXJnZXRzIGluc3RlYWQgb2Ygb25lIGJ5IG9uZS4KKwkJICBteSBAdW5kZWZpbmVkX2NvbmRzID0KKwkJICAgIEF1dG9tYWtlOjpSdWxlOjpkZWZpbmUgKCR0YXJnZXRzLCAkZmlsZSwKKwkJCQkJICAgICRpc19hbSA/IFJVTEVfQVVUT01BS0UgOiBSVUxFX1VTRVIsCisJCQkJCSAgICAkY29uZCwgJHdoZXJlKTsKKwkJICBmb3IgbXkgJHVuZGVmaW5lZF9jb25kIChAdW5kZWZpbmVkX2NvbmRzKQorCQkgICAgeworCQkgICAgICBteSAkY29uZHBhcmFncmFwaCA9ICRwYXJhZ3JhcGg7CisJCSAgICAgICRjb25kcGFyYWdyYXBoID1+IHMvXi8kdW5kZWZpbmVkX2NvbmQtPnN1YnN0X3N0cmluZy9nbWU7CisJCSAgICAgICRyZXN1bHRfcnVsZXMgLj0gIiRzcGFjaW5nJGNvbW1lbnQkY29uZHBhcmFncmFwaFxuIjsKKwkJICAgIH0KKwkJICBpZiAoc2NhbGFyIEB1bmRlZmluZWRfY29uZHMgPT0gMCkKKwkJICAgIHsKKwkJICAgICAgIyBSZW1lbWJlciB0byBkaXNjYXJkIG5leHQgcGFyYWdyYXBocworCQkgICAgICAjIGlmIHRoZXkgYmVsb25nIHRvIHRoaXMgcnVsZS4KKwkJICAgICAgIyAoYnV0IHNlZSBhbHNvIEZJWE1FOiAjMiBhYm92ZS4pCisJCSAgICAgICRkaXNjYXJkX3J1bGUgPSAxOworCQkgICAgfQorCQkgICRjb21tZW50ID0gJHNwYWNpbmcgPSAnJzsKKwkJICBsYXN0OworCQl9CisJICAgIH0KKwl9CisKKwllbHNpZiAoLyRBU1NJR05NRU5UX1BBVFRFUk4vbXNvKQorCXsKKwkgICAgbXkgKCR2YXIsICR0eXBlLCAkdmFsKSA9ICgkMSwgJDIsICQzKTsKKwkgICAgZXJyb3IgJHdoZXJlLCAidmFyaWFibGUgYCR2YXInIHdpdGggdHJhaWxpbmcgYmFja3NsYXNoIgorCSAgICAgIGlmIC9cXCQvOworCisJICAgICRpc19ydWxlID0gMDsKKworCSAgICBBdXRvbWFrZTo6VmFyaWFibGU6OmRlZmluZSAoJHZhciwKKwkJCQkJJGlzX2FtID8gVkFSX0FVVE9NQUtFIDogVkFSX01BS0VGSUxFLAorCQkJCQkkdHlwZSwgJGNvbmQsICR2YWwsICRjb21tZW50LCAkd2hlcmUsCisJCQkJCVZBUl9BU0lTKQorCSAgICAgIGlmICRjb25kICE9IEZBTFNFOworCisJICAgICRjb21tZW50ID0gJHNwYWNpbmcgPSAnJzsKKwl9CisJZWxzZQorCXsKKwkgICAgIyBUaGlzIGlzbid0IGFuIGVycm9yOyBpdCBpcyBwcm9iYWJseSBzb21lIHRva2VucyB3aGljaAorCSAgICAjIGNvbmZpZ3VyZSBpcyBzdXBwb3NlZCB0byByZXBsYWNlLCBzdWNoIGFzIGBAU0VULU1BS0VAJywKKwkgICAgIyBvciBzb21lIHBhcnQgb2YgYSBydWxlIGN1dCBieSBhbiBpZi9lbmRpZi4KKwkgICAgaWYgKCEgJGNvbmQtPmZhbHNlICYmICEgKCRpc19ydWxlICYmICRkaXNjYXJkX3J1bGUpKQorCSAgICAgIHsKKwkJcy9eLyRjb25kLT5zdWJzdF9zdHJpbmcvZ21lOworCQkkcmVzdWx0X3J1bGVzIC49ICIkc3BhY2luZyRjb21tZW50JF9cbiI7CisJICAgICAgfQorCSAgICAkY29tbWVudCA9ICRzcGFjaW5nID0gJyc7CisJfQorICAgIH0KKworICAgIGVycm9yICgkd2hlcmUsIEBjb25kX3N0YWNrID8KKwkgICAidW50ZXJtaW5hdGVkIGNvbmRpdGlvbmFsczogQGNvbmRfc3RhY2siIDoKKwkgICAidG9vIG1hbnkgY29uZGl0aW9uYWxzIGNsb3NlZCBpbiBpbmNsdWRlIGZpbGUiKQorICAgICAgaWYgIkBzYXZlZF9jb25kX3N0YWNrIiBuZSAiQGNvbmRfc3RhY2siOworCisgICAgcmV0dXJuICgkY29tbWVudCwgJHJlc3VsdF92YXJzLCAkcmVzdWx0X3J1bGVzKTsKK30KKworCisjICRDT05URU5UUworIyAmZmlsZV9jb250ZW50cyAoJEJBU0VOQU1FLCAkV0hFUkUsIFslVFJBTlNGT1JNXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJldHVybiBjb250ZW50cyBvZiBhIGZpbGUgZnJvbSAkbGliZGlyL2FtLCBhdXRvbWF0aWNhbGx5IHNraXBwaW5nCisjIG1hY3JvcyBvciBydWxlcyB3aGljaCBhcmUgYWxyZWFkeSBrbm93bi4KK3N1YiBmaWxlX2NvbnRlbnRzICgkJCUpCit7CisgICAgbXkgKCRiYXNlbmFtZSwgJHdoZXJlLCAldHJhbnNmb3JtKSA9IEBfOworICAgIG15ICgkY29tbWVudHMsICR2YXJpYWJsZXMsICRydWxlcykgPQorICAgICAgZmlsZV9jb250ZW50c19pbnRlcm5hbCAoMSwgIiRsaWJkaXIvYW0vJGJhc2VuYW1lLmFtIiwgJHdoZXJlLAorCQkJICAgICAgJXRyYW5zZm9ybSk7CisgICAgcmV0dXJuICIkY29tbWVudHMkdmFyaWFibGVzJHJ1bGVzIjsKK30KKworCisjIEBQUkVGSVgKKyMgJmFtX3ByaW1hcnlfcHJlZml4ZXMgKCRQUklNQVJZLCAkQ0FOX0RJU1QsIEBQUkVGSVhFUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZCBhbGwgdmFyaWFibGUgcHJlZml4ZXMgdGhhdCBhcmUgdXNlZCBmb3IgaW5zdGFsbCBkaXJlY3Rvcmllcy4gIEEKKyMgcHJlZml4IGB6YXInIHF1YWxpZmllcyBpZmY6CisjCisjICogYHphcmRpcicgaXMgYSB2YXJpYWJsZS4KKyMgKiBgemFyX1BSSU1BUlknIGlzIGEgdmFyaWFibGUuCisjCisjIEFzIGEgc2lkZSBlZmZlY3QsIGl0IGxvb2tzIGZvciBtaXNzcGVsbGluZ3MuICBJdCBpcyBhbiBlcnJvciB0byBoYXZlCisjIGEgdmFyaWFibGUgZW5kaW5nIGluIGEgInJlc2VydmVkIiBzdWZmaXggd2hvc2UgcHJlZml4IGlzIHVua25vd24sIGUuZy4KKyMgImJuaV9QUk9HUkFNUyIuICBIb3dldmVyLCB1bnVzdWFsIHByZWZpeGVzIGFyZSBhbGxvd2VkIGlmIGEgdmFyaWFibGUKKyMgb2YgdGhlIHNhbWUgbmFtZSAod2l0aCAiZGlyIiBhcHBlbmRlZCkgZXhpc3RzLiAgRm9yIGluc3RhbmNlLCBpZiB0aGUKKyMgdmFyaWFibGUgInphcmRpciIgaXMgZGVmaW5lZCwgdGhlbiAiemFyX1BST0dSQU1TIiBiZWNvbWVzIHZhbGlkLgorIyBUaGlzIGlzIHRvIHByb3ZpZGUgYSBsaXR0bGUgZXh0cmEgZmxleGliaWxpdHkgaW4gdGhvc2UgY2FzZXMgd2hpY2gKKyMgbmVlZCBpdC4KK3N1YiBhbV9wcmltYXJ5X3ByZWZpeGVzICgkJEApCit7CisgIG15ICgkcHJpbWFyeSwgJGNhbl9kaXN0LCBAcHJlZml4ZXMpID0gQF87CisKKyAgbG9jYWwgJF87CisgIG15ICV2YWxpZCA9IG1hcCB7ICRfID0+IDAgfSBAcHJlZml4ZXM7CisgICR2YWxpZHsnRVhUUkEnfSA9IDA7CisgIGZvcmVhY2ggbXkgJHZhciAodmFyaWFibGVzICRwcmltYXJ5KQorICAgIHsKKyAgICAgICMgQXV0b21ha2UgaXMgYWxsb3dlZCB0byBkZWZpbmUgdmFyaWFibGVzIHRoYXQgbG9vayBsaWtlIHByaW1hcmllcworICAgICAgIyBidXQgd2hpY2ggYXJlbid0LiAgRS5nLiBJTlNUQUxMX3NoX0RBVEEuCisgICAgICAjIEF1dG9jb25mIGNhbiBhbHNvIGRlZmluZSB2YXJpYWJsZXMgbGlrZSBJTlNUQUxMX0RBVEEsIHNvCisgICAgICAjIGlnbm9yZSBhbGwgY29uZmlndXJlIHZhcmlhYmxlcyAoYXQgbGVhc3QgdGhvc2Ugd2hpY2ggYXJlIG5vdAorICAgICAgIyByZWRlZmluZWQgaW4gTWFrZWZpbGUuYW0pLgorICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIHZhcmlhYmxlcyBhcmUgbm90CisgICAgICAjIGNvbmRpdGlvbmFsbHkgZGVmaW5lZCAob3IgZWxzZSBhZGp1c3QgdGhlIGNvbmRpdGlvbiBiZWxvdykuCisgICAgICBteSAkZGVmID0gJHZhci0+ZGVmIChUUlVFKTsKKyAgICAgIG5leHQgaWYgJGRlZiAmJiAkZGVmLT5vd25lciAhPSBWQVJfTUFLRUZJTEU7CisKKyAgICAgIG15ICR2YXJuYW1lID0gJHZhci0+bmFtZTsKKworICAgICAgaWYgKCR2YXJuYW1lID1+IC9eKG5vYmFzZV8pPyhkaXN0X3xub2Rpc3RfKT8oLiopX1tbOmFsbnVtOl1dKyQvKQorCXsKKwkgIG15ICgkYmFzZSwgJGRpc3QsICRYKSA9ICgkMSB8fCAnJywgJDIgfHwgJycsICQzIHx8ICcnKTsKKwkgIGlmICgkZGlzdCBuZSAnJyAmJiAhICRjYW5fZGlzdCkKKwkgICAgeworCSAgICAgIGVycl92YXIgKCR2YXIsCisJCSAgICAgICAiaW52YWxpZCB2YXJpYWJsZSBgJHZhcm5hbWUnOiBgZGlzdCcgaXMgZm9yYmlkZGVuIik7CisJICAgIH0KKwkgICMgU3RhbmRhcmQgZGlyZWN0b3JpZXMgbXVzdCBiZSBleHBsaWNpdGx5IGFsbG93ZWQuCisJICBlbHNpZiAoISBkZWZpbmVkICR2YWxpZHskWH0gJiYgZXhpc3RzICRzdGFuZGFyZF9wcmVmaXh7JFh9KQorCSAgICB7CisJICAgICAgZXJyX3ZhciAoJHZhciwKKwkJICAgICAgICJgJHtYfWRpcicgaXMgbm90IGEgbGVnaXRpbWF0ZSBkaXJlY3RvcnkgIiAuCisJCSAgICAgICAiZm9yIGAkcHJpbWFyeSciKTsKKwkgICAgfQorCSAgIyBBIG5vdCBleHBsaWNpdGx5IHZhbGlkIGRpcmVjdG9yeSBpcyBhbGxvd2VkIGlmIFhkaXIgaXMgZGVmaW5lZC4KKwkgIGVsc2lmICghIGRlZmluZWQgJHZhbGlkeyRYfSAmJgorCQkgJHZhci0+cmVxdWlyZXNfdmFyaWFibGVzICgiYCR2YXJuYW1lJyBpcyB1c2VkIiwgIiR7WH1kaXIiKSkKKwkgICAgeworCSAgICAgICMgTm90aGluZyB0byBkby4gIEFueSBlcnJvciBtZXNzYWdlIGhhcyBiZWVuIG91dHB1dAorCSAgICAgICMgYnkgJHZhci0+cmVxdWlyZXNfdmFyaWFibGVzLgorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAjIEVuc3VyZSBhbGwgZXh0ZW5kZWQgcHJlZml4ZXMgYXJlIGFjdHVhbGx5IHVzZWQuCisJICAgICAgJHZhbGlkeyIkYmFzZSRkaXN0JFgifSA9IDE7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgcHJvZ19lcnJvciAidW5leHBlY3RlZCB2YXJpYWJsZSBuYW1lOiAkdmFybmFtZSI7CisJfQorICAgIH0KKworICAjIFJldHVybiBvbmx5IHRob3NlIHdoaWNoIGFyZSBhY3R1YWxseSBkZWZpbmVkLgorICByZXR1cm4gc29ydCBncmVwIHsgdmFyICgkXyAuICdfJyAuICRwcmltYXJ5KSB9IGtleXMgJXZhbGlkOworfQorCisKKyMgSGFuZGxlIGB3aGVyZV9IT1cnIHZhcmlhYmxlIG1hZ2ljLiAgRG9lcyBhbGwgbG9va3VwcywgZ2VuZXJhdGVzCisjIGluc3RhbGwgY29kZSwgYW5kIHBvc3NpYmx5IGdlbmVyYXRlcyBjb2RlIHRvIGRlZmluZSB0aGUgcHJpbWFyeQorIyB2YXJpYWJsZS4gIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgLmFtIGZpbGUgdG8gbXVuZ2UsCisjIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIHByaW1hcnkgdmFyaWFibGUgKGUuZy4gSEVBREVSUyksIGFuZCBhbGwKKyMgc3Vic2VxdWVudCBhcmd1bWVudHMgYXJlIHBvc3NpYmxlIGluc3RhbGxhdGlvbiBsb2NhdGlvbnMuCisjCisjIFJldHVybnMgbGlzdCBvZiBbJGxvY2F0aW9uLCAkdmFsdWVdIHBhaXJzLCB3aGVyZQorIyAkdmFsdWUncyBhcmUgdGhlIHZhbHVlcyBpbiBhbGwgd2hlcmVfSE9XIHZhcmlhYmxlLCBhbmQgJGxvY2F0aW9uCisjIHRoZXJlIGFzc29jaWF0ZWQgbG9jYXRpb24gKHRoZSBwbGFjZSBoZXJlIHRoZWlyIHBhcmVudCB2YXJpYWJsZXMgd2VyZQorIyBkZWZpbmVkKS4KKyMKKyMgRklYTUU6IHRoaXMgc2hvdWxkIGJlIHJld3JpdHRlbiB0byBiZSBjbGVhbmVyLiAgSXQgc2hvdWxkIGJlIGJyb2tlbgorIyB1cCBpbnRvIG11bHRpcGxlIGZ1bmN0aW9ucy4KKyMKKyMgVXNhZ2UgaXM6IGFtX2luc3RhbGxfdmFyIChPUFRJT04uLi4sIGZpbGUsIEhPVywgd2hlcmUuLi4pCitzdWIgYW1faW5zdGFsbF92YXIKK3sKKyAgbXkgKEBhcmdzKSA9IEBfOworCisgIG15ICRkb19yZXF1aXJlID0gMTsKKyAgbXkgJGNhbl9kaXN0ID0gMDsKKyAgbXkgJGRlZmF1bHRfZGlzdCA9IDA7CisgIHdoaWxlIChAYXJncykKKyAgICB7CisgICAgICBpZiAoJGFyZ3NbMF0gZXEgJy1ub2V4dHJhJykKKwl7CisJICAkZG9fcmVxdWlyZSA9IDA7CisJfQorICAgICAgZWxzaWYgKCRhcmdzWzBdIGVxICctY2FuZGlzdCcpCisJeworCSAgJGNhbl9kaXN0ID0gMTsKKwl9CisgICAgICBlbHNpZiAoJGFyZ3NbMF0gZXEgJy1kZWZhdWx0ZGlzdCcpCisJeworCSAgJGRlZmF1bHRfZGlzdCA9IDE7CisJICAkY2FuX2Rpc3QgPSAxOworCX0KKyAgICAgIGVsc2lmICgkYXJnc1swXSAhfiAvXi0vKQorCXsKKwkgIGxhc3Q7CisJfQorICAgICAgc2hpZnQgKEBhcmdzKTsKKyAgICB9CisKKyAgbXkgKCRmaWxlLCAkcHJpbWFyeSwgQHByZWZpeCkgPSBAYXJnczsKKworICAjIE5vdyB0aGF0IGNvbmZpZ3VyZSBzdWJzdGl0dXRpb25zIGFyZSBhbGxvd2VkIGluIHdoZXJlX0hPVworICAjIHZhcmlhYmxlcywgaXQgaXMgYW4gZXJyb3IgdG8gYWN0dWFsbHkgZGVmaW5lIHRoZSBwcmltYXJ5LiAgV2UKKyAgIyBhbGxvdyBgSkFWQScsIGFzIGl0IGlzIGN1c3RvbWFyaWx5IHVzZWQgdG8gbWVhbiB0aGUgSmF2YQorICAjIGludGVycHJldGVyLiAgVGhpcyBpcyBidXQgb25lIG9mIHNldmVyYWwgSmF2YSBoYWNrcy4gIFNpbWlsYXJseSwKKyAgIyBgUFlUSE9OJyBpcyBjdXN0b21hcmlseSB1c2VkIHRvIG1lYW4gdGhlIFB5dGhvbiBpbnRlcnByZXRlci4KKyAgcmVqZWN0X3ZhciAkcHJpbWFyeSwgImAkcHJpbWFyeScgaXMgYW4gYW5hY2hyb25pc20iCisgICAgdW5sZXNzICRwcmltYXJ5IGVxICdKQVZBJyB8fCAkcHJpbWFyeSBlcSAnUFlUSE9OJzsKKworICAjIEdldCB0aGUgcHJlZml4ZXMgd2hpY2ggYXJlIHZhbGlkIGFuZCBhY3R1YWxseSB1c2VkLgorICBAcHJlZml4ID0gYW1fcHJpbWFyeV9wcmVmaXhlcyAoJHByaW1hcnksICRjYW5fZGlzdCwgQHByZWZpeCk7CisKKyAgIyBJZiBhIHByaW1hcnkgaW5jbHVkZXMgYSBjb25maWd1cmUgc3Vic3RpdHV0aW9uLCB0aGVuIHRoZSBFWFRSQV8KKyAgIyBmb3JtIGlzIHJlcXVpcmVkLiAgT3RoZXJ3aXNlIHdlIGNhbid0IHByb3Blcmx5IGRvIG91ciBqb2IuCisgIG15ICRyZXF1aXJlX2V4dHJhOworCisgIG15IEB1c2VkID0gKCk7CisgIG15IEByZXN1bHQgPSAoKTsKKworICBmb3JlYWNoIG15ICRYIChAcHJlZml4KQorICAgIHsKKyAgICAgIG15ICRub2Rpcl9uYW1lID0gJFg7CisgICAgICBteSAkb25lX25hbWUgPSAkWCAuICdfJyAuICRwcmltYXJ5OworICAgICAgbXkgJG9uZV92YXIgPSB2YXIgJG9uZV9uYW1lOworCisgICAgICBteSAkc3RyaXBfc3ViZGlyID0gMTsKKyAgICAgICMgSWYgc3ViZGlyIHByZWZpeCBzaG91bGQgYmUgcHJlc2VydmVkLCBkbyBzby4KKyAgICAgIGlmICgkbm9kaXJfbmFtZSA9fiAvXm5vYmFzZV8vKQorCXsKKwkgICRzdHJpcF9zdWJkaXIgPSAwOworCSAgJG5vZGlyX25hbWUgPX4gcy9ebm9iYXNlXy8vOworCX0KKworICAgICAgIyBJZiBmaWxlcyBzaG91bGQgYmUgZGlzdHJpYnV0ZWQsIGRvIHNvLgorICAgICAgbXkgJGRpc3RfcCA9IDA7CisgICAgICBpZiAoJGNhbl9kaXN0KQorCXsKKwkgICRkaXN0X3AgPSAoKCRkZWZhdWx0X2Rpc3QgJiYgJG5vZGlyX25hbWUgIX4gL15ub2Rpc3RfLykKKwkJICAgICB8fCAoISAkZGVmYXVsdF9kaXN0ICYmICRub2Rpcl9uYW1lID1+IC9eZGlzdF8vKSk7CisJICAkbm9kaXJfbmFtZSA9fiBzL14oZGlzdHxub2Rpc3QpXy8vOworCX0KKworCisgICAgICAjIFVzZSB0aGUgbG9jYXRpb24gb2YgdGhlIGN1cnJlbnRseSBwcm9jZXNzZWQgdmFyaWFibGUuCisgICAgICAjIFdlIGFyZSBub3QgcHJvY2Vzc2luZyBhIHBhcnRpY3VsYXIgY29uZGl0aW9uLCBzbyBwaWNrIHRoZSBmaXJzdAorICAgICAgIyBhdmFpbGFibGUuCisgICAgICBteSAkdG1wY29uZCA9ICRvbmVfdmFyLT5jb25kaXRpb25zLT5vbmVfY29uZDsKKyAgICAgIG15ICR3aGVyZSA9ICRvbmVfdmFyLT5yZGVmICgkdG1wY29uZCktPmxvY2F0aW9uLT5jbG9uZTsKKworICAgICAgIyBBcHBlbmQgYWN0dWFsIGNvbnRlbnRzIG9mIHdoZXJlX1BSSU1BUlkgdmFyaWFibGUgdG8KKyAgICAgICMgQHJlc3VsdCwgc2tpcHBpbmcgQHN1YnN0aXR1dGlvbnNALgorICAgICAgZm9yZWFjaCBteSAkbG9jdmFscyAoJG9uZV92YXItPnZhbHVlX2FzX2xpc3RfcmVjdXJzaXZlIChsb2NhdGlvbiA9PiAxKSkKKwl7CisJICBteSAoJGxvYywgJHZhbHVlKSA9IEAkbG9jdmFsczsKKwkgICMgU2tpcCBjb25maWd1cmUgc3Vic3RpdHV0aW9ucy4KKwkgIGlmICgkdmFsdWUgPX4gL15cQC4qXEAkLykKKwkgICAgeworCSAgICAgIGlmICgkbm9kaXJfbmFtZSBlcSAnRVhUUkEnKQorCQl7CisJCSAgZXJyb3IgKCR3aGVyZSwKKwkJCSAiYCRvbmVfbmFtZScgY29udGFpbnMgY29uZmlndXJlIHN1YnN0aXR1dGlvbiwgIgorCQkJIC4gImJ1dCBzaG91bGRuJ3QiKTsKKwkJfQorCSAgICAgICMgQ2hlY2sgaGVyZSB0byBtYWtlIHN1cmUgdmFyaWFibGVzIGRlZmluZWQgaW4KKwkgICAgICAjIGNvbmZpZ3VyZS5hYyBkbyBub3QgaW1wbHkgdGhhdCBFWFRSQV9QUklNQVJZCisJICAgICAgIyBtdXN0IGJlIGRlZmluZWQuCisJICAgICAgZWxzaWYgKCEgZGVmaW5lZCAkY29uZmlndXJlX3ZhcnN7JG9uZV9uYW1lfSkKKwkJeworCQkgICRyZXF1aXJlX2V4dHJhID0gJG9uZV9uYW1lCisJCSAgICBpZiAkZG9fcmVxdWlyZTsKKwkJfQorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAjIFN0cmlwIGFueSAkKEVYRUVYVCkgc3VmZml4IHRoZSB1c2VyIG1pZ2h0IGhhdmUgYWRkZWQsIG9yIHRoaXMKKwkgICAgICAjIHdpbGwgY29uZnVzZSAmaGFuZGxlX3NvdXJjZV90cmFuc2Zvcm0gYW5kICZjaGVja19jYW5vbmljYWxfc3BlbGxpbmcuCisJICAgICAgIyBXZSdsbCBhZGQgJChFWEVFWFQpIGJhY2sgbGF0ZXIgYW55d2F5LgorCSAgICAgICMgRG8gaXQgaGVyZSByYXRoZXIgdGhhbiBpbiBoYW5kbGVfcHJvZ3JhbXMgc28gdGhlIHVuaXF1aWZ5aW5nIGF0IHRoZQorCSAgICAgICMgZW5kIG9mIHRoaXMgZnVuY3Rpb24gd29ya3MuCisJICAgICAgJHskbG9jdmFsc31bMV0gPX4gcy9cJFwoRVhFRVhUXCkkLy8KKwkgICAgICAgIGlmICRwcmltYXJ5IGVxICdQUk9HUkFNUyc7CisKKwkgICAgICBwdXNoIChAcmVzdWx0LCAkbG9jdmFscyk7CisJICAgIH0KKwl9CisgICAgICAjIEEgYmxhdGFudCBoYWNrOiB3ZSByZXdyaXRlIGVhY2ggX1BST0dSQU1TIHByaW1hcnkgdG8gaW5jbHVkZQorICAgICAgIyBFWEVFWFQuCisgICAgICBhcHBlbmRfZXhlZXh0IHsgMSB9ICRvbmVfbmFtZQorCWlmICRwcmltYXJ5IGVxICdQUk9HUkFNUyc7CisgICAgICAjICJFWFRSQSIgc2hvdWxkbid0IGJlIHVzZWQgd2hlbiBnZW5lcmF0aW5nIGNsZWFuIHRhcmdldHMsCisgICAgICAjIGFsbCwgb3IgaW5zdGFsbCB0YXJnZXRzLiAgV2UgdXNlZCB0byB3YXJuIGlmIEVYVFJBX0ZPTyB3YXMKKyAgICAgICMgZGVmaW5lZCB1c2VsZXNzbHksIGJ1dCB0aGlzIHdhcyBhbm5veWluZy4KKyAgICAgIG5leHQKKwlpZiAkbm9kaXJfbmFtZSBlcSAnRVhUUkEnOworCisgICAgICBpZiAoJG5vZGlyX25hbWUgZXEgJ2NoZWNrJykKKwl7CisJICBwdXNoIChAY2hlY2ssICckKCcgLiAkb25lX25hbWUgLiAnKScpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBwdXNoIChAdXNlZCwgJyQoJyAuICRvbmVfbmFtZSAuICcpJyk7CisJfQorCisgICAgICAjIElzIHRoaXMgdG8gYmUgaW5zdGFsbGVkPworICAgICAgbXkgJGluc3RhbGxfcCA9ICRub2Rpcl9uYW1lIG5lICdub2luc3QnICYmICRub2Rpcl9uYW1lIG5lICdjaGVjayc7CisKKyAgICAgICMgSWYgc28sIHdpdGggaW5zdGFsbC1leGVjPyAob3IgaW5zdGFsbC1kYXRhPykuCisgICAgICBteSAkZXhlY19wID0gKCRub2Rpcl9uYW1lID1+IC8kRVhFQ19ESVJfUEFUVEVSTi9vKTsKKworICAgICAgbXkgJGNoZWNrX29wdGlvbnNfcCA9ICRpbnN0YWxsX3AgJiYgISEgb3B0aW9uICdzdGQtb3B0aW9ucyc7CisKKyAgICAgICMgVXNlIHRoZSBsb2NhdGlvbiBvZiB0aGUgY3VycmVudGx5IHByb2Nlc3NlZCB2YXJpYWJsZSBhcyBjb250ZXh0LgorICAgICAgJHdoZXJlLT5wdXNoX2NvbnRleHQgKCJ3aGlsZSBwcm9jZXNzaW5nIGAkb25lX25hbWUnIik7CisKKyAgICAgICMgVGhlIHZhcmlhYmxlIGNvbnRhaW5pbmcgYWxsIGZpbGVzIHRvIGRpc3RyaWJ1dGUuCisgICAgICBteSAkZGlzdHZhciA9ICJcJCgkb25lX25hbWUpIjsKKyAgICAgICRkaXN0dmFyID0gc2hhZG93X3VuY29uZGl0aW9uYWxseSAoJG9uZV9uYW1lLCAkd2hlcmUpCisJaWYgKCRkaXN0X3AgJiYgJG9uZV92YXItPmhhc19jb25kaXRpb25hbF9jb250ZW50cyk7CisKKyAgICAgICMgU2luZ3VsYXIgZm9ybSBvZiAkUFJJTUFSWS4KKyAgICAgIChteSAkb25lX3ByaW1hcnkgPSAkcHJpbWFyeSkgPX4gcy9TJC8vOworICAgICAgJG91dHB1dF9ydWxlcyAuPSAmZmlsZV9jb250ZW50cyAoJGZpbGUsICR3aGVyZSwKKwkJCQkgICAgICAgUFJJTUFSWSAgICAgPT4gJHByaW1hcnksCisJCQkJICAgICAgIE9ORV9QUklNQVJZID0+ICRvbmVfcHJpbWFyeSwKKwkJCQkgICAgICAgRElSICAgICAgICAgPT4gJFgsCisJCQkJICAgICAgIE5ESVIgICAgICAgID0+ICRub2Rpcl9uYW1lLAorCQkJCSAgICAgICBCQVNFICAgICAgICA9PiAkc3RyaXBfc3ViZGlyLAorCisJCQkJICAgICAgIEVYRUMgICAgICA9PiAkZXhlY19wLAorCQkJCSAgICAgICBJTlNUQUxMICAgPT4gJGluc3RhbGxfcCwKKwkJCQkgICAgICAgRElTVCAgICAgID0+ICRkaXN0X3AsCisJCQkJICAgICAgIERJU1RWQVIgICA9PiAkZGlzdHZhciwKKwkJCQkgICAgICAgJ0NLLU9QVFMnID0+ICRjaGVja19vcHRpb25zX3ApOworICAgIH0KKworICAjIFRoZSBKQVZBIHZhcmlhYmxlIGlzIHVzZWQgYXMgdGhlIG5hbWUgb2YgdGhlIEphdmEgaW50ZXJwcmV0ZXIuCisgICMgVGhlIFBZVEhPTiB2YXJpYWJsZSBpcyB1c2VkIGFzIHRoZSBuYW1lIG9mIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIuCisgIGlmIChAdXNlZCAmJiAkcHJpbWFyeSBuZSAnSkFWQScgJiYgJHByaW1hcnkgbmUgJ1BZVEhPTicpCisgICAgeworICAgICAgIyBEZWZpbmUgaXQuCisgICAgICBkZWZpbmVfcHJldHR5X3ZhcmlhYmxlICgkcHJpbWFyeSwgVFJVRSwgSU5URVJOQUwsIEB1c2VkKTsKKyAgICAgICRvdXRwdXRfdmFycyAuPSAiXG4iOworICAgIH0KKworICBlcnJfdmFyICgkcmVxdWlyZV9leHRyYSwKKwkgICAiYCRyZXF1aXJlX2V4dHJhJyBjb250YWlucyBjb25maWd1cmUgc3Vic3RpdHV0aW9uLFxuIgorCSAgIC4gImJ1dCBgRVhUUkFfJHByaW1hcnknIG5vdCBkZWZpbmVkIikKKyAgICBpZiAoJHJlcXVpcmVfZXh0cmEgJiYgISB2YXIgKCdFWFRSQV8nIC4gJHByaW1hcnkpKTsKKworICAjIFB1c2ggaGVyZSBiZWNhdXNlIFBSSU1BUlkgbWlnaHQgYmUgY29uZmlndXJlIHRpbWUgZGV0ZXJtaW5lZC4KKyAgcHVzaCAoQGFsbCwgJyQoJyAuICRwcmltYXJ5IC4gJyknKQorICAgIGlmIEB1c2VkICYmICRwcmltYXJ5IG5lICdKQVZBJyAmJiAkcHJpbWFyeSBuZSAnUFlUSE9OJzsKKworICAjIE1ha2UgdGhlIHJlc3VsdCB1bmlxdWUuICBUaGlzIGxldHMgdGhlIHVzZXIgdXNlIGNvbmRpdGlvbmFscyBpbgorICAjIGEgbmF0dXJhbCB3YXksIGJ1dCBzdGlsbCBsZXRzIHVzIHByb2dyYW0gbGF6aWx5IC0tIHdlIGRvbid0IGhhdmUKKyAgIyB0byB3b3JyeSBhYm91dCBoYW5kbGluZyBhIHBhcnRpY3VsYXIgb2JqZWN0IG1vcmUgdGhhbiBvbmNlLgorICAjIFdlIHdpbGwga2VlcCBvbmx5IG9uZSBsb2NhdGlvbiBwZXIgb2JqZWN0LgorICBteSAlcmVzdWx0ID0gKCk7CisgIGZvciBteSAkcGFpciAoQHJlc3VsdCkKKyAgICB7CisgICAgICBteSAoJGxvYywgJHZhbCkgPSBAJHBhaXI7CisgICAgICAkcmVzdWx0eyR2YWx9ID0gJGxvYzsKKyAgICB9CisgIG15IEBsID0gc29ydCBrZXlzICVyZXN1bHQ7CisgIHJldHVybiBtYXAgeyBbJHJlc3VsdHskX30tPmNsb25lLCAkX10gfSBAbDsKK30KKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgRWFjaCBrZXkgaW4gdGhpcyBoYXNoIGlzIHRoZSBuYW1lIG9mIGEgZGlyZWN0b3J5IGhvbGRpbmcgYQorIyBNYWtlZmlsZS5pbi4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgbG9jYWwgdG8gYGlzX21ha2VfZGlyJy4KK215ICVtYWtlX2RpcnMgPSAoKTsKK215ICRtYWtlX2RpcnNfc2V0ID0gMDsKKworc3ViIGlzX21ha2VfZGlyCit7CisgICAgbXkgKCRkaXIpID0gQF87CisgICAgaWYgKCEgJG1ha2VfZGlyc19zZXQpCisgICAgeworCWZvcmVhY2ggbXkgJGl0ZXIgKEBjb25maWd1cmVfaW5wdXRfZmlsZXMpCisJeworCSAgICAkbWFrZV9kaXJze2Rpcm5hbWUgKCRpdGVyKX0gPSAxOworCX0KKwkjIFdlIGFsc28gd2FudCB0byBub3RpY2UgTWFrZWZpbGUuaW4ncy4KKwlmb3JlYWNoIG15ICRpdGVyIChAb3RoZXJfaW5wdXRfZmlsZXMpCisJeworCSAgICBpZiAoJGl0ZXIgPX4gL01ha2VmaWxlXC5pbiQvKQorCSAgICB7CisJCSRtYWtlX2RpcnN7ZGlybmFtZSAoJGl0ZXIpfSA9IDE7CisJICAgIH0KKwl9CisJJG1ha2VfZGlyc19zZXQgPSAxOworICAgIH0KKyAgICByZXR1cm4gZGVmaW5lZCAkbWFrZV9kaXJzeyRkaXJ9OworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgRmluZCB0aGUgYXV4IGRpci4gIFRoaXMgc2hvdWxkIG1hdGNoIHRoZSBhbGdvcml0aG0gdXNlZCBieQorIyAuL2NvbmZpZ3VyZS4gKFNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiBmb3IgZm9yCisjIEFDX0NPTkZJR19BVVhfRElSLikKK3N1YiBsb2NhdGVfYXV4X2RpciAoKQoreworICBpZiAoISAkY29uZmlnX2F1eF9kaXJfc2V0X2luX2NvbmZpZ3VyZV9hYykKKyAgICB7CisgICAgICAjIFRoZSBkZWZhdWx0IGF1eGlsaWFyeSBkaXJlY3RvcnkgaXMgdGhlIGZpcnN0CisgICAgICAjIG9mIC4sIC4uLCBvciAuLi8uLiB0aGF0IGNvbnRhaW5zIGluc3RhbGwtc2guCisgICAgICAjIEFzc3VtZSAuIGlmIGluc3RhbGwtc2ggZG9lc24ndCBleGlzdCB5ZXQuCisgICAgICBmb3IgbXkgJGRpciAocXcgKC4gLi4gLi4vLi4pKQorCXsKKwkgIGlmICgtZiAiJGRpci9pbnN0YWxsLXNoIikKKwkgICAgeworCSAgICAgICRjb25maWdfYXV4X2RpciA9ICRkaXI7CisJICAgICAgbGFzdDsKKwkgICAgfQorCX0KKyAgICAgICRjb25maWdfYXV4X2RpciA9ICcuJyB1bmxlc3MgJGNvbmZpZ19hdXhfZGlyOworICAgIH0KKyAgIyBBdm9pZCB1bnNpZ2h0bHkgJy8uJ3MuCisgICRhbV9jb25maWdfYXV4X2RpciA9CisgICAgJyQodG9wX3NyY2RpciknIC4gKCRjb25maWdfYXV4X2RpciBlcSAnLicgPyAiIiA6ICIvJGNvbmZpZ19hdXhfZGlyIik7CisgICRhbV9jb25maWdfYXV4X2RpciA9fiBzLC8qJCwsOworfQorCisKKyMgJm1heWJlX3B1c2hfcmVxdWlyZWRfZmlsZSAoJERJUiwgJEZJTEUsICRGVUxMRklMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VlIGlmIHdlIHdhbnQgdG8gcHVzaCB0aGlzIGZpbGUgb250byBkaXN0X2NvbW1vbi4gIFRoaXMgZnVuY3Rpb24KKyMgZW5jb2RlcyB0aGUgcnVsZXMgZm9yIGRlY2lkaW5nIHdoZW4gdG8gZG8gc28uCitzdWIgbWF5YmVfcHVzaF9yZXF1aXJlZF9maWxlCit7CisgIG15ICgkZGlyLCAkZmlsZSwgJGZ1bGxmaWxlKSA9IEBfOworCisgIGlmICgkZGlyIGVxICRyZWxhdGl2ZV9kaXIpCisgICAgeworICAgICAgcHVzaF9kaXN0X2NvbW1vbiAoJGZpbGUpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICBlbHNpZiAoJHJlbGF0aXZlX2RpciBlcSAnLicgJiYgISAmaXNfbWFrZV9kaXIgKCRkaXIpKQorICAgIHsKKyAgICAgICMgSWYgd2UgYXJlIGRvaW5nIHRoZSB0b3Btb3N0IGRpcmVjdG9yeSwgYW5kIHRoZSBmaWxlIGlzIGluIGEKKyAgICAgICMgc3ViZGlyIHdoaWNoIGRvZXMgbm90IGhhdmUgYSBNYWtlZmlsZSwgdGhlbiB3ZSBkaXN0cmlidXRlIGl0CisgICAgICAjIGhlcmUuCisKKyAgICAgICMgSWYgYSByZXF1aXJlZCBmaWxlIGlzIGFib3ZlIHRoZSBzb3VyY2UgdHJlZSwgaXQgaXMgaW1wb3J0YW50CisgICAgICAjIHRvIHByZWZpeCBpdCB3aXRoIGAkKHNyY2RpciknIHNvIHRoYXQgbm8gVlBBVEggc2VhcmNoIGlzCisgICAgICAjIHBlcmZvcm1lZC4gIE90aGVyd2lzZSBwcm9ibGVtcyBvY2N1ciB3aXRoIE1ha2UgaW1wbGVtZW50YXRpb25zCisgICAgICAjIHRoYXQgcmV3cml0ZSBhbmQgc2ltcGxpZnkgcnVsZXMgd2hvc2UgZGVwZW5kZW5jaWVzIGFyZSBmb3VuZCBpbiBhCisgICAgICAjIFZQQVRIIGxvY2F0aW9uLiAgSGVyZSBpcyBhbiBleGFtcGxlIHdpdGggT1NGMS9UcnU2NCBNYWtlLgorICAgICAgIworICAgICAgIyAgICUgY2F0IE1ha2VmaWxlCisgICAgICAjICAgVlBBVEggPSBzdWIKKyAgICAgICMgICBkaXN0ZGlyOiAuLi9hCisgICAgICAjCSAgICAgICAgICBlY2hvIC4uL2EKKyAgICAgICMgICAlIGxzCisgICAgICAjICAgTWFrZWZpbGUgYQorICAgICAgIyAgICUgbWFrZQorICAgICAgIyAgIGVjaG8gYQorICAgICAgIyAgIGEKKyAgICAgICMKKyAgICAgICMgRGVwZW5kZW5jeSBgLi4vYScgd2FzIGZvdW5kIGluIGBzdWIvLi4vYScsIGJ1dCB0aGlzIG1ha2UKKyAgICAgICMgaW1wbGVtZW50YXRpb24gc2ltcGxpZmllZCBpdCBhcyBgYScuICAoTm90ZSB0aGF0IHRoZSBzdWIvCisgICAgICAjIGRpcmVjdG9yeSBkb2VzIG5vdCBldmVuIGV4aXN0LikKKyAgICAgICMKKyAgICAgICMgVGhpcyBraW5kIG9mIFZQQVRIIHJld3JpdGluZyBzZWVtcyBoYXJkIHRvIGNhbmNlbC4gIFRoZQorICAgICAgIyBkaXN0ZGlyLmFtIGhhY2sgYWdhaW5zdCBWUEFUSCByZXdyaXRpbmcgd29ya3Mgb25seSB3aGVuIG5vCisgICAgICAjIHNpbXBsaWZpY2F0aW9uIGlzIGRvbmUsIGkuZS4sIGZvciBkZXBlbmRlbmNpZXMgd2hpY2ggYXJlIGluCisgICAgICAjIHN1YmRpcmVjdG9yaWVzLCBub3QgaW4gZW5jbG9zaW5nIGRpcmVjdG9yaWVzLiAgSGVuY2UsIGluCisgICAgICAjIHRoZSBsYXR0ZXIgY2FzZSB3ZSB1c2UgYSBmdWxsIHBhdGggdG8gbWFrZSBzdXJlIG5vIFZQQVRICisgICAgICAjIHNlYXJjaCBvY2N1cnMuCisgICAgICAkZnVsbGZpbGUgPSAnJChzcmNkaXIpLycgLiAkZnVsbGZpbGUKKwlpZiAkZGlyID1+IG0sXlwuXC4oPzokfC8pLDsKKworICAgICAgcHVzaF9kaXN0X2NvbW1vbiAoJGZ1bGxmaWxlKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKKworIyBJZiBhIGZpbGUgbmFtZSBhcHBlYXJzIGFzIGEga2V5IGluIHRoaXMgaGFzaCwgdGhlbiBpdCBoYXMgYWxyZWFkeQorIyBiZWVuIGNoZWNrZWQgZm9yLiAgVGhpcyBhbGxvd3MgdXMgbm90IHRvIHJlcG9ydCB0aGUgc2FtZSBlcnJvciBtb3JlCisjIHRoYW4gb25jZS4KK215ICVyZXF1aXJlZF9maWxlX25vdF9mb3VuZCA9ICgpOworCisjICZyZXF1aXJlX2ZpbGVfaW50ZXJuYWwgKCRXSEVSRSwgJE1ZU1RSSUNULCAkRElSRUNUT1JZLCBARklMRVMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFZlcmlmeSB0aGF0IHRoZSBmaWxlIG11c3QgZXhpc3QgaW4gJERJUkVDVE9SWSwgb3IgaW5zdGFsbCBpdC4KKyMgJE1ZU1RSSUNUIGlzIHRoZSBzdHJpY3RuZXNzIGxldmVsIGF0IHdoaWNoIHRoaXMgZmlsZSBiZWNvbWVzIHJlcXVpcmVkLgorc3ViIHJlcXVpcmVfZmlsZV9pbnRlcm5hbCAoJCQkQCkKK3sKKyAgbXkgKCR3aGVyZSwgJG15c3RyaWN0LCAkZGlyLCBAZmlsZXMpID0gQF87CisKKyAgZm9yZWFjaCBteSAkZmlsZSAoQGZpbGVzKQorICAgIHsKKyAgICAgIG15ICRmdWxsZmlsZSA9ICIkZGlyLyRmaWxlIjsKKyAgICAgIG15ICRmb3VuZF9pdCA9IDA7CisgICAgICBteSAkZGFuZ2xpbmdfc3ltID0gMDsKKworICAgICAgaWYgKC1sICRmdWxsZmlsZSAmJiAhIC1mICRmdWxsZmlsZSkKKwl7CisJICAkZGFuZ2xpbmdfc3ltID0gMTsKKwl9CisgICAgICBlbHNpZiAoZGlyX2hhc19jYXNlX21hdGNoaW5nX2ZpbGUgKCRkaXIsICRmaWxlKSkKKwl7CisJICAkZm91bmRfaXQgPSAxOworCSAgbWF5YmVfcHVzaF9yZXF1aXJlZF9maWxlICgkZGlyLCAkZmlsZSwgJGZ1bGxmaWxlKTsKKwl9CisKKyAgICAgICMgYC0tZm9yY2UtbWlzc2luZycgb25seSBoYXMgYW4gZWZmZWN0IGlmIGAtLWFkZC1taXNzaW5nJyBpcworICAgICAgIyBzcGVjaWZpZWQuCisgICAgICBpZiAoJGZvdW5kX2l0ICYmICghICRhZGRfbWlzc2luZyB8fCAhICRmb3JjZV9taXNzaW5nKSkKKwl7CisJICBuZXh0OworCX0KKyAgICAgIGVsc2UKKwl7CisJICAjIElmIHdlJ3ZlIGFscmVhZHkgbG9va2VkIGZvciBpdCwgd2UncmUgZG9uZS4gIFlvdSBtaWdodAorCSAgIyB3b25kZXIgd2h5IHdlIGRvbid0IGRvIHRoaXMgYmVmb3JlIHNlYXJjaGluZyBmb3IgdGhlCisJICAjIGZpbGUuICBJZiB3ZSBkbyB0aGF0LCB0aGVuIHNvbWV0aGluZyBsaWtlCisJICAjIEFDX09VVFBVVChzdWJkaXIvZm9vIGZvbykgd2lsbCBmYWlsIHRvIHB1dCBmb28uaW4gaW50bworCSAgIyBESVNUX0NPTU1PTi4KKwkgIGlmICghICRmb3VuZF9pdCkKKwkgICAgeworCSAgICAgIG5leHQgaWYgZGVmaW5lZCAkcmVxdWlyZWRfZmlsZV9ub3RfZm91bmR7JGZ1bGxmaWxlfTsKKwkgICAgICAkcmVxdWlyZWRfZmlsZV9ub3RfZm91bmR7JGZ1bGxmaWxlfSA9IDE7CisJICAgIH0KKworCSAgaWYgKCRzdHJpY3RuZXNzID49ICRteXN0cmljdCkKKwkgICAgeworCSAgICAgIGlmICgkZGFuZ2xpbmdfc3ltICYmICRhZGRfbWlzc2luZykKKwkJeworCQkgIHVubGluayAoJGZ1bGxmaWxlKTsKKwkJfQorCisJICAgICAgbXkgJHRyYWlsZXIgPSAnJzsKKwkgICAgICBteSAkdHJhaWxlcjIgPSAnJzsKKwkgICAgICBteSAkc3VwcHJlc3MgPSAwOworCisJICAgICAgIyBPbmx5IGluc3RhbGwgbWlzc2luZyBmaWxlcyBhY2NvcmRpbmcgdG8gb3VyIGRlc2lyZWQKKwkgICAgICAjIHN0cmljdG5lc3MgbGV2ZWwuCisJICAgICAgbXkgJG1lc3NhZ2UgPSAicmVxdWlyZWQgZmlsZSBgJGZ1bGxmaWxlJyBub3QgZm91bmQiOworCSAgICAgIGlmICgkYWRkX21pc3NpbmcpCisJCXsKKwkJICBpZiAoLWYgIiRsaWJkaXIvJGZpbGUiKQorCQkgICAgeworCQkgICAgICAkc3VwcHJlc3MgPSAxOworCisJCSAgICAgICMgSW5zdGFsbCB0aGUgbWlzc2luZyBmaWxlLiAgU3ltbGluayBpZiB3ZQorCQkgICAgICAjIGNhbiwgY29weSBpZiB3ZSBtdXN0LiAgTm90ZTogZGVsZXRlIHRoZSBmaWxlCisJCSAgICAgICMgZmlyc3QsIGluIGNhc2UgaXQgaXMgYSBkYW5nbGluZyBzeW1saW5rLgorCQkgICAgICAkbWVzc2FnZSA9ICJpbnN0YWxsaW5nIGAkZnVsbGZpbGUnIjsKKworCQkgICAgICAjIFRoZSBsaWNlbnNlIGZpbGUgc2hvdWxkIG5vdCBiZSB2b2xhdGlsZS4KKwkJICAgICAgaWYgKCRmaWxlIGVxICJDT1BZSU5HIikKKwkJICAgICAgICB7CisJCQkgICRtZXNzYWdlIC49ICIgdXNpbmcgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjMgZmlsZSI7CisJCQkgICR0cmFpbGVyMiA9ICJcbiAgICBDb25zaWRlciBhZGRpbmcgdGhlIENPUFlJTkcgZmlsZSIKKwkJCQkgICAgLiAiIHRvIHRoZSB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIgorCQkJCSAgICAuICJcbiAgICBmb3IgeW91ciBjb2RlLCB0byBhdm9pZCBxdWVzdGlvbnMiCisJCQkJICAgIC4gIiBhYm91dCB3aGljaCBsaWNlbnNlIHlvdXIgcHJvamVjdCB1c2VzLiI7CisJCQl9CisKKwkJICAgICAgIyBXaW5kb3dzIFBlcmwgd2lsbCBoYW5nIGlmIHdlIHRyeSB0byBkZWxldGUgYQorCQkgICAgICAjIGZpbGUgdGhhdCBkb2Vzbid0IGV4aXN0LgorCQkgICAgICB1bmxpbmsgKCRmdWxsZmlsZSkgaWYgLWYgJGZ1bGxmaWxlOworCQkgICAgICBpZiAoJHN5bWxpbmtfZXhpc3RzICYmICEgJGNvcHlfbWlzc2luZykKKwkJCXsKKwkJCSAgaWYgKCEgc3ltbGluayAoIiRsaWJkaXIvJGZpbGUiLCAkZnVsbGZpbGUpCisJCQkgICAgICB8fCAhIC1lICRmdWxsZmlsZSkKKwkJCSAgICB7CisJCQkgICAgICAkc3VwcHJlc3MgPSAwOworCQkJICAgICAgJHRyYWlsZXIgPSAiOyBlcnJvciB3aGlsZSBtYWtpbmcgbGluazogJCEiOworCQkJICAgIH0KKwkJCX0KKwkJICAgICAgZWxzaWYgKHN5c3RlbSAoJ2NwJywgIiRsaWJkaXIvJGZpbGUiLCAkZnVsbGZpbGUpKQorCQkJeworCQkJICAkc3VwcHJlc3MgPSAwOworCQkJICAkdHJhaWxlciA9ICJcbiAgICBlcnJvciB3aGlsZSBjb3B5aW5nIjsKKwkJCX0KKwkJICAgICAgc2V0X2Rpcl9jYWNoZV9maWxlICgkZGlyLCAkZmlsZSk7CisJCSAgICB9CisKKwkJICBpZiAoISBtYXliZV9wdXNoX3JlcXVpcmVkX2ZpbGUgKGRpcm5hbWUgKCRmdWxsZmlsZSksCisJCQkJCQkgICRmaWxlLCAkZnVsbGZpbGUpKQorCQkgICAgeworCQkgICAgICBpZiAoISAkZm91bmRfaXQgJiYgISAkYXV0b21ha2Vfd2lsbF9wcm9jZXNzX2F1eF9kaXIpCisJCQl7CisJCQkgICMgV2UgaGF2ZSBhZGRlZCB0aGUgZmlsZSBidXQgY291bGQgbm90IHB1c2ggaXQKKwkJCSAgIyBpbnRvIERJU1RfQ09NTU9OLCBwcm9iYWJseSBiZWNhdXNlIHRoaXMgaXMKKwkJCSAgIyBhbiBhdXhpbGlhcnkgZmlsZSBhbmQgd2UgYXJlIG5vdCBwcm9jZXNzaW5nCisJCQkgICMgdGhlIHRvcCBsZXZlbCBNYWtlZmlsZS4gIEZ1cnRoZXJtb3JlIEF1dG9tYWtlCisJCQkgICMgaGFzbid0IGJlZW4gYXNrZWQgdG8gY3JlYXRlIHRoZSBNYWtlZmlsZS5pbgorCQkJICAjIHRoYXQgZGlzdHJpYnV0ZXMgdGhlIGF1eCBkaXIgZmlsZXMuCisJCQkgIGVycm9yICgkd2hlcmUsICdQbGVhc2UgbWFrZSBhIGZ1bGwgcnVuIG9mIGF1dG9tYWtlJworCQkJCSAuICIgc28gJGZ1bGxmaWxlIGdldHMgZGlzdHJpYnV0ZWQuIik7CisJCQl9CisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICAkdHJhaWxlciA9ICJcbiAgYGF1dG9tYWtlIC0tYWRkLW1pc3NpbmcnIGNhbiBpbnN0YWxsIGAkZmlsZSciCisJCSAgICBpZiAtZiAiJGxpYmRpci8kZmlsZSI7CisJCX0KKworCSAgICAgICMgSWYgLS1mb3JjZS1taXNzaW5nIHdhcyBzcGVjaWZpZWQsIGFuZCB3ZSBoYXZlCisJICAgICAgIyBhY3R1YWxseSBmb3VuZCB0aGUgZmlsZSwgdGhlbiBkbyBub3RoaW5nLgorCSAgICAgIG5leHQKKwkJaWYgJGZvdW5kX2l0ICYmICRmb3JjZV9taXNzaW5nOworCisJICAgICAgIyBJZiB3ZSBjb3VsZG4ndCBpbnN0YWxsIHRoZSBmaWxlLCBidXQgaXQgaXMgYSB0YXJnZXQgaW4KKwkgICAgICAjIHRoZSBNYWtlZmlsZSwgZG9uJ3QgcHJpbnQgYW55dGhpbmcuICBUaGlzIGFsbG93cyBmaWxlcworCSAgICAgICMgbGlrZSBSRUFETUUsIEFVVEhPUlMsIG9yIFRIQU5LUyB0byBiZSBnZW5lcmF0ZWQuCisJICAgICAgbmV4dAorCQlpZiAhJHN1cHByZXNzICYmIHJ1bGUgJGZpbGU7CisKKwkgICAgICBtc2cgKCRzdXBwcmVzcyA/ICdub3RlJyA6ICdlcnJvcicsICR3aGVyZSwgIiRtZXNzYWdlJHRyYWlsZXIkdHJhaWxlcjIiKTsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKKyMgJnJlcXVpcmVfZmlsZSAoJFdIRVJFLCAkTVlTVFJJQ1QsIEBGSUxFUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N1YiByZXF1aXJlX2ZpbGUgKCQkQCkKK3sKKyAgICBteSAoJHdoZXJlLCAkbXlzdHJpY3QsIEBmaWxlcykgPSBAXzsKKyAgICByZXF1aXJlX2ZpbGVfaW50ZXJuYWwgKCR3aGVyZSwgJG15c3RyaWN0LCAkcmVsYXRpdmVfZGlyLCBAZmlsZXMpOworfQorCisjICZyZXF1aXJlX2ZpbGVfd2l0aF9tYWNybyAoJENPTkQsICRNQUNSTywgJE1ZU1RSSUNULCBARklMRVMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdWIgcmVxdWlyZV9maWxlX3dpdGhfbWFjcm8gKCQkJEApCit7CisgICAgbXkgKCRjb25kLCAkbWFjcm8sICRteXN0cmljdCwgQGZpbGVzKSA9IEBfOworICAgICRtYWNybyA9IHJ2YXIgKCRtYWNybykgdW5sZXNzIHJlZiAkbWFjcm87CisgICAgcmVxdWlyZV9maWxlICgkbWFjcm8tPnJkZWYgKCRjb25kKS0+bG9jYXRpb24sICRteXN0cmljdCwgQGZpbGVzKTsKK30KKworIyAmcmVxdWlyZV9saWJzb3VyY2Vfd2l0aF9tYWNybyAoJENPTkQsICRNQUNSTywgJE1ZU1RSSUNULCBARklMRVMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVxdWlyZSBhbiBBQ19MSUJTT1VSQ0VkIGZpbGUuICBJZiBBQ19DT05GSUdfTElCT0JKX0RJUiB3YXMgY2FsbGVkLCBpdAorIyBtdXN0IGJlIGluIHRoYXQgZGlyZWN0b3J5LiAgT3RoZXJ3aXNlIGV4cGVjdCBpdCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCitzdWIgcmVxdWlyZV9saWJzb3VyY2Vfd2l0aF9tYWNybyAoJCQkQCkKK3sKKyAgICBteSAoJGNvbmQsICRtYWNybywgJG15c3RyaWN0LCBAZmlsZXMpID0gQF87CisgICAgJG1hY3JvID0gcnZhciAoJG1hY3JvKSB1bmxlc3MgcmVmICRtYWNybzsKKyAgICBpZiAoJGNvbmZpZ19saWJvYmpfZGlyKQorICAgICAgeworCXJlcXVpcmVfZmlsZV9pbnRlcm5hbCAoJG1hY3JvLT5yZGVmICgkY29uZCktPmxvY2F0aW9uLCAkbXlzdHJpY3QsCisJCQkgICAgICAgJGNvbmZpZ19saWJvYmpfZGlyLCBAZmlsZXMpOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKwlyZXF1aXJlX2ZpbGUgKCRtYWNyby0+cmRlZiAoJGNvbmQpLT5sb2NhdGlvbiwgJG15c3RyaWN0LCBAZmlsZXMpOworICAgICAgfQorfQorCisjIFF1ZXVlIHRvIHB1c2ggcmVxdWlyZV9jb25mX2ZpbGUgcmVxdWlyZW1lbnRzIHRvLgorbXkgJHJlcXVpcmVkX2NvbmZfZmlsZV9xdWV1ZTsKKworIyAmcXVldWVfcmVxdWlyZWRfY29uZl9maWxlICgkUVVFVUUsICRLRVksICRESVIsICRXSEVSRSwgJE1ZU1RSSUNULCBARklMRVMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N1YiBxdWV1ZV9yZXF1aXJlZF9jb25mX2ZpbGUgKCQkJCRAKQoreworICAgIG15ICgkcXVldWUsICRrZXksICRkaXIsICR3aGVyZSwgJG15c3RyaWN0LCBAZmlsZXMpID0gQF87CisgICAgbXkgQHNlcmlhbF9sb2M7CisgICAgaWYgKHJlZiAkd2hlcmUpCisgICAgICB7CisgICAgICAgIEBzZXJpYWxfbG9jID0gKFFVRVVFX0xPQ0FUSU9OLCAkd2hlcmUtPnNlcmlhbGl6ZSAoKSk7CisgICAgICB9CisgICAgZWxzZQorICAgICAgeworICAgICAgICBAc2VyaWFsX2xvYyA9IChRVUVVRV9TVFJJTkcsICR3aGVyZSk7CisgICAgICB9CisgICAgJHF1ZXVlLT5lbnF1ZXVlICgka2V5LCAkZGlyLCBAc2VyaWFsX2xvYywgJG15c3RyaWN0LCAwICsgQGZpbGVzLCBAZmlsZXMpOworfQorCisjICZyZXF1aXJlX3F1ZXVlZF9jb25mX2ZpbGUgKCRRVUVVRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3ViIHJlcXVpcmVfcXVldWVkX2NvbmZfZmlsZSAoJCkKK3sKKyAgICBteSAoJHF1ZXVlKSA9IEBfOworICAgIG15ICR3aGVyZTsKKyAgICBteSAkZGlyID0gJHF1ZXVlLT5kZXF1ZXVlICgpOworICAgIG15ICRsb2Nfa2V5ID0gJHF1ZXVlLT5kZXF1ZXVlICgpOworICAgIGlmICgkbG9jX2tleSBlcSBRVUVVRV9MT0NBVElPTikKKyAgICAgIHsKKwkkd2hlcmUgPSBBdXRvbWFrZTo6TG9jYXRpb246OmRlc2VyaWFsaXplICgkcXVldWUpOworICAgICAgfQorICAgIGVsc2lmICgkbG9jX2tleSBlcSBRVUVVRV9TVFJJTkcpCisgICAgICB7CisJJHdoZXJlID0gJHF1ZXVlLT5kZXF1ZXVlICgpOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKwlwcm9nX2Vycm9yICJ1bmV4cGVjdGVkIGtleSAkbG9jX2tleSI7CisgICAgICB9CisgICAgbXkgJG15c3RyaWN0ID0gJHF1ZXVlLT5kZXF1ZXVlICgpOworICAgIG15ICRuZmlsZXMgPSAkcXVldWUtPmRlcXVldWUgKCk7CisgICAgbXkgQGZpbGVzOworICAgIHB1c2ggQGZpbGVzLCAkcXVldWUtPmRlcXVldWUgKCkKKyAgICAgIGZvcmVhY2ggKDEgLi4gJG5maWxlcyk7CisKKyAgICAjIERlcXVldWluZyBoYXBwZW5zIG91dHNpZGUgb2YgcGVyLW1ha2VmaWxlIGNvbnRleHQsIHNvIHdlIGhhdmUgdG8KKyAgICAjIHNldCB0aGUgdmFyaWFibGVzIHVzZWQgYnkgcmVxdWlyZV9maWxlX2ludGVybmFsIGFuZCB0aGUgZnVuY3Rpb25zCisgICAgIyBpdCBjYWxscy4gIEdyb3NzIQorICAgICRyZWxhdGl2ZV9kaXIgPSAkZGlyOworICAgIHJlcXVpcmVfZmlsZV9pbnRlcm5hbCAoJHdoZXJlLCAkbXlzdHJpY3QsICRjb25maWdfYXV4X2RpciwgQGZpbGVzKTsKK30KKworIyAmcmVxdWlyZV9jb25mX2ZpbGUgKCRXSEVSRSwgJE1ZU1RSSUNULCBARklMRVMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTG9va3MgaW4gY29uZmlndXJhdGlvbiBwYXRoLCBhcyBzcGVjaWZpZWQgYnkgQUNfQ09ORklHX0FVWF9ESVI7CisjIHdvcmtlciB0aHJlYWRzIG1heSBxdWV1ZSB1cCB0aGUgYWN0aW9uIHRvIGJlIHNlcmlhbGl6ZWQgYnkgdGhlIG1hc3Rlci4KKyMKKyMgRklYTUU6IHRoaXMgc2VyaW91c2x5IHJlbGllcyBvbiB0aGUgc2VtYW50aWNzIG9mIHJlcXVpcmVfZmlsZV9pbnRlcm5hbAorIyBhbmQgbWF5YmVfcHVzaF9yZXF1aXJlZF9maWxlLCBpbiB0aGF0IHdlIGV4cGxvaXQgdGhlIGZhY3QgdGhhdCBvbmx5IHRoZQorIyBjb250ZW50cyBvZiB0aGUgbGFzdCBoYW5kbGVkIG91dHB1dCBmaWxlIG1heSBiZSBpbXBhY3RlZCAod2hpY2ggaW4gdHVybgorIyBpcyBkZWFsdCB3aXRoIGJ5IHRoZSBtYXN0ZXIgdGhyZWFkKS4KK3N1YiByZXF1aXJlX2NvbmZfZmlsZSAoJCRAKQoreworICAgIG15ICgkd2hlcmUsICRteXN0cmljdCwgQGZpbGVzKSA9IEBfOworICAgIGlmIChkZWZpbmVkICRyZXF1aXJlZF9jb25mX2ZpbGVfcXVldWUpCisgICAgICB7CisJcXVldWVfcmVxdWlyZWRfY29uZl9maWxlICgkcmVxdWlyZWRfY29uZl9maWxlX3F1ZXVlLCBRVUVVRV9DT05GX0ZJTEUsCisJCQkJICAkcmVsYXRpdmVfZGlyLCAkd2hlcmUsICRteXN0cmljdCwgQGZpbGVzKTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisJcmVxdWlyZV9maWxlX2ludGVybmFsICgkd2hlcmUsICRteXN0cmljdCwgJGNvbmZpZ19hdXhfZGlyLCBAZmlsZXMpOworICAgICAgfQorfQorCisKKyMgJnJlcXVpcmVfY29uZl9maWxlX3dpdGhfbWFjcm8gKCRDT05ELCAkTUFDUk8sICRNWVNUUklDVCwgQEZJTEVTKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdWIgcmVxdWlyZV9jb25mX2ZpbGVfd2l0aF9tYWNybyAoJCQkQCkKK3sKKyAgICBteSAoJGNvbmQsICRtYWNybywgJG15c3RyaWN0LCBAZmlsZXMpID0gQF87CisgICAgcmVxdWlyZV9jb25mX2ZpbGUgKHJ2YXIgKCRtYWNybyktPnJkZWYgKCRjb25kKS0+bG9jYXRpb24sCisJCSAgICAgICAkbXlzdHJpY3QsIEBmaWxlcyk7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyAmcmVxdWlyZV9idWlsZF9kaXJlY3RvcnkgKCRESVJFQ1RPUlkpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbWl0IHJ1bGVzIHRvIGNyZWF0ZSAkRElSRUNUT1JZIGlmIG5lZWRlZCwgYW5kIHJldHVybgorIyB0aGUgZmlsZSB0aGF0IGFueSB0YXJnZXQgcmVxdWlyaW5nIHRoaXMgZGlyZWN0b3J5IHNob3VsZCBiZSBtYWRlCisjIGRlcGVuZGVudCB1cG9uLgorIyBXZSBkb24ndCB3YW50IHRvIGVtaXQgdGhlIHJ1bGUgdHdpY2UsIGFuZCB3YW50IHRvIHJldXNlIGl0CisjIGZvciBkaXJlY3RvcmllcyB3aXRoIGVxdWl2YWxlbnQgbmFtZXMgKGUuZy4sIGBmb28vYmFyJyBhbmQgYC4vZm9vLy9iYXInKS4KK3N1YiByZXF1aXJlX2J1aWxkX2RpcmVjdG9yeSAoJCkKK3sKKyAgbXkgJGRpcmVjdG9yeSA9IHNoaWZ0OworCisgIHJldHVybiAkZGlyZWN0b3J5X21hcHskZGlyZWN0b3J5fSBpZiBleGlzdHMgJGRpcmVjdG9yeV9tYXB7JGRpcmVjdG9yeX07CisKKyAgbXkgJGNkaXIgPSBGaWxlOjpTcGVjLT5jYW5vbnBhdGggKCRkaXJlY3RvcnkpOworCisgIGlmIChleGlzdHMgJGRpcmVjdG9yeV9tYXB7JGNkaXJ9KQorICAgIHsKKyAgICAgIG15ICRzdGFtcCA9ICRkaXJlY3RvcnlfbWFweyRjZGlyfTsKKyAgICAgICRkaXJlY3RvcnlfbWFweyRkaXJlY3Rvcnl9ID0gJHN0YW1wOworICAgICAgcmV0dXJuICRzdGFtcDsKKyAgICB9CisKKyAgbXkgJGRpcnN0YW1wID0gIiRjZGlyL1wkKGFtX19kaXJzdGFtcCkiOworCisgICRkaXJlY3RvcnlfbWFweyRkaXJlY3Rvcnl9ID0gJGRpcnN0YW1wOworICAkZGlyZWN0b3J5X21hcHskY2Rpcn0gPSAkZGlyc3RhbXA7CisKKyAgIyBTZXQgYSB2YXJpYWJsZSBmb3IgdGhlIGRpcnN0YW1wIGJhc2VuYW1lLgorICBkZWZpbmVfcHJldHR5X3ZhcmlhYmxlICgnYW1fX2RpcnN0YW1wJywgVFJVRSwgSU5URVJOQUwsCisJCQkgICckKGFtX19sZWFkaW5nX2RvdClkaXJzdGFtcCcpOworCisgICMgRGlyZWN0b3J5IG11c3QgYmUgcmVtb3ZlZCBieSBgbWFrZSBkaXN0Y2xlYW4nLgorICAkY2xlYW5fZmlsZXN7JGRpcnN0YW1wfSA9IERJU1RfQ0xFQU47CisKKyAgJG91dHB1dF9ydWxlcyAuPSAoIiRkaXJzdGFtcDpcbiIKKwkJICAgIC4gIlx0XEBcJChNS0RJUl9QKSAkZGlyZWN0b3J5XG4iCisJCSAgICAuICJcdFxAOiA+ICRkaXJzdGFtcFxuIik7CisKKyAgcmV0dXJuICRkaXJzdGFtcDsKK30KKworIyAmcmVxdWlyZV9idWlsZF9kaXJlY3RvcnlfbWF5YmUgKCRGSUxFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZiAkRklMRSBsaWVzIGluIGEgc3ViZGlyZWN0b3J5LCBlbWl0IGEgcnVsZSB0byBjcmVhdGUgdGhpcworIyBkaXJlY3RvcnkgYW5kIHJldHVybiB0aGUgZmlsZSB0aGF0ICRGSUxFIHNob3VsZCBiZSBtYWRlCisjIGRlcGVuZGVudCB1cG9uLiAgT3RoZXJ3aXNlLCBqdXN0IHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLgorc3ViIHJlcXVpcmVfYnVpbGRfZGlyZWN0b3J5X21heWJlICgkKQoreworICAgIG15ICRmaWxlID0gc2hpZnQ7CisgICAgbXkgJGRpcmVjdG9yeSA9IGRpcm5hbWUgKCRmaWxlKTsKKworICAgIGlmICgkZGlyZWN0b3J5IG5lICcuJykKKyAgICB7CisJcmV0dXJuIHJlcXVpcmVfYnVpbGRfZGlyZWN0b3J5ICgkZGlyZWN0b3J5KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlyZXR1cm4gJyc7CisgICAgfQorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgUHVzaCBhIGxpc3Qgb2YgZmlsZXMgb250byBkaXN0X2NvbW1vbi4KK3N1YiBwdXNoX2Rpc3RfY29tbW9uCit7CisgIHByb2dfZXJyb3IgInB1c2hfZGlzdF9jb21tb24gcnVuIGFmdGVyIGhhbmRsZV9kaXN0IgorICAgIGlmICRoYW5kbGVfZGlzdF9ydW47CisgIEF1dG9tYWtlOjpWYXJpYWJsZTo6ZGVmaW5lICgnRElTVF9DT01NT04nLCBWQVJfQVVUT01BS0UsICcrJywgVFJVRSwgIkBfIiwKKwkJCSAgICAgICcnLCBJTlRFUk5BTCwgVkFSX1BSRVRUWSk7Cit9CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIGdlbmVyYXRlX21ha2VmaWxlICgkTUFLRUZJTEVfQU0sICRNQUtFRklMRV9JTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBHZW5lcmF0ZSBhIE1ha2VmaWxlLmluIGdpdmVuIHRoZSBuYW1lIG9mIHRoZSBjb3JyZXNwb25kaW5nIE1ha2VmaWxlIGFuZAorIyB0aGUgbmFtZSBvZiB0aGUgZmlsZSBvdXRwdXQgYnkgY29uZmlnLnN0YXR1cy4KK3N1YiBnZW5lcmF0ZV9tYWtlZmlsZSAoJCQpCit7CisgIG15ICgkbWFrZWZpbGVfYW0sICRtYWtlZmlsZV9pbikgPSBAXzsKKworICAjIFJlc2V0IGFsbCB0aGUgTWFrZWZpbGUuYW0gcmVsYXRlZCB2YXJpYWJsZXMuCisgIGluaXRpYWxpemVfcGVyX2lucHV0OworCisgICMgQVVUT01BS0VfT1BUSU9OUyBjYW4gY29udGFpbnMgLVcgZmxhZ3MgdG8gZGlzYWJsZSBvciBlbmFibGUKKyAgIyB3YXJuaW5ncyBmb3IgdGhpcyBmaWxlLiAgU28gaG9sZCBhbnkgd2FybmluZyBpc3N1ZWQgYmVmb3JlCisgICMgd2UgaGF2ZSBwcm9jZXNzZWQgQVVUT01BS0VfT1BUSU9OUy4KKyAgYnVmZmVyX21lc3NhZ2VzICgnd2FybmluZycpOworCisgICMgTmFtZSBvZiBpbnB1dCBmaWxlICgiTWFrZWZpbGUuYW0iKSBhbmQgb3V0cHV0IGZpbGUKKyAgIyAoIk1ha2VmaWxlLmluIikuICBUaGVzZSBoYXZlIG5vIGRpcmVjdG9yeSBjb21wb25lbnRzLgorICAkYW1fZmlsZV9uYW1lID0gYmFzZW5hbWUgKCRtYWtlZmlsZV9hbSk7CisgICRpbl9maWxlX25hbWUgPSBiYXNlbmFtZSAoJG1ha2VmaWxlX2luKTsKKworICAjICRPVVRQVVQgaXMgZW5jb2RlZC4gIElmIGl0IGNvbnRhaW5zIGEgIjoiIHRoZW4gdGhlIGZpcnN0IGVsZW1lbnQKKyAgIyBpcyB0aGUgcmVhbCBvdXRwdXQgZmlsZSwgYW5kIGFsbCByZW1haW5pbmcgZWxlbWVudHMgYXJlIGlucHV0CisgICMgZmlsZXMuICBXZSBkb24ndCBzY2FuIG9yIG90aGVyd2lzZSBkZWFsIHdpdGggdGhlc2UgaW5wdXQgZmlsZXMsCisgICMgb3RoZXIgdGhhbiB0byBtYXJrIHRoZW0gYXMgZGVwZW5kZW5jaWVzLiAgU2VlCisgICMgJnNjYW5fYXV0b2NvbmZfZmlsZXMgZm9yIGRldGFpbHMuCisgIG15ICgkbWFrZWZpbGUsIEBpbnB1dHMpID0gc3BsaXQgKC86LywgJG91dHB1dF9maWxlc3skbWFrZWZpbGVfaW59KTsKKworICAkcmVsYXRpdmVfZGlyID0gZGlybmFtZSAoJG1ha2VmaWxlKTsKKyAgJGFtX3JlbGF0aXZlX2RpciA9IGRpcm5hbWUgKCRtYWtlZmlsZV9hbSk7CisgICR0b3BzcmNkaXIgPSBiYWNrbmFtZSAoJHJlbGF0aXZlX2Rpcik7CisKKyAgcmVhZF9tYWluX2FtX2ZpbGUgKCRtYWtlZmlsZV9hbSk7CisgIGlmIChoYW5kbGVfb3B0aW9ucykKKyAgICB7CisgICAgICAjIFByb2Nlc3MgYnVmZmVyZWQgd2FybmluZ3MuCisgICAgICBmbHVzaF9tZXNzYWdlczsKKyAgICAgICMgRmF0YWwgZXJyb3IuICBKdXN0IHJldHVybiwgc28gd2UgY2FuIGNvbnRpbnVlIHdpdGggbmV4dCBmaWxlLgorICAgICAgcmV0dXJuOworICAgIH0KKyAgIyBQcm9jZXNzIGJ1ZmZlcmVkIHdhcm5pbmdzLgorICBmbHVzaF9tZXNzYWdlczsKKworICAjIFRoZXJlIGFyZSBhIGZldyBpbnN0YWxsLXJlbGF0ZWQgdmFyaWFibGVzIHRoYXQgeW91IHNob3VsZCBub3QgZGVmaW5lLgorICBmb3JlYWNoIG15ICR2YXIgKCdQUkVfSU5TVEFMTCcsICdQT1NUX0lOU1RBTEwnLCAnTk9STUFMX0lOU1RBTEwnKQorICAgIHsKKyAgICAgIG15ICR2ID0gdmFyICR2YXI7CisgICAgICBpZiAoJHYpCisJeworCSAgbXkgJGRlZiA9ICR2LT5kZWYgKFRSVUUpOworCSAgcHJvZ19lcnJvciAiJHZhciBub3QgZGVmaW5lZCBpbiBjb25kaXRpb24gVFJVRSIKKwkgICAgdW5sZXNzICRkZWY7CisJICByZWplY3RfdmFyICR2YXIsICJgJHZhcicgc2hvdWxkIG5vdCBiZSBkZWZpbmVkIgorCSAgICBpZiAkZGVmLT5vd25lciAhPSBWQVJfQVVUT01BS0U7CisJfQorICAgIH0KKworICAjIENhdGNoIHNvbWUgb2Jzb2xldGUgdmFyaWFibGVzLgorICBtc2dfdmFyICgnb2Jzb2xldGUnLCAnSU5DTFVERVMnLAorCSAgICJgSU5DTFVERVMnIGlzIHRoZSBvbGQgbmFtZSBmb3IgYEFNX0NQUEZMQUdTJyAob3IgYCpfQ1BQRkxBR1MnKSIpCisgICAgaWYgdmFyICgnSU5DTFVERVMnKTsKKworICAjIE11c3QgZG8gdGhpcyBhZnRlciByZWFkaW5nIC5hbSBmaWxlLgorICBkZWZpbmVfdmFyaWFibGUgKCdzdWJkaXInLCAkcmVsYXRpdmVfZGlyLCBJTlRFUk5BTCk7CisKKyAgIyBJZiBESVNUX1NVQkRJUlMgaXMgZGVmaW5lZCwgbWFrZSBzdXJlIFNVQkRJUlMgaXMsIHNvIHRoYXQKKyAgIyByZWN1cnNpdmUgcnVsZXMgYXJlIGVuYWJsZWQuCisgIGRlZmluZV9wcmV0dHlfdmFyaWFibGUgKCdTVUJESVJTJywgVFJVRSwgSU5URVJOQUwsICcnKQorICAgIGlmIHZhciAnRElTVF9TVUJESVJTJyAmJiAhIHZhciAnU1VCRElSUyc7CisKKyAgIyBDaGVjayBmaXJzdCwgYmVjYXVzZSB3ZSBtaWdodCBtb2RpZnkgc29tZSBzdGF0ZS4KKyAgY2hlY2tfY3lnbnVzOworICBjaGVja19nbnVfc3RhbmRhcmRzOworICBjaGVja19nbml0c19zdGFuZGFyZHM7CisKKyAgaGFuZGxlX2NvbmZpZ3VyZSAoJG1ha2VmaWxlX2FtLCAkbWFrZWZpbGVfaW4sICRtYWtlZmlsZSwgQGlucHV0cyk7CisgIGhhbmRsZV9nZXR0ZXh0OworICBoYW5kbGVfbGlicmFyaWVzOworICBoYW5kbGVfbHRsaWJyYXJpZXM7CisgIGhhbmRsZV9wcm9ncmFtczsKKyAgaGFuZGxlX3NjcmlwdHM7CisKKyAgIyBUaGVzZSBtdXN0IGJlIHJ1biBhZnRlciBhbGwgdGhlIHNvdXJjZXMgYXJlIHNjYW5uZWQuICBUaGV5CisgICMgdXNlIHZhcmlhYmxlcyBkZWZpbmVkIGJ5ICZoYW5kbGVfbGlicmFyaWVzLCAmaGFuZGxlX2x0bGlicmFyaWVzLAorICAjIG9yICZoYW5kbGVfcHJvZ3JhbXMuCisgIGhhbmRsZV9jb21waWxlOworICBoYW5kbGVfbGFuZ3VhZ2VzOworICBoYW5kbGVfbGlidG9vbDsKKworICAjIFZhcmlhYmxlcyB1c2VkIGJ5IGRpc3RkaXIuYW0gYW5kIHRhZ3MuYW0uCisgIGRlZmluZV9wcmV0dHlfdmFyaWFibGUgKCdTT1VSQ0VTJywgVFJVRSwgSU5URVJOQUwsIEBzb3VyY2VzKTsKKyAgaWYgKCEgb3B0aW9uICduby1kaXN0JykKKyAgICB7CisgICAgICBkZWZpbmVfcHJldHR5X3ZhcmlhYmxlICgnRElTVF9TT1VSQ0VTJywgVFJVRSwgSU5URVJOQUwsIEBkaXN0X3NvdXJjZXMpOworICAgIH0KKworICBoYW5kbGVfbXVsdGlsaWI7CisgIGhhbmRsZV90ZXhpbmZvOworICBoYW5kbGVfZW1hY3NfbGlzcDsKKyAgaGFuZGxlX3B5dGhvbjsKKyAgaGFuZGxlX2phdmE7CisgIGhhbmRsZV9tYW5fcGFnZXM7CisgIGhhbmRsZV9kYXRhOworICBoYW5kbGVfaGVhZGVyczsKKyAgaGFuZGxlX3N1YmRpcnM7CisgIGhhbmRsZV90YWdzOworICBoYW5kbGVfbWlub3Jfb3B0aW9uczsKKyAgIyBNdXN0IGNvbWUgYWZ0ZXIgaGFuZGxlX3Byb2dyYW1zIHNvIHRoYXQgJWtub3duX3Byb2dyYW1zIGlzIHVwLXRvLWRhdGUuCisgIGhhbmRsZV90ZXN0czsKKworICAjIFRoaXMgbXVzdCBjb21lIGFmdGVyIG1vc3Qgb3RoZXIgcnVsZXMuCisgIGhhbmRsZV9kaXN0OworCisgIGhhbmRsZV9mb290ZXI7CisgIGRvX2NoZWNrX21lcmdlX3RhcmdldDsKKyAgaGFuZGxlX2FsbCAoJG1ha2VmaWxlKTsKKworICAjIEZJWE1FOiBHcm9zcyEKKyAgaWYgKHZhciAoJ2xpYl9MVExJQlJBUklFUycpICYmIHZhciAoJ2Jpbl9QUk9HUkFNUycpKQorICAgIHsKKyAgICAgICRvdXRwdXRfcnVsZXMgLj0gImluc3RhbGwtYmluUFJPR1JBTVM6IGluc3RhbGwtbGliTFRMSUJSQVJJRVNcblxuIjsKKyAgICB9CisgIGlmICh2YXIgKCdub2Jhc2VfbGliX0xUTElCUkFSSUVTJykgJiYgdmFyICgnYmluX1BST0dSQU1TJykpCisgICAgeworICAgICAgJG91dHB1dF9ydWxlcyAuPSAiaW5zdGFsbC1iaW5QUk9HUkFNUzogaW5zdGFsbC1ub2Jhc2VfbGliTFRMSUJSQVJJRVNcblxuIjsKKyAgICB9CisKKyAgaGFuZGxlX2luc3RhbGw7CisgIGhhbmRsZV9jbGVhbiAoJG1ha2VmaWxlKTsKKyAgaGFuZGxlX2ZhY3RvcmVkX2RlcGVuZGVuY2llczsKKworICAjIENvbWVzIGxhc3QsIGJlY2F1c2UgYWxsIHRoZSBhYm92ZSBwcm9jZWR1cmVzIG1heSBoYXZlCisgICMgZGVmaW5lZCBvciBvdmVycmlkZGVuIHZhcmlhYmxlcy4KKyAgJG91dHB1dF92YXJzIC49IG91dHB1dF92YXJpYWJsZXM7CisKKyAgY2hlY2tfdHlwb3M7CisKKyAgbXkgKCRvdXRfZmlsZSkgPSAkb3V0cHV0X2RpcmVjdG9yeSAuICcvJyAuICRtYWtlZmlsZV9pbjsKKworICBpZiAoJGV4aXRfY29kZSAhPSAwKQorICAgIHsKKyAgICAgIHZlcmIgIm5vdCB3cml0aW5nICRvdXRfZmlsZSBiZWNhdXNlIG9mIGVhcmxpZXIgZXJyb3JzIjsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKCEgLWQgKCRvdXRwdXRfZGlyZWN0b3J5IC4gJy8nIC4gJGFtX3JlbGF0aXZlX2RpcikpCisgICAgeworICAgICAgbWtkaXIgKCRvdXRwdXRfZGlyZWN0b3J5IC4gJy8nIC4gJGFtX3JlbGF0aXZlX2RpciwgMDc1NSk7CisgICAgfQorCisgICMgV2UgbWFrZSBzdXJlIHRoYXQgYGFsbDonIGlzIHRoZSBmaXJzdCB0YXJnZXQuCisgIG15ICRvdXRwdXQgPQorICAgICIkb3V0cHV0X3ZhcnMkb3V0cHV0X2FsbCRvdXRwdXRfaGVhZGVyJG91dHB1dF9ydWxlcyRvdXRwdXRfdHJhaWxlciI7CisKKyAgIyBEZWNpZGUgd2hldGhlciB3ZSBtdXN0IHVwZGF0ZSB0aGUgb3V0cHV0IGZpbGUgb3Igbm90LgorICAjIFdlIGhhdmUgdG8gdXBkYXRlIGluIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9ucy4KKyAgIyAgKiAkZm9yY2VfZ2VuZXJhdGlvbiBpcyBzZXQuCisgICMgICogYW55IG9mIHRoZSBvdXRwdXQgZGVwZW5kZW5jaWVzIGlzIHlvdW5nZXIgdGhhbiB0aGUgb3V0cHV0CisgICMgICogdGhlIGNvbnRlbnRzIG9mIHRoZSBvdXRwdXQgaXMgZGlmZmVyZW50ICh0aGlzIGNhbiBoYXBwZW4KKyAgIyAgICBpZiB0aGUgcHJvamVjdCBoYXMgYmVlbiBwb3B1bGF0ZWQgd2l0aCBhIGZpbGUgbGlzdGVkIGluCisgICMgICAgQGNvbW1vbl9maWxlcyBzaW5jZSB0aGUgbGFzdCBydW4pLgorICAjIE91dHB1dCdzIGRlcGVuZGVuY2llcyBhcmUgc3BsaXQgaW4gdHdvIHNldHM6CisgICMgICogZGVwZW5kZW5jaWVzIHdoaWNoIGFyZSBhbHNvIGNvbmZpZ3VyZSBkZXBlbmRlbmNpZXMKKyAgIyAgICBUaGVzZSBkbyBub3QgY2hhbmdlIGJldHdlZW4gZWFjaCBNYWtlZmlsZS5hbQorICAjICAqIG90aGVyIGRlcGVuZGVuY2llcywgc3BlY2lmaWMgdG8gdGhlIE1ha2VmaWxlLmFtIGJlaW5nIHByb2Nlc3NlZAorICAjICAgIChzdWNoIGFzIHRoZSBNYWtlZmlsZS5hbSBpdHNlbGYsIG9yIGFueSBNYWtlZmlsZSBmcmFnbWVudAorICAjICAgIGl0IGluY2x1ZGVzKS4KKyAgbXkgJHRpbWVzdGFtcCA9IG10aW1lICRvdXRfZmlsZTsKKyAgaWYgKCEgJGZvcmNlX2dlbmVyYXRpb24KKyAgICAgICYmICRjb25maWd1cmVfZGVwc19ncmVhdGVzdF90aW1lc3RhbXAgPCAkdGltZXN0YW1wCisgICAgICAmJiAkb3V0cHV0X2RlcHNfZ3JlYXRlc3RfdGltZXN0YW1wIDwgJHRpbWVzdGFtcAorICAgICAgJiYgJG91dHB1dCBlcSBjb250ZW50cyAoJG91dF9maWxlKSkKKyAgICB7CisgICAgICB2ZXJiICIkb3V0X2ZpbGUgdW5jaGFuZ2VkIjsKKyAgICAgICMgTm8gbmVlZCB0byB1cGRhdGUuCisgICAgICByZXR1cm47CisgICAgfQorCisgIGlmICgtZSAkb3V0X2ZpbGUpCisgICAgeworICAgICAgdW5saW5rICgkb3V0X2ZpbGUpCisJb3IgZmF0YWwgImNhbm5vdCByZW1vdmUgJG91dF9maWxlOiAkIVxuIjsKKyAgICB9CisKKyAgbXkgJGdtX2ZpbGUgPSBuZXcgQXV0b21ha2U6OlhGaWxlICI+ICRvdXRfZmlsZSI7CisgIHZlcmIgImNyZWF0aW5nICRvdXRfZmlsZSI7CisgIHByaW50ICRnbV9maWxlICRvdXRwdXQ7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFByaW50IHVzYWdlIGluZm9ybWF0aW9uLgorc3ViIHVzYWdlICgpCit7CisgICAgcHJpbnQgIlVzYWdlOiAkMCBbT1BUSU9OXSAuLi4gW01ha2VmaWxlXS4uLgorCitHZW5lcmF0ZSBNYWtlZmlsZS5pbiBmb3IgY29uZmlndXJlIGZyb20gTWFrZWZpbGUuYW0uCisKK09wZXJhdGlvbiBtb2RlczoKKyAgICAgIC0taGVscCAgICAgICAgICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgICAgICAtLXZlcnNpb24gICAgICAgICAgICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICB2ZXJib3NlbHkgbGlzdCBmaWxlcyBwcm9jZXNzZWQKKyAgICAgIC0tbm8tZm9yY2UgICAgICAgICAgIG9ubHkgdXBkYXRlIE1ha2VmaWxlLmluJ3MgdGhhdCBhcmUgb3V0IG9mIGRhdGUKKyAgLVcsIC0td2FybmluZ3M9Q0FURUdPUlkgIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGluZyBpbiBDQVRFR09SWQorCitEZXBlbmRlbmN5IHRyYWNraW5nOgorICAtaSwgLS1pZ25vcmUtZGVwcyAgICAgIGRpc2FibGUgZGVwZW5kZW5jeSB0cmFja2luZyBjb2RlCisgICAgICAtLWluY2x1ZGUtZGVwcyAgICAgZW5hYmxlIGRlcGVuZGVuY3kgdHJhY2tpbmcgY29kZQorCitGbGF2b3JzOgorICAgICAgLS1jeWdudXMgICAgICAgICAgIGFzc3VtZSBwcm9ncmFtIGlzIHBhcnQgb2YgQ3lnbnVzLXN0eWxlIHRyZWUKKyAgICAgIC0tZm9yZWlnbiAgICAgICAgICBzZXQgc3RyaWN0bmVzcyB0byBmb3JlaWduCisgICAgICAtLWduaXRzICAgICAgICAgICAgc2V0IHN0cmljdG5lc3MgdG8gZ25pdHMKKyAgICAgIC0tZ251ICAgICAgICAgICAgICBzZXQgc3RyaWN0bmVzcyB0byBnbnUKKworTGlicmFyeSBmaWxlczoKKyAgLWEsIC0tYWRkLW1pc3NpbmcgICAgICBhZGQgbWlzc2luZyBzdGFuZGFyZCBmaWxlcyB0byBwYWNrYWdlCisgICAgICAtLWxpYmRpcj1ESVIgICAgICAgZGlyZWN0b3J5IHN0b3JpbmcgbGlicmFyeSBmaWxlcworICAtYywgLS1jb3B5ICAgICAgICAgICAgIHdpdGggLWEsIGNvcHkgbWlzc2luZyBmaWxlcyAoZGVmYXVsdCBpcyBzeW1saW5rKQorICAtZiwgLS1mb3JjZS1taXNzaW5nICAgIGZvcmNlIHVwZGF0ZSBvZiBzdGFuZGFyZCBmaWxlcworCisiOworICAgIEF1dG9tYWtlOjpDaGFubmVsRGVmczo6dXNhZ2U7CisKKyAgICBteSAoJGxhc3QsIEBsY29tbSk7CisgICAgJGxhc3QgPSAnJzsKKyAgICBmb3JlYWNoIG15ICRpdGVyIChzb3J0ICgoQGNvbW1vbl9maWxlcywgQGNvbW1vbl9zb21ldGltZXMpKSkKKyAgICB7CisJcHVzaCAoQGxjb21tLCAkaXRlcikgdW5sZXNzICRpdGVyIGVxICRsYXN0OworCSRsYXN0ID0gJGl0ZXI7CisgICAgfQorCisgICAgbXkgQGZvdXI7CisgICAgcHJpbnQgIlxuRmlsZXMgd2hpY2ggYXJlIGF1dG9tYXRpY2FsbHkgZGlzdHJpYnV0ZWQsIGlmIGZvdW5kOlxuIjsKKyAgICBmb3JtYXQgVVNBR0VfRk9STUFUID0KKyAgQDw8PDw8PDw8PDw8PDw8PDwgICBAPDw8PDw8PDw8PDw8PDw8PCAgIEA8PDw8PDw8PDw8PDw8PDw8ICAgQDw8PDw8PDw8PDw8PDw8PDwKKyAgJGZvdXJbMF0sICAgICAgICAgICAkZm91clsxXSwgICAgICAgICAgICRmb3VyWzJdLCAgICAgICAgICAgJGZvdXJbM10KKy4KKyAgICAkfiA9ICJVU0FHRV9GT1JNQVQiOworCisgICAgbXkgJGNvbHMgPSA0OworICAgIG15ICRyb3dzID0gaW50KEBsY29tbSAvICRjb2xzKTsKKyAgICBteSAkcmVzdCA9IEBsY29tbSAlICRjb2xzOworCisgICAgaWYgKCRyZXN0KQorICAgIHsKKwkkcm93cysrOworICAgIH0KKyAgICBlbHNlCisgICAgeworCSRyZXN0ID0gJGNvbHM7CisgICAgfQorCisgICAgZm9yIChteSAkeSA9IDA7ICR5IDwgJHJvd3M7ICR5KyspCisgICAgeworCUBmb3VyID0gKCIiLCAiIiwgIiIsICIiKTsKKwlmb3IgKG15ICR4ID0gMDsgJHggPCAkY29sczsgJHgrKykKKwl7CisJICAgIGxhc3QgaWYgJHkgKyAxID09ICRyb3dzICYmICR4ID09ICRyZXN0OworCisJICAgIG15ICRpZHggPSAoKCR4ID4gJHJlc3QpCisJCSAgICAgICA/ICAoJHJvd3MgKiAkcmVzdCArICgkcm93cyAtIDEpICogKCR4IC0gJHJlc3QpKQorCQkgICAgICAgOiAoJHJvd3MgKiAkeCkpOworCisJICAgICRpZHggKz0gJHk7CisJICAgICRmb3VyWyR4XSA9ICRsY29tbVskaWR4XTsKKwl9CisJd3JpdGU7CisgICAgfQorCisgICAgcHJpbnQgIlxuUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZVxAZ251Lm9yZz4uXG4iOworCisgICAgIyAtLWhlbHAgYWx3YXlzIHJldHVybnMgMCBwZXIgR05VIHN0YW5kYXJkcy4KKyAgICBleGl0IDA7Cit9CisKKworIyAmdmVyc2lvbiAoKQorIyAtLS0tLS0tLS0tLQorIyBQcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uCitzdWIgdmVyc2lvbiAoKQoreworICBwcmludCA8PEVPRjsKK2F1dG9tYWtlIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OCitDb3B5cmlnaHQgKEMpIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitMaWNlbnNlIEdQTHYyKzogR05VIEdQTCB2ZXJzaW9uIDIgb3IgbGF0ZXIgPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbD4KK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRlIGl0LgorVGhlcmUgaXMgTk8gV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy4KKworV3JpdHRlbiBieSBUb20gVHJvbWV5IDx0cm9tZXlcQHJlZGhhdC5jb20+CisgICAgICAgYW5kIEFsZXhhbmRyZSBEdXJldC1MdXR6IDxhZGxcQGdudS5vcmc+LgorRU9GCisgICMgLS12ZXJzaW9uIGFsd2F5cyByZXR1cm5zIDAgcGVyIEdOVSBzdGFuZGFyZHMuCisgIGV4aXQgMDsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFBhcnNlIGNvbW1hbmQgbGluZS4KK3N1YiBwYXJzZV9hcmd1bWVudHMgKCkKK3sKKyAgIyBTdGFydCBvZmYgYXMgZ251LgorICBzZXRfc3RyaWN0bmVzcyAoJ2dudScpOworCisgIG15ICRjbGlfd2hlcmUgPSBuZXcgQXV0b21ha2U6OkxvY2F0aW9uOworICBteSAlY2xpX29wdGlvbnMgPQorICAgICgKKyAgICAgJ2xpYmRpcj1zJwk9PiBcJGxpYmRpciwKKyAgICAgJ2dudScJCT0+IHN1YiB7IHNldF9zdHJpY3RuZXNzICgnZ251Jyk7IH0sCisgICAgICdnbml0cycJCT0+IHN1YiB7IHNldF9zdHJpY3RuZXNzICgnZ25pdHMnKTsgfSwKKyAgICAgJ2N5Z251cycJICAgICAgICA9PiBzdWIgeyBzZXRfZ2xvYmFsX29wdGlvbiAoJ2N5Z251cycsICRjbGlfd2hlcmUpOyB9LAorICAgICAnZm9yZWlnbicgICAgICAgICAgPT4gc3ViIHsgc2V0X3N0cmljdG5lc3MgKCdmb3JlaWduJyk7IH0sCisgICAgICdpbmNsdWRlLWRlcHMnCT0+IHN1YiB7IHVuc2V0X2dsb2JhbF9vcHRpb24gKCduby1kZXBlbmRlbmNpZXMnKTsgfSwKKyAgICAgJ2l8aWdub3JlLWRlcHMnCT0+IHN1YiB7IHNldF9nbG9iYWxfb3B0aW9uICgnbm8tZGVwZW5kZW5jaWVzJywKKwkJCQkJCSAgICAkY2xpX3doZXJlKTsgfSwKKyAgICAgJ25vLWZvcmNlJwk9PiBzdWIgeyAkZm9yY2VfZ2VuZXJhdGlvbiA9IDA7IH0sCisgICAgICdmfGZvcmNlLW1pc3NpbmcnICA9PiBcJGZvcmNlX21pc3NpbmcsCisgICAgICdvfG91dHB1dC1kaXI9cycJPT4gXCRvdXRwdXRfZGlyZWN0b3J5LAorICAgICAnYXxhZGQtbWlzc2luZycJPT4gXCRhZGRfbWlzc2luZywKKyAgICAgJ2N8Y29weScJCT0+IFwkY29weV9taXNzaW5nLAorICAgICAndnx2ZXJib3NlJwk9PiBzdWIgeyBzZXR1cF9jaGFubmVsICd2ZXJiJywgc2lsZW50ID0+IDA7IH0sCisgICAgICdXfHdhcm5pbmdzPXMnICAgICA9PiBcJnBhcnNlX3dhcm5pbmdzLAorICAgICAjIFRoZXNlIGxvbmcgb3B0aW9ucyAoLS1XZXJyb3IgYW5kIC0tV25vLWVycm9yKSBmb3IgYmFja3dhcmQKKyAgICAgIyBjb21wYXRpYmlsaXR5LiAgVXNlIC1XZXJyb3IgYW5kIC1Xbm8tZXJyb3IgdG9kYXkuCisgICAgICdXZXJyb3InICAgICAgICAgICA9PiBzdWIgeyBwYXJzZV93YXJuaW5ncyAnVycsICdlcnJvcic7IH0sCisgICAgICdXbm8tZXJyb3InICAgICAgICA9PiBzdWIgeyBwYXJzZV93YXJuaW5ncyAnVycsICduby1lcnJvcic7IH0sCisgICAgICk7CisgIHVzZSBHZXRvcHQ6Okxvbmc7CisgIEdldG9wdDo6TG9uZzo6Y29uZmlnICgiYnVuZGxpbmciLCAicGFzc190aHJvdWdoIik7CisKKyAgIyBTZWUgaWYgLS12ZXJzaW9uIG9yIC0taGVscCBpcyB1c2VkLiAgV2Ugd2FudCB0byBwcm9jZXNzIHRoZXNlIGJlZm9yZQorICAjIGFueXRoaW5nIGVsc2UgYmVjYXVzZSB0aGUgR05VIENvZGluZyBTdGFuZGFyZHMgcmVxdWlyZSB1cyB0bworICAjIGBleGl0IDAnIGFmdGVyIHByb2Nlc3NpbmcgdGhlc2Ugb3B0aW9ucywgYW5kIHdlIGNhbid0IGd1YXJhbnRlZSB0aGlzCisgICMgaWYgd2UgdHJlYXQgb3RoZXIgb3B0aW9ucyBmaXJzdC4gIChIYW5kbGluZyBvdGhlciBvcHRpb25zIGZpcnN0CisgICMgY291bGQgcHJvZHVjZSBlcnJvciBkaWFnbm9zdGljcywgYW5kIGluIHRoaXMgY29uZGl0aW9uIGl0IGlzCisgICMgY29uZnVzaW5nIGlmIEF1dG9tYWtlIGRvZXMgYGV4aXQgMCcuKQorICBteSAlY2xpX29wdGlvbnNfMXN0X3Bhc3MgPQorICAgICgKKyAgICAgJ3ZlcnNpb24nID0+IFwmdmVyc2lvbiwKKyAgICAgJ2hlbHAnICAgID0+IFwmdXNhZ2UsCisgICAgICMgUmVjb2duaXplIGFsbCBvdGhlciBvcHRpb25zIChhbmQgdGhlaXIgYXJndW1lbnRzKSBidXQgZG8gbm90aGluZy4KKyAgICAgbWFwIHsgJF8gPT4gc3ViIHt9IH0gKGtleXMgJWNsaV9vcHRpb25zKQorICAgICApOworICBteSBAQVJHVl9iYWNrdXAgPSBAQVJHVjsKKyAgR2V0b3B0OjpMb25nOjpHZXRPcHRpb25zICVjbGlfb3B0aW9uc18xc3RfcGFzcworICAgIG9yIGV4aXQgMTsKKyAgQEFSR1YgPSBAQVJHVl9iYWNrdXA7CisKKyAgIyBOb3cgKnJlYWxseSogcHJvY2VzcyB0aGUgb3B0aW9ucy4gIFRoaXMgdGltZSB3ZSBrbm93IHRoYXQgLS1oZWxwCisgICMgYW5kIC0tdmVyc2lvbiBhcmUgbm90IHByZXNlbnQsIGJ1dCB3ZSBzcGVjaWZ5IHRoZW0gbm9uZXRoZWxlc3Mgc28KKyAgIyB0aGF0IGFtYmlndW91cyBhYmJyZXZpYXRpb24gYXJlIGRpYWdub3NlZC4KKyAgR2V0b3B0OjpMb25nOjpHZXRPcHRpb25zICVjbGlfb3B0aW9ucywgJ3ZlcnNpb24nID0+IHN1YiB7fSwgJ2hlbHAnID0+IHN1YiB7fQorICAgIG9yIGV4aXQgMTsKKworICBpZiAoZGVmaW5lZCAkb3V0cHV0X2RpcmVjdG9yeSkKKyAgICB7CisgICAgICBtc2cgJ29ic29sZXRlJywgImAtLW91dHB1dC1kaXInIGlzIGRlcHJlY2F0ZWRcbiI7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgIyBJbiB0aGUgbmV4dCByZWxlYXNlIHdlJ2xsIHJlbW92ZSB0aGlzIGVudGlyZWx5LgorICAgICAgJG91dHB1dF9kaXJlY3RvcnkgPSAnLic7CisgICAgfQorCisgIHJldHVybiB1bmxlc3MgQEFSR1Y7CisKKyAgaWYgKCRBUkdWWzBdID1+IC9eLS4vKQorICAgIHsKKyAgICAgIG15ICVhcmdvcHRzOworICAgICAgZm9yIG15ICRrIChrZXlzICVjbGlfb3B0aW9ucykKKwl7CisJICBpZiAoJGsgPX4gLyguKik9cyQvKQorCSAgICB7CisJICAgICAgbWFwIHsgJGFyZ29wdHN7KGxlbmd0aCAoJF8pID09IDEpCisJCQkgICAgID8gIi0kXyIgOiAiLS0kXyIgfSA9IDE7IH0gKHNwbGl0ICgvXHwvLCAkMSkpOworCSAgICB9CisJfQorICAgICAgaWYgKCRBUkdWWzBdIGVxICctLScpCisJeworCSAgc2hpZnQgQEFSR1Y7CisJfQorICAgICAgZWxzaWYgKGV4aXN0cyAkYXJnb3B0c3skQVJHVlswXX0pCisJeworCSAgZmF0YWwgKCJvcHRpb24gYCRBUkdWWzBdJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorCQkgLiAiVHJ5IGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBmYXRhbCAoInVucmVjb2duaXplZCBvcHRpb24gYCRBUkdWWzBdJy5cbiIKKwkJIC4gIlRyeSBgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iKTsKKwl9CisgICAgfQorCisgIG15ICRlcnJzcGVjID0gMDsKKyAgZm9yZWFjaCBteSAkYXJnIChAQVJHVikKKyAgICB7CisgICAgICBmYXRhbCAoImVtcHR5IGFyZ3VtZW50XG5UcnkgYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIikKKwlpZiAoJGFyZyBlcSAnJyk7CisKKyAgICAgICMgSGFuZGxlICRsb2NhbDokaW5wdXQgc3ludGF4LgorICAgICAgbXkgKCRsb2NhbCwgQHJlc3QpID0gc3BsaXQgKC86LywgJGFyZyk7CisgICAgICBAcmVzdCA9ICgiJGxvY2FsLmluIiwpIHVubGVzcyBAcmVzdDsKKyAgICAgIG15ICRpbnB1dCA9IGxvY2F0ZV9hbSBAcmVzdDsKKyAgICAgIGlmICgkaW5wdXQpCisJeworCSAgcHVzaCBAaW5wdXRfZmlsZXMsICRpbnB1dDsKKwkgICRvdXRwdXRfZmlsZXN7JGlucHV0fSA9IGpvaW4gKCc6JywgKCRsb2NhbCwgQHJlc3QpKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgZXJyb3IgIm5vIEF1dG9tYWtlIGlucHV0IGZpbGUgZm91bmQgZm9yIGAkYXJnJyI7CisJICAkZXJyc3BlYyA9IDE7CisJfQorICAgIH0KKyAgZmF0YWwgIm5vIGlucHV0IGZpbGUgZm91bmQgYW1vbmcgc3VwcGxpZWQgYXJndW1lbnRzIgorICAgIGlmICRlcnJzcGVjICYmICEgQGlucHV0X2ZpbGVzOworfQorCisKKyMgaGFuZGxlX21ha2VmaWxlICgkTUFLRUZJTEVfSU4pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWFsIHdpdGggJE1BS0VGSUxFX0lOLgorc3ViIGhhbmRsZV9tYWtlZmlsZSAoJCkKK3sKKyAgbXkgKCRmaWxlKSA9ICBAXzsKKyAgKCRhbV9maWxlID0gJGZpbGUpID1+IHMvXC5pbiQvLzsKKyAgaWYgKCEgLWYgKCRhbV9maWxlIC4gJy5hbScpKQorICAgIHsKKyAgICAgIGVycm9yICJgJGFtX2ZpbGUuYW0nIGRvZXMgbm90IGV4aXN0IjsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAjIEFueSB3YXJuaW5nIHNldHRpbmcgbm93IGxvY2FsIHRvIHRoaXMgTWFrZWZpbGUuYW0uCisgICAgICBkdXBfY2hhbm5lbF9zZXR1cDsKKworICAgICAgZ2VuZXJhdGVfbWFrZWZpbGUgKCRhbV9maWxlIC4gJy5hbScsICRmaWxlKTsKKworICAgICAgIyBCYWNrIG91dCBhbnkgd2FybmluZyBzZXR0aW5nLgorICAgICAgZHJvcF9jaGFubmVsX3NldHVwOworICAgIH0KK30KKworIyBoYW5kbGVfbWFrZWZpbGVzX3NlcmlhbCAoKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWFsIHdpdGggYWxsIG1ha2VmaWxlcywgd2l0aG91dCB0aHJlYWRzLgorc3ViIGhhbmRsZV9tYWtlZmlsZXNfc2VyaWFsICgpCit7CisgIGZvcmVhY2ggbXkgJGZpbGUgKEBpbnB1dF9maWxlcykKKyAgICB7CisgICAgICBoYW5kbGVfbWFrZWZpbGUgKCRmaWxlKTsKKyAgICB9Cit9CisKKyMgZ2V0X251bWJlcl9vZl90aHJlYWRzICgpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMb2dpYyBmb3IgZGVjaWRpbmcgaG93IG1hbnkgd29ya2VyIHRocmVhZHMgdG8gdXNlLgorc3ViIGdldF9udW1iZXJfb2ZfdGhyZWFkcworeworICBteSAkbnRocmVhZHMgPSAkRU5WeydBVVRPTUFLRV9KT0JTJ30gfHwgMDsKKworICAkbnRocmVhZHMgPSAwCisgICAgdW5sZXNzICRudGhyZWFkcyA9fiAvXlswLTldKyQvOworCisgICMgSXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIHVzZSBtb3JlIHRocmVhZHMgdGhhbiBtYWtlZmlsZXMsCisgIG15ICRtYXhfdGhyZWFkcyA9IEBpbnB1dF9maWxlczsKKworICAjIGJ1dCBhIHNpbmdsZSB3b3JrZXIgdGhyZWFkIGlzIGhlbHBmdWwgZm9yIGV4cG9zaW5nIGJ1Z3MuCisgIGlmICgkYXV0b21ha2Vfd2lsbF9wcm9jZXNzX2F1eF9kaXIgJiYgJG1heF90aHJlYWRzID4gMSkKKyAgICB7CisgICAgICAkbWF4X3RocmVhZHMtLTsKKyAgICB9CisgIGlmICgkbnRocmVhZHMgPiAkbWF4X3RocmVhZHMpCisgICAgeworICAgICAgJG50aHJlYWRzID0gJG1heF90aHJlYWRzOworICAgIH0KKyAgcmV0dXJuICRudGhyZWFkczsKK30KKworIyBoYW5kbGVfbWFrZWZpbGVzX3RocmVhZGVkICgkTlRIUkVBRFMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVhbCB3aXRoIGFsbCBtYWtlZmlsZXMsIHVzaW5nIHRocmVhZHMuICBUaGUgZ2VuZXJhbCBzdHJhdGVneSBpcyB0bworIyBzcGF3biBOVEhSRUFEUyB3b3JrZXIgdGhyZWFkcywgZGlzcGF0Y2ggbWFrZWZpbGVzIHRvIHRoZW0sIGFuZCBsZXQgdGhlCisjIHdvcmtlciB0aHJlYWRzIHB1c2ggYmFjayBldmVyeXRoaW5nIHRoYXQgbmVlZHMgc2VyaWFsaXphdGlvbjoKKyMgKiB3YXJuaW5nIGFuZCAobm9ybWFsKSBlcnJvciBtZXNzYWdlcywgZm9yIHN0YWJsZSBzdGRlcnIgb3V0cHV0CisjICAgb3JkZXIgYW5kIGNvbnRlbnQgKGF2b2lkaW5nIGR1cGxpY2F0ZXMsIGZvciBleGFtcGxlKSwKKyMgKiByYWNlcyB3aGVuIGluc3RhbGxpbmcgYXV4IGZpbGVzIChhbmQgcmVzcGVjdGl2ZSBtZXNzYWdlcyksCisjICogcmFjZXMgd2hlbiBjb2xsZWN0aW5nIGF1eCBmaWxlcyBmb3IgZGlzdHJpYnV0aW9uLgorIworIyBUaGUgbGF0dGVyIHJlcXVpcmVzIHRoYXQgdGhlIG1ha2VmaWxlIHRoYXQgZGVhbHMgd2l0aCB0aGUgYXV4IGRpcgorIyBmaWxlcyBiZSBoYW5kbGVkIGxhc3QsIGRvbmUgYnkgdGhlIG1hc3RlciB0aHJlYWQuCitzdWIgaGFuZGxlX21ha2VmaWxlc190aHJlYWRlZCAoJCkKK3sKKyAgbXkgKCRudGhyZWFkcykgPSBAXzsKKworICBteSBAcXVldWVkX2lucHV0X2ZpbGVzID0gQGlucHV0X2ZpbGVzOworICBteSAkbGFzdF9pbnB1dF9maWxlID0gdW5kZWY7CisgIGlmICgkYXV0b21ha2Vfd2lsbF9wcm9jZXNzX2F1eF9kaXIpCisgICAgeworICAgICAgJGxhc3RfaW5wdXRfZmlsZSA9IHBvcCBAcXVldWVkX2lucHV0X2ZpbGVzOworICAgIH0KKworICAjIFRoZSBmaWxlIHF1ZXVlIGRpc3RyaWJ1dGVzIGFsbCBtYWtlZmlsZXMsIHRoZSBtZXNzYWdlIHF1ZXVlcworICAjIGNvbGxlY3QgYWxsIHNlcmlhbGl6YXRpb25zIG5lZWRlZCBmb3IgcmVzcGVjdGl2ZSBmaWxlcy4KKyAgbXkgJGZpbGVfcXVldWUgPSBUaHJlYWQ6OlF1ZXVlLT5uZXc7CisgIG15ICVtc2dfcXVldWVzOworICBmb3JlYWNoIG15ICRmaWxlIChAcXVldWVkX2lucHV0X2ZpbGVzKQorICAgIHsKKyAgICAgICRtc2dfcXVldWVzeyRmaWxlfSA9IFRocmVhZDo6UXVldWUtPm5ldzsKKyAgICB9CisKKyAgdmVyYiAic3Bhd25pbmcgJG50aHJlYWRzIHdvcmtlciB0aHJlYWRzIjsKKyAgbXkgQHRocmVhZHMgPSAoMSAuLiAkbnRocmVhZHMpOworICBmb3JlYWNoIG15ICR0IChAdGhyZWFkcykKKyAgICB7CisgICAgICAkdCA9IHRocmVhZHMtPm5ldyAoc3ViCisJeworCSAgd2hpbGUgKG15ICRmaWxlID0gJGZpbGVfcXVldWUtPmRlcXVldWUpCisJICAgIHsKKwkgICAgICB2ZXJiICJoYW5kbGluZyAkZmlsZSI7CisJICAgICAgbXkgJHF1ZXVlID0gJG1zZ19xdWV1ZXN7JGZpbGV9OworCSAgICAgIHNldHVwX2NoYW5uZWxfcXVldWUgKCRxdWV1ZSwgUVVFVUVfTUVTU0FHRSk7CisJICAgICAgJHJlcXVpcmVkX2NvbmZfZmlsZV9xdWV1ZSA9ICRxdWV1ZTsKKwkgICAgICBoYW5kbGVfbWFrZWZpbGUgKCRmaWxlKTsKKwkgICAgICAkcXVldWUtPmVucXVldWUgKHVuZGVmKTsKKwkgICAgICBzZXR1cF9jaGFubmVsX3F1ZXVlICh1bmRlZiwgdW5kZWYpOworCSAgICAgICRyZXF1aXJlZF9jb25mX2ZpbGVfcXVldWUgPSB1bmRlZjsKKwkgICAgfQorCSAgcmV0dXJuICRleGl0X2NvZGU7CisJfSk7CisgICAgfQorCisgICMgUXVldWUgYWxsIG5vcm1hbCBtYWtlZmlsZXMuCisgIHZlcmIgInF1ZXVpbmcgIiAuIEBxdWV1ZWRfaW5wdXRfZmlsZXMgLiAiIGlucHV0IGZpbGVzIjsKKyAgJGZpbGVfcXVldWUtPmVucXVldWUgKEBxdWV1ZWRfaW5wdXRfZmlsZXMsICh1bmRlZikgeCBAdGhyZWFkcyk7CisKKyAgIyBDb2xsZWN0IGFuZCBwcm9jZXNzIHNlcmlhbGl6YXRpb25zLgorICBmb3JlYWNoIG15ICRmaWxlIChAcXVldWVkX2lucHV0X2ZpbGVzKQorICAgIHsKKyAgICAgIHZlcmIgImRlcXVldWluZyBtZXNzYWdlcyBmb3IgIiAuICRmaWxlOworICAgICAgcmVzZXRfbG9jYWxfZHVwbGljYXRlcyAoKTsKKyAgICAgIG15ICRxdWV1ZSA9ICRtc2dfcXVldWVzeyRmaWxlfTsKKyAgICAgIHdoaWxlIChteSAka2V5ID0gJHF1ZXVlLT5kZXF1ZXVlKQorCXsKKwkgIGlmICgka2V5IGVxIFFVRVVFX01FU1NBR0UpCisJICAgIHsKKwkgICAgICBwb3BfY2hhbm5lbF9xdWV1ZSAoJHF1ZXVlKTsKKwkgICAgfQorCSAgZWxzaWYgKCRrZXkgZXEgUVVFVUVfQ09ORl9GSUxFKQorCSAgICB7CisJICAgICAgcmVxdWlyZV9xdWV1ZWRfY29uZl9maWxlICgkcXVldWUpOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBwcm9nX2Vycm9yICJ1bmV4cGVjdGVkIGtleSAka2V5IjsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgZm9yZWFjaCBteSAkdCAoQHRocmVhZHMpCisgICAgeworICAgICAgbXkgQGV4aXRfdGhyZWFkID0gJHQtPmpvaW47CisgICAgICAkZXhpdF9jb2RlID0gJGV4aXRfdGhyZWFkWzBdCisJaWYgKCRleGl0X3RocmVhZFswXSA+ICRleGl0X2NvZGUpOworICAgIH0KKworICAjIFRoZSBtYXN0ZXIgcHJvY2Vzc2VzIHRoZSBsYXN0IGZpbGUuCisgIGlmICgkYXV0b21ha2Vfd2lsbF9wcm9jZXNzX2F1eF9kaXIpCisgICAgeworICAgICAgdmVyYiAicHJvY2Vzc2luZyBsYXN0IGlucHV0IGZpbGUiOworICAgICAgaGFuZGxlX21ha2VmaWxlICgkbGFzdF9pbnB1dF9maWxlKTsKKyAgICB9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBQYXJzZSB0aGUgV0FSTklOR1MgZW52aXJvbm1lbnQgdmFyaWFibGUuCitwYXJzZV9XQVJOSU5HUzsKKworIyBQYXJzZSBjb21tYW5kIGxpbmUuCitwYXJzZV9hcmd1bWVudHM7CisKKyRjb25maWd1cmVfYWMgPSByZXF1aXJlX2NvbmZpZ3VyZV9hYzsKKworIyBEbyBjb25maWd1cmUuYWMgc2NhbiBvbmx5IG9uY2UuCitzY2FuX2F1dG9jb25mX2ZpbGVzOworCitpZiAoISBAaW5wdXRfZmlsZXMpCisgIHsKKyAgICBteSAkbXNnID0gJyc7CisgICAgJG1zZyA9ICJcbkRpZCB5b3UgZm9yZ2V0IEFDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGVdKSBpbiAkY29uZmlndXJlX2FjPyIKKyAgICAgIGlmIC1mICdNYWtlZmlsZS5hbSc7CisgICAgZmF0YWwgKCJubyBgTWFrZWZpbGUuYW0nIGZvdW5kIGZvciBhbnkgY29uZmlndXJlIG91dHB1dCRtc2ciKTsKKyAgfQorCitteSAkbnRocmVhZHMgPSBnZXRfbnVtYmVyX29mX3RocmVhZHMgKCk7CisKK2lmICgkcGVybF90aHJlYWRzICYmICRudGhyZWFkcyA+PSAxKQorICB7CisgICAgaGFuZGxlX21ha2VmaWxlc190aHJlYWRlZCAoJG50aHJlYWRzKTsKKyAgfQorZWxzZQorICB7CisgICAgaGFuZGxlX21ha2VmaWxlc19zZXJpYWwgKCk7CisgIH0KKworZXhpdCAkZXhpdF9jb2RlOworCisKKyMjIyBTZXR1cCAiR05VIiBzdHlsZSBmb3IgcGVybC1tb2RlIGFuZCBjcGVybC1tb2RlLgorIyMgTG9jYWwgVmFyaWFibGVzOgorIyMgcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIHBlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIHBlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2UtaW1hZ2luYXJ5LW9mZnNldDogMAorIyMgcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIGNwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtZXh0cmEtbmV3bGluZS1iZWZvcmUtYnJhY2U6IHQKKyMjIGNwZXJsLW1lcmdlLXRyYWlsaW5nLWVsc2U6IG5pbAorIyMgY3BlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIEVuZDoKZGlmZiAtLWdpdCBhL2Jpbi9hdXRvcmVjb25mIGIvYmluL2F1dG9yZWNvbmYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDlmZWIzMgotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hdXRvcmVjb25mCkBAIC0wLDAgKzEsNzA4IEBACisjISAvdXNyL2Jpbi9wZXJsIC13CisjIC0qLSBwZXJsIC0qLQorIyBHZW5lcmF0ZWQgZnJvbSBhdXRvcmVjb25mLmluOyBkbyBub3QgZWRpdCBieSBoYW5kLgorCitldmFsICdjYXNlICQjIGluIDApIGV4ZWMgL3Vzci9iaW4vcGVybCAtUyAiJDAiOzsgKikgZXhlYyAvdXNyL2Jpbi9wZXJsIC1TICIkMCIgIiRAIjs7IGVzYWMnCisgICAgaWYgMDsKKworIyBhdXRvcmVjb25mIC0gaW5zdGFsbCB0aGUgR05VIEJ1aWxkIFN5c3RlbSBpbiBhIGRpcmVjdG9yeSB0cmVlCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwKKyMgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgV3JpdHRlbiBieSBEYXZpZCBKLiBNYWNLZW56aWUuCisjIEV4dGVuZGVkIGFuZCByZXdyaXR0ZW4gaW4gUGVybCBieSBBa2ltIERlbWFpbGxlLgorCitCRUdJTgoreworICBteSAkcGtnZGF0YWRpciA9ICRFTlZ7J2F1dG9tNHRlX3BlcmxsaWJkaXInfSB8fCAnL3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyL3NoYXJlL2F1dG9jb25mJzsKKyAgdW5zaGlmdCBASU5DLCAkcGtnZGF0YWRpcjsKKworICAjIE92ZXJyaWRlIFNIRUxMLiAgT24gREpHUFAgU0hFTEwgbWF5IG5vdCBiZSBzZXQgdG8gYSBzaGVsbAorICAjIHRoYXQgY2FuIGhhbmRsZSByZWRpcmVjdGlvbiBhbmQgcXVvdGUgYXJndW1lbnRzIGNvcnJlY3RseSwKKyAgIyBlLmcuOiBDT01NQU5ELkNPTS4gIEZvciBESkdQUCBhbHdheXMgdXNlIHRoZSBzaGVsbCB0aGF0IGNvbmZpZ3VyZQorICAjIGhhcyBkZXRlY3RlZC4KKyAgJEVOVnsnU0hFTEwnfSA9ICcvYmluL3NoJyBpZiAoJF5PIGVxICdkb3MnKTsKK30KKwordXNlIEF1dG9tNHRlOjpDaGFubmVsRGVmczsKK3VzZSBBdXRvbTR0ZTo6Q2hhbm5lbHM7Cit1c2UgQXV0b200dGU6OkNvbmZpZ3VyZV9hYzsKK3VzZSBBdXRvbTR0ZTo6RmlsZVV0aWxzOwordXNlIEF1dG9tNHRlOjpHZW5lcmFsOwordXNlIEF1dG9tNHRlOjpYRmlsZTsKKyMgRG8gbm90IHVzZSBDd2Q6OmNoZGlyLCBzaW5jZSBpdCBtaWdodCBoYW5nLgordXNlIEN3ZCAnY3dkJzsKK3VzZSBzdHJpY3Q7CisKKyMjIC0tLS0tLS0tLS0tICMjCisjIyBWYXJpYWJsZXMuICAjIworIyMgLS0tLS0tLS0tLS0gIyMKKworIyAkSEVMUAorIyAtLS0tLQorJGhlbHAgPSAiVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtESVJFQ1RPUlldLi4uCisKK1J1biBgYXV0b2NvbmYnIChhbmQgYGF1dG9oZWFkZXInLCBgYWNsb2NhbCcsIGBhdXRvbWFrZScsIGBhdXRvcG9pbnQnCisoZm9ybWVybHkgYGdldHRleHRpemUnKSwgYW5kIGBsaWJ0b29saXplJyB3aGVyZSBhcHByb3ByaWF0ZSkKK3JlcGVhdGVkbHkgdG8gcmVtYWtlIHRoZSBHTlUgQnVpbGQgU3lzdGVtIGZpbGVzIGluIHNwZWNpZmllZAorRElSRUNUT1JJRVMgYW5kIHRoZWlyIHN1YmRpcmVjdG9yaWVzIChkZWZhdWx0aW5nIHRvIGAuJykuCisKK0J5IGRlZmF1bHQsIGl0IG9ubHkgcmVtYWtlcyB0aG9zZSBmaWxlcyB0aGF0IGFyZSBvbGRlciB0aGFuIHRoZWlyCitzb3VyY2VzLiAgSWYgeW91IGluc3RhbGwgbmV3IHZlcnNpb25zIG9mIHRoZSBHTlUgQnVpbGQgU3lzdGVtLAoreW91IGNhbiBtYWtlIGBhdXRvcmVjb25mJyByZW1ha2UgYWxsIG9mIHRoZSBmaWxlcyBieSBnaXZpbmcgaXQgdGhlCitgLS1mb3JjZScgb3B0aW9uLgorCitPcGVyYXRpb24gbW9kZXM6CisgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgdmVyYm9zZWx5IHJlcG9ydCBwcm9jZXNzaW5nCisgIC1kLCAtLWRlYnVnICAgICAgICAgICAgICBkb24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCisgIC1mLCAtLWZvcmNlICAgICAgICAgICAgICBjb25zaWRlciBhbGwgZmlsZXMgb2Jzb2xldGUKKyAgLWksIC0taW5zdGFsbCAgICAgICAgICAgIGNvcHkgbWlzc2luZyBhdXhpbGlhcnkgZmlsZXMKKyAgICAgIC0tbm8tcmVjdXJzaXZlICAgICAgIGRvbid0IHJlYnVpbGQgc3ViLXBhY2thZ2VzCisgIC1zLCAtLXN5bWxpbmsgICAgICAgICAgICB3aXRoIC1pLCBpbnN0YWxsIHN5bWJvbGljIGxpbmtzIGluc3RlYWQgb2YgY29waWVzCisgIC1tLCAtLW1ha2UgICAgICAgICAgICAgICB3aGVuIGFwcGxpY2FibGUsIHJlLXJ1biAuL2NvbmZpZ3VyZSAmJiBtYWtlCisgIC1XLCAtLXdhcm5pbmdzPUNBVEVHT1JZICByZXBvcnQgdGhlIHdhcm5pbmdzIGZhbGxpbmcgaW4gQ0FURUdPUlkgW3N5bnRheF0KKworIiAuIEF1dG9tNHRlOjpDaGFubmVsRGVmczo6dXNhZ2UgLiAiCisKK1RoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBcYFdBUk5JTkdTXCcgaXMgaG9ub3JlZC4gIFNvbWUgc3VidG9vbHMgbWlnaHQKK3N1cHBvcnQgb3RoZXIgd2FybmluZyB0eXBlcywgdXNpbmcgXGBhbGwnIGlzIGVuY291cmFnZWQuCisKK0xpYnJhcnkgZGlyZWN0b3JpZXM6CisgIC1CLCAtLXByZXBlbmQtaW5jbHVkZT1ESVIgIHByZXBlbmQgZGlyZWN0b3J5IERJUiB0byBzZWFyY2ggcGF0aAorICAtSSwgLS1pbmNsdWRlPURJUiAgICAgICAgICBhcHBlbmQgZGlyZWN0b3J5IERJUiB0byBzZWFyY2ggcGF0aAorCitUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIEFVVE9DT05GLCBBVVRPSEVBREVSLCBBVVRPTUFLRSwgQUNMT0NBTCwKK0FVVE9QT0lOVCwgTElCVE9PTElaRSwgTTQsIGFuZCBNQUtFIGFyZSBob25vcmVkLgorCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9jb25mXEBnbnUub3JnPi4KK0dOVSBBdXRvY29uZiBob21lIHBhZ2U6IDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYvPi4KK0dlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LgorIjsKKworIyAkVkVSU0lPTgorIyAtLS0tLS0tLQorJHZlcnNpb24gPSAiYXV0b3JlY29uZiAoR05VIEF1dG9jb25mKSAyLjY1CitDb3B5cmlnaHQgKEMpIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitMaWNlbnNlIEdQTHYzKy9BdXRvY29uZjogR05VIEdQTCB2ZXJzaW9uIDMgb3IgbGF0ZXIKKzxodHRwOi8vZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbD4sIDxodHRwOi8vZ251Lm9yZy9saWNlbnNlcy9leGNlcHRpb25zLmh0bWw+CitUaGlzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBhcmUgZnJlZSB0byBjaGFuZ2UgYW5kIHJlZGlzdHJpYnV0ZSBpdC4KK1RoZXJlIGlzIE5PIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuCisKK1dyaXR0ZW4gYnkgRGF2aWQgSi4gTWFjS2VuemllIGFuZCBBa2ltIERlbWFpbGxlLgorIjsKKworIyBMaWIgZmlsZXMuCitteSAkYXV0b2NvbmYgICA9ICRFTlZ7J0FVVE9DT05GJ30gICB8fCAnL3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyL2Jpbi9hdXRvY29uZic7CitteSAkYXV0b2hlYWRlciA9ICRFTlZ7J0FVVE9IRUFERVInfSB8fCAnL3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyL2Jpbi9hdXRvaGVhZGVyJzsKK215ICRhdXRvbTR0ZSAgID0gJEVOVnsnQVVUT000VEUnfSAgIHx8ICcvdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3IvYmluL2F1dG9tNHRlJzsKK215ICRhdXRvbWFrZSAgID0gJEVOVnsnQVVUT01BS0UnfSAgIHx8ICdhdXRvbWFrZSc7CitteSAkYWNsb2NhbCAgICA9ICRFTlZ7J0FDTE9DQUwnfSAgICB8fCAnYWNsb2NhbCc7CitteSAkbGlidG9vbGl6ZSA9ICRFTlZ7J0xJQlRPT0xJWkUnfSB8fCAnbGlidG9vbGl6ZSc7CitteSAkYXV0b3BvaW50ICA9ICRFTlZ7J0FVVE9QT0lOVCd9ICB8fCAnYXV0b3BvaW50JzsKK215ICRtYWtlICAgICAgID0gJEVOVnsnTUFLRSd9ICAgICAgIHx8ICdtYWtlJzsKKworIyAtLWluc3RhbGwgLS0gYXMgLS1hZGQtbWlzc2luZyBpbiBvdGhlciB0b29scy4KK215ICRpbnN0YWxsID0gMDsKKyMgc3ltbGluayAtLSB3aGVuIC0taW5zdGFsbCwgdXNlIHN5bWxpbmtzIGluc3RlYWQuCitteSAkc3ltbGluayA9IDA7CisjIERvZXMgYWNsb2NhbCBzdXBwb3J0IC0tZm9yY2U/CitteSAkYWNsb2NhbF9zdXBwb3J0c19mb3JjZSA9IDA7CisjIERvZXMgYXV0b21ha2Ugc3VwcG9ydCAtLWZvcmNlLW1pc3Npbmc/CitteSAkYXV0b21ha2Vfc3VwcG9ydHNfZm9yY2VfbWlzc2luZyA9IDA7CisKK215IEBwcmVwZW5kX2luY2x1ZGU7CitteSBAaW5jbHVkZTsKKworIyBMaXN0IG9mIGNvbW1hbmQgbGluZSB3YXJuaW5nIHJlcXVlc3RzLgorbXkgQHdhcm5pbmc7CisKKyMgUmVydW4gYC4vY29uZmlndXJlICYmIG1ha2UnPworbXkgJHJ1bl9tYWtlID0gMDsKKworIyBSZWN1cnNlIGludG8gc3VicGFja2FnZXMKK215ICRyZWN1cnNpdmUgPSAxOworCisjIyAtLS0tLS0tLS0tICMjCisjIyBSb3V0aW5lcy4gICMjCisjIyAtLS0tLS0tLS0tICMjCisKKworIyBwYXJzZV9hcmdzICgpCisjIC0tLS0tLS0tLS0tLS0KKyMgUHJvY2VzcyBhbnkgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KK3N1YiBwYXJzZV9hcmdzICgpCit7CisgIG15ICRzcmNkaXI7CisKKyAgZ2V0b3B0ICgiV3x3YXJuaW5ncz1zIiAgICAgICAgID0+IFxAd2FybmluZywKKwkgICdJfGluY2x1ZGU9cycgICAgICAgICAgPT4gXEBpbmNsdWRlLAorCSAgJ0J8cHJlcGVuZC1pbmNsdWRlPXMnCSA9PiBcQHByZXBlbmRfaW5jbHVkZSwKKwkgICdpfGluc3RhbGwnICAgICAgICAgICAgPT4gXCRpbnN0YWxsLAorCSAgJ3N8c3ltbGluaycgICAgICAgICAgICA9PiBcJHN5bWxpbmssCisJICAnbXxtYWtlJyAgICAgICAgICAgICAgID0+IFwkcnVuX21ha2UsCisJICAncmVjdXJzaXZlIScgICAgICAgICAgID0+IFwkcmVjdXJzaXZlKTsKKworICAjIFNwbGl0IHRoZSB3YXJuaW5ncyBhcyBhIGxpc3Qgb2YgZWxlbWVudHMgaW5zdGVhZCBvZiBhIGxpc3Qgb2YKKyAgIyBsaXN0cy4KKyAgQHdhcm5pbmcgPSBtYXAgeyBzcGxpdCAvLC8gfSBAd2FybmluZzsKKyAgcGFyc2VfV0FSTklOR1M7CisgIHBhcnNlX3dhcm5pbmdzICctLXdhcm5pbmdzJywgQHdhcm5pbmc7CisKKyAgIyBFdmVuIGlmIHRoZSB1c2VyIHNwZWNpZmllZCBhIGNvbmZpZ3VyZS5hYywgdHJpbSB0byBnZXQgdGhlCisgICMgZGlyZWN0b3J5LCBhbmQgbG9vayBmb3IgY29uZmlndXJlLmFjIGFnYWluLiAgQmVjYXVzZSAoaSkgdGhlIGNvZGUKKyAgIyBpcyBzaW1wbGVyLCBhbmQgKGlpKSB3ZSBhcmUgc3RpbGwgYWJsZSB0byBkaWFnbm9zZSBzaW11bHRhbmVvdXMKKyAgIyBwcmVzZW5jZSBvZiBjb25maWd1cmUuYWMgYW5kIGNvbmZpZ3VyZS5pbi4KKyAgQEFSR1YgPSBtYXAgeyAvY29uZmlndXJlXC4oYWN8aW4pJC8gPyBkaXJuYW1lICgkXykgOiAkXyB9IEBBUkdWOworICBwdXNoIEBBUkdWLCAnLicgdW5sZXNzIEBBUkdWOworCisgIGlmICgkdmVyYm9zZSAmJiAkZGVidWcpCisgICAgeworICAgICAgZm9yIG15ICRwcm9nICgkYXV0b2NvbmYsICRhdXRvaGVhZGVyLAorCQkgICAgJGF1dG9tYWtlLCAkYWNsb2NhbCwKKwkJICAgICRhdXRvcG9pbnQsCisJCSAgICAkbGlidG9vbGl6ZSkKKwl7CisJICB4c3lzdGVtICgiJHByb2cgLS12ZXJzaW9uIHwgc2VkIDFxID4mMiIpOworCSAgcHJpbnQgU1RERVJSICJcbiI7CisJfQorICAgIH0KKworICAkYWNsb2NhbF9zdXBwb3J0c19mb3JjZSA9IGAkYWNsb2NhbCAtLWhlbHAgMj4vZGV2L251bGxgID1+IC8tLWZvcmNlLzsKKyAgJGF1dG9tYWtlX3N1cHBvcnRzX2ZvcmNlX21pc3NpbmcgPSBgJGF1dG9tYWtlIC0taGVscCAyPi9kZXYvbnVsbGAgPX4gLy0tZm9yY2UtbWlzc2luZy87CisKKyAgIyBEaXNwYXRjaCBhdXRvcmVjb25mJ3Mgb3B0aW9uIHRvIHRoZSB0b29scy4KKyAgIyAtLWluY2x1ZGU7CisgICRhY2xvY2FsICAgIC49IGpvaW4gKCcgLUkgJywgJycsIG1hcCB7IHNoZWxsX3F1b3RlICgkXykgfSBAaW5jbHVkZSk7CisgICRhdXRvY29uZiAgIC49IGpvaW4gKCcgLS1pbmNsdWRlPScsICcnLCBtYXAgeyBzaGVsbF9xdW90ZSAoJF8pIH0gQGluY2x1ZGUpOworICAkYXV0b2NvbmYgICAuPSBqb2luICgnIC0tcHJlcGVuZC1pbmNsdWRlPScsICcnLCBtYXAgeyBzaGVsbF9xdW90ZSAoJF8pIH0gQHByZXBlbmRfaW5jbHVkZSk7CisgICRhdXRvaGVhZGVyIC49IGpvaW4gKCcgLS1pbmNsdWRlPScsICcnLCBtYXAgeyBzaGVsbF9xdW90ZSAoJF8pIH0gQGluY2x1ZGUpOworICAkYXV0b2hlYWRlciAuPSBqb2luICgnIC0tcHJlcGVuZC1pbmNsdWRlPScsICcnLCBtYXAgeyBzaGVsbF9xdW90ZSAoJF8pIH0gQHByZXBlbmRfaW5jbHVkZSk7CisKKyAgIyAtLWluc3RhbGwgYW5kIC0tc3ltbGluazsKKyAgaWYgKCRpbnN0YWxsKQorICAgIHsKKyAgICAgICRhdXRvbWFrZSAgIC49ICcgLS1hZGQtbWlzc2luZyc7CisgICAgICAkYXV0b21ha2UgICAuPSAnIC0tY29weScgdW5sZXNzICRzeW1saW5rOworICAgICAgJGxpYnRvb2xpemUgLj0gJyAtLWNvcHknIHVubGVzcyAkc3ltbGluazsKKyAgICB9CisgICMgLS1mb3JjZTsKKyAgaWYgKCRmb3JjZSkKKyAgICB7CisgICAgICAkYWNsb2NhbCAgICAuPSAnIC0tZm9yY2UnCisJaWYgJGFjbG9jYWxfc3VwcG9ydHNfZm9yY2U7CisgICAgICAkYXV0b2NvbmYgICAuPSAnIC0tZm9yY2UnOworICAgICAgJGF1dG9oZWFkZXIgLj0gJyAtLWZvcmNlJzsKKyAgICAgICRhdXRvbWFrZSAgIC49ICcgLS1mb3JjZS1taXNzaW5nJworCWlmICRhdXRvbWFrZV9zdXBwb3J0c19mb3JjZV9taXNzaW5nOworICAgICAgJGF1dG9wb2ludCAgLj0gJyAtLWZvcmNlJzsKKyAgICAgICRsaWJ0b29saXplIC49ICcgLS1mb3JjZSc7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgIyBUaGUgaW1wbGVtZW50YXRpb24gb2YgLS1uby1mb3JjZSBpcyBib2d1cyBpbiBhbGwgaW1wbGVtZW50YXRpb25zCisgICAgICAjIG9mIEF1dG9tYWtlIHVwIHRvIDEuOCwgc28gd2UgYXZvaWQgaXQgaW4gdGhlc2UgY2FzZXMuICAoQXV0b21ha2UKKyAgICAgICMgMS44IGlzIHRoZSBmaXJzdCB2ZXJzaW9uIHdoZXJlIGFjbG9jYWwgc3VwcG9ydHMgZm9yY2UsIGhlbmNlCisgICAgICAjIHRoZSBjb25kaXRpb24uKQorICAgICAgJGF1dG9tYWtlIC49ICcgLS1uby1mb3JjZScKKwlpZiAkYWNsb2NhbF9zdXBwb3J0c19mb3JjZTsKKyAgICB9CisgICMgLS12ZXJib3NlIC0tdmVyYm9zZSBvciAtLWRlYnVnOworICBpZiAoJHZlcmJvc2UgPiAxIHx8ICRkZWJ1ZykKKyAgICB7CisgICAgICAkYXV0b2NvbmYgICAuPSAnIC0tdmVyYm9zZSc7CisgICAgICAkYXV0b2hlYWRlciAuPSAnIC0tdmVyYm9zZSc7CisgICAgICAkYXV0b21ha2UgICAuPSAnIC0tdmVyYm9zZSc7CisgICAgICAkYWNsb2NhbCAgICAuPSAnIC0tdmVyYm9zZSc7CisgICAgfQorICBpZiAoJGRlYnVnKQorICAgIHsKKyAgICAgICRhdXRvY29uZiAgIC49ICcgLS1kZWJ1Zyc7CisgICAgICAkYXV0b2hlYWRlciAuPSAnIC0tZGVidWcnOworICAgICAgJGxpYnRvb2xpemUgLj0gJyAtLWRlYnVnJzsKKyAgICB9CisgICMgLS13YXJuaW5nczsKKyAgaWYgKEB3YXJuaW5nKQorICAgIHsKKyAgICAgIG15ICR3YXJuID0gJyAtLXdhcm5pbmdzPScgLiBqb2luICgnLCcsIEB3YXJuaW5nKTsKKyAgICAgICRhdXRvY29uZiAgIC49ICR3YXJuOworICAgICAgJGF1dG9oZWFkZXIgLj0gJHdhcm47CisgICAgICAkYXV0b21ha2UgICAuPSAkd2FybgorCWlmIGAkYXV0b21ha2UgLS1oZWxwYCA9fiAvLS13YXJuaW5ncy87CisgICAgfQorfQorCisKKyMgJnJ1bl9hY2xvY2FsICgkQUNMT0NBTCwgJEZMQUdTKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFVwZGF0ZSBhY2xvY2FsLm00IGFzIGxhemlseSBhcyBwb3NzaWJsZSwgYXMgYWNsb2NhbCBwcmUtMS44IGFsd2F5cworIyBvdmVyd3JpdGVzIGFjbG9jYWwubTQsIGhlbmNlIHRyaWdnZXJzIGF1dG9jb25mLCBhdXRvaGVhZGVyLCBhdXRvbWFrZQorIyBldGMuIHVzZWxlc3NseS4gIGFjbG9jYWwgMS44KyBkb2VzIG5vdCBuZWVkIHRoaXMuCitzdWIgcnVuX2FjbG9jYWwgKCQkKQoreworICBteSAoJGFjbG9jYWwsICRmbGFncykgPSBAXzsKKworICAjIGFjbG9jYWwgMS44KyBkb2VzIGFsbCB0aGlzIGZvciBmcmVlLiAgSXQgY2FuIGJlIHJlY29nbml6ZWQgYnkgaXRzCisgICMgLS1mb3JjZSBzdXBwb3J0LgorICBpZiAoJGFjbG9jYWxfc3VwcG9ydHNfZm9yY2UpCisgICAgeworICAgICAgeHN5c3RlbSAoIiRhY2xvY2FsICRmbGFncyIpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHhzeXN0ZW0gKCIkYWNsb2NhbCAkZmxhZ3MgLS1vdXRwdXQ9YWNsb2NhbC5tNHQiKTsKKyAgICAgICMgYWNsb2NhbCBtYXkgcHJvZHVjZSBubyBvdXRwdXQuCisgICAgICBpZiAoLWYgJ2FjbG9jYWwubTR0JykKKwl7CisJICB1cGRhdGVfZmlsZSAoJ2FjbG9jYWwubTR0JywgJ2FjbG9jYWwubTQnKTsKKwkgICMgTWFrZSBzdXJlIHRoYXQgdGhlIGxvY2FsIG00IGZpbGVzIGFyZSBvbGRlciB0aGFuCisJICAjIGFjbG9jYWwubTQuCisJICAjCisJICAjIFdoeSBpcyBub3QgYWx3YXlzIHRoZSBjYXNlPyAgQmVjYXVzZSB3ZSBhbHJlYWR5IHJ1bgorCSAgIyBhY2xvY2FsIGF0IGZpcnN0IChiZWZvcmUgdHJhY2luZyksIHdoaWNoLCBmb3IgaW5zdGFuY2UsCisJICAjIGNhbiBmaW5kIEdldHRleHQncyBtYWNyb3MgaW4gLi4uL3NoYXJlL2FjbG9jYWwsIHNvIHdlIG1heQorCSAgIyBoYXZlIGhhZCB0aGUgcmlnaHQgYWNsb2NhbC5tNCBhbHJlYWR5LiAgVGhlbiBhdXRvcG9pbnQgaXMKKwkgICMgcnVuLCBhbmQgaW5zdGFsbHMgbG9jYWxseSB0aGVzZSBNNCBmaWxlcy4gIFRoZW4KKwkgICMgYXV0b3JlY29uZiwgdmlhIHVwZGF0ZV9maWxlLCBzZWVzIGl0IGlzIHRoZSBfc2FtZV8KKwkgICMgYWNsb2NhbC5tNCwgYW5kIGRvZXNuJ3QgY2hhbmdlIGl0cyB0aW1lc3RhbXAuICBCdXQgbGF0ZXIsCisJICAjIEF1dG9tYWtlJ3MgTWFrZWZpbGUgZXhwcmVzc2VzIHRoYXQgYWNsb2NhbC5tNCBkZXBlbmRzIG9uCisJICAjIHRoZXNlIGxvY2FsIGZpbGVzLCB3aGljaCBhcmUgbmV3ZXIsIHNvIGl0IHRyaWdnZXJzIGFjbG9jYWwKKwkgICMgYWdhaW4uCisJICAjCisJICAjIFRvIG1ha2Ugc3VyZSBhY2xvY2FsLm00IGlzIG5vIG9sZGVyLCB3ZSBjaGFuZ2UgdGhlCisJICAjIG1vZGlmaWNhdGlvbiB0aW1lcyBvZiB0aGUgbG9jYWwgTTQgZmlsZXMgdG8gYmUgbm90IG5ld2VyCisJICAjIHRoYW4gaXQuCisJICAjCisJICAjIEZpcnN0LCB3aGVyZSBhcmUgdGhlIGxvY2FsIGZpbGVzPworCSAgbXkgJGFjbG9jYWxfbG9jYWxfZGlyID0gJy4nOworCSAgaWYgKCRmbGFncyA9fiAvLUlccysoXFMrKS8pCisJICAgIHsKKwkgICAgICAkYWNsb2NhbF9sb2NhbF9kaXIgPSAkMTsKKwkgICAgfQorCSAgIyBBbGwgdGhlIGxvY2FsIGZpbGVzIG5ld2VyIHRoYW4gYWNsb2NhbC5tNCBhcmUgdG8gYmUKKwkgICMgbWFkZSBub3QgbmV3ZXIgdGhhbiBpdC4KKwkgIG15ICRhY2xvY2FsX200X210aW1lID0gbXRpbWUgKCdhY2xvY2FsLm00Jyk7CisJICBmb3IgbXkgJGZpbGUgKGdsb2IgKCIkYWNsb2NhbF9sb2NhbF9kaXIvKi5tNCIpLCAnYWNpbmNsdWRlLm00JykKKwkgICAgeworCSAgICAgIGlmICgkYWNsb2NhbF9tNF9tdGltZSA8IG10aW1lICgkZmlsZSkpCisJCXsKKwkJICBkZWJ1ZyAiYWdpbmcgJGZpbGUgdG8gYmUgbm90IG5ld2VyIHRoYW4gYWNsb2NhbC5tNCI7CisJCSAgdXRpbWUgJGFjbG9jYWxfbTRfbXRpbWUsICRhY2xvY2FsX200X210aW1lLCAkZmlsZTsKKwkJfQorCSAgICB9CisJfQorICAgIH0KK30KKworIyAmYXV0b3JlY29uZl9jdXJyZW50X2RpcmVjdG9yeQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3ViIGF1dG9yZWNvbmZfY3VycmVudF9kaXJlY3RvcnkgKCkKK3sKKyAgbXkgJGNvbmZpZ3VyZV9hYyA9IGZpbmRfY29uZmlndXJlX2FjOworCisgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisgICMgSXMgaXQgdXNpbmcgQXV0b2NvbmY/ICAjCisgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisKKyAgbXkgJHVzZXNfYXV0b2NvbmY7CisgIG15ICR1c2VzX2dldHRleHQ7CisgIGlmICgtZiAkY29uZmlndXJlX2FjKQorICAgIHsKKyAgICAgIG15ICRjb25maWd1cmVfYWNfZmlsZSA9IG5ldyBBdXRvbTR0ZTo6WEZpbGUgIjwgJGNvbmZpZ3VyZV9hYyI7CisgICAgICB3aGlsZSAoJF8gPSAkY29uZmlndXJlX2FjX2ZpbGUtPmdldGxpbmUpCisJeworCSAgcy8jLiovLzsKKwkgIHMvZG5sLiovLzsKKwkgICR1c2VzX2F1dG9jb25mID0gMSBpZiAvQUNfSU5JVC87CisJICAjIFNlZSBiZWxvdyBmb3Igd2h5IHdlIGxvb2sgZm9yIGdldHRleHQgaGVyZS4KKwkgICR1c2VzX2dldHRleHQgPSAxICBpZiAvXkFNX0dOVV9HRVRURVhUX1ZFUlNJT04vOworCX0KKyAgICB9CisgIGlmICghJHVzZXNfYXV0b2NvbmYpCisgICAgeworICAgICAgdmVyYiAiJGNvbmZpZ3VyZV9hYzogbm90IHVzaW5nIEF1dG9jb25mIjsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKworICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIworICAjIFJ1bm5pbmcgYXV0b3BvaW50LiAgIworICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIworCisgICMgR2V0dGV4dCBpcyBhIGJpdCBvZiBhIHByb2JsZW06IGl0cyBtYWNyb3MgYXJlIG5vdCBuZWNlc3NhcmlseQorICAjIHZpc2libGUgdG8gYWNsb2NhbCwgc28gaWYgd2Ugc3RhcnQgd2l0aCBhIGNvbXBsZXRlbHkgc3RyaXBlZCBkb3duCisgICMgcGFja2FnZSAodGhpbmsgb2YgYSBmcmVzaCBDVlMgY2hlY2tvdXQpLCBydW5uaW5nIGBhY2xvY2FsJyBmaXJzdAorICAjIHdpbGwgZmFpbDogdGhlIEdldHRleHQgbWFjcm9zIGFyZSBtaXNzaW5nLgorICAjCisgICMgVGhlcmVmb3JlLCB3ZSBjYW4ndCB1c2UgdGhlIHRyYWNlcyB0byBkZWNpZGUgaWYgd2UgdXNlIEdldHRleHQgb3IKKyAgIyBub3QuICBJIGd1ZXNzIHRoYXQgb25jZSBHZXR0ZXh0IG1vdmUgdG8gMi41eCB3ZSB3aWxsIGJlIGFibGUgdG8sCisgICMgYnV0IGluIHRoZSBtZWFud2hpbGUgZm9yZ2V0IGl0LgorICAjCisgICMgV2UgY2FuIG9ubHkgZ3JlcCBmb3IgQU1fR05VX0dFVFRFWFRfVkVSU0lPTiBpbiBjb25maWd1cmUuYWMuICBZb3UKKyAgIyBtaWdodCB0aGluayB0aGlzIGFwcHJvYWNoIGlzIG5haXZlLCBhbmQgaW5kZWVkIGl0IGlzLCBhcyBpdAorICAjIHByZXZlbnRzIG9uZSB0byBlbWJlZCBBTV9HTlVfR0VUVEVYVF9WRVJTSU9OIGluIGFub3RoZXIgKi5tNCwgYnV0CisgICMgYW55d2F5IHdlIGRvbid0IGxpbWl0IHRoZSBnZW5lcmFsaXR5LCBzaW5jZS4uLiB0aGF0J3Mgd2hhdAorICAjIGF1dG9wb2ludCBkb2VzLiAgQWN0dWFsbHksIGl0IGlzIGV2ZW4gbW9yZSByZXN0cmljdGl2ZSwgYXMgaXQKKyAgIyBncmVwcyBmb3IgYF5BTV9HTlVfR0VUVEVYVF9WRVJTSU9OKCcuICBXZSBkaWQgdGhpcyBhYm92ZSwgd2hpbGUKKyAgIyBzY2FubmluZyBjb25maWd1cmUuYWMuCisgIGlmICghJHVzZXNfZ2V0dGV4dCkKKyAgICB7CisgICAgICB2ZXJiICIkY29uZmlndXJlX2FjOiBub3QgdXNpbmcgR2V0dGV4dCI7CisgICAgfQorICBlbHNpZiAoISRpbnN0YWxsKQorICAgIHsKKyAgICAgIHZlcmIgIiRjb25maWd1cmVfYWM6IG5vdCBydW5uaW5nIGF1dG9wb2ludDogLS1pbnN0YWxsIG5vdCBnaXZlbiI7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgeHN5c3RlbV9oaW50ICgiYXV0b3BvaW50IGlzIG5lZWRlZCBiZWNhdXNlIHRoaXMgcGFja2FnZSB1c2VzIEdldHRleHQiLCAiJGF1dG9wb2ludCIpOworICAgIH0KKworCisgICMgLS0tLS0tLS0tLS0tLS0tLS0gIworICAjIFJ1bm5pbmcgYWNsb2NhbC4gICMKKyAgIyAtLS0tLS0tLS0tLS0tLS0tLSAjCisKKyAgIyBSdW4gaXQgZmlyc3Q6IGl0IG1pZ2h0IGRpc2NvdmVyIG5ldyBtYWNyb3MgdG8gYWRkLCBlLmcuLAorICAjIEFDX1BST0dfTElCVE9PTCwgd2hpY2ggd2Ugd2lsbCB0cmFjZSBsYXRlciB0byBzZWUgaWYgTGlidG9vbCBpcworICAjIHVzZWQuCisgICMKKyAgIyBBbHdheXMgcnVuIGl0LiAgVHJhY2tpbmcgaXRzIHNvdXJjZXMgZm9yIHVwLXRvLWRhdGVuZXNzIGlzIHRvbworICAjIGNvbXBsZXggYW5kIHRvbyBlcnJvciBwcm9uZS4gIFRoZSBiZXN0IHdlIGNhbiBkbyBpcyBhdm9pZGluZworICAjIG51a2luZyB0aGUgdGltZSBzdGFtcC4KKyAgbXkgJHVzZXNfYWNsb2NhbCA9IDE7CisKKyAgIyBOZXZlcnRoZWxlc3MsIGlmIGFjbG9jYWwubTQgZXhpc3RzIGFuZCBpcyBub3QgbWFkZSBieSBhY2xvY2FsLAorICAjIGRvbid0IHJ1biBhY2xvY2FsLgorCisgIGlmICgtZiAnYWNsb2NhbC5tNCcpCisgICAgeworICAgICAgbXkgJGFjbG9jYWxfbTQgPSBuZXcgQXV0b200dGU6OlhGaWxlICdhY2xvY2FsLm00JzsKKyAgICAgICRfID0gJGFjbG9jYWxfbTQtPmdldGxpbmU7CisgICAgICAkdXNlc19hY2xvY2FsID0gMAorCXVubGVzcyBkZWZpbmVkICgkXykgJiYgL2dlbmVyYXRlZC4qYnkgYWNsb2NhbC87CisgICAgfQorCisgICMgSWYgdGhlcmUgYXJlIGZsYWdzIGZvciBhY2xvY2FsIGluIE1ha2VmaWxlLmFtLCB1c2UgdGhlbS4KKyAgbXkgJGFjbG9jYWxfZmxhZ3MgPSAnJzsKKyAgaWYgKCR1c2VzX2FjbG9jYWwgJiYgLWYgJ01ha2VmaWxlLmFtJykKKyAgICB7CisgICAgICBteSAkbWFrZWZpbGUgPSBuZXcgQXV0b200dGU6OlhGaWxlICdNYWtlZmlsZS5hbSc7CisgICAgICB3aGlsZSAoJF8gPSAkbWFrZWZpbGUtPmdldGxpbmUpCisJeworCSAgaWYgKC9eQUNMT0NBTF9bQS1aX10qRkxBR1Nccyo9XHMqKC4qKS8pCisJICAgIHsKKwkgICAgICAkYWNsb2NhbF9mbGFncyA9ICQxOworCSAgICAgIGxhc3Q7CisJICAgIH0KKwl9CisgICAgfQorCisgIGlmICghJHVzZXNfYWNsb2NhbCkKKyAgICB7CisgICAgICB2ZXJiICIkY29uZmlndXJlX2FjOiBub3QgdXNpbmcgYWNsb2NhbCI7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgIyBTb21lIGZpbGUgc3lzdGVtcyBoYXZlIHN1Yi1zZWNvbmQgdGltZSBzdGFtcHMsIGFuZCBpZiBzbyB3ZSBtYXkKKyAgICAgICMgcnVuIGludG8gdHJvdWJsZSBsYXRlciwgYWZ0ZXIgd2UgcmVydW4gYXV0b2NvbmYgYW5kIHNldCB0aGUKKyAgICAgICMgdGltZSBzdGFtcHMgb2YgaW5wdXQgZmlsZXMgdG8gYmUgbm8gZ3JlYXRlciB0aGFuIGFjbG9jYWwubTQsCisgICAgICAjIGJlY2F1c2UgdGhlIHRpbWUtc3RhbXAtc2V0dGluZyBvcGVyYXRpb24gKHV0aW1lKSBoYXMgYQorICAgICAgIyByZXNvbHV0aW9uIG9mIG9ubHkgMSBzZWNvbmQuICBXb3JrIGFyb3VuZCB0aGUgcHJvYmxlbSBieQorICAgICAgIyBlbnN1cmluZyB0aGF0IHRoZXJlIGlzIGF0IGxlYXN0IGEgb25lLXNlY29uZCB3aW5kb3cgYmVmb3JlIHRoZQorICAgICAgIyB0aW1lIHN0YW1wIG9mIGFjbG9jYWwubTR0IGluIHdoaWNoIG5vIGZpbGUgdGltZSBzdGFtcHMgY2FuCisgICAgICAjIGZhbGwuCisgICAgICBzbGVlcCAxOworCisgICAgICBydW5fYWNsb2NhbCAoJGFjbG9jYWwsICRhY2xvY2FsX2ZsYWdzKTsKKyAgICB9CisKKyAgIyBXZSBtaWdodCBoYXZlIHRvIHJlcnVuIGFjbG9jYWwgaWYgTGlidG9vbCAob3Igb3RoZXJzKSBpbXBvcnRzIG5ldworICAjIG1hY3Jvcy4KKyAgbXkgJHJlcnVuX2FjbG9jYWwgPSAwOworCisKKworICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworICAjIFNlZSB3aGF0IHRvb2xzIHdpbGwgYmUgbmVlZGVkLiAgIworICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworCisgICMgUGVyZm9ybSBhIHNpbmdsZSB0cmFjZSByZWFkaW5nIHRvIGF2b2lkIC0tZm9yY2UgZm9yY2luZyBhIHJlcnVuCisgICMgYmV0d2VlbiB0d28gLS10cmFjZSwgdGhhdCdzIHVzZWxlc3MuICBJZiB0aGVyZSBpcyBubyBBQ19JTklULCB0aGVuCisgICMgd2UgYXJlIG5vdCBpbnRlcmVzdGVkOiBpdCBsb29rcyBsaWtlIGEgQ3lnbnVzIHRoaW5neS4KKyAgbXkgJGF1eF9kaXI7CisgIG15ICR1c2VzX2dldHRleHRfdmlhX3RyYWNlczsKKyAgbXkgJHVzZXNfbGlidG9vbDsKKyAgbXkgJHVzZXNfbGlibHRkbDsKKyAgbXkgJHVzZXNfYXV0b2hlYWRlcjsKKyAgbXkgJHVzZXNfYXV0b21ha2U7CisgIG15IEBzdWJkaXI7CisgIHZlcmIgIiRjb25maWd1cmVfYWM6IHRyYWNpbmciOworICBteSAkdHJhY2VzID0gbmV3IEF1dG9tNHRlOjpYRmlsZQorICAgICgiJGF1dG9jb25mIgorICAgICAuIGpvaW4gKCcgJywKKwkgICAgIG1hcCB7ICcgLS10cmFjZT0nIC4gJF8gLiAnOlwkbjo6XCR7Ojp9JScgfQorCSAgICAgIyBJZiB5b3UgY2hhbmdlIHRoaXMgbGlzdCwgdXBkYXRlIHRoZQorCSAgICAgIyBgQXV0b3JlY29uZi1wcmVzZWxlY3Rpb25zJyBzZWN0aW9uIG9mIGF1dG9tNHRlLmluLgorCSAgICAgJ0FDX0NPTkZJR19BVVhfRElSJywKKwkgICAgICdBQ19DT05GSUdfSEVBREVSUycsCisJICAgICAnQUNfQ09ORklHX1NVQkRJUlMnLAorCSAgICAgJ0FDX0lOSVQnLAorCSAgICAgJ0FDX1BST0dfTElCVE9PTCcsCisJICAgICAnTFRfSU5JVCcsCisJICAgICAnTFRfQ09ORklHX0xURExfRElSJywKKwkgICAgICdBTV9HTlVfR0VUVEVYVCcsCisJICAgICAnQU1fSU5JVF9BVVRPTUFLRScsCisJICAgICkKKyAgICAgLiAnIHwnKTsKKyAgd2hpbGUgKCRfID0gJHRyYWNlcy0+Z2V0bGluZSkKKyAgICB7CisgICAgICBjaG9tcDsKKyAgICAgIG15ICgkbWFjcm8sIEBhcmdzKSA9IHNwbGl0ICgvOjovKTsKKyAgICAgICRhdXhfZGlyID0gJGFyZ3NbMF0gICAgICAgICAgIGlmICRtYWNybyBlcSAiQUNfQ09ORklHX0FVWF9ESVIiOworICAgICAgJHVzZXNfYXV0b2NvbmYgPSAxICAgICAgICAgICAgaWYgJG1hY3JvIGVxICJBQ19JTklUIjsKKyAgICAgICR1c2VzX2dldHRleHRfdmlhX3RyYWNlcyA9IDEgIGlmICRtYWNybyBlcSAiQU1fR05VX0dFVFRFWFQiOworICAgICAgJHVzZXNfbGlidG9vbCA9IDEgICAgICAgICAgICAgaWYgJG1hY3JvIGVxICJBQ19QUk9HX0xJQlRPT0wiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAkbWFjcm8gZXEgIkxUX0lOSVQiOworICAgICAgJHVzZXNfbGlibHRkbCA9IDEgICAgICAgICAgICAgaWYgJG1hY3JvIGVxICJMVF9DT05GSUdfTFRETF9ESVIiOworICAgICAgJHVzZXNfYXV0b2hlYWRlciA9IDEgICAgICAgICAgaWYgJG1hY3JvIGVxICJBQ19DT05GSUdfSEVBREVSUyI7CisgICAgICAkdXNlc19hdXRvbWFrZSA9IDEgICAgICAgICAgICBpZiAkbWFjcm8gZXEgIkFNX0lOSVRfQVVUT01BS0UiOworICAgICAgcHVzaCBAc3ViZGlyLCBzcGxpdCAoJyAnLCAkYXJnc1swXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICRtYWNybyBlcSAiQUNfQ09ORklHX1NVQkRJUlMiICYmICRyZWN1cnNpdmU7CisgICAgfQorCisgICMgVGhlIHN1YmRpcnMgYXJlICpvcHRpb25hbCosIHRoZXkgbWF5IG5vdCBleGlzdC4KKyAgZm9yZWFjaCAoQHN1YmRpcikKKyAgICB7CisgICAgICBpZiAoLWQpCisJeworCSAgdmVyYiAiJGNvbmZpZ3VyZV9hYzogYWRkaW5nIHN1YmRpcmVjdG9yeSAkXyB0byBhdXRvcmVjb25mIjsKKwkgIGF1dG9yZWNvbmYgKCRfKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgdmVyYiAiJGNvbmZpZ3VyZV9hYzogc3ViZGlyZWN0b3J5ICRfIG5vdCBwcmVzZW50IjsKKwl9CisgICAgfQorCisgICMgR2V0dGV4dCBjb25zaXN0ZW5jeSBjaGVja3MuLi4KKyAgZXJyb3IgIiRjb25maWd1cmVfYWM6IEFNX0dOVV9HRVRURVhUIGlzIHVzZWQsIGJ1dCBub3QgQU1fR05VX0dFVFRFWFRfVkVSU0lPTiIKKyAgICBpZiAkdXNlc19nZXR0ZXh0X3ZpYV90cmFjZXMgJiYgISAkdXNlc19nZXR0ZXh0OworICBlcnJvciAiJGNvbmZpZ3VyZV9hYzogQU1fR05VX0dFVFRFWFRfVkVSU0lPTiBpcyB1c2VkLCBidXQgbm90IEFNX0dOVV9HRVRURVhUIgorICAgIGlmICR1c2VzX2dldHRleHQgJiYgISAkdXNlc19nZXR0ZXh0X3ZpYV90cmFjZXM7CisKKworICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworICAjIFNldHRpbmcgdXAgdGhlIHNvdXJjZSB0cmVlLiAgIworICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworCisgICMgbGlidG9vbGl6ZSwgYXV0b21ha2UgLS1hZGQtbWlzc2luZyBldGMuIHdpbGwgZHJvcCBmaWxlcyBpbiB0aGUKKyAgIyAkQVVYX0RJUi4gIEJ1dCB0aGVzZSB0b29scyBmYWlsIHRvIGluc3RhbGwgdGhlc2UgZmlsZXMgaWYgdGhlCisgICMgZGlyZWN0b3J5IGl0c2VsZiBkb2VzIG5vdCBleGlzdCwgd2hpY2ggdmFsaWQ6IGp1c3QgaW1hZ2luZSBhIENWUworICAjIHJlcG9zaXRvcnkgd2l0aCBoYW5kIHdyaXR0ZW4gY29kZSBvbmx5ICh0aGVyZSBpcyBub3QgZXZlbiBhIG5lZWQKKyAgIyBmb3IgYSBNYWtlZmlsZS5hbSEpLgorCisgIGlmIChkZWZpbmVkICRhdXhfZGlyICYmICEgLWQgJGF1eF9kaXIpCisgICAgeworICAgICAgdmVyYiAiJGNvbmZpZ3VyZV9hYzogY3JlYXRpbmcgZGlyZWN0b3J5ICRhdXhfZGlyIjsKKyAgICAgIG1rZGlyICRhdXhfZGlyLCAwNzU1CisJb3IgZXJyb3IgImNhbm5vdCBjcmVhdGUgJGF1eF9kaXI6ICQhIjsKKyAgICB9CisKKworICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKyAgIyBSdW5uaW5nIGxpYnRvb2xpemUuICAjCisgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworCisgIGlmICghJHVzZXNfbGlidG9vbCkKKyAgICB7CisgICAgICB2ZXJiICIkY29uZmlndXJlX2FjOiBub3QgdXNpbmcgTGlidG9vbCI7CisgICAgfQorICBlbHNpZiAoJGluc3RhbGwpCisgICAgeworICAgICAgaWYgKCR1c2VzX2xpYmx0ZGwpCisJeworCSAgJGxpYnRvb2xpemUgLj0gIiAtLWx0ZGwiOworCX0KKyAgICAgIHhzeXN0ZW1faGludCAoImxpYnRvb2xpemUgaXMgbmVlZGVkIGJlY2F1c2UgdGhpcyBwYWNrYWdlIHVzZXMgTGlidG9vbCIsICRsaWJ0b29saXplKTsKKyAgICAgICRyZXJ1bl9hY2xvY2FsID0gMTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB2ZXJiICIkY29uZmlndXJlX2FjOiBub3QgcnVubmluZyBsaWJ0b29saXplOiAtLWluc3RhbGwgbm90IGdpdmVuIjsKKyAgICB9CisKKworCisgICMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisgICMgUmVydW5uaW5nIGFjbG9jYWwuICAjCisgICMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisKKyAgIyBJZiB3ZSByZS1pbnN0YWxsZWQgTGlidG9vbCBvciBHZXR0ZXh0LCB0aGUgbWFjcm9zIG1pZ2h0IGhhdmUgY2hhbmdlZC4KKyAgIyBBdXRvbWFrZSBhbHNvIG5lZWRzIGFuIHVwLXRvLWRhdGUgYWNsb2NhbC5tNC4KKyAgaWYgKCRyZXJ1bl9hY2xvY2FsKQorICAgIHsKKyAgICAgIGlmICghJHVzZXNfYWNsb2NhbCkKKwl7CisJICB2ZXJiICIkY29uZmlndXJlX2FjOiBub3QgdXNpbmcgYWNsb2NhbCI7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHJ1bl9hY2xvY2FsICgkYWNsb2NhbCwgJGFjbG9jYWxfZmxhZ3MpOworCX0KKyAgICB9CisKKworICAjIC0tLS0tLS0tLS0tLS0tLS0tLSAjCisgICMgUnVubmluZyBhdXRvY29uZi4gICMKKyAgIyAtLS0tLS0tLS0tLS0tLS0tLS0gIworCisgICMgRG9uJ3QgdHJ5IHRvIGJlIHNtYXJ0ZXIgdGhhbiBgYXV0b2NvbmYnLCB3aGljaCBkb2VzIGl0cyBvd24gdXAgdG8KKyAgIyBkYXRlIGNoZWNrcy4KKyAgIworICAjIFdlIHByZWZlciBydW5uaW5nIGF1dG9jb25mIGJlZm9yZSBhdXRvaGVhZGVyLCBiZWNhdXNlIChpKSB0aGUKKyAgIyBsYXR0ZXIgcnVucyB0aGUgZm9ybWVyLCBhbmQgKGlpKSBhdXRvY29uZiBpcyBzdHJpY3RlciB0aGFuCisgICMgYXV0b2hlYWRlci4gIFNvIGFsbCBpbiBhbGwsIGF1dG9jb25mIHNob3VsZCBnaXZlIGJldHRlciBlcnJvcgorICAjIG1lc3NhZ2VzLgorICB4c3lzdGVtICgkYXV0b2NvbmYpOworCisKKyAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisgICMgUnVubmluZyBhdXRvaGVhZGVyLiAgIworICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKworICAjIFdlIG5vdyBjb25zaWRlciB0aGF0IGlmIEFDX0NPTkZJR19IRUFERVJTIGlzIHVzZWQsIHRoZW4gYXV0b2hlYWRlcgorICAjIGlzIHVzZWQgdG9vLgorICAjCisgICMgSnVzdCBhcyBmb3IgYXV0b2NvbmYsIHVwIHRvIGRhdGUgbmVzcyBpcyBwZXJmb3JtZWQgYnkgdGhlIHRvb2wKKyAgIyBpdHNlbGYuCisgICMKKyAgIyBSdW4gaXQgYmVmb3JlIGF1dG9tYWtlLCBzaW5jZSB0aGUgbGF0dGVyIGNoZWNrcyB0aGUgcHJlc2VuY2Ugb2YKKyAgIyBjb25maWcuaC5pbiB3aGVuIGl0IHNlZXMgYW4gQUNfQ09ORklHX0hFQURFUlMuCisgIGlmICghJHVzZXNfYXV0b2hlYWRlcikKKyAgICB7CisgICAgICB2ZXJiICIkY29uZmlndXJlX2FjOiBub3QgdXNpbmcgQXV0b2hlYWRlciI7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgeHN5c3RlbSAoJGF1dG9oZWFkZXIpOworICAgIH0KKworCisgICMgLS0tLS0tLS0tLS0tLS0tLS0tICMKKyAgIyBSdW5uaW5nIGF1dG9tYWtlLiAgIworICAjIC0tLS0tLS0tLS0tLS0tLS0tLSAjCisKKyAgaWYgKCEkdXNlc19hdXRvbWFrZSkKKyAgICB7CisgICAgICB2ZXJiICIkY29uZmlndXJlX2FjOiBub3QgdXNpbmcgQXV0b21ha2UiOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgICMgV2Ugc2hvdWxkIGFsd2F5cyBydW4gYXV0b21ha2UsIGFuZCBsZXQgaXQgZGVjaWRlIHdoZXRoZXIgaXQgc2hhbGwKKyAgICAgICMgdXBkYXRlIHRoZSBmaWxlIG9yIG5vdC4gIEluIGZhY3QsIHRoZSBlZmZlY3Qgb2YgYCRmb3JjZScgaXMgYWxyZWFkeQorICAgICAgIyBpbmNsdWRlZCBpbiBgJGF1dG9tYWtlJyB2aWEgYC0tbm8tZm9yY2UnLgorICAgICAgeHN5c3RlbSAoJGF1dG9tYWtlKTsKKyAgICB9CisKKworICAjIC0tLS0tLS0tLS0tLS0tICMKKyAgIyBSdW5uaW5nIG1ha2UuICAjCisgICMgLS0tLS0tLS0tLS0tLS0gIworCisgIGlmICgkcnVuX21ha2UpCisgICAgeworICAgICAgaWYgKCEtZiAiY29uZmlnLnN0YXR1cyIpCisJeworCSAgdmVyYiAibm8gY29uZmlnLnN0YXR1czogY2Fubm90IHJlLW1ha2UiOworCX0KKyAgICAgIGVsc2UKKwl7CisJICB4c3lzdGVtICgiLi9jb25maWcuc3RhdHVzIC0tcmVjaGVjayIpOworCSAgeHN5c3RlbSAoIi4vY29uZmlnLnN0YXR1cyIpOworCSAgaWYgKCEtZiAiTWFrZWZpbGUiKQorCSAgICB7CisJICAgICAgdmVyYiAibm8gTWFrZWZpbGU6IGNhbm5vdCByZS1tYWtlIjsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgeHN5c3RlbSAoIiRtYWtlIik7CisJICAgIH0KKwl9CisgICAgfQorfQorCisKKyMgJmF1dG9yZWNvbmYgKCRESVJFQ1RPUlkpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWNvbmYgdGhlICRESVJFQ1RPUlkuCitzdWIgYXV0b3JlY29uZiAoJCkKK3sKKyAgbXkgKCRkaXJlY3RvcnkpID0gQF87CisgIG15ICRjd2QgPSBjd2Q7CisKKyAgIyBUaGUgZm9ybWF0IGZvciB0aGlzIG1lc3NhZ2UgaXMgbm90IGZyZWU6IHRha2VuIGZyb20gRW1hY3MsIGl0c2VsZgorICAjIHVzaW5nIEdOVSBNYWtlJ3MgZm9ybWF0LgorICB2ZXJiICJFbnRlcmluZyBkaXJlY3RvcnkgYCRkaXJlY3RvcnknIjsKKyAgY2hkaXIgJGRpcmVjdG9yeQorICAgIG9yIGVycm9yICJjYW5ub3QgY2hkaXIgdG8gJGRpcmVjdG9yeTogJCEiOworCisgIGF1dG9yZWNvbmZfY3VycmVudF9kaXJlY3Rvcnk7CisKKyAgIyBUaGUgZm9ybWF0IGlzIG5vdCBmcmVlOiB0YWtlbiBmcm9tIEVtYWNzLCBpdHNlbGYgdXNpbmcgR05VIE1ha2UncworICAjIGZvcm1hdC4KKyAgdmVyYiAiTGVhdmluZyBkaXJlY3RvcnkgYCRkaXJlY3RvcnknIjsKKyAgY2hkaXIgJGN3ZAorICAgIG9yIGVycm9yICJjYW5ub3QgY2hkaXIgdG8gJGN3ZDogJCEiOworfQorCisKKyMjIC0tLS0tLSAjIworIyMgTWFpbi4gICMjCisjIyAtLS0tLS0gIyMKKworIyBXaGVuIGRlYnVnZ2luZywgaXQgaXMgY29udmVuaWVudCB0aGF0IGFsbCB0aGUgcmVsYXRlZCB0ZW1wb3JhcnkKKyMgZmlsZXMgYmUgYXQgdGhlIHNhbWUgcGxhY2UuCitta3RtcGRpciAoJ2FyJyk7CiskRU5WeydUTVBESVInfSA9ICR0bXA7CitwYXJzZV9hcmdzOworCisjIEF1dG9yZWNvbmYgYWxsIHRoZSBnaXZlbiBjb25maWd1cmUuYWMuICBVbmxlc3MgYC0tbm8tcmVjdXJzaXZlJyBpcyBwYXNzZWQsCisjIEFDX0NPTkZJR19TVUJESVJTIHdpbGwgYmUgdHJhdmVyc2VkIGluICZhdXRvcmVjb25mX2N1cnJlbnRfZGlyZWN0b3J5LgorJEVOVnsnQVVUT000VEUnfSA9ICRhdXRvbTR0ZTsKK2ZvciBteSAkZGlyZWN0b3J5IChAQVJHVikKKyAgeworICAgIHJlcXVpcmVfY29uZmlndXJlX2FjICgkZGlyZWN0b3J5KTsKKyAgICBhdXRvcmVjb25mICgkZGlyZWN0b3J5KTsKKyAgfQorCisjIyMgU2V0dXAgIkdOVSIgc3R5bGUgZm9yIHBlcmwtbW9kZSBhbmQgY3BlcmwtbW9kZS4KKyMjIExvY2FsIFZhcmlhYmxlczoKKyMjIHBlcmwtaW5kZW50LWxldmVsOiAyCisjIyBwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLWltYWdpbmFyeS1vZmZzZXQ6IDAKKyMjIHBlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtaW5kZW50LWxldmVsOiAyCisjIyBjcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWV4dHJhLW5ld2xpbmUtYmVmb3JlLWJyYWNlOiB0CisjIyBjcGVybC1tZXJnZS10cmFpbGluZy1lbHNlOiBuaWwKKyMjIGNwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBFbmQ6CmRpZmYgLS1naXQgYS9iaW4vYXV0b3NjYW4gYi9iaW4vYXV0b3NjYW4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmU5MTRhZgotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hdXRvc2NhbgpAQCAtMCwwICsxLDY3OSBAQAorIyEgL3Vzci9iaW4vcGVybCAtdworIyAtKi0gcGVybCAtKi0KKyMgR2VuZXJhdGVkIGZyb20gYXV0b3NjYW4uaW47IGRvIG5vdCBlZGl0IGJ5IGhhbmQuCisKKyMgYXV0b3NjYW4gLSBDcmVhdGUgY29uZmlndXJlLnNjYW4gKGEgcHJlbGltaW5hcnkgY29uZmlndXJlLmFjKSBmb3IgYSBwYWNrYWdlLgorIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsCisjIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFdyaXR0ZW4gYnkgRGF2aWQgTWFjS2VuemllIDxkam1AZ251LmFpLm1pdC5lZHU+LgorCitldmFsICdjYXNlICQjIGluIDApIGV4ZWMgL3Vzci9iaW4vcGVybCAtUyAiJDAiOzsgKikgZXhlYyAvdXNyL2Jpbi9wZXJsIC1TICIkMCIgIiRAIjs7IGVzYWMnCisgICAgaWYgMDsKKworQkVHSU4KK3sKKyAgbXkgJHBrZ2RhdGFkaXIgPSAkRU5WeydhdXRvbTR0ZV9wZXJsbGliZGlyJ30gfHwgJy91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9ob3N0L3Vzci9zaGFyZS9hdXRvY29uZic7CisgIHVuc2hpZnQgQElOQywgJHBrZ2RhdGFkaXI7CisKKyAgIyBPdmVycmlkZSBTSEVMTC4gIE9uIERKR1BQIFNIRUxMIG1heSBub3QgYmUgc2V0IHRvIGEgc2hlbGwKKyAgIyB0aGF0IGNhbiBoYW5kbGUgcmVkaXJlY3Rpb24gYW5kIHF1b3RlIGFyZ3VtZW50cyBjb3JyZWN0bHksCisgICMgZS5nLjogQ09NTUFORC5DT00uICBGb3IgREpHUFAgYWx3YXlzIHVzZSB0aGUgc2hlbGwgdGhhdCBjb25maWd1cmUKKyAgIyBoYXMgZGV0ZWN0ZWQuCisgICRFTlZ7J1NIRUxMJ30gPSAnL2Jpbi9zaCcgaWYgKCReTyBlcSAnZG9zJyk7Cit9CisKK3VzZSBBdXRvbTR0ZTo6Q2hhbm5lbERlZnM7Cit1c2UgQXV0b200dGU6OkNvbmZpZ3VyZV9hYzsKK3VzZSBBdXRvbTR0ZTo6R2VuZXJhbDsKK3VzZSBBdXRvbTR0ZTo6RmlsZVV0aWxzOwordXNlIEF1dG9tNHRlOjpYRmlsZTsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKK3VzZSBGaWxlOjpGaW5kOwordXNlIHN0cmljdDsKKwordXNlIHZhcnMgcXcoQGNmaWxlcyBAbWFrZWZpbGVzIEBzaGZpbGVzIEBzdWJkaXJzICVwcmludGVkKTsKKworIyBUaGUga2luZCBvZiB0aGUgd29yZHMgd2UgYXJlIGxvb2tpbmcgZm9yLgorbXkgQGtpbmRzID0gcXcgKGZ1bmN0aW9uIGhlYWRlciBpZGVudGlmaWVyIHByb2dyYW0KKwkJbWFrZXZhciBsaWJyYXJpZSk7CisKKyMgRm9yIGVhY2gga2luZCwgdGhlIGRlZmF1bHQgbWFjcm8uCitteSAlZ2VuZXJpY19tYWNybyA9CisgICgKKyAgICdmdW5jdGlvbicgICA9PiAnQUNfQ0hFQ0tfRlVOQ1MnLAorICAgJ2hlYWRlcicgICAgID0+ICdBQ19DSEVDS19IRUFERVJTJywKKyAgICdpZGVudGlmaWVyJyA9PiAnQUNfQ0hFQ0tfVFlQRVMnLAorICAgJ3Byb2dyYW0nICAgID0+ICdBQ19DSEVDS19QUk9HUycsCisgICAnbGlicmFyeScgICAgPT4gJ0FDX0NIRUNLX0xJQicKKyAgKTsKKworbXkgJWtpbmRfY29tbWVudCA9CisgICgKKyAgICdmdW5jdGlvbicgICA9PiAnQ2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucy4nLAorICAgJ2hlYWRlcicgICAgID0+ICdDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4nLAorICAgJ2lkZW50aWZpZXInID0+ICdDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLicsCisgICAncHJvZ3JhbScgICAgPT4gJ0NoZWNrcyBmb3IgcHJvZ3JhbXMuJywKKyAgKTsKKworIyAkVVNFRHtLSU5EfXtJVEVNfSBpcyB0aGUgbGlzdCBvZiBsb2NhdGlvbnMgd2hlcmUgdGhlIElURU0gKG9mIEtJTkQpIHdhcyB1c2VkCisjIGluIHRoZSB1c2VyIHBhY2thZ2UuCisjIEZvciBpbnN0YW5jZSAkVVNFRHtmdW5jdGlvbn17YWxsb2NhfSBpcyB0aGUgbGlzdCBvZiBgZmlsZTpsaW5lJyB3aGVyZQorIyBgYWxsb2NhICguLi4pJyBhcHBlYXJzLgorbXkgJXVzZWQgPSAoKTsKKworIyAkTUFDUk97S0lORH17SVRFTX0gaXMgdGhlIGxpc3Qgb2YgbWFjcm9zIHRvIHVzZSB0byB0ZXN0IElURU0uCisjIEluaXRpYWxpemVkIGZyb20gbGliL2F1dG9zY2FuLyouICBFLmcuLCAkTUFDUk97ZnVuY3Rpb259e2FsbG9jYX0gY29udGFpbnMKKyMgdGhlIHNpbmdsZXRvbiBBQ19GVU5DX0FMTE9DQS4gIFNvbWUgcmVxdWlyZSBzZXZlcmFsIGNoZWNrcy4KK215ICVtYWNybyA9ICgpOworCisjICRORUVERURfTUFDUk9Te01BQ1JPfSBpcyBhbiBhcnJheSBvZiBsb2NhdGlvbnMgcmVxdWlyaW5nIE1BQ1JPLgorIyBFLmcuLCAkTkVFREVEX01BQ1JPU3tBQ19GVU5DX0FMTE9DfSB0aGUgbGlzdCBvZiBgZmlsZTpsaW5lJyBjb250YWluaW5nCisjIGBhbGxvY2EgKC4uLiknLgorbXkgJW5lZWRlZF9tYWNyb3MgPQorICAoCisgICAnQUNfUFJFUkVRJyA9PiBbJG1lXSwKKyAgKTsKKworbXkgJGNvbmZpZ3VyZV9zY2FuID0gJ2NvbmZpZ3VyZS5zY2FuJzsKK215ICRsb2c7CisKKyMgQXV0b2NvbmYgYW5kIGxpYiBmaWxlcy4KK215ICRhdXRvbTR0ZSA9ICRFTlZ7J0FVVE9NNFRFJ30gfHwgJy91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9ob3N0L3Vzci9iaW4vYXV0b200dGUnOworbXkgJGF1dG9jb25mID0gIiRhdXRvbTR0ZSAtLWxhbmd1YWdlPWF1dG9jb25mIjsKK215IEBwcmVwZW5kX2luY2x1ZGU7CitteSBAaW5jbHVkZSA9ICgnL3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyL3NoYXJlL2F1dG9jb25mJyk7CisKKyMgJGhlbHAKKyMgLS0tLS0KKyRoZWxwID0gIlVzYWdlOiAkMCBbT1BUSU9OXS4uLiBbU1JDRElSXQorCitFeGFtaW5lIHNvdXJjZSBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5IHRyZWUgcm9vdGVkIGF0IFNSQ0RJUiwgb3IgdGhlCitjdXJyZW50IGRpcmVjdG9yeSBpZiBub25lIGlzIGdpdmVuLiAgU2VhcmNoIHRoZSBzb3VyY2UgZmlsZXMgZm9yCitjb21tb24gcG9ydGFiaWxpdHkgcHJvYmxlbXMsIGNoZWNrIGZvciBpbmNvbXBsZXRlbmVzcyBvZgorYGNvbmZpZ3VyZS5hYycsIGFuZCBjcmVhdGUgYSBmaWxlIGAkY29uZmlndXJlX3NjYW4nIHdoaWNoIGlzIGEKK3ByZWxpbWluYXJ5IGBjb25maWd1cmUuYWMnIGZvciB0aGF0IHBhY2thZ2UuCisKKyAgLWgsIC0taGVscCAgICAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtViwgLS12ZXJzaW9uICAgICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKyAgLXYsIC0tdmVyYm9zZSAgICAgICB2ZXJib3NlbHkgcmVwb3J0IHByb2Nlc3NpbmcKKyAgLWQsIC0tZGVidWcgICAgICAgICBkb24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCisKK0xpYnJhcnkgZGlyZWN0b3JpZXM6CisgIC1CLCAtLXByZXBlbmQtaW5jbHVkZT1ESVIgIHByZXBlbmQgZGlyZWN0b3J5IERJUiB0byBzZWFyY2ggcGF0aAorICAtSSwgLS1pbmNsdWRlPURJUiAgICAgICAgICBhcHBlbmQgZGlyZWN0b3J5IERJUiB0byBzZWFyY2ggcGF0aAorCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9jb25mXEBnbnUub3JnPi4KK0dOVSBBdXRvY29uZiBob21lIHBhZ2U6IDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYvPi4KK0dlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LgorIjsKKworIyAkdmVyc2lvbgorIyAtLS0tLS0tLQorJHZlcnNpb24gPSAiYXV0b3NjYW4gKEdOVSBBdXRvY29uZikgMi42NQorQ29weXJpZ2h0IChDKSAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorTGljZW5zZSBHUEx2MysvQXV0b2NvbmY6IEdOVSBHUEwgdmVyc2lvbiAzIG9yIGxhdGVyCis8aHR0cDovL2dudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWw+LCA8aHR0cDovL2dudS5vcmcvbGljZW5zZXMvZXhjZXB0aW9ucy5odG1sPgorVGhpcyBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgYXJlIGZyZWUgdG8gY2hhbmdlIGFuZCByZWRpc3RyaWJ1dGUgaXQuCitUaGVyZSBpcyBOTyBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LgorCitXcml0dGVuIGJ5IERhdmlkIEouIE1hY0tlbnppZSBhbmQgQWtpbSBEZW1haWxsZS4KKyI7CisKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQ29tbWFuZCBsaW5lIGludGVyZmFjZS4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBwYXJzZV9hcmdzICgpCisjIC0tLS0tLS0tLS0tLS0KKyMgUHJvY2VzcyBhbnkgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KK3N1YiBwYXJzZV9hcmdzICgpCit7CisgIGdldG9wdCAoJ0l8aW5jbHVkZT1zJyA9PiBcQGluY2x1ZGUsCisJICAnQnxwcmVwZW5kLWluY2x1ZGU9cycgPT4gXEBwcmVwZW5kX2luY2x1ZGUpOworCisgIGRpZSAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMKK1RyeSBgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCisgICAgaWYgQEFSR1YgPiAxOworCisgIG15ICRzcmNkaXIgPSAkQVJHVlswXSB8fCAiLiI7CisKKyAgdmVyYiAic3JjZGlyID0gJHNyY2RpciI7CisgIGNoZGlyICRzcmNkaXIgfHwgZXJyb3IgImNhbm5vdCBjZCB0byAkc3JjZGlyOiAkISI7Cit9CisKKworIyBpbml0X3RhYmxlcyAoKQorIyAtLS0tLS0tLS0tLS0tLQorIyBQdXQgdmFsdWVzIGluIHRoZSB0YWJsZXMgb2Ygd2hhdCB0byBkbyB3aXRoIGVhY2ggdG9rZW4uCitzdWIgaW5pdF90YWJsZXMgKCkKK3sKKyAgIyBUaGUgZGF0YSBmaWxlIGZvcm1hdCBzdXBwb3J0cyBvbmx5IG9uZSBsaW5lIG9mIG1hY3JvcyBwZXIgZnVuY3Rpb24uCisgICMgSWYgbW9yZSB0aGFuIHRoYXQgaXMgcmVxdWlyZWQgZm9yIGEgY29tbW9uIHBvcnRhYmlsaXR5IHByb2JsZW0sCisgICMgYSBuZXcgQXV0b2NvbmYgbWFjcm8gc2hvdWxkIHByb2JhYmx5IGJlIHdyaXR0ZW4gZm9yIHRoYXQgY2FzZSwKKyAgIyBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIHRoZSBjb2RlIGluIGxvdHMgb2YgY29uZmlndXJlLmFjIGZpbGVzLgorICBteSAkZmlsZSA9IGZpbmRfZmlsZSAoImF1dG9zY2FuL2F1dG9zY2FuLmxpc3QiLAorCQkJcmV2ZXJzZSAoQHByZXBlbmRfaW5jbHVkZSksIEBpbmNsdWRlKTsKKyAgbXkgJHRhYmxlID0gbmV3IEF1dG9tNHRlOjpYRmlsZSAiPCAiIC4gb3Blbl9xdW90ZSAoJGZpbGUpOworICBteSAkdGFibGVzX2FyZV9jb25zaXN0ZW50ID0gMTsKKworICB3aGlsZSAoJF8gPSAkdGFibGUtPmdldGxpbmUpCisgICAgeworICAgICAgIyBJZ25vcmUgYmxhbmsgbGluZXMgYW5kIGNvbW1lbnRzLgorICAgICAgbmV4dAorCWlmIC9eXHMqJC8gfHwgL15ccypcIy87CisKKyAgICAgICMgJzxraW5kPjogPHdvcmQ+IDxtYWNybyBpbnZvY2F0aW9uPicgb3IuLi4KKyAgICAgICMgJzxraW5kPjogPHdvcmQ+IHdhcm46IDxtZXNzYWdlPicuCisgICAgICBpZiAoL14oXFMrKTpccysoXFMrKVxzKyhcUy4qKSQvKQorCXsKKwkgIG15ICgka2luZCwgJHdvcmQsICRtYWNybykgPSAoJDEsICQyLCAkMyk7CisJICBlcnJvciAiJGZpbGU6JC46IGludmFsaWQga2luZDogJF8iCisJICAgIHVubGVzcyBncmVwIHsgJF8gZXEgJGtpbmQgfSBAa2luZHM7CisJICBwdXNoIEB7JG1hY3JveyRraW5kfXskd29yZH19LCAkbWFjcm87CisJfQorICAgICAgZWxzZQorCXsKKwkgIGVycm9yICIkZmlsZTokLjogaW52YWxpZCBkZWZpbml0aW9uOiAkXyI7CisJfQorICAgIH0KKworICBpZiAoJGRlYnVnKQorICAgIHsKKyAgICAgIGZvcmVhY2ggbXkgJGtpbmQgKEBraW5kcykKKwl7CisJICBmb3JlYWNoIG15ICR3b3JkIChzb3J0IGtleXMgJXskbWFjcm97JGtpbmR9fSkKKwkgICAgeworCSAgICAgIHByaW50ICIka2luZDogJHdvcmQ6IEB7JG1hY3JveyRraW5kfXskd29yZH19XG4iOworCSAgICB9CisJfQorCisgICAgfQorfQorCisKKyMgdXNlZCAoJEtJTkQsICRXT1JELCBbJFdIRVJFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgJFdPUkQgaXMgdXNlZCBhcyBhICRLSU5ELgorc3ViIHVzZWQgKCQkOyQpCit7CisgIG15ICgka2luZCwgJHdvcmQsICR3aGVyZSkgPSBAXzsKKyAgJHdoZXJlIHx8PSAiJEZpbGU6OkZpbmQ6Om5hbWU6JC4iOworICBpZiAoCisgICAgICAjIENoZWNrIGZvciBhbGwgdGhlIGxpYnJhcmllcy4gIEJ1dCBgLWxpbmtzJyBpcyBjZXJ0YWlubHkgYQorICAgICAgIyBgZmluZCcgYXJndW1lbnQsIGFuZCBgLWxlJywgYSBgdGVzdCcgYXJndW1lbnQuCisgICAgICAoJGtpbmQgZXEgJ2xpYnJhcnknICYmICR3b3JkICF+IC9eKGV8aW5rcykkLykKKyAgICAgICMgT3RoZXIgdGhhbiBsaWJyYXJpZXMgYXJlIHRvIGJlIGNoZWNrZWQgb25seSBpZiBsaXN0ZWQgaW4KKyAgICAgICMgdGhlIEF1dG9zY2FuIGxpYnJhcnkgZmlsZXMuCisgICAgICB8fCBkZWZpbmVkICRtYWNyb3ska2luZH17JHdvcmR9CisgICAgICkKKyAgICB7CisgICAgICBwdXNoIChAeyR1c2VkeyRraW5kfXskd29yZH19LCAkd2hlcmUpOworICAgIH0KK30KKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBTY2FubmluZyBzb3VyY2UgZmlsZXMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIHNjYW5fY19maWxlICgkRklMRS1OQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N1YiBzY2FuX2NfZmlsZSAoJCkKK3sKKyAgbXkgKCRmaWxlX25hbWUpID0gQF87CisgIHB1c2ggQGNmaWxlcywgJEZpbGU6OkZpbmQ6Om5hbWU7CisKKyAgIyBOb256ZXJvIGlmIGluIGEgbXVsdGlsaW5lIGNvbW1lbnQuCisgIG15ICRpbl9jb21tZW50ID0gMDsKKworICBteSAkZmlsZSA9IG5ldyBBdXRvbTR0ZTo6WEZpbGUgIjwgIiAuIG9wZW5fcXVvdGUgKCRmaWxlX25hbWUpOworCisgIHdoaWxlICgkXyA9ICRmaWxlLT5nZXRsaW5lKQorICAgIHsKKyAgICAgICMgU3RyaXAgb3V0IGNvbW1lbnRzLgorICAgICAgaWYgKCRpbl9jb21tZW50ICYmIHMsXi4qP1wqLywsKQorCXsKKwkgICRpbl9jb21tZW50ID0gMDsKKwl9CisgICAgICAjIFRoZSB3aG9sZSBsaW5lIGlzIGluc2lkZSBhIGNvbW1tZW50LgorICAgICAgbmV4dCBpZiAkaW5fY29tbWVudDsKKyAgICAgICMgQWxsIG9uIG9uZSBsaW5lLgorICAgICAgcywvXCouKj9cKi8sLGc7CisKKyAgICAgICMgU3RhcnRpbmcgb24gdGhpcyBsaW5lLgorICAgICAgaWYgKHMsL1wqLiokLCwpCisJeworCSAgJGluX2NvbW1lbnQgPSAxOworCX0KKworICAgICAgIyBQcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4KKyAgICAgIGlmIChzL15ccypcI1xzKi8vKQorCXsKKwkgIGlmICgvXmluY2x1ZGVccyo8KFtePl0qKT4vKQorCSAgICB7CisJICAgICAgdXNlZCAoJ2hlYWRlcicsICQxKTsKKwkgICAgfQorCSAgaWYgKHMvXihpZnxpZmRlZnxpZm5kZWZ8ZWxpZilccysvLykKKwkgICAgeworCSAgICAgIGZvcmVhY2ggbXkgJHdvcmQgKHNwbGl0ICgvXFcrLykpCisJCXsKKwkJICB1c2VkICgnaWRlbnRpZmllcicsICR3b3JkKQorCQkgICAgdW5sZXNzICR3b3JkIGVxICdkZWZpbmVkJyB8fCAkd29yZCAhfiAvXlthLXpBLVpfXS87CisJCX0KKwkgICAgfQorCSAgIyBJZ25vcmUgb3RoZXIgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuCisJICBuZXh0OworCX0KKworICAgICAgIyBSZW1vdmUgc3RyaW5nIGFuZCBjaGFyYWN0ZXIgY29uc3RhbnRzLgorICAgICAgcyxcIlteXCJdKlwiLCxnOworICAgICAgcyxcJ1teXCddKlwnLCxnOworCisgICAgICAjIFRva2VucyBpbiB0aGUgY29kZS4KKyAgICAgICMgTWF5YmUgd2Ugc2hvdWxkIGlnbm9yZSBmdW5jdGlvbiBkZWZpbml0aW9ucyAoaW4gY29sdW1uIDApPworICAgICAgd2hpbGUgKHMvXGIoW2EtekEtWl9dXHcqKVxzKlwoLyAvKQorCXsKKwkgIHVzZWQgKCdmdW5jdGlvbicsICQxKTsKKwl9CisgICAgICB3aGlsZSAocy9cYihbYS16QS1aX11cdyopXGIvIC8pCisJeworCSAgdXNlZCAoJ2lkZW50aWZpZXInLCAkMSk7CisJfQorICAgIH0KKworICAkZmlsZS0+Y2xvc2U7Cit9CisKKworIyBzY2FuX21ha2VmaWxlKCRNQUtFRklMRS1OQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3ViIHNjYW5fbWFrZWZpbGUgKCQpCit7CisgIG15ICgkZmlsZV9uYW1lKSA9IEBfOworICBwdXNoIEBtYWtlZmlsZXMsICRGaWxlOjpGaW5kOjpuYW1lOworCisgIG15ICRmaWxlID0gbmV3IEF1dG9tNHRlOjpYRmlsZSAiPCAiIC4gb3Blbl9xdW90ZSAoJGZpbGVfbmFtZSk7CisKKyAgd2hpbGUgKCRfID0gJGZpbGUtPmdldGxpbmUpCisgICAgeworICAgICAgIyBTdHJpcCBvdXQgY29tbWVudHMuCisgICAgICBzLyMuKi8vOworCisgICAgICAjIFZhcmlhYmxlIGFzc2lnbm1lbnRzLgorICAgICAgd2hpbGUgKHMvXGIoW2EtekEtWl9dXHcqKVxzKj0vIC8pCisJeworCSAgdXNlZCAoJ21ha2V2YXInLCAkMSk7CisJfQorICAgICAgIyBCZSBzdXJlIHRvIGNhdGNoIGEgd2hvbGUgd29yZC4gIEZvciBpbnN0YW5jZSBgbGV4JFUuJChPQkpFWFQpJworICAgICAgIyBpcyBhIHNpbmdsZSB0b2tlbi4gIE90aGVyd2lzZSB3ZSBtaWdodCBiZWxpZXZlIGBsZXgnIGlzIG5lZWRlZC4KKyAgICAgIGZvcmVhY2ggbXkgJHdvcmQgKHNwbGl0ICgvXHMrLykpCisJeworCSAgIyBMaWJyYXJpZXMuCisJICBpZiAoJHdvcmQgPX4gL14tbChbYS16QS1aX11cdyopJC8pCisJICAgIHsKKwkgICAgICB1c2VkICgnbGlicmFyeScsICQxKTsKKwkgICAgfQorCSAgIyBUb2tlbnMgaW4gdGhlIGNvZGUuCisJICAjIFdlIGFsbG93IHNvbWUgYWRkaXRpb25hbCBjaGFyYWN0ZXJzLCBlLmcuLCBgKycsIHNpbmNlCisJICAjIGF1dG9zY2FuL3Byb2dyYW1zIGluY2x1ZGVzIGBjKysnLgorCSAgaWYgKCR3b3JkID1+IC9eW2EtekEtWl9dW1x3K10qJC8pCisJICAgIHsKKwkgICAgICB1c2VkICgncHJvZ3JhbScsICR3b3JkKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgJGZpbGUtPmNsb3NlOworfQorCisKKyMgc2Nhbl9zaF9maWxlKCRTSEVMTC1TQ1JJUFQtTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N1YiBzY2FuX3NoX2ZpbGUgKCQpCit7CisgIG15ICgkZmlsZV9uYW1lKSA9IEBfOworICBwdXNoIEBzaGZpbGVzLCAkRmlsZTo6RmluZDo6bmFtZTsKKworICBteSAkZmlsZSA9IG5ldyBBdXRvbTR0ZTo6WEZpbGUgIjwgIiAuIG9wZW5fcXVvdGUgKCRmaWxlX25hbWUpOworCisgIHdoaWxlICgkXyA9ICRmaWxlLT5nZXRsaW5lKQorICAgIHsKKyAgICAgICMgU3RyaXAgb3V0IGNvbW1lbnRzIGFuZCB2YXJpYWJsZSByZWZlcmVuY2VzLgorICAgICAgcy8jLiovLzsKKyAgICAgIHMvXCR7W15cfV0qfS8vZzsKKyAgICAgIHMvQFteQF0qQC8vZzsKKworICAgICAgIyBUb2tlbnMgaW4gdGhlIGNvZGUuCisgICAgICB3aGlsZSAocy9cYihbYS16QS1aX11cdyopXGIvIC8pCisJeworCSAgdXNlZCAoJ3Byb2dyYW0nLCAkMSk7CisJfQorICAgIH0KKworICAkZmlsZS0+Y2xvc2U7Cit9CisKKworIyBzY2FuX2ZpbGUgKCkKKyMgLS0tLS0tLS0tLS0tCisjIENhbGxlZCBieSAmZmluZCBvbiBlYWNoIGZpbGUuICAkXyBjb250YWlucyB0aGUgY3VycmVudCBmaWxlIG5hbWUgd2l0aAorIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgb2YgdGhlIHdhbGsgdGhyb3VnaC4KK3N1YiBzY2FuX2ZpbGUgKCkKK3sKKyAgIyBXYW50ZWQgb25seSBpZiB0aGVyZSBpcyBubyBjb3JyZXNwb25kaW5nIEZJTEUuaW4uCisgIHJldHVybgorICAgIGlmIC1mICIkXy5pbiI7CisKKyAgIyBTYXZlICRfIGFzIEZpbmQ6OkZpbGUgcmVxdWlyZXMgaXQgdG8gYmUgcHJlc2VydmVkLgorICBsb2NhbCAkXyA9ICRfOworCisgICMgU3RyaXAgYSB1c2VsZXNzIGxlYWRpbmcgYC4vJy4KKyAgJEZpbGU6OkZpbmQ6Om5hbWUgPX4gcyxeXC4vLCw7CisKKyAgaWYgKCRfIG5lICcuJyBhbmQgLWQgJF8gYW5kCisgICAgICAtZiAiJF8vY29uZmlndXJlLmluIiAgfHwKKyAgICAgIC1mICIkXy9jb25maWd1cmUuYWMiICB8fAorICAgICAgLWYgIiRfL2NvbmZpZ3VyZS5nbnUiIHx8CisgICAgICAtZiAiJF8vY29uZmlndXJlIikKKyAgICB7CisgICAgICAkRmlsZTo6RmluZDo6cHJ1bmUgPSAxOworICAgICAgcHVzaCBAc3ViZGlycywgJEZpbGU6OkZpbmQ6Om5hbWU7CisgICAgfQorICBpZiAoL1wuW2NobHltXShcLmluKT8kLykKKyAgICB7CisgICAgICB1c2VkICdwcm9ncmFtJywgJ2NjJywgJEZpbGU6OkZpbmQ6Om5hbWU7CisgICAgICBzY2FuX2NfZmlsZSAoJF8pOworICAgIH0KKyAgZWxzaWYgKC9cLihjY3xjcHB8Y3h4fENDfEN8aGh8aHBwfGh4eHxISHxIfHl5fHlwcHxsbHxscHApKFwuaW4pPyQvKQorICAgIHsKKyAgICAgIHVzZWQgJ3Byb2dyYW0nLCAnYysrJywgJEZpbGU6OkZpbmQ6Om5hbWU7CisgICAgICBzY2FuX2NfZmlsZSAoJF8pOworICAgIH0KKyAgZWxzaWYgKCgvXigoPzpHTlVtfE18bSlha2VmaWxlKShcLmluKT8kLyAmJiAhIC1mICIkMS5hbSIpCisJIHx8IC9eKD86R05VbXxNfG0pYWtlZmlsZShcLmFtKT8kLykKKyAgICB7CisgICAgICBzY2FuX21ha2VmaWxlICgkXyk7CisgICAgfQorICBlbHNpZiAoL1wuc2goXC5pbik/JC8pCisgICAgeworICAgICAgc2Nhbl9zaF9maWxlICgkXyk7CisgICAgfQorfQorCisKKyMgc2Nhbl9maWxlcyAoKQorIyAtLS0tLS0tLS0tLS0tCisjIFJlYWQgdGhyb3VnaCB0aGUgZmlsZXMgYW5kIGNvbGxlY3QgbGlzdHMgb2YgdG9rZW5zIGluIHRoZW0KKyMgdGhhdCBtaWdodCBjcmVhdGUgbm9ucG9ydGFiaWxpdGllcy4KK3N1YiBzY2FuX2ZpbGVzICgpCit7CisgIGZpbmQgKFwmc2Nhbl9maWxlLCAnLicpOworCisgIGlmICgkdmVyYm9zZSkKKyAgICB7CisgICAgICBwcmludCAiY2ZpbGVzOiBAY2ZpbGVzXG4iOworICAgICAgcHJpbnQgIm1ha2VmaWxlczogQG1ha2VmaWxlc1xuIjsKKyAgICAgIHByaW50ICJzaGZpbGVzOiBAc2hmaWxlc1xuIjsKKworICAgICAgZm9yZWFjaCBteSAka2luZCAoQGtpbmRzKQorCXsKKwkgIHByaW50ICJcbiRraW5kOlxuIjsKKwkgIGZvcmVhY2ggbXkgJHdvcmQgKHNvcnQga2V5cyAleyR1c2VkeyRraW5kfX0pCisJICAgIHsKKwkgICAgICBwcmludCAiJHdvcmQ6IEB7JHVzZWR7JGtpbmR9eyR3b3JkfX1cbiI7CisJICAgIH0KKwl9CisgICAgfQorfQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBPdXRwdXQgY29uZmlndXJlLnNjYW4uICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIG91dHB1dF9raW5kICgkRklMRSwgJEtJTkQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdWIgb3V0cHV0X2tpbmQgKCQkKQoreworICBteSAoJGZpbGUsICRraW5kKSA9IEBfOworICAjIExpc3RzIG9mIHdvcmRzIHRvIGJlIGNoZWNrZWQgd2l0aCB0aGUgZ2VuZXJpYyBtYWNyby4KKyAgbXkgQGhhdmU7CisKKyAgcHJpbnQgJGZpbGUgIlxuIyAka2luZF9jb21tZW50eyRraW5kfVxuIgorICAgIGlmIGV4aXN0cyAka2luZF9jb21tZW50eyRraW5kfTsKKyAgZm9yZWFjaCBteSAkd29yZCAoc29ydCBrZXlzICV7JHVzZWR7JGtpbmR9fSkKKyAgICB7CisgICAgICAjIE91dHB1dCB0aGUgbmVlZGVkIG1hY3JvIGludm9jYXRpb25zIGluICRjb25maWd1cmVfc2NhbiBpZiBub3QKKyAgICAgICMgYWxyZWFkeSBwcmludGVkLCBhbmQgcmVtZW1iZXIgdGhlc2UgbWFjcm9zIGFyZSBuZWVkZWQuCisgICAgICBmb3JlYWNoIG15ICRtYWNybyAoQHskbWFjcm97JGtpbmR9eyR3b3JkfX0pCisJeworCSAgaWYgKCRtYWNybyA9fiAvXndhcm46XHMrKC4qKS8pCisJICAgIHsKKwkgICAgICBteSAkbWVzc2FnZSA9ICQxOworCSAgICAgIGZvcmVhY2ggbXkgJGxvY2F0aW9uIChAeyR1c2VkeyRraW5kfXskd29yZH19KQorCQl7CisJCSAgd2FybiAiJGxvY2F0aW9uOiB3YXJuaW5nOiAkbWVzc2FnZVxuIjsKKwkJfQorCSAgICB9CisJICBlbHNpZiAoZXhpc3RzICRnZW5lcmljX21hY3JveyRraW5kfQorCSAgICAgICYmICRtYWNybyBlcSAkZ2VuZXJpY19tYWNyb3ska2luZH0pCisJICAgIHsKKwkgICAgICBwdXNoIChAaGF2ZSwgJHdvcmQpOworCSAgICAgIHB1c2ggKEB7JG5lZWRlZF9tYWNyb3N7IiRnZW5lcmljX21hY3JveyRraW5kfShbJHdvcmRdKSJ9fSwKKwkJICAgIEB7JHVzZWR7JGtpbmR9eyR3b3JkfX0pOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBpZiAoISAkcHJpbnRlZHskbWFjcm99KQorCQl7CisJCSAgcHJpbnQgJGZpbGUgIiRtYWNyb1xuIjsKKwkJICAkcHJpbnRlZHskbWFjcm99ID0gMTsKKwkJfQorCSAgICAgIHB1c2ggKEB7JG5lZWRlZF9tYWNyb3N7JG1hY3JvfX0sCisJCSAgICBAeyR1c2VkeyRraW5kfXskd29yZH19KTsKKwkgICAgfQorCX0KKyAgICB9CisgIHByaW50ICRmaWxlICIkZ2VuZXJpY19tYWNyb3ska2luZH0oWyIgLiBqb2luKCcgJywgc29ydChAaGF2ZSkpIC4gIl0pXG4iCisgICAgaWYgQGhhdmU7Cit9CisKKworIyBvdXRwdXRfbGlicmFyaWVzICgkRklMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdWIgb3V0cHV0X2xpYnJhcmllcyAoJCkKK3sKKyAgbXkgKCRmaWxlKSA9IEBfOworCisgIHByaW50ICRmaWxlICJcbiMgQ2hlY2tzIGZvciBsaWJyYXJpZXMuXG4iOworICBmb3JlYWNoIG15ICR3b3JkIChzb3J0IGtleXMgJXskdXNlZHsnbGlicmFyeSd9fSkKKyAgICB7CisgICAgICBwcmludCAkZmlsZSAiIyBGSVhNRTogUmVwbGFjZSBgbWFpbicgd2l0aCBhIGZ1bmN0aW9uIGluIGAtbCR3b3JkJzpcbiI7CisgICAgICBwcmludCAkZmlsZSAiQUNfQ0hFQ0tfTElCKFskd29yZF0sIFttYWluXSlcbiI7CisgICAgfQorfQorCisKKyMgb3V0cHV0ICgkQ09ORklHVVJFX1NDQU4pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcmludCBhIHByb3RvIGNvbmZpZ3VyZS5hYy4KK3N1YiBvdXRwdXQgKCQpCit7CisgIG15ICRjb25maWd1cmVfc2NhbiA9IHNoaWZ0OworICBteSAldW5pcXVlX21ha2VmaWxlczsKKworICBteSAkZmlsZSA9IG5ldyBBdXRvbTR0ZTo6WEZpbGUgIj4gIiAuIG9wZW5fcXVvdGUgKCRjb25maWd1cmVfc2Nhbik7CisKKyAgcHJpbnQgJGZpbGUKKyAgICAoIiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi1cbiIgLgorICAgICAiIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LlxuIiAuCisgICAgICJcbiIgLgorICAgICAiQUNfUFJFUkVRKFsyLjY1XSlcbiIgLgorICAgICAiQUNfSU5JVChbRlVMTC1QQUNLQUdFLU5BTUVdLCBbVkVSU0lPTl0sIFtCVUctUkVQT1JULUFERFJFU1NdKVxuIik7CisgIGlmIChkZWZpbmVkICRjZmlsZXNbMF0pCisgICAgeworICAgICAgcHJpbnQgJGZpbGUgIkFDX0NPTkZJR19TUkNESVIoWyRjZmlsZXNbMF1dKVxuIjsKKyAgICAgIHByaW50ICRmaWxlICJBQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmhdKVxuIjsKKyAgICB9CisKKyAgb3V0cHV0X2tpbmQgKCRmaWxlLCAncHJvZ3JhbScpOworICBvdXRwdXRfa2luZCAoJGZpbGUsICdtYWtldmFyJyk7CisgIG91dHB1dF9saWJyYXJpZXMgKCRmaWxlKTsKKyAgb3V0cHV0X2tpbmQgKCRmaWxlLCAnaGVhZGVyJyk7CisgIG91dHB1dF9raW5kICgkZmlsZSwgJ2lkZW50aWZpZXInKTsKKyAgb3V0cHV0X2tpbmQgKCRmaWxlLCAnZnVuY3Rpb24nKTsKKworICBwcmludCAkZmlsZSAiXG4iOworICBpZiAoQG1ha2VmaWxlcykKKyAgICB7CisgICAgICAjIENoYW5nZSBESVIvTWFrZWZpbGUuaW4gdG8gRElSL01ha2VmaWxlLgorICAgICAgZm9yZWFjaCBteSAkbSAoQG1ha2VmaWxlcykKKwl7CisJICAkbSA9fiBzL1wuKD86aW58YW0pJC8vOworCSAgJHVuaXF1ZV9tYWtlZmlsZXN7JG19Kys7CisJfQorICAgICAgcHJpbnQgJGZpbGUgKCJBQ19DT05GSUdfRklMRVMoWyIsCisJCSAgIGpvaW4gKCJcbiAgICAgICAgICAgICAgICAgIiwKKwkJCSBzb3J0IGtleXMgJXVuaXF1ZV9tYWtlZmlsZXMpLCAiXSlcbiIpOworICAgIH0KKyAgaWYgKEBzdWJkaXJzKQorICAgIHsKKyAgICAgIHByaW50ICRmaWxlICgiQUNfQ09ORklHX1NVQkRJUlMoWyIsCisJCSAgIGpvaW4gKCJcbiAgICAgICAgICAgICAgICAgICAiLAorCQkJIHNvcnQgQHN1YmRpcnMpLCAiXSlcbiIpOworICAgIH0KKyAgcHJpbnQgJGZpbGUgIkFDX09VVFBVVFxuIjsKKworICAkZmlsZS0+Y2xvc2U7Cit9CisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIENoZWNraW5nIHRoZSBhY2N1cmFjeSBvZiBjb25maWd1cmUuYWMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyAmY2hlY2tfY29uZmlndXJlX2FjICgkQ09ORklHVVJFX0FDKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBVc2UgYXV0b2NvbmYgdG8gY2hlY2sgaWYgYWxsIHRoZSBzdWdnZXN0ZWQgbWFjcm9zIGFyZSBpbmNsdWRlZAorIyBpbiBDT05GSUdVUkVfQUMuCitzdWIgY2hlY2tfY29uZmlndXJlX2FjICgkKQoreworICBteSAoJGNvbmZpZ3VyZV9hYykgPSBAXzsKKworICAjIEZpbmQgd2hhdCBuZWVkZWQgbWFjcm9zIGFyZSBpbnZva2VkIGluIENPTkZJR1VSRV9BQy4KKyAgIyBJJ2QgYmUgdmVyeSBoYXBweSBpZiBzb21lb25lIGNvdWxkIGV4cGxhaW4gdG8gbWUgd2h5IHNvcnQgKHVuaXEgLi4uKQorICAjIGRvZXNuJ3Qgd29yayBwcm9wZXJseTogSSBuZWVkIGB1bmlxIChzb3J0IC4uLiknLiAgLS1ha2ltCisgIG15ICR0cmFjZV9vcHRpb24gPQorICAgIGpvaW4gKCcgLS10cmFjZT0nLCAnJywKKwkgIHVuaXEgKHNvcnQgKG1hcCB7IHMvXCguKi8vOyAkXyB9IGtleXMgJW5lZWRlZF9tYWNyb3MpKSk7CisKKyAgdmVyYiAicnVubmluZzogJGF1dG9jb25mICR0cmFjZV9vcHRpb24gJGNvbmZpZ3VyZV9hYyI7CisgIG15ICR0cmFjZXMgPQorICAgIG5ldyBBdXRvbTR0ZTo6WEZpbGUgIiRhdXRvY29uZiAkdHJhY2Vfb3B0aW9uICRjb25maWd1cmVfYWMgfCI7CisKKyAgd2hpbGUgKCRfID0gJHRyYWNlcy0+Z2V0bGluZSkKKyAgICB7CisgICAgICBjaG9tcDsKKyAgICAgIG15ICgkZmlsZSwgJGxpbmUsICRtYWNybywgQGFyZ3MpID0gc3BsaXQgKC86LywgJF8pOworICAgICAgaWYgKCRtYWNybyA9fiAvXkFDX0NIRUNLXyhIRUFERVJ8RlVOQ3xUWVBFfE1FTUJFUilTJC8pCisJeworCSAgIyBUbyBiZSByaWdvcm91cywgd2Ugc2hvdWxkIGRpc3Rpbmd1aXNoIGJldHdlZW4gc3BhY2UgYW5kIGNvbW1hCisJICAjIHNlcGFyYXRlZCBtYWNyb3MuICBCdXQgdGhlcmUgaXMgbm8gcG9pbnQuCisJICBmb3JlYWNoIG15ICR3b3JkIChzcGxpdCAoL1xzfCwvLCAkYXJnc1swXSkpCisJICAgIHsKKwkgICAgICAjIEFDX0NIRUNLX01FTUJFUlMgd2FudHMgYHN0cnVjdCcgb3IgYHVuaW9uJy4KKwkgICAgICBpZiAoJG1hY3JvIGVxICJBQ19DSEVDS19NRU1CRVJTIgorCQkgICYmICR3b3JkID1+IC9ec3RhdC5zdF8vKQorCQl7CisJCSAgJHdvcmQgPSAic3RydWN0ICIgLiAkd29yZDsKKwkJfQorCSAgICAgIGRlbGV0ZSAkbmVlZGVkX21hY3Jvc3siJG1hY3JvKFskd29yZF0pIn07CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgZGVsZXRlICRuZWVkZWRfbWFjcm9zeyRtYWNyb307CisJfQorICAgIH0KKworICAkdHJhY2VzLT5jbG9zZTsKKworICAjIFJlcG9ydCB0aGUgbWlzc2luZyBtYWNyb3MuCisgIGZvcmVhY2ggbXkgJG1hY3JvIChzb3J0IGtleXMgJW5lZWRlZF9tYWNyb3MpCisgICAgeworICAgICAgd2FybiAoIiRjb25maWd1cmVfYWM6IHdhcm5pbmc6IG1pc3NpbmcgJG1hY3JvIHdhbnRlZCBieTogIgorCSAgICAuICgkeyRuZWVkZWRfbWFjcm9zeyRtYWNyb319WzBdKQorCSAgICAuICJcbiIpOworICAgICAgcHJpbnQgJGxvZyAiJG1lOiB3YXJuaW5nOiBtaXNzaW5nICRtYWNybyB3YW50ZWQgYnk6IFxuIjsKKyAgICAgIGZvcmVhY2ggbXkgJG5lZWQgKEB7JG5lZWRlZF9tYWNyb3N7JG1hY3JvfX0pCisJeworCSAgcHJpbnQgJGxvZyAiXHQkbmVlZFxuIjsKKwl9CisgICAgfQorfQorCisKKyMjIC0tLS0tLS0tLS0tLS0tICMjCisjIyBNYWluIHByb2dyYW0uICAjIworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKworcGFyc2VfYXJnczsKKyRsb2cgPSBuZXcgQXV0b200dGU6OlhGaWxlICI+ICIgLiBvcGVuX3F1b3RlICgiJG1lLmxvZyIpOworCiskYXV0b2NvbmYgLj0gIiAtLWRlYnVnIiBpZiAkZGVidWc7CiskYXV0b2NvbmYgLj0gIiAtLXZlcmJvc2UiIGlmICR2ZXJib3NlOworJGF1dG9jb25mIC49IGpvaW4gKCcgLS1pbmNsdWRlPScsICcnLCBtYXAgeyBzaGVsbF9xdW90ZSAoJF8pIH0gQGluY2x1ZGUpOworJGF1dG9jb25mIC49IGpvaW4gKCcgLS1wcmVwZW5kLWluY2x1ZGU9JywgJycsIG1hcCB7IHNoZWxsX3F1b3RlICgkXykgfSBAcHJlcGVuZF9pbmNsdWRlKTsKKworbXkgJGNvbmZpZ3VyZV9hYyA9IGZpbmRfY29uZmlndXJlX2FjOworaW5pdF90YWJsZXM7CitzY2FuX2ZpbGVzOworb3V0cHV0ICgnY29uZmlndXJlLnNjYW4nKTsKK2lmICgtZiAkY29uZmlndXJlX2FjKQorICB7CisgICAgY2hlY2tfY29uZmlndXJlX2FjICgkY29uZmlndXJlX2FjKTsKKyAgfQorIyBUaGlzIGNsb3NlIGlzIHJlYWxseSBuZWVkZWQuICBGb3Igc29tZSByZWFzb24sIHByb2JhYmx5IGJlc3QgbmFtZWQKKyMgYSBidWcsIGl0IHNlZW1zIHRoYXQgdGhlIGR0b3Igb2YgJExPRyBpcyBub3QgY2FsbGVkIGF1dG9tYXRpY2FsbHkKKyMgYXQgRU5ELiAgSXQgcmVzdWx0cyBpbiBhIHRydW5jYXRlZCBmaWxlLgorJGxvZy0+Y2xvc2U7CitleGl0IDA7CisKKyMjIyBTZXR1cCAiR05VIiBzdHlsZSBmb3IgcGVybC1tb2RlIGFuZCBjcGVybC1tb2RlLgorIyMgTG9jYWwgVmFyaWFibGVzOgorIyMgcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIHBlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIHBlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2UtaW1hZ2luYXJ5LW9mZnNldDogMAorIyMgcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIGNwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtZXh0cmEtbmV3bGluZS1iZWZvcmUtYnJhY2U6IHQKKyMjIGNwZXJsLW1lcmdlLXRyYWlsaW5nLWVsc2U6IG5pbAorIyMgY3BlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIEVuZDoKZGlmZiAtLWdpdCBhL2Jpbi9hdXRvdXBkYXRlIGIvYmluL2F1dG91cGRhdGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGZjNWIyNAotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hdXRvdXBkYXRlCkBAIC0wLDAgKzEsMTA2NCBAQAorIyEgL3Vzci9iaW4vcGVybCAtdworIyAtKi0gcGVybCAtKi0KKyMgR2VuZXJhdGVkIGZyb20gYXV0b3VwZGF0ZS5pbjsgZG8gbm90IGVkaXQgYnkgaGFuZC4KKworIyBhdXRvdXBkYXRlIC0gbW9kZXJuaXplIGFuIEF1dG9jb25mIGZpbGUuCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwKKyMgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IERhdmlkIE1hY0tlbnppZSA8ZGptQGdudS5haS5taXQuZWR1Pi4KKyMgUmV3cml0dGVuIGJ5IEFraW0gRGVtYWlsbGUgPGFraW1AZnJlZWZyaWVuZHMub3JnPi4KKworZXZhbCAnY2FzZSAkIyBpbiAwKSBleGVjIC91c3IvYmluL3BlcmwgLVMgIiQwIjs7ICopIGV4ZWMgL3Vzci9iaW4vcGVybCAtUyAiJDAiICIkQCI7OyBlc2FjJworICAgIGlmIDA7CisKK0JFR0lOCit7CisgIG15ICRwa2dkYXRhZGlyID0gJEVOVnsnYXV0b200dGVfcGVybGxpYmRpcid9IHx8ICcvdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3Ivc2hhcmUvYXV0b2NvbmYnOworICB1bnNoaWZ0IEBJTkMsICRwa2dkYXRhZGlyOworCisgICMgT3ZlcnJpZGUgU0hFTEwuICBPbiBESkdQUCBTSEVMTCBtYXkgbm90IGJlIHNldCB0byBhIHNoZWxsCisgICMgdGhhdCBjYW4gaGFuZGxlIHJlZGlyZWN0aW9uIGFuZCBxdW90ZSBhcmd1bWVudHMgY29ycmVjdGx5LAorICAjIGUuZy46IENPTU1BTkQuQ09NLiAgRm9yIERKR1BQIGFsd2F5cyB1c2UgdGhlIHNoZWxsIHRoYXQgY29uZmlndXJlCisgICMgaGFzIGRldGVjdGVkLgorICAkRU5WeydTSEVMTCd9ID0gJy9iaW4vc2gnIGlmICgkXk8gZXEgJ2RvcycpOworfQorCit1c2UgQXV0b200dGU6OkNoYW5uZWxEZWZzOwordXNlIEF1dG9tNHRlOjpDaGFubmVsczsKK3VzZSBBdXRvbTR0ZTo6Q29uZmlndXJlX2FjOwordXNlIEF1dG9tNHRlOjpGaWxlVXRpbHM7Cit1c2UgQXV0b200dGU6OkdlbmVyYWw7Cit1c2UgQXV0b200dGU6OlhGaWxlOwordXNlIEZpbGU6OkJhc2VuYW1lOwordXNlIHN0cmljdDsKKworIyBMaWIgZmlsZXMuCitteSAkYXV0b200dGUgPSAkRU5WeydBVVRPTTRURSd9IHx8ICcvdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3IvYmluL2F1dG9tNHRlJzsKK215ICRhdXRvY29uZiA9ICIkYXV0b200dGUgLS1sYW5ndWFnZT1hdXRvY29uZiI7CisjIFdlIG5lZWQgdG8gZmluZCBtNHN1Z2FyLgorbXkgQHByZXBlbmRfaW5jbHVkZTsKK215IEBpbmNsdWRlID0gKCcvdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3Ivc2hhcmUvYXV0b2NvbmYnKTsKK215ICRmb3JjZSA9IDA7CisjIG00LgorbXkgJG00ID0gJEVOVnsiTTQifSB8fCAnL3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyL2Jpbi9tNCc7CisKKworIyAkSEVMUAorIyAtLS0tLQorJGhlbHAgPSAiVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtURU1QTEFURS1GSUxFXS4uLgorCitVcGRhdGUgZWFjaCBURU1QTEFURS1GSUxFIGlmIGdpdmVuLCBvciBgY29uZmlndXJlLmFjJyBpZiBwcmVzZW50LAorb3IgZWxzZSBgY29uZmlndXJlLmluJywgdG8gdGhlIHN5bnRheCBvZiB0aGUgY3VycmVudCB2ZXJzaW9uIG9mCitBdXRvY29uZi4gIFRoZSBvcmlnaW5hbCBmaWxlcyBhcmUgYmFja2VkIHVwLgorCitPcGVyYXRpb24gbW9kZXM6CisgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKyAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgdmVyYm9zZWx5IHJlcG9ydCBwcm9jZXNzaW5nCisgIC1kLCAtLWRlYnVnICAgICAgICAgICAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKyAgLWYsIC0tZm9yY2UgICAgICAgICAgICAgICAgY29uc2lkZXIgYWxsIGZpbGVzIG9ic29sZXRlCisKK0xpYnJhcnkgZGlyZWN0b3JpZXM6CisgIC1CLCAtLXByZXBlbmQtaW5jbHVkZT1ESVIgIHByZXBlbmQgZGlyZWN0b3J5IERJUiB0byBzZWFyY2ggcGF0aAorICAtSSwgLS1pbmNsdWRlPURJUiAgICAgICAgICBhcHBlbmQgZGlyZWN0b3J5IERJUiB0byBzZWFyY2ggcGF0aAorCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9jb25mXEBnbnUub3JnPi4KK0dOVSBBdXRvY29uZiBob21lIHBhZ2U6IDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYvPi4KK0dlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LgorIjsKKworIyAkVkVSU0lPTgorIyAtLS0tLS0tLQorJHZlcnNpb24gPSAiYXV0b3VwZGF0ZSAoR05VIEF1dG9jb25mKSAyLjY1CitDb3B5cmlnaHQgKEMpIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitMaWNlbnNlIEdQTHYzKy9BdXRvY29uZjogR05VIEdQTCB2ZXJzaW9uIDMgb3IgbGF0ZXIKKzxodHRwOi8vZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbD4sIDxodHRwOi8vZ251Lm9yZy9saWNlbnNlcy9leGNlcHRpb25zLmh0bWw+CitUaGlzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBhcmUgZnJlZSB0byBjaGFuZ2UgYW5kIHJlZGlzdHJpYnV0ZSBpdC4KK1RoZXJlIGlzIE5PIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuCisKK1dyaXR0ZW4gYnkgRGF2aWQgSi4gTWFjS2VuemllIGFuZCBBa2ltIERlbWFpbGxlLgorIjsKKworIyMgLS0tLS0tLS0tLSAjIworIyMgUm91dGluZXMuICAjIworIyMgLS0tLS0tLS0tLSAjIworCisKKyMgcGFyc2VfYXJncyAoKQorIyAtLS0tLS0tLS0tLS0tCisjIFByb2Nlc3MgYW55IGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCitzdWIgcGFyc2VfYXJncyAoKQoreworICBteSAkc3JjZGlyOworCisgIGdldG9wdCAoJ0l8aW5jbHVkZT1zJyAgICAgICAgID0+IFxAaW5jbHVkZSwKKwkgICdCfHByZXBlbmQtaW5jbHVkZT1zJyA9PiBcQHByZXBlbmRfaW5jbHVkZSwKKwkgICdmfGZvcmNlJyAgICAgICAgICAgICA9PiBcJGZvcmNlKTsKKworICBpZiAoISBAQVJHVikKKyAgICB7CisgICAgICBteSAkY29uZmlndXJlX2FjID0gcmVxdWlyZV9jb25maWd1cmVfYWM7CisgICAgICBwdXNoIEBBUkdWLCAkY29uZmlndXJlX2FjOworICAgIH0KK30KKworCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0gIworIyBBdXRvY29uZiBtYWNyb3MuICAjCisjIC0tLS0tLS0tLS0tLS0tLS0tICMKKworbXkgKCVhY19tYWNyb3MsICVhdV9tYWNyb3MsICVtNF9idWlsdGlucyk7CisKKyMgSEFORExFX0FVVE9DT05GX01BQ1JPUyAoKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEBNNF9CVUlMVElOUyAtLSBNNCBidWlsdGlucyBhbmQgYSB1c2VmdWwgY29tbWVudC4KK3N1YiBoYW5kbGVfYXV0b2NvbmZfbWFjcm9zICgpCit7CisgICMgR2V0IHRoZSBidWlsdGlucy4KKyAgeHN5c3RlbSAoImVjaG8gZHVtcGRlZiB8ICRtNCAyPiIgLiBzaGVsbF9xdW90ZSAoIiR0bXAvbTQuZGVmcyIpIC4gIiA+L2Rldi9udWxsIik7CisgIG15ICRtNF9kZWZzID0gbmV3IEF1dG9tNHRlOjpYRmlsZSAiPCAiIC4gb3Blbl9xdW90ZSAoIiR0bXAvbTQuZGVmcyIpOworICB3aGlsZSAoJF8gPSAkbTRfZGVmcy0+Z2V0bGluZSkKKyAgICB7CisgICAgICAkbTRfYnVpbHRpbnN7JDF9ID0gMQorCWlmIC9eKFx3Kyk6LzsKKyAgICB9CisgICRtNF9kZWZzLT5jbG9zZTsKKworICBteSAkbWFjcm9zID0gbmV3IEF1dG9tNHRlOjpYRmlsZSAoIiRhdXRvY29uZiIKKwkJCQkgICAgLiAiIC0tdHJhY2UgQVVfREVGSU5FOidBVTpcJGY6XCQxJyIKKwkJCQkgICAgLiAiIC0tdHJhY2UgZGVmaW5lOidBQzpcJGY6XCQxJyIKKwkJCQkgICAgLiAiIC0tbWVsdCAvZGV2L251bGwgfCIpOworICB3aGlsZSAoJF8gPSAkbWFjcm9zLT5nZXRsaW5lKQorICAgIHsKKyAgICAgIGNob21wOworICAgICAgbXkgKCRkb21haW4sICRmaWxlLCAkbWFjcm8pID0gL14oQUN8QVUpOiguKik6KFteOl0qKSQvIG9yIG5leHQ7CisgICAgICBpZiAoJGRvbWFpbiBlcSAiQVUiKQorCXsKKwkgICRhdV9tYWNyb3N7JG1hY3JvfSA9IDE7CisJfQorICAgICAgZWxzaWYgKCRmaWxlID1+IC8oXnxcLyltNHN1Z2FyXC8obTRzdWdhcnx2ZXJzaW9uKVwubTQkLykKKwl7CisJICAjIEFkZCB0aGUgbTRzdWdhciBtYWNyb3MgdG8gbTRfYnVpbHRpbnMuCisJICAkbTRfYnVpbHRpbnN7JG1hY3JvfSA9IDE7CisJfQorICAgICAgZWxzZQorCXsKKwkgICMgQXV0b2NvbmYsIGFjbG9jYWwsIGFuZCBtNHNoIG1hY3Jvcy4KKwkgICRhY19tYWNyb3N7JG1hY3JvfSA9IDE7CisJfQorICAgIH0KKyAgJG1hY3Jvcy0+Y2xvc2U7CisKKworICAjIERvbid0IGtlZXAgQVUgbWFjcm9zIGluIEBBQ19NQUNST1MuCisgIGRlbGV0ZSAkYWNfbWFjcm9zeyRffQorICAgIGZvcmVhY2ggKGtleXMgJWF1X21hY3Jvcyk7CisgICMgRG9uJ3Qga2VlcCBNNHN1Z2FyIG1hY3JvcyB3aGljaCBhcmUgcmVkZWZpbmVkIGJ5IEF1dG9jb25mLAorICAjIHN1Y2ggYXMgYGJ1aWx0aW4nLCBgY2hhbmdlcXVvdGUnIGV0Yy4gIFNlZSBhdXRvY29uZi9hdXRvY29uZi5tNC4KKyAgZGVsZXRlICRhY19tYWNyb3N7JF99CisgICAgZm9yZWFjaCAoa2V5cyAlbTRfYnVpbHRpbnMpOworICBlcnJvciAibm8gY3VycmVudCBBdXRvY29uZiBtYWNyb3MgZm91bmQiCisgICAgdW5sZXNzIGtleXMgJWFjX21hY3JvczsKKyAgZXJyb3IgIm5vIG9ic29sZXRlIEF1dG9jb25mIG1hY3JvcyBmb3VuZCIKKyAgICB1bmxlc3Mga2V5cyAlYXVfbWFjcm9zOworCisgIGlmICgkZGVidWcpCisgICAgeworICAgICAgcHJpbnQgU1RERVJSICJDdXJyZW50IEF1dG9jb25mIG1hY3JvczpcbiI7CisgICAgICBwcmludCBTVERFUlIgam9pbiAoJyAnLCBzb3J0IGtleXMgJWFjX21hY3JvcykgLiAiXG5cbiI7CisgICAgICBwcmludCBTVERFUlIgIk9ic29sZXRlIEF1dG9jb25mIG1hY3JvczpcbiI7CisgICAgICBwcmludCBTVERFUlIgam9pbiAoJyAnLCBzb3J0IGtleXMgJWF1X21hY3JvcykgLiAiXG5cbiI7CisgICAgfQorCisgICMgYWMubTQgLS0gYXV0b3F1b3RpbmcgZGVmaW5pdGlvbnMgb2YgdGhlIEFDIG1hY3JvcyAoTTRzdWdhciBleGNsdWRlZCkuCisgICMgdW5hYy5tNCAtLSB1bmRlZmluZSB0aGUgQUMgbWFjcm9zLgorICBteSAkYWNfbTQgPSBuZXcgQXV0b200dGU6OlhGaWxlICI+ICIgLiBvcGVuX3F1b3RlICgiJHRtcC9hYy5tNCIpOworICBwcmludCAkYWNfbTQgIiMgYWMubTQgLS0gYXV0b3F1b3RpbmcgZGVmaW5pdGlvbnMgb2YgdGhlIEFDIG1hY3Jvcy5cbiI7CisgIG15ICR1bmFjX200ID0gbmV3IEF1dG9tNHRlOjpYRmlsZSAiPiAiIC4gb3Blbl9xdW90ZSAoIiR0bXAvdW5hYy5tNCIpOworICBwcmludCAkdW5hY19tNCAiIyB1bmFjLm00IC0tIHVuZGVmaW5lIHRoZSBBQyBtYWNyb3MuXG4iOworICBmb3JlYWNoIChzb3J0IGtleXMgJWFjX21hY3JvcykKKyAgICB7CisgICAgICBwcmludCAkYWNfbTQgICAiX2F1X200X2RlZmluZShbJF9dLCBbbTRfaWYoXCQjLCAwLCBbW1wkMF1dLCBbW1wkMChcJFxAKV1dKV0pXG4iOworICAgICAgcHJpbnQgJHVuYWNfbTQgIl9hdV9tNF91bmRlZmluZShbJF9dKVxuIjsKKyAgICB9CisKKyAgIyBtNHNhdmUubTQgLS0gc2F2ZSB0aGUgbTQgYnVpbHRpbnMuCisgICMgdW5tNC5tNCAtLSBkaXNhYmxlIHRoZSBtNCBidWlsdGlucy4KKyAgIyBtNC5tNCAtLSBlbmFibGUgdGhlIG00IGJ1aWx0aW5zLgorICBteSAkbTRzYXZlX200ID0gbmV3IEF1dG9tNHRlOjpYRmlsZSAiPiAiIC4gb3Blbl9xdW90ZSAoIiR0bXAvbTRzYXZlLm00Iik7CisgIHByaW50ICRtNHNhdmVfbTQgIiMgbTRzYXZlLm00IC0tIHNhdmUgdGhlIG00IGJ1aWx0aW5zLlxuIjsKKyAgbXkgJHVubTRfbTQgPSBuZXcgQXV0b200dGU6OlhGaWxlICI+ICIgLiBvcGVuX3F1b3RlICgiJHRtcC91bm00Lm00Iik7CisgIHByaW50ICR1bm00X200ICIjIHVubTQubTQgLS0gZGlzYWJsZSB0aGUgbTQgYnVpbHRpbnMuXG4iOworICBteSAkbTRfbTQgPSBuZXcgQXV0b200dGU6OlhGaWxlICI+ICIgLiBvcGVuX3F1b3RlICgiJHRtcC9tNC5tNCIpOworICBwcmludCAkbTRfbTQgIiMgbTQubTQgLS0gZW5hYmxlIHRoZSBtNCBidWlsdGlucy5cbiI7CisgIGZvcmVhY2ggKHNvcnQga2V5cyAlbTRfYnVpbHRpbnMpCisgICAgeworICAgICAgcHJpbnQgJG00c2F2ZV9tNCAiX2F1X19zYXZlKFskX10pXG4iOworICAgICAgcHJpbnQgJHVubTRfbTQgICAiX2F1X191bmRlZmluZShbJF9dKVxuIjsKKyAgICAgIHByaW50ICRtNF9tNCAgICAgIl9hdV9fcmVzdG9yZShbJF9dKVxuIjsKKyAgICB9Cit9CisKKworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1haW4gcHJvZ3JhbS4gICMjCisjIyAtLS0tLS0tLS0tLS0tLSAjIworCitwYXJzZV9hcmdzOworJGF1dG9jb25mIC49ICIgLS1kZWJ1ZyIgaWYgJGRlYnVnOworJGF1dG9jb25mIC49ICIgLS1mb3JjZSIgaWYgJGZvcmNlOworJGF1dG9jb25mIC49ICIgLS12ZXJib3NlIiBpZiAkdmVyYm9zZTsKKyRhdXRvY29uZiAuPSBqb2luICgnIC0taW5jbHVkZT0nLCAnJywgbWFwIHsgc2hlbGxfcXVvdGUgKCRfKSB9IEBpbmNsdWRlKTsKKyRhdXRvY29uZiAuPSBqb2luICgnIC0tcHJlcGVuZC1pbmNsdWRlPScsICcnLCBtYXAgeyBzaGVsbF9xdW90ZSAoJF8pIH0gQHByZXBlbmRfaW5jbHVkZSk7CisKK21rdG1wZGlyICgnYXUnKTsKK2hhbmRsZV9hdXRvY29uZl9tYWNyb3M7CisKKyMgJGF1X2NoYW5nZXF1b3RlIC0tIGVuYWJsZSB0aGUgcXVvdGUgYFsnLCBgXScgcmlnaHQgYmVmb3JlIGFueSBBVSBtYWNyby4KK215ICRhdV9jaGFuZ2VxdW90ZSA9CisgICdzL1xiKCcgLiBqb2luICgnfCcsIGtleXMgJWF1X21hY3JvcykgLiAnKVxiL19hdV9tNF9jaGFuZ2VxdW90ZShbLF0pJDEvZyc7CisKKyMgYXUubTQgLS0gZGVmaW5pdGlvbnMgdGhlIEFVIG1hY3Jvcy4KK3hzeXN0ZW0gKCIkYXV0b2NvbmYgLS10cmFjZSBBVV9ERUZJTkU6J19hdV9kZWZ1bihcQDw6XEBcJDFcQDo+XEAsCitcQDw6XEBcJDJcQDo+XEApJyAtLW1lbHQgL2Rldi9udWxsICIKKwkuICI+IiAuIHNoZWxsX3F1b3RlICgiJHRtcC9hdS5tNCIpKTsKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFByb2Nlc3MgdGhlIGZpbGVzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworZm9yZWFjaCBteSAkZmlsZSAoQEFSR1YpCisgIHsKKyAgICAjIFdlIG5lZWQgYW4gYWN0dWFsIGZpbGUuCisgICAgaWYgKCRmaWxlIGVxICctJykKKyAgICAgIHsKKwkkZmlsZSA9ICIkdG1wL3N0ZGluIjsKKwlzeXN0ZW0gImNhdCA+IiAuIHNoZWxsX3F1b3RlICgkZmlsZSk7CisgICAgICB9CisgICAgZWxzaWYgKCEgLXIgIiRmaWxlIikKKyAgICAgIHsKKwlkaWUgIiRtZTogJGZpbGU6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiOworICAgICAgfQorCisgICAgIyBpbnB1dC5tNCAtLSBtNCBwcm9ncmFtIHRvIHByb2R1Y2UgdGhlIHVwZGF0ZWQgZmlsZS4KKyAgICAjIExvYWQgdGhlIHZhbHVlcywgdGhlIGRpc3BhdGNoZXIsIG5ldXRyYWxpemUgbTQsIGFuZCB0aGUgcHJlcGFyZWQKKyAgICAjIGlucHV0IGZpbGUuCisgICAgbXkgJGlucHV0X200ID0gPDxcRU9GOworICAgICAgZGl2ZXJ0KC0xKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorICAgICAgY2hhbmdlcXVvdGUoWyxdKQorCisgICAgICAjIERlZmluZSBvdXIgc3BlY2lhbCBtYWNyb3M6CisgICAgICBkZWZpbmUoW19hdV9fZGVmbl0sIGRlZm4oW2RlZm5dKSkKKyAgICAgIGRlZmluZShbX2F1X19kaXZlcnRdLCBkZWZuKFtkaXZlcnRdKSkKKyAgICAgIGRlZmluZShbX2F1X19pZmRlZl0sIGRlZm4oW2lmZGVmXSkpCisgICAgICBkZWZpbmUoW19hdV9faW5jbHVkZV0sIGRlZm4oW2luY2x1ZGVdKSkKKyAgICAgIGRlZmluZShbX2F1X19fdW5kZWZpbmVdLCBkZWZuKFt1bmRlZmluZV0pKQorICAgICAgZGVmaW5lKFtfYXVfX3VuZGVmaW5lXSwgW19hdV9faWZkZWYoWyQxXSwgW19hdV9fX3VuZGVmaW5lKFskMV0pXSldKQorICAgICAgZGVmaW5lKFtfYXVfX3NhdmVdLCBbbTRfaWZkZWYoWyQxXSwKKwlbbTRfZGVmaW5lKFtfYXVfJDFdLCBfbTRfZGVmbihbJDFdKSldKV0pCisgICAgICBkZWZpbmUoW19hdV9fcmVzdG9yZV0sCisJW19hdV9tNF9pZmRlZihbX2F1XyQxXSwKKwkgIFtfYXVfbTRfZGVmaW5lKFskMV0sIF9hdV9fZGVmbihbX2F1XyQxXSkpXSldKQorCisgICAgICAjIFNldCB1cCBtNHN1Z2FyLgorICAgICAgaW5jbHVkZShtNHN1Z2FyL200c3VnYXIubTQpCisKKyAgICAgICMgUmVkZWZpbmUgX19maWxlX18gdG8gbWFrZSB3YXJuaW5ncyBuaWNlcjsgJGZpbGUgaXMgcmVwbGFjZWQgYmVsb3cuCisgICAgICBtNF9kZWZpbmUoW19fZmlsZV9fXSwgWyRmaWxlXSkKKworICAgICAgIyBSZWRlZmluZSBtNF9sb2NhdGlvbiB0byBmaXggdGhlIGxpbmUgbnVtYmVyLgorICAgICAgbTRfZGVmaW5lKFttNF9sb2NhdGlvbl0sIFtfX2ZpbGVfXzptNF9ldmFsKF9fbGluZV9fIC0gX2F1X19maXJzdF9saW5lKV0pCisKKyAgICAgICMgTW92ZSBhbGwgdGhlIGJ1aWx0aW5zIGludG8gdGhlIGBfYXVfJyBwc2V1ZG8gbmFtZXNwYWNlCisgICAgICBtNF9pbmNsdWRlKFttNHNhdmUubTRdKQorCisgICAgICAjIF9hdV9kZWZ1bihOQU1FLCBCT0RZKQorICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICMgRGVmaW5lIE5BTUUgdG8gQk9EWSwgcGx1cyBBVSBhY3RpdmF0aW9uL2RlYWN0aXZhdGlvbi4KKyAgICAgIF9hdV9tNF9kZWZpbmUoW19hdV9kZWZ1bl0sCisgICAgICBbX2F1X200X2RlZmluZShbJDFdLAorICAgICAgW19hdV9lbmFibGUoKWRubAorICAgICAgJDJbXWRubAorICAgICAgX2F1X2Rpc2FibGUoKV0pXSkKKworICAgICAgIyBJbXBvcnQgdGhlIGRlZmluaXRpb24gb2YgdGhlIG9ic29sZXRlIG1hY3Jvcy4KKyAgICAgIF9hdV9faW5jbHVkZShbYXUubTRdKQorCisKKyAgICAgICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworICAgICAgIyMgX2F1X2VuYWJsZS9fYXVfZGlzYWJsZS4gICMjCisgICAgICAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworICAgICAgIyBUaGV5IHdvcmsgYnkgcGFpcjogZWFjaCB0aW1lIGFuIEFVIG1hY3JvIGlzIGFjdGl2YXRlZCwgaXQgcnVucworICAgICAgIyBfYXVfZW5hYmxlLCBhbmQgYXQgaXRzIGVuZCBpdHMgcnVucyBfYXVfZGlzYWJsZSAoc2VlIF9hdV9kZWZ1bgorICAgICAgIyBhYm92ZSkuICBBVSBtYWNyb3MgbWlnaHQgdXNlIEFVIG1hY3Jvcywgd2hpY2ggc2hvdWxkCisgICAgICAjIGVuYWJsZS9kaXNhYmxlIG9ubHkgZm9yIHRoZSBvdXRlciBBVSBtYWNyb3MuCisgICAgICAjCisgICAgICAjIGBfYXVfZW5hYmxlZCcgaXMgdXNlZCB0byB0aGlzIGVuZCwgZGV0ZXJtaW5pbmcgd2hldGhlciB3ZSByZWFsbHkKKyAgICAgICMgZW5hYmxlL2Rpc2FibGUuCisKKworICAgICAgIyBfX2F1X2VuYWJsZQorICAgICAgIyAtLS0tLS0tLS0tLQorICAgICAgIyBSZWVuYWJsZSB0aGUgYnVpbHRpbnMsIG00c3VnYXIsIGFuZCB0aGUgYXV0b3F1b3RpbmcgQUMgbWFjcm9zLgorICAgICAgX2F1X200X2RlZmluZShbX19hdV9lbmFibGVdLAorICAgICAgW19hdV9fZGl2ZXJ0KC0xKQorICAgICAgIyBFbmFibGUgc3BlY2lhbCBjaGFyYWN0ZXJzLgorICAgICAgX2F1X200X2NoYW5nZWNvbShbI10pCisKKyAgICAgIF9hdV9faW5jbHVkZShbbTQubTRdKQorICAgICAgX2F1X19pbmNsdWRlKFthYy5tNF0pCisKKyAgICAgIF9hdV9fZGl2ZXJ0KDApXSkKKworICAgICAgIyBfYXVfZW5hYmxlCisgICAgICAjIC0tLS0tLS0tLS0KKyAgICAgICMgQ2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYWxsIHRoZSBvYnNvbGV0ZSBtYWNyb3MuICBJZiB0aGlzIGlzIHRoZQorICAgICAgIyBvdXRlcm1vc3QgbGV2ZWwsIGNhbGwgX19hdV9lbmFibGUuCisgICAgICBfYXVfbTRfZGVmaW5lKFtfYXVfZW5hYmxlXSwKKyAgICAgIFtfYXVfbTRfaWZkZWYoW19hdV9lbmFibGVkXSwKKwkJIFtdLAorCQkgW19fYXVfZW5hYmxlKCldKV9hdV9kbmwKKyAgICAgIF9hdV9tNF9wdXNoZGVmKFtfYXVfZW5hYmxlZF0pXSkKKworCisgICAgICAjIF9fYXVfZGlzYWJsZQorICAgICAgIyAtLS0tLS0tLS0tLS0KKyAgICAgICMgRGlzYWJsZSB0aGUgQUMgYXV0b3F1b3RpbmcgbWFjcm9zLCBtNHN1Z2FyLCBhbmQgbTQuCisgICAgICBfYXVfbTRfZGVmaW5lKFtfX2F1X2Rpc2FibGVdLAorICAgICAgW19hdV9fZGl2ZXJ0KC0xKQorICAgICAgX2F1X19pbmNsdWRlKFt1bmFjLm00XSkKKyAgICAgIF9hdV9faW5jbHVkZShbdW5tNC5tNF0pCisKKyAgICAgICMgRGlzYWJsZSBzcGVjaWFsIGNoYXJhY3RlcnMuCisgICAgICBfYXVfbTRfY2hhbmdlcXVvdGUoKQorICAgICAgX2F1X200X2NoYW5nZWNvbSgpCisKKyAgICAgIF9hdV9fZGl2ZXJ0KDApXSkKKworICAgICAgIyBfYXVfZGlzYWJsZQorICAgICAgIyAtLS0tLS0tLS0tLQorICAgICAgIyBDYWxsZWQgYXQgdGhlIGVuZCBvZiBhbGwgdGhlIG9ic29sZXRlIG1hY3Jvcy4gIElmIHdlIGFyZSBhdCB0aGUKKyAgICAgICMgb3V0ZXJtb3N0IGxldmVsLCBjYWxsIF9fYXVfZGlzYWJsZS4KKyAgICAgIF9hdV9tNF9kZWZpbmUoW19hdV9kaXNhYmxlXSwKKyAgICAgIFtfYXVfbTRfcG9wZGVmKFtfYXVfZW5hYmxlZF0pX2F1X2RubAorICAgICAgX2F1X200X2lmZGVmKFtfYXVfZW5hYmxlZF0sCisJCVtdLAorCQlbX19hdV9kaXNhYmxlKCldKV0pCisKKworICAgICAgIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworICAgICAgIyMgRGlzYWJsZSwgYW5kIHByb2Nlc3MgdGhlIGZpbGUuICAjIworICAgICAgIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworICAgICAgIyBUaGUgQUMgYXV0b3F1b3RpbmcgbWFjcm9zIGFyZSBub3QgbG9hZGVkIHlldCwgaGVuY2UgaW52b2tpbmcKKyAgICAgICMgYF9hdV9kaXNhYmxlJyB3b3VsZCBiZSB3cm9uZy4KKyAgICAgIF9hdV9faW5jbHVkZShbdW5tNC5tNF0pCisKKyAgICAgICMgRGlzYWJsZSBzcGVjaWFsIGNoYXJhY3RlcnMsIGFuZCBzZXQgdGhlIGZpcnN0IGxpbmUgbnVtYmVyLgorICAgICAgX2F1X200X2NoYW5nZXF1b3RlKCkKKyAgICAgIF9hdV9tNF9jaGFuZ2Vjb20oKQorCisgICAgICBfYXVfbTRfZGVmaW5lKF9hdV9fZmlyc3RfbGluZSwgX2F1X19fbGluZV9fKV9hdV9fZGl2ZXJ0KDApX2F1X2RubAorRU9GCisKKyAgICAkaW5wdXRfbTQgPX4gcy9eICAgICAgLy9tZzsKKyAgICAkaW5wdXRfbTQgPX4gcy9cJGZpbGUvJGZpbGUvZzsKKworICAgICMgcHJlcGFyZWQgaW5wdXQgLS0gaW5wdXQsIGJ1dCByZWVuYWJsZXMgdGhlIHF1b3RlIGJlZm9yZSBlYWNoIEFVIG1hY3JvLgorICAgIG9wZW4gSU5QVVRfTTQsICI+ICIgLiBvcGVuX3F1b3RlICgiJHRtcC9pbnB1dC5tNCIpCisgICAgICAgb3IgZXJyb3IgImNhbm5vdCBvcGVuOiAkISI7CisgICAgb3BlbiBGSUxFLCAiPCAiIC4gb3Blbl9xdW90ZSAoJGZpbGUpCisgICAgICAgb3IgZXJyb3IgImNhbm5vdCBvcGVuOiAkISI7CisgICAgcHJpbnQgSU5QVVRfTTQgIiRpbnB1dF9tNCI7CisgICAgd2hpbGUgKDxGSUxFPikKKyAgICAgICB7CisJIGV2YWwgJGF1X2NoYW5nZXF1b3RlOworCSBwcmludCBJTlBVVF9NNDsKKyAgICAgICB9CisgICAgY2xvc2UgRklMRQorICAgICAgIG9yIGVycm9yICJjYW5ub3QgY2xvc2UgJGZpbGU6ICQhIjsKKyAgICBjbG9zZSBJTlBVVF9NNAorICAgICAgIG9yIGVycm9yICJjYW5ub3QgY2xvc2UgJHRtcC9pbnB1dC5tNDogJCEiOworCisgICAgIyBOb3cgYXNrIG00IHRvIHBlcmZvcm0gdGhlIHVwZGF0ZS4KKyAgICB4c3lzdGVtICgiJG00IC0taW5jbHVkZT0iIC4gc2hlbGxfcXVvdGUgKCR0bXApCisJICAgICAuIGpvaW4gKCcgLS1pbmNsdWRlPScsICcnLCBtYXAgeyBzaGVsbF9xdW90ZSAoJF8pIH0gcmV2ZXJzZSAoQHByZXBlbmRfaW5jbHVkZSkpCisJICAgICAuIGpvaW4gKCcgLS1pbmNsdWRlPScsICcnLCBtYXAgeyBzaGVsbF9xdW90ZSAoJF8pIH0gQGluY2x1ZGUpCisJICAgICAuICIgIiAuIHNoZWxsX3F1b3RlICgiJHRtcC9pbnB1dC5tNCIpIC4gIiA+ICIgLiBzaGVsbF9xdW90ZSAoIiR0bXAvdXBkYXRlZCIpKTsKKyAgICB1cGRhdGVfZmlsZSAoIiR0bXAvdXBkYXRlZCIsCisJCSAiJGZpbGUiIGVxICIkdG1wL3N0ZGluIiA/ICctJyA6ICIkZmlsZSIpOworICB9CitleGl0IDA7CisKKworIwkJICAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjCQkgICMjIEhvdyBgYXV0b3VwZGF0ZScgZnVuY3Rpb25zLiAgIyMKKyMJCSAgIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIworIyBUaGUgdGFzayBvZiBgYXV0b3VwZGF0ZScgaXMgbm90IHRyaXZpYWw6IHRoZSBiaWdnZXN0IGRpZmZpY3VsdHkgYmVpbmcKKyMgdGhhdCB5b3UgbXVzdCBsaW1pdCB0aGUgY2hhbmdlcyB0byB0aGUgcGFydHMgdGhhdCByZWFsbHkgbmVlZCB0byBiZQorIyB1cGRhdGVkLiAgRmluZGluZyBhIHNhdGlzZnlpbmcgaW1wbGVtZW50YXRpb24gcHJvdmVkIHRvIGJlIHF1aXRlIGhhcmQsCisjIGFzIHRoaXMgaXMgdGhlIGZpZnRoIGltcGxlbWVudGF0aW9uIG9mIGBhdXRvdXBkYXRlJy4KKyMKKyMgQmVsb3csIHdlIHdpbGwgdXNlIGEgc2ltcGxlIGV4YW1wbGUgb2YgYW4gb2Jzb2xldGUgbWFjcm86CisjCisjICAgICBBVV9ERUZVTihbT0xEXSwgW05FVyhbJDEsICQyXSwgbTRfZXZhbChbJDEgKyAkMl0pKV0pCisjICAgICBBQ19ERUZVTihbTkVXXSwgW2VjaG8gInN1bSgkMSkgPSAkMiJdKQorIworIyB0aGUgaW5wdXQgZmlsZSBjb250YWlucworIworIyAgICAgZG5sIFRoZSBVbmJlbGlldmFibGUgVHJ1dGgKKyMgICAgIE9MRCgxLCAyKQorIyAgICAgTkVXKFswLCAwXSwgWzBdKQorIworIyBPZiBjb3Vyc2UgdGhlIGV4cGVjdGVkIG91dHB1dCBpcworIworIyAgICAgZG5sIFRoZSBVbmJlbGlldmFibGUgVHJ1dGgKKyMgICAgIE5FVyhbMSwgMl0sIFszXSkKKyMgICAgIE5FVyhbMCwgMF0sIFswXSkKKyMKKyMKKyMgIyBGaXJzdCBpbXBsZW1lbnRhdGlvbjogc2VkCisjICMgPT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBUaGUgZmlyc3QgaW1wbGVtZW50YXRpb24gd2FzIG9ubHkgYWJsZSB0byBjaGFuZ2UgdGhlIG5hbWUgb2Ygb2Jzb2xldGUKKyMgbWFjcm9zLgorIworIyBUaGUgZmlsZSBgYWNvbGRuYW1lcy5tNCcgZGVmaW5lZCB0aGUgb2xkIG5hbWVzIGJhc2VkIG9uIHRoZSBuZXcgbmFtZXMuCisjIEl0IHdhcyBzaW1wbGUgdGhlbiB0byBwcm9kdWNlIGEgc2VkIHNjcmlwdCBzdWNoIGFzOgorIworIyAgICAgcy9PTEQvTkVXL2cKKyMKKyMgVXBkYXRpbmcgbWVyZWx5IGNvbnNpc3RlZCBpbiBydW5uaW5nIHRoaXMgc2NyaXB0IG9uIHRoZSBmaWxlIHRvCisjIHVwZGF0ZS4KKyMKKyMgVGhpcyBzY2hlbWUgc3VmZmVycyBmcm9tIGFuIG9idmlvdXMgbGltaXRhdGlvbjogdGhhdCBgYXV0b3VwZGF0ZScgd2FzCisjIHVuYWJsZSB0byBjb3BlIHdpdGggbmV3IG1hY3JvcyB0aGF0IGp1c3Qgc3dhcCBzb21lIG9mIGl0cyBhcmd1bWVudHMKKyMgY29tcGFyZWQgdG8gdGhlIG9sZCBtYWNyby4gIEZvcnR1bmF0ZWx5LCB0aGF0IHdhcyBlbm91Z2ggdG8gdXBncmFkZQorIyBmcm9tIEF1dG9jb25mIDEgdG8gQXV0b2NvbmYgMi4gIChCdXQgSSBoYXZlIG5vIGlkZWEgd2hldGhlciB0aGUKKyMgY2hhbmdlcyBpbiBBdXRvY29uZiAyIHdlcmUgcHJlY2lzZWx5IGxpbWl0ZWQgYnkgdGhpcyBjb25zdHJhaW50LikKKyMKKyMKKyMgIyBTZWNvbmQgaW1wbGVtZW50YXRpb246IGhvb2tzCisjICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBUaGUgdmVyc2lvbiAyLjE1IG9mIEF1dG9jb25mIGJyb3VnaHQgYSB2YXN0IG51bWJlciBvZiBjaGFuZ2VzIGNvbXBhcmVkCisjIHRvIDIuMTMsIHNvIGEgc29sdXRpb24gd2FzIG5lZWRlZC4gIE9uZSBjb3VsZCB0aGluayBvZiBleHRlbmRpbmcgdGhlCisjIGBzZWQnIHNjcmlwdHMgd2l0aCBzcGVjaWFsaXplZCBjb2RlIGZvciBjb21wbGV4IG1hY3Jvcy4gIEhvd2V2ZXIsIHRoaXMKKyMgYXBwcm9hY2ggaXMgb2YgY291cnNlIGZ1bGwgb2YgZmxhd3M6CisjCisjIGEuIHRoZSBBdXRvY29uZiBtYWludGFpbmVycyBoYXZlIHRvIHdyaXRlIHRoZXNlIHNuaXBwZXRzLCB3aGljaCB3ZQorIyAgICBqdXN0IGRvbid0IHdhbnQgdG8sCisjCisjIGIuIEkgcmVhbGx5IGRvbid0IHRoaW5rIHlvdSdsbCBldmVyIG1hbmFnZSB0byBoYW5kbGUgdGhlIHF1b3Rpbmcgb2YKKyMgICAgbTQgd2l0aCBhIHNlZCBzY3JpcHQuCisjCisjIFRvIHNhdGlzZnkgYS4sIGxldCdzIHJlbWFyayB0aGF0IHRoZSBjb2RlIHdoaWNoIGltcGxlbWVudHMgdGhlIG9sZAorIyBmZWF0dXJlcyBpbiB0ZXJtIG9mIHRoZSBuZXcgZmVhdHVyZSBpcyBleGFjdGx5IHRoZSBjb2RlIHdoaWNoIHNob3VsZAorIyByZXBsYWNlIHRoZSBvbGQgY29kZS4KKyMKKyMgVG8gYW5zd2VyIHBvaW50IGIsIGFzIHVzdWFsIGluIHRoZSBoaXN0b3J5IG9mIEF1dG9jb25mLCB0aGUgYW5zd2VyLCBhdAorIyBsZWFzdCBvbiB0aGUgcGFwZXIsIGlzIHNpbXBsZTogbTQgaXMgdGhlIGJlc3QgdG9vbCB0byBwYXJzZSBtNCwgc28KKyMgbGV0J3MgdXNlIG00LgorIworIyBUaGVyZWZvcmUgdGhlIHNwZWNpZmljYXRpb24gaXM6CisjCisjICAgICBJIHdhbnQgdG8gYmUgYWJsZSB0byB0ZWxsIEF1dG9jb25mLCB3ZWxsLCBtNCwgdGhhdCB0aGUgbWFjcm8gSQorIyAgICAgYW0gY3VycmVudGx5IGRlZmluaW5nIGlzIGFuIG9ic29sZXRlIG1hY3JvIChzbyB0aGF0IHRoZSB1c2VyIGlzCisjICAgICB3YXJuZWQpLCBhbmQgaXRzIGNvZGUgaXMgdGhlIGNvZGUgdG8gdXNlIHdoZW4gcnVubmluZyBhdXRvY29uZiwKKyMgICAgIGJ1dCB0aGF0IHRoZSB2ZXJ5IHNhbWUgY29kZSBoYXMgdG8gYmUgdXNlZCB3aGVuIHJ1bm5pbmcKKyMgICAgIGF1dG91cGRhdGUuICBUbyBzdW1tYXJpemUsIHRoZSBpbnRlcmZhY2UgSSB3YW50IGlzCisjICAgICBgQVVfREVGVU4oT0xELU5BTUUsIE5FVy1DT0RFKScuCisjCisjCisjIE5vdyBmb3IgdGhlIHRlY2huaWNhbCBkZXRhaWxzLgorIworIyBXaGVuIHJ1bm5pbmcgYXV0b2NvbmYsIGV4Y2VwdCBmb3IgdGhlIHdhcm5pbmcsIEFVX0RFRlVOIGlzIGJhc2ljYWxseQorIyBBQ19ERUZVTi4KKyMKKyMgV2hlbiBydW5uaW5nIGF1dG91cGRhdGUsIHdlIHdhbnQgKm9ubHkqIE9MRC1OQU1FcyB0byBiZSBleHBhbmRlZC4KKyMgVGhpcyBvYnZpb3VzbHkgbWVhbnMgdGhhdCBhY2dlbmVyYWwubTQgYW5kIGFjc3BlY2lmaWMubTQgbXVzdCBub3QgYmUKKyMgbG9hZGVkLiAgTm9uZXRoZWxlc3MsIGJlY2F1c2Ugd2Ugd2FudCB0byB1c2UgYSByaWNoIHNldCBvZiBtNAorIyBmZWF0dXJlcywgbTRzdWdhci5tNCBpcyBuZWVkZWQuICBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBmYWN0IHRoYXQKKyMgQXV0b2NvbmYncyBtYWNyb3MgYXJlIG5vdCBsb2FkZWQgaXMgcG9zaXRpdmUgb24gdHdvIHBvaW50czoKKyMKKyMgLSB3ZSBkbyBnZXQgYW4gdXBkYXRlZCBgY29uZmlndXJlLmFjJywgbm90IGEgYGNvbmZpZ3VyZSchCisjCisjIC0gdGhlIG9sZCBtYWNyb3MgYXJlIHJlcGxhY2VkIGJ5ICpjYWxscyogdG8gdGhlIG5ldy1tYWNyb3MsIG5vdCB0aGUKKyMgICBib2R5IG9mIHRoZSBuZXcgbWFjcm9zLCBzaW5jZSB0aGVpciBib2R5IGlzIG5vdCBkZWZpbmVkISEhCisjICAgKFdob2EsIHRoYXQncyByZWFsbHkgYmVhdXRpZnVsISkuCisjCisjIEFkZGl0aW9uYWxseSB3ZSBuZWVkIHRvIGRpc2FibGUgdGhlIHF1b3RlcyB3aGVuIHJlYWRpbmcgdGhlIGlucHV0IGZvcgorIyB0d28gcmVhc29uczogZmlyc3QgYmVjYXVzZSBvdGhlcndpc2UgYG00JyB3aWxsIHN3YWxsb3cgdGhlIHF1b3RlcyBvZgorIyBvdGhlciBtYWNyb3M6CisjCisjICAgICBORVcoWzEsIDJdLCAzKQorIyAgICAgPT4gTkVXKDEsIDIsIDMpCisjCisjIGFuZCBzZWNvbmQsIGJlY2F1c2Ugd2Ugd2FudCB0byB1cGRhdGUgdGhlIG1hY3JvIGNhbGxzIHdoaWNoIGFyZQorIyBxdW90ZWQsIGkuZS4sIHdlIHdhbnQKKyMKKyMgICAgIEZPTyhbT0xEKDEsIDIpXSkKKyMgICAgID0+IEZPTyhbTkVXKFsxLCAyXSwgWzNdKV0pCisjCisjIElmIHdlIGRvbid0IGRpc2FibGUgdGhlIHF1b3Rlcywgb25seSB0aGUgbWFjcm9zIGNhbGxlZCBhdCB0aGUgdG9wCisjIGxldmVsIHdvdWxkIGJlIHVwZGF0ZWQuCisjCisjIFNvLCBsZXQncyBkaXNhYmxlIHRoZSBxdW90ZXMuCisjCisjIFdlbGwsIG5vdCBxdWl0ZTogbTRzdWdhci5tNCBzdGlsbCBuZWVkcyB0byB1c2UgcXVvdGVzIGZvciBzb21lIG1hY3Jvcy4KKyMgV2VsbCwgaW4gdGhpcyBjYXNlLCB3aGVuIHJ1bm5pbmcgaW4gYXV0b3VwZGF0ZSBjb2RlLCBlYWNoIG1hY3JvIGZpcnN0CisjIHJlZXN0YWJsaXNoZXMgdGhlIHF1b3RlcywgZXhwYW5kcyBpdHNlbGYsIGFuZCBkaXNhYmxlcyB0aGUgcXVvdGVzLgorIworIyBUaGlua2luZyBhIGJpdCBtb3JlLCB5b3UgcmVhbGl6ZSB0aGF0IGluIGZhY3QsIHBlb3BsZSBtYXkgdXNlIGBkZWZpbmUnLAorIyBgaWZlbHNlJyBldGMuIGluIHRoZWlyIGZpbGVzLCBhbmQgeW91IGNlcnRhaW5seSBkb24ndCB3YW50IHRvIHByb2Nlc3MKKyMgdGhlbS4gIEFub3RoZXIgZXhhbXBsZSBpcyBgZG5sJzogeW91IGRvbid0IHdhbnQgdG8gcmVtb3ZlIHRoZQorIyBjb21tZW50cy4gIFlvdSB0aGVuIHJlYWxpemUgeW91IGRvbid0IHdhbnQgZXhhY3RseSB0byBpbXBvcnQgbTRzdWdhcjoKKyMgeW91IHdhbnQgdG8gc3BlY2lmeSB3aGVuIGl0IGlzIGVuYWJsZWQgKG1hY3JvcyBhY3RpdmUpLCBhbmQgZGlzYWJsZWQuCisjIG00c3VnYXIgcHJvdmlkZXMgbTRfZGlzYWJsZS9tNF9lbmFibGUgdG8gdGhpcyBlbmQuCisjCisjIFlvdSdyZSBnZXR0aW5nIGNsb3NlIHRvIGl0LiAgTm93IHJlbWFpbnMgb25lIHRhc2s6IGhvdyB0byBoYW5kbGUKKyMgdHdvZm9sZCBkZWZpbml0aW9ucz8KKyMKKyMgUmVtZW1iZXIgdGhhdCB0aGUgc2FtZSBBVV9ERUZVTiBtdXN0IGJlIHVuZGVyc3Rvb2QgaW4gdHdvIGRpZmZlcmVudAorIyB3YXlzLCB0aGUgQUMgd2F5LCBhbmQgdGhlIEFVIHdheS4KKyMKKyMgT25lIGZpcnN0IHNvbHV0aW9uIGlzIHRvIGNoZWNrIHdoZXRoZXIgYWNnZW5lcmFsLm00IHdhcyBsb2FkZWQuICBCdXQKKyMgdGhhdCdzIGRlZmluaXRlbHkgbm90IGN1dGUuICBBbm90aGVyIGlzIHNpbXBseSB0byBpbnN0YWxsIGBob29rcycsCisjIHRoYXQgaXMgdG8gc2F5LCB0byBrZWVwIGluIHNvbWUgcGxhY2UgbTQga25vd3MsIGxhdGUgYGRlZmluZScgdG8gYmUKKyMgdHJpZ2dlcmVkICpvbmx5KiBpbiBBVSBtb2RlLgorIworIyBZb3UgZmlyc3QgdGhpbmsgb2YgZGVzaWduaW5nIEFVX0RFRlVOIGxpa2UgdGhpczoKKyMKKyMgMS4gQUNfREVGVU4oT0xELU5BTUUsCisjCSAgICAgIFtXYXJuIHRoZSB1c2VyIE9MRC1OQU1FIGlzIG9ic29sZXRlLgorIwkgICAgICAgTkVXLUNPREVdKQorIworIyAyLiBTdG9yZSBmb3IgbGF0ZSBBVSBiaW5kaW5nKFtkZWZpbmUoT0xEX05BTUUsCisjCQkJCVtSZWVzdGFibGlzaCB0aGUgcXVvdGVzLgorIwkJCQkgTkVXLUNPREUKKyMJCQkJIERpc2FibGUgdGhlIHF1b3Rlcy5dKV0pCisjCisjIGJ1dCB0aGlzIHdpbGwgbm90IHdvcms6IE5FVy1DT0RFIHByb2JhYmx5IHVzZXMgJDEsICQyIGV0Yy4gYW5kIHRoZXNlCisjIGd1eXMgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBhcmd1bWVudCBvZiBgU3RvcmUgZm9yIGxhdGUgQVUgYmluZGluZycKKyMgd2hlbiB5b3UgY2FsbCBpdC4KKyMKKyMgSSBkb24ndCB0aGluayB0aGVyZSBpcyBhIG1lYW5zIHRvIGF2b2lkIHRoaXMgdXNpbmcgdGhpcyB0ZWNobm9sb2d5CisjIChyZW1lbWJlciB0aGF0ICQxIGV0Yy4gYXJlICphbHdheXMqIGV4cGFuZGVkIGluIG00KS4gIFlvdSBtYXkgYWxzbyB0cnkKKyMgdG8gcmVwbGFjZSB0aGVtIHdpdGggJFsxXSB0byBwcmVzZXJ2ZSB0aGVtIGZvciBhIGxhdGVyIGV2YWx1YXRpb24sIGJ1dAorIyBpZiBgU3RvcmUgZm9yIGxhdGUgQVUgYmluZGluZycgaXMgcHJvcGVybHkgd3JpdHRlbiwgaXQgd2lsbCByZW1haW4KKyMgcXVvdGVkIHRpbGwgdGhlIGVuZC4uLgorIworIyBZb3UgaGF2ZSB0byBjaGFuZ2UgdGVjaG5vbG9neS4gIFNpbmNlIHRoZSBwcm9ibGVtIGlzIHRoYXQgYCQxJworIyBldGMuIHNob3VsZCBiZSBgY29uc3VtZWQnIHJpZ2h0IGF3YXksIG9uZSBzb2x1dGlvbiBpcyB0byBkZWZpbmUgbm93IGEKKyMgc2Vjb25kIG1hY3JvLCBgQVVfT0xELU5BTUUnLCBhbmQgdG8gaW5zdGFsbCBhIGhvb2sgdGhhbiBiaW5kcyBPTEQtTkFNRQorIyB0byBBVV9PTEQtTkFNRS4gIFRoZW4sIGF1dG91cGRhdGUubTQganVzdCBuZWVkIHRvIHJ1biB0aGUgaG9va3MuICBCeQorIyB0aGUgd2F5LCB0aGUgc2FtZSBtZXRob2Qgd2FzIHVzZWQgaW4gYXV0b2hlYWRlci4KKyMKKyMKKyMgIyBUaGlyZCBpbXBsZW1lbnRhdGlvbjogbTQgbmFtZXNwYWNlcyBieSBtNHN1Z2FyCisjICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBBY3R1YWxseSwgdGhpcyBpbXBsZW1lbnRhdGlvbiB3YXMganVzdCBhIGNsZWFuIHVwIG9mIHRoZSBwcmV2aW91cworIyBpbXBsZW1lbnRhdGlvbjogaW5zdGVhZCBvZiBkZWZpbmluZyBob29rcyBieSBoYW5kLCBtNHN1Z2FyIHdhcyBlcXVpcHBlZAorIyB3aXRoIGBuYW1lc3BhY2VzJy4gIFdoYXQgYXJlIHRoZXk/CisjCisjIFNvbWV0aW1lcyB3ZSB3YW50IHRvIGRpc2FibGUgc29tZSAqc2V0KiBvZiBtYWNyb3MsIGFuZCByZXN0b3JlIHRoZW0KKyMgbGF0ZXIuICBXZSBwcm92aWRlIHN1cHBvcnQgZm9yIHRoaXMgdmlhIG5hbWVzcGFjZXMuCisjCisjIFRoZXJlIGFyZSBiYXNpY2FsbHkgdGhyZWUgY2hhcmFjdGVycyBwbGF5aW5nIHRoaXMgc2NlbmU6IGRlZmluaW5nIGEKKyMgbWFjcm8gaW4gYSBuYW1lc3BhY2UsIGRpc2FibGluZyBhIG5hbWVzcGFjZSwgYW5kIHJlc3RvcmluZyBhIG5hbWVzcGFjZQorIyAoaS5lLiwgYWxsIHRoZSBkZWZpbml0aW9ucyBpdCBob2xkcykuCisjCisjIFRlY2huaWNhbGx5LCB0byBkZWZpbmUgYSBNQUNSTyBpbiBOQU1FU1BBQ0UgbWVhbnMgdG8gZGVmaW5lIHRoZSBtYWNybworIyBuYW1lZCBgTkFNRVNQQUNFOjpNQUNSTycgdG8gdGhlIFZBTFVFLiAgQXQgdGhlIHNhbWUgdGltZSwgd2UgYXBwZW5kCisjIGB1bmRlZmluZShOQU1FKScgaW4gdGhlIG1hY3JvIG5hbWVkIGBtNF9kaXNhYmxlKE5BTUVTUEFDRSknLCBhbmQKKyMgc2ltaWxhcmx5IGEgYmluZGluZyBvZiBOQU1FIHRvIHRoZSB2YWx1ZSBvZiBgTkFNRVNQQUNFOjpNQUNSTycgaW4KKyMgYG00X2VuYWJsZShOQU1FU1BBQ0UpJy4gIFRoZXNlIG1lY2hhbmlzbXMgYWxsb3cgdG8gYmluZCB0aGUgbWFjcm8gb2YKKyMgTkFNRVNQQUNFIGFuZCB0byB1bmJpbmQgdGhlbSBhdCB3aWxsLgorIworIyBPZiBjb3Vyc2UgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyByZWFsbHkgaW5lZmZpY2llbnQ6IG00IGhhcyB0byBncm93CisjIHN0cmluZ3Mgd2hpY2ggY2FuIGJlY29tZSBxdWlja2x5IGh1Z2UsIHdoaWNoIHNsb3dzIGl0IHNpZ25pZmljYW50bHkuCisjCisjIEluIHBhcnRpY3VsYXIgb25lIHNob3VsZCBhdm9pZCBhcyBtdWNoIGFzIHBvc3NpYmxlIHRvIHVzZSBgZGVmaW5lJyBmb3IKKyMgdGVtcG9yYXJpZXMuICBOb3cgdGhhdCBgZGVmaW5lJyBoYXMgcXVpdGUgYSBjb21wbGV4IG1lYW5pbmcsIGl0IGlzIGFuCisjIGV4cGVuc2l2ZSBvcGVyYXRpb25zIHRoYXQgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gbWFjcm9zLiAgVXNlCisjIGBtNF9kZWZpbmUnIGZvciB0ZW1wb3Jhcmllcy4KKyMKKyMgUHJpdmF0ZSBjb3BpZXMgb2YgdGhlIG1hY3JvcyB3ZSB1c2VkIGluIGVudGVyaW5nIC8gZXhpdGluZyB0aGUgbTRzdWdhcgorIyBuYW1lc3BhY2UuICBJdCBpcyBtdWNoIG1vcmUgY29udmVuaWVudCB0aGFuIGZpZ2h0aW5nIHdpdGggdGhlIHJlbmFtZWQKKyMgdmVyc2lvbiBvZiBkZWZpbmUgZXRjLgorIworIworIworIyBUaG9zZSB0d28gaW1wbGVtZW50YXRpb25zIHN1ZmZlcmVkIGZyb20gc2VyaW91cyBwcm9ibGVtczoKKyMKKyMgLSBuYW1lc3BhY2VzIHdlcmUgcmVhbGx5IGV4cGVuc2l2ZSwgYW5kIGluY3VycmVkIGEgbWFqb3IgcGVyZm9ybWFuY2UKKyMgICBsb3NzIG9uIGBhdXRvY29uZicgaXRzZWxmLCBub3Qgb25seSBgYXV0b3VwZGF0ZScuICBPbmUgc29sdXRpb24KKyMgICB3b3VsZCBoYXZlIGJlZW4gdGhlIGxpbWl0IHRoZSB1c2Ugb2YgbmFtZXNwYWNlcyB0byBgYXV0b3VwZGF0ZScsIGJ1dAorIyAgIHRoYXQncyBhZ2FpbiBzb21lIGNvbXBsaWNhdGlvbnMgb24gbTRzdWdhciwgd2hpY2ggcmVhbGx5IGRvZXNuJ3QgbmVlZAorIyAgIHRoaXMuICBTbyB3ZSB3YW50ZWQgdG8gZ2V0IHJpZCBvZiB0aGUgbmFtZXNwYWNlcy4KKyMKKyMgLSBzaW5jZSB0aGUgcXVvdGVzIHdlcmUgZGlzYWJsZWQsIGF1dG91cGRhdGUgd2FzIHNvbWV0aW1lcyBtYWtpbmcKKyMgICB3cm9uZyBndWVzc2VzLCBmb3IgaW5zdGFuY2Ugb246CisjCisjICAgICBmb28oWzEsIDJdKQorIworIyAgIG00IHNhdyAyIGFyZ3VtZW50czogYFsxJ2FuZCBgMl0nLiAgQSBzaW1wbGUgc29sdXRpb24sIHNvbWV3aGF0CisjICAgZnJhZ2lsZSwgaXMgdG8gcmVlc3RhYmxpc2ggdGhlIHF1b3RlcyByaWdodCBiZWZvcmUgYWxsIHRoZSBvYnNvbGV0ZQorIyAgIG1hY3JvcywgaS5lLiwgdG8gdXNlIHNlZCBzbyB0aGF0IHRoZSBwcmV2aW91cyB0ZXh0IGJlY29tZXMKKyMKKyMgICAgIGNoYW5nZXF1b3RlKFssIF0pZm9vKFsxLCAyXSkKKyMKKyMgICBUbyB0aGlzIGVuZCwgb25lIHdhbnRzIHRvIHRyYWNlIHRoZSBkZWZpbml0aW9uIG9mIG9ic29sZXRlIG1hY3Jvcy4KKyMKKyMgSXQgd2FzIHRoZXJlIHRoYXQgdGhlIGxpbWl0YXRpb25zIG9mIHRoZSBuYW1lc3BhY2UgYXBwcm9hY2ggYmVjYW1lCisjIHBhaW5mdWw6IGJlY2F1c2UgaXQgd2FzIGEgY29tcGxleCBtYWNoaW5lcnkgcGxheWluZyBhIGxvdCB3aXRoIHRoZQorIyBidWlsdGlucyBvZiBtNCAoaGVuY2UsIHF1aXRlIGZyYWdpbGUpLCB0cmFjaW5nIHdhcyBhbG1vc3QgaW1wb3NzaWJsZS4KKyMKKyMKKyMgU28gdGhpcyBhcHByb2FjaCB3YXMgZHJvcHBlZC4KKyMKKyMKKyMgIyBUaGUgZm91cnRoIGltcGxlbWVudGF0aW9uOiB0d28gc3RlcHMKKyMgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgSWYgeW91IGRyb3AgdGhlIHVzZXMgb2YgbmFtZXNwYWNlcywgeW91IG5vIGxvbmdlciBjYW4gY29tcHV0ZSB0aGUKKyMgdXBkYXRlZCB2YWx1ZSwgYW5kIHJlcGxhY2UgdGhlIG9sZCBjYWxsIHdpdGggaXQgc2ltdWx0YW5lb3VzbHkuCisjCisjIE9idmlvdXNseSB5b3Ugd2lsbCB1c2UgbTQgdG8gY29tcHV0ZSB0aGUgdXBkYXRlZCB2YWx1ZXMsIGJ1dCB5b3UgbWF5CisjIHVzZSBzb21lIG90aGVyIHRvb2wgdG8gYWNoaWV2ZSB0aGUgcmVwbGFjZW1lbnQuICBQZXJzb25hbGx5LCBJIHRydXN0CisjIG5vYm9keSBidXQgbTQgdG8gcGFyc2UgbTQsIHNvIGJlbG93LCBtNCB3aWxsIHBlcmZvcm0gdGhlIHR3byB0YXNrcy4KKyMKKyMgSG93IGNhbiBtNCBiZSB1c2VkIHRvIHJlcGxhY2UgKnNvbWUqIG1hY3JvcyBjYWxscyB3aXRoIG5ld2VyIHZhbHVlcy4KKyMgV2VsbCwgdGhhdCdzIGRlYWQgc2ltcGxlOiBtNCBzaG91bGQgbGVhcm4gdGhlIGRlZmluaXRpb25zIG9mIG9ic29sZXRlCisjIG1hY3JvcywgZm9yZ2V0IGl0cyBidWlsdGlucywgZGlzYWJsZSB0aGUgcXVvdGVzLCBhbmQgdGhlbiBydW4gb24gdGhlCisjIGlucHV0IGZpbGUsIHdoaWNoIGFtb3VudHMgdG8gZG9pbmcgdGhpczoKKyMKKyMgICAgIGRpdmVydCgtMSlkbmwKKyMgICAgIGNoYW5nZXF1b3RlKFssIF0pCisjICAgICBkZWZpbmUoW09MRF0sIFtORVcoWyQxLCAkMl0sIG00X2V2YWwoWyQxICsgJDJdKSljaGFuZ2VxdW90ZSgpXSkKKyMgICAgIHVuZGVmaW5lKFtkbmxdKQorIyAgICAgdW5kZWZpbmUoW200X2V2YWxdKQorIyAgICAgIyBTb21lIG1vcmUgdW5kZWZpbmVzLi4uCisjICAgICBjaGFuZ2VxdW90ZSgpCisjICAgICBkaXZlcnQoMClkbmwKKyMgICAgIGRubCBUaGUgVW5iZWxpZXZhYmxlIFRydXRoCisjICAgICBjaGFuZ2VxdW90ZShbLCBdKU9MRCgxLCAyKQorIyAgICAgTkVXKFswLCAwXSwKKyMJICAwKQorIworIyB3aGljaCB3aWxsIHJlc3VsdCBpbgorIworIyAgICAgZG5sIFRoZSBVbmJlbGlldmFibGUgVHJ1dGgKKyMgICAgIE5FVygxLCAyLCBtNF9ldmFsKDEgKyAyKSkKKyMgICAgIE5FVyhbMCwgMF0sCisjCSAgMCkKKyMKKyMgR3JwbWguICBUd28gcHJvYmxlbXMuICBBIG1pbm9yIHByb2JsZW06IGl0IHdvdWxkIGhhdmUgYmVlbiBtdWNoIGJldHRlcgorIyB0byBoYXZlIHRoZSBgbTRfZXZhbCcgY29tcHV0ZWQsIGFuZCBhIG1ham9yIHByb2JsZW06IHlvdSBsb3N0IHRoZQorIyBxdW90YXRpb24gaW4gdGhlIHJlc3VsdC4KKyMKKyMgTGV0J3MgYWRkcmVzcyB0aGUgYmlnIHByb2JsZW0gZmlyc3QuICBPbmUgc29sdXRpb24gaXMgdG8gZGVmaW5lIGFueQorIyBtb2Rlcm4gbWFjcm8gdG8gcmV3cml0ZSBpdHMgY2FsbHMgd2l0aCB0aGUgcHJvcGVyIHF1b3RhdGlvbiwgdGhhbmtzIHRvCisjIGAkQCcuICBBZ2FpbiwgdHJhY2luZyB0aGUgYGRlZmluZSdzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGtub3cgd2hpY2gKKyMgYXJlIHRoZXNlIG1hY3Jvcywgc28geW91IGlucHV0IGlzOgorIworIyAgICAgZGl2ZXJ0KC0xKWRubAorIyAgICAgY2hhbmdlcXVvdGUoWywgXSkKKyMgICAgIGRlZmluZShbT0xEXSwgW05FVyhbJDEsICQyXSwgbTRfZXZhbChbJDEgKyAkMl0pKWNoYW5nZXF1b3RlKCldKQorIyAgICAgZGVmaW5lKFtORVddLCBbW05FVygkQCldY2hhbmdlcXVvdGUoKV0pCisjICAgICB1bmRlZmluZShbZG5sXSkKKyMgICAgIHVuZGVmaW5lKFttNF9ldmFsXSkKKyMgICAgICMgU29tZSBtb3JlIHVuZGVmaW5lcy4uLgorIyAgICAgY2hhbmdlcXVvdGUoKQorIyAgICAgZGl2ZXJ0KDApZG5sCisjICAgICBkbmwgVGhlIFVuYmVsaWV2YWJsZSBUcnV0aAorIyAgICAgY2hhbmdlcXVvdGUoWywgXSlPTEQoMSwgMikKKyMgICAgIGNoYW5nZXF1b3RlKFssIF0pTkVXKFswLCAwXSwKKyMJICAwKQorIworIyB3aGljaCByZXN1bHRzIGluCisjCisjICAgICBkbmwgVGhlIFVuYmVsaWV2YWJsZSBUcnV0aAorIyAgICAgTkVXKFsxLCAyXSxbbTRfZXZhbCgxICsgMildKQorIyAgICAgTkVXKFswLCAwXSxbMF0pCisjCisjIE91ciBwcm9ibGVtIGlzIHNvbHZlZCwgaS5lLiwgdGhlIGZpcnN0IGNhbGwgdG8gYE5FVycgaXMgcHJvcGVybHkKKyMgcXVvdGVkLCBidXQgaW50cm9kdWNlZCBhbm90aGVyIHByb2JsZW06IHdlIGNoYW5nZWQgdGhlIGxheW91dCBvZiB0aGUKKyMgc2Vjb25kIGNhbGxzLCB3aGljaCBjYW4gYmUgYSBkcmFtYSBpbiB0aGUgY2FzZSBvZiBodWdlIG1hY3JvIGNhbGxzCisjICh0aGluayBvZiBgQUNfVFJZX1JVTicgZm9yIGluc3RhbmNlKS4gIFRoaXMgZXhhbXBsZSBkaWRuJ3Qgc2hvdyBpdCwKKyMgYnV0IHdlIGFsc28gaW50cm9kdWNlZCBwYXJlbnMgdG8gbWFjcm9zIHdoaWNoIGRpZCBub3QgaGF2ZSBzb21lOgorIworIyAgICAgQUNfSU5JVAorIyAgICAgPT4gQUNfSU5JVCgpCisjCisjIE5vIGJpZyBkZWFsIGZvciB0aGUgc2VtYW50aWNzICh1bmxlc3MgdGhlIG1hY3JvIGRlcGVuZHMgdXBvbiAkIywgd2hpY2gKKyMgaXMgYmFkKSwgYnV0IHRoZSB1c2VycyB3b3VsZCBub3QgYmUgaGFwcHkuCisjCisjIEFkZGl0aW9uYWxseSwgd2UgaW50cm9kdWNlZCBxdW90ZXMgdGhhdCB3ZXJlIG5vdCB0aGVyZSBiZWZvcmUsIHdoaWNoIGlzCisjIE9LIGluIG1vc3QgY2FzZXMsIGJ1dCBjb3VsZCBjaGFuZ2UgdGhlIHNlbWFudGljcyBvZiB0aGUgZmlsZS4KKyMKKyMgQ3J1ZWwgZGlsZW1tYTogd2UgZG8gd2FudCB0aGUgYXV0by1xdW90aW5nIGRlZmluaXRpb24gb2YgYE5FVycgd2hlbgorIyBldmFsdWF0aW5nIGBPTEQnLCBidXQgd2UgZG9uJ3Qgd2hlbiB3ZSBldmFsdWF0ZSB0aGUgc2Vjb25kIGBORVcnLgorIyBCYWNrIHRvIG5hbWVzcGFjZXM/CisjCisjIE5vLgorIworIworIyAjIFNlY29uZCBzdGVwOiByZXBsYWNlbWVudAorIyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBObywgYXMgYW5ub3VuY2VkIGFib3ZlLCB3ZSB3aWxsIHdvcmsgaW4gdHdvIHN0ZXBzOiBpbiBhIGZpcnN0IHN0ZXAgd2UKKyMgY29tcHV0ZSB0aGUgdXBkYXRlZCB2YWx1ZXMsIGFuZCBpbiBhIHNlY29uZCBzdGVwIHdlIHJlcGxhY2UgdGhlbS4gIE91cgorIyBnb2FsIGlzIHNvbWV0aGluZyBsaWtlIHRoaXM6CisjCisjICAgICBkaXZlcnQoLTEpZG5sCisjICAgICBjaGFuZ2VxdW90ZShbLCBdKQorIyAgICAgZGVmaW5lKFtPTERdLCBbTkVXKFsxLCAyXSwgWzNdKWNoYW5nZXF1b3RlKCldKQorIyAgICAgdW5kZWZpbmUoW2RubF0pCisjICAgICB1bmRlZmluZShbbTRfZXZhbF0pCisjICAgICAjIFNvbWUgbW9yZSB1bmRlZmluZXMuLi4KKyMgICAgIGNoYW5nZXF1b3RlKCkKKyMgICAgIGRpdmVydCgwKWRubAorIyAgICAgZG5sIFRoZSBVbmJlbGlldmFibGUgVHJ1dGgKKyMgICAgIGNoYW5nZXF1b3RlKFssIF0pT0xEKDEsIDIpCisjICAgICBORVcoWzAsIDBdLAorIwkgIDApCisjCisjIGkuZS4sIHRoZSBuZXcgdmFsdWUgb2YgYE9MRCcgaXMgcHJlY29tcHV0ZWQgdXNpbmcgdGhlIGF1dG8tcXVvdGluZworIyBkZWZpbml0aW9uIG9mIGBORVcnIGFuZCB0aGUgbTQgYnVpbHRpbnMuICBXZSdsbCBzZWUgaG93IGFmdGVyd2FyZHMsCisjIGxldCdzIGZpbmlzaCB3aXRoIHRoZSByZXBsYWNlbWVudC4KKyMKKyMgT2YgY291cnNlIHRoZSBzb2x1dGlvbiBhYm92ZSBpcyB3cm9uZzogaWYgdGhlcmUgd2VyZSBvdGhlciBjYWxscyB0bworIyBgT0xEJyB3aXRoIGRpZmZlcmVudCB2YWx1ZXMsIHdlIHdvdWxkIHNtYXNoIHRoZW0gdG8gdGhlIHNhbWUgdmFsdWUuCisjIEJ1dCBpdCBpcyBxdWl0ZSBlYXN5IHRvIGdlbmVyYWxpemUgdGhlIHNjaGVtZSBhYm92ZToKKyMKKyMgICAgIGRpdmVydCgtMSlkbmwKKyMgICAgIGNoYW5nZXF1b3RlKFssIF0pCisjICAgICBkZWZpbmUoW09MRChbMV0sWzJdKV0sIFtORVcoWzEsIDJdLCBbM10pXSkKKyMgICAgIGRlZmluZShbT0xEXSwgW2RlZm4oW09MRCgkQCldKWNoYW5nZXF1b3RlKCldKQorIyAgICAgdW5kZWZpbmUoW2RubF0pCisjICAgICB1bmRlZmluZShbbTRfZXZhbF0pCisjICAgICAjIFNvbWUgbW9yZSB1bmRlZmluZXMuLi4KKyMgICAgIGNoYW5nZXF1b3RlKCkKKyMgICAgIGRpdmVydCgwKWRubAorIyAgICAgZG5sIFRoZSBVbmJlbGlldmFibGUgVHJ1dGgKKyMgICAgIGNoYW5nZXF1b3RlKFssIF0pT0xEKDEsIDIpCisjICAgICBORVcoWzAsIDBdLAorIwkgIDApCisjCisjIGkuZS4sIGZvciBlYWNoIGNhbGwgdG8gb2Jzb2xldGUgbWFjcm9zLCB3ZSBidWlsZCBhbiBhcnJheSBgY2FsbCA9PgorIyB2YWx1ZScsIGFuZCB1c2UgYSBtYWNybyB0byBkaXNwYXRjaCB0aGVzZSB2YWx1ZXMuICBUaGlzIHJlc3VsdHMgaW46CisjCisjICAgICBkbmwgVGhlIFVuYmVsaWV2YWJsZSBUcnV0aAorIyAgICAgTkVXKFsxLCAyXSwgWzNdKQorIyAgICAgTkVXKFswLCAwXSwKKyMJICAwKQorIworIyBJbiBGcmVuY2gsIHdlIHNheSBgWW91cGkgIScsIHdoaWNoIHlvdSBtaWdodCByb3VnaGx5IHRyYW5zbGF0ZSBhcworIyBgWWlwcGVlIScuCisjCisjCisjICMgRmlyc3Qgc3RlcDogY29tcHV0YXRpb24KKyMgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBMZXQncyBzdHVkeSB0aGUgYW5hdG9teSBvZiB0aGUgZmlsZSwgYW5kIG5hbWUgaXRzIHNlY3Rpb25zOgorIworIyBwcm9sb2d1ZQorIyAgICAgZGl2ZXJ0KC0xKWRubAorIyAgICAgY2hhbmdlcXVvdGUoWywgXSkKKyMgdmFsdWVzCisjICAgICBkZWZpbmUoW09MRChbMV0sWzJdKV0sIFtORVcoWzEsIDJdLCBbM10pXSkKKyMgZGlzcGF0Y2hlcgorIyAgICAgZGVmaW5lKFtPTERdLCBbZGVmbihbT0xEKCRAKV0pY2hhbmdlcXVvdGUoKV0pCisjIGRpc2FibGVyCisjICAgICB1bmRlZmluZShbZG5sXSkKKyMgICAgIHVuZGVmaW5lKFttNF9ldmFsXSkKKyMgICAgICMgU29tZSBtb3JlIHVuZGVmaW5lcy4uLgorIyAgICAgY2hhbmdlcXVvdGUoKQorIyAgICAgZGl2ZXJ0KDApZG5sCisjIGlucHV0CisjICAgICBkbmwgVGhlIFVuYmVsaWV2YWJsZSBUcnV0aAorIyAgICAgY2hhbmdlcXVvdGUoWywgXSlPTEQoMSwgMikKKyMgICAgIE5FVyhbMCwgMF0sCisjCSAgMCkKKyMKKyMKKyMgIyBDb21wdXRpbmcgdGhlIGB2YWx1ZXMnIHNlY3Rpb24KKyMgIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyMKKyMgRmlyc3Qgd2UgbmVlZCB0byBnZXQgdGhlIGxpc3Qgb2YgYWxsIHRoZSBBVSBtYWNybyB1c2VzLiAgVG8gdGhpcyBlbmQsCisjIGZpcnN0IGdldCB0aGUgbGlzdCBvZiBhbGwgdGhlIEFVIG1hY3JvcyBuYW1lcyBieSB0cmFjaW5nIGBBVV9ERUZVTicgaW4KKyMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGF1dG9jb25mLiAgVGhpcyBsaXN0IGlzIGNvbXB1dGVkIGluIHRoZSBmaWxlCisjIGBhdS50eHQnIGJlbG93LgorIworIyBUaGVuIHVzZSB0aGlzIGxpc3QgdG8gdHJhY2UgYWxsIHRoZSBBVSBtYWNybyB1c2VzIGluIHRoZSBpbnB1dC4gIFRoZQorIyBnb2FsIGlzIG9idGFpbiBpbiB0aGUgY2FzZSBvZiBvdXIgZXhhbXBsZToKKyMKKyMgICAgIFtkZWZpbmUoW09MRChbMV0sWzJdKV0sXUA8PEBPTEQoWzFdLFsyXSlAPj5AWyldCisjCisjIFRoaXMgaXMgdGhlIGZpbGUgYHZhbHVlcy5pbicgYmVsb3cuCisjCisjIFdlIHdhbnQgdG8gZXZhbHVhdGUgdGhpcyB3aXRoIG9ubHkgdGhlIGJ1aWx0aW5zIChpbiBmYWN0IG00c3VnYXIpLCB0aGUKKyMgYXV0by1xdW90aW5nIGRlZmluaXRpb25zIG9mIHRoZSBuZXcgbWFjcm9zIChgbmV3Lm00JyksIGFuZCB0aGUKKyMgZGVmaW5pdGlvbiBvZiB0aGUgb2xkIG1hY3JvcyAoYG9sZC5tNCcpLiAgQ29tcHV0aW5nIHRoZXNlIGxhc3QgdHdvCisjIGZpbGVzIGlzIGVhc3k6IGl0J3MganVzdCBhIG1hdHRlciBvZiB1c2luZyB0aGUgcmlnaHQgYC0tdHJhY2UnIG9wdGlvbi4KKyMKKyMgU28gdGhlIGNvbnRlbnQgb2YgYHZhbHVlcy5pbicgaXM6CisjCisjICAgICBpbmNsdWRlKCRhdXRvY29uZl9kaXIvbTRzdWdhci5tNCkKKyMgICAgIG00X2luY2x1ZGUobmV3Lm00KQorIyAgICAgbTRfaW5jbHVkZShvbGQubTQpCisjICAgICBkaXZlcnQoMClkbmwKKyMgICAgIFtkZWZpbmUoW09MRChbMV0sWzJdKV0sXUA8PEBPTEQoWzFdLFsyXSlAPj5AWyldCisjCisjIFdlIHJ1biBtNCBvbiBpdCwgd2hpY2ggeWllbGRzOgorIworIyAgICAgZGVmaW5lKFtPTEQoWzFdLFsyXSldLEA8PEBORVcoWzEsIDJdLCBbM10pQD4+QCkKKyMKKyMgVHJhbnNmb3JtIGBAPDxAJyBhbmQgYEA+PkAnIGludG8gcXVvdGVzIGFuZCB3ZSBnZXQKKyMKKyMgICAgIGRlZmluZShbT0xEKFsxXSxbMl0pXSxbTkVXKFsxLCAyXSwgWzNdKV0pCisjCisjIFRoaXMgaXMgYHZhbHVlcy5tNCcuCisjCisjCisjICMgQ29tcHV0aW5nIHRoZSBgZGlzcGF0Y2hlcicgc2VjdGlvbgorIyAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyMKKyMgVGhlIGBwcm9sb2d1ZScsIGFuZCB0aGUgYGRpc2FibGVyJyBhcmUgc2ltcGxlIGFuZCBuZWVkIG5vIGNvbW1lbnRpbmcuCisjCisjIFRvIGNvbXB1dGUgdGhlIGBkaXNwYXRjaGVyJyAoYGRpc3BhdGNoLm00JyksIGFnYWluLCBpdCBpcyBhIHNpbXBsZQorIyBtYXR0ZXIgb2YgdXNpbmcgdGhlIHJpZ2h0IGAtLXRyYWNlJy4KKyMKKyMgRmluYWxseSwgdGhlIGlucHV0IGlzIG5vdCBleGFjdGx5IHRoZSBpbnB1dCBmaWxlLCByYXRoZXIgaXQgaXMgdGhlCisjIGlucHV0IGZpbGUgd2l0aCB0aGUgYWRkZWQgYGNoYW5nZXF1b3RlJy4gIFRvIHRoaXMgZW5kLCB3ZSBidWlsZAorIyBgcXVvdGUuc2VkJy4KKyMKKyMKKyMgIyBQdXR0aW5nIGl0IGFsbCB0b2dldGhlcgorIyAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisjCisjIFdlIGJ1aWxkIHRoZSBmaWxlIGBpbnB1dC5tNCcgd2hpY2ggY29udGFpbnM6CisjCisjICAgICBkaXZlcnQoLTEpZG5sCisjICAgICBjaGFuZ2VxdW90ZShbLCBdKQorIyAgICAgaW5jbHVkZSh2YWx1ZXMubTQpCisjICAgICBpbmNsdWRlKGRpc3BhdGNoLm00KQorIyAgICAgdW5kZWZpbmUoW2RubF0pCisjICAgICB1bmRlZmluZShbZXZhbF0pCisjICAgICAjIFNvbWUgbW9yZSB1bmRlZmluZXMuLi4KKyMgICAgIGNoYW5nZXF1b3RlKCkKKyMgICAgIGRpdmVydCgwKWRubAorIyAgICAgZG5sIFRoZSBVbmJlbGlldmFibGUgVHJ1dGgKKyMgICAgIGNoYW5nZXF1b3RlKFssIF0pT0xEKDEsIDIpCisjICAgICBORVcoWzAsIDBdLAorIwkgIDApCisjCisjIEFuZCB3ZSBqdXN0IHJ1biBtNCBvbiBpdC4gIEV0IHZvaWxhYCwgTW9uc2lldXIgISAgTWFpcyBvdWksIG1haXMgb3VpLgorIworIyBXZWxsLCB0aGVyZSBhcmUgYSBmZXcgYWRkaXRpb25hbCB0ZWNobmljYWxpdGllcy4gIEZvciBpbnN0YW5jZSwgd2UKKyMgcmVseSBvbiBgY2hhbmdlcXVvdGUnLCBgaWZlbHNlJyBhbmQgYGRlZm4nLCBidXQgd2UgZG9uJ3Qgd2FudCB0bworIyBpbnRlcnByZXQgdGhlIGNoYW5nZXF1b3RlcyBvZiB0aGUgdXNlciwgc28gd2Ugc2ltcGx5IHVzZSBhbm90aGVyIG5hbWU6CisjIGBfYXVfY2hhbmdlcXVvdGUnIGV0Yy4KKyMKKyMKKyMgIyBGYWlsdXJlIG9mIHRoZSBmb3VydGggYXBwcm9hY2gKKyMgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgVGhpcyBhcHByb2FjaCBpcyBoZWF2aWx5IGJhc2VkIG9uIHRyYWNlcywgYnV0IHRoZW4gdGhlcmUgaXMgYW4gb2J2aW91cworIyBwcm9ibGVtOiBub24gZXhwYW5kZWQgY29kZSB3aWxsIG5ldmVyIGJlIHNlZW4uICBJbiBwYXJ0aWN1bGFyLCB0aGUgYm9keQorIyBvZiBhIGBkZWZpbmUnIGRlZmluaXRpb24gaXMgbm90IHNlZW4sIHNvIG9uIHRoZSBpbnB1dAorIworIwkgIGRlZmluZShbaWRlbV0sIFtPTEQoMCwgWyQxXSldKQorIworIyBhdXRvdXBkYXRlIHdvdWxkIG5ldmVyIHNlZSB0aGUgYE9MRCcsIGFuZCB3b3VsZG4ndCBoYXZlIHVwZGF0ZWQgaXQuCisjIFdvcnNlIHlldCwgaWYgYGlkZW0oMCknIHdhcyB1c2VkIGxhdGVyLCB0aGVuIGF1dG91cGRhdGUgc2VlcyB0aGF0CisjIGBPTEQnIGlzIHVzZWQsIGNvbXB1dGVzIHRoZSByZXN1bHQgZm9yIGBPTEQoMCwgMCknIGFuZCBzZXRzIHVwIGEKKyMgZGlzcGF0Y2hlciBmb3IgYE9MRCcuICBTaW5jZSB0aGVyZSB3YXMgbm8gY29tcHV0ZWQgdmFsdWUgZm9yIGBPTEQoMCwKKyMgWyQxXSknLCB0aGUgZGlzcGF0Y2hlciB3b3VsZCBoYXZlIHJlcGxhY2VkIHdpdGguLi4gbm90aGluZywgbGVhZGluZworIyB0bworIworIwkgIGRlZmluZShbaWRlbV0sIFtdKQorIworIyBXaXRoIHNvbWUgbW9yZSB0aGlua2luZywgeW91IHNlZSB0aGF0IHRoZSB0d28gc3RlcCBhcHByb2FjaCBpcyB3cm9uZywKKyMgdGhlIG5hbWVzcGFjZSBhcHByb2FjaCB3YXMgbXVjaCBzYW5lci4KKyMKKyMgQnV0IHlvdSBsZWFybmVkIGEgbG90LCBpbiBwYXJ0aWN1bGFyIHlvdSByZWFsaXplZCB0aGF0IHVzaW5nIHRyYWNlcworIyBjYW4gbWFrZSBpdCBwb3NzaWJsZSB0byBzaW11bGF0ZSBuYW1lc3BhY2VzIQorIworIworIworIyAjIFRoZSBmaWZ0aCBpbXBsZW1lbnRhdGlvbjogbTQgbmFtZXNwYWNlcyBieSBmaWxlcworIyAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBUaGUgZm91cnRoIGltcGxlbWVudGF0aW9uIGRlbW9uc3RyYXRlZCBzb21ldGhpbmcgdW5zdXJwcmlzaW5nOiB5b3UKKyMgY2Fubm90IHByZWNvbXB1dGUsIGkuZS4sIHRoZSBuYW1lc3BhY2UgYXBwcm9hY2ggd2FzIHRoZSByaWdodCBvbmUuCisjIFN0aWxsLCB3ZSBubyBsb25nZXIgd2FudCB0aGVtLCB0aGV5J3JlIHRvbyBleHBlbnNpdmUuICBMZXQncyBoYXZlIGEKKyMgbG9vayBhdCB0aGUgd2F5IGl0IHdvcmtlZC4KKyMKKyMgV2hlbiB1cGRhdGluZworIworIyAgICAgZG5sIFRoZSBVbmJlbGlldmFibGUgVHJ1dGgKKyMgICAgIE9MRCgxLCAyKQorIyAgICAgTkVXKFswLCAwXSwgWzBdKQorIworIyB5b3UgZXZhbHVhdGUgYGlucHV0Lm00JzoKKyMKKyMgICAgIGRpdmVydCgtMSkKKyMgICAgIGNoYW5nZXF1b3RlKFssIF0pCisjICAgICBkZWZpbmUoW09MRF0sCisjICAgICBbbTRfZW5hYmxlKClORVcoWyQxLCAkMl0sIG00X2V2YWwoWyQxICsgJDJdKSltNF9kaXNhYmxlKCldKQorIyAgICAgLi4uCisjICAgICBtNF9kaXNhYmxlKCkKKyMgICAgIGRubCBUaGUgVW5iZWxpZXZhYmxlIFRydXRoCisjICAgICBPTEQoMSwgMikKKyMgICAgIE5FVyhbMCwgMF0sIFswXSkKKyMKKyMgd2hlcmUgYG00X2Rpc2FibGUnIHVuZGVmaW5lcyB0aGUgbTQgYW5kIG00c3VnYXIsIGFuZCBkaXNhYmxlcyB0aGUgcXVvdGVzCisjIGFuZCBjb21tZW50czoKKyMKKyMgICAgIGRlZmluZShbbTRfZGlzYWJsZV0sCisjICAgICBbdW5kZWZpbmUoW19fZmlsZV9fXSkKKyMgICAgIC4uLgorIyAgICAgY2hhbmdlY29tKCMpCisjICAgICBjaGFuZ2VxdW90ZSgpXSkKKyMKKyMgYG00X2VuYWJsZScgZG9lcyB0aGUgY29udmVyc2U6IHJlZXN0YWJsaXNoIHF1b3RlcyBhbmQgY29tbWVudHMKKyMgLS1lYXN5LS0sIHJlZXN0YWJsaXNoIG00c3VnYXIgLS1lYXN5OiBqdXN0IGxvYWQgYG00c3VnYXIubTQnIGFnYWluLS0gYW5kCisjIHJlZW5hYmxlIHRoZSBidWlsdGlucy4gIFRoaXMgbGF0ZXIgdGFzayByZXF1aXJlcyB0aGF0IHlvdSBmaXJzdCBzYXZlCisjIHRoZSBidWlsdGlucy4gIEFuZCBCVFcsIHRoZSBkZWZpbml0aW9uIGFib3ZlIG9mIGBtNF9kaXNhYmxlJyBjYW5ub3QKKyMgd29yazogeW91IHVuZGVmaW5lZCBgY2hhbmdlcXVvdGUnIGJlZm9yZSB1c2luZyBpdCEgIFNvIHlvdSBuZWVkIHRvIHVzZQorIyB5b3VyIHByaXZhdGVzIGNvcGllcyBvZiB0aGUgYnVpbHRpbnMuICBMZXQncyBpbnRyb2R1Y2UgdGhyZWUgZmlsZXMgZm9yCisjIHRoaXM6CisjCisjICBgbTRzYXZlLm00JworIyAgICBtb3ZlcyB0aGUgbTQgYnVpbHRpbnMgaW50byB0aGUgYF9hdV8nIHBzZXVkbyBuYW1lc3BhY2UsCisjICBgdW5tNC5tNCcKKyMgICAgdW5kZWZpbmVzIHRoZSBidWlsdGlucywKKyMgIGBtNC5tNCcKKyMgICAgcmVzdG9yZXMgdGhlbS4KKyMKKyMgU28gYGlucHV0Lm00JyBpczoKKyMKKyMgICAgIGRpdmVydCgtMSkKKyMgICAgIGNoYW5nZXF1b3RlKFssIF0pCisjCisjICAgICBpbmNsdWRlKFttNHNhdmUubTRdKQorIworIyAgICAgIyBJbXBvcnQgQVUuCisjICAgICBkZWZpbmUoW09MRF0sCisjICAgICBbbTRfZW5hYmxlKClORVcoWyQxLCAkMl0sIG00X2V2YWwoWyQxICsgJDJdKSltNF9kaXNhYmxlKCldKQorIworIyAgICAgZGVmaW5lKFtfYXVfZW5hYmxlXSwKKyMgICAgIFtfYXVfY2hhbmdlY29tKFsjXSkKKyMgICAgIF9hdV9pbmNsdWRlKFttNC5tNF0pCisjICAgICBfYXVfaW5jbHVkZShtNHN1Z2FyLm00KV0pCisjCisjICAgICBkZWZpbmUoW19hdV9kaXNhYmxlXSwKKyMgICAgIFsjIERpc2FibGUgbTRzdWdhci4KKyMgICAgICMgRGlzYWJsZSB0aGUgbTQgYnVpbHRpbnMuCisjICAgICBfYXVfaW5jbHVkZShbdW5tNC5tNF0pCisjICAgICAjIDEuIERpc2FibGUgc3BlY2lhbCBjaGFyYWN0ZXJzLgorIyAgICAgX2F1X2NoYW5nZXF1b3RlKCkKKyMgICAgIF9hdV9jaGFuZ2Vjb20oKV0pCisjCisjICAgICBtNF9kaXNhYmxlKCkKKyMgICAgIGRubCBUaGUgVW5iZWxpZXZhYmxlIFRydXRoCisjICAgICBPTEQoMSwgMikKKyMgICAgIE5FVyhbMCwgMF0sIFswXSkKKyMKKyMgQmFzZWQgb24gd2hhdCB3ZSBsZWFybmVkIGluIHRoZSBmb3VydGggaW1wbGVtZW50YXRpb24gd2Uga25vdyB0aGF0IHdlCisjIGhhdmUgdG8gZW5hYmxlIHRoZSBxdW90ZXMgKmJlZm9yZSogYW55IEFVIG1hY3JvLCBhbmQgd2Uga25vdyB3ZSBuZWVkCisjIHRvIGJ1aWxkIGF1dG9xdW90aW5nIHZlcnNpb25zIG9mIHRoZSBBQyBtYWNyb3MuICBCdXQgdGhlIGF1dG9xdW90aW5nCisjIEFDIGRlZmluaXRpb25zIG11c3QgYmUgZGlzYWJsZWQgaW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIGFuZCBlbmFibGVkCisjIGluc2lkZSBBVSBtYWNyb3MuCisjCisjIFVzaW5nIGBhdXRvY29uZiAtLXRyYWNlJyBpdCBpcyBlYXN5IHRvIGJ1aWxkIHRoZSBmaWxlcworIworIyAgIGBhYy5tNCcKKyMgICAgIGRlZmluZSB0aGUgYXV0b3F1b3RpbmcgQUMgZmFrZSBtYWNyb3MKKyMgICBgZGlzYWJsZS5tNCcKKyMgICAgIHVuZGVmaW5lIHRoZSBtNHN1Z2FyIGFuZCBBQyBhdXRvcXVvdGluZyBtYWNyb3MuCisjICAgYGF1Lm00JworIyAgICAgZGVmaW5pdGlvbnMgb2YgdGhlIEFVIG1hY3JvcyAoc3VjaCBhcyBgT0xEJyBhYm92ZSkuCisjCisjIE5vdywgYGlucHV0Lm00JyBpczoKKyMKKyMgICAgIGRpdmVydCgtMSkKKyMgICAgIGNoYW5nZXF1b3RlKFssIF0pCisjCisjICAgICBpbmNsdWRlKFttNHNhdmUubTRdKQorIyAgICAgIyBJbXBvcnQgQVUuCisjICAgICBpbmNsdWRlKFthdS5tNF0pCisjCisjICAgICBkZWZpbmUoW19hdV9lbmFibGVdLAorIyAgICAgW19hdV9jaGFuZ2Vjb20oWyNdKQorIyAgICAgX2F1X2luY2x1ZGUoW200Lm00XSkKKyMgICAgIF9hdV9pbmNsdWRlKG00c3VnYXIubTQpCisjICAgICBfYXVfaW5jbHVkZShhYy5tNCldKQorIworIyAgICAgZGVmaW5lKFtfYXVfZGlzYWJsZV0sCisjICAgICBbX2F1X2luY2x1ZGUoW2Rpc2FibGUubTRdKQorIyAgICAgX2F1X2luY2x1ZGUoW3VubTQubTRdKQorIyAgICAgIyAxLiBEaXNhYmxlIHNwZWNpYWwgY2hhcmFjdGVycy4KKyMgICAgIF9hdV9jaGFuZ2VxdW90ZSgpCisjICAgICBfYXVfY2hhbmdlY29tKCldKQorIworIyAgICAgbTRfZGlzYWJsZSgpCisjICAgICBkbmwgVGhlIFVuYmVsaWV2YWJsZSBUcnV0aAorIyAgICAgX2F1X2NoYW5nZXF1b3RlKFssIF0pT0xEKDEsIDIpCisjICAgICBORVcoWzAsIDBdLCBbMF0pCisjCisjIEZpbmFsbHksIHZlcnNpb24gViBpcyByZWFkeS4KKyMKKyMgV2VsbC4uLiBhbG1vc3QuCisjCisjIFRoZXJlIGlzIGEgc2xpZ2h0IHByb2JsZW0gdGhhdCByZW1haW5zOiBpZiBhbiBBVSBtYWNybyBPVVRFUiBpbmNsdWRlcworIyBhbiBBVSBtYWNybyBJTk5FUiwgdGhlbiBfYXVfZW5hYmxlIHdpbGwgYmUgcnVuIHdoZW4gZW50ZXJpbmcgT1VURVIKKyMgYW5kIHdoZW4gZW50ZXJpbmcgSU5ORVIgKG5vdCBnb29kLCBidXQgbm90IHRvbyBiYWQgeWV0KS4gIEJ1dCB3aGVuCisjIGdldHRpbmcgb3V0IG9mIElOTkVSLCBfYXVfZGlzYWJsZSB3aWxsIGRpc2FibGUgZXZlcnl0aGluZyB3aGlsZSB3ZQorIyB3ZXJlIHN0aWxsIGluIE9VVEVSLiAgQmFkYWJvb20uCisjCisjIFRoZXJlZm9yZSBfYXVfZW5hYmxlIGFuZCBfYXVfZGlzYWJsZSBoYXZlIHRvIGJlIHdyaXR0ZW4gdG8gd29yayBieQorIyBwYWlyczogZWFjaCBfYXVfZW5hYmxlIHB1c2hkZWYncyBfYXVfZW5hYmxlZCwgYW5kIGVhY2ggX2F1X2Rpc2FibGUKKyMgcG9wZGVmJ3MgX2F1X2VuYWJsZWQuICBBbmQgb2YgY291cnNlIF9hdV9lbmFibGUgYW5kIF9hdV9kaXNhYmxlIGFyZQorIyBlZmZlY3RpdmUgd2hlbiBfYXVfZW5hYmxlZCBpcyAqbm90KiBkZWZpbmVkLgorIworIyBGaW5hbGx5LCB2ZXJzaW9uIFYnIGlzIHJlYWR5LiAgQW5kIHRoZXJlIGlzIG11Y2ggcmVqb2ljaW5nLiAgKEFuZCBJCisjIGhhdmUgZnJlZSB0aW1lIGFnYWluLiAgSSB0aGluay4gIFllYWgsIHJpZ2h0LikKKworIyMjIFNldHVwICJHTlUiIHN0eWxlIGZvciBwZXJsLW1vZGUgYW5kIGNwZXJsLW1vZGUuCisjIyBMb2NhbCBWYXJpYWJsZXM6CisjIyBwZXJsLWluZGVudC1sZXZlbDogMgorIyMgcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1pbWFnaW5hcnktb2Zmc2V0OiAwCisjIyBwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWluZGVudC1sZXZlbDogMgorIyMgY3BlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1leHRyYS1uZXdsaW5lLWJlZm9yZS1icmFjZTogdAorIyMgY3BlcmwtbWVyZ2UtdHJhaWxpbmctZWxzZTogbmlsCisjIyBjcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgRW5kOgpkaWZmIC0tZ2l0IGEvYmluL2NjYWNoZSBiL2Jpbi9jY2FjaGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTgwMTk3ZgotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9jY2FjaGUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYmluL2N0LW5nIGIvYmluL2N0LW5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIxZDZhMzUKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vY3QtbmcKQEAgLTAsMCArMSwxODIgQEAKKyMhL3Vzci9iaW4vbWFrZSAtcmYKKyMgTWFrZWZpbGUgZm9yIGNyb3NzdG9vbC1ORy4KKyMgQ29weXJpZ2h0IDIwMDYgWWFubiBFLiBNT1JJTiA8eWFubi5tb3Jpbi4xOTk4QGFuY2llbnMuZW5pYi5mcj4KKworIyBEb24ndCBwcmludCBkaXJlY3RvcnkgYXMgd2UgZGVzY2VuZCBpbnRvIHRoZW0KKyMgRG9uJ3QgdXNlIGJ1aWx0LWluIHJ1bGVzLCB3ZSBrbm93IHdoYXQgd2UncmUgZG9pbmcKK01BS0VGTEFHUyArPSAtLW5vLXByaW50LWRpcmVjdG9yeSAtLW5vLWJ1aWx0aW4tcnVsZXMKKworIyBEb24ndCBnbyBwYXJhbGxlbAorLk5PVFBBUkFMTEVMOgorCisjIFRoaXMgaXMgd2hlcmUgY3QtbmcgaXM6CitleHBvcnQgQ1RfTkc6PSQobGFzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkKKyMgYW5kIHRoaXMgaXMgd2hlcmUgd2UncmUgd29ya2luZyBpbjoKK2V4cG9ydCBDVF9UT1BfRElSOj0kKHNoZWxsIHB3ZCkKKworIyBQYXRocyBhbmQgdmFsdWVzIHNldCBieSAuL2NvbmZpZ3VyZQorIyBEb24ndCBib3RoZXIgdG8gY2hhbmdlIGl0IG90aGVyIHRoYW4gd2l0aCBhIG5ldyAuL2NvbmZpZ3VyZSEKK2V4cG9ydCBDVF9MSUJfRElSOj0vdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3IvbGliL2N0LW5nLTEuMTMuNAorZXhwb3J0IENUX0RPQ19ESVI6PS91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9ob3N0L3Vzci9zaGFyZS9kb2MvY3QtbmctMS4xMy40CisKKyMgVGhpcyBpcyBjcm9zc3Rvb2wtTkcgdmVyc2lvbiBzdHJpbmcKK2V4cG9ydCBDVF9WRVJTSU9OOj0xLjEzLjQKKworIyBQYXRocyBmb3VuZCBieSAuL2NvbmZpZ3VyZQoraW5jbHVkZSAkKENUX0xJQl9ESVIpL3BhdGhzLm1rCisKKyMgU29tZSBkaXN0cmlidXRpb25zIChlZy4gVWJ1bnR1KSB0aG91Z2h0IGl0IHdpc2UgdG8gcG9pbnQgL2Jpbi9zaCB0bworIyBhIHRydWx5IFBPU0lYLWNvbmZvcm1pbmcgc2hlbGwsIGFzaCBpbiB0aGlzIGNhc2UuIFRoaXMgaXMgbm90IHNvIGdvb2QKKyMgYXMgd2UsIHNtYXJ0IChoYWhhISkgZGV2ZWxvcGVycyAoYXMgc21hcnQgd2Ugb3Vyc2VsdmVzIHRoaW5rIHdlIGFyZSksCisjIGdvdCB1c2VkIHRvIGJhc2hpc21zLCBhbmQgYXJlIGVuY2xpbmVkIHRvIGVhc2luZXNzLi4uIFNvIGZvcmNlIHVzZSBvZgorIyBiYXNoLgorZXhwb3J0IFNIRUxMPSQoYmFzaCkKKworIyBHUkVQX09QVElPTlM9LS1jb2xvcj1hbHdheXMgd2lsbCBicmVhayB0aGUgZ2VuZXJhdGVkIC5pbiBmaWxlcworIyBXZSBkbyBub3QgbmVlZCBhbnkgR1JFUF9PUFRJT05TIGFueXdheSwgc28gc2V0IGl0IHRvIGVtcHR5LgorZXhwb3J0IEdSRVBfT1BUSU9OUz0KKworIyBNYWtlIHRoZSByZXN0YXJ0L3N0b3Agc3RlcHMgYXZhaWxhYmUgdG8gc2NyaXB0cy9jcm9zdG9vbC1ORy5zaAorZXhwb3J0IENUX1NUT1A6PSQoU1RPUCkKK2V4cG9ydCBDVF9SRVNUQVJUOj0kKFJFU1RBUlQpCisKK1NJTEVOVD1ACitFQ0hPPWVjaG8KK2lmZXEgKCQoc3RyaXAgJChvcmlnaW4gVikpLGNvbW1hbmQgbGluZSkKKyAgaWZlcSAoJChzdHJpcCAkKFYpKSwwKQorICAgIFNJTEVOVD1ACisgICAgRUNITz06CisgIGVsc2UKKyAgICBpZmVxICgkKHN0cmlwICQoVikpLDEpCisgICAgICBTSUxFTlQ9CisgICAgICBFQ0hPPToKKyAgICBlbHNlCisgICAgICBpZmVxICgkKHN0cmlwICQoVikpLDIpCisgICAgICAgIFNJTEVOVD0KKyAgICAgICAgRUNITz1lY2hvCisgICAgICBlbmRpZiAjIFYgPT0gMgorICAgIGVuZGlmICMgVj09IDEKKyAgZW5kaWYgIyBWID09IDAKK2VuZGlmICMgb3JpZ2luIFYKK2V4cG9ydCBWIFNJTEVOVCBFQ0hPCisKK2FsbDogaGVscAorCisuUEhPTlk6ICQoUEhPTlkpCitQSE9OWSArPSBhbGwKK0ZPUkNFOgorCisjIEhlbHAgc3lzdGVtCitoZWxwOjogaGVscC1oZWFkIGhlbHAtY29uZmlnIGhlbHAtc2FtcGxlcyBoZWxwLWJ1aWxkIGhlbHAtY2xlYW4gaGVscC1kaXN0cmliIGhlbHAtZW52IGhlbHAtdGFpbAorCitoZWxwLWhlYWQ6OiB2ZXJzaW9uCisJQGVjaG8gICdTZWUgYmVsb3cgZm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgYWN0aW9ucywgbGlzdGVkIGJ5IGNhdGVnb3J5OicKKworaGVscC1jb25maWc6OgorCUBlY2hvCisJQGVjaG8gICdDb25maWd1cmF0aW9uIGFjdGlvbnM6JworCitoZWxwLXNhbXBsZXM6OgorCUBlY2hvCisJQGVjaG8gICdQcmVjb25maWd1cmVkIHRvb2xjaGFpbnMgKCM6IGZvcmNlIG51bWJlciBvZiAvLyBqb2JzKTonCisKK2hlbHAtYnVpbGQ6OgorCUBlY2hvCisJQGVjaG8gICdCdWlsZCBhY3Rpb25zICgjOiBmb3JjZSBudW1iZXIgb2YgLy8gam9icyk6JworCitoZWxwLWNsZWFuOjoKKwlAZWNobworCUBlY2hvICAnQ2xlYW4gYWN0aW9uczonCisKK2hlbHAtZGlzdHJpYjo6CisJQGVjaG8KKwlAZWNobyAgJ0Rpc3RyaWJ1dGlvbiBhY3Rpb25zOicKKworaGVscC1lbnY6OgorCUBlY2hvCisJQGVjaG8gICdFbnZpcm9uZW1lbnQgdmFyaWFibGVzIChzZWUgL3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyL3NoYXJlL2RvYy9jdC1uZy0xLjEzLjQvMCAtIFRhYmxlIG9mIGNvbnRlbnQudHh0KTonCisKK2hlbHAtdGFpbDo6CisJQGVjaG8KKwlAZWNobyAgJ1VzZSBhY3Rpb24gIm1lbnVjb25maWciIHRvIGNvbmZpZ3VyZSB5b3VyIHRvb2xjaGFpbicKKwlAZWNobyAgJ1VzZSBhY3Rpb24gImJ1aWxkIiB0byBidWlsZCB5b3VyIHRvb2xjaGFpbicKKwlAZWNobyAgJ1VzZSBhY3Rpb24gInZlcnNpb24iIHRvIHNlZSB0aGUgdmVyc2lvbicKKwlAZWNobyAgJ1NlZSAibWFuIDEgJChub3RkaXIgJChDVF9ORykpIiBmb3Igc29tZSBoZWxwIGFzIHdlbGwnCisKK2hlbHAtYnVpbGQ6OgorCUBlY2hvICAnICBidWlsZFsuI10gICAgICAgICAgLSBCdWlsZCB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQgdG9vbGNoYWluJworCitoZWxwLWNsZWFuOjoKKwlAZWNobyAgJyAgY2xlYW4gICAgICAgICAgICAgIC0gUmVtb3ZlIGdlbmVyYXRlZCBmaWxlcycKKwlAZWNobyAgJyAgZGlzdGNsZWFuICAgICAgICAgIC0gUmVtb3ZlIGdlbmVyYXRlZCBmaWxlcywgY29uZmlndXJhdGlvbiBhbmQgYnVpbGQgZGlyZWN0b3JpZXMnCisKK2luY2x1ZGUgJChDVF9MSUJfRElSKS9jb25maWcvY29uZmlnLm1rCitpbmNsdWRlICQoQ1RfTElCX0RJUikva2NvbmZpZy9rY29uZmlnLm1rCitpbmNsdWRlICQoQ1RfTElCX0RJUikvc3RlcHMubWsKK2luY2x1ZGUgJChDVF9MSUJfRElSKS9zYW1wbGVzL3NhbXBsZXMubWsKK2luY2x1ZGUgJChDVF9MSUJfRElSKS9zY3JpcHRzL3NjcmlwdHMubWsKKworaGVscC1jb25maWc6OgorCUBlY2hvICAnICBzaG93LXR1cGxlICAgICAgICAgLSBQcmludCB0aGUgdHVwbGUgb2YgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIHRvb2xjaGFpbicKKworaGVscC1kaXN0cmliOjoKKwlAZWNobyAgJyAgdGFyYmFsbCAgICAgICAgICAgIC0gQnVpbGQgYSB0YXJiYWxsIG9mIHRoZSBjb25maWd1cmVkIHRvb2xjaGFpbicKKworaGVscC1lbnY6OgorCUBlY2hvICAnICBWPTB8MXwyICAgICAgICAgICAgLSAwID0+IHNob3cgb25seSBodW1hbi1yZWFkYWJsZSBtZXNzYWdlcyAoZGVmYXVsdCknCisJQGVjaG8gICcgICAgICAgICAgICAgICAgICAgICAgIDEgPT4gc2hvdyBvbmx5IHRoZSBjb21tYW5kcyBiZWluZyBleGVjdXRlZCcKKwlAZWNobyAgJyAgICAgICAgICAgICAgICAgICAgICAgMiA9PiBzaG93IGJvdGgnCisKKyMgRW5kIGhlbHAgc3lzdGVtCisKKy5jb25maWc6CisJQGVjaG8gIlRoZXJlIGlzIG5vIGV4aXN0aW5nIC5jb25maWcgZmlsZSEiCisJQGVjaG8gIllvdSBuZWVkIHRvIGVpdGhlciBydW4gJ21lbnVjb25maWcnLCIKKwlAZWNobyAib3IgY29uZmlndXJlIGFuIGV4aXN0aW5nIHNhbXBsZS4iCisJQGZhbHNlCisKKy5jb25maWcuMjogLmNvbmZpZworCSQoU0lMRU5UKSQoc2VkKSAtciAtZSAncy9eKFtePV0rX0FSUkFZKT0iKC4qKSIkJC9cMT0oIFwyICkvOycgICBcCisJICAgICAgICAgICAgICAgICAgIC1lICcvXltePV0rX0FSUkFZPS9zL1xcKC4pL1wxL2c7JyAgICAgICAgICAgIFwKKwkgICAgICAgICAgICAgICAgJDwgPiRACisKK3Nob3ctdHVwbGU6IC5jb25maWcuMgorCSQoU0lMRU5UKSQoYmFzaCkgJChDVF9MSUJfRElSKS9zY3JpcHRzL3Nob3dUdXBsZS5zaAorCisjIEFjdHVhbCBidWlsZAorYnVpbGQ6IC5jb25maWcuMgorCSQoU0lMRU5UKSQoQ1RfTElCX0RJUikvc2NyaXB0cy9jcm9zc3Rvb2wtTkcuc2gKKworYnVpbGQuJToKKwkkKFNJTEVOVCkkKE1BS0UpIC1yZiAkKENUX05HKSAkKHNoZWxsIGVjaG8gIiQoQCkiIHwkKHNlZCkgLXIgLWUgJ3N8XihbXi5dKylcLihbWzpkaWdpdDpdXSspJCR8XDEgQ1RfSk9CUz1cMnw7JykKKworUEhPTlkgKz0gdGFyYmFsbAorI3RhcmJhbGw6CisjCUAkKENUX0xJQl9ESVIpL3NjcmlwdHMvdGFyYmFsbC5zaAordGFyYmFsbDoKKwlAZWNobyAnVGFyYmFsbCBjcmVhdGlvbiBkaXNhYmxlZCBmb3Igbm93Li4uIFNvcnJ5LicKKwlAdHJ1ZQorCitQSE9OWSArPSB2ZXJzaW9uCit2ZXJzaW9uOgorCUBlY2hvICdUaGlzIGlzIGNyb3NzdG9vbC1ORyB2ZXJzaW9uICQoQ1RfVkVSU0lPTiknCisJQGVjaG8KKwlAZWNobyAnQ29weXJpZ2h0IChDKSAyMDA4ICBZYW5uIEUuIE1PUklOIDx5YW5uLm1vcmluLjE5OThAYW5jaWVucy5lbmliLmZyPicKKwlAZWNobyAnVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLicKKwlAZWNobyAnVGhlcmUgaXMgTk8gd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQScKKwlAZWNobyAnUEFSVElDVUxBUiBQVVJQT1NFLicKKwlAZWNobworCitQSE9OWSArPSBjbGVhbgorY2xlYW46OgorCUAkKEVDSE8pICIgIENMRUFOIGxvZyIKKwkkKFNJTEVOVClybSAtZiBidWlsZC5sb2cgLmNvbmZpZy4qIC4uY29uZmlnKgorCitQSE9OWSArPSBkaXN0Y2xlYW4KK2Rpc3RjbGVhbjo6IGNsZWFuCisJQCQoRUNITykgIiAgQ0xFQU4gLmNvbmZpZyIKKwkkKFNJTEVOVClybSAtZiAuY29uZmlnIC5jb25maWcuKiAuLmNvbmZpZyoKKwlAJChFQ0hPKSAiICBDTEVBTiBidWlsZCBkaXIiCisJJChTSUxFTlQpWyAhIC1kIHRhcmdldHMgXSB8fCBjaG1vZCAtUiB1K3cgdGFyZ2V0cworCSQoU0lMRU5UKVsgISAtZCAuYnVpbGQgIF0gfHwgY2htb2QgLVIgdSt3IC5idWlsZAorCSQoU0lMRU5UKXJtIC1yZiB0YXJnZXRzIC5idWlsZApkaWZmIC0tZ2l0IGEvYmluL2RnYXdrIGIvYmluL2RnYXdrCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ3ZTMyZGYKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vZGdhd2sKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYmluL2dhd2sgYi9iaW4vZ2F3awpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMWEzOWNkCi0tLSAvZGV2L251bGwKKysrIGIvYmluL2dhd2sKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYmluL2lmbmFtZXMgYi9iaW4vaWZuYW1lcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZmI4OTEyCi0tLSAvZGV2L251bGwKKysrIGIvYmluL2lmbmFtZXMKQEAgLTAsMCArMSwxNTMgQEAKKyMhIC91c3IvYmluL3BlcmwgLXcKKyMgLSotIHBlcmwgLSotCisjIEdlbmVyYXRlZCBmcm9tIGlmbmFtZXMuaW47IGRvIG5vdCBlZGl0IGJ5IGhhbmQuCisKK2V2YWwgJ2Nhc2UgJCMgaW4gMCkgZXhlYyAvdXNyL2Jpbi9wZXJsIC1TICIkMCI7OyAqKSBleGVjIC91c3IvYmluL3BlcmwgLVMgIiQwIiAiJEAiOzsgZXNhYycKKyAgICBpZiAwOworCisjIGlmbmFtZXMgLSBwcmludCB0aGUgaWRlbnRpZmllcnMgdXNlZCBpbiBDIHByZXByb2Nlc3NvciBjb25kaXRpb25hbHMKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDUsIDIwMDYsCisjIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFJlYWRzIGZyb20gc3RkaW4gaWYgbm8gZmlsZXMgYXJlIGdpdmVuLgorIyBXcml0ZXMgdG8gc3Rkb3V0LgorCisjIFdyaXR0ZW4gYnkgRGF2aWQgTWFjS2VuemllIDxkam1AZ251LmFpLm1pdC5lZHU+CisjIGFuZCBQYXVsIEVnZ2VydCA8ZWdnZXJ0QHR3aW5zdW4uY29tPi4KKworQkVHSU4KK3sKKyAgbXkgJHBrZ2RhdGFkaXIgPSAkRU5WeydhdXRvbTR0ZV9wZXJsbGliZGlyJ30gfHwgJy91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9ob3N0L3Vzci9zaGFyZS9hdXRvY29uZic7CisgIHVuc2hpZnQgQElOQywgJHBrZ2RhdGFkaXI7CisKKyAgIyBPdmVycmlkZSBTSEVMTC4gIE9uIERKR1BQIFNIRUxMIG1heSBub3QgYmUgc2V0IHRvIGEgc2hlbGwKKyAgIyB0aGF0IGNhbiBoYW5kbGUgcmVkaXJlY3Rpb24gYW5kIHF1b3RlIGFyZ3VtZW50cyBjb3JyZWN0bHksCisgICMgZS5nLjogQ09NTUFORC5DT00uICBGb3IgREpHUFAgYWx3YXlzIHVzZSB0aGUgc2hlbGwgdGhhdCBjb25maWd1cmUKKyAgIyBoYXMgZGV0ZWN0ZWQuCisgICRFTlZ7J1NIRUxMJ30gPSAnL2Jpbi9zaCcgaWYgKCReTyBlcSAnZG9zJyk7Cit9CisKK3VzZSBBdXRvbTR0ZTo6R2VuZXJhbDsKK3VzZSBBdXRvbTR0ZTo6WEZpbGU7Cit1c2UgQXV0b200dGU6OkZpbGVVdGlsczsKKworIyAkSEVMUAorIyAtLS0tLQorJGhlbHAgPSAiVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtGSUxFXS4uLgorCitTY2FuIGFsbCBvZiB0aGUgQyBzb3VyY2UgRklMRVMgKG9yIHRoZSBzdGFuZGFyZCBpbnB1dCwgaWYgbm9uZSBhcmUKK2dpdmVuKSBhbmQgd3JpdGUgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCBhIHNvcnRlZCBsaXN0IG9mIGFsbCB0aGUKK2lkZW50aWZpZXJzIHRoYXQgYXBwZWFyIGluIHRob3NlIGZpbGVzIGluIGAjaWYnLCBgI2VsaWYnLCBgI2lmZGVmJywgb3IKK2AjaWZuZGVmJyBkaXJlY3RpdmVzLiAgUHJpbnQgZWFjaCBpZGVudGlmaWVyIG9uIGEgbGluZSwgZm9sbG93ZWQgYnkgYQorc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIGZpbGVzIGluIHdoaWNoIHRoYXQgaWRlbnRpZmllciBvY2N1cnMuCisKKyAgLWgsIC0taGVscCAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC1WLCAtLXZlcnNpb24gICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b2NvbmZcQGdudS5vcmc+LgorR05VIEF1dG9jb25mIGhvbWUgcGFnZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvY29uZi8+LgorR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uCisiOworCisKKyMgJFZFUlNJT04KKyMgLS0tLS0tLS0KKyR2ZXJzaW9uID0gImlmbmFtZXMgKEdOVSBBdXRvY29uZikgMi42NQorQ29weXJpZ2h0IChDKSAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorTGljZW5zZSBHUEx2MysvQXV0b2NvbmY6IEdOVSBHUEwgdmVyc2lvbiAzIG9yIGxhdGVyCis8aHR0cDovL2dudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWw+LCA8aHR0cDovL2dudS5vcmcvbGljZW5zZXMvZXhjZXB0aW9ucy5odG1sPgorVGhpcyBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgYXJlIGZyZWUgdG8gY2hhbmdlIGFuZCByZWRpc3RyaWJ1dGUgaXQuCitUaGVyZSBpcyBOTyBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LgorCitXcml0dGVuIGJ5IERhdmlkIEouIE1hY0tlbnppZSBhbmQgUGF1bCBFZ2dlcnQuCisiOworCisKKyMgJnBhcnNlX2FyZ3MgKCkKKyMgLS0tLS0tLS0tLS0tLS0KKyMgUHJvY2VzcyBhbnkgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KK3N1YiBwYXJzZV9hcmdzICgpCit7CisgIGdldG9wdCAoKTsKK30KKworCisjICVPQ0NVUlJFTkNFCisjIC0tLS0tLS0tLS0tCitteSAlb2NjdXJyZW5jZTsKKworCisjICZzY2FuX2ZpbGUgKCRGSUxFLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdWIgc2Nhbl9maWxlICgkKQoreworICBteSAoJGZpbGVfbmFtZSkgPSBAXzsKKyAgbXkgJGZpbGUgPSBuZXcgQXV0b200dGU6OlhGaWxlICgiPCAiIC4gb3Blbl9xdW90ZSAoJGZpbGVfbmFtZSkpOworICB3aGlsZSAoJF8gPSAkZmlsZS0+Z2V0bGluZSkKKyAgICB7CisgICAgICAjIENvbnRpbnVhdGlvbiBsaW5lcy4KKyAgICAgICRfIC49ICRmaWxlLT5nZXRsaW5lCisJd2hpbGUgKHMvXFwkLy8pOworCisgICAgICAjIFByZXByb2Nlc3NvciBkaXJlY3RpdmVzLgorICAgICAgaWYgKHMvXlxzKlwjXHMqKGlmfGlmZGVmfGlmbmRlZnxlbGlmKVxzKy8vKQorCXsKKwkgICMgUmVtb3ZlIGNvbW1lbnRzLiAgTm90IHBlcmZlY3QsIGJ1dCBjbG9zZSBlbm91Z2guCisJICBzKC9cKi4qP1wqLykoKTsKKwkgIHMoL1wqLiopKCk7CisJICBzKC8vLiopKCk7CisJICBmb3JlYWNoIG15ICR3b3JkIChzcGxpdCAoL1xXKy8pKQorCSAgICB7CisJICAgICAgbmV4dAorCQlpZiAkd29yZCBlcSAnZGVmaW5lZCcgfHwgJHdvcmQgIX4gL15bYS16QS1aX10vOworCSAgICAgICRvY2N1cnJlbmNleyR3b3JkfXskZmlsZV9uYW1lfSA9IDE7CisJICAgIH0KKwl9CisgICAgfQorfQorCisKKyMjIC0tLS0tLSAjIworIyMgTWFpbi4gICMjCisjIyAtLS0tLS0gIyMKKworcGFyc2VfYXJncygpOworZm9yZWFjaCAoQEFSR1YpCisgIHsKKyAgICBzY2FuX2ZpbGUgKCRfKTsKKyAgfQorZm9yZWFjaCAoc29ydCBrZXlzICVvY2N1cnJlbmNlKQorICB7CisgICAgcHJpbnQgIiRfICIsIGpvaW4gKCcgJywgc29ydCBrZXlzICV7JG9jY3VycmVuY2V7JF99fSksICJcbiI7CisgIH0KKworIyMjIFNldHVwICJHTlUiIHN0eWxlIGZvciBwZXJsLW1vZGUgYW5kIGNwZXJsLW1vZGUuCisjIyBMb2NhbCBWYXJpYWJsZXM6CisjIyBwZXJsLWluZGVudC1sZXZlbDogMgorIyMgcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1pbWFnaW5hcnktb2Zmc2V0OiAwCisjIyBwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWluZGVudC1sZXZlbDogMgorIyMgY3BlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1leHRyYS1uZXdsaW5lLWJlZm9yZS1icmFjZTogdAorIyMgY3BlcmwtbWVyZ2UtdHJhaWxpbmctZWxzZTogbmlsCisjIyBjcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgRW5kOgpkaWZmIC0tZ2l0IGEvYmluL2lnYXdrIGIvYmluL2lnYXdrCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAzZDFjOTkKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vaWdhd2sKQEAgLTAsMCArMSwxMzggQEAKKyMhIC9iaW4vc2gKKyMgaWdhd2sgLS0tIGxpa2UgZ2F3ayBidXQgZG8gQGluY2x1ZGUgcHJvY2Vzc2luZworIworIyBBcm5vbGQgUm9iYmlucywgYXJub2xkQHNrZWV2ZS5jb20sIFB1YmxpYyBEb21haW4KKyMgSnVseSAxOTkzCisjIERlY2VtYmVyIDIwMTAsIG1pbm9yIGVkaXRzCisKK2lmIFsgIiQxIiA9IGRlYnVnIF0KK3RoZW4KKyAgICBzZXQgLXgKKyAgICBzaGlmdAorZmkKKworIyBBIGxpdGVyYWwgbmV3bGluZSwgc28gdGhhdCBwcm9ncmFtIHRleHQgaXMgZm9ybWF0dGVkIGNvcnJlY3RseQorbj0nCisnCisKKyMgSW5pdGlhbGl6ZSB2YXJpYWJsZXMgdG8gZW1wdHkKK3Byb2dyYW09CitvcHRzPQorCit3aGlsZSBbICQjIC1uZSAwIF0gIyBsb29wIG92ZXIgYXJndW1lbnRzCitkbworICAgIGNhc2UgJDEgaW4KKyAgICAtLSkgICAgIHNoaWZ0CisgICAgICAgICAgICBicmVhayA7OworCisgICAgLVcpICAgICBzaGlmdAorICAgICAgICAgICAgIyBUaGUgJHt4PydtZXNzYWdlIGhlcmUnfSBjb25zdHJ1Y3QgcHJpbnRzIGEKKyAgICAgICAgICAgICMgZGlhZ25vc3RpYyBpZiAkeCBpcyB0aGUgbnVsbCBzdHJpbmcKKyAgICAgICAgICAgIHNldCAtLSAtVyIke0A/J21pc3Npbmcgb3BlcmFuZCd9IgorICAgICAgICAgICAgY29udGludWUgOzsKKworICAgIC1bdkZdKSAgb3B0cz0iJG9wdHMgJDEgJyR7Mj8nbWlzc2luZyBvcGVyYW5kJ30nIgorICAgICAgICAgICAgc2hpZnQgOzsKKworICAgIC1bdkZdKikgb3B0cz0iJG9wdHMgJyQxJyIgOzsKKworICAgIC1mKSAgICAgcHJvZ3JhbT0iJHByb2dyYW0kbkBpbmNsdWRlICR7Mj8nbWlzc2luZyBvcGVyYW5kJ30iCisgICAgICAgICAgICBzaGlmdCA7OworCisgICAgLWYqKSAgICBmPSQoZXhwciAiJDEiIDogJy1mXCguKlwpJykKKyAgICAgICAgICAgIHByb2dyYW09IiRwcm9ncmFtJG5AaW5jbHVkZSAkZiIgOzsKKworICAgIC1bVy1dZmlsZT0qKQorICAgICAgICAgICAgZj0kKGV4cHIgIiQxIiA6ICctLmZpbGU9XCguKlwpJykKKyAgICAgICAgICAgIHByb2dyYW09IiRwcm9ncmFtJG5AaW5jbHVkZSAkZiIgOzsKKworICAgIC1bVy1dZmlsZSkKKyAgICAgICAgICAgIHByb2dyYW09IiRwcm9ncmFtJG5AaW5jbHVkZSAkezI/J21pc3Npbmcgb3BlcmFuZCd9IgorICAgICAgICAgICAgc2hpZnQgOzsKKworICAgIC1bVy1dc291cmNlPSopCisgICAgICAgICAgICB0PSQoZXhwciAiJDEiIDogJy0uc291cmNlPVwoLipcKScpCisgICAgICAgICAgICBwcm9ncmFtPSIkcHJvZ3JhbSRuJHQiIDs7CisKKyAgICAtW1ctXXNvdXJjZSkKKyAgICAgICAgICAgIHByb2dyYW09IiRwcm9ncmFtJG4kezI/J21pc3Npbmcgb3BlcmFuZCd9IgorICAgICAgICAgICAgc2hpZnQgOzsKKworICAgIC1bVy1ddmVyc2lvbikKKyAgICAgICAgICAgIGVjaG8gaWdhd2s6IHZlcnNpb24gMy4wIDE+JjIKKyAgICAgICAgICAgIGdhd2sgLS12ZXJzaW9uCisgICAgICAgICAgICBleGl0IDAgOzsKKworICAgIC1bVy1dKikgb3B0cz0iJG9wdHMgJyQxJyIgOzsKKworICAgICopICAgICAgYnJlYWsgOzsKKyAgICBlc2FjCisgICAgc2hpZnQKK2RvbmUKKworaWYgWyAteiAiJHByb2dyYW0iIF0KK3RoZW4KKyAgICAgcHJvZ3JhbT0kezE/J21pc3NpbmcgcHJvZ3JhbSd9CisgICAgIHNoaWZ0CitmaQorCisjIEF0IHRoaXMgcG9pbnQsIGBwcm9ncmFtJyBoYXMgdGhlIHByb2dyYW0uCitleHBhbmRfcHJvZz0nCisKK2Z1bmN0aW9uIHBhdGh0byhmaWxlLCAgICBpLCB0LCBqdW5rKQoreworICAgIGlmIChpbmRleChmaWxlLCAiLyIpICE9IDApCisgICAgICAgIHJldHVybiBmaWxlCisKKyAgICBpZiAoZmlsZSA9PSAiLSIpCisgICAgICAgIHJldHVybiBmaWxlCisKKyAgICBmb3IgKGkgPSAxOyBpIDw9IG5kaXJzOyBpKyspIHsKKyAgICAgICAgdCA9IChwYXRobGlzdFtpXSAiLyIgZmlsZSkKKyAgICAgICAgaWYgKChnZXRsaW5lIGp1bmsgPCB0KSA+IDApIHsKKyAgICAgICAgICAgICMgZm91bmQgaXQKKyAgICAgICAgICAgIGNsb3NlKHQpCisgICAgICAgICAgICByZXR1cm4gdAorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAiIgorfQorQkVHSU4geworICAgIHBhdGggPSBFTlZJUk9OWyJBV0tQQVRIIl0KKyAgICBuZGlycyA9IHNwbGl0KHBhdGgsIHBhdGhsaXN0LCAiOiIpCisgICAgZm9yIChpID0gMTsgaSA8PSBuZGlyczsgaSsrKSB7CisgICAgICAgIGlmIChwYXRobGlzdFtpXSA9PSAiIikKKyAgICAgICAgICAgIHBhdGhsaXN0W2ldID0gIi4iCisgICAgfQorICAgIHN0YWNrcHRyID0gMAorICAgIGlucHV0W3N0YWNrcHRyXSA9IEFSR1ZbMV0gIyBBUkdWWzFdIGlzIGZpcnN0IGZpbGUKKworICAgIGZvciAoOyBzdGFja3B0ciA+PSAwOyBzdGFja3B0ci0tKSB7CisgICAgICAgIHdoaWxlICgoZ2V0bGluZSA8IGlucHV0W3N0YWNrcHRyXSkgPiAwKSB7CisgICAgICAgICAgICBpZiAodG9sb3dlcigkMSkgIT0gIkBpbmNsdWRlIikgeworICAgICAgICAgICAgICAgIHByaW50CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZwYXRoID0gcGF0aHRvKCQyKQorICAgICAgICAgICAgaWYgKGZwYXRoID09ICIiKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJpZ2F3azolczolZDogY2Fubm90IGZpbmQgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGlucHV0W3N0YWNrcHRyXSwgRk5SLCAkMikgPiAiL2Rldi9zdGRlcnIiCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghIChmcGF0aCBpbiBwcm9jZXNzZWQpKSB7CisgICAgICAgICAgICAgICAgcHJvY2Vzc2VkW2ZwYXRoXSA9IGlucHV0W3N0YWNrcHRyXQorICAgICAgICAgICAgICAgIGlucHV0Wysrc3RhY2twdHJdID0gZnBhdGggICMgcHVzaCBvbnRvIHN0YWNrCisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBwcmludCAkMiwgImluY2x1ZGVkIGluIiwgaW5wdXRbc3RhY2twdHJdLAorICAgICAgICAgICAgICAgICAgICAiYWxyZWFkeSBpbmNsdWRlZCBpbiIsCisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZFtmcGF0aF0gPiAiL2Rldi9zdGRlcnIiCisgICAgICAgIH0KKyAgICAgICAgY2xvc2UoaW5wdXRbc3RhY2twdHJdKQorICAgIH0KK30nICAjIGNsb3NlIHF1b3RlIGVuZHMgYGV4cGFuZF9wcm9nJyB2YXJpYWJsZQorCitwcm9jZXNzZWRfcHJvZ3JhbT0kKGdhd2sgLS0gIiRleHBhbmRfcHJvZyIgL2Rldi9zdGRpbiA8PCBFT0YKKyRwcm9ncmFtCitFT0YKKykKK2V2YWwgZ2F3ayAkb3B0cyAtLSAnIiRwcm9jZXNzZWRfcHJvZ3JhbSInICciJEAiJwpkaWZmIC0tZ2l0IGEvYmluL2xpYnRvb2wgYi9iaW4vbGlidG9vbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNGI1Y2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvYmluL2xpYnRvb2wKQEAgLTAsMCArMSwxMDAyNCBAQAorIyEgL2Jpbi9zaAorCisjIGxpYnRvb2wgLSBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KKyMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY29uZmlnLnN0YXR1cyAobGlidG9vbCkgMi4yLjEwCisjIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBlbXBoYXRpYy5ueWMuY29ycC5nb29nbGUuY29tOgorIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisjCisjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjICAgICAgICAgICAgICAgICBJbmMuCisjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorIworIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorIworIyBHTlUgTGlidG9vbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyBpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CisjIGlzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorIyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIEdOVSBMaWJ0b29sOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgYSBjb3B5CisjIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sLCBvcgorIyBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisKKyMgVGhlIG5hbWVzIG9mIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0LgorYXZhaWxhYmxlX3RhZ3M9IkNYWCBGNzcgRkMgR0NKIFJDICIKKworIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUcKKworIyBXaGljaCByZWxlYXNlIG9mIGxpYnRvb2wubTQgd2FzIHVzZWQ/CittYWNyb192ZXJzaW9uPTIuMi4xMAorbWFjcm9fcmV2aXNpb249MS4zMTc1CisKKyMgQXNzZW1ibGVyIHByb2dyYW0uCitBUz0iL3Vzci9iaW4vYXMiCisKKyMgRExMIGNyZWF0aW9uIHByb2dyYW0uCitETExUT09MPSJkbGx0b29sIgorCisjIE9iamVjdCBkdW1wZXIgcHJvZ3JhbS4KK09CSkRVTVA9Im9iamR1bXAiCisKKyMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4KK2J1aWxkX2xpYnRvb2xfbGlicz15ZXMKKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgorYnVpbGRfb2xkX2xpYnM9bm8KKworIyBXaGF0IHR5cGUgb2Ygb2JqZWN0cyB0byBidWlsZC4KK3BpY19tb2RlPWRlZmF1bHQKKworIyBXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24uCitmYXN0X2luc3RhbGw9eWVzCisKKyMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KK1NIRUxMPSIvYmluL3NoIgorCisjIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IHByb3RlY3RzIGJhY2tzbGFzaGVzLgorRUNITz0icHJpbnRmICVzXFxuIgorCisjIFRoZSBob3N0IHN5c3RlbS4KK2hvc3RfYWxpYXM9Citob3N0PXg4Nl82NC11bmtub3duLWxpbnV4LWdudQoraG9zdF9vcz1saW51eC1nbnUKKworIyBUaGUgYnVpbGQgc3lzdGVtLgorYnVpbGRfYWxpYXM9CitidWlsZD14ODZfNjQtdW5rbm93bi1saW51eC1nbnUKK2J1aWxkX29zPWxpbnV4LWdudQorCisjIEEgc2VkIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuCitTRUQ9Ii9iaW4vc2VkIgorCisjIFNlZCB0aGF0IGhlbHBzIHVzIGF2b2lkIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uLgorWHNlZD0iJFNFRCAtZSAxcy9eWC8vIgorCisjIEEgZ3JlcCBwcm9ncmFtIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzLgorR1JFUD0iL2Jpbi9ncmVwIgorCisjIEFuIEVSRSBtYXRjaGVyLgorRUdSRVA9Ii9iaW4vZ3JlcCAtRSIKKworIyBBIGxpdGVyYWwgc3RyaW5nIG1hdGNoZXIuCitGR1JFUD0iL2Jpbi9ncmVwIC1GIgorCisjIEEgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyLgorTk09Ii91c3IvYmluL25tIgorCisjIFdoZXRoZXIgd2UgbmVlZCBzb2Z0IG9yIGhhcmQgbGlua3MuCitMTl9TPSJsbiAtcyIKKworIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/CittYXhfY21kX2xlbj0zNDU4NzY0NTEzODIwNTQwOTI1CisKKyMgT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpLgorb2JqZXh0PW8KKworIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIikuCitleGVleHQ9CisKKyMgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgInVuc2V0Ii4KK2x0X3Vuc2V0PXVuc2V0CisKKyMgdHVybiBzcGFjZXMgaW50byBuZXdsaW5lcy4KK1NQMk5MPSJ0ciBcXDA0MCBcXDAxMiIKKworIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgorTkwyU1A9InRyIFxcMDE1XFwwMTIgXFwwNDBcXDA0MCIKKworIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJwYXNzX2FsbCIKKworIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIi4KK2ZpbGVfbWFnaWNfY21kPSJcJE1BR0lDX0NNRCIKKworIyBUaGUgYXJjaGl2ZXIuCitBUj0iL3Vzci9iaW4vYXIiCitBUl9GTEFHUz0iY3J1IgorCisjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtLgorU1RSSVA9InN0cmlwIgorCisjIENvbW1hbmRzIHVzZWQgdG8gaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KK1JBTkxJQj0icmFubGliIgorb2xkX3Bvc3RpbnN0YWxsX2NtZHM9ImNobW9kIDY0NCBcJG9sZGxpYn5cJFJBTkxJQiBcJG9sZGxpYiIKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9IiIKKworIyBXaGV0aGVyIHRvIHVzZSBhIGxvY2sgZm9yIG9sZCBhcmNoaXZlIGV4dHJhY3Rpb24uCitsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249bm8KKworIyBBIEMgY29tcGlsZXIuCitMVENDPSIvdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3IvYmluL2NjYWNoZSAvdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3IvYmluL2NjYWNoZSAvdXNyL2Jpbi9nY2MiCisKKyMgTFRDQyBjb21waWxlciBmbGFncy4KK0xUQ0ZMQUdTPSItTzIgLUkvdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC9pbmNsdWRlIC1JL3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyL2luY2x1ZGUiCisKKyMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KK2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cXChbQUJDREdJUlNUV11bQUJDREdJUlNUV10qXFwpWwkgXVsJIF0qXFwoW19BLVphLXpdW19BLVphLXowLTldKlxcKVwkL1xcMSBcXDIgXFwyL3AnIgorCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24uCitnbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXFwoLipcXClcJC9leHRlcm4gaW50IFxcMSgpOy9wJyAtZSAncy9eW0FCQ0RHSVJTVFddKiAuKiBcXCguKlxcKVwkL2V4dGVybiBjaGFyIFxcMTsvcCciCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyLgorZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFxcKFteIF0qXFwpIFwkLyAge1xcXCJcXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXltBQkNER0lSU1RXXSogXFwoW14gXSpcXCkgXFwoW14gXSpcXClcJC8gIHtcIlxcMlwiLCAodm9pZCAqKSBcXCZcXDJ9LC9wJyIKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZC4KK2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFxcKFteIF0qXFwpIFwkLyAge1xcXCJcXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXltBQkNER0lSU1RXXSogXFwoW14gXSpcXCkgXFwobGliW14gXSpcXClcJC8gIHtcIlxcMlwiLCAodm9pZCAqKSBcXCZcXDJ9LC9wJyAtZSAncy9eW0FCQ0RHSVJTVFddKiBcXChbXiBdKlxcKSBcXChbXiBdKlxcKVwkLyAge1wibGliXFwyXCIsICh2b2lkICopIFxcJlxcMn0sL3AnIgorCisjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KK29iamRpcj0ubGlicworCisjIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgd2l0aCAiZmlsZSIuCitNQUdJQ19DTUQ9ZmlsZQorCisjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworbmVlZF9sb2Nrcz0ibm8iCisKKyMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KK0RTWU1VVElMPSIiCisKKyMgVG9vbCB0byBjaGFuZ2UgZ2xvYmFsIHRvIGxvY2FsIHN5bWJvbHMgb24gTWFjIE9TIFguCitOTUVESVQ9IiIKKworIyBUb29sIHRvIG1hbmlwdWxhdGUgZmF0IG9iamVjdHMgYW5kIGFyY2hpdmVzIG9uIE1hYyBPUyBYLgorTElQTz0iIgorCisjIGxkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYLgorT1RPT0w9IiIKKworIyBsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIDY0IGJpdCBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFggMTAuNC4KK09UT09MNjQ9IiIKKworIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCitsaWJleHQ9YQorCisjIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgorc2hyZXh0X2NtZHM9Ii5zbyIKKworIyBUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgorZXh0cmFjdF9leHBzeW1zX2NtZHM9IiIKKworIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKKyMgcmVzdG9yZWQgYXQgbGluayB0aW1lLgordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggTERfTElCUkFSWV9QQVRIIExEX1JVTl9QQVRIIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKKworIyBEbyB3ZSBuZWVkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXM/CituZWVkX2xpYl9wcmVmaXg9bm8KKworIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPworbmVlZF92ZXJzaW9uPW5vCisKKyMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCit2ZXJzaW9uX3R5cGU9bGludXgKKworIyBTaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGUuCitydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorCisjIFNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCitzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorCisjIElzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD8KK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCisjIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgorbGlibmFtZV9zcGVjPSJsaWJcJG5hbWUiCisKKyMgTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KKyMgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRQorbGlicmFyeV9uYW1lc19zcGVjPSJcJHtsaWJuYW1lfVwke3JlbGVhc2V9XCR7c2hhcmVkX2V4dH1cJHZlcnN1ZmZpeCBcJHtsaWJuYW1lfVwke3JlbGVhc2V9XCR7c2hhcmVkX2V4dH1cJG1ham9yIFwkbGlibmFtZVwke3NoYXJlZF9leHR9IgorCisjIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgorc29uYW1lX3NwZWM9Ilwke2xpYm5hbWV9XCR7cmVsZWFzZX1cJHtzaGFyZWRfZXh0fVwkbWFqb3IiCisKKyMgUGVybWlzc2lvbiBtb2RlIG92ZXJyaWRlIGZvciBpbnN0YWxsYXRpb24gb2Ygc2hhcmVkIGxpYnJhcmllcy4KK2luc3RhbGxfb3ZlcnJpZGVfbW9kZT0iIgorCisjIENvbW1hbmQgdG8gdXNlIGFmdGVyIGluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlLgorcG9zdGluc3RhbGxfY21kcz0iIgorCisjIENvbW1hbmQgdG8gdXNlIGFmdGVyIHVuaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitwb3N0dW5pbnN0YWxsX2NtZHM9IiIKKworIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCitmaW5pc2hfY21kcz0iUEFUSD1cXFwiXFxcJFBBVEg6L3NiaW5cXFwiIGxkY29uZmlnIC1uIFwkbGliZGlyIgorCisjIEFzICJmaW5pc2hfY21kcyIsIGV4Y2VwdCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dAorIyBub3Qgc2hvd24uCitmaW5pc2hfZXZhbD0iIgorCisjIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCitoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisKKyMgQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzLgorc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9nY2MveDg2XzY0LWxpbnV4LWdudS80LjYgL3Vzci9saWIveDg2XzY0LWxpbnV4LWdudSAvdXNyL2xpYiAvbGliL3g4Nl82NC1saW51eC1nbnUgL2xpYiAiCisKKyMgUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMuCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xpYi94ODZfNjQtbGludXgtZ251L2Zha2VjaHJvb3QgL2xpYi9pMzg2LWxpbnV4LWdudSAvdXNyL2xpYi9pMzg2LWxpbnV4LWdudSAvbGliL2k2ODYtbGludXgtZ251IC91c3IvbGliL2k2ODYtbGludXgtZ251IC91c3IvbG9jYWwvbGliIC91c3IvbGliL252aWRpYS1zZXR0aW5ncyAvdXNyL2xpYi9vcGVuY3J5cHRva2kgL3Vzci9saWIvb3BlbmNyeXB0b2tpL3N0ZGxsIC9saWIveDg2XzY0LWxpbnV4LWdudSAvdXNyL2xpYi94ODZfNjQtbGludXgtZ251IC91c3IvbGliL252aWRpYS1jdXJyZW50IC91c3IvbGliMzIvbnZpZGlhLWN1cnJlbnQgL2xpYjMyIC91c3IvbGliMzIgIgorCisjIFdoZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zdXBwb3J0PXllcworCisjIFdoZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zZWxmPXllcworCisjIFdoZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zZWxmX3N0YXRpYz1ubworCisjIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4KK29sZF9zdHJpcGxpYj0ic3RyaXAgLS1zdHJpcC1kZWJ1ZyIKK3N0cmlwbGliPSJzdHJpcCAtLXN0cmlwLXVubmVlZGVkIgorCisKKyMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KK0xEPSIvdXNyL2Jpbi9sZCAtbSBlbGZfeDg2XzY0IgorCisjIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCityZWxvYWRfZmxhZz0iIC1yIgorcmVsb2FkX2NtZHM9IlwkTERcJHJlbG9hZF9mbGFnIC1vIFwkb3V0cHV0XCRyZWxvYWRfb2JqcyIKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgorb2xkX2FyY2hpdmVfY21kcz0iXCRBUiBcJEFSX0ZMQUdTIFwkb2xkbGliXCRvbGRvYmpzflwkUkFOTElCIFwkb2xkbGliIgorCisjIEEgbGFuZ3VhZ2Ugc3BlY2lmaWMgY29tcGlsZXIuCitDQz0iL3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyL2Jpbi9jY2FjaGUgL3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyL2Jpbi9jY2FjaGUgL3Vzci9iaW4vZ2NjIgorCisjIElzIHRoZSBjb21waWxlciB0aGUgR05VIGNvbXBpbGVyPword2l0aF9nY2M9eWVzCisKKyMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KK25vX2J1aWx0aW5fZmxhZz0iIC1mbm8tYnVpbHRpbiIKKworIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgord2w9Ii1XbCwiCisKKyMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorcGljX2ZsYWc9IiAtZlBJQyAtRFBJQyIKKworIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorbGlua19zdGF0aWNfZmxhZz0iLXN0YXRpYyIKKworIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/Citjb21waWxlcl9jX289InllcyIKKworIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9uZWVkX2xjPW5vCisKKyMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYy4KK2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz1ubworCisjIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9Ilwke3dsfS0tZXhwb3J0LWR5bmFtaWMiCisKKyMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgord2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Ilwke3dsfS0td2hvbGUtYXJjaGl2ZVwkY29udmVuaWVuY2UgXCR7d2x9LS1uby13aG9sZS1hcmNoaXZlIgorCisjIFdoZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5LgorY29tcGlsZXJfbmVlZHNfb2JqZWN0PSJubyIKKworIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0iIgorCisjIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSIiCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIHNoYXJlZCBhcmNoaXZlLgorYXJjaGl2ZV9jbWRzPSJcJENDIC1zaGFyZWQgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIFwke3dsfS1zb25hbWUgXCR3bFwkc29uYW1lIC1vIFwkbGliIgorYXJjaGl2ZV9leHBzeW1fY21kcz0iZWNobyBcXFwieyBnbG9iYWw6XFxcIiA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUudmVyfgorCSAgICBjYXQgXCRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSBcXFwicy9cXFxcKC4qXFxcXCkvXFxcXDE7L1xcXCIgPj4gXCRvdXRwdXRfb2JqZGlyL1wkbGlibmFtZS52ZXJ+CisJICAgIGVjaG8gXFxcImxvY2FsOiAqOyB9O1xcXCIgPj4gXCRvdXRwdXRfb2JqZGlyL1wkbGlibmFtZS52ZXJ+CisJICAgIFwkQ0MgLXNoYXJlZCBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgXCR7d2x9LXNvbmFtZSBcJHdsXCRzb25hbWUgXCR7d2x9LXZlcnNpb24tc2NyaXB0IFwke3dsfVwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUudmVyIC1vIFwkbGliIgorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVpbGRpbmcKKyMgYSBzaGFyZWQgYXJjaGl2ZS4KK21vZHVsZV9jbWRzPSIiCittb2R1bGVfZXhwc3ltX2NtZHM9IiIKKworIyBXaGV0aGVyIHdlIGFyZSBidWlsZGluZyB3aXRoIEdOVSBsZCBvciBub3QuCit3aXRoX2dudV9sZD0ieWVzIgorCisjIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgorYWxsb3dfdW5kZWZpbmVkX2ZsYWc9IiIKKworIyBGbGFnIHRoYXQgZW5mb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCitub191bmRlZmluZWRfZmxhZz0iIgorCisjIEZsYWcgdG8gaGFyZGNvZGUgJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorIyBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3QKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Ilwke3dsfS1ycGF0aCBcJHt3bH1cJGxpYmRpciIKKworIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSAkbGliZGlyIGludG8gYSBiaW5hcnkKKyMgZHVyaW5nIGxpbmtpbmcuICBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSIiCisKKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiIKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX2RpcmVjdD1ubworCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcworIyAiYWJzb2x1dGUiLGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nICR7c2hsaWJwYXRoX3Zhcn0gaWYgdGhlCisjIGxpYnJhcnkgaXMgcmVsb2NhdGVkLgoraGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPW5vCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX21pbnVzX0w9bm8KKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAorCisjIFNldCB0byAieWVzIiBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAorIyBhZ2FpbnN0IGl0LgoraGFyZGNvZGVfYXV0b21hdGljPW5vCisKKyMgU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKKyMgdG8gcnVudGltZSBwYXRoIGxpc3QuCitpbmhlcml0X3JwYXRoPW5vCisKKyMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorbGlua19hbGxfZGVwbGlicz11bmtub3duCisKKyMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSAkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorZml4X3NyY2ZpbGVfcGF0aD0iIgorCisjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KK2Fsd2F5c19leHBvcnRfc3ltYm9scz1ubworCisjIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCitleHBvcnRfc3ltYm9sc19jbWRzPSJcJE5NIFwkbGlib2JqcyBcJGNvbnZlbmllbmNlIHwgXCRnbG9iYWxfc3ltYm9sX3BpcGUgfCBcJFNFRCAncy8uKiAvLycgfCBzb3J0IHwgdW5pcSA+IFwkZXhwb3J0X3N5bWJvbHMiCisKKyMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KK2V4Y2x1ZGVfZXhwc3ltcz0iX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qIgorCisjIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KK2luY2x1ZGVfZXhwc3ltcz0iIgorCisjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorcHJlbGlua19jbWRzPSIiCisKKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorZmlsZV9saXN0X3NwZWM9IiIKKworIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KK2hhcmRjb2RlX2FjdGlvbj1pbW1lZGlhdGUKKworIyBUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnkuCitjb21waWxlcl9saWJfc2VhcmNoX2RpcnM9IiIKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8KKyMgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkuCitwcmVkZXBfb2JqZWN0cz0iIgorcG9zdGRlcF9vYmplY3RzPSIiCitwcmVkZXBzPSIiCitwb3N0ZGVwcz0iIgorCisjIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCisjIGEgc2hhcmVkIGxpYnJhcnkuCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGg9IiIKKworIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHCisKKyMgR2VuZXJhdGVkIGZyb20gbHRtYWluLm00c2guCisKKyMgbGlidG9vbCAoR05VIGxpYnRvb2wpIDIuMi4xMAorIyBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwKKyMgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KKyMgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKyMgR05VIExpYnRvb2wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgaWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAorIyBpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKKyMgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjCisjIEdOVSBMaWJ0b29sIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCBHTlUgTGlidG9vbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIGEgY29weQorIyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbCwKKyMgb3Igb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworIyBVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIFtNT0RFLUFSR10uLi4KKyMKKyMgUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjCisjICAgICAgIC0tY29uZmlnICAgICAgICAgICAgIHNob3cgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisjICAgICAgIC0tZGVidWcgICAgICAgICAgICAgIGVuYWJsZSB2ZXJib3NlIHNoZWxsIHRyYWNpbmcKKyMgICAtbiwgLS1kcnktcnVuICAgICAgICAgICAgZGlzcGxheSBjb21tYW5kcyB3aXRob3V0IG1vZGlmeWluZyBhbnkgZmlsZXMKKyMgICAgICAgLS1mZWF0dXJlcyAgICAgICAgICAgZGlzcGxheSBiYXNpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisjICAgICAgIC0tbW9kZT1NT0RFICAgICAgICAgIHVzZSBvcGVyYXRpb24gbW9kZSBNT0RFCisjICAgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMgIGRvbid0IHJlbW92ZSBkdXBsaWNhdGUgZGVwZW5kZW5jeSBsaWJyYXJpZXMKKyMgICAgICAgLS1xdWlldCwgLS1zaWxlbnQgICAgZG9uJ3QgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcworIyAgICAgICAtLW5vLXF1aWV0LCAtLW5vLXNpbGVudAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIChkZWZhdWx0KQorIyAgICAgICAtLXRhZz1UQUcgICAgICAgICAgICB1c2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZnJvbSB0YWcgVEFHCisjICAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgIHByaW50IG1vcmUgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyB0aGFuIGRlZmF1bHQKKyMgICAgICAgLS1uby12ZXJib3NlICAgICAgICAgZG9uJ3QgcHJpbnQgdGhlIGV4dHJhIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMKKyMgICAgICAgLS12ZXJzaW9uICAgICAgICAgICAgcHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbgorIyAgIC1oLCAtLWhlbHAsIC0taGVscC1hbGwgICBwcmludCBzaG9ydCwgbG9uZywgb3IgZGV0YWlsZWQgaGVscCBtZXNzYWdlCisjCisjIE1PREUgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgICAgICBjbGVhbiAgICAgICAgICAgICAgcmVtb3ZlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeQorIyAgICAgICAgIGNvbXBpbGUgICAgICAgICAgICBjb21waWxlIGEgc291cmNlIGZpbGUgaW50byBhIGxpYnRvb2wgb2JqZWN0CisjICAgICAgICAgZXhlY3V0ZSAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgc2V0IGxpYnJhcnkgcGF0aCwgdGhlbiBydW4gYSBwcm9ncmFtCisjICAgICAgICAgZmluaXNoICAgICAgICAgICAgIGNvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMKKyMgICAgICAgICBpbnN0YWxsICAgICAgICAgICAgaW5zdGFsbCBsaWJyYXJpZXMgb3IgZXhlY3V0YWJsZXMKKyMgICAgICAgICBsaW5rICAgICAgICAgICAgICAgY3JlYXRlIGEgbGlicmFyeSBvciBhbiBleGVjdXRhYmxlCisjICAgICAgICAgdW5pbnN0YWxsICAgICAgICAgIHJlbW92ZSBsaWJyYXJpZXMgZnJvbSBhbiBpbnN0YWxsZWQgZGlyZWN0b3J5CisjCisjIE1PREUtQVJHUyB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgTU9ERS4gIFdoZW4gcGFzc2VkIGFzIGZpcnN0IG9wdGlvbiwKKyMgYC0tbW9kZT1NT0RFJyBtYXkgYmUgYWJicmV2aWF0ZWQgYXMgYE1PREUnIG9yIGEgdW5pcXVlIGFiYnJldmlhdGlvbiBvZiB0aGF0LgorIyBUcnkgYCRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPU1PREUnIGZvciBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgTU9ERS4KKyMKKyMgV2hlbiByZXBvcnRpbmcgYSBidWcsIHBsZWFzZSBkZXNjcmliZSBhIHRlc3QgY2FzZSB0byByZXByb2R1Y2UgaXQgYW5kCisjIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjoKKyMKKyMgICAgICAgICBob3N0LXRyaXBsZXQ6CSRob3N0CisjICAgICAgICAgc2hlbGw6CQkkU0hFTEwKKyMgICAgICAgICBjb21waWxlcjoJCSRMVENDCisjICAgICAgICAgY29tcGlsZXIgZmxhZ3M6CQkkTFRDRkxBR1MKKyMgICAgICAgICBsaW5rZXI6CQkkTEQgKGdudT8gJHdpdGhfZ251X2xkKQorIyAgICAgICAgICRwcm9nbmFtZToJKEdOVSBsaWJ0b29sKSAyLjIuMTAKKyMgICAgICAgICBhdXRvbWFrZToJJGF1dG9tYWtlX3ZlcnNpb24KKyMgICAgICAgICBhdXRvY29uZjoJJGF1dG9jb25mX3ZlcnNpb24KKyMKKyMgUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LgorCitQUk9HUkFNPWxpYnRvb2wKK1BBQ0tBR0U9bGlidG9vbAorVkVSU0lPTj0yLjIuMTAKK1RJTUVTVEFNUD0iIgorcGFja2FnZV9yZXZpc2lvbj0xLjMxNzUKKworIyBCZSBCb3VybmUgY29tcGF0aWJsZQoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAqcG9zaXgqKSBzZXQgLW8gcG9zaXg7OyBlc2FjCitmaQorQklOX1NIPXhwZzQ7IGV4cG9ydCBCSU5fU0ggIyBmb3IgVHJ1NjQKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKKworIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgorZnVuY19mYWxsYmFja19lY2hvICgpCit7CisgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCiskMQorX0xURUNIT19FT0YnCit9CisKKyMgTkxTIG51aXNhbmNlczogV2Ugc2F2ZSB0aGUgb2xkIHZhbHVlcyB0byByZXN0b3JlIGR1cmluZyBleGVjdXRlIG1vZGUuCitsdF91c2VyX2xvY2FsZT0KK2x0X3NhZmVfbG9jYWxlPQorZm9yIGx0X3ZhciBpbiBMQU5HIExBTkdVQUdFIExDX0FMTCBMQ19DVFlQRSBMQ19DT0xMQVRFIExDX01FU1NBR0VTCitkbworICBldmFsICJpZiB0ZXN0IFwiXCR7JGx0X3ZhcitzZXR9XCIgPSBzZXQ7IHRoZW4KKyAgICAgICAgICBzYXZlXyRsdF92YXI9XCQkbHRfdmFyCisgICAgICAgICAgJGx0X3Zhcj1DCisJICBleHBvcnQgJGx0X3ZhcgorCSAgbHRfdXNlcl9sb2NhbGU9XCIkbHRfdmFyPVxcXCRzYXZlX1wkbHRfdmFyOyBcJGx0X3VzZXJfbG9jYWxlXCIKKwkgIGx0X3NhZmVfbG9jYWxlPVwiJGx0X3Zhcj1DOyBcJGx0X3NhZmVfbG9jYWxlXCIKKwlmaSIKK2RvbmUKK0xDX0FMTD1DCitMQU5HVUFHRT1DCitleHBvcnQgTEFOR1VBR0UgTENfQUxMCisKKyRsdF91bnNldCBDRFBBVEgKKworCisjIFdvcmsgYXJvdW5kIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaXNzdWUgb24gSVJJWCA2LjUuIE9uIElSSVggNi40Kywgc2gKKyMgaXMga3NoIGJ1dCB3aGVuIHRoZSBzaGVsbCBpcyBpbnZva2VkIGFzICJzaCIgYW5kIHRoZSBjdXJyZW50IHZhbHVlIG9mCisjIHRoZSBfWFBHIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBlcXVhbCB0byAxIChvbmUpLCB0aGUgc3BlY2lhbAorIyBwb3NpdGlvbmFsIHBhcmFtZXRlciAkMCwgd2l0aGluIGEgZnVuY3Rpb24gY2FsbCwgaXMgdGhlIG5hbWUgb2YgdGhlCisjIGZ1bmN0aW9uLgorcHJvZ3BhdGg9IiQwIgorCisKKworOiAke0NQPSJjcCAtZiJ9Cit0ZXN0ICIke0VDSE8rc2V0fSIgPSBzZXQgfHwgRUNITz0ke2FzX2VjaG8tJ3ByaW50ZiAlc1xuJ30KKzogJHtFR1JFUD0iZ3JlcCAtRSJ9Cis6ICR7RkdSRVA9ImdyZXAgLUYifQorOiAke0dSRVA9ImdyZXAifQorOiAke0xOX1M9ImxuIC1zIn0KKzogJHtNQUtFPSJtYWtlIn0KKzogJHtNS0RJUj0ibWtkaXIifQorOiAke01WPSJtdiAtZiJ9Cis6ICR7Uk09InJtIC1mIn0KKzogJHtTRUQ9InNlZCJ9Cis6ICR7U0hFTEw9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9In0KKzogJHtYc2VkPSIkU0VEIC1lIDFzL15YLy8ifQorCisjIEdsb2JhbCB2YXJpYWJsZXM6CitFWElUX1NVQ0NFU1M9MAorRVhJVF9GQUlMVVJFPTEKK0VYSVRfTUlTTUFUQ0g9NjMgICMgJD8gPSA2MyBpcyB1c2VkIHRvIGluZGljYXRlIHZlcnNpb24gbWlzbWF0Y2ggdG8gbWlzc2luZy4KK0VYSVRfU0tJUD03NwkgICMgJD8gPSA3NyBpcyB1c2VkIHRvIGluZGljYXRlIGEgc2tpcHBlZCB0ZXN0IHRvIGF1dG9tYWtlLgorCitleGl0X3N0YXR1cz0kRVhJVF9TVUNDRVNTCisKKyMgTWFrZSBzdXJlIElGUyBoYXMgYSBzZW5zaWJsZSBkZWZhdWx0CitsdF9ubD0nCisnCitJRlM9IiAJJGx0X25sIgorCitkaXJuYW1lPSJzLC9bXi9dKiQsLCIKK2Jhc2VuYW1lPSJzLF4uKi8sLCIKKworIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorIyBjYWxsOgorIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKyMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisjIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKyMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKyMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQoreworICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEIC1lICIkZGlybmFtZSJgCisgIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCisgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKyAgZWxzZQorICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKyAgZmkKKyAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgLWUgIiRiYXNlbmFtZSJgCit9CisKKyMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLgorCisjIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKyMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKyMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorZnVuY19kaXJuYW1lICgpCit7CisgIGNhc2UgJHsxfSBpbgorICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CisgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworICBlc2FjCit9CisKKyMgZnVuY19iYXNlbmFtZSBmaWxlCitmdW5jX2Jhc2VuYW1lICgpCit7CisgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKK30KKworIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorIyBjYWxsOgorIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKyMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisjIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKyMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKyMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQoreworICBjYXNlICR7MX0gaW4KKyAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKyAgZXNhYworICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCit9CisKKyMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCisjIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorZnVuY19zdHJpcG5hbWUgKCkKK3sKKyAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCisgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CisgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CisgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9Cit9CisKKyMgZnVuY19vcHRfc3BsaXQKK2Z1bmNfb3B0X3NwbGl0ICgpCit7CisgIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQorfQorCisjIGZ1bmNfbG8ybyBvYmplY3QKK2Z1bmNfbG8ybyAoKQoreworICBjYXNlICR7MX0gaW4KKyAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworICBlc2FjCit9CisKKyMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCitmdW5jX3hmb3JtICgpCit7CisgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KK30KKworIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorZnVuY19hcml0aCAoKQoreworICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSkKK30KKworIyBmdW5jX2xlbiBzdHJpbmcKKyMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KK2Z1bmNfbGVuICgpCit7CisgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorfQorCisKKyMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCisjIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KK2Z1bmNfYXBwZW5kICgpCit7CisgIGV2YWwgIiQxKz1cJDIiCit9CisjIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS4KKworIyBUaGVzZSBTRUQgc2NyaXB0cyBwcmVzdXBwb3NlIGFuIGFic29sdXRlIHBhdGggd2l0aCBhIHRyYWlsaW5nIHNsYXNoLgorcGF0aGNhcj0ncyxeL1woW14vXSpcKS4qJCxcMSwnCitwYXRoY2RyPSdzLF4vW14vXSosLCcKK3JlbW92ZWRvdHBhcnRzPSc6ZG90c2wKKwkJc0AvXC4vQC9AZworCQl0IGRvdHNsCisJCXMsL1wuJCwvLCcKK2NvbGxhcHNlc2xhc2hlcz0nc0AvXHsxLFx9QC9AZycKK2ZpbmFsc2xhc2g9J3MsLyokLC8sJworCisjIGZ1bmNfbm9ybWFsX2Fic3BhdGggUEFUSAorIyBSZW1vdmUgZG91YmxlZC11cCBhbmQgdHJhaWxpbmcgc2xhc2hlcywgIi4iIHBhdGggY29tcG9uZW50cywKKyMgYW5kIGNhbmNlbCBvdXQgYW55ICIuLiIgcGF0aCBjb21wb25lbnRzIGluIFBBVEggYWZ0ZXIgbWFraW5nCisjIGl0IGFuIGFic29sdXRlIHBhdGguCisjICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQiCitmdW5jX25vcm1hbF9hYnNwYXRoICgpCit7CisgICMgU3RhcnQgZnJvbSByb290IGRpciBhbmQgcmVhc3NlbWJsZSB0aGUgcGF0aC4KKyAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9CisgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9JDEKKyAgZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2U9CisgIGNhc2UgJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGggaW4KKyAgICAiIikKKyAgICAgICMgRW1wdHkgcGF0aCwgdGhhdCBqdXN0IG1lYW5zICRjd2QuCisgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgImBwd2RgIgorICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgICAgcmV0dXJuCisgICAgOzsKKyAgICAjIFRoZSBuZXh0IHRocmVlIGVudHJpZXMgYXJlIHVzZWQgdG8gc3BvdCBhIHJ1biBvZiBwcmVjaXNlbHkKKyAgICAjIHR3byBsZWFkaW5nIHNsYXNoZXMgd2l0aG91dCB1c2luZyBuZWdhdGVkIGNoYXJhY3RlciBjbGFzc2VzOworICAgICMgd2UgdGFrZSBhZHZhbnRhZ2Ugb2YgY2FzZSdzIGZpcnN0LW1hdGNoIGJlaGF2aW91ci4KKyAgICAvLy8qKQorICAgICAgIyBVbnVzdWFsIGZvcm0gb2YgYWJzb2x1dGUgcGF0aCwgZG8gbm90aGluZy4KKyAgICA7OworICAgIC8vKikKKyAgICAgICMgTm90IG5lY2Vzc2FyaWx5IGFuIG9yZGluYXJ5IHBhdGg7IFBPU0lYIHJlc2VydmVzIGxlYWRpbmcgJy8vJworICAgICAgIyBhbmQgZm9yIGV4YW1wbGUgQ3lnd2luIHVzZXMgaXQgdG8gYWNjZXNzIHJlbW90ZSBmaWxlIHNoYXJlcworICAgICAgIyBvdmVyIENJRlMvU01CLCBzbyB3ZSBjb25zZXJ2ZSBhIGxlYWRpbmcgZG91YmxlIHNsYXNoIGlmIGZvdW5kLgorICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2U9LworICAgIDs7CisgICAgLyopCisgICAgICAjIEFic29sdXRlIHBhdGgsIGRvIG5vdGhpbmcuCisgICAgOzsKKyAgICAqKQorICAgICAgIyBSZWxhdGl2ZSBwYXRoLCBwcmVwZW5kICRjd2QuCisgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWBwd2RgLyRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoCisgICAgOzsKKyAgZXNhYworICAjIENhbmNlbCBvdXQgYWxsIHRoZSBzaW1wbGUgc3R1ZmYgdG8gc2F2ZSBpdGVyYXRpb25zLiAgV2UgYWxzbyB3YW50CisgICMgdGhlIHBhdGggdG8gZW5kIHdpdGggYSBzbGFzaCBmb3IgZWFzZSBvZiBwYXJzaW5nLCBzbyBtYWtlIHN1cmUKKyAgIyB0aGVyZSBpcyBvbmUgKGFuZCBvbmx5IG9uZSkgaGVyZS4KKyAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gJEVDSE8gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiB8ICRTRUQgXAorICAgICAgICAtZSAiJHJlbW92ZWRvdHBhcnRzIiAtZSAiJGNvbGxhcHNlc2xhc2hlcyIgLWUgIiRmaW5hbHNsYXNoImAKKyAgd2hpbGUgOjsgZG8KKyAgICAjIFByb2Nlc3NlZCBpdCBhbGwgeWV0PworICAgIGlmIHRlc3QgIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiA9IC8gOyB0aGVuCisgICAgICAjIElmIHdlIGFzY2VuZGVkIHRvIHRoZSByb290IHVzaW5nICIuLiIgdGhlIHJlc3VsdCBtYXkgYmUgZW1wdHkgbm93LgorICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0IiA7IHRoZW4KKyAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9LworICAgICAgZmkKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Rjb21wb25lbnQ9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKKyAgICAgICAgLWUgIiRwYXRoY2FyImAKKyAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCisgICAgICAgIC1lICIkcGF0aGNkciJgCisgICAgIyBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCBpdAorICAgIGNhc2UgJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdGNvbXBvbmVudCBpbgorICAgICAgIiIpCisgICAgICAgICMgVHJhaWxpbmcgZW1wdHkgcGF0aCBjb21wb25lbnQsIGlnbm9yZSBpdC4KKyAgICAgIDs7CisgICAgICAuLikKKyAgICAgICAgIyBQYXJlbnQgZGlyOyBzdHJpcCBsYXN0IGFzc2VtYmxlZCBjb21wb25lbnQgZnJvbSByZXN1bHQuCisgICAgICAgIGZ1bmNfZGlybmFtZSAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0IgorICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19kaXJuYW1lX3Jlc3VsdAorICAgICAgOzsKKyAgICAgICopCisgICAgICAgICMgQWN0dWFsIHBhdGggY29tcG9uZW50LCBhcHBlbmQgaXQuCisgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdC8kZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50CisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorICAjIFJlc3RvcmUgbGVhZGluZyBkb3VibGUtc2xhc2ggaWYgb25lIHdhcyBmb3VuZCBvbiBlbnRyeS4KKyAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0Cit9CisKKyMgZnVuY19yZWxhdGl2ZV9wYXRoIFNSQ0RJUiBEU1RESVIKKyMgZ2VuZXJhdGVzIGEgcmVsYXRpdmUgcGF0aCBmcm9tIFNSQ0RJUiB0byBEU1RESVIsIHdpdGggYSB0cmFpbGluZworIyBzbGFzaCBpZiBub24tZW1wdHksIHN1aXRhYmxlIGZvciBpbW1lZGlhdGVseSBhcHBlbmRpbmcgYSBmaWxlbmFtZQorIyB3aXRob3V0IG5lZWRpbmcgdG8gYXBwZW5kIGEgc2VwYXJhdG9yLgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiCitmdW5jX3JlbGF0aXZlX3BhdGggKCkKK3sKKyAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0KKyAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJDEiCisgIGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorICBmdW5jX25vcm1hbF9hYnNwYXRoICIkMiIKKyAgZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXI9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisKKyAgIyBBc2NlbmQgdGhlIHRyZWUgc3RhcnRpbmcgZnJvbSBsaWJkaXIKKyAgd2hpbGUgOjsgZG8KKyAgICAjIGNoZWNrIGlmIHdlIGhhdmUgZm91bmQgYSBwcmVmaXggb2YgYmluZGlyCisgICAgY2FzZSAkZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXIgaW4KKyAgICAgICRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcikKKyAgICAgICAgIyBmb3VuZCBhbiBleGFjdCBtYXRjaAorICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZD0KKyAgICAgICAgYnJlYWsKKyAgICAgICAgOzsKKyAgICAgICRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciopCisgICAgICAgICMgZm91bmQgYSBtYXRjaGluZyBwcmVmaXgKKyAgICAgICAgZnVuY19zdHJpcG5hbWUgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciIgJycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpciIKKyAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCI7IHRoZW4KKyAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4KKyAgICAgICAgZmkKKyAgICAgICAgYnJlYWsKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfZGlybmFtZSAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIKKyAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXI9JHtmdW5jX2Rpcm5hbWVfcmVzdWx0fQorICAgICAgICBpZiB0ZXN0ICJ4JGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyIiA9IHggOyB0aGVuCisgICAgICAgICAgIyBIYXZlIHRvIGRlc2NlbmQgYWxsIHRoZSB3YXkgdG8gdGhlIHJvb3QhCisgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uLi8kZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdAorICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPSRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpcgorICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9Li4vJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAjIE5vdyBjYWxjdWxhdGUgcGF0aDsgdGFrZSBjYXJlIHRvIGF2b2lkIGRvdWJsaW5nLXVwIHNsYXNoZXMuCisgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiCisgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICBmdW5jX3N0cmlwbmFtZSAnLycgJy8nICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQiCisgIGlmIHRlc3QgIngkZnVuY19zdHJpcG5hbWVfcmVzdWx0IiAhPSB4IDsgdGhlbgorICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JHtmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0fS8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH0KKyAgZmkKKworICAjIE5vcm1hbGlzYXRpb24uIElmIGJpbmRpciBpcyBsaWJkaXIsIHJldHVybiBlbXB0eSBzdHJpbmcsCisgICMgZWxzZSByZWxhdGl2ZSBwYXRoIGVuZGluZyB3aXRoIGEgc2xhc2g7IGVpdGhlciB3YXksIHRhcmdldAorICAjIGZpbGUgbmFtZSBjYW4gYmUgZGlyZWN0bHkgYXBwZW5kZWQuCisgIGlmIHRlc3QgISAteiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiOyB0aGVuCisgICAgZnVuY19zdHJpcG5hbWUgJy4vJyAnJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQvIgorICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICBmaQorfQorCisjIFRoZSBuYW1lIG9mIHRoaXMgcHJvZ3JhbToKK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRwcm9ncGF0aCIKK3Byb2duYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCisjIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGFic29sdXRlIHBhdGggZm9yIHJlZXhlY3V0aW9uOgorY2FzZSAkcHJvZ3BhdGggaW4KKyAgW1xcL10qfFtBLVphLXpdOlxcKikgOzsKKyAgKltcXC9dKikKKyAgICAgcHJvZ2Rpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorICAgICBwcm9nZGlyPWBjZCAiJHByb2dkaXIiICYmIHB3ZGAKKyAgICAgcHJvZ3BhdGg9IiRwcm9nZGlyLyRwcm9nbmFtZSIKKyAgICAgOzsKKyAgKikKKyAgICAgc2F2ZV9JRlM9IiRJRlMiCisgICAgIElGUz06CisgICAgIGZvciBwcm9nZGlyIGluICRQQVRIOyBkbworICAgICAgIElGUz0iJHNhdmVfSUZTIgorICAgICAgIHRlc3QgLXggIiRwcm9nZGlyLyRwcm9nbmFtZSIgJiYgYnJlYWsKKyAgICAgZG9uZQorICAgICBJRlM9IiRzYXZlX0lGUyIKKyAgICAgdGVzdCAtbiAiJHByb2dkaXIiIHx8IHByb2dkaXI9YHB3ZGAKKyAgICAgcHJvZ3BhdGg9IiRwcm9nZGlyLyRwcm9nbmFtZSIKKyAgICAgOzsKK2VzYWMKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcworIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK1hzZWQ9IiR7U0VEfSInIC1lIDFzL15YLy8nCitzZWRfcXVvdGVfc3Vic3Q9J3MvXChbYCIkXFxdXCkvXFxcMS9nJworCisjIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2RvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFsiYFxcXVwpL1xcXDEvZycKKworIyBSZS1gXCcgcGFyYW1ldGVyIGV4cGFuc2lvbnMgaW4gb3V0cHV0IG9mIGRvdWJsZV9xdW90ZV9zdWJzdCB0aGF0IHdlcmUKKyMgYFwnLWVkIGluIGlucHV0IHRvIHRoZSBzYW1lLiAgSWYgYW4gb2RkIG51bWJlciBvZiBgXCcgcHJlY2VkZWQgYSAnJCcKKyMgaW4gaW5wdXQgdG8gZG91YmxlX3F1b3RlX3N1YnN0LCB0aGF0ICckJyB3YXMgcHJvdGVjdGVkIGZyb20gZXhwYW5zaW9uLgorIyBTaW5jZSBlYWNoIGlucHV0IGBcJyBpcyBub3cgdHdvIGBcJ3MsIGxvb2sgZm9yIGFueSBudW1iZXIgb2YgcnVucyBvZgorIyBmb3VyIGBcJ3MgZm9sbG93ZWQgYnkgdHdvIGBcJ3MgYW5kIHRoZW4gYSAnJCcuICBgXCcgdGhhdCAnJCcuCiticz0nXFwnCiticzI9J1xcXFwnCiticzQ9J1xcXFxcXFxcJworZG9sbGFyPSdcJCcKK3NlZF9kb3VibGVfYmFja3NsYXNoPSJcCisgIHMvJGJzNC8mXFwKKy9nCisgIHMvXiRiczIkZG9sbGFyLyRicyYvCisgIHMvXFwoW14kYnNdXFwpJGJzMiRkb2xsYXIvXFwxJGJzMiRicyRkb2xsYXIvZworICBzL1xuLy9nIgorCisjIFN0YW5kYXJkIG9wdGlvbnM6CitvcHRfZHJ5X3J1bj1mYWxzZQorb3B0X2hlbHA9ZmFsc2UKK29wdF9xdWlldD1mYWxzZQorb3B0X3ZlcmJvc2U9ZmFsc2UKK29wdF93YXJuaW5nPToKKworIyBmdW5jX2VjaG8gYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UsIGFsb25nIHdpdGggdGhlIGN1cnJlbnQgbW9kZQorIyBuYW1lIGlmIGl0IGhhcyBiZWVuIHNldCB5ZXQuCitmdW5jX2VjaG8gKCkKK3sKKyAgICAkRUNITyAiJHByb2duYW1lJHttb2RlKzogfSRtb2RlOiAkKiIKK30KKworIyBmdW5jX3ZlcmJvc2UgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgaW4gdmVyYm9zZSBtb2RlIG9ubHkuCitmdW5jX3ZlcmJvc2UgKCkKK3sKKyAgICAkb3B0X3ZlcmJvc2UgJiYgZnVuY19lY2hvICR7MSsiJEAifQorCisgICAgIyBBIGJ1ZyBpbiBiYXNoIGhhbHRzIHRoZSBzY3JpcHQgaWYgdGhlIGxhc3QgbGluZSBvZiBhIGZ1bmN0aW9uCisgICAgIyBmYWlscyB3aGVuIHNldCAtZSBpcyBpbiBmb3JjZSwgc28gd2UgbmVlZCBhbm90aGVyIGNvbW1hbmQgdG8KKyAgICAjIHdvcmsgYXJvdW5kIHRoYXQ6CisgICAgOgorfQorCisjIGZ1bmNfZWNob19hbGwgYXJnLi4uCisjIEludm9rZSAkRUNITyB3aXRoIGFsbCBhcmdzLCBzcGFjZS1zZXBhcmF0ZWQuCitmdW5jX2VjaG9fYWxsICgpCit7CisgICAgJEVDSE8gIiQqIgorfQorCisjIGZ1bmNfZXJyb3IgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCitmdW5jX2Vycm9yICgpCit7CisgICAgJEVDSE8gIiRwcm9nbmFtZSR7bW9kZSs6IH0kbW9kZTogIiR7MSsiJEAifSAxPiYyCit9CisKKyMgZnVuY193YXJuaW5nIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCB3YXJuaW5nIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCitmdW5jX3dhcm5pbmcgKCkKK3sKKyAgICAkb3B0X3dhcm5pbmcgJiYgJEVDSE8gIiRwcm9nbmFtZSR7bW9kZSs6IH0kbW9kZTogd2FybmluZzogIiR7MSsiJEAifSAxPiYyCisKKyAgICAjIGJhc2ggYnVnIGFnYWluOgorICAgIDoKK30KKworIyBmdW5jX2ZhdGFsX2Vycm9yIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBhbmQgZXhpdC4KK2Z1bmNfZmF0YWxfZXJyb3IgKCkKK3sKKyAgICBmdW5jX2Vycm9yICR7MSsiJEAifQorICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorfQorCisjIGZ1bmNfZmF0YWxfaGVscCBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgZm9sbG93ZWQgYnkKKyMgYSBoZWxwIGhpbnQsIGFuZCBleGl0LgorZnVuY19mYXRhbF9oZWxwICgpCit7CisgICAgZnVuY19lcnJvciAkezErIiRAIn0KKyAgICBmdW5jX2ZhdGFsX2Vycm9yICIkaGVscCIKK30KK2hlbHA9IlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgICMjIGRlZmF1bHQKKworCisjIGZ1bmNfZ3JlcCBleHByZXNzaW9uIGZpbGVuYW1lCisjIENoZWNrIHdoZXRoZXIgRVhQUkVTU0lPTiBtYXRjaGVzIGFueSBsaW5lIG9mIEZJTEVOQU1FLCB3aXRob3V0IG91dHB1dC4KK2Z1bmNfZ3JlcCAoKQoreworICAgICRHUkVQICIkMSIgIiQyIiA+L2Rldi9udWxsIDI+JjEKK30KKworCisjIGZ1bmNfbWtkaXJfcCBkaXJlY3RvcnktcGF0aAorIyBNYWtlIHN1cmUgdGhlIGVudGlyZSBwYXRoIHRvIERJUkVDVE9SWS1QQVRIIGlzIGF2YWlsYWJsZS4KK2Z1bmNfbWtkaXJfcCAoKQoreworICAgIG15X2RpcmVjdG9yeV9wYXRoPSIkMSIKKyAgICBteV9kaXJfbGlzdD0KKworICAgIGlmIHRlc3QgLW4gIiRteV9kaXJlY3RvcnlfcGF0aCIgJiYgdGVzdCAiJG9wdF9kcnlfcnVuIiAhPSAiOiI7IHRoZW4KKworICAgICAgIyBQcm90ZWN0IGRpcmVjdG9yeSBuYW1lcyBzdGFydGluZyB3aXRoIGAtJworICAgICAgY2FzZSAkbXlfZGlyZWN0b3J5X3BhdGggaW4KKyAgICAgICAgLSopIG15X2RpcmVjdG9yeV9wYXRoPSIuLyRteV9kaXJlY3RvcnlfcGF0aCIgOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBXaGlsZSBzb21lIHBvcnRpb24gb2YgRElSIGRvZXMgbm90IHlldCBleGlzdC4uLgorICAgICAgd2hpbGUgdGVzdCAhIC1kICIkbXlfZGlyZWN0b3J5X3BhdGgiOyBkbworICAgICAgICAjIC4uLm1ha2UgYSBsaXN0IGluIHRvcG1vc3QgZmlyc3Qgb3JkZXIuICBVc2UgYSBjb2xvbiBkZWxpbWl0ZWQKKwkjIGxpc3QgaW5jYXNlIHNvbWUgcG9ydGlvbiBvZiBwYXRoIGNvbnRhaW5zIHdoaXRlc3BhY2UuCisgICAgICAgIG15X2Rpcl9saXN0PSIkbXlfZGlyZWN0b3J5X3BhdGg6JG15X2Rpcl9saXN0IgorCisgICAgICAgICMgSWYgdGhlIGxhc3QgcG9ydGlvbiBhZGRlZCBoYXMgbm8gc2xhc2ggaW4gaXQsIHRoZSBsaXN0IGlzIGRvbmUKKyAgICAgICAgY2FzZSAkbXlfZGlyZWN0b3J5X3BhdGggaW4gKi8qKSA7OyAqKSBicmVhayA7OyBlc2FjCisKKyAgICAgICAgIyAuLi5vdGhlcndpc2UgdGhyb3cgYXdheSB0aGUgY2hpbGQgZGlyZWN0b3J5IGFuZCBsb29wCisgICAgICAgIG15X2RpcmVjdG9yeV9wYXRoPWAkRUNITyAiJG15X2RpcmVjdG9yeV9wYXRoIiB8ICRTRUQgLWUgIiRkaXJuYW1lImAKKyAgICAgIGRvbmUKKyAgICAgIG15X2Rpcl9saXN0PWAkRUNITyAiJG15X2Rpcl9saXN0IiB8ICRTRUQgJ3MsOiokLCwnYAorCisgICAgICBzYXZlX21rZGlyX3BfSUZTPSIkSUZTIjsgSUZTPSc6JworICAgICAgZm9yIG15X2RpciBpbiAkbXlfZGlyX2xpc3Q7IGRvCisJSUZTPSIkc2F2ZV9ta2Rpcl9wX0lGUyIKKyAgICAgICAgIyBta2RpciBjYW4gZmFpbCB3aXRoIGEgYEZpbGUgZXhpc3QnIGVycm9yIGlmIHR3byBwcm9jZXNzZXMKKyAgICAgICAgIyB0cnkgdG8gY3JlYXRlIG9uZSBvZiB0aGUgZGlyZWN0b3JpZXMgY29uY3VycmVudGx5LiAgRG9uJ3QKKyAgICAgICAgIyBzdG9wIGluIHRoYXQgY2FzZSEKKyAgICAgICAgJE1LRElSICIkbXlfZGlyIiAyPi9kZXYvbnVsbCB8fCA6CisgICAgICBkb25lCisgICAgICBJRlM9IiRzYXZlX21rZGlyX3BfSUZTIgorCisgICAgICAjIEJhaWwgb3V0IGlmIHdlIChvciBzb21lIG90aGVyIHByb2Nlc3MpIGZhaWxlZCB0byBjcmVhdGUgYSBkaXJlY3RvcnkuCisgICAgICB0ZXN0IC1kICIkbXlfZGlyZWN0b3J5X3BhdGgiIHx8IFwKKyAgICAgICAgZnVuY19mYXRhbF9lcnJvciAiRmFpbGVkIHRvIGNyZWF0ZSBcYCQxJyIKKyAgICBmaQorfQorCisKKyMgZnVuY19ta3RlbXBkaXIgW3N0cmluZ10KKyMgTWFrZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhhdCB3b24ndCBjbGFzaCB3aXRoIG90aGVyIHJ1bm5pbmcKKyMgbGlidG9vbCBwcm9jZXNzZXMsIGFuZCBhdm9pZHMgcmFjZSBjb25kaXRpb25zIGlmIHBvc3NpYmxlLiAgSWYKKyMgZ2l2ZW4sIFNUUklORyBpcyB0aGUgYmFzZW5hbWUgZm9yIHRoYXQgZGlyZWN0b3J5LgorZnVuY19ta3RlbXBkaXIgKCkKK3sKKyAgICBteV90ZW1wbGF0ZT0iJHtUTVBESVItL3RtcH0vJHsxLSRwcm9nbmFtZX0iCisKKyAgICBpZiB0ZXN0ICIkb3B0X2RyeV9ydW4iID0gIjoiOyB0aGVuCisgICAgICAjIFJldHVybiBhIGRpcmVjdG9yeSBuYW1lLCBidXQgZG9uJ3QgY3JlYXRlIGl0IGluIGRyeS1ydW4gbW9kZQorICAgICAgbXlfdG1wZGlyPSIke215X3RlbXBsYXRlfS0kJCIKKyAgICBlbHNlCisKKyAgICAgICMgSWYgbWt0ZW1wIHdvcmtzLCB1c2UgdGhhdCBmaXJzdCBhbmQgZm9yZW1vc3QKKyAgICAgIG15X3RtcGRpcj1gbWt0ZW1wIC1kICIke215X3RlbXBsYXRlfS1YWFhYWFhYWCIgMj4vZGV2L251bGxgCisKKyAgICAgIGlmIHRlc3QgISAtZCAiJG15X3RtcGRpciI7IHRoZW4KKyAgICAgICAgIyBGYWlsaW5nIHRoYXQsIGF0IGxlYXN0IHRyeSBhbmQgdXNlICRSQU5ET00gdG8gYXZvaWQgYSByYWNlCisgICAgICAgIG15X3RtcGRpcj0iJHtteV90ZW1wbGF0ZX0tJHtSQU5ET00tMH0kJCIKKworICAgICAgICBzYXZlX21rdGVtcGRpcl91bWFzaz1gdW1hc2tgCisgICAgICAgIHVtYXNrIDAwNzcKKyAgICAgICAgJE1LRElSICIkbXlfdG1wZGlyIgorICAgICAgICB1bWFzayAkc2F2ZV9ta3RlbXBkaXJfdW1hc2sKKyAgICAgIGZpCisKKyAgICAgICMgSWYgd2UncmUgbm90IGluIGRyeS1ydW4gbW9kZSwgYm9tYiBvdXQgb24gZmFpbHVyZQorICAgICAgdGVzdCAtZCAiJG15X3RtcGRpciIgfHwgXAorICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgY3JlYXRlIHRlbXBvcmFyeSBkaXJlY3RvcnkgXGAkbXlfdG1wZGlyJyIKKyAgICBmaQorCisgICAgJEVDSE8gIiRteV90bXBkaXIiCit9CisKKworIyBmdW5jX3F1b3RlX2Zvcl9ldmFsIGFyZworIyBBZXN0aGV0aWNhbGx5IHF1b3RlIEFSRyB0byBiZSBldmFsZWQgbGF0ZXIuCisjIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0d28gdmFsdWVzOiBGVU5DX1FVT1RFX0ZPUl9FVkFMX1JFU1VMVAorIyBpcyBkb3VibGUtcXVvdGVkLCBzdWl0YWJsZSBmb3IgYSBzdWJzZXF1ZW50IGV2YWwsIHdoZXJlYXMKKyMgRlVOQ19RVU9URV9GT1JfRVZBTF9VTlFVT1RFRF9SRVNVTFQgaGFzIG1lcmVseSBhbGwgY2hhcmFjdGVycworIyB3aGljaCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUgcXVvdGVzIGJhY2tzbGFzaGlmaWVkLgorZnVuY19xdW90ZV9mb3JfZXZhbCAoKQoreworICAgIGNhc2UgJDEgaW4KKyAgICAgICpbXFxcYFwiXCRdKikKKwlmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdD1gJEVDSE8gIiQxIiB8ICRTRUQgIiRzZWRfcXVvdGVfc3Vic3QiYCA7OworICAgICAgKikKKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQ9IiQxIiA7OworICAgIGVzYWMKKworICAgIGNhc2UgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0IGluCisgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMgdG8gZGVsYXkKKyAgICAgICMgd29yZCBzcGxpdHRpbmcsIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGFuZCBhbmQgdmFyaWFibGUKKyAgICAgICMgZXhwYW5zaW9uIGZvciBhIHN1YnNlcXVlbnQgZXZhbC4KKyAgICAgICMgTWFueSBCb3VybmUgc2hlbGxzIGNhbm5vdCBoYW5kbGUgY2xvc2UgYnJhY2tldHMgY29ycmVjdGx5CisgICAgICAjIGluIHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBzZXBhcmF0ZWx5LgorICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0PSJcIiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdFwiIgorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdCIKKyAgICBlc2FjCit9CisKKworIyBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgYXJnCisjIEFlc3RoZXRpY2FsbHkgcXVvdGUgQVJHIHRvIGJlIGV2YWxlZCBsYXRlcjsgc2FtZSBhcyBhYm92ZSwKKyMgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgorZnVuY19xdW90ZV9mb3JfZXhwYW5kICgpCit7CisgICAgY2FzZSAkMSBpbgorICAgICAgKltcXFxgXCJdKikKKwlteV9hcmc9YCRFQ0hPICIkMSIgfCAkU0VEIFwKKwkgICAgLWUgIiRkb3VibGVfcXVvdGVfc3Vic3QiIC1lICIkc2VkX2RvdWJsZV9iYWNrc2xhc2giYCA7OworICAgICAgKikKKyAgICAgICAgbXlfYXJnPSIkMSIgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRteV9hcmcgaW4KKyAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVycyB0byBkZWxheQorICAgICAgIyB3b3JkIHNwbGl0dGluZyBhbmQgY29tbWFuZCBzdWJzdGl0dXRpb24gZm9yIGEgc3Vic2VxdWVudCBldmFsLgorICAgICAgIyBNYW55IEJvdXJuZSBzaGVsbHMgY2Fubm90IGhhbmRsZSBjbG9zZSBicmFja2V0cyBjb3JyZWN0bHkKKyAgICAgICMgaW4gc2NhbiBzZXRzLCBzbyB3ZSBzcGVjaWZ5IGl0IHNlcGFyYXRlbHkuCisgICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKKyAgICAgICAgbXlfYXJnPSJcIiRteV9hcmdcIiIKKyAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0PSIkbXlfYXJnIgorfQorCisKKyMgZnVuY19zaG93X2V2YWwgY21kIFtmYWlsX2V4cF0KKyMgVW5sZXNzIG9wdF9zaWxlbnQgaXMgdHJ1ZSwgdGhlbiBvdXRwdXQgQ01ELiAgVGhlbiwgaWYgb3B0X2RyeXJ1biBpcworIyBub3QgdHJ1ZSwgZXZhbHVhdGUgQ01ELiAgSWYgdGhlIGV2YWx1YXRpb24gb2YgQ01EIGZhaWxzLCBhbmQgRkFJTF9FWFAKKyMgaXMgZ2l2ZW4sIHRoZW4gZXZhbHVhdGUgaXQuCitmdW5jX3Nob3dfZXZhbCAoKQoreworICAgIG15X2NtZD0iJDEiCisgICAgbXlfZmFpbF9leHA9IiR7Mi06fSIKKworICAgICR7b3B0X3NpbGVudC1mYWxzZX0gfHwgeworICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkbXlfY21kIgorICAgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorICAgIH0KKworICAgIGlmICR7b3B0X2RyeV9ydW4tZmFsc2V9OyB0aGVuIDo7IGVsc2UKKyAgICAgIGV2YWwgIiRteV9jbWQiCisgICAgICBteV9zdGF0dXM9JD8KKyAgICAgIGlmIHRlc3QgIiRteV9zdGF0dXMiIC1lcSAwOyB0aGVuIDo7IGVsc2UKKwlldmFsICIoZXhpdCAkbXlfc3RhdHVzKTsgJG15X2ZhaWxfZXhwIgorICAgICAgZmkKKyAgICBmaQorfQorCisKKyMgZnVuY19zaG93X2V2YWxfbG9jYWxlIGNtZCBbZmFpbF9leHBdCisjIFVubGVzcyBvcHRfc2lsZW50IGlzIHRydWUsIHRoZW4gb3V0cHV0IENNRC4gIFRoZW4sIGlmIG9wdF9kcnlydW4gaXMKKyMgbm90IHRydWUsIGV2YWx1YXRlIENNRC4gIElmIHRoZSBldmFsdWF0aW9uIG9mIENNRCBmYWlscywgYW5kIEZBSUxfRVhQCisjIGlzIGdpdmVuLCB0aGVuIGV2YWx1YXRlIGl0LiAgVXNlIHRoZSBzYXZlZCBsb2NhbGUgZm9yIGV2YWx1YXRpb24uCitmdW5jX3Nob3dfZXZhbF9sb2NhbGUgKCkKK3sKKyAgICBteV9jbWQ9IiQxIgorICAgIG15X2ZhaWxfZXhwPSIkezItOn0iCisKKyAgICAke29wdF9zaWxlbnQtZmFsc2V9IHx8IHsKKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJG15X2NtZCIKKyAgICAgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKyAgICB9CisKKyAgICBpZiAke29wdF9kcnlfcnVuLWZhbHNlfTsgdGhlbiA6OyBlbHNlCisgICAgICBldmFsICIkbHRfdXNlcl9sb2NhbGUKKwkgICAgJG15X2NtZCIKKyAgICAgIG15X3N0YXR1cz0kPworICAgICAgZXZhbCAiJGx0X3NhZmVfbG9jYWxlIgorICAgICAgaWYgdGVzdCAiJG15X3N0YXR1cyIgLWVxIDA7IHRoZW4gOjsgZWxzZQorCWV2YWwgIihleGl0ICRteV9zdGF0dXMpOyAkbXlfZmFpbF9leHAiCisgICAgICBmaQorICAgIGZpCit9CisKKworIyBmdW5jX3ZlcnNpb24KKyMgRWNobyB2ZXJzaW9uIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorZnVuY192ZXJzaW9uICgpCit7CisgICAgJFNFRCAtbiAnLyhDKS8hYiBnbworCTptb3JlCisJL1wuLyF7CisJICBOCisJICBzL1xuIyAvIC8KKwkgIGIgbW9yZQorCX0KKwk6Z28KKwkvXiMgJyRQUk9HUkFNJyAoR05VIC8sLyMgd2FycmFudHk7IC8geworICAgICAgICBzL14jIC8vCisJcy9eIyAqJC8vCisgICAgICAgIHMvXCgoQylcKVsgMC05LC1dKlwoIFsxLTldWzAtOV0qXCkvXDFcMi8KKyAgICAgICAgcAorICAgICB9JyA8ICIkcHJvZ3BhdGgiCisgICAgIGV4aXQgJD8KK30KKworIyBmdW5jX3VzYWdlCisjIEVjaG8gc2hvcnQgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KK2Z1bmNfdXNhZ2UgKCkKK3sKKyAgICAkU0VEIC1uICcvXiMgVXNhZ2U6LywvXiMgICouKi0taGVscC8geworICAgICAgICBzL14jIC8vCisJcy9eIyAqJC8vCisJcy9cJHByb2duYW1lLyckcHJvZ25hbWUnLworCXAKKyAgICB9JyA8ICIkcHJvZ3BhdGgiCisgICAgZWNobworICAgICRFQ0hPICJydW4gXGAkcHJvZ25hbWUgLS1oZWxwIHwgbW9yZScgZm9yIGZ1bGwgdXNhZ2UiCisgICAgZXhpdCAkPworfQorCisjIGZ1bmNfaGVscCBbTk9FWElUXQorIyBFY2hvIGxvbmcgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdCwKKyMgdW5sZXNzICdub2V4aXQnIGlzIHBhc3NlZCBhcyBhcmd1bWVudC4KK2Z1bmNfaGVscCAoKQoreworICAgICRTRUQgLW4gJy9eIyBVc2FnZTovLC8jIFJlcG9ydCBidWdzIHRvLyB7CisgICAgICAgIHMvXiMgLy8KKwlzL14jICokLy8KKwlzKlwkcHJvZ25hbWUqJyRwcm9nbmFtZScqCisJcypcJGhvc3QqJyIkaG9zdCInKgorCXMqXCRTSEVMTConIiRTSEVMTCInKgorCXMqXCRMVENDKiciJExUQ0MiJyoKKwlzKlwkTFRDRkxBR1MqJyIkTFRDRkxBR1MiJyoKKwlzKlwkTEQqJyIkTEQiJyoKKwlzL1wkd2l0aF9nbnVfbGQvJyIkd2l0aF9nbnVfbGQiJy8KKwlzL1wkYXV0b21ha2VfdmVyc2lvbi8nImAoYXV0b21ha2UgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAiJy8KKwlzL1wkYXV0b2NvbmZfdmVyc2lvbi8nImAoYXV0b2NvbmYgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAiJy8KKwlwCisgICAgIH0nIDwgIiRwcm9ncGF0aCIKKyAgICByZXQ9JD8KKyAgICBpZiB0ZXN0IC16ICIkMSI7IHRoZW4KKyAgICAgIGV4aXQgJHJldAorICAgIGZpCit9CisKKyMgZnVuY19taXNzaW5nX2FyZyBhcmduYW1lCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IgYW5kIHNldCBnbG9iYWwKKyMgZXhpdF9jbWQuCitmdW5jX21pc3NpbmdfYXJnICgpCit7CisgICAgZnVuY19lcnJvciAibWlzc2luZyBhcmd1bWVudCBmb3IgJDEuIgorICAgIGV4aXRfY21kPWV4aXQKK30KKworZXhpdF9jbWQ9OgorCisKKworCisKKworbWFnaWM9IiUlJU1BR0lDIHZhcmlhYmxlJSUlIgorbWFnaWNfZXhlPSIlJSVNQUdJQyBFWEUgdmFyaWFibGUlJSUiCisKKyMgR2xvYmFsIHZhcmlhYmxlcy4KKyMgJG1vZGUgaXMgdW5zZXQKK25vbm9wdD0KK2V4ZWN1dGVfZGxmaWxlcz0KK3ByZXNlcnZlX2FyZ3M9CitsbzJvPSJzL1xcLmxvXCQvLiR7b2JqZXh0fS8iCitvMmxvPSJzL1xcLiR7b2JqZXh0fVwkLy5sby8iCitleHRyYWN0ZWRfYXJjaGl2ZXM9CitleHRyYWN0ZWRfc2VyaWFsPTAKKworb3B0X2RyeV9ydW49ZmFsc2UKK29wdF9kdXBsaWNhdGVfZGVwcz1mYWxzZQorb3B0X3NpbGVudD1mYWxzZQorb3B0X2RlYnVnPToKKworIyBJZiB0aGlzIHZhcmlhYmxlIGlzIHNldCBpbiBhbnkgb2YgdGhlIGFjdGlvbnMsIHRoZSBjb21tYW5kIGluIGl0CisjIHdpbGwgYmUgZXhlY2VkIGF0IHRoZSBlbmQuICBUaGlzIHByZXZlbnRzIGhlcmUtZG9jdW1lbnRzIGZyb20gYmVpbmcKKyMgbGVmdCBvdmVyIGJ5IHNoZWxscy4KK2V4ZWNfY21kPQorCisjIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgZm9sbG93ZWQgYnkKKyMgYSBjb25maWd1cmF0aW9uIGZhaWx1cmUgaGludCwgYW5kIGV4aXQuCitmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gKCkKK3sKKyAgICBmdW5jX2Vycm9yICR7MSsiJEAifQorICAgIGZ1bmNfZXJyb3IgIlNlZSB0aGUgJFBBQ0tBR0UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisgICAgZnVuY19mYXRhbF9lcnJvciAiRmF0YWwgY29uZmlndXJhdGlvbiBlcnJvci4iCit9CisKKworIyBmdW5jX2NvbmZpZworIyBEaXNwbGF5IHRoZSBjb25maWd1cmF0aW9uIGZvciBhbGwgdGhlIHRhZ3MgaW4gdGhpcyBzY3JpcHQuCitmdW5jX2NvbmZpZyAoKQoreworICAgIHJlX2JlZ2luY2Y9J14jICMjIyBCRUdJTiBMSUJUT09MJworICAgIHJlX2VuZGNmPSdeIyAjIyMgRU5EIExJQlRPT0wnCisKKyAgICAjIERlZmF1bHQgY29uZmlndXJhdGlvbi4KKyAgICAkU0VEICIxLC8kcmVfYmVnaW5jZiBDT05GSUcvZDsvJHJlX2VuZGNmIENPTkZJRy8sXCRkIiA8ICIkcHJvZ3BhdGgiCisKKyAgICAjIE5vdyBwcmludCB0aGUgY29uZmlndXJhdGlvbnMgZm9yIHRoZSB0YWdzLgorICAgIGZvciB0YWduYW1lIGluICR0YWdsaXN0OyBkbworICAgICAgJFNFRCAtbiAiLyRyZV9iZWdpbmNmIFRBRyBDT05GSUc6ICR0YWduYW1lXCQvLC8kcmVfZW5kY2YgVEFHIENPTkZJRzogJHRhZ25hbWVcJC9wIiA8ICIkcHJvZ3BhdGgiCisgICAgZG9uZQorCisgICAgZXhpdCAkPworfQorCisjIGZ1bmNfZmVhdHVyZXMKKyMgRGlzcGxheSB0aGUgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0LgorZnVuY19mZWF0dXJlcyAoKQoreworICAgIGVjaG8gImhvc3Q6ICRob3N0IgorICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisgICAgICBlY2hvICJlbmFibGUgc2hhcmVkIGxpYnJhcmllcyIKKyAgICBlbHNlCisgICAgICBlY2hvICJkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMiCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisgICAgICBlY2hvICJlbmFibGUgc3RhdGljIGxpYnJhcmllcyIKKyAgICBlbHNlCisgICAgICBlY2hvICJkaXNhYmxlIHN0YXRpYyBsaWJyYXJpZXMiCisgICAgZmkKKworICAgIGV4aXQgJD8KK30KKworIyBmdW5jX2VuYWJsZV90YWcgdGFnbmFtZQorIyBWZXJpZnkgdGhhdCBUQUdOQU1FIGlzIHZhbGlkLCBhbmQgZWl0aGVyIGZsYWcgYW4gZXJyb3IgYW5kIGV4aXQsIG9yCisjIGVuYWJsZSB0aGUgVEFHTkFNRSB0YWcuICBXZSBhbHNvIGFkZCBUQUdOQU1FIHRvIHRoZSBnbG9iYWwgJHRhZ2xpc3QKKyMgdmFyaWFibGUgaGVyZS4KK2Z1bmNfZW5hYmxlX3RhZyAoKQoreworICAjIEdsb2JhbCB2YXJpYWJsZToKKyAgdGFnbmFtZT0iJDEiCisKKyAgcmVfYmVnaW5jZj0iXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVcJCIKKyAgcmVfZW5kY2Y9Il4jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZVwkIgorICBzZWRfZXh0cmFjdGNmPSIvJHJlX2JlZ2luY2YvLC8kcmVfZW5kY2YvcCIKKworICAjIFZhbGlkYXRlIHRhZ25hbWUuCisgIGNhc2UgJHRhZ25hbWUgaW4KKyAgICAqWyEtX0EtWmEtejAtOSwvXSopCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIHRhZyBuYW1lOiAkdGFnbmFtZSIKKyAgICAgIDs7CisgIGVzYWMKKworICAjIERvbid0IHRlc3QgZm9yIHRoZSAiZGVmYXVsdCIgQyB0YWcsIGFzIHdlIGtub3cgaXQncworICAjIHRoZXJlIGJ1dCBub3Qgc3BlY2lhbGx5IG1hcmtlZC4KKyAgY2FzZSAkdGFnbmFtZSBpbgorICAgIENDKSA7OworICAgICopCisgICAgICBpZiAkR1JFUCAiJHJlX2JlZ2luY2YiICIkcHJvZ3BhdGgiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCXRhZ2xpc3Q9IiR0YWdsaXN0ICR0YWduYW1lIgorCisJIyBFdmFsdWF0ZSB0aGUgY29uZmlndXJhdGlvbi4gIEJlIGNhcmVmdWwgdG8gcXVvdGUgdGhlIHBhdGgKKwkjIGFuZCB0aGUgc2VkIHNjcmlwdCwgdG8gYXZvaWQgc3BsaXR0aW5nIG9uIHdoaXRlc3BhY2UsIGJ1dAorCSMgYWxzbyBkb24ndCB1c2Ugbm9uLXBvcnRhYmxlIHF1b3RlcyB3aXRoaW4gYmFja3F1b3RlcyB3aXRoaW4KKwkjIHF1b3RlcyB3ZSBoYXZlIHRvIGRvIGl0IGluIDIgc3RlcHM6CisJZXh0cmFjdGVkY2Y9YCRTRUQgLW4gLWUgIiRzZWRfZXh0cmFjdGNmIiA8ICIkcHJvZ3BhdGgiYAorCWV2YWwgIiRleHRyYWN0ZWRjZiIKKyAgICAgIGVsc2UKKwlmdW5jX2Vycm9yICJpZ25vcmluZyB1bmtub3duIHRhZyAkdGFnbmFtZSIKKyAgICAgIGZpCisgICAgICA7OworICBlc2FjCit9CisKKyMgUGFyc2Ugb3B0aW9ucyBvbmNlLCB0aG9yb3VnaGx5LiAgVGhpcyBjb21lcyBhcyBzb29uIGFzIHBvc3NpYmxlIGluCisjIHRoZSBzY3JpcHQgdG8gbWFrZSB0aGluZ3MgbGlrZSBgbGlidG9vbCAtLXZlcnNpb24nIGhhcHBlbiBxdWlja2x5LgoreworCisgICMgU2hvcnRoYW5kIGZvciAtLW1vZGU9Zm9vLCBvbmx5IHZhbGlkIGFzIHRoZSBmaXJzdCBhcmd1bWVudAorICBjYXNlICQxIGluCisgIGNsZWFufGNsZWF8Y2xlfGNsKQorICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNsZWFuICR7MSsiJEAifTsgc2hpZnQKKyAgICA7OworICBjb21waWxlfGNvbXBpbHxjb21waXxjb21wfGNvbXxjb3xjKQorICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNvbXBpbGUgJHsxKyIkQCJ9OyBzaGlmdAorICAgIDs7CisgIGV4ZWN1dGV8ZXhlY3V0fGV4ZWN1fGV4ZWN8ZXhlfGV4fGUpCisgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZXhlY3V0ZSAkezErIiRAIn07IHNoaWZ0CisgICAgOzsKKyAgZmluaXNofGZpbmlzfGZpbml8ZmlufGZpfGYpCisgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZmluaXNoICR7MSsiJEAifTsgc2hpZnQKKyAgICA7OworICBpbnN0YWxsfGluc3RhbHxpbnN0YXxpbnN0fGluc3xpbnxpKQorICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorICAgIDs7CisgIGxpbmt8bGlufGxpfGwpCisgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgbGluayAkezErIiRAIn07IHNoaWZ0CisgICAgOzsKKyAgdW5pbnN0YWxsfHVuaW5zdGFsfHVuaW5zdGF8dW5pbnN0fHVuaW5zfHVuaW58dW5pfHVufHUpCisgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgdW5pbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKyAgICA7OworICBlc2FjCisKKyAgIyBQYXJzZSBub24tbW9kZSBzcGVjaWZpYyBhcmd1bWVudHM6CisgIHdoaWxlIHRlc3QgIiQjIiAtZ3QgMDsgZG8KKyAgICBvcHQ9IiQxIgorICAgIHNoaWZ0CisKKyAgICBjYXNlICRvcHQgaW4KKyAgICAgIC0tY29uZmlnKQkJZnVuY19jb25maWcJCQkJCTs7CisKKyAgICAgIC0tZGVidWcpCQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0IgorCQkJZnVuY19lY2hvICJlbmFibGluZyBzaGVsbCB0cmFjZSBtb2RlIgorCQkJb3B0X2RlYnVnPSdzZXQgLXgnCisJCQkkb3B0X2RlYnVnCisJCQk7OworCisgICAgICAtZGxvcGVuKQkJdGVzdCAiJCMiIC1lcSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgIiRvcHQiICYmIGJyZWFrCisJCQlleGVjdXRlX2RsZmlsZXM9IiRleGVjdXRlX2RsZmlsZXMgJDEiCisJCQlzaGlmdAorCQkJOzsKKworICAgICAgLS1kcnktcnVuIHwgLW4pCW9wdF9kcnlfcnVuPToJCQkJCTs7CisgICAgICAtLWZlYXR1cmVzKSAgICAgICBmdW5jX2ZlYXR1cmVzCQkJCQk7OworICAgICAgLS1maW5pc2gpCQltb2RlPSJmaW5pc2giCQkJCQk7OworCisgICAgICAtLW1vZGUpCQl0ZXN0ICIkIyIgLWVxIDAgJiYgZnVuY19taXNzaW5nX2FyZyAiJG9wdCIgJiYgYnJlYWsKKwkJCWNhc2UgJDEgaW4KKwkJCSAgIyBWYWxpZCBtb2RlIGFyZ3VtZW50czoKKwkJCSAgY2xlYW4pCTs7CisJCQkgIGNvbXBpbGUpCTs7CisJCQkgIGV4ZWN1dGUpCTs7CisJCQkgIGZpbmlzaCkJOzsKKwkJCSAgaW5zdGFsbCkJOzsKKwkJCSAgbGluaykJCTs7CisJCQkgIHJlbGluaykJOzsKKwkJCSAgdW5pbnN0YWxsKQk7OworCisJCQkgICMgQ2F0Y2ggYW55dGhpbmcgZWxzZSBhcyBhbiBlcnJvcgorCQkJICAqKSBmdW5jX2Vycm9yICJpbnZhbGlkIGFyZ3VtZW50IGZvciAkb3B0IgorCQkJICAgICBleGl0X2NtZD1leGl0CisJCQkgICAgIGJyZWFrCisJCQkgICAgIDs7CisJCSAgICAgICAgZXNhYworCisJCQltb2RlPSIkMSIKKwkJCXNoaWZ0CisJCQk7OworCisgICAgICAtLXByZXNlcnZlLWR1cC1kZXBzKQorCQkJb3B0X2R1cGxpY2F0ZV9kZXBzPToJCQkJOzsKKworICAgICAgLS1xdWlldHwtLXNpbGVudCkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCIKKwkJCW9wdF9zaWxlbnQ9OgorCQkJb3B0X3ZlcmJvc2U9ZmFsc2UKKwkJCTs7CisKKyAgICAgIC0tbm8tcXVpZXR8LS1uby1zaWxlbnQpCisJCQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0IgorCQkJb3B0X3NpbGVudD1mYWxzZQorCQkJOzsKKworICAgICAgLS12ZXJib3NlfCAtdikJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCIKKwkJCW9wdF9zaWxlbnQ9ZmFsc2UKKwkJCW9wdF92ZXJib3NlPToKKwkJCTs7CisKKyAgICAgIC0tbm8tdmVyYm9zZSkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCIKKwkJCW9wdF92ZXJib3NlPWZhbHNlCisJCQk7OworCisgICAgICAtLXRhZykJCXRlc3QgIiQjIiAtZXEgMCAmJiBmdW5jX21pc3NpbmdfYXJnICIkb3B0IiAmJiBicmVhaworCQkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCAkMSIKKwkJCWZ1bmNfZW5hYmxlX3RhZyAiJDEiCSMgdGFnbmFtZSBpcyBzZXQgaGVyZQorCQkJc2hpZnQKKwkJCTs7CisKKyAgICAgICMgU2VwYXJhdGUgb3B0YXJncyB0byBsb25nIG9wdGlvbnM6CisgICAgICAtZGxvcGVuPSp8LS1tb2RlPSp8LS10YWc9KikKKwkJCWZ1bmNfb3B0X3NwbGl0ICIkb3B0IgorCQkJc2V0IGR1bW15ICIkZnVuY19vcHRfc3BsaXRfb3B0IiAiJGZ1bmNfb3B0X3NwbGl0X2FyZyIgJHsxKyIkQCJ9CisJCQlzaGlmdAorCQkJOzsKKworICAgICAgLVw/fC1oKQkJZnVuY191c2FnZQkJCQkJOzsKKyAgICAgIC0taGVscCkJCW9wdF9oZWxwPToJCQkJCTs7CisgICAgICAtLWhlbHAtYWxsKQlvcHRfaGVscD0nOiBoZWxwLWFsbCcJCQkJOzsKKyAgICAgIC0tdmVyc2lvbikJZnVuY192ZXJzaW9uCQkJCQk7OworCisgICAgICAtKikJCWZ1bmNfZmF0YWxfaGVscCAidW5yZWNvZ25pemVkIG9wdGlvbiBcYCRvcHQnIgk7OworCisgICAgICAqKQkJbm9ub3B0PSIkb3B0IgorCQkJYnJlYWsKKwkJCTs7CisgICAgZXNhYworICBkb25lCisKKworICBjYXNlICRob3N0IGluCisgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKnB3MzIqIHwgKmNlZ2NjKikKKyAgICAgICMgZG9uJ3QgZWxpbWluYXRlIGR1cGxpY2F0aW9ucyBpbiAkcG9zdGRlcHMgYW5kICRwcmVkZXBzCisgICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPToKKyAgICAgIDs7CisgICAgKikKKyAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9JG9wdF9kdXBsaWNhdGVfZGVwcworICAgICAgOzsKKyAgZXNhYworCisgICMgSGF2aW5nIHdhcm5lZCBhYm91dCBhbGwgbWlzLXNwZWNpZmllZCBvcHRpb25zLCBiYWlsIG91dCBpZgorICAjIGFueXRoaW5nIHdhcyB3cm9uZy4KKyAgJGV4aXRfY21kICRFWElUX0ZBSUxVUkUKK30KKworIyBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKyMgRW5zdXJlIHRoYXQgd2UgYXJlIHVzaW5nIG00IG1hY3JvcywgYW5kIGxpYnRvb2wgc2NyaXB0IGZyb20gdGhlIHNhbWUKKyMgcmVsZWFzZSBvZiBsaWJ0b29sLgorZnVuY19jaGVja192ZXJzaW9uX21hdGNoICgpCit7CisgIGlmIHRlc3QgIiRwYWNrYWdlX3JldmlzaW9uIiAhPSAiJG1hY3JvX3JldmlzaW9uIjsgdGhlbgorICAgIGlmIHRlc3QgIiRWRVJTSU9OIiAhPSAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCisgICAgICBpZiB0ZXN0IC16ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KKyAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKKyRwcm9nbmFtZTogZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSBhbiBvbGRlciByZWxlYXNlLgorJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSAkUEFDS0FHRSAkVkVSU0lPTgorJHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorX0xUX0VPRgorICAgICAgZWxzZQorICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgYnV0IHRoZQorJHByb2duYW1lOiBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tICRQQUNLQUdFICRtYWNyb192ZXJzaW9uLgorJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSAkUEFDS0FHRSAkVkVSU0lPTgorJHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorX0xUX0VPRgorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24sCiskcHJvZ25hbWU6IGJ1dCB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSByZXZpc2lvbiAkbWFjcm9fcmV2aXNpb24uCiskcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tIHJldmlzaW9uICRwYWNrYWdlX3JldmlzaW9uCiskcHJvZ25hbWU6IG9mICRQQUNLQUdFICRWRVJTSU9OIGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCitfTFRfRU9GCisgICAgZmkKKworICAgIGV4aXQgJEVYSVRfTUlTTUFUQ0gKKyAgZmkKK30KKworCisjIyAtLS0tLS0tLS0tLSAjIworIyMgICAgTWFpbi4gICAgIyMKKyMjIC0tLS0tLS0tLS0tICMjCisKKyRvcHRfaGVscCB8fCB7CisgICMgU2FuaXR5IGNoZWNrcyBmaXJzdDoKKyAgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCisKKyAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgIT0geWVzOyB0aGVuCisgICAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJub3QgY29uZmlndXJlZCB0byBidWlsZCBhbnkga2luZCBvZiBsaWJyYXJ5IgorICBmaQorCisgIHRlc3QgLXogIiRtb2RlIiAmJiBmdW5jX2ZhdGFsX2Vycm9yICJlcnJvcjogeW91IG11c3Qgc3BlY2lmeSBhIE1PREUuIgorCisKKyAgIyBEYXJ3aW4gc3Vja3MKKyAgZXZhbCBzdGRfc2hyZXh0PVwiJHNocmV4dF9jbWRzXCIKKworCisgICMgT25seSBleGVjdXRlIG1vZGUgaXMgYWxsb3dlZCB0byBoYXZlIC1kbG9wZW4gZmxhZ3MuCisgIGlmIHRlc3QgLW4gIiRleGVjdXRlX2RsZmlsZXMiICYmIHRlc3QgIiRtb2RlIiAhPSBleGVjdXRlOyB0aGVuCisgICAgZnVuY19lcnJvciAidW5yZWNvZ25pemVkIG9wdGlvbiBcYC1kbG9wZW4nIgorICAgICRFQ0hPICIkaGVscCIgMT4mMgorICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorICBmaQorCisgICMgQ2hhbmdlIHRoZSBoZWxwIG1lc3NhZ2UgdG8gYSBtb2RlLXNwZWNpZmljIG9uZS4KKyAgZ2VuZXJpY19oZWxwPSIkaGVscCIKKyAgaGVscD0iVHJ5IFxgJHByb2duYW1lIC0taGVscCAtLW1vZGU9JG1vZGUnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK30KKworCisjIGZ1bmNfbGFsaWJfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIGAubGEnIGxpYnJhcnkgb3IgYC5sbycgb2JqZWN0IGZpbGUuCisjIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CisjIGRldGVybWluZWQgaW1wb3N0ZXJzLgorZnVuY19sYWxpYl9wICgpCit7CisgICAgdGVzdCAtZiAiJDEiICYmCisgICAgICAkU0VEIC1lIDRxICIkMSIgMj4vZGV2L251bGwgXAorICAgICAgICB8ICRHUkVQICJeIyBHZW5lcmF0ZWQgYnkgLiokUEFDS0FHRSIgPiAvZGV2L251bGwgMj4mMQorfQorCisjIGZ1bmNfbGFsaWJfdW5zYWZlX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCBgLmxhJyBsaWJyYXJ5IG9yIGAubG8nIG9iamVjdCBmaWxlLgorIyBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIHNhbWUgY2hlY2sgYXMgZnVuY19sYWxpYl9wIHdpdGhvdXQKKyMgcmVzb3J0aW5nIHRvIGV4dGVybmFsIHByb2dyYW1zLiAgVG8gdGhpcyBlbmQsIGl0IHJlZGlyZWN0cyBzdGRpbiBhbmQKKyMgY2xvc2VzIGl0IGFmdGVyd2FyZHMsIHdpdGhvdXQgc2F2aW5nIHRoZSBvcmlnaW5hbCBmaWxlIGRlc2NyaXB0b3IuCisjIEFzIGEgc2FmZXR5IG1lYXN1cmUsIHVzZSBpdCBvbmx5IHdoZXJlIGEgbmVnYXRpdmUgcmVzdWx0IHdvdWxkIGJlCisjIGZhdGFsIGFueXdheS4gIFdvcmtzIGlmIGBmaWxlJyBkb2VzIG5vdCBleGlzdC4KK2Z1bmNfbGFsaWJfdW5zYWZlX3AgKCkKK3sKKyAgICBsYWxpYl9wPW5vCisgICAgaWYgdGVzdCAtZiAiJDEiICYmIHRlc3QgLXIgIiQxIiAmJiBleGVjIDU8JjAgPCIkMSI7IHRoZW4KKwlmb3IgbGFsaWJfcF9sIGluIDEgMiAzIDQKKwlkbworCSAgICByZWFkIGxhbGliX3BfbGluZQorCSAgICBjYXNlICIkbGFsaWJfcF9saW5lIiBpbgorCQlcI1wgR2VuZXJhdGVkXCBieVwgKiRQQUNLQUdFKiApIGxhbGliX3A9eWVzOyBicmVhazs7CisJICAgIGVzYWMKKwlkb25lCisJZXhlYyAwPCY1IDU8Ji0KKyAgICBmaQorICAgIHRlc3QgIiRsYWxpYl9wIiA9IHllcworfQorCisjIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQKKyMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKKyMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCitmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAoKQoreworICAgIGZ1bmNfbGFsaWJfcCAiJDEiCit9CisKKyMgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgd3JhcHBlciBleGVjdXRhYmxlCisjIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CisjIGRldGVybWluZWQgaW1wb3N0ZXJzLgorZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICgpCit7CisgICAgZnVuY19sdHdyYXBwZXJfZXhlY19zdWZmaXg9CisgICAgY2FzZSAkMSBpbgorICAgICouZXhlKSA7OworICAgICopIGZ1bmNfbHR3cmFwcGVyX2V4ZWNfc3VmZml4PS5leGUgOzsKKyAgICBlc2FjCisgICAgJEdSRVAgIiRtYWdpY19leGUiICIkMSRmdW5jX2x0d3JhcHBlcl9leGVjX3N1ZmZpeCIgPi9kZXYvbnVsbCAyPiYxCit9CisKKyMgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSBmaWxlCisjIEFzc3VtZXMgZmlsZSBpcyBhbiBsdHdyYXBwZXJfZXhlY3V0YWJsZQorIyB1c2VzICRmaWxlIHRvIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgZmlsZW5hbWUgZm9yIGEKKyMgdGVtcG9yYXJ5IGx0d3JhcHBlcl9zY3JpcHQuCitmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICgpCit7CisgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ9IiIKKyAgICBpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiQxIjsgdGhlbgorCWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiQxIiAiIiAiLiIKKwlmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwlmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQvJG9iamRpci8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH1fbHRzaHdyYXBwZXIiCisgICAgZmkKK30KKworIyBmdW5jX2x0d3JhcHBlcl9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgb3Igd3JhcHBlciBleGVjdXRhYmxlCisjIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CisjIGRldGVybWluZWQgaW1wb3N0ZXJzLgorZnVuY19sdHdyYXBwZXJfcCAoKQoreworICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkMSIgfHwgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkMSIKK30KKworCisjIGZ1bmNfZXhlY3V0ZV9jbWRzIGNvbW1hbmRzIGZhaWxfY21kCisjIEV4ZWN1dGUgdGlsZGUtZGVsaW1pdGVkIENPTU1BTkRTLgorIyBJZiBGQUlMX0NNRCBpcyBnaXZlbiwgZXZhbCB0aGF0IHVwb24gZmFpbHVyZS4KKyMgRkFJTF9DTUQgbWF5IHJlYWQtYWNjZXNzIHRoZSBjdXJyZW50IGNvbW1hbmQgaW4gdmFyaWFibGUgQ01EIQorZnVuY19leGVjdXRlX2NtZHMgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgc2F2ZV9pZnM9JElGUzsgSUZTPSd+JworICAgIGZvciBjbWQgaW4gJDE7IGRvCisgICAgICBJRlM9JHNhdmVfaWZzCisgICAgICBldmFsIGNtZD1cIiRjbWRcIgorICAgICAgZnVuY19zaG93X2V2YWwgIiRjbWQiICIkezItOn0iCisgICAgZG9uZQorICAgIElGUz0kc2F2ZV9pZnMKK30KKworCisjIGZ1bmNfc291cmNlIGZpbGUKKyMgU291cmNlIEZJTEUsIGFkZGluZyBkaXJlY3RvcnkgY29tcG9uZW50IGlmIG5lY2Vzc2FyeS4KKyMgTm90ZSB0aGF0IGl0IGlzIG5vdCBuZWNlc3Nhcnkgb24gY3lnd2luL21pbmd3IHRvIGFwcGVuZCBhIGRvdCB0bworIyBGSUxFIGV2ZW4gaWYgYm90aCBGSUxFIGFuZCBGSUxFLmV4ZSBleGlzdDogYXV0b21hdGljLWFwcGVuZC0uZXhlCisjIGJlaGF2aW9yIGhhcHBlbnMgb25seSBmb3IgZXhlYygzKSwgbm90IGZvciBvcGVuKDIpISAgQWxzbywgc291cmNpbmcKKyMgYEZJTEUuJyBkb2VzIG5vdCB3b3JrIG9uIGN5Z3dpbiBtYW5hZ2VkIG1vdW50cy4KK2Z1bmNfc291cmNlICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIGNhc2UgJDEgaW4KKyAgICAqLyogfCAqXFwqKQkuICIkMSIgOzsKKyAgICAqKQkJLiAiLi8kMSIgOzsKKyAgICBlc2FjCit9CisKKworIyBmdW5jX2luZmVyX3RhZyBhcmcKKyMgSW5mZXIgdGFnZ2VkIGNvbmZpZ3VyYXRpb24gdG8gdXNlIGlmIGFueSBhcmUgYXZhaWxhYmxlIGFuZAorIyBpZiBvbmUgd2Fzbid0IGNob3NlbiB2aWEgdGhlICItLXRhZyIgY29tbWFuZCBsaW5lIG9wdGlvbi4KKyMgT25seSBhdHRlbXB0IHRoaXMgaWYgdGhlIGNvbXBpbGVyIGluIHRoZSBiYXNlIGNvbXBpbGUKKyMgY29tbWFuZCBkb2Vzbid0IG1hdGNoIHRoZSBkZWZhdWx0IGNvbXBpbGVyLgorIyBhcmcgaXMgdXN1YWxseSBvZiB0aGUgZm9ybSAnZ2NjIC4uLicKK2Z1bmNfaW5mZXJfdGFnICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIGlmIHRlc3QgLW4gIiRhdmFpbGFibGVfdGFncyIgJiYgdGVzdCAteiAiJHRhZ25hbWUiOyB0aGVuCisgICAgICBDQ19xdW90ZWQ9CisgICAgICBmb3IgYXJnIGluICRDQzsgZG8KKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwlDQ19xdW90ZWQ9IiRDQ19xdW90ZWQgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICAgZG9uZQorICAgICAgQ0NfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDYAorICAgICAgQ0NfcXVvdGVkX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ19xdW90ZWRgCisgICAgICBjYXNlICRAIGluCisgICAgICAjIEJsYW5rcyBpbiB0aGUgY29tbWFuZCBtYXkgaGF2ZSBiZWVuIHN0cmlwcGVkIGJ5IHRoZSBjYWxsaW5nIHNoZWxsLAorICAgICAgIyBidXQgbm90IGZyb20gdGhlIENDIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gY29uZmlndXJlIHdhcyBydW4uCisgICAgICAiICRDQyAiKiB8ICIkQ0MgIiogfCAiICRDQ19leHBhbmRlZCAiKiB8ICIkQ0NfZXhwYW5kZWQgIiogfCBcCisgICAgICAiICRDQ19xdW90ZWQiKiB8ICIkQ0NfcXVvdGVkICIqIHwgIiAkQ0NfcXVvdGVkX2V4cGFuZGVkICIqIHwgIiRDQ19xdW90ZWRfZXhwYW5kZWQgIiopIDs7CisgICAgICAjIEJsYW5rcyBhdCB0aGUgc3RhcnQgb2YgJGJhc2VfY29tcGlsZSB3aWxsIGNhdXNlIHRoaXMgdG8gZmFpbAorICAgICAgIyBpZiB3ZSBkb24ndCBjaGVjayBmb3IgdGhlbSBhcyB3ZWxsLgorICAgICAgKikKKwlmb3IgeiBpbiAkYXZhaWxhYmxlX3RhZ3M7IGRvCisJICBpZiAkR1JFUCAiXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHokIiA8ICIkcHJvZ3BhdGgiID4gL2Rldi9udWxsOyB0aGVuCisJICAgICMgRXZhbHVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uCisJICAgIGV2YWwgImAke1NFRH0gLW4gLWUgJy9eIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAnJHonJC8sL14jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAnJHonJC9wJyA8ICRwcm9ncGF0aGAiCisJICAgIENDX3F1b3RlZD0KKwkgICAgZm9yIGFyZyBpbiAkQ0M7IGRvCisJICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIG90aGVyIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLgorCSAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJICAgICAgQ0NfcXVvdGVkPSIkQ0NfcXVvdGVkICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwkgICAgZG9uZQorCSAgICBDQ19leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NgCisJICAgIENDX3F1b3RlZF9leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NfcXVvdGVkYAorCSAgICBjYXNlICIkQCAiIGluCisJICAgICIgJENDICIqIHwgIiRDQyAiKiB8ICIgJENDX2V4cGFuZGVkICIqIHwgIiRDQ19leHBhbmRlZCAiKiB8IFwKKwkgICAgIiAkQ0NfcXVvdGVkIiogfCAiJENDX3F1b3RlZCAiKiB8ICIgJENDX3F1b3RlZF9leHBhbmRlZCAiKiB8ICIkQ0NfcXVvdGVkX2V4cGFuZGVkICIqKQorCSAgICAgICMgVGhlIGNvbXBpbGVyIGluIHRoZSBiYXNlIGNvbXBpbGUgY29tbWFuZCBtYXRjaGVzCisJICAgICAgIyB0aGUgb25lIGluIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbi4KKwkgICAgICAjIEFzc3VtZSB0aGlzIGlzIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbiB3ZSB3YW50LgorCSAgICAgIHRhZ25hbWU9JHoKKwkgICAgICBicmVhaworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGZpCisJZG9uZQorCSMgSWYgJHRhZ25hbWUgc3RpbGwgaXNuJ3Qgc2V0LCB0aGVuIG5vIHRhZ2dlZCBjb25maWd1cmF0aW9uCisJIyB3YXMgZm91bmQgYW5kIGxldCB0aGUgdXNlciBrbm93IHRoYXQgdGhlICItLXRhZyIgY29tbWFuZAorCSMgbGluZSBvcHRpb24gbXVzdCBiZSB1c2VkLgorCWlmIHRlc3QgLXogIiR0YWduYW1lIjsgdGhlbgorCSAgZnVuY19lY2hvICJ1bmFibGUgdG8gaW5mZXIgdGFnZ2VkIGNvbmZpZ3VyYXRpb24iCisJICBmdW5jX2ZhdGFsX2Vycm9yICJzcGVjaWZ5IGEgdGFnIHdpdGggXGAtLXRhZyciCisjCWVsc2UKKyMJICBmdW5jX3ZlcmJvc2UgInVzaW5nICR0YWduYW1lIHRhZ2dlZCBjb25maWd1cmF0aW9uIgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorfQorCisKKworIyBmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0IG91dHB1dF9uYW1lIHBpY19uYW1lIG5vbnBpY19uYW1lCisjIENyZWF0ZSBhIGxpYnRvb2wgb2JqZWN0IGZpbGUgKGFuYWxvZ291cyB0byBhICIubGEiIGZpbGUpLAorIyBidXQgZG9uJ3QgY3JlYXRlIGl0IGlmIHdlJ3JlIGRvaW5nIGEgZHJ5IHJ1bi4KK2Z1bmNfd3JpdGVfbGlidG9vbF9vYmplY3QgKCkKK3sKKyAgICB3cml0ZV9saWJvYmo9JHsxfQorICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisgICAgICB3cml0ZV9sb2JqPVwnJHsyfVwnCisgICAgZWxzZQorICAgICAgd3JpdGVfbG9iaj1ub25lCisgICAgZmkKKworICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIHdyaXRlX29sZG9iaj1cJyR7M31cJworICAgIGVsc2UKKyAgICAgIHdyaXRlX29sZG9iaj1ub25lCisgICAgZmkKKworICAgICRvcHRfZHJ5X3J1biB8fCB7CisgICAgICBjYXQgPiR7d3JpdGVfbGlib2JqfVQgPDxFT0YKKyMgJHdyaXRlX2xpYm9iaiAtIGEgbGlidG9vbCBvYmplY3QgZmlsZQorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjCisjIFBsZWFzZSBETyBOT1QgZGVsZXRlIHRoaXMgZmlsZSEKKyMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgorCisjIE5hbWUgb2YgdGhlIFBJQyBvYmplY3QuCitwaWNfb2JqZWN0PSR3cml0ZV9sb2JqCisKKyMgTmFtZSBvZiB0aGUgbm9uLVBJQyBvYmplY3QKK25vbl9waWNfb2JqZWN0PSR3cml0ZV9vbGRvYmoKKworRU9GCisgICAgICAkTVYgIiR7d3JpdGVfbGlib2JqfVQiICIke3dyaXRlX2xpYm9ian0iCisgICAgfQorfQorCisjIGZ1bmNfbW9kZV9jb21waWxlIGFyZy4uLgorZnVuY19tb2RlX2NvbXBpbGUgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgIyBHZXQgdGhlIGNvbXBpbGF0aW9uIGNvbW1hbmQgYW5kIHRoZSBzb3VyY2UgZmlsZS4KKyAgICBiYXNlX2NvbXBpbGU9CisgICAgc3JjZmlsZT0iJG5vbm9wdCIgICMgIGFsd2F5cyBrZWVwIGEgbm9uLWVtcHR5IHZhbHVlIGluICJzcmNmaWxlIgorICAgIHN1cHByZXNzX29wdD15ZXMKKyAgICBzdXBwcmVzc19vdXRwdXQ9CisgICAgYXJnX21vZGU9bm9ybWFsCisgICAgbGlib2JqPQorICAgIGxhdGVyPQorICAgIHBpZV9mbGFnPQorCisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBjYXNlICRhcmdfbW9kZSBpbgorICAgICAgYXJnICApCisJIyBkbyBub3QgImNvbnRpbnVlIi4gIEluc3RlYWQsIGFkZCB0aGlzIHRvIGJhc2VfY29tcGlsZQorCWxhc3Rhcmc9IiRhcmciCisJYXJnX21vZGU9bm9ybWFsCisJOzsKKworICAgICAgdGFyZ2V0ICkKKwlsaWJvYmo9IiRhcmciCisJYXJnX21vZGU9bm9ybWFsCisJY29udGludWUKKwk7OworCisgICAgICBub3JtYWwgKQorCSMgQWNjZXB0IGFueSBjb21tYW5kLWxpbmUgb3B0aW9ucy4KKwljYXNlICRhcmcgaW4KKwktbykKKwkgIHRlc3QgLW4gIiRsaWJvYmoiICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAieW91IGNhbm5vdCBzcGVjaWZ5IFxgLW8nIG1vcmUgdGhhbiBvbmNlIgorCSAgYXJnX21vZGU9dGFyZ2V0CisJICBjb250aW51ZQorCSAgOzsKKworCS1waWUgfCAtZnBpZSB8IC1mUElFKQorICAgICAgICAgIHBpZV9mbGFnPSIkcGllX2ZsYWcgJGFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCisJLXNoYXJlZCB8IC1zdGF0aWMgfCAtcHJlZmVyLXBpYyB8IC1wcmVmZXItbm9uLXBpYykKKwkgIGxhdGVyPSIkbGF0ZXIgJGFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCisJLW5vLXN1cHByZXNzKQorCSAgc3VwcHJlc3Nfb3B0PW5vCisJICBjb250aW51ZQorCSAgOzsKKworCS1YY29tcGlsZXIpCisJICBhcmdfbW9kZT1hcmcgICMgIHRoZSBuZXh0IG9uZSBnb2VzIGludG8gdGhlICJiYXNlX2NvbXBpbGUiIGFyZyBsaXN0CisJICBjb250aW51ZSAgICAgICMgIFRoZSBjdXJyZW50ICJzcmNmaWxlIiB3aWxsIGVpdGhlciBiZSByZXRhaW5lZCBvcgorCSAgOzsgICAgICAgICAgICAjICByZXBsYWNlZCBsYXRlci4gIEkgd291bGQgZ3Vlc3MgdGhhdCB3b3VsZCBiZSBhIGJ1Zy4KKworCS1XYywqKQorCSAgZnVuY19zdHJpcG5hbWUgJy1XYywnICcnICIkYXJnIgorCSAgYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICBsYXN0YXJnPQorCSAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisJICBmb3IgYXJnIGluICRhcmdzOyBkbworCSAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwkgICAgbGFzdGFyZz0iJGxhc3RhcmcgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCSAgZG9uZQorCSAgSUZTPSIkc2F2ZV9pZnMiCisJICBmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRsYXN0YXJnIgorCSAgbGFzdGFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisKKwkgICMgQWRkIHRoZSBhcmd1bWVudHMgdG8gYmFzZV9jb21waWxlLgorCSAgYmFzZV9jb21waWxlPSIkYmFzZV9jb21waWxlICRsYXN0YXJnIgorCSAgY29udGludWUKKwkgIDs7CisKKwkqKQorCSAgIyBBY2NlcHQgdGhlIGN1cnJlbnQgYXJndW1lbnQgYXMgdGhlIHNvdXJjZSBmaWxlLgorCSAgIyBUaGUgcHJldmlvdXMgInNyY2ZpbGUiIGJlY29tZXMgdGhlIGN1cnJlbnQgYXJndW1lbnQuCisJICAjCisJICBsYXN0YXJnPSIkc3JjZmlsZSIKKwkgIHNyY2ZpbGU9IiRhcmciCisJICA7OworCWVzYWMgICMgIGNhc2UgJGFyZworCTs7CisgICAgICBlc2FjICAgICMgIGNhc2UgJGFyZ19tb2RlCisKKyAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSB0aGUgcHJldmlvdXMgYXJndW1lbnQuCisgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkbGFzdGFyZyIKKyAgICAgIGJhc2VfY29tcGlsZT0iJGJhc2VfY29tcGlsZSAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgZG9uZSAjIGZvciBhcmcKKworICAgIGNhc2UgJGFyZ19tb2RlIGluCisgICAgYXJnKQorICAgICAgZnVuY19mYXRhbF9lcnJvciAieW91IG11c3Qgc3BlY2lmeSBhbiBhcmd1bWVudCBmb3IgLVhjb21waWxlIgorICAgICAgOzsKKyAgICB0YXJnZXQpCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgbXVzdCBzcGVjaWZ5IGEgdGFyZ2V0IHdpdGggXGAtbyciCisgICAgICA7OworICAgICopCisgICAgICAjIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSBvYmplY3QuCisgICAgICB0ZXN0IC16ICIkbGlib2JqIiAmJiB7CisJZnVuY19iYXNlbmFtZSAiJHNyY2ZpbGUiCisJbGlib2JqPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgICB9CisgICAgICA7OworICAgIGVzYWMKKworICAgICMgUmVjb2duaXplIHNldmVyYWwgZGlmZmVyZW50IGZpbGUgc3VmZml4ZXMuCisgICAgIyBJZiB0aGUgdXNlciBzcGVjaWZpZXMgLW8gZmlsZS5vLCBpdCBpcyByZXBsYWNlZCB3aXRoIGZpbGUubG8KKyAgICBjYXNlICRsaWJvYmogaW4KKyAgICAqLltjQ0ZTaWZtc29dIHwgXAorICAgICouYWRhIHwgKi5hZGIgfCAqLmFkcyB8ICouYXNtIHwgXAorICAgICouYysrIHwgKi5jYyB8ICouaWkgfCAqLmNsYXNzIHwgKi5jcHAgfCAqLmN4eCB8IFwKKyAgICAqLltmRl1bMDldPyB8ICouZm9yIHwgKi5qYXZhIHwgKi5vYmogfCAqLnN4IHwgKi5jdSB8ICouY3VwKQorICAgICAgZnVuY194Zm9ybSAiJGxpYm9iaiIKKyAgICAgIGxpYm9iaj0kZnVuY194Zm9ybV9yZXN1bHQKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkbGlib2JqIGluCisgICAgKi5sbykgZnVuY19sbzJvICIkbGlib2JqIjsgb2JqPSRmdW5jX2xvMm9fcmVzdWx0IDs7CisgICAgKikKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBkZXRlcm1pbmUgbmFtZSBvZiBsaWJyYXJ5IG9iamVjdCBmcm9tIFxgJGxpYm9iaiciCisgICAgICA7OworICAgIGVzYWMKKworICAgIGZ1bmNfaW5mZXJfdGFnICRiYXNlX2NvbXBpbGUKKworICAgIGZvciBhcmcgaW4gJGxhdGVyOyBkbworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtc2hhcmVkKQorCXRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiBcCisJICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gImNhbiBub3QgYnVpbGQgYSBzaGFyZWQgbGlicmFyeSIKKwlidWlsZF9vbGRfbGlicz1ubworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXN0YXRpYykKKwlidWlsZF9saWJ0b29sX2xpYnM9bm8KKwlidWlsZF9vbGRfbGlicz15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1wcmVmZXItcGljKQorCXBpY19tb2RlPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXByZWZlci1ub24tcGljKQorCXBpY19tb2RlPW5vCisJY29udGludWUKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRsaWJvYmoiCisgICAgdGVzdCAiWCRsaWJvYmoiICE9ICJYJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IiBcCisgICAgICAmJiAkRUNITyAiWCRsaWJvYmoiIHwgJEdSRVAgJ1tdfiNeKnt9Ozw+PyInIiciJwkgJigpfGAkW10nIFwKKyAgICAgICYmIGZ1bmNfd2FybmluZyAibGlib2JqIG5hbWUgXGAkbGlib2JqJyBtYXkgbm90IGNvbnRhaW4gc2hlbGwgc3BlY2lhbCBjaGFyYWN0ZXJzLiIKKyAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkb2JqIiAiLyIgIiIKKyAgICBvYmpuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisgICAgbG9iaj0ke3hkaXJ9JG9iamRpci8kb2JqbmFtZQorCisgICAgdGVzdCAteiAiJGJhc2VfY29tcGlsZSIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgY29tcGlsYXRpb24gY29tbWFuZCIKKworICAgICMgRGVsZXRlIGFueSBsZWZ0b3ZlciBsaWJyYXJ5IG9iamVjdHMuCisgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorICAgICAgcmVtb3ZlbGlzdD0iJG9iaiAkbG9iaiAkbGlib2JqICR7bGlib2JqfVQiCisgICAgZWxzZQorICAgICAgcmVtb3ZlbGlzdD0iJGxvYmogJGxpYm9iaiAke2xpYm9ian1UIgorICAgIGZpCisKKyAgICAjIE9uIEN5Z3dpbiB0aGVyZSdzIG5vICJyZWFsIiBQSUMgZmxhZyBzbyB3ZSBtdXN0IGJ1aWxkIGJvdGggb2JqZWN0IHR5cGVzCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICBwaWNfbW9kZT1kZWZhdWx0CisgICAgICA7OworICAgIGVzYWMKKyAgICBpZiB0ZXN0ICIkcGljX21vZGUiID0gbm8gJiYgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAhPSBwYXNzX2FsbDsgdGhlbgorICAgICAgIyBub24tUElDIGNvZGUgaW4gc2hhcmVkIGxpYnJhcmllcyBpcyBub3Qgc3VwcG9ydGVkCisgICAgICBwaWNfbW9kZT1kZWZhdWx0CisgICAgZmkKKworICAgICMgQ2FsY3VsYXRlIHRoZSBmaWxlbmFtZSBvZiB0aGUgb3V0cHV0IG9iamVjdCBpZiBjb21waWxlciBkb2VzCisgICAgIyBub3Qgc3VwcG9ydCAtbyB3aXRoIC1jCisgICAgaWYgdGVzdCAiJGNvbXBpbGVyX2NfbyIgPSBubzsgdGhlbgorICAgICAgb3V0cHV0X29iaj1gJEVDSE8gIiRzcmNmaWxlIiB8ICRTRUQgJ3MlXi4qLyUlOyBzJVwuW14uXSokJSUnYC4ke29iamV4dH0KKyAgICAgIGxvY2tmaWxlPSIkb3V0cHV0X29iai5sb2NrIgorICAgIGVsc2UKKyAgICAgIG91dHB1dF9vYmo9CisgICAgICBuZWVkX2xvY2tzPW5vCisgICAgICBsb2NrZmlsZT0KKyAgICBmaQorCisgICAgIyBMb2NrIHRoaXMgY3JpdGljYWwgc2VjdGlvbiBpZiBpdCBpcyBuZWVkZWQKKyAgICAjIFdlIHVzZSB0aGlzIHNjcmlwdCBmaWxlIHRvIG1ha2UgdGhlIGxpbmssIGl0IGF2b2lkcyBjcmVhdGluZyBhIG5ldyBmaWxlCisgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0geWVzOyB0aGVuCisgICAgICB1bnRpbCAkb3B0X2RyeV9ydW4gfHwgbG4gIiRwcm9ncGF0aCIgIiRsb2NrZmlsZSIgMj4vZGV2L251bGw7IGRvCisJZnVuY19lY2hvICJXYWl0aW5nIGZvciAkbG9ja2ZpbGUgdG8gYmUgcmVtb3ZlZCIKKwlzbGVlcCAyCisgICAgICBkb25lCisgICAgZWxpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB3YXJuOyB0aGVuCisgICAgICBpZiB0ZXN0IC1mICIkbG9ja2ZpbGUiOyB0aGVuCisJJEVDSE8gIlwKKyoqKiBFUlJPUiwgJGxvY2tmaWxlIGV4aXN0cyBhbmQgY29udGFpbnM6CitgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQordGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IFxgLWMnIGFuZCBcYC1vJyB0b2dldGhlci4gIElmIHlvdQorcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgorYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKK2NvbXBpbGVyLiIKKworCSRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKwlleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZpCisgICAgICByZW1vdmVsaXN0PSIkcmVtb3ZlbGlzdCAkb3V0cHV0X29iaiIKKyAgICAgICRFQ0hPICIkc3JjZmlsZSIgPiAiJGxvY2tmaWxlIgorICAgIGZpCisKKyAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisgICAgcmVtb3ZlbGlzdD0iJHJlbW92ZWxpc3QgJGxvY2tmaWxlIgorICAgIHRyYXAgJyRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScgMSAyIDE1CisKKyAgICBpZiB0ZXN0IC1uICIkZml4X3NyY2ZpbGVfcGF0aCI7IHRoZW4KKyAgICAgIGV2YWwgc3JjZmlsZT1cIiRmaXhfc3JjZmlsZV9wYXRoXCIKKyAgICBmaQorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRzcmNmaWxlIgorICAgIHFzcmNmaWxlPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorCisgICAgIyBPbmx5IGJ1aWxkIGEgUElDIG9iamVjdCBpZiB3ZSBhcmUgYnVpbGRpbmcgbGlidG9vbCBsaWJyYXJpZXMuCisgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgICMgV2l0aG91dCB0aGlzIGFzc2lnbm1lbnQsIGJhc2VfY29tcGlsZSBnZXRzIGVtcHRpZWQuCisgICAgICBmYnNkX2hpZGVvdXNfc2hfYnVnPSRiYXNlX2NvbXBpbGUKKworICAgICAgaWYgdGVzdCAiJHBpY19tb2RlIiAhPSBubzsgdGhlbgorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlICRwaWNfZmxhZyIKKyAgICAgIGVsc2UKKwkjIERvbid0IGJ1aWxkIFBJQyBjb2RlCisJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUiCisgICAgICBmaQorCisgICAgICBmdW5jX21rZGlyX3AgIiR4ZGlyJG9iamRpciIKKworICAgICAgaWYgdGVzdCAteiAiJG91dHB1dF9vYmoiOyB0aGVuCisJIyBQbGFjZSBQSUMgb2JqZWN0cyBpbiAkb2JqZGlyCisJY29tbWFuZD0iJGNvbW1hbmQgLW8gJGxvYmoiCisgICAgICBmaQorCisgICAgICBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgIiRjb21tYW5kIglcCisgICAgICAgICAgJ3Rlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScKKworICAgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0gd2FybiAmJgorCSB0ZXN0ICJYYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgIiAhPSAiWCRzcmNmaWxlIjsgdGhlbgorCSRFQ0hPICJcCisqKiogRVJST1IsICRsb2NrZmlsZSBjb250YWluczoKK2BjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYAorCitidXQgaXQgc2hvdWxkIGNvbnRhaW46Ciskc3JjZmlsZQorCitUaGlzIGluZGljYXRlcyB0aGF0IGFub3RoZXIgcHJvY2VzcyBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lCit0ZW1wb3Jhcnkgb2JqZWN0IGZpbGUsIGFuZCBsaWJ0b29sIGNvdWxkIG5vdCB3b3JrIGFyb3VuZCBpdCBiZWNhdXNlCit5b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgXGAtYycgYW5kIFxgLW8nIHRvZ2V0aGVyLiAgSWYgeW91CityZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCithdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgorY29tcGlsZXIuIgorCisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorCWV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgZmkKKworICAgICAgIyBKdXN0IG1vdmUgdGhlIG9iamVjdCBpZiBuZWVkZWQsIHRoZW4gZ28gb24gdG8gY29tcGlsZSB0aGUgbmV4dCBvbmUKKyAgICAgIGlmIHRlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiB0ZXN0ICJYJG91dHB1dF9vYmoiICE9ICJYJGxvYmoiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgJyRNViAiJG91dHB1dF9vYmoiICIkbG9iaiInIFwKKwkgICdlcnJvcj0kPzsgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkZXJyb3InCisgICAgICBmaQorCisgICAgICAjIEFsbG93IGVycm9yIG1lc3NhZ2VzIG9ubHkgZnJvbSB0aGUgZmlyc3QgY29tcGlsYXRpb24uCisgICAgICBpZiB0ZXN0ICIkc3VwcHJlc3Nfb3B0IiA9IHllczsgdGhlbgorCXN1cHByZXNzX291dHB1dD0nID4vZGV2L251bGwgMj4mMScKKyAgICAgIGZpCisgICAgZmkKKworICAgICMgT25seSBidWlsZCBhIHBvc2l0aW9uLWRlcGVuZGVudCBvYmplY3QgaWYgd2UgYnVpbGQgb2xkIGxpYnJhcmllcy4KKyAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisgICAgICBpZiB0ZXN0ICIkcGljX21vZGUiICE9IHllczsgdGhlbgorCSMgRG9uJ3QgYnVpbGQgUElDIGNvZGUKKwljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSRwaWVfZmxhZyIKKyAgICAgIGVsc2UKKwljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSAkcGljX2ZsYWciCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX2NfbyIgPSB5ZXM7IHRoZW4KKwljb21tYW5kPSIkY29tbWFuZCAtbyAkb2JqIgorICAgICAgZmkKKworICAgICAgIyBTdXBwcmVzcyBjb21waWxlciBvdXRwdXQgaWYgd2UgYWxyZWFkeSBkaWQgYSBQSUMgY29tcGlsYXRpb24uCisgICAgICBjb21tYW5kPSIkY29tbWFuZCRzdXBwcmVzc19vdXRwdXQiCisgICAgICBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgIiRjb21tYW5kIiBcCisgICAgICAgICckb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnCisKKyAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHdhcm4gJiYKKwkgdGVzdCAiWGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYCIgIT0gIlgkc3JjZmlsZSI7IHRoZW4KKwkkRUNITyAiXAorKioqIEVSUk9SLCAkbG9ja2ZpbGUgY29udGFpbnM6CitgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKKworYnV0IGl0IHNob3VsZCBjb250YWluOgorJHNyY2ZpbGUKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQordGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IFxgLWMnIGFuZCBcYC1vJyB0b2dldGhlci4gIElmIHlvdQorcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgorYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKK2NvbXBpbGVyLiIKKworCSRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKwlleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZpCisKKyAgICAgICMgSnVzdCBtb3ZlIHRoZSBvYmplY3QgaWYgbmVlZGVkCisgICAgICBpZiB0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgdGVzdCAiWCRvdXRwdXRfb2JqIiAhPSAiWCRvYmoiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgJyRNViAiJG91dHB1dF9vYmoiICIkb2JqIicgXAorCSAgJ2Vycm9yPSQ/OyAkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRlcnJvcicKKyAgICAgIGZpCisgICAgZmkKKworICAgICRvcHRfZHJ5X3J1biB8fCB7CisgICAgICBmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0ICIkbGlib2JqIiAiJG9iamRpci8kb2JqbmFtZSIgIiRvYmpuYW1lIgorCisgICAgICAjIFVubG9jayB0aGUgY3JpdGljYWwgc2VjdGlvbiBpZiBpdCB3YXMgbG9ja2VkCisgICAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KKwlyZW1vdmVsaXN0PSRsb2NrZmlsZQorICAgICAgICAkUk0gIiRsb2NrZmlsZSIKKyAgICAgIGZpCisgICAgfQorCisgICAgZXhpdCAkRVhJVF9TVUNDRVNTCit9CisKKyRvcHRfaGVscCB8fCB7CisgIHRlc3QgIiRtb2RlIiA9IGNvbXBpbGUgJiYgZnVuY19tb2RlX2NvbXBpbGUgJHsxKyIkQCJ9Cit9CisKK2Z1bmNfbW9kZV9oZWxwICgpCit7CisgICAgIyBXZSBuZWVkIHRvIGRpc3BsYXkgaGVscCBmb3IgZWFjaCBvZiB0aGUgbW9kZXMuCisgICAgY2FzZSAkbW9kZSBpbgorICAgICAgIiIpCisgICAgICAgICMgR2VuZXJpYyBoZWxwIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSB1c2FnZSBjb21tZW50cworICAgICAgICAjIGF0IHRoZSBzdGFydCBvZiB0aGlzIGZpbGUuCisgICAgICAgIGZ1bmNfaGVscAorICAgICAgICA7OworCisgICAgICBjbGVhbikKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWNsZWFuIFJNIFtSTS1PUFRJT05dLi4uIEZJTEUuLi4KKworUmVtb3ZlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKworUk0gaXMgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gdG8gdXNlIHRvIGRlbGV0ZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBGSUxFCisodHlwaWNhbGx5IFxgL2Jpbi9ybScpLiAgUk0tT1BUSU9OUyBhcmUgb3B0aW9ucyAoc3VjaCBhcyBcYC1mJykgdG8gYmUgcGFzc2VkCit0byBSTS4KKworSWYgRklMRSBpcyBhIGxpYnRvb2wgbGlicmFyeSwgb2JqZWN0IG9yIHByb2dyYW0sIGFsbCB0aGUgZmlsZXMgYXNzb2NpYXRlZAord2l0aCBpdCBhcmUgZGVsZXRlZC4gT3RoZXJ3aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0ZWQgdXNpbmcgUk0uIgorICAgICAgICA7OworCisgICAgICBjb21waWxlKQorICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWNvbXBpbGUgQ09NUElMRS1DT01NQU5ELi4uIFNPVVJDRUZJTEUKKworQ29tcGlsZSBhIHNvdXJjZSBmaWxlIGludG8gYSBsaWJ0b29sIGxpYnJhcnkgb2JqZWN0LgorCitUaGlzIG1vZGUgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgb3B0aW9uczoKKworICAtbyBPVVRQVVQtRklMRSAgICBzZXQgdGhlIG91dHB1dCBmaWxlIG5hbWUgdG8gT1VUUFVULUZJTEUKKyAgLW5vLXN1cHByZXNzICAgICAgZG8gbm90IHN1cHByZXNzIGNvbXBpbGVyIG91dHB1dCBmb3IgbXVsdGlwbGUgcGFzc2VzCisgIC1wcmVmZXItcGljICAgICAgIHRyeSB0byBidWlsZCBQSUMgb2JqZWN0cyBvbmx5CisgIC1wcmVmZXItbm9uLXBpYyAgIHRyeSB0byBidWlsZCBub24tUElDIG9iamVjdHMgb25seQorICAtc2hhcmVkICAgICAgICAgICBkbyBub3QgYnVpbGQgYSBcYC5vJyBmaWxlIHN1aXRhYmxlIGZvciBzdGF0aWMgbGlua2luZworICAtc3RhdGljICAgICAgICAgICBvbmx5IGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKyAgLVdjLEZMQUcgICAgICAgICAgcGFzcyBGTEFHIGRpcmVjdGx5IHRvIHRoZSBjb21waWxlcgorCitDT01QSUxFLUNPTU1BTkQgaXMgYSBjb21tYW5kIHRvIGJlIHVzZWQgaW4gY3JlYXRpbmcgYSBcYHN0YW5kYXJkJyBvYmplY3QgZmlsZQorZnJvbSB0aGUgZ2l2ZW4gU09VUkNFRklMRS4KKworVGhlIG91dHB1dCBmaWxlIG5hbWUgaXMgZGV0ZXJtaW5lZCBieSByZW1vdmluZyB0aGUgZGlyZWN0b3J5IGNvbXBvbmVudCBmcm9tCitTT1VSQ0VGSUxFLCB0aGVuIHN1YnN0aXR1dGluZyB0aGUgQyBzb3VyY2UgY29kZSBzdWZmaXggXGAuYycgd2l0aCB0aGUKK2xpYnJhcnkgb2JqZWN0IHN1ZmZpeCwgXGAubG8nLiIKKyAgICAgICAgOzsKKworICAgICAgZXhlY3V0ZSkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWV4ZWN1dGUgQ09NTUFORCBbQVJHU10uLi4KKworQXV0b21hdGljYWxseSBzZXQgbGlicmFyeSBwYXRoLCB0aGVuIHJ1biBhIHByb2dyYW0uCisKK1RoaXMgbW9kZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBvcHRpb25zOgorCisgIC1kbG9wZW4gRklMRSAgICAgIGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgRklMRSB0byB0aGUgbGlicmFyeSBwYXRoCisKK1RoaXMgbW9kZSBzZXRzIHRoZSBsaWJyYXJ5IHBhdGggZW52aXJvbm1lbnQgdmFyaWFibGUgYWNjb3JkaW5nIHRvIFxgLWRsb3BlbicKK2ZsYWdzLgorCitJZiBhbnkgb2YgdGhlIEFSR1MgYXJlIGxpYnRvb2wgZXhlY3V0YWJsZSB3cmFwcGVycywgdGhlbiB0aGV5IGFyZSB0cmFuc2xhdGVkCitpbnRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgdW5pbnN0YWxsZWQgYmluYXJ5LCBhbmQgYW55IG9mIHRoZWlyIHJlcXVpcmVkIGxpYnJhcnkKK2RpcmVjdG9yaWVzIGFyZSBhZGRlZCB0byB0aGUgbGlicmFyeSBwYXRoLgorCitUaGVuLCBDT01NQU5EIGlzIGV4ZWN1dGVkLCB3aXRoIEFSR1MgYXMgYXJndW1lbnRzLiIKKyAgICAgICAgOzsKKworICAgICAgZmluaXNoKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9ZmluaXNoIFtMSUJESVJdLi4uCisKK0NvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMuCisKK0VhY2ggTElCRElSIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgbGlidG9vbCBsaWJyYXJpZXMuCisKK1RoZSBjb21tYW5kcyB0aGF0IHRoaXMgbW9kZSBleGVjdXRlcyBtYXkgcmVxdWlyZSBzdXBlcnVzZXIgcHJpdmlsZWdlcy4gIFVzZQordGhlIFxgLS1kcnktcnVuJyBvcHRpb24gaWYgeW91IGp1c3Qgd2FudCB0byBzZWUgd2hhdCB3b3VsZCBiZSBleGVjdXRlZC4iCisgICAgICAgIDs7CisKKyAgICAgIGluc3RhbGwpCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1pbnN0YWxsIElOU1RBTEwtQ09NTUFORC4uLgorCitJbnN0YWxsIGV4ZWN1dGFibGVzIG9yIGxpYnJhcmllcy4KKworSU5TVEFMTC1DT01NQU5EIGlzIHRoZSBpbnN0YWxsYXRpb24gY29tbWFuZC4gIFRoZSBmaXJzdCBjb21wb25lbnQgc2hvdWxkIGJlCitlaXRoZXIgdGhlIFxgaW5zdGFsbCcgb3IgXGBjcCcgcHJvZ3JhbS4KKworVGhlIGZvbGxvd2luZyBjb21wb25lbnRzIG9mIElOU1RBTEwtQ09NTUFORCBhcmUgdHJlYXRlZCBzcGVjaWFsbHk6CisKKyAgLWluc3QtcHJlZml4LWRpciBQUkVGSVgtRElSICBVc2UgUFJFRklYLURJUiBhcyBhIHN0YWdpbmcgYXJlYSBmb3IgaW5zdGFsbGF0aW9uCisKK1RoZSByZXN0IG9mIHRoZSBjb21wb25lbnRzIGFyZSBpbnRlcnByZXRlZCBhcyBhcmd1bWVudHMgdG8gdGhhdCBjb21tYW5kIChvbmx5CitCU0QtY29tcGF0aWJsZSBpbnN0YWxsIG9wdGlvbnMgYXJlIHJlY29nbml6ZWQpLiIKKyAgICAgICAgOzsKKworICAgICAgbGluaykKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWxpbmsgTElOSy1DT01NQU5ELi4uCisKK0xpbmsgb2JqZWN0IGZpbGVzIG9yIGxpYnJhcmllcyB0b2dldGhlciB0byBmb3JtIGFub3RoZXIgbGlicmFyeSwgb3IgdG8KK2NyZWF0ZSBhbiBleGVjdXRhYmxlIHByb2dyYW0uCisKK0xJTkstQ09NTUFORCBpcyBhIGNvbW1hbmQgdXNpbmcgdGhlIEMgY29tcGlsZXIgdGhhdCB5b3Ugd291bGQgdXNlIHRvIGNyZWF0ZQorYSBwcm9ncmFtIGZyb20gc2V2ZXJhbCBvYmplY3QgZmlsZXMuCisKK1RoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBvZiBMSU5LLUNPTU1BTkQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5OgorCisgIC1hbGwtc3RhdGljICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIGF0IGFsbAorICAtYXZvaWQtdmVyc2lvbiAgICBkbyBub3QgYWRkIGEgdmVyc2lvbiBzdWZmaXggaWYgcG9zc2libGUKKyAgLWJpbmRpciBCSU5ESVIgICAgc3BlY2lmeSBwYXRoIHRvIGJpbmFyaWVzIGRpcmVjdG9yeSAoZm9yIHN5c3RlbXMgd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzIG11c3QgYmUgZm91bmQgaW4gdGhlIFBBVEggc2V0dGluZyBhdCBydW50aW1lKQorICAtZGxvcGVuIEZJTEUgICAgICBcYC1kbHByZW9wZW4nIEZJTEUgaWYgaXQgY2Fubm90IGJlIGRsb3BlbmVkIGF0IHJ1bnRpbWUKKyAgLWRscHJlb3BlbiBGSUxFICAgbGluayBpbiBGSUxFIGFuZCBhZGQgaXRzIHN5bWJvbHMgdG8gbHRfcHJlbG9hZGVkX3N5bWJvbHMKKyAgLWV4cG9ydC1keW5hbWljICAgYWxsb3cgc3ltYm9scyBmcm9tIE9VVFBVVC1GSUxFIHRvIGJlIHJlc29sdmVkIHdpdGggZGxzeW0oMykKKyAgLWV4cG9ydC1zeW1ib2xzIFNZTUZJTEUKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHRvIGV4cG9ydCBvbmx5IHRoZSBzeW1ib2xzIGxpc3RlZCBpbiBTWU1GSUxFCisgIC1leHBvcnQtc3ltYm9scy1yZWdleCBSRUdFWAorICAgICAgICAgICAgICAgICAgICB0cnkgdG8gZXhwb3J0IG9ubHkgdGhlIHN5bWJvbHMgbWF0Y2hpbmcgUkVHRVgKKyAgLUxMSUJESVIgICAgICAgICAgc2VhcmNoIExJQkRJUiBmb3IgcmVxdWlyZWQgaW5zdGFsbGVkIGxpYnJhcmllcworICAtbE5BTUUgICAgICAgICAgICBPVVRQVVQtRklMRSByZXF1aXJlcyB0aGUgaW5zdGFsbGVkIGxpYnJhcnkgbGliTkFNRQorICAtbW9kdWxlICAgICAgICAgICBidWlsZCBhIGxpYnJhcnkgdGhhdCBjYW4gZGxvcGVuZWQKKyAgLW5vLWZhc3QtaW5zdGFsbCAgZGlzYWJsZSB0aGUgZmFzdC1pbnN0YWxsIG1vZGUKKyAgLW5vLWluc3RhbGwgICAgICAgbGluayBhIG5vdC1pbnN0YWxsYWJsZSBleGVjdXRhYmxlCisgIC1uby11bmRlZmluZWQgICAgIGRlY2xhcmUgdGhhdCBhIGxpYnJhcnkgZG9lcyBub3QgcmVmZXIgdG8gZXh0ZXJuYWwgc3ltYm9scworICAtbyBPVVRQVVQtRklMRSAgICBjcmVhdGUgT1VUUFVULUZJTEUgZnJvbSB0aGUgc3BlY2lmaWVkIG9iamVjdHMKKyAgLW9iamVjdGxpc3QgRklMRSAgVXNlIGEgbGlzdCBvZiBvYmplY3QgZmlsZXMgZm91bmQgaW4gRklMRSB0byBzcGVjaWZ5IG9iamVjdHMKKyAgLXByZWNpb3VzLWZpbGVzLXJlZ2V4IFJFR0VYCisgICAgICAgICAgICAgICAgICAgIGRvbid0IHJlbW92ZSBvdXRwdXQgZmlsZXMgbWF0Y2hpbmcgUkVHRVgKKyAgLXJlbGVhc2UgUkVMRUFTRSAgc3BlY2lmeSBwYWNrYWdlIHJlbGVhc2UgaW5mb3JtYXRpb24KKyAgLXJwYXRoIExJQkRJUiAgICAgdGhlIGNyZWF0ZWQgbGlicmFyeSB3aWxsIGV2ZW50dWFsbHkgYmUgaW5zdGFsbGVkIGluIExJQkRJUgorICAtUlsgXUxJQkRJUiAgICAgICBhZGQgTElCRElSIHRvIHRoZSBydW50aW1lIHBhdGggb2YgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcworICAtc2hhcmVkICAgICAgICAgICBvbmx5IGRvIGR5bmFtaWMgbGlua2luZyBvZiBsaWJ0b29sIGxpYnJhcmllcworICAtc2hyZXh0IFNVRkZJWCAgICBvdmVycmlkZSB0aGUgc3RhbmRhcmQgc2hhcmVkIGxpYnJhcnkgZmlsZSBleHRlbnNpb24KKyAgLXN0YXRpYyAgICAgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgb2YgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKyAgLXN0YXRpYy1saWJ0b29sLWxpYnMKKyAgICAgICAgICAgICAgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgb2YgbGlidG9vbCBsaWJyYXJpZXMKKyAgLXZlcnNpb24taW5mbyBDVVJSRU5UWzpSRVZJU0lPTls6QUdFXV0KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSBsaWJyYXJ5IHZlcnNpb24gaW5mbyBbZWFjaCB2YXJpYWJsZSBkZWZhdWx0cyB0byAwXQorICAtd2VhayBMSUJOQU1FICAgICBkZWNsYXJlIHRoYXQgdGhlIHRhcmdldCBwcm92aWRlcyB0aGUgTElCTkFNRSBpbnRlcmZhY2UKKyAgLVdjLEZMQUcKKyAgLVhjb21waWxlciBGTEFHICAgcGFzcyBsaW5rZXItc3BlY2lmaWMgRkxBRyBkaXJlY3RseSB0byB0aGUgY29tcGlsZXIKKyAgLVdsLEZMQUcKKyAgLVhsaW5rZXIgRkxBRyAgICAgcGFzcyBsaW5rZXItc3BlY2lmaWMgRkxBRyBkaXJlY3RseSB0byB0aGUgbGlua2VyCisgIC1YQ0NsaW5rZXIgRkxBRyAgIHBhc3MgbGluay1zcGVjaWZpYyBGTEFHIHRvIHRoZSBjb21waWxlciBkcml2ZXIgKENDKQorCitBbGwgb3RoZXIgb3B0aW9ucyAoYXJndW1lbnRzIGJlZ2lubmluZyB3aXRoIFxgLScpIGFyZSBpZ25vcmVkLgorCitFdmVyeSBvdGhlciBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZW5hbWUuICBGaWxlcyBlbmRpbmcgaW4gXGAubGEnIGFyZQordHJlYXRlZCBhcyB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcywgb3RoZXIgZmlsZXMgYXJlIHN0YW5kYXJkIG9yIGxpYnJhcnkKK29iamVjdCBmaWxlcy4KKworSWYgdGhlIE9VVFBVVC1GSUxFIGVuZHMgaW4gXGAubGEnLCB0aGVuIGEgbGlidG9vbCBsaWJyYXJ5IGlzIGNyZWF0ZWQsCitvbmx5IGxpYnJhcnkgb2JqZWN0cyAoXGAubG8nIGZpbGVzKSBtYXkgYmUgc3BlY2lmaWVkLCBhbmQgXGAtcnBhdGgnIGlzCityZXF1aXJlZCwgZXhjZXB0IHdoZW4gY3JlYXRpbmcgYSBjb252ZW5pZW5jZSBsaWJyYXJ5LgorCitJZiBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmEnIG9yIFxgLmxpYicsIHRoZW4gYSBzdGFuZGFyZCBsaWJyYXJ5IGlzIGNyZWF0ZWQKK3VzaW5nIFxgYXInIGFuZCBcYHJhbmxpYicsIG9yIG9uIFdpbmRvd3MgdXNpbmcgXGBsaWInLgorCitJZiBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmxvJyBvciBcYC4ke29iamV4dH0nLCB0aGVuIGEgcmVsb2FkYWJsZSBvYmplY3QgZmlsZQoraXMgY3JlYXRlZCwgb3RoZXJ3aXNlIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSBpcyBjcmVhdGVkLiIKKyAgICAgICAgOzsKKworICAgICAgdW5pbnN0YWxsKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9dW5pbnN0YWxsIFJNIFtSTS1PUFRJT05dLi4uIEZJTEUuLi4KKworUmVtb3ZlIGxpYnJhcmllcyBmcm9tIGFuIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisKK1JNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQorKHR5cGljYWxseSBcYC9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgXGAtZicpIHRvIGJlIHBhc3NlZAordG8gUk0uCisKK0lmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIGFsbCB0aGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGl0IGFyZSBkZWxldGVkLgorT3RoZXJ3aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0ZWQgdXNpbmcgUk0uIgorICAgICAgICA7OworCisgICAgICAqKQorICAgICAgICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkbW9kZSciCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgZWNobworICAgICRFQ0hPICJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBvdGhlciBtb2Rlcy4iCit9CisKKyMgTm93IHRoYXQgd2UndmUgY29sbGVjdGVkIGEgcG9zc2libGUgLS1tb2RlIGFyZywgc2hvdyBoZWxwIGlmIG5lY2Vzc2FyeQoraWYgJG9wdF9oZWxwOyB0aGVuCisgIGlmIHRlc3QgIiRvcHRfaGVscCIgPSA6OyB0aGVuCisgICAgZnVuY19tb2RlX2hlbHAKKyAgZWxzZQorICAgIHsKKyAgICAgIGZ1bmNfaGVscCBub2V4aXQKKyAgICAgIGZvciBtb2RlIGluIGNvbXBpbGUgbGluayBleGVjdXRlIGluc3RhbGwgZmluaXNoIHVuaW5zdGFsbCBjbGVhbjsgZG8KKwlmdW5jX21vZGVfaGVscAorICAgICAgZG9uZQorICAgIH0gfCBzZWQgLW4gJzFwOyAyLCRzL15Vc2FnZTovICBvcjogL3AnCisgICAgeworICAgICAgZnVuY19oZWxwIG5vZXhpdAorICAgICAgZm9yIG1vZGUgaW4gY29tcGlsZSBsaW5rIGV4ZWN1dGUgaW5zdGFsbCBmaW5pc2ggdW5pbnN0YWxsIGNsZWFuOyBkbworCWVjaG8KKwlmdW5jX21vZGVfaGVscAorICAgICAgZG9uZQorICAgIH0gfAorICAgIHNlZCAnMWQKKyAgICAgIC9eV2hlbiByZXBvcnRpbmcvLC9eUmVwb3J0L3sKKwlICisJZAorICAgICAgfQorICAgICAgJHgKKyAgICAgIC9pbmZvcm1hdGlvbiBhYm91dCBvdGhlciBtb2Rlcy9kCisgICAgICAvbW9yZSBkZXRhaWxlZCAuKk1PREUvZAorICAgICAgcy9eVXNhZ2U6LiotLW1vZGU9XChbXiBdKlwpIC4qL0Rlc2NyaXB0aW9uIG9mIFwxIG1vZGU6LycKKyAgZmkKKyAgZXhpdCAkPworZmkKKworCisjIGZ1bmNfbW9kZV9leGVjdXRlIGFyZy4uLgorZnVuY19tb2RlX2V4ZWN1dGUgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgIyBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNvbW1hbmQgbmFtZS4KKyAgICBjbWQ9IiRub25vcHQiCisgICAgdGVzdCAteiAiJGNtZCIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgQ09NTUFORCIKKworICAgICMgSGFuZGxlIC1kbG9wZW4gZmxhZ3MgaW1tZWRpYXRlbHkuCisgICAgZm9yIGZpbGUgaW4gJGV4ZWN1dGVfZGxmaWxlczsgZG8KKyAgICAgIHRlc3QgLWYgIiRmaWxlIiBcCisJfHwgZnVuY19mYXRhbF9oZWxwICJcYCRmaWxlJyBpcyBub3QgYSBmaWxlIgorCisgICAgICBkaXI9CisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAqLmxhKQorCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisJZnVuY19sYWxpYl91bnNhZmVfcCAiJGZpbGUiIFwKKwkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisKKwkjIFJlYWQgdGhlIGxpYnRvb2wgbGlicmFyeS4KKwlkbG5hbWU9CisJbGlicmFyeV9uYW1lcz0KKwlmdW5jX3NvdXJjZSAiJGZpbGUiCisKKwkjIFNraXAgdGhpcyBsaWJyYXJ5IGlmIGl0IGNhbm5vdCBiZSBkbG9wZW5lZC4KKwlpZiB0ZXN0IC16ICIkZGxuYW1lIjsgdGhlbgorCSAgIyBXYXJuIGlmIGl0IHdhcyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmIFwKKwkgICAgZnVuY193YXJuaW5nICJcYCRmaWxlJyB3YXMgbm90IGxpbmtlZCB3aXRoIFxgLWV4cG9ydC1keW5hbWljJyIKKwkgIGNvbnRpbnVlCisJZmkKKworCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgorCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwlpZiB0ZXN0IC1mICIkZGlyLyRvYmpkaXIvJGRsbmFtZSI7IHRoZW4KKwkgIGRpcj0iJGRpci8kb2JqZGlyIgorCWVsc2UKKwkgIGlmIHRlc3QgISAtZiAiJGRpci8kZGxuYW1lIjsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBcYCRkbG5hbWUnIGluIFxgJGRpcicgb3IgXGAkZGlyLyRvYmpkaXInIgorCSAgZmkKKwlmaQorCTs7CisKKyAgICAgICoubG8pCisJIyBKdXN0IGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIC5sbyBmaWxlLgorCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgorCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJOzsKKworICAgICAgKikKKwlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3Igbm9uLWxpYnRvb2wgbGlicmFyaWVzIGFuZCBvYmplY3RzIgorCWNvbnRpbnVlCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBHZXQgdGhlIGFic29sdXRlIHBhdGhuYW1lLgorICAgICAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAorICAgICAgdGVzdCAtbiAiJGFic2RpciIgJiYgZGlyPSIkYWJzZGlyIgorCisgICAgICAjIE5vdyBhZGQgdGhlIGRpcmVjdG9yeSB0byBzaGxpYnBhdGhfdmFyLgorICAgICAgaWYgZXZhbCAidGVzdCAteiBcIlwkJHNobGlicGF0aF92YXJcIiI7IHRoZW4KKwlldmFsICIkc2hsaWJwYXRoX3Zhcj1cIlwkZGlyXCIiCisgICAgICBlbHNlCisJZXZhbCAiJHNobGlicGF0aF92YXI9XCJcJGRpcjpcJCRzaGxpYnBhdGhfdmFyXCIiCisgICAgICBmaQorICAgIGRvbmUKKworICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgc2hsaWJwYXRoX3ZhcgorICAgICMgcmF0aGVyIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KKyAgICBsaWJ0b29sX2V4ZWN1dGVfbWFnaWM9IiRtYWdpYyIKKworICAgICMgQ2hlY2sgaWYgYW55IG9mIHRoZSBhcmd1bWVudHMgaXMgYSB3cmFwcGVyIHNjcmlwdC4KKyAgICBhcmdzPQorICAgIGZvciBmaWxlCisgICAgZG8KKyAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgIC0qIHwgKi5sYSB8ICoubG8gKSA7OworICAgICAgKikKKwkjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyByZWFsbHkgYSBsaWJ0b29sIHByb2dyYW0uCisJaWYgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgIiRmaWxlIjsgdGhlbgorCSAgZnVuY19zb3VyY2UgIiRmaWxlIgorCSAgIyBUcmFuc2Zvcm0gYXJnIHRvIHdyYXBwZWQgbmFtZS4KKwkgIGZpbGU9IiRwcm9nZGlyLyRwcm9ncmFtIgorCWVsaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KKwkgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorCSAgZnVuY19zb3VyY2UgIiRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdCIKKwkgICMgVHJhbnNmb3JtIGFyZyB0byB3cmFwcGVkIG5hbWUuCisJICBmaWxlPSIkcHJvZ2Rpci8kcHJvZ3JhbSIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICAjIFF1b3RlIGFyZ3VtZW50cyAodG8gcHJlc2VydmUgc2hlbGwgbWV0YWNoYXJhY3RlcnMpLgorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZpbGUiCisgICAgICBhcmdzPSIkYXJncyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgZG9uZQorCisgICAgaWYgdGVzdCAiWCRvcHRfZHJ5X3J1biIgPSBYZmFsc2U7IHRoZW4KKyAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorCSMgRXhwb3J0IHRoZSBzaGxpYnBhdGhfdmFyLgorCWV2YWwgImV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKKyAgICAgIGZpCisKKyAgICAgICMgUmVzdG9yZSBzYXZlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgICAgIGZvciBsdF92YXIgaW4gTEFORyBMQU5HVUFHRSBMQ19BTEwgTENfQ1RZUEUgTENfQ09MTEFURSBMQ19NRVNTQUdFUworICAgICAgZG8KKwlldmFsICJpZiB0ZXN0IFwiXCR7c2F2ZV8kbHRfdmFyK3NldH1cIiA9IHNldDsgdGhlbgorICAgICAgICAgICAgICAgICRsdF92YXI9XCRzYXZlXyRsdF92YXI7IGV4cG9ydCAkbHRfdmFyCisJICAgICAgZWxzZQorCQkkbHRfdW5zZXQgJGx0X3ZhcgorCSAgICAgIGZpIgorICAgICAgZG9uZQorCisgICAgICAjIE5vdyBwcmVwYXJlIHRvIGFjdHVhbGx5IGV4ZWMgdGhlIGNvbW1hbmQuCisgICAgICBleGVjX2NtZD0iXCRjbWQkYXJncyIKKyAgICBlbHNlCisgICAgICAjIERpc3BsYXkgd2hhdCB3b3VsZCBiZSBkb25lLgorICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisJZXZhbCAiXCRFQ0hPIFwiXCRzaGxpYnBhdGhfdmFyPVwkJHNobGlicGF0aF92YXJcIiIKKwllY2hvICJleHBvcnQgJHNobGlicGF0aF92YXIiCisgICAgICBmaQorICAgICAgJEVDSE8gIiRjbWQkYXJncyIKKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgIGZpCit9CisKK3Rlc3QgIiRtb2RlIiA9IGV4ZWN1dGUgJiYgZnVuY19tb2RlX2V4ZWN1dGUgJHsxKyIkQCJ9CisKKworIyBmdW5jX21vZGVfZmluaXNoIGFyZy4uLgorZnVuY19tb2RlX2ZpbmlzaCAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBsaWJkaXJzPSIkbm9ub3B0IgorICAgIGFkbWluY21kcz0KKworICAgIGlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyRmaW5pc2hfZXZhbCIgJiYgdGVzdCAtbiAiJGxpYmRpcnMiOyB0aGVuCisgICAgICBmb3IgZGlyCisgICAgICBkbworCWxpYmRpcnM9IiRsaWJkaXJzICRkaXIiCisgICAgICBkb25lCisKKyAgICAgIGZvciBsaWJkaXIgaW4gJGxpYmRpcnM7IGRvCisJaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzIjsgdGhlbgorCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGZpbmlzaCBjb21tYW5kcy4KKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkZmluaXNoX2NtZHMiICdhZG1pbmNtZHM9IiRhZG1pbmNtZHMKKyciJGNtZCInIicKKwlmaQorCWlmIHRlc3QgLW4gIiRmaW5pc2hfZXZhbCI7IHRoZW4KKwkgICMgRG8gdGhlIHNpbmdsZSBmaW5pc2hfZXZhbC4KKwkgIGV2YWwgY21kcz1cIiRmaW5pc2hfZXZhbFwiCisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZHMiIHx8IGFkbWluY21kcz0iJGFkbWluY21kcworICAgICAgICRjbWRzIgorCWZpCisgICAgICBkb25lCisgICAgZmkKKworICAgICMgRXhpdCBoZXJlIGlmIHRoZXkgd2FudGVkIHNpbGVudCBtb2RlLgorICAgICRvcHRfc2lsZW50ICYmIGV4aXQgJEVYSVRfU1VDQ0VTUworCisgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKyAgICBlY2hvICJMaWJyYXJpZXMgaGF2ZSBiZWVuIGluc3RhbGxlZCBpbjoiCisgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKyAgICAgICRFQ0hPICIgICAkbGliZGlyIgorICAgIGRvbmUKKyAgICBlY2hvCisgICAgZWNobyAiSWYgeW91IGV2ZXIgaGFwcGVuIHRvIHdhbnQgdG8gbGluayBhZ2FpbnN0IGluc3RhbGxlZCBsaWJyYXJpZXMiCisgICAgZWNobyAiaW4gYSBnaXZlbiBkaXJlY3RvcnksIExJQkRJUiwgeW91IG11c3QgZWl0aGVyIHVzZSBsaWJ0b29sLCBhbmQiCisgICAgZWNobyAic3BlY2lmeSB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgbGlicmFyeSwgb3IgdXNlIHRoZSBcYC1MTElCRElSJyIKKyAgICBlY2hvICJmbGFnIGR1cmluZyBsaW5raW5nIGFuZCBkbyBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZzoiCisgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisgICAgICBlY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHNobGlicGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorICAgICAgZWNobyAiICAgICBkdXJpbmcgZXhlY3V0aW9uIgorICAgIGZpCisgICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorICAgICAgZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRydW5wYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCisgICAgICBlY2hvICIgICAgIGR1cmluZyBsaW5raW5nIgorICAgIGZpCisgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisgICAgICBsaWJkaXI9TElCRElSCisgICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisKKyAgICAgICRFQ0hPICIgICAtIHVzZSB0aGUgXGAkZmxhZycgbGlua2VyIGZsYWciCisgICAgZmkKKyAgICBpZiB0ZXN0IC1uICIkYWRtaW5jbWRzIjsgdGhlbgorICAgICAgJEVDSE8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHJ1biB0aGVzZSBjb21tYW5kczokYWRtaW5jbWRzIgorICAgIGZpCisgICAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKyAgICAgIGVjaG8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGFkZCBMSUJESVIgdG8gXGAvZXRjL2xkLnNvLmNvbmYnIgorICAgIGZpCisgICAgZWNobworCisgICAgZWNobyAiU2VlIGFueSBvcGVyYXRpbmcgc3lzdGVtIGRvY3VtZW50YXRpb24gYWJvdXQgc2hhcmVkIGxpYnJhcmllcyBmb3IiCisgICAgY2FzZSAkaG9zdCBpbgorICAgICAgc29sYXJpczIuWzY3ODldfHNvbGFyaXMyLjFbMC05XSkKKyAgICAgICAgZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSksIGNybGUoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCIKKwllY2hvICJwYWdlcy4iCisJOzsKKyAgICAgICopCisgICAgICAgIGVjaG8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwgcGFnZXMuIgorICAgICAgICA7OworICAgIGVzYWMKKyAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworfQorCit0ZXN0ICIkbW9kZSIgPSBmaW5pc2ggJiYgZnVuY19tb2RlX2ZpbmlzaCAkezErIiRAIn0KKworCisjIGZ1bmNfbW9kZV9pbnN0YWxsIGFyZy4uLgorZnVuY19tb2RlX2luc3RhbGwgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgIyBUaGVyZSBtYXkgYmUgYW4gb3B0aW9uYWwgc2goMSkgYXJndW1lbnQgYXQgdGhlIGJlZ2lubmluZyBvZgorICAgICMgaW5zdGFsbF9wcm9nIChlc3BlY2lhbGx5IG9uIFdpbmRvd3MgTlQpLgorICAgIGlmIHRlc3QgIiRub25vcHQiID0gIiRTSEVMTCIgfHwgdGVzdCAiJG5vbm9wdCIgPSAvYmluL3NoIHx8CisgICAgICAgIyBBbGxvdyB0aGUgdXNlIG9mIEdOVSBzaHRvb2wncyBpbnN0YWxsIGNvbW1hbmQuCisgICAgICAgY2FzZSAkbm9ub3B0IGluICpzaHRvb2wqKSA6OzsgKikgZmFsc2U7OyBlc2FjOyB0aGVuCisgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgaXQuCisgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkbm9ub3B0IgorICAgICAgaW5zdGFsbF9wcm9nPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQgIgorICAgICAgYXJnPSQxCisgICAgICBzaGlmdAorICAgIGVsc2UKKyAgICAgIGluc3RhbGxfcHJvZz0KKyAgICAgIGFyZz0kbm9ub3B0CisgICAgZmkKKworICAgICMgVGhlIHJlYWwgZmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBpbnN0YWxsYXRpb24gcHJvZ3JhbS4KKyAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgaXQuCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKyAgICBpbnN0YWxsX3Byb2c9IiRpbnN0YWxsX3Byb2ckZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgaW5zdGFsbF9zaGFyZWRfcHJvZz0kaW5zdGFsbF9wcm9nCisgICAgY2FzZSAiICRpbnN0YWxsX3Byb2cgIiBpbgorICAgICAgKltcXFwgL11jcFwgKikgaW5zdGFsbF9jcD06IDs7CisgICAgICAqKSBpbnN0YWxsX2NwPWZhbHNlIDs7CisgICAgZXNhYworCisgICAgIyBXZSBuZWVkIHRvIGFjY2VwdCBhdCBsZWFzdCBhbGwgdGhlIEJTRCBpbnN0YWxsIGZsYWdzLgorICAgIGRlc3Q9CisgICAgZmlsZXM9CisgICAgb3B0cz0KKyAgICBwcmV2PQorICAgIGluc3RhbGxfdHlwZT0KKyAgICBpc2Rpcj1ubworICAgIHN0cmlwbWU9CisgICAgbm9fbW9kZT06CisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBhcmcyPQorICAgICAgaWYgdGVzdCAtbiAiJGRlc3QiOyB0aGVuCisJZmlsZXM9IiRmaWxlcyAkZGVzdCIKKwlkZXN0PSRhcmcKKwljb250aW51ZQorICAgICAgZmkKKworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtZCkgaXNkaXI9eWVzIDs7CisgICAgICAtZikKKwlpZiAkaW5zdGFsbF9jcDsgdGhlbiA6OyBlbHNlCisJICBwcmV2PSRhcmcKKwlmaQorCTs7CisgICAgICAtZyB8IC1tIHwgLW8pCisJcHJldj0kYXJnCisJOzsKKyAgICAgIC1zKQorCXN0cmlwbWU9IiAtcyIKKwljb250aW51ZQorCTs7CisgICAgICAtKikKKwk7OworICAgICAgKikKKwkjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZGVkIGFuIGFyZ3VtZW50LCB0aGVuIHNraXAgaXQuCisJaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCisJICBpZiB0ZXN0ICJ4JHByZXYiID0geC1tICYmIHRlc3QgLW4gIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiOyB0aGVuCisJICAgIGFyZzI9JGluc3RhbGxfb3ZlcnJpZGVfbW9kZQorCSAgICBub19tb2RlPWZhbHNlCisJICBmaQorCSAgcHJldj0KKwllbHNlCisJICBkZXN0PSRhcmcKKwkgIGNvbnRpbnVlCisJZmkKKwk7OworICAgICAgZXNhYworCisgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgdGhlIGFyZ3VtZW50LgorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKyAgICAgIGluc3RhbGxfcHJvZz0iJGluc3RhbGxfcHJvZyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgICBpZiB0ZXN0IC1uICIkYXJnMiI7IHRoZW4KKwlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnMiIKKyAgICAgIGZpCisgICAgICBpbnN0YWxsX3NoYXJlZF9wcm9nPSIkaW5zdGFsbF9zaGFyZWRfcHJvZyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgZG9uZQorCisgICAgdGVzdCAteiAiJGluc3RhbGxfcHJvZyIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIGluc3RhbGwgcHJvZ3JhbSIKKworICAgIHRlc3QgLW4gIiRwcmV2IiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInRoZSBcYCRwcmV2JyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCisKKyAgICBpZiB0ZXN0IC1uICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIiAmJiAkbm9fbW9kZTsgdGhlbgorICAgICAgaWYgJGluc3RhbGxfY3A7IHRoZW4gOjsgZWxzZQorCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiCisJaW5zdGFsbF9zaGFyZWRfcHJvZz0iJGluc3RhbGxfc2hhcmVkX3Byb2cgLW0gJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgdGVzdCAteiAiJGZpbGVzIjsgdGhlbgorICAgICAgaWYgdGVzdCAteiAiJGRlc3QiOyB0aGVuCisJZnVuY19mYXRhbF9oZWxwICJubyBmaWxlIG9yIGRlc3RpbmF0aW9uIHNwZWNpZmllZCIKKyAgICAgIGVsc2UKKwlmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBkZXN0aW5hdGlvbiIKKyAgICAgIGZpCisgICAgZmkKKworICAgICMgU3RyaXAgYW55IHRyYWlsaW5nIHNsYXNoIGZyb20gdGhlIGRlc3RpbmF0aW9uLgorICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiJGRlc3QiCisgICAgZGVzdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisKKyAgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeS4KKyAgICB0ZXN0IC1kICIkZGVzdCIgJiYgaXNkaXI9eWVzCisgICAgaWYgdGVzdCAiJGlzZGlyIiA9IHllczsgdGhlbgorICAgICAgZGVzdGRpcj0iJGRlc3QiCisgICAgICBkZXN0bmFtZT0KKyAgICBlbHNlCisgICAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkZGVzdCIgIiIgIi4iCisgICAgICBkZXN0ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyAgICAgIGRlc3RuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisKKyAgICAgICMgTm90IGEgZGlyZWN0b3J5LCBzbyBjaGVjayB0byBzZWUgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBmaWxlIHNwZWNpZmllZC4KKyAgICAgIHNldCBkdW1teSAkZmlsZXM7IHNoaWZ0CisgICAgICB0ZXN0ICIkIyIgLWd0IDEgJiYgXAorCWZ1bmNfZmF0YWxfaGVscCAiXGAkZGVzdCcgaXMgbm90IGEgZGlyZWN0b3J5IgorICAgIGZpCisgICAgY2FzZSAkZGVzdGRpciBpbgorICAgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKyAgICAqKQorICAgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbworCWNhc2UgJGZpbGUgaW4KKwkqLmxvKSA7OworCSopCisJICBmdW5jX2ZhdGFsX2hlbHAgIlxgJGRlc3RkaXInIG11c3QgYmUgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUiCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCisgICAgIyB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9pbnN0YWxsX21hZ2ljPSIkbWFnaWMiCisKKyAgICBzdGF0aWNsaWJzPQorICAgIGZ1dHVyZV9saWJkaXJzPQorICAgIGN1cnJlbnRfbGliZGlycz0KKyAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisKKyAgICAgICMgRG8gZWFjaCBpbnN0YWxsYXRpb24uCisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAqLiRsaWJleHQpCisJIyBEbyB0aGUgc3RhdGljIGxpYnJhcmllcyBsYXRlci4KKwlzdGF0aWNsaWJzPSIkc3RhdGljbGlicyAkZmlsZSIKKwk7OworCisgICAgICAqLmxhKQorCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisJZnVuY19sYWxpYl91bnNhZmVfcCAiJGZpbGUiIFwKKwkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkZmlsZScgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCisJbGlicmFyeV9uYW1lcz0KKwlvbGRfbGlicmFyeT0KKwlyZWxpbmtfY29tbWFuZD0KKwlmdW5jX3NvdXJjZSAiJGZpbGUiCisKKwkjIEFkZCB0aGUgbGliZGlyIHRvIGN1cnJlbnRfbGliZGlycyBpZiBpdCBpcyB0aGUgZGVzdGluYXRpb24uCisJaWYgdGVzdCAiWCRkZXN0ZGlyIiA9ICJYJGxpYmRpciI7IHRoZW4KKwkgIGNhc2UgIiRjdXJyZW50X2xpYmRpcnMgIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGN1cnJlbnRfbGliZGlycz0iJGN1cnJlbnRfbGliZGlycyAkbGliZGlyIiA7OworCSAgZXNhYworCWVsc2UKKwkgICMgTm90ZSB0aGUgbGliZGlyIGFzIGEgZnV0dXJlIGxpYmRpci4KKwkgIGNhc2UgIiRmdXR1cmVfbGliZGlycyAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZnV0dXJlX2xpYmRpcnM9IiRmdXR1cmVfbGliZGlycyAkbGliZGlyIiA7OworCSAgZXNhYworCWZpCisKKwlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiLyIgIiIKKwlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCWRpcj0iJGRpciRvYmpkaXIiCisKKwlpZiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJICAjIERldGVybWluZSB0aGUgcHJlZml4IHRoZSB1c2VyIGhhcyBhcHBsaWVkIHRvIG91ciBmdXR1cmUgZGlyLgorCSAgaW5zdF9wcmVmaXhfZGlyPWAkRUNITyAiJGRlc3RkaXIiIHwgJFNFRCAtZSAicyUkbGliZGlyXCQlJSJgCisKKwkgICMgRG9uJ3QgYWxsb3cgdGhlIHVzZXIgdG8gcGxhY2UgdXMgb3V0c2lkZSBvZiBvdXIgZXhwZWN0ZWQKKwkgICMgbG9jYXRpb24gYi9jIHRoaXMgcHJldmVudHMgZmluZGluZyBkZXBlbmRlbnQgbGlicmFyaWVzIHRoYXQKKwkgICMgYXJlIGluc3RhbGxlZCB0byB0aGUgc2FtZSBwcmVmaXguCisJICAjIEF0IHByZXNlbnQsIHRoaXMgY2hlY2sgZG9lc24ndCBhZmZlY3Qgd2luZG93cyAuZGxsJ3MgdGhhdAorCSAgIyBhcmUgaW5zdGFsbGVkIGludG8gJGxpYmRpci8uLi9iaW4gKGN1cnJlbnRseSwgdGhhdCB3b3JrcyBmaW5lKQorCSAgIyBidXQgaXQncyBzb21ldGhpbmcgdG8ga2VlcCBhbiBleWUgb24uCisJICB0ZXN0ICIkaW5zdF9wcmVmaXhfZGlyIiA9ICIkZGVzdGRpciIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJlcnJvcjogY2Fubm90IGluc3RhbGwgXGAkZmlsZScgdG8gYSBkaXJlY3Rvcnkgbm90IGVuZGluZyBpbiAkbGliZGlyIgorCisJICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorCSAgICAjIFN0aWNrIHRoZSBpbnN0X3ByZWZpeF9kaXIgZGF0YSBpbnRvIHRoZSBsaW5rIGNvbW1hbmQuCisJICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgInMlQGluc3RfcHJlZml4X2RpckAlLWluc3QtcHJlZml4LWRpciAkaW5zdF9wcmVmaXhfZGlyJSJgCisJICBlbHNlCisJICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgInMlQGluc3RfcHJlZml4X2RpckAlJSJgCisJICBmaQorCisJICBmdW5jX3dhcm5pbmcgInJlbGlua2luZyBcYCRmaWxlJyIKKwkgIGZ1bmNfc2hvd19ldmFsICIkcmVsaW5rX2NvbW1hbmQiIFwKKwkgICAgJ2Z1bmNfZmF0YWxfZXJyb3IgImVycm9yOiByZWxpbmsgXGAkZmlsZSdcJycgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCInCisJZmkKKworCSMgU2VlIHRoZSBuYW1lcyBvZiB0aGUgc2hhcmVkIGxpYnJhcnkuCisJc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzOyBzaGlmdAorCWlmIHRlc3QgLW4gIiQxIjsgdGhlbgorCSAgcmVhbG5hbWU9IiQxIgorCSAgc2hpZnQKKworCSAgc3JjbmFtZT0iJHJlYWxuYW1lIgorCSAgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIiAmJiBzcmNuYW1lPSIkcmVhbG5hbWUiVAorCisJICAjIEluc3RhbGwgdGhlIHNoYXJlZCBsaWJyYXJ5IGFuZCBidWlsZCB0aGUgc3ltbGlua3MuCisJICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfc2hhcmVkX3Byb2cgJGRpci8kc3JjbmFtZSAkZGVzdGRpci8kcmVhbG5hbWUiIFwKKwkgICAgICAnZXhpdCAkPycKKwkgIHRzdHJpcG1lPSIkc3RyaXBtZSIKKwkgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKwkgICAgY2FzZSAkcmVhbG5hbWUgaW4KKwkgICAgKi5kbGwuYSkKKwkgICAgICB0c3RyaXBtZT0iIgorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgIGVzYWMKKwkgIGlmIHRlc3QgLW4gIiR0c3RyaXBtZSIgJiYgdGVzdCAtbiAiJHN0cmlwbGliIjsgdGhlbgorCSAgICBmdW5jX3Nob3dfZXZhbCAiJHN0cmlwbGliICRkZXN0ZGlyLyRyZWFsbmFtZSIgJ2V4aXQgJD8nCisJICBmaQorCisJICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KKwkgICAgIyBEZWxldGUgdGhlIG9sZCBzeW1saW5rcywgYW5kIGNyZWF0ZSBuZXcgb25lcy4KKwkgICAgIyBUcnkgYGxuIC1zZicgZmlyc3QsIGJlY2F1c2UgdGhlIGBsbicgYmluYXJ5IG1pZ2h0IGRlcGVuZCBvbgorCSAgICAjIHRoZSBzeW1saW5rIHdlIHJlcGxhY2UhICBTb2xhcmlzIC9iaW4vbG4gZG9lcyBub3QgdW5kZXJzdGFuZCAtZiwKKwkgICAgIyBzbyB3ZSBhbHNvIG5lZWQgdG8gdHJ5IHJtICYmIGxuIC1zLgorCSAgICBmb3IgbGlua25hbWUKKwkgICAgZG8KKwkgICAgICB0ZXN0ICIkbGlua25hbWUiICE9ICIkcmVhbG5hbWUiIFwKKwkJJiYgZnVuY19zaG93X2V2YWwgIihjZCAkZGVzdGRpciAmJiB7ICRMTl9TIC1mICRyZWFsbmFtZSAkbGlua25hbWUgfHwgeyAkUk0gJGxpbmtuYW1lICYmICRMTl9TICRyZWFsbmFtZSAkbGlua25hbWU7IH07IH0pIgorCSAgICBkb25lCisJICBmaQorCisJICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdGluc3RhbGwgY29tbWFuZHMuCisJICBsaWI9IiRkZXN0ZGlyLyRyZWFsbmFtZSIKKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGluc3RhbGxfY21kcyIgJ2V4aXQgJD8nCisJZmkKKworCSMgSW5zdGFsbCB0aGUgcHNldWRvLWxpYnJhcnkgZm9yIGluZm9ybWF0aW9uIHB1cnBvc2VzLgorCWZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwlpbnN0bmFtZT0iJGRpci8kbmFtZSJpCisJZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgJGluc3RuYW1lICRkZXN0ZGlyLyRuYW1lIiAnZXhpdCAkPycKKworCSMgTWF5YmUgaW5zdGFsbCB0aGUgc3RhdGljIGxpYnJhcnksIHRvby4KKwl0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIHN0YXRpY2xpYnM9IiRzdGF0aWNsaWJzICRkaXIvJG9sZF9saWJyYXJ5IgorCTs7CisKKyAgICAgICoubG8pCisJIyBJbnN0YWxsIChpLmUuIGNvcHkpIGEgbGlidG9vbCBvYmplY3QuCisKKwkjIEZpZ3VyZSBvdXQgZGVzdGluYXRpb24gZmlsZSBuYW1lLCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBzcGVjaWZpZWQuCisJaWYgdGVzdCAtbiAiJGRlc3RuYW1lIjsgdGhlbgorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0bmFtZSIKKwllbHNlCisJICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKwkgIGRlc3RmaWxlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RmaWxlIgorCWZpCisKKwkjIERlZHVjZSB0aGUgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gb2xkLXN0eWxlIG9iamVjdCBmaWxlLgorCWNhc2UgJGRlc3RmaWxlIGluCisJKi5sbykKKwkgIGZ1bmNfbG8ybyAiJGRlc3RmaWxlIgorCSAgc3RhdGljZGVzdD0kZnVuY19sbzJvX3Jlc3VsdAorCSAgOzsKKwkqLiRvYmpleHQpCisJICBzdGF0aWNkZXN0PSIkZGVzdGZpbGUiCisJICBkZXN0ZmlsZT0KKwkgIDs7CisJKikKKwkgIGZ1bmNfZmF0YWxfaGVscCAiY2Fubm90IGNvcHkgYSBsaWJ0b29sIG9iamVjdCB0byBcYCRkZXN0ZmlsZSciCisJICA7OworCWVzYWMKKworCSMgSW5zdGFsbCB0aGUgbGlidG9vbCBvYmplY3QgaWYgcmVxdWVzdGVkLgorCXRlc3QgLW4gIiRkZXN0ZmlsZSIgJiYgXAorCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgJGZpbGUgJGRlc3RmaWxlIiAnZXhpdCAkPycKKworCSMgSW5zdGFsbCB0aGUgb2xkIG9iamVjdCBpZiBlbmFibGVkLgorCWlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKwkgICMgRGVkdWNlIHRoZSBuYW1lIG9mIHRoZSBvbGQtc3R5bGUgb2JqZWN0IGZpbGUuCisJICBmdW5jX2xvMm8gIiRmaWxlIgorCSAgc3RhdGljb2JqPSRmdW5jX2xvMm9fcmVzdWx0CisJICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyBcJHN0YXRpY29iaiBcJHN0YXRpY2Rlc3QiICdleGl0ICQ/JworCWZpCisJZXhpdCAkRVhJVF9TVUNDRVNTCisJOzsKKworICAgICAgKikKKwkjIEZpZ3VyZSBvdXQgZGVzdGluYXRpb24gZmlsZSBuYW1lLCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBzcGVjaWZpZWQuCisJaWYgdGVzdCAtbiAiJGRlc3RuYW1lIjsgdGhlbgorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0bmFtZSIKKwllbHNlCisJICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKwkgIGRlc3RmaWxlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RmaWxlIgorCWZpCisKKwkjIElmIHRoZSBmaWxlIGlzIG1pc3NpbmcsIGFuZCB0aGVyZSBpcyBhIC5leGUgb24gdGhlIGVuZCwgc3RyaXAgaXQKKwkjIGJlY2F1c2UgaXQgaXMgbW9zdCBsaWtlbHkgYSBsaWJ0b29sIHNjcmlwdCB3ZSBhY3R1YWxseSB3YW50IHRvCisJIyBpbnN0YWxsCisJc3RyaXBwZWRfZXh0PSIiCisJY2FzZSAkZmlsZSBpbgorCSAgKi5leGUpCisJICAgIGlmIHRlc3QgISAtZiAiJGZpbGUiOyB0aGVuCisJICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZmlsZSIKKwkgICAgICBmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgICBzdHJpcHBlZF9leHQ9Ii5leGUiCisJICAgIGZpCisJICAgIDs7CisJZXNhYworCisJIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgcmVhbGx5IGEgbGlidG9vbCBwcm9ncmFtLgorCWNhc2UgJGhvc3QgaW4KKwkqY3lnd2luKiB8ICptaW5ndyopCisJICAgIGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJGZpbGUiOyB0aGVuCisJICAgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAiJGZpbGUiCisJICAgICAgd3JhcHBlcj0kZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgZWxzZQorCSAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZpbGUiCisJICAgICAgd3JhcHBlcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgIGZpCisJICAgIDs7CisJKikKKwkgICAgd3JhcHBlcj0kZmlsZQorCSAgICA7OworCWVzYWMKKwlpZiBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAiJHdyYXBwZXIiOyB0aGVuCisJICBub3RpbnN0X2RlcGxpYnM9CisJICByZWxpbmtfY29tbWFuZD0KKworCSAgZnVuY19zb3VyY2UgIiR3cmFwcGVyIgorCisJICAjIENoZWNrIHRoZSB2YXJpYWJsZXMgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIHNldC4KKwkgIHRlc3QgLXogIiRnZW5lcmF0ZWRfYnlfbGlidG9vbF92ZXJzaW9uIiAmJiBcCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImludmFsaWQgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCBcYCR3cmFwcGVyJyIKKworCSAgZmluYWxpemU9eWVzCisJICBmb3IgbGliIGluICRub3RpbnN0X2RlcGxpYnM7IGRvCisJICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgZWFjaCBsaWJyYXJ5IGlzIGluc3RhbGxlZC4KKwkgICAgbGliZGlyPQorCSAgICBpZiB0ZXN0IC1mICIkbGliIjsgdGhlbgorCSAgICAgIGZ1bmNfc291cmNlICIkbGliIgorCSAgICBmaQorCSAgICBsaWJmaWxlPSIkbGliZGlyLyJgJEVDSE8gIiRsaWIiIHwgJFNFRCAncyVeLiovJSVnJ2AgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0CisJICAgIGlmIHRlc3QgLW4gIiRsaWJkaXIiICYmIHRlc3QgISAtZiAiJGxpYmZpbGUiOyB0aGVuCisJICAgICAgZnVuY193YXJuaW5nICJcYCRsaWInIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gXGAkbGliZGlyJyIKKwkgICAgICBmaW5hbGl6ZT1ubworCSAgICBmaQorCSAgZG9uZQorCisJICByZWxpbmtfY29tbWFuZD0KKwkgIGZ1bmNfc291cmNlICIkd3JhcHBlciIKKworCSAgb3V0cHV0bmFtZT0KKwkgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0gbm8gJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGlmIHRlc3QgIiRmaW5hbGl6ZSIgPSB5ZXM7IHRoZW4KKwkgICAgICAgIHRtcGRpcj1gZnVuY19ta3RlbXBkaXJgCisJCWZ1bmNfYmFzZW5hbWUgIiRmaWxlJHN0cmlwcGVkX2V4dCIKKwkJZmlsZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgICAgICAgb3V0cHV0bmFtZT0iJHRtcGRpci8kZmlsZSIKKwkgICAgICAgICMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKwkgICAgICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0bmFtZSInJWcnYAorCisJICAgICAgICAkb3B0X3NpbGVudCB8fCB7CisJICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJHJlbGlua19jb21tYW5kIgorCQkgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKwkgICAgICAgIH0KKwkgICAgICAgIGlmIGV2YWwgIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4gOgorCSAgICAgICAgICBlbHNlCisJCSAgZnVuY19lcnJvciAiZXJyb3I6IHJlbGluayBcYCRmaWxlJyB3aXRoIHRoZSBhYm92ZSBjb21tYW5kIGJlZm9yZSBpbnN0YWxsaW5nIGl0IgorCQkgICRvcHRfZHJ5X3J1biB8fCAke1JNfXIgIiR0bXBkaXIiCisJCSAgY29udGludWUKKwkgICAgICAgIGZpCisJICAgICAgICBmaWxlPSIkb3V0cHV0bmFtZSIKKwkgICAgICBlbHNlCisJICAgICAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCByZWxpbmsgXGAkZmlsZSciCisJICAgICAgZmkKKwkgICAgfQorCSAgZWxzZQorCSAgICAjIEluc3RhbGwgdGhlIGJpbmFyeSB0aGF0IHdlIGNvbXBpbGVkIGVhcmxpZXIuCisJICAgIGZpbGU9YCRFQ0hPICIkZmlsZSRzdHJpcHBlZF9leHQiIHwgJFNFRCAicyVcKFteL10qXCkkJSRvYmpkaXIvXDElImAKKwkgIGZpCisJZmkKKworCSMgcmVtb3ZlIC5leGUgc2luY2UgY3lnd2luIC91c3IvYmluL2luc3RhbGwgd2lsbCBhcHBlbmQgYW5vdGhlcgorCSMgb25lIGFueXdheQorCWNhc2UgJGluc3RhbGxfcHJvZywkaG9zdCBpbgorCSovdXNyL2Jpbi9pbnN0YWxsKiwqY3lnd2luKikKKwkgIGNhc2UgJGZpbGU6JGRlc3RmaWxlIGluCisJICAqLmV4ZToqLmV4ZSkKKwkgICAgIyB0aGlzIGlzIG9rCisJICAgIDs7CisJICAqLmV4ZToqKQorCSAgICBkZXN0ZmlsZT0kZGVzdGZpbGUuZXhlCisJICAgIDs7CisJICAqOiouZXhlKQorCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRkZXN0ZmlsZSIKKwkgICAgZGVzdGZpbGU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisJZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2dcJHN0cmlwbWUgXCRmaWxlIFwkZGVzdGZpbGUiICdleGl0ICQ/JworCSRvcHRfZHJ5X3J1biB8fCBpZiB0ZXN0IC1uICIkb3V0cHV0bmFtZSI7IHRoZW4KKwkgICR7Uk19ciAiJHRtcGRpciIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgZG9uZQorCisgICAgZm9yIGZpbGUgaW4gJHN0YXRpY2xpYnM7IGRvCisgICAgICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKyAgICAgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKworICAgICAgIyBTZXQgdXAgdGhlIHJhbmxpYiBwYXJhbWV0ZXJzLgorICAgICAgb2xkbGliPSIkZGVzdGRpci8kbmFtZSIKKworICAgICAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgXCRmaWxlIFwkb2xkbGliIiAnZXhpdCAkPycKKworICAgICAgaWYgdGVzdCAtbiAiJHN0cmlwbWUiICYmIHRlc3QgLW4gIiRvbGRfc3RyaXBsaWIiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgIiRvbGRfc3RyaXBsaWIgJG9sZGxpYiIgJ2V4aXQgJD8nCisgICAgICBmaQorCisgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdGluc3RhbGwgY29tbWFuZHMuCisgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiAnZXhpdCAkPycKKyAgICBkb25lCisKKyAgICB0ZXN0IC1uICIkZnV0dXJlX2xpYmRpcnMiICYmIFwKKyAgICAgIGZ1bmNfd2FybmluZyAicmVtZW1iZXIgdG8gcnVuIFxgJHByb2duYW1lIC0tZmluaXNoJGZ1dHVyZV9saWJkaXJzJyIKKworICAgIGlmIHRlc3QgLW4gIiRjdXJyZW50X2xpYmRpcnMiOyB0aGVuCisgICAgICAjIE1heWJlIGp1c3QgZG8gYSBkcnkgcnVuLgorICAgICAgJG9wdF9kcnlfcnVuICYmIGN1cnJlbnRfbGliZGlycz0iIC1uJGN1cnJlbnRfbGliZGlycyIKKyAgICAgIGV4ZWNfY21kPSckU0hFTEwgJHByb2dwYXRoICRwcmVzZXJ2ZV9hcmdzIC0tZmluaXNoJGN1cnJlbnRfbGliZGlycycKKyAgICBlbHNlCisgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICBmaQorfQorCit0ZXN0ICIkbW9kZSIgPSBpbnN0YWxsICYmIGZ1bmNfbW9kZV9pbnN0YWxsICR7MSsiJEAifQorCisKKyMgZnVuY19nZW5lcmF0ZV9kbHN5bXMgb3V0cHV0bmFtZSBvcmlnaW5hdG9yIHBpY19wCisjIEV4dHJhY3Qgc3ltYm9scyBmcm9tIGRscHJlZmlsZXMgYW5kIGNyZWF0ZSAke291dHB1dG5hbWV9Uy5vIHdpdGgKKyMgYSBkbHByZW9wZW4gc3ltYm9sIHRhYmxlLgorZnVuY19nZW5lcmF0ZV9kbHN5bXMgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgbXlfb3V0cHV0bmFtZT0iJDEiCisgICAgbXlfb3JpZ2luYXRvcj0iJDIiCisgICAgbXlfcGljX3A9IiR7My1ub30iCisgICAgbXlfcHJlZml4PWAkRUNITyAiJG15X29yaWdpbmF0b3IiIHwgc2VkICdzJVteYS16QS1aMC05XSVfJWcnYAorICAgIG15X2Rsc3ltcz0KKworICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkTk0iICYmIHRlc3QgLW4gIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisJbXlfZGxzeW1zPSIke215X291dHB1dG5hbWV9Uy5jIgorICAgICAgZWxzZQorCWZ1bmNfZXJyb3IgIm5vdCBjb25maWd1cmVkIHRvIGV4dHJhY3QgZ2xvYmFsIHN5bWJvbHMgZnJvbSBkbHByZW9wZW5lZCBmaWxlcyIKKyAgICAgIGZpCisgICAgZmkKKworICAgIGlmIHRlc3QgLW4gIiRteV9kbHN5bXMiOyB0aGVuCisgICAgICBjYXNlICRteV9kbHN5bXMgaW4KKyAgICAgICIiKSA7OworICAgICAgKi5jKQorCSMgRGlzY292ZXIgdGhlIG5saXN0IG9mIGVhY2ggb2YgdGhlIGRsZmlsZXMuCisJbmxpc3Q9IiRvdXRwdXRfb2JqZGlyLyR7bXlfb3V0cHV0bmFtZX0ubm0iCisKKwlmdW5jX3Nob3dfZXZhbCAiJFJNICRubGlzdCAke25saXN0fVMgJHtubGlzdH1UIgorCisJIyBQYXJzZSB0aGUgbmFtZSBsaXN0IGludG8gYSBzb3VyY2UgZmlsZS4KKwlmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisKKwkkb3B0X2RyeV9ydW4gfHwgJEVDSE8gPiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKy8qICRteV9kbHN5bXMgLSBzeW1ib2wgcmVzb2x1dGlvbiB0YWJsZSBmb3IgXGAkbXlfb3V0cHV0bmFtZScgZGxzeW0gZW11bGF0aW9uLiAqLworLyogR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTiAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiBcIkNcIiB7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDQpICYmIChfX0dOVUNfTUlOT1JfXyA+PSA0KSkgfHwgKF9fR05VQ19fID4gNCkpCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3N0cmljdC1wcm90b3R5cGVzXCIKKyNlbmRpZgorCisvKiBFeHRlcm5hbCBzeW1ib2wgZGVjbGFyYXRpb25zIGZvciB0aGUgY29tcGlsZXIuICovXAorIgorCisJaWYgdGVzdCAiJGRsc2VsZiIgPSB5ZXM7IHRoZW4KKwkgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgXGAkb3V0cHV0JyIKKworCSAgJG9wdF9kcnlfcnVuIHx8IGVjaG8gJzogQFBST0dSQU1AICcgPiAiJG5saXN0IgorCisJICAjIEFkZCBvdXIgb3duIHByb2dyYW0gb2JqZWN0cyB0byB0aGUgc3ltYm9sIGxpc3QuCisJICBwcm9nZmlsZXM9YCRFQ0hPICIkb2JqcyRvbGRfZGVwbGlicyIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCisJICBmb3IgcHJvZ2ZpbGUgaW4gJHByb2dmaWxlczsgZG8KKwkgICAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSBcYCRwcm9nZmlsZSciCisJICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkTk0gJHByb2dmaWxlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKwkgIGRvbmUKKworCSAgaWYgdGVzdCAtbiAiJGV4Y2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICBldmFsICckRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworCSAgICB9CisJICBmaQorCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkbmxpc3QiID4gIiRubGlzdCJUJworCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCisJICAgIH0KKwkgIGZpCisKKwkgICMgUHJlcGFyZSB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzCisJICBpZiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHMiOyB0aGVuCisJICAgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgJFJNICRleHBvcnRfc3ltYm9scworCSAgICAgIGV2YWwgIiR7U0VEfSAtbiAtZSAnL146IEBQUk9HUkFNQCAkL2QnIC1lICdzL14uKiBcKC4qXCkkL1wxL3AnICInPCAiJG5saXN0IiA+ICIkZXhwb3J0X3N5bWJvbHMiJworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKyAgICAgICAgICAgICAgICBldmFsICJlY2hvIEVYUE9SVFMgIic+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworICAgICAgICAgICAgICAgIGV2YWwgJ2NhdCAiJGV4cG9ydF9zeW1ib2xzIiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKwkgICAgICAgIDs7CisJICAgICAgZXNhYworCSAgICB9CisJICBlbHNlCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgZXZhbCAiJHtTRUR9IC1lICdzL1woW10uWypeJF1cKS9cXFxcXDEvZycgLWUgJ3MvXi8gLycgLWUgJ3MvJC8kLyciJyA8ICIkZXhwb3J0X3N5bWJvbHMiID4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCInCisJICAgICAgZXZhbCAnJEdSRVAgLWYgIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIgPCAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorCSAgICAgICAgICBldmFsICJlY2hvIEVYUE9SVFMgIic+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworCSAgICAgICAgICBldmFsICdjYXQgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisJICAgICAgICAgIDs7CisJICAgICAgZXNhYworCSAgICB9CisJICBmaQorCWZpCisKKwlmb3IgZGxwcmVmaWxlIGluICRkbHByZWZpbGVzOyBkbworCSAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSBcYCRkbHByZWZpbGUnIgorCSAgZnVuY19iYXNlbmFtZSAiJGRscHJlZmlsZSIKKwkgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisJICAgIGV2YWwgIiROTSAkZGxwcmVmaWxlIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKwkgIH0KKwlkb25lCisKKwkkb3B0X2RyeV9ydW4gfHwgeworCSAgIyBNYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCBhbiBlbXB0eSBmaWxlLgorCSAgdGVzdCAtZiAiJG5saXN0IiB8fCA6ID4gIiRubGlzdCIKKworCSAgaWYgdGVzdCAtbiAiJGV4Y2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICAgJEVHUkVQIC12ICIgKCRleGNsdWRlX2V4cHN5bXMpJCIgIiRubGlzdCIgPiAiJG5saXN0IlQKKwkgICAgJE1WICIkbmxpc3QiVCAiJG5saXN0IgorCSAgZmkKKworCSAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KKwkgIGlmICRHUkVQIC12ICJeOiAiIDwgIiRubGlzdCIgfAorCSAgICAgIGlmIHNvcnQgLWsgMyA8L2Rldi9udWxsID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlzb3J0IC1rIDMKKwkgICAgICBlbHNlCisJCXNvcnQgKzIKKwkgICAgICBmaSB8CisJICAgICAgdW5pcSA+ICIkbmxpc3QiUzsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgICRHUkVQIC12ICJeOiAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlMKKwkgIGZpCisKKwkgIGlmIHRlc3QgLWYgIiRubGlzdCJTOyB0aGVuCisJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NkZWNsIicgPCAiJG5saXN0IlMgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiJworCSAgZWxzZQorCSAgICBlY2hvICcvKiBOT05FICovJyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKKwkgIGZpCisKKwkgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisKKy8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgdm9pZCAqYWRkcmVzczsKK30gbHRfZGxzeW1saXN0OworIgorCSAgY2FzZSAkaG9zdCBpbgorCSAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisJICAgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlCisgICBydW50aW1lIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbgorICAgb24gcHNldWRvLXJlbG9jcy4gICovIgorCSAgICBsdF9kbHN5bV9jb25zdD0gOzsKKwkgICpvc2Y1KikKKwkgICAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEgKi8iCisJICAgIGx0X2Rsc3ltX2NvbnN0PSA7OworCSAgKikKKwkgICAgbHRfZGxzeW1fY29uc3Q9Y29uc3QgOzsKKwkgIGVzYWMKKworCSAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKK2V4dGVybiAkbHRfZGxzeW1fY29uc3QgbHRfZGxzeW1saXN0CitsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW107CiskbHRfZGxzeW1fY29uc3QgbHRfZGxzeW1saXN0CitsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW10gPQore1wKKyAgeyBcIiRteV9vcmlnaW5hdG9yXCIsICh2b2lkICopIDAgfSwiCisKKwkgIGNhc2UgJG5lZWRfbGliX3ByZWZpeCBpbgorCSAgbm8pCisJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiA8ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCSAgICA7OworCSAgKikKKwkgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgPCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKKwkgICAgOzsKKwkgIGVzYWMKKwkgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisgIHswLCAodm9pZCAqKSAwfQorfTsKKworLyogVGhpcyB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIEZyZWVCU0QgbGlua2VyICovCisjaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECitzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworICByZXR1cm4gbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKK30KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZlwKKyIKKwl9ICMgISRvcHRfZHJ5X3J1bgorCisJcGljX2ZsYWdfZm9yX3N5bXRhYmxlPQorCWNhc2UgIiRjb21waWxlX2NvbW1hbmQgIiBpbgorCSoiIC1zdGF0aWMgIiopIDs7CisJKikKKwkgIGNhc2UgJGhvc3QgaW4KKwkgICMgY29tcGlsaW5nIHRoZSBzeW1ib2wgdGFibGUgZmlsZSB3aXRoIHBpY19mbGFnIHdvcmtzIGFyb3VuZAorCSAgIyBhIEZyZWVCU0QgYnVnIHRoYXQgY2F1c2VzIHByb2dyYW1zIHRvIGNyYXNoIHdoZW4gLWxtIGlzCisJICAjIGxpbmtlZCBiZWZvcmUgYW55IG90aGVyIFBJQyBvYmplY3QuICBCdXQgd2UgbXVzdCBub3QgdXNlCisJICAjIHBpY19mbGFnIHdoZW4gbGlua2luZyB3aXRoIC1zdGF0aWMuICBUaGUgcHJvYmxlbSBleGlzdHMgaW4KKwkgICMgRnJlZUJTRCAyLjIuNiBhbmQgaXMgZml4ZWQgaW4gRnJlZUJTRCAzLjEuCisJICAqLSotZnJlZWJzZDIqfCotKi1mcmVlYnNkMy4wKnwqLSotZnJlZWJzZGVsZjMuMCopCisJICAgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyAtREZSRUVCU0RfV09SS0FST1VORCIgOzsKKwkgICotKi1ocHV4KikKKwkgICAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIiAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIlgkbXlfcGljX3AiICE9IFhubzsgdGhlbgorCSAgICAgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyIKKwkgICAgZmkKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCXN5bXRhYl9jZmxhZ3M9CisJZm9yIGFyZyBpbiAkTFRDRkxBR1M7IGRvCisJICBjYXNlICRhcmcgaW4KKwkgIC1waWUgfCAtZnBpZSB8IC1mUElFKSA7OworCSAgKikgc3ltdGFiX2NmbGFncz0iJHN5bXRhYl9jZmxhZ3MgJGFyZyIgOzsKKwkgIGVzYWMKKwlkb25lCisKKwkjIE5vdyBjb21waWxlIHRoZSBkeW5hbWljIHN5bWJvbCBmaWxlLgorCWZ1bmNfc2hvd19ldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJExUQ0Mkc3ltdGFiX2NmbGFncyAtYyRub19idWlsdGluX2ZsYWckcGljX2ZsYWdfZm9yX3N5bXRhYmxlICIkbXlfZGxzeW1zIiknICdleGl0ICQ/JworCisJIyBDbGVhbiB1cCB0aGUgZ2VuZXJhdGVkIGZpbGVzLgorCWZ1bmNfc2hvd19ldmFsICckUk0gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICIkbmxpc3QiICIke25saXN0fVMiICIke25saXN0fVQiJworCisJIyBUcmFuc2Zvcm0gdGhlIHN5bWJvbCBmaWxlIGludG8gdGhlIGNvcnJlY3QgbmFtZS4KKwlzeW1maWxlb2JqPSIkb3V0cHV0X29iamRpci8ke215X291dHB1dG5hbWV9Uy4kb2JqZXh0IgorCWNhc2UgJGhvc3QgaW4KKwkqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKwkgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiI7IHRoZW4KKwkgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYgJHN5bWZpbGVvYmolImAKKwkgICAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiAkc3ltZmlsZW9iaiUiYAorCSAgZWxzZQorCSAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisJICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAorCSAgZmkKKwkgIDs7CisJKikKKwkgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAorCSAgOzsKKwllc2FjCisJOzsKKyAgICAgICopCisJZnVuY19mYXRhbF9lcnJvciAidW5rbm93biBzdWZmaXggZm9yIFxgJG15X2Rsc3ltcyciCisJOzsKKyAgICAgIGVzYWMKKyAgICBlbHNlCisgICAgICAjIFdlIGtlZXAgZ29pbmcganVzdCBpbiBjYXNlIHRoZSB1c2VyIGRpZG4ndCByZWZlciB0bworICAgICAgIyBsdF9wcmVsb2FkZWRfc3ltYm9scy4gIFRoZSBsaW5rZXIgd2lsbCBmYWlsIGlmIGdsb2JhbF9zeW1ib2xfcGlwZQorICAgICAgIyByZWFsbHkgd2FzIHJlcXVpcmVkLgorCisgICAgICAjIE51bGxpZnkgdGhlIHN5bWJvbCBmaWxlLgorICAgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJSBAU1lNRklMRUAlJSJgCisgICAgICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNFRCAicyUgQFNZTUZJTEVAJSUiYAorICAgIGZpCit9CisKKyMgZnVuY193aW4zMl9saWJpZCBhcmcKKyMgcmV0dXJuIHRoZSBsaWJyYXJ5IHR5cGUgb2YgZmlsZSAnYXJnJworIworIyBOZWVkIGEgbG90IG9mIGdvbyB0byBoYW5kbGUgKmJvdGgqIERMTHMgYW5kIGltcG9ydCBsaWJzCisjIEhhcyB0byBiZSBhIHNoZWxsIGZ1bmN0aW9uIGluIG9yZGVyIHRvICdlYXQnIHRoZSBhcmd1bWVudAorIyB0aGF0IGlzIHN1cHBsaWVkIHdoZW4gJGZpbGVfbWFnaWNfY29tbWFuZCBpcyBjYWxsZWQuCisjIERlc3BpdGUgdGhlIG5hbWUsIGFsc28gZGVhbCB3aXRoIDY0IGJpdCBiaW5hcmllcy4KK2Z1bmNfd2luMzJfbGliaWQgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICB3aW4zMl9saWJpZF90eXBlPSJ1bmtub3duIgorICB3aW4zMl9maWxlcmVzPWBmaWxlIC1MICQxIDI+L2Rldi9udWxsYAorICBjYXNlICR3aW4zMl9maWxlcmVzIGluCisgICphclwgYXJjaGl2ZVwgaW1wb3J0XCBsaWJyYXJ5KikgIyBkZWZpbml0ZWx5IGltcG9ydAorICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIGltcG9ydCIKKyAgICA7OworICAqYXJcIGFyY2hpdmUqKSAjIGNvdWxkIGJlIGFuIGltcG9ydCwgb3Igc3RhdGljCisgICAgIyBLZWVwIHRoZSBlZ3JlcCBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QuCisgICAgaWYgZXZhbCAkT0JKRFVNUCAtZiAkMSB8ICRTRUQgLWUgJzEwcScgMj4vZGV2L251bGwgfAorICAgICAgICRFR1JFUCAnZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJyA+L2Rldi9udWxsOyB0aGVuCisgICAgICB3aW4zMl9ubXJlcz1gZXZhbCAkTk0gLWYgcG9zaXggLUEgJDEgfAorCSRTRUQgLW4gLWUgJworCSAgICAxLDEwMHsKKwkJLyBJIC97CisJCSAgICBzLC4qLGltcG9ydCwKKwkJICAgIHAKKwkJICAgIHEKKwkJfQorCSAgICB9J2AKKyAgICAgIGNhc2UgJHdpbjMyX25tcmVzIGluCisgICAgICBpbXBvcnQqKSAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0Ijs7CisgICAgICAqKSAgICAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgc3RhdGljIjs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICA7OworICAqRExMKikKKyAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgRExMIgorICAgIDs7CisgICpleGVjdXRhYmxlKikgIyBidXQgc2hlbGwgc2NyaXB0cyBhcmUgImV4ZWN1dGFibGUiIHRvby4uLgorICAgIGNhc2UgJHdpbjMyX2ZpbGVyZXMgaW4KKyAgICAqTVNcIFdpbmRvd3NcIFBFXCBJbnRlbCopCisgICAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgRExMIgorICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICAkRUNITyAiJHdpbjMyX2xpYmlkX3R5cGUiCit9CisKKworCisjIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlIGRpciBvbGRsaWIKK2Z1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIGZfZXhfYW5fYXJfZGlyPSIkMSI7IHNoaWZ0CisgICAgZl9leF9hbl9hcl9vbGRsaWI9IiQxIgorICAgIGlmIHRlc3QgIiRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24iID0geWVzOyB0aGVuCisgICAgICBsb2NrZmlsZT0kZl9leF9hbl9hcl9vbGRsaWIubG9jaworICAgICAgdW50aWwgJG9wdF9kcnlfcnVuIHx8IGxuICIkcHJvZ3BhdGgiICIkbG9ja2ZpbGUiIDI+L2Rldi9udWxsOyBkbworCWZ1bmNfZWNobyAiV2FpdGluZyBmb3IgJGxvY2tmaWxlIHRvIGJlIHJlbW92ZWQiCisJc2xlZXAgMgorICAgICAgZG9uZQorICAgIGZpCisgICAgZnVuY19zaG93X2V2YWwgIihjZCBcJGZfZXhfYW5fYXJfZGlyICYmICRBUiB4IFwiXCRmX2V4X2FuX2FyX29sZGxpYlwiKSIgXAorCQkgICAnc3RhdD0kPzsgcm0gLWYgIiRsb2NrZmlsZSI7IGV4aXQgJHN0YXQnCisgICAgaWYgdGVzdCAiJGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbiIgPSB5ZXM7IHRoZW4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCBybSAtZiAiJGxvY2tmaWxlIgorICAgIGZpCisgICAgaWYgKCRBUiB0ICIkZl9leF9hbl9hcl9vbGRsaWIiIHwgc29ydCB8IHNvcnQgLXVjID4vZGV2L251bGwgMj4mMSk7IHRoZW4KKyAgICAgOgorICAgIGVsc2UKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9iamVjdCBuYW1lIGNvbmZsaWN0cyBpbiBhcmNoaXZlOiAkZl9leF9hbl9hcl9kaXIvJGZfZXhfYW5fYXJfb2xkbGliIgorICAgIGZpCit9CisKKworIyBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgZ2VudG9wIG9sZGxpYiAuLi4KK2Z1bmNfZXh0cmFjdF9hcmNoaXZlcyAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBteV9nZW50b3A9IiQxIjsgc2hpZnQKKyAgICBteV9vbGRsaWJzPSR7MSsiJEAifQorICAgIG15X29sZG9ianM9IiIKKyAgICBteV94bGliPSIiCisgICAgbXlfeGFicz0iIgorICAgIG15X3hkaXI9IiIKKworICAgIGZvciBteV94bGliIGluICRteV9vbGRsaWJzOyBkbworICAgICAgIyBFeHRyYWN0IHRoZSBvYmplY3RzLgorICAgICAgY2FzZSAkbXlfeGxpYiBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgbXlfeGFicz0iJG15X3hsaWIiIDs7CisJKikgbXlfeGFicz1gcHdkYCIvJG15X3hsaWIiIDs7CisgICAgICBlc2FjCisgICAgICBmdW5jX2Jhc2VuYW1lICIkbXlfeGxpYiIKKyAgICAgIG15X3hsaWI9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICAgIG15X3hsaWJfdT0kbXlfeGxpYgorICAgICAgd2hpbGUgOjsgZG8KKyAgICAgICAgY2FzZSAiICRleHRyYWN0ZWRfYXJjaGl2ZXMgIiBpbgorCSoiICRteV94bGliX3UgIiopCisJICBmdW5jX2FyaXRoICRleHRyYWN0ZWRfc2VyaWFsICsgMQorCSAgZXh0cmFjdGVkX3NlcmlhbD0kZnVuY19hcml0aF9yZXN1bHQKKwkgIG15X3hsaWJfdT1sdCRleHRyYWN0ZWRfc2VyaWFsLSRteV94bGliIDs7CisJKikgYnJlYWsgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBleHRyYWN0ZWRfYXJjaGl2ZXM9IiRleHRyYWN0ZWRfYXJjaGl2ZXMgJG15X3hsaWJfdSIKKyAgICAgIG15X3hkaXI9IiRteV9nZW50b3AvJG15X3hsaWJfdSIKKworICAgICAgZnVuY19ta2Rpcl9wICIkbXlfeGRpciIKKworICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKi1kYXJ3aW4qKQorCWZ1bmNfdmVyYm9zZSAiRXh0cmFjdGluZyAkbXlfeGFicyIKKwkjIERvIG5vdCBib3RoZXIgZG9pbmcgYW55dGhpbmcgaWYganVzdCBhIGRyeSBydW4KKwkkb3B0X2RyeV9ydW4gfHwgeworCSAgZGFyd2luX29yaWdfZGlyPWBwd2RgCisJICBjZCAkbXlfeGRpciB8fCBleGl0ICQ/CisJICBkYXJ3aW5fYXJjaGl2ZT0kbXlfeGFicworCSAgZGFyd2luX2N1cmRpcj1gcHdkYAorCSAgZGFyd2luX2Jhc2VfYXJjaGl2ZT1gYmFzZW5hbWUgIiRkYXJ3aW5fYXJjaGl2ZSJgCisJICBkYXJ3aW5fYXJjaGVzPWAkTElQTyAtaW5mbyAiJGRhcndpbl9hcmNoaXZlIiAyPi9kZXYvbnVsbCB8ICRHUkVQIEFyY2hpdGVjdHVyZXMgMj4vZGV2L251bGwgfHwgdHJ1ZWAKKwkgIGlmIHRlc3QgLW4gIiRkYXJ3aW5fYXJjaGVzIjsgdGhlbgorCSAgICBkYXJ3aW5fYXJjaGVzPWAkRUNITyAiJGRhcndpbl9hcmNoZXMiIHwgJFNFRCAtZSAncy8uKmFyZTovLydgCisJICAgIGRhcndpbl9hcmNoPQorCSAgICBmdW5jX3ZlcmJvc2UgIiRkYXJ3aW5fYmFzZV9hcmNoaXZlIGhhcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzICRkYXJ3aW5fYXJjaGVzIgorCSAgICBmb3IgZGFyd2luX2FyY2ggaW4gICRkYXJ3aW5fYXJjaGVzIDsgZG8KKwkgICAgICBmdW5jX21rZGlyX3AgInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0iCisJICAgICAgJExJUE8gLXRoaW4gJGRhcndpbl9hcmNoIC1vdXRwdXQgInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0vJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfSIgIiR7ZGFyd2luX2FyY2hpdmV9IgorCSAgICAgIGNkICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9IgorCSAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICJgcHdkYCIgIiR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iCisJICAgICAgY2QgIiRkYXJ3aW5fY3VyZGlyIgorCSAgICAgICRSTSAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofS8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9IgorCSAgICBkb25lICMgJGRhcndpbl9hcmNoZXMKKyAgICAgICAgICAgICMjIE9rYXkgbm93IHdlJ3ZlIGEgYnVuY2ggb2YgdGhpbiBvYmplY3RzLCBnb3R0YSBmYXR0ZW4gdGhlbSB1cCA6KQorCSAgICBkYXJ3aW5fZmlsZWxpc3Q9YGZpbmQgdW5mYXQtJCQgLXR5cGUgZiAtbmFtZSBcKi5vIC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCAkU0VEIC1lICIkYmFzZW5hbWUiIHwgc29ydCAtdWAKKwkgICAgZGFyd2luX2ZpbGU9CisJICAgIGRhcndpbl9maWxlcz0KKwkgICAgZm9yIGRhcndpbl9maWxlIGluICRkYXJ3aW5fZmlsZWxpc3Q7IGRvCisJICAgICAgZGFyd2luX2ZpbGVzPWBmaW5kIHVuZmF0LSQkIC1uYW1lICRkYXJ3aW5fZmlsZSAtcHJpbnQgfCBzb3J0IHwgJE5MMlNQYAorCSAgICAgICRMSVBPIC1jcmVhdGUgLW91dHB1dCAiJGRhcndpbl9maWxlIiAkZGFyd2luX2ZpbGVzCisJICAgIGRvbmUgIyAkZGFyd2luX2ZpbGVsaXN0CisJICAgICRSTSAtcmYgdW5mYXQtJCQKKwkgICAgY2QgIiRkYXJ3aW5fb3JpZ19kaXIiCisJICBlbHNlCisJICAgIGNkICRkYXJ3aW5fb3JpZ19kaXIKKwkgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgIiRteV94ZGlyIiAiJG15X3hhYnMiCisJICBmaSAjICRkYXJ3aW5fYXJjaGVzCisJfSAjICEkb3B0X2RyeV9ydW4KKwk7OworICAgICAgKikKKyAgICAgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgIiRteV94ZGlyIiAiJG15X3hhYnMiCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIG15X29sZG9ianM9IiRteV9vbGRvYmpzICJgZmluZCAkbXlfeGRpciAtbmFtZSBcKi4kb2JqZXh0IC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCBzb3J0IHwgJE5MMlNQYAorICAgIGRvbmUKKworICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQ9IiRteV9vbGRvYmpzIgorfQorCisKKyMgZnVuY19lbWl0X3dyYXBwZXIgW2FyZz1ub10KKyMKKyMgRW1pdCBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgb24gc3Rkb3V0LgorIyBEb24ndCBkaXJlY3RseSBvcGVuIGEgZmlsZSBiZWNhdXNlIHdlIG1heSB3YW50IHRvCisjIGluY29ycG9yYXRlIHRoZSBzY3JpcHQgY29udGVudHMgd2l0aGluIGEgY3lnd2luL21pbmd3CisjIHdyYXBwZXIgZXhlY3V0YWJsZS4gIE11c3QgT05MWSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4KKyMgZnVuY19tb2RlX2xpbmsgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIGEgbnVtYmVyIG9mIHZhcmlhYmxlcworIyBzZXQgdGhlcmVpbi4KKyMKKyMgQVJHIGlzIHRoZSB2YWx1ZSB0aGF0IHRoZSBXUkFQUEVSX1NDUklQVF9CRUxPTkdTX0lOX09CSkRJUgorIyB2YXJpYWJsZSB3aWxsIHRha2UuICBJZiAneWVzJywgdGhlbiB0aGUgZW1pdHRlZCBzY3JpcHQKKyMgd2lsbCBhc3N1bWUgdGhhdCB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIGl0IGlzIHN0b3JlZCBpcworIyB0aGUgJG9iamRpciBkaXJlY3RvcnkuICBUaGlzIGlzIGEgY3lnd2luL21pbmd3LXNwZWNpZmljCisjIGJlaGF2aW9yLgorZnVuY19lbWl0X3dyYXBwZXIgKCkKK3sKKwlmdW5jX2VtaXRfd3JhcHBlcl9hcmcxPSR7MS1ub30KKworCSRFQ0hPICJcCisjISAkU0hFTEwKKworIyAkb3V0cHV0IC0gdGVtcG9yYXJ5IHdyYXBwZXIgc2NyaXB0IGZvciAkb2JqZGlyLyRvdXRwdXRuYW1lCisjIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMKKyMgVGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5ub3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwgYWxsIHRoZSBsaWJ0b29sCisjIGxpYnJhcmllcyB0aGF0IGl0IGRlcGVuZHMgb24gYXJlIGluc3RhbGxlZC4KKyMKKyMgVGhpcyB3cmFwcGVyIHNjcmlwdCBzaG91bGQgbmV2ZXIgYmUgbW92ZWQgb3V0IG9mIHRoZSBidWlsZCBkaXJlY3RvcnkuCisjIElmIGl0IGlzLCBpdCB3aWxsIG5vdCBvcGVyYXRlIGNvcnJlY3RseS4KKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcworIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK3NlZF9xdW90ZV9zdWJzdD0nJHNlZF9xdW90ZV9zdWJzdCcKKworIyBCZSBCb3VybmUgY29tcGF0aWJsZQoraWYgdGVzdCAtbiBcIlwke1pTSF9WRVJTSU9OK3NldH1cIiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uIFwkezErXCJcJEBcIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICdcJHsxK1wiXCRAXCJ9Jz0nXCJcJEBcIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBcYChzZXQgLW8pIDI+L2Rldi9udWxsXGAgaW4gKnBvc2l4Kikgc2V0IC1vIHBvc2l4OzsgZXNhYworZmkKK0JJTl9TSD14cGc0OyBleHBvcnQgQklOX1NIICMgZm9yIFRydTY0CitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCisKKyMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0CisjIGlmIENEUEFUSCBpcyBzZXQuCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK3JlbGlua19jb21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIKKworIyBUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGRldGVybWluZXMgb3VyIG9wZXJhdGlvbiBtb2RlLgoraWYgdGVzdCBcIlwkbGlidG9vbF9pbnN0YWxsX21hZ2ljXCIgPSBcIiRtYWdpY1wiOyB0aGVuCisgICMgaW5zdGFsbCBtb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorICBnZW5lcmF0ZWRfYnlfbGlidG9vbF92ZXJzaW9uPSckbWFjcm9fdmVyc2lvbicKKyAgbm90aW5zdF9kZXBsaWJzPSckbm90aW5zdF9kZXBsaWJzJworZWxzZQorICAjIFdoZW4gd2UgYXJlIHNvdXJjZWQgaW4gZXhlY3V0ZSBtb2RlLCBcJGZpbGUgYW5kIFwkRUNITyBhcmUgYWxyZWFkeSBzZXQuCisgIGlmIHRlc3QgXCJcJGxpYnRvb2xfZXhlY3V0ZV9tYWdpY1wiICE9IFwiJG1hZ2ljXCI7IHRoZW4KKyAgICBmaWxlPVwiXCQwXCIiCisKKyAgICBxRUNITz1gJEVDSE8gIiRFQ0hPIiB8ICRTRUQgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgICRFQ0hPICJcCisKKyMgQSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBubyBwcmludCBidWlsdGluIG9yIHByaW50Zi4KK2Z1bmNfZmFsbGJhY2tfZWNobyAoKQoreworICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorXCQxCitfTFRFQ0hPX0VPRicKK30KKyAgICBFQ0hPPVwiJHFFQ0hPXCIKKyAgZmkKKworIyBWZXJ5IGJhc2ljIG9wdGlvbiBwYXJzaW5nLiBUaGVzZSBvcHRpb25zIGFyZSAoYSkgc3BlY2lmaWMgdG8KKyMgdGhlIGxpYnRvb2wgd3JhcHBlciwgKGIpIGFyZSBpZGVudGljYWwgYmV0d2VlbiB0aGUgd3JhcHBlcgorIyAvc2NyaXB0LyBhbmQgdGhlIHdyYXBwZXIgL2V4ZWN1dGFibGUvIHdoaWNoIGlzIHVzZWQgb25seSBvbgorIyB3aW5kb3dzIHBsYXRmb3JtcywgYW5kIChjKSBhbGwgYmVnaW4gd2l0aCB0aGUgc3RyaW5nICItLWx0LSIKKyMgKGFwcGxpY2F0aW9uIHByb2dyYW1zIGFyZSB1bmxpa2VseSB0byBoYXZlIG9wdGlvbnMgd2hpY2ggbWF0Y2gKKyMgdGhpcyBwYXR0ZXJuKS4KKyMKKyMgVGhlcmUgYXJlIG9ubHkgdHdvIHN1cHBvcnRlZCBvcHRpb25zOiAtLWx0LWRlYnVnIGFuZAorIyAtLWx0LWR1bXAtc2NyaXB0LiBUaGVyZSBpcywgZGVsaWJlcmF0ZWx5LCBubyAtLWx0LWhlbHAuCisjCisjIFRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGlzIHBhcnNpbmcgZnVuY3Rpb24gc2hvdWxkIGJlIHRoZQorIyBzY3JpcHQncyAkMCB2YWx1ZSwgZm9sbG93ZWQgYnkgIiRAIi4KK2x0X29wdGlvbl9kZWJ1Zz0KK2Z1bmNfcGFyc2VfbHRfb3B0aW9ucyAoKQoreworICBsdF9zY3JpcHRfYXJnMD1cJDAKKyAgc2hpZnQKKyAgZm9yIGx0X29wdAorICBkbworICAgIGNhc2UgXCJcJGx0X29wdFwiIGluCisgICAgLS1sdC1kZWJ1ZykgbHRfb3B0aW9uX2RlYnVnPTEgOzsKKyAgICAtLWx0LWR1bXAtc2NyaXB0KQorICAgICAgICBsdF9kdW1wX0Q9XGBcJEVDSE8gXCJYXCRsdF9zY3JpcHRfYXJnMFwiIHwgJFNFRCAtZSAncy9eWC8vJyAtZSAncyUvW14vXSokJSUnXGAKKyAgICAgICAgdGVzdCBcIlhcJGx0X2R1bXBfRFwiID0gXCJYXCRsdF9zY3JpcHRfYXJnMFwiICYmIGx0X2R1bXBfRD0uCisgICAgICAgIGx0X2R1bXBfRj1cYFwkRUNITyBcIlhcJGx0X3NjcmlwdF9hcmcwXCIgfCAkU0VEIC1lICdzL15YLy8nIC1lICdzJV4uKi8lJSdcYAorICAgICAgICBjYXQgXCJcJGx0X2R1bXBfRC9cJGx0X2R1bXBfRlwiCisgICAgICAgIGV4aXQgMAorICAgICAgOzsKKyAgICAtLWx0LSopCisgICAgICAgIFwkRUNITyBcIlVucmVjb2duaXplZCAtLWx0LSBvcHRpb246ICdcJGx0X29wdCdcIiAxPiYyCisgICAgICAgIGV4aXQgMQorICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAjIFByaW50IHRoZSBkZWJ1ZyBiYW5uZXIgaW1tZWRpYXRlbHk6CisgIGlmIHRlc3QgLW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCisgICAgZWNobyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IGxpYnRvb2wgd3JhcHBlciAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT05cIiAxPiYyCisgIGZpCit9CisKKyMgVXNlZCB3aGVuIC0tbHQtZGVidWcuIFByaW50cyBpdHMgYXJndW1lbnRzIHRvIHN0ZG91dAorIyAocmVkaXJlY3Rpb24gaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIpCitmdW5jX2x0X2R1bXBfYXJncyAoKQoreworICBsdF9kdW1wX2FyZ3NfTj0xOworICBmb3IgbHRfYXJnCisgIGRvCisgICAgXCRFQ0hPIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbmV3YXJndltcJGx0X2R1bXBfYXJnc19OXTogXCRsdF9hcmdcIgorICAgIGx0X2R1bXBfYXJnc19OPVxgZXhwciBcJGx0X2R1bXBfYXJnc19OICsgMVxgCisgIGRvbmUKK30KKworIyBDb3JlIGZ1bmN0aW9uIGZvciBsYXVuY2hpbmcgdGhlIHRhcmdldCBhcHBsaWNhdGlvbgorZnVuY19leGVjX3Byb2dyYW1fY29yZSAoKQoreworIgorICBjYXNlICRob3N0IGluCisgICMgQmFja3NsYXNoZXMgc2VwYXJhdGUgZGlyZWN0b3JpZXMgb24gcGxhaW4gd2luZG93cworICAqLSotbWluZ3cgfCAqLSotb3MyKiB8ICotY2VnY2MqKQorICAgICRFQ0hPICJcCisgICAgICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgorICAgICAgICBcJEVDSE8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBuZXdhcmd2WzBdOiBcJHByb2dkaXJcXFxcXCRwcm9ncmFtXCIgMT4mMgorICAgICAgICBmdW5jX2x0X2R1bXBfYXJncyBcJHsxK1wiXCRAXCJ9IDE+JjIKKyAgICAgIGZpCisgICAgICBleGVjIFwiXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KKyIKKyAgICA7OworCisgICopCisgICAgJEVDSE8gIlwKKyAgICAgIGlmIHRlc3QgLW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCisgICAgICAgIFwkRUNITyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IG5ld2FyZ3ZbMF06IFwkcHJvZ2Rpci9cJHByb2dyYW1cIiAxPiYyCisgICAgICAgIGZ1bmNfbHRfZHVtcF9hcmdzIFwkezErXCJcJEBcIn0gMT4mMgorICAgICAgZmkKKyAgICAgIGV4ZWMgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQorIgorICAgIDs7CisgIGVzYWMKKyAgJEVDSE8gIlwKKyAgICAgIFwkRUNITyBcIlwkMDogY2Fubm90IGV4ZWMgXCRwcm9ncmFtIFwkKlwiIDE+JjIKKyAgICAgIGV4aXQgMQorfQorCisjIEEgZnVuY3Rpb24gdG8gZW5jYXBzdWxhdGUgbGF1bmNoaW5nIHRoZSB0YXJnZXQgYXBwbGljYXRpb24KKyMgU3RyaXBzIG9wdGlvbnMgaW4gdGhlIC0tbHQtKiBuYW1lc3BhY2UgZnJvbSBcJEAgYW5kCisjIGxhdW5jaGVzIHRhcmdldCBhcHBsaWNhdGlvbiB3aXRoIHRoZSByZW1haW5pbmcgYXJndW1lbnRzLgorZnVuY19leGVjX3Byb2dyYW0gKCkKK3sKKyAgZm9yIGx0X3dyX2FyZworICBkbworICAgIGNhc2UgXCRsdF93cl9hcmcgaW4KKyAgICAtLWx0LSopIDs7CisgICAgKikgc2V0IHggXCJcJEBcIiBcIlwkbHRfd3JfYXJnXCI7IHNoaWZ0OzsKKyAgICBlc2FjCisgICAgc2hpZnQKKyAgZG9uZQorICBmdW5jX2V4ZWNfcHJvZ3JhbV9jb3JlIFwkezErXCJcJEBcIn0KK30KKworICAjIFBhcnNlIG9wdGlvbnMKKyAgZnVuY19wYXJzZV9sdF9vcHRpb25zIFwiXCQwXCIgXCR7MStcIlwkQFwifQorCisgICMgRmluZCB0aGUgZGlyZWN0b3J5IHRoYXQgdGhpcyBzY3JpcHQgbGl2ZXMgaW4uCisgIHRoaXNkaXI9XGBcJEVDSE8gXCJcJGZpbGVcIiB8ICRTRUQgJ3MlL1teL10qJCUlJ1xgCisgIHRlc3QgXCJ4XCR0aGlzZGlyXCIgPSBcInhcJGZpbGVcIiAmJiB0aGlzZGlyPS4KKworICAjIEZvbGxvdyBzeW1ib2xpYyBsaW5rcyB1bnRpbCB3ZSBnZXQgdG8gdGhlIHJlYWwgdGhpc2Rpci4KKyAgZmlsZT1cYGxzIC1sZCBcIlwkZmlsZVwiIHwgJFNFRCAtbiAncy8uKi0+IC8vcCdcYAorICB3aGlsZSB0ZXN0IC1uIFwiXCRmaWxlXCI7IGRvCisgICAgZGVzdGRpcj1cYFwkRUNITyBcIlwkZmlsZVwiIHwgJFNFRCAncyUvW14vXSpcJCUlJ1xgCisKKyAgICAjIElmIHRoZXJlIHdhcyBhIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gY2hhbmdlIHRoaXNkaXIuCisgICAgaWYgdGVzdCBcInhcJGRlc3RkaXJcIiAhPSBcInhcJGZpbGVcIjsgdGhlbgorICAgICAgY2FzZSBcIlwkZGVzdGRpclwiIGluCisgICAgICBbXFxcXC9dKiB8IFtBLVphLXpdOltcXFxcL10qKSB0aGlzZGlyPVwiXCRkZXN0ZGlyXCIgOzsKKyAgICAgICopIHRoaXNkaXI9XCJcJHRoaXNkaXIvXCRkZXN0ZGlyXCIgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorCisgICAgZmlsZT1cYFwkRUNITyBcIlwkZmlsZVwiIHwgJFNFRCAncyVeLiovJSUnXGAKKyAgICBmaWxlPVxgbHMgLWxkIFwiXCR0aGlzZGlyL1wkZmlsZVwiIHwgJFNFRCAtbiAncy8uKi0+IC8vcCdcYAorICBkb25lCisKKyAgIyBVc3VhbGx5ICdubycsIGV4Y2VwdCBvbiBjeWd3aW4vbWluZ3cgd2hlbiBlbWJlZGRlZCBpbnRvCisgICMgdGhlIGN3cmFwcGVyLgorICBXUkFQUEVSX1NDUklQVF9CRUxPTkdTX0lOX09CSkRJUj0kZnVuY19lbWl0X3dyYXBwZXJfYXJnMQorICBpZiB0ZXN0IFwiXCRXUkFQUEVSX1NDUklQVF9CRUxPTkdTX0lOX09CSkRJUlwiID0gXCJ5ZXNcIjsgdGhlbgorICAgICMgc3BlY2lhbCBjYXNlIGZvciAnLicKKyAgICBpZiB0ZXN0IFwiXCR0aGlzZGlyXCIgPSBcIi5cIjsgdGhlbgorICAgICAgdGhpc2Rpcj1cYHB3ZFxgCisgICAgZmkKKyAgICAjIHJlbW92ZSAubGlicyBmcm9tIHRoaXNkaXIKKyAgICBjYXNlIFwiXCR0aGlzZGlyXCIgaW4KKyAgICAqW1xcXFwvXSRvYmpkaXIgKSB0aGlzZGlyPVxgXCRFQ0hPIFwiXCR0aGlzZGlyXCIgfCAkU0VEICdzJVtcXFxcL11bXlxcXFwvXSokJSUnXGAgOzsKKyAgICAkb2JqZGlyICkgICB0aGlzZGlyPS4gOzsKKyAgICBlc2FjCisgIGZpCisKKyAgIyBUcnkgdG8gZ2V0IHRoZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZS4KKyAgYWJzZGlyPVxgY2QgXCJcJHRoaXNkaXJcIiAmJiBwd2RcYAorICB0ZXN0IC1uIFwiXCRhYnNkaXJcIiAmJiB0aGlzZGlyPVwiXCRhYnNkaXJcIgorIgorCisJaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkgICRFQ0hPICJcCisgIHByb2dyYW09bHQtJyRvdXRwdXRuYW1lJyRleGVleHQKKyAgcHJvZ2Rpcj1cIlwkdGhpc2Rpci8kb2JqZGlyXCIKKworICBpZiB0ZXN0ICEgLWYgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgfHwKKyAgICAgeyBmaWxlPVxgbHMgLTFkdCBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiBcIlwkcHJvZ2Rpci8uLi9cJHByb2dyYW1cIiAyPi9kZXYvbnVsbCB8ICR7U0VEfSAxcVxgOyBcXAorICAgICAgIHRlc3QgXCJYXCRmaWxlXCIgIT0gXCJYXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB9OyB0aGVuCisKKyAgICBmaWxlPVwiXCRcJC1cJHByb2dyYW1cIgorCisgICAgaWYgdGVzdCAhIC1kIFwiXCRwcm9nZGlyXCI7IHRoZW4KKyAgICAgICRNS0RJUiBcIlwkcHJvZ2RpclwiCisgICAgZWxzZQorICAgICAgJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCisgICAgZmkiCisKKwkgICRFQ0hPICJcCisKKyAgICAjIHJlbGluayBleGVjdXRhYmxlIGlmIG5lY2Vzc2FyeQorICAgIGlmIHRlc3QgLW4gXCJcJHJlbGlua19jb21tYW5kXCI7IHRoZW4KKyAgICAgIGlmIHJlbGlua19jb21tYW5kX291dHB1dD1cYGV2YWwgXCRyZWxpbmtfY29tbWFuZCAyPiYxXGA7IHRoZW4gOgorICAgICAgZWxzZQorCSRFQ0hPIFwiXCRyZWxpbmtfY29tbWFuZF9vdXRwdXRcIiA+JjIKKwkkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKwlleGl0IDEKKyAgICAgIGZpCisgICAgZmkKKworICAgICRNViBcIlwkcHJvZ2Rpci9cJGZpbGVcIiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiAyPi9kZXYvbnVsbCB8fAorICAgIHsgJFJNIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOworICAgICAgJE1WIFwiXCRwcm9nZGlyL1wkZmlsZVwiIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB9CisgICAgJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCisgIGZpIgorCWVsc2UKKwkgICRFQ0hPICJcCisgIHByb2dyYW09JyRvdXRwdXRuYW1lJworICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgorIgorCWZpCisKKwkkRUNITyAiXAorCisgIGlmIHRlc3QgLWYgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7IHRoZW4iCisKKwkjIEV4cG9ydCBvdXIgc2hsaWJwYXRoX3ZhciBpZiB3ZSBoYXZlIG9uZS4KKwlpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCisJICAkRUNITyAiXAorICAgICMgQWRkIG91ciBvd24gbGlicmFyeSBwYXRoIHRvICRzaGxpYnBhdGhfdmFyCisgICAgJHNobGlicGF0aF92YXI9XCIkdGVtcF9ycGF0aFwkJHNobGlicGF0aF92YXJcIgorCisgICAgIyBTb21lIHN5c3RlbXMgY2Fubm90IGNvcGUgd2l0aCBjb2xvbi10ZXJtaW5hdGVkICRzaGxpYnBhdGhfdmFyCisgICAgIyBUaGUgc2Vjb25kIGNvbG9uIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gQmVPUyBSNCBzZWQKKyAgICAkc2hsaWJwYXRoX3Zhcj1cYFwkRUNITyBcIlwkJHNobGlicGF0aF92YXJcIiB8ICRTRUQgJ3MvOjoqXCQvLydcYAorCisgICAgZXhwb3J0ICRzaGxpYnBhdGhfdmFyCisiCisJZmkKKworCSMgZml4dXAgdGhlIGRsbCBzZWFyY2hwYXRoIGlmIHdlIG5lZWQgdG8uCisJaWYgdGVzdCAtbiAiJGRsbHNlYXJjaHBhdGgiOyB0aGVuCisJICAkRUNITyAiXAorICAgICMgQWRkIHRoZSBkbGwgc2VhcmNoIHBhdGggY29tcG9uZW50cyB0byB0aGUgZXhlY3V0YWJsZSBQQVRICisgICAgUEFUSD0kZGxsc2VhcmNocGF0aDpcJFBBVEgKKyIKKwlmaQorCisJJEVDSE8gIlwKKyAgICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCisgICAgICAjIFJ1biB0aGUgYWN0dWFsIHByb2dyYW0gd2l0aCBvdXIgYXJndW1lbnRzLgorICAgICAgZnVuY19leGVjX3Byb2dyYW0gXCR7MStcIlwkQFwifQorICAgIGZpCisgIGVsc2UKKyAgICAjIFRoZSBwcm9ncmFtIGRvZXNuJ3QgZXhpc3QuCisgICAgXCRFQ0hPIFwiXCQwOiBlcnJvcjogXFxcYFwkcHJvZ2Rpci9cJHByb2dyYW0nIGRvZXMgbm90IGV4aXN0XCIgMT4mMgorICAgIFwkRUNITyBcIlRoaXMgc2NyaXB0IGlzIGp1c3QgYSB3cmFwcGVyIGZvciBcJHByb2dyYW0uXCIgMT4mMgorICAgIFwkRUNITyBcIlNlZSB0aGUgJFBBQ0tBR0UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIiAxPiYyCisgICAgZXhpdCAxCisgIGZpCitmaVwKKyIKK30KKworCisjIGZ1bmNfdG9faG9zdF9wYXRoIGFyZworIworIyBDb252ZXJ0IHBhdGhzIHRvIGhvc3QgZm9ybWF0IHdoZW4gdXNlZCB3aXRoIGJ1aWxkIHRvb2xzLgorIyBJbnRlbmRlZCBmb3IgdXNlIHdpdGggIm5hdGl2ZSIgbWluZ3cgKHdoZXJlIGxpYnRvb2wgaXRzZWxmCisjIGlzIHJ1bm5pbmcgdW5kZXIgdGhlIG1zeXMgc2hlbGwpLCBvciBpbiB0aGUgZm9sbG93aW5nIGNyb3NzLQorIyBidWlsZCBlbnZpcm9ubWVudHM6CisjICAgICRidWlsZCAgICAgICAgICAkaG9zdAorIyAgICBtaW5ndyAobXN5cykgICAgbWluZ3cgIFtlLmcuIG5hdGl2ZV0KKyMgICAgY3lnd2luICAgICAgICAgIG1pbmd3CisjICAgICpuaXggKyB3aW5lICAgICBtaW5ndworIyB3aGVyZSB3aW5lIGlzIGVxdWlwcGVkIHdpdGggdGhlIGB3aW5lcGF0aCcgZXhlY3V0YWJsZS4KKyMgSW4gdGhlIG5hdGl2ZSBtaW5ndyBjYXNlLCB0aGUgKG1zeXMpIHNoZWxsIGF1dG9tYXRpY2FsbHkKKyMgY29udmVydHMgcGF0aHMgZm9yIGFueSBub24tbXN5cyBhcHBsaWNhdGlvbnMgaXQgbGF1bmNoZXMsCisjIGJ1dCB0aGF0IGZhY2lsaXR5IGlzbid0IGF2YWlsYWJsZSBmcm9tIGluc2lkZSB0aGUgY3dyYXBwZXIuCisjIFNpbWlsYXIgYWNjb21tb2RhdGlvbnMgYXJlIG5lY2Vzc2FyeSBmb3IgJGhvc3QgbWluZ3cgYW5kCisjICRidWlsZCBjeWd3aW4uICBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gZG9lcyBubyBoYXJtIGZvciBvdGhlcgorIyAkaG9zdC8kYnVpbGQgY29tYmluYXRpb25zIG5vdCBsaXN0ZWQgYWJvdmUuCisjCisjIEFSRyBpcyB0aGUgcGF0aCAob24gJGJ1aWxkKSB0aGF0IHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8KKyMgdGhlIHByb3BlciByZXByZXNlbnRhdGlvbiBmb3IgJGhvc3QuIFRoZSByZXN1bHQgaXMgc3RvcmVkCisjIGluICRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCitmdW5jX3RvX2hvc3RfcGF0aCAoKQoreworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICBjYXNlICRob3N0IGluCisgICAgICAqbWluZ3cqICkKKyAgICAgICAgbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeT0nc3xcXFxcKnxcXHxnO3N8L3xcXHxnO3N8XFx8XFxcXHxnJworICAgICAgICBjYXNlICRidWlsZCBpbgorICAgICAgICAgICptaW5ndyogKSAjIGFjdHVhbGx5LCBtc3lzCisgICAgICAgICAgICAjIGF3a3dhcmQ6IGNtZCBhcHBlbmRzIHNwYWNlcyB0byByZXN1bHQKKyAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gKCBjbWQgLy9jIGVjaG8gIiQxIiApIDI+L2Rldi9udWxsIHwKKyAgICAgICAgICAgICAgJFNFRCAtZSAncy9bIF0qJC8vJyAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorICAgICAgICAgICAgOzsKKyAgICAgICAgICAqY3lnd2luKiApCisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YGN5Z3BhdGggLXcgIiQxIiB8CisJICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorICAgICAgICAgICAgOzsKKyAgICAgICAgICAqICkKKyAgICAgICAgICAgICMgVW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lcyBub3QgZXhpdCB3aXRoIGEgbm9uLXplcm8KKyAgICAgICAgICAgICMgZXJyb3IgY29kZSwgc28gd2UgYXJlIGZvcmNlZCB0byBjaGVjayB0aGUgY29udGVudHMgb2YKKyAgICAgICAgICAgICMgc3Rkb3V0LiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlIGNvbW1hbmQgaXMgbm90CisgICAgICAgICAgICAjIGZvdW5kLCB0aGUgc2hlbGwgd2lsbCBzZXQgYW4gZXhpdCBjb2RlIG9mIDEyNyBhbmQgcHJpbnQKKyAgICAgICAgICAgICMgKmFuIGVycm9yIG1lc3NhZ2UqIHRvIHN0ZG91dC4gU28gd2UgbXVzdCBjaGVjayBmb3IgYm90aAorICAgICAgICAgICAgIyBlcnJvciBjb2RlIG9mIHplcm8gQU5EIG5vbi1lbXB0eSBzdGRvdXQsIHdoaWNoIGV4cGxhaW5zCisgICAgICAgICAgICAjIHRoZSBvZGQgY29uc3RydWN0aW9uOgorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT1gd2luZXBhdGggLXcgIiQxIiAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgIGlmIHRlc3QgIiQ/IiAtZXEgMCAmJiB0ZXN0IC1uICIke2Z1bmNfdG9faG9zdF9wYXRoX3RtcDF9IjsgdGhlbgorICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YCRFQ0hPICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgfAorICAgICAgICAgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIyBBbGxvdyB3YXJuaW5nIGJlbG93LgorICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9CisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IiA7IHRoZW4KKyAgICAgICAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIGhvc3QgcGF0aCBjb3JyZXNwb25kaW5nIHRvIgorICAgICAgICAgIGZ1bmNfZXJyb3IgIiAgXGAkMSciCisgICAgICAgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCisgICAgICAgICAgIyBGYWxsYmFjazoKKyAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICAgICAgICBmaQorICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKK30KKyMgZW5kOiBmdW5jX3RvX2hvc3RfcGF0aAorCisjIGZ1bmNfdG9faG9zdF9wYXRobGlzdCBhcmcKKyMKKyMgQ29udmVydCBwYXRobGlzdHMgdG8gaG9zdCBmb3JtYXQgd2hlbiB1c2VkIHdpdGggYnVpbGQgdG9vbHMuCisjIFNlZSBmdW5jX3RvX2hvc3RfcGF0aCgpLCBhYm92ZS4gVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyB0aGUKKyMgZm9sbG93aW5nICRidWlsZC8kaG9zdCBjb21iaW5hdGlvbnMgKGJ1dCBkb2VzIG5vIGhhcm0gZm9yCisjIGNvbWJpbmF0aW9ucyBub3QgbGlzdGVkIGhlcmUpOgorIyAgICAkYnVpbGQgICAgICAgICAgJGhvc3QKKyMgICAgbWluZ3cgKG1zeXMpICAgIG1pbmd3ICBbZS5nLiBuYXRpdmVdCisjICAgIGN5Z3dpbiAgICAgICAgICBtaW5ndworIyAgICAqbml4ICsgd2luZSAgICAgbWluZ3cKKyMKKyMgUGF0aCBzZXBhcmF0b3JzIGFyZSBhbHNvIGNvbnZlcnRlZCBmcm9tICRidWlsZCBmb3JtYXQgdG8KKyMgJGhvc3QgZm9ybWF0LiBJZiBBUkcgYmVnaW5zIG9yIGVuZHMgd2l0aCBhIHBhdGggc2VwYXJhdG9yCisjIGNoYXJhY3RlciwgaXQgaXMgcHJlc2VydmVkIChidXQgY29udmVydGVkIHRvICRob3N0IGZvcm1hdCkKKyMgb24gb3V0cHV0LgorIworIyBBUkcgaXMgYSBwYXRobGlzdCAob24gJGJ1aWxkKSB0aGF0IHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8KKyMgdGhlIHByb3BlciByZXByZXNlbnRhdGlvbiBvbiAkaG9zdC4gVGhlIHJlc3VsdCBpcyBzdG9yZWQKKyMgaW4gJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQuCitmdW5jX3RvX2hvc3RfcGF0aGxpc3QgKCkKK3sKKyAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICptaW5ndyogKQorICAgICAgICBsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5PSdzfFxcXFwqfFxcfGc7c3wvfFxcfGc7c3xcXHxcXFxcfGcnCisgICAgICAgICMgUmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMgZnJvbQorICAgICAgICAjIEFSRy4gbXN5cyBiZWhhdmlvciBpcyBpbmNvbnNpc3RlbnQgaGVyZSwgY3lncGF0aCB0dXJucyB0aGVtCisgICAgICAgICMgaW50byAnLjsnIGFuZCAnOy4nLCBhbmQgd2luZXBhdGggaWdub3JlcyB0aGVtIGNvbXBsZXRlbHkuCisJZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKyAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgICAgICBjYXNlICRidWlsZCBpbgorICAgICAgICAgICptaW5ndyogKSAjIEFjdHVhbGx5LCBtc3lzLgorICAgICAgICAgICAgIyBBd2t3YXJkOiBjbWQgYXBwZW5kcyBzcGFjZXMgdG8gcmVzdWx0LgorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD1gCisJICAgICAgKCBjbWQgLy9jIGVjaG8gIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMSIgKSAyPi9kZXYvbnVsbCB8CisJICAgICAgJFNFRCAtZSAncy9bIF0qJC8vJyAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorICAgICAgICAgICAgOzsKKyAgICAgICAgICAqY3lnd2luKiApCisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PWBjeWdwYXRoIC13IC1wICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEiIHwKKyAgICAgICAgICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorICAgICAgICAgICAgOzsKKyAgICAgICAgICAqICkKKyAgICAgICAgICAgICMgdW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lc24ndCBjb252ZXJ0IHBhdGhsaXN0cworICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD0iIgorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X29sZElGUz0kSUZTCisgICAgICAgICAgICBJRlM9OgorICAgICAgICAgICAgZm9yIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9mIGluICRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMSA7IGRvCisgICAgICAgICAgICAgIElGUz0kZnVuY190b19ob3N0X3BhdGhsaXN0X29sZElGUworICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkZnVuY190b19ob3N0X3BhdGhsaXN0X2YiIDsgdGhlbgorICAgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoICIkZnVuY190b19ob3N0X3BhdGhsaXN0X2YiCisgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIgOyB0aGVuCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCIgOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9IiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQgIjskZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgSUZTPSRmdW5jX3RvX2hvc3RfcGF0aGxpc3Rfb2xkSUZTCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0IjsgdGhlbgorICAgICAgICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGhvc3QgcGF0aChzKSBjb3JyZXNwb25kaW5nIHRvIgorICAgICAgICAgIGZ1bmNfZXJyb3IgIiAgXGAkMSciCisgICAgICAgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCisgICAgICAgICAgIyBGYWxsYmFjay4gVGhpcyBtYXkgYnJlYWsgaWYgJDEgY29udGFpbnMgRE9TLXN0eWxlIGRyaXZlCisgICAgICAgICAgIyBzcGVjaWZpY2F0aW9ucy4gVGhlIGZpeCBpcyBub3QgdG8gY29tcGxpY2F0ZSB0aGUgZXhwcmVzc2lvbgorICAgICAgICAgICMgYmVsb3csIGJ1dCBmb3IgdGhlIHVzZXIgdG8gcHJvdmlkZSBhIHdvcmtpbmcgd2luZSBpbnN0YWxsYXRpb24KKyAgICAgICAgICAjIHdpdGggd2luZXBhdGggc28gdGhhdCBwYXRoIHRyYW5zbGF0aW9uIGluIHRoZSBjcm9zcy10by1taW5ndworICAgICAgICAgICMgY2FzZSB3b3JrcyBwcm9wZXJseS4KKyAgICAgICAgICBsdF9yZXBsYWNlX3BhdGhzZXBfbml4X3RvX2Rvcz0ic3w6fDt8ZyIKKyAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PWBlY2hvICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEiIHxcCisgICAgICAgICAgICAkU0VEIC1lICIkbHRfcmVwbGFjZV9wYXRoc2VwX25peF90b19kb3MiYAorICAgICAgICBmaQorICAgICAgICAjIE5vdywgYWRkIHRoZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvcnMgYmFjaworICAgICAgICBjYXNlICIkMSIgaW4KKyAgICAgICAgICA6KiApIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9IjskZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCIKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgY2FzZSAiJDEiIGluCisgICAgICAgICAgKjogKSBmdW5jX2FwcGVuZCBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0ICI7IgorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKK30KKyMgZW5kOiBmdW5jX3RvX2hvc3RfcGF0aGxpc3QKKworIyBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCisjIGVtaXQgdGhlIHNvdXJjZSBjb2RlIGZvciBhIHdyYXBwZXIgZXhlY3V0YWJsZSBvbiBzdGRvdXQKKyMgTXVzdCBPTkxZIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBmdW5jX21vZGVfbGluayBiZWNhdXNlCisjIGl0IGRlcGVuZHMgb24gYSBudW1iZXIgb2YgdmFyaWFibGUgc2V0IHRoZXJlaW4uCitmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjICgpCit7CisJY2F0IDw8RU9GCisKKy8qICRjd3JhcHBlcnNvdXJjZSAtIHRlbXBvcmFyeSB3cmFwcGVyIGV4ZWN1dGFibGUgZm9yICRvYmpkaXIvJG91dHB1dG5hbWUKKyAgIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKworICAgVGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5ub3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwgYWxsIHRoZSBsaWJ0b29sCisgICBsaWJyYXJpZXMgdGhhdCBpdCBkZXBlbmRzIG9uIGFyZSBpbnN0YWxsZWQuCisKKyAgIFRoaXMgd3JhcHBlciBleGVjdXRhYmxlIHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyAgIElmIGl0IGlzLCBpdCB3aWxsIG5vdCBvcGVyYXRlIGNvcnJlY3RseS4KKyovCitFT0YKKwkgICAgY2F0IDw8IkVPRiIKKyNpZmRlZiBfTVNDX1ZFUgorIyBkZWZpbmUgX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIDEKKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWZkZWYgX01TQ19WRVIKKyMgaW5jbHVkZSA8ZGlyZWN0Lmg+CisjIGluY2x1ZGUgPHByb2Nlc3MuaD4KKyMgaW5jbHVkZSA8aW8uaD4KKyNlbHNlCisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorIyBpbmNsdWRlIDxzdGRpbnQuaD4KKyMgaWZkZWYgX19DWUdXSU5fXworIyAgaW5jbHVkZSA8aW8uaD4KKyMgZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKy8qIGRlY2xhcmF0aW9ucyBvZiBub24tQU5TSSBmdW5jdGlvbnMgKi8KKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKQorIyBpZmRlZiBfX1NUUklDVF9BTlNJX18KK2ludCBfcHV0ZW52IChjb25zdCBjaGFyICopOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZChfX0NZR1dJTl9fKQorIyBpZmRlZiBfX1NUUklDVF9BTlNJX18KK2NoYXIgKnJlYWxwYXRoIChjb25zdCBjaGFyICosIGNoYXIgKik7CitpbnQgcHV0ZW52IChjaGFyICopOworaW50IHNldGVudiAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CisjIGVuZGlmCisvKiAjZWxpZiBkZWZpbmVkIChvdGhlciBwbGF0Zm9ybXMpIC4uLiAqLworI2VuZGlmCisKKy8qIHBvcnRhYmlsaXR5IGRlZmluZXMsIGV4Y2x1ZGluZyBwYXRoIGhhbmRsaW5nIG1hY3JvcyAqLworI2lmIGRlZmluZWQoX01TQ19WRVIpCisjIGRlZmluZSBzZXRtb2RlIF9zZXRtb2RlCisjIGRlZmluZSBzdGF0ICAgIF9zdGF0CisjIGRlZmluZSBjaG1vZCAgIF9jaG1vZAorIyBkZWZpbmUgZ2V0Y3dkICBfZ2V0Y3dkCisjIGRlZmluZSBwdXRlbnYgIF9wdXRlbnYKKyMgZGVmaW5lIFNfSVhVU1IgX1NfSUVYRUMKKyMgaWZuZGVmIF9JTlRQVFJfVF9ERUZJTkVECisjICBkZWZpbmUgX0lOVFBUUl9UX0RFRklORUQKKyMgIGRlZmluZSBpbnRwdHJfdCBpbnQKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19NSU5HVzMyX18pCisjIGRlZmluZSBzZXRtb2RlIF9zZXRtb2RlCisjIGRlZmluZSBzdGF0ICAgIF9zdGF0CisjIGRlZmluZSBjaG1vZCAgIF9jaG1vZAorIyBkZWZpbmUgZ2V0Y3dkICBfZ2V0Y3dkCisjIGRlZmluZSBwdXRlbnYgIF9wdXRlbnYKKyNlbGlmIGRlZmluZWQoX19DWUdXSU5fXykKKyMgZGVmaW5lIEhBVkVfU0VURU5WCisjIGRlZmluZSBGT1BFTl9XQiAid2IiCisvKiAjZWxpZiBkZWZpbmVkIChvdGhlciBwbGF0Zm9ybXMpIC4uLiAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFBBVEhfTUFYKQorIyBkZWZpbmUgTFRfUEFUSE1BWCBQQVRIX01BWAorI2VsaWYgZGVmaW5lZChNQVhQQVRITEVOKQorIyBkZWZpbmUgTFRfUEFUSE1BWCBNQVhQQVRITEVOCisjZWxzZQorIyBkZWZpbmUgTFRfUEFUSE1BWCAxMDI0CisjZW5kaWYKKworI2lmbmRlZiBTX0lYT1RICisjIGRlZmluZSBTX0lYT1RIIDAKKyNlbmRpZgorI2lmbmRlZiBTX0lYR1JQCisjIGRlZmluZSBTX0lYR1JQIDAKKyNlbmRpZgorCisvKiBwYXRoIGhhbmRsaW5nIHBvcnRhYmlsaXR5IG1hY3JvcyAqLworI2lmbmRlZiBESVJfU0VQQVJBVE9SCisjIGRlZmluZSBESVJfU0VQQVJBVE9SICcvJworIyBkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJzonCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9XSU4zMikgfHwgZGVmaW5lZCAoX19NU0RPU19fKSB8fCBkZWZpbmVkIChfX0RKR1BQX18pIHx8IFwKKyAgZGVmaW5lZCAoX19PUzJfXykKKyMgZGVmaW5lIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCisjIGRlZmluZSBGT1BFTl9XQiAid2IiCisjIGlmbmRlZiBESVJfU0VQQVJBVE9SXzIKKyMgIGRlZmluZSBESVJfU0VQQVJBVE9SXzIgJ1xcJworIyBlbmRpZgorIyBpZm5kZWYgUEFUSF9TRVBBUkFUT1JfMgorIyAgZGVmaW5lIFBBVEhfU0VQQVJBVE9SXzIgJzsnCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBESVJfU0VQQVJBVE9SXzIKKyMgZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoY2gpICgoY2gpID09IERJUl9TRVBBUkFUT1IpCisjZWxzZSAvKiBESVJfU0VQQVJBVE9SXzIgKi8KKyMgZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoY2gpIFwKKwkoKChjaCkgPT0gRElSX1NFUEFSQVRPUikgfHwgKChjaCkgPT0gRElSX1NFUEFSQVRPUl8yKSkKKyNlbmRpZiAvKiBESVJfU0VQQVJBVE9SXzIgKi8KKworI2lmbmRlZiBQQVRIX1NFUEFSQVRPUl8yCisjIGRlZmluZSBJU19QQVRIX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gUEFUSF9TRVBBUkFUT1IpCisjZWxzZSAvKiBQQVRIX1NFUEFSQVRPUl8yICovCisjIGRlZmluZSBJU19QQVRIX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gUEFUSF9TRVBBUkFUT1JfMikKKyNlbmRpZiAvKiBQQVRIX1NFUEFSQVRPUl8yICovCisKKyNpZm5kZWYgRk9QRU5fV0IKKyMgZGVmaW5lIEZPUEVOX1dCICJ3IgorI2VuZGlmCisjaWZuZGVmIF9PX0JJTkFSWQorIyBkZWZpbmUgX09fQklOQVJZIDAKKyNlbmRpZgorCisjZGVmaW5lIFhNQUxMT0ModHlwZSwgbnVtKSAgICAgICgodHlwZSAqKSB4bWFsbG9jICgobnVtKSAqIHNpemVvZih0eXBlKSkpCisjZGVmaW5lIFhGUkVFKHN0YWxlKSBkbyB7IFwKKyAgaWYgKHN0YWxlKSB7IGZyZWUgKCh2b2lkICopIHN0YWxlKTsgc3RhbGUgPSAwOyB9IFwKK30gd2hpbGUgKDApCisKKyNpZiBkZWZpbmVkKExUX0RFQlVHV1JBUFBFUikKK3N0YXRpYyBpbnQgbHRfZGVidWcgPSAxOworI2Vsc2UKK3N0YXRpYyBpbnQgbHRfZGVidWcgPSAwOworI2VuZGlmCisKK2NvbnN0IGNoYXIgKnByb2dyYW1fbmFtZSA9ICJsaWJ0b29sLXdyYXBwZXIiOyAvKiBpbiBjYXNlIHhzdHJkdXAgZmFpbHMgKi8KKwordm9pZCAqeG1hbGxvYyAoc2l6ZV90IG51bSk7CitjaGFyICp4c3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpOworY29uc3QgY2hhciAqYmFzZV9uYW1lIChjb25zdCBjaGFyICpuYW1lKTsKK2NoYXIgKmZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqd3JhcHBlcik7CitjaGFyICpjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpOworaW50IG1ha2VfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCk7CitpbnQgY2hlY2tfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCk7CitjaGFyICpzdHJlbmR6YXAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KTsKK3ZvaWQgbHRfZGVidWdwcmludGYgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLik7Cit2b2lkIGx0X2ZhdGFsIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKTsKK3N0YXRpYyBjb25zdCBjaGFyICpub25udWxsIChjb25zdCBjaGFyICpzKTsKK3N0YXRpYyBjb25zdCBjaGFyICpub25lbXB0eSAoY29uc3QgY2hhciAqcyk7Cit2b2lkIGx0X3NldGVudiAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOworY2hhciAqbHRfZXh0ZW5kX3N0ciAoY29uc3QgY2hhciAqb3JpZ192YWx1ZSwgY29uc3QgY2hhciAqYWRkLCBpbnQgdG9fZW5kKTsKK3ZvaWQgbHRfdXBkYXRlX2V4ZV9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7Cit2b2lkIGx0X3VwZGF0ZV9saWJfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOworY2hhciAqKnByZXBhcmVfc3Bhd24gKGNoYXIgKiphcmd2KTsKK3ZvaWQgbHRfZHVtcF9zY3JpcHQgKEZJTEUgKmYpOworRU9GCisKKwkgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogTUFHSUNfRVhFID0gIiRtYWdpY19leGUiOworY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBUk5BTUUgPSAiJHNobGlicGF0aF92YXIiOworRU9GCisKKwkgICAgaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgorICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3QgIiR0ZW1wX3JwYXRoIgorCSAgICAgIGNhdCA8PEVPRgorY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiOworRU9GCisJICAgIGVsc2UKKwkgICAgICBjYXQgPDwiRU9GIgorY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBTFVFICAgPSAiIjsKK0VPRgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgorICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3QgIiRkbGxzZWFyY2hwYXRoOiIKKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQVJOQU1FID0gIlBBVEgiOworY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiOworRU9GCisJICAgIGVsc2UKKwkgICAgICBjYXQgPDwiRU9GIgorY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBUk5BTUUgPSAiIjsKK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQUxVRSAgID0gIiI7CitFT0YKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllczsgdGhlbgorCSAgICAgIGNhdCA8PEVPRgorY29uc3QgY2hhciAqIFRBUkdFVF9QUk9HUkFNX05BTUUgPSAibHQtJG91dHB1dG5hbWUiOyAvKiBob3BlZnVsbHksIG5vIC5leGUgKi8KK0VPRgorCSAgICBlbHNlCisJICAgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogVEFSR0VUX1BST0dSQU1fTkFNRSA9ICIkb3V0cHV0bmFtZSI7IC8qIGhvcGVmdWxseSwgbm8gLmV4ZSAqLworRU9GCisJICAgIGZpCisKKworCSAgICBjYXQgPDwiRU9GIgorCisjZGVmaW5lIExUV1JBUFBFUl9PUFRJT05fUFJFRklYICAgICAgICAgIi0tbHQtIgorCitzdGF0aWMgY29uc3QgY2hhciAqbHR3cmFwcGVyX29wdGlvbl9wcmVmaXggPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWDsKK3N0YXRpYyBjb25zdCBjaGFyICpkdW1wc2NyaXB0X29wdCAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYICJkdW1wLXNjcmlwdCI7CitzdGF0aWMgY29uc3QgY2hhciAqZGVidWdfb3B0ICAgICAgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAiZGVidWciOworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIGNoYXIgKipuZXdhcmd6OworICBpbnQgIG5ld2FyZ2M7CisgIGNoYXIgKnRtcF9wYXRoc3BlYzsKKyAgY2hhciAqYWN0dWFsX2N3cmFwcGVyX3BhdGg7CisgIGNoYXIgKmFjdHVhbF9jd3JhcHBlcl9uYW1lOworICBjaGFyICp0YXJnZXRfbmFtZTsKKyAgY2hhciAqbHRfYXJndl96ZXJvOworICBpbnRwdHJfdCBydmFsID0gMTI3OworCisgIGludCBpOworCisgIHByb2dyYW1fbmFtZSA9IChjaGFyICopIHhzdHJkdXAgKGJhc2VfbmFtZSAoYXJndlswXSkpOworICBuZXdhcmd6ID0gWE1BTExPQyAoY2hhciAqLCBhcmdjICsgMSk7CisKKyAgLyogdmVyeSBzaW1wbGUgYXJnIHBhcnNpbmc7IGRvbid0IHdhbnQgdG8gcmVseSBvbiBnZXRvcHQKKyAgICogYWxzbywgY29weSBhbGwgbm9uIGN3cmFwcGVyIG9wdGlvbnMgdG8gbmV3YXJneiwgZXhjZXB0CisgICAqIGFyZ3pbMF0sIHdoaWNoIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkKKyAgICovCisgIG5ld2FyZ2M9MDsKKyAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKyAgICB7CisgICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBkdW1wc2NyaXB0X29wdCkgPT0gMCkKKwl7CitFT0YKKwkgICAgY2FzZSAiJGhvc3QiIGluCisJICAgICAgKm1pbmd3KiB8ICpjeWd3aW4qICkKKwkJIyBtYWtlIHN0ZG91dCB1c2UgInVuaXgiIGxpbmUgZW5kaW5ncworCQllY2hvICIgICAgICAgICAgc2V0bW9kZSgxLF9PX0JJTkFSWSk7IgorCQk7OworCSAgICAgIGVzYWMKKworCSAgICBjYXQgPDwiRU9GIgorCSAgbHRfZHVtcF9zY3JpcHQgKHN0ZG91dCk7CisJICByZXR1cm4gMDsKKwl9CisgICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBkZWJ1Z19vcHQpID09IDApCisJeworICAgICAgICAgIGx0X2RlYnVnID0gMTsKKyAgICAgICAgICBjb250aW51ZTsKKwl9CisgICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIC8qIGhvd2V2ZXIsIGlmIHRoZXJlIGlzIGFuIG9wdGlvbiBpbiB0aGUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVgKKyAgICAgICAgICAgICBuYW1lc3BhY2UsIGJ1dCBpdCBpcyBub3Qgb25lIG9mIHRoZSBvbmVzIHdlIGtub3cgYWJvdXQgYW5kCisgICAgICAgICAgICAgaGF2ZSBhbHJlYWR5IGRlYWx0IHdpdGgsIGFib3ZlIChpbmx1ZGluZyBkdW1wLXNjcmlwdCksIHRoZW4KKyAgICAgICAgICAgICByZXBvcnQgYW4gZXJyb3IuIE90aGVyd2lzZSwgdGFyZ2V0cyBtaWdodCBiZWdpbiB0byBiZWxpZXZlCisgICAgICAgICAgICAgdGhleSBhcmUgYWxsb3dlZCB0byB1c2Ugb3B0aW9ucyBpbiB0aGUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVgKKyAgICAgICAgICAgICBuYW1lc3BhY2UuIFRoZSBmaXJzdCB0aW1lIGFueSB1c2VyIGNvbXBsYWlucyBhYm91dCB0aGlzLCB3ZSdsbAorICAgICAgICAgICAgIG5lZWQgdG8gbWFrZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCBhIGNvbmZpZ3VyZS10aW1lIG9wdGlvbgorICAgICAgICAgICAgIG9yIGEgY29uZmlndXJlLmFjLXNldHRhYmxlIHZhbHVlLgorICAgICAgICAgICAqLworICAgICAgICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgICAidW5yZWNvZ25pemVkICVzIG9wdGlvbjogJyVzJyIsCisgICAgICAgICAgICAgICAgICAgIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4LCBhcmd2W2ldKTsKKyAgICAgICAgfQorICAgICAgLyogb3RoZXJ3aXNlIC4uLiAqLworICAgICAgbmV3YXJnelsrK25ld2FyZ2NdID0geHN0cmR1cCAoYXJndltpXSk7CisgICAgfQorICBuZXdhcmd6WysrbmV3YXJnY10gPSBOVUxMOworCitFT0YKKwkgICAgY2F0IDw8RU9GCisgIC8qIFRoZSBHTlUgYmFubmVyIG11c3QgYmUgdGhlIGZpcnN0IG5vbi1lcnJvciBkZWJ1ZyBtZXNzYWdlICovCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICJsaWJ0b29sIHdyYXBwZXIgKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OXG4iKTsKK0VPRgorCSAgICBjYXQgPDwiRU9GIgorICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIGFyZ3ZbMF06ICVzXG4iLCBhcmd2WzBdKTsKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBwcm9ncmFtX25hbWU6ICVzXG4iLCBwcm9ncmFtX25hbWUpOworCisgIHRtcF9wYXRoc3BlYyA9IGZpbmRfZXhlY3V0YWJsZSAoYXJndlswXSk7CisgIGlmICh0bXBfcGF0aHNwZWMgPT0gTlVMTCkKKyAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiY291bGRuJ3QgZmluZCAlcyIsIGFyZ3ZbMF0pOworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorICAgICAgICAgICAgICAgICAgIihtYWluKSBmb3VuZCBleGUgKGJlZm9yZSBzeW1saW5rIGNoYXNlKSBhdDogJXNcbiIsCisJCSAgdG1wX3BhdGhzcGVjKTsKKworICBhY3R1YWxfY3dyYXBwZXJfcGF0aCA9IGNoYXNlX3N5bWxpbmtzICh0bXBfcGF0aHNwZWMpOworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorICAgICAgICAgICAgICAgICAgIihtYWluKSBmb3VuZCBleGUgKGFmdGVyIHN5bWxpbmsgY2hhc2UpIGF0OiAlc1xuIiwKKwkJICBhY3R1YWxfY3dyYXBwZXJfcGF0aCk7CisgIFhGUkVFICh0bXBfcGF0aHNwZWMpOworCisgIGFjdHVhbF9jd3JhcHBlcl9uYW1lID0geHN0cmR1cCAoYmFzZV9uYW1lIChhY3R1YWxfY3dyYXBwZXJfcGF0aCkpOworICBzdHJlbmR6YXAgKGFjdHVhbF9jd3JhcHBlcl9wYXRoLCBhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisKKyAgLyogd3JhcHBlciBuYW1lIHRyYW5zZm9ybXMgKi8KKyAgc3RyZW5kemFwIChhY3R1YWxfY3dyYXBwZXJfbmFtZSwgIi5leGUiKTsKKyAgdG1wX3BhdGhzcGVjID0gbHRfZXh0ZW5kX3N0ciAoYWN0dWFsX2N3cmFwcGVyX25hbWUsICIuZXhlIiwgMSk7CisgIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisgIGFjdHVhbF9jd3JhcHBlcl9uYW1lID0gdG1wX3BhdGhzcGVjOworICB0bXBfcGF0aHNwZWMgPSAwOworCisgIC8qIHRhcmdldF9uYW1lIHRyYW5zZm9ybXMgLS0gdXNlIGFjdHVhbCB0YXJnZXQgcHJvZ3JhbSBuYW1lOyBtaWdodCBoYXZlIGx0LSBwcmVmaXggKi8KKyAgdGFyZ2V0X25hbWUgPSB4c3RyZHVwIChiYXNlX25hbWUgKFRBUkdFVF9QUk9HUkFNX05BTUUpKTsKKyAgc3RyZW5kemFwICh0YXJnZXRfbmFtZSwgIi5leGUiKTsKKyAgdG1wX3BhdGhzcGVjID0gbHRfZXh0ZW5kX3N0ciAodGFyZ2V0X25hbWUsICIuZXhlIiwgMSk7CisgIFhGUkVFICh0YXJnZXRfbmFtZSk7CisgIHRhcmdldF9uYW1lID0gdG1wX3BhdGhzcGVjOworICB0bXBfcGF0aHNwZWMgPSAwOworCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgIihtYWluKSBsaWJ0b29sIHRhcmdldCBuYW1lOiAlc1xuIiwKKwkJICB0YXJnZXRfbmFtZSk7CitFT0YKKworCSAgICBjYXQgPDxFT0YKKyAgbmV3YXJnelswXSA9CisgICAgWE1BTExPQyAoY2hhciwgKHN0cmxlbiAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpICsKKwkJICAgIHN0cmxlbiAoIiRvYmpkaXIiKSArIDEgKyBzdHJsZW4gKGFjdHVhbF9jd3JhcHBlcl9uYW1lKSArIDEpKTsKKyAgc3RyY3B5IChuZXdhcmd6WzBdLCBhY3R1YWxfY3dyYXBwZXJfcGF0aCk7CisgIHN0cmNhdCAobmV3YXJnelswXSwgIiRvYmpkaXIiKTsKKyAgc3RyY2F0IChuZXdhcmd6WzBdLCAiLyIpOworRU9GCisKKwkgICAgY2F0IDw8IkVPRiIKKyAgLyogc3RvcCBoZXJlLCBhbmQgY29weSBzbyB3ZSBkb24ndCBoYXZlIHRvIGRvIHRoaXMgdHdpY2UgKi8KKyAgdG1wX3BhdGhzcGVjID0geHN0cmR1cCAobmV3YXJnelswXSk7CisKKyAgLyogZG8gTk9UIHdhbnQgdGhlIGx0LSBwcmVmaXggaGVyZSwgc28gdXNlIGFjdHVhbF9jd3JhcHBlcl9uYW1lICovCisgIHN0cmNhdCAobmV3YXJnelswXSwgYWN0dWFsX2N3cmFwcGVyX25hbWUpOworCisgIC8qIERPIHdhbnQgdGhlIGx0LSBwcmVmaXggaGVyZSBpZiBpdCBleGlzdHMsIHNvIHVzZSB0YXJnZXRfbmFtZSAqLworICBsdF9hcmd2X3plcm8gPSBsdF9leHRlbmRfc3RyICh0bXBfcGF0aHNwZWMsIHRhcmdldF9uYW1lLCAxKTsKKyAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CisgIHRtcF9wYXRoc3BlYyA9IE5VTEw7CitFT0YKKworCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgbWluZ3cqKQorCSAgICBjYXQgPDwiRU9GIgorICB7CisgICAgY2hhciogcDsKKyAgICB3aGlsZSAoKHAgPSBzdHJjaHIgKG5ld2FyZ3pbMF0sICdcXCcpKSAhPSBOVUxMKQorICAgICAgeworCSpwID0gJy8nOworICAgICAgfQorICAgIHdoaWxlICgocCA9IHN0cmNociAobHRfYXJndl96ZXJvLCAnXFwnKSkgIT0gTlVMTCkKKyAgICAgIHsKKwkqcCA9ICcvJzsKKyAgICAgIH0KKyAgfQorRU9GCisJICAgIDs7CisJICAgIGVzYWMKKworCSAgICBjYXQgPDwiRU9GIgorICBYRlJFRSAodGFyZ2V0X25hbWUpOworICBYRlJFRSAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpOworICBYRlJFRSAoYWN0dWFsX2N3cmFwcGVyX25hbWUpOworCisgIGx0X3NldGVudiAoIkJJTl9TSCIsICJ4cGc0Iik7IC8qIGZvciBUcnU2NCAqLworICBsdF9zZXRlbnYgKCJEVUFMQ0FTRSIsICIxIik7ICAvKiBmb3IgTVNLIHNoICovCisgIGx0X3VwZGF0ZV9saWJfcGF0aCAoTElCX1BBVEhfVkFSTkFNRSwgTElCX1BBVEhfVkFMVUUpOworICBsdF91cGRhdGVfZXhlX3BhdGggKEVYRV9QQVRIX1ZBUk5BTUUsIEVYRV9QQVRIX1ZBTFVFKTsKKworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIGx0X2FyZ3ZfemVybzogJXNcbiIsCisJCSAgbm9ubnVsbCAobHRfYXJndl96ZXJvKSk7CisgIGZvciAoaSA9IDA7IGkgPCBuZXdhcmdjOyBpKyspCisgICAgeworICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBuZXdhcmd6WyVkXTogJXNcbiIsCisJCSAgICAgIGksIG5vbm51bGwgKG5ld2FyZ3pbaV0pKTsKKyAgICB9CisKK0VPRgorCisJICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICAgICBtaW5ndyopCisJCWNhdCA8PCJFT0YiCisgIC8qIGV4ZWN2IGRvZXNuJ3QgYWN0dWFsbHkgd29yayBvbiBtaW5ndyBhcyBleHBlY3RlZCBvbiB1bml4ICovCisgIG5ld2FyZ3ogPSBwcmVwYXJlX3NwYXduIChuZXdhcmd6KTsKKyAgcnZhbCA9IF9zcGF3bnYgKF9QX1dBSVQsIGx0X2FyZ3ZfemVybywgKGNvbnN0IGNoYXIgKiBjb25zdCAqKSBuZXdhcmd6KTsKKyAgaWYgKHJ2YWwgPT0gLTEpCisgICAgeworICAgICAgLyogZmFpbGVkIHRvIHN0YXJ0IHByb2Nlc3MgKi8KKyAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgICAgICIobWFpbikgZmFpbGVkIHRvIGxhdW5jaCB0YXJnZXQgXCIlc1wiOiAlc1xuIiwKKwkJICAgICAgbHRfYXJndl96ZXJvLCBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisgICAgICByZXR1cm4gMTI3OworICAgIH0KKyAgcmV0dXJuIHJ2YWw7CitFT0YKKwkJOzsKKwkgICAgICAqKQorCQljYXQgPDwiRU9GIgorICBleGVjdiAobHRfYXJndl96ZXJvLCBuZXdhcmd6KTsKKyAgcmV0dXJuIHJ2YWw7IC8qID0xMjcsIGJ1dCBhdm9pZHMgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmcgKi8KK0VPRgorCQk7OworCSAgICBlc2FjCisKKwkgICAgY2F0IDw8IkVPRiIKK30KKwordm9pZCAqCit4bWFsbG9jIChzaXplX3QgbnVtKQoreworICB2b2lkICpwID0gKHZvaWQgKikgbWFsbG9jIChudW0pOworICBpZiAoIXApCisgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgIm1lbW9yeSBleGhhdXN0ZWQiKTsKKworICByZXR1cm4gcDsKK30KKworY2hhciAqCit4c3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpCit7CisgIHJldHVybiBzdHJpbmcgPyBzdHJjcHkgKChjaGFyICopIHhtYWxsb2MgKHN0cmxlbiAoc3RyaW5nKSArIDEpLAorCQkJICBzdHJpbmcpIDogTlVMTDsKK30KKworY29uc3QgY2hhciAqCitiYXNlX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIGNvbnN0IGNoYXIgKmJhc2U7CisKKyNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKKyAgLyogU2tpcCBvdmVyIHRoZSBkaXNrIG5hbWUgaW4gTVNET1MgcGF0aG5hbWVzLiAqLworICBpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIG5hbWVbMF0pICYmIG5hbWVbMV0gPT0gJzonKQorICAgIG5hbWUgKz0gMjsKKyNlbmRpZgorCisgIGZvciAoYmFzZSA9IG5hbWU7ICpuYW1lOyBuYW1lKyspCisgICAgaWYgKElTX0RJUl9TRVBBUkFUT1IgKCpuYW1lKSkKKyAgICAgIGJhc2UgPSBuYW1lICsgMTsKKyAgcmV0dXJuIGJhc2U7Cit9CisKK2ludAorY2hlY2tfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCkKK3sKKyAgc3RydWN0IHN0YXQgc3Q7CisKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihjaGVja19leGVjdXRhYmxlKTogJXNcbiIsCisgICAgICAgICAgICAgICAgICBub25lbXB0eSAocGF0aCkpOworICBpZiAoKCFwYXRoKSB8fCAoISpwYXRoKSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHN0YXQgKHBhdGgsICZzdCkgPj0gMCkKKyAgICAgICYmIChzdC5zdF9tb2RlICYgKFNfSVhVU1IgfCBTX0lYR1JQIHwgU19JWE9USCkpKQorICAgIHJldHVybiAxOworICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorbWFrZV9leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKQoreworICBpbnQgcnZhbCA9IDA7CisgIHN0cnVjdCBzdGF0IHN0OworCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFrZV9leGVjdXRhYmxlKTogJXNcbiIsCisgICAgICAgICAgICAgICAgICBub25lbXB0eSAocGF0aCkpOworICBpZiAoKCFwYXRoKSB8fCAoISpwYXRoKSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoc3RhdCAocGF0aCwgJnN0KSA+PSAwKQorICAgIHsKKyAgICAgIHJ2YWwgPSBjaG1vZCAocGF0aCwgc3Quc3RfbW9kZSB8IFNfSVhPVEggfCBTX0lYR1JQIHwgU19JWFVTUik7CisgICAgfQorICByZXR1cm4gcnZhbDsKK30KKworLyogU2VhcmNoZXMgZm9yIHRoZSBmdWxsIHBhdGggb2YgdGhlIHdyYXBwZXIuICBSZXR1cm5zCisgICBuZXdseSBhbGxvY2F0ZWQgZnVsbCBwYXRoIG5hbWUgaWYgZm91bmQsIE5VTEwgb3RoZXJ3aXNlCisgICBEb2VzIG5vdCBjaGFzZSBzeW1saW5rcywgZXZlbiBvbiBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IHRoZW0uCisqLworY2hhciAqCitmaW5kX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKndyYXBwZXIpCit7CisgIGludCBoYXNfc2xhc2ggPSAwOworICBjb25zdCBjaGFyICpwOworICBjb25zdCBjaGFyICpwX25leHQ7CisgIC8qIHN0YXRpYyBidWZmZXIgZm9yIGdldGN3ZCAqLworICBjaGFyIHRtcFtMVF9QQVRITUFYICsgMV07CisgIGludCB0bXBfbGVuOworICBjaGFyICpjb25jYXRfbmFtZTsKKworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKGZpbmRfZXhlY3V0YWJsZSk6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgbm9uZW1wdHkgKHdyYXBwZXIpKTsKKworICBpZiAoKHdyYXBwZXIgPT0gTlVMTCkgfHwgKCp3cmFwcGVyID09ICdcMCcpKQorICAgIHJldHVybiBOVUxMOworCisgIC8qIEFic29sdXRlIHBhdGg/ICovCisjaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCisgIGlmIChpc2FscGhhICgodW5zaWduZWQgY2hhcikgd3JhcHBlclswXSkgJiYgd3JhcHBlclsxXSA9PSAnOicpCisgICAgeworICAgICAgY29uY2F0X25hbWUgPSB4c3RyZHVwICh3cmFwcGVyKTsKKyAgICAgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCisJcmV0dXJuIGNvbmNhdF9uYW1lOworICAgICAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisjZW5kaWYKKyAgICAgIGlmIChJU19ESVJfU0VQQVJBVE9SICh3cmFwcGVyWzBdKSkKKwl7CisJICBjb25jYXRfbmFtZSA9IHhzdHJkdXAgKHdyYXBwZXIpOworCSAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKwkgICAgcmV0dXJuIGNvbmNhdF9uYW1lOworCSAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKwl9CisjaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCisgICAgfQorI2VuZGlmCisKKyAgZm9yIChwID0gd3JhcHBlcjsgKnA7IHArKykKKyAgICBpZiAoKnAgPT0gJy8nKQorICAgICAgeworCWhhc19zbGFzaCA9IDE7CisJYnJlYWs7CisgICAgICB9CisgIGlmICghaGFzX3NsYXNoKQorICAgIHsKKyAgICAgIC8qIG5vIHNsYXNoZXM7IHNlYXJjaCBQQVRIICovCisgICAgICBjb25zdCBjaGFyICpwYXRoID0gZ2V0ZW52ICgiUEFUSCIpOworICAgICAgaWYgKHBhdGggIT0gTlVMTCkKKwl7CisJICBmb3IgKHAgPSBwYXRoOyAqcDsgcCA9IHBfbmV4dCkKKwkgICAgeworCSAgICAgIGNvbnN0IGNoYXIgKnE7CisJICAgICAgc2l6ZV90IHBfbGVuOworCSAgICAgIGZvciAocSA9IHA7ICpxOyBxKyspCisJCWlmIChJU19QQVRIX1NFUEFSQVRPUiAoKnEpKQorCQkgIGJyZWFrOworCSAgICAgIHBfbGVuID0gcSAtIHA7CisJICAgICAgcF9uZXh0ID0gKCpxID09ICdcMCcgPyBxIDogcSArIDEpOworCSAgICAgIGlmIChwX2xlbiA9PSAwKQorCQl7CisJCSAgLyogZW1wdHkgcGF0aDogY3VycmVudCBkaXJlY3RvcnkgKi8KKwkJICBpZiAoZ2V0Y3dkICh0bXAsIExUX1BBVEhNQVgpID09IE5VTEwpCisJCSAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiZ2V0Y3dkIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworCQkgIHRtcF9sZW4gPSBzdHJsZW4gKHRtcCk7CisJCSAgY29uY2F0X25hbWUgPQorCQkgICAgWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisJCSAgbWVtY3B5IChjb25jYXRfbmFtZSwgdG1wLCB0bXBfbGVuKTsKKwkJICBjb25jYXRfbmFtZVt0bXBfbGVuXSA9ICcvJzsKKwkJICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgdG1wX2xlbiArIDEsIHdyYXBwZXIpOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgY29uY2F0X25hbWUgPQorCQkgICAgWE1BTExPQyAoY2hhciwgcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOworCQkgIG1lbWNweSAoY29uY2F0X25hbWUsIHAsIHBfbGVuKTsKKwkJICBjb25jYXRfbmFtZVtwX2xlbl0gPSAnLyc7CisJCSAgc3RyY3B5IChjb25jYXRfbmFtZSArIHBfbGVuICsgMSwgd3JhcHBlcik7CisJCX0KKwkgICAgICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQorCQlyZXR1cm4gY29uY2F0X25hbWU7CisJICAgICAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKwkgICAgfQorCX0KKyAgICAgIC8qIG5vdCBmb3VuZCBpbiBQQVRIOyBhc3N1bWUgY3VyZGlyICovCisgICAgfQorICAvKiBSZWxhdGl2ZSBwYXRoIHwgbm90IGZvdW5kIGluIHBhdGg6IHByZXBlbmQgY3dkICovCisgIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKKyAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiZ2V0Y3dkIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisgIHRtcF9sZW4gPSBzdHJsZW4gKHRtcCk7CisgIGNvbmNhdF9uYW1lID0gWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisgIG1lbWNweSAoY29uY2F0X25hbWUsIHRtcCwgdG1wX2xlbik7CisgIGNvbmNhdF9uYW1lW3RtcF9sZW5dID0gJy8nOworICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgdG1wX2xlbiArIDEsIHdyYXBwZXIpOworCisgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCisgICAgcmV0dXJuIGNvbmNhdF9uYW1lOworICBYRlJFRSAoY29uY2F0X25hbWUpOworICByZXR1cm4gTlVMTDsKK30KKworY2hhciAqCitjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpCit7CisjaWZuZGVmIFNfSVNMTksKKyAgcmV0dXJuIHhzdHJkdXAgKHBhdGhzcGVjKTsKKyNlbHNlCisgIGNoYXIgYnVmW0xUX1BBVEhNQVhdOworICBzdHJ1Y3Qgc3RhdCBzOworICBjaGFyICp0bXBfcGF0aHNwZWMgPSB4c3RyZHVwIChwYXRoc3BlYyk7CisgIGNoYXIgKnA7CisgIGludCBoYXNfc3ltbGlua3MgPSAwOworICB3aGlsZSAoc3RybGVuICh0bXBfcGF0aHNwZWMpICYmICFoYXNfc3ltbGlua3MpCisgICAgeworICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAgICAgImNoZWNraW5nIHBhdGggY29tcG9uZW50IGZvciBzeW1saW5rczogJXNcbiIsCisJCSAgICAgIHRtcF9wYXRoc3BlYyk7CisgICAgICBpZiAobHN0YXQgKHRtcF9wYXRoc3BlYywgJnMpID09IDApCisJeworCSAgaWYgKFNfSVNMTksgKHMuc3RfbW9kZSkgIT0gMCkKKwkgICAgeworCSAgICAgIGhhc19zeW1saW5rcyA9IDE7CisJICAgICAgYnJlYWs7CisJICAgIH0KKworCSAgLyogc2VhcmNoIGJhY2t3YXJkcyBmb3IgbGFzdCBESVJfU0VQQVJBVE9SICovCisJICBwID0gdG1wX3BhdGhzcGVjICsgc3RybGVuICh0bXBfcGF0aHNwZWMpIC0gMTsKKwkgIHdoaWxlICgocCA+IHRtcF9wYXRoc3BlYykgJiYgKCFJU19ESVJfU0VQQVJBVE9SICgqcCkpKQorCSAgICBwLS07CisJICBpZiAoKHAgPT0gdG1wX3BhdGhzcGVjKSAmJiAoIUlTX0RJUl9TRVBBUkFUT1IgKCpwKSkpCisJICAgIHsKKwkgICAgICAvKiBubyBtb3JlIERJUl9TRVBBUkFUT1JTIGxlZnQgKi8KKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgKnAgPSAnXDAnOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICAgImVycm9yIGFjY2Vzc2luZyBmaWxlIFwiJXNcIjogJXMiLAorCQkgICAgdG1wX3BhdGhzcGVjLCBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisJfQorICAgIH0KKyAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CisKKyAgaWYgKCFoYXNfc3ltbGlua3MpCisgICAgeworICAgICAgcmV0dXJuIHhzdHJkdXAgKHBhdGhzcGVjKTsKKyAgICB9CisKKyAgdG1wX3BhdGhzcGVjID0gcmVhbHBhdGggKHBhdGhzcGVjLCBidWYpOworICBpZiAodG1wX3BhdGhzcGVjID09IDApCisgICAgeworICAgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJImNvdWxkIG5vdCBmb2xsb3cgc3ltbGlua3MgZm9yICVzIiwgcGF0aHNwZWMpOworICAgIH0KKyAgcmV0dXJuIHhzdHJkdXAgKHRtcF9wYXRoc3BlYyk7CisjZW5kaWYKK30KKworY2hhciAqCitzdHJlbmR6YXAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KQoreworICBzaXplX3QgbGVuLCBwYXRsZW47CisKKyAgYXNzZXJ0IChzdHIgIT0gTlVMTCk7CisgIGFzc2VydCAocGF0ICE9IE5VTEwpOworCisgIGxlbiA9IHN0cmxlbiAoc3RyKTsKKyAgcGF0bGVuID0gc3RybGVuIChwYXQpOworCisgIGlmIChwYXRsZW4gPD0gbGVuKQorICAgIHsKKyAgICAgIHN0ciArPSBsZW4gLSBwYXRsZW47CisgICAgICBpZiAoc3RyY21wIChzdHIsIHBhdCkgPT0gMCkKKwkqc3RyID0gJ1wwJzsKKyAgICB9CisgIHJldHVybiBzdHI7Cit9CisKK3ZvaWQKK2x0X2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaWYgKGx0X2RlYnVnKQorICAgIHsKKyAgICAgICh2b2lkKSBmcHJpbnRmIChzdGRlcnIsICIlczolczolZDogIiwgcHJvZ3JhbV9uYW1lLCBmaWxlLCBsaW5lKTsKKyAgICAgIHZhX3N0YXJ0IChhcmdzLCBmbXQpOworICAgICAgKHZvaWQpIHZmcHJpbnRmIChzdGRlcnIsIGZtdCwgYXJncyk7CisgICAgICB2YV9lbmQgKGFyZ3MpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2x0X2Vycm9yX2NvcmUgKGludCBleGl0X3N0YXR1cywgY29uc3QgY2hhciAqZmlsZSwKKwkgICAgICAgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1vZGUsCisJICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZhX2xpc3QgYXApCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzOiVzOiVkOiAlczogIiwgcHJvZ3JhbV9uYW1lLCBmaWxlLCBsaW5lLCBtb2RlKTsKKyAgdmZwcmludGYgKHN0ZGVyciwgbWVzc2FnZSwgYXApOworICBmcHJpbnRmIChzdGRlcnIsICIuXG4iKTsKKworICBpZiAoZXhpdF9zdGF0dXMgPj0gMCkKKyAgICBleGl0IChleGl0X3N0YXR1cyk7Cit9CisKK3ZvaWQKK2x0X2ZhdGFsIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKQoreworICB2YV9saXN0IGFwOworICB2YV9zdGFydCAoYXAsIG1lc3NhZ2UpOworICBsdF9lcnJvcl9jb3JlIChFWElUX0ZBSUxVUkUsIGZpbGUsIGxpbmUsICJGQVRBTCIsIG1lc3NhZ2UsIGFwKTsKKyAgdmFfZW5kIChhcCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK25vbm51bGwgKGNvbnN0IGNoYXIgKnMpCit7CisgIHJldHVybiBzID8gcyA6ICIobnVsbCkiOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitub25lbXB0eSAoY29uc3QgY2hhciAqcykKK3sKKyAgcmV0dXJuIChzICYmICEqcykgPyAiKGVtcHR5KSIgOiBub25udWxsIChzKTsKK30KKwordm9pZAorbHRfc2V0ZW52IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAiKGx0X3NldGVudikgc2V0dGluZyAnJXMnIHRvICclcydcbiIsCisgICAgICAgICAgICAgICAgICBub25udWxsIChuYW1lKSwgbm9ubnVsbCAodmFsdWUpKTsKKyAgeworI2lmZGVmIEhBVkVfU0VURU5WCisgICAgLyogYWx3YXlzIG1ha2UgYSBjb3B5LCBmb3IgY29uc2lzdGVuY3kgd2l0aCAhSEFWRV9TRVRFTlYgKi8KKyAgICBjaGFyICpzdHIgPSB4c3RyZHVwICh2YWx1ZSk7CisgICAgc2V0ZW52IChuYW1lLCBzdHIsIDEpOworI2Vsc2UKKyAgICBpbnQgbGVuID0gc3RybGVuIChuYW1lKSArIDEgKyBzdHJsZW4gKHZhbHVlKSArIDE7CisgICAgY2hhciAqc3RyID0gWE1BTExPQyAoY2hhciwgbGVuKTsKKyAgICBzcHJpbnRmIChzdHIsICIlcz0lcyIsIG5hbWUsIHZhbHVlKTsKKyAgICBpZiAocHV0ZW52IChzdHIpICE9IEVYSVRfU1VDQ0VTUykKKyAgICAgIHsKKyAgICAgICAgWEZSRUUgKHN0cik7CisgICAgICB9CisjZW5kaWYKKyAgfQorfQorCitjaGFyICoKK2x0X2V4dGVuZF9zdHIgKGNvbnN0IGNoYXIgKm9yaWdfdmFsdWUsIGNvbnN0IGNoYXIgKmFkZCwgaW50IHRvX2VuZCkKK3sKKyAgY2hhciAqbmV3X3ZhbHVlOworICBpZiAob3JpZ192YWx1ZSAmJiAqb3JpZ192YWx1ZSkKKyAgICB7CisgICAgICBpbnQgb3JpZ192YWx1ZV9sZW4gPSBzdHJsZW4gKG9yaWdfdmFsdWUpOworICAgICAgaW50IGFkZF9sZW4gPSBzdHJsZW4gKGFkZCk7CisgICAgICBuZXdfdmFsdWUgPSBYTUFMTE9DIChjaGFyLCBhZGRfbGVuICsgb3JpZ192YWx1ZV9sZW4gKyAxKTsKKyAgICAgIGlmICh0b19lbmQpCisgICAgICAgIHsKKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSwgb3JpZ192YWx1ZSk7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUgKyBvcmlnX3ZhbHVlX2xlbiwgYWRkKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUsIGFkZCk7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUgKyBhZGRfbGVuLCBvcmlnX3ZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG5ld192YWx1ZSA9IHhzdHJkdXAgKGFkZCk7CisgICAgfQorICByZXR1cm4gbmV3X3ZhbHVlOworfQorCit2b2lkCitsdF91cGRhdGVfZXhlX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICIobHRfdXBkYXRlX2V4ZV9wYXRoKSBtb2RpZnlpbmcgJyVzJyBieSBwcmVwZW5kaW5nICclcydcbiIsCisgICAgICAgICAgICAgICAgICBub25udWxsIChuYW1lKSwgbm9ubnVsbCAodmFsdWUpKTsKKworICBpZiAobmFtZSAmJiAqbmFtZSAmJiB2YWx1ZSAmJiAqdmFsdWUpCisgICAgeworICAgICAgY2hhciAqbmV3X3ZhbHVlID0gbHRfZXh0ZW5kX3N0ciAoZ2V0ZW52IChuYW1lKSwgdmFsdWUsIDApOworICAgICAgLyogc29tZSBzeXN0ZW1zIGNhbid0IGNvcGUgd2l0aCBhICc6Jy10ZXJtaW5hdGVkIHBhdGggIycgKi8KKyAgICAgIGludCBsZW4gPSBzdHJsZW4gKG5ld192YWx1ZSk7CisgICAgICB3aGlsZSAoKChsZW4gPSBzdHJsZW4gKG5ld192YWx1ZSkpID4gMCkgJiYgSVNfUEFUSF9TRVBBUkFUT1IgKG5ld192YWx1ZVtsZW4tMV0pKQorICAgICAgICB7CisgICAgICAgICAgbmV3X3ZhbHVlW2xlbi0xXSA9ICdcMCc7CisgICAgICAgIH0KKyAgICAgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKKyAgICAgIFhGUkVFIChuZXdfdmFsdWUpOworICAgIH0KK30KKwordm9pZAorbHRfdXBkYXRlX2xpYl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAiKGx0X3VwZGF0ZV9saWJfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAorICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7CisKKyAgaWYgKG5hbWUgJiYgKm5hbWUgJiYgdmFsdWUgJiYgKnZhbHVlKQorICAgIHsKKyAgICAgIGNoYXIgKm5ld192YWx1ZSA9IGx0X2V4dGVuZF9zdHIgKGdldGVudiAobmFtZSksIHZhbHVlLCAwKTsKKyAgICAgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKKyAgICAgIFhGUkVFIChuZXdfdmFsdWUpOworICAgIH0KK30KKworRU9GCisJICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICAgICBtaW5ndyopCisJCWNhdCA8PCJFT0YiCisKKy8qIFByZXBhcmVzIGFuIGFyZ3VtZW50IHZlY3RvciBiZWZvcmUgY2FsbGluZyBzcGF3bigpLgorICAgTm90ZSB0aGF0IHNwYXduKCkgZG9lcyBub3QgYnkgaXRzZWxmIGNhbGwgdGhlIGNvbW1hbmQgaW50ZXJwcmV0ZXIKKyAgICAgKGdldGVudiAoIkNPTVNQRUMiKSAhPSBOVUxMID8gZ2V0ZW52ICgiQ09NU1BFQyIpIDoKKyAgICAgICh7IE9TVkVSU0lPTklORk8gdjsgdi5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6ZW9mKE9TVkVSU0lPTklORk8pOworICAgICAgICAgR2V0VmVyc2lvbkV4KCZ2KTsKKyAgICAgICAgIHYuZHdQbGF0Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMl9OVDsKKyAgICAgIH0pID8gImNtZC5leGUiIDogImNvbW1hbmQuY29tIikuCisgICBJbnN0ZWFkIGl0IHNpbXBseSBjb25jYXRlbmF0ZXMgdGhlIGFyZ3VtZW50cywgc2VwYXJhdGVkIGJ5ICcgJywgYW5kIGNhbGxzCisgICBDcmVhdGVQcm9jZXNzKCkuICBXZSBtdXN0IHF1b3RlIHRoZSBhcmd1bWVudHMgc2luY2UgV2luMzIgQ3JlYXRlUHJvY2VzcygpCisgICBpbnRlcnByZXRzIGNoYXJhY3RlcnMgbGlrZSAnICcsICdcdCcsICdcXCcsICciJyAoYnV0IG5vdCAnPCcgYW5kICc+JykgaW4gYQorICAgc3BlY2lhbCB3YXk6CisgICAtIFNwYWNlIGFuZCB0YWIgYXJlIGludGVycHJldGVkIGFzIGRlbGltaXRlcnMuIFRoZXkgYXJlIG5vdCB0cmVhdGVkIGFzCisgICAgIGRlbGltaXRlcnMgaWYgdGhleSBhcmUgc3Vycm91bmRlZCBieSBkb3VibGUgcXVvdGVzOiAiLi4uIi4KKyAgIC0gVW5lc2NhcGVkIGRvdWJsZSBxdW90ZXMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgaW5wdXQuIFRoZWlyIG9ubHkgZWZmZWN0IGlzCisgICAgIHRoYXQgd2l0aGluIGRvdWJsZSBxdW90ZXMsIHNwYWNlIGFuZCB0YWIgYXJlIHRyZWF0ZWQgbGlrZSBub3JtYWwKKyAgICAgY2hhcmFjdGVycy4KKyAgIC0gQmFja3NsYXNoZXMgbm90IGZvbGxvd2VkIGJ5IGRvdWJsZSBxdW90ZXMgYXJlIG5vdCBzcGVjaWFsLgorICAgLSBCdXQgMipuKzEgYmFja3NsYXNoZXMgZm9sbG93ZWQgYnkgYSBkb3VibGUgcXVvdGUgYmVjb21lCisgICAgIG4gYmFja3NsYXNoZXMgZm9sbG93ZWQgYnkgYSBkb3VibGUgcXVvdGUgKG4gPj0gMCk6CisgICAgICAgXCIgLT4gIgorICAgICAgIFxcXCIgLT4gXCIKKyAgICAgICBcXFxcXCIgLT4gXFwiCisgKi8KKyNkZWZpbmUgU0hFTExfU1BFQ0lBTF9DSEFSUyAiXCJcXCBcMDAxXDAwMlwwMDNcMDA0XDAwNVwwMDZcMDA3XDAxMFwwMTFcMDEyXDAxM1wwMTRcMDE1XDAxNlwwMTdcMDIwXDAyMVwwMjJcMDIzXDAyNFwwMjVcMDI2XDAyN1wwMzBcMDMxXDAzMlwwMzNcMDM0XDAzNVwwMzZcMDM3IgorI2RlZmluZSBTSEVMTF9TUEFDRV9DSEFSUyAiIFwwMDFcMDAyXDAwM1wwMDRcMDA1XDAwNlwwMDdcMDEwXDAxMVwwMTJcMDEzXDAxNFwwMTVcMDE2XDAxN1wwMjBcMDIxXDAyMlwwMjNcMDI0XDAyNVwwMjZcMDI3XDAzMFwwMzFcMDMyXDAzM1wwMzRcMDM1XDAzNlwwMzciCitjaGFyICoqCitwcmVwYXJlX3NwYXduIChjaGFyICoqYXJndikKK3sKKyAgc2l6ZV90IGFyZ2M7CisgIGNoYXIgKipuZXdfYXJndjsKKyAgc2l6ZV90IGk7CisKKyAgLyogQ291bnQgbnVtYmVyIG9mIGFyZ3VtZW50cy4gICovCisgIGZvciAoYXJnYyA9IDA7IGFyZ3ZbYXJnY10gIT0gTlVMTDsgYXJnYysrKQorICAgIDsKKworICAvKiBBbGxvY2F0ZSBuZXcgYXJndW1lbnQgdmVjdG9yLiAgKi8KKyAgbmV3X2FyZ3YgPSBYTUFMTE9DIChjaGFyICosIGFyZ2MgKyAxKTsKKworICAvKiBQdXQgcXVvdGVkIGFyZ3VtZW50cyBpbnRvIHRoZSBuZXcgYXJndW1lbnQgdmVjdG9yLiAgKi8KKyAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpzdHJpbmcgPSBhcmd2W2ldOworCisgICAgICBpZiAoc3RyaW5nWzBdID09ICdcMCcpCisJbmV3X2FyZ3ZbaV0gPSB4c3RyZHVwICgiXCJcIiIpOworICAgICAgZWxzZSBpZiAoc3RycGJyayAoc3RyaW5nLCBTSEVMTF9TUEVDSUFMX0NIQVJTKSAhPSBOVUxMKQorCXsKKwkgIGludCBxdW90ZV9hcm91bmQgPSAoc3RycGJyayAoc3RyaW5nLCBTSEVMTF9TUEFDRV9DSEFSUykgIT0gTlVMTCk7CisJICBzaXplX3QgbGVuZ3RoOworCSAgdW5zaWduZWQgaW50IGJhY2tzbGFzaGVzOworCSAgY29uc3QgY2hhciAqczsKKwkgIGNoYXIgKnF1b3RlZF9zdHJpbmc7CisJICBjaGFyICpwOworCisJICBsZW5ndGggPSAwOworCSAgYmFja3NsYXNoZXMgPSAwOworCSAgaWYgKHF1b3RlX2Fyb3VuZCkKKwkgICAgbGVuZ3RoKys7CisJICBmb3IgKHMgPSBzdHJpbmc7ICpzICE9ICdcMCc7IHMrKykKKwkgICAgeworCSAgICAgIGNoYXIgYyA9ICpzOworCSAgICAgIGlmIChjID09ICciJykKKwkJbGVuZ3RoICs9IGJhY2tzbGFzaGVzICsgMTsKKwkgICAgICBsZW5ndGgrKzsKKwkgICAgICBpZiAoYyA9PSAnXFwnKQorCQliYWNrc2xhc2hlcysrOworCSAgICAgIGVsc2UKKwkJYmFja3NsYXNoZXMgPSAwOworCSAgICB9CisJICBpZiAocXVvdGVfYXJvdW5kKQorCSAgICBsZW5ndGggKz0gYmFja3NsYXNoZXMgKyAxOworCisJICBxdW90ZWRfc3RyaW5nID0gWE1BTExPQyAoY2hhciwgbGVuZ3RoICsgMSk7CisKKwkgIHAgPSBxdW90ZWRfc3RyaW5nOworCSAgYmFja3NsYXNoZXMgPSAwOworCSAgaWYgKHF1b3RlX2Fyb3VuZCkKKwkgICAgKnArKyA9ICciJzsKKwkgIGZvciAocyA9IHN0cmluZzsgKnMgIT0gJ1wwJzsgcysrKQorCSAgICB7CisJICAgICAgY2hhciBjID0gKnM7CisJICAgICAgaWYgKGMgPT0gJyInKQorCQl7CisJCSAgdW5zaWduZWQgaW50IGo7CisJCSAgZm9yIChqID0gYmFja3NsYXNoZXMgKyAxOyBqID4gMDsgai0tKQorCQkgICAgKnArKyA9ICdcXCc7CisJCX0KKwkgICAgICAqcCsrID0gYzsKKwkgICAgICBpZiAoYyA9PSAnXFwnKQorCQliYWNrc2xhc2hlcysrOworCSAgICAgIGVsc2UKKwkJYmFja3NsYXNoZXMgPSAwOworCSAgICB9CisJICBpZiAocXVvdGVfYXJvdW5kKQorCSAgICB7CisJICAgICAgdW5zaWduZWQgaW50IGo7CisJICAgICAgZm9yIChqID0gYmFja3NsYXNoZXM7IGogPiAwOyBqLS0pCisJCSpwKysgPSAnXFwnOworCSAgICAgICpwKysgPSAnIic7CisJICAgIH0KKwkgICpwID0gJ1wwJzsKKworCSAgbmV3X2FyZ3ZbaV0gPSBxdW90ZWRfc3RyaW5nOworCX0KKyAgICAgIGVsc2UKKwluZXdfYXJndltpXSA9IChjaGFyICopIHN0cmluZzsKKyAgICB9CisgIG5ld19hcmd2W2FyZ2NdID0gTlVMTDsKKworICByZXR1cm4gbmV3X2FyZ3Y7Cit9CitFT0YKKwkJOzsKKwkgICAgZXNhYworCisgICAgICAgICAgICBjYXQgPDwiRU9GIgordm9pZCBsdF9kdW1wX3NjcmlwdCAoRklMRSogZikKK3sKK0VPRgorCSAgICBmdW5jX2VtaXRfd3JhcHBlciB5ZXMgfAorICAgICAgICAgICAgICAkU0VEIC1lICdzL1woW1xcIl1cKS9cXFwxL2cnIFwKKwkgICAgICAgICAgIC1lICdzL14vICBmcHV0cyAoIi8nIC1lICdzLyQvXFxuIiwgZik7LycKKworICAgICAgICAgICAgY2F0IDw8IkVPRiIKK30KK0VPRgorfQorIyBlbmQ6IGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMKKworIyBmdW5jX3dpbjMyX2ltcG9ydF9saWJfcCBBUkcKKyMgVHJ1ZSBpZiBBUkcgaXMgYW4gaW1wb3J0IGxpYiwgYXMgaW5kaWNhdGVkIGJ5ICRmaWxlX21hZ2ljX2NtZAorZnVuY193aW4zMl9pbXBvcnRfbGliX3AgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgY2FzZSBgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCJcJDFcIiAyPi9kZXYvbnVsbCB8ICRTRUQgLWUgMTBxYCBpbgorICAgICppbXBvcnQqKSA6IDs7CisgICAgKikgZmFsc2UgOzsKKyAgICBlc2FjCit9CisKKyMgZnVuY19tb2RlX2xpbmsgYXJnLi4uCitmdW5jX21vZGVfbGluayAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBjYXNlICRob3N0IGluCisgICAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKyAgICAgICMgSXQgaXMgaW1wb3NzaWJsZSB0byBsaW5rIGEgZGxsIHdpdGhvdXQgdGhpcyBzZXR0aW5nLCBhbmQKKyAgICAgICMgd2Ugc2hvdWxkbid0IGZvcmNlIHRoZSBtYWtlZmlsZSBtYWludGFpbmVyIHRvIGZpZ3VyZSBvdXQKKyAgICAgICMgd2hpY2ggc3lzdGVtIHdlIGFyZSBjb21waWxpbmcgZm9yIGluIG9yZGVyIHRvIHBhc3MgYW4gZXh0cmEKKyAgICAgICMgZmxhZyBmb3IgZXZlcnkgbGlidG9vbCBpbnZvY2F0aW9uLgorICAgICAgIyBhbGxvd191bmRlZmluZWQ9bm8KKworICAgICAgIyBGSVhNRTogVW5mb3J0dW5hdGVseSwgdGhlcmUgYXJlIHByb2JsZW1zIHdpdGggdGhlIGFib3ZlIHdoZW4gdHJ5aW5nCisgICAgICAjIHRvIG1ha2UgYSBkbGwgd2hpY2ggaGFzIHVuZGVmaW5lZCBzeW1ib2xzLCBpbiB3aGljaCBjYXNlIG5vdAorICAgICAgIyBldmVuIGEgc3RhdGljIGxpYnJhcnkgaXMgYnVpbHQuICBGb3Igbm93LCB3ZSBuZWVkIHRvIHNwZWNpZnkKKyAgICAgICMgLW5vLXVuZGVmaW5lZCBvbiB0aGUgbGlidG9vbCBsaW5rIGxpbmUgd2hlbiB3ZSBjYW4gYmUgY2VydGFpbgorICAgICAgIyB0aGF0IGFsbCBzeW1ib2xzIGFyZSBzYXRpc2ZpZWQsIG90aGVyd2lzZSB3ZSBnZXQgYSBzdGF0aWMgbGlicmFyeS4KKyAgICAgIGFsbG93X3VuZGVmaW5lZD15ZXMKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGFsbG93X3VuZGVmaW5lZD15ZXMKKyAgICAgIDs7CisgICAgZXNhYworICAgIGxpYnRvb2xfYXJncz0kbm9ub3B0CisgICAgYmFzZV9jb21waWxlPSIkbm9ub3B0ICRAIgorICAgIGNvbXBpbGVfY29tbWFuZD0kbm9ub3B0CisgICAgZmluYWxpemVfY29tbWFuZD0kbm9ub3B0CisKKyAgICBjb21waWxlX3JwYXRoPQorICAgIGZpbmFsaXplX3JwYXRoPQorICAgIGNvbXBpbGVfc2hsaWJwYXRoPQorICAgIGZpbmFsaXplX3NobGlicGF0aD0KKyAgICBjb252ZW5pZW5jZT0KKyAgICBvbGRfY29udmVuaWVuY2U9CisgICAgZGVwbGlicz0KKyAgICBvbGRfZGVwbGlicz0KKyAgICBjb21waWxlcl9mbGFncz0KKyAgICBsaW5rZXJfZmxhZ3M9CisgICAgZGxsc2VhcmNocGF0aD0KKyAgICBsaWJfc2VhcmNoX3BhdGg9YHB3ZGAKKyAgICBpbnN0X3ByZWZpeF9kaXI9CisgICAgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9CisKKyAgICBhdm9pZF92ZXJzaW9uPW5vCisgICAgYmluZGlyPQorICAgIGRsZmlsZXM9CisgICAgZGxwcmVmaWxlcz0KKyAgICBkbHNlbGY9bm8KKyAgICBleHBvcnRfZHluYW1pYz1ubworICAgIGV4cG9ydF9zeW1ib2xzPQorICAgIGV4cG9ydF9zeW1ib2xzX3JlZ2V4PQorICAgIGdlbmVyYXRlZD0KKyAgICBsaWJvYmpzPQorICAgIGx0bGlicz0KKyAgICBtb2R1bGU9bm8KKyAgICBub19pbnN0YWxsPW5vCisgICAgb2Jqcz0KKyAgICBub25fcGljX29iamVjdHM9CisgICAgcHJlY2lvdXNfZmlsZXNfcmVnZXg9CisgICAgcHJlZmVyX3N0YXRpY19saWJzPW5vCisgICAgcHJlbG9hZD1ubworICAgIHByZXY9CisgICAgcHJldmFyZz0KKyAgICByZWxlYXNlPQorICAgIHJwYXRoPQorICAgIHhycGF0aD0KKyAgICBwZXJtX3JwYXRoPQorICAgIHRlbXBfcnBhdGg9CisgICAgdGhyZWFkX3NhZmU9bm8KKyAgICB2aW5mbz0KKyAgICB2aW5mb19udW1iZXI9bm8KKyAgICB3ZWFrX2xpYnM9CisgICAgc2luZ2xlX21vZHVsZT0iJHt3bH0tc2luZ2xlX21vZHVsZSIKKyAgICBmdW5jX2luZmVyX3RhZyAkYmFzZV9jb21waWxlCisKKyAgICAjIFdlIG5lZWQgdG8ga25vdyAtc3RhdGljLCB0byBnZXQgdGhlIHJpZ2h0IG91dHB1dCBmaWxlbmFtZXMuCisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1zaGFyZWQpCisJdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIFwKKwkgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAiY2FuIG5vdCBidWlsZCBhIHNoYXJlZCBsaWJyYXJ5IgorCWJ1aWxkX29sZF9saWJzPW5vCisJYnJlYWsKKwk7OworICAgICAgLWFsbC1zdGF0aWMgfCAtc3RhdGljIHwgLXN0YXRpYy1saWJ0b29sLWxpYnMpCisJY2FzZSAkYXJnIGluCisJLWFsbC1zdGF0aWMpCisJICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0IC16ICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJjb21wbGV0ZSBzdGF0aWMgbGlua2luZyBpcyBpbXBvc3NpYmxlIGluIHRoaXMgY29uZmlndXJhdGlvbiIKKwkgIGZpCisJICBpZiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYworCSAgZmkKKwkgIHByZWZlcl9zdGF0aWNfbGlicz15ZXMKKwkgIDs7CisJLXN0YXRpYykKKwkgIGlmIHRlc3QgLXogIiRwaWNfZmxhZyIgJiYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAgIGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0aWMKKwkgIGZpCisJICBwcmVmZXJfc3RhdGljX2xpYnM9YnVpbHQKKwkgIDs7CisJLXN0YXRpYy1saWJ0b29sLWxpYnMpCisJICBpZiB0ZXN0IC16ICIkcGljX2ZsYWciICYmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgICBkbG9wZW5fc2VsZj0kZGxvcGVuX3NlbGZfc3RhdGljCisJICBmaQorCSAgcHJlZmVyX3N0YXRpY19saWJzPXllcworCSAgOzsKKwllc2FjCisJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJYnVpbGRfb2xkX2xpYnM9eWVzCisJYnJlYWsKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgICMgU2VlIGlmIG91ciBzaGFyZWQgYXJjaGl2ZXMgZGVwZW5kIG9uIHN0YXRpYyBhcmNoaXZlcy4KKyAgICB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgJiYgYnVpbGRfb2xkX2xpYnM9eWVzCisKKyAgICAjIEdvIHRocm91Z2ggdGhlIGFyZ3VtZW50cywgdHJhbnNmb3JtaW5nIHRoZW0gb24gdGhlIHdheS4KKyAgICB3aGlsZSB0ZXN0ICIkIyIgLWd0IDA7IGRvCisgICAgICBhcmc9IiQxIgorICAgICAgc2hpZnQKKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisgICAgICBxYXJnPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdAorICAgICAgZnVuY19hcHBlbmQgbGlidG9vbF9hcmdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCisgICAgICAjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZHMgYW4gYXJndW1lbnQsIGFzc2lnbiBpdC4KKyAgICAgIGlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgorCWNhc2UgJHByZXYgaW4KKwlvdXRwdXQpCisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiBAT1VUUFVUQCIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiBAT1VUUFVUQCIKKwkgIDs7CisJZXNhYworCisJY2FzZSAkcHJldiBpbgorCWJpbmRpcikKKwkgIGJpbmRpcj0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlkbGZpbGVzfGRscHJlZmlsZXMpCisJICBpZiB0ZXN0ICIkcHJlbG9hZCIgPSBubzsgdGhlbgorCSAgICAjIEFkZCB0aGUgc3ltYm9sIG9iamVjdCBpbnRvIHRoZSBsaW5raW5nIGNvbW1hbmRzLgorCSAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiBAU1lNRklMRUAiCisJICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiBAU1lNRklMRUAiCisJICAgIHByZWxvYWQ9eWVzCisJICBmaQorCSAgY2FzZSAkYXJnIGluCisJICAqLmxhIHwgKi5sbykgOzsgICMgV2UgaGFuZGxlIHRoZXNlIGNhc2VzIGJlbG93LgorCSAgZm9yY2UpCisJICAgIGlmIHRlc3QgIiRkbHNlbGYiID0gbm87IHRoZW4KKwkgICAgICBkbHNlbGY9bmVlZGxlc3MKKwkgICAgICBleHBvcnRfZHluYW1pYz15ZXMKKwkgICAgZmkKKwkgICAgcHJldj0KKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgIHNlbGYpCisJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKwkgICAgICBkbHNlbGY9eWVzCisJICAgIGVsaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlcyAmJiB0ZXN0ICIkZGxvcGVuX3NlbGYiICE9IHllczsgdGhlbgorCSAgICAgIGRsc2VsZj15ZXMKKwkgICAgZWxzZQorCSAgICAgIGRsc2VsZj1uZWVkbGVzcworCSAgICAgIGV4cG9ydF9keW5hbWljPXllcworCSAgICBmaQorCSAgICBwcmV2PQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgKikKKwkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorCSAgICAgIGRsZmlsZXM9IiRkbGZpbGVzICRhcmciCisJICAgIGVsc2UKKwkgICAgICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkYXJnIgorCSAgICBmaQorCSAgICBwcmV2PQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgZXNhYworCSAgOzsKKwlleHBzeW1zKQorCSAgZXhwb3J0X3N5bWJvbHM9IiRhcmciCisJICB0ZXN0IC1mICIkYXJnIiBcCisJICAgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgInN5bWJvbCBmaWxlIFxgJGFyZycgZG9lcyBub3QgZXhpc3QiCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJZXhwc3ltc19yZWdleCkKKwkgIGV4cG9ydF9zeW1ib2xzX3JlZ2V4PSIkYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCWZyYW1ld29yaykKKwkgIGNhc2UgJGhvc3QgaW4KKwkgICAgKi0qLWRhcndpbiopCisJICAgICAgY2FzZSAiJGRlcGxpYnMgIiBpbgorCQkqIiAkcWFyZy5sdGZyYW1ld29yayAiKikgOzsKKwkJKikgZGVwbGlicz0iJGRlcGxpYnMgJHFhcmcubHRmcmFtZXdvcmsiICMgdGhpcyBpcyBmaXhlZCBsYXRlcgorCQkgICA7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgZXNhYworCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCWluc3RfcHJlZml4KQorCSAgaW5zdF9wcmVmaXhfZGlyPSIkYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCW9iamVjdGxpc3QpCisJICBpZiB0ZXN0IC1mICIkYXJnIjsgdGhlbgorCSAgICBzYXZlX2FyZz0kYXJnCisJICAgIG1vcmVhcmdzPQorCSAgICBmb3IgZmlsIGluIGBjYXQgIiRzYXZlX2FyZyJgCisJICAgIGRvCisjCSAgICAgIG1vcmVhcmdzPSIkbW9yZWFyZ3MgJGZpbCIKKwkgICAgICBhcmc9JGZpbAorCSAgICAgICMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgb2JqZWN0LgorCisJICAgICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgb2JqZWN0LgorCSAgICAgIGlmIGZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRhcmciOyB0aGVuCisJCXBpY19vYmplY3Q9CisJCW5vbl9waWNfb2JqZWN0PQorCisJCSMgUmVhZCB0aGUgLmxvIGZpbGUKKwkJZnVuY19zb3VyY2UgIiRhcmciCisKKwkJaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8CisJCSAgIHRlc3QgLXogIiRub25fcGljX29iamVjdCIgfHwKKwkJICAgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSAmJgorCQkgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiID0gbm9uZTsgdGhlbgorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2Ygb2JqZWN0IGZvciBcYCRhcmcnIgorCQlmaQorCisJCSMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisJCWZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCisJCXhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJCWlmIHRlc3QgIiRwaWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJCSAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KKwkJICBwaWNfb2JqZWN0PSIkeGRpciRwaWNfb2JqZWN0IgorCisJCSAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorCQkgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHllczsgdGhlbgorCQkgICAgICBkbGZpbGVzPSIkZGxmaWxlcyAkcGljX29iamVjdCIKKwkJICAgICAgcHJldj0KKwkJICAgICAgY29udGludWUKKwkJICAgIGVsc2UKKwkJICAgICAgIyBJZiBsaWJ0b29sIG9iamVjdHMgYXJlIHVuc3VwcG9ydGVkLCB0aGVuIHdlIG5lZWQgdG8gcHJlbG9hZC4KKwkJICAgICAgcHJldj1kbHByZWZpbGVzCisJCSAgICBmaQorCQkgIGZpCisKKwkJICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQorCQkgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKwkJICAgICMgUHJlbG9hZCB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKwkJICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRwaWNfb2JqZWN0IgorCQkgICAgcHJldj0KKwkJICBmaQorCisJCSAgIyBBIFBJQyBvYmplY3QuCisJCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorCQkgIGFyZz0iJHBpY19vYmplY3QiCisJCWZpCisKKwkJIyBOb24tUElDIG9iamVjdC4KKwkJaWYgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJCSAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KKwkJICBub25fcGljX29iamVjdD0iJHhkaXIkbm9uX3BpY19vYmplY3QiCisKKwkJICAjIEEgc3RhbmRhcmQgbm9uLVBJQyBvYmplY3QKKwkJICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJCSAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgOyB0aGVuCisJCSAgICBhcmc9IiRub25fcGljX29iamVjdCIKKwkJICBmaQorCQllbHNlCisJCSAgIyBJZiB0aGUgUElDIG9iamVjdCBleGlzdHMsIHVzZSBpdCBpbnN0ZWFkLgorCQkgICMgJHhkaXIgd2FzIHByZXBlbmRlZCB0byAkcGljX29iamVjdCBhYm92ZS4KKwkJICBub25fcGljX29iamVjdD0iJHBpY19vYmplY3QiCisJCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCQlmaQorCSAgICAgIGVsc2UKKwkJIyBPbmx5IGFuIGVycm9yIGlmIG5vdCBkb2luZyBhIGRyeS1ydW4uCisJCWlmICRvcHRfZHJ5X3J1bjsgdGhlbgorCQkgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisJCSAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKKwkJICB4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCQkgIGZ1bmNfbG8ybyAiJGFyZyIKKwkJICBwaWNfb2JqZWN0PSR4ZGlyJG9iamRpci8kZnVuY19sbzJvX3Jlc3VsdAorCQkgIG5vbl9waWNfb2JqZWN0PSR4ZGlyJGZ1bmNfbG8yb19yZXN1bHQKKwkJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCisJCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgICAgICAgZWxzZQorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGFyZycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QiCisJCWZpCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgZWxzZQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJsaW5rIGlucHV0IGZpbGUgXGAkYXJnJyBkb2VzIG5vdCBleGlzdCIKKwkgIGZpCisJICBhcmc9JHNhdmVfYXJnCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJcHJlY2lvdXNfcmVnZXgpCisJICBwcmVjaW91c19maWxlc19yZWdleD0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlyZWxlYXNlKQorCSAgcmVsZWFzZT0iLSRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJcnBhdGggfCB4cnBhdGgpCisJICAjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwkgIGNhc2UgJGFyZyBpbgorCSAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworCSAgKikKKwkgICAgZnVuY19mYXRhbF9lcnJvciAib25seSBhYnNvbHV0ZSBydW4tcGF0aHMgYXJlIGFsbG93ZWQiCisJICAgIDs7CisJICBlc2FjCisJICBpZiB0ZXN0ICIkcHJldiIgPSBycGF0aDsgdGhlbgorCSAgICBjYXNlICIkcnBhdGggIiBpbgorCSAgICAqIiAkYXJnICIqKSA7OworCSAgICAqKSBycGF0aD0iJHJwYXRoICRhcmciIDs7CisJICAgIGVzYWMKKwkgIGVsc2UKKwkgICAgY2FzZSAiJHhycGF0aCAiIGluCisJICAgICoiICRhcmcgIiopIDs7CisJICAgICopIHhycGF0aD0iJHhycGF0aCAkYXJnIiA7OworCSAgICBlc2FjCisJICBmaQorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXNocmV4dCkKKwkgIHNocmV4dF9jbWRzPSIkYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXdlYWspCisJICB3ZWFrX2xpYnM9IiR3ZWFrX2xpYnMgJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwl4Y2NsaW5rZXIpCisJICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJHFhcmciCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRxYXJnIgorCSAgcHJldj0KKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRxYXJnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRxYXJnIgorCSAgY29udGludWUKKwkgIDs7CisJeGNvbXBpbGVyKQorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkcWFyZyIKKwkgIHByZXY9CisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkcWFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCXhsaW5rZXIpCisJICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJHFhcmciCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICR3bCRxYXJnIgorCSAgcHJldj0KKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICR3bCRxYXJnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICR3bCRxYXJnIgorCSAgY29udGludWUKKwkgIDs7CisJKikKKwkgIGV2YWwgIiRwcmV2PVwiXCRhcmdcIiIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwllc2FjCisgICAgICBmaSAjIHRlc3QgLW4gIiRwcmV2IgorCisgICAgICBwcmV2YXJnPSIkYXJnIgorCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1hbGwtc3RhdGljKQorCWlmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgIyBTZWUgY29tbWVudCBmb3IgLXN0YXRpYyBmbGFnIGJlbG93LCBmb3IgbW9yZSBkZXRhaWxzLgorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGxpbmtfc3RhdGljX2ZsYWciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGxpbmtfc3RhdGljX2ZsYWciCisJZmkKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1hbGxvdy11bmRlZmluZWQpCisJIyBGSVhNRTogcmVtb3ZlIHRoaXMgZmxhZyBzb21ldGltZSBpbiB0aGUgZnV0dXJlLgorCWZ1bmNfZmF0YWxfZXJyb3IgIlxgLWFsbG93LXVuZGVmaW5lZCcgbXVzdCBub3QgYmUgdXNlZCBiZWNhdXNlIGl0IGlzIHRoZSBkZWZhdWx0IgorCTs7CisKKyAgICAgIC1hdm9pZC12ZXJzaW9uKQorCWF2b2lkX3ZlcnNpb249eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtYmluZGlyKQorCXByZXY9YmluZGlyCisJY29udGludWUKKwk7OworCisgICAgICAtZGxvcGVuKQorCXByZXY9ZGxmaWxlcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWRscHJlb3BlbikKKwlwcmV2PWRscHJlZmlsZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1leHBvcnQtZHluYW1pYykKKwlleHBvcnRfZHluYW1pYz15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1leHBvcnQtc3ltYm9scyB8IC1leHBvcnQtc3ltYm9scy1yZWdleCkKKwlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiIHx8IHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIm1vcmUgdGhhbiBvbmUgLWV4cG9ydGVkLXN5bWJvbHMgYXJndW1lbnQgaXMgbm90IGFsbG93ZWQiCisJZmkKKwlpZiB0ZXN0ICJYJGFyZyIgPSAiWC1leHBvcnQtc3ltYm9scyI7IHRoZW4KKwkgIHByZXY9ZXhwc3ltcworCWVsc2UKKwkgIHByZXY9ZXhwc3ltc19yZWdleAorCWZpCisJY29udGludWUKKwk7OworCisgICAgICAtZnJhbWV3b3JrKQorCXByZXY9ZnJhbWV3b3JrCisJY29udGludWUKKwk7OworCisgICAgICAtaW5zdC1wcmVmaXgtZGlyKQorCXByZXY9aW5zdF9wcmVmaXgKKwljb250aW51ZQorCTs7CisKKyAgICAgICMgVGhlIG5hdGl2ZSBJUklYIGxpbmtlciB1bmRlcnN0YW5kcyAtTEFORzoqLCAtTElTVDoqIGFuZCAtTE5POioKKyAgICAgICMgc28sIGlmIHdlIHNlZSB0aGVzZSBmbGFncyBiZSBjYXJlZnVsIG5vdCB0byB0cmVhdCB0aGVtIGxpa2UgLUwKKyAgICAgIC1MW0EtWl1bQS1aXSo6KikKKwljYXNlICR3aXRoX2djYy8kaG9zdCBpbgorCW5vLyotKi1pcml4KiB8IC8qLSotaXJpeCopCisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisJICA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1MKikKKwlmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkYXJnIgorCWRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJaWYgdGVzdCAteiAiJGRpciI7IHRoZW4KKwkgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJyZXF1aXJlIG5vIHNwYWNlIGJldHdlZW4gXGAtTCcgYW5kIFxgJDEnIgorCSAgZWxzZQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJuZWVkIHBhdGggZm9yIFxgLUwnIG9wdGlvbiIKKwkgIGZpCisJZmkKKwkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwljYXNlICRkaXIgaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CisJKikKKwkgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKKwkgIHRlc3QgLXogIiRhYnNkaXIiICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRkaXInIgorCSAgZGlyPSIkYWJzZGlyIgorCSAgOzsKKwllc2FjCisJY2FzZSAiJGRlcGxpYnMgIiBpbgorCSoiIC1MJGRpciAiKikgOzsKKwkqKQorCSAgZGVwbGlicz0iJGRlcGxpYnMgLUwkZGlyIgorCSAgbGliX3NlYXJjaF9wYXRoPSIkbGliX3NlYXJjaF9wYXRoICRkaXIiCisJICA7OworCWVzYWMKKwljYXNlICRob3N0IGluCisJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKwkgIHRlc3RiaW5kaXI9YCRFQ0hPICIkZGlyIiB8ICRTRUQgJ3MqL2xpYiQqL2JpbionYAorCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisJICAqIjokZGlyOiIqKSA7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JGRpcjs7CisJICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokZGlyIjs7CisJICBlc2FjCisJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKwkgICoiOiR0ZXN0YmluZGlyOiIqKSA7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JHRlc3RiaW5kaXI7OworCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JHRlc3RiaW5kaXIiOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWwqKQorCWlmIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiB8fCB0ZXN0ICJYJGFyZyIgPSAiWC1sbSI7IHRoZW4KKwkgIGNhc2UgJGhvc3QgaW4KKwkgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1iZW9zKiB8ICotY2VnY2MqIHwgKi0qLWhhaWt1KikKKwkgICAgIyBUaGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBDIG9yIG1hdGggbGlicmFyeSAoYXMgc3VjaCkKKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgICotKi1vczIqKQorCSAgICAjIFRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIEMgbGlicmFyeSAoYXMgc3VjaCkKKwkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCogfCAqLSotZHJhZ29uZmx5KikKKwkgICAgIyBEbyBub3QgaW5jbHVkZSBsaWJjIGR1ZSB0byB1cyBoYXZpbmcgbGliYy9saWJjX3IuCisJICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorCSAgICA7OworCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSAgICAjIFJoYXBzb2R5IEMgYW5kIG1hdGggbGlicmFyaWVzIGFyZSBpbiB0aGUgU3lzdGVtIGZyYW1ld29yaworCSAgICBkZXBsaWJzPSIkZGVwbGlicyBTeXN0ZW0ubHRmcmFtZXdvcmsiCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotc2NvMy4ydjUqIHwgKi0qLXNjbzV2NiopCisJICAgICMgQ2F1c2VzIHByb2JsZW1zIHdpdGggX19jdHlwZQorCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgICotKi1zeXN2NC4ydXcyKiB8ICotKi1zeXN2NSogfCAqLSotdW5peHdhcmUqIHwgKi0qLU9wZW5VTklYKikKKwkgICAgIyBDb21waWxlciBpbnNlcnRzIGxpYmMgaW4gdGhlIGNvcnJlY3QgcGxhY2UgZm9yIHRocmVhZHMgdG8gd29yaworCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgIGVzYWMKKwllbGlmIHRlc3QgIlgkYXJnIiA9ICJYLWxjX3IiOyB0aGVuCisJIGNhc2UgJGhvc3QgaW4KKwkgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSopCisJICAgIyBEbyBub3QgaW5jbHVkZSBsaWJjX3IgZGlyZWN0bHksIHVzZSAtcHRocmVhZCBmbGFnLgorCSAgIGNvbnRpbnVlCisJICAgOzsKKwkgZXNhYworCWZpCisJZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1tb2R1bGUpCisJbW9kdWxlPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgIyBUcnU2NCBVTklYIHVzZXMgLW1vZGVsIFthcmddIHRvIGRldGVybWluZSB0aGUgbGF5b3V0IG9mIEMrKworICAgICAgIyBjbGFzc2VzLCBuYW1lIG1hbmdsaW5nLCBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLgorICAgICAgIyBEYXJ3aW4gdXNlcyB0aGUgLWFyY2ggZmxhZyB0byBkZXRlcm1pbmUgb3V0cHV0IGFyY2hpdGVjdHVyZS4KKyAgICAgIC1tb2RlbHwtYXJjaHwtaXN5c3Jvb3QpCisJY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgorCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisJcHJldj14Y29tcGlsZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1tdHwtbXRocmVhZHN8LWt0aHJlYWR8LUt0aHJlYWR8LXB0aHJlYWR8LXB0aHJlYWRzfC0tdGhyZWFkLXNhZmV8LXRocmVhZHMpCisJY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgorCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKwkgICAgKiIgJGFyZyAiKikgOzsKKwkgICAgKiApIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGFyZyIgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtbXVsdGlfbW9kdWxlKQorCXNpbmdsZV9tb2R1bGU9IiR7d2x9LW11bHRpX21vZHVsZSIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1uby1mYXN0LWluc3RhbGwpCisJZmFzdF9pbnN0YWxsPW5vCisJY29udGludWUKKwk7OworCisgICAgICAtbm8taW5zdGFsbCkKKwljYXNlICRob3N0IGluCisJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotZGFyd2luKiB8ICotY2VnY2MqKQorCSAgIyBUaGUgUEFUSCBoYWNrZXJ5IGluIHdyYXBwZXIgc2NyaXB0cyBpcyByZXF1aXJlZCBvbiBXaW5kb3dzCisJICAjIGFuZCBEYXJ3aW4gaW4gb3JkZXIgZm9yIHRoZSBsb2FkZXIgdG8gZmluZCBhbnkgZGxscyBpdCBuZWVkcy4KKwkgIGZ1bmNfd2FybmluZyAiXGAtbm8taW5zdGFsbCcgaXMgaWdub3JlZCBmb3IgJGhvc3QiCisJICBmdW5jX3dhcm5pbmcgImFzc3VtaW5nIFxgLW5vLWZhc3QtaW5zdGFsbCcgaW5zdGVhZCIKKwkgIGZhc3RfaW5zdGFsbD1ubworCSAgOzsKKwkqKSBub19pbnN0YWxsPXllcyA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1uby11bmRlZmluZWQpCisJYWxsb3dfdW5kZWZpbmVkPW5vCisJY29udGludWUKKwk7OworCisgICAgICAtb2JqZWN0bGlzdCkKKwlwcmV2PW9iamVjdGxpc3QKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1vKSBwcmV2PW91dHB1dCA7OworCisgICAgICAtcHJlY2lvdXMtZmlsZXMtcmVnZXgpCisJcHJldj1wcmVjaW91c19yZWdleAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXJlbGVhc2UpCisJcHJldj1yZWxlYXNlCisJY29udGludWUKKwk7OworCisgICAgICAtcnBhdGgpCisJcHJldj1ycGF0aAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLVIpCisJcHJldj14cnBhdGgKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1SKikKKwlmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkYXJnIgorCWRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJY2FzZSAkZGlyIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworCSopCisJICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGFic29sdXRlIHJ1bi1wYXRocyBhcmUgYWxsb3dlZCIKKwkgIDs7CisJZXNhYworCWNhc2UgIiR4cnBhdGggIiBpbgorCSoiICRkaXIgIiopIDs7CisJKikgeHJwYXRoPSIkeHJwYXRoICRkaXIiIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXNoYXJlZCkKKwkjIFRoZSBlZmZlY3RzIG9mIC1zaGFyZWQgYXJlIGRlZmluZWQgaW4gYSBwcmV2aW91cyBsb29wLgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXNocmV4dCkKKwlwcmV2PXNocmV4dAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXN0YXRpYyB8IC1zdGF0aWMtbGlidG9vbC1saWJzKQorCSMgVGhlIGVmZmVjdHMgb2YgLXN0YXRpYyBhcmUgZGVmaW5lZCBpbiBhIHByZXZpb3VzIGxvb3AuCisJIyBXZSB1c2VkIHRvIGRvIHRoZSBzYW1lIGFzIC1hbGwtc3RhdGljIG9uIHBsYXRmb3JtcyB0aGF0CisJIyBkaWRuJ3QgaGF2ZSBhIFBJQyBmbGFnLCBidXQgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZWZmZWN0cworCSMgd291bGQgYmUgZXF1aXZhbGVudCB3YXMgd3JvbmcuICBJdCB3b3VsZCBicmVhayBvbiBhdCBsZWFzdAorCSMgRGlnaXRhbCBVbml4IGFuZCBBSVguCisJY29udGludWUKKwk7OworCisgICAgICAtdGhyZWFkLXNhZmUpCisJdGhyZWFkX3NhZmU9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtdmVyc2lvbi1pbmZvKQorCXByZXY9dmluZm8KKwljb250aW51ZQorCTs7CisKKyAgICAgIC12ZXJzaW9uLW51bWJlcikKKwlwcmV2PXZpbmZvCisJdmluZm9fbnVtYmVyPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXdlYWspCisgICAgICAgIHByZXY9d2VhaworCWNvbnRpbnVlCisJOzsKKworICAgICAgLVdjLCopCisJZnVuY19zdHJpcG5hbWUgJy1XYywnICcnICIkYXJnIgorCWFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCWFyZz0KKwlzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKKwlmb3IgZmxhZyBpbiAkYXJnczsgZG8KKwkgIElGUz0iJHNhdmVfaWZzIgorICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgorCSAgYXJnPSIkYXJnICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCWRvbmUKKwlJRlM9IiRzYXZlX2lmcyIKKwlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCisJYXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwk7OworCisgICAgICAtV2wsKikKKwlmdW5jX3N0cmlwbmFtZSAnLVdsLCcgJycgIiRhcmciCisJYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJYXJnPQorCXNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworCWZvciBmbGFnIGluICRhcmdzOyBkbworCSAgSUZTPSIkc2F2ZV9pZnMiCisgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZsYWciCisJICBhcmc9IiRhcmcgJHdsJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCWRvbmUKKwlJRlM9IiRzYXZlX2lmcyIKKwlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCisJYXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwk7OworCisgICAgICAtWGNvbXBpbGVyKQorCXByZXY9eGNvbXBpbGVyCisJY29udGludWUKKwk7OworCisgICAgICAtWGxpbmtlcikKKwlwcmV2PXhsaW5rZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1YQ0NsaW5rZXIpCisJcHJldj14Y2NsaW5rZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgICMgLW1zZ18qIGZvciBvc2YgY2MKKyAgICAgIC1tc2dfKikKKwlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCTs7CisKKyAgICAgICMgRmxhZ3MgdG8gYmUgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLCB3aXRoIHJhdGlvbmFsZToKKyAgICAgICMgLTY0LCAtbWlwc1swLTldICAgICAgZW5hYmxlIDY0LWJpdCBtb2RlIGZvciB0aGUgU0dJIGNvbXBpbGVyCisgICAgICAjIC1yWzAtOV1bMC05XSogICAgICAgIHNwZWNpZnkgcHJvY2Vzc29yIGZvciB0aGUgU0dJIGNvbXBpbGVyCisgICAgICAjIC14YXJjaD0qLCAteHRhcmdldD0qIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIFN1biBjb21waWxlcgorICAgICAgIyArREEqLCArREQqICAgICAgICAgICBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBIUCBjb21waWxlcgorICAgICAgIyAtcSogICAgICAgICAgICAgICAgICBjb21waWxlciBhcmdzIGZvciB0aGUgSUJNIGNvbXBpbGVyCisgICAgICAjIC1tKiwgLXRbNDVdKiwgLXR4c2NhbGUqIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmbGFncyBmb3IgR0NDCisgICAgICAjIC1GL3BhdGggICAgICAgICAgICAgIHBhdGggdG8gdW5pbnN0YWxsZWQgZnJhbWV3b3JrcywgZ2NjIG9uIGRhcndpbgorICAgICAgIyAtcCwgLXBnLCAtLWNvdmVyYWdlLCAtZnByb2ZpbGUtKiAgcHJvZmlsaW5nIGZsYWdzIGZvciBHQ0MKKyAgICAgICMgQGZpbGUgICAgICAgICAgICAgICAgR0NDIHJlc3BvbnNlIGZpbGVzCisgICAgICAjIC10cD0qICAgICAgICAgICAgICAgIFBvcnRsYW5kIHBnY2MgdGFyZ2V0IHByb2Nlc3NvciBzZWxlY3Rpb24KKyAgICAgIC02NHwtbWlwc1swLTldfC1yWzAtOV1bMC05XSp8LXhhcmNoPSp8LXh0YXJnZXQ9KnwrREEqfCtERCp8LXEqfC1tKnwgXAorICAgICAgLXRbNDVdKnwtdHhzY2FsZSp8LXB8LXBnfC0tY292ZXJhZ2V8LWZwcm9maWxlLSp8LUYqfEAqfC10cD0qKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorICAgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKyAgICAgICAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgorICAgICAgICBjb250aW51ZQorICAgICAgICA7OworCisgICAgICAjIFNvbWUgb3RoZXIgY29tcGlsZXIgZmxhZy4KKyAgICAgIC0qIHwgKyopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJOzsKKworICAgICAgKi4kb2JqZXh0KQorCSMgQSBzdGFuZGFyZCBvYmplY3QuCisJb2Jqcz0iJG9ianMgJGFyZyIKKwk7OworCisgICAgICAqLmxvKQorCSMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgb2JqZWN0LgorCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgb2JqZWN0LgorCWlmIGZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRhcmciOyB0aGVuCisJICBwaWNfb2JqZWN0PQorCSAgbm9uX3BpY19vYmplY3Q9CisKKwkgICMgUmVhZCB0aGUgLmxvIGZpbGUKKwkgIGZ1bmNfc291cmNlICIkYXJnIgorCisJICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwKKwkgICAgIHRlc3QgLXogIiRub25fcGljX29iamVjdCIgfHwKKwkgICAgIHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgJiYKKwkgICAgIHRlc3QgIiRub25fcGljX29iamVjdCIgPSBub25lOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2Ygb2JqZWN0IGZvciBcYCRhcmcnIgorCSAgZmkKKworCSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKwkgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCisJICB4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCSAgaWYgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkgICAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KKwkgICAgcGljX29iamVjdD0iJHhkaXIkcGljX29iamVjdCIKKworCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCisJICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHllczsgdGhlbgorCQlkbGZpbGVzPSIkZGxmaWxlcyAkcGljX29iamVjdCIKKwkJcHJldj0KKwkJY29udGludWUKKwkgICAgICBlbHNlCisJCSMgSWYgbGlidG9vbCBvYmplY3RzIGFyZSB1bnN1cHBvcnRlZCwgdGhlbiB3ZSBuZWVkIHRvIHByZWxvYWQuCisJCXByZXY9ZGxwcmVmaWxlcworCSAgICAgIGZpCisJICAgIGZpCisKKwkgICAgIyBDSEVDSyBNRTogIEkgdGhpbmsgSSBidXN0ZWQgdGhpcy4gIC1Pc3NhbWEKKwkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorCSAgICAgICMgUHJlbG9hZCB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKwkgICAgICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkcGljX29iamVjdCIKKwkgICAgICBwcmV2PQorCSAgICBmaQorCisJICAgICMgQSBQSUMgb2JqZWN0LgorCSAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCisJICAgIGFyZz0iJHBpY19vYmplY3QiCisJICBmaQorCisJICAjIE5vbi1QSUMgb2JqZWN0LgorCSAgaWYgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICAgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJICAgIG5vbl9waWNfb2JqZWN0PSIkeGRpciRub25fcGljX29iamVjdCIKKworCSAgICAjIEEgc3RhbmRhcmQgbm9uLVBJQyBvYmplY3QKKwkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSA7IHRoZW4KKwkgICAgICBhcmc9IiRub25fcGljX29iamVjdCIKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgIyBJZiB0aGUgUElDIG9iamVjdCBleGlzdHMsIHVzZSBpdCBpbnN0ZWFkLgorCSAgICAjICR4ZGlyIHdhcyBwcmVwZW5kZWQgdG8gJHBpY19vYmplY3QgYWJvdmUuCisJICAgIG5vbl9waWNfb2JqZWN0PSIkcGljX29iamVjdCIKKwkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgZmkKKwllbHNlCisJICAjIE9ubHkgYW4gZXJyb3IgaWYgbm90IGRvaW5nIGEgZHJ5LXJ1bi4KKwkgIGlmICRvcHRfZHJ5X3J1bjsgdGhlbgorCSAgICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCSAgICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCSAgICB4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCSAgICBmdW5jX2xvMm8gIiRhcmciCisJICAgIHBpY19vYmplY3Q9JHhkaXIkb2JqZGlyLyRmdW5jX2xvMm9fcmVzdWx0CisJICAgIG5vbl9waWNfb2JqZWN0PSR4ZGlyJGZ1bmNfbG8yb19yZXN1bHQKKwkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJICBlbHNlCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGFyZycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QiCisJICBmaQorCWZpCisJOzsKKworICAgICAgKi4kbGliZXh0KQorCSMgQW4gYXJjaGl2ZS4KKwlkZXBsaWJzPSIkZGVwbGlicyAkYXJnIgorCW9sZF9kZXBsaWJzPSIkb2xkX2RlcGxpYnMgJGFyZyIKKwljb250aW51ZQorCTs7CisKKyAgICAgICoubGEpCisJIyBBIGxpYnRvb2wtY29udHJvbGxlZCBsaWJyYXJ5LgorCisJaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorCSAgIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbG9wZW4uCisJICBkbGZpbGVzPSIkZGxmaWxlcyAkYXJnIgorCSAgcHJldj0KKwllbGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKwkgICMgVGhlIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbHByZW9wZW4uCisJICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkYXJnIgorCSAgcHJldj0KKwllbHNlCisJICBkZXBsaWJzPSIkZGVwbGlicyAkYXJnIgorCWZpCisJY29udGludWUKKwk7OworCisgICAgICAjIFNvbWUgb3RoZXIgY29tcGlsZXIgYXJndW1lbnQuCisgICAgICAqKQorCSMgVW5rbm93biBhcmd1bWVudHMgaW4gYm90aCBmaW5hbGl6ZV9jb21tYW5kIGFuZCBjb21waWxlX2NvbW1hbmQgbmVlZAorCSMgdG8gYmUgYWVzdGhldGljYWxseSBxdW90ZWQgYmVjYXVzZSB0aGV5IGFyZSBldmFsZWQgbGF0ZXIuCisJZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwk7OworICAgICAgZXNhYyAjIGFyZworCisgICAgICAjIE5vdyBhY3R1YWxseSBzdWJzdGl0dXRlIHRoZSBhcmd1bWVudCBpbnRvIHRoZSBjb21tYW5kcy4KKyAgICAgIGlmIHRlc3QgLW4gIiRhcmciOyB0aGVuCisJZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKyAgICAgIGZpCisgICAgZG9uZSAjIGFyZ3VtZW50IHBhcnNpbmcgbG9vcAorCisgICAgdGVzdCAtbiAiJHByZXYiICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAidGhlIFxgJHByZXZhcmcnIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIKKworICAgIGlmIHRlc3QgIiRleHBvcnRfZHluYW1pYyIgPSB5ZXMgJiYgdGVzdCAtbiAiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyI7IHRoZW4KKyAgICAgIGV2YWwgYXJnPVwiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCisgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisgICAgZmkKKworICAgIG9sZGxpYnM9CisgICAgIyBjYWxjdWxhdGUgdGhlIG5hbWUgb2YgdGhlIGZpbGUsIHdpdGhvdXQgaXRzIGRpcmVjdG9yeQorICAgIGZ1bmNfYmFzZW5hbWUgIiRvdXRwdXQiCisgICAgb3V0cHV0bmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgIGxpYm9ianNfc2F2ZT0iJGxpYm9ianMiCisKKyAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKyAgICAgICMgZ2V0IHRoZSBkaXJlY3RvcmllcyBsaXN0ZWQgaW4gJHNobGlicGF0aF92YXIKKyAgICAgIGV2YWwgc2hsaWJfc2VhcmNoX3BhdGg9XGBcJEVDSE8gXCJcJHskc2hsaWJwYXRoX3Zhcn1cIiBcfCBcJFNFRCBcJ3MvOi8gL2dcJ1xgCisgICAgZWxzZQorICAgICAgc2hsaWJfc2VhcmNoX3BhdGg9CisgICAgZmkKKyAgICBldmFsIHN5c19saWJfc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXCIKKyAgICBldmFsIHN5c19saWJfZGxzZWFyY2hfcGF0aD1cIiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY1wiCisKKyAgICBmdW5jX2Rpcm5hbWUgIiRvdXRwdXQiICIvIiAiIgorICAgIG91dHB1dF9vYmpkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JG9iamRpciIKKyAgICAjIENyZWF0ZSB0aGUgb2JqZWN0IGRpcmVjdG9yeS4KKyAgICBmdW5jX21rZGlyX3AgIiRvdXRwdXRfb2JqZGlyIgorCisgICAgIyBEZXRlcm1pbmUgdGhlIHR5cGUgb2Ygb3V0cHV0CisgICAgY2FzZSAkb3V0cHV0IGluCisgICAgIiIpCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYW4gb3V0cHV0IGZpbGUiCisgICAgICA7OworICAgICouJGxpYmV4dCkgbGlua21vZGU9b2xkbGliIDs7CisgICAgKi5sbyB8ICouJG9iamV4dCkgbGlua21vZGU9b2JqIDs7CisgICAgKi5sYSkgbGlua21vZGU9bGliIDs7CisgICAgKikgbGlua21vZGU9cHJvZyA7OyAjIEFueXRoaW5nIGVsc2Ugc2hvdWxkIGJlIGEgcHJvZ3JhbS4KKyAgICBlc2FjCisKKyAgICBzcGVjaWFsZGVwbGlicz0KKworICAgIGxpYnM9CisgICAgIyBGaW5kIGFsbCBpbnRlcmRlcGVuZGVudCBkZXBsaWJzIGJ5IHNlYXJjaGluZyBmb3IgbGlicmFyaWVzCisgICAgIyB0aGF0IGFyZSBsaW5rZWQgbW9yZSB0aGFuIG9uY2UgKGUuZy4gLWxhIC1sYiAtbGEpCisgICAgZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KKyAgICAgIGlmICRvcHRfZHVwbGljYXRlX2RlcHMgOyB0aGVuCisJY2FzZSAiJGxpYnMgIiBpbgorCSoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgbGlicz0iJGxpYnMgJGRlcGxpYiIKKyAgICBkb25lCisKKyAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisgICAgICBsaWJzPSIkcHJlZGVwcyAkbGlicyAkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoICRwb3N0ZGVwcyIKKworICAgICAgIyBDb21wdXRlIGxpYnJhcmllcyB0aGF0IGFyZSBsaXN0ZWQgbW9yZSB0aGFuIG9uY2UgaW4gJHByZWRlcHMKKyAgICAgICMgJHBvc3RkZXBzIGFuZCBtYXJrIHRoZW0gYXMgc3BlY2lhbCAoaS5lLiwgd2hvc2UgZHVwbGljYXRlcyBhcmUKKyAgICAgICMgbm90IHRvIGJlIGVsaW1pbmF0ZWQpLgorICAgICAgcHJlX3Bvc3RfZGVwcz0KKyAgICAgIGlmICRvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzOyB0aGVuCisJZm9yIHByZV9wb3N0X2RlcCBpbiAkcHJlZGVwcyAkcG9zdGRlcHM7IGRvCisJICBjYXNlICIkcHJlX3Bvc3RfZGVwcyAiIGluCisJICAqIiAkcHJlX3Bvc3RfZGVwICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRwcmVfcG9zdF9kZXBzIiA7OworCSAgZXNhYworCSAgcHJlX3Bvc3RfZGVwcz0iJHByZV9wb3N0X2RlcHMgJHByZV9wb3N0X2RlcCIKKwlkb25lCisgICAgICBmaQorICAgICAgcHJlX3Bvc3RfZGVwcz0KKyAgICBmaQorCisgICAgZGVwbGlicz0KKyAgICBuZXdkZXBlbmRlbmN5X2xpYnM9CisgICAgbmV3bGliX3NlYXJjaF9wYXRoPQorICAgIG5lZWRfcmVsaW5rPW5vICMgd2hldGhlciB3ZSdyZSBsaW5raW5nIGFueSB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworICAgIG5vdGluc3RfZGVwbGlicz0gIyBub3QtaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisgICAgbm90aW5zdF9wYXRoPSAjIHBhdGhzIHRoYXQgY29udGFpbiBub3QtaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisKKyAgICBjYXNlICRsaW5rbW9kZSBpbgorICAgIGxpYikKKwlwYXNzZXM9ImNvbnYgZGxwcmVvcGVuIGxpbmsiCisJZm9yIGZpbGUgaW4gJGRsZmlsZXMgJGRscHJlZmlsZXM7IGRvCisJICBjYXNlICRmaWxlIGluCisJICAqLmxhKSA7OworCSAgKikKKwkgICAgZnVuY19mYXRhbF9oZWxwICJsaWJyYXJpZXMgY2FuIFxgLWRsb3Blbicgb25seSBsaWJ0b29sIGxpYnJhcmllczogJGZpbGUiCisJICAgIDs7CisJICBlc2FjCisJZG9uZQorCTs7CisgICAgcHJvZykKKwljb21waWxlX2RlcGxpYnM9CisJZmluYWxpemVfZGVwbGlicz0KKwlhbGxkZXBsaWJzPW5vCisJbmV3ZGxmaWxlcz0KKwluZXdkbHByZWZpbGVzPQorCXBhc3Nlcz0iY29udiBzY2FuIGRsb3BlbiBkbHByZW9wZW4gbGluayIKKwk7OworICAgICopICBwYXNzZXM9ImNvbnYiCisJOzsKKyAgICBlc2FjCisKKyAgICBmb3IgcGFzcyBpbiAkcGFzc2VzOyBkbworICAgICAgIyBUaGUgcHJlb3BlbiBwYXNzIGluIGxpYiBtb2RlIHJldmVyc2VzICRkZXBsaWJzOyBwdXQgaXQgYmFjayBoZXJlCisgICAgICAjIHNvIHRoYXQgLUwgY29tZXMgYmVmb3JlIGxpYnMgdGhhdCBuZWVkIGl0IGZvciBpbnN0YW5jZS4uLgorICAgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsbGluayI7IHRoZW4KKwkjIyBGSVhNRTogRmluZCB0aGUgcGxhY2Ugd2hlcmUgdGhlIGxpc3QgaXMgcmVidWlsdCBpbiB0aGUgd3JvbmcKKwkjIyAgICAgICAgb3JkZXIsIGFuZCBmaXggaXQgdGhlcmUgcHJvcGVybHkKKyAgICAgICAgdG1wX2RlcGxpYnM9CisJZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KKwkgIHRtcF9kZXBsaWJzPSIkZGVwbGliICR0bXBfZGVwbGlicyIKKwlkb25lCisJZGVwbGlicz0iJHRtcF9kZXBsaWJzIgorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsbGluayIgfHwKKwkgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLHNjYW4iOyB0aGVuCisJbGlicz0iJGRlcGxpYnMiCisJZGVwbGlicz0KKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCWNhc2UgJHBhc3MgaW4KKwlkbG9wZW4pIGxpYnM9IiRkbGZpbGVzIiA7OworCWRscHJlb3BlbikgbGlicz0iJGRscHJlZmlsZXMiIDs7CisJbGluaykgbGlicz0iJGRlcGxpYnMgJURFUExJQlMlICRkZXBlbmRlbmN5X2xpYnMiIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGRscHJlb3BlbiI7IHRoZW4KKwkjIENvbGxlY3QgYW5kIGZvcndhcmQgZGVwbGlicyBvZiBwcmVvcGVuZWQgbGlidG9vbCBsaWJzCisJZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICMgSWdub3JlIG5vbi1saWJ0b29sLWxpYnMKKwkgIGRlcGVuZGVuY3lfbGlicz0KKwkgIGNhc2UgJGxpYiBpbgorCSAgKi5sYSkJZnVuY19zb3VyY2UgIiRsaWIiIDs7CisJICBlc2FjCisKKwkgICMgQ29sbGVjdCBwcmVvcGVuZWQgbGlidG9vbCBkZXBsaWJzLCBleGNlcHQgYW55IHRoaXMgbGlicmFyeQorCSAgIyBoYXMgZGVjbGFyZWQgYXMgd2VhayBsaWJzCisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIGZ1bmNfYmFzZW5hbWUgIiRkZXBsaWIiCisgICAgICAgICAgICBkZXBsaWJfYmFzZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkgICAgY2FzZSAiICR3ZWFrX2xpYnMgIiBpbgorCSAgICAqIiAkZGVwbGliX2Jhc2UgIiopIDs7CisJICAgICopIGRlcGxpYnM9IiRkZXBsaWJzICRkZXBsaWIiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwlkb25lCisJbGlicz0iJGRscHJlZmlsZXMiCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxvcGVuOyB0aGVuCisJIyBDb2xsZWN0IGRscHJlb3BlbmVkIGxpYnJhcmllcworCXNhdmVfZGVwbGlicz0iJGRlcGxpYnMiCisJZGVwbGlicz0KKyAgICAgIGZpCisKKyAgICAgIGZvciBkZXBsaWIgaW4gJGxpYnM7IGRvCisJbGliPQorCWZvdW5kPW5vCisJY2FzZSAkZGVwbGliIGluCisJLW10fC1tdGhyZWFkc3wta3RocmVhZHwtS3RocmVhZHwtcHRocmVhZHwtcHRocmVhZHN8LS10aHJlYWQtc2FmZXwtdGhyZWFkcykKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgIGVsc2UKKwkgICAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkZGVwbGliIgorCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliIDsgdGhlbgorCQljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCQkgICAgKiIgJGRlcGxpYiAiKikgOzsKKwkJICAgICogKSBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRkZXBsaWIiIDs7CisJCWVzYWMKKwkgICAgZmkKKwkgIGZpCisJICBjb250aW51ZQorCSAgOzsKKwktbCopCisJICBpZiB0ZXN0ICIkbGlua21vZGUiICE9IGxpYiAmJiB0ZXN0ICIkbGlua21vZGUiICE9IHByb2c7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJcYC1sJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgorCSAgICBjb250aW51ZQorCSAgZmkKKwkgIGZ1bmNfc3RyaXBuYW1lICctbCcgJycgIiRkZXBsaWIiCisJICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKwkgICAgc2VhcmNoZGlycz0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGliX3NlYXJjaF9wYXRoICRjb21waWxlcl9saWJfc2VhcmNoX2RpcnMgJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoIgorCSAgZWxzZQorCSAgICBzZWFyY2hkaXJzPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoIgorCSAgZmkKKwkgIGZvciBzZWFyY2hkaXIgaW4gJHNlYXJjaGRpcnM7IGRvCisJICAgIGZvciBzZWFyY2hfZXh0IGluIC5sYSAkc3RkX3NocmV4dCAuc28gLmE7IGRvCisJICAgICAgIyBTZWFyY2ggdGhlIGxpYnRvb2wgbGlicmFyeQorCSAgICAgIGxpYj0iJHNlYXJjaGRpci9saWIke25hbWV9JHtzZWFyY2hfZXh0fSIKKwkgICAgICBpZiB0ZXN0IC1mICIkbGliIjsgdGhlbgorCQlpZiB0ZXN0ICIkc2VhcmNoX2V4dCIgPSAiLmxhIjsgdGhlbgorCQkgIGZvdW5kPXllcworCQllbHNlCisJCSAgZm91bmQ9bm8KKwkJZmkKKwkJYnJlYWsgMgorCSAgICAgIGZpCisJICAgIGRvbmUKKwkgIGRvbmUKKwkgIGlmIHRlc3QgIiRmb3VuZCIgIT0geWVzOyB0aGVuCisJICAgICMgZGVwbGliIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGxpYnRvb2wgbGlicmFyeQorCSAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICB0ZXN0ICIkbGlua21vZGUiID0gbGliICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBmaQorCSAgICBjb250aW51ZQorCSAgZWxzZSAjIGRlcGxpYiBpcyBhIGxpYnRvb2wgbGlicmFyeQorCSAgICAjIElmICRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMgJiYgJGRlcGxpYiBpcyBhIHN0ZGxpYiwKKwkgICAgIyBXZSBuZWVkIHRvIGRvIHNvbWUgc3BlY2lhbCB0aGluZ3MgaGVyZSwgYW5kIG5vdCBsYXRlci4KKwkgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCSAgICAgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopCisJCWlmIGZ1bmNfbGFsaWJfcCAiJGxpYiI7IHRoZW4KKwkJICBsaWJyYXJ5X25hbWVzPQorCQkgIG9sZF9saWJyYXJ5PQorCQkgIGZ1bmNfc291cmNlICIkbGliIgorCQkgIGZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KKwkJICAgIGxsPSIkbCIKKwkJICBkb25lCisJCSAgaWYgdGVzdCAiWCRsbCIgPSAiWCRvbGRfbGlicmFyeSIgOyB0aGVuICMgb25seSBzdGF0aWMgdmVyc2lvbiBhdmFpbGFibGUKKwkJICAgIGZvdW5kPW5vCisJCSAgICBmdW5jX2Rpcm5hbWUgIiRsaWIiICIiICIuIgorCQkgICAgbGFkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCQkgICAgbGliPSRsYWRpci8kb2xkX2xpYnJhcnkKKwkJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCQkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkJICAgIGVsc2UKKwkJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkJICAgICAgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkJICAgIGZpCisJCSAgICBjb250aW51ZQorCQkgIGZpCisJCWZpCisJCTs7CisJICAgICAgKikgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICBmaQorCSAgOzsgIyAtbAorCSoubHRmcmFtZXdvcmspCisJICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBlbHNlCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgOyB0aGVuCisJCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisJCSAgICAqIiAkZGVwbGliICIqKSA7OworCQkgICAgKiApIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGRlcGxpYiIgOzsKKwkJZXNhYworCSAgICBmaQorCSAgZmkKKwkgIGNvbnRpbnVlCisJICA7OworCS1MKikKKwkgIGNhc2UgJGxpbmttb2RlIGluCisJICBsaWIpCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIHRlc3QgIiRwYXNzIiA9IGNvbnYgJiYgY29udGludWUKKwkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisJICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCSAgICA7OworCSAgcHJvZykKKwkgICAgaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgICAgY29udGludWUKKwkgICAgZmkKKwkgICAgaWYgdGVzdCAiJHBhc3MiID0gc2NhbjsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBmaQorCSAgICBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorCSAgICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwkgICAgOzsKKwkgICopCisJICAgIGZ1bmNfd2FybmluZyAiXGAtTCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIKKwkgICAgOzsKKwkgIGVzYWMgIyBsaW5rbW9kZQorCSAgY29udGludWUKKwkgIDs7ICMgLUwKKwktUiopCisJICBpZiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCisJICAgIGZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRkZXBsaWIiCisJICAgIGRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICMgTWFrZSBzdXJlIHRoZSB4cnBhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCisJICAgIGNhc2UgIiR4cnBhdGggIiBpbgorCSAgICAqIiAkZGlyICIqKSA7OworCSAgICAqKSB4cnBhdGg9IiR4cnBhdGggJGRpciIgOzsKKwkgICAgZXNhYworCSAgZmkKKwkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICBjb250aW51ZQorCSAgOzsKKwkqLmxhKSBsaWI9IiRkZXBsaWIiIDs7CisJKi4kbGliZXh0KQorCSAgaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBjb250aW51ZQorCSAgZmkKKwkgIGNhc2UgJGxpbmttb2RlIGluCisJICBsaWIpCisJICAgICMgTGlua2luZyBjb252ZW5pZW5jZSBtb2R1bGVzIGludG8gc2hhcmVkIGxpYnJhcmllcyBpcyBhbGxvd2VkLAorCSAgICAjIGJ1dCBsaW5raW5nIG90aGVyIHN0YXRpYyBsaWJyYXJpZXMgaXMgbm9uLXBvcnRhYmxlLgorCSAgICBjYXNlICIgJGRscHJlY29udmVuaWVuY2VsaWJzICIgaW4KKwkgICAgKiIgJGRlcGxpYiAiKikgOzsKKwkgICAgKikKKwkgICAgICB2YWxpZF9hX2xpYj1ubworCSAgICAgIGNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisJCW1hdGNoX3BhdHRlcm4qKQorCQkgIHNldCBkdW1teSAkZGVwbGlic19jaGVja19tZXRob2Q7IHNoaWZ0CisJCSAgbWF0Y2hfcGF0dGVybl9yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4qXCkiYAorCQkgIGlmIGV2YWwgIlwkRUNITyBcIiRkZXBsaWJcIiIgMj4vZGV2L251bGwgfCAkU0VEIDEwcSBcCisJCSAgICB8ICRFR1JFUCAiJG1hdGNoX3BhdHRlcm5fcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJCSAgICB2YWxpZF9hX2xpYj15ZXMKKwkJICBmaQorCQk7OworCQlwYXNzX2FsbCkKKwkJICB2YWxpZF9hX2xpYj15ZXMKKwkJOzsKKwkgICAgICBlc2FjCisJICAgICAgaWYgdGVzdCAiJHZhbGlkX2FfbGliIiAhPSB5ZXM7IHRoZW4KKwkJZWNobworCQkkRUNITyAiKioqIFdhcm5pbmc6IFRyeWluZyB0byBsaW5rIHdpdGggc3RhdGljIGxpYiBhcmNoaXZlICRkZXBsaWIuIgorCQllY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQllY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQllY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisJCWVjaG8gIioqKiBiZWNhdXNlIHRoZSBmaWxlIGV4dGVuc2lvbnMgLiRsaWJleHQgb2YgdGhpcyBhcmd1bWVudCBtYWtlcyBtZSBiZWxpZXZlIgorCQllY2hvICIqKiogdGhhdCBpdCBpcyBqdXN0IGEgc3RhdGljIGFyY2hpdmUgdGhhdCBJIHNob3VsZCBub3QgdXNlIGhlcmUuIgorCSAgICAgIGVsc2UKKwkJZWNobworCQkkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUiCisJCSRFQ0hPICIqKiogc3RhdGljIGxpYnJhcnkgJGRlcGxpYiBpcyBub3QgcG9ydGFibGUhIgorCQlkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICBjb250aW51ZQorCSAgICA7OworCSAgcHJvZykKKwkgICAgaWYgdGVzdCAiJHBhc3MiICE9IGxpbms7IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgZmkKKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgIGVzYWMgIyBsaW5rbW9kZQorCSAgOzsgIyAqLiRsaWJleHQKKwkqLmxvIHwgKi4kb2JqZXh0KQorCSAgaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgZWxpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBkbHByZW9wZW4gfHwgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiAhPSB5ZXMgfHwgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBubzsgdGhlbgorCSAgICAgICMgSWYgdGhlcmUgaXMgbm8gZGxvcGVuIHN1cHBvcnQgb3Igd2UncmUgbGlua2luZyBzdGF0aWNhbGx5LAorCSAgICAgICMgd2UgbmVlZCB0byBwcmVsb2FkLgorCSAgICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkZXBsaWIiCisJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRkZXBsaWIiCisJICAgIGZpCisJICBmaQorCSAgY29udGludWUKKwkgIDs7CisJJURFUExJQlMlKQorCSAgYWxsZGVwbGlicz15ZXMKKwkgIGNvbnRpbnVlCisJICA7OworCWVzYWMgIyBjYXNlICRkZXBsaWIKKworCWlmIHRlc3QgIiRmb3VuZCIgPSB5ZXMgfHwgdGVzdCAtZiAiJGxpYiI7IHRoZW4gOgorCWVsc2UKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIHRoZSBsaWJyYXJ5IFxgJGxpYicgb3IgdW5oYW5kbGVkIGFyZ3VtZW50IFxgJGRlcGxpYiciCisJZmkKKworCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisJZnVuY19sYWxpYl91bnNhZmVfcCAiJGxpYiIgXAorCSAgfHwgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisKKwlmdW5jX2Rpcm5hbWUgIiRsaWIiICIiICIuIgorCWxhZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCWRsbmFtZT0KKwlkbG9wZW49CisJZGxwcmVvcGVuPQorCWxpYmRpcj0KKwlsaWJyYXJ5X25hbWVzPQorCW9sZF9saWJyYXJ5PQorCWluaGVyaXRlZF9saW5rZXJfZmxhZ3M9CisJIyBJZiB0aGUgbGlicmFyeSB3YXMgaW5zdGFsbGVkIHdpdGggYW4gb2xkIHJlbGVhc2Ugb2YgbGlidG9vbCwKKwkjIGl0IHdpbGwgbm90IHJlZGVmaW5lIHZhcmlhYmxlcyBpbnN0YWxsZWQsIG9yIHNob3VsZG5vdGxpbmsKKwlpbnN0YWxsZWQ9eWVzCisJc2hvdWxkbm90bGluaz1ubworCWF2b2lkdGVtcHJwYXRoPQorCisKKwkjIFJlYWQgdGhlIC5sYSBmaWxlCisJZnVuY19zb3VyY2UgIiRsaWIiCisKKwkjIENvbnZlcnQgIi1mcmFtZXdvcmsgZm9vIiB0byAiZm9vLmx0ZnJhbWV3b3JrIgorCWlmIHRlc3QgLW4gIiRpbmhlcml0ZWRfbGlua2VyX2ZsYWdzIjsgdGhlbgorCSAgdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9YCRFQ0hPICIkaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkU0VEICdzLy1mcmFtZXdvcmsgXChbXiAkXSpcKS9cMS5sdGZyYW1ld29yay9nJ2AKKwkgIGZvciB0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnIGluICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnczsgZG8KKwkgICAgY2FzZSAiICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisJICAgICAgKiIgJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWcgIiopIDs7CisJICAgICAgKikgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyI7OworCSAgICBlc2FjCisJICBkb25lCisJZmkKKwlkZXBlbmRlbmN5X2xpYnM9YCRFQ0hPICIgJGRlcGVuZGVuY3lfbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiIHx8CisJICAgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLHNjYW4iIHx8CisJICAgeyB0ZXN0ICIkbGlua21vZGUiICE9IHByb2cgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWI7IH07IHRoZW4KKwkgIHRlc3QgLW4gIiRkbG9wZW4iICYmIGRsZmlsZXM9IiRkbGZpbGVzICRkbG9wZW4iCisJICB0ZXN0IC1uICIkZGxwcmVvcGVuIiAmJiBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkZGxwcmVvcGVuIgorCWZpCisKKwlpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAjIE9ubHkgY2hlY2sgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcworCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgXGAkbGliJyIKKwkgICAgZmkKKwkgICAgIyBJdCBpcyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeSwgc28gYWRkIGluIGl0cyBvYmplY3RzLgorCSAgICBjb252ZW5pZW5jZT0iJGNvbnZlbmllbmNlICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgb2xkX2NvbnZlbmllbmNlPSIkb2xkX2NvbnZlbmllbmNlICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKKwkgIGVsaWYgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgY29udmVuaWVuY2UgbGlicmFyeSIKKwkgIGZpCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgaWYgJG9wdF9kdXBsaWNhdGVfZGVwcyA7IHRoZW4KKwkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIKKwkgIGRvbmUKKwkgIGNvbnRpbnVlCisJZmkgIyAkcGFzcyA9IGNvbnYKKworCisJIyBHZXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgd2UgbGluayBhZ2FpbnN0LgorCWxpbmtsaWI9CisJZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbworCSAgbGlua2xpYj0iJGwiCisJZG9uZQorCWlmIHRlc3QgLXogIiRsaW5rbGliIjsgdGhlbgorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yIFxgJGxpYiciCisJZmkKKworCSMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgorCWlmIHRlc3QgIiRwYXNzIiA9IGRsb3BlbjsgdGhlbgorCSAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IC1kbG9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiBcYCRsaWInIgorCSAgZmkKKwkgIGlmIHRlc3QgLXogIiRkbG5hbWUiIHx8CisJICAgICB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiICE9IHllcyB8fAorCSAgICAgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBubzsgdGhlbgorCSAgICAjIElmIHRoZXJlIGlzIG5vIGRsbmFtZSwgbm8gZGxvcGVuIHN1cHBvcnQgb3Igd2UncmUgbGlua2luZworCSAgICAjIHN0YXRpY2FsbHksIHdlIG5lZWQgdG8gcHJlbG9hZC4gIFdlIGFsc28gbmVlZCB0byBwcmVsb2FkIGFueQorCSAgICAjIGRlcGVuZGVudCBsaWJyYXJpZXMgc28gbGlibHRkbCdzIGRlcGxpYiBwcmVsb2FkZXIgZG9lc24ndAorCSAgICAjIGJvbWIgb3V0IGluIHRoZSBsb2FkIGRlcGxpYnMgcGhhc2UuCisJICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRsaWIgJGRlcGVuZGVuY3lfbGlicyIKKwkgIGVsc2UKKwkgICAgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGxpYiIKKwkgIGZpCisJICBjb250aW51ZQorCWZpICMgJHBhc3MgPSBkbG9wZW4KKworCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCWNhc2UgJGxhZGlyIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnNfbGFkaXI9IiRsYWRpciIgOzsKKwkqKQorCSAgYWJzX2xhZGlyPWBjZCAiJGxhZGlyIiAmJiBwd2RgCisJICBpZiB0ZXN0IC16ICIkYWJzX2xhZGlyIjsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkbGFkaXInIgorCSAgICBmdW5jX3dhcm5pbmcgInBhc3NpbmcgaXQgbGl0ZXJhbGx5IHRvIHRoZSBsaW5rZXIsIGFsdGhvdWdoIGl0IG1pZ2h0IGZhaWwiCisJICAgIGFic19sYWRpcj0iJGxhZGlyIgorCSAgZmkKKwkgIDs7CisJZXNhYworCWZ1bmNfYmFzZW5hbWUgIiRsaWIiCisJbGFuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisKKwkjIEZpbmQgdGhlIHJlbGV2YW50IG9iamVjdCBkaXJlY3RvcnkgYW5kIGxpYnJhcnkgbmFtZS4KKwlpZiB0ZXN0ICJYJGluc3RhbGxlZCIgPSBYeWVzOyB0aGVuCisJICBpZiB0ZXN0ICEgLWYgIiRsaWJkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCisJICAgIGZ1bmNfd2FybmluZyAibGlicmFyeSBcYCRsaWInIHdhcyBtb3ZlZC4iCisJICAgIGRpcj0iJGxhZGlyIgorCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisJICAgIGxpYmRpcj0iJGFic19sYWRpciIKKwkgIGVsc2UKKwkgICAgZGlyPSIkbGliZGlyIgorCSAgICBhYnNkaXI9IiRsaWJkaXIiCisJICBmaQorCSAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWMiID0gWHllcyAmJiBhdm9pZHRlbXBycGF0aD15ZXMKKwllbHNlCisJICBpZiB0ZXN0ICEgLWYgIiRsYWRpci8kb2JqZGlyLyRsaW5rbGliIiAmJiB0ZXN0IC1mICIkYWJzX2xhZGlyLyRsaW5rbGliIjsgdGhlbgorCSAgICBkaXI9IiRsYWRpciIKKwkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgorCSAgICAjIFJlbW92ZSB0aGlzIHNlYXJjaCBwYXRoIGxhdGVyCisJICAgIG5vdGluc3RfcGF0aD0iJG5vdGluc3RfcGF0aCAkYWJzX2xhZGlyIgorCSAgZWxzZQorCSAgICBkaXI9IiRsYWRpci8kb2JqZGlyIgorCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIvJG9iamRpciIKKwkgICAgIyBSZW1vdmUgdGhpcyBzZWFyY2ggcGF0aCBsYXRlcgorCSAgICBub3RpbnN0X3BhdGg9IiRub3RpbnN0X3BhdGggJGFic19sYWRpciIKKwkgIGZpCisJZmkgIyAkaW5zdGFsbGVkID0geWVzCisJZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5sYScgIiRsYW5hbWUiCisJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisKKwkjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KKwlpZiB0ZXN0ICIkcGFzcyIgPSBkbHByZW9wZW47IHRoZW4KKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiICYmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgbGlicmFyaWVzIG1heSAtZGxwcmVvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogXGAkbGliJyIKKwkgIGZpCisJICAjIFByZWZlciB1c2luZyBhIHN0YXRpYyBsaWJyYXJ5IChzbyB0aGF0IG5vIHNpbGx5IF9EWU5BTUlDIHN5bWJvbHMKKwkgICMgYXJlIHJlcXVpcmVkIHRvIGxpbmspLgorCSAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgIyBLZWVwIGEgbGlzdCBvZiBwcmVvcGVuZWQgY29udmVuaWVuY2UgbGlicmFyaWVzIHRvIGNoZWNrCisJICAgICMgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGUgbGluayBwYXNzLgorCSAgICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCWRscHJlY29udmVuaWVuY2VsaWJzPSIkZGxwcmVjb252ZW5pZW5jZWxpYnMgJGRpci8kb2xkX2xpYnJhcnkiCisJICAjIE90aGVyd2lzZSwgdXNlIHRoZSBkbG5hbWUsIHNvIHRoYXQgbHRfZGxvcGVuIGZpbmRzIGl0LgorCSAgZWxpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRkbG5hbWUiCisJICBlbHNlCisJICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkaXIvJGxpbmtsaWIiCisJICBmaQorCWZpICMgJHBhc3MgPSBkbHByZW9wZW4KKworCWlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAjIExpbmsgdGhlIGNvbnZlbmllbmNlIGxpYnJhcnkKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKwkgICAgZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGRlcGxpYnMiCisJICBlbGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIiAjIHVzZWQgZm9yIHByb2csc2NhbiBwYXNzCisJICBmaQorCSAgY29udGludWUKKwlmaQorCisKKwlpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyAmJiB0ZXN0ICIkcGFzcyIgIT0gbGluazsgdGhlbgorCSAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsYWRpciIKKwkgIGRlcGxpYnM9IiRsaWIgJGRlcGxpYnMiCisKKwkgIGxpbmthbGxkZXBsaWJzPW5vCisJICBpZiB0ZXN0ICIkbGlua19hbGxfZGVwbGlicyIgIT0gbm8gfHwgdGVzdCAteiAiJGxpYnJhcnlfbmFtZXMiIHx8CisJICAgICB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCisJICAgIGxpbmthbGxkZXBsaWJzPXllcworCSAgZmkKKworCSAgdG1wX2xpYnM9CisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAtTCopIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisJICAgICAgICAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJCSA7OworCSAgICBlc2FjCisJICAgICMgTmVlZCB0byBsaW5rIGFnYWluc3QgYWxsIGRlcGVuZGVuY3lfbGlicz8KKwkgICAgaWYgdGVzdCAiJGxpbmthbGxkZXBsaWJzIiA9IHllczsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICAjIE5lZWQgdG8gaGFyZGNvZGUgc2hhcmVkIGxpYnJhcnkgcGF0aHMKKwkgICAgICAjIG9yL2FuZCBsaW5rIGFnYWluc3Qgc3RhdGljIGxpYnJhcmllcworCSAgICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBmaQorCSAgICBpZiAkb3B0X2R1cGxpY2F0ZV9kZXBzIDsgdGhlbgorCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIgorCSAgZG9uZSAjIGZvciBkZXBsaWIKKwkgIGNvbnRpbnVlCisJZmkgIyAkbGlua21vZGUgPSBwcm9nLi4uCisKKwlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJgorCSAgICAgeyB7IHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMiID0gbm8gfHwKKwkgICAgICAgICB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzLCRpbnN0YWxsZWQiID0gImJ1aWx0LHllcyI7IH0gfHwKKwkgICAgICAgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgfTsgdGhlbgorCSAgICAjIFdlIG5lZWQgdG8gaGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aAorCSAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAteiAiJGF2b2lkdGVtcHJwYXRoIiA7IHRoZW4KKwkgICAgICAjIE1ha2Ugc3VyZSB0aGUgcnBhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCisJICAgICAgY2FzZSAiJHRlbXBfcnBhdGg6IiBpbgorCSAgICAgICoiJGFic2RpcjoiKikgOzsKKwkgICAgICAqKSB0ZW1wX3JwYXRoPSIkdGVtcF9ycGF0aCRhYnNkaXI6IiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKworCSAgICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGguCisJICAgICMgU2tpcCBkaXJlY3RvcmllcyB0aGF0IGFyZSBpbiB0aGUgc3lzdGVtIGRlZmF1bHQgcnVuLXRpbWUKKwkgICAgIyBzZWFyY2ggcGF0aC4KKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkYWJzZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKwkgICAgICAqIiAkYWJzZGlyICIqKSA7OworCSAgICAgICopIGNvbXBpbGVfcnBhdGg9IiRjb21waWxlX3JwYXRoICRhYnNkaXIiCisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiCisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGZpICMgJGxpbmttb2RlLCRwYXNzID0gcHJvZyxsaW5rLi4uCisKKwkgIGlmIHRlc3QgIiRhbGxkZXBsaWJzIiA9IHllcyAmJgorCSAgICAgeyB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiID0gcGFzc19hbGwgfHwKKwkgICAgICAgeyB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJgorCQkgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiOyB9OyB9OyB0aGVuCisJICAgICMgV2Ugb25seSBuZWVkIHRvIHNlYXJjaCBmb3Igc3RhdGljIGxpYnJhcmllcworCSAgICBjb250aW51ZQorCSAgZmkKKwlmaQorCisJbGlua19zdGF0aWM9bm8gIyBXaGV0aGVyIHRoZSBkZXBsaWIgd2lsbCBiZSBsaW5rZWQgc3RhdGljYWxseQorCXVzZV9zdGF0aWNfbGlicz0kcHJlZmVyX3N0YXRpY19saWJzCisJaWYgdGVzdCAiJHVzZV9zdGF0aWNfbGlicyIgPSBidWlsdCAmJiB0ZXN0ICIkaW5zdGFsbGVkIiA9IHllczsgdGhlbgorCSAgdXNlX3N0YXRpY19saWJzPW5vCisJZmkKKwlpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYKKwkgICB7IHRlc3QgIiR1c2Vfc3RhdGljX2xpYnMiID0gbm8gfHwgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgfTsgdGhlbgorCSAgY2FzZSAkaG9zdCBpbgorCSAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKikKKwkgICAgICAjIE5vIHBvaW50IGluIHJlbGlua2luZyBETExzIGJlY2F1c2UgcGF0aHMgYXJlIG5vdCBlbmNvZGVkCisJICAgICAgbm90aW5zdF9kZXBsaWJzPSIkbm90aW5zdF9kZXBsaWJzICRsaWIiCisJICAgICAgbmVlZF9yZWxpbms9bm8KKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0gbm87IHRoZW4KKwkgICAgICBub3RpbnN0X2RlcGxpYnM9IiRub3RpbnN0X2RlcGxpYnMgJGxpYiIKKwkgICAgICBuZWVkX3JlbGluaz15ZXMKKwkgICAgZmkKKwkgICAgOzsKKwkgIGVzYWMKKwkgICMgVGhpcyBpcyBhIHNoYXJlZCBsaWJyYXJ5CisKKwkgICMgV2FybiBhYm91dCBwb3J0YWJpbGl0eSwgY2FuJ3QgbGluayBhZ2FpbnN0IC1tb2R1bGUncyBvbiBzb21lCisJICAjIHN5c3RlbXMgKGRhcndpbikuICBEb24ndCBibGVhdCBhYm91dCBkbG9wZW5lZCBtb2R1bGVzIHRob3VnaCEKKwkgIGRsb3Blbm1vZHVsZT0iIgorCSAgZm9yIGRscHJlbW9kdWxldGVzdCBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICAgaWYgdGVzdCAiWCRkbHByZW1vZHVsZXRlc3QiID0gIlgkbGliIjsgdGhlbgorCSAgICAgIGRsb3Blbm1vZHVsZT0iJGRscHJlbW9kdWxldGVzdCIKKwkgICAgICBicmVhaworCSAgICBmaQorCSAgZG9uZQorCSAgaWYgdGVzdCAteiAiJGRsb3Blbm1vZHVsZSIgJiYgdGVzdCAiJHNob3VsZG5vdGxpbmsiID0geWVzICYmIHRlc3QgIiRwYXNzIiA9IGxpbms7IHRoZW4KKwkgICAgZWNobworCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgZXhlY3V0YWJsZSAkb3V0cHV0IGFnYWluc3QgdGhlIGxvYWRhYmxlIG1vZHVsZSIKKwkgICAgZWxzZQorCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSBsb2FkYWJsZSBtb2R1bGUiCisJICAgIGZpCisJICAgICRFQ0hPICIqKiogJGxpbmtsaWIgaXMgbm90IHBvcnRhYmxlISIKKwkgIGZpCisJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliICYmCisJICAgICB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiA9IHllczsgdGhlbgorCSAgICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGguCisJICAgICMgU2tpcCBkaXJlY3RvcmllcyB0aGF0IGFyZSBpbiB0aGUgc3lzdGVtIGRlZmF1bHQgcnVuLXRpbWUKKwkgICAgIyBzZWFyY2ggcGF0aC4KKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkYWJzZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKwkgICAgICAqIiAkYWJzZGlyICIqKSA7OworCSAgICAgICopIGNvbXBpbGVfcnBhdGg9IiRjb21waWxlX3JwYXRoICRhYnNkaXIiCisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiCisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGZpCisKKwkgIGlmIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyI7IHRoZW4KKwkgICAgIyBmaWd1cmUgb3V0IHRoZSBzb25hbWUKKwkgICAgc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCisJICAgIHNoaWZ0CisJICAgIHJlYWxuYW1lPSIkMSIKKwkgICAgc2hpZnQKKwkgICAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJICAgICMgdXNlIGRsbmFtZSBpZiB3ZSBnb3QgaXQuIGl0J3MgcGVyZmVjdGx5IGdvb2QsIG5vPworCSAgICBpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorCSAgICAgIHNvbmFtZT0iJGRsbmFtZSIKKwkgICAgZWxpZiB0ZXN0IC1uICIkc29uYW1lX3NwZWMiOyB0aGVuCisJICAgICAgIyBibGVoIHdpbmRvd3MKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgKmN5Z3dpbiogfCBtaW5ndyogfCAqY2VnY2MqKQorCSAgICAgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkJbWFqb3I9JGZ1bmNfYXJpdGhfcmVzdWx0CisJCXZlcnN1ZmZpeD0iLSRtYWpvciIKKwkJOzsKKwkgICAgICBlc2FjCisJICAgICAgZXZhbCBzb25hbWU9XCIkc29uYW1lX3NwZWNcIgorCSAgICBlbHNlCisJICAgICAgc29uYW1lPSIkcmVhbG5hbWUiCisJICAgIGZpCisKKwkgICAgIyBNYWtlIGEgbmV3IG5hbWUgZm9yIHRoZSBleHRyYWN0X2V4cHN5bXNfY21kcyB0byB1c2UKKwkgICAgc29yb290PSIkc29uYW1lIgorCSAgICBmdW5jX2Jhc2VuYW1lICIkc29yb290IgorCSAgICBzb25hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5kbGwnICIkc29uYW1lIgorCSAgICBuZXdsaWI9bGliaW1wLSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuYQorCisJICAgICMgSWYgdGhlIGxpYnJhcnkgaGFzIG5vIGV4cG9ydCBsaXN0LCB0aGVuIGNyZWF0ZSBvbmUgbm93CisJICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUtZGVmIjsgdGhlbiA6CisJICAgIGVsc2UKKwkgICAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBcYCRzb25hbWUnIgorCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkZXh0cmFjdF9leHBzeW1zX2NtZHMiICdleGl0ICQ/JworCSAgICBmaQorCisJICAgICMgQ3JlYXRlICRuZXdsaWIKKwkgICAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJG5ld2xpYiI7IHRoZW4gOjsgZWxzZQorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBpbXBvcnQgbGlicmFyeSBmb3IgXGAkc29uYW1lJyIKKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIiAnZXhpdCAkPycKKwkgICAgZmkKKwkgICAgIyBtYWtlIHN1cmUgdGhlIGxpYnJhcnkgdmFyaWFibGVzIGFyZSBwb2ludGluZyB0byB0aGUgbmV3IGxpYnJhcnkKKwkgICAgZGlyPSRvdXRwdXRfb2JqZGlyCisJICAgIGxpbmtsaWI9JG5ld2xpYgorCSAgZmkgIyB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiCisKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRtb2RlIiAhPSByZWxpbms7IHRoZW4KKwkgICAgYWRkX3NobGlicGF0aD0KKwkgICAgYWRkX2Rpcj0KKwkgICAgYWRkPQorCSAgICBsaWJfbGlua2VkPXllcworCSAgICBjYXNlICRoYXJkY29kZV9hY3Rpb24gaW4KKwkgICAgaW1tZWRpYXRlIHwgdW5zdXBwb3J0ZWQpCisJICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSBubzsgdGhlbgorCQlhZGQ9IiRkaXIvJGxpbmtsaWIiCisJCWNhc2UgJGhvc3QgaW4KKwkJICAqLSotc2NvMy4ydjUuMC5bMDI0XSopIGFkZF9kaXI9Ii1MJGRpciIgOzsKKwkJICAqLSotc3lzdjQqdXcyKikgYWRkX2Rpcj0iLUwkZGlyIiA7OworCQkgICotKi1zeXN2NU9wZW5VTklYKiB8ICotKi1zeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgXAorCQkgICAgKi0qLXVuaXh3YXJlNyopIGFkZF9kaXI9Ii1MJGRpciIgOzsKKwkJICAqLSotZGFyd2luKiApCisJCSAgICAjIGlmIHRoZSBsaWIgaXMgYSAobm9uLWRsb3BlbmVkKSBtb2R1bGUgdGhlbiB3ZSBjYW4gbm90CisJCSAgICAjIGxpbmsgYWdhaW5zdCBpdCwgc29tZW9uZSBpcyBpZ25vcmluZyB0aGUgZWFybGllciB3YXJuaW5ncworCQkgICAgaWYgL3Vzci9iaW4vZmlsZSAtTCAkYWRkIDI+IC9kZXYvbnVsbCB8CisJCQkgJEdSRVAgIjogW146XSogYnVuZGxlIiA+L2Rldi9udWxsIDsgdGhlbgorCQkgICAgICBpZiB0ZXN0ICJYJGRsb3Blbm1vZHVsZSIgIT0gIlgkbGliIjsgdGhlbgorCQkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaWIgJGxpbmtsaWIgaXMgYSBtb2R1bGUsIG5vdCBhIHNoYXJlZCBsaWJyYXJ5IgorCQkJaWYgdGVzdCAteiAiJG9sZF9saWJyYXJ5IiA7IHRoZW4KKwkJCSAgZWNobworCQkJICBlY2hvICIqKiogQW5kIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHN0YXRpYyBhcmNoaXZlIGF2YWlsYWJsZSIKKwkJCSAgZWNobyAiKioqIFRoZSBsaW5rIHdpbGwgcHJvYmFibHkgZmFpbCwgc29ycnkiCisJCQllbHNlCisJCQkgIGFkZD0iJGRpci8kb2xkX2xpYnJhcnkiCisJCQlmaQorCQkgICAgICBlbGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkJCWFkZD0iJGRpci8kb2xkX2xpYnJhcnkiCisJCSAgICAgIGZpCisJCSAgICBmaQorCQllc2FjCisJICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgorCQljYXNlICRob3N0IGluCisJCSotKi1zdW5vcyopIGFkZF9zaGxpYnBhdGg9IiRkaXIiIDs7CisJCWVzYWMKKwkJYWRkX2Rpcj0iLUwkZGlyIgorCQlhZGQ9Ii1sJG5hbWUiCisJICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSBubzsgdGhlbgorCQlhZGRfc2hsaWJwYXRoPSIkZGlyIgorCQlhZGQ9Ii1sJG5hbWUiCisJICAgICAgZWxzZQorCQlsaWJfbGlua2VkPW5vCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICByZWxpbmspCisJICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXMgJiYKKwkgICAgICAgICB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIiA9IG5vOyB0aGVuCisJCWFkZD0iJGRpci8kbGlua2xpYiIKKwkgICAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IHllczsgdGhlbgorCQlhZGRfZGlyPSItTCRkaXIiCisJCSMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KKwkJaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKwkJICBjYXNlICRsaWJkaXIgaW4KKwkJICAgIFtcXC9dKikKKwkJICAgICAgYWRkX2Rpcj0iJGFkZF9kaXIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKwkJICAgICAgOzsKKwkJICBlc2FjCisJCWZpCisJCWFkZD0iLWwkbmFtZSIKKwkgICAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IHllczsgdGhlbgorCQlhZGRfc2hsaWJwYXRoPSIkZGlyIgorCQlhZGQ9Ii1sJG5hbWUiCisJICAgICAgZWxzZQorCQlsaWJfbGlua2VkPW5vCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICAqKSBsaWJfbGlua2VkPW5vIDs7CisJICAgIGVzYWMKKworCSAgICBpZiB0ZXN0ICIkbGliX2xpbmtlZCIgIT0geWVzOyB0aGVuCisJICAgICAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJ1bnN1cHBvcnRlZCBoYXJkY29kZSBwcm9wZXJ0aWVzIgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRhZGRfc2hsaWJwYXRoIjsgdGhlbgorCSAgICAgIGNhc2UgOiRjb21waWxlX3NobGlicGF0aDogaW4KKwkgICAgICAqIjokYWRkX3NobGlicGF0aDoiKikgOzsKKwkgICAgICAqKSBjb21waWxlX3NobGlicGF0aD0iJGNvbXBpbGVfc2hsaWJwYXRoJGFkZF9zaGxpYnBhdGg6IiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgY29tcGlsZV9kZXBsaWJzPSIkYWRkX2RpciAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGNvbXBpbGVfZGVwbGlicz0iJGFkZCAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGRlcGxpYnM9IiRhZGRfZGlyICRkZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGRlcGxpYnM9IiRhZGQgJGRlcGxpYnMiCisJICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgIT0geWVzICYmCisJCSB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgIT0geWVzICYmCisJCSB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KKwkJY2FzZSA6JGZpbmFsaXplX3NobGlicGF0aDogaW4KKwkJKiI6JGxpYmRpcjoiKikgOzsKKwkJKikgZmluYWxpemVfc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoJGxpYmRpcjoiIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICBmaQorCSAgZmkKKworCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisJICAgIGFkZF9zaGxpYnBhdGg9CisJICAgIGFkZF9kaXI9CisJICAgIGFkZD0KKwkgICAgIyBGaW5hbGl6ZSBjb21tYW5kIGZvciBib3RoIGlzIHNpbXBsZToganVzdCBoYXJkY29kZSBpdC4KKwkgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXMgJiYKKwkgICAgICAgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSIgPSBubzsgdGhlbgorCSAgICAgIGFkZD0iJGxpYmRpci8kbGlua2xpYiIKKwkgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSB5ZXM7IHRoZW4KKwkgICAgICBhZGRfZGlyPSItTCRsaWJkaXIiCisJICAgICAgYWRkPSItbCRuYW1lIgorCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IHllczsgdGhlbgorCSAgICAgIGNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCisJICAgICAgKiI6JGxpYmRpcjoiKikgOzsKKwkgICAgICAqKSBmaW5hbGl6ZV9zaGxpYnBhdGg9IiRmaW5hbGl6ZV9zaGxpYnBhdGgkbGliZGlyOiIgOzsKKwkgICAgICBlc2FjCisJICAgICAgYWRkPSItbCRuYW1lIgorCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9hdXRvbWF0aWMiID0geWVzOyB0aGVuCisJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciIgJiYKKwkJIHRlc3QgLWYgIiRpbnN0X3ByZWZpeF9kaXIkbGliZGlyLyRsaW5rbGliIiA7IHRoZW4KKwkJYWRkPSIkaW5zdF9wcmVmaXhfZGlyJGxpYmRpci8kbGlua2xpYiIKKwkgICAgICBlbHNlCisJCWFkZD0iJGxpYmRpci8kbGlua2xpYiIKKwkgICAgICBmaQorCSAgICBlbHNlCisJICAgICAgIyBXZSBjYW5ub3Qgc2VlbSB0byBoYXJkY29kZSBpdCwgZ3Vlc3Mgd2UnbGwgZmFrZSBpdC4KKwkgICAgICBhZGRfZGlyPSItTCRsaWJkaXIiCisJICAgICAgIyBUcnkgbG9va2luZyBmaXJzdCBpbiB0aGUgbG9jYXRpb24gd2UncmUgYmVpbmcgaW5zdGFsbGVkIHRvLgorCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisJCWNhc2UgJGxpYmRpciBpbgorCQkgIFtcXC9dKikKKwkJICAgIGFkZF9kaXI9IiRhZGRfZGlyIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisJCSAgICA7OworCQllc2FjCisJICAgICAgZmkKKwkgICAgICBhZGQ9Ii1sJG5hbWUiCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZmluYWxpemVfZGVwbGlicz0iJGFkZF9kaXIgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZmluYWxpemVfZGVwbGlicz0iJGFkZCAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBkZXBsaWJzPSIkYWRkX2RpciAkZGVwbGlicyIKKwkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBkZXBsaWJzPSIkYWRkICRkZXBsaWJzIgorCSAgICBmaQorCSAgZmkKKwllbGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAjIEhlcmUgd2UgYXNzdW1lIHRoYXQgb25lIG9mIGhhcmRjb2RlX2RpcmVjdCBvciBoYXJkY29kZV9taW51c19MCisJICAjIGlzIG5vdCB1bnN1cHBvcnRlZC4gIFRoaXMgaXMgdmFsaWQgb24gYWxsIGtub3duIHN0YXRpYyBhbmQKKwkgICMgc2hhcmVkIHBsYXRmb3Jtcy4KKwkgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiICE9IHVuc3VwcG9ydGVkOyB0aGVuCisJICAgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgbGlua2xpYj0iJG9sZF9saWJyYXJ5IgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkaXIvJGxpbmtsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iJGRpci8kbGlua2xpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgIGVsc2UKKwkgICAgY29tcGlsZV9kZXBsaWJzPSItbCRuYW1lIC1MJGRpciAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSItbCRuYW1lIC1MJGRpciAkZmluYWxpemVfZGVwbGlicyIKKwkgIGZpCisJZWxpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCSAgIyBOb3QgYSBzaGFyZWQgbGlicmFyeQorCSAgaWYgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAhPSBwYXNzX2FsbDsgdGhlbgorCSAgICAjIFdlJ3JlIHRyeWluZyBsaW5rIGEgc2hhcmVkIGxpYnJhcnkgYWdhaW5zdCBhIHN0YXRpYyBvbmUKKwkgICAgIyBidXQgdGhlIHN5c3RlbSBkb2Vzbid0IHN1cHBvcnQgaXQuCisKKwkgICAgIyBKdXN0IHByaW50IGEgd2FybmluZyBhbmQgYWRkIHRoZSBsaWJyYXJ5IHRvIGRlcGVuZGVuY3lfbGlicyBzbworCSAgICAjIHRoYXQgdGhlIHByb2dyYW0gY2FuIGJlIGxpbmtlZCBhZ2FpbnN0IHRoZSBzdGF0aWMgbGlicmFyeS4KKwkgICAgZWNobworCSAgICAkRUNITyAiKioqIFdhcm5pbmc6IFRoaXMgc3lzdGVtIGNhbiBub3QgbGluayB0byBzdGF0aWMgbGliIGFyY2hpdmUgJGxpYi4iCisJICAgIGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJICAgIGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJICAgIGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZS4iCisJICAgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzOyB0aGVuCisJICAgICAgZWNobyAiKioqIEJ1dCBhcyB5b3UgdHJ5IHRvIGJ1aWxkIGEgbW9kdWxlIGxpYnJhcnksIGxpYnRvb2wgd2lsbCBzdGlsbCBjcmVhdGUgIgorCSAgICAgIGVjaG8gIioqKiBhIHN0YXRpYyBtb2R1bGUsIHRoYXQgc2hvdWxkIHdvcmsgYXMgbG9uZyBhcyB0aGUgZGxvcGVuaW5nIGFwcGxpY2F0aW9uIgorCSAgICAgIGVjaG8gIioqKiBpcyBsaW5rZWQgd2l0aCB0aGUgLWRsb3BlbiBmbGFnIHRvIHJlc29sdmUgc3ltYm9scyBhdCBydW50aW1lLiIKKwkgICAgICBpZiB0ZXN0IC16ICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorCQllY2hvCisJCWVjaG8gIioqKiBIb3dldmVyLCB0aGlzIHdvdWxkIG9ubHkgd29yayBpZiBsaWJ0b29sIHdhcyBhYmxlIHRvIGV4dHJhY3Qgc3ltYm9sIgorCQllY2hvICIqKiogbGlzdHMgZnJvbSBhIHByb2dyYW0sIHVzaW5nIFxgbm0nIG9yIGVxdWl2YWxlbnQsIGJ1dCBsaWJ0b29sIGNvdWxkIgorCQllY2hvICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCisJCWVjaG8gIioqKiBcYG5tJyBmcm9tIEdOVSBiaW51dGlscyBhbmQgYSBmdWxsIHJlYnVpbGQgbWF5IGhlbHAuIgorCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IG5vOyB0aGVuCisJCWJ1aWxkX2xpYnRvb2xfbGlicz1tb2R1bGUKKwkJYnVpbGRfb2xkX2xpYnM9eWVzCisJICAgICAgZWxzZQorCQlidWlsZF9saWJ0b29sX2xpYnM9bm8KKwkgICAgICBmaQorCSAgICBmaQorCSAgZWxzZQorCSAgICBkZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkZGVwbGlicyIKKwkgICAgbGlua19zdGF0aWM9eWVzCisJICBmaQorCWZpICMgbGluayBzaGFyZWQvc3RhdGljIGxpYnJhcnk/CisKKwlpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkZGVwZW5kZW5jeV9saWJzIiAmJgorCSAgICAgeyB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiAhPSB5ZXMgfHwKKwkgICAgICAgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllcyB8fAorCSAgICAgICB0ZXN0ICIkbGlua19zdGF0aWMiID0geWVzOyB9OyB0aGVuCisJICAgICMgRXh0cmFjdCAtUiBmcm9tIGRlcGVuZGVuY3lfbGlicworCSAgICB0ZW1wX2RlcGxpYnM9CisJICAgIGZvciBsaWJkaXIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgICBjYXNlICRsaWJkaXIgaW4KKwkgICAgICAtUiopIGZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRsaWJkaXIiCisJICAgICAgICAgICB0ZW1wX3hycGF0aD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJCSAgIGNhc2UgIiAkeHJwYXRoICIgaW4KKwkJICAgKiIgJHRlbXBfeHJwYXRoICIqKSA7OworCQkgICAqKSB4cnBhdGg9IiR4cnBhdGggJHRlbXBfeHJwYXRoIjs7CisJCSAgIGVzYWM7OworCSAgICAgICopIHRlbXBfZGVwbGlicz0iJHRlbXBfZGVwbGlicyAkbGliZGlyIjs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIGRlcGVuZGVuY3lfbGlicz0iJHRlbXBfZGVwbGlicyIKKwkgIGZpCisKKwkgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkYWJzZGlyIgorCSAgIyBMaW5rIGFnYWluc3QgdGhpcyBsaWJyYXJ5CisJICB0ZXN0ICIkbGlua19zdGF0aWMiID0gbm8gJiYgbmV3ZGVwZW5kZW5jeV9saWJzPSIkYWJzX2xhZGlyLyRsYW5hbWUgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICMgLi4uIGFuZCBpdHMgZGVwZW5kZW5jeV9saWJzCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIGlmICRvcHRfZHVwbGljYXRlX2RlcHMgOyB0aGVuCisJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiCisJICBkb25lCisKKwkgIGlmIHRlc3QgIiRsaW5rX2FsbF9kZXBsaWJzIiAhPSBubzsgdGhlbgorCSAgICAjIEFkZCB0aGUgc2VhcmNoIHBhdGhzIG9mIGFsbCBkZXBlbmRlbmN5IGxpYnJhcmllcworCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgcGF0aD0KKwkgICAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgICAtTCopIHBhdGg9IiRkZXBsaWIiIDs7CisJICAgICAgKi5sYSkKKwkgICAgICAgIGZ1bmNfZGlybmFtZSAiJGRlcGxpYiIgIiIgIi4iCisJCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCQljYXNlICRkaXIgaW4KKwkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnNkaXI9IiRkaXIiIDs7CisJCSopCisJCSAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAorCQkgIGlmIHRlc3QgLXogIiRhYnNkaXIiOyB0aGVuCisJCSAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkZGlyJyIKKwkJICAgIGFic2Rpcj0iJGRpciIKKwkJICBmaQorCQkgIDs7CisJCWVzYWMKKwkJaWYgJEdSRVAgIl5pbnN0YWxsZWQ9bm8iICRkZXBsaWIgPiAvZGV2L251bGw7IHRoZW4KKwkJY2FzZSAkaG9zdCBpbgorCQkqLSotZGFyd2luKikKKwkJICBkZXBkZXBsPQorCQkgIGV2YWwgZGVwbGlicmFyeV9uYW1lcz1gJHtTRUR9IC1uIC1lICdzL15saWJyYXJ5X25hbWVzPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKwkJICBpZiB0ZXN0IC1uICIkZGVwbGlicmFyeV9uYW1lcyIgOyB0aGVuCisJCSAgICBmb3IgdG1wIGluICRkZXBsaWJyYXJ5X25hbWVzIDsgZG8KKwkJICAgICAgZGVwZGVwbD0kdG1wCisJCSAgICBkb25lCisJCSAgICBpZiB0ZXN0IC1mICIkYWJzZGlyLyRvYmpkaXIvJGRlcGRlcGwiIDsgdGhlbgorCQkgICAgICBkZXBkZXBsPSIkYWJzZGlyLyRvYmpkaXIvJGRlcGRlcGwiCisJCSAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YCR7T1RPT0x9IC1MICRkZXBkZXBsIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRkYXJ3aW5faW5zdGFsbF9uYW1lIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBkYXJ3aW5faW5zdGFsbF9uYW1lPWAke09UT09MNjR9IC1MICRkZXBkZXBsICB8IGF3ayAne2lmIChOUiA9PSAyKSB7cHJpbnQgJDE7ZXhpdH19J2AKKyAgICAgICAgICAgICAgICAgICAgICBmaQorCQkgICAgICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWR5bGliX2ZpbGUgJHt3bH0ke2Rhcndpbl9pbnN0YWxsX25hbWV9OiR7ZGVwZGVwbH0iCisJCSAgICAgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAtZHlsaWJfZmlsZSAke2Rhcndpbl9pbnN0YWxsX25hbWV9OiR7ZGVwZGVwbH0iCisJCSAgICAgIHBhdGg9CisJCSAgICBmaQorCQkgIGZpCisJCSAgOzsKKwkJKikKKwkJICBwYXRoPSItTCRhYnNkaXIvJG9iamRpciIKKwkJICA7OworCQllc2FjCisJCWVsc2UKKwkJICBldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQkgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQkgIHRlc3QgIiRhYnNkaXIiICE9ICIkbGliZGlyIiAmJiBcCisJCSAgICBmdW5jX3dhcm5pbmcgIlxgJGRlcGxpYicgc2VlbXMgdG8gYmUgbW92ZWQiCisKKwkJICBwYXRoPSItTCRhYnNkaXIiCisJCWZpCisJCTs7CisJICAgICAgZXNhYworCSAgICAgIGNhc2UgIiAkZGVwbGlicyAiIGluCisJICAgICAgKiIgJHBhdGggIiopIDs7CisJICAgICAgKikgZGVwbGlicz0iJHBhdGggJGRlcGxpYnMiIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICBmaSAjIGxpbmtfYWxsX2RlcGxpYnMgIT0gbm8KKwlmaSAjIGxpbmttb2RlID0gbGliCisgICAgICBkb25lICMgZm9yIGRlcGxpYiBpbiAkbGlicworICAgICAgaWYgdGVzdCAiJHBhc3MiID0gbGluazsgdGhlbgorCWlmIHRlc3QgIiRsaW5rbW9kZSIgPSAicHJvZyI7IHRoZW4KKwkgIGNvbXBpbGVfZGVwbGlicz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRjb21waWxlX2RlcGxpYnMiCisJICBmaW5hbGl6ZV9kZXBsaWJzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGZpbmFsaXplX2RlcGxpYnMiCisJZWxzZQorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAiYCRFQ0hPICIgJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJZmkKKyAgICAgIGZpCisgICAgICBkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMiCisgICAgICBpZiB0ZXN0ICIkcGFzcyIgPSBkbHByZW9wZW47IHRoZW4KKwkjIExpbmsgdGhlIGRscHJlb3BlbmVkIGxpYnJhcmllcyBiZWZvcmUgb3RoZXIgbGlicmFyaWVzCisJZm9yIGRlcGxpYiBpbiAkc2F2ZV9kZXBsaWJzOyBkbworCSAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwlkb25lCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHBhc3MiICE9IGRsb3BlbjsgdGhlbgorCWlmIHRlc3QgIiRwYXNzIiAhPSBjb252OyB0aGVuCisJICAjIE1ha2Ugc3VyZSBsaWJfc2VhcmNoX3BhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCisJICBsaWJfc2VhcmNoX3BhdGg9CisJICBmb3IgZGlyIGluICRuZXdsaWJfc2VhcmNoX3BhdGg7IGRvCisJICAgIGNhc2UgIiRsaWJfc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkZGlyICIqKSA7OworCSAgICAqKSBsaWJfc2VhcmNoX3BhdGg9IiRsaWJfc2VhcmNoX3BhdGggJGRpciIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCSAgbmV3bGliX3NlYXJjaF9wYXRoPQorCWZpCisKKwlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiICE9ICJwcm9nLGxpbmsiOyB0aGVuCisJICB2YXJzPSJkZXBsaWJzIgorCWVsc2UKKwkgIHZhcnM9ImNvbXBpbGVfZGVwbGlicyBmaW5hbGl6ZV9kZXBsaWJzIgorCWZpCisJZm9yIHZhciBpbiAkdmFycyBkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAjIEFkZCBsaWJyYXJpZXMgdG8gJHZhciBpbiByZXZlcnNlIG9yZGVyCisJICBldmFsIHRtcF9saWJzPVwiXCQkdmFyXCIKKwkgIG5ld19saWJzPQorCSAgZm9yIGRlcGxpYiBpbiAkdG1wX2xpYnM7IGRvCisJICAgICMgRklYTUU6IFBlZGFudGljYWxseSwgdGhpcyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8sIHNvCisJICAgICMgICAgICAgIHRoYXQgc29tZSBuYXN0eSBkZXBlbmRlbmN5IGxvb3AgaXNuJ3QgYWNjaWRlbnRhbGx5CisJICAgICMgICAgICAgIGJyb2tlbjoKKwkgICAgI25ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIKKwkgICAgIyBQcmFnbWF0aWNhbGx5LCB0aGlzIHNlZW1zIHRvIGNhdXNlIHZlcnkgZmV3IHByb2JsZW1zIGluCisJICAgICMgcHJhY3RpY2U6CisJICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAtTCopIG5ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIgOzsKKwkgICAgLVIqKSA7OworCSAgICAqKQorCSAgICAgICMgQW5kIGhlcmUgaXMgdGhlIHJlYXNvbjogd2hlbiBhIGxpYnJhcnkgYXBwZWFycyBtb3JlCisJICAgICAgIyB0aGFuIG9uY2UgYXMgYW4gZXhwbGljaXQgZGVwZW5kZW5jZSBvZiBhIGxpYnJhcnksIG9yCisJICAgICAgIyBpcyBpbXBsaWNpdGx5IGxpbmtlZCBpbiBtb3JlIHRoYW4gb25jZSBieSB0aGUKKwkgICAgICAjIGNvbXBpbGVyLCBpdCBpcyBjb25zaWRlcmVkIHNwZWNpYWwsIGFuZCBtdWx0aXBsZQorCSAgICAgICMgb2NjdXJyZW5jZXMgdGhlcmVvZiBhcmUgbm90IHJlbW92ZWQuICBDb21wYXJlIHRoaXMKKwkgICAgICAjIHdpdGggaGF2aW5nIHRoZSBzYW1lIGxpYnJhcnkgYmVpbmcgbGlzdGVkIGFzIGEKKwkgICAgICAjIGRlcGVuZGVuY3kgb2YgbXVsdGlwbGUgb3RoZXIgbGlicmFyaWVzOiBpbiB0aGlzIGNhc2UsCisJICAgICAgIyB3ZSBrbm93IChwZWRhbnRpY2FsbHksIHdlIGFzc3VtZSkgdGhlIGxpYnJhcnkgZG9lcyBub3QKKwkgICAgICAjIG5lZWQgdG8gYmUgbGlzdGVkIG1vcmUgdGhhbiBvbmNlLCBzbyB3ZSBrZWVwIG9ubHkgdGhlCisJICAgICAgIyBsYXN0IGNvcHkuICBUaGlzIGlzIG5vdCBhbHdheXMgcmlnaHQsIGJ1dCBpdCBpcyByYXJlCisJICAgICAgIyBlbm91Z2ggdGhhdCB3ZSByZXF1aXJlIHVzZXJzIHRoYXQgcmVhbGx5IG1lYW4gdG8gcGxheQorCSAgICAgICMgc3VjaCB1bnBvcnRhYmxlIGxpbmtpbmcgdHJpY2tzIHRvIGxpbmsgdGhlIGxpYnJhcnkKKwkgICAgICAjIHVzaW5nIC1XbCwtbG5hbWUsIHNvIHRoYXQgbGlidG9vbCBkb2VzIG5vdCBjb25zaWRlciBpdAorCSAgICAgICMgZm9yIGR1cGxpY2F0ZSByZW1vdmFsLgorCSAgICAgIGNhc2UgIiAkc3BlY2lhbGRlcGxpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIG5ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIgOzsKKwkgICAgICAqKQorCQljYXNlICIgJG5ld19saWJzICIgaW4KKwkJKiIgJGRlcGxpYiAiKikgOzsKKwkJKikgbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIiA7OworCQllc2FjCisJCTs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwkgIHRtcF9saWJzPQorCSAgZm9yIGRlcGxpYiBpbiAkbmV3X2xpYnM7IGRvCisJICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAtTCopCisJICAgICAgY2FzZSAiICR0bXBfbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgOzsKKwkgICAgICAqKSB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiIDs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgICopIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCSAgZXZhbCAkdmFyPVwiJHRtcF9saWJzXCIKKwlkb25lICMgZm9yIHZhcgorICAgICAgZmkKKyAgICAgICMgTGFzdCBzdGVwOiByZW1vdmUgcnVudGltZSBsaWJzIGZyb20gZGVwZW5kZW5jeV9saWJzCisgICAgICAjICh0aGV5IHN0YXkgaW4gZGVwbGlicykKKyAgICAgIHRtcF9saWJzPQorICAgICAgZm9yIGkgaW4gJGRlcGVuZGVuY3lfbGlicyA7IGRvCisJY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoICIgaW4KKwkqIiAkaSAiKikKKwkgIGk9IiIKKwkgIDs7CisJZXNhYworCWlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKwkgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGkiCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIGRlcGVuZGVuY3lfbGlicz0kdG1wX2xpYnMKKyAgICBkb25lICMgZm9yIHBhc3MKKyAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorICAgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisgICAgICBkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyIKKyAgICBmaQorCisgICAgY2FzZSAkbGlua21vZGUgaW4KKyAgICBvbGRsaWIpCisgICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgorCWZ1bmNfd2FybmluZyAiXGAtZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKyAgICAgIGZpCisKKyAgICAgIGNhc2UgIiAkZGVwbGlicyIgaW4KKyAgICAgICpcIC1sKiB8ICpcIC1MKikKKwlmdW5jX3dhcm5pbmcgIlxgLWwnIGFuZCBcYC1MJyBhcmUgaWdub3JlZCBmb3IgYXJjaGl2ZXMiIDs7CisgICAgICBlc2FjCisKKyAgICAgIHRlc3QgLW4gIiRycGF0aCIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcnBhdGgnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICB0ZXN0IC1uICIkeHJwYXRoIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1SJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKworICAgICAgdGVzdCAtbiAiJHZpbmZvIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8vLXZlcnNpb24tbnVtYmVyJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKworICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLWV4cG9ydC1zeW1ib2xzJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKworICAgICAgIyBOb3cgc2V0IHRoZSB2YXJpYWJsZXMgZm9yIGJ1aWxkaW5nIG9sZCBsaWJyYXJpZXMuCisgICAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKyAgICAgIG9sZGxpYnM9IiRvdXRwdXQiCisgICAgICBvYmpzPSIkb2JqcyRvbGRfZGVwbGlicyIKKyAgICAgIDs7CisKKyAgICBsaWIpCisgICAgICAjIE1ha2Ugc3VyZSB3ZSBvbmx5IGdlbmVyYXRlIGxpYnJhcmllcyBvZiB0aGUgZm9ybSBgbGliTkFNRS5sYScuCisgICAgICBjYXNlICRvdXRwdXRuYW1lIGluCisgICAgICBsaWIqKQorCWZ1bmNfc3RyaXBuYW1lICdsaWInICcubGEnICIkb3V0cHV0bmFtZSIKKwluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwlldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgorCWV2YWwgbGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIgorCTs7CisgICAgICAqKQorCXRlc3QgIiRtb2R1bGUiID0gbm8gJiYgXAorCSAgZnVuY19mYXRhbF9oZWxwICJsaWJ0b29sIGxpYnJhcnkgXGAkb3V0cHV0JyBtdXN0IGJlZ2luIHdpdGggXGBsaWInIgorCisJaWYgdGVzdCAiJG5lZWRfbGliX3ByZWZpeCIgIT0gbm87IHRoZW4KKwkgICMgQWRkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXMgaWYgcmVxdWlyZWQKKwkgIGZ1bmNfc3RyaXBuYW1lICcnICcubGEnICIkb3V0cHV0bmFtZSIKKwkgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKKwkgIGV2YWwgbGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIgorCWVsc2UKKwkgIGZ1bmNfc3RyaXBuYW1lICcnICcubGEnICIkb3V0cHV0bmFtZSIKKwkgIGxpYm5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCWZpCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgaWYgdGVzdCAtbiAiJG9ianMiOyB0aGVuCisJaWYgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAhPSBwYXNzX2FsbDsgdGhlbgorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGJ1aWxkIGxpYnRvb2wgbGlicmFyeSBcYCRvdXRwdXQnIGZyb20gbm9uLWxpYnRvb2wgb2JqZWN0cyBvbiB0aGlzIGhvc3Q6JG9ianMiCisJZWxzZQorCSAgZWNobworCSAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIG5vbi1saWJ0b29sIgorCSAgJEVDSE8gIioqKiBvYmplY3RzICRvYmpzIGlzIG5vdCBwb3J0YWJsZSEiCisJICBsaWJvYmpzPSIkbGlib2JqcyAkb2JqcyIKKwlmaQorICAgICAgZmkKKworICAgICAgdGVzdCAiJGRsc2VsZiIgIT0gbm8gJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtZGxvcGVuIHNlbGYnIGlzIGlnbm9yZWQgZm9yIGxpYnRvb2wgbGlicmFyaWVzIgorCisgICAgICBzZXQgZHVtbXkgJHJwYXRoCisgICAgICBzaGlmdAorICAgICAgdGVzdCAiJCMiIC1ndCAxICYmIFwKKwlmdW5jX3dhcm5pbmcgImlnbm9yaW5nIG11bHRpcGxlIFxgLXJwYXRoJ3MgZm9yIGEgbGlidG9vbCBsaWJyYXJ5IgorCisgICAgICBpbnN0YWxsX2xpYmRpcj0iJDEiCisKKyAgICAgIG9sZGxpYnM9CisgICAgICBpZiB0ZXN0IC16ICIkcnBhdGgiOyB0aGVuCisJaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKwkgICMgQnVpbGRpbmcgYSBsaWJ0b29sIGNvbnZlbmllbmNlIGxpYnJhcnkuCisJICAjIFNvbWUgY29tcGlsZXJzIGhhdmUgcHJvYmxlbXMgd2l0aCBhIGAuYWwnIGV4dGVuc2lvbiBzbworCSAgIyBjb252ZW5pZW5jZSBsaWJyYXJpZXMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgZXh0ZW5zaW9uIGFuCisJICAjIGFyY2hpdmUgbm9ybWFsbHkgd291bGQuCisJICBvbGRsaWJzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0ICRvbGRsaWJzIgorCSAgYnVpbGRfbGlidG9vbF9saWJzPWNvbnZlbmllbmNlCisJICBidWlsZF9vbGRfbGlicz15ZXMKKwlmaQorCisJdGVzdCAtbiAiJHZpbmZvIiAmJiBcCisJICBmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mby8tdmVyc2lvbi1udW1iZXInIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIKKworCXRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCisJICBmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIKKyAgICAgIGVsc2UKKworCSMgUGFyc2UgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gYXJndW1lbnQuCisJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JzonCisJc2V0IGR1bW15ICR2aW5mbyAwIDAgMAorCXNoaWZ0CisJSUZTPSIkc2F2ZV9pZnMiCisKKwl0ZXN0IC1uICIkNyIgJiYgXAorCSAgZnVuY19mYXRhbF9oZWxwICJ0b28gbWFueSBwYXJhbWV0ZXJzIHRvIFxgLXZlcnNpb24taW5mbyciCisKKwkjIGNvbnZlcnQgYWJzb2x1dGUgdmVyc2lvbiBudW1iZXJzIHRvIGxpYnRvb2wgYWdlcworCSMgdGhpcyByZXRhaW5zIGNvbXBhdGliaWxpdHkgd2l0aCAubGEgZmlsZXMgYW5kIGF0dGVtcHRzCisJIyB0byBtYWtlIHRoZSBjb2RlIGJlbG93IGEgYml0IG1vcmUgY29tcHJlaGVuc2libGUKKworCWNhc2UgJHZpbmZvX251bWJlciBpbgorCXllcykKKwkgIG51bWJlcl9tYWpvcj0iJDEiCisJICBudW1iZXJfbWlub3I9IiQyIgorCSAgbnVtYmVyX3JldmlzaW9uPSIkMyIKKwkgICMKKwkgICMgVGhlcmUgYXJlIHJlYWxseSBvbmx5IHR3byBraW5kcyAtLSB0aG9zZSB0aGF0CisJICAjIHVzZSB0aGUgY3VycmVudCByZXZpc2lvbiBhcyB0aGUgbWFqb3IgdmVyc2lvbgorCSAgIyBhbmQgdGhvc2UgdGhhdCBzdWJ0cmFjdCBhZ2UgYW5kIHVzZSBhZ2UgYXMKKwkgICMgYSBtaW5vciB2ZXJzaW9uLiAgQnV0LCB0aGVuIHRoZXJlIGlzIGlyaXgKKwkgICMgd2hpY2ggaGFzIGFuIGV4dHJhIDEgYWRkZWQganVzdCBmb3IgZnVuCisJICAjCisJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwkgIGRhcndpbnxsaW51eHxvc2Z8d2luZG93c3xub25lKQorCSAgICBmdW5jX2FyaXRoICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yCisJICAgIGN1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGFnZT0iJG51bWJlcl9taW5vciIKKwkgICAgcmV2aXNpb249IiRudW1iZXJfcmV2aXNpb24iCisJICAgIDs7CisJICBmcmVlYnNkLWFvdXR8ZnJlZWJzZC1lbGZ8cW54fHN1bm9zKQorCSAgICBjdXJyZW50PSIkbnVtYmVyX21ham9yIgorCSAgICByZXZpc2lvbj0iJG51bWJlcl9taW5vciIKKwkgICAgYWdlPSIwIgorCSAgICA7OworCSAgaXJpeHxub25zdG9wdXgpCisJICAgIGZ1bmNfYXJpdGggJG51bWJlcl9tYWpvciArICRudW1iZXJfbWlub3IKKwkgICAgY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgYWdlPSIkbnVtYmVyX21pbm9yIgorCSAgICByZXZpc2lvbj0iJG51bWJlcl9taW5vciIKKwkgICAgbHRfaXJpeF9pbmNyZW1lbnQ9bm8KKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJbm8pCisJICBjdXJyZW50PSIkMSIKKwkgIHJldmlzaW9uPSIkMiIKKwkgIGFnZT0iJDMiCisJICA7OworCWVzYWMKKworCSMgQ2hlY2sgdGhhdCBlYWNoIG9mIHRoZSB0aGluZ3MgYXJlIHZhbGlkIG51bWJlcnMuCisJY2FzZSAkY3VycmVudCBpbgorCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKKwkqKQorCSAgZnVuY19lcnJvciAiQ1VSUkVOVCBcYCRjdXJyZW50JyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwkgIDs7CisJZXNhYworCisJY2FzZSAkcmV2aXNpb24gaW4KKwkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7CisJKikKKwkgIGZ1bmNfZXJyb3IgIlJFVklTSU9OIFxgJHJldmlzaW9uJyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwkgIDs7CisJZXNhYworCisJY2FzZSAkYWdlIGluCisJMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OworCSopCisJICBmdW5jX2Vycm9yICJBR0UgXGAkYWdlJyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwkgIDs7CisJZXNhYworCisJaWYgdGVzdCAiJGFnZSIgLWd0ICIkY3VycmVudCI7IHRoZW4KKwkgIGZ1bmNfZXJyb3IgIkFHRSBcYCRhZ2UnIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBpbnRlcmZhY2UgbnVtYmVyIFxgJGN1cnJlbnQnIgorCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgorCWZpCisKKwkjIENhbGN1bGF0ZSB0aGUgdmVyc2lvbiB2YXJpYWJsZXMuCisJbWFqb3I9CisJdmVyc3VmZml4PQorCXZlcnN0cmluZz0KKwljYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwlub25lKSA7OworCisJZGFyd2luKQorCSAgIyBMaWtlIExpbnV4LCBidXQgd2l0aCB0aGUgY3VycmVudCB2ZXJzaW9uIGF2YWlsYWJsZSBpbgorCSAgIyB2ZXJzdHJpbmcgZm9yIGNvZGluZyBpdCBpbnRvIHRoZSBsaWJyYXJ5IGhlYWRlcgorCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKKwkgIHZlcnN1ZmZpeD0iJG1ham9yLiRhZ2UuJHJldmlzaW9uIgorCSAgIyBEYXJ3aW4gbGQgZG9lc24ndCBsaWtlIDAgZm9yIHRoZXNlIG9wdGlvbnMuLi4KKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgKyAxCisJICBtaW5vcl9jdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgeGxjdmVyc3RyaW5nPSIke3dsfS1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJHt3bH0kbWlub3JfY3VycmVudCAke3dsfS1jdXJyZW50X3ZlcnNpb24gJHt3bH0kbWlub3JfY3VycmVudC4kcmV2aXNpb24iCisJICB2ZXJzdHJpbmc9Ii1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQgLWN1cnJlbnRfdmVyc2lvbiAkbWlub3JfY3VycmVudC4kcmV2aXNpb24iCisJICA7OworCisJZnJlZWJzZC1hb3V0KQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRyZXZpc2lvbiI7CisJICA7OworCisJZnJlZWJzZC1lbGYpCisJICBtYWpvcj0iLiRjdXJyZW50IgorCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQiCisJICA7OworCisJaXJpeCB8IG5vbnN0b3B1eCkKKwkgIGlmIHRlc3QgIlgkbHRfaXJpeF9pbmNyZW1lbnQiID0gIlhubyI7IHRoZW4KKwkgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIGVsc2UKKwkgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UgKyAxCisJICBmaQorCSAgbWFqb3I9JGZ1bmNfYXJpdGhfcmVzdWx0CisKKwkgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorCSAgICBub25zdG9wdXgpIHZlcnN0cmluZ19wcmVmaXg9bm9uc3RvcHV4IDs7CisJICAgICopICAgICAgICAgdmVyc3RyaW5nX3ByZWZpeD1zZ2kgOzsKKwkgIGVzYWMKKwkgIHZlcnN0cmluZz0iJHZlcnN0cmluZ19wcmVmaXgkbWFqb3IuJHJldmlzaW9uIgorCisJICAjIEFkZCBpbiBhbGwgdGhlIGludGVyZmFjZXMgdGhhdCB3ZSBhcmUgY29tcGF0aWJsZSB3aXRoLgorCSAgbG9vcD0kcmV2aXNpb24KKwkgIHdoaWxlIHRlc3QgIiRsb29wIiAtbmUgMDsgZG8KKwkgICAgZnVuY19hcml0aCAkcmV2aXNpb24gLSAkbG9vcAorCSAgICBpZmFjZT0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgZnVuY19hcml0aCAkbG9vcCAtIDEKKwkgICAgbG9vcD0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nX3ByZWZpeCRtYWpvci4kaWZhY2U6JHZlcnN0cmluZyIKKwkgIGRvbmUKKworCSAgIyBCZWZvcmUgdGhpcyBwb2ludCwgJG1ham9yIG11c3Qgbm90IGNvbnRhaW4gYC4nLgorCSAgbWFqb3I9LiRtYWpvcgorCSAgdmVyc3VmZml4PSIkbWFqb3IuJHJldmlzaW9uIgorCSAgOzsKKworCWxpbnV4KQorCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKKwkgIHZlcnN1ZmZpeD0iJG1ham9yLiRhZ2UuJHJldmlzaW9uIgorCSAgOzsKKworCW9zZikKKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0CisJICB2ZXJzdWZmaXg9Ii4kY3VycmVudC4kYWdlLiRyZXZpc2lvbiIKKwkgIHZlcnN0cmluZz0iJGN1cnJlbnQuJGFnZS4kcmV2aXNpb24iCisKKwkgICMgQWRkIGluIGFsbCB0aGUgaW50ZXJmYWNlcyB0aGF0IHdlIGFyZSBjb21wYXRpYmxlIHdpdGguCisJICBsb29wPSRhZ2UKKwkgIHdoaWxlIHRlc3QgIiRsb29wIiAtbmUgMDsgZG8KKwkgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRsb29wCisJICAgIGlmYWNlPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICBmdW5jX2FyaXRoICRsb29wIC0gMQorCSAgICBsb29wPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmc6JHtpZmFjZX0uMCIKKwkgIGRvbmUKKworCSAgIyBNYWtlIGV4ZWN1dGFibGVzIGRlcGVuZCBvbiBvdXIgY3VycmVudCB2ZXJzaW9uLgorCSAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nOiR7Y3VycmVudH0uMCIKKwkgIDs7CisKKwlxbngpCisJICBtYWpvcj0iLiRjdXJyZW50IgorCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQiCisJICA7OworCisJc3Vub3MpCisJICBtYWpvcj0iLiRjdXJyZW50IgorCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQuJHJldmlzaW9uIgorCSAgOzsKKworCXdpbmRvd3MpCisJICAjIFVzZSAnLScgcmF0aGVyIHRoYW4gJy4nLCBzaW5jZSB3ZSBvbmx5IHdhbnQgb25lCisJICAjIGV4dGVuc2lvbiBvbiBET1MgOC4zIGZpbGVzeXN0ZW1zLgorCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIG1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgdmVyc3VmZml4PSItJG1ham9yIgorCSAgOzsKKworCSopCisJICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gInVua25vd24gbGlicmFyeSB2ZXJzaW9uIHR5cGUgXGAkdmVyc2lvbl90eXBlJyIKKwkgIDs7CisJZXNhYworCisJIyBDbGVhciB0aGUgdmVyc2lvbiBpbmZvIGlmIHdlIGRlZmF1bHRlZCwgYW5kIHRoZXkgc3BlY2lmaWVkIGEgcmVsZWFzZS4KKwlpZiB0ZXN0IC16ICIkdmluZm8iICYmIHRlc3QgLW4gIiRyZWxlYXNlIjsgdGhlbgorCSAgbWFqb3I9CisJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwkgIGRhcndpbikKKwkgICAgIyB3ZSBjYW4ndCBjaGVjayBmb3IgIjAuMCIgaW4gYXJjaGl2ZV9jbWRzIGR1ZSB0byBxdW90aW5nCisJICAgICMgcHJvYmxlbXMsIHNvIHdlIHJlc2V0IGl0IGNvbXBsZXRlbHkKKwkgICAgdmVyc3RyaW5nPQorCSAgICA7OworCSAgKikKKwkgICAgdmVyc3RyaW5nPSIwLjAiCisJICAgIDs7CisJICBlc2FjCisJICBpZiB0ZXN0ICIkbmVlZF92ZXJzaW9uIiA9IG5vOyB0aGVuCisJICAgIHZlcnN1ZmZpeD0KKwkgIGVsc2UKKwkgICAgdmVyc3VmZml4PSIuMC4wIgorCSAgZmkKKwlmaQorCisJIyBSZW1vdmUgdmVyc2lvbiBpbmZvIGZyb20gbmFtZSBpZiB2ZXJzaW9uaW5nIHNob3VsZCBiZSBhdm9pZGVkCisJaWYgdGVzdCAiJGF2b2lkX3ZlcnNpb24iID0geWVzICYmIHRlc3QgIiRuZWVkX3ZlcnNpb24iID0gbm87IHRoZW4KKwkgIG1ham9yPQorCSAgdmVyc3VmZml4PQorCSAgdmVyc3RyaW5nPSIiCisJZmkKKworCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBhcmNoaXZlIHdpbGwgaGF2ZSB1bmRlZmluZWQgc3ltYm9scy4KKwlpZiB0ZXN0ICIkYWxsb3dfdW5kZWZpbmVkIiA9IHllczsgdGhlbgorCSAgaWYgdGVzdCAiJGFsbG93X3VuZGVmaW5lZF9mbGFnIiA9IHVuc3VwcG9ydGVkOyB0aGVuCisJICAgIGZ1bmNfd2FybmluZyAidW5kZWZpbmVkIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gJGhvc3Qgc2hhcmVkIGxpYnJhcmllcyIKKwkgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgIGJ1aWxkX29sZF9saWJzPXllcworCSAgZmkKKwllbHNlCisJICAjIERvbid0IGFsbG93IHVuZGVmaW5lZCBzeW1ib2xzLgorCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9IiRub191bmRlZmluZWRfZmxhZyIKKwlmaQorCisgICAgICBmaQorCisgICAgICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJGxpYm5hbWUiICIkbGlibmFtZSIgInllcyIKKyAgICAgIGxpYm9ianM9IiRsaWJvYmpzICRzeW1maWxlb2JqIgorICAgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKworICAgICAgaWYgdGVzdCAiJG1vZGUiICE9IHJlbGluazsgdGhlbgorCSMgUmVtb3ZlIG91ciBvdXRwdXRzLCBidXQgZG9uJ3QgcmVtb3ZlIG9iamVjdCBmaWxlcyBzaW5jZSB0aGV5CisJIyBtYXkgaGF2ZSBiZWVuIGNyZWF0ZWQgd2hlbiBjb21waWxpbmcgUElDIG9iamVjdHMuCisJcmVtb3ZlbGlzdD0KKwl0ZW1wcmVtb3ZlbGlzdD1gJEVDSE8gIiRvdXRwdXRfb2JqZGlyLyoiYAorCWZvciBwIGluICR0ZW1wcmVtb3ZlbGlzdDsgZG8KKwkgIGNhc2UgJHAgaW4KKwkgICAgKi4kb2JqZXh0IHwgKi5nY25vKQorCSAgICAgICA7OworCSAgICAkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSB8ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiogfCAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9JHtyZWxlYXNlfS4qKQorCSAgICAgICBpZiB0ZXN0ICJYJHByZWNpb3VzX2ZpbGVzX3JlZ2V4IiAhPSAiWCI7IHRoZW4KKwkJIGlmICRFQ0hPICIkcCIgfCAkRUdSRVAgLWUgIiRwcmVjaW91c19maWxlc19yZWdleCIgPi9kZXYvbnVsbCAyPiYxCisJCSB0aGVuCisJCSAgIGNvbnRpbnVlCisJCSBmaQorCSAgICAgICBmaQorCSAgICAgICByZW1vdmVsaXN0PSIkcmVtb3ZlbGlzdCAkcCIKKwkgICAgICAgOzsKKwkgICAgKikgOzsKKwkgIGVzYWMKKwlkb25lCisJdGVzdCAtbiAiJHJlbW92ZWxpc3QiICYmIFwKKwkgIGZ1bmNfc2hvd19ldmFsICIke1JNfXIgXCRyZW1vdmVsaXN0IgorICAgICAgZmkKKworICAgICAgIyBOb3cgc2V0IHRoZSB2YXJpYWJsZXMgZm9yIGJ1aWxkaW5nIG9sZCBsaWJyYXJpZXMuCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzICYmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IGNvbnZlbmllbmNlIDsgdGhlbgorCW9sZGxpYnM9IiRvbGRsaWJzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisKKwkjIFRyYW5zZm9ybSAubG8gZmlsZXMgdG8gLm8gZmlsZXMuCisJb2xkb2Jqcz0iJG9ianMgImAkRUNITyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAiL1wuJHtsaWJleHR9JC9kOyAkbG8ybyIgfCAkTkwyU1BgCisgICAgICBmaQorCisgICAgICAjIEVsaW1pbmF0ZSBhbGwgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzLgorICAgICAgI2ZvciBwYXRoIGluICRub3RpbnN0X3BhdGg7IGRvCisgICAgICAjCWxpYl9zZWFyY2hfcGF0aD1gJEVDSE8gIiRsaWJfc2VhcmNoX3BhdGggIiB8ICRTRUQgInMlICRwYXRoICUgJWciYAorICAgICAgIwlkZXBsaWJzPWAkRUNITyAiJGRlcGxpYnMgIiB8ICRTRUQgInMlIC1MJHBhdGggJSAlZyJgCisgICAgICAjCWRlcGVuZGVuY3lfbGlicz1gJEVDSE8gIiRkZXBlbmRlbmN5X2xpYnMgIiB8ICRTRUQgInMlIC1MJHBhdGggJSAlZyJgCisgICAgICAjZG9uZQorCisgICAgICBpZiB0ZXN0IC1uICIkeHJwYXRoIjsgdGhlbgorCSMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGFueSBycGF0aCBmbGFncywgdGhlbiBhZGQgdGhlbS4KKwl0ZW1wX3hycGF0aD0KKwlmb3IgbGliZGlyIGluICR4cnBhdGg7IGRvCisJICB0ZW1wX3hycGF0aD0iJHRlbXBfeHJwYXRoIC1SJGxpYmRpciIKKwkgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIiA7OworCSAgZXNhYworCWRvbmUKKwlpZiB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiAhPSB5ZXMgfHwgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorCSAgZGVwZW5kZW5jeV9saWJzPSIkdGVtcF94cnBhdGggJGRlcGVuZGVuY3lfbGlicyIKKwlmaQorICAgICAgZmkKKworICAgICAgIyBNYWtlIHN1cmUgZGxmaWxlcyBjb250YWlucyBvbmx5IHVuaXF1ZSBmaWxlcyB0aGF0IHdvbid0IGJlIGRscHJlb3BlbmVkCisgICAgICBvbGRfZGxmaWxlcz0iJGRsZmlsZXMiCisgICAgICBkbGZpbGVzPQorICAgICAgZm9yIGxpYiBpbiAkb2xkX2RsZmlsZXM7IGRvCisJY2FzZSAiICRkbHByZWZpbGVzICRkbGZpbGVzICIgaW4KKwkqIiAkbGliICIqKSA7OworCSopIGRsZmlsZXM9IiRkbGZpbGVzICRsaWIiIDs7CisJZXNhYworICAgICAgZG9uZQorCisgICAgICAjIE1ha2Ugc3VyZSBkbHByZWZpbGVzIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGZpbGVzCisgICAgICBvbGRfZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMiCisgICAgICBkbHByZWZpbGVzPQorICAgICAgZm9yIGxpYiBpbiAkb2xkX2RscHJlZmlsZXM7IGRvCisJY2FzZSAiJGRscHJlZmlsZXMgIiBpbgorCSoiICRsaWIgIiopIDs7CisJKikgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCisKKyAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJaWYgdGVzdCAtbiAiJHJwYXRoIjsgdGhlbgorCSAgY2FzZSAkaG9zdCBpbgorCSAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotYmVvcyogfCAqLWNlZ2NjKiB8ICotKi1oYWlrdSopCisJICAgICMgdGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgYyBsaWJyYXJ5IChhcyBzdWNoKSEKKwkgICAgOzsKKwkgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkgICAgIyBSaGFwc29keSBDIGxpYnJhcnkgaXMgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsKKwkgICAgZGVwbGlicz0iJGRlcGxpYnMgU3lzdGVtLmx0ZnJhbWV3b3JrIgorCSAgICA7OworCSAgKi0qLW5ldGJzZCopCisJICAgICMgRG9uJ3QgbGluayB3aXRoIGxpYmMgdW50aWwgdGhlIGEub3V0IGxkLnNvIGlzIGZpeGVkLgorCSAgICA7OworCSAgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSopCisJICAgICMgRG8gbm90IGluY2x1ZGUgbGliYyBkdWUgdG8gdXMgaGF2aW5nIGxpYmMvbGliY19yLgorCSAgICA7OworCSAgKi0qLXNjbzMuMnY1KiB8ICotKi1zY281djYqKQorCSAgICAjIENhdXNlcyBwcm9ibGVtcyB3aXRoIF9fY3R5cGUKKwkgICAgOzsKKwkgICotKi1zeXN2NC4ydXcyKiB8ICotKi1zeXN2NSogfCAqLSotdW5peHdhcmUqIHwgKi0qLU9wZW5VTklYKikKKwkgICAgIyBDb21waWxlciBpbnNlcnRzIGxpYmMgaW4gdGhlIGNvcnJlY3QgcGxhY2UgZm9yIHRocmVhZHMgdG8gd29yaworCSAgICA7OworCSAgKikKKwkgICAgIyBBZGQgbGliYyB0byBkZXBsaWJzIG9uIGFsbCBvdGhlciBzeXN0ZW1zIGlmIG5lY2Vzc2FyeS4KKwkgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbmVlZF9sYyIgPSAieWVzIjsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWJzIC1sYyIKKwkgICAgZmkKKwkgICAgOzsKKwkgIGVzYWMKKwlmaQorCisJIyBUcmFuc2Zvcm0gZGVwbGlicyBpbnRvIG9ubHkgZGVwbGlicyB0aGF0IGNhbiBiZSBsaW5rZWQgaW4gc2hhcmVkLgorCW5hbWVfc2F2ZT0kbmFtZQorCWxpYm5hbWVfc2F2ZT0kbGlibmFtZQorCXJlbGVhc2Vfc2F2ZT0kcmVsZWFzZQorCXZlcnN1ZmZpeF9zYXZlPSR2ZXJzdWZmaXgKKwltYWpvcl9zYXZlPSRtYWpvcgorCSMgSSdtIG5vdCBzdXJlIGlmIEknbSB0cmVhdGluZyB0aGUgcmVsZWFzZSBjb3JyZWN0bHkuICBJIHRoaW5rCisJIyByZWxlYXNlIHNob3VsZCBzaG93IHVwIGluIHRoZSAtbCAoaWUgLWxnbXA1KSBzbyB3ZSBkb24ndCB3YW50IHRvCisJIyBhZGQgaXQgaW4gdHdpY2UuICBJcyB0aGF0IGNvcnJlY3Q/CisJcmVsZWFzZT0iIgorCXZlcnN1ZmZpeD0iIgorCW1ham9yPSIiCisJbmV3ZGVwbGlicz0KKwlkcm9wcGVkZGVwcz1ubworCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisJcGFzc19hbGwpCisJICAjIERvbid0IGNoZWNrIGZvciBzaGFyZWQvc3RhdGljLiAgRXZlcnl0aGluZyB3b3Jrcy4KKwkgICMgVGhpcyBtaWdodCBiZSBhIGxpdHRsZSBuYWl2ZS4gIFdlIG1pZ2h0IHdhbnQgdG8gY2hlY2sKKwkgICMgd2hldGhlciB0aGUgbGlicmFyeSBleGlzdHMgb3Igbm90LiAgQnV0IHRoaXMgaXMgb24KKwkgICMgb3NmMyAmIG9zZjQgYW5kIEknbSBub3QgcmVhbGx5IHN1cmUuLi4gSnVzdAorCSAgIyBpbXBsZW1lbnRpbmcgd2hhdCB3YXMgYWxyZWFkeSB0aGUgYmVoYXZpb3IuCisJICBuZXdkZXBsaWJzPSRkZXBsaWJzCisJICA7OworCXRlc3RfY29tcGlsZSkKKwkgICMgVGhpcyBjb2RlIHN0cmVzc2VzIHRoZSAibGlicmFyaWVzIGFyZSBwcm9ncmFtcyIgcGFyYWRpZ20gdG8gaXRzCisJICAjIGxpbWl0cy4gTWF5YmUgZXZlbiBicmVha3MgaXQuICBXZSBjb21waWxlIGEgcHJvZ3JhbSwgbGlua2luZyBpdAorCSAgIyBhZ2FpbnN0IHRoZSBkZXBsaWJzIGFzIGEgcHJveHkgZm9yIHRoZSBsaWJyYXJ5LiAgVGhlbiB3ZSBjYW4gY2hlY2sKKwkgICMgd2hldGhlciB0aGV5IGxpbmtlZCBpbiBzdGF0aWNhbGx5IG9yIGR5bmFtaWNhbGx5IHdpdGggbGRkLgorCSAgJG9wdF9kcnlfcnVuIHx8ICRSTSBjb25mdGVzdC5jCisJICBjYXQgPiBjb25mdGVzdC5jIDw8RU9GCisJICBpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0KK0VPRgorCSAgJG9wdF9kcnlfcnVuIHx8ICRSTSBjb25mdGVzdAorCSAgaWYgJExUQ0MgJExUQ0ZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgJGRlcGxpYnM7IHRoZW4KKwkgICAgbGRkX291dHB1dD1gbGRkIGNvbmZ0ZXN0YAorCSAgICBmb3IgaSBpbiAkZGVwbGliczsgZG8KKwkgICAgICBjYXNlICRpIGluCisJICAgICAgLWwqKQorCQlmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGkiCisJCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCQlpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJCSAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJCSAgKiIgJGkgIiopCisJCSAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKwkJICAgIGk9IiIKKwkJICAgIDs7CisJCSAgZXNhYworCQlmaQorCQlpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCisJCSAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJCSAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAorCQkgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0CisJCSAgZGVwbGliX21hdGNoPSQxCisJCSAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgorCQkgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCSAgZWxzZQorCQkgICAgZHJvcHBlZGRlcHM9eWVzCisJCSAgICBlY2hvCisJCSAgICAkRUNITyAiKioqIFdhcm5pbmc6IGR5bmFtaWMgbGlua2VyIGRvZXMgbm90IGFjY2VwdCBuZWVkZWQgbGlicmFyeSAkaS4iCisJCSAgICBlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQkgICAgZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJICAgIGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggSSBiZWxpZXZlIHlvdSBkbyBub3QgaGF2ZSIKKwkJICAgIGVjaG8gIioqKiBiZWNhdXNlIGEgdGVzdF9jb21waWxlIGRpZCByZXZlYWwgdGhhdCB0aGUgbGlua2VyIGRpZCBub3QgdXNlIGl0IGZvciIKKwkJICAgIGVjaG8gIioqKiBpdHMgZHluYW1pYyBkZXBlbmRlbmN5IGxpc3QgdGhhdCBwcm9ncmFtcyBnZXQgcmVzb2x2ZWQgd2l0aCBhdCBydW50aW1lLiIKKwkJICBmaQorCQlmaQorCQk7OworCSAgICAgICopCisJCW5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgZWxzZQorCSAgICAjIEVycm9yIG9jY3VycmVkIGluIHRoZSBmaXJzdCBjb21waWxlLiAgTGV0J3MgdHJ5IHRvIHNhbHZhZ2UKKwkgICAgIyB0aGUgc2l0dWF0aW9uOiBDb21waWxlIGEgc2VwYXJhdGUgcHJvZ3JhbSBmb3IgZWFjaCBsaWJyYXJ5LgorCSAgICBmb3IgaSBpbiAkZGVwbGliczsgZG8KKwkgICAgICBjYXNlICRpIGluCisJICAgICAgLWwqKQorCQlmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGkiCisJCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCQkkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0CisJCWlmICRMVENDICRMVENGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jICRpOyB0aGVuCisJCSAgbGRkX291dHB1dD1gbGRkIGNvbmZ0ZXN0YAorCQkgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkJICAgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCQkgICAgKiIgJGkgIiopCisJCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorCQkgICAgICBpPSIiCisJCSAgICAgIDs7CisJCSAgICBlc2FjCisJCSAgZmkKKwkJICBpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCisJCSAgICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJICAgIGRlcGxpYl9tYXRjaGVzPWBldmFsICJcXCRFQ0hPIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiImAKKwkJICAgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0CisJCSAgICBkZXBsaWJfbWF0Y2g9JDEKKwkJICAgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMCA7IHRoZW4KKwkJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCSAgICBlbHNlCisJCSAgICAgIGRyb3BwZWRkZXBzPXllcworCQkgICAgICBlY2hvCisJCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogZHluYW1pYyBsaW5rZXIgZG9lcyBub3QgYWNjZXB0IG5lZWRlZCBsaWJyYXJ5ICRpLiIKKwkJICAgICAgZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJICAgICAgZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJICAgICAgZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQkgICAgICBlY2hvICIqKiogYmVjYXVzZSBhIHRlc3RfY29tcGlsZSBkaWQgcmV2ZWFsIHRoYXQgdGhlIGxpbmtlciBkaWQgbm90IHVzZSB0aGlzIG9uZSIKKwkJICAgICAgZWNobyAiKioqIGFzIGEgZHluYW1pYyBkZXBlbmRlbmN5IHRoYXQgcHJvZ3JhbXMgY2FuIGdldCByZXNvbHZlZCB3aXRoIGF0IHJ1bnRpbWUuIgorCQkgICAgZmkKKwkJICBmaQorCQllbHNlCisJCSAgZHJvcHBlZGRlcHM9eWVzCisJCSAgZWNobworCQkgICRFQ0hPICIqKiogV2FybmluZyEgIExpYnJhcnkgJGkgaXMgbmVlZGVkIGJ5IHRoaXMgbGlicmFyeSBidXQgSSB3YXMgbm90IGFibGUgdG8iCisJCSAgZWNobyAiKioqIG1ha2UgaXQgbGluayBpbiEgIFlvdSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBpdCBvciBzb21lIgorCQkgIGVjaG8gIioqKiBsaWJyYXJ5IHRoYXQgaXQgZGVwZW5kcyBvbiBiZWZvcmUgdGhpcyBsaWJyYXJ5IHdpbGwgYmUgZnVsbHkiCisJCSAgZWNobyAiKioqIGZ1bmN0aW9uYWwuICBJbnN0YWxsaW5nIGl0IGJlZm9yZSBjb250aW51aW5nIHdvdWxkIGJlIGV2ZW4gYmV0dGVyLiIKKwkJZmkKKwkJOzsKKwkgICAgICAqKQorCQluZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKwkJOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgIGZpCisJICA7OworCWZpbGVfbWFnaWMqKQorCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKwkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDEgXCguKlwpImAKKwkgIGZvciBhX2RlcGxpYiBpbiAkZGVwbGliczsgZG8KKwkgICAgY2FzZSAkYV9kZXBsaWIgaW4KKwkgICAgLWwqKQorCSAgICAgIGZ1bmNfc3RyaXBuYW1lIC1sICcnICIkYV9kZXBsaWIiCisJICAgICAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkJKiIgJGFfZGVwbGliICIqKQorCQkgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKwkJICBhX2RlcGxpYj0iIgorCQkgIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KKwkJICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVbLi1dKiAyPi9kZXYvbnVsbGAKKwkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCisJCSAgICAgICMgRm9sbG93IHNvZnQgbGlua3MuCisJCSAgICAgIGlmIGxzIC1sTGQgIiRwb3RlbnRfbGliIiAyPi9kZXYvbnVsbCB8CisJCQkgJEdSRVAgIiAtPiAiID4vZGV2L251bGw7IHRoZW4KKwkJCWNvbnRpbnVlCisJCSAgICAgIGZpCisJCSAgICAgICMgVGhlIHN0YXRlbWVudCBhYm92ZSB0cmllcyB0byBhdm9pZCBlbnRlcmluZyBhbgorCQkgICAgICAjIGVuZGxlc3MgbG9vcCBiZWxvdywgaW4gY2FzZSBvZiBjeWNsaWMgbGlua3MuCisJCSAgICAgICMgV2UgbWlnaHQgc3RpbGwgZW50ZXIgYW4gZW5kbGVzcyBsb29wLCBzaW5jZSBhIGxpbmsKKwkJICAgICAgIyBsb29wIGNhbiBiZSBjbG9zZWQgd2hpbGUgd2UgZm9sbG93IGxpbmtzLAorCQkgICAgICAjIGJ1dCBzbyB3aGF0PworCQkgICAgICBwb3RsaWI9IiRwb3RlbnRfbGliIgorCQkgICAgICB3aGlsZSB0ZXN0IC1oICIkcG90bGliIiAyPi9kZXYvbnVsbDsgZG8KKwkJCXBvdGxpYmxpbms9YGxzIC1sZCAkcG90bGliIHwgJHtTRUR9ICdzLy4qIC0+IC8vJ2AKKwkJCWNhc2UgJHBvdGxpYmxpbmsgaW4KKwkJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgcG90bGliPSIkcG90bGlibGluayI7OworCQkJKikgcG90bGliPWAkRUNITyAiJHBvdGxpYiIgfCAkU0VEICdzLFteL10qJCwsJ2AiJHBvdGxpYmxpbmsiOzsKKwkJCWVzYWMKKwkJICAgICAgZG9uZQorCQkgICAgICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcIlwkcG90bGliXCIgMj4vZGV2L251bGwgfAorCQkJICRTRUQgLWUgMTBxIHwKKwkJCSAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkJbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCQkJYV9kZXBsaWI9IiIKKwkJCWJyZWFrIDIKKwkJICAgICAgZmkKKwkJICBkb25lCisJCWRvbmUKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJCWRyb3BwZWRkZXBzPXllcworCQllY2hvCisJCSRFQ0hPICIqKiogV2FybmluZzogbGlua2VyIHBhdGggZG9lcyBub3QgaGF2ZSByZWFsIGZpbGUgZm9yIGxpYnJhcnkgJGFfZGVwbGliLiIKKwkJZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQllY2hvICIqKiogYmVjYXVzZSBJIGRpZCBjaGVjayB0aGUgbGlua2VyIHBhdGggbG9va2luZyBmb3IgYSBmaWxlIHN0YXJ0aW5nIgorCQlpZiB0ZXN0IC16ICIkcG90bGliIiA7IHRoZW4KKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYnV0IG5vIGNhbmRpZGF0ZXMgd2VyZSBmb3VuZC4gKC4uLmZvciBmaWxlIG1hZ2ljIHRlc3QpIgorCQllbHNlCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGFuZCBub25lIG9mIHRoZSBjYW5kaWRhdGVzIHBhc3NlZCBhIGZpbGUgZm9ybWF0IHRlc3QiCisJCSAgJEVDSE8gIioqKiB1c2luZyBhIGZpbGUgbWFnaWMuIExhc3QgZmlsZSBjaGVja2VkOiAkcG90bGliIgorCQlmaQorCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICAjIEFkZCBhIC1MIGFyZ3VtZW50LgorCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKwkgICAgICA7OworCSAgICBlc2FjCisJICBkb25lICMgR29uZSB0aHJvdWdoIGFsbCBkZXBsaWJzLgorCSAgOzsKKwltYXRjaF9wYXR0ZXJuKikKKwkgIHNldCBkdW1teSAkZGVwbGlic19jaGVja19tZXRob2Q7IHNoaWZ0CisJICBtYXRjaF9wYXR0ZXJuX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCisJICBmb3IgYV9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJICAgIGNhc2UgJGFfZGVwbGliIGluCisJICAgIC1sKikKKwkgICAgICBmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGFfZGVwbGliIgorCSAgICAgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICAgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkJY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJCSoiICRhX2RlcGxpYiAiKikKKwkJICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJCSAgYV9kZXBsaWI9IiIKKwkJICA7OworCQllc2FjCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorCQlsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCisJCSAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lWy4tXSogMj4vZGV2L251bGxgCisJCSAgZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbworCQkgICAgcG90bGliPSIkcG90ZW50X2xpYiIgIyBzZWUgc3ltbGluay1jaGVjayBhYm92ZSBpbiBmaWxlX21hZ2ljIHRlc3QKKwkJICAgIGlmIGV2YWwgIlwkRUNITyBcIiRwb3RlbnRfbGliXCIiIDI+L2Rldi9udWxsIHwgJFNFRCAxMHEgfCBcCisJCSAgICAgICAkRUdSRVAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJCSAgICAgIGFfZGVwbGliPSIiCisJCSAgICAgIGJyZWFrIDIKKwkJICAgIGZpCisJCSAgZG9uZQorCQlkb25lCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorCQlkcm9wcGVkZGVwcz15ZXMKKwkJZWNobworCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpbmtlciBwYXRoIGRvZXMgbm90IGhhdmUgcmVhbCBmaWxlIGZvciBsaWJyYXJ5ICRhX2RlcGxpYi4iCisJCWVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJZWNobyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKKwkJaWYgdGVzdCAteiAiJHBvdGxpYiIgOyB0aGVuCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgcmVnZXggcGF0dGVybiB0ZXN0KSIKKwkJZWxzZQorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgorCQkgICRFQ0hPICIqKiogdXNpbmcgYSByZWdleCBwYXR0ZXJuLiBMYXN0IGZpbGUgY2hlY2tlZDogJHBvdGxpYiIKKwkJZmkKKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgICopCisJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KKwkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KKwkgIDs7CisJbm9uZSB8IHVua25vd24gfCAqKQorCSAgbmV3ZGVwbGlicz0iIgorCSAgdG1wX2RlcGxpYnM9YCRFQ0hPICIgJGRlcGxpYnMiIHwgJFNFRCAncy8gLWxjJC8vOyBzLyAtW0xSXVteIF0qLy9nJ2AKKwkgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkgICAgZm9yIGkgaW4gJHByZWRlcHMgJHBvc3RkZXBzIDsgZG8KKwkgICAgICAjIGNhbid0IHVzZSBYc2VkIGJlbG93LCBiZWNhdXNlICRpIG1pZ2h0IGNvbnRhaW4gJy8nCisJICAgICAgdG1wX2RlcGxpYnM9YCRFQ0hPICIgJHRtcF9kZXBsaWJzIiB8ICRTRUQgInMsJGksLCJgCisJICAgIGRvbmUKKwkgIGZpCisJICBjYXNlICR0bXBfZGVwbGlicyBpbgorCSAgKlshXAlcIF0qKQorCSAgICBlY2hvCisJICAgIGlmIHRlc3QgIlgkZGVwbGlic19jaGVja19tZXRob2QiID0gIlhub25lIjsgdGhlbgorCSAgICAgIGVjaG8gIioqKiBXYXJuaW5nOiBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHBsYXRmb3JtLiIKKwkgICAgZWxzZQorCSAgICAgIGVjaG8gIioqKiBXYXJuaW5nOiBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgbm90IGtub3duIHRvIGJlIHN1cHBvcnRlZC4iCisJICAgIGZpCisJICAgIGVjaG8gIioqKiBBbGwgZGVjbGFyZWQgaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIGJlaW5nIGRyb3BwZWQuIgorCSAgICBkcm9wcGVkZGVwcz15ZXMKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCXZlcnN1ZmZpeD0kdmVyc3VmZml4X3NhdmUKKwltYWpvcj0kbWFqb3Jfc2F2ZQorCXJlbGVhc2U9JHJlbGVhc2Vfc2F2ZQorCWxpYm5hbWU9JGxpYm5hbWVfc2F2ZQorCW5hbWU9JG5hbWVfc2F2ZQorCisJY2FzZSAkaG9zdCBpbgorCSotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkgICMgT24gUmhhcHNvZHkgcmVwbGFjZSB0aGUgQyBsaWJyYXJ5IHdpdGggdGhlIFN5c3RlbSBmcmFtZXdvcmsKKwkgIG5ld2RlcGxpYnM9YCRFQ0hPICIgJG5ld2RlcGxpYnMiIHwgJFNFRCAncy8gLWxjIC8gU3lzdGVtLmx0ZnJhbWV3b3JrIC8nYAorCSAgOzsKKwllc2FjCisKKwlpZiB0ZXN0ICIkZHJvcHBlZGRlcHMiID0geWVzOyB0aGVuCisJICBpZiB0ZXN0ICIkbW9kdWxlIiA9IHllczsgdGhlbgorCSAgICBlY2hvCisJICAgIGVjaG8gIioqKiBXYXJuaW5nOiBsaWJ0b29sIGNvdWxkIG5vdCBzYXRpc2Z5IGFsbCBkZWNsYXJlZCBpbnRlci1saWJyYXJ5IgorCSAgICAkRUNITyAiKioqIGRlcGVuZGVuY2llcyBvZiBtb2R1bGUgJGxpYm5hbWUuICBUaGVyZWZvcmUsIGxpYnRvb2wgd2lsbCBjcmVhdGUiCisJICAgIGVjaG8gIioqKiBhIHN0YXRpYyBtb2R1bGUsIHRoYXQgc2hvdWxkIHdvcmsgYXMgbG9uZyBhcyB0aGUgZGxvcGVuaW5nIgorCSAgICBlY2hvICIqKiogYXBwbGljYXRpb24gaXMgbGlua2VkIHdpdGggdGhlIC1kbG9wZW4gZmxhZy4iCisJICAgIGlmIHRlc3QgLXogIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisJICAgICAgZWNobworCSAgICAgIGVjaG8gIioqKiBIb3dldmVyLCB0aGlzIHdvdWxkIG9ubHkgd29yayBpZiBsaWJ0b29sIHdhcyBhYmxlIHRvIGV4dHJhY3Qgc3ltYm9sIgorCSAgICAgIGVjaG8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgXGBubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCisJICAgICAgZWNobyAiKioqIG5vdCBmaW5kIHN1Y2ggYSBwcm9ncmFtLiAgU28sIHRoaXMgbW9kdWxlIGlzIHByb2JhYmx5IHVzZWxlc3MuIgorCSAgICAgIGVjaG8gIioqKiBcYG5tJyBmcm9tIEdOVSBiaW51dGlscyBhbmQgYSBmdWxsIHJlYnVpbGQgbWF5IGhlbHAuIgorCSAgICBmaQorCSAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KKwkgICAgICBvbGRsaWJzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorCSAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1tb2R1bGUKKwkgICAgICBidWlsZF9vbGRfbGlicz15ZXMKKwkgICAgZWxzZQorCSAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICBmaQorCSAgZWxzZQorCSAgICBlY2hvICIqKiogVGhlIGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIHRoYXQgaGF2ZSBiZWVuIGRyb3BwZWQgaGVyZSB3aWxsIGJlIgorCSAgICBlY2hvICIqKiogYXV0b21hdGljYWxseSBhZGRlZCB3aGVuZXZlciBhIHByb2dyYW0gaXMgbGlua2VkIHdpdGggdGhpcyBsaWJyYXJ5IgorCSAgICBlY2hvICIqKiogb3IgaXMgZGVjbGFyZWQgdG8gLWRsb3BlbiBpdC4iCisKKwkgICAgaWYgdGVzdCAiJGFsbG93X3VuZGVmaW5lZCIgPSBubzsgdGhlbgorCSAgICAgIGVjaG8KKwkgICAgICBlY2hvICIqKiogU2luY2UgdGhpcyBsaWJyYXJ5IG11c3Qgbm90IGNvbnRhaW4gdW5kZWZpbmVkIHN5bWJvbHMsIgorCSAgICAgIGVjaG8gIioqKiBiZWNhdXNlIGVpdGhlciB0aGUgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCB0aGVtIG9yIgorCSAgICAgIGVjaG8gIioqKiBpdCB3YXMgZXhwbGljaXRseSByZXF1ZXN0ZWQgd2l0aCAtbm8tdW5kZWZpbmVkLCIKKwkgICAgICBlY2hvICIqKiogbGlidG9vbCB3aWxsIG9ubHkgY3JlYXRlIGEgc3RhdGljIHZlcnNpb24gb2YgaXQuIgorCSAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgorCQlvbGRsaWJzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorCQlidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCisJCWJ1aWxkX29sZF9saWJzPXllcworCSAgICAgIGVsc2UKKwkJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgICAgZmkKKwkgICAgZmkKKwkgIGZpCisJZmkKKwkjIERvbmUgY2hlY2tpbmcgZGVwbGlicyEKKwlkZXBsaWJzPSRuZXdkZXBsaWJzCisgICAgICBmaQorICAgICAgIyBUaW1lIHRvIGNoYW5nZSBhbGwgb3VyICJmb28ubHRmcmFtZXdvcmsiIHN0dWZmIGJhY2sgdG8gIi1mcmFtZXdvcmsgZm9vIgorICAgICAgY2FzZSAkaG9zdCBpbgorCSotKi1kYXJ3aW4qKQorCSAgbmV3ZGVwbGlicz1gJEVDSE8gIiAkbmV3ZGVwbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCSAgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9YCRFQ0hPICIgJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJICBkZXBsaWJzPWAkRUNITyAiICRkZXBsaWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJICA7OworICAgICAgZXNhYworCisgICAgICAjIG1vdmUgbGlicmFyeSBzZWFyY2ggcGF0aHMgdGhhdCBjb2luY2lkZSB3aXRoIHBhdGhzIHRvIG5vdCB5ZXQKKyAgICAgICMgaW5zdGFsbGVkIGxpYnJhcmllcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaWJyYXJ5IHNlYXJjaCBsaXN0CisgICAgICBuZXdfbGlicz0KKyAgICAgIGZvciBwYXRoIGluICRub3RpbnN0X3BhdGg7IGRvCisJY2FzZSAiICRuZXdfbGlicyAiIGluCisJKiIgLUwkcGF0aC8kb2JqZGlyICIqKSA7OworCSopCisJICBjYXNlICIgJGRlcGxpYnMgIiBpbgorCSAgKiIgLUwkcGF0aC8kb2JqZGlyICIqKQorCSAgICBuZXdfbGlicz0iJG5ld19saWJzIC1MJHBhdGgvJG9iamRpciIgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KKwljYXNlICRkZXBsaWIgaW4KKwktTCopCisJICBjYXNlICIgJG5ld19saWJzICIgaW4KKwkgICoiICRkZXBsaWIgIiopIDs7CisJICAqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisJICBlc2FjCisJICA7OworCSopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBkZXBsaWJzPSIkbmV3X2xpYnMiCisKKyAgICAgICMgQWxsIHRoZSBsaWJyYXJ5LXNwZWNpZmljIHZhcmlhYmxlcyAoaW5zdGFsbF9saWJkaXIgaXMgc2V0IGFib3ZlKS4KKyAgICAgIGxpYnJhcnlfbmFtZXM9CisgICAgICBvbGRfbGlicmFyeT0KKyAgICAgIGRsbmFtZT0KKworICAgICAgIyBUZXN0IGFnYWluLCB3ZSBtYXkgaGF2ZSBkZWNpZGVkIG5vdCB0byBidWlsZCBpdCBhbnkgbW9yZQorICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKwlpZiB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiA9IHllczsgdGhlbgorCSAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRocworCSAgaGFyZGNvZGVfbGliZGlycz0KKwkgIGRlcF9ycGF0aD0KKwkgIHJwYXRoPSIkZmluYWxpemVfcnBhdGgiCisJICB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rICYmIHJwYXRoPSIkY29tcGlsZV9ycGF0aCRycGF0aCIKKwkgIGZvciBsaWJkaXIgaW4gJHJwYXRoOyBkbworCSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKwkJaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJCSAgaGFyZGNvZGVfbGliZGlycz0iJGxpYmRpciIKKwkJZWxzZQorCQkgICMgSnVzdCBhY2N1bXVsYXRlIHRoZSB1bmlxdWUgbGliZGlycy4KKwkJICBjYXNlICRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBpbgorCQkgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKKwkJICAgIDs7CisJCSAgKikKKwkJICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorCQkgICAgOzsKKwkJICBlc2FjCisJCWZpCisJICAgICAgZWxzZQorCQlldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJCWRlcF9ycGF0aD0iJGRlcF9ycGF0aCAkZmxhZyIKKwkgICAgICBmaQorCSAgICBlbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwkgICAgICBjYXNlICIkcGVybV9ycGF0aCAiIGluCisJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgICAqKSBwZXJtX3JwYXRoPSIkcGVybV9ycGF0aCAkbGliZGlyIiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGRvbmUKKwkgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCisJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKwkgICAgIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCSAgICBsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorCSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCI7IHRoZW4KKwkgICAgICBldmFsIGRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkXCIKKwkgICAgZWxzZQorCSAgICAgIGV2YWwgZGVwX3JwYXRoPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCSAgICBmaQorCSAgZmkKKwkgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHBlcm1fcnBhdGgiOyB0aGVuCisJICAgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCisJICAgIHJwYXRoPQorCSAgICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbworCSAgICAgIHJwYXRoPSIkcnBhdGgkZGlyOiIKKwkgICAgZG9uZQorCSAgICBldmFsICIkcnVucGF0aF92YXI9JyRycGF0aFwkJHJ1bnBhdGhfdmFyJzsgZXhwb3J0ICRydW5wYXRoX3ZhciIKKwkgIGZpCisJICB0ZXN0IC1uICIkZGVwX3JwYXRoIiAmJiBkZXBsaWJzPSIkZGVwX3JwYXRoICRkZXBsaWJzIgorCWZpCisKKwlzaGxpYnBhdGg9IiRmaW5hbGl6ZV9zaGxpYnBhdGgiCisJdGVzdCAiJG1vZGUiICE9IHJlbGluayAmJiBzaGxpYnBhdGg9IiRjb21waWxlX3NobGlicGF0aCRzaGxpYnBhdGgiCisJaWYgdGVzdCAtbiAiJHNobGlicGF0aCI7IHRoZW4KKwkgIGV2YWwgIiRzaGxpYnBhdGhfdmFyPSckc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3Zhcic7IGV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKKwlmaQorCisJIyBHZXQgdGhlIHJlYWwgYW5kIGxpbmsgbmFtZXMgb2YgdGhlIGxpYnJhcnkuCisJZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKKwlldmFsIGxpYnJhcnlfbmFtZXM9XCIkbGlicmFyeV9uYW1lc19zcGVjXCIKKwlzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXMKKwlzaGlmdAorCXJlYWxuYW1lPSIkMSIKKwlzaGlmdAorCisJaWYgdGVzdCAtbiAiJHNvbmFtZV9zcGVjIjsgdGhlbgorCSAgZXZhbCBzb25hbWU9XCIkc29uYW1lX3NwZWNcIgorCWVsc2UKKwkgIHNvbmFtZT0iJHJlYWxuYW1lIgorCWZpCisJaWYgdGVzdCAteiAiJGRsbmFtZSI7IHRoZW4KKwkgIGRsbmFtZT0kc29uYW1lCisJZmkKKworCWxpYj0iJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lIgorCWxpbmtuYW1lcz0KKwlmb3IgbGluaworCWRvCisJICBsaW5rbmFtZXM9IiRsaW5rbmFtZXMgJGxpbmsiCisJZG9uZQorCisJIyBVc2Ugc3RhbmRhcmQgb2JqZWN0cyBpZiB0aGV5IGFyZSBwaWMKKwl0ZXN0IC16ICIkcGljX2ZsYWciICYmIGxpYm9ianM9YCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCisJdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKworCWRlbGZpbGVzPQorCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICRvcHRfZHJ5X3J1biB8fCBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cCIKKwkgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS51ZXhwIgorCSAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkZXhwb3J0X3N5bWJvbHMiCisJZmkKKworCW9yaWdfZXhwb3J0X3N5bWJvbHM9CisJY2FzZSAkaG9zdF9vcyBpbgorCWN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkgICAgIyBleHBvcnRpbmcgdXNpbmcgdXNlciBzdXBwbGllZCBzeW1maWxlCisJICAgIGlmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiAhPSB4RVhQT1JUUzsgdGhlbgorCSAgICAgICMgYW5kIGl0J3MgTk9UIGFscmVhZHkgYSAuZGVmIGZpbGUuIE11c3QgZmlndXJlIG91dAorCSAgICAgICMgd2hpY2ggb2YgdGhlIGdpdmVuIHN5bWJvbHMgYXJlIGRhdGEgc3ltYm9scyBhbmQgdGFnCisJICAgICAgIyB0aGVtIGFzIHN1Y2guIFNvLCB0cmlnZ2VyIHVzZSBvZiBleHBvcnRfc3ltYm9sc19jbWRzLgorCSAgICAgICMgZXhwb3J0X3N5bWJvbHMgZ2V0cyByZWFzc2lnbmVkIGluc2lkZSB0aGUgInByZXBhcmUKKwkgICAgICAjIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMiIGlmIHN0YXRlbWVudCwgc28gdGhlCisJICAgICAgIyBpbmNsdWRlX2V4cHN5bXMgbG9naWMgc3RpbGwgd29ya3MuCisJICAgICAgb3JpZ19leHBvcnRfc3ltYm9scz0iJGV4cG9ydF9zeW1ib2xzIgorCSAgICAgIGV4cG9ydF9zeW1ib2xzPQorCSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKwkgICAgZmkKKwkgIGZpCisJICA7OworCWVzYWMKKworCSMgUHJlcGFyZSB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzCisJaWYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgaWYgdGVzdCAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgPSB5ZXMgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIgorCSAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwIgorCSAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRleHBvcnRfc3ltYm9scworCSAgICBjbWRzPSRleHBvcnRfc3ltYm9sc19jbWRzCisJICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworCSAgICBmb3IgY21kIGluICRjbWRzOyBkbworCSAgICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICAgIGV2YWwgY21kPVwiJGNtZFwiCisJICAgICAgZnVuY19sZW4gIiAkY21kIgorCSAgICAgIGxlbj0kZnVuY19sZW5fcmVzdWx0CisJICAgICAgaWYgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisJCWZ1bmNfc2hvd19ldmFsICIkY21kIiAnZXhpdCAkPycKKwkJc2tpcHBlZF9leHBvcnQ9ZmFsc2UKKwkgICAgICBlbHNlCisJCSMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBleGVjdXRlIGluIG9uZSBzdGVwLgorCQlmdW5jX3ZlcmJvc2UgInVzaW5nIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUgZm9yIGV4cG9ydCBsaXN0Li4uIgorCQlza2lwcGVkX2V4cG9ydD06CisJCSMgQnJlYWsgb3V0IGVhcmx5LCBvdGhlcndpc2Ugc2tpcHBlZF9leHBvcnQgbWF5IGJlCisJCSMgc2V0IHRvIGZhbHNlIGJ5IGEgbGF0ZXIgYnV0IHNob3J0ZXIgY21kLgorCQlicmVhaworCSAgICAgIGZpCisJICAgIGRvbmUKKwkgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IjsgdGhlbgorCSAgICAgIGZ1bmNfc2hvd19ldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRleHBvcnRfc3ltYm9scyIgPiAiJHtleHBvcnRfc3ltYm9sc31UIicKKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJE1WICIke2V4cG9ydF9zeW1ib2xzfVQiICIkZXhwb3J0X3N5bWJvbHMiJworCSAgICBmaQorCSAgZmkKKwlmaQorCisJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgdG1wX2V4cG9ydF9zeW1ib2xzPSIkZXhwb3J0X3N5bWJvbHMiCisJICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSIkb3JpZ19leHBvcnRfc3ltYm9scyIKKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICckRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiJworCWZpCisKKwlpZiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgIyBUaGUgZ2l2ZW4gZXhwb3J0c19zeW1ib2xzIGZpbGUgaGFzIHRvIGJlIGZpbHRlcmVkLCBzbyBmaWx0ZXIgaXQuCisJICBmdW5jX3ZlcmJvc2UgImZpbHRlciBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYScgdG8gdGFnIERBVEEgZXhwb3J0cyIKKwkgICMgRklYTUU6ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciBwb3RlbnRpYWxseSBjb250YWlucyBsb3RzIG9mCisJICAjICdzJyBjb21tYW5kcyB3aGljaCBub3QgYWxsIHNlZHMgY2FuIGhhbmRsZS4gR05VIHNlZCBzaG91bGQgYmUgZmluZQorCSAgIyB0aG91Z2guIEFsc28sIHRoZSBmaWx0ZXIgc2NhbGVzIHN1cGVybGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mCisJICAjIGdsb2JhbCB2YXJpYWJsZXMuIGpvaW4oMSkgd291bGQgYmUgbmljZSBoZXJlLCBidXQgdW5mb3J0dW5hdGVseQorCSAgIyBpc24ndCBhIGJsZXNzZWQgdG9vbC4KKwkgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1lICcvWyAsXURBVEEvIWQ7cyxcKC4qXClcKFsgXCxdLipcKSxzfF5cMSR8XDFcMnwsJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlcgorCSAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgorCSAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmCisJICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scworCWZpCisKKwl0bXBfZGVwbGlicz0KKwlmb3IgdGVzdF9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJICBjYXNlICIgJGNvbnZlbmllbmNlICIgaW4KKwkgICoiICR0ZXN0X2RlcGxpYiAiKikgOzsKKwkgICopCisJICAgIHRtcF9kZXBsaWJzPSIkdG1wX2RlcGxpYnMgJHRlc3RfZGVwbGliIgorCSAgICA7OworCSAgZXNhYworCWRvbmUKKwlkZXBsaWJzPSIkdG1wX2RlcGxpYnMiCisKKwlpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiICYmCisJICAgIHRlc3QgIiRjb21waWxlcl9uZWVkc19vYmplY3QiID0geWVzICYmCisJICAgIHRlc3QgLXogIiRsaWJvYmpzIjsgdGhlbgorCSAgICAjIGV4dHJhY3QgdGhlIGFyY2hpdmVzLCBzbyB3ZSBoYXZlIG9iamVjdHMgdG8gbGlzdC4KKwkgICAgIyBUT0RPOiBjb3VsZCBvcHRpbWl6ZSB0aGlzIHRvIGp1c3QgZXh0cmFjdCBvbmUgYXJjaGl2ZS4KKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CisJICBmaQorCSAgaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICBzYXZlX2xpYm9ianM9JGxpYm9ianMKKwkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisJICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisJICBlbHNlCisJICAgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICAgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorCisJICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRjb252ZW5pZW5jZQorCSAgICBsaWJvYmpzPSIkbGlib2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKwkgIGZpCisJZmkKKworCWlmIHRlc3QgIiR0aHJlYWRfc2FmZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJHRocmVhZF9zYWZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgIGV2YWwgZmxhZz1cIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWNcIgorCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRmbGFnIgorCWZpCisKKwkjIE1ha2UgYSBiYWNrdXAgb2YgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgd2hlbiByZWxpbmtpbmcKKwlpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VSAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VSknIHx8IGV4aXQgJD8KKwlmaQorCisJIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgorCWlmIHRlc3QgIiRtb2R1bGUiID0geWVzICYmIHRlc3QgLW4gIiRtb2R1bGVfY21kcyIgOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRtb2R1bGVfZXhwc3ltX2NtZHMiOyB0aGVuCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJG1vZHVsZV9leHBzeW1fY21kc1wiCisJICAgIGNtZHM9JG1vZHVsZV9leHBzeW1fY21kcworCSAgZWxzZQorCSAgICBldmFsIHRlc3RfY21kcz1cIiRtb2R1bGVfY21kc1wiCisJICAgIGNtZHM9JG1vZHVsZV9jbWRzCisJICBmaQorCWVsc2UKKwkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiOyB0aGVuCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfZXhwc3ltX2NtZHNcIgorCSAgICBjbWRzPSRhcmNoaXZlX2V4cHN5bV9jbWRzCisJICBlbHNlCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfY21kc1wiCisJICAgIGNtZHM9JGFyY2hpdmVfY21kcworCSAgZmkKKwlmaQorCisJaWYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJgorCSAgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIgJiYKKwkgICBsZW49JGZ1bmNfbGVuX3Jlc3VsdCAmJgorCSAgIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgorCSAgOgorCWVsc2UKKwkgICMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBsaW5rIGluIG9uZSBzdGVwLCBsaW5rIHBpZWNld2lzZQorCSAgIyBvciwgaWYgdXNpbmcgR05VIGxkIGFuZCBza2lwcGVkX2V4cG9ydCBpcyBub3QgOiwgdXNlIGEgbGlua2VyCisJICAjIHNjcmlwdC4KKworCSAgIyBTYXZlIHRoZSB2YWx1ZSBvZiAkb3V0cHV0IGFuZCAkbGlib2JqcyBiZWNhdXNlIHdlIHdhbnQgdG8KKwkgICMgdXNlIHRoZW0gbGF0ZXIuICBJZiB3ZSBoYXZlIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCB3ZQorCSAgIyB3YW50IHRvIHVzZSBzYXZlX2xpYm9ianMgYXMgaXQgd2FzIGJlZm9yZQorCSAgIyB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyB3YXMgZXhwYW5kZWQsIGJlY2F1c2Ugd2UgY2FuJ3QKKwkgICMgYXNzdW1lIHRoZSBsaW5rZXIgdW5kZXJzdGFuZHMgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMuCisJICAjIFRoaXMgbWF5IGhhdmUgdG8gYmUgcmV2aXNpdGVkLCBpbiBjYXNlIHRvbyBtYW55CisJICAjIGNvbnZlbmllbmNlIGxpYnJhcmllcyBnZXQgbGlua2VkIGluIGFuZCBlbmQgdXAgZXhjZWVkaW5nCisJICAjIHRoZSBzcGVjLgorCSAgaWYgdGVzdCAteiAiJGNvbnZlbmllbmNlIiB8fCB0ZXN0IC16ICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgIHNhdmVfbGlib2Jqcz0kbGlib2JqcworCSAgZmkKKwkgIHNhdmVfb3V0cHV0PSRvdXRwdXQKKwkgIGZ1bmNfYmFzZW5hbWUgIiRvdXRwdXQiCisJICBvdXRwdXRfbGE9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisKKwkgICMgQ2xlYXIgdGhlIHJlbG9hZGFibGUgb2JqZWN0IGNyZWF0aW9uIGNvbW1hbmQgcXVldWUgYW5kCisJICAjIGluaXRpYWxpemUgayB0byBvbmUuCisJICB0ZXN0X2NtZHM9CisJICBjb25jYXRfY21kcz0KKwkgIG9iamxpc3Q9CisJICBsYXN0X3JvYmo9CisJICBrPTEKKworCSAgaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisJICAgIG91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5sbmtzY3JpcHQKKwkgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBHTlUgbGQgc2NyaXB0OiAkb3V0cHV0IgorCSAgICBlY2hvICdJTlBVVCAoJyA+ICRvdXRwdXQKKwkgICAgZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzCisJICAgIGRvCisJICAgICAgJEVDSE8gIiRvYmoiID4+ICRvdXRwdXQKKwkgICAgZG9uZQorCSAgICBlY2hvICcpJyA+PiAkb3V0cHV0CisJICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJG91dHB1dCIKKwkgIGVsaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0ICJYJGZpbGVfbGlzdF9zcGVjIiAhPSBYOyB0aGVuCisJICAgIG91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5sbmsKKwkgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBsaW5rZXIgaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0IgorCSAgICA6ID4gJG91dHB1dAorCSAgICBzZXQgeCAkc2F2ZV9saWJvYmpzCisJICAgIHNoaWZ0CisJICAgIGZpcnN0b2JqPQorCSAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiA9IHllczsgdGhlbgorCSAgICAgIGZpcnN0b2JqPSIkMSAiCisJICAgICAgc2hpZnQKKwkgICAgZmkKKwkgICAgZm9yIG9iagorCSAgICBkbworCSAgICAgICRFQ0hPICIkb2JqIiA+PiAkb3V0cHV0CisJICAgIGRvbmUKKwkgICAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkb3V0cHV0IgorCSAgICBvdXRwdXQ9JGZpcnN0b2JqXCIkZmlsZV9saXN0X3NwZWMkb3V0cHV0XCIKKwkgIGVsc2UKKwkgICAgaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyI7IHRoZW4KKwkgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLi4uIgorCSAgICAgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAorCSAgICAgIGV2YWwgdGVzdF9jbWRzPVwiJHJlbG9hZF9jbWRzXCIKKwkgICAgICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiCisJICAgICAgbGVuMD0kZnVuY19sZW5fcmVzdWx0CisJICAgICAgbGVuPSRsZW4wCisKKwkgICAgICAjIExvb3Agb3ZlciB0aGUgbGlzdCBvZiBvYmplY3RzIHRvIGJlIGxpbmtlZC4KKwkgICAgICBmb3Igb2JqIGluICRzYXZlX2xpYm9ianMKKwkgICAgICBkbworCQlmdW5jX2xlbiAiICRvYmoiCisJCWZ1bmNfYXJpdGggJGxlbiArICRmdW5jX2xlbl9yZXN1bHQKKwkJbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQlpZiB0ZXN0ICJYJG9iamxpc3QiID0gWCB8fAorCQkgICB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiI7IHRoZW4KKwkJICBmdW5jX2FwcGVuZCBvYmpsaXN0ICIgJG9iaiIKKwkJZWxzZQorCQkgICMgVGhlIGNvbW1hbmQgJHRlc3RfY21kcyBpcyBhbG1vc3QgdG9vIGxvbmcsIGFkZCBhCisJCSAgIyBjb21tYW5kIHRvIHRoZSBxdWV1ZS4KKwkJICBpZiB0ZXN0ICIkayIgLWVxIDEgOyB0aGVuCisJCSAgICAjIFRoZSBmaXJzdCBmaWxlIGRvZXNuJ3QgaGF2ZSBhIHByZXZpb3VzIGNvbW1hbmQgdG8gYWRkLgorCQkgICAgcmVsb2FkX29ianM9JG9iamxpc3QKKwkJICAgIGV2YWwgY29uY2F0X2NtZHM9XCIkcmVsb2FkX2NtZHNcIgorCQkgIGVsc2UKKwkJICAgICMgQWxsIHN1YnNlcXVlbnQgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMgd2lsbCBsaW5rIGluCisJCSAgICAjIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgorCQkgICAgcmVsb2FkX29ianM9IiRvYmpsaXN0ICRsYXN0X3JvYmoiCisJCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc34kcmVsb2FkX2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKKwkJICBmaQorCQkgIGxhc3Rfcm9iaj0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAorCQkgIGZ1bmNfYXJpdGggJGsgKyAxCisJCSAgaz0kZnVuY19hcml0aF9yZXN1bHQKKwkJICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKwkJICBvYmpsaXN0PSIgJG9iaiIKKwkJICBmdW5jX2xlbiAiICRsYXN0X3JvYmoiCisJCSAgZnVuY19hcml0aCAkbGVuMCArICRmdW5jX2xlbl9yZXN1bHQKKwkJICBsZW49JGZ1bmNfYXJpdGhfcmVzdWx0CisJCWZpCisJICAgICAgZG9uZQorCSAgICAgICMgSGFuZGxlIHRoZSByZW1haW5pbmcgb2JqZWN0cyBieSBjcmVhdGluZyBvbmUgbGFzdAorCSAgICAgICMgcmVsb2FkYWJsZSBvYmplY3QgZmlsZS4gIEFsbCBzdWJzZXF1ZW50IHJlbG9hZGFibGUgb2JqZWN0CisJICAgICAgIyBmaWxlcyB3aWxsIGxpbmsgaW4gdGhlIGxhc3Qgb25lIGNyZWF0ZWQuCisJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CisJICAgICAgcmVsb2FkX29ianM9IiRvYmpsaXN0ICRsYXN0X3JvYmoiCisJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRyZWxvYWRfY21kc1wiCisJICAgICAgaWYgdGVzdCAtbiAiJGxhc3Rfcm9iaiI7IHRoZW4KKwkgICAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc31+XCRSTSAkbGFzdF9yb2JqXCIKKwkgICAgICBmaQorCSAgICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJG91dHB1dCIKKworCSAgICBlbHNlCisJICAgICAgb3V0cHV0PQorCSAgICBmaQorCisJICAgIGlmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCisJICAgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyIKKwkgICAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwIgorCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJGV4cG9ydF9zeW1ib2xzCisJICAgICAgbGlib2Jqcz0kb3V0cHV0CisJICAgICAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gY3JlYXRlIHRoZSBleHBvcnQgZmlsZS4KKwkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kcyRleHBvcnRfc3ltYm9sc19jbWRzXCIKKwkgICAgICBpZiB0ZXN0IC1uICIkbGFzdF9yb2JqIjsgdGhlbgorCQlldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc35cJFJNICRsYXN0X3JvYmpcIgorCSAgICAgIGZpCisJICAgIGZpCisKKwkgICAgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYKKwkgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIGEgdGVtcG9yYXJ5IHJlbG9hZGFibGUgb2JqZWN0IGZpbGU6ICRvdXRwdXQiCisKKwkgICAgIyBMb29wIHRocm91Z2ggdGhlIGNvbW1hbmRzIGdlbmVyYXRlZCBhYm92ZSBhbmQgZXhlY3V0ZSB0aGVtLgorCSAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwkgICAgZm9yIGNtZCBpbiAkY29uY2F0X2NtZHM7IGRvCisJICAgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgICAgJG9wdF9zaWxlbnQgfHwgeworCQkgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJGNtZCIKKwkJICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisJICAgICAgfQorCSAgICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kIiB8fCB7CisJCWx0X2V4aXQ9JD8KKworCQkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKwkJaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisJCSAgKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmIFwKKwkJICAgICRSTSAiJHtyZWFsbmFtZX1UIiAmJiBcCisJCSAgICAkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQorCQlmaQorCisJCWV4aXQgJGx0X2V4aXQKKwkgICAgICB9CisJICAgIGRvbmUKKwkgICAgSUZTPSIkc2F2ZV9pZnMiCisKKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgorCSAgICAgIGZ1bmNfc2hvd19ldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRleHBvcnRfc3ltYm9scyIgPiAiJHtleHBvcnRfc3ltYm9sc31UIicKKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJE1WICIke2V4cG9ydF9zeW1ib2xzfVQiICIkZXhwb3J0X3N5bWJvbHMiJworCSAgICBmaQorCSAgZmkKKworICAgICAgICAgIGlmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICAgICB0bXBfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKwkgICAgICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSIkb3JpZ19leHBvcnRfc3ltYm9scyIKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgICAgICAjIFRoZSBnaXZlbiBleHBvcnRzX3N5bWJvbHMgZmlsZSBoYXMgdG8gYmUgZmlsdGVyZWQsIHNvIGZpbHRlciBpdC4KKwkgICAgICBmdW5jX3ZlcmJvc2UgImZpbHRlciBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYScgdG8gdGFnIERBVEEgZXhwb3J0cyIKKwkgICAgICAjIEZJWE1FOiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgcG90ZW50aWFsbHkgY29udGFpbnMgbG90cyBvZgorCSAgICAgICMgJ3MnIGNvbW1hbmRzIHdoaWNoIG5vdCBhbGwgc2VkcyBjYW4gaGFuZGxlLiBHTlUgc2VkIHNob3VsZCBiZSBmaW5lCisJICAgICAgIyB0aG91Z2guIEFsc28sIHRoZSBmaWx0ZXIgc2NhbGVzIHN1cGVybGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mCisJICAgICAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKKwkgICAgICAjIGlzbid0IGEgYmxlc3NlZCB0b29sLgorCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1lICcvWyAsXURBVEEvIWQ7cyxcKC4qXClcKFsgXCxdLipcKSxzfF5cMSR8XDFcMnwsJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlcgorCSAgICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKKwkgICAgICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scworCSAgICBmaQorCSAgZmkKKworCSAgbGlib2Jqcz0kb3V0cHV0CisJICAjIFJlc3RvcmUgdGhlIHZhbHVlIG9mIG91dHB1dC4KKwkgIG91dHB1dD0kc2F2ZV9vdXRwdXQKKworCSAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIiAmJiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgIGV2YWwgbGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgorCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCSAgZmkKKwkgICMgRXhwYW5kIHRoZSBsaWJyYXJ5IGxpbmtpbmcgY29tbWFuZHMgYWdhaW4gdG8gcmVzZXQgdGhlCisJICAjIHZhbHVlIG9mICRsaWJvYmpzIGZvciBwaWVjZXdpc2UgbGlua2luZy4KKworCSAgIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgorCSAgaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJG1vZHVsZV9jbWRzIiA7IHRoZW4KKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgICAgIGNtZHM9JG1vZHVsZV9leHBzeW1fY21kcworCSAgICBlbHNlCisJICAgICAgY21kcz0kbW9kdWxlX2NtZHMKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkYXJjaGl2ZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgICBjbWRzPSRhcmNoaXZlX2V4cHN5bV9jbWRzCisJICAgIGVsc2UKKwkgICAgICBjbWRzPSRhcmNoaXZlX2NtZHMKKwkgICAgZmkKKwkgIGZpCisJZmkKKworCWlmIHRlc3QgLW4gIiRkZWxmaWxlcyI7IHRoZW4KKwkgICMgQXBwZW5kIHRoZSBjb21tYW5kIHRvIHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMgdG8gJGNtZHMuCisJICBldmFsIGNtZHM9XCJcJGNtZHN+XCRSTSAkZGVsZmlsZXNcIgorCWZpCisKKwkjIEFkZCBhbnkgb2JqZWN0cyBmcm9tIHByZWxvYWRlZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMKKwlpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KKwkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKworCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKKwkgIGxpYm9ianM9IiRsaWJvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorCSAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKwlmaQorCisJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJZm9yIGNtZCBpbiAkY21kczsgZG8KKwkgIElGUz0iJHNhdmVfaWZzIgorCSAgZXZhbCBjbWQ9XCIkY21kXCIKKwkgICRvcHRfc2lsZW50IHx8IHsKKwkgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkY21kIgorCSAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisJICB9CisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZCIgfHwgeworCSAgICBsdF9leGl0PSQ/CisKKwkgICAgIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CisJICAgIGlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorCSAgICAgICggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiBcCisJICAgICAgICAkUk0gIiR7cmVhbG5hbWV9VCIgJiYgXAorCQkkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQorCSAgICBmaQorCisJICAgIGV4aXQgJGx0X2V4aXQKKwkgIH0KKwlkb25lCisJSUZTPSIkc2F2ZV9pZnMiCisKKwkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKwlpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VCAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VCAmJiAkTVYgJHtyZWFsbmFtZX1VICRyZWFsbmFtZSknIHx8IGV4aXQgJD8KKworCSAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgICAgZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCisJICAgIGZpCisJICBmaQorCisJICBleGl0ICRFWElUX1NVQ0NFU1MKKwlmaQorCisJIyBDcmVhdGUgbGlua3MgdG8gdGhlIHJlYWwgbGlicmFyeS4KKwlmb3IgbGlua25hbWUgaW4gJGxpbmtuYW1lczsgZG8KKwkgIGlmIHRlc3QgIiRyZWFsbmFtZSIgIT0gIiRsaW5rbmFtZSI7IHRoZW4KKwkgICAgZnVuY19zaG93X2V2YWwgJyhjZCAiJG91dHB1dF9vYmpkaXIiICYmICRSTSAiJGxpbmtuYW1lIiAmJiAkTE5fUyAiJHJlYWxuYW1lIiAiJGxpbmtuYW1lIiknICdleGl0ICQ/JworCSAgZmkKKwlkb25lCisKKwkjIElmIC1tb2R1bGUgb3IgLWV4cG9ydC1keW5hbWljIHdhcyBzcGVjaWZpZWQsIHNldCB0aGUgZGxuYW1lLgorCWlmIHRlc3QgIiRtb2R1bGUiID0geWVzIHx8IHRlc3QgIiRleHBvcnRfZHluYW1pYyIgPSB5ZXM7IHRoZW4KKwkgICMgT24gYWxsIGtub3duIG9wZXJhdGluZyBzeXN0ZW1zLCB0aGVzZSBhcmUgaWRlbnRpY2FsLgorCSAgZGxuYW1lPSIkc29uYW1lIgorCWZpCisgICAgICBmaQorICAgICAgOzsKKworICAgIG9iaikKKyAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCisJZnVuY193YXJuaW5nICJcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisgICAgICBmaQorCisgICAgICBjYXNlICIgJGRlcGxpYnMiIGluCisgICAgICAqXCAtbCogfCAqXCAtTCopCisJZnVuY193YXJuaW5nICJcYC1sJyBhbmQgXGAtTCcgYXJlIGlnbm9yZWQgZm9yIG9iamVjdHMiIDs7CisgICAgICBlc2FjCisKKyAgICAgIHRlc3QgLW4gIiRycGF0aCIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcnBhdGgnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisKKyAgICAgIHRlc3QgLW4gIiR4cnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLVInIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisKKyAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCisgICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKworICAgICAgY2FzZSAkb3V0cHV0IGluCisgICAgICAqLmxvKQorCXRlc3QgLW4gIiRvYmpzJG9sZF9kZXBsaWJzIiAmJiBcCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgYnVpbGQgbGlicmFyeSBvYmplY3QgXGAkb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMiCisKKwlsaWJvYmo9JG91dHB1dAorCWZ1bmNfbG8ybyAiJGxpYm9iaiIKKwlvYmo9JGZ1bmNfbG8yb19yZXN1bHQKKwk7OworICAgICAgKikKKwlsaWJvYmo9CisJb2JqPSIkb3V0cHV0IgorCTs7CisgICAgICBlc2FjCisKKyAgICAgICMgRGVsZXRlIHRoZSBvbGQgb2JqZWN0cy4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJG9iaiAkbGlib2JqCisKKyAgICAgICMgT2JqZWN0cyBmcm9tIGNvbnZlbmllbmNlIGxpYnJhcmllcy4gIFRoaXMgYXNzdW1lcworICAgICAgIyBzaW5nbGUtdmVyc2lvbiBjb252ZW5pZW5jZSBsaWJyYXJpZXMuICBXaGVuZXZlciB3ZSBjcmVhdGUKKyAgICAgICMgZGlmZmVyZW50IG9uZXMgZm9yIFBJQy9ub24tUElDLCB0aGlzIHdlJ2xsIGhhdmUgdG8gZHVwbGljYXRlCisgICAgICAjIHRoZSBleHRyYWN0aW9uLgorICAgICAgcmVsb2FkX2NvbnZfb2Jqcz0KKyAgICAgIGdlbnRvcD0KKyAgICAgICMgcmVsb2FkX2NtZHMgcnVucyAkTEQgZGlyZWN0bHksIHNvIGxldCB1cyBnZXQgcmlkIG9mCisgICAgICAjIC1XbCBmcm9tIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIGFuZCBob3BlIHdlIGNhbiBnZXQgYnkgd2l0aAorICAgICAgIyB0dXJuaW5nIGNvbW1hIGludG8gc3BhY2UuLgorICAgICAgd2w9CisKKyAgICAgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICBldmFsIHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzPVwiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKwkgIHJlbG9hZF9jb252X29ianM9JHJlbG9hZF9vYmpzXCBgJEVDSE8gIiR0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncyIgfCAkU0VEICdzfCx8IHxnJ2AKKwllbHNlCisJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b2JqfXgiCisJICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKworCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGNvbnZlbmllbmNlCisJICByZWxvYWRfY29udl9vYmpzPSIkcmVsb2FkX29ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgQ3JlYXRlIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorICAgICAgcmVsb2FkX29ianM9IiRvYmpzJG9sZF9kZXBsaWJzICJgJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIi9cLiR7bGliZXh0fSQvZDsgL1wubGliJC9kOyAkbG8ybyIgfCAkTkwyU1BgIiAkcmVsb2FkX2NvbnZfb2JqcyIgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0CisKKyAgICAgIG91dHB1dD0iJG9iaiIKKyAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcmVsb2FkX2NtZHMiICdleGl0ICQ/JworCisgICAgICAjIEV4aXQgaWYgd2UgYXJlbid0IGRvaW5nIGEgbGlicmFyeSBvYmplY3QgZmlsZS4KKyAgICAgIGlmIHRlc3QgLXogIiRsaWJvYmoiOyB0aGVuCisJaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KKwkgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworCWZpCisKKwlleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllczsgdGhlbgorCWlmIHRlc3QgLW4gIiRnZW50b3AiOyB0aGVuCisJICBmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKKwlmaQorCisJIyBDcmVhdGUgYW4gaW52YWxpZCBsaWJ0b29sIG9iamVjdCBpZiBubyBQSUMsIHNvIHRoYXQgd2UgZG9uJ3QKKwkjIGFjY2lkZW50YWxseSBsaW5rIGl0IGludG8gYSBwcm9ncmFtLgorCSMgJHNob3cgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIKKwkjICRvcHRfZHJ5X3J1biB8fCBldmFsICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiIHx8IGV4aXQgJD8KKwlleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRwaWNfZmxhZyIgfHwgdGVzdCAiJHBpY19tb2RlIiAhPSBkZWZhdWx0OyB0aGVuCisJIyBPbmx5IGRvIGNvbW1hbmRzIGlmIHdlIHJlYWxseSBoYXZlIGRpZmZlcmVudCBQSUMgb2JqZWN0cy4KKwlyZWxvYWRfb2Jqcz0iJGxpYm9ianMgJHJlbG9hZF9jb252X29ianMiCisJb3V0cHV0PSIkbGlib2JqIgorCWZ1bmNfZXhlY3V0ZV9jbWRzICIkcmVsb2FkX2NtZHMiICdleGl0ICQ/JworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKKyAgICAgIGZpCisKKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgOzsKKworICAgIHByb2cpCisgICAgICBjYXNlICRob3N0IGluCisJKmN5Z3dpbiopIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG91dHB1dCIKKwkgICAgICAgICAgb3V0cHV0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuZXhlOzsKKyAgICAgIGVzYWMKKyAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvJyBpcyBpZ25vcmVkIGZvciBwcm9ncmFtcyIKKworICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIgorCisgICAgICB0ZXN0ICIkcHJlbG9hZCIgPSB5ZXMgXAorICAgICAgICAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0gdW5rbm93biBcCisJJiYgdGVzdCAiJGRsb3Blbl9zZWxmIiA9IHVua25vd24gXAorCSYmIHRlc3QgIiRkbG9wZW5fc2VsZl9zdGF0aWMiID0gdW5rbm93biAmJiBcCisJICBmdW5jX3dhcm5pbmcgIlxgTFRfSU5JVChbZGxvcGVuXSknIG5vdCB1c2VkLiBBc3N1bWluZyBubyBkbG9wZW4gc3VwcG9ydC4iCisKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkjIE9uIFJoYXBzb2R5IHJlcGxhY2UgdGhlIEMgbGlicmFyeSBpcyB0aGUgU3lzdGVtIGZyYW1ld29yaworCWNvbXBpbGVfZGVwbGlicz1gJEVDSE8gIiAkY29tcGlsZV9kZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKKwlmaW5hbGl6ZV9kZXBsaWJzPWAkRUNITyAiICRmaW5hbGl6ZV9kZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKKwk7OworICAgICAgZXNhYworCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAqLSotZGFyd2luKikKKwkjIERvbid0IGFsbG93IGxhenkgbGlua2luZywgaXQgYnJlYWtzIEMrKyBnbG9iYWwgY29uc3RydWN0b3JzCisJIyBCdXQgaXMgc3VwcG9zZWRseSBmaXhlZCBvbiAxMC40IG9yIGxhdGVyICh5YXkhKS4KKwlpZiB0ZXN0ICIkdGFnbmFtZSIgPSBDWFggOyB0aGVuCisJICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9IGluCisJICAgIDEwLlswMTIzXSkKKwkgICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJHt3bH0tYmluZF9hdF9sb2FkIgorCSAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICR7d2x9LWJpbmRfYXRfbG9hZCIKKwkgICAgOzsKKwkgIGVzYWMKKwlmaQorCSMgVGltZSB0byBjaGFuZ2UgYWxsIG91ciAiZm9vLmx0ZnJhbWV3b3JrIiBzdHVmZiBiYWNrIHRvICItZnJhbWV3b3JrIGZvbyIKKwljb21waWxlX2RlcGxpYnM9YCRFQ0hPICIgJGNvbXBpbGVfZGVwbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCWZpbmFsaXplX2RlcGxpYnM9YCRFQ0hPICIgJGZpbmFsaXplX2RlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwk7OworICAgICAgZXNhYworCisKKyAgICAgICMgbW92ZSBsaWJyYXJ5IHNlYXJjaCBwYXRocyB0aGF0IGNvaW5jaWRlIHdpdGggcGF0aHMgdG8gbm90IHlldAorICAgICAgIyBpbnN0YWxsZWQgbGlicmFyaWVzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpYnJhcnkgc2VhcmNoIGxpc3QKKyAgICAgIG5ld19saWJzPQorICAgICAgZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KKwljYXNlICIgJG5ld19saWJzICIgaW4KKwkqIiAtTCRwYXRoLyRvYmpkaXIgIiopIDs7CisJKikKKwkgIGNhc2UgIiAkY29tcGlsZV9kZXBsaWJzICIgaW4KKwkgICoiIC1MJHBhdGgvJG9iamRpciAiKikKKwkgICAgbmV3X2xpYnM9IiRuZXdfbGlicyAtTCRwYXRoLyRvYmpkaXIiIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGZvciBkZXBsaWIgaW4gJGNvbXBpbGVfZGVwbGliczsgZG8KKwljYXNlICRkZXBsaWIgaW4KKwktTCopCisJICBjYXNlICIgJG5ld19saWJzICIgaW4KKwkgICoiICRkZXBsaWIgIiopIDs7CisJICAqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisJICBlc2FjCisJICA7OworCSopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBjb21waWxlX2RlcGxpYnM9IiRuZXdfbGlicyIKKworCisgICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGNvbXBpbGVfZGVwbGlicyIKKyAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRmaW5hbGl6ZV9kZXBsaWJzIgorCisgICAgICBpZiB0ZXN0IC1uICIkcnBhdGgkeHJwYXRoIjsgdGhlbgorCSMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGFueSBycGF0aCBmbGFncywgdGhlbiBhZGQgdGhlbS4KKwlmb3IgbGliZGlyIGluICRycGF0aCAkeHJwYXRoOyBkbworCSAgIyBUaGlzIGlzIHRoZSBtYWdpYyB0byB1c2UgLXJwYXRoLgorCSAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiIDs7CisJICBlc2FjCisJZG9uZQorICAgICAgZmkKKworICAgICAgIyBOb3cgaGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aHMKKyAgICAgIHJwYXRoPQorICAgICAgaGFyZGNvZGVfbGliZGlycz0KKyAgICAgIGZvciBsaWJkaXIgaW4gJGNvbXBpbGVfcnBhdGggJGZpbmFsaXplX3JwYXRoOyBkbworCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisJICAgIGVsc2UKKwkgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJICAgICAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkgICAgICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCTs7CisJICAgICAgKikKKwkJaGFyZGNvZGVfbGliZGlycz0iJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCTs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZWxzZQorCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJICAgIHJwYXRoPSIkcnBhdGggJGZsYWciCisJICBmaQorCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCSAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIHBlcm1fcnBhdGg9IiRwZXJtX3JwYXRoICRsaWJkaXIiIDs7CisJICBlc2FjCisJZmkKKwljYXNlICRob3N0IGluCisJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKwkgIHRlc3RiaW5kaXI9YCR7RUNIT30gIiRsaWJkaXIiIHwgJHtTRUR9IC1lICdzKi9saWIkKi9iaW4qJ2AKKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorCSAgKiI6JGxpYmRpcjoiKikgOzsKKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSRsaWJkaXI7OworCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JGxpYmRpciI7OworCSAgZXNhYworCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisJICAqIjokdGVzdGJpbmRpcjoiKikgOzsKKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSR0ZXN0YmluZGlyOzsKKwkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiR0ZXN0YmluZGlyIjs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCisgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKwkgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKwlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgIGZpCisgICAgICBjb21waWxlX3JwYXRoPSIkcnBhdGgiCisKKyAgICAgIHJwYXRoPQorICAgICAgaGFyZGNvZGVfbGliZGlycz0KKyAgICAgIGZvciBsaWJkaXIgaW4gJGZpbmFsaXplX3JwYXRoOyBkbworCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisJICAgIGVsc2UKKwkgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJICAgICAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkgICAgICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCTs7CisJICAgICAgKikKKwkJaGFyZGNvZGVfbGliZGlycz0iJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCTs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZWxzZQorCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJICAgIHJwYXRoPSIkcnBhdGggJGZsYWciCisJICBmaQorCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCSAgY2FzZSAiJGZpbmFsaXplX3Blcm1fcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZpbmFsaXplX3Blcm1fcnBhdGg9IiRmaW5hbGl6ZV9wZXJtX3JwYXRoICRsaWJkaXIiIDs7CisJICBlc2FjCisJZmkKKyAgICAgIGRvbmUKKyAgICAgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCisgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKwkgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKwlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgIGZpCisgICAgICBmaW5hbGl6ZV9ycGF0aD0iJHJwYXRoIgorCisgICAgICBpZiB0ZXN0IC1uICIkbGlib2JqcyIgJiYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorCSMgVHJhbnNmb3JtIGFsbCB0aGUgbGlicmFyeSBvYmplY3RzIGludG8gc3RhbmRhcmQgb2JqZWN0cy4KKwljb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKKwlmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAorICAgICAgZmkKKworICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRvdXRwdXRuYW1lIiAiQFBST0dSQU1AIiAibm8iCisKKyAgICAgICMgdGVtcGxhdGUgcHJlbGlua2luZyBzdGVwCisgICAgICBpZiB0ZXN0IC1uICIkcHJlbGlua19jbWRzIjsgdGhlbgorCWZ1bmNfZXhlY3V0ZV9jbWRzICIkcHJlbGlua19jbWRzIiAnZXhpdCAkPycKKyAgICAgIGZpCisKKyAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPXllcworICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKmNlZ2NjKiB8ICptaW5ndzMyY2UqKQorICAgICAgICAjIERpc2FibGUgd3JhcHBlcnMgZm9yIGNlZ2NjIGFuZCBtaW5ndzMyY2UgaG9zdHMsIHdlIGFyZSBjcm9zcyBjb21waWxpbmcgYW55d2F5LgorICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1ubworICAgICAgICA7OworICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqICkKKyAgICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzOyB0aGVuCisgICAgICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9bm8KKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGlmIHRlc3QgIiRuZWVkX3JlbGluayIgPSBubyB8fCB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1ubworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgZXNhYworICAgICAgaWYgdGVzdCAiJHdyYXBwZXJzX3JlcXVpcmVkIiA9IG5vOyB0aGVuCisJIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgorCWNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJ2AKKwlsaW5rX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKKworCSMgV2UgaGF2ZSBubyB1bmluc3RhbGxlZCBsaWJyYXJ5IGRlcGVuZGVuY2llcywgc28gZmluYWxpemUgcmlnaHQgbm93LgorCWV4aXRfc3RhdHVzPTAKKwlmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXRfc3RhdHVzPSQ/JworCisJIyBEZWxldGUgdGhlIGdlbmVyYXRlZCBmaWxlcy4KKwlpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0iOyB0aGVuCisJICBmdW5jX3Nob3dfZXZhbCAnJFJNICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0iJworCWZpCisKKwlleGl0ICRleGl0X3N0YXR1cworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJGNvbXBpbGVfc2hsaWJwYXRoJGZpbmFsaXplX3NobGlicGF0aCI7IHRoZW4KKwljb21waWxlX2NvbW1hbmQ9IiRzaGxpYnBhdGhfdmFyPVwiJGNvbXBpbGVfc2hsaWJwYXRoJGZpbmFsaXplX3NobGlicGF0aFwkJHNobGlicGF0aF92YXJcIiAkY29tcGlsZV9jb21tYW5kIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLW4gIiRmaW5hbGl6ZV9zaGxpYnBhdGgiOyB0aGVuCisJZmluYWxpemVfY29tbWFuZD0iJHNobGlicGF0aF92YXI9XCIkZmluYWxpemVfc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3ZhclwiICRmaW5hbGl6ZV9jb21tYW5kIgorICAgICAgZmkKKworICAgICAgY29tcGlsZV92YXI9CisgICAgICBmaW5hbGl6ZV92YXI9CisgICAgICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisJaWYgdGVzdCAtbiAiJHBlcm1fcnBhdGgiOyB0aGVuCisJICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorCSAgcnBhdGg9CisJICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbworCSAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisJICBkb25lCisJICBjb21waWxlX3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQkcnVucGF0aF92YXJcIiAiCisJZmkKKwlpZiB0ZXN0IC1uICIkZmluYWxpemVfcGVybV9ycGF0aCI7IHRoZW4KKwkgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCisJICBycGF0aD0KKwkgIGZvciBkaXIgaW4gJGZpbmFsaXplX3Blcm1fcnBhdGg7IGRvCisJICAgIHJwYXRoPSIkcnBhdGgkZGlyOiIKKwkgIGRvbmUKKwkgIGZpbmFsaXplX3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQkcnVucGF0aF92YXJcIiAiCisJZmkKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRub19pbnN0YWxsIiA9IHllczsgdGhlbgorCSMgV2UgZG9uJ3QgbmVlZCB0byBjcmVhdGUgYSB3cmFwcGVyIHNjcmlwdC4KKwlsaW5rX2NvbW1hbmQ9IiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKKwkjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJbGlua19jb21tYW5kPWAkRUNITyAiJGxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAorCSMgRGVsZXRlIHRoZSBvbGQgb3V0cHV0IGZpbGUuCisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkb3V0cHV0CisJIyBMaW5rIHRoZSBleGVjdXRhYmxlIGFuZCBleGl0CisJZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0ICQ/JworCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2FjdGlvbiIgPSByZWxpbms7IHRoZW4KKwkjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKwlsaW5rX2NvbW1hbmQ9IiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKKwlyZWxpbmtfY29tbWFuZD0iJGZpbmFsaXplX3ZhciRmaW5hbGl6ZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoIgorCisJZnVuY193YXJuaW5nICJ0aGlzIHBsYXRmb3JtIGRvZXMgbm90IGxpa2UgdW5pbnN0YWxsZWQgc2hhcmVkIGxpYnJhcmllcyIKKwlmdW5jX3dhcm5pbmcgIlxgJG91dHB1dCcgd2lsbCBiZSByZWxpbmtlZCBkdXJpbmcgaW5zdGFsbGF0aW9uIgorICAgICAgZWxzZQorCWlmIHRlc3QgIiRmYXN0X2luc3RhbGwiICE9IG5vOyB0aGVuCisJICBsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkY29tcGlsZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoIgorCSAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiIHwgJFNFRCAncyVAT1VUUFVUQCVcJHByb2dkaXIvXCRmaWxlJWcnYAorCSAgZWxzZQorCSAgICAjIGZhc3RfaW5zdGFsbCBpcyBzZXQgdG8gbmVlZGxlc3MKKwkgICAgcmVsaW5rX2NvbW1hbmQ9CisJICBmaQorCWVsc2UKKwkgIGxpbmtfY29tbWFuZD0iJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorCSAgcmVsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkZmluYWxpemVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKKwlmaQorICAgICAgZmkKKworICAgICAgIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgorICAgICAgbGlua19jb21tYW5kPWAkRUNITyAiJGxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiJyVnJ2AKKworICAgICAgIyBEZWxldGUgdGhlIG9sZCBvdXRwdXQgZmlsZXMuCisgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRvdXRwdXQgJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUgJG91dHB1dF9vYmpkaXIvbHQtJG91dHB1dG5hbWUKKworICAgICAgZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0ICQ/JworCisgICAgICAjIE5vdyBjcmVhdGUgdGhlIHdyYXBwZXIgc2NyaXB0LgorICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0IgorCisgICAgICAjIFF1b3RlIHRoZSByZWxpbmsgY29tbWFuZCBmb3Igc2hpcHBpbmcuCisgICAgICBpZiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJIyBQcmVzZXJ2ZSBhbnkgdmFyaWFibGVzIHRoYXQgbWF5IGFmZmVjdCBjb21waWxlciBiZWhhdmlvcgorCWZvciB2YXIgaW4gJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rOyBkbworCSAgaWYgZXZhbCB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCI7IHRoZW4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9InsgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiIHx8ICRsdF91bnNldCAkdmFyIHx8IHsgJHZhcj07IGV4cG9ydCAkdmFyOyB9OyB9OyAkcmVsaW5rX2NvbW1hbmQiCisJICBlbGlmIGV2YWwgdmFyX3ZhbHVlPVwkJHZhcjsgdGVzdCAteiAiJHZhcl92YWx1ZSI7IHRoZW4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCSAgZWxzZQorCSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkdmFyX3ZhbHVlIgorCSAgICByZWxpbmtfY29tbWFuZD0iJHZhcj0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ7IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCisJICBmaQorCWRvbmUKKwlyZWxpbmtfY29tbWFuZD0iKGNkIGBwd2RgOyAkcmVsaW5rX2NvbW1hbmQpIgorCXJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgICAgZmkKKworICAgICAgIyBPbmx5IGFjdHVhbGx5IGRvIHRoaW5ncyBpZiBub3QgaW4gZHJ5IHJ1biBtb2RlLgorICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkjIHdpbjMyIHdpbGwgdGhpbmsgdGhlIHNjcmlwdCBpcyBhIGJpbmFyeSBpZiBpdCBoYXMKKwkjIGEgLmV4ZSBzdWZmaXgsIHNvIHdlIHN0cmlwIGl0IG9mZiBoZXJlLgorCWNhc2UgJG91dHB1dCBpbgorCSAgKi5leGUpIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG91dHB1dCIKKwkgICAgICAgICBvdXRwdXQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworCWVzYWMKKwkjIHRlc3QgZm9yIGN5Z3dpbiBiZWNhdXNlIG12IGZhaWxzIHcvbyAuZXhlIGV4dGVuc2lvbnMKKwljYXNlICRob3N0IGluCisJICAqY3lnd2luKikKKwkgICAgZXhlZXh0PS5leGUKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkb3V0cHV0bmFtZSIKKwkgICAgb3V0cHV0bmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisJICAqKSBleGVleHQ9IDs7CisJZXNhYworCWNhc2UgJGhvc3QgaW4KKwkgICpjeWd3aW4qIHwgKm1pbmd3KiApCisJICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRvdXRwdXQiICIiICIuIgorCSAgICBvdXRwdXRfbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkgICAgb3V0cHV0X3BhdGg9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKwkgICAgY3dyYXBwZXJzb3VyY2U9IiRvdXRwdXRfcGF0aC8kb2JqZGlyL2x0LSRvdXRwdXRfbmFtZS5jIgorCSAgICBjd3JhcHBlcj0iJG91dHB1dF9wYXRoLyRvdXRwdXRfbmFtZS5leGUiCisJICAgICRSTSAkY3dyYXBwZXJzb3VyY2UgJGN3cmFwcGVyCisJICAgIHRyYXAgIiRSTSAkY3dyYXBwZXJzb3VyY2UgJGN3cmFwcGVyOyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQorCisJICAgIGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMgPiAkY3dyYXBwZXJzb3VyY2UKKworCSAgICAjIFRoZSB3cmFwcGVyIGV4ZWN1dGFibGUgaXMgYnVpbHQgdXNpbmcgdGhlICRob3N0IGNvbXBpbGVyLAorCSAgICAjIGJlY2F1c2UgaXQgY29udGFpbnMgJGhvc3QgcGF0aHMgYW5kIGZpbGVzLiBJZiBjcm9zcy0KKwkgICAgIyBjb21waWxpbmcsIGl0LCBsaWtlIHRoZSB0YXJnZXQgZXhlY3V0YWJsZSwgbXVzdCBiZQorCSAgICAjIGV4ZWN1dGVkIG9uIHRoZSAkaG9zdCBvciB1bmRlciBhbiBlbXVsYXRpb24gZW52aXJvbm1lbnQuCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1vICRjd3JhcHBlciAkY3dyYXBwZXJzb3VyY2UKKwkgICAgICAkU1RSSVAgJGN3cmFwcGVyCisJICAgIH0KKworCSAgICAjIE5vdywgY3JlYXRlIHRoZSB3cmFwcGVyIHNjcmlwdCBmb3IgZnVuY19zb3VyY2UgdXNlOgorCSAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICRjd3JhcHBlcgorCSAgICAkUk0gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgIHRyYXAgIiRSTSAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1CisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgIyBub3RlOiB0aGlzIHNjcmlwdCB3aWxsIG5vdCBiZSBleGVjdXRlZCwgc28gZG8gbm90IGNobW9kLgorCSAgICAgIGlmIHRlc3QgIngkYnVpbGQiID0gIngkaG9zdCIgOyB0aGVuCisJCSRjd3JhcHBlciAtLWx0LWR1bXAtc2NyaXB0ID4gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgICAgZWxzZQorCQlmdW5jX2VtaXRfd3JhcHBlciBubyA+ICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICAgIGZpCisJICAgIH0KKwkgIDs7CisJICAqICkKKwkgICAgJFJNICRvdXRwdXQKKwkgICAgdHJhcCAiJFJNICRvdXRwdXQ7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1CisKKwkgICAgZnVuY19lbWl0X3dyYXBwZXIgbm8gPiAkb3V0cHV0CisJICAgIGNobW9kICt4ICRvdXRwdXQKKwkgIDs7CisJZXNhYworICAgICAgfQorICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgU2VlIGlmIHdlIG5lZWQgdG8gYnVpbGQgYW4gb2xkLWZhc2hpb25lZCBhcmNoaXZlLgorICAgIGZvciBvbGRsaWIgaW4gJG9sZGxpYnM7IGRvCisKKyAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gY29udmVuaWVuY2U7IHRoZW4KKwlvbGRvYmpzPSIkbGlib2Jqc19zYXZlICRzeW1maWxlb2JqIgorCWFkZGxpYnM9IiRjb252ZW5pZW5jZSIKKwlidWlsZF9saWJ0b29sX2xpYnM9bm8KKyAgICAgIGVsc2UKKwlpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG1vZHVsZTsgdGhlbgorCSAgb2xkb2Jqcz0iJGxpYm9ianNfc2F2ZSIKKwkgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworCWVsc2UKKwkgIG9sZG9ianM9IiRvbGRfZGVwbGlicyAkbm9uX3BpY19vYmplY3RzIgorCSAgaWYgdGVzdCAiJHByZWxvYWQiID0geWVzICYmIHRlc3QgLWYgIiRzeW1maWxlb2JqIjsgdGhlbgorCSAgICBvbGRvYmpzPSIkb2xkb2JqcyAkc3ltZmlsZW9iaiIKKwkgIGZpCisJZmkKKwlhZGRsaWJzPSIkb2xkX2NvbnZlbmllbmNlIgorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJGFkZGxpYnMiOyB0aGVuCisJZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwlnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKworCWZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRhZGRsaWJzCisJb2xkb2Jqcz0iJG9sZG9ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisgICAgICBmaQorCisgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KKyAgICAgIGlmIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIiAmJiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCWNtZHM9JG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMKKyAgICAgIGVsc2UKKworCSMgQWRkIGFueSBvYmplY3RzIGZyb20gcHJlbG9hZGVkIGNvbnZlbmllbmNlIGxpYnJhcmllcworCWlmIHRlc3QgLW4gIiRkbHByZWZpbGVzIjsgdGhlbgorCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwkgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorCisJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkZGxwcmVmaWxlcworCSAgb2xkb2Jqcz0iJG9sZG9ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJZmkKKworCSMgUE9TSVggZGVtYW5kcyBubyBwYXRocyB0byBiZSBlbmNvZGVkIGluIGFyY2hpdmVzLiAgV2UgaGF2ZQorCSMgdG8gYXZvaWQgY3JlYXRpbmcgYXJjaGl2ZXMgd2l0aCBkdXBsaWNhdGUgYmFzZW5hbWVzIGlmIHdlCisJIyBtaWdodCBoYXZlIHRvIGV4dHJhY3QgdGhlbSBhZnRlcndhcmRzLCBlLmcuLCB3aGVuIGNyZWF0aW5nIGEKKwkjIHN0YXRpYyBhcmNoaXZlIG91dCBvZiBhIGNvbnZlbmllbmNlIGxpYnJhcnksIG9yIHdoZW4gbGlua2luZworCSMgdGhlIGVudGlyZXR5IG9mIGEgbGlidG9vbCBhcmNoaXZlIGludG8gYW5vdGhlciAoY3VycmVudGx5CisJIyBub3Qgc3VwcG9ydGVkIGJ5IGxpYnRvb2wpLgorCWlmIChmb3Igb2JqIGluICRvbGRvYmpzCisJICAgIGRvCisJICAgICAgZnVuY19iYXNlbmFtZSAiJG9iaiIKKwkgICAgICAkRUNITyAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgICBkb25lIHwgc29ydCB8IHNvcnQgLXVjID4vZGV2L251bGwgMj4mMSk7IHRoZW4KKwkgIDoKKwllbHNlCisJICBlY2hvICJjb3B5aW5nIHNlbGVjdGVkIG9iamVjdCBmaWxlcyB0byBhdm9pZCBiYXNlbmFtZSBjb25mbGljdHMuLi4iCisJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisJICBmdW5jX21rZGlyX3AgIiRnZW50b3AiCisJICBzYXZlX29sZG9ianM9JG9sZG9ianMKKwkgIG9sZG9ianM9CisJICBjb3VudGVyPTEKKwkgIGZvciBvYmogaW4gJHNhdmVfb2xkb2JqcworCSAgZG8KKwkgICAgZnVuY19iYXNlbmFtZSAiJG9iaiIKKwkgICAgb2JqYmFzZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgICBjYXNlICIgJG9sZG9ianMgIiBpbgorCSAgICAiICIpIG9sZG9ianM9JG9iaiA7OworCSAgICAqW1wgL10iJG9iamJhc2UgIiopCisJICAgICAgd2hpbGUgOjsgZG8KKwkJIyBNYWtlIHN1cmUgd2UgZG9uJ3QgcGljayBhbiBhbHRlcm5hdGUgbmFtZSB0aGF0IGFsc28KKwkJIyBvdmVybGFwcy4KKwkJbmV3b2JqPWx0JGNvdW50ZXItJG9iamJhc2UKKwkJZnVuY19hcml0aCAkY291bnRlciArIDEKKwkJY291bnRlcj0kZnVuY19hcml0aF9yZXN1bHQKKwkJY2FzZSAiICRvbGRvYmpzICIgaW4KKwkJKltcIC9dIiRuZXdvYmogIiopIDs7CisJCSopIGlmIHRlc3QgISAtZiAiJGdlbnRvcC8kbmV3b2JqIjsgdGhlbiBicmVhazsgZmkgOzsKKwkJZXNhYworCSAgICAgIGRvbmUKKwkgICAgICBmdW5jX3Nob3dfZXZhbCAibG4gJG9iaiAkZ2VudG9wLyRuZXdvYmogfHwgY3AgJG9iaiAkZ2VudG9wLyRuZXdvYmoiCisJICAgICAgb2xkb2Jqcz0iJG9sZG9ianMgJGdlbnRvcC8kbmV3b2JqIgorCSAgICAgIDs7CisJICAgICopIG9sZG9ianM9IiRvbGRvYmpzICRvYmoiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwlmaQorCWV2YWwgY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKKworCWZ1bmNfbGVuICIgJGNtZHMiCisJbGVuPSRmdW5jX2xlbl9yZXN1bHQKKwlpZiB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KKwkgIGNtZHM9JG9sZF9hcmNoaXZlX2NtZHMKKwllbHNlCisJICAjIHRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gbGluayBpbiBvbmUgc3RlcCwgbGluayBpbiBwYXJ0cworCSAgZnVuY192ZXJib3NlICJ1c2luZyBwaWVjZXdpc2UgYXJjaGl2ZSBsaW5raW5nLi4uIgorCSAgc2F2ZV9SQU5MSUI9JFJBTkxJQgorCSAgUkFOTElCPToKKwkgIG9iamxpc3Q9CisJICBjb25jYXRfY21kcz0KKwkgIHNhdmVfb2xkb2Jqcz0kb2xkb2JqcworCSAgb2xkb2Jqcz0KKwkgICMgSXMgdGhlcmUgYSBiZXR0ZXIgd2F5IG9mIGZpbmRpbmcgdGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBsaXN0PworCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCisJICBkbworCSAgICBsYXN0X29sZG9iaj0kb2JqCisJICBkb25lCisJICBldmFsIHRlc3RfY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKKwkgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIKKwkgIGxlbjA9JGZ1bmNfbGVuX3Jlc3VsdAorCSAgbGVuPSRsZW4wCisJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKKwkgIGRvCisJICAgIGZ1bmNfbGVuICIgJG9iaiIKKwkgICAgZnVuY19hcml0aCAkbGVuICsgJGZ1bmNfbGVuX3Jlc3VsdAorCSAgICBsZW49JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGZ1bmNfYXBwZW5kIG9iamxpc3QgIiAkb2JqIgorCSAgICBpZiB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiI7IHRoZW4KKwkgICAgICA6CisJICAgIGVsc2UKKwkgICAgICAjIHRoZSBhYm92ZSBjb21tYW5kIHNob3VsZCBiZSB1c2VkIGJlZm9yZSBpdCBnZXRzIHRvbyBsb25nCisJICAgICAgb2xkb2Jqcz0kb2JqbGlzdAorCSAgICAgIGlmIHRlc3QgIiRvYmoiID0gIiRsYXN0X29sZG9iaiIgOyB0aGVuCisJCVJBTkxJQj0kc2F2ZV9SQU5MSUIKKwkgICAgICBmaQorCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kb2xkX2FyY2hpdmVfY21kc1wiCisJICAgICAgb2JqbGlzdD0KKwkgICAgICBsZW49JGxlbjAKKwkgICAgZmkKKwkgIGRvbmUKKwkgIFJBTkxJQj0kc2F2ZV9SQU5MSUIKKwkgIG9sZG9ianM9JG9iamxpc3QKKwkgIGlmIHRlc3QgIlgkb2xkb2JqcyIgPSAiWCIgOyB0aGVuCisJICAgIGV2YWwgY21kcz1cIlwkY29uY2F0X2NtZHNcIgorCSAgZWxzZQorCSAgICBldmFsIGNtZHM9XCJcJGNvbmNhdF9jbWRzflwkb2xkX2FyY2hpdmVfY21kc1wiCisJICBmaQorCWZpCisgICAgICBmaQorICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRjbWRzIiAnZXhpdCAkPycKKyAgICBkb25lCisKKyAgICB0ZXN0IC1uICIkZ2VuZXJhdGVkIiAmJiBcCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJHtSTX1yJGdlbmVyYXRlZCIKKworICAgICMgTm93IGNyZWF0ZSB0aGUgbGlidG9vbCBhcmNoaXZlLgorICAgIGNhc2UgJG91dHB1dCBpbgorICAgICoubGEpCisgICAgICBvbGRfbGlicmFyeT0KKyAgICAgIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgJiYgb2xkX2xpYnJhcnk9IiRsaWJuYW1lLiRsaWJleHQiCisgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXQiCisKKyAgICAgICMgUHJlc2VydmUgYW55IHZhcmlhYmxlcyB0aGF0IG1heSBhZmZlY3QgY29tcGlsZXIgYmVoYXZpb3IKKyAgICAgIGZvciB2YXIgaW4gJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rOyBkbworCWlmIGV2YWwgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiOyB0aGVuCisJICByZWxpbmtfY29tbWFuZD0ieyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwgJGx0X3Vuc2V0ICR2YXIgfHwgeyAkdmFyPTsgZXhwb3J0ICR2YXI7IH07IH07ICRyZWxpbmtfY29tbWFuZCIKKwllbGlmIGV2YWwgdmFyX3ZhbHVlPVwkJHZhcjsgdGVzdCAteiAiJHZhcl92YWx1ZSI7IHRoZW4KKwkgIHJlbGlua19jb21tYW5kPSIkdmFyPTsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwllbHNlCisJICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkdmFyX3ZhbHVlIgorCSAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCWZpCisgICAgICBkb25lCisgICAgICAjIFF1b3RlIHRoZSBsaW5rIGNvbW1hbmQgZm9yIHNoaXBwaW5nLgorICAgICAgcmVsaW5rX2NvbW1hbmQ9IihjZCBgcHdkYDsgJFNIRUxMICRwcm9ncGF0aCAkcHJlc2VydmVfYXJncyAtLW1vZGU9cmVsaW5rICRsaWJ0b29sX2FyZ3MgQGluc3RfcHJlZml4X2RpckApIgorICAgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfYXV0b21hdGljIiA9IHllcyA7IHRoZW4KKwlyZWxpbmtfY29tbWFuZD0KKyAgICAgIGZpCisKKyAgICAgICMgT25seSBjcmVhdGUgdGhlIG91dHB1dCBpZiBub3QgYSBkcnkgcnVuLgorICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwlmb3IgaW5zdGFsbGVkIGluIG5vIHllczsgZG8KKwkgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0geWVzOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRpbnN0YWxsX2xpYmRpciI7IHRoZW4KKwkgICAgICBicmVhaworCSAgICBmaQorCSAgICBvdXRwdXQ9IiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lImkKKwkgICAgIyBSZXBsYWNlIGFsbCB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcyB3aXRoIHRoZSBpbnN0YWxsZWQgb25lcworCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9CisJICAgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgICAqLmxhKQorCQlmdW5jX2Jhc2VuYW1lICIkZGVwbGliIgorCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJbmV3ZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzICRsaWJkaXIvJG5hbWUiCisJCTs7CisJICAgICAgKikgbmV3ZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzICRkZXBsaWIiIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIGRlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgbmV3ZGxmaWxlcz0KKworCSAgICBmb3IgbGliIGluICRkbGZpbGVzOyBkbworCSAgICAgIGNhc2UgJGxpYiBpbgorCSAgICAgICoubGEpCisJICAgICAgICBmdW5jX2Jhc2VuYW1lICIkbGliIgorCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCisJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGxpYmRpci8kbmFtZSIKKwkJOzsKKwkgICAgICAqKSBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICBkbGZpbGVzPSIkbmV3ZGxmaWxlcyIKKwkgICAgbmV3ZGxwcmVmaWxlcz0KKwkgICAgZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkgICAgICAqLmxhKQorCQkjIE9ubHkgcGFzcyBwcmVvcGVuZWQgZmlsZXMgdG8gdGhlIHBzZXVkby1hcmNoaXZlIChmb3IKKwkJIyBldmVudHVhbCBsaW5raW5nIHdpdGggdGhlIGFwcC4gdGhhdCBsaW5rcyBpdCkgaWYgd2UKKwkJIyBkaWRuJ3QgYWxyZWFkeSBsaW5rIHRoZSBwcmVvcGVuZWQgb2JqZWN0cyBkaXJlY3RseSBpbnRvCisJCSMgdGhlIGxpYnJhcnk6CisJCWZ1bmNfYmFzZW5hbWUgIiRsaWIiCisJCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGxpYmAKKwkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQluZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkbGliZGlyLyRuYW1lIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICBkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyIKKwkgIGVsc2UKKwkgICAgbmV3ZGxmaWxlcz0KKwkgICAgZm9yIGxpYiBpbiAkZGxmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9IiRsaWIiIDs7CisJCSopIGFicz1gcHdkYCIvJGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgICAgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGFicyIKKwkgICAgZG9uZQorCSAgICBkbGZpbGVzPSIkbmV3ZGxmaWxlcyIKKwkgICAgbmV3ZGxwcmVmaWxlcz0KKwkgICAgZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9IiRsaWIiIDs7CisJCSopIGFicz1gcHdkYCIvJGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGFicyIKKwkgICAgZG9uZQorCSAgICBkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyIKKwkgIGZpCisJICAkUk0gJG91dHB1dAorCSAgIyBwbGFjZSBkbG5hbWUgaW4gY29ycmVjdCBwb3NpdGlvbiBmb3IgY3lnd2luCisJICAjIEluIGZhY3QsIGl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgY291bGQgdXNlIHRoaXMgY29kZSBmb3IgYWxsIHRhcmdldAorCSAgIyBzeXN0ZW1zIHRoYXQgY2FuJ3QgaGFyZC1jb2RlIGxpYnJhcnkgcGF0aHMgaW50byB0aGVpciBleGVjdXRhYmxlcworCSAgIyBhbmQgdGhhdCBoYXZlIG5vIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUgaW5kZXBlbmRlbnQgb2YgUEFUSCwKKwkgICMgYnV0IGl0IHR1cm5zIG91dCB3ZSBjYW4ndCBlYXNpbHkgZGV0ZXJtaW5lIHRoYXQgZnJvbSBpbnNwZWN0aW5nCisJICAjIGxpYnRvb2wgdmFyaWFibGVzLCBzbyB3ZSBoYXZlIHRvIGhhcmQtY29kZSB0aGUgT1NzIHRvIHdoaWNoIGl0CisJICAjIGFwcGxpZXMgaGVyZTsgYXQgdGhlIG1vbWVudCwgdGhhdCBtZWFucyBwbGF0Zm9ybXMgdGhhdCB1c2UgdGhlIFBFCisJICAjIG9iamVjdCBmb3JtYXQgd2l0aCBETEwgZmlsZXMuICBTZWUgdGhlIGxvbmcgY29tbWVudCBhdCB0aGUgdG9wIG9mCisJICAjIHRlc3RzL2JpbmRpci5hdCBmb3IgZnVsbCBkZXRhaWxzLgorCSAgdGRsbmFtZT0kZGxuYW1lCisJICBjYXNlICRob3N0LCRvdXRwdXQsJGluc3RhbGxlZCwkbW9kdWxlLCRkbG5hbWUgaW4KKwkgICAgKmN5Z3dpbiosKmxhaSx5ZXMsbm8sKi5kbGwgfCAqbWluZ3cqLCpsYWkseWVzLG5vLCouZGxsIHwgKmNlZ2NjKiwqbGFpLHllcyxubywqLmRsbCkKKwkgICAgICAjIElmIGEgLWJpbmRpciBhcmd1bWVudCB3YXMgc3VwcGxpZWQsIHBsYWNlIHRoZSBkbGwgdGhlcmUuCisJICAgICAgaWYgdGVzdCAieCRiaW5kaXIiICE9IHggOworCSAgICAgIHRoZW4KKwkJZnVuY19yZWxhdGl2ZV9wYXRoICIkaW5zdGFsbF9saWJkaXIiICIkYmluZGlyIgorCQl0ZGxuYW1lPSRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0JGRsbmFtZQorCSAgICAgIGVsc2UKKwkJIyBPdGhlcndpc2UgZmFsbCBiYWNrIG9uIGhldXJpc3RpYy4KKwkJdGRsbmFtZT0uLi9iaW4vJGRsbmFtZQorCSAgICAgIGZpCisJICAgICAgOzsKKwkgIGVzYWMKKwkgICRFQ0hPID4gJG91dHB1dCAiXAorIyAkb3V0cHV0bmFtZSAtIGEgbGlidG9vbCBsaWJyYXJ5IGZpbGUKKyMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIworIyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZpbGUhCisjIEl0IGlzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyB0aGUgbGlicmFyeS4KKworIyBUaGUgbmFtZSB0aGF0IHdlIGNhbiBkbG9wZW4oMykuCitkbG5hbWU9JyR0ZGxuYW1lJworCisjIE5hbWVzIG9mIHRoaXMgbGlicmFyeS4KK2xpYnJhcnlfbmFtZXM9JyRsaWJyYXJ5X25hbWVzJworCisjIFRoZSBuYW1lIG9mIHRoZSBzdGF0aWMgYXJjaGl2ZS4KK29sZF9saWJyYXJ5PSckb2xkX2xpYnJhcnknCisKKyMgTGlua2VyIGZsYWdzIHRoYXQgY2FuIG5vdCBnbyBpbiBkZXBlbmRlbmN5X2xpYnMuCitpbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSckbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MnCisKKyMgTGlicmFyaWVzIHRoYXQgdGhpcyBvbmUgZGVwZW5kcyB1cG9uLgorZGVwZW5kZW5jeV9saWJzPSckZGVwZW5kZW5jeV9saWJzJworCisjIE5hbWVzIG9mIGFkZGl0aW9uYWwgd2VhayBsaWJyYXJpZXMgcHJvdmlkZWQgYnkgdGhpcyBsaWJyYXJ5Cit3ZWFrX2xpYnJhcnlfbmFtZXM9JyR3ZWFrX2xpYnMnCisKKyMgVmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgJGxpYm5hbWUuCitjdXJyZW50PSRjdXJyZW50CithZ2U9JGFnZQorcmV2aXNpb249JHJldmlzaW9uCisKKyMgSXMgdGhpcyBhbiBhbHJlYWR5IGluc3RhbGxlZCBsaWJyYXJ5PworaW5zdGFsbGVkPSRpbnN0YWxsZWQKKworIyBTaG91bGQgd2Ugd2FybiBhYm91dCBwb3J0YWJpbGl0eSB3aGVuIGxpbmtpbmcgYWdhaW5zdCAtbW9kdWxlcz8KK3Nob3VsZG5vdGxpbms9JG1vZHVsZQorCisjIEZpbGVzIHRvIGRsb3Blbi9kbHByZW9wZW4KK2Rsb3Blbj0nJGRsZmlsZXMnCitkbHByZW9wZW49JyRkbHByZWZpbGVzJworCisjIERpcmVjdG9yeSB0aGF0IHRoaXMgbGlicmFyeSBuZWVkcyB0byBiZSBpbnN0YWxsZWQgaW46CitsaWJkaXI9JyRpbnN0YWxsX2xpYmRpciciCisJICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IG5vICYmIHRlc3QgIiRuZWVkX3JlbGluayIgPSB5ZXM7IHRoZW4KKwkgICAgJEVDSE8gPj4gJG91dHB1dCAiXAorcmVsaW5rX2NvbW1hbmQ9XCIkcmVsaW5rX2NvbW1hbmRcIiIKKwkgIGZpCisJZG9uZQorICAgICAgfQorCisgICAgICAjIERvIGEgc3ltYm9saWMgbGluayBzbyB0aGF0IHRoZSBsaWJ0b29sIGFyY2hpdmUgY2FuIGJlIGZvdW5kIGluCisgICAgICAjIExEX0xJQlJBUllfUEFUSCBiZWZvcmUgdGhlIHByb2dyYW0gaXMgaW5zdGFsbGVkLgorICAgICAgZnVuY19zaG93X2V2YWwgJyggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiAkUk0gIiRvdXRwdXRuYW1lIiAmJiAkTE5fUyAiLi4vJG91dHB1dG5hbWUiICIkb3V0cHV0bmFtZSIgKScgJ2V4aXQgJD8nCisgICAgICA7OworICAgIGVzYWMKKyAgICBleGl0ICRFWElUX1NVQ0NFU1MKK30KKworeyB0ZXN0ICIkbW9kZSIgPSBsaW5rIHx8IHRlc3QgIiRtb2RlIiA9IHJlbGluazsgfSAmJgorICAgIGZ1bmNfbW9kZV9saW5rICR7MSsiJEAifQorCisKKyMgZnVuY19tb2RlX3VuaW5zdGFsbCBhcmcuLi4KK2Z1bmNfbW9kZV91bmluc3RhbGwgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgUk09IiRub25vcHQiCisgICAgZmlsZXM9CisgICAgcm1mb3JjZT0KKyAgICBleGl0X3N0YXR1cz0wCisKKyAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHZhcmlhYmxlcyByYXRoZXIKKyAgICAjIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KKyAgICBsaWJ0b29sX2luc3RhbGxfbWFnaWM9IiRtYWdpYyIKKworICAgIGZvciBhcmcKKyAgICBkbworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtZikgUk09IiRSTSAkYXJnIjsgcm1mb3JjZT15ZXMgOzsKKyAgICAgIC0qKSBSTT0iJFJNICRhcmciIDs7CisgICAgICAqKSBmaWxlcz0iJGZpbGVzICRhcmciIDs7CisgICAgICBlc2FjCisgICAgZG9uZQorCisgICAgdGVzdCAteiAiJFJNIiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYW4gUk0gcHJvZ3JhbSIKKworICAgIHJtZGlycz0KKworICAgIG9yaWdvYmpkaXI9IiRvYmpkaXIiCisgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbworICAgICAgZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCisgICAgICBkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorICAgICAgaWYgdGVzdCAiWCRkaXIiID0gWC47IHRoZW4KKwlvYmpkaXI9IiRvcmlnb2JqZGlyIgorICAgICAgZWxzZQorCW9iamRpcj0iJGRpci8kb3JpZ29iamRpciIKKyAgICAgIGZpCisgICAgICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKyAgICAgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICAgIHRlc3QgIiRtb2RlIiA9IHVuaW5zdGFsbCAmJiBvYmpkaXI9IiRkaXIiCisKKyAgICAgICMgUmVtZW1iZXIgb2JqZGlyIGZvciByZW1vdmFsIGxhdGVyLCBiZWluZyBjYXJlZnVsIHRvIGF2b2lkIGR1cGxpY2F0ZXMKKyAgICAgIGlmIHRlc3QgIiRtb2RlIiA9IGNsZWFuOyB0aGVuCisJY2FzZSAiICRybWRpcnMgIiBpbgorCSAgKiIgJG9iamRpciAiKikgOzsKKwkgICopIHJtZGlycz0iJHJtZGlycyAkb2JqZGlyIiA7OworCWVzYWMKKyAgICAgIGZpCisKKyAgICAgICMgRG9uJ3QgZXJyb3IgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCBhbmQgcm0gLWYgd2FzIHVzZWQuCisgICAgICBpZiB7IHRlc3QgLUwgIiRmaWxlIjsgfSA+L2Rldi9udWxsIDI+JjEgfHwKKwkgeyB0ZXN0IC1oICIkZmlsZSI7IH0gPi9kZXYvbnVsbCAyPiYxIHx8CisJIHRlc3QgLWYgIiRmaWxlIjsgdGhlbgorCToKKyAgICAgIGVsaWYgdGVzdCAtZCAiJGZpbGUiOyB0aGVuCisJZXhpdF9zdGF0dXM9MQorCWNvbnRpbnVlCisgICAgICBlbGlmIHRlc3QgIiRybWZvcmNlIiA9IHllczsgdGhlbgorCWNvbnRpbnVlCisgICAgICBmaQorCisgICAgICBybWZpbGVzPSIkZmlsZSIKKworICAgICAgY2FzZSAkbmFtZSBpbgorICAgICAgKi5sYSkKKwkjIFBvc3NpYmx5IGEgbGlidG9vbCBhcmNoaXZlLCBzbyB2ZXJpZnkgaXQuCisJaWYgZnVuY19sYWxpYl9wICIkZmlsZSI7IHRoZW4KKwkgIGZ1bmNfc291cmNlICRkaXIvJG5hbWUKKworCSAgIyBEZWxldGUgdGhlIGxpYnRvb2wgbGlicmFyaWVzIGFuZCBzeW1saW5rcy4KKwkgIGZvciBuIGluICRsaWJyYXJ5X25hbWVzOyBkbworCSAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRuIgorCSAgZG9uZQorCSAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRvbGRfbGlicmFyeSIKKworCSAgY2FzZSAiJG1vZGUiIGluCisJICBjbGVhbikKKwkgICAgY2FzZSAiICAkbGlicmFyeV9uYW1lcyAiIGluCisJICAgICMgIiAgIiBpbiB0aGUgYmVnaW5uaW5nIGNhdGNoZXMgZW1wdHkgJGRsbmFtZQorCSAgICAqIiAkZGxuYW1lICIqKSA7OworCSAgICAqKSBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRkbG5hbWUiIDs7CisJICAgIGVzYWMKKwkgICAgdGVzdCAtbiAiJGxpYmRpciIgJiYgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbmFtZSAkb2JqZGlyLyR7bmFtZX1pIgorCSAgICA7OworCSAgdW5pbnN0YWxsKQorCSAgICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyI7IHRoZW4KKwkgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdHVuaW5zdGFsbCBjb21tYW5kcy4KKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3R1bmluc3RhbGxfY21kcyIgJ3Rlc3QgIiRybWZvcmNlIiA9IHllcyB8fCBleGl0X3N0YXR1cz0xJworCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgb2xkX3Bvc3R1bmluc3RhbGwgY29tbWFuZHMuCisJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIiAndGVzdCAiJHJtZm9yY2UiID0geWVzIHx8IGV4aXRfc3RhdHVzPTEnCisJICAgIGZpCisJICAgICMgRklYTUU6IHNob3VsZCByZWluc3RhbGwgdGhlIGJlc3QgcmVtYWluaW5nIHNoYXJlZCBsaWJyYXJ5LgorCSAgICA7OworCSAgZXNhYworCWZpCisJOzsKKworICAgICAgKi5sbykKKwkjIFBvc3NpYmx5IGEgbGlidG9vbCBvYmplY3QsIHNvIHZlcmlmeSBpdC4KKwlpZiBmdW5jX2xhbGliX3AgIiRmaWxlIjsgdGhlbgorCisJICAjIFJlYWQgdGhlIC5sbyBmaWxlCisJICBmdW5jX3NvdXJjZSAkZGlyLyRuYW1lCisKKwkgICMgQWRkIFBJQyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVtb3ZlLgorCSAgaWYgdGVzdCAtbiAiJHBpY19vYmplY3QiICYmCisJICAgICB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgICBybWZpbGVzPSIkcm1maWxlcyAkZGlyLyRwaWNfb2JqZWN0IgorCSAgZmkKKworCSAgIyBBZGQgbm9uLVBJQyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVtb3ZlLgorCSAgaWYgdGVzdCAtbiAiJG5vbl9waWNfb2JqZWN0IiAmJgorCSAgICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICAgIHJtZmlsZXM9IiRybWZpbGVzICRkaXIvJG5vbl9waWNfb2JqZWN0IgorCSAgZmkKKwlmaQorCTs7CisKKyAgICAgICopCisJaWYgdGVzdCAiJG1vZGUiID0gY2xlYW4gOyB0aGVuCisJICBub2V4ZW5hbWU9JG5hbWUKKwkgIGNhc2UgJGZpbGUgaW4KKwkgICouZXhlKQorCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgorCSAgICBmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkbmFtZSIKKwkgICAgbm9leGVuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgIyAkZmlsZSB3aXRoIC5leGUgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byBybWZpbGVzLAorCSAgICAjIGFkZCAkZmlsZSB3aXRob3V0IC5leGUKKwkgICAgcm1maWxlcz0iJHJtZmlsZXMgJGZpbGUiCisJICAgIDs7CisJICBlc2FjCisJICAjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyBhIGxpYnRvb2wgcHJvZ3JhbS4KKwkgIGlmIGZ1bmNfbHR3cmFwcGVyX3AgIiRmaWxlIjsgdGhlbgorCSAgICBpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiRmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorCSAgICAgIHJlbGlua19jb21tYW5kPQorCSAgICAgIGZ1bmNfc291cmNlICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICAgIHJtZmlsZXM9IiRybWZpbGVzICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdCIKKwkgICAgZWxzZQorCSAgICAgIHJlbGlua19jb21tYW5kPQorCSAgICAgIGZ1bmNfc291cmNlICRkaXIvJG5vZXhlbmFtZQorCSAgICBmaQorCisJICAgICMgbm90ZSAkbmFtZSBzdGlsbCBjb250YWlucyAuZXhlIGlmIGl0IHdhcyBpbiAkZmlsZSBvcmlnaW5hbGx5CisJICAgICMgYXMgZG9lcyB0aGUgdmVyc2lvbiBvZiAkZmlsZSB0aGF0IHdhcyBhZGRlZCBpbnRvICRybWZpbGVzCisJICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG5hbWUgJG9iamRpci8ke25hbWV9Uy4ke29iamV4dH0iCisJICAgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkgICAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyL2x0LSRuYW1lIgorCSAgICBmaQorCSAgICBpZiB0ZXN0ICJYJG5vZXhlbmFtZSIgIT0gIlgkbmFtZSIgOyB0aGVuCisJICAgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci9sdC0ke25vZXhlbmFtZX0uYyIKKwkgICAgZmkKKwkgIGZpCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgZnVuY19zaG93X2V2YWwgIiRSTSAkcm1maWxlcyIgJ2V4aXRfc3RhdHVzPTEnCisgICAgZG9uZQorICAgIG9iamRpcj0iJG9yaWdvYmpkaXIiCisKKyAgICAjIFRyeSB0byByZW1vdmUgdGhlICR7b2JqZGlyfXMgaW4gdGhlIGRpcmVjdG9yaWVzIHdoZXJlIHdlIGRlbGV0ZWQgZmlsZXMKKyAgICBmb3IgZGlyIGluICRybWRpcnM7IGRvCisgICAgICBpZiB0ZXN0IC1kICIkZGlyIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICJybWRpciAkZGlyID4vZGV2L251bGwgMj4mMSIKKyAgICAgIGZpCisgICAgZG9uZQorCisgICAgZXhpdCAkZXhpdF9zdGF0dXMKK30KKworeyB0ZXN0ICIkbW9kZSIgPSB1bmluc3RhbGwgfHwgdGVzdCAiJG1vZGUiID0gY2xlYW47IH0gJiYKKyAgICBmdW5jX21vZGVfdW5pbnN0YWxsICR7MSsiJEAifQorCit0ZXN0IC16ICIkbW9kZSIgJiYgeworICBoZWxwPSIkZ2VuZXJpY19oZWxwIgorICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBNT0RFIgorfQorCit0ZXN0IC16ICIkZXhlY19jbWQiICYmIFwKKyAgZnVuY19mYXRhbF9oZWxwICJpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG1vZGUnIgorCitpZiB0ZXN0IC1uICIkZXhlY19jbWQiOyB0aGVuCisgIGV2YWwgZXhlYyAiJGV4ZWNfY21kIgorICBleGl0ICRFWElUX0ZBSUxVUkUKK2ZpCisKK2V4aXQgJGV4aXRfc3RhdHVzCisKKworIyBUaGUgVEFHcyBiZWxvdyBhcmUgZGVmaW5lZCBzdWNoIHRoYXQgd2UgbmV2ZXIgZ2V0IGludG8gYSBzaXR1YXRpb24KKyMgaW4gd2hpY2ggd2UgZGlzYWJsZSBib3RoIGtpbmRzIG9mIGxpYnJhcmllcy4gIEdpdmVuIGNvbmZsaWN0aW5nCisjIGNob2ljZXMsIHdlIGdvIGZvciBhIHN0YXRpYyBsaWJyYXJ5LCB0aGF0IGlzIHRoZSBtb3N0IHBvcnRhYmxlLAorIyBzaW5jZSB3ZSBjYW4ndCB0ZWxsIHdoZXRoZXIgc2hhcmVkIGxpYnJhcmllcyB3ZXJlIGRpc2FibGVkIGJlY2F1c2UKKyMgdGhlIHVzZXIgYXNrZWQgZm9yIHRoYXQgb3IgYmVjYXVzZSB0aGUgcGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0CisjIHRoZW0uICBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgb24gQUlYLCBiZWNhdXNlIHdlIGRvbid0CisjIHN1cHBvcnQgaGF2aW5nIGJvdGggc3RhdGljIGFuZCBzaGFyZWQgbGlicmFyaWVzIGVuYWJsZWQgYXQgdGhlIHNhbWUKKyMgdGltZSBvbiB0aGF0IHBsYXRmb3JtLCBzbyB3ZSBkZWZhdWx0IHRvIGEgc2hhcmVkLW9ubHkgY29uZmlndXJhdGlvbi4KKyMgSWYgYSBkaXNhYmxlLXNoYXJlZCB0YWcgaXMgZ2l2ZW4sIHdlJ2xsIGZhbGxiYWNrIHRvIGEgc3RhdGljLW9ubHkKKyMgY29uZmlndXJhdGlvbi4gIEJ1dCB3ZSdsbCBuZXZlciBnbyBmcm9tIHN0YXRpYy1vbmx5IHRvIHNoYXJlZC1vbmx5LgorCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc2hhcmVkCitidWlsZF9saWJ0b29sX2xpYnM9bm8KK2J1aWxkX29sZF9saWJzPXllcworIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zaGFyZWQKKworIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXN0YXRpYworYnVpbGRfb2xkX2xpYnM9YGNhc2UgJGJ1aWxkX2xpYnRvb2xfbGlicyBpbiB5ZXMpIGVjaG8gbm87OyAqKSBlY2hvIHllczs7IGVzYWNgCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXN0YXRpYworCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTpzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246MgorIyBFbmQ6CisjIHZpOnN3PTIKKworCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IENYWAorCisjIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCitMRD0iL3Vzci9iaW4vbGQgLW0gZWxmX3g4Nl82NCIKKworIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgorcmVsb2FkX2ZsYWc9IiAtciIKK3JlbG9hZF9jbWRzPSJcJExEXCRyZWxvYWRfZmxhZyAtbyBcJG91dHB1dFwkcmVsb2FkX29ianMiCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2NtZHM9IlwkQVIgXCRBUl9GTEFHUyBcJG9sZGxpYlwkb2xkb2Jqc35cJFJBTkxJQiBcJG9sZGxpYiIKKworIyBBIGxhbmd1YWdlIHNwZWNpZmljIGNvbXBpbGVyLgorQ0M9Ii91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9ob3N0L3Vzci9iaW4vY2NhY2hlIC91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9ob3N0L3Vzci9iaW4vY2NhY2hlIC91c3IvYmluL2crKyIKKworIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBjb21waWxlcj8KK3dpdGhfZ2NjPXllcworCisjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCitub19idWlsdGluX2ZsYWc9IiAtZm5vLWJ1aWx0aW4iCisKKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KK3dsPSItV2wsIgorCisjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KK3BpY19mbGFnPSIgLWZQSUMgLURQSUMiCisKKyMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KK2xpbmtfc3RhdGljX2ZsYWc9Ii1zdGF0aWMiCisKKyMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPworY29tcGlsZXJfY19vPSJ5ZXMiCisKKyMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KK2J1aWxkX2xpYnRvb2xfbmVlZF9sYz1ubworCisjIFdoZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWMuCithbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9bm8KKworIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSJcJHt3bH0tLWV4cG9ydC1keW5hbWljIgorCisjIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSJcJHt3bH0tLXdob2xlLWFyY2hpdmVcJGNvbnZlbmllbmNlIFwke3dsfS0tbm8td2hvbGUtYXJjaGl2ZSIKKworIyBXaGV0aGVyIHRoZSBjb21waWxlciBjb3BlcyB3aXRoIHBhc3Npbmcgbm8gb2JqZWN0cyBkaXJlY3RseS4KK2NvbXBpbGVyX25lZWRzX29iamVjdD0ibm8iCisKKyMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9IiIKKworIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0iIgorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZS4KK2FyY2hpdmVfY21kcz0iXCRDQyAtc2hhcmVkIC1ub3N0ZGxpYiBcJHByZWRlcF9vYmplY3RzIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRwb3N0ZGVwX29iamVjdHMgXCRjb21waWxlcl9mbGFncyBcJHt3bH0tc29uYW1lIFwkd2xcJHNvbmFtZSAtbyBcJGxpYiIKK2FyY2hpdmVfZXhwc3ltX2NtZHM9IlwkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgXCRwcmVkZXBfb2JqZWN0cyBcJGxpYm9ianMgXCRkZXBsaWJzIFwkcG9zdGRlcF9vYmplY3RzIFwkY29tcGlsZXJfZmxhZ3MgXCR7d2x9LXNvbmFtZSBcJHdsXCRzb25hbWUgXCR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgXCR3bFwkZXhwb3J0X3N5bWJvbHMgLW8gXCRsaWIiCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSBpZiBkaWZmZXJlbnQgZnJvbSBidWlsZGluZworIyBhIHNoYXJlZCBhcmNoaXZlLgorbW9kdWxlX2NtZHM9IiIKK21vZHVsZV9leHBzeW1fY21kcz0iIgorCisjIFdoZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIHdpdGggR05VIGxkIG9yIG5vdC4KK3dpdGhfZ251X2xkPSJ5ZXMiCisKKyMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCithbGxvd191bmRlZmluZWRfZmxhZz0iIgorCisjIEZsYWcgdGhhdCBlbmZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KK25vX3VuZGVmaW5lZF9mbGFnPSIiCisKKyMgRmxhZyB0byBoYXJkY29kZSAkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisjIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgJGxpYmRpciBkb2VzIG5vdCBleGlzdAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iXCR7d2x9LXJwYXRoIFwke3dsfVwkbGliZGlyIgorCisjIElmIGxkIGlzIHVzZWQgd2hlbiBsaW5raW5nLCBmbGFnIHRvIGhhcmRjb2RlICRsaWJkaXIgaW50byBhIGJpbmFyeQorIyBkdXJpbmcgbGlua2luZy4gIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9IiIKKworIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iIgorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PW5vCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyMgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkgYW5kIHRoZSByZXN1bHRpbmcgbGlicmFyeSBkZXBlbmRlbmN5IGlzCisjICJhYnNvbHV0ZSIsaS5lIGltcG9zc2libGUgdG8gY2hhbmdlIGJ5IHNldHRpbmcgJHtzaGxpYnBhdGhfdmFyfSBpZiB0aGUKKyMgbGlicmFyeSBpcyByZWxvY2F0ZWQuCitoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9bm8KKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfbWludXNfTD1ubworCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyPXVuc3VwcG9ydGVkCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIGxpYnJhcnkgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkCisjIGFnYWluc3QgaXQuCitoYXJkY29kZV9hdXRvbWF0aWM9bm8KKworIyBTZXQgdG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJhcmllcworIyB0byBydW50aW1lIHBhdGggbGlzdC4KK2luaGVyaXRfcnBhdGg9bm8KKworIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCitsaW5rX2FsbF9kZXBsaWJzPXVua25vd24KKworIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlICRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCitmaXhfc3JjZmlsZV9wYXRoPSIiCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCisKKyMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KK2V4cG9ydF9zeW1ib2xzX2NtZHM9IlwkTk0gXCRsaWJvYmpzIFwkY29udmVuaWVuY2UgfCBcJGdsb2JhbF9zeW1ib2xfcGlwZSB8IFwkU0VEICdzLy4qIC8vJyB8IHNvcnQgfCB1bmlxID4gXCRleHBvcnRfc3ltYm9scyIKKworIyBTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzLgorZXhjbHVkZV9leHBzeW1zPSJfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLioiCisKKyMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgoraW5jbHVkZV9leHBzeW1zPSIiCisKKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCitwcmVsaW5rX2NtZHM9IiIKKworIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCitmaWxlX2xpc3Rfc3BlYz0iIgorCisjIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgoraGFyZGNvZGVfYWN0aW9uPWltbWVkaWF0ZQorCisjIFRoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBieSB0aGlzIGNvbXBpbGVyIHdoZW4gY3JlYXRpbmcgYSBzaGFyZWQgbGlicmFyeS4KK2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlycz0iL3Vzci9saWIvZ2NjL3g4Nl82NC1saW51eC1nbnUvNC42IC91c3IvbGliL2djYy94ODZfNjQtbGludXgtZ251LzQuNi8uLi8uLi8uLi94ODZfNjQtbGludXgtZ251IC91c3IvbGliL2djYy94ODZfNjQtbGludXgtZ251LzQuNi8uLi8uLi8uLi8uLi9saWIgL2xpYi94ODZfNjQtbGludXgtZ251IC9saWIvLi4vbGliIC91c3IvbGliL3g4Nl82NC1saW51eC1nbnUgL3Vzci9saWIvLi4vbGliIC91c3IvbGliL2djYy94ODZfNjQtbGludXgtZ251LzQuNi8uLi8uLi8uLiIKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8KKyMgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkuCitwcmVkZXBfb2JqZWN0cz0iL3Vzci9saWIvZ2NjL3g4Nl82NC1saW51eC1nbnUvNC42Ly4uLy4uLy4uL3g4Nl82NC1saW51eC1nbnUvY3J0aS5vIC91c3IvbGliL2djYy94ODZfNjQtbGludXgtZ251LzQuNi9jcnRiZWdpblMubyIKK3Bvc3RkZXBfb2JqZWN0cz0iL3Vzci9saWIvZ2NjL3g4Nl82NC1saW51eC1nbnUvNC42L2NydGVuZFMubyAvdXNyL2xpYi9nY2MveDg2XzY0LWxpbnV4LWdudS80LjYvLi4vLi4vLi4veDg2XzY0LWxpbnV4LWdudS9jcnRuLm8iCitwcmVkZXBzPSIiCitwb3N0ZGVwcz0iLWxzdGRjKysgLWxtIC1sZ2NjX3MgLWxjIC1sZ2NjX3MiCisKKyMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKKyMgYSBzaGFyZWQgbGlicmFyeS4KK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0iLUwvdXNyL2xpYi9nY2MveDg2XzY0LWxpbnV4LWdudS80LjYgLUwvdXNyL2xpYi9nY2MveDg2XzY0LWxpbnV4LWdudS80LjYvLi4vLi4vLi4veDg2XzY0LWxpbnV4LWdudSAtTC91c3IvbGliL2djYy94ODZfNjQtbGludXgtZ251LzQuNi8uLi8uLi8uLi8uLi9saWIgLUwvbGliL3g4Nl82NC1saW51eC1nbnUgLUwvbGliLy4uL2xpYiAtTC91c3IvbGliL3g4Nl82NC1saW51eC1nbnUgLUwvdXNyL2xpYi8uLi9saWIgLUwvdXNyL2xpYi9nY2MveDg2XzY0LWxpbnV4LWdudS80LjYvLi4vLi4vLi4iCisKKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6IENYWAorCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IEY3NworCisjIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCitMRD0iIgorCisjIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCityZWxvYWRfZmxhZz0iIC1yIgorcmVsb2FkX2NtZHM9IlwkTERcJHJlbG9hZF9mbGFnIC1vIFwkb3V0cHV0XCRyZWxvYWRfb2JqcyIKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgorb2xkX2FyY2hpdmVfY21kcz0iXCRBUiBcJEFSX0ZMQUdTIFwkb2xkbGliXCRvbGRvYmpzflwkUkFOTElCIFwkb2xkbGliIgorCisjIEEgbGFuZ3VhZ2Ugc3BlY2lmaWMgY29tcGlsZXIuCitDQz0iIgorCisjIElzIHRoZSBjb21waWxlciB0aGUgR05VIGNvbXBpbGVyPword2l0aF9nY2M9CisKKyMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KK25vX2J1aWx0aW5fZmxhZz0iIgorCisjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCit3bD0iIgorCisjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KK3BpY19mbGFnPSIiCisKKyMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KK2xpbmtfc3RhdGljX2ZsYWc9IiIKKworIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/Citjb21waWxlcl9jX289IiIKKworIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9uZWVkX2xjPW5vCisKKyMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYy4KK2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz1ubworCisjIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9IiIKKworIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0iIgorCisjIFdoZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5LgorY29tcGlsZXJfbmVlZHNfb2JqZWN0PSIiCisKKyMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9IiIKKworIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0iIgorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZS4KK2FyY2hpdmVfY21kcz0iIgorYXJjaGl2ZV9leHBzeW1fY21kcz0iIgorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVpbGRpbmcKKyMgYSBzaGFyZWQgYXJjaGl2ZS4KK21vZHVsZV9jbWRzPSIiCittb2R1bGVfZXhwc3ltX2NtZHM9IiIKKworIyBXaGV0aGVyIHdlIGFyZSBidWlsZGluZyB3aXRoIEdOVSBsZCBvciBub3QuCit3aXRoX2dudV9sZD0iIgorCisjIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgorYWxsb3dfdW5kZWZpbmVkX2ZsYWc9IiIKKworIyBGbGFnIHRoYXQgZW5mb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCitub191bmRlZmluZWRfZmxhZz0iIgorCisjIEZsYWcgdG8gaGFyZGNvZGUgJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorIyBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3QKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiIKKworIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSAkbGliZGlyIGludG8gYSBiaW5hcnkKKyMgZHVyaW5nIGxpbmtpbmcuICBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSIiCisKKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiIKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX2RpcmVjdD1ubworCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcworIyAiYWJzb2x1dGUiLGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nICR7c2hsaWJwYXRoX3Zhcn0gaWYgdGhlCisjIGxpYnJhcnkgaXMgcmVsb2NhdGVkLgoraGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPW5vCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX21pbnVzX0w9bm8KKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0KKworIyBTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKKyMgYWdhaW5zdCBpdC4KK2hhcmRjb2RlX2F1dG9tYXRpYz1ubworCisjIFNldCB0byB5ZXMgaWYgbGlua2VyIGFkZHMgcnVudGltZSBwYXRocyBvZiBkZXBlbmRlbnQgbGlicmFyaWVzCisjIHRvIHJ1bnRpbWUgcGF0aCBsaXN0LgoraW5oZXJpdF9ycGF0aD1ubworCisjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KK2xpbmtfYWxsX2RlcGxpYnM9dW5rbm93bgorCisjIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KK2ZpeF9zcmNmaWxlX3BhdGg9IiIKKworIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCithbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKworIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgorZXhwb3J0X3N5bWJvbHNfY21kcz0iIgorCisjIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCitleGNsdWRlX2V4cHN5bXM9IiIKKworIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCitpbmNsdWRlX2V4cHN5bXM9IiIKKworIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KK3ByZWxpbmtfY21kcz0iIgorCisjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KK2ZpbGVfbGlzdF9zcGVjPSIiCisKKyMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCitoYXJkY29kZV9hY3Rpb249CisKKyMgVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5LgorY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSIiCisKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvCisjIGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5LgorcHJlZGVwX29iamVjdHM9IiIKK3Bvc3RkZXBfb2JqZWN0cz0iIgorcHJlZGVwcz0iIgorcG9zdGRlcHM9IiIKKworIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZworIyBhIHNoYXJlZCBsaWJyYXJ5LgorY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSIiCisKKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6IEY3NworCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IEZDCisKKyMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KK0xEPSIiCisKKyMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KK3JlbG9hZF9mbGFnPSIgLXIiCityZWxvYWRfY21kcz0iXCRMRFwkcmVsb2FkX2ZsYWcgLW8gXCRvdXRwdXRcJHJlbG9hZF9vYmpzIgorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9jbWRzPSJcJEFSIFwkQVJfRkxBR1MgXCRvbGRsaWJcJG9sZG9ianN+XCRSQU5MSUIgXCRvbGRsaWIiCisKKyMgQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlci4KK0NDPSIiCisKKyMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgY29tcGlsZXI/Cit3aXRoX2djYz0KKworIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorbm9fYnVpbHRpbl9mbGFnPSIiCisKKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KK3dsPSIiCisKKyMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorcGljX2ZsYWc9IiIKKworIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorbGlua19zdGF0aWNfZmxhZz0iIgorCisjIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KK2NvbXBpbGVyX2Nfbz0iIgorCisjIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX25lZWRfbGM9bm8KKworIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljLgorYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPW5vCisKKyMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0iIgorCisjIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSIiCisKKyMgV2hldGhlciB0aGUgY29tcGlsZXIgY29wZXMgd2l0aCBwYXNzaW5nIG5vIG9iamVjdHMgZGlyZWN0bHkuCitjb21waWxlcl9uZWVkc19vYmplY3Q9IiIKKworIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0iIgorCisjIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSIiCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIHNoYXJlZCBhcmNoaXZlLgorYXJjaGl2ZV9jbWRzPSIiCithcmNoaXZlX2V4cHN5bV9jbWRzPSIiCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSBpZiBkaWZmZXJlbnQgZnJvbSBidWlsZGluZworIyBhIHNoYXJlZCBhcmNoaXZlLgorbW9kdWxlX2NtZHM9IiIKK21vZHVsZV9leHBzeW1fY21kcz0iIgorCisjIFdoZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIHdpdGggR05VIGxkIG9yIG5vdC4KK3dpdGhfZ251X2xkPSIiCisKKyMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCithbGxvd191bmRlZmluZWRfZmxhZz0iIgorCisjIEZsYWcgdGhhdCBlbmZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KK25vX3VuZGVmaW5lZF9mbGFnPSIiCisKKyMgRmxhZyB0byBoYXJkY29kZSAkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisjIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgJGxpYmRpciBkb2VzIG5vdCBleGlzdAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iIgorCisjIElmIGxkIGlzIHVzZWQgd2hlbiBsaW5raW5nLCBmbGFnIHRvIGhhcmRjb2RlICRsaWJkaXIgaW50byBhIGJpbmFyeQorIyBkdXJpbmcgbGlua2luZy4gIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9IiIKKworIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iIgorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PW5vCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyMgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkgYW5kIHRoZSByZXN1bHRpbmcgbGlicmFyeSBkZXBlbmRlbmN5IGlzCisjICJhYnNvbHV0ZSIsaS5lIGltcG9zc2libGUgdG8gY2hhbmdlIGJ5IHNldHRpbmcgJHtzaGxpYnBhdGhfdmFyfSBpZiB0aGUKKyMgbGlicmFyeSBpcyByZWxvY2F0ZWQuCitoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9bm8KKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfbWludXNfTD1ubworCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyPQorCisjIFNldCB0byAieWVzIiBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAorIyBhZ2FpbnN0IGl0LgoraGFyZGNvZGVfYXV0b21hdGljPW5vCisKKyMgU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKKyMgdG8gcnVudGltZSBwYXRoIGxpc3QuCitpbmhlcml0X3JwYXRoPW5vCisKKyMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorbGlua19hbGxfZGVwbGlicz11bmtub3duCisKKyMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSAkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorZml4X3NyY2ZpbGVfcGF0aD0iIgorCisjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KK2Fsd2F5c19leHBvcnRfc3ltYm9scz1ubworCisjIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCitleHBvcnRfc3ltYm9sc19jbWRzPSIiCisKKyMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KK2V4Y2x1ZGVfZXhwc3ltcz0iIgorCisjIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KK2luY2x1ZGVfZXhwc3ltcz0iIgorCisjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorcHJlbGlua19jbWRzPSIiCisKKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorZmlsZV9saXN0X3NwZWM9IiIKKworIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KK2hhcmRjb2RlX2FjdGlvbj0KKworIyBUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnkuCitjb21waWxlcl9saWJfc2VhcmNoX2RpcnM9IiIKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8KKyMgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkuCitwcmVkZXBfb2JqZWN0cz0iIgorcG9zdGRlcF9vYmplY3RzPSIiCitwcmVkZXBzPSIiCitwb3N0ZGVwcz0iIgorCisjIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCisjIGEgc2hhcmVkIGxpYnJhcnkuCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGg9IiIKKworIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogRkMKKworIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiBHQ0oKKworIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgorTEQ9Ii91c3IvYmluL2xkIC1tIGVsZl94ODZfNjQiCisKKyMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KK3JlbG9hZF9mbGFnPSIgLXIiCityZWxvYWRfY21kcz0iXCRMRFwkcmVsb2FkX2ZsYWcgLW8gXCRvdXRwdXRcJHJlbG9hZF9vYmpzIgorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9jbWRzPSJcJEFSIFwkQVJfRkxBR1MgXCRvbGRsaWJcJG9sZG9ianN+XCRSQU5MSUIgXCRvbGRsaWIiCisKKyMgQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlci4KK0NDPSIiCisKKyMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgY29tcGlsZXI/Cit3aXRoX2djYz0KKworIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorbm9fYnVpbHRpbl9mbGFnPSIiCisKKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KK3dsPSIiCisKKyMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorcGljX2ZsYWc9IiIKKworIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorbGlua19zdGF0aWNfZmxhZz0iIgorCisjIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KK2NvbXBpbGVyX2Nfbz0iIgorCisjIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX25lZWRfbGM9bm8KKworIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljLgorYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPQorCisjIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9IiIKKworIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0iIgorCisjIFdoZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5LgorY29tcGlsZXJfbmVlZHNfb2JqZWN0PSIiCisKKyMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9IiIKKworIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0iIgorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZS4KK2FyY2hpdmVfY21kcz0iIgorYXJjaGl2ZV9leHBzeW1fY21kcz0iIgorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVpbGRpbmcKKyMgYSBzaGFyZWQgYXJjaGl2ZS4KK21vZHVsZV9jbWRzPSIiCittb2R1bGVfZXhwc3ltX2NtZHM9IiIKKworIyBXaGV0aGVyIHdlIGFyZSBidWlsZGluZyB3aXRoIEdOVSBsZCBvciBub3QuCit3aXRoX2dudV9sZD0iIgorCisjIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgorYWxsb3dfdW5kZWZpbmVkX2ZsYWc9IiIKKworIyBGbGFnIHRoYXQgZW5mb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCitub191bmRlZmluZWRfZmxhZz0iIgorCisjIEZsYWcgdG8gaGFyZGNvZGUgJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorIyBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3QKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiIKKworIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSAkbGliZGlyIGludG8gYSBiaW5hcnkKKyMgZHVyaW5nIGxpbmtpbmcuICBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSIiCisKKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiIKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX2RpcmVjdD0KKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKKyMgImFic29sdXRlIixpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyAke3NobGlicGF0aF92YXJ9IGlmIHRoZQorIyBsaWJyYXJ5IGlzIHJlbG9jYXRlZC4KK2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT0KKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfbWludXNfTD0KKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0KKworIyBTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKKyMgYWdhaW5zdCBpdC4KK2hhcmRjb2RlX2F1dG9tYXRpYz0KKworIyBTZXQgdG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJhcmllcworIyB0byBydW50aW1lIHBhdGggbGlzdC4KK2luaGVyaXRfcnBhdGg9CisKKyMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorbGlua19hbGxfZGVwbGlicz0KKworIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlICRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCitmaXhfc3JjZmlsZV9wYXRoPSIiCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorYWx3YXlzX2V4cG9ydF9zeW1ib2xzPQorCisjIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCitleHBvcnRfc3ltYm9sc19jbWRzPSIiCisKKyMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KK2V4Y2x1ZGVfZXhwc3ltcz0iIgorCisjIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KK2luY2x1ZGVfZXhwc3ltcz0iIgorCisjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorcHJlbGlua19jbWRzPSIiCisKKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorZmlsZV9saXN0X3NwZWM9IiIKKworIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KK2hhcmRjb2RlX2FjdGlvbj0KKworIyBUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnkuCitjb21waWxlcl9saWJfc2VhcmNoX2RpcnM9IiIKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8KKyMgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkuCitwcmVkZXBfb2JqZWN0cz0iIgorcG9zdGRlcF9vYmplY3RzPSIiCitwcmVkZXBzPSIiCitwb3N0ZGVwcz0iIgorCisjIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCisjIGEgc2hhcmVkIGxpYnJhcnkuCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGg9IiIKKworIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogR0NKCisKKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogUkMKKworIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgorTEQ9IiIKKworIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgorcmVsb2FkX2ZsYWc9IiIKK3JlbG9hZF9jbWRzPSIiCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2NtZHM9IiIKKworIyBBIGxhbmd1YWdlIHNwZWNpZmljIGNvbXBpbGVyLgorQ0M9IiIKKworIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBjb21waWxlcj8KK3dpdGhfZ2NjPQorCisjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCitub19idWlsdGluX2ZsYWc9IiIKKworIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgord2w9IiIKKworIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCitwaWNfZmxhZz0iIgorCisjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCitsaW5rX3N0YXRpY19mbGFnPSIiCisKKyMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPworY29tcGlsZXJfY19vPSJ5ZXMiCisKKyMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KK2J1aWxkX2xpYnRvb2xfbmVlZF9sYz0KKworIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljLgorYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPQorCisjIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9IiIKKworIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0iIgorCisjIFdoZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5LgorY29tcGlsZXJfbmVlZHNfb2JqZWN0PSIiCisKKyMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9IiIKKworIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0iIgorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZS4KK2FyY2hpdmVfY21kcz0iIgorYXJjaGl2ZV9leHBzeW1fY21kcz0iIgorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVpbGRpbmcKKyMgYSBzaGFyZWQgYXJjaGl2ZS4KK21vZHVsZV9jbWRzPSIiCittb2R1bGVfZXhwc3ltX2NtZHM9IiIKKworIyBXaGV0aGVyIHdlIGFyZSBidWlsZGluZyB3aXRoIEdOVSBsZCBvciBub3QuCit3aXRoX2dudV9sZD0iIgorCisjIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgorYWxsb3dfdW5kZWZpbmVkX2ZsYWc9IiIKKworIyBGbGFnIHRoYXQgZW5mb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCitub191bmRlZmluZWRfZmxhZz0iIgorCisjIEZsYWcgdG8gaGFyZGNvZGUgJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorIyBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3QKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiIKKworIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSAkbGliZGlyIGludG8gYSBiaW5hcnkKKyMgZHVyaW5nIGxpbmtpbmcuICBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSIiCisKKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiIKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX2RpcmVjdD0KKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKKyMgImFic29sdXRlIixpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyAke3NobGlicGF0aF92YXJ9IGlmIHRoZQorIyBsaWJyYXJ5IGlzIHJlbG9jYXRlZC4KK2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT0KKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfbWludXNfTD0KKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0KKworIyBTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKKyMgYWdhaW5zdCBpdC4KK2hhcmRjb2RlX2F1dG9tYXRpYz0KKworIyBTZXQgdG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJhcmllcworIyB0byBydW50aW1lIHBhdGggbGlzdC4KK2luaGVyaXRfcnBhdGg9CisKKyMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorbGlua19hbGxfZGVwbGlicz0KKworIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlICRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCitmaXhfc3JjZmlsZV9wYXRoPSIiCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorYWx3YXlzX2V4cG9ydF9zeW1ib2xzPQorCisjIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCitleHBvcnRfc3ltYm9sc19jbWRzPSIiCisKKyMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KK2V4Y2x1ZGVfZXhwc3ltcz0iIgorCisjIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KK2luY2x1ZGVfZXhwc3ltcz0iIgorCisjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorcHJlbGlua19jbWRzPSIiCisKKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorZmlsZV9saXN0X3NwZWM9IiIKKworIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KK2hhcmRjb2RlX2FjdGlvbj0KKworIyBUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnkuCitjb21waWxlcl9saWJfc2VhcmNoX2RpcnM9IiIKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8KKyMgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkuCitwcmVkZXBfb2JqZWN0cz0iIgorcG9zdGRlcF9vYmplY3RzPSIiCitwcmVkZXBzPSIiCitwb3N0ZGVwcz0iIgorCisjIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCisjIGEgc2hhcmVkIGxpYnJhcnkuCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGg9IiIKKworIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogUkMKZGlmZiAtLWdpdCBhL2Jpbi9saWJ0b29saXplIGIvYmluL2xpYnRvb2xpemUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTQ3YmEzMAotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9saWJ0b29saXplCkBAIC0wLDAgKzEsMjQwMiBAQAorIyEgL2Jpbi9zaAorIyBHZW5lcmF0ZWQgZnJvbSBsaWJ0b29saXplLm00c2ggYnkgR05VIEF1dG9jb25mIDIuNjUuCisjIEdlbmVyYXRlZCBmcm9tIGxpYnRvb2xpemUubTRzaC4KKworIyBsaWJ0b29saXplIChHTlUgbGlidG9vbCkgMi4yLjEwCisjIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuIDxnYXJ5QGdudS5vcmc+LCAyMDAzCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTworIyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworIyBMaWJ0b29saXplIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgTGlidG9vbGl6ZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggbGlidG9vbGl6ZTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIGEgY29weQorIyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbCwKKyMgb3Igb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworIyBVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uCisjCisjIFByZXBhcmUgYSBwYWNrYWdlIHRvIHVzZSBsaWJ0b29sLgorIworIyAgIC1jLCAtLWNvcHkgICAgICAgICAgY29weSBmaWxlcyByYXRoZXIgdGhhbiBzeW1saW5raW5nIHRoZW0KKyMgICAgICAgLS1kZWJ1ZyAgICAgICAgIGVuYWJsZSB2ZXJib3NlIHNoZWxsIHRyYWNpbmcKKyMgICAtbiwgLS1kcnktcnVuICAgICAgIHByaW50IGNvbW1hbmRzIHJhdGhlciB0aGFuIHJ1bm5pbmcgdGhlbQorIyAgIC1mLCAtLWZvcmNlICAgICAgICAgcmVwbGFjZSBleGlzdGluZyBmaWxlcworIyAgIC1pLCAtLWluc3RhbGwgICAgICAgY29weSBtaXNzaW5nIGF1eGlsaWFyeSBmaWxlcworIyAgICAgICAtLWx0ZGxbPURJUl0gICAgaW5zdGFsbCBsaWJsdGRsIHNvdXJjZXMgW2RlZmF1bHQ6IGxpYmx0ZGxdCisjICAgICAgIC0tbm8td2FybiAgICAgICBkb24ndCBkaXNwbGF5IHdhcm5pbmcgbWVzc2FnZXMKKyMgICAgICAgLS1ub25yZWN1cnNpdmUgIHByZXBhcmUgbHRkbCBmb3Igbm9uLXJlY3Vyc2l2ZSBtYWtlCisjICAgLXEsIC0tcXVpZXQgICAgICAgICB3b3JrIHNpbGVudGx5CisjICAgICAgIC0tcmVjdXJzaXZlICAgICBwcmVwYXJlIGx0ZGwgZm9yIHJlY3Vyc2l2ZSBtYWtlCisjICAgICAgIC0tc3VicHJvamVjdCAgICBwcmVwYXJlIGx0ZGwgdG8gY29uZmlndXJlIGFuZCBidWlsZCBpbmRlcGVuZGVudGx5CisjICAgLXYsIC0tdmVyYm9zZSAgICAgICB2ZXJib3NlbHkgcmVwb3J0IHByb2Nlc3NpbmcKKyMgICAgICAgLS12ZXJzaW9uICAgICAgIHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKyMgICAtaCwgLS1oZWxwICAgICAgICAgIHByaW50IHNob3J0IG9yIGxvbmcgaGVscCBtZXNzYWdlCisjCisjIFRoZSBmb2xsb3dpbmcgc3BhY2Ugb3IgY29tbWEgZGVsaW1pdGVkIG9wdGlvbnMgY2FuIGJlIHBhc3NlZCB0byAkcHJvZ25hbWUKKyMgdmlhIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMSUJUT09MSVpFX09QVElPTlMsIHVua25vd24gZW52aXJvbm1lbnQKKyMgb3B0aW9ucyBhcmUgaWdub3JlZDoKKyMKKyMgICAtLWRlYnVnICAgICAgICAgICAgIGVuYWJsZSB2ZXJib3NlIHNoZWxsIHRyYWNpbmcKKyMgICAtLW5vLXdhcm4gICAgICAgICAgIGRvbid0IGRpc3BsYXkgd2FybmluZyBtZXNzYWdlcworIyAgIC0tcXVpZXQgICAgICAgICAgICAgd29yayBzaWxlbnRseQorIyAgIC0tdmVyYm9zZSAgICAgICAgICAgdmVyYm9zZWx5IHJlcG9ydCBwcm9jZXNzaW5nCisjCisjIFlvdSBtdXN0IGBjZCcgdG8gdGhlIHRvcCBkaXJlY3Rvcnkgb2YgeW91ciBwYWNrYWdlIGJlZm9yZSB5b3UgcnVuCisjIGAkcHJvZ25hbWUnLgorIworIyBXaGVuIHJlcG9ydGluZyBhIGJ1ZywgcGxlYXNlIGRlc2NyaWJlIGEgdGVzdCBjYXNlIHRvIHJlcHJvZHVjZSBpdCBhbmQKKyMgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorIworIyAgICAgICBob3N0LXRyaXBsZXQ6CXg4Nl82NC11bmtub3duLWxpbnV4LWdudQorIyAgICAgICAkcHJvZ25hbWU6CShHTlUgbGlidG9vbCkgMi4yLjEwCisjICAgICAgIGF1dG9tYWtlOgkJJGF1dG9tYWtlX3ZlcnNpb24KKyMgICAgICAgYXV0b2NvbmY6CQkkYXV0b2NvbmZfdmVyc2lvbgorIworIyBSZXBvcnQgYnVncyB0byA8YnVnLWxpYnRvb2xAZ251Lm9yZz4uCisKKzogJHtUQVI9dGFyfQorCitQUk9HUkFNPWxpYnRvb2xpemUKKworIyBXb3JrIGFyb3VuZCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGlzc3VlIG9uIElSSVggNi41LiBPbiBJUklYIDYuNCssIHNoCisjIGlzIGtzaCBidXQgd2hlbiB0aGUgc2hlbGwgaXMgaW52b2tlZCBhcyAic2giIGFuZCB0aGUgY3VycmVudCB2YWx1ZSBvZgorIyB0aGUgX1hQRyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3QgZXF1YWwgdG8gMSAob25lKSwgdGhlIHNwZWNpYWwKKyMgcG9zaXRpb25hbCBwYXJhbWV0ZXIgJDAsIHdpdGhpbiBhIGZ1bmN0aW9uIGNhbGwsIGlzIHRoZSBuYW1lIG9mIHRoZQorIyBmdW5jdGlvbi4KK3Byb2dwYXRoPSIkMCIKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggSW5pdGlhbGl6YXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYworZmkKKworCithc19ubD0nCisnCitleHBvcnQgYXNfbmwKKyMgUHJpbnRpbmcgYSBsb25nIHN0cmluZyBjcmFzaGVzIFNvbGFyaXMgNyAvdXNyL2Jpbi9wcmludGYuCithc19lY2hvPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworIyBQcmVmZXIgYSBrc2ggc2hlbGwgYnVpbHRpbiBvdmVyIGFuIGV4dGVybmFsIHByaW50ZiBwcm9ncmFtIG9uIFNvbGFyaXMsCisjIGJ1dCB3aXRob3V0IHdhc3RpbmcgZm9ya3MgZm9yIGJhc2ggb3IgenNoLgoraWYgdGVzdCAteiAiJEJBU0hfVkVSU0lPTiRaU0hfVkVSU0lPTiIgXAorICAgICYmICh0ZXN0ICJYYHByaW50IC1yIC0tICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnQgLXIgLS0nCisgIGFzX2VjaG9fbj0ncHJpbnQgLXJuIC0tJworZWxpZiAodGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludGYgJXNcbicKKyAgYXNfZWNob19uPSdwcmludGYgJXMnCitlbHNlCisgIGlmIHRlc3QgIlhgKC91c3IvdWNiL2VjaG8gLW4gLW4gJGFzX2VjaG8pIDI+L2Rldi9udWxsYCIgPSAiWC1uICRhc19lY2hvIjsgdGhlbgorICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkMSRhc19ubCInCisgICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJworICBlbHNlCisgICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKKyAgICBhc19lY2hvX25fYm9keT0nZXZhbAorICAgICAgYXJnPSQxOworICAgICAgY2FzZSAkYXJnIGluICMoCisgICAgICAqIiRhc19ubCIqKQorCWV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkkYXNfbmwiOworCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7CisgICAgICBlc2FjOworICAgICAgZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSIgfCB0ciAtZCAiJGFzX25sIgorICAgICcKKyAgICBleHBvcnQgYXNfZWNob19uX2JvZHkKKyAgICBhc19lY2hvX249J3NoIC1jICRhc19lY2hvX25fYm9keSBhc19lY2hvJworICBmaQorICBleHBvcnQgYXNfZWNob19ib2R5CisgIGFzX2VjaG89J3NoIC1jICRhc19lY2hvX2JvZHkgYXNfZWNobycKK2ZpCisKKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSAmJiB7CisgICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKKyAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICB9CitmaQorCisKKyMgSUZTCisjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCisjIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKKyMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKK0lGUz0iICIiCSRhc19ubCIKKworIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KK2Nhc2UgJDAgaW4gIygoCisgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKyAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICAgICA7OworZXNhYworIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCitpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCisgIGFzX215c2VsZj0kMAorZmkKK2lmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKKyAgZXhpdCAxCitmaQorCisjIFVuc2V0IHZhcmlhYmxlcyB0aGF0IHdlIGRvIG5vdCBuZWVkIGFuZCB3aGljaCBjYXVzZSBidWdzIChlLmcuIGluCisjIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVzZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiCisjIHN1cHByZXNzZXMgYW55ICJTZWdtZW50YXRpb24gZmF1bHQiIG1lc3NhZ2UgdGhlcmUuICAnKCgnIGNvdWxkCisjIHRyaWdnZXIgYSBidWcgaW4gcGRrc2ggNS4yLjE0LgorZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBNQUlMUEFUSAorZG8gZXZhbCB0ZXN0IHhcJHskYXNfdmFyK3NldH0gPSB4c2V0IFwKKyAgJiYgKCAodW5zZXQgJGFzX3ZhcikgfHwgZXhpdCAxKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgJGFzX3ZhciB8fCA6Citkb25lCitQUzE9JyQgJworUFMyPSc+ICcKK1BTND0nKyAnCisKKyMgTkxTIG51aXNhbmNlcy4KK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCitMQU5HVUFHRT1DCitleHBvcnQgTEFOR1VBR0UKKworIyBDRFBBVEguCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK2lmIHRlc3QgIngkQ09ORklHX1NIRUxMIiA9IHg7IHRoZW4KKyAgYXNfYm91cm5lX2NvbXBhdGlibGU9ImlmIHRlc3QgLW4gXCJcJHtaU0hfVkVSU0lPTitzZXR9XCIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gXCR7MStcIlwkQFwifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJ1wkezErXCJcJEBcIn0nPSdcIlwkQFwiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIFxgKHNldCAtbykgMj4vZGV2L251bGxcYCBpbiAjKAorICAqcG9zaXgqKSA6CisgICAgc2V0IC1vIHBvc2l4IDs7ICMoCisgICopIDoKKyAgICAgOzsKK2VzYWMKK2ZpCisiCisgIGFzX3JlcXVpcmVkPSJhc19mbl9yZXR1cm4gKCkgeyAoZXhpdCBcJDEpOyB9Cithc19mbl9zdWNjZXNzICgpIHsgYXNfZm5fcmV0dXJuIDA7IH0KK2FzX2ZuX2ZhaWx1cmUgKCkgeyBhc19mbl9yZXR1cm4gMTsgfQorYXNfZm5fcmV0X3N1Y2Nlc3MgKCkgeyByZXR1cm4gMDsgfQorYXNfZm5fcmV0X2ZhaWx1cmUgKCkgeyByZXR1cm4gMTsgfQorCitleGl0Y29kZT0wCithc19mbl9zdWNjZXNzIHx8IHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9zdWNjZXNzIGZhaWxlZC47IH0KK2FzX2ZuX2ZhaWx1cmUgJiYgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX2ZhaWx1cmUgc3VjY2VlZGVkLjsgfQorYXNfZm5fcmV0X3N1Y2Nlc3MgfHwgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3JldF9zdWNjZXNzIGZhaWxlZC47IH0KK2FzX2ZuX3JldF9mYWlsdXJlICYmIHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9yZXRfZmFpbHVyZSBzdWNjZWVkZWQuOyB9CitpZiAoIHNldCB4OyBhc19mbl9yZXRfc3VjY2VzcyB5ICYmIHRlc3QgeCA9IFwiXCQxXCIgKTsgdGhlbiA6CisKK2Vsc2UKKyAgZXhpdGNvZGU9MTsgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCitmaQordGVzdCB4XCRleGl0Y29kZSA9IHgwIHx8IGV4aXQgMSIKKyAgYXNfc3VnZ2VzdGVkPSIiCisgIGlmIChldmFsICIkYXNfcmVxdWlyZWQiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCitlbHNlCisgIGFzX2hhdmVfcmVxdWlyZWQ9bm8KK2ZpCisgIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geHllcyAmJiAoZXZhbCAiJGFzX3N1Z2dlc3RlZCIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKworZWxzZQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCithc19mb3VuZD1mYWxzZQorZm9yIGFzX2RpciBpbiAvYmluJFBBVEhfU0VQQVJBVE9SL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBhc19mb3VuZD06CisgIGNhc2UgJGFzX2RpciBpbiAjKAorCSAvKikKKwkgICBmb3IgYXNfYmFzZSBpbiBzaCBiYXNoIGtzaCBzaDU7IGRvCisJICAgICAjIFRyeSBvbmx5IHNoZWxscyB0aGF0IGV4aXN0LCB0byBzYXZlIHNldmVyYWwgZm9ya3MuCisJICAgICBhc19zaGVsbD0kYXNfZGlyLyRhc19iYXNlCisJICAgICBpZiB7IHRlc3QgLWYgIiRhc19zaGVsbCIgfHwgdGVzdCAtZiAiJGFzX3NoZWxsLmV4ZSI7IH0gJiYKKwkJICAgIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3JlcXVpcmVkIiB8IGFzX3J1bj1hICIkYXNfc2hlbGwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgQ09ORklHX1NIRUxMPSRhc19zaGVsbCBhc19oYXZlX3JlcXVpcmVkPXllcworCQkgICBicmVhayAyCitmaQorCSAgIGRvbmU7OworICAgICAgIGVzYWMKKyAgYXNfZm91bmQ9ZmFsc2UKK2RvbmUKKyRhc19mb3VuZCB8fCB7IGlmIHsgdGVzdCAtZiAiJFNIRUxMIiB8fCB0ZXN0IC1mICIkU0hFTEwuZXhlIjsgfSAmJgorCSAgICAgIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3JlcXVpcmVkIiB8IGFzX3J1bj1hICIkU0hFTEwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgQ09ORklHX1NIRUxMPSRTSEVMTCBhc19oYXZlX3JlcXVpcmVkPXllcworZmk7IH0KK0lGUz0kYXNfc2F2ZV9JRlMKKworCisgICAgICBpZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgIT0geDsgdGhlbiA6CisgICMgV2UgY2Fubm90IHlldCBhc3N1bWUgYSBkZWNlbnQgc2hlbGwsIHNvIHdlIGhhdmUgdG8gcHJvdmlkZSBhCisJIyBuZXV0cmFsaXphdGlvbiB2YWx1ZSBmb3Igc2hlbGxzIHdpdGhvdXQgdW5zZXQ7IGFuZCB0aGlzIGFsc28KKwkjIHdvcmtzIGFyb3VuZCBzaGVsbHMgdGhhdCBjYW5ub3QgdW5zZXQgbm9uZXhpc3RlbnQgdmFyaWFibGVzLgorCUJBU0hfRU5WPS9kZXYvbnVsbAorCUVOVj0vZGV2L251bGwKKwkodW5zZXQgQkFTSF9FTlYpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBCQVNIX0VOViBFTlYKKwlleHBvcnQgQ09ORklHX1NIRUxMCisJZXhlYyAiJENPTkZJR19TSEVMTCIgIiRhc19teXNlbGYiICR7MSsiJEAifQorZmkKKworICAgIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geG5vOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiQwOiBUaGlzIHNjcmlwdCByZXF1aXJlcyBhIHNoZWxsIG1vcmUgbW9kZXJuIHRoYW4gYWxsIgorICAkYXNfZWNobyAiJDA6IHRoZSBzaGVsbHMgdGhhdCBJIGZvdW5kIG9uIHlvdXIgc3lzdGVtLiIKKyAgaWYgdGVzdCB4JHtaU0hfVkVSU0lPTitzZXR9ID0geHNldCA7IHRoZW4KKyAgICAkYXNfZWNobyAiJDA6IEluIHBhcnRpY3VsYXIsIHpzaCAkWlNIX1ZFUlNJT04gaGFzIGJ1Z3MgYW5kIHNob3VsZCIKKyAgICAkYXNfZWNobyAiJDA6IGJlIHVwZ3JhZGVkIHRvIHpzaCA0LjMuNCBvciBsYXRlci4iCisgIGVsc2UKKyAgICAkYXNfZWNobyAiJDA6IFBsZWFzZSB0ZWxsIGJ1Zy1hdXRvY29uZkBnbnUub3JnIGFib3V0IHlvdXIgc3lzdGVtLAorJDA6IGluY2x1ZGluZyBhbnkgZXJyb3IgcG9zc2libHkgb3V0cHV0IGJlZm9yZSB0aGlzCiskMDogbWVzc2FnZS4gVGhlbiBpbnN0YWxsIGEgbW9kZXJuIHNoZWxsLCBvciBtYW51YWxseSBydW4KKyQwOiB0aGUgc2NyaXB0IHVuZGVyIHN1Y2ggYSBzaGVsbCBpZiB5b3UgZG8gaGF2ZSBvbmUuIgorICBmaQorICBleGl0IDEKK2ZpCitmaQorZmkKK1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CitleHBvcnQgU0hFTEwKKyMgVW5zZXQgbW9yZSB2YXJpYWJsZXMga25vd24gdG8gaW50ZXJmZXJlIHdpdGggYmVoYXZpb3Igb2YgY29tbW9uIHRvb2xzLgorQ0xJQ09MT1JfRk9SQ0U9IEdSRVBfT1BUSU9OUz0KK3Vuc2V0IENMSUNPTE9SX0ZPUkNFIEdSRVBfT1BUSU9OUworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggU2hlbGwgRnVuY3Rpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIGFzX2ZuX3Vuc2V0IFZBUgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgUG9ydGFibHkgdW5zZXQgVkFSLgorYXNfZm5fdW5zZXQgKCkKK3sKKyAgeyBldmFsICQxPTsgdW5zZXQgJDE7fQorfQorYXNfdW5zZXQ9YXNfZm5fdW5zZXQKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNYWluIGJvZHkgb2Ygc2NyaXB0LiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisKKworOiAke0NQPSJjcCAtZiJ9Cit0ZXN0ICIke0VDSE8rc2V0fSIgPSBzZXQgfHwgRUNITz0ke2FzX2VjaG8tJ3ByaW50ZiAlc1xuJ30KKzogJHtFR1JFUD0iL2Jpbi9ncmVwIC1FIn0KKzogJHtGR1JFUD0iL2Jpbi9ncmVwIC1GIn0KKzogJHtHUkVQPSIvYmluL2dyZXAifQorOiAke0xOX1M9ImxuIC1zIn0KKzogJHtNQUtFPSJtYWtlIn0KKzogJHtNS0RJUj0ibWtkaXIifQorOiAke01WPSJtdiAtZiJ9Cis6ICR7Uk09InJtIC1mIn0KKzogJHtTRUQ9Ii9iaW4vc2VkIn0KKzogJHtTSEVMTD0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0ifQorOiAke1hzZWQ9IiRTRUQgLWUgMXMvXlgvLyJ9CisKKyMgR2xvYmFsIHZhcmlhYmxlczoKK0VYSVRfU1VDQ0VTUz0wCitFWElUX0ZBSUxVUkU9MQorRVhJVF9NSVNNQVRDSD02MyAgIyAkPyA9IDYzIGlzIHVzZWQgdG8gaW5kaWNhdGUgdmVyc2lvbiBtaXNtYXRjaCB0byBtaXNzaW5nLgorRVhJVF9TS0lQPTc3CSAgIyAkPyA9IDc3IGlzIHVzZWQgdG8gaW5kaWNhdGUgYSBza2lwcGVkIHRlc3QgdG8gYXV0b21ha2UuCisKK2V4aXRfc3RhdHVzPSRFWElUX1NVQ0NFU1MKKworIyBNYWtlIHN1cmUgSUZTIGhhcyBhIHNlbnNpYmxlIGRlZmF1bHQKK2x0X25sPScKKycKK0lGUz0iIAkkbHRfbmwiCisKK2Rpcm5hbWU9InMsL1teL10qJCwsIgorYmFzZW5hbWU9InMsXi4qLywsIgorCisjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CisjIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCisjIGNhbGw6CisjICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CisjICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQorIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCitmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCit7CisgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgLWUgIiRkaXJuYW1lImAKKyAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorICBlbHNlCisgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorICBmaQorICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAtZSAiJGJhc2VuYW1lImAKK30KKworIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUuCisKKyMgVGhlc2UgU0VEIHNjcmlwdHMgcHJlc3VwcG9zZSBhbiBhYnNvbHV0ZSBwYXRoIHdpdGggYSB0cmFpbGluZyBzbGFzaC4KK3BhdGhjYXI9J3MsXi9cKFteL10qXCkuKiQsXDEsJworcGF0aGNkcj0ncyxeL1teL10qLCwnCityZW1vdmVkb3RwYXJ0cz0nOmRvdHNsCisJCXNAL1wuL0AvQGcKKwkJdCBkb3RzbAorCQlzLC9cLiQsLywnCitjb2xsYXBzZXNsYXNoZXM9J3NAL1x7MSxcfUAvQGcnCitmaW5hbHNsYXNoPSdzLC8qJCwvLCcKKworIyBmdW5jX25vcm1hbF9hYnNwYXRoIFBBVEgKKyMgUmVtb3ZlIGRvdWJsZWQtdXAgYW5kIHRyYWlsaW5nIHNsYXNoZXMsICIuIiBwYXRoIGNvbXBvbmVudHMsCisjIGFuZCBjYW5jZWwgb3V0IGFueSAiLi4iIHBhdGggY29tcG9uZW50cyBpbiBQQVRIIGFmdGVyIG1ha2luZworIyBpdCBhbiBhYnNvbHV0ZSBwYXRoLgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0IgorZnVuY19ub3JtYWxfYWJzcGF0aCAoKQoreworICAjIFN0YXJ0IGZyb20gcm9vdCBkaXIgYW5kIHJlYXNzZW1ibGUgdGhlIHBhdGguCisgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PQorICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPSQxCisgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlPQorICBjYXNlICRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIGluCisgICAgIiIpCisgICAgICAjIEVtcHR5IHBhdGgsIHRoYXQganVzdCBtZWFucyAkY3dkLgorICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICJgcHdkYCIKKyAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICAgIHJldHVybgorICAgIDs7CisgICAgIyBUaGUgbmV4dCB0aHJlZSBlbnRyaWVzIGFyZSB1c2VkIHRvIHNwb3QgYSBydW4gb2YgcHJlY2lzZWx5CisgICAgIyB0d28gbGVhZGluZyBzbGFzaGVzIHdpdGhvdXQgdXNpbmcgbmVnYXRlZCBjaGFyYWN0ZXIgY2xhc3NlczsKKyAgICAjIHdlIHRha2UgYWR2YW50YWdlIG9mIGNhc2UncyBmaXJzdC1tYXRjaCBiZWhhdmlvdXIuCisgICAgLy8vKikKKyAgICAgICMgVW51c3VhbCBmb3JtIG9mIGFic29sdXRlIHBhdGgsIGRvIG5vdGhpbmcuCisgICAgOzsKKyAgICAvLyopCisgICAgICAjIE5vdCBuZWNlc3NhcmlseSBhbiBvcmRpbmFyeSBwYXRoOyBQT1NJWCByZXNlcnZlcyBsZWFkaW5nICcvLycKKyAgICAgICMgYW5kIGZvciBleGFtcGxlIEN5Z3dpbiB1c2VzIGl0IHRvIGFjY2VzcyByZW1vdGUgZmlsZSBzaGFyZXMKKyAgICAgICMgb3ZlciBDSUZTL1NNQiwgc28gd2UgY29uc2VydmUgYSBsZWFkaW5nIGRvdWJsZSBzbGFzaCBpZiBmb3VuZC4KKyAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlPS8KKyAgICA7OworICAgIC8qKQorICAgICAgIyBBYnNvbHV0ZSBwYXRoLCBkbyBub3RoaW5nLgorICAgIDs7CisgICAgKikKKyAgICAgICMgUmVsYXRpdmUgcGF0aCwgcHJlcGVuZCAkY3dkLgorICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gcHdkYC8kZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aAorICAgIDs7CisgIGVzYWMKKyAgIyBDYW5jZWwgb3V0IGFsbCB0aGUgc2ltcGxlIHN0dWZmIHRvIHNhdmUgaXRlcmF0aW9ucy4gIFdlIGFsc28gd2FudAorICAjIHRoZSBwYXRoIHRvIGVuZCB3aXRoIGEgc2xhc2ggZm9yIGVhc2Ugb2YgcGFyc2luZywgc28gbWFrZSBzdXJlCisgICMgdGhlcmUgaXMgb25lIChhbmQgb25seSBvbmUpIGhlcmUuCisgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKKyAgICAgICAgLWUgIiRyZW1vdmVkb3RwYXJ0cyIgLWUgIiRjb2xsYXBzZXNsYXNoZXMiIC1lICIkZmluYWxzbGFzaCJgCisgIHdoaWxlIDo7IGRvCisgICAgIyBQcm9jZXNzZWQgaXQgYWxsIHlldD8KKyAgICBpZiB0ZXN0ICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgPSAvIDsgdGhlbgorICAgICAgIyBJZiB3ZSBhc2NlbmRlZCB0byB0aGUgcm9vdCB1c2luZyAiLi4iIHRoZSByZXN1bHQgbWF5IGJlIGVtcHR5IG5vdy4KKyAgICAgIGlmIHRlc3QgLXogIiRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCIgOyB0aGVuCisgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PS8KKyAgICAgIGZpCisgICAgICBicmVhaworICAgIGZpCisgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50PWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCisgICAgICAgIC1lICIkcGF0aGNhciJgCisgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gJEVDSE8gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiB8ICRTRUQgXAorICAgICAgICAtZSAiJHBhdGhjZHIiYAorICAgICMgRmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggaXQKKyAgICBjYXNlICRmdW5jX25vcm1hbF9hYnNwYXRoX3Rjb21wb25lbnQgaW4KKyAgICAgICIiKQorICAgICAgICAjIFRyYWlsaW5nIGVtcHR5IHBhdGggY29tcG9uZW50LCBpZ25vcmUgaXQuCisgICAgICA7OworICAgICAgLi4pCisgICAgICAgICMgUGFyZW50IGRpcjsgc3RyaXAgbGFzdCBhc3NlbWJsZWQgY29tcG9uZW50IGZyb20gcmVzdWx0LgorICAgICAgICBmdW5jX2Rpcm5hbWUgIiRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCIKKyAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKyAgICAgIDs7CisgICAgICAqKQorICAgICAgICAjIEFjdHVhbCBwYXRoIGNvbXBvbmVudCwgYXBwZW5kIGl0LgorICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQvJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdGNvbXBvbmVudAorICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKyAgIyBSZXN0b3JlIGxlYWRpbmcgZG91YmxlLXNsYXNoIGlmIG9uZSB3YXMgZm91bmQgb24gZW50cnkuCisgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX25vcm1hbF9hYnNwYXRoX2FsdG5hbWVzcGFjZSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorfQorCisjIGZ1bmNfcmVsYXRpdmVfcGF0aCBTUkNESVIgRFNURElSCisjIGdlbmVyYXRlcyBhIHJlbGF0aXZlIHBhdGggZnJvbSBTUkNESVIgdG8gRFNURElSLCB3aXRoIGEgdHJhaWxpbmcKKyMgc2xhc2ggaWYgbm9uLWVtcHR5LCBzdWl0YWJsZSBmb3IgaW1tZWRpYXRlbHkgYXBwZW5kaW5nIGEgZmlsZW5hbWUKKyMgd2l0aG91dCBuZWVkaW5nIHRvIGFwcGVuZCBhIHNlcGFyYXRvci4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IgorZnVuY19yZWxhdGl2ZV9wYXRoICgpCit7CisgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9CisgIGZ1bmNfbm9ybWFsX2Fic3BhdGggIiQxIgorICBmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcj0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKKyAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJDIiCisgIGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorCisgICMgQXNjZW5kIHRoZSB0cmVlIHN0YXJ0aW5nIGZyb20gbGliZGlyCisgIHdoaWxlIDo7IGRvCisgICAgIyBjaGVjayBpZiB3ZSBoYXZlIGZvdW5kIGEgcHJlZml4IG9mIGJpbmRpcgorICAgIGNhc2UgJGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyIGluCisgICAgICAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIpCisgICAgICAgICMgZm91bmQgYW4gZXhhY3QgbWF0Y2gKKyAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQ9CisgICAgICAgIGJyZWFrCisgICAgICAgIDs7CisgICAgICAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIqKQorICAgICAgICAjIGZvdW5kIGEgbWF0Y2hpbmcgcHJlZml4CisgICAgICAgIGZ1bmNfc3RyaXBuYW1lICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIiICcnICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXIiCisgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiOyB0aGVuCisgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uCisgICAgICAgIGZpCisgICAgICAgIGJyZWFrCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBmdW5jX2Rpcm5hbWUgJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyCisgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyPSR7ZnVuY19kaXJuYW1lX3Jlc3VsdH0KKyAgICAgICAgaWYgdGVzdCAieCRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciIgPSB4IDsgdGhlbgorICAgICAgICAgICMgSGF2ZSB0byBkZXNjZW5kIGFsbCB0aGUgd2F5IHRvIHRoZSByb290IQorICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9Li4vJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQKKyAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZD0kZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXIKKyAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4uLyRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0CisgICAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgIyBOb3cgY2FsY3VsYXRlIHBhdGg7IHRha2UgY2FyZSB0byBhdm9pZCBkb3VibGluZy11cCBzbGFzaGVzLgorICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IgorICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgZnVuY19zdHJpcG5hbWUgJy8nICcvJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkIgorICBpZiB0ZXN0ICJ4JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIgIT0geCA7IHRoZW4KKyAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PSR7ZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdH0vJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9CisgIGZpCisKKyAgIyBOb3JtYWxpc2F0aW9uLiBJZiBiaW5kaXIgaXMgbGliZGlyLCByZXR1cm4gZW1wdHkgc3RyaW5nLAorICAjIGVsc2UgcmVsYXRpdmUgcGF0aCBlbmRpbmcgd2l0aCBhIHNsYXNoOyBlaXRoZXIgd2F5LCB0YXJnZXQKKyAgIyBmaWxlIG5hbWUgY2FuIGJlIGRpcmVjdGx5IGFwcGVuZGVkLgorICBpZiB0ZXN0ICEgLXogIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IjsgdGhlbgorICAgIGZ1bmNfc3RyaXBuYW1lICcuLycgJycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0LyIKKyAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgZmkKK30KKworIyBUaGUgbmFtZSBvZiB0aGlzIHByb2dyYW06CitmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkcHJvZ3BhdGgiCitwcm9nbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKworIyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBhYnNvbHV0ZSBwYXRoIGZvciByZWV4ZWN1dGlvbjoKK2Nhc2UgJHByb2dwYXRoIGluCisgIFtcXC9dKnxbQS1aYS16XTpcXCopIDs7CisgICpbXFwvXSopCisgICAgIHByb2dkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKyAgICAgcHJvZ2Rpcj1gY2QgIiRwcm9nZGlyIiAmJiBwd2RgCisgICAgIHByb2dwYXRoPSIkcHJvZ2Rpci8kcHJvZ25hbWUiCisgICAgIDs7CisgICopCisgICAgIHNhdmVfSUZTPSIkSUZTIgorICAgICBJRlM9OgorICAgICBmb3IgcHJvZ2RpciBpbiAkUEFUSDsgZG8KKyAgICAgICBJRlM9IiRzYXZlX0lGUyIKKyAgICAgICB0ZXN0IC14ICIkcHJvZ2Rpci8kcHJvZ25hbWUiICYmIGJyZWFrCisgICAgIGRvbmUKKyAgICAgSUZTPSIkc2F2ZV9JRlMiCisgICAgIHRlc3QgLW4gIiRwcm9nZGlyIiB8fCBwcm9nZGlyPWBwd2RgCisgICAgIHByb2dwYXRoPSIkcHJvZ2Rpci8kcHJvZ25hbWUiCisgICAgIDs7Citlc2FjCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKKyMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitYc2VkPSIke1NFRH0iJyAtZSAxcy9eWC8vJworc2VkX3F1b3RlX3N1YnN0PSdzL1woW2AiJFxcXVwpL1xcXDEvZycKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbImBcXF1cKS9cXFwxL2cnCisKKyMgUmUtYFwnIHBhcmFtZXRlciBleHBhbnNpb25zIGluIG91dHB1dCBvZiBkb3VibGVfcXVvdGVfc3Vic3QgdGhhdCB3ZXJlCisjIGBcJy1lZCBpbiBpbnB1dCB0byB0aGUgc2FtZS4gIElmIGFuIG9kZCBudW1iZXIgb2YgYFwnIHByZWNlZGVkIGEgJyQnCisjIGluIGlucHV0IHRvIGRvdWJsZV9xdW90ZV9zdWJzdCwgdGhhdCAnJCcgd2FzIHByb3RlY3RlZCBmcm9tIGV4cGFuc2lvbi4KKyMgU2luY2UgZWFjaCBpbnB1dCBgXCcgaXMgbm93IHR3byBgXCdzLCBsb29rIGZvciBhbnkgbnVtYmVyIG9mIHJ1bnMgb2YKKyMgZm91ciBgXCdzIGZvbGxvd2VkIGJ5IHR3byBgXCdzIGFuZCB0aGVuIGEgJyQnLiAgYFwnIHRoYXQgJyQnLgorYnM9J1xcJworYnMyPSdcXFxcJworYnM0PSdcXFxcXFxcXCcKK2RvbGxhcj0nXCQnCitzZWRfZG91YmxlX2JhY2tzbGFzaD0iXAorICBzLyRiczQvJlxcCisvZworICBzL14kYnMyJGRvbGxhci8kYnMmLworICBzL1xcKFteJGJzXVxcKSRiczIkZG9sbGFyL1xcMSRiczIkYnMkZG9sbGFyL2cKKyAgcy9cbi8vZyIKKworIyBTdGFuZGFyZCBvcHRpb25zOgorb3B0X2RyeV9ydW49ZmFsc2UKK29wdF9oZWxwPWZhbHNlCitvcHRfcXVpZXQ9ZmFsc2UKK29wdF92ZXJib3NlPWZhbHNlCitvcHRfd2FybmluZz06CisKKyMgZnVuY19lY2hvIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlLCBhbG9uZyB3aXRoIHRoZSBjdXJyZW50IG1vZGUKKyMgbmFtZSBpZiBpdCBoYXMgYmVlbiBzZXQgeWV0LgorZnVuY19lY2hvICgpCit7CisgICAgJEVDSE8gIiRwcm9nbmFtZSR7bW9kZSs6IH0kbW9kZTogJCoiCit9CisKKyMgZnVuY192ZXJib3NlIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIGluIHZlcmJvc2UgbW9kZSBvbmx5LgorZnVuY192ZXJib3NlICgpCit7CisgICAgJG9wdF92ZXJib3NlICYmIGZ1bmNfZWNobyAkezErIiRAIn0KKworICAgICMgQSBidWcgaW4gYmFzaCBoYWx0cyB0aGUgc2NyaXB0IGlmIHRoZSBsYXN0IGxpbmUgb2YgYSBmdW5jdGlvbgorICAgICMgZmFpbHMgd2hlbiBzZXQgLWUgaXMgaW4gZm9yY2UsIHNvIHdlIG5lZWQgYW5vdGhlciBjb21tYW5kIHRvCisgICAgIyB3b3JrIGFyb3VuZCB0aGF0OgorICAgIDoKK30KKworIyBmdW5jX2VjaG9fYWxsIGFyZy4uLgorIyBJbnZva2UgJEVDSE8gd2l0aCBhbGwgYXJncywgc3BhY2Utc2VwYXJhdGVkLgorZnVuY19lY2hvX2FsbCAoKQoreworICAgICRFQ0hPICIkKiIKK30KKworIyBmdW5jX2Vycm9yIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgorZnVuY19lcnJvciAoKQoreworICAgICRFQ0hPICIkcHJvZ25hbWUke21vZGUrOiB9JG1vZGU6ICIkezErIiRAIn0gMT4mMgorfQorCisjIGZ1bmNfd2FybmluZyBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgd2FybmluZyBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgorZnVuY193YXJuaW5nICgpCit7CisgICAgJG9wdF93YXJuaW5nICYmICRFQ0hPICIkcHJvZ25hbWUke21vZGUrOiB9JG1vZGU6IHdhcm5pbmc6ICIkezErIiRAIn0gMT4mMgorCisgICAgIyBiYXNoIGJ1ZyBhZ2FpbjoKKyAgICA6Cit9CisKKyMgZnVuY19mYXRhbF9lcnJvciBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgYW5kIGV4aXQuCitmdW5jX2ZhdGFsX2Vycm9yICgpCit7CisgICAgZnVuY19lcnJvciAkezErIiRAIn0KKyAgICBleGl0ICRFWElUX0ZBSUxVUkUKK30KKworIyBmdW5jX2ZhdGFsX2hlbHAgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGZvbGxvd2VkIGJ5CisjIGEgaGVscCBoaW50LCBhbmQgZXhpdC4KK2Z1bmNfZmF0YWxfaGVscCAoKQoreworICAgIGZ1bmNfZXJyb3IgJHsxKyIkQCJ9CisgICAgZnVuY19mYXRhbF9lcnJvciAiJGhlbHAiCit9CitoZWxwPSJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iICAjIyBkZWZhdWx0CisKKworIyBmdW5jX2dyZXAgZXhwcmVzc2lvbiBmaWxlbmFtZQorIyBDaGVjayB3aGV0aGVyIEVYUFJFU1NJT04gbWF0Y2hlcyBhbnkgbGluZSBvZiBGSUxFTkFNRSwgd2l0aG91dCBvdXRwdXQuCitmdW5jX2dyZXAgKCkKK3sKKyAgICAkR1JFUCAiJDEiICIkMiIgPi9kZXYvbnVsbCAyPiYxCit9CisKKworIyBmdW5jX21rZGlyX3AgZGlyZWN0b3J5LXBhdGgKKyMgTWFrZSBzdXJlIHRoZSBlbnRpcmUgcGF0aCB0byBESVJFQ1RPUlktUEFUSCBpcyBhdmFpbGFibGUuCitmdW5jX21rZGlyX3AgKCkKK3sKKyAgICBteV9kaXJlY3RvcnlfcGF0aD0iJDEiCisgICAgbXlfZGlyX2xpc3Q9CisKKyAgICBpZiB0ZXN0IC1uICIkbXlfZGlyZWN0b3J5X3BhdGgiICYmIHRlc3QgIiRvcHRfZHJ5X3J1biIgIT0gIjoiOyB0aGVuCisKKyAgICAgICMgUHJvdGVjdCBkaXJlY3RvcnkgbmFtZXMgc3RhcnRpbmcgd2l0aCBgLScKKyAgICAgIGNhc2UgJG15X2RpcmVjdG9yeV9wYXRoIGluCisgICAgICAgIC0qKSBteV9kaXJlY3RvcnlfcGF0aD0iLi8kbXlfZGlyZWN0b3J5X3BhdGgiIDs7CisgICAgICBlc2FjCisKKyAgICAgICMgV2hpbGUgc29tZSBwb3J0aW9uIG9mIERJUiBkb2VzIG5vdCB5ZXQgZXhpc3QuLi4KKyAgICAgIHdoaWxlIHRlc3QgISAtZCAiJG15X2RpcmVjdG9yeV9wYXRoIjsgZG8KKyAgICAgICAgIyAuLi5tYWtlIGEgbGlzdCBpbiB0b3Btb3N0IGZpcnN0IG9yZGVyLiAgVXNlIGEgY29sb24gZGVsaW1pdGVkCisJIyBsaXN0IGluY2FzZSBzb21lIHBvcnRpb24gb2YgcGF0aCBjb250YWlucyB3aGl0ZXNwYWNlLgorICAgICAgICBteV9kaXJfbGlzdD0iJG15X2RpcmVjdG9yeV9wYXRoOiRteV9kaXJfbGlzdCIKKworICAgICAgICAjIElmIHRoZSBsYXN0IHBvcnRpb24gYWRkZWQgaGFzIG5vIHNsYXNoIGluIGl0LCB0aGUgbGlzdCBpcyBkb25lCisgICAgICAgIGNhc2UgJG15X2RpcmVjdG9yeV9wYXRoIGluICovKikgOzsgKikgYnJlYWsgOzsgZXNhYworCisgICAgICAgICMgLi4ub3RoZXJ3aXNlIHRocm93IGF3YXkgdGhlIGNoaWxkIGRpcmVjdG9yeSBhbmQgbG9vcAorICAgICAgICBteV9kaXJlY3RvcnlfcGF0aD1gJEVDSE8gIiRteV9kaXJlY3RvcnlfcGF0aCIgfCAkU0VEIC1lICIkZGlybmFtZSJgCisgICAgICBkb25lCisgICAgICBteV9kaXJfbGlzdD1gJEVDSE8gIiRteV9kaXJfbGlzdCIgfCAkU0VEICdzLDoqJCwsJ2AKKworICAgICAgc2F2ZV9ta2Rpcl9wX0lGUz0iJElGUyI7IElGUz0nOicKKyAgICAgIGZvciBteV9kaXIgaW4gJG15X2Rpcl9saXN0OyBkbworCUlGUz0iJHNhdmVfbWtkaXJfcF9JRlMiCisgICAgICAgICMgbWtkaXIgY2FuIGZhaWwgd2l0aCBhIGBGaWxlIGV4aXN0JyBlcnJvciBpZiB0d28gcHJvY2Vzc2VzCisgICAgICAgICMgdHJ5IHRvIGNyZWF0ZSBvbmUgb2YgdGhlIGRpcmVjdG9yaWVzIGNvbmN1cnJlbnRseS4gIERvbid0CisgICAgICAgICMgc3RvcCBpbiB0aGF0IGNhc2UhCisgICAgICAgICRNS0RJUiAiJG15X2RpciIgMj4vZGV2L251bGwgfHwgOgorICAgICAgZG9uZQorICAgICAgSUZTPSIkc2F2ZV9ta2Rpcl9wX0lGUyIKKworICAgICAgIyBCYWlsIG91dCBpZiB3ZSAob3Igc29tZSBvdGhlciBwcm9jZXNzKSBmYWlsZWQgdG8gY3JlYXRlIGEgZGlyZWN0b3J5LgorICAgICAgdGVzdCAtZCAiJG15X2RpcmVjdG9yeV9wYXRoIiB8fCBcCisgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgIkZhaWxlZCB0byBjcmVhdGUgXGAkMSciCisgICAgZmkKK30KKworCisjIGZ1bmNfbWt0ZW1wZGlyIFtzdHJpbmddCisjIE1ha2UgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRoYXQgd29uJ3QgY2xhc2ggd2l0aCBvdGhlciBydW5uaW5nCisjIGxpYnRvb2wgcHJvY2Vzc2VzLCBhbmQgYXZvaWRzIHJhY2UgY29uZGl0aW9ucyBpZiBwb3NzaWJsZS4gIElmCisjIGdpdmVuLCBTVFJJTkcgaXMgdGhlIGJhc2VuYW1lIGZvciB0aGF0IGRpcmVjdG9yeS4KK2Z1bmNfbWt0ZW1wZGlyICgpCit7CisgICAgbXlfdGVtcGxhdGU9IiR7VE1QRElSLS90bXB9LyR7MS0kcHJvZ25hbWV9IgorCisgICAgaWYgdGVzdCAiJG9wdF9kcnlfcnVuIiA9ICI6IjsgdGhlbgorICAgICAgIyBSZXR1cm4gYSBkaXJlY3RvcnkgbmFtZSwgYnV0IGRvbid0IGNyZWF0ZSBpdCBpbiBkcnktcnVuIG1vZGUKKyAgICAgIG15X3RtcGRpcj0iJHtteV90ZW1wbGF0ZX0tJCQiCisgICAgZWxzZQorCisgICAgICAjIElmIG1rdGVtcCB3b3JrcywgdXNlIHRoYXQgZmlyc3QgYW5kIGZvcmVtb3N0CisgICAgICBteV90bXBkaXI9YG1rdGVtcCAtZCAiJHtteV90ZW1wbGF0ZX0tWFhYWFhYWFgiIDI+L2Rldi9udWxsYAorCisgICAgICBpZiB0ZXN0ICEgLWQgIiRteV90bXBkaXIiOyB0aGVuCisgICAgICAgICMgRmFpbGluZyB0aGF0LCBhdCBsZWFzdCB0cnkgYW5kIHVzZSAkUkFORE9NIHRvIGF2b2lkIGEgcmFjZQorICAgICAgICBteV90bXBkaXI9IiR7bXlfdGVtcGxhdGV9LSR7UkFORE9NLTB9JCQiCisKKyAgICAgICAgc2F2ZV9ta3RlbXBkaXJfdW1hc2s9YHVtYXNrYAorICAgICAgICB1bWFzayAwMDc3CisgICAgICAgICRNS0RJUiAiJG15X3RtcGRpciIKKyAgICAgICAgdW1hc2sgJHNhdmVfbWt0ZW1wZGlyX3VtYXNrCisgICAgICBmaQorCisgICAgICAjIElmIHdlJ3JlIG5vdCBpbiBkcnktcnVuIG1vZGUsIGJvbWIgb3V0IG9uIGZhaWx1cmUKKyAgICAgIHRlc3QgLWQgIiRteV90bXBkaXIiIHx8IFwKKyAgICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IFxgJG15X3RtcGRpciciCisgICAgZmkKKworICAgICRFQ0hPICIkbXlfdG1wZGlyIgorfQorCisKKyMgZnVuY19xdW90ZV9mb3JfZXZhbCBhcmcKKyMgQWVzdGhldGljYWxseSBxdW90ZSBBUkcgdG8gYmUgZXZhbGVkIGxhdGVyLgorIyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHdvIHZhbHVlczogRlVOQ19RVU9URV9GT1JfRVZBTF9SRVNVTFQKKyMgaXMgZG91YmxlLXF1b3RlZCwgc3VpdGFibGUgZm9yIGEgc3Vic2VxdWVudCBldmFsLCB3aGVyZWFzCisjIEZVTkNfUVVPVEVfRk9SX0VWQUxfVU5RVU9URURfUkVTVUxUIGhhcyBtZXJlbHkgYWxsIGNoYXJhY3RlcnMKKyMgd2hpY2ggYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlIHF1b3RlcyBiYWNrc2xhc2hpZmllZC4KK2Z1bmNfcXVvdGVfZm9yX2V2YWwgKCkKK3sKKyAgICBjYXNlICQxIGluCisgICAgICAqW1xcXGBcIlwkXSopCisJZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQ9YCRFQ0hPICIkMSIgfCAkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAgOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0PSIkMSIgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdCBpbgorICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIHRvIGRlbGF5CisgICAgICAjIHdvcmQgc3BsaXR0aW5nLCBjb21tYW5kIHN1YnN0aXR1dGlvbiBhbmQgYW5kIHZhcmlhYmxlCisgICAgICAjIGV4cGFuc2lvbiBmb3IgYSBzdWJzZXF1ZW50IGV2YWwuCisgICAgICAjIE1hbnkgQm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQorICAgICAgIyBpbiBzY2FuIHNldHMsIHNvIHdlIHNwZWNpZnkgaXQgc2VwYXJhdGVseS4KKyAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdD0iXCIkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHRcIiIKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0PSIkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQiCisgICAgZXNhYworfQorCisKKyMgZnVuY19xdW90ZV9mb3JfZXhwYW5kIGFyZworIyBBZXN0aGV0aWNhbGx5IHF1b3RlIEFSRyB0byBiZSBldmFsZWQgbGF0ZXI7IHNhbWUgYXMgYWJvdmUsCisjIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2Z1bmNfcXVvdGVfZm9yX2V4cGFuZCAoKQoreworICAgIGNhc2UgJDEgaW4KKyAgICAgICpbXFxcYFwiXSopCisJbXlfYXJnPWAkRUNITyAiJDEiIHwgJFNFRCBcCisJICAgIC1lICIkZG91YmxlX3F1b3RlX3N1YnN0IiAtZSAiJHNlZF9kb3VibGVfYmFja3NsYXNoImAgOzsKKyAgICAgICopCisgICAgICAgIG15X2FyZz0iJDEiIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkbXlfYXJnIGluCisgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMgdG8gZGVsYXkKKyAgICAgICMgd29yZCBzcGxpdHRpbmcgYW5kIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGZvciBhIHN1YnNlcXVlbnQgZXZhbC4KKyAgICAgICMgTWFueSBCb3VybmUgc2hlbGxzIGNhbm5vdCBoYW5kbGUgY2xvc2UgYnJhY2tldHMgY29ycmVjdGx5CisgICAgICAjIGluIHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBzZXBhcmF0ZWx5LgorICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisgICAgICAgIG15X2FyZz0iXCIkbXlfYXJnXCIiCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdD0iJG15X2FyZyIKK30KKworCisjIGZ1bmNfc2hvd19ldmFsIGNtZCBbZmFpbF9leHBdCisjIFVubGVzcyBvcHRfc2lsZW50IGlzIHRydWUsIHRoZW4gb3V0cHV0IENNRC4gIFRoZW4sIGlmIG9wdF9kcnlydW4gaXMKKyMgbm90IHRydWUsIGV2YWx1YXRlIENNRC4gIElmIHRoZSBldmFsdWF0aW9uIG9mIENNRCBmYWlscywgYW5kIEZBSUxfRVhQCisjIGlzIGdpdmVuLCB0aGVuIGV2YWx1YXRlIGl0LgorZnVuY19zaG93X2V2YWwgKCkKK3sKKyAgICBteV9jbWQ9IiQxIgorICAgIG15X2ZhaWxfZXhwPSIkezItOn0iCisKKyAgICAke29wdF9zaWxlbnQtZmFsc2V9IHx8IHsKKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJG15X2NtZCIKKyAgICAgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKyAgICB9CisKKyAgICBpZiAke29wdF9kcnlfcnVuLWZhbHNlfTsgdGhlbiA6OyBlbHNlCisgICAgICBldmFsICIkbXlfY21kIgorICAgICAgbXlfc3RhdHVzPSQ/CisgICAgICBpZiB0ZXN0ICIkbXlfc3RhdHVzIiAtZXEgMDsgdGhlbiA6OyBlbHNlCisJZXZhbCAiKGV4aXQgJG15X3N0YXR1cyk7ICRteV9mYWlsX2V4cCIKKyAgICAgIGZpCisgICAgZmkKK30KKworCisjIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSBjbWQgW2ZhaWxfZXhwXQorIyBVbmxlc3Mgb3B0X3NpbGVudCBpcyB0cnVlLCB0aGVuIG91dHB1dCBDTUQuICBUaGVuLCBpZiBvcHRfZHJ5cnVuIGlzCisjIG5vdCB0cnVlLCBldmFsdWF0ZSBDTUQuICBJZiB0aGUgZXZhbHVhdGlvbiBvZiBDTUQgZmFpbHMsIGFuZCBGQUlMX0VYUAorIyBpcyBnaXZlbiwgdGhlbiBldmFsdWF0ZSBpdC4gIFVzZSB0aGUgc2F2ZWQgbG9jYWxlIGZvciBldmFsdWF0aW9uLgorZnVuY19zaG93X2V2YWxfbG9jYWxlICgpCit7CisgICAgbXlfY21kPSIkMSIKKyAgICBteV9mYWlsX2V4cD0iJHsyLTp9IgorCisgICAgJHtvcHRfc2lsZW50LWZhbHNlfSB8fCB7CisgICAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRteV9jbWQiCisgICAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisgICAgfQorCisgICAgaWYgJHtvcHRfZHJ5X3J1bi1mYWxzZX07IHRoZW4gOjsgZWxzZQorICAgICAgZXZhbCAiJGx0X3VzZXJfbG9jYWxlCisJICAgICRteV9jbWQiCisgICAgICBteV9zdGF0dXM9JD8KKyAgICAgIGV2YWwgIiRsdF9zYWZlX2xvY2FsZSIKKyAgICAgIGlmIHRlc3QgIiRteV9zdGF0dXMiIC1lcSAwOyB0aGVuIDo7IGVsc2UKKwlldmFsICIoZXhpdCAkbXlfc3RhdHVzKTsgJG15X2ZhaWxfZXhwIgorICAgICAgZmkKKyAgICBmaQorfQorCisKKyMgZnVuY192ZXJzaW9uCisjIEVjaG8gdmVyc2lvbiBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KK2Z1bmNfdmVyc2lvbiAoKQoreworICAgICRTRUQgLW4gJy8oQykvIWIgZ28KKwk6bW9yZQorCS9cLi8heworCSAgTgorCSAgcy9cbiMgLyAvCisJICBiIG1vcmUKKwl9CisJOmdvCisJL14jICckUFJPR1JBTScgKEdOVSAvLC8jIHdhcnJhbnR5OyAvIHsKKyAgICAgICAgcy9eIyAvLworCXMvXiMgKiQvLworICAgICAgICBzL1woKEMpXClbIDAtOSwtXSpcKCBbMS05XVswLTldKlwpL1wxXDIvCisgICAgICAgIHAKKyAgICAgfScgPCAiJHByb2dwYXRoIgorICAgICBleGl0ICQ/Cit9CisKKyMgZnVuY191c2FnZQorIyBFY2hvIHNob3J0IGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCitmdW5jX3VzYWdlICgpCit7CisgICAgJFNFRCAtbiAnL14jIFVzYWdlOi8sL14jICAqLiotLWhlbHAvIHsKKyAgICAgICAgcy9eIyAvLworCXMvXiMgKiQvLworCXMvXCRwcm9nbmFtZS8nJHByb2duYW1lJy8KKwlwCisgICAgfScgPCAiJHByb2dwYXRoIgorICAgIGVjaG8KKyAgICAkRUNITyAicnVuIFxgJHByb2duYW1lIC0taGVscCB8IG1vcmUnIGZvciBmdWxsIHVzYWdlIgorICAgIGV4aXQgJD8KK30KKworIyBmdW5jX2hlbHAgW05PRVhJVF0KKyMgRWNobyBsb25nIGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQsCisjIHVubGVzcyAnbm9leGl0JyBpcyBwYXNzZWQgYXMgYXJndW1lbnQuCitmdW5jX2hlbHAgKCkKK3sKKyAgICAkU0VEIC1uICcvXiMgVXNhZ2U6LywvIyBSZXBvcnQgYnVncyB0by8geworICAgICAgICBzL14jIC8vCisJcy9eIyAqJC8vCisJcypcJHByb2duYW1lKickcHJvZ25hbWUnKgorCXMqXCRob3N0KiciJGhvc3QiJyoKKwlzKlwkU0hFTEwqJyIkU0hFTEwiJyoKKwlzKlwkTFRDQyonIiRMVENDIicqCisJcypcJExUQ0ZMQUdTKiciJExUQ0ZMQUdTIicqCisJcypcJExEKiciJExEIicqCisJcy9cJHdpdGhfZ251X2xkLyciJHdpdGhfZ251X2xkIicvCisJcy9cJGF1dG9tYWtlX3ZlcnNpb24vJyJgKGF1dG9tYWtlIC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCRTRUQgMXFgIicvCisJcy9cJGF1dG9jb25mX3ZlcnNpb24vJyJgKGF1dG9jb25mIC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCRTRUQgMXFgIicvCisJcAorICAgICB9JyA8ICIkcHJvZ3BhdGgiCisgICAgcmV0PSQ/CisgICAgaWYgdGVzdCAteiAiJDEiOyB0aGVuCisgICAgICBleGl0ICRyZXQKKyAgICBmaQorfQorCisjIGZ1bmNfbWlzc2luZ19hcmcgYXJnbmFtZQorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yIGFuZCBzZXQgZ2xvYmFsCisjIGV4aXRfY21kLgorZnVuY19taXNzaW5nX2FyZyAoKQoreworICAgIGZ1bmNfZXJyb3IgIm1pc3NpbmcgYXJndW1lbnQgZm9yICQxLiIKKyAgICBleGl0X2NtZD1leGl0Cit9CisKK2V4aXRfY21kPToKKworCisKKworCisjIHRlc3QgRUJDRElDIG9yIEFTQ0lJCitjYXNlIGBlY2hvIFh8dHIgWCAnXDEwMSdgIGluCisgQSkgIyBBU0NJSSBiYXNlZCBzeXN0ZW0KKyAgICAjIFxuIGlzIG5vdCBpbnRlcnByZXRlZCBjb3JyZWN0bHkgYnkgU29sYXJpcyA4IC91c3IvdWNiL3RyCisgIFNQMk5MPSd0ciBcMDQwIFwwMTInCisgIE5MMlNQPSd0ciBcMDE1XDAxMiBcMDQwXDA0MCcKKyAgOzsKKyAqKSAjIEVCQ0RJQyBiYXNlZCBzeXN0ZW0KKyAgU1AyTkw9J3RyIFwxMDAgXG4nCisgIE5MMlNQPSd0ciBcclxuIFwxMDBcMTAwJworICA7OworZXNhYworCisKKyMgQ29tbWFuZCBsaW5lIG9wdGlvbnM6CitvcHRfZGVidWc9Ogorb3B0X2ZvcmNlPWZhbHNlCitvcHRfaW5zdGFsbD1mYWxzZQorb3B0X2xpbms9Ogorb3B0X2x0ZGw9ZmFsc2UKKworc2Vlbl9hdXRvY29uZj1mYWxzZQorc2Vlbl9saWJ0b29sPWZhbHNlCitzZWVuX2x0ZGw9ZmFsc2UKKworIyBsdGRsIGNhbiBiZSBpbnN0YWxsZWQgdG8gYmUgc2VsZi1jb250YWluZWQgKHN1YnByb2plY3QsIHRoZSBkZWZhdWx0KTsKKyMgb3IgdG8gYmUgY29uZmlndXJlZCBieSBhIHBhcmVudCBwcm9qZWN0LCBlaXRoZXIgd2l0aCBhIHJlY3Vyc2l2ZSBvcgorIyBub25yZWN1cnNpdmUgYXV0b21ha2UgZHJpdmVuIG1ha2U6CitsdGRsX21vZGU9CisKKyMgTG9jYXRpb25zIGZvciBpbXBvcnRhbnQgZmlsZXM6CitwcmVmaXg9L3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyCitkYXRhZGlyPS91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9ob3N0L3Vzci9zaGFyZQorcGtnZGF0YWRpcj0vdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3Ivc2hhcmUvbGlidG9vbAorcGtnbHRkbGRpcj0vdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3Ivc2hhcmUvbGlidG9vbAorYWNsb2NhbGRpcj0vdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3Ivc2hhcmUvYWNsb2NhbAorYXV4ZGlyPQorbWFjcm9kaXI9CitsdGRsZGlyPQorY29uZmlndXJlX2FjPWNvbmZpZ3VyZS5pbgorCisjIExpc3RzIG9mIGFsbCBmaWxlcyBsaWJ0b29saXplIGhhcyBldmVyIGluc3RhbGxlZC4gIFRoZXNlIGFyZSByZW1vdmVkCisjIGJlZm9yZSBpbnN0YWxsaW5nIHRoZSBsYXRlc3QgZmlsZXMgd2hlbiAtLWZvcmNlIHdhcyBwYXNzZWQgdG8gaGVscAorIyBlbnN1cmUgYSBjbGVhbiB1cGdyYWRlLgorIyBEbyBub3QgcmVtb3ZlIGNvbmZpZy5ndWVzcyBub3IgY29uZmlnLnN1Yiwgd2UgZG9uJ3QgaW5zdGFsbCB0aGVtCisjIHdpdGhvdXQgLS1pbnN0YWxsLCBhbmQgdGhlIHByb2plY3QgbWF5IG5vdCBiZSB1c2luZyBBdXRvbWFrZS4KK2FsbF9wa2djb25maWdfZmlsZXM9Imx0bWFpbi5zaCIKK2FsbF9wa2dtYWNyb19maWxlcz0iYXJnei5tNCBsaWJ0b29sLm00IGx0ZGwubTQgbHRvcHRpb25zLm00IGx0c3VnYXIubTQgbHR2ZXJzaW9uLmluIGx0dmVyc2lvbi5tNCBsdH5vYnNvbGV0ZS5tNCIKK2FsbF9wa2dsdGRsX2ZpbGVzPSJDT1BZSU5HLkxJQiBNYWtlZmlsZSBNYWtlZmlsZS5pbiBNYWtlZmlsZS5pbmMgTWFrZWZpbGUuYW0gUkVBRE1FIGFjaW5jbHVkZS5tNCBhY2xvY2FsLm00IGFyZ3pfLmggYXJnei5jIGNvbmZpZy5oLmluIGNvbmZpZy1oLmluIGNvbmZpZ3VyZSBjb25maWd1cmUuYWMgY29uZmlndXJlLmluIGxpYmx0ZGwvbHRfX2FsbG9jLmggbGlibHRkbC9sdF9fZGlyZW50LmggbGlibHRkbC9sdF9fZ2xpYmMuaCBsaWJsdGRsL2x0X19wcml2YXRlLmggbGlibHRkbC9sdF9fc3RybC5oIGxpYmx0ZGwvbHRfZGxsb2FkZXIuaCBsaWJsdGRsL2x0X2Vycm9yLmggbGlibHRkbC9sdF9zeXN0ZW0uaCBsaWJsdGRsL3NsaXN0LmggbG9hZGVycy9kbGRfbGluay5jIGxvYWRlcnMvZGxvcGVuLmMgbG9hZGVycy9keWxkLmMgbG9hZGVycy9sb2FkX2FkZF9vbi5jIGxvYWRlcnMvbG9hZGxpYnJhcnkuYyBsb2FkZXJzL3ByZW9wZW4uYyBsb2FkZXJzL3NobF9sb2FkLmMgbHRfX2FsbG9jLmMgbHRfX2RpcmVudC5jIGx0X19zdHJsLmMgbHRfZGxsb2FkZXIuYyBsdF9lcnJvci5jIGx0ZGwuYyBsdGRsLmggc2xpc3QuYyIKKworIyBQYXJzZSBlbnZpcm9ubWVudCBvcHRpb25zCit7CisgIG15X3NlZF9lbnZfb3B0PScxcy9eXChbXiw6OyBdKlwpLiokL1wxLztxJworICBteV9zZWRfZW52X3Jlc3Q9JzFzL15bXiw6OyBdKlssOjsgXSpcKC4qXCkkL1wxLztxJworCisgIHdoaWxlIHRlc3QgLW4gIiRMSUJUT09MSVpFX09QVElPTlMiOyBkbworICAgIG9wdD1gZWNobyAiJExJQlRPT0xJWkVfT1BUSU9OUyIgfCBzZWQgIiRteV9zZWRfZW52X29wdCJgCisgICAgTElCVE9PTElaRV9PUFRJT05TPWBlY2hvICIkTElCVE9PTElaRV9PUFRJT05TIiB8IHNlZCAiJG15X3NlZF9lbnZfcmVzdCJgCisKKyAgICBjYXNlICRvcHQgaW4KKyAgICAgIC0tZGVidWcpCQlvcHRfZGVidWc9OgkJOzsKKyAgICAgIC0tbm8td2FybikJb3B0X3dhcm5pbmc9ZmFsc2UJOzsKKyAgICAgIC0tcXVpZXQpCQlvcHRfcXVpZXQ9OgkJOzsKKyAgICAgIC0tdmVyYm9zZSkJb3B0X3ZlcmJvc2U9OgkJOzsKKworICAgICAgLS0qKQlmdW5jX3dhcm5pbmcgInVucmVjb2duaXplZCBlbnZpcm9ubWVudCBvcHRpb24gXGAkb3B0JyIgICAgOzsKKyAgICAgICopCWZ1bmNfZmF0YWxfaGVscCAiZ2FyYmxlZCBMSUJUT09MSVpFX09QVElPTlMgbmVhciBcYCRvcHQnIiA7OworICAgIGVzYWMKKyAgZG9uZQorfQorCisKKyMgUGFyc2Ugb3B0aW9ucyBvbmNlLCB0aG9yb3VnaGx5LiAgVGhpcyBjb21lcyBhcyBzb29uIGFzIHBvc3NpYmxlIGluCisjIHRoZSBzY3JpcHQgdG8gbWFrZSB0aGluZ3MgbGlrZSBgbGlidG9vbGl6ZSAtLXZlcnNpb24nIGhhcHBlbiBxdWlja2x5LgoreworICAjIHNlZCBzY3JpcHRzOgorICBteV9zZWRfc2luZ2xlX29wdD0nMXMvXlwoLi5cKS4qJC9cMS87cScKKyAgbXlfc2VkX3NpbmdsZV9yZXN0PScxcy9eLi5cKC4qXCkkL1wxLztxJworICBteV9zZWRfbG9uZ19vcHQ9JzFzL15cKC0tW149XSpcKT0uKi9cMS87cScKKyAgbXlfc2VkX2xvbmdfYXJnPScxcy9eLS1bXj1dKj0vLycKKworICB3aGlsZSB0ZXN0ICIkIyIgLWd0IDA7IGRvCisgICAgb3B0PSIkMSIKKyAgICBzaGlmdAorICAgIGNhc2UgJG9wdCBpbgorICAgICAgLS1jb3B5fC1jKQlvcHRfbGluaz1mYWxzZSA7OworCisgICAgICAtLWRlYnVnKQkJZnVuY19lY2hvICJlbmFibGluZyBzaGVsbCB0cmFjZSBtb2RlIgorCQkJb3B0X2RlYnVnPSdzZXQgLXgnCisJCQkkb3B0X2RlYnVnCisJCQk7OworCisgICAgICAtLWRyeS1ydW58LW4pCWlmICRvcHRfZHJ5X3J1bjsgdGhlbiA6OyBlbHNlCisJCQkgIG9wdF9kcnlfcnVuPToKKwkJCSAgUk09ImZ1bmNfZWNob19hbGwgJFJNIgorCQkJICB0ZXN0IC1uICIkTE5fUyIgJiYgTE5fUz0iZnVuY19lY2hvX2FsbCAkTE5fUyIKKwkJCSAgQ1A9ImZ1bmNfZWNob19hbGwgJENQIgorCQkJICBNS0RJUj0iZnVuY19lY2hvX2FsbCAkTUtESVIiCisJCQkgIFRBUj0iZnVuY19lY2hvX2FsbCAkVEFSIgorCQkJZmkKKwkJCTs7CisKKyAgICAgIC0tZm9yY2V8LWYpCW9wdF9mb3JjZT06IDs7CisKKyAgICAgIC0taW5zdGFsbHwtaSkJb3B0X2luc3RhbGw9OiA7OworCisgICAgICAtLWx0ZGwpCQlvcHRfbHRkbD06CisJCQlpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KKwkJCSAgY2FzZSAkMSBpbgorCQkJICAgIC0qKQk7OworCQkJICAgICopCWx0ZGxkaXI9YCRFQ0hPICIkMSIgfCAkU0VEICdzLC8qJCwsJ2AKKwkJCQlzaGlmdAorCQkJCTs7CisJCQkgIGVzYWMKKwkJCWZpCisJCQk7OworCisgICAgICAtLW5vLXdhcm4pCW9wdF93YXJuaW5nPWZhbHNlIDs7CisKKyAgICAgIC0tbm9ucmVjdXJzaXZlfC0tbm9uLXJlY3Vyc2l2ZSkKKwkJCWx0ZGxfbW9kZT1ub25yZWN1cnNpdmUKKwkJCTs7CisKKyAgICAgIC0tcXVpZXR8LS1hdXRvbWFrZXwtcSkgIyAtLWF1dG9tYWtlIGlzIGZvciAxLjUgY29tcGF0aWJpbGl0eQorCQkJb3B0X3F1aWV0PToKKwkJCTs7CisKKyAgICAgIC0tcmVjdXJzaXZlKQlsdGRsX21vZGU9cmVjdXJzaXZlIDs7CisKKyAgICAgIC0tc3VicHJvamVjdCkJbHRkbF9tb2RlPXN1YnByb2plY3QgOzsKKworICAgICAgLS12ZXJib3NlfC12KQlvcHRfdmVyYm9zZT06IDs7CisKKyAgICAgICMgU2VwYXJhdGUgb3B0YXJncyB0byBsb25nIG9wdGlvbnM6CisgICAgICAtLSo9KikKKwkJCWFyZz1gJEVDSE8gIiRvcHQiIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCisJCQlvcHQ9YCRFQ0hPICIkb3B0IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAorCQkJc2V0IGR1bW15ICIkb3B0IiAiJGFyZyIgJHsxKyIkQCJ9CisJCQlzaGlmdAorCQkJOzsKKworICAgICAgIyBTZXBhcmF0ZSBvcHRhcmdzIHRvIHNob3J0IG9wdGlvbnM6CisgICAgICAjLVgqKQorICAgICAgIwkJCWFyZz1gJEVDSE8gIiRvcHQiIHwgJFNFRCAiJG15X3NlZF9zaW5nbGVfcmVzdCJgCisgICAgICAjCQkJb3B0PWAkRUNITyAiJG9wdCIgfCAkU0VEICIkbXlfc2VkX3NpbmdsZV9vcHQiYAorICAgICAgIwkJCXNldCBkdW1teSAiJG9wdCIgIiRhcmciICR7MSsiJEAifQorICAgICAgIwkJCXNoaWZ0CisgICAgICAjCQkJOzsKKworICAgICAgIyBTZXBhcmF0ZSBub24tYXJndW1lbnQgc2hvcnQgb3B0aW9uczoKKyAgICAgIC1jKnwtZip8LWkqfC1uKnwtcSp8LXYqKQorCQkJcmVzdD1gJEVDSE8gIiRvcHQiIHwgJFNFRCAiJG15X3NlZF9zaW5nbGVfcmVzdCJgCisJCQlvcHQ9YCRFQ0hPICIkb3B0IiB8ICRTRUQgIiRteV9zZWRfc2luZ2xlX29wdCJgCisJCQlzZXQgZHVtbXkgIiRvcHQiICItJHJlc3QiICR7MSsiJEAifQorCQkJc2hpZnQKKwkJCTs7CisKKyAgICAgIC1cP3wtaCkJCWZ1bmNfdXNhZ2UJCQkJCTs7CisgICAgICAtLWhlbHApCQlmdW5jX2hlbHAJCQkJCTs7CisgICAgICAtLXZlcnNpb24pCWZ1bmNfdmVyc2lvbgkJCQkJOzsKKyAgICAgIC0tKQkJYnJlYWsJCQkJCQk7OworICAgICAgLSopCQlmdW5jX2ZhdGFsX2hlbHAgInVucmVjb2duaXplZCBvcHRpb24gXGAkb3B0JyIJOzsKKyAgICAgICopCQlmdW5jX2ZhdGFsX2hlbHAgInRvbyBtYW55IGFyZ3VtZW50cyIJCTs7CisgICAgZXNhYworICBkb25lCit9CisKKworIyBmdW5jX2VjaG9fb25jZSBtc2dfdmFyCisjIENhbGxzIGZ1bmNfZWNobyB3aXRoIHRoZSB2YWx1ZSBvZiBNU0dfVkFSLCBhbmQgdGhlbiBzZXRzIE1TR19WQVI9IiIgc28KKyMgdGhhdCBzdWJzZXF1ZW50IGNhbGxzIGhhdmUgbm8gZWZmZWN0LgorZnVuY19lY2hvX29uY2UgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgICBldmFsIG15X21zZz1cJCQxCisKKyAgICAgIGlmIHRlc3QgLW4gIiRteV9tc2ciOyB0aGVuCisgICAgICAgIGZ1bmNfZWNobyAiJG15X21zZyIKKyAgICAgICAgZXZhbCAkMT0iIgorICAgICAgZmkKKyAgICBmaQorfQorCisKKyMgZnVuY19jb3B5IHNyY2ZpbGUgZGVzdGZpbGUgW21zZ192YXJdCisjIEEgd3JhcHBlciBmb3IgZnVuY19jb3B5X2NiIHRoYXQgYWNjZXB0cyBhcmd1bWVudHMgaW4gdGhlIHNhbWUgb3JkZXIKKyMgYXMgdGhlIGNwKDEpIHNoZWxsIGNvbW1hbmQuCitmdW5jX2NvcHkgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisKKyAgICB0ZXN0IC1mICIkMSIgfHwgXAorICAgICAgeyBmdW5jX2Vycm9yICJcYCQxJyBub3QgY29waWVkOiAgbm90IGEgcmVndWxhciBmaWxlIjsgcmV0dXJuIDE7IH0KKworICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiQxIgorICAgIG15X2YxPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCisgICAgaWYgdGVzdCAtZCAiJDIiOyB0aGVuCisKKyAgICAgIGZ1bmNfY29weV9jYiAiJG15X2YxIiBcCisJYCRFQ0hPICIkMSIgfCAkU0VEICIkZGlybmFtZSJgICIkMiIgIiQzIgorCisgICAgZWxzZQorCisgICAgICAjIFN1cHBvcnRpbmcgdGhpcyB3b3VsZCBtZWFuIGNoYW5naW5nIHRoZSB0aW1lc3RhbXA6CisgICAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkMiIKKyAgICAgIG15X3RuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorICAgICAgdGVzdCAiWCRteV9mMSIgPSAiWCRteV90bmFtZSIgXAorICAgICAgICB8fCBmdW5jX2ZhdGFsX2Vycm9yICJmdW5jX2NvcHkoKSBjYW5ub3QgY2hhbmdlIGZpbGVuYW1lIG9uIGNvcHkiCisKKyAgICAgIGZ1bmNfY29weV9jYiAiJG15X2YxIiBcCisgICAgICAgIGAkRUNITyAiJDEiIHwgJFNFRCAiJGRpcm5hbWUiYCBcCisgICAgICAgIGAkRUNITyAiJDIiIHwgJFNFRCAiJGRpcm5hbWUiYCBcCisJIiQzIgorCisgICAgZmkKKworICAgIHJldHVybiAkY29weV9yZXR1cm5fc3RhdHVzICMgc2V0IGluIGZ1bmNfY29weV9jYgorfQorCisKKyMgZnVuY19jb3B5X2NiIGZpbGVuYW1lIHNyY2RpciBkZXN0ZGlyIFttc2dfdmFyXQorIyBJZiBvcHRpb24gYC0tY29weScgd2FzIHNwZWNpZmllZCwgb3Igc29mdC1saW5raW5nIFNSQ0ZJTEUgdG8gREVTVEZJTEUgZmFpbHMsCisjIHRoZW4gdHJ5IHRvIGNvcHkgU1JDRklMRSB0byBERVNURklMRSAod2l0aG91dCBjaGFuZ2luZyB0aGUgdGltZXN0YW1wIGlmCisjIHBvc3NpYmxlKS4KK2Z1bmNfY29weV9jYiAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBteV9maWxlPSIkMSIKKyAgICBteV9zcmNkaXI9IiQyIgorICAgIG15X2Rlc3RkaXI9IiQzIgorICAgIG15X21zZ192YXI9IiQ0IgorICAgIGNvcHlfcmV0dXJuX3N0YXR1cz0xCisKKyAgICAjIExpYnRvb2wgaXMgcHJvYmFibHkgbWlzaW5zdGFsbGVkIGlmIHRoaXMgaGFwcGVuczoKKyAgICB0ZXN0IC1mICIkbXlfc3JjZGlyLyRteV9maWxlIiB8fAorICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRteV9maWxlJyBub3QgZm91bmQgaW4gXGAkbXlfc3JjZGlyJyIKKworICAgIGNhc2UgJG9wdF92ZXJib3NlIGluCisgICAgICBmYWxzZSkgbXlfY29weV9tc2c9ImZpbGUgXGAkbXlfZGVzdGRpci8kbXlfZmlsZSciICAgICA7OworICAgICAgKikgICAgIG15X2NvcHlfbXNnPSJmaWxlIGZyb20gXGAkbXlfc3JjZGlyLyRteV9maWxlJyIgOzsKKyAgICBlc2FjCisgICAgZnVuY19ta2Rpcl9wIGAkRUNITyAiJG15X2Rlc3RkaXIvJG15X2ZpbGUiIHwgJFNFRCAiJGRpcm5hbWUiYAorCisgICAgJFJNICIkbXlfZGVzdGRpci8kbXlfZmlsZSIKKyAgICBpZiAkb3B0X2xpbms7IHRoZW4KKyAgICAgIGlmIHRlc3QgIiRteV9maWxlIiA9ICJhY2xvY2FsLm00IjsgdGhlbgorCWlmIHsgKCBjZCAiJG15X3NyY2RpciIgJiYgJFRBUiBjaGYgLSAiJG15X2ZpbGUiICkgMj4vZGV2L251bGwgXAorCSAgICAgfCAoIHVtYXNrIDAgJiYgY2QgIiRteV9kZXN0ZGlyIiAmJiAkVEFSIHhmIC0gKSA+L2Rldi9udWxsIDI+JjEgOyB9CisJdGhlbgorCSAgJG9wdF9xdWlldCB8fCBmdW5jX2VjaG9fb25jZSAiJG15X21zZ192YXIiCisJICAkb3B0X3F1aWV0IHx8IGZ1bmNfZWNobyAiY29weWluZyAkbXlfY29weV9tc2ciCisJICBjb3B5X3JldHVybl9zdGF0dXM9MAorCWZpCisgICAgICBlbHNlCisJaWYgJExOX1MgIiRteV9zcmNkaXIvJG15X2ZpbGUiICIkbXlfZGVzdGRpci8kbXlfZmlsZSI7IHRoZW4KKwkgICRvcHRfcXVpZXQgfHwgZnVuY19lY2hvX29uY2UgIiRteV9tc2dfdmFyIgorCSAgJG9wdF9xdWlldCB8fCBmdW5jX2VjaG8gImxpbmtpbmcgJG15X2NvcHlfbXNnIgorCSAgY29weV9yZXR1cm5fc3RhdHVzPTAKKwlmaQorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBpZiB7ICggY2QgIiRteV9zcmNkaXIiICYmICRUQVIgY2hmIC0gIiRteV9maWxlIiApIDI+L2Rldi9udWxsIFwKKyAgICAgICAgICAgfCAoIHVtYXNrIDAgJiYgY2QgIiRteV9kZXN0ZGlyIiAmJiAkVEFSIHhmIC0gKSA+L2Rldi9udWxsIDI+JjE7IH0gXAorCSAmJiB0b3VjaCAiJG15X2Rlc3RkaXIvJG15X2ZpbGUiOyB0aGVuCisJJG9wdF9xdWlldCB8fCBmdW5jX2VjaG9fb25jZSAiJG15X21zZ192YXIiCisJJG9wdF9xdWlldCB8fCBmdW5jX2VjaG8gImNvcHlpbmcgJG15X2NvcHlfbXNnIgorCWNvcHlfcmV0dXJuX3N0YXR1cz0wCisgICAgICBmaQorICAgIGZpCisgICAgaWYgdGVzdCAiJGNvcHlfcmV0dXJuX3N0YXR1cyIgIT0gMDsgdGhlbgorICAgICAgJG9wdF9xdWlldCB8fCBmdW5jX2VjaG9fb25jZSAiJG15X21zZ192YXIiCisgICAgICBmdW5jX2Vycm9yICJjYW4gbm90IGNvcHkgXGAkbXlfc3JjZGlyLyRteV9maWxlJyB0byBcYCRteV9kZXN0ZGlyLyciCisgICAgICBleGl0X3N0YXR1cz0kRVhJVF9GQUlMVVJFCisgICAgZmkKK30KKworCisjIGZ1bmNfY29weV9zb21lX2ZpbGVzIHNyY2ZpbGVfc3BlYyBzcmNkaXIgZGVzdGRpciBbbXNnX3Zhcl0gW2NiPWZ1bmNfY29weV9jYl0KKyMgQ2FsbCBDT1BZX0NCIGZvciBlYWNoIHJlZ3VsYXIgZmlsZSBpbiBTUkNESVIgbmFtZWQgYnkgdGhlICc6JyBkZWxpbWl0ZWQKKyMgbmFtZXMgaW4gU1JDRklMRV9TUEVDLiAgVGhlIG9kZCBjYWxsaW5nIGNvbnZlbnRpb24gaXMgbmVlZGVkIHRvIGFsbG93CisjIHNwYWNlcyBpbiBmaWxlIGFuZCBkaXJlY3RvcnkgbmFtZXMuCitmdW5jX2NvcHlfc29tZV9maWxlcyAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBteV9zcmNmaWxlX3NwZWM9IiQxIgorICAgIG15X3NyY2Rpcj0iJDIiCisgICAgbXlfZGVzdGRpcj0iJDMiCisgICAgbXlfbXNnX3Zhcj0iJDQiCisgICAgbXlfY29weV9jYj0iJHs1LWZ1bmNfY29weV9jYn0iCisKKyAgICBteV9zYXZlX0lGUz0iJElGUyIKKyAgICBJRlM9OgorICAgIGZvciBteV9maWxlbmFtZSBpbiAkbXlfc3JjZmlsZV9zcGVjOyBkbworICAgICAgSUZTPSIkbXlfc2F2ZV9JRlMiCisgICAgICBpZiB0ZXN0IC1mICIkbXlfc3JjZGlyLyRteV9maWxlbmFtZSI7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAiWCRteV9jb3B5X2NiIiA9IFhmdW5jX2NvcHlfY2I7IHRoZW4KKwkgICRvcHRfZm9yY2UgfHwgaWYgdGVzdCAtZiAiJG15X2Rlc3RkaXIvJG15X2ZpbGVuYW1lIjsgdGhlbgorCSAgICAkb3B0X3F1aWV0IHx8IGZ1bmNfZWNob19vbmNlICIkbXlfbXNnX3ZhciIKKwkgICAgJG9wdF9xdWlldCBcCisJICAgICAgfHwgZnVuY19lcnJvciAiXGAkbXlfZGVzdGRpci8kbXlfZmlsZW5hbWUnIGV4aXN0czogdXNlIFxgLS1mb3JjZScgdG8gb3ZlcndyaXRlIgorCSAgICBjb250aW51ZQorCSAgZmkKKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKwlmdW5jX2VjaG9fb25jZSAiJG15X21zZ192YXIiCisJZnVuY19mYXRhbF9lcnJvciAiXGAkbXlfZmlsZW5hbWUnIG5vdCBmb3VuZCBpbiBcYCRteV9zcmNkaXInIgorICAgICAgZmkKKworICAgICAgJG15X2NvcHlfY2IgIiRteV9maWxlbmFtZSIgIiRteV9zcmNkaXIiICIkbXlfZGVzdGRpciIgIiRteV9tc2dfdmFyIgorICAgIGRvbmUKKyAgICBJRlM9IiRteV9zYXZlX0lGUyIKK30KKworCisjIGZ1bmNfZml4dXBfTWFrZWZpbGUgc3JjZmlsZSBzcmNkaXIgZGVzdGRpcgorZnVuY19maXh1cF9NYWtlZmlsZSAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBteV9maWxlbmFtZT0iJDEiCisgICAgbXlfc3JjZGlyPSIkMiIKKyAgICBteV9kZXN0ZGlyPSIkMyIKKyAgICBteV9maXh1cF9ub25fc3VicGFja2FnZV9zY3JpcHQ9IlwKKyAgICAgIHMsKExJQk9CSlMpLChsdGRsX0xJQk9CSlMpLGcKKyAgICAgIHMsKExUTElCT0JKUyksKGx0ZGxfTFRMSUJPQkpTKSxnCisgICAgICBzLGxpYmx0ZGwvY29uZmlndXJlLmFjLCwKKyAgICAgIHMsbGlibHRkbC9jb25maWd1cmUsLAorICAgICAgcyxsaWJsdGRsL2FjbG9jYWwubTQsLAorICAgICAgcyxsaWJsdGRsL2NvbmZpZy1oLmluLCwKKyAgICAgIHMsbGlibHRkbC9NYWtlZmlsZS5hbSwsCisgICAgICBzLGxpYmx0ZGwvTWFrZWZpbGUuaW4sLAorICAgICAgL15bCSBdKlxcXFxcJC9kIgorICAgIGNhc2UgJG15X2ZpbGVuYW1lIGluCisgICAgICBNYWtlZmlsZS5hbSkKKwlteV9maXh1cF9ub25fc3VicGFja2FnZV9zY3JpcHQ9YGVjaG8gIiRteV9maXh1cF9ub25fc3VicGFja2FnZV9zY3JpcHQiIHwgXAorCQlzZWQgJ3MsbGlibHRkbC8sLCdgCisJbXlfZml4dXBfaW5jX3BhdGhzX3NjcmlwdD0gOzsKKyAgICAgIE1ha2VmaWxlLmluYykKKwlyZXBsPSRsdGRsZGlyCisJcmVwbF91c2NvcmU9YCRFQ0hPICIkcmVwbCIgfCAkU0VEICdzLFsvListXSxfLGcnYAorCW15X2ZpeHVwX2luY19wYXRoc19zY3JpcHQ9IlwKKwkgIHMsbGlibHRkbF8sQHJlcGxfdXNjb3JlQF8sCisJICBzLGxpYmx0ZGwvLEByZXBsQC8sCisJICBzLDogbGlibHRkbC8sOiBAcmVwbEAvLAorCSAgcywgLUlsaWJsdGRsICwgLUlAcmVwbEAgLAorCSAgcyxcXFwkKGxpYmx0ZGxfLFwkKEByZXBsX3VzY29yZUBfLAorCSAgcywpL2xpYmx0ZGwgLCkvQHJlcGxAICwKKwkgIHMsQHJlcGxfdXNjb3JlQCwke3JlcGxfdXNjb3JlfSxnCisJICBzLEByZXBsQCwke3JlcGx9LGciCisJOzsKKyAgICBlc2FjCisKKyAgICAkUk0gIiRteV9kZXN0ZGlyLyRteV9maWxlbmFtZSIgMj4vZGV2L251bGwKKyAgICAkb3B0X3F1aWV0IHx8IGZ1bmNfZWNobyAiY3JlYXRpbmcgZmlsZSBcYCRteV9kZXN0ZGlyLyRteV9maWxlbmFtZSciCisgICAgaWYgJG9wdF9kcnlfcnVuOyB0aGVuIDo7CisgICAgZWxzZQorICAgICAgJFNFRCAiJG15X2ZpeHVwX25vbl9zdWJwYWNrYWdlX3NjcmlwdAorCSAgICAkbXlfZml4dXBfaW5jX3BhdGhzX3NjcmlwdCIgXAorCTwgIiRteV9zcmNkaXIvJG15X2ZpbGVuYW1lIiA+ICIkbXlfZGVzdGRpci8kbXlfZmlsZW5hbWUiIHx8CisJZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGNyZWF0ZSAkbXlfZGVzdGRpci8kbXlfZmlsZW5hbWUiCisgICAgZmkKK30KKworIyBmdW5jX3NjYW5fZmlsZXMKKyMgU2NhbiBjb25maWd1cmUuKGFjfGluKSBhbmQgYWNsb2NhbC5tNCAoaWYgcHJlc2VudCkgZm9yIHVzZSBvZiBsaWJsdGRsCisjIGFuZCBsaWJ0b29sLiAgUG9zc2libHkgcnVubmluZyBzb21lIG9mIHRoZXNlIHRvb2xzIGlmIG5lY2Vzc2FyeS4KKyMgTGlidG9vbGl6ZSBhZmZlY3RzIHRoZSBjb250ZW50cyBvZiBhY2xvY2FsLm00LCBhbmQgc2hvdWxkIGJlIHJ1biBiZWZvcmUKKyMgYWNsb2NhbCwgc28gd2UgY2FuJ3QgdXNlIGNvbmZpZ3VyZSAtLXRyYWNlIHdoaWNoIHJlbGllcyBvbiBhIGNvbnNpc3RlbnQKKyMgY29uZmlndXJlLihhY3xpbikgYW5kIGFjbG9jYWwubTQuCitmdW5jX3NjYW5fZmlsZXMgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgIyBQcmVmZXIgY29uZmlndXJlLmFjIHRvIGNvbmZpZ3VyZS5pbgorICAgIHRlc3QgLWYgY29uZmlndXJlLmFjICYmIGNvbmZpZ3VyZV9hYz1jb25maWd1cmUuYWMKKyAgICB0ZXN0IC1mICIkY29uZmlndXJlX2FjIiB8fCBjb25maWd1cmVfYWM9CisKKyAgICAjIFNldCBsb2NhbCB2YXJpYWJsZXMgdG8gcmVmbGVjdCBjb250ZW50cyBvZiBjb25maWd1cmUuYWMKKyAgICBteV9zZWRfc2Nhbl9jb25maWd1cmVfYWM9J3MsIy4qJCwsOyBzLF5kbmwgLiokLCw7IHMsIGRubCAuKiQsLDsKKwkvQUNfSU5JVC8geworCSAgICBzLF4uKiQsc2Vlbl9hdXRvY29uZj06LAorCSAgICBwCisJfQorCWQnCisgICAgdGVzdCAteiAiJGNvbmZpZ3VyZV9hYyIgXAorICAgICAgICB8fCBldmFsIGAkU0VEICIkbXlfc2VkX3NjYW5fY29uZmlndXJlX2FjIiAiJGNvbmZpZ3VyZV9hYyJgCisKKyAgICAkc2Vlbl9hdXRvY29uZiB8fCB7CisJbXlfY29uZmlndXJlX2FjPQorCXRlc3QgLW4gIiRjb25maWd1cmVfYWMiICYmIG15X2NvbmZpZ3VyZV9hYz0iJGNvbmZpZ3VyZV9hYzogIgorICAgICAgICBmdW5jX3ZlcmJvc2UgIiR7bXlfY29uZmlndXJlX2FjfW5vdCB1c2luZyBBdXRvY29uZiIKKworCSMgTWFrZSBzdXJlIGx0ZGxkaXIgYW5kIGx0ZGxfbW9kZSBoYXZlIHNlbnNpYmxlIGRlZmF1bHRzCisgICAgICAgICMgc2luY2Ugd2UgcmV0dXJuIGVhcmx5IGhlcmU6CisJdGVzdCAtbiAiJGx0ZGxkaXIiIHx8IGx0ZGxkaXI9bGlibHRkbAorCXRlc3QgLW4gIiRsdGRsX21vZGUiIHx8IGx0ZGxfbW9kZT1zdWJwcm9qZWN0CisKKwlyZXR1cm4KKyAgICB9CisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworICAgICMgUHJvYmUgbWFjcm8gdXNhZ2UgaW4gY29uZmlndXJlLmFjIGFuZC9vciBhY2xvY2FsLm00LiAjCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKworICAgIG15X3NlZF90cmFjZXM9J3MsIy4qJCwsOyBzLF5kbmwgLiokLCw7IHMsIGRubCAuKiQsLAorICAgICAgICBzLF4uKkFDX1JFUVVJUkUoLiokLCw7IHMsXi4qbTRfcmVxdWlyZSguKiQsLDsKKwlzLF4uKm00X2RlZmluZSguKiQsLAorCXMsXi4qQVtDVV1fREVGVU4oLiokLCw7IHMsXi4qbTRfZGVmdW4oLiokLCwKKwkvQUNfQ09ORklHX0FVWF9ESVIoLyB7CisJICAgIHMsXi4qQUNfQ09ORklHX0FVWF9ESVIoW1sJIF0qXChbXl0pXSpcKS4qJCxhY19hdXhkaXI9XDEsCisJICAgIHAKKyAgICAgICAgfQorCS9BQ19DT05GSUdfTUFDUk9fRElSKC8geworCSAgICBzLF4uKkFDX0NPTkZJR19NQUNST19ESVIoW1sJIF0qXChbXl0pXSpcKS4qJCxhY19tYWNyb2Rpcj1cMSwKKwkgICAgcAorICAgICAgICB9CisJL19MVF9DT05GSUdfTFRETF9ESVIoL2QKKwkvTFRfQ09ORklHX0xURExfRElSKC8geworCSAgICBzLF4uKkxUX0NPTkZJR19MVERMX0RJUihbWwkgXSpcKFteXSldKlwpLiokLGFjX2x0ZGxkaXI9XDEsCisJICAgIHAKKwl9CisJL1xbQVtDTV1fUFJPR19MSUJUT09ML2QKKwkvQVtDTV1fUFJPR19MSUJUT09MLyB7CisJICAgIHMsXi4qJCxzZWVuX2xpYnRvb2w9OiwKKwkgICAgcAorCX0KKwkvdGhlLipvcHRpb24gaW50by4qTFRfSU5JVC4qcGFyYW1ldGVyL2QKKwkvXFtMVF9JTklUL2QKKwkvTFRfSU5JVC8JCSB7CisJICAgIHMsXi4qJCxzZWVuX2xpYnRvb2w9OiwKKwkgICAgcAorCX0KKwkvXFtMVERMX0lOSVQvZAorCS9MVERMX0lOSVQvICAgICAgICAgIHsKKwkgICAgcyxeLipMVERMX0lOSVQoW1sJIF0qXChbXl0pXSpcKS4qJCxsdGRsX29wdGlvbnM9IlwxIiwKKwkgICAgcyxeLipMVERMX0lOSVRbCSBdKiQsc2Vlbl9sdGRsPTosCisJICAgIHAKKwl9CisJL0xUX1dJVEhfTFRETC8gICAgICAgeworCSAgICBzLF4uKiQsc2Vlbl9sdGRsPTosCisJICAgIHAKKwl9CisJL0FDX0xJQl9MVERMLyAgICAgICAgeworCSAgICBzLF4uKiQsc2Vlbl9sdGRsPTosCisJICAgIHAKKwl9CisJL0FDX1dJVEhfTFRETC8gICAgICAgeworCSAgICBzLF4uKiQsc2Vlbl9sdGRsPTosCisJICAgIHAKKwl9CisJZCcKKyAgICBldmFsIGBjYXQgYWNsb2NhbC5tNCAiJGNvbmZpZ3VyZV9hYyIgMj4vZGV2L251bGwgfCAkU0VEICIkbXlfc2VkX3RyYWNlcyJgCisKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0gIworICAgICMgVmFsaWRhdGUgbHRkbGRpci4gIworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0gIworCisgICAgYWNfbHRkbGRpcj1gJEVDSE8gIiRhY19sdGRsZGlyIiB8ICRTRUQgJ3MsLyokLCwnYAorCisgICAgIyBJZiAkY29uZmlndXJlX2FjIGNvbnRhaW5zIEFDX0NPTkZJR19MVERMX0RJUiwgY2hlY2sgdGhhdCBpdHMKKyAgICAjIGFyZ3VtZW50cyB3ZXJlIG5vdCBnaXZlbiBpbiB0ZXJtcyBvZiBhIHNoZWxsIHZhcmlhYmxlIQorICAgIGNhc2UgIiRhY19sdGRsZGlyIiBpbgorICAgICAgKlwkKikKKyAgICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2FuIG5vdCBoYW5kbGUgdmFyaWFibGVzIGluIExUX0NPTkZJR19MVERMX0RJUiIKKyAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIElmIG5laXRoZXIgLS1sdGRsIG5vciBMVF9DT05GSUdfTFRETF9ESVIgYXJlIHNwZWNpZmllZCwgZGVmYXVsdCB0bworICAgICMgYGxpYmx0ZGwnLiAgSWYgYm90aCBhcmUgc3BlY2lmaWVkLCB0aGV5IG11c3QgYmUgdGhlIHNhbWUuICBPdGhlcndpc2UsCisgICAgIyB0YWtlIHRoZSBvbmUgdGhhdCBpcyBnaXZlbiEgKElmIExUX0NPTkZJR19MVERMX0RJUiBpcyBub3Qgc3BlY2lmaWVkCisgICAgIyB3ZSBzdWdnZXN0IGFkZGluZyBpdCBsYXRlciBpbiB0aGlzIGNvZGUuKQorICAgIGNhc2UgeCRhY19sdGRsZGlyLHgkbHRkbGRpciBpbgorICAgICAgeCx4KQlsdGRsZGlyPWxpYmx0ZGwJCTs7CisgICAgICB4Kix4KQlsdGRsZGlyPSRhY19sdGRsZGlyCTs7CisgICAgICB4LHgqKQlsdGRsZGlyPSRsdGRsZGlyCTs7CisgICAgICAqKQorICAgICAgICB0ZXN0IHgiJGFjX2x0ZGxkaXIiID0geCIkbHRkbGRpciIgfHwgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICItLWx0ZGw9JyRsdGRsZGlyJyBkb2VzIG5vdCBtYXRjaCBMVF9DT05GSUdfTFRETF9ESVIoJGFjX2x0ZGxkaXIpIgorCTs7CisgICAgZXNhYworCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIworICAgICMgVmFsaWRhdGUgbHRkbF9tb2RlLiAjCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMKKworICAgIHRlc3QgLW4gIiRsdGRsX29wdGlvbnMiICYmIHNlZW5fbHRkbD06CisKKyAgICAjIElmICRjb25maWd1cmVfYWMgY29udGFpbnMgTFRETF9JTklULCBjaGVjayB0aGF0IGl0cworICAgICMgYXJndW1lbnRzIHdlcmUgbm90IGdpdmVuIGluIHRlcm1zIG9mIGEgc2hlbGwgdmFyaWFibGUhCisgICAgY2FzZSAiJGx0ZGxfb3B0aW9ucyIgaW4KKyAgICAgICpcJCopCisgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbiBub3QgaGFuZGxlIHZhcmlhYmxlcyBpbiBMVERMX0lOSVQiCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBFeHRyYWN0IG1vZGUgbmFtZSBmcm9tIGx0ZGxfb3B0aW9ucworICAgICMgRklYTUU6IERpYWdub3NlIG11bHRpcGxlIGNvbmZsaWN0aW5nIG1vZGVzIGluIGx0ZGxfb3B0aW9ucworICAgIGFjX2x0ZGxfbW9kZT0KKyAgICBjYXNlICIgJGx0ZGxfb3B0aW9ucyAiIGluCisgICAgICAqIiBub25yZWN1cnNpdmUgIiopICBhY19sdGRsX21vZGU9bm9ucmVjdXJzaXZlCTs7CisgICAgICAqIiByZWN1cnNpdmUgIiopICAgICBhY19sdGRsX21vZGU9cmVjdXJzaXZlCTs7CisgICAgICAqIiBzdWJwcm9qZWN0ICIqKSAgICBhY19sdGRsX21vZGU9c3VicHJvamVjdAk7OworICAgIGVzYWMKKworICAgICMgSWYgbmVpdGhlciAtLWx0ZGwgbm9yIGFuIExURExfSU5JVCBtb2RlIGFyZSBzcGVjaWZpZWQsIGRlZmF1bHQgdG8KKyAgICAjIGBzdWJwcm9qZWN0Jy4gIElmIGJvdGggYXJlIHNwZWNpZmllZCwgdGhleSBtdXN0IGJlIHRoZSBzYW1lLiAgT3RoZXJ3aXNlLAorICAgICMgdGFrZSB0aGUgb25lIHRoYXQgaXMgZ2l2ZW4hCisgICAgY2FzZSB4JGFjX2x0ZGxfbW9kZSx4JGx0ZGxfbW9kZSBpbgorICAgICAgeCx4KQlsdGRsX21vZGU9c3VicHJvamVjdAk7OworICAgICAgeCoseCkJbHRkbF9tb2RlPSRhY19sdGRsX21vZGUJOzsKKyAgICAgIHgseCopCWx0ZGxfbW9kZT0kbHRkbF9tb2RlCTs7CisgICAgICAqKQorICAgICAgICB0ZXN0IHgiJGFjX2x0ZGxfbW9kZSIgPSB4IiRsdGRsX21vZGUiIHx8IFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiLS0kbHRkbF9tb2RlIGRvZXMgbm90IG1hdGNoIExURExfSU5JVCgkYWNfbHRkbF9tb2RlKSIKKwk7OworICAgIGVzYWMKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLSAjCisgICAgIyBWYWxpZGF0ZSBhdXhkaXIuICMKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0gIworCisgICAgaWYgdGVzdCAtbiAiJGFjX2F1eGRpciI7IHRoZW4KKyAgICAgICMgSWYgJGNvbmZpZ3VyZV9hYyBjb250YWlucyBBQ19DT05GSUdfQVVYX0RJUiwgY2hlY2sgdGhhdCBpdCB3YXMKKyAgICAgICMgbm90IGdpdmVuIGluIHRlcm1zIG9mIGEgc2hlbGwgdmFyaWFibGUhCisgICAgICBjYXNlICIkYWNfYXV4ZGlyIiBpbgorICAgICAgKlwkKikKKyAgICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2FuIG5vdCBoYW5kbGUgdmFyaWFibGVzIGluIEFDX0NPTkZJR19BVVhfRElSIgorICAgICAgICA7OworICAgICAgKikKKwlhdXhkaXI9JGFjX2F1eGRpcgorCTs7CisgICAgICBlc2FjCisgICAgZWxzZQorICAgICAgIyBUcnkgdG8gZGlzY292ZXIgYXV4ZGlyIHRoZSBzYW1lIHdheSBpdCBpcyBkaXNjb3ZlcmVkIGJ5IGNvbmZpZ3VyZS4KKyAgICAgICMgTm90ZSB0aGF0IHdlIGRlZmF1bHQgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorICAgICAgZm9yIGRpciBpbiAuIC4uIC4uLy4uOyBkbworICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2luc3RhbGwtc2giOyB0aGVuCisgICAgICAgICAgYXV4ZGlyPSRkaXIKKyAgICAgICAgICBicmVhaworICAgICAgICBlbGlmIHRlc3QgLWYgIiRkaXIvaW5zdGFsbC5zaCI7IHRoZW4KKyAgICAgICAgICBhdXhkaXI9IiRkaXIiCisgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICBmaQorCisgICAgIyBKdXN0IHVzZSB0aGUgY3VycmVudCBkaXJlY3RvcnkgaWYgYWxsIGVsc2UgZmFpbHMuCisgICAgdGVzdCAtbiAiJGF1eGRpciIgfHwgYXV4ZGlyPS4KKworCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworICAgICMgRmluZCBsb2NhbCBtNCBtYWNybyBkaXJlY3RvcnkuICMKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisKKyAgICAjIEh1bnQgZm9yIEFDTE9DQUxfQU1GTEFHUyBpbiBgTWFrZWZpbGUuYW0nIGZvciBhIGAtSScgYXJndW1lbnQuCisKKyAgICBteV9zZWRfYWNsb2NhbF9mbGFncz0nCisgICAgICAgIC9eWwkgXSpBQ0xPQ0FMX1tBLVpfXSpGTEFHU1sJIF0qPS8geworCSAgICBzLF5bXj1dKj1bCSBdKlwoLipcKSwgXDEsCisJICAgIHEKKwl9CisJZCcKKyAgICBpZiB0ZXN0IC1mIE1ha2VmaWxlLmFtOyB0aGVuCisgICAgICBteV9tYWNyb2Rpcl9pc19uZXh0PWZhbHNlCisgICAgICBmb3IgYXJnIGluIGAkU0VEICIkbXlfc2VkX2FjbG9jYWxfZmxhZ3MiIE1ha2VmaWxlLmFtYDsgZG8KKyAgICAgICAgaWYgJG15X21hY3JvZGlyX2lzX25leHQ7IHRoZW4KKyAgICAgICAgICBhbV9tYWNyb2Rpcj0iJGFyZyIKKyAgICAgICAgICBicmVhaworICAgICAgICBlbHNlCisgICAgICAgICAgaWYgdGVzdCAiWCRhcmciID0gIlgtSSI7IHRoZW4KKyAgICAgICAgICAgIG15X21hY3JvZGlyX2lzX25leHQ9OgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG15X21hY3JvZGlyX2lzX25leHQ9ZmFsc2UKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZG9uZQorICAgIGZpCisKKyAgICBtYWNyb2Rpcj0iJGFjX21hY3JvZGlyIgorICAgIHRlc3QgLXogIiRtYWNyb2RpciIgJiYgbWFjcm9kaXI9IiRhbV9tYWNyb2RpciIKKworICAgIGlmIHRlc3QgLW4gIiRhbV9tYWNyb2RpciIgJiYgdGVzdCAtbiAiJGFjX21hY3JvZGlyIjsgdGhlbgorICAgICAgdGVzdCAiJGFtX21hY3JvZGlyIiA9ICIkYWNfbWFjcm9kaXIiIFwKKyAgICAgICAgfHwgZnVuY19mYXRhbF9lcnJvciAiQUNfQ09ORklHX01BQ1JPX0RJUihbJGFjX21hY3JvZGlyXSkgY29uZmxpY3RzIHdpdGggQUNMT0NBTF9BTUZMQUdTPS1JICRhbV9tYWNyb2Rpci4iCisgICAgZmkKK30KKworIyBmdW5jX2luY2x1ZGVkX2ZpbGVzIHNlYXJjaGZpbGUKKyMgT3V0cHV0IElOQ0xVREVGSUxFIGlmIFNFQVJDSEZJTEUgbTRfaW5jbHVkZXMgaXQsIGVsc2Ugb3V0cHV0IFNFQVJDSEZJTEUuCitmdW5jX2luY2x1ZGVkX2ZpbGVzICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIG15X3NlYXJjaGZpbGU9IiQxIgorCisgICAgbXlfaW5jbHVkZV9yZWdleD0KKyAgICBteV9zZWRfaW5jbHVkZT0nCisgICAgICAgIC9ebTRfaW5jbHVkZShcWy4qXF0pJC8geworCSAgICBzLF5tNF9pbmNsdWRlKFxbXCguKlwpXF0pJCxcMSwKKwkgICAgcAorCX0KKyAgICAgICAgZCcKKworICAgIGlmIHRlc3QgLWYgIiRteV9zZWFyY2hmaWxlIjsgdGhlbgorICAgICAgJEVDSE8gIiRteV9zZWFyY2hmaWxlIgorCisgICAgICAjIE9ubHkgcmVjdXJzZSB3aGVuIHdlIGRvbid0IGNhcmUgaWYgYWxsIHRoZSB2YXJpYWJsZXMgd2UgdXNlIGdldAorICAgICAgIyB0cmFzaGVkLCBzaW5jZSB0aGV5IGFyZSBpbiBnbG9iYWwgc2NvcGUuCisgICAgICBmb3IgbXlfZmlsZW5hbWUgaW4gYCRTRUQgIiRteV9zZWRfaW5jbHVkZSIgIiRteV9zZWFyY2hmaWxlImA7IGRvCisJZnVuY19pbmNsdWRlZF9maWxlcyAkbXlfZmlsZW5hbWUKKyAgICAgIGRvbmUKKyAgICBmaQorfQorCisKKyMgZnVuY19zZXJpYWwgZmlsZW5hbWUgW21hY3JvX3JlZ2V4XQorIyBPdXRwdXQgdGhlIHZhbHVlIG9mIHRoZSBzZXJpYWwgbnVtYmVyIGNvbW1lbnQgaW4gRklMRU5BTUUsIHdoZXJlIHRoZQorIyBjb21tZW50IGxpbmUgbXVzdCBhbHNvIG1hdGNoIE1BQ1JPX1JFR0VYLCBpZiBnaXZlbi4KK2Z1bmNfc2VyaWFsICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIG15X2ZpbGVuYW1lPSIkMSIKKyAgICBteV9tYWNyb19yZWdleD0iJDIiCisgICAgbXlfc2VkX3NlcmlhbD0nCisJL14jIHNlcmlhbCBbMS05XVswLTkuXSpbCSBdKiciJG15X21hY3JvX3JlZ2V4IidbCSBdKiQvIHsKKwkgICAgcyxeIyBzZXJpYWwgXChbMS05XVswLTkuXSpcKS4qJCxcMSwKKwkgICAgcQorCX0KKwlkJworCisgICAgIyBTZWFyY2ggRklMRU5BTUUgYW5kIGFsbCB0aGUgZmlsZXMgaXQgbTRfaW5jbHVkZXMgZm9yIGEgc2VyaWFsIG51bWJlcgorICAgICMgaW4gdGhlIGZpbGUgdGhhdCBBQ19ERUZVTnMgTUFDUk9fUkVHRVguCisgICAgbXlfc2VyaWFsPQorICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRteV9maWxlbmFtZSIKKyAgICBteV9maWxlYmFzZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKyAgICBmb3IgbXlfZmlsZSBpbiBgZnVuY19pbmNsdWRlZF9maWxlcyAiJG15X2ZpbGVuYW1lImA7IGRvCisgICAgICBpZiB0ZXN0IC16ICIkbXlfbWFjcm9fcmVnZXgiIHx8CisgICAgICAgICB0ZXN0ICIkbXlfZmlsZW5hbWUiID0gYWNsb2NhbC5tNCB8fAorICAgICAgICAgdGVzdCAiWCRteV9tYWNyb19yZWdleCIgPSAiWCRteV9maWxlYmFzZSIgfHwKKyAgICAgICAgIGZ1bmNfZ3JlcCAnXkFDX0RFRlVOKFxbJyIkbXlfbWFjcm9fcmVnZXgiICIkbXlfZmlsZSIKKyAgICAgIHRoZW4KKyAgICAgICAgbXlfc2VyaWFsPWAkU0VEIC1lICIkbXlfc2VkX3NlcmlhbCIgIiRteV9maWxlImAKKwlicmVhaworICAgICAgZmkKKyAgICBkb25lCisKKyAgICAjIElmIHRoZSBmaWxlIGhhcyBubyBzZXJpYWwgbnVtYmVyLCB3ZSBhc3N1bWUgaXQncyBhbmNpZW50LgorICAgIHRlc3QgLW4gIiRteV9zZXJpYWwiIHx8IG15X3NlcmlhbD0wCisKKyAgICAkRUNITyAiJG15X3NlcmlhbCIKK30KKworCisjIGZ1bmNfc2VyaWFsX21heCBzZXJpYWwxIHNlcmlhbDIKKyMgQ29tcGFyZSAocG9zc2libHkgbXVsdGktcGFydCwgJy4nIGRlbGltaXRlZCkgc2VyaWFsIG51bWJlcnMsIGFuZAorIyByZXR1cm4gdGhlIGxhcmdlc3QgaW4gJGZ1bmNfc2VyaWFsX21heF9yZXN1bHQuICBJZiB0aGV5IGFyZSB0aGUKKyMgc2FtZSwgZnVuY19zZXJpYWxfbWF4X3Jlc3VsdCB3aWxsIGJlIGVtcHR5LgorZnVuY19zZXJpYWxfbWF4ICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIG15X3NlcmlhbDE9IiQxIgorICAgIG15X3NlcmlhbDI9IiQyIgorCisgICAgbXlfc2VkX2RvdD0ncy9cLi4qJC8vZycKKyAgICBteV9zZWRfcmVzdD0ncy9eWzAtOV1bMS05XSpcLiovLycKKyAgICBteV9zZWRfZGlnaXRzPSdzL1teMC05Ll0vL2cnCisKKyAgICAjIEluY2FzZSB0aGV5IHR1cm4gb3V0IHRvIGJlIHRoZSBzYW1lLCB3ZSdsbCBzZXQgaXQgdG8gZW1wdHkKKyAgICBmdW5jX3NlcmlhbF9tYXhfcmVzdWx0PQorCisgICAgdGVzdCAiWCQxJDIiID0gWGAkRUNITyAiJDEkMiIgfCAkU0VEICIkbXlfc2VkX2RpZ2l0cyJgIHx8IHsKKyAgICAgIGZ1bmNfZXJyb3IgInNlcmlhbCBudW1iZXJzIFxgJDEnIG9yIFxgJDInIGNvbnRhaW4gbm9uLWRpZ2l0IGNoYXJzIgorICAgICAgcmV0dXJuCisgICAgfQorCisgICAgd2hpbGUgdGVzdCAtbiAiJG15X3NlcmlhbDEkbXlfc2VyaWFsMiI7IGRvCisgICAgICBteV9zZXJpYWwxX3BhcnQ9YCRFQ0hPICIkbXlfc2VyaWFsMSIgfCAkU0VEICIkbXlfc2VkX2RvdCJgCisgICAgICBteV9zZXJpYWwyX3BhcnQ9YCRFQ0hPICIkbXlfc2VyaWFsMiIgfCAkU0VEICIkbXlfc2VkX2RvdCJgCisKKyAgICAgIHRlc3QgLXogIiRteV9zZXJpYWwxX3BhcnQkbXlfc2VyaWFsMl9wYXJ0IiBcCisgICAgICAgICYmIGJyZWFrCisKKyAgICAgIHRlc3QgLXogIiRteV9zZXJpYWwxX3BhcnQiIFwKKyAgICAgICAgJiYgeyBmdW5jX3NlcmlhbF9tYXhfcmVzdWx0PSIkMiI7IGJyZWFrOyB9CisKKyAgICAgIHRlc3QgLXogIiRteV9zZXJpYWwyX3BhcnQiIFwKKyAgICAgICAgJiYgeyBmdW5jX3NlcmlhbF9tYXhfcmVzdWx0PSIkMSI7IGJyZWFrOyB9CisKKyAgICAgIHRlc3QgIiRteV9zZXJpYWwxX3BhcnQiIC1ndCAiJG15X3NlcmlhbDJfcGFydCIgXAorICAgICAgICAmJiB7IGZ1bmNfc2VyaWFsX21heF9yZXN1bHQ9IiQxIjsgYnJlYWs7IH0KKworICAgICAgdGVzdCAiJG15X3NlcmlhbDJfcGFydCIgLWd0ICIkbXlfc2VyaWFsMV9wYXJ0IiBcCisgICAgICAgICYmIHsgZnVuY19zZXJpYWxfbWF4X3Jlc3VsdD0iJDIiOyBicmVhazsgfQorCisgICAgICBteV9zZXJpYWwxPWAkRUNITyAiJG15X3NlcmlhbDEiIHwgJFNFRCAiJG15X3NlZF9yZXN0ImAKKyAgICAgIG15X3NlcmlhbDI9YCRFQ0hPICIkbXlfc2VyaWFsMiIgfCAkU0VEICIkbXlfc2VkX3Jlc3QiYAorICAgIGRvbmUKK30KKworCisjIGZ1bmNfc2VyaWFsX3VwZGF0ZV9jaGVjayBzcmNmaWxlIHNyY19zZXJpYWwgZGVzdGZpbGUgZGVzdF9zZXJpYWwKKyMgVW5sZXNzIFNSQ19TRVJJQUwgaXMgbmV3ZXIgdGhhbiBERVNUX1NFUklBTCBzZXQgJGZ1bmNfc2VyaWFsX3VwZGF0ZV9jaGVjaworIyB0byAnZmFsc2UnLgorZnVuY19zZXJpYWxfdXBkYXRlX2NoZWNrICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIG15X3NyY2ZpbGU9IiQxIgorICAgIG15X3NyY19zZXJpYWw9IiQyIgorICAgIG15X2Rlc3RmaWxlPSIkMyIKKyAgICBteV9kZXN0X3NlcmlhbD0iJDQiCisgICAgbXlfdXBkYXRlX3A9OgorCisgICAgaWYgdGVzdCAtZiAiJG15X2Rlc3RmaWxlIjsgdGhlbgorICAgICAgdGVzdCAiWCRteV9zcmNfc2VyaWFsIiA9ICJYMCIgJiYgeworICAgICAgICBmdW5jX3dhcm5pbmcgIm5vIHNlcmlhbCBudW1iZXIgb24gXGAkbXlfc3JjZmlsZScsIG5vdCBjb3B5aW5nLiIKKwlyZXR1cm4KKyAgICAgIH0KKworICAgICAgIyBEZXRlcm1pbmUgd2hldGhlciB0aGUgZGVzdGluYXRpb24gaGFzIGFuIG9sZGVyIHNlcmlhbC4KKyAgICAgIGZ1bmNfc2VyaWFsX21heCAiJG15X3NyY19zZXJpYWwiICIkbXlfZGVzdF9zZXJpYWwiCisgICAgICB0ZXN0ICJYJG15X3NyY19zZXJpYWwiID0gIlgkZnVuY19zZXJpYWxfbWF4X3Jlc3VsdCIgfHwgbXlfdXBkYXRlX3A9ZmFsc2UKKworICAgICAgdGVzdCAiWCRteV9zcmNfc2VyaWFsIiA9ICJYJGZ1bmNfc2VyaWFsX21heF9yZXN1bHQiIFwKKyAgICAgICAgJiYgZnVuY192ZXJib3NlICJcYCRteV9zcmNmaWxlJyBpcyBzZXJpYWwgJG15X3NyY19zZXJpYWwsIGdyZWF0ZXIgdGhhbiAkbXlfZGVzdF9zZXJpYWwgaW4gXGAkbXlfZGVzdGZpbGUnIgorCisgICAgICBpZiB0ZXN0ICJYJG15X2Rlc3Rfc2VyaWFsIiA9ICJYJGZ1bmNfc2VyaWFsX21heF9yZXN1bHQiOyB0aGVuCisgICAgICAgIGZ1bmNfdmVyYm9zZSAiXGAkbXlfc3JjZmlsZScgaXMgc2VyaWFsICRteV9zcmNfc2VyaWFsLCBsZXNzIHRoYW4gJG15X2Rlc3Rfc2VyaWFsIGluIFxgJG15X2Rlc3RmaWxlJyIKKwkkb3B0X2ZvcmNlIHx8IGlmIHRlc3QgLW4gIiRhY19tYWNyb2RpciRhY19sdGRsZGlyIjsgdGhlbgorICAgICAgICAgICBmdW5jX2Vycm9yICJcYCRteV9kZXN0ZmlsZScgaXMgbmV3ZXI6IHVzZSBcYC0tZm9yY2UnIHRvIG92ZXJ3cml0ZSIKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKworICAgIGZ1bmNfc2VyaWFsX3VwZGF0ZV9jaGVja19yZXN1bHQ9IiRteV91cGRhdGVfcCIKK30KKworCisjIGZ1bmNfYWNsb2NhbF91cGRhdGVfY2hlY2sgZmlsZW5hbWUKKyMgVW5sZXNzIHNlcmlhbCBudW1iZXIgb2YgRklMRU5BTUUgaXMgbmV3ZXIgdGhhbiB0aGUgbWF0Y2hpbmcgc2VyaWFsIG51bWJlcgorIyBpbiBhY2xvY2FsLm00LCBzZXQgJGZ1bmNfYWNsb2NhbF91cGRhdGVfY2hlY2sgdG8gJ2ZhbHNlJy4KK2Z1bmNfYWNsb2NhbF91cGRhdGVfY2hlY2sgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgbXlfc3JjZmlsZT0iJGFjbG9jYWxkaXIvJDEiCisgICAgbXlfZGVzdGZpbGU9ImFjbG9jYWwubTQiCisKKyAgICBjYXNlICRuZWVkIGluCisgICAgICBsaWJ0b29sLm00KQorCW15X3NyY19zZXJpYWw9YGZ1bmNfc2VyaWFsICIkbXlfc3JjZmlsZSIgTFRfSU5JVGAKKwlteV9kZXN0X3NlcmlhbD1gZnVuY19zZXJpYWwgIiRteV9kZXN0ZmlsZSIgTFRfSU5JVGAKKworCSMgU3RyaWN0bHksIHRoaXMgbGlidG9vbGl6ZSBvdWdodCBub3QgdG8gaGF2ZSB0byBkZWFsIHdpdGggYW5jaWVudAorCSMgc2VyaWFsIGZvcm1hdHMsIGJ1dCB3ZSBhY2NlcHQgdGhlbSBoZXJlIHRvIGJlIGNvbXBsZXRlOgorCXRlc3QgIlgkbXlfc3JjX3NlcmlhbCIgPSAiWDAiICYmCisJICBteV9zcmNfc2VyaWFsPWBmdW5jX3NlcmlhbCAiJG15X3NyY2ZpbGUiICdBW0NNXV9QUk9HX0xJQlRPT0wnYAorCXRlc3QgIlgkbXlfZGVzdF9zZXJpYWwiID0gIlgwIiAmJgorCSAgbXlfZGVzdF9zZXJpYWw9YGZ1bmNfc2VyaWFsICIkbXlfZGVzdGZpbGUiICdBW0NNXV9QUk9HX0xJQlRPT0wnYAorCTs7CisgICAgICBsdGRsLm00KQorCW15X3NyY19zZXJpYWw9YGZ1bmNfc2VyaWFsICIkbXlfc3JjZmlsZSIgTFRETF9JTklUYAorCW15X2Rlc3Rfc2VyaWFsPWBmdW5jX3NlcmlhbCAiJG15X2Rlc3RmaWxlIiBMVERMX0lOSVRgCisJOzsKKyAgICAgICopCisJbXlfc3JjX3NlcmlhbD1gZnVuY19zZXJpYWwgIiRteV9zcmNmaWxlIiAiJG5lZWQiYAorCW15X2Rlc3Rfc2VyaWFsPWBmdW5jX3NlcmlhbCAiJG15X2Rlc3RmaWxlIiAiJG5lZWQiYAorCTs7CisgICAgZXNhYworCisgICAgZnVuY19zZXJpYWxfdXBkYXRlX2NoZWNrIFwKKyAgICAgICIkbXlfc3JjZmlsZSIgIiRteV9zcmNfc2VyaWFsIiAiJG15X2Rlc3RmaWxlIiAiJG15X2Rlc3Rfc2VyaWFsIgorCisgICAgZnVuY19hY2xvY2FsX3VwZGF0ZV9jaGVja19yZXN1bHQ9IiRmdW5jX3NlcmlhbF91cGRhdGVfY2hlY2tfcmVzdWx0IgorfQorCisKKyMgZnVuY19zZXJpYWxfdXBkYXRlIGZpbGVuYW1lIHNyY2RpciBkZXN0ZGlyIFttc2dfdmFyXSBbbWFjcm9fcmVdIFtvbGRfbWFjcm9fcmVdCisjIENvcHkgdGhlIEZJTEVOQU1FIGZyb20gYSBTUkNESVIgdG8gREVTVERJUiBwcm92aWRlZCB0aGF0IGVpdGhlciBGSUxFTkFNRQorIyBoYXMgYSBuZXdlciBzZXJpYWwgbnVtYmVyLCBvciBERVNURklMRSBkb2VzIG5vdCB5ZXQgZXhpc3QsIG9yIHRoZSB1c2VyCisjIHNwZWNpZmllZCBgLS1mb3JjZScgYXQgdGhlIGNvbW1hbmQgbGluZS4gIElmIGdpdmVuLCBNQUNST19SRUdFWCBvcgorIyBPTERfTUFDUk9fUkVHRVggbXVzdCBtYXRjaCBhbnkgdGV4dCBhZnRlciAiIyBzZXJpYWwgTiIgaW4gYm90aCBmaWxlcy4KK2Z1bmNfc2VyaWFsX3VwZGF0ZSAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBteV9maWxlbmFtZT0iJDEiCisgICAgbXlfc3JjZGlyPSIkMiIKKyAgICBteV9kZXN0ZGlyPSIkMyIKKyAgICBteV9tc2dfdmFyPSIkNCIKKyAgICBteV9tYWNyb19yZWdleD0iJDUiCisgICAgbXlfb2xkX21hY3JvX3JlZ2V4PSIkNiIKKworICAgIG15X3NlcmlhbF91cGRhdGVfcD06CisgICAgbXlfcmV0dXJuX3N0YXR1cz0xCisgICAgbXlfc3JjZmlsZT0iJG15X3NyY2Rpci8kbXlfZmlsZW5hbWUiCisgICAgbXlfZGVzdGZpbGU9IiRteV9kZXN0ZGlyLyRteV9maWxlbmFtZSIKKworICAgIHRlc3QgLWYgIiRteV9zcmNmaWxlIiB8fCBmdW5jX2ZhdGFsX2Vycm9yICJcYCRteV9zcmNmaWxlJyBkb2VzIG5vdCBleGlzdC4iCisKKyAgICBpZiB0ZXN0IC1mICIkbXlfZGVzdGZpbGUiOyB0aGVuCisgICAgICBteV9zcmNfc2VyaWFsPWBmdW5jX3NlcmlhbCAiJG15X3NyY2ZpbGUiICIkbXlfbWFjcm9fcmVnZXgiYAorICAgICAgbXlfZGVzdF9zZXJpYWw9YGZ1bmNfc2VyaWFsICIkbXlfZGVzdGZpbGUiICIkbXlfbWFjcm9fcmVnZXgiYAorCisgICAgICAjIFN0cmljdGx5LCB0aGlzIGxpYnRvb2xpemUgb3VnaHQgbm90IHRvIGhhdmUgdG8gZGVhbCB3aXRoIGFuY2llbnQKKyAgICAgICMgc2VyaWFsIGZvcm1hdHMsIGJ1dCB3ZSBhY2NlcHQgdGhlbSBoZXJlIHRvIGJlIGNvbXBsZXRlOgorICAgICAgdGVzdCAiWCRteV9zcmNfc2VyaWFsIiA9ICJYMCIgJiYKKyAgICAgICAgbXlfc3JjX3NlcmlhbD1gZnVuY19zZXJpYWwgIiRteV9zcmNmaWxlIiAiJG15X29sZF9tYWNyb19yZWdleCJgCisKKyAgICAgIHRlc3QgIlgkbXlfZGVzdF9zZXJpYWwiID0gIlgwIiAmJgorICAgICAgICBteV9kZXN0X3NlcmlhbD1gZnVuY19zZXJpYWwgIiRteV9kZXN0ZmlsZSIgIiRteV9vbGRfbWFjcm9fcmVnZXgiYAorCisgICAgICBmdW5jX3NlcmlhbF91cGRhdGVfY2hlY2sgXAorICAgICAgICAiJG15X3NyY2ZpbGUiICIkbXlfc3JjX3NlcmlhbCIgIiRteV9kZXN0ZmlsZSIgIiRteV9kZXN0X3NlcmlhbCIKKyAgICAgIG15X3NlcmlhbF91cGRhdGVfcD0iJGZ1bmNfc2VyaWFsX3VwZGF0ZV9jaGVja19yZXN1bHQiCisgICAgZmkKKworICAgIGlmICRteV9zZXJpYWxfdXBkYXRlX3AgfHwgJG9wdF9mb3JjZTsgdGhlbgorICAgICAgZnVuY19jb3B5ICIkbXlfc3JjZmlsZSIgIiRteV9kZXN0ZmlsZSIgIiRteV9tc2dfdmFyIgorICAgICAgbXlfcmV0dXJuX3N0YXR1cz0kPworICAgIGVsaWYgJG9wdF9mb3JjZSAmJiB0ZXN0ICJYJG15X2Rlc3Rfc2VyaWFsIiA9ICJYJG15X3NyY19zZXJpYWwiOyB0aGVuCisgICAgICAkb3B0X3F1aWV0IHx8IGZ1bmNfZWNob19vbmNlICIkbXlfbXNnX3ZhciIKKyAgICAgICRvcHRfcXVpZXQgXAorICAgICAgICB8fCBmdW5jX2VjaG8gIlxgJG15X2Rlc3RmaWxlJyBpcyBhbHJlYWR5IHVwIHRvIGRhdGUuIgorICAgIGZpCisKKyAgICAjIERvIHRoaXMgYWZ0ZXIgdGhlIGNvcHkgZm9yIGhhbmQgbWFpbnRhaW5lZCBgYWNsb2NhbC5tNCcsIGluY2FzZQorICAgICMgaXQgaGFzIGBtNF9pbmNsdWRlKFtERVNURklMRV0pJywgc28gdGhlIGNvcHkgZWZmZWN0aXZlbHkgYWxyZWFkeQorICAgICMgdXBkYXRlZCBgYWNsb2NhbC5tNCcuCisgICAgbXlfaW5jbHVkZWRfZmlsZXM9YGZ1bmNfaW5jbHVkZWRfZmlsZXMgYWNsb2NhbC5tNGAKKyAgICBjYXNlIGBlY2hvICIgJG15X2luY2x1ZGVkX2ZpbGVzICIgfCAkTkwyU1BgIGluCisKKyAgICAgICMgU2tpcCBpbmNsdWRlZCBmaWxlczoKKyAgICAgICoiICRteV9kZXN0ZmlsZSAiKikgOzsKKworICAgICAgIyBPdGhlcndpc2UgY29tcGFyZSB0byBhY2xvY2FsLm00IHNlcmlhbCBudW1iZXIgKGZ1bmNfc2VyaWFsCisgICAgICAjIHJldHVybnMgMCBmb3Igb2xkZXIgbWFjcm8gc2VyaWFsIG51bWJlcnMgYmVmb3JlIHdlIHByb3ZpZGVkCisgICAgICAjIHNlcmlhbCB0YWdzLCBzbyB0aGUgdXBkYXRlIG1lc3NhZ2Ugd2lsbCBiZSBjb3JyZWN0bHkgZ2l2ZW4KKyAgICAgICMgaWYgYWNsb2NhbC5tNCBjb250YWlucyBhbiB1bnRhZ2dlZCAtLWkuZSBvbGRlci0tIG1hY3JvIGZpbGUpOgorICAgICAgKikKKyAgICAgICAgaWYgdGVzdCAtZiBhY2xvY2FsLm00OyB0aGVuCisgICAgICAgICAgZnVuY19zZXJpYWxfbWF4IFwKKyAgICAgICAgICAgICAgIiRteV9zcmNfc2VyaWFsIiBgZnVuY19zZXJpYWwgYWNsb2NhbC5tNCAiJG15X21hY3JvX3JlZ2V4ImAKKyAgICAgICAgICBpZiB0ZXN0ICJYJG15X3NyY19zZXJpYWwiID0gIlgkZnVuY19zZXJpYWxfbWF4X3Jlc3VsdCI7IHRoZW4KKyAgICAgICAgICAgICAgZnVuY19lY2hvX29uY2UgIiRteV9tc2dfdmFyIgorCSAgICAgIGZ1bmNfZWNobyAiWW91IHNob3VsZCBhZGQgdGhlIGNvbnRlbnRzIG9mIFxgJG15X2Rlc3RmaWxlJyB0byBcYGFjbG9jYWwubTQnLiIKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICA7OworICAgIGVzYWMKKyAgICByZXR1cm4gJG15X3JldHVybl9zdGF0dXMKK30KKworCisjIGZ1bmNfa2V5d29yZF91cGRhdGUgZmlsZW5hbWUgc3JjZGlyIGRlc3RkaXIgc2VkX3NjcmlwdCBbbXNnX3Zhcl0KKyMgQ29weSB0aGUgRklMRU5BTUUgZnJvbSBhIFNSQ0RJUiB0byBERVNURElSIHByb3ZpZGVkIHRoYXQgZWl0aGVyIEZJTEVOQU1FCisjIGhhcyBhIG5ld2VyIHJldmlzaW9uIGFjY29yZGluZyB0byB0aGUgc2VyaWFsIG51bWJlciBleHRyYWN0ZWQgYnkKKyMgU0VEX1NDUklQVCwgb3IgREVTVEZJTEUgZG9lcyBub3QgeWV0IGV4aXN0LCBvciB0aGUgdXNlciBzcGVjaWZpZWQKKyMgYC0tZm9yY2UnIGF0IHRoZSBjb21tYW5kIGxpbmUuCitmdW5jX2tleXdvcmRfdXBkYXRlICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIG15X2ZpbGVuYW1lPSIkMSIKKyAgICBteV9zcmNkaXI9IiQyIgorICAgIG15X2Rlc3RkaXI9IiQzIgorICAgIG15X3NlZF9zY3JpcHQ9IiQ0IgorICAgIG15X21zZ192YXI9IiQ1IgorCisgICAgbXlfc3JjZmlsZT0iJG15X3NyY2Rpci8kbXlfZmlsZW5hbWUiCisgICAgbXlfZGVzdGZpbGU9IiRteV9kZXN0ZGlyLyRteV9maWxlbmFtZSIKKworICAgIG15X2tleXdvcmRfdXBkYXRlX3A9OgorCisgICAgdGVzdCAtZiAiJG15X3NyY2ZpbGUiIHx8IGZ1bmNfZmF0YWxfZXJyb3IgIlxgJG15X3NyY2ZpbGUnIGRvZXMgbm90IGV4aXN0LiIKKworICAgIGlmIHRlc3QgLWYgIiRteV9kZXN0ZmlsZSI7IHRoZW4KKyAgICAgIG15X3NyY19zZXJpYWw9YCRTRUQgLWUgIiRteV9zZWRfc2NyaXB0IiAiJG15X3NyY2ZpbGUiYAorICAgICAgdGVzdCAteiAiJG15X3NyY19zZXJpYWwiICYmIHsKKyAgICAgICAgZnVuY193YXJuaW5nICJubyBzZXJpYWwgbnVtYmVyIGluIFxgJG15X3NyY2ZpbGUnLCBub3QgY29weWluZy4iCisJcmV0dXJuCisgICAgICB9CisKKyAgICAgIG15X2Rlc3Rfc2VyaWFsPWAkU0VEIC1lICIkbXlfc2VkX3NjcmlwdCIgIiRteV9kZXN0ZmlsZSJgCisgICAgICB0ZXN0IC1uICIkbXlfZGVzdF9zZXJpYWwiIHx8IG15X2Rlc3Rfc2VyaWFsPTAKKworICAgICAgZnVuY19zZXJpYWxfdXBkYXRlX2NoZWNrIFwKKyAgICAgICAgICIkbXlfc3JjZmlsZSIgIiRteV9zcmNfc2VyaWFsIiAiJG15X2Rlc3RmaWxlIiAiJG15X2Rlc3Rfc2VyaWFsIgorICAgICAgbXlfa2V5d29yZF91cGRhdGVfcD0iJGZ1bmNfc2VyaWFsX3VwZGF0ZV9jaGVja19yZXN1bHQiCisgICAgZmkKKworICAgIGlmICRteV9rZXl3b3JkX3VwZGF0ZV9wIHx8ICRvcHRfZm9yY2U7IHRoZW4KKyAgICAgIGZ1bmNfY29weSAiJG15X3NyY2ZpbGUiICIkbXlfZGVzdGZpbGUiICIkbXlfbXNnX3ZhciIKKyAgICBlbGlmICRvcHRfdmVyYm9zZSB8fCAkb3B0X2ZvcmNlICYmIHRlc3QgIlgkbXlfZGVzdF9zZXJpYWwiID0gIlgkbXlfc3JjX3NlcmlhbCI7IHRoZW4KKyAgICAgIGZ1bmNfZWNob19vbmNlICIkbXlfbXNnX3ZhciIKKyAgICAgIGZ1bmNfZWNobyAiXGAkbXlfZGVzdGZpbGUnIGlzIGFscmVhZHkgdXAgdG8gZGF0ZS4iCisgICAgZmkKK30KKworCisjIGZ1bmNfbHRtYWluX3VwZGF0ZSBmaWxlbmFtZSBzcmNkaXIgZGVzdGRpciBbbXNnX3Zhcl0KKyMgQ29weSB0aGUgRklMRU5BTUUgZnJvbSBhIFNSQ0RJUiB0byBERVNURElSIHByb3ZpZGVkIHRoYXQgZWl0aGVyIEZJTEVOQU1FCisjIGhhcyBhIG5ld2VyIHJldmlzaW9uLCBvciBERVNURklMRSBkb2VzIG5vdCB5ZXQgZXhpc3QsIG9yIHRoZSB1c2VyCisjIHNwZWNpZmllZCBgLS1mb3JjZScgYXQgdGhlIGNvbW1hbmQgbGluZS4KK2Z1bmNfbHRtYWluX3VwZGF0ZSAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBteV9zZWRfbHRtYWluPScKKwkvXnBhY2thZ2VfcmV2aXNpb249J1wnJypbMC05XVsxLTkuXSonXCcnKi8geworCSAgICBzLF5wYWNrYWdlX3JldmlzaW9uPSdcJycqXChbMC05Ll0qXCknXCcnKlsJIF0qJCxcMSwKKwkgICAgcAorCX0KKwlkJworCisgICAgZnVuY19rZXl3b3JkX3VwZGF0ZSAiJDEiICIkMiIgIiQzIiAiJG15X3NlZF9sdG1haW4iICIkNCIKKworICAgIHJldHVybiAkbXlfcmV0dXJuX3N0YXR1cworfQorCisKKyMgZnVuY19jb25maWdfdXBkYXRlIGZpbGVuYW1lIHNyY2RpciBkZXN0ZGlyIFttc2dfdmFyXQorIyBDb3B5IHRoZSBGSUxFTkFNRSBmcm9tIGEgU1JDRElSIHRvIERFU1RESVIgcHJvdmlkZWQgdGhhdCBlaXRoZXIgRklMRU5BTUUKKyMgaGFzIGEgbmV3ZXIgdGltZXN0YW1wLCBvciBERVNURklMRSBkb2VzIG5vdCB5ZXQgZXhpc3QsIG9yIHRoZSB1c2VyCisjIHNwZWNpZmllZCBgLS1mb3JjZScgYXQgdGhlIGNvbW1hbmQgbGluZS4KK2Z1bmNfY29uZmlnX3VwZGF0ZSAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBteV9zZWRfY29uZmlnPScKKwkvXnRpbWVzdGFtcD0nXCcnKlswLTldWzEtOS1dKidcJycqLyB7CisJICAgIHMsXnRpbWVzdGFtcD0nXCcnKlwoWzAtOS1dKlwpJ1wnJyosXDEsCisJICAgIHMvLS8uL2cKKwkgICAgcAorCX0KKwlkJworCisgICAgZnVuY19rZXl3b3JkX3VwZGF0ZSAiJDEiICIkMiIgIiQzIiAiJG15X3NlZF9jb25maWciICIkNCIKKworICAgIHJldHVybiAkbXlfcmV0dXJuX3N0YXR1cworfQorCisKKyMgZnVuY19pbnN0YWxsX3VwZGF0ZSBmaWxlbmFtZSBzcmNkaXIgZGVzdGRpciBbbXNnX3Zhcl0KKyMgQ29weSB0aGUgRklMRU5BTUUgZnJvbSBhIFNSQ0RJUiB0byBERVNURElSIHByb3ZpZGVkIHRoYXQgZWl0aGVyIEZJTEVOQU1FCisjIGhhcyBhIG5ld2VyIHRpbWVzdGFtcCwgb3IgREVTVEZJTEUgZG9lcyBub3QgeWV0IGV4aXN0LCBvciB0aGUgdXNlcgorIyBzcGVjaWZpZWQgYC0tZm9yY2UnIGF0IHRoZSBjb21tYW5kIGxpbmUuCitmdW5jX2luc3RhbGxfdXBkYXRlICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIG15X3NlZF9pbnN0YWxsPScKKwkvXnNjcmlwdHZlcnNpb249J1wnJypbMC05XVsxLTkuLV0qJ1wnJyovIHsKKwkgICAgcyxbIztdLiosLAorCSAgICBzLF5zY3JpcHR2ZXJzaW9uPSdcJycqXChbMC05Li1dKlwpJ1wnJyosXDEsCisJICAgIHMvLS8uL2cKKwkgICAgcAorCX0KKwlkJworCisgICAgZnVuY19rZXl3b3JkX3VwZGF0ZSAiJDEiICIkMiIgIiQzIiAiJG15X3NlZF9pbnN0YWxsIiAiJDQiCisKKyAgICByZXR1cm4gJG15X3JldHVybl9zdGF0dXMKK30KKworCisjIGZ1bmNfbWFzc2FnZV9hY2xvY2FsX0RBVEEgW2dsb2JfZXhjbHVkZV0KKyMgQGFjbG9jYWxfREFUQVxAIGlzIHN1YnN0aXR1dGVkIGFzIHBlciBpdHMgdmFsdWUgaW4gTWFrZWZpbGUuYW07CisjIHRoaXMgZnVuY3Rpb24gbWFzc2FnZXMgaXQgaW50byBhIHN1aXRhYmxlIGZvcm1hdCBmb3IgZnVuY19jb3B5X3NvbWVfZmlsZXMuCitmdW5jX21hc3NhZ2VfYWNsb2NhbF9EQVRBICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIHBrZ21hY3JvX2ZpbGVzPSAgICAgIyBHTE9CQUwgVkFSCisKKyAgICBteV9nbG9iX2V4Y2x1ZGU9IiQxIgorCisgICAgIyBNYXNzYWdlIGEgdmFsdWUgZm9yIHBrZ21hY3JvX2ZpbGVzIGZyb20gdGhlIHZhbHVlIHVzZWQgaW4gTWFrZWZpbGUuYW0uCisgICAgZm9yIG15X2ZpbGVuYW1lIGluIG00L2FyZ3oubTQgbTQvbGlidG9vbC5tNCBtNC9sdGRsLm00IG00L2x0b3B0aW9ucy5tNCBtNC9sdHN1Z2FyLm00IG00L2x0dmVyc2lvbi5tNCBtNC9sdH5vYnNvbGV0ZS5tNDsgZG8KKyAgICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRteV9maWxlbmFtZSIKKyAgICAgIG15X2ZpbGVuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCisgICAgICAjIGlnbm9yZSBleGNsdWRlZCBmaWxlbmFtZXMKKyAgICAgIGlmIHRlc3QgLW4gIiRteV9nbG9iX2V4Y2x1ZGUiOyB0aGVuCisJbXlfY29udD1mYWxzZQorCWV2YWwgJ2Nhc2UgJG15X2ZpbGVuYW1lIGluICckbXlfZ2xvYl9leGNsdWRlJykgbXlfY29udD06IDs7IGVzYWMnCisJJG15X2NvbnQgJiYgY29udGludWUKKyAgICAgIGZpCisKKyAgICAgIHBrZ21hY3JvX2ZpbGVzPSIkcGtnbWFjcm9fZmlsZXM6JG15X2ZpbGVuYW1lIgorICAgIGRvbmUKKworICAgICMgc3RyaXAgc3B1cmlvdXMgbGVhZGluZyBgOicKKyAgICBwa2dtYWNyb19maWxlcz1gJEVDSE8gIiRwa2dtYWNyb19maWxlcyIgfCAkU0VEICdzLF46KiwsJ2AKK30KKworCisjIGZ1bmNfaW5zdGFsbF9wa2dtYWNyb19zdWJwcm9qZWN0CisjIFVubGVzcyAtLXF1aWV0IHdhcyBwYXNzZWQsIGRpc3BsYXkgYSBtZXNzYWdlLiBUaGVuIGNvcHkgcGtnbWFjcm9fZmlsZXMKKyMgZnJvbSBsaWJ0b29sIGluc3RhbGxhdGlvbiB0cmVlIHRvIHN1YnByb2plY3QgbGlibHRkbCB0cmVlLgorZnVuY19pbnN0YWxsX3BrZ21hY3JvX3N1YnByb2plY3QgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisKKyAgICAjIFJlbW92ZSBhbnkgbGluZ2VyaW5nIGZpbGVzIHRoYXQgbXkgaGF2ZSBiZWVuIGluc3RhbGxlZCBieSBzb21lCisgICAgIyBwcmV2aW91cyBsaWJ0b29saXplIHJlbGVhc2U6CisgICAgJG9wdF9mb3JjZSAmJiBmb3IgZmlsZSBpbiAkYWxsX3BrZ21hY3JvX2ZpbGVzOyBkbworICAgICAgdGVzdCAtZiAiJHN1YnByb2plY3RfbWFjcm9kaXIvJGZpbGUiICYmIGZ1bmNfdmVyYm9zZSAicm0gLWYgJyRzdWJwcm9qZWN0X21hY3JvZGlyLyRmaWxlJyIKKyAgICAgIHJtIC1mICIkc3VicHJvamVjdF9tYWNyb2Rpci8kZmlsZSIKKyAgICBkb25lCisKKyAgICAjIENvcHkgYWxsIHRoZSBmaWxlcyBmcm9tIGluc3RhbGxlZCBsaWJsdGRsIHRvIHRoaXMgcHJvamVjdCwgaWYgdGhlCisgICAgIyB1c2VyIHNwZWNpZmllZCBhIG1hY3JvZGlyLgorICAgICRvcHRfcXVpZXQgfHwgaWYgdGVzdCAieCRtYWNyb2RpciIgIT0gIngkc3VicHJvamVjdF9tYWNyb2RpciI7IHRoZW4KKyAgICAgIHBrZ21hY3JvX2hlYWRlcj0icHV0dGluZyBtYWNyb3MgaW4gXGAkc3VicHJvamVjdF9tYWNyb2RpcicuIgorICAgIGVsaWYgdGVzdCAtbiAiJHN1YnByb2plY3RfbWFjcm9kaXIiOyB0aGVuCisgICAgICBwa2dtYWNyb19oZWFkZXI9InB1dHRpbmcgbWFjcm9zIGluIEFDX0NPTkZJR19NQUNST19ESVIsIFxgJHN1YnByb2plY3RfbWFjcm9kaXInLiIKKyAgICBmaQorCisgICAgZnVuY19jb3B5X3NvbWVfZmlsZXMgImFyZ3oubTQ6bGlidG9vbC5tNDpsdGRsLm00OiRwa2dtYWNyb19maWxlcyIgXAorICAgICAgIiRhY2xvY2FsZGlyIiAiJHN1YnByb2plY3RfbWFjcm9kaXIiIHBrZ21hY3JvX2hlYWRlcgorfQorCisKKyMgZnVuY19pbnN0YWxsX3BrZ21hY3JvX3BhcmVudAorIyBVbmxlc3MgLS1xdWlldCB3YXMgcGFzc2VkLCBvciBBQ19DT05GSUdfTUFDUk9fRElSIHdhcyBub3Qgc2VlbiwgZGlzcGxheQorIyBhIG1lc3NhZ2UuICBUaGVuIHVwZGF0ZSBhcHByb3ByaWF0ZSBtYWNyb3MgaWYgbmV3ZXIgb25lcyBhcmUgYXZhaWxhYmxlCisjIGZyb20gdGhlIGxpYnRvb2wgaW5zdGFsbGF0aW9uIHRyZWUuCitmdW5jX2luc3RhbGxfcGtnbWFjcm9fcGFyZW50ICgpCit7CisgICAgJG9wdF9kZWJ1ZworCisgICAgIyBSZW1vdmUgYW55IGxpbmdlcmluZyBmaWxlcyB0aGF0IG15IGhhdmUgYmVlbiBpbnN0YWxsZWQgYnkgc29tZQorICAgICMgcHJldmlvdXMgbGlidG9vbGl6ZSByZWxlYXNlOgorICAgICRvcHRfZm9yY2UgJiYgZm9yIGZpbGUgaW4gJGFsbF9wa2dtYWNyb19maWxlczsgZG8KKyAgICAgIHRlc3QgLWYgIiRtYWNyb2Rpci8kZmlsZSIgJiYgZnVuY192ZXJib3NlICJybSAtZiAnJG1hY3JvZGlyLyRmaWxlJyIKKyAgICAgIHJtIC1mICIkbWFjcm9kaXIvJGZpbGUiCisgICAgZG9uZQorCisgICAgIyBDb3B5IGFsbCB0aGUgZmlsZXMgZnJvbSBpbnN0YWxsZWQgbGlibHRkbCB0byB0aGlzIHByb2plY3QsIGlmIHRoZQorICAgICMgdXNlciBzcGVjaWZpZWQgYSBtYWNyb2Rpci4KKyAgICAkb3B0X3F1aWV0IHx8IGlmIHRlc3QgLW4gIiRhY19tYWNyb2RpciI7IHRoZW4KKyAgICAgIG15X3BrZ21hY3JvX2hlYWRlcj0icHV0dGluZyBtYWNyb3MgaW4gQUNfQ09ORklHX01BQ1JPX0RJUiwgXGAkYWNfbWFjcm9kaXInLiIKKyAgICBlbGlmIHRlc3QgLW4gIiRtYWNyb2RpciI7IHRoZW4KKyAgICAgIG15X3BrZ21hY3JvX2hlYWRlcj0icHV0dGluZyBtYWNyb3MgaW4gXGAkbWFjcm9kaXInLiIKKyAgICBmaQorCisgICAgaWYgJG9wdF9sdGRsOyB0aGVuCisgICAgICBmdW5jX3NlcmlhbF91cGRhdGUgYXJnei5tNCAiJGFjbG9jYWxkaXIiICIkbWFjcm9kaXIiIFwKKyAgICAgICAgbXlfcGtnbWFjcm9faGVhZGVyIGFyZ3oubTQKKyAgICBlbHNlCisgICAgICBmdW5jX3ZlcmJvc2UgIk5vdCBjb3B5aW5nIFxgJG1hY3JvZGlyL2FyZ3oubTQnLCBsaWJsdGRsIG5vdCB1c2VkLiIKKyAgICBmaQorCisgICAgZnVuY19zZXJpYWxfdXBkYXRlICBsaWJ0b29sLm00ICIkYWNsb2NhbGRpciIgIiRtYWNyb2RpciIgXAorICAgICAgbXlfcGtnbWFjcm9faGVhZGVyIExUX0lOSVQgJ0FbQ01dX1BST0dfTElCVE9PTCcKKworICAgIGlmICRvcHRfbHRkbDsgdGhlbgorICAgICAgZnVuY19zZXJpYWxfdXBkYXRlIGx0ZGwubTQgIiRhY2xvY2FsZGlyIiAiJG1hY3JvZGlyIiBcCisgICAgICAgIG15X3BrZ21hY3JvX2hlYWRlciAnTFRETF9JTklUJworICAgIGVsc2UKKyAgICAgIGZ1bmNfdmVyYm9zZSAiTm90IGNvcHlpbmcgXGAkbWFjcm9kaXIvbHRkbC5tNCcsIGxpYmx0ZGwgbm90IHVzZWQuIgorICAgIGZpCisKKyAgICBteV9zYXZlX0lGUz0iJElGUyIKKyAgICBJRlM9OgorICAgIGZvciBmaWxlIGluICRwa2dtYWNyb19maWxlczsgZG8KKyAgICAgIElGUz0iJG15X3NhdmVfSUZTIgorICAgICAgZnVuY19zZXJpYWxfdXBkYXRlICIkZmlsZSIgIiRhY2xvY2FsZGlyIiAiJG1hY3JvZGlyIiBcCisgICAgICAgIG15X3BrZ21hY3JvX2hlYWRlciAiJGZpbGUiCisgICAgZG9uZQorICAgIElGUz0iJG15X3NhdmVfSUZTIgorfQorCisKKyMgZnVuY19pbnN0YWxsX3BrZ21hY3JvX2ZpbGVzCisjIEluc3RhbGwgY29waWVzIG9mIHRoZSBsaWJ0b29sIGFuZCBsaWJsdGRsIG00IG1hY3JvcyBpbnRvIHRoaXMgcGFja2FnZS4KK2Z1bmNfaW5zdGFsbF9wa2dtYWNyb19maWxlcyAoKQoreworICAgICRvcHRfZGVidWcKKworICAgICMgYXJnei5tNCwgbGlidG9vbC5tNCBhbmQgbHRkbC5tNCBhcmUgaGFuZGxlZCBzcGVjaWFsbHk6CisgICAgZnVuY19tYXNzYWdlX2FjbG9jYWxfREFUQSAnYXJnei5tNHxsaWJ0b29sLm00fGx0ZGwubTQnCisKKyAgIyAxLiBQYXJlbnQgaGFzIHNlcGFyYXRlIG1hY3JvZGlyIHRvIHN1YnByb2plY3QgbHRkbDoKKyAgICBpZiAkb3B0X2x0ZGwgJiYgdGVzdCAieCRsdGRsX21vZGUiID0gInhzdWJwcm9qZWN0IiAmJgorICAgICAgIHRlc3QgLW4gIiRtYWNyb2RpciIgJiYgdGVzdCAieCRtYWNyb2RpciIgIT0gIngkc3VicHJvamVjdF9tYWNyb2RpciIKKyAgICB0aGVuCisgICAgICBmdW5jX2luc3RhbGxfcGtnbWFjcm9fcGFyZW50CisgICAgICBmdW5jX2luc3RhbGxfcGtnbWFjcm9fc3VicHJvamVjdAorCisgICMgMi4gUGFyZW50IHNoYXJlcyBtYWNyb2RpciB3aXRoIHN1YnByb2plY3QgbHRkbDoKKyAgICBlbGlmICRvcHRfbHRkbCAmJiB0ZXN0ICJ4JGx0ZGxfbW9kZSIgPSAieHN1YnByb2plY3QiCisgICAgICAgIyAmJiB0ZXN0ICJ4JG1hY3JvZGlyIiA9ICJ4JHN1YnByb2plY3RfbWFjcm9kaXIiCisgICAgdGhlbgorICAgICAgZnVuY19pbnN0YWxsX3BrZ21hY3JvX3N1YnByb2plY3QKKworICAjIDMuIE5vdCBhIHN1YnByb2plY3QsIGJ1dCBtYWNyb2RpciB3YXMgc3BlY2lmaWVkIGluIHBhcmVudDoKKyAgICBlbGlmIHRlc3QgLW4gIiRtYWNyb2RpciI7IHRoZW4KKyAgICAgIGZ1bmNfaW5zdGFsbF9wa2dtYWNyb19wYXJlbnQKKworICAjIDQuIEFDX0NPTkZJR19NQUNST19ESVIgd2FzIG5vdCBzcGVjaWZpZWQ6CisgICAgZWxzZQorICAgICAgZnVuY192ZXJib3NlICJBQ19DT05GSUdfTUFDUk9fRElSIG5vdCBkZWZpbmVkLCBub3QgY29weWluZyBsaWJ0b29sIG1hY3Jvcy4iCisgICAgZmkKK30KKworCisjIGZ1bmNfbWFzc2FnZV9wa2dsdGRsX2ZpbGVzIFtnbG9iX2V4Y2x1ZGVdCisjIEBwa2dsdGRsX2ZpbGVzXEAgaXMgc3Vic3RpdHV0ZWQgYXMgcGVyIGl0cyB2YWx1ZSBpbiBNYWtlZmlsZS5hbTsgdGhpcworIyBmdW5jdGlvbiBtYXNzYWdlcyBpdCBpbnRvIGEgc3VpdGFibGUgZm9ybWF0IGZvciBmdW5jX2NvcHlfc29tZV9maWxlcy4KK2Z1bmNfbWFzc2FnZV9wa2dsdGRsX2ZpbGVzICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIHBrZ2x0ZGxfZmlsZXM9CSMgR0xPQkFMIFZBUgorCisgICAgbXlfZ2xvYl9leGNsdWRlPSIkMSIKKworICAgICMgTWFzc2FnZSBhIHZhbHVlIGZvciBwa2dsdGRsX2ZpbGVzIGZyb20gdGhlIHZhbHVlIHVzZWQgaW4gTWFrZWZpbGUuYW0KKyAgICBmb3IgbXlfZmlsZW5hbWUgaW4gbGlibHRkbC9DT1BZSU5HLkxJQiBsaWJsdGRsL1JFQURNRSBsaWJsdGRsL01ha2VmaWxlLmluYyBsaWJsdGRsL01ha2VmaWxlLmFtIGxpYmx0ZGwvY29uZmlndXJlLmFjIGxpYmx0ZGwvYWNsb2NhbC5tNCBsaWJsdGRsL01ha2VmaWxlLmluIGxpYmx0ZGwvY29uZmlnLWguaW4gbGlibHRkbC9jb25maWd1cmUgbGlibHRkbC9hcmd6Xy5oIGxpYmx0ZGwvYXJnei5jIGxpYmx0ZGwvbG9hZGVycy9kbGRfbGluay5jIGxpYmx0ZGwvbG9hZGVycy9kbG9wZW4uYyBsaWJsdGRsL2xvYWRlcnMvZHlsZC5jIGxpYmx0ZGwvbG9hZGVycy9sb2FkX2FkZF9vbi5jIGxpYmx0ZGwvbG9hZGVycy9sb2FkbGlicmFyeS5jIGxpYmx0ZGwvbG9hZGVycy9zaGxfbG9hZC5jIGxpYmx0ZGwvbHRfX2RpcmVudC5jIGxpYmx0ZGwvbHRfX3N0cmwuYyBsaWJsdGRsL2xpYmx0ZGwvbHRfX2FsbG9jLmggbGlibHRkbC9saWJsdGRsL2x0X19kaXJlbnQuaCBsaWJsdGRsL2xpYmx0ZGwvbHRfX2dsaWJjLmggbGlibHRkbC9saWJsdGRsL2x0X19wcml2YXRlLmggbGlibHRkbC9saWJsdGRsL2x0X19zdHJsLmggbGlibHRkbC9saWJsdGRsL2x0X2RsbG9hZGVyLmggbGlibHRkbC9saWJsdGRsL2x0X2Vycm9yLmggbGlibHRkbC9saWJsdGRsL2x0X3N5c3RlbS5oIGxpYmx0ZGwvbGlibHRkbC9zbGlzdC5oIGxpYmx0ZGwvbG9hZGVycy9wcmVvcGVuLmMgbGlibHRkbC9sdF9fYWxsb2MuYyBsaWJsdGRsL2x0X2RsbG9hZGVyLmMgbGlibHRkbC9sdF9lcnJvci5jIGxpYmx0ZGwvbHRkbC5jIGxpYmx0ZGwvbHRkbC5oIGxpYmx0ZGwvc2xpc3QuYzsgZG8KKworICAgICAgIyBTdHJpcCBzdXJwbHVzIGxlYWRpbmcgJ2xpYmx0ZGwvJzoKKyAgICAgIG15X2ZpbGVuYW1lPWBleHByICJYJG15X2ZpbGVuYW1lIiA6ICdYbGlibHRkbC9cKC4qXCknYAorCisgICAgICAjIGlnbm9yZSBleGNsdWRlZCBmaWxlbmFtZXMKKyAgICAgIGlmIHRlc3QgLW4gIiRteV9nbG9iX2V4Y2x1ZGUiOyB0aGVuCisJbXlfY29udD1mYWxzZQorCWV2YWwgJ2Nhc2UgJG15X2ZpbGVuYW1lIGluICckbXlfZ2xvYl9leGNsdWRlJykgbXlfY29udD06IDs7IGVzYWMnCisJJG15X2NvbnQgJiYgY29udGludWUKKyAgICAgIGZpCisKKyAgICAgICMgaWdub3JlIGR1cGxpY2F0ZXMKKyAgICAgIGNhc2UgOiRwa2dsdGRsX2ZpbGVzOiBpbgorICAgICAgICAqOiRteV9maWxlbmFtZToqKSA7OworCSopIHBrZ2x0ZGxfZmlsZXM9IiRwa2dsdGRsX2ZpbGVzOiRteV9maWxlbmFtZSIgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICAjIHN0cmlwIHNwdXJpb3VzIGxlYWRpbmcgYDonCisgICAgcGtnbHRkbF9maWxlcz1gJEVDSE8gIiRwa2dsdGRsX2ZpbGVzIiB8ICRTRUQgJ3MsXjoqLCwnYAorfQorCisKKyMgZnVuY19pbnN0YWxsX3BrZ2x0ZGxfZmlsZXMKKyMgSW5zdGFsbCBjb3BpZXMgb2YgdGhlIGxpYmx0ZGwgZmlsZXMgaW50byB0aGlzIHBhY2thZ2UuICBBbnkgYXV4aWxpYXJ5CisjIG9yIG00IG1hY3JvIGZpbGVzIG5lZWRlZCBpbiB0aGUgbGlibHRkbCB0cmVlIHdpbGwgYWxzbyBiZSBjb3BpZWQgYnkKKyMgZnVuY19pbnN0YWxsX3BrZ2NvbmZpZ19maWxlcyBhbmQgZnVuY19pbnN0YWxsX3BrZ21hY3JvX2ZpbGVzIHJlc3AuCitmdW5jX2luc3RhbGxfcGtnbHRkbF9maWxlcyAoKQoreworICAgICRvcHRfZGVidWcKKyAgICAkb3B0X2x0ZGwgfHwgcmV0dXJuCisKKyAgICAjIFJlbW92ZSBhbnkgbGluZ2VyaW5nIGZpbGVzIHRoYXQgbXkgaGF2ZSBiZWVuIGluc3RhbGxlZCBieSBzb21lCisgICAgIyBwcmV2aW91cyBsaWJ0b29saXplIHJlbGVhc2U6CisgICAgJG9wdF9mb3JjZSAmJiBmb3IgZmlsZSBpbiAkYWxsX3BrZ2x0ZGxfZmlsZXM7IGRvCisgICAgICB0ZXN0IC1mICIkbHRkbGRpci8kZmlsZSIgJiYgZnVuY192ZXJib3NlICJybSAtZiAnJGx0ZGxkaXIvJGZpbGUnIgorICAgICAgcm0gLWYgIiRsdGRsZGlyLyRmaWxlIgorICAgIGRvbmUKKworICAgICMgQ29weSBhbGwgdGhlIGZpbGVzIGZyb20gaW5zdGFsbGVkIGxpYmx0ZGwgdG8gdGhpcyBwcm9qZWN0LCBpZiB0aGUKKyAgICAjIHVzZXIgc3BlY2lmaWVkIGAtLWx0ZGwnLgorICAgICRvcHRfcXVpZXQgfHwgaWYgdGVzdCAtbiAiJGFjX2x0ZGxkaXIiOyB0aGVuCisgICAgICBwa2dsdGRsX2hlYWRlcj0icHV0dGluZyBsaWJsdGRsIGZpbGVzIGluIExUX0NPTkZJR19MVERMX0RJUiwgXGAkYWNfbHRkbGRpcicuIgorICAgIGVsaWYgdGVzdCAtbiAiJGx0ZGxkaXIiOyB0aGVuCisgICAgICBwa2dsdGRsX2hlYWRlcj0icHV0dGluZyBsaWJsdGRsIGZpbGVzIGluIFxgJGx0ZGxkaXInLiIKKyAgICBmaQorCisgICAgIyBUaGVzZSBmaWxlcyBhcmUgaGFuZGxlZCBzcGVjaWFsbHksIGRlcGVuZGluZyBvbiBsdGRsX21vZGU6CisgICAgaWYgdGVzdCAieCRsdGRsX21vZGUiID0gInhzdWJwcm9qZWN0IjsgdGhlbgorICAgICAgZnVuY19tYXNzYWdlX3BrZ2x0ZGxfZmlsZXMgJ01ha2VmaWxlLmluYycKKyAgICBlbHNlCisgICAgICBmdW5jX21hc3NhZ2VfcGtnbHRkbF9maWxlcyAnTWFrZWZpbGUuYW18TWFrZWZpbGUuaW4qfGFjbG9jYWwubTR8Y29uZmlnKicKKyAgICBmaQorCisgICAgZnVuY19jb3B5X3NvbWVfZmlsZXMgIiRwa2dsdGRsX2ZpbGVzIiBcCisgICAgICAiJHBrZ2x0ZGxkaXIvbGlibHRkbCIgIiRsdGRsZGlyIiBwa2dsdGRsX2hlYWRlcgorCisgICAgIyBGb3IgcmVjdXJzaXZlIGx0ZGwgbW9kZXMsIGNvcHkgYSBzdWl0YWJsZSBNYWtlZmlsZS57YW0saW5jfToKKyAgICBjYXNlICRsdGRsX21vZGUgaW4KKyAgICAgIHJlY3Vyc2l2ZSkKKyAgICAgICAgZnVuY19maXh1cF9NYWtlZmlsZSAiTWFrZWZpbGUuYW0iICIkcGtnbHRkbGRpci9saWJsdGRsIiAiJGx0ZGxkaXIiCisgICAgICAgIDs7CisgICAgICBub25yZWN1cnNpdmUpCisgICAgICAgIGZ1bmNfZml4dXBfTWFrZWZpbGUgIk1ha2VmaWxlLmluYyIgIiRwa2dsdGRsZGlyL2xpYmx0ZGwiICIkbHRkbGRpciIKKyAgICAgICAgOzsKKyAgICBlc2FjCit9CisKKworIyBmdW5jX21hc3NhZ2VfcGtnY29uZmlnX2ZpbGVzIFtnbG9iX2V4Y2x1ZGVdCisjIEBwa2djb25maWdfZmlsZXNcQCBpcyBzdWJzdGl0dXRlZCBhcyBwZXIgaXRzIHZhbHVlIGluIE1ha2VmaWxlLmFtOyB0aGlzCisjIGZ1bmN0aW9uIG1hc3NhZ2VzIGl0IGludG8gYSBzdWl0YWJsZSBmb3JtYXQgZm9yIGZ1bmNfY29weV9zb21lX2ZpbGVzLgorZnVuY19tYXNzYWdlX3BrZ2NvbmZpZ19maWxlcyAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBwa2djb25maWdfZmlsZXM9CSMgR0xPQkFMIFZBUgorCisgICAgbXlfZ2xvYl9leGNsdWRlPSIkMSIKKworICAgICMgTWFzc2FnZSBhIHZhbHVlIGZvciBwa2djb25maWdfZmlsZXMgZnJvbSB0aGUgdmFsdWUgdXNlZCBpbiBNYWtlZmlsZS5hbQorICAgIGZvciBteV9maWxlbmFtZSBpbiBjb25maWcvY29tcGlsZSBjb25maWcvY29uZmlnLmd1ZXNzIGNvbmZpZy9jb25maWcuc3ViIGNvbmZpZy9kZXBjb21wIGNvbmZpZy9pbnN0YWxsLXNoIGNvbmZpZy9taXNzaW5nIGNvbmZpZy9sdG1haW4uc2g7IGRvCisKKyAgICAgICMgaWdub3JlIGV4Y2x1ZGVkIGZpbGVuYW1lcworICAgICAgaWYgdGVzdCAtbiAiJG15X2dsb2JfZXhjbHVkZSI7IHRoZW4KKwlteV9jb250PWZhbHNlCisJZXZhbCAnY2FzZSAkbXlfZmlsZW5hbWUgaW4gJyRteV9nbG9iX2V4Y2x1ZGUnKSBteV9jb250PTogOzsgZXNhYycKKwkkbXlfY29udCAmJiBjb250aW51ZQorICAgICAgZmkKKworICAgICAgIyBpZ25vcmUgZHVwbGljYXRlcworICAgICAgY2FzZSA6JHBrZ2NvbmZpZ19maWxlczogaW4KKyAgICAgICAgKjokbXlfZmlsZW5hbWU6KikgOzsKKwkqKSBwa2djb25maWdfZmlsZXM9IiRwa2djb25maWdfZmlsZXM6JG15X2ZpbGVuYW1lIiA7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgICMgc3RyaXAgc3B1cmlvdXMgbGVhZGluZyBgOicKKyAgICBwa2djb25maWdfZmlsZXM9YCRFQ0hPICIkcGtnY29uZmlnX2ZpbGVzIiB8ICRTRUQgJ3MsXjoqLCwnYAorfQorCisKKyMgZnVuY19pbnN0YWxsX3BrZ2NvbmZpZ19zdWJwcm9qZWN0CisjIFVubGVzcyAtLXF1aWV0IHdhcyBwYXNzZWQsIGRpc3BsYXkgYSBtZXNzYWdlLiBUaGVuIGNvcHkgcGtnY29uZmlnX2ZpbGVzCisjIGZyb20gbGlidG9vbCBpbnN0YWxsYXRpb24gdHJlZSB0byBzdWJwcm9qZWN0IGxpYmx0ZGwgdHJlZS4KK2Z1bmNfaW5zdGFsbF9wa2djb25maWdfc3VicHJvamVjdCAoKQoreworICAgICRvcHRfZGVidWcKKworICAgICMgUmVtb3ZlIGFueSBsaW5nZXJpbmcgZmlsZXMgdGhhdCBteSBoYXZlIGJlZW4gaW5zdGFsbGVkIGJ5IHNvbWUKKyAgICAjIHByZXZpb3VzIGxpYnRvb2xpemUgcmVsZWFzZToKKyAgICAkb3B0X2ZvcmNlICYmIGZvciBmaWxlIGluICRhbGxfcGtnY29uZmlnX2ZpbGVzOyBkbworICAgICAgdGVzdCAtZiAiJHN1YnByb2plY3RfYXV4ZGlyLyRmaWxlIiAmJiBmdW5jX3ZlcmJvc2UgInJtIC1mICckc3VicHJvamVjdF9hdXhkaXIvJGZpbGUnIgorICAgICAgcm0gLWYgIiRzdWJwcm9qZWN0X2F1eGRpci8kZmlsZSIKKyAgICBkb25lCisKKyAgICAjIENvcHkgYWxsIHRoZSBmaWxlcyBmcm9tIGluc3RhbGxlZCBsaWJsdGRsIHRvIHRoaXMgcHJvamVjdCwgaWYgdGhlCisgICAgIyB1c2VyIHNwZWNpZmllZCBhbiBhdXhkaXIuCisgICAgJG9wdF9xdWlldCB8fCBpZiB0ZXN0ICJ4JGFjX2F1eGRpciIgPSAieCRzdWJwcm9qZWN0X2F1eGRpciI7IHRoZW4KKyAgICAgIHBrZ2NvbmZpZ19oZWFkZXI9InB1dHRpbmcgYXV4aWxpYXJ5IGZpbGVzIGluIEFDX0NPTkZJR19BVVhfRElSLCBcYCRzdWJwcm9qZWN0X2F1eGRpcicuIgorICAgIGVsaWYgdGVzdCAtbiAiJGF1eGRpciI7IHRoZW4KKyAgICAgIHBrZ2NvbmZpZ19oZWFkZXI9InB1dHRpbmcgYXV4aWxpYXJ5IGZpbGVzIGluIFxgJGF1eGRpcicuIgorICAgIGZpCisKKyAgICBmdW5jX2NvcHlfc29tZV9maWxlcyAiJHBrZ2NvbmZpZ19maWxlcyIgXAorICAgICAgIiRwa2dkYXRhZGlyIiAiJGx0ZGxkaXIiIHBrZ2NvbmZpZ19oZWFkZXIKK30KKworCisjIGZ1bmNfaW5zdGFsbF9wa2djb25maWdfcGFyZW50CisjIFVubGVzcyAtLXF1aWV0IHdhcyBwYXNzZWQsIG9yIEFDX0NPTkZJR19BVVhfRElSIHdhcyBub3Qgc2VlbiwgZGlzcGxheSBhCisjIG1lc3NhZ2UuICBUaGVuIHVwZGF0ZSBhcHByb3ByaWF0ZSBhdXhpbGlhcnkgZmlsZXMgaWYgbmV3ZXIgb25lcyBhcmUKKyMgYXZhaWxhYmxlIGZyb20gdGhlIGxpYnRvb2wgaW5zdGFsbGF0aW9uIHRyZWUuCitmdW5jX2luc3RhbGxfcGtnY29uZmlnX3BhcmVudCAoKQoreworICAgICRvcHRfZGVidWcKKworICAgICMgUmVtb3ZlIGFueSBsaW5nZXJpbmcgZmlsZXMgdGhhdCBteSBoYXZlIGJlZW4gaW5zdGFsbGVkIGJ5IHNvbWUKKyAgICAjIHByZXZpb3VzIGxpYnRvb2xpemUgcmVsZWFzZToKKyAgICAkb3B0X2ZvcmNlICYmIGZvciBmaWxlIGluICRhbGxfcGtnY29uZmlnX2ZpbGVzOyBkbworICAgICAgdGVzdCAtZiAiJGF1eGRpci8kZmlsZSIgJiYgZnVuY192ZXJib3NlICJybSAtZiAnJGF1eGRpci8kZmlsZSciCisgICAgICBybSAtZiAiJGF1eGRpci8kZmlsZSIKKyAgICBkb25lCisKKyAgICBpZiB0ZXN0IC1uICIkYWNfYXV4ZGlyIjsgdGhlbgorICAgICAgcGtnY29uZmlnX2hlYWRlcj0icHV0dGluZyBhdXhpbGlhcnkgZmlsZXMgaW4gQUNfQ09ORklHX0FVWF9ESVIsIFxgJGFjX2F1eGRpcicuIgorICAgIGVsaWYgdGVzdCAtbiAiJGF1eGRpciIgfHwgdGVzdCAieCRsdGRsZGlyIiA9ICJ4LiI7IHRoZW4KKyAgICAgIHBrZ2NvbmZpZ19oZWFkZXI9InB1dHRpbmcgYXV4aWxpYXJ5IGZpbGVzIGluIFxgJGF1eGRpcicuIgorICAgIGZpCisKKyAgICBpZiAkb3B0X2luc3RhbGw7IHRoZW4KKyAgICAgIGZ1bmNfY29uZmlnX3VwZGF0ZSBjb25maWcuZ3Vlc3MgXAorICAgICAgICAiJHBrZ2RhdGFkaXIvY29uZmlnIiAiJGF1eGRpciIgcGtnY29uZmlnX2hlYWRlcgorICAgICAgZnVuY19jb25maWdfdXBkYXRlIGNvbmZpZy5zdWIgXAorICAgICAgICAiJHBrZ2RhdGFkaXIvY29uZmlnIiAiJGF1eGRpciIgcGtnY29uZmlnX2hlYWRlcgorICAgICAgZnVuY19pbnN0YWxsX3VwZGF0ZSBpbnN0YWxsLXNoIFwKKyAgICAgICAgIiRwa2dkYXRhZGlyL2NvbmZpZyIgIiRhdXhkaXIiIHBrZ2NvbmZpZ19oZWFkZXIKKyAgICBmaQorICAgIGZ1bmNfbHRtYWluX3VwZGF0ZSBsdG1haW4uc2ggXAorICAgICAgIiRwa2dkYXRhZGlyL2NvbmZpZyIgIiRhdXhkaXIiIHBrZ2NvbmZpZ19oZWFkZXIKK30KKworCisjIGZ1bmNfaW5zdGFsbF9wa2djb25maWdfZmlsZXMKKyMgSW5zdGFsbCBjb3BpZXMgb2YgdGhlIGF1eGlsaWFyeSBmaWxlcyBpbnRvIHRoaXMgcGFja2FnZSBhY2NvcmRpbmcgdG8KKyMgdGhlIHdoZXRoZXIgbGlibHRkbCBpcyBpbmNsdWRlZCBhcyBhIHN1YnByb2plY3QsIGFuZCB3aGV0aGVyIHRoZSBwYXJlbnQKKyMgc2hhcmVzIHRoZSBBQ19DT05GSUdfQVVYX0RJUiBzZXR0aW5nLgorZnVuY19pbnN0YWxsX3BrZ2NvbmZpZ19maWxlcyAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBmdW5jX21hc3NhZ2VfcGtnY29uZmlnX2ZpbGVzCisKKyAgIyAxLiBQYXJlbnQgc2hhcmVzIGF1eGRpciB3aXRoIHN1YnByb2plY3QgbHRkbDoKKyAgICBpZiAkb3B0X2x0ZGwgJiYgdGVzdCAieCRsdGRsX21vZGUiID0gInhzdWJwcm9qZWN0IiAmJgorICAgICAgIHRlc3QgIngkYWNfYXV4ZGlyIiA9ICJ4JHN1YnByb2plY3RfYXV4ZGlyIgorICAgIHRoZW4KKyAgICAgIGZ1bmNfaW5zdGFsbF9wa2djb25maWdfc3VicHJvamVjdAorCisgICMgMi4gUGFyZW50IGhhcyBzZXBhcmF0ZSBhdXhkaXIgdG8gc3VicHJvamVjdCBsdGRsOgorICAgIGVsaWYgJG9wdF9sdGRsICYmIHRlc3QgIngkbHRkbF9tb2RlIiA9ICJ4c3VicHJvamVjdCIKKyAgICAgICAjICYmIHRlc3QgIngkYXV4ZGlyIiAhPSAieCRzdWJwcm9qZWN0X2F1eGRpciIgaXMgaW1wbGllZAorICAgIHRoZW4KKyAgICAgIGlmICRzZWVuX2F1dG9jb25mOyB0aGVuCisJZnVuY19pbnN0YWxsX3BrZ2NvbmZpZ19wYXJlbnQKKyAgICAgIGZpCisgICAgICBmdW5jX2luc3RhbGxfcGtnY29uZmlnX3N1YnByb2plY3QKKworICAjIDMuIE5vdCBzdWJwcm9qZWN0LCBidXQgQUNfQ09ORklHX0FVWF9ESVIgd2FzIHVzZWQgaW4gcGFyZW50OgorICAgIGVsaWYgdGVzdCAtbiAiJGFjX2F1eGRpciIgfHwgdGVzdCAieCRhdXhkaXIiID0gInguIjsgdGhlbgorICAgICAgZnVuY19pbnN0YWxsX3BrZ2NvbmZpZ19wYXJlbnQKKworICAjIDQuIEFDX0NPTkZJR19BVVhfRElSIHdhcyBub3Qgc3BlY2lmaWVkOgorICAgIGVsc2UKKyAgICAgIGZ1bmNfdmVyYm9zZSAiQUNfQ09ORklHX0FVWF9ESVIgbm90IGRlZmluZWQsIG5vdCBjb3B5aW5nIGxpYnRvb2wgYXV4aWxpYXJ5IGZpbGVzLiIKKyAgICBmaQorfQorCisKKyMgZnVuY19ub25lbXB0eWRpcl9wIGRpcnZhcgorIyBESVJWQVIgaXMgdGhlIG5hbWUgb2YgYSB2YXJpYWJsZSB0byBldmFsdWF0ZS4gIFVubGVzcyBESVJWQVIgbmFtZXMKKyMgYSBkaXJlY3RvcnkgdGhhdCBleGlzdHMgYW5kIGlzIG5vbi1lbXB0eSBhYm9ydCB3aXRoIGEgZGlhZ25vc3RpYy4KK2Z1bmNfbm9uZW1wdHlkaXJfcCAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBteV9kaXJ2YXI9IiQxIgorICAgIG15X2Rpcj1gZXZhbCBlY2hvICJcXFwkJG15X2RpcnZhciJgCisKKyAgICAjIElzIGl0IGEgZGlyZWN0b3J5IGF0IGFsbD8KKyAgICB0ZXN0IC1kICIkbXlfZGlyIiBcCisgICAgICB8fCBmdW5jX2ZhdGFsX2Vycm9yICJcJCRteV9kaXJ2YXIgaXMgbm90IGEgZGlyZWN0b3J5OiBcYCRteV9kaXInIgorCisgICAgIyBjaGVjayB0aGF0IHRoZSBkaXJlY3RvcmllcyBjb250ZW50cyBjYW4gYmUgbHMnZWQKKyAgICB0ZXN0IC1uICJgeyBjZCAkbXlfZGlyICYmIGxzOyB9IDI+L2Rldi9udWxsYCIgXAorICAgICAgICB8fCBmdW5jX2ZhdGFsX2Vycm9yICJjYW4gbm90IGxpc3QgZmlsZXM6IFxgJG15X2RpciciCit9CisKKworIyBmdW5jX2NoZWNrX21hY3JvcworIyBTYW5pdHkgY2hlY2sgbWFjcm9zIGZyb20gYWNsb2NhbC5tNCBhZ2FpbnN0IGluc3RhbGxlZCB2ZXJzaW9ucy4KK2Z1bmNfY2hlY2tfbWFjcm9zICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgICRvcHRfcXVpZXQgJiYgcmV0dXJuCisgICAgJHNlZW5fYXV0b2NvbmYgfHwgcmV0dXJuCisKKyAgICBhY19jb25maWdfbWFjcm9fZGlyX2FkdmlzZWQ9ZmFsc2UKKworICAgIGlmIHRlc3QgLW4gIiRhY19tYWNyb2RpciRsdGRsZGlyIiAmJiB0ZXN0IC16ICIkbWFjcm9kaXIiOyB0aGVuCisgICAgICBteV9hY19jb25maWdfbWFjcm9fc3JjZGlyPSIkYWNsb2NhbGRpciIKKyAgICAgIGlmICRvcHRfbHRkbCAmJiB0ZXN0ICIkbWFjcm9kaXIiICE9ICIkc3VicHJvamVjdF9tYWNyb2RpciI7IHRoZW4KKwlteV9hY19jb25maWdfbWFjcm9fc3JjZGlyPSIkc3VicHJvamVjdF9tYWNyb2RpciIKKyAgICAgIGZpCisKKyAgICAgIG15X25lZWRlZD0ibGlidG9vbC5tNCBsdG9wdGlvbnMubTQgbHR2ZXJzaW9uLm00IGx0c3VnYXIubTQgbHR+b2Jzb2xldGUubTQiCisgICAgICAkb3B0X2x0ZGwgJiYgbXlfbmVlZGVkPSIkbXlfbmVlZGVkIGFyZ3oubTQgbHRkbC5tNCIKKworICAgICAgaWYgdGVzdCAtZiAiYWNsb2NhbC5tNCI7IHRoZW4KKwlmb3IgbmVlZCBpbiAkbXlfbmVlZGVkOyBkbworCSAgZnVuY19hY2xvY2FsX3VwZGF0ZV9jaGVjayAkbmVlZAorCSAgJGZ1bmNfYWNsb2NhbF91cGRhdGVfY2hlY2tfcmVzdWx0ICYmIG15X21pc3Npbmc9IiRteV9taXNzaW5nICRuZWVkIgorCWRvbmUKKyAgICAgIGVsc2UKKyAgICAgICAgbXlfbWlzc2luZz0iJG15X25lZWRlZCIKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRteV9taXNzaW5nIjsgdGhlbgorICAgICAgICBmdW5jX2VjaG8gIllvdSBzaG91bGQgYWRkIHRoZSBjb250ZW50cyBvZiB0aGUgZm9sbG93aW5nIGZpbGVzIHRvIFxgYWNsb2NhbC5tNCc6IgorICAgICAgICBmb3IgbmVlZCBpbiAkbXlfbWlzc2luZzsgZG8KKwkgIGZ1bmNfZWNobyAiICBcYCRteV9hY19jb25maWdfbWFjcm9fc3JjZGlyLyRuZWVkJyIKKyAgICAgICAgZG9uZQorCisgICAgICAgIGlmIHRlc3QgIiRteV9hY19jb25maWdfbWFjcm9fc3JjZGlyIiAhPSAiJGFjbG9jYWxkaXIiOyB0aGVuCisgICAgICAgICAgZnVuY19lY2hvICJvciBlbHNlIGFkZCBcYEFDX0NPTkZJR19NQUNST19ESVIoWyRzdWJwcm9qZWN0X21hY3JvZGlyXSknIHRvICRjb25maWd1cmVfYWMuIgorCSAgYWNfY29uZmlnX21hY3JvX2Rpcl9hZHZpc2VkPToKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKworICAgICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyAgICAjIyBTaW5jZSB3ZSByZXR1cm4gZWFybHkgaGVyZSB3aGVuIC0tbm8td2FybiB3YXMgZ2l2ZW46ICAgICAgICMjCisgICAgIyMgRE8gTk9UIFBVVCBBTllUSElORyBCVVQgVVBHUkFERSBBRFZJQ0UgTUVTU0FHRVMgQkVMT1cgSEVSRSAjIworICAgICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworICAgICRvcHRfd2FybmluZyB8fCByZXR1cm4KKworICAgICRzZWVuX2xpYnRvb2wgfHwKKyAgICAgIGZ1bmNfZWNobyAiUmVtZW1iZXIgdG8gYWRkIFxgTFRfSU5JVCcgdG8gJGNvbmZpZ3VyZV9hYy4iCisKKyAgICAjIFN1Z2dlc3QgdXNpbmcgTFRETF9JTklUIGlmIGFwcHJvcHJpYXRlOgorICAgICRvcHRfbHRkbCAmJiBpZiB0ZXN0IHgkc2Vlbl9sdGRsICE9IHg6OyB0aGVuCisgICAgICBjYXNlICRsdGRsX21vZGUgaW4KKwlzdWJwcm9qZWN0KSBsdGRsX2luaXRfYXJncz0iIiAgICAgICAgICAgICAgIDs7CisJKikgICAgICAgICAgbHRkbF9pbml0X2FyZ3M9IihbJGx0ZGxfbW9kZV0pIiA7OworICAgICAgZXNhYworICAgICAgZnVuY19lY2hvICJSZW1lbWJlciB0byBhZGQgXGBMVERMX0lOSVQkbHRkbF9pbml0X2FyZ3MnIHRvICRjb25maWd1cmVfYWMuIgorICAgIGZpCisKKyAgICBpZiAkb3B0X2x0ZGw7IHRoZW4KKyAgICAgICMgUmVtaW5kIHRoZSB1c2VyIHRvIGNhbGwgTFRfQ09ORklHX0xURExfRElSOgorICAgICAgdGVzdCAtbiAiJGFjX2x0ZGxkaXIiIHx8CisgICAgICAgIGZ1bmNfZWNobyAiUmVtZW1iZXIgdG8gYWRkIFxgTFRfQ09ORklHX0xURExfRElSKFskbHRkbGRpcl0pJyB0byBcYCRjb25maWd1cmVfYWMnLiIKKworICAgICAgIyBGb3Igc3VicHJvamVjdCBtb2RlLCBvZmZlciBzb21lIHN1Z2dlc3Rpb25zIGZvciBhdm9pZGluZyBkdXBsaWNhdGUKKyAgICAgICMgZmlsZXMgaW4gYSBwcm9qZWN0IHRoYXQgdXNlcyBsaWJsdGRsOgorICAgICAgaWYgdGVzdCAieCRsdGRsX21vZGUiID0gInhzdWJwcm9qZWN0IjsgdGhlbgorICAgICAgICB0ZXN0ICIkc3VicHJvamVjdF9hdXhkaXIiID0gIiRhdXhkaXIiIHx8CisgICAgICAgICAgZnVuY19lY2hvICJDb25zaWRlciB1c2luZyBcYEFDX0NPTkZJR19BVVhfRElSKFskc3VicHJvamVjdF9hdXhkaXJdKScgaW4gJGNvbmZpZ3VyZV9hYy4iCisgICAgICAgICRhY19jb25maWdfbWFjcm9fZGlyX2FkdmlzZWQgfHwgdGVzdCAiJHN1YnByb2plY3RfbWFjcm9kaXIiID0gIiRtYWNyb2RpciIgfHwKKyAgICAgICAgICBmdW5jX2VjaG8gIkNvbnNpZGVyIHVzaW5nIFxgQUNfQ09ORklHX01BQ1JPX0RJUihbJHN1YnByb2plY3RfbWFjcm9kaXJdKScgaW4gJGNvbmZpZ3VyZV9hYy4iCisJYWNfY29uZmlnX21hY3JvX2Rpcl9hZHZpc2VkPToKKyAgICAgIGZpCisgICAgZmkKKworICAgICMgU3VnZ2VzdCBtb2Rlcm4gaWRpb21zIGZvciBzdG9yaW5nIGF1dG9jb25mIG1hY3JvczoKKyAgICAkYWNfY29uZmlnX21hY3JvX2Rpcl9hZHZpc2VkIHx8IGlmIHRlc3QgLXogIiRhY19tYWNyb2RpciIgfHwgdGVzdCB4IiRtYWNyb2RpciIgPSB4LjsgdGhlbgorICAgICAgZnVuY19lY2hvICJDb25zaWRlciBhZGRpbmcgXGBBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pJyB0byAkY29uZmlndXJlX2FjIGFuZCIKKyAgICAgIGZ1bmNfZWNobyAicmVydW5uaW5nICRwcm9nbmFtZSwgdG8ga2VlcCB0aGUgY29ycmVjdCBsaWJ0b29sIG1hY3JvcyBpbi10cmVlLiIKKyAgICAgIGFjX2NvbmZpZ19tYWNyb19kaXJfYWR2aXNlZD06CisKKyAgICBlbGlmIHRlc3QgLXogIiRhY19tYWNyb2RpciRsdGRsZGlyIjsgdGhlbgorICAgICAgZnVuY19lY2hvICJDb25zaWRlciBhZGRpbmcgXGBBQ19DT05GSUdfTUFDUk9fRElSKFskbWFjcm9kaXJdKScgdG8gJGNvbmZpZ3VyZV9hYywiCisgICAgICBmdW5jX2VjaG8gImFuZCByZXJ1bm5pbmcgJHByb2duYW1lIGFuZCBhY2xvY2FsLiIKKyAgICAgIGFjX2NvbmZpZ19tYWNyb19kaXJfYWR2aXNlZD06CisgICAgZmkKKworICAgIGlmIHRlc3QgLXogIiRhbV9tYWNyb2RpciRtYWNyb2RpciI7IHRoZW4KKyAgICAgIGZ1bmNfZWNobyAiQ29uc2lkZXIgYWRkaW5nIFxgLUkgbTQnIHRvIEFDTE9DQUxfQU1GTEFHUyBpbiBNYWtlZmlsZS5hbS4iCisKKyAgICBlbGlmIHRlc3QgLXogIiRhbV9tYWNyb2RpciI7IHRoZW4KKyAgICAgIGlmICRvcHRfbHRkbCAmJiB0ZXN0ICJ4JGx0ZGxfbW9kZSIgPSAieHN1YnByb2plY3QiICYmIHRlc3QgIiRzdWJwcm9qZWN0X21hY3JvZGlyIiAhPSAiJG1hY3JvZGlyIjsgdGhlbgorCWZ1bmNfZWNobyAiQ29uc2lkZXIgYWRkaW5nIFxgLUkgJHN1YnByb2plY3RfbWFjcm9kaXInIHRvIEFDTE9DQUxfQU1GTEFHUyBpbiBNYWtlZmlsZS5hbS4iCisgICAgICBlbHNlCisgICAgICAgIGZ1bmNfZWNobyAiQ29uc2lkZXIgYWRkaW5nIFxgLUkgJG1hY3JvZGlyJyB0byBBQ0xPQ0FMX0FNRkxBR1MgaW4gTWFrZWZpbGUuYW0uIgorICAgICAgZmkKKyAgICBmaQorCisgICAgIyBEb24ndCB0cmFjZSBmb3IgdGhpcywgd2UncmUganVzdCBjaGVja2luZyB0aGUgdXNlciBkaWRuJ3QgaW52b2tlIGl0CisgICAgIyBkaXJlY3RseSBmcm9tIGNvbmZpZ3VyZS5hYy4KKyAgICAkU0VEICdzLGRubCAuKiQsLDsgcywjIC4qJCwsJyAiJGNvbmZpZ3VyZV9hYyIgfCBncmVwIEFDX1BST0dfUkFOTElCID4vZGV2L251bGwgJiYKKyAgICAgIGZ1bmNfZWNobyAiXGBBQ19QUk9HX1JBTkxJQicgaXMgcmVuZGVyZWQgb2Jzb2xldGUgYnkgXGBMVF9JTklUJyIKKworICAgICMgRklYTUU6IEVuc3VyZSBsdG1haW4uc2gsIGxpYnRvb2wubTQgYW5kIGx0ZGwubTQgYXJlIGZyb20gdGhlIHNhbWUgcmVsZWFzZQorfQorCisKKyMjIC0tLS0tLS0tLS0tICMjCisjIyAgICBNYWluLiAgICAjIworIyMgLS0tLS0tLS0tLS0gIyMKKworeworICAjIEFsbG93IHRoZSB1c2VyIHRvIG92ZXJyaWRlIHRoZSBtYXN0ZXIgbGlidG9vbGl6ZSByZXBvc2l0b3J5OgorICBpZiB0ZXN0IC1uICIkX2x0X3BrZ2RhdGFkaXIiOyB0aGVuCisgICAgcGtnbHRkbGRpcj0iJF9sdF9wa2dkYXRhZGlyIgorICAgIHBrZ2RhdGFkaXI9IiRfbHRfcGtnZGF0YWRpci9saWJsdGRsIgorICAgIGFjbG9jYWxkaXI9IiRfbHRfcGtnZGF0YWRpci9saWJsdGRsL200IgorICBmaQorICBmdW5jX25vbmVtcHR5ZGlyX3AgcGtnbHRkbGRpcgorICBmdW5jX25vbmVtcHR5ZGlyX3AgcGtnZGF0YWRpcgorICBmdW5jX25vbmVtcHR5ZGlyX3AgYWNsb2NhbGRpcgorCisgIGZ1bmNfc2Nhbl9maWxlcworCisgIGNhc2UgJGx0ZGxkaXIgaW4KKyAgLikgbHRkbHByZWZpeD0gOzsKKyAgKikgbHRkbHByZWZpeD0kbHRkbGRpci8gOzsKKyAgZXNhYworICBzdWJwcm9qZWN0X2F1eGRpcj0ke2x0ZGxwcmVmaXh9Y29uZmlnCisgIHN1YnByb2plY3RfbWFjcm9kaXI9JHtsdGRscHJlZml4fW00CisKKyAgIyA6OjpCRSBDQVJFRlVMIEhFUkU6OjoKKyAgIyBmdW5jX2NoZWNrX21hY3JvcyBuZWVkcyB0byBjaGVjayB3aGV0aGVyIC0tbHRkbCB3YXMgc3BlY2lmaWVkIHdoZW4KKyAgIyBMVERMX0lOSVQgd2FzIG5vdCBzZWVuLCBzbyB3ZSBjYW4ndCBqdXN0IHVzZSBvbmUgdmFyaWFibGUgZm9yIGJvdGgKKyAgIyBjb25kaXRpb25zLCBvciB0aGF0IGNoZWNrIHdpbGwgYmUgaW1wb3NzaWJsZS4gICBObyBuZWVkIHRvIGNsdXR0ZXIgdGhlCisgICMgcmVzdCBvZiB0aGUgY29kZSB3aXRoICckb3B0X2x0ZGwgfHwgJHNlZW5fbHRkbCcgdGhvdWdoLCBiZWNhdXNlIHdlIENBTgorICAjIHNhZmVseSBzZXQgb3B0X2x0ZGwgdG8gdHJ1ZSBpZiBMVERMX0lOSVQgd2FzIHNlZW46CisgICRzZWVuX2x0ZGwgJiYgb3B0X2x0ZGw9OgorCisgIGZ1bmNfaW5zdGFsbF9wa2djb25maWdfZmlsZXMKKyAgZnVuY19pbnN0YWxsX3BrZ21hY3JvX2ZpbGVzCisgIGZ1bmNfaW5zdGFsbF9wa2dsdGRsX2ZpbGVzCisKKyAgZnVuY19jaGVja19tYWNyb3MKK30KKworZXhpdCAkZXhpdF9zdGF0dXMKKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6c2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOjIKKyMgRW5kOgorCmRpZmYgLS1naXQgYS9iaW4vbTQgYi9iaW4vbTQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2YzOTY2NwotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9tNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4vcGdhd2sgYi9iaW4vcGdhd2sKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTNmODFjMgotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9wZ2F3awpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4vcGtnLWNvbmZpZyBiL2Jpbi9wa2ctY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE3MGI3OGQKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vcGtnLWNvbmZpZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4veG1sd2YgYi9iaW4veG1sd2YKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDY0Y2FhNwotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi94bWx3ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2V4cGF0LmggYi9pbmNsdWRlL2V4cGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBhODI3OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZXhwYXQuaApAQCAtMCwwICsxLDEwMTQgQEAKKy8qIENvcHlyaWdodCAoYykgMTk5OCwgMTk5OSwgMjAwMCBUaGFpIE9wZW4gU291cmNlIFNvZnR3YXJlIENlbnRlciBMdGQKKyAgIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBjb3B5aW5nIHBlcm1pc3Npb24uCisqLworCisjaWZuZGVmIEV4cGF0X0lOQ0xVREVECisjZGVmaW5lIEV4cGF0X0lOQ0xVREVEIDEKKworI2lmZGVmIF9fVk1TCisvKiAgICAgIDAgICAgICAgIDEgICAgICAgICAyICAgICAgICAgMyAgICAgIDAgICAgICAgIDEgICAgICAgICAyICAgICAgICAgMworICAgICAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxICAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxICovCisjZGVmaW5lIFhNTF9TZXRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyIFhNTF9TZXRQcm9jZXNzaW5nSW5zdHJIYW5kbGVyCisjZGVmaW5lIFhNTF9TZXRVbnBhcnNlZEVudGl0eURlY2xIYW5kbGVyICAgIFhNTF9TZXRVbnBhcnNlZEVudERlY2xIYW5kbGVyCisjZGVmaW5lIFhNTF9TZXRTdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyICAgIFhNTF9TZXRTdGFydE5hbWVzcGNEZWNsSGFuZGxlcgorI2RlZmluZSBYTUxfU2V0RXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyQXJnICBYTUxfU2V0RXh0ZXJuYWxFbnRSZWZIYW5kbGVyQXJnCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImV4cGF0X2V4dGVybmFsLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworc3RydWN0IFhNTF9QYXJzZXJTdHJ1Y3Q7Cit0eXBlZGVmIHN0cnVjdCBYTUxfUGFyc2VyU3RydWN0ICpYTUxfUGFyc2VyOworCisvKiBTaG91bGQgdGhpcyBiZSBkZWZpbmVkIHVzaW5nIHN0ZGJvb2wuaCB3aGVuIEM5OSBpcyBhdmFpbGFibGU/ICovCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgWE1MX0Jvb2w7CisjZGVmaW5lIFhNTF9UUlVFICAgKChYTUxfQm9vbCkgMSkKKyNkZWZpbmUgWE1MX0ZBTFNFICAoKFhNTF9Cb29sKSAwKQorCisvKiBUaGUgWE1MX1N0YXR1cyBlbnVtIGdpdmVzIHRoZSBwb3NzaWJsZSByZXR1cm4gdmFsdWVzIGZvciBzZXZlcmFsCisgICBBUEkgZnVuY3Rpb25zLiAgVGhlIHByZXByb2Nlc3NvciAjZGVmaW5lcyBhcmUgaW5jbHVkZWQgc28gdGhpcworICAgc3RhbnphIGNhbiBiZSBhZGRlZCB0byBjb2RlIHRoYXQgc3RpbGwgbmVlZHMgdG8gc3VwcG9ydCBvbGRlcgorICAgdmVyc2lvbnMgb2YgRXhwYXQgMS45NS54OgorCisgICAjaWZuZGVmIFhNTF9TVEFUVVNfT0sKKyAgICNkZWZpbmUgWE1MX1NUQVRVU19PSyAgICAxCisgICAjZGVmaW5lIFhNTF9TVEFUVVNfRVJST1IgMAorICAgI2VuZGlmCisKKyAgIE90aGVyd2lzZSwgdGhlICNkZWZpbmUgaGFja2VyeSBpcyBxdWl0ZSB1Z2x5IGFuZCB3b3VsZCBoYXZlIGJlZW4KKyAgIGRyb3BwZWQuCisqLworZW51bSBYTUxfU3RhdHVzIHsKKyAgWE1MX1NUQVRVU19FUlJPUiA9IDAsCisjZGVmaW5lIFhNTF9TVEFUVVNfRVJST1IgWE1MX1NUQVRVU19FUlJPUgorICBYTUxfU1RBVFVTX09LID0gMSwKKyNkZWZpbmUgWE1MX1NUQVRVU19PSyBYTUxfU1RBVFVTX09LCisgIFhNTF9TVEFUVVNfU1VTUEVOREVEID0gMgorI2RlZmluZSBYTUxfU1RBVFVTX1NVU1BFTkRFRCBYTUxfU1RBVFVTX1NVU1BFTkRFRAorfTsKKworZW51bSBYTUxfRXJyb3IgeworICBYTUxfRVJST1JfTk9ORSwKKyAgWE1MX0VSUk9SX05PX01FTU9SWSwKKyAgWE1MX0VSUk9SX1NZTlRBWCwKKyAgWE1MX0VSUk9SX05PX0VMRU1FTlRTLAorICBYTUxfRVJST1JfSU5WQUxJRF9UT0tFTiwKKyAgWE1MX0VSUk9SX1VOQ0xPU0VEX1RPS0VOLAorICBYTUxfRVJST1JfUEFSVElBTF9DSEFSLAorICBYTUxfRVJST1JfVEFHX01JU01BVENILAorICBYTUxfRVJST1JfRFVQTElDQVRFX0FUVFJJQlVURSwKKyAgWE1MX0VSUk9SX0pVTktfQUZURVJfRE9DX0VMRU1FTlQsCisgIFhNTF9FUlJPUl9QQVJBTV9FTlRJVFlfUkVGLAorICBYTUxfRVJST1JfVU5ERUZJTkVEX0VOVElUWSwKKyAgWE1MX0VSUk9SX1JFQ1VSU0lWRV9FTlRJVFlfUkVGLAorICBYTUxfRVJST1JfQVNZTkNfRU5USVRZLAorICBYTUxfRVJST1JfQkFEX0NIQVJfUkVGLAorICBYTUxfRVJST1JfQklOQVJZX0VOVElUWV9SRUYsCisgIFhNTF9FUlJPUl9BVFRSSUJVVEVfRVhURVJOQUxfRU5USVRZX1JFRiwKKyAgWE1MX0VSUk9SX01JU1BMQUNFRF9YTUxfUEksCisgIFhNTF9FUlJPUl9VTktOT1dOX0VOQ09ESU5HLAorICBYTUxfRVJST1JfSU5DT1JSRUNUX0VOQ09ESU5HLAorICBYTUxfRVJST1JfVU5DTE9TRURfQ0RBVEFfU0VDVElPTiwKKyAgWE1MX0VSUk9SX0VYVEVSTkFMX0VOVElUWV9IQU5ETElORywKKyAgWE1MX0VSUk9SX05PVF9TVEFOREFMT05FLAorICBYTUxfRVJST1JfVU5FWFBFQ1RFRF9TVEFURSwKKyAgWE1MX0VSUk9SX0VOVElUWV9ERUNMQVJFRF9JTl9QRSwKKyAgWE1MX0VSUk9SX0ZFQVRVUkVfUkVRVUlSRVNfWE1MX0RURCwKKyAgWE1MX0VSUk9SX0NBTlRfQ0hBTkdFX0ZFQVRVUkVfT05DRV9QQVJTSU5HLAorICAvKiBBZGRlZCBpbiAxLjk1LjcuICovCisgIFhNTF9FUlJPUl9VTkJPVU5EX1BSRUZJWCwKKyAgLyogQWRkZWQgaW4gMS45NS44LiAqLworICBYTUxfRVJST1JfVU5ERUNMQVJJTkdfUFJFRklYLAorICBYTUxfRVJST1JfSU5DT01QTEVURV9QRSwKKyAgWE1MX0VSUk9SX1hNTF9ERUNMLAorICBYTUxfRVJST1JfVEVYVF9ERUNMLAorICBYTUxfRVJST1JfUFVCTElDSUQsCisgIFhNTF9FUlJPUl9TVVNQRU5ERUQsCisgIFhNTF9FUlJPUl9OT1RfU1VTUEVOREVELAorICBYTUxfRVJST1JfQUJPUlRFRCwKKyAgWE1MX0VSUk9SX0ZJTklTSEVELAorICBYTUxfRVJST1JfU1VTUEVORF9QRSwKKyAgLyogQWRkZWQgaW4gMi4wLiAqLworICBYTUxfRVJST1JfUkVTRVJWRURfUFJFRklYX1hNTCwKKyAgWE1MX0VSUk9SX1JFU0VSVkVEX1BSRUZJWF9YTUxOUywKKyAgWE1MX0VSUk9SX1JFU0VSVkVEX05BTUVTUEFDRV9VUkkKK307CisKK2VudW0gWE1MX0NvbnRlbnRfVHlwZSB7CisgIFhNTF9DVFlQRV9FTVBUWSA9IDEsCisgIFhNTF9DVFlQRV9BTlksCisgIFhNTF9DVFlQRV9NSVhFRCwKKyAgWE1MX0NUWVBFX05BTUUsCisgIFhNTF9DVFlQRV9DSE9JQ0UsCisgIFhNTF9DVFlQRV9TRVEKK307CisKK2VudW0gWE1MX0NvbnRlbnRfUXVhbnQgeworICBYTUxfQ1FVQU5UX05PTkUsCisgIFhNTF9DUVVBTlRfT1BULAorICBYTUxfQ1FVQU5UX1JFUCwKKyAgWE1MX0NRVUFOVF9QTFVTCit9OworCisvKiBJZiB0eXBlID09IFhNTF9DVFlQRV9FTVBUWSBvciBYTUxfQ1RZUEVfQU5ZLCB0aGVuIHF1YW50IHdpbGwgYmUKKyAgIFhNTF9DUVVBTlRfTk9ORSwgYW5kIHRoZSBvdGhlciBmaWVsZHMgd2lsbCBiZSB6ZXJvIG9yIE5VTEwuCisgICBJZiB0eXBlID09IFhNTF9DVFlQRV9NSVhFRCwgdGhlbiBxdWFudCB3aWxsIGJlIE5PTkUgb3IgUkVQIGFuZAorICAgbnVtY2hpbGRyZW4gd2lsbCBjb250YWluIG51bWJlciBvZiBlbGVtZW50cyB0aGF0IG1heSBiZSBtaXhlZCBpbgorICAgYW5kIGNoaWxkcmVuIHBvaW50IHRvIGFuIGFycmF5IG9mIFhNTF9Db250ZW50IGNlbGxzIHRoYXQgd2lsbCBiZQorICAgYWxsIG9mIFhNTF9DVFlQRV9OQU1FIHR5cGUgd2l0aCBubyBxdWFudGlmaWNhdGlvbi4KKworICAgSWYgdHlwZSA9PSBYTUxfQ1RZUEVfTkFNRSwgdGhlbiB0aGUgbmFtZSBwb2ludHMgdG8gdGhlIG5hbWUsIGFuZAorICAgdGhlIG51bWNoaWxkcmVuIGZpZWxkIHdpbGwgYmUgemVybyBhbmQgY2hpbGRyZW4gd2lsbCBiZSBOVUxMLiBUaGUKKyAgIHF1YW50IGZpZWxkcyBpbmRpY2F0ZXMgYW55IHF1YW50aWZpZXJzIHBsYWNlZCBvbiB0aGUgbmFtZS4KKworICAgQ0hPSUNFIGFuZCBTRVEgd2lsbCBoYXZlIG5hbWUgTlVMTCwgdGhlIG51bWJlciBvZiBjaGlsZHJlbiBpbgorICAgbnVtY2hpbGRyZW4gYW5kIGNoaWxkcmVuIHdpbGwgcG9pbnQsIHJlY3Vyc2l2ZWx5LCB0byBhbiBhcnJheQorICAgb2YgWE1MX0NvbnRlbnQgY2VsbHMuCisKKyAgIFRoZSBFTVBUWSwgQU5ZLCBhbmQgTUlYRUQgdHlwZXMgd2lsbCBvbmx5IG9jY3VyIGF0IHRvcCBsZXZlbC4KKyovCisKK3R5cGVkZWYgc3RydWN0IFhNTF9jcCBYTUxfQ29udGVudDsKKworc3RydWN0IFhNTF9jcCB7CisgIGVudW0gWE1MX0NvbnRlbnRfVHlwZSAgICAgICAgIHR5cGU7CisgIGVudW0gWE1MX0NvbnRlbnRfUXVhbnQgICAgICAgIHF1YW50OworICBYTUxfQ2hhciAqICAgICAgICAgICAgICAgICAgICBuYW1lOworICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICBudW1jaGlsZHJlbjsKKyAgWE1MX0NvbnRlbnQgKiAgICAgICAgICAgICAgICAgY2hpbGRyZW47Cit9OworCisKKy8qIFRoaXMgaXMgY2FsbGVkIGZvciBhbiBlbGVtZW50IGRlY2xhcmF0aW9uLiBTZWUgYWJvdmUgZm9yCisgICBkZXNjcmlwdGlvbiBvZiB0aGUgbW9kZWwgYXJndW1lbnQuIEl0J3MgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5CisgICB0byBmcmVlIG1vZGVsIHdoZW4gZmluaXNoZWQgd2l0aCBpdC4KKyovCit0eXBlZGVmIHZvaWQgKFhNTENBTEwgKlhNTF9FbGVtZW50RGVjbEhhbmRsZXIpICh2b2lkICp1c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0NvbnRlbnQgKm1vZGVsKTsKKworWE1MUEFSU0VBUEkodm9pZCkKK1hNTF9TZXRFbGVtZW50RGVjbEhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9FbGVtZW50RGVjbEhhbmRsZXIgZWxkZWNsKTsKKworLyogVGhlIEF0dGxpc3QgZGVjbGFyYXRpb24gaGFuZGxlciBpcyBjYWxsZWQgZm9yICplYWNoKiBhdHRyaWJ1dGUuIFNvCisgICBhIHNpbmdsZSBBdHRsaXN0IGRlY2xhcmF0aW9uIHdpdGggbXVsdGlwbGUgYXR0cmlidXRlcyBkZWNsYXJlZCB3aWxsCisgICBnZW5lcmF0ZSBtdWx0aXBsZSBjYWxscyB0byB0aGlzIGhhbmRsZXIuIFRoZSAiZGVmYXVsdCIgcGFyYW1ldGVyCisgICBtYXkgYmUgTlVMTCBpbiB0aGUgY2FzZSBvZiB0aGUgIiNJTVBMSUVEIiBvciAiI1JFUVVJUkVEIgorICAga2V5d29yZC4gVGhlICJpc3JlcXVpcmVkIiBwYXJhbWV0ZXIgd2lsbCBiZSB0cnVlIGFuZCB0aGUgZGVmYXVsdAorICAgdmFsdWUgd2lsbCBiZSBOVUxMIGluIHRoZSBjYXNlIG9mICIjUkVRVUlSRUQiLiBJZiAiaXNyZXF1aXJlZCIgaXMKKyAgIHRydWUgYW5kIGRlZmF1bHQgaXMgbm9uLU5VTEwsIHRoZW4gdGhpcyBpcyBhICIjRklYRUQiIGRlZmF1bHQuCisqLwordHlwZWRlZiB2b2lkIChYTUxDQUxMICpYTUxfQXR0bGlzdERlY2xIYW5kbGVyKSAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICAgICAgICAgICAgKnVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgICplbG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAgKmF0dG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAgKmF0dF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgICpkZmx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICBpc3JlcXVpcmVkKTsKKworWE1MUEFSU0VBUEkodm9pZCkKK1hNTF9TZXRBdHRsaXN0RGVjbEhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9BdHRsaXN0RGVjbEhhbmRsZXIgYXR0ZGVjbCk7CisKKy8qIFRoZSBYTUwgZGVjbGFyYXRpb24gaGFuZGxlciBpcyBjYWxsZWQgZm9yICpib3RoKiBYTUwgZGVjbGFyYXRpb25zCisgICBhbmQgdGV4dCBkZWNsYXJhdGlvbnMuIFRoZSB3YXkgdG8gZGlzdGluZ3Vpc2ggaXMgdGhhdCB0aGUgdmVyc2lvbgorICAgcGFyYW1ldGVyIHdpbGwgYmUgTlVMTCBmb3IgdGV4dCBkZWNsYXJhdGlvbnMuIFRoZSBlbmNvZGluZworICAgcGFyYW1ldGVyIG1heSBiZSBOVUxMIGZvciBYTUwgZGVjbGFyYXRpb25zLiBUaGUgc3RhbmRhbG9uZQorICAgcGFyYW1ldGVyIHdpbGwgYmUgLTEsIDAsIG9yIDEgaW5kaWNhdGluZyByZXNwZWN0aXZlbHkgdGhhdCB0aGVyZQorICAgd2FzIG5vIHN0YW5kYWxvbmUgcGFyYW1ldGVyIGluIHRoZSBkZWNsYXJhdGlvbiwgdGhhdCBpdCB3YXMgZ2l2ZW4KKyAgIGFzIG5vLCBvciB0aGF0IGl0IHdhcyBnaXZlbiBhcyB5ZXMuCisqLwordHlwZWRlZiB2b2lkIChYTUxDQUxMICpYTUxfWG1sRGVjbEhhbmRsZXIpICh2b2lkICAgICAgICAgICAqdXNlckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICp2ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICBzdGFuZGFsb25lKTsKKworWE1MUEFSU0VBUEkodm9pZCkKK1hNTF9TZXRYbWxEZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICBYTUxfWG1sRGVjbEhhbmRsZXIgeG1sZGVjbCk7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICB2b2lkICooKm1hbGxvY19mY24pKHNpemVfdCBzaXplKTsKKyAgdm9pZCAqKCpyZWFsbG9jX2Zjbikodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CisgIHZvaWQgKCpmcmVlX2Zjbikodm9pZCAqcHRyKTsKK30gWE1MX01lbW9yeV9IYW5kbGluZ19TdWl0ZTsKKworLyogQ29uc3RydWN0cyBhIG5ldyBwYXJzZXI7IGVuY29kaW5nIGlzIHRoZSBlbmNvZGluZyBzcGVjaWZpZWQgYnkgdGhlCisgICBleHRlcm5hbCBwcm90b2NvbCBvciBOVUxMIGlmIHRoZXJlIGlzIG5vbmUgc3BlY2lmaWVkLgorKi8KK1hNTFBBUlNFQVBJKFhNTF9QYXJzZXIpCitYTUxfUGFyc2VyQ3JlYXRlKGNvbnN0IFhNTF9DaGFyICplbmNvZGluZyk7CisKKy8qIENvbnN0cnVjdHMgYSBuZXcgcGFyc2VyIGFuZCBuYW1lc3BhY2UgcHJvY2Vzc29yLiAgRWxlbWVudCB0eXBlCisgICBuYW1lcyBhbmQgYXR0cmlidXRlIG5hbWVzIHRoYXQgYmVsb25nIHRvIGEgbmFtZXNwYWNlIHdpbGwgYmUKKyAgIGV4cGFuZGVkOyB1bnByZWZpeGVkIGF0dHJpYnV0ZSBuYW1lcyBhcmUgbmV2ZXIgZXhwYW5kZWQ7IHVucHJlZml4ZWQKKyAgIGVsZW1lbnQgdHlwZSBuYW1lcyBhcmUgZXhwYW5kZWQgb25seSBpZiB0aGVyZSBpcyBhIGRlZmF1bHQKKyAgIG5hbWVzcGFjZS4gVGhlIGV4cGFuZGVkIG5hbWUgaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIG5hbWVzcGFjZQorICAgVVJJLCB0aGUgbmFtZXNwYWNlIHNlcGFyYXRvciBjaGFyYWN0ZXIsIGFuZCB0aGUgbG9jYWwgcGFydCBvZiB0aGUKKyAgIG5hbWUuICBJZiB0aGUgbmFtZXNwYWNlIHNlcGFyYXRvciBpcyAnXDAnIHRoZW4gdGhlIG5hbWVzcGFjZSBVUkkKKyAgIGFuZCB0aGUgbG9jYWwgcGFydCB3aWxsIGJlIGNvbmNhdGVuYXRlZCB3aXRob3V0IGFueSBzZXBhcmF0b3IuCisgICBJdCBpcyBhIHByb2dyYW1taW5nIGVycm9yIHRvIHVzZSB0aGUgc2VwYXJhdG9yICdcMCcgd2l0aCBuYW1lc3BhY2UKKyAgIHRyaXBsZXRzIChzZWUgWE1MX1NldFJldHVybk5TVHJpcGxldCkuCisqLworWE1MUEFSU0VBUEkoWE1MX1BhcnNlcikKK1hNTF9QYXJzZXJDcmVhdGVOUyhjb25zdCBYTUxfQ2hhciAqZW5jb2RpbmcsIFhNTF9DaGFyIG5hbWVzcGFjZVNlcGFyYXRvcik7CisKKworLyogQ29uc3RydWN0cyBhIG5ldyBwYXJzZXIgdXNpbmcgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1aXRlIHJlZmVycmVkIHRvCisgICBieSBtZW1zdWl0ZS4gSWYgbWVtc3VpdGUgaXMgTlVMTCwgdGhlbiB1c2UgdGhlIHN0YW5kYXJkIGxpYnJhcnkgbWVtb3J5CisgICBzdWl0ZS4gSWYgbmFtZXNwYWNlU2VwYXJhdG9yIGlzIG5vbi1OVUxMIGl0IGNyZWF0ZXMgYSBwYXJzZXIgd2l0aAorICAgbmFtZXNwYWNlIHByb2Nlc3NpbmcgYXMgZGVzY3JpYmVkIGFib3ZlLiBUaGUgY2hhcmFjdGVyIHBvaW50ZWQgYXQKKyAgIHdpbGwgc2VydmUgYXMgdGhlIG5hbWVzcGFjZSBzZXBhcmF0b3IuCisKKyAgIEFsbCBmdXJ0aGVyIG1lbW9yeSBvcGVyYXRpb25zIHVzZWQgZm9yIHRoZSBjcmVhdGVkIHBhcnNlciB3aWxsIGNvbWUgZnJvbQorICAgdGhlIGdpdmVuIHN1aXRlLgorKi8KK1hNTFBBUlNFQVBJKFhNTF9QYXJzZXIpCitYTUxfUGFyc2VyQ3JlYXRlX01NKGNvbnN0IFhNTF9DaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX01lbW9yeV9IYW5kbGluZ19TdWl0ZSAqbWVtc3VpdGUsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpuYW1lc3BhY2VTZXBhcmF0b3IpOworCisvKiBQcmVwYXJlIGEgcGFyc2VyIG9iamVjdCB0byBiZSByZS11c2VkLiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkKKyAgIHZhbHVhYmxlIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gb3ZlcmhlYWQgaXMgZGlzcHJvcG9ydGlvbmF0bHkgaGlnaCwKKyAgIHN1Y2ggYXMgd2hlbiBhIGxhcmdlIG51bWJlciBvZiBzbWFsbCBkb2N1bW5lbnRzIG5lZWQgdG8gYmUgcGFyc2VkLgorICAgQWxsIGhhbmRsZXJzIGFyZSBjbGVhcmVkIGZyb20gdGhlIHBhcnNlciwgZXhjZXB0IGZvciB0aGUKKyAgIHVua25vd25FbmNvZGluZ0hhbmRsZXIuIFRoZSBwYXJzZXIncyBleHRlcm5hbCBzdGF0ZSBpcyByZS1pbml0aWFsaXplZAorICAgZXhjZXB0IGZvciB0aGUgdmFsdWVzIG9mIG5zIGFuZCBuc190cmlwbGV0cy4KKworICAgQWRkZWQgaW4gRXhwYXQgMS45NS4zLgorKi8KK1hNTFBBUlNFQVBJKFhNTF9Cb29sKQorWE1MX1BhcnNlclJlc2V0KFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBYTUxfQ2hhciAqZW5jb2RpbmcpOworCisvKiBhdHRzIGlzIGFycmF5IG9mIG5hbWUvdmFsdWUgcGFpcnMsIHRlcm1pbmF0ZWQgYnkgMDsKKyAgIG5hbWVzIGFuZCB2YWx1ZXMgYXJlIDAgdGVybWluYXRlZC4KKyovCit0eXBlZGVmIHZvaWQgKFhNTENBTEwgKlhNTF9TdGFydEVsZW1lbnRIYW5kbGVyKSAodm9pZCAqdXNlckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKiphdHRzKTsKKwordHlwZWRlZiB2b2lkIChYTUxDQUxMICpYTUxfRW5kRWxlbWVudEhhbmRsZXIpICh2b2lkICp1c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKm5hbWUpOworCisKKy8qIHMgaXMgbm90IDAgdGVybWluYXRlZC4gKi8KK3R5cGVkZWYgdm9pZCAoWE1MQ0FMTCAqWE1MX0NoYXJhY3RlckRhdGFIYW5kbGVyKSAodm9pZCAqdXNlckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuKTsKKworLyogdGFyZ2V0IGFuZCBkYXRhIGFyZSAwIHRlcm1pbmF0ZWQgKi8KK3R5cGVkZWYgdm9pZCAoWE1MQ0FMTCAqWE1MX1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXIpICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKnRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpkYXRhKTsKKworLyogZGF0YSBpcyAwIHRlcm1pbmF0ZWQgKi8KK3R5cGVkZWYgdm9pZCAoWE1MQ0FMTCAqWE1MX0NvbW1lbnRIYW5kbGVyKSAodm9pZCAqdXNlckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpkYXRhKTsKKwordHlwZWRlZiB2b2lkIChYTUxDQUxMICpYTUxfU3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyKSAodm9pZCAqdXNlckRhdGEpOwordHlwZWRlZiB2b2lkIChYTUxDQUxMICpYTUxfRW5kQ2RhdGFTZWN0aW9uSGFuZGxlcikgKHZvaWQgKnVzZXJEYXRhKTsKKworLyogVGhpcyBpcyBjYWxsZWQgZm9yIGFueSBjaGFyYWN0ZXJzIGluIHRoZSBYTUwgZG9jdW1lbnQgZm9yIHdoaWNoCisgICB0aGVyZSBpcyBubyBhcHBsaWNhYmxlIGhhbmRsZXIuICBUaGlzIGluY2x1ZGVzIGJvdGggY2hhcmFjdGVycyB0aGF0CisgICBhcmUgcGFydCBvZiBtYXJrdXAgd2hpY2ggaXMgb2YgYSBraW5kIHRoYXQgaXMgbm90IHJlcG9ydGVkCisgICAoY29tbWVudHMsIG1hcmt1cCBkZWNsYXJhdGlvbnMpLCBvciBjaGFyYWN0ZXJzIHRoYXQgYXJlIHBhcnQgb2YgYQorICAgY29uc3RydWN0IHdoaWNoIGNvdWxkIGJlIHJlcG9ydGVkIGJ1dCBmb3Igd2hpY2ggbm8gaGFuZGxlciBoYXMgYmVlbgorICAgc3VwcGxpZWQuIFRoZSBjaGFyYWN0ZXJzIGFyZSBwYXNzZWQgZXhhY3RseSBhcyB0aGV5IHdlcmUgaW4gdGhlIFhNTAorICAgZG9jdW1lbnQgZXhjZXB0IHRoYXQgdGhleSB3aWxsIGJlIGVuY29kZWQgaW4gVVRGLTggb3IgVVRGLTE2LgorICAgTGluZSBib3VuZGFyaWVzIGFyZSBub3Qgbm9ybWFsaXplZC4gTm90ZSB0aGF0IGEgYnl0ZSBvcmRlciBtYXJrCisgICBjaGFyYWN0ZXIgaXMgbm90IHBhc3NlZCB0byB0aGUgZGVmYXVsdCBoYW5kbGVyLiBUaGVyZSBhcmUgbm8KKyAgIGd1YXJhbnRlZXMgYWJvdXQgaG93IGNoYXJhY3RlcnMgYXJlIGRpdmlkZWQgYmV0d2VlbiBjYWxscyB0byB0aGUKKyAgIGRlZmF1bHQgaGFuZGxlcjogZm9yIGV4YW1wbGUsIGEgY29tbWVudCBtaWdodCBiZSBzcGxpdCBiZXR3ZWVuCisgICBtdWx0aXBsZSBjYWxscy4KKyovCit0eXBlZGVmIHZvaWQgKFhNTENBTEwgKlhNTF9EZWZhdWx0SGFuZGxlcikgKHZvaWQgKnVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbik7CisKKy8qIFRoaXMgaXMgY2FsbGVkIGZvciB0aGUgc3RhcnQgb2YgdGhlIERPQ1RZUEUgZGVjbGFyYXRpb24sIGJlZm9yZQorICAgYW55IERURCBvciBpbnRlcm5hbCBzdWJzZXQgaXMgcGFyc2VkLgorKi8KK3R5cGVkZWYgdm9pZCAoWE1MQ0FMTCAqWE1MX1N0YXJ0RG9jdHlwZURlY2xIYW5kbGVyKSAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqZG9jdHlwZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpzeXNpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKnB1YmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGFzX2ludGVybmFsX3N1YnNldCk7CisKKy8qIFRoaXMgaXMgY2FsbGVkIGZvciB0aGUgc3RhcnQgb2YgdGhlIERPQ1RZUEUgZGVjbGFyYXRpb24gd2hlbiB0aGUKKyAgIGNsb3NpbmcgPiBpcyBlbmNvdW50ZXJlZCwgYnV0IGFmdGVyIHByb2Nlc3NpbmcgYW55IGV4dGVybmFsCisgICBzdWJzZXQuCisqLwordHlwZWRlZiB2b2lkIChYTUxDQUxMICpYTUxfRW5kRG9jdHlwZURlY2xIYW5kbGVyKSh2b2lkICp1c2VyRGF0YSk7CisKKy8qIFRoaXMgaXMgY2FsbGVkIGZvciBlbnRpdHkgZGVjbGFyYXRpb25zLiBUaGUgaXNfcGFyYW1ldGVyX2VudGl0eQorICAgYXJndW1lbnQgd2lsbCBiZSBub24temVybyBpZiB0aGUgZW50aXR5IGlzIGEgcGFyYW1ldGVyIGVudGl0eSwgemVybworICAgb3RoZXJ3aXNlLgorCisgICBGb3IgaW50ZXJuYWwgZW50aXRpZXMgKDwhRU5USVRZIGZvbyAiYmFyIj4pLCB2YWx1ZSB3aWxsCisgICBiZSBub24tTlVMTCBhbmQgc3lzdGVtSWQsIHB1YmxpY0lELCBhbmQgbm90YXRpb25OYW1lIHdpbGwgYmUgTlVMTC4KKyAgIFRoZSB2YWx1ZSBzdHJpbmcgaXMgTk9UIG51bC10ZXJtaW5hdGVkOyB0aGUgbGVuZ3RoIGlzIHByb3ZpZGVkIGluCisgICB0aGUgdmFsdWVfbGVuZ3RoIGFyZ3VtZW50LiBTaW5jZSBpdCBpcyBsZWdhbCB0byBoYXZlIHplcm8tbGVuZ3RoCisgICB2YWx1ZXMsIGRvIG5vdCB1c2UgdGhpcyBhcmd1bWVudCB0byB0ZXN0IGZvciBpbnRlcm5hbCBlbnRpdGllcy4KKworICAgRm9yIGV4dGVybmFsIGVudGl0aWVzLCB2YWx1ZSB3aWxsIGJlIE5VTEwgYW5kIHN5c3RlbUlkIHdpbGwgYmUKKyAgIG5vbi1OVUxMLiBUaGUgcHVibGljSWQgYXJndW1lbnQgd2lsbCBiZSBOVUxMIHVubGVzcyBhIHB1YmxpYworICAgaWRlbnRpZmllciB3YXMgcHJvdmlkZWQuIFRoZSBub3RhdGlvbk5hbWUgYXJndW1lbnQgd2lsbCBoYXZlIGEKKyAgIG5vbi1OVUxMIHZhbHVlIG9ubHkgZm9yIHVucGFyc2VkIGVudGl0eSBkZWNsYXJhdGlvbnMuCisKKyAgIE5vdGUgdGhhdCBpc19wYXJhbWV0ZXJfZW50aXR5IGNhbid0IGJlIGNoYW5nZWQgdG8gWE1MX0Jvb2wsIHNpbmNlCisgICB0aGF0IHdvdWxkIGJyZWFrIGJpbmFyeSBjb21wYXRpYmlsaXR5LgorKi8KK3R5cGVkZWYgdm9pZCAoWE1MQ0FMTCAqWE1MX0VudGl0eURlY2xIYW5kbGVyKSAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICplbnRpdHlOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlzX3BhcmFtZXRlcl9lbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWVfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqc3lzdGVtSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqcHVibGljSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqbm90YXRpb25OYW1lKTsKKworWE1MUEFSU0VBUEkodm9pZCkKK1hNTF9TZXRFbnRpdHlEZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfRW50aXR5RGVjbEhhbmRsZXIgaGFuZGxlcik7CisKKy8qIE9CU09MRVRFIC0tIE9CU09MRVRFIC0tIE9CU09MRVRFCisgICBUaGlzIGhhbmRsZXIgaGFzIGJlZW4gc3VwZXJjZWRlZCBieSB0aGUgRW50aXR5RGVjbEhhbmRsZXIgYWJvdmUuCisgICBJdCBpcyBwcm92aWRlZCBoZXJlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorCisgICBUaGlzIGlzIGNhbGxlZCBmb3IgYSBkZWNsYXJhdGlvbiBvZiBhbiB1bnBhcnNlZCAoTkRBVEEpIGVudGl0eS4KKyAgIFRoZSBiYXNlIGFyZ3VtZW50IGlzIHdoYXRldmVyIHdhcyBzZXQgYnkgWE1MX1NldEJhc2UuIFRoZQorICAgZW50aXR5TmFtZSwgc3lzdGVtSWQgYW5kIG5vdGF0aW9uTmFtZSBhcmd1bWVudHMgd2lsbCBuZXZlciBiZQorICAgTlVMTC4gVGhlIG90aGVyIGFyZ3VtZW50cyBtYXkgYmUuCisqLwordHlwZWRlZiB2b2lkIChYTUxDQUxMICpYTUxfVW5wYXJzZWRFbnRpdHlEZWNsSGFuZGxlcikgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqZW50aXR5TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKnN5c3RlbUlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKnB1YmxpY0lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKm5vdGF0aW9uTmFtZSk7CisKKy8qIFRoaXMgaXMgY2FsbGVkIGZvciBhIGRlY2xhcmF0aW9uIG9mIG5vdGF0aW9uLiAgVGhlIGJhc2UgYXJndW1lbnQgaXMKKyAgIHdoYXRldmVyIHdhcyBzZXQgYnkgWE1MX1NldEJhc2UuIFRoZSBub3RhdGlvbk5hbWUgd2lsbCBuZXZlciBiZQorICAgTlVMTC4gIFRoZSBvdGhlciBhcmd1bWVudHMgY2FuIGJlLgorKi8KK3R5cGVkZWYgdm9pZCAoWE1MQ0FMTCAqWE1MX05vdGF0aW9uRGVjbEhhbmRsZXIpICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKm5vdGF0aW9uTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKnN5c3RlbUlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKnB1YmxpY0lkKTsKKworLyogV2hlbiBuYW1lc3BhY2UgcHJvY2Vzc2luZyBpcyBlbmFibGVkLCB0aGVzZSBhcmUgY2FsbGVkIG9uY2UgZm9yCisgICBlYWNoIG5hbWVzcGFjZSBkZWNsYXJhdGlvbi4gVGhlIGNhbGwgdG8gdGhlIHN0YXJ0IGFuZCBlbmQgZWxlbWVudAorICAgaGFuZGxlcnMgb2NjdXIgYmV0d2VlbiB0aGUgY2FsbHMgdG8gdGhlIHN0YXJ0IGFuZCBlbmQgbmFtZXNwYWNlCisgICBkZWNsYXJhdGlvbiBoYW5kbGVycy4gRm9yIGFuIHhtbG5zIGF0dHJpYnV0ZSwgcHJlZml4IHdpbGwgYmUKKyAgIE5VTEwuICBGb3IgYW4geG1sbnM9IiIgYXR0cmlidXRlLCB1cmkgd2lsbCBiZSBOVUxMLgorKi8KK3R5cGVkZWYgdm9pZCAoWE1MQ0FMTCAqWE1MX1N0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIpICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKnByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICp1cmkpOworCit0eXBlZGVmIHZvaWQgKFhNTENBTEwgKlhNTF9FbmROYW1lc3BhY2VEZWNsSGFuZGxlcikgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqcHJlZml4KTsKKworLyogVGhpcyBpcyBjYWxsZWQgaWYgdGhlIGRvY3VtZW50IGlzIG5vdCBzdGFuZGFsb25lLCB0aGF0IGlzLCBpdCBoYXMgYW4KKyAgIGV4dGVybmFsIHN1YnNldCBvciBhIHJlZmVyZW5jZSB0byBhIHBhcmFtZXRlciBlbnRpdHksIGJ1dCBkb2VzIG5vdAorICAgaGF2ZSBzdGFuZGFsb25lPSJ5ZXMiLiBJZiB0aGlzIGhhbmRsZXIgcmV0dXJucyBYTUxfU1RBVFVTX0VSUk9SLAorICAgdGhlbiBwcm9jZXNzaW5nIHdpbGwgbm90IGNvbnRpbnVlLCBhbmQgdGhlIHBhcnNlciB3aWxsIHJldHVybiBhCisgICBYTUxfRVJST1JfTk9UX1NUQU5EQUxPTkUgZXJyb3IuCisgICBJZiBwYXJhbWV0ZXIgZW50aXR5IHBhcnNpbmcgaXMgZW5hYmxlZCwgdGhlbiBpbiBhZGRpdGlvbiB0byB0aGUKKyAgIGNvbmRpdGlvbnMgYWJvdmUgdGhpcyBoYW5kbGVyIHdpbGwgb25seSBiZSBjYWxsZWQgaWYgdGhlIHJlZmVyZW5jZWQKKyAgIGVudGl0eSB3YXMgYWN0dWFsbHkgcmVhZC4KKyovCit0eXBlZGVmIGludCAoWE1MQ0FMTCAqWE1MX05vdFN0YW5kYWxvbmVIYW5kbGVyKSAodm9pZCAqdXNlckRhdGEpOworCisvKiBUaGlzIGlzIGNhbGxlZCBmb3IgYSByZWZlcmVuY2UgdG8gYW4gZXh0ZXJuYWwgcGFyc2VkIGdlbmVyYWwKKyAgIGVudGl0eS4gIFRoZSByZWZlcmVuY2VkIGVudGl0eSBpcyBub3QgYXV0b21hdGljYWxseSBwYXJzZWQuICBUaGUKKyAgIGFwcGxpY2F0aW9uIGNhbiBwYXJzZSBpdCBpbW1lZGlhdGVseSBvciBsYXRlciB1c2luZworICAgWE1MX0V4dGVybmFsRW50aXR5UGFyc2VyQ3JlYXRlLgorCisgICBUaGUgcGFyc2VyIGFyZ3VtZW50IGlzIHRoZSBwYXJzZXIgcGFyc2luZyB0aGUgZW50aXR5IGNvbnRhaW5pbmcgdGhlCisgICByZWZlcmVuY2U7IGl0IGNhbiBiZSBwYXNzZWQgYXMgdGhlIHBhcnNlciBhcmd1bWVudCB0bworICAgWE1MX0V4dGVybmFsRW50aXR5UGFyc2VyQ3JlYXRlLiAgVGhlIHN5c3RlbUlkIGFyZ3VtZW50IGlzIHRoZQorICAgc3lzdGVtIGlkZW50aWZpZXIgYXMgc3BlY2lmaWVkIGluIHRoZSBlbnRpdHkgZGVjbGFyYXRpb247IGl0IHdpbGwKKyAgIG5vdCBiZSBOVUxMLgorCisgICBUaGUgYmFzZSBhcmd1bWVudCBpcyB0aGUgc3lzdGVtIGlkZW50aWZpZXIgdGhhdCBzaG91bGQgYmUgdXNlZCBhcworICAgdGhlIGJhc2UgZm9yIHJlc29sdmluZyBzeXN0ZW1JZCBpZiBzeXN0ZW1JZCB3YXMgcmVsYXRpdmU7IHRoaXMgaXMKKyAgIHNldCBieSBYTUxfU2V0QmFzZTsgaXQgbWF5IGJlIE5VTEwuCisKKyAgIFRoZSBwdWJsaWNJZCBhcmd1bWVudCBpcyB0aGUgcHVibGljIGlkZW50aWZpZXIgYXMgc3BlY2lmaWVkIGluIHRoZQorICAgZW50aXR5IGRlY2xhcmF0aW9uLCBvciBOVUxMIGlmIG5vbmUgd2FzIHNwZWNpZmllZDsgdGhlIHdoaXRlc3BhY2UKKyAgIGluIHRoZSBwdWJsaWMgaWRlbnRpZmllciB3aWxsIGhhdmUgYmVlbiBub3JtYWxpemVkIGFzIHJlcXVpcmVkIGJ5CisgICB0aGUgWE1MIHNwZWMuCisKKyAgIFRoZSBjb250ZXh0IGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgcGFyc2luZyBjb250ZXh0IGluIHRoZSBmb3JtYXQKKyAgIGV4cGVjdGVkIGJ5IHRoZSBjb250ZXh0IGFyZ3VtZW50IHRvIFhNTF9FeHRlcm5hbEVudGl0eVBhcnNlckNyZWF0ZTsKKyAgIGNvbnRleHQgaXMgdmFsaWQgb25seSB1bnRpbCB0aGUgaGFuZGxlciByZXR1cm5zLCBzbyBpZiB0aGUKKyAgIHJlZmVyZW5jZWQgZW50aXR5IGlzIHRvIGJlIHBhcnNlZCBsYXRlciwgaXQgbXVzdCBiZSBjb3BpZWQuCisgICBjb250ZXh0IGlzIE5VTEwgb25seSB3aGVuIHRoZSBlbnRpdHkgaXMgYSBwYXJhbWV0ZXIgZW50aXR5LgorCisgICBUaGUgaGFuZGxlciBzaG91bGQgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1IgaWYgcHJvY2Vzc2luZyBzaG91bGQgbm90CisgICBjb250aW51ZSBiZWNhdXNlIG9mIGEgZmF0YWwgZXJyb3IgaW4gdGhlIGhhbmRsaW5nIG9mIHRoZSBleHRlcm5hbAorICAgZW50aXR5LiAgSW4gdGhpcyBjYXNlIHRoZSBjYWxsaW5nIHBhcnNlciB3aWxsIHJldHVybiBhbgorICAgWE1MX0VSUk9SX0VYVEVSTkFMX0VOVElUWV9IQU5ETElORyBlcnJvci4KKworICAgTm90ZSB0aGF0IHVubGlrZSBvdGhlciBoYW5kbGVycyB0aGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIHBhcnNlciwKKyAgIG5vdCB1c2VyRGF0YS4KKyovCit0eXBlZGVmIGludCAoWE1MQ0FMTCAqWE1MX0V4dGVybmFsRW50aXR5UmVmSGFuZGxlcikgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1BhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKnN5c3RlbUlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKnB1YmxpY0lkKTsKKworLyogVGhpcyBpcyBjYWxsZWQgaW4gdHdvIHNpdHVhdGlvbnM6CisgICAxKSBBbiBlbnRpdHkgcmVmZXJlbmNlIGlzIGVuY291bnRlcmVkIGZvciB3aGljaCBubyBkZWNsYXJhdGlvbgorICAgICAgaGFzIGJlZW4gcmVhZCAqYW5kKiB0aGlzIGlzIG5vdCBhbiBlcnJvci4KKyAgIDIpIEFuIGludGVybmFsIGVudGl0eSByZWZlcmVuY2UgaXMgcmVhZCwgYnV0IG5vdCBleHBhbmRlZCwgYmVjYXVzZQorICAgICAgWE1MX1NldERlZmF1bHRIYW5kbGVyIGhhcyBiZWVuIGNhbGxlZC4KKyAgIE5vdGU6IHNraXBwZWQgcGFyYW1ldGVyIGVudGl0aWVzIGluIGRlY2xhcmF0aW9ucyBhbmQgc2tpcHBlZCBnZW5lcmFsCisgICAgICAgICBlbnRpdGllcyBpbiBhdHRyaWJ1dGUgdmFsdWVzIGNhbm5vdCBiZSByZXBvcnRlZCwgYmVjYXVzZQorICAgICAgICAgdGhlIGV2ZW50IHdvdWxkIGJlIG91dCBvZiBzeW5jIHdpdGggdGhlIHJlcG9ydGluZyBvZiB0aGUKKyAgICAgICAgIGRlY2xhcmF0aW9ucyBvciBhdHRyaWJ1dGUgdmFsdWVzCisqLwordHlwZWRlZiB2b2lkIChYTUxDQUxMICpYTUxfU2tpcHBlZEVudGl0eUhhbmRsZXIpICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKmVudGl0eU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXNfcGFyYW1ldGVyX2VudGl0eSk7CisKKy8qIFRoaXMgc3RydWN0dXJlIGlzIGZpbGxlZCBpbiBieSB0aGUgWE1MX1Vua25vd25FbmNvZGluZ0hhbmRsZXIgdG8KKyAgIHByb3ZpZGUgaW5mb3JtYXRpb24gdG8gdGhlIHBhcnNlciBhYm91dCBlbmNvZGluZ3MgdGhhdCBhcmUgdW5rbm93bgorICAgdG8gdGhlIHBhcnNlci4KKworICAgVGhlIG1hcFtiXSBtZW1iZXIgZ2l2ZXMgaW5mb3JtYXRpb24gYWJvdXQgYnl0ZSBzZXF1ZW5jZXMgd2hvc2UKKyAgIGZpcnN0IGJ5dGUgaXMgYi4KKworICAgSWYgbWFwW2JdIGlzIGMgd2hlcmUgYyBpcyA+PSAwLCB0aGVuIGIgYnkgaXRzZWxmIGVuY29kZXMgdGhlCisgICBVbmljb2RlIHNjYWxhciB2YWx1ZSBjLgorCisgICBJZiBtYXBbYl0gaXMgLTEsIHRoZW4gdGhlIGJ5dGUgc2VxdWVuY2UgaXMgbWFsZm9ybWVkLgorCisgICBJZiBtYXBbYl0gaXMgLW4sIHdoZXJlIG4gPj0gMiwgdGhlbiBiIGlzIHRoZSBmaXJzdCBieXRlIG9mIGFuCisgICBuLWJ5dGUgc2VxdWVuY2UgdGhhdCBlbmNvZGVzIGEgc2luZ2xlIFVuaWNvZGUgc2NhbGFyIHZhbHVlLgorCisgICBUaGUgZGF0YSBtZW1iZXIgd2lsbCBiZSBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBjb252ZXJ0CisgICBmdW5jdGlvbi4KKworICAgVGhlIGNvbnZlcnQgZnVuY3Rpb24gaXMgdXNlZCB0byBjb252ZXJ0IG11bHRpYnl0ZSBzZXF1ZW5jZXM7IHMgd2lsbAorICAgcG9pbnQgdG8gYSBuLWJ5dGUgc2VxdWVuY2Ugd2hlcmUgbWFwWyh1bnNpZ25lZCBjaGFyKSpzXSA9PSAtbi4gIFRoZQorICAgY29udmVydCBmdW5jdGlvbiBtdXN0IHJldHVybiB0aGUgVW5pY29kZSBzY2FsYXIgdmFsdWUgcmVwcmVzZW50ZWQKKyAgIGJ5IHRoaXMgYnl0ZSBzZXF1ZW5jZSBvciAtMSBpZiB0aGUgYnl0ZSBzZXF1ZW5jZSBpcyBtYWxmb3JtZWQuCisKKyAgIFRoZSBjb252ZXJ0IGZ1bmN0aW9uIG1heSBiZSBOVUxMIGlmIHRoZSBlbmNvZGluZyBpcyBhIHNpbmdsZS1ieXRlCisgICBlbmNvZGluZywgdGhhdCBpcyBpZiBtYXBbYl0gPj0gLTEgZm9yIGFsbCBieXRlcyBiLgorCisgICBXaGVuIHRoZSBwYXJzZXIgaXMgZmluaXNoZWQgd2l0aCB0aGUgZW5jb2RpbmcsIHRoZW4gaWYgcmVsZWFzZSBpcworICAgbm90IE5VTEwsIGl0IHdpbGwgY2FsbCByZWxlYXNlIHBhc3NpbmcgaXQgdGhlIGRhdGEgbWVtYmVyOyBvbmNlCisgICByZWxlYXNlIGhhcyBiZWVuIGNhbGxlZCwgdGhlIGNvbnZlcnQgZnVuY3Rpb24gd2lsbCBub3QgYmUgY2FsbGVkCisgICBhZ2Fpbi4KKworICAgRXhwYXQgcGxhY2VzIGNlcnRhaW4gcmVzdHJpY3Rpb25zIG9uIHRoZSBlbmNvZGluZ3MgdGhhdCBhcmUgc3VwcG9ydGVkCisgICB1c2luZyB0aGlzIG1lY2hhbmlzbS4KKworICAgMS4gRXZlcnkgQVNDSUkgY2hhcmFjdGVyIHRoYXQgY2FuIGFwcGVhciBpbiBhIHdlbGwtZm9ybWVkIFhNTCBkb2N1bWVudCwKKyAgICAgIG90aGVyIHRoYW4gdGhlIGNoYXJhY3RlcnMKKworICAgICAgJEBcXmB7fX4KKworICAgICAgbXVzdCBiZSByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBieXRlLCBhbmQgdGhhdCBieXRlIG11c3QgYmUgdGhlCisgICAgICBzYW1lIGJ5dGUgdGhhdCByZXByZXNlbnRzIHRoYXQgY2hhcmFjdGVyIGluIEFTQ0lJLgorCisgICAyLiBObyBjaGFyYWN0ZXIgbWF5IHJlcXVpcmUgbW9yZSB0aGFuIDQgYnl0ZXMgdG8gZW5jb2RlLgorCisgICAzLiBBbGwgY2hhcmFjdGVycyBlbmNvZGVkIG11c3QgaGF2ZSBVbmljb2RlIHNjYWxhciB2YWx1ZXMgPD0KKyAgICAgIDB4RkZGRiwgKGkuZS4sIGNoYXJhY3RlcnMgdGhhdCB3b3VsZCBiZSBlbmNvZGVkIGJ5IHN1cnJvZ2F0ZXMgaW4KKyAgICAgIFVURi0xNiBhcmUgIG5vdCBhbGxvd2VkKS4gIE5vdGUgdGhhdCB0aGlzIHJlc3RyaWN0aW9uIGRvZXNuJ3QKKyAgICAgIGFwcGx5IHRvIHRoZSBidWlsdC1pbiBzdXBwb3J0IGZvciBVVEYtOCBhbmQgVVRGLTE2LgorCisgICA0LiBObyBVbmljb2RlIGNoYXJhY3RlciBtYXkgYmUgZW5jb2RlZCBieSBtb3JlIHRoYW4gb25lIGRpc3RpbmN0CisgICAgICBzZXF1ZW5jZSBvZiBieXRlcy4KKyovCit0eXBlZGVmIHN0cnVjdCB7CisgIGludCBtYXBbMjU2XTsKKyAgdm9pZCAqZGF0YTsKKyAgaW50IChYTUxDQUxMICpjb252ZXJ0KSh2b2lkICpkYXRhLCBjb25zdCBjaGFyICpzKTsKKyAgdm9pZCAoWE1MQ0FMTCAqcmVsZWFzZSkodm9pZCAqZGF0YSk7Cit9IFhNTF9FbmNvZGluZzsKKworLyogVGhpcyBpcyBjYWxsZWQgZm9yIGFuIGVuY29kaW5nIHRoYXQgaXMgdW5rbm93biB0byB0aGUgcGFyc2VyLgorCisgICBUaGUgZW5jb2RpbmdIYW5kbGVyRGF0YSBhcmd1bWVudCBpcyB0aGF0IHdoaWNoIHdhcyBwYXNzZWQgYXMgdGhlCisgICBzZWNvbmQgYXJndW1lbnQgdG8gWE1MX1NldFVua25vd25FbmNvZGluZ0hhbmRsZXIuCisKKyAgIFRoZSBuYW1lIGFyZ3VtZW50IGdpdmVzIHRoZSBuYW1lIG9mIHRoZSBlbmNvZGluZyBhcyBzcGVjaWZpZWQgaW4KKyAgIHRoZSBlbmNvZGluZyBkZWNsYXJhdGlvbi4KKworICAgSWYgdGhlIGNhbGxiYWNrIGNhbiBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBlbmNvZGluZywgaXQgbXVzdAorICAgZmlsbCBpbiB0aGUgWE1MX0VuY29kaW5nIHN0cnVjdHVyZSwgYW5kIHJldHVybiBYTUxfU1RBVFVTX09LLgorICAgT3RoZXJ3aXNlIGl0IG11c3QgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1IuCisKKyAgIElmIGluZm8gZG9lcyBub3QgZGVzY3JpYmUgYSBzdWl0YWJsZSBlbmNvZGluZywgdGhlbiB0aGUgcGFyc2VyIHdpbGwKKyAgIHJldHVybiBhbiBYTUxfVU5LTk9XTl9FTkNPRElORyBlcnJvci4KKyovCit0eXBlZGVmIGludCAoWE1MQ0FMTCAqWE1MX1Vua25vd25FbmNvZGluZ0hhbmRsZXIpICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmVuY29kaW5nSGFuZGxlckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9FbmNvZGluZyAqaW5mbyk7CisKK1hNTFBBUlNFQVBJKHZvaWQpCitYTUxfU2V0RWxlbWVudEhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgWE1MX1N0YXJ0RWxlbWVudEhhbmRsZXIgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgWE1MX0VuZEVsZW1lbnRIYW5kbGVyIGVuZCk7CisKK1hNTFBBUlNFQVBJKHZvaWQpCitYTUxfU2V0U3RhcnRFbGVtZW50SGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9TdGFydEVsZW1lbnRIYW5kbGVyIGhhbmRsZXIpOworCitYTUxQQVJTRUFQSSh2b2lkKQorWE1MX1NldEVuZEVsZW1lbnRIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9FbmRFbGVtZW50SGFuZGxlciBoYW5kbGVyKTsKKworWE1MUEFSU0VBUEkodm9pZCkKK1hNTF9TZXRDaGFyYWN0ZXJEYXRhSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfQ2hhcmFjdGVyRGF0YUhhbmRsZXIgaGFuZGxlcik7CisKK1hNTFBBUlNFQVBJKHZvaWQpCitYTUxfU2V0UHJvY2Vzc2luZ0luc3RydWN0aW9uSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyIGhhbmRsZXIpOworWE1MUEFSU0VBUEkodm9pZCkKK1hNTF9TZXRDb21tZW50SGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICBYTUxfQ29tbWVudEhhbmRsZXIgaGFuZGxlcik7CisKK1hNTFBBUlNFQVBJKHZvaWQpCitYTUxfU2V0Q2RhdGFTZWN0aW9uSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9TdGFydENkYXRhU2VjdGlvbkhhbmRsZXIgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfRW5kQ2RhdGFTZWN0aW9uSGFuZGxlciBlbmQpOworCitYTUxQQVJTRUFQSSh2b2lkKQorWE1MX1NldFN0YXJ0Q2RhdGFTZWN0aW9uSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1N0YXJ0Q2RhdGFTZWN0aW9uSGFuZGxlciBzdGFydCk7CisKK1hNTFBBUlNFQVBJKHZvaWQpCitYTUxfU2V0RW5kQ2RhdGFTZWN0aW9uSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9FbmRDZGF0YVNlY3Rpb25IYW5kbGVyIGVuZCk7CisKKy8qIFRoaXMgc2V0cyB0aGUgZGVmYXVsdCBoYW5kbGVyIGFuZCBhbHNvIGluaGliaXRzIGV4cGFuc2lvbiBvZgorICAgaW50ZXJuYWwgZW50aXRpZXMuIFRoZXNlIGVudGl0eSByZWZlcmVuY2VzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZQorICAgZGVmYXVsdCBoYW5kbGVyLCBvciB0byB0aGUgc2tpcHBlZCBlbnRpdHkgaGFuZGxlciwgaWYgb25lIGlzIHNldC4KKyovCitYTUxQQVJTRUFQSSh2b2lkKQorWE1MX1NldERlZmF1bHRIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgIFhNTF9EZWZhdWx0SGFuZGxlciBoYW5kbGVyKTsKKworLyogVGhpcyBzZXRzIHRoZSBkZWZhdWx0IGhhbmRsZXIgYnV0IGRvZXMgbm90IGluaGliaXQgZXhwYW5zaW9uIG9mCisgICBpbnRlcm5hbCBlbnRpdGllcy4gIFRoZSBlbnRpdHkgcmVmZXJlbmNlIHdpbGwgbm90IGJlIHBhc3NlZCB0byB0aGUKKyAgIGRlZmF1bHQgaGFuZGxlci4KKyovCitYTUxQQVJTRUFQSSh2b2lkKQorWE1MX1NldERlZmF1bHRIYW5kbGVyRXhwYW5kKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9EZWZhdWx0SGFuZGxlciBoYW5kbGVyKTsKKworWE1MUEFSU0VBUEkodm9pZCkKK1hNTF9TZXREb2N0eXBlRGVjbEhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9TdGFydERvY3R5cGVEZWNsSGFuZGxlciBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0VuZERvY3R5cGVEZWNsSGFuZGxlciBlbmQpOworCitYTUxQQVJTRUFQSSh2b2lkKQorWE1MX1NldFN0YXJ0RG9jdHlwZURlY2xIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9TdGFydERvY3R5cGVEZWNsSGFuZGxlciBzdGFydCk7CisKK1hNTFBBUlNFQVBJKHZvaWQpCitYTUxfU2V0RW5kRG9jdHlwZURlY2xIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfRW5kRG9jdHlwZURlY2xIYW5kbGVyIGVuZCk7CisKK1hNTFBBUlNFQVBJKHZvaWQpCitYTUxfU2V0VW5wYXJzZWRFbnRpdHlEZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9VbnBhcnNlZEVudGl0eURlY2xIYW5kbGVyIGhhbmRsZXIpOworCitYTUxQQVJTRUFQSSh2b2lkKQorWE1MX1NldE5vdGF0aW9uRGVjbEhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfTm90YXRpb25EZWNsSGFuZGxlciBoYW5kbGVyKTsKKworWE1MUEFSU0VBUEkodm9pZCkKK1hNTF9TZXROYW1lc3BhY2VEZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlciBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfRW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIgZW5kKTsKKworWE1MUEFSU0VBUEkodm9pZCkKK1hNTF9TZXRTdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1N0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIgc3RhcnQpOworCitYTUxQQVJTRUFQSSh2b2lkKQorWE1MX1NldEVuZE5hbWVzcGFjZURlY2xIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9FbmROYW1lc3BhY2VEZWNsSGFuZGxlciBlbmQpOworCitYTUxQQVJTRUFQSSh2b2lkKQorWE1MX1NldE5vdFN0YW5kYWxvbmVIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9Ob3RTdGFuZGFsb25lSGFuZGxlciBoYW5kbGVyKTsKKworWE1MUEFSU0VBUEkodm9pZCkKK1hNTF9TZXRFeHRlcm5hbEVudGl0eVJlZkhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9FeHRlcm5hbEVudGl0eVJlZkhhbmRsZXIgaGFuZGxlcik7CisKKy8qIElmIGEgbm9uLU5VTEwgdmFsdWUgZm9yIGFyZyBpcyBzcGVjaWZpZWQgaGVyZSwgdGhlbiBpdCB3aWxsIGJlCisgICBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBleHRlcm5hbCBlbnRpdHkgcmVmIGhhbmRsZXIKKyAgIGluc3RlYWQgb2YgdGhlIHBhcnNlciBvYmplY3QuCisqLworWE1MUEFSU0VBUEkodm9pZCkKK1hNTF9TZXRFeHRlcm5hbEVudGl0eVJlZkhhbmRsZXJBcmcoWE1MX1BhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZyk7CisKK1hNTFBBUlNFQVBJKHZvaWQpCitYTUxfU2V0U2tpcHBlZEVudGl0eUhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1NraXBwZWRFbnRpdHlIYW5kbGVyIGhhbmRsZXIpOworCitYTUxQQVJTRUFQSSh2b2lkKQorWE1MX1NldFVua25vd25FbmNvZGluZ0hhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfVW5rbm93bkVuY29kaW5nSGFuZGxlciBoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZW5jb2RpbmdIYW5kbGVyRGF0YSk7CisKKy8qIFRoaXMgY2FuIGJlIGNhbGxlZCB3aXRoaW4gYSBoYW5kbGVyIGZvciBhIHN0YXJ0IGVsZW1lbnQsIGVuZAorICAgZWxlbWVudCwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBvciBjaGFyYWN0ZXIgZGF0YS4gIEl0IGNhdXNlcyB0aGUKKyAgIGNvcnJlc3BvbmRpbmcgbWFya3VwIHRvIGJlIHBhc3NlZCB0byB0aGUgZGVmYXVsdCBoYW5kbGVyLgorKi8KK1hNTFBBUlNFQVBJKHZvaWQpCitYTUxfRGVmYXVsdEN1cnJlbnQoWE1MX1BhcnNlciBwYXJzZXIpOworCisvKiBJZiBkb19uc3QgaXMgbm9uLXplcm8sIGFuZCBuYW1lc3BhY2UgcHJvY2Vzc2luZyBpcyBpbiBlZmZlY3QsIGFuZAorICAgYSBuYW1lIGhhcyBhIHByZWZpeCAoaS5lLiBhbiBleHBsaWNpdCBuYW1lc3BhY2UgcXVhbGlmaWVyKSB0aGVuCisgICB0aGF0IG5hbWUgaXMgcmV0dXJuZWQgYXMgYSB0cmlwbGV0IGluIGEgc2luZ2xlIHN0cmluZyBzZXBhcmF0ZWQgYnkKKyAgIHRoZSBzZXBhcmF0b3IgY2hhcmFjdGVyIHNwZWNpZmllZCB3aGVuIHRoZSBwYXJzZXIgd2FzIGNyZWF0ZWQ6IFVSSQorICAgKyBzZXAgKyBsb2NhbF9uYW1lICsgc2VwICsgcHJlZml4LgorCisgICBJZiBkb19uc3QgaXMgemVybywgdGhlbiBuYW1lc3BhY2UgaW5mb3JtYXRpb24gaXMgcmV0dXJuZWQgaW4gdGhlCisgICBkZWZhdWx0IG1hbm5lciAoVVJJICsgc2VwICsgbG9jYWxfbmFtZSkgd2hldGhlciBvciBub3QgdGhlIG5hbWUKKyAgIGhhcyBhIHByZWZpeC4KKworICAgTm90ZTogQ2FsbGluZyBYTUxfU2V0UmV0dXJuTlNUcmlwbGV0IGFmdGVyIFhNTF9QYXJzZSBvcgorICAgICBYTUxfUGFyc2VCdWZmZXIgaGFzIG5vIGVmZmVjdC4KKyovCisKK1hNTFBBUlNFQVBJKHZvaWQpCitYTUxfU2V0UmV0dXJuTlNUcmlwbGV0KFhNTF9QYXJzZXIgcGFyc2VyLCBpbnQgZG9fbnN0KTsKKworLyogVGhpcyB2YWx1ZSBpcyBwYXNzZWQgYXMgdGhlIHVzZXJEYXRhIGFyZ3VtZW50IHRvIGNhbGxiYWNrcy4gKi8KK1hNTFBBUlNFQVBJKHZvaWQpCitYTUxfU2V0VXNlckRhdGEoWE1MX1BhcnNlciBwYXJzZXIsIHZvaWQgKnVzZXJEYXRhKTsKKworLyogUmV0dXJucyB0aGUgbGFzdCB2YWx1ZSBzZXQgYnkgWE1MX1NldFVzZXJEYXRhIG9yIE5VTEwuICovCisjZGVmaW5lIFhNTF9HZXRVc2VyRGF0YShwYXJzZXIpICgqKHZvaWQgKiopKHBhcnNlcikpCisKKy8qIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzdXBwbHlpbmcgYW4gZW5jb2RpbmcgYXJndW1lbnQgdG8KKyAgIFhNTF9QYXJzZXJDcmVhdGUuIE9uIHN1Y2Nlc3MgWE1MX1NldEVuY29kaW5nIHJldHVybnMgbm9uLXplcm8sCisgICB6ZXJvIG90aGVyd2lzZS4KKyAgIE5vdGU6IENhbGxpbmcgWE1MX1NldEVuY29kaW5nIGFmdGVyIFhNTF9QYXJzZSBvciBYTUxfUGFyc2VCdWZmZXIKKyAgICAgaGFzIG5vIGVmZmVjdCBhbmQgcmV0dXJucyBYTUxfU1RBVFVTX0VSUk9SLgorKi8KK1hNTFBBUlNFQVBJKGVudW0gWE1MX1N0YXR1cykKK1hNTF9TZXRFbmNvZGluZyhYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgWE1MX0NoYXIgKmVuY29kaW5nKTsKKworLyogSWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZW4gdGhlIHBhcnNlciB3aWxsIGJlIHBhc3NlZCBhcyB0aGUKKyAgIGZpcnN0IGFyZ3VtZW50IHRvIGNhbGxiYWNrcyBpbnN0ZWFkIG9mIHVzZXJEYXRhLiAgVGhlIHVzZXJEYXRhIHdpbGwKKyAgIHN0aWxsIGJlIGFjY2Vzc2libGUgdXNpbmcgWE1MX0dldFVzZXJEYXRhLgorKi8KK1hNTFBBUlNFQVBJKHZvaWQpCitYTUxfVXNlUGFyc2VyQXNIYW5kbGVyQXJnKFhNTF9QYXJzZXIgcGFyc2VyKTsKKworLyogSWYgdXNlRFREID09IFhNTF9UUlVFIGlzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uLCB0aGVuIHRoZSBwYXJzZXIKKyAgIHdpbGwgYXNzdW1lIHRoYXQgdGhlcmUgaXMgYW4gZXh0ZXJuYWwgc3Vic2V0LCBldmVuIGlmIG5vbmUgaXMKKyAgIHNwZWNpZmllZCBpbiB0aGUgZG9jdW1lbnQuIEluIHN1Y2ggYSBjYXNlIHRoZSBwYXJzZXIgd2lsbCBjYWxsIHRoZQorICAgZXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyIHdpdGggYSB2YWx1ZSBvZiBOVUxMIGZvciB0aGUgc3lzdGVtSWQKKyAgIGFyZ3VtZW50ICh0aGUgcHVibGljSWQgYW5kIGNvbnRleHQgYXJndW1lbnRzIHdpbGwgYmUgTlVMTCBhcyB3ZWxsKS4KKyAgIE5vdGU6IEZvciB0aGUgcHVycG9zZSBvZiBjaGVja2luZyBXRkM6IEVudGl0eSBEZWNsYXJlZCwgcGFzc2luZworICAgICB1c2VEVEQgPT0gWE1MX1RSVUUgd2lsbCBtYWtlIHRoZSBwYXJzZXIgYmVoYXZlIGFzIGlmIHRoZSBkb2N1bWVudAorICAgICBoYWQgYSBEVEQgd2l0aCBhbiBleHRlcm5hbCBzdWJzZXQuCisgICBOb3RlOiBJZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlbiB0aGlzIG11c3QgYmUgZG9uZSBiZWZvcmUKKyAgICAgdGhlIGZpcnN0IGNhbGwgdG8gWE1MX1BhcnNlIG9yIFhNTF9QYXJzZUJ1ZmZlciwgc2luY2UgaXQgd2lsbAorICAgICBoYXZlIG5vIGVmZmVjdCBhZnRlciB0aGF0LiAgUmV0dXJucworICAgICBYTUxfRVJST1JfQ0FOVF9DSEFOR0VfRkVBVFVSRV9PTkNFX1BBUlNJTkcuCisgICBOb3RlOiBJZiB0aGUgZG9jdW1lbnQgZG9lcyBub3QgaGF2ZSBhIERPQ1RZUEUgZGVjbGFyYXRpb24gYXQgYWxsLAorICAgICB0aGVuIHN0YXJ0RG9jdHlwZURlY2xIYW5kbGVyIGFuZCBlbmREb2N0eXBlRGVjbEhhbmRsZXIgd2lsbCBub3QKKyAgICAgYmUgY2FsbGVkLCBkZXNwaXRlIGFuIGV4dGVybmFsIHN1YnNldCBiZWluZyBwYXJzZWQuCisgICBOb3RlOiBJZiBYTUxfRFREIGlzIG5vdCBkZWZpbmVkIHdoZW4gRXhwYXQgaXMgY29tcGlsZWQsIHJldHVybnMKKyAgICAgWE1MX0VSUk9SX0ZFQVRVUkVfUkVRVUlSRVNfWE1MX0RURC4KKyovCitYTUxQQVJTRUFQSShlbnVtIFhNTF9FcnJvcikKK1hNTF9Vc2VGb3JlaWduRFREKFhNTF9QYXJzZXIgcGFyc2VyLCBYTUxfQm9vbCB1c2VEVEQpOworCisKKy8qIFNldHMgdGhlIGJhc2UgdG8gYmUgdXNlZCBmb3IgcmVzb2x2aW5nIHJlbGF0aXZlIFVSSXMgaW4gc3lzdGVtCisgICBpZGVudGlmaWVycyBpbiBkZWNsYXJhdGlvbnMuICBSZXNvbHZpbmcgcmVsYXRpdmUgaWRlbnRpZmllcnMgaXMKKyAgIGxlZnQgdG8gdGhlIGFwcGxpY2F0aW9uOiB0aGlzIHZhbHVlIHdpbGwgYmUgcGFzc2VkIHRocm91Z2ggYXMgdGhlCisgICBiYXNlIGFyZ3VtZW50IHRvIHRoZSBYTUxfRXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyLAorICAgWE1MX05vdGF0aW9uRGVjbEhhbmRsZXIgYW5kIFhNTF9VbnBhcnNlZEVudGl0eURlY2xIYW5kbGVyLiBUaGUgYmFzZQorICAgYXJndW1lbnQgd2lsbCBiZSBjb3BpZWQuICBSZXR1cm5zIFhNTF9TVEFUVVNfRVJST1IgaWYgb3V0IG9mIG1lbW9yeSwKKyAgIFhNTF9TVEFUVVNfT0sgb3RoZXJ3aXNlLgorKi8KK1hNTFBBUlNFQVBJKGVudW0gWE1MX1N0YXR1cykKK1hNTF9TZXRCYXNlKFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBYTUxfQ2hhciAqYmFzZSk7CisKK1hNTFBBUlNFQVBJKGNvbnN0IFhNTF9DaGFyICopCitYTUxfR2V0QmFzZShYTUxfUGFyc2VyIHBhcnNlcik7CisKKy8qIFJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgYXR0cmlidXRlL3ZhbHVlIHBhaXJzIHBhc3NlZCBpbiBsYXN0IGNhbGwKKyAgIHRvIHRoZSBYTUxfU3RhcnRFbGVtZW50SGFuZGxlciB0aGF0IHdlcmUgc3BlY2lmaWVkIGluIHRoZSBzdGFydC10YWcKKyAgIHJhdGhlciB0aGFuIGRlZmF1bHRlZC4gRWFjaCBhdHRyaWJ1dGUvdmFsdWUgcGFpciBjb3VudHMgYXMgMjsgdGh1cworICAgdGhpcyBjb3JyZXNwb25kZHMgdG8gYW4gaW5kZXggaW50byB0aGUgYXR0cyBhcnJheSBwYXNzZWQgdG8gdGhlCisgICBYTUxfU3RhcnRFbGVtZW50SGFuZGxlci4KKyovCitYTUxQQVJTRUFQSShpbnQpCitYTUxfR2V0U3BlY2lmaWVkQXR0cmlidXRlQ291bnQoWE1MX1BhcnNlciBwYXJzZXIpOworCisvKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgSUQgYXR0cmlidXRlIHBhc3NlZCBpbiB0aGUgbGFzdCBjYWxsIHRvCisgICBYTUxfU3RhcnRFbGVtZW50SGFuZGxlciwgb3IgLTEgaWYgdGhlcmUgaXMgbm8gSUQgYXR0cmlidXRlLiAgRWFjaAorICAgYXR0cmlidXRlL3ZhbHVlIHBhaXIgY291bnRzIGFzIDI7IHRodXMgdGhpcyBjb3JyZXNwb25kZHMgdG8gYW4KKyAgIGluZGV4IGludG8gdGhlIGF0dHMgYXJyYXkgcGFzc2VkIHRvIHRoZSBYTUxfU3RhcnRFbGVtZW50SGFuZGxlci4KKyovCitYTUxQQVJTRUFQSShpbnQpCitYTUxfR2V0SWRBdHRyaWJ1dGVJbmRleChYTUxfUGFyc2VyIHBhcnNlcik7CisKKy8qIFBhcnNlcyBzb21lIGlucHV0LiBSZXR1cm5zIFhNTF9TVEFUVVNfRVJST1IgaWYgYSBmYXRhbCBlcnJvciBpcworICAgZGV0ZWN0ZWQuICBUaGUgbGFzdCBjYWxsIHRvIFhNTF9QYXJzZSBtdXN0IGhhdmUgaXNGaW5hbCB0cnVlOyBsZW4KKyAgIG1heSBiZSB6ZXJvIGZvciB0aGlzIGNhbGwgKG9yIGFueSBvdGhlcikuCisKKyAgIFRob3VnaCB0aGUgcmV0dXJuIHZhbHVlcyBmb3IgdGhlc2UgZnVuY3Rpb25zIGhhcyBhbHdheXMgYmVlbgorICAgZGVzY3JpYmVkIGFzIGEgQm9vbGVhbiB2YWx1ZSwgdGhlIGltcGxlbWVudGF0aW9uLCBhdCBsZWFzdCBmb3IgdGhlCisgICAxLjk1Lnggc2VyaWVzLCBoYXMgYWx3YXlzIHJldHVybmVkIGV4YWN0bHkgb25lIG9mIHRoZSBYTUxfU3RhdHVzCisgICB2YWx1ZXMuCisqLworWE1MUEFSU0VBUEkoZW51bSBYTUxfU3RhdHVzKQorWE1MX1BhcnNlKFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBjaGFyICpzLCBpbnQgbGVuLCBpbnQgaXNGaW5hbCk7CisKK1hNTFBBUlNFQVBJKHZvaWQgKikKK1hNTF9HZXRCdWZmZXIoWE1MX1BhcnNlciBwYXJzZXIsIGludCBsZW4pOworCitYTUxQQVJTRUFQSShlbnVtIFhNTF9TdGF0dXMpCitYTUxfUGFyc2VCdWZmZXIoWE1MX1BhcnNlciBwYXJzZXIsIGludCBsZW4sIGludCBpc0ZpbmFsKTsKKworLyogU3RvcHMgcGFyc2luZywgY2F1c2luZyBYTUxfUGFyc2UoKSBvciBYTUxfUGFyc2VCdWZmZXIoKSB0byByZXR1cm4uCisgICBNdXN0IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhIGNhbGwtYmFjayBoYW5kbGVyLCBleGNlcHQgd2hlbiBhYm9ydGluZworICAgKHJlc3VtYWJsZSA9IDApIGFuIGFscmVhZHkgc3VzcGVuZGVkIHBhcnNlci4gU29tZSBjYWxsLWJhY2tzIG1heQorICAgc3RpbGwgZm9sbG93IGJlY2F1c2UgdGhleSB3b3VsZCBvdGhlcndpc2UgZ2V0IGxvc3QuIEV4YW1wbGVzOgorICAgLSBlbmRFbGVtZW50SGFuZGxlcigpIGZvciBlbXB0eSBlbGVtZW50cyB3aGVuIHN0b3BwZWQgaW4KKyAgICAgc3RhcnRFbGVtZW50SGFuZGxlcigpLCAKKyAgIC0gZW5kTmFtZVNwYWNlRGVjbEhhbmRsZXIoKSB3aGVuIHN0b3BwZWQgaW4gZW5kRWxlbWVudEhhbmRsZXIoKSwgCisgICBhbmQgcG9zc2libHkgb3RoZXJzLgorCisgICBDYW4gYmUgY2FsbGVkIGZyb20gbW9zdCBoYW5kbGVycywgaW5jbHVkaW5nIERURCByZWxhdGVkIGNhbGwtYmFja3MsCisgICBleGNlcHQgd2hlbiBwYXJzaW5nIGFuIGV4dGVybmFsIHBhcmFtZXRlciBlbnRpdHkgYW5kIHJlc3VtYWJsZSAhPSAwLgorICAgUmV0dXJucyBYTUxfU1RBVFVTX09LIHdoZW4gc3VjY2Vzc2Z1bCwgWE1MX1NUQVRVU19FUlJPUiBvdGhlcndpc2UuCisgICBQb3NzaWJsZSBlcnJvciBjb2RlczogCisgICAtIFhNTF9FUlJPUl9TVVNQRU5ERUQ6IHdoZW4gc3VzcGVuZGluZyBhbiBhbHJlYWR5IHN1c3BlbmRlZCBwYXJzZXIuCisgICAtIFhNTF9FUlJPUl9GSU5JU0hFRDogd2hlbiB0aGUgcGFyc2VyIGhhcyBhbHJlYWR5IGZpbmlzaGVkLgorICAgLSBYTUxfRVJST1JfU1VTUEVORF9QRTogd2hlbiBzdXNwZW5kaW5nIHdoaWxlIHBhcnNpbmcgYW4gZXh0ZXJuYWwgUEUuCisKKyAgIFdoZW4gcmVzdW1hYmxlICE9IDAgKHRydWUpIHRoZW4gcGFyc2luZyBpcyBzdXNwZW5kZWQsIHRoYXQgaXMsIAorICAgWE1MX1BhcnNlKCkgYW5kIFhNTF9QYXJzZUJ1ZmZlcigpIHJldHVybiBYTUxfU1RBVFVTX1NVU1BFTkRFRC4gCisgICBPdGhlcndpc2UsIHBhcnNpbmcgaXMgYWJvcnRlZCwgdGhhdCBpcywgWE1MX1BhcnNlKCkgYW5kIFhNTF9QYXJzZUJ1ZmZlcigpCisgICByZXR1cm4gWE1MX1NUQVRVU19FUlJPUiB3aXRoIGVycm9yIGNvZGUgWE1MX0VSUk9SX0FCT1JURUQuCisKKyAgICpOb3RlKjoKKyAgIFRoaXMgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBjdXJyZW50IHBhcnNlciBpbnN0YW5jZSBvbmx5LCB0aGF0IGlzLCBpZgorICAgdGhlcmUgaXMgYSBwYXJlbnQgcGFyc2VyIHRoZW4gaXQgd2lsbCBjb250aW51ZSBwYXJzaW5nIHdoZW4gdGhlCisgICBleHRlcm5hbEVudGl0eVJlZkhhbmRsZXIoKSByZXR1cm5zLiBJdCBpcyB1cCB0byB0aGUgaW1wbGVtZW50YXRpb24gb2YKKyAgIHRoZSBleHRlcm5hbEVudGl0eVJlZkhhbmRsZXIoKSB0byBjYWxsIFhNTF9TdG9wUGFyc2VyKCkgb24gdGhlIHBhcmVudAorICAgcGFyc2VyIChyZWN1cnNpdmVseSksIGlmIG9uZSB3YW50cyB0byBzdG9wIHBhcnNpbmcgYWx0b2dldGhlci4KKworICAgV2hlbiBzdXNwZW5kZWQsIHBhcnNpbmcgY2FuIGJlIHJlc3VtZWQgYnkgY2FsbGluZyBYTUxfUmVzdW1lUGFyc2VyKCkuIAorKi8KK1hNTFBBUlNFQVBJKGVudW0gWE1MX1N0YXR1cykKK1hNTF9TdG9wUGFyc2VyKFhNTF9QYXJzZXIgcGFyc2VyLCBYTUxfQm9vbCByZXN1bWFibGUpOworCisvKiBSZXN1bWVzIHBhcnNpbmcgYWZ0ZXIgaXQgaGFzIGJlZW4gc3VzcGVuZGVkIHdpdGggWE1MX1N0b3BQYXJzZXIoKS4KKyAgIE11c3Qgbm90IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhIGhhbmRsZXIgY2FsbC1iYWNrLiBSZXR1cm5zIHNhbWUKKyAgIHN0YXR1cyBjb2RlcyBhcyBYTUxfUGFyc2UoKSBvciBYTUxfUGFyc2VCdWZmZXIoKS4KKyAgIEFkZGl0aW9uYWwgZXJyb3IgY29kZSBYTUxfRVJST1JfTk9UX1NVU1BFTkRFRCBwb3NzaWJsZS4gICAKKworICAgKk5vdGUqOgorICAgVGhpcyBtdXN0IGJlIGNhbGxlZCBvbiB0aGUgbW9zdCBkZWVwbHkgbmVzdGVkIGNoaWxkIHBhcnNlciBpbnN0YW5jZQorICAgZmlyc3QsIGFuZCBvbiBpdHMgcGFyZW50IHBhcnNlciBvbmx5IGFmdGVyIHRoZSBjaGlsZCBwYXJzZXIgaGFzIGZpbmlzaGVkLAorICAgdG8gYmUgYXBwbGllZCByZWN1cnNpdmVseSB1bnRpbCB0aGUgZG9jdW1lbnQgZW50aXR5J3MgcGFyc2VyIGlzIHJlc3RhcnRlZC4KKyAgIFRoYXQgaXMsIHRoZSBwYXJlbnQgcGFyc2VyIHdpbGwgbm90IHJlc3VtZSBieSBpdHNlbGYgYW5kIGl0IGlzIHVwIHRvIHRoZQorICAgYXBwbGljYXRpb24gdG8gY2FsbCBYTUxfUmVzdW1lUGFyc2VyKCkgb24gaXQgYXQgdGhlIGFwcHJvcHJpYXRlIG1vbWVudC4KKyovCitYTUxQQVJTRUFQSShlbnVtIFhNTF9TdGF0dXMpCitYTUxfUmVzdW1lUGFyc2VyKFhNTF9QYXJzZXIgcGFyc2VyKTsKKworZW51bSBYTUxfUGFyc2luZyB7CisgIFhNTF9JTklUSUFMSVpFRCwKKyAgWE1MX1BBUlNJTkcsCisgIFhNTF9GSU5JU0hFRCwKKyAgWE1MX1NVU1BFTkRFRAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBlbnVtIFhNTF9QYXJzaW5nIHBhcnNpbmc7CisgIFhNTF9Cb29sIGZpbmFsQnVmZmVyOworfSBYTUxfUGFyc2luZ1N0YXR1czsKKworLyogUmV0dXJucyBzdGF0dXMgb2YgcGFyc2VyIHdpdGggcmVzcGVjdCB0byBiZWluZyBpbml0aWFsaXplZCwgcGFyc2luZywKKyAgIGZpbmlzaGVkLCBvciBzdXNwZW5kZWQgYW5kIHByb2Nlc3NpbmcgdGhlIGZpbmFsIGJ1ZmZlci4KKyAgIFhYWCBYTUxfUGFyc2UoKSBhbmQgWE1MX1BhcnNlQnVmZmVyKCkgc2hvdWxkIHJldHVybiBYTUxfUGFyc2luZ1N0YXR1cywKKyAgIFhYWCB3aXRoIFhNTF9GSU5JU0hFRF9PSyBvciBYTUxfRklOSVNIRURfRVJST1IgcmVwbGFjaW5nIFhNTF9GSU5JU0hFRAorKi8KK1hNTFBBUlNFQVBJKHZvaWQpCitYTUxfR2V0UGFyc2luZ1N0YXR1cyhYTUxfUGFyc2VyIHBhcnNlciwgWE1MX1BhcnNpbmdTdGF0dXMgKnN0YXR1cyk7CisKKy8qIENyZWF0ZXMgYW4gWE1MX1BhcnNlciBvYmplY3QgdGhhdCBjYW4gcGFyc2UgYW4gZXh0ZXJuYWwgZ2VuZXJhbAorICAgZW50aXR5OyBjb250ZXh0IGlzIGEgJ1wwJy10ZXJtaW5hdGVkIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBwYXJzZQorICAgY29udGV4dDsgZW5jb2RpbmcgaXMgYSAnXDAnLXRlcm1pbmF0ZWQgc3RyaW5nIGdpdmluZyB0aGUgbmFtZSBvZgorICAgdGhlIGV4dGVybmFsbHkgc3BlY2lmaWVkIGVuY29kaW5nLCBvciBOVUxMIGlmIHRoZXJlIGlzIG5vCisgICBleHRlcm5hbGx5IHNwZWNpZmllZCBlbmNvZGluZy4gIFRoZSBjb250ZXh0IHN0cmluZyBjb25zaXN0cyBvZiBhCisgICBzZXF1ZW5jZSBvZiB0b2tlbnMgc2VwYXJhdGVkIGJ5IGZvcm1mZWVkcyAoXGYpOyBhIHRva2VuIGNvbnNpc3RpbmcKKyAgIG9mIGEgbmFtZSBzcGVjaWZpZXMgdGhhdCB0aGUgZ2VuZXJhbCBlbnRpdHkgb2YgdGhlIG5hbWUgaXMgb3BlbjsgYQorICAgdG9rZW4gb2YgdGhlIGZvcm0gcHJlZml4PXVyaSBzcGVjaWZpZXMgdGhlIG5hbWVzcGFjZSBmb3IgYQorICAgcGFydGljdWxhciBwcmVmaXg7IGEgdG9rZW4gb2YgdGhlIGZvcm0gPXVyaSBzcGVjaWZpZXMgdGhlIGRlZmF1bHQKKyAgIG5hbWVzcGFjZS4gIFRoaXMgY2FuIGJlIGNhbGxlZCBhdCBhbnkgcG9pbnQgYWZ0ZXIgdGhlIGZpcnN0IGNhbGwgdG8KKyAgIGFuIEV4dGVybmFsRW50aXR5UmVmSGFuZGxlciBzbyBsb25nZXIgYXMgdGhlIHBhcnNlciBoYXMgbm90IHlldAorICAgYmVlbiBmcmVlZC4gIFRoZSBuZXcgcGFyc2VyIGlzIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQgYW5kIG1heQorICAgc2FmZWx5IGJlIHVzZWQgaW4gYSBzZXBhcmF0ZSB0aHJlYWQuICBUaGUgaGFuZGxlcnMgYW5kIHVzZXJEYXRhIGFyZQorICAgaW5pdGlhbGl6ZWQgZnJvbSB0aGUgcGFyc2VyIGFyZ3VtZW50LiAgUmV0dXJucyBOVUxMIGlmIG91dCBvZiBtZW1vcnkuCisgICBPdGhlcndpc2UgcmV0dXJucyBhIG5ldyBYTUxfUGFyc2VyIG9iamVjdC4KKyovCitYTUxQQVJTRUFQSShYTUxfUGFyc2VyKQorWE1MX0V4dGVybmFsRW50aXR5UGFyc2VyQ3JlYXRlKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICplbmNvZGluZyk7CisKK2VudW0gWE1MX1BhcmFtRW50aXR5UGFyc2luZyB7CisgIFhNTF9QQVJBTV9FTlRJVFlfUEFSU0lOR19ORVZFUiwKKyAgWE1MX1BBUkFNX0VOVElUWV9QQVJTSU5HX1VOTEVTU19TVEFOREFMT05FLAorICBYTUxfUEFSQU1fRU5USVRZX1BBUlNJTkdfQUxXQVlTCit9OworCisvKiBDb250cm9scyBwYXJzaW5nIG9mIHBhcmFtZXRlciBlbnRpdGllcyAoaW5jbHVkaW5nIHRoZSBleHRlcm5hbCBEVEQKKyAgIHN1YnNldCkuIElmIHBhcnNpbmcgb2YgcGFyYW1ldGVyIGVudGl0aWVzIGlzIGVuYWJsZWQsIHRoZW4KKyAgIHJlZmVyZW5jZXMgdG8gZXh0ZXJuYWwgcGFyYW1ldGVyIGVudGl0aWVzIChpbmNsdWRpbmcgdGhlIGV4dGVybmFsCisgICBEVEQgc3Vic2V0KSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBzZXQgd2l0aAorICAgWE1MX1NldEV4dGVybmFsRW50aXR5UmVmSGFuZGxlci4gIFRoZSBjb250ZXh0IHBhc3NlZCB3aWxsIGJlIDAuCisKKyAgIFVubGlrZSBleHRlcm5hbCBnZW5lcmFsIGVudGl0aWVzLCBleHRlcm5hbCBwYXJhbWV0ZXIgZW50aXRpZXMgY2FuCisgICBvbmx5IGJlIHBhcnNlZCBzeW5jaHJvbm91c2x5LiAgSWYgdGhlIGV4dGVybmFsIHBhcmFtZXRlciBlbnRpdHkgaXMKKyAgIHRvIGJlIHBhcnNlZCwgaXQgbXVzdCBiZSBwYXJzZWQgZHVyaW5nIHRoZSBjYWxsIHRvIHRoZSBleHRlcm5hbAorICAgZW50aXR5IHJlZiBoYW5kbGVyOiB0aGUgY29tcGxldGUgc2VxdWVuY2Ugb2YKKyAgIFhNTF9FeHRlcm5hbEVudGl0eVBhcnNlckNyZWF0ZSwgWE1MX1BhcnNlL1hNTF9QYXJzZUJ1ZmZlciBhbmQKKyAgIFhNTF9QYXJzZXJGcmVlIGNhbGxzIG11c3QgYmUgbWFkZSBkdXJpbmcgdGhpcyBjYWxsLiAgQWZ0ZXIKKyAgIFhNTF9FeHRlcm5hbEVudGl0eVBhcnNlckNyZWF0ZSBoYXMgYmVlbiBjYWxsZWQgdG8gY3JlYXRlIHRoZSBwYXJzZXIKKyAgIGZvciB0aGUgZXh0ZXJuYWwgcGFyYW1ldGVyIGVudGl0eSAoY29udGV4dCBtdXN0IGJlIDAgZm9yIHRoaXMKKyAgIGNhbGwpLCBpdCBpcyBpbGxlZ2FsIHRvIG1ha2UgYW55IGNhbGxzIG9uIHRoZSBvbGQgcGFyc2VyIHVudGlsCisgICBYTUxfUGFyc2VyRnJlZSBoYXMgYmVlbiBjYWxsZWQgb24gdGhlIG5ld2x5IGNyZWF0ZWQgcGFyc2VyLgorICAgSWYgdGhlIGxpYnJhcnkgaGFzIGJlZW4gY29tcGlsZWQgd2l0aG91dCBzdXBwb3J0IGZvciBwYXJhbWV0ZXIKKyAgIGVudGl0eSBwYXJzaW5nIChpZSB3aXRob3V0IFhNTF9EVEQgYmVpbmcgZGVmaW5lZCksIHRoZW4KKyAgIFhNTF9TZXRQYXJhbUVudGl0eVBhcnNpbmcgd2lsbCByZXR1cm4gMCBpZiBwYXJzaW5nIG9mIHBhcmFtZXRlcgorICAgZW50aXRpZXMgaXMgcmVxdWVzdGVkOyBvdGhlcndpc2UgaXQgd2lsbCByZXR1cm4gbm9uLXplcm8uCisgICBOb3RlOiBJZiBYTUxfU2V0UGFyYW1FbnRpdHlQYXJzaW5nIGlzIGNhbGxlZCBhZnRlciBYTUxfUGFyc2Ugb3IKKyAgICAgIFhNTF9QYXJzZUJ1ZmZlciwgdGhlbiBpdCBoYXMgbm8gZWZmZWN0IGFuZCB3aWxsIGFsd2F5cyByZXR1cm4gMC4KKyovCitYTUxQQVJTRUFQSShpbnQpCitYTUxfU2V0UGFyYW1FbnRpdHlQYXJzaW5nKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIFhNTF9QYXJhbUVudGl0eVBhcnNpbmcgcGFyc2luZyk7CisKKy8qIElmIFhNTF9QYXJzZSBvciBYTUxfUGFyc2VCdWZmZXIgaGF2ZSByZXR1cm5lZCBYTUxfU1RBVFVTX0VSUk9SLCB0aGVuCisgICBYTUxfR2V0RXJyb3JDb2RlIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVycm9yLgorKi8KK1hNTFBBUlNFQVBJKGVudW0gWE1MX0Vycm9yKQorWE1MX0dldEVycm9yQ29kZShYTUxfUGFyc2VyIHBhcnNlcik7CisKKy8qIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgcGFyc2UKKyAgIGxvY2F0aW9uLiAgVGhleSBtYXkgYmUgY2FsbGVkIGZyb20gYW55IGNhbGxiYWNrIGNhbGxlZCB0byByZXBvcnQKKyAgIHNvbWUgcGFyc2UgZXZlbnQ7IGluIHRoaXMgY2FzZSB0aGUgbG9jYXRpb24gaXMgdGhlIGxvY2F0aW9uIG9mIHRoZQorICAgZmlyc3Qgb2YgdGhlIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgdGhhdCBnZW5lcmF0ZWQgdGhlIGV2ZW50LiAgV2hlbgorICAgY2FsbGVkIGZyb20gY2FsbGJhY2tzIGdlbmVyYXRlZCBieSBkZWNsYXJhdGlvbnMgaW4gdGhlIGRvY3VtZW50CisgICBwcm9sb2d1ZSwgdGhlIGxvY2F0aW9uIGlkZW50aWZpZWQgaXNuJ3QgYXMgbmVhdGx5IGRlZmluZWQsIGJ1dCB3aWxsCisgICBiZSB3aXRoaW4gdGhlIHJlbGV2YW50IG1hcmt1cC4gIFdoZW4gY2FsbGVkIG91dHNpZGUgb2YgdGhlIGNhbGxiYWNrCisgICBmdW5jdGlvbnMsIHRoZSBwb3NpdGlvbiBpbmRpY2F0ZWQgd2lsbCBiZSBqdXN0IHBhc3QgdGhlIGxhc3QgcGFyc2UKKyAgIGV2ZW50IChyZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlcmUgd2FzIGFuIGFzc29jaWF0ZWQgY2FsbGJhY2spLgorICAgCisgICBUaGV5IG1heSBhbHNvIGJlIGNhbGxlZCBhZnRlciByZXR1cm5pbmcgZnJvbSBhIGNhbGwgdG8gWE1MX1BhcnNlCisgICBvciBYTUxfUGFyc2VCdWZmZXIuICBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIFhNTF9TVEFUVVNfRVJST1IgdGhlbgorICAgdGhlIGxvY2F0aW9uIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2hhcmFjdGVyIGF0IHdoaWNoIHRoZSBlcnJvcgorICAgd2FzIGRldGVjdGVkOyBvdGhlcndpc2UgdGhlIGxvY2F0aW9uIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgbGFzdAorICAgcGFyc2UgZXZlbnQsIGFzIGRlc2NyaWJlZCBhYm92ZS4KKyovCitYTUxQQVJTRUFQSShYTUxfU2l6ZSkgWE1MX0dldEN1cnJlbnRMaW5lTnVtYmVyKFhNTF9QYXJzZXIgcGFyc2VyKTsKK1hNTFBBUlNFQVBJKFhNTF9TaXplKSBYTUxfR2V0Q3VycmVudENvbHVtbk51bWJlcihYTUxfUGFyc2VyIHBhcnNlcik7CitYTUxQQVJTRUFQSShYTUxfSW5kZXgpIFhNTF9HZXRDdXJyZW50Qnl0ZUluZGV4KFhNTF9QYXJzZXIgcGFyc2VyKTsKKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGN1cnJlbnQgZXZlbnQuCisgICBSZXR1cm5zIDAgaWYgdGhlIGV2ZW50IGlzIGluIGFuIGludGVybmFsIGVudGl0eS4KKyovCitYTUxQQVJTRUFQSShpbnQpCitYTUxfR2V0Q3VycmVudEJ5dGVDb3VudChYTUxfUGFyc2VyIHBhcnNlcik7CisKKy8qIElmIFhNTF9DT05URVhUX0JZVEVTIGlzIGRlZmluZWQsIHJldHVybnMgdGhlIGlucHV0IGJ1ZmZlciwgc2V0cworICAgdGhlIGludGVnZXIgcG9pbnRlZCB0byBieSBvZmZzZXQgdG8gdGhlIG9mZnNldCB3aXRoaW4gdGhpcyBidWZmZXIKKyAgIG9mIHRoZSBjdXJyZW50IHBhcnNlIHBvc2l0aW9uLCBhbmQgc2V0cyB0aGUgaW50ZWdlciBwb2ludGVkIHRvIGJ5IHNpemUKKyAgIHRvIHRoZSBzaXplIG9mIHRoaXMgYnVmZmVyICh0aGUgbnVtYmVyIG9mIGlucHV0IGJ5dGVzKS4gT3RoZXJ3aXNlCisgICByZXR1cm5zIGEgTlVMTCBwb2ludGVyLiBBbHNvIHJldHVybnMgYSBOVUxMIHBvaW50ZXIgaWYgYSBwYXJzZSBpc24ndAorICAgYWN0aXZlLgorCisgICBOT1RFOiBUaGUgY2hhcmFjdGVyIHBvaW50ZXIgcmV0dXJuZWQgc2hvdWxkIG5vdCBiZSB1c2VkIG91dHNpZGUKKyAgIHRoZSBoYW5kbGVyIHRoYXQgbWFrZXMgdGhlIGNhbGwuCisqLworWE1MUEFSU0VBUEkoY29uc3QgY2hhciAqKQorWE1MX0dldElucHV0Q29udGV4dChYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgaW50ICpvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIGludCAqc2l6ZSk7CisKKy8qIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHByZXZpb3VzIHZlcnNpb25zLiAqLworI2RlZmluZSBYTUxfR2V0RXJyb3JMaW5lTnVtYmVyICAgWE1MX0dldEN1cnJlbnRMaW5lTnVtYmVyCisjZGVmaW5lIFhNTF9HZXRFcnJvckNvbHVtbk51bWJlciBYTUxfR2V0Q3VycmVudENvbHVtbk51bWJlcgorI2RlZmluZSBYTUxfR2V0RXJyb3JCeXRlSW5kZXggICAgWE1MX0dldEN1cnJlbnRCeXRlSW5kZXgKKworLyogRnJlZXMgdGhlIGNvbnRlbnQgbW9kZWwgcGFzc2VkIHRvIHRoZSBlbGVtZW50IGRlY2xhcmF0aW9uIGhhbmRsZXIgKi8KK1hNTFBBUlNFQVBJKHZvaWQpCitYTUxfRnJlZUNvbnRlbnRNb2RlbChYTUxfUGFyc2VyIHBhcnNlciwgWE1MX0NvbnRlbnQgKm1vZGVsKTsKKworLyogRXhwb3NpbmcgdGhlIG1lbW9yeSBoYW5kbGluZyBmdW5jdGlvbnMgdXNlZCBpbiBFeHBhdCAqLworWE1MUEFSU0VBUEkodm9pZCAqKQorWE1MX01lbU1hbGxvYyhYTUxfUGFyc2VyIHBhcnNlciwgc2l6ZV90IHNpemUpOworCitYTUxQQVJTRUFQSSh2b2lkICopCitYTUxfTWVtUmVhbGxvYyhYTUxfUGFyc2VyIHBhcnNlciwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CisKK1hNTFBBUlNFQVBJKHZvaWQpCitYTUxfTWVtRnJlZShYTUxfUGFyc2VyIHBhcnNlciwgdm9pZCAqcHRyKTsKKworLyogRnJlZXMgbWVtb3J5IHVzZWQgYnkgdGhlIHBhcnNlci4gKi8KK1hNTFBBUlNFQVBJKHZvaWQpCitYTUxfUGFyc2VyRnJlZShYTUxfUGFyc2VyIHBhcnNlcik7CisKKy8qIFJldHVybnMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZXJyb3IuICovCitYTUxQQVJTRUFQSShjb25zdCBYTUxfTENoYXIgKikKK1hNTF9FcnJvclN0cmluZyhlbnVtIFhNTF9FcnJvciBjb2RlKTsKKworLyogUmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgZXhwYXQgKi8KK1hNTFBBUlNFQVBJKGNvbnN0IFhNTF9MQ2hhciAqKQorWE1MX0V4cGF0VmVyc2lvbih2b2lkKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBpbnQgbWFqb3I7CisgIGludCBtaW5vcjsKKyAgaW50IG1pY3JvOworfSBYTUxfRXhwYXRfVmVyc2lvbjsKKworLyogUmV0dXJuIGFuIFhNTF9FeHBhdF9WZXJzaW9uIHN0cnVjdHVyZSBjb250YWluaW5nIG51bWVyaWMgdmVyc2lvbgorICAgbnVtYmVyIGluZm9ybWF0aW9uIGZvciB0aGlzIHZlcnNpb24gb2YgZXhwYXQuCisqLworWE1MUEFSU0VBUEkoWE1MX0V4cGF0X1ZlcnNpb24pCitYTUxfRXhwYXRWZXJzaW9uSW5mbyh2b2lkKTsKKworLyogQWRkZWQgaW4gRXhwYXQgMS45NS41LiAqLworZW51bSBYTUxfRmVhdHVyZUVudW0geworICBYTUxfRkVBVFVSRV9FTkQgPSAwLAorICBYTUxfRkVBVFVSRV9VTklDT0RFLAorICBYTUxfRkVBVFVSRV9VTklDT0RFX1dDSEFSX1QsCisgIFhNTF9GRUFUVVJFX0RURCwKKyAgWE1MX0ZFQVRVUkVfQ09OVEVYVF9CWVRFUywKKyAgWE1MX0ZFQVRVUkVfTUlOX1NJWkUsCisgIFhNTF9GRUFUVVJFX1NJWkVPRl9YTUxfQ0hBUiwKKyAgWE1MX0ZFQVRVUkVfU0laRU9GX1hNTF9MQ0hBUiwKKyAgWE1MX0ZFQVRVUkVfTlMsCisgIFhNTF9GRUFUVVJFX0xBUkdFX1NJWkUKKyAgLyogQWRkaXRpb25hbCBmZWF0dXJlcyBtdXN0IGJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhpcyBlbnVtLiAqLworfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBlbnVtIFhNTF9GZWF0dXJlRW51bSAgZmVhdHVyZTsKKyAgY29uc3QgWE1MX0xDaGFyICAgICAgICpuYW1lOworICBsb25nIGludCAgICAgICAgICAgICAgdmFsdWU7Cit9IFhNTF9GZWF0dXJlOworCitYTUxQQVJTRUFQSShjb25zdCBYTUxfRmVhdHVyZSAqKQorWE1MX0dldEZlYXR1cmVMaXN0KHZvaWQpOworCisKKy8qIEV4cGF0IGZvbGxvd3MgdGhlIEdOVS9MaW51eCBjb252ZW50aW9uIG9mIG9kZCBudW1iZXIgbWlub3IgdmVyc2lvbiBmb3IKKyAgIGJldGEvZGV2ZWxvcG1lbnQgcmVsZWFzZXMgYW5kIGV2ZW4gbnVtYmVyIG1pbm9yIHZlcnNpb24gZm9yIHN0YWJsZQorICAgcmVsZWFzZXMuIE1pY3JvIGlzIGJ1bXBlZCB3aXRoIGVhY2ggcmVsZWFzZSwgYW5kIHNldCB0byAwIHdpdGggZWFjaAorICAgY2hhbmdlIHRvIG1ham9yIG9yIG1pbm9yIHZlcnNpb24uCisqLworI2RlZmluZSBYTUxfTUFKT1JfVkVSU0lPTiAyCisjZGVmaW5lIFhNTF9NSU5PUl9WRVJTSU9OIDAKKyNkZWZpbmUgWE1MX01JQ1JPX1ZFUlNJT04gMQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogbm90IEV4cGF0X0lOQ0xVREVEICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2V4cGF0X2V4dGVybmFsLmggYi9pbmNsdWRlL2V4cGF0X2V4dGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMwMzI4NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZXhwYXRfZXh0ZXJuYWwuaApAQCAtMCwwICsxLDExNSBAQAorLyogQ29weXJpZ2h0IChjKSAxOTk4LCAxOTk5LCAyMDAwIFRoYWkgT3BlbiBTb3VyY2UgU29mdHdhcmUgQ2VudGVyIEx0ZAorICAgU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIGNvcHlpbmcgcGVybWlzc2lvbi4KKyovCisKKyNpZm5kZWYgRXhwYXRfRXh0ZXJuYWxfSU5DTFVERUQKKyNkZWZpbmUgRXhwYXRfRXh0ZXJuYWxfSU5DTFVERUQgMQorCisvKiBFeHRlcm5hbCBBUEkgZGVmaW5pdGlvbnMgKi8KKworI2lmIGRlZmluZWQoX01TQ19FWFRFTlNJT05TKSAmJiAhZGVmaW5lZChfX0JFT1NfXykgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKKyNkZWZpbmUgWE1MX1VTRV9NU0NfRVhURU5TSU9OUyAxCisjZW5kaWYKKworLyogRXhwYXQgdHJpZXMgdmVyeSBoYXJkIHRvIG1ha2UgdGhlIEFQSSBib3VuZGFyeSB2ZXJ5IHNwZWNpZmljYWxseQorICAgZGVmaW5lZC4gIFRoZXJlIGFyZSB0d28gbWFjcm9zIGRlZmluZWQgdG8gY29udHJvbCB0aGlzIGJvdW5kYXJ5OworICAgZWFjaCBvZiB0aGVzZSBjYW4gYmUgZGVmaW5lZCBiZWZvcmUgaW5jbHVkaW5nIHRoaXMgaGVhZGVyIHRvCisgICBhY2hpZXZlIHNvbWUgZGlmZmVyZW50IGJlaGF2aW9yLCBidXQgZG9pbmcgc28gaXQgbm90IHJlY29tbWVuZGVkIG9yCisgICB0ZXN0ZWQgZnJlcXVlbnRseS4KKworICAgWE1MQ0FMTCAgICAtIFRoZSBjYWxsaW5nIGNvbnZlbnRpb24gdG8gdXNlIGZvciBhbGwgY2FsbHMgYWNyb3NzIHRoZQorICAgICAgICAgICAgICAgICJsaWJyYXJ5IGJvdW5kYXJ5LiIgIFRoaXMgd2lsbCBkZWZhdWx0IHRvIGNkZWNsLCBhbmQKKyAgICAgICAgICAgICAgICB0cnkgcmVhbGx5IGhhcmQgdG8gdGVsbCB0aGUgY29tcGlsZXIgdGhhdCdzIHdoYXQgd2UKKyAgICAgICAgICAgICAgICB3YW50LgorCisgICBYTUxJTVBPUlQgIC0gV2hhdGV2ZXIgbWFnaWMgaXMgbmVlZGVkIHRvIG5vdGUgdGhhdCBhIGZ1bmN0aW9uIGlzCisgICAgICAgICAgICAgICAgdG8gYmUgaW1wb3J0ZWQgZnJvbSBhIGR5bmFtaWNhbGx5IGxvYWRlZCBsaWJyYXJ5CisgICAgICAgICAgICAgICAgKC5kbGwsIC5zbywgb3IgLnNsLCBkZXBlbmRpbmcgb24geW91ciBwbGF0Zm9ybSkuCisKKyAgIFRoZSBYTUxDQUxMIG1hY3JvIHdhcyBhZGRlZCBpbiBFeHBhdCAxLjk1LjcuICBUaGUgb25seSBvbmUgd2hpY2ggaXMKKyAgIGV4cGVjdGVkIHRvIGJlIGRpcmVjdGx5IHVzZWZ1bCBpbiBjbGllbnQgY29kZSBpcyBYTUxDQUxMLgorCisgICBOb3RlIHRoYXQgb24gYXQgbGVhc3Qgc29tZSBVbml4IHZlcnNpb25zLCB0aGUgRXhwYXQgbGlicmFyeSBtdXN0IGJlCisgICBjb21waWxlZCB3aXRoIHRoZSBjZGVjbCBjYWxsaW5nIGNvbnZlbnRpb24gYXMgdGhlIGRlZmF1bHQgc2luY2UKKyAgIHN5c3RlbSBoZWFkZXJzIG1heSBhc3N1bWUgdGhlIGNkZWNsIGNvbnZlbnRpb24uCisqLworI2lmbmRlZiBYTUxDQUxMCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgWE1MQ0FMTCBfX2NkZWNsCisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9faTM4NikgJiYgIWRlZmluZWQoX19JTlRFTF9DT01QSUxFUikKKyNkZWZpbmUgWE1MQ0FMTCBfX2F0dHJpYnV0ZV9fKChjZGVjbCkpCisjZWxzZQorLyogRm9yIGFueSBwbGF0Zm9ybSB3aGljaCB1c2VzIHRoaXMgZGVmaW5pdGlvbiBhbmQgc3VwcG9ydHMgbW9yZSB0aGFuCisgICBvbmUgY2FsbGluZyBjb252ZW50aW9uLCB3ZSBuZWVkIHRvIGV4dGVuZCB0aGlzIGRlZmluaXRpb24gdG8KKyAgIGRlY2xhcmUgdGhlIGNvbnZlbnRpb24gdXNlZCBvbiB0aGF0IHBsYXRmb3JtLCBpZiBpdCdzIHBvc3NpYmxlIHRvCisgICBkbyBzby4KKworICAgSWYgdGhpcyBpcyB0aGUgY2FzZSBmb3IgeW91ciBwbGF0Zm9ybSwgcGxlYXNlIGZpbGUgYSBidWcgcmVwb3J0CisgICB3aXRoIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyIHBsYXRmb3JtIHZpYSB0aGUgQworICAgcHJlLXByb2Nlc3NvciBhbmQgaG93IHRvIHNwZWNpZnkgdGhlIHNhbWUgY2FsbGluZyBjb252ZW50aW9uIGFzIHRoZQorICAgcGxhdGZvcm0ncyBtYWxsb2MoKSBpbXBsZW1lbnRhdGlvbi4KKyovCisjZGVmaW5lIFhNTENBTEwKKyNlbmRpZgorI2VuZGlmICAvKiBub3QgZGVmaW5lZCBYTUxDQUxMICovCisKKworI2lmICFkZWZpbmVkKFhNTF9TVEFUSUMpICYmICFkZWZpbmVkKFhNTElNUE9SVCkKKyNpZm5kZWYgWE1MX0JVSUxESU5HX0VYUEFUCisvKiB1c2luZyBFeHBhdCBmcm9tIGFuIGFwcGxpY2F0aW9uICovCisKKyNpZmRlZiBYTUxfVVNFX01TQ19FWFRFTlNJT05TCisjZGVmaW5lIFhNTElNUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyNlbmRpZgorCisjZW5kaWYKKyNlbmRpZiAgLyogbm90IGRlZmluZWQgWE1MX1NUQVRJQyAqLworCisKKy8qIElmIHdlIGRpZG4ndCBkZWZpbmUgaXQgYWJvdmUsIGRlZmluZSBpdCBhd2F5OiAqLworI2lmbmRlZiBYTUxJTVBPUlQKKyNkZWZpbmUgWE1MSU1QT1JUCisjZW5kaWYKKworCisjZGVmaW5lIFhNTFBBUlNFQVBJKHR5cGUpIFhNTElNUE9SVCB0eXBlIFhNTENBTEwKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZkZWYgWE1MX1VOSUNPREVfV0NIQVJfVAorI2RlZmluZSBYTUxfVU5JQ09ERQorI2VuZGlmCisKKyNpZmRlZiBYTUxfVU5JQ09ERSAgICAgLyogSW5mb3JtYXRpb24gaXMgVVRGLTE2IGVuY29kZWQuICovCisjaWZkZWYgWE1MX1VOSUNPREVfV0NIQVJfVAordHlwZWRlZiB3Y2hhcl90IFhNTF9DaGFyOwordHlwZWRlZiB3Y2hhcl90IFhNTF9MQ2hhcjsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFhNTF9DaGFyOwordHlwZWRlZiBjaGFyIFhNTF9MQ2hhcjsKKyNlbmRpZiAvKiBYTUxfVU5JQ09ERV9XQ0hBUl9UICovCisjZWxzZSAgICAgICAgICAgICAgICAgIC8qIEluZm9ybWF0aW9uIGlzIFVURi04IGVuY29kZWQuICovCit0eXBlZGVmIGNoYXIgWE1MX0NoYXI7Cit0eXBlZGVmIGNoYXIgWE1MX0xDaGFyOworI2VuZGlmIC8qIFhNTF9VTklDT0RFICovCisKKyNpZmRlZiBYTUxfTEFSR0VfU0laRSAgLyogVXNlIGxhcmdlIGludGVnZXJzIGZvciBmaWxlL3N0cmVhbSBwb3NpdGlvbnMuICovCisjaWYgZGVmaW5lZChYTUxfVVNFX01TQ19FWFRFTlNJT05TKSAmJiBfTVNDX1ZFUiA8IDE0MDAKK3R5cGVkZWYgX19pbnQ2NCBYTUxfSW5kZXg7IAordHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IFhNTF9TaXplOworI2Vsc2UKK3R5cGVkZWYgbG9uZyBsb25nIFhNTF9JbmRleDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIFhNTF9TaXplOworI2VuZGlmCisjZWxzZQordHlwZWRlZiBsb25nIFhNTF9JbmRleDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBYTUxfU2l6ZTsKKyNlbmRpZiAvKiBYTUxfTEFSR0VfU0laRSAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogbm90IEV4cGF0X0V4dGVybmFsX0lOQ0xVREVEICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYmx0ZGwvbHRfZGxsb2FkZXIuaCBiL2luY2x1ZGUvbGlibHRkbC9sdF9kbGxvYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OWZkMGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpYmx0ZGwvbHRfZGxsb2FkZXIuaApAQCAtMCwwICsxLDkwIEBACisvKiBsdF9kbGxvYWRlci5oIC0tIGR5bmFtaWMgbGlicmFyeSBsb2FkZXIgaW50ZXJmYWNlCisKKyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDA0CisKKyAgIE5PVEU6IFRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRoaXMgZmlsZSBpcyBtYWludGFpbmVkIHdpdGggdGhlCisgICBHTlUgTGlidG9vbCBwYWNrYWdlLiAgUmVwb3J0IGJ1Z3MgdG8gYnVnLWxpYnRvb2xAZ251Lm9yZy4KKworR05VIExpYmx0ZGwgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAoraWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAoraXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCitzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworR05VIExpYmx0ZGwgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIEdOVSBMaWJsdGRsOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIGEKK2NvcHkgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSAgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwuaHRtbCwKK29yIG9idGFpbmVkIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmICFkZWZpbmVkKExUX0RMTE9BREVSX0gpCisjZGVmaW5lIExUX0RMTE9BREVSX0ggMQorCisjaW5jbHVkZSA8bGlibHRkbC9sdF9zeXN0ZW0uaD4KKworTFRfQkVHSU5fQ19ERUNMUworCit0eXBlZGVmCXZvaWQgKglsdF9kbGxvYWRlcjsKK3R5cGVkZWYgdm9pZCAqCWx0X21vZHVsZTsKK3R5cGVkZWYgdm9pZCAqCWx0X3VzZXJfZGF0YTsKK3R5cGVkZWYgc3RydWN0IGx0X19hZHZpc2UgKglsdF9kbGFkdmlzZTsKKworLyogRnVuY3Rpb24gcG9pbnRlciB0eXBlcyBmb3IgbW9kdWxlIGxvYWRlciB2dGFibGUgZW50cmllczogICovCit0eXBlZGVmIGx0X21vZHVsZSAgIGx0X21vZHVsZV9vcGVuCShsdF91c2VyX2RhdGEgZGF0YSwKKwkJCQkJIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCQkgbHRfZGxhZHZpc2UgYWR2aXNlKTsKK3R5cGVkZWYgaW50CSAgICBsdF9tb2R1bGVfY2xvc2UJKGx0X3VzZXJfZGF0YSBkYXRhLAorCQkJCQkgbHRfbW9kdWxlIG1vZHVsZSk7Cit0eXBlZGVmIHZvaWQgKgkgICAgbHRfZmluZF9zeW0JCShsdF91c2VyX2RhdGEgZGF0YSwgbHRfbW9kdWxlIG1vZHVsZSwKKwkJCQkJIGNvbnN0IGNoYXIgKnN5bWJvbG5hbWUpOwordHlwZWRlZiBpbnQJICAgIGx0X2RsbG9hZGVyX2luaXQJKGx0X3VzZXJfZGF0YSBkYXRhKTsKK3R5cGVkZWYgaW50CSAgICBsdF9kbGxvYWRlcl9leGl0CShsdF91c2VyX2RhdGEgZGF0YSk7CisKKy8qIERlZmF1bHQgcHJpb3JpdHkgaXMgTFRfRExMT0FERVJfUFJFUEVORCBpZiBub25lIGlzIGV4cGxpY2l0bHkgZ2l2ZW4uICAqLwordHlwZWRlZiBlbnVtIHsKKyAgTFRfRExMT0FERVJfUFJFUEVORCA9IDAsIExUX0RMTE9BREVSX0FQUEVORAorfSBsdF9kbGxvYWRlcl9wcmlvcml0eTsKKworLyogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyBhIG1vZHVsZSBsb2FkZXIsIGFzIHBvcHVsYXRlZCBieSB0aGUgZ2V0X3Z0YWJsZQorICAgZW50cnkgcG9pbnQgb2YgZWFjaCBsb2FkZXIuICAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICoJCW5hbWU7CisgIGNvbnN0IGNoYXIgKgkJc3ltX3ByZWZpeDsKKyAgbHRfbW9kdWxlX29wZW4gKgltb2R1bGVfb3BlbjsKKyAgbHRfbW9kdWxlX2Nsb3NlICoJbW9kdWxlX2Nsb3NlOworICBsdF9maW5kX3N5bSAqCQlmaW5kX3N5bTsKKyAgbHRfZGxsb2FkZXJfaW5pdCAqCWRsbG9hZGVyX2luaXQ7CisgIGx0X2RsbG9hZGVyX2V4aXQgKglkbGxvYWRlcl9leGl0OworICBsdF91c2VyX2RhdGEJCWRsbG9hZGVyX2RhdGE7CisgIGx0X2RsbG9hZGVyX3ByaW9yaXR5CXByaW9yaXR5OworfSBsdF9kbHZ0YWJsZTsKKworTFRfU0NPUEUgaW50CQlsdF9kbGxvYWRlcl9hZGQJICAgKGNvbnN0IGx0X2RsdnRhYmxlICp2dGFibGUpOworTFRfU0NPUEUgbHRfZGxsb2FkZXIJbHRfZGxsb2FkZXJfbmV4dCAgIChjb25zdCBsdF9kbGxvYWRlciBsb2FkZXIpOworCitMVF9TQ09QRSBsdF9kbHZ0YWJsZSAqCWx0X2RsbG9hZGVyX3JlbW92ZQkoY29uc3QgY2hhciAqbmFtZSk7CitMVF9TQ09QRSBjb25zdCBsdF9kbHZ0YWJsZSAqbHRfZGxsb2FkZXJfZmluZAkoY29uc3QgY2hhciAqbmFtZSk7CitMVF9TQ09QRSBjb25zdCBsdF9kbHZ0YWJsZSAqbHRfZGxsb2FkZXJfZ2V0CShsdF9kbGxvYWRlciBsb2FkZXIpOworCisKKy8qIFR5cGUgb2YgYSBmdW5jdGlvbiB0byBnZXQgYSBsb2FkZXIncyB2dGFibGU6ICAqLwordHlwZWRlZiAgY29uc3QgbHRfZGx2dGFibGUgKmx0X2dldF92dGFibGUJKGx0X3VzZXJfZGF0YSBkYXRhKTsKKworI2lmZGVmIExUX0RFQlVHX0xPQURFUlMKK0xUX1NDT1BFIHZvaWQJCWx0X2RsbG9hZGVyX2R1bXAJKHZvaWQpOworI2VuZGlmCisKK0xUX0VORF9DX0RFQ0xTCisKKyNlbmRpZiAvKiFkZWZpbmVkKExUX0RMTE9BREVSX0gpKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlibHRkbC9sdF9lcnJvci5oIGIvaW5jbHVkZS9saWJsdGRsL2x0X2Vycm9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc4OWIzYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGlibHRkbC9sdF9lcnJvci5oCkBAIC0wLDAgKzEsODUgQEAKKy8qIGx0X2Vycm9yLmggLS0gZXJyb3IgcHJvcG9nYXRpb24gaW50ZXJmYWNlCisKKyAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwNCwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgVGhvbWFzIFRhbm5lciwgMTk5OQorCisgICBOT1RFOiBUaGUgY2Fub25pY2FsIHNvdXJjZSBvZiB0aGlzIGZpbGUgaXMgbWFpbnRhaW5lZCB3aXRoIHRoZQorICAgR05VIExpYnRvb2wgcGFja2FnZS4gIFJlcG9ydCBidWdzIHRvIGJ1Zy1saWJ0b29sQGdudS5vcmcuCisKK0dOVSBMaWJsdGRsIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCit2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK0FzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK2lmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKK2lzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK0dOVSBMaWJsdGRsIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYWxvbmcgd2l0aCBHTlUgTGlibHRkbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCBhCitjb3B5IGNhbiBiZSBkb3dubG9hZGVkIGZyb20gIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9sZ3BsLmh0bWwsCitvciBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKy8qIE9ubHkgaW5jbHVkZSB0aGlzIGhlYWRlciBmaWxlIG9uY2UuICovCisjaWYgIWRlZmluZWQoTFRfRVJST1JfSCkKKyNkZWZpbmUgTFRfRVJST1JfSCAxCisKKyNpbmNsdWRlIDxsaWJsdGRsL2x0X3N5c3RlbS5oPgorCitMVF9CRUdJTl9DX0RFQ0xTCisKKy8qIERlZmluaW5nIGVycm9yIHN0cmluZ3MgYWxvbmdzaWRlIHRoZWlyIHN5bWJvbGljIG5hbWVzIGluIGEgbWFjcm8gaW4KKyAgIHRoaXMgd2F5IGFsbG93cyB1cyB0byBleHBhbmQgdGhlIG1hY3JvIGluIGRpZmZlcmVudCBjb250ZXh0cyB3aXRoCisgICBjb25maWRlbmNlIHRoYXQgdGhlIGVudW1lcmF0aW9uIG9mIHN5bWJvbGljIG5hbWVzIHdpbGwgbWFwIGNvcnJlY3RseQorICAgb250byB0aGUgdGFibGUgb2YgZXJyb3Igc3RyaW5ncy4gIFwwIGlzIGFwcGVuZGVkIHRvIHRoZSBzdHJpbmdzIHRvCisgICBleHBpbGljaXRlbHkgaW5pdGlhbGl6ZSB0aGUgc3RyaW5nIHRlcm1pbmF0b3IuICovCisjZGVmaW5lIGx0X2RsZXJyb3JfdGFibGUJCQkJCQlcCisgICAgTFRfRVJST1IoVU5LTk9XTiwJCSAgICAidW5rbm93biBlcnJvclwwIikJCQlcCisgICAgTFRfRVJST1IoRExPUEVOX05PVF9TVVBQT1JURUQsICAiZGxvcGVuIHN1cHBvcnQgbm90IGF2YWlsYWJsZVwwIikJXAorICAgIExUX0VSUk9SKElOVkFMSURfTE9BREVSLAkgICAgImludmFsaWQgbG9hZGVyXDAiKQkJCVwKKyAgICBMVF9FUlJPUihJTklUX0xPQURFUiwJICAgICJsb2FkZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkXDAiKQlcCisgICAgTFRfRVJST1IoUkVNT1ZFX0xPQURFUiwJICAgICJsb2FkZXIgcmVtb3ZhbCBmYWlsZWRcMCIpCQlcCisgICAgTFRfRVJST1IoRklMRV9OT1RfRk9VTkQsCSAgICAiZmlsZSBub3QgZm91bmRcMCIpCQkJXAorICAgIExUX0VSUk9SKERFUExJQl9OT1RfRk9VTkQsCSAgICAiZGVwZW5kZW5jeSBsaWJyYXJ5IG5vdCBmb3VuZFwwIikJXAorICAgIExUX0VSUk9SKE5PX1NZTUJPTFMsCSAgICAibm8gc3ltYm9scyBkZWZpbmVkXDAiKQkJXAorICAgIExUX0VSUk9SKENBTk5PVF9PUEVOLAkgICAgImNhbid0IG9wZW4gdGhlIG1vZHVsZVwwIikJCVwKKyAgICBMVF9FUlJPUihDQU5OT1RfQ0xPU0UsCSAgICAiY2FuJ3QgY2xvc2UgdGhlIG1vZHVsZVwwIikJCVwKKyAgICBMVF9FUlJPUihTWU1CT0xfTk9UX0ZPVU5ELAkgICAgInN5bWJvbCBub3QgZm91bmRcMCIpCQlcCisgICAgTFRfRVJST1IoTk9fTUVNT1JZLAkJICAgICJub3QgZW5vdWdoIG1lbW9yeVwwIikJCVwKKyAgICBMVF9FUlJPUihJTlZBTElEX0hBTkRMRSwJICAgICJpbnZhbGlkIG1vZHVsZSBoYW5kbGVcMCIpCQlcCisgICAgTFRfRVJST1IoQlVGRkVSX09WRVJGTE9XLAkgICAgImludGVybmFsIGJ1ZmZlciBvdmVyZmxvd1wwIikJXAorICAgIExUX0VSUk9SKElOVkFMSURfRVJST1JDT0RFLAkgICAgImludmFsaWQgZXJyb3Jjb2RlXDAiKQkJXAorICAgIExUX0VSUk9SKFNIVVRET1dOLAkJICAgICJsaWJyYXJ5IGFscmVhZHkgc2h1dGRvd25cMCIpCVwKKyAgICBMVF9FUlJPUihDTE9TRV9SRVNJREVOVF9NT0RVTEUsICJjYW4ndCBjbG9zZSByZXNpZGVudCBtb2R1bGVcMCIpCVwKKyAgICBMVF9FUlJPUihJTlZBTElEX01VVEVYX0FSR1MsICAgICJpbnRlcm5hbCBlcnJvciAoY29kZSB3aXRoZHJhd24pXDAiKVwKKyAgICBMVF9FUlJPUihJTlZBTElEX1BPU0lUSU9OLAkgICAgImludmFsaWQgc2VhcmNoIHBhdGggaW5zZXJ0IHBvc2l0aW9uXDAiKVwKKyAgICBMVF9FUlJPUihDT05GTElDVElOR19GTEFHUywJICAgICJzeW1ib2wgdmlzaWJpbGl0eSBjYW4gYmUgZ2xvYmFsIG9yIGxvY2FsXDAiKQorCisvKiBFbnVtZXJhdGUgdGhlIHN5bWJvbGljIGVycm9yIG5hbWVzLiAqLworZW51bSB7CisjZGVmaW5lIExUX0VSUk9SKG5hbWUsIGRpYWdub3N0aWMpCUxUX0NPTkMoTFRfRVJST1JfLCBuYW1lKSwKKwlsdF9kbGVycm9yX3RhYmxlCisjdW5kZWYgTFRfRVJST1IKKworCUxUX0VSUk9SX01BWAorfTsKKworLyogU2hvdWxkIGJlIG1heCBvZiB0aGUgZXJyb3Igc3RyaW5nIGxlbmd0aHMgYWJvdmUgKHBsdXMgb25lIGZvciBDKyspICovCisjZGVmaW5lIExUX0VSUk9SX0xFTl9NQVggKDQxKQorCisvKiBUaGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgdXNlZnVsIGZyb20gaW5zaWRlIGN1c3RvbSBtb2R1bGUgbG9hZGVycy4gKi8KK0xUX1NDT1BFIGludAlsdF9kbGFkZGVycm9yCShjb25zdCBjaGFyICpkaWFnbm9zdGljKTsKK0xUX1NDT1BFIGludAlsdF9kbHNldGVycm9yCShpbnQgZXJyb3Jjb2RlKTsKKworCitMVF9FTkRfQ19ERUNMUworCisjZW5kaWYgLyohZGVmaW5lZChMVF9FUlJPUl9IKSovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYmx0ZGwvbHRfc3lzdGVtLmggYi9pbmNsdWRlL2xpYmx0ZGwvbHRfc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFiMmFiNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGlibHRkbC9sdF9zeXN0ZW0uaApAQCAtMCwwICsxLDE1NCBAQAorLyogbHRfc3lzdGVtLmggLS0gc3lzdGVtIHBvcnRhYmlsaXR5IGFic3RyYWN0aW9uIGxheWVyCisKKyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDA0CisKKyAgIE5PVEU6IFRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRoaXMgZmlsZSBpcyBtYWludGFpbmVkIHdpdGggdGhlCisgICBHTlUgTGlidG9vbCBwYWNrYWdlLiAgUmVwb3J0IGJ1Z3MgdG8gYnVnLWxpYnRvb2xAZ251Lm9yZy4KKworR05VIExpYmx0ZGwgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAoraWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAoraXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCitzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworR05VIExpYmx0ZGwgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIEdOVSBMaWJsdGRsOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIGEKK2NvcHkgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSAgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwuaHRtbCwKK29yIG9idGFpbmVkIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmICFkZWZpbmVkKExUX1NZU1RFTV9IKQorI2RlZmluZSBMVF9TWVNURU1fSCAxCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworLyogU29tZSBzeXN0ZW1zIGRvIG5vdCBkZWZpbmUgRVhJVF8qLCBldmVuIHdpdGggU1REQ19IRUFERVJTLiAgKi8KKyNpZiAhZGVmaW5lZChFWElUX1NVQ0NFU1MpCisjIGRlZmluZSBFWElUX1NVQ0NFU1MgMAorI2VuZGlmCisjaWYgIWRlZmluZWQoRVhJVF9GQUlMVVJFKQorIyBkZWZpbmUgRVhJVF9GQUlMVVJFIDEKKyNlbmRpZgorCisvKiBKdXN0IHBpY2sgYSBiaWcgbnVtYmVyLi4uICovCisjZGVmaW5lIExUX0ZJTEVOQU1FX01BWCAyMDQ4CisKKworLyogU2F2ZXMgb24gdGhvc2UgaGFyZCB0byBkZWJ1ZyAnXDAnIHR5cG9zLi4uLiAgKi8KKyNkZWZpbmUgTFRfRU9TX0NIQVIJJ1wwJworCisvKiBMVERMX0JFR0lOX0NfREVDTFMgc2hvdWxkIGJlIHVzZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB5b3VyIGRlY2xhcmF0aW9ucywKKyAgIHNvIHRoYXQgQysrIGNvbXBpbGVycyBkb24ndCBtYW5nbGUgdGhlaXIgbmFtZXMuICBVc2UgTFRETF9FTkRfQ19ERUNMUyBhdAorICAgdGhlIGVuZCBvZiBDIGRlY2xhcmF0aW9ucy4gKi8KKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorIyBkZWZpbmUgTFRfQkVHSU5fQ19ERUNMUwlleHRlcm4gIkMiIHsKKyMgZGVmaW5lIExUX0VORF9DX0RFQ0xTCQl9CisjZWxzZQorIyBkZWZpbmUgTFRfQkVHSU5fQ19ERUNMUwkvKiBlbXB0eSAqLworIyBkZWZpbmUgTFRfRU5EX0NfREVDTFMJCS8qIGVtcHR5ICovCisjZW5kaWYKKworLyogTFRfU1RNVF9TVEFSVC9FTkQgYXJlIHVzZWQgdG8gY3JlYXRlIG1hY3JvcyB3aGljaCBleHBhbmQgdG8gYQorICAgYSBzaW5nbGUgY29tcG91bmQgc3RhdGVtZW50IGluIGEgcG9ydGFibGUgd2F5LiAgKi8KKyNpZiBkZWZpbmVkIChfX0dOVUNfXykgJiYgIWRlZmluZWQgKF9fU1RSSUNUX0FOU0lfXykgJiYgIWRlZmluZWQgKF9fY3BsdXNwbHVzKQorIyAgZGVmaW5lIExUX1NUTVRfU1RBUlQgICAgICAgICh2b2lkKSgKKyMgIGRlZmluZSBMVF9TVE1UX0VORCAgICAgICAgICApCisjZWxzZQorIyAgaWYgKGRlZmluZWQgKHN1bikgfHwgZGVmaW5lZCAoX19zdW5fXykpCisjICAgIGRlZmluZSBMVF9TVE1UX1NUQVJUICAgICAgaWYgKDEpCisjICAgIGRlZmluZSBMVF9TVE1UX0VORCAgICAgICAgZWxzZSAodm9pZCkwCisjICBlbHNlCisjICAgIGRlZmluZSBMVF9TVE1UX1NUQVJUICAgICAgZG8KKyMgICAgZGVmaW5lIExUX1NUTVRfRU5EICAgICAgICB3aGlsZSAoMCkKKyMgIGVuZGlmCisjZW5kaWYKKworLyogQ2Fub25pY2FsaXNlIFdpbmRvd3MgYW5kIEN5Z3dpbiByZWNvZ25pdGlvbiBtYWNyb3MuCisgICBUbyBtYXRjaCB0aGUgdmFsdWVzIHNldCBieSByZWNlbnQgQ3lnd2luIGNvbXBpbGVycywgbWFrZSBzdXJlIHRoYXQgaWYKKyAgIF9fQ1lHV0lOX18gaXMgZGVmaW5lZCAoYWZ0ZXIgY2Fub25pY2FsaXNhdGlvbiksIF9fV0lORE9XU19fIGlzIE5PVCEgICovCisjaWYgZGVmaW5lZChfX0NZR1dJTjMyX18pICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCisjIGRlZmluZSBfX0NZR1dJTl9fIF9fQ1lHV0lOMzJfXworI2VuZGlmCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKQorIyBpZiBkZWZpbmVkKF9fV0lORE9XU19fKQorIyAgIHVuZGVmIF9fV0lORE9XU19fCisjIGVuZGlmCisjZWxpZiBkZWZpbmVkKF9XSU4zMikKKyMgZGVmaW5lIF9fV0lORE9XU19fIF9XSU4zMgorI2VsaWYgZGVmaW5lZChXSU4zMikKKyMgZGVmaW5lIF9fV0lORE9XU19fIFdJTjMyCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pICYmIGRlZmluZWQoX19XSU5ET1dTX18pCisjIHVuZGVmIF9fV0lORE9XU19fCisjZW5kaWYKKworCisvKiBETEwgYnVpbGRpbmcgc3VwcG9ydCBvbiB3aW4zMiBob3N0czsgIG1vc3RseSB0byB3b3JrYXJvdW5kIHRoZWlyCisgICByaWRpY3Vsb3VzIGltcGxlbWVudGF0aW9uIG9mIGRhdGEgc3ltYm9sIGV4cG9ydGluZy4gKi8KKyNpZiAhZGVmaW5lZChMVF9TQ09QRSkKKyMgIGlmIGRlZmluZWQoX19XSU5ET1dTX18pIHx8IGRlZmluZWQoX19DWUdXSU5fXykKKyMgICAgaWYgZGVmaW5lZChETExfRVhQT1JUKQkJLyogZGVmaW5lZCBieSBsaWJ0b29sIChpZiByZXF1aXJlZCkgKi8KKyMgICAgICBkZWZpbmUgTFRfU0NPUEUJZXh0ZXJuIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorIyAgICBlbmRpZgorIyAgICBpZiBkZWZpbmVkKExJQkxURExfRExMX0lNUE9SVCkJLyogZGVmaW5lIGlmIGxpbmtpbmcgd2l0aCB0aGlzIGRsbCAqLworICAgICAgIC8qIG5vdGU6IGN5Z3dpbi9taW5ndyBjb21waWxlcnMgY2FuIHJlbHkgaW5zdGVhZCBvbiBhdXRvLWltcG9ydCAqLworIyAgICAgIGRlZmluZSBMVF9TQ09QRQlleHRlcm4gX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjICAgIGVuZGlmCisjICBlbmRpZgorIyAgaWYgIWRlZmluZWQoTFRfU0NPUEUpCQkvKiBzdGF0aWMgbGlua2luZyBvciAhX19XSU5ET1dTX18gKi8KKyMgICAgZGVmaW5lIExUX1NDT1BFCWV4dGVybgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX1dJTkRPV1NfXykKKy8qIExUX0RJUlNFUF9DSEFSIGlzIGFjY2VwdGVkICppbiBhZGRpdGlvbiogdG8gJy8nIGFzIGEgZGlyZWN0b3J5CisgICBzZXBhcmF0b3Igd2hlbiBpdCBpcyBzZXQuICovCisjIGRlZmluZSBMVF9ESVJTRVBfQ0hBUgkJJ1xcJworIyBkZWZpbmUgTFRfUEFUSFNFUF9DSEFSCSc7JworI2Vsc2UKKyMgZGVmaW5lIExUX1BBVEhTRVBfQ0hBUgknOicKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgLyogVmlzdWFsIFN0dWRpbyAqLworIyAgZGVmaW5lIFJfT0sgNAorI2VuZGlmCisKKy8qIGZvcGVuKCkgbW9kZSBmbGFncyBmb3IgcmVhZGluZyBhIHRleHQgZmlsZSAqLworI3VuZGVmCUxUX1JFQURURVhUX01PREUKKyNpZiBkZWZpbmVkKF9fV0lORE9XU19fKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCisjICBkZWZpbmUgTFRfUkVBRFRFWFRfTU9ERSAicnQiCisjZWxzZQorIyAgZGVmaW5lIExUX1JFQURURVhUX01PREUgInIiCisjZW5kaWYKKworLyogVGhlIGV4dHJhIGluZGlyZWN0aW9uIHRvIHRoZSBMVF9fU1RSIGFuZCBMVF9fQ09OQyBtYWNyb3MgaXMgcmVxdWlyZWQgc28KKyAgIHRoYXQgaWYgdGhlIGFyZ3VtZW50cyB0byBMVF9TVFIoKSAob3IgTFRfQ09OQygpKSBhcmUgdGhlbXNlbHZlcyBtYWNyb3MsCisgICB0aGV5IHdpbGwgYmUgZXhwYW5kZWQgYmVmb3JlIGJlaW5nIHF1b3RlZC4gICAqLworI2lmbmRlZiBMVF9TVFIKKyMgIGRlZmluZSBMVF9fU1RSKGFyZykJCSNhcmcKKyMgIGRlZmluZSBMVF9TVFIoYXJnKQkJTFRfX1NUUihhcmcpCisjZW5kaWYKKworI2lmbmRlZiBMVF9DT05DCisjICBkZWZpbmUgTFRfX0NPTkMoYSwgYikJYSMjYgorIyAgZGVmaW5lIExUX0NPTkMoYSwgYikJCUxUX19DT05DKGEsIGIpCisjZW5kaWYKKyNpZm5kZWYgTFRfQ09OQzMKKyMgIGRlZmluZSBMVF9fQ09OQzMoYSwgYiwgYykJYSMjYiMjYworIyAgZGVmaW5lIExUX0NPTkMzKGEsIGIsIGMpCUxUX19DT05DMyhhLCBiLCBjKQorI2VuZGlmCisKKyNlbmRpZiAvKiFkZWZpbmVkKExUX1NZU1RFTV9IKSovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2x0ZGwuaCBiL2luY2x1ZGUvbHRkbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNTE2YWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2x0ZGwuaApAQCAtMCwwICsxLDE2MiBAQAorLyogbHRkbC5oIC0tIGdlbmVyaWMgZGxvcGVuIGZ1bmN0aW9ucworCisgICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCwgMjAwNCwgMjAwNSwKKyAgICAgICAgICAgICAgICAgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgVGhvbWFzIFRhbm5lciwgMTk5OAorCisgICBOT1RFOiBUaGUgY2Fub25pY2FsIHNvdXJjZSBvZiB0aGlzIGZpbGUgaXMgbWFpbnRhaW5lZCB3aXRoIHRoZQorICAgR05VIExpYnRvb2wgcGFja2FnZS4gIFJlcG9ydCBidWdzIHRvIGJ1Zy1saWJ0b29sQGdudS5vcmcuCisKK0dOVSBMaWJsdGRsIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCit2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK0FzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK2lmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKK2lzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK0dOVSBMaWJsdGRsIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYWxvbmcgd2l0aCBHTlUgTGlibHRkbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCBhCitjb3B5IGNhbiBiZSBkb3dubG9hZGVkIGZyb20gIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9sZ3BsLmh0bWwsCitvciBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKy8qIE9ubHkgaW5jbHVkZSB0aGlzIGhlYWRlciBmaWxlIG9uY2UuICovCisjaWYgIWRlZmluZWQoTFRETF9IKQorI2RlZmluZSBMVERMX0ggMQorCisjaW5jbHVkZSA8bGlibHRkbC9sdF9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxsaWJsdGRsL2x0X2Vycm9yLmg+CisjaW5jbHVkZSA8bGlibHRkbC9sdF9kbGxvYWRlci5oPgorCitMVF9CRUdJTl9DX0RFQ0xTCisKKworLyogTFRfU1RSTEVOIGNhbiBiZSB1c2VkIHNhZmVseSBvbiBOVUxMIHBvaW50ZXJzLiAgKi8KKyNkZWZpbmUgTFRfU1RSTEVOKHMpCSgoKHMpICYmIChzKVswXSkgPyBzdHJsZW4gKHMpIDogMCkKKworDAorLyogLS0tIERZTkFNSUMgTU9EVUxFIExPQURJTkcgQVBJIC0tLSAqLworCisKK3R5cGVkZWYJc3RydWN0IGx0X19oYW5kbGUgKmx0X2RsaGFuZGxlOwkvKiBBIGxvYWRlZCBtb2R1bGUuICAqLworCisvKiBJbml0aWFsaXNhdGlvbiBhbmQgZmluYWxpc2F0aW9uIGZ1bmN0aW9ucyBmb3IgbGlibHRkbC4gKi8KK0xUX1NDT1BFIGludAkgICAgbHRfZGxpbml0CQkodm9pZCk7CitMVF9TQ09QRSBpbnQJICAgIGx0X2RsZXhpdAkJKHZvaWQpOworCisvKiBNb2R1bGUgc2VhcmNoIHBhdGggbWFuaXB1bGF0aW9uLiAgKi8KK0xUX1NDT1BFIGludAkgICAgbHRfZGxhZGRzZWFyY2hkaXIJIChjb25zdCBjaGFyICpzZWFyY2hfZGlyKTsKK0xUX1NDT1BFIGludAkgICAgbHRfZGxpbnNlcnRzZWFyY2hkaXIgKGNvbnN0IGNoYXIgKmJlZm9yZSwKKwkJCQkJCSAgY29uc3QgY2hhciAqc2VhcmNoX2Rpcik7CitMVF9TQ09QRSBpbnQgCSAgICBsdF9kbHNldHNlYXJjaHBhdGgJIChjb25zdCBjaGFyICpzZWFyY2hfcGF0aCk7CitMVF9TQ09QRSBjb25zdCBjaGFyICpsdF9kbGdldHNlYXJjaHBhdGgJICh2b2lkKTsKK0xUX1NDT1BFIGludAkgICAgbHRfZGxmb3JlYWNoZmlsZQkgKAorCQkJY29uc3QgY2hhciAqc2VhcmNoX3BhdGgsCisJCQlpbnQgKCpmdW5jKSAoY29uc3QgY2hhciAqZmlsZW5hbWUsIHZvaWQgKmRhdGEpLAorCQkJdm9pZCAqZGF0YSk7CisKKy8qIFVzZXIgbW9kdWxlIGxvYWRpbmcgYWR2aXNvcnMuICAqLworTFRfU0NPUEUgaW50CSAgICBsdF9kbGFkdmlzZV9pbml0CSAobHRfZGxhZHZpc2UgKmFkdmlzZSk7CitMVF9TQ09QRSBpbnQJICAgIGx0X2RsYWR2aXNlX2Rlc3Ryb3kgIChsdF9kbGFkdmlzZSAqYWR2aXNlKTsKK0xUX1NDT1BFIGludAkgICAgbHRfZGxhZHZpc2VfZXh0CSAobHRfZGxhZHZpc2UgKmFkdmlzZSk7CitMVF9TQ09QRSBpbnQJICAgIGx0X2RsYWR2aXNlX3Jlc2lkZW50IChsdF9kbGFkdmlzZSAqYWR2aXNlKTsKK0xUX1NDT1BFIGludAkgICAgbHRfZGxhZHZpc2VfbG9jYWwJIChsdF9kbGFkdmlzZSAqYWR2aXNlKTsKK0xUX1NDT1BFIGludAkgICAgbHRfZGxhZHZpc2VfZ2xvYmFsICAgKGx0X2RsYWR2aXNlICphZHZpc2UpOworTFRfU0NPUEUgaW50CSAgICBsdF9kbGFkdmlzZV9wcmVsb2FkCSAobHRfZGxhZHZpc2UgKmFkdmlzZSk7CisKKy8qIFBvcnRhYmxlIGxpYmx0ZGwgdmVyc2lvbnMgb2YgdGhlIHN5c3RlbSBkbG9wZW4oKSBBUEkuICovCitMVF9TQ09QRSBsdF9kbGhhbmRsZSBsdF9kbG9wZW4JCShjb25zdCBjaGFyICpmaWxlbmFtZSk7CitMVF9TQ09QRSBsdF9kbGhhbmRsZSBsdF9kbG9wZW5leHQJKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKK0xUX1NDT1BFIGx0X2RsaGFuZGxlIGx0X2Rsb3BlbmFkdmlzZQkoY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJCSBsdF9kbGFkdmlzZSBhZHZpc2UpOworTFRfU0NPUEUgdm9pZCAqCSAgICBsdF9kbHN5bQkJKGx0X2RsaGFuZGxlIGhhbmRsZSwgY29uc3QgY2hhciAqbmFtZSk7CitMVF9TQ09QRSBjb25zdCBjaGFyICpsdF9kbGVycm9yCQkodm9pZCk7CitMVF9TQ09QRSBpbnQJICAgIGx0X2RsY2xvc2UJCShsdF9kbGhhbmRsZSBoYW5kbGUpOworCisKKworLyogLS0tIFBSRUxPQURFRCBNT0RVTEUgU1VQUE9SVCAtLS0gKi8KKworCisvKiBBIHByZW9wZW5lZCBzeW1ib2wuIEFycmF5cyBvZiB0aGlzIHR5cGUgY29tcHJpc2UgdGhlIGV4cG9ydGVkCisgICBzeW1ib2xzIGZvciBhIGRscHJlb3BlbmVkIG1vZHVsZS4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgdm9pZCAgICAgICAqYWRkcmVzczsKK30gbHRfZGxzeW1saXN0OworCit0eXBlZGVmIGludCBsdF9kbHByZWxvYWRfY2FsbGJhY2tfZnVuYyAobHRfZGxoYW5kbGUgaGFuZGxlKTsKKworTFRfU0NPUEUgaW50CWx0X2RscHJlbG9hZAkgICAgIChjb25zdCBsdF9kbHN5bWxpc3QgKnByZWxvYWRlZCk7CitMVF9TQ09QRSBpbnQJbHRfZGxwcmVsb2FkX2RlZmF1bHQgKGNvbnN0IGx0X2Rsc3ltbGlzdCAqcHJlbG9hZGVkKTsKK0xUX1NDT1BFIGludAlsdF9kbHByZWxvYWRfb3BlbiAgICAoY29uc3QgY2hhciAqb3JpZ2luYXRvciwKKwkJCQkgICAgICBsdF9kbHByZWxvYWRfY2FsbGJhY2tfZnVuYyAqZnVuYyk7CisKKyNkZWZpbmUgbHRfcHJlbG9hZGVkX3N5bWJvbHMJbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9scworI2RlZmluZSBMVERMX1NFVF9QUkVMT0FERURfU1lNQk9MUygpIAkJCUxUX1NUTVRfU1RBUlR7CVwKKwlleHRlcm4gY29uc3QgbHRfZGxzeW1saXN0IGx0X3ByZWxvYWRlZF9zeW1ib2xzW107CQlcCisJbHRfZGxwcmVsb2FkX2RlZmF1bHQobHRfcHJlbG9hZGVkX3N5bWJvbHMpOwkJCVwKKwkJCQkJCQl9TFRfU1RNVF9FTkQKKworCisKKwwKKy8qIC0tLSBNT0RVTEUgSU5GT1JNQVRJT04gLS0tICovCisKKworLyogQXNzb2NpYXRpbmcgdXNlciBkYXRhIHdpdGggbG9hZGVkIG1vZHVsZXMuICovCit0eXBlZGVmIHZvaWQgKiBsdF9kbGludGVyZmFjZV9pZDsKK3R5cGVkZWYgaW50IGx0X2RsaGFuZGxlX2ludGVyZmFjZSAobHRfZGxoYW5kbGUgaGFuZGxlLCBjb25zdCBjaGFyICppZF9zdHJpbmcpOworCitMVF9TQ09QRSBsdF9kbGludGVyZmFjZV9pZCBsdF9kbGludGVyZmFjZV9yZWdpc3RlciAoY29uc3QgY2hhciAqaWRfc3RyaW5nLAorCQkJCQkgIGx0X2RsaGFuZGxlX2ludGVyZmFjZSAqaWZhY2UpOworTFRfU0NPUEUgdm9pZAlsdF9kbGludGVyZmFjZV9mcmVlIChsdF9kbGludGVyZmFjZV9pZCBrZXkpOworTFRfU0NPUEUgdm9pZCAqCWx0X2RsY2FsbGVyX3NldF9kYXRhICAobHRfZGxpbnRlcmZhY2VfaWQga2V5LAorCQkJCQkgIGx0X2RsaGFuZGxlIGhhbmRsZSwgdm9pZCAqZGF0YSk7CitMVF9TQ09QRSB2b2lkICoJbHRfZGxjYWxsZXJfZ2V0X2RhdGEgIChsdF9kbGludGVyZmFjZV9pZCBrZXksCisJCQkJCSAgbHRfZGxoYW5kbGUgaGFuZGxlKTsKKworCisvKiBSZWFkIG9ubHkgaW5mb3JtYXRpb24gcGVydGFpbmluZyB0byBhIGxvYWRlZCBtb2R1bGUuICovCit0eXBlZGVmCXN0cnVjdCB7CisgIGNoYXIgKglmaWxlbmFtZTsJLyogZmlsZSBuYW1lICovCisgIGNoYXIgKgluYW1lOwkJLyogbW9kdWxlIG5hbWUgKi8KKyAgaW50CQlyZWZfY291bnQ7CS8qIG51bWJlciBvZiB0aW1lcyBsdF9kbG9wZW5lZCBtaW51cworCQkJCSAgIG51bWJlciBvZiB0aW1lcyBsdF9kbGNsb3NlZC4gKi8KKyAgdW5zaWduZWQgaW50CWlzX3Jlc2lkZW50OjE7CS8qIG1vZHVsZSBjYW4ndCBiZSB1bmxvYWRlZC4gKi8KKyAgdW5zaWduZWQgaW50CWlzX3N5bWdsb2JhbDoxOwkvKiBtb2R1bGUgc3ltYm9scyBjYW4gc2F0aXNmeQorCQkJCSAgIHN1YnNlcXVlbnRseSBsb2FkZWQgbW9kdWxlcy4gICovCisgIHVuc2lnbmVkIGludAlpc19zeW1sb2NhbDoxOwkvKiBtb2R1bGUgc3ltYm9scyBhcmUgb25seSBhdmFpbGFibGUKKwkJCQkgICBsb2NhbGx5LiAqLworfSBsdF9kbGluZm87CisKK0xUX1NDT1BFIGNvbnN0IGx0X2RsaW5mbyAqbHRfZGxnZXRpbmZvCSAgICAobHRfZGxoYW5kbGUgaGFuZGxlKTsKKworTFRfU0NPUEUgbHRfZGxoYW5kbGUJbHRfZGxoYW5kbGVfaXRlcmF0ZSAobHRfZGxpbnRlcmZhY2VfaWQgaWZhY2UsCisJCQkJCSAgICAgbHRfZGxoYW5kbGUgcGxhY2UpOworTFRfU0NPUEUgbHRfZGxoYW5kbGUJbHRfZGxoYW5kbGVfZmV0Y2ggICAobHRfZGxpbnRlcmZhY2VfaWQgaWZhY2UsCisJCQkJCSAgICAgY29uc3QgY2hhciAqbW9kdWxlX25hbWUpOworTFRfU0NPUEUgaW50CQlsdF9kbGhhbmRsZV9tYXAJICAgIChsdF9kbGludGVyZmFjZV9pZCBpZmFjZSwKKwkJCQlpbnQgKCpmdW5jKSAobHRfZGxoYW5kbGUgaGFuZGxlLCB2b2lkICpkYXRhKSwKKwkJCQl2b2lkICpkYXRhKTsKKworCisKKy8qIERlcHJlY2F0ZWQgbW9kdWxlIHJlc2lkZW5jeSBtYW5hZ2VtZW50IEFQSS4gKi8KK0xUX1NDT1BFIGludAkgICAgbHRfZGxtYWtlcmVzaWRlbnQJKGx0X2RsaGFuZGxlIGhhbmRsZSk7CitMVF9TQ09QRSBpbnQJICAgIGx0X2RsaXNyZXNpZGVudAkobHRfZGxoYW5kbGUgaGFuZGxlKTsKKworI2RlZmluZSBsdF9wdHIgdm9pZCAqCisKK0xUX0VORF9DX0RFQ0xTCisKKyNlbmRpZiAvKiFkZWZpbmVkKExURExfSCkqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvYXJjaC9hbHBoYS5pbiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2FyY2gvYWxwaGEuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBjNmI5NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2FyY2gvYWxwaGEuaW4KQEAgLTAsMCArMSw5IEBACisjIEFscGhhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZQorCisjIyBzZWxlY3QgQVJDSF9TVVBQT1JUU18zMgorIyMgc2VsZWN0IEFSQ0hfREVGQVVMVF8zMgorIyMgc2VsZWN0IEFSQ0hfVVNFX01NVQorIyMgc2VsZWN0IEFSQ0hfU1VQUE9SVF9DUFUKKyMjIHNlbGVjdCBBUkNIX1NVUFBPUlRfVFVORQorIyMKKyMjIGhlbHAgVGhlIEFscGhhIGFyY2hpdGVjdHVyZS4KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2FyY2gvYWxwaGEuaW4uMiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2FyY2gvYWxwaGEuaW4uMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTUyNjI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvYXJjaC9hbHBoYS5pbi4yCkBAIC0wLDAgKzEsNTYgQEAKKyMgQWxwaGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlCisKK2Nob2ljZQorICAgIGJvb2wKKyAgICBwcm9tcHQgIlZhcmlhbnQiCisKK2NvbmZpZyBBUkNIX0FMUEhBX0VWNAorICAgIGJvb2wKKyAgICBwcm9tcHQgIkVWNCIKKworY29uZmlnIEFSQ0hfQUxQSEFfRVY0NQorICAgIGJvb2wKKyAgICBwcm9tcHQgIkVWNDUiCisKK2NvbmZpZyBBUkNIX0FMUEhBX0VWNQorICAgIGJvb2wKKyAgICBwcm9tcHQgIkVWNSIKKworY29uZmlnIEFSQ0hfQUxQSEFfRVY1NgorICAgIGJvb2wKKyAgICBwcm9tcHQgIkVWNTYiCisKK2NvbmZpZyBBUkNIX0FMUEhBX0VWNgorICAgIGJvb2wKKyAgICBwcm9tcHQgIkVWNiIKKworY29uZmlnIEFSQ0hfQUxQSEFfRVY2NworICAgIGJvb2wKKyAgICBwcm9tcHQgIkVWNjciCisKK2VuZGNob2ljZQorCitjb25maWcgQVJDSF9BTFBIQV9WQVJJQU5UCisgICAgc3RyaW5nCisgICAgZGVmYXVsdCAiZXY0IiAgIGlmIEFSQ0hfQUxQSEFfRVY0CisgICAgZGVmYXVsdCAiZXY0NSIgIGlmIEFSQ0hfQUxQSEFfRVY0NQorICAgIGRlZmF1bHQgImV2NSIgICBpZiBBUkNIX0FMUEhBX0VWNQorICAgIGRlZmF1bHQgImV2NTYiICBpZiBBUkNIX0FMUEhBX0VWNTYKKyAgICBkZWZhdWx0ICJldjYiICAgaWYgQVJDSF9BTFBIQV9FVjYKKyAgICBkZWZhdWx0ICJldjY3IiAgaWYgQVJDSF9BTFBIQV9FVjY3CisKK2NvbmZpZyBBUkNIX0NQVQorICAgIGRlZmF1bHQgImV2NCIgICBpZiBBUkNIX0FMUEhBX0VWNAorICAgIGRlZmF1bHQgImV2NDUiICBpZiBBUkNIX0FMUEhBX0VWNDUKKyAgICBkZWZhdWx0ICJldjUiICAgaWYgQVJDSF9BTFBIQV9FVjUKKyAgICBkZWZhdWx0ICJldjU2IiAgaWYgQVJDSF9BTFBIQV9FVjU2CisgICAgZGVmYXVsdCAiZXY2IiAgIGlmIEFSQ0hfQUxQSEFfRVY2CisgICAgZGVmYXVsdCAiZXY2NyIgIGlmIEFSQ0hfQUxQSEFfRVY2NworCitjb25maWcgQVJDSF9UVU5FCisgICAgZGVmYXVsdCAiZXY0IiAgIGlmIEFSQ0hfQUxQSEFfRVY0CisgICAgZGVmYXVsdCAiZXY0NSIgIGlmIEFSQ0hfQUxQSEFfRVY0NQorICAgIGRlZmF1bHQgImV2NSIgICBpZiBBUkNIX0FMUEhBX0VWNQorICAgIGRlZmF1bHQgImV2NTYiICBpZiBBUkNIX0FMUEhBX0VWNTYKKyAgICBkZWZhdWx0ICJldjYiICAgaWYgQVJDSF9BTFBIQV9FVjYKKyAgICBkZWZhdWx0ICJldjY3IiAgaWYgQVJDSF9BTFBIQV9FVjY3CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9hcmNoL2FybS5pbiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2FyY2gvYXJtLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiOTYzMzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9hcmNoL2FybS5pbgpAQCAtMCwwICsxLDE1IEBACisjIEFSTSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUKKworIyMgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfMzIKKyMjIHNlbGVjdCBBUkNIX0RFRkFVTFRfMzIKKyMjIHNlbGVjdCBBUkNIX1NVUFBPUlRTX0JPVEhfTU1VCisjIyBzZWxlY3QgQVJDSF9ERUZBVUxUX0hBU19NTVUKKyMjIHNlbGVjdCBBUkNIX1NVUFBPUlRTX0JPVEhfRU5ESUFOCisjIyBzZWxlY3QgQVJDSF9ERUZBVUxUX0xFCisjIyBzZWxlY3QgQVJDSF9TVVBQT1JUX0FSQ0gKKyMjIHNlbGVjdCBBUkNIX1NVUFBPUlRfQ1BVCisjIyBzZWxlY3QgQVJDSF9TVVBQT1JUX1RVTkUKKyMjIHNlbGVjdCBBUkNIX1NVUFBPUlRfRlBVCisjIworIyMgaGVscCBUaGUgQVJNIGFyY2hpdGVjdHVyZSwgYXMgZGVmaW5lZCBieToKKyMjIGhlbHAgICAgIGh0dHA6Ly93d3cuYXJtLmNvbS8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2FyY2gvYXJtLmluLjIgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9hcmNoL2FybS5pbi4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YTIzZWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9hcmNoL2FybS5pbi4yCkBAIC0wLDAgKzEsNTIgQEAKKyMgQVJNIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZQorCitjb25maWcgQVJDSF9BUk1fTU9ERQorICAgIHN0cmluZworICAgIGRlZmF1bHQgImFybSIgICBpZiBBUkNIX0FSTV9NT0RFX0FSTQorICAgIGRlZmF1bHQgInRodW1iIiBpZiBBUkNIX0FSTV9NT0RFX1RIVU1CCisKK2Nob2ljZQorICAgIGJvb2wKKyAgICBwcm9tcHQgIkRlZmF1bHQgaW5zdHJ1Y3Rpb24gc2V0IG1vZGUiCisgICAgZGVmYXVsdCBBUkNIX0FSTV9NT0RFX0FSTQorCitjb25maWcgQVJDSF9BUk1fTU9ERV9BUk0KKyAgICBib29sCisgICAgcHJvbXB0ICJhcm0iCisgICAgaGVscAorICAgICAgRGVmYXVsdHMgdG8gZW1pdHRpbmcgaW5zdHJ1Y3Rpb25zIGluIHRoZSBBUk0gbW9kZS4KKworY29uZmlnIEFSQ0hfQVJNX01PREVfVEhVTUIKKyAgICBib29sCisgICAgcHJvbXB0ICJ0aHVtYiAoRVhQRVJJTUVOVEFMKSIKKyAgICBkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorICAgIGhlbHAKKyAgICAgIERlZmF1bHRzIHRvIGVtaXR0aW5nIGluc3RydWN0aW9ucyBpbiB0aGUgVEhVTUIgbW9kZS4KKworZW5kY2hvaWNlCisKK2NvbmZpZyBBUkNIX0FSTV9JTlRFUldPUktJTkcKKyAgICBib29sCisgICAgcHJvbXB0ICJVc2UgVGh1bWItaW50ZXJ3b3JraW5nIChSRUFEIEhFTFApIgorICAgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisgICAgaGVscAorICAgICAgRXhjZXJwdCBmcm9tIHRoZSBnY2MgbWFudWFsOgorICAgICAgCisgICAgICA+IEdlbmVyYXRlIGNvZGUgd2hpY2ggc3VwcG9ydHMgY2FsbGluZyBiZXR3ZWVuIHRoZSBBUk0gYW5kIFRodW1iCisgICAgICA+IGluc3RydWN0aW9uIHNldHMuIFdpdGhvdXQgdGhpcyBvcHRpb24gdGhlIHR3byBpbnN0cnVjdGlvbiBzZXRzCisgICAgICA+IGNhbm5vdCBiZSByZWxpYWJseSB1c2VkIGluc2lkZSBvbmUgcHJvZ3JhbS4gVGhlIGRlZmF1bHQgaXMKKyAgICAgID4gW25vdCB0byB1c2UgaW50ZXJ3b3JrXSwgc2luY2Ugc2xpZ2h0bHkgbGFyZ2VyIGNvZGUgaXMgZ2VuZXJhdGVkCisgICAgICA+IHdoZW4gW2ludGVyd29ya10gaXMgc3BlY2lmaWVkLgorCitjb25maWcgQVJDSF9BUk1fRUFCSQorICAgIGJvb2wKKyAgICBwcm9tcHQgIlVzZSBFQUJJIgorICAgIGRlZmF1bHQgeQorICAgIGhlbHAKKyAgICAgIFNldCB1cCB0aGUgdG9vbGNoYWluIHNvIHRoYXQgaXQgZ2VuZXJhdGVzIEVBQkktY29tcGxpYW50IGJpbmFyaWVzLgorCitjb25maWcgQVJDSF9BUk1fQUJJX09LCisgICAgYm9vbAorICAgIGRlZmF1bHQgeQorICAgIGRlcGVuZHMgb24gISBBUkNIX0FSTV9FQUJJCisgICAgc2VsZWN0IEFSQ0hfU1VQUE9SVF9BQkkKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2FyY2gvYXZyMzIuaW4gYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9hcmNoL2F2cjMyLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNzY1NjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9hcmNoL2F2cjMyLmluCkBAIC0wLDAgKzEsMTMgQEAKKyMgQVZSMzIgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlCisKKyMjIHNlbGVjdCBBUkNIX1NVUFBPUlRTXzMyCisjIyBzZWxlY3QgQVJDSF9ERUZBVUxUXzMyCisjIyBzZWxlY3QgQVJDSF9VU0VfTU1VCisjIyBzZWxlY3QgQVJDSF9ERUZBVUxUX0JFCisjIyBzZWxlY3QgQVJDSF9TVVBQT1JUX0FSQ0gKKyMjIHNlbGVjdCBBUkNIX1NVUFBPUlRfQ1BVCisjIyBzZWxlY3QgQVJDSF9TVVBQT1JUX1RVTkUKKyMjIHNlbGVjdCBBUkNIX1NVUFBPUlRfRlBVCisjIworIyMgaGVscCBUaGUgQVZSMzIgYXJjaGl0ZWN0dXJlLCBhcyBkZWZpbmVkIGJ5OgorIyMgaGVscCAgICAgaHR0cDovL3d3dy5hdG1lbC5jb20vcHJvZHVjdHMvYXZyMzIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2FyY2gvYmxhY2tmaW4uaW4gYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9hcmNoL2JsYWNrZmluLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYzgyMjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9hcmNoL2JsYWNrZmluLmluCkBAIC0wLDAgKzEsMTEgQEAKKyMgQmxhY2tmaW4gc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlCisKKyMjIHNlbGVjdCBBUkNIX1NVUFBPUlRTXzMyCisjIyBzZWxlY3QgQVJDSF9ERUZBVUxUXzMyCisjIyBzZWxlY3QgQVJDSF9ERUZBVUxUX0xFCisjIyBzZWxlY3QgQVJDSF9TVVBQT1JUX0FSQ0gKKyMjIHNlbGVjdCBBUkNIX1NVUFBPUlRfQ1BVCisjIyBzZWxlY3QgQVJDSF9TVVBQT1JUX1RVTkUKKyMjIHNlbGVjdCBBUkNIX1NVUFBPUlRfRlBVCisjIworIyMgaGVscCBUaGUgQmxhY2tmaW4gYXJjaGl0ZWN0dXJlCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9hcmNoL202OGsuaW4gYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9hcmNoL202OGsuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc0NWU3NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2FyY2gvbTY4ay5pbgpAQCAtMCwwICsxLDEwIEBACisjIG02OGsgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlCisKKyMjIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisjIworIyMgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfMzIKKyMjIHNlbGVjdCBBUkNIX0RFRkFVTFRfMzIKKyMjIHNlbGVjdCBBUkNIX0RFRkFVTFRfQkUKKyMjIHNlbGVjdCBBUkNIX1NVUFBPUlRfQ1BVCisjIworIyMgaGVscCBUaGUgbTY4ayBhcmNoaXRlY3R1cmUKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2FyY2gvbWlwcy5pbiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2FyY2gvbWlwcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGI5OTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvYXJjaC9taXBzLmluCkBAIC0wLDAgKzEsMTMgQEAKKyMgTUlQUyBzcGVjaWZpYyBjb25maWcgb3B0aW9ucworCisjIyBzZWxlY3QgQVJDSF9TVVBQT1JUU18zMgorIyMgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfNjQgaWYgRVhQRVJJTUVOVEFMCisjIyBzZWxlY3QgQVJDSF9ERUZBVUxUXzMyCisjIyBzZWxlY3QgQVJDSF9VU0VfTU1VCisjIyBzZWxlY3QgQVJDSF9TVVBQT1JUU19CT1RIX0VORElBTgorIyMgc2VsZWN0IEFSQ0hfREVGQVVMVF9CRQorIyMgc2VsZWN0IEFSQ0hfU1VQUE9SVF9BUkNICisjIyBzZWxlY3QgQVJDSF9TVVBQT1JUX1RVTkUKKyMjCisjIyBoZWxwIFRoZSBNSVBTIGFyY2hpdGVjdHVyZSwgYXMgZGVmaW5lZCBieToKKyMjIGhlbHAgICAgIGh0dHA6Ly93d3cubWlwcy5jb20vCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9hcmNoL21pcHMuaW4uMiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2FyY2gvbWlwcy5pbi4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMDQyNGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9hcmNoL21pcHMuaW4uMgpAQCAtMCwwICsxLDM4IEBACisjIE1JUFMgc3BlY2lmaWMgY29uZmlnIG9wdGlvbnMKKworY2hvaWNlCisgICAgYm9vbAorICAgIHByb21wdCAiQUJJIgorCitjb25maWcgQVJDSF9taXBzX28zMgorICAgIGJvb2wKKyAgICBwcm9tcHQgIm8zMiIKKyAgICBkZXBlbmRzIG9uIEFSQ0hfMzIKKyAgICBoZWxwCisgICAgICBUaGlzIGlzIHRoZSAtbWFiaT0zMiBnY2Mgb3B0aW9uLgorCitjb25maWcgQVJDSF9taXBzX24zMgorICAgIGJvb2wKKyAgICBwcm9tcHQgIm4zMiIKKyAgICBkZXBlbmRzIG9uIEFSQ0hfNjQKKyAgICBoZWxwCisgICAgICBUaGlzIGlzIHRoZSAtbWFiaT1uMzIgZ2NjIG9wdGlvbi4KKworY29uZmlnIEFSQ0hfbWlwc19uNjQKKyAgICBib29sCisgICAgcHJvbXB0ICJuNjQiCisgICAgZGVwZW5kcyBvbiBBUkNIXzY0CisgICAgaGVscAorICAgICAgVGhpcyBpcyB0aGUgLW1hYmk9NjQgZ2NjIG9wdGlvbi4KKworIyBOb3Qgc3VwcG9ydGVkIG9uIExpbnV4OgorIyBvNjQgICA6IHNlZW1zIHJlbGF0ZWQgdG8gKkJTRAorIyBlYWJpICA6IHNlZW1zIHJlbGF0ZWQgdG8gYmFyZS1tZXRhbAorCitlbmRjaG9pY2UKKworY29uZmlnIEFSQ0hfbWlwc19BQkkKKyAgICBzdHJpbmcKKyAgICBkZWZhdWx0ICIzMiIgICAgaWYgQVJDSF9taXBzX28zMgorICAgIGRlZmF1bHQgIm4zMiIgICBpZiBBUkNIX21pcHNfbjMyCisgICAgZGVmYXVsdCAiNjQiICAgIGlmIEFSQ0hfbWlwc19uNjQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2FyY2gvcG93ZXJwYy5pbiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2FyY2gvcG93ZXJwYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTNjZTM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvYXJjaC9wb3dlcnBjLmluCkBAIC0wLDAgKzEsMTIgQEAKKyMgcG93ZXJwYyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUKKworIyMgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfMzIKKyMjIHNlbGVjdCBBUkNIX1NVUFBPUlRTXzY0IGlmIEVYUEVSSU1FTlRBTAorIyMgc2VsZWN0IEFSQ0hfREVGQVVMVF8zMgorIyMgc2VsZWN0IEFSQ0hfVVNFX01NVQorIyMgc2VsZWN0IEFSQ0hfU1VQUE9SVF9BQkkKKyMjIHNlbGVjdCBBUkNIX1NVUFBPUlRfQ1BVCisjIyBzZWxlY3QgQVJDSF9TVVBQT1JUX1RVTkUKKyMjCisjIyBoZWxwIFRoZSBQb3dlclBDIGFyY2hpdGVjdHVyZSwgYXMgZGVmaW5lZCBieToKKyMjIGhlbHAgICAgIGh0dHA6Ly93d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9lc2VydmVyL2FydGljbGVzL2FyY2hndWlkZS5odG1sCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9hcmNoL3Bvd2VycGMuaW4uMiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2FyY2gvcG93ZXJwYy5pbi4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYmMzNzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9hcmNoL3Bvd2VycGMuaW4uMgpAQCAtMCwwICsxLDQyIEBACisjIHBvd2VycGMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlCisKK2NvbmZpZyBBUkNIX3Bvd2VycGNfQUJJCisgICAgc3RyaW5nCisgICAgZGVmYXVsdCAiIiAgICAgaWYgQVJDSF9wb3dlcnBjX0FCSV9ERUZBVUxUCisgICAgZGVmYXVsdCAiZWFiaSIgaWYgQVJDSF9wb3dlcnBjX0FCSV9FQUJJCisgICAgZGVmYXVsdCAic3BlIiAgaWYgQVJDSF9wb3dlcnBjX0FCSV9TUEUKKworY2hvaWNlCisgICAgYm9vbAorICAgIHByb21wdCAiQUJJIgorICAgIGRlZmF1bHQgQVJDSF9wb3dlcnBjX0FCSV9ERUZBVUxUCisKK2NvbmZpZyBBUkNIX3Bvd2VycGNfQUJJX0RFRkFVTFQKKyAgICBib29sCisgICAgcHJvbXB0ICJkZWZhdWx0IgorICAgIGhlbHAKKyAgICAgIFRoZSBkZWZhdWx0IEFCSSAoU3lzdGVtIFYuNCkuCisKK2NvbmZpZyBBUkNIX3Bvd2VycGNfQUJJX0VBQkkKKyAgICBib29sCisgICAgcHJvbXB0ICJFQUJJIgorICAgIGRlcGVuZHMgb24gQkFSRV9NRVRBTAorICAgIGhlbHAKKyAgICAgIFRoZSBFbWJlZGRlZCBBQkkgKHN0YWNrIGFsaWdubWVudCBvZiA4IGJ5dGVzLCBldGMpLgorCitjb25maWcgQVJDSF9wb3dlcnBjX0FCSV9TUEUKKyAgICBib29sCisgICAgcHJvbXB0ICJTUEUiCisgICAgaGVscAorICAgICAgQWRkIHN1cHBvcnQgZm9yIHRoZSBTaWduYWwgUHJvY2Vzc2luZyBFbmdpbmUuICBUaGlzIHdpbGwgc2V0IHVwCisgICAgICB0aGUgdG9vbGNoYWluIHNvIHRoYXQgaXQgc3VwcG9ydHMgdGhlIFNQRSBBQkkgZXh0ZW5zaW9ucy4gVGhpcworICAgICAgbWFpbmx5IHRhcmdldHMgRnJlZXNjYWxlIGU1MDAgcHJvY2Vzc29ycy4KKyAgICAgIAorICAgICAgU2V0dGluZyB0aGlzIG9wdGlvbiB3aWxsIGFwcGVuZCAic3BlIiB0byB0aGUgZW5kIG9mIHlvdXIgdGFyZ2V0CisgICAgICB0dXBsZSBuYW1lIChlLmcuLCBwb3dlcnBjLWU1MDB2Mi1saW51eC1nbnVzcGUpIHNvIHRoYXQgdGhlIGdjYworICAgICAgY29uZmlndXJlL2J1aWxkIHN5c3RlbSB3aWxsIGtub3cgdG8gaW5jbHVkZSBTUEUgQUJJIHN1cHBvcnQuIEl0CisgICAgICB3aWxsIGFsc28gYXV0b21hdGljYWxseSBhZGQgIi1tYWJpPXNwZSAtbXNwZSIgdG8geW91ciBUQVJHRVRfQ0ZMQUdTLAorICAgICAgYW5kICItLWVuYWJsZS1lNTAwX2RvdWJsZSIgdG8geW91ciBDQ19FWFRSQV9DT05GSUdfQVJSQVksIHNvIHlvdQorICAgICAgZG8gbm90IG5lZWQgdG8gZXhwbGljaXRseSBhZGQgdGhlbS4KKworZW5kY2hvaWNlCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9hcmNoL3MzOTAuaW4gYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9hcmNoL3MzOTAuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRjZGYyZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2FyY2gvczM5MC5pbgpAQCAtMCwwICsxLDEzIEBACisjIHMzOTAgc3BlY2lmaWMgY29uZmlnIG9wdGlvbnMKKworIyMgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKyMjCisjIyBzZWxlY3QgQVJDSF9TVVBQT1JUU18zMgorIyMgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfNjQKKyMjIHNlbGVjdCBBUkNIX0RFRkFVTFRfMzIKKyMjIHNlbGVjdCBBUkNIX1VTRV9NTVUKKyMjIHNlbGVjdCBBUkNIX1NVUFBPUlRfRlBVCisjIworIyMgaGVscCBEZWZpbmVkIGJ5IElCTSBpbjoKKyMjIGhlbHAgICAgIDMyLWJpdCBFU0EvMzkwICAgICAgIDogaHR0cDovL3B1YmxpYmZwLmJvdWxkZXIuaWJtLmNvbS9jZ2ktYmluL2Jvb2ttZ3IvQk9PS1MvZHo5YXIwMDgvQ0NPTlRFTlRTCisjIyBoZWxwICAgICA2NC1iaXQgei9BcmNoaXRlY3VyZSA6IGh0dHA6Ly9wdWJsaWJmcC5ib3VsZGVyLmlibS5jb20vY2dpLWJpbi9ib29rbWdyL0JPT0tTL2R6OXpyMDAyL0NDT05URU5UUwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvYXJjaC9zaC5pbiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2FyY2gvc2guaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhkMzEyMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2FyY2gvc2guaW4KQEAgLTAsMCArMSwxMCBAQAorIyBTdXBlci1IIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZQorCisjIyBzZWxlY3QgQVJDSF9TVVBQT1JUU18zMgorIyMgc2VsZWN0IEFSQ0hfREVGQVVMVF8zMgorIyMgc2VsZWN0IEFSQ0hfVVNFX01NVQorIyMgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfQk9USF9FTkRJQU4KKyMjIHNlbGVjdCBBUkNIX0RFRkFVTFRfTEUKKyMjCisjIyBoZWxwIFRoZSBTdXBlci1IIGFyY2hpdGVjdHVyZSwgYXMgZGVmaW5lZCBieToKKyMjIGhlbHAgICAgIGh0dHA6Ly93d3cucmVuZXNhcy5jb20vZm13ay5qc3A/Y250PXN1cGVyaF9mYW1pbHlfbGFuZGluZy5qc3AmZnA9L3Byb2R1Y3RzL21wdW1jdS9zdXBlcmhfZmFtaWx5LwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvYXJjaC9zaC5pbi4yIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvYXJjaC9zaC5pbi4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyODU2ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9hcmNoL3NoLmluLjIKQEAgLTAsMCArMSwyNSBAQAorIyBTdXBlci1IIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZQorCitjaG9pY2UKKyAgICBib29sCisgICAgcHJvbXB0ICJWYXJpYW50IgorCitjb25maWcgQVJDSF9TSF9TSDMKKyAgICBib29sCisgICAgcHJvbXB0ICJzaDMiCisKK2NvbmZpZyBBUkNIX1NIX1NINAorICAgIGJvb2wKKyAgICBwcm9tcHQgInNoNCIKKworY29uZmlnIEFSQ0hfU0hfU0g0QQorICAgIGJvb2wKKyAgICBwcm9tcHQgInNoNGEiCisKK2VuZGNob2ljZQorCitjb25maWcgQVJDSF9TSF9WQVJJQU5UCisgICAgc3RyaW5nCisgICAgZGVmYXVsdCAic2gzIiAgIGlmIEFSQ0hfU0hfU0gzCisgICAgZGVmYXVsdCAic2g0IiAgIGlmIEFSQ0hfU0hfU0g0CisgICAgZGVmYXVsdCAic2g0YSIgIGlmIEFSQ0hfU0hfU0g0QQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvYXJjaC9zcGFyYy5pbiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2FyY2gvc3BhcmMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzliZjRmNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2FyY2gvc3BhcmMuaW4KQEAgLTAsMCArMSwxMiBAQAorIyBTUEFSQyBzcGVjaWZpYyBjb25maWcgb3B0aW9ucworCisjIyBzZWxlY3QgQVJDSF9TVVBQT1JUU18zMgorIyMgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfNjQKKyMjIHNlbGVjdCBBUkNIX0RFRkFVTFRfMzIKKyMjIHNlbGVjdCBBUkNIX1VTRV9NTVUKKyMjIHNlbGVjdCBBUkNIX1NVUFBPUlRfQ1BVCisjIyBzZWxlY3QgQVJDSF9TVVBQT1JUX1RVTkUKKyMjCisjIyBoZWxwIFRoZSBTVU4gU1BBUkMgYXJjaGl0ZWN0dXJlLCBhcyBkZWZpbmVkIGJ5OgorIyMgaGVscCAgICAgMzIgYml0OiBodHRwOi8vd3d3LnNwYXJjLm9yZy9zdGFuZGFyZHMvVjgucGRmCisjIyBoZWxwICAgICA2NCBiaXQ6IGh0dHA6Ly93d3cuc3BhcmMub3JnL3N0YW5kYXJkcy9TUEFSQ1Y5LnBkZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvYXJjaC94ODYuaW4gYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9hcmNoL3g4Ni5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGRhMmZlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvYXJjaC94ODYuaW4KQEAgLTAsMCArMSwxMyBAQAorIyB4ODYgc3BlY2lmaWMgb3B0aW9ucworCisjIyBzZWxlY3QgQVJDSF9TVVBQT1JUU18zMgorIyMgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfNjQKKyMjIHNlbGVjdCBBUkNIX0RFRkFVTFRfMzIKKyMjIHNlbGVjdCBBUkNIX1VTRV9NTVUKKyMjIHNlbGVjdCBBUkNIX1NVUFBPUlRfQVJDSAorIyMgc2VsZWN0IEFSQ0hfU1VQUE9SVF9DUFUKKyMjIHNlbGVjdCBBUkNIX1NVUFBPUlRfVFVORQorIyMKKyMjIGhlbHAgVGhlIHg4NiBhcmNoaXRlY3R1cmUsIGFzIGRlZmluZWQgYnk6CisjIyBoZWxwICAgICAzMi1iaXQgKGlhMzIpIDogaHR0cDovL3d3dy5pbnRlbC5jb20vCisjIyBoZWxwICAgICA2NC1iaXQgKGFtZDY0KTogaHR0cDovL3d3dy5hbWQuY29tL3VzLWVuL1Byb2Nlc3NvcnMvRGV2ZWxvcFdpdGhBTUQvMCwsMzBfMjI1Ml84NzVfNzA0NCwwMC5odG1sCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9iYWNrZW5kLmluIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvYmFja2VuZC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTNlMWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvYmFja2VuZC5pbgpAQCAtMCwwICsxLDIxIEBACisjIE9wdGlvbnMgc3BlY2lmaWMgdG8gY3Jvc3N0b29sLU5HIGFjdGluZyBhcyBhIGJhY2tlbmQKKworY29uZmlnIElTX0FfQkFDS0VORAorICAgIHN0cmluZworICAgIG9wdGlvbiBlbnY9IkNUX0lTX0FfQkFDS0VORCIKKworY29uZmlnIEJBQ0tFTkQKKyAgICBib29sCisgICAgZGVmYXVsdCB5IGlmIElTX0FfQkFDS0VORCA9ICJ5IiB8fCBJU19BX0JBQ0tFTkQgPSAiWSIKKworY29uZmlnIEJBQ0tFTkRfQVJDSAorICAgIHN0cmluZworICAgIG9wdGlvbiBlbnY9IkNUX0JBQ0tFTkRfQVJDSCIKKworY29uZmlnIEJBQ0tFTkRfS0VSTkVMCisgICAgc3RyaW5nCisgICAgb3B0aW9uIGVudj0iQ1RfQkFDS0VORF9LRVJORUwiCisKK2NvbmZpZyBCQUNLRU5EX0xJQkMKKyAgICBzdHJpbmcKKyAgICBvcHRpb24gZW52PSJDVF9CQUNLRU5EX0xJQkMiCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9iaW51dGlscy5pbiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2JpbnV0aWxzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMjY5YmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9iaW51dGlscy5pbgpAQCAtMCwwICsxLDQ1IEBACisjIEJpbmFyeSB1dGlsaXRpZXMgbWVudQorCittZW51ICJCaW5hcnkgdXRpbGl0aWVzIgorCitjaG9pY2UKKyAgICBib29sCisgICAgcHJvbXB0ICJCaW5hcnkgZm9ybWF0OiIKKworaWYgQVJDSF9VU0VfTU1VIHx8IEJBUkVfTUVUQUwKKworY29uZmlnIEFSQ0hfQklORk1UX0VMRgorICAgIGJvb2wKKyAgICBwcm9tcHQgIkVMRiIKKyAgICBoZWxwCisgICAgICBUaGlzIHdpbGwgbWFrZSB5b3VyIHN5c3RlbSBidWlsZCBFTEYgZXhlY3V0YWJsZXMsCisgICAgICBzdWl0YWJsZSBmb3IgYXJjaGl0ZWN0dXJlcyB3aXRoIGFuIE1NVS4KKworZW5kaWYgIyBBUkNIX1VTRV9NTVUKKworaWYgISBBUkNIX1VTRV9NTVUKKworY29uZmlnIEFSQ0hfQklORk1UX0ZMQVQKKyAgICBib29sCisgICAgcHJvbXB0ICJGbGF0IgorICAgIGhlbHAKKyAgICAgIFRoaXMgd2lsbCBidWlsZCBmbGF0IGJpbmFyaWVzLCBzdWl0YWJsZSBmb3IKKyAgICAgIE1NVS1sZXNzIGFyY2hpdGVjdHVyZXMuCisKK2NvbmZpZyBBUkNIX0JJTkZNVF9GRFBJQworICAgIGJvb2wKKyAgICBwcm9tcHQgIkZEX1BJQyBFTEYiCisgICAgaGVscAorICAgICAgVGhpcyB3aWxsIGJ1aWxkIEZEX1BJQyBFTEYgYmluYXJpZXMsIHN1aXRhYmxlIGZvcgorICAgICAgTU1VLWxlc3MgYXJjaGl0ZWN0dXJlcyB0aGF0IHN0aWxsIHJlcXVpcmUgdG8gdXNlCisgICAgICBzaGFyZWQgbGlicmFyaWVzIChGSVhNRSkuCisKK2VuZGlmICMgISBBUkNIX1VTRV9NTVUKKworZW5kY2hvaWNlCisKK3NvdXJjZSAiY29uZmlnL2JpbnV0aWxzL2JpbnV0aWxzLmluIgorc291cmNlICJjb25maWcvYmludXRpbHMvZWxmMmZsdC5pbiIKK3NvdXJjZSAiY29uZmlnL2JpbnV0aWxzL3NzdHJpcC5pbiIKKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvYmludXRpbHMvYmludXRpbHMuaW4gYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9iaW51dGlscy9iaW51dGlscy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjI1NzEwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvYmludXRpbHMvYmludXRpbHMuaW4KQEAgLTAsMCArMSwyNDUgQEAKKyMgYmludXRpbHMgb3B0aW9ucworCitjb21tZW50ICJHTlUgYmludXRpbHMiCisKK2Nob2ljZQorICAgIGJvb2wKKyAgICBwcm9tcHQgImJpbnV0aWxzIHZlcnNpb24iCisjIERvbid0IHJlbW92ZSBuZXh0IGxpbmUKKyMgQ1RfSU5TRVJUX1ZFUlNJT05fQkVMT1cKKworY29uZmlnIEJJTlVUSUxTX1ZfMl8yMV81MworICAgIGJvb2wKKyAgICBwcm9tcHQgIjIuMjEuNTMgKEVYUEVSSU1FTlRBTCkiCisgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKyAgICBzZWxlY3QgQklOVVRJTFNfMl8yMV9vcl9sYXRlcgorCitjb25maWcgQklOVVRJTFNfVl8yXzIxXzFhCisgICAgYm9vbAorICAgIHByb21wdCAiMi4yMS4xYSIKKyAgICBzZWxlY3QgQklOVVRJTFNfMl8yMV9vcl9sYXRlcgorCitjb25maWcgQklOVVRJTFNfVl8yXzIwXzFhCisgICAgYm9vbAorICAgIHByb21wdCAiMi4yMC4xYSIKKyAgICBzZWxlY3QgQklOVVRJTFNfMl8yMF9vcl9sYXRlcgorCitjb25maWcgQklOVVRJTFNfVl8yXzE5XzFhCisgICAgYm9vbAorICAgIHByb21wdCAiMi4xOS4xYSIKKyAgICBzZWxlY3QgQklOVVRJTFNfMl8xOV9vcl9sYXRlcgorCitjb25maWcgQklOVVRJTFNfVl8yXzE4YQorICAgIGJvb2wKKyAgICBwcm9tcHQgIjIuMThhIgorICAgIHNlbGVjdCBCSU5VVElMU18yXzE4X29yX2xhdGVyCisKK2NvbmZpZyBCSU5VVElMU19WXzJfMTdhCisgICAgYm9vbAorICAgIHByb21wdCAiMi4xN2EgKE9CU09MRVRFKSIKKyAgICBkZXBlbmRzIG9uIE9CU09MRVRFCisKK2NvbmZpZyBCSU5VVElMU19WXzJfMTZfMWEKKyAgICBib29sCisgICAgcHJvbXB0ICIyLjE2LjFhIChPQlNPTEVURSkiCisgICAgZGVwZW5kcyBvbiBPQlNPTEVURQorCitlbmRjaG9pY2UKKworY29uZmlnIEJJTlVUSUxTX1ZFUlNJT04KKyAgICBzdHJpbmcKKyMgRG9uJ3QgcmVtb3ZlIG5leHQgbGluZQorIyBDVF9JTlNFUlRfVkVSU0lPTl9TVFJJTkdfQkVMT1cKKyAgICBkZWZhdWx0ICIyLjIxLjUzIiBpZiBCSU5VVElMU19WXzJfMjFfNTMKKyAgICBkZWZhdWx0ICIyLjIxLjFhIiBpZiBCSU5VVElMU19WXzJfMjFfMWEKKyAgICBkZWZhdWx0ICIyLjIwLjFhIiBpZiBCSU5VVElMU19WXzJfMjBfMWEKKyAgICBkZWZhdWx0ICIyLjE5LjFhIiBpZiBCSU5VVElMU19WXzJfMTlfMWEKKyAgICBkZWZhdWx0ICIyLjE4YSIgaWYgQklOVVRJTFNfVl8yXzE4YQorICAgIGRlZmF1bHQgIjIuMTdhIiBpZiBCSU5VVElMU19WXzJfMTdhCisgICAgZGVmYXVsdCAiMi4xNi4xYSIgaWYgQklOVVRJTFNfVl8yXzE2XzFhCisKK2NvbmZpZyBCSU5VVElMU18yXzIxX29yX2xhdGVyCisgICAgYm9vbAorICAgIHNlbGVjdCBCSU5VVElMU18yXzIwX29yX2xhdGVyCisgICAgc2VsZWN0IEJJTlVUSUxTX0hBU19HT0xECisgICAgc2VsZWN0IEJJTlVUSUxTX0hBU19QTFVHSU5TCisKK2NvbmZpZyBCSU5VVElMU18yXzIwX29yX2xhdGVyCisgICAgYm9vbAorICAgIHNlbGVjdCBCSU5VVElMU18yXzE5X29yX2xhdGVyCisKK2NvbmZpZyBCSU5VVElMU18yXzE5X29yX2xhdGVyCisgICAgYm9vbAorICAgIHNlbGVjdCBCSU5VVElMU18yXzE4X29yX2xhdGVyCisKK2NvbmZpZyBCSU5VVElMU18yXzE4X29yX2xhdGVyCisgICAgYm9vbAorICAgIHNlbGVjdCBCSU5VVElMU19IQVNfUEtHVkVSU0lPTl9CVUdVUkwKKworY29uZmlnIEJJTlVUSUxTX0hBU19HT0xECisgICAgYm9vbAorCitjb25maWcgQklOVVRJTFNfR09MRF9TVVBQT1JUU19BUkNICisgICAgYm9vbAorCitjb25maWcgQklOVVRJTFNfSEFTX1BMVUdJTlMKKyAgICBib29sCisKK2NvbmZpZyBCSU5VVElMU19IQVNfUEtHVkVSU0lPTl9CVUdVUkwKKyAgICBib29sCisKKyMgT25seSB0aGVzZSBhcmNoaXRlY3R1cmVzIGhhdmUgc3VwcG9ydCBpbiBnb2xkCitjb25maWcgQVJDSF9hcm0KKyAgICBzZWxlY3QgQklOVVRJTFNfR09MRF9TVVBQT1JUU19BUkNICisKK2NvbmZpZyBBUkNIX3g4NgorICAgIHNlbGVjdCBCSU5VVElMU19HT0xEX1NVUFBPUlRTX0FSQ0gKKworIyBGb3JjZSB1c2luZyB0aGUgQkZEIGxpbmtlciBpZiBuZWVkZWQKKyMgVGhpcyBpcyB0aGUgY2FzZSBmb3Igc29tZSBDIGxpYnJhcmllcyAoZWcuIGdsaWJjIGFuZAorIyBlZ2xpYmMgYXQgbGVhc3QpIGFuZCBhZmZlY3RlZCBjb21wb25lbnRzIGNhbiBzZWxlY3QgdGhpcworY29uZmlnIEJJTlVUSUxTX0ZPUkNFX0xEX0JGRAorICAgIGJvb2wKKworY2hvaWNlCisgICAgYm9vbAorICAgIHByb21wdCAiTGlua2VycyB0byBlbmFibGUiCisKK2NvbmZpZyBCSU5VVElMU19MSU5LRVJfTEQKKyAgICBib29sCisgICAgcHJvbXB0ICJsZCIKKyAgICBoZWxwCisgICAgICBUaGUgaGlzdG9yaWNhbCwgYmZkIGxpbmtlci4KKworY29uZmlnIEJJTlVUSUxTX0xJTktFUl9HT0xECisgICAgYm9vbAorICAgIHByb21wdCAiZ29sZCIKKyAgICBkZXBlbmRzIG9uIEJJTlVUSUxTX0hBU19HT0xECisgICAgZGVwZW5kcyBvbiBCSU5VVElMU19HT0xEX1NVUFBPUlRTX0FSQ0gKKyAgICBkZXBlbmRzIG9uICEgQklOVVRJTFNfRk9SQ0VfTERfQkZECisgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKyAgICBzZWxlY3QgQklOVVRJTFNfR09MRF9JTlNUQUxMRUQKKyAgICBoZWxwCisgICAgICBnb2xkIGlzIGEgbmV3LCBvcHRpbWlzZWQsIG11bHRpLXRocmVhZGVkIGxpbmtlciB3aXRoIHN1cHBvcnQKKyAgICAgIGZvciBwbHVnaW5zLiBEZXNpZ25lZCB0byBiZSBhIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHRoZQorICAgICAgb3JpZ2luYWwgbGlua2VyLCBsZCwgaXQgY2FuIGJlIG11Y2ggZmFzdGVyLCB3aXRoIGEgNToxIG9yCisgICAgICBiaWdnZXIgcmF0aW8gYmVpbmcgbm90IHVuY29tbW9uLCBZTU1WLgorCitjb25maWcgQklOVVRJTFNfTElOS0VSX0xEX0dPTEQKKyAgICBib29sCisgICAgcHJvbXB0ICJsZCwgZ29sZCIKKyAgICBkZXBlbmRzIG9uIEJJTlVUSUxTX0hBU19HT0xECisgICAgZGVwZW5kcyBvbiBCSU5VVElMU19HT0xEX1NVUFBPUlRTX0FSQ0gKKyAgICBkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorICAgIHNlbGVjdCBCSU5VVElMU19HT0xEX0lOU1RBTExFRAorICAgIHNlbGVjdCBCSU5VVElMU19MSU5LRVJfQk9USAorICAgIGhlbHAKKyAgICAgIEJvdGggdGhlIGhpc3RvcmljYWwgbGQgYW5kIHRoZSBuZXcgZ29sZCBsaW5rZXJzIHdpbGwgYmUKKyAgICAgIGluc3RhbGxlZCwgd2l0aCBsZCBiZWluZyB0aGUgZGVmYXVsdCBsaW5rZXIgdXNlZC4KKyAgICAgIAorICAgICAgU2VlIGhlbHAgZm9yIGdvbGQsIGFib3ZlLgorCitjb25maWcgQklOVVRJTFNfTElOS0VSX0dPTERfTEQKKyAgICBib29sCisgICAgcHJvbXB0ICJnb2xkLCBsZCIKKyAgICBkZXBlbmRzIG9uIEJJTlVUSUxTX0hBU19HT0xECisgICAgZGVwZW5kcyBvbiBCSU5VVElMU19HT0xEX1NVUFBPUlRTX0FSQ0gKKyAgICBkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorICAgIHNlbGVjdCBCSU5VVElMU19HT0xEX0lOU1RBTExFRAorICAgIHNlbGVjdCBCSU5VVElMU19MSU5LRVJfQk9USAorICAgIHNlbGVjdCBCSU5VVElMU19MRF9XUkFQUEVSIGlmIEJJTlVUSUxTX0ZPUkNFX0xEX0JGRAorICAgIGhlbHAKKyAgICAgIEJvdGggdGhlIGhpc3RvcmljYWwgbGQgYW5kIHRoZSBuZXcgZ29sZCBsaW5rZXJzIHdpbGwgYmUKKyAgICAgIGluc3RhbGxlZCwgd2l0aCBnb2xkIGJlaW5nIHRoZSBkZWZhdWx0IGxpbmtlciB1c2VkLgorICAgICAgCisgICAgICBTZWUgaGVscCBmb3IgZ29sZCwgYWJvdmUuCisKK2VuZGNob2ljZSAjIEVuYWJsZSBsaW5rZXJzCisKK2lmIEJJTlVUSUxTX0xJTktFUl9HT0xECitjb21tZW50ICJXQVJOSU5HISBnb2xkIGlzIG5vdCBjYXBhYmxlIG9mIgorY29tbWVudCAifCAgICAgICAgIGJ1aWxkaW5nIGdsaWJjL2VnbGliYyEiCitlbmRpZiAjIEJJTlVUSUxTX0xJTktFUl9HT0xECisKK2NvbmZpZyBCSU5VVElMU19HT0xEX0lOU1RBTExFRAorICAgIGJvb2wKKworY29uZmlnIEJJTlVUSUxTX0dPTERfVEhSRUFEUworICAgIGJvb2wKKyAgICBwcm9tcHQgInwgIEVuYWJsZSB0aHJlYWRlZCBnb2xkIgorICAgIGRlcGVuZHMgb24gQklOVVRJTFNfR09MRF9JTlNUQUxMRUQKKyAgICBoZWxwCisgICAgICBXaGVuIGNvbmZpZ3VyZWQgd2l0aCB0aHJlYWRzLCBnb2xkIGNhbiBsaW5rIGluIHBhcmFsbGVsLAorICAgICAgcG9zc2libHkgY29vcGVyYXRpbmcgd2l0aCBhIG1ha2Ugam9ic2VydmVyLgorCitjb25maWcgQklOVVRJTFNfTElOS0VSX0JPVEgKKyAgICBib29sCisKK2NvbmZpZyBCSU5VVElMU19MSU5LRVJTX0xJU1QKKyAgICBzdHJpbmcKKyAgICBkZWZhdWx0ICJsZCIgICAgICAgIGlmIEJJTlVUSUxTX0xJTktFUl9MRAorICAgIGRlZmF1bHQgImdvbGQiICAgICAgaWYgQklOVVRJTFNfTElOS0VSX0dPTEQKKyAgICBkZWZhdWx0ICJsZCxnb2xkIiAgIGlmIEJJTlVUSUxTX0xJTktFUl9MRF9HT0xECisgICAgZGVmYXVsdCAiZ29sZCxsZCIgICBpZiBCSU5VVElMU19MSU5LRVJfR09MRF9MRAorCitjb25maWcgQklOVVRJTFNfTERfV1JBUFBFUgorICAgIGJvb2wKKyAgICBwcm9tcHQgInwgIEFkZCBsZCB3cmFwcGVyIgorICAgIGRlcGVuZHMgb24gQklOVVRJTFNfTElOS0VSX0JPVEgKKyAgICBoZWxwCisgICAgICBBZGQgYW4gbGQgd3JhcHBlciB0aGF0IGNhbGxzIHRvIGVpdGhlciBnb2xkIG9yIGxkLgorICAgICAgCisgICAgICBCeSBkZWZhdWx0LCB0aGUgd3JhcHBlciB3aWxsIGNhbGwgdG8gdGhlIGRlZmF1bHQgd3JhcHBlciwKKyAgICAgIGJ1dCBpZiB5b3Ugc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBDVE5HX0xEX0lTLCB5b3UKKyAgICAgIGNhbiBjaGFuZ2Ugd2hpY2ggbGlua2VyIHdpbGwgZ2V0IGNhbGxlZDoKKyAgICAgICAgQ1ROR19MRF9JUz1nb2xkICAgICB3aWxsIHVuY29uZGl0aW9uYWxseSBjYWxsIHRoZSBnb2xkIGxpbmtlcgorICAgICAgICBDVE5HX0xEX0lTPWJmZCAgICAgIHdpbGwgdW5jb25kaXRpb25hbGx5IGNhbGwgdGhlIG9sZCBiZmQgbGQgbGlua2VyCisKK2NvbmZpZyBCSU5VVElMU19MSU5LRVJfREVGQVVMVAorICAgIHN0cmluZworICAgIGRlZmF1bHQgImJmZCIgICBpZiBCSU5VVElMU19MSU5LRVJfTEQgfHwgQklOVVRJTFNfTElOS0VSX0xEX0dPTEQKKyAgICBkZWZhdWx0ICJnb2xkIiAgaWYgQklOVVRJTFNfTElOS0VSX0dPTEQgfHwgQklOVVRJTFNfTElOS0VSX0dPTERfTEQKKworY29uZmlnIEJJTlVUSUxTX1BMVUdJTlMKKyAgICBib29sCisgICAgcHJvbXB0ICJFbmFibGUgc3VwcG9ydCBmb3IgcGx1Z2lucyIKKyAgICBkZXBlbmRzIG9uIEJJTlVUSUxTX0hBU19QTFVHSU5TCisgICAgZGVwZW5kcyBvbiAhIFNUQVRJQ19UT09MQ0hBSU4KKyAgICBoZWxwCisgICAgICBiaW51dGlscyBjYW4gYmUgZXh0ZW5kZWQgdGhyb3VnaCB0aGUgdXNlIG9mIHBsdWdpbnMuCisgICAgICBFc3BlY2lhbGx5LCBnb2xkIGNhbiB1c2UgdGhlIGx0by1wbHVnaW4sIGFzIGluc3RhbGxlZAorICAgICAgYnkgZ2NjLCB0byBoYW5kbGUgTFRPLgorCitjb25maWcgQklOVVRJTFNfRVhUUkFfQ09ORklHX0FSUkFZCisgICAgc3RyaW5nCisgICAgcHJvbXB0ICJiaW51dGlscyBleHRyYSBjb25maWciCisgICAgZGVmYXVsdCAiIgorICAgIGhlbHAKKyAgICAgIEV4dHJhIGZsYWdzIHBhc3NlZCBvbnRvIC4vY29uZmlndXJlIHdoZW4gY29uZmlndXJpbmcKKyAgICAgIAorICAgICAgWW91IGNhbiBlbnRlciBtdWx0aXBsZSBhcmd1bWVudHMgaGVyZSwgYW5kIGFyZ3VtZW50cyBjYW4gY29udGFpbiBzcGFjZXMKKyAgICAgIGlmIHRoZXkgYXJlIHByb3Blcmx5IHF1b3RlZCAob3IgZXNjYXBlZCwgYnV0IHByZWZlciBxdW90ZXMpLiBFZy46CisgICAgICAgICAgLS13aXRoLWZvbz0iMXN0IGFyZyB3aXRoIDQgc3BhY2VzIiAtLXdpdGgtYmFyPTJuZC1hcmctd2l0aG91dC1zcGFjZQorCitjb25maWcgQklOVVRJTFNfRk9SX1RBUkdFVAorICAgIGJvb2wKKyAgICBwcm9tcHQgImJpbnV0aWxzIGxpYnJhcmllcyBmb3IgdGhlIHRhcmdldCIKKyAgICBkZXBlbmRzIG9uICEgQkFSRV9NRVRBTAorICAgIGRlcGVuZHMgb24gISBCQUNLRU5ECisgICAgaGVscAorICAgICAgU29tZSB1dGlsaXRpZXMgbWF5IG5lZWQgYmludXRpbHMgbGlicmFyaWVzIHRvIGJlIGF2YWlsYWJsZSBvbgorICAgICAgdGhlIHRhcmdldCwgZWcuIG9wcm9maWxlLgorCitpZiBCSU5VVElMU19GT1JfVEFSR0VUCisKK2NvbmZpZyBCSU5VVElMU19GT1JfVEFSR0VUX0lCRVJUWQorICAgIGJvb2wKKyAgICBwcm9tcHQgImxpYmliZXJ0eSIKKyAgICBkZWZhdWx0IHkKKworY29uZmlnIEJJTlVUSUxTX0ZPUl9UQVJHRVRfQkZECisgICAgYm9vbAorICAgIHByb21wdCAibGliYmZkIgorICAgIGRlZmF1bHQgeQorCitlbmRpZiAjIEJJTlVUSUxTX0ZPUl9UQVJHRVQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2JpbnV0aWxzL2VsZjJmbHQuaW4gYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9iaW51dGlscy9lbGYyZmx0LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMTc4YTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9iaW51dGlscy9lbGYyZmx0LmluCkBAIC0wLDAgKzEsNTEgQEAKKyMgZWxmMmZsdCBvcHRpb25zCisKK2lmIEFSQ0hfQklORk1UX0ZMQVQKKworY29tbWVudCAiZWxmMmZsdCIKKworY2hvaWNlCisgICAgYm9vbAorICAgIHByb21wdCAiZWxmMmZsdCB2ZXJzaW9uIgorIyBEb24ndCByZW1vdmUgbmV4dCBsaW5lCisjIENUX0lOU0VSVF9WRVJTSU9OX0JFTE9XCisKK2NvbmZpZyBFTEYyRkxUX0NWU0hFQUQKKyAgICBib29sCisgICAgcHJvbXB0ICJDVlMgSGVhZCIKKyAgICBoZWxwCisgICAgICBHcmFiIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBlbGYyZmx0IGZyb20gdGhlIENWUyByZXBvc2l0b3J5CisKK2NvbmZpZyBFTEYyRkxUX0NWU19TTkFQU0hPVAorICAgIGJvb2wKKyAgICBwcm9tcHQgIkNWUyBTbmFwc2hvdCIKKworZW5kY2hvaWNlCisKK2NvbmZpZyBFTEYyRkxUX0NWU19TTkFQU0hPVF9TUEVDCisgICAgc3RyaW5nCisgICAgZGVwZW5kcyBvbiBFTEYyRkxUX0NWU19TTkFQU0hPVAorICAgIGRlZmF1bHQgIiIKKyAgICBwcm9tcHQgIkNWUyByZWZzcGVjIGZvciBlbGYyZmx0IgorICAgIGhlbHAKKyAgICAgICBXaGF0IHlvdSBlbnRlciBoZXJlIHdpbGwgYmUgcGFzc2VkIHZlcmJhdGltIHRvIHRoZSBjdnMgY2hlY2tvdXQgY29tbWFuZAorICAgICAgIHNvIGJlIGNhcmVmdWwhCisKK2NvbmZpZyBFTEYyRkxUX1ZFUlNJT04KKyAgICBzdHJpbmcKKyAgICBkZWZhdWx0ICJoZWFkIiBpZiBFTEYyRkxUX0NWU0hFQUQKKyMgRG9uJ3QgcmVtb3ZlIG5leHQgbGluZQorIyBDVF9JTlNFUlRfVkVSU0lPTl9TVFJJTkdfQkVMT1cKKworY29uZmlnIEVMRjJGTFRfRVhUUkFfQ09ORklHX0FSUkFZCisgICAgc3RyaW5nCisgICAgcHJvbXB0ICJlbGYyZmx0IGV4dHJhIGNvbmZpZyIKKyAgICBkZWZhdWx0ICIiCisgICAgaGVscAorICAgICAgRXh0cmEgZmxhZ3MgcGFzc2VkIG9udG8gLi9jb25maWd1cmUgd2hlbiBjb25maWd1cmluZworICAgICAgCisgICAgICBZb3UgY2FuIGVudGVyIG11bHRpcGxlIGFyZ3VtZW50cyBoZXJlLCBhbmQgYXJndW1lbnRzIGNhbiBjb250YWluIHNwYWNlcworICAgICAgaWYgdGhleSBhcmUgcHJvcGVybHkgcXVvdGVkIChvciBlc2NhcGVkLCBidXQgcHJlZmVyIHF1b3RlcykuIEVnLjoKKyAgICAgICAgICAtLXdpdGgtZm9vPSIxc3QgYXJnIHdpdGggNCBzcGFjZXMiIC0td2l0aC1iYXI9Mm5kLWFyZy13aXRob3V0LXNwYWNlCisKK2VuZGlmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9iaW51dGlscy9zc3RyaXAuaW4gYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9iaW51dGlscy9zc3RyaXAuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVkZmM5MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2JpbnV0aWxzL3NzdHJpcC5pbgpAQCAtMCwwICsxLDIzIEBACisjIENvbmZpZ3VyYXRpb24gZmlsZSBmb3Igc3N0cmlwIHRvb2wgZmFjaWxpdHkKKworaWYgT0JTT0xFVEUgJiYgISBCQUNLRU5EICYmIEFSQ0hfQklORk1UX0VMRgorCitjb21tZW50ICJzc3RyaXAiCisKK2NvbmZpZyBTU1RSSVAKKyAgICBib29sCisgICAgcHJvbXB0ICJzc3RyaXAgKE9CU09MRVRFKSIKKyAgICBoZWxwCisgICAgICBUaGUgc3N0cmlwIHV0aWxpdHksIHRvIG1heGltaXNlIHRoZSBzdHJpcGluZyBvZiBFTEYgYmluYXJpZXMKKyAgICAgIChleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzKS4KKyAgICAgIAorICAgICAgQnVpbGRyb290IHZlcnNpb24sIGZvcmtlZCBvZmYgdGhlIG9yaWdpbmFsIGZyb20gRUxGa2lja2Vycy4KKyAgICAgIFRoaXMgb25lIGlzIHNvbWV3aGF0IG1haW50YWluZWQgYnkgdGhlIGJ1aWxkcm9vdCBndXlzLgorICAgICAgU3VwcG9ydHMgYmlnLWVuZGlhbiBzeXN0ZW1zLgorICAgICAgCisgICAgICBOT1RFISBQbGVhc2UgcmVhZC4KKyAgICAgICAgc3N0cmlwIGlzIG5vdyBkZXByZWNhdGVkIGluIGNyb3NzdG9vbC1ORywgYXMgaXQgaGFzIGEgZmV3CisgICAgICAgIHNob3J0Y29taW5ncy4gRm9yIGV4YW1wbGU6IGl0IGJyZWFrcyBmb3IgUFBDIHRhcmdldHMsIGl0CisgICAgICAgIGRvZXMgbm90IGJ1aWxkIG9uIG5vbi1FTEYgaG9zdHMgKGVnLiBtaW5ndzMyLCBNYWNPUy1YLi4uKS4KKworZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2NjLmluIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvY2MuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgwYWZiOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2NjLmluCkBAIC0wLDAgKzEsMTE0IEBACisjIENvbXBpbGVyIG9wdGlvbnMKKworbWVudSAiQyBjb21waWxlciIKKworY29uZmlnIENDCisgICAgc3RyaW5nCisKK2NvbmZpZyBDQ19WRVJTSU9OCisgICAgc3RyaW5nCisKK3NvdXJjZSAiY29uZmlnLmdlbi9jYy5pbiIKKworY29uZmlnIENDX1NVUFBPUlRfQ1hYCisgICAgYm9vbAorCitjb25maWcgQ0NfU1VQUE9SVF9GT1JUUkFOCisgICAgYm9vbAorCitjb25maWcgQ0NfU1VQUE9SVF9KQVZBCisgICAgYm9vbAorCitjb25maWcgQ0NfU1VQUE9SVF9BREEKKyAgICBib29sCisKK2NvbmZpZyBDQ19TVVBQT1JUX09CSkMKKyAgICBib29sCisKK2NvbmZpZyBDQ19TVVBQT1JUX09CSkNYWAorICAgIGJvb2wKKworY29tbWVudCAiQWRkaXRpb25hbCBzdXBwb3J0ZWQgbGFuZ3VhZ2VzOiIKKworY29uZmlnIENDX0xBTkdfQ1hYCisgICAgYm9vbAorICAgIHByb21wdCAiQysrIgorICAgIGRlcGVuZHMgb24gQ0NfU1VQUE9SVF9DWFgKKyAgICBoZWxwCisgICAgICBFbmFibGUgYnVpbGRpbmcgYSBDKysgY29tcGlsZXIuCisKKyAgICAgIE9ubHkgc2VsZWN0IHRoaXMgaWYgeW91IGtub3cgdGhhdCB5b3VyIHNwZWNpZmljIHZlcnNpb24gb2YgdGhlCisgICAgICBjb21waWxlciBzdXBwb3J0cyB0aGlzIGxhbmd1YWdlLgorCitpZiAhIEJBUkVfTUVUQUwKKworY29uZmlnIENDX0xBTkdfRk9SVFJBTgorICAgIGJvb2wKKyAgICBwcm9tcHQgIkZvcnRyYW4iCisgICAgZGVwZW5kcyBvbiBDQ19TVVBQT1JUX0ZPUlRSQU4KKyAgICBoZWxwCisgICAgICBFbmFibGUgYnVpbGRpbmcgYSBGT1JUUkFOIGNvbXBpbGVyLgorCisgICAgICBPbmx5IHNlbGVjdCB0aGlzIGlmIHlvdSBrbm93IHRoYXQgeW91ciBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoZQorICAgICAgY29tcGlsZXIgc3VwcG9ydHMgdGhpcyBsYW5ndWFnZS4KKworY29uZmlnIENDX0xBTkdfSkFWQQorICAgIGJvb2wKKyAgICBwcm9tcHQgIkphdmEiCisgICAgZGVwZW5kcyBvbiBDQ19TVVBQT1JUX0pBVkEKKyAgICBoZWxwCisgICAgICBFbmFibGUgYnVpbGRpbmcgYSBKYXZhIGNvbXBpbGVyLgorCisgICAgICBPbmx5IHNlbGVjdCB0aGlzIGlmIHlvdSBrbm93IHRoYXQgeW91ciBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoZQorICAgICAgY29tcGlsZXIgc3VwcG9ydHMgdGhpcyBsYW5ndWFnZS4KKworY29uZmlnIENDX0xBTkdfQURBCisgICAgYm9vbAorICAgIHByb21wdCAiQURBIChFWFBFUklNRU5UQUwpIgorICAgIGRlcGVuZHMgb24gQ0NfU1VQUE9SVF9BREEKKyAgICBkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorICAgIGhlbHAKKyAgICAgIEVuYWJsZSBidWlsZGluZyBhbiBBZGEgY29tcGlsZXIuCisKKyAgICAgIE9ubHkgc2VsZWN0IHRoaXMgaWYgeW91IGtub3cgdGhhdCB5b3VyIHNwZWNpZmljIHZlcnNpb24gb2YgdGhlCisgICAgICBjb21waWxlciBzdXBwb3J0cyB0aGlzIGxhbmd1YWdlLgorCitjb25maWcgQ0NfTEFOR19PQkpDCisgICAgYm9vbAorICAgIHByb21wdCAiT2JqZWN0aXZlLUMgKEVYUEVSSU1FTlRBTCkiCisgICAgZGVwZW5kcyBvbiBDQ19TVVBQT1JUX09CSkMKKyAgICBkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorICAgIGhlbHAKKyAgICAgIEVuYWJsZSBidWlsZGluZyBhbiBPYmplY3RpdmUgQyBjb21waWxlci4KKworICAgICAgT25seSBzZWxlY3QgdGhpcyBpZiB5b3Uga25vdyB0aGF0IHlvdXIgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGUKKyAgICAgIGNvbXBpbGVyIHN1cHBvcnRzIHRoaXMgbGFuZ3VhZ2UuCisKK2NvbmZpZyBDQ19MQU5HX09CSkNYWAorICAgIGJvb2wKKyAgICBwcm9tcHQgIk9iamVjdGl2ZS1DKysgKEVYUEVSSU1FTlRBTCkiCisgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKyAgICBkZXBlbmRzIG9uIENDX1NVUFBPUlRfT0JKQ1hYCisgICAgaGVscAorICAgICAgRW5hYmxlIGJ1aWxkaW5nIGFuIE9iamVjdGl2ZSBDKysgY29tcGlsZXIuCisKKyAgICAgIE9ubHkgc2VsZWN0IHRoaXMgaWYgeW91IGtub3cgdGhhdCB5b3VyIHNwZWNpZmljIHZlcnNpb24gb2YgdGhlCisgICAgICBjb21waWxlciBzdXBwb3J0cyB0aGlzIGxhbmd1YWdlLgorCitjb25maWcgQ0NfTEFOR19PVEhFUlMKKyAgICBzdHJpbmcKKyAgICBwcm9tcHQgIk90aGVyIGxhbmd1YWdlcyAoRVhQRVJJTUVOVEFMKSIKKyAgICBkZWZhdWx0ICIiCisgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKyAgICBoZWxwCisgICAgICBFbnRlciBoZXJlIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbGFuZ3VhZ2VzIHRoYXQgeW91IGtub3cgeW91ciBjb21waWxlcgorICAgICAgc3VwcG9ydHMsIGJlc2lkZXMgdGhvc2UgbGlzdGVkIGFib3ZlLgorCisgICAgICBFZy4gZ2NjLTQuMSsgaGFzIGEgdG95IHByb2dyYW1taW5nIGxhbmd1YWdlLCB0cmVlbGFuZy4gQXMgaXQgaXMgbm90IHVzZWZ1bAorICAgICAgaW4gcmVhbCBsaWZlLCBpdCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBzZWxlY3Rpb24gYWJvdmUuCisKK2VuZGlmICMgISBCQVJFX01FVEFMCisKK3NvdXJjZSAiY29uZmlnLmdlbi9jYy5pbi4yIgorCitlbmRtZW51CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9jYy9nY2MuaW4gYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9jYy9nY2MuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNkYmU3YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2NjL2djYy5pbgpAQCAtMCwwICsxLDM2MiBAQAorIyBDb21waWxlciBvcHRpb25zCisjCisjIyBzZWxlY3QgQ0NfU1VQUE9SVF9DWFgKKyMjIHNlbGVjdCBDQ19TVVBQT1JUX0ZPUlRSQU4KKyMjIHNlbGVjdCBDQ19TVVBQT1JUX0pBVkEKKyMjIHNlbGVjdCBDQ19TVVBQT1JUX0FEQQorIyMgc2VsZWN0IENDX1NVUFBPUlRfT0JKQworIyMgc2VsZWN0IENDX1NVUFBPUlRfT0JKQ1hYCisjIworIyMgaGVscCBnY2MgaXMgdGhlIGZ1bGwtYmxvd24gR05VIGNvbXBpbGVyLiBUaGlzIGlzIHdoYXQgbW9zdCBwZW9wbGUgd2lsbCBjaG9vc2UuCisjIyBoZWxwCisjIyBoZWxwIGdjYyBzdXBwb3J0cyBtYW55IGxhbmd1YWdlcywgYSBwb3dlcmZ1bCBjb2RlIHBhcnNlciwgb3B0aW1pc2VkIGJpbmFyeQorIyMgaGVscCBvdXRwdXQsIGFuZCBsb3RzIG9mIG90aGVyIGZlYXR1cmVzLgorCitjb25maWcgQ0NfR0NDX1NIT1dfTElOQVJPCisgICAgYm9vbAorICAgIHByb21wdCAiU2hvdyBMaW5hcm8gdmVyc2lvbnMgKEVYUEVSSU1FTlRBTCkiCisgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKyAgICBoZWxwCisgICAgICBMaW5hcm8gaXMgbWFpbnRhaW5pbmcgc29tZSBhZHZhbmNlZC9tb3JlIHN0YWJsZS9leHBlcmltZW50YWwgdmVyc2lvbnMKKyAgICAgIG9mIGdjYywgZXNwZWNpYWxseSBmb3IgdGhlIEFSTSBhcmNoaXRlY3R1cmUuCisgICAgICAKKyAgICAgIFRob3NlIHZlcnNpb25zIGhhdmUgbm90IGJlZW4gYmxlc3NlZCBieSB0aGUgZ2NjIGNvbXVuaXR5IChub3IgaGF2ZSB0aGV5CisgICAgICBiZWVuIGN1cnNlZCBlaXRoZXIhKSwgYnV0IHRoZXkgbG9vayB0byBiZSBwcmV0dHkgbXVjaCBzdGFibGUsIGFuZCBldmVuCisgICAgICBtb3JlIHN0YWJsZSB0aGFuIHRoZSB1cHN0cmVhbSB2ZXJzaW9ucy4gWU1NVi4uLgorICAgICAgCisgICAgICBJZiB5b3UgZG8gbm90IGtub3cgd2hhdCB0aGlzIExpbmFybyBzdHVmZiBpcywgdGhlbiBzaW1wbHkgc2F5ICduJyBoZXJlLAorICAgICAgYW5kIHJlc3QgaW4gcGVhY2UuIE9UT0gsIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZywgeW91IHdpbGwgYmUKKyAgICAgIGFibGUgdG8gdXNlIGFuZCBlbmpveSA6LSkgdGhlIExpbmFybyB2ZXJzaW9ucyBieSBzYXlpbmcgJ3knIGhlcmUuCisgICAgICAKKyAgICAgIExpbmFybzogaHR0cDovL3d3dy5saW5hcm8ub3JnLworCitjaG9pY2UKKyAgICBib29sCisgICAgcHJvbXB0ICJnY2MgdmVyc2lvbiIKKyMgRG9uJ3QgcmVtb3ZlIG5leHQgbGluZQorIyBDVF9JTlNFUlRfVkVSU0lPTl9CRUxPVworCitjb25maWcgQ0NfVl9saW5hcm9fNF82XzIwMTFfMTAKKyAgICBib29sCisgICAgcHJvbXB0ICJsaW5hcm8tNC42LTIwMTEuMTAgKEVYUEVSSU1FTlRBTCkiCisgICAgZGVwZW5kcyBvbiBDQ19HQ0NfU0hPV19MSU5BUk8KKyAgICBzZWxlY3QgQ0NfR0NDXzRfNgorCitjb25maWcgQ0NfVl80XzZfMQorICAgIGJvb2wKKyAgICBwcm9tcHQgIjQuNi4xIChFWFBFUklNRU5UQUwpIgorICAgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisgICAgc2VsZWN0IENDX0dDQ180XzYKKworY29uZmlnIENDX1ZfNF82XzAKKyAgICBib29sCisgICAgcHJvbXB0ICI0LjYuMCAoRVhQRVJJTUVOVEFMKSIKKyAgICBkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorICAgIHNlbGVjdCBDQ19HQ0NfNF82CisKK2NvbmZpZyBDQ19WX2xpbmFyb180XzVfMjAxMV8xMAorICAgIGJvb2wKKyAgICBwcm9tcHQgImxpbmFyby00LjUtMjAxMS4xMCAoRVhQRVJJTUVOVEFMKSIKKyAgICBkZXBlbmRzIG9uIENDX0dDQ19TSE9XX0xJTkFSTworICAgIHNlbGVjdCBDQ19HQ0NfNF81CisKK2NvbmZpZyBDQ19WXzRfNV8zCisgICAgYm9vbAorICAgIHByb21wdCAiNC41LjMgKEVYUEVSSU1FTlRBTCkiCisgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKyAgICBzZWxlY3QgQ0NfR0NDXzRfNQorCitjb25maWcgQ0NfVl80XzVfMgorICAgIGJvb2wKKyAgICBwcm9tcHQgIjQuNS4yIChFWFBFUklNRU5UQUwpIgorICAgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisgICAgc2VsZWN0IENDX0dDQ180XzUKKworY29uZmlnIENDX1ZfNF81XzEKKyAgICBib29sCisgICAgcHJvbXB0ICI0LjUuMSAoRVhQRVJJTUVOVEFMKSIKKyAgICBkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorICAgIHNlbGVjdCBDQ19HQ0NfNF81CisKK2NvbmZpZyBDQ19WXzRfNV8wCisgICAgYm9vbAorICAgIHByb21wdCAiNC41LjAgKEVYUEVSSU1FTlRBTCkiCisgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKyAgICBzZWxlY3QgQ0NfR0NDXzRfNQorCisKK2NvbmZpZyBDQ19WX2xpbmFyb180XzRfMjAxMV8wMl8wCisgICAgYm9vbAorICAgIHByb21wdCAibGluYXJvLTQuNC0yMDExLjAyLTAgKEVYUEVSSU1FTlRBTCkiCisgICAgZGVwZW5kcyBvbiBDQ19HQ0NfU0hPV19MSU5BUk8KKyAgICBzZWxlY3QgQ0NfR0NDXzRfNAorCitjb25maWcgQ0NfVl80XzRfNgorICAgIGJvb2wKKyAgICBwcm9tcHQgIjQuNC42IgorICAgIHNlbGVjdCBDQ19HQ0NfNF80CisKK2NvbmZpZyBDQ19WXzRfNF81CisgICAgYm9vbAorICAgIHByb21wdCAiNC40LjUiCisgICAgc2VsZWN0IENDX0dDQ180XzQKKworY29uZmlnIENDX1ZfNF80XzQKKyAgICBib29sCisgICAgcHJvbXB0ICI0LjQuNCIKKyAgICBzZWxlY3QgQ0NfR0NDXzRfNAorCitjb25maWcgQ0NfVl80XzRfMworICAgIGJvb2wKKyAgICBwcm9tcHQgIjQuNC4zIgorICAgIHNlbGVjdCBDQ19HQ0NfNF80CisKK2NvbmZpZyBDQ19WXzRfNF8yCisgICAgYm9vbAorICAgIHByb21wdCAiNC40LjIiCisgICAgc2VsZWN0IENDX0dDQ180XzQKKworY29uZmlnIENDX1ZfNF80XzEKKyAgICBib29sCisgICAgcHJvbXB0ICI0LjQuMSIKKyAgICBzZWxlY3QgQ0NfR0NDXzRfNAorCitjb25maWcgQ0NfVl80XzRfMAorICAgIGJvb2wKKyAgICBwcm9tcHQgIjQuNC4wIgorICAgIHNlbGVjdCBDQ19HQ0NfNF80CisKK2NvbmZpZyBDQ19WXzRfM182CisgICAgYm9vbAorICAgIHByb21wdCAiNC4zLjYiCisgICAgc2VsZWN0IENDX0dDQ180XzMKKworY29uZmlnIENDX1ZfNF8zXzUKKyAgICBib29sCisgICAgcHJvbXB0ICI0LjMuNSIKKyAgICBzZWxlY3QgQ0NfR0NDXzRfMworCitjb25maWcgQ0NfVl80XzNfNAorICAgIGJvb2wKKyAgICBwcm9tcHQgIjQuMy40IgorICAgIHNlbGVjdCBDQ19HQ0NfNF8zCisKK2NvbmZpZyBDQ19WXzRfM18zCisgICAgYm9vbAorICAgIHByb21wdCAiNC4zLjMiCisgICAgc2VsZWN0IENDX0dDQ180XzMKKworY29uZmlnIENDX1ZfNF8zXzIKKyAgICBib29sCisgICAgcHJvbXB0ICI0LjMuMiIKKyAgICBzZWxlY3QgQ0NfR0NDXzRfMworCitjb25maWcgQ0NfVl80XzNfMQorICAgIGJvb2wKKyAgICBwcm9tcHQgIjQuMy4xIgorICAgIHNlbGVjdCBDQ19HQ0NfNF8zCisKK2NvbmZpZyBDQ19WXzRfMl80CisgICAgYm9vbAorICAgIHByb21wdCAiNC4yLjQiCisgICAgc2VsZWN0IENDX0dDQ180XzIKKworY29uZmlnIENDX1ZfNF8yXzMKKyAgICBib29sCisgICAgcHJvbXB0ICI0LjIuMyAoT0JTT0xFVEUpIgorICAgIHNlbGVjdCBDQ19HQ0NfNF8yCisgICAgZGVwZW5kcyBvbiBPQlNPTEVURQorCitjb25maWcgQ0NfVl80XzJfMgorICAgIGJvb2wKKyAgICBwcm9tcHQgIjQuMi4yIgorICAgIHNlbGVjdCBDQ19HQ0NfNF8yCisKK2NvbmZpZyBDQ19WXzRfMl8xCisgICAgYm9vbAorICAgIHByb21wdCAiNC4yLjEgKE9CU09MRVRFKSIKKyAgICBzZWxlY3QgQ0NfR0NDXzRfMgorICAgIGRlcGVuZHMgb24gT0JTT0xFVEUKKworY29uZmlnIENDX1ZfNF8yXzAKKyAgICBib29sCisgICAgcHJvbXB0ICI0LjIuMCAoT0JTT0xFVEUpIgorICAgIHNlbGVjdCBDQ19HQ0NfNF8yCisgICAgZGVwZW5kcyBvbiBPQlNPTEVURQorCitjb25maWcgQ0NfVl80XzFfMgorICAgIGJvb2wKKyAgICBwcm9tcHQgIjQuMS4yIChPQlNPTEVURSkiCisgICAgZGVwZW5kcyBvbiBPQlNPTEVURQorCitjb25maWcgQ0NfVl80XzBfNAorICAgIGJvb2wKKyAgICBwcm9tcHQgIjQuMC40IChPQlNPTEVURSkiCisgICAgZGVwZW5kcyBvbiBPQlNPTEVURQorCitjb25maWcgQ0NfVl8zXzRfNgorICAgIGJvb2wKKyAgICBwcm9tcHQgIjMuNC42IChPQlNPTEVURSkiCisgICAgZGVwZW5kcyBvbiBPQlNPTEVURQorCitlbmRjaG9pY2UKKworY29uZmlnIENDX0dDQ180XzIKKyAgICBib29sCisgICAgc2VsZWN0IENDX0dDQ180XzJfb3JfbGF0ZXIKKworY29uZmlnIENDX0dDQ180XzJfb3JfbGF0ZXIKKyAgICBib29sCisKK2NvbmZpZyBDQ19HQ0NfNF8zCisgICAgYm9vbAorICAgIHNlbGVjdCBDQ19HQ0NfNF8zX29yX2xhdGVyCisgICAgc2VsZWN0IENDX0dDQ19VU0VfR01QX01QRlIKKyAgICBzZWxlY3QgQ0NfR0NDX0hBU19QS0dWRVJTSU9OX0JVR1VSTAorCitjb25maWcgQ0NfR0NDXzRfM19vcl9sYXRlcgorICAgIGJvb2wKKyAgICBzZWxlY3QgQ0NfR0NDXzRfMl9vcl9sYXRlcgorCitjb25maWcgQ0NfR0NDXzRfNAorICAgIGJvb2wKKyAgICBzZWxlY3QgQ0NfR0NDXzRfNF9vcl9sYXRlcgorICAgIHNlbGVjdCBDQ19HQ0NfVVNFX0dNUF9NUEZSCisgICAgc2VsZWN0IENDX0dDQ19IQVNfR1JBUEhJVEUKKyAgICBzZWxlY3QgQ0NfR0NDX0hBU19QS0dWRVJTSU9OX0JVR1VSTAorCitjb25maWcgQ0NfR0NDXzRfNF9vcl9sYXRlcgorICAgIGJvb2wKKyAgICBzZWxlY3QgQ0NfR0NDXzRfM19vcl9sYXRlcgorCitjb25maWcgQ0NfR0NDXzRfNQorICAgIGJvb2wKKyAgICBzZWxlY3QgQ0NfR0NDXzRfNV9vcl9sYXRlcgorICAgIHNlbGVjdCBDQ19HQ0NfVVNFX0dNUF9NUEZSCisgICAgc2VsZWN0IENDX0dDQ19VU0VfTVBDCisgICAgc2VsZWN0IENDX0dDQ19IQVNfR1JBUEhJVEUKKyAgICBzZWxlY3QgQ0NfR0NDX0hBU19MVE8KKyAgICBzZWxlY3QgQ0NfR0NDX0hBU19QS0dWRVJTSU9OX0JVR1VSTAorICAgIHNlbGVjdCBDQ19HQ0NfSEFTX0JVSUxEX0lECisKK2NvbmZpZyBDQ19HQ0NfNF81X29yX2xhdGVyCisgICAgYm9vbAorICAgIHNlbGVjdCBDQ19HQ0NfNF80X29yX2xhdGVyCisKK2NvbmZpZyBDQ19HQ0NfNF82CisgICAgYm9vbAorICAgIHNlbGVjdCBDQ19HQ0NfNF82X29yX2xhdGVyCisgICAgc2VsZWN0IENDX0dDQ19VU0VfR01QX01QRlIKKyAgICBzZWxlY3QgQ0NfR0NDX1VTRV9NUEMKKyAgICBzZWxlY3QgQ0NfR0NDX0hBU19HUkFQSElURQorICAgIHNlbGVjdCBDQ19HQ0NfSEFTX0xUTworICAgIHNlbGVjdCBDQ19HQ0NfSEFTX1BLR1ZFUlNJT05fQlVHVVJMCisgICAgc2VsZWN0IENDX0dDQ19IQVNfQlVJTERfSUQKKworY29uZmlnIENDX0dDQ180XzZfb3JfbGF0ZXIKKyAgICBib29sCisgICAgc2VsZWN0IENDX0dDQ180XzVfb3JfbGF0ZXIKKworY29uZmlnIENDX0dDQ19IQVNfR1JBUEhJVEUKKyAgICBib29sCisKKyMgVGhlIHdheSBMVE8gd29ya3MgaXMgYSBiaXQgdHdpc3RlZC4KKyMgU2VlOiBodHRwOi8vZ2NjLmdudS5vcmcvd2lraS9MaW5rVGltZU9wdGltaXphdGlvbiNSZXF1aXJlbWVudHMKKyMgQmFzaWNhbGx5OgorIyAgIC0gaWYgYmludXRpbHMgaGFzIHBsdWdpbnM6IExUTyBpcyBoYW5kbGVkIGJ5IGxkL2dvbGQgYnkgbG9hZGluZworIyAgICAgdGhlIHBsdWdpbiB3aGVuIGxpbmtpbmcKKyMgICAtIGlmIGJpbnV0aWxzIGRvZXMgbm90IGhhdmUgcGx1Z2luczogTFRPIGlzIGhhbmRsZWQgYnkgY29sbGVjdDIKKyMgSW4gYW55IGNhc2UsIExUTyBzdXBwb3J0IGRvZXMgbm90IGRlcGVuZCBvbiBwbHVnaW5zLCBidXQgdGFrZXMKKyMgYWR2YW50YWdlIG9mIGl0Citjb25maWcgQ0NfR0NDX0hBU19MVE8KKyAgICBib29sCisKK2NvbmZpZyBDQ19HQ0NfSEFTX1BLR1ZFUlNJT05fQlVHVVJMCisgICAgYm9vbAorCitjb25maWcgQ0NfR0NDX0hBU19CVUlMRF9JRAorICAgIGJvb2wKKworIyBGb3IgdGhlIHVwY29taW5nIDQuNyA/CisjIE5vbmUgaGF2ZSBsaW5rZXItaGFzaC1zdHlsZSBzdXBwb3J0IGZvciBub3cuLi4KK2NvbmZpZyBDQ19HQ0NfSEFTX0xOS19IQVNIX1NUWUxFCisgICAgYm9vbAorCisjIE9ubHkgZW5hYmxlIGdjYydzIHN1cHBvcnQgZm9yIHBsdWdpbnMgaWYgYmludXRpbHMgaGFzIGl0IGFzIHdlbGwKKyMgVGhleSBhcmUgdXNlZnVsbCBvbmx5IHdoZW4gZG9pbmcgTFRPLCBidXQgaXQgZG9lcyBubyBoYXJtIGVuYWJsaW5nCisjIHRoZW0gZXZlbiB3aXRob3V0IExUTy4KK2NvbmZpZyBDQ19HQ0NfRU5BQkxFX1BMVUdJTlMKKyAgICBib29sCisgICAgZGVwZW5kcyBvbiBCSU5VVElMU19QTFVHSU5TCisgICAgZGVwZW5kcyBvbiAhIFNUQVRJQ19UT09MQ0hBSU4KKyAgICBkZWZhdWx0IHkKKworIyBJZiBiaW51dGlscyBpbnN0YWxscyBnb2xkLCBlbmFibGUgc3VwcG9ydCBmb3IgZ29sZCBpbiBnY2MKK2NvbmZpZyBDQ19HQ0NfR09MRAorICAgIGJvb2wKKyAgICBkZXBlbmRzIG9uIEJJTlVUSUxTX0dPTERfSU5TVEFMTEVECisgICAgZGVmYXVsdCB5CisKK2NvbmZpZyBDQ19HQ0NfVVNFX0dNUF9NUEZSCisgICAgYm9vbAorICAgIHNlbGVjdCBHTVBfTkVFREVECisgICAgc2VsZWN0IE1QRlJfTkVFREVECisKK2NvbmZpZyBDQ19HQ0NfVVNFX1BQTF9DTE9PRworICAgIGJvb2wKKyAgICBzZWxlY3QgUFBMX05FRURFRAorICAgIHNlbGVjdCBDTE9PR19ORUVERUQKKworY29uZmlnIENDX0dDQ19VU0VfTVBDCisgICAgYm9vbAorICAgIHNlbGVjdCBNUENfTkVFREVECisKK2NvbmZpZyBDQ19HQ0NfVVNFX0xJQkVMRgorICAgIGJvb2wKKyAgICBzZWxlY3QgTElCRUxGX05FRURFRAorCitjb25maWcgQ0NfVkVSU0lPTgorICAgIHN0cmluZworIyBEb24ndCByZW1vdmUgbmV4dCBsaW5lCisjIENUX0lOU0VSVF9WRVJTSU9OX1NUUklOR19CRUxPVworICAgIGRlZmF1bHQgImxpbmFyby00LjYtMjAxMS4xMCIgaWYgQ0NfVl9saW5hcm9fNF82XzIwMTFfMTAKKyAgICBkZWZhdWx0ICI0LjYuMSIgaWYgQ0NfVl80XzZfMQorICAgIGRlZmF1bHQgIjQuNi4wIiBpZiBDQ19WXzRfNl8wCisgICAgZGVmYXVsdCAibGluYXJvLTQuNS0yMDExLjEwIiBpZiBDQ19WX2xpbmFyb180XzVfMjAxMV8xMAorICAgIGRlZmF1bHQgIjQuNS4zIiBpZiBDQ19WXzRfNV8zCisgICAgZGVmYXVsdCAiNC41LjIiIGlmIENDX1ZfNF81XzIKKyAgICBkZWZhdWx0ICI0LjUuMSIgaWYgQ0NfVl80XzVfMQorICAgIGRlZmF1bHQgIjQuNS4wIiBpZiBDQ19WXzRfNV8wCisgICAgZGVmYXVsdCAibGluYXJvLTQuNC0yMDExLjAyLTAiIGlmIENDX1ZfbGluYXJvXzRfNF8yMDExXzAyXzAKKyAgICBkZWZhdWx0ICI0LjQuNiIgaWYgQ0NfVl80XzRfNgorICAgIGRlZmF1bHQgIjQuNC41IiBpZiBDQ19WXzRfNF81CisgICAgZGVmYXVsdCAiNC40LjQiIGlmIENDX1ZfNF80XzQKKyAgICBkZWZhdWx0ICI0LjQuMyIgaWYgQ0NfVl80XzRfMworICAgIGRlZmF1bHQgIjQuNC4yIiBpZiBDQ19WXzRfNF8yCisgICAgZGVmYXVsdCAiNC40LjEiIGlmIENDX1ZfNF80XzEKKyAgICBkZWZhdWx0ICI0LjQuMCIgaWYgQ0NfVl80XzRfMAorICAgIGRlZmF1bHQgIjQuMy42IiBpZiBDQ19WXzRfM182CisgICAgZGVmYXVsdCAiNC4zLjUiIGlmIENDX1ZfNF8zXzUKKyAgICBkZWZhdWx0ICI0LjMuNCIgaWYgQ0NfVl80XzNfNAorICAgIGRlZmF1bHQgIjQuMy4zIiBpZiBDQ19WXzRfM18zCisgICAgZGVmYXVsdCAiNC4zLjIiIGlmIENDX1ZfNF8zXzIKKyAgICBkZWZhdWx0ICI0LjMuMSIgaWYgQ0NfVl80XzNfMQorICAgIGRlZmF1bHQgIjQuMy4wIiBpZiBDQ19WXzRfM18wCisgICAgZGVmYXVsdCAiNC4yLjQiIGlmIENDX1ZfNF8yXzQKKyAgICBkZWZhdWx0ICI0LjIuMyIgaWYgQ0NfVl80XzJfMworICAgIGRlZmF1bHQgIjQuMi4yIiBpZiBDQ19WXzRfMl8yCisgICAgZGVmYXVsdCAiNC4yLjEiIGlmIENDX1ZfNF8yXzEKKyAgICBkZWZhdWx0ICI0LjIuMCIgaWYgQ0NfVl80XzJfMAorICAgIGRlZmF1bHQgIjQuMS4yIiBpZiBDQ19WXzRfMV8yCisgICAgZGVmYXVsdCAiNC4wLjQiIGlmIENDX1ZfNF8wXzQKKyAgICBkZWZhdWx0ICIzLjQuNiIgaWYgQ0NfVl8zXzRfNgorCitjb25maWcgQ0NfTEFOR19KQVZBX1VTRV9FQ0oKKyAgICBib29sCisgICAgZGVmYXVsdCB5CisgICAgZGVwZW5kcyBvbiBDQ19MQU5HX0pBVkEKKyAgICBkZXBlbmRzIG9uIENDX0dDQ180XzNfb3JfbGF0ZXIKKworIyBGb3J0cmFuIGFsd2F5cyByZXF1aXJlcyBHTVArTVBGUiwgd2hhdGV2ZXIgdGhlIGdjYyB2ZXJzaW9uCitjb25maWcgQ0NfTEFOR19GT1JUUkFOCisgICAgc2VsZWN0IENDX0dDQ19VU0VfR01QX01QRlIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2NjL2djYy5pbi4yIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvY2MvZ2NjLmluLjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVhMTA3MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2NjL2djYy5pbi4yCkBAIC0wLDAgKzEsMjYzIEBACisjIGdjYyBjb25maWd1cmF0aW9uIG9wdGlvbnMKKworY29uZmlnIENDX0VOQUJMRV9DWFhfRkxBR1MKKyAgICBzdHJpbmcKKyAgICBwcm9tcHQgIkZsYWdzIHRvIHBhc3MgdG8gLS1lbmFibGUtY3h4LWZsYWdzIgorICAgIGRlZmF1bHQgIiIKKyAgICBoZWxwCisgICAgICBFbnRlciBoZXJlIHRoZSB2YWx1ZSBvZiB0aGUgZ2NjJ3MgLi9jb25maWd1cmUgb3B0aW9uIC0tZW5hYmxlLWN4eC1mbGFncy4KKyAgICAgIExlYXZlIGVtcHR5IGlmIHlvdSBkb24ndCBrbm93IGJldHRlci4KKyAgICAgIAorICAgICAgTm90ZToganVzdCBwYXNzIGluIHRoZSBvcHRpb24gX3ZhbHVlXywgdGhhdCBpcyBvbmx5IHRoZSBwYXJ0IHRoYXQgZ29lcworICAgICAgYWZ0ZXIgdGhlICc9JyBzaWduLgorCitjb25maWcgQ0NfQ09SRV9FWFRSQV9DT05GSUdfQVJSQVkKKyAgICBzdHJpbmcKKyAgICBwcm9tcHQgIkNvcmUgZ2NjIGV4dHJhIGNvbmZpZyIKKyAgICBkZWZhdWx0ICIiCisgICAgaGVscAorICAgICAgRXh0cmEgZmxhZ3MgdG8gcGFzcyBvbnRvIC4vY29uZmlndXJlIHdoZW4gY29uZmlndXJpbmcgdGhlIGNvcmUgZ2NjLgorICAgICAgCisgICAgICBUaGUgY29yZSBnY2MgaXMgYSBzdHJpcHBlZCBkb3duLCBDLW9ubHkgY29tcGlsZXIgbmVlZGVkIHRvIGJ1aWxkCisgICAgICB0aGUgQyBsaWJyYXJ5LiBLaW5kYSBib290c3RyYXAgZ2NjLCBpZiB5b3Ugd2lzaC4KKyAgICAgIAorICAgICAgWW91IGNhbiBlbnRlciBtdWx0aXBsZSBhcmd1bWVudHMgaGVyZSwgYW5kIGFyZ3VtZW50cyBjYW4gY29udGFpbiBzcGFjZXMKKyAgICAgIGlmIHRoZXkgYXJlIHByb3Blcmx5IHF1b3RlZCAob3IgZXNjYXBlZCwgYnV0IHByZWZlciBxdW90ZXMpLiBFZy46CisgICAgICAgICAgLS13aXRoLWZvbz0iMXN0IGFyZyB3aXRoIDQgc3BhY2VzIiAtLXdpdGgtYmFyPTJuZC1hcmctd2l0aG91dC1zcGFjZQorCitjb25maWcgQ0NfRVhUUkFfQ09ORklHX0FSUkFZCisgICAgc3RyaW5nCisgICAgcHJvbXB0ICJnY2MgZXh0cmEgY29uZmlnIgorICAgIGRlZmF1bHQgIiIKKyAgICBkZXBlbmRzIG9uICEgQkFSRV9NRVRBTAorICAgIGhlbHAKKyAgICAgIEV4dHJhIGZsYWdzIHRvIHBhc3Mgb250byAuL2NvbmZpZ3VyZSB3aGVuIGNvbmZpZ3VyaW5nIGdjYy4KKyAgICAgIAorICAgICAgWW91IGNhbiBlbnRlciBtdWx0aXBsZSBhcmd1bWVudHMgaGVyZSwgYW5kIGFyZ3VtZW50cyBjYW4gY29udGFpbiBzcGFjZXMKKyAgICAgIGlmIHRoZXkgYXJlIHByb3Blcmx5IHF1b3RlZCAob3IgZXNjYXBlZCwgYnV0IHByZWZlciBxdW90ZXMpLiBFZy46CisgICAgICAgICAgLS13aXRoLWZvbz0iMXN0IGFyZyB3aXRoIDQgc3BhY2VzIiAtLXdpdGgtYmFyPTJuZC1hcmctd2l0aG91dC1zcGFjZQorCitjb25maWcgU1RBVElDX1RPT0xDSEFJTgorICAgIHNlbGVjdCBDQ19TVEFUSUNfTElCU1REQ1hYIGlmIENDX0dDQ180XzRfb3JfbGF0ZXIKKworY29uZmlnIENDX1NUQVRJQ19MSUJTVERDWFgKKyAgICBib29sCisgICAgcHJvbXB0ICJMaW5rIGxpYnN0ZGMrKyBzdGF0aWNhbGx5IGludG8gdGhlIGdjYyBiaW5hcnkiCisgICAgZGVmYXVsdCB5CisgICAgZGVwZW5kcyBvbiBDQ19HQ0NfNF80X29yX2xhdGVyCisgICAgc2VsZWN0IFdBTlRTX1NUQVRJQ19MSU5LCisgICAgaGVscAorICAgICAgTmV3ZXIgZ2NjIHZlcnNpb25zIHVzZSB0aGUgUFBMIGxpYnJhcnkgd2hpY2ggaXMgQysrIGNvZGUuICBTdGF0aWNhbGx5CisgICAgICBsaW5raW5nIGxpYnN0ZGMrKyBpbmNyZWFzZXMgdGhlIGxpa2VsaW5lc3MgdGhhdCB0aGUgZ2NjIGJpbmFyeSB3aWxsCisgICAgICBydW4gb24gbWFjaGluZXMgb3RoZXIgdGhhbiB0aGUgb25lIHdoaWNoIGl0IHdhcyBidWlsdCBvbiwgd2l0aG91dAorICAgICAgaGF2aW5nIHRvIHdvcnJ5IGFib3V0IGRpc3RyaWJ1dGluZyB0aGUgbWF0Y2hpbmcgdmVyc2lvbiBvZiBsaWJzdGRjKysKKyAgICAgIGFsb25nIHdpdGggaXQuCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPcHRpbWlzYXRpb24gZmVhdHVyZXMKKworY29tbWVudCAiT3B0aW1pc2F0aW9uIGZlYXR1cmVzIgorCitjb25maWcgQ0NfR0NDX1VTRV9HUkFQSElURQorICAgIGJvb2wKKyAgICBwcm9tcHQgIkVuYWJsZSBHUkFQSElURSBsb29wIG9wdGltaXNhdGlvbnMiCisgICAgZGVmYXVsdCB5CisgICAgZGVwZW5kcyBvbiBDQ19HQ0NfSEFTX0dSQVBISVRFCisgICAgc2VsZWN0IENDX0dDQ19VU0VfUFBMX0NMT09HCisgICAgaGVscAorICAgICAgRW5hYmxlIHRoZSBHUkFQSElURSBsb29wIG9wdGltc2F0aW9ucy4KKyAgICAgIAorICAgICAgVGhpcyByZXF1aXJlcyB0aGUgUFBMIGFuZCBDTG9vRyBjb21wYW5pb24gbGlicmFyaWVzLCBhbmQKKyAgICAgIHRob3NlIHdpbGwgYmUgYXV0b21hdGljYWxseSBidWlsZCBmb3IgeW91LgorICAgICAgCisgICAgICBPbiBzb21lIHN5c3RlbXMgKGVnLiBDeWd3aW4pLCBQUEwgYW5kL29yIENMb29HIG1heSBub3QKKyAgICAgIGJ1aWxkIHByb3Blcmx5ICh5ZXQpLCBzbyB5b3UnbGwgaGF2ZSB0byBzYXkgJ04nIGhlcmUuCisKKyMgVGhlIHdheSBMVE8gd29ya3MgaXMgYSBiaXQgdHdpc3RlZC4KKyMgU2VlOiBodHRwOi8vZ2NjLmdudS5vcmcvd2lraS9MaW5rVGltZU9wdGltaXphdGlvbiNSZXF1aXJlbWVudHMKKyMgQmFzaWNhbGx5OgorIyAgIC0gaWYgYmludXRpbHMgaGFzIHBsdWdpbnM6IExUTyBpcyBoYW5kbGVkIGJ5IGxkL2dvbGQgYnkgbG9hZGluZworIyAgICAgdGhlIHBsdWdpbiB3aGVuIGxpbmtpbmcKKyMgICAtIGlmIGJpbnV0aWxzIGRvZXMgbm90IGhhdmUgcGx1Z2luczogTFRPIGlzIGhhbmRsZWQgYnkgY29sbGVjdDIKKyMgSW4gYW55IGNhc2UsIExUTyBzdXBwb3J0IGRvZXMgbm90IGRlcGVuZCBvbiBwbHVnaW5zLCBidXQgdGFrZXMKKyMgYWR2YW50YWdlIG9mIGl0CisjIEFsc28sIG9ubHkgdGhlIDQuNSBzZXJpZXMgbmVlZHMgbGliZWxmIGZvciBMVE87IDQuNiBoYXMgZHJvcHBlZAorIyB0aGUgZGVwZW5kZW5jeS4KK2NvbmZpZyBDQ19HQ0NfVVNFX0xUTworICAgIGJvb2wKKyAgICBwcm9tcHQgIkVuYWJsZSBMVE8iCisgICAgZGVmYXVsdCB5CisgICAgZGVwZW5kcyBvbiBDQ19HQ0NfSEFTX0xUTworICAgIHNlbGVjdCBDQ19HQ0NfVVNFX0xJQkVMRiBpZiBDQ19HQ0NfNF81CisgICAgaGVscAorICAgICAgRW5hYmxlIHRoZSBMaW5rIFRpbWUgT3B0aW1pc2F0aW9ucy4KKyAgICAgIAorICAgICAgVGhpcyB3aWxsIHJlcXVpcmUgdGhlIGxpYmVsZiBjb21wYW5pb24gbGlicmFyeSwgYW5kIGl0CisgICAgICB3aWwgYmUgYnVpbGQgYXV0b21hdGljYWxseSBmb3IgeW91LgorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NvbW1lbnQgIlNldHRpbmdzIGZvciBsaWJyYXJpZXMgcnVubmluZyBvbiB0YXJnZXQiCisKK2NvbmZpZyBDQ19HQ0NfRU5BQkxFX1RBUkdFVF9PUFRTUEFDRQorICAgIGJvb2wKKyAgICBwcm9tcHQgIk9wdGltaXplIGdjYyBsaWJzIGZvciBzaXplIgorICAgIGRlZmF1bHQgeQorICAgIGhlbHAKKyAgICAgIFBhc3MgLS1lbmFibGUtdGFyZ2V0LW9wdHNwYWNlIHRvIGNyb3NzZ2NjJ3MgY29uZmlndXJlLgorICAgICAgCisgICAgICBUaGlzIHdpbGwgY29tcGlsZSBjcm9zc2djYydzIGxpYnMgd2l0aCAtT3MuCisKK2NvbmZpZyBDQ19HQ0NfTElCTVVERkxBUAorICAgIGJvb2wKKyAgICBwcm9tcHQgIkNvbXBpbGUgbGlibXVkZmxhcCIKKyAgICBoZWxwCisgICAgICBsaWJtdWRmbGFwIGlzIGEgcG9pbnRlci11c2UgY2hlY2tpbmcgdG9vbCwgd2hpY2ggY2FuIGRldGVjdAorICAgICAgdmFyaW91cyBtaXMtdXNhZ2VzIG9mIHBvaW50ZXJzIGluIEMgYW5kICh0byBzb21lIGV4dGVudHMpIEMrKy4KKyAgICAgIAorICAgICAgWW91IHNob3VsZCBzYXkgJ04nIGhlcmUsIGFzIGxpYm1kdWZsYXAgZ2VuZXJhdGVzIGluc3RydW1lbnRlZAorICAgICAgY29kZSAodGh1cyBpdCBpcyBhIGJpdCBiaWdnZXIgYW5kIGEgYml0IHNsb3dlcikgYW5kIHJlcXVpcmVzCisgICAgICByZS1jb21waWxhdGlvbiBhbmQgcmUtbGluaywgd2hpbGUgaXQgZXhpc3RzIGJldHRlciBydW4tdGltZQorICAgICAgYWx0ZXJuYXRpdmVzIChlZy4gRFVNQSwgZG1hbGxvYy4uLikgdGhhdCBuZWVkIG5laXRoZXIgcmUtCisgICAgICBjb21waWxhdGlvbiBub3IgcmUtbGluay4KKworY29uZmlnIENDX0dDQ19MSUJHT01QCisgICAgYm9vbAorICAgIHByb21wdCAiQ29tcGlsZSBsaWJnb21wIgorICAgIGhlbHAKKyAgICAgIGxpYmdvbXAgaXMgInRoZSBHTlUgaW1wbGVtZW50YXRpb24gb2YgdGhlIE9wZW5NUCBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZworICAgICAgSW50ZXJmYWNlIChBUEkpIGZvciBtdWx0aS1wbGF0Zm9ybSBzaGFyZWQtbWVtb3J5IHBhcmFsbGVsIHByb2dyYW1taW5nIGluCisgICAgICBDL0MrKyBhbmQgRm9ydHJhbiIuIFNlZToKKyAgICAgICAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGliZ29tcC8KKyAgICAgIAorICAgICAgVGhlIGRlZmF1bHQgaXMgJ04nLiBTYXkgJ1knIGlmIHlvdSBuZWVkIGl0LCBhbmQgcmVwb3J0IHN1Y2Nlc3MvZmFpbHVyZS4KKworY29uZmlnIENDX0dDQ19MSUJTU1AKKyAgICBib29sCisgICAgcHJvbXB0ICJDb21waWxlIGxpYnNzcCIKKyAgICBoZWxwCisgICAgICBsaWJzc3AgaXMgdGhlIHJ1bi10aW1lIFN0YWNrLVNtYXNoaW5nIFByb3RlY3Rpb24gbGlicmFyeS4KKyAgICAgIAorICAgICAgVGhlIGRlZmF1bHQgaXMgJ04nLiBTYXkgJ1knIGlmIHlvdSBuZWVkIGl0LCBhbmQgcmVwb3J0IHN1Y2Nlc3MvZmFpbHVyZS4KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NvbW1lbnQgIk1pc2MuIG9ic2N1cmUgb3B0aW9ucy4iCisKK2NvbmZpZyBDQ19DWEFfQVRFWElUCisgICAgYm9vbAorICAgIHByb21wdCAiVXNlIF9fY3hhX2F0ZXhpdCIKKyAgICBkZWZhdWx0IHkKKyAgICBkZXBlbmRzIG9uICEgQkFSRV9NRVRBTAorICAgIGhlbHAKKyAgICAgIElmIHlvdSBnZXQgdGhlIG1pc3Npbmcgc3ltYm9sICJfX2N4YV9hdGV4aXQiIHdoZW4gYnVpbGRpbmcgQysrIHByb2dyYW1zLAorICAgICAgeW91IG1pZ2h0IHdhbnQgdG8gdHJ5IGRpc2FibGluZyB0aGlzIG9wdGlvbi4KKworY29uZmlnIENDX0dDQ19ESVNBQkxFX1BDSAorICAgIGJvb2wKKyAgICBwcm9tcHQgIkRvIG5vdCBidWlsZCBQQ0giCisgICAgaGVscAorICAgICAgU2F5ICd5JyBoZXJlIHRvIG5vdCB1c2UgUHJlLUNvbXBpbGVkIEhlYWRlcnMgaW4gdGhlIHJlc3VsdGluZyB0b29sY2hhaW4uCisgICAgICBhdCB0aGUgZXhwZW5zZSBvZiBzcGVlZCB3aGVuIGNvbXBpbGluZyBDKysgY29kZS4KKyAgICAgIAorICAgICAgRm9yIHNvbWUgY29uZmlndXJhdGlvbnMgKG1vc3Qgbm90YWJseSBjYW5hZGlhbj8pLCBQQ0ggYXJlIGJyb2tlbiwgYW5kCisgICAgICBuZWVkIHRvIGJlIGRpc2FibGVkLiBQbGVhc2Ugc2VlOgorICAgICAgICBodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQwOTc0CisKK2NvbmZpZyBDQ19HQ0NfU0pMSl9FWENFUFRJT05TCisgICAgdHJpc3RhdGUKKyAgICBwcm9tcHQgIlVzZSBzamxqIGZvciBleGNlcHRpb25zIgorICAgIGRlcGVuZHMgb24gISBCQVJFX01FVEFMCisgICAgZGVmYXVsdCBtCisgICAgaGVscAorICAgICAgJ3NqbGonIGlzIHNob3J0IGZvciBzZXRqbXAvbG9uZ2ptcC4KKyAgICAgIAorICAgICAgT24gc29tZSBhcmNoaXRlY3R1cmVzLCBzdGFjayB1bndpbmRpbmcgZHVyaW5nIGV4Y2VwdGlvbiBoYW5kbGluZworICAgICAgd29ya3MgcGVyZmVjdGx5IHdlbGwgd2l0aG91dCB1c2luZyBzamxqLCB3aGlsZSBvbiBzb21lIG90aGVycywKKyAgICAgIHVzZSBvZiBzamxqIGlzIHJlcXVpcmVkIGZvciBwcm9wZXIgc3RhY2sgdW53aW5kaW5nLgorICAgICAgCisgICAgICAgT3B0aW9uICB8IHNqbGogdXNlICAgICAgICAgICB8IEFzc29jaWF0ZWQgLi9jb25maWd1cmUgc3dpdGNoCisgICAgICAtLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgIFkgICAgIHwgZm9yY2libHkgdXNlZCAgICAgIHwgLS1lbmFibGUtc2psai1leGNlcHRpb25zCisgICAgICAgICBNICAgICB8IGF1dG8gICAgICAgICAgICAgICB8IChub25lLCAuL2NvbmZpZ3VyZSBkZWNpZGVzKQorICAgICAgICAgTiAgICAgfCBmb3JjaWJseSBub3QgdXNlZCAgfCAtLWRpc2FibGUtc2psai1leGNlcHRpb25zCisgICAgICAKKyAgICAgIEl0IHNob3VsZCBiZSBzYWZlIHRvIHNheSAnTScgb3IgJ04nLgorICAgICAgCisgICAgICBJdCBjYW4gaGFwcGVuIHRoYXQgLi9jb25maWd1cmUgaXMgd3JvbmcgaW4gc29tZSBjYXNlcy4gS25vd24KKyAgICAgIGNhc2UgaXMgZm9yIEFSTSBiaWcgZW5kaWFuLCB3aGVyZSB5b3Ugc2hvdWxkIHNheSAnTicuCisKK2NvbmZpZyBDQ19HQ0NfTERCTF8xMjgKKyAgICB0cmlzdGF0ZQorICAgIHByb21wdCAiRW5hYmxlIDEyOC1iaXQgbG9uZyBkb3VibGVzIgorICAgIGRlZmF1bHQgbQorICAgIGRlcGVuZHMgb24gQ0NfR0NDXzRfMl9vcl9sYXRlcgorICAgIGhlbHAKKyAgICAgIFNheWluZyAnWScgd2lsbCBmb3JjZSBnY2MgdG8gdXNlIDEyOC1iaXQgd2lkZSBsb25nIGRvdWJsZXMKKyAgICAgIFNheWluZyAnTicgd2lsbCBmb3JjZSBnY2MgdG8gdXNlIDY0LWJpdCB3aWRlIGxvbmcgZG91YmxlcworICAgICAgU2F5aW5nICdNJyB3aWxsIGxldCBnY2MgY2hvb3NlIChkZWZhdWx0IGlzIDEyOC1iaXQgZm9yCisgICAgICAgICAgICAgICAgIGdsaWJjID49IDIuNCwgNjQtYml0IG90aGVyd2lzZSkKKyAgICAgIAorICAgICAgSWYgaW4gZG91YnQsIGtlZXAgdGhlIGRlZmF1bHQsIGllLiAnTScuCisKK2NvbmZpZyBDQ19HQ0NfQlVJTERfSUQKKyAgICBib29sCisgICAgcHJvbXB0ICJFbmFibGUgYnVpbGQtaWQiCisgICAgZGVwZW5kcyBvbiBDQ19HQ0NfSEFTX0JVSUxEX0lECisgICAgaGVscAorICAgICAgVGVsbHMgR0NDIHRvIHBhc3MgLS1idWlsZC1pZCBvcHRpb24gdG8gdGhlIGxpbmtlciBmb3IgYWxsIGZpbmFsCisgICAgICBsaW5rcyAobGlua3MgcGVyZm9ybWVkIHdpdGhvdXQgdGhlIC1yIG9yIC0tcmVsb2NhdGFibGUgb3B0aW9uKSwKKyAgICAgIGlmIHRoZSBsaW5rZXIgc3VwcG9ydHMgaXQuIElmIHlvdSBzYXkgJ3knIGhlcmUsIGJ1dCB5b3VyIGxpbmtlcgorICAgICAgZG9lcyBub3Qgc3VwcG9ydCAtLWJ1aWxkLWlkIG9wdGlvbiwgYSB3YXJuaW5nIGlzIGlzc3VlZCBhbmQgdGhpcworICAgICAgb3B0aW9uIGlzIGlnbm9yZWQuCisgICAgICAKKyAgICAgIFRoZSBkZWZhdWx0IGlzIG9mZi4KKworY2hvaWNlIENDX0dDQ19MTktfSEFTSF9TVFlMRV9DSE9JQ0UKKyAgICBib29sCisgICAgcHJvbXB0ICJsaW5rZXIgaGFzaCBzdHlsZSIKKyAgICBkZXBlbmRzIG9uIENDX0dDQ19IQVNfTE5LX0hBU0hfU1RZTEUKKworY29uZmlnIENDX0dDQ19MTktfSEFTSF9TVFlMRV9ERUZBVUxUCisgICAgYm9vbAorICAgIHByb21wdCAiRGVmYXVsdCIKKyAgICBoZWxwCisgICAgICBEbyBub3Qgc3BlY2lmeSBhbnkgdmFsdWUsIGFuZCB1c2UgdGhlIGRlZmF1bHQgdmFsdWUgKHN5c3YpLgorCitjb25maWcgQ0NfR0NDX0xOS19IQVNIX1NUWUxFX1NZU1YKKyAgICBib29sCisgICAgcHJvbXB0ICJzeXN2IgorICAgIGhlbHAKKyAgICAgIEZvcmNlIHVzZSBvZiB0aGUgU1lTViBoYXNoIHN0eWxlLgorCitjb25maWcgQ0NfR0NDX0xOS19IQVNIX1NUWUxFX0dOVQorICAgIGJvb2wKKyAgICBwcm9tcHQgImdudSIKKyAgICBoZWxwCisgICAgICBGb3JjZSB1c2Ugb2YgdGhlIEdOVSBoYXNoIHN0eWxlLgorCitjb25maWcgQ0NfR0NDX0xOS19IQVNIX1NUWUxFX0JPVEgKKyAgICBib29sCisgICAgcHJvbXB0ICJib3RoIgorICAgIGhlbHAKKyAgICAgIEZvcmNlIHVzZSBvZiBib3RoIGhhc2ggc3R5bGVzLgorCitlbmRjaG9pY2UgIyBDQ19HQ0NfTE5LX0hBU0hfU1RZTEVfQ0hPSUNFCisKK2NvbmZpZyBDQ19HQ0NfTE5LX0hBU0hfU1RZTEUKKyAgICBzdHJpbmcKKyAgICBkZWZhdWx0ICIiICAgICAgaWYgQ0NfR0NDX0xOS19IQVNIX1NUWUxFX0RFRkFVTFQKKyAgICBkZWZhdWx0ICJzeXN2IiAgaWYgQ0NfR0NDX0xOS19IQVNIX1NUWUxFX1NZU1YKKyAgICBkZWZhdWx0ICJnbnUiICAgaWYgQ0NfR0NDX0xOS19IQVNIX1NUWUxFX0dOVQorICAgIGRlZmF1bHQgImJvdGgiICBpZiBDQ19HQ0NfTE5LX0hBU0hfU1RZTEVfQk9USAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY29uZmlnIENDX0dDQ19IQVNfQVJDSF9PUFRJT05TCisgICAgYm9vbAorCitjb21tZW50ICJhcmNoaWN0ZWN0dXJlLXNwZWNpZmljIG9wdGlvbnMiCisgICAgZGVwZW5kcyBvbiBDQ19HQ0NfSEFTX0FSQ0hfT1BUSU9OUworCitpZiBBUkNIX21pcHMKK3NvdXJjZSAiY29uZmlnL2NjL2djYy5pbi5taXBzIgorZW5kaWYgIyBBUkNIX21pcHMKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2NjL2djYy5pbi5taXBzIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvY2MvZ2NjLmluLm1pcHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFmYjY5YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2NjL2djYy5pbi5taXBzCkBAIC0wLDAgKzEsMzQgQEAKKyMgTUlQUyBzcGVjaWZpYyBvcHRpb25zIGZvciBnY2MKKworY29uZmlnIENDX0dDQ19IQVNfQVJDSF9PUFRJT05TCisgICAgZGVmYXVsdCB5CisKK2NvbmZpZyBDQ19HQ0NfbWlwc19sbHNjCisgICAgdHJpc3RhdGUKKyAgICBwcm9tcHQgIlVzZSBsbHNjIgorICAgIGRlZmF1bHQgbQorICAgIGhlbHAKKyAgICAgIFRoaXMgY29uZmlndXJlcyBob3cgZ2NjIHdpbGwgZW1pdCBsb2FkLWxpbmssIHN0b3JlLWNvbmRpdGlvbmFsIGFuZAorICAgICAgc3luYyBvcGNvZGVzLiBOb3JtYWxseSwgeW91J2Qgc2V0IHRoaXMgdG8gJ00nLCBhbmQgY29uZmlndXJlIHdpbGwgZG8KKyAgICAgIHRoZSBjb3JyZWN0IHRoaW5nIChpZS4gZW5hYmxlIGxsc2MgZm9yIExpbnV4LWJhc2VkIHRhcmdldHMsIGRpc2FibGUKKyAgICAgIGZvciBvdGhlcnMpLiBJZiB5b3Uga25vdyBiZXR0ZXIsIHlvdSBjYW4gZm9yY2UgZWl0aGVyIHVzaW5nIGxsc2Mgb3IKKyAgICAgIG5vdCB1c2luZyBpdCAocmVzcC4gJ1knIG9yICdOJykuCisKK2NvbmZpZyBDQ19HQ0NfbWlwc19zeW5jaQorICAgIHRyaXN0YXRlCisgICAgcHJvbXB0ICJVc2Ugc3luY2kiCisgICAgZGVmYXVsdCBtCisgICAgaGVscAorICAgICAgVGhpcyBjb25maWd1cmVzIGhvdyBnY2Mgd2lsbCBlbWl0IHRoZSBzeW5jaSBvcGNvZGUuIE5vcm1hbGx5LCB5b3UnZAorICAgICAgc2V0IHRoaXMgdG8gJ00nLCBhbmQgY29uZmlndXJlIHdpbGwgZG8gdGhlIGNvcnJlY3QgdGhpbmcgKGllLiBkaXNhYmxlKS4KKyAgICAgIElmIHlvdSBrbm93IGJldHRlciwgeW91IGNhbiBmb3JjZSB1c2luZyBzeW5jaSAoc2F5ICdZJyksIG9yIG5vdCB1c2luZworICAgICAgaXQgKHNheSAnTicpLgorCitjb25maWcgQ0NfR0NDX21pcHNfcGx0CisgICAgYm9vbAorICAgIHByb21wdCAiVXNlIGNvcHkgcmVsb2NhdGlvbnMgJiBQTFRzIgorICAgIGhlbHAKKyAgICAgIFRoaXMgY29uZmlndXJlcyBnY2MgdG8gdXNlIGNvcHkgcmVsb2NhdGlvbnMgJiBQTFRzLiBUaGVzZSBhcmUKKyAgICAgIGV4dGVuc2lvbnMgdG8gdGhlIHRyYWRpdGlvbmFsIFNWUjQtYmFzZWQgTUlQUyBBQklzIGFuZCByZXF1aXJlCisgICAgICBzdXBwb3J0IGZyb20gR05VIGJpbnV0aWxzIGFuZCB0aGUgcnVudGltZSBDIGxpYnJhcnkuCisgICAgICBTYXkgJ04nIHRvIGtlZXAgdGhlIGRlZmF1bHQgYW5kIG5vdCB1c2UgdGhlbSwgc2F5ICdZJyB0byB1c2UgdGhlbS4KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2NvbXBhbmlvbl9saWJzLmluIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvY29tcGFuaW9uX2xpYnMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ5OTZhNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2NvbXBhbmlvbl9saWJzLmluCkBAIC0wLDAgKzEsMTIzIEBACisjIENvbXBhbmlvbiBsaWJyYXJpZXMgY29uZmlnIG9wdGlvbnMKKyMgVGhvc2UgbGlicmFyaWVzIGFyZSByZXF1aXJlZCBmb3IgZGlmZmVyZW50IHZlcnNpb25zIG9mIGdjYywKKyMgYW5kIGNhbiBiZSB1c2VkIGJ5IGJpbnV0aWxzIGFuZCBnZGIgKG1heWJlIG90aGVycyBhcyB3ZWxsKS4KKworbWVudSAiQ29tcGFuaW9uIGxpYnJhcmllcyIKKworY29uZmlnIENPTVBMSUJTX05FRURFRAorICAgIGJvb2wKKworY29uZmlnIEdNUF9ORUVERUQKKyAgICBib29sCisgICAgc2VsZWN0IEdNUAorICAgIHNlbGVjdCBDT01QTElCU19ORUVERUQKKworY29uZmlnIE1QRlJfTkVFREVECisgICAgYm9vbAorICAgIHNlbGVjdCBNUEZSCisgICAgc2VsZWN0IENPTVBMSUJTX05FRURFRAorCitjb25maWcgUFBMX05FRURFRAorICAgIGJvb2wKKyAgICBzZWxlY3QgUFBMCisgICAgc2VsZWN0IENPTVBMSUJTX05FRURFRAorCitjb25maWcgQ0xPT0dfTkVFREVECisgICAgYm9vbAorICAgIHNlbGVjdCBDTE9PRworICAgIHNlbGVjdCBDT01QTElCU19ORUVERUQKKworY29uZmlnIE1QQ19ORUVERUQKKyAgICBib29sCisgICAgc2VsZWN0IE1QQworICAgIHNlbGVjdCBDT01QTElCU19ORUVERUQKKworY29uZmlnIExJQkVMRl9ORUVERUQKKyAgICBib29sCisgICAgc2VsZWN0IExJQkVMRgorICAgIHNlbGVjdCBDT01QTElCU19ORUVERUQKKworY29uZmlnIENPTVBMSUJTCisgICAgYm9vbAorCitjb25maWcgR01QCisgICAgYm9vbAorICAgIHNlbGVjdCBDT01QTElCUworCitjb25maWcgTVBGUgorICAgIGJvb2wKKyAgICBzZWxlY3QgR01QCisgICAgc2VsZWN0IENPTVBMSUJTCisKK2NvbmZpZyBQUEwKKyAgICBib29sCisgICAgc2VsZWN0IEdNUAorICAgIHNlbGVjdCBDT01QTElCUworCitjb25maWcgQ0xPT0cKKyAgICBib29sCisgICAgc2VsZWN0IEdNUAorICAgIHNlbGVjdCBQUEwKKyAgICBzZWxlY3QgQ09NUExJQlMKKworY29uZmlnIE1QQworICAgIGJvb2wKKyAgICBzZWxlY3QgR01QCisgICAgc2VsZWN0IE1QRlIKKyAgICBzZWxlY3QgQ09NUExJQlMKKworY29uZmlnIExJQkVMRgorICAgIGJvb2wKKyAgICBzZWxlY3QgQ09NUExJQlMKKworY29uZmlnIExJQkVMRl9UQVJHRVQKKyAgICBib29sCisKK2lmIEdNUAorc291cmNlICJjb25maWcvY29tcGFuaW9uX2xpYnMvZ21wLmluIgorZW5kaWYKK2lmIE1QRlIKK3NvdXJjZSAiY29uZmlnL2NvbXBhbmlvbl9saWJzL21wZnIuaW4iCitlbmRpZgoraWYgUFBMCitzb3VyY2UgImNvbmZpZy9jb21wYW5pb25fbGlicy9wcGwuaW4iCitlbmRpZgoraWYgQ0xPT0cKK3NvdXJjZSAiY29uZmlnL2NvbXBhbmlvbl9saWJzL2Nsb29nLmluIgorZW5kaWYKK2lmIE1QQworc291cmNlICJjb25maWcvY29tcGFuaW9uX2xpYnMvbXBjLmluIgorZW5kaWYKK2lmIExJQkVMRiB8fCBMSUJFTEZfVEFSR0VUCitjb21tZW50ICJsaWJlbGYgdmVyc2lvbiBuZWVkZWQgdG8gYnVpbGQgZm9yIHRhcmdldCIKKyAgICBkZXBlbmRzIG9uICFMSUJFTEYKK3NvdXJjZSAiY29uZmlnL2NvbXBhbmlvbl9saWJzL2xpYmVsZi5pbiIKK2VuZGlmCisKK2NvbmZpZyBGT08KKyAgICBib29sCisKK2lmIENPTVBMSUJTCisKK2NvbW1lbnQgIkNvbXBhbmlvbiBsaWJyYXJpZXMgY29tbW9uIG9wdGlvbnMiCisKK2NvbmZpZyBDT01QTElCU19DSEVDSworICAgIGJvb2wKKyAgICBwcm9tcHQgIkNoZWNrIHRoZSBjb21wYW5pb24gbGlicmFyaWVzIGJ1aWxkcyAoISEhIFJFQUQgSEVMUCEhISkiCisgICAgaGVscAorICAgICAgSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvIGNoZWNrIHRoZSBuZXdseSBidWlsdCBjb21wYW5pb24gbGlicmFyaWVzLgorICAgICAgVW5mb3J0dW5hdGVseSwgdGhpcyBpcyBhIHZlcnkgaW50ZW5zaXZlIHRhc2ssIGFuZCB0YWtlcyBhIGxvb29vbmcgdGltZS4KKyAgICAgIAorICAgICAgQ2hlY2tpbmcgdGhlIG5ld2x5IGJ1aWx0IGNvbXBhbmlvbiBsaWJyYXJpZXMgaXMgdGh1cyBkaXNhYmxlZCBieSBkZWZhdWx0LAorICAgICAgYnV0IGl0IGlzIHN1Z2dlc3RlZCB0aGF0IHlvdSBjaGVjayB0aGVtIGF0IGxlYXN0IG9uY2Ugb24geW91ciBtYWNoaW5lLAorICAgICAgYW5kIGlmIHRoZXkgd29yaywgZGlzYWJsZSB0aGUgY2hlY2sgb24gc3Vic2VxdWVudCBidWlsZHMuCisgICAgICAKKyAgICAgIElmIHlvdSBzdXNwZWN0IHRoYXQgb25lIChvciBtb3JlKSBvZiB5b3VyIGNvbXBhbmlvbiBsaWJyYXJpZXMgaXMgdGhlCisgICAgICBjYXVzZSBmb3IgaW5jb3JyZWN0bHkgZ2VuZXJhdGVkIGNvZGUsIHlvdSBzaG91bGQgYW5zd2VyICdZJyBoZXJlLgorICAgICAgTm90ZSBob3dldmVyIHRoYXQgdGhpcyB3aWxsIHRha2UgYSByZWFsbHkgbG9uZyB0aW1lLiBGb3IgZXhhbXBsZSwKKyAgICAgIGJ1aWxkaW5nIFBQTCBvbiBteSBtYWNoaW5lIHRha2VzIHJvdWdobHkgMSc0MCIsIHdoaWxlIGNoZWNraW5nIGl0IHRha2VzCisgICAgICBhYm91dCAxaDQwJy4uLgorCitlbmRpZiAjIENPTVBMSUJTCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2NvbXBhbmlvbl9saWJzL2Nsb29nLmluIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvY29tcGFuaW9uX2xpYnMvY2xvb2cuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZlODdjMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2NvbXBhbmlvbl9saWJzL2Nsb29nLmluCkBAIC0wLDAgKzEsNTcgQEAKKyMgQ0xvb0cgb3B0aW9ucworCitjaG9pY2UKKyAgICBib29sCisgICAgcHJvbXB0ICJDTG9vRy9wcGwgdmVyc2lvbiIKKyMgRG9uJ3QgcmVtb3ZlIG5leHQgbGluZQorIyBDVF9JTlNFUlRfVkVSU0lPTl9CRUxPVworCitjb25maWcgQ0xPT0dfVl8wXzE1XzExCisgICAgYm9vbAorICAgIHByb21wdCAiMC4xNS4xMSAoRVhQRVJJTUVOVEFMKSIKKyAgICBkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorICAgIHNlbGVjdCBDTE9PR18wXzE1XzF4CisKK2NvbmZpZyBDTE9PR19WXzBfMTVfMTAKKyAgICBib29sCisgICAgcHJvbXB0ICIwLjE1LjEwIgorICAgIHNlbGVjdCBDTE9PR18wXzE1XzF4CisKK2NvbmZpZyBDTE9PR19WXzBfMTVfOQorICAgIGJvb2wKKyAgICBwcm9tcHQgIjAuMTUuOSIKKworY29uZmlnIENMT09HX1ZfMF8xNV84CisgICAgYm9vbAorICAgIHByb21wdCAiMC4xNS44IgorCitjb25maWcgQ0xPT0dfVl8wXzE1XzcKKyAgICBib29sCisgICAgcHJvbXB0ICIwLjE1LjciCisKK2NvbmZpZyBDTE9PR19WXzBfMTVfNgorICAgIGJvb2wKKyAgICBwcm9tcHQgIjAuMTUuNiIKKworZW5kY2hvaWNlCisKK2NvbmZpZyBDTE9PR19WRVJTSU9OCisgICAgc3RyaW5nCisjIERvbid0IHJlbW92ZSBuZXh0IGxpbmUKKyMgQ1RfSU5TRVJUX1ZFUlNJT05fU1RSSU5HX0JFTE9XCisgICAgZGVmYXVsdCAiMC4xNS4xMSIgaWYgQ0xPT0dfVl8wXzE1XzExCisgICAgZGVmYXVsdCAiMC4xNS4xMCIgaWYgQ0xPT0dfVl8wXzE1XzEwCisgICAgZGVmYXVsdCAiMC4xNS45IiBpZiBDTE9PR19WXzBfMTVfOQorICAgIGRlZmF1bHQgIjAuMTUuOCIgaWYgQ0xPT0dfVl8wXzE1XzgKKyAgICBkZWZhdWx0ICIwLjE1LjciIGlmIENMT09HX1ZfMF8xNV83CisgICAgZGVmYXVsdCAiMC4xNS42IiBpZiBDTE9PR19WXzBfMTVfNgorICAgIGRlZmF1bHQgIjAuMTUuNSIgaWYgQ0xPT0dfVl8wXzE1XzUKKyAgICBkZWZhdWx0ICIwLjE1LjQiIGlmIENMT09HX1ZfMF8xNV80CisgICAgZGVmYXVsdCAiMC4xNS4zIiBpZiBDTE9PR19WXzBfMTVfMworCitjb25maWcgQ0xPT0dfMF8xNV8xeAorICAgIGJvb2wKKyAgICBzZWxlY3QgQ0xPT0dfTkVFRFNfQVVUT1JFQ09ORgorCitjb25maWcgQ0xPT0dfTkVFRFNfQVVUT1JFQ09ORgorICAgIGJvb2wKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2NvbXBhbmlvbl9saWJzL2dtcC5pbiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2NvbXBhbmlvbl9saWJzL2dtcC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTY4ZjVhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvY29tcGFuaW9uX2xpYnMvZ21wLmluCkBAIC0wLDAgKzEsNTMgQEAKKyMgR01QIG9wdGlvbnMKKworY2hvaWNlCisgICAgYm9vbAorICAgIHByb21wdCAiR01QIHZlcnNpb24iCisjIERvbid0IHJlbW92ZSBuZXh0IGxpbmUKKyMgQ1RfSU5TRVJUX1ZFUlNJT05fQkVMT1cKKworY29uZmlnIEdNUF9WXzVfMF8yCisgICAgYm9vbAorICAgIHByb21wdCAiNS4wLjIgKEVYUEVSSU1FTlRBTCkiCisgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKworY29uZmlnIEdNUF9WXzVfMF8xCisgICAgYm9vbAorICAgIHByb21wdCAiNS4wLjEgKEVYUEVSSU1FTlRBTCkiCisgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKworY29uZmlnIEdNUF9WXzRfM18yCisgICAgYm9vbAorICAgIHByb21wdCAiNC4zLjIiCisKK2NvbmZpZyBHTVBfVl80XzNfMQorICAgIGJvb2wKKyAgICBwcm9tcHQgIjQuMy4xIgorCitjb25maWcgR01QX1ZfNF8zXzAKKyAgICBib29sCisgICAgcHJvbXB0ICI0LjMuMCIKKworY29uZmlnIEdNUF9WXzRfMl80CisgICAgYm9vbAorICAgIHByb21wdCAiNC4yLjQgKE9CU09MRVRFKSIKKyAgICBkZXBlbmRzIG9uIE9CU09MRVRFCisKK2NvbmZpZyBHTVBfVl80XzJfMgorICAgIGJvb2wKKyAgICBwcm9tcHQgIjQuMi4yIChPQlNPTEVURSkiCisgICAgZGVwZW5kcyBvbiBPQlNPTEVURQorCitlbmRjaG9pY2UKKworY29uZmlnIEdNUF9WRVJTSU9OCisgICAgc3RyaW5nCisjIERvbid0IHJlbW92ZSBuZXh0IGxpbmUKKyMgQ1RfSU5TRVJUX1ZFUlNJT05fU1RSSU5HX0JFTE9XCisgICAgZGVmYXVsdCAiNS4wLjIiIGlmIEdNUF9WXzVfMF8yCisgICAgZGVmYXVsdCAiNS4wLjEiIGlmIEdNUF9WXzVfMF8xCisgICAgZGVmYXVsdCAiNC4zLjIiIGlmIEdNUF9WXzRfM18yCisgICAgZGVmYXVsdCAiNC4zLjEiIGlmIEdNUF9WXzRfM18xCisgICAgZGVmYXVsdCAiNC4zLjAiIGlmIEdNUF9WXzRfM18wCisgICAgZGVmYXVsdCAiNC4yLjQiIGlmIEdNUF9WXzRfMl80CisgICAgZGVmYXVsdCAiNC4yLjIiIGlmIEdNUF9WXzRfMl8yCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9jb21wYW5pb25fbGlicy9saWJlbGYuaW4gYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9jb21wYW5pb25fbGlicy9saWJlbGYuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRlZmYxMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2NvbXBhbmlvbl9saWJzL2xpYmVsZi5pbgpAQCAtMCwwICsxLDI0IEBACisjIGxpYmVsZiBjb25maWcgZmlsZQorCitjaG9pY2UKKyAgICBib29sCisgICAgcHJvbXB0ICJsaWJlbGYgdmVyc2lvbiIKKyMgRG9uJ3QgcmVtb3ZlIG5leHQgbGluZQorIyBDVF9JTlNFUlRfVkVSU0lPTl9CRUxPVworCitjb25maWcgTElCRUxGX1ZfMF84XzEzCisgICAgYm9vbAorICAgIHByb21wdCAiMC44LjEzIgorCitjb25maWcgTElCRUxGX1ZfMF84XzEyCisgICAgYm9vbAorICAgIHByb21wdCAiMC44LjEyIgorCitlbmRjaG9pY2UKKworY29uZmlnIExJQkVMRl9WRVJTSU9OCisgICAgc3RyaW5nCisjIERvbid0IHJlbW92ZSBuZXh0IGxpbmUKKyMgQ1RfSU5TRVJUX1ZFUlNJT05fU1RSSU5HX0JFTE9XCisgICAgZGVmYXVsdCAiMC44LjEzIiBpZiBMSUJFTEZfVl8wXzhfMTMKKyAgICBkZWZhdWx0ICIwLjguMTIiIGlmIExJQkVMRl9WXzBfOF8xMgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvY29tcGFuaW9uX2xpYnMvbXBjLmluIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvY29tcGFuaW9uX2xpYnMvbXBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZmM0Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9jb21wYW5pb25fbGlicy9tcGMuaW4KQEAgLTAsMCArMSw0MiBAQAorIyBNUEMgb3B0aW9ucworCitjaG9pY2UKKyAgICBib29sCisgICAgcHJvbXB0ICJNUEMgdmVyc2lvbiIKKyMgRG9uJ3QgcmVtb3ZlIG5leHQgbGluZQorIyBDVF9JTlNFUlRfVkVSU0lPTl9CRUxPVworCitjb25maWcgTVBDX1ZfMF85CisgICAgYm9vbAorICAgIHByb21wdCAiMC45IChFWFBFUklNRU5UQUwpIgorICAgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisKK2NvbmZpZyBNUENfVl8wXzhfMgorICAgIGJvb2wKKyAgICBwcm9tcHQgIjAuOC4yIChFWFBFUklNRU5UQUwpIgorICAgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisKK2NvbmZpZyBNUENfVl8wXzhfMQorICAgIGJvb2wKKyAgICBwcm9tcHQgIjAuOC4xIgorCitjb25maWcgTVBDX1ZfMF83CisgICAgYm9vbAorICAgIHByb21wdCAiMC43IgorCitjb25maWcgTVBDX1ZfMF82CisgICAgYm9vbAorICAgIHByb21wdCAiMC42IChPQlNPTEVURSkiCisgICAgZGVwZW5kcyBvbiBPQlNPTEVURQorCitlbmRjaG9pY2UKKworY29uZmlnIE1QQ19WRVJTSU9OCisgICAgc3RyaW5nCisjIERvbid0IHJlbW92ZSBuZXh0IGxpbmUKKyMgQ1RfSU5TRVJUX1ZFUlNJT05fU1RSSU5HX0JFTE9XCisgICAgZGVmYXVsdCAiMC45IiBpZiBNUENfVl8wXzkKKyAgICBkZWZhdWx0ICIwLjguMiIgaWYgTVBDX1ZfMF84XzIKKyAgICBkZWZhdWx0ICIwLjguMSIgaWYgTVBDX1ZfMF84XzEKKyAgICBkZWZhdWx0ICIwLjciIGlmIE1QQ19WXzBfNworICAgIGRlZmF1bHQgIjAuNiIgaWYgTVBDX1ZfMF82CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9jb21wYW5pb25fbGlicy9tcGZyLmluIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvY29tcGFuaW9uX2xpYnMvbXBmci5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTgzYjg4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvY29tcGFuaW9uX2xpYnMvbXBmci5pbgpAQCAtMCwwICsxLDUyIEBACisjIEdNUCBvcHRpb25zCisKK2Nob2ljZQorICAgIGJvb2wKKyAgICBwcm9tcHQgIk1QRlIgdmVyc2lvbiIKKyMgRG9uJ3QgcmVtb3ZlIG5leHQgbGluZQorIyBDVF9JTlNFUlRfVkVSU0lPTl9CRUxPVworCitjb25maWcgTVBGUl9WXzNfMF8xCisgICAgYm9vbAorICAgIHByb21wdCAiMy4wLjEgKEVYUEVSSU1FTlRBTCkiCisgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKworY29uZmlnIE1QRlJfVl8zXzBfMAorICAgIGJvb2wKKyAgICBwcm9tcHQgIjMuMC4wIgorCitjb25maWcgTVBGUl9WXzJfNF8yCisgICAgYm9vbAorICAgIHByb21wdCAiMi40LjIiCisKK2NvbmZpZyBNUEZSX1ZfMl80XzEKKyAgICBib29sCisgICAgcHJvbXB0ICIyLjQuMSIKKworY29uZmlnIE1QRlJfVl8yXzRfMAorICAgIGJvb2wKKyAgICBwcm9tcHQgIjIuNC4wIgorCitjb25maWcgTVBGUl9WXzJfM18yCisgICAgYm9vbAorICAgIHByb21wdCAiMi4zLjIgKE9CU09MRVRFKSIKKyAgICBkZXBlbmRzIG9uIE9CU09MRVRFCisKK2NvbmZpZyBNUEZSX1ZfMl8zXzEKKyAgICBib29sCisgICAgcHJvbXB0ICIyLjMuMSAoT0JTT0xFVEUpIgorICAgIGRlcGVuZHMgb24gT0JTT0xFVEUKKworZW5kY2hvaWNlCisKK2NvbmZpZyBNUEZSX1ZFUlNJT04KKyAgICBzdHJpbmcKKyMgRG9uJ3QgcmVtb3ZlIG5leHQgbGluZQorIyBDVF9JTlNFUlRfVkVSU0lPTl9TVFJJTkdfQkVMT1cKKyAgICBkZWZhdWx0ICIzLjAuMSIgaWYgTVBGUl9WXzNfMF8xCisgICAgZGVmYXVsdCAiMy4wLjAiIGlmIE1QRlJfVl8zXzBfMAorICAgIGRlZmF1bHQgIjIuNC4yIiBpZiBNUEZSX1ZfMl80XzIKKyAgICBkZWZhdWx0ICIyLjQuMSIgaWYgTVBGUl9WXzJfNF8xCisgICAgZGVmYXVsdCAiMi40LjAiIGlmIE1QRlJfVl8yXzRfMAorICAgIGRlZmF1bHQgIjIuMy4yIiBpZiBNUEZSX1ZfMl8zXzIKKyAgICBkZWZhdWx0ICIyLjMuMSIgaWYgTVBGUl9WXzJfM18xCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9jb21wYW5pb25fbGlicy9wcGwuaW4gYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9jb21wYW5pb25fbGlicy9wcGwuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY0MWE4OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2NvbXBhbmlvbl9saWJzL3BwbC5pbgpAQCAtMCwwICsxLDQ4IEBACisjIFBQTCBvcHRpb25zCisKK2Nob2ljZQorICAgIGJvb2wKKyAgICBwcm9tcHQgIlBQTCB2ZXJzaW9uIgorIyBEb24ndCByZW1vdmUgbmV4dCBsaW5lCisjIENUX0lOU0VSVF9WRVJTSU9OX0JFTE9XCisKK2NvbmZpZyBQUExfVl8wXzExXzIKKyAgICBib29sCisgICAgcHJvbXB0ICIwLjExLjIgKEVYUEVSSU1FTlRBTCkiCisgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKyAgICBzZWxlY3QgUFBMXzBfMTEKKworY29uZmlnIFBQTF9WXzBfMTFfMQorICAgIGJvb2wKKyAgICBwcm9tcHQgIjAuMTEuMSAoRVhQRVJJTUVOVEFMKSIKKyAgICBkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorICAgIHNlbGVjdCBQUExfMF8xMQorCitjb25maWcgUFBMX1ZfMF8xMQorICAgIGJvb2wKKyAgICBwcm9tcHQgIjAuMTEgKEVYUEVSSU1FTlRBTCkiCisgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKyAgICBzZWxlY3QgUFBMXzBfMTEKKworY29uZmlnIFBQTF9WXzBfMTBfMgorICAgIGJvb2wKKyAgICBwcm9tcHQgIjAuMTAuMiIKKworZW5kY2hvaWNlCisKK2NvbmZpZyBQUExfVkVSU0lPTgorICAgIHN0cmluZworIyBEb24ndCByZW1vdmUgbmV4dCBsaW5lCisjIENUX0lOU0VSVF9WRVJTSU9OX1NUUklOR19CRUxPVworICAgIGRlZmF1bHQgIjAuMTEuMiIgaWYgUFBMX1ZfMF8xMV8yCisgICAgZGVmYXVsdCAiMC4xMS4xIiBpZiBQUExfVl8wXzExXzEKKyAgICBkZWZhdWx0ICIwLjExIiBpZiBQUExfVl8wXzExCisgICAgZGVmYXVsdCAiMC4xMC4yIiBpZiBQUExfVl8wXzEwXzIKKworIyBGb3IgUFBMIDAuMTEsIHdlIG5lZWQgdG8gcHVsbCBsaWJwd2wgaWYgY29uZmlndXJlZCBzdGF0aWMKK2NvbmZpZyBQUExfMF8xMQorICAgIGJvb2wKKyAgICBzZWxlY3QgUFBMX05FRURTX0xJQlBXTCBpZiAhIENPTVBMSUJTX1NIQVJFRAorCitjb25maWcgUFBMX05FRURTX0xJQlBXTAorICAgIGJvb2wKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2NvbXBhbmlvbl90b29scy5pbiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2NvbXBhbmlvbl90b29scy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWI3OGVlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvY29tcGFuaW9uX3Rvb2xzLmluCkBAIC0wLDAgKzEsNDggQEAKKyMgQ29tcGFuaW9uIHRvb2xzIGNvbmZpZyBvcHRpb25zCisKK2lmIEVYUEVSSU1FTlRBTAorCittZW51ICJDb21wYW5pb24gdG9vbHMiCisKK2NvbW1lbnQgIlJFQUQgSEVMUCBiZWZvcmUgeW91IHNheSAnWScgYmVsb3cgISEhIgorY29uZmlnIENPTVBfVE9PTFMKKyAgICBib29sCisgICAgcHJvbXB0ICJCdWlsZCBzb21lIGNvbXBhbmlvbiB0b29scyIKKyAgICBoZWxwCisgICAgICBDcm9zc3Rvb2wtTkcgcmVsaWVzIG9uIHNvbWUgZXh0ZXJuYWwgdG9vbHMgdG8gYmUgcmVjZW50IGVub3VnaCwgbmFtZWx5OgorICAgICAgICBtYWtlID0gMy44MSAoaW4gc29tZSBjYXNlcykKKyAgICAgICAgbTQgPj0gMS40LjEyCisgICAgICAgIGF1dG9jb25mID49IDIuNjMKKyAgICAgICAgYXV0b21ha2UgPj0gMS4xMC4yCisgICAgICAgIGxpYnRvb2wgPj0gMi4yLjQKKyAgICAgIAorICAgICAgSWYgeW91ciBzeXN0ZW0gaGFzIG9sZGVyIHZlcnNpb25zLCB3ZSBjYW4gYnVpbGQgdGhlbSBmb3IgeW91LAorICAgICAgYnV0IHlvdSBhcmUgc3Ryb25nbHkgZW5jb3VyYWdlZCB0byB1cGRhdGUgeW91ciBzeXN0ZW0gaW5zdGVhZCEKKworaWYgQ09NUF9UT09MUworCitjb25maWcgQ09NUF9UT09MU19tYWtlCisgICAgYm9vbAorICAgIHByb21wdCAibWFrZSIKKworY29uZmlnIENPTVBfVE9PTFNfbTQKKyAgICBib29sCisgICAgcHJvbXB0ICJtNCIKKworY29uZmlnIENPTVBfVE9PTFNfYXV0b2NvbmYKKyAgICBib29sCisgICAgcHJvbXB0ICJhdXRvY29uZiIKKworY29uZmlnIENPTVBfVE9PTFNfYXV0b21ha2UKKyAgICBib29sCisgICAgcHJvbXB0ICJhdXRvbWFrZSIKKworY29uZmlnIENPTVBfVE9PTFNfbGlidG9vbAorICAgIGJvb2wKKyAgICBwcm9tcHQgImxpYnRvb2wiCisKK2VuZGlmCisKK2VuZG1lbnUKKworZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2NvbmZpZy5pbiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2NvbmZpZy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTg4ZmVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvY29uZmlnLmluCkBAIC0wLDAgKzEsMTMgQEAKK3NvdXJjZSAiY29uZmlnL2NvbmZpZ3VyZS5pbiIKK3NvdXJjZSAiY29uZmlnL2JhY2tlbmQuaW4iCitzb3VyY2UgImNvbmZpZy9nbG9iYWwuaW4iCitzb3VyY2UgImNvbmZpZy90YXJnZXQuaW4iCitzb3VyY2UgImNvbmZpZy90b29sY2hhaW4uaW4iCitzb3VyY2UgImNvbmZpZy9rZXJuZWwuaW4iCitzb3VyY2UgImNvbmZpZy9iaW51dGlscy5pbiIKK3NvdXJjZSAiY29uZmlnL2NjLmluIgorc291cmNlICJjb25maWcvbGliYy5pbiIKK3NvdXJjZSAiY29uZmlnL2RlYnVnLmluIgorc291cmNlICJjb25maWcvY29tcGFuaW9uX2xpYnMuaW4iCitzb3VyY2UgImNvbmZpZy9jb21wYW5pb25fdG9vbHMuaW4iCitzb3VyY2UgImNvbmZpZy90ZXN0X3N1aXRlLmluIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvY29uZmlnLm1rIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNDUwNzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9jb25maWcubWsKQEAgLTAsMCArMSw5OCBAQAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgY3Jvc3N0b29sLU5HIGdlbmVyZXJhdGVkIGNvbmZpZyBmaWxlcworIyBUaGVzZSB0YXJnZXRzIGFyZSB1c2VkIGZyb20gdG9wLWxldmVsIG1ha2VmaWxlCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaXN0IGFsbCBjb25maWcgZmlsZXMsIHdldGhlciBzb3VyY2VkIG9yIGdlbmVyYXRlZAorCisjIFRoZSB0b3AtbGV2ZWwgY29uZmlnIGZpbGUgdG8gYmUgdXNlZCBiZSBjb25maWd1cmF0b3JzCitLQ09ORklHX1RPUCA9IGNvbmZpZy9jb25maWcuaW4KKworIyBCdWlsZCB0aGUgbGlzdCBvZiBhbGwgc291cmNlIGNvbmZpZyBmaWxlcworU1RBVElDX0NPTkZJR19GSUxFUyA9ICQocGF0c3Vic3QgJChDVF9MSUJfRElSKS8lLCUsJChzaGVsbCBmaW5kICQoQ1RfTElCX0RJUikvY29uZmlnIC10eXBlIGYgXCggLW5hbWUgJyouaW4nIC1vIC1uYW1lICcqLmluLjInIFwpIDI+L2Rldi9udWxsKSkKKyMgLi4uIGFuZCBob3cgdG8gYWNjZXNzIHRoZW06CiskKFNUQVRJQ19DT05GSUdfRklMRVMpOiBjb25maWcKKworIyBCdWlsZCBhIGxpc3Qgb2YgcGVyLWNvbXBvbmVudC10eXBlIHNvdXJjZSBjb25maWcgZmlsZXMKK0FSQ0hfQ09ORklHX0ZJTEVTICAgICA9ICQocGF0c3Vic3QgJChDVF9MSUJfRElSKS8lLCUsJCh3aWxkY2FyZCAkKENUX0xJQl9ESVIpL2NvbmZpZy9hcmNoLyouaW4pKQorQVJDSF9DT05GSUdfRklMRVNfMiAgID0gJChwYXRzdWJzdCAkKENUX0xJQl9ESVIpLyUsJSwkKHdpbGRjYXJkICQoQ1RfTElCX0RJUikvY29uZmlnL2FyY2gvKi5pbi4yKSkKK0tFUk5FTF9DT05GSUdfRklMRVMgICA9ICQocGF0c3Vic3QgJChDVF9MSUJfRElSKS8lLCUsJCh3aWxkY2FyZCAkKENUX0xJQl9ESVIpL2NvbmZpZy9rZXJuZWwvKi5pbikpCitLRVJORUxfQ09ORklHX0ZJTEVTXzIgPSAkKHBhdHN1YnN0ICQoQ1RfTElCX0RJUikvJSwlLCQod2lsZGNhcmQgJChDVF9MSUJfRElSKS9jb25maWcva2VybmVsLyouaW4uMikpCitDQ19DT05GSUdfRklMRVMgICAgICAgPSAkKHBhdHN1YnN0ICQoQ1RfTElCX0RJUikvJSwlLCQod2lsZGNhcmQgJChDVF9MSUJfRElSKS9jb25maWcvY2MvKi5pbikpCitDQ19DT05GSUdfRklMRVNfMiAgICAgPSAkKHBhdHN1YnN0ICQoQ1RfTElCX0RJUikvJSwlLCQod2lsZGNhcmQgJChDVF9MSUJfRElSKS9jb25maWcvY2MvKi5pbi4yKSkKK0xJQkNfQ09ORklHX0ZJTEVTICAgICA9ICQocGF0c3Vic3QgJChDVF9MSUJfRElSKS8lLCUsJCh3aWxkY2FyZCAkKENUX0xJQl9ESVIpL2NvbmZpZy9saWJjLyouaW4pKQorTElCQ19DT05GSUdfRklMRVNfMiAgID0gJChwYXRzdWJzdCAkKENUX0xJQl9ESVIpLyUsJSwkKHdpbGRjYXJkICQoQ1RfTElCX0RJUikvY29uZmlnL2xpYmMvKi5pbi4yKSkKK0RFQlVHX0NPTkZJR19GSUxFUyAgICA9ICQocGF0c3Vic3QgJChDVF9MSUJfRElSKS8lLCUsJCh3aWxkY2FyZCAkKENUX0xJQl9ESVIpL2NvbmZpZy9kZWJ1Zy8qLmluKSkKKworIyBCdWlsZCB0aGUgbGlzdCBvZiBnZW5lcmF0ZWQgY29uZmlnIGZpbGVzCitHRU5fQ09ORklHX0ZJTEVTID0gY29uZmlnLmdlbi9hcmNoLmluICAgICBcCisgICAgICAgICAgICAgICAgICAgY29uZmlnLmdlbi9rZXJuZWwuaW4gICBcCisgICAgICAgICAgICAgICAgICAgY29uZmlnLmdlbi9jYy5pbiAgICAgICBcCisgICAgICAgICAgICAgICAgICAgY29uZmlnLmdlbi9saWJjLmluICAgICBcCisgICAgICAgICAgICAgICAgICAgY29uZmlnLmdlbi9kZWJ1Zy5pbgorIyAuLi4gYW5kIGhvdyB0byBhY2Nlc3MgdGhlbToKKyMgR2VuZXJhdGVkIGZpbGVzIGRlcGVuZHMgb24gdGhlIGdlbl9pbl9mcmFncyBzY3JpcHQgYmVjYXVzZSBpdCBoYXMgdGhlCisjIGZ1bmN0aW9ucyBuZWVkZWQgdG8gYnVpbGQgdGhlIGdlbnJhdGVkIGZpbGVzLCBhbmQgdGh1cyB0aGV5IG1pZ2h0IG5lZWQKKyMgcmUtZ2VuZXJhdGlvbiBpZiBpdCBjaGFuZ2VzLgorIyBUaGV5IGFsc28gZGVwZW5kcyBvbiBjb25maWcubWsgKHRoaXMgZmlsZSkgYmVjYXVzZSBpdCBoYXMgdGhlIGRlcGVuZGVuY3kKKyMgcnVsZXMsIGFuZCB0aHVzIHRoZXkgbWlnaHQgbmVlZCByZS1nZW5lcmF0aW9uIGlmIHRoZSBkZXBzIGNoYW5nZS4KKyQoR0VOX0NPTkZJR19GSUxFUyk6IGNvbmZpZy5nZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICQoQ1RfTElCX0RJUikvc2NyaXB0cy9nZW5faW5fZnJhZ3Muc2ggIFwKKyAgICAgICAgICAgICAgICAgICAgICQoQ1RfTElCX0RJUikvY29uZmlnL2NvbmZpZy5taworCisjIEhlbHBlciBlbnRyeSBmb3IgdGhlIGNvbmZpZ3VyYXRvcnMKK1BIT05ZICs9IGNvbmZpZ19maWxlcworY29uZmlnX2ZpbGVzOiAkKFNUQVRJQ19DT05GSUdfRklMRVMpICQoR0VOX0NPTkZJR19GSUxFUykKKworIyBXaGVyZSB0byBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb25maWcgZmlsZXMgZnJvbQorY29uZmlnOgorCUAkKEVDSE8pICIgIExOICAgIGNvbmZpZyIKKwkkKFNJTEVOVClsbiAtcyAkKENUX0xJQl9ESVIpL2NvbmZpZyBjb25maWcKKworIyBXaGVyZSB0byBzdG9yZSB0aGUgZ2VuZXJhdGVkIGNvbmZpZyBmaWxlcyBpbnRvCitjb25maWcuZ2VuOgorCUAkKEVDSE8pICIgIE1LRElSIGNvbmZpZy5nZW4iCisJJChTSUxFTlQpbWtkaXIgLXAgY29uZmlnLmdlbgorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQnVpbGQgbGlzdCBvZiBwZXItY29tcG9uZW50LXR5cGUgaXRlbXMgdG8gZWFzaWx5IGJ1aWxkIGdlbmVyYXRlZCBmaWxlcworCitBUkNIUyAgID0gJChwYXRzdWJzdCBjb25maWcvYXJjaC8lLmluLCUsJChBUkNIX0NPTkZJR19GSUxFUykpCitLRVJORUxTID0gJChwYXRzdWJzdCBjb25maWcva2VybmVsLyUuaW4sJSwkKEtFUk5FTF9DT05GSUdfRklMRVMpKQorQ0NTICAgICA9ICQocGF0c3Vic3QgY29uZmlnL2NjLyUuaW4sJSwkKENDX0NPTkZJR19GSUxFUykpCitMSUJDUyAgID0gJChwYXRzdWJzdCBjb25maWcvbGliYy8lLmluLCUsJChMSUJDX0NPTkZJR19GSUxFUykpCitERUJVR1MgID0gJChwYXRzdWJzdCBjb25maWcvZGVidWcvJS5pbiwlLCQoREVCVUdfQ09ORklHX0ZJTEVTKSkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoZSBydWxlcyBmb3IgdGhlIGdlbmVyYXRlZCBjb25maWcgZmlsZXMKKworIyBXQVJOSU5HISBJZiBhIC5pbiBmaWxlIGRpc2FwZWFycyBiZXR3ZWVuIHR3byBydW5zLCB0aGF0IHdpbGwgTk9UIGJlIGRldGVjdGVkIQorCitjb25maWcuZ2VuL2FyY2guaW46ICQoQVJDSF9DT05GSUdfRklMRVMpICQoQVJDSF9DT05GSUdfRklMRVNfMikKKwlAJChFQ0hPKSAnICBJTiAgICAkKEApJworCSQoU0lMRU5UKSQoQ1RfTElCX0RJUikvc2NyaXB0cy9nZW5faW5fZnJhZ3Muc2ggY2hvaWNlICIkQCIgIlRhcmdldCBBcmNoaXRlY3R1cmUiICJBUkNIIiAiY29uZmlnL2FyY2giICJZIiAkKEFSQ0hTKQorCitjb25maWcuZ2VuL2tlcm5lbC5pbjogJChLRVJORUxfQ09ORklHX0ZJTEVTKSAkKEtFUk5FTF9DT05GSUdfRklMRVNfMikKKwlAJChFQ0hPKSAnICBJTiAgICAkKEApJworCSQoU0lMRU5UKSQoQ1RfTElCX0RJUikvc2NyaXB0cy9nZW5faW5fZnJhZ3Muc2ggY2hvaWNlICIkQCIgIlRhcmdldCBPUyIgIktFUk5FTCIgImNvbmZpZy9rZXJuZWwiICJZIiAkKEtFUk5FTFMpCisKK2NvbmZpZy5nZW4vY2MuaW46ICQoQ0NfQ09ORklHX0ZJTEVTKSAkKENDX0NPTkZJR19GSUxFU18yKQorCUAkKEVDSE8pICcgIElOICAgICQoQCknCisJJChTSUxFTlQpJChDVF9MSUJfRElSKS9zY3JpcHRzL2dlbl9pbl9mcmFncy5zaCBjaG9pY2UgIiRAIiAiQyBjb21waWxlciIgIkNDIiAiY29uZmlnL2NjIiAiTiIgJChDQ1MpCisKK2NvbmZpZy5nZW4vbGliYy5pbjogJChMSUJDX0NPTkZJR19GSUxFUykgJChMSUJDX0NPTkZJR19GSUxFU18yKQorCUAkKEVDSE8pICcgIElOICAgICQoQCknCisJJChTSUxFTlQpJChDVF9MSUJfRElSKS9zY3JpcHRzL2dlbl9pbl9mcmFncy5zaCBjaG9pY2UgIiRAIiAiQyBsaWJyYXJ5IiAiTElCQyIgImNvbmZpZy9saWJjIiAiWSIgJChMSUJDUykKKworY29uZmlnLmdlbi9kZWJ1Zy5pbjogJChERUJVR19DT05GSUdfRklMRVMpCisJQCQoRUNITykgJyAgSU4gICAgJChAKScKKwkkKFNJTEVOVCkkKENUX0xJQl9ESVIpL3NjcmlwdHMvZ2VuX2luX2ZyYWdzLnNoIG1lbnUgIiRAIiAiRGVidWcgZmFjaWxpdGllcyIgIkRFQlVHIiAiY29uZmlnL2RlYnVnIiAkKERFQlVHUykKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENsZWFuaW5nIHVwIHRoZSBtZXNzLi4uCisKK2NsZWFuOjoKKwlAJChFQ0hPKSAiICBDTEVBTiBjb25maWciCisJJChTSUxFTlQpcm0gLWYgY29uZmlnIDI+L2Rldi9udWxsIHx8IHRydWUKKwlAJChFQ0hPKSAiICBDTEVBTiBjb25maWcuZ2VuIgorCSQoU0lMRU5UKXJtIC1yZiBjb25maWcuZ2VuCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9jb25maWd1cmUuaW4gYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9jb25maWd1cmUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEyNjkyYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2NvbmZpZ3VyZS5pbgpAQCAtMCwwICsxLDE0IEBACisjIEdlbmVyYXRlZCBmaWxlLCBkbyBub3QgZWRpdAorIyBEZWZhdWx0IHZhbHVlcyBhcyBmb3VuZCBieSAuL2NvbmZpZ3VyZQorCitjb25maWcgQ09ORklHVVJFX2hhc194enV0aWxzCisgICAgZGVmX2Jvb2wgeQorCitjb25maWcgQ09ORklHVVJFX2hhc19sem1hCisgICAgYm9vbAorCitjb25maWcgQ09ORklHVVJFX2hhc19jdnMKKyAgICBkZWZfYm9vbCB5CisKK2NvbmZpZyBDT05GSUdVUkVfaGFzX3N2bgorICAgIGRlZl9ib29sIHkKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2RlYnVnLmluIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvZGVidWcuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkOTllZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2RlYnVnLmluCkBAIC0wLDAgKzEsMyBAQAorbWVudSAiRGVidWcgZmFjaWxpdGllcyIKK3NvdXJjZSAiY29uZmlnLmdlbi9kZWJ1Zy5pbiIKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2RlYnVnL2RtYWxsb2MuaW4gYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9kZWJ1Zy9kbWFsbG9jLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkM2I0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9kZWJ1Zy9kbWFsbG9jLmluCkBAIC0wLDAgKzEsMjQgQEAKKyMgZG1hbGxvYyBkZWJ1ZyBmYWNpbGl0eQorCisjIyBkZXBlbmRzIG9uICEgQkFDS0VORAorIyMKKyMjIGhlbHAgZG1hbGxvYyBoZWxwcyB0cmFja2luZyBtZW1vcnkgYWxsb2NhdGlvbiBtaXMtdXNhZ2UKKyMjIGhlbHAgc3VjaCBhcyBkb3VibGUtZnJlZSwgdXNlLWFmdGVyLWZyZWUuLi4KKworY2hvaWNlCisgICAgYm9vbAorICAgIHByb21wdCAiZG1hbGxvYyB2ZXJzaW9uIgorIyBEb24ndCByZW1vdmUgbmV4dCBsaW5lCisjIENUX0lOU0VSVF9WRVJTSU9OX0JFTE9XCisKK2NvbmZpZyBETUFMTE9DX1ZfNV81XzIKKyAgICBib29sCisgICAgcHJvbXB0ICI1LjUuMiIKKworZW5kY2hvaWNlCisKK2NvbmZpZyBETUFMTE9DX1ZFUlNJT04KKyAgICBzdHJpbmcKKyMgRG9uJ3QgcmVtb3ZlIG5leHQgbGluZQorIyBDVF9JTlNFUlRfVkVSU0lPTl9TVFJJTkdfQkVMT1cKKyAgICBkZWZhdWx0ICI1LjUuMiIgaWYgRE1BTExPQ19WXzVfNV8yCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9kZWJ1Zy9kdW1hLmluIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvZGVidWcvZHVtYS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGFlZTc4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvZGVidWcvZHVtYS5pbgpAQCAtMCwwICsxLDU5IEBACisjIEQuVS5NLkEuIC0gRGV0ZWN0IFVuaW50ZW5kZWQgTWVtb3J5IEFjY2VzcyAtIE1lbW9yeSBjaGVja2VyCisKKyMjIGRlcGVuZHMgb24gISBCQUNLRU5ECisKKyMjIGhlbHAgRC5VLk0uQS4gLSBEZXRlY3QgVW5pbnRlbmRlZCBNZW1vcnkgQWNjZXNzCisjIyBoZWxwIEEgbWVtb3J5IGJvdW5kIGNoZWNrZXIsIHdpdGggYWRkaXRpb25hbCBmZWF0dXJlcy4KKyMjIGhlbHAgRm9ybWVybHkga25vd24gYXMgRWxlY3RyaWMgRmVuY2UuCisKK2NvbmZpZyBEVU1BX0EKKyAgICBib29sCisgICAgcHJvbXB0ICJCdWlsZCBhIHN0YXRpYyBsaWJyYXJ5IgorICAgIGRlZmF1bHQgeQorCitjb25maWcgRFVNQV9TTworICAgIGJvb2wKKyAgICBwcm9tcHQgIkJ1aWxkIGEgc2hhcmVkIGxpYnJhcnkiCisgICAgZGVmYXVsdCB5IGlmIFNIQVJFRF9MSUJTCisKK2Nob2ljZQorICAgIGJvb2wKKyAgICBwcm9tcHQgIkQuVS5NLkEuIHZlcnNpb24iCisjIERvbid0IHJlbW92ZSBuZXh0IGxpbmUKKyMgQ1RfSU5TRVJUX1ZFUlNJT05fQkVMT1cKKworY29uZmlnIERVTUFfVl8yXzVfMTUKKyAgICBib29sCisgICAgcHJvbXB0ICIyXzVfMTUiCisKK2NvbmZpZyBEVU1BX1ZfMl81XzE0CisgICAgYm9vbAorICAgIHByb21wdCAiMl81XzE0IChPQlNPTEVURSkiCisgICAgZGVwZW5kcyBvbiBPQlNPTEVURQorCitjb25maWcgRFVNQV9WXzJfNV8xMgorICAgIGJvb2wKKyAgICBwcm9tcHQgIjJfNV8xMiAoT0JTT0xFVEUpIgorICAgIGRlcGVuZHMgb24gT0JTT0xFVEUKKworY29uZmlnIERVTUFfVl8yXzVfOAorICAgIGJvb2wKKyAgICBwcm9tcHQgIjJfNV84IChPQlNPTEVURSkiCisgICAgZGVwZW5kcyBvbiBPQlNPTEVURQorCitjb25maWcgRFVNQV9WXzJfNV8xCisgICAgYm9vbAorICAgIHByb21wdCAiMl81XzEgKE9CU09MRVRFKSIKKyAgICBkZXBlbmRzIG9uIE9CU09MRVRFCisKK2VuZGNob2ljZQorCitjb25maWcgRFVNQV9WRVJTSU9OCisgICAgc3RyaW5nCisjIERvbid0IHJlbW92ZSBuZXh0IGxpbmUKKyMgQ1RfSU5TRVJUX1ZFUlNJT05fU1RSSU5HX0JFTE9XCisgICAgZGVmYXVsdCAiMl81XzE1IiBpZiBEVU1BX1ZfMl81XzE1CisgICAgZGVmYXVsdCAiMl81XzE0IiBpZiBEVU1BX1ZfMl81XzE0CisgICAgZGVmYXVsdCAiMl81XzEyIiBpZiBEVU1BX1ZfMl81XzEyCisgICAgZGVmYXVsdCAiMl81XzgiIGlmIERVTUFfVl8yXzVfOAorICAgIGRlZmF1bHQgIjJfNV8xIiBpZiBEVU1BX1ZfMl81XzEKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2RlYnVnL2dkYi5pbiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2RlYnVnL2dkYi5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjZmZDY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvZGVidWcvZ2RiLmluCkBAIC0wLDAgKzEsMTA5IEBACisjIEdEQiBtZW51CisKKyMjIGhlbHAgZ2RiIGlzIHRoZSBHTlUgZGVidWdnZXIKKworc291cmNlICJjb25maWcvZGVidWcvZ2RiLmluLmNyb3NzIgorc291cmNlICJjb25maWcvZGVidWcvZ2RiLmluLm5hdGl2ZSIKK3NvdXJjZSAiY29uZmlnL2RlYnVnL2dkYi5pbi5nZGJzZXJ2ZXIiCisKK2lmIEdEQl9DUk9TUyB8fCBHREJfTkFUSVZFIHx8IEdEQl9HREJTRVJWRVIKKworY29tbWVudCAiZ2RiIHZlcnNpb24iCisKK2NvbmZpZyBERUJVR19HREJfU0hPV19MSU5BUk8KKyAgICBib29sCisgICAgcHJvbXB0ICJTaG93IExpbmFybyB2ZXJzaW9ucyAoRVhQRVJJTUVOVEFMKSIKKyAgICBkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorICAgIGhlbHAKKyAgICAgIExpbmFybyBpcyBtYWludGFpbmluZyBzb21lIGFkdmFuY2VkL21vcmUgc3RhYmxlL2V4cGVyaW1lbnRhbCB2ZXJzaW9ucworICAgICAgb2YgZ2RiLCBlc3BlY2lhbGx5IGZvciB0aGUgQVJNIGFyY2hpdGVjdHVyZS4KKworICAgICAgVGhvc2UgdmVyc2lvbnMgaGF2ZSBub3QgYmVlbiBibGVzc2VkIGJ5IHRoZSBnZGIgY29tbXVuaXR5IChub3IgaGF2ZSB0aGV5CisgICAgICBiZWVuIGN1cnNlZCBlaXRoZXIhKSwgYnV0IHRoZXkgbG9vayB0byBiZSBwcmV0dHkgbXVjaCBzdGFibGUsIGFuZCBldmVuCisgICAgICBtb3JlIHN0YWJsZSB0aGFuIHRoZSB1cHN0cmVhbSB2ZXJzaW9ucy4gWU1NVi4uLgorCisgICAgICBJZiB5b3UgZG8gbm90IGtub3cgd2hhdCB0aGlzIExpbmFybyBzdHVmZiBpcywgdGhlbiBzaW1wbHkgc2F5ICduJyBoZXJlLAorICAgICAgYW5kIHJlc3QgaW4gcGVhY2UuIE9UT0gsIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZywgeW91IHdpbGwgYmUKKyAgICAgIGFibGUgdG8gdXNlIGFuZCBlbmpveSA6LSkgdGhlIExpbmFybyB2ZXJzaW9ucyBieSBzYXlpbmcgJ3knIGhlcmUuCisKKyAgICAgIExpbmFybzogaHR0cDovL3d3dy5saW5hcm8ub3JnLworCitjaG9pY2UKKyAgICBib29sCisgICAgcHJvbXB0ICJnZGIgdmVyc2lvbiIKKyMgRG9uJ3QgcmVtb3ZlIG5leHQgbGluZQorIyBDVF9JTlNFUlRfVkVSU0lPTl9CRUxPVworCitjb25maWcgR0RCX1ZfbGluYXJvXzdfM18yMDExXzEwCisgICAgYm9vbAorICAgIHByb21wdCAibGluYXJvLTcuMy0yMDExLjEwIChFWFBFUklNRU5UQUwpIgorICAgIGRlcGVuZHMgb24gREVCVUdfR0RCX1NIT1dfTElOQVJPCisgICAgc2VsZWN0IEdEQl83XzBfb3JfbGF0ZXIKKworY29uZmlnIEdEQl9WXzdfM2EKKyAgICBib29sCisgICAgcHJvbXB0ICI3LjNhIChFWFBFUklNRU5UQUwpIgorICAgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisgICAgc2VsZWN0IEdEQl83XzBfb3JfbGF0ZXIKKworY29uZmlnIEdEQl9WX2xpbmFyb183XzJfMjAxMV8wNV8wCisgICAgYm9vbAorICAgIHByb21wdCAibGluYXJvLTcuMi0yMDExLjA1LTAgKEVYUEVSSU1FTlRBTCkiCisgICAgZGVwZW5kcyBvbiBERUJVR19HREJfU0hPV19MSU5BUk8KKyAgICBzZWxlY3QgR0RCXzdfMF9vcl9sYXRlcgorCitjb25maWcgR0RCX1ZfN18yYQorICAgIGJvb2wKKyAgICBwcm9tcHQgIjcuMmEgKEVYUEVSSU1FTlRBTCkiCisgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKyAgICBzZWxlY3QgR0RCXzdfMF9vcl9sYXRlcgorCitjb25maWcgR0RCX1ZfN18xYQorICAgIGJvb2wKKyAgICBwcm9tcHQgIjcuMWEgKEVYUEVSSU1FTlRBTCkiCisgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKyAgICBzZWxlY3QgR0RCXzdfMF9vcl9sYXRlcgorCitjb25maWcgR0RCX1ZfN18wXzFhCisgICAgYm9vbAorICAgIHByb21wdCAiNy4wLjFhIChFWFBFUklNRU5UQUwpIgorICAgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisgICAgc2VsZWN0IEdEQl83XzBfb3JfbGF0ZXIKKworY29uZmlnIEdEQl9WXzdfMGEKKyAgICBib29sCisgICAgcHJvbXB0ICI3LjBhIChFWFBFUklNRU5UQUwpIgorICAgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisgICAgc2VsZWN0IEdEQl83XzBfb3JfbGF0ZXIKKworY29uZmlnIEdEQl9WXzZfOGEKKyAgICBib29sCisgICAgcHJvbXB0ICI2LjhhIgorCitlbmRjaG9pY2UKKworY29uZmlnIEdEQl83XzBfb3JfbGF0ZXIKKyAgICBib29sCisgICAgc2VsZWN0IEdEQl9IQVNfUEtHVkVSU0lPTl9CVUdVUkwKKyAgICBzZWxlY3QgR0RCX0lOU1RBTExfR0RCSU5JVAorCitjb25maWcgR0RCX0hBU19QS0dWRVJTSU9OX0JVR1VSTAorICAgIGJvb2wKKworY29uZmlnIEdEQl9JTlNUQUxMX0dEQklOSVQKKyAgICBib29sCisKK2NvbmZpZyBHREJfVkVSU0lPTgorICAgIHN0cmluZworIyBEb24ndCByZW1vdmUgbmV4dCBsaW5lCisjIENUX0lOU0VSVF9WRVJTSU9OX1NUUklOR19CRUxPVworICAgIGRlZmF1bHQgImxpbmFyby03LjMtMjAxMS4xMCIgaWYgR0RCX1ZfbGluYXJvXzdfM18yMDExXzEwCisgICAgZGVmYXVsdCAiNy4zYSIgaWYgR0RCX1ZfN18zYQorICAgIGRlZmF1bHQgImxpbmFyby03LjItMjAxMS4wNS0wIiBpZiBHREJfVl9saW5hcm9fN18yXzIwMTFfMDVfMAorICAgIGRlZmF1bHQgIjcuMmEiIGlmIEdEQl9WXzdfMmEKKyAgICBkZWZhdWx0ICI3LjFhIiBpZiBHREJfVl83XzFhCisgICAgZGVmYXVsdCAiNy4wLjFhIiBpZiBHREJfVl83XzBfMWEKKyAgICBkZWZhdWx0ICI3LjBhIiBpZiBHREJfVl83XzBhCisgICAgZGVmYXVsdCAiNi44YSIgaWYgR0RCX1ZfNl84YQorCitlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvZGVidWcvZ2RiLmluLmNyb3NzIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvZGVidWcvZ2RiLmluLmNyb3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZTgwZDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9kZWJ1Zy9nZGIuaW4uY3Jvc3MKQEAgLTAsMCArMSw0MiBAQAorIyBNZW51IGZvciB0aGUgY3Jvc3MgR0RCCisKK2NvbmZpZyBTVEFUSUNfVE9PTENIQUlOCisgICAgc2VsZWN0IEdEQl9DUk9TU19TVEFUSUMgaWYgR0RCX0NST1NTCisKK2NvbmZpZyBHREJfQ1JPU1MKKyAgICBib29sCisgICAgcHJvbXB0ICJDcm9zcy1nZGIiCisgICAgZGVmYXVsdCB5CisgICAgc2VsZWN0IEdEQl9HREJTRVJWRVIgaWYgISBCQVJFX01FVEFMCisgICAgaGVscAorICAgICAgQnVpbGQgYW5kIGluc3RhbGwgYSBjcm9zcy1nZGIgZm9yIHRoZSB0YXJnZXQsIHRvIHJ1biBvbiBob3N0LgorCitpZiBHREJfQ1JPU1MKKworY29uZmlnIEdEQl9DUk9TU19TVEFUSUMKKyAgICBib29sCisgICAgcHJvbXB0ICJCdWlsZCBhIHN0YXRpYyBjcm9zcyBnZGIiCisgICAgc2VsZWN0IFdBTlRTX1NUQVRJQ19MSU5LCisgICAgaGVscAorICAgICAgQSBzdGF0aWMgY3Jvc3MgZ2RiIGNhbiBiZSB1c2VmdWxsIGlmIHlvdSBkZWJ1ZyBvbiBhIG1hY2hpbmUgdGhhdCBpcworICAgICAgbm90IHRoZSBvbmUgdGhhdCBpcyB1c2VkIHRvIGNvbXBpbGUgdGhlIHRvb2xjaGFpbi4KKyAgICAgIAorICAgICAgVGhhdCB3YXksIHlvdSBjYW4gc2hhcmUgdGhlIGNyb3NzLWdkYiB3aXRob3V0IGluc3RhbGxpbmcgYSB0b29sY2hhaW4KKyAgICAgIG9uIGV2ZXJ5IG1hY2hpbmUgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZGVidWcgdGFyZ2V0IHByb2dyYW1zLgorCitjb25maWcgR0RCX0NST1NTX1BZVEhPTgorICAgIGJvb2wKKyAgICBwcm9tcHQgIkVuYWJsZSBweXRob24gc2NyaXB0aW5nIgorICAgIGRlcGVuZHMgb24gISBHREJfQ1JPU1NfU1RBVElDCisgICAgZGVmYXVsdCB5CisgICAgaGVscAorICAgICAgU2F5ICd5JyBpZiB5b3Ugd2FudCB0byB1c2UgUHl0aG9uIHNjcmlwdGluZyBpbnNpZGUgZ2RiLgorICAgICAgU2F5ICduJyBpZiB5b3UgZG8gbm90IHdhbnQgdG8uCisgICAgICAKKyAgICAgIEJld2FyZSB0aGF0IGVuYWJsaW5nIFB5dGhvbiBzY3JpcHRpbmcgY291bGQgcmVuZGVyIHRoZSBnZGIKKyAgICAgIGV4ZWN1dGFibGUgbm9uLWZ1bmN0aW9uYWwgaWYgeW91IG1vdmUgaXQgdG8gYW5vdGhlciBtYWNoaW5lLgorICAgICAgQnVpbGRpbmcgYSBzdGF0aWMgZ2RiIGNhbiBoZWxwIGluIHRoaXMgcmVnYXJkLCBhbHRob3VnaCB0aGVyZQorICAgICAgaGF2ZSBiZWVuIHJlcG9ydHMgb2YgcHJvYmxlbXMgd2hlbiBsaW5raW5nIGdkYiB0byB0aGUgc3RhdGljCisgICAgICBsaWJweXRob24uYS4gVGhpcyBzaG91bGQgYmUgZml4ZWQgaW4gZ2RiID49Ny4zLiBZTU1WLgorICAgICAgCitlbmRpZiAjIEdEQl9DUk9TUwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvZGVidWcvZ2RiLmluLmdkYnNlcnZlciBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2RlYnVnL2dkYi5pbi5nZGJzZXJ2ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNjMmM0YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2RlYnVnL2dkYi5pbi5nZGJzZXJ2ZXIKQEAgLTAsMCArMSwyNSBAQAorIyBNZW51IGZvciB0aGUgbmF0aXZlIGdkYnNlcnZlcgorCitjb25maWcgR0RCX0dEQlNFUlZFUgorICAgIGJvb2wKKyAgICBwcm9tcHQgImdkYnNlcnZlciIKKyAgICBkZXBlbmRzIG9uICEgQkFSRV9NRVRBTAorICAgIGhlbHAKKyAgICAgIEJ1aWxkIGFuZCBpbnN0YWxsIGEgZ2Ric2VydmVyIGZvciB0aGUgdGFyZ2V0LCB0byBydW4gb24gdGhlIHRhcmdldC4KKworaWYgR0RCX0dEQlNFUlZFUgorCitjb25maWcgR0RCX0dEQlNFUlZFUl9TVEFUSUMKKyAgICBib29sCisgICAgcHJvbXB0ICJCdWlsZCBhIHN0YXRpYyBnZGJzZXJ2ZXIiCisgICAgZGVmYXVsdCB5CisgICAgaGVscAorICAgICAgSW4gY2FzZSB5b3UgaGF2ZSB0cm91YmxlIHdpdGggZHluYW1pYyBsb2FkaW5nIG9mIHNoYXJlZCBsaWJyYXJpZXMsCisgICAgICB5b3Ugd2lsbCBmaW5kIHRoYXQgYSBzdGF0aWMgZ2Ric2VydmVyIGNvbWVzIGluIGhhbmR5LgorCitlbmRpZiAjIEdEQl9HREJTRVJWRVIKKworaWYgQkFSRV9NRVRBTAorY29tbWVudCAiSW4gYmFyZS1tZXRhbCwgeW91J2xsIG5lZWQgdG8gICAiCitjb21tZW50ICJwcm92aWRlIHlvdXIgb3duIGdkYnNlcnZlciBzdHViLiIKK2VuZGlmICMgQkFSRV9NRVRBTApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvZGVidWcvZ2RiLmluLm5hdGl2ZSBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2RlYnVnL2dkYi5pbi5uYXRpdmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQyMTU5YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2RlYnVnL2dkYi5pbi5uYXRpdmUKQEAgLTAsMCArMSwyMCBAQAorIyBNZW51IGZvciB0aGUgbmF0aXZlIEdEQgorCitjb25maWcgR0RCX05BVElWRQorICAgIGJvb2wKKyAgICBwcm9tcHQgIk5hdGl2ZSBnZGIiCisgICAgZGVwZW5kcyBvbiAhIEJBUkVfTUVUQUwKKyAgICBkZXBlbmRzIG9uICEgQkFDS0VORAorICAgIGhlbHAKKyAgICAgIEJ1aWxkIGFuZCBpbnN0YWxsIGEgbmF0aXZlIGdkYiBmb3IgdGhlIHRhcmdldCwgdG8gcnVuIG9uIHRoZSB0YXJnZXQuCisKK2lmIEdEQl9OQVRJVkUKKworY29uZmlnIEdEQl9OQVRJVkVfU1RBVElDCisgICAgYm9vbAorICAgIHByb21wdCAiQnVpbGQgYSBzdGF0aWMgbmF0aXZlIGdkYiIKKyAgICBoZWxwCisgICAgICBJbiBjYXNlIHlvdSBoYXZlIHRyb3VibGUgd2l0aCBkeW5hbWljIGxvYWRpbmcgb2Ygc2hhcmVkIGxpYnJhcmllcywKKyAgICAgIHlvdSB3aWxsIGZpbmQgdGhhdCBhIHN0YXRpYyBnZGIgY29tZXMgaW4gaGFuZHkuCisKK2VuZGlmICMgR0RCX05BVElWRQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvZGVidWcvbHRyYWNlLmluIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvZGVidWcvbHRyYWNlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZjA4MTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9kZWJ1Zy9sdHJhY2UuaW4KQEAgLTAsMCArMSw1MCBAQAorIyBsdHJhY2UKKworIyMgZGVwZW5kcyBvbiAhIEJBQ0tFTkQKKyMjCisjIyBzZWxlY3QgTElCRUxGX1RBUkdFVAorIyMKKyMjIGhlbHAgbHRyYWNlIGlzIGEgcHJvZ3JhbSB0aGF0IHNpbXBseSBydW5zIHRoZSBzcGVjaWZpZWQgY29tbWFuZCB1bnRpbCBpdCBleGl0cy4KKyMjIGhlbHAgSXQgaW50ZXJjZXB0cyBhbmQgcmVjb3JkcyB0aGUgZHluYW1pYyBsaWJyYXJ5IGNhbGxzIHdoaWNoIGFyZSBjYWxsZWQgYnkKKyMjIGhlbHAgdGhlIGV4ZWN1dGVkIHByb2Nlc3MgYW5kIHRoZSBzaWduYWxzIHdoaWNoIGFyZSByZWNlaXZlZCBieSB0aGF0IHByb2Nlc3MuCisjIyBoZWxwIEl0IGNhbiBhbHNvIGludGVyY2VwdCBhbmQgcHJpbnQgdGhlIHN5c3RlbSBjYWxscyBleGVjdXRlZCBieSB0aGUgcHJvZ3JhbS4KKworY2hvaWNlCisgICAgYm9vbAorICAgIHByb21wdCAibHRyYWNlIHZlcnNpb24iCisjIERvbid0IHJlbW92ZSBuZXh0IGxpbmUKKyMgQ1RfSU5TRVJUX1ZFUlNJT05fQkVMT1cKKworY29uZmlnIExUUkFDRV9WXzBfNV8zCisgICAgYm9vbAorICAgIHByb21wdCAiMC41LjMiCisgICAgc2VsZWN0IExUUkFDRV8wXzVfM19vcl9sYXRlcgorCitjb25maWcgTFRSQUNFX1ZfMF81XzIKKyAgICBib29sCisgICAgcHJvbXB0ICIwLjUuMiIKKworY29uZmlnIExUUkFDRV9WXzBfNQorICAgIGJvb2wKKyAgICBwcm9tcHQgIjAuNSAoT0JTT0xFVEUpIgorICAgIGRlcGVuZHMgb24gT0JTT0xFVEUKKworY29uZmlnIExUUkFDRV9WXzBfNAorICAgIGJvb2wKKyAgICBwcm9tcHQgIjAuNCAoT0JTT0xFVEUpIgorICAgIGRlcGVuZHMgb24gT0JTT0xFVEUKKworZW5kY2hvaWNlCisKK2NvbmZpZyBMVFJBQ0VfVkVSU0lPTgorICAgIHN0cmluZworIyBEb24ndCByZW1vdmUgbmV4dCBsaW5lCisjIENUX0lOU0VSVF9WRVJTSU9OX1NUUklOR19CRUxPVworICAgIGRlZmF1bHQgIjAuNS4zIiBpZiBMVFJBQ0VfVl8wXzVfMworICAgIGRlZmF1bHQgIjAuNS4yIiBpZiBMVFJBQ0VfVl8wXzVfMgorICAgIGRlZmF1bHQgIjAuNS4xIiBpZiBMVFJBQ0VfVl8wXzVfMQorICAgIGRlZmF1bHQgIjAuNSIgaWYgTFRSQUNFX1ZfMF81CisgICAgZGVmYXVsdCAiMC40IiBpZiBMVFJBQ0VfVl8wXzQKKworY29uZmlnIExUUkFDRV8wXzVfM19vcl9sYXRlcgorICAgIGJvb2wKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2RlYnVnL3N0cmFjZS5pbiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2RlYnVnL3N0cmFjZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGJiOTkxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvZGVidWcvc3RyYWNlLmluCkBAIC0wLDAgKzEsNTAgQEAKKyMgc3RyYWNlCisKKyMjIGRlcGVuZHMgb24gISBCQUNLRU5ECisKK2Nob2ljZQorICAgIGJvb2wKKyAgICBwcm9tcHQgInN0cmFjZSB2ZXJzaW9uIgorIyBEb24ndCByZW1vdmUgbmV4dCBsaW5lCisjIENUX0lOU0VSVF9WRVJTSU9OX0JFTE9XCisKK2NvbmZpZyBTVFJBQ0VfVl80XzVfMjAKKyAgICBib29sCisgICAgcHJvbXB0ICI0LjUuMjAgKEVYUEVSSU1FTlRBTCkiCisgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKworY29uZmlnIFNUUkFDRV9WXzRfNV8xOQorICAgIGJvb2wKKyAgICBwcm9tcHQgIjQuNS4xOSIKKworY29uZmlnIFNUUkFDRV9WXzRfNV8xOAorICAgIGJvb2wKKyAgICBwcm9tcHQgIjQuNS4xOCIKKworY29uZmlnIFNUUkFDRV9WXzRfNV8xNworICAgIGJvb2wKKyAgICBwcm9tcHQgIjQuNS4xNyAoT0JTT0xFVEUpIgorICAgIGRlcGVuZHMgb24gT0JTT0xFVEUKKworY29uZmlnIFNUUkFDRV9WXzRfNV8xNgorICAgIGJvb2wKKyAgICBwcm9tcHQgIjQuNS4xNiAoT0JTT0xFVEUpIgorICAgIGRlcGVuZHMgb24gT0JTT0xFVEUKKworY29uZmlnIFNUUkFDRV9WXzRfNV8xNQorICAgIGJvb2wKKyAgICBwcm9tcHQgIjQuNS4xNSAoT0JTT0xFVEUpIgorICAgIGRlcGVuZHMgb24gT0JTT0xFVEUKKworZW5kY2hvaWNlCisKK2NvbmZpZyBTVFJBQ0VfVkVSU0lPTgorICAgIHN0cmluZworIyBEb24ndCByZW1vdmUgbmV4dCBsaW5lCisjIENUX0lOU0VSVF9WRVJTSU9OX1NUUklOR19CRUxPVworICAgIGRlZmF1bHQgIjQuNS4yMCIgaWYgU1RSQUNFX1ZfNF81XzIwCisgICAgZGVmYXVsdCAiNC41LjE5IiBpZiBTVFJBQ0VfVl80XzVfMTkKKyAgICBkZWZhdWx0ICI0LjUuMTgiIGlmIFNUUkFDRV9WXzRfNV8xOAorICAgIGRlZmF1bHQgIjQuNS4xNyIgaWYgU1RSQUNFX1ZfNF81XzE3CisgICAgZGVmYXVsdCAiNC41LjE2IiBpZiBTVFJBQ0VfVl80XzVfMTYKKyAgICBkZWZhdWx0ICI0LjUuMTUiIGlmIFNUUkFDRV9WXzRfNV8xNQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvZ2xvYmFsLmluIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvZ2xvYmFsLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2OTg4MmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9nbG9iYWwuaW4KQEAgLTAsMCArMSwxNyBAQAorIyBPdmVyYWxsIHRvb2xjaGFpbiBjb25maWd1cmF0aW9uOiBwYXRocywgam9icywgZXRjLi4uCisKKyMgQWxsb3cgdW5jb25kaXRpb25hbCB1c2FnZSBvZiB0cmlzdGF0ZXMKK2NvbmZpZyBNT0RVTEVTCisgICAgYm9vbAorICAgIGRlZmF1bHQgeQorCittZW51ICJQYXRocyBhbmQgbWlzYyBvcHRpb25zIgorCitzb3VyY2UgImNvbmZpZy9nbG9iYWwvY3QtYmVoYXZlLmluIgorc291cmNlICJjb25maWcvZ2xvYmFsL3BhdGhzLmluIgorc291cmNlICJjb25maWcvZ2xvYmFsL2Rvd25sb2FkLmluIgorc291cmNlICJjb25maWcvZ2xvYmFsL2V4dHJhY3QuaW4iCitzb3VyY2UgImNvbmZpZy9nbG9iYWwvYnVpbGQtYmVoYXZlLmluIgorc291cmNlICJjb25maWcvZ2xvYmFsL2xvZ2dpbmcuaW4iCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2dsb2JhbC9idWlsZC1iZWhhdmUuaW4gYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9nbG9iYWwvYnVpbGQtYmVoYXZlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMTFlOTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9nbG9iYWwvYnVpbGQtYmVoYXZlLmluCkBAIC0wLDAgKzEsMTMyIEBACisjIE9wdGlvbnMgcmVsYXRlZCB0byBob3cgdGhlIGJ1aWxkIGJlaGF2ZXMKKworY29tbWVudCAiQnVpbGQgYmVoYXZpb3IiCisKK2NvbW1lbnQgIkJ1aWxkIG9wdGlvbnMgaGlkZW4iCisgICAgZGVwZW5kcyBvbiBCQUNLRU5ECisKK2NvbmZpZyBQQVJBTExFTF9KT0JTCisgICAgaW50CisgICAgcHJvbXB0ICJOdW1iZXIgb2YgcGFyYWxsZWwgam9icyIgaWYgISBCQUNLRU5ECisgICAgZGVmYXVsdCAwCisgICAgaGVscAorICAgICAgTnVtYmVyIG9mIGpvYnMgbWFrZSB3aWxsIGJlIGFsbG93ZWQgdG8gcnVuIGNvbmN1cmVudGx5LgorICAgICAgU2V0IHRoaXMgaGlnaGVyIHRoYW4gdGhlIG51bWJlciBvZiBwcm9jZXNzb3JzIHlvdSBoYXZlLCBidXQgbm90IHRvbyBoaWdoLgorICAgICAgQSBnb29kIHJ1bGUgb2YgdGh1bWIgaXMgdHdpY2UgdGhlIG51bWJlciBvZiBwcm9jZXNzb3JzIHlvdSBoYXZlLgorICAgICAgCisgICAgICBFbnRlciAxIHRvIGhhdmUgb25seSBvbmUgam9iIGF0IGEgdGltZS4KKworICAgICAgRW50ZXIgMCB0byBzZXQgYXV0b21hdGljYWxseSBiYXNlZCBvbiBob3cgbWFueSBwcm9jZXNzb3JzIHRoZSBob3N0IGhhcy4KKworY29uZmlnIExPQUQKKyAgICBpbnQKKyAgICBwcm9tcHQgIk1heGltdW0gYWxsb3dlZCBsb2FkIiBpZiAhIEJBQ0tFTkQKKyAgICBkZWZhdWx0IDAKKyAgICBoZWxwCisgICAgICBTcGVjaWZpZXMgdGhhdCBubyBuZXcgam9icyBzaG91bGQgYmUgc3RhcnRlZCBpZiB0aGVyZSBhcmUgb3RoZXJzIGpvYnMKKyAgICAgIHJ1bm5pbmcgYW5kIHRoZSBsb2FkIGF2ZXJhZ2UgaXMgYXQgbGVhc3QgdGhpcyB2YWx1ZS4KKyAgICAgIAorICAgICAgTWFrZXMgc2Vuc2Ugb24gU01QIG1hY2hpbmVzIG9ubHkuCisgICAgICAKKyAgICAgIEVudGVyIDAgdG8gaGF2ZSBubyBsaW1pdCBvbiB0aGUgbG9hZCBhdmVyYWdlLgorICAgICAgCisgICAgICBOb3RlOiBvbmx5IHRoZSBpbnRlZ2VyIHBhcnQgb2YgdGhlIGxvYWQgaXMgYWxsb3dlZCBoZXJlICh5b3UgY2FuJ3QgZW50ZXIKKyAgICAgICAgICAgIDAuNzUgZm9yIGV4YW1wbGUpLgorCitjb25maWcgVVNFX1BJUEVTCisgICAgYm9vbAorICAgIHByb21wdCAiVXNlIC1waXBlIiBpZiAhIEJBQ0tFTkQKKyAgICBkZWZhdWx0IHkKKyAgICBoZWxwCisgICAgICBVc2UgZ2NjJ3Mgb3B0aW9uIC1waXBlIHRvIHVzZSBwaXBlcyByYXRoZXIgdGhhbiB0ZW1wIGZpbGVzIHdoZW4gYnVpbGRpbmcKKyAgICAgIHRoZSB0b29sY2hhaW4uCisKK2NvbmZpZyBFWFRSQV9GTEFHU19GT1JfSE9TVAorICAgIHN0cmluZworICAgIHByb21wdCAiRXh0cmEgaG9zdCBjb21waWxlciBmbGFncyIKKyAgICBkZWZhdWx0ICIiCisgICAgaGVscAorICAgICAgRXh0cmEgZmxhZ3MgdG8gcGFzcyB0byB0aGUgaG9zdCBDIGFuZCBDKysgY29tcGlsZXIuCisKKyAgICAgIE1heSBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBmZWF0dXJlcyBvZiB0aGUgaG9zdAorICAgICAgY29tcGlsZXIgc3VjaCBhcyB0dXJuaW5nIG9mZiB0aGUgc3RhY2sgcHJvdGVjdG9yIG9yIGZvcnRpZnkuCisKK2Nob2ljZQorICAgIGJvb2wKKyAgICBwcm9tcHQgIlNoZWxsIHRvIHVzZSBhcyBDT05GSUdfU0hFTEwiCisgICAgZGVmYXVsdCBDT05GSUdfU0hFTExfQkFTSAorICAgIGRlcGVuZHMgb24gISBCQUNLRU5ECisKK2NvbmZpZyBDT05GSUdfU0hFTExfU0gKKyAgICBib29sCisgICAgcHJvbXB0ICJzaCAodGhlIHN5c3RlbSBzaGVsbCkiCisgICAgaGVscAorICAgICAgVXNlICdzaCcgYXMgQ09ORklHX1NIRUxMLgorICAgICAgCisgICAgICAuL2NvbmZpZ3VyZSBzY3JpcHRzIGFuZCBNYWtlZmlsZXMgbWFrZSBpbnRlbnNpdmUgdXNlIG9mIGNhbGxpbmcKKyAgICAgIHN1Yi1zaGVsbHMuIFRoaXMgaXMgdXN1YWxseSBkb25lIGJ5IGNhbGxpbmcgL2Jpbi9zaC4gL2Jpbi9zaCBvdWdodAorICAgICAgdG8gYmUgYW4gYXQtbGVhc3QtUE9TSVgtY29uZm9ybWFudCBzaGVsbCAodGhhdCBpcywgYWJsZSB0byBpbnRlcnByZXQKKyAgICAgIFBPU0lYIHNoZWxsIHNjcmlwdHMpLgorICAgICAgCisgICAgICBPbiBtYW55IChtb3N0Pykgc3lzdGVtcywgL2Jpbi9zaCBpcyBhIHN5bWxpbmsgdG8gYmFzaC4gT24gc29tZSBvdGhlcgorICAgICAgc3lzdGVtcyAoZWcuIFVidW50dSwgbGF0ZXN0IERlYmlhbiksIC9iaW4vc2ggcG9pbnRzIHRvIGRhc2ggKG9yIGFzaCkuCisgICAgICBiYXNoIGlzIGEgZnVsbC1mZWF0dXJlZCBzaGVsbCwgd2l0aCBtYW55IGV4dGVuc2lvbiB0byBQT1NJWCwgYnV0IGlzCisgICAgICBxdWl0ZSBzbG93IChzZWUgZWN0aW9uIEJVR1MgaW4gdGhlIGJhc2ggbWFuIHBhZ2UpLCB3aGlsZSBkYXNoIGlzCisgICAgICBmYXN0ZXIsIHdpdGggdmVyeSBmZXcgZXh0ZW5zaW9ucyB0byBQT1NJWC4gIE9uIHRoZSBvdGhlciBoYW5kLCBzb21lCisgICAgICAuL2NvbmZpZ3VyZSBzY3JpcHRzLCBhbHRob3VnaCB3cml0dGVuIHRvIHVzZSAvYmluL3NoLCBtYXkgcmVhbGx5CisgICAgICByZXF1aXJlIHRvIGJlIHJ1biBieSBiYXNoLgorICAgICAgCisgICAgICBUaGUgZGVmYXVsdCBpcyB0byB1c2UgYmFzaCwgYXMgc29tZSBjb21wb25lbnRzIChlZy4gR01QKSB3aWxsIGZhaWwKKyAgICAgIHRvIGJ1aWxkIHdpdGggYW55dGhpbmcgZWxzZSB0aGFuIGJhc2guCisgICAgICAKKyAgICAgIFVubGVzcyB5b3UgaGF2ZSBhIHZlcnkgc3Ryb25nIHJlYXNvbiBub3QgdG8gKGVnLiB5b3UgYXJlIGRlYnVnZ2luZworICAgICAgdGhlIGJhc2hpc21zIGluIGEgLi9jb25maWd1cmUgc2NyaXB0KSwgeW91IHNob3VsZCB1c2UgdGhlIGRlZmF1bHQsCisgICAgICBhbmQgdXNlIGJhc2guCisKK2NvbmZpZyBDT05GSUdfU0hFTExfQVNICisgICAgYm9vbAorICAgIHByb21wdCAiYXNoIChSRUFEIEhFTFAhKSIKKyAgICBoZWxwCisgICAgICBVc2UgJ2FzaCcgYXMgQ09ORklHX1NIRUxMLgorICAgICAgCisgICAgICBTZWUgaGVscCBmb3IgQ09ORklHX1NIRUxMX1NILCBhYm92ZSwgZm9yIG1vcmUgZXhwbGFuYXRpb25zLgorICAgICAgCisgICAgICBOT1RFOiBJdCBpcyBhZHZpc2VkIHRoYXQgeW91IGRvIE5PVCB1c2UgYXNoIGFzIENPTkZJR19TSEVMTCwgYXMgc29tZQorICAgICAgY29tcG9uZW50cyBhcmUgYnJva2VuLiBJZiB5b3UgZGVjaWRlIHRvIHVzZSBhc2gsIGFuZCB0aGUgYnVpbGQgYnJlYWtzLAorICAgICAgZG9uJ3QgY29tZSBtb2FuaW5nIGFuZCBzZXQgdGhlIENPTkZJR19TSEVMTCB0byBiYXNoLCBiZWxvdy4KKworY29uZmlnIENPTkZJR19TSEVMTF9CQVNICisgICAgYm9vbAorICAgIHByb21wdCAiYmFzaCIKKyAgICBoZWxwCisgICAgICBVc2UgJ2Jhc2gnIGFzIENPTkZJR19TSEVMTC4KKyAgICAgIAorICAgICAgU2VlIGhlbHAgZm9yIENPTkZJR19TSEVMTF9TSCwgYWJvdmUsIGZvciBtb3JlIGV4cGxhbmF0aW9ucy4KKworY29uZmlnIENPTkZJR19TSEVMTF9DVVNUT00KKyAgICBib29sCisgICAgcHJvbXB0ICJjdXN0b20gc2hlbGwiCisgICAgaGVscAorICAgICAgRW50ZXIgZnVsbCBwYXRoIHRvIHRoZSBjdXN0b20gc2hlbGwgYmVsb3cuCisgICAgICAKKyAgICAgIFNlZSBoZWxwIGZvciBDT05GSUdfU0hFTExfU0gsIGFib3ZlLCBmb3IgbW9yZSBleHBsYW5hdGlvbnMuCisKK2VuZGNob2ljZQorCisjIERvIG5vdCBwdXQgdGhpcyBpbnRvIHRoZSBjaG9pY2UgYWJvdmUsIGJlY2F1c2UgdGhlIGNob2ljZQorIyBpcyBub3QgYXZhaWxhYmxlIGluIEJBQ0tFTkQtbW9kZSwgd2hpbGUgd2UgZG8gd2FudCB0aGlzIHRvCisjIGJlIHNldCBldmVuIGluIEJBQ0tFTkQtbW9kZS4KK2NvbmZpZyBDT05GSUdfU0hFTExfQ1VTVE9NX1BBVEgKKyAgICBzdHJpbmcKKyAgICBwcm9tcHQgIlBhdGggdG8gY3VzdG9tIHNoZWxsIiBpZiAhIEJBQ0tFTkQKKyAgICBkZXBlbmRzIG9uIENPTkZJR19TSEVMTF9DVVNUT00gfHwgQkFDS0VORAorICAgIGRlZmF1bHQgIi9iaW4vc2giCisKKyMgRGl0dG8uCisjIEFuZCB3ZSBtdXN0IHVzZSB0aGUgLi9jb25maWd1cmVkIGJhc2guLi4KK2NvbmZpZyBDT05GSUdfU0hFTEwKKyAgICBzdHJpbmcKKyAgICBkZWZhdWx0ICIvYmluL3NoIiAgICAgICAgICAgICAgICAgICBpZiBDT05GSUdfU0hFTExfU0gKKyAgICBkZWZhdWx0ICIvYmluL2FzaCIgICAgICAgICAgICAgICAgICBpZiBDT05GSUdfU0hFTExfQVNICisgICAgZGVmYXVsdCAiJHtiYXNofSIgICAgICAgICAgICAgICAgICAgaWYgQ09ORklHX1NIRUxMX0JBU0gKKyAgICBkZWZhdWx0IENPTkZJR19TSEVMTF9DVVNUT01fUEFUSCAgICBpZiBDT05GSUdfU0hFTExfQ1VTVE9NIHx8IEJBQ0tFTkQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2dsb2JhbC9jdC1iZWhhdmUuaW4gYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9nbG9iYWwvY3QtYmVoYXZlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZTQzMjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9nbG9iYWwvY3QtYmVoYXZlLmluCkBAIC0wLDAgKzEsOTAgQEAKKyMgT3B0aW9ucyBzcGVjaWZpYyB0byBjcm9zc3Rvb2wtTkcgb3ZlcmFsbCBiZWhhdmlvcgorCitjb21tZW50ICJjcm9zc3Rvb2wtTkcgYmVoYXZpb3IiCisKK2NvbmZpZyBPQlNPTEVURQorICAgIGJvb2wKKyAgICBwcm9tcHQgIlVzZSBvYnNvbGV0ZSBmZWF0dXJlcyIKKyAgICBoZWxwCisgICAgICBJZiB5b3Ugc2V0IHRoaXMgdG8gWSwgeW91IHdpbGwgYmUgYWJsZSB0byBzZWxlY3Qgb2Jzb2xldGUgZmVhdHVyZXMuCisgICAgICAKKyAgICAgIFN1Y2ggb2Jzb2xldGUgZmVhdHVyZXMgYXJlIHRoZSB1c2Ugb2Ygb2xkIGtlcm5lbCBoZWFkZXJzLCBvbGQgZ2NjCisgICAgICB2ZXJzaW9ucywgZXRjLi4uIGZvciB3aGljaCBtYWludGFpbmluZyBzdXBwb3J0IGluIGNyb3NzdG9vbC1ORworICAgICAgd291bGQgYmUgdmVyeSBjb3N0bHkuCisgICAgICAKKyAgICAgIEl0IGRvZXMgbm90IGhvd2V2ZXIgbWVhbiB0aGF0IHRoZSBzcGVjaWZpYyBmZWF0dXJlIG9yIHZlcnNpb24gaGFzIGJlZW4KKyAgICAgIG1hcmtlZCBvYnNvbGV0ZSBieSB0aGUgdXBzdHJlYW0gdGVhbS4KKworY29uZmlnIEVYUEVSSU1FTlRBTAorICAgIGJvb2wKKyAgICBwcm9tcHQgIlRyeSBmZWF0dXJlcyBtYXJrZWQgYXMgRVhQRVJJTUVOVEFMIgorICAgIGhlbHAKKyAgICAgIElmIHlvdSBzZXQgdGhpcyB0byBZLCB0aGVuIHlvdSB3aWxsIGJlIGFibGUgdG8gdHJ5IHZlcnkgZXhwZXJpbWVudGFsCisgICAgICBmZWF0dXJlcy4KKyAgICAgIAorICAgICAgRXhwZXJpbWVudGFsIGZlYXR1cmVzIGNhbiBiZSBvbmUgb2Y6CisgICAgICAgIC0gd29ya2luZywgaW4gd2hpY2ggY2FzZSB5b3Ugc2hvdWxkIHRlbGwgbWUgaXQgaXMhCisgICAgICAgIC0gYnVnZ3ksIGluIHdoaWNoIGNhc2UgeW91IGNvdWxkIHRyeSBwYXRjaGluZyBhbmQgc2VuZCBtZSB0aGUgcmVzdWx0CisgICAgICAgIC0gdW5maW5pc2hlZCwgaW4gd2hpY2ggY2FzZSB5b3UgY291bGQgdHJ5IGhhY2tpbmcgaXQgYW5kIHNlbmQgbWUgdGhlIHJlc3VsdAorICAgICAgICAtIG5vbi1leGlzdGFudCwgaW4gd2hpY2ggY2FzZSB5b3UgY291bGQgYWxzbyB0cnkgaGFja2luZyBpdCBpbiBhbmQgc2VuZCBtZQorICAgICAgICAgIHRoZSByZXN1bHQKKworY29uZmlnIERFQlVHX0NUCisgICAgYm9vbAorICAgIHByb21wdCAiRGVidWcgY3Jvc3N0b29sLU5HIgorICAgIGRlcGVuZHMgb24gISBCQUNLRU5ECisgICAgaGVscAorICAgICAgU2F5ICd5JyBoZXJlIHRvIGdldCBzb21lIG9wdGlvbnMgcmVnYXJkaW5nIGRlYnVnZ2luZyBjcm9zc3Rvb2wtTkcuCisKK2lmIERFQlVHX0NUCisKK2NvbmZpZyBERUJVR19QQVVTRV9TVEVQUworICAgIGJvb2wKKyAgICBwcm9tcHQgIlBhdXNlIGJldHdlZW4gZXZlcnkgc3RlcHMiCisgICAgaGVscAorICAgICAgU2F5ICd5JyBpZiB5b3UgaW50ZW5kIHRvIGF0dGVuZCB0aGUgYnVpbGQsIGFuZCB3YW50IHRvIGludmVzdGlnYXRlCisgICAgICB0aGUgcmVzdWx0IG9mIGVhY2ggc3RlcHMgYmVmb3JlIHJ1bm5pbmcgdGhlIG5leHQgb25lLgorCitjb25maWcgREVCVUdfQ1RfU0FWRV9TVEVQUworICAgIGJvb2wKKyAgICBwcm9tcHQgIlNhdmUgaW50ZXJtZWRpYXRlIHN0ZXBzIgorICAgIGhlbHAKKyAgICAgIElmIHlvdSBzYXkgJ3knIGhlcmUsIHRoZW4geW91IHdpbGwgYmUgYWJsZSB0byByZXN0YXJ0IGNyb3NzdG9vbC1ORyBhdAorICAgICAgYW55IHN0ZXAuCisgICAgICAKKyAgICAgIEl0IGlzIG5vdCBjdXJyZW50bHkgcG9zc2libGUgdG8gcmVzdGFydCBhdCBhbnkgb2YgdGhlIGRlYnVnIGZhY2lsaXRpZXMuCisgICAgICBUaGV5IGFyZSB0cmVhdGVkIGFzIGEgd2hvbGUuCisgICAgICAKKyAgICAgIFRvIGdldCB0aGUgZnVsbCBsaXN0IG9zIHN0ZXBzLCBydW46IGN0LW5nIGxpc3Qtc3RlcHMKKworY29uZmlnIERFQlVHX0NUX1NBVkVfU1RFUFNfR1pJUAorICAgIGJvb2wKKyAgICBwcm9tcHQgImd6aXAgc2F2ZWQgc3RhdGVzIgorICAgIGRlZmF1bHQgeQorICAgIGRlcGVuZHMgb24gREVCVUdfQ1RfU0FWRV9TVEVQUworICAgIGhlbHAKKyAgICAgIElmIHlvdSBhcmUgdGlnaHQgb24gc3BhY2UsIHRoZW4geW91IGNhbiBhc2sgdG8gZ3ppcCB0aGUgc2F2ZWQgc3RhdGVzCisgICAgICB0YXJiYWxscy4gT24gdGhlIG90aGVyIGhhbmQsIHRoaXMgdGFrZXMgc29tZSBsb25nZXIgdGltZS4uLgorICAgICAgCisgICAgICBUbyBsb3NlIGFzIGxlc3MgdGltZSBhcyBwb3NzaWJsZSwgdGhlIGd6aXAgcHJvY2VzcyBpcyBkb25lIHdpdGggYSBsb3cKKyAgICAgIGNvbXByZXNzaW9uIHJhdGlvICgtMyksIHdoaWNoIGdpdmVzIHJvdWdobHkgNzAlIGdhaW4gaW4gc2l6ZS4gR29pbmcKKyAgICAgIGZ1cnRoZXIgZG9lc24ndCBnYWluIG11Y2gsIGFuZCB0YWtlcyBmYXIgbW9yZSB0aW1lIChiZWxpZXZlIG1lLCBJJ3ZlCisgICAgICBnb3QgZmlndXJlcyBoZXJlISA6LSkgKS4KKworY29uZmlnIE5PX09WRVJJREVfTENfTUVTU0FHRVMKKyAgICBib29sCisgICAgcHJvbXB0ICJEbyAqbm90KiBvdmVyaWRlIExDX01FU1NBR0VTIChFWFBFUklNRU5UQUwpIgorICAgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisgICAgaGVscAorICAgICAgQnkgZGVmYXVsdCwgY3Jvc3N0b29sLU5HIHNldHMgYW5kIGV4cG9ydHMgTENfQUxMPUMgc28gdGhhdCB0aGUKKyAgICAgIGJ1aWxkLmxvZyBmaWxlIGNvbnRhaW5zIGVuZ2xpc2ggbWVzc2FnZXMsIHRoYXQgY2FuIGJlIHJlYWQgYnkKKyAgICAgIHBlb3BsZSBtb3N0IGxpa2VseSB0byBoZWxwIGludGVycHJldCB0aGUgbG9ncy4gSWYgeW91IHNheSBOIGhlcmUsCisgICAgICBhbmQgeW91ciBsb2NhbGUgaXMgbm90IGFuIGVuZ2xpc2ggbGFuZ3VhZ2UsIHRoZW4gZGlzc2VjdGluZyB5b3VyCisgICAgICBsb2cgZmlsZSB3aWxsIGJlIGRpZmZpY3VsdCBmb3IgbW9zdCBwZW9wbGUgYnV0IHlvdS4KKyAgICAgIAorICAgICAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4geW91ciBjdXJyZW50IGxvY2FsZSBzZXR0aW5ncyB3aWxsIGJlIHVzZWQKKyAgICAgIHRvIHByaW50IG1lc3NhZ2VzLCBpbnN0ZWFkIG9mIHBsYWluIGVuZ2xpc2guCisgICAgICAKKyAgICAgIFNheSBOLCBwbGVhc2UuCisKK2VuZGlmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9nbG9iYWwvZG93bmxvYWQuaW4gYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9nbG9iYWwvZG93bmxvYWQuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVjYTU5YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2dsb2JhbC9kb3dubG9hZC5pbgpAQCAtMCwwICsxLDkyIEBACisjIE9wdGlvbnMgc3BlY2lmaWMgdG8gZG93bmxvYWRpbmcgcGFja2FnZXMKKworY29tbWVudCAiRG93bmxvYWRpbmciCisKK2NvbmZpZyBGT1JCSURfRE9XTkxPQUQKKyAgICBib29sCisgICAgcHJvbXB0ICJGb3JiaWQgZG93bmxvYWRzIgorICAgIGhlbHAKKyAgICAgIE5vcm1hbGx5LCBjcm9zc3Rvb2wtTkcgd2lsbCB0cnkgdG8gZG93bmxvYWQgbWlzc2luZyB0YXJiYWxscyAob3IKKyAgICAgIGNoZWNrb3V0IGZyb20gQ1ZTL1NWTi4uLikuCisgICAgICBJZiB5b3UgZG8gbm90IGhhdmUgbmV0d29yayBjb25uZWN0aXZpdHkgd2hlbiB5b3UgcnVuIGNyb3NzdG9vbC1ORywKKyAgICAgIGFuZCBzb21lIGZpbGVzIGFyZSBtaXNzaW5nLCBpdCBjYW4gYmUgYSBsb25nIHRpbWUgYmVmb3JlIGNyb3NzdG9vbC1ORworICAgICAgZmFpbHMuCisgICAgICAKKyAgICAgIFNheWluZyAneScgaGVyZSB3aWxsIHByZXZlbnQgY3Jvc3N0b29sLU5HIGZyb20gZG93bmxvYWRpbmcgbWlzc2luZworICAgICAgZmlsZXMsIHRodXMgZmFpbGluZyBlYXJseSBzbyB0aGF0IHlvdSBkb24ndCBnZXQgc3R1Y2suCisKK2lmICEgRk9SQklEX0RPV05MT0FECisKK2NvbmZpZyBGT1JDRV9ET1dOTE9BRAorICAgIGJvb2wKKyAgICBwcm9tcHQgIkZvcmNlIGRvd25sb2FkcyIKKyAgICBoZWxwCisgICAgICBGb3JjZSBkb3dubG9hZGluZyB0YXJiYWxscywgZXZlbiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisgICAgICAKKyAgICAgIFVzZWZ1bCBpZiB5b3Ugc3VzcGVjdCBhIHRhcmJhbGwgdG8gYmUgZGFtYWdlZC4KKworY29uZmlnIENPTk5FQ1RfVElNRU9VVAorICAgIGludAorICAgIHByb21wdCAiQ29ubmVjdGlvbiB0aW1lb3V0IgorICAgIGRlZmF1bHQgMTAKKyAgICBoZWxwCisgICAgICBGcm9tIHRoZSBjdXJsIG1hbnVhbDoKKyAgICAgICAgTWF4aW11bSB0aW1lIGluIHNlY29uZHMgdGhhdCB5b3UgYWxsb3cgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlciB0byB0YWtlLgorICAgICAgCisgICAgICBUaGUgc2NlbmFyaW8gaXMgYXMgZm9sbG93czsKKyAgICAgICAgLSBzb21lIGVudGVycHJpc2UgbmV0d29ya3MgaGF2ZSBmaXJld2FsbHMgdGhhdCBwcm9oaWJpdCBGVFAgdHJhZmZpYywgd2hpbGUKKyAgICAgICAgICBzdGlsbCBhbGxvd2luZyBIVFRQCisgICAgICAgIC0gbW9zdCBkb3dubG9hZCBzaXRlcyBoYXZlIGh0dHA6Ly8gZXF1aXZhbGVudCBmb3IgdGhlIGZ0cDovLyBVUkwKKyAgICAgICAgLSBhZnRlciB0aGlzIG51bWJlciBvZiBzZWNvbmRzLCBpdCBpcyBjb25zaWRlcmVkIHRoYXQgdGhlIGNvbm5lY3Rpb24gY291bGQKKyAgICAgICAgICBub3QgYmUgZXN0YWJsaXNoZWQsIGFuZCB0aGUgbmV4dCBVUkwgaW4gdGhlIGxpc3QgaXMgdHJpZWQsIHVudGlsIHdlIHJlYWNoCisgICAgICAgICAgYW4gVVJMIHRoYXQgd2lsbCBnbyB0aHJvdWdoIHRoZSBmaXJld2FsbCwgbW9zdCBwcm9iYWJseSBhbiBodHRwOi8vIFVSTC4KKyAgICAgIAorICAgICAgSWYgeW91IGhhdmUgYSBzbG93IG5ldHdvcmssIHlvdSdkIGJldHRlciBzZXQgdGhpcyB2YWx1ZSBoaWdoZXIgdGhhbiB0aGUgZGVmYXVsdAorICAgICAgMTBzLiBJZiB5b3Uga25vdyBhIGZpcmV3YWxsIGlzIGJsb2NraW5nIGNvbm5lY3Rpb25zLCBidXQgeW91ciBuZXR3b3JrIGlzIGdsb2JhbGx5CisgICAgICBmYXN0LCB5b3UgY2FuIHRyeSB0byBsb3dlciB0aGlzIHZhbHVlIHRvIGp1bXAgbW9yZSBxdWlja2x5IHRvIGFsbG93ZWQgVVJMcy4gWU1NVi4KKyAgICAgIAorICAgICAgTm90ZSB0aGF0IHRoaXMgdmFsdWUgYXBwbGllcyBlcXVhbGx5IHRvIHdnZXQgaWYgeW91IGhhdmUgdGhhdCBpbnN0YWxsZWQuCisKK2NvbmZpZyBPTkxZX0RPV05MT0FECisgICAgYm9vbAorICAgIHByb21wdCAiU3RvcCBhZnRlciBkb3dubG9hZGluZyB0YXJiYWxscyIKKyAgICBoZWxwCisgICAgICBPbmx5IGRvd25sb2FkIHRoZSB0YXJiYWxscy4gRXhpdCBvbmNlIGl0IGRvbmUuCisgICAgICAKKyAgICAgIFVzZWZ1bCB0byBwcmUtcmV0cmlldmUgdGhlIHRhcmJhbGxzIGJlZm9yZSBnb2luZyBvZmYtbGluZS4KKworZW5kaWYgIyAhIEZPUkJJRF9ET1dOTE9BRAorCitjb25maWcgVVNFX01JUlJPUgorICAgIGJvb2wKKyAgICBwcm9tcHQgIlVzZSBhIG1pcnJvciIKKyAgICBoZWxwCisgICAgICBJZiB5b3UgaGF2ZSBhIG1hY2hpbmUgb24geW91ciBMQU4gdGhhdCBtaXJyb3JzIHNvbWUgb2YgdGhlIG5lZWRlZAorICAgICAgdGFyYmFsbHMsIHlvdSBjYW4gc2F5ICdZJyBoZXJlLCBhbmQgY29uZmlndXJlIGFkZXF1YXRlIHZhbHVlcyBpbgorICAgICAgdGhlIGZvbGxvd2luZyBvcHRpb25zLgorICAgICAgCisgICAgICBPYnZpb3VzbHksIG5vdGhpbmcgcHJldmVudHMgeW91IGZyb20gdXNpbmcgYSBtaXJyb3IgdGhhdCBpcyBpbiBmYWN0CisgICAgICAqbm90KiBvbiB5b3VyIExBTiwgZm9yIGV4YW1wbGUgb24gYW5vdGhlciBzdWJuZXQgb2YgeW91ciBjb21wYW55J3MKKyAgICAgIG5ldHdvcmssIG9yIGEgbWlycm9yIG9uIHRoZSBJbnRlcm5ldC4KKworY29uZmlnIE1JUlJPUl9CQVNFX1VSTAorICAgIHN0cmluZworICAgIHByb21wdCAiQmFzZSBVUkwiCisgICAgZGVwZW5kcyBvbiBVU0VfTUlSUk9SCisgICAgZGVmYXVsdCAiaHR0cDovL2Nyb3NzdG9vbC1uZy5vcmcvbWlycm9ycy8iCisgICAgaGVscAorICAgICAgVGhpcyBpcyB0aGUgYmFzZSBVUkwgc2VhcmNoZWQgaW4gZm9yIHRhcmJhbGxzLgorICAgICAgCisgICAgICBUaGUgY3Jvc3N0b29sLU5HIHNlcnZlciBob3N0cyBhIGZldyBvZiB0aGUgcmVxdWlyZWQgY29tcG9uZW50cywgYnV0CisgICAgICBpdCBpcyBsaW1pdGVkIHRvIHZvbGF0aWxlIHNuYXNob3RzIChlZy4gdUNsaWJjKSB0aGF0IGFyZSB1c2VkIGluIHNvbWUKKyAgICAgIHNhbXBsZXMsIG9yIHRvIG1pcnJvciBzb21lIGFyY2hpdmVzIHdoaWNoIHVwc3RyZWFtIGNhbiBiZSBmbGFreSAoZWcuCisgICAgICBtcGZyKSwgb3IgZm9yIHdoaWNoIHVwc3RyZWFtIHJlbGVhc2VzIGNhbiBiZSBtaXNzaW5nIGR1ZSB0byB1cHN0cmVhbQorICAgICAgbm90IGRvaW5nIGFyY2hpdmVzIChlZy4gZ2xpYmMtcG9ydHMpLgorICAgICAgCisgICAgICBUaGUgbWlycm9yIGlzIHByb3ZpZGVkIGFzLWlzLCBubyBndWFyYW50ZWUgaXMgbWFkZSBhcyB0byB0aGUgYWN0dWFsCisgICAgICBjb250ZW50IG9mIHRoZSBhcmNoaXZlcywgb3IgdG8gdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGUgbWlycm9yLgorICAgICAgCisgICAgICBFeGNlcmNpc2UgY2F1dGlvbiwgdXNlIGF0IHlvdXIgb3duIHJpc2tzIQorICAgICAgCisgICAgICBUaGUgbWlycm9yIGlzIGF2YWlsYWJsZSBhdDoKKyAgICAgICAgaHR0cDovL2Nyb3NzdG9vbC1uZy5vcmcvbWlycm9ycy8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2dsb2JhbC9leHRyYWN0LmluIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvZ2xvYmFsL2V4dHJhY3QuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU5OWZhYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2dsb2JhbC9leHRyYWN0LmluCkBAIC0wLDAgKzEsMTMyIEBACisjIE9wdGlvbnMgc3BlY2lmaWMgdG8gZXh0cmFjdGluZyBwYWNrYWdlcworCitjb21tZW50ICJFeHRyYWN0aW5nIgorCitjb25maWcgRk9SQ0VfRVhUUkFDVAorICAgIGJvb2wKKyAgICBwcm9tcHQgIkZvcmNlIGV4dHJhY3Rpb25zIgorICAgIGhlbHAKKyAgICAgIEZvcmNlIGV4dHJhY3Rpb24gb2YgYWxyZWFkeSBleHRyYWN0ZWQgdGFyYmFsbHMuCisgICAgICAKKyAgICAgIFVzZWZ1bCBpZiB5b3Ugc3VzcGVjdCBhIHByZXZpb3VzIGV4dHJhY3QgZGlkIG5vdCBjb21wbGV0ZSAoZWcuIGJyb2tlbgorICAgICAgdGFyYmFsbCksIG9yIHlvdSBhZGRlZCBhIG5ldyBzZXQgb2YgcGF0Y2hlcyBmb3IgdGhpcyBjb21wb25lbnQuCisKK2NvbmZpZyBPVkVSSURFX0NPTkZJR19HVUVTU19TVUIKKyAgICBib29sCisgICAgcHJvbXB0ICJPdmVycmlkZSBjb25maWcue2d1ZXNzLHN1Yn0iCisgICAgZGVmYXVsdCB5CisgICAgaGVscAorICAgICAgT3ZlcnJpZGUgdG9vbHMnIHZlcnNpb25zIG9mIGNvbmZpZy5ndWVzcyBhbmQgY29uZmlnLnN1YiB3aXRoIHRoZSBvbmVzCisgICAgICBmcm9tIGNyb3NzdG9vbC1ORy4gVGhpcyBtZWFucyB0aGF0IGFsbCBpbnN0YW5jZXMgb2YgY29uZmlnLmd1ZXNzIGFuZAorICAgICAgY29uZmlnLnN1YiBpbiBnY2MsIGJpbnV0aWxzLCBnbGliYywgZXRjLi4uIHdpbGwgYmUgcmVwbGFjZWQuCisKKyAgICAgIE1vc3Qgb2YgdGhlIHRpbWUsIHRoZSB2ZXJzaW9ucyBvZiB0aG9zZSBzY3JpcHRzIGZvdW5kIGluIHBhY2thZ2VzIGFyZSBvbGQKKyAgICAgIHZlcnNpb25zLCB0aHVzIGxhY2tpbmcgc29tZSB0YXJnZXQgZGVmaW5pdGlvbnMuIFRoaXMgaXMgdGhlIGNhc2UgZm9yCisgICAgICB1Q2xpYmMtYmFzZWQgdHVwbGVzIGluIG9sZCB2ZXJzaW9ucyBvZiBnY2MgYW5kIGdkYiwgZm9yIGV4YW1wbGUuCisKKyAgICAgIEFsc28sIGRvaW5nIHNvIHdpbGwgZ3VhcmFudGVlIHRoYXQgYWxsIGNvbXBvbmVudHMgaGF2ZSB0aGUgc2FtZSB0dXBsZXMKKyAgICAgIGRlZmluaXRpb25zIGZvciB5b3VyIHRhcmdldCwgYW5kIG5vdCBkaXZlcmdpbmcgb25lcy4KKworICAgICAgWW91IGNhbiB1cGRhdGUgdGhlIG9uZXMgcHJvdmlkZWQgd2l0aCBjcm9zc3Rvb2wtTkcgYnkgZmlyc3QgcnVubmluZzoKKyAgICAgICAgY3QtbmcgdXBkYXRldG9vbHMKKyAgICAgIGluIHRoZSBkaXJlY3Rvcnkgd2hlcmUgeW91IHdhbnQgdG8gcnVuIGNyb3NzdG9vbC1ORyBwcmlvciB0byB0aGUgYnVpbGQuCisKK2NvbmZpZyBPTkxZX0VYVFJBQ1QKKyAgICBib29sCisgICAgcHJvbXB0ICJTdG9wIGFmdGVyIGV4dHJhY3RpbmcgdGFyYmFsbHMiCisgICAgaGVscAorICAgICAgRXhpdCBhZnRlciB1bnBhY2tpbmcgYW5kIHBhdGNoaW5nIHRhcmJhbGxzLgorICAgICAgCisgICAgICBVc2VmdWwgdG8gbG9vayBhdCB0aGUgY29kZSBiZWZvcmUgZG9pbmcgdGhlIGJ1aWxkIGl0c2VsZi4KKworY2hvaWNlCisgICAgcHJvbXB0ICJQYXRjaGVzIG9yaWdpbiIKKyAgICBib29sCisgICAgZGVmYXVsdCBQQVRDSF9CVU5ETEVECisKK2NvbmZpZyBQQVRDSF9CVU5ETEVECisgICAgYm9vbAorICAgIHByb21wdCAiQnVuZGxlZCBvbmx5IgorICAgIGhlbHAKKyAgICAgIE9ubHkgYXBwbHkgcGF0Y2hlcyBidW5kbGVkIHdpdGggY3Jvc3N0b29sLU5HLgorCitjb25maWcgUEFUQ0hfTE9DQUwKKyAgICBib29sCisgICAgcHJvbXB0ICJMb2NhbCBvbmx5IgorICAgIHNlbGVjdCBQQVRDSF9VU0VfTE9DQUwKKyAgICBoZWxwCisgICAgICBPbmx5IGFwcGx5IHlvdXIgbG9jYWwgcGF0Y2hlcy4KKworY29uZmlnIFBBVENIX0JVTkRMRURfTE9DQUwKKyAgICBib29sCisgICAgcHJvbXB0ICJCdW5kbGVkLCB0aGVuIGxvY2FsIgorICAgIHNlbGVjdCBQQVRDSF9VU0VfTE9DQUwKKyAgICBoZWxwCisgICAgICBBcHBseSB0aGUgcGF0Y2hlcyBidW5kbGVkIHdpdGggY3Jvc3N0b29sLU5HLAorICAgICAgdGhlbiBhcHBseSB5b3VyIGxvY2FsIHBhdGNoZXMuCisKK2NvbmZpZyBQQVRDSF9MT0NBTF9CVU5ETEVECisgICAgYm9vbAorICAgIHByb21wdCAiTG9jYWwsIHRoZW4gYnVuZGxlZCIKKyAgICBzZWxlY3QgUEFUQ0hfVVNFX0xPQ0FMCisgICAgaGVscAorICAgICAgQXBwbHkgeW91ciBsb2NhbCBwYXRjaGVzLCB0aGVuIGFwcGx5IHRoZSBwYXRjaGVzCisgICAgICBidW5kbGVkIHdpdGggY3Jvc3N0b29sLU5HLgorCitjb25maWcgUEFUQ0hfQlVORExFRF9GQUxMQkFDS19MT0NBTAorICAgIGJvb2wKKyAgICBwcm9tcHQgIkJ1bmRsZWQgb25seSwgbG9jYWwgaWYgbm8gYnVuZGxlZCIKKyAgICBzZWxlY3QgUEFUQ0hfVVNFX0xPQ0FMCisgICAgc2VsZWN0IFBBVENIX1NJTkdMRQorICAgIGhlbHAKKyAgICAgIEFwcGx5IHRoZSBwYXRjaGVzIGJ1bmRsZWQgd2l0aCBjcm9zc3Rvb2wtTkc7CisgICAgICBpZiB0aGVyZSdzIG5vIGJ1bmRsZWQgcGF0Y2hlcywgYXBwbHkgeW91ciBsb2NhbCBwYXRjaGVzLgorCitjb25maWcgUEFUQ0hfTE9DQUxfRkFMTEJBQ0tfQlVORExFRAorICAgIGJvb2wKKyAgICBwcm9tcHQgIkxvY2FsIG9ubHksIGJ1bmRsZWQgaWYgbm8gbG9jYWwiCisgICAgc2VsZWN0IFBBVENIX1VTRV9MT0NBTAorICAgIHNlbGVjdCBQQVRDSF9TSU5HTEUKKyAgICBoZWxwCisgICAgICBPbmx5IGFwcGx5IHlvdXIgbG9jYWwgcGF0Y2hlczsKKyAgICAgIGlmIHRoZXJlJ3Mgbm8gbG9jYWwgcGF0Y2hlcywgYXBwbHkgcGF0Y2hlcyBidW5kbGVkIHdpdGggY3Jvc3N0b29sLU5HLgorCitjb25maWcgUEFUQ0hfTk9ORQorICAgIGJvb2wKKyAgICBwcm9tcHQgIk5vbmUiCisgICAgaGVscAorICAgICAgRG9uJ3QgdXNlIGFueSBwYXRjaCBhdCBhbGwuCisgICAgICAKKyAgICAgIFBsZWFzZSBiZSBjYXJlZnVsIGlmIHlvdSBzZWxlY3QgdGhpcy4gTW9zdCBjb21wb25lbnRzIGRvIHJlcXVpcmUKKyAgICAgIHBhdGNoZXMgdG8gcHJvcGVybHkgYnVpbGQuIEl0IGNhbiBoYXBwZW4sIGhvd2V2ZXIsIHRoYXQgc3VwcG9ydCBmb3IKKyAgICAgIHlvdXIgYXJjaGl0ZWN0dXJlIGlzIGNsZWFuIGVub3VnaCB0aGF0IHlvdSBjYW4gYnVpbGQgYSB0b29sY2hhaW4KKyAgICAgIHdpdGggbm8gcGF0Y2guIEJ1dCBtb3N0IHByb2JhYmx5LCB0aGlzIGlzICpub3QqIHRoZSBjYXNlLgorICAgICAgCisgICAgICBCZSBzYWZlLCB1c2UgKHRoZSBidW5kZWxkKSBwYXRjaGVzLgorCitlbmRjaG9pY2UKKworY29uZmlnIFBBVENIX09SREVSCisgICAgc3RyaW5nCisgICAgZGVmYXVsdCAiYnVuZGxlZCIgICAgICAgICAgIGlmIFBBVENIX0JVTkRMRUQKKyAgICBkZWZhdWx0ICJsb2NhbCIgICAgICAgICAgICAgaWYgUEFUQ0hfTE9DQUwKKyAgICBkZWZhdWx0ICJidW5kbGVkLGxvY2FsIiAgICAgaWYgUEFUQ0hfQlVORExFRF9MT0NBTCB8fCBQQVRDSF9CVU5ETEVEX0ZBTExCQUNLX0xPQ0FMCisgICAgZGVmYXVsdCAibG9jYWwsYnVuZGxlZCIgICAgIGlmIFBBVENIX0xPQ0FMX0JVTkRMRUQgfHwgUEFUQ0hfTE9DQUxfRkFMTEJBQ0tfQlVORExFRAorICAgIGRlZmF1bHQgIm5vbmUiICAgICAgICAgICAgICBpZiBQQVRDSF9OT05FCisKK2NvbmZpZyBQQVRDSF9TSU5HTEUKKyAgICBib29sCisKK2NvbmZpZyBQQVRDSF9VU0VfTE9DQUwKKyAgICBib29sCisKK2NvbmZpZyBMT0NBTF9QQVRDSF9ESVIKKyAgICBzdHJpbmcKKyAgICBwcm9tcHQgInwgIExvY2FsIHBhdGNoIGRpcmVjdG9yeSIKKyAgICBkZWZhdWx0ICIiCisgICAgZGVwZW5kcyBvbiBQQVRDSF9VU0VfTE9DQUwKKyAgICBoZWxwCisgICAgICBFbnRlciB0aGUgY3VzdG9tIHBhdGNoIGRpcmVjdG9yeSBoZXJlLgorICAgICAgCisgICAgICBOb3RlIHRoYXQgeW91IG11c3QgZW5zdXJlIHRoYXQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHlvdXIgY3VzdG9tCisgICAgICBwYXRjaGVzIGlzIGFycmFuZ2VkIHRoZSBzYW1lIHdheSB0aGUgb2ZmaWNpYWwgZGlyZWN0b3J5IGlzLgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvZ2xvYmFsL2xvZ2dpbmcuaW4gYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9nbG9iYWwvbG9nZ2luZy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzc3ZTg4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvZ2xvYmFsL2xvZ2dpbmcuaW4KQEAgLTAsMCArMSwxMDYgQEAKKyMgT3B0aW9ucyBzcGVjaWZpYyB0byBsb2dnaW5nCisKK2NvbW1lbnQgIkxvZ2dpbmciCisKK2Nob2ljZQorICAgIGJvb2wKKyAgICBwcm9tcHQgIk1heGltdW0gbG9nIGxldmVsIHRvIHNlZToiCisgICAgZGVmYXVsdCBMT0dfSU5GTyBpZiAhREVCVUdfQ1QKKyAgICBkZWZhdWx0IExPR19ERUJVRyBpZiBERUJVR19DVAorCitjb25maWcgTE9HX0VSUk9SCisgICAgYm9vbAorICAgIHByb21wdCAiRVJST1IiCisgICAgaGVscAorICAgICAgVGhlIGJ1aWxkIHdpbGwgYmUgc2lsZW50LgorICAgICAgT25seSBpZiB0aGVyZSBpcyBhbiBlcnJvciB3aWxsIHlvdSBzZWUgYSBtZXNzYWdlLgorCitjb25maWcgTE9HX1dBUk4KKyAgICBib29sCisgICAgcHJvbXB0ICJXQVJOIgorICAgIGhlbHAKKyAgICAgIFRoZSBzYW1lIGFzIGFib3ZlLCBwbHVzIHdhcm5pbmdzLgorCitjb25maWcgTE9HX0lORk8KKyAgICBib29sCisgICAgcHJvbXB0ICJJTkZPIgorICAgIGhlbHAKKyAgICAgIFRoZSBzYW1lIGFzIGFib3ZlLCBwbHVzIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgKG1haW4gc3RlcHMpLgorCitjb25maWcgTE9HX0VYVFJBCisgICAgYm9vbAorICAgIHByb21wdCAiRVhUUkEiCisgICAgaGVscAorICAgICAgVGhlIHNhbWUgYXMgYWJvdmUsIHBsdXMgZXh0cmEgbWVzc2FnZXMgKHN1Yi1zdGVwcykuCisKK2NvbmZpZyBMT0dfQUxMCisgICAgYm9vbAorICAgIHByb21wdCAiQUxMIgorICAgIGhlbHAKKyAgICAgIFRoZSBzYW1lIGFzIGFib3ZlLCBwbHVzIGFsbCBjb21wb25lbnRzIGJ1aWxkIG1lc3NhZ2VzICh2ZXJ5IG5vaXN5ISkuCisKK2NvbmZpZyBMT0dfREVCVUcKKyAgICBib29sCisgICAgcHJvbXB0ICJERUJVRyIKKyAgICBoZWxwCisgICAgICBUaGUgc2FtZSBhcyBhYm92ZSwgcGx1cyBsb3RzIG9mIGNyb3NzdG9vbC1ORyBkZWJ1ZyBpbmZvcm1hdGlvbi4KKworZW5kY2hvaWNlCisKK2NvbmZpZyBMT0dfTEVWRUxfTUFYCisgICAgc3RyaW5nCisgICAgZGVmYXVsdCAiRVJST1IiICAgaWYgTE9HX0VSUk9SCisgICAgZGVmYXVsdCAiV0FSTiIgICAgaWYgTE9HX1dBUk4KKyAgICBkZWZhdWx0ICJJTkZPIiAgICBpZiBMT0dfSU5GTworICAgIGRlZmF1bHQgIkVYVFJBIiAgIGlmIExPR19FWFRSQQorICAgIGRlZmF1bHQgIkFMTCIgICAgIGlmIExPR19BTEwKKyAgICBkZWZhdWx0ICJERUJVRyIgICBpZiBMT0dfREVCVUcKKworY29uZmlnIExPR19TRUVfVE9PTFNfV0FSTgorICAgIGJvb2wKKyAgICBwcm9tcHQgIldhcm5pbmdzIGZyb20gdGhlIHRvb2xzJyBidWlsZHMiCisgICAgZGVwZW5kcyBvbiAhIExPR19FUlJPUgorICAgIGhlbHAKKyAgICAgIFRyZWF0IHdhcm5pbmdzIGZyb20gdGhlIGRpZmZlcmVudCB0b29scyBhcyBjcm9zc3Rvb2wtTkcgd2FybmluZ3MuCisgICAgICBJZiB5b3Ugc2F5ICd5JyBoZXJlLCB0aGVuIHRob3NlIHdhcm5pbmdzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aAorICAgICAgJ1tXQVJOIF0nIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgJ1tBTEwgIF0nLgorCisgICAgICBZb3UgY2FuIHNhZmVseSBzYXkgJ24nIGhlcmUuIFRob3NlIHdhcm5pbmdzIHdpbGwgYW55d2F5IGJlCisgICAgICByZWNvcmRlZCBpbiB0aGUgbG9nIGZpbGUgKHByb3ZpZGVkIHlvdSBjb25maWd1cmVkIG9uZSkuCisKKyAgICAgIFRvb2xzIGVycm9yIHdpbGwgYWx3YXlzIGJlIGxvZ2dlZCBhcyBjcm9zc3Rvb2wtTkcgZXJyb3JzLgorCitjb25maWcgTE9HX1BST0dSRVNTX0JBUgorICAgIGJvb2wKKyAgICBwcm9tcHQgIlByb2dyZXNzIGJhciIKKyAgICBkZWZhdWx0IHkKKyAgICBkZXBlbmRzIG9uICEgTE9HX0FMTCAmJiAhIExPR19ERUJVRworICAgIGhlbHAKKyAgICAgIElmIHlvdSBzYXkgJ3knIGhlcmUsIHlvdSdsbCBiZSBhYmxlIHRvIHNlZSB0aGUgZWxhcHNlZCB0aW1lLgorICAgICAgCisgICAgICBBcyBhIGJvbnVzLCB5b3UnbGwgYWxzbyBnZXQgYSByb3RhdGluZyBiYXIgKC8tXHwpIHNob3dpbmcgeW91CisgICAgICB0aGF0IHRoZSBidWlsZCBpcyBub3Qgc3RhbGxlZCAodGhlIGJhciByb3RhdGVzIDEvNCBldmVyeSAxMCBsaW5lcworICAgICAgb2YgY29tcG9uZW50cyBidWlsZCBsb2cpLgorCisgICAgICBOb3RlIHRoYXQgdGhlIGVsYXBzZWQgdGltZSBjYW4gc3RhbGwgZm9yIGEgbGl0dGxlIHdoaWxlIGlmIGEKKyAgICAgIGNvbXBvbmVudCBoYXMgbG9uZyBjb21tYW5kcywgYXMgdGhlIGVsYXBzZWQgdGltZSBpcyBvbmx5IHVwZGF0ZWQKKyAgICAgIGVhY2ggbGluZS4KKworY29uZmlnIExPR19UT19GSUxFCisgICAgYm9vbAorICAgIHByb21wdCAiTG9nIHRvIGEgZmlsZSIKKyAgICBkZWZhdWx0IHkKKyAgICBoZWxwCisgICAgICBTYXZlICpmdWxsKiBsb2dzIHRvIGEgZmlsZS4gRXZlbiBsb2cgbGV2ZWxzIHlvdSBkaWRuJ3Qgc3BlY2lmeSBhYm92ZQorICAgICAgd2lsbCBiZSBhdmFpbGFibGUgaW4gdGhpcyBmaWxlLiBUaGUgbG9nIGZpbGUgd2lsbCBiZSBuYW1lZCBidWlsZC5sb2cKKyAgICAgIGFuZCBzdG9yZWQgaW4gdGhlIHRvb2xjaGFpbiBwcmVmaXggZGlyIChzZXQgYWJvdmUpLgorCisgICAgICBEZWZpbml0ZWx5LCBzYXkgWS4KKworY29uZmlnIExPR19GSUxFX0NPTVBSRVNTCisgICAgYm9vbAorICAgIHByb21wdCAiQ29tcHJlc3MgdGhlIGxvZyBmaWxlIgorICAgIGRlZmF1bHQgeQorICAgIGRlcGVuZHMgb24gTE9HX1RPX0ZJTEUKKyAgICBoZWxwCisgICAgICBDb21wcmVzcyB0aGUgbG9nIGZpbGUgb25jZSB0aGUgdG9vbGNoYWluIGlzIHN1Y2Nlc3NmdWxseSBidWlsdC4KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2dsb2JhbC9wYXRocy5pbiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2dsb2JhbC9wYXRocy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzc2NmRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvZ2xvYmFsL3BhdGhzLmluCkBAIC0wLDAgKzEsMTExIEBACisjIE9wdGlvbnMgcmVsYXRlZCB0byBwYXRocyBhbmQgaW5zdGFsbAorCitjb21tZW50ICJQYXRocyIKKworY29uZmlnIExPQ0FMX1RBUkJBTExTX0RJUgorICAgIHN0cmluZworICAgIHByb21wdCAiTG9jYWwgdGFyYmFsbHMgZGlyZWN0b3J5IiBpZiAhIEJBQ0tFTkQKKyAgICBkZWZhdWx0ICIiCisgICAgaGVscAorICAgICAgSWYgeW91IGhhdmUgcHJldmlvdXNseSBkb3dubG9hZGVkIHRoZSB0YXJiYWxscywgZW50ZXIgdGhlIFBBVEggd2hlcmUKKyAgICAgIHlvdSBzdG9yZWQgdGhlbSBoZXJlLgorCitjb25maWcgU0FWRV9UQVJCQUxMUworICAgIGJvb2wKKyAgICBwcm9tcHQgIlNhdmUgbmV3IHRhcmJhbGxzIiBpZiAhIEJBQ0tFTkQKKyAgICBkZXBlbmRzIG9uIExPQ0FMX1RBUkJBTExTX0RJUiAhPSAiIiB8fCBCQUNLRU5ECisgICAgZGVmYXVsdCB5IGlmIEJBQ0tFTkQKKyAgICBoZWxwCisgICAgICBJZiB5b3Ugc2F5ICd5JyBoZXJlLCBuZXcgZG93bmxvYWRlZCB0YXJiYWxscyB3aWxsIGJlIHNhdmVkIGluIHRoZQorICAgICAgZGlyZWN0b3J5IHlvdSBlbnRlcmVkIGFib3ZlLgorCitjb25maWcgV09SS19ESVIKKyAgICBzdHJpbmcKKyAgICBwcm9tcHQgIldvcmtpbmcgZGlyZWN0b3J5IiBpZiAhIEJBQ0tFTkQKKyAgICBkZWZhdWx0ICIke0NUX1RPUF9ESVJ9Ly5idWlsZCIKKyAgICBoZWxwCisgICAgICBTZXQgdGhpcyB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIGFsbCBidWlsZCBhY3Rpb25zIHdpbGwgYmUgZG9uZS4KKyAgICAgIAorICAgICAgVGhlIGRlZmF1bHQgaXMgIiR7Q1RfVE9QX0RJUn0vLmJ1aWxkIiwgYW5kIGxlYXZpbmcgdGhpcyBvcHRpb24KKyAgICAgIGVtcHR5IHdpbGwgYWxzbyB1c2UgdGhlIGRlZmF1bHQuCisgICAgICAKKyAgICAgIFlvdSBzaG91bGQgbm90IG5lZWQgdG8gY2hhbmdlIHRoYXQsIGV4Y2VwdCBpbiBvbmUgdmVyeSBwZWN1bGlhcgorICAgICAgc2V0dXA6CisgICAgICAgLSB5b3VyIGNyb3NzdG9vbC1ORyBzb3VyY2UgZGlyZWN0b3J5IGlzIG9uIHRoZSBuZXR3b3JrCisgICAgICAgLSB5b3UgY29uZmlndXJlZCBjcm9zc3Rvb2wtTkcgd2l0aCAtLWxvY2FsCisgICAgICBUaGlzIGtpbmQgb2Ygc2V0dXAgaXMgYSBwYWluLCBhcyBhbnkgYWN0aW9uIGludm9sdmluZyBzb3VyY2UgZmlsZQorICAgICAgYWNjZXNzIHdvdWxkIGhhdmUgdG8gZ28gdGhyb3VnaCB0aGUgd2lyZS4gSW4gdGhpcyBjYXNlLCB5b3Ugc2hvdWxkCisgICAgICBzZXQgQ1RfV09SS19ESVIgdG8gcG9pbnQgdG8gYSBwYXRoIGxvY2FsIHRvIHlvdXIgbWFjaGluZSwgdG8gYXZvaWQKKyAgICAgIGFueSBuZXR3b3JrIG92ZXJoZWFkLgorICAgICAgCisgICAgICBEbyAqTk9UKiBjaGFuZ2UgaXQgaWYgeW91IGRvbid0IGtub3cgYmV0dGVyLgorCitjb25maWcgUFJFRklYX0RJUgorICAgIHN0cmluZworICAgIHByb21wdCAiUHJlZml4IGRpcmVjdG9yeSIgaWYgISBCQUNLRU5ECisgICAgZGVmYXVsdCAiJHtIT01FfS94LXRvb2xzLyR7Q1RfVEFSR0VUfSIKKyAgICBoZWxwCisgICAgICBUaGlzIGlzIHRoZSBwYXRoIHRoZSB0b29sY2hhaW4gd2lsbCBydW4gZnJvbS4KKworY29uZmlnIElOU1RBTExfRElSCisgICAgc3RyaW5nCisjICAgIHByb21wdCAiSW5zdGFsbCBkaXJlY3RvcnkiCisgICAgZGVmYXVsdCAiJHtDVF9QUkVGSVhfRElSfSIKKyMgICAgaGVscAorIyAgICAgIFRoaXMgaXMgdGhlIHBhdGggdGhlIHRvb2xjaGFpbiB3aWxsIGJlIGluc3RhbGxlZCBpbnRvLgorIyAgICAgIAorIyAgICAgIE5vcm1hbGx5LCB5b3Ugd291bGQgc2V0IHRoaXMgdG8gJHtDVF9QUkVGSVhfRElSfSwgYnV0IGlmIGZvciBzb21lIHJlYXNvbnMKKyMgICAgICB5b3UgY2FuJ3Qgd3JpdGUgdGhlcmUsIHlvdSBjYW4gaW5zdGFsbCBzb21ld2hlcmUgZWxzZSBhbmQgaGF2ZSBhIHRoaXJkCisjICAgICAgcGVyc29uIGRvIHRoZSBpbnN0YWxsIGZvciB5b3UuCisjICAgICAgVGhlIHJlYXNvbiB5b3UgbWlnaHQgYWxzbyB3YW50IHRvIGluc3RhbGwgZWxzZXdoZXJlIGlzIGlmIHlvdSBhcmUgZ29pbmcKKyMgICAgICB0byBwYWNrYWdlIHlvdXIgc2hpbm55IG5ldyB0b29sY2hhaW4gZm9yIGRpc3RyaWJ1dGlvbi4KKworY29uZmlnIFJNX1JGX1BSRUZJWF9ESVIKKyAgICBib29sCisgICAgcHJvbXB0ICJ8ICBSZW1vdmUgdGhlIHByZWZpeCBkaXIgcHJpb3IgdG8gYnVpbGRpbmciCisgICAgZGVmYXVsdCB5CisgICAgZGVwZW5kcyBvbiAhQkFDS0VORAorICAgIGhlbHAKKyAgICAgIElmIHlvdSBzYXkgJ3knIGhlcmUsIHRoZW4gUFJFRklYX0RJUiAoYWJvdmUpIHdpbGwgYmUgZXJhZGljYXRlZAorICAgICAgcHJpb3IgdG8gdGhlIHRvb2xjaGFpbiBpcyBidWlsdC4KKyAgICAgIAorICAgICAgVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW4geW91IGFyZSB0cnlpbmcgZGlmZmVyZW50IHNldHRpbmdzIChkdWUKKyAgICAgIHRvIGJ1aWxkIGZhaWx1cmVzIG9yIGZlYXR1cmUgdGVzdHMpLiBJbiB0aGlzIGNhc2UsIHRvIGF2b2lkIHVzaW5nCisgICAgICBhIHBvdGVudGlhbGx5IGJyb2tlbiBwcmV2aW91cyB0b29sY2hhaW4sIHRoZSBpbnN0YWxsIGxvY2F0aW9uIGlzCisgICAgICByZW1vdmVkLCB0byBzdGFydCBhZnJlc2guCisgICAgICAKKyAgICAgIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB5b3UgYXJlIGJ1aWxkaW5nIGEgZmluYWwgdG9vbGNoYWluLCBhbmQgaW5zdGFsbAorICAgICAgaXQgaW50byBhIGRpcmVjdG9yeSB3aXRoIHByZS1pbnN0YWxsLCB1bnJlbGF0ZWQgcHJvZ3JhbXMsIGl0IHdvdWxkIGJlCisgICAgICBkYW1hZ2VhYmxlIHRvIHJlbW92ZSB0aGF0IGRpcmVjdG9yeS4gSW4gdGhpcyBjYXNlLCB5b3UgbWF5IHdhbnQgdG8KKyAgICAgIHNheSAnbicgaGVyZS4KKyAgICAgIAorICAgICAgTm90ZSB0aGF0IHdoZW4gYWN0aW5nIGFzIGEgYmFja2VuZCwgdGhpcyBvcHRpb24gaXMgbm90IGF2YWlsYWJsZSwgYW5kCisgICAgICBpcyBmb3JjZWQgdG8gJ24nLgorCitjb25maWcgUkVNT1ZFX0RPQ1MKKyAgICBib29sCisgICAgcHJvbXB0ICJSZW1vdmUgZG9jdW1lbnRhdGlvbiIKKyAgICBkZWZhdWx0IHkKKyAgICBoZWxwCisgICAgICBSZW1vdmUgdGhlIGluc3RhbGxlZCBkb2N1bWVudGF0aW9uIChtYW4gYW5kIGluZm8gcGFnZXMpLgorICAgICAgR2FpbnMgYXJvdW5kIDhNaUIgZm9yIGEgdUNsaWJjLWJhc2VkLCBDIGFuZCBDKysgY29tcGlsZXIuCisKK2NvbmZpZyBJTlNUQUxMX0RJUl9STworICAgIGJvb2wKKyAgICBwcm9tcHQgIlJlbmRlciB0aGUgdG9vbGNoYWluIHJlYWQtb25seSIKKyAgICBkZWZhdWx0IHkKKyAgICBoZWxwCisgICAgICBSZW5kZXIgdGhlIGRpcmVjdG9yeSBvZiB0aGUgdG9vbGNoYWluIChhbmQgaXRzIHN1Yi1kaXJlY3RvcmllcykKKyAgICAgIHJlYWQtb25seS4KKyAgICAgIAorICAgICAgVXNlZnVsIGZvciB0b29sY2hhaW5zIGRlc3RpbmVkIGZvciBwcm9kdWN0aW9uLgorCitjb25maWcgU1RSSVBfQUxMX1RPT0xDSEFJTl9FWEVDVVRBQkxFUworICAgIGJvb2wKKyAgICBwcm9tcHQgIlN0cmlwIGFsbCB0b29sY2hhaW4gZXhlY3V0YWJsZXMiCisgICAgZGVmYXVsdCB5CisgICAgaGVscAorICAgICAgQWxsIGJ1aWxkIGhvc3QgZXhlY3V0YWJsZXMgY29udGFpbiBhIGxvdCBvZiB1bm5lY2Vzc2FyeSBpbmZvLgorICAgICAgQnkgc3RyaXBwaW5nIGFsbCBleGVjdXRhYmxlcyBpdCBzbGlnaHRseSBzcGVlZHMgdXAgdGhlIGNvbXBpbGF0aW9uCisgICAgICBvZiBsYXJnZSBwcm9qZWN0cy4KKyAgICAgIE5PVEU6IEl0IGRvZXMgTk9UIHN0cmlwIHRoZSB0YXJnZXQgbGlicmFyaWVzLCBvbmx5IEhPU1QgZXhlY3V0YWJsZXMKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2tlcm5lbC5pbiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2tlcm5lbC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZThjY2U4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcva2VybmVsLmluCkBAIC0wLDAgKzEsNDIgQEAKKyMgS2VybmVsIG9wdGlvbnMKKworbWVudSAiT3BlcmF0aW5nIFN5c3RlbSIKKworIyBDb25maWcgb3B0aW9uIHVzZWQgdGhyb3VnaG91dCB0aGUgY29uZmlnIGFuZCBjb2RlIHRvIGRldGVybWluZSB3ZXRoZXIKKyMgd2UgaGF2ZSBhIGtlcm5lbCBvciBub3QgKHRoZXJlIG1pZ2h0IGJlIGRpZmZlcmVudCBiYXJlIG1ldGFsIHN0dWZmKS4uLgorY29uZmlnIEJBUkVfTUVUQUwKKyAgICBib29sCisKK2NvbmZpZyBNSU5HVzMyCisgICAgYm9vbAorCisjIEVhY2ggdGFyZ2V0IE9TIChha2Ega2VybmVsKSB0aGF0IHN1cHBvcnQgc2hhcmVkIGxpYnJhcmllcyBjYW4gc2VsZWN0CisjIHRoaXMsIHNvIHRoZSB1c2VyIGNhbiBkZWNpZGUgd2hldGhlciBvciBub3QgdG8gYnVpbGQgYSBzaGFyZWQgbGlicmFyeQorIyBlbmFibGVkIHRvb2xjaGFpbgorY29uZmlnIEtFUk5FTF9TVVBQT1JUU19TSEFSRURfTElCUworICAgIGJvb2wKKworY29uZmlnIEtFUk5FTAorICAgIHN0cmluZworCitjb25maWcgS0VSTkVMX1ZFUlNJT04KKyAgICBzdHJpbmcKKworc291cmNlICJjb25maWcuZ2VuL2tlcm5lbC5pbiIKKworY29tbWVudCAiQ29tbW9uIGtlcm5lbCBvcHRpb25zIgorCitjb25maWcgU0hBUkVEX0xJQlMKKyAgICBib29sCisgICAgcHJvbXB0ICJCdWlsZCBzaGFyZWQgbGlicmFyaWVzIgorICAgIGRlcGVuZHMgb24gS0VSTkVMX1NVUFBPUlRTX1NIQVJFRF9MSUJTCisgICAgZGVmYXVsdCB5CisgICAgaGVscAorICAgICAgU2F5ICd5JyBoZXJlLCB1bmxlc3MgeW91IGRvbid0IHdhbnQgc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgIAorICAgICAgWW91IG1pZ2h0IG5vdCB3YW50IHNoYXJlZCBsaWJyYXJpZXMgaWYgeW91J3JlIGJ1aWxkaW5nIGZvciBhIHRhcmdldCB0aGF0CisgICAgICBkb24ndCBzdXBwb3J0IGl0IChtYXliZSBzb21lIG5vbW11IHRhcmdldHMsIGZvciBleGFtcGxlLCBvciBiYXJlIG1ldGFsKS4KKworc291cmNlICJjb25maWcuZ2VuL2tlcm5lbC5pbi4yIgorCitlbmRtZW51CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9rZXJuZWwvYmFyZS1tZXRhbC5pbiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2tlcm5lbC9iYXJlLW1ldGFsLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkY2NiMGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9rZXJuZWwvYmFyZS1tZXRhbC5pbgpAQCAtMCwwICsxLDEwIEBACisjIEJhcmUgbWV0YWwgY29uZmlnIG9wdGlvbnMKKworIyMgc2VsZWN0IEJBUkVfTUVUQUwKKyMjCisjIyBoZWxwICdCYXJlIG1ldGFsJyByZWZlcnMgdG8gdGhvc2UgcHJvZ3JhbXMgdGhhdCBydW4gd2l0aG91dCBhbnkga2VybmVsLgorIyMgaGVscAorIyMgaGVscCBZb3UgcHJvYmFibHkgd2FudCB0byBzYXkgJ3knIGhlcmUgaWYgeW91IHBsYW4gdG8gdXNlIHlvdXIgY29tcGlsZXIKKyMjIGhlbHAgdG8gYnVpbGQgYm9vdGxvYWRlcnMuIEl0IGlzIG5vdCB5ZXQgc3VpdGFibGUgdG8gYnVpbGQgTGludXgga2VybmVscywKKyMjIGhlbHAgdGhvdWdoLCBiZWNhdXNlIHRoZSBBUENJIHN0dWZmIHJlbGllcyBvbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSBoZWFkZXJzCisjIyBoZWxwIGJlaW5nIGF2YWlsYWJsZT8hPyEuLi4KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2tlcm5lbC9saW51eC5pbiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2tlcm5lbC9saW51eC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MThlNGM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcva2VybmVsL2xpbnV4LmluCkBAIC0wLDAgKzEsMjA1IEBACisjIExpbnV4IGtlcm5lbCBvcHRpb25zCisKKyMjIHNlbGVjdCBLRVJORUxfU1VQUE9SVFNfU0hBUkVEX0xJQlMKKyMjCisjIyBoZWxwIEJ1aWxkIGEgdG9vbGNoYWluIHRhcmdldGluZyBzeXN0ZW1zIHJ1bm5pbmcgTGludXggYXMgYSBrZXJuZWwuCisKK2NvbmZpZyBLRVJORUxfTElOVVhfVVNFX0NVU1RPTV9IRUFERVJTCisgICAgYm9vbAorICAgIHByb21wdCAiVXNlIHByZS1pbnN0YWxsZWQgaGVhZGVycyB0cmVlIChPQlNPTEVURSkiCisgICAgZGVwZW5kcyBvbiBPQlNPTEVURQorICAgIGhlbHAKKyAgICAgIElmIHlvdSBoYXZlIHNvbWUgcHJlLWluc3RhbGxlZCBrZXJuZWwgaGVhZGVycyBseWluZyBhcm91bmQsIHlvdSBjYW4KKyAgICAgIGVudGVyIHRoZSBwYXRoIHRvIHRoZXNlIGhlYWRlcnMsIGJlbG93LCB0aGV5IHdpbGwgYmUgY29waWVkIGZyb20KKyAgICAgIHRoZXJlLCBhbmQgaW50byB0aGUgdG9vbGNoYWluJ3Mgc3lzcm9vdC4KKyAgICAgIAorICAgICAgTm90ZToKKyAgICAgIFRoaXMgd2lsbCAqbm90KiBsZXQgeW91IHVzZSBhIGNvbXBsZXRlIGtlcm5lbCB0cmVlIQorICAgICAgSWYgeW91IHdhbnQgdG8gdXNlIHlvdXIgb3duIGZ1bGwga2VybmVsIHRyZWUsIHRoZW4geW91IHdhbnQgdG8gc2F5ICdOJworICAgICAgaGVyZSwgYW5kIHNlbGVjdCBLRVJORUxfTElOVVhfQ1VTVE9NLCBpbiB0aGUgdmVyc2lvbnMgbGlzdCwgYmVsb3cuCisKK2lmICEgS0VSTkVMX0xJTlVYX1VTRV9DVVNUT01fSEVBREVSUworCitjaG9pY2UKKyAgICBib29sCisgICAgcHJvbXB0ICJMaW51eCBrZXJuZWwgdmVyc2lvbiIKKyMgRG9uJ3QgcmVtb3ZlIG5leHQgbGluZQorIyBDVF9JTlNFUlRfVkVSU0lPTl9CRUxPVworCitjb25maWcgS0VSTkVMX1ZfM18wXzQKKyAgICBib29sCisgICAgcHJvbXB0ICIzLjAuNCIKKworY29uZmlnIEtFUk5FTF9WXzNfMF8zCisgICAgYm9vbAorICAgIHByb21wdCAiMy4wLjMiCisKK2NvbmZpZyBLRVJORUxfVl8zXzBfMgorICAgIGJvb2wKKyAgICBwcm9tcHQgIjMuMC4yIgorCitjb25maWcgS0VSTkVMX1ZfM18wXzEKKyAgICBib29sCisgICAgcHJvbXB0ICIzLjAuMSIKKworY29uZmlnIEtFUk5FTF9WXzNfMAorICAgIGJvb2wKKyAgICBwcm9tcHQgIjMuMCIKKworY29uZmlnIEtFUk5FTF9WXzJfNl8zOV80CisgICAgYm9vbAorICAgIHByb21wdCAiMi42LjM5LjQiCisKK2NvbmZpZyBLRVJORUxfVl8yXzZfMzhfOAorICAgIGJvb2wKKyAgICBwcm9tcHQgIjIuNi4zOC44IgorCitjb25maWcgS0VSTkVMX1ZfMl82XzM3XzYKKyAgICBib29sCisgICAgcHJvbXB0ICIyLjYuMzcuNiIKKworY29uZmlnIEtFUk5FTF9WXzJfNl8zNl80CisgICAgYm9vbAorICAgIHByb21wdCAiMi42LjM2LjQiCisKK2NvbmZpZyBLRVJORUxfVl8yXzZfMzVfMTQKKyAgICBib29sCisgICAgcHJvbXB0ICIyLjYuMzUuMTQgKGxvbmd0ZXJtKSIKKyAgICBoZWxwCisgICAgICBUaGUgTGludXggMi42LjM1IHRyZWUgaXMgYSAibG9uZ3Rlcm0iIG1haW50ZW5hbmNlIGJyYW5jaC4KKyAgICAgIAorICAgICAgSXQgaXMgaW50ZW5kZWQgdG8gZmlsbCB0aGUgbmljaGUgZm9yIHVzZXJzIHdobyBhcmUgbm90IHVzaW5nIGRpc3RyaWJ1dGlvbgorICAgICAga2VybmVscyBidXQgd2FudCB0byB1c2UgYSByZWdyZXNzaW9uLWZyZWUga2VybmVsIGZvciBhIGxvbmdlciB0aW1lLgorICAgICAgCisgICAgICBDcml0aWNhbCBidWcgZml4ZXMgdG8gbGF0ZXIgMi42IHJlbGVhc2VzIGFyZSBvZnRlbiBwb3J0ZWQgdG8gdGhpcyBicmFuY2gKKyAgICAgIHdoaWNoIG1ha2VzIDIuNi4zNSBhIHZlcnkgdXNlZnVsIGJhc2UgZm9yIG1hbnkgZW1iZWRkZWQgZGV2ZWxvcGVycyBzZWVraW5nCisgICAgICBzdGFibGUgQVBJcyBvciB0aG9zZSB3aG8gZG8gbm90IG5lZWQgdGhlIGxhdGVzdCBibGVlZGluZyBlZGdlIGZlYXR1cmVzLgorICAgICAgCisgICAgICAuLi4gYW5kIG5vLCB0aGlzIGtlcm5lbCBoYXMgbm90IHVuZGVyZ29uZSBhbnkgc3BlY2lmaWMgUUEgdGVzdGluZy4KKyAgICAgIAorICAgICAgU2VlIHRoZSBvcmlnaW5hbCBhbm5vdW5jZW1lbnQgYnkgQW5kaSBLbGVlbiBpbiB0aGUgZm9sbG93aW5nIG1haWxpbmcKKyAgICAgIGxpc3QgZW50cnk6CisgICAgICAgIGh0dHA6Ly9tYXJjLmluZm8vP2w9bGludXgta2VybmVsJm09MTI5MTM2ODk1NDE1MjAyJnc9NAorCitjb25maWcgS0VSTkVMX1ZfMl82XzM0XzEwCisgICAgYm9vbAorICAgIHByb21wdCAiMi42LjM0LjEwIgorCitjb25maWcgS0VSTkVMX1ZfMl82XzMzXzE5CisgICAgYm9vbAorICAgIHByb21wdCAiMi42LjMzLjE5IgorICAgIGhlbHAKKyAgICAgIFRoaXMgaXMgcHJpbWFyaWx5IGZvciB0aGUgdXNlIG9mIHRob3NlIHBlb3BsZSB3aG8gYXJlIHN0dWNrIHVzaW5nIHRoZQorICAgICAgLjMzLXJ0IGtlcm5lbC4gIEFueW9uZSBlbHNlIHdobyByZWFsbHkgd2FudHMgdG8gdXNlIHRoZSAuMzMga2VybmVsIHRyZWUKKyAgICAgIGlzIHdlbGNvbWUgdG8gdXNlIHRoaXMgb25lIGFzIHdlbGwuCisKK2NvbmZpZyBLRVJORUxfVl8yXzZfMzJfNDYKKyAgICBib29sCisgICAgcHJvbXB0ICIyLjYuMzIuNDYgKGxvbmd0ZXJtKSIKKyAgICBoZWxwCisgICAgICBUaGUgTGludXggMi42LjMyIHRyZWUgaXMgYSAibG9uZ3Rlcm0iIG1haW50ZW5hbmNlIGJyYW5jaC4KKyAgICAgIAorICAgICAgSXQgaXMgaW50ZW5kZWQgdG8gZmlsbCB0aGUgbmljaGUgZm9yIHVzZXJzIHdobyBhcmUgbm90IHVzaW5nIGRpc3RyaWJ1dGlvbgorICAgICAga2VybmVscyBidXQgd2FudCB0byB1c2UgYSByZWdyZXNzaW9uLWZyZWUga2VybmVsIGZvciBhIGxvbmdlciB0aW1lLgorICAgICAgCisgICAgICBDcml0aWNhbCBidWcgZml4ZXMgdG8gbGF0ZXIgMi42IHJlbGVhc2VzIGFyZSBvZnRlbiBwb3J0ZWQgdG8gdGhpcyBicmFuY2gKKyAgICAgIHdoaWNoIG1ha2VzIDIuNi4zMiBhIHZlcnkgdXNlZnVsIGJhc2UgZm9yIG1hbnkgZW1iZWRkZWQgZGV2ZWxvcGVycyBzZWVraW5nCisgICAgICBzdGFibGUgQVBJcyBvciB0aG9zZSB3aG8gZG8gbm90IG5lZWQgdGhlIGxhdGVzdCBibGVlZGluZyBlZGdlIGZlYXR1cmVzLgorICAgICAgCisgICAgICAuLi4gYW5kIG5vLCB0aGlzIGtlcm5lbCBoYXMgbm90IHVuZGVyZ29uZSBhbnkgc3BlY2lmaWMgUUEgdGVzdGluZy4KKyAgICAgIAorICAgICAgU2VlIHRoZSBvcmlnaW5hbCBhbm5vdW5jZW1lbnQgYnkgR3JlZyBLcm9haC1IYXJ0bWFuIGluIHRoZSBmb2xsb3dpbmcKKyAgICAgIG1haWxpbmcgbGlzdCBlbnRyeToKKyAgICAgICAgaHR0cDovL21hcmMuaW5mby8/bD1saW51eC1rZXJuZWwmbT0xMjYzODQxOTg0MDMzOTImdz00CisKK2NvbmZpZyBLRVJORUxfVl8yXzZfMzFfMTQKKyAgICBib29sCisgICAgcHJvbXB0ICIyLjYuMzEuMTQiCisKK2NvbmZpZyBLRVJORUxfVl8yXzZfMjdfNTkKKyAgICBib29sCisgICAgcHJvbXB0ICIyLjYuMjcuNTkgKGxvbmd0ZXJtKSIKKyAgICBoZWxwCisgICAgICBUaGUgTGludXggMi42LjI3IHRyZWUgaXMgYSAibG9uZ3Rlcm0iIG1haW50ZW5hbmNlIGJyYW5jaC4KKyAgICAgIAorICAgICAgSXQgaXMgaW50ZW5kZWQgdG8gZmlsbCB0aGUgbmljaGUgZm9yIHVzZXJzIHdobyBhcmUgbm90IHVzaW5nIGRpc3RyaWJ1dGlvbgorICAgICAga2VybmVscyBidXQgd2FudCB0byB1c2UgYSByZWdyZXNzaW9uLWZyZWUga2VybmVsIGZvciBhIGxvbmdlciB0aW1lLgorICAgICAgCisgICAgICBDcml0aWNhbCBidWcgZml4ZXMgdG8gbGF0ZXIgMi42IHJlbGVhc2VzIGFyZSBvZnRlbiBwb3J0ZWQgdG8gdGhpcyBicmFuY2gKKyAgICAgIHdoaWNoIG1ha2VzIDIuNi4yNyBhIHZlcnkgdXNlZnVsIGJhc2UgZm9yIG1hbnkgZW1iZWRkZWQgZGV2ZWxvcGVycyBzZWVraW5nCisgICAgICBzdGFibGUgQVBJcyBvciB0aG9zZSB3aG8gZG8gbm90IG5lZWQgdGhlIGxhdGVzdCBibGVlZGluZyBlZGdlIGZlYXR1cmVzLgorICAgICAgCisgICAgICAuLi4gYW5kIG5vLCB0aGlzIGtlcm5lbCBoYXMgbm90IHVuZGVyZ29uZSBhbnkgc3BlY2lmaWMgUUEgdGVzdGluZy4KKyAgICAgIAorICAgICAgU2VlIHRoZSBvcmlnaW5hbCBhbm5vdW5jZW1lbnQgYnkgQWRyaWFuIEJ1bmsgaW4gdGhlIGZvbGxvd2luZyBtYWlsaW5nIGxpc3QKKyAgICAgIGVudHJ5OgorICAgICAgICBodHRwOi8vbWFyYy5pbmZvLz9sPWxpbnV4LWtlcm5lbCZtPTEyMjM3NTkwOTQwMzI5OCZ3PTQKKyAgICAgIAorICAgICAgSXQgaXMgbm93IG1haW50YWluZWQgYnkgR3JlZyBLcm9haC1IYXJ0bWFuLCBzZWUgdGhpcyBtYWlsaW5nIGxpc3QgZW50cnk6CisgICAgICAgIGh0dHA6Ly9tYXJjLmluZm8vP2w9bGludXgta2VybmVsJm09MTI5MTMzNzAxOTE2NzkzJnc9NAorCitjb25maWcgS0VSTkVMX0xJTlVYX0NVU1RPTQorICAgIGJvb2wKKyAgICBwcm9tcHQgImN1c3RvbSB0YXJiYWxsIG9yIGRpcmVjdG9yeSIKKyAgICBoZWxwCisgICAgICBVc2UgYSBsb2NhbCB0YXJiYWxsIG9yIGxvY2FsIGtlcm5lbCBkaXJlY3Rvcnkgb2YgYSBjb21wbGV0ZSBrZXJuZWwgc291cmNlIHRyZWUuCisKK2NvbmZpZyBLRVJORUxfTElOVVhfQ1VTVE9NX0xPQ0FUSU9OCisgICAgc3RyaW5nCisgICAgcHJvbXB0ICJQYXRoIHRvIGN1c3RvbSBzb3VyY2UsIHRhcmJhbGwgb3IgZGlyZWN0b3J5IgorICAgIGRlcGVuZHMgb24gS0VSTkVMX0xJTlVYX0NVU1RPTQorICAgIGhlbHAKKyAgICAgIEVudGVyIGhlcmUgdGhlIHBhdGggdG8gdGhlIHRhcmJhbGwgb2YgeW91ciBmdWxsIGtlcm5lbCB0cmVlIG9yCisgICAgICBrZXJuZWwgZGlyZWN0b3J5CisKK2VuZGNob2ljZQorCitjb25maWcgS0VSTkVMX1ZFUlNJT04KKyAgICBzdHJpbmcKKyMgRG9uJ3QgcmVtb3ZlIG5leHQgbGluZQorIyBDVF9JTlNFUlRfVkVSU0lPTl9TVFJJTkdfQkVMT1cKKyAgICBkZWZhdWx0ICIzLjAuNCIgaWYgS0VSTkVMX1ZfM18wXzQKKyAgICBkZWZhdWx0ICIzLjAuMyIgaWYgS0VSTkVMX1ZfM18wXzMKKyAgICBkZWZhdWx0ICIzLjAuMiIgaWYgS0VSTkVMX1ZfM18wXzIKKyAgICBkZWZhdWx0ICIzLjAuMSIgaWYgS0VSTkVMX1ZfM18wXzEKKyAgICBkZWZhdWx0ICIzLjAiIGlmIEtFUk5FTF9WXzNfMAorICAgIGRlZmF1bHQgIjIuNi4zOS40IiBpZiBLRVJORUxfVl8yXzZfMzlfNAorICAgIGRlZmF1bHQgIjIuNi4zOC44IiBpZiBLRVJORUxfVl8yXzZfMzhfOAorICAgIGRlZmF1bHQgIjIuNi4zNy42IiBpZiBLRVJORUxfVl8yXzZfMzdfNgorICAgIGRlZmF1bHQgIjIuNi4zNi40IiBpZiBLRVJORUxfVl8yXzZfMzZfNAorICAgIGRlZmF1bHQgIjIuNi4zNS4xNCIgaWYgS0VSTkVMX1ZfMl82XzM1XzE0CisgICAgZGVmYXVsdCAiMi42LjM0LjEwIiBpZiBLRVJORUxfVl8yXzZfMzRfMTAKKyAgICBkZWZhdWx0ICIyLjYuMzMuMTkiIGlmIEtFUk5FTF9WXzJfNl8zM18xOQorICAgIGRlZmF1bHQgIjIuNi4zMi40NiIgaWYgS0VSTkVMX1ZfMl82XzMyXzQ2CisgICAgZGVmYXVsdCAiMi42LjMxLjE0IiBpZiBLRVJORUxfVl8yXzZfMzFfMTQKKyAgICBkZWZhdWx0ICIyLjYuMjcuNTkiIGlmIEtFUk5FTF9WXzJfNl8yN181OQorICAgIGRlZmF1bHQgImN1c3RvbSIgaWYgS0VSTkVMX0xJTlVYX0NVU1RPTQorCitlbmRpZiAjICEgS0VSTkVMX0xJTlVYX1VTRV9DVVNUT01fSEVBREVSUworCitpZiBLRVJORUxfTElOVVhfVVNFX0NVU1RPTV9IRUFERVJTCisKK2NvbmZpZyBLRVJORUxfTElOVVhfQ1VTVE9NX1BBVEgKKyAgICBzdHJpbmcKKyAgICBwcm9tcHQgIlBhdGggdG8gY3VzdG9tIGhlYWRlcnMgZGlyZWN0b3J5L3RhcmJhbGwiCisgICAgaGVscAorICAgICAgU2VlIEtFUk5FTF9MSU5VWF9DVVNUT01fSVNfVEFSQkFMTCwgYmVsb3cuCisKK2NvbmZpZyBLRVJORUxfTElOVVhfQ1VTVE9NX0lTX1RBUkJBTEwKKyAgICBib29sCisgICAgcHJvbXB0ICJUaGlzIGlzIGEgdGFyYmFsbCIKKyAgICBoZWxwCisgICAgICBJZiB5b3Ugc2F5ICduJyBoZXJlLCB0aGUgcGF0aCBhYm92ZSBpcyBleHBlY3RlZCB0byBwb2ludCB0byBhIGRpcmVjdG9yeQorICAgICAgY29udGFpbmluZyByZWFkaWx5IHByZXBhcmVkIGhlYWRlcnMKKyAgICAgIAorICAgICAgSWYgeW91IHNheSAneScgaGVyZSwgdGhlbiB0aGUgcGF0aCBhYm92ZSBpcyBleHBlY3RlZCB0byBwb2ludCB0byBhCisgICAgICB0YXJiYWxsIG9mIHN1Y2ggYSBkaXJlY3RvcnkuCisgICAgICAKKyAgICAgIEVnLiwgaWYgeW91ciBoZWFkZXJzIGFyZSBhdmFpbGFibGUgaW46IC9mb28vYmFyL2J1ei9teV9oZHJzL2luY2x1ZGUsCisgICAgICBzYXkgJ24nIGhlcmUsIGFuZCBlbnRlcjogL2Zvby9iYXIvYnV6L215X2hkcnMgYmVsb3cuCisgICAgICAKKyAgICAgIE5vdywgcGFzc2luZyBhIHRhcmJhbGwgYXJvdW5kIGlzIGVhc2llciB0aGFuIHBhc3NpbmcgYSBkaXJlY3RvcnksIHNvCisgICAgICBpZiB5b3Ugd2FudCB0bywgeW91IGNhbiBtYWtlIGEgdGFyYmFsbCBvZiAvZm9vL2Jhci9idXovbXlfaGRycy9pbmNsdWRlLAorICAgICAgc2F5ICd5JyBoZXJlLCBhbmQgZW50ZXIgdGhlIHBhdGggdG8gdGhpcyB0YXJiYWxsIGJlbG93LgorCitlbmRpZiAjIEtFUk5FTF9MSU5VWF9VU0VfQ1VTVE9NX0hFQURFUlMKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2tlcm5lbC9saW51eC5pbi4yIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcva2VybmVsL2xpbnV4LmluLjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU5Mzk1OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2tlcm5lbC9saW51eC5pbi4yCkBAIC0wLDAgKzEsNDQgQEAKKyMgTGludXgga2VybmVsIG9wdGlvbnMKKworaWYgISBLRVJORUxfTElOVVhfVVNFX0NVU1RPTV9IRUFERVJTCisKK2Nob2ljZQorICAgIGJvb2wKKyAgICBwcm9tcHQgIktlcm5lbCB2ZXJib3NpdHk6IgorICAgIGRlZmF1bHQgS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8wCisKK2NvbmZpZyBLRVJORUxfTElOVVhfVkVSQk9TSVRZXzAKKyAgICBib29sCisgICAgcHJvbXB0ICJTaW1wbGlmaWVkIgorICAgIGhlbHAKKyAgICAgIFByaW50IHNpbXBsaWZpZWQgY29tbWFuZCBsaW5lcy4KKworY29uZmlnIEtFUk5FTF9MSU5VWF9WRVJCT1NJVFlfMQorICAgIGJvb2wKKyAgICBwcm9tcHQgIkZ1bGwgY29tbWFuZHMiCisgICAgaGVscAorICAgICAgUHJpbnQgZnVsbCBjb21tYW5kIGxpbmVzLgorCitjb25maWcgS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8yCisgICAgYm9vbAorICAgIHByb21wdCAiRXhlYyByZWFzb25zIgorICAgIGhlbHAKKyAgICAgIFByaW50IHRoZSByZWFzb25zIHdoeSBhIG1ha2UgdGFyZ2V0IGlzIHJlYnVpbGQuCisKK2VuZGNob2ljZQorCitjb25maWcgS0VSTkVMX0xJTlVYX1ZFUkJPU0VfTEVWRUwKKyAgICBpbnQKKyAgICBkZWZhdWx0IDAgaWYgS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8wCisgICAgZGVmYXVsdCAxIGlmIEtFUk5FTF9MSU5VWF9WRVJCT1NJVFlfMQorICAgIGRlZmF1bHQgMiBpZiBLRVJORUxfTElOVVhfVkVSQk9TSVRZXzIKKworY29uZmlnIEtFUk5FTF9MSU5VWF9JTlNUQUxMX0NIRUNLCisgICAgYm9vbAorICAgIHByb21wdCAiQ2hlY2sgaW5zdGFsbGVkIGhlYWRlcnMiCisgICAgZGVmYXVsdCB5CisgICAgaGVscAorICAgICAgSWYgeW91IGFyZSBpbiBkb3VidCB0aGF0IGluc3RhbGxlZCBoZWFkZXJzIGFyZSBidWdneSwgc2F5ICdZJworICAgICAgaGVyZSB0byBoYXZlIGFuIGV4dHJhIGNoZWNrIHBhc3NlZCBvbnRvIHRoZSBoZWFkZXJzLgorCitlbmRpZiAjICEgS0VSTkVMX0xJTlVYX1VTRV9DVVNUT01fSEVBREVSUwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9jb25maWcva2VybmVsL21pbmd3MzIuaW4gYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9rZXJuZWwvbWluZ3czMi5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTIxZTk4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcva2VybmVsL21pbmd3MzIuaW4KQEAgLTAsMCArMSwzMyBAQAorIyBtaW5ndzMyIGNvbmZpZyBvcHRpb25zCisKKyMjIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmICggQVJDSF94ODYgJiYgQVJDSF8zMiApCisjIworIyMgc2VsZWN0IE1JTkdXMzIKKyMjCisjIyBoZWxwIEJ1aWxkIGEgdG9vbGNoYWluIHRhcmdldGluZyBzeXN0ZW1zIHJ1bm5pbmcgV2luZG93cyBhcyBob3N0CisKK2Nob2ljZQorICAgIGJvb2wKKyAgICBwcm9tcHQgIldpbmRvd3MgYXBpIHZlcnNpb24iCisKKyMgRG9uJ3QgcmVtb3ZlIG5leHQgbGluZQorIyBDVF9JTlNFUlRfVkVSU0lPTl9CRUxPVworY29uZmlnIFczMkFQSV9WXzNfMTQKKyAgICBib29sCisgICAgcHJvbXB0ICIzLjE0IgorCitjb25maWcgVzMyQVBJX1Zfc2VsZWN0CisgICAgYm9vbAorICAgIHByb21wdCAiT3RoZXIgdmVyc2lvbiIKKworZW5kY2hvaWNlCisKK2NvbmZpZyBXMzJBUElfVkVSU0lPTgorICAgIHN0cmluZworICAgIHByb21wdCAiVzMyIGFwaSB2ZXJzaW9uIiBpZiBXMzJBUElfVl9zZWxlY3QKKyMgRG9uJ3QgcmVtb3ZlIG5leHQgbGluZQorIyBDVF9JTlNFUlRfVkVSU0lPTl9TVFJJTkdfQkVMT1cKKyAgICBkZWZhdWx0ICIzLjE0IiBpZiBXMzJBUElfVl8zXzE0CisgICAgaGVscAorICAgICAgRW50ZXIgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSB3aW5kb3dzIGFwaSBmaWxlcyB0byB1c2UKKwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvbGliYy5pbiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2xpYmMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNmNWRiMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2xpYmMuaW4KQEAgLTAsMCArMSwxMDQgQEAKKyMgQyBsaWJyYXJ5IG9wdGlvbnMKKworbWVudSAiQy1saWJyYXJ5IgorCitjb25maWcgTElCQworICAgIHN0cmluZworCitjb25maWcgTElCQ19WRVJTSU9OCisgICAgc3RyaW5nCisgICAgaGVscAorICAgICAgRW50ZXIgdGhlIGRhdGUgb2YgdGhlIHNuYXBzaG90IHlvdSB3YW50IHRvIHVzZSBpbiB0aGUgZm9ybTogWVlZWU1NREQKKyAgICAgIHdoZXJlIFlZWVkgaXMgdGhlIDQtZGlnaXQgeWVhciwgTU0gdGhlIDItZGlnaXQgbW9udGggYW5kIEREIHRoZSAyLWRpZ2l0CisgICAgICBkYXkgaW4gdGhlIG1vbnRoLgorICAgICAgCisgICAgICBQbGVhc2Ugbm90ZToKKyAgICAgIC0gZ2xpYmMgaGFzIHNuYXBzaG90cyBkb25lIGV2ZXJ5IG1vbmRheSwgYW5kIG9ubHkgdGhlIGxhc3QgdGVuIGFyZSBrZXB0LgorICAgICAgLSB1Q2xpYmMgaGFzIGRhaWx5IHNuYXBzaG90cywgYW5kIG9ubHkgdGhlIGxhc3QgMzAtb3Itc28gYXJlIGtlcHQuCisgICAgICAKKyAgICAgIFNvIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gcmUtYnVpbGQgeW91ciB0b29sY2hhaW4gbGF0ZXIsIHlvdSB3aWxsCisgICAgICBoYXZlIHRvIHNhdmUgeW91ciBDIGxpYnJhcnkgdGFyYmFsbCBieSB5b3Vyc2VsZi4KKworc291cmNlICJjb25maWcuZ2VuL2xpYmMuaW4iCisKK2NvbmZpZyBMSUJDX1NVUFBPUlRfVEhSRUFEU19BTlkKKyAgICBib29sCisKK2NvbmZpZyBMSUJDX1NVUFBPUlRfTlBUTAorICAgIGJvb2wKKyAgICBzZWxlY3QgTElCQ19TVVBQT1JUX1RIUkVBRFNfQU5ZCisKK2NvbmZpZyBMSUJDX1NVUFBPUlRfTElOVVhUSFJFQURTCisgICAgYm9vbAorICAgIHNlbGVjdCBMSUJDX1NVUFBPUlRfVEhSRUFEU19BTlkKKworY29uZmlnIExJQkNfU1VQUE9SVF9XSU4zMlRIUkVBRFMKKyAgICBib29sCisgICAgc2VsZWN0IExJQkNfU1VQUE9SVF9USFJFQURTX0FOWQorCitjb25maWcgTElCQ19TVVBQT1JUX1RIUkVBRFNfTk9ORQorICAgIGJvb2wKKworY29uZmlnIFRIUkVBRFMKKyAgICBzdHJpbmcKKyAgICBkZWZhdWx0ICJucHRsIiAgICAgICAgICBpZiBUSFJFQURTX05QVEwKKyAgICBkZWZhdWx0ICJsaW51eHRocmVhZHMiICBpZiBUSFJFQURTX0xJTlVYVEhSRUFEUworICAgIGRlZmF1bHQgIndpbjMyIiAgICAgICAgIGlmIFRIUkVBRFNfV0lOMzJUSFJFQURTCisgICAgZGVmYXVsdCAibm9uZSIgICAgICAgICAgaWYgVEhSRUFEU19OT05FIHx8IExJQkNfbm9uZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIEMgbGlicmFyeSwgbm8gdGhyZWFkcyEKKworaWYgISBMSUJDX25vbmUKKworY29tbWVudCAiQ29tbW9uIEMgbGlicmFyeSBvcHRpb25zIgorCitjaG9pY2UKKyAgICBib29sCisgICAgcHJvbXB0ICJUaHJlYWRpbmcgaW1wbGVtZW50YXRpb24gdG8gdXNlOiIKKyAgICBkZWZhdWx0IFRIUkVBRFNfTlBUTCAgICAgICAgICAgaWYgTElCQ19TVVBQT1JUX05QVEwKKyAgICBkZWZhdWx0IFRIUkVBRFNfTElOVVhUSFJFQURTICAgaWYgTElCQ19TVVBQT1JUX0xJTlVYVEhSRUFEUyAmJiAhIExJQkNfU1VQUE9SVF9OUFRMCisgICAgZGVmYXVsdCBUSFJFQURTX1dJTjMyICAgICAgICAgIGlmIExJQkNfU1VQUE9SVF9XSU4zMlRIUkVBRFMKKyAgICBkZWZhdWx0IFRIUkVBRFNfTk9ORSAgICAgICAgICAgaWYgISBMSUJDX1NVUFBPUlRfVEhSRUFEU19BTlkKKworY29uZmlnIFRIUkVBRFNfTlBUTAorICAgIGJvb2wKKyAgICBwcm9tcHQgIm5wdGwiCisgICAgZGVwZW5kcyBvbiBMSUJDX1NVUFBPUlRfTlBUTAorCitjb25maWcgVEhSRUFEU19MSU5VWFRIUkVBRFMKKyAgICBib29sCisgICAgcHJvbXB0ICJsaW51eHRocmVhZHMiCisgICAgZGVwZW5kcyBvbiBMSUJDX1NVUFBPUlRfTElOVVhUSFJFQURTCisKK2NvbmZpZyBUSFJFQURTX1dJTjMyVEhSRUFEUworICAgIGJvb2wKKyAgICBwcm9tcHQgIndpbjMyIgorICAgIGRlcGVuZHMgb24gTElCQ19TVVBQT1JUX1dJTjMyVEhSRUFEUworCitjb25maWcgVEhSRUFEU19OT05FCisgICAgYm9vbAorICAgIHByb21wdCAibm9uZSIKKyAgICBkZXBlbmRzIG9uIExJQkNfU1VQUE9SVF9USFJFQURTX05PTkUKKworZW5kY2hvaWNlCisKK2NvbmZpZyBMSUJDX1hMREQKKyAgICBib29sCisgICAgcHJvbXB0ICJJbnN0YWxsIGEgY3Jvc3MgbGRkLWxpa2UgaGVscGVyIgorICAgIGRlcGVuZHMgb24gU0hBUkVEX0xJQlMKKyAgICBkZXBlbmRzIG9uICEgQkFSRV9NRVRBTAorICAgIGRlZmF1bHQgeQorICAgIGhlbHAKKyAgICAgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB0byBoYXZlIGEgbGRkLWxpa2UgaGVscGVyIHRoYXQKKyAgICAgIHlvdSBjYW4gcnVuIG9uIHlvdXIgYnVpbGQgc3lzdGVtLCBhbmQgdGhhdCB3aWxsICh0cnkgdG8pCisgICAgICByZXNvbHZlIHNoYXJlZCBsaWJyYXJpZXMgZGVwZW5kZW5jaWVzIGFzIGlmIHJ1biBvbiB0aGUKKyAgICAgIHRhcmdldC4KKyAgICAgIAorICAgICAgTm90ZSB0aGF0IHRoZSBjcm9zcy1sZGQgaGVscGVyIGlzIG5vdCBhIGZ1bGwgcmVwbGFjZW1lbnQKKyAgICAgIGZvciB0aGUgbmF0aXZlIGxkZC4gUGxlYXNlIHNlZSB0aGUgaGVscCwgYnkgcnVubmluZyBpdAorICAgICAgd2l0aCAnLS1oZWxwJyBmb3IgbW9yZSBleHBsYW5hdGlvbnMuCisKK3NvdXJjZSAiY29uZmlnLmdlbi9saWJjLmluLjIiCisKK2VuZGlmICMgISBMSUJDX25vbmUKKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvbGliYy9lZ2xpYmMuaW4gYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9saWJjL2VnbGliYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTk2ZDE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvbGliYy9lZ2xpYmMuaW4KQEAgLTAsMCArMSwyMzEgQEAKKyMgZWdsaWJjIG9wdGlvbnMKKworIyMgZGVwZW5kcyBvbiAhIE1JTkdXMzIgJiYgISBCQVJFX01FVEFMICYmIEFSQ0hfVVNFX01NVQorIyMKKyMjIHNlbGVjdCBMSUJDX1NVUFBPUlRfTlBUTAorIyMgc2VsZWN0IExJQkNfU1VQUE9SVF9MSU5VWFRIUkVBRFMKKyMjCisjIyBoZWxwIEVHTElCQyAoRW1iZWRkZWQgR0xJQkMpIGlzIGEgdmFyaWFudCBvZiB0aGUgc3RhbmRhcmQgR05VIEdMSUJDCisjIyBoZWxwIHRoYXQgaXMgZGVzaWduZWQgdG8gd29yayB3ZWxsIG9uIGVtYmVkZGVkIHN5c3RlbXMuICBFR0xJQkMgc3RyaXZlcworIyMgaGVscCB0byBiZSBzb3VyY2UgYW5kIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggR0xJQkMuICBJdHMgZ29hbHMgaW5jbHVkZQorIyMgaGVscCBhIHJlZHVjZWQgZm9vdHByaW50LCBjb25maWd1cmFibGUgY29tcG9uZW50cywgYW5kIGltcHJvdmVkCisjIyBoZWxwIGNyb3NzLWNvbXBpbGF0aW9uIHN1cHBvcnQuICBFR0xJQkMgYWxzbyBpbmNsdWRlcyBzb21lIGVtYmVkZGVkIHBvcnRzCisjIyBoZWxwIChzdWNoIGFzIGU1MDAvc3BlKSB0aGF0IGFyZSBub3JtYWxseSBzZXBhcmF0ZSBhZGQtb25zIG9mIEdMSUJDLgorCitjaG9pY2UKKyAgICBib29sCisgICAgcHJvbXB0ICJlZ2xpYmMgdmVyc2lvbiIKKyMgRG9uJ3QgcmVtb3ZlIG5leHQgbGluZQorIyBDVF9JTlNFUlRfVkVSU0lPTl9CRUxPVworCitjb25maWcgTElCQ19FR0xJQkNfVl8yXzE0CisgICAgYm9vbAorICAgIHByb21wdCAiMl8xNCIKKyAgICBkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorICAgIHNlbGVjdCBMSUJDX0VHTElCQ18yXzE0X29yX2xhdGVyCisKK2NvbmZpZyBMSUJDX0VHTElCQ19WXzJfMTMKKyAgICBib29sCisgICAgcHJvbXB0ICIyXzEzIgorICAgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisgICAgc2VsZWN0IExJQkNfRUdMSUJDXzJfMTNfb3JfbGF0ZXIKKworY29uZmlnIExJQkNfRUdMSUJDX1ZfMl8xMgorICAgIGJvb2wKKyAgICBwcm9tcHQgIjJfMTIiCisgICAgc2VsZWN0IExJQkNfRUdMSUJDXzJfMTJfb3JfbGF0ZXIKKworY29uZmlnIExJQkNfRUdMSUJDX1ZfMl8xMQorICAgIGJvb2wKKyAgICBwcm9tcHQgIjJfMTEiCisgICAgc2VsZWN0IExJQkNfRUdMSUJDXzJfMTFfb3JfbGF0ZXIKKworY29uZmlnIExJQkNfRUdMSUJDX1ZfMl8xMAorICAgIGJvb2wKKyAgICBwcm9tcHQgIjJfMTAiCisgICAgc2VsZWN0IExJQkNfRUdMSUJDXzJfMTBfb3JfbGF0ZXIKKworY29uZmlnIExJQkNfRUdMSUJDX1ZfMl85CisgICAgYm9vbAorICAgIHByb21wdCAiMl85IgorICAgIHNlbGVjdCBMSUJDX0VHTElCQ18yXzlfb3JfbGF0ZXIKKworY29uZmlnIExJQkNfRUdMSUJDX1ZfMl84CisgICAgYm9vbAorICAgIHByb21wdCAiMl84IChPQlNPTEVURSkiCisgICAgZGVwZW5kcyBvbiBPQlNPTEVURQorCitjb25maWcgTElCQ19FR0xJQkNfVl8yXzcKKyAgICBib29sCisgICAgcHJvbXB0ICIyXzcgKE9CU09MRVRFKSIKKyAgICBkZXBlbmRzIG9uIE9CU09MRVRFCisKK2NvbmZpZyBMSUJDX0VHTElCQ19WXzJfNgorICAgIGJvb2wKKyAgICBwcm9tcHQgIjJfNiAoT0JTT0xFVEUpIgorICAgIGRlcGVuZHMgb24gT0JTT0xFVEUKKworY29uZmlnIExJQkNfRUdMSUJDX1ZfMl81CisgICAgYm9vbAorICAgIHByb21wdCAiMl81IChPQlNPTEVURSkiCisgICAgZGVwZW5kcyBvbiBPQlNPTEVURQorCitjb25maWcgTElCQ19FR0xJQkNfVl9UUlVOSworICAgIGJvb2wKKyAgICBwcm9tcHQgIid0cnVuayciCisgICAgc2VsZWN0IExJQkNfRUdMSUJDXzJfMTRfb3JfbGF0ZXIKKyAgICBoZWxwCisgICAgICBTZWxlY3RpbmcgdGhpcyB3aWxsIGV4cG9ydCB0aGUgdHJ1bmsgb2YgdGhlIGVnbGliYyBzdWJ2ZXJzaW9uIHJlcG9zaXRvcnkuCisKK2VuZGNob2ljZQorCitjb25maWcgTElCQ19WRVJTSU9OCisgICAgc3RyaW5nCisjIERvbid0IHJlbW92ZSBuZXh0IGxpbmUKKyMgQ1RfSU5TRVJUX1ZFUlNJT05fU1RSSU5HX0JFTE9XCisgICAgZGVmYXVsdCAiMl8xNCIgaWYgTElCQ19FR0xJQkNfVl8yXzE0CisgICAgZGVmYXVsdCAiMl8xMyIgaWYgTElCQ19FR0xJQkNfVl8yXzEzCisgICAgZGVmYXVsdCAiMl8xMiIgaWYgTElCQ19FR0xJQkNfVl8yXzEyCisgICAgZGVmYXVsdCAiMl8xMSIgaWYgTElCQ19FR0xJQkNfVl8yXzExCisgICAgZGVmYXVsdCAiMl8xMCIgaWYgTElCQ19FR0xJQkNfVl8yXzEwCisgICAgZGVmYXVsdCAiMl85IiBpZiBMSUJDX0VHTElCQ19WXzJfOQorICAgIGRlZmF1bHQgIjJfOCIgaWYgTElCQ19FR0xJQkNfVl8yXzgKKyAgICBkZWZhdWx0ICIyXzciIGlmIExJQkNfRUdMSUJDX1ZfMl83CisgICAgZGVmYXVsdCAiMl82IiBpZiBMSUJDX0VHTElCQ19WXzJfNgorICAgIGRlZmF1bHQgIjJfNSIgaWYgTElCQ19FR0xJQkNfVl8yXzUKKyAgICBkZWZhdWx0ICJ0cnVuayIgaWYgTElCQ19FR0xJQkNfVl9UUlVOSworCitjb25maWcgTElCQ19FR0xJQkNfMl8xNF9vcl9sYXRlcgorICAgIGJvb2wKKyAgICBzZWxlY3QgTElCQ19FR0xJQkNfMl8xM19vcl9sYXRlcgorCitjb25maWcgTElCQ19FR0xJQkNfMl8xM19vcl9sYXRlcgorICAgIGJvb2wKKyAgICBzZWxlY3QgTElCQ19FR0xJQkNfMl8xMl9vcl9sYXRlcgorCitjb25maWcgTElCQ19FR0xJQkNfMl8xMl9vcl9sYXRlcgorICAgIGJvb2wKKyAgICBzZWxlY3QgTElCQ19FR0xJQkNfMl8xMV9vcl9sYXRlcgorCitjb25maWcgTElCQ19FR0xJQkNfMl8xMV9vcl9sYXRlcgorICAgIGJvb2wKKyAgICBzZWxlY3QgTElCQ19FR0xJQkNfMl8xMF9vcl9sYXRlcgorCitjb25maWcgTElCQ19FR0xJQkNfMl8xMF9vcl9sYXRlcgorICAgIGJvb2wKKyAgICBzZWxlY3QgTElCQ19FR0xJQkNfMl85X29yX2xhdGVyCisKK2NvbmZpZyBMSUJDX0VHTElCQ18yXzlfb3JfbGF0ZXIKKyAgICBib29sCisgICAgc2VsZWN0IExJQkNfRUdMSUJDX0hBU19QS0dWRVJTSU9OX0JVR1VSTAorCitjb25maWcgTElCQ19FR0xJQkNfSEFTX1BLR1ZFUlNJT05fQlVHVVJMCisgICAgYm9vbAorCitpZiBDT05GSUdVUkVfaGFzX3N2bgorCitjb25maWcgRUdMSUJDX1JFVklTSU9OCisgICAgc3RyaW5nCisgICAgcHJvbXB0ICJSZXZpc2lvbiB0byB1c2UiCisgICAgZGVmYXVsdCAiSEVBRCIKKyAgICBoZWxwCisgICAgICBFbnRlciB0aGUgcmV2aXNpb24gb2YgdHJ1bmsgeW91IHdhbnQgdG8gdXNlLgorICAgICAgRGVmYXVsdCBpcyBIRUFELgorICAgICAgCisgICAgICBBIHJldmlzaW9uIGFyZ3VtZW50IGNhbiBiZSBvbmUgb2Y6CisgICAgICAgICAgTlVNQkVSICAgICAgIHJldmlzaW9uIG51bWJlcgorICAgICAgICAgICd7JyBEQVRFICd9JyByZXZpc2lvbiBhdCBzdGFydCBvZiB0aGUgZGF0ZSAoKikKKyAgICAgICAgICAnSEVBRCcgICAgICAgbGF0ZXN0IGluIHJlcG9zaXRvcnkKKyAgICAgIAorICAgICAgKCopIElmIHlvdSB3YW50IHRvIHVzZSBhIGRhdGUsIHBsZWFzZSB1c2UgSVNPLTg2MDEgZm9ybWF0cyBpZgorICAgICAgICAgIGF0IGFsbCBwb3NzaWJsZS4KKworY29uZmlnIEVHTElCQ19IVFRQCisgICAgYm9vbAorICAgIHByb21wdCAidXNlIGh0dHA6Ly8gaW5zdGVhZCBvZiBzdm46Ly8iCisgICAgaGVscAorICAgICAgQnkgZGVmYXVsdCwgd2hlbiBlZ2xpYmMgaXMgZG93bmxvYWRlZCBpdCBpcyBjaGVja2VkIG91dCB1c2luZworICAgICAgc3ZuOi8vc3ZuLmVnbGliYy5vcmcuIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gZG93bmxvYWQgZWdsaWJjCisgICAgICBmcm9tIGh0dHA6Ly93d3cuZWdsaWJjLm9yZywgaWYgeW91IGFyZSBiZWhpbmQgYSBwcm94eSBvciBmaXJld2FsbC4KKyAgICAgIElmIHlvdSBhcmUgYmVoaW5kIGEgcHJveHksIGRvbid0IGZvcmdldCB0byB1cGRhdGUgeW91cgorICAgICAgLnN1YnZlcnNpb24vc2VydmVycyBmaWxlIHdpdGggeW91ciBwcm94eSBpbmZvIGluIFtnbG9iYWxdLgorCitjb25maWcgRUdMSUJDX0NIRUNLT1VUCisgICAgYm9vbAorICAgIHByb21wdCAiY2hlY2tvdXQgaW5zdGVhZCBvZiBleHBvcnQiCisgICAgZGVmYXVsdCB5IGlmIExJQkNfRUdMSUJDX1ZfVFJVTksKKyAgICBoZWxwCisgICAgICBCeSBkZWZhdWx0LCB0aGUgZWdsaWJjIGRvd25sb2FkIHdpbGwgYmUgYW4gZXhwb3J0IG9mIHRoZSBzdWJ2ZXJzaW9uCisgICAgICByZXBvc2l0b3J5LiBJZiB5b3Ugc2F5ICd5JyBoZXJlLCB0aGVuIHRoZSByZXBvc2l0b3J5IHdpbGwgaW5zdGVhZCBiZQorICAgICAgY2hlY2tlZC1vdXQsIHNvIHRoYXQgeW91IGNhbiB1cGRhdGUgaXQgbGF0ZXIuCisgICAgICAKKyAgICAgIE5vdGUgdGhhdCBjcm9zc3Rvb2wtTkcgd2lsbCAqbm90KiB1cGRhdGUgeW91ciB3b3JraW5nIGNvcHksIHlvdSB3aWxsCisgICAgICBoYXZlIHRvIGRvIHRoYXQgeW91cnNlbGYuCisKK2VuZGlmICMgISBDT05GSUdVUkVfaGFzX3N2bgoraWYgISBDT05GSUdVUkVfaGFzX3N2bgorCitjb21tZW50ICJzdm4gaXMgbWlzc2luZy4gWW91J2xsIGhhdmUgdG8gZWl0aGVyOiIKK2NvbW1lbnQgInwgIC0gaGF2ZSBhIHByZS1kb3dubG9hZGVkIGxvY2FsIHRhcmJhbGwiCitjb21tZW50ICJ8ICAtIG9yIGhhdmUgYSBMQU4gbWlycm9yIHdpdGggYSBwcmUtZG93bmxvYWRlZCB0YXJiYWxsIgorY29tbWVudCAib3RoZXJ3aXNlIHlvdSB3b24ndCBiZSBhYmxlIHRvIGRvd25sb2FkIGVnbGliYyIKKworZW5kaWYgIyAhIENPTkZJR1VSRV9oYXNfc3ZuCisKK2NvbmZpZyBFR0xJQkNfT1BUX1NJWkUKKyAgICBib29sCisgICAgcHJvbXB0ICJvcHRpbWl6ZSBlZ2xpYmMgZm9yIHNpemUgKC1PcykiCisgICAgaGVscAorICAgICAgT3B0aW1pemUgZWdsaWJjIGZvciBzaXplIHVzaW5nIC1PcyBpbnN0ZWFkIG9mIC1PMi4gVGhpcyB3aWxsIG1ha2UgZWdsaWJjCisgICAgICBzbWFsbGVyIGJ1dCBtYXkgbWFrZSBpdCBzbG93ZXIuCisKK2NvbmZpZyBFR0xJQkNfQ1VTVE9NX0NPTkZJRworICAgIGJvb2wKKyAgICBwcm9tcHQgIlVzZSBjdXN0b20gY29uZmlndXJhdGlvbiBmaWxlIgorICAgIGhlbHAKKyAgICAgIFVzZSBhIGN1c3RvbSBjb25maWd1cmF0aW9uIGZpbGUgdG8gZGlzYWJsZSBzb21lIGZlYXR1cmVzIGluIHRoZSBlZ2xpYmMKKyAgICAgIGxpYnJhcnkuIFRoZSBjb25maWd1cmF0aW9uIGZpbGUgb3B0aW9ucyBhcmUgZGVzY3JpYmVkIGluIGRldGFpbCBpbiB0aGUKKyAgICAgIG9wdGlvbi1ncm91cHMuZGVmIGZpbGUgaW4gdGhlIGVnbGliYyBzb3VyY2UgZGlyZWN0b3J5LgorCitpZiBFR0xJQkNfQ1VTVE9NX0NPTkZJRworICAgIGNvbmZpZyBFR0xJQkNfT1BUSU9OX0dST1VQU19GSUxFCisgICAgICAgIHN0cmluZworICAgICAgICBwcm9tcHQgIlBhdGggdG8gdGhlIG9wdGlvbi1ncm91cHMgY29uZmlndXJhdGlvbiBmaWxlIgorICAgICAgICBkZWZhdWx0ICIiCisgICAgICAgIGhlbHAKKyAgICAgICAgICBQYXRoIHRvIHRoZSBvcHRpb24gZ3JvdXBzIGNvbmZpZ3VyYXRpb24gZmlsZS4KKworICAgIGNvbmZpZyBFR0xJQkNfQlVORExFRF9OU1NfQ09ORklHCisgICAgICAgIGJvb2wKKyAgICAgICAgcHJvbXB0ICJVc2UgYnVuZGxlZCBOU1MgY29uZmlnIGZpbGUiCisgICAgICAgIGRlZmF1bHQgeQorICAgICAgICBoZWxwCisgICAgICAgICAgVXNlIG1pbmltYWwgbnNzd2l0Y2ggY29uZmlndXJhdGlvbiBmaWxlIGJ1bmRsZWQgaW4gZWdsaWJjLgorICAgICAgICAgIFRoaXMgb3B0aW9uIGlzIG9ubHkgbWVhbmluZ2Z1bCB3aGVuIHJ1bnRpbWUgbnNzIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICBpcyBkaXNhYmxlZCBpbiB0aGUgb3B0aW9uIGdyb3VwcyBmaWxlLgorCisgICAgY29uZmlnIEVHTElCQ19OU1NfQ09ORklHX0ZJTEUKKyAgICAgICAgc3RyaW5nCisgICAgICAgIHByb21wdCAiUGF0aCB0byB0aGUgTlNTIGNvbmZpZyBmaWxlIgorICAgICAgICBkZWZhdWx0ICIiCisgICAgICAgIGRlcGVuZHMgb24gIUVHTElCQ19CVU5ETEVEX05TU19DT05GSUcKKyAgICAgICAgaGVscAorICAgICAgICAgIFBhdGggdG8gdGhlIG5zc3dpdGNoIGNvbmZpZ3VyYXRpb24gZmlsZQorCisgICAgY29uZmlnIEVHTElCQ19CVU5ETEVEX05TU19GVU5DVElPTlMKKyAgICAgICAgYm9vbAorICAgICAgICBwcm9tcHQgIlVzZSBidW5kbGVkIE5TUyBmdW5jdGlvbnMgZmlsZSIKKyAgICAgICAgZGVmYXVsdCB5CisgICAgICAgIGhlbHAKKyAgICAgICAgICBVc2UgbWluaW1hbCBuc3N3aXRjaCBmdW5jdGlvbnMgZmlsZSBidW5kbGVkIGluIGVnbGliYy4KKyAgICAgICAgICBUaGlzIG9wdGlvbiBpcyBvbmx5IG1lYW5pbmdmdWwgd2hlbiBydW50aW1lIG5zcyBjb25maWd1cmF0aW9uCisgICAgICAgICAgaXMgZGlzYWJsZWQgaW4gdGhlIG9wdGlvbiBncm91cHMgZmlsZS4KKworICAgIGNvbmZpZyBFR0xJQkNfTlNTX0ZVTkNUSU9OU19GSUxFCisgICAgICAgIHN0cmluZworICAgICAgICBwcm9tcHQgIlBhdGggdG8gdGhlIE5TUyBmdW5jdGlvbnMgZmlsZSIKKyAgICAgICAgZGVmYXVsdCAiIgorICAgICAgICBkZXBlbmRzIG9uICFFR0xJQkNfQlVORExFRF9OU1NfRlVOQ1RJT05TCisgICAgICAgIGhlbHAKKyAgICAgICAgICBQYXRoIHRvIHRoZSBuc3N3aXRjaCBmdW5jdGlvbnMgZmlsZQorZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2xpYmMvZWdsaWJjLmluLjIgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9saWJjL2VnbGliYy5pbi4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NTUzZjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9saWJjL2VnbGliYy5pbi4yCkBAIC0wLDAgKzEgQEAKK3NvdXJjZSAiY29uZmlnL2xpYmMvZ2xpYmMtZWdsaWJjLmluLWNvbW1vbiIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2xpYmMvZ2xpYmMtZWdsaWJjLmluLWNvbW1vbiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2xpYmMvZ2xpYmMtZWdsaWJjLmluLWNvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjcxMDFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvbGliYy9nbGliYy1lZ2xpYmMuaW4tY29tbW9uCkBAIC0wLDAgKzEsMjYxIEBACisjIFRoaXMgZmlsZSBjb250YWlucyB0aGUgY29tbW9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworIyB0aGF0IGFwcGx5IHRvIGJvdGggZ2xpYmMgYW5kIGVnbGliYy4KKworIyBTb21lIGFyY2hpdGVjdHVyZXMgcmVxdWlyZSB0aGUgcG9ydHMgYWRkb24uIExpc3QgdGhlbSBvbmUgYnkgb25lIGhlcmU6CisjIFRoaXMgbGlzdCBtdXN0IGJlIGNhcmVmdWxseSBpbiBzeW5jIHdpdGggdGhlIGFyY2hpdGVjdHVyZXMgbmFtZXMKKyMgd2UgY2FuIGZpbmQgaW4gY29uZmlnL2FyY2gvKgorY29uZmlnIExJQkNfR0xJQkNfTUFZX0ZPUkNFX1BPUlRTCisgICAgYm9vbAorICAgIGRlZmF1bHQgeSBpZiBBUkNIX2FybQorICAgIGRlZmF1bHQgeSBpZiBBUkNIX21pcHMKKyAgICBzZWxlY3QgTElCQ19HTElCQ19VU0VfUE9SVFMKKworIyBGb3JjZSB1c2luZyB0aGUgQkZEIGxpbmtlciBkdXJpbmcgdGhlIHRvb2xjaGFpbiBidWlsZAorY29uZmlnIExJQkNfZ2xpYmNfZmFtaWxseQorICAgIGJvb2wKKyAgICBkZWZhdWx0IHkKKyAgICBzZWxlY3QgQklOVVRJTFNfRk9SQ0VfTERfQkZECisKK2NvbmZpZyBMSUJDX0dMSUJDX0VYVFJBX0NPTkZJR19BUlJBWQorICAgIHN0cmluZworICAgIHByb21wdCAiZXh0cmEgY29uZmlnIgorICAgIGRlZmF1bHQgIiIKKyAgICBoZWxwCisgICAgICBFeHRyYSBmbGFncyB0byBwYXNzIG9udG8gLi9jb25maWd1cmUgd2hlbiBjb25maWd1cmluZy4KKworICAgICAgWW91IGNhbiBlbnRlciBtdWx0aXBsZSBhcmd1bWVudHMgaGVyZSwgYW5kIGFyZ3VtZW50cyBjYW4gY29udGFpbiBzcGFjZXMKKyAgICAgIGlmIHRoZXkgYXJlIHByb3Blcmx5IHF1b3RlZCAob3IgZXNjYXBlZCwgYnV0IHByZWZlciBxdW90ZXMpLiBFZy46CisgICAgICAgICAgLS13aXRoLWZvbz0iMXN0IGFyZyB3aXRoIDQgc3BhY2VzIiAtLXdpdGgtYmFyPTJuZC1hcmctd2l0aG91dC1zcGFjZQorCitjb25maWcgTElCQ19HTElCQ19DT05GSUdQQVJNUworICAgIHN0cmluZworICAgIHByb21wdCAiRXh0cmEgY29uZmlnIHBhcmFtcyAoUkVBRCBIRUxQKSIKKyAgICBkZWZhdWx0ICIiIGlmICEgQVJDSF9zaAorICAgIGRlZmF1bHQgIm5vLXotZGVmcz15ZXMiIGlmIEFSQ0hfc2gKKyAgICBoZWxwCisgICAgICBTb21lIGFyY2hpdGVjdHVyZXMgbmVlZCB0byBzZXQgb3B0aW9ucyBpbiB0aGUgZmlsZSBjb25maWdwYXJtcy4KKyAgICAgIFRoaXMgaXMgdGhlIGNhc2UgZm9yIHNoMy80LCB3aGljaCByZWFsbHkgbmVlZCB0byBzZXQgY29uZmlncGFybXMKKyAgICAgIHRvICJuby16LWRlZnM9eWVzIiBhcyBvZiBnY2MtMy40L2dsaWJjLTIuMy4yLgorICAgICAgCisgICAgICBVbmxlc3MgeW91IGFyZSBidWlsZGluZyBhIHRvb2xjaGFpbiBmb3Igc2gzLzQsIHlvdSBzaG91bGQgbGVhdmUgdGhhdCBlbXB0eS4KKyAgICAgIAorICAgICAgTm90ZTogSWYgeW91IG5lZWQgdG8gcGFzcyBtb3JlIHRoYW4gb25lIHZhbHVlLCBzZXBhcmF0ZSB0aGVtIHdpdGgKKyAgICAgICAgICAgICdcbicuIEVnLjogIHZhcjE9dmFsMVxudmFyMj12YWwyCisKK2NvbmZpZyBMSUJDX0dMSUJDX0VYVFJBX0NGTEFHUworICAgIHN0cmluZworICAgIHByb21wdCAiZXh0cmEgdGFyZ2V0IENGTEFHUyIKKyAgICBkZWZhdWx0ICIiCisgICAgaGVscAorICAgICAgRXh0cmEgdGFyZ2V0IENGTEFHUyB0byB1c2Ugd2hlbiBidWlsZGluZy4KKworY29uZmlnIExJQkNfRVhUUkFfQ0NfQVJHUworICAgIHN0cmluZworICAgIHByb21wdCAiZ2NjIGV4dHJhIGZsYWdzIgorICAgIGRlZmF1bHQgIiIKKyAgICBoZWxwCisgICAgICBFeHRyYSBmbGFncyB0byBwYXNzIGdjYyB3aGVuIGJ1aWxkaW5nLgorCisgICAgICBTZWxkb20gdXNlZCwgZXhjZXB0IGZvciBzcGFyYzY0IHdoaWNoIHNlZW1zIHRvIG5lZWQgdGhlIGZsYWcgLTY0CisgICAgICB0byBiZSBwYXNzZWQgb250byBnY2MuCisKK2NvbmZpZyBMSUJDX0VOQUJMRV9GT1JUSUZJRURfQlVJTEQKKyAgICBib29sCisgICAgcHJvbXB0ICJFbmFibGUgZm9ydGlmaWVkIGJ1aWxkIChFWFBFUklNRU5UQUwpIgorICAgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisgICAgaGVscAorICAgICAgSWYgeW91IHNheSAneScgaGVyZSwgdGhlbiBnbGliYyB3aWxsIGJlIHVzaW5nIGZvcnRpZmllZCB2ZXJzaW9ucworICAgICAgb2YgZnVuY3Rpb25zIHdpdGggZm9ybWF0IGFyZ3VtZW50cyAoZWcuIHZzeXNsb2csIHByaW50Zi4uLiksIGFuZAorICAgICAgZG8gYSBzYW5pdHkgY2hlY2sgb24gdGhlIGZvcm1hdCBhdCBydW50aW1lLCB0byBhdm9pZCBzb21lIG9mIHRoZQorICAgICAgY29tbW9uIGZvcm1hdCBzdHJpbmcgYXR0YWNrcy4KKyAgICAgIAorICAgICAgVGhpcyBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCwgYW5kIHdpbGwgbW9zdCBwcm9iYWJseSByZXN1bHQgaW4KKyAgICAgIGEgYnJva2VuIGJ1aWxkLCB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgbGlrZToKKyAgICAgICAgLi4vbWlzYy9zeXNsb2cuYzogSW4gZnVuY3Rpb24gJ19fdnN5c2xvZ19jaGsnOgorICAgICAgICAuLi9taXNjL3N5c2xvZy5jOjEyMzogc29ycnksIHVuaW1wbGVtZW50ZWQ6IGlubGluaW5nIGZhaWxlZCBpbgorICAgICAgICBjYWxsIHRvICdzeXNsb2cnOiBmdW5jdGlvbiBib2R5IG5vdCBhdmFpbGFibGUKKyAgICAgIAorICAgICAgSWYgeW91IGFyZSBicmF2ZSBlbm91Z2ggYW5kIHdhbnQgdG8gZGVidWcgdGhlIGlzc3VlLCB0aGVuIHNheSAneScKKyAgICAgIGhlcmUuIE90aGVyd2lzZSwgYmUgc3RpbGwgYW5kIHNheSAnbicgKHRoZSBkZWZhdWx0KS4gOy0pCisKKworY29uZmlnIExJQkNfRElTQUJMRV9WRVJTSU9OSU5HCisgICAgYm9vbAorICAgIHByb21wdCAiRGlzYWJsZSBzeW1ib2xzIHZlcnNpb25pbmciCisgICAgaGVscAorICAgICAgRG8gbm90IGluY2x1ZGUgdmVyc2lvbmluZyBpbmZvcm1hdGlvbiBpbiB0aGUgbGlicmFyeSBvYmplY3RzLgorCitjb25maWcgTElCQ19PTERFU1RfQUJJCisgICAgc3RyaW5nCisgICAgcHJvbXB0ICJPbGRlc3Qgc3VwcG9ydGVkIEFCSSIKKyAgICBkZWZhdWx0ICIiCisgICAgaGVscAorICAgICAgU2V0IHRoZSBvbGRlc3QgQUJJIHN1cHBvcnRlZCBieSB0aGUgQyBsaWJyYXJ5LgorICAgICAgCisgICAgICBTZXR0aW5nIHRoaXMgb3B0aW9uLCBmb3IgZXhhbXBsZSwgdG8gMi4yIHdpbGwgcHJvdmlkZSBBQkkgc3VwcG9ydAorICAgICAgYmFjayB0byAoZSlnbGliYy0yLjIuCisKKyAgICAgIElmIHRoaXMgb3B0aW9uIGlzIG5vdCBzZXQsIChlKWdsaWJjIHdpbGwgY2hvb3NlIGZvciB5b3UuCisKK2NvbmZpZyBMSUJDX0dMSUJDX0ZPUkNFX1VOV0lORAorICAgIGJvb2wKKyAgICBwcm9tcHQgIkZvcmNlIHVud2luZCBzdXBwb3J0IChSRUFEIEhFTFAhKSIKKyAgICBkZWZhdWx0IHkKKyAgICBoZWxwCisgICAgICBJZiB5b3VyIHRvb2xjaGFpbiBmYWlscyBidWlsZGluZyB3aGlsZSBidWlsZGluZyB0aGUgQyBsaWJyYXJ5CisgICAgICBzdGFydCBmaWxlcywgb3IgdGhlIGNvbXBsZXRlIEMgbGlicmFyeSwgd2l0aCBhIG1lc3NhZ2UgbGlrZToKKyAgICAgICAgY29uZmlndXJlOiBlcnJvcjogZm9yY2VkIHVud2luZCBzdXBwb3J0IGlzIHJlcXVpcmVkCisgICAgICAKKyAgICAgIHRoZW4geW91IG1heSB0cnkgY2hhbmdpbmcgdGhpcyBvcHRpb24uIE90aGVyd2lzZSwgbGVhdmUgaXQgdG8KKyAgICAgIHRoZSBkZWZhdWx0ICd5Jy4KKyAgICAgIAorICAgICAgVGhlIGlzc3VlIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gYnVpbGRpbmcgTlBUTCBvbiBvbGQgdmVyc2lvbnMKKyAgICAgIG9mIGdsaWJjIChhbmQgcG9zc2libHkgZWdsaWJjIGFzIHdlbGwpIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcworICAgICAgKHNlZW4gb24gczM5MCwgczM5MHggYW5kIHg4Nl82NCkuCisKK2NvbmZpZyBMSUJDX0dMSUJDX1VTRV9QT1JUUworICAgIGJvb2wKKyAgICBwcm9tcHQgIlVzZSB0aGUgcG9ydHMgYWRkb24iCisgICAgaGVscAorICAgICAgVGhlIHBvcnRzIGFkZG9uIGNvbnRhaW5zIHNvbWUgYXJjaGl0ZWN0dXJlIHBvcnRzIHRoYXQgYXJlIG5vdCBhdmFpbGFibGUKKyAgICAgIGluIHRoZSBvZmZpY2lhbCBkaXN0cmlidXRpb24uCisKKyAgICAgIEZvciBleGFtcGxlLCB0aGlzIGlzIHRoZSBjYXNlIGZvciBBUk0gd2l0aCBnbGliYy0yLjQgYW5kIGFib3ZlLgorCisgICAgICBTYXkgbiBvbmx5IGlmIHlvdSdyZSBzdXJlIHRoYXQgeW91ciBhcmNoaXRlY3R1cmUgaXMgaW4gdGhlIG9mZmljaWFsCisgICAgICBkaXN0cmlidXRpb24gZm9yIHlvdXIgY2hvc2VuIHZlcnNpb24uCisKK2NvbmZpZyBMSUJDX0FERE9OU19MSVNUCisgICAgc3RyaW5nCisgICAgcHJvbXB0ICJFeHRyYSBhZGRvbnMiCisgICAgZGVmYXVsdCAiIgorICAgIGhlbHAKKyAgICAgIEV4dHJhIGFkZG9ucyB0byBpbmNsdWRlLiBTcGFjZSBzZXBhcmF0ZWQgbGlzdC4KKworICAgICAgWW91IG5lZWQgdG8gc3BlY2lmeSBuZWl0aGVyIGxpbnV4dGhyZWFkcyBub3IgbnB0bCwgYXMgdGhleSBhcmUgYWRkZWQKKyAgICAgIGF1dG9tYWdpY2FsbHkgZm9yIHlvdSBkZXBlbmRpbmcgb24gdGhlIHRocmVhZGluZyBtb2RlbCB5b3UgY2hvc2UKKyAgICAgIGVhcmxpZXIuCisKKyAgICAgIEVnLjogY3J5cHQgICAgICAgIChmb3IgdmVyeSBvbGQgbGliY2VzKQorCitpZiBMSUJDX0dMSUJDX1VTRV9QT1JUUyB8fCAoIExJQkNfQURET05TX0xJU1QgIT0gIiIgKQorY29tbWVudCAiV0FSTklORyAhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKK2NvbW1lbnQgInwgIEZvciBnbGliYyA+PSAyLjgsIGl0IGNhbiBoYXBwZW4gdGhhdCB0aGUgdGFyYmFsbHMgICAgIgorY29tbWVudCAifCAgZm9yIHRoZSBhZGRvbnMgYXJlIG5vdCBhdmFpbGFibGUgZm9yIGRvd25sb2FkLiAgICAgICAiCitjb21tZW50ICJ8ICBJZiB0aGF0IGhhcHBlbnMsIGJhZCBsdWNrLi4uIFRyeSBhIHByZXZpb3VzIHZlcnNpb24gICIKK2NvbW1lbnQgInwgIG9yIHRyeSBhZ2FpbiBsYXRlci4uLiA6LSggICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorZW5kaWYKKworY29uZmlnIExJQkNfTE9DQUxFUworICAgIGJvb2wKKyAgICBwcm9tcHQgIkJ1aWxkIGFuZCBpbnN0YWxsIGxvY2FsZXMiCisgICAgaGVscAorICAgICAgV2hldGhlciB0byBidWlsZCBhbmQgaW5zdGFsbCB0aGUgbGliYyBsb2NhbGUgZmlsZXMgZm9yIHRoZSB0YXJnZXQsCisgICAgICB3aGljaCBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBzdXBwb3J0IGludGVybmF0aW9uYWxpemF0aW9uLgorCitpZiBMSUJDX2dsaWJjICYmIExJQkNfTE9DQUxFUworY29tbWVudCAiV0FSTklORyEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKK2NvbW1lbnQgInwgIFRoZSBidWlsdCBsb2NhbGVzIHdpbGwgYmUgdXNhYmxlIGlmIGFuZCBvbmx5IGlmIHRoZSBidWlsZCAgIgorY29tbWVudCAifCAgbWFjaGluZSBhbmQgdGhlIHRhcmdldDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCitjb21tZW50ICJ8ICAgLSBoYXZlIHRoZSBzYW1lIGVuZGlhbm5lc3MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKK2NvbW1lbnQgInwgICAtIGFuZCBoYXZlIHRoZSBzYW1lIGFsaWdubWVudCByZXF1aXJlbWVudHMgZm9yIHVpbnQzMl90LiAgIgorY29tbWVudCAifCAgWW91IHdpbGwgaGF2ZSB0byBjaGVjayBieSB5b3Vyc2VsZiAoZm9yIG5vdykuICAgICAgICAgICAgICAiCitlbmRpZiAjIExJQkNfZ2xpYmMgJiYgTElCQ19MT0NBTEVTCisKK2lmIEtFUk5FTF9saW51eAorCitjaG9pY2UgTElCQ19HTElCQ19TVVBQT1JURURfS0VSTkVMCisgICAgYm9vbAorICAgIHByb21wdCAiTWluaW11bSBzdXBwb3J0ZWQga2VybmVsIHZlcnNpb24iCisgICAgZGVmYXVsdCBMSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX0FTX0hFQURFUlMKKworY29uZmlnIExJQkNfR0xJQkNfS0VSTkVMX1ZFUlNJT05fTk9ORQorICAgIGJvb2wKKyAgICBwcm9tcHQgIkxldCAuL2NvbmZpZ3VyZSBkZWNpZGUiCisgICAgaGVscAorICAgICAgTGV0IC4vY29uZmlndXJlIGRlY2lkZSB3aGF0IG1pbmltdW0ga2VybmVsIHZlcnNpb24gZ2xpYmMvZWdsaWJjCisgICAgICB3aWxsIGJlIGFibGUgdG8gcnVuIGFnYWluc3QuCisgICAgICAKKyAgICAgIFRoaXMgd2lsbCBpbmNsdWRlIGxlZ2FjeSBjb21wYXRpYmlsaXR5IGNvZGUgZm9yIG9sZGVyIGtlcm5lbHMgaW4KKyAgICAgIHRoZSBDIGxpYnJhcnksIHRodXMgZW5zdXJpbmcgdGhhdCBpdCB3aWxsIHJ1biBvbiBhIGxhcmdlIG51bWJlcgorICAgICAgb2Ygb2xkIGtlcm5lbHMuCisgICAgICAKKyAgICAgIFRoZSBtaW5pbXVtIGtlcm5lbCB2ZXJzaW9uIHN1cHBvcnRlZCB3aWxsIGJlIGRlcGVuZGVudCB1cG9uIHRoZQorICAgICAgdGFyZ2V0IHlvdSBidWlsZCBmb3IuIEZvciBleGFtcGxlOgorICAgICAgICBhbHBoYSotKi1saW51eC1nbnUgICAgICBSZXF1aXJlcyBMaW51eCAyLjYuOSBmb3IgTlBUTAorICAgICAgICBzaFszNF0tKi1saW51eC1nbnUgICAgICBSZXF1aXJlcyBMaW51eCAyLjYuMTEKKyAgICAgICAgcG93ZXJwYyogICAgICAgICAgICAgICAgUmVxdWlyZXMgTGludXggMi40LjE5CisgICAgICAgIGFybSotKi1saW51eC0qZ251ZWFiaSAgIFJlcXVpcmVzIExpbnV4IDIuNi4xNgorCitjb25maWcgTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9BU19IRUFERVJTCisgICAgYm9vbAorICAgIHByb21wdCAiU2FtZSBhcyBrZXJuZWwgaGVhZGVycyAoZGVmYXVsdCkiCisgICAgaGVscAorICAgICAgTm9ybWFsbHksIHlvdSdsbCB3YW50IGdsaWJjL2VnbGliYyB0byBydW4gYWdhaW5zdCB0aGUgc2FtZSBrZXJuZWwKKyAgICAgIHZlcnNpb24gYXMgdGhlIG9uZSB1c2VkIGZvciB0aGUgaGVhZGVycy4KKyAgICAgIAorICAgICAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKyAgICAgIAorICAgICAgSWYgZW5hYmxlZCwgY3Jvc3N0b29sLW5nIHdpbGwgdXNlIHRoZSBjaG9zZW4gdmVyc2lvbiBvZiBrZXJuZWwKKyAgICAgIGhlYWRlcnMgZm9yIHRoZSBnbGliYyBtaW5pbXVtIGtlcm5lbCB2ZXJzaW9uIHN1cHBvcnRlZCwgd2hpY2ggaXMKKyAgICAgIHdoYXQgZ2V0cyBwYXNzZWQgdG8gIi0tZW5hYmxlLWtlcm5lbD0iIHdoZW4gY29uZmlndXJpbmcgZ2xpYmMuCisgICAgICAKKyAgICAgIEVuYWJsaW5nIHRoaXMgd2lsbCBlbnN1cmUgdGhhdCBubyBsZWdhY3kgY29tcGF0aWJpbGl0eSBjb2RlIGZvcgorICAgICAgb2xkZXIga2VybmVscyBpcyBidWlsdCBpbnRvIHlvdXIgQyBsaWJyYXJpZXMsIGJ1dCBpdCB3aWxsCisgICAgICBiZSB1bmFibGUgdG8gcnVuIG9uIGtlcm5lbCB2ZXJzaW9ucyBvbGRlciB0aGFuIHdoaWNoZXZlciBrZXJuZWwKKyAgICAgIGhlYWRlcnMgdmVyc2lvbiB5b3UndmUgYnVpbHQgdGhlIHRvb2xjaGFpbiBmb3IuCisgICAgICAKKyAgICAgIElmIHlvdSBrbm93IGZvciBzdXJlIHRoYXQgeW91ciB0b29sY2hhaW4gd2lsbCBuZXZlciBuZWVkIHRvIGJ1aWxkCisgICAgICBhcHBsaWNhdGlvbnMgdGhhdCB3aWxsIHJ1biB1bmRlciBhIGtlcm5lbCB2ZXJzaW9uIG9sZGVyIHRoYW4geW91cgorICAgICAgY2hvc2VuIGtlcm5lbCBoZWFkZXJzIHZlcnNpb24gKENUX0tFUk5FTF9WRVJTSU9OKSwgeW91IGNhbiBjaG9vc2UKKyAgICAgICJ5IiBoZXJlLgorCitjb25maWcgTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9DSE9TRU4KKyAgICBib29sCisgICAgcHJvbXB0ICJTcGVjaWZpYyBrZXJuZWwgdmVyc2lvbiIKKyAgICBoZWxwCisgICAgICBTcGVjaWZ5IHRoZSBlYXJsaWVzdCBMaW51eCBrZXJuZWwgdmVyc2lvbiB5b3Ugd2FudCBnbGliYyB0bworICAgICAgaW5jbHVkZSBzdXBwb3J0IGZvci4gIFRoaXMgZG9lcyBub3QgaGF2ZSB0byBtYXRjaCB0aGUga2VybmVsCisgICAgICBoZWFkZXJzIHZlcnNpb24gdXNlZCBmb3IgeW91ciB0b29sY2hhaW4uICBUaGlzIGNvbnRyb2xzIHdoYXQgaXMKKyAgICAgIHBhc3NlZCB0byB0aGUgIi0tZW5hYmxlLWtlcm5lbD0iIG9wdGlvbiB0byB0aGUgZ2xpYmMgY29uZmlndXJlCisgICAgICBzY3JpcHQuCisKKyAgICAgIElmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gc3RhdGljYWxseSBsaW5rIHByb2dyYW1zIHdpdGggeW91cgorICAgICAgdG9vbGNoYWluJ3MgQyBsaWJyYXJ5LCBtYWtlIHN1cmUgdGhpcyBrZXJuZWwgdmVyc2lvbiBpcyBsb3dlciB0aGFuCisgICAgICBhbGwga2VybmVscyB5b3Ugd2lzaCB0byBzdXBwb3J0IHRvIGF2b2lkICJGQVRBTDoga2VybmVsIHRvbyBvbGQiCisgICAgICBlcnJvcnMuICBUaGUgaGlnaGVyIHRoZSB2ZXJzaW9uIHlvdSBzcGVjaWZ5LCB0aGUgbGVzcyBsZWdhY3kgY29kZQorICAgICAgd2lsbCBiZSBidWlsdCBpbnRvIGxpYmMuCisKKyAgICAgIE1vc3QgcGVvcGxlIGNhbiBsZWF2ZSB0aGlzIGF0IHRoZSBkZWZhdWx0IHZhbHVlIG9mICIyLjYuOSIuCisKK2lmIExJQkNfR0xJQkNfS0VSTkVMX1ZFUlNJT05fQ0hPU0VOCisKK2NvbmZpZyBMSUJDX0dMSUJDX01JTl9LRVJORUxfVkVSU0lPTgorICAgIHN0cmluZworICAgIHByb21wdCAiTWluaW11bSBrZXJuZWwgdmVyc2lvbiB0byBzdXBwb3J0IgorICAgIGRlZmF1bHQgIjIuNi45IgorICAgIGhlbHAKKyAgICAgIEVudGVyIGhlcmUgdGhlIGxvd2VzdCBrZXJuZWwgdmVyc2lvbiBnbGliYy9lZ2xpYmMgd2lsbCBiZSBhYmxlIHRvCisgICAgICBydW4gYWdhaW5zdC4KKyAgICAgIAorICAgICAgVGhlIG1pbmltdW0ga2VybmVsIHZlcnNpb24gc3VwcG9ydGVkIHdpbGwgYmUgZGVwZW5kZW50IHVwb24gdGhlCisgICAgICB0YXJnZXQgeW91IGJ1aWxkIGZvci4gRm9yIGV4YW1wbGU6CisgICAgICAgIGFscGhhKi0qLWxpbnV4LWdudSAgICAgIFJlcXVpcmVzIExpbnV4IDIuNi45IGZvciBOUFRMCisgICAgICAgIHNoWzM0XS0qLWxpbnV4LWdudSAgICAgIFJlcXVpcmVzIExpbnV4IDIuNi4xMQorICAgICAgICBwb3dlcnBjKiAgICAgICAgICAgICAgICBSZXF1aXJlcyBMaW51eCAyLjQuMTkKKyAgICAgICAgYXJtKi0qLWxpbnV4LSpnbnVlYWJpICAgUmVxdWlyZXMgTGludXggMi42LjE2CisgICAgICAKKyAgICAgIE5vdGUgdGhhdCBubyBzYW5pdHkgY2hlY2sgaXMgcGVyZm9ybWVkIGJ5IGNyb3NzdG9vbC1ORyB0byBlbnN1cmUKKyAgICAgIHRoYXQgdGhlIHZhbHVlIHlvdSBlbnRlciBoZXJlIGlzIGFwcHJvcHJpYXRlIGZvciB5b3VyIHRhcmdldC4KKworZW5kaWYgIyBMSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX0NIT1NFTgorCitlbmRjaG9pY2UKKworY29uZmlnIExJQkNfR0xJQkNfTUlOX0tFUk5FTAorICAgIHN0cmluZworICAgIGRlZmF1bHQgIiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9OT05FCisgICAgZGVmYXVsdCBLRVJORUxfVkVSU0lPTiAgICAgICAgICAgICAgICBpZiBMSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX0FTX0hFQURFUlMKKyAgICBkZWZhdWx0IExJQkNfR0xJQkNfTUlOX0tFUk5FTF9WRVJTSU9OIGlmIExJQkNfR0xJQkNfS0VSTkVMX1ZFUlNJT05fQ0hPU0VOCisKK2VuZGlmICMgS0VSTkVMX2xpbnV4CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9saWJjL2dsaWJjLmluIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvbGliYy9nbGliYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzE1N2FjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvbGliYy9nbGliYy5pbgpAQCAtMCwwICsxLDEzNCBAQAorIyBnbGliYyBvcHRpb25zCisKKyMjIGRlcGVuZHMgb24gISBNSU5HVzMyICYmICEgQkFSRV9NRVRBTCAmJiBBUkNIX1VTRV9NTVUKKyMjCisjIyBzZWxlY3QgTElCQ19TVVBQT1JUX05QVEwKKyMjCisjIyBoZWxwIFRoZSBkZS1mYWN0byBzdGFuZGFyZCBmb3IgTGludXggZGlzdHJpYnV0aW9ucy4KKyMjIGhlbHAgRmVhdHVyZS1yaWNoLCBidXQgbGFyZ2UuLi4gIE1vc3QgdXNlZnVsbCBmb3IgZGVza3RvcC1saWtlIHN5c3RlbXMuCisKK2Nob2ljZQorICAgIGJvb2wKKyAgICBwcm9tcHQgIlJldHJpZXZhbCBtZXRob2QiCisgICAgZGVmYXVsdCBMSUJDX0dMSUJDX1RBUkJBTEwKKworY29uZmlnIExJQkNfR0xJQkNfVEFSQkFMTAorICAgIGJvb2wKKyAgICBwcm9tcHQgIlJlbGVhc2VkIHRhcmJhbGwiCisgICAgaGVscAorICAgICAgVW50aWwgZW5kIG9mIEZlYnJ1cmFyeSAyMDA5LCB0aGVyZSB3YXMgbm8gdGFyYmFsbCBmb3IgZ2xpYmMgcmVsZWFzZXMKKyAgICAgIDIuOCBhbmQgbGF0ZXIuIFRoaXMgd2FzIGludGVudGlvbmFsLgorICAgICAgCisgICAgICBUaGVuLCBhbGwgb2YgYSBzdWRkZW4sIHRhcmJhbGxzIGZvciB0aG9zZSByZWxlYXNlcyBoYXZlIGFwcGVhcmVkIGF0IHRoZQorICAgICAgdHJhZGl0aW9uYWwgZG93bmxvYWQgcGxhY2UgKGZ0cC5nbnUub3JnKS4KKyAgICAgIAorICAgICAgU29tZSBvZiB0aGUgZ2xpYmMgcGVvcGxlIGFyZ3VlIHRoYXQgZml4ZXMgYXJlIGNvbW1pdHRlZCB0byB0aGUgbWFpbnRlbmFuY2UKKyAgICAgIGJyYW5jaCwgYW5kIHRodXMgaXQgaXMgdGhlIGJlc3QgcGxhYyBlIHRvIHJldHJpZXZlIHRoZSBnbGliYyBmcm9tLgorICAgICAgT24gdGhlIG90aGVyIGhhbmQsIGl0IG1pZ2h0IGJlIHByZWZlcmFibGUgdG8gYWx3YXlzIGdlbmVyYXRlIGEgdG9vbGNoYWluCisgICAgICB1c2luZyBhIGtub3duIGNvZGUtYmFzZSwgc28gdGhlIHRvb2xjaGFpbiBjYW4gYmUgcmVwcm9kdWNpYmxlLgorICAgICAgCisgICAgICBGb3IgdmVyc2lvbiBwcmlvciB0byAyLjgsIHRhcmJhbGxzIHdlcmUgcmVhZGlseSBhdmFpbGFibGUuCisgICAgICAKKyAgICAgIElmIHlvdSB3YW50IHlvdXIgdG9vbGNoYWluIHRvIHJlYWxseSBiZSByZXByb2R1Y2libGUsIHNheSAnWScgaGVyZS4KKyAgICAgIElmIHlvdSBjYW4gbGl2ZSB3aXRoIGEgbW92aW5nIGNvZGUtYmFzZSwgbG9vayBhdCB0aGUgb3RoZXIgY2hvaWNlCisgICAgICBlbnRyaWVzLCBiZWxvdy4KKworZW5kY2hvaWNlCisKK2Nob2ljZQorICAgIGJvb2wKKyAgICBwcm9tcHQgImdsaWJjIHZlcnNpb24iCisjIERvbid0IHJlbW92ZSBuZXh0IGxpbmUKKyMgQ1RfSU5TRVJUX1ZFUlNJT05fQkVMT1cKKworY29uZmlnIExJQkNfR0xJQkNfVl8yXzE0CisgICAgYm9vbAorICAgIHByb21wdCAiMi4xNCAoRVhQRVJJTUVOVEFMKSIKKyAgICBkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCitjb25maWcgTElCQ19HTElCQ19WXzJfMTMKKyAgICBib29sCisgICAgcHJvbXB0ICIyLjEzIChFWFBFUklNRU5UQUwpIgorICAgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisKK2NvbmZpZyBMSUJDX0dMSUJDX1ZfMl8xMl8yCisgICAgYm9vbAorICAgIHByb21wdCAiMi4xMi4yIChFWFBFUklNRU5UQUwpIgorICAgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisKK2NvbmZpZyBMSUJDX0dMSUJDX1ZfMl8xMl8xCisgICAgYm9vbAorICAgIHByb21wdCAiMi4xMi4xIChFWFBFUklNRU5UQUwpIgorICAgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisKK2NvbmZpZyBMSUJDX0dMSUJDX1ZfMl8xMV8xCisgICAgYm9vbAorICAgIHByb21wdCAiMi4xMS4xIChFWFBFUklNRU5UQUwpIgorICAgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisKK2NvbmZpZyBMSUJDX0dMSUJDX1ZfMl8xMQorICAgIGJvb2wKKyAgICBwcm9tcHQgIjIuMTEgKEVYUEVSSU1FTlRBTCkiCisgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKworY29uZmlnIExJQkNfR0xJQkNfVl8yXzEwXzEKKyAgICBib29sCisgICAgcHJvbXB0ICIyLjEwLjEgKEVYUEVSSU1FTlRBTCkiCisgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKyAgICBzZWxlY3QgTElCQ19HTElCQ19VU0VfUE9SVFMKKworY29uZmlnIExJQkNfR0xJQkNfVl8yXzkKKyAgICBib29sCisgICAgcHJvbXB0ICIyLjkiCisKK2NvbmZpZyBMSUJDX0dMSUJDX1ZfMl84CisgICAgYm9vbAorICAgIHByb21wdCAiMi44IgorCitjb25maWcgTElCQ19HTElCQ19WXzJfNworICAgIGJvb2wKKyAgICBwcm9tcHQgIjIuNyAoT0JTT0xFVEUpIgorICAgIGRlcGVuZHMgb24gT0JTT0xFVEUKKworY29uZmlnIExJQkNfR0xJQkNfVl8yXzZfMQorICAgIGJvb2wKKyAgICBwcm9tcHQgIjIuNi4xIChPQlNPTEVURSkiCisgICAgZGVwZW5kcyBvbiBPQlNPTEVURQorCitjb25maWcgTElCQ19HTElCQ19WXzJfNgorICAgIGJvb2wKKyAgICBwcm9tcHQgIjIuNiAoT0JTT0xFVEUpIgorICAgIGRlcGVuZHMgb24gT0JTT0xFVEUKKworY29uZmlnIExJQkNfR0xJQkNfVl8yXzVfMQorICAgIGJvb2wKKyAgICBwcm9tcHQgIjIuNS4xIChPQlNPTEVURSkiCisgICAgZGVwZW5kcyBvbiBPQlNPTEVURQorICAgIHNlbGVjdCBMSUJDX1NVUFBPUlRfTElOVVhUSFJFQURTCisKK2NvbmZpZyBMSUJDX0dMSUJDX1ZfMl81CisgICAgYm9vbAorICAgIHByb21wdCAiMi41IChPQlNPTEVURSkiCisgICAgZGVwZW5kcyBvbiBPQlNPTEVURQorICAgIHNlbGVjdCBMSUJDX1NVUFBPUlRfTElOVVhUSFJFQURTCisKK2VuZGNob2ljZQorCitjb25maWcgTElCQ19WRVJTSU9OCisgICAgc3RyaW5nCisjIERvbid0IHJlbW92ZSBuZXh0IGxpbmUKKyMgQ1RfSU5TRVJUX1ZFUlNJT05fU1RSSU5HX0JFTE9XCisgICAgZGVmYXVsdCAiMi4xNCIgaWYgTElCQ19HTElCQ19WXzJfMTQKKyAgICBkZWZhdWx0ICIyLjEzIiBpZiBMSUJDX0dMSUJDX1ZfMl8xMworICAgIGRlZmF1bHQgIjIuMTIuMiIgaWYgTElCQ19HTElCQ19WXzJfMTJfMgorICAgIGRlZmF1bHQgIjIuMTIuMSIgaWYgTElCQ19HTElCQ19WXzJfMTJfMQorICAgIGRlZmF1bHQgIjIuMTEuMSIgaWYgTElCQ19HTElCQ19WXzJfMTFfMQorICAgIGRlZmF1bHQgIjIuMTEiIGlmIExJQkNfR0xJQkNfVl8yXzExCisgICAgZGVmYXVsdCAiMi4xMC4xIiBpZiBMSUJDX0dMSUJDX1ZfMl8xMF8xCisgICAgZGVmYXVsdCAiMi45IiBpZiBMSUJDX0dMSUJDX1ZfMl85CisgICAgZGVmYXVsdCAiMi44IiBpZiBMSUJDX0dMSUJDX1ZfMl84CisgICAgZGVmYXVsdCAiMi43IiBpZiBMSUJDX0dMSUJDX1ZfMl83CisgICAgZGVmYXVsdCAiMi42LjEiIGlmIExJQkNfR0xJQkNfVl8yXzZfMQorICAgIGRlZmF1bHQgIjIuNiIgaWYgTElCQ19HTElCQ19WXzJfNgorICAgIGRlZmF1bHQgIjIuNS4xIiBpZiBMSUJDX0dMSUJDX1ZfMl81XzEKKyAgICBkZWZhdWx0ICIyLjUiIGlmIExJQkNfR0xJQkNfVl8yXzUKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2xpYmMvZ2xpYmMuaW4uMiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2xpYmMvZ2xpYmMuaW4uMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDU1M2YzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvbGliYy9nbGliYy5pbi4yCkBAIC0wLDAgKzEgQEAKK3NvdXJjZSAiY29uZmlnL2xpYmMvZ2xpYmMtZWdsaWJjLmluLWNvbW1vbiIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2xpYmMvbWluZ3cuaW4gYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9saWJjL21pbmd3LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYjEwZTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9saWJjL21pbmd3LmluCkBAIC0wLDAgKzEsMzMgQEAKKyMgbWluZ3cgb3B0aW9ucworCisjIyBkZXBlbmRzIG9uIE1JTkdXMzIKKyMjCisjIyBzZWxlY3QgTElCQ19TVVBQT1JUX1dJTjMyVEhSRUFEUworIyMKKyMjIGhlbHAgVGhlIGRlLWZhY3RvIHN0YW5kYXJkIGZvciBNaW5ndyBkaXN0cmlidXRpb25zLgorCitjaG9pY2UKKyAgICBib29sCisgICAgcHJvbXB0ICJNaW5ndyBydW50aW1lIHZlcnNpb24iCisKKyMgRG9uJ3QgcmVtb3ZlIG5leHQgbGluZQorIyBDVF9JTlNFUlRfVkVSU0lPTl9CRUxPVworY29uZmlnIE1JTkdXUlRfVl8zXzE4CisgICAgYm9vbAorICAgIHByb21wdCAiMy4xOCIKKworY29uZmlnIE1JTkdXUlRfVl9zZWxlY3QKKyAgICBib29sCisgICAgcHJvbXB0ICJPdGhlciB2ZXJzaW9uIgorCitlbmRjaG9pY2UKKworY29uZmlnIE1JTkdXUlRfVkVSU0lPTgorICAgIHN0cmluZworICAgIHByb21wdCAiTWluZ3cgcnVudGltZSB2ZXJzaW9uIiBpZiBNSU5HV1JUX1Zfc2VsZWN0CisjIERvbid0IHJlbW92ZSBuZXh0IGxpbmUKKyMgQ1RfSU5TRVJUX1ZFUlNJT05fU1RSSU5HX0JFTE9XCisgICAgZGVmYXVsdCAiMy4xOCIgaWYgTUlOR1dSVF9WXzNfMTgKKyAgICBoZWxwCisgICAgICBFbnRlciB0aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIG1pbmd3IHJ1bnRpbWUgZmlsZXMgdG8gdXNlCisKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2xpYmMvbWluZ3cuaW4uMiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2xpYmMvbWluZ3cuaW4uMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzdjMjFiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvbGliYy9taW5ndy5pbi4yCkBAIC0wLDAgKzEsNzIgQEAKKyMgUGFydC0yIG9mIG1pbmd3IEMgbGlicmFyeSBvcHRpb25zOiBkZXZlbG9wbWVudCBsaWJyYXJpZXMKKworY29uZmlnIE1JTkdXX0RJUkVDVFgKKyAgICBib29sCisgICAgcHJvbXB0ICJJbmNsdWRlIERpcmVjdFggZGV2ZWxvcG1lbnQgZmlsZXMiCisKK2NvbmZpZyBNSU5HV19PUEVOR0wKKyAgICBib29sCisgICAgcHJvbXB0ICJJbmNsdWRlIE9wZW5HTCBkZXZlbG9wbWVudCBmaWxlcyIKKworY29uZmlnIE1JTkdXX1BEQ1VSU0VTCisgICAgYm9vbAorICAgIHByb21wdCAiSW5jbHVkZSBQREN1cnNlcyAoTkN1cnNlcyBsaWJyYXJ5KSBkZXZlbG9wbWVudCBmaWxlcyIKKworY2hvaWNlCisgICAgYm9vbAorICAgIHByb21wdCAiUERDdXJzZXMgbGlicmFyeSB2ZXJzaW9uIgorICAgIGRlcGVuZHMgb24gTUlOR1dfUERDVVJTRVMKKworY29uZmlnIE1JTkdXX1BEQ1VSU0VTX1ZfM180CisgICAgYm9vbAorICAgIHByb21wdCAiMy40IgorCisjIENUX0lOU0VSVF9WRVJTSU9OX0FCT1ZFCisjIERvbid0IHJlbW92ZSBhYm92ZSBsaW5lIQorCitjb25maWcgTUlOR1dfUERDVVJTRVNfVl9zZWxlY3QKKyAgICBib29sCisgICAgcHJvbXB0ICJPdGhlciB2ZXJzaW9uIgorCitlbmRjaG9pY2UKKworY29uZmlnIE1JTkdXX1BEQ1VSU0VTX1ZFUlNJT04KKyAgICBzdHJpbmcKKyAgICBwcm9tcHQgIlBEQ3Vyc2VzIGxpYnJhcnkgdmVyc2lvbiIgaWYgTUlOR1dfUERDVVJTRVNfVl9zZWxlY3QKKyAgICBkZWZhdWx0ICIzLjQiIGlmIE1JTkdXX1BEQ1VSU0VTX1ZfM180CisjIENUX0lOU0VSVF9WRVJTSU9OX1NUUklOR19BQk9WRQorIyBEb24ndCByZW1vdmUgYWJvdmUgbGluZSEKKyAgICBoZWxwCisgICAgICBFbnRlciB0aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIFBEQ3Vyc2VzIGxpYnJhcnkgdG8gdXNlCisKK2NvbmZpZyBNSU5HV19HTlVSWAorICAgIGJvb2wKKyAgICBwcm9tcHQgIkluY2x1ZGUgR251UlggKHJlZ2V4IGxpYnJhcnkpIGRldmVsb3BtZW50IGZpbGVzIgorCitjaG9pY2UKKyAgICBib29sCisgICAgcHJvbXB0ICJHbnVSWCBsaWJyYXJ5IHZlcnNpb24iCisgICAgZGVwZW5kcyBvbiBNSU5HV19HTlVSWAorCitjb25maWcgTUlOR1dfR05VUlhfVl8yXzVfMQorICAgIGJvb2wKKyAgICBwcm9tcHQgIjIuNS4xIgorCisjIENUX0lOU0VSVF9WRVJTSU9OX0FCT1ZFCisjIERvbid0IHJlbW92ZSBhYm92ZSBsaW5lIQorCitjb25maWcgTUlOR1dfR05VUlhfVl9zZWxlY3QKKyAgICBib29sCisgICAgcHJvbXB0ICJPdGhlciB2ZXJzaW9uIgorCitlbmRjaG9pY2UKKworY29uZmlnIE1JTkdXX0dOVVJYX1ZFUlNJT04KKyAgICBzdHJpbmcKKyAgICBwcm9tcHQgIkdudVJYIGxpYnJhcnkgdmVyc2lvbiIgaWYgTUlOR1dfR05VUlhfVl9zZWxlY3QKKyAgICBkZWZhdWx0ICIyLjUuMSIgaWYgTUlOR1dfR05VUlhfVl8yXzVfMQorIyBDVF9JTlNFUlRfVkVSU0lPTl9TVFJJTkdfQUJPVkUKKyMgRG9uJ3QgcmVtb3ZlIGFib3ZlIGxpbmUhCisgICAgaGVscAorICAgICAgRW50ZXIgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBSZWdleCBsaWJyYXJ5IHRvIHVzZQorCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9saWJjL25ld2xpYi5pbiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2xpYmMvbmV3bGliLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NWFmZjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9saWJjL25ld2xpYi5pbgpAQCAtMCwwICsxLDc1IEBACisjIG5ld2xpYiBvcHRpb25zCisKKyMjIGRlcGVuZHMgb24gQkFSRV9NRVRBTAorIyMKKyMjIHNlbGVjdCBMSUJDX1NVUFBPUlRfVEhSRUFEU19OT05FCisjIworIyMgaGVscCBOZXdsaWIgaXMgYSBDIGxpYnJhcnkgaW50ZW5kZWQgZm9yIHVzZSBvbiBlbWJlZGRlZCBzeXN0ZW1zLiBJdCBpcyBhCisjIyBoZWxwIGNvbmdsb21lcmF0aW9uIG9mIHNldmVyYWwgbGlicmFyeSBwYXJ0cywgYWxsIHVuZGVyIGZyZWUgc29mdHdhcmUKKyMjIGhlbHAgbGljZW5zZXMgdGhhdCBtYWtlIHRoZW0gZWFzaWx5IHVzYWJsZSBvbiBlbWJlZGRlZCBwcm9kdWN0cy4gTmV3bGliCisjIyBoZWxwIGlzIG9ubHkgYXZhaWxhYmxlIGluIHNvdXJjZSBmb3JtLiBJdCBjYW4gYmUgY29tcGlsZWQgZm9yIGEgd2lkZQorIyMgaGVscCBhcnJheSBvZiBwcm9jZXNzb3JzLCBhbmQgd2lsbCB1c3VhbGx5IHdvcmsgb24gYW55IGFyY2hpdGVjdHVyZSB3aXRoCisjIyBoZWxwIHRoZSBhZGRpdGlvbiBvZiBhIGZldyBsb3ctbGV2ZWwgcm91dGluZXMuCisKK2Nob2ljZQorICAgIGJvb2wKKyAgICBwcm9tcHQgIm5ld2xpYiB2ZXJzaW9uIgorIyBEb24ndCByZW1vdmUgbmV4dCBsaW5lCisjIENUX0lOU0VSVF9WRVJTSU9OX0JFTE9XCisKK2NvbmZpZyBMSUJDX05FV0xJQl9WXzFfMTlfMAorICAgIGJvb2wKKyAgICBwcm9tcHQgIjEuMTkuMCAoRVhQRVJJTUVOVEFMKSIKKyAgICBkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCitjb25maWcgTElCQ19ORVdMSUJfVl8xXzE4XzAKKyAgICBib29sCisgICAgcHJvbXB0ICIxLjE4LjAgKEVYUEVSSU1FTlRBTCkiCisgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKworY29uZmlnIExJQkNfTkVXTElCX1ZfMV8xN18wCisgICAgYm9vbAorICAgIHByb21wdCAiMS4xNy4wIgorCitjb25maWcgTElCQ19ORVdMSUJfQ1ZTCisgICAgYm9vbAorICAgIHByb21wdCAiVXNlIENWUyBzbmFwc2hvdCIKKyAgICBkZXBlbmRzIG9uIENPTkZJR1VSRV9oYXNfY3ZzCisgICAgaGVscAorICAgICAgVGhlIG5ld2xpYiAidGVhbSIgcm9sbHMgbmV3IHJlbGVhc2VzIGFib3V0IG9uY2UgYSB5ZWFyIChkZWNlbWJlcikuCisgICAgICBUaGlzIGlzIHF1aXRlIGEgbG9uZyB0aW1lIGJldHdlZW4gcmVsZWFzZXMsIGluIGNhc2UgY29kZSB3YXMgZml4ZWQuCisgICAgICAKKyAgICAgIFNheWluZyAnWScgaGVyZSB3aWxsIGFsbG93IHlvdSB0byB1c2UgdGhlIGJsZWVkaW5nLWVkZ2UgY29kZSBmcm9tCisgICAgICB0aGUgQ1ZTIHJlcG9zaXRvcnkuIFRoaXMgbWF5IG9yIG1heSBub3QgZml4IHlvdXIgaXNzdWVzLCBtYXkgb3IgbWF5CisgICAgICBub3QgYnVpbGQsIG1heSBvciBtYXkgbm90IGNyYXNoIHlvdXIgbWFjaGluZSwgbWF5IG9yIG1heSBub3Qgd2l0aGRyYXcKKyAgICAgIG1vbmV5IGZyb20geW91ciBiYW5rIGFjY291bnQsIG1heSBvciBtYXkgbm90IGRhdGUgeW91ciBnaXJsZnJpZW5kLAorICAgICAgbWF5IG9yIG1heSBub3QgcmVzdXJlY3QgRWx2aXMuLi4gOi0pCisgICAgICAKKyAgICAgIEluIGEgd29yZDogdXNlIHRoZSBDVlMgc25hcHNob3QgYXQgeW91ciBvd24gcmlzayEgCisKK2VuZGNob2ljZQorCitjb25maWcgTElCQ19WRVJTSU9OCisgICAgc3RyaW5nCisgICAgcHJvbXB0ICJ1c2UgQ1ZTIHRhZyIgaWYgTElCQ19ORVdMSUJfQ1ZTCisjIERvbid0IHJlbW92ZSBuZXh0IGxpbmUKKyMgQ1RfSU5TRVJUX1ZFUlNJT05fU1RSSU5HX0JFTE9XCisgICAgZGVmYXVsdCAiMS4xOS4wIiBpZiBMSUJDX05FV0xJQl9WXzFfMTlfMAorICAgIGRlZmF1bHQgIjEuMTguMCIgaWYgTElCQ19ORVdMSUJfVl8xXzE4XzAKKyAgICBkZWZhdWx0ICIxLjE3LjAiIGlmIExJQkNfTkVXTElCX1ZfMV8xN18wCisgICAgaGVscAorICAgICAgRW50ZXIgdGhlIHRhZyB5b3Ugd2FudCB0byB1c2UuCisgICAgICBMZWF2ZSBlbXB0eSB0byB1c2UgdGhlICdoZWFkJyBvZiB0aGUgcmVwb3NpdG9yeS4KKworY29tbWVudCAiQXJjaGl0ZWN0dXJlIHNwZWNpZmljIG9wdGlvbnMiCisKK2NvbmZpZyBBVE1FTF9BVlIzMl9IRUFERVJTCisgICAgYm9vbAorICAgIHByb21wdCAiSW5zdGFsbCBBdG1lbCBBVlIzMiBoZWFkZXJzIgorICAgIGRlcGVuZHMgb24gQVJDSF9hdnIzMgorICAgIGRlZmF1bHQgeQorICAgIGhlbHAKKyAgICAgIEluc3RhbGwgQXRtZWwgQVZSMzIgaGVhZGVycyBmb3IgbmF0aXZlIEFWUjMyIGRldmVsb3BtZW50LiBNb3N0CisgICAgICBBVlIzMiBNQ1UgZGV2aWNlcyBhcmUgc3VwcG9ydGVkLgorICAgICAgCisgICAgICBJZiB5b3UgZG8gbmF0aXZlIEFWUjMyIGRldmVsb3BtZW50IHlvdSB3YW50IHRvIHNheSAnWScgaGVyZS4KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2xpYmMvbmV3bGliLmluLjIgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9saWJjL25ld2xpYi5pbi4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMmE2OGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9saWJjL25ld2xpYi5pbi4yCkBAIC0wLDAgKzEsMzcgQEAKKyMgbmV3bGliIHNlY29uZC1wYXJ0IG9wdGlvbnMKKworY29uZmlnIExJQkNfTkVXTElCX0lPX0M5OUZNVAorICAgIGJvb2wKKyAgICBwcm9tcHQgIkVuYWJsZSBJT3Mgb24gQzk5IGZvcm1hdHMiCisgICAgaGVscAorICAgICAgRW5hYmxlIHN1cHBvcnQgZm9yIElPcyBvbiBDOTkgZm9ybWF0cy4KKworY29uZmlnIExJQkNfTkVXTElCX0lPX0xMCisgICAgYm9vbAorICAgIHByb21wdCAiRW5hYmxlIElPcyBvbiBsb25nIGxvbmciCisgICAgaGVscAorICAgICAgRW5hYmxlIHN1cHBvcnQgZm9yIElPcyBvbiBsb25nIGxvbmcgaW50ZWdlcnMuCisKK2NvbmZpZyBMSUJDX05FV0xJQl9JT19GTE9BVAorICAgIGJvb2wKKyAgICBwcm9tcHQgIkVuYWJsZSBJT3Mgb24gZmxvYXRzIGFuZCBkb3VibGVzIgorICAgIGhlbHAKKyAgICAgIEVuYWJsZSBzdXBwb3J0IGZvciBJT3Mgb24gZmxvYXRpbmcgcG9pbnQKKyAgICAgIHZhbHVlcyAoZmxvYXQgYW5kIGRvdWJsZSkuCisKK2NvbmZpZyBMSUJDX05FV0xJQl9JT19MREJMCisgICAgYm9vbAorICAgIHByb21wdCAiRW5hYmxlIElPcyBvbiBsb25nIGRvdWJsZXMiCisgICAgZGVwZW5kcyBvbiBMSUJDX05FV0xJQl9JT19GTE9BVAorICAgIGhlbHAKKyAgICAgIEVuYWJsZSBzdXBwb3J0IGZvciBJT3Mgb24gbG9uZyBkb3VibGVzLgorCitjb25maWcgTElCQ19ORVdMSUJfRElTQUJMRV9TVVBQTElFRF9TWVNDQUxMUworICAgIGJvb2wKKyAgICBwcm9tcHQgIkRpc2FibGUgdGhlIHN5c2NhbGxzIHN1cHBsaWVkIHdpdGggbmV3bGliIgorICAgIGhlbHAKKyAgICAgIERpc2FibGUgdGhlIHN5c2NhbGxzIHRoYXQgY29tZSB3aXRoIG5ld2xpYi4gWW91CisJICB3aWxsIGhhdmUgdG8gaW1wbGVtZW50IHlvdXIgb3duIF9zYnJrLCBfcmVhZCwKKwkgIF93cml0ZS4uLiBJZiB5b3UgcGxhbiB0byBwb3J0IG5ld2xpYiB0byBhIG5ldworCSAgcGxhdGZvcm0vYm9hcmQsIHNheSBZZXMuCisKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2xpYmMvbm9uZS5pbiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL2xpYmMvbm9uZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGEwNjEyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvbGliYy9ub25lLmluCkBAIC0wLDAgKzEsMTMgQEAKKyMgRHVtbXkgY29uZmlnIGZpbGUgdG8gbm90IHVzZSBhIEMgbGlicmFyeSAqYXQgYWxsKgorCisjIyBkZXBlbmRzIG9uIEJBUkVfTUVUQUwKKyMjCisjIyBoZWxwIERvIG5vdCB1c2UgYSBDIGxpYnJhcnkuCisjIyBoZWxwCisjIyBoZWxwIFRoaXMgaXMgdXNlZnVsbCBpZiB5b3VyIHByb2plY3QgaXMgc2VsZi1jb250YWluZWQsIGRvZXMgbm90IHJlbHkgb24KKyMjIGhlbHAgYW4gZXh0ZXJuYWwgQyBsaWJyYXJ5LCBhbmQgcHJvdmlkZXMgYWxsIHRoZSBuZWNlc3NhcnkgYml0cy4KKyMjIGhlbHAKKyMjIGhlbHAgTW9zdCBwcm9iYWJseSB1c2VmdWxsIHRvIGJvb3Rsb2FkZXJzLCBhcyB0aGV5IGdlbmVyYWxseSBkb24ndCBkZXBlbmQKKyMjIGhlbHAgb24gdGhlIEMgbGlicmFyeS4KKyMjIGhlbHAKKyMjIGhlbHAgSWYgdW5zdXJlOiBkbyAqbm90KiBjaG9vc2UgdGhhdCwgYW5kIHVzZSBhbm90aGVyIG9wdGlvbiBpbiB0aGUgY2hvaWNlLgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvbGliYy91Q2xpYmMuaW4gYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9saWJjL3VDbGliYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Njg3ZWI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvbGliYy91Q2xpYmMuaW4KQEAgLTAsMCArMSwxNjkgQEAKKyMgdUNsaWJjIG9wdGlvbnMKKworIyMgZGVwZW5kcyBvbiAhIE1JTkdXMzIgJiYgISBCQVJFX01FVEFMCisjIworIyMgc2VsZWN0IExJQkNfU1VQUE9SVF9MSU5VWFRIUkVBRFMKKyMjIHNlbGVjdCBMSUJDX1NVUFBPUlRfVEhSRUFEU19OT05FCisjIworIyMgaGVscCBUaGUgZGUtZmFjdG8gc3RhbmRhcmQgZm9yIGVtYmVkZWQgbGludXggc3lzdGVtcy4KKyMjIGhlbHAKKyMjIGhlbHAgSGlnaGx5IGNvbmZpZ3VyYWJsZSwgdGh1cyBhcyBmZWF0dXJlLXJpY2ggYXMgeW91CisjIyBoZWxwIG5lZWQsIHdpdGhvdXQgY29tcHJvbWlzaW5nIGZvciBzaXplLgorCitjaG9pY2UKKyAgICBib29sCisgICAgcHJvbXB0ICJ1Q2xpYmMgdmVyc2lvbiIKKyMgRG9uJ3QgcmVtb3ZlIG5leHQgbGluZQorIyBDVF9JTlNFUlRfVkVSU0lPTl9CRUxPVworCitjb25maWcgTElCQ19VQ0xJQkNfVl8wXzlfMzIKKyAgICBib29sCisgICAgcHJvbXB0ICIwLjkuMzIiCisgICAgc2VsZWN0IExJQkNfVUNMSUJDXzBfOV8zMl9vcl9sYXRlcgorCitjb25maWcgTElCQ19VQ0xJQkNfVl8wXzlfMzEKKyAgICBib29sCisgICAgcHJvbXB0ICIwLjkuMzEgKEVYUEVSSU1FTlRBTCkiCisgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKyAgICBzZWxlY3QgTElCQ19VQ0xJQkNfMF85XzMwX29yX2xhdGVyCisKK2NvbmZpZyBMSUJDX1VDTElCQ19WXzBfOV8zMF8zCisgICAgYm9vbAorICAgIHByb21wdCAiMC45LjMwLjMiCisgICAgc2VsZWN0IExJQkNfVUNMSUJDXzBfOV8zMF9vcl9sYXRlcgorCitjb25maWcgTElCQ19VQ0xJQkNfVl8wXzlfMzBfMgorICAgIGJvb2wKKyAgICBwcm9tcHQgIjAuOS4zMC4yIgorICAgIHNlbGVjdCBMSUJDX1VDTElCQ18wXzlfMzBfb3JfbGF0ZXIKKworY29uZmlnIExJQkNfVUNMSUJDX1ZfMF85XzMwXzEKKyAgICBib29sCisgICAgcHJvbXB0ICIwLjkuMzAuMSIKKyAgICBzZWxlY3QgTElCQ19VQ0xJQkNfMF85XzMwX29yX2xhdGVyCisKK2NvbmZpZyBMSUJDX1VDTElCQ19WXzBfOV8zMAorICAgIGJvb2wKKyAgICBwcm9tcHQgIjAuOS4zMCIKKyAgICBzZWxlY3QgTElCQ19VQ0xJQkNfMF85XzMwX29yX2xhdGVyCisKK2NvbmZpZyBMSUJDX1VDTElCQ19WXzBfOV8yOQorICAgIGJvb2wKKyAgICBwcm9tcHQgIjAuOS4yOSAoT0JTT0xFVEUpIgorICAgIGRlcGVuZHMgb24gT0JTT0xFVEUKKworY29uZmlnIExJQkNfVUNMSUJDX1ZfMF85XzI4XzMKKyAgICBib29sCisgICAgcHJvbXB0ICIwLjkuMjguMyAoT0JTT0xFVEUpIgorICAgIGRlcGVuZHMgb24gT0JTT0xFVEUKKworIyBBcyBvZiB0b2RheSAoMjAxMDA3MDIpIHdlIGNhbiBiZSBwcmV0dHkgc3VyZSB0aGF0IGV2ZXJ5CisjIHNuYXBzaG90cyBtYWRlIHNpbmNlIGEgbW9udGggYWdvIGFyZSBwb3N0IC0wLjkuMzAuCisKK2NvbmZpZyBMSUJDX1VDTElCQ19WX3NuYXBzaG90CisgICAgYm9vbAorICAgIHByb21wdCAibGF0ZXN0IHNuYXBzaG90IChFWFBFUklNRU5UQUwpIgorICAgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisgICAgc2VsZWN0IExJQkNfU1VQUE9SVF9OUFRMCisgICAgc2VsZWN0IExJQkNfVUNMSUJDXzBfOV8zMF9vcl9sYXRlcgorCitjb25maWcgTElCQ19VQ0xJQkNfVl9zcGVjaWZpY19kYXRlCisgICAgYm9vbAorICAgIHByb21wdCAiPHNwZWNpZmljIGRhdGU+IChFWFBFUklNRU5UQUwpIgorICAgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisgICAgc2VsZWN0IExJQkNfU1VQUE9SVF9OUFRMCisgICAgc2VsZWN0IExJQkNfVUNMSUJDXzBfOV8zMF9vcl9sYXRlcgorCitlbmRjaG9pY2UKKworY29uZmlnIExJQkNfVkVSU0lPTgorICAgIHN0cmluZworICAgIHByb21wdCAiRW50ZXIgZGF0ZSAoWVlZWU1NREQpIiBpZiBMSUJDX1VDTElCQ19WX3NwZWNpZmljX2RhdGUKKyMgRG9uJ3QgcmVtb3ZlIG5leHQgbGluZQorIyBDVF9JTlNFUlRfVkVSU0lPTl9TVFJJTkdfQkVMT1cKKyAgICBkZWZhdWx0ICIwLjkuMzIiIGlmIExJQkNfVUNMSUJDX1ZfMF85XzMyCisgICAgZGVmYXVsdCAiMC45LjMxIiBpZiBMSUJDX1VDTElCQ19WXzBfOV8zMQorICAgIGRlZmF1bHQgIjAuOS4zMC4zIiBpZiBMSUJDX1VDTElCQ19WXzBfOV8zMF8zCisgICAgZGVmYXVsdCAiMC45LjMwLjIiIGlmIExJQkNfVUNMSUJDX1ZfMF85XzMwXzIKKyAgICBkZWZhdWx0ICIwLjkuMzAuMSIgaWYgTElCQ19VQ0xJQkNfVl8wXzlfMzBfMQorICAgIGRlZmF1bHQgIjAuOS4zMCIgaWYgTElCQ19VQ0xJQkNfVl8wXzlfMzAKKyAgICBkZWZhdWx0ICIwLjkuMjkiIGlmIExJQkNfVUNMSUJDX1ZfMF85XzI5CisgICAgZGVmYXVsdCAiMC45LjI4LjMiIGlmIExJQkNfVUNMSUJDX1ZfMF85XzI4XzMKKyAgICBkZWZhdWx0ICJzbmFwc2hvdCIgaWYgTElCQ19VQ0xJQkNfVl9zbmFwc2hvdAorCitjb25maWcgTElCQ19VQ0xJQkNfMF85XzMyX29yX2xhdGVyCisgICAgYm9vbAorICAgIHNlbGVjdCBMSUJDX1NVUFBPUlRfTlBUTAorICAgIHNlbGVjdCBMSUJDX1VDTElCQ18wXzlfMzBfb3JfbGF0ZXIKKworY29uZmlnIExJQkNfVUNMSUJDXzBfOV8zMF9vcl9sYXRlcgorICAgIGJvb2wKKyAgICBzZWxlY3QgTElCQ19VQ0xJQkNfUEFSQUxMRUwKKworY29uZmlnIExJQkNfVUNMSUJDX1BBUkFMTEVMCisgICAgYm9vbAorCitjaG9pY2UKKyAgICBib29sCisgICAgcHJvbXB0ICJ1Q2xpYmMgdmVyYm9zaXR5OiIKKyAgICBkZWZhdWx0IExJQkNfVUNMSUJDX1ZFUkJPU0lUWV8wCisKK2NvbmZpZyBMSUJDX1VDTElCQ19WRVJCT1NJVFlfMAorICAgIGJvb2wKKyAgICBwcm9tcHQgIlF1aWV0IGJ1aWxkIgorICAgIGhlbHAKKyAgICAgIFByaW50IHRlcnNlIGNvbW1hbmQgaW5kaWNhdGlvbnMuCisKK2NvbmZpZyBMSUJDX1VDTElCQ19WRVJCT1NJVFlfMQorICAgIGJvb2wKKyAgICBwcm9tcHQgIkJyaWVmIGJ1aWxkIChzaG93IGRlZmluZXMsIGxkIGZsYWdzKSIKKyAgICBoZWxwCisgICAgICBQcmludCBzaW1wbGlmaWVkIGNvbW1hbmQgbGluZXMuCisKK2NvbmZpZyBMSUJDX1VDTElCQ19WRVJCT1NJVFlfMgorICAgIGJvb2wKKyAgICBwcm9tcHQgIlZlcnkgdmVyYm9zZSBidWlsZCIKKyAgICBoZWxwCisgICAgICBQcmludCBmdWxsIGNvbW1hbmQgbGluZXMuCisKK2VuZGNob2ljZQorCitjb25maWcgTElCQ19VQ0xJQkNfVkVSQk9TSVRZCisgICAgc3RyaW5nCisgICAgZGVmYXVsdCAiIiAgICAgIGlmIExJQkNfVUNMSUJDX1ZFUkJPU0lUWV8wCisgICAgZGVmYXVsdCAiVj0xIiAgIGlmIExJQkNfVUNMSUJDX1ZFUkJPU0lUWV8xCisgICAgZGVmYXVsdCAiVj0yIiAgIGlmIExJQkNfVUNMSUJDX1ZFUkJPU0lUWV8yCisKK2Nob2ljZQorICAgIGJvb2wKKyAgICBwcm9tcHQgIkRlYnVnIGxldmVsIgorICAgIGRlZmF1bHQgTElCQ19VQ0xJQkNfREVCVUdfTEVWRUxfMAorCitjb25maWcgTElCQ19VQ0xJQkNfREVCVUdfTEVWRUxfMAorICAgIGJvb2wKKyAgICBwcm9tcHQgIm5vbmUiCisKK2NvbmZpZyBMSUJDX1VDTElCQ19ERUJVR19MRVZFTF8xCisgICAgYm9vbAorICAgIHByb21wdCAibWluaW1hbCIKKworY29uZmlnIExJQkNfVUNMSUJDX0RFQlVHX0xFVkVMXzIKKyAgICBib29sCisgICAgcHJvbXB0ICJhbGwiCisKK2VuZGNob2ljZQorCitjb25maWcgTElCQ19VQ0xJQkNfREVCVUdfTEVWRUwKKyAgICBpbnQKKyAgICBkZWZhdWx0IDAgaWYgTElCQ19VQ0xJQkNfREVCVUdfTEVWRUxfMAorICAgIGRlZmF1bHQgMSBpZiBMSUJDX1VDTElCQ19ERUJVR19MRVZFTF8xCisgICAgZGVmYXVsdCAyIGlmIExJQkNfVUNMSUJDX0RFQlVHX0xFVkVMXzIKKworY29uZmlnIExJQkNfVUNMSUJDX0NPTkZJR19GSUxFCisgICAgc3RyaW5nCisgICAgcHJvbXB0ICJDb25maWd1cmF0aW9uIGZpbGUiCisgICAgZGVmYXVsdCAiIgorICAgIGhlbHAKKyAgICAgIFBhdGggdG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgIAorICAgICAgWW91IF9tdXN0XyBwcm92aWRlIG9uZSAoZm9yIG5vdykuCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2NvbmZpZy9saWJjL3VDbGliYy5pbi4yIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvbGliYy91Q2xpYmMuaW4uMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjc2OWU3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvbGliYy91Q2xpYmMuaW4uMgpAQCAtMCwwICsxLDY3IEBACisjIHVDbGliYyBzZWNvbmQtcGFydCBvcHRpb24KKworaWYgVEhSRUFEU19MSU5VWFRIUkVBRFMKKworY2hvaWNlCisgICAgYm9vbAorICAgIHByb21wdCAiTGludXh0aHJlYWQgaW1wbGVtZW50YXRpb246ICIKKyAgICBkZWZhdWx0IExJQkNfVUNMSUJDX0xOWFRIUkRfT0xECisKK2NvbmZpZyBMSUJDX1VDTElCQ19MTlhUSFJEX09MRAorICAgIGJvb2wKKyAgICBwcm9tcHQgIm9sZC9zdGFibGUiCisgICAgaGVscAorICAgICAgRnJvbSB0aGUgdUNsaWJjIGNvbmZpZyBvcHRpb24gaGVscDoKKyAgICAgICAgVGhlcmUgYXJlIHR3byB2ZXJzaW9ucyBvZiBsaW51eHRocmVhZHMuICBUaGUgb2xkZXIgKHN0YWJsZSkgdmVyc2lvbgorICAgICAgICBoYXMgYmVlbiBpbiB1Q2xpYmMgZm9yIHF1aXRlIGEgbG9uZyB0aW1lIGJ1dCBoYXNuJ3Qgc2VlbiB0b28gbWFueQorICAgICAgICB1cGRhdGVzIG90aGVyIHRoYW4gYnVnZml4ZXMuCisKK2NvbmZpZyBMSUJDX1VDTElCQ19MTlhUSFJEX05FVworICAgIGJvb2wKKyAgICBwcm9tcHQgIm5ldyIKKyAgICBoZWxwCisgICAgICBGcm9tIHRoZSB1Q2xpYmMgY29uZmlnIG9wdGlvbiBoZWxwOgorICAgICAgICBUaGUgbmV3IHZlcnNpb24gaGFzIG5vdCBiZWVuIHRlc3RlZCBtdWNoLCBhbmQgbGFja3MgcG9ydHMgZm9yIGFyY2hlcworICAgICAgICB3aGljaCBnbGliYyBkb2VzIG5vdCBzdXBwb3J0IChsaWtlIGJmaW4vZnJ2L2V0Yy4uLiksIGJ1dCBpcyBiYXNlZCBvbgorICAgICAgICB0aGUgbGF0ZXN0IGNvZGUgZnJvbSBnbGliYywgc28gaXQgbWF5IGJlIHRoZSBvbmx5IGNob2ljZSBmb3IgdGhlCisgICAgICAgIG5ld2VyIHBvcnRzIChsaWtlIGFscGhhL2FtZDY0LzY0Yml0IGFyY2hlcyBhbmQgaHBwYSkuCisKK2VuZGNob2ljZQorCitlbmRpZiAjIFRIUkVBRFNfTElOVVhUSFJFQURTCisKK2NvbmZpZyBMSUJDX1VDTElCQ19MTlhUSFJECisgICAgc3RyaW5nCisgICAgZGVmYXVsdCAiIiAgICAgIGlmIFRIUkVBRFNfTk9ORQorICAgIGRlZmF1bHQgIiIgICAgICBpZiBUSFJFQURTX05QVEwKKyAgICBkZWZhdWx0ICJvbGQiICAgaWYgTElCQ19VQ0xJQkNfTE5YVEhSRF9PTEQKKyAgICBkZWZhdWx0ICJuZXciICAgaWYgTElCQ19VQ0xJQkNfTE5YVEhSRF9ORVcKKworY29uZmlnIExJQkNfVUNMSUJDX0xPQ0FMRVMKKyAgICBib29sCisgICAgc2VsZWN0IExJQkNfVUNMSUJDX1dDSEFSCisgICAgcHJvbXB0ICJBZGQgc3VwcG9ydCBmb3IgbG9jYWxlcyIKKyAgICBoZWxwCisgICAgICBTYXkgeSBpZiB5b3Ugd2FudCB1Q2xpYmMgdG8gc3VwcG9ydCBsb2NhbGlzYXRpb24uCisKKyAgICAgIE5vdGUgdGhhdCBzZWVtcyB0byBiZSBicm9rZW4gb24gcmVjZW50IHVDbGliYyByZWxlYXNlcy4KKworY29uZmlnIExJQkNfVUNMSUJDX0xPQ0FMRVNfUFJFR0VOX0RBVEEKKyAgICBib29sCisgICAgcHJvbXB0ICJVc2UgcHJlZ2VuIGxvY2FsZXMiCisgICAgZGVwZW5kcyBvbiBMSUJDX1VDTElCQ19MT0NBTEVTCisgICAgZGVmYXVsdCB5CisgICAgaGVscAorICAgICAgSWYgeW91IHNlZSBpc3N1ZXMgd2l0aCB1c2luZyBwcmUtZ2VuZXJhdGVkIGxvY2FsZXMgZGF0YSwKKyAgICAgIHlvdSBjYW4gdHJ5IHN3aXRjaGluZyB0aGlzIG9mZi4KKworICAgICAgSWYgc28sIHBsZWFzZSByZXBvcnQgdGhlIGlzc3VlLCBzbyB3ZSBjYW4gZGVmYXVsdCB0aGlzCisgICAgICB0byBvZmYgaWYgdG9vIG1hbnkgcGVvcGxlIGNvbXBsYWluLgorCitjb25maWcgTElCQ19VQ0xJQkNfV0NIQVIKKyAgICBib29sCisgICAgcHJvbXB0ICJBZGQgc3VwcG9ydCBmb3IgV0NIQVIiCisgICAgaGVscAorICAgICAgU2F5IHkgaWYgeW91IHdhbnQgdUNsaWJjIHRvIHN1cHBvcnQgV0NIQVIuCisKKyAgICAgIE1heWJlIHRoaXMgaXMgbmVlZGVkLCBpZiB5b3UncmUgYnVpbGRpbmcgYSBDKystQ29tcGlsZXIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL3RhcmdldC5pbiBiL2xpYi9jdC1uZy0xLjEzLjQvY29uZmlnL3RhcmdldC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjgyYTlkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvdGFyZ2V0LmluCkBAIC0wLDAgKzEsMzAxIEBACisjIFRhcmdldCBkZWZpbml0aW9uOiBhcmNoaXRlY3R1cmUsIG9wdGltaXNhdGlvbnMsIGV0Yy4uLgorCittZW51ICJUYXJnZXQgb3B0aW9ucyIKKworY29uZmlnIEFSQ0gKKyAgICBzdHJpbmcKKworIyBQcmUtZGVjbGFyZSB0YXJnZXQgb3B0aW1pc2F0aW9uIHZhcmlhYmxlcworY29uZmlnIEFSQ0hfU1VQUE9SVFNfQk9USF9NTVUKK2NvbmZpZyBBUkNIX1NVUFBPUlRTX0JPVEhfRU5ESUFOCitjb25maWcgQVJDSF9TVVBQT1JUU18zMgorY29uZmlnIEFSQ0hfU1VQUE9SVFNfNjQKK2NvbmZpZyBBUkNIX1NVUFBPUlRfQVJDSAorY29uZmlnIEFSQ0hfU1VQUE9SVF9BQkkKK2NvbmZpZyBBUkNIX1NVUFBPUlRfQ1BVCitjb25maWcgQVJDSF9TVVBQT1JUX1RVTkUKK2NvbmZpZyBBUkNIX1NVUFBPUlRfRlBVCisKK2NvbmZpZyBBUkNIX0RFRkFVTFRfSEFTX01NVQorY29uZmlnIEFSQ0hfREVGQVVMVF9CRQorY29uZmlnIEFSQ0hfREVGQVVMVF9MRQorY29uZmlnIEFSQ0hfREVGQVVMVF8zMgorY29uZmlnIEFSQ0hfREVGQVVMVF82NAorCitjb25maWcgQVJDSF9BUkNICitjb25maWcgQVJDSF9BQkkKK2NvbmZpZyBBUkNIX0NQVQorY29uZmlnIEFSQ0hfVFVORQorY29uZmlnIEFSQ0hfRlBVCitjb25maWcgQVJDSF9CRQorY29uZmlnIEFSQ0hfTEUKK2NvbmZpZyBBUkNIXzMyCitjb25maWcgQVJDSF82NAorY29uZmlnIEFSQ0hfQklUTkVTUworY29uZmlnIEFSQ0hfRkxPQVRfSFcKK2NvbmZpZyBBUkNIX0ZMT0FUX1NXCitjb25maWcgVEFSR0VUX0NGTEFHUworY29uZmlnIFRBUkdFVF9MREZMQUdTCisKK3NvdXJjZSAiY29uZmlnLmdlbi9hcmNoLmluIgorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NvbW1lbnQgIkdlbmVyaWMgdGFyZ2V0IG9wdGlvbnMiCisKK2NvbmZpZyBBUkNIX1NVUFBPUlRTX0JPVEhfTU1VCisgICAgYm9vbAorCitjb25maWcgQVJDSF9ERUZBVUxUX0hBU19NTVUKKyAgICBib29sCisKK2NvbmZpZyBBUkNIX1VTRV9NTVUKKyAgICBib29sCisgICAgcHJvbXB0ICJVc2UgdGhlIE1NVSIgaWYgQVJDSF9TVVBQT1JUU19CT1RIX01NVQorICAgIGRlZmF1bHQgeSBpZiBBUkNIX0RFRkFVTFRfSEFTX01NVQorICAgIGhlbHAKKyAgICAgIElmIHlvdXIgYXJjaGl0ZWN0dXJlIGhhcyBhbiBNTVUgYW5kIHlvdSB3YW50IHRvIHVzZSBpdCwKKyAgICAgIHNheSAnWScgaGVyZS4KKyAgICAgIAorICAgICAgT1RPSCwgaWYgeW91IGRvbid0IHdhbnQgdG8gdXNlIHRoZSBNTVUsIG9yIHlvdXIgYXJjaAorICAgICAgbGFja3MgYW4gTU1VLCBzYXkgJ04nIGhlcmUuCisgICAgICAKKyAgICAgIE5vdGUgdGhhdCBzb21lIGFyY2hpdGVjdHVyZXMgKGVnLiBBUk0pIGhhcyB2YXJpYW50cyB0aGF0CisgICAgICBsYWNrcyBhbiBNTVUgKGVnLiBBUk0gQ29ydGV4LU0zKSwgd2hpbGUgb3RoZXIgdmFyaWFudHMKKyAgICAgIGhhdmUgb25lIChlZy4gQVJNIENvcnRleC1BOCkuCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorY29uZmlnIEFSQ0hfU1VQUE9SVFNfQk9USF9FTkRJQU4KKyAgICBib29sCisKK2NvbmZpZyBBUkNIX0RFRkFVTFRfQkUKKyAgICBib29sCisKK2NvbmZpZyBBUkNIX0RFRkFVTFRfTEUKKyAgICBib29sCisKK2Nob2ljZQorICAgIGJvb2wKKyAgICBwcm9tcHQgIkVuZGlhbm5lc3M6IgorICAgIGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19CT1RIX0VORElBTgorICAgIGRlZmF1bHQgQVJDSF9CRSBpZiBBUkNIX0RFRkFVTFRfQkUKKyAgICBkZWZhdWx0IEFSQ0hfTEUgaWYgQVJDSF9ERUZBVUxUX0xFCisKK2NvbmZpZyBBUkNIX0JFCisgICAgYm9vbAorICAgIHByb21wdCAiQmlnIGVuZGlhbiIKKworY29uZmlnIEFSQ0hfTEUKKyAgICBib29sCisgICAgcHJvbXB0ICJMaXR0bGUgZW5kaWFuIgorCitlbmRjaG9pY2UKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitjb25maWcgQVJDSF9TVVBQT1JUU18zMgorICAgIGJvb2wKKworY29uZmlnIEFSQ0hfU1VQUE9SVFNfNjQKKyAgICBib29sCisKK2NvbmZpZyBBUkNIX0RFRkFVTFRfMzIKKyAgICBib29sCisKK2NvbmZpZyBBUkNIX0RFRkFVTFRfNjQKKyAgICBib29sCisKK2NvbmZpZyBBUkNIX0JJVE5FU1MKKyAgICBpbnQKKyAgICBkZWZhdWx0ICIzMiIgICAgaWYgQVJDSF8zMgorICAgIGRlZmF1bHQgIjY0IiAgICBpZiBBUkNIXzY0CisKK2Nob2ljZQorICAgIGJvb2wKKyAgICBwcm9tcHQgIkJpdG5lc3M6IgorICAgIGRlZmF1bHQgQVJDSF8zMiBpZiBBUkNIX0RFRkFVTFRfMzIKKyAgICBkZWZhdWx0IEFSQ0hfNjQgaWYgQVJDSF9ERUZBVUxUXzY0CisKK2NvbmZpZyBBUkNIXzMyCisgICAgYm9vbAorICAgIHByb21wdCAiMzItYml0IgorICAgIGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU18zMgorCitjb25maWcgQVJDSF82NAorICAgIGJvb2wKKyAgICBwcm9tcHQgIjY0LWJpdCIKKyAgICBkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfNjQKKworZW5kY2hvaWNlCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorY29tbWVudCAiVGFyZ2V0IG9wdGltaXNhdGlvbnMiCisKK2NvbmZpZyBBUkNIX1NVUFBPUlRfQVJDSAorICAgIGJvb2wKKworY29uZmlnIEFSQ0hfU1VQUE9SVF9BQkkKKyAgICBib29sCisKK2NvbmZpZyBBUkNIX1NVUFBPUlRfQ1BVCisgICAgYm9vbAorCitjb25maWcgQVJDSF9TVVBQT1JUX1RVTkUKKyAgICBib29sCisKK2NvbmZpZyBBUkNIX1NVUFBPUlRfRlBVCisgICAgYm9vbAorCitjb25maWcgQVJDSF9BUkNICisgICAgc3RyaW5nCisgICAgcHJvbXB0ICJBcmNoaXRlY3R1cmUgbGV2ZWwiCisgICAgZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRfQVJDSAorICAgIGRlZmF1bHQgIiIKKyAgICBoZWxwCisgICAgICBHQ0MgdXNlcyB0aGlzIG5hbWUgdG8gZGV0ZXJtaW5lIHdoYXQga2luZCBvZiBpbnN0cnVjdGlvbnMgaXQgY2FuIGVtaXQKKyAgICAgIHdoZW4gZ2VuZXJhdGluZyBhc3NlbWJseSBjb2RlLiBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBpbiBjb25qdW5jdGlvbgorICAgICAgd2l0aCBvciBpbnN0ZWFkIG9mIHRoZSBBUkNIX0NQVSBvcHRpb24gKGFib3ZlKSwgb3IgYSAoY29tbWFuZC1saW5lKQorICAgICAgLW1jcHU9IG9wdGlvbi4KKyAgICAgIAorICAgICAgVGhpcyBpcyB0aGUgY29uZmlndXJhdGlvbiBmbGFnIC0td2l0aC1hcmNoPVhYWFgsIGFuZCB0aGUgcnVudGltZSBmbGFnCisgICAgICAtbWFyY2g9WFhYLgorICAgICAgCisgICAgICBQaWNrIGEgdmFsdWUgZnJvbSB0aGUgZ2NjIG1hbnVhbCBmb3IgeW91ciBjaG9vc2VuIGdjYyB2ZXJzaW9uIGFuZCB5b3VyCisgICAgICB0YXJnZXQgQ1BVLgorICAgICAgCisgICAgICBMZWF2ZSBibGFuayBpZiB5b3UgZG9uJ3Qga25vdywgb3IgaWYgeW91ciB0YXJnZXQgYXJjaGl0ZWN0dXJlIGRvZXMgbm90CisgICAgICBvZmZlciB0aGlzIG9wdGlvbi4KKworY29uZmlnIEFSQ0hfQUJJCisgICAgc3RyaW5nCisgICAgcHJvbXB0ICJHZW5lcmF0ZSBjb2RlIGZvciB0aGUgc3BlY2lmaWMgQUJJIgorICAgIGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUX0FCSQorICAgIGRlZmF1bHQgIiIKKyAgICBoZWxwCisgICAgICBHZW5lcmF0ZSBjb2RlIGZvciB0aGUgZ2l2ZW4gQUJJLgorCisgICAgICBUaGlzIGlzIHRoZSBjb25maWd1cmF0aW9uIGZsYWcgLS13aXRoLWFiaT1YWFhYLCBhbmQgdGhlIHJ1bnRpbWUgZmxhZworICAgICAgLW1hYmk9WFhYLgorCisgICAgICBQaWNrIGEgdmFsdWUgZnJvbSB0aGUgZ2NjIG1hbnVhbCBmb3IgeW91ciBjaG9vc2VuIGdjYyB2ZXJzaW9uIGFuZCB5b3VyCisgICAgICB0YXJnZXQgQ1BVLgorCisgICAgICBMZWF2ZSBibGFuayBpZiB5b3UgZG9uJ3Qga25vdywgb3IgaWYgeW91ciB0YXJnZXQgYXJjaGl0ZWN0dXJlIGRvZXMgbm90CisgICAgICBvZmZlciB0aGlzIG9wdGlvbi4KKworY29uZmlnIEFSQ0hfQ1BVCisgICAgc3RyaW5nCisgICAgcHJvbXB0ICJFbWl0IGFzc2VtYmx5IGZvciBDUFUiCisgICAgZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRfQ1BVCisgICAgZGVmYXVsdCAiIgorICAgIGhlbHAKKyAgICAgIFRoaXMgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgcHJvY2Vzc29yLiBHQ0MgdXNlcyB0aGlzIG5hbWUKKyAgICAgIHRvIGRldGVybWluZSB3aGF0IGtpbmQgb2YgaW5zdHJ1Y3Rpb25zIGl0IGNhbiBlbWl0IHdoZW4gZ2VuZXJhdGluZworICAgICAgYXNzZW1ibHkgY29kZS4KKyAgICAgIAorICAgICAgVGhpcyBpcyB0aGUgY29uZmlndXJhdGlvbiBmbGFnIC0td2l0aC1jcHU9WFhYWCwgYW5kIHRoZSBydW50aW1lIGZsYWcKKyAgICAgIC1tY3B1PVhYWC4KKworICAgICAgUGljayBhIHZhbHVlIGZyb20gdGhlIGdjYyBtYW51YWwgZm9yIHlvdXIgY2hvb3NlbiBnY2MgdmVyc2lvbiBhbmQgeW91cgorICAgICAgdGFyZ2V0IENQVS4KKyAgICAgIAorICAgICAgTGVhdmUgYmxhbmsgaWYgeW91IGRvbid0IGtub3csIG9yIGlmIHlvdXIgdGFyZ2V0IGFyY2hpdGVjdHVyZSBkb2VzIG5vdAorICAgICAgb2ZmZXIgdGhpcyBvcHRpb24uCisKK2NvbmZpZyBBUkNIX1RVTkUKKyAgICBzdHJpbmcKKyAgICBwcm9tcHQgIlR1bmUgZm9yIENQVSIKKyAgICBkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVF9UVU5FCisgICAgZGVmYXVsdCAiIgorICAgIGhlbHAKKyAgICAgIFRoaXMgb3B0aW9uIGlzIHZlcnkgc2ltaWxhciB0byB0aGUgQVJDSF9DUFUgb3B0aW9uIChhYm92ZSksIGV4Y2VwdAorICAgICAgdGhhdCBpbnN0ZWFkIG9mIHNwZWNpZnlpbmcgdGhlIGFjdHVhbCB0YXJnZXQgcHJvY2Vzc29yIHR5cGUsIGFuZCBoZW5jZQorICAgICAgcmVzdHJpY3Rpbmcgd2hpY2ggaW5zdHJ1Y3Rpb25zIGNhbiBiZSB1c2VkLCBpdCBzcGVjaWZpZXMgdGhhdCBHQ0Mgc2hvdWxkCisgICAgICB0dW5lIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgY29kZSBhcyBpZiB0aGUgdGFyZ2V0IHdlcmUgb2YgdGhlIHR5cGUKKyAgICAgIHNwZWNpZmllZCBpbiB0aGlzIG9wdGlvbiwgYnV0IHN0aWxsIGNob29zaW5nIHRoZSBpbnN0cnVjdGlvbnMgdGhhdCBpdAorICAgICAgd2lsbCBnZW5lcmF0ZSBiYXNlZCBvbiB0aGUgY3B1IHNwZWNpZmllZCBieSB0aGUgQVJDSF9DUFUgb3B0aW9uCisgICAgICAoYWJvdmUpLCBvciBhIChjb21tYW5kLWxpbmUpIC1tY3B1PSBvcHRpb24uCisgICAgICAKKyAgICAgIFRoaXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24gZmxhZyAtLXdpdGgtdHVuZT1YWFhYLCBhbmQgdGhlIHJ1bnRpbWUgZmxhZworICAgICAgLW10dW5lPVhYWC4KKyAgICAgIAorICAgICAgUGljayBhIHZhbHVlIGZyb20gdGhlIGdjYyBtYW51YWwgZm9yIHlvdXIgY2hvb3NlbiBnY2MgdmVyc2lvbiBhbmQgeW91cgorICAgICAgdGFyZ2V0IENQVS4KKyAgICAgIAorICAgICAgTGVhdmUgYmxhbmsgaWYgeW91IGRvbid0IGtub3csIG9yIGlmIHlvdXIgdGFyZ2V0IGFyY2hpdGVjdHVyZSBkb2VzIG5vdAorICAgICAgb2ZmZXIgdGhpcyBvcHRpb24uCisKK2NvbmZpZyBBUkNIX0ZQVQorICAgIHN0cmluZworICAgIHByb21wdCAiVXNlIHNwZWNpZmljIEZQVSIKKyAgICBkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVF9GUFUKKyAgICBkZWZhdWx0ICIiCisgICAgaGVscAorICAgICAgT24gc29tZSB0YXJnZXRzIChlZy4gQVJNKSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBraW5kIG9mIEZQVSB0byBlbWl0CisgICAgICBjb2RlIGZvci4KKworICAgICAgVGhpcyBpcyB0aGUgY29uZmlndXJhdGlvbiBmbGFnIC0td2l0aC1mcHU9WFhYLCBhbmQgdGhlIHJ1bnRpbWUgZmxhZworICAgICAgLW1mcHU9WFhYLgorICAgICAgCisgICAgICBTZWUgYmVsb3cgd2V0aGVyIHRvIGFjdHVhbGx5IGVtaXQgRlAgb3Bjb2Rlcywgb3IgdG8gZW11bGF0ZSB0aGVtLgorICAgICAgCisgICAgICBQaWNrIGEgdmFsdWUgZnJvbSB0aGUgZ2NjIG1hbnVhbCBmb3IgeW91ciBjaG9vc2VuIGdjYyB2ZXJzaW9uIGFuZCB5b3VyCisgICAgICB0YXJnZXQgQ1BVLgorICAgICAgCisgICAgICBMZWF2ZSBibGFuayBpZiB5b3UgZG9uJ3Qga25vdywgb3IgaWYgeW91ciB0YXJnZXQgYXJjaGl0ZWN0dXJlIGRvZXMgbm90CisgICAgICBvZmZlciB0aGlzIG9wdGlvbi4KKworY2hvaWNlCisgICAgYm9vbAorICAgIHByb21wdCAiRmxvYXRpbmcgcG9pbnQ6IgorCitjb25maWcgQVJDSF9GTE9BVF9IVworICAgIGJvb2wKKyAgICBwcm9tcHQgImhhcmR3YXJlIChGUFUpIgorICAgIGhlbHAKKyAgICAgIEVtaXQgaGFyZHdhcmUgZmxvYXRpbmcgcG9pbnQgb3Bjb2Rlcy4KKyAgICAgIAorICAgICAgSWYgeW91J3ZlIGdvdCBhIHByb2Nlc3NvciB3aXRoIGEgRlBVLCB0aGVuIHlvdSB3YW50IHRoYXQuCisgICAgICBJZiB5b3VyIGhhcmR3YXJlIGhhcyBubyBGUFUsIHlvdSBzdGlsbCBjYW4gdXNlIEhXIGZsb2F0aW5nIHBvaW50LCBidXQKKyAgICAgIG5lZWQgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBGUFUgZW11bGF0aW9uIGluIHlvdXIga2VybmVsLiBOZWVkbGVzcyB0bworICAgICAgc2F5IHRoYXQgZW11bGF0aW5nIHRoZSBGUFUgaXMgL3Nsb29vd3d3d3cvLi4uCisgICAgICAKKyAgICAgIE9uZSBzaXR1YXRpb24geW91J2Qgd2FudCBIVyBmbG9hdGluZyBwb2ludCB3aXRob3V0IGEgRlBVIGlzIGlmIHlvdSBnZXQKKyAgICAgIGJpbmFyeSBibG9icyBmcm9tIGRpZmZlcmVudCB2ZW5kb3JzIHRoYXQgYXJlIGNvbXBpbGluZyB0aGlzIHdheSBhbmQKKyAgICAgIGNhbid0IChkb24ndCB3YW4ndCB0bykgY2hhbmdlLgorCitjb25maWcgQVJDSF9GTE9BVF9TVworICAgIGJvb2wKKyAgICBwcm9tcHQgInNvZnR3YXJlIgorICAgIGhlbHAKKyAgICAgIERvIG5vdCBlbWl0IGFueSBoYXJkd2FyZSBmbG9hdGluZyBwb2ludCBvcGNvZGUuCisgICAgICAKKyAgICAgIElmIHlvdXIgcHJvY2Vzc29yIGhhcyBubyBGUFUsIHRoZW4geW91IG1vc3QgcHJvYmFibHkgd2FudCB0aGlzLCBhcyBpdAorICAgICAgaXMgZmFzdGVyIHRoYW4gZW11bGF0aW5nIHRoZSBGUFUgaW4gdGhlIGtlcm5lbC4KKworZW5kY2hvaWNlCisKK2NvbmZpZyBUQVJHRVRfQ0ZMQUdTCisgICAgc3RyaW5nCisgICAgcHJvbXB0ICJUYXJnZXQgQ0ZMQUdTIgorICAgIGRlZmF1bHQgIiIKKyAgICBoZWxwCisgICAgICBVc2VkIHRvIGFkZCBzcGVjaWZpYyBvcHRpb25zIHdoZW4gY29tcGlsaW5nIGxpYnJhcmllcyBvZiB0aGUgdG9vbGNoYWluLAorICAgICAgdGhhdCB3aWxsIHJ1biBvbiB0aGUgdGFyZ2V0IChlZy4gbGliYy5zbykuCisgICAgICAKKyAgICAgIE5vdGUgdGhhdCB0aGUgb3B0aW9ucyBhYm92ZSBmb3IgQVJDSCwgQUJJLCBDUFUsIFRVTkUgYW5kIEZQVSB3aWxsIGJlCisgICAgICBhdXRvbWF0aWNhbGx5IHVzZWQuIFlvdSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgdGhlbSBoZXJlLgorICAgICAgCisgICAgICBMZWF2ZSBibGFuayBpZiB5b3UgZG9uJ3Qga25vdyBiZXR0ZXIuCisKK2NvbmZpZyBUQVJHRVRfTERGTEFHUworICAgIHN0cmluZworICAgIHByb21wdCAiVGFyZ2V0IExERkxBR1MiCisgICAgZGVmYXVsdCAiIgorICAgIGhlbHAKKyAgICAgIFVzZWQgdG8gYWRkIHNwZWNpZmljIG9wdGlvbnMgd2hlbiBsaW5raW5nIGxpYnJhcmllcyBvZiB0aGUgdG9vbGNoYWluLAorICAgICAgdGhhdCB3aWxsIHJ1biBvbiB5b3VyIHRhcmdldC4KKyAgICAgIAorICAgICAgTGVhdmUgYmxhbmsgaWYgeW91IGRvbid0IGtub3cgYmV0dGVyLgorCitzb3VyY2UgImNvbmZpZy5nZW4vYXJjaC5pbi4yIgorCitlbmRtZW51CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2NvbmZpZy90ZXN0X3N1aXRlLmluIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvdGVzdF9zdWl0ZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGJmNzg0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvdGVzdF9zdWl0ZS5pbgpAQCAtMCwwICsxLDI4IEBACisjIFRlc3Qgc3VpdGUgY29uZmlnIG9wdGlvbnMKKworaWYgRVhQRVJJTUVOVEFMCisKK21lbnUgIlRlc3Qgc3VpdGUiCisKK2NvbmZpZyBURVNUX1NVSVRFCisgICAgYm9vbAorCitjb25maWcgVEVTVF9TVUlURV9HQ0MKKyAgICBib29sCisgICAgcHJvbXB0ICJHQ0MgdGVzdCBzdWl0ZSIKKyAgICBkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorICAgIHNlbGVjdCBURVNUX1NVSVRFCisgICAgaGVscAorICAgICAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGluc3RhbGwgdGhlIEdDQyB0ZXN0IHN1aXRlIGluICRDVF9QUkVGSVhfRElSL3Rlc3Rfc3VpdGUuCisKKyAgICAgIFRoZSBHQ0MgdGVzdCBzdWl0ZSBpbmNsdWRlcyBhIGNvbGxlY3Rpb24gb2YgdmFyaW91cyB0b29sY2hhaW4gdGVzdHMgZm9yIEdDQyAtCisgICAgICBpdCB1dGlsaXplcyB0aGUgRGVqYUdudSB0ZXN0IGZyYW1ld29yay4KKworICAgICAgRm9yIHNvbWUgdGVzdHMgYSBuZXR3b3JrIGVuYWJsZWQgdGFyZ2V0IHdpdGggc3NoIHNlcnZlciBpcyByZXF1aXJlZC4KKworICAgICAgQSBoZWxwZXIgTWFrZWZpbGUgaXMgcHJvdmlkZWQgZm9yIHJ1bm5pbmcgdGhlIHRlc3RzIC0gcGxlYXNlIHNlZSB0aGUgaW5jbHVkZWQKKyAgICAgIFJFQURNRSBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHJ1biB0aGUgdGVzdCBzdWl0ZS4KKworZW5kbWVudQorCitlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvdG9vbGNoYWluLmluIGIvbGliL2N0LW5nLTEuMTMuNC9jb25maWcvdG9vbGNoYWluLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMzQzMTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbmZpZy90b29sY2hhaW4uaW4KQEAgLTAsMCArMSwzNTUgQEAKK21lbnUgIlRvb2xjaGFpbiBvcHRpb25zIgorCitjb21tZW50ICJHZW5lcmFsIHRvb2xjaGFpbiBvcHRpb25zIgorCitjb25maWcgRk9SQ0VfU1lTUk9PVAorICAgIGJvb2wKKyAgICBkZWZhdWx0IHkgaWYgIU9CU09MRVRFCisgICAgc2VsZWN0IFVTRV9TWVNST09UCisKK2NvbmZpZyBVU0VfU1lTUk9PVAorICAgIGJvb2wKKyAgICBwcm9tcHQgIlVzZSBzeXNyb290J2VkIHRvb2xjaGFpbiIKKyAgICBkZWZhdWx0IHkKKyAgICBoZWxwCisgICAgICBVc2UgdGhlICdzaGlubnkgbmV3JyBzeXNyb290IGZlYXR1cmUgb2YgZ2NjOiBsaWJyYXJpZXMgc3BsaXQgYmV0d2VlbgorICAgICAgcHJlZml4L3RhcmdldC9zeXNyb290L2xpYiBhbmQgcHJlZml4L3RhcmdldC9zeXNyb290L3Vzci9saWIKKyAgICAgIAorICAgICAgWW91IGRlZmluaXRlbHkgd2FudCB0byBzYXkgJ1knIGhlcmUuIFllcyB5b3UgZG8uIEkga25vdyB5b3UgZG8uIFNheSAnWScuCisKK2NvbmZpZyBTWVNST09UX05BTUUKKyAgICBzdHJpbmcKKyAgICBwcm9tcHQgInN5c3Jvb3QgZGlyZWN0b3J5IG5hbWUiIGlmICEgQkFDS0VORAorICAgIGRlcGVuZHMgb24gVVNFX1NZU1JPT1QKKyAgICBkZWZhdWx0ICJzeXNyb290IgorICAgIGhlbHAKKyAgICAgIEVudGVyIHRoZSBiYXNlIG5hbWUgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5LiBVc3VhbGx5LCB0aGlzIHNpbXBseQorICAgICAgaXMgJ3N5c3Jvb3QnICh0aGUgZGVmYXVsdCkgb3IgJ3N5cy1yb290Jy4KKyAgICAgIAorICAgICAgWW91IGFyZSBmcmVlIHRvIGVudGVyIGFueXRoaW5nIGhlcmUsIGV4Y2VwdCBmb3Igc3BhY2VzLCBhbmQgJy8nCisgICAgICAoc2VlIFNZU1JPT1RfRElSX1BSRUZJWCwgYmVsb3cpLiBJZiB5b3UgbGVhdmUgdGhpcyBlbXB0eSwgdGhlbiB0aGUKKyAgICAgIGRlZmF1bHQgJ3N5c3Jvb3QnIGlzIHVzZWQuCisKK2NvbmZpZyBTWVNST09UX0RJUl9QUkVGSVgKKyAgICBzdHJpbmcKKyAgICBwcm9tcHQgInN5c3Jvb3QgcHJlZml4IGRpciAoUkVBRCBIRUxQKSIgaWYgISBCQUNLRU5ECisgICAgZGVwZW5kcyBvbiBVU0VfU1lTUk9PVAorICAgIGRlZmF1bHQgIiIKKyAgICBoZWxwCisgICAgICAqCisgICAgICAqIFVubGVzcyB5b3UgcmVhbGx5IGtub3cgeW91IG5lZWQgdGhhdCwgbGVhdmUgaXQgZW1wdHkhCisgICAgICAqCisgICAgICAKKyAgICAgIFRoaXMgc3RyaW5nIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYSBkaXJlY3RvcnkgY29tcG9uZW50IHRvIGJlIGFkZGVkCisgICAgICB0byB0aGUgc3lzcm9vdCBwYXRoLCBqdXN0IGJlZm9yZSB0aGUgYWN0dWFsIHN5c3Jvb3QgZGlyZWN0b3J5LgorICAgICAgCisgICAgICBJbiBmYWN0LCB0aGUgc3lzcm9vdCBwYXRoIGlzIGNvbnN0cnVjdGVkIGFzOgorICAgICAgICAke0NUX1BSRUZJWF9ESVJ9LyR7Q1RfVEFSR0VUfS8ke0NUX1NZU1JPT1RfRElSX1BSRUZJWH0vJHtDVF9TWVNST09UX05BTUV9CisKK2NvbmZpZyBXQU5UU19TVEFUSUNfTElOSworICAgIGJvb2wKKworY29uZmlnIFNUQVRJQ19UT09MQ0hBSU4KKyAgICBib29sCisgICAgcHJvbXB0ICJCdWlsZCBTdGF0aWMgVG9vbGNoYWluIChFWFBFUklNRU5UQUwpIgorICAgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisgICAgc2VsZWN0IFdBTlRTX1NUQVRJQ19MSU5LCisgICAgaGVscAorICAgICAgQnVpbGQgc3RhdGljIGhvc3QgYmluYXJpZXMuCisgICAgICAKKyAgICAgIElmIHlvdSB3aXNoIHRvIG1vdmUgdGhlIHRvb2xjaGFpbiB0byBhbm90aGVyIGhvc3QsIGFuZCB5b3UgYXJlIG5vdAorICAgICAgY29uZmlkZW50IHRoYXQgdGhpcyBob3N0IGhhcyB0aGUgcmVxdWlyZWQgdmVyc2lvbnMgb2Ygc3lzdGVtIGxpYnMsIHRoZW4KKyAgICAgIHlvdSBjYW4gc2F5ICdZJyBoZXJlLCBhbmQgYWxsIHRoZSBob3N0IHRvb2xzIHdpbGwgYmUgbGlua2VkIHN0YXRpY2FsbHkuCisgICAgICAKKyAgICAgIFRoZSBpbXBhY3RlZCB0b29scyBhcmU6CisgICAgICAgIC0gdGhlIGNyb3NzLWJpbnV0aWxzIChHTlUgYmludXRpbHMsIGVsZjJmbHQpCisgICAgICAgIC0gdGhlIGNyb3NzLWNvbXBpbGVyIChnY2MpCisgICAgICAgIC0gdGhlIGNyb3NzLWRlYnVnZ2VyIChnZGIpCisgICAgICAKKyAgICAgIFRoZSBkZWZhdWx0IGlzICdOJywgdG8gYnVpbGQgZHluYW1pY2FseS1saW5rZWQgaG9zdCBiaW5hcmllcy4KKyAgICAgIAorICAgICAgTk9URTogdGhpcyBoYXMgbm8gY29ubmVjdGlvbiB0byB3aGV0aGVyIHRoZSB0YXJnZXQgbGlicmFyaWVzIHdpbGwgYmUKKyAgICAgIGR5bmFtaWMgb3Igc3RhdGljLiBUaGlzIG9ubHkgYXBwbGllcyB0byB0aGUgdG9vbHMgdGhlbXNlbHZlcy4KKworY29uZmlnIFRPT0xDSEFJTl9QS0dWRVJTSU9OCisgICAgc3RyaW5nCisgICAgcHJvbXB0ICJUb29sY2hhaW4gSUQgc3RyaW5nIgorICAgIGRlZmF1bHQgIiIKKyAgICBoZWxwCisgICAgICBTcGVjaWZ5IGEgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyB5b3VyIHBhY2thZ2UuIFlvdSBtYXkgd2lzaCB0byBpbmNsdWRlCisgICAgICBhIGJ1aWxkIG51bWJlciBvciBidWlsZCBkYXRlLiBUaGlzIHZlcnNpb24gc3RyaW5nIHdpbGwgYmUgaW5jbHVkZWQgaW4KKyAgICAgIHRoZSBvdXRwdXQgb2YgZ2NjIC0tdmVyc2lvbiwgYW5kIGFsc28gaW4gYmludXRpbHMsIGVnbGliYywgZ2RiIGFuZAorICAgICAgZ2Ric2VydmVyLgorCisgICAgICBJZiB0aGlzIHN0cmluZyBpcyBsZWZ0IGVtcHR5LCB0aGUgYWN0dWFsIHBhY2thZ2UgdmVyc2lvbiB3aWxsIGJlOgorICAgICAgICAgICJjcm9zc3Rvb2wtTkcgJHtDVF9WRVJTSU9OfSIKKyAgICAgIE90aGVyd2lzZSwgaXQgd2lsbCBiZToKKyAgICAgICAgICAiY3Jvc3N0b29sLU5HICR7Q1RfVkVSU0lPTn0gLSAke0NUX1RPT0xDSEFJTl9QS0dWRVJTSU9OfSIKKworICAgICAgVGhpcyBpcyBwYXNzZWQgdG8gdGhlIGNvbmZpZ3VyZSBmbGFnIC0td2l0aC1wa2d2ZXJzaW9uLgorCitjb25maWcgVE9PTENIQUlOX0JVR1VSTAorICAgIHN0cmluZworICAgIHByb21wdCAiVG9vbGNoYWluIGJ1ZyBVUkwiCisgICAgZGVmYXVsdCAiIgorICAgIGhlbHAKKyAgICAgIFNwZWNpZnkgdGhlIFVSTCB0aGF0IHVzZXJzIHNob3VsZCB2aXNpdCBpZiB0aGV5IHdpc2ggdG8gcmVwb3J0IGEgYnVnLgorCitjb21tZW50ICJUdXBsZSBjb21wbGV0aW9uIGFuZCBhbGlhc2luZyIKKworY29uZmlnIFRBUkdFVF9WRU5ET1IKKyAgICBzdHJpbmcKKyAgICBwcm9tcHQgIlR1cGxlJ3MgdmVuZG9yIHN0cmluZyIKKyAgICBkZWZhdWx0ICJ1bmtub3duIgorICAgIGhlbHAKKyAgICAgIFZlbmRvciBwYXJ0IG9mIHRoZSB0YXJnZXQgdHVwbGUuCisgICAgICAKKyAgICAgIEEgdHVwbGUgaXMgb2YgdGhlIGZvcm0gYXJjaC12ZW5kb3Ita2VybmVsLXN5c3RlbS4KKyAgICAgIFlvdSBjYW4gc2V0IHRoZSBzZWNvbmQgcGFydCwgdmVuZG9yLCB0byB3aGF0ZXZlciB5b3Ugc2VlIGZpdC4KKyAgICAgIFVzZSBhIHNpbmdsZSB3b3JkLCBvciB1c2UgdW5kZXJzY29yZXMgIl8iIHRvIHNlcGFyYXRlIHdvcmRzLgorICAgICAgVXNlIG5laXRoZXIgZGFzaCBub3Igc3BhY2UsIGFzIGl0IGJyZWFrcyB0aGluZ3MuCisgICAgICAKKyAgICAgIEtlZXAgdGhlIGRlZmF1bHQgKHVua25vd24pIGlmIHlvdSBkb24ndCBrbm93IGJldHRlci4KKworY29uZmlnIFRBUkdFVF9BTElBU19TRURfRVhQUgorICAgIHN0cmluZworICAgIHByb21wdCAiVHVwbGUncyBzZWQgdHJhbnNmb3JtIgorICAgIGRlZmF1bHQgIiIKKyAgICBoZWxwCisgICAgICBOb3JtYWxseSwgeW91J2QgY2FsbCB5b3VyIHRvb2xjaGFpbiBjb21wb25lbnRzIChlc3BlY2lhbGx5IGdjYykgYnkKKyAgICAgIHByZWZpeGluZyB0aGUgdGFyZ2V0IHR1cGxlIGZvbGxvd2VkIGJ5IGEgZGFzaCBhbmQgdGhlIGNvbXBvbmVudCBuYW1lCisgICAgICAoZWcuIGFybWViLXVua25vd24tbGludXgtdWNsaWJjLWdjYykuCisgICAgICAKKyAgICAgIFlvdSBjYW4gZW50ZXIgaGVyZSBhIHNlZCBleHByZXNzaW9uIHRvIGJlIGFwcGxpZWQgdG8gJHtDVF9UQVJHRVR9IHRvCisgICAgICBjcmVhdGUgYW4gYWxpYXMgZm9yIHlvdXIgdG9vbGNoYWluLgorICAgICAgCisgICAgICBGb3IgZXhhbXBsZSwgInMvJHtDVF9UQVJHRVRfVkVORE9SfS9mb29iYXIvIiAod2l0aG91dCB0aGUgZG91YmxlIHF1b3RlcykKKyAgICAgIHdpbGwgY3JlYXRlIHRoZSBhcm1lYi1mb29iYXItbGludXgtdWNsaWJjIGFsaWFzIHRvIHRoZSBhYm92ZS1tZW50aW9uZWQKKyAgICAgIHRvb2xjaGFpbi4KKyAgICAgIAorICAgICAgWW91IHNob3VsZG4ndCBuZWVkIHRvIGVudGVyIGFueXRoaW5nIGhlcmUsIHVubGVzcyB5b3UgcGxhbiB0byBtYW51YWxseQorICAgICAgY2FsbCB0aGUgdG9vbHMgKGF1dG90b29scy1iYXNlZCAuL2NvbmZpZ3VyZSB3aWxsIHVzZSB0aGUgc3RhbmRhcmQgbmFtZSkuCisKK2NvbmZpZyBUQVJHRVRfQUxJQVMKKyAgICBzdHJpbmcKKyAgICBwcm9tcHQgIlR1cGxlJ3MgYWxpYXMiCisgICAgZGVmYXVsdCAiIgorICAgIGhlbHAKKyAgICAgIE5vcm1hbGx5LCB5b3UnZCBjYWxsIHlvdXIgdG9vbGNoYWluIGNvbXBvbmVudHMgKGVzcGVjaWFsbHkgZ2NjKSBieQorICAgICAgcHJlZml4aW5nIHRoZSB0YXJnZXQgdHVwbGUgZm9sbG93ZWQgYnkgYSBkYXNoIGFuZCB0aGUgY29tcG9uZW50IG5hbWUKKyAgICAgIChlZy4gYXJtZWItdW5rbm93bi1saW51eC11Y2xpYmMtZ2NjKS4KKyAgICAgIAorICAgICAgWW91IGNhbiBlbnRlciBhIHNob3J0Y3V0IGhlcmUuIFRoaXMgc3RyaW5nIHdpbGwgYmUgdXNlZCB0byBjcmVhdGUKKyAgICAgIHN5bWJvbGljIGxpbmtzIHRvIHRoZSB0b29sY2hhaW4gdG9vbHMgKGVnLiBpZiB5b3UgZW50ZXIgImZvby1iYXIiIGhlcmUsCisgICAgICB0aGVuIGdjYyBmb3IgeW91ciB0b29sY2hhaW4gd2lsbCBhbHNvIGJlIGF2YWlsYWJsZSBhcyAiZm9vLWJhci1nY2MiIGFsb25nCisgICAgICB3aXRoIHRoZSBvcmlnaW5hbCBuYW1lKS4KKyAgICAgIAorICAgICAgWW91IHNob3VsZG4ndCBuZWVkIHRvIGVudGVyIGFueXRoaW5nIGhlcmUsIHVubGVzcyB5b3UgcGxhbiB0byBtYW51YWxseQorICAgICAgY2FsbCB0aGUgdG9vbHMgKGF1dG90b29scy1iYXNlZCAuL2NvbmZpZ3VyZSB3aWxsIHVzZSB0aGUgc3RhbmRhcmQgbmFtZSkuCisKK2NvbW1lbnQgIlRvb2xjaGFpbiB0eXBlIgorCitjaG9pY2UKKyAgICBib29sCisgICAgcHJvbXB0ICJUeXBlIgorICAgIGRlZmF1bHQgQ1JPU1MKKworY29uZmlnIE5BVElWRQorICAgIGJvb2wKKyAgICBwcm9tcHQgIk5hdGl2ZSAgICAgICAoTk8gQ09ERSEpIChFWFBFUklNRU5UQUwpIgorICAgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisgICAgaGVscAorICAgICAgQnVpbGQgYSBuYXRpdmUgdG9vbGNoYWluLgorICAgICAgU2VlOiAiZG9jcy82IC0gVG9vbGNoYWluIHR5cGVzLnR4dCIKKworY29uZmlnIENST1NTCisgICAgYm9vbAorICAgIHByb21wdCAiQ3Jvc3MiCisgICAgaGVscAorICAgICAgQnVpbGQgYSBjcm9zcy10b29sY2hhaW4uCisgICAgICBTZWU6ICJkb2NzLzYgLSBUb29sY2hhaW4gdHlwZXMudHh0IgorCitjb25maWcgQ1JPU1NfTkFUSVZFCisgICAgYm9vbAorICAgIHByb21wdCAiQ3Jvc3MtbmF0aXZlIChOTyBDT0RFISkgKEVYUEVSSU1FTlRBTCkiCisgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKyAgICBoZWxwCisgICAgICBCdWlsZCBhIGNyb3NzLW5hdGl2ZSB0b29sY2hhaW4uCisgICAgICBTZWU6ICJkb2NzLzYgLSBUb29sY2hhaW4gdHlwZXMudHh0IgorCitjb25maWcgQ0FOQURJQU4KKyAgICBib29sCisgICAgcHJvbXB0ICJDYW5hZGlhbiAgICAgKEVYUEVSSU1FTlRBTCkiCisgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKyAgICBoZWxwCisgICAgICBCdWlsZCBhIGNhbmFkaWFuLXRvb2xjaGFpbi4KKyAgICAgIFNlZTogImRvY3MvNiAtIFRvb2xjaGFpbiB0eXBlcy50eHQiCisKK2VuZGNob2ljZQorCitjb25maWcgVE9PTENIQUlOX1RZUEUKKyAgICBzdHJpbmcKKyAgICBkZWZhdWx0ICJuYXRpdmUiICAgICAgICBpZiBOQVRJVkUKKyAgICBkZWZhdWx0ICJjcm9zcyIgICAgICAgICBpZiBDUk9TUworICAgIGRlZmF1bHQgImNyb3NzLW5hdGl2ZSIgIGlmIENST1NTX05BVElWRQorICAgIGRlZmF1bHQgImNhbmFkaWFuIiAgICAgIGlmIENBTkFESUFOCisKK2NvbW1lbnQgIkJ1aWxkIHN5c3RlbSIKKworY29uZmlnIEJVSUxECisgICAgc3RyaW5nCisgICAgcHJvbXB0ICJ8ICBUdXBsZSAgICAgICAgKFJFQUQgSEVMUCEpIgorICAgIGRlZmF1bHQgIiIKKyAgICBoZWxwCisgICAgICBDYW5vbmljYWwgbmFtZSBvZiB0aGUgbWFjaGluZSBidWlsZGluZyB0aGUgdG9vbGNoYWluLgorICAgICAgWW91IHNob3VsZCBsZWF2ZSBlbXB0eSwgdW5sZXNzIHlvdSByZWFsbHkgbm93IHdoYXQgeW91J3JlIGRvaW5nLgorCitjb25maWcgQlVJTERfUFJFRklYCisgICAgc3RyaW5nCisgICAgcHJvbXB0ICJ8ICBUb29scyBwcmVmaXggKFJFQUQgSEVMUCEpIgorICAgIGRlZmF1bHQgIiIKKyAgICBoZWxwCisgICAgICBJZiB5b3UgaGF2ZSB5b3VyICpidWlsZCBzeXN0ZW0qIHRvb2xzIGluIGEgd2VpcmQgbG9jYXRpb24sIGFuZC9vcgorICAgICAgdGhleSBoYXZlIGFuIHVudXN1YWwgcHJlZml4LCBlbnRlciBpdCBoZXJlLgorICAgICAgCisgICAgICBVc3VhbGx5LCB5b3Ugc2hvdWxkIGxlYXZlIHRoYXQgZW1wdHkhCisgICAgICAKKyAgICAgIEVnLjoKKyAgICAgICAgSWYgeW91ciAqYnVpbGQqIGdjYyBpcyAvb3B0L2J1aWxkLXRvb2xzL2Jpbi93ZWlyZC1nY2MgdGhlbiB5b3UKKyAgICAgICAgc2hvdWxkIGVudGVyOgorICAgICAgICAgICAgL29wdC9idWlsZC10b29scy9iaW4vd2VpcmQtCisgICAgICAgIAorICAgICAgICBJZiB5b3VyICpidWlsZCogZ2NjIGlzIC9vcHQvYnVpbGQtdG9vbHMvYmluL3dlaXJkLWdjYyBhbmQKKyAgICAgICAgL29wdC9idWlsZC10b29scy9iaW4gaXMgaW4geW91ciBQQVRILCB5b3Ugc2hvdWxkIGVudGVyOgorICAgICAgICAgICAgd2VpcmQtCisgICAgICAgIAorICAgICAgICBJZiB5b3VyICpidWlsZCogZ2NjIGlzIC9vcHQvYnVpbGQtdG9vbHMvYmluL2djYyB0aGVuIHlvdQorICAgICAgICBzaG91bGQgZW50ZXIgKGRvIG5vdCBmb3JnZXQgdG8gYWRkIHRoZSB0cmFpbGluZyAnLycpOgorICAgICAgICAgICAgL29wdC9idWlsZC10b29scy9iaW4vCisKK2NvbmZpZyBCVUlMRF9TVUZGSVgKKyAgICBzdHJpbmcKKyAgICBwcm9tcHQgInwgIFRvb2xzIHN1ZmZpeCAoUkVBRCBIRUxQISkiCisgICAgZGVmYXVsdCAiIgorICAgIGhlbHAKKyAgICAgIElmIHlvdXIgKmJ1aWxkIHN5c3RlbSogdG9vbHMgaGF2ZSBhbiB1bnVzdWFsIHN1ZmZpeCwgZW50ZXIgaXQKKyAgICAgIGhlcmUuCisgICAgICAKKyAgICAgIFVzdWFsbHksIHlvdSBzaG91bGQgbGVhdmUgdGhhdCBlbXB0eSEKKyAgICAgIAorICAgICAgRWcuOgorICAgICAgICBJZiB5b3VyICdkZWZhdWx0JyBnY2MgaXMgZ2NjIDQuMy4xLCBidXQgeW91IGFsc28gaGF2ZSBnY2MtMy40LjIKKyAgICAgICAgaW5zdGFsbGVkIGFzIGdjYy0zLjQsIHRoZW4geW91IHNob3VsZCBlbnRlcjoKKyAgICAgICAgICAgIC0zLjQKKyAgICAgIAorICAgICAgSXQgY2FuIGhhcHBlbiB0aGF0IHNvbWUgb2YgdGhlIHRvb2xzIGhhdmUgYSBzdWZmaXgsIHdoZW4gb3RoZXJzCisgICAgICBkb24ndCwgZWcuIHlvdSBjYW4gaGF2ZSAnZ2NjLTMuNCcgYW5kICdhcicuIGNyb3NzdG9vbC1ORyBhY2NvdW50cworICAgICAgZm9yIHRoYXQgYnkgY2hlY2tpbmcgdGhlIHRvb2xzIHdpdGhvdXQgdGhlIHN1ZmZpeCBpbiBjYXNlIGl0IGNhbgorICAgICAgbm90IGZpbmQgc29tZSBvZiB0aGUgdG9vbC4KKworaWYgQ0FOQURJQU4KKworY29tbWVudCAiSG9zdCBzeXN0ZW0iCisKK2NvbmZpZyBIT1NUCisgICAgc3RyaW5nCisgICAgcHJvbXB0ICJ8ICBUdXBsZSAgICAgICAgKFJFQUQgSEVMUCEpIgorICAgIGRlZmF1bHQgIiIKKyAgICBoZWxwCisgICAgICBDYW5vbmljYWwgbmFtZSBvZiB0aGUgbWFjaGluZSBydW5uaW5nIHRoZSB0b29sY2hhaW4uCisKK2NvbmZpZyBIT1NUX1BSRUZJWAorICAgIHN0cmluZworICAgIHByb21wdCAifCAgVG9vbHMgcHJlZml4IChSRUFEIEhFTFAhKSIKKyAgICBkZWZhdWx0ICIiCisgICAgaGVscAorICAgICAgSWYgeW91IGhhdmUgeW91ciAqaG9zdCBzeXN0ZW0qIHRvb2xzIGluIGEgd2VpcmQgbG9jYXRpb24sIGFuZC9vcgorICAgICAgdGhleSBoYXZlIGFuIHVudXN1YWwgcHJlZml4LCBlbnRlciBpdCBoZXJlLgorICAgICAgCisgICAgICBVc3VhbGx5LCB5b3Ugc2hvdWxkIGxlYXZlIHRoYXQgZW1wdHkhCisgICAgICAKKyAgICAgIEVnLjoKKyAgICAgICAgSWYgeW91ciAqaG9zdCogZ2NjIGlzIC9vcHQvaG9zdC10b29scy9iaW4vd2VpcmQtZ2NjIHRoZW4geW91CisgICAgICAgIHNob3VsZCBlbnRlcjoKKyAgICAgICAgICAgIC9vcHQvaG9zdC10b29scy9iaW4vd2VpcmQtCisgICAgICAgIAorICAgICAgICBJZiB5b3VyICpob3N0KiBnY2MgaXMgL29wdC9ob3N0LXRvb2xzL2Jpbi93ZWlyZC1nY2MgYW5kCisgICAgICAgIC9vcHQvaG9zdC10b29scy9iaW4gaXMgaW4geW91ciBQQVRILCB5b3Ugc2hvdWxkIGVudGVyOgorICAgICAgICAgICAgd2VpcmQtCisgICAgICAgIAorICAgICAgICBJZiB5b3VyICpob3N0KiBnY2MgaXMgL29wdC9ob3N0LXRvb2xzL2Jpbi9nY2MgdGhlbiB5b3UKKyAgICAgICAgc2hvdWxkIGVudGVyIChkbyBub3QgZm9yZ2V0IHRvIGFkZCB0aGUgdHJhaWxpbmcgJy8nKToKKyAgICAgICAgICAgIC9vcHQvaG9zdC10b29scy9iaW4vCisKK2NvbmZpZyBIT1NUX1NVRkZJWAorICAgIHN0cmluZworICAgIHByb21wdCAifCAgVG9vbHMgc3VmZml4IChSRUFEIEhFTFAhKSIKKyAgICBkZWZhdWx0ICIiCisgICAgaGVscAorICAgICAgSWYgeW91ciAqaG9zdCBzeXN0ZW0qIHRvb2xzIGhhdmUgYW4gdW51c3VhbCBzdWZmaXgsIGVudGVyIGl0CisgICAgICBoZXJlLgorICAgICAgCisgICAgICBVc3VhbGx5LCB5b3Ugc2hvdWxkIGxlYXZlIHRoYXQgZW1wdHkhCisgICAgICAKKyAgICAgIEVnLjoKKyAgICAgICAgSWYgeW91ciAnZGVmYXVsdCcgZ2NjIGlzIGdjYyA0LjMuMSwgYnV0IHlvdSBhbHNvIGhhdmUgZ2NjLTMuNC4yCisgICAgICAgIGluc3RhbGxlZCBhcyBnY2MtMy40LCB0aGVuIHlvdSBzaG91bGQgZW50ZXI6CisgICAgICAgICAgICAtMy40CisgICAgICAKKyAgICAgIEl0IGNhbiBoYXBwZW4gdGhhdCBzb21lIG9mIHRoZSB0b29scyBoYXZlIGEgc3VmZml4LCB3aGVuIG90aGVycworICAgICAgZG9uJ3QsIGVnLiB5b3UgY2FuIGhhdmUgJ2djYy0zLjQnIGFuZCAnYXInLiBjcm9zc3Rvb2wtTkcgYWNjb3VudHMKKyAgICAgIGZvciB0aGF0IGJ5IGNoZWNraW5nIHRoZSB0b29scyB3aXRob3V0IHRoZSBzdWZmaXggaW4gY2FzZSBpdCBjYW4KKyAgICAgIG5vdCBmaW5kIHNvbWUgb2YgdGhlIHRvb2wuCisKK2VuZGlmICMgQ0FOQURJQU4KKworaWYgQ1JPU1NfTkFUSVZFIHx8IENBTkFESUFOCisKK2NvbW1lbnQgIlRhcmdldCBzeXN0ZW0iCisKK2NvbmZpZyBUQVJHRVRfUFJFRklYCisgICAgc3RyaW5nCisgICAgcHJvbXB0ICJ8ICBUb29scyBwcmVmaXggKFJFQUQgSEVMUCEpIgorICAgIGRlZmF1bHQgIiIKKyAgICBoZWxwCisgICAgICBJZiB5b3UgaGF2ZSB5b3VyICp0YXJnZXQgc3lzdGVtKiB0b29scyBpbiBhIHdlaXJkIGxvY2F0aW9uLCBhbmQvb3IKKyAgICAgIHRoZXkgaGF2ZSBhbiB1bnVzdWFsIHByZWZpeCwgZW50ZXIgaXQgaGVyZS4KKyAgICAgIAorICAgICAgVXN1YWxseSwgeW91IHNob3VsZCBsZWF2ZSB0aGF0IGVtcHR5IQorICAgICAgCisgICAgICBFZy46CisgICAgICAgIElmIHlvdXIgKnRhcmdldCogZ2NjIGlzIC9vcHQvdGFyZ2V0LXRvb2xzL2Jpbi93ZWlyZC1nY2MgdGhlbiB5b3UKKyAgICAgICAgc2hvdWxkIGVudGVyOgorICAgICAgICAgICAgL29wdC90YXJnZXQtdG9vbHMvYmluL3dlaXJkLQorICAgICAgICAKKyAgICAgICAgSWYgeW91ciAqdGFyZ2V0KiBnY2MgaXMgL29wdC90YXJnZXQtdG9vbHMvYmluL3dlaXJkLWdjYyBhbmQKKyAgICAgICAgL29wdC90YXJnZXQtdG9vbHMvYmluIGlzIGluIHlvdXIgUEFUSCwgeW91IHNob3VsZCBlbnRlcjoKKyAgICAgICAgICAgIHdlaXJkLQorICAgICAgICAKKyAgICAgICAgSWYgeW91ciAqdGFyZ2V0KiBnY2MgaXMgL29wdC90YXJnZXQtdG9vbHMvYmluL2djYyB0aGVuIHlvdQorICAgICAgICBzaG91bGQgZW50ZXIgKGRvIG5vdCBmb3JnZXQgdG8gYWRkIHRoZSB0cmFpbGluZyAnLycpOgorICAgICAgICAgICAgL29wdC90YXJnZXQtdG9vbHMvYmluLworCitjb25maWcgVEFSR0VUX1NVRkZJWAorICAgIHN0cmluZworICAgIHByb21wdCAifCAgVG9vbHMgc3VmZml4IChSRUFEIEhFTFAhKSIKKyAgICBkZWZhdWx0ICIiCisgICAgaGVscAorICAgICAgSWYgeW91ciAqdGFyZ2V0IHN5c3RlbSogdG9vbHMgaGF2ZSBhbiB1bnVzdWFsIHN1ZmZpeCwgZW50ZXIgaXQKKyAgICAgIGhlcmUuCisgICAgICAKKyAgICAgIFVzdWFsbHksIHlvdSBzaG91bGQgbGVhdmUgdGhhdCBlbXB0eSEKKyAgICAgIAorICAgICAgRWcuOgorICAgICAgICBJZiB5b3VyICdkZWZhdWx0JyBnY2MgaXMgZ2NjIDQuMy4xLCBidXQgeW91IGFsc28gaGF2ZSBnY2MtMy40LjIKKyAgICAgICAgaW5zdGFsbGVkIGFzIGdjYy0zLjQsIHRoZW4geW91IHNob3VsZCBlbnRlcjoKKyAgICAgICAgICAgIC0zLjQKKyAgICAgIAorICAgICAgSXQgY2FuIGhhcHBlbiB0aGF0IHNvbWUgb2YgdGhlIHRvb2xzIGhhdmUgYSBzdWZmaXgsIHdoZW4gb3RoZXJzCisgICAgICBkb24ndCwgZWcuIHlvdSBjYW4gaGF2ZSAnZ2NjLTMuNCcgYW5kICdhcicuIGNyb3NzdG9vbC1ORyBhY2NvdW50cworICAgICAgZm9yIHRoYXQgYnkgY2hlY2tpbmcgdGhlIHRvb2xzIHdpdGhvdXQgdGhlIHN1ZmZpeCBpbiBjYXNlIGl0IGNhbgorICAgICAgbm90IGZpbmQgc29tZSBvZiB0aGUgdG9vbC4KKworZW5kaWYgIyBDUk9TU19OQVRJVkUgfHwgQ0FOQURJQU4KKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9jb250cmliL2djYy10ZXN0LXN1aXRlL01ha2VmaWxlIGIvbGliL2N0LW5nLTEuMTMuNC9jb250cmliL2djYy10ZXN0LXN1aXRlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZjU4MDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbnRyaWIvZ2NjLXRlc3Qtc3VpdGUvTWFrZWZpbGUKQEAgLTAsMCArMSw3OSBAQAorIyBIZWxwZXIgbWFrZWZpbGUgd2hpY2ggZG93bmxvYWRzIChpZiByZXF1aXJlZCkgYW5kIHJ1bnMgdGhlIEdDQyB0ZXN0IHN1aXRlIChEZWphR251KQorIworIyBOb3RlOiBCZWZvcmUgcnVuIHBsZWFzZSBtYWtlIHN1cmUgdG8gaGF2ZSB5b3VyIHRvb2xjaGFpbiBhdmFpbGFibGUgaW4geW91ciBwYXRoLgorIworIyBDb3B5cmlnaHQgMjAxMCBEb3LDqURldmVsb3BtZW50CisjIAorIyBBdXRob3I6IE1hcnRpbiBMdW5kIDxtZ2xAZG9yZWRldmVsb3BtZW50LmRrPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorIyBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworCisjIEludGVybmFsIGNvbmZpZ3VyYXRpb24KK1RBUkdFVDo9QEBER19UQVJHRVRAQAorVE9QRElSOj0kKHNoZWxsIHB3ZCkKK0xPR0RJUjo9JChUT1BESVIpL3RtcAorCisjIEluY2x1ZGUgZGVmYXVsdCBjb25maWd1cmF0aW9uCitpbmNsdWRlIGRlZmF1bHQuY2ZnCisKKyMgQWRkIHRvb2xjaGFpbiB0byBwYXRoCitQQVRIOj0kKHNoZWxsIGNkIC4uLy4uL2JpbiAmJiBwd2QpOiQoUEFUSCkKKworIyBTZWxlY3QgdGVzdCBzZXQKK2lmZXEgKCQoREdfVE9PTE5BTUUpLGdjYykKKwlER19URVNUUzo9JChER19DX1RFU1RTKQorZW5kaWYKK2lmZXEgKCQoREdfVE9PTE5BTUUpLGcrKykKKwlER19URVNUUzo9JChER19DUFBfVEVTVFMpCitlbmRpZgorCisjIENoZWNrIHRoYXQgd2UgaGF2ZSAncnVudGVzdCcgaW5zdGFsbGVkCitSVU5URVNUPSQoc2hlbGwgd2hpY2ggcnVudGVzdCkKK2lmZXEgKCQoUlVOVEVTVCksKQorICAgICAgICAkKGVycm9yICJEZWphR251ICdydW50ZXN0JyBub3QgZm91bmQgLSBwbGVhc2UgaW5zdGFsbCAoZWcuIGFwdC1nZXQgaW5zdGFsbCBkZWphZ251KSIpCitlbmRpZgorCisjIFRhcmdldHMgCithbGw6IHRlc3QKKworJChMT0dESVIpOgorCUBta2RpciAtcCAkQAorCiskKExPR0RJUikvc2l0ZS5leHA6ICQoVE9QRElSKS9kZWZhdWx0LmNmZyAkKExPR0RJUikKKwlAeyBlY2hvICdsYXBwZW5kIGJvYXJkc19kaXIgIiQoTE9HRElSKSInOyBcCisJICAgZWNobyAnc2V0IHRhcmdldF9hbGlhcyAkKFRBUkdFVCknOyAgICAgfSA+ICRACisKKyQoTE9HRElSKS9ib2FyZC5leHA6ICQoVE9QRElSKS9kZWZhdWx0LmNmZyAkKExPR0RJUikKKwlAeyBlY2hvICdsb2FkX2dlbmVyaWNfY29uZmlnICJ1bml4Iic7ICAgICAgICAgICAgICAgICAgICBcCisJICAgZWNobyAncHJvY2Vzc19tdWx0aWxpYl9vcHRpb25zICIiJzsgICAgICAgICAgICAgICAgICAgXAorCSAgIGVjaG8gJ3NldF9ib2FyZF9pbmZvIGJtayx1c2VfYWxhcm0gMSc7ICAgICAgICAgICAgICAgIFwKKwkgICBlY2hvICdzZXRfYm9hcmRfaW5mbyByc2hfcHJvZyBzc2gnOyAgICAgICAgICAgICAgICAgICBcCisJICAgZWNobyAnc2V0X2JvYXJkX2luZm8gcmNwX3Byb2cgc2NwJzsgICAgICAgICAgICAgICAgICAgXAorCSAgIGVjaG8gJ3NldF9ib2FyZF9pbmZvIGhvc3RuYW1lICQoREdfVEFSR0VUX0hPU1ROQU1FKSc7IFwKKwkgICBlY2hvICdzZXRfYm9hcmRfaW5mbyB1c2VybmFtZSAkKERHX1RBUkdFVF9VU0VSTkFNRSknOyB9ID4gJEAKKworIyBBcyBNYXJ0aW4gcHV0cyBpdDoKKyMgID4gVGhlIHRoaW5nIGlzIHRoYXQgd2hlbiB5b3UgcnVuIDUwaysgdGVzdCBjYXNlcyB0aGUgb2RkcyBhcmUgdGhhdCBhdAorIyAgPiBsZWFzdCBvbmUgd2lsbCBmYWlsIGFuZCB0aHVzIHJ1bnRlc3QgYmFzaWNhbGx5IGFsd2F5cyByZXR1cm4gYW4gZXJyb3IKKyMgID4gZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHRoZSB0ZXN0IHNlc3Npb24gaGFzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyMgU28ganVzdCBpZ25vcmUgYW55IGVycm9yIHJlcG9ydGVkIGJ5IHJ1bnRlc3QKK3Rlc3Q6ICQoTE9HRElSKS9ib2FyZC5leHAgJChMT0dESVIpL3NpdGUuZXhwICQoTE9HRElSKQorCUBydW50ZXN0IC0tdG9vbCAkKERHX1RPT0xOQU1FKSAgICAgICAgICBcCisJICAgICAgICAgLS1zcmNkaXIgJChUT1BESVIpL3Rlc3RzdWl0ZSAgIFwKKwkgICAgICAgICAtLW9iamRpciAkKExPR0RJUikgICAgICAgICAgICAgXAorCSAgICAgICAgIC0tb3V0ZGlyICQoTE9HRElSKSAgICAgICAgICAgICBcCisJICAgICAgICAgLS1hbGwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgICAtLXRhcmdldCAkKFRBUkdFVCkgICAgICAgICAgICAgXAorCSAgICAgICAgIC0tdGFyZ2V0X2JvYXJkIGJvYXJkICAgICAgICAgICBcCisJICAgICAgICAgJChER19URVNUUykgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgICBHWFhfVU5ERVJfVEVTVD0kKFRBUkdFVCktZysrICAgfHwgdHJ1ZQorCUBwcmludGYgIlJlc3VsdCBmaWxlcyBhdmFpbGFibGUgaW4gJyVzJ1xuIiAiJChMT0dESVIpIgorCitjbGVhbjoKKwlybSAtcmYgJChMT0dESVIpCisKKy5QSE9OWTogY29uZmlnIHRlc3QgY2xlYW4KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvY29udHJpYi9nY2MtdGVzdC1zdWl0ZS9SRUFETUUgYi9saWIvY3QtbmctMS4xMy40L2NvbnRyaWIvZ2NjLXRlc3Qtc3VpdGUvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjODFiZTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbnRyaWIvZ2NjLXRlc3Qtc3VpdGUvUkVBRE1FCkBAIC0wLDAgKzEsODMgQEAKKworSGVscGVyIE1ha2VmaWxlIGZvciB0ZXN0aW5nIGdjYyB0b29sY2hhaW5zIHVzaW5nIHRoZSBnY2MtdGVzdHN1aXRlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVxdWlyZW1lbnRzCistLS0tLS0tLS0tLS0KKworKiBEZWphR251ICdydW50ZXN0JyB2MS40LjQrCisqIE1ha2UgdjMuODErCisKKworQ29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLQorCitFZGl0IGRlZmF1bHQuY2ZnIHRvIHJlZmxlY3QgeW91ciB0b29sY2hhaW4gYW5kIHRhcmdldCBjb25maWd1cmF0aW9uLgorCitBbHRlcm5hdGl2ZWx5LCBvdmVycmlkZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBvbiB0aGUgY29tbWFuZCBsaW5lLgorCitBdmFpbGFibGUgY29uZmlnIHZhcmlhYmxlczoKKworREdfVE9PTE5BTUUKKyAgVGhlIG5hbWUgb2YgdGhlIHRvb2wgeW91IHdhbnQgdG8gdGVzdC4KKyAgQ3VycmVudGx5IHN1cHBvcnRlZDogZ2NjIG9yIGcrKworICBEZWZhdWx0OiBnY2MKKworREdfVEFSR0VUX0hPU1ROQU1FCisgIFRoZSBob3N0bmFtZSBvciBJUCBvZiB0aGUgbWFjaGluZSB0byBleGVjdXRlIHJ1bi10ZXN0cworICBEZWZhdWx0OiAxMjcuMC4wLjEKKworREdfVEFSR0VUX1VTRVJOQU1FCisgIEV4ZWN1dGUgdGhlIHJ1bi10ZXN0IGFzIHRoaXMgdXNlciBvbiBER19UQVJHRVRfSE9TVE5BTUUKKyAgRGVmYXVsdDogcm9vdAorCitER19DX1RFU1RTCitER19DUFBfVEVTVFMKKyAgVGhlIEMvQysrIHRlc3RzIHlvdSB3YW50IHRvIGNoZWNrCisgIERlZmF1bHQ6IChlbXB0eSwgbWVhbnMgYWxsIHRlc3RzKQorCisKK1J1biBleGFtcGxlcworLS0tLS0tLS0tLS0tCisKK1RoZSBmaXJzdCB0d28gZXhhbXBsZXMgcmVxdWlyZSBhIG5ldHdvcmtlZCB0YXJnZXQgd2l0aCBzc2ggYWNjZXNzIGFuZCBhdXRvbWF0aWMKK3NzaCBsb2dpbiAoc2VlIHNlY3Rpb24gYmVsb3cpLiBUYXJnZXQgU1cgc2hvdWxkIGJlIGNvbXBpbGVkIHdpdGggdGhlIHRvb2xjaGFpbiAKK3RvIGJlIHRlc3RlZC4KKworUnVuIGRlZmF1bHQgZ2NjIGNvbXBpbGUvZXhlY3V0aW9uIHRlc3RzOgorJCBtYWtlIERHX1RPT0xOQU1FPWdjYyBER19UQVJHRVRfSE9TVE5BTUU9MTkyLjE2OC4xNy45MyBER19UQVJHRVRfVVNFUk5BTUU9cm9vdAorCitSdW4gZGVmYXVsdCBnKysgY29tcGlsZS9leGVjdXRpb24gdGVzdHM6CiskIG1ha2UgREdfVE9PTE5BTUU9ZysrIERHX1RBUkdFVF9IT1NUTkFNRT0xOTIuMTY4LjE3LjkzIERHX1RBUkdFVF9VU0VSTkFNRT1yb290CisKK1J1biBzZWxlY3RlZCBnY2MgY29tcGlsZSBvbmx5IHRlc3RzIChubyB0YXJnZXQgcmVxdWlyZWQpOgorJCBtYWtlIERHX1RPT0xOQU1FPWdjYyBER19DX1RFU1RTPSJjb21waWxlLmV4cCBub25jb21waWxlLmV4cCIgCisKKworU1NIIGF1dG9tYXRpYyBsb2dpbiBjb25maWd1cmF0aW9uIGV4YW1wbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uIGhvc3QgZG86IAorc3NoLWtleWdlbiAtdCByc2EgKHRoZW4gc2ltcGx5IHByZXNzIGVudGVyIHRocnUgYWxsIHN0ZXBzKQorc3NoLWNvcHktaWQgLWkgfi8uc3NoL2lkX3JzYS5wdWIgPHVzZXJuYW1lPkA8dGFyZ2V0IElQPgorCitOb3cgYXV0b21hdGljIHNzaCBsb2dpbiBzaG91bGQgd29yayAtIHRlc3QgYnkgZG9pbmcgYSBzaW1wbGUgc3NoIHNlc3Npb24gdG8gdGFyZ2V0LgorCitOb3RlOiBUaGUgcHJvY2VkdXJlIG1pZ2h0IGJlIHNsaWdodGx5IGRpZmZlcmVudCBmb3IgeW91ciBwYXJ0aWN1bGFyIHRhcmdldC4KKworCitHZXR0aW5nIHJpZCBvZiB0aGUgdGVzdC1zdWl0ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IG5vIGxvbmdlciBoYXZlIGEgbmVlZCBmb3IgdGhlIHRlc3Qtc3VpdGUsIHRoZW4geW91IGNhbiByZW1vdmUgaXQgYWx0b2dldGhlcgorZnJvbSB5b3VyIHRvb2xjaGFpbi4gSnVzdCBkZWxldGUgdGhlIHRlc3Qtc3VpdGUvIGR1Yi1kaXIuCisKKworQXV0aG9yCistLS0tLS0KK01hcnRpbiBMdW5kIDxtZ2xAZG9yZWRldmVsb3BtZW50LmRrPgorICBJbml0aWFsIGNvbnRlbnQKKworIllhbm4gRS4gTU9SSU4iIDx5YW5uLm1vcmluLjE5OThAYW5jaWVucy5lbmliLmZyPgorICBHZXR0aW5nIHJpZCBvZiB0aGUgdGVzdC1zdWl0ZQorICBNaW5vciBmaXhlcwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9jb250cmliL2djYy10ZXN0LXN1aXRlL2RlZmF1bHQuY2ZnIGIvbGliL2N0LW5nLTEuMTMuNC9jb250cmliL2djYy10ZXN0LXN1aXRlL2RlZmF1bHQuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MjMwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2NvbnRyaWIvZ2NjLXRlc3Qtc3VpdGUvZGVmYXVsdC5jZmcKQEAgLTAsMCArMSwxMCBAQAorIyBEZWZhdWx0IHRlc3Qgc3VpdGUgY29uZmlndXJhdGlvbgorCisjIERlZmF1bHQgRGVqYUdudSBjb25maWd1cmF0aW9uCitER19UT09MTkFNRSA9IGdjYworREdfVEFSR0VUX0hPU1ROQU1FID0gMTI3LjAuMC4xCitER19UQVJHRVRfVVNFUk5BTUUgPSByb290CisKKyMgRGVmYXVsdCB0ZXN0cworREdfQ19URVNUUyA9IAorREdfQ1BQX1RFU1RTID0gCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2NvbnRyaWIvb3BlbnJpc2Mtb3IzMi5wYXRjaC5sem1hIGIvbGliL2N0LW5nLTEuMTMuNC9jb250cmliL29wZW5yaXNjLW9yMzIucGF0Y2gubHptYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjYzNjgyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9jb250cmliL29wZW5yaXNjLW9yMzIucGF0Y2gubHptYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2tjb25maWcvY2hlY2suc2ggYi9saWIvY3QtbmctMS4xMy40L2tjb25maWcvY2hlY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE1OWNiZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQva2NvbmZpZy9jaGVjay5zaApAQCAtMCwwICsxLDE0IEBACisjIS9iaW4vc2gKKyMgTmVlZGVkIGZvciBzeXN0ZW1zIHdpdGhvdXQgZ2V0dGV4dAorJCogLXhjIC1vIC9kZXYvbnVsbCAtID4gL2Rldi9udWxsIDI+JjEgPDwgRU9GCisjaW5jbHVkZSA8bGliaW50bC5oPgoraW50IG1haW4oKQoreworCWdldHRleHQoIiIpOworCXJldHVybiAwOworfQorRU9GCitpZiBbICEgIiQ/IiAtZXEgIjAiICBdOyB0aGVuCisJZWNobyAtREtCVUlMRF9OT19OTFM7CitmaQorCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2tjb25maWcvY29uZi5jIGIvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL2NvbmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTIyMjdlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL2NvbmYuYwpAQCAtMCwwICsxLDY1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi4wLgorICovCisKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworI2RlZmluZSBMS0NfRElSRUNUX0xJTksKKyNpbmNsdWRlICJsa2MuaCIKKworc3RhdGljIHZvaWQgY29uZihzdHJ1Y3QgbWVudSAqbWVudSk7CitzdGF0aWMgdm9pZCBjaGVja19jb25mKHN0cnVjdCBtZW51ICptZW51KTsKKworZW51bSBpbnB1dF9tb2RlIHsKKwlvbGRhc2tjb25maWcsCisJc2lsZW50b2xkY29uZmlnLAorCW9sZGNvbmZpZywKKwlhbGxub2NvbmZpZywKKwlhbGx5ZXNjb25maWcsCisJYWxsbW9kY29uZmlnLAorCWFsbGRlZmNvbmZpZywKKwlyYW5kY29uZmlnLAorCWRlZmNvbmZpZywKKwlzYXZlZGVmY29uZmlnLAorCWxpc3RuZXdjb25maWcsCisJb2xkbm9jb25maWcsCit9IGlucHV0X21vZGUgPSBvbGRhc2tjb25maWc7CisKK2NoYXIgKmRlZmNvbmZpZ19maWxlOworCitzdGF0aWMgaW50IGluZGVudCA9IDE7CitzdGF0aWMgaW50IHZhbGlkX3N0ZGluID0gMTsKK3N0YXRpYyBpbnQgc3luY19rY29uZmlnOworc3RhdGljIGludCBjb25mX2NudDsKK3N0YXRpYyBjaGFyIGxpbmVbMTI4XTsKK3N0YXRpYyBzdHJ1Y3QgbWVudSAqcm9vdEVudHJ5OworCitzdGF0aWMgdm9pZCBwcmludF9oZWxwKHN0cnVjdCBtZW51ICptZW51KQoreworCXN0cnVjdCBnc3RyIGhlbHAgPSBzdHJfbmV3KCk7CisKKwltZW51X2dldF9leHRfaGVscChtZW51LCAmaGVscCk7CisKKwlwcmludGYoIlxuJXNcbiIsIHN0cl9nZXQoJmhlbHApKTsKKwlzdHJfZnJlZSgmaGVscCk7Cit9CisKK3N0YXRpYyB2b2lkIHN0cmlwKGNoYXIgKnN0cikKK3sKKwljaGFyICpwID0gc3RyOworCWludCBsOworCisJd2hpbGUgKChpc3NwYWNlKCpwKSkpCisJCXArKzsKKwlsID0gc3RybGVuKHApOworCWlmIChwICE9IHN0cikKKwkJbWVtbW92ZShzdHIsIHAsIGwgKyAxKTsKKwlpZiAoIWwpCisJCXJldHVybjsKKwlwID0gc3RyICsgbCAtIDE7CisJd2hpbGUgKChpc3NwYWNlKCpwKSkpCisJCSpwLS0gPSAwOworfQorCitzdGF0aWMgdm9pZCBjaGVja19zdGRpbih2b2lkKQoreworCWlmICghdmFsaWRfc3RkaW4pIHsKKwkJLyogRm9yIGNyb3NzdG9vbC1ORywgd2UgZG9uJ3QgY2FyZSBpZiBzdGRpbi9zdGRvdXQgZ290IHJlZGlyZWN0ZWQuCisJCSAqIEluIHRoaXMgY2FzZSwganVzdCBwcmludGYgYSBjYXJpYWdlIHJldHVybiwgZm9yIHByZXR0eSBvdXRwdXQuCisJCSAqLworCQlwcmludGYoIlxuIik7CisJfQorfQorCitzdGF0aWMgaW50IGNvbmZfYXNrdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpkZWYpCit7CisJZW51bSBzeW1ib2xfdHlwZSB0eXBlID0gc3ltX2dldF90eXBlKHN5bSk7CisKKwlpZiAoIXN5bV9oYXNfdmFsdWUoc3ltKSkKKwkJcHJpbnRmKF8oIihORVcpICIpKTsKKworCWxpbmVbMF0gPSAnXG4nOworCWxpbmVbMV0gPSAwOworCisJaWYgKCFzeW1faXNfY2hhbmdhYmxlKHN5bSkpIHsKKwkJcHJpbnRmKCIlc1xuIiwgZGVmKTsKKwkJbGluZVswXSA9ICdcbic7CisJCWxpbmVbMV0gPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwlzd2l0Y2ggKGlucHV0X21vZGUpIHsKKwljYXNlIG9sZGNvbmZpZzoKKwljYXNlIHNpbGVudG9sZGNvbmZpZzoKKwkJaWYgKHN5bV9oYXNfdmFsdWUoc3ltKSkgeworCQkJcHJpbnRmKCIlc1xuIiwgZGVmKTsKKwkJCXJldHVybiAwOworCQl9CisJCWNoZWNrX3N0ZGluKCk7CisJY2FzZSBvbGRhc2tjb25maWc6CisJCWZmbHVzaChzdGRvdXQpOworCQl4ZmdldHMobGluZSwgMTI4LCBzdGRpbik7CisJCXJldHVybiAxOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgU19JTlQ6CisJY2FzZSBTX0hFWDoKKwljYXNlIFNfU1RSSU5HOgorCQlwcmludGYoIiVzXG4iLCBkZWYpOworCQlyZXR1cm4gMTsKKwlkZWZhdWx0OgorCQk7CisJfQorCXByaW50ZigiJXMiLCBsaW5lKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjb25mX3N0cmluZyhzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBtZW51LT5zeW07CisJY29uc3QgY2hhciAqZGVmOworCisJd2hpbGUgKDEpIHsKKwkJcHJpbnRmKCIlKnMlcyAiLCBpbmRlbnQgLSAxLCAiIiwgXyhtZW51LT5wcm9tcHQtPnRleHQpKTsKKwkJcHJpbnRmKCIoJXMpICIsIHN5bS0+bmFtZSk7CisJCWRlZiA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSk7CisJCWlmIChzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pKQorCQkJcHJpbnRmKCJbJXNdICIsIGRlZik7CisJCWlmICghY29uZl9hc2t2YWx1ZShzeW0sIGRlZikpCisJCQlyZXR1cm4gMDsKKwkJc3dpdGNoIChsaW5lWzBdKSB7CisJCWNhc2UgJ1xuJzoKKwkJCWJyZWFrOworCQljYXNlICc/JzoKKwkJCS8qIHByaW50IGhlbHAgKi8KKwkJCWlmIChsaW5lWzFdID09ICdcbicpIHsKKwkJCQlwcmludF9oZWxwKG1lbnUpOworCQkJCWRlZiA9IE5VTEw7CisJCQkJYnJlYWs7CisJCQl9CisJCWRlZmF1bHQ6CisJCQlsaW5lW3N0cmxlbihsaW5lKS0xXSA9IDA7CisJCQlkZWYgPSBsaW5lOworCQl9CisJCWlmIChkZWYgJiYgc3ltX3NldF9zdHJpbmdfdmFsdWUoc3ltLCBkZWYpKQorCQkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50IGNvbmZfc3ltKHN0cnVjdCBtZW51ICptZW51KQoreworCXN0cnVjdCBzeW1ib2wgKnN5bSA9IG1lbnUtPnN5bTsKKwl0cmlzdGF0ZSBvbGR2YWwsIG5ld3ZhbDsKKworCXdoaWxlICgxKSB7CisJCXByaW50ZigiJSpzJXMgIiwgaW5kZW50IC0gMSwgIiIsIF8obWVudS0+cHJvbXB0LT50ZXh0KSk7CisJCWlmIChzeW0tPm5hbWUpCisJCQlwcmludGYoIiglcykgIiwgc3ltLT5uYW1lKTsKKwkJcHV0Y2hhcignWycpOworCQlvbGR2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7CisJCXN3aXRjaCAob2xkdmFsKSB7CisJCWNhc2Ugbm86CisJCQlwdXRjaGFyKCdOJyk7CisJCQlicmVhazsKKwkJY2FzZSBtb2Q6CisJCQlwdXRjaGFyKCdNJyk7CisJCQlicmVhazsKKwkJY2FzZSB5ZXM6CisJCQlwdXRjaGFyKCdZJyk7CisJCQlicmVhazsKKwkJfQorCQlpZiAob2xkdmFsICE9IG5vICYmIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCBubykpCisJCQlwcmludGYoIi9uIik7CisJCWlmIChvbGR2YWwgIT0gbW9kICYmIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCBtb2QpKQorCQkJcHJpbnRmKCIvbSIpOworCQlpZiAob2xkdmFsICE9IHllcyAmJiBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5bSwgeWVzKSkKKwkJCXByaW50ZigiL3kiKTsKKwkJaWYgKG1lbnVfaGFzX2hlbHAobWVudSkpCisJCQlwcmludGYoIi8/Iik7CisJCXByaW50ZigiXSAiKTsKKwkJaWYgKCFjb25mX2Fza3ZhbHVlKHN5bSwgc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSkpCisJCQlyZXR1cm4gMDsKKwkJc3RyaXAobGluZSk7CisKKwkJc3dpdGNoIChsaW5lWzBdKSB7CisJCWNhc2UgJ24nOgorCQljYXNlICdOJzoKKwkJCW5ld3ZhbCA9IG5vOworCQkJaWYgKCFsaW5lWzFdIHx8ICFzdHJjbXAoJmxpbmVbMV0sICJvIikpCisJCQkJYnJlYWs7CisJCQljb250aW51ZTsKKwkJY2FzZSAnbSc6CisJCWNhc2UgJ00nOgorCQkJbmV3dmFsID0gbW9kOworCQkJaWYgKCFsaW5lWzFdKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CisJCWNhc2UgJ3knOgorCQljYXNlICdZJzoKKwkJCW5ld3ZhbCA9IHllczsKKwkJCWlmICghbGluZVsxXSB8fCAhc3RyY21wKCZsaW5lWzFdLCAiZXMiKSkKKwkJCQlicmVhazsKKwkJCWNvbnRpbnVlOworCQljYXNlIDA6CisJCQluZXd2YWwgPSBvbGR2YWw7CisJCQlicmVhazsKKwkJY2FzZSAnPyc6CisJCQlnb3RvIGhlbHA7CisJCWRlZmF1bHQ6CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIG5ld3ZhbCkpCisJCQlyZXR1cm4gMDsKK2hlbHA6CisJCXByaW50X2hlbHAobWVudSk7CisJfQorfQorCitzdGF0aWMgaW50IGNvbmZfY2hvaWNlKHN0cnVjdCBtZW51ICptZW51KQoreworCXN0cnVjdCBzeW1ib2wgKnN5bSwgKmRlZl9zeW07CisJc3RydWN0IG1lbnUgKmNoaWxkOworCWJvb2wgaXNfbmV3OworCisJc3ltID0gbWVudS0+c3ltOworCWlzX25ldyA9ICFzeW1faGFzX3ZhbHVlKHN5bSk7CisJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSkgeworCQljb25mX3N5bShtZW51KTsKKwkJc3ltX2NhbGNfdmFsdWUoc3ltKTsKKwkJc3dpdGNoIChzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkpIHsKKwkJY2FzZSBubzoKKwkJCXJldHVybiAxOworCQljYXNlIG1vZDoKKwkJCXJldHVybiAwOworCQljYXNlIHllczoKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkpIHsKKwkJY2FzZSBubzoKKwkJCXJldHVybiAxOworCQljYXNlIG1vZDoKKwkJCXByaW50ZigiJSpzJXNcbiIsIGluZGVudCAtIDEsICIiLCBfKG1lbnVfZ2V0X3Byb21wdChtZW51KSkpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgeWVzOgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwl3aGlsZSAoMSkgeworCQlpbnQgY250LCBkZWY7CisKKwkJcHJpbnRmKCIlKnMlc1xuIiwgaW5kZW50IC0gMSwgIiIsIF8obWVudV9nZXRfcHJvbXB0KG1lbnUpKSk7CisJCWRlZl9zeW0gPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShzeW0pOworCQljbnQgPSBkZWYgPSAwOworCQlsaW5lWzBdID0gMDsKKwkJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7CisJCQlpZiAoIW1lbnVfaXNfdmlzaWJsZShjaGlsZCkpCisJCQkJY29udGludWU7CisJCQlpZiAoIWNoaWxkLT5zeW0pIHsKKwkJCQlwcmludGYoIiUqYyAlc1xuIiwgaW5kZW50LCAnKicsIF8obWVudV9nZXRfcHJvbXB0KGNoaWxkKSkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJY250Kys7CisJCQlpZiAoY2hpbGQtPnN5bSA9PSBkZWZfc3ltKSB7CisJCQkJZGVmID0gY250OworCQkJCXByaW50ZigiJSpjIiwgaW5kZW50LCAnPicpOworCQkJfSBlbHNlCisJCQkJcHJpbnRmKCIlKmMiLCBpbmRlbnQsICcgJyk7CisJCQlwcmludGYoIiAlZC4gJXMiLCBjbnQsIF8obWVudV9nZXRfcHJvbXB0KGNoaWxkKSkpOworCQkJaWYgKGNoaWxkLT5zeW0tPm5hbWUpCisJCQkJcHJpbnRmKCIgKCVzKSIsIGNoaWxkLT5zeW0tPm5hbWUpOworCQkJaWYgKCFzeW1faGFzX3ZhbHVlKGNoaWxkLT5zeW0pKQorCQkJCXByaW50ZihfKCIgKE5FVykiKSk7CisJCQlwcmludGYoIlxuIik7CisJCX0KKwkJcHJpbnRmKF8oIiUqc2Nob2ljZSIpLCBpbmRlbnQgLSAxLCAiIik7CisJCWlmIChjbnQgPT0gMSkgeworCQkJcHJpbnRmKCJbMV06IDFcbiIpOworCQkJZ290byBjb25mX2NoaWxkczsKKwkJfQorCQlwcmludGYoIlsxLSVkIiwgY250KTsKKwkJaWYgKG1lbnVfaGFzX2hlbHAobWVudSkpCisJCQlwcmludGYoIj8iKTsKKwkJcHJpbnRmKCJdOiAiKTsKKwkJc3dpdGNoIChpbnB1dF9tb2RlKSB7CisJCWNhc2Ugb2xkY29uZmlnOgorCQljYXNlIHNpbGVudG9sZGNvbmZpZzoKKwkJCWlmICghaXNfbmV3KSB7CisJCQkJY250ID0gZGVmOworCQkJCXByaW50ZigiJWRcbiIsIGNudCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQljaGVja19zdGRpbigpOworCQljYXNlIG9sZGFza2NvbmZpZzoKKwkJCWZmbHVzaChzdGRvdXQpOworCQkJeGZnZXRzKGxpbmUsIDEyOCwgc3RkaW4pOworCQkJc3RyaXAobGluZSk7CisJCQlpZiAobGluZVswXSA9PSAnPycpIHsKKwkJCQlwcmludF9oZWxwKG1lbnUpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFsaW5lWzBdKQorCQkJCWNudCA9IGRlZjsKKwkJCWVsc2UgaWYgKGlzZGlnaXQobGluZVswXSkpCisJCQkJY250ID0gYXRvaShsaW5lKTsKKwkJCWVsc2UKKwkJCQljb250aW51ZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCWNvbmZfY2hpbGRzOgorCQlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsKKwkJCWlmICghY2hpbGQtPnN5bSB8fCAhbWVudV9pc192aXNpYmxlKGNoaWxkKSkKKwkJCQljb250aW51ZTsKKwkJCWlmICghLS1jbnQpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFjaGlsZCkKKwkJCWNvbnRpbnVlOworCQlpZiAobGluZVswXSAmJiBsaW5lW3N0cmxlbihsaW5lKSAtIDFdID09ICc/JykgeworCQkJcHJpbnRfaGVscChjaGlsZCk7CisJCQljb250aW51ZTsKKwkJfQorCQlzeW1fc2V0X2Nob2ljZV92YWx1ZShzeW0sIGNoaWxkLT5zeW0pOworCQlmb3IgKGNoaWxkID0gY2hpbGQtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7CisJCQlpbmRlbnQgKz0gMjsKKwkJCWNvbmYoY2hpbGQpOworCQkJaW5kZW50IC09IDI7CisJCX0KKwkJcmV0dXJuIDE7CisJfQorfQorCitzdGF0aWMgdm9pZCBjb25mKHN0cnVjdCBtZW51ICptZW51KQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IG1lbnUgKmNoaWxkOworCisJaWYgKCFtZW51X2lzX3Zpc2libGUobWVudSkpCisJCXJldHVybjsKKworCXN5bSA9IG1lbnUtPnN5bTsKKwlwcm9wID0gbWVudS0+cHJvbXB0OworCWlmIChwcm9wKSB7CisJCWNvbnN0IGNoYXIgKnByb21wdDsKKworCQlzd2l0Y2ggKHByb3AtPnR5cGUpIHsKKwkJY2FzZSBQX01FTlU6CisJCQlpZiAoKGlucHV0X21vZGUgPT0gc2lsZW50b2xkY29uZmlnIHx8CisJCQkgICAgIGlucHV0X21vZGUgPT0gbGlzdG5ld2NvbmZpZyB8fAorCQkJICAgICBpbnB1dF9tb2RlID09IG9sZG5vY29uZmlnKSAmJgorCQkJICAgIHJvb3RFbnRyeSAhPSBtZW51KSB7CisJCQkJY2hlY2tfY29uZihtZW51KTsKKwkJCQlyZXR1cm47CisJCQl9CisJCWNhc2UgUF9DT01NRU5UOgorCQkJcHJvbXB0ID0gbWVudV9nZXRfcHJvbXB0KG1lbnUpOworCQkJaWYgKHByb21wdCkKKwkJCQlwcmludGYoIiUqY1xuJSpjICVzXG4lKmNcbiIsCisJCQkJCWluZGVudCwgJyonLAorCQkJCQlpbmRlbnQsICcqJywgXyhwcm9tcHQpLAorCQkJCQlpbmRlbnQsICcqJyk7CisJCWRlZmF1bHQ6CisJCQk7CisJCX0KKwl9CisKKwlpZiAoIXN5bSkKKwkJZ290byBjb25mX2NoaWxkczsKKworCWlmIChzeW1faXNfY2hvaWNlKHN5bSkpIHsKKwkJY29uZl9jaG9pY2UobWVudSk7CisJCWlmIChzeW0tPmN1cnIudHJpICE9IG1vZCkKKwkJCXJldHVybjsKKwkJZ290byBjb25mX2NoaWxkczsKKwl9CisKKwlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCWNhc2UgU19JTlQ6CisJY2FzZSBTX0hFWDoKKwljYXNlIFNfU1RSSU5HOgorCQljb25mX3N0cmluZyhtZW51KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY29uZl9zeW0obWVudSk7CisJCWJyZWFrOworCX0KKworY29uZl9jaGlsZHM6CisJaWYgKHN5bSkKKwkJaW5kZW50ICs9IDI7CisJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KQorCQljb25mKGNoaWxkKTsKKwlpZiAoc3ltKQorCQlpbmRlbnQgLT0gMjsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfY29uZihzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3RydWN0IG1lbnUgKmNoaWxkOworCisJaWYgKCFtZW51X2lzX3Zpc2libGUobWVudSkpCisJCXJldHVybjsKKworCXN5bSA9IG1lbnUtPnN5bTsKKwlpZiAoc3ltICYmICFzeW1faGFzX3ZhbHVlKHN5bSkpIHsKKwkJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSB8fAorCQkgICAgKHN5bV9pc19jaG9pY2Uoc3ltKSAmJiBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkgPT0geWVzKSkgeworCQkJaWYgKGlucHV0X21vZGUgPT0gbGlzdG5ld2NvbmZpZykgeworCQkJCWlmIChzeW0tPm5hbWUgJiYgIXN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkgeworCQkJCQlwcmludGYoIiVzJXNcbiIsIENPTkZJR18sIHN5bS0+bmFtZSk7CisJCQkJfQorCQkJfSBlbHNlIGlmIChpbnB1dF9tb2RlICE9IG9sZG5vY29uZmlnKSB7CisJCQkJaWYgKCFjb25mX2NudCsrKQorCQkJCQlwcmludGYoXygiKlxuKiBSZXN0YXJ0IGNvbmZpZy4uLlxuKlxuIikpOworCQkJCXJvb3RFbnRyeSA9IG1lbnVfZ2V0X3BhcmVudF9tZW51KG1lbnUpOworCQkJCWNvbmYocm9vdEVudHJ5KTsKKwkJCX0KKwkJfQorCX0KKworCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkKKwkJY2hlY2tfY29uZihjaGlsZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0c1tdID0geworCXsib2xkYXNrY29uZmlnIiwgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIG9sZGFza2NvbmZpZ30sCisJeyJvbGRjb25maWciLCAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgb2xkY29uZmlnfSwKKwl7InNpbGVudG9sZGNvbmZpZyIsIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBzaWxlbnRvbGRjb25maWd9LAorCXsiZGVmY29uZmlnIiwgICAgICAgb3B0aW9uYWxfYXJndW1lbnQsIE5VTEwsIGRlZmNvbmZpZ30sCisJeyJzYXZlZGVmY29uZmlnIiwgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgc2F2ZWRlZmNvbmZpZ30sCisJeyJhbGxub2NvbmZpZyIsICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgYWxsbm9jb25maWd9LAorCXsiYWxseWVzY29uZmlnIiwgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIGFsbHllc2NvbmZpZ30sCisJeyJhbGxtb2Rjb25maWciLCAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgYWxsbW9kY29uZmlnfSwKKwl7ImFsbGRlZmNvbmZpZyIsICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBhbGxkZWZjb25maWd9LAorCXsicmFuZGNvbmZpZyIsICAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIHJhbmRjb25maWd9LAorCXsibGlzdG5ld2NvbmZpZyIsICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIGxpc3RuZXdjb25maWd9LAorCXsib2xkbm9jb25maWciLCAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIG9sZG5vY29uZmlnfSwKKwl7TlVMTCwgMCwgTlVMTCwgMH0KK307CisKK2ludCBtYWluKGludCBhYywgY2hhciAqKmF2KQoreworCWludCBvcHQ7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3Qgc3RhdCB0bXBzdGF0OworCisJc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCWJpbmR0ZXh0ZG9tYWluKFBBQ0tBR0UsIExPQ0FMRURJUik7CisJdGV4dGRvbWFpbihQQUNLQUdFKTsKKworCXdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYWMsIGF2LCAiIiwgbG9uZ19vcHRzLCBOVUxMKSkgIT0gLTEpIHsKKwkJaW5wdXRfbW9kZSA9IChlbnVtIGlucHV0X21vZGUpb3B0OworCQlzd2l0Y2ggKG9wdCkgeworCQljYXNlIHNpbGVudG9sZGNvbmZpZzoKKwkJCXN5bmNfa2NvbmZpZyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBkZWZjb25maWc6CisJCWNhc2Ugc2F2ZWRlZmNvbmZpZzoKKwkJCWRlZmNvbmZpZ19maWxlID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWNhc2UgcmFuZGNvbmZpZzoKKwkJeworCQkJc3RydWN0IHRpbWV2YWwgbm93OworCQkJdW5zaWduZWQgaW50IHNlZWQ7CisKKwkJCS8qCisJCQkgKiBVc2UgbWljcm9zZWNvbmRzIGRlcml2ZWQgc2VlZCwKKwkJCSAqIGNvbXBlbnNhdGUgZm9yIHN5c3RlbXMgd2hlcmUgaXQgbWF5IGJlIHplcm8KKwkJCSAqLworCQkJZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOworCisJCQlzZWVkID0gKHVuc2lnbmVkIGludCkoKG5vdy50dl9zZWMgKyAxKSAqIChub3cudHZfdXNlYyArIDEpKTsKKwkJCXNyYW5kKHNlZWQpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSAnPyc6CisJCQlmcHJpbnRmKHN0ZGVyciwgXygiU2VlIFJFQURNRSBmb3IgdXNhZ2UgaW5mb1xuIikpOworCQkJZXhpdCgxKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChhYyA9PSBvcHRpbmQpIHsKKwkJcHJpbnRmKF8oIiVzOiBLY29uZmlnIGZpbGUgbWlzc2luZ1xuIiksIGF2WzBdKTsKKwkJZXhpdCgxKTsKKwl9CisJbmFtZSA9IGF2W29wdGluZF07CisJY29uZl9wYXJzZShuYW1lKTsKKwkvL3pjb25mZHVtcChzdGRvdXQpOworCWlmIChzeW5jX2tjb25maWcpIHsKKwkJbmFtZSA9IGNvbmZfZ2V0X2NvbmZpZ25hbWUoKTsKKwkJaWYgKHN0YXQobmFtZSwgJnRtcHN0YXQpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgXygiKioqXG4iCisJCQkJIioqKiBDb25maWd1cmF0aW9uIGZpbGUgXCIlc1wiIG5vdCBmb3VuZCFcbiIKKwkJCQkiKioqXG4iCisJCQkJIioqKiBQbGVhc2UgY29uZmlndXJlIHdpdGggXCJtZW51Y29uZmlnXCIsIG9yIHVzZSBhXG4iCisJCQkJIioqKiBwcmUtZXhpc3Rpbmcgc2FtcGxlIChzZWUgbGlzdCB3aXRoIFwibGlzdC1zYW1wbGVzXCIpLlxuIgorCQkJCSIqKipcbiIpLCBuYW1lKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwlzd2l0Y2ggKGlucHV0X21vZGUpIHsKKwljYXNlIGRlZmNvbmZpZzoKKwkJaWYgKCFkZWZjb25maWdfZmlsZSkKKwkJCWRlZmNvbmZpZ19maWxlID0gY29uZl9nZXRfZGVmYXVsdF9jb25mbmFtZSgpOworCQlpZiAoY29uZl9yZWFkKGRlZmNvbmZpZ19maWxlKSkgeworCQkJcHJpbnRmKF8oIioqKlxuIgorCQkJCSIqKiogQ2FuJ3QgZmluZCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gXCIlc1wiIVxuIgorCQkJCSIqKipcbiIpLCBkZWZjb25maWdfZmlsZSk7CisJCQlleGl0KDEpOworCQl9CisJCWJyZWFrOworCWNhc2Ugc2F2ZWRlZmNvbmZpZzoKKwljYXNlIHNpbGVudG9sZGNvbmZpZzoKKwljYXNlIG9sZGFza2NvbmZpZzoKKwljYXNlIG9sZGNvbmZpZzoKKwljYXNlIGxpc3RuZXdjb25maWc6CisJY2FzZSBvbGRub2NvbmZpZzoKKwkJY29uZl9yZWFkKE5VTEwpOworCQlicmVhazsKKwljYXNlIGFsbG5vY29uZmlnOgorCWNhc2UgYWxseWVzY29uZmlnOgorCWNhc2UgYWxsbW9kY29uZmlnOgorCWNhc2UgYWxsZGVmY29uZmlnOgorCWNhc2UgcmFuZGNvbmZpZzoKKwkJbmFtZSA9IGdldGVudigiS0NPTkZJR19BTExDT05GSUciKTsKKwkJaWYgKG5hbWUgJiYgIXN0YXQobmFtZSwgJnRtcHN0YXQpKSB7CisJCQljb25mX3JlYWRfc2ltcGxlKG5hbWUsIFNfREVGX1VTRVIpOworCQkJYnJlYWs7CisJCX0KKwkJc3dpdGNoIChpbnB1dF9tb2RlKSB7CisJCWNhc2UgYWxsbm9jb25maWc6CW5hbWUgPSAiYWxsbm8uY29uZmlnIjsgYnJlYWs7CisJCWNhc2UgYWxseWVzY29uZmlnOgluYW1lID0gImFsbHllcy5jb25maWciOyBicmVhazsKKwkJY2FzZSBhbGxtb2Rjb25maWc6CW5hbWUgPSAiYWxsbW9kLmNvbmZpZyI7IGJyZWFrOworCQljYXNlIGFsbGRlZmNvbmZpZzoJbmFtZSA9ICJhbGxkZWYuY29uZmlnIjsgYnJlYWs7CisJCWNhc2UgcmFuZGNvbmZpZzoJbmFtZSA9ICJhbGxyYW5kb20uY29uZmlnIjsgYnJlYWs7CisJCWRlZmF1bHQ6IGJyZWFrOworCQl9CisJCWlmICghc3RhdChuYW1lLCAmdG1wc3RhdCkpCisJCQljb25mX3JlYWRfc2ltcGxlKG5hbWUsIFNfREVGX1VTRVIpOworCQllbHNlIGlmICghc3RhdCgiYWxsLmNvbmZpZyIsICZ0bXBzdGF0KSkKKwkJCWNvbmZfcmVhZF9zaW1wbGUoImFsbC5jb25maWciLCBTX0RFRl9VU0VSKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKHN5bmNfa2NvbmZpZykgeworCQlpZiAoY29uZl9nZXRfY2hhbmdlZCgpKSB7CisJCQluYW1lID0gZ2V0ZW52KCJLQ09ORklHX05PU0lMRU5UVVBEQVRFIik7CisJCQlpZiAobmFtZSAmJiAqbmFtZSkgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQlfKCJcbioqKiBUaGUgY29uZmlndXJhdGlvbiByZXF1aXJlcyBleHBsaWNpdCB1cGRhdGUuXG5cbiIpKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfQorCQl2YWxpZF9zdGRpbiA9IGlzYXR0eSgwKSAmJiBpc2F0dHkoMSkgJiYgaXNhdHR5KDIpOworCX0KKworCXN3aXRjaCAoaW5wdXRfbW9kZSkgeworCWNhc2UgYWxsbm9jb25maWc6CisJCWNvbmZfc2V0X2FsbF9uZXdfc3ltYm9scyhkZWZfbm8pOworCQlicmVhazsKKwljYXNlIGFsbHllc2NvbmZpZzoKKwkJY29uZl9zZXRfYWxsX25ld19zeW1ib2xzKGRlZl95ZXMpOworCQlicmVhazsKKwljYXNlIGFsbG1vZGNvbmZpZzoKKwkJY29uZl9zZXRfYWxsX25ld19zeW1ib2xzKGRlZl9tb2QpOworCQlicmVhazsKKwljYXNlIGFsbGRlZmNvbmZpZzoKKwkJY29uZl9zZXRfYWxsX25ld19zeW1ib2xzKGRlZl9kZWZhdWx0KTsKKwkJYnJlYWs7CisJY2FzZSByYW5kY29uZmlnOgorCQljb25mX3NldF9hbGxfbmV3X3N5bWJvbHMoZGVmX3JhbmRvbSk7CisJCWJyZWFrOworCWNhc2UgZGVmY29uZmlnOgorCQljb25mX3NldF9hbGxfbmV3X3N5bWJvbHMoZGVmX2RlZmF1bHQpOworCQlicmVhazsKKwljYXNlIHNhdmVkZWZjb25maWc6CisJCWJyZWFrOworCWNhc2Ugb2xkYXNrY29uZmlnOgorCQlyb290RW50cnkgPSAmcm9vdG1lbnU7CisJCWNvbmYoJnJvb3RtZW51KTsKKwkJaW5wdXRfbW9kZSA9IHNpbGVudG9sZGNvbmZpZzsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBvbGRjb25maWc6CisJY2FzZSBsaXN0bmV3Y29uZmlnOgorCWNhc2Ugb2xkbm9jb25maWc6CisJY2FzZSBzaWxlbnRvbGRjb25maWc6CisJCS8qIFVwZGF0ZSB1bnRpbCBhIGxvb3AgY2F1c2VkIG5vIG1vcmUgY2hhbmdlcyAqLworCQlkbyB7CisJCQljb25mX2NudCA9IDA7CisJCQljaGVja19jb25mKCZyb290bWVudSk7CisJCX0gd2hpbGUgKGNvbmZfY250ICYmCisJCQkgKGlucHV0X21vZGUgIT0gbGlzdG5ld2NvbmZpZyAmJgorCQkJICBpbnB1dF9tb2RlICE9IG9sZG5vY29uZmlnKSk7CisJCWJyZWFrOworCX0KKworCWlmIChzeW5jX2tjb25maWcpIHsKKwkJLyogc2lsZW50b2xkY29uZmlnIGlzIHVzZWQgZHVyaW5nIHRoZSBidWlsZCBzbyB3ZSBzaGFsbCB1cGRhdGUgYXV0b2NvbmYuCisJCSAqIEFsbCBvdGhlciBjb21tYW5kcyBhcmUgb25seSB1c2VkIHRvIGdlbmVyYXRlIGEgY29uZmlnLgorCQkgKi8KKwkJaWYgKGNvbmZfZ2V0X2NoYW5nZWQoKSAmJiBjb25mX3dyaXRlKE5VTEwpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgXygiXG4qKiogRXJyb3IgZHVyaW5nIHdyaXRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24uXG5cbiIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJLyogSW4gY3Jvc3N0b29sLU5HLCB3ZSBkbyBub3QgdXNlIHRoZSBhdXRvY29uZiBzdHVmZiAqLworCX0gZWxzZSBpZiAoaW5wdXRfbW9kZSA9PSBzYXZlZGVmY29uZmlnKSB7CisJCWlmIChjb25mX3dyaXRlX2RlZmNvbmZpZyhkZWZjb25maWdfZmlsZSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJuKioqIEVycm9yIHdoaWxlIHNhdmluZyBkZWZjb25maWcgdG86ICVzXG5cbiIpLAorCQkJICAgICAgICBkZWZjb25maWdfZmlsZSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0gZWxzZSBpZiAoaW5wdXRfbW9kZSAhPSBsaXN0bmV3Y29uZmlnKSB7CisJCWlmIChjb25mX3dyaXRlKE5VTEwpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgXygiXG4qKiogRXJyb3IgZHVyaW5nIHdyaXRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24uXG5cbiIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisvKgorICogSGVscGVyIGZ1bmN0aW9uIHRvIGZhY2lsaXRhdGUgZmdldHMoKSBieSBKZWFuIFNhY3Jlbi4KKyAqLwordm9pZCB4ZmdldHMoc3RyLCBzaXplLCBpbikKKwljaGFyICpzdHI7CisJaW50IHNpemU7CisJRklMRSAqaW47Cit7CisJaWYgKGZnZXRzKHN0ciwgc2l6ZSwgaW4pID09IE5VTEwpCisJCWZwcmludGYoc3RkZXJyLCAiXG5FcnJvciBpbiByZWFkaW5nIG9yIGVuZCBvZiBmaWxlLlxuIik7Cit9CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2tjb25maWcvY29uZmRhdGEuYyBiL2xpYi9jdC1uZy0xLjEzLjQva2NvbmZpZy9jb25mZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYjk3YjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2tjb25maWcvY29uZmRhdGEuYwpAQCAtMCwwICsxLDEwNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisgKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIuMC4KKyAqLworCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2RlZmluZSBMS0NfRElSRUNUX0xJTksKKyNpbmNsdWRlICJsa2MuaCIKKworc3RhdGljIHZvaWQgY29uZl93YXJuaW5nKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKKworc3RhdGljIHZvaWQgY29uZl9tZXNzYWdlKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbmZfZmlsZW5hbWU7CitzdGF0aWMgaW50IGNvbmZfbGluZW5vLCBjb25mX3dhcm5pbmdzLCBjb25mX3Vuc2F2ZWQ7CisKK2NvbnN0IGNoYXIgY29uZl9kZWZuYW1lW10gPSAiYXJjaC8kQVJDSC9kZWZjb25maWciOworCitzdGF0aWMgdm9pZCBjb25mX3dhcm5pbmcoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwl2YV9zdGFydChhcCwgZm10KTsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOndhcm5pbmc6ICIsIGNvbmZfZmlsZW5hbWUsIGNvbmZfbGluZW5vKTsKKwl2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwl2YV9lbmQoYXApOworCWNvbmZfd2FybmluZ3MrKzsKK30KKworc3RhdGljIHZvaWQgY29uZl9kZWZhdWx0X21lc3NhZ2VfY2FsbGJhY2soY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQoreworCXByaW50ZigiI1xuIyAiKTsKKwl2cHJpbnRmKGZtdCwgYXApOworCXByaW50ZigiXG4jXG4iKTsKK30KKworc3RhdGljIHZvaWQgKCpjb25mX21lc3NhZ2VfY2FsbGJhY2spIChjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApID0KKwljb25mX2RlZmF1bHRfbWVzc2FnZV9jYWxsYmFjazsKK3ZvaWQgY29uZl9zZXRfbWVzc2FnZV9jYWxsYmFjayh2b2lkICgqZm4pIChjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApKQoreworCWNvbmZfbWVzc2FnZV9jYWxsYmFjayA9IGZuOworfQorCitzdGF0aWMgdm9pZCBjb25mX21lc3NhZ2UoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCWlmIChjb25mX21lc3NhZ2VfY2FsbGJhY2spCisJCWNvbmZfbWVzc2FnZV9jYWxsYmFjayhmbXQsIGFwKTsKK30KKworY29uc3QgY2hhciAqY29uZl9nZXRfY29uZmlnbmFtZSh2b2lkKQoreworCWNoYXIgKm5hbWUgPSBnZXRlbnYoIktDT05GSUdfQ09ORklHIik7CisKKwlyZXR1cm4gbmFtZSA/IG5hbWUgOiAiLmNvbmZpZyI7Cit9CisKK2NvbnN0IGNoYXIgKmNvbmZfZ2V0X2F1dG9jb25maWdfbmFtZSh2b2lkKQoreworCWNoYXIgKm5hbWUgPSBnZXRlbnYoIktDT05GSUdfQVVUT0NPTkZJRyIpOworCisJcmV0dXJuIG5hbWUgPyBuYW1lIDogImluY2x1ZGUvY29uZmlnL2F1dG8uY29uZiI7Cit9CisKK3N0YXRpYyBjaGFyICpjb25mX2V4cGFuZF92YWx1ZShjb25zdCBjaGFyICppbikKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJY29uc3QgY2hhciAqc3JjOworCXN0YXRpYyBjaGFyIHJlc192YWx1ZVtTWU1CT0xfTUFYTEVOR1RIXTsKKwljaGFyICpkc3QsIG5hbWVbU1lNQk9MX01BWExFTkdUSF07CisKKwlyZXNfdmFsdWVbMF0gPSAwOworCWRzdCA9IG5hbWU7CisJd2hpbGUgKChzcmMgPSBzdHJjaHIoaW4sICckJykpKSB7CisJCXN0cm5jYXQocmVzX3ZhbHVlLCBpbiwgc3JjIC0gaW4pOworCQlzcmMrKzsKKwkJZHN0ID0gbmFtZTsKKwkJd2hpbGUgKGlzYWxudW0oKnNyYykgfHwgKnNyYyA9PSAnXycpCisJCQkqZHN0KysgPSAqc3JjKys7CisJCSpkc3QgPSAwOworCQlzeW0gPSBzeW1fbG9va3VwKG5hbWUsIDApOworCQlzeW1fY2FsY192YWx1ZShzeW0pOworCQlzdHJjYXQocmVzX3ZhbHVlLCBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pKTsKKwkJaW4gPSBzcmM7CisJfQorCXN0cmNhdChyZXNfdmFsdWUsIGluKTsKKworCXJldHVybiByZXNfdmFsdWU7Cit9CisKK2NoYXIgKmNvbmZfZ2V0X2RlZmF1bHRfY29uZm5hbWUodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RhdCBidWY7CisJc3RhdGljIGNoYXIgZnVsbG5hbWVbUEFUSF9NQVgrMV07CisJY2hhciAqZW52LCAqbmFtZTsKKworCW5hbWUgPSBjb25mX2V4cGFuZF92YWx1ZShjb25mX2RlZm5hbWUpOworCWVudiA9IGdldGVudihTUkNUUkVFKTsKKwlpZiAoZW52KSB7CisJCXNwcmludGYoZnVsbG5hbWUsICIlcy8lcyIsIGVudiwgbmFtZSk7CisJCWlmICghc3RhdChmdWxsbmFtZSwgJmJ1ZikpCisJCQlyZXR1cm4gZnVsbG5hbWU7CisJfQorCXJldHVybiBuYW1lOworfQorCitzdGF0aWMgaW50IGNvbmZfc2V0X3N5bV92YWwoc3RydWN0IHN5bWJvbCAqc3ltLCBpbnQgZGVmLCBpbnQgZGVmX2ZsYWdzLCBjaGFyICpwKQoreworCWNoYXIgKnAyOworCisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNfVFJJU1RBVEU6CisJCWlmIChwWzBdID09ICdtJykgeworCQkJc3ltLT5kZWZbZGVmXS50cmkgPSBtb2Q7CisJCQlzeW0tPmZsYWdzIHw9IGRlZl9mbGFnczsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBTX0JPT0xFQU46CisJCWlmIChwWzBdID09ICd5JykgeworCQkJc3ltLT5kZWZbZGVmXS50cmkgPSB5ZXM7CisJCQlzeW0tPmZsYWdzIHw9IGRlZl9mbGFnczsKKwkJCWJyZWFrOworCQl9CisJCWlmIChwWzBdID09ICduJykgeworCQkJc3ltLT5kZWZbZGVmXS50cmkgPSBubzsKKwkJCXN5bS0+ZmxhZ3MgfD0gZGVmX2ZsYWdzOworCQkJYnJlYWs7CisJCX0KKwkJY29uZl93YXJuaW5nKCJzeW1ib2wgdmFsdWUgJyVzJyBpbnZhbGlkIGZvciAlcyIsIHAsIHN5bS0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgU19PVEhFUjoKKwkJaWYgKCpwICE9ICciJykgeworCQkJZm9yIChwMiA9IHA7ICpwMiAmJiAhaXNzcGFjZSgqcDIpOyBwMisrKQorCQkJCTsKKwkJCXN5bS0+dHlwZSA9IFNfU1RSSU5HOworCQkJZ290byBkb25lOworCQl9CisJY2FzZSBTX1NUUklORzoKKwkJaWYgKCpwKysgIT0gJyInKQorCQkJYnJlYWs7CisJCWZvciAocDIgPSBwOyAocDIgPSBzdHJwYnJrKHAyLCAiXCJcXCIpKTsgcDIrKykgeworCQkJaWYgKCpwMiA9PSAnIicpIHsKKwkJCQkqcDIgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJbWVtbW92ZShwMiwgcDIgKyAxLCBzdHJsZW4ocDIpKTsKKwkJfQorCQlpZiAoIXAyKSB7CisJCQljb25mX3dhcm5pbmcoImludmFsaWQgc3RyaW5nIGZvdW5kIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCWNhc2UgU19JTlQ6CisJY2FzZSBTX0hFWDoKKwlkb25lOgorCQlpZiAoc3ltX3N0cmluZ192YWxpZChzeW0sIHApKSB7CisJCQlzeW0tPmRlZltkZWZdLnZhbCA9IHN0cmR1cChwKTsKKwkJCXN5bS0+ZmxhZ3MgfD0gZGVmX2ZsYWdzOworCQl9IGVsc2UgeworCQkJY29uZl93YXJuaW5nKCJzeW1ib2wgdmFsdWUgJyVzJyBpbnZhbGlkIGZvciAlcyIsIHAsIHN5bS0+bmFtZSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQk7CisJfQorCXJldHVybiAwOworfQorCitpbnQgY29uZl9yZWFkX3NpbXBsZShjb25zdCBjaGFyICpuYW1lLCBpbnQgZGVmKQoreworCUZJTEUgKmluID0gTlVMTDsKKwljaGFyIGxpbmVbMTAyNF07CisJY2hhciAqcCwgKnAyOworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlpbnQgaSwgZGVmX2ZsYWdzOworCisJaWYgKG5hbWUpIHsKKwkJaW4gPSB6Y29uZl9mb3BlbihuYW1lKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisKKwkJbmFtZSA9IGNvbmZfZ2V0X2NvbmZpZ25hbWUoKTsKKwkJaW4gPSB6Y29uZl9mb3BlbihuYW1lKTsKKwkJaWYgKGluKQorCQkJZ290byBsb2FkOworCQlzeW1fYWRkX2NoYW5nZV9jb3VudCgxKTsKKwkJaWYgKCFzeW1fZGVmY29uZmlnX2xpc3QpIHsKKwkJCWlmIChtb2R1bGVzX3N5bSkKKwkJCQlzeW1fY2FsY192YWx1ZShtb2R1bGVzX3N5bSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWZvcl9hbGxfZGVmYXVsdHMoc3ltX2RlZmNvbmZpZ19saXN0LCBwcm9wKSB7CisJCQlpZiAoZXhwcl9jYWxjX3ZhbHVlKHByb3AtPnZpc2libGUuZXhwcikgPT0gbm8gfHwKKwkJCSAgICBwcm9wLT5leHByLT50eXBlICE9IEVfU1lNQk9MKQorCQkJCWNvbnRpbnVlOworCQkJbmFtZSA9IGNvbmZfZXhwYW5kX3ZhbHVlKHByb3AtPmV4cHItPmxlZnQuc3ltLT5uYW1lKTsKKwkJCWluID0gemNvbmZfZm9wZW4obmFtZSk7CisJCQlpZiAoaW4pIHsKKwkJCQljb25mX21lc3NhZ2UoXygidXNpbmcgZGVmYXVsdHMgZm91bmQgaW4gJXMiKSwKKwkJCQkJIG5hbWUpOworCQkJCWdvdG8gbG9hZDsKKwkJCX0KKwkJfQorCX0KKwlpZiAoIWluKQorCQlyZXR1cm4gMTsKKworbG9hZDoKKwljb25mX2ZpbGVuYW1lID0gbmFtZTsKKwljb25mX2xpbmVubyA9IDA7CisJY29uZl93YXJuaW5ncyA9IDA7CisJY29uZl91bnNhdmVkID0gMDsKKworCWRlZl9mbGFncyA9IFNZTUJPTF9ERUYgPDwgZGVmOworCWZvcl9hbGxfc3ltYm9scyhpLCBzeW0pIHsKKwkJc3ltLT5mbGFncyB8PSBTWU1CT0xfQ0hBTkdFRDsKKwkJc3ltLT5mbGFncyAmPSB+KGRlZl9mbGFnc3xTWU1CT0xfVkFMSUQpOworCQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKQorCQkJc3ltLT5mbGFncyB8PSBkZWZfZmxhZ3M7CisJCXN3aXRjaCAoc3ltLT50eXBlKSB7CisJCWNhc2UgU19JTlQ6CisJCWNhc2UgU19IRVg6CisJCWNhc2UgU19TVFJJTkc6CisJCQlpZiAoc3ltLT5kZWZbZGVmXS52YWwpCisJCQkJZnJlZShzeW0tPmRlZltkZWZdLnZhbCk7CisJCWRlZmF1bHQ6CisJCQlzeW0tPmRlZltkZWZdLnZhbCA9IE5VTEw7CisJCQlzeW0tPmRlZltkZWZdLnRyaSA9IG5vOworCQl9CisJfQorCisJd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgaW4pKSB7CisJCWNvbmZfbGluZW5vKys7CisJCXN5bSA9IE5VTEw7CisJCWlmIChsaW5lWzBdID09ICcjJykgeworCQkJaWYgKG1lbWNtcChsaW5lICsgMiwgQ09ORklHXywgc3RybGVuKENPTkZJR18pKSkKKwkJCQljb250aW51ZTsKKwkJCXAgPSBzdHJjaHIobGluZSArIDIgKyBzdHJsZW4oQ09ORklHXyksICcgJyk7CisJCQlpZiAoIXApCisJCQkJY29udGludWU7CisJCQkqcCsrID0gMDsKKwkJCWlmIChzdHJuY21wKHAsICJpcyBub3Qgc2V0IiwgMTApKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGRlZiA9PSBTX0RFRl9VU0VSKSB7CisJCQkJc3ltID0gc3ltX2ZpbmQobGluZSArIDIgKyBzdHJsZW4oQ09ORklHXykpOworCQkJCWlmICghc3ltKSB7CisJCQkJCXN5bV9hZGRfY2hhbmdlX2NvdW50KDEpOworCQkJCQlnb3RvIHNldHN5bTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXN5bSA9IHN5bV9sb29rdXAobGluZSArIDIgKyBzdHJsZW4oQ09ORklHXyksIDApOworCQkJCWlmIChzeW0tPnR5cGUgPT0gU19VTktOT1dOKQorCQkJCQlzeW0tPnR5cGUgPSBTX0JPT0xFQU47CisJCQl9CisJCQlpZiAoc3ltLT5mbGFncyAmIGRlZl9mbGFncykgeworCQkJCWNvbmZfd2FybmluZygib3ZlcnJpZGU6IHJlYXNzaWduaW5nIHRvIHN5bWJvbCAlcyIsIHN5bS0+bmFtZSk7CisJCQl9CisJCQlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCQkJY2FzZSBTX0JPT0xFQU46CisJCQljYXNlIFNfVFJJU1RBVEU6CisJCQkJc3ltLT5kZWZbZGVmXS50cmkgPSBubzsKKwkJCQlzeW0tPmZsYWdzIHw9IGRlZl9mbGFnczsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJOworCQkJfQorCQl9IGVsc2UgaWYgKG1lbWNtcChsaW5lLCBDT05GSUdfLCBzdHJsZW4oQ09ORklHXykpID09IDApIHsKKwkJCXAgPSBzdHJjaHIobGluZSArIHN0cmxlbihDT05GSUdfKSwgJz0nKTsKKwkJCWlmICghcCkKKwkJCQljb250aW51ZTsKKwkJCSpwKysgPSAwOworCQkJcDIgPSBzdHJjaHIocCwgJ1xuJyk7CisJCQlpZiAocDIpIHsKKwkJCQkqcDItLSA9IDA7CisJCQkJaWYgKCpwMiA9PSAnXHInKQorCQkJCQkqcDIgPSAwOworCQkJfQorCQkJaWYgKGRlZiA9PSBTX0RFRl9VU0VSKSB7CisJCQkJc3ltID0gc3ltX2ZpbmQobGluZSArIHN0cmxlbihDT05GSUdfKSk7CisJCQkJaWYgKCFzeW0pIHsKKwkJCQkJc3ltX2FkZF9jaGFuZ2VfY291bnQoMSk7CisJCQkJCWdvdG8gc2V0c3ltOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJc3ltID0gc3ltX2xvb2t1cChsaW5lICsgc3RybGVuKENPTkZJR18pLCAwKTsKKwkJCQlpZiAoc3ltLT50eXBlID09IFNfVU5LTk9XTikKKwkJCQkJc3ltLT50eXBlID0gU19PVEhFUjsKKwkJCX0KKwkJCWlmIChzeW0tPmZsYWdzICYgZGVmX2ZsYWdzKSB7CisJCQkJY29uZl93YXJuaW5nKCJvdmVycmlkZTogcmVhc3NpZ25pbmcgdG8gc3ltYm9sICVzIiwgc3ltLT5uYW1lKTsKKwkJCX0KKwkJCWlmIChjb25mX3NldF9zeW1fdmFsKHN5bSwgZGVmLCBkZWZfZmxhZ3MsIHApKQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJaWYgKGxpbmVbMF0gIT0gJ1xyJyAmJiBsaW5lWzBdICE9ICdcbicpCisJCQkJY29uZl93YXJuaW5nKCJ1bmV4cGVjdGVkIGRhdGEiKTsKKwkJCWNvbnRpbnVlOworCQl9CitzZXRzeW06CisJCWlmIChzeW0gJiYgc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pKSB7CisJCQlzdHJ1Y3Qgc3ltYm9sICpjcyA9IHByb3BfZ2V0X3N5bWJvbChzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSkpOworCQkJc3dpdGNoIChzeW0tPmRlZltkZWZdLnRyaSkgeworCQkJY2FzZSBubzoKKwkJCQlicmVhazsKKwkJCWNhc2UgbW9kOgorCQkJCWlmIChjcy0+ZGVmW2RlZl0udHJpID09IHllcykgeworCQkJCQljb25mX3dhcm5pbmcoIiVzIGNyZWF0ZXMgaW5jb25zaXN0ZW50IGNob2ljZSBzdGF0ZSIsIHN5bS0+bmFtZSk7CisJCQkJCWNzLT5mbGFncyAmPSB+ZGVmX2ZsYWdzOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgeWVzOgorCQkJCWlmIChjcy0+ZGVmW2RlZl0udHJpICE9IG5vKQorCQkJCQljb25mX3dhcm5pbmcoIm92ZXJyaWRlOiAlcyBjaGFuZ2VzIGNob2ljZSBzdGF0ZSIsIHN5bS0+bmFtZSk7CisJCQkJY3MtPmRlZltkZWZdLnZhbCA9IHN5bTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNzLT5kZWZbZGVmXS50cmkgPSBFWFBSX09SKGNzLT5kZWZbZGVmXS50cmksIHN5bS0+ZGVmW2RlZl0udHJpKTsKKwkJfQorCX0KKwlmY2xvc2UoaW4pOworCisJaWYgKG1vZHVsZXNfc3ltKQorCQlzeW1fY2FsY192YWx1ZShtb2R1bGVzX3N5bSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjb25mX3JlYWQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0sICpjaG9pY2Vfc3ltOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3QgZXhwciAqZTsKKwlpbnQgaSwgZmxhZ3M7CisKKwlzeW1fc2V0X2NoYW5nZV9jb3VudCgwKTsKKworCWlmIChjb25mX3JlYWRfc2ltcGxlKG5hbWUsIFNfREVGX1VTRVIpKQorCQlyZXR1cm4gMTsKKworCWZvcl9hbGxfc3ltYm9scyhpLCBzeW0pIHsKKwkJc3ltX2NhbGNfdmFsdWUoc3ltKTsKKwkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSB8fCAoc3ltLT5mbGFncyAmIFNZTUJPTF9BVVRPKSkKKwkJCWdvdG8gc3ltX29rOworCQlpZiAoc3ltX2hhc192YWx1ZShzeW0pICYmIChzeW0tPmZsYWdzICYgU1lNQk9MX1dSSVRFKSkgeworCQkJLyogY2hlY2sgdGhhdCBjYWxjdWxhdGVkIHZhbHVlIGFncmVlcyB3aXRoIHNhdmVkIHZhbHVlICovCisJCQlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCQkJY2FzZSBTX0JPT0xFQU46CisJCQljYXNlIFNfVFJJU1RBVEU6CisJCQkJaWYgKHN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSAhPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkpCisJCQkJCWJyZWFrOworCQkJCWlmICghc3ltX2lzX2Nob2ljZShzeW0pKQorCQkJCQlnb3RvIHN5bV9vazsKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKCFzdHJjbXAoc3ltLT5jdXJyLnZhbCwgc3ltLT5kZWZbU19ERUZfVVNFUl0udmFsKSkKKwkJCQkJZ290byBzeW1fb2s7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSBpZiAoIXN5bV9oYXNfdmFsdWUoc3ltKSAmJiAhKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV1JJVEUpKQorCQkJLyogbm8gcHJldmlvdXMgdmFsdWUgYW5kIG5vdCBzYXZlZCAqLworCQkJZ290byBzeW1fb2s7CisJCWNvbmZfdW5zYXZlZCsrOworCQkvKiBtYXliZSBwcmludCB2YWx1ZSBpbiB2ZXJib3NlIG1vZGUuLi4gKi8KKwlzeW1fb2s6CisJCWlmICghc3ltX2lzX2Nob2ljZShzeW0pKQorCQkJY29udGludWU7CisJCS8qIFRoZSBjaG9pY2Ugc3ltYm9sIG9ubHkgaGFzIGEgc2V0IHZhbHVlIChhbmQgdGh1cyBpcyBub3QgbmV3KQorCQkgKiBpZiBhbGwgaXRzIHZpc2libGUgY2hpbGRzIGhhdmUgdmFsdWVzLgorCQkgKi8KKwkJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKTsKKwkJZmxhZ3MgPSBzeW0tPmZsYWdzOworCQlleHByX2xpc3RfZm9yX2VhY2hfc3ltKHByb3AtPmV4cHIsIGUsIGNob2ljZV9zeW0pCisJCQlpZiAoY2hvaWNlX3N5bS0+dmlzaWJsZSAhPSBubykKKwkJCQlmbGFncyAmPSBjaG9pY2Vfc3ltLT5mbGFnczsKKwkJc3ltLT5mbGFncyAmPSBmbGFncyB8IH5TWU1CT0xfREVGX1VTRVI7CisJfQorCisJZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkgeworCQlpZiAoc3ltX2hhc192YWx1ZShzeW0pICYmICFzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkpIHsKKwkJCS8qIFJlc2V0IHZhbHVlcyBvZiBnZW5lcmF0ZXMgdmFsdWVzLCBzbyB0aGV5J2xsIGFwcGVhcgorCQkJICogYXMgbmV3LCBpZiB0aGV5IHNob3VsZCBiZWNvbWUgdmlzaWJsZSwgYnV0IHRoYXQKKwkJCSAqIGRvZXNuJ3QgcXVpdGUgd29yayBpZiB0aGUgS2NvbmZpZyBhbmQgdGhlIHNhdmVkCisJCQkgKiBjb25maWd1cmF0aW9uIGRpc2FncmVlLgorCQkJICovCisJCQlpZiAoc3ltLT52aXNpYmxlID09IG5vICYmICFjb25mX3Vuc2F2ZWQpCisJCQkJc3ltLT5mbGFncyAmPSB+U1lNQk9MX0RFRl9VU0VSOworCQkJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwkJCWNhc2UgU19TVFJJTkc6CisJCQljYXNlIFNfSU5UOgorCQkJY2FzZSBTX0hFWDoKKwkJCQkvKiBSZXNldCBhIHN0cmluZyB2YWx1ZSBpZiBpdCdzIG91dCBvZiByYW5nZSAqLworCQkJCWlmIChzeW1fc3RyaW5nX3dpdGhpbl9yYW5nZShzeW0sIHN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbCkpCisJCQkJCWJyZWFrOworCQkJCXN5bS0+ZmxhZ3MgJj0gfihTWU1CT0xfVkFMSUR8U1lNQk9MX0RFRl9VU0VSKTsKKwkJCQljb25mX3Vuc2F2ZWQrKzsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlzeW1fYWRkX2NoYW5nZV9jb3VudChjb25mX3dhcm5pbmdzIHx8IGNvbmZfdW5zYXZlZCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogV3JpdGUgYSBTX1NUUklORyAqLworc3RhdGljIHZvaWQgY29uZl93cml0ZV9zdHJpbmcoYm9vbCBoZWFkZXJmaWxlLCBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyLCBGSUxFICpvdXQpCit7CisJaW50IGw7CisJaWYgKGhlYWRlcmZpbGUpCisJCWZwcmludGYob3V0LCAiI2RlZmluZSAlcyVzIFwiIiwgQ09ORklHXywgbmFtZSk7CisJZWxzZQorCQlmcHJpbnRmKG91dCwgIiVzJXM9XCIiLCBDT05GSUdfLCBuYW1lKTsKKworCXdoaWxlICgxKSB7CisJCWwgPSBzdHJjc3BuKHN0ciwgIlwiXFwiKTsKKwkJaWYgKGwpIHsKKwkJCXhmd3JpdGUoc3RyLCBsLCAxLCBvdXQpOworCQkJc3RyICs9IGw7CisJCX0KKwkJaWYgKCEqc3RyKQorCQkJYnJlYWs7CisJCWZwcmludGYob3V0LCAiXFwlYyIsICpzdHIrKyk7CisJfQorCWZwdXRzKCJcIlxuIiwgb3V0KTsKK30KKworc3RhdGljIHZvaWQgY29uZl93cml0ZV9zeW1ib2woc3RydWN0IHN5bWJvbCAqc3ltLCBGSUxFICpvdXQsIGJvb2wgd3JpdGVfbm8pCit7CisJY29uc3QgY2hhciAqc3RyOworCisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNfQk9PTEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6CisJCXN3aXRjaCAoc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pKSB7CisJCWNhc2Ugbm86CisJCQlpZiAod3JpdGVfbm8pCisJCQkJZnByaW50ZihvdXQsICIjICVzJXMgaXMgbm90IHNldFxuIiwKKwkJCQkgICAgQ09ORklHXywgc3ltLT5uYW1lKTsKKwkJCWJyZWFrOworCQljYXNlIG1vZDoKKwkJCWZwcmludGYob3V0LCAiJXMlcz1tXG4iLCBDT05GSUdfLCBzeW0tPm5hbWUpOworCQkJYnJlYWs7CisJCWNhc2UgeWVzOgorCQkJZnByaW50ZihvdXQsICIlcyVzPXlcbiIsIENPTkZJR18sIHN5bS0+bmFtZSk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFNfU1RSSU5HOgorCQljb25mX3dyaXRlX3N0cmluZyhmYWxzZSwgc3ltLT5uYW1lLCBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pLCBvdXQpOworCQlicmVhazsKKwljYXNlIFNfSEVYOgorCWNhc2UgU19JTlQ6CisJCXN0ciA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSk7CisJCWZwcmludGYob3V0LCAiJXMlcz0lc1xuIiwgQ09ORklHXywgc3ltLT5uYW1lLCBzdHIpOworCQlicmVhazsKKwljYXNlIFNfT1RIRVI6CisJY2FzZSBTX1VOS05PV046CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIFdyaXRlIG91dCBhIG1pbmltYWwgY29uZmlnLgorICogQWxsIHZhbHVlcyB0aGF0IGhhcyBkZWZhdWx0IHZhbHVlcyBhcmUgc2tpcHBlZCBhcyB0aGlzIGlzIHJlZHVuZGFudC4KKyAqLworaW50IGNvbmZfd3JpdGVfZGVmY29uZmlnKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3QgbWVudSAqbWVudTsKKwlGSUxFICpvdXQ7CisKKwlvdXQgPSBmb3BlbihmaWxlbmFtZSwgInciKTsKKwlpZiAoIW91dCkKKwkJcmV0dXJuIDE7CisKKwlzeW1fY2xlYXJfYWxsX3ZhbGlkKCk7CisKKwkvKiBUcmF2ZXJzZSBhbGwgbWVudXMgdG8gZmluZCBhbGwgcmVsZXZhbnQgc3ltYm9scyAqLworCW1lbnUgPSByb290bWVudS5saXN0OworCisJd2hpbGUgKG1lbnUgIT0gTlVMTCkKKwl7CisJCXN5bSA9IG1lbnUtPnN5bTsKKwkJaWYgKHN5bSA9PSBOVUxMKSB7CisJCQlpZiAoIW1lbnVfaXNfdmlzaWJsZShtZW51KSkKKwkJCQlnb3RvIG5leHRfbWVudTsKKwkJfSBlbHNlIGlmICghc3ltX2lzX2Nob2ljZShzeW0pKSB7CisJCQlzeW1fY2FsY192YWx1ZShzeW0pOworCQkJaWYgKCEoc3ltLT5mbGFncyAmIFNZTUJPTF9XUklURSkpCisJCQkJZ290byBuZXh0X21lbnU7CisJCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfV1JJVEU7CisJCQkvKiBJZiB3ZSBjYW5ub3QgY2hhbmdlIHRoZSBzeW1ib2wgLSBza2lwICovCisJCQlpZiAoIXN5bV9pc19jaGFuZ2FibGUoc3ltKSkKKwkJCQlnb3RvIG5leHRfbWVudTsKKwkJCS8qIElmIHN5bWJvbCBlcXVhbHMgdG8gZGVmYXVsdCB2YWx1ZSAtIHNraXAgKi8KKwkJCWlmIChzdHJjbXAoc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSwgc3ltX2dldF9zdHJpbmdfZGVmYXVsdChzeW0pKSA9PSAwKQorCQkJCWdvdG8gbmV4dF9tZW51OworCisJCQkvKgorCQkJICogSWYgc3ltYm9sIGlzIGEgY2hvaWNlIHZhbHVlIGFuZCBlcXVhbHMgdG8gdGhlCisJCQkgKiBkZWZhdWx0IGZvciBhIGNob2ljZSAtIHNraXAuCisJCQkgKiBCdXQgb25seSBpZiB2YWx1ZSBpcyBib29sIGFuZCBlcXVhbCB0byAieSIgYW5kCisJCQkgKiBjaG9pY2UgaXMgbm90ICJvcHRpb25hbCIuCisJCQkgKiAoSWYgY2hvaWNlIGlzICJvcHRpb25hbCIgdGhlbiBhbGwgdmFsdWVzIGNhbiBiZSAibiIpCisJCQkgKi8KKwkJCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkpIHsKKwkJCQlzdHJ1Y3Qgc3ltYm9sICpjczsKKwkJCQlzdHJ1Y3Qgc3ltYm9sICpkczsKKworCQkJCWNzID0gcHJvcF9nZXRfc3ltYm9sKHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKSk7CisJCQkJZHMgPSBzeW1fY2hvaWNlX2RlZmF1bHQoY3MpOworCQkJCWlmICghc3ltX2lzX29wdGlvbmFsKGNzKSAmJiBzeW0gPT0gZHMpIHsKKwkJCQkJaWYgKChzeW0tPnR5cGUgPT0gU19CT09MRUFOKSAmJgorCQkJCQkgICAgc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pID09IHllcykKKwkJCQkJCWdvdG8gbmV4dF9tZW51OworCQkJCX0KKwkJCX0KKwkJCWNvbmZfd3JpdGVfc3ltYm9sKHN5bSwgb3V0LCB0cnVlKTsKKwkJfQorbmV4dF9tZW51OgorCQlpZiAobWVudS0+bGlzdCAhPSBOVUxMKSB7CisJCQltZW51ID0gbWVudS0+bGlzdDsKKwkJfQorCQllbHNlIGlmIChtZW51LT5uZXh0ICE9IE5VTEwpIHsKKwkJCW1lbnUgPSBtZW51LT5uZXh0OworCQl9IGVsc2UgeworCQkJd2hpbGUgKChtZW51ID0gbWVudS0+cGFyZW50KSkgeworCQkJCWlmIChtZW51LT5uZXh0ICE9IE5VTEwpIHsKKwkJCQkJbWVudSA9IG1lbnUtPm5leHQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlmY2xvc2Uob3V0KTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNvbmZfd3JpdGUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlGSUxFICpvdXQ7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVjdCBtZW51ICptZW51OworCWNvbnN0IGNoYXIgKmJhc2VuYW1lOworCWNvbnN0IGNoYXIgKnN0cjsKKwljaGFyIGRpcm5hbWVbUEFUSF9NQVgrMV0sIHRtcG5hbWVbUEFUSF9NQVgrMV0sIG5ld25hbWVbUEFUSF9NQVgrMV07CisJdGltZV90IG5vdzsKKwlpbnQgdXNlX3RpbWVzdGFtcCA9IDE7CisJY2hhciAqZW52OworCisJZGlybmFtZVswXSA9IDA7CisJaWYgKG5hbWUgJiYgbmFtZVswXSkgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJY2hhciAqc2xhc2g7CisKKwkJaWYgKCFzdGF0KG5hbWUsICZzdCkgJiYgU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQkJc3RyY3B5KGRpcm5hbWUsIG5hbWUpOworCQkJc3RyY2F0KGRpcm5hbWUsICIvIik7CisJCQliYXNlbmFtZSA9IGNvbmZfZ2V0X2NvbmZpZ25hbWUoKTsKKwkJfSBlbHNlIGlmICgoc2xhc2ggPSBzdHJyY2hyKG5hbWUsICcvJykpKSB7CisJCQlpbnQgc2l6ZSA9IHNsYXNoIC0gbmFtZSArIDE7CisJCQltZW1jcHkoZGlybmFtZSwgbmFtZSwgc2l6ZSk7CisJCQlkaXJuYW1lW3NpemVdID0gMDsKKwkJCWlmIChzbGFzaFsxXSkKKwkJCQliYXNlbmFtZSA9IHNsYXNoICsgMTsKKwkJCWVsc2UKKwkJCQliYXNlbmFtZSA9IGNvbmZfZ2V0X2NvbmZpZ25hbWUoKTsKKwkJfSBlbHNlCisJCQliYXNlbmFtZSA9IG5hbWU7CisJfSBlbHNlCisJCWJhc2VuYW1lID0gY29uZl9nZXRfY29uZmlnbmFtZSgpOworCisJc3ByaW50ZihuZXduYW1lLCAiJXMlcyIsIGRpcm5hbWUsIGJhc2VuYW1lKTsKKwllbnYgPSBnZXRlbnYoIktDT05GSUdfT1ZFUldSSVRFQ09ORklHIik7CisJaWYgKCFlbnYgfHwgISplbnYpIHsKKwkJc3ByaW50Zih0bXBuYW1lLCAiJXMudG1wY29uZmlnLiVkIiwgZGlybmFtZSwgKGludClnZXRwaWQoKSk7CisJCW91dCA9IGZvcGVuKHRtcG5hbWUsICJ3Iik7CisJfSBlbHNlIHsKKwkJKnRtcG5hbWUgPSAwOworCQlvdXQgPSBmb3BlbihuZXduYW1lLCAidyIpOworCX0KKwlpZiAoIW91dCkKKwkJcmV0dXJuIDE7CisKKwl0aW1lKCZub3cpOworCWVudiA9IGdldGVudigiS0NPTkZJR19OT1RJTUVTVEFNUCIpOworCWlmIChlbnYgJiYgKmVudikKKwkJdXNlX3RpbWVzdGFtcCA9IDA7CisKKwlmcHJpbnRmKG91dCwgXygiI1xuIgorCQkgICAgICAgIiMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXRcbiIKKwkJICAgICAgICIjICVzXG4iCisJCSAgICAgICAiJXMlcyIKKwkJICAgICAgICIjXG4iKSwKKwkJICAgICByb290bWVudS5wcm9tcHQtPnRleHQsCisJCSAgICAgdXNlX3RpbWVzdGFtcCA/ICIjICIgOiAiIiwKKwkJICAgICB1c2VfdGltZXN0YW1wID8gY3RpbWUoJm5vdykgOiAiIik7CisKKwlpZiAoIWNvbmZfZ2V0X2NoYW5nZWQoKSkKKwkJc3ltX2NsZWFyX2FsbF92YWxpZCgpOworCisJbWVudSA9IHJvb3RtZW51Lmxpc3Q7CisJd2hpbGUgKG1lbnUpIHsKKwkJc3ltID0gbWVudS0+c3ltOworCQlpZiAoIXN5bSkgeworCQkJaWYgKCFtZW51X2lzX3Zpc2libGUobWVudSkpCisJCQkJZ290byBuZXh0OworCQkJc3RyID0gbWVudV9nZXRfcHJvbXB0KG1lbnUpOworCQkJZnByaW50ZihvdXQsICJcbiIKKwkJCQkgICAgICIjXG4iCisJCQkJICAgICAiIyAlc1xuIgorCQkJCSAgICAgIiNcbiIsIHN0cik7CisJCX0gZWxzZSBpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX0NIT0lDRSkpIHsKKwkJCXN5bV9jYWxjX3ZhbHVlKHN5bSk7CisJCQlpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX1dSSVRFKSkKKwkJCQlnb3RvIG5leHQ7CisJCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfV1JJVEU7CisJCQkvKiBXcml0ZSBjb25maWcgc3ltYm9sIHRvIGZpbGUgKi8KKwkJCWNvbmZfd3JpdGVfc3ltYm9sKHN5bSwgb3V0LCB0cnVlKTsKKwkJfQorCituZXh0OgorCQlpZiAobWVudS0+bGlzdCkgeworCQkJbWVudSA9IG1lbnUtPmxpc3Q7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobWVudS0+bmV4dCkKKwkJCW1lbnUgPSBtZW51LT5uZXh0OworCQllbHNlIHdoaWxlICgobWVudSA9IG1lbnUtPnBhcmVudCkpIHsKKwkJCWlmIChtZW51LT5uZXh0KSB7CisJCQkJbWVudSA9IG1lbnUtPm5leHQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJZmNsb3NlKG91dCk7CisKKwlpZiAoKnRtcG5hbWUpIHsKKwkJc3RyY2F0KGRpcm5hbWUsIGJhc2VuYW1lKTsKKwkJc3RyY2F0KGRpcm5hbWUsICIub2xkIik7CisJCXJlbmFtZShuZXduYW1lLCBkaXJuYW1lKTsKKwkJaWYgKHJlbmFtZSh0bXBuYW1lLCBuZXduYW1lKSkKKwkJCXJldHVybiAxOworCX0KKworCWNvbmZfbWVzc2FnZShfKCJjb25maWd1cmF0aW9uIHNhdmVkIikpOworCisJc3ltX3NldF9jaGFuZ2VfY291bnQoMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb25mX3NwbGl0X2NvbmZpZyh2b2lkKQoreworCWNvbnN0IGNoYXIgKm5hbWU7CisJY2hhciBwYXRoW1BBVEhfTUFYKzFdOworCWNoYXIgKnMsICpkLCBjOworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3Qgc3RhdCBzYjsKKwlpbnQgcmVzLCBpLCBmZDsKKworCW5hbWUgPSBjb25mX2dldF9hdXRvY29uZmlnX25hbWUoKTsKKwljb25mX3JlYWRfc2ltcGxlKG5hbWUsIFNfREVGX0FVVE8pOworCisJaWYgKGNoZGlyKCJpbmNsdWRlL2NvbmZpZyIpKQorCQlyZXR1cm4gMTsKKworCXJlcyA9IDA7CisJZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkgeworCQlzeW1fY2FsY192YWx1ZShzeW0pOworCQlpZiAoKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQVVUTykgfHwgIXN5bS0+bmFtZSkKKwkJCWNvbnRpbnVlOworCQlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9XUklURSkgeworCQkJaWYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfREVGX0FVVE8pIHsKKwkJCQkvKgorCQkJCSAqIHN5bWJvbCBoYXMgb2xkIGFuZCBuZXcgdmFsdWUsCisJCQkJICogc28gY29tcGFyZSB0aGVtLi4uCisJCQkJICovCisJCQkJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwkJCQljYXNlIFNfQk9PTEVBTjoKKwkJCQljYXNlIFNfVFJJU1RBVEU6CisJCQkJCWlmIChzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkgPT0KKwkJCQkJICAgIHN5bS0+ZGVmW1NfREVGX0FVVE9dLnRyaSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlicmVhazsKKwkJCQljYXNlIFNfU1RSSU5HOgorCQkJCWNhc2UgU19IRVg6CisJCQkJY2FzZSBTX0lOVDoKKwkJCQkJaWYgKCFzdHJjbXAoc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSwKKwkJCQkJCSAgICBzeW0tPmRlZltTX0RFRl9BVVRPXS52YWwpKQorCQkJCQkJY29udGludWU7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBJZiB0aGVyZSBpcyBubyBvbGQgdmFsdWUsIG9ubHkgJ25vJyAodW5zZXQpCisJCQkJICogaXMgYWxsb3dlZCBhcyBuZXcgdmFsdWUuCisJCQkJICovCisJCQkJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwkJCQljYXNlIFNfQk9PTEVBTjoKKwkJCQljYXNlIFNfVFJJU1RBVEU6CisJCQkJCWlmIChzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkgPT0gbm8pCisJCQkJCQljb250aW51ZTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgaWYgKCEoc3ltLT5mbGFncyAmIFNZTUJPTF9ERUZfQVVUTykpCisJCQkvKiBUaGVyZSBpcyBuZWl0aGVyIGFuIG9sZCBub3IgYSBuZXcgdmFsdWUuICovCisJCQljb250aW51ZTsKKwkJLyogZWxzZQorCQkgKglUaGVyZSBpcyBhbiBvbGQgdmFsdWUsIGJ1dCBubyBuZXcgdmFsdWUgKCdubycgKHVuc2V0KQorCQkgKglpc24ndCBzYXZlZCBpbiBhdXRvLmNvbmYsIHNvIHRoZSBvbGQgdmFsdWUgaXMgYWx3YXlzCisJCSAqCWRpZmZlcmVudCBmcm9tICdubycpLgorCQkgKi8KKworCQkvKiBSZXBsYWNlIGFsbCAnXycgYW5kIGFwcGVuZCAiLmgiICovCisJCXMgPSBzeW0tPm5hbWU7CisJCWQgPSBwYXRoOworCQl3aGlsZSAoKGMgPSAqcysrKSkgeworCQkJYyA9IHRvbG93ZXIoYyk7CisJCQkqZCsrID0gKGMgPT0gJ18nKSA/ICcvJyA6IGM7CisJCX0KKwkJc3RyY3B5KGQsICIuaCIpOworCisJCS8qIEFzc3VtZSBkaXJlY3RvcnkgcGF0aCBhbHJlYWR5IGV4aXN0cy4gKi8KKwkJZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2NDQpOworCQlpZiAoZmQgPT0gLTEpIHsKKwkJCWlmIChlcnJubyAhPSBFTk9FTlQpIHsKKwkJCQlyZXMgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQkJLyoKKwkJCSAqIENyZWF0ZSBkaXJlY3RvcnkgY29tcG9uZW50cywKKwkJCSAqIHVubGVzcyB0aGV5IGV4aXN0IGFscmVhZHkuCisJCQkgKi8KKwkJCWQgPSBwYXRoOworCQkJd2hpbGUgKChkID0gc3RyY2hyKGQsICcvJykpKSB7CisJCQkJKmQgPSAwOworCQkJCWlmIChzdGF0KHBhdGgsICZzYikgJiYgbWtkaXIocGF0aCwgMDc1NSkpIHsKKwkJCQkJcmVzID0gMTsKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJCSpkKysgPSAnLyc7CisJCQl9CisJCQkvKiBUcnkgaXQgYWdhaW4uICovCisJCQlmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgMDY0NCk7CisJCQlpZiAoZmQgPT0gLTEpIHsKKwkJCQlyZXMgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWNsb3NlKGZkKTsKKwl9CitvdXQ6CisJaWYgKGNoZGlyKCIuLi8uLiIpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiByZXM7Cit9CisKK2ludCBjb25mX3dyaXRlX2F1dG9jb25mKHZvaWQpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCWNvbnN0IGNoYXIgKnN0cjsKKwljb25zdCBjaGFyICpuYW1lOworCUZJTEUgKm91dCwgKnRyaXN0YXRlLCAqb3V0X2g7CisJaW50IGk7CisKKwlzeW1fY2xlYXJfYWxsX3ZhbGlkKCk7CisKKwlmaWxlX3dyaXRlX2RlcCgiaW5jbHVkZS9jb25maWcvYXV0by5jb25mLmNtZCIpOworCisJaWYgKGNvbmZfc3BsaXRfY29uZmlnKCkpCisJCXJldHVybiAxOworCisJb3V0ID0gZm9wZW4oIi50bXBjb25maWciLCAidyIpOworCWlmICghb3V0KQorCQlyZXR1cm4gMTsKKworCXRyaXN0YXRlID0gZm9wZW4oIi50bXBjb25maWdfdHJpc3RhdGUiLCAidyIpOworCWlmICghdHJpc3RhdGUpIHsKKwkJZmNsb3NlKG91dCk7CisJCXJldHVybiAxOworCX0KKworCW91dF9oID0gZm9wZW4oIi50bXBjb25maWcuaCIsICJ3Iik7CisJaWYgKCFvdXRfaCkgeworCQlmY2xvc2Uob3V0KTsKKwkJZmNsb3NlKHRyaXN0YXRlKTsKKwkJcmV0dXJuIDE7CisJfQorCisJZnByaW50ZihvdXQsICIjXG4iCisJCSAgICAgIiMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXRcbiIKKwkJICAgICAiIyAlc1xuIgorCQkgICAgICIjXG4iLAorCQkgICAgIHJvb3RtZW51LnByb21wdC0+dGV4dCk7CisJZnByaW50Zih0cmlzdGF0ZSwgIiNcbiIKKwkJCSAgIiMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgLSBkbyBub3QgZWRpdFxuIgorCQkJICAiXG4iKTsKKwlmcHJpbnRmKG91dF9oLCAiLypcbiIKKwkJICAgICAgICIgKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBDIGNvbmZpZzogZG9uJ3QgZWRpdFxuIgorCQkgICAgICAgIiAqICVzXG4iCisJCSAgICAgICAiICovXG4iLAorCQkgICAgICAgcm9vdG1lbnUucHJvbXB0LT50ZXh0KTsKKworCWZvcl9hbGxfc3ltYm9scyhpLCBzeW0pIHsKKwkJc3ltX2NhbGNfdmFsdWUoc3ltKTsKKwkJaWYgKCEoc3ltLT5mbGFncyAmIFNZTUJPTF9XUklURSkgfHwgIXN5bS0+bmFtZSkKKwkJCWNvbnRpbnVlOworCisJCS8qIHdyaXRlIHN5bWJvbCB0byBjb25maWcgZmlsZSAqLworCQljb25mX3dyaXRlX3N5bWJvbChzeW0sIG91dCwgZmFsc2UpOworCisJCS8qIHVwZGF0ZSBhdXRvY29uZiBhbmQgdHJpc3RhdGUgZmlsZXMgKi8KKwkJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwkJY2FzZSBTX0JPT0xFQU46CisJCWNhc2UgU19UUklTVEFURToKKwkJCXN3aXRjaCAoc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pKSB7CisJCQljYXNlIG5vOgorCQkJCWJyZWFrOworCQkJY2FzZSBtb2Q6CisJCQkJZnByaW50Zih0cmlzdGF0ZSwgIiVzJXM9TVxuIiwKKwkJCQkgICAgQ09ORklHXywgc3ltLT5uYW1lKTsKKwkJCQlmcHJpbnRmKG91dF9oLCAiI2RlZmluZSAlcyVzX01PRFVMRSAxXG4iLAorCQkJCSAgICBDT05GSUdfLCBzeW0tPm5hbWUpOworCQkJCWJyZWFrOworCQkJY2FzZSB5ZXM6CisJCQkJaWYgKHN5bS0+dHlwZSA9PSBTX1RSSVNUQVRFKQorCQkJCQlmcHJpbnRmKHRyaXN0YXRlLCIlcyVzPVlcbiIsCisJCQkJCSAgICBDT05GSUdfLCBzeW0tPm5hbWUpOworCQkJCWZwcmludGYob3V0X2gsICIjZGVmaW5lICVzJXMgMVxuIiwKKwkJCQkgICAgQ09ORklHXywgc3ltLT5uYW1lKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNfU1RSSU5HOgorCQkJY29uZl93cml0ZV9zdHJpbmcodHJ1ZSwgc3ltLT5uYW1lLCBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pLCBvdXRfaCk7CisJCQlicmVhazsKKwkJY2FzZSBTX0hFWDoKKwkJCXN0ciA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSk7CisJCQlpZiAoc3RyWzBdICE9ICcwJyB8fCAoc3RyWzFdICE9ICd4JyAmJiBzdHJbMV0gIT0gJ1gnKSkgeworCQkJCWZwcmludGYob3V0X2gsICIjZGVmaW5lICVzJXMgMHglc1xuIiwKKwkJCQkgICAgQ09ORklHXywgc3ltLT5uYW1lLCBzdHIpOworCQkJCWJyZWFrOworCQkJfQorCQljYXNlIFNfSU5UOgorCQkJc3RyID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKTsKKwkJCWZwcmludGYob3V0X2gsICIjZGVmaW5lICVzJXMgJXNcbiIsCisJCQkgICAgQ09ORklHXywgc3ltLT5uYW1lLCBzdHIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKwlmY2xvc2Uob3V0KTsKKwlmY2xvc2UodHJpc3RhdGUpOworCWZjbG9zZShvdXRfaCk7CisKKwluYW1lID0gZ2V0ZW52KCJLQ09ORklHX0FVVE9IRUFERVIiKTsKKwlpZiAoIW5hbWUpCisJCW5hbWUgPSAiaW5jbHVkZS9nZW5lcmF0ZWQvYXV0b2NvbmYuaCI7CisJaWYgKHJlbmFtZSgiLnRtcGNvbmZpZy5oIiwgbmFtZSkpCisJCXJldHVybiAxOworCW5hbWUgPSBnZXRlbnYoIktDT05GSUdfVFJJU1RBVEUiKTsKKwlpZiAoIW5hbWUpCisJCW5hbWUgPSAiaW5jbHVkZS9jb25maWcvdHJpc3RhdGUuY29uZiI7CisJaWYgKHJlbmFtZSgiLnRtcGNvbmZpZ190cmlzdGF0ZSIsIG5hbWUpKQorCQlyZXR1cm4gMTsKKwluYW1lID0gY29uZl9nZXRfYXV0b2NvbmZpZ19uYW1lKCk7CisJLyoKKwkgKiBUaGlzIG11c3QgYmUgdGhlIGxhc3Qgc3RlcCwga2J1aWxkIGhhcyBhIGRlcGVuZGVuY3kgb24gYXV0by5jb25mCisJICogYW5kIHRoaXMgbWFya3MgdGhlIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiB0aGUgcHJldmlvdXMgc3RlcHMuCisJICovCisJaWYgKHJlbmFtZSgiLnRtcGNvbmZpZyIsIG5hbWUpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN5bV9jaGFuZ2VfY291bnQ7CitzdGF0aWMgdm9pZCAoKmNvbmZfY2hhbmdlZF9jYWxsYmFjaykodm9pZCk7CisKK3ZvaWQgc3ltX3NldF9jaGFuZ2VfY291bnQoaW50IGNvdW50KQoreworCWludCBfc3ltX2NoYW5nZV9jb3VudCA9IHN5bV9jaGFuZ2VfY291bnQ7CisJc3ltX2NoYW5nZV9jb3VudCA9IGNvdW50OworCWlmIChjb25mX2NoYW5nZWRfY2FsbGJhY2sgJiYKKwkgICAgKGJvb2wpX3N5bV9jaGFuZ2VfY291bnQgIT0gKGJvb2wpY291bnQpCisJCWNvbmZfY2hhbmdlZF9jYWxsYmFjaygpOworfQorCit2b2lkIHN5bV9hZGRfY2hhbmdlX2NvdW50KGludCBjb3VudCkKK3sKKwlzeW1fc2V0X2NoYW5nZV9jb3VudChjb3VudCArIHN5bV9jaGFuZ2VfY291bnQpOworfQorCitib29sIGNvbmZfZ2V0X2NoYW5nZWQodm9pZCkKK3sKKwlyZXR1cm4gc3ltX2NoYW5nZV9jb3VudDsKK30KKwordm9pZCBjb25mX3NldF9jaGFuZ2VkX2NhbGxiYWNrKHZvaWQgKCpmbikodm9pZCkpCit7CisJY29uZl9jaGFuZ2VkX2NhbGxiYWNrID0gZm47Cit9CisKK3N0YXRpYyB2b2lkIHJhbmRvbWl6ZV9jaG9pY2VfdmFsdWVzKHN0cnVjdCBzeW1ib2wgKmNzeW0pCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3QgZXhwciAqZTsKKwlpbnQgY250LCBkZWY7CisKKwkvKgorCSAqIElmIGNob2ljZSBpcyBtb2QgdGhlbiB3ZSBtYXkgaGF2ZSBtb3JlIGl0ZW1zIHNlbGVjdGVkCisJICogYW5kIGlmIG5vIHRoZW4gbm8tb25lLgorCSAqIEluIGJvdGggY2FzZXMgc3RvcC4KKwkgKi8KKwlpZiAoY3N5bS0+Y3Vyci50cmkgIT0geWVzKQorCQlyZXR1cm47CisKKwlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChjc3ltKTsKKworCS8qIGNvdW50IGVudHJpZXMgaW4gY2hvaWNlIGJsb2NrICovCisJY250ID0gMDsKKwlleHByX2xpc3RfZm9yX2VhY2hfc3ltKHByb3AtPmV4cHIsIGUsIHN5bSkKKwkJY250Kys7CisKKwkvKgorCSAqIGZpbmQgYSByYW5kb20gdmFsdWUgYW5kIHNldCBpdCB0byB5ZXMsCisJICogc2V0IHRoZSByZXN0IHRvIG5vIHNvIHdlIGhhdmUgb25seSBvbmUgc2V0CisJICovCisJZGVmID0gKHJhbmQoKSAlIGNudCk7CisKKwljbnQgPSAwOworCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKSB7CisJCWlmIChkZWYgPT0gY250KyspIHsKKwkJCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IHllczsKKwkJCWNzeW0tPmRlZltTX0RFRl9VU0VSXS52YWwgPSBzeW07CisJCX0KKwkJZWxzZSB7CisJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSBubzsKKwkJfQorCX0KKwljc3ltLT5mbGFncyB8PSBTWU1CT0xfREVGX1VTRVI7CisJLyogY2xlYXIgVkFMSUQgdG8gZ2V0IHZhbHVlIGNhbGN1bGF0ZWQgKi8KKwljc3ltLT5mbGFncyAmPSB+KFNZTUJPTF9WQUxJRCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9hbGxfY2hvaWNlX3ZhbHVlcyhzdHJ1Y3Qgc3ltYm9sICpjc3ltKQoreworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3RydWN0IGV4cHIgKmU7CisKKwlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChjc3ltKTsKKworCS8qCisJICogU2V0IGFsbCBub24tYXNzaW5nZWQgY2hvaWNlIHZhbHVlcyB0byBubworCSAqLworCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKSB7CisJCWlmICghc3ltX2hhc192YWx1ZShzeW0pKQorCQkJc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpID0gbm87CisJfQorCWNzeW0tPmZsYWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsKKwkvKiBjbGVhciBWQUxJRCB0byBnZXQgdmFsdWUgY2FsY3VsYXRlZCAqLworCWNzeW0tPmZsYWdzICY9IH4oU1lNQk9MX1ZBTElEKTsKK30KKwordm9pZCBjb25mX3NldF9hbGxfbmV3X3N5bWJvbHMoZW51bSBjb25mX2RlZl9tb2RlIG1vZGUpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltLCAqY3N5bTsKKwlpbnQgaSwgY250OworCisJZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkgeworCQlpZiAoc3ltX2hhc192YWx1ZShzeW0pKQorCQkJY29udGludWU7CisJCXN3aXRjaCAoc3ltX2dldF90eXBlKHN5bSkpIHsKKwkJY2FzZSBTX0JPT0xFQU46CisJCWNhc2UgU19UUklTVEFURToKKwkJCXN3aXRjaCAobW9kZSkgeworCQkJY2FzZSBkZWZfeWVzOgorCQkJCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IHllczsKKwkJCQlicmVhazsKKwkJCWNhc2UgZGVmX21vZDoKKwkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSBtb2Q7CisJCQkJYnJlYWs7CisJCQljYXNlIGRlZl9ubzoKKwkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSBubzsKKwkJCQlicmVhazsKKwkJCWNhc2UgZGVmX3JhbmRvbToKKwkJCQljbnQgPSBzeW1fZ2V0X3R5cGUoc3ltKSA9PSBTX1RSSVNUQVRFID8gMyA6IDI7CisJCQkJc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpID0gKHRyaXN0YXRlKShyYW5kKCkgJSBjbnQpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghKHN5bV9pc19jaG9pY2Uoc3ltKSAmJiBtb2RlID09IGRlZl9yYW5kb20pKQorCQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJfQorCisJc3ltX2NsZWFyX2FsbF92YWxpZCgpOworCisJLyoKKwkgKiBXZSBoYXZlIGRpZmZlcmVudCB0eXBlIG9mIGNob2ljZSBibG9ja3MuCisJICogSWYgY3Vyci50cmkgZXF1YWxzIHRvIG1vZCB0aGVuIHdlIGNhbiBzZWxlY3Qgc2V2ZXJhbAorCSAqIGNob2ljZSBzeW1ib2xzIGluIG9uZSBibG9jay4KKwkgKiBJbiB0aGlzIGNhc2Ugd2UgZG8gbm90aGluZy4KKwkgKiBJZiBjdXJyLnRyaSBlcXVhbHMgeWVzIHRoZW4gb25seSBvbmUgc3ltYm9sIGNhbiBiZQorCSAqIHNlbGVjdGVkIGluIGEgY2hvaWNlIGJsb2NrIGFuZCB3ZSBzZXQgaXQgdG8geWVzLAorCSAqIGFuZCB0aGUgcmVzdCB0byBuby4KKwkgKi8KKwlmb3JfYWxsX3N5bWJvbHMoaSwgY3N5bSkgeworCQlpZiAoc3ltX2hhc192YWx1ZShjc3ltKSB8fCAhc3ltX2lzX2Nob2ljZShjc3ltKSkKKwkJCWNvbnRpbnVlOworCisJCXN5bV9jYWxjX3ZhbHVlKGNzeW0pOworCQlpZiAobW9kZSA9PSBkZWZfcmFuZG9tKQorCQkJcmFuZG9taXplX2Nob2ljZV92YWx1ZXMoY3N5bSk7CisJCWVsc2UKKwkJCXNldF9hbGxfY2hvaWNlX3ZhbHVlcyhjc3ltKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2tjb25maWcvZXhwci5jIGIvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL2V4cHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDEwMDM0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL2V4cHIuYwpAQCAtMCwwICsxLDExNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisgKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIuMC4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2RlZmluZSBMS0NfRElSRUNUX0xJTksKKyNpbmNsdWRlICJsa2MuaCIKKworI2RlZmluZSBERUJVR19FWFBSCTAKKworc3RydWN0IGV4cHIgKmV4cHJfYWxsb2Nfc3ltYm9sKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3QgZXhwciAqZSA9IG1hbGxvYyhzaXplb2YoKmUpKTsKKwltZW1zZXQoZSwgMCwgc2l6ZW9mKCplKSk7CisJZS0+dHlwZSA9IEVfU1lNQk9MOworCWUtPmxlZnQuc3ltID0gc3ltOworCXJldHVybiBlOworfQorCitzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19vbmUoZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0IGV4cHIgKmNlKQoreworCXN0cnVjdCBleHByICplID0gbWFsbG9jKHNpemVvZigqZSkpOworCW1lbXNldChlLCAwLCBzaXplb2YoKmUpKTsKKwllLT50eXBlID0gdHlwZTsKKwllLT5sZWZ0LmV4cHIgPSBjZTsKKwlyZXR1cm4gZTsKK30KKworc3RydWN0IGV4cHIgKmV4cHJfYWxsb2NfdHdvKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKQoreworCXN0cnVjdCBleHByICplID0gbWFsbG9jKHNpemVvZigqZSkpOworCW1lbXNldChlLCAwLCBzaXplb2YoKmUpKTsKKwllLT50eXBlID0gdHlwZTsKKwllLT5sZWZ0LmV4cHIgPSBlMTsKKwllLT5yaWdodC5leHByID0gZTI7CisJcmV0dXJuIGU7Cit9CisKK3N0cnVjdCBleHByICpleHByX2FsbG9jX2NvbXAoZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0IHN5bWJvbCAqczEsIHN0cnVjdCBzeW1ib2wgKnMyKQoreworCXN0cnVjdCBleHByICplID0gbWFsbG9jKHNpemVvZigqZSkpOworCW1lbXNldChlLCAwLCBzaXplb2YoKmUpKTsKKwllLT50eXBlID0gdHlwZTsKKwllLT5sZWZ0LnN5bSA9IHMxOworCWUtPnJpZ2h0LnN5bSA9IHMyOworCXJldHVybiBlOworfQorCitzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19hbmQoc3RydWN0IGV4cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIpCit7CisJaWYgKCFlMSkKKwkJcmV0dXJuIGUyOworCXJldHVybiBlMiA/IGV4cHJfYWxsb2NfdHdvKEVfQU5ELCBlMSwgZTIpIDogZTE7Cit9CisKK3N0cnVjdCBleHByICpleHByX2FsbG9jX29yKHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKQoreworCWlmICghZTEpCisJCXJldHVybiBlMjsKKwlyZXR1cm4gZTIgPyBleHByX2FsbG9jX3R3byhFX09SLCBlMSwgZTIpIDogZTE7Cit9CisKK3N0cnVjdCBleHByICpleHByX2NvcHkoY29uc3Qgc3RydWN0IGV4cHIgKm9yZykKK3sKKwlzdHJ1Y3QgZXhwciAqZTsKKworCWlmICghb3JnKQorCQlyZXR1cm4gTlVMTDsKKworCWUgPSBtYWxsb2Moc2l6ZW9mKCpvcmcpKTsKKwltZW1jcHkoZSwgb3JnLCBzaXplb2YoKm9yZykpOworCXN3aXRjaCAob3JnLT50eXBlKSB7CisJY2FzZSBFX1NZTUJPTDoKKwkJZS0+bGVmdCA9IG9yZy0+bGVmdDsKKwkJYnJlYWs7CisJY2FzZSBFX05PVDoKKwkJZS0+bGVmdC5leHByID0gZXhwcl9jb3B5KG9yZy0+bGVmdC5leHByKTsKKwkJYnJlYWs7CisJY2FzZSBFX0VRVUFMOgorCWNhc2UgRV9VTkVRVUFMOgorCQllLT5sZWZ0LnN5bSA9IG9yZy0+bGVmdC5zeW07CisJCWUtPnJpZ2h0LnN5bSA9IG9yZy0+cmlnaHQuc3ltOworCQlicmVhazsKKwljYXNlIEVfQU5EOgorCWNhc2UgRV9PUjoKKwljYXNlIEVfTElTVDoKKwkJZS0+bGVmdC5leHByID0gZXhwcl9jb3B5KG9yZy0+bGVmdC5leHByKTsKKwkJZS0+cmlnaHQuZXhwciA9IGV4cHJfY29weShvcmctPnJpZ2h0LmV4cHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYoImNhbid0IGNvcHkgdHlwZSAlZFxuIiwgZS0+dHlwZSk7CisJCWZyZWUoZSk7CisJCWUgPSBOVUxMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZTsKK30KKwordm9pZCBleHByX2ZyZWUoc3RydWN0IGV4cHIgKmUpCit7CisJaWYgKCFlKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGUtPnR5cGUpIHsKKwljYXNlIEVfU1lNQk9MOgorCQlicmVhazsKKwljYXNlIEVfTk9UOgorCQlleHByX2ZyZWUoZS0+bGVmdC5leHByKTsKKwkJcmV0dXJuOworCWNhc2UgRV9FUVVBTDoKKwljYXNlIEVfVU5FUVVBTDoKKwkJYnJlYWs7CisJY2FzZSBFX09SOgorCWNhc2UgRV9BTkQ6CisJCWV4cHJfZnJlZShlLT5sZWZ0LmV4cHIpOworCQlleHByX2ZyZWUoZS0+cmlnaHQuZXhwcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ZigiaG93IHRvIGZyZWUgdHlwZSAlZD9cbiIsIGUtPnR5cGUpOworCQlicmVhazsKKwl9CisJZnJlZShlKTsKK30KKworc3RhdGljIGludCB0cmFuc19jb3VudDsKKworI2RlZmluZSBlMSAoKmVwMSkKKyNkZWZpbmUgZTIgKCplcDIpCisKK3N0YXRpYyB2b2lkIF9fZXhwcl9lbGltaW5hdGVfZXEoZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0IGV4cHIgKiplcDEsIHN0cnVjdCBleHByICoqZXAyKQoreworCWlmIChlMS0+dHlwZSA9PSB0eXBlKSB7CisJCV9fZXhwcl9lbGltaW5hdGVfZXEodHlwZSwgJmUxLT5sZWZ0LmV4cHIsICZlMik7CisJCV9fZXhwcl9lbGltaW5hdGVfZXEodHlwZSwgJmUxLT5yaWdodC5leHByLCAmZTIpOworCQlyZXR1cm47CisJfQorCWlmIChlMi0+dHlwZSA9PSB0eXBlKSB7CisJCV9fZXhwcl9lbGltaW5hdGVfZXEodHlwZSwgJmUxLCAmZTItPmxlZnQuZXhwcik7CisJCV9fZXhwcl9lbGltaW5hdGVfZXEodHlwZSwgJmUxLCAmZTItPnJpZ2h0LmV4cHIpOworCQlyZXR1cm47CisJfQorCWlmIChlMS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMi0+dHlwZSA9PSBFX1NZTUJPTCAmJgorCSAgICBlMS0+bGVmdC5zeW0gPT0gZTItPmxlZnQuc3ltICYmCisJICAgIChlMS0+bGVmdC5zeW0gPT0gJnN5bWJvbF95ZXMgfHwgZTEtPmxlZnQuc3ltID09ICZzeW1ib2xfbm8pKQorCQlyZXR1cm47CisJaWYgKCFleHByX2VxKGUxLCBlMikpCisJCXJldHVybjsKKwl0cmFuc19jb3VudCsrOworCWV4cHJfZnJlZShlMSk7IGV4cHJfZnJlZShlMik7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBFX09SOgorCQllMSA9IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfbm8pOworCQllMiA9IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfbm8pOworCQlicmVhazsKKwljYXNlIEVfQU5EOgorCQllMSA9IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfeWVzKTsKKwkJZTIgPSBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX3llcyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCTsKKwl9Cit9CisKK3ZvaWQgZXhwcl9lbGltaW5hdGVfZXEoc3RydWN0IGV4cHIgKiplcDEsIHN0cnVjdCBleHByICoqZXAyKQoreworCWlmICghZTEgfHwgIWUyKQorCQlyZXR1cm47CisJc3dpdGNoIChlMS0+dHlwZSkgeworCWNhc2UgRV9PUjoKKwljYXNlIEVfQU5EOgorCQlfX2V4cHJfZWxpbWluYXRlX2VxKGUxLT50eXBlLCBlcDEsIGVwMik7CisJZGVmYXVsdDoKKwkJOworCX0KKwlpZiAoZTEtPnR5cGUgIT0gZTItPnR5cGUpIHN3aXRjaCAoZTItPnR5cGUpIHsKKwljYXNlIEVfT1I6CisJY2FzZSBFX0FORDoKKwkJX19leHByX2VsaW1pbmF0ZV9lcShlMi0+dHlwZSwgZXAxLCBlcDIpOworCWRlZmF1bHQ6CisJCTsKKwl9CisJZTEgPSBleHByX2VsaW1pbmF0ZV95bihlMSk7CisJZTIgPSBleHByX2VsaW1pbmF0ZV95bihlMik7Cit9CisKKyN1bmRlZiBlMQorI3VuZGVmIGUyCisKK2ludCBleHByX2VxKHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKQoreworCWludCByZXMsIG9sZF9jb3VudDsKKworCWlmIChlMS0+dHlwZSAhPSBlMi0+dHlwZSkKKwkJcmV0dXJuIDA7CisJc3dpdGNoIChlMS0+dHlwZSkgeworCWNhc2UgRV9FUVVBTDoKKwljYXNlIEVfVU5FUVVBTDoKKwkJcmV0dXJuIGUxLT5sZWZ0LnN5bSA9PSBlMi0+bGVmdC5zeW0gJiYgZTEtPnJpZ2h0LnN5bSA9PSBlMi0+cmlnaHQuc3ltOworCWNhc2UgRV9TWU1CT0w6CisJCXJldHVybiBlMS0+bGVmdC5zeW0gPT0gZTItPmxlZnQuc3ltOworCWNhc2UgRV9OT1Q6CisJCXJldHVybiBleHByX2VxKGUxLT5sZWZ0LmV4cHIsIGUyLT5sZWZ0LmV4cHIpOworCWNhc2UgRV9BTkQ6CisJY2FzZSBFX09SOgorCQllMSA9IGV4cHJfY29weShlMSk7CisJCWUyID0gZXhwcl9jb3B5KGUyKTsKKwkJb2xkX2NvdW50ID0gdHJhbnNfY291bnQ7CisJCWV4cHJfZWxpbWluYXRlX2VxKCZlMSwgJmUyKTsKKwkJcmVzID0gKGUxLT50eXBlID09IEVfU1lNQk9MICYmIGUyLT50eXBlID09IEVfU1lNQk9MICYmCisJCSAgICAgICBlMS0+bGVmdC5zeW0gPT0gZTItPmxlZnQuc3ltKTsKKwkJZXhwcl9mcmVlKGUxKTsKKwkJZXhwcl9mcmVlKGUyKTsKKwkJdHJhbnNfY291bnQgPSBvbGRfY291bnQ7CisJCXJldHVybiByZXM7CisJY2FzZSBFX0xJU1Q6CisJY2FzZSBFX1JBTkdFOgorCWNhc2UgRV9OT05FOgorCQkvKiBwYW5pYyAqLzsKKwl9CisKKwlpZiAoREVCVUdfRVhQUikgeworCQlleHByX2ZwcmludChlMSwgc3Rkb3V0KTsKKwkJcHJpbnRmKCIgPSAiKTsKKwkJZXhwcl9mcHJpbnQoZTIsIHN0ZG91dCk7CisJCXByaW50ZigiID9cbiIpOworCX0KKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgZXhwciAqZXhwcl9lbGltaW5hdGVfeW4oc3RydWN0IGV4cHIgKmUpCit7CisJc3RydWN0IGV4cHIgKnRtcDsKKworCWlmIChlKSBzd2l0Y2ggKGUtPnR5cGUpIHsKKwljYXNlIEVfQU5EOgorCQllLT5sZWZ0LmV4cHIgPSBleHByX2VsaW1pbmF0ZV95bihlLT5sZWZ0LmV4cHIpOworCQllLT5yaWdodC5leHByID0gZXhwcl9lbGltaW5hdGVfeW4oZS0+cmlnaHQuZXhwcik7CisJCWlmIChlLT5sZWZ0LmV4cHItPnR5cGUgPT0gRV9TWU1CT0wpIHsKKwkJCWlmIChlLT5sZWZ0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xfbm8pIHsKKwkJCQlleHByX2ZyZWUoZS0+bGVmdC5leHByKTsKKwkJCQlleHByX2ZyZWUoZS0+cmlnaHQuZXhwcik7CisJCQkJZS0+dHlwZSA9IEVfU1lNQk9MOworCQkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF9ubzsKKwkJCQllLT5yaWdodC5leHByID0gTlVMTDsKKwkJCQlyZXR1cm4gZTsKKwkJCX0gZWxzZSBpZiAoZS0+bGVmdC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX3llcykgeworCQkJCWZyZWUoZS0+bGVmdC5leHByKTsKKwkJCQl0bXAgPSBlLT5yaWdodC5leHByOworCQkJCSplID0gKihlLT5yaWdodC5leHByKTsKKwkJCQlmcmVlKHRtcCk7CisJCQkJcmV0dXJuIGU7CisJCQl9CisJCX0KKwkJaWYgKGUtPnJpZ2h0LmV4cHItPnR5cGUgPT0gRV9TWU1CT0wpIHsKKwkJCWlmIChlLT5yaWdodC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX25vKSB7CisJCQkJZXhwcl9mcmVlKGUtPmxlZnQuZXhwcik7CisJCQkJZXhwcl9mcmVlKGUtPnJpZ2h0LmV4cHIpOworCQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsKKwkJCQllLT5sZWZ0LnN5bSA9ICZzeW1ib2xfbm87CisJCQkJZS0+cmlnaHQuZXhwciA9IE5VTEw7CisJCQkJcmV0dXJuIGU7CisJCQl9IGVsc2UgaWYgKGUtPnJpZ2h0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xfeWVzKSB7CisJCQkJZnJlZShlLT5yaWdodC5leHByKTsKKwkJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7CisJCQkJKmUgPSAqKGUtPmxlZnQuZXhwcik7CisJCQkJZnJlZSh0bXApOworCQkJCXJldHVybiBlOworCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgRV9PUjoKKwkJZS0+bGVmdC5leHByID0gZXhwcl9lbGltaW5hdGVfeW4oZS0+bGVmdC5leHByKTsKKwkJZS0+cmlnaHQuZXhwciA9IGV4cHJfZWxpbWluYXRlX3luKGUtPnJpZ2h0LmV4cHIpOworCQlpZiAoZS0+bGVmdC5leHByLT50eXBlID09IEVfU1lNQk9MKSB7CisJCQlpZiAoZS0+bGVmdC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX25vKSB7CisJCQkJZnJlZShlLT5sZWZ0LmV4cHIpOworCQkJCXRtcCA9IGUtPnJpZ2h0LmV4cHI7CisJCQkJKmUgPSAqKGUtPnJpZ2h0LmV4cHIpOworCQkJCWZyZWUodG1wKTsKKwkJCQlyZXR1cm4gZTsKKwkJCX0gZWxzZSBpZiAoZS0+bGVmdC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX3llcykgeworCQkJCWV4cHJfZnJlZShlLT5sZWZ0LmV4cHIpOworCQkJCWV4cHJfZnJlZShlLT5yaWdodC5leHByKTsKKwkJCQllLT50eXBlID0gRV9TWU1CT0w7CisJCQkJZS0+bGVmdC5zeW0gPSAmc3ltYm9sX3llczsKKwkJCQllLT5yaWdodC5leHByID0gTlVMTDsKKwkJCQlyZXR1cm4gZTsKKwkJCX0KKwkJfQorCQlpZiAoZS0+cmlnaHQuZXhwci0+dHlwZSA9PSBFX1NZTUJPTCkgeworCQkJaWYgKGUtPnJpZ2h0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xfbm8pIHsKKwkJCQlmcmVlKGUtPnJpZ2h0LmV4cHIpOworCQkJCXRtcCA9IGUtPmxlZnQuZXhwcjsKKwkJCQkqZSA9ICooZS0+bGVmdC5leHByKTsKKwkJCQlmcmVlKHRtcCk7CisJCQkJcmV0dXJuIGU7CisJCQl9IGVsc2UgaWYgKGUtPnJpZ2h0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xfeWVzKSB7CisJCQkJZXhwcl9mcmVlKGUtPmxlZnQuZXhwcik7CisJCQkJZXhwcl9mcmVlKGUtPnJpZ2h0LmV4cHIpOworCQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsKKwkJCQllLT5sZWZ0LnN5bSA9ICZzeW1ib2xfeWVzOworCQkJCWUtPnJpZ2h0LmV4cHIgPSBOVUxMOworCQkJCXJldHVybiBlOworCQkJfQorCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCTsKKwl9CisJcmV0dXJuIGU7Cit9CisKKy8qCisgKiBib29sIEZPTyE9biA9PiBGT08KKyAqLworc3RydWN0IGV4cHIgKmV4cHJfdHJhbnNfYm9vbChzdHJ1Y3QgZXhwciAqZSkKK3sKKwlpZiAoIWUpCisJCXJldHVybiBOVUxMOworCXN3aXRjaCAoZS0+dHlwZSkgeworCWNhc2UgRV9BTkQ6CisJY2FzZSBFX09SOgorCWNhc2UgRV9OT1Q6CisJCWUtPmxlZnQuZXhwciA9IGV4cHJfdHJhbnNfYm9vbChlLT5sZWZ0LmV4cHIpOworCQllLT5yaWdodC5leHByID0gZXhwcl90cmFuc19ib29sKGUtPnJpZ2h0LmV4cHIpOworCQlicmVhazsKKwljYXNlIEVfVU5FUVVBTDoKKwkJLy8gRk9PIT1uIC0+IEZPTworCQlpZiAoZS0+bGVmdC5zeW0tPnR5cGUgPT0gU19UUklTVEFURSkgeworCQkJaWYgKGUtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vKSB7CisJCQkJZS0+dHlwZSA9IEVfU1lNQk9MOworCQkJCWUtPnJpZ2h0LnN5bSA9IE5VTEw7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJOworCX0KKwlyZXR1cm4gZTsKK30KKworLyoKKyAqIGUxIHx8IGUyIC0+ID8KKyAqLworc3RhdGljIHN0cnVjdCBleHByICpleHByX2pvaW5fb3Ioc3RydWN0IGV4cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIpCit7CisJc3RydWN0IGV4cHIgKnRtcDsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0xLCAqc3ltMjsKKworCWlmIChleHByX2VxKGUxLCBlMikpCisJCXJldHVybiBleHByX2NvcHkoZTEpOworCWlmIChlMS0+dHlwZSAhPSBFX0VRVUFMICYmIGUxLT50eXBlICE9IEVfVU5FUVVBTCAmJiBlMS0+dHlwZSAhPSBFX1NZTUJPTCAmJiBlMS0+dHlwZSAhPSBFX05PVCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKGUyLT50eXBlICE9IEVfRVFVQUwgJiYgZTItPnR5cGUgIT0gRV9VTkVRVUFMICYmIGUyLT50eXBlICE9IEVfU1lNQk9MICYmIGUyLT50eXBlICE9IEVfTk9UKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoZTEtPnR5cGUgPT0gRV9OT1QpIHsKKwkJdG1wID0gZTEtPmxlZnQuZXhwcjsKKwkJaWYgKHRtcC0+dHlwZSAhPSBFX0VRVUFMICYmIHRtcC0+dHlwZSAhPSBFX1VORVFVQUwgJiYgdG1wLT50eXBlICE9IEVfU1lNQk9MKQorCQkJcmV0dXJuIE5VTEw7CisJCXN5bTEgPSB0bXAtPmxlZnQuc3ltOworCX0gZWxzZQorCQlzeW0xID0gZTEtPmxlZnQuc3ltOworCWlmIChlMi0+dHlwZSA9PSBFX05PVCkgeworCQlpZiAoZTItPmxlZnQuZXhwci0+dHlwZSAhPSBFX1NZTUJPTCkKKwkJCXJldHVybiBOVUxMOworCQlzeW0yID0gZTItPmxlZnQuZXhwci0+bGVmdC5zeW07CisJfSBlbHNlCisJCXN5bTIgPSBlMi0+bGVmdC5zeW07CisJaWYgKHN5bTEgIT0gc3ltMikKKwkJcmV0dXJuIE5VTEw7CisJaWYgKHN5bTEtPnR5cGUgIT0gU19CT09MRUFOICYmIHN5bTEtPnR5cGUgIT0gU19UUklTVEFURSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKHN5bTEtPnR5cGUgPT0gU19UUklTVEFURSkgeworCQlpZiAoZTEtPnR5cGUgPT0gRV9FUVVBTCAmJiBlMi0+dHlwZSA9PSBFX0VRVUFMICYmCisJCSAgICAoKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCkgfHwKKwkJICAgICAoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSkpIHsKKwkJCS8vIChhPSd5JykgfHwgKGE9J20nKSAtPiAoYSE9J24nKQorCQkJcmV0dXJuIGV4cHJfYWxsb2NfY29tcChFX1VORVFVQUwsIHN5bTEsICZzeW1ib2xfbm8pOworCQl9CisJCWlmIChlMS0+dHlwZSA9PSBFX0VRVUFMICYmIGUyLT50eXBlID09IEVfRVFVQUwgJiYKKwkJICAgICgoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcyAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8pIHx8CisJCSAgICAgKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubyAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSkpIHsKKwkJCS8vIChhPSd5JykgfHwgKGE9J24nKSAtPiAoYSE9J20nKQorCQkJcmV0dXJuIGV4cHJfYWxsb2NfY29tcChFX1VORVFVQUwsIHN5bTEsICZzeW1ib2xfbW9kKTsKKwkJfQorCQlpZiAoZTEtPnR5cGUgPT0gRV9FUVVBTCAmJiBlMi0+dHlwZSA9PSBFX0VRVUFMICYmCisJCSAgICAoKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vKSB8fAorCQkgICAgIChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8gJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCkpKSB7CisJCQkvLyAoYT0nbScpIHx8IChhPSduJykgLT4gKGEhPSd5JykKKwkJCXJldHVybiBleHByX2FsbG9jX2NvbXAoRV9VTkVRVUFMLCBzeW0xLCAmc3ltYm9sX3llcyk7CisJCX0KKwl9CisJaWYgKHN5bTEtPnR5cGUgPT0gU19CT09MRUFOICYmIHN5bTEgPT0gc3ltMikgeworCQlpZiAoKGUxLT50eXBlID09IEVfTk9UICYmIGUxLT5sZWZ0LmV4cHItPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgPT0gRV9TWU1CT0wpIHx8CisJCSAgICAoZTItPnR5cGUgPT0gRV9OT1QgJiYgZTItPmxlZnQuZXhwci0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMS0+dHlwZSA9PSBFX1NZTUJPTCkpCisJCQlyZXR1cm4gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF95ZXMpOworCX0KKworCWlmIChERUJVR19FWFBSKSB7CisJCXByaW50Zigib3B0aW1pemUgKCIpOworCQlleHByX2ZwcmludChlMSwgc3Rkb3V0KTsKKwkJcHJpbnRmKCIpIHx8ICgiKTsKKwkJZXhwcl9mcHJpbnQoZTIsIHN0ZG91dCk7CisJCXByaW50ZigiKT9cbiIpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBleHByICpleHByX2pvaW5fYW5kKHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKQoreworCXN0cnVjdCBleHByICp0bXA7CisJc3RydWN0IHN5bWJvbCAqc3ltMSwgKnN5bTI7CisKKwlpZiAoZXhwcl9lcShlMSwgZTIpKQorCQlyZXR1cm4gZXhwcl9jb3B5KGUxKTsKKwlpZiAoZTEtPnR5cGUgIT0gRV9FUVVBTCAmJiBlMS0+dHlwZSAhPSBFX1VORVFVQUwgJiYgZTEtPnR5cGUgIT0gRV9TWU1CT0wgJiYgZTEtPnR5cGUgIT0gRV9OT1QpCisJCXJldHVybiBOVUxMOworCWlmIChlMi0+dHlwZSAhPSBFX0VRVUFMICYmIGUyLT50eXBlICE9IEVfVU5FUVVBTCAmJiBlMi0+dHlwZSAhPSBFX1NZTUJPTCAmJiBlMi0+dHlwZSAhPSBFX05PVCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKGUxLT50eXBlID09IEVfTk9UKSB7CisJCXRtcCA9IGUxLT5sZWZ0LmV4cHI7CisJCWlmICh0bXAtPnR5cGUgIT0gRV9FUVVBTCAmJiB0bXAtPnR5cGUgIT0gRV9VTkVRVUFMICYmIHRtcC0+dHlwZSAhPSBFX1NZTUJPTCkKKwkJCXJldHVybiBOVUxMOworCQlzeW0xID0gdG1wLT5sZWZ0LnN5bTsKKwl9IGVsc2UKKwkJc3ltMSA9IGUxLT5sZWZ0LnN5bTsKKwlpZiAoZTItPnR5cGUgPT0gRV9OT1QpIHsKKwkJaWYgKGUyLT5sZWZ0LmV4cHItPnR5cGUgIT0gRV9TWU1CT0wpCisJCQlyZXR1cm4gTlVMTDsKKwkJc3ltMiA9IGUyLT5sZWZ0LmV4cHItPmxlZnQuc3ltOworCX0gZWxzZQorCQlzeW0yID0gZTItPmxlZnQuc3ltOworCWlmIChzeW0xICE9IHN5bTIpCisJCXJldHVybiBOVUxMOworCWlmIChzeW0xLT50eXBlICE9IFNfQk9PTEVBTiAmJiBzeW0xLT50eXBlICE9IFNfVFJJU1RBVEUpCisJCXJldHVybiBOVUxMOworCisJaWYgKChlMS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMi0+dHlwZSA9PSBFX0VRVUFMICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMpIHx8CisJICAgIChlMi0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMS0+dHlwZSA9PSBFX0VRVUFMICYmIGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMpKQorCQkvLyAoYSkgJiYgKGE9J3knKSAtPiAoYT0neScpCisJCXJldHVybiBleHByX2FsbG9jX2NvbXAoRV9FUVVBTCwgc3ltMSwgJnN5bWJvbF95ZXMpOworCisJaWYgKChlMS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMi0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vKSB8fAorCSAgICAoZTItPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTEtPnR5cGUgPT0gRV9VTkVRVUFMICYmIGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubykpCisJCS8vIChhKSAmJiAoYSE9J24nKSAtPiAoYSkKKwkJcmV0dXJuIGV4cHJfYWxsb2Nfc3ltYm9sKHN5bTEpOworCisJaWYgKChlMS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMi0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCkgfHwKKwkgICAgKGUyLT50eXBlID09IEVfU1lNQk9MICYmIGUxLT50eXBlID09IEVfVU5FUVVBTCAmJiBlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKSkKKwkJLy8gKGEpICYmIChhIT0nbScpIC0+IChhPSd5JykKKwkJcmV0dXJuIGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCBzeW0xLCAmc3ltYm9sX3llcyk7CisKKwlpZiAoc3ltMS0+dHlwZSA9PSBTX1RSSVNUQVRFKSB7CisJCWlmIChlMS0+dHlwZSA9PSBFX0VRVUFMICYmIGUyLT50eXBlID09IEVfVU5FUVVBTCkgeworCQkJLy8gKGE9J2InKSAmJiAoYSE9J2MnKSAtPiAnYic9J2MnID8gJ24nIDogYT0nYicKKwkJCXN5bTIgPSBlMS0+cmlnaHQuc3ltOworCQkJaWYgKChlMi0+cmlnaHQuc3ltLT5mbGFncyAmIFNZTUJPTF9DT05TVCkgJiYgKHN5bTItPmZsYWdzICYgU1lNQk9MX0NPTlNUKSkKKwkJCQlyZXR1cm4gc3ltMiAhPSBlMi0+cmlnaHQuc3ltID8gZXhwcl9hbGxvY19jb21wKEVfRVFVQUwsIHN5bTEsIHN5bTIpCisJCQkJCQkJICAgICA6IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfbm8pOworCQl9CisJCWlmIChlMS0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTItPnR5cGUgPT0gRV9FUVVBTCkgeworCQkJLy8gKGE9J2InKSAmJiAoYSE9J2MnKSAtPiAnYic9J2MnID8gJ24nIDogYT0nYicKKwkJCXN5bTIgPSBlMi0+cmlnaHQuc3ltOworCQkJaWYgKChlMS0+cmlnaHQuc3ltLT5mbGFncyAmIFNZTUJPTF9DT05TVCkgJiYgKHN5bTItPmZsYWdzICYgU1lNQk9MX0NPTlNUKSkKKwkJCQlyZXR1cm4gc3ltMiAhPSBlMS0+cmlnaHQuc3ltID8gZXhwcl9hbGxvY19jb21wKEVfRVFVQUwsIHN5bTEsIHN5bTIpCisJCQkJCQkJICAgICA6IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfbm8pOworCQl9CisJCWlmIChlMS0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTItPnR5cGUgPT0gRV9VTkVRVUFMICYmCisJCQkgICAoKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vKSB8fAorCQkJICAgIChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8gJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcykpKQorCQkJLy8gKGEhPSd5JykgJiYgKGEhPSduJykgLT4gKGE9J20nKQorCQkJcmV0dXJuIGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCBzeW0xLCAmc3ltYm9sX21vZCk7CisKKwkJaWYgKGUxLT50eXBlID09IEVfVU5FUVVBTCAmJiBlMi0+dHlwZSA9PSBFX1VORVFVQUwgJiYKKwkJCSAgICgoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcyAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKSB8fAorCQkJICAgIChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMpKSkKKwkJCS8vIChhIT0neScpICYmIChhIT0nbScpIC0+IChhPSduJykKKwkJCXJldHVybiBleHByX2FsbG9jX2NvbXAoRV9FUVVBTCwgc3ltMSwgJnN5bWJvbF9ubyk7CisKKwkJaWYgKGUxLT50eXBlID09IEVfVU5FUVVBTCAmJiBlMi0+dHlwZSA9PSBFX1VORVFVQUwgJiYKKwkJCSAgICgoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8pIHx8CisJCQkgICAgKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubyAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKSkpCisJCQkvLyAoYSE9J20nKSAmJiAoYSE9J24nKSAtPiAoYT0nbScpCisJCQlyZXR1cm4gZXhwcl9hbGxvY19jb21wKEVfRVFVQUwsIHN5bTEsICZzeW1ib2xfeWVzKTsKKworCQlpZiAoKGUxLT50eXBlID09IEVfU1lNQk9MICYmIGUyLT50eXBlID09IEVfRVFVQUwgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCkgfHwKKwkJICAgIChlMi0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMS0+dHlwZSA9PSBFX0VRVUFMICYmIGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpIHx8CisJCSAgICAoZTEtPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgPT0gRV9VTkVRVUFMICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMpIHx8CisJCSAgICAoZTItPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTEtPnR5cGUgPT0gRV9VTkVRVUFMICYmIGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMpKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKERFQlVHX0VYUFIpIHsKKwkJcHJpbnRmKCJvcHRpbWl6ZSAoIik7CisJCWV4cHJfZnByaW50KGUxLCBzdGRvdXQpOworCQlwcmludGYoIikgJiYgKCIpOworCQlleHByX2ZwcmludChlMiwgc3Rkb3V0KTsKKwkJcHJpbnRmKCIpP1xuIik7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBleHByX2VsaW1pbmF0ZV9kdXBzMShlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3QgZXhwciAqKmVwMSwgc3RydWN0IGV4cHIgKiplcDIpCit7CisjZGVmaW5lIGUxICgqZXAxKQorI2RlZmluZSBlMiAoKmVwMikKKwlzdHJ1Y3QgZXhwciAqdG1wOworCisJaWYgKGUxLT50eXBlID09IHR5cGUpIHsKKwkJZXhwcl9lbGltaW5hdGVfZHVwczEodHlwZSwgJmUxLT5sZWZ0LmV4cHIsICZlMik7CisJCWV4cHJfZWxpbWluYXRlX2R1cHMxKHR5cGUsICZlMS0+cmlnaHQuZXhwciwgJmUyKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoZTItPnR5cGUgPT0gdHlwZSkgeworCQlleHByX2VsaW1pbmF0ZV9kdXBzMSh0eXBlLCAmZTEsICZlMi0+bGVmdC5leHByKTsKKwkJZXhwcl9lbGltaW5hdGVfZHVwczEodHlwZSwgJmUxLCAmZTItPnJpZ2h0LmV4cHIpOworCQlyZXR1cm47CisJfQorCWlmIChlMSA9PSBlMikKKwkJcmV0dXJuOworCisJc3dpdGNoIChlMS0+dHlwZSkgeworCWNhc2UgRV9PUjogY2FzZSBFX0FORDoKKwkJZXhwcl9lbGltaW5hdGVfZHVwczEoZTEtPnR5cGUsICZlMSwgJmUxKTsKKwlkZWZhdWx0OgorCQk7CisJfQorCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBFX09SOgorCQl0bXAgPSBleHByX2pvaW5fb3IoZTEsIGUyKTsKKwkJaWYgKHRtcCkgeworCQkJZXhwcl9mcmVlKGUxKTsgZXhwcl9mcmVlKGUyKTsKKwkJCWUxID0gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF9ubyk7CisJCQllMiA9IHRtcDsKKwkJCXRyYW5zX2NvdW50Kys7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBFX0FORDoKKwkJdG1wID0gZXhwcl9qb2luX2FuZChlMSwgZTIpOworCQlpZiAodG1wKSB7CisJCQlleHByX2ZyZWUoZTEpOyBleHByX2ZyZWUoZTIpOworCQkJZTEgPSBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX3llcyk7CisJCQllMiA9IHRtcDsKKwkJCXRyYW5zX2NvdW50Kys7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJOworCX0KKyN1bmRlZiBlMQorI3VuZGVmIGUyCit9CisKK3N0YXRpYyB2b2lkIGV4cHJfZWxpbWluYXRlX2R1cHMyKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBleHByICoqZXAxLCBzdHJ1Y3QgZXhwciAqKmVwMikKK3sKKyNkZWZpbmUgZTEgKCplcDEpCisjZGVmaW5lIGUyICgqZXAyKQorCXN0cnVjdCBleHByICp0bXAsICp0bXAxLCAqdG1wMjsKKworCWlmIChlMS0+dHlwZSA9PSB0eXBlKSB7CisJCWV4cHJfZWxpbWluYXRlX2R1cHMyKHR5cGUsICZlMS0+bGVmdC5leHByLCAmZTIpOworCQlleHByX2VsaW1pbmF0ZV9kdXBzMih0eXBlLCAmZTEtPnJpZ2h0LmV4cHIsICZlMik7CisJCXJldHVybjsKKwl9CisJaWYgKGUyLT50eXBlID09IHR5cGUpIHsKKwkJZXhwcl9lbGltaW5hdGVfZHVwczIodHlwZSwgJmUxLCAmZTItPmxlZnQuZXhwcik7CisJCWV4cHJfZWxpbWluYXRlX2R1cHMyKHR5cGUsICZlMSwgJmUyLT5yaWdodC5leHByKTsKKwl9CisJaWYgKGUxID09IGUyKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGUxLT50eXBlKSB7CisJY2FzZSBFX09SOgorCQlleHByX2VsaW1pbmF0ZV9kdXBzMihlMS0+dHlwZSwgJmUxLCAmZTEpOworCQkvLyAoRk9PIHx8IEJBUikgJiYgKCFGT08gJiYgIUJBUikgLT4gbgorCQl0bXAxID0gZXhwcl90cmFuc2Zvcm0oZXhwcl9hbGxvY19vbmUoRV9OT1QsIGV4cHJfY29weShlMSkpKTsKKwkJdG1wMiA9IGV4cHJfY29weShlMik7CisJCXRtcCA9IGV4cHJfZXh0cmFjdF9lcV9hbmQoJnRtcDEsICZ0bXAyKTsKKwkJaWYgKGV4cHJfaXNfeWVzKHRtcDEpKSB7CisJCQlleHByX2ZyZWUoZTEpOworCQkJZTEgPSBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX25vKTsKKwkJCXRyYW5zX2NvdW50Kys7CisJCX0KKwkJZXhwcl9mcmVlKHRtcDIpOworCQlleHByX2ZyZWUodG1wMSk7CisJCWV4cHJfZnJlZSh0bXApOworCQlicmVhazsKKwljYXNlIEVfQU5EOgorCQlleHByX2VsaW1pbmF0ZV9kdXBzMihlMS0+dHlwZSwgJmUxLCAmZTEpOworCQkvLyAoRk9PICYmIEJBUikgfHwgKCFGT08gfHwgIUJBUikgLT4geQorCQl0bXAxID0gZXhwcl90cmFuc2Zvcm0oZXhwcl9hbGxvY19vbmUoRV9OT1QsIGV4cHJfY29weShlMSkpKTsKKwkJdG1wMiA9IGV4cHJfY29weShlMik7CisJCXRtcCA9IGV4cHJfZXh0cmFjdF9lcV9vcigmdG1wMSwgJnRtcDIpOworCQlpZiAoZXhwcl9pc19ubyh0bXAxKSkgeworCQkJZXhwcl9mcmVlKGUxKTsKKwkJCWUxID0gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF95ZXMpOworCQkJdHJhbnNfY291bnQrKzsKKwkJfQorCQlleHByX2ZyZWUodG1wMik7CisJCWV4cHJfZnJlZSh0bXAxKTsKKwkJZXhwcl9mcmVlKHRtcCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCTsKKwl9CisjdW5kZWYgZTEKKyN1bmRlZiBlMgorfQorCitzdHJ1Y3QgZXhwciAqZXhwcl9lbGltaW5hdGVfZHVwcyhzdHJ1Y3QgZXhwciAqZSkKK3sKKwlpbnQgb2xkY291bnQ7CisJaWYgKCFlKQorCQlyZXR1cm4gZTsKKworCW9sZGNvdW50ID0gdHJhbnNfY291bnQ7CisJd2hpbGUgKDEpIHsKKwkJdHJhbnNfY291bnQgPSAwOworCQlzd2l0Y2ggKGUtPnR5cGUpIHsKKwkJY2FzZSBFX09SOiBjYXNlIEVfQU5EOgorCQkJZXhwcl9lbGltaW5hdGVfZHVwczEoZS0+dHlwZSwgJmUsICZlKTsKKwkJCWV4cHJfZWxpbWluYXRlX2R1cHMyKGUtPnR5cGUsICZlLCAmZSk7CisJCWRlZmF1bHQ6CisJCQk7CisJCX0KKwkJaWYgKCF0cmFuc19jb3VudCkKKwkJCWJyZWFrOworCQllID0gZXhwcl9lbGltaW5hdGVfeW4oZSk7CisJfQorCXRyYW5zX2NvdW50ID0gb2xkY291bnQ7CisJcmV0dXJuIGU7Cit9CisKK3N0cnVjdCBleHByICpleHByX3RyYW5zZm9ybShzdHJ1Y3QgZXhwciAqZSkKK3sKKwlzdHJ1Y3QgZXhwciAqdG1wOworCisJaWYgKCFlKQorCQlyZXR1cm4gTlVMTDsKKwlzd2l0Y2ggKGUtPnR5cGUpIHsKKwljYXNlIEVfRVFVQUw6CisJY2FzZSBFX1VORVFVQUw6CisJY2FzZSBFX1NZTUJPTDoKKwljYXNlIEVfTElTVDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZS0+bGVmdC5leHByID0gZXhwcl90cmFuc2Zvcm0oZS0+bGVmdC5leHByKTsKKwkJZS0+cmlnaHQuZXhwciA9IGV4cHJfdHJhbnNmb3JtKGUtPnJpZ2h0LmV4cHIpOworCX0KKworCXN3aXRjaCAoZS0+dHlwZSkgeworCWNhc2UgRV9FUVVBTDoKKwkJaWYgKGUtPmxlZnQuc3ltLT50eXBlICE9IFNfQk9PTEVBTikKKwkJCWJyZWFrOworCQlpZiAoZS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8pIHsKKwkJCWUtPnR5cGUgPSBFX05PVDsKKwkJCWUtPmxlZnQuZXhwciA9IGV4cHJfYWxsb2Nfc3ltYm9sKGUtPmxlZnQuc3ltKTsKKwkJCWUtPnJpZ2h0LnN5bSA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKSB7CisJCQlwcmludGYoImJvb2xlYW4gc3ltYm9sICVzIHRlc3RlZCBmb3IgJ20nPyB0ZXN0IGZvcmNlZCB0byAnbidcbiIsIGUtPmxlZnQuc3ltLT5uYW1lKTsKKwkJCWUtPnR5cGUgPSBFX1NZTUJPTDsKKwkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF9ubzsKKwkJCWUtPnJpZ2h0LnN5bSA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZS0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSB7CisJCQllLT50eXBlID0gRV9TWU1CT0w7CisJCQllLT5yaWdodC5zeW0gPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBFX1VORVFVQUw6CisJCWlmIChlLT5sZWZ0LnN5bS0+dHlwZSAhPSBTX0JPT0xFQU4pCisJCQlicmVhazsKKwkJaWYgKGUtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vKSB7CisJCQllLT50eXBlID0gRV9TWU1CT0w7CisJCQllLT5yaWdodC5zeW0gPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGUtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCkgeworCQkJcHJpbnRmKCJib29sZWFuIHN5bWJvbCAlcyB0ZXN0ZWQgZm9yICdtJz8gdGVzdCBmb3JjZWQgdG8gJ3knXG4iLCBlLT5sZWZ0LnN5bS0+bmFtZSk7CisJCQllLT50eXBlID0gRV9TWU1CT0w7CisJCQllLT5sZWZ0LnN5bSA9ICZzeW1ib2xfeWVzOworCQkJZS0+cmlnaHQuc3ltID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChlLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMpIHsKKwkJCWUtPnR5cGUgPSBFX05PVDsKKwkJCWUtPmxlZnQuZXhwciA9IGV4cHJfYWxsb2Nfc3ltYm9sKGUtPmxlZnQuc3ltKTsKKwkJCWUtPnJpZ2h0LnN5bSA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIEVfTk9UOgorCQlzd2l0Y2ggKGUtPmxlZnQuZXhwci0+dHlwZSkgeworCQljYXNlIEVfTk9UOgorCQkJLy8gISFhIC0+IGEKKwkJCXRtcCA9IGUtPmxlZnQuZXhwci0+bGVmdC5leHByOworCQkJZnJlZShlLT5sZWZ0LmV4cHIpOworCQkJZnJlZShlKTsKKwkJCWUgPSB0bXA7CisJCQllID0gZXhwcl90cmFuc2Zvcm0oZSk7CisJCQlicmVhazsKKwkJY2FzZSBFX0VRVUFMOgorCQljYXNlIEVfVU5FUVVBTDoKKwkJCS8vICFhPSd4JyAtPiBhIT0neCcKKwkJCXRtcCA9IGUtPmxlZnQuZXhwcjsKKwkJCWZyZWUoZSk7CisJCQllID0gdG1wOworCQkJZS0+dHlwZSA9IGUtPnR5cGUgPT0gRV9FUVVBTCA/IEVfVU5FUVVBTCA6IEVfRVFVQUw7CisJCQlicmVhazsKKwkJY2FzZSBFX09SOgorCQkJLy8gIShhIHx8IGIpIC0+ICFhICYmICFiCisJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7CisJCQllLT50eXBlID0gRV9BTkQ7CisJCQllLT5yaWdodC5leHByID0gZXhwcl9hbGxvY19vbmUoRV9OT1QsIHRtcC0+cmlnaHQuZXhwcik7CisJCQl0bXAtPnR5cGUgPSBFX05PVDsKKwkJCXRtcC0+cmlnaHQuZXhwciA9IE5VTEw7CisJCQllID0gZXhwcl90cmFuc2Zvcm0oZSk7CisJCQlicmVhazsKKwkJY2FzZSBFX0FORDoKKwkJCS8vICEoYSAmJiBiKSAtPiAhYSB8fCAhYgorCQkJdG1wID0gZS0+bGVmdC5leHByOworCQkJZS0+dHlwZSA9IEVfT1I7CisJCQllLT5yaWdodC5leHByID0gZXhwcl9hbGxvY19vbmUoRV9OT1QsIHRtcC0+cmlnaHQuZXhwcik7CisJCQl0bXAtPnR5cGUgPSBFX05PVDsKKwkJCXRtcC0+cmlnaHQuZXhwciA9IE5VTEw7CisJCQllID0gZXhwcl90cmFuc2Zvcm0oZSk7CisJCQlicmVhazsKKwkJY2FzZSBFX1NZTUJPTDoKKwkJCWlmIChlLT5sZWZ0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xfeWVzKSB7CisJCQkJLy8gISd5JyAtPiAnbicKKwkJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7CisJCQkJZnJlZShlKTsKKwkJCQllID0gdG1wOworCQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsKKwkJCQllLT5sZWZ0LnN5bSA9ICZzeW1ib2xfbm87CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoZS0+bGVmdC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX21vZCkgeworCQkJCS8vICEnbScgLT4gJ20nCisJCQkJdG1wID0gZS0+bGVmdC5leHByOworCQkJCWZyZWUoZSk7CisJCQkJZSA9IHRtcDsKKwkJCQllLT50eXBlID0gRV9TWU1CT0w7CisJCQkJZS0+bGVmdC5zeW0gPSAmc3ltYm9sX21vZDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChlLT5sZWZ0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xfbm8pIHsKKwkJCQkvLyAhJ24nIC0+ICd5JworCQkJCXRtcCA9IGUtPmxlZnQuZXhwcjsKKwkJCQlmcmVlKGUpOworCQkJCWUgPSB0bXA7CisJCQkJZS0+dHlwZSA9IEVfU1lNQk9MOworCQkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF95ZXM7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQk7CisJfQorCXJldHVybiBlOworfQorCitpbnQgZXhwcl9jb250YWluc19zeW1ib2woc3RydWN0IGV4cHIgKmRlcCwgc3RydWN0IHN5bWJvbCAqc3ltKQoreworCWlmICghZGVwKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoZGVwLT50eXBlKSB7CisJY2FzZSBFX0FORDoKKwljYXNlIEVfT1I6CisJCXJldHVybiBleHByX2NvbnRhaW5zX3N5bWJvbChkZXAtPmxlZnQuZXhwciwgc3ltKSB8fAorCQkgICAgICAgZXhwcl9jb250YWluc19zeW1ib2woZGVwLT5yaWdodC5leHByLCBzeW0pOworCWNhc2UgRV9TWU1CT0w6CisJCXJldHVybiBkZXAtPmxlZnQuc3ltID09IHN5bTsKKwljYXNlIEVfRVFVQUw6CisJY2FzZSBFX1VORVFVQUw6CisJCXJldHVybiBkZXAtPmxlZnQuc3ltID09IHN5bSB8fAorCQkgICAgICAgZGVwLT5yaWdodC5zeW0gPT0gc3ltOworCWNhc2UgRV9OT1Q6CisJCXJldHVybiBleHByX2NvbnRhaW5zX3N5bWJvbChkZXAtPmxlZnQuZXhwciwgc3ltKTsKKwlkZWZhdWx0OgorCQk7CisJfQorCXJldHVybiAwOworfQorCitib29sIGV4cHJfZGVwZW5kc19zeW1ib2woc3RydWN0IGV4cHIgKmRlcCwgc3RydWN0IHN5bWJvbCAqc3ltKQoreworCWlmICghZGVwKQorCQlyZXR1cm4gZmFsc2U7CisKKwlzd2l0Y2ggKGRlcC0+dHlwZSkgeworCWNhc2UgRV9BTkQ6CisJCXJldHVybiBleHByX2RlcGVuZHNfc3ltYm9sKGRlcC0+bGVmdC5leHByLCBzeW0pIHx8CisJCSAgICAgICBleHByX2RlcGVuZHNfc3ltYm9sKGRlcC0+cmlnaHQuZXhwciwgc3ltKTsKKwljYXNlIEVfU1lNQk9MOgorCQlyZXR1cm4gZGVwLT5sZWZ0LnN5bSA9PSBzeW07CisJY2FzZSBFX0VRVUFMOgorCQlpZiAoZGVwLT5sZWZ0LnN5bSA9PSBzeW0pIHsKKwkJCWlmIChkZXAtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcyB8fCBkZXAtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlicmVhazsKKwljYXNlIEVfVU5FUVVBTDoKKwkJaWYgKGRlcC0+bGVmdC5zeW0gPT0gc3ltKSB7CisJCQlpZiAoZGVwLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubykKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQk7CisJfQorIAlyZXR1cm4gZmFsc2U7Cit9CisKK3N0cnVjdCBleHByICpleHByX2V4dHJhY3RfZXFfYW5kKHN0cnVjdCBleHByICoqZXAxLCBzdHJ1Y3QgZXhwciAqKmVwMikKK3sKKwlzdHJ1Y3QgZXhwciAqdG1wID0gTlVMTDsKKwlleHByX2V4dHJhY3RfZXEoRV9BTkQsICZ0bXAsIGVwMSwgZXAyKTsKKwlpZiAodG1wKSB7CisJCSplcDEgPSBleHByX2VsaW1pbmF0ZV95bigqZXAxKTsKKwkJKmVwMiA9IGV4cHJfZWxpbWluYXRlX3luKCplcDIpOworCX0KKwlyZXR1cm4gdG1wOworfQorCitzdHJ1Y3QgZXhwciAqZXhwcl9leHRyYWN0X2VxX29yKHN0cnVjdCBleHByICoqZXAxLCBzdHJ1Y3QgZXhwciAqKmVwMikKK3sKKwlzdHJ1Y3QgZXhwciAqdG1wID0gTlVMTDsKKwlleHByX2V4dHJhY3RfZXEoRV9PUiwgJnRtcCwgZXAxLCBlcDIpOworCWlmICh0bXApIHsKKwkJKmVwMSA9IGV4cHJfZWxpbWluYXRlX3luKCplcDEpOworCQkqZXAyID0gZXhwcl9lbGltaW5hdGVfeW4oKmVwMik7CisJfQorCXJldHVybiB0bXA7Cit9CisKK3ZvaWQgZXhwcl9leHRyYWN0X2VxKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBleHByICoqZXAsIHN0cnVjdCBleHByICoqZXAxLCBzdHJ1Y3QgZXhwciAqKmVwMikKK3sKKyNkZWZpbmUgZTEgKCplcDEpCisjZGVmaW5lIGUyICgqZXAyKQorCWlmIChlMS0+dHlwZSA9PSB0eXBlKSB7CisJCWV4cHJfZXh0cmFjdF9lcSh0eXBlLCBlcCwgJmUxLT5sZWZ0LmV4cHIsICZlMik7CisJCWV4cHJfZXh0cmFjdF9lcSh0eXBlLCBlcCwgJmUxLT5yaWdodC5leHByLCAmZTIpOworCQlyZXR1cm47CisJfQorCWlmIChlMi0+dHlwZSA9PSB0eXBlKSB7CisJCWV4cHJfZXh0cmFjdF9lcSh0eXBlLCBlcCwgZXAxLCAmZTItPmxlZnQuZXhwcik7CisJCWV4cHJfZXh0cmFjdF9lcSh0eXBlLCBlcCwgZXAxLCAmZTItPnJpZ2h0LmV4cHIpOworCQlyZXR1cm47CisJfQorCWlmIChleHByX2VxKGUxLCBlMikpIHsKKwkJKmVwID0gKmVwID8gZXhwcl9hbGxvY190d28odHlwZSwgKmVwLCBlMSkgOiBlMTsKKwkJZXhwcl9mcmVlKGUyKTsKKwkJaWYgKHR5cGUgPT0gRV9BTkQpIHsKKwkJCWUxID0gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF95ZXMpOworCQkJZTIgPSBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX3llcyk7CisJCX0gZWxzZSBpZiAodHlwZSA9PSBFX09SKSB7CisJCQllMSA9IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfbm8pOworCQkJZTIgPSBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX25vKTsKKwkJfQorCX0KKyN1bmRlZiBlMQorI3VuZGVmIGUyCit9CisKK3N0cnVjdCBleHByICpleHByX3RyYW5zX2NvbXBhcmUoc3RydWN0IGV4cHIgKmUsIGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3QgZXhwciAqZTEsICplMjsKKworCWlmICghZSkgeworCQllID0gZXhwcl9hbGxvY19zeW1ib2woc3ltKTsKKwkJaWYgKHR5cGUgPT0gRV9VTkVRVUFMKQorCQkJZSA9IGV4cHJfYWxsb2Nfb25lKEVfTk9ULCBlKTsKKwkJcmV0dXJuIGU7CisJfQorCXN3aXRjaCAoZS0+dHlwZSkgeworCWNhc2UgRV9BTkQ6CisJCWUxID0gZXhwcl90cmFuc19jb21wYXJlKGUtPmxlZnQuZXhwciwgRV9FUVVBTCwgc3ltKTsKKwkJZTIgPSBleHByX3RyYW5zX2NvbXBhcmUoZS0+cmlnaHQuZXhwciwgRV9FUVVBTCwgc3ltKTsKKwkJaWYgKHN5bSA9PSAmc3ltYm9sX3llcykKKwkJCWUgPSBleHByX2FsbG9jX3R3byhFX0FORCwgZTEsIGUyKTsKKwkJaWYgKHN5bSA9PSAmc3ltYm9sX25vKQorCQkJZSA9IGV4cHJfYWxsb2NfdHdvKEVfT1IsIGUxLCBlMik7CisJCWlmICh0eXBlID09IEVfVU5FUVVBTCkKKwkJCWUgPSBleHByX2FsbG9jX29uZShFX05PVCwgZSk7CisJCXJldHVybiBlOworCWNhc2UgRV9PUjoKKwkJZTEgPSBleHByX3RyYW5zX2NvbXBhcmUoZS0+bGVmdC5leHByLCBFX0VRVUFMLCBzeW0pOworCQllMiA9IGV4cHJfdHJhbnNfY29tcGFyZShlLT5yaWdodC5leHByLCBFX0VRVUFMLCBzeW0pOworCQlpZiAoc3ltID09ICZzeW1ib2xfeWVzKQorCQkJZSA9IGV4cHJfYWxsb2NfdHdvKEVfT1IsIGUxLCBlMik7CisJCWlmIChzeW0gPT0gJnN5bWJvbF9ubykKKwkJCWUgPSBleHByX2FsbG9jX3R3byhFX0FORCwgZTEsIGUyKTsKKwkJaWYgKHR5cGUgPT0gRV9VTkVRVUFMKQorCQkJZSA9IGV4cHJfYWxsb2Nfb25lKEVfTk9ULCBlKTsKKwkJcmV0dXJuIGU7CisJY2FzZSBFX05PVDoKKwkJcmV0dXJuIGV4cHJfdHJhbnNfY29tcGFyZShlLT5sZWZ0LmV4cHIsIHR5cGUgPT0gRV9FUVVBTCA/IEVfVU5FUVVBTCA6IEVfRVFVQUwsIHN5bSk7CisJY2FzZSBFX1VORVFVQUw6CisJY2FzZSBFX0VRVUFMOgorCQlpZiAodHlwZSA9PSBFX0VRVUFMKSB7CisJCQlpZiAoc3ltID09ICZzeW1ib2xfeWVzKQorCQkJCXJldHVybiBleHByX2NvcHkoZSk7CisJCQlpZiAoc3ltID09ICZzeW1ib2xfbW9kKQorCQkJCXJldHVybiBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX25vKTsKKwkJCWlmIChzeW0gPT0gJnN5bWJvbF9ubykKKwkJCQlyZXR1cm4gZXhwcl9hbGxvY19vbmUoRV9OT1QsIGV4cHJfY29weShlKSk7CisJCX0gZWxzZSB7CisJCQlpZiAoc3ltID09ICZzeW1ib2xfeWVzKQorCQkJCXJldHVybiBleHByX2FsbG9jX29uZShFX05PVCwgZXhwcl9jb3B5KGUpKTsKKwkJCWlmIChzeW0gPT0gJnN5bWJvbF9tb2QpCisJCQkJcmV0dXJuIGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfeWVzKTsKKwkJCWlmIChzeW0gPT0gJnN5bWJvbF9ubykKKwkJCQlyZXR1cm4gZXhwcl9jb3B5KGUpOworCQl9CisJCWJyZWFrOworCWNhc2UgRV9TWU1CT0w6CisJCXJldHVybiBleHByX2FsbG9jX2NvbXAodHlwZSwgZS0+bGVmdC5zeW0sIHN5bSk7CisJY2FzZSBFX0xJU1Q6CisJY2FzZSBFX1JBTkdFOgorCWNhc2UgRV9OT05FOgorCQkvKiBwYW5pYyAqLzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3RyaXN0YXRlIGV4cHJfY2FsY192YWx1ZShzdHJ1Y3QgZXhwciAqZSkKK3sKKwl0cmlzdGF0ZSB2YWwxLCB2YWwyOworCWNvbnN0IGNoYXIgKnN0cjEsICpzdHIyOworCisJaWYgKCFlKQorCQlyZXR1cm4geWVzOworCisJc3dpdGNoIChlLT50eXBlKSB7CisJY2FzZSBFX1NZTUJPTDoKKwkJc3ltX2NhbGNfdmFsdWUoZS0+bGVmdC5zeW0pOworCQlyZXR1cm4gZS0+bGVmdC5zeW0tPmN1cnIudHJpOworCWNhc2UgRV9BTkQ6CisJCXZhbDEgPSBleHByX2NhbGNfdmFsdWUoZS0+bGVmdC5leHByKTsKKwkJdmFsMiA9IGV4cHJfY2FsY192YWx1ZShlLT5yaWdodC5leHByKTsKKwkJcmV0dXJuIEVYUFJfQU5EKHZhbDEsIHZhbDIpOworCWNhc2UgRV9PUjoKKwkJdmFsMSA9IGV4cHJfY2FsY192YWx1ZShlLT5sZWZ0LmV4cHIpOworCQl2YWwyID0gZXhwcl9jYWxjX3ZhbHVlKGUtPnJpZ2h0LmV4cHIpOworCQlyZXR1cm4gRVhQUl9PUih2YWwxLCB2YWwyKTsKKwljYXNlIEVfTk9UOgorCQl2YWwxID0gZXhwcl9jYWxjX3ZhbHVlKGUtPmxlZnQuZXhwcik7CisJCXJldHVybiBFWFBSX05PVCh2YWwxKTsKKwljYXNlIEVfRVFVQUw6CisJCXN5bV9jYWxjX3ZhbHVlKGUtPmxlZnQuc3ltKTsKKwkJc3ltX2NhbGNfdmFsdWUoZS0+cmlnaHQuc3ltKTsKKwkJc3RyMSA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKGUtPmxlZnQuc3ltKTsKKwkJc3RyMiA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKGUtPnJpZ2h0LnN5bSk7CisJCXJldHVybiAhc3RyY21wKHN0cjEsIHN0cjIpID8geWVzIDogbm87CisJY2FzZSBFX1VORVFVQUw6CisJCXN5bV9jYWxjX3ZhbHVlKGUtPmxlZnQuc3ltKTsKKwkJc3ltX2NhbGNfdmFsdWUoZS0+cmlnaHQuc3ltKTsKKwkJc3RyMSA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKGUtPmxlZnQuc3ltKTsKKwkJc3RyMiA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKGUtPnJpZ2h0LnN5bSk7CisJCXJldHVybiAhc3RyY21wKHN0cjEsIHN0cjIpID8gbm8gOiB5ZXM7CisJZGVmYXVsdDoKKwkJcHJpbnRmKCJleHByX2NhbGNfdmFsdWU6ICVkP1xuIiwgZS0+dHlwZSk7CisJCXJldHVybiBubzsKKwl9Cit9CisKK2ludCBleHByX2NvbXBhcmVfdHlwZShlbnVtIGV4cHJfdHlwZSB0MSwgZW51bSBleHByX3R5cGUgdDIpCit7CisjaWYgMAorCXJldHVybiAxOworI2Vsc2UKKwlpZiAodDEgPT0gdDIpCisJCXJldHVybiAwOworCXN3aXRjaCAodDEpIHsKKwljYXNlIEVfRVFVQUw6CisJY2FzZSBFX1VORVFVQUw6CisJCWlmICh0MiA9PSBFX05PVCkKKwkJCXJldHVybiAxOworCWNhc2UgRV9OT1Q6CisJCWlmICh0MiA9PSBFX0FORCkKKwkJCXJldHVybiAxOworCWNhc2UgRV9BTkQ6CisJCWlmICh0MiA9PSBFX09SKQorCQkJcmV0dXJuIDE7CisJY2FzZSBFX09SOgorCQlpZiAodDIgPT0gRV9MSVNUKQorCQkJcmV0dXJuIDE7CisJY2FzZSBFX0xJU1Q6CisJCWlmICh0MiA9PSAwKQorCQkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCX0KKwlwcmludGYoIlslZGd0JWQ/XSIsIHQxLCB0Mik7CisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhwciAqCitleHByX2dldF9sZWZ0bW9zdF9zeW1ib2woY29uc3Qgc3RydWN0IGV4cHIgKmUpCit7CisKKwlpZiAoZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXdoaWxlIChlLT50eXBlICE9IEVfU1lNQk9MKQorCQllID0gZS0+bGVmdC5leHByOworCisJcmV0dXJuIGV4cHJfY29weShlKTsKK30KKworLyoKKyAqIEdpdmVuIGV4cHJlc3Npb24gYGUxJyBhbmQgYGUyJywgcmV0dXJucyB0aGUgbGVhZiBvZiB0aGUgbG9uZ2VzdAorICogc3ViLWV4cHJlc3Npb24gb2YgYGUxJyBub3QgY29udGFpbmluZyAnZTIuCisgKi8KK3N0cnVjdCBleHByICpleHByX3NpbXBsaWZ5X3VubWV0X2RlcChzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICplMikKK3sKKwlzdHJ1Y3QgZXhwciAqcmV0OworCisJc3dpdGNoIChlMS0+dHlwZSkgeworCWNhc2UgRV9PUjoKKwkJcmV0dXJuIGV4cHJfYWxsb2NfYW5kKAorCQkgICAgZXhwcl9zaW1wbGlmeV91bm1ldF9kZXAoZTEtPmxlZnQuZXhwciwgZTIpLAorCQkgICAgZXhwcl9zaW1wbGlmeV91bm1ldF9kZXAoZTEtPnJpZ2h0LmV4cHIsIGUyKSk7CisJY2FzZSBFX0FORDogeworCQlzdHJ1Y3QgZXhwciAqZTsKKwkJZSA9IGV4cHJfYWxsb2NfYW5kKGV4cHJfY29weShlMSksIGV4cHJfY29weShlMikpOworCQllID0gZXhwcl9lbGltaW5hdGVfZHVwcyhlKTsKKwkJcmV0ID0gKCFleHByX2VxKGUsIGUxKSkgPyBlMSA6IE5VTEw7CisJCWV4cHJfZnJlZShlKTsKKwkJYnJlYWs7CisJCX0KKwlkZWZhdWx0OgorCQlyZXQgPSBlMTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGV4cHJfZ2V0X2xlZnRtb3N0X3N5bWJvbChyZXQpOworfQorCit2b2lkIGV4cHJfcHJpbnQoc3RydWN0IGV4cHIgKmUsIHZvaWQgKCpmbikodm9pZCAqLCBzdHJ1Y3Qgc3ltYm9sICosIGNvbnN0IGNoYXIgKiksIHZvaWQgKmRhdGEsIGludCBwcmV2dG9rZW4pCit7CisJaWYgKCFlKSB7CisJCWZuKGRhdGEsIE5VTEwsICJ5Iik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZXhwcl9jb21wYXJlX3R5cGUocHJldnRva2VuLCBlLT50eXBlKSA+IDApCisJCWZuKGRhdGEsIE5VTEwsICIoIik7CisJc3dpdGNoIChlLT50eXBlKSB7CisJY2FzZSBFX1NZTUJPTDoKKwkJaWYgKGUtPmxlZnQuc3ltLT5uYW1lKQorCQkJZm4oZGF0YSwgZS0+bGVmdC5zeW0sIGUtPmxlZnQuc3ltLT5uYW1lKTsKKwkJZWxzZQorCQkJZm4oZGF0YSwgTlVMTCwgIjxjaG9pY2U+Iik7CisJCWJyZWFrOworCWNhc2UgRV9OT1Q6CisJCWZuKGRhdGEsIE5VTEwsICIhIik7CisJCWV4cHJfcHJpbnQoZS0+bGVmdC5leHByLCBmbiwgZGF0YSwgRV9OT1QpOworCQlicmVhazsKKwljYXNlIEVfRVFVQUw6CisJCWlmIChlLT5sZWZ0LnN5bS0+bmFtZSkKKwkJCWZuKGRhdGEsIGUtPmxlZnQuc3ltLCBlLT5sZWZ0LnN5bS0+bmFtZSk7CisJCWVsc2UKKwkJCWZuKGRhdGEsIE5VTEwsICI8Y2hvaWNlPiIpOworCQlmbihkYXRhLCBOVUxMLCAiPSIpOworCQlmbihkYXRhLCBlLT5yaWdodC5zeW0sIGUtPnJpZ2h0LnN5bS0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgRV9VTkVRVUFMOgorCQlpZiAoZS0+bGVmdC5zeW0tPm5hbWUpCisJCQlmbihkYXRhLCBlLT5sZWZ0LnN5bSwgZS0+bGVmdC5zeW0tPm5hbWUpOworCQllbHNlCisJCQlmbihkYXRhLCBOVUxMLCAiPGNob2ljZT4iKTsKKwkJZm4oZGF0YSwgTlVMTCwgIiE9Iik7CisJCWZuKGRhdGEsIGUtPnJpZ2h0LnN5bSwgZS0+cmlnaHQuc3ltLT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBFX09SOgorCQlleHByX3ByaW50KGUtPmxlZnQuZXhwciwgZm4sIGRhdGEsIEVfT1IpOworCQlmbihkYXRhLCBOVUxMLCAiIHx8ICIpOworCQlleHByX3ByaW50KGUtPnJpZ2h0LmV4cHIsIGZuLCBkYXRhLCBFX09SKTsKKwkJYnJlYWs7CisJY2FzZSBFX0FORDoKKwkJZXhwcl9wcmludChlLT5sZWZ0LmV4cHIsIGZuLCBkYXRhLCBFX0FORCk7CisJCWZuKGRhdGEsIE5VTEwsICIgJiYgIik7CisJCWV4cHJfcHJpbnQoZS0+cmlnaHQuZXhwciwgZm4sIGRhdGEsIEVfQU5EKTsKKwkJYnJlYWs7CisJY2FzZSBFX0xJU1Q6CisJCWZuKGRhdGEsIGUtPnJpZ2h0LnN5bSwgZS0+cmlnaHQuc3ltLT5uYW1lKTsKKwkJaWYgKGUtPmxlZnQuZXhwcikgeworCQkJZm4oZGF0YSwgTlVMTCwgIiBeICIpOworCQkJZXhwcl9wcmludChlLT5sZWZ0LmV4cHIsIGZuLCBkYXRhLCBFX0xJU1QpOworCQl9CisJCWJyZWFrOworCWNhc2UgRV9SQU5HRToKKwkJZm4oZGF0YSwgTlVMTCwgIlsiKTsKKwkJZm4oZGF0YSwgZS0+bGVmdC5zeW0sIGUtPmxlZnQuc3ltLT5uYW1lKTsKKwkJZm4oZGF0YSwgTlVMTCwgIiAiKTsKKwkJZm4oZGF0YSwgZS0+cmlnaHQuc3ltLCBlLT5yaWdodC5zeW0tPm5hbWUpOworCQlmbihkYXRhLCBOVUxMLCAiXSIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCSAgeworCQljaGFyIGJ1ZlszMl07CisJCXNwcmludGYoYnVmLCAiPHVua25vd24gdHlwZSAlZD4iLCBlLT50eXBlKTsKKwkJZm4oZGF0YSwgTlVMTCwgYnVmKTsKKwkJYnJlYWs7CisJICB9CisJfQorCWlmIChleHByX2NvbXBhcmVfdHlwZShwcmV2dG9rZW4sIGUtPnR5cGUpID4gMCkKKwkJZm4oZGF0YSwgTlVMTCwgIikiKTsKK30KKworc3RhdGljIHZvaWQgZXhwcl9wcmludF9maWxlX2hlbHBlcih2b2lkICpkYXRhLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKnN0cikKK3sKKwl4ZndyaXRlKHN0ciwgc3RybGVuKHN0ciksIDEsIGRhdGEpOworfQorCit2b2lkIGV4cHJfZnByaW50KHN0cnVjdCBleHByICplLCBGSUxFICpvdXQpCit7CisJZXhwcl9wcmludChlLCBleHByX3ByaW50X2ZpbGVfaGVscGVyLCBvdXQsIEVfTk9ORSk7Cit9CisKK3N0YXRpYyB2b2lkIGV4cHJfcHJpbnRfZ3N0cl9oZWxwZXIodm9pZCAqZGF0YSwgc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpzdHIpCit7CisJc3RydWN0IGdzdHIgKmdzID0gKHN0cnVjdCBnc3RyKilkYXRhOworCWNvbnN0IGNoYXIgKnN5bV9zdHIgPSBOVUxMOworCisJaWYgKHN5bSkKKwkJc3ltX3N0ciA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSk7CisKKwlpZiAoZ3MtPm1heF93aWR0aCkgeworCQl1bnNpZ25lZCBleHRyYV9sZW5ndGggPSBzdHJsZW4oc3RyKTsKKwkJY29uc3QgY2hhciAqbGFzdF9jciA9IHN0cnJjaHIoZ3MtPnMsICdcbicpOworCQl1bnNpZ25lZCBsYXN0X2xpbmVfbGVuZ3RoOworCisJCWlmIChzeW1fc3RyKQorCQkJZXh0cmFfbGVuZ3RoICs9IDQgKyBzdHJsZW4oc3ltX3N0cik7CisKKwkJaWYgKCFsYXN0X2NyKQorCQkJbGFzdF9jciA9IGdzLT5zOworCisJCWxhc3RfbGluZV9sZW5ndGggPSBzdHJsZW4oZ3MtPnMpIC0gKGxhc3RfY3IgLSBncy0+cyk7CisKKwkJaWYgKChsYXN0X2xpbmVfbGVuZ3RoICsgZXh0cmFfbGVuZ3RoKSA+IGdzLT5tYXhfd2lkdGgpCisJCQlzdHJfYXBwZW5kKGdzLCAiXFxcbiIpOworCX0KKworCXN0cl9hcHBlbmQoZ3MsIHN0cik7CisJaWYgKHN5bSAmJiBzeW0tPnR5cGUgIT0gU19VTktOT1dOKQorCQlzdHJfcHJpbnRmKGdzLCAiIFs9JXNdIiwgc3ltX3N0cik7Cit9CisKK3ZvaWQgZXhwcl9nc3RyX3ByaW50KHN0cnVjdCBleHByICplLCBzdHJ1Y3QgZ3N0ciAqZ3MpCit7CisJZXhwcl9wcmludChlLCBleHByX3ByaW50X2dzdHJfaGVscGVyLCBncywgRV9OT05FKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQva2NvbmZpZy9leHByLmggYi9saWIvY3QtbmctMS4xMy40L2tjb25maWcvZXhwci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YmZhZTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2tjb25maWcvZXhwci5oCkBAIC0wLDAgKzEsMjI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuCisgKi8KKworI2lmbmRlZiBFWFBSX0gKKyNkZWZpbmUgRVhQUl9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZuZGVmIF9fY3BsdXNwbHVzCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2VuZGlmCisKK3N0cnVjdCBmaWxlIHsKKwlzdHJ1Y3QgZmlsZSAqbmV4dDsKKwlzdHJ1Y3QgZmlsZSAqcGFyZW50OworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGxpbmVubzsKK307CisKK3R5cGVkZWYgZW51bSB0cmlzdGF0ZSB7CisJbm8sIG1vZCwgeWVzCit9IHRyaXN0YXRlOworCitlbnVtIGV4cHJfdHlwZSB7CisJRV9OT05FLCBFX09SLCBFX0FORCwgRV9OT1QsIEVfRVFVQUwsIEVfVU5FUVVBTCwgRV9MSVNULCBFX1NZTUJPTCwgRV9SQU5HRQorfTsKKwordW5pb24gZXhwcl9kYXRhIHsKKwlzdHJ1Y3QgZXhwciAqZXhwcjsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07Cit9OworCitzdHJ1Y3QgZXhwciB7CisJZW51bSBleHByX3R5cGUgdHlwZTsKKwl1bmlvbiBleHByX2RhdGEgbGVmdCwgcmlnaHQ7Cit9OworCisjZGVmaW5lIEVYUFJfT1IoZGVwMSwgZGVwMikJKCgoZGVwMSk+KGRlcDIpKT8oZGVwMSk6KGRlcDIpKQorI2RlZmluZSBFWFBSX0FORChkZXAxLCBkZXAyKQkoKChkZXAxKTwoZGVwMikpPyhkZXAxKTooZGVwMikpCisjZGVmaW5lIEVYUFJfTk9UKGRlcCkJCSgyLShkZXApKQorCisjZGVmaW5lIGV4cHJfbGlzdF9mb3JfZWFjaF9zeW0obCwgZSwgcykgXAorCWZvciAoZSA9IChsKTsgZSAmJiAocyA9IGUtPnJpZ2h0LnN5bSk7IGUgPSBlLT5sZWZ0LmV4cHIpCisKK3N0cnVjdCBleHByX3ZhbHVlIHsKKwlzdHJ1Y3QgZXhwciAqZXhwcjsKKwl0cmlzdGF0ZSB0cmk7Cit9OworCitzdHJ1Y3Qgc3ltYm9sX3ZhbHVlIHsKKwl2b2lkICp2YWw7CisJdHJpc3RhdGUgdHJpOworfTsKKworZW51bSBzeW1ib2xfdHlwZSB7CisJU19VTktOT1dOLCBTX0JPT0xFQU4sIFNfVFJJU1RBVEUsIFNfSU5ULCBTX0hFWCwgU19TVFJJTkcsIFNfT1RIRVIKK307CisKKy8qIGVudW0gdmFsdWVzIGFyZSB1c2VkIGFzIGluZGV4IHRvIHN5bWJvbC5kZWZbXSAqLworZW51bSB7CisJU19ERUZfVVNFUiwJCS8qIG1haW4gdXNlciB2YWx1ZSAqLworCVNfREVGX0FVVE8sCQkvKiB2YWx1ZXMgcmVhZCBmcm9tIGF1dG8uY29uZiAqLworCVNfREVGX0RFRjMsCQkvKiBSZXNlcnZlZCBmb3IgVUkgdXNhZ2UgKi8KKwlTX0RFRl9ERUY0LAkJLyogUmVzZXJ2ZWQgZm9yIFVJIHVzYWdlICovCisJU19ERUZfQ09VTlQKK307CisKK3N0cnVjdCBzeW1ib2wgeworCXN0cnVjdCBzeW1ib2wgKm5leHQ7CisJY2hhciAqbmFtZTsKKwllbnVtIHN5bWJvbF90eXBlIHR5cGU7CisJc3RydWN0IHN5bWJvbF92YWx1ZSBjdXJyOworCXN0cnVjdCBzeW1ib2xfdmFsdWUgZGVmW1NfREVGX0NPVU5UXTsKKwl0cmlzdGF0ZSB2aXNpYmxlOworCWludCBmbGFnczsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IGV4cHJfdmFsdWUgZGlyX2RlcDsKKwlzdHJ1Y3QgZXhwcl92YWx1ZSByZXZfZGVwOworfTsKKworI2RlZmluZSBmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSBmb3IgKGkgPSAwOyBpIDwgU1lNQk9MX0hBU0hTSVpFOyBpKyspIGZvciAoc3ltID0gc3ltYm9sX2hhc2hbaV07IHN5bTsgc3ltID0gc3ltLT5uZXh0KSBpZiAoc3ltLT50eXBlICE9IFNfT1RIRVIpCisKKyNkZWZpbmUgU1lNQk9MX0NPTlNUICAgICAgMHgwMDAxICAvKiBzeW1ib2wgaXMgY29uc3QgKi8KKyNkZWZpbmUgU1lNQk9MX0NIRUNLICAgICAgMHgwMDA4ICAvKiB1c2VkIGR1cmluZyBkZXBlbmRlbmN5IGNoZWNraW5nICovCisjZGVmaW5lIFNZTUJPTF9DSE9JQ0UgICAgIDB4MDAxMCAgLyogc3RhcnQgb2YgYSBjaG9pY2UgYmxvY2sgKG51bGwgbmFtZSkgKi8KKyNkZWZpbmUgU1lNQk9MX0NIT0lDRVZBTCAgMHgwMDIwICAvKiB1c2VkIGFzIGEgdmFsdWUgaW4gYSBjaG9pY2UgYmxvY2sgKi8KKyNkZWZpbmUgU1lNQk9MX1ZBTElEICAgICAgMHgwMDgwICAvKiBzZXQgd2hlbiBzeW1ib2wuY3VyciBpcyBjYWxjdWxhdGVkICovCisjZGVmaW5lIFNZTUJPTF9PUFRJT05BTCAgIDB4MDEwMCAgLyogY2hvaWNlIGlzIG9wdGlvbmFsIC0gdmFsdWVzIGNhbiBiZSAnbicgKi8KKyNkZWZpbmUgU1lNQk9MX1dSSVRFICAgICAgMHgwMjAwICAvKiA/ICovCisjZGVmaW5lIFNZTUJPTF9DSEFOR0VEICAgIDB4MDQwMCAgLyogPyAqLworI2RlZmluZSBTWU1CT0xfQVVUTyAgICAgICAweDEwMDAgIC8qIHZhbHVlIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGUgKi8KKyNkZWZpbmUgU1lNQk9MX0NIRUNLRUQgICAgMHgyMDAwICAvKiB1c2VkIGR1cmluZyBkZXBlbmRlbmN5IGNoZWNraW5nICovCisjZGVmaW5lIFNZTUJPTF9XQVJORUQgICAgIDB4ODAwMCAgLyogd2FybmluZyBoYXMgYmVlbiBpc3N1ZWQgKi8KKworLyogU2V0IHdoZW4gc3ltYm9sLmRlZltdIGlzIHVzZWQgKi8KKyNkZWZpbmUgU1lNQk9MX0RFRiAgICAgICAgMHgxMDAwMCAgLyogRmlyc3QgYml0IG9mIFNZTUJPTF9ERUYgKi8KKyNkZWZpbmUgU1lNQk9MX0RFRl9VU0VSICAgMHgxMDAwMCAgLyogc3ltYm9sLmRlZltTX0RFRl9VU0VSXSBpcyB2YWxpZCAqLworI2RlZmluZSBTWU1CT0xfREVGX0FVVE8gICAweDIwMDAwICAvKiBzeW1ib2wuZGVmW1NfREVGX0FVVE9dIGlzIHZhbGlkICovCisjZGVmaW5lIFNZTUJPTF9ERUYzICAgICAgIDB4NDAwMDAgIC8qIHN5bWJvbC5kZWZbU19ERUZfM10gaXMgdmFsaWQgKi8KKyNkZWZpbmUgU1lNQk9MX0RFRjQgICAgICAgMHg4MDAwMCAgLyogc3ltYm9sLmRlZltTX0RFRl80XSBpcyB2YWxpZCAqLworCisjZGVmaW5lIFNZTUJPTF9NQVhMRU5HVEgJMjU2CisjZGVmaW5lIFNZTUJPTF9IQVNIU0laRQkJOTk3MworCisvKiBBIHByb3BlcnR5IHJlcHJlc2VudCB0aGUgY29uZmlnIG9wdGlvbnMgdGhhdCBjYW4gYmUgYXNzb2NpYXRlZAorICogd2l0aCBhIGNvbmZpZyAic3ltYm9sIi4KKyAqIFNhbXBsZToKKyAqIGNvbmZpZyBGT08KKyAqICAgICAgICAgZGVmYXVsdCB5CisgKiAgICAgICAgIHByb21wdCAiZm9vIHByb21wdCIKKyAqICAgICAgICAgc2VsZWN0IEJBUgorICogY29uZmlnIEJBWgorICogICAgICAgICBpbnQgIkJBWiBWYWx1ZSIKKyAqICAgICAgICAgcmFuZ2UgMS4uMjU1CisgKi8KK2VudW0gcHJvcF90eXBlIHsKKwlQX1VOS05PV04sCisJUF9QUk9NUFQsICAgLyogcHJvbXB0ICJmb28gcHJvbXB0IiBvciAiQkFaIFZhbHVlIiAqLworCVBfQ09NTUVOVCwgIC8qIHRleHQgYXNzb2NpYXRlZCB3aXRoIGEgY29tbWVudCAqLworCVBfTUVOVSwgICAgIC8qIHByb21wdCBhc3NvY2lhdGVkIHdpdGggYSBtZW51Y29uZmlnIG9wdGlvbiAqLworCVBfREVGQVVMVCwgIC8qIGRlZmF1bHQgeSAqLworCVBfQ0hPSUNFLCAgIC8qIGNob2ljZSB2YWx1ZSAqLworCVBfU0VMRUNULCAgIC8qIHNlbGVjdCBCQVIgKi8KKwlQX1JBTkdFLCAgICAvKiByYW5nZSA3Li4xMDAgKGZvciBhIHN5bWJvbCkgKi8KKwlQX0VOViwgICAgICAvKiB2YWx1ZSBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlICovCisJUF9TWU1CT0wsICAgLyogd2hlcmUgYSBzeW1ib2wgaXMgZGVmaW5lZCAqLworfTsKKworc3RydWN0IHByb3BlcnR5IHsKKwlzdHJ1Y3QgcHJvcGVydHkgKm5leHQ7ICAgICAvKiBuZXh0IHByb3BlcnR5IC0gbnVsbCBpZiBsYXN0ICovCisJc3RydWN0IHN5bWJvbCAqc3ltOyAgICAgICAgLyogdGhlIHN5bWJvbCBmb3Igd2hpY2ggdGhlIHByb3BlcnR5IGlzIGFzc29jaWF0ZWQgKi8KKwllbnVtIHByb3BfdHlwZSB0eXBlOyAgICAgICAvKiB0eXBlIG9mIHByb3BlcnR5ICovCisJY29uc3QgY2hhciAqdGV4dDsgICAgICAgICAgLyogdGhlIHByb21wdCB2YWx1ZSAtIFBfUFJPTVBULCBQX01FTlUsIFBfQ09NTUVOVCAqLworCXN0cnVjdCBleHByX3ZhbHVlIHZpc2libGU7CisJc3RydWN0IGV4cHIgKmV4cHI7ICAgICAgICAgLyogdGhlIG9wdGlvbmFsIGNvbmRpdGlvbmFsIHBhcnQgb2YgdGhlIHByb3BlcnR5ICovCisJc3RydWN0IG1lbnUgKm1lbnU7ICAgICAgICAgLyogdGhlIG1lbnUgdGhlIHByb3BlcnR5IGFyZSBhc3NvY2lhdGVkIHdpdGgKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB2YWxpZCBmb3I6IFBfU0VMRUNULCBQX1JBTkdFLCBQX0NIT0lDRSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBQX1BST01QVCwgUF9ERUZBVUxULCBQX01FTlUsIFBfQ09NTUVOVCAqLworCXN0cnVjdCBmaWxlICpmaWxlOyAgICAgICAgIC8qIHdoYXQgZmlsZSB3YXMgdGhpcyBwcm9wZXJ0eSBkZWZpbmVkICovCisJaW50IGxpbmVubzsgICAgICAgICAgICAgICAgLyogd2hhdCBsaW5lbm8gd2FzIHRoaXMgcHJvcGVydHkgZGVmaW5lZCAqLworfTsKKworI2RlZmluZSBmb3JfYWxsX3Byb3BlcnRpZXMoc3ltLCBzdCwgdG9rKSBcCisJZm9yIChzdCA9IHN5bS0+cHJvcDsgc3Q7IHN0ID0gc3QtPm5leHQpIFwKKwkJaWYgKHN0LT50eXBlID09ICh0b2spKQorI2RlZmluZSBmb3JfYWxsX2RlZmF1bHRzKHN5bSwgc3QpIGZvcl9hbGxfcHJvcGVydGllcyhzeW0sIHN0LCBQX0RFRkFVTFQpCisjZGVmaW5lIGZvcl9hbGxfY2hvaWNlcyhzeW0sIHN0KSBmb3JfYWxsX3Byb3BlcnRpZXMoc3ltLCBzdCwgUF9DSE9JQ0UpCisjZGVmaW5lIGZvcl9hbGxfcHJvbXB0cyhzeW0sIHN0KSBcCisJZm9yIChzdCA9IHN5bS0+cHJvcDsgc3Q7IHN0ID0gc3QtPm5leHQpIFwKKwkJaWYgKHN0LT50ZXh0KQorCitzdHJ1Y3QgbWVudSB7CisJc3RydWN0IG1lbnUgKm5leHQ7CisJc3RydWN0IG1lbnUgKnBhcmVudDsKKwlzdHJ1Y3QgbWVudSAqbGlzdDsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3RydWN0IHByb3BlcnR5ICpwcm9tcHQ7CisJc3RydWN0IGV4cHIgKnZpc2liaWxpdHk7CisJc3RydWN0IGV4cHIgKmRlcDsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJY2hhciAqaGVscDsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwlpbnQgbGluZW5vOworCXZvaWQgKmRhdGE7Cit9OworCisjZGVmaW5lIE1FTlVfQ0hBTkdFRAkJMHgwMDAxCisjZGVmaW5lIE1FTlVfUk9PVAkJMHgwMDAyCisKKyNpZm5kZWYgU1dJRworCitleHRlcm4gc3RydWN0IGZpbGUgKmZpbGVfbGlzdDsKK2V4dGVybiBzdHJ1Y3QgZmlsZSAqY3VycmVudF9maWxlOworc3RydWN0IGZpbGUgKmxvb2t1cF9maWxlKGNvbnN0IGNoYXIgKm5hbWUpOworCitleHRlcm4gc3RydWN0IHN5bWJvbCBzeW1ib2xfeWVzLCBzeW1ib2xfbm8sIHN5bWJvbF9tb2Q7CitleHRlcm4gc3RydWN0IHN5bWJvbCAqbW9kdWxlc19zeW07CitleHRlcm4gc3RydWN0IHN5bWJvbCAqc3ltX2RlZmNvbmZpZ19saXN0OworZXh0ZXJuIGludCBjZGVidWc7CitzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19zeW1ib2woc3RydWN0IHN5bWJvbCAqc3ltKTsKK3N0cnVjdCBleHByICpleHByX2FsbG9jX29uZShlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3QgZXhwciAqY2UpOworc3RydWN0IGV4cHIgKmV4cHJfYWxsb2NfdHdvKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKTsKK3N0cnVjdCBleHByICpleHByX2FsbG9jX2NvbXAoZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0IHN5bWJvbCAqczEsIHN0cnVjdCBzeW1ib2wgKnMyKTsKK3N0cnVjdCBleHByICpleHByX2FsbG9jX2FuZChzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICplMik7CitzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19vcihzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICplMik7CitzdHJ1Y3QgZXhwciAqZXhwcl9jb3B5KGNvbnN0IHN0cnVjdCBleHByICpvcmcpOwordm9pZCBleHByX2ZyZWUoc3RydWN0IGV4cHIgKmUpOworaW50IGV4cHJfZXEoc3RydWN0IGV4cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIpOwordm9pZCBleHByX2VsaW1pbmF0ZV9lcShzdHJ1Y3QgZXhwciAqKmVwMSwgc3RydWN0IGV4cHIgKiplcDIpOwordHJpc3RhdGUgZXhwcl9jYWxjX3ZhbHVlKHN0cnVjdCBleHByICplKTsKK3N0cnVjdCBleHByICpleHByX2VsaW1pbmF0ZV95bihzdHJ1Y3QgZXhwciAqZSk7CitzdHJ1Y3QgZXhwciAqZXhwcl90cmFuc19ib29sKHN0cnVjdCBleHByICplKTsKK3N0cnVjdCBleHByICpleHByX2VsaW1pbmF0ZV9kdXBzKHN0cnVjdCBleHByICplKTsKK3N0cnVjdCBleHByICpleHByX3RyYW5zZm9ybShzdHJ1Y3QgZXhwciAqZSk7CitpbnQgZXhwcl9jb250YWluc19zeW1ib2woc3RydWN0IGV4cHIgKmRlcCwgc3RydWN0IHN5bWJvbCAqc3ltKTsKK2Jvb2wgZXhwcl9kZXBlbmRzX3N5bWJvbChzdHJ1Y3QgZXhwciAqZGVwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pOworc3RydWN0IGV4cHIgKmV4cHJfZXh0cmFjdF9lcV9hbmQoc3RydWN0IGV4cHIgKiplcDEsIHN0cnVjdCBleHByICoqZXAyKTsKK3N0cnVjdCBleHByICpleHByX2V4dHJhY3RfZXFfb3Ioc3RydWN0IGV4cHIgKiplcDEsIHN0cnVjdCBleHByICoqZXAyKTsKK3ZvaWQgZXhwcl9leHRyYWN0X2VxKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBleHByICoqZXAsIHN0cnVjdCBleHByICoqZXAxLCBzdHJ1Y3QgZXhwciAqKmVwMik7CitzdHJ1Y3QgZXhwciAqZXhwcl90cmFuc19jb21wYXJlKHN0cnVjdCBleHByICplLCBlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pOworc3RydWN0IGV4cHIgKmV4cHJfc2ltcGxpZnlfdW5tZXRfZGVwKHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKTsKKwordm9pZCBleHByX2ZwcmludChzdHJ1Y3QgZXhwciAqZSwgRklMRSAqb3V0KTsKK3N0cnVjdCBnc3RyOyAvKiBmb3J3YXJkICovCit2b2lkIGV4cHJfZ3N0cl9wcmludChzdHJ1Y3QgZXhwciAqZSwgc3RydWN0IGdzdHIgKmdzKTsKKworc3RhdGljIGlubGluZSBpbnQgZXhwcl9pc195ZXMoc3RydWN0IGV4cHIgKmUpCit7CisJcmV0dXJuICFlIHx8IChlLT50eXBlID09IEVfU1lNQk9MICYmIGUtPmxlZnQuc3ltID09ICZzeW1ib2xfeWVzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZXhwcl9pc19ubyhzdHJ1Y3QgZXhwciAqZSkKK3sKKwlyZXR1cm4gZSAmJiAoZS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX25vKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogRVhQUl9IICovCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2tjb25maWcva2NvbmZpZy5tayBiL2xpYi9jdC1uZy0xLjEzLjQva2NvbmZpZy9rY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMjllNDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2tjb25maWcva2NvbmZpZy5tawpAQCAtMCwwICsxLDIwMiBAQAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgY3Jvc3N0b29sLU5HIGNvbmZpZ3VyYXRpb24gdGFyZ2V0cworIyBUaGVzZSB0YXJnZXRzIGFyZSB1c2VkIGZyb20gdG9wLWxldmVsIG1ha2VmaWxlCisKKyMgVGhlIHBsYWNlIHdoZXJlIHRoZSBrY29uZmlnIHN0dWZmIGxpZXMKK29iaiA9IGtjb25maWcKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoZSBjb25maWd1cmF0b3JzIHJ1bGVzCisKK2NvbmZpZ3VyYXRvcnMgPSBtZW51Y29uZmlnIG5jb25maWcgb2xkY29uZmlnCitQSE9OWSArPSAkKGNvbmZpZ3VyYXRvcnMpCisKKyQoY29uZmlndXJhdG9ycyk6IGNvbmZpZ19maWxlcworCittZW51Y29uZmlnOiAkKG9iaikvbWNvbmYKKwlAJChFQ0hPKSAiICBDT05GICAkKEtDT05GSUdfVE9QKSIKKwkkKFNJTEVOVCkkPCAkKEtDT05GSUdfVE9QKQorCituY29uZmlnOiAkKG9iaikvbmNvbmYKKwlAJChFQ0hPKSAiICBDT05GICAkKEtDT05GSUdfVE9QKSIKKwkkKFNJTEVOVCkkPCAkKEtDT05GSUdfVE9QKQorCitvbGRjb25maWc6ICQob2JqKS9jb25mIC5jb25maWcKKwlAJChFQ0hPKSAiICBDT05GICAkKEtDT05GSUdfVE9QKSIKKwkkKFNJTEVOVCkkPCAtLXNpbGVudCRAICQoS0NPTkZJR19UT1ApCisKKyMgQWx3YXlzIGJlIHNpbGVudCwgdGhlIHN0ZG91dCBhbiBiZSA+LmNvbmZpZworZXh0cmFjdGNvbmZpZzoKKwlAYXdrICdCRUdJTiB7IGR1bXA9MDsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAgZHVtcD09MSAmJiAkJDB+L15cWy4uLi4uXF1bWzpzcGFjZTpdXSsoIyB8KUNUXy8geyAgICAgICAgICAgICAgICAgXAorCSAgICAgICAgICAkJDE9IiI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgICAgZ3N1YigiXltbOnNwYWNlOl1dIiwiIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAgICAgIHByaW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAkJDB+L0R1bXBpbmcgdXNlci1zdXBwbGllZCBjcm9zc3Rvb2wtTkcgY29uZmlndXJhdGlvbjogZG9uZSBpbi8geyBcCisJICAgICAgICAgIGR1bXA9MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAkJDB+L0R1bXBpbmcgdXNlci1zdXBwbGllZCBjcm9zc3Rvb2wtTkcgY29uZmlndXJhdGlvbiQkLyB7ICAgICAgICBcCisJICAgICAgICAgIGR1bXA9MTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgIH0nCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBIZWxwIHRleHQgdXNlZCBieSBtYWtlIGhlbHAKKworaGVscC1jb25maWc6OgorCUBlY2hvICAnICBtZW51Y29uZmlnICAgICAgICAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgdXNpbmcgYSBtZW51IGJhc2VkIHByb2dyYW0nCisJQGVjaG8gICcgIG9sZGNvbmZpZyAgICAgICAgICAtIFVwZGF0ZSBjdXJyZW50IGNvbmZpZyB1c2luZyBhIHByb3ZpZGVkIC5jb25maWcgYXMgYmFzZScKKwlAZWNobyAgJyAgZXh0cmFjdGNvbmZpZyAgICAgIC0gRXh0cmFjdCB0byBzdGRvdXQgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgZnJvbSBhJworCUBlY2hvICAnICAgICAgICAgICAgICAgICAgICAgICBidWlsZC5sb2cgZmlsZSBwaXBlZCB0byBzdGRpbicKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEhtbW0hIENoZWVzeSBidWlsZCEKKyMgT3I6IHdoZXJlIEkgY2FuIHVudmVpbCBteSBtYWtlLWZ1Li4uIDotXQorCisjIE9oISBGaWxlcyBub3QgaGVyZSBhcmUgdGhlcmUsIGluIGZhY3QhIDotKQordnBhdGggJS5jICQoQ1RfTElCX0RJUikKK3ZwYXRoICUuaCAkKENUX0xJQl9ESVIpCisKKyMgV2hhdCBpcyB0aGUgY29tcGlsZXI/CitIT1NUX0NDID89IGdjYyAtZnVuc2lnbmVkLWNoYXIKK0hPU1RfTEQgPz0gZ2NjCisKKyMgSGVscGVycworY2hlY2tfZ2V0dGV4dCA9ICQoQ1RfTElCX0RJUikva2NvbmZpZy9jaGVjay5zaAorY2hlY2tfbHhkaWFsb2cgPSAkKENUX0xJQl9ESVIpL2tjb25maWcvbHhkaWFsb2cvY2hlY2stbHhkaWFsb2cuc2gKKworIyBCdWlsZCBmbGFncworQ0ZMQUdTID0gLURDT05GSUdfPVwiQ1RfXCIgLURQQUNLQUdFPSJcImNyb3NzdG9vbC1ORyAkKENUX1ZFUlNJT04pXCIiCitMREZMQUdTID0KKworIyBDb21waWxlciBmbGFncyB0byB1c2UgZ2V0dGV4dAorSU5UTF9DRkxBR1MgPSAkKHNoZWxsICQoU0hFTEwpICQoY2hlY2tfZ2V0dGV4dCkgJChIT1NUX0NDKSAkKEVYVFJBX0NGTEFHUykpCisKKyMgQ29tcGlsZXIgYW5kIGxpbmtlciBmbGFncyB0byB1c2UgbmN1cnNlcworTkNVUlNFU19DRkxBR1MgPSAkKHNoZWxsICQoU0hFTEwpICQoY2hlY2tfbHhkaWFsb2cpIC1jY2ZsYWdzKQorTkNVUlNFU19MREZMQUdTID0gJChzaGVsbCAkKFNIRUxMKSAkKGNoZWNrX2x4ZGlhbG9nKSAtbGRmbGFncyAkKEhPU1RfQ0MpKQorCisjIENoZWNrIHRoYXQgd2UgaGF2ZSB0aGUgcmVxdWlyZWQgbmN1cnNlcyBzdHVmZiBpbnN0YWxsZWQgZm9yIGx4ZGlhbG9nIChtZW51Y29uZmlnKQorZG9jaGVja2x4ZGlhbG9nOgorCSQoU0lMRU5UKSQoU0hFTEwpICQoY2hlY2tfbHhkaWFsb2cpIC1jaGVjayAkKEhPU1RfQ0MpICQoTkNVUlNFU19DRkxBR1MpICQoTkNVUlNFU19MREZMQUdTKQorCisjIENvbW1vbiBzb3VyY2UgZmlsZXMKK0NPTU1PTl9TUkMgPSBrY29uZmlnL3pjb25mLnRhYi5jCitDT01NT05fT0JKID0gJChwYXRzdWJzdCAlLmMsJS5vLCQoQ09NTU9OX1NSQykpCitDT01NT05fREVQID0gJChwYXRzdWJzdCAlLm8sJS5kZXAsJChDT01NT05fT0JKKSkKKyQoQ09NTU9OX09CSikgJChDT01NT05fREVQKTogQ0ZMQUdTICs9ICQoSU5UTF9DRkxBR1MpCisKKyMgbHhkaWFsb2cgc291cmNlIGZpbGVzCitMWF9TUkMgPSAkKHBhdHN1YnN0ICQoQ1RfTElCX0RJUikvJSwlLCQod2lsZGNhcmQgJChDVF9MSUJfRElSKS9rY29uZmlnL2x4ZGlhbG9nLyouYykpCitMWF9PQkogPSAkKHBhdHN1YnN0ICUuYywlLm8sJChMWF9TUkMpKQorTFhfREVQID0gJChwYXRzdWJzdCAlLm8sJS5kZXAsJChMWF9PQkopKQorJChMWF9PQkopICQoTFhfREVQKTogQ0ZMQUdTICs9ICQoTkNVUlNFU19DRkxBR1MpICQoSU5UTF9DRkxBR1MpCisKKyMgV2hhdCdzIG5lZWRlZCB0byBidWlsZCAnY29uZicKK2NvbmZfU1JDID0ga2NvbmZpZy9jb25mLmMKK2NvbmZfT0JKID0gJChwYXRzdWJzdCAlLmMsJS5vLCQoY29uZl9TUkMpKQorY29uZl9ERVAgPSAkKHBhdHN1YnN0ICUubywlLmRlcCwkKGNvbmZfT0JKKSkKKyQoY29uZl9PQkopICQoY29uZl9ERVApOiBDRkxBR1MgKz0gJChJTlRMX0NGTEFHUykKKworIyBXaGF0J3MgbmVlZGVkIHRvIGJ1aWxkICdtY29uZicKK21jb25mX1NSQyA9IGtjb25maWcvbWNvbmYuYworbWNvbmZfT0JKID0gJChwYXRzdWJzdCAlLmMsJS5vLCQobWNvbmZfU1JDKSkKK21jb25mX0RFUCA9ICQocGF0c3Vic3QgJS5jLCUuZGVwLCQobWNvbmZfU1JDKSkKKyQobWNvbmZfT0JKKSAkKG1jb25mX0RFUCk6IENGTEFHUyArPSAkKE5DVVJTRVNfQ0ZMQUdTKSAkKElOVExfQ0ZMQUdTKQorJChvYmopL21jb25mOiBMREZMQUdTICs9ICQoTkNVUlNFU19MREZMQUdTKQorCisjIFdoYXQncyBuZWVkZWQgdG8gYnVpbGQgJ25jb25mJworbmNvbmZfU1JDID0ga2NvbmZpZy9uY29uZi5jIGtjb25maWcvbmNvbmYuZ3VpLmMKK25jb25mX09CSiA9ICQocGF0c3Vic3QgJS5jLCUubywkKG5jb25mX1NSQykpCituY29uZl9ERVAgPSAkKHBhdHN1YnN0ICUuYywlLmRlcCwkKG5jb25mX1NSQykpCiskKG5jb25mX09CSikgJChuY29uZl9ERVApOiBDRkxBR1MgKz0gJChJTlRMX0NGTEFHUykKKyQob2JqKS9uY29uZjogTERGTEFHUyArPSAtbG1lbnUgLWxwYW5lbCAtbG5jdXJzZXMKKworIyBVbmRlciBDeWd3aW4sIHdlIG5lZWQgdG8gYXV0by1pbXBvcnQgc29tZSBsaWJzICh3aGljaCBvbmVzLCBleGFjdGx5PykKKyMgZm9yIG1jb25mIGFuZCBuY29uZiB0byBsaW4gcHJvcGVybHkuCitpZmVxICgkKHNoZWxsIHVuYW1lIC1vIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93biksQ3lnd2luKQorJChvYmopL21jb25mOiBMREZMQUdTICs9IC1XbCwtLWVuYWJsZS1hdXRvLWltcG9ydAorJChvYmopL25jb25mOiBMREZMQUdTICs9IC1XbCwtLWVuYWJsZS1hdXRvLWltcG9ydAorZW5kaWYKKworIyBUaGVzZSBhcmUgZ2VuZXJhdGVkIGZpbGVzOgorQUxMX09CSlMgPSAkKHNvcnQgJChDT01NT05fT0JKKSAkKExYX09CSikgJChjb25mX09CSikgJChtY29uZl9PQkopICQobmNvbmZfT0JKKSkKK0FMTF9ERVBTID0gJChzb3J0ICQoQ09NTU9OX0RFUCkgJChMWF9ERVApICQoY29uZl9ERVApICQobWNvbmZfREVQKSAkKG5jb25mX0RFUCkpCisKKyMgQ2hlZXN5IGF1dG8tZGVwZW5kZW5jaWVzCisjIE9ubHkgcGFyc2UgdGhlIGZvbGxvd2luZyBpZiBhIGNvbmZpZ3VyYXRvciB3YXMgY2FsbGVkLCB0byBhdm9pZCBidWlsZGluZworIyBkZXBlbmRlbmNpZXMgd2hlbiBub3QgbmVlZGVkIChlZy4gbGlzdC1zdGVwcywgbGlzdC1zYW1wbGVzLi4uKQorIyBXZSBtdXN0IGJlIGNhcmVmdWwgd2hhdCB3ZSBlbmNsb3NlLCBiZWNhdXNlIHdlIG5lZWQgc29tZSBvZiB0aGUgdmFyaWFibGUKKyMgZGVmaW5pdGlvbnMgZm9yIGNsZWFuIChhbmQgZGlzdGNsZWFuKSBhdCBsZWFzdC4KKyMgSnVzdCBwcm90ZWN0aW5nIHRoZSAiLWluY2x1ZGUgJChERVBTKSIgbGluZSBzaG91bGQgYmUgc3VmZmljaWVudC4KKyMgQW5kIGluIGNhc2Ugd2Ugd2FudCBtZW51Y29uZmlnLCB3ZSBoYXZlIHRvIGNoZWNrIHRoYXQgbHhkaWFsb2cKKyMgY2FuIGZpbmQgYSBjdXJzZXMgbGliLgorCitpZm5lcSAoJChzdHJpcCAkKE1BS0VDTURHT0FMUykpLCkKK2lmbmVxICgkKHN0cmlwICQoZmlsdGVyICQoY29uZmlndXJhdG9ycyksJChNQUtFQ01ER09BTFMpKSksKQorCitERVBTID0gJChDT01NT05fREVQKQoraWZuZXEgKCQoc3RyaXAgJChmaWx0ZXIgb2xkY29uZmlnLCQoTUFLRUNNREdPQUxTKSkpLCkKK0RFUFMgKz0gJChjb25mX0RFUCkKK2VuZGlmCitpZm5lcSAoJChzdHJpcCAkKGZpbHRlciBtZW51Y29uZmlnLCQoTUFLRUNNREdPQUxTKSkpLCkKK0RFUFMgKz0gJChtY29uZl9ERVApICQoTFhfREVQKQorJChDT01NT05fT0JKKSAkKENPTU1PTl9ERVApOiB8ZG9jaGVja2x4ZGlhbG9nCiskKExYX09CSikgJChMWF9ERVApOiB8ZG9jaGVja2x4ZGlhbG9nCiskKG1jb25mX09CSikgJChtY29uZl9ERVApOiB8ZG9jaGVja2x4ZGlhbG9nCitlbmRpZgoraWZuZXEgKCQoc3RyaXAgJChmaWx0ZXIgbmNvbmZpZywkKE1BS0VDTURHT0FMUykpKSwpCitERVBTICs9ICQobmNvbmZfREVQKQorZW5kaWYKKworLWluY2x1ZGUgJChERVBTKQorCitlbmRpZiAjIE1BS0VDTURHT0FMUyBjb250YWlucyBhIGNvbmZpZ3VyYXRvciBydWxlCitlbmRpZiAjIE1BS0VDTURHT0FMUyAhPSAiIgorCisjIEVhY2ggLm8gb3IgLmRlcCAqY2FuIG5vdCogZGlyZWN0bHkgZGVwZW5kIG9uIGtjb25maWcvLCBiZWNhdXNlIGtjb25maWcgY2FuCisjIGJlIHRvdWNoZWQgZHVyaW5nIHRoZSBidWlsZCAod2hvJ3MgdG91Y2hpbmcgaXQsIGJ0dz8pIHNvIGVhY2ggLm8gb3IgLmRlcAorIyB3b3VsZCBiZSByZS1idWlsdCB3aGVuIGl0IHNob3VsZCBub3QgYmUuCisjIFNvIG1hbnVhbGx5IGNoZWNrIGZvciBwcmVzZW5jZSBvZiAkKG9iaikgKGllLiBrY29uZmlnKSwgYW5kIG9ubHkgbWtkaXIKKyMgaWYgbmVlZGVkLiBBZnRlciBhbGwsIHRoYXQncyBub3Qgc28gYmFkLi4uCisjIG1rZGlyICQob2JqKS9seGRpYWxvZywgYmVjYXVzZSB3ZSBuZWVkIGl0LCBhbmQgaW5jaWRlbnRhbGx5LCB0aGF0CisjIGFsc28gY3JlYXRlcyAkKG9iaikuCitkZWZpbmUgY2hlY2tfa2NvbmZpZ19kaXIKKwkkKFNJTEVOVClpZiBbICEgLWQgJChvYmopL2x4ZGlhbG9nIF07IHRoZW4gIFwKKwkgICAkKEVDSE8pICIgIE1LRElSICQob2JqKSI7ICAgICAgICAgICBcCisJICAgbWtkaXIgLXAgJChvYmopL2x4ZGlhbG9nOyAgICAgICAgXAorCSBmaQorZW5kZWYKKworIyBCdWlsZCB0aGUgZGVwZW5kZW5jeSBmb3IgQyBmaWxlcworJS5kZXA6ICUuYyAkKENUX0xJQl9ESVIpL2tjb25maWcva2NvbmZpZy5taworCSQoY2hlY2tfa2NvbmZpZ19kaXIpCisJQCQoRUNITykgIiAgREVQICAgJEAiCisJJChTSUxFTlQpJChIT1NUX0NDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpIC1NTSAkPCB8JChzZWQpIC1yIC1lICdzfChbXjpdKy5vKSggKjorKXwkKDw6LmM9Lm8pICRAXDJ8OycgPiRACisKKyMgQnVpbGQgQyBmaWxlcworJS5vOiAlLmMgJChDVF9MSUJfRElSKS9rY29uZmlnL2tjb25maWcubWsKKwkkKGNoZWNrX2tjb25maWdfZGlyKQorCUAkKEVDSE8pICIgIENDICAgICRAIgorCSQoU0lMRU5UKSQoSE9TVF9DQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAtbyAkQCAtYyAkPAorCisjIEFjdHVhbCBsaW5rCiskKG9iaikvbWNvbmY6ICQoQ09NTU9OX09CSikgJChMWF9PQkopICQobWNvbmZfT0JKKQorCUAkKEVDSE8pICcgIExEICAgICRAJworCSQoU0lMRU5UKSQoSE9TVF9MRCkgLW8gJEAgJF4gJChMREZMQUdTKSAkKEVYVFJBX0xERkxBR1MpCisKKyQob2JqKS9uY29uZjogJChDT01NT05fT0JKKSAkKG5jb25mX09CSikKKwlAJChFQ0hPKSAnICBMRCAgICAkQCcKKwkkKFNJTEVOVCkkKEhPU1RfTEQpIC1vICRAICReICQoTERGTEFHUykgJChFWFRSQV9MREZMQUdTKQorCiskKG9iaikvY29uZjogJChDT01NT05fT0JKKSAkKGNvbmZfT0JKKQorCUAkKEVDSE8pICcgIExEICAgICRAJworCSQoU0lMRU5UKSQoSE9TVF9MRCkgLW8gJEAgJF4gJChMREZMQUdTKSAkKEVYVFJBX0xERkxBR1MpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDbGVhbmluZyB1cCB0aGUgbWVzcy4uLgorCitjbGVhbjo6CisJQCQoRUNITykgIiAgQ0xFQU4ga2NvbmZpZyIKKwkkKFNJTEVOVClybSAtZiBrY29uZmlnL3ssbSxufWNvbmZ7LC5leGV9ICQoQUxMX09CSlMpICQoQUxMX0RFUFMpCisJJChTSUxFTlQpcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkga2NvbmZpZ3svbHhkaWFsb2csfSAyPi9kZXYvbnVsbCB8fCB0cnVlCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2tjb25maWcvbGV4Lnpjb25mLmMgYi9saWIvY3QtbmctMS4xMy40L2tjb25maWcvbGV4Lnpjb25mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkxODI5MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQva2NvbmZpZy9sZXguemNvbmYuYwpAQCAtMCwwICsxLDI0MzUgQEAKKworI2xpbmUgMyAic2NyaXB0cy9rY29uZmlnL2xleC56Y29uZi5jIgorCisjZGVmaW5lICBZWV9JTlRfQUxJR05FRCBzaG9ydCBpbnQKKworLyogQSBsZXhpY2FsIHNjYW5uZXIgZ2VuZXJhdGVkIGJ5IGZsZXggKi8KKworI2RlZmluZSB5eV9jcmVhdGVfYnVmZmVyIHpjb25mX2NyZWF0ZV9idWZmZXIKKyNkZWZpbmUgeXlfZGVsZXRlX2J1ZmZlciB6Y29uZl9kZWxldGVfYnVmZmVyCisjZGVmaW5lIHl5X2ZsZXhfZGVidWcgemNvbmZfZmxleF9kZWJ1ZworI2RlZmluZSB5eV9pbml0X2J1ZmZlciB6Y29uZl9pbml0X2J1ZmZlcgorI2RlZmluZSB5eV9mbHVzaF9idWZmZXIgemNvbmZfZmx1c2hfYnVmZmVyCisjZGVmaW5lIHl5X2xvYWRfYnVmZmVyX3N0YXRlIHpjb25mX2xvYWRfYnVmZmVyX3N0YXRlCisjZGVmaW5lIHl5X3N3aXRjaF90b19idWZmZXIgemNvbmZfc3dpdGNoX3RvX2J1ZmZlcgorI2RlZmluZSB5eWluIHpjb25maW4KKyNkZWZpbmUgeXlsZW5nIHpjb25mbGVuZworI2RlZmluZSB5eWxleCB6Y29uZmxleAorI2RlZmluZSB5eWxpbmVubyB6Y29uZmxpbmVubworI2RlZmluZSB5eW91dCB6Y29uZm91dAorI2RlZmluZSB5eXJlc3RhcnQgemNvbmZyZXN0YXJ0CisjZGVmaW5lIHl5dGV4dCB6Y29uZnRleHQKKyNkZWZpbmUgeXl3cmFwIHpjb25md3JhcAorI2RlZmluZSB5eWFsbG9jIHpjb25mYWxsb2MKKyNkZWZpbmUgeXlyZWFsbG9jIHpjb25mcmVhbGxvYworI2RlZmluZSB5eWZyZWUgemNvbmZmcmVlCisKKyNkZWZpbmUgRkxFWF9TQ0FOTkVSCisjZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCisjZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVSU0lPTiA1CisjZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNQorI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAKKyNkZWZpbmUgRkxFWF9CRVRBCisjZW5kaWYKKworLyogRmlyc3QsIHdlIGRlYWwgd2l0aCAgcGxhdGZvcm0tc3BlY2lmaWMgb3IgY29tcGlsZXItc3BlY2lmaWMgaXNzdWVzLiAqLworCisvKiBiZWdpbiBzdGFuZGFyZCBDIGhlYWRlcnMuICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisvKiBlbmQgc3RhbmRhcmQgQyBoZWFkZXJzLiAqLworCisvKiBmbGV4IGludGVnZXIgdHlwZSBkZWZpbml0aW9ucyAqLworCisjaWZuZGVmIEZMRVhJTlRfSAorI2RlZmluZSBGTEVYSU5UX0gKKworLyogQzk5IHN5c3RlbXMgaGF2ZSA8aW50dHlwZXMuaD4uIE5vbi1DOTkgc3lzdGVtcyBtYXkgb3IgbWF5IG5vdC4gKi8KKworI2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorCisvKiBDOTkgc2F5cyB0byBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyBiZWZvcmUgaW5jbHVkaW5nIHN0ZGludC5oLAorICogaWYgeW91IHdhbnQgdGhlIGxpbWl0IChtYXgvbWluKSBtYWNyb3MgZm9yIGludCB0eXBlcy4gCisgKi8KKyNpZm5kZWYgX19TVERDX0xJTUlUX01BQ1JPUworI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEKKyNlbmRpZgorCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KK3R5cGVkZWYgaW50OF90IGZsZXhfaW50OF90OwordHlwZWRlZiB1aW50OF90IGZsZXhfdWludDhfdDsKK3R5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90OwordHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OworI2Vsc2UKK3R5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7Cit0eXBlZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OworCisvKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMuICovCisjaWZuZGVmIElOVDhfTUlOCisjZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAgICAgKC0xMjgpCisjZW5kaWYKKyNpZm5kZWYgSU5UMTZfTUlOCisjZGVmaW5lIElOVDE2X01JTiAgICAgICAgICAgICAgKC0zMjc2Ny0xKQorI2VuZGlmCisjaWZuZGVmIElOVDMyX01JTgorI2RlZmluZSBJTlQzMl9NSU4gICAgICAgICAgICAgICgtMjE0NzQ4MzY0Ny0xKQorI2VuZGlmCisjaWZuZGVmIElOVDhfTUFYCisjZGVmaW5lIElOVDhfTUFYICAgICAgICAgICAgICAgKDEyNykKKyNlbmRpZgorI2lmbmRlZiBJTlQxNl9NQVgKKyNkZWZpbmUgSU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3NjcpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUFYCisjZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgICAgKDIxNDc0ODM2NDcpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDhfTUFYCisjZGVmaW5lIFVJTlQ4X01BWCAgICAgICAgICAgICAgKDI1NVUpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDE2X01BWAorI2RlZmluZSBVSU5UMTZfTUFYICAgICAgICAgICAgICg2NTUzNVUpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDMyX01BWAorI2RlZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKKyNlbmRpZgorCisjZW5kaWYgLyogISBDOTkgKi8KKworI2VuZGlmIC8qICEgRkxFWElOVF9IICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworCisvKiBUaGUgImNvbnN0IiBzdG9yYWdlLWNsYXNzLW1vZGlmaWVyIGlzIHZhbGlkLiAqLworI2RlZmluZSBZWV9VU0VfQ09OU1QKKworI2Vsc2UJLyogISBfX2NwbHVzcGx1cyAqLworCisvKiBDOTkgcmVxdWlyZXMgX19TVERDX18gdG8gYmUgZGVmaW5lZCBhcyAxLiAqLworI2lmIGRlZmluZWQgKF9fU1REQ19fKQorCisjZGVmaW5lIFlZX1VTRV9DT05TVAorCisjZW5kaWYJLyogZGVmaW5lZCAoX19TVERDX18pICovCisjZW5kaWYJLyogISBfX2NwbHVzcGx1cyAqLworCisjaWZkZWYgWVlfVVNFX0NPTlNUCisjZGVmaW5lIHl5Y29uc3QgY29uc3QKKyNlbHNlCisjZGVmaW5lIHl5Y29uc3QKKyNlbmRpZgorCisvKiBSZXR1cm5lZCB1cG9uIGVuZC1vZi1maWxlLiAqLworI2RlZmluZSBZWV9OVUxMIDAKKworLyogUHJvbW90ZXMgYSBwb3NzaWJseSBuZWdhdGl2ZSwgcG9zc2libHkgc2lnbmVkIGNoYXIgdG8gYW4gdW5zaWduZWQKKyAqIGludGVnZXIgZm9yIHVzZSBhcyBhbiBhcnJheSBpbmRleC4gIElmIHRoZSBzaWduZWQgY2hhciBpcyBuZWdhdGl2ZSwKKyAqIHdlIHdhbnQgdG8gaW5zdGVhZCB0cmVhdCBpdCBhcyBhbiA4LWJpdCB1bnNpZ25lZCBjaGFyLCBoZW5jZSB0aGUKKyAqIGRvdWJsZSBjYXN0LgorICovCisjZGVmaW5lIFlZX1NDX1RPX1VJKGMpICgodW5zaWduZWQgaW50KSAodW5zaWduZWQgY2hhcikgYykKKworLyogRW50ZXIgYSBzdGFydCBjb25kaXRpb24uICBUaGlzIG1hY3JvIHJlYWxseSBvdWdodCB0byB0YWtlIGEgcGFyYW1ldGVyLAorICogYnV0IHdlIGRvIGl0IHRoZSBkaXNndXN0aW5nIGNydWZ0eSB3YXkgZm9yY2VkIG9uIHVzIGJ5IHRoZSAoKS1sZXNzCisgKiBkZWZpbml0aW9uIG9mIEJFR0lOLgorICovCisjZGVmaW5lIEJFR0lOICh5eV9zdGFydCkgPSAxICsgMiAqCisKKy8qIFRyYW5zbGF0ZSB0aGUgY3VycmVudCBzdGFydCBzdGF0ZSBpbnRvIGEgdmFsdWUgdGhhdCBjYW4gYmUgbGF0ZXIgaGFuZGVkCisgKiB0byBCRUdJTiB0byByZXR1cm4gdG8gdGhlIHN0YXRlLiAgVGhlIFlZU1RBVEUgYWxpYXMgaXMgZm9yIGxleAorICogY29tcGF0aWJpbGl0eS4KKyAqLworI2RlZmluZSBZWV9TVEFSVCAoKCh5eV9zdGFydCkgLSAxKSAvIDIpCisjZGVmaW5lIFlZU1RBVEUgWVlfU1RBUlQKKworLyogQWN0aW9uIG51bWJlciBmb3IgRU9GIHJ1bGUgb2YgYSBnaXZlbiBzdGFydCBzdGF0ZS4gKi8KKyNkZWZpbmUgWVlfU1RBVEVfRU9GKHN0YXRlKSAoWVlfRU5EX09GX0JVRkZFUiArIHN0YXRlICsgMSkKKworLyogU3BlY2lhbCBhY3Rpb24gbWVhbmluZyAic3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBmaWxlIi4gKi8KKyNkZWZpbmUgWVlfTkVXX0ZJTEUgemNvbmZyZXN0YXJ0KHpjb25maW4gICkKKworI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgMAorCisvKiBTaXplIG9mIGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAqLworI2lmbmRlZiBZWV9CVUZfU0laRQorI2lmZGVmIF9faWE2NF9fCisvKiBPbiBJQS02NCwgdGhlIGJ1ZmZlciBzaXplIGlzIDE2aywgbm90IDhrLgorICogTW9yZW92ZXIsIFlZX0JVRl9TSVpFIGlzIDIqWVlfUkVBRF9CVUZfU0laRSBpbiB0aGUgZ2VuZXJhbCBjYXNlLgorICogRGl0dG8gZm9yIHRoZSBfX2lhNjRfXyBjYXNlIGFjY29yZGluZ2x5LgorICovCisjZGVmaW5lIFlZX0JVRl9TSVpFIDMyNzY4CisjZWxzZQorI2RlZmluZSBZWV9CVUZfU0laRSAxNjM4NAorI2VuZGlmIC8qIF9faWE2NF9fICovCisjZW5kaWYKKworLyogVGhlIHN0YXRlIGJ1ZiBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRoZSBtYWluIGJ1ZmZlci4KKyAqLworI2RlZmluZSBZWV9TVEFURV9CVUZfU0laRSAgICgoWVlfQlVGX1NJWkUgKyAyKSAqIHNpemVvZih5eV9zdGF0ZV90eXBlKSkKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQorI2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQordHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CisjZW5kaWYKKworZXh0ZXJuIGludCB6Y29uZmxlbmc7CisKK2V4dGVybiBGSUxFICp6Y29uZmluLCAqemNvbmZvdXQ7CisKKyNkZWZpbmUgRU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKKyNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCisjZGVmaW5lIEVPQl9BQ1RfTEFTVF9NQVRDSCAyCisKKyAgICAjZGVmaW5lIFlZX0xFU1NfTElORU5PKG4pCisgICAgCisvKiBSZXR1cm4gYWxsIGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRvIHRoZSBpbnB1dCBzdHJlYW0uICovCisjZGVmaW5lIHl5bGVzcyhuKSBcCisJZG8gXAorCQl7IFwKKwkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgemNvbmZ0ZXh0LiAqLyBcCisgICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCisgICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wKKwkJKnl5X2NwID0gKHl5X2hvbGRfY2hhcik7IFwKKwkJWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBcCisJCSh5eV9jX2J1Zl9wKSA9IHl5X2NwID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9BREo7IFwKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHpjb25mdGV4dCBhZ2FpbiAqLyBcCisJCX0gXAorCXdoaWxlICggMCApCisKKyNkZWZpbmUgdW5wdXQoYykgeXl1bnB1dCggYywgKHl5dGV4dF9wdHIpICApCisKKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKK3R5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKKyNlbmRpZgorCisjaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKKyNkZWZpbmUgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQorc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQorCXsKKwlGSUxFICp5eV9pbnB1dF9maWxlOworCisJY2hhciAqeXlfY2hfYnVmOwkJLyogaW5wdXQgYnVmZmVyICovCisJY2hhciAqeXlfYnVmX3BvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gaW5wdXQgYnVmZmVyICovCisKKwkvKiBTaXplIG9mIGlucHV0IGJ1ZmZlciBpbiBieXRlcywgbm90IGluY2x1ZGluZyByb29tIGZvciBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCXl5X3NpemVfdCB5eV9idWZfc2l6ZTsKKworCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwlpbnQgeXlfbl9jaGFyczsKKworCS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKKwkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bworCSAqIGRlbGV0ZSBpdC4KKwkgKi8KKwlpbnQgeXlfaXNfb3VyX2J1ZmZlcjsKKworCS8qIFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0IHNvdXJjZTsgaWYgc28sIGFuZAorCSAqIGlmIHdlJ3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1dCwgdGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKKwkgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRvIG1ha2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlucHV0IGFmdGVyCisJICogZWFjaCBuZXdsaW5lLgorCSAqLworCWludCB5eV9pc19pbnRlcmFjdGl2ZTsKKworCS8qIFdoZXRoZXIgd2UncmUgY29uc2lkZXJlZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KKwkgKiBJZiBzbywgJ14nIHJ1bGVzIHdpbGwgYmUgYWN0aXZlIG9uIHRoZSBuZXh0IG1hdGNoLCBvdGhlcndpc2UKKwkgKiBub3QuCisJICovCisJaW50IHl5X2F0X2JvbDsKKworICAgIGludCB5eV9ic19saW5lbm87IC8qKjwgVGhlIGxpbmUgY291bnQuICovCisgICAgaW50IHl5X2JzX2NvbHVtbjsgLyoqPCBUaGUgY29sdW1uIGNvdW50LiAqLworICAgIAorCS8qIFdoZXRoZXIgdG8gdHJ5IHRvIGZpbGwgdGhlIGlucHV0IGJ1ZmZlciB3aGVuIHdlIHJlYWNoIHRoZQorCSAqIGVuZCBvZiBpdC4KKwkgKi8KKwlpbnQgeXlfZmlsbF9idWZmZXI7CisKKwlpbnQgeXlfYnVmZmVyX3N0YXR1czsKKworI2RlZmluZSBZWV9CVUZGRVJfTkVXIDAKKyNkZWZpbmUgWVlfQlVGRkVSX05PUk1BTCAxCisJLyogV2hlbiBhbiBFT0YncyBiZWVuIHNlZW4gYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSB0ZXh0IHRvIHByb2Nlc3MKKwkgKiB0aGVuIHdlIG1hcmsgdGhlIGJ1ZmZlciBhcyBZWV9FT0ZfUEVORElORywgdG8gaW5kaWNhdGUgdGhhdCB3ZQorCSAqIHNob3VsZG4ndCB0cnkgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBzb3VyY2UgYW55IG1vcmUuICBXZSBtaWdodAorCSAqIHN0aWxsIGhhdmUgYSBidW5jaCBvZiB0b2tlbnMgdG8gbWF0Y2gsIHRob3VnaCwgYmVjYXVzZSBvZgorCSAqIHBvc3NpYmxlIGJhY2tpbmctdXAuCisJICoKKwkgKiBXaGVuIHdlIGFjdHVhbGx5IHNlZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhlIHN0YXR1cyB0byAibmV3IgorCSAqICh2aWEgemNvbmZyZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBjb250aW51ZSBzY2FubmluZyBieQorCSAqIGp1c3QgcG9pbnRpbmcgemNvbmZpbiBhdCBhIG5ldyBpbnB1dCBmaWxlLgorCSAqLworI2RlZmluZSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgMgorCisJfTsKKyNlbmRpZiAvKiAhWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURSAqLworCisvKiBTdGFjayBvZiBpbnB1dCBidWZmZXJzLiAqLworc3RhdGljIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfdG9wID0gMDsgLyoqPCBpbmRleCBvZiB0b3Agb2Ygc3RhY2suICovCitzdGF0aWMgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja19tYXggPSAwOyAvKio8IGNhcGFjaXR5IG9mIHN0YWNrLiAqLworc3RhdGljIFlZX0JVRkZFUl9TVEFURSAqIHl5X2J1ZmZlcl9zdGFjayA9IDA7IC8qKjwgU3RhY2sgYXMgYW4gYXJyYXkuICovCisKKy8qIFdlIHByb3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBpbiBjYXNlIGluIHRoZQorICogZnV0dXJlIHdlIHdhbnQgdG8gcHV0IHRoZSBidWZmZXIgc3RhdGVzIGluIGEgbW9yZSBnZW5lcmFsCisgKiAic2Nhbm5lciBzdGF0ZSIuCisgKgorICogUmV0dXJucyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgb3IgTlVMTC4KKyAqLworI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUiAoICh5eV9idWZmZXJfc3RhY2spIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoeXlfYnVmZmVyX3N0YWNrKVsoeXlfYnVmZmVyX3N0YWNrX3RvcCldIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxMKQorCisvKiBTYW1lIGFzIHByZXZpb3VzIG1hY3JvLCBidXQgdXNlZnVsIHdoZW4gd2Uga25vdyB0aGF0IHRoZSBidWZmZXIgc3RhY2sgaXMgbm90CisgKiBOVUxMIG9yIHdoZW4gd2UgbmVlZCBhbiBsdmFsdWUuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KKyAqLworI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgKHl5X2J1ZmZlcl9zdGFjaylbKHl5X2J1ZmZlcl9zdGFja190b3ApXQorCisvKiB5eV9ob2xkX2NoYXIgaG9sZHMgdGhlIGNoYXJhY3RlciBsb3N0IHdoZW4gemNvbmZ0ZXh0IGlzIGZvcm1lZC4gKi8KK3N0YXRpYyBjaGFyIHl5X2hvbGRfY2hhcjsKK3N0YXRpYyBpbnQgeXlfbl9jaGFyczsJCS8qIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYgKi8KK2ludCB6Y29uZmxlbmc7CisKKy8qIFBvaW50cyB0byBjdXJyZW50IGNoYXJhY3RlciBpbiBidWZmZXIuICovCitzdGF0aWMgY2hhciAqeXlfY19idWZfcCA9IChjaGFyICopIDA7CitzdGF0aWMgaW50IHl5X2luaXQgPSAwOwkJLyogd2hldGhlciB3ZSBuZWVkIHRvIGluaXRpYWxpemUgKi8KK3N0YXRpYyBpbnQgeXlfc3RhcnQgPSAwOwkvKiBzdGFydCBzdGF0ZSBudW1iZXIgKi8KKworLyogRmxhZyB3aGljaCBpcyB1c2VkIHRvIGFsbG93IHpjb25md3JhcCgpJ3MgdG8gZG8gYnVmZmVyIHN3aXRjaGVzCisgKiBpbnN0ZWFkIG9mIHNldHRpbmcgdXAgYSBmcmVzaCB6Y29uZmluLiAgQSBiaXQgb2YgYSBoYWNrIC4uLgorICovCitzdGF0aWMgaW50IHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZjsKKwordm9pZCB6Y29uZnJlc3RhcnQgKEZJTEUgKmlucHV0X2ZpbGUgICk7Cit2b2lkIHpjb25mX3N3aXRjaF90b19idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICApOworWVlfQlVGRkVSX1NUQVRFIHpjb25mX2NyZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgICk7Cit2b2lkIHpjb25mX2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICApOwordm9pZCB6Y29uZl9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICApOwordm9pZCB6Y29uZnB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAgKTsKK3ZvaWQgemNvbmZwb3BfYnVmZmVyX3N0YXRlICh2b2lkICk7CisKK3N0YXRpYyB2b2lkIHpjb25mZW5zdXJlX2J1ZmZlcl9zdGFjayAodm9pZCApOworc3RhdGljIHZvaWQgemNvbmZfbG9hZF9idWZmZXJfc3RhdGUgKHZvaWQgKTsKK3N0YXRpYyB2b2lkIHpjb25mX2luaXRfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYixGSUxFICpmaWxlICApOworCisjZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiB6Y29uZl9mbHVzaF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgKQorCitZWV9CVUZGRVJfU1RBVEUgemNvbmZfc2Nhbl9idWZmZXIgKGNoYXIgKmJhc2UseXlfc2l6ZV90IHNpemUgICk7CitZWV9CVUZGRVJfU1RBVEUgemNvbmZfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqeXlfc3RyICApOworWVlfQlVGRkVSX1NUQVRFIHpjb25mX3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50IGxlbiAgKTsKKwordm9pZCAqemNvbmZhbGxvYyAoeXlfc2l6ZV90ICApOwordm9pZCAqemNvbmZyZWFsbG9jICh2b2lkICoseXlfc2l6ZV90ICApOwordm9pZCB6Y29uZmZyZWUgKHZvaWQgKiAgKTsKKworI2RlZmluZSB5eV9uZXdfYnVmZmVyIHpjb25mX2NyZWF0ZV9idWZmZXIKKworI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJhY3RpdmUpIFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAorICAgICAgICB6Y29uZmVuc3VyZV9idWZmZXJfc3RhY2sgKCk7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAorICAgICAgICAgICAgemNvbmZfY3JlYXRlX2J1ZmZlcih6Y29uZmluLFlZX0JVRl9TSVpFICk7IFwKKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlID0gaXNfaW50ZXJhY3RpdmU7IFwKKwl9CisKKyNkZWZpbmUgeXlfc2V0X2JvbChhdF9ib2wpIFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXtcCisgICAgICAgIHpjb25mZW5zdXJlX2J1ZmZlcl9zdGFjayAoKTsgXAorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCisgICAgICAgICAgICB6Y29uZl9jcmVhdGVfYnVmZmVyKHpjb25maW4sWVlfQlVGX1NJWkUgKTsgXAorCX0gXAorCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9sOyBcCisJfQorCisjZGVmaW5lIFlZX0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCkKKworLyogQmVnaW4gdXNlciBzZWN0MyAqLworCisjZGVmaW5lIHpjb25md3JhcChuKSAxCisjZGVmaW5lIFlZX1NLSVBfWVlXUkFQCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBZWV9DSEFSOworCitGSUxFICp6Y29uZmluID0gKEZJTEUgKikgMCwgKnpjb25mb3V0ID0gKEZJTEUgKikgMDsKKwordHlwZWRlZiBpbnQgeXlfc3RhdGVfdHlwZTsKKworZXh0ZXJuIGludCB6Y29uZmxpbmVubzsKKworaW50IHpjb25mbGluZW5vID0gMTsKKworZXh0ZXJuIGNoYXIgKnpjb25mdGV4dDsKKyNkZWZpbmUgeXl0ZXh0X3B0ciB6Y29uZnRleHQKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbXVsxN10gPQorICAgIHsKKyAgICB7CisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAKKyAgICB9LAorCisgICAgeworICAgICAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDEyLCAgIDEyLCAgIDE1LCAgIDEyLCAgIDEyLCAgIDEyLAorICAgICAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMSwgICAxMiwgICAxMywgICAxNCwgICAxMiwgICAxMiwgICAxNSwgICAxMiwgICAxMiwgICAxMiwKKyAgICAgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMgorICAgIH0sCisKKyAgICB7CisgICAgICAgMTEsICAgMTYsICAgMTYsICAgMTcsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYsCisgICAgICAgMTYsICAgMTYsICAgMTYsICAgMTgsICAgMTYsICAgMTYsICAgMTYKKyAgICB9LAorCisgICAgeworICAgICAgIDExLCAgIDE2LCAgIDE2LCAgIDE3LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LAorICAgICAgIDE2LCAgIDE2LCAgIDE2LCAgIDE4LCAgIDE2LCAgIDE2LCAgIDE2CisKKyAgICB9LAorCisgICAgeworICAgICAgIDExLCAgIDE5LCAgIDIwLCAgIDIxLCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LAorICAgICAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMSwgICAxOSwgICAyMCwgICAyMSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwKKyAgICAgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOQorICAgIH0sCisKKyAgICB7CisgICAgICAgMTEsICAgMjIsICAgMjIsICAgMjMsICAgMjIsICAgMjQsICAgMjIsICAgMjIsICAgMjQsICAgMjIsCisgICAgICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjUsICAgMjIKKyAgICB9LAorCisgICAgeworICAgICAgIDExLCAgIDIyLCAgIDIyLCAgIDIzLCAgIDIyLCAgIDI0LCAgIDIyLCAgIDIyLCAgIDI0LCAgIDIyLAorICAgICAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDI1LCAgIDIyCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMSwgICAyNiwgICAyNiwgICAyNywgICAyOCwgICAyOSwgICAzMCwgICAzMSwgICAyOSwgICAzMiwKKyAgICAgICAzMywgICAzNCwgICAzNSwgICAzNSwgICAzNiwgICAzNywgICAzOAorCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMSwgICAyNiwgICAyNiwgICAyNywgICAyOCwgICAyOSwgICAzMCwgICAzMSwgICAyOSwgICAzMiwKKyAgICAgICAzMywgICAzNCwgICAzNSwgICAzNSwgICAzNiwgICAzNywgICAzOAorICAgIH0sCisKKyAgICB7CisgICAgICAtMTEsICAtMTEsICAtMTEsICAtMTEsICAtMTEsICAtMTEsICAtMTEsICAtMTEsICAtMTEsICAtMTEsCisgICAgICAtMTEsICAtMTEsICAtMTEsICAtMTEsICAtMTEsICAtMTEsICAtMTEKKyAgICB9LAorCisgICAgeworICAgICAgIDExLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLAorICAgICAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMSwgIC0xMywgICAzOSwgICA0MCwgIC0xMywgIC0xMywgICA0MSwgIC0xMywgIC0xMywgIC0xMywKKyAgICAgIC0xMywgIC0xMywgIC0xMywgIC0xMywgIC0xMywgIC0xMywgIC0xMworICAgIH0sCisKKyAgICB7CisgICAgICAgMTEsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsCisgICAgICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQKKworICAgIH0sCisKKyAgICB7CisgICAgICAgMTEsICAgNDIsICAgNDIsICAgNDMsICAgNDIsICAgNDIsICAgNDIsICAgNDIsICAgNDIsICAgNDIsCisgICAgICAgNDIsICAgNDIsICAgNDIsICAgNDIsICAgNDIsICAgNDIsICAgNDIKKyAgICB9LAorCisgICAgeworICAgICAgIDExLCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LAorICAgICAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMSwgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywKKyAgICAgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNworICAgIH0sCisKKyAgICB7CisgICAgICAgMTEsICAtMTgsICAtMTgsICAtMTgsICAtMTgsICAtMTgsICAtMTgsICAtMTgsICAtMTgsICAtMTgsCisgICAgICAtMTgsICAtMTgsICAtMTgsICAgNDQsICAtMTgsICAtMTgsICAtMTgKKyAgICB9LAorCisgICAgeworICAgICAgIDExLCAgIDQ1LCAgIDQ1LCAgLTE5LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LAorICAgICAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1CisKKyAgICB9LAorCisgICAgeworICAgICAgIDExLCAgLTIwLCAgIDQ2LCAgIDQ3LCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLAorICAgICAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMSwgICA0OCwgIC0yMSwgIC0yMSwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwKKyAgICAgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OAorICAgIH0sCisKKyAgICB7CisgICAgICAgMTEsICAgNDksICAgNDksICAgNTAsICAgNDksICAtMjIsICAgNDksICAgNDksICAtMjIsICAgNDksCisgICAgICAgNDksICAgNDksICAgNDksICAgNDksICAgNDksICAtMjIsICAgNDkKKyAgICB9LAorCisgICAgeworICAgICAgIDExLCAgLTIzLCAgLTIzLCAgLTIzLCAgLTIzLCAgLTIzLCAgLTIzLCAgLTIzLCAgLTIzLCAgLTIzLAorICAgICAgLTIzLCAgLTIzLCAgLTIzLCAgLTIzLCAgLTIzLCAgLTIzLCAgLTIzCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMSwgIC0yNCwgIC0yNCwgIC0yNCwgIC0yNCwgIC0yNCwgIC0yNCwgIC0yNCwgIC0yNCwgIC0yNCwKKyAgICAgIC0yNCwgIC0yNCwgIC0yNCwgIC0yNCwgIC0yNCwgIC0yNCwgIC0yNAorCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMSwgICA1MSwgICA1MSwgICA1MiwgICA1MSwgICA1MSwgICA1MSwgICA1MSwgICA1MSwgICA1MSwKKyAgICAgICA1MSwgICA1MSwgICA1MSwgICA1MSwgICA1MSwgICA1MSwgICA1MQorICAgIH0sCisKKyAgICB7CisgICAgICAgMTEsICAtMjYsICAtMjYsICAtMjYsICAtMjYsICAtMjYsICAtMjYsICAtMjYsICAtMjYsICAtMjYsCisgICAgICAtMjYsICAtMjYsICAtMjYsICAtMjYsICAtMjYsICAtMjYsICAtMjYKKyAgICB9LAorCisgICAgeworICAgICAgIDExLCAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3LAorICAgICAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMSwgIC0yOCwgIC0yOCwgIC0yOCwgIC0yOCwgIC0yOCwgIC0yOCwgIC0yOCwgIC0yOCwgIC0yOCwKKyAgICAgIC0yOCwgIC0yOCwgIC0yOCwgIC0yOCwgICA1MywgIC0yOCwgIC0yOAorICAgIH0sCisKKyAgICB7CisgICAgICAgMTEsICAtMjksICAtMjksICAtMjksICAtMjksICAtMjksICAtMjksICAtMjksICAtMjksICAtMjksCisgICAgICAtMjksICAtMjksICAtMjksICAtMjksICAtMjksICAtMjksICAtMjkKKworICAgIH0sCisKKyAgICB7CisgICAgICAgMTEsICAgNTQsICAgNTQsICAtMzAsICAgNTQsICAgNTQsICAgNTQsICAgNTQsICAgNTQsICAgNTQsCisgICAgICAgNTQsICAgNTQsICAgNTQsICAgNTQsICAgNTQsICAgNTQsICAgNTQKKyAgICB9LAorCisgICAgeworICAgICAgIDExLCAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxLCAgIDU1LCAgLTMxLCAgLTMxLAorICAgICAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMSwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwKKyAgICAgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMgorICAgIH0sCisKKyAgICB7CisgICAgICAgMTEsICAtMzMsICAtMzMsICAtMzMsICAtMzMsICAtMzMsICAtMzMsICAtMzMsICAtMzMsICAtMzMsCisgICAgICAtMzMsICAtMzMsICAtMzMsICAtMzMsICAtMzMsICAtMzMsICAtMzMKKyAgICB9LAorCisgICAgeworICAgICAgIDExLCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LAorICAgICAgLTM0LCAgIDU2LCAgIDU3LCAgIDU3LCAgLTM0LCAgLTM0LCAgLTM0CisKKyAgICB9LAorCisgICAgeworICAgICAgIDExLCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LAorICAgICAgLTM1LCAgIDU3LCAgIDU3LCAgIDU3LCAgLTM1LCAgLTM1LCAgLTM1CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMSwgIC0zNiwgIC0zNiwgIC0zNiwgIC0zNiwgIC0zNiwgIC0zNiwgIC0zNiwgIC0zNiwgIC0zNiwKKyAgICAgIC0zNiwgIC0zNiwgIC0zNiwgIC0zNiwgIC0zNiwgIC0zNiwgIC0zNgorICAgIH0sCisKKyAgICB7CisgICAgICAgMTEsICAtMzcsICAtMzcsICAgNTgsICAtMzcsICAtMzcsICAtMzcsICAtMzcsICAtMzcsICAtMzcsCisgICAgICAtMzcsICAtMzcsICAtMzcsICAtMzcsICAtMzcsICAtMzcsICAtMzcKKyAgICB9LAorCisgICAgeworICAgICAgIDExLCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LAorICAgICAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgIDU5CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMSwgIC0zOSwgICAzOSwgICA0MCwgIC0zOSwgIC0zOSwgICA0MSwgIC0zOSwgIC0zOSwgIC0zOSwKKyAgICAgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOQorCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMSwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwKKyAgICAgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MAorICAgIH0sCisKKyAgICB7CisgICAgICAgMTEsICAgNDIsICAgNDIsICAgNDMsICAgNDIsICAgNDIsICAgNDIsICAgNDIsICAgNDIsICAgNDIsCisgICAgICAgNDIsICAgNDIsICAgNDIsICAgNDIsICAgNDIsICAgNDIsICAgNDIKKyAgICB9LAorCisgICAgeworICAgICAgIDExLCAgIDQyLCAgIDQyLCAgIDQzLCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyLAorICAgICAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMSwgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywKKyAgICAgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MworICAgIH0sCisKKyAgICB7CisgICAgICAgMTEsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsCisgICAgICAtNDQsICAtNDQsICAtNDQsICAgNDQsICAtNDQsICAtNDQsICAtNDQKKworICAgIH0sCisKKyAgICB7CisgICAgICAgMTEsICAgNDUsICAgNDUsICAtNDUsICAgNDUsICAgNDUsICAgNDUsICAgNDUsICAgNDUsICAgNDUsCisgICAgICAgNDUsICAgNDUsICAgNDUsICAgNDUsICAgNDUsICAgNDUsICAgNDUKKyAgICB9LAorCisgICAgeworICAgICAgIDExLCAgLTQ2LCAgIDQ2LCAgIDQ3LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LAorICAgICAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMSwgICA0OCwgIC00NywgIC00NywgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwKKyAgICAgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OAorICAgIH0sCisKKyAgICB7CisgICAgICAgMTEsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsCisgICAgICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgKKyAgICB9LAorCisgICAgeworICAgICAgIDExLCAgIDQ5LCAgIDQ5LCAgIDUwLCAgIDQ5LCAgLTQ5LCAgIDQ5LCAgIDQ5LCAgLTQ5LCAgIDQ5LAorICAgICAgIDQ5LCAgIDQ5LCAgIDQ5LCAgIDQ5LCAgIDQ5LCAgLTQ5LCAgIDQ5CisKKyAgICB9LAorCisgICAgeworICAgICAgIDExLCAgLTUwLCAgLTUwLCAgLTUwLCAgLTUwLCAgLTUwLCAgLTUwLCAgLTUwLCAgLTUwLCAgLTUwLAorICAgICAgLTUwLCAgLTUwLCAgLTUwLCAgLTUwLCAgLTUwLCAgLTUwLCAgLTUwCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMSwgIC01MSwgIC01MSwgICA1MiwgIC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwKKyAgICAgIC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MQorICAgIH0sCisKKyAgICB7CisgICAgICAgMTEsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsCisgICAgICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIKKyAgICB9LAorCisgICAgeworICAgICAgIDExLCAgLTUzLCAgLTUzLCAgLTUzLCAgLTUzLCAgLTUzLCAgLTUzLCAgLTUzLCAgLTUzLCAgLTUzLAorICAgICAgLTUzLCAgLTUzLCAgLTUzLCAgLTUzLCAgLTUzLCAgLTUzLCAgLTUzCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMSwgICA1NCwgICA1NCwgIC01NCwgICA1NCwgICA1NCwgICA1NCwgICA1NCwgICA1NCwgICA1NCwKKyAgICAgICA1NCwgICA1NCwgICA1NCwgICA1NCwgICA1NCwgICA1NCwgICA1NAorCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMSwgIC01NSwgIC01NSwgIC01NSwgIC01NSwgIC01NSwgIC01NSwgIC01NSwgIC01NSwgIC01NSwKKyAgICAgIC01NSwgIC01NSwgIC01NSwgIC01NSwgIC01NSwgIC01NSwgIC01NQorICAgIH0sCisKKyAgICB7CisgICAgICAgMTEsICAtNTYsICAtNTYsICAtNTYsICAtNTYsICAtNTYsICAtNTYsICAtNTYsICAtNTYsICAtNTYsCisgICAgICAtNTYsICAgNjAsICAgNTcsICAgNTcsICAtNTYsICAtNTYsICAtNTYKKyAgICB9LAorCisgICAgeworICAgICAgIDExLCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LAorICAgICAgLTU3LCAgIDU3LCAgIDU3LCAgIDU3LCAgLTU3LCAgLTU3LCAgLTU3CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMSwgIC01OCwgIC01OCwgIC01OCwgIC01OCwgIC01OCwgIC01OCwgIC01OCwgIC01OCwgIC01OCwKKyAgICAgIC01OCwgIC01OCwgIC01OCwgIC01OCwgIC01OCwgIC01OCwgIC01OAorICAgIH0sCisKKyAgICB7CisgICAgICAgMTEsICAtNTksICAtNTksICAtNTksICAtNTksICAtNTksICAtNTksICAtNTksICAtNTksICAtNTksCisgICAgICAtNTksICAtNTksICAtNTksICAtNTksICAtNTksICAtNTksICAtNTkKKworICAgIH0sCisKKyAgICB7CisgICAgICAgMTEsICAtNjAsICAtNjAsICAtNjAsICAtNjAsICAtNjAsICAtNjAsICAtNjAsICAtNjAsICAtNjAsCisgICAgICAtNjAsICAgNTcsICAgNTcsICAgNTcsICAtNjAsICAtNjAsICAtNjAKKyAgICB9LAorCisgICAgfSA7CisKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAodm9pZCApOworc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAoeXlfc3RhdGVfdHlwZSBjdXJyZW50X3N0YXRlICApOworc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHZvaWQgKTsKK3N0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10gICk7CisKKy8qIERvbmUgYWZ0ZXIgdGhlIGN1cnJlbnQgcGF0dGVybiBoYXMgYmVlbiBtYXRjaGVkIGFuZCBiZWZvcmUgdGhlCisgKiBjb3JyZXNwb25kaW5nIGFjdGlvbiAtIHNldHMgdXAgemNvbmZ0ZXh0LgorICovCisjZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJT04gXAorCSh5eXRleHRfcHRyKSA9IHl5X2JwOyBcCisJemNvbmZsZW5nID0gKHNpemVfdCkgKHl5X2NwIC0geXlfYnApOyBcCisJKHl5X2hvbGRfY2hhcikgPSAqeXlfY3A7IFwKKwkqeXlfY3AgPSAnXDAnOyBcCisJKHl5X2NfYnVmX3ApID0geXlfY3A7CisKKyNkZWZpbmUgWVlfTlVNX1JVTEVTIDMzCisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMzQKKy8qIFRoaXMgc3RydWN0IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKKyAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNzYXJ5LiAqLworc3RydWN0IHl5X3RyYW5zX2luZm8KKwl7CisJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKKwlmbGV4X2ludDMyX3QgeXlfbnh0OworCX07CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0WzYxXSA9CisgICAgeyAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisgICAgICAgMzQsICAgIDUsICAgIDQsICAgIDIsICAgIDMsICAgIDcsICAgIDgsICAgIDYsICAgMzIsICAgMjksCisgICAgICAgMzEsICAgMjQsICAgMjgsICAgMjcsICAgMjYsICAgMjIsICAgMTcsICAgMTMsICAgMTYsICAgMjAsCisgICAgICAgMjIsICAgMTEsICAgMTIsICAgMTksICAgMTksICAgMTQsICAgMjIsICAgMjIsICAgIDQsICAgIDIsCisgICAgICAgIDMsICAgIDMsICAgIDEsICAgIDYsICAgMzIsICAgMjksICAgMzEsICAgMzAsICAgMjQsICAgMjMsCisgICAgICAgMjYsICAgMjUsICAgMTUsICAgMjAsICAgIDksICAgMTksICAgMTksICAgMjEsICAgMTAsICAgMTgKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAzLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAyLCAgICA0LCAgICA1LCAgICA2LCAgICAxLCAgICAxLCAgICA3LCAgICA4LCAgICA5LAorICAgICAgIDEwLCAgICAxLCAgICAxLCAgICAxLCAgIDExLCAgIDEyLCAgIDEyLCAgIDEzLCAgIDEzLCAgIDEzLAorICAgICAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgIDE0LCAgICAxLCAgICAxLCAgICAxLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLAorICAgICAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLAorICAgICAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLAorICAgICAgICAxLCAgIDE1LCAgICAxLCAgICAxLCAgIDEzLCAgICAxLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLAorCisgICAgICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsCisgICAgICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsCisgICAgICAgMTMsICAgMTMsICAgIDEsICAgMTYsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQorICAgIH0gOworCitleHRlcm4gaW50IHpjb25mX2ZsZXhfZGVidWc7CitpbnQgemNvbmZfZmxleF9kZWJ1ZyA9IDA7CisKKy8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xsIGNhdGNoCisgKiBhbnkgdXNlcyBvZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNzZWQuCisgKi8KKyNkZWZpbmUgUkVKRUNUIHJlamVjdF91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKKyNkZWZpbmUgeXltb3JlKCkgeXltb3JlX3VzZWRfYnV0X25vdF9kZXRlY3RlZAorI2RlZmluZSBZWV9NT1JFX0FESiAwCisjZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKK2NoYXIgKnpjb25mdGV4dDsKKyNkZWZpbmUgWVlfTk9fSU5QVVQgMQorCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuCisgKi8KKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNkZWZpbmUgTEtDX0RJUkVDVF9MSU5LCisjaW5jbHVkZSAibGtjLmgiCisKKyNkZWZpbmUgU1RBUlRfU1RSU0laRQkxNgorCitzdGF0aWMgc3RydWN0IHsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwlpbnQgbGluZW5vOworfSBjdXJyZW50X3BvczsKKworc3RhdGljIGNoYXIgKnRleHQ7CitzdGF0aWMgaW50IHRleHRfc2l6ZSwgdGV4dF9hc2l6ZTsKKworc3RydWN0IGJ1ZmZlciB7CisgICAgICAgIHN0cnVjdCBidWZmZXIgKnBhcmVudDsKKyAgICAgICAgWVlfQlVGRkVSX1NUQVRFIHN0YXRlOworfTsKKworc3RydWN0IGJ1ZmZlciAqY3VycmVudF9idWY7CisKK3N0YXRpYyBpbnQgbGFzdF90cywgZmlyc3RfdHM7CisKK3N0YXRpYyB2b2lkIHpjb25mX2VuZGhlbHAodm9pZCk7CitzdGF0aWMgdm9pZCB6Y29uZl9lbmRmaWxlKHZvaWQpOworCitzdGF0aWMgdm9pZCBuZXdfc3RyaW5nKHZvaWQpCit7CisJdGV4dCA9IG1hbGxvYyhTVEFSVF9TVFJTSVpFKTsKKwl0ZXh0X2FzaXplID0gU1RBUlRfU1RSU0laRTsKKwl0ZXh0X3NpemUgPSAwOworCSp0ZXh0ID0gMDsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQoreworCWludCBuZXdfc2l6ZSA9IHRleHRfc2l6ZSArIHNpemUgKyAxOworCWlmIChuZXdfc2l6ZSA+IHRleHRfYXNpemUpIHsKKwkJbmV3X3NpemUgKz0gU1RBUlRfU1RSU0laRSAtIDE7CisJCW5ld19zaXplICY9IC1TVEFSVF9TVFJTSVpFOworCQl0ZXh0ID0gcmVhbGxvYyh0ZXh0LCBuZXdfc2l6ZSk7CisJCXRleHRfYXNpemUgPSBuZXdfc2l6ZTsKKwl9CisJbWVtY3B5KHRleHQgKyB0ZXh0X3NpemUsIHN0ciwgc2l6ZSk7CisJdGV4dF9zaXplICs9IHNpemU7CisJdGV4dFt0ZXh0X3NpemVdID0gMDsKK30KKworc3RhdGljIHZvaWQgYWxsb2Nfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCit7CisJdGV4dCA9IG1hbGxvYyhzaXplICsgMSk7CisJbWVtY3B5KHRleHQsIHN0ciwgc2l6ZSk7CisJdGV4dFtzaXplXSA9IDA7Cit9CisKKyNkZWZpbmUgSU5JVElBTCAwCisjZGVmaW5lIENPTU1BTkQgMQorI2RlZmluZSBIRUxQIDIKKyNkZWZpbmUgU1RSSU5HIDMKKyNkZWZpbmUgUEFSQU0gNAorCisjaWZuZGVmIFlZX05PX1VOSVNURF9ICisvKiBTcGVjaWFsIGNhc2UgZm9yICJ1bmlzdGQuaCIsIHNpbmNlIGl0IGlzIG5vbi1BTlNJLiBXZSBpbmNsdWRlIGl0IHdheQorICogZG93biBoZXJlIGJlY2F1c2Ugd2Ugd2FudCB0aGUgdXNlcidzIHNlY3Rpb24gMSB0byBoYXZlIGJlZW4gc2Nhbm5lZCBmaXJzdC4KKyAqIFRoZSB1c2VyIGhhcyBhIGNoYW5jZSB0byBvdmVycmlkZSBpdCB3aXRoIGFuIG9wdGlvbi4KKyAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpZm5kZWYgWVlfRVhUUkFfVFlQRQorI2RlZmluZSBZWV9FWFRSQV9UWVBFIHZvaWQgKgorI2VuZGlmCisKK3N0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh2b2lkICk7CisKKy8qIEFjY2Vzc29yIG1ldGhvZHMgdG8gZ2xvYmFscy4KKyAgIFRoZXNlIGFyZSBtYWRlIHZpc2libGUgdG8gbm9uLXJlZW50cmFudCBzY2FubmVycyBmb3IgY29udmVuaWVuY2UuICovCisKK2ludCB6Y29uZmxleF9kZXN0cm95ICh2b2lkICk7CisKK2ludCB6Y29uZmdldF9kZWJ1ZyAodm9pZCApOworCit2b2lkIHpjb25mc2V0X2RlYnVnIChpbnQgZGVidWdfZmxhZyAgKTsKKworWVlfRVhUUkFfVFlQRSB6Y29uZmdldF9leHRyYSAodm9pZCApOworCit2b2lkIHpjb25mc2V0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCAgKTsKKworRklMRSAqemNvbmZnZXRfaW4gKHZvaWQgKTsKKwordm9pZCB6Y29uZnNldF9pbiAgKEZJTEUgKiBpbl9zdHIgICk7CisKK0ZJTEUgKnpjb25mZ2V0X291dCAodm9pZCApOworCit2b2lkIHpjb25mc2V0X291dCAgKEZJTEUgKiBvdXRfc3RyICApOworCitpbnQgemNvbmZnZXRfbGVuZyAodm9pZCApOworCitjaGFyICp6Y29uZmdldF90ZXh0ICh2b2lkICk7CisKK2ludCB6Y29uZmdldF9saW5lbm8gKHZvaWQgKTsKKwordm9pZCB6Y29uZnNldF9saW5lbm8gKGludCBsaW5lX251bWJlciAgKTsKKworLyogTWFjcm9zIGFmdGVyIHRoaXMgcG9pbnQgY2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMgaW4KKyAqIHNlY3Rpb24gMS4KKyAqLworCisjaWZuZGVmIFlZX1NLSVBfWVlXUkFQCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgaW50IHpjb25md3JhcCAodm9pZCApOworI2Vsc2UKK2V4dGVybiBpbnQgemNvbmZ3cmFwICh2b2lkICk7CisjZW5kaWYKKyNlbmRpZgorCisgICAgc3RhdGljIHZvaWQgeXl1bnB1dCAoaW50IGMsY2hhciAqYnVmX3B0ciAgKTsKKyAgICAKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyICoseXljb25zdCBjaGFyICosaW50ICk7CisjZW5kaWYKKworI2lmZGVmIFlZX05FRURfU1RSTEVOCitzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiApOworI2VuZGlmCisKKyNpZm5kZWYgWVlfTk9fSU5QVVQKKworI2lmZGVmIF9fY3BsdXNwbHVzCitzdGF0aWMgaW50IHl5aW5wdXQgKHZvaWQgKTsKKyNlbHNlCitzdGF0aWMgaW50IGlucHV0ICh2b2lkICk7CisjZW5kaWYKKworI2VuZGlmCisKKy8qIEFtb3VudCBvZiBzdHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KKyNpZm5kZWYgWVlfUkVBRF9CVUZfU0laRQorI2lmZGVmIF9faWE2NF9fCisvKiBPbiBJQS02NCwgdGhlIGJ1ZmZlciBzaXplIGlzIDE2aywgbm90IDhrICovCisjZGVmaW5lIFlZX1JFQURfQlVGX1NJWkUgMTYzODQKKyNlbHNlCisjZGVmaW5lIFlZX1JFQURfQlVGX1NJWkUgODE5MgorI2VuZGlmIC8qIF9faWE2NF9fICovCisjZW5kaWYKKworLyogQ29weSB3aGF0ZXZlciB0aGUgbGFzdCBydWxlIG1hdGNoZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KKyNpZm5kZWYgRUNITworLyogVGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNvbnRhaW4gTlVMJ3MsCisgKiB3ZSBub3cgdXNlIGZ3cml0ZSgpLgorICovCisjZGVmaW5lIEVDSE8gZG8geyBpZiAoZndyaXRlKCB6Y29uZnRleHQsIHpjb25mbGVuZywgMSwgemNvbmZvdXQgKSkge30gfSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKiBHZXRzIGlucHV0IGFuZCBzdHVmZnMgaXQgaW50byAiYnVmIi4gIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQsIG9yIFlZX05VTEwsCisgKiBpcyByZXR1cm5lZCBpbiAicmVzdWx0Ii4KKyAqLworI2lmbmRlZiBZWV9JTlBVVAorI2RlZmluZSBZWV9JTlBVVChidWYscmVzdWx0LG1heF9zaXplKSBcCisJZXJybm89MDsgXAorCXdoaWxlICggKHJlc3VsdCA9IHJlYWQoIGZpbGVubyh6Y29uZmluKSwgKGNoYXIgKikgYnVmLCBtYXhfc2l6ZSApKSA8IDAgKSBcCisJeyBcCisJCWlmKCBlcnJubyAhPSBFSU5UUikgXAorCQl7IFwKKwkJCVlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAorCQkJYnJlYWs7IFwKKwkJfSBcCisJCWVycm5vPTA7IFwKKwkJY2xlYXJlcnIoemNvbmZpbik7IFwKKwl9XAorXAorCisjZW5kaWYKKworLyogTm8gc2VtaS1jb2xvbiBhZnRlciByZXR1cm47IGNvcnJlY3QgdXNhZ2UgaXMgdG8gd3JpdGUgInl5dGVybWluYXRlKCk7IiAtCisgKiB3ZSBkb24ndCB3YW50IGFuIGV4dHJhICc7JyBhZnRlciB0aGUgInJldHVybiIgYmVjYXVzZSB0aGF0IHdpbGwgY2F1c2UKKyAqIHNvbWUgY29tcGlsZXJzIHRvIGNvbXBsYWluIGFib3V0IHVucmVhY2hhYmxlIHN0YXRlbWVudHMuCisgKi8KKyNpZm5kZWYgeXl0ZXJtaW5hdGUKKyNkZWZpbmUgeXl0ZXJtaW5hdGUoKSByZXR1cm4gWVlfTlVMTAorI2VuZGlmCisKKy8qIE51bWJlciBvZiBlbnRyaWVzIGJ5IHdoaWNoIHN0YXJ0LWNvbmRpdGlvbiBzdGFjayBncm93cy4gKi8KKyNpZm5kZWYgWVlfU1RBUlRfU1RBQ0tfSU5DUgorI2RlZmluZSBZWV9TVEFSVF9TVEFDS19JTkNSIDI1CisjZW5kaWYKKworLyogUmVwb3J0IGEgZmF0YWwgZXJyb3IuICovCisjaWZuZGVmIFlZX0ZBVEFMX0VSUk9SCisjZGVmaW5lIFlZX0ZBVEFMX0VSUk9SKG1zZykgeXlfZmF0YWxfZXJyb3IoIG1zZyApCisjZW5kaWYKKworLyogZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMgYW5kIHByb3RvdHlwZXMgKi8KKworLyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5lciAtIGEgZGVmaW5lIHNvIHRoZSB1c2VyIGNhbgorICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgorICovCisjaWZuZGVmIFlZX0RFQ0wKKyNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKKworZXh0ZXJuIGludCB6Y29uZmxleCAodm9pZCk7CisKKyNkZWZpbmUgWVlfREVDTCBpbnQgemNvbmZsZXggKHZvaWQpCisjZW5kaWYgLyogIVlZX0RFQ0wgKi8KKworLyogQ29kZSBleGVjdXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggcnVsZSwgYWZ0ZXIgemNvbmZ0ZXh0IGFuZCB6Y29uZmxlbmcKKyAqIGhhdmUgYmVlbiBzZXQgdXAuCisgKi8KKyNpZm5kZWYgWVlfVVNFUl9BQ1RJT04KKyNkZWZpbmUgWVlfVVNFUl9BQ1RJT04KKyNlbmRpZgorCisvKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBydWxlLiAqLworI2lmbmRlZiBZWV9CUkVBSworI2RlZmluZSBZWV9CUkVBSyBicmVhazsKKyNlbmRpZgorCisjZGVmaW5lIFlZX1JVTEVfU0VUVVAgXAorCVlZX1VTRVJfQUNUSU9OCisKKy8qKiBUaGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3b3JrLgorICovCitZWV9ERUNMCit7CisJcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7CisJcmVnaXN0ZXIgaW50IHl5X2FjdDsKKyAgICAKKwlpbnQgc3RyID0gMDsKKwlpbnQgdHMsIGk7CisKKwlpZiAoICEoeXlfaW5pdCkgKQorCQl7CisJCSh5eV9pbml0KSA9IDE7CisKKyNpZmRlZiBZWV9VU0VSX0lOSVQKKwkJWVlfVVNFUl9JTklUOworI2VuZGlmCisKKwkJaWYgKCAhICh5eV9zdGFydCkgKQorCQkJKHl5X3N0YXJ0KSA9IDE7CS8qIGZpcnN0IHN0YXJ0IHN0YXRlICovCisKKwkJaWYgKCAhIHpjb25maW4gKQorCQkJemNvbmZpbiA9IHN0ZGluOworCisJCWlmICggISB6Y29uZm91dCApCisJCQl6Y29uZm91dCA9IHN0ZG91dDsKKworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKSB7CisJCQl6Y29uZmVuc3VyZV9idWZmZXJfc3RhY2sgKCk7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQorCQkJCXpjb25mX2NyZWF0ZV9idWZmZXIoemNvbmZpbixZWV9CVUZfU0laRSApOworCQl9CisKKwkJemNvbmZfbG9hZF9idWZmZXJfc3RhdGUoICk7CisJCX0KKworCXdoaWxlICggMSApCQkvKiBsb29wcyB1bnRpbCBlbmQtb2YtZmlsZSBpcyByZWFjaGVkICovCisJCXsKKwkJeXlfY3AgPSAoeXlfY19idWZfcCk7CisKKwkJLyogU3VwcG9ydCBvZiB6Y29uZnRleHQuICovCisJCSp5eV9jcCA9ICh5eV9ob2xkX2NoYXIpOworCisJCS8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9mIHRoZSBzdGFydCBvZgorCQkgKiB0aGUgY3VycmVudCBydW4uCisJCSAqLworCQl5eV9icCA9IHl5X2NwOworCisJCXl5X2N1cnJlbnRfc3RhdGUgPSAoeXlfc3RhcnQpOworeXlfbWF0Y2g6CisJCXdoaWxlICggKHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfY3VycmVudF9zdGF0ZV1bIHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldICBdKSA+IDAgKQorCQkJKyt5eV9jcDsKKworCQl5eV9jdXJyZW50X3N0YXRlID0gLXl5X2N1cnJlbnRfc3RhdGU7CisKK3l5X2ZpbmRfYWN0aW9uOgorCQl5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07CisKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsKKworZG9fYWN0aW9uOgkvKiBUaGlzIGxhYmVsIGlzIHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovCisKKwkJc3dpdGNoICggeXlfYWN0ICkKKwl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICovCitjYXNlIDE6CisvKiBydWxlIDEgY2FuIG1hdGNoIGVvbCAqLworY2FzZSAyOgorLyogcnVsZSAyIGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKK3sKKwljdXJyZW50X2ZpbGUtPmxpbmVubysrOworCXJldHVybiBUX0VPTDsKK30KKwlZWV9CUkVBSworY2FzZSAzOgorWVlfUlVMRV9TRVRVUAorCisJWVlfQlJFQUsKK2Nhc2UgNDoKK1lZX1JVTEVfU0VUVVAKK3sKKwlCRUdJTihDT01NQU5EKTsKK30KKwlZWV9CUkVBSworY2FzZSA1OgorWVlfUlVMRV9TRVRVUAoreworCXVucHV0KHpjb25mdGV4dFswXSk7CisJQkVHSU4oQ09NTUFORCk7Cit9CisJWVlfQlJFQUsKKworY2FzZSA2OgorWVlfUlVMRV9TRVRVUAoreworCQlzdHJ1Y3Qga2NvbmZfaWQgKmlkID0ga2NvbmZfaWRfbG9va3VwKHpjb25mdGV4dCwgemNvbmZsZW5nKTsKKwkJQkVHSU4oUEFSQU0pOworCQljdXJyZW50X3Bvcy5maWxlID0gY3VycmVudF9maWxlOworCQljdXJyZW50X3Bvcy5saW5lbm8gPSBjdXJyZW50X2ZpbGUtPmxpbmVubzsKKwkJaWYgKGlkICYmIGlkLT5mbGFncyAmIFRGX0NPTU1BTkQpIHsKKwkJCXpjb25mbHZhbC5pZCA9IGlkOworCQkJcmV0dXJuIGlkLT50b2tlbjsKKwkJfQorCQlhbGxvY19zdHJpbmcoemNvbmZ0ZXh0LCB6Y29uZmxlbmcpOworCQl6Y29uZmx2YWwuc3RyaW5nID0gdGV4dDsKKwkJcmV0dXJuIFRfV09SRDsKKwl9CisJWVlfQlJFQUsKK2Nhc2UgNzoKK1lZX1JVTEVfU0VUVVAKKworCVlZX0JSRUFLCitjYXNlIDg6CisvKiBydWxlIDggY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAoreworCQlCRUdJTihJTklUSUFMKTsKKwkJY3VycmVudF9maWxlLT5saW5lbm8rKzsKKwkJcmV0dXJuIFRfRU9MOworCX0KKwlZWV9CUkVBSworCitjYXNlIDk6CitZWV9SVUxFX1NFVFVQCityZXR1cm4gVF9BTkQ7CisJWVlfQlJFQUsKK2Nhc2UgMTA6CitZWV9SVUxFX1NFVFVQCityZXR1cm4gVF9PUjsKKwlZWV9CUkVBSworY2FzZSAxMToKK1lZX1JVTEVfU0VUVVAKK3JldHVybiBUX09QRU5fUEFSRU47CisJWVlfQlJFQUsKK2Nhc2UgMTI6CitZWV9SVUxFX1NFVFVQCityZXR1cm4gVF9DTE9TRV9QQVJFTjsKKwlZWV9CUkVBSworY2FzZSAxMzoKK1lZX1JVTEVfU0VUVVAKK3JldHVybiBUX05PVDsKKwlZWV9CUkVBSworY2FzZSAxNDoKK1lZX1JVTEVfU0VUVVAKK3JldHVybiBUX0VRVUFMOworCVlZX0JSRUFLCitjYXNlIDE1OgorWVlfUlVMRV9TRVRVUAorcmV0dXJuIFRfVU5FUVVBTDsKKwlZWV9CUkVBSworY2FzZSAxNjoKK1lZX1JVTEVfU0VUVVAKK3sKKwkJc3RyID0gemNvbmZ0ZXh0WzBdOworCQluZXdfc3RyaW5nKCk7CisJCUJFR0lOKFNUUklORyk7CisJfQorCVlZX0JSRUFLCitjYXNlIDE3OgorLyogcnVsZSAxNyBjYW4gbWF0Y2ggZW9sICovCitZWV9SVUxFX1NFVFVQCitCRUdJTihJTklUSUFMKTsgY3VycmVudF9maWxlLT5saW5lbm8rKzsgcmV0dXJuIFRfRU9MOworCVlZX0JSRUFLCitjYXNlIDE4OgorWVlfUlVMRV9TRVRVUAorLyogaWdub3JlICovCisJWVlfQlJFQUsKK2Nhc2UgMTk6CitZWV9SVUxFX1NFVFVQCit7CisJCXN0cnVjdCBrY29uZl9pZCAqaWQgPSBrY29uZl9pZF9sb29rdXAoemNvbmZ0ZXh0LCB6Y29uZmxlbmcpOworCQlpZiAoaWQgJiYgaWQtPmZsYWdzICYgVEZfUEFSQU0pIHsKKwkJCXpjb25mbHZhbC5pZCA9IGlkOworCQkJcmV0dXJuIGlkLT50b2tlbjsKKwkJfQorCQlhbGxvY19zdHJpbmcoemNvbmZ0ZXh0LCB6Y29uZmxlbmcpOworCQl6Y29uZmx2YWwuc3RyaW5nID0gdGV4dDsKKwkJcmV0dXJuIFRfV09SRDsKKwl9CisJWVlfQlJFQUsKK2Nhc2UgMjA6CitZWV9SVUxFX1NFVFVQCisvKiBjb21tZW50ICovCisJWVlfQlJFQUsKK2Nhc2UgMjE6CisvKiBydWxlIDIxIGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKK2N1cnJlbnRfZmlsZS0+bGluZW5vKys7CisJWVlfQlJFQUsKK2Nhc2UgMjI6CitZWV9SVUxFX1NFVFVQCisKKwlZWV9CUkVBSworY2FzZSBZWV9TVEFURV9FT0YoUEFSQU0pOgoreworCQlCRUdJTihJTklUSUFMKTsKKwl9CisJWVlfQlJFQUsKKworY2FzZSAyMzoKKy8qIHJ1bGUgMjMgY2FuIG1hdGNoIGVvbCAqLworKnl5X2NwID0gKHl5X2hvbGRfY2hhcik7IC8qIHVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHpjb25mdGV4dCAqLworKHl5X2NfYnVmX3ApID0geXlfY3AgLT0gMTsKK1lZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB6Y29uZnRleHQgYWdhaW4gKi8KK1lZX1JVTEVfU0VUVVAKK3sKKwkJYXBwZW5kX3N0cmluZyh6Y29uZnRleHQsIHpjb25mbGVuZyk7CisJCXpjb25mbHZhbC5zdHJpbmcgPSB0ZXh0OworCQlyZXR1cm4gVF9XT1JEX1FVT1RFOworCX0KKwlZWV9CUkVBSworY2FzZSAyNDoKK1lZX1JVTEVfU0VUVVAKK3sKKwkJYXBwZW5kX3N0cmluZyh6Y29uZnRleHQsIHpjb25mbGVuZyk7CisJfQorCVlZX0JSRUFLCitjYXNlIDI1OgorLyogcnVsZSAyNSBjYW4gbWF0Y2ggZW9sICovCisqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsgLyogdW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgemNvbmZ0ZXh0ICovCisoeXlfY19idWZfcCkgPSB5eV9jcCAtPSAxOworWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHpjb25mdGV4dCBhZ2FpbiAqLworWVlfUlVMRV9TRVRVUAoreworCQlhcHBlbmRfc3RyaW5nKHpjb25mdGV4dCArIDEsIHpjb25mbGVuZyAtIDEpOworCQl6Y29uZmx2YWwuc3RyaW5nID0gdGV4dDsKKwkJcmV0dXJuIFRfV09SRF9RVU9URTsKKwl9CisJWVlfQlJFQUsKK2Nhc2UgMjY6CitZWV9SVUxFX1NFVFVQCit7CisJCWFwcGVuZF9zdHJpbmcoemNvbmZ0ZXh0ICsgMSwgemNvbmZsZW5nIC0gMSk7CisJfQorCVlZX0JSRUFLCitjYXNlIDI3OgorWVlfUlVMRV9TRVRVUAoreworCQlpZiAoc3RyID09IHpjb25mdGV4dFswXSkgeworCQkJQkVHSU4oUEFSQU0pOworCQkJemNvbmZsdmFsLnN0cmluZyA9IHRleHQ7CisJCQlyZXR1cm4gVF9XT1JEX1FVT1RFOworCQl9IGVsc2UKKwkJCWFwcGVuZF9zdHJpbmcoemNvbmZ0ZXh0LCAxKTsKKwl9CisJWVlfQlJFQUsKK2Nhc2UgMjg6CisvKiBydWxlIDI4IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKK3sKKwkJcHJpbnRmKCIlczolZDp3YXJuaW5nOiBtdWx0aS1saW5lIHN0cmluZ3Mgbm90IHN1cHBvcnRlZFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJCWN1cnJlbnRfZmlsZS0+bGluZW5vKys7CisJCUJFR0lOKElOSVRJQUwpOworCQlyZXR1cm4gVF9FT0w7CisJfQorCVlZX0JSRUFLCitjYXNlIFlZX1NUQVRFX0VPRihTVFJJTkcpOgoreworCQlCRUdJTihJTklUSUFMKTsKKwl9CisJWVlfQlJFQUsKKworY2FzZSAyOToKK1lZX1JVTEVfU0VUVVAKK3sKKwkJdHMgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgemNvbmZsZW5nOyBpKyspIHsKKwkJCWlmICh6Y29uZnRleHRbaV0gPT0gJ1x0JykKKwkJCQl0cyA9ICh0cyAmIH43KSArIDg7CisJCQllbHNlCisJCQkJdHMrKzsKKwkJfQorCQlsYXN0X3RzID0gdHM7CisJCWlmIChmaXJzdF90cykgeworCQkJaWYgKHRzIDwgZmlyc3RfdHMpIHsKKwkJCQl6Y29uZl9lbmRoZWxwKCk7CisJCQkJcmV0dXJuIFRfSEVMUFRFWFQ7CisJCQl9CisJCQl0cyAtPSBmaXJzdF90czsKKwkJCXdoaWxlICh0cyA+IDgpIHsKKwkJCQlhcHBlbmRfc3RyaW5nKCIgICAgICAgICIsIDgpOworCQkJCXRzIC09IDg7CisJCQl9CisJCQlhcHBlbmRfc3RyaW5nKCIgICAgICAgICIsIHRzKTsKKwkJfQorCX0KKwlZWV9CUkVBSworY2FzZSAzMDoKKy8qIHJ1bGUgMzAgY2FuIG1hdGNoIGVvbCAqLworKnl5X2NwID0gKHl5X2hvbGRfY2hhcik7IC8qIHVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHpjb25mdGV4dCAqLworKHl5X2NfYnVmX3ApID0geXlfY3AgLT0gMTsKK1lZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB6Y29uZnRleHQgYWdhaW4gKi8KK1lZX1JVTEVfU0VUVVAKK3sKKwkJY3VycmVudF9maWxlLT5saW5lbm8rKzsKKwkJemNvbmZfZW5kaGVscCgpOworCQlyZXR1cm4gVF9IRUxQVEVYVDsKKwl9CisJWVlfQlJFQUsKK2Nhc2UgMzE6CisvKiBydWxlIDMxIGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKK3sKKwkJY3VycmVudF9maWxlLT5saW5lbm8rKzsKKwkJYXBwZW5kX3N0cmluZygiXG4iLCAxKTsKKwl9CisJWVlfQlJFQUsKK2Nhc2UgMzI6CitZWV9SVUxFX1NFVFVQCit7CisJCXdoaWxlICh6Y29uZmxlbmcpIHsKKwkJCWlmICgoemNvbmZ0ZXh0W3pjb25mbGVuZy0xXSAhPSAnICcpICYmICh6Y29uZnRleHRbemNvbmZsZW5nLTFdICE9ICdcdCcpKQorCQkJCWJyZWFrOworCQkJemNvbmZsZW5nLS07CisJCX0KKwkJYXBwZW5kX3N0cmluZyh6Y29uZnRleHQsIHpjb25mbGVuZyk7CisJCWlmICghZmlyc3RfdHMpCisJCQlmaXJzdF90cyA9IGxhc3RfdHM7CisJfQorCVlZX0JSRUFLCitjYXNlIFlZX1NUQVRFX0VPRihIRUxQKToKK3sKKwkJemNvbmZfZW5kaGVscCgpOworCQlyZXR1cm4gVF9IRUxQVEVYVDsKKwl9CisJWVlfQlJFQUsKKworY2FzZSBZWV9TVEFURV9FT0YoSU5JVElBTCk6CitjYXNlIFlZX1NUQVRFX0VPRihDT01NQU5EKToKK3sKKwlpZiAoY3VycmVudF9maWxlKSB7CisJCXpjb25mX2VuZGZpbGUoKTsKKwkJcmV0dXJuIFRfRU9MOworCX0KKwlmY2xvc2UoemNvbmZpbik7CisJeXl0ZXJtaW5hdGUoKTsKK30KKwlZWV9CUkVBSworY2FzZSAzMzoKK1lZX1JVTEVfU0VUVVAKK1lZX0ZBVEFMX0VSUk9SKCAiZmxleCBzY2FubmVyIGphbW1lZCIgKTsKKwlZWV9CUkVBSworCisJY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgorCQl7CisJCS8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCisJCWludCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0gKHl5dGV4dF9wdHIpKSAtIDE7CisKKwkJLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAqLworCQkqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsKKwkJWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAorCisJCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQorCQkJeworCQkJLyogV2UncmUgc2Nhbm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCisJCQkgKiBwb3NzaWJsZSB0aGF0IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgorCQkJICoganVzdCBwb2ludGVkIHpjb25maW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQKKwkJCSAqIHpjb25mbGV4KCkuICBJZiBzbywgdGhlbiB3ZSBoYXZlIHRvIGFzc3VyZQorCQkJICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZFUiBhbmQgb3VyCisJCQkgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gc28sIGJlY2F1c2UKKwkJCSAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIgdGhhbiBwb3NzaWJseSBhCisJCQkgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBuZXcgaW5wdXQgc291cmNlLgorCQkJICovCisJCQkoeXlfbl9jaGFycykgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGUgPSB6Y29uZmluOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKKwkJCX0KKworCQkvKiBOb3RlIHRoYXQgaGVyZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCisJCSAqIG9mIHRoZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCisJCSAqIGFscmVhZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKKwkJICogKHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCisJCSAqIGVuZC1vZi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0CisJCSAqIGluIGlucHV0KCkuCisJCSAqLworCQlpZiAoICh5eV9jX2J1Zl9wKSA8PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpXSApCisJCQl7IC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJCXl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKKworCQkJKHl5X2NfYnVmX3ApID0gKHl5dGV4dF9wdHIpICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKKworCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggICk7CisKKwkJCS8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAorCQkJICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKKwkJCSAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAorCQkJICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsCisJCQkgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKKwkJCSAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAorCQkJICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgorCQkJICovCisKKwkJCXl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICk7CisKKwkJCXl5X2JwID0gKHl5dGV4dF9wdHIpICsgWVlfTU9SRV9BREo7CisKKwkJCWlmICggeXlfbmV4dF9zdGF0ZSApCisJCQkJeworCQkJCS8qIENvbnN1bWUgdGhlIE5VTC4gKi8KKwkJCQl5eV9jcCA9ICsrKHl5X2NfYnVmX3ApOworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9uZXh0X3N0YXRlOworCQkJCWdvdG8geXlfbWF0Y2g7CisJCQkJfQorCisJCQllbHNlCisJCQkJeworCQkJCXl5X2NwID0gKHl5X2NfYnVmX3ApOworCQkJCWdvdG8geXlfZmluZF9hY3Rpb247CisJCQkJfQorCQkJfQorCisJCWVsc2Ugc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCAgKSApCisJCQl7CisJCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6CisJCQkJeworCQkJCSh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpID0gMDsKKworCQkJCWlmICggemNvbmZ3cmFwKCApICkKKwkJCQkJeworCQkJCQkvKiBOb3RlOiBiZWNhdXNlIHdlJ3ZlIHRha2VuIGNhcmUgaW4KKwkJCQkJICogeXlfZ2V0X25leHRfYnVmZmVyKCkgdG8gaGF2ZSBzZXQgdXAKKwkJCQkJICogemNvbmZ0ZXh0LCB3ZSBjYW4gbm93IHNldCB1cAorCQkJCQkgKiB5eV9jX2J1Zl9wIHNvIHRoYXQgaWYgc29tZSB0b3RhbAorCQkJCQkgKiBob3NlciAobGlrZSBmbGV4IGl0c2VsZikgd2FudHMgdG8KKwkJCQkJICogY2FsbCB0aGUgc2Nhbm5lciBhZnRlciB3ZSByZXR1cm4gdGhlCisJCQkJCSAqIFlZX05VTEwsIGl0J2xsIHN0aWxsIHdvcmsgLSBhbm90aGVyCisJCQkJCSAqIFlZX05VTEwgd2lsbCBnZXQgcmV0dXJuZWQuCisJCQkJCSAqLworCQkJCQkoeXlfY19idWZfcCkgPSAoeXl0ZXh0X3B0cikgKyBZWV9NT1JFX0FESjsKKworCQkJCQl5eV9hY3QgPSBZWV9TVEFURV9FT0YoWVlfU1RBUlQpOworCQkJCQlnb3RvIGRvX2FjdGlvbjsKKwkJCQkJfQorCisJCQkJZWxzZQorCQkJCQl7CisJCQkJCWlmICggISAoeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mKSApCisJCQkJCQlZWV9ORVdfRklMRTsKKwkJCQkJfQorCQkJCWJyZWFrOworCQkJCX0KKworCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJKHl5X2NfYnVmX3ApID0KKwkJCQkJKHl5dGV4dF9wdHIpICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKKworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoICApOworCisJCQkJeXlfY3AgPSAoeXlfY19idWZfcCk7CisJCQkJeXlfYnAgPSAoeXl0ZXh0X3B0cikgKyBZWV9NT1JFX0FESjsKKwkJCQlnb3RvIHl5X21hdGNoOworCisJCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKKwkJCQkoeXlfY19idWZfcCkgPQorCQkJCSZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycyldOworCisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggICk7CisKKwkJCQl5eV9jcCA9ICh5eV9jX2J1Zl9wKTsKKwkJCQl5eV9icCA9ICh5eXRleHRfcHRyKSArIFlZX01PUkVfQURKOworCQkJCWdvdG8geXlfZmluZF9hY3Rpb247CisJCQl9CisJCWJyZWFrOworCQl9CisKKwlkZWZhdWx0OgorCQlZWV9GQVRBTF9FUlJPUigKKwkJCSJmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3ItLW5vIGFjdGlvbiBmb3VuZCIgKTsKKwl9IC8qIGVuZCBvZiBhY3Rpb24gc3dpdGNoICovCisJCX0gLyogZW5kIG9mIHNjYW5uaW5nIG9uZSB0b2tlbiAqLworfSAvKiBlbmQgb2YgemNvbmZsZXggKi8KKworLyogeXlfZ2V0X25leHRfYnVmZmVyIC0gdHJ5IHRvIHJlYWQgaW4gYSBuZXcgYnVmZmVyCisgKgorICogUmV0dXJucyBhIGNvZGUgcmVwcmVzZW50aW5nIGFuIGFjdGlvbjoKKyAqCUVPQl9BQ1RfTEFTVF9NQVRDSCAtCisgKglFT0JfQUNUX0NPTlRJTlVFX1NDQU4gLSBjb250aW51ZSBzY2FubmluZyBmcm9tIGN1cnJlbnQgcG9zaXRpb24KKyAqCUVPQl9BQ1RfRU5EX09GX0ZJTEUgLSBlbmQgb2YgZmlsZQorICovCitzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAodm9pZCkKK3sKKyAgICAJcmVnaXN0ZXIgY2hhciAqZGVzdCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOworCXJlZ2lzdGVyIGNoYXIgKnNvdXJjZSA9ICh5eXRleHRfcHRyKTsKKwlyZWdpc3RlciBpbnQgbnVtYmVyX3RvX21vdmUsIGk7CisJaW50IHJldF92YWw7CisKKwlpZiAoICh5eV9jX2J1Zl9wKSA+ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycykgKyAxXSApCisJCVlZX0ZBVEFMX0VSUk9SKAorCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKKwkJeyAvKiBEb24ndCB0cnkgdG8gZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KKwkJaWYgKCAoeXlfY19idWZfcCkgLSAoeXl0ZXh0X3B0cikgLSBZWV9NT1JFX0FESiA9PSAxICkKKwkJCXsKKwkJCS8qIFdlIG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbworCQkJICogdHJlYXQgdGhpcyBhcyBhIGZpbmFsIEVPRi4KKwkJCSAqLworCQkJcmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJTEU7CisJCQl9CisKKwkJZWxzZQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJpb3IgdG8gdGhlIEVPQiwgZmlyc3QKKwkJCSAqIHByb2Nlc3MgaXQuCisJCQkgKi8KKwkJCXJldHVybiBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQl9CisJCX0KKworCS8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8KKworCS8qIEZpcnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICovCisJbnVtYmVyX3RvX21vdmUgPSAoaW50KSAoKHl5X2NfYnVmX3ApIC0gKHl5dGV4dF9wdHIpKSAtIDE7CisKKwlmb3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQorCQkqKGRlc3QrKykgPSAqKHNvdXJjZSsrKTsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCisJCS8qIGRvbid0IGRvIHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsCisJCSAqIGp1c3QgZm9yY2UgYW4gRU9GCisJCSAqLworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSAoeXlfbl9jaGFycykgPSAwOworCisJZWxzZQorCQl7CisJCQlpbnQgbnVtX3RvX3JlYWQgPQorCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKKworCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQorCQkJeyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCisKKwkJCS8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLworCQkJWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUjsKKworCQkJaW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0KKwkJCQkoaW50KSAoKHl5X2NfYnVmX3ApIC0gYi0+eXlfY2hfYnVmKTsKKworCQkJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKKwkJCQl7CisJCQkJaW50IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOworCisJCQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkKKwkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OworCQkJCWVsc2UKKwkJCQkJYi0+eXlfYnVmX3NpemUgKj0gMjsKKworCQkJCWItPnl5X2NoX2J1ZiA9IChjaGFyICopCisJCQkJCS8qIEluY2x1ZGUgcm9vbSBpbiBmb3IgMiBFT0IgY2hhcnMuICovCisJCQkJCXpjb25mcmVhbGxvYygodm9pZCAqKSBiLT55eV9jaF9idWYsYi0+eXlfYnVmX3NpemUgKyAyICApOworCQkJCX0KKwkJCWVsc2UKKwkJCQkvKiBDYW4ndCBncm93IGl0LCB3ZSBkb24ndCBvd24gaXQuICovCisJCQkJYi0+eXlfY2hfYnVmID0gMDsKKworCQkJaWYgKCAhIGItPnl5X2NoX2J1ZiApCisJCQkJWVlfRkFUQUxfRVJST1IoCisJCQkJImZhdGFsIGVycm9yIC0gc2Nhbm5lciBpbnB1dCBidWZmZXIgb3ZlcmZsb3ciICk7CisKKwkJCSh5eV9jX2J1Zl9wKSA9ICZiLT55eV9jaF9idWZbeXlfY19idWZfcF9vZmZzZXRdOworCisJCQludW1fdG9fcmVhZCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLQorCQkJCQkJbnVtYmVyX3RvX21vdmUgLSAxOworCisJCQl9CisKKwkJaWYgKCBudW1fdG9fcmVhZCA+IFlZX1JFQURfQlVGX1NJWkUgKQorCQkJbnVtX3RvX3JlYWQgPSBZWV9SRUFEX0JVRl9TSVpFOworCisJCS8qIFJlYWQgaW4gbW9yZSBkYXRhLiAqLworCQlZWV9JTlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZltudW1iZXJfdG9fbW92ZV0pLAorCQkJKHl5X25fY2hhcnMpLCAoc2l6ZV90KSBudW1fdG9fcmVhZCApOworCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9ICh5eV9uX2NoYXJzKTsKKwkJfQorCisJaWYgKCAoeXlfbl9jaGFycykgPT0gMCApCisJCXsKKwkJaWYgKCBudW1iZXJfdG9fbW92ZSA9PSBZWV9NT1JFX0FESiApCisJCQl7CisJCQlyZXRfdmFsID0gRU9CX0FDVF9FTkRfT0ZfRklMRTsKKwkJCXpjb25mcmVzdGFydCh6Y29uZmluICApOworCQkJfQorCisJCWVsc2UKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQorCQkJCVlZX0JVRkZFUl9FT0ZfUEVORElORzsKKwkJCX0KKwkJfQorCisJZWxzZQorCQlyZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOworCisJaWYgKCh5eV9zaXplX3QpICgoeXlfbl9jaGFycykgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7CisJCS8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCisJCXl5X3NpemVfdCBuZXdfc2l6ZSA9ICh5eV9uX2NoYXJzKSArIG51bWJlcl90b19tb3ZlICsgKCh5eV9uX2NoYXJzKSA+PiAxKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgPSAoY2hhciAqKSB6Y29uZnJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYsbmV3X3NpemUgICk7CisJCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9nZXRfbmV4dF9idWZmZXIoKSIgKTsKKwl9CisKKwkoeXlfbl9jaGFycykgKz0gbnVtYmVyX3RvX21vdmU7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycykgKyAxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKworCSh5eXRleHRfcHRyKSA9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlswXTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKiB5eV9nZXRfcHJldmlvdXNfc3RhdGUgLSBnZXQgdGhlIHN0YXRlIGp1c3QgYmVmb3JlIHRoZSBFT0IgY2hhciB3YXMgcmVhY2hlZCAqLworCisgICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh2b2lkKQoreworCXJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcDsKKyAgICAKKwl5eV9jdXJyZW50X3N0YXRlID0gKHl5X3N0YXJ0KTsKKworCWZvciAoIHl5X2NwID0gKHl5dGV4dF9wdHIpICsgWVlfTU9SRV9BREo7IHl5X2NwIDwgKHl5X2NfYnVmX3ApOyArK3l5X2NwICkKKwkJeworCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2N1cnJlbnRfc3RhdGVdWygqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEpXTsKKwkJfQorCisJcmV0dXJuIHl5X2N1cnJlbnRfc3RhdGU7Cit9CisKKy8qIHl5X3RyeV9OVUxfdHJhbnMgLSB0cnkgdG8gbWFrZSBhIHRyYW5zaXRpb24gb24gdGhlIE5VTCBjaGFyYWN0ZXIKKyAqCisgKiBzeW5vcHNpcworICoJbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsKKyAqLworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgICh5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGUgKQoreworCXJlZ2lzdGVyIGludCB5eV9pc19qYW07CisgICAgCisJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9jdXJyZW50X3N0YXRlXVsxXTsKKwl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA8PSAwKTsKKworCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKK30KKworICAgIHN0YXRpYyB2b2lkIHl5dW5wdXQgKGludCBjLCByZWdpc3RlciBjaGFyICogeXlfYnAgKQoreworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwOworICAgIAorICAgIHl5X2NwID0gKHl5X2NfYnVmX3ApOworCisJLyogdW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgemNvbmZ0ZXh0ICovCisJKnl5X2NwID0gKHl5X2hvbGRfY2hhcik7CisKKwlpZiAoIHl5X2NwIDwgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKyAyICkKKwkJeyAvKiBuZWVkIHRvIHNoaWZ0IHRoaW5ncyB1cCB0byBtYWtlIHJvb20gKi8KKwkJLyogKzIgZm9yIEVPQiBjaGFycy4gKi8KKwkJcmVnaXN0ZXIgaW50IG51bWJlcl90b19tb3ZlID0gKHl5X25fY2hhcnMpICsgMjsKKwkJcmVnaXN0ZXIgY2hhciAqZGVzdCA9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsKKwkJCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSArIDJdOworCQlyZWdpc3RlciBjaGFyICpzb3VyY2UgPQorCQkJCSZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZltudW1iZXJfdG9fbW92ZV07CisKKwkJd2hpbGUgKCBzb3VyY2UgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiApCisJCQkqLS1kZXN0ID0gKi0tc291cmNlOworCisJCXl5X2NwICs9IChpbnQpIChkZXN0IC0gc291cmNlKTsKKwkJeXlfYnAgKz0gKGludCkgKGRlc3QgLSBzb3VyY2UpOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPQorCQkJKHl5X25fY2hhcnMpID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZTsKKworCQlpZiAoIHl5X2NwIDwgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKyAyICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAiZmxleCBzY2FubmVyIHB1c2gtYmFjayBvdmVyZmxvdyIgKTsKKwkJfQorCisJKi0teXlfY3AgPSAoY2hhcikgYzsKKworCSh5eXRleHRfcHRyKSA9IHl5X2JwOworCSh5eV9ob2xkX2NoYXIpID0gKnl5X2NwOworCSh5eV9jX2J1Zl9wKSA9IHl5X2NwOworfQorCisjaWZuZGVmIFlZX05PX0lOUFVUCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBzdGF0aWMgaW50IHl5aW5wdXQgKHZvaWQpCisjZWxzZQorICAgIHN0YXRpYyBpbnQgaW5wdXQgICh2b2lkKQorI2VuZGlmCisKK3sKKwlpbnQgYzsKKyAgICAKKwkqKHl5X2NfYnVmX3ApID0gKHl5X2hvbGRfY2hhcik7CisKKwlpZiAoICooeXlfY19idWZfcCkgPT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkKKwkJeworCQkvKiB5eV9jX2J1Zl9wIG5vdyBwb2ludHMgdG8gdGhlIGNoYXJhY3RlciB3ZSB3YW50IHRvIHJldHVybi4KKwkJICogSWYgdGhpcyBvY2N1cnMgKmJlZm9yZSogdGhlIEVPQiBjaGFyYWN0ZXJzLCB0aGVuIGl0J3MgYQorCQkgKiB2YWxpZCBOVUw7IGlmIG5vdCwgdGhlbiB3ZSd2ZSBoaXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgorCQkgKi8KKwkJaWYgKCAoeXlfY19idWZfcCkgPCAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpXSApCisJCQkvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCisJCQkqKHl5X2NfYnVmX3ApID0gJ1wwJzsKKworCQllbHNlCisJCQl7IC8qIG5lZWQgbW9yZSBpbnB1dCAqLworCQkJaW50IG9mZnNldCA9ICh5eV9jX2J1Zl9wKSAtICh5eXRleHRfcHRyKTsKKwkJCSsrKHl5X2NfYnVmX3ApOworCisJCQlzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoICApICkKKwkJCQl7CisJCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6CisJCQkJCS8qIFRoaXMgaGFwcGVucyBiZWNhdXNlIHl5X2dfbl9iKCkKKwkJCQkJICogc2VlcyB0aGF0IHdlJ3ZlIGFjY3VtdWxhdGVkIGEKKwkJCQkJICogdG9rZW4gYW5kIGZsYWdzIHRoYXQgd2UgbmVlZCB0bworCQkJCQkgKiB0cnkgbWF0Y2hpbmcgdGhlIHRva2VuIGJlZm9yZQorCQkJCQkgKiBwcm9jZWVkaW5nLiAgQnV0IGZvciBpbnB1dCgpLAorCQkJCQkgKiB0aGVyZSdzIG5vIG1hdGNoaW5nIHRvIGNvbnNpZGVyLgorCQkJCQkgKiBTbyBjb252ZXJ0IHRoZSBFT0JfQUNUX0xBU1RfTUFUQ0gKKwkJCQkJICogdG8gRU9CX0FDVF9FTkRfT0ZfRklMRS4KKwkJCQkJICovCisKKwkJCQkJLyogUmVzZXQgYnVmZmVyIHN0YXR1cy4gKi8KKwkJCQkJemNvbmZyZXN0YXJ0KHpjb25maW4gKTsKKworCQkJCQkvKkZBTExUSFJPVUdIKi8KKworCQkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQkJeworCQkJCQlpZiAoIHpjb25md3JhcCggKSApCisJCQkJCQlyZXR1cm4gRU9GOworCisJCQkJCWlmICggISAoeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mKSApCisJCQkJCQlZWV9ORVdfRklMRTsKKyNpZmRlZiBfX2NwbHVzcGx1cworCQkJCQlyZXR1cm4geXlpbnB1dCgpOworI2Vsc2UKKwkJCQkJcmV0dXJuIGlucHV0KCk7CisjZW5kaWYKKwkJCQkJfQorCisJCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJCSh5eV9jX2J1Zl9wKSA9ICh5eXRleHRfcHRyKSArIG9mZnNldDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwljID0gKih1bnNpZ25lZCBjaGFyICopICh5eV9jX2J1Zl9wKTsJLyogY2FzdCBmb3IgOC1iaXQgY2hhcidzICovCisJKih5eV9jX2J1Zl9wKSA9ICdcMCc7CS8qIHByZXNlcnZlIHpjb25mdGV4dCAqLworCSh5eV9ob2xkX2NoYXIpID0gKisrKHl5X2NfYnVmX3ApOworCisJcmV0dXJuIGM7Cit9CisjZW5kaWYJLyogaWZuZGVmIFlZX05PX0lOUFVUICovCisKKy8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiAKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KKyAqLworICAgIHZvaWQgemNvbmZyZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgKQoreworICAgIAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApeworICAgICAgICB6Y29uZmVuc3VyZV9idWZmZXJfc3RhY2sgKCk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9CisgICAgICAgICAgICB6Y29uZl9jcmVhdGVfYnVmZmVyKHpjb25maW4sWVlfQlVGX1NJWkUgKTsKKwl9CisKKwl6Y29uZl9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICk7CisJemNvbmZfbG9hZF9idWZmZXJfc3RhdGUoICk7Cit9CisKKy8qKiBTd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBpbnB1dCBidWZmZXIuCisgKiAKKyAqLworICAgIHZvaWQgemNvbmZfc3dpdGNoX3RvX2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgbmV3X2J1ZmZlciApCit7CisgICAgCisJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5CisJICogd2l0aAorCSAqCQl6Y29uZnBvcF9idWZmZXJfc3RhdGUoKTsKKwkgKgkJemNvbmZwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKKyAgICAgKi8KKwl6Y29uZmVuc3VyZV9idWZmZXJfc3RhY2sgKCk7CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKKwkJcmV0dXJuOworCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLworCQkqKHl5X2NfYnVmX3ApID0gKHl5X2hvbGRfY2hhcik7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9ICh5eV9jX2J1Zl9wKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0gKHl5X25fY2hhcnMpOworCQl9CisKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOworCXpjb25mX2xvYWRfYnVmZmVyX3N0YXRlKCApOworCisJLyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdlIGRpZCB0aGlzIHN3aXRjaCBkdXJpbmcKKwkgKiBFT0YgKHpjb25md3JhcCgpKSBwcm9jZXNzaW5nLCBidXQgdGhlIG9ubHkgdGltZSB0aGlzIGZsYWcKKwkgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgemNvbmZ3cmFwKCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNhZmUKKwkgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlzIHNldCBpdC4KKwkgKi8KKwkoeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mKSA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHpjb25mX2xvYWRfYnVmZmVyX3N0YXRlICAodm9pZCkKK3sKKyAgICAJKHl5X25fY2hhcnMpID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCSh5eXRleHRfcHRyKSA9ICh5eV9jX2J1Zl9wKSA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsKKwl6Y29uZmluID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOworCSh5eV9ob2xkX2NoYXIpID0gKih5eV9jX2J1Zl9wKTsKK30KKworLyoqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBzdGF0ZS4KKyAqIEBwYXJhbSBmaWxlIEEgcmVhZGFibGUgc3RyZWFtLgorICogQHBhcmFtIHNpemUgVGhlIGNoYXJhY3RlciBidWZmZXIgc2l6ZSBpbiBieXRlcy4gV2hlbiBpbiBkb3VidCwgdXNlIEBjIFlZX0JVRl9TSVpFLgorICogCisgKiBAcmV0dXJuIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlLgorICovCisgICAgWVlfQlVGRkVSX1NUQVRFIHpjb25mX2NyZWF0ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50ICBzaXplICkKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKyAgICAKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgemNvbmZhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAgKTsKKwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHpjb25mX2NyZWF0ZV9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9zaXplID0gc2l6ZTsKKworCS8qIHl5X2NoX2J1ZiBoYXMgdG8gYmUgMiBjaGFyYWN0ZXJzIGxvbmdlciB0aGFuIHRoZSBzaXplIGdpdmVuIGJlY2F1c2UKKwkgKiB3ZSBuZWVkIHRvIHB1dCBpbiAyIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4KKwkgKi8KKwliLT55eV9jaF9idWYgPSAoY2hhciAqKSB6Y29uZmFsbG9jKGItPnl5X2J1Zl9zaXplICsgMiAgKTsKKwlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gemNvbmZfY3JlYXRlX2J1ZmZlcigpIiApOworCisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CisKKwl6Y29uZl9pbml0X2J1ZmZlcihiLGZpbGUgKTsKKworCXJldHVybiBiOworfQorCisvKiogRGVzdHJveSB0aGUgYnVmZmVyLgorICogQHBhcmFtIGIgYSBidWZmZXIgY3JlYXRlZCB3aXRoIHpjb25mX2NyZWF0ZV9idWZmZXIoKQorICogCisgKi8KKyAgICB2b2lkIHpjb25mX2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiApCit7CisgICAgCisJaWYgKCAhIGIgKQorCQlyZXR1cm47CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7CisKKwlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQorCQl6Y29uZmZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICApOworCisJemNvbmZmcmVlKCh2b2lkICopIGIgICk7Cit9CisKKy8qIEluaXRpYWxpemVzIG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZmZXIuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHNvbWV0aW1lcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgYnVmZmVyLAorICogc3VjaCBhcyBkdXJpbmcgYSB6Y29uZnJlc3RhcnQoKSBvciBhdCBFT0YuCisgKi8KKyAgICBzdGF0aWMgdm9pZCB6Y29uZl9pbml0X2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgYiwgRklMRSAqIGZpbGUgKQorCit7CisJaW50IG9lcnJubyA9IGVycm5vOworICAgIAorCXpjb25mX2ZsdXNoX2J1ZmZlcihiICk7CisKKwliLT55eV9pbnB1dF9maWxlID0gZmlsZTsKKwliLT55eV9maWxsX2J1ZmZlciA9IDE7CisKKyAgICAvKiBJZiBiIGlzIHRoZSBjdXJyZW50IGJ1ZmZlciwgdGhlbiB6Y29uZl9pbml0X2J1ZmZlciB3YXMgX3Byb2JhYmx5XworICAgICAqIGNhbGxlZCBmcm9tIHpjb25mcmVzdGFydCgpIG9yIHRocm91Z2ggeXlfZ2V0X25leHRfYnVmZmVyLgorICAgICAqIEluIHRoYXQgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byByZXNldCB0aGUgbGluZW5vIG9yIGNvbHVtbi4KKyAgICAgKi8KKyAgICBpZiAoYiAhPSBZWV9DVVJSRU5UX0JVRkZFUil7CisgICAgICAgIGItPnl5X2JzX2xpbmVubyA9IDE7CisgICAgICAgIGItPnl5X2JzX2NvbHVtbiA9IDA7CisgICAgfQorCisgICAgICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKKyAgICAKKwllcnJubyA9IG9lcnJubzsKK30KKworLyoqIERpc2NhcmQgYWxsIGJ1ZmZlcmVkIGNoYXJhY3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4sIFlZX0lOUFVUIHdpbGwgYmUgY2FsbGVkLgorICogQHBhcmFtIGIgdGhlIGJ1ZmZlciBzdGF0ZSB0byBiZSBmbHVzaGVkLCB1c3VhbGx5IEBjIFlZX0NVUlJFTlRfQlVGRkVSLgorICogCisgKi8KKyAgICB2b2lkIHpjb25mX2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICkKK3sKKyAgICAJaWYgKCAhIGIgKQorCQlyZXR1cm47CisKKwliLT55eV9uX2NoYXJzID0gMDsKKworCS8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuICBUaGUgZmlyc3QgY2F1c2VzCisJICogYSB0cmFuc2l0aW9uIHRvIHRoZSBlbmQtb2YtYnVmZmVyIHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMKKwkgKiBhIGphbSBpbiB0aGF0IHN0YXRlLgorCSAqLworCWItPnl5X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKwliLT55eV9jaF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwliLT55eV9idWZfcG9zID0gJmItPnl5X2NoX2J1ZlswXTsKKworCWItPnl5X2F0X2JvbCA9IDE7CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKQorCQl6Y29uZl9sb2FkX2J1ZmZlcl9zdGF0ZSggKTsKK30KKworLyoqIFB1c2hlcyB0aGUgbmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBUaGUgbmV3IHN0YXRlIGJlY29tZXMKKyAqICB0aGUgY3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIHRoZSBzdGFjaworICogIGlmIG5lY2Vzc2FyeS4KKyAqICBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IHN0YXRlLgorICogIAorICovCit2b2lkIHpjb25mcHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICkKK3sKKyAgICAJaWYgKG5ld19idWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJemNvbmZlbnN1cmVfYnVmZmVyX3N0YWNrKCk7CisKKwkvKiBUaGlzIGJsb2NrIGlzIGNvcGllZCBmcm9tIHpjb25mX3N3aXRjaF90b19idWZmZXIuICovCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLworCQkqKHl5X2NfYnVmX3ApID0gKHl5X2hvbGRfY2hhcik7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9ICh5eV9jX2J1Zl9wKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0gKHl5X25fY2hhcnMpOworCQl9CisKKwkvKiBPbmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8KKwlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpCisJCSh5eV9idWZmZXJfc3RhY2tfdG9wKSsrOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisKKwkvKiBjb3BpZWQgZnJvbSB6Y29uZl9zd2l0Y2hfdG9fYnVmZmVyLiAqLworCXpjb25mX2xvYWRfYnVmZmVyX3N0YXRlKCApOworCSh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpID0gMTsKK30KKworLyoqIFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuCisgKiAgVGhlIG5leHQgZWxlbWVudCBiZWNvbWVzIHRoZSBuZXcgdG9wLgorICogIAorICovCit2b2lkIHpjb25mcG9wX2J1ZmZlcl9zdGF0ZSAodm9pZCkKK3sKKyAgICAJaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikKKwkJcmV0dXJuOworCisJemNvbmZfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiApOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7CisJaWYgKCh5eV9idWZmZXJfc3RhY2tfdG9wKSA+IDApCisJCS0tKHl5X2J1ZmZlcl9zdGFja190b3ApOworCisJaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7CisJCXpjb25mX2xvYWRfYnVmZmVyX3N0YXRlKCApOworCQkoeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mKSA9IDE7CisJfQorfQorCisvKiBBbGxvY2F0ZXMgdGhlIHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0LgorICogIEd1YXJhbnRlZXMgc3BhY2UgZm9yIGF0IGxlYXN0IG9uZSBwdXNoLgorICovCitzdGF0aWMgdm9pZCB6Y29uZmVuc3VyZV9idWZmZXJfc3RhY2sgKHZvaWQpCit7CisJaW50IG51bV90b19hbGxvYzsKKyAgICAKKwlpZiAoISh5eV9idWZmZXJfc3RhY2spKSB7CisKKwkJLyogRmlyc3QgYWxsb2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1lbnRzLCBzaW5jZSB3ZSBkb24ndCBrbm93IGlmIHRoaXMKKwkJICogc2Nhbm5lciB3aWxsIGV2ZW4gbmVlZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0ZWFkIG9mIDEgdG8gYXZvaWQgYW4KKwkJICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQgY2FsbC4KKyAgICAgICAgICovCisJCW51bV90b19hbGxvYyA9IDE7CisJCSh5eV9idWZmZXJfc3RhY2spID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil6Y29uZmFsbG9jCisJCQkJCQkJCShudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSk7CisJCWlmICggISAoeXlfYnVmZmVyX3N0YWNrKSApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB6Y29uZmVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKKwkJCQkJCQkJICAKKwkJbWVtc2V0KCh5eV9idWZmZXJfc3RhY2spLCAwLCBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKKwkJCQkKKwkJKHl5X2J1ZmZlcl9zdGFja19tYXgpID0gbnVtX3RvX2FsbG9jOworCQkoeXlfYnVmZmVyX3N0YWNrX3RvcCkgPSAwOworCQlyZXR1cm47CisJfQorCisJaWYgKCh5eV9idWZmZXJfc3RhY2tfdG9wKSA+PSAoKHl5X2J1ZmZlcl9zdGFja19tYXgpKSAtIDEpeworCisJCS8qIEluY3JlYXNlIHRoZSBidWZmZXIgdG8gcHJlcGFyZSBmb3IgYSBwb3NzaWJsZSBwdXNoLiAqLworCQlpbnQgZ3Jvd19zaXplID0gOCAvKiBhcmJpdHJhcnkgZ3JvdyBzaXplICovOworCisJCW51bV90b19hbGxvYyA9ICh5eV9idWZmZXJfc3RhY2tfbWF4KSArIGdyb3dfc2l6ZTsKKwkJKHl5X2J1ZmZlcl9zdGFjaykgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXpjb25mcmVhbGxvYworCQkJCQkJCQkoKHl5X2J1ZmZlcl9zdGFjayksCisJCQkJCQkJCW51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKKwkJCQkJCQkJKTsKKwkJaWYgKCAhICh5eV9idWZmZXJfc3RhY2spICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHpjb25mZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCisJCS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCisJCW1lbXNldCgoeXlfYnVmZmVyX3N0YWNrKSArICh5eV9idWZmZXJfc3RhY2tfbWF4KSwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCSh5eV9idWZmZXJfc3RhY2tfbWF4KSA9IG51bV90b19hbGxvYzsKKwl9Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCisgKiBAcGFyYW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgorICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZmZXIKKyAqIAorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuIAorICovCitZWV9CVUZGRVJfU1RBVEUgemNvbmZfc2Nhbl9idWZmZXIgIChjaGFyICogYmFzZSwgeXlfc2l6ZV90ICBzaXplICkKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKyAgICAKKwlpZiAoIHNpemUgPCAyIHx8CisJICAgICBiYXNlW3NpemUtMl0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8CisJICAgICBiYXNlW3NpemUtMV0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkKKwkJLyogVGhleSBmb3Jnb3QgdG8gbGVhdmUgcm9vbSBmb3IgdGhlIEVPQidzLiAqLworCQlyZXR1cm4gMDsKKworCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSB6Y29uZmFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gemNvbmZfc2Nhbl9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9zaXplID0gc2l6ZSAtIDI7CS8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLworCWItPnl5X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOworCWItPnl5X2lzX291cl9idWZmZXIgPSAwOworCWItPnl5X2lucHV0X2ZpbGUgPSAwOworCWItPnl5X25fY2hhcnMgPSBiLT55eV9idWZfc2l6ZTsKKwliLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7CisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55eV9maWxsX2J1ZmZlciA9IDA7CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CisKKwl6Y29uZl9zd2l0Y2hfdG9fYnVmZmVyKGIgICk7CisKKwlyZXR1cm4gYjsKK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBhIHN0cmluZy4gVGhlIG5leHQgY2FsbCB0byB6Y29uZmxleCgpIHdpbGwKKyAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgc3RyLgorICogQHBhcmFtIHl5c3RyIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHNjYW4KKyAqIAorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgKiBAbm90ZSBJZiB5b3Ugd2FudCB0byBzY2FuIGJ5dGVzIHRoYXQgbWF5IGNvbnRhaW4gTlVMIHZhbHVlcywgdGhlbiB1c2UKKyAqICAgICAgIHpjb25mX3NjYW5fYnl0ZXMoKSBpbnN0ZWFkLgorICovCitZWV9CVUZGRVJfU1RBVEUgemNvbmZfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5c3RyICkKK3sKKyAgICAKKwlyZXR1cm4gemNvbmZfc2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICk7Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHpjb25mbGV4KCkgd2lsbAorICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBieXRlcy4KKyAqIEBwYXJhbSB5eWJ5dGVzIHRoZSBieXRlIGJ1ZmZlciB0byBzY2FuCisgKiBAcGFyYW0gX3l5Ynl0ZXNfbGVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgorICogCisgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KKyAqLworWVlfQlVGRkVSX1NUQVRFIHpjb25mX3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCBpbnQgIF95eWJ5dGVzX2xlbiApCit7CisJWVlfQlVGRkVSX1NUQVRFIGI7CisJY2hhciAqYnVmOworCXl5X3NpemVfdCBuOworCWludCBpOworICAgIAorCS8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVPQidzLiAqLworCW4gPSBfeXlieXRlc19sZW4gKyAyOworCWJ1ZiA9IChjaGFyICopIHpjb25mYWxsb2MobiAgKTsKKwlpZiAoICEgYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gemNvbmZfc2Nhbl9ieXRlcygpIiApOworCisJZm9yICggaSA9IDA7IGkgPCBfeXlieXRlc19sZW47ICsraSApCisJCWJ1ZltpXSA9IHl5Ynl0ZXNbaV07CisKKwlidWZbX3l5Ynl0ZXNfbGVuXSA9IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwliID0gemNvbmZfc2Nhbl9idWZmZXIoYnVmLG4gKTsKKwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1ZmZlciBpbiB6Y29uZl9zY2FuX2J5dGVzKCkiICk7CisKKwkvKiBJdCdzIG9rYXkgdG8gZ3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0CisJICogYXdheSB3aGVuIHdlJ3JlIGRvbmUuCisJICovCisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CisKKwlyZXR1cm4gYjsKK30KKworI2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKKyNkZWZpbmUgWVlfRVhJVF9GQUlMVVJFIDIKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyKiBtc2cgKQoreworICAgIAkodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOworCWV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOworfQorCisvKiBSZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KKworI3VuZGVmIHl5bGVzcworI2RlZmluZSB5eWxlc3MobikgXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHpjb25mdGV4dC4gKi8gXAorICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAorICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCXpjb25mdGV4dFt6Y29uZmxlbmddID0gKHl5X2hvbGRfY2hhcik7IFwKKwkJKHl5X2NfYnVmX3ApID0gemNvbmZ0ZXh0ICsgeXlsZXNzX21hY3JvX2FyZzsgXAorCQkoeXlfaG9sZF9jaGFyKSA9ICooeXlfY19idWZfcCk7IFwKKwkJKih5eV9jX2J1Zl9wKSA9ICdcMCc7IFwKKwkJemNvbmZsZW5nID0geXlsZXNzX21hY3JvX2FyZzsgXAorCQl9IFwKKwl3aGlsZSAoIDAgKQorCisvKiBBY2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3NldCBmdW5jdGlvbnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLworCisvKiogR2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgorICogCisgKi8KK2ludCB6Y29uZmdldF9saW5lbm8gICh2b2lkKQoreworICAgICAgICAKKyAgICByZXR1cm4gemNvbmZsaW5lbm87Cit9CisKKy8qKiBHZXQgdGhlIGlucHV0IHN0cmVhbS4KKyAqIAorICovCitGSUxFICp6Y29uZmdldF9pbiAgKHZvaWQpCit7CisgICAgICAgIHJldHVybiB6Y29uZmluOworfQorCisvKiogR2V0IHRoZSBvdXRwdXQgc3RyZWFtLgorICogCisgKi8KK0ZJTEUgKnpjb25mZ2V0X291dCAgKHZvaWQpCit7CisgICAgICAgIHJldHVybiB6Y29uZm91dDsKK30KKworLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRva2VuLgorICogCisgKi8KK2ludCB6Y29uZmdldF9sZW5nICAodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIHpjb25mbGVuZzsKK30KKworLyoqIEdldCB0aGUgY3VycmVudCB0b2tlbi4KKyAqIAorICovCisKK2NoYXIgKnpjb25mZ2V0X3RleHQgICh2b2lkKQoreworICAgICAgICByZXR1cm4gemNvbmZ0ZXh0OworfQorCisvKiogU2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgorICogQHBhcmFtIGxpbmVfbnVtYmVyCisgKiAKKyAqLwordm9pZCB6Y29uZnNldF9saW5lbm8gKGludCAgbGluZV9udW1iZXIgKQoreworICAgIAorICAgIHpjb25mbGluZW5vID0gbGluZV9udW1iZXI7Cit9CisKKy8qKiBTZXQgdGhlIGlucHV0IHN0cmVhbS4gVGhpcyBkb2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJyZW50CisgKiBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gaW5fc3RyIEEgcmVhZGFibGUgc3RyZWFtLgorICogCisgKiBAc2VlIHpjb25mX3N3aXRjaF90b19idWZmZXIKKyAqLwordm9pZCB6Y29uZnNldF9pbiAoRklMRSAqICBpbl9zdHIgKQoreworICAgICAgICB6Y29uZmluID0gaW5fc3RyIDsKK30KKwordm9pZCB6Y29uZnNldF9vdXQgKEZJTEUgKiAgb3V0X3N0ciApCit7CisgICAgICAgIHpjb25mb3V0ID0gb3V0X3N0ciA7Cit9CisKK2ludCB6Y29uZmdldF9kZWJ1ZyAgKHZvaWQpCit7CisgICAgICAgIHJldHVybiB6Y29uZl9mbGV4X2RlYnVnOworfQorCit2b2lkIHpjb25mc2V0X2RlYnVnIChpbnQgIGJkZWJ1ZyApCit7CisgICAgICAgIHpjb25mX2ZsZXhfZGVidWcgPSBiZGVidWcgOworfQorCitzdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAodm9pZCkKK3sKKyAgICAgICAgLyogSW5pdGlhbGl6YXRpb24gaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIuCisgICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB6Y29uZmxleF9kZXN0cm95KCksIHNvIGRvbid0IGFsbG9jYXRlIGhlcmUuCisgICAgICovCisKKyAgICAoeXlfYnVmZmVyX3N0YWNrKSA9IDA7CisgICAgKHl5X2J1ZmZlcl9zdGFja190b3ApID0gMDsKKyAgICAoeXlfYnVmZmVyX3N0YWNrX21heCkgPSAwOworICAgICh5eV9jX2J1Zl9wKSA9IChjaGFyICopIDA7CisgICAgKHl5X2luaXQpID0gMDsKKyAgICAoeXlfc3RhcnQpID0gMDsKKworLyogRGVmaW5lZCBpbiBtYWluLmMgKi8KKyNpZmRlZiBZWV9TVERJTklUCisgICAgemNvbmZpbiA9IHN0ZGluOworICAgIHpjb25mb3V0ID0gc3Rkb3V0OworI2Vsc2UKKyAgICB6Y29uZmluID0gKEZJTEUgKikgMDsKKyAgICB6Y29uZm91dCA9IChGSUxFICopIDA7CisjZW5kaWYKKworICAgIC8qIEZvciBmdXR1cmUgcmVmZXJlbmNlOiBTZXQgZXJybm8gb24gZXJyb3IsIHNpbmNlIHdlIGFyZSBjYWxsZWQgYnkKKyAgICAgKiB6Y29uZmxleF9pbml0KCkKKyAgICAgKi8KKyAgICByZXR1cm4gMDsKK30KKworLyogemNvbmZsZXhfZGVzdHJveSBpcyBmb3IgYm90aCByZWVudHJhbnQgYW5kIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMuICovCitpbnQgemNvbmZsZXhfZGVzdHJveSAgKHZvaWQpCit7CisgICAgCisgICAgLyogUG9wIHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLworCXdoaWxlKFlZX0NVUlJFTlRfQlVGRkVSKXsKKwkJemNvbmZfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAgKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKKwkJemNvbmZwb3BfYnVmZmVyX3N0YXRlKCk7CisJfQorCisJLyogRGVzdHJveSB0aGUgc3RhY2sgaXRzZWxmLiAqLworCXpjb25mZnJlZSgoeXlfYnVmZmVyX3N0YWNrKSApOworCSh5eV9idWZmZXJfc3RhY2spID0gTlVMTDsKKworICAgIC8qIFJlc2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBhIG5vbi1yZWVudHJhbnQgc2Nhbm5lciBzbyB0aGUgbmV4dCB0aW1lCisgICAgICogemNvbmZsZXgoKSBpcyBjYWxsZWQsIGluaXRpYWxpemF0aW9uIHdpbGwgb2NjdXIuICovCisgICAgeXlfaW5pdF9nbG9iYWxzKCApOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbnRlcm5hbCB1dGlsaXR5IHJvdXRpbmVzLgorICovCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICkKK3sKKwlyZWdpc3RlciBpbnQgaTsKKwlmb3IgKCBpID0gMDsgaSA8IG47ICsraSApCisJCXMxW2ldID0gczJbaV07Cit9CisjZW5kaWYKKworI2lmZGVmIFlZX05FRURfU1RSTEVOCitzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICkKK3sKKwlyZWdpc3RlciBpbnQgbjsKKwlmb3IgKCBuID0gMDsgc1tuXTsgKytuICkKKwkJOworCisJcmV0dXJuIG47Cit9CisjZW5kaWYKKwordm9pZCAqemNvbmZhbGxvYyAoeXlfc2l6ZV90ICBzaXplICkKK3sKKwlyZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXplICk7Cit9CisKK3ZvaWQgKnpjb25mcmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6ZSApCit7CisJLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90aAorCSAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKKwkgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCisJICogYmVjYXVzZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQorCSAqIGFueSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKKwkgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KKwkgKi8KKwlyZXR1cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7Cit9CisKK3ZvaWQgemNvbmZmcmVlICh2b2lkICogcHRyICkKK3sKKwlmcmVlKCAoY2hhciAqKSBwdHIgKTsJLyogc2VlIHpjb25mcmVhbGxvYygpIGZvciAoY2hhciAqKSBjYXN0ICovCit9CisKKyNkZWZpbmUgWVlUQUJMRVNfTkFNRSAieXl0YWJsZXMiCisKK3ZvaWQgemNvbmZfc3RhcnRoZWxwKHZvaWQpCit7CisJbmV3X3N0cmluZygpOworCWxhc3RfdHMgPSBmaXJzdF90cyA9IDA7CisJQkVHSU4oSEVMUCk7Cit9CisKK3N0YXRpYyB2b2lkIHpjb25mX2VuZGhlbHAodm9pZCkKK3sKKwl6Y29uZmx2YWwuc3RyaW5nID0gdGV4dDsKKwlCRUdJTihJTklUSUFMKTsKK30KKworLyoKKyAqIFRyeSB0byBvcGVuIHNwZWNpZmllZCBmaWxlIHdpdGggZm9sbG93aW5nIG5hbWVzOgorICogLi9uYW1lCisgKiAkKHNyY3RyZWUpL25hbWUKKyAqIFRoZSBsYXR0ZXIgaXMgdXNlZCB3aGVuIHNyY3RyZWUgaXMgc2VwYXJhdGUgZnJvbSBvYmp0cmVlCisgKiB3aGVuIGNvbXBpbGluZyB0aGUga2VybmVsLgorICogUmV0dXJuIE5VTEwgaWYgZmlsZSBpcyBub3QgZm91bmQuCisgKi8KK0ZJTEUgKnpjb25mX2ZvcGVuKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY2hhciAqZW52LCBmdWxsbmFtZVtQQVRIX01BWCsxXTsKKwlGSUxFICpmOworCisJZiA9IGZvcGVuKG5hbWUsICJyIik7CisJaWYgKCFmICYmIG5hbWUgIT0gTlVMTCAmJiBuYW1lWzBdICE9ICcvJykgeworCQllbnYgPSBnZXRlbnYoU1JDVFJFRSk7CisJCWlmIChlbnYpIHsKKwkJCXNwcmludGYoZnVsbG5hbWUsICIlcy8lcyIsIGVudiwgbmFtZSk7CisJCQlmID0gZm9wZW4oZnVsbG5hbWUsICJyIik7CisJCX0KKwl9CisJcmV0dXJuIGY7Cit9CisKK3ZvaWQgemNvbmZfaW5pdHNjYW4oY29uc3QgY2hhciAqbmFtZSkKK3sKKwl6Y29uZmluID0gemNvbmZfZm9wZW4obmFtZSk7CisJaWYgKCF6Y29uZmluKSB7CisJCXByaW50ZigiY2FuJ3QgZmluZCBmaWxlICVzXG4iLCBuYW1lKTsKKwkJZXhpdCgxKTsKKwl9CisKKwljdXJyZW50X2J1ZiA9IG1hbGxvYyhzaXplb2YoKmN1cnJlbnRfYnVmKSk7CisJbWVtc2V0KGN1cnJlbnRfYnVmLCAwLCBzaXplb2YoKmN1cnJlbnRfYnVmKSk7CisKKwljdXJyZW50X2ZpbGUgPSBmaWxlX2xvb2t1cChuYW1lKTsKKwljdXJyZW50X2ZpbGUtPmxpbmVubyA9IDE7Cit9CisKK3ZvaWQgemNvbmZfbmV4dGZpbGUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZmlsZSAqaXRlcjsKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGZpbGVfbG9va3VwKG5hbWUpOworCXN0cnVjdCBidWZmZXIgKmJ1ZiA9IG1hbGxvYyhzaXplb2YoKmJ1ZikpOworCW1lbXNldChidWYsIDAsIHNpemVvZigqYnVmKSk7CisKKwljdXJyZW50X2J1Zi0+c3RhdGUgPSBZWV9DVVJSRU5UX0JVRkZFUjsKKwl6Y29uZmluID0gemNvbmZfZm9wZW4oZmlsZS0+bmFtZSk7CisJaWYgKCF6Y29uZmluKSB7CisJCXByaW50ZigiJXM6JWQ6IGNhbid0IG9wZW4gZmlsZSBcIiVzXCJcbiIsCisJCSAgICB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCBmaWxlLT5uYW1lKTsKKwkJZXhpdCgxKTsKKwl9CisJemNvbmZfc3dpdGNoX3RvX2J1ZmZlcih6Y29uZl9jcmVhdGVfYnVmZmVyKHpjb25maW4sWVlfQlVGX1NJWkUpKTsKKwlidWYtPnBhcmVudCA9IGN1cnJlbnRfYnVmOworCWN1cnJlbnRfYnVmID0gYnVmOworCisJZm9yIChpdGVyID0gY3VycmVudF9maWxlLT5wYXJlbnQ7IGl0ZXI7IGl0ZXIgPSBpdGVyLT5wYXJlbnQgKSB7CisJCWlmICghc3RyY21wKGN1cnJlbnRfZmlsZS0+bmFtZSxpdGVyLT5uYW1lKSApIHsKKwkJCXByaW50ZigiJXM6JWQ6IHJlY3Vyc2l2ZSBpbmNsdXNpb24gZGV0ZWN0ZWQuICIKKwkJCSAgICAgICAiSW5jbHVzaW9uIHBhdGg6XG4gIGN1cnJlbnQgZmlsZSA6ICclcydcbiIsCisJCQkgICAgICAgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwKKwkJCSAgICAgICB6Y29uZl9jdXJuYW1lKCkpOworCQkJaXRlciA9IGN1cnJlbnRfZmlsZS0+cGFyZW50OworCQkJd2hpbGUgKGl0ZXIgJiYgXAorCQkJICAgICAgIHN0cmNtcChpdGVyLT5uYW1lLGN1cnJlbnRfZmlsZS0+bmFtZSkpIHsKKwkJCQlwcmludGYoIiAgaW5jbHVkZWQgZnJvbTogJyVzOiVkJ1xuIiwKKwkJCQkgICAgICAgaXRlci0+bmFtZSwgaXRlci0+bGluZW5vLTEpOworCQkJCWl0ZXIgPSBpdGVyLT5wYXJlbnQ7CisJCQl9CisJCQlpZiAoaXRlcikKKwkJCQlwcmludGYoIiAgaW5jbHVkZWQgZnJvbTogJyVzOiVkJ1xuIiwKKwkJCQkgICAgICAgaXRlci0+bmFtZSwgaXRlci0+bGluZW5vKzEpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwlmaWxlLT5saW5lbm8gPSAxOworCWZpbGUtPnBhcmVudCA9IGN1cnJlbnRfZmlsZTsKKwljdXJyZW50X2ZpbGUgPSBmaWxlOworfQorCitzdGF0aWMgdm9pZCB6Y29uZl9lbmRmaWxlKHZvaWQpCit7CisJc3RydWN0IGJ1ZmZlciAqcGFyZW50OworCisJY3VycmVudF9maWxlID0gY3VycmVudF9maWxlLT5wYXJlbnQ7CisKKwlwYXJlbnQgPSBjdXJyZW50X2J1Zi0+cGFyZW50OworCWlmIChwYXJlbnQpIHsKKwkJZmNsb3NlKHpjb25maW4pOworCQl6Y29uZl9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSKTsKKwkJemNvbmZfc3dpdGNoX3RvX2J1ZmZlcihwYXJlbnQtPnN0YXRlKTsKKwl9CisJZnJlZShjdXJyZW50X2J1Zik7CisJY3VycmVudF9idWYgPSBwYXJlbnQ7Cit9CisKK2ludCB6Y29uZl9saW5lbm8odm9pZCkKK3sKKwlyZXR1cm4gY3VycmVudF9wb3MubGluZW5vOworfQorCitjb25zdCBjaGFyICp6Y29uZl9jdXJuYW1lKHZvaWQpCit7CisJcmV0dXJuIGN1cnJlbnRfcG9zLmZpbGUgPyBjdXJyZW50X3Bvcy5maWxlLT5uYW1lIDogIjxub25lPiI7Cit9CisKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQva2NvbmZpZy9sa2MuaCBiL2xpYi9jdC1uZy0xLjEzLjQva2NvbmZpZy9sa2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWJmMGM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL2xrYy5oCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuCisgKi8KKworI2lmbmRlZiBMS0NfSAorI2RlZmluZSBMS0NfSAorCisjaW5jbHVkZSAiZXhwci5oIgorCisjaWZuZGVmIEtCVUlMRF9OT19OTFMKKyMgaW5jbHVkZSA8bGliaW50bC5oPgorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqZ2V0dGV4dChjb25zdCBjaGFyICp0eHQpIHsgcmV0dXJuIHR4dDsgfQorc3RhdGljIGlubGluZSB2b2lkIHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBiaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkaXIpIHt9CitzdGF0aWMgaW5saW5lIGNoYXIgKmJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KGNvbnN0IGNoYXIgKmRuLCBjaGFyICpjKSB7IHJldHVybiBjOyB9CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZkZWYgTEtDX0RJUkVDVF9MSU5LCisjZGVmaW5lIFAobmFtZSx0eXBlLGFyZykJZXh0ZXJuIHR5cGUgbmFtZSBhcmcKKyNlbHNlCisjaW5jbHVkZSAibGtjX2RlZnMuaCIKKyNkZWZpbmUgUChuYW1lLHR5cGUsYXJnKQlleHRlcm4gdHlwZSAoKm5hbWUgIyMgX3ApIGFyZworI2VuZGlmCisjaW5jbHVkZSAibGtjX3Byb3RvLmgiCisjdW5kZWYgUAorCisjZGVmaW5lIFNSQ1RSRUUgInNyY3RyZWUiCisKKyNpZm5kZWYgUEFDS0FHRQorI2RlZmluZSBQQUNLQUdFICJsaW51eCIKKyNlbmRpZgorCisjZGVmaW5lIExPQ0FMRURJUiAiL3Vzci9zaGFyZS9sb2NhbGUiCisKKyNkZWZpbmUgXyh0ZXh0KSBnZXR0ZXh0KHRleHQpCisjZGVmaW5lIE5fKHRleHQpICh0ZXh0KQorCisjaWZuZGVmIENPTkZJR18KKyNkZWZpbmUgQ09ORklHXyAiQ09ORklHXyIKKyNlbmRpZgorCisjZGVmaW5lIFRGX0NPTU1BTkQJMHgwMDAxCisjZGVmaW5lIFRGX1BBUkFNCTB4MDAwMgorI2RlZmluZSBURl9PUFRJT04JMHgwMDA0CisKK2VudW0gY29uZl9kZWZfbW9kZSB7CisJZGVmX2RlZmF1bHQsCisJZGVmX3llcywKKwlkZWZfbW9kLAorCWRlZl9ubywKKwlkZWZfcmFuZG9tCit9OworCisjZGVmaW5lIFRfT1BUX01PRFVMRVMJCTEKKyNkZWZpbmUgVF9PUFRfREVGQ09ORklHX0xJU1QJMgorI2RlZmluZSBUX09QVF9FTlYJCTMKKworc3RydWN0IGtjb25mX2lkIHsKKwlpbnQgbmFtZTsKKwlpbnQgdG9rZW47CisJdW5zaWduZWQgaW50IGZsYWdzOworCWVudW0gc3ltYm9sX3R5cGUgc3R5cGU7Cit9OworCisjaWZkZWYgWVlERUJVRworZXh0ZXJuIGludCB6Y29uZmRlYnVnOworI2VuZGlmCisKK2ludCB6Y29uZnBhcnNlKHZvaWQpOwordm9pZCB6Y29uZmR1bXAoRklMRSAqb3V0KTsKK3ZvaWQgemNvbmZfc3RhcnRoZWxwKHZvaWQpOworRklMRSAqemNvbmZfZm9wZW4oY29uc3QgY2hhciAqbmFtZSk7Cit2b2lkIHpjb25mX2luaXRzY2FuKGNvbnN0IGNoYXIgKm5hbWUpOwordm9pZCB6Y29uZl9uZXh0ZmlsZShjb25zdCBjaGFyICpuYW1lKTsKK2ludCB6Y29uZl9saW5lbm8odm9pZCk7Citjb25zdCBjaGFyICp6Y29uZl9jdXJuYW1lKHZvaWQpOworCisvKiBjb25mLmMgKi8KK3ZvaWQgeGZnZXRzKGNoYXIgKnN0ciwgaW50IHNpemUsIEZJTEUgKmluKTsKKworLyogY29uZmRhdGEuYyAqLworY29uc3QgY2hhciAqY29uZl9nZXRfY29uZmlnbmFtZSh2b2lkKTsKK2NvbnN0IGNoYXIgKmNvbmZfZ2V0X2F1dG9jb25maWdfbmFtZSh2b2lkKTsKK2NoYXIgKmNvbmZfZ2V0X2RlZmF1bHRfY29uZm5hbWUodm9pZCk7Cit2b2lkIHN5bV9zZXRfY2hhbmdlX2NvdW50KGludCBjb3VudCk7Cit2b2lkIHN5bV9hZGRfY2hhbmdlX2NvdW50KGludCBjb3VudCk7Cit2b2lkIGNvbmZfc2V0X2FsbF9uZXdfc3ltYm9scyhlbnVtIGNvbmZfZGVmX21vZGUgbW9kZSk7CisKKy8qIGNvbmZkYXRhLmMgYW5kIGV4cHIuYyAqLworc3RhdGljIGlubGluZSB2b2lkIHhmd3JpdGUoY29uc3Qgdm9pZCAqc3RyLCBzaXplX3QgbGVuLCBzaXplX3QgY291bnQsIEZJTEUgKm91dCkKK3sKKwlpZiAoZndyaXRlKHN0ciwgbGVuLCBjb3VudCwgb3V0KSA8IGNvdW50KQorCQlmcHJpbnRmKHN0ZGVyciwgIlxuRXJyb3IgaW4gd3JpdGluZyBvciBlbmQgb2YgZmlsZS5cbiIpOworfQorCisvKiBrY29uZmlnX2xvYWQuYyAqLwordm9pZCBrY29uZmlnX2xvYWQodm9pZCk7CisKKy8qIG1lbnUuYyAqLwordm9pZCBfbWVudV9pbml0KHZvaWQpOwordm9pZCBtZW51X3dhcm4oc3RydWN0IG1lbnUgKm1lbnUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK3N0cnVjdCBtZW51ICptZW51X2FkZF9tZW51KHZvaWQpOwordm9pZCBtZW51X2VuZF9tZW51KHZvaWQpOwordm9pZCBtZW51X2FkZF9lbnRyeShzdHJ1Y3Qgc3ltYm9sICpzeW0pOwordm9pZCBtZW51X2VuZF9lbnRyeSh2b2lkKTsKK3ZvaWQgbWVudV9hZGRfZGVwKHN0cnVjdCBleHByICpkZXApOwordm9pZCBtZW51X2FkZF92aXNpYmlsaXR5KHN0cnVjdCBleHByICpkZXApOworc3RydWN0IHByb3BlcnR5ICptZW51X2FkZF9wcm9wKGVudW0gcHJvcF90eXBlIHR5cGUsIGNoYXIgKnByb21wdCwgc3RydWN0IGV4cHIgKmV4cHIsIHN0cnVjdCBleHByICpkZXApOworc3RydWN0IHByb3BlcnR5ICptZW51X2FkZF9wcm9tcHQoZW51bSBwcm9wX3R5cGUgdHlwZSwgY2hhciAqcHJvbXB0LCBzdHJ1Y3QgZXhwciAqZGVwKTsKK3ZvaWQgbWVudV9hZGRfZXhwcihlbnVtIHByb3BfdHlwZSB0eXBlLCBzdHJ1Y3QgZXhwciAqZXhwciwgc3RydWN0IGV4cHIgKmRlcCk7Cit2b2lkIG1lbnVfYWRkX3N5bWJvbChlbnVtIHByb3BfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIHN0cnVjdCBleHByICpkZXApOwordm9pZCBtZW51X2FkZF9vcHRpb24oaW50IHRva2VuLCBjaGFyICphcmcpOwordm9pZCBtZW51X2ZpbmFsaXplKHN0cnVjdCBtZW51ICpwYXJlbnQpOwordm9pZCBtZW51X3NldF90eXBlKGludCB0eXBlKTsKKworLyogdXRpbC5jICovCitzdHJ1Y3QgZmlsZSAqZmlsZV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSk7CitpbnQgZmlsZV93cml0ZV9kZXAoY29uc3QgY2hhciAqbmFtZSk7CisKK3N0cnVjdCBnc3RyIHsKKwlzaXplX3QgbGVuOworCWNoYXIgICpzOworCS8qCisJKiB3aGVuIG1heF93aWR0aCBpcyBub3QgemVybyBsb25nIGxpbmVzIGluIHN0cmluZyBzIChpZiBhbnkpIGdldAorCSogd3JhcHBlZCBub3QgdG8gZXhjZWVkIHRoZSBtYXhfd2lkdGggdmFsdWUKKwkqLworCWludCBtYXhfd2lkdGg7Cit9Oworc3RydWN0IGdzdHIgc3RyX25ldyh2b2lkKTsKK3N0cnVjdCBnc3RyIHN0cl9hc3NpZ24oY29uc3QgY2hhciAqcyk7Cit2b2lkIHN0cl9mcmVlKHN0cnVjdCBnc3RyICpncyk7Cit2b2lkIHN0cl9hcHBlbmQoc3RydWN0IGdzdHIgKmdzLCBjb25zdCBjaGFyICpzKTsKK3ZvaWQgc3RyX3ByaW50ZihzdHJ1Y3QgZ3N0ciAqZ3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK2NvbnN0IGNoYXIgKnN0cl9nZXQoc3RydWN0IGdzdHIgKmdzKTsKKworLyogc3ltYm9sLmMgKi8KK2V4dGVybiBzdHJ1Y3QgZXhwciAqc3ltX2Vudl9saXN0OworCit2b2lkIHN5bV9pbml0KHZvaWQpOwordm9pZCBzeW1fY2xlYXJfYWxsX3ZhbGlkKHZvaWQpOwordm9pZCBzeW1fc2V0X2FsbF9jaGFuZ2VkKHZvaWQpOwordm9pZCBzeW1fc2V0X2NoYW5nZWQoc3RydWN0IHN5bWJvbCAqc3ltKTsKK3N0cnVjdCBzeW1ib2wgKnN5bV9jaG9pY2VfZGVmYXVsdChzdHJ1Y3Qgc3ltYm9sICpzeW0pOworY29uc3QgY2hhciAqc3ltX2dldF9zdHJpbmdfZGVmYXVsdChzdHJ1Y3Qgc3ltYm9sICpzeW0pOworc3RydWN0IHN5bWJvbCAqc3ltX2NoZWNrX2RlcHMoc3RydWN0IHN5bWJvbCAqc3ltKTsKK3N0cnVjdCBwcm9wZXJ0eSAqcHJvcF9hbGxvYyhlbnVtIHByb3BfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pOworc3RydWN0IHN5bWJvbCAqcHJvcF9nZXRfc3ltYm9sKHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCk7CitzdHJ1Y3QgcHJvcGVydHkgKnN5bV9nZXRfZW52X3Byb3Aoc3RydWN0IHN5bWJvbCAqc3ltKTsKKworc3RhdGljIGlubGluZSB0cmlzdGF0ZSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlyZXR1cm4gc3ltLT5jdXJyLnRyaTsKK30KKworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzeW1ib2wgKnN5bV9nZXRfY2hvaWNlX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlyZXR1cm4gKHN0cnVjdCBzeW1ib2wgKilzeW0tPmN1cnIudmFsOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc3ltX3NldF9jaG9pY2VfdmFsdWUoc3RydWN0IHN5bWJvbCAqY2gsIHN0cnVjdCBzeW1ib2wgKmNodmFsKQoreworCXJldHVybiBzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKGNodmFsLCB5ZXMpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc3ltX2lzX2Nob2ljZShzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJcmV0dXJuIHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hPSUNFID8gdHJ1ZSA6IGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc3ltX2lzX2Nob2ljZV92YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJcmV0dXJuIHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hPSUNFVkFMID8gdHJ1ZSA6IGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc3ltX2lzX29wdGlvbmFsKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlyZXR1cm4gc3ltLT5mbGFncyAmIFNZTUJPTF9PUFRJT05BTCA/IHRydWUgOiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBib29sIHN5bV9oYXNfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXJldHVybiBzeW0tPmZsYWdzICYgU1lNQk9MX0RFRl9VU0VSID8gdHJ1ZSA6IGZhbHNlOworfQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTEtDX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQva2NvbmZpZy9sa2NfcHJvdG8uaCBiL2xpYi9jdC1uZy0xLjEzLjQva2NvbmZpZy9sa2NfcHJvdG8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzM0MmZlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL2xrY19wcm90by5oCkBAIC0wLDAgKzEsNTMgQEAKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworLyogY29uZmRhdGEuYyAqLworUChjb25mX3BhcnNlLHZvaWQsKGNvbnN0IGNoYXIgKm5hbWUpKTsKK1AoY29uZl9yZWFkLGludCwoY29uc3QgY2hhciAqbmFtZSkpOworUChjb25mX3JlYWRfc2ltcGxlLGludCwoY29uc3QgY2hhciAqbmFtZSwgaW50KSk7CitQKGNvbmZfd3JpdGVfZGVmY29uZmlnLGludCwoY29uc3QgY2hhciAqbmFtZSkpOworUChjb25mX3dyaXRlLGludCwoY29uc3QgY2hhciAqbmFtZSkpOworUChjb25mX3dyaXRlX2F1dG9jb25mLGludCwodm9pZCkpOworUChjb25mX2dldF9jaGFuZ2VkLGJvb2wsKHZvaWQpKTsKK1AoY29uZl9zZXRfY2hhbmdlZF9jYWxsYmFjaywgdm9pZCwodm9pZCAoKmZuKSh2b2lkKSkpOworUChjb25mX3NldF9tZXNzYWdlX2NhbGxiYWNrLCB2b2lkLCh2b2lkICgqZm4pKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkpKTsKKworLyogbWVudS5jICovCitQKHJvb3RtZW51LHN0cnVjdCBtZW51LCk7CisKK1AobWVudV9pc192aXNpYmxlLCBib29sLCAoc3RydWN0IG1lbnUgKm1lbnUpKTsKK1AobWVudV9oYXNfcHJvbXB0LCBib29sLCAoc3RydWN0IG1lbnUgKm1lbnUpKTsKK1AobWVudV9nZXRfcHJvbXB0LGNvbnN0IGNoYXIgKiwoc3RydWN0IG1lbnUgKm1lbnUpKTsKK1AobWVudV9nZXRfcm9vdF9tZW51LHN0cnVjdCBtZW51ICosKHN0cnVjdCBtZW51ICptZW51KSk7CitQKG1lbnVfZ2V0X3BhcmVudF9tZW51LHN0cnVjdCBtZW51ICosKHN0cnVjdCBtZW51ICptZW51KSk7CitQKG1lbnVfaGFzX2hlbHAsYm9vbCwoc3RydWN0IG1lbnUgKm1lbnUpKTsKK1AobWVudV9nZXRfaGVscCxjb25zdCBjaGFyICosKHN0cnVjdCBtZW51ICptZW51KSk7CitQKGdldF9zeW1ib2xfc3RyLCB2b2lkLCAoc3RydWN0IGdzdHIgKnIsIHN0cnVjdCBzeW1ib2wgKnN5bSkpOworUChnZXRfcmVsYXRpb25zX3N0ciwgc3RydWN0IGdzdHIsIChzdHJ1Y3Qgc3ltYm9sICoqc3ltX2FycikpOworUChtZW51X2dldF9leHRfaGVscCx2b2lkLChzdHJ1Y3QgbWVudSAqbWVudSwgc3RydWN0IGdzdHIgKmhlbHApKTsKKworLyogc3ltYm9sLmMgKi8KK1Aoc3ltYm9sX2hhc2gsc3RydWN0IHN5bWJvbCAqLFtTWU1CT0xfSEFTSFNJWkVdKTsKKworUChzeW1fbG9va3VwLHN0cnVjdCBzeW1ib2wgKiwoY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzKSk7CitQKHN5bV9maW5kLHN0cnVjdCBzeW1ib2wgKiwoY29uc3QgY2hhciAqbmFtZSkpOworUChzeW1fZXhwYW5kX3N0cmluZ192YWx1ZSxjb25zdCBjaGFyICosKGNvbnN0IGNoYXIgKmluKSk7CitQKHN5bV9yZV9zZWFyY2gsc3RydWN0IHN5bWJvbCAqKiwoY29uc3QgY2hhciAqcGF0dGVybikpOworUChzeW1fdHlwZV9uYW1lLGNvbnN0IGNoYXIgKiwoZW51bSBzeW1ib2xfdHlwZSB0eXBlKSk7CitQKHN5bV9jYWxjX3ZhbHVlLHZvaWQsKHN0cnVjdCBzeW1ib2wgKnN5bSkpOworUChzeW1fZ2V0X3R5cGUsZW51bSBzeW1ib2xfdHlwZSwoc3RydWN0IHN5bWJvbCAqc3ltKSk7CitQKHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2UsYm9vbCwoc3RydWN0IHN5bWJvbCAqc3ltLHRyaXN0YXRlIHRyaSkpOworUChzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlLGJvb2wsKHN0cnVjdCBzeW1ib2wgKnN5bSx0cmlzdGF0ZSB0cmkpKTsKK1Aoc3ltX3RvZ2dsZV90cmlzdGF0ZV92YWx1ZSx0cmlzdGF0ZSwoc3RydWN0IHN5bWJvbCAqc3ltKSk7CitQKHN5bV9zdHJpbmdfdmFsaWQsYm9vbCwoc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpuZXd2YWwpKTsKK1Aoc3ltX3N0cmluZ193aXRoaW5fcmFuZ2UsYm9vbCwoc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpzdHIpKTsKK1Aoc3ltX3NldF9zdHJpbmdfdmFsdWUsYm9vbCwoc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpuZXd2YWwpKTsKK1Aoc3ltX2lzX2NoYW5nYWJsZSxib29sLChzdHJ1Y3Qgc3ltYm9sICpzeW0pKTsKK1Aoc3ltX2dldF9jaG9pY2VfcHJvcCxzdHJ1Y3QgcHJvcGVydHkgKiwoc3RydWN0IHN5bWJvbCAqc3ltKSk7CitQKHN5bV9nZXRfZGVmYXVsdF9wcm9wLHN0cnVjdCBwcm9wZXJ0eSAqLChzdHJ1Y3Qgc3ltYm9sICpzeW0pKTsKK1Aoc3ltX2dldF9zdHJpbmdfdmFsdWUsY29uc3QgY2hhciAqLChzdHJ1Y3Qgc3ltYm9sICpzeW0pKTsKKworUChwcm9wX2dldF90eXBlX25hbWUsY29uc3QgY2hhciAqLChlbnVtIHByb3BfdHlwZSB0eXBlKSk7CisKKy8qIGV4cHIuYyAqLworUChleHByX2NvbXBhcmVfdHlwZSxpbnQsKGVudW0gZXhwcl90eXBlIHQxLCBlbnVtIGV4cHJfdHlwZSB0MikpOworUChleHByX3ByaW50LHZvaWQsKHN0cnVjdCBleHByICplLCB2b2lkICgqZm4pKHZvaWQgKiwgc3RydWN0IHN5bWJvbCAqLCBjb25zdCBjaGFyICopLCB2b2lkICpkYXRhLCBpbnQgcHJldnRva2VuKSk7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2tjb25maWcvbHhkaWFsb2cvQklHLkZBVC5XQVJOSU5HIGIvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL2x4ZGlhbG9nL0JJRy5GQVQuV0FSTklORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODk5OWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL2x4ZGlhbG9nL0JJRy5GQVQuV0FSTklORwpAQCAtMCwwICsxLDQgQEAKK1RoaXMgaXMgTk9UIHRoZSBvZmZpY2lhbCB2ZXJzaW9uIG9mIGRpYWxvZy4gIFRoaXMgdmVyc2lvbiBoYXMgYmVlbgorc2lnbmlmaWNhbnRseSBtb2RpZmllZCBmcm9tIHRoZSBvcmlnaW5hbC4gIEl0IGlzIGZvciB1c2UgYnkgdGhlIExpbnV4CitrZXJuZWwgY29uZmlndXJhdGlvbiBzY3JpcHQuICBQbGVhc2UgZG8gbm90IGJvdGhlciBTYXZpbyBMYW0gd2l0aCAKK3F1ZXN0aW9ucyBhYm91dCB0aGlzIHByb2dyYW0uCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2tjb25maWcvbHhkaWFsb2cvY2hlY2stbHhkaWFsb2cuc2ggYi9saWIvY3QtbmctMS4xMy40L2tjb25maWcvbHhkaWFsb2cvY2hlY2stbHhkaWFsb2cuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJjYzNhOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQva2NvbmZpZy9seGRpYWxvZy9jaGVjay1seGRpYWxvZy5zaApAQCAtMCwwICsxLDg0IEBACisjIS9iaW4vc2gKKyMgQ2hlY2sgbmN1cnNlcyBjb21wYXRpYmlsaXR5CisKKyMgV2hhdCBsaWJyYXJ5IHRvIGxpbmsKK2xkZmxhZ3MoKQoreworCWZvciBleHQgaW4gc28gYSBkeWxpYiA7IGRvCisJCWZvciBsaWIgaW4gbmN1cnNlc3cgbmN1cnNlcyBjdXJzZXMgOyBkbworCQkJJGNjIC1wcmludC1maWxlLW5hbWU9bGliJHtsaWJ9LiR7ZXh0fSB8IGdyZXAgLXEgLworCQkJaWYgWyAkPyAtZXEgMCBdOyB0aGVuCisJCQkJZWNobyAiLWwke2xpYn0iCisJCQkJZXhpdAorCQkJZmkKKwkJZG9uZQorCWRvbmUKKwlleGl0IDEKK30KKworIyBXaGVyZSBpcyBuY3Vyc2VzLmg/CitjY2ZsYWdzKCkKK3sKKwlpZiBbIC1mIC91c3IvaW5jbHVkZS9uY3Vyc2VzL25jdXJzZXMuaCBdOyB0aGVuCisJCWVjaG8gJy1JL3Vzci9pbmNsdWRlL25jdXJzZXMgLURDVVJTRVNfTE9DPSI8bmN1cnNlcy5oPiInCisJZWxpZiBbIC1mIC91c3IvaW5jbHVkZS9uY3Vyc2VzL2N1cnNlcy5oIF07IHRoZW4KKwkJZWNobyAnLUkvdXNyL2luY2x1ZGUvbmN1cnNlcyAtRENVUlNFU19MT0M9IjxuY3Vyc2VzL2N1cnNlcy5oPiInCisJZWxpZiBbIC1mIC91c3IvaW5jbHVkZS9uY3Vyc2Vzdy9jdXJzZXMuaCBdOyB0aGVuCisJCWVjaG8gJy1JL3Vzci9pbmNsdWRlL25jdXJzZXN3IC1EQ1VSU0VTX0xPQz0iPG5jdXJzZXN3L2N1cnNlcy5oPiInCisJZWxpZiBbIC1mIC91c3IvaW5jbHVkZS9uY3Vyc2VzLmggXTsgdGhlbgorCQllY2hvICctRENVUlNFU19MT0M9IjxuY3Vyc2VzLmg+IicKKwllbHNlCisJCWVjaG8gJy1EQ1VSU0VTX0xPQz0iPGN1cnNlcy5oPiInCisJZmkKK30KKworIyBUZW1wIGZpbGUsIHRyeSB0byBjbGVhbiB1cCBhZnRlciB1cwordG1wPS5seGRpYWxvZy50bXAKK3RyYXAgInJtIC1mICR0bXAiIDAgMSAyIDMgMTUKKworIyBDaGVjayBpZiB3ZSBjYW4gbGluayB0byBuY3Vyc2VzCitjaGVjaygpIHsKKyAgICAgICAgJGNjIC14YyAtIC1vICR0bXAgMj4vZGV2L251bGwgPDwnRU9GJworI2luY2x1ZGUgQ1VSU0VTX0xPQworbWFpbigpIHt9CitFT0YKKwlpZiBbICQ/ICE9IDAgXTsgdGhlbgorCSAgICBlY2hvICIgKioqIFVuYWJsZSB0byBmaW5kIHRoZSBuY3Vyc2VzIGxpYnJhcmllcyBvciB0aGUiICAgICAgIDE+JjIKKwkgICAgZWNobyAiICoqKiByZXF1aXJlZCBoZWFkZXIgZmlsZXMuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxPiYyCisJICAgIGVjaG8gIiAqKiogJ21ha2UgbWVudWNvbmZpZycgcmVxdWlyZXMgdGhlIG5jdXJzZXMgbGlicmFyaWVzLiIgMT4mMgorCSAgICBlY2hvICIgKioqICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE+JjIKKwkgICAgZWNobyAiICoqKiBJbnN0YWxsIG5jdXJzZXMgKG5jdXJzZXMtZGV2ZWwpIGFuZCB0cnkgYWdhaW4uIiAgICAxPiYyCisJICAgIGVjaG8gIiAqKiogIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMT4mMgorCSAgICBleGl0IDEKKwlmaQorfQorCit1c2FnZSgpIHsKKwlwcmludGYgIlVzYWdlOiAkMCBbLWNoZWNrIGNvbXBpbGVyIG9wdGlvbnN8LWNjZmxhZ3N8LWxkZmxhZ3MgY29tcGlsZXIgb3B0aW9uc11cbiIKK30KKworaWYgWyAkIyAtZXEgMCBdOyB0aGVuCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisKK2NjPSIiCitjYXNlICIkMSIgaW4KKwkiLWNoZWNrIikKKwkJc2hpZnQKKwkJY2M9IiRAIgorCQljaGVjaworCQk7OworCSItY2NmbGFncyIpCisJCWNjZmxhZ3MKKwkJOzsKKwkiLWxkZmxhZ3MiKQorCQlzaGlmdAorCQljYz0iJEAiCisJCWxkZmxhZ3MKKwkJOzsKKwkiKiIpCisJCXVzYWdlCisJCWV4aXQgMQorCQk7OworZXNhYwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrbGlzdC5jIGIvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrbGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZWI4MGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2tjb25maWcvbHhkaWFsb2cvY2hlY2tsaXN0LmMKQEAgLTAsMCArMSwzMzIgQEAKKy8qCisgKiAgY2hlY2tsaXN0LmMgLS0gaW1wbGVtZW50cyB0aGUgY2hlY2tsaXN0IGJveAorICoKKyAqICBPUklHSU5BTCBBVVRIT1I6IFNhdmlvIExhbSAobGFtODM2QGNzLmN1aGsuaGspCisgKiAgICAgU3R1YXJ0IEhlcmJlcnQgLSBTLkhlcmJlcnRAc2hlZmZpZWxkLmFjLnVrOiByYWRpb2xpc3QgZXh0ZW5zaW9uCisgKiAgICAgQWxlc3NhbmRybyBSdWJpbmkgLSBydWJpbmlAaXB2dmlzLnVuaXB2Lml0OiBtZXJnZWQgdGhlIHR3bworICogIE1PRElGSUVEIEZPUiBMSU5VWCBLRVJORUwgQ09ORklHIEJZOiBXaWxsaWFtIFJvYWRjYXAgKHJvYWRjYXBAY2Z3LmNvbSkKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqICBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJkaWFsb2cuaCIKKworc3RhdGljIGludCBsaXN0X3dpZHRoLCBjaGVja194LCBpdGVtX3g7CisKKy8qCisgKiBQcmludCBsaXN0IGl0ZW0KKyAqLworc3RhdGljIHZvaWQgcHJpbnRfaXRlbShXSU5ET1cgKiB3aW4sIGludCBjaG9pY2UsIGludCBzZWxlY3RlZCkKK3sKKwlpbnQgaTsKKwljaGFyICpsaXN0X2l0ZW0gPSBtYWxsb2MobGlzdF93aWR0aCArIDEpOworCisJc3RybmNweShsaXN0X2l0ZW0sIGl0ZW1fc3RyKCksIGxpc3Rfd2lkdGggLSBpdGVtX3gpOworCWxpc3RfaXRlbVtsaXN0X3dpZHRoIC0gaXRlbV94XSA9ICdcMCc7CisKKwkvKiBDbGVhciAncmVzaWR1ZScgb2YgbGFzdCBpdGVtICovCisJd2F0dHJzZXQod2luLCBkbGcubWVudWJveC5hdHIpOworCXdtb3ZlKHdpbiwgY2hvaWNlLCAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdF93aWR0aDsgaSsrKQorCQl3YWRkY2god2luLCAnICcpOworCisJd21vdmUod2luLCBjaG9pY2UsIGNoZWNrX3gpOworCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcuY2hlY2tfc2VsZWN0ZWQuYXRyCisJCSA6IGRsZy5jaGVjay5hdHIpOworCWlmICghaXRlbV9pc190YWcoJzonKSkKKwkJd3ByaW50dyh3aW4sICIoJWMpIiwgaXRlbV9pc190YWcoJ1gnKSA/ICdYJyA6ICcgJyk7CisKKwl3YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gZGxnLnRhZ19zZWxlY3RlZC5hdHIgOiBkbGcudGFnLmF0cik7CisJbXZ3YWRkY2god2luLCBjaG9pY2UsIGl0ZW1feCwgbGlzdF9pdGVtWzBdKTsKKwl3YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gZGxnLml0ZW1fc2VsZWN0ZWQuYXRyIDogZGxnLml0ZW0uYXRyKTsKKwl3YWRkc3RyKHdpbiwgbGlzdF9pdGVtICsgMSk7CisJaWYgKHNlbGVjdGVkKSB7CisJCXdtb3ZlKHdpbiwgY2hvaWNlLCBjaGVja194ICsgMSk7CisJCXdyZWZyZXNoKHdpbik7CisJfQorCWZyZWUobGlzdF9pdGVtKTsKK30KKworLyoKKyAqIFByaW50IHRoZSBzY3JvbGwgaW5kaWNhdG9ycy4KKyAqLworc3RhdGljIHZvaWQgcHJpbnRfYXJyb3dzKFdJTkRPVyAqIHdpbiwgaW50IGNob2ljZSwgaW50IGl0ZW1fbm8sIGludCBzY3JvbGwsCisJICAgICBpbnQgeSwgaW50IHgsIGludCBoZWlnaHQpCit7CisJd21vdmUod2luLCB5LCB4KTsKKworCWlmIChzY3JvbGwgPiAwKSB7CisJCXdhdHRyc2V0KHdpbiwgZGxnLnVhcnJvdy5hdHIpOworCQl3YWRkY2god2luLCBBQ1NfVUFSUk9XKTsKKwkJd2FkZHN0cih3aW4sICIoLSkiKTsKKwl9IGVsc2UgeworCQl3YXR0cnNldCh3aW4sIGRsZy5tZW51Ym94LmF0cik7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJfQorCisJeSA9IHkgKyBoZWlnaHQgKyAxOworCXdtb3ZlKHdpbiwgeSwgeCk7CisKKwlpZiAoKGhlaWdodCA8IGl0ZW1fbm8pICYmIChzY3JvbGwgKyBjaG9pY2UgPCBpdGVtX25vIC0gMSkpIHsKKwkJd2F0dHJzZXQod2luLCBkbGcuZGFycm93LmF0cik7CisJCXdhZGRjaCh3aW4sIEFDU19EQVJST1cpOworCQl3YWRkc3RyKHdpbiwgIigrKSIpOworCX0gZWxzZSB7CisJCXdhdHRyc2V0KHdpbiwgZGxnLm1lbnVib3hfYm9yZGVyLmF0cik7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJfQorfQorCisvKgorICogIERpc3BsYXkgdGhlIHRlcm1pbmF0aW9uIGJ1dHRvbnMKKyAqLworc3RhdGljIHZvaWQgcHJpbnRfYnV0dG9ucyhXSU5ET1cgKiBkaWFsb2csIGludCBoZWlnaHQsIGludCB3aWR0aCwgaW50IHNlbGVjdGVkKQoreworCWludCB4ID0gd2lkdGggLyAyIC0gMTE7CisJaW50IHkgPSBoZWlnaHQgLSAyOworCisJcHJpbnRfYnV0dG9uKGRpYWxvZywgZ2V0dGV4dCgiU2VsZWN0IiksIHksIHgsIHNlbGVjdGVkID09IDApOworCXByaW50X2J1dHRvbihkaWFsb2csIGdldHRleHQoIiBIZWxwICIpLCB5LCB4ICsgMTQsIHNlbGVjdGVkID09IDEpOworCisJd21vdmUoZGlhbG9nLCB5LCB4ICsgMSArIDE0ICogc2VsZWN0ZWQpOworCXdyZWZyZXNoKGRpYWxvZyk7Cit9CisKKy8qCisgKiBEaXNwbGF5IGEgZGlhbG9nIGJveCB3aXRoIGEgbGlzdCBvZiBvcHRpb25zIHRoYXQgY2FuIGJlIHR1cm5lZCBvbiBvciBvZmYKKyAqIGluIHRoZSBzdHlsZSBvZiByYWRpb2xpc3QgKG9ubHkgb25lIG9wdGlvbiB0dXJuZWQgb24gYXQgYSB0aW1lKS4KKyAqLworaW50IGRpYWxvZ19jaGVja2xpc3QoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGhlaWdodCwKKwkJICAgICBpbnQgd2lkdGgsIGludCBsaXN0X2hlaWdodCkKK3sKKwlpbnQgaSwgeCwgeSwgYm94X3gsIGJveF95OworCWludCBrZXkgPSAwLCBidXR0b24gPSAwLCBjaG9pY2UgPSAwLCBzY3JvbGwgPSAwLCBtYXhfY2hvaWNlOworCVdJTkRPVyAqZGlhbG9nLCAqbGlzdDsKKworCS8qIHdoaWNoIGl0ZW0gdG8gaGlnaGxpZ2h0ICovCisJaXRlbV9mb3JlYWNoKCkgeworCQlpZiAoaXRlbV9pc190YWcoJ1gnKSkKKwkJCWNob2ljZSA9IGl0ZW1fbigpOworCQlpZiAoaXRlbV9pc19zZWxlY3RlZCgpKSB7CisJCQljaG9pY2UgPSBpdGVtX24oKTsKKwkJCWJyZWFrOworCQl9CisJfQorCitkb19yZXNpemU6CisJaWYgKGdldG1heHkoc3Rkc2NyKSA8IChoZWlnaHQgKyA2KSkKKwkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01BTEw7CisJaWYgKGdldG1heHgoc3Rkc2NyKSA8ICh3aWR0aCArIDYpKQorCQlyZXR1cm4gLUVSUkRJU1BMQVlUT09TTUFMTDsKKworCW1heF9jaG9pY2UgPSBNSU4obGlzdF9oZWlnaHQsIGl0ZW1fY291bnQoKSk7CisKKwkvKiBjZW50ZXIgZGlhbG9nIGJveCBvbiBzY3JlZW4gKi8KKwl4ID0gKENPTFMgLSB3aWR0aCkgLyAyOworCXkgPSAoTElORVMgLSBoZWlnaHQpIC8gMjsKKworCWRyYXdfc2hhZG93KHN0ZHNjciwgeSwgeCwgaGVpZ2h0LCB3aWR0aCk7CisKKwlkaWFsb2cgPSBuZXd3aW4oaGVpZ2h0LCB3aWR0aCwgeSwgeCk7CisJa2V5cGFkKGRpYWxvZywgVFJVRSk7CisKKwlkcmF3X2JveChkaWFsb2csIDAsIDAsIGhlaWdodCwgd2lkdGgsCisJCSBkbGcuZGlhbG9nLmF0ciwgZGxnLmJvcmRlci5hdHIpOworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmJvcmRlci5hdHIpOworCW12d2FkZGNoKGRpYWxvZywgaGVpZ2h0IC0gMywgMCwgQUNTX0xURUUpOworCWZvciAoaSA9IDA7IGkgPCB3aWR0aCAtIDI7IGkrKykKKwkJd2FkZGNoKGRpYWxvZywgQUNTX0hMSU5FKTsKKwl3YXR0cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsKKwl3YWRkY2goZGlhbG9nLCBBQ1NfUlRFRSk7CisKKwlwcmludF90aXRsZShkaWFsb2csIHRpdGxlLCB3aWR0aCk7CisKKwl3YXR0cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsKKwlwcmludF9hdXRvd3JhcChkaWFsb2csIHByb21wdCwgd2lkdGggLSAyLCAxLCAzKTsKKworCWxpc3Rfd2lkdGggPSB3aWR0aCAtIDY7CisJYm94X3kgPSBoZWlnaHQgLSBsaXN0X2hlaWdodCAtIDU7CisJYm94X3ggPSAod2lkdGggLSBsaXN0X3dpZHRoKSAvIDIgLSAxOworCisJLyogY3JlYXRlIG5ldyB3aW5kb3cgZm9yIHRoZSBsaXN0ICovCisJbGlzdCA9IHN1YndpbihkaWFsb2csIGxpc3RfaGVpZ2h0LCBsaXN0X3dpZHRoLCB5ICsgYm94X3kgKyAxLAorCSAgICAgICAgICAgICAgeCArIGJveF94ICsgMSk7CisKKwlrZXlwYWQobGlzdCwgVFJVRSk7CisKKwkvKiBkcmF3IGEgYm94IGFyb3VuZCB0aGUgbGlzdCBpdGVtcyAqLworCWRyYXdfYm94KGRpYWxvZywgYm94X3ksIGJveF94LCBsaXN0X2hlaWdodCArIDIsIGxpc3Rfd2lkdGggKyAyLAorCSAgICAgICAgIGRsZy5tZW51Ym94X2JvcmRlci5hdHIsIGRsZy5tZW51Ym94LmF0cik7CisKKwkvKiBGaW5kIGxlbmd0aCBvZiBsb25nZXN0IGl0ZW0gaW4gb3JkZXIgdG8gY2VudGVyIGNoZWNrbGlzdCAqLworCWNoZWNrX3ggPSAwOworCWl0ZW1fZm9yZWFjaCgpCisJCWNoZWNrX3ggPSBNQVgoY2hlY2tfeCwgc3RybGVuKGl0ZW1fc3RyKCkpICsgNCk7CisJY2hlY2tfeCA9IE1JTihjaGVja194LCBsaXN0X3dpZHRoKTsKKworCWNoZWNrX3ggPSAobGlzdF93aWR0aCAtIGNoZWNrX3gpIC8gMjsKKwlpdGVtX3ggPSBjaGVja194ICsgNDsKKworCWlmIChjaG9pY2UgPj0gbGlzdF9oZWlnaHQpIHsKKwkJc2Nyb2xsID0gY2hvaWNlIC0gbGlzdF9oZWlnaHQgKyAxOworCQljaG9pY2UgLT0gc2Nyb2xsOworCX0KKworCS8qIFByaW50IHRoZSBsaXN0ICovCisJZm9yIChpID0gMDsgaSA8IG1heF9jaG9pY2U7IGkrKykgeworCQlpdGVtX3NldChzY3JvbGwgKyBpKTsKKwkJcHJpbnRfaXRlbShsaXN0LCBpLCBpID09IGNob2ljZSk7CisJfQorCisJcHJpbnRfYXJyb3dzKGRpYWxvZywgY2hvaWNlLCBpdGVtX2NvdW50KCksIHNjcm9sbCwKKwkJICAgICBib3hfeSwgYm94X3ggKyBjaGVja194ICsgNSwgbGlzdF9oZWlnaHQpOworCisJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIDApOworCisJd25vdXRyZWZyZXNoKGRpYWxvZyk7CisJd25vdXRyZWZyZXNoKGxpc3QpOworCWRvdXBkYXRlKCk7CisKKwl3aGlsZSAoa2V5ICE9IEtFWV9FU0MpIHsKKwkJa2V5ID0gd2dldGNoKGRpYWxvZyk7CisKKwkJZm9yIChpID0gMDsgaSA8IG1heF9jaG9pY2U7IGkrKykgeworCQkJaXRlbV9zZXQoaSArIHNjcm9sbCk7CisJCQlpZiAodG91cHBlcihrZXkpID09IHRvdXBwZXIoaXRlbV9zdHIoKVswXSkpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaSA8IG1heF9jaG9pY2UgfHwga2V5ID09IEtFWV9VUCB8fCBrZXkgPT0gS0VZX0RPV04gfHwKKwkJICAgIGtleSA9PSAnKycgfHwga2V5ID09ICctJykgeworCQkJaWYgKGtleSA9PSBLRVlfVVAgfHwga2V5ID09ICctJykgeworCQkJCWlmICghY2hvaWNlKSB7CisJCQkJCWlmICghc2Nyb2xsKQorCQkJCQkJY29udGludWU7CisJCQkJCS8qIFNjcm9sbCBsaXN0IGRvd24gKi8KKwkJCQkJaWYgKGxpc3RfaGVpZ2h0ID4gMSkgeworCQkJCQkJLyogRGUtaGlnaGxpZ2h0IGN1cnJlbnQgZmlyc3QgaXRlbSAqLworCQkJCQkJaXRlbV9zZXQoc2Nyb2xsKTsKKwkJCQkJCXByaW50X2l0ZW0obGlzdCwgMCwgRkFMU0UpOworCQkJCQkJc2Nyb2xsb2sobGlzdCwgVFJVRSk7CisJCQkJCQl3c2NybChsaXN0LCAtMSk7CisJCQkJCQlzY3JvbGxvayhsaXN0LCBGQUxTRSk7CisJCQkJCX0KKwkJCQkJc2Nyb2xsLS07CisJCQkJCWl0ZW1fc2V0KHNjcm9sbCk7CisJCQkJCXByaW50X2l0ZW0obGlzdCwgMCwgVFJVRSk7CisJCQkJCXByaW50X2Fycm93cyhkaWFsb2csIGNob2ljZSwgaXRlbV9jb3VudCgpLAorCQkJCQkJICAgICBzY3JvbGwsIGJveF95LCBib3hfeCArIGNoZWNrX3ggKyA1LCBsaXN0X2hlaWdodCk7CisKKwkJCQkJd25vdXRyZWZyZXNoKGRpYWxvZyk7CisJCQkJCXdyZWZyZXNoKGxpc3QpOworCisJCQkJCWNvbnRpbnVlOwkvKiB3YWl0IGZvciBhbm90aGVyIGtleSBwcmVzcyAqLworCQkJCX0gZWxzZQorCQkJCQlpID0gY2hvaWNlIC0gMTsKKwkJCX0gZWxzZSBpZiAoa2V5ID09IEtFWV9ET1dOIHx8IGtleSA9PSAnKycpIHsKKwkJCQlpZiAoY2hvaWNlID09IG1heF9jaG9pY2UgLSAxKSB7CisJCQkJCWlmIChzY3JvbGwgKyBjaG9pY2UgPj0gaXRlbV9jb3VudCgpIC0gMSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQkvKiBTY3JvbGwgbGlzdCB1cCAqLworCQkJCQlpZiAobGlzdF9oZWlnaHQgPiAxKSB7CisJCQkJCQkvKiBEZS1oaWdobGlnaHQgY3VycmVudCBsYXN0IGl0ZW0gYmVmb3JlIHNjcm9sbGluZyB1cCAqLworCQkJCQkJaXRlbV9zZXQoc2Nyb2xsICsgbWF4X2Nob2ljZSAtIDEpOworCQkJCQkJcHJpbnRfaXRlbShsaXN0LAorCQkJCQkJCSAgICBtYXhfY2hvaWNlIC0gMSwKKwkJCQkJCQkgICAgRkFMU0UpOworCQkJCQkJc2Nyb2xsb2sobGlzdCwgVFJVRSk7CisJCQkJCQl3c2NybChsaXN0LCAxKTsKKwkJCQkJCXNjcm9sbG9rKGxpc3QsIEZBTFNFKTsKKwkJCQkJfQorCQkJCQlzY3JvbGwrKzsKKwkJCQkJaXRlbV9zZXQoc2Nyb2xsICsgbWF4X2Nob2ljZSAtIDEpOworCQkJCQlwcmludF9pdGVtKGxpc3QsIG1heF9jaG9pY2UgLSAxLCBUUlVFKTsKKworCQkJCQlwcmludF9hcnJvd3MoZGlhbG9nLCBjaG9pY2UsIGl0ZW1fY291bnQoKSwKKwkJCQkJCSAgICAgc2Nyb2xsLCBib3hfeSwgYm94X3ggKyBjaGVja194ICsgNSwgbGlzdF9oZWlnaHQpOworCisJCQkJCXdub3V0cmVmcmVzaChkaWFsb2cpOworCQkJCQl3cmVmcmVzaChsaXN0KTsKKworCQkJCQljb250aW51ZTsJLyogd2FpdCBmb3IgYW5vdGhlciBrZXkgcHJlc3MgKi8KKwkJCQl9IGVsc2UKKwkJCQkJaSA9IGNob2ljZSArIDE7CisJCQl9CisJCQlpZiAoaSAhPSBjaG9pY2UpIHsKKwkJCQkvKiBEZS1oaWdobGlnaHQgY3VycmVudCBpdGVtICovCisJCQkJaXRlbV9zZXQoc2Nyb2xsICsgY2hvaWNlKTsKKwkJCQlwcmludF9pdGVtKGxpc3QsIGNob2ljZSwgRkFMU0UpOworCQkJCS8qIEhpZ2hsaWdodCBuZXcgaXRlbSAqLworCQkJCWNob2ljZSA9IGk7CisJCQkJaXRlbV9zZXQoc2Nyb2xsICsgY2hvaWNlKTsKKwkJCQlwcmludF9pdGVtKGxpc3QsIGNob2ljZSwgVFJVRSk7CisJCQkJd25vdXRyZWZyZXNoKGRpYWxvZyk7CisJCQkJd3JlZnJlc2gobGlzdCk7CisJCQl9CisJCQljb250aW51ZTsJLyogd2FpdCBmb3IgYW5vdGhlciBrZXkgcHJlc3MgKi8KKwkJfQorCQlzd2l0Y2ggKGtleSkgeworCQljYXNlICdIJzoKKwkJY2FzZSAnaCc6CisJCWNhc2UgJz8nOgorCQkJYnV0dG9uID0gMTsKKwkJCS8qIGZhbGwtdGhyb3VnaCAqLworCQljYXNlICdTJzoKKwkJY2FzZSAncyc6CisJCWNhc2UgJyAnOgorCQljYXNlICdcbic6CisJCQlpdGVtX2ZvcmVhY2goKQorCQkJCWl0ZW1fc2V0X3NlbGVjdGVkKDApOworCQkJaXRlbV9zZXQoc2Nyb2xsICsgY2hvaWNlKTsKKwkJCWl0ZW1fc2V0X3NlbGVjdGVkKDEpOworCQkJZGVsd2luKGxpc3QpOworCQkJZGVsd2luKGRpYWxvZyk7CisJCQlyZXR1cm4gYnV0dG9uOworCQljYXNlIFRBQjoKKwkJY2FzZSBLRVlfTEVGVDoKKwkJY2FzZSBLRVlfUklHSFQ6CisJCQlidXR0b24gPSAoKGtleSA9PSBLRVlfTEVGVCA/IC0tYnV0dG9uIDogKytidXR0b24pIDwgMCkKKwkJCSAgICA/IDEgOiAoYnV0dG9uID4gMSA/IDAgOiBidXR0b24pOworCisJCQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgYnV0dG9uKTsKKwkJCXdyZWZyZXNoKGRpYWxvZyk7CisJCQlicmVhazsKKwkJY2FzZSAnWCc6CisJCWNhc2UgJ3gnOgorCQkJa2V5ID0gS0VZX0VTQzsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9FU0M6CisJCQlrZXkgPSBvbl9rZXlfZXNjKGRpYWxvZyk7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfUkVTSVpFOgorCQkJZGVsd2luKGxpc3QpOworCQkJZGVsd2luKGRpYWxvZyk7CisJCQlvbl9rZXlfcmVzaXplKCk7CisJCQlnb3RvIGRvX3Jlc2l6ZTsKKwkJfQorCisJCS8qIE5vdywgdXBkYXRlIGV2ZXJ5dGhpbmcuLi4gKi8KKwkJZG91cGRhdGUoKTsKKwl9CisJZGVsd2luKGxpc3QpOworCWRlbHdpbihkaWFsb2cpOworCXJldHVybiBrZXk7CQkvKiBFU0MgcHJlc3NlZCAqLworfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL2x4ZGlhbG9nL2RpYWxvZy5oIGIvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL2x4ZGlhbG9nL2RpYWxvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MjExZmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2tjb25maWcvbHhkaWFsb2cvZGlhbG9nLmgKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgKiAgZGlhbG9nLmggLS0gY29tbW9uIGRlY2xhcmF0aW9ucyBmb3IgYWxsIGRpYWxvZyBtb2R1bGVzCisgKgorICogIEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3MuY3Voay5oaykKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqICBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorCisjaWZuZGVmIEtCVUlMRF9OT19OTFMKKyMgaW5jbHVkZSA8bGliaW50bC5oPgorI2Vsc2UKKyMgZGVmaW5lIGdldHRleHQoTXNnaWQpICgoY29uc3QgY2hhciAqKSAoTXNnaWQpKQorI2VuZGlmCisKKyNpZmRlZiBfX3N1bl9fCisjZGVmaW5lIENVUlNfTUFDUk9TCisjZW5kaWYKKyNpbmNsdWRlIENVUlNFU19MT0MKKworLyoKKyAqIENvbG9ycyBpbiBuY3Vyc2VzIDEuOS45ZSBkbyBub3Qgd29yayBwcm9wZXJseSBzaW5jZSBmb3JlZ3JvdW5kIGFuZAorICogYmFja2dyb3VuZCBjb2xvcnMgYXJlIE9SJ2QgcmF0aGVyIHRoYW4gc2VwYXJhdGVseSBtYXNrZWQuICBUaGlzIHZlcnNpb24KKyAqIG9mIGRpYWxvZyB3YXMgaGFja2VkIHRvIHdvcmsgd2l0aCBuY3Vyc2VzIDEuOS45ZSwgbWFraW5nIGl0IGluY29tcGF0aWJsZQorICogd2l0aCBzdGFuZGFyZCBjdXJzZXMuICBUaGUgc2ltcGxlc3QgZml4ICh0byBtYWtlIHRoaXMgd29yayB3aXRoIHN0YW5kYXJkCisgKiBjdXJzZXMpIHVzZXMgdGhlIHdia2dkc2V0KCkgZnVuY3Rpb24sIG5vdCB1c2VkIGluIHRoZSBvcmlnaW5hbCBoYWNrLgorICogVHVybiBpdCBvZmYgaWYgd2UncmUgYnVpbGRpbmcgd2l0aCAxLjkuOWUsIHNpbmNlIGl0IGp1c3QgY29uZnVzZXMgdGhpbmdzLgorICovCisjaWYgZGVmaW5lZChOQ1VSU0VTX1ZFUlNJT04pICYmIGRlZmluZWQoX05FRURfV1JBUCkgJiYgIWRlZmluZWQoR0NDX1BSSU5URkxJS0UpCisjZGVmaW5lIE9MRF9OQ1VSU0VTIDEKKyN1bmRlZiAgd2JrZ2RzZXQKKyNkZWZpbmUgd2JrZ2RzZXQodyxwKQkJLypub3RoaW5nICovCisjZWxzZQorI2RlZmluZSBPTERfTkNVUlNFUyAwCisjZW5kaWYKKworI2RlZmluZSBUUihwYXJhbXMpIF90cmFjZWYgcGFyYW1zCisKKyNkZWZpbmUgS0VZX0VTQyAyNworI2RlZmluZSBUQUIgOQorI2RlZmluZSBNQVhfTEVOIDIwNDgKKyNkZWZpbmUgQlVGX1NJWkUgKDEwKjEwMjQpCisjZGVmaW5lIE1JTih4LHkpICh4IDwgeSA/IHggOiB5KQorI2RlZmluZSBNQVgoeCx5KSAoeCA+IHkgPyB4IDogeSkKKworI2lmbmRlZiBBQ1NfVUxDT1JORVIKKyNkZWZpbmUgQUNTX1VMQ09STkVSICcrJworI2VuZGlmCisjaWZuZGVmIEFDU19MTENPUk5FUgorI2RlZmluZSBBQ1NfTExDT1JORVIgJysnCisjZW5kaWYKKyNpZm5kZWYgQUNTX1VSQ09STkVSCisjZGVmaW5lIEFDU19VUkNPUk5FUiAnKycKKyNlbmRpZgorI2lmbmRlZiBBQ1NfTFJDT1JORVIKKyNkZWZpbmUgQUNTX0xSQ09STkVSICcrJworI2VuZGlmCisjaWZuZGVmIEFDU19ITElORQorI2RlZmluZSBBQ1NfSExJTkUgJy0nCisjZW5kaWYKKyNpZm5kZWYgQUNTX1ZMSU5FCisjZGVmaW5lIEFDU19WTElORSAnfCcKKyNlbmRpZgorI2lmbmRlZiBBQ1NfTFRFRQorI2RlZmluZSBBQ1NfTFRFRSAnKycKKyNlbmRpZgorI2lmbmRlZiBBQ1NfUlRFRQorI2RlZmluZSBBQ1NfUlRFRSAnKycKKyNlbmRpZgorI2lmbmRlZiBBQ1NfVUFSUk9XCisjZGVmaW5lIEFDU19VQVJST1cgJ14nCisjZW5kaWYKKyNpZm5kZWYgQUNTX0RBUlJPVworI2RlZmluZSBBQ1NfREFSUk9XICd2JworI2VuZGlmCisKKy8qIGVycm9yIHJldHVybiBjb2RlcyAqLworI2RlZmluZSBFUlJESVNQTEFZVE9PU01BTEwgKEtFWV9NQVggKyAxKQorCisvKgorICogICBDb2xvciBkZWZpbml0aW9ucworICovCitzdHJ1Y3QgZGlhbG9nX2NvbG9yIHsKKwljaHR5cGUgYXRyOwkvKiBDb2xvciBhdHRyaWJ1dGUgKi8KKwlpbnQgZmc7CQkvKiBmb3JlZ3JvdW5kICovCisJaW50IGJnOwkJLyogYmFja2dyb3VuZCAqLworCWludCBobDsJCS8qIGhpZ2hsaWdodCB0aGlzIGl0ZW0gKi8KK307CisKK3N0cnVjdCBkaWFsb2dfaW5mbyB7CisJY29uc3QgY2hhciAqYmFja3RpdGxlOworCXN0cnVjdCBkaWFsb2dfY29sb3Igc2NyZWVuOworCXN0cnVjdCBkaWFsb2dfY29sb3Igc2hhZG93OworCXN0cnVjdCBkaWFsb2dfY29sb3IgZGlhbG9nOworCXN0cnVjdCBkaWFsb2dfY29sb3IgdGl0bGU7CisJc3RydWN0IGRpYWxvZ19jb2xvciBib3JkZXI7CisJc3RydWN0IGRpYWxvZ19jb2xvciBidXR0b25fYWN0aXZlOworCXN0cnVjdCBkaWFsb2dfY29sb3IgYnV0dG9uX2luYWN0aXZlOworCXN0cnVjdCBkaWFsb2dfY29sb3IgYnV0dG9uX2tleV9hY3RpdmU7CisJc3RydWN0IGRpYWxvZ19jb2xvciBidXR0b25fa2V5X2luYWN0aXZlOworCXN0cnVjdCBkaWFsb2dfY29sb3IgYnV0dG9uX2xhYmVsX2FjdGl2ZTsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGJ1dHRvbl9sYWJlbF9pbmFjdGl2ZTsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGlucHV0Ym94OworCXN0cnVjdCBkaWFsb2dfY29sb3IgaW5wdXRib3hfYm9yZGVyOworCXN0cnVjdCBkaWFsb2dfY29sb3Igc2VhcmNoYm94OworCXN0cnVjdCBkaWFsb2dfY29sb3Igc2VhcmNoYm94X3RpdGxlOworCXN0cnVjdCBkaWFsb2dfY29sb3Igc2VhcmNoYm94X2JvcmRlcjsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHBvc2l0aW9uX2luZGljYXRvcjsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIG1lbnVib3g7CisJc3RydWN0IGRpYWxvZ19jb2xvciBtZW51Ym94X2JvcmRlcjsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGl0ZW07CisJc3RydWN0IGRpYWxvZ19jb2xvciBpdGVtX3NlbGVjdGVkOworCXN0cnVjdCBkaWFsb2dfY29sb3IgdGFnOworCXN0cnVjdCBkaWFsb2dfY29sb3IgdGFnX3NlbGVjdGVkOworCXN0cnVjdCBkaWFsb2dfY29sb3IgdGFnX2tleTsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHRhZ19rZXlfc2VsZWN0ZWQ7CisJc3RydWN0IGRpYWxvZ19jb2xvciBjaGVjazsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGNoZWNrX3NlbGVjdGVkOworCXN0cnVjdCBkaWFsb2dfY29sb3IgdWFycm93OworCXN0cnVjdCBkaWFsb2dfY29sb3IgZGFycm93OworfTsKKworLyoKKyAqIEdsb2JhbCB2YXJpYWJsZXMKKyAqLworZXh0ZXJuIHN0cnVjdCBkaWFsb2dfaW5mbyBkbGc7CitleHRlcm4gY2hhciBkaWFsb2dfaW5wdXRfcmVzdWx0W107CisKKy8qCisgKiBGdW5jdGlvbiBwcm90b3R5cGVzCisgKi8KKworLyogaXRlbSBsaXN0IGFzIHVzZWQgYnkgY2hlY2tsaXN0IGFuZCBtZW51Ym94ICovCit2b2lkIGl0ZW1fcmVzZXQodm9pZCk7Cit2b2lkIGl0ZW1fbWFrZShjb25zdCBjaGFyICpmbXQsIC4uLik7Cit2b2lkIGl0ZW1fYWRkX3N0cihjb25zdCBjaGFyICpmbXQsIC4uLik7Cit2b2lkIGl0ZW1fc2V0X3RhZyhjaGFyIHRhZyk7Cit2b2lkIGl0ZW1fc2V0X2RhdGEodm9pZCAqcCk7Cit2b2lkIGl0ZW1fc2V0X3NlbGVjdGVkKGludCB2YWwpOworaW50IGl0ZW1fYWN0aXZhdGVfc2VsZWN0ZWQodm9pZCk7Cit2b2lkICppdGVtX2RhdGEodm9pZCk7CitjaGFyIGl0ZW1fdGFnKHZvaWQpOworCisvKiBpdGVtIGxpc3QgbWFuaXB1bGF0aW9uIGZvciBseGRpYWxvZyB1c2UgKi8KKyNkZWZpbmUgTUFYSVRFTVNUUiAyMDAKK3N0cnVjdCBkaWFsb2dfaXRlbSB7CisJY2hhciBzdHJbTUFYSVRFTVNUUl07CS8qIHByb210cCBkaXNwbGF5ZWQgKi8KKwljaGFyIHRhZzsKKwl2b2lkICpkYXRhOwkvKiBwb2ludGVyIHRvIG1lbnUgaXRlbSAtIHVzZWQgYnkgbWVudWJveCtjaGVja2xpc3QgKi8KKwlpbnQgc2VsZWN0ZWQ7CS8qIFNldCB0byAxIGJ5IGRpYWxvZ18qKCkgZnVuY3Rpb24gaWYgc2VsZWN0ZWQuICovCit9OworCisvKiBsaXN0IG9mIGxpYWxvZ19pdGVtcyAqLworc3RydWN0IGRpYWxvZ19saXN0IHsKKwlzdHJ1Y3QgZGlhbG9nX2l0ZW0gbm9kZTsKKwlzdHJ1Y3QgZGlhbG9nX2xpc3QgKm5leHQ7Cit9OworCitleHRlcm4gc3RydWN0IGRpYWxvZ19saXN0ICppdGVtX2N1cjsKK2V4dGVybiBzdHJ1Y3QgZGlhbG9nX2xpc3QgaXRlbV9uaWw7CitleHRlcm4gc3RydWN0IGRpYWxvZ19saXN0ICppdGVtX2hlYWQ7CisKK2ludCBpdGVtX2NvdW50KHZvaWQpOwordm9pZCBpdGVtX3NldChpbnQgbik7CitpbnQgaXRlbV9uKHZvaWQpOworY29uc3QgY2hhciAqaXRlbV9zdHIodm9pZCk7CitpbnQgaXRlbV9pc19zZWxlY3RlZCh2b2lkKTsKK2ludCBpdGVtX2lzX3RhZyhjaGFyIHRhZyk7CisjZGVmaW5lIGl0ZW1fZm9yZWFjaCgpIFwKKwlmb3IgKGl0ZW1fY3VyID0gaXRlbV9oZWFkID8gaXRlbV9oZWFkOiBpdGVtX2N1cjsgXAorCSAgICAgaXRlbV9jdXIgJiYgKGl0ZW1fY3VyICE9ICZpdGVtX25pbCk7IGl0ZW1fY3VyID0gaXRlbV9jdXItPm5leHQpCisKKy8qIGdlbmVyaWMga2V5IGhhbmRsZXJzICovCitpbnQgb25fa2V5X2VzYyhXSU5ET1cgKndpbik7CitpbnQgb25fa2V5X3Jlc2l6ZSh2b2lkKTsKKworaW50IGluaXRfZGlhbG9nKGNvbnN0IGNoYXIgKmJhY2t0aXRsZSk7Cit2b2lkIHNldF9kaWFsb2dfYmFja3RpdGxlKGNvbnN0IGNoYXIgKmJhY2t0aXRsZSk7Cit2b2lkIGVuZF9kaWFsb2coaW50IHgsIGludCB5KTsKK3ZvaWQgYXR0cl9jbGVhcihXSU5ET1cgKiB3aW4sIGludCBoZWlnaHQsIGludCB3aWR0aCwgY2h0eXBlIGF0dHIpOwordm9pZCBkaWFsb2dfY2xlYXIodm9pZCk7Cit2b2lkIHByaW50X2F1dG93cmFwKFdJTkRPVyAqIHdpbiwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgd2lkdGgsIGludCB5LCBpbnQgeCk7Cit2b2lkIHByaW50X2J1dHRvbihXSU5ET1cgKiB3aW4sIGNvbnN0IGNoYXIgKmxhYmVsLCBpbnQgeSwgaW50IHgsIGludCBzZWxlY3RlZCk7Cit2b2lkIHByaW50X3RpdGxlKFdJTkRPVyAqZGlhbG9nLCBjb25zdCBjaGFyICp0aXRsZSwgaW50IHdpZHRoKTsKK3ZvaWQgZHJhd19ib3goV0lORE9XICogd2luLCBpbnQgeSwgaW50IHgsIGludCBoZWlnaHQsIGludCB3aWR0aCwgY2h0eXBlIGJveCwKKwkgICAgICBjaHR5cGUgYm9yZGVyKTsKK3ZvaWQgZHJhd19zaGFkb3coV0lORE9XICogd2luLCBpbnQgeSwgaW50IHgsIGludCBoZWlnaHQsIGludCB3aWR0aCk7CisKK2ludCBmaXJzdF9hbHBoYShjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKmV4ZW1wdCk7CitpbnQgZGlhbG9nX3llc25vKGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCBoZWlnaHQsIGludCB3aWR0aCk7CitpbnQgZGlhbG9nX21zZ2JveChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgaGVpZ2h0LAorCQkgIGludCB3aWR0aCwgaW50IHBhdXNlKTsKK2ludCBkaWFsb2dfdGV4dGJveChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqZmlsZSwgaW50IGhlaWdodCwgaW50IHdpZHRoKTsKK2ludCBkaWFsb2dfbWVudShjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LAorCQljb25zdCB2b2lkICpzZWxlY3RlZCwgaW50ICpzX3Njcm9sbCk7CitpbnQgZGlhbG9nX2NoZWNrbGlzdChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgaGVpZ2h0LAorCQkgICAgIGludCB3aWR0aCwgaW50IGxpc3RfaGVpZ2h0KTsKK2V4dGVybiBjaGFyIGRpYWxvZ19pbnB1dF9yZXN1bHRbXTsKK2ludCBkaWFsb2dfaW5wdXRib3goY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGhlaWdodCwKKwkJICAgIGludCB3aWR0aCwgY29uc3QgY2hhciAqaW5pdCk7CisKKy8qCisgKiBUaGlzIGlzIHRoZSBiYXNlIGZvciBmaWN0aXRpb3VzIGtleXMsIHdoaWNoIGFjdGl2YXRlCisgKiB0aGUgYnV0dG9ucy4KKyAqCisgKiBNb3VzZS1nZW5lcmF0ZWQga2V5cyBhcmUgdGhlIGZvbGxvd2luZzoKKyAqICAgLS0gdGhlIGZpcnN0IDMyIGFyZSB1c2VkIGFzIG51bWJlcnMsIGluIGFkZGl0aW9uIHRvICcwJy0nOScKKyAqICAgLS0gdGhlIGxvd2VyY2FzZSBhcmUgdXNlZCB0byBzaWduYWwgbW91c2UtZW50ZXIgZXZlbnRzIChNX0VWRU5UICsgJ28nKQorICogICAtLSB1cHBlcmNhc2UgY2hhcnMgYXJlIHVzZWQgdG8gaW52b2tlIHRoZSBidXR0b24gKE1fRVZFTlQgKyAnTycpCisgKi8KKyNkZWZpbmUgTV9FVkVOVCAoS0VZX01BWCsxKQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL2x4ZGlhbG9nL2lucHV0Ym94LmMgYi9saWIvY3QtbmctMS4xMy40L2tjb25maWcvbHhkaWFsb2cvaW5wdXRib3guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDhlNTg3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL2x4ZGlhbG9nL2lucHV0Ym94LmMKQEAgLTAsMCArMSwyMzggQEAKKy8qCisgKiAgaW5wdXRib3guYyAtLSBpbXBsZW1lbnRzIHRoZSBpbnB1dCBib3gKKyAqCisgKiAgT1JJR0lOQUwgQVVUSE9SOiBTYXZpbyBMYW0gKGxhbTgzNkBjcy5jdWhrLmhrKQorICogIE1PRElGSUVEIEZPUiBMSU5VWCBLRVJORUwgQ09ORklHIEJZOiBXaWxsaWFtIFJvYWRjYXAgKHJvYWRjYXBAY2Z3LmNvbSkKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqICBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJkaWFsb2cuaCIKKworY2hhciBkaWFsb2dfaW5wdXRfcmVzdWx0W01BWF9MRU4gKyAxXTsKKworLyoKKyAqICBQcmludCB0aGUgdGVybWluYXRpb24gYnV0dG9ucworICovCitzdGF0aWMgdm9pZCBwcmludF9idXR0b25zKFdJTkRPVyAqIGRpYWxvZywgaW50IGhlaWdodCwgaW50IHdpZHRoLCBpbnQgc2VsZWN0ZWQpCit7CisJaW50IHggPSB3aWR0aCAvIDIgLSAxMTsKKwlpbnQgeSA9IGhlaWdodCAtIDI7CisKKwlwcmludF9idXR0b24oZGlhbG9nLCBnZXR0ZXh0KCIgIE9rICAiKSwgeSwgeCwgc2VsZWN0ZWQgPT0gMCk7CisJcHJpbnRfYnV0dG9uKGRpYWxvZywgZ2V0dGV4dCgiIEhlbHAgIiksIHksIHggKyAxNCwgc2VsZWN0ZWQgPT0gMSk7CisKKwl3bW92ZShkaWFsb2csIHksIHggKyAxICsgMTQgKiBzZWxlY3RlZCk7CisJd3JlZnJlc2goZGlhbG9nKTsKK30KKworLyoKKyAqIERpc3BsYXkgYSBkaWFsb2cgYm94IGZvciBpbnB1dGluZyBhIHN0cmluZworICovCitpbnQgZGlhbG9nX2lucHV0Ym94KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCBoZWlnaHQsIGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5pdCkKK3sKKwlpbnQgaSwgeCwgeSwgYm94X3ksIGJveF94LCBib3hfd2lkdGg7CisJaW50IGlucHV0X3ggPSAwLCBzY3JvbGwgPSAwLCBrZXkgPSAwLCBidXR0b24gPSAtMTsKKwljaGFyICppbnN0ciA9IGRpYWxvZ19pbnB1dF9yZXN1bHQ7CisJV0lORE9XICpkaWFsb2c7CisKKwlpZiAoIWluaXQpCisJCWluc3RyWzBdID0gJ1wwJzsKKwllbHNlCisJCXN0cmNweShpbnN0ciwgaW5pdCk7CisKK2RvX3Jlc2l6ZToKKwlpZiAoZ2V0bWF4eShzdGRzY3IpIDw9IChoZWlnaHQgLSAyKSkKKwkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01BTEw7CisJaWYgKGdldG1heHgoc3Rkc2NyKSA8PSAod2lkdGggLSAyKSkKKwkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01BTEw7CisKKwkvKiBjZW50ZXIgZGlhbG9nIGJveCBvbiBzY3JlZW4gKi8KKwl4ID0gKENPTFMgLSB3aWR0aCkgLyAyOworCXkgPSAoTElORVMgLSBoZWlnaHQpIC8gMjsKKworCWRyYXdfc2hhZG93KHN0ZHNjciwgeSwgeCwgaGVpZ2h0LCB3aWR0aCk7CisKKwlkaWFsb2cgPSBuZXd3aW4oaGVpZ2h0LCB3aWR0aCwgeSwgeCk7CisJa2V5cGFkKGRpYWxvZywgVFJVRSk7CisKKwlkcmF3X2JveChkaWFsb2csIDAsIDAsIGhlaWdodCwgd2lkdGgsCisJCSBkbGcuZGlhbG9nLmF0ciwgZGxnLmJvcmRlci5hdHIpOworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmJvcmRlci5hdHIpOworCW12d2FkZGNoKGRpYWxvZywgaGVpZ2h0IC0gMywgMCwgQUNTX0xURUUpOworCWZvciAoaSA9IDA7IGkgPCB3aWR0aCAtIDI7IGkrKykKKwkJd2FkZGNoKGRpYWxvZywgQUNTX0hMSU5FKTsKKwl3YXR0cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsKKwl3YWRkY2goZGlhbG9nLCBBQ1NfUlRFRSk7CisKKwlwcmludF90aXRsZShkaWFsb2csIHRpdGxlLCB3aWR0aCk7CisKKwl3YXR0cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsKKwlwcmludF9hdXRvd3JhcChkaWFsb2csIHByb21wdCwgd2lkdGggLSAyLCAxLCAzKTsKKworCS8qIERyYXcgdGhlIGlucHV0IGZpZWxkIGJveCAqLworCWJveF93aWR0aCA9IHdpZHRoIC0gNjsKKwlnZXR5eChkaWFsb2csIHksIHgpOworCWJveF95ID0geSArIDI7CisJYm94X3ggPSAod2lkdGggLSBib3hfd2lkdGgpIC8gMjsKKwlkcmF3X2JveChkaWFsb2csIHkgKyAxLCBib3hfeCAtIDEsIDMsIGJveF93aWR0aCArIDIsCisJCSBkbGcuZGlhbG9nLmF0ciwgZGxnLmJvcmRlci5hdHIpOworCisJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIDApOworCisJLyogU2V0IHVwIHRoZSBpbml0aWFsIHZhbHVlICovCisJd21vdmUoZGlhbG9nLCBib3hfeSwgYm94X3gpOworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmlucHV0Ym94LmF0cik7CisKKwlpbnB1dF94ID0gc3RybGVuKGluc3RyKTsKKworCWlmIChpbnB1dF94ID49IGJveF93aWR0aCkgeworCQlzY3JvbGwgPSBpbnB1dF94IC0gYm94X3dpZHRoICsgMTsKKwkJaW5wdXRfeCA9IGJveF93aWR0aCAtIDE7CisJCWZvciAoaSA9IDA7IGkgPCBib3hfd2lkdGggLSAxOyBpKyspCisJCQl3YWRkY2goZGlhbG9nLCBpbnN0cltzY3JvbGwgKyBpXSk7CisJfSBlbHNlIHsKKwkJd2FkZHN0cihkaWFsb2csIGluc3RyKTsKKwl9CisKKwl3bW92ZShkaWFsb2csIGJveF95LCBib3hfeCArIGlucHV0X3gpOworCisJd3JlZnJlc2goZGlhbG9nKTsKKworCXdoaWxlIChrZXkgIT0gS0VZX0VTQykgeworCQlrZXkgPSB3Z2V0Y2goZGlhbG9nKTsKKworCQlpZiAoYnV0dG9uID09IC0xKSB7CS8qIElucHV0IGJveCBzZWxlY3RlZCAqLworCQkJc3dpdGNoIChrZXkpIHsKKwkJCWNhc2UgVEFCOgorCQkJY2FzZSBLRVlfVVA6CisJCQljYXNlIEtFWV9ET1dOOgorCQkJCWJyZWFrOworCQkJY2FzZSBLRVlfTEVGVDoKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgS0VZX1JJR0hUOgorCQkJCWNvbnRpbnVlOworCQkJY2FzZSBLRVlfQkFDS1NQQUNFOgorCQkJY2FzZSAxMjc6CisJCQkJaWYgKGlucHV0X3ggfHwgc2Nyb2xsKSB7CisJCQkJCXdhdHRyc2V0KGRpYWxvZywgZGxnLmlucHV0Ym94LmF0cik7CisJCQkJCWlmICghaW5wdXRfeCkgeworCQkJCQkJc2Nyb2xsID0gc2Nyb2xsIDwgYm94X3dpZHRoIC0gMSA/IDAgOiBzY3JvbGwgLSAoYm94X3dpZHRoIC0gMSk7CisJCQkJCQl3bW92ZShkaWFsb2csIGJveF95LCBib3hfeCk7CisJCQkJCQlmb3IgKGkgPSAwOyBpIDwgYm94X3dpZHRoOyBpKyspCisJCQkJCQkJd2FkZGNoKGRpYWxvZywKKwkJCQkJCQkgICAgICAgaW5zdHJbc2Nyb2xsICsgaW5wdXRfeCArIGldID8KKwkJCQkJCQkgICAgICAgaW5zdHJbc2Nyb2xsICsgaW5wdXRfeCArIGldIDogJyAnKTsKKwkJCQkJCWlucHV0X3ggPSBzdHJsZW4oaW5zdHIpIC0gc2Nyb2xsOworCQkJCQl9IGVsc2UKKwkJCQkJCWlucHV0X3gtLTsKKwkJCQkJaW5zdHJbc2Nyb2xsICsgaW5wdXRfeF0gPSAnXDAnOworCQkJCQltdndhZGRjaChkaWFsb2csIGJveF95LCBpbnB1dF94ICsgYm94X3gsICcgJyk7CisJCQkJCXdtb3ZlKGRpYWxvZywgYm94X3ksIGlucHV0X3ggKyBib3hfeCk7CisJCQkJCXdyZWZyZXNoKGRpYWxvZyk7CisJCQkJfQorCQkJCWNvbnRpbnVlOworCQkJZGVmYXVsdDoKKwkJCQlpZiAoa2V5IDwgMHgxMDAgJiYgaXNwcmludChrZXkpKSB7CisJCQkJCWlmIChzY3JvbGwgKyBpbnB1dF94IDwgTUFYX0xFTikgeworCQkJCQkJd2F0dHJzZXQoZGlhbG9nLCBkbGcuaW5wdXRib3guYXRyKTsKKwkJCQkJCWluc3RyW3Njcm9sbCArIGlucHV0X3hdID0ga2V5OworCQkJCQkJaW5zdHJbc2Nyb2xsICsgaW5wdXRfeCArIDFdID0gJ1wwJzsKKwkJCQkJCWlmIChpbnB1dF94ID09IGJveF93aWR0aCAtIDEpIHsKKwkJCQkJCQlzY3JvbGwrKzsKKwkJCQkJCQl3bW92ZShkaWFsb2csIGJveF95LCBib3hfeCk7CisJCQkJCQkJZm9yIChpID0gMDsgaSA8IGJveF93aWR0aCAtIDE7IGkrKykKKwkJCQkJCQkJd2FkZGNoKGRpYWxvZywgaW5zdHIgW3Njcm9sbCArIGldKTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgaW5wdXRfeCsrICsgYm94X3gpOworCQkJCQkJCXdhZGRjaChkaWFsb2csIGtleSk7CisJCQkJCQl9CisJCQkJCQl3cmVmcmVzaChkaWFsb2cpOworCQkJCQl9IGVsc2UKKwkJCQkJCWZsYXNoKCk7CS8qIEFsYXJtIHVzZXIgYWJvdXQgb3ZlcmZsb3cgKi8KKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQl9CisJCXN3aXRjaCAoa2V5KSB7CisJCWNhc2UgJ08nOgorCQljYXNlICdvJzoKKwkJCWRlbHdpbihkaWFsb2cpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgJ0gnOgorCQljYXNlICdoJzoKKwkJCWRlbHdpbihkaWFsb2cpOworCQkJcmV0dXJuIDE7CisJCWNhc2UgS0VZX1VQOgorCQljYXNlIEtFWV9MRUZUOgorCQkJc3dpdGNoIChidXR0b24pIHsKKwkJCWNhc2UgLTE6CisJCQkJYnV0dG9uID0gMTsJLyogSW5kaWNhdGVzICJIZWxwIiBidXR0b24gaXMgc2VsZWN0ZWQgKi8KKwkJCQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDA6CisJCQkJYnV0dG9uID0gLTE7CS8qIEluZGljYXRlcyBpbnB1dCBib3ggaXMgc2VsZWN0ZWQgKi8KKwkJCQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7CisJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgYm94X3ggKyBpbnB1dF94KTsKKwkJCQl3cmVmcmVzaChkaWFsb2cpOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCWJ1dHRvbiA9IDA7CS8qIEluZGljYXRlcyAiT0siIGJ1dHRvbiBpcyBzZWxlY3RlZCAqLworCQkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRBQjoKKwkJY2FzZSBLRVlfRE9XTjoKKwkJY2FzZSBLRVlfUklHSFQ6CisJCQlzd2l0Y2ggKGJ1dHRvbikgeworCQkJY2FzZSAtMToKKwkJCQlidXR0b24gPSAwOwkvKiBJbmRpY2F0ZXMgIk9LIiBidXR0b24gaXMgc2VsZWN0ZWQgKi8KKwkJCQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7CisJCQkJYnJlYWs7CisJCQljYXNlIDA6CisJCQkJYnV0dG9uID0gMTsJLyogSW5kaWNhdGVzICJIZWxwIiBidXR0b24gaXMgc2VsZWN0ZWQgKi8KKwkJCQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQkJYnV0dG9uID0gLTE7CS8qIEluZGljYXRlcyBpbnB1dCBib3ggaXMgc2VsZWN0ZWQgKi8KKwkJCQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7CisJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgYm94X3ggKyBpbnB1dF94KTsKKwkJCQl3cmVmcmVzaChkaWFsb2cpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJyAnOgorCQljYXNlICdcbic6CisJCQlkZWx3aW4oZGlhbG9nKTsKKwkJCXJldHVybiAoYnV0dG9uID09IC0xID8gMCA6IGJ1dHRvbik7CisJCWNhc2UgJ1gnOgorCQljYXNlICd4JzoKKwkJCWtleSA9IEtFWV9FU0M7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfRVNDOgorCQkJa2V5ID0gb25fa2V5X2VzYyhkaWFsb2cpOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX1JFU0laRToKKwkJCWRlbHdpbihkaWFsb2cpOworCQkJb25fa2V5X3Jlc2l6ZSgpOworCQkJZ290byBkb19yZXNpemU7CisJCX0KKwl9CisKKwlkZWx3aW4oZGlhbG9nKTsKKwlyZXR1cm4gS0VZX0VTQzsJCS8qIEVTQyBwcmVzc2VkICovCit9CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2tjb25maWcvbHhkaWFsb2cvbWVudWJveC5jIGIvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL2x4ZGlhbG9nL21lbnVib3guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDYwNDczCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL2x4ZGlhbG9nL21lbnVib3guYwpAQCAtMCwwICsxLDQzNCBAQAorLyoKKyAqICBtZW51Ym94LmMgLS0gaW1wbGVtZW50cyB0aGUgbWVudSBib3gKKyAqCisgKiAgT1JJR0lOQUwgQVVUSE9SOiBTYXZpbyBMYW0gKGxhbTgzNkBjcy5jdWhrLmhrKQorICogIE1PRElGSUVEIEZPUiBMSU5VWCBLRVJORUwgQ09ORklHIEJZOiBXaWxsaWFtIFJvYWRjYXAgKHJvYWRjYXB3QGNmdy5jb20pCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKgorICogIENoYW5nZXMgYnkgQ2xpZmZvcmQgV29sZiAoZ29kQGNsaWZmb3JkLmF0KQorICoKKyAqICBbIDE5OTgtMDYtMTMgXQorICoKKyAqICAgICopICBBIGJ1Z2ZpeCBmb3IgdGhlIFBhZ2UtRG93biBwcm9ibGVtCisgKgorICogICAgKikgIEZvcm1lcmx5IHdoZW4gSSB1c2VkIFBhZ2UgRG93biBhbmQgUGFnZSBVcCwgdGhlIGN1cnNvciB3b3VsZCBiZSBzZXQgCisgKiAgICAgICAgdG8gdGhlIGZpcnN0IHBvc2l0aW9uIGluIHRoZSBtZW51IGJveC4gIE5vdyBseGRpYWxvZyBpcyBhIGJpdAorICogICAgICAgIHNtYXJ0ZXIgYW5kIHdvcmtzIG1vcmUgbGlrZSBvdGhlciBtZW51IHN5c3RlbXMgKGp1c3QgaGF2ZSBhIGxvb2sgYXQKKyAqICAgICAgICBpdCkuCisgKgorICogICAgKikgIEZvcm1lcmx5IGlmIEkgc2VsZWN0ZWQgc29tZXRoaW5nIG15IHNjcm9sbGluZyB3b3VsZCBiZSBicm9rZW4gYmVjYXVzZQorICogICAgICAgIGx4ZGlhbG9nIGlzIHJlLWludm9rZWQgYnkgdGhlIE1lbnVjb25maWcgc2hlbGwgc2NyaXB0LCBjYW4ndAorICogICAgICAgIHJlbWVtYmVyIHRoZSBsYXN0IHNjcm9sbGluZyBwb3NpdGlvbiwgYW5kIGp1c3Qgc2V0cyBpdCBzbyB0aGF0IHRoZQorICogICAgICAgIGN1cnNvciBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBib3guICBOb3cgaXQgd3JpdGVzIHRoZSB0ZW1wb3JhcnkgZmlsZQorICogICAgICAgIGx4ZGlhbG9nLnNjcmx0bXAgd2hpY2ggY29udGFpbnMgdGhpcyBpbmZvcm1hdGlvbi4gVGhlIGZpbGUgaXMKKyAqICAgICAgICBkZWxldGVkIGJ5IGx4ZGlhbG9nIGlmIHRoZSB1c2VyIGxlYXZlcyBhIHN1Ym1lbnUgb3IgZW50ZXJzIGEgbmV3CisgKiAgICAgICAgb25lLCBidXQgaXQgd291bGQgYmUgbmljZSBpZiBNZW51Y29uZmlnIGNvdWxkIG1ha2UgYW5vdGhlciAicm0gLWYiCisgKiAgICAgICAganVzdCB0byBiZSBzdXJlLiAgSnVzdCB0cnkgaXQgb3V0IC0geW91IHdpbGwgcmVjb2duaXNlIGEgZGlmZmVyZW5jZSEKKyAqCisgKiAgWyAxOTk4LTA2LTE0IF0KKyAqCisgKiAgICAqKSAgTm93IGx4ZGlhbG9nIGlzIGNyYXNoLXNhZmUgYWdhaW5zdCBicm9rZW4gImx4ZGlhbG9nLnNjcmx0bXAiIGZpbGVzCisgKiAgICAgICAgYW5kIG1lbnVzIGNoYW5nZSB0aGVpciBzaXplIG9uIHRoZSBmbHkuCisgKgorICogICAgKikgIElmIGZvciBzb21lIHJlYXNvbiB0aGUgbGFzdCBzY3JvbGxpbmcgcG9zaXRpb24gaXMgbm90IHNhdmVkIGJ5CisgKiAgICAgICAgbHhkaWFsb2csIGl0IHNldHMgdGhlIHNjcm9sbGluZyBzbyB0aGF0IHRoZSBzZWxlY3RlZCBpdGVtIGlzIGluIHRoZQorICogICAgICAgIG1pZGRsZSBvZiB0aGUgbWVudSBib3gsIG5vdCBhdCB0aGUgYm90dG9tLgorICoKKyAqIDAyIEphbnVhcnkgMTk5OSwgTWljaGFlbCBFbGl6YWJldGggQ2hhc3RhaW4gKG1lY0BzaG91dC5uZXQpCisgKiBSZXNldCAnc2Nyb2xsJyB0byAwIGlmIHRoZSB2YWx1ZSBmcm9tIGx4ZGlhbG9nLnNjcmx0bXAgaXMgYm9ndXMuCisgKiBUaGlzIGZpeGVzIGEgYnVnIGluIE1lbnVjb25maWcgd2hlcmUgdXNpbmcgJyAnIHRvIGRlc2NlbmQgaW50byBtZW51cworICogd291bGQgbGVhdmUgbWlzLXN5bmNocm9uaXplZCBseGRpYWxvZy5zY3JsdG1wIGZpbGVzIGx5aW5nIGFyb3VuZCwKKyAqIGZzY2FuZiB3b3VsZCByZWFkIGluICdzY3JvbGwnLCBhbmQgZXZlbnR1YWxseSB0aGF0IHZhbHVlIHdvdWxkIGdldCB1c2VkLgorICovCisKKyNpbmNsdWRlICJkaWFsb2cuaCIKKworc3RhdGljIGludCBtZW51X3dpZHRoLCBpdGVtX3g7CisKKy8qCisgKiBQcmludCBtZW51IGl0ZW0KKyAqLworc3RhdGljIHZvaWQgZG9fcHJpbnRfaXRlbShXSU5ET1cgKiB3aW4sIGNvbnN0IGNoYXIgKml0ZW0sIGludCBsaW5lX3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzZWxlY3RlZCwgaW50IGhvdGtleSkKK3sKKwlpbnQgajsKKwljaGFyICptZW51X2l0ZW0gPSBtYWxsb2MobWVudV93aWR0aCArIDEpOworCisJc3RybmNweShtZW51X2l0ZW0sIGl0ZW0sIG1lbnVfd2lkdGggLSBpdGVtX3gpOworCW1lbnVfaXRlbVttZW51X3dpZHRoIC0gaXRlbV94XSA9ICdcMCc7CisJaiA9IGZpcnN0X2FscGhhKG1lbnVfaXRlbSwgIll5Tm5NbUhoIik7CisKKwkvKiBDbGVhciAncmVzaWR1ZScgb2YgbGFzdCBpdGVtICovCisJd2F0dHJzZXQod2luLCBkbGcubWVudWJveC5hdHIpOworCXdtb3ZlKHdpbiwgbGluZV95LCAwKTsKKyNpZiBPTERfTkNVUlNFUworCXsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBtZW51X3dpZHRoOyBpKyspCisJCQl3YWRkY2god2luLCAnICcpOworCX0KKyNlbHNlCisJd2NscnRvZW9sKHdpbik7CisjZW5kaWYKKwl3YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gZGxnLml0ZW1fc2VsZWN0ZWQuYXRyIDogZGxnLml0ZW0uYXRyKTsKKwltdndhZGRzdHIod2luLCBsaW5lX3ksIGl0ZW1feCwgbWVudV9pdGVtKTsKKwlpZiAoaG90a2V5KSB7CisJCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcudGFnX2tleV9zZWxlY3RlZC5hdHIKKwkJCSA6IGRsZy50YWdfa2V5LmF0cik7CisJCW12d2FkZGNoKHdpbiwgbGluZV95LCBpdGVtX3ggKyBqLCBtZW51X2l0ZW1bal0pOworCX0KKwlpZiAoc2VsZWN0ZWQpIHsKKwkJd21vdmUod2luLCBsaW5lX3ksIGl0ZW1feCArIDEpOworCX0KKwlmcmVlKG1lbnVfaXRlbSk7CisJd3JlZnJlc2god2luKTsKK30KKworI2RlZmluZSBwcmludF9pdGVtKGluZGV4LCBjaG9pY2UsIHNlbGVjdGVkKQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWl0ZW1fc2V0KGluZGV4KTsJCQkJCQlcCisJZG9fcHJpbnRfaXRlbShtZW51LCBpdGVtX3N0cigpLCBjaG9pY2UsIHNlbGVjdGVkLCAhaXRlbV9pc190YWcoJzonKSk7IFwKK30gd2hpbGUgKDApCisKKy8qCisgKiBQcmludCB0aGUgc2Nyb2xsIGluZGljYXRvcnMuCisgKi8KK3N0YXRpYyB2b2lkIHByaW50X2Fycm93cyhXSU5ET1cgKiB3aW4sIGludCBpdGVtX25vLCBpbnQgc2Nyb2xsLCBpbnQgeSwgaW50IHgsCisJCQkgaW50IGhlaWdodCkKK3sKKwlpbnQgY3VyX3ksIGN1cl94OworCisJZ2V0eXgod2luLCBjdXJfeSwgY3VyX3gpOworCisJd21vdmUod2luLCB5LCB4KTsKKworCWlmIChzY3JvbGwgPiAwKSB7CisJCXdhdHRyc2V0KHdpbiwgZGxnLnVhcnJvdy5hdHIpOworCQl3YWRkY2god2luLCBBQ1NfVUFSUk9XKTsKKwkJd2FkZHN0cih3aW4sICIoLSkiKTsKKwl9IGVsc2UgeworCQl3YXR0cnNldCh3aW4sIGRsZy5tZW51Ym94LmF0cik7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJfQorCisJeSA9IHkgKyBoZWlnaHQgKyAxOworCXdtb3ZlKHdpbiwgeSwgeCk7CisJd3JlZnJlc2god2luKTsKKworCWlmICgoaGVpZ2h0IDwgaXRlbV9ubykgJiYgKHNjcm9sbCArIGhlaWdodCA8IGl0ZW1fbm8pKSB7CisJCXdhdHRyc2V0KHdpbiwgZGxnLmRhcnJvdy5hdHIpOworCQl3YWRkY2god2luLCBBQ1NfREFSUk9XKTsKKwkJd2FkZHN0cih3aW4sICIoKykiKTsKKwl9IGVsc2UgeworCQl3YXR0cnNldCh3aW4sIGRsZy5tZW51Ym94X2JvcmRlci5hdHIpOworCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOworCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOworCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOworCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOworCX0KKworCXdtb3ZlKHdpbiwgY3VyX3ksIGN1cl94KTsKKwl3cmVmcmVzaCh3aW4pOworfQorCisvKgorICogRGlzcGxheSB0aGUgdGVybWluYXRpb24gYnV0dG9ucy4KKyAqLworc3RhdGljIHZvaWQgcHJpbnRfYnV0dG9ucyhXSU5ET1cgKiB3aW4sIGludCBoZWlnaHQsIGludCB3aWR0aCwgaW50IHNlbGVjdGVkKQoreworCWludCB4ID0gd2lkdGggLyAyIC0gMTY7CisJaW50IHkgPSBoZWlnaHQgLSAyOworCisJcHJpbnRfYnV0dG9uKHdpbiwgZ2V0dGV4dCgiU2VsZWN0IiksIHksIHgsIHNlbGVjdGVkID09IDApOworCXByaW50X2J1dHRvbih3aW4sIGdldHRleHQoIiBFeGl0ICIpLCB5LCB4ICsgMTIsIHNlbGVjdGVkID09IDEpOworCXByaW50X2J1dHRvbih3aW4sIGdldHRleHQoIiBIZWxwICIpLCB5LCB4ICsgMjQsIHNlbGVjdGVkID09IDIpOworCisJd21vdmUod2luLCB5LCB4ICsgMSArIDEyICogc2VsZWN0ZWQpOworCXdyZWZyZXNoKHdpbik7Cit9CisKKy8qIHNjcm9sbCB1cCBuIGxpbmVzIChuIG1heSBiZSBuZWdhdGl2ZSkgKi8KK3N0YXRpYyB2b2lkIGRvX3Njcm9sbChXSU5ET1cgKndpbiwgaW50ICpzY3JvbGwsIGludCBuKQoreworCS8qIFNjcm9sbCBtZW51IHVwICovCisJc2Nyb2xsb2sod2luLCBUUlVFKTsKKwl3c2NybCh3aW4sIG4pOworCXNjcm9sbG9rKHdpbiwgRkFMU0UpOworCSpzY3JvbGwgPSAqc2Nyb2xsICsgbjsKKwl3cmVmcmVzaCh3aW4pOworfQorCisvKgorICogRGlzcGxheSBhIG1lbnUgZm9yIGNob29zaW5nIGFtb25nIGEgbnVtYmVyIG9mIG9wdGlvbnMKKyAqLworaW50IGRpYWxvZ19tZW51KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsCisgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqc2VsZWN0ZWQsIGludCAqc19zY3JvbGwpCit7CisJaW50IGksIGosIHgsIHksIGJveF94LCBib3hfeTsKKwlpbnQgaGVpZ2h0LCB3aWR0aCwgbWVudV9oZWlnaHQ7CisJaW50IGtleSA9IDAsIGJ1dHRvbiA9IDAsIHNjcm9sbCA9IDAsIGNob2ljZSA9IDA7CisJaW50IGZpcnN0X2l0ZW0gPSAgMCwgbWF4X2Nob2ljZTsKKwlXSU5ET1cgKmRpYWxvZywgKm1lbnU7CisKK2RvX3Jlc2l6ZToKKwloZWlnaHQgPSBnZXRtYXh5KHN0ZHNjcik7CisJd2lkdGggPSBnZXRtYXh4KHN0ZHNjcik7CisJaWYgKGhlaWdodCA8IDE1IHx8IHdpZHRoIDwgNjUpCisJCXJldHVybiAtRVJSRElTUExBWVRPT1NNQUxMOworCisJaGVpZ2h0IC09IDQ7CisJd2lkdGggIC09IDU7CisJbWVudV9oZWlnaHQgPSBoZWlnaHQgLSAxMDsKKworCW1heF9jaG9pY2UgPSBNSU4obWVudV9oZWlnaHQsIGl0ZW1fY291bnQoKSk7CisKKwkvKiBjZW50ZXIgZGlhbG9nIGJveCBvbiBzY3JlZW4gKi8KKwl4ID0gKENPTFMgLSB3aWR0aCkgLyAyOworCXkgPSAoTElORVMgLSBoZWlnaHQpIC8gMjsKKworCWRyYXdfc2hhZG93KHN0ZHNjciwgeSwgeCwgaGVpZ2h0LCB3aWR0aCk7CisKKwlkaWFsb2cgPSBuZXd3aW4oaGVpZ2h0LCB3aWR0aCwgeSwgeCk7CisJa2V5cGFkKGRpYWxvZywgVFJVRSk7CisKKwlkcmF3X2JveChkaWFsb2csIDAsIDAsIGhlaWdodCwgd2lkdGgsCisJCSBkbGcuZGlhbG9nLmF0ciwgZGxnLmJvcmRlci5hdHIpOworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmJvcmRlci5hdHIpOworCW12d2FkZGNoKGRpYWxvZywgaGVpZ2h0IC0gMywgMCwgQUNTX0xURUUpOworCWZvciAoaSA9IDA7IGkgPCB3aWR0aCAtIDI7IGkrKykKKwkJd2FkZGNoKGRpYWxvZywgQUNTX0hMSU5FKTsKKwl3YXR0cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsKKwl3YmtnZHNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyICYgQV9DT0xPUik7CisJd2FkZGNoKGRpYWxvZywgQUNTX1JURUUpOworCisJcHJpbnRfdGl0bGUoZGlhbG9nLCB0aXRsZSwgd2lkdGgpOworCisJd2F0dHJzZXQoZGlhbG9nLCBkbGcuZGlhbG9nLmF0cik7CisJcHJpbnRfYXV0b3dyYXAoZGlhbG9nLCBwcm9tcHQsIHdpZHRoIC0gMiwgMSwgMyk7CisKKwltZW51X3dpZHRoID0gd2lkdGggLSA2OworCWJveF95ID0gaGVpZ2h0IC0gbWVudV9oZWlnaHQgLSA1OworCWJveF94ID0gKHdpZHRoIC0gbWVudV93aWR0aCkgLyAyIC0gMTsKKworCS8qIGNyZWF0ZSBuZXcgd2luZG93IGZvciB0aGUgbWVudSAqLworCW1lbnUgPSBzdWJ3aW4oZGlhbG9nLCBtZW51X2hlaWdodCwgbWVudV93aWR0aCwKKwkJICAgICAgeSArIGJveF95ICsgMSwgeCArIGJveF94ICsgMSk7CisJa2V5cGFkKG1lbnUsIFRSVUUpOworCisJLyogZHJhdyBhIGJveCBhcm91bmQgdGhlIG1lbnUgaXRlbXMgKi8KKwlkcmF3X2JveChkaWFsb2csIGJveF95LCBib3hfeCwgbWVudV9oZWlnaHQgKyAyLCBtZW51X3dpZHRoICsgMiwKKwkJIGRsZy5tZW51Ym94X2JvcmRlci5hdHIsIGRsZy5tZW51Ym94LmF0cik7CisKKwlpZiAobWVudV93aWR0aCA+PSA4MCkKKwkJaXRlbV94ID0gKG1lbnVfd2lkdGggLSA3MCkgLyAyOworCWVsc2UKKwkJaXRlbV94ID0gNDsKKworCS8qIFNldCBjaG9pY2UgdG8gZGVmYXVsdCBpdGVtICovCisJaXRlbV9mb3JlYWNoKCkKKwkJaWYgKHNlbGVjdGVkICYmIChzZWxlY3RlZCA9PSBpdGVtX2RhdGEoKSkpCisJCQljaG9pY2UgPSBpdGVtX24oKTsKKwkvKiBnZXQgdGhlIHNhdmVkIHNjcm9sbCBpbmZvICovCisJc2Nyb2xsID0gKnNfc2Nyb2xsOworCWlmICgoc2Nyb2xsIDw9IGNob2ljZSkgJiYgKHNjcm9sbCArIG1heF9jaG9pY2UgPiBjaG9pY2UpICYmCisJICAgKHNjcm9sbCA+PSAwKSAmJiAoc2Nyb2xsICsgbWF4X2Nob2ljZSA8PSBpdGVtX2NvdW50KCkpKSB7CisJCWZpcnN0X2l0ZW0gPSBzY3JvbGw7CisJCWNob2ljZSA9IGNob2ljZSAtIHNjcm9sbDsKKwl9IGVsc2UgeworCQlzY3JvbGwgPSAwOworCX0KKwlpZiAoKGNob2ljZSA+PSBtYXhfY2hvaWNlKSkgeworCQlpZiAoY2hvaWNlID49IGl0ZW1fY291bnQoKSAtIG1heF9jaG9pY2UgLyAyKQorCQkJc2Nyb2xsID0gZmlyc3RfaXRlbSA9IGl0ZW1fY291bnQoKSAtIG1heF9jaG9pY2U7CisJCWVsc2UKKwkJCXNjcm9sbCA9IGZpcnN0X2l0ZW0gPSBjaG9pY2UgLSBtYXhfY2hvaWNlIC8gMjsKKwkJY2hvaWNlID0gY2hvaWNlIC0gc2Nyb2xsOworCX0KKworCS8qIFByaW50IHRoZSBtZW51ICovCisJZm9yIChpID0gMDsgaSA8IG1heF9jaG9pY2U7IGkrKykgeworCQlwcmludF9pdGVtKGZpcnN0X2l0ZW0gKyBpLCBpLCBpID09IGNob2ljZSk7CisJfQorCisJd25vdXRyZWZyZXNoKG1lbnUpOworCisJcHJpbnRfYXJyb3dzKGRpYWxvZywgaXRlbV9jb3VudCgpLCBzY3JvbGwsCisJCSAgICAgYm94X3ksIGJveF94ICsgaXRlbV94ICsgMSwgbWVudV9oZWlnaHQpOworCisJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIDApOworCXdtb3ZlKG1lbnUsIGNob2ljZSwgaXRlbV94ICsgMSk7CisJd3JlZnJlc2gobWVudSk7CisKKwl3aGlsZSAoa2V5ICE9IEtFWV9FU0MpIHsKKwkJa2V5ID0gd2dldGNoKG1lbnUpOworCisJCWlmIChrZXkgPCAyNTYgJiYgaXNhbHBoYShrZXkpKQorCQkJa2V5ID0gdG9sb3dlcihrZXkpOworCisJCWlmIChzdHJjaHIoInlubWgiLCBrZXkpKQorCQkJaSA9IG1heF9jaG9pY2U7CisJCWVsc2UgeworCQkJZm9yIChpID0gY2hvaWNlICsgMTsgaSA8IG1heF9jaG9pY2U7IGkrKykgeworCQkJCWl0ZW1fc2V0KHNjcm9sbCArIGkpOworCQkJCWogPSBmaXJzdF9hbHBoYShpdGVtX3N0cigpLCAiWXlObk1tSGgiKTsKKwkJCQlpZiAoa2V5ID09IHRvbG93ZXIoaXRlbV9zdHIoKVtqXSkpCisJCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGkgPT0gbWF4X2Nob2ljZSkKKwkJCQlmb3IgKGkgPSAwOyBpIDwgbWF4X2Nob2ljZTsgaSsrKSB7CisJCQkJCWl0ZW1fc2V0KHNjcm9sbCArIGkpOworCQkJCQlqID0gZmlyc3RfYWxwaGEoaXRlbV9zdHIoKSwgIll5Tm5NbUhoIik7CisJCQkJCWlmIChrZXkgPT0gdG9sb3dlcihpdGVtX3N0cigpW2pdKSkKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJfQorCisJCWlmIChpIDwgbWF4X2Nob2ljZSB8fAorCQkgICAga2V5ID09IEtFWV9VUCB8fCBrZXkgPT0gS0VZX0RPV04gfHwKKwkJICAgIGtleSA9PSAnLScgfHwga2V5ID09ICcrJyB8fAorCQkgICAga2V5ID09IEtFWV9QUEFHRSB8fCBrZXkgPT0gS0VZX05QQUdFKSB7CisJCQkvKiBSZW1vdmUgaGlnaGxpZ3Qgb2YgY3VycmVudCBpdGVtICovCisJCQlwcmludF9pdGVtKHNjcm9sbCArIGNob2ljZSwgY2hvaWNlLCBGQUxTRSk7CisKKwkJCWlmIChrZXkgPT0gS0VZX1VQIHx8IGtleSA9PSAnLScpIHsKKwkJCQlpZiAoY2hvaWNlIDwgMiAmJiBzY3JvbGwpIHsKKwkJCQkJLyogU2Nyb2xsIG1lbnUgZG93biAqLworCQkJCQlkb19zY3JvbGwobWVudSwgJnNjcm9sbCwgLTEpOworCisJCQkJCXByaW50X2l0ZW0oc2Nyb2xsLCAwLCBGQUxTRSk7CisJCQkJfSBlbHNlCisJCQkJCWNob2ljZSA9IE1BWChjaG9pY2UgLSAxLCAwKTsKKworCQkJfSBlbHNlIGlmIChrZXkgPT0gS0VZX0RPV04gfHwga2V5ID09ICcrJykgeworCQkJCXByaW50X2l0ZW0oc2Nyb2xsK2Nob2ljZSwgY2hvaWNlLCBGQUxTRSk7CisKKwkJCQlpZiAoKGNob2ljZSA+IG1heF9jaG9pY2UgLSAzKSAmJgorCQkJCSAgICAoc2Nyb2xsICsgbWF4X2Nob2ljZSA8IGl0ZW1fY291bnQoKSkpIHsKKwkJCQkJLyogU2Nyb2xsIG1lbnUgdXAgKi8KKwkJCQkJZG9fc2Nyb2xsKG1lbnUsICZzY3JvbGwsIDEpOworCisJCQkJCXByaW50X2l0ZW0oc2Nyb2xsK21heF9jaG9pY2UgLSAxLAorCQkJCQkJICAgbWF4X2Nob2ljZSAtIDEsIEZBTFNFKTsKKwkJCQl9IGVsc2UKKwkJCQkJY2hvaWNlID0gTUlOKGNob2ljZSArIDEsIG1heF9jaG9pY2UgLSAxKTsKKworCQkJfSBlbHNlIGlmIChrZXkgPT0gS0VZX1BQQUdFKSB7CisJCQkJc2Nyb2xsb2sobWVudSwgVFJVRSk7CisJCQkJZm9yIChpID0gMDsgKGkgPCBtYXhfY2hvaWNlKTsgaSsrKSB7CisJCQkJCWlmIChzY3JvbGwgPiAwKSB7CisJCQkJCQlkb19zY3JvbGwobWVudSwgJnNjcm9sbCwgLTEpOworCQkJCQkJcHJpbnRfaXRlbShzY3JvbGwsIDAsIEZBTFNFKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWlmIChjaG9pY2UgPiAwKQorCQkJCQkJCWNob2ljZS0tOworCQkJCQl9CisJCQkJfQorCisJCQl9IGVsc2UgaWYgKGtleSA9PSBLRVlfTlBBR0UpIHsKKwkJCQlmb3IgKGkgPSAwOyAoaSA8IG1heF9jaG9pY2UpOyBpKyspIHsKKwkJCQkJaWYgKHNjcm9sbCArIG1heF9jaG9pY2UgPCBpdGVtX2NvdW50KCkpIHsKKwkJCQkJCWRvX3Njcm9sbChtZW51LCAmc2Nyb2xsLCAxKTsKKwkJCQkJCXByaW50X2l0ZW0oc2Nyb2xsK21heF9jaG9pY2UtMSwKKwkJCQkJCQkgICBtYXhfY2hvaWNlIC0gMSwgRkFMU0UpOworCQkJCQl9IGVsc2UgeworCQkJCQkJaWYgKGNob2ljZSArIDEgPCBtYXhfY2hvaWNlKQorCQkJCQkJCWNob2ljZSsrOworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlCisJCQkJY2hvaWNlID0gaTsKKworCQkJcHJpbnRfaXRlbShzY3JvbGwgKyBjaG9pY2UsIGNob2ljZSwgVFJVRSk7CisKKwkJCXByaW50X2Fycm93cyhkaWFsb2csIGl0ZW1fY291bnQoKSwgc2Nyb2xsLAorCQkJCSAgICAgYm94X3ksIGJveF94ICsgaXRlbV94ICsgMSwgbWVudV9oZWlnaHQpOworCisJCQl3bm91dHJlZnJlc2goZGlhbG9nKTsKKwkJCXdyZWZyZXNoKG1lbnUpOworCisJCQljb250aW51ZTsJLyogd2FpdCBmb3IgYW5vdGhlciBrZXkgcHJlc3MgKi8KKwkJfQorCisJCXN3aXRjaCAoa2V5KSB7CisJCWNhc2UgS0VZX0xFRlQ6CisJCWNhc2UgVEFCOgorCQljYXNlIEtFWV9SSUdIVDoKKwkJCWJ1dHRvbiA9ICgoa2V5ID09IEtFWV9MRUZUID8gLS1idXR0b24gOiArK2J1dHRvbikgPCAwKQorCQkJICAgID8gMiA6IChidXR0b24gPiAyID8gMCA6IGJ1dHRvbik7CisKKwkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCBidXR0b24pOworCQkJd3JlZnJlc2gobWVudSk7CisJCQlicmVhazsKKwkJY2FzZSAnICc6CisJCWNhc2UgJ3MnOgorCQljYXNlICd5JzoKKwkJY2FzZSAnbic6CisJCWNhc2UgJ20nOgorCQljYXNlICcvJzoKKwkJY2FzZSAnaCc6CisJCWNhc2UgJz8nOgorCQljYXNlICd6JzoKKwkJY2FzZSAnXG4nOgorCQkJLyogc2F2ZSBzY3JvbGwgaW5mbyAqLworCQkJKnNfc2Nyb2xsID0gc2Nyb2xsOworCQkJZGVsd2luKG1lbnUpOworCQkJZGVsd2luKGRpYWxvZyk7CisJCQlpdGVtX3NldChzY3JvbGwgKyBjaG9pY2UpOworCQkJaXRlbV9zZXRfc2VsZWN0ZWQoMSk7CisJCQlzd2l0Y2ggKGtleSkgeworCQkJY2FzZSAnaCc6CisJCQljYXNlICc/JzoKKwkJCQlyZXR1cm4gMjsKKwkJCWNhc2UgJ3MnOgorCQkJY2FzZSAneSc6CisJCQkJcmV0dXJuIDM7CisJCQljYXNlICduJzoKKwkJCQlyZXR1cm4gNDsKKwkJCWNhc2UgJ20nOgorCQkJCXJldHVybiA1OworCQkJY2FzZSAnICc6CisJCQkJcmV0dXJuIDY7CisJCQljYXNlICcvJzoKKwkJCQlyZXR1cm4gNzsKKwkJCWNhc2UgJ3onOgorCQkJCXJldHVybiA4OworCQkJY2FzZSAnXG4nOgorCQkJCXJldHVybiBidXR0b247CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAnZSc6CisJCWNhc2UgJ3gnOgorCQkJa2V5ID0gS0VZX0VTQzsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9FU0M6CisJCQlrZXkgPSBvbl9rZXlfZXNjKG1lbnUpOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX1JFU0laRToKKwkJCW9uX2tleV9yZXNpemUoKTsKKwkJCWRlbHdpbihtZW51KTsKKwkJCWRlbHdpbihkaWFsb2cpOworCQkJZ290byBkb19yZXNpemU7CisJCX0KKwl9CisJZGVsd2luKG1lbnUpOworCWRlbHdpbihkaWFsb2cpOworCXJldHVybiBrZXk7CQkvKiBFU0MgcHJlc3NlZCAqLworfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL2x4ZGlhbG9nL3RleHRib3guYyBiL2xpYi9jdC1uZy0xLjEzLjQva2NvbmZpZy9seGRpYWxvZy90ZXh0Ym94LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcwNDcxMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQva2NvbmZpZy9seGRpYWxvZy90ZXh0Ym94LmMKQEAgLTAsMCArMSwzOTEgQEAKKy8qCisgKiAgdGV4dGJveC5jIC0tIGltcGxlbWVudHMgdGhlIHRleHQgYm94CisgKgorICogIE9SSUdJTkFMIEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3MuY3Voay5oaykKKyAqICBNT0RJRklFRCBGT1IgTElOVVggS0VSTkVMIENPTkZJRyBCWTogV2lsbGlhbSBSb2FkY2FwIChyb2FkY2FwQGNmdy5jb20pCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSAiZGlhbG9nLmgiCisKK3N0YXRpYyB2b2lkIGJhY2tfbGluZXMoaW50IG4pOworc3RhdGljIHZvaWQgcHJpbnRfcGFnZShXSU5ET1cgKiB3aW4sIGludCBoZWlnaHQsIGludCB3aWR0aCk7CitzdGF0aWMgdm9pZCBwcmludF9saW5lKFdJTkRPVyAqIHdpbiwgaW50IHJvdywgaW50IHdpZHRoKTsKK3N0YXRpYyBjaGFyICpnZXRfbGluZSh2b2lkKTsKK3N0YXRpYyB2b2lkIHByaW50X3Bvc2l0aW9uKFdJTkRPVyAqIHdpbik7CisKK3N0YXRpYyBpbnQgaHNjcm9sbDsKK3N0YXRpYyBpbnQgYmVnaW5fcmVhY2hlZCwgZW5kX3JlYWNoZWQsIHBhZ2VfbGVuZ3RoOworc3RhdGljIGNvbnN0IGNoYXIgKmJ1ZjsKK3N0YXRpYyBjb25zdCBjaGFyICpwYWdlOworCisvKgorICogcmVmcmVzaCB3aW5kb3cgY29udGVudAorICovCitzdGF0aWMgdm9pZCByZWZyZXNoX3RleHRfYm94KFdJTkRPVyAqZGlhbG9nLCBXSU5ET1cgKmJveCwgaW50IGJveGgsIGludCBib3h3LAorCQkJCQkJCSAgaW50IGN1cl95LCBpbnQgY3VyX3gpCit7CisJcHJpbnRfcGFnZShib3gsIGJveGgsIGJveHcpOworCXByaW50X3Bvc2l0aW9uKGRpYWxvZyk7CisJd21vdmUoZGlhbG9nLCBjdXJfeSwgY3VyX3gpOwkvKiBSZXN0b3JlIGN1cnNvciBwb3NpdGlvbiAqLworCXdyZWZyZXNoKGRpYWxvZyk7Cit9CisKKworLyoKKyAqIERpc3BsYXkgdGV4dCBmcm9tIGEgZmlsZSBpbiBhIGRpYWxvZyBib3guCisgKi8KK2ludCBkaWFsb2dfdGV4dGJveChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqdGJ1ZiwKKwkJICAgaW50IGluaXRpYWxfaGVpZ2h0LCBpbnQgaW5pdGlhbF93aWR0aCkKK3sKKwlpbnQgaSwgeCwgeSwgY3VyX3gsIGN1cl95LCBrZXkgPSAwOworCWludCBoZWlnaHQsIHdpZHRoLCBib3hoLCBib3h3OworCWludCBwYXNzZWRfZW5kOworCVdJTkRPVyAqZGlhbG9nLCAqYm94OworCisJYmVnaW5fcmVhY2hlZCA9IDE7CisJZW5kX3JlYWNoZWQgPSAwOworCXBhZ2VfbGVuZ3RoID0gMDsKKwloc2Nyb2xsID0gMDsKKwlidWYgPSB0YnVmOworCXBhZ2UgPSBidWY7CS8qIHBhZ2UgaXMgcG9pbnRlciB0byBzdGFydCBvZiBwYWdlIHRvIGJlIGRpc3BsYXllZCAqLworCitkb19yZXNpemU6CisJZ2V0bWF4eXgoc3Rkc2NyLCBoZWlnaHQsIHdpZHRoKTsKKwlpZiAoaGVpZ2h0IDwgOCB8fCB3aWR0aCA8IDgpCisJCXJldHVybiAtRVJSRElTUExBWVRPT1NNQUxMOworCWlmIChpbml0aWFsX2hlaWdodCAhPSAwKQorCQloZWlnaHQgPSBpbml0aWFsX2hlaWdodDsKKwllbHNlCisJCWlmIChoZWlnaHQgPiA0KQorCQkJaGVpZ2h0IC09IDQ7CisJCWVsc2UKKwkJCWhlaWdodCA9IDA7CisJaWYgKGluaXRpYWxfd2lkdGggIT0gMCkKKwkJd2lkdGggPSBpbml0aWFsX3dpZHRoOworCWVsc2UKKwkJaWYgKHdpZHRoID4gNSkKKwkJCXdpZHRoIC09IDU7CisJCWVsc2UKKwkJCXdpZHRoID0gMDsKKworCS8qIGNlbnRlciBkaWFsb2cgYm94IG9uIHNjcmVlbiAqLworCXggPSAoQ09MUyAtIHdpZHRoKSAvIDI7CisJeSA9IChMSU5FUyAtIGhlaWdodCkgLyAyOworCisJZHJhd19zaGFkb3coc3Rkc2NyLCB5LCB4LCBoZWlnaHQsIHdpZHRoKTsKKworCWRpYWxvZyA9IG5ld3dpbihoZWlnaHQsIHdpZHRoLCB5LCB4KTsKKwlrZXlwYWQoZGlhbG9nLCBUUlVFKTsKKworCS8qIENyZWF0ZSB3aW5kb3cgZm9yIGJveCByZWdpb24sIHVzZWQgZm9yIHNjcm9sbGluZyB0ZXh0ICovCisJYm94aCA9IGhlaWdodCAtIDQ7CisJYm94dyA9IHdpZHRoIC0gMjsKKwlib3ggPSBzdWJ3aW4oZGlhbG9nLCBib3hoLCBib3h3LCB5ICsgMSwgeCArIDEpOworCXdhdHRyc2V0KGJveCwgZGxnLmRpYWxvZy5hdHIpOworCXdia2dkc2V0KGJveCwgZGxnLmRpYWxvZy5hdHIgJiBBX0NPTE9SKTsKKworCWtleXBhZChib3gsIFRSVUUpOworCisJLyogcmVnaXN0ZXIgdGhlIG5ldyB3aW5kb3csIGFsb25nIHdpdGggaXRzIGJvcmRlcnMgKi8KKwlkcmF3X2JveChkaWFsb2csIDAsIDAsIGhlaWdodCwgd2lkdGgsCisJCSBkbGcuZGlhbG9nLmF0ciwgZGxnLmJvcmRlci5hdHIpOworCisJd2F0dHJzZXQoZGlhbG9nLCBkbGcuYm9yZGVyLmF0cik7CisJbXZ3YWRkY2goZGlhbG9nLCBoZWlnaHQgLSAzLCAwLCBBQ1NfTFRFRSk7CisJZm9yIChpID0gMDsgaSA8IHdpZHRoIC0gMjsgaSsrKQorCQl3YWRkY2goZGlhbG9nLCBBQ1NfSExJTkUpOworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmRpYWxvZy5hdHIpOworCXdia2dkc2V0KGRpYWxvZywgZGxnLmRpYWxvZy5hdHIgJiBBX0NPTE9SKTsKKwl3YWRkY2goZGlhbG9nLCBBQ1NfUlRFRSk7CisKKwlwcmludF90aXRsZShkaWFsb2csIHRpdGxlLCB3aWR0aCk7CisKKwlwcmludF9idXR0b24oZGlhbG9nLCBnZXR0ZXh0KCIgRXhpdCAiKSwgaGVpZ2h0IC0gMiwgd2lkdGggLyAyIC0gNCwgVFJVRSk7CisJd25vdXRyZWZyZXNoKGRpYWxvZyk7CisJZ2V0eXgoZGlhbG9nLCBjdXJfeSwgY3VyX3gpOwkvKiBTYXZlIGN1cnNvciBwb3NpdGlvbiAqLworCisJLyogUHJpbnQgZmlyc3QgcGFnZSBvZiB0ZXh0ICovCisJYXR0cl9jbGVhcihib3gsIGJveGgsIGJveHcsIGRsZy5kaWFsb2cuYXRyKTsKKwlyZWZyZXNoX3RleHRfYm94KGRpYWxvZywgYm94LCBib3hoLCBib3h3LCBjdXJfeSwgY3VyX3gpOworCisJd2hpbGUgKChrZXkgIT0gS0VZX0VTQykgJiYgKGtleSAhPSAnXG4nKSkgeworCQlrZXkgPSB3Z2V0Y2goZGlhbG9nKTsKKwkJc3dpdGNoIChrZXkpIHsKKwkJY2FzZSAnRSc6CS8qIEV4aXQgKi8KKwkJY2FzZSAnZSc6CisJCWNhc2UgJ1gnOgorCQljYXNlICd4JzoKKwkJCWRlbHdpbihib3gpOworCQkJZGVsd2luKGRpYWxvZyk7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAnZyc6CS8qIEZpcnN0IHBhZ2UgKi8KKwkJY2FzZSBLRVlfSE9NRToKKwkJCWlmICghYmVnaW5fcmVhY2hlZCkgeworCQkJCWJlZ2luX3JlYWNoZWQgPSAxOworCQkJCXBhZ2UgPSBidWY7CisJCQkJcmVmcmVzaF90ZXh0X2JveChkaWFsb2csIGJveCwgYm94aCwgYm94dywKKwkJCQkJCSBjdXJfeSwgY3VyX3gpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ0cnOgkvKiBMYXN0IHBhZ2UgKi8KKwkJY2FzZSBLRVlfRU5EOgorCisJCQllbmRfcmVhY2hlZCA9IDE7CisJCQkvKiBwb2ludCB0byBsYXN0IGNoYXIgaW4gYnVmICovCisJCQlwYWdlID0gYnVmICsgc3RybGVuKGJ1Zik7CisJCQliYWNrX2xpbmVzKGJveGgpOworCQkJcmVmcmVzaF90ZXh0X2JveChkaWFsb2csIGJveCwgYm94aCwgYm94dywKKwkJCQkJIGN1cl95LCBjdXJfeCk7CisJCQlicmVhazsKKwkJY2FzZSAnSyc6CS8qIFByZXZpb3VzIGxpbmUgKi8KKwkJY2FzZSAnayc6CisJCWNhc2UgS0VZX1VQOgorCQkJaWYgKCFiZWdpbl9yZWFjaGVkKSB7CisJCQkJYmFja19saW5lcyhwYWdlX2xlbmd0aCArIDEpOworCisJCQkJLyogV2UgZG9uJ3QgY2FsbCBwcmludF9wYWdlKCkgaGVyZSBidXQgdXNlCisJCQkJICogc2Nyb2xsaW5nIHRvIGVuc3VyZSBmYXN0ZXIgc2NyZWVuIHVwZGF0ZS4KKwkJCQkgKiBIb3dldmVyLCAnZW5kX3JlYWNoZWQnIGFuZCAncGFnZV9sZW5ndGgnCisJCQkJICogc2hvdWxkIHN0aWxsIGJlIHVwZGF0ZWQsIGFuZCAncGFnZScgc2hvdWxkCisJCQkJICogcG9pbnQgdG8gc3RhcnQgb2YgbmV4dCBwYWdlLiBUaGlzIGlzIGRvbmUKKwkJCQkgKiBieSBjYWxsaW5nIGdldF9saW5lKCkgaW4gdGhlIGZvbGxvd2luZworCQkJCSAqICdmb3InIGxvb3AuICovCisJCQkJc2Nyb2xsb2soYm94LCBUUlVFKTsKKwkJCQl3c2NybChib3gsIC0xKTsJLyogU2Nyb2xsIGJveCByZWdpb24gZG93biBvbmUgbGluZSAqLworCQkJCXNjcm9sbG9rKGJveCwgRkFMU0UpOworCQkJCXBhZ2VfbGVuZ3RoID0gMDsKKwkJCQlwYXNzZWRfZW5kID0gMDsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgYm94aDsgaSsrKSB7CisJCQkJCWlmICghaSkgeworCQkJCQkJLyogcHJpbnQgZmlyc3QgbGluZSBvZiBwYWdlICovCisJCQkJCQlwcmludF9saW5lKGJveCwgMCwgYm94dyk7CisJCQkJCQl3bm91dHJlZnJlc2goYm94KTsKKwkJCQkJfSBlbHNlCisJCQkJCQkvKiBDYWxsZWQgdG8gdXBkYXRlICdlbmRfcmVhY2hlZCcgYW5kICdwYWdlJyAqLworCQkJCQkJZ2V0X2xpbmUoKTsKKwkJCQkJaWYgKCFwYXNzZWRfZW5kKQorCQkJCQkJcGFnZV9sZW5ndGgrKzsKKwkJCQkJaWYgKGVuZF9yZWFjaGVkICYmICFwYXNzZWRfZW5kKQorCQkJCQkJcGFzc2VkX2VuZCA9IDE7CisJCQkJfQorCisJCQkJcHJpbnRfcG9zaXRpb24oZGlhbG9nKTsKKwkJCQl3bW92ZShkaWFsb2csIGN1cl95LCBjdXJfeCk7CS8qIFJlc3RvcmUgY3Vyc29yIHBvc2l0aW9uICovCisJCQkJd3JlZnJlc2goZGlhbG9nKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdCJzoJLyogUHJldmlvdXMgcGFnZSAqLworCQljYXNlICdiJzoKKwkJY2FzZSBLRVlfUFBBR0U6CisJCQlpZiAoYmVnaW5fcmVhY2hlZCkKKwkJCQlicmVhazsKKwkJCWJhY2tfbGluZXMocGFnZV9sZW5ndGggKyBib3hoKTsKKwkJCXJlZnJlc2hfdGV4dF9ib3goZGlhbG9nLCBib3gsIGJveGgsIGJveHcsCisJCQkJCSBjdXJfeSwgY3VyX3gpOworCQkJYnJlYWs7CisJCWNhc2UgJ0onOgkvKiBOZXh0IGxpbmUgKi8KKwkJY2FzZSAnaic6CisJCWNhc2UgS0VZX0RPV046CisJCQlpZiAoIWVuZF9yZWFjaGVkKSB7CisJCQkJYmVnaW5fcmVhY2hlZCA9IDA7CisJCQkJc2Nyb2xsb2soYm94LCBUUlVFKTsKKwkJCQlzY3JvbGwoYm94KTsJLyogU2Nyb2xsIGJveCByZWdpb24gdXAgb25lIGxpbmUgKi8KKwkJCQlzY3JvbGxvayhib3gsIEZBTFNFKTsKKwkJCQlwcmludF9saW5lKGJveCwgYm94aCAtIDEsIGJveHcpOworCQkJCXdub3V0cmVmcmVzaChib3gpOworCQkJCXByaW50X3Bvc2l0aW9uKGRpYWxvZyk7CisJCQkJd21vdmUoZGlhbG9nLCBjdXJfeSwgY3VyX3gpOwkvKiBSZXN0b3JlIGN1cnNvciBwb3NpdGlvbiAqLworCQkJCXdyZWZyZXNoKGRpYWxvZyk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBLRVlfTlBBR0U6CS8qIE5leHQgcGFnZSAqLworCQljYXNlICcgJzoKKwkJCWlmIChlbmRfcmVhY2hlZCkKKwkJCQlicmVhazsKKworCQkJYmVnaW5fcmVhY2hlZCA9IDA7CisJCQlyZWZyZXNoX3RleHRfYm94KGRpYWxvZywgYm94LCBib3hoLCBib3h3LAorCQkJCQkgY3VyX3ksIGN1cl94KTsKKwkJCWJyZWFrOworCQljYXNlICcwJzoJLyogQmVnaW5uaW5nIG9mIGxpbmUgKi8KKwkJY2FzZSAnSCc6CS8qIFNjcm9sbCBsZWZ0ICovCisJCWNhc2UgJ2gnOgorCQljYXNlIEtFWV9MRUZUOgorCQkJaWYgKGhzY3JvbGwgPD0gMCkKKwkJCQlicmVhazsKKworCQkJaWYgKGtleSA9PSAnMCcpCisJCQkJaHNjcm9sbCA9IDA7CisJCQllbHNlCisJCQkJaHNjcm9sbC0tOworCQkJLyogUmVwcmludCBjdXJyZW50IHBhZ2UgdG8gc2Nyb2xsIGhvcml6b250YWxseSAqLworCQkJYmFja19saW5lcyhwYWdlX2xlbmd0aCk7CisJCQlyZWZyZXNoX3RleHRfYm94KGRpYWxvZywgYm94LCBib3hoLCBib3h3LAorCQkJCQkgY3VyX3ksIGN1cl94KTsKKwkJCWJyZWFrOworCQljYXNlICdMJzoJLyogU2Nyb2xsIHJpZ2h0ICovCisJCWNhc2UgJ2wnOgorCQljYXNlIEtFWV9SSUdIVDoKKwkJCWlmIChoc2Nyb2xsID49IE1BWF9MRU4pCisJCQkJYnJlYWs7CisJCQloc2Nyb2xsKys7CisJCQkvKiBSZXByaW50IGN1cnJlbnQgcGFnZSB0byBzY3JvbGwgaG9yaXpvbnRhbGx5ICovCisJCQliYWNrX2xpbmVzKHBhZ2VfbGVuZ3RoKTsKKwkJCXJlZnJlc2hfdGV4dF9ib3goZGlhbG9nLCBib3gsIGJveGgsIGJveHcsCisJCQkJCSBjdXJfeSwgY3VyX3gpOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX0VTQzoKKwkJCWtleSA9IG9uX2tleV9lc2MoZGlhbG9nKTsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9SRVNJWkU6CisJCQliYWNrX2xpbmVzKGhlaWdodCk7CisJCQlkZWx3aW4oYm94KTsKKwkJCWRlbHdpbihkaWFsb2cpOworCQkJb25fa2V5X3Jlc2l6ZSgpOworCQkJZ290byBkb19yZXNpemU7CisJCX0KKwl9CisJZGVsd2luKGJveCk7CisJZGVsd2luKGRpYWxvZyk7CisJcmV0dXJuIGtleTsJCS8qIEVTQyBwcmVzc2VkICovCit9CisKKy8qCisgKiBHbyBiYWNrICduJyBsaW5lcyBpbiB0ZXh0LiBDYWxsZWQgYnkgZGlhbG9nX3RleHRib3goKS4KKyAqICdwYWdlJyB3aWxsIGJlIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlIGRlc2lyZWQgbGluZSBpbiAnYnVmJy4KKyAqLworc3RhdGljIHZvaWQgYmFja19saW5lcyhpbnQgbikKK3sKKwlpbnQgaTsKKworCWJlZ2luX3JlYWNoZWQgPSAwOworCS8qIEdvIGJhY2sgJ24nIGxpbmVzICovCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlpZiAoKnBhZ2UgPT0gJ1wwJykgeworCQkJaWYgKGVuZF9yZWFjaGVkKSB7CisJCQkJZW5kX3JlYWNoZWQgPSAwOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCWlmIChwYWdlID09IGJ1ZikgeworCQkJYmVnaW5fcmVhY2hlZCA9IDE7CisJCQlyZXR1cm47CisJCX0KKwkJcGFnZS0tOworCQlkbyB7CisJCQlpZiAocGFnZSA9PSBidWYpIHsKKwkJCQliZWdpbl9yZWFjaGVkID0gMTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlwYWdlLS07CisJCX0gd2hpbGUgKCpwYWdlICE9ICdcbicpOworCQlwYWdlKys7CisJfQorfQorCisvKgorICogUHJpbnQgYSBuZXcgcGFnZSBvZiB0ZXh0LiBDYWxsZWQgYnkgZGlhbG9nX3RleHRib3goKS4KKyAqLworc3RhdGljIHZvaWQgcHJpbnRfcGFnZShXSU5ET1cgKiB3aW4sIGludCBoZWlnaHQsIGludCB3aWR0aCkKK3sKKwlpbnQgaSwgcGFzc2VkX2VuZCA9IDA7CisKKwlwYWdlX2xlbmd0aCA9IDA7CisJZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisJCXByaW50X2xpbmUod2luLCBpLCB3aWR0aCk7CisJCWlmICghcGFzc2VkX2VuZCkKKwkJCXBhZ2VfbGVuZ3RoKys7CisJCWlmIChlbmRfcmVhY2hlZCAmJiAhcGFzc2VkX2VuZCkKKwkJCXBhc3NlZF9lbmQgPSAxOworCX0KKwl3bm91dHJlZnJlc2god2luKTsKK30KKworLyoKKyAqIFByaW50IGEgbmV3IGxpbmUgb2YgdGV4dC4gQ2FsbGVkIGJ5IGRpYWxvZ190ZXh0Ym94KCkgYW5kIHByaW50X3BhZ2UoKS4KKyAqLworc3RhdGljIHZvaWQgcHJpbnRfbGluZShXSU5ET1cgKiB3aW4sIGludCByb3csIGludCB3aWR0aCkKK3sKKwlpbnQgeSwgeDsKKwljaGFyICpsaW5lOworCisJbGluZSA9IGdldF9saW5lKCk7CisJbGluZSArPSBNSU4oc3RybGVuKGxpbmUpLCBoc2Nyb2xsKTsJLyogU2Nyb2xsIGhvcml6b250YWxseSAqLworCXdtb3ZlKHdpbiwgcm93LCAwKTsJLyogbW92ZSBjdXJzb3IgdG8gY29ycmVjdCBsaW5lICovCisJd2FkZGNoKHdpbiwgJyAnKTsKKwl3YWRkbnN0cih3aW4sIGxpbmUsIE1JTihzdHJsZW4obGluZSksIHdpZHRoIC0gMikpOworCisJZ2V0eXgod2luLCB5LCB4KTsKKwkvKiBDbGVhciAncmVzaWR1ZScgb2YgcHJldmlvdXMgbGluZSAqLworI2lmIE9MRF9OQ1VSU0VTCisJeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IHdpZHRoIC0geDsgaSsrKQorCQkJd2FkZGNoKHdpbiwgJyAnKTsKKwl9CisjZWxzZQorCXdjbHJ0b2VvbCh3aW4pOworI2VuZGlmCit9CisKKy8qCisgKiBSZXR1cm4gY3VycmVudCBsaW5lIG9mIHRleHQuIENhbGxlZCBieSBkaWFsb2dfdGV4dGJveCgpIGFuZCBwcmludF9saW5lKCkuCisgKiAncGFnZScgc2hvdWxkIHBvaW50IHRvIHN0YXJ0IG9mIGN1cnJlbnQgbGluZSBiZWZvcmUgY2FsbGluZywgYW5kIHdpbGwgYmUKKyAqIHVwZGF0ZWQgdG8gcG9pbnQgdG8gc3RhcnQgb2YgbmV4dCBsaW5lLgorICovCitzdGF0aWMgY2hhciAqZ2V0X2xpbmUodm9pZCkKK3sKKwlpbnQgaSA9IDA7CisJc3RhdGljIGNoYXIgbGluZVtNQVhfTEVOICsgMV07CisKKwllbmRfcmVhY2hlZCA9IDA7CisJd2hpbGUgKCpwYWdlICE9ICdcbicpIHsKKwkJaWYgKCpwYWdlID09ICdcMCcpIHsKKwkJCWlmICghZW5kX3JlYWNoZWQpIHsKKwkJCQllbmRfcmVhY2hlZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSBpZiAoaSA8IE1BWF9MRU4pCisJCQlsaW5lW2krK10gPSAqKHBhZ2UrKyk7CisJCWVsc2UgeworCQkJLyogVHJ1bmNhdGUgbGluZXMgbG9uZ2VyIHRoYW4gTUFYX0xFTiBjaGFyYWN0ZXJzICovCisJCQlpZiAoaSA9PSBNQVhfTEVOKQorCQkJCWxpbmVbaSsrXSA9ICdcMCc7CisJCQlwYWdlKys7CisJCX0KKwl9CisJaWYgKGkgPD0gTUFYX0xFTikKKwkJbGluZVtpXSA9ICdcMCc7CisJaWYgKCFlbmRfcmVhY2hlZCkKKwkJcGFnZSsrOwkJLyogbW92ZSBwYXNzICdcbicgKi8KKworCXJldHVybiBsaW5lOworfQorCisvKgorICogUHJpbnQgY3VycmVudCBwb3NpdGlvbgorICovCitzdGF0aWMgdm9pZCBwcmludF9wb3NpdGlvbihXSU5ET1cgKiB3aW4pCit7CisJaW50IHBlcmNlbnQ7CisKKwl3YXR0cnNldCh3aW4sIGRsZy5wb3NpdGlvbl9pbmRpY2F0b3IuYXRyKTsKKwl3YmtnZHNldCh3aW4sIGRsZy5wb3NpdGlvbl9pbmRpY2F0b3IuYXRyICYgQV9DT0xPUik7CisJcGVyY2VudCA9IChwYWdlIC0gYnVmKSAqIDEwMCAvIHN0cmxlbihidWYpOworCXdtb3ZlKHdpbiwgZ2V0bWF4eSh3aW4pIC0gMywgZ2V0bWF4eCh3aW4pIC0gOSk7CisJd3ByaW50dyh3aW4sICIoJTNkJSUpIiwgcGVyY2VudCk7Cit9CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2tjb25maWcvbHhkaWFsb2cvdXRpbC5jIGIvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL2x4ZGlhbG9nL3V0aWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjM3NWFkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL2x4ZGlhbG9nL3V0aWwuYwpAQCAtMCwwICsxLDY1NyBAQAorLyoKKyAqICB1dGlsLmMKKyAqCisgKiAgT1JJR0lOQUwgQVVUSE9SOiBTYXZpbyBMYW0gKGxhbTgzNkBjcy5jdWhrLmhrKQorICogIE1PRElGSUVEIEZPUiBMSU5VWCBLRVJORUwgQ09ORklHIEJZOiBXaWxsaWFtIFJvYWRjYXAgKHJvYWRjYXBAY2Z3LmNvbSkKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqICBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2luY2x1ZGUgImRpYWxvZy5oIgorCitzdHJ1Y3QgZGlhbG9nX2luZm8gZGxnOworCitzdGF0aWMgdm9pZCBzZXRfbW9ub190aGVtZSh2b2lkKQoreworCWRsZy5zY3JlZW4uYXRyID0gQV9OT1JNQUw7CisJZGxnLnNoYWRvdy5hdHIgPSBBX05PUk1BTDsKKwlkbGcuZGlhbG9nLmF0ciA9IEFfTk9STUFMOworCWRsZy50aXRsZS5hdHIgPSBBX0JPTEQ7CisJZGxnLmJvcmRlci5hdHIgPSBBX05PUk1BTDsKKwlkbGcuYnV0dG9uX2FjdGl2ZS5hdHIgPSBBX1JFVkVSU0U7CisJZGxnLmJ1dHRvbl9pbmFjdGl2ZS5hdHIgPSBBX0RJTTsKKwlkbGcuYnV0dG9uX2tleV9hY3RpdmUuYXRyID0gQV9SRVZFUlNFOworCWRsZy5idXR0b25fa2V5X2luYWN0aXZlLmF0ciA9IEFfQk9MRDsKKwlkbGcuYnV0dG9uX2xhYmVsX2FjdGl2ZS5hdHIgPSBBX1JFVkVSU0U7CisJZGxnLmJ1dHRvbl9sYWJlbF9pbmFjdGl2ZS5hdHIgPSBBX05PUk1BTDsKKwlkbGcuaW5wdXRib3guYXRyID0gQV9OT1JNQUw7CisJZGxnLmlucHV0Ym94X2JvcmRlci5hdHIgPSBBX05PUk1BTDsKKwlkbGcuc2VhcmNoYm94LmF0ciA9IEFfTk9STUFMOworCWRsZy5zZWFyY2hib3hfdGl0bGUuYXRyID0gQV9CT0xEOworCWRsZy5zZWFyY2hib3hfYm9yZGVyLmF0ciA9IEFfTk9STUFMOworCWRsZy5wb3NpdGlvbl9pbmRpY2F0b3IuYXRyID0gQV9CT0xEOworCWRsZy5tZW51Ym94LmF0ciA9IEFfTk9STUFMOworCWRsZy5tZW51Ym94X2JvcmRlci5hdHIgPSBBX05PUk1BTDsKKwlkbGcuaXRlbS5hdHIgPSBBX05PUk1BTDsKKwlkbGcuaXRlbV9zZWxlY3RlZC5hdHIgPSBBX1JFVkVSU0U7CisJZGxnLnRhZy5hdHIgPSBBX0JPTEQ7CisJZGxnLnRhZ19zZWxlY3RlZC5hdHIgPSBBX1JFVkVSU0U7CisJZGxnLnRhZ19rZXkuYXRyID0gQV9CT0xEOworCWRsZy50YWdfa2V5X3NlbGVjdGVkLmF0ciA9IEFfUkVWRVJTRTsKKwlkbGcuY2hlY2suYXRyID0gQV9CT0xEOworCWRsZy5jaGVja19zZWxlY3RlZC5hdHIgPSBBX1JFVkVSU0U7CisJZGxnLnVhcnJvdy5hdHIgPSBBX0JPTEQ7CisJZGxnLmRhcnJvdy5hdHIgPSBBX0JPTEQ7Cit9CisKKyNkZWZpbmUgRExHX0NPTE9SKGRpYWxvZywgZiwgYiwgaCkgXAorZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZGxnLmRpYWxvZy5mZyA9IChmKTsgICAgICAgXAorCWRsZy5kaWFsb2cuYmcgPSAoYik7ICAgICAgIFwKKwlkbGcuZGlhbG9nLmhsID0gKGgpOyAgICAgICBcCit9IHdoaWxlICgwKQorCitzdGF0aWMgdm9pZCBzZXRfY2xhc3NpY190aGVtZSh2b2lkKQoreworCURMR19DT0xPUihzY3JlZW4sICAgICAgICAgICAgICAgIENPTE9SX0NZQU4sICAgQ09MT1JfQkxVRSwgICB0cnVlKTsKKwlETEdfQ09MT1Ioc2hhZG93LCAgICAgICAgICAgICAgICBDT0xPUl9CTEFDSywgIENPTE9SX0JMQUNLLCAgdHJ1ZSk7CisJRExHX0NPTE9SKGRpYWxvZywgICAgICAgICAgICAgICAgQ09MT1JfQkxBQ0ssICBDT0xPUl9XSElURSwgIGZhbHNlKTsKKwlETEdfQ09MT1IodGl0bGUsICAgICAgICAgICAgICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX1dISVRFLCAgdHJ1ZSk7CisJRExHX0NPTE9SKGJvcmRlciwgICAgICAgICAgICAgICAgQ09MT1JfV0hJVEUsICBDT0xPUl9XSElURSwgIHRydWUpOworCURMR19DT0xPUihidXR0b25fYWN0aXZlLCAgICAgICAgIENPTE9SX1dISVRFLCAgQ09MT1JfQkxVRSwgICB0cnVlKTsKKwlETEdfQ09MT1IoYnV0dG9uX2luYWN0aXZlLCAgICAgICBDT0xPUl9CTEFDSywgIENPTE9SX1dISVRFLCAgZmFsc2UpOworCURMR19DT0xPUihidXR0b25fa2V5X2FjdGl2ZSwgICAgIENPTE9SX1dISVRFLCAgQ09MT1JfQkxVRSwgICB0cnVlKTsKKwlETEdfQ09MT1IoYnV0dG9uX2tleV9pbmFjdGl2ZSwgICBDT0xPUl9SRUQsICAgIENPTE9SX1dISVRFLCAgZmFsc2UpOworCURMR19DT0xPUihidXR0b25fbGFiZWxfYWN0aXZlLCAgIENPTE9SX1lFTExPVywgQ09MT1JfQkxVRSwgICB0cnVlKTsKKwlETEdfQ09MT1IoYnV0dG9uX2xhYmVsX2luYWN0aXZlLCBDT0xPUl9CTEFDSywgIENPTE9SX1dISVRFLCAgdHJ1ZSk7CisJRExHX0NPTE9SKGlucHV0Ym94LCAgICAgICAgICAgICAgQ09MT1JfQkxBQ0ssICBDT0xPUl9XSElURSwgIGZhbHNlKTsKKwlETEdfQ09MT1IoaW5wdXRib3hfYm9yZGVyLCAgICAgICBDT0xPUl9CTEFDSywgIENPTE9SX1dISVRFLCAgZmFsc2UpOworCURMR19DT0xPUihzZWFyY2hib3gsICAgICAgICAgICAgIENPTE9SX0JMQUNLLCAgQ09MT1JfV0hJVEUsICBmYWxzZSk7CisJRExHX0NPTE9SKHNlYXJjaGJveF90aXRsZSwgICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9XSElURSwgIHRydWUpOworCURMR19DT0xPUihzZWFyY2hib3hfYm9yZGVyLCAgICAgIENPTE9SX1dISVRFLCAgQ09MT1JfV0hJVEUsICB0cnVlKTsKKwlETEdfQ09MT1IocG9zaXRpb25faW5kaWNhdG9yLCAgICBDT0xPUl9ZRUxMT1csIENPTE9SX1dISVRFLCAgdHJ1ZSk7CisJRExHX0NPTE9SKG1lbnVib3gsICAgICAgICAgICAgICAgQ09MT1JfQkxBQ0ssICBDT0xPUl9XSElURSwgIGZhbHNlKTsKKwlETEdfQ09MT1IobWVudWJveF9ib3JkZXIsICAgICAgICBDT0xPUl9XSElURSwgIENPTE9SX1dISVRFLCAgdHJ1ZSk7CisJRExHX0NPTE9SKGl0ZW0sICAgICAgICAgICAgICAgICAgQ09MT1JfQkxBQ0ssICBDT0xPUl9XSElURSwgIGZhbHNlKTsKKwlETEdfQ09MT1IoaXRlbV9zZWxlY3RlZCwgICAgICAgICBDT0xPUl9XSElURSwgIENPTE9SX0JMVUUsICAgdHJ1ZSk7CisJRExHX0NPTE9SKHRhZywgICAgICAgICAgICAgICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9XSElURSwgIHRydWUpOworCURMR19DT0xPUih0YWdfc2VsZWN0ZWQsICAgICAgICAgIENPTE9SX1lFTExPVywgQ09MT1JfQkxVRSwgICB0cnVlKTsKKwlETEdfQ09MT1IodGFnX2tleSwgICAgICAgICAgICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX1dISVRFLCAgdHJ1ZSk7CisJRExHX0NPTE9SKHRhZ19rZXlfc2VsZWN0ZWQsICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9CTFVFLCAgIHRydWUpOworCURMR19DT0xPUihjaGVjaywgICAgICAgICAgICAgICAgIENPTE9SX0JMQUNLLCAgQ09MT1JfV0hJVEUsICBmYWxzZSk7CisJRExHX0NPTE9SKGNoZWNrX3NlbGVjdGVkLCAgICAgICAgQ09MT1JfV0hJVEUsICBDT0xPUl9CTFVFLCAgIHRydWUpOworCURMR19DT0xPUih1YXJyb3csICAgICAgICAgICAgICAgIENPTE9SX0dSRUVOLCAgQ09MT1JfV0hJVEUsICB0cnVlKTsKKwlETEdfQ09MT1IoZGFycm93LCAgICAgICAgICAgICAgICBDT0xPUl9HUkVFTiwgIENPTE9SX1dISVRFLCAgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9ibGFja2JnX3RoZW1lKHZvaWQpCit7CisJRExHX0NPTE9SKHNjcmVlbiwgQ09MT1JfUkVELCAgIENPTE9SX0JMQUNLLCB0cnVlKTsKKwlETEdfQ09MT1Ioc2hhZG93LCBDT0xPUl9CTEFDSywgQ09MT1JfQkxBQ0ssIGZhbHNlKTsKKwlETEdfQ09MT1IoZGlhbG9nLCBDT0xPUl9XSElURSwgQ09MT1JfQkxBQ0ssIGZhbHNlKTsKKwlETEdfQ09MT1IodGl0bGUsICBDT0xPUl9SRUQsICAgQ09MT1JfQkxBQ0ssIGZhbHNlKTsKKwlETEdfQ09MT1IoYm9yZGVyLCBDT0xPUl9CTEFDSywgQ09MT1JfQkxBQ0ssIHRydWUpOworCisJRExHX0NPTE9SKGJ1dHRvbl9hY3RpdmUsICAgICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9SRUQsICAgZmFsc2UpOworCURMR19DT0xPUihidXR0b25faW5hY3RpdmUsICAgICAgIENPTE9SX1lFTExPVywgQ09MT1JfQkxBQ0ssIGZhbHNlKTsKKwlETEdfQ09MT1IoYnV0dG9uX2tleV9hY3RpdmUsICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX1JFRCwgICB0cnVlKTsKKwlETEdfQ09MT1IoYnV0dG9uX2tleV9pbmFjdGl2ZSwgICBDT0xPUl9SRUQsICAgIENPTE9SX0JMQUNLLCBmYWxzZSk7CisJRExHX0NPTE9SKGJ1dHRvbl9sYWJlbF9hY3RpdmUsICAgQ09MT1JfV0hJVEUsICBDT0xPUl9SRUQsICAgZmFsc2UpOworCURMR19DT0xPUihidXR0b25fbGFiZWxfaW5hY3RpdmUsIENPTE9SX0JMQUNLLCAgQ09MT1JfQkxBQ0ssIHRydWUpOworCisJRExHX0NPTE9SKGlucHV0Ym94LCAgICAgICAgIENPTE9SX1lFTExPVywgQ09MT1JfQkxBQ0ssIGZhbHNlKTsKKwlETEdfQ09MT1IoaW5wdXRib3hfYm9yZGVyLCAgQ09MT1JfWUVMTE9XLCBDT0xPUl9CTEFDSywgZmFsc2UpOworCisJRExHX0NPTE9SKHNlYXJjaGJveCwgICAgICAgIENPTE9SX1lFTExPVywgQ09MT1JfQkxBQ0ssIGZhbHNlKTsKKwlETEdfQ09MT1Ioc2VhcmNoYm94X3RpdGxlLCAgQ09MT1JfWUVMTE9XLCBDT0xPUl9CTEFDSywgdHJ1ZSk7CisJRExHX0NPTE9SKHNlYXJjaGJveF9ib3JkZXIsIENPTE9SX0JMQUNLLCAgQ09MT1JfQkxBQ0ssIHRydWUpOworCisJRExHX0NPTE9SKHBvc2l0aW9uX2luZGljYXRvciwgQ09MT1JfUkVELCBDT0xPUl9CTEFDSywgIGZhbHNlKTsKKworCURMR19DT0xPUihtZW51Ym94LCAgICAgICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX0JMQUNLLCBmYWxzZSk7CisJRExHX0NPTE9SKG1lbnVib3hfYm9yZGVyLCAgIENPTE9SX0JMQUNLLCAgQ09MT1JfQkxBQ0ssIHRydWUpOworCisJRExHX0NPTE9SKGl0ZW0sICAgICAgICAgICAgIENPTE9SX1dISVRFLCBDT0xPUl9CTEFDSywgZmFsc2UpOworCURMR19DT0xPUihpdGVtX3NlbGVjdGVkLCAgICBDT0xPUl9XSElURSwgQ09MT1JfUkVELCAgIGZhbHNlKTsKKworCURMR19DT0xPUih0YWcsICAgICAgICAgICAgICBDT0xPUl9SRUQsICAgIENPTE9SX0JMQUNLLCBmYWxzZSk7CisJRExHX0NPTE9SKHRhZ19zZWxlY3RlZCwgICAgIENPTE9SX1lFTExPVywgQ09MT1JfUkVELCAgIHRydWUpOworCURMR19DT0xPUih0YWdfa2V5LCAgICAgICAgICBDT0xPUl9SRUQsICAgIENPTE9SX0JMQUNLLCBmYWxzZSk7CisJRExHX0NPTE9SKHRhZ19rZXlfc2VsZWN0ZWQsIENPTE9SX1lFTExPVywgQ09MT1JfUkVELCAgIHRydWUpOworCisJRExHX0NPTE9SKGNoZWNrLCAgICAgICAgICAgIENPTE9SX1lFTExPVywgQ09MT1JfQkxBQ0ssIGZhbHNlKTsKKwlETEdfQ09MT1IoY2hlY2tfc2VsZWN0ZWQsICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9SRUQsICAgdHJ1ZSk7CisKKwlETEdfQ09MT1IodWFycm93LCBDT0xPUl9SRUQsIENPTE9SX0JMQUNLLCBmYWxzZSk7CisJRExHX0NPTE9SKGRhcnJvdywgQ09MT1JfUkVELCBDT0xPUl9CTEFDSywgZmFsc2UpOworfQorCitzdGF0aWMgdm9pZCBzZXRfYmx1ZXRpdGxlX3RoZW1lKHZvaWQpCit7CisJc2V0X2NsYXNzaWNfdGhlbWUoKTsKKwlETEdfQ09MT1IodGl0bGUsICAgICAgICAgICAgICAgQ09MT1JfQkxVRSwgICBDT0xPUl9XSElURSwgdHJ1ZSk7CisJRExHX0NPTE9SKGJ1dHRvbl9rZXlfYWN0aXZlLCAgIENPTE9SX1lFTExPVywgQ09MT1JfQkxVRSwgIHRydWUpOworCURMR19DT0xPUihidXR0b25fbGFiZWxfYWN0aXZlLCBDT0xPUl9XSElURSwgIENPTE9SX0JMVUUsICB0cnVlKTsKKwlETEdfQ09MT1Ioc2VhcmNoYm94X3RpdGxlLCAgICAgQ09MT1JfQkxVRSwgICBDT0xPUl9XSElURSwgdHJ1ZSk7CisJRExHX0NPTE9SKHBvc2l0aW9uX2luZGljYXRvciwgIENPTE9SX0JMVUUsICAgQ09MT1JfV0hJVEUsIHRydWUpOworCURMR19DT0xPUih0YWcsICAgICAgICAgICAgICAgICBDT0xPUl9CTFVFLCAgIENPTE9SX1dISVRFLCB0cnVlKTsKKwlETEdfQ09MT1IodGFnX2tleSwgICAgICAgICAgICAgQ09MT1JfQkxVRSwgICBDT0xPUl9XSElURSwgdHJ1ZSk7CisKK30KKworLyoKKyAqIFNlbGVjdCBjb2xvciB0aGVtZQorICovCitzdGF0aWMgaW50IHNldF90aGVtZShjb25zdCBjaGFyICp0aGVtZSkKK3sKKwlpbnQgdXNlX2NvbG9yID0gMTsKKwlpZiAoIXRoZW1lKQorCQlzZXRfYmx1ZXRpdGxlX3RoZW1lKCk7CisJZWxzZSBpZiAoc3RyY21wKHRoZW1lLCAiY2xhc3NpYyIpID09IDApCisJCXNldF9jbGFzc2ljX3RoZW1lKCk7CisJZWxzZSBpZiAoc3RyY21wKHRoZW1lLCAiYmx1ZXRpdGxlIikgPT0gMCkKKwkJc2V0X2JsdWV0aXRsZV90aGVtZSgpOworCWVsc2UgaWYgKHN0cmNtcCh0aGVtZSwgImJsYWNrYmciKSA9PSAwKQorCQlzZXRfYmxhY2tiZ190aGVtZSgpOworCWVsc2UgaWYgKHN0cmNtcCh0aGVtZSwgIm1vbm8iKSA9PSAwKQorCQl1c2VfY29sb3IgPSAwOworCisJcmV0dXJuIHVzZV9jb2xvcjsKK30KKworc3RhdGljIHZvaWQgaW5pdF9vbmVfY29sb3Ioc3RydWN0IGRpYWxvZ19jb2xvciAqY29sb3IpCit7CisJc3RhdGljIGludCBwYWlyID0gMDsKKworCXBhaXIrKzsKKwlpbml0X3BhaXIocGFpciwgY29sb3ItPmZnLCBjb2xvci0+YmcpOworCWlmIChjb2xvci0+aGwpCisJCWNvbG9yLT5hdHIgPSBBX0JPTEQgfCBDT0xPUl9QQUlSKHBhaXIpOworCWVsc2UKKwkJY29sb3ItPmF0ciA9IENPTE9SX1BBSVIocGFpcik7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfZGlhbG9nX2NvbG9ycyh2b2lkKQoreworCWluaXRfb25lX2NvbG9yKCZkbGcuc2NyZWVuKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLnNoYWRvdyk7CisJaW5pdF9vbmVfY29sb3IoJmRsZy5kaWFsb2cpOworCWluaXRfb25lX2NvbG9yKCZkbGcudGl0bGUpOworCWluaXRfb25lX2NvbG9yKCZkbGcuYm9yZGVyKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLmJ1dHRvbl9hY3RpdmUpOworCWluaXRfb25lX2NvbG9yKCZkbGcuYnV0dG9uX2luYWN0aXZlKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLmJ1dHRvbl9rZXlfYWN0aXZlKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLmJ1dHRvbl9rZXlfaW5hY3RpdmUpOworCWluaXRfb25lX2NvbG9yKCZkbGcuYnV0dG9uX2xhYmVsX2FjdGl2ZSk7CisJaW5pdF9vbmVfY29sb3IoJmRsZy5idXR0b25fbGFiZWxfaW5hY3RpdmUpOworCWluaXRfb25lX2NvbG9yKCZkbGcuaW5wdXRib3gpOworCWluaXRfb25lX2NvbG9yKCZkbGcuaW5wdXRib3hfYm9yZGVyKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLnNlYXJjaGJveCk7CisJaW5pdF9vbmVfY29sb3IoJmRsZy5zZWFyY2hib3hfdGl0bGUpOworCWluaXRfb25lX2NvbG9yKCZkbGcuc2VhcmNoYm94X2JvcmRlcik7CisJaW5pdF9vbmVfY29sb3IoJmRsZy5wb3NpdGlvbl9pbmRpY2F0b3IpOworCWluaXRfb25lX2NvbG9yKCZkbGcubWVudWJveCk7CisJaW5pdF9vbmVfY29sb3IoJmRsZy5tZW51Ym94X2JvcmRlcik7CisJaW5pdF9vbmVfY29sb3IoJmRsZy5pdGVtKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLml0ZW1fc2VsZWN0ZWQpOworCWluaXRfb25lX2NvbG9yKCZkbGcudGFnKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLnRhZ19zZWxlY3RlZCk7CisJaW5pdF9vbmVfY29sb3IoJmRsZy50YWdfa2V5KTsKKwlpbml0X29uZV9jb2xvcigmZGxnLnRhZ19rZXlfc2VsZWN0ZWQpOworCWluaXRfb25lX2NvbG9yKCZkbGcuY2hlY2spOworCWluaXRfb25lX2NvbG9yKCZkbGcuY2hlY2tfc2VsZWN0ZWQpOworCWluaXRfb25lX2NvbG9yKCZkbGcudWFycm93KTsKKwlpbml0X29uZV9jb2xvcigmZGxnLmRhcnJvdyk7Cit9CisKKy8qCisgKiBTZXR1cCBmb3IgY29sb3IgZGlzcGxheQorICovCitzdGF0aWMgdm9pZCBjb2xvcl9zZXR1cChjb25zdCBjaGFyICp0aGVtZSkKK3sKKwlpbnQgdXNlX2NvbG9yOworCisJdXNlX2NvbG9yID0gc2V0X3RoZW1lKHRoZW1lKTsKKwlpZiAodXNlX2NvbG9yICYmIGhhc19jb2xvcnMoKSkgeworCQlzdGFydF9jb2xvcigpOworCQlpbml0X2RpYWxvZ19jb2xvcnMoKTsKKwl9IGVsc2UKKwkJc2V0X21vbm9fdGhlbWUoKTsKK30KKworLyoKKyAqIFNldCB3aW5kb3cgdG8gYXR0cmlidXRlICdhdHRyJworICovCit2b2lkIGF0dHJfY2xlYXIoV0lORE9XICogd2luLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIGNodHlwZSBhdHRyKQoreworCWludCBpLCBqOworCisJd2F0dHJzZXQod2luLCBhdHRyKTsKKwlmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKKwkJd21vdmUod2luLCBpLCAwKTsKKwkJZm9yIChqID0gMDsgaiA8IHdpZHRoOyBqKyspCisJCQl3YWRkY2god2luLCAnICcpOworCX0KKwl0b3VjaHdpbih3aW4pOworfQorCit2b2lkIGRpYWxvZ19jbGVhcih2b2lkKQoreworCWF0dHJfY2xlYXIoc3Rkc2NyLCBMSU5FUywgQ09MUywgZGxnLnNjcmVlbi5hdHIpOworCS8qIERpc3BsYXkgYmFja2dyb3VuZCB0aXRsZSBpZiBpdCBleGlzdHMgLi4uIC0gU0xIICovCisJaWYgKGRsZy5iYWNrdGl0bGUgIT0gTlVMTCkgeworCQlpbnQgaTsKKworCQl3YXR0cnNldChzdGRzY3IsIGRsZy5zY3JlZW4uYXRyKTsKKwkJbXZ3YWRkc3RyKHN0ZHNjciwgMCwgMSwgKGNoYXIgKilkbGcuYmFja3RpdGxlKTsKKwkJd21vdmUoc3Rkc2NyLCAxLCAxKTsKKwkJZm9yIChpID0gMTsgaSA8IENPTFMgLSAxOyBpKyspCisJCQl3YWRkY2goc3Rkc2NyLCBBQ1NfSExJTkUpOworCX0KKwl3bm91dHJlZnJlc2goc3Rkc2NyKTsKK30KKworLyoKKyAqIERvIHNvbWUgaW5pdGlhbGl6YXRpb24gZm9yIGRpYWxvZworICovCitpbnQgaW5pdF9kaWFsb2coY29uc3QgY2hhciAqYmFja3RpdGxlKQoreworCWludCBoZWlnaHQsIHdpZHRoOworCisJaW5pdHNjcigpOwkJLyogSW5pdCBjdXJzZXMgKi8KKwlnZXRtYXh5eChzdGRzY3IsIGhlaWdodCwgd2lkdGgpOworCWlmIChoZWlnaHQgPCAxOSB8fCB3aWR0aCA8IDgwKSB7CisJCWVuZHdpbigpOworCQlyZXR1cm4gLUVSUkRJU1BMQVlUT09TTUFMTDsKKwl9CisKKwlkbGcuYmFja3RpdGxlID0gYmFja3RpdGxlOworCWNvbG9yX3NldHVwKGdldGVudigiTUVOVUNPTkZJR19DT0xPUiIpKTsKKworCWtleXBhZChzdGRzY3IsIFRSVUUpOworCWNicmVhaygpOworCW5vZWNobygpOworCWRpYWxvZ19jbGVhcigpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc2V0X2RpYWxvZ19iYWNrdGl0bGUoY29uc3QgY2hhciAqYmFja3RpdGxlKQoreworCWRsZy5iYWNrdGl0bGUgPSBiYWNrdGl0bGU7Cit9CisKKy8qCisgKiBFbmQgdXNpbmcgZGlhbG9nIGZ1bmN0aW9ucy4KKyAqLwordm9pZCBlbmRfZGlhbG9nKGludCB4LCBpbnQgeSkKK3sKKwkvKiBtb3ZlIGN1cnNvciBiYWNrIHRvIG9yaWdpbmFsIHBvc2l0aW9uICovCisJbW92ZSh5LCB4KTsKKwlyZWZyZXNoKCk7CisJZW5kd2luKCk7Cit9CisKKy8qIFByaW50IHRoZSB0aXRsZSBvZiB0aGUgZGlhbG9nLiBDZW50ZXIgdGhlIHRpdGxlIGFuZCB0cnVuY2F0ZQorICogdGlsZSBpZiB3aWRlciB0aGFuIGRpYWxvZyAoLSAyIGNoYXJzKS4KKyAqKi8KK3ZvaWQgcHJpbnRfdGl0bGUoV0lORE9XICpkaWFsb2csIGNvbnN0IGNoYXIgKnRpdGxlLCBpbnQgd2lkdGgpCit7CisJaWYgKHRpdGxlKSB7CisJCWludCB0bGVuID0gTUlOKHdpZHRoIC0gMiwgc3RybGVuKHRpdGxlKSk7CisJCXdhdHRyc2V0KGRpYWxvZywgZGxnLnRpdGxlLmF0cik7CisJCW12d2FkZGNoKGRpYWxvZywgMCwgKHdpZHRoIC0gdGxlbikgLyAyIC0gMSwgJyAnKTsKKwkJbXZ3YWRkbnN0cihkaWFsb2csIDAsICh3aWR0aCAtIHRsZW4pLzIsIHRpdGxlLCB0bGVuKTsKKwkJd2FkZGNoKGRpYWxvZywgJyAnKTsKKwl9Cit9CisKKy8qCisgKiBQcmludCBhIHN0cmluZyBvZiB0ZXh0IGluIGEgd2luZG93LCBhdXRvbWF0aWNhbGx5IHdyYXAgYXJvdW5kIHRvIHRoZQorICogbmV4dCBsaW5lIGlmIHRoZSBzdHJpbmcgaXMgdG9vIGxvbmcgdG8gZml0IG9uIG9uZSBsaW5lLiBOZXdsaW5lCisgKiBjaGFyYWN0ZXJzICdcbicgYXJlIHJlcGxhY2VkIGJ5IHNwYWNlcy4gIFdlIHN0YXJ0IG9uIGEgbmV3IGxpbmUKKyAqIGlmIHRoZXJlIGlzIG5vIHJvb20gZm9yIGF0IGxlYXN0IDQgbm9uYmxhbmtzIGZvbGxvd2luZyBhIGRvdWJsZS1zcGFjZS4KKyAqLwordm9pZCBwcmludF9hdXRvd3JhcChXSU5ET1cgKiB3aW4sIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IHdpZHRoLCBpbnQgeSwgaW50IHgpCit7CisJaW50IG5ld2wsIGN1cl94LCBjdXJfeTsKKwlpbnQgaSwgcHJvbXB0X2xlbiwgcm9vbSwgd2xlbjsKKwljaGFyIHRlbXBzdHJbTUFYX0xFTiArIDFdLCAqd29yZCwgKnNwLCAqc3AyOworCisJc3RyY3B5KHRlbXBzdHIsIHByb21wdCk7CisKKwlwcm9tcHRfbGVuID0gc3RybGVuKHRlbXBzdHIpOworCisJLyoKKwkgKiBSZW1vdmUgbmV3bGluZXMKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcHJvbXB0X2xlbjsgaSsrKSB7CisJCWlmICh0ZW1wc3RyW2ldID09ICdcbicpCisJCQl0ZW1wc3RyW2ldID0gJyAnOworCX0KKworCWlmIChwcm9tcHRfbGVuIDw9IHdpZHRoIC0geCAqIDIpIHsJLyogSWYgcHJvbXB0IGlzIHNob3J0ICovCisJCXdtb3ZlKHdpbiwgeSwgKHdpZHRoIC0gcHJvbXB0X2xlbikgLyAyKTsKKwkJd2FkZHN0cih3aW4sIHRlbXBzdHIpOworCX0gZWxzZSB7CisJCWN1cl94ID0geDsKKwkJY3VyX3kgPSB5OworCQluZXdsID0gMTsKKwkJd29yZCA9IHRlbXBzdHI7CisJCXdoaWxlICh3b3JkICYmICp3b3JkKSB7CisJCQlzcCA9IHN0cmNocih3b3JkLCAnICcpOworCQkJaWYgKHNwKQorCQkJCSpzcCsrID0gMDsKKworCQkJLyogV3JhcCB0byBuZXh0IGxpbmUgaWYgZWl0aGVyIHRoZSB3b3JkIGRvZXMgbm90IGZpdCwKKwkJCSAgIG9yIGl0IGlzIHRoZSBmaXJzdCB3b3JkIG9mIGEgbmV3IHNlbnRlbmNlLCBhbmQgaXQgaXMKKwkJCSAgIHNob3J0LCBhbmQgdGhlIG5leHQgd29yZCBkb2VzIG5vdCBmaXQuICovCisJCQlyb29tID0gd2lkdGggLSBjdXJfeDsKKwkJCXdsZW4gPSBzdHJsZW4od29yZCk7CisJCQlpZiAod2xlbiA+IHJvb20gfHwKKwkJCSAgICAobmV3bCAmJiB3bGVuIDwgNCAmJiBzcAorCQkJICAgICAmJiB3bGVuICsgMSArIHN0cmxlbihzcCkgPiByb29tCisJCQkgICAgICYmICghKHNwMiA9IHN0cmNocihzcCwgJyAnKSkKKwkJCQkgfHwgd2xlbiArIDEgKyAoc3AyIC0gc3ApID4gcm9vbSkpKSB7CisJCQkJY3VyX3krKzsKKwkJCQljdXJfeCA9IHg7CisJCQl9CisJCQl3bW92ZSh3aW4sIGN1cl95LCBjdXJfeCk7CisJCQl3YWRkc3RyKHdpbiwgd29yZCk7CisJCQlnZXR5eCh3aW4sIGN1cl95LCBjdXJfeCk7CisJCQljdXJfeCsrOworCQkJaWYgKHNwICYmICpzcCA9PSAnICcpIHsKKwkJCQljdXJfeCsrOwkvKiBkb3VibGUgc3BhY2UgKi8KKwkJCQl3aGlsZSAoKisrc3AgPT0gJyAnKSA7CisJCQkJbmV3bCA9IDE7CisJCQl9IGVsc2UKKwkJCQluZXdsID0gMDsKKwkJCXdvcmQgPSBzcDsKKwkJfQorCX0KK30KKworLyoKKyAqIFByaW50IGEgYnV0dG9uCisgKi8KK3ZvaWQgcHJpbnRfYnV0dG9uKFdJTkRPVyAqIHdpbiwgY29uc3QgY2hhciAqbGFiZWwsIGludCB5LCBpbnQgeCwgaW50IHNlbGVjdGVkKQoreworCWludCBpLCB0ZW1wOworCisJd21vdmUod2luLCB5LCB4KTsKKwl3YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gZGxnLmJ1dHRvbl9hY3RpdmUuYXRyCisJCSA6IGRsZy5idXR0b25faW5hY3RpdmUuYXRyKTsKKwl3YWRkc3RyKHdpbiwgIjwiKTsKKwl0ZW1wID0gc3Ryc3BuKGxhYmVsLCAiICIpOworCWxhYmVsICs9IHRlbXA7CisJd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/IGRsZy5idXR0b25fbGFiZWxfYWN0aXZlLmF0cgorCQkgOiBkbGcuYnV0dG9uX2xhYmVsX2luYWN0aXZlLmF0cik7CisJZm9yIChpID0gMDsgaSA8IHRlbXA7IGkrKykKKwkJd2FkZGNoKHdpbiwgJyAnKTsKKwl3YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gZGxnLmJ1dHRvbl9rZXlfYWN0aXZlLmF0cgorCQkgOiBkbGcuYnV0dG9uX2tleV9pbmFjdGl2ZS5hdHIpOworCXdhZGRjaCh3aW4sIGxhYmVsWzBdKTsKKwl3YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gZGxnLmJ1dHRvbl9sYWJlbF9hY3RpdmUuYXRyCisJCSA6IGRsZy5idXR0b25fbGFiZWxfaW5hY3RpdmUuYXRyKTsKKwl3YWRkc3RyKHdpbiwgKGNoYXIgKilsYWJlbCArIDEpOworCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcuYnV0dG9uX2FjdGl2ZS5hdHIKKwkJIDogZGxnLmJ1dHRvbl9pbmFjdGl2ZS5hdHIpOworCXdhZGRzdHIod2luLCAiPiIpOworCXdtb3ZlKHdpbiwgeSwgeCArIHRlbXAgKyAxKTsKK30KKworLyoKKyAqIERyYXcgYSByZWN0YW5ndWxhciBib3ggd2l0aCBsaW5lIGRyYXdpbmcgY2hhcmFjdGVycworICovCit2b2lkCitkcmF3X2JveChXSU5ET1cgKiB3aW4sIGludCB5LCBpbnQgeCwgaW50IGhlaWdodCwgaW50IHdpZHRoLAorCSBjaHR5cGUgYm94LCBjaHR5cGUgYm9yZGVyKQoreworCWludCBpLCBqOworCisJd2F0dHJzZXQod2luLCAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKKwkJd21vdmUod2luLCB5ICsgaSwgeCk7CisJCWZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKQorCQkJaWYgKCFpICYmICFqKQorCQkJCXdhZGRjaCh3aW4sIGJvcmRlciB8IEFDU19VTENPUk5FUik7CisJCQllbHNlIGlmIChpID09IGhlaWdodCAtIDEgJiYgIWopCisJCQkJd2FkZGNoKHdpbiwgYm9yZGVyIHwgQUNTX0xMQ09STkVSKTsKKwkJCWVsc2UgaWYgKCFpICYmIGogPT0gd2lkdGggLSAxKQorCQkJCXdhZGRjaCh3aW4sIGJveCB8IEFDU19VUkNPUk5FUik7CisJCQllbHNlIGlmIChpID09IGhlaWdodCAtIDEgJiYgaiA9PSB3aWR0aCAtIDEpCisJCQkJd2FkZGNoKHdpbiwgYm94IHwgQUNTX0xSQ09STkVSKTsKKwkJCWVsc2UgaWYgKCFpKQorCQkJCXdhZGRjaCh3aW4sIGJvcmRlciB8IEFDU19ITElORSk7CisJCQllbHNlIGlmIChpID09IGhlaWdodCAtIDEpCisJCQkJd2FkZGNoKHdpbiwgYm94IHwgQUNTX0hMSU5FKTsKKwkJCWVsc2UgaWYgKCFqKQorCQkJCXdhZGRjaCh3aW4sIGJvcmRlciB8IEFDU19WTElORSk7CisJCQllbHNlIGlmIChqID09IHdpZHRoIC0gMSkKKwkJCQl3YWRkY2god2luLCBib3ggfCBBQ1NfVkxJTkUpOworCQkJZWxzZQorCQkJCXdhZGRjaCh3aW4sIGJveCB8ICcgJyk7CisJfQorfQorCisvKgorICogRHJhdyBzaGFkb3dzIGFsb25nIHRoZSByaWdodCBhbmQgYm90dG9tIGVkZ2UgdG8gZ2l2ZSBhIG1vcmUgM0QgbG9vaworICogdG8gdGhlIGJveGVzCisgKi8KK3ZvaWQgZHJhd19zaGFkb3coV0lORE9XICogd2luLCBpbnQgeSwgaW50IHgsIGludCBoZWlnaHQsIGludCB3aWR0aCkKK3sKKwlpbnQgaTsKKworCWlmIChoYXNfY29sb3JzKCkpIHsJLyogV2hldGhlciB0ZXJtaW5hbCBzdXBwb3J0cyBjb2xvcj8gKi8KKwkJd2F0dHJzZXQod2luLCBkbGcuc2hhZG93LmF0cik7CisJCXdtb3ZlKHdpbiwgeSArIGhlaWdodCwgeCArIDIpOworCQlmb3IgKGkgPSAwOyBpIDwgd2lkdGg7IGkrKykKKwkJCXdhZGRjaCh3aW4sIHdpbmNoKHdpbikgJiBBX0NIQVJURVhUKTsKKwkJZm9yIChpID0geSArIDE7IGkgPCB5ICsgaGVpZ2h0ICsgMTsgaSsrKSB7CisJCQl3bW92ZSh3aW4sIGksIHggKyB3aWR0aCk7CisJCQl3YWRkY2god2luLCB3aW5jaCh3aW4pICYgQV9DSEFSVEVYVCk7CisJCQl3YWRkY2god2luLCB3aW5jaCh3aW4pICYgQV9DSEFSVEVYVCk7CisJCX0KKwkJd25vdXRyZWZyZXNoKHdpbik7CisJfQorfQorCisvKgorICogIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGFscGhhYmV0aWMgY2hhcmFjdGVyIGluIGEgc3RyaW5nLgorICovCitpbnQgZmlyc3RfYWxwaGEoY29uc3QgY2hhciAqc3RyaW5nLCBjb25zdCBjaGFyICpleGVtcHQpCit7CisJaW50IGksIGluX3BhcmVuID0gMCwgYzsKKworCWZvciAoaSA9IDA7IGkgPCBzdHJsZW4oc3RyaW5nKTsgaSsrKSB7CisJCWMgPSB0b2xvd2VyKHN0cmluZ1tpXSk7CisKKwkJaWYgKHN0cmNocigiPFsoIiwgYykpCisJCQkrK2luX3BhcmVuOworCQlpZiAoc3RyY2hyKCI+XSkiLCBjKSAmJiBpbl9wYXJlbiA+IDApCisJCQktLWluX3BhcmVuOworCisJCWlmICgoIWluX3BhcmVuKSAmJiBpc2FscGhhKGMpICYmIHN0cmNocihleGVtcHQsIGMpID09IDApCisJCQlyZXR1cm4gaTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIG5jdXJzZXMgdXNlcyBFU0MgdG8gZGV0ZWN0IGVzY2FwZWQgY2hhciBzZXF1ZW5jZXMuIFRoaXMgcmVzdXRsIGluCisgKiBhIHNtYWxsIHRpbWVvdXQgYmVmb3JlIEVTQyBpcyBhY3R1YWxseSBkZWxpdmVyZWQgdG8gdGhlIGFwcGxpY2F0aW9uLgorICogbHhkaWFsb2cgc3VnZ2VzdCA8RVNDPiA8RVNDPiB3aGljaCBpcyBjb3JyZWN0bHkgdHJhbnNsYXRlZCB0byB0d28KKyAqIHRpbWVzIGVzYy4gQnV0IHRoZW4gd2UgbmVlZCB0byBpZ25vcmUgdGhlIHNlY29uZCBlc2MgdG8gYXZvaWQgc3RlcHBpbmcKKyAqIG91dCBvbmUgbWVudSB0b28gbXVjaC4gRmlsdGVyIGF3YXkgYWxsIGVzY2FwZWQga2V5IHNlcXVlbmNlcyBzaW5jZQorICoga2V5cGFkKEZBTFNFKSB0dXJuIG9mZiBuY3Vyc2VzIHN1cHBvcnQgZm9yIGVzY2FwZSBzZXF1ZW5jZXMgLSBhbmQgdGhhdHMKKyAqIG5lZWRlZCB0byBtYWtlIG5vdGltZW91dCgpIGRvIGFzIGV4cGVjdGVkLgorICovCitpbnQgb25fa2V5X2VzYyhXSU5ET1cgKndpbikKK3sKKwlpbnQga2V5OworCWludCBrZXkyOworCWludCBrZXkzOworCisJbm9kZWxheSh3aW4sIFRSVUUpOworCWtleXBhZCh3aW4sIEZBTFNFKTsKKwlrZXkgPSB3Z2V0Y2god2luKTsKKwlrZXkyID0gd2dldGNoKHdpbik7CisJZG8geworCQlrZXkzID0gd2dldGNoKHdpbik7CisJfSB3aGlsZSAoa2V5MyAhPSBFUlIpOworCW5vZGVsYXkod2luLCBGQUxTRSk7CisJa2V5cGFkKHdpbiwgVFJVRSk7CisJaWYgKGtleSA9PSBLRVlfRVNDICYmIGtleTIgPT0gRVJSKQorCQlyZXR1cm4gS0VZX0VTQzsKKwllbHNlIGlmIChrZXkgIT0gRVJSICYmIGtleSAhPSBLRVlfRVNDICYmIGtleTIgPT0gRVJSKQorCQl1bmdldGNoKGtleSk7CisKKwlyZXR1cm4gLTE7Cit9CisKKy8qIHJlZHJhdyBzY3JlZW4gaW4gbmV3IHNpemUgKi8KK2ludCBvbl9rZXlfcmVzaXplKHZvaWQpCit7CisJZGlhbG9nX2NsZWFyKCk7CisJcmV0dXJuIEtFWV9SRVNJWkU7Cit9CisKK3N0cnVjdCBkaWFsb2dfbGlzdCAqaXRlbV9jdXI7CitzdHJ1Y3QgZGlhbG9nX2xpc3QgaXRlbV9uaWw7CitzdHJ1Y3QgZGlhbG9nX2xpc3QgKml0ZW1faGVhZDsKKwordm9pZCBpdGVtX3Jlc2V0KHZvaWQpCit7CisJc3RydWN0IGRpYWxvZ19saXN0ICpwLCAqbmV4dDsKKworCWZvciAocCA9IGl0ZW1faGVhZDsgcDsgcCA9IG5leHQpIHsKKwkJbmV4dCA9IHAtPm5leHQ7CisJCWZyZWUocCk7CisJfQorCWl0ZW1faGVhZCA9IE5VTEw7CisJaXRlbV9jdXIgPSAmaXRlbV9uaWw7Cit9CisKK3ZvaWQgaXRlbV9tYWtlKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJc3RydWN0IGRpYWxvZ19saXN0ICpwID0gbWFsbG9jKHNpemVvZigqcCkpOworCisJaWYgKGl0ZW1faGVhZCkKKwkJaXRlbV9jdXItPm5leHQgPSBwOworCWVsc2UKKwkJaXRlbV9oZWFkID0gcDsKKwlpdGVtX2N1ciA9IHA7CisJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJdnNucHJpbnRmKGl0ZW1fY3VyLT5ub2RlLnN0ciwgc2l6ZW9mKGl0ZW1fY3VyLT5ub2RlLnN0ciksIGZtdCwgYXApOworCXZhX2VuZChhcCk7Cit9CisKK3ZvaWQgaXRlbV9hZGRfc3RyKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisgICAgICAgIHNpemVfdCBhdmFpbDsKKworCWF2YWlsID0gc2l6ZW9mKGl0ZW1fY3VyLT5ub2RlLnN0cikgLSBzdHJsZW4oaXRlbV9jdXItPm5vZGUuc3RyKTsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZzbnByaW50ZihpdGVtX2N1ci0+bm9kZS5zdHIgKyBzdHJsZW4oaXRlbV9jdXItPm5vZGUuc3RyKSwKKwkJICBhdmFpbCwgZm10LCBhcCk7CisJaXRlbV9jdXItPm5vZGUuc3RyW3NpemVvZihpdGVtX2N1ci0+bm9kZS5zdHIpIC0gMV0gPSAnXDAnOworCXZhX2VuZChhcCk7Cit9CisKK3ZvaWQgaXRlbV9zZXRfdGFnKGNoYXIgdGFnKQoreworCWl0ZW1fY3VyLT5ub2RlLnRhZyA9IHRhZzsKK30KK3ZvaWQgaXRlbV9zZXRfZGF0YSh2b2lkICpwdHIpCit7CisJaXRlbV9jdXItPm5vZGUuZGF0YSA9IHB0cjsKK30KKwordm9pZCBpdGVtX3NldF9zZWxlY3RlZChpbnQgdmFsKQoreworCWl0ZW1fY3VyLT5ub2RlLnNlbGVjdGVkID0gdmFsOworfQorCitpbnQgaXRlbV9hY3RpdmF0ZV9zZWxlY3RlZCh2b2lkKQoreworCWl0ZW1fZm9yZWFjaCgpCisJCWlmIChpdGVtX2lzX3NlbGVjdGVkKCkpCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCAqaXRlbV9kYXRhKHZvaWQpCit7CisJcmV0dXJuIGl0ZW1fY3VyLT5ub2RlLmRhdGE7Cit9CisKK2NoYXIgaXRlbV90YWcodm9pZCkKK3sKKwlyZXR1cm4gaXRlbV9jdXItPm5vZGUudGFnOworfQorCitpbnQgaXRlbV9jb3VudCh2b2lkKQoreworCWludCBuID0gMDsKKwlzdHJ1Y3QgZGlhbG9nX2xpc3QgKnA7CisKKwlmb3IgKHAgPSBpdGVtX2hlYWQ7IHA7IHAgPSBwLT5uZXh0KQorCQluKys7CisJcmV0dXJuIG47Cit9CisKK3ZvaWQgaXRlbV9zZXQoaW50IG4pCit7CisJaW50IGkgPSAwOworCWl0ZW1fZm9yZWFjaCgpCisJCWlmIChpKysgPT0gbikKKwkJCXJldHVybjsKK30KKworaW50IGl0ZW1fbih2b2lkKQoreworCWludCBuID0gMDsKKwlzdHJ1Y3QgZGlhbG9nX2xpc3QgKnA7CisKKwlmb3IgKHAgPSBpdGVtX2hlYWQ7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChwID09IGl0ZW1fY3VyKQorCQkJcmV0dXJuIG47CisJCW4rKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IGNoYXIgKml0ZW1fc3RyKHZvaWQpCit7CisJcmV0dXJuIGl0ZW1fY3VyLT5ub2RlLnN0cjsKK30KKworaW50IGl0ZW1faXNfc2VsZWN0ZWQodm9pZCkKK3sKKwlyZXR1cm4gKGl0ZW1fY3VyLT5ub2RlLnNlbGVjdGVkICE9IDApOworfQorCitpbnQgaXRlbV9pc190YWcoY2hhciB0YWcpCit7CisJcmV0dXJuIChpdGVtX2N1ci0+bm9kZS50YWcgPT0gdGFnKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQva2NvbmZpZy9seGRpYWxvZy95ZXNuby5jIGIvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL2x4ZGlhbG9nL3llc25vLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU2ZTgwOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQva2NvbmZpZy9seGRpYWxvZy95ZXNuby5jCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogIHllc25vLmMgLS0gaW1wbGVtZW50cyB0aGUgeWVzL25vIGJveAorICoKKyAqICBPUklHSU5BTCBBVVRIT1I6IFNhdmlvIExhbSAobGFtODM2QGNzLmN1aGsuaGspCisgKiAgTU9ESUZJRUQgRk9SIExJTlVYIEtFUk5FTCBDT05GSUcgQlk6IFdpbGxpYW0gUm9hZGNhcCAocm9hZGNhcEBjZncuY29tKQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImRpYWxvZy5oIgorCisvKgorICogRGlzcGxheSB0ZXJtaW5hdGlvbiBidXR0b25zCisgKi8KK3N0YXRpYyB2b2lkIHByaW50X2J1dHRvbnMoV0lORE9XICogZGlhbG9nLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIGludCBzZWxlY3RlZCkKK3sKKwlpbnQgeCA9IHdpZHRoIC8gMiAtIDEwOworCWludCB5ID0gaGVpZ2h0IC0gMjsKKworCXByaW50X2J1dHRvbihkaWFsb2csIGdldHRleHQoIiBZZXMgIiksIHksIHgsIHNlbGVjdGVkID09IDApOworCXByaW50X2J1dHRvbihkaWFsb2csIGdldHRleHQoIiAgTm8gICIpLCB5LCB4ICsgMTMsIHNlbGVjdGVkID09IDEpOworCisJd21vdmUoZGlhbG9nLCB5LCB4ICsgMSArIDEzICogc2VsZWN0ZWQpOworCXdyZWZyZXNoKGRpYWxvZyk7Cit9CisKKy8qCisgKiBEaXNwbGF5IGEgZGlhbG9nIGJveCB3aXRoIHR3byBidXR0b25zIC0gWWVzIGFuZCBObworICovCitpbnQgZGlhbG9nX3llc25vKGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCBoZWlnaHQsIGludCB3aWR0aCkKK3sKKwlpbnQgaSwgeCwgeSwga2V5ID0gMCwgYnV0dG9uID0gMDsKKwlXSU5ET1cgKmRpYWxvZzsKKworZG9fcmVzaXplOgorCWlmIChnZXRtYXh5KHN0ZHNjcikgPCAoaGVpZ2h0ICsgNCkpCisJCXJldHVybiAtRVJSRElTUExBWVRPT1NNQUxMOworCWlmIChnZXRtYXh4KHN0ZHNjcikgPCAod2lkdGggKyA0KSkKKwkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01BTEw7CisKKwkvKiBjZW50ZXIgZGlhbG9nIGJveCBvbiBzY3JlZW4gKi8KKwl4ID0gKENPTFMgLSB3aWR0aCkgLyAyOworCXkgPSAoTElORVMgLSBoZWlnaHQpIC8gMjsKKworCWRyYXdfc2hhZG93KHN0ZHNjciwgeSwgeCwgaGVpZ2h0LCB3aWR0aCk7CisKKwlkaWFsb2cgPSBuZXd3aW4oaGVpZ2h0LCB3aWR0aCwgeSwgeCk7CisJa2V5cGFkKGRpYWxvZywgVFJVRSk7CisKKwlkcmF3X2JveChkaWFsb2csIDAsIDAsIGhlaWdodCwgd2lkdGgsCisJCSBkbGcuZGlhbG9nLmF0ciwgZGxnLmJvcmRlci5hdHIpOworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmJvcmRlci5hdHIpOworCW12d2FkZGNoKGRpYWxvZywgaGVpZ2h0IC0gMywgMCwgQUNTX0xURUUpOworCWZvciAoaSA9IDA7IGkgPCB3aWR0aCAtIDI7IGkrKykKKwkJd2FkZGNoKGRpYWxvZywgQUNTX0hMSU5FKTsKKwl3YXR0cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsKKwl3YWRkY2goZGlhbG9nLCBBQ1NfUlRFRSk7CisKKwlwcmludF90aXRsZShkaWFsb2csIHRpdGxlLCB3aWR0aCk7CisKKwl3YXR0cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsKKwlwcmludF9hdXRvd3JhcChkaWFsb2csIHByb21wdCwgd2lkdGggLSAyLCAxLCAzKTsKKworCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsKKworCXdoaWxlIChrZXkgIT0gS0VZX0VTQykgeworCQlrZXkgPSB3Z2V0Y2goZGlhbG9nKTsKKwkJc3dpdGNoIChrZXkpIHsKKwkJY2FzZSAnWSc6CisJCWNhc2UgJ3knOgorCQkJZGVsd2luKGRpYWxvZyk7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAnTic6CisJCWNhc2UgJ24nOgorCQkJZGVsd2luKGRpYWxvZyk7CisJCQlyZXR1cm4gMTsKKworCQljYXNlIFRBQjoKKwkJY2FzZSBLRVlfTEVGVDoKKwkJY2FzZSBLRVlfUklHSFQ6CisJCQlidXR0b24gPSAoKGtleSA9PSBLRVlfTEVGVCA/IC0tYnV0dG9uIDogKytidXR0b24pIDwgMCkgPyAxIDogKGJ1dHRvbiA+IDEgPyAwIDogYnV0dG9uKTsKKworCQkJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIGJ1dHRvbik7CisJCQl3cmVmcmVzaChkaWFsb2cpOworCQkJYnJlYWs7CisJCWNhc2UgJyAnOgorCQljYXNlICdcbic6CisJCQlkZWx3aW4oZGlhbG9nKTsKKwkJCXJldHVybiBidXR0b247CisJCWNhc2UgS0VZX0VTQzoKKwkJCWtleSA9IG9uX2tleV9lc2MoZGlhbG9nKTsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9SRVNJWkU6CisJCQlkZWx3aW4oZGlhbG9nKTsKKwkJCW9uX2tleV9yZXNpemUoKTsKKwkJCWdvdG8gZG9fcmVzaXplOworCQl9CisJfQorCisJZGVsd2luKGRpYWxvZyk7CisJcmV0dXJuIGtleTsJCS8qIEVTQyBwcmVzc2VkICovCit9CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2tjb25maWcvbWNvbmYuYyBiL2xpYi9jdC1uZy0xLjEzLjQva2NvbmZpZy9tY29uZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMTBiZmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2tjb25maWcvbWNvbmYuYwpAQCAtMCwwICsxLDg1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi4wLgorICoKKyAqIEludHJvZHVjZWQgc2luZ2xlIG1lbnUgbW9kZSAoc2hvdyBhbGwgc3ViLW1lbnVzIGluIG9uZSBsYXJnZSB0cmVlKS4KKyAqIDIwMDItMTEtMDYgUGV0ciBCYXVkaXMgPHBhc2t5QHVjdy5jej4KKyAqCisgKiBpMThuLCAyMDA1LCBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KKyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CisKKyNkZWZpbmUgTEtDX0RJUkVDVF9MSU5LCisjaW5jbHVkZSAibGtjLmgiCisjaW5jbHVkZSAibHhkaWFsb2cvZGlhbG9nLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIG1jb25mX3JlYWRtZVtdID0gTl8oCisiT3ZlcnZpZXdcbiIKKyItLS0tLS0tLVxuIgorIlRoaXMgaW50ZXJmYWNlIGxldCB5b3Ugc2VsZWN0IGZlYXR1cmVzIGFuZCBwYXJhbWV0ZXJzIGZvciB0aGUgYnVpbGQuXG4iCisiRmVhdHVyZXMgY2FuIGVpdGhlciBiZSBidWlsdC1pbiwgbW9kdWxhcml6ZWQsIG9yIGlnbm9yZWQuIFBhcmFtZXRlcnNcbiIKKyJtdXN0IGJlIGVudGVyZWQgaW4gYXMgZGVjaW1hbCBvciBoZXhhZGVjaW1hbCBudW1iZXJzIG9yIHRleHQuXG4iCisiXG4iCisiTWVudSBpdGVtcyBiZWdpbm5pbmcgd2l0aCBmb2xsb3dpbmcgYnJhY2VzIHJlcHJlc2VudCBmZWF0dXJlcyB0aGF0XG4iCisiICBbIF0gY2FuIGJlIGJ1aWx0IGluIG9yIHJlbW92ZWRcbiIKKyIgIDwgPiBjYW4gYmUgYnVpbHQgaW4sIG1vZHVsYXJpemVkIG9yIHJlbW92ZWRcbiIKKyIgIHsgfSBjYW4gYmUgYnVpbHQgaW4gb3IgbW9kdWxhcml6ZWQgKHNlbGVjdGVkIGJ5IG90aGVyIGZlYXR1cmUpXG4iCisiICAtIC0gYXJlIHNlbGVjdGVkIGJ5IG90aGVyIGZlYXR1cmUsXG4iCisid2hpbGUgKiwgTSBvciB3aGl0ZXNwYWNlIGluc2lkZSBicmFjZXMgbWVhbnMgdG8gYnVpbGQgaW4sIGJ1aWxkIGFzXG4iCisiYSBtb2R1bGUgb3IgdG8gZXhjbHVkZSB0aGUgZmVhdHVyZSByZXNwZWN0aXZlbHkuXG4iCisiXG4iCisiVG8gY2hhbmdlIGFueSBvZiB0aGVzZSBmZWF0dXJlcywgaGlnaGxpZ2h0IGl0IHdpdGggdGhlIGN1cnNvclxuIgorImtleXMgYW5kIHByZXNzIDxZPiB0byBidWlsZCBpdCBpbiwgPE0+IHRvIG1ha2UgaXQgYSBtb2R1bGUgb3JcbiIKKyI8Tj4gdG8gcmVtb3ZlZCBpdC4gIFlvdSBtYXkgYWxzbyBwcmVzcyB0aGUgPFNwYWNlIEJhcj4gdG8gY3ljbGVcbiIKKyJ0aHJvdWdoIHRoZSBhdmFpbGFibGUgb3B0aW9ucyAoaWUuIFktPk4tPk0tPlkpLlxuIgorIlxuIgorIlNvbWUgYWRkaXRpb25hbCBrZXlib2FyZCBoaW50czpcbiIKKyJcbiIKKyJNZW51c1xuIgorIi0tLS0tLS0tLS1cbiIKKyJvICBVc2UgdGhlIFVwL0Rvd24gYXJyb3cga2V5cyAoY3Vyc29yIGtleXMpIHRvIGhpZ2hsaWdodCB0aGUgaXRlbVxuIgorIiAgIHlvdSB3aXNoIHRvIGNoYW5nZSBvciBzdWJtZW51IHdpc2ggdG8gc2VsZWN0IGFuZCBwcmVzcyA8RW50ZXI+LlxuIgorIiAgIFN1Ym1lbnVzIGFyZSBkZXNpZ25hdGVkIGJ5IFwiLS0tPlwiLlxuIgorIlxuIgorIiAgIFNob3J0Y3V0OiBQcmVzcyB0aGUgb3B0aW9uJ3MgaGlnaGxpZ2h0ZWQgbGV0dGVyIChob3RrZXkpLlxuIgorIiAgICAgICAgICAgICBQcmVzc2luZyBhIGhvdGtleSBtb3JlIHRoYW4gb25jZSB3aWxsIHNlcXVlbmNlXG4iCisiICAgICAgICAgICAgIHRocm91Z2ggYWxsIHZpc2libGUgaXRlbXMgd2hpY2ggdXNlIHRoYXQgaG90a2V5LlxuIgorIlxuIgorIiAgIFlvdSBtYXkgYWxzbyB1c2UgdGhlIDxQQUdFIFVQPiBhbmQgPFBBR0UgRE9XTj4ga2V5cyB0byBzY3JvbGxcbiIKKyIgICB1bnNlZW4gb3B0aW9ucyBpbnRvIHZpZXcuXG4iCisiXG4iCisibyAgVG8gZXhpdCBhIG1lbnUgdXNlIHRoZSBjdXJzb3Iga2V5cyB0byBoaWdobGlnaHQgdGhlIDxFeGl0PiBidXR0b25cbiIKKyIgICBhbmQgcHJlc3MgPEVOVEVSPi5cbiIKKyJcbiIKKyIgICBTaG9ydGN1dDogUHJlc3MgPEVTQz48RVNDPiBvciA8RT4gb3IgPFg+IGlmIHRoZXJlIGlzIG5vIGhvdGtleVxuIgorIiAgICAgICAgICAgICB1c2luZyB0aG9zZSBsZXR0ZXJzLiAgWW91IG1heSBwcmVzcyBhIHNpbmdsZSA8RVNDPiwgYnV0XG4iCisiICAgICAgICAgICAgIHRoZXJlIGlzIGEgZGVsYXllZCByZXNwb25zZSB3aGljaCB5b3UgbWF5IGZpbmQgYW5ub3lpbmcuXG4iCisiXG4iCisiICAgQWxzbywgdGhlIDxUQUI+IGFuZCBjdXJzb3Iga2V5cyB3aWxsIGN5Y2xlIGJldHdlZW4gPFNlbGVjdD4sXG4iCisiICAgPEV4aXQ+IGFuZCA8SGVscD4uXG4iCisiXG4iCisibyAgVG8gZ2V0IGhlbHAgd2l0aCBhbiBpdGVtLCB1c2UgdGhlIGN1cnNvciBrZXlzIHRvIGhpZ2hsaWdodCA8SGVscD5cbiIKKyIgICBhbmQgcHJlc3MgPEVOVEVSPi5cbiIKKyJcbiIKKyIgICBTaG9ydGN1dDogUHJlc3MgPEg+IG9yIDw/Pi5cbiIKKyJcbiIKKyJvICBUbyB0b2dnbGUgdGhlIGRpc3BsYXkgb2YgaGlkZGVuIG9wdGlvbnMsIHByZXNzIDxaPi5cbiIKKyJcbiIKKyJcbiIKKyJSYWRpb2xpc3RzICAoQ2hvaWNlIGxpc3RzKVxuIgorIi0tLS0tLS0tLS0tXG4iCisibyAgVXNlIHRoZSBjdXJzb3Iga2V5cyB0byBzZWxlY3QgdGhlIG9wdGlvbiB5b3Ugd2lzaCB0byBzZXQgYW5kIHByZXNzXG4iCisiICAgPFM+IG9yIHRoZSA8U1BBQ0UgQkFSPi5cbiIKKyJcbiIKKyIgICBTaG9ydGN1dDogUHJlc3MgdGhlIGZpcnN0IGxldHRlciBvZiB0aGUgb3B0aW9uIHlvdSB3aXNoIHRvIHNldCB0aGVuXG4iCisiICAgICAgICAgICAgIHByZXNzIDxTPiBvciA8U1BBQ0UgQkFSPi5cbiIKKyJcbiIKKyJvICBUbyBzZWUgYXZhaWxhYmxlIGhlbHAgZm9yIHRoZSBpdGVtLCB1c2UgdGhlIGN1cnNvciBrZXlzIHRvIGhpZ2hsaWdodFxuIgorIiAgIDxIZWxwPiBhbmQgUHJlc3MgPEVOVEVSPi5cbiIKKyJcbiIKKyIgICBTaG9ydGN1dDogUHJlc3MgPEg+IG9yIDw/Pi5cbiIKKyJcbiIKKyIgICBBbHNvLCB0aGUgPFRBQj4gYW5kIGN1cnNvciBrZXlzIHdpbGwgY3ljbGUgYmV0d2VlbiA8U2VsZWN0PiBhbmRcbiIKKyIgICA8SGVscD5cbiIKKyJcbiIKKyJcbiIKKyJEYXRhIEVudHJ5XG4iCisiLS0tLS0tLS0tLS1cbiIKKyJvICBFbnRlciB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIGFuZCBwcmVzcyA8RU5URVI+XG4iCisiICAgSWYgeW91IGFyZSBlbnRlcmluZyBoZXhhZGVjaW1hbCB2YWx1ZXMsIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG9cbiIKKyIgICBhZGQgdGhlICcweCcgcHJlZml4IHRvIHRoZSBlbnRyeS5cbiIKKyJcbiIKKyJvICBGb3IgaGVscCwgdXNlIHRoZSA8VEFCPiBvciBjdXJzb3Iga2V5cyB0byBoaWdobGlnaHQgdGhlIGhlbHAgb3B0aW9uXG4iCisiICAgYW5kIHByZXNzIDxFTlRFUj4uICBZb3UgY2FuIHRyeSA8VEFCPjxIPiBhcyB3ZWxsLlxuIgorIlxuIgorIlxuIgorIlRleHQgQm94ICAgIChIZWxwIFdpbmRvdylcbiIKKyItLS0tLS0tLVxuIgorIm8gIFVzZSB0aGUgY3Vyc29yIGtleXMgdG8gc2Nyb2xsIHVwL2Rvd24vbGVmdC9yaWdodC4gIFRoZSBWSSBlZGl0b3JcbiIKKyIgICBrZXlzIGgsaixrLGwgZnVuY3Rpb24gaGVyZSBhcyBkbyA8U1BBQ0UgQkFSPiBhbmQgPEI+IGZvciB0aG9zZVxuIgorIiAgIHdobyBhcmUgZmFtaWxpYXIgd2l0aCBsZXNzIGFuZCBseW54LlxuIgorIlxuIgorIm8gIFByZXNzIDxFPiwgPFg+LCA8RW50ZXI+IG9yIDxFc2M+PEVzYz4gdG8gZXhpdC5cbiIKKyJcbiIKKyJcbiIKKyJBbHRlcm5hdGUgQ29uZmlndXJhdGlvbiBGaWxlc1xuIgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisiTWVudWNvbmZpZyBzdXBwb3J0cyB0aGUgdXNlIG9mIGFsdGVybmF0ZSBjb25maWd1cmF0aW9uIGZpbGVzIGZvclxuIgorInRob3NlIHdobywgZm9yIHZhcmlvdXMgcmVhc29ucywgZmluZCBpdCBuZWNlc3NhcnkgdG8gc3dpdGNoXG4iCisiYmV0d2VlbiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuXG4iCisiXG4iCisiQXQgdGhlIGVuZCBvZiB0aGUgbWFpbiBtZW51IHlvdSB3aWxsIGZpbmQgdHdvIG9wdGlvbnMuICBPbmUgaXNcbiIKKyJmb3Igc2F2aW5nIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gdG8gYSBmaWxlIG9mIHlvdXIgY2hvb3NpbmcuXG4iCisiVGhlIG90aGVyIG9wdGlvbiBpcyBmb3IgbG9hZGluZyBhIHByZXZpb3VzbHkgc2F2ZWQgYWx0ZXJuYXRlXG4iCisiY29uZmlndXJhdGlvbi5cbiIKKyJcbiIKKyJFdmVuIGlmIHlvdSBkb24ndCB1c2UgYWx0ZXJuYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGJ1dCB5b3VcbiIKKyJmaW5kIGR1cmluZyBhIE1lbnVjb25maWcgc2Vzc2lvbiB0aGF0IHlvdSBoYXZlIGNvbXBsZXRlbHkgbWVzc2VkXG4iCisidXAgeW91ciBzZXR0aW5ncywgeW91IG1heSB1c2UgdGhlIFwiTG9hZCBBbHRlcm5hdGUuLi5cIiBvcHRpb24gdG9cbiIKKyJyZXN0b3JlIHlvdXIgcHJldmlvdXNseSBzYXZlZCBzZXR0aW5ncyBmcm9tIFwiLmNvbmZpZ1wiIHdpdGhvdXRcbiIKKyJyZXN0YXJ0aW5nIE1lbnVjb25maWcuXG4iCisiXG4iCisiT3RoZXIgaW5mb3JtYXRpb25cbiIKKyItLS0tLS0tLS0tLS0tLS0tLVxuIgorIklmIHlvdSB1c2UgTWVudWNvbmZpZyBpbiBhbiBYVEVSTSB3aW5kb3cgbWFrZSBzdXJlIHlvdSBoYXZlIHlvdXJcbiIKKyIkVEVSTSB2YXJpYWJsZSBzZXQgdG8gcG9pbnQgdG8gYSB4dGVybSBkZWZpbml0aW9uIHdoaWNoIHN1cHBvcnRzIGNvbG9yLlxuIgorIk90aGVyd2lzZSwgTWVudWNvbmZpZyB3aWxsIGxvb2sgcmF0aGVyIGJhZC4gIE1lbnVjb25maWcgd2lsbCBub3RcbiIKKyJkaXNwbGF5IGNvcnJlY3RseSBpbiBhIFJYVlQgd2luZG93IGJlY2F1c2Ugcnh2dCBkaXNwbGF5cyBvbmx5IG9uZVxuIgorImludGVuc2l0eSBvZiBjb2xvciwgYnJpZ2h0LlxuIgorIlxuIgorIk1lbnVjb25maWcgd2lsbCBkaXNwbGF5IGxhcmdlciBtZW51cyBvbiBzY3JlZW5zIG9yIHh0ZXJtcyB3aGljaCBhcmVcbiIKKyJzZXQgdG8gZGlzcGxheSBtb3JlIHRoYW4gdGhlIHN0YW5kYXJkIDI1IHJvdyBieSA4MCBjb2x1bW4gZ2VvbWV0cnkuXG4iCisiSW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yaywgdGhlIFwic3R0eSBzaXplXCIgY29tbWFuZCBtdXN0IGJlIGFibGUgdG9cbiIKKyJkaXNwbGF5IHRoZSBzY3JlZW4ncyBjdXJyZW50IHJvdyBhbmQgY29sdW1uIGdlb21ldHJ5LiAgSSBTVFJPTkdMWVxuIgorIlJFQ09NTUVORCB0aGF0IHlvdSBtYWtlIHN1cmUgeW91IGRvIE5PVCBoYXZlIHRoZSBzaGVsbCB2YXJpYWJsZXNcbiIKKyJMSU5FUyBhbmQgQ09MVU1OUyBleHBvcnRlZCBpbnRvIHlvdXIgZW52aXJvbm1lbnQuICBTb21lIGRpc3RyaWJ1dGlvbnNcbiIKKyJleHBvcnQgdGhvc2UgdmFyaWFibGVzIHZpYSAvZXRjL3Byb2ZpbGUuICBTb21lIG5jdXJzZXMgcHJvZ3JhbXMgY2FuXG4iCisiYmVjb21lIGNvbmZ1c2VkIHdoZW4gdGhvc2UgdmFyaWFibGVzIChMSU5FUyAmIENPTFVNTlMpIGRvbid0IHJlZmxlY3RcbiIKKyJ0aGUgdHJ1ZSBzY3JlZW4gc2l6ZS5cbiIKKyJcbiIKKyJPcHRpb25hbCBwZXJzb25hbGl0eSBhdmFpbGFibGVcbiIKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyJJZiB5b3UgcHJlZmVyIHRvIGhhdmUgYWxsIG9mIHRoZSBvcHRpb25zIGxpc3RlZCBpbiBhIHNpbmdsZSBtZW51LCByYXRoZXJcbiIKKyJ0aGFuIHRoZSBkZWZhdWx0IG11bHRpbWVudSBoaWVyYXJjaHksIHJ1biB0aGUgbWVudWNvbmZpZyB3aXRoXG4iCisiTUVOVUNPTkZJR19NT0RFIGVudmlyb25tZW50IHZhcmlhYmxlIHNldCB0byBzaW5nbGVfbWVudS4gRXhhbXBsZTpcbiIKKyJcbiIKKyJtYWtlIE1FTlVDT05GSUdfTU9ERT1zaW5nbGVfbWVudSBtZW51Y29uZmlnXG4iCisiXG4iCisiPEVudGVyPiB3aWxsIHRoZW4gdW5yb2xsIHRoZSBhcHByb3ByaWF0ZSBjYXRlZ29yeSwgb3IgZW5mb2xkIGl0IGlmIGl0XG4iCisiaXMgYWxyZWFkeSB1bnJvbGxlZC5cbiIKKyJcbiIKKyJOb3RlIHRoYXQgdGhpcyBtb2RlIGNhbiBldmVudHVhbGx5IGJlIGEgbGl0dGxlIG1vcmUgQ1BVIGV4cGVuc2l2ZVxuIgorIihlc3BlY2lhbGx5IHdpdGggYSBsYXJnZXIgbnVtYmVyIG9mIHVucm9sbGVkIGNhdGVnb3JpZXMpIHRoYW4gdGhlXG4iCisiZGVmYXVsdCBtb2RlLlxuIgorIlxuIgorIkRpZmZlcmVudCBjb2xvciB0aGVtZXMgYXZhaWxhYmxlXG4iCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyJJdCBpcyBwb3NzaWJsZSB0byBzZWxlY3QgZGlmZmVyZW50IGNvbG9yIHRoZW1lcyB1c2luZyB0aGUgdmFyaWFibGVcbiIKKyJNRU5VQ09ORklHX0NPTE9SLiBUbyBzZWxlY3QgYSB0aGVtZSB1c2U6XG4iCisiXG4iCisibWFrZSBNRU5VQ09ORklHX0NPTE9SPTx0aGVtZT4gbWVudWNvbmZpZ1xuIgorIlxuIgorIkF2YWlsYWJsZSB0aGVtZXMgYXJlXG4iCisiIG1vbm8gICAgICAgPT4gc2VsZWN0cyBjb2xvcnMgc3VpdGFibGUgZm9yIG1vbm9jaHJvbWUgZGlzcGxheXNcbiIKKyIgYmxhY2tiZyAgICA9PiBzZWxlY3RzIGEgY29sb3Igc2NoZW1lIHdpdGggYmxhY2sgYmFja2dyb3VuZFxuIgorIiBjbGFzc2ljICAgID0+IHRoZW1lIHdpdGggYmx1ZSBiYWNrZ3JvdW5kLiBUaGUgY2xhc3NpYyBsb29rXG4iCisiIGJsdWV0aXRsZSAgPT4gYSBMQ0QgZnJpZW5kbHkgdmVyc2lvbiBvZiBjbGFzc2ljLiAoZGVmYXVsdClcbiIKKyJcbiIpLAorbWVudV9pbnN0cnVjdGlvbnNbXSA9IE5fKAorCSJBcnJvdyBrZXlzIG5hdmlnYXRlIHRoZSBtZW51LiAgIgorCSI8RW50ZXI+IHNlbGVjdHMgc3VibWVudXMgLS0tPi4gICIKKwkiSGlnaGxpZ2h0ZWQgbGV0dGVycyBhcmUgaG90a2V5cy4gICIKKwkiUHJlc3NpbmcgPFk+IGluY2x1ZGVzLCA8Tj4gZXhjbHVkZXMsIDxNPiBtb2R1bGFyaXplcyBmZWF0dXJlcy4gICIKKwkiUHJlc3MgPEVzYz48RXNjPiB0byBleGl0LCA8Pz4gZm9yIEhlbHAsIDwvPiBmb3IgU2VhcmNoLiAgIgorCSJMZWdlbmQ6IFsqXSBidWlsdC1pbiAgWyBdIGV4Y2x1ZGVkICA8TT4gbW9kdWxlICA8ID4gbW9kdWxlIGNhcGFibGUiKSwKK3JhZGlvbGlzdF9pbnN0cnVjdGlvbnNbXSA9IE5fKAorCSJVc2UgdGhlIGFycm93IGtleXMgdG8gbmF2aWdhdGUgdGhpcyB3aW5kb3cgb3IgIgorCSJwcmVzcyB0aGUgaG90a2V5IG9mIHRoZSBpdGVtIHlvdSB3aXNoIHRvIHNlbGVjdCAiCisJImZvbGxvd2VkIGJ5IHRoZSA8U1BBQ0UgQkFSPi4gIgorCSJQcmVzcyA8Pz4gZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBvcHRpb24uIiksCitpbnB1dGJveF9pbnN0cnVjdGlvbnNfaW50W10gPSBOXygKKwkiUGxlYXNlIGVudGVyIGEgZGVjaW1hbCB2YWx1ZS4gIgorCSJGcmFjdGlvbnMgd2lsbCBub3QgYmUgYWNjZXB0ZWQuICAiCisJIlVzZSB0aGUgPFRBQj4ga2V5IHRvIG1vdmUgZnJvbSB0aGUgaW5wdXQgZmllbGQgdG8gdGhlIGJ1dHRvbnMgYmVsb3cgaXQuIiksCitpbnB1dGJveF9pbnN0cnVjdGlvbnNfaGV4W10gPSBOXygKKwkiUGxlYXNlIGVudGVyIGEgaGV4YWRlY2ltYWwgdmFsdWUuICIKKwkiVXNlIHRoZSA8VEFCPiBrZXkgdG8gbW92ZSBmcm9tIHRoZSBpbnB1dCBmaWVsZCB0byB0aGUgYnV0dG9ucyBiZWxvdyBpdC4iKSwKK2lucHV0Ym94X2luc3RydWN0aW9uc19zdHJpbmdbXSA9IE5fKAorCSJQbGVhc2UgZW50ZXIgYSBzdHJpbmcgdmFsdWUuICIKKwkiVXNlIHRoZSA8VEFCPiBrZXkgdG8gbW92ZSBmcm9tIHRoZSBpbnB1dCBmaWVsZCB0byB0aGUgYnV0dG9ucyBiZWxvdyBpdC4iKSwKK3NldG1vZF90ZXh0W10gPSBOXygKKwkiVGhpcyBmZWF0dXJlIGRlcGVuZHMgb24gYW5vdGhlciB3aGljaCBoYXMgYmVlbiBjb25maWd1cmVkIGFzIGEgbW9kdWxlLlxuIgorCSJBcyBhIHJlc3VsdCwgdGhpcyBmZWF0dXJlIHdpbGwgYmUgYnVpbHQgYXMgYSBtb2R1bGUuIiksCitsb2FkX2NvbmZpZ190ZXh0W10gPSBOXygKKwkiRW50ZXIgdGhlIG5hbWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB5b3Ugd2lzaCB0byBsb2FkLiAgIgorCSJBY2NlcHQgdGhlIG5hbWUgc2hvd24gdG8gcmVzdG9yZSB0aGUgY29uZmlndXJhdGlvbiB5b3UgIgorCSJsYXN0IHJldHJpZXZlZC4gIExlYXZlIGJsYW5rIHRvIGFib3J0LiIpLAorbG9hZF9jb25maWdfaGVscFtdID0gTl8oCisJIlxuIgorCSJGb3IgdmFyaW91cyByZWFzb25zLCBvbmUgbWF5IHdpc2ggdG8ga2VlcCBzZXZlcmFsIGRpZmZlcmVudFxuIgorCSJjb25maWd1cmF0aW9ucyBhdmFpbGFibGUgb24gYSBzaW5nbGUgbWFjaGluZS5cbiIKKwkiXG4iCisJIklmIHlvdSBoYXZlIHNhdmVkIGEgcHJldmlvdXMgY29uZmlndXJhdGlvbiBpbiBhIGZpbGUgb3RoZXIgdGhhbiB0aGVcbiIKKwkiZGVmYXVsdCBvbmUsIGVudGVyaW5nIGl0cyBuYW1lIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gbW9kaWZ5IHRoYXRcbiIKKwkiY29uZmlndXJhdGlvbi5cbiIKKwkiXG4iCisJIklmIHlvdSBhcmUgdW5jZXJ0YWluLCB0aGVuIHlvdSBoYXZlIHByb2JhYmx5IG5ldmVyIHVzZWQgYWx0ZXJuYXRlXG4iCisJImNvbmZpZ3VyYXRpb24gZmlsZXMuIFlvdSBzaG91bGQgdGhlcmVmb3JlIGxlYXZlIHRoaXMgYmxhbmsgdG8gYWJvcnQuXG4iKSwKK3NhdmVfY29uZmlnX3RleHRbXSA9IE5fKAorCSJFbnRlciBhIGZpbGVuYW1lIHRvIHdoaWNoIHRoaXMgY29uZmlndXJhdGlvbiBzaG91bGQgYmUgc2F2ZWQgIgorCSJhcyBhbiBhbHRlcm5hdGUuICBMZWF2ZSBibGFuayB0byBhYm9ydC4iKSwKK3NhdmVfY29uZmlnX2hlbHBbXSA9IE5fKAorCSJcbiIKKwkiRm9yIHZhcmlvdXMgcmVhc29ucywgb25lIG1heSB3aXNoIHRvIGtlZXAgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zXG4iCisJImF2YWlsYWJsZSBvbiBhIHNpbmdsZSBtYWNoaW5lLlxuIgorCSJcbiIKKwkiRW50ZXJpbmcgYSBmaWxlIG5hbWUgaGVyZSB3aWxsIGFsbG93IHlvdSB0byBsYXRlciByZXRyaWV2ZSwgbW9kaWZ5XG4iCisJImFuZCB1c2UgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBhcyBhbiBhbHRlcm5hdGUgdG8gd2hhdGV2ZXJcbiIKKwkiY29uZmlndXJhdGlvbiBvcHRpb25zIHlvdSBoYXZlIHNlbGVjdGVkIGF0IHRoYXQgdGltZS5cbiIKKwkiXG4iCisJIklmIHlvdSBhcmUgdW5jZXJ0YWluIHdoYXQgYWxsIHRoaXMgbWVhbnMgdGhlbiB5b3Ugc2hvdWxkIHByb2JhYmx5XG4iCisJImxlYXZlIHRoaXMgYmxhbmsuXG4iKSwKK3NlYXJjaF9oZWxwW10gPSBOXygKKwkiXG4iCisJIlNlYXJjaCBmb3Igc3ltYm9scyBhbmQgZGlzcGxheSB0aGVpciByZWxhdGlvbnMuXG4iCisJIlJlZ3VsYXIgZXhwcmVzc2lvbnMgYXJlIGFsbG93ZWQuXG4iCisJIkV4YW1wbGU6IHNlYXJjaCBmb3IgXCJeRk9PXCJcbiIKKwkiUmVzdWx0OlxuIgorCSItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorCSJTeW1ib2w6IEZPTyBbPW1dXG4iCisJIlByb21wdDogRm9vIGJ1cyBpcyB1c2VkIHRvIGRyaXZlIHRoZSBiYXIgSFdcbiIKKwkiRGVmaW5lZCBhdCBkcml2ZXJzL3BjaS9LY29uZmlnOjQ3XG4iCisJIkRlcGVuZHMgb246IFg4Nl9MT0NBTF9BUElDICYmIFg4Nl9JT19BUElDIHx8IElBNjRcbiIKKwkiTG9jYXRpb246XG4iCisJIiAgLT4gQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBNQ0EsIElTQSlcbiIKKwkiICAgIC0+IFBDSSBzdXBwb3J0IChQQ0kgWz15XSlcbiIKKwkiICAgICAgLT4gUENJIGFjY2VzcyBtb2RlICg8Y2hvaWNlPiBbPXldKVxuIgorCSJTZWxlY3RzOiBMSUJDUkMzMlxuIgorCSJTZWxlY3RlZCBieTogQkFSXG4iCisJIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisJIm8gVGhlIGxpbmUgJ1Byb21wdDonIHNob3dzIHRoZSB0ZXh0IHVzZWQgaW4gdGhlIG1lbnUgc3RydWN0dXJlIGZvclxuIgorCSIgIHRoaXMgc3ltYm9sXG4iCisJIm8gVGhlICdEZWZpbmVkIGF0JyBsaW5lIHRlbGwgYXQgd2hhdCBmaWxlIC8gbGluZSBudW1iZXIgdGhlIHN5bWJvbFxuIgorCSIgIGlzIGRlZmluZWRcbiIKKwkibyBUaGUgJ0RlcGVuZHMgb246JyBsaW5lIHRlbGwgd2hhdCBzeW1ib2xzIG5lZWRzIHRvIGJlIGRlZmluZWQgZm9yXG4iCisJIiAgdGhpcyBzeW1ib2wgdG8gYmUgdmlzaWJsZSBpbiB0aGUgbWVudSAoc2VsZWN0YWJsZSlcbiIKKwkibyBUaGUgJ0xvY2F0aW9uOicgbGluZXMgdGVsbCB3aGVyZSBpbiB0aGUgbWVudSBzdHJ1Y3R1cmUgdGhpcyBzeW1ib2xcbiIKKwkiICBpcyBsb2NhdGVkXG4iCisJIiAgICBBIGxvY2F0aW9uIGZvbGxvd2VkIGJ5IGEgWz15XSBpbmRpY2F0ZSB0aGF0IHRoaXMgaXMgYSBzZWxlY3RhYmxlXG4iCisJIiAgICBtZW51IGl0ZW0gLSBhbmQgY3VycmVudCB2YWx1ZSBpcyBkaXNwbGF5ZWQgaW5zaWRlIGJyYWNrZXRzLlxuIgorCSJvIFRoZSAnU2VsZWN0czonIGxpbmUgdGVsbCB3aGF0IHN5bWJvbCB3aWxsIGJlIGF1dG9tYXRpY2FsbHlcbiIKKwkiICBzZWxlY3RlZCBpZiB0aGlzIHN5bWJvbCBpcyBzZWxlY3RlZCAoeSBvciBtKVxuIgorCSJvIFRoZSAnU2VsZWN0ZWQgYnknIGxpbmUgdGVsbCB3aGF0IHN5bWJvbCBoYXMgc2VsZWN0ZWQgdGhpcyBzeW1ib2xcbiIKKwkiXG4iCisJIk9ubHkgcmVsZXZhbnQgbGluZXMgYXJlIHNob3duLlxuIgorCSJcblxuIgorCSJTZWFyY2ggZXhhbXBsZXM6XG4iCisJIkV4YW1wbGVzOiBVU0IJPT4gZmluZCBhbGwgc3ltYm9scyBjb250YWluaW5nIFVTQlxuIgorCSIgICAgICAgICAgXlVTQiA9PiBmaW5kIGFsbCBzeW1ib2xzIHN0YXJ0aW5nIHdpdGggVVNCXG4iCisJIiAgICAgICAgICBVU0IkID0+IGZpbmQgYWxsIHN5bWJvbHMgZW5kaW5nIHdpdGggVVNCXG4iCisJIlxuIik7CisKK3N0YXRpYyBpbnQgaW5kZW50Oworc3RhdGljIHN0cnVjdCBtZW51ICpjdXJyZW50X21lbnU7CitzdGF0aWMgaW50IGNoaWxkX2NvdW50Oworc3RhdGljIGludCBzaW5nbGVfbWVudV9tb2RlOworc3RhdGljIGludCBzaG93X2FsbF9vcHRpb25zOworCitzdGF0aWMgdm9pZCBjb25mKHN0cnVjdCBtZW51ICptZW51KTsKK3N0YXRpYyB2b2lkIGNvbmZfY2hvaWNlKHN0cnVjdCBtZW51ICptZW51KTsKK3N0YXRpYyB2b2lkIGNvbmZfc3RyaW5nKHN0cnVjdCBtZW51ICptZW51KTsKK3N0YXRpYyB2b2lkIGNvbmZfbG9hZCh2b2lkKTsKK3N0YXRpYyB2b2lkIGNvbmZfc2F2ZSh2b2lkKTsKK3N0YXRpYyB2b2lkIHNob3dfdGV4dGJveChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqdGV4dCwgaW50IHIsIGludCBjKTsKK3N0YXRpYyB2b2lkIHNob3dfaGVscHRleHQoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnRleHQpOworc3RhdGljIHZvaWQgc2hvd19oZWxwKHN0cnVjdCBtZW51ICptZW51KTsKKworc3RhdGljIGNoYXIgZmlsZW5hbWVbUEFUSF9NQVgrMV07CitzdGF0aWMgdm9pZCBzZXRfY29uZmlnX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKmNvbmZpZ19maWxlbmFtZSkKK3sKKwlzdGF0aWMgY2hhciBtZW51X2JhY2t0aXRsZVtQQVRIX01BWCsxMjhdOworCWludCBzaXplOworCisJc2l6ZSA9IHNucHJpbnRmKG1lbnVfYmFja3RpdGxlLCBzaXplb2YobWVudV9iYWNrdGl0bGUpLAorCSAgICAgICAgICAgICAgICAiJXMgLSAlcyIsIGNvbmZpZ19maWxlbmFtZSwgcm9vdG1lbnUucHJvbXB0LT50ZXh0KTsKKwlpZiAoc2l6ZSA+PSBzaXplb2YobWVudV9iYWNrdGl0bGUpKQorCQltZW51X2JhY2t0aXRsZVtzaXplb2YobWVudV9iYWNrdGl0bGUpLTFdID0gJ1wwJzsKKwlzZXRfZGlhbG9nX2JhY2t0aXRsZShtZW51X2JhY2t0aXRsZSk7CisKKwlzaXplID0gc25wcmludGYoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksICIlcyIsIGNvbmZpZ19maWxlbmFtZSk7CisJaWYgKHNpemUgPj0gc2l6ZW9mKGZpbGVuYW1lKSkKKwkJZmlsZW5hbWVbc2l6ZW9mKGZpbGVuYW1lKS0xXSA9ICdcMCc7Cit9CisKKworc3RhdGljIHZvaWQgc2VhcmNoX2NvbmYodm9pZCkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICoqc3ltX2FycjsKKwlzdHJ1Y3QgZ3N0ciByZXM7CisJY2hhciAqZGlhbG9nX2lucHV0OworCWludCBkcmVzOworYWdhaW46CisJZGlhbG9nX2NsZWFyKCk7CisJZHJlcyA9IGRpYWxvZ19pbnB1dGJveChfKCJTZWFyY2ggQ29uZmlndXJhdGlvbiBQYXJhbWV0ZXIiKSwKKwkJCSAgICAgIF8oIkVudGVyICIgQ09ORklHXyAiIChzdWIpc3RyaW5nIHRvIHNlYXJjaCBmb3IgIgorCQkJCSIod2l0aCBvciB3aXRob3V0IFwiIiBDT05GSUdfICJcIikiKSwKKwkJCSAgICAgIDEwLCA3NSwgIiIpOworCXN3aXRjaCAoZHJlcykgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlzaG93X2hlbHB0ZXh0KF8oIlNlYXJjaCBDb25maWd1cmF0aW9uIiksIHNlYXJjaF9oZWxwKTsKKwkJZ290byBhZ2FpbjsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJLyogc3RyaXAgdGhlIHByZWZpeCBpZiBuZWNlc3NhcnkgKi8KKwlkaWFsb2dfaW5wdXQgPSBkaWFsb2dfaW5wdXRfcmVzdWx0OworCWlmIChzdHJuY2FzZWNtcChkaWFsb2dfaW5wdXRfcmVzdWx0LCBDT05GSUdfLCBzdHJsZW4oQ09ORklHXykpID09IDApCisJCWRpYWxvZ19pbnB1dCArPSBzdHJsZW4oQ09ORklHXyk7CisKKwlzeW1fYXJyID0gc3ltX3JlX3NlYXJjaChkaWFsb2dfaW5wdXQpOworCXJlcyA9IGdldF9yZWxhdGlvbnNfc3RyKHN5bV9hcnIpOworCWZyZWUoc3ltX2Fycik7CisJc2hvd190ZXh0Ym94KF8oIlNlYXJjaCBSZXN1bHRzIiksIHN0cl9nZXQoJnJlcyksIDAsIDApOworCXN0cl9mcmVlKCZyZXMpOworfQorCitzdGF0aWMgdm9pZCBidWlsZF9jb25mKHN0cnVjdCBtZW51ICptZW51KQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IG1lbnUgKmNoaWxkOworCWludCB0eXBlLCB0bXAsIGRvaW50ID0gMjsKKwl0cmlzdGF0ZSB2YWw7CisJY2hhciBjaDsKKwlib29sIHZpc2libGU7CisKKwkvKgorCSAqIG5vdGU6IG1lbnVfaXNfdmlzaWJsZSgpIGhhcyBzaWRlIGVmZmVjdCB0aGF0IGl0IHdpbGwKKwkgKiByZWNhbGMgdGhlIHZhbHVlIG9mIHRoZSBzeW1ib2wuCisJICovCisJdmlzaWJsZSA9IG1lbnVfaXNfdmlzaWJsZShtZW51KTsKKwlpZiAoc2hvd19hbGxfb3B0aW9ucyAmJiAhbWVudV9oYXNfcHJvbXB0KG1lbnUpKQorCQlyZXR1cm47CisJZWxzZSBpZiAoIXNob3dfYWxsX29wdGlvbnMgJiYgIXZpc2libGUpCisJCXJldHVybjsKKworCXN5bSA9IG1lbnUtPnN5bTsKKwlwcm9wID0gbWVudS0+cHJvbXB0OworCWlmICghc3ltKSB7CisJCWlmIChwcm9wICYmIG1lbnUgIT0gY3VycmVudF9tZW51KSB7CisJCQljb25zdCBjaGFyICpwcm9tcHQgPSBtZW51X2dldF9wcm9tcHQobWVudSk7CisJCQlzd2l0Y2ggKHByb3AtPnR5cGUpIHsKKwkJCWNhc2UgUF9NRU5VOgorCQkJCWNoaWxkX2NvdW50Kys7CisJCQkJcHJvbXB0ID0gXyhwcm9tcHQpOworCQkJCWlmIChzaW5nbGVfbWVudV9tb2RlKSB7CisJCQkJCWl0ZW1fbWFrZSgiJXMlKmMlcyIsCisJCQkJCQkgIG1lbnUtPmRhdGEgPyAiLS0+IiA6ICIrKz4iLAorCQkJCQkJICBpbmRlbnQgKyAxLCAnICcsIHByb21wdCk7CisJCQkJfSBlbHNlCisJCQkJCWl0ZW1fbWFrZSgiICAgJSpjJXMgIC0tLT4iLCBpbmRlbnQgKyAxLCAnICcsIHByb21wdCk7CisKKwkJCQlpdGVtX3NldF90YWcoJ20nKTsKKwkJCQlpdGVtX3NldF9kYXRhKG1lbnUpOworCQkJCWlmIChzaW5nbGVfbWVudV9tb2RlICYmIG1lbnUtPmRhdGEpCisJCQkJCWdvdG8gY29uZl9jaGlsZHM7CisJCQkJcmV0dXJuOworCQkJY2FzZSBQX0NPTU1FTlQ6CisJCQkJaWYgKHByb21wdCkgeworCQkJCQljaGlsZF9jb3VudCsrOworCQkJCQlpdGVtX21ha2UoIiAgICUqYyoqKiAlcyAqKioiLCBpbmRlbnQgKyAxLCAnICcsIF8ocHJvbXB0KSk7CisJCQkJCWl0ZW1fc2V0X3RhZygnOicpOworCQkJCQlpdGVtX3NldF9kYXRhKG1lbnUpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKHByb21wdCkgeworCQkJCQljaGlsZF9jb3VudCsrOworCQkJCQlpdGVtX21ha2UoIi0tLSUqYyVzIiwgaW5kZW50ICsgMSwgJyAnLCBfKHByb21wdCkpOworCQkJCQlpdGVtX3NldF90YWcoJzonKTsKKwkJCQkJaXRlbV9zZXRfZGF0YShtZW51KTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZQorCQkJZG9pbnQgPSAwOworCQlnb3RvIGNvbmZfY2hpbGRzOworCX0KKworCXR5cGUgPSBzeW1fZ2V0X3R5cGUoc3ltKTsKKwlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKSB7CisJCXN0cnVjdCBzeW1ib2wgKmRlZl9zeW0gPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShzeW0pOworCQlzdHJ1Y3QgbWVudSAqZGVmX21lbnUgPSBOVUxMOworCisJCWNoaWxkX2NvdW50Kys7CisJCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgeworCQkJaWYgKG1lbnVfaXNfdmlzaWJsZShjaGlsZCkgJiYgY2hpbGQtPnN5bSA9PSBkZWZfc3ltKQorCQkJCWRlZl9tZW51ID0gY2hpbGQ7CisJCX0KKworCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7CisJCWlmIChzeW1faXNfY2hhbmdhYmxlKHN5bSkpIHsKKwkJCXN3aXRjaCAodHlwZSkgeworCQkJY2FzZSBTX0JPT0xFQU46CisJCQkJaXRlbV9tYWtlKCJbJWNdIiwgdmFsID09IG5vID8gJyAnIDogJyonKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU19UUklTVEFURToKKwkJCQlzd2l0Y2ggKHZhbCkgeworCQkJCWNhc2UgeWVzOiBjaCA9ICcqJzsgYnJlYWs7CisJCQkJY2FzZSBtb2Q6IGNoID0gJ00nOyBicmVhazsKKwkJCQlkZWZhdWx0OiAgY2ggPSAnICc7IGJyZWFrOworCQkJCX0KKwkJCQlpdGVtX21ha2UoIjwlYz4iLCBjaCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpdGVtX3NldF90YWcoJ3QnKTsKKwkJCWl0ZW1fc2V0X2RhdGEobWVudSk7CisJCX0gZWxzZSB7CisJCQlpdGVtX21ha2UoIiAgICIpOworCQkJaXRlbV9zZXRfdGFnKGRlZl9tZW51ID8gJ3QnIDogJzonKTsKKwkJCWl0ZW1fc2V0X2RhdGEobWVudSk7CisJCX0KKworCQlpdGVtX2FkZF9zdHIoIiUqYyVzIiwgaW5kZW50ICsgMSwgJyAnLCBfKG1lbnVfZ2V0X3Byb21wdChtZW51KSkpOworCQlpZiAodmFsID09IHllcykgeworCQkJaWYgKGRlZl9tZW51KSB7CisJCQkJaXRlbV9hZGRfc3RyKCIgKCVzKSIsIF8obWVudV9nZXRfcHJvbXB0KGRlZl9tZW51KSkpOworCQkJCWl0ZW1fYWRkX3N0cigiICAtLS0+Iik7CisJCQkJaWYgKGRlZl9tZW51LT5saXN0KSB7CisJCQkJCWluZGVudCArPSAyOworCQkJCQlidWlsZF9jb25mKGRlZl9tZW51KTsKKwkJCQkJaW5kZW50IC09IDI7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG1lbnUgPT0gY3VycmVudF9tZW51KSB7CisJCQlpdGVtX21ha2UoIi0tLSUqYyVzIiwgaW5kZW50ICsgMSwgJyAnLCBfKG1lbnVfZ2V0X3Byb21wdChtZW51KSkpOworCQkJaXRlbV9zZXRfdGFnKCc6Jyk7CisJCQlpdGVtX3NldF9kYXRhKG1lbnUpOworCQkJZ290byBjb25mX2NoaWxkczsKKwkJfQorCQljaGlsZF9jb3VudCsrOworCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7CisJCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgdmFsID09IHllcykgeworCQkJaXRlbV9tYWtlKCIgICAiKTsKKwkJCWl0ZW1fc2V0X3RhZygnOicpOworCQkJaXRlbV9zZXRfZGF0YShtZW51KTsKKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAodHlwZSkgeworCQkJY2FzZSBTX0JPT0xFQU46CisJCQkJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSkKKwkJCQkJaXRlbV9tYWtlKCJbJWNdIiwgdmFsID09IG5vID8gJyAnIDogJyonKTsKKwkJCQllbHNlCisJCQkJCWl0ZW1fbWFrZSgiLSVjLSIsIHZhbCA9PSBubyA/ICcgJyA6ICcqJyk7CisJCQkJaXRlbV9zZXRfdGFnKCd0Jyk7CisJCQkJaXRlbV9zZXRfZGF0YShtZW51KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU19UUklTVEFURToKKwkJCQlzd2l0Y2ggKHZhbCkgeworCQkJCWNhc2UgeWVzOiBjaCA9ICcqJzsgYnJlYWs7CisJCQkJY2FzZSBtb2Q6IGNoID0gJ00nOyBicmVhazsKKwkJCQlkZWZhdWx0OiAgY2ggPSAnICc7IGJyZWFrOworCQkJCX0KKwkJCQlpZiAoc3ltX2lzX2NoYW5nYWJsZShzeW0pKSB7CisJCQkJCWlmIChzeW0tPnJldl9kZXAudHJpID09IG1vZCkKKwkJCQkJCWl0ZW1fbWFrZSgieyVjfSIsIGNoKTsKKwkJCQkJZWxzZQorCQkJCQkJaXRlbV9tYWtlKCI8JWM+IiwgY2gpOworCQkJCX0gZWxzZQorCQkJCQlpdGVtX21ha2UoIi0lYy0iLCBjaCk7CisJCQkJaXRlbV9zZXRfdGFnKCd0Jyk7CisJCQkJaXRlbV9zZXRfZGF0YShtZW51KTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJdG1wID0gMiArIHN0cmxlbihzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pKTsgLyogKCkgPSAyICovCisJCQkJaXRlbV9tYWtlKCIoJXMpIiwgc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSk7CisJCQkJdG1wID0gaW5kZW50IC0gdG1wICsgNDsKKwkJCQlpZiAodG1wIDwgMCkKKwkJCQkJdG1wID0gMDsKKwkJCQlpdGVtX2FkZF9zdHIoIiUqYyVzJXMiLCB0bXAsICcgJywgXyhtZW51X2dldF9wcm9tcHQobWVudSkpLAorCQkJCQkgICAgIChzeW1faGFzX3ZhbHVlKHN5bSkgfHwgIXN5bV9pc19jaGFuZ2FibGUoc3ltKSkgPworCQkJCQkgICAgICIiIDogXygiIChORVcpIikpOworCQkJCWl0ZW1fc2V0X3RhZygncycpOworCQkJCWl0ZW1fc2V0X2RhdGEobWVudSk7CisJCQkJZ290byBjb25mX2NoaWxkczsKKwkJCX0KKwkJfQorCQlpdGVtX2FkZF9zdHIoIiUqYyVzJXMiLCBpbmRlbnQgKyAxLCAnICcsIF8obWVudV9nZXRfcHJvbXB0KG1lbnUpKSwKKwkJCSAgKHN5bV9oYXNfdmFsdWUoc3ltKSB8fCAhc3ltX2lzX2NoYW5nYWJsZShzeW0pKSA/CisJCQkgICIiIDogXygiIChORVcpIikpOworCQlpZiAobWVudS0+cHJvbXB0LT50eXBlID09IFBfTUVOVSkgeworCQkJaXRlbV9hZGRfc3RyKCIgIC0tLT4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworY29uZl9jaGlsZHM6CisJaW5kZW50ICs9IGRvaW50OworCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkKKwkJYnVpbGRfY29uZihjaGlsZCk7CisJaW5kZW50IC09IGRvaW50OworfQorCitzdGF0aWMgdm9pZCBjb25mKHN0cnVjdCBtZW51ICptZW51KQoreworCXN0cnVjdCBtZW51ICpzdWJtZW51OworCWNvbnN0IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3RydWN0IG1lbnUgKmFjdGl2ZV9tZW51ID0gTlVMTDsKKwlpbnQgcmVzOworCWludCBzX3Njcm9sbCA9IDA7CisKKwl3aGlsZSAoMSkgeworCQlpdGVtX3Jlc2V0KCk7CisJCWN1cnJlbnRfbWVudSA9IG1lbnU7CisJCWJ1aWxkX2NvbmYobWVudSk7CisJCWlmICghY2hpbGRfY291bnQpCisJCQlicmVhazsKKwkJaWYgKG1lbnUgPT0gJnJvb3RtZW51KSB7CisJCQlpdGVtX21ha2UoIi0tLSAiKTsKKwkJCWl0ZW1fc2V0X3RhZygnOicpOworCQkJaXRlbV9tYWtlKF8oIiAgICBMb2FkIGFuIEFsdGVybmF0ZSBDb25maWd1cmF0aW9uIEZpbGUiKSk7CisJCQlpdGVtX3NldF90YWcoJ0wnKTsKKwkJCWl0ZW1fbWFrZShfKCIgICAgU2F2ZSBhbiBBbHRlcm5hdGUgQ29uZmlndXJhdGlvbiBGaWxlIikpOworCQkJaXRlbV9zZXRfdGFnKCdTJyk7CisJCX0KKwkJZGlhbG9nX2NsZWFyKCk7CisJCXJlcyA9IGRpYWxvZ19tZW51KHByb21wdCA/IF8ocHJvbXB0KSA6IF8oIk1haW4gTWVudSIpLAorCQkJCSAgXyhtZW51X2luc3RydWN0aW9ucyksCisJCQkJICBhY3RpdmVfbWVudSwgJnNfc2Nyb2xsKTsKKwkJaWYgKHJlcyA9PSAxIHx8IHJlcyA9PSBLRVlfRVNDIHx8IHJlcyA9PSAtRVJSRElTUExBWVRPT1NNQUxMKQorCQkJYnJlYWs7CisJCWlmICghaXRlbV9hY3RpdmF0ZV9zZWxlY3RlZCgpKQorCQkJY29udGludWU7CisJCWlmICghaXRlbV90YWcoKSkKKwkJCWNvbnRpbnVlOworCisJCXN1Ym1lbnUgPSBpdGVtX2RhdGEoKTsKKwkJYWN0aXZlX21lbnUgPSBpdGVtX2RhdGEoKTsKKwkJaWYgKHN1Ym1lbnUpCisJCQlzeW0gPSBzdWJtZW51LT5zeW07CisJCWVsc2UKKwkJCXN5bSA9IE5VTEw7CisKKwkJc3dpdGNoIChyZXMpIHsKKwkJY2FzZSAwOgorCQkJc3dpdGNoIChpdGVtX3RhZygpKSB7CisJCQljYXNlICdtJzoKKwkJCQlpZiAoc2luZ2xlX21lbnVfbW9kZSkKKwkJCQkJc3VibWVudS0+ZGF0YSA9ICh2b2lkICopIChsb25nKSAhc3VibWVudS0+ZGF0YTsKKwkJCQllbHNlCisJCQkJCWNvbmYoc3VibWVudSk7CisJCQkJYnJlYWs7CisJCQljYXNlICd0JzoKKwkJCQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pICYmIHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSA9PSB5ZXMpCisJCQkJCWNvbmZfY2hvaWNlKHN1Ym1lbnUpOworCQkJCWVsc2UgaWYgKHN1Ym1lbnUtPnByb21wdC0+dHlwZSA9PSBQX01FTlUpCisJCQkJCWNvbmYoc3VibWVudSk7CisJCQkJYnJlYWs7CisJCQljYXNlICdzJzoKKwkJCQljb25mX3N0cmluZyhzdWJtZW51KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0wnOgorCQkJCWNvbmZfbG9hZCgpOworCQkJCWJyZWFrOworCQkJY2FzZSAnUyc6CisJCQkJY29uZl9zYXZlKCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJaWYgKHN5bSkKKwkJCQlzaG93X2hlbHAoc3VibWVudSk7CisJCQllbHNlCisJCQkJc2hvd19oZWxwdGV4dChfKCJSRUFETUUiKSwgXyhtY29uZl9yZWFkbWUpKTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlpZiAoaXRlbV9pc190YWcoJ3QnKSkgeworCQkJCWlmIChzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwgeWVzKSkKKwkJCQkJYnJlYWs7CisJCQkJaWYgKHN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBtb2QpKQorCQkJCQlzaG93X3RleHRib3goTlVMTCwgc2V0bW9kX3RleHQsIDYsIDc0KTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQlpZiAoaXRlbV9pc190YWcoJ3QnKSkKKwkJCQlzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwgbm8pOworCQkJYnJlYWs7CisJCWNhc2UgNToKKwkJCWlmIChpdGVtX2lzX3RhZygndCcpKQorCQkJCXN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBtb2QpOworCQkJYnJlYWs7CisJCWNhc2UgNjoKKwkJCWlmIChpdGVtX2lzX3RhZygndCcpKQorCQkJCXN5bV90b2dnbGVfdHJpc3RhdGVfdmFsdWUoc3ltKTsKKwkJCWVsc2UgaWYgKGl0ZW1faXNfdGFnKCdtJykpCisJCQkJY29uZihzdWJtZW51KTsKKwkJCWJyZWFrOworCQljYXNlIDc6CisJCQlzZWFyY2hfY29uZigpOworCQkJYnJlYWs7CisJCWNhc2UgODoKKwkJCXNob3dfYWxsX29wdGlvbnMgPSAhc2hvd19hbGxfb3B0aW9uczsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBzaG93X3RleHRib3goY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnRleHQsIGludCByLCBpbnQgYykKK3sKKwlkaWFsb2dfY2xlYXIoKTsKKwlkaWFsb2dfdGV4dGJveCh0aXRsZSwgdGV4dCwgciwgYyk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfaGVscHRleHQoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnRleHQpCit7CisJc2hvd190ZXh0Ym94KHRpdGxlLCB0ZXh0LCAwLCAwKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19oZWxwKHN0cnVjdCBtZW51ICptZW51KQoreworCXN0cnVjdCBnc3RyIGhlbHAgPSBzdHJfbmV3KCk7CisKKwloZWxwLm1heF93aWR0aCA9IGdldG1heHgoc3Rkc2NyKSAtIDEwOworCW1lbnVfZ2V0X2V4dF9oZWxwKG1lbnUsICZoZWxwKTsKKworCXNob3dfaGVscHRleHQoXyhtZW51X2dldF9wcm9tcHQobWVudSkpLCBzdHJfZ2V0KCZoZWxwKSk7CisJc3RyX2ZyZWUoJmhlbHApOworfQorCitzdGF0aWMgdm9pZCBjb25mX2Nob2ljZShzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwljb25zdCBjaGFyICpwcm9tcHQgPSBfKG1lbnVfZ2V0X3Byb21wdChtZW51KSk7CisJc3RydWN0IG1lbnUgKmNoaWxkOworCXN0cnVjdCBzeW1ib2wgKmFjdGl2ZTsKKworCWFjdGl2ZSA9IHN5bV9nZXRfY2hvaWNlX3ZhbHVlKG1lbnUtPnN5bSk7CisJd2hpbGUgKDEpIHsKKwkJaW50IHJlczsKKwkJaW50IHNlbGVjdGVkOworCQlpdGVtX3Jlc2V0KCk7CisKKwkJY3VycmVudF9tZW51ID0gbWVudTsKKwkJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7CisJCQlpZiAoIW1lbnVfaXNfdmlzaWJsZShjaGlsZCkpCisJCQkJY29udGludWU7CisJCQlpZiAoY2hpbGQtPnN5bSkKKwkJCQlpdGVtX21ha2UoIiVzIiwgXyhtZW51X2dldF9wcm9tcHQoY2hpbGQpKSk7CisJCQllbHNlIHsKKwkJCQlpdGVtX21ha2UoIioqKiAlcyAqKioiLCBfKG1lbnVfZ2V0X3Byb21wdChjaGlsZCkpKTsKKwkJCQlpdGVtX3NldF90YWcoJzonKTsKKwkJCX0KKwkJCWl0ZW1fc2V0X2RhdGEoY2hpbGQpOworCQkJaWYgKGNoaWxkLT5zeW0gPT0gYWN0aXZlKQorCQkJCWl0ZW1fc2V0X3NlbGVjdGVkKDEpOworCQkJaWYgKGNoaWxkLT5zeW0gPT0gc3ltX2dldF9jaG9pY2VfdmFsdWUobWVudS0+c3ltKSkKKwkJCQlpdGVtX3NldF90YWcoJ1gnKTsKKwkJfQorCQlkaWFsb2dfY2xlYXIoKTsKKwkJcmVzID0gZGlhbG9nX2NoZWNrbGlzdChwcm9tcHQgPyBfKHByb21wdCkgOiBfKCJNYWluIE1lbnUiKSwKKwkJCQkJXyhyYWRpb2xpc3RfaW5zdHJ1Y3Rpb25zKSwKKwkJCQkJIDE1LCA3MCwgNik7CisJCXNlbGVjdGVkID0gaXRlbV9hY3RpdmF0ZV9zZWxlY3RlZCgpOworCQlzd2l0Y2ggKHJlcykgeworCQljYXNlIDA6CisJCQlpZiAoc2VsZWN0ZWQpIHsKKwkJCQljaGlsZCA9IGl0ZW1fZGF0YSgpOworCQkJCWlmICghY2hpbGQtPnN5bSkKKwkJCQkJYnJlYWs7CisKKwkJCQlzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKGNoaWxkLT5zeW0sIHllcyk7CisJCQl9CisJCQlyZXR1cm47CisJCWNhc2UgMToKKwkJCWlmIChzZWxlY3RlZCkgeworCQkJCWNoaWxkID0gaXRlbV9kYXRhKCk7CisJCQkJc2hvd19oZWxwKGNoaWxkKTsKKwkJCQlhY3RpdmUgPSBjaGlsZC0+c3ltOworCQkJfSBlbHNlCisJCQkJc2hvd19oZWxwKG1lbnUpOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX0VTQzoKKwkJCXJldHVybjsKKwkJY2FzZSAtRVJSRElTUExBWVRPT1NNQUxMOgorCQkJcmV0dXJuOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBjb25mX3N0cmluZyhzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwljb25zdCBjaGFyICpwcm9tcHQgPSBtZW51X2dldF9wcm9tcHQobWVudSk7CisKKwl3aGlsZSAoMSkgeworCQlpbnQgcmVzOworCQljb25zdCBjaGFyICpoZWFkaW5nOworCisJCXN3aXRjaCAoc3ltX2dldF90eXBlKG1lbnUtPnN5bSkpIHsKKwkJY2FzZSBTX0lOVDoKKwkJCWhlYWRpbmcgPSBfKGlucHV0Ym94X2luc3RydWN0aW9uc19pbnQpOworCQkJYnJlYWs7CisJCWNhc2UgU19IRVg6CisJCQloZWFkaW5nID0gXyhpbnB1dGJveF9pbnN0cnVjdGlvbnNfaGV4KTsKKwkJCWJyZWFrOworCQljYXNlIFNfU1RSSU5HOgorCQkJaGVhZGluZyA9IF8oaW5wdXRib3hfaW5zdHJ1Y3Rpb25zX3N0cmluZyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWhlYWRpbmcgPSBfKCJJbnRlcm5hbCBtY29uZiBlcnJvciEiKTsKKwkJfQorCQlkaWFsb2dfY2xlYXIoKTsKKwkJcmVzID0gZGlhbG9nX2lucHV0Ym94KHByb21wdCA/IF8ocHJvbXB0KSA6IF8oIk1haW4gTWVudSIpLAorCQkJCSAgICAgIGhlYWRpbmcsIDEwLCA3NSwKKwkJCQkgICAgICBzeW1fZ2V0X3N0cmluZ192YWx1ZShtZW51LT5zeW0pKTsKKwkJc3dpdGNoIChyZXMpIHsKKwkJY2FzZSAwOgorCQkJaWYgKHN5bV9zZXRfc3RyaW5nX3ZhbHVlKG1lbnUtPnN5bSwgZGlhbG9nX2lucHV0X3Jlc3VsdCkpCisJCQkJcmV0dXJuOworCQkJc2hvd190ZXh0Ym94KE5VTEwsIF8oIllvdSBoYXZlIG1hZGUgYW4gaW52YWxpZCBlbnRyeS4iKSwgNSwgNDMpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXNob3dfaGVscChtZW51KTsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9FU0M6CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZfbG9hZCh2b2lkKQoreworCisJd2hpbGUgKDEpIHsKKwkJaW50IHJlczsKKwkJZGlhbG9nX2NsZWFyKCk7CisJCXJlcyA9IGRpYWxvZ19pbnB1dGJveChOVUxMLCBsb2FkX2NvbmZpZ190ZXh0LAorCQkJCSAgICAgIDExLCA1NSwgZmlsZW5hbWUpOworCQlzd2l0Y2gocmVzKSB7CisJCWNhc2UgMDoKKwkJCWlmICghZGlhbG9nX2lucHV0X3Jlc3VsdFswXSkKKwkJCQlyZXR1cm47CisJCQlpZiAoIWNvbmZfcmVhZChkaWFsb2dfaW5wdXRfcmVzdWx0KSkgeworCQkJCXNldF9jb25maWdfZmlsZW5hbWUoZGlhbG9nX2lucHV0X3Jlc3VsdCk7CisJCQkJc3ltX3NldF9jaGFuZ2VfY291bnQoMSk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJc2hvd190ZXh0Ym94KE5VTEwsIF8oIkZpbGUgZG9lcyBub3QgZXhpc3QhIiksIDUsIDM4KTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlzaG93X2hlbHB0ZXh0KF8oIkxvYWQgQWx0ZXJuYXRlIENvbmZpZ3VyYXRpb24iKSwgbG9hZF9jb25maWdfaGVscCk7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfRVNDOgorCQkJcmV0dXJuOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBjb25mX3NhdmUodm9pZCkKK3sKKwl3aGlsZSAoMSkgeworCQlpbnQgcmVzOworCQlkaWFsb2dfY2xlYXIoKTsKKwkJcmVzID0gZGlhbG9nX2lucHV0Ym94KE5VTEwsIHNhdmVfY29uZmlnX3RleHQsCisJCQkJICAgICAgMTEsIDU1LCBmaWxlbmFtZSk7CisJCXN3aXRjaChyZXMpIHsKKwkJY2FzZSAwOgorCQkJaWYgKCFkaWFsb2dfaW5wdXRfcmVzdWx0WzBdKQorCQkJCXJldHVybjsKKwkJCWlmICghY29uZl93cml0ZShkaWFsb2dfaW5wdXRfcmVzdWx0KSkgeworCQkJCXNldF9jb25maWdfZmlsZW5hbWUoZGlhbG9nX2lucHV0X3Jlc3VsdCk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJc2hvd190ZXh0Ym94KE5VTEwsIF8oIkNhbid0IGNyZWF0ZSBmaWxlISAgUHJvYmFibHkgYSBub25leGlzdGVudCBkaXJlY3RvcnkuIiksIDUsIDYwKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlzaG93X2hlbHB0ZXh0KF8oIlNhdmUgQWx0ZXJuYXRlIENvbmZpZ3VyYXRpb24iKSwgc2F2ZV9jb25maWdfaGVscCk7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfRVNDOgorCQkJcmV0dXJuOworCQl9CisJfQorfQorCitpbnQgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKK3sKKwlpbnQgc2F2ZWRfeCwgc2F2ZWRfeTsKKwljaGFyICptb2RlOworCWludCByZXM7CisKKwlzZXRsb2NhbGUoTENfQUxMLCAiIik7CisJYmluZHRleHRkb21haW4oUEFDS0FHRSwgTE9DQUxFRElSKTsKKwl0ZXh0ZG9tYWluKFBBQ0tBR0UpOworCisJY29uZl9wYXJzZShhdlsxXSk7CisJY29uZl9yZWFkKE5VTEwpOworCisJbW9kZSA9IGdldGVudigiTUVOVUNPTkZJR19NT0RFIik7CisJaWYgKG1vZGUpIHsKKwkJaWYgKCFzdHJjYXNlY21wKG1vZGUsICJzaW5nbGVfbWVudSIpKQorCQkJc2luZ2xlX21lbnVfbW9kZSA9IDE7CisJfQorCisJaW5pdHNjcigpOworCisJZ2V0eXgoc3Rkc2NyLCBzYXZlZF95LCBzYXZlZF94KTsKKwlpZiAoaW5pdF9kaWFsb2coTlVMTCkpIHsKKwkJZnByaW50ZihzdGRlcnIsIE5fKCJZb3VyIGRpc3BsYXkgaXMgdG9vIHNtYWxsIHRvIHJ1biBNZW51Y29uZmlnIVxuIikpOworCQlmcHJpbnRmKHN0ZGVyciwgTl8oIkl0IG11c3QgYmUgYXQgbGVhc3QgMTkgbGluZXMgYnkgODAgY29sdW1ucy5cbiIpKTsKKwkJcmV0dXJuIDE7CisJfQorCisJc2V0X2NvbmZpZ19maWxlbmFtZShjb25mX2dldF9jb25maWduYW1lKCkpOworCWRvIHsKKwkJY29uZigmcm9vdG1lbnUpOworCQlkaWFsb2dfY2xlYXIoKTsKKwkJaWYgKGNvbmZfZ2V0X2NoYW5nZWQoKSkKKwkJCXJlcyA9IGRpYWxvZ195ZXNubyhOVUxMLAorCQkJCQkgICBfKCJEbyB5b3Ugd2lzaCB0byBzYXZlIHlvdXIgIgorCQkJCQkgICAgICJuZXcgY29uZmlndXJhdGlvbj9cbiIKKwkJCQkJICAgICAiPEVTQz48RVNDPiB0byBjb250aW51ZS4iKSwKKwkJCQkJICAgNiwgNjApOworCQllbHNlCisJCQlyZXMgPSAtMTsKKwl9IHdoaWxlIChyZXMgPT0gS0VZX0VTQyk7CisJZW5kX2RpYWxvZyhzYXZlZF94LCBzYXZlZF95KTsKKworCXN3aXRjaCAocmVzKSB7CisJY2FzZSAwOgorCQlpZiAoY29uZl93cml0ZShmaWxlbmFtZSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJcblxuIgorCQkJCSJFcnJvciB3aGlsZSB3cml0aW5nIG9mIHRoZSBjb25maWd1cmF0aW9uLlxuIgorCQkJCSJZb3VyIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB3ZXJlIE5PVCBzYXZlZC4iCisJCQkJIlxuXG4iKSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCWNhc2UgLTE6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZwcmludGYoc3RkZXJyLCBfKCJcblxuIgorCQkJIllvdXIgY29uZmlndXJhdGlvbiBjaGFuZ2VzIHdlcmUgTk9UIHNhdmVkLiIKKwkJCSJcblxuIikpOworCX0KKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2tjb25maWcvbWVudS5jIGIvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL21lbnUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTFmNjg4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL21lbnUuYwpAQCAtMCwwICsxLDYyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi4wLgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2RlZmluZSBMS0NfRElSRUNUX0xJTksKKyNpbmNsdWRlICJsa2MuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgbm9oZWxwX3RleHRbXSA9IE5fKAorCSJUaGVyZSBpcyBubyBoZWxwIGF2YWlsYWJsZSBmb3IgdGhpcyBvcHRpb24uXG4iKTsKKworc3RydWN0IG1lbnUgcm9vdG1lbnU7CitzdGF0aWMgc3RydWN0IG1lbnUgKipsYXN0X2VudHJ5X3B0cjsKKworc3RydWN0IGZpbGUgKmZpbGVfbGlzdDsKK3N0cnVjdCBmaWxlICpjdXJyZW50X2ZpbGU7CisKK3ZvaWQgbWVudV93YXJuKHN0cnVjdCBtZW51ICptZW51LCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXZhX3N0YXJ0KGFwLCBmbXQpOworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6d2FybmluZzogIiwgbWVudS0+ZmlsZS0+bmFtZSwgbWVudS0+bGluZW5vKTsKKwl2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwl2YV9lbmQoYXApOworfQorCitzdGF0aWMgdm9pZCBwcm9wX3dhcm4oc3RydWN0IHByb3BlcnR5ICpwcm9wLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXZhX3N0YXJ0KGFwLCBmbXQpOworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6d2FybmluZzogIiwgcHJvcC0+ZmlsZS0+bmFtZSwgcHJvcC0+bGluZW5vKTsKKwl2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwl2YV9lbmQoYXApOworfQorCit2b2lkIF9tZW51X2luaXQodm9pZCkKK3sKKwljdXJyZW50X2VudHJ5ID0gY3VycmVudF9tZW51ID0gJnJvb3RtZW51OworCWxhc3RfZW50cnlfcHRyID0gJnJvb3RtZW51Lmxpc3Q7Cit9CisKK3ZvaWQgbWVudV9hZGRfZW50cnkoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBtZW51ICptZW51OworCisJbWVudSA9IG1hbGxvYyhzaXplb2YoKm1lbnUpKTsKKwltZW1zZXQobWVudSwgMCwgc2l6ZW9mKCptZW51KSk7CisJbWVudS0+c3ltID0gc3ltOworCW1lbnUtPnBhcmVudCA9IGN1cnJlbnRfbWVudTsKKwltZW51LT5maWxlID0gY3VycmVudF9maWxlOworCW1lbnUtPmxpbmVubyA9IHpjb25mX2xpbmVubygpOworCisJKmxhc3RfZW50cnlfcHRyID0gbWVudTsKKwlsYXN0X2VudHJ5X3B0ciA9ICZtZW51LT5uZXh0OworCWN1cnJlbnRfZW50cnkgPSBtZW51OworCWlmIChzeW0pCisJCW1lbnVfYWRkX3N5bWJvbChQX1NZTUJPTCwgc3ltLCBOVUxMKTsKK30KKwordm9pZCBtZW51X2VuZF9lbnRyeSh2b2lkKQoreworfQorCitzdHJ1Y3QgbWVudSAqbWVudV9hZGRfbWVudSh2b2lkKQoreworCW1lbnVfZW5kX2VudHJ5KCk7CisJbGFzdF9lbnRyeV9wdHIgPSAmY3VycmVudF9lbnRyeS0+bGlzdDsKKwlyZXR1cm4gY3VycmVudF9tZW51ID0gY3VycmVudF9lbnRyeTsKK30KKwordm9pZCBtZW51X2VuZF9tZW51KHZvaWQpCit7CisJbGFzdF9lbnRyeV9wdHIgPSAmY3VycmVudF9tZW51LT5uZXh0OworCWN1cnJlbnRfbWVudSA9IGN1cnJlbnRfbWVudS0+cGFyZW50OworfQorCitzdGF0aWMgc3RydWN0IGV4cHIgKm1lbnVfY2hlY2tfZGVwKHN0cnVjdCBleHByICplKQoreworCWlmICghZSkKKwkJcmV0dXJuIGU7CisKKwlzd2l0Y2ggKGUtPnR5cGUpIHsKKwljYXNlIEVfTk9UOgorCQllLT5sZWZ0LmV4cHIgPSBtZW51X2NoZWNrX2RlcChlLT5sZWZ0LmV4cHIpOworCQlicmVhazsKKwljYXNlIEVfT1I6CisJY2FzZSBFX0FORDoKKwkJZS0+bGVmdC5leHByID0gbWVudV9jaGVja19kZXAoZS0+bGVmdC5leHByKTsKKwkJZS0+cmlnaHQuZXhwciA9IG1lbnVfY2hlY2tfZGVwKGUtPnJpZ2h0LmV4cHIpOworCQlicmVhazsKKwljYXNlIEVfU1lNQk9MOgorCQkvKiBjaGFuZ2UgJ20nIGludG8gJ20nICYmIE1PRFVMRVMgKi8KKwkJaWYgKGUtPmxlZnQuc3ltID09ICZzeW1ib2xfbW9kKQorCQkJcmV0dXJuIGV4cHJfYWxsb2NfYW5kKGUsIGV4cHJfYWxsb2Nfc3ltYm9sKG1vZHVsZXNfc3ltKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gZTsKK30KKwordm9pZCBtZW51X2FkZF9kZXAoc3RydWN0IGV4cHIgKmRlcCkKK3sKKwljdXJyZW50X2VudHJ5LT5kZXAgPSBleHByX2FsbG9jX2FuZChjdXJyZW50X2VudHJ5LT5kZXAsIG1lbnVfY2hlY2tfZGVwKGRlcCkpOworfQorCit2b2lkIG1lbnVfc2V0X3R5cGUoaW50IHR5cGUpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltID0gY3VycmVudF9lbnRyeS0+c3ltOworCisJaWYgKHN5bS0+dHlwZSA9PSB0eXBlKQorCQlyZXR1cm47CisJaWYgKHN5bS0+dHlwZSA9PSBTX1VOS05PV04pIHsKKwkJc3ltLT50eXBlID0gdHlwZTsKKwkJcmV0dXJuOworCX0KKwltZW51X3dhcm4oY3VycmVudF9lbnRyeSwgInR5cGUgb2YgJyVzJyByZWRlZmluZWQgZnJvbSAnJXMnIHRvICclcyciLAorCSAgICBzeW0tPm5hbWUgPyBzeW0tPm5hbWUgOiAiPGNob2ljZT4iLAorCSAgICBzeW1fdHlwZV9uYW1lKHN5bS0+dHlwZSksIHN5bV90eXBlX25hbWUodHlwZSkpOworfQorCitzdHJ1Y3QgcHJvcGVydHkgKm1lbnVfYWRkX3Byb3AoZW51bSBwcm9wX3R5cGUgdHlwZSwgY2hhciAqcHJvbXB0LCBzdHJ1Y3QgZXhwciAqZXhwciwgc3RydWN0IGV4cHIgKmRlcCkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3AgPSBwcm9wX2FsbG9jKHR5cGUsIGN1cnJlbnRfZW50cnktPnN5bSk7CisKKwlwcm9wLT5tZW51ID0gY3VycmVudF9lbnRyeTsKKwlwcm9wLT5leHByID0gZXhwcjsKKwlwcm9wLT52aXNpYmxlLmV4cHIgPSBtZW51X2NoZWNrX2RlcChkZXApOworCisJaWYgKHByb21wdCkgeworCQkvKiBGb3IgY3Jvc3Rvb2wtTkcsIGEgbGVhZGluZyBwaXBlIGZvbGxvd2VkIHdpdGggc3BhY2VzCisJCSAqIG1lYW5zIHRoYXQgcGlwZSBzaGFsbCBiZSByZW1vdmVkLCBhbmQgdGhlIHNwYWNlcyBzaG91bGQKKwkJICogbm90IGJlIHRyaW1tZWQuCisJCSAqLworCQlpZiAoKnByb21wdCA9PSAnfCcpCisJCQlwcm9tcHQrKzsKKwkJZWxzZSBpZiAoaXNzcGFjZSgqcHJvbXB0KSkgeworCQkJcHJvcF93YXJuKHByb3AsICJsZWFkaW5nIHdoaXRlc3BhY2UgaWdub3JlZCIpOworCQkJd2hpbGUgKGlzc3BhY2UoKnByb21wdCkpCisJCQkJcHJvbXB0Kys7CisJCX0KKwkJaWYgKGN1cnJlbnRfZW50cnktPnByb21wdCAmJiBjdXJyZW50X2VudHJ5ICE9ICZyb290bWVudSkKKwkJCXByb3Bfd2Fybihwcm9wLCAicHJvbXB0IHJlZGVmaW5lZCIpOworCisJCS8qIEFwcGx5IGFsbCB1cHBlciBtZW51cycgdmlzaWJpbGl0aWVzIHRvIGFjdHVhbCBwcm9tcHRzLiAqLworCQlpZih0eXBlID09IFBfUFJPTVBUKSB7CisJCQlzdHJ1Y3QgbWVudSAqbWVudSA9IGN1cnJlbnRfZW50cnk7CisKKwkJCXdoaWxlICgobWVudSA9IG1lbnUtPnBhcmVudCkgIT0gTlVMTCkgeworCQkJCWlmICghbWVudS0+dmlzaWJpbGl0eSkKKwkJCQkJY29udGludWU7CisJCQkJcHJvcC0+dmlzaWJsZS5leHByCisJCQkJCT0gZXhwcl9hbGxvY19hbmQocHJvcC0+dmlzaWJsZS5leHByLAorCQkJCQkJCSBtZW51LT52aXNpYmlsaXR5KTsKKwkJCX0KKwkJfQorCisJCWN1cnJlbnRfZW50cnktPnByb21wdCA9IHByb3A7CisJfQorCXByb3AtPnRleHQgPSBwcm9tcHQ7CisKKwlyZXR1cm4gcHJvcDsKK30KKworc3RydWN0IHByb3BlcnR5ICptZW51X2FkZF9wcm9tcHQoZW51bSBwcm9wX3R5cGUgdHlwZSwgY2hhciAqcHJvbXB0LCBzdHJ1Y3QgZXhwciAqZGVwKQoreworCXJldHVybiBtZW51X2FkZF9wcm9wKHR5cGUsIHByb21wdCwgTlVMTCwgZGVwKTsKK30KKwordm9pZCBtZW51X2FkZF92aXNpYmlsaXR5KHN0cnVjdCBleHByICpleHByKQoreworCWN1cnJlbnRfZW50cnktPnZpc2liaWxpdHkgPSBleHByX2FsbG9jX2FuZChjdXJyZW50X2VudHJ5LT52aXNpYmlsaXR5LAorCSAgICBleHByKTsKK30KKwordm9pZCBtZW51X2FkZF9leHByKGVudW0gcHJvcF90eXBlIHR5cGUsIHN0cnVjdCBleHByICpleHByLCBzdHJ1Y3QgZXhwciAqZGVwKQoreworCW1lbnVfYWRkX3Byb3AodHlwZSwgTlVMTCwgZXhwciwgZGVwKTsKK30KKwordm9pZCBtZW51X2FkZF9zeW1ib2woZW51bSBwcm9wX3R5cGUgdHlwZSwgc3RydWN0IHN5bWJvbCAqc3ltLCBzdHJ1Y3QgZXhwciAqZGVwKQoreworCW1lbnVfYWRkX3Byb3AodHlwZSwgTlVMTCwgZXhwcl9hbGxvY19zeW1ib2woc3ltKSwgZGVwKTsKK30KKwordm9pZCBtZW51X2FkZF9vcHRpb24oaW50IHRva2VuLCBjaGFyICphcmcpCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCisJc3dpdGNoICh0b2tlbikgeworCWNhc2UgVF9PUFRfTU9EVUxFUzoKKwkJcHJvcCA9IHByb3BfYWxsb2MoUF9ERUZBVUxULCBtb2R1bGVzX3N5bSk7CisJCXByb3AtPmV4cHIgPSBleHByX2FsbG9jX3N5bWJvbChjdXJyZW50X2VudHJ5LT5zeW0pOworCQlicmVhazsKKwljYXNlIFRfT1BUX0RFRkNPTkZJR19MSVNUOgorCQlpZiAoIXN5bV9kZWZjb25maWdfbGlzdCkKKwkJCXN5bV9kZWZjb25maWdfbGlzdCA9IGN1cnJlbnRfZW50cnktPnN5bTsKKwkJZWxzZSBpZiAoc3ltX2RlZmNvbmZpZ19saXN0ICE9IGN1cnJlbnRfZW50cnktPnN5bSkKKwkJCXpjb25mX2Vycm9yKCJ0cnlpbmcgdG8gcmVkZWZpbmUgZGVmY29uZmlnIHN5bWJvbCIpOworCQlicmVhazsKKwljYXNlIFRfT1BUX0VOVjoKKwkJcHJvcF9hZGRfZW52KGFyZyk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBtZW51X3ZhbGlkYXRlX251bWJlcihzdHJ1Y3Qgc3ltYm9sICpzeW0sIHN0cnVjdCBzeW1ib2wgKnN5bTIpCit7CisJcmV0dXJuIHN5bTItPnR5cGUgPT0gU19JTlQgfHwgc3ltMi0+dHlwZSA9PSBTX0hFWCB8fAorCSAgICAgICAoc3ltMi0+dHlwZSA9PSBTX1VOS05PV04gJiYgc3ltX3N0cmluZ192YWxpZChzeW0sIHN5bTItPm5hbWUpKTsKK30KKworc3RhdGljIHZvaWQgc3ltX2NoZWNrX3Byb3Aoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0yOworCWZvciAocHJvcCA9IHN5bS0+cHJvcDsgcHJvcDsgcHJvcCA9IHByb3AtPm5leHQpIHsKKwkJc3dpdGNoIChwcm9wLT50eXBlKSB7CisJCWNhc2UgUF9ERUZBVUxUOgorCQkJaWYgKChzeW0tPnR5cGUgPT0gU19TVFJJTkcgfHwgc3ltLT50eXBlID09IFNfSU5UIHx8IHN5bS0+dHlwZSA9PSBTX0hFWCkgJiYKKwkJCSAgICBwcm9wLT5leHByLT50eXBlICE9IEVfU1lNQk9MKQorCQkJCXByb3Bfd2Fybihwcm9wLAorCQkJCSAgICAiZGVmYXVsdCBmb3IgY29uZmlnIHN5bWJvbCAnJXMnIgorCQkJCSAgICAiIG11c3QgYmUgYSBzaW5nbGUgc3ltYm9sIiwgc3ltLT5uYW1lKTsKKwkJCWlmIChwcm9wLT5leHByLT50eXBlICE9IEVfU1lNQk9MKQorCQkJCWJyZWFrOworCQkJc3ltMiA9IHByb3BfZ2V0X3N5bWJvbChwcm9wKTsKKwkJCWlmIChzeW0tPnR5cGUgPT0gU19IRVggfHwgc3ltLT50eXBlID09IFNfSU5UKSB7CisJCQkJaWYgKCFtZW51X3ZhbGlkYXRlX251bWJlcihzeW0sIHN5bTIpKQorCQkJCQlwcm9wX3dhcm4ocHJvcCwKKwkJCQkJICAgICInJXMnOiBudW1iZXIgaXMgaW52YWxpZCIsCisJCQkJCSAgICBzeW0tPm5hbWUpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUF9TRUxFQ1Q6CisJCQlzeW0yID0gcHJvcF9nZXRfc3ltYm9sKHByb3ApOworCQkJaWYgKHN5bS0+dHlwZSAhPSBTX0JPT0xFQU4gJiYgc3ltLT50eXBlICE9IFNfVFJJU1RBVEUpCisJCQkJcHJvcF93YXJuKHByb3AsCisJCQkJICAgICJjb25maWcgc3ltYm9sICclcycgdXNlcyBzZWxlY3QsIGJ1dCBpcyAiCisJCQkJICAgICJub3QgYm9vbGVhbiBvciB0cmlzdGF0ZSIsIHN5bS0+bmFtZSk7CisJCQllbHNlIGlmIChzeW0yLT50eXBlICE9IFNfVU5LTk9XTiAmJgorCQkJICAgICAgICAgc3ltMi0+dHlwZSAhPSBTX0JPT0xFQU4gJiYKKwkJCSAgICAgICAgIHN5bTItPnR5cGUgIT0gU19UUklTVEFURSkKKwkJCQlwcm9wX3dhcm4ocHJvcCwKKwkJCQkgICAgIiclcycgaGFzIHdyb25nIHR5cGUuICdzZWxlY3QnIG9ubHkgIgorCQkJCSAgICAiYWNjZXB0IGFyZ3VtZW50cyBvZiBib29sZWFuIGFuZCAiCisJCQkJICAgICJ0cmlzdGF0ZSB0eXBlIiwgc3ltMi0+bmFtZSk7CisJCQlicmVhazsKKwkJY2FzZSBQX1JBTkdFOgorCQkJaWYgKHN5bS0+dHlwZSAhPSBTX0lOVCAmJiBzeW0tPnR5cGUgIT0gU19IRVgpCisJCQkJcHJvcF93YXJuKHByb3AsICJyYW5nZSBpcyBvbmx5IGFsbG93ZWQgIgorCQkJCSAgICAgICAgICAgICAgICAiZm9yIGludCBvciBoZXggc3ltYm9scyIpOworCQkJaWYgKCFtZW51X3ZhbGlkYXRlX251bWJlcihzeW0sIHByb3AtPmV4cHItPmxlZnQuc3ltKSB8fAorCQkJICAgICFtZW51X3ZhbGlkYXRlX251bWJlcihzeW0sIHByb3AtPmV4cHItPnJpZ2h0LnN5bSkpCisJCQkJcHJvcF93YXJuKHByb3AsICJyYW5nZSBpcyBpbnZhbGlkIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCTsKKwkJfQorCX0KK30KKwordm9pZCBtZW51X2ZpbmFsaXplKHN0cnVjdCBtZW51ICpwYXJlbnQpCit7CisJc3RydWN0IG1lbnUgKm1lbnUsICpsYXN0X21lbnU7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3QgZXhwciAqcGFyZW50ZGVwLCAqYmFzZWRlcCwgKmRlcCwgKmRlcDIsICoqZXA7CisKKwlzeW0gPSBwYXJlbnQtPnN5bTsKKwlpZiAocGFyZW50LT5saXN0KSB7CisJCWlmIChzeW0gJiYgc3ltX2lzX2Nob2ljZShzeW0pKSB7CisJCQlpZiAoc3ltLT50eXBlID09IFNfVU5LTk9XTikgeworCQkJCS8qIGZpbmQgdGhlIGZpcnN0IGNob2ljZSB2YWx1ZSB0byBmaW5kIG91dCBjaG9pY2UgdHlwZSAqLworCQkJCWN1cnJlbnRfZW50cnkgPSBwYXJlbnQ7CisJCQkJZm9yIChtZW51ID0gcGFyZW50LT5saXN0OyBtZW51OyBtZW51ID0gbWVudS0+bmV4dCkgeworCQkJCQlpZiAobWVudS0+c3ltICYmIG1lbnUtPnN5bS0+dHlwZSAhPSBTX1VOS05PV04pIHsKKwkJCQkJCW1lbnVfc2V0X3R5cGUobWVudS0+c3ltLT50eXBlKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJaWYgKHBhcmVudC0+cHJvbXB0ICYmCisJCQkgICAgIWV4cHJfaXNfeWVzKHBhcmVudC0+cHJvbXB0LT52aXNpYmxlLmV4cHIpKSB7CisJCQkJcGFyZW50LT52aXNpYmlsaXR5ID0gZXhwcl9hbGxvY19hbmQgKHBhcmVudC0+dmlzaWJpbGl0eSwKKwkJCQkJCQkJICAgICBwYXJlbnQtPnByb21wdC0+dmlzaWJsZS5leHByKTsKKwkJCX0KKwkJCS8qIHNldCB0aGUgdHlwZSBvZiB0aGUgcmVtYWluaW5nIGNob2ljZSB2YWx1ZXMgKi8KKwkJCWZvciAobWVudSA9IHBhcmVudC0+bGlzdDsgbWVudTsgbWVudSA9IG1lbnUtPm5leHQpIHsKKwkJCQljdXJyZW50X2VudHJ5ID0gbWVudTsKKwkJCQlpZiAobWVudS0+c3ltICYmIG1lbnUtPnN5bS0+dHlwZSA9PSBTX1VOS05PV04pCisJCQkJCW1lbnVfc2V0X3R5cGUoc3ltLT50eXBlKTsKKwkJCX0KKwkJCXBhcmVudGRlcCA9IGV4cHJfYWxsb2Nfc3ltYm9sKHN5bSk7CisJCX0gZWxzZSBpZiAocGFyZW50LT5wcm9tcHQpCisJCQlwYXJlbnRkZXAgPSBwYXJlbnQtPnByb21wdC0+dmlzaWJsZS5leHByOworCQllbHNlCisJCQlwYXJlbnRkZXAgPSBwYXJlbnQtPmRlcDsKKworCQlmb3IgKG1lbnUgPSBwYXJlbnQtPmxpc3Q7IG1lbnU7IG1lbnUgPSBtZW51LT5uZXh0KSB7CisJCQliYXNlZGVwID0gZXhwcl90cmFuc2Zvcm0obWVudS0+ZGVwKTsKKwkJCWJhc2VkZXAgPSBleHByX2FsbG9jX2FuZChleHByX2NvcHkocGFyZW50ZGVwKSwgYmFzZWRlcCk7CisJCQliYXNlZGVwID0gZXhwcl9lbGltaW5hdGVfZHVwcyhiYXNlZGVwKTsKKwkJCW1lbnUtPmRlcCA9IGJhc2VkZXA7CisJCQlpZiAobWVudS0+c3ltKQorCQkJCXByb3AgPSBtZW51LT5zeW0tPnByb3A7CisJCQllbHNlCisJCQkJcHJvcCA9IG1lbnUtPnByb21wdDsKKwkJCWZvciAoOyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgeworCQkJCWlmIChwcm9wLT5tZW51ICE9IG1lbnUpCisJCQkJCWNvbnRpbnVlOworCQkJCWRlcCA9IGV4cHJfdHJhbnNmb3JtKHByb3AtPnZpc2libGUuZXhwcik7CisJCQkJZGVwID0gZXhwcl9hbGxvY19hbmQoZXhwcl9jb3B5KGJhc2VkZXApLCBkZXApOworCQkJCWRlcCA9IGV4cHJfZWxpbWluYXRlX2R1cHMoZGVwKTsKKwkJCQlpZiAobWVudS0+c3ltICYmIG1lbnUtPnN5bS0+dHlwZSAhPSBTX1RSSVNUQVRFKQorCQkJCQlkZXAgPSBleHByX3RyYW5zX2Jvb2woZGVwKTsKKwkJCQlwcm9wLT52aXNpYmxlLmV4cHIgPSBkZXA7CisJCQkJaWYgKHByb3AtPnR5cGUgPT0gUF9TRUxFQ1QpIHsKKwkJCQkJc3RydWN0IHN5bWJvbCAqZXMgPSBwcm9wX2dldF9zeW1ib2wocHJvcCk7CisJCQkJCWVzLT5yZXZfZGVwLmV4cHIgPSBleHByX2FsbG9jX29yKGVzLT5yZXZfZGVwLmV4cHIsCisJCQkJCQkJZXhwcl9hbGxvY19hbmQoZXhwcl9hbGxvY19zeW1ib2wobWVudS0+c3ltKSwgZXhwcl9jb3B5KGRlcCkpKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJZm9yIChtZW51ID0gcGFyZW50LT5saXN0OyBtZW51OyBtZW51ID0gbWVudS0+bmV4dCkKKwkJCW1lbnVfZmluYWxpemUobWVudSk7CisJfSBlbHNlIGlmIChzeW0pIHsKKwkJYmFzZWRlcCA9IHBhcmVudC0+cHJvbXB0ID8gcGFyZW50LT5wcm9tcHQtPnZpc2libGUuZXhwciA6IE5VTEw7CisJCWJhc2VkZXAgPSBleHByX3RyYW5zX2NvbXBhcmUoYmFzZWRlcCwgRV9VTkVRVUFMLCAmc3ltYm9sX25vKTsKKwkJYmFzZWRlcCA9IGV4cHJfZWxpbWluYXRlX2R1cHMoZXhwcl90cmFuc2Zvcm0oYmFzZWRlcCkpOworCQlsYXN0X21lbnUgPSBOVUxMOworCQlmb3IgKG1lbnUgPSBwYXJlbnQtPm5leHQ7IG1lbnU7IG1lbnUgPSBtZW51LT5uZXh0KSB7CisJCQlkZXAgPSBtZW51LT5wcm9tcHQgPyBtZW51LT5wcm9tcHQtPnZpc2libGUuZXhwciA6IG1lbnUtPmRlcDsKKwkJCWlmICghZXhwcl9jb250YWluc19zeW1ib2woZGVwLCBzeW0pKQorCQkJCWJyZWFrOworCQkJaWYgKGV4cHJfZGVwZW5kc19zeW1ib2woZGVwLCBzeW0pKQorCQkJCWdvdG8gbmV4dDsKKwkJCWRlcCA9IGV4cHJfdHJhbnNfY29tcGFyZShkZXAsIEVfVU5FUVVBTCwgJnN5bWJvbF9ubyk7CisJCQlkZXAgPSBleHByX2VsaW1pbmF0ZV9kdXBzKGV4cHJfdHJhbnNmb3JtKGRlcCkpOworCQkJZGVwMiA9IGV4cHJfY29weShiYXNlZGVwKTsKKwkJCWV4cHJfZWxpbWluYXRlX2VxKCZkZXAsICZkZXAyKTsKKwkJCWV4cHJfZnJlZShkZXApOworCQkJaWYgKCFleHByX2lzX3llcyhkZXAyKSkgeworCQkJCWV4cHJfZnJlZShkZXAyKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWV4cHJfZnJlZShkZXAyKTsKKwkJbmV4dDoKKwkJCW1lbnVfZmluYWxpemUobWVudSk7CisJCQltZW51LT5wYXJlbnQgPSBwYXJlbnQ7CisJCQlsYXN0X21lbnUgPSBtZW51OworCQl9CisJCWlmIChsYXN0X21lbnUpIHsKKwkJCXBhcmVudC0+bGlzdCA9IHBhcmVudC0+bmV4dDsKKwkJCXBhcmVudC0+bmV4dCA9IGxhc3RfbWVudS0+bmV4dDsKKwkJCWxhc3RfbWVudS0+bmV4dCA9IE5VTEw7CisJCX0KKworCQlzeW0tPmRpcl9kZXAuZXhwciA9IGV4cHJfYWxsb2Nfb3Ioc3ltLT5kaXJfZGVwLmV4cHIsIHBhcmVudC0+ZGVwKTsKKwl9CisJZm9yIChtZW51ID0gcGFyZW50LT5saXN0OyBtZW51OyBtZW51ID0gbWVudS0+bmV4dCkgeworCQlpZiAoc3ltICYmIHN5bV9pc19jaG9pY2Uoc3ltKSAmJgorCQkgICAgbWVudS0+c3ltICYmICFzeW1faXNfY2hvaWNlX3ZhbHVlKG1lbnUtPnN5bSkpIHsKKwkJCWN1cnJlbnRfZW50cnkgPSBtZW51OworCQkJbWVudS0+c3ltLT5mbGFncyB8PSBTWU1CT0xfQ0hPSUNFVkFMOworCQkJaWYgKCFtZW51LT5wcm9tcHQpCisJCQkJbWVudV93YXJuKG1lbnUsICJjaG9pY2UgdmFsdWUgbXVzdCBoYXZlIGEgcHJvbXB0Iik7CisJCQlmb3IgKHByb3AgPSBtZW51LT5zeW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7CisJCQkJaWYgKHByb3AtPnR5cGUgPT0gUF9ERUZBVUxUKQorCQkJCQlwcm9wX3dhcm4ocHJvcCwgImRlZmF1bHRzIGZvciBjaG9pY2UgIgorCQkJCQkJICAidmFsdWVzIG5vdCBzdXBwb3J0ZWQiKTsKKwkJCQlpZiAocHJvcC0+bWVudSA9PSBtZW51KQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAocHJvcC0+dHlwZSA9PSBQX1BST01QVCAmJgorCQkJCSAgICBwcm9wLT5tZW51LT5wYXJlbnQtPnN5bSAhPSBzeW0pCisJCQkJCXByb3Bfd2Fybihwcm9wLCAiY2hvaWNlIHZhbHVlIHVzZWQgb3V0c2lkZSBpdHMgY2hvaWNlIGdyb3VwIik7CisJCQl9CisJCQkvKiBOb24tdHJpc3RhdGUgY2hvaWNlIHZhbHVlcyBvZiB0cmlzdGF0ZSBjaG9pY2VzIG11c3QKKwkJCSAqIGRlcGVuZCBvbiB0aGUgY2hvaWNlIGJlaW5nIHNldCB0byBZLiBUaGUgY2hvaWNlCisJCQkgKiB2YWx1ZXMnIGRlcGVuZGVuY2llcyB3ZXJlIHByb3BhZ2F0ZWQgdG8gdGhlaXIKKwkJCSAqIHByb3BlcnRpZXMgYWJvdmUsIHNvIHRoZSBjaGFuZ2UgaGVyZSBtdXN0IGJlIHJlLQorCQkJICogcHJvcGFnYXRlZC4KKwkJCSAqLworCQkJaWYgKHN5bS0+dHlwZSA9PSBTX1RSSVNUQVRFICYmIG1lbnUtPnN5bS0+dHlwZSAhPSBTX1RSSVNUQVRFKSB7CisJCQkJYmFzZWRlcCA9IGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCBzeW0sICZzeW1ib2xfeWVzKTsKKwkJCQltZW51LT5kZXAgPSBleHByX2FsbG9jX2FuZChiYXNlZGVwLCBtZW51LT5kZXApOworCQkJCWZvciAocHJvcCA9IG1lbnUtPnN5bS0+cHJvcDsgcHJvcDsgcHJvcCA9IHByb3AtPm5leHQpIHsKKwkJCQkJaWYgKHByb3AtPm1lbnUgIT0gbWVudSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlwcm9wLT52aXNpYmxlLmV4cHIgPSBleHByX2FsbG9jX2FuZChleHByX2NvcHkoYmFzZWRlcCksCisJCQkJCQkJCQkgICAgcHJvcC0+dmlzaWJsZS5leHByKTsKKwkJCQl9CisJCQl9CisJCQltZW51X2FkZF9zeW1ib2woUF9DSE9JQ0UsIHN5bSwgTlVMTCk7CisJCQlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pOworCQkJZm9yIChlcCA9ICZwcm9wLT5leHByOyAqZXA7IGVwID0gJigqZXApLT5sZWZ0LmV4cHIpCisJCQkJOworCQkJKmVwID0gZXhwcl9hbGxvY19vbmUoRV9MSVNULCBOVUxMKTsKKwkJCSgqZXApLT5yaWdodC5zeW0gPSBtZW51LT5zeW07CisJCX0KKwkJaWYgKG1lbnUtPmxpc3QgJiYgKCFtZW51LT5wcm9tcHQgfHwgIW1lbnUtPnByb21wdC0+dGV4dCkpIHsKKwkJCWZvciAobGFzdF9tZW51ID0gbWVudS0+bGlzdDsgOyBsYXN0X21lbnUgPSBsYXN0X21lbnUtPm5leHQpIHsKKwkJCQlsYXN0X21lbnUtPnBhcmVudCA9IHBhcmVudDsKKwkJCQlpZiAoIWxhc3RfbWVudS0+bmV4dCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlsYXN0X21lbnUtPm5leHQgPSBtZW51LT5uZXh0OworCQkJbWVudS0+bmV4dCA9IG1lbnUtPmxpc3Q7CisJCQltZW51LT5saXN0ID0gTlVMTDsKKwkJfQorCX0KKworCWlmIChzeW0gJiYgIShzeW0tPmZsYWdzICYgU1lNQk9MX1dBUk5FRCkpIHsKKwkJaWYgKHN5bS0+dHlwZSA9PSBTX1VOS05PV04pCisJCQltZW51X3dhcm4ocGFyZW50LCAiY29uZmlnIHN5bWJvbCBkZWZpbmVkIHdpdGhvdXQgdHlwZSIpOworCisJCWlmIChzeW1faXNfY2hvaWNlKHN5bSkgJiYgIXBhcmVudC0+cHJvbXB0KQorCQkJbWVudV93YXJuKHBhcmVudCwgImNob2ljZSBtdXN0IGhhdmUgYSBwcm9tcHQiKTsKKworCQkvKiBDaGVjayBwcm9wZXJ0aWVzIGNvbm5lY3RlZCB0byB0aGlzIHN5bWJvbCAqLworCQlzeW1fY2hlY2tfcHJvcChzeW0pOworCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9XQVJORUQ7CisJfQorCisJaWYgKHN5bSAmJiAhc3ltX2lzX29wdGlvbmFsKHN5bSkgJiYgcGFyZW50LT5wcm9tcHQpIHsKKwkJc3ltLT5yZXZfZGVwLmV4cHIgPSBleHByX2FsbG9jX29yKHN5bS0+cmV2X2RlcC5leHByLAorCQkJCWV4cHJfYWxsb2NfYW5kKHBhcmVudC0+cHJvbXB0LT52aXNpYmxlLmV4cHIsCisJCQkJCWV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfbW9kKSkpOworCX0KK30KKworYm9vbCBtZW51X2hhc19wcm9tcHQoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJaWYgKCFtZW51LT5wcm9tcHQpCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBtZW51X2lzX3Zpc2libGUoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJc3RydWN0IG1lbnUgKmNoaWxkOworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwl0cmlzdGF0ZSB2aXNpYmxlOworCisJaWYgKCFtZW51LT5wcm9tcHQpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChtZW51LT52aXNpYmlsaXR5KSB7CisJCWlmIChleHByX2NhbGNfdmFsdWUobWVudS0+dmlzaWJpbGl0eSkgPT0gbm8pCisJCQlyZXR1cm4gbm87CisJfQorCisJc3ltID0gbWVudS0+c3ltOworCWlmIChzeW0pIHsKKwkJc3ltX2NhbGNfdmFsdWUoc3ltKTsKKwkJdmlzaWJsZSA9IG1lbnUtPnByb21wdC0+dmlzaWJsZS50cmk7CisJfSBlbHNlCisJCXZpc2libGUgPSBtZW51LT5wcm9tcHQtPnZpc2libGUudHJpID0gZXhwcl9jYWxjX3ZhbHVlKG1lbnUtPnByb21wdC0+dmlzaWJsZS5leHByKTsKKworCWlmICh2aXNpYmxlICE9IG5vKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmICghc3ltIHx8IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUobWVudS0+c3ltKSA9PSBubykKKwkJcmV0dXJuIGZhbHNlOworCisJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7CisJCWlmIChtZW51X2lzX3Zpc2libGUoY2hpbGQpKSB7CisJCQlpZiAoc3ltKQorCQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK2NvbnN0IGNoYXIgKm1lbnVfZ2V0X3Byb21wdChzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlpZiAobWVudS0+cHJvbXB0KQorCQlyZXR1cm4gbWVudS0+cHJvbXB0LT50ZXh0OworCWVsc2UgaWYgKG1lbnUtPnN5bSkKKwkJcmV0dXJuIG1lbnUtPnN5bS0+bmFtZTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IG1lbnUgKm1lbnVfZ2V0X3Jvb3RfbWVudShzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlyZXR1cm4gJnJvb3RtZW51OworfQorCitzdHJ1Y3QgbWVudSAqbWVudV9nZXRfcGFyZW50X21lbnUoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJZW51bSBwcm9wX3R5cGUgdHlwZTsKKworCWZvciAoOyBtZW51ICE9ICZyb290bWVudTsgbWVudSA9IG1lbnUtPnBhcmVudCkgeworCQl0eXBlID0gbWVudS0+cHJvbXB0ID8gbWVudS0+cHJvbXB0LT50eXBlIDogMDsKKwkJaWYgKHR5cGUgPT0gUF9NRU5VKQorCQkJYnJlYWs7CisJfQorCXJldHVybiBtZW51OworfQorCitib29sIG1lbnVfaGFzX2hlbHAoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJcmV0dXJuIG1lbnUtPmhlbHAgIT0gTlVMTDsKK30KKworY29uc3QgY2hhciAqbWVudV9nZXRfaGVscChzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlpZiAobWVudS0+aGVscCkKKwkJcmV0dXJuIG1lbnUtPmhlbHA7CisJZWxzZQorCQlyZXR1cm4gIiI7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9wcm9tcHRfc3RyKHN0cnVjdCBnc3RyICpyLCBzdHJ1Y3QgcHJvcGVydHkgKnByb3ApCit7CisJaW50IGksIGo7CisJc3RydWN0IG1lbnUgKnN1Ym1lbnVbOF0sICptZW51OworCisJc3RyX3ByaW50ZihyLCBfKCJQcm9tcHQ6ICVzXG4iKSwgXyhwcm9wLT50ZXh0KSk7CisJc3RyX3ByaW50ZihyLCBfKCIgIERlZmluZWQgYXQgJXM6JWRcbiIpLCBwcm9wLT5tZW51LT5maWxlLT5uYW1lLAorCQlwcm9wLT5tZW51LT5saW5lbm8pOworCWlmICghZXhwcl9pc195ZXMocHJvcC0+dmlzaWJsZS5leHByKSkgeworCQlzdHJfYXBwZW5kKHIsIF8oIiAgRGVwZW5kcyBvbjogIikpOworCQlleHByX2dzdHJfcHJpbnQocHJvcC0+dmlzaWJsZS5leHByLCByKTsKKwkJc3RyX2FwcGVuZChyLCAiXG4iKTsKKwl9CisJbWVudSA9IHByb3AtPm1lbnUtPnBhcmVudDsKKwlmb3IgKGkgPSAwOyBtZW51ICE9ICZyb290bWVudSAmJiBpIDwgODsgbWVudSA9IG1lbnUtPnBhcmVudCkKKwkJc3VibWVudVtpKytdID0gbWVudTsKKwlpZiAoaSA+IDApIHsKKwkJc3RyX3ByaW50ZihyLCBfKCIgIExvY2F0aW9uOlxuIikpOworCQlmb3IgKGogPSA0OyAtLWkgPj0gMDsgaiArPSAyKSB7CisJCQltZW51ID0gc3VibWVudVtpXTsKKwkJCXN0cl9wcmludGYociwgIiUqYy0+ICVzIiwgaiwgJyAnLCBfKG1lbnVfZ2V0X3Byb21wdChtZW51KSkpOworCQkJaWYgKG1lbnUtPnN5bSkgeworCQkJCXN0cl9wcmludGYociwgIiAoJXMgWz0lc10pIiwgbWVudS0+c3ltLT5uYW1lID8KKwkJCQkJbWVudS0+c3ltLT5uYW1lIDogXygiPGNob2ljZT4iKSwKKwkJCQkJc3ltX2dldF9zdHJpbmdfdmFsdWUobWVudS0+c3ltKSk7CisJCQl9CisJCQlzdHJfYXBwZW5kKHIsICJcbiIpOworCQl9CisJfQorfQorCit2b2lkIGdldF9zeW1ib2xfc3RyKHN0cnVjdCBnc3RyICpyLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJYm9vbCBoaXQ7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCisJaWYgKHN5bSAmJiBzeW0tPm5hbWUpIHsKKwkJc3RyX3ByaW50ZihyLCAiU3ltYm9sOiAlcyBbPSVzXVxuIiwgc3ltLT5uYW1lLAorCQkJICAgc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSk7CisJCXN0cl9wcmludGYociwgIlR5cGUgIDogJXNcbiIsIHN5bV90eXBlX25hbWUoc3ltLT50eXBlKSk7CisJCWlmIChzeW0tPnR5cGUgPT0gU19JTlQgfHwgc3ltLT50eXBlID09IFNfSEVYKSB7CisJCQlwcm9wID0gc3ltX2dldF9yYW5nZV9wcm9wKHN5bSk7CisJCQlpZiAocHJvcCkgeworCQkJCXN0cl9wcmludGYociwgIlJhbmdlIDogIik7CisJCQkJZXhwcl9nc3RyX3ByaW50KHByb3AtPmV4cHIsIHIpOworCQkJCXN0cl9hcHBlbmQociwgIlxuIik7CisJCQl9CisJCX0KKwl9CisJZm9yX2FsbF9wcm9tcHRzKHN5bSwgcHJvcCkKKwkJZ2V0X3Byb21wdF9zdHIociwgcHJvcCk7CisJaGl0ID0gZmFsc2U7CisJZm9yX2FsbF9wcm9wZXJ0aWVzKHN5bSwgcHJvcCwgUF9TRUxFQ1QpIHsKKwkJaWYgKCFoaXQpIHsKKwkJCXN0cl9hcHBlbmQociwgIiAgU2VsZWN0czogIik7CisJCQloaXQgPSB0cnVlOworCQl9IGVsc2UKKwkJCXN0cl9wcmludGYociwgIiAmJiAiKTsKKwkJZXhwcl9nc3RyX3ByaW50KHByb3AtPmV4cHIsIHIpOworCX0KKwlpZiAoaGl0KQorCQlzdHJfYXBwZW5kKHIsICJcbiIpOworCWlmIChzeW0tPnJldl9kZXAuZXhwcikgeworCQlzdHJfYXBwZW5kKHIsIF8oIiAgU2VsZWN0ZWQgYnk6ICIpKTsKKwkJZXhwcl9nc3RyX3ByaW50KHN5bS0+cmV2X2RlcC5leHByLCByKTsKKwkJc3RyX2FwcGVuZChyLCAiXG4iKTsKKwl9CisJc3RyX2FwcGVuZChyLCAiXG5cbiIpOworfQorCitzdHJ1Y3QgZ3N0ciBnZXRfcmVsYXRpb25zX3N0cihzdHJ1Y3Qgc3ltYm9sICoqc3ltX2FycikKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3RydWN0IGdzdHIgcmVzID0gc3RyX25ldygpOworCWludCBpOworCisJZm9yIChpID0gMDsgc3ltX2FyciAmJiAoc3ltID0gc3ltX2FycltpXSk7IGkrKykKKwkJZ2V0X3N5bWJvbF9zdHIoJnJlcywgc3ltKTsKKwlpZiAoIWkpCisJCXN0cl9hcHBlbmQoJnJlcywgXygiTm8gbWF0Y2hlcyBmb3VuZC5cbiIpKTsKKwlyZXR1cm4gcmVzOworfQorCisKK3ZvaWQgbWVudV9nZXRfZXh0X2hlbHAoc3RydWN0IG1lbnUgKm1lbnUsIHN0cnVjdCBnc3RyICpoZWxwKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bSA9IG1lbnUtPnN5bTsKKworCWlmIChtZW51X2hhc19oZWxwKG1lbnUpKSB7CisJCWlmIChzeW0tPm5hbWUpIHsKKwkJCXN0cl9wcmludGYoaGVscCwgIiVzJXM6XG5cbiIsIENPTkZJR18sIHN5bS0+bmFtZSk7CisJCQlzdHJfYXBwZW5kKGhlbHAsIF8obWVudV9nZXRfaGVscChtZW51KSkpOworCQkJc3RyX2FwcGVuZChoZWxwLCAiXG4iKTsKKwkJfQorCX0gZWxzZSB7CisJCXN0cl9hcHBlbmQoaGVscCwgbm9oZWxwX3RleHQpOworCX0KKwlpZiAoc3ltKQorCQlnZXRfc3ltYm9sX3N0cihoZWxwLCBzeW0pOworfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL25jb25mLmMgYi9saWIvY3QtbmctMS4xMy40L2tjb25maWcvbmNvbmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODhkZDc0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL25jb25mLmMKQEAgLTAsMCArMSwxNTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5pciBUemFjaGFyIDxuaXIudHphY2hhckBnbWFpbC5jb20/CisgKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIuMC4KKyAqCisgKiBEZXJpdmVkIGZyb20gbWVudWNvbmZpZy4KKyAqCisgKi8KKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNkZWZpbmUgTEtDX0RJUkVDVF9MSU5LCisjaW5jbHVkZSAibGtjLmgiCisjaW5jbHVkZSAibmNvbmYuaCIKKyNpbmNsdWRlIDxjdHlwZS5oPgorCitzdGF0aWMgY29uc3QgY2hhciBuY29uZl9yZWFkbWVbXSA9IE5fKAorIk92ZXJ2aWV3XG4iCisiLS0tLS0tLS1cbiIKKyJUaGlzIGludGVyZmFjZSBsZXQgeW91IHNlbGVjdCBmZWF0dXJlcyBhbmQgcGFyYW1ldGVycyBmb3IgdGhlIGJ1aWxkLlxuIgorIkZlYXR1cmVzIGNhbiBlaXRoZXIgYmUgYnVpbHQtaW4sIG1vZHVsYXJpemVkLCBvciBpZ25vcmVkLiBQYXJhbWV0ZXJzXG4iCisibXVzdCBiZSBlbnRlcmVkIGluIGFzIGRlY2ltYWwgb3IgaGV4YWRlY2ltYWwgbnVtYmVycyBvciB0ZXh0LlxuIgorIlxuIgorIk1lbnUgaXRlbXMgYmVnaW5uaW5nIHdpdGggZm9sbG93aW5nIGJyYWNlcyByZXByZXNlbnQgZmVhdHVyZXMgdGhhdFxuIgorIiAgWyBdIGNhbiBiZSBidWlsdCBpbiBvciByZW1vdmVkXG4iCisiICA8ID4gY2FuIGJlIGJ1aWx0IGluLCBtb2R1bGFyaXplZCBvciByZW1vdmVkXG4iCisiICB7IH0gY2FuIGJlIGJ1aWx0IGluIG9yIG1vZHVsYXJpemVkIChzZWxlY3RlZCBieSBvdGhlciBmZWF0dXJlKVxuIgorIiAgLSAtIGFyZSBzZWxlY3RlZCBieSBvdGhlciBmZWF0dXJlLFxuIgorIiAgWFhYIGNhbm5vdCBiZSBzZWxlY3RlZC4gVXNlIFN5bWJvbCBJbmZvIHRvIGZpbmQgb3V0IHdoeSxcbiIKKyJ3aGlsZSAqLCBNIG9yIHdoaXRlc3BhY2UgaW5zaWRlIGJyYWNlcyBtZWFucyB0byBidWlsZCBpbiwgYnVpbGQgYXNcbiIKKyJhIG1vZHVsZSBvciB0byBleGNsdWRlIHRoZSBmZWF0dXJlIHJlc3BlY3RpdmVseS5cbiIKKyJcbiIKKyJUbyBjaGFuZ2UgYW55IG9mIHRoZXNlIGZlYXR1cmVzLCBoaWdobGlnaHQgaXQgd2l0aCB0aGUgY3Vyc29yXG4iCisia2V5cyBhbmQgcHJlc3MgPFk+IHRvIGJ1aWxkIGl0IGluLCA8TT4gdG8gbWFrZSBpdCBhIG1vZHVsZSBvclxuIgorIjxOPiB0byByZW1vdmVkIGl0LiAgWW91IG1heSBhbHNvIHByZXNzIHRoZSA8U3BhY2UgQmFyPiB0byBjeWNsZVxuIgorInRocm91Z2ggdGhlIGF2YWlsYWJsZSBvcHRpb25zIChpZS4gWS0+Ti0+TS0+WSkuXG4iCisiXG4iCisiU29tZSBhZGRpdGlvbmFsIGtleWJvYXJkIGhpbnRzOlxuIgorIlxuIgorIk1lbnVzXG4iCisiLS0tLS0tLS0tLVxuIgorIm8gIFVzZSB0aGUgVXAvRG93biBhcnJvdyBrZXlzIChjdXJzb3Iga2V5cykgdG8gaGlnaGxpZ2h0IHRoZSBpdGVtXG4iCisiICAgeW91IHdpc2ggdG8gY2hhbmdlIHVzZSA8RW50ZXI+IG9yIDxTcGFjZT4uIEdvdG8gc3VibWVudSBieSBcbiIKKyIgICBwcmVzc2luZyA8RW50ZXI+IG9mIDxyaWdodC1hcnJvdz4uIFVzZSA8RXNjPiBvciA8bGVmdC1hcnJvdz4gdG8gZ28gYmFjay5cbiIKKyIgICBTdWJtZW51cyBhcmUgZGVzaWduYXRlZCBieSBcIi0tLT5cIi5cbiIKKyJcbiIKKyIgICBTZWFyY2hpbmc6IHByZXNzaW5nICcvJyB0cmlnZ2VycyBpbnRlcmFjdGl2ZSBzZWFyY2ggbW9kZS5cbiIKKyIgICAgICAgICAgICAgIG5jb25maWcgcGVyZm9ybXMgYSBjYXNlIGluc2Vuc2l0aXZlIHNlYXJjaCBmb3IgdGhlIHN0cmluZ1xuIgorIiAgICAgICAgICAgICAgaW4gdGhlIG1lbnUgcHJvbXB0cyAobm8gcmVnZXggc3VwcG9ydCkuXG4iCisiICAgICAgICAgICAgICBQcmVzc2luZyB0aGUgdXAvZG93biBrZXlzIGhpZ2hsaWdodHMgdGhlIHByZXZpb3VzL25leHRcbiIKKyIgICAgICAgICAgICAgIG1hdGNoaW5nIGl0ZW0uIEJhY2tzcGFjZSByZW1vdmVzIG9uZSBjaGFyYWN0ZXIgZnJvbSB0aGVcbiIKKyIgICAgICAgICAgICAgIG1hdGNoIHN0cmluZy4gUHJlc3NpbmcgZWl0aGVyICcvJyBhZ2FpbiBvciBFU0MgZXhpdHNcbiIKKyIgICAgICAgICAgICAgIHNlYXJjaCBtb2RlLiBBbGwgb3RoZXIga2V5cyBiZWhhdmUgbm9ybWFsbHkuXG4iCisiXG4iCisiICAgWW91IG1heSBhbHNvIHVzZSB0aGUgPFBBR0UgVVA+IGFuZCA8UEFHRSBET1dOPiBrZXlzIHRvIHNjcm9sbFxuIgorIiAgIHVuc2VlbiBvcHRpb25zIGludG8gdmlldy5cbiIKKyJcbiIKKyJvICBUbyBleGl0IGEgbWVudSB1c2UgdGhlIGp1c3QgcHJlc3MgPEVTQz4gPEY1PiA8Rjg+IG9yIDxsZWZ0LWFycm93Pi5cbiIKKyJcbiIKKyJvICBUbyBnZXQgaGVscCB3aXRoIGFuIGl0ZW0sIHByZXNzIDxGMT5cbiIKKyIgICBTaG9ydGN1dDogUHJlc3MgPGg+IG9yIDw/Pi5cbiIKKyJcbiIKKyJcbiIKKyJSYWRpb2xpc3RzICAoQ2hvaWNlIGxpc3RzKVxuIgorIi0tLS0tLS0tLS0tXG4iCisibyAgVXNlIHRoZSBjdXJzb3Iga2V5cyB0byBzZWxlY3QgdGhlIG9wdGlvbiB5b3Ugd2lzaCB0byBzZXQgYW5kIHByZXNzXG4iCisiICAgPFM+IG9yIHRoZSA8U1BBQ0UgQkFSPi5cbiIKKyJcbiIKKyIgICBTaG9ydGN1dDogUHJlc3MgdGhlIGZpcnN0IGxldHRlciBvZiB0aGUgb3B0aW9uIHlvdSB3aXNoIHRvIHNldCB0aGVuXG4iCisiICAgICAgICAgICAgIHByZXNzIDxTPiBvciA8U1BBQ0UgQkFSPi5cbiIKKyJcbiIKKyJvICBUbyBzZWUgYXZhaWxhYmxlIGhlbHAgZm9yIHRoZSBpdGVtLCBwcmVzcyA8RjE+XG4iCisiICAgU2hvcnRjdXQ6IFByZXNzIDxIPiBvciA8Pz4uXG4iCisiXG4iCisiXG4iCisiRGF0YSBFbnRyeVxuIgorIi0tLS0tLS0tLS0tXG4iCisibyAgRW50ZXIgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBhbmQgcHJlc3MgPEVOVEVSPlxuIgorIiAgIElmIHlvdSBhcmUgZW50ZXJpbmcgaGV4YWRlY2ltYWwgdmFsdWVzLCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvXG4iCisiICAgYWRkIHRoZSAnMHgnIHByZWZpeCB0byB0aGUgZW50cnkuXG4iCisiXG4iCisibyAgRm9yIGhlbHAsIHByZXNzIDxGMT4uXG4iCisiXG4iCisiXG4iCisiVGV4dCBCb3ggICAgKEhlbHAgV2luZG93KVxuIgorIi0tLS0tLS0tXG4iCisibyAgVXNlIHRoZSBjdXJzb3Iga2V5cyB0byBzY3JvbGwgdXAvZG93bi9sZWZ0L3JpZ2h0LiAgVGhlIFZJIGVkaXRvclxuIgorIiAgIGtleXMgaCxqLGssbCBmdW5jdGlvbiBoZXJlIGFzIGRvIDxTUEFDRSBCQVI+IGZvciB0aG9zZVxuIgorIiAgIHdobyBhcmUgZmFtaWxpYXIgd2l0aCBsZXNzIGFuZCBseW54LlxuIgorIlxuIgorIm8gIFByZXNzIDxFbnRlcj4sIDxGMT4sIDxGNT4sIDxGNz4gb3IgPEVzYz4gdG8gZXhpdC5cbiIKKyJcbiIKKyJcbiIKKyJBbHRlcm5hdGUgQ29uZmlndXJhdGlvbiBGaWxlc1xuIgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisibmNvbmZpZyBzdXBwb3J0cyB0aGUgdXNlIG9mIGFsdGVybmF0ZSBjb25maWd1cmF0aW9uIGZpbGVzIGZvclxuIgorInRob3NlIHdobywgZm9yIHZhcmlvdXMgcmVhc29ucywgZmluZCBpdCBuZWNlc3NhcnkgdG8gc3dpdGNoXG4iCisiYmV0d2VlbiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuXG4iCisiXG4iCisiQXQgdGhlIGVuZCBvZiB0aGUgbWFpbiBtZW51IHlvdSB3aWxsIGZpbmQgdHdvIG9wdGlvbnMuICBPbmUgaXNcbiIKKyJmb3Igc2F2aW5nIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gdG8gYSBmaWxlIG9mIHlvdXIgY2hvb3NpbmcuXG4iCisiVGhlIG90aGVyIG9wdGlvbiBpcyBmb3IgbG9hZGluZyBhIHByZXZpb3VzbHkgc2F2ZWQgYWx0ZXJuYXRlXG4iCisiY29uZmlndXJhdGlvbi5cbiIKKyJcbiIKKyJFdmVuIGlmIHlvdSBkb24ndCB1c2UgYWx0ZXJuYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGJ1dCB5b3VcbiIKKyJmaW5kIGR1cmluZyBhIG5jb25maWcgc2Vzc2lvbiB0aGF0IHlvdSBoYXZlIGNvbXBsZXRlbHkgbWVzc2VkXG4iCisidXAgeW91ciBzZXR0aW5ncywgeW91IG1heSB1c2UgdGhlIFwiTG9hZCBBbHRlcm5hdGUuLi5cIiBvcHRpb24gdG9cbiIKKyJyZXN0b3JlIHlvdXIgcHJldmlvdXNseSBzYXZlZCBzZXR0aW5ncyBmcm9tIFwiLmNvbmZpZ1wiIHdpdGhvdXRcbiIKKyJyZXN0YXJ0aW5nIG5jb25maWcuXG4iCisiXG4iCisiT3RoZXIgaW5mb3JtYXRpb25cbiIKKyItLS0tLS0tLS0tLS0tLS0tLVxuIgorIklmIHlvdSB1c2UgbmNvbmZpZyBpbiBhbiBYVEVSTSB3aW5kb3cgbWFrZSBzdXJlIHlvdSBoYXZlIHlvdXJcbiIKKyIkVEVSTSB2YXJpYWJsZSBzZXQgdG8gcG9pbnQgdG8gYSB4dGVybSBkZWZpbml0aW9uIHdoaWNoIHN1cHBvcnRzIGNvbG9yLlxuIgorIk90aGVyd2lzZSwgbmNvbmZpZyB3aWxsIGxvb2sgcmF0aGVyIGJhZC4gIG5jb25maWcgd2lsbCBub3RcbiIKKyJkaXNwbGF5IGNvcnJlY3RseSBpbiBhIFJYVlQgd2luZG93IGJlY2F1c2Ugcnh2dCBkaXNwbGF5cyBvbmx5IG9uZVxuIgorImludGVuc2l0eSBvZiBjb2xvciwgYnJpZ2h0LlxuIgorIlxuIgorIm5jb25maWcgd2lsbCBkaXNwbGF5IGxhcmdlciBtZW51cyBvbiBzY3JlZW5zIG9yIHh0ZXJtcyB3aGljaCBhcmVcbiIKKyJzZXQgdG8gZGlzcGxheSBtb3JlIHRoYW4gdGhlIHN0YW5kYXJkIDI1IHJvdyBieSA4MCBjb2x1bW4gZ2VvbWV0cnkuXG4iCisiSW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yaywgdGhlIFwic3R0eSBzaXplXCIgY29tbWFuZCBtdXN0IGJlIGFibGUgdG9cbiIKKyJkaXNwbGF5IHRoZSBzY3JlZW4ncyBjdXJyZW50IHJvdyBhbmQgY29sdW1uIGdlb21ldHJ5LiAgSSBTVFJPTkdMWVxuIgorIlJFQ09NTUVORCB0aGF0IHlvdSBtYWtlIHN1cmUgeW91IGRvIE5PVCBoYXZlIHRoZSBzaGVsbCB2YXJpYWJsZXNcbiIKKyJMSU5FUyBhbmQgQ09MVU1OUyBleHBvcnRlZCBpbnRvIHlvdXIgZW52aXJvbm1lbnQuICBTb21lIGRpc3RyaWJ1dGlvbnNcbiIKKyJleHBvcnQgdGhvc2UgdmFyaWFibGVzIHZpYSAvZXRjL3Byb2ZpbGUuICBTb21lIG5jdXJzZXMgcHJvZ3JhbXMgY2FuXG4iCisiYmVjb21lIGNvbmZ1c2VkIHdoZW4gdGhvc2UgdmFyaWFibGVzIChMSU5FUyAmIENPTFVNTlMpIGRvbid0IHJlZmxlY3RcbiIKKyJ0aGUgdHJ1ZSBzY3JlZW4gc2l6ZS5cbiIKKyJcbiIKKyJPcHRpb25hbCBwZXJzb25hbGl0eSBhdmFpbGFibGVcbiIKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyJJZiB5b3UgcHJlZmVyIHRvIGhhdmUgYWxsIG9mIHRoZSBvcHRpb25zIGxpc3RlZCBpbiBhIHNpbmdsZSBtZW51LCByYXRoZXJcbiIKKyJ0aGFuIHRoZSBkZWZhdWx0IG11bHRpbWVudSBoaWVyYXJjaHksIHJ1biB0aGUgbmNvbmZpZyB3aXRoIE5DT05GSUdfTU9ERVxuIgorImVudmlyb25tZW50IHZhcmlhYmxlIHNldCB0byBzaW5nbGVfbWVudS4gRXhhbXBsZTpcbiIKKyJcbiIKKyJtYWtlIE5DT05GSUdfTU9ERT1zaW5nbGVfbWVudSBuY29uZmlnXG4iCisiXG4iCisiPEVudGVyPiB3aWxsIHRoZW4gdW5yb2xsIHRoZSBhcHByb3ByaWF0ZSBjYXRlZ29yeSwgb3IgZW5mb2xkIGl0IGlmIGl0XG4iCisiaXMgYWxyZWFkeSB1bnJvbGxlZC5cbiIKKyJcbiIKKyJOb3RlIHRoYXQgdGhpcyBtb2RlIGNhbiBldmVudHVhbGx5IGJlIGEgbGl0dGxlIG1vcmUgQ1BVIGV4cGVuc2l2ZVxuIgorIihlc3BlY2lhbGx5IHdpdGggYSBsYXJnZXIgbnVtYmVyIG9mIHVucm9sbGVkIGNhdGVnb3JpZXMpIHRoYW4gdGhlXG4iCisiZGVmYXVsdCBtb2RlLlxuIgorIlxuIiksCittZW51X25vX2ZfaW5zdHJ1Y3Rpb25zW10gPSBOXygKKyIgWW91IGRvIG5vdCBoYXZlIGZ1bmN0aW9uIGtleXMgc3VwcG9ydC4gUGxlYXNlIGZvbGxvdyB0aGVcbiIKKyIgZm9sbG93aW5nIGluc3RydWN0aW9uczpcbiIKKyIgQXJyb3cga2V5cyBuYXZpZ2F0ZSB0aGUgbWVudS5cbiIKKyIgPEVudGVyPiBvciA8cmlnaHQtYXJyb3c+IHNlbGVjdHMgc3VibWVudXMgLS0tPi5cbiIKKyIgQ2FwaXRhbCBMZXR0ZXJzIGFyZSBob3RrZXlzLlxuIgorIiBQcmVzc2luZyA8WT4gaW5jbHVkZXMsIDxOPiBleGNsdWRlcywgPE0+IG1vZHVsYXJpemVzIGZlYXR1cmVzLlxuIgorIiBQcmVzc2luZyBTcGFjZUJhciB0b2dnbGVzIGJldHdlZW4gdGhlIGFib3ZlIG9wdGlvbnMuXG4iCisiIFByZXNzIDxFc2M+IG9yIDxsZWZ0LWFycm93PiB0byBnbyBiYWNrIG9uZSBtZW51LFxuIgorIiA8Pz4gb3IgPGg+IGZvciBIZWxwLCA8Lz4gZm9yIFNlYXJjaC5cbiIKKyIgPDE+IGlzIGludGVyY2hhbmdlYWJsZSB3aXRoIDxGMT4sIDwyPiB3aXRoIDxGMj4sIGV0Yy5cbiIKKyIgTGVnZW5kOiBbKl0gYnVpbHQtaW4gIFsgXSBleGNsdWRlZCAgPE0+IG1vZHVsZSAgPCA+IG1vZHVsZSBjYXBhYmxlLlxuIgorIiA8RXNjPiBhbHdheXMgbGVhdmVzIHRoZSBjdXJyZW50IHdpbmRvdy5cbiIpLAorbWVudV9pbnN0cnVjdGlvbnNbXSA9IE5fKAorIiBBcnJvdyBrZXlzIG5hdmlnYXRlIHRoZSBtZW51LlxuIgorIiA8RW50ZXI+IG9yIDxyaWdodC1hcnJvdz4gc2VsZWN0cyBzdWJtZW51cyAtLS0+LlxuIgorIiBDYXBpdGFsIExldHRlcnMgYXJlIGhvdGtleXMuXG4iCisiIFByZXNzaW5nIDxZPiBpbmNsdWRlcywgPE4+IGV4Y2x1ZGVzLCA8TT4gbW9kdWxhcml6ZXMgZmVhdHVyZXMuXG4iCisiIFByZXNzaW5nIFNwYWNlQmFyIHRvZ2dsZXMgYmV0d2VlbiB0aGUgYWJvdmUgb3B0aW9uc1xuIgorIiBQcmVzcyA8RXNjPiwgPEY1PiBvciA8bGVmdC1hcnJvdz4gdG8gZ28gYmFjayBvbmUgbWVudSxcbiIKKyIgPD8+LCA8RjE+IG9yIDxoPiBmb3IgSGVscCwgPC8+IGZvciBTZWFyY2guXG4iCisiIDwxPiBpcyBpbnRlcmNoYW5nZWFibGUgd2l0aCA8RjE+LCA8Mj4gd2l0aCA8RjI+LCBldGMuXG4iCisiIExlZ2VuZDogWypdIGJ1aWx0LWluICBbIF0gZXhjbHVkZWQgIDxNPiBtb2R1bGUgIDwgPiBtb2R1bGUgY2FwYWJsZS5cbiIKKyIgPEVzYz4gYWx3YXlzIGxlYXZlcyB0aGUgY3VycmVudCB3aW5kb3dcbiIpLAorcmFkaW9saXN0X2luc3RydWN0aW9uc1tdID0gTl8oCisiIFVzZSB0aGUgYXJyb3cga2V5cyB0byBuYXZpZ2F0ZSB0aGlzIHdpbmRvdyBvclxuIgorIiBwcmVzcyB0aGUgaG90a2V5IG9mIHRoZSBpdGVtIHlvdSB3aXNoIHRvIHNlbGVjdFxuIgorIiBmb2xsb3dlZCBieSB0aGUgPFNQQUNFIEJBUj4uXG4iCisiIFByZXNzIDw/PiwgPEYxPiBvciA8aD4gZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBvcHRpb24uXG4iKSwKK2lucHV0Ym94X2luc3RydWN0aW9uc19pbnRbXSA9IE5fKAorIlBsZWFzZSBlbnRlciBhIGRlY2ltYWwgdmFsdWUuXG4iCisiRnJhY3Rpb25zIHdpbGwgbm90IGJlIGFjY2VwdGVkLlxuIgorIlByZXNzIDxSRVRVUk4+IHRvIGFjY2VwdCwgPEVTQz4gdG8gY2FuY2VsLiIpLAoraW5wdXRib3hfaW5zdHJ1Y3Rpb25zX2hleFtdID0gTl8oCisiUGxlYXNlIGVudGVyIGEgaGV4YWRlY2ltYWwgdmFsdWUuXG4iCisiUHJlc3MgPFJFVFVSTj4gdG8gYWNjZXB0LCA8RVNDPiB0byBjYW5jZWwuIiksCitpbnB1dGJveF9pbnN0cnVjdGlvbnNfc3RyaW5nW10gPSBOXygKKyJQbGVhc2UgZW50ZXIgYSBzdHJpbmcgdmFsdWUuXG4iCisiUHJlc3MgPFJFVFVSTj4gdG8gYWNjZXB0LCA8RVNDPiB0byBjYW5jZWwuIiksCitzZXRtb2RfdGV4dFtdID0gTl8oCisiVGhpcyBmZWF0dXJlIGRlcGVuZHMgb24gYW5vdGhlciB3aGljaFxuIgorImhhcyBiZWVuIGNvbmZpZ3VyZWQgYXMgYSBtb2R1bGUuXG4iCisiQXMgYSByZXN1bHQsIHRoaXMgZmVhdHVyZSB3aWxsIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiIpLAorbm9oZWxwX3RleHRbXSA9IE5fKAorIlRoZXJlIGlzIG5vIGhlbHAgYXZhaWxhYmxlIGZvciB0aGlzIG9wdGlvbi5cbiIpLAorbG9hZF9jb25maWdfdGV4dFtdID0gTl8oCisiRW50ZXIgdGhlIG5hbWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB5b3Ugd2lzaCB0byBsb2FkLlxuIgorIkFjY2VwdCB0aGUgbmFtZSBzaG93biB0byByZXN0b3JlIHRoZSBjb25maWd1cmF0aW9uIHlvdVxuIgorImxhc3QgcmV0cmlldmVkLiAgTGVhdmUgYmxhbmsgdG8gYWJvcnQuIiksCitsb2FkX2NvbmZpZ19oZWxwW10gPSBOXygKKyJcbiIKKyJGb3IgdmFyaW91cyByZWFzb25zLCBvbmUgbWF5IHdpc2ggdG8ga2VlcCBzZXZlcmFsIGRpZmZlcmVudFxuIgorImNvbmZpZ3VyYXRpb25zIGF2YWlsYWJsZSBvbiBhIHNpbmdsZSBtYWNoaW5lLlxuIgorIlxuIgorIklmIHlvdSBoYXZlIHNhdmVkIGEgcHJldmlvdXMgY29uZmlndXJhdGlvbiBpbiBhIGZpbGUgb3RoZXIgdGhhbiB0aGVcbiIKKyJkZWZhdWx0IG9uZSwgZW50ZXJpbmcgaXRzIG5hbWUgaGVyZSB3aWxsIGFsbG93IHlvdSB0byBtb2RpZnkgdGhhdFxuIgorImNvbmZpZ3VyYXRpb24uXG4iCisiXG4iCisiSWYgeW91IGFyZSB1bmNlcnRhaW4sIHRoZW4geW91IGhhdmUgcHJvYmFibHkgbmV2ZXIgdXNlZCBhbHRlcm5hdGVcbiIKKyJjb25maWd1cmF0aW9uIGZpbGVzLiAgWW91IHNob3VsZCB0aGVyZWZvciBsZWF2ZSB0aGlzIGJsYW5rIHRvIGFib3J0LlxuIiksCitzYXZlX2NvbmZpZ190ZXh0W10gPSBOXygKKyJFbnRlciBhIGZpbGVuYW1lIHRvIHdoaWNoIHRoaXMgY29uZmlndXJhdGlvbiBzaG91bGQgYmUgc2F2ZWRcbiIKKyJhcyBhbiBhbHRlcm5hdGUuICBMZWF2ZSBibGFuayB0byBhYm9ydC4iKSwKK3NhdmVfY29uZmlnX2hlbHBbXSA9IE5fKAorIlxuIgorIkZvciB2YXJpb3VzIHJlYXNvbnMsIG9uZSBtYXkgd2lzaCB0byBrZWVwIGRpZmZlcmVudCBjb25maWd1cmF0aW9uc1xuIgorImF2YWlsYWJsZSBvbiBhIHNpbmdsZSBtYWNoaW5lLlxuIgorIlxuIgorIkVudGVyaW5nIGEgZmlsZSBuYW1lIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gbGF0ZXIgcmV0cmlldmUsIG1vZGlmeVxuIgorImFuZCB1c2UgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBhcyBhbiBhbHRlcm5hdGUgdG8gd2hhdGV2ZXJcbiIKKyJjb25maWd1cmF0aW9uIG9wdGlvbnMgeW91IGhhdmUgc2VsZWN0ZWQgYXQgdGhhdCB0aW1lLlxuIgorIlxuIgorIklmIHlvdSBhcmUgdW5jZXJ0YWluIHdoYXQgYWxsIHRoaXMgbWVhbnMgdGhlbiB5b3Ugc2hvdWxkIHByb2JhYmx5XG4iCisibGVhdmUgdGhpcyBibGFuay5cbiIpLAorc2VhcmNoX2hlbHBbXSA9IE5fKAorIlxuIgorIlNlYXJjaCBmb3Igc3ltYm9scyBhbmQgZGlzcGxheSB0aGVpciByZWxhdGlvbnMuIFJlZ3VsYXIgZXhwcmVzc2lvbnNcbiIKKyJhcmUgYWxsb3dlZC5cbiIKKyJFeGFtcGxlOiBzZWFyY2ggZm9yIFwiXkZPT1wiXG4iCisiUmVzdWx0OlxuIgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisiU3ltYm9sOiBGT08gWyA9IG1dXG4iCisiUHJvbXB0OiBGb28gYnVzIGlzIHVzZWQgdG8gZHJpdmUgdGhlIGJhciBIV1xuIgorIkRlZmluZWQgYXQgZHJpdmVycy9wY2kvS2NvbmZpZzo0N1xuIgorIkRlcGVuZHMgb246IFg4Nl9MT0NBTF9BUElDICYmIFg4Nl9JT19BUElDIHx8IElBNjRcbiIKKyJMb2NhdGlvbjpcbiIKKyIgIC0+IEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgTUNBLCBJU0EpXG4iCisiICAgIC0+IFBDSSBzdXBwb3J0IChQQ0kgWyA9IHldKVxuIgorIiAgICAgIC0+IFBDSSBhY2Nlc3MgbW9kZSAoPGNob2ljZT4gWyA9IHldKVxuIgorIlNlbGVjdHM6IExJQkNSQzMyXG4iCisiU2VsZWN0ZWQgYnk6IEJBUlxuIgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisibyBUaGUgbGluZSAnUHJvbXB0Oicgc2hvd3MgdGhlIHRleHQgdXNlZCBpbiB0aGUgbWVudSBzdHJ1Y3R1cmUgZm9yXG4iCisiICB0aGlzIHN5bWJvbFxuIgorIm8gVGhlICdEZWZpbmVkIGF0JyBsaW5lIHRlbGwgYXQgd2hhdCBmaWxlIC8gbGluZSBudW1iZXIgdGhlIHN5bWJvbFxuIgorIiAgaXMgZGVmaW5lZFxuIgorIm8gVGhlICdEZXBlbmRzIG9uOicgbGluZSB0ZWxsIHdoYXQgc3ltYm9scyBuZWVkcyB0byBiZSBkZWZpbmVkIGZvclxuIgorIiAgdGhpcyBzeW1ib2wgdG8gYmUgdmlzaWJsZSBpbiB0aGUgbWVudSAoc2VsZWN0YWJsZSlcbiIKKyJvIFRoZSAnTG9jYXRpb246JyBsaW5lcyB0ZWxsIHdoZXJlIGluIHRoZSBtZW51IHN0cnVjdHVyZSB0aGlzIHN5bWJvbFxuIgorIiAgaXMgbG9jYXRlZFxuIgorIiAgICBBIGxvY2F0aW9uIGZvbGxvd2VkIGJ5IGEgWyA9IHldIGluZGljYXRlIHRoYXQgdGhpcyBpcyBhIHNlbGVjdGFibGVcbiIKKyIgICAgbWVudSBpdGVtIC0gYW5kIGN1cnJlbnQgdmFsdWUgaXMgZGlzcGxheWVkIGluc2lkZSBicmFja2V0cy5cbiIKKyJvIFRoZSAnU2VsZWN0czonIGxpbmUgdGVsbCB3aGF0IHN5bWJvbCB3aWxsIGJlIGF1dG9tYXRpY2FsbHlcbiIKKyIgIHNlbGVjdGVkIGlmIHRoaXMgc3ltYm9sIGlzIHNlbGVjdGVkICh5IG9yIG0pXG4iCisibyBUaGUgJ1NlbGVjdGVkIGJ5JyBsaW5lIHRlbGwgd2hhdCBzeW1ib2wgaGFzIHNlbGVjdGVkIHRoaXMgc3ltYm9sXG4iCisiXG4iCisiT25seSByZWxldmFudCBsaW5lcyBhcmUgc2hvd24uXG4iCisiXG5cbiIKKyJTZWFyY2ggZXhhbXBsZXM6XG4iCisiRXhhbXBsZXM6IFVTQiAgPT4gZmluZCBhbGwgc3ltYm9scyBjb250YWluaW5nIFVTQlxuIgorIiAgICAgICAgICBeVVNCID0+IGZpbmQgYWxsIHN5bWJvbHMgc3RhcnRpbmcgd2l0aCBVU0JcbiIKKyIgICAgICAgICAgVVNCJCA9PiBmaW5kIGFsbCBzeW1ib2xzIGVuZGluZyB3aXRoIFVTQlxuIgorIlxuIik7CisKK3N0cnVjdCBtaXRlbSB7CisJY2hhciBzdHJbMjU2XTsKKwljaGFyIHRhZzsKKwl2b2lkICp1c3JwdHI7CisJaW50IGlzX3Zpc2libGU7Cit9OworCisjZGVmaW5lIE1BWF9NRU5VX0lURU1TIDQwOTYKK3N0YXRpYyBpbnQgc2hvd19hbGxfaXRlbXM7CitzdGF0aWMgaW50IGluZGVudDsKK3N0YXRpYyBzdHJ1Y3QgbWVudSAqY3VycmVudF9tZW51Oworc3RhdGljIGludCBjaGlsZF9jb3VudDsKK3N0YXRpYyBpbnQgc2luZ2xlX21lbnVfbW9kZTsKKy8qIHRoZSB3aW5kb3cgaW4gd2hpY2ggYWxsIGluZm9ybWF0aW9uIGFwcGVhcnMgKi8KK3N0YXRpYyBXSU5ET1cgKm1haW5fd2luZG93OworLyogdGhlIGxhcmdlc3Qgc2l6ZSBvZiB0aGUgbWVudSB3aW5kb3cgKi8KK3N0YXRpYyBpbnQgbXdpbl9tYXhfbGluZXM7CitzdGF0aWMgaW50IG13aW5fbWF4X2NvbHM7CisvKiB0aGUgd2luZG93IGluIHdoaWNoIHdlIHNob3cgb3B0aW9uIGJ1dHRvbnMgKi8KK3N0YXRpYyBNRU5VICpjdXJzZXNfbWVudTsKK3N0YXRpYyBJVEVNICpjdXJzZXNfbWVudV9pdGVtc1tNQVhfTUVOVV9JVEVNU107CitzdGF0aWMgc3RydWN0IG1pdGVtIGtfbWVudV9pdGVtc1tNQVhfTUVOVV9JVEVNU107CitzdGF0aWMgaW50IGl0ZW1zX251bTsKK3N0YXRpYyBpbnQgZ2xvYmFsX2V4aXQ7CisvKiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGJ1dHRvbiAqLworY29uc3QgY2hhciAqY3VycmVudF9pbnN0cnVjdGlvbnMgPSBtZW51X2luc3RydWN0aW9uczsKKworc3RhdGljIHZvaWQgY29uZihzdHJ1Y3QgbWVudSAqbWVudSk7CitzdGF0aWMgdm9pZCBjb25mX2Nob2ljZShzdHJ1Y3QgbWVudSAqbWVudSk7CitzdGF0aWMgdm9pZCBjb25mX3N0cmluZyhzdHJ1Y3QgbWVudSAqbWVudSk7CitzdGF0aWMgdm9pZCBjb25mX2xvYWQodm9pZCk7CitzdGF0aWMgdm9pZCBjb25mX3NhdmUodm9pZCk7CitzdGF0aWMgdm9pZCBzaG93X2hlbHAoc3RydWN0IG1lbnUgKm1lbnUpOworc3RhdGljIGludCBkb19leGl0KHZvaWQpOworc3RhdGljIHZvaWQgc2V0dXBfd2luZG93cyh2b2lkKTsKK3N0YXRpYyB2b2lkIHNlYXJjaF9jb25mKHZvaWQpOworCit0eXBlZGVmIHZvaWQgKCpmdW5jdGlvbl9rZXlfaGFuZGxlcl90KShpbnQgKmtleSwgc3RydWN0IG1lbnUgKm1lbnUpOworc3RhdGljIHZvaWQgaGFuZGxlX2YxKGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsKK3N0YXRpYyB2b2lkIGhhbmRsZV9mMihpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSk7CitzdGF0aWMgdm9pZCBoYW5kbGVfZjMoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pOworc3RhdGljIHZvaWQgaGFuZGxlX2Y0KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsKK3N0YXRpYyB2b2lkIGhhbmRsZV9mNShpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSk7CitzdGF0aWMgdm9pZCBoYW5kbGVfZjYoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pOworc3RhdGljIHZvaWQgaGFuZGxlX2Y3KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsKK3N0YXRpYyB2b2lkIGhhbmRsZV9mOChpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSk7CitzdGF0aWMgdm9pZCBoYW5kbGVfZjkoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pOworCitzdHJ1Y3QgZnVuY3Rpb25fa2V5cyB7CisJY29uc3QgY2hhciAqa2V5X3N0cjsKKwljb25zdCBjaGFyICpmdW5jOworCWZ1bmN0aW9uX2tleSBrZXk7CisJZnVuY3Rpb25fa2V5X2hhbmRsZXJfdCBoYW5kbGVyOworfTsKKworc3RhdGljIGNvbnN0IGludCBmdW5jdGlvbl9rZXlzX251bSA9IDk7CitzdHJ1Y3QgZnVuY3Rpb25fa2V5cyBmdW5jdGlvbl9rZXlzW10gPSB7CisJeworCQkua2V5X3N0ciA9ICJGMSIsCisJCS5mdW5jID0gIkhlbHAiLAorCQkua2V5ID0gRl9IRUxQLAorCQkuaGFuZGxlciA9IGhhbmRsZV9mMSwKKwl9LAorCXsKKwkJLmtleV9zdHIgPSAiRjIiLAorCQkuZnVuYyA9ICJTeW0gSW5mbyIsCisJCS5rZXkgPSBGX1NZTUJPTCwKKwkJLmhhbmRsZXIgPSBoYW5kbGVfZjIsCisJfSwKKwl7CisJCS5rZXlfc3RyID0gIkYzIiwKKwkJLmZ1bmMgPSAiSW5zdHMiLAorCQkua2V5ID0gRl9JTlNUUywKKwkJLmhhbmRsZXIgPSBoYW5kbGVfZjMsCisJfSwKKwl7CisJCS5rZXlfc3RyID0gIkY0IiwKKwkJLmZ1bmMgPSAiQ29uZmlnIiwKKwkJLmtleSA9IEZfQ09ORiwKKwkJLmhhbmRsZXIgPSBoYW5kbGVfZjQsCisJfSwKKwl7CisJCS5rZXlfc3RyID0gIkY1IiwKKwkJLmZ1bmMgPSAiQmFjayIsCisJCS5rZXkgPSBGX0JBQ0ssCisJCS5oYW5kbGVyID0gaGFuZGxlX2Y1LAorCX0sCisJeworCQkua2V5X3N0ciA9ICJGNiIsCisJCS5mdW5jID0gIlNhdmUiLAorCQkua2V5ID0gRl9TQVZFLAorCQkuaGFuZGxlciA9IGhhbmRsZV9mNiwKKwl9LAorCXsKKwkJLmtleV9zdHIgPSAiRjciLAorCQkuZnVuYyA9ICJMb2FkIiwKKwkJLmtleSA9IEZfTE9BRCwKKwkJLmhhbmRsZXIgPSBoYW5kbGVfZjcsCisJfSwKKwl7CisJCS5rZXlfc3RyID0gIkY4IiwKKwkJLmZ1bmMgPSAiU3ltIFNlYXJjaCIsCisJCS5rZXkgPSBGX1NFQVJDSCwKKwkJLmhhbmRsZXIgPSBoYW5kbGVfZjgsCisJfSwKKwl7CisJCS5rZXlfc3RyID0gIkY5IiwKKwkJLmZ1bmMgPSAiRXhpdCIsCisJCS5rZXkgPSBGX0VYSVQsCisJCS5oYW5kbGVyID0gaGFuZGxlX2Y5LAorCX0sCit9OworCitzdGF0aWMgdm9pZCBwcmludF9mdW5jdGlvbl9saW5lKHZvaWQpCit7CisJaW50IGk7CisJaW50IG9mZnNldCA9IDE7CisJY29uc3QgaW50IHNraXAgPSAxOworCisJZm9yIChpID0gMDsgaSA8IGZ1bmN0aW9uX2tleXNfbnVtOyBpKyspIHsKKwkJKHZvaWQpIHdhdHRyc2V0KG1haW5fd2luZG93LCBhdHRyaWJ1dGVzW0ZVTkNUSU9OX0hJR0hMSUdIVF0pOworCQltdndwcmludHcobWFpbl93aW5kb3csIExJTkVTLTMsIG9mZnNldCwKKwkJCQkiJXMiLAorCQkJCWZ1bmN0aW9uX2tleXNbaV0ua2V5X3N0cik7CisJCSh2b2lkKSB3YXR0cnNldChtYWluX3dpbmRvdywgYXR0cmlidXRlc1tGVU5DVElPTl9URVhUXSk7CisJCW9mZnNldCArPSBzdHJsZW4oZnVuY3Rpb25fa2V5c1tpXS5rZXlfc3RyKTsKKwkJbXZ3cHJpbnR3KG1haW5fd2luZG93LCBMSU5FUy0zLAorCQkJCW9mZnNldCwgIiVzIiwKKwkJCQlmdW5jdGlvbl9rZXlzW2ldLmZ1bmMpOworCQlvZmZzZXQgKz0gc3RybGVuKGZ1bmN0aW9uX2tleXNbaV0uZnVuYykgKyBza2lwOworCX0KKwkodm9pZCkgd2F0dHJzZXQobWFpbl93aW5kb3csIGF0dHJpYnV0ZXNbTk9STUFMXSk7Cit9CisKKy8qIGhlbHAgKi8KK3N0YXRpYyB2b2lkIGhhbmRsZV9mMShpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSkKK3sKKwlzaG93X3Njcm9sbF93aW4obWFpbl93aW5kb3csCisJCQlfKCJSRUFETUUiKSwgXyhuY29uZl9yZWFkbWUpKTsKKwlyZXR1cm47Cit9CisKKy8qIHN5bWJvbGUgaGVscCAqLworc3RhdGljIHZvaWQgaGFuZGxlX2YyKGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKQoreworCXNob3dfaGVscChjdXJyZW50X2l0ZW0pOworCXJldHVybjsKK30KKworLyogaW5zdHJ1Y3Rpb25zICovCitzdGF0aWMgdm9pZCBoYW5kbGVfZjMoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pCit7CisJc2hvd19zY3JvbGxfd2luKG1haW5fd2luZG93LAorCQkJXygiSW5zdHJ1Y3Rpb25zIiksCisJCQlfKGN1cnJlbnRfaW5zdHJ1Y3Rpb25zKSk7CisJcmV0dXJuOworfQorCisvKiBjb25maWcgKi8KK3N0YXRpYyB2b2lkIGhhbmRsZV9mNChpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSkKK3sKKwlpbnQgcmVzID0gYnRuX2RpYWxvZyhtYWluX3dpbmRvdywKKwkJCV8oIlNob3cgYWxsIHN5bWJvbHM/IiksCisJCQkyLAorCQkJIiAgIDxTaG93IEFsbD4gICAiLAorCQkJIjxEb24ndCBzaG93IGFsbD4iKTsKKwlpZiAocmVzID09IDApCisJCXNob3dfYWxsX2l0ZW1zID0gMTsKKwllbHNlIGlmIChyZXMgPT0gMSkKKwkJc2hvd19hbGxfaXRlbXMgPSAwOworCisJcmV0dXJuOworfQorCisvKiBiYWNrICovCitzdGF0aWMgdm9pZCBoYW5kbGVfZjUoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pCit7CisJKmtleSA9IEtFWV9MRUZUOworCXJldHVybjsKK30KKworLyogc2F2ZSAqLworc3RhdGljIHZvaWQgaGFuZGxlX2Y2KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKQoreworCWNvbmZfc2F2ZSgpOworCXJldHVybjsKK30KKworLyogbG9hZCAqLworc3RhdGljIHZvaWQgaGFuZGxlX2Y3KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKQoreworCWNvbmZfbG9hZCgpOworCXJldHVybjsKK30KKworLyogc2VhcmNoICovCitzdGF0aWMgdm9pZCBoYW5kbGVfZjgoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pCit7CisJc2VhcmNoX2NvbmYoKTsKKwlyZXR1cm47Cit9CisKKy8qIGV4aXQgKi8KK3N0YXRpYyB2b2lkIGhhbmRsZV9mOShpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSkKK3sKKwlkb19leGl0KCk7CisJcmV0dXJuOworfQorCisvKiByZXR1cm4gIT0gMCB0byBpbmRpY2F0ZSB0aGUga2V5IHdhcyBoYW5kbGVzICovCitzdGF0aWMgaW50IHByb2Nlc3Nfc3BlY2lhbF9rZXlzKGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlpbnQgaTsKKworCWlmICgqa2V5ID09IEtFWV9SRVNJWkUpIHsKKwkJc2V0dXBfd2luZG93cygpOworCQlyZXR1cm4gMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZnVuY3Rpb25fa2V5c19udW07IGkrKykgeworCQlpZiAoKmtleSA9PSBLRVlfRihmdW5jdGlvbl9rZXlzW2ldLmtleSkgfHwKKwkJICAgICprZXkgPT0gJzAnICsgZnVuY3Rpb25fa2V5c1tpXS5rZXkpeworCQkJZnVuY3Rpb25fa2V5c1tpXS5oYW5kbGVyKGtleSwgbWVudSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjbGVhbl9pdGVtcyh2b2lkKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGN1cnNlc19tZW51X2l0ZW1zW2ldOyBpKyspCisJCWZyZWVfaXRlbShjdXJzZXNfbWVudV9pdGVtc1tpXSk7CisJYnplcm8oY3Vyc2VzX21lbnVfaXRlbXMsIHNpemVvZihjdXJzZXNfbWVudV9pdGVtcykpOworCWJ6ZXJvKGtfbWVudV9pdGVtcywgc2l6ZW9mKGtfbWVudV9pdGVtcykpOworCWl0ZW1zX251bSA9IDA7Cit9CisKK3R5cGVkZWYgZW51bSB7TUFUQ0hfVElOS0VSX1BBVFRFUk5fVVAsIE1BVENIX1RJTktFUl9QQVRURVJOX0RPV04sCisJRklORF9ORVhUX01BVENIX0RPV04sIEZJTkRfTkVYVF9NQVRDSF9VUH0gbWF0Y2hfZjsKKworLyogcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCBpdGVtLCBvciAtMSBpZiBubyBzdWNoIGl0ZW0gZXhpc3RzICovCitzdGF0aWMgaW50IGdldF9tZXh0X21hdGNoKGNvbnN0IGNoYXIgKm1hdGNoX3N0ciwgbWF0Y2hfZiBmbGFnKQoreworCWludCBtYXRjaF9zdGFydCA9IGl0ZW1faW5kZXgoY3VycmVudF9pdGVtKGN1cnNlc19tZW51KSk7CisJaW50IGluZGV4OworCisJaWYgKGZsYWcgPT0gRklORF9ORVhUX01BVENIX0RPV04pCisJCSsrbWF0Y2hfc3RhcnQ7CisJZWxzZSBpZiAoZmxhZyA9PSBGSU5EX05FWFRfTUFUQ0hfVVApCisJCS0tbWF0Y2hfc3RhcnQ7CisKKwlpbmRleCA9IG1hdGNoX3N0YXJ0OworCWluZGV4ID0gKGluZGV4ICsgaXRlbXNfbnVtKSAlIGl0ZW1zX251bTsKKwl3aGlsZSAodHJ1ZSkgeworCQljaGFyICpzdHIgPSBrX21lbnVfaXRlbXNbaW5kZXhdLnN0cjsKKwkJaWYgKHN0cmNhc2VzdHIoc3RyLCBtYXRjaF9zdHIpICE9IDApCisJCQlyZXR1cm4gaW5kZXg7CisJCWlmIChmbGFnID09IEZJTkRfTkVYVF9NQVRDSF9VUCB8fAorCQkgICAgZmxhZyA9PSBNQVRDSF9USU5LRVJfUEFUVEVSTl9VUCkKKwkJCS0taW5kZXg7CisJCWVsc2UKKwkJCSsraW5kZXg7CisJCWluZGV4ID0gKGluZGV4ICsgaXRlbXNfbnVtKSAlIGl0ZW1zX251bTsKKwkJaWYgKGluZGV4ID09IG1hdGNoX3N0YXJ0KQorCQkJcmV0dXJuIC0xOworCX0KK30KKworLyogTWFrZSBhIG5ldyBpdGVtLiAqLworc3RhdGljIHZvaWQgaXRlbV9tYWtlKHN0cnVjdCBtZW51ICptZW51LCBjaGFyIHRhZywgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCWlmIChpdGVtc19udW0gPiBNQVhfTUVOVV9JVEVNUy0xKQorCQlyZXR1cm47CisKKwliemVybygma19tZW51X2l0ZW1zW2l0ZW1zX251bV0sIHNpemVvZihrX21lbnVfaXRlbXNbMF0pKTsKKwlrX21lbnVfaXRlbXNbaXRlbXNfbnVtXS50YWcgPSB0YWc7CisJa19tZW51X2l0ZW1zW2l0ZW1zX251bV0udXNycHRyID0gbWVudTsKKwlpZiAobWVudSAhPSBOVUxMKQorCQlrX21lbnVfaXRlbXNbaXRlbXNfbnVtXS5pc192aXNpYmxlID0KKwkJCW1lbnVfaXNfdmlzaWJsZShtZW51KTsKKwllbHNlCisJCWtfbWVudV9pdGVtc1tpdGVtc19udW1dLmlzX3Zpc2libGUgPSAxOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJdnNucHJpbnRmKGtfbWVudV9pdGVtc1tpdGVtc19udW1dLnN0ciwKKwkJICBzaXplb2Yoa19tZW51X2l0ZW1zW2l0ZW1zX251bV0uc3RyKSwKKwkJICBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJaWYgKCFrX21lbnVfaXRlbXNbaXRlbXNfbnVtXS5pc192aXNpYmxlKQorCQltZW1jcHkoa19tZW51X2l0ZW1zW2l0ZW1zX251bV0uc3RyLCAiWFhYIiwgMyk7CisKKwljdXJzZXNfbWVudV9pdGVtc1tpdGVtc19udW1dID0gbmV3X2l0ZW0oCisJCQlrX21lbnVfaXRlbXNbaXRlbXNfbnVtXS5zdHIsCisJCQlrX21lbnVfaXRlbXNbaXRlbXNfbnVtXS5zdHIpOworCXNldF9pdGVtX3VzZXJwdHIoY3Vyc2VzX21lbnVfaXRlbXNbaXRlbXNfbnVtXSwKKwkJCSZrX21lbnVfaXRlbXNbaXRlbXNfbnVtXSk7CisJLyoKKwlpZiAoIWtfbWVudV9pdGVtc1tpdGVtc19udW1dLmlzX3Zpc2libGUpCisJCWl0ZW1fb3B0c19vZmYoY3Vyc2VzX21lbnVfaXRlbXNbaXRlbXNfbnVtXSwgT19TRUxFQ1RBQkxFKTsKKwkqLworCisJaXRlbXNfbnVtKys7CisJY3Vyc2VzX21lbnVfaXRlbXNbaXRlbXNfbnVtXSA9IE5VTEw7Cit9CisKKy8qIHZlcnkgaGFja2lzaC4gYWRkcyBhIHN0cmluZyB0byB0aGUgbGFzdCBpdGVtIGFkZGVkICovCitzdGF0aWMgdm9pZCBpdGVtX2FkZF9zdHIoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlpbnQgaW5kZXggPSBpdGVtc19udW0tMTsKKwljaGFyIG5ld19zdHJbMjU2XTsKKwljaGFyIHRtcF9zdHJbMjU2XTsKKworCWlmIChpbmRleCA8IDApCisJCXJldHVybjsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZzbnByaW50ZihuZXdfc3RyLCBzaXplb2YobmV3X3N0ciksIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJc25wcmludGYodG1wX3N0ciwgc2l6ZW9mKHRtcF9zdHIpLCAiJXMlcyIsCisJCQlrX21lbnVfaXRlbXNbaW5kZXhdLnN0ciwgbmV3X3N0cik7CisJc3RybmNweShrX21lbnVfaXRlbXNbaW5kZXhdLnN0ciwKKwkJdG1wX3N0ciwKKwkJc2l6ZW9mKGtfbWVudV9pdGVtc1tpbmRleF0uc3RyKSk7CisKKwlmcmVlX2l0ZW0oY3Vyc2VzX21lbnVfaXRlbXNbaW5kZXhdKTsKKwljdXJzZXNfbWVudV9pdGVtc1tpbmRleF0gPSBuZXdfaXRlbSgKKwkJCWtfbWVudV9pdGVtc1tpbmRleF0uc3RyLAorCQkJa19tZW51X2l0ZW1zW2luZGV4XS5zdHIpOworCXNldF9pdGVtX3VzZXJwdHIoY3Vyc2VzX21lbnVfaXRlbXNbaW5kZXhdLAorCQkJJmtfbWVudV9pdGVtc1tpbmRleF0pOworfQorCisvKiBnZXQgdGhlIHRhZyBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0gKi8KK3N0YXRpYyBjaGFyIGl0ZW1fdGFnKHZvaWQpCit7CisJSVRFTSAqY3VyOworCXN0cnVjdCBtaXRlbSAqbWN1cjsKKworCWN1ciA9IGN1cnJlbnRfaXRlbShjdXJzZXNfbWVudSk7CisJaWYgKGN1ciA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwltY3VyID0gKHN0cnVjdCBtaXRlbSAqKSBpdGVtX3VzZXJwdHIoY3VyKTsKKwlyZXR1cm4gbWN1ci0+dGFnOworfQorCitzdGF0aWMgaW50IGN1cnNlc19pdGVtX2luZGV4KHZvaWQpCit7CisJcmV0dXJuICBpdGVtX2luZGV4KGN1cnJlbnRfaXRlbShjdXJzZXNfbWVudSkpOworfQorCitzdGF0aWMgdm9pZCAqaXRlbV9kYXRhKHZvaWQpCit7CisJSVRFTSAqY3VyOworCXN0cnVjdCBtaXRlbSAqbWN1cjsKKworCWN1ciA9IGN1cnJlbnRfaXRlbShjdXJzZXNfbWVudSk7CisJaWYgKCFjdXIpCisJCXJldHVybiBOVUxMOworCW1jdXIgPSAoc3RydWN0IG1pdGVtICopIGl0ZW1fdXNlcnB0cihjdXIpOworCXJldHVybiBtY3VyLT51c3JwdHI7CisKK30KKworc3RhdGljIGludCBpdGVtX2lzX3RhZyhjaGFyIHRhZykKK3sKKwlyZXR1cm4gaXRlbV90YWcoKSA9PSB0YWc7Cit9CisKK3N0YXRpYyBjaGFyIGZpbGVuYW1lW1BBVEhfTUFYKzFdOworc3RhdGljIGNoYXIgbWVudV9iYWNrdGl0bGVbUEFUSF9NQVgrMTI4XTsKK3N0YXRpYyBjb25zdCBjaGFyICpzZXRfY29uZmlnX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKmNvbmZpZ19maWxlbmFtZSkKK3sKKwlpbnQgc2l6ZTsKKworCXNpemUgPSBzbnByaW50ZihtZW51X2JhY2t0aXRsZSwgc2l6ZW9mKG1lbnVfYmFja3RpdGxlKSwKKwkJCSIlcyAtICVzIiwgY29uZmlnX2ZpbGVuYW1lLCByb290bWVudS5wcm9tcHQtPnRleHQpOworCWlmIChzaXplID49IHNpemVvZihtZW51X2JhY2t0aXRsZSkpCisJCW1lbnVfYmFja3RpdGxlW3NpemVvZihtZW51X2JhY2t0aXRsZSktMV0gPSAnXDAnOworCisJc2l6ZSA9IHNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMiLCBjb25maWdfZmlsZW5hbWUpOworCWlmIChzaXplID49IHNpemVvZihmaWxlbmFtZSkpCisJCWZpbGVuYW1lW3NpemVvZihmaWxlbmFtZSktMV0gPSAnXDAnOworCXJldHVybiBtZW51X2JhY2t0aXRsZTsKK30KKworLyogcmV0dXJuID0gMCBtZWFucyB3ZSBhcmUgc3VjY2Vzc2Z1bC4KKyAqIC0xIG1lYW5zIGdvIG9uIGRvaW5nIHdoYXQgeW91IHdlcmUgZG9pbmcKKyAqLworc3RhdGljIGludCBkb19leGl0KHZvaWQpCit7CisJaW50IHJlczsKKwlpZiAoIWNvbmZfZ2V0X2NoYW5nZWQoKSkgeworCQlnbG9iYWxfZXhpdCA9IDE7CisJCXJldHVybiAwOworCX0KKwlyZXMgPSBidG5fZGlhbG9nKG1haW5fd2luZG93LAorCQkJXygiRG8geW91IHdpc2ggdG8gc2F2ZSB5b3VyIG5ldyBjb25maWd1cmF0aW9uP1xuIgorCQkJCSI8RVNDPiB0byBjYW5jZWwgYW5kIHJlc3VtZSBuY29uZmlnLiIpLAorCQkJMiwKKwkJCSIgICA8c2F2ZT4gICAiLAorCQkJIjxkb24ndCBzYXZlPiIpOworCWlmIChyZXMgPT0gS0VZX0VYSVQpIHsKKwkJZ2xvYmFsX2V4aXQgPSAwOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogaWYgd2UgZ290IGhlcmUsIHRoZSB1c2VyIHJlYWxseSB3YW50cyB0byBleGl0ICovCisJc3dpdGNoIChyZXMpIHsKKwljYXNlIDA6CisJCXJlcyA9IGNvbmZfd3JpdGUoZmlsZW5hbWUpOworCQlpZiAocmVzKQorCQkJYnRuX2RpYWxvZygKKwkJCQltYWluX3dpbmRvdywKKwkJCQlfKCJFcnJvciBkdXJpbmcgd3JpdGluZyBvZiBjb25maWd1cmF0aW9uLlxuIgorCQkJCSAgIllvdXIgY29uZmlndXJhdGlvbiBjaGFuZ2VzIHdlcmUgTk9UIHNhdmVkLiIpLAorCQkJCSAgMSwKKwkJCQkgICI8T0s+Iik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJ0bl9kaWFsb2coCisJCQltYWluX3dpbmRvdywKKwkJCV8oIllvdXIgY29uZmlndXJhdGlvbiBjaGFuZ2VzIHdlcmUgTk9UIHNhdmVkLiIpLAorCQkJMSwKKwkJCSI8T0s+Iik7CisJCWJyZWFrOworCX0KKwlnbG9iYWxfZXhpdCA9IDE7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgc2VhcmNoX2NvbmYodm9pZCkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICoqc3ltX2FycjsKKwlzdHJ1Y3QgZ3N0ciByZXM7CisJY2hhciBkaWFsb2dfaW5wdXRfcmVzdWx0WzEwMF07CisJY2hhciAqZGlhbG9nX2lucHV0OworCWludCBkcmVzOworYWdhaW46CisJZHJlcyA9IGRpYWxvZ19pbnB1dGJveChtYWluX3dpbmRvdywKKwkJCV8oIlNlYXJjaCBDb25maWd1cmF0aW9uIFBhcmFtZXRlciIpLAorCQkJXygiRW50ZXIgIiBDT05GSUdfICIgKHN1YilzdHJpbmcgdG8gc2VhcmNoIGZvciAiCisJCQkJIih3aXRoIG9yIHdpdGhvdXQgXCIiIENPTkZJR18gIlwiKSIpLAorCQkJIiIsIGRpYWxvZ19pbnB1dF9yZXN1bHQsIDk5KTsKKwlzd2l0Y2ggKGRyZXMpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgMToKKwkJc2hvd19zY3JvbGxfd2luKG1haW5fd2luZG93LAorCQkJCV8oIlNlYXJjaCBDb25maWd1cmF0aW9uIiksIHNlYXJjaF9oZWxwKTsKKwkJZ290byBhZ2FpbjsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJLyogc3RyaXAgdGhlIHByZWZpeCBpZiBuZWNlc3NhcnkgKi8KKwlkaWFsb2dfaW5wdXQgPSBkaWFsb2dfaW5wdXRfcmVzdWx0OworCWlmIChzdHJuY2FzZWNtcChkaWFsb2dfaW5wdXRfcmVzdWx0LCBDT05GSUdfLCBzdHJsZW4oQ09ORklHXykpID09IDApCisJCWRpYWxvZ19pbnB1dCArPSBzdHJsZW4oQ09ORklHXyk7CisKKwlzeW1fYXJyID0gc3ltX3JlX3NlYXJjaChkaWFsb2dfaW5wdXQpOworCXJlcyA9IGdldF9yZWxhdGlvbnNfc3RyKHN5bV9hcnIpOworCWZyZWUoc3ltX2Fycik7CisJc2hvd19zY3JvbGxfd2luKG1haW5fd2luZG93LAorCQkJXygiU2VhcmNoIFJlc3VsdHMiKSwgc3RyX2dldCgmcmVzKSk7CisJc3RyX2ZyZWUoJnJlcyk7Cit9CisKKworc3RhdGljIHZvaWQgYnVpbGRfY29uZihzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBtZW51ICpjaGlsZDsKKwlpbnQgdHlwZSwgdG1wLCBkb2ludCA9IDI7CisJdHJpc3RhdGUgdmFsOworCWNoYXIgY2g7CisKKwlpZiAoIW1lbnUgfHwgKCFzaG93X2FsbF9pdGVtcyAmJiAhbWVudV9pc192aXNpYmxlKG1lbnUpKSkKKwkJcmV0dXJuOworCisJc3ltID0gbWVudS0+c3ltOworCXByb3AgPSBtZW51LT5wcm9tcHQ7CisJaWYgKCFzeW0pIHsKKwkJaWYgKHByb3AgJiYgbWVudSAhPSBjdXJyZW50X21lbnUpIHsKKwkJCWNvbnN0IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsKKwkJCWVudW0gcHJvcF90eXBlIHB0eXBlOworCQkJcHR5cGUgPSBtZW51LT5wcm9tcHQgPyBtZW51LT5wcm9tcHQtPnR5cGUgOiBQX1VOS05PV047CisJCQlzd2l0Y2ggKHB0eXBlKSB7CisJCQljYXNlIFBfTUVOVToKKwkJCQljaGlsZF9jb3VudCsrOworCQkJCXByb21wdCA9IF8ocHJvbXB0KTsKKwkJCQlpZiAoc2luZ2xlX21lbnVfbW9kZSkgeworCQkJCQlpdGVtX21ha2UobWVudSwgJ20nLAorCQkJCQkJIiVzJSpjJXMiLAorCQkJCQkJbWVudS0+ZGF0YSA/ICItLT4iIDogIisrPiIsCisJCQkJCQlpbmRlbnQgKyAxLCAnICcsIHByb21wdCk7CisJCQkJfSBlbHNlCisJCQkJCWl0ZW1fbWFrZShtZW51LCAnbScsCisJCQkJCQkiICAgJSpjJXMgIC0tLT4iLAorCQkJCQkJaW5kZW50ICsgMSwKKwkJCQkJCScgJywgcHJvbXB0KTsKKworCQkJCWlmIChzaW5nbGVfbWVudV9tb2RlICYmIG1lbnUtPmRhdGEpCisJCQkJCWdvdG8gY29uZl9jaGlsZHM7CisJCQkJcmV0dXJuOworCQkJY2FzZSBQX0NPTU1FTlQ6CisJCQkJaWYgKHByb21wdCkgeworCQkJCQljaGlsZF9jb3VudCsrOworCQkJCQlpdGVtX21ha2UobWVudSwgJzonLAorCQkJCQkJIiAgICUqYyoqKiAlcyAqKioiLAorCQkJCQkJaW5kZW50ICsgMSwgJyAnLAorCQkJCQkJXyhwcm9tcHQpKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWlmIChwcm9tcHQpIHsKKwkJCQkJY2hpbGRfY291bnQrKzsKKwkJCQkJaXRlbV9tYWtlKG1lbnUsICc6JywgIi0tLSUqYyVzIiwKKwkJCQkJCWluZGVudCArIDEsICcgJywKKwkJCQkJCV8ocHJvbXB0KSk7CisJCQkJfQorCQkJfQorCQl9IGVsc2UKKwkJCWRvaW50ID0gMDsKKwkJZ290byBjb25mX2NoaWxkczsKKwl9CisKKwl0eXBlID0gc3ltX2dldF90eXBlKHN5bSk7CisJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkgeworCQlzdHJ1Y3Qgc3ltYm9sICpkZWZfc3ltID0gc3ltX2dldF9jaG9pY2VfdmFsdWUoc3ltKTsKKwkJc3RydWN0IG1lbnUgKmRlZl9tZW51ID0gTlVMTDsKKworCQljaGlsZF9jb3VudCsrOworCQlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsKKwkJCWlmIChtZW51X2lzX3Zpc2libGUoY2hpbGQpICYmIGNoaWxkLT5zeW0gPT0gZGVmX3N5bSkKKwkJCQlkZWZfbWVudSA9IGNoaWxkOworCQl9CisKKwkJdmFsID0gc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pOworCQlpZiAoc3ltX2lzX2NoYW5nYWJsZShzeW0pKSB7CisJCQlzd2l0Y2ggKHR5cGUpIHsKKwkJCWNhc2UgU19CT09MRUFOOgorCQkJCWl0ZW1fbWFrZShtZW51LCAndCcsICJbJWNdIiwKKwkJCQkJCXZhbCA9PSBubyA/ICcgJyA6ICcqJyk7CisJCQkJYnJlYWs7CisJCQljYXNlIFNfVFJJU1RBVEU6CisJCQkJc3dpdGNoICh2YWwpIHsKKwkJCQljYXNlIHllczoKKwkJCQkJY2ggPSAnKic7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgbW9kOgorCQkJCQljaCA9ICdNJzsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJY2ggPSAnICc7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpdGVtX21ha2UobWVudSwgJ3QnLCAiPCVjPiIsIGNoKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWl0ZW1fbWFrZShtZW51LCBkZWZfbWVudSA/ICd0JyA6ICc6JywgIiAgICIpOworCQl9CisKKwkJaXRlbV9hZGRfc3RyKCIlKmMlcyIsIGluZGVudCArIDEsCisJCQkJJyAnLCBfKG1lbnVfZ2V0X3Byb21wdChtZW51KSkpOworCQlpZiAodmFsID09IHllcykgeworCQkJaWYgKGRlZl9tZW51KSB7CisJCQkJaXRlbV9hZGRfc3RyKCIgKCVzKSIsCisJCQkJCV8obWVudV9nZXRfcHJvbXB0KGRlZl9tZW51KSkpOworCQkJCWl0ZW1fYWRkX3N0cigiICAtLS0+Iik7CisJCQkJaWYgKGRlZl9tZW51LT5saXN0KSB7CisJCQkJCWluZGVudCArPSAyOworCQkJCQlidWlsZF9jb25mKGRlZl9tZW51KTsKKwkJCQkJaW5kZW50IC09IDI7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG1lbnUgPT0gY3VycmVudF9tZW51KSB7CisJCQlpdGVtX21ha2UobWVudSwgJzonLAorCQkJCSItLS0lKmMlcyIsIGluZGVudCArIDEsCisJCQkJJyAnLCBfKG1lbnVfZ2V0X3Byb21wdChtZW51KSkpOworCQkJZ290byBjb25mX2NoaWxkczsKKwkJfQorCQljaGlsZF9jb3VudCsrOworCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7CisJCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgdmFsID09IHllcykgeworCQkJaXRlbV9tYWtlKG1lbnUsICc6JywgIiAgICIpOworCQl9IGVsc2UgeworCQkJc3dpdGNoICh0eXBlKSB7CisJCQljYXNlIFNfQk9PTEVBTjoKKwkJCQlpZiAoc3ltX2lzX2NoYW5nYWJsZShzeW0pKQorCQkJCQlpdGVtX21ha2UobWVudSwgJ3QnLCAiWyVjXSIsCisJCQkJCQl2YWwgPT0gbm8gPyAnICcgOiAnKicpOworCQkJCWVsc2UKKwkJCQkJaXRlbV9tYWtlKG1lbnUsICd0JywgIi0lYy0iLAorCQkJCQkJdmFsID09IG5vID8gJyAnIDogJyonKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU19UUklTVEFURToKKwkJCQlzd2l0Y2ggKHZhbCkgeworCQkJCWNhc2UgeWVzOgorCQkJCQljaCA9ICcqJzsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBtb2Q6CisJCQkJCWNoID0gJ00nOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQljaCA9ICcgJzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChzeW1faXNfY2hhbmdhYmxlKHN5bSkpIHsKKwkJCQkJaWYgKHN5bS0+cmV2X2RlcC50cmkgPT0gbW9kKQorCQkJCQkJaXRlbV9tYWtlKG1lbnUsCisJCQkJCQkJJ3QnLCAieyVjfSIsIGNoKTsKKwkJCQkJZWxzZQorCQkJCQkJaXRlbV9tYWtlKG1lbnUsCisJCQkJCQkJJ3QnLCAiPCVjPiIsIGNoKTsKKwkJCQl9IGVsc2UKKwkJCQkJaXRlbV9tYWtlKG1lbnUsICd0JywgIi0lYy0iLCBjaCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXRtcCA9IDIgKyBzdHJsZW4oc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSk7CisJCQkJaXRlbV9tYWtlKG1lbnUsICdzJywgIiAgICAoJXMpIiwKKwkJCQkJCXN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSkpOworCQkJCXRtcCA9IGluZGVudCAtIHRtcCArIDQ7CisJCQkJaWYgKHRtcCA8IDApCisJCQkJCXRtcCA9IDA7CisJCQkJaXRlbV9hZGRfc3RyKCIlKmMlcyVzIiwgdG1wLCAnICcsCisJCQkJCQlfKG1lbnVfZ2V0X3Byb21wdChtZW51KSksCisJCQkJCQkoc3ltX2hhc192YWx1ZShzeW0pIHx8CisJCQkJCQkgIXN5bV9pc19jaGFuZ2FibGUoc3ltKSkgPyAiIiA6CisJCQkJCQlfKCIgKE5FVykiKSk7CisJCQkJZ290byBjb25mX2NoaWxkczsKKwkJCX0KKwkJfQorCQlpdGVtX2FkZF9zdHIoIiUqYyVzJXMiLCBpbmRlbnQgKyAxLCAnICcsCisJCQkJXyhtZW51X2dldF9wcm9tcHQobWVudSkpLAorCQkJCShzeW1faGFzX3ZhbHVlKHN5bSkgfHwgIXN5bV9pc19jaGFuZ2FibGUoc3ltKSkgPworCQkJCSIiIDogXygiIChORVcpIikpOworCQlpZiAobWVudS0+cHJvbXB0ICYmIG1lbnUtPnByb21wdC0+dHlwZSA9PSBQX01FTlUpIHsKKwkJCWl0ZW1fYWRkX3N0cigiICAtLS0+Iik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKK2NvbmZfY2hpbGRzOgorCWluZGVudCArPSBkb2ludDsKKwlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpCisJCWJ1aWxkX2NvbmYoY2hpbGQpOworCWluZGVudCAtPSBkb2ludDsKK30KKworc3RhdGljIHZvaWQgcmVzZXRfbWVudSh2b2lkKQoreworCXVucG9zdF9tZW51KGN1cnNlc19tZW51KTsKKwljbGVhbl9pdGVtcygpOworfQorCisvKiBhZGp1c3QgdGhlIG1lbnUgdG8gc2hvdyB0aGlzIGl0ZW0uCisgKiBwcmVmZXIgbm90IHRvIHNjcm9sbCB0aGUgbWVudSBpZiBwb3NzaWJsZSovCitzdGF0aWMgdm9pZCBjZW50ZXJfaXRlbShpbnQgc2VsZWN0ZWRfaW5kZXgsIGludCAqbGFzdF90b3Bfcm93KQoreworCWludCB0b3Byb3c7CisKKwlzZXRfdG9wX3JvdyhjdXJzZXNfbWVudSwgKmxhc3RfdG9wX3Jvdyk7CisJdG9wcm93ID0gdG9wX3JvdyhjdXJzZXNfbWVudSk7CisJaWYgKHNlbGVjdGVkX2luZGV4IDwgdG9wcm93IHx8CisJICAgIHNlbGVjdGVkX2luZGV4ID49IHRvcHJvdyttd2luX21heF9saW5lcykgeworCQl0b3Byb3cgPSBtYXgoc2VsZWN0ZWRfaW5kZXgtbXdpbl9tYXhfbGluZXMvMiwgMCk7CisJCWlmICh0b3Byb3cgPj0gaXRlbV9jb3VudChjdXJzZXNfbWVudSktbXdpbl9tYXhfbGluZXMpCisJCQl0b3Byb3cgPSBpdGVtX2NvdW50KGN1cnNlc19tZW51KS1td2luX21heF9saW5lczsKKwkJc2V0X3RvcF9yb3coY3Vyc2VzX21lbnUsIHRvcHJvdyk7CisJfQorCXNldF9jdXJyZW50X2l0ZW0oY3Vyc2VzX21lbnUsCisJCQljdXJzZXNfbWVudV9pdGVtc1tzZWxlY3RlZF9pbmRleF0pOworCSpsYXN0X3RvcF9yb3cgPSB0b3Byb3c7CisJcG9zdF9tZW51KGN1cnNlc19tZW51KTsKKwlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsKK30KKworLyogdGhpcyBmdW5jdGlvbiBhc3N1bWVzIHJlc2V0X21lbnUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSAqLworc3RhdGljIHZvaWQgc2hvd19tZW51KGNvbnN0IGNoYXIgKnByb21wdCwgY29uc3QgY2hhciAqaW5zdHJ1Y3Rpb25zLAorCQlpbnQgc2VsZWN0ZWRfaW5kZXgsIGludCAqbGFzdF90b3Bfcm93KQoreworCWludCBtYXh4LCBtYXh5OworCVdJTkRPVyAqbWVudV93aW5kb3c7CisKKwljdXJyZW50X2luc3RydWN0aW9ucyA9IGluc3RydWN0aW9uczsKKworCWNsZWFyKCk7CisJKHZvaWQpIHdhdHRyc2V0KG1haW5fd2luZG93LCBhdHRyaWJ1dGVzW05PUk1BTF0pOworCXByaW50X2luX21pZGRsZShzdGRzY3IsIDEsIDAsIENPTFMsCisJCQltZW51X2JhY2t0aXRsZSwKKwkJCWF0dHJpYnV0ZXNbTUFJTl9IRUFESU5HXSk7CisKKwkodm9pZCkgd2F0dHJzZXQobWFpbl93aW5kb3csIGF0dHJpYnV0ZXNbTUFJTl9NRU5VX0JPWF0pOworCWJveChtYWluX3dpbmRvdywgMCwgMCk7CisJKHZvaWQpIHdhdHRyc2V0KG1haW5fd2luZG93LCBhdHRyaWJ1dGVzW01BSU5fTUVOVV9IRUFESU5HXSk7CisJbXZ3cHJpbnR3KG1haW5fd2luZG93LCAwLCAzLCAiICVzICIsIHByb21wdCk7CisJKHZvaWQpIHdhdHRyc2V0KG1haW5fd2luZG93LCBhdHRyaWJ1dGVzW05PUk1BTF0pOworCisJc2V0X21lbnVfaXRlbXMoY3Vyc2VzX21lbnUsIGN1cnNlc19tZW51X2l0ZW1zKTsKKworCS8qIHBvc2l0aW9uIHRoZSBtZW51IGF0IHRoZSBtaWRkbGUgb2YgdGhlIHNjcmVlbiAqLworCXNjYWxlX21lbnUoY3Vyc2VzX21lbnUsICZtYXh5LCAmbWF4eCk7CisJbWF4eCA9IG1pbihtYXh4LCBtd2luX21heF9jb2xzLTIpOworCW1heHkgPSBtd2luX21heF9saW5lczsKKwltZW51X3dpbmRvdyA9IGRlcndpbihtYWluX3dpbmRvdywKKwkJCW1heHksCisJCQltYXh4LAorCQkJMiwKKwkJCShtd2luX21heF9jb2xzLW1heHgpLzIpOworCWtleXBhZChtZW51X3dpbmRvdywgVFJVRSk7CisJc2V0X21lbnVfd2luKGN1cnNlc19tZW51LCBtZW51X3dpbmRvdyk7CisJc2V0X21lbnVfc3ViKGN1cnNlc19tZW51LCBtZW51X3dpbmRvdyk7CisKKwkvKiBtdXN0IHJlYXNzZXJ0IHRoaXMgYWZ0ZXIgY2hhbmdpbmcgaXRlbXMsIG90aGVyd2lzZSByZXR1cm5zIHRvIGEKKwkgKiBkZWZhdWx0IG9mIDE2CisJICovCisJc2V0X21lbnVfZm9ybWF0KGN1cnNlc19tZW51LCBtYXh5LCAxKTsKKwljZW50ZXJfaXRlbShzZWxlY3RlZF9pbmRleCwgbGFzdF90b3Bfcm93KTsKKwlzZXRfbWVudV9mb3JtYXQoY3Vyc2VzX21lbnUsIG1heHksIDEpOworCisJcHJpbnRfZnVuY3Rpb25fbGluZSgpOworCisJLyogUG9zdCB0aGUgbWVudSAqLworCXBvc3RfbWVudShjdXJzZXNfbWVudSk7CisJcmVmcmVzaF9hbGxfd2luZG93cyhtYWluX3dpbmRvdyk7Cit9CisKK3N0YXRpYyB2b2lkIGFkal9tYXRjaF9kaXIobWF0Y2hfZiAqbWF0Y2hfZGlyZWN0aW9uKQoreworCWlmICgqbWF0Y2hfZGlyZWN0aW9uID09IEZJTkRfTkVYVF9NQVRDSF9ET1dOKQorCQkqbWF0Y2hfZGlyZWN0aW9uID0KKwkJCU1BVENIX1RJTktFUl9QQVRURVJOX0RPV047CisJZWxzZSBpZiAoKm1hdGNoX2RpcmVjdGlvbiA9PSBGSU5EX05FWFRfTUFUQ0hfVVApCisJCSptYXRjaF9kaXJlY3Rpb24gPQorCQkJTUFUQ0hfVElOS0VSX1BBVFRFUk5fVVA7CisJLyogZWxzZSwgZG8gbm8gY2hhbmdlLi4gKi8KK30KKworc3RydWN0IG1hdGNoX3N0YXRlCit7CisJaW50IGluX3NlYXJjaDsKKwltYXRjaF9mIG1hdGNoX2RpcmVjdGlvbjsKKwljaGFyIHBhdHRlcm5bMjU2XTsKK307CisKKy8qIFJldHVybiAwIG1lYW5zIEkgaGF2ZSBoYW5kbGVkIHRoZSBrZXkuIEluIHN1Y2ggYSBjYXNlLCBhbnMgc2hvdWxkIGhvbGQgdGhlCisgKiBpdGVtIHRvIGNlbnRlciwgb3IgLTEgb3RoZXJ3aXNlLgorICogRWxzZSByZXR1cm4gLTEgLgorICovCitzdGF0aWMgaW50IGRvX21hdGNoKGludCBrZXksIHN0cnVjdCBtYXRjaF9zdGF0ZSAqc3RhdGUsIGludCAqYW5zKQoreworCWNoYXIgYyA9IChjaGFyKSBrZXk7CisJaW50IHRlcm1pbmF0ZV9zZWFyY2ggPSAwOworCSphbnMgPSAtMTsKKwlpZiAoa2V5ID09ICcvJyB8fCAoc3RhdGUtPmluX3NlYXJjaCAmJiBrZXkgPT0gMjcpKSB7CisJCW1vdmUoMCwgMCk7CisJCXJlZnJlc2goKTsKKwkJY2xydG9lb2woKTsKKwkJc3RhdGUtPmluX3NlYXJjaCA9IDEtc3RhdGUtPmluX3NlYXJjaDsKKwkJYnplcm8oc3RhdGUtPnBhdHRlcm4sIHNpemVvZihzdGF0ZS0+cGF0dGVybikpOworCQlzdGF0ZS0+bWF0Y2hfZGlyZWN0aW9uID0gTUFUQ0hfVElOS0VSX1BBVFRFUk5fRE9XTjsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghc3RhdGUtPmluX3NlYXJjaCkKKwkJcmV0dXJuIDE7CisKKwlpZiAoaXNhbG51bShjKSB8fCBpc2dyYXBoKGMpIHx8IGMgPT0gJyAnKSB7CisJCXN0YXRlLT5wYXR0ZXJuW3N0cmxlbihzdGF0ZS0+cGF0dGVybildID0gYzsKKwkJc3RhdGUtPnBhdHRlcm5bc3RybGVuKHN0YXRlLT5wYXR0ZXJuKV0gPSAnXDAnOworCQlhZGpfbWF0Y2hfZGlyKCZzdGF0ZS0+bWF0Y2hfZGlyZWN0aW9uKTsKKwkJKmFucyA9IGdldF9tZXh0X21hdGNoKHN0YXRlLT5wYXR0ZXJuLAorCQkJCXN0YXRlLT5tYXRjaF9kaXJlY3Rpb24pOworCX0gZWxzZSBpZiAoa2V5ID09IEtFWV9ET1dOKSB7CisJCXN0YXRlLT5tYXRjaF9kaXJlY3Rpb24gPSBGSU5EX05FWFRfTUFUQ0hfRE9XTjsKKwkJKmFucyA9IGdldF9tZXh0X21hdGNoKHN0YXRlLT5wYXR0ZXJuLAorCQkJCXN0YXRlLT5tYXRjaF9kaXJlY3Rpb24pOworCX0gZWxzZSBpZiAoa2V5ID09IEtFWV9VUCkgeworCQlzdGF0ZS0+bWF0Y2hfZGlyZWN0aW9uID0gRklORF9ORVhUX01BVENIX1VQOworCQkqYW5zID0gZ2V0X21leHRfbWF0Y2goc3RhdGUtPnBhdHRlcm4sCisJCQkJc3RhdGUtPm1hdGNoX2RpcmVjdGlvbik7CisJfSBlbHNlIGlmIChrZXkgPT0gS0VZX0JBQ0tTUEFDRSB8fCBrZXkgPT0gMTI3KSB7CisJCXN0YXRlLT5wYXR0ZXJuW3N0cmxlbihzdGF0ZS0+cGF0dGVybiktMV0gPSAnXDAnOworCQlhZGpfbWF0Y2hfZGlyKCZzdGF0ZS0+bWF0Y2hfZGlyZWN0aW9uKTsKKwl9IGVsc2UKKwkJdGVybWluYXRlX3NlYXJjaCA9IDE7CisKKwlpZiAodGVybWluYXRlX3NlYXJjaCkgeworCQlzdGF0ZS0+aW5fc2VhcmNoID0gMDsKKwkJYnplcm8oc3RhdGUtPnBhdHRlcm4sIHNpemVvZihzdGF0ZS0+cGF0dGVybikpOworCQltb3ZlKDAsIDApOworCQlyZWZyZXNoKCk7CisJCWNscnRvZW9sKCk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNvbmYoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJc3RydWN0IG1lbnUgKnN1Ym1lbnUgPSAwOworCWNvbnN0IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3RydWN0IG1lbnUgKmFjdGl2ZV9tZW51ID0gTlVMTDsKKwlpbnQgcmVzOworCWludCBjdXJyZW50X2luZGV4ID0gMDsKKwlpbnQgbGFzdF90b3Bfcm93ID0gMDsKKwlzdHJ1Y3QgbWF0Y2hfc3RhdGUgbWF0Y2hfc3RhdGUgPSB7CisJCS5pbl9zZWFyY2ggPSAwLAorCQkubWF0Y2hfZGlyZWN0aW9uID0gTUFUQ0hfVElOS0VSX1BBVFRFUk5fRE9XTiwKKwkJLnBhdHRlcm4gPSAiIiwKKwl9OworCisJd2hpbGUgKCFnbG9iYWxfZXhpdCkgeworCQlyZXNldF9tZW51KCk7CisJCWN1cnJlbnRfbWVudSA9IG1lbnU7CisJCWJ1aWxkX2NvbmYobWVudSk7CisJCWlmICghY2hpbGRfY291bnQpCisJCQlicmVhazsKKworCQlzaG93X21lbnUocHJvbXB0ID8gXyhwcm9tcHQpIDogXygiTWFpbiBNZW51IiksCisJCQkJXyhtZW51X2luc3RydWN0aW9ucyksCisJCQkJY3VycmVudF9pbmRleCwgJmxhc3RfdG9wX3Jvdyk7CisJCWtleXBhZCgobWVudV93aW4oY3Vyc2VzX21lbnUpKSwgVFJVRSk7CisJCXdoaWxlICghZ2xvYmFsX2V4aXQpIHsKKwkJCWlmIChtYXRjaF9zdGF0ZS5pbl9zZWFyY2gpIHsKKwkJCQltdnByaW50dygwLCAwLAorCQkJCQkic2VhcmNoaW5nOiAlcyIsIG1hdGNoX3N0YXRlLnBhdHRlcm4pOworCQkJCWNscnRvZW9sKCk7CisJCQl9CisJCQlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsKKwkJCXJlcyA9IHdnZXRjaChtZW51X3dpbihjdXJzZXNfbWVudSkpOworCQkJaWYgKCFyZXMpCisJCQkJYnJlYWs7CisJCQlpZiAoZG9fbWF0Y2gocmVzLCAmbWF0Y2hfc3RhdGUsICZjdXJyZW50X2luZGV4KSA9PSAwKSB7CisJCQkJaWYgKGN1cnJlbnRfaW5kZXggIT0gLTEpCisJCQkJCWNlbnRlcl9pdGVtKGN1cnJlbnRfaW5kZXgsCisJCQkJCQkgICAgJmxhc3RfdG9wX3Jvdyk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAocHJvY2Vzc19zcGVjaWFsX2tleXMoJnJlcywKKwkJCQkJCShzdHJ1Y3QgbWVudSAqKSBpdGVtX2RhdGEoKSkpCisJCQkJYnJlYWs7CisJCQlzd2l0Y2ggKHJlcykgeworCQkJY2FzZSBLRVlfRE9XTjoKKwkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX0RPV05fSVRFTSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEtFWV9VUDoKKwkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX1VQX0lURU0pOworCQkJCWJyZWFrOworCQkJY2FzZSBLRVlfTlBBR0U6CisJCQkJbWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9TQ1JfRFBBR0UpOworCQkJCWJyZWFrOworCQkJY2FzZSBLRVlfUFBBR0U6CisJCQkJbWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9TQ1JfVVBBR0UpOworCQkJCWJyZWFrOworCQkJY2FzZSBLRVlfSE9NRToKKwkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX0ZJUlNUX0lURU0pOworCQkJCWJyZWFrOworCQkJY2FzZSBLRVlfRU5EOgorCQkJCW1lbnVfZHJpdmVyKGN1cnNlc19tZW51LCBSRVFfTEFTVF9JVEVNKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2gnOgorCQkJY2FzZSAnPyc6CisJCQkJc2hvd19oZWxwKChzdHJ1Y3QgbWVudSAqKSBpdGVtX2RhdGEoKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAocmVzID09IDEwIHx8IHJlcyA9PSAyNyB8fAorCQkJCXJlcyA9PSAzMiB8fCByZXMgPT0gJ24nIHx8IHJlcyA9PSAneScgfHwKKwkJCQlyZXMgPT0gS0VZX0xFRlQgfHwgcmVzID09IEtFWV9SSUdIVCB8fAorCQkJCXJlcyA9PSAnbScpCisJCQkJYnJlYWs7CisJCQlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsKKwkJfQorCisJCXJlZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOworCQkvKiBpZiBFU0Mgb3IgbGVmdCovCisJCWlmIChyZXMgPT0gMjcgfHwgKG1lbnUgIT0gJnJvb3RtZW51ICYmIHJlcyA9PSBLRVlfTEVGVCkpCisJCQlicmVhazsKKworCQkvKiByZW1lbWJlciBsb2NhdGlvbiBpbiB0aGUgbWVudSAqLworCQlsYXN0X3RvcF9yb3cgPSB0b3Bfcm93KGN1cnNlc19tZW51KTsKKwkJY3VycmVudF9pbmRleCA9IGN1cnNlc19pdGVtX2luZGV4KCk7CisKKwkJaWYgKCFpdGVtX3RhZygpKQorCQkJY29udGludWU7CisKKwkJc3VibWVudSA9IChzdHJ1Y3QgbWVudSAqKSBpdGVtX2RhdGEoKTsKKwkJYWN0aXZlX21lbnUgPSAoc3RydWN0IG1lbnUgKilpdGVtX2RhdGEoKTsKKwkJaWYgKCFzdWJtZW51IHx8ICFtZW51X2lzX3Zpc2libGUoc3VibWVudSkpCisJCQljb250aW51ZTsKKwkJaWYgKHN1Ym1lbnUpCisJCQlzeW0gPSBzdWJtZW51LT5zeW07CisJCWVsc2UKKwkJCXN5bSA9IE5VTEw7CisKKwkJc3dpdGNoIChyZXMpIHsKKwkJY2FzZSAnICc6CisJCQlpZiAoaXRlbV9pc190YWcoJ3QnKSkKKwkJCQlzeW1fdG9nZ2xlX3RyaXN0YXRlX3ZhbHVlKHN5bSk7CisJCQllbHNlIGlmIChpdGVtX2lzX3RhZygnbScpKQorCQkJCWNvbmYoc3VibWVudSk7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfUklHSFQ6CisJCWNhc2UgMTA6IC8qIEVOVEVSIFdBUyBQUkVTU0VEICovCisJCQlzd2l0Y2ggKGl0ZW1fdGFnKCkpIHsKKwkJCWNhc2UgJ20nOgorCQkJCWlmIChzaW5nbGVfbWVudV9tb2RlKQorCQkJCQlzdWJtZW51LT5kYXRhID0KKwkJCQkJCSh2b2lkICopIChsb25nKSAhc3VibWVudS0+ZGF0YTsKKwkJCQllbHNlCisJCQkJCWNvbmYoc3VibWVudSk7CisJCQkJYnJlYWs7CisJCQljYXNlICd0JzoKKwkJCQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pICYmCisJCQkJICAgIHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSA9PSB5ZXMpCisJCQkJCWNvbmZfY2hvaWNlKHN1Ym1lbnUpOworCQkJCWVsc2UgaWYgKHN1Ym1lbnUtPnByb21wdCAmJgorCQkJCQkgc3VibWVudS0+cHJvbXB0LT50eXBlID09IFBfTUVOVSkKKwkJCQkJY29uZihzdWJtZW51KTsKKwkJCQllbHNlIGlmIChyZXMgPT0gMTApCisJCQkJCXN5bV90b2dnbGVfdHJpc3RhdGVfdmFsdWUoc3ltKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3MnOgorCQkJCWNvbmZfc3RyaW5nKHN1Ym1lbnUpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ3knOgorCQkJaWYgKGl0ZW1faXNfdGFnKCd0JykpIHsKKwkJCQlpZiAoc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIHllcykpCisJCQkJCWJyZWFrOworCQkJCWlmIChzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwgbW9kKSkKKwkJCQkJYnRuX2RpYWxvZyhtYWluX3dpbmRvdywgc2V0bW9kX3RleHQsIDApOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ24nOgorCQkJaWYgKGl0ZW1faXNfdGFnKCd0JykpCisJCQkJc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIG5vKTsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCWlmIChpdGVtX2lzX3RhZygndCcpKQorCQkJCXN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBtb2QpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZfbWVzc2FnZV9jYWxsYmFjayhjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCit7CisJY2hhciBidWZbMTAyNF07CisKKwl2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10LCBhcCk7CisJYnRuX2RpYWxvZyhtYWluX3dpbmRvdywgYnVmLCAxLCAiPE9LPiIpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2hlbHAoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJc3RydWN0IGdzdHIgaGVscCA9IHN0cl9uZXcoKTsKKworCWlmIChtZW51ICYmIG1lbnUtPnN5bSAmJiBtZW51X2hhc19oZWxwKG1lbnUpKSB7CisJCWlmIChtZW51LT5zeW0tPm5hbWUpIHsKKwkJCXN0cl9wcmludGYoJmhlbHAsICIlcyVzOlxuXG4iLCBDT05GSUdfLCBtZW51LT5zeW0tPm5hbWUpOworCQkJc3RyX2FwcGVuZCgmaGVscCwgXyhtZW51X2dldF9oZWxwKG1lbnUpKSk7CisJCQlzdHJfYXBwZW5kKCZoZWxwLCAiXG4iKTsKKwkJCWdldF9zeW1ib2xfc3RyKCZoZWxwLCBtZW51LT5zeW0pOworCQl9IGVsc2UgeworCQkJc3RyX2FwcGVuZCgmaGVscCwgXyhtZW51X2dldF9oZWxwKG1lbnUpKSk7CisJCX0KKwl9IGVsc2UgeworCQlzdHJfYXBwZW5kKCZoZWxwLCBub2hlbHBfdGV4dCk7CisJfQorCXNob3dfc2Nyb2xsX3dpbihtYWluX3dpbmRvdywgXyhtZW51X2dldF9wcm9tcHQobWVudSkpLCBzdHJfZ2V0KCZoZWxwKSk7CisJc3RyX2ZyZWUoJmhlbHApOworfQorCitzdGF0aWMgdm9pZCBjb25mX2Nob2ljZShzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwljb25zdCBjaGFyICpwcm9tcHQgPSBfKG1lbnVfZ2V0X3Byb21wdChtZW51KSk7CisJc3RydWN0IG1lbnUgKmNoaWxkID0gMDsKKwlzdHJ1Y3Qgc3ltYm9sICphY3RpdmU7CisJaW50IHNlbGVjdGVkX2luZGV4ID0gMDsKKwlpbnQgbGFzdF90b3Bfcm93ID0gMDsKKwlpbnQgcmVzLCBpID0gMDsKKwlzdHJ1Y3QgbWF0Y2hfc3RhdGUgbWF0Y2hfc3RhdGUgPSB7CisJCS5pbl9zZWFyY2ggPSAwLAorCQkubWF0Y2hfZGlyZWN0aW9uID0gTUFUQ0hfVElOS0VSX1BBVFRFUk5fRE9XTiwKKwkJLnBhdHRlcm4gPSAiIiwKKwl9OworCisJYWN0aXZlID0gc3ltX2dldF9jaG9pY2VfdmFsdWUobWVudS0+c3ltKTsKKwkvKiB0aGlzIGlzIG1vc3RseSBkdXBsaWNhdGVkIGZyb20gdGhlIGNvbmYoKSBmdW5jdGlvbi4gKi8KKwl3aGlsZSAoIWdsb2JhbF9leGl0KSB7CisJCXJlc2V0X21lbnUoKTsKKworCQlmb3IgKGkgPSAwLCBjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7CisJCQlpZiAoIXNob3dfYWxsX2l0ZW1zICYmICFtZW51X2lzX3Zpc2libGUoY2hpbGQpKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoY2hpbGQtPnN5bSA9PSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShtZW51LT5zeW0pKQorCQkJCWl0ZW1fbWFrZShjaGlsZCwgJzonLCAiPFg+ICVzIiwKKwkJCQkJCV8obWVudV9nZXRfcHJvbXB0KGNoaWxkKSkpOworCQkJZWxzZSBpZiAoY2hpbGQtPnN5bSkKKwkJCQlpdGVtX21ha2UoY2hpbGQsICc6JywgIiAgICAlcyIsCisJCQkJCQlfKG1lbnVfZ2V0X3Byb21wdChjaGlsZCkpKTsKKwkJCWVsc2UKKwkJCQlpdGVtX21ha2UoY2hpbGQsICc6JywgIioqKiAlcyAqKioiLAorCQkJCQkJXyhtZW51X2dldF9wcm9tcHQoY2hpbGQpKSk7CisKKwkJCWlmIChjaGlsZC0+c3ltID09IGFjdGl2ZSl7CisJCQkJbGFzdF90b3Bfcm93ID0gdG9wX3JvdyhjdXJzZXNfbWVudSk7CisJCQkJc2VsZWN0ZWRfaW5kZXggPSBpOworCQkJfQorCQkJaSsrOworCQl9CisJCXNob3dfbWVudShwcm9tcHQgPyBfKHByb21wdCkgOiBfKCJDaG9pY2UgTWVudSIpLAorCQkJCV8ocmFkaW9saXN0X2luc3RydWN0aW9ucyksCisJCQkJc2VsZWN0ZWRfaW5kZXgsCisJCQkJJmxhc3RfdG9wX3Jvdyk7CisJCXdoaWxlICghZ2xvYmFsX2V4aXQpIHsKKwkJCWlmIChtYXRjaF9zdGF0ZS5pbl9zZWFyY2gpIHsKKwkJCQltdnByaW50dygwLCAwLCAic2VhcmNoaW5nOiAlcyIsCisJCQkJCSBtYXRjaF9zdGF0ZS5wYXR0ZXJuKTsKKwkJCQljbHJ0b2VvbCgpOworCQkJfQorCQkJcmVmcmVzaF9hbGxfd2luZG93cyhtYWluX3dpbmRvdyk7CisJCQlyZXMgPSB3Z2V0Y2gobWVudV93aW4oY3Vyc2VzX21lbnUpKTsKKwkJCWlmICghcmVzKQorCQkJCWJyZWFrOworCQkJaWYgKGRvX21hdGNoKHJlcywgJm1hdGNoX3N0YXRlLCAmc2VsZWN0ZWRfaW5kZXgpID09IDApIHsKKwkJCQlpZiAoc2VsZWN0ZWRfaW5kZXggIT0gLTEpCisJCQkJCWNlbnRlcl9pdGVtKHNlbGVjdGVkX2luZGV4LAorCQkJCQkJICAgICZsYXN0X3RvcF9yb3cpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHByb2Nlc3Nfc3BlY2lhbF9rZXlzKAorCQkJCQkJJnJlcywKKwkJCQkJCShzdHJ1Y3QgbWVudSAqKSBpdGVtX2RhdGEoKSkpCisJCQkJYnJlYWs7CisJCQlzd2l0Y2ggKHJlcykgeworCQkJY2FzZSBLRVlfRE9XTjoKKwkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX0RPV05fSVRFTSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEtFWV9VUDoKKwkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX1VQX0lURU0pOworCQkJCWJyZWFrOworCQkJY2FzZSBLRVlfTlBBR0U6CisJCQkJbWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9TQ1JfRFBBR0UpOworCQkJCWJyZWFrOworCQkJY2FzZSBLRVlfUFBBR0U6CisJCQkJbWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9TQ1JfVVBBR0UpOworCQkJCWJyZWFrOworCQkJY2FzZSBLRVlfSE9NRToKKwkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX0ZJUlNUX0lURU0pOworCQkJCWJyZWFrOworCQkJY2FzZSBLRVlfRU5EOgorCQkJCW1lbnVfZHJpdmVyKGN1cnNlc19tZW51LCBSRVFfTEFTVF9JVEVNKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2gnOgorCQkJY2FzZSAnPyc6CisJCQkJc2hvd19oZWxwKChzdHJ1Y3QgbWVudSAqKSBpdGVtX2RhdGEoKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAocmVzID09IDEwIHx8IHJlcyA9PSAyNyB8fCByZXMgPT0gJyAnIHx8CisJCQkJCXJlcyA9PSBLRVlfTEVGVCl7CisJCQkJYnJlYWs7CisJCQl9CisJCQlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsKKwkJfQorCQkvKiBpZiBFU0Mgb3IgbGVmdCAqLworCQlpZiAocmVzID09IDI3IHx8IHJlcyA9PSBLRVlfTEVGVCkKKwkJCWJyZWFrOworCisJCWNoaWxkID0gaXRlbV9kYXRhKCk7CisJCWlmICghY2hpbGQgfHwgIW1lbnVfaXNfdmlzaWJsZShjaGlsZCkgfHwgIWNoaWxkLT5zeW0pCisJCQljb250aW51ZTsKKwkJc3dpdGNoIChyZXMpIHsKKwkJY2FzZSAnICc6CisJCWNhc2UgIDEwOgorCQljYXNlIEtFWV9SSUdIVDoKKwkJCXN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoY2hpbGQtPnN5bSwgeWVzKTsKKwkJCXJldHVybjsKKwkJY2FzZSAnaCc6CisJCWNhc2UgJz8nOgorCQkJc2hvd19oZWxwKGNoaWxkKTsKKwkJCWFjdGl2ZSA9IGNoaWxkLT5zeW07CisJCQlicmVhazsKKwkJY2FzZSBLRVlfRVhJVDoKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgY29uZl9zdHJpbmcoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJY29uc3QgY2hhciAqcHJvbXB0ID0gbWVudV9nZXRfcHJvbXB0KG1lbnUpOworCWNoYXIgZGlhbG9nX2lucHV0X3Jlc3VsdFsyNTZdOworCisJd2hpbGUgKDEpIHsKKwkJaW50IHJlczsKKwkJY29uc3QgY2hhciAqaGVhZGluZzsKKworCQlzd2l0Y2ggKHN5bV9nZXRfdHlwZShtZW51LT5zeW0pKSB7CisJCWNhc2UgU19JTlQ6CisJCQloZWFkaW5nID0gXyhpbnB1dGJveF9pbnN0cnVjdGlvbnNfaW50KTsKKwkJCWJyZWFrOworCQljYXNlIFNfSEVYOgorCQkJaGVhZGluZyA9IF8oaW5wdXRib3hfaW5zdHJ1Y3Rpb25zX2hleCk7CisJCQlicmVhazsKKwkJY2FzZSBTX1NUUklORzoKKwkJCWhlYWRpbmcgPSBfKGlucHV0Ym94X2luc3RydWN0aW9uc19zdHJpbmcpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQloZWFkaW5nID0gXygiSW50ZXJuYWwgbmNvbmYgZXJyb3IhIik7CisJCX0KKwkJcmVzID0gZGlhbG9nX2lucHV0Ym94KG1haW5fd2luZG93LAorCQkJCXByb21wdCA/IF8ocHJvbXB0KSA6IF8oIk1haW4gTWVudSIpLAorCQkJCWhlYWRpbmcsCisJCQkJc3ltX2dldF9zdHJpbmdfdmFsdWUobWVudS0+c3ltKSwKKwkJCQlkaWFsb2dfaW5wdXRfcmVzdWx0LAorCQkJCXNpemVvZihkaWFsb2dfaW5wdXRfcmVzdWx0KSk7CisJCXN3aXRjaCAocmVzKSB7CisJCWNhc2UgMDoKKwkJCWlmIChzeW1fc2V0X3N0cmluZ192YWx1ZShtZW51LT5zeW0sCisJCQkJCQlkaWFsb2dfaW5wdXRfcmVzdWx0KSkKKwkJCQlyZXR1cm47CisJCQlidG5fZGlhbG9nKG1haW5fd2luZG93LAorCQkJCV8oIllvdSBoYXZlIG1hZGUgYW4gaW52YWxpZCBlbnRyeS4iKSwgMCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJc2hvd19oZWxwKG1lbnUpOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX0VYSVQ6CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZfbG9hZCh2b2lkKQoreworCWNoYXIgZGlhbG9nX2lucHV0X3Jlc3VsdFsyNTZdOworCXdoaWxlICgxKSB7CisJCWludCByZXM7CisJCXJlcyA9IGRpYWxvZ19pbnB1dGJveChtYWluX3dpbmRvdywKKwkJCQlOVUxMLCBsb2FkX2NvbmZpZ190ZXh0LAorCQkJCWZpbGVuYW1lLAorCQkJCWRpYWxvZ19pbnB1dF9yZXN1bHQsCisJCQkJc2l6ZW9mKGRpYWxvZ19pbnB1dF9yZXN1bHQpKTsKKwkJc3dpdGNoIChyZXMpIHsKKwkJY2FzZSAwOgorCQkJaWYgKCFkaWFsb2dfaW5wdXRfcmVzdWx0WzBdKQorCQkJCXJldHVybjsKKwkJCWlmICghY29uZl9yZWFkKGRpYWxvZ19pbnB1dF9yZXN1bHQpKSB7CisJCQkJc2V0X2NvbmZpZ19maWxlbmFtZShkaWFsb2dfaW5wdXRfcmVzdWx0KTsKKwkJCQlzeW1fc2V0X2NoYW5nZV9jb3VudCgxKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlidG5fZGlhbG9nKG1haW5fd2luZG93LCBfKCJGaWxlIGRvZXMgbm90IGV4aXN0ISIpLCAwKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlzaG93X3Njcm9sbF93aW4obWFpbl93aW5kb3csCisJCQkJCV8oIkxvYWQgQWx0ZXJuYXRlIENvbmZpZ3VyYXRpb24iKSwKKwkJCQkJbG9hZF9jb25maWdfaGVscCk7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfRVhJVDoKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgY29uZl9zYXZlKHZvaWQpCit7CisJY2hhciBkaWFsb2dfaW5wdXRfcmVzdWx0WzI1Nl07CisJd2hpbGUgKDEpIHsKKwkJaW50IHJlczsKKwkJcmVzID0gZGlhbG9nX2lucHV0Ym94KG1haW5fd2luZG93LAorCQkJCU5VTEwsIHNhdmVfY29uZmlnX3RleHQsCisJCQkJZmlsZW5hbWUsCisJCQkJZGlhbG9nX2lucHV0X3Jlc3VsdCwKKwkJCQlzaXplb2YoZGlhbG9nX2lucHV0X3Jlc3VsdCkpOworCQlzd2l0Y2ggKHJlcykgeworCQljYXNlIDA6CisJCQlpZiAoIWRpYWxvZ19pbnB1dF9yZXN1bHRbMF0pCisJCQkJcmV0dXJuOworCQkJcmVzID0gY29uZl93cml0ZShkaWFsb2dfaW5wdXRfcmVzdWx0KTsKKwkJCWlmICghcmVzKSB7CisJCQkJc2V0X2NvbmZpZ19maWxlbmFtZShkaWFsb2dfaW5wdXRfcmVzdWx0KTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlidG5fZGlhbG9nKG1haW5fd2luZG93LCBfKCJDYW4ndCBjcmVhdGUgZmlsZSEgIgorCQkJCSJQcm9iYWJseSBhIG5vbmV4aXN0ZW50IGRpcmVjdG9yeS4iKSwKKwkJCQkxLCAiPE9LPiIpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXNob3dfc2Nyb2xsX3dpbihtYWluX3dpbmRvdywKKwkJCQlfKCJTYXZlIEFsdGVybmF0ZSBDb25maWd1cmF0aW9uIiksCisJCQkJc2F2ZV9jb25maWdfaGVscCk7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfRVhJVDoKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKwordm9pZCBzZXR1cF93aW5kb3dzKHZvaWQpCit7CisJaWYgKG1haW5fd2luZG93ICE9IE5VTEwpCisJCWRlbHdpbihtYWluX3dpbmRvdyk7CisKKwkvKiBzZXQgdXAgdGhlIG1lbnUgYW5kIG1lbnUgd2luZG93ICovCisJbWFpbl93aW5kb3cgPSBuZXd3aW4oTElORVMtMiwgQ09MUy0yLCAyLCAxKTsKKwlrZXlwYWQobWFpbl93aW5kb3csIFRSVUUpOworCW13aW5fbWF4X2xpbmVzID0gTElORVMtNzsKKwltd2luX21heF9jb2xzID0gQ09MUy02OworCisJLyogcGFuZWxzIG9yZGVyIGlzIGZyb20gYm90dG9tIHRvIHRvcCAqLworCW5ld19wYW5lbChtYWluX3dpbmRvdyk7Cit9CisKK2ludCBtYWluKGludCBhYywgY2hhciAqKmF2KQoreworCWNoYXIgKm1vZGU7CisKKwlzZXRsb2NhbGUoTENfQUxMLCAiIik7CisJYmluZHRleHRkb21haW4oUEFDS0FHRSwgTE9DQUxFRElSKTsKKwl0ZXh0ZG9tYWluKFBBQ0tBR0UpOworCisJY29uZl9wYXJzZShhdlsxXSk7CisJY29uZl9yZWFkKE5VTEwpOworCisJbW9kZSA9IGdldGVudigiTkNPTkZJR19NT0RFIik7CisJaWYgKG1vZGUpIHsKKwkJaWYgKCFzdHJjYXNlY21wKG1vZGUsICJzaW5nbGVfbWVudSIpKQorCQkJc2luZ2xlX21lbnVfbW9kZSA9IDE7CisJfQorCisJLyogSW5pdGlhbGl6ZSBjdXJzZXMgKi8KKwlpbml0c2NyKCk7CisJLyogc2V0IGNvbG9yIHRoZW1lICovCisJc2V0X2NvbG9ycygpOworCisJY2JyZWFrKCk7CisJbm9lY2hvKCk7CisJa2V5cGFkKHN0ZHNjciwgVFJVRSk7CisJY3Vyc19zZXQoMCk7CisKKwlpZiAoQ09MUyA8IDc1IHx8IExJTkVTIDwgMjApIHsKKwkJZW5kd2luKCk7CisJCXByaW50ZigiWW91ciB0ZXJtaW5hbCBzaG91bGQgaGF2ZSBhdCAiCisJCQkibGVhc3QgMjAgbGluZXMgYW5kIDc1IGNvbHVtbnNcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlub3RpbWVvdXQoc3Rkc2NyLCBGQUxTRSk7CisJRVNDREVMQVkgPSAxOworCisJLyogc2V0IGJ0bnMgbWVudSAqLworCWN1cnNlc19tZW51ID0gbmV3X21lbnUoY3Vyc2VzX21lbnVfaXRlbXMpOworCW1lbnVfb3B0c19vZmYoY3Vyc2VzX21lbnUsIE9fU0hPV0RFU0MpOworCW1lbnVfb3B0c19vbihjdXJzZXNfbWVudSwgT19TSE9XTUFUQ0gpOworCW1lbnVfb3B0c19vbihjdXJzZXNfbWVudSwgT19PTkVWQUxVRSk7CisJbWVudV9vcHRzX29uKGN1cnNlc19tZW51LCBPX05PTkNZQ0xJQyk7CisJbWVudV9vcHRzX29uKGN1cnNlc19tZW51LCBPX0lHTk9SRUNBU0UpOworCXNldF9tZW51X21hcmsoY3Vyc2VzX21lbnUsICIgIik7CisJc2V0X21lbnVfZm9yZShjdXJzZXNfbWVudSwgYXR0cmlidXRlc1tNQUlOX01FTlVfRk9SRV0pOworCXNldF9tZW51X2JhY2soY3Vyc2VzX21lbnUsIGF0dHJpYnV0ZXNbTUFJTl9NRU5VX0JBQ0tdKTsKKwlzZXRfbWVudV9ncmV5KGN1cnNlc19tZW51LCBhdHRyaWJ1dGVzW01BSU5fTUVOVV9HUkVZXSk7CisKKwlzZXRfY29uZmlnX2ZpbGVuYW1lKGNvbmZfZ2V0X2NvbmZpZ25hbWUoKSk7CisJc2V0dXBfd2luZG93cygpOworCisJLyogY2hlY2sgZm9yIEtFWV9GVU5DKDEpICovCisJaWYgKGhhc19rZXkoS0VZX0YoMSkpID09IEZBTFNFKSB7CisJCXNob3dfc2Nyb2xsX3dpbihtYWluX3dpbmRvdywKKwkJCQlfKCJJbnN0cnVjdGlvbnMiKSwKKwkJCQlfKG1lbnVfbm9fZl9pbnN0cnVjdGlvbnMpKTsKKwl9CisKKwljb25mX3NldF9tZXNzYWdlX2NhbGxiYWNrKGNvbmZfbWVzc2FnZV9jYWxsYmFjayk7CisJLyogZG8gdGhlIHdvcmsgKi8KKwl3aGlsZSAoIWdsb2JhbF9leGl0KSB7CisJCWNvbmYoJnJvb3RtZW51KTsKKwkJaWYgKCFnbG9iYWxfZXhpdCAmJiBkb19leGl0KCkgPT0gMCkKKwkJCWJyZWFrOworCX0KKwkvKiBvaywgd2UgYXJlIGRvbmUgKi8KKwl1bnBvc3RfbWVudShjdXJzZXNfbWVudSk7CisJZnJlZV9tZW51KGN1cnNlc19tZW51KTsKKwlkZWx3aW4obWFpbl93aW5kb3cpOworCWNsZWFyKCk7CisJcmVmcmVzaCgpOworCWVuZHdpbigpOworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L2tjb25maWcvbmNvbmYuZ3VpLmMgYi9saWIvY3QtbmctMS4xMy40L2tjb25maWcvbmNvbmYuZ3VpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgxMzdiMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQva2NvbmZpZy9uY29uZi5ndWkuYwpAQCAtMCwwICsxLDYxNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOaXIgVHphY2hhciA8bmlyLnR6YWNoYXJAZ21haWwuY29tPworICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuCisgKgorICogRGVyaXZlZCBmcm9tIG1lbnVjb25maWcuCisgKgorICovCisjaW5jbHVkZSAibmNvbmYuaCIKKworLyogYSBsaXN0IG9mIGFsbCB0aGUgZGlmZmVyZW50IHdpZGdldHMgd2UgdXNlICovCithdHRyaWJ1dGVzX3QgYXR0cmlidXRlc1tBVFRSX01BWCsxXSA9IHswfTsKKworLyogYXZhaWxhYmxlIGNvbG9yczoKKyAgIENPTE9SX0JMQUNLICAgMAorICAgQ09MT1JfUkVEICAgICAxCisgICBDT0xPUl9HUkVFTiAgIDIKKyAgIENPTE9SX1lFTExPVyAgMworICAgQ09MT1JfQkxVRSAgICA0CisgICBDT0xPUl9NQUdFTlRBIDUKKyAgIENPTE9SX0NZQU4gICAgNgorICAgQ09MT1JfV0hJVEUgICA3CisgICAqLworc3RhdGljIHZvaWQgc2V0X25vcm1hbF9jb2xvcnModm9pZCkKK3sKKwlpbml0X3BhaXIoTk9STUFMLCAtMSwgLTEpOworCWluaXRfcGFpcihNQUlOX0hFQURJTkcsIENPTE9SX01BR0VOVEEsIC0xKTsKKworCS8qIEZPUkUgaXMgZm9yIHRoZSBzZWxlY3RlZCBpdGVtICovCisJaW5pdF9wYWlyKE1BSU5fTUVOVV9GT1JFLCAtMSwgLTEpOworCS8qIEJBQ0sgZm9yIGFsbCB0aGUgcmVzdCAqLworCWluaXRfcGFpcihNQUlOX01FTlVfQkFDSywgLTEsIC0xKTsKKwlpbml0X3BhaXIoTUFJTl9NRU5VX0dSRVksIC0xLCAtMSk7CisJaW5pdF9wYWlyKE1BSU5fTUVOVV9IRUFESU5HLCBDT0xPUl9HUkVFTiwgLTEpOworCWluaXRfcGFpcihNQUlOX01FTlVfQk9YLCBDT0xPUl9ZRUxMT1csIC0xKTsKKworCWluaXRfcGFpcihTQ1JPTExXSU5fVEVYVCwgLTEsIC0xKTsKKwlpbml0X3BhaXIoU0NST0xMV0lOX0hFQURJTkcsIENPTE9SX0dSRUVOLCAtMSk7CisJaW5pdF9wYWlyKFNDUk9MTFdJTl9CT1gsIENPTE9SX1lFTExPVywgLTEpOworCisJaW5pdF9wYWlyKERJQUxPR19URVhULCAtMSwgLTEpOworCWluaXRfcGFpcihESUFMT0dfQk9YLCBDT0xPUl9ZRUxMT1csIC0xKTsKKwlpbml0X3BhaXIoRElBTE9HX01FTlVfQkFDSywgQ09MT1JfWUVMTE9XLCAtMSk7CisJaW5pdF9wYWlyKERJQUxPR19NRU5VX0ZPUkUsIENPTE9SX1JFRCwgLTEpOworCisJaW5pdF9wYWlyKElOUFVUX0JPWCwgQ09MT1JfWUVMTE9XLCAtMSk7CisJaW5pdF9wYWlyKElOUFVUX0hFQURJTkcsIENPTE9SX0dSRUVOLCAtMSk7CisJaW5pdF9wYWlyKElOUFVUX1RFWFQsIC0xLCAtMSk7CisJaW5pdF9wYWlyKElOUFVUX0ZJRUxELCAtMSwgLTEpOworCisJaW5pdF9wYWlyKEZVTkNUSU9OX0hJR0hMSUdIVCwgLTEsIC0xKTsKKwlpbml0X3BhaXIoRlVOQ1RJT05fVEVYVCwgQ09MT1JfQkxVRSwgLTEpOworfQorCisvKiBhdmFpbGFibGUgYXR0cmlidXRlczoKKyAgIEFfTk9STUFMICAgICAgICBOb3JtYWwgZGlzcGxheSAobm8gaGlnaGxpZ2h0KQorICAgQV9TVEFORE9VVCAgICAgIEJlc3QgaGlnaGxpZ2h0aW5nIG1vZGUgb2YgdGhlIHRlcm1pbmFsLgorICAgQV9VTkRFUkxJTkUgICAgIFVuZGVybGluaW5nCisgICBBX1JFVkVSU0UgICAgICAgUmV2ZXJzZSB2aWRlbworICAgQV9CTElOSyAgICAgICAgIEJsaW5raW5nCisgICBBX0RJTSAgICAgICAgICAgSGFsZiBicmlnaHQKKyAgIEFfQk9MRCAgICAgICAgICBFeHRyYSBicmlnaHQgb3IgYm9sZAorICAgQV9QUk9URUNUICAgICAgIFByb3RlY3RlZCBtb2RlCisgICBBX0lOVklTICAgICAgICAgSW52aXNpYmxlIG9yIGJsYW5rIG1vZGUKKyAgIEFfQUxUQ0hBUlNFVCAgICBBbHRlcm5hdGUgY2hhcmFjdGVyIHNldAorICAgQV9DSEFSVEVYVCAgICAgIEJpdC1tYXNrIHRvIGV4dHJhY3QgYSBjaGFyYWN0ZXIKKyAgIENPTE9SX1BBSVIobikgICBDb2xvci1wYWlyIG51bWJlciBuCisgICAqLworc3RhdGljIHZvaWQgbm9ybWFsX2NvbG9yX3RoZW1lKHZvaWQpCit7CisJLyogYXV0b21hdGljYWxseSBhZGQgY29sb3IuLi4gKi8KKyNkZWZpbmUgbWthdHRyKG5hbWUsIGF0dHIpIGRvIHsgXAorYXR0cmlidXRlc1tuYW1lXSA9IGF0dHIgfCBDT0xPUl9QQUlSKG5hbWUpOyB9IHdoaWxlICgwKQorCW1rYXR0cihOT1JNQUwsIE5PUk1BTCk7CisJbWthdHRyKE1BSU5fSEVBRElORywgQV9CT0xEIHwgQV9VTkRFUkxJTkUpOworCisJbWthdHRyKE1BSU5fTUVOVV9GT1JFLCBBX1JFVkVSU0UpOworCW1rYXR0cihNQUlOX01FTlVfQkFDSywgQV9OT1JNQUwpOworCW1rYXR0cihNQUlOX01FTlVfR1JFWSwgQV9OT1JNQUwpOworCW1rYXR0cihNQUlOX01FTlVfSEVBRElORywgQV9CT0xEKTsKKwlta2F0dHIoTUFJTl9NRU5VX0JPWCwgQV9OT1JNQUwpOworCisJbWthdHRyKFNDUk9MTFdJTl9URVhULCBBX05PUk1BTCk7CisJbWthdHRyKFNDUk9MTFdJTl9IRUFESU5HLCBBX0JPTEQpOworCW1rYXR0cihTQ1JPTExXSU5fQk9YLCBBX0JPTEQpOworCisJbWthdHRyKERJQUxPR19URVhULCBBX0JPTEQpOworCW1rYXR0cihESUFMT0dfQk9YLCBBX0JPTEQpOworCW1rYXR0cihESUFMT0dfTUVOVV9GT1JFLCBBX1NUQU5ET1VUKTsKKwlta2F0dHIoRElBTE9HX01FTlVfQkFDSywgQV9OT1JNQUwpOworCisJbWthdHRyKElOUFVUX0JPWCwgQV9OT1JNQUwpOworCW1rYXR0cihJTlBVVF9IRUFESU5HLCBBX0JPTEQpOworCW1rYXR0cihJTlBVVF9URVhULCBBX05PUk1BTCk7CisJbWthdHRyKElOUFVUX0ZJRUxELCBBX1VOREVSTElORSk7CisKKwlta2F0dHIoRlVOQ1RJT05fSElHSExJR0hULCBBX0JPTEQpOworCW1rYXR0cihGVU5DVElPTl9URVhULCBBX1JFVkVSU0UpOworfQorCitzdGF0aWMgdm9pZCBub19jb2xvcnNfdGhlbWUodm9pZCkKK3sKKwkvKiBhdXRvbWF0aWNhbGx5IGFkZCBoaWdobGlnaHQsIG5vIGNvbG9yICovCisjZGVmaW5lIG1rYXR0cm4obmFtZSwgYXR0cikgeyBhdHRyaWJ1dGVzW25hbWVdID0gYXR0cjsgfQorCisJbWthdHRybihOT1JNQUwsIE5PUk1BTCk7CisJbWthdHRybihNQUlOX0hFQURJTkcsIEFfQk9MRCB8IEFfVU5ERVJMSU5FKTsKKworCW1rYXR0cm4oTUFJTl9NRU5VX0ZPUkUsIEFfU1RBTkRPVVQpOworCW1rYXR0cm4oTUFJTl9NRU5VX0JBQ0ssIEFfTk9STUFMKTsKKwlta2F0dHJuKE1BSU5fTUVOVV9HUkVZLCBBX05PUk1BTCk7CisJbWthdHRybihNQUlOX01FTlVfSEVBRElORywgQV9CT0xEKTsKKwlta2F0dHJuKE1BSU5fTUVOVV9CT1gsIEFfTk9STUFMKTsKKworCW1rYXR0cm4oU0NST0xMV0lOX1RFWFQsIEFfTk9STUFMKTsKKwlta2F0dHJuKFNDUk9MTFdJTl9IRUFESU5HLCBBX0JPTEQpOworCW1rYXR0cm4oU0NST0xMV0lOX0JPWCwgQV9CT0xEKTsKKworCW1rYXR0cm4oRElBTE9HX1RFWFQsIEFfTk9STUFMKTsKKwlta2F0dHJuKERJQUxPR19CT1gsIEFfQk9MRCk7CisJbWthdHRybihESUFMT0dfTUVOVV9GT1JFLCBBX1NUQU5ET1VUKTsKKwlta2F0dHJuKERJQUxPR19NRU5VX0JBQ0ssIEFfTk9STUFMKTsKKworCW1rYXR0cm4oSU5QVVRfQk9YLCBBX0JPTEQpOworCW1rYXR0cm4oSU5QVVRfSEVBRElORywgQV9CT0xEKTsKKwlta2F0dHJuKElOUFVUX1RFWFQsIEFfTk9STUFMKTsKKwlta2F0dHJuKElOUFVUX0ZJRUxELCBBX1VOREVSTElORSk7CisKKwlta2F0dHJuKEZVTkNUSU9OX0hJR0hMSUdIVCwgQV9CT0xEKTsKKwlta2F0dHJuKEZVTkNUSU9OX1RFWFQsIEFfUkVWRVJTRSk7Cit9CisKK3ZvaWQgc2V0X2NvbG9ycygpCit7CisJc3RhcnRfY29sb3IoKTsKKwl1c2VfZGVmYXVsdF9jb2xvcnMoKTsKKwlzZXRfbm9ybWFsX2NvbG9ycygpOworCWlmIChoYXNfY29sb3JzKCkpIHsKKwkJbm9ybWFsX2NvbG9yX3RoZW1lKCk7CisJfSBlbHNlIHsKKwkJLyogZ2l2ZSBkZWZhdWx0cyAqLworCQlub19jb2xvcnNfdGhlbWUoKTsKKwl9Cit9CisKKworLyogdGhpcyBjaGFuZ2VzIHRoZSB3aW5kb3dzIGF0dHJpYnV0ZXMgISEhICovCit2b2lkIHByaW50X2luX21pZGRsZShXSU5ET1cgKndpbiwKKwkJaW50IHN0YXJ0eSwKKwkJaW50IHN0YXJ0eCwKKwkJaW50IHdpZHRoLAorCQljb25zdCBjaGFyICpzdHJpbmcsCisJCWNodHlwZSBjb2xvcikKK3sgICAgICBpbnQgbGVuZ3RoLCB4LCB5OworCWZsb2F0IHRlbXA7CisKKworCWlmICh3aW4gPT0gTlVMTCkKKwkJd2luID0gc3Rkc2NyOworCWdldHl4KHdpbiwgeSwgeCk7CisJaWYgKHN0YXJ0eCAhPSAwKQorCQl4ID0gc3RhcnR4OworCWlmIChzdGFydHkgIT0gMCkKKwkJeSA9IHN0YXJ0eTsKKwlpZiAod2lkdGggPT0gMCkKKwkJd2lkdGggPSA4MDsKKworCWxlbmd0aCA9IHN0cmxlbihzdHJpbmcpOworCXRlbXAgPSAod2lkdGggLSBsZW5ndGgpIC8gMjsKKwl4ID0gc3RhcnR4ICsgKGludCl0ZW1wOworCSh2b2lkKSB3YXR0cnNldCh3aW4sIGNvbG9yKTsKKwltdndwcmludHcod2luLCB5LCB4LCAiJXMiLCBzdHJpbmcpOworCXJlZnJlc2goKTsKK30KKworaW50IGdldF9saW5lX25vKGNvbnN0IGNoYXIgKnRleHQpCit7CisJaW50IGk7CisJaW50IHRvdGFsID0gMTsKKworCWlmICghdGV4dCkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyB0ZXh0W2ldICE9ICdcMCc7IGkrKykKKwkJaWYgKHRleHRbaV0gPT0gJ1xuJykKKwkJCXRvdGFsKys7CisJcmV0dXJuIHRvdGFsOworfQorCitjb25zdCBjaGFyICpnZXRfbGluZShjb25zdCBjaGFyICp0ZXh0LCBpbnQgbGluZV9ubykKK3sKKwlpbnQgaTsKKwlpbnQgbGluZXMgPSAwOworCisJaWYgKCF0ZXh0KQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IHRleHRbaV0gIT0gJ1wwJyAmJiBsaW5lcyA8IGxpbmVfbm87IGkrKykKKwkJaWYgKHRleHRbaV0gPT0gJ1xuJykKKwkJCWxpbmVzKys7CisJcmV0dXJuIHRleHQraTsKK30KKworaW50IGdldF9saW5lX2xlbmd0aChjb25zdCBjaGFyICpsaW5lKQoreworCWludCByZXMgPSAwOworCXdoaWxlICgqbGluZSAhPSAnXDAnICYmICpsaW5lICE9ICdcbicpIHsKKwkJbGluZSsrOworCQlyZXMrKzsKKwl9CisJcmV0dXJuIHJlczsKK30KKworLyogcHJpbnQgYWxsIGxpbmVzIHRvIHRoZSB3aW5kb3cuICovCit2b2lkIGZpbGxfd2luZG93KFdJTkRPVyAqd2luLCBjb25zdCBjaGFyICp0ZXh0KQoreworCWludCB4LCB5OworCWludCB0b3RhbF9saW5lcyA9IGdldF9saW5lX25vKHRleHQpOworCWludCBpOworCisJZ2V0bWF4eXgod2luLCB5LCB4KTsKKwkvKiBkbyBub3QgZ28gb3ZlciBlbmQgb2YgbGluZSAqLworCXRvdGFsX2xpbmVzID0gbWluKHRvdGFsX2xpbmVzLCB5KTsKKwlmb3IgKGkgPSAwOyBpIDwgdG90YWxfbGluZXM7IGkrKykgeworCQljaGFyIHRtcFt4KzEwXTsKKwkJY29uc3QgY2hhciAqbGluZSA9IGdldF9saW5lKHRleHQsIGkpOworCQlpbnQgbGVuID0gZ2V0X2xpbmVfbGVuZ3RoKGxpbmUpOworCQlzdHJuY3B5KHRtcCwgbGluZSwgbWluKGxlbiwgeCkpOworCQl0bXBbbGVuXSA9ICdcMCc7CisJCW12d3ByaW50dyh3aW4sIGksIDAsICIlcyIsIHRtcCk7CisJfQorfQorCisvKiBnZXQgdGhlIG1lc3NhZ2UsIGFuZCBidXR0b25zLgorICogZWFjaCBidXR0b24gbXVzdCBiZSBhIGNoYXIqCisgKiByZXR1cm4gdGhlIHNlbGVjdGVkIGJ1dHRvbgorICoKKyAqIHRoaXMgZGlhbG9nIGlzIHVzZWQgZm9yIDIgZGlmZmVyZW50IHRoaW5nczoKKyAqIDEpIHNob3cgYSB0ZXh0IGJveCwgbm8gYnV0dG9ucy4KKyAqIDIpIHNob3cgYSBkaWFsb2csIHdpdGggaG9yaXpvbnRhbCBidXR0b25zCisgKi8KK2ludCBidG5fZGlhbG9nKFdJTkRPVyAqbWFpbl93aW5kb3csIGNvbnN0IGNoYXIgKm1zZywgaW50IGJ0bl9udW0sIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWNoYXIgKmJ0bjsKKwlpbnQgYnRuc193aWR0aCA9IDA7CisJaW50IG1zZ19saW5lcyA9IDA7CisJaW50IG1zZ193aWR0aCA9IDA7CisJaW50IHRvdGFsX3dpZHRoOworCWludCB3aW5fcm93cyA9IDA7CisJV0lORE9XICp3aW47CisJV0lORE9XICptc2dfd2luOworCVdJTkRPVyAqbWVudV93aW47CisJTUVOVSAqbWVudTsKKwlJVEVNICpidG5zW2J0bl9udW0rMV07CisJaW50IGksIHgsIHk7CisJaW50IHJlcyA9IC0xOworCisKKwl2YV9zdGFydChhcCwgYnRuX251bSk7CisJZm9yIChpID0gMDsgaSA8IGJ0bl9udW07IGkrKykgeworCQlidG4gPSB2YV9hcmcoYXAsIGNoYXIgKik7CisJCWJ0bnNbaV0gPSBuZXdfaXRlbShidG4sICIiKTsKKwkJYnRuc193aWR0aCArPSBzdHJsZW4oYnRuKSsxOworCX0KKwl2YV9lbmQoYXApOworCWJ0bnNbYnRuX251bV0gPSBOVUxMOworCisJLyogZmluZCB0aGUgd2lkZXN0IGxpbmUgb2YgbXNnOiAqLworCW1zZ19saW5lcyA9IGdldF9saW5lX25vKG1zZyk7CisJZm9yIChpID0gMDsgaSA8IG1zZ19saW5lczsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmxpbmUgPSBnZXRfbGluZShtc2csIGkpOworCQlpbnQgbGVuID0gZ2V0X2xpbmVfbGVuZ3RoKGxpbmUpOworCQlpZiAobXNnX3dpZHRoIDwgbGVuKQorCQkJbXNnX3dpZHRoID0gbGVuOworCX0KKworCXRvdGFsX3dpZHRoID0gbWF4KG1zZ193aWR0aCwgYnRuc193aWR0aCk7CisJLyogcGxhY2UgZGlhbG9nIGluIG1pZGRsZSBvZiBzY3JlZW4gKi8KKwl5ID0gKExJTkVTLShtc2dfbGluZXMrNCkpLzI7CisJeCA9IChDT0xTLSh0b3RhbF93aWR0aCs0KSkvMjsKKworCisJLyogY3JlYXRlIHRoZSB3aW5kb3dzICovCisJaWYgKGJ0bl9udW0gPiAwKQorCQl3aW5fcm93cyA9IG1zZ19saW5lcys0OworCWVsc2UKKwkJd2luX3Jvd3MgPSBtc2dfbGluZXMrMjsKKworCXdpbiA9IG5ld3dpbih3aW5fcm93cywgdG90YWxfd2lkdGgrNCwgeSwgeCk7CisJa2V5cGFkKHdpbiwgVFJVRSk7CisJbWVudV93aW4gPSBkZXJ3aW4od2luLCAxLCBidG5zX3dpZHRoLCB3aW5fcm93cy0yLAorCQkJMSsodG90YWxfd2lkdGgrMi1idG5zX3dpZHRoKS8yKTsKKwltZW51ID0gbmV3X21lbnUoYnRucyk7CisJbXNnX3dpbiA9IGRlcndpbih3aW4sIHdpbl9yb3dzLTIsIG1zZ193aWR0aCwgMSwKKwkJCTErKHRvdGFsX3dpZHRoKzItbXNnX3dpZHRoKS8yKTsKKworCXNldF9tZW51X2ZvcmUobWVudSwgYXR0cmlidXRlc1tESUFMT0dfTUVOVV9GT1JFXSk7CisJc2V0X21lbnVfYmFjayhtZW51LCBhdHRyaWJ1dGVzW0RJQUxPR19NRU5VX0JBQ0tdKTsKKworCSh2b2lkKSB3YXR0cnNldCh3aW4sIGF0dHJpYnV0ZXNbRElBTE9HX0JPWF0pOworCWJveCh3aW4sIDAsIDApOworCisJLyogcHJpbnQgbWVzc2FnZSAqLworCSh2b2lkKSB3YXR0cnNldChtc2dfd2luLCBhdHRyaWJ1dGVzW0RJQUxPR19URVhUXSk7CisJZmlsbF93aW5kb3cobXNnX3dpbiwgbXNnKTsKKworCXNldF9tZW51X3dpbihtZW51LCB3aW4pOworCXNldF9tZW51X3N1YihtZW51LCBtZW51X3dpbik7CisJc2V0X21lbnVfZm9ybWF0KG1lbnUsIDEsIGJ0bl9udW0pOworCW1lbnVfb3B0c19vZmYobWVudSwgT19TSE9XREVTQyk7CisJbWVudV9vcHRzX29mZihtZW51LCBPX1NIT1dNQVRDSCk7CisJbWVudV9vcHRzX29uKG1lbnUsIE9fT05FVkFMVUUpOworCW1lbnVfb3B0c19vbihtZW51LCBPX05PTkNZQ0xJQyk7CisJc2V0X21lbnVfbWFyayhtZW51LCAiIik7CisJcG9zdF9tZW51KG1lbnUpOworCisKKwl0b3VjaHdpbih3aW4pOworCXJlZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOworCXdoaWxlICgocmVzID0gd2dldGNoKHdpbikpKSB7CisJCXN3aXRjaCAocmVzKSB7CisJCWNhc2UgS0VZX0xFRlQ6CisJCQltZW51X2RyaXZlcihtZW51LCBSRVFfTEVGVF9JVEVNKTsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9SSUdIVDoKKwkJCW1lbnVfZHJpdmVyKG1lbnUsIFJFUV9SSUdIVF9JVEVNKTsKKwkJCWJyZWFrOworCQljYXNlIDEwOiAvKiBFTlRFUiAqLworCQljYXNlIDI3OiAvKiBFU0NBUEUgKi8KKwkJY2FzZSAnICc6CisJCWNhc2UgS0VZX0YoRl9CQUNLKToKKwkJY2FzZSBLRVlfRihGX0VYSVQpOgorCQkJYnJlYWs7CisJCX0KKwkJdG91Y2h3aW4od2luKTsKKwkJcmVmcmVzaF9hbGxfd2luZG93cyhtYWluX3dpbmRvdyk7CisKKwkJaWYgKHJlcyA9PSAxMCB8fCByZXMgPT0gJyAnKSB7CisJCQlyZXMgPSBpdGVtX2luZGV4KGN1cnJlbnRfaXRlbShtZW51KSk7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChyZXMgPT0gMjcgfHwgcmVzID09IEtFWV9GKEZfQkFDSykgfHwKKwkJCQlyZXMgPT0gS0VZX0YoRl9FWElUKSkgeworCQkJcmVzID0gS0VZX0VYSVQ7CisJCQlicmVhazsKKwkJfQorCX0KKworCXVucG9zdF9tZW51KG1lbnUpOworCWZyZWVfbWVudShtZW51KTsKKwlmb3IgKGkgPSAwOyBpIDwgYnRuX251bTsgaSsrKQorCQlmcmVlX2l0ZW0oYnRuc1tpXSk7CisKKwlkZWx3aW4od2luKTsKKwlyZXR1cm4gcmVzOworfQorCitpbnQgZGlhbG9nX2lucHV0Ym94KFdJTkRPVyAqbWFpbl93aW5kb3csCisJCWNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsCisJCWNvbnN0IGNoYXIgKmluaXQsIGNoYXIgKnJlc3VsdCwgaW50IHJlc3VsdF9sZW4pCit7CisJaW50IHByb21wdF9saW5lcyA9IDA7CisJaW50IHByb21wdF93aWR0aCA9IDA7CisJV0lORE9XICp3aW47CisJV0lORE9XICpwcm9tcHRfd2luOworCVdJTkRPVyAqZm9ybV93aW47CisJUEFORUwgKnBhbmVsOworCWludCBpLCB4LCB5OworCWludCByZXMgPSAtMTsKKwlpbnQgY3Vyc29yX3Bvc2l0aW9uID0gc3RybGVuKGluaXQpOworCisKKwkvKiBmaW5kIHRoZSB3aWRlc3QgbGluZSBvZiBtc2c6ICovCisJcHJvbXB0X2xpbmVzID0gZ2V0X2xpbmVfbm8ocHJvbXB0KTsKKwlmb3IgKGkgPSAwOyBpIDwgcHJvbXB0X2xpbmVzOyBpKyspIHsKKwkJY29uc3QgY2hhciAqbGluZSA9IGdldF9saW5lKHByb21wdCwgaSk7CisJCWludCBsZW4gPSBnZXRfbGluZV9sZW5ndGgobGluZSk7CisJCXByb21wdF93aWR0aCA9IG1heChwcm9tcHRfd2lkdGgsIGxlbik7CisJfQorCisJaWYgKHRpdGxlKQorCQlwcm9tcHRfd2lkdGggPSBtYXgocHJvbXB0X3dpZHRoLCBzdHJsZW4odGl0bGUpKTsKKworCS8qIHBsYWNlIGRpYWxvZyBpbiBtaWRkbGUgb2Ygc2NyZWVuICovCisJeSA9IChMSU5FUy0ocHJvbXB0X2xpbmVzKzQpKS8yOworCXggPSAoQ09MUy0ocHJvbXB0X3dpZHRoKzQpKS8yOworCisJc3RybmNweShyZXN1bHQsIGluaXQsIHJlc3VsdF9sZW4pOworCisJLyogY3JlYXRlIHRoZSB3aW5kb3dzICovCisJd2luID0gbmV3d2luKHByb21wdF9saW5lcys2LCBwcm9tcHRfd2lkdGgrNywgeSwgeCk7CisJcHJvbXB0X3dpbiA9IGRlcndpbih3aW4sIHByb21wdF9saW5lcysxLCBwcm9tcHRfd2lkdGgsIDIsIDIpOworCWZvcm1fd2luID0gZGVyd2luKHdpbiwgMSwgcHJvbXB0X3dpZHRoLCBwcm9tcHRfbGluZXMrMywgMik7CisJa2V5cGFkKGZvcm1fd2luLCBUUlVFKTsKKworCSh2b2lkKSB3YXR0cnNldChmb3JtX3dpbiwgYXR0cmlidXRlc1tJTlBVVF9GSUVMRF0pOworCisJKHZvaWQpIHdhdHRyc2V0KHdpbiwgYXR0cmlidXRlc1tJTlBVVF9CT1hdKTsKKwlib3god2luLCAwLCAwKTsKKwkodm9pZCkgd2F0dHJzZXQod2luLCBhdHRyaWJ1dGVzW0lOUFVUX0hFQURJTkddKTsKKwlpZiAodGl0bGUpCisJCW12d3ByaW50dyh3aW4sIDAsIDMsICIlcyIsIHRpdGxlKTsKKworCS8qIHByaW50IG1lc3NhZ2UgKi8KKwkodm9pZCkgd2F0dHJzZXQocHJvbXB0X3dpbiwgYXR0cmlidXRlc1tJTlBVVF9URVhUXSk7CisJZmlsbF93aW5kb3cocHJvbXB0X3dpbiwgcHJvbXB0KTsKKworCW12d3ByaW50dyhmb3JtX3dpbiwgMCwgMCwgIiUqcyIsIHByb21wdF93aWR0aCwgIiAiKTsKKwltdndwcmludHcoZm9ybV93aW4sIDAsIDAsICIlcyIsIHJlc3VsdCk7CisKKwkvKiBjcmVhdGUgcGFuZWxzICovCisJcGFuZWwgPSBuZXdfcGFuZWwod2luKTsKKworCS8qIHNob3cgdGhlIGN1cnNvciAqLworCWN1cnNfc2V0KDEpOworCisJdG91Y2h3aW4od2luKTsKKwlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsKKwl3aGlsZSAoKHJlcyA9IHdnZXRjaChmb3JtX3dpbikpKSB7CisJCWludCBsZW4gPSBzdHJsZW4ocmVzdWx0KTsKKwkJc3dpdGNoIChyZXMpIHsKKwkJY2FzZSAxMDogLyogRU5URVIgKi8KKwkJY2FzZSAyNzogLyogRVNDQVBFICovCisJCWNhc2UgS0VZX0YoRl9IRUxQKToKKwkJY2FzZSBLRVlfRihGX0VYSVQpOgorCQljYXNlIEtFWV9GKEZfQkFDSyk6CisJCQlicmVhazsKKwkJY2FzZSAxMjc6CisJCWNhc2UgS0VZX0JBQ0tTUEFDRToKKwkJCWlmIChjdXJzb3JfcG9zaXRpb24gPiAwKSB7CisJCQkJbWVtbW92ZSgmcmVzdWx0W2N1cnNvcl9wb3NpdGlvbi0xXSwKKwkJCQkJCSZyZXN1bHRbY3Vyc29yX3Bvc2l0aW9uXSwKKwkJCQkJCWxlbi1jdXJzb3JfcG9zaXRpb24rMSk7CisJCQkJY3Vyc29yX3Bvc2l0aW9uLS07CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBLRVlfREM6CisJCQlpZiAoY3Vyc29yX3Bvc2l0aW9uID49IDAgJiYgY3Vyc29yX3Bvc2l0aW9uIDwgbGVuKSB7CisJCQkJbWVtbW92ZSgmcmVzdWx0W2N1cnNvcl9wb3NpdGlvbl0sCisJCQkJCQkmcmVzdWx0W2N1cnNvcl9wb3NpdGlvbisxXSwKKwkJCQkJCWxlbi1jdXJzb3JfcG9zaXRpb24rMSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBLRVlfVVA6CisJCWNhc2UgS0VZX1JJR0hUOgorCQkJaWYgKGN1cnNvcl9wb3NpdGlvbiA8IGxlbiAmJgorCQkJICAgIGN1cnNvcl9wb3NpdGlvbiA8IG1pbihyZXN1bHRfbGVuLCBwcm9tcHRfd2lkdGgpKQorCQkJCWN1cnNvcl9wb3NpdGlvbisrOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX0RPV046CisJCWNhc2UgS0VZX0xFRlQ6CisJCQlpZiAoY3Vyc29yX3Bvc2l0aW9uID4gMCkKKwkJCQljdXJzb3JfcG9zaXRpb24tLTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaWYgKChpc2dyYXBoKHJlcykgfHwgaXNzcGFjZShyZXMpKSAmJgorCQkJCQlsZW4tMiA8IHJlc3VsdF9sZW4pIHsKKwkJCQkvKiBpbnNlcnQgdGhlIGNoYXIgYXQgdGhlIHByb3BlciBwb3NpdGlvbiAqLworCQkJCW1lbW1vdmUoJnJlc3VsdFtjdXJzb3JfcG9zaXRpb24rMV0sCisJCQkJCQkmcmVzdWx0W2N1cnNvcl9wb3NpdGlvbl0sCisJCQkJCQlsZW4rMSk7CisJCQkJcmVzdWx0W2N1cnNvcl9wb3NpdGlvbl0gPSByZXM7CisJCQkJY3Vyc29yX3Bvc2l0aW9uKys7CisJCQl9IGVsc2UgeworCQkJCW12cHJpbnR3KDAsIDAsICJ1bmtub3cga2V5OiAlZFxuIiwgcmVzKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCXdtb3ZlKGZvcm1fd2luLCAwLCAwKTsKKwkJd2NscnRvZW9sKGZvcm1fd2luKTsKKwkJbXZ3cHJpbnR3KGZvcm1fd2luLCAwLCAwLCAiJSpzIiwgcHJvbXB0X3dpZHRoLCAiICIpOworCQltdndwcmludHcoZm9ybV93aW4sIDAsIDAsICIlcyIsIHJlc3VsdCk7CisJCXdtb3ZlKGZvcm1fd2luLCAwLCBjdXJzb3JfcG9zaXRpb24pOworCQl0b3VjaHdpbih3aW4pOworCQlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsKKworCQlpZiAocmVzID09IDEwKSB7CisJCQlyZXMgPSAwOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAocmVzID09IDI3IHx8IHJlcyA9PSBLRVlfRihGX0JBQ0spIHx8CisJCQkJcmVzID09IEtFWV9GKEZfRVhJVCkpIHsKKwkJCXJlcyA9IEtFWV9FWElUOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAocmVzID09IEtFWV9GKEZfSEVMUCkpIHsKKwkJCXJlcyA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIGhpZGUgdGhlIGN1cnNvciAqLworCWN1cnNfc2V0KDApOworCWRlbF9wYW5lbChwYW5lbCk7CisJZGVsd2luKHByb21wdF93aW4pOworCWRlbHdpbihmb3JtX3dpbik7CisJZGVsd2luKHdpbik7CisJcmV0dXJuIHJlczsKK30KKworLyogcmVmcmVzaCBhbGwgd2luZG93cyBpbiB0aGUgY29ycmVjdCBvcmRlciAqLwordm9pZCByZWZyZXNoX2FsbF93aW5kb3dzKFdJTkRPVyAqbWFpbl93aW5kb3cpCit7CisJdXBkYXRlX3BhbmVscygpOworCXRvdWNod2luKG1haW5fd2luZG93KTsKKwlyZWZyZXNoKCk7Cit9CisKKy8qIGxheW1hbidzIHNjcm9sbGFibGUgd2luZG93Li4uICovCit2b2lkIHNob3dfc2Nyb2xsX3dpbihXSU5ET1cgKm1haW5fd2luZG93LAorCQljb25zdCBjaGFyICp0aXRsZSwKKwkJY29uc3QgY2hhciAqdGV4dCkKK3sKKwlpbnQgcmVzOworCWludCB0b3RhbF9saW5lcyA9IGdldF9saW5lX25vKHRleHQpOworCWludCB4LCB5OworCWludCBzdGFydF94ID0gMCwgc3RhcnRfeSA9IDA7CisJaW50IHRleHRfbGluZXMgPSAwLCB0ZXh0X2NvbHMgPSAwOworCWludCB0b3RhbF9jb2xzID0gMDsKKwlpbnQgd2luX2NvbHMgPSAwOworCWludCB3aW5fbGluZXMgPSAwOworCWludCBpID0gMDsKKwlXSU5ET1cgKndpbjsKKwlXSU5ET1cgKnBhZDsKKwlQQU5FTCAqcGFuZWw7CisKKwkvKiBmaW5kIHRoZSB3aWRlc3QgbGluZSBvZiBtc2c6ICovCisJdG90YWxfbGluZXMgPSBnZXRfbGluZV9ubyh0ZXh0KTsKKwlmb3IgKGkgPSAwOyBpIDwgdG90YWxfbGluZXM7IGkrKykgeworCQljb25zdCBjaGFyICpsaW5lID0gZ2V0X2xpbmUodGV4dCwgaSk7CisJCWludCBsZW4gPSBnZXRfbGluZV9sZW5ndGgobGluZSk7CisJCXRvdGFsX2NvbHMgPSBtYXgodG90YWxfY29scywgbGVuKzIpOworCX0KKworCS8qIGNyZWF0ZSB0aGUgcGFkICovCisJcGFkID0gbmV3cGFkKHRvdGFsX2xpbmVzKzEwLCB0b3RhbF9jb2xzKzEwKTsKKwkodm9pZCkgd2F0dHJzZXQocGFkLCBhdHRyaWJ1dGVzW1NDUk9MTFdJTl9URVhUXSk7CisJZmlsbF93aW5kb3cocGFkLCB0ZXh0KTsKKworCXdpbl9saW5lcyA9IG1pbih0b3RhbF9saW5lcys0LCBMSU5FUy0yKTsKKwl3aW5fY29scyA9IG1pbih0b3RhbF9jb2xzKzIsIENPTFMtMik7CisJdGV4dF9saW5lcyA9IG1heCh3aW5fbGluZXMtNCwgMCk7CisJdGV4dF9jb2xzID0gbWF4KHdpbl9jb2xzLTIsIDApOworCisJLyogcGxhY2Ugd2luZG93IGluIG1pZGRsZSBvZiBzY3JlZW4gKi8KKwl5ID0gKExJTkVTLXdpbl9saW5lcykvMjsKKwl4ID0gKENPTFMtd2luX2NvbHMpLzI7CisKKwl3aW4gPSBuZXd3aW4od2luX2xpbmVzLCB3aW5fY29scywgeSwgeCk7CisJa2V5cGFkKHdpbiwgVFJVRSk7CisJLyogc2hvdyB0aGUgaGVscCBpbiB0aGUgaGVscCB3aW5kb3csIGFuZCBzaG93IHRoZSBoZWxwIHBhbmVsICovCisJKHZvaWQpIHdhdHRyc2V0KHdpbiwgYXR0cmlidXRlc1tTQ1JPTExXSU5fQk9YXSk7CisJYm94KHdpbiwgMCwgMCk7CisJKHZvaWQpIHdhdHRyc2V0KHdpbiwgYXR0cmlidXRlc1tTQ1JPTExXSU5fSEVBRElOR10pOworCW12d3ByaW50dyh3aW4sIDAsIDMsICIgJXMgIiwgdGl0bGUpOworCXBhbmVsID0gbmV3X3BhbmVsKHdpbik7CisKKwkvKiBoYW5kbGUgc2Nyb2xsaW5nICovCisJZG8geworCisJCWNvcHl3aW4ocGFkLCB3aW4sIHN0YXJ0X3ksIHN0YXJ0X3gsIDIsIDIsIHRleHRfbGluZXMsCisJCQkJdGV4dF9jb2xzLCAwKTsKKwkJcHJpbnRfaW5fbWlkZGxlKHdpbiwKKwkJCQl0ZXh0X2xpbmVzKzIsCisJCQkJMCwKKwkJCQl0ZXh0X2NvbHMsCisJCQkJIjxPSz4iLAorCQkJCWF0dHJpYnV0ZXNbRElBTE9HX01FTlVfRk9SRV0pOworCQl3cmVmcmVzaCh3aW4pOworCisJCXJlcyA9IHdnZXRjaCh3aW4pOworCQlzd2l0Y2ggKHJlcykgeworCQljYXNlIEtFWV9OUEFHRToKKwkJY2FzZSAnICc6CisJCQlzdGFydF95ICs9IHRleHRfbGluZXMtMjsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9QUEFHRToKKwkJCXN0YXJ0X3kgLT0gdGV4dF9saW5lcysyOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX0hPTUU6CisJCQlzdGFydF95ID0gMDsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9FTkQ6CisJCQlzdGFydF95ID0gdG90YWxfbGluZXMtdGV4dF9saW5lczsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9ET1dOOgorCQljYXNlICdqJzoKKwkJCXN0YXJ0X3krKzsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9VUDoKKwkJY2FzZSAnayc6CisJCQlzdGFydF95LS07CisJCQlicmVhazsKKwkJY2FzZSBLRVlfTEVGVDoKKwkJY2FzZSAnaCc6CisJCQlzdGFydF94LS07CisJCQlicmVhazsKKwkJY2FzZSBLRVlfUklHSFQ6CisJCWNhc2UgJ2wnOgorCQkJc3RhcnRfeCsrOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHJlcyA9PSAxMCB8fCByZXMgPT0gMjcgfHwgcmVzID09ICdxJworCQkgICAgfHwgcmVzID09IEtFWV9GKEZfQkFDSykgfHwgcmVzID09IEtFWV9GKEZfRVhJVCkpIHsKKwkJCWJyZWFrOworCQl9CisJCWlmIChzdGFydF95IDwgMCkKKwkJCXN0YXJ0X3kgPSAwOworCQlpZiAoc3RhcnRfeSA+PSB0b3RhbF9saW5lcy10ZXh0X2xpbmVzKQorCQkJc3RhcnRfeSA9IHRvdGFsX2xpbmVzLXRleHRfbGluZXM7CisJCWlmIChzdGFydF94IDwgMCkKKwkJCXN0YXJ0X3ggPSAwOworCQlpZiAoc3RhcnRfeCA+PSB0b3RhbF9jb2xzLXRleHRfY29scykKKwkJCXN0YXJ0X3ggPSB0b3RhbF9jb2xzLXRleHRfY29sczsKKwl9IHdoaWxlIChyZXMpOworCisJZGVsX3BhbmVsKHBhbmVsKTsKKwlkZWx3aW4od2luKTsKKwlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsKK30KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQva2NvbmZpZy9uY29uZi5oIGIvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL25jb25mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThmYmRhOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQva2NvbmZpZy9uY29uZi5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTmlyIFR6YWNoYXIgPG5pci50emFjaGFyQGdtYWlsLmNvbT8KKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi4wLgorICoKKyAqIERlcml2ZWQgZnJvbSBtZW51Y29uZmlnLgorICoKKyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8Y3Vyc2VzLmg+CisjaW5jbHVkZSA8bWVudS5oPgorI2luY2x1ZGUgPHBhbmVsLmg+CisjaW5jbHVkZSA8Zm9ybS5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworI2luY2x1ZGUgIm5jdXJzZXMuaCIKKworI2RlZmluZSBtYXgoYSwgYikgKHtcCisJCXR5cGVvZihhKSBfYSA9IGE7XAorCQl0eXBlb2YoYikgX2IgPSBiO1wKKwkJX2EgPiBfYiA/IF9hIDogX2I7IH0pCisKKyNkZWZpbmUgbWluKGEsIGIpICh7XAorCQl0eXBlb2YoYSkgX2EgPSBhO1wKKwkJdHlwZW9mKGIpIF9iID0gYjtcCisJCV9hIDwgX2IgPyBfYSA6IF9iOyB9KQorCit0eXBlZGVmIGVudW0geworCU5PUk1BTCA9IDEsCisJTUFJTl9IRUFESU5HLAorCU1BSU5fTUVOVV9CT1gsCisJTUFJTl9NRU5VX0ZPUkUsCisJTUFJTl9NRU5VX0JBQ0ssCisJTUFJTl9NRU5VX0dSRVksCisJTUFJTl9NRU5VX0hFQURJTkcsCisJU0NST0xMV0lOX1RFWFQsCisJU0NST0xMV0lOX0hFQURJTkcsCisJU0NST0xMV0lOX0JPWCwKKwlESUFMT0dfVEVYVCwKKwlESUFMT0dfTUVOVV9GT1JFLAorCURJQUxPR19NRU5VX0JBQ0ssCisJRElBTE9HX0JPWCwKKwlJTlBVVF9CT1gsCisJSU5QVVRfSEVBRElORywKKwlJTlBVVF9URVhULAorCUlOUFVUX0ZJRUxELAorCUZVTkNUSU9OX1RFWFQsCisJRlVOQ1RJT05fSElHSExJR0hULAorCUFUVFJfTUFYCit9IGF0dHJpYnV0ZXNfdDsKK2V4dGVybiBhdHRyaWJ1dGVzX3QgYXR0cmlidXRlc1tdOworCit0eXBlZGVmIGVudW0geworCUZfSEVMUCA9IDEsCisJRl9TWU1CT0wgPSAyLAorCUZfSU5TVFMgPSAzLAorCUZfQ09ORiA9IDQsCisJRl9CQUNLID0gNSwKKwlGX1NBVkUgPSA2LAorCUZfTE9BRCA9IDcsCisJRl9TRUFSQ0ggPSA4LAorCUZfRVhJVCA9IDksCit9IGZ1bmN0aW9uX2tleTsKKwordm9pZCBzZXRfY29sb3JzKHZvaWQpOworCisvKiB0aGlzIGNoYW5nZXMgdGhlIHdpbmRvd3MgYXR0cmlidXRlcyAhISEgKi8KK3ZvaWQgcHJpbnRfaW5fbWlkZGxlKFdJTkRPVyAqd2luLAorCQlpbnQgc3RhcnR5LAorCQlpbnQgc3RhcnR4LAorCQlpbnQgd2lkdGgsCisJCWNvbnN0IGNoYXIgKnN0cmluZywKKwkJY2h0eXBlIGNvbG9yKTsKK2ludCBnZXRfbGluZV9sZW5ndGgoY29uc3QgY2hhciAqbGluZSk7CitpbnQgZ2V0X2xpbmVfbm8oY29uc3QgY2hhciAqdGV4dCk7Citjb25zdCBjaGFyICpnZXRfbGluZShjb25zdCBjaGFyICp0ZXh0LCBpbnQgbGluZV9ubyk7Cit2b2lkIGZpbGxfd2luZG93KFdJTkRPVyAqd2luLCBjb25zdCBjaGFyICp0ZXh0KTsKK2ludCBidG5fZGlhbG9nKFdJTkRPVyAqbWFpbl93aW5kb3csIGNvbnN0IGNoYXIgKm1zZywgaW50IGJ0bl9udW0sIC4uLik7CitpbnQgZGlhbG9nX2lucHV0Ym94KFdJTkRPVyAqbWFpbl93aW5kb3csCisJCWNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsCisJCWNvbnN0IGNoYXIgKmluaXQsIGNoYXIgKnJlc3VsdCwgaW50IHJlc3VsdF9sZW4pOwordm9pZCByZWZyZXNoX2FsbF93aW5kb3dzKFdJTkRPVyAqbWFpbl93aW5kb3cpOwordm9pZCBzaG93X3Njcm9sbF93aW4oV0lORE9XICptYWluX3dpbmRvdywKKwkJY29uc3QgY2hhciAqdGl0bGUsCisJCWNvbnN0IGNoYXIgKnRleHQpOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL3N5bWJvbC5jIGIvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL3N5bWJvbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MWUxYjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2tjb25maWcvc3ltYm9sLmMKQEAgLTAsMCArMSwxMjU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuCisgKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8cmVnZXguaD4KKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorCisjZGVmaW5lIExLQ19ESVJFQ1RfTElOSworI2luY2x1ZGUgImxrYy5oIgorCitzdHJ1Y3Qgc3ltYm9sIHN5bWJvbF95ZXMgPSB7CisJLm5hbWUgPSAieSIsCisJLmN1cnIgPSB7ICJ5IiwgeWVzIH0sCisJLmZsYWdzID0gU1lNQk9MX0NPTlNUfFNZTUJPTF9WQUxJRCwKK30sIHN5bWJvbF9tb2QgPSB7CisJLm5hbWUgPSAibSIsCisJLmN1cnIgPSB7ICJtIiwgbW9kIH0sCisJLmZsYWdzID0gU1lNQk9MX0NPTlNUfFNZTUJPTF9WQUxJRCwKK30sIHN5bWJvbF9ubyA9IHsKKwkubmFtZSA9ICJuIiwKKwkuY3VyciA9IHsgIm4iLCBubyB9LAorCS5mbGFncyA9IFNZTUJPTF9DT05TVHxTWU1CT0xfVkFMSUQsCit9LCBzeW1ib2xfZW1wdHkgPSB7CisJLm5hbWUgPSAiIiwKKwkuY3VyciA9IHsgIiIsIG5vIH0sCisJLmZsYWdzID0gU1lNQk9MX1ZBTElELAorfTsKKworc3RydWN0IHN5bWJvbCAqc3ltX2RlZmNvbmZpZ19saXN0Oworc3RydWN0IHN5bWJvbCAqbW9kdWxlc19zeW07Cit0cmlzdGF0ZSBtb2R1bGVzX3ZhbDsKKworc3RydWN0IGV4cHIgKnN5bV9lbnZfbGlzdDsKKworc3RhdGljIHZvaWQgc3ltX2FkZF9kZWZhdWx0KHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAqZGVmKQoreworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcCA9IHByb3BfYWxsb2MoUF9ERUZBVUxULCBzeW0pOworCisJcHJvcC0+ZXhwciA9IGV4cHJfYWxsb2Nfc3ltYm9sKHN5bV9sb29rdXAoZGVmLCBTWU1CT0xfQ09OU1QpKTsKK30KKwordm9pZCBzeW1faW5pdCh2b2lkKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3QgdXRzbmFtZSB1dHM7CisJc3RhdGljIGJvb2wgaW5pdGVkID0gZmFsc2U7CisKKwlpZiAoaW5pdGVkKQorCQlyZXR1cm47CisJaW5pdGVkID0gdHJ1ZTsKKworCXVuYW1lKCZ1dHMpOworCisJc3ltID0gc3ltX2xvb2t1cCgiVU5BTUVfUkVMRUFTRSIsIDApOworCXN5bS0+dHlwZSA9IFNfU1RSSU5HOworCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0FVVE87CisJc3ltX2FkZF9kZWZhdWx0KHN5bSwgdXRzLnJlbGVhc2UpOworfQorCitlbnVtIHN5bWJvbF90eXBlIHN5bV9nZXRfdHlwZShzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJZW51bSBzeW1ib2xfdHlwZSB0eXBlID0gc3ltLT50eXBlOworCisJaWYgKHR5cGUgPT0gU19UUklTVEFURSkgeworCQlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pICYmIHN5bS0+dmlzaWJsZSA9PSB5ZXMpCisJCQl0eXBlID0gU19CT09MRUFOOworCQllbHNlIGlmIChtb2R1bGVzX3ZhbCA9PSBubykKKwkJCXR5cGUgPSBTX0JPT0xFQU47CisJfQorCXJldHVybiB0eXBlOworfQorCitjb25zdCBjaGFyICpzeW1fdHlwZV9uYW1lKGVudW0gc3ltYm9sX3R5cGUgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFNfQk9PTEVBTjoKKwkJcmV0dXJuICJib29sZWFuIjsKKwljYXNlIFNfVFJJU1RBVEU6CisJCXJldHVybiAidHJpc3RhdGUiOworCWNhc2UgU19JTlQ6CisJCXJldHVybiAiaW50ZWdlciI7CisJY2FzZSBTX0hFWDoKKwkJcmV0dXJuICJoZXgiOworCWNhc2UgU19TVFJJTkc6CisJCXJldHVybiAic3RyaW5nIjsKKwljYXNlIFNfVU5LTk9XTjoKKwkJcmV0dXJuICJ1bmtub3duIjsKKwljYXNlIFNfT1RIRVI6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gIj8/PyI7Cit9CisKK3N0cnVjdCBwcm9wZXJ0eSAqc3ltX2dldF9jaG9pY2VfcHJvcChzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCisJZm9yX2FsbF9jaG9pY2VzKHN5bSwgcHJvcCkKKwkJcmV0dXJuIHByb3A7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBwcm9wZXJ0eSAqc3ltX2dldF9lbnZfcHJvcChzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCisJZm9yX2FsbF9wcm9wZXJ0aWVzKHN5bSwgcHJvcCwgUF9FTlYpCisJCXJldHVybiBwcm9wOworCXJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgcHJvcGVydHkgKnN5bV9nZXRfZGVmYXVsdF9wcm9wKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisKKwlmb3JfYWxsX2RlZmF1bHRzKHN5bSwgcHJvcCkgeworCQlwcm9wLT52aXNpYmxlLnRyaSA9IGV4cHJfY2FsY192YWx1ZShwcm9wLT52aXNpYmxlLmV4cHIpOworCQlpZiAocHJvcC0+dmlzaWJsZS50cmkgIT0gbm8pCisJCQlyZXR1cm4gcHJvcDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHJvcGVydHkgKnN5bV9nZXRfcmFuZ2VfcHJvcChzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCisJZm9yX2FsbF9wcm9wZXJ0aWVzKHN5bSwgcHJvcCwgUF9SQU5HRSkgeworCQlwcm9wLT52aXNpYmxlLnRyaSA9IGV4cHJfY2FsY192YWx1ZShwcm9wLT52aXNpYmxlLmV4cHIpOworCQlpZiAocHJvcC0+dmlzaWJsZS50cmkgIT0gbm8pCisJCQlyZXR1cm4gcHJvcDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgc3ltX2dldF9yYW5nZV92YWwoc3RydWN0IHN5bWJvbCAqc3ltLCBpbnQgYmFzZSkKK3sKKwlzeW1fY2FsY192YWx1ZShzeW0pOworCXN3aXRjaCAoc3ltLT50eXBlKSB7CisJY2FzZSBTX0lOVDoKKwkJYmFzZSA9IDEwOworCQlicmVhazsKKwljYXNlIFNfSEVYOgorCQliYXNlID0gMTY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc3RydG9sKHN5bS0+Y3Vyci52YWwsIE5VTEwsIGJhc2UpOworfQorCitzdGF0aWMgdm9pZCBzeW1fdmFsaWRhdGVfcmFuZ2Uoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlpbnQgYmFzZSwgdmFsLCB2YWwyOworCWNoYXIgc3RyWzY0XTsKKworCXN3aXRjaCAoc3ltLT50eXBlKSB7CisJY2FzZSBTX0lOVDoKKwkJYmFzZSA9IDEwOworCQlicmVhazsKKwljYXNlIFNfSEVYOgorCQliYXNlID0gMTY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisJcHJvcCA9IHN5bV9nZXRfcmFuZ2VfcHJvcChzeW0pOworCWlmICghcHJvcCkKKwkJcmV0dXJuOworCXZhbCA9IHN0cnRvbChzeW0tPmN1cnIudmFsLCBOVUxMLCBiYXNlKTsKKwl2YWwyID0gc3ltX2dldF9yYW5nZV92YWwocHJvcC0+ZXhwci0+bGVmdC5zeW0sIGJhc2UpOworCWlmICh2YWwgPj0gdmFsMikgeworCQl2YWwyID0gc3ltX2dldF9yYW5nZV92YWwocHJvcC0+ZXhwci0+cmlnaHQuc3ltLCBiYXNlKTsKKwkJaWYgKHZhbCA8PSB2YWwyKQorCQkJcmV0dXJuOworCX0KKwlpZiAoc3ltLT50eXBlID09IFNfSU5UKQorCQlzcHJpbnRmKHN0ciwgIiVkIiwgdmFsMik7CisJZWxzZQorCQlzcHJpbnRmKHN0ciwgIjB4JXgiLCB2YWwyKTsKKwlzeW0tPmN1cnIudmFsID0gc3RyZHVwKHN0cik7Cit9CisKK3N0YXRpYyB2b2lkIHN5bV9jYWxjX3Zpc2liaWxpdHkoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwl0cmlzdGF0ZSB0cmk7CisKKwkvKiBhbnkgcHJvbXB0IHZpc2libGU/ICovCisJdHJpID0gbm87CisJZm9yX2FsbF9wcm9tcHRzKHN5bSwgcHJvcCkgeworCQlwcm9wLT52aXNpYmxlLnRyaSA9IGV4cHJfY2FsY192YWx1ZShwcm9wLT52aXNpYmxlLmV4cHIpOworCQl0cmkgPSBFWFBSX09SKHRyaSwgcHJvcC0+dmlzaWJsZS50cmkpOworCX0KKwlpZiAodHJpID09IG1vZCAmJiAoc3ltLT50eXBlICE9IFNfVFJJU1RBVEUgfHwgbW9kdWxlc192YWwgPT0gbm8pKQorCQl0cmkgPSB5ZXM7CisJaWYgKHN5bS0+dmlzaWJsZSAhPSB0cmkpIHsKKwkJc3ltLT52aXNpYmxlID0gdHJpOworCQlzeW1fc2V0X2NoYW5nZWQoc3ltKTsKKwl9CisJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkKKwkJcmV0dXJuOworCS8qIGRlZmF1bHRpbmcgdG8gInllcyIgaWYgbm8gZXhwbGljaXQgImRlcGVuZHMgb24iIGFyZSBnaXZlbiAqLworCXRyaSA9IHllczsKKwlpZiAoc3ltLT5kaXJfZGVwLmV4cHIpCisJCXRyaSA9IGV4cHJfY2FsY192YWx1ZShzeW0tPmRpcl9kZXAuZXhwcik7CisJaWYgKHRyaSA9PSBtb2QpCisJCXRyaSA9IHllczsKKwlpZiAoc3ltLT5kaXJfZGVwLnRyaSAhPSB0cmkpIHsKKwkJc3ltLT5kaXJfZGVwLnRyaSA9IHRyaTsKKwkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7CisJfQorCXRyaSA9IG5vOworCWlmIChzeW0tPnJldl9kZXAuZXhwcikKKwkJdHJpID0gZXhwcl9jYWxjX3ZhbHVlKHN5bS0+cmV2X2RlcC5leHByKTsKKwlpZiAodHJpID09IG1vZCAmJiBzeW1fZ2V0X3R5cGUoc3ltKSA9PSBTX0JPT0xFQU4pCisJCXRyaSA9IHllczsKKwlpZiAoc3ltLT5yZXZfZGVwLnRyaSAhPSB0cmkpIHsKKwkJc3ltLT5yZXZfZGVwLnRyaSA9IHRyaTsKKwkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7CisJfQorfQorCisvKgorICogRmluZCB0aGUgZGVmYXVsdCBzeW1ib2wgZm9yIGEgY2hvaWNlLgorICogRmlyc3QgdHJ5IHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGNob2ljZSBzeW1ib2wKKyAqIE5leHQgbG9jYXRlIHRoZSBmaXJzdCB2aXNpYmxlIGNob2ljZSB2YWx1ZQorICogUmV0dXJuIE5VTEwgaWYgbm9uZSB3YXMgZm91bmQKKyAqLworc3RydWN0IHN5bWJvbCAqc3ltX2Nob2ljZV9kZWZhdWx0KHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpkZWZfc3ltOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3QgZXhwciAqZTsKKworCS8qIGFueSBvZiB0aGUgZGVmYXVsdHMgdmlzaWJsZT8gKi8KKwlmb3JfYWxsX2RlZmF1bHRzKHN5bSwgcHJvcCkgeworCQlwcm9wLT52aXNpYmxlLnRyaSA9IGV4cHJfY2FsY192YWx1ZShwcm9wLT52aXNpYmxlLmV4cHIpOworCQlpZiAocHJvcC0+dmlzaWJsZS50cmkgPT0gbm8pCisJCQljb250aW51ZTsKKwkJZGVmX3N5bSA9IHByb3BfZ2V0X3N5bWJvbChwcm9wKTsKKwkJaWYgKGRlZl9zeW0tPnZpc2libGUgIT0gbm8pCisJCQlyZXR1cm4gZGVmX3N5bTsKKwl9CisKKwkvKiBqdXN0IGdldCB0aGUgZmlyc3QgdmlzaWJsZSB2YWx1ZSAqLworCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSk7CisJZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBlLCBkZWZfc3ltKQorCQlpZiAoZGVmX3N5bS0+dmlzaWJsZSAhPSBubykKKwkJCXJldHVybiBkZWZfc3ltOworCisJLyogZmFpbGVkIHRvIGxvY2F0ZSBhbnkgZGVmYXVsdHMgKi8KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBzeW1ib2wgKnN5bV9jYWxjX2Nob2ljZShzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0IHN5bWJvbCAqZGVmX3N5bTsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IGV4cHIgKmU7CisKKwkvKiBmaXJzdCBjYWxjdWxhdGUgYWxsIGNob2ljZSB2YWx1ZXMnIHZpc2liaWxpdGllcyAqLworCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSk7CisJZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBlLCBkZWZfc3ltKQorCQlzeW1fY2FsY192aXNpYmlsaXR5KGRlZl9zeW0pOworCisJLyogaXMgdGhlIHVzZXIgY2hvaWNlIHZpc2libGU/ICovCisJZGVmX3N5bSA9IHN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbDsKKwlpZiAoZGVmX3N5bSAmJiBkZWZfc3ltLT52aXNpYmxlICE9IG5vKQorCQlyZXR1cm4gZGVmX3N5bTsKKworCWRlZl9zeW0gPSBzeW1fY2hvaWNlX2RlZmF1bHQoc3ltKTsKKworCWlmIChkZWZfc3ltID09IE5VTEwpCisJCS8qIG5vIGNob2ljZT8gcmVzZXQgdHJpc3RhdGUgdmFsdWUgKi8KKwkJc3ltLT5jdXJyLnRyaSA9IG5vOworCisJcmV0dXJuIGRlZl9zeW07Cit9CisKK3ZvaWQgc3ltX2NhbGNfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBzeW1ib2xfdmFsdWUgbmV3dmFsLCBvbGR2YWw7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBleHByICplOworCisJaWYgKCFzeW0pCisJCXJldHVybjsKKworCWlmIChzeW0tPmZsYWdzICYgU1lNQk9MX1ZBTElEKQorCQlyZXR1cm47CisJc3ltLT5mbGFncyB8PSBTWU1CT0xfVkFMSUQ7CisKKwlvbGR2YWwgPSBzeW0tPmN1cnI7CisKKwlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCWNhc2UgU19JTlQ6CisJY2FzZSBTX0hFWDoKKwljYXNlIFNfU1RSSU5HOgorCQluZXd2YWwgPSBzeW1ib2xfZW1wdHkuY3VycjsKKwkJYnJlYWs7CisJY2FzZSBTX0JPT0xFQU46CisJY2FzZSBTX1RSSVNUQVRFOgorCQluZXd2YWwgPSBzeW1ib2xfbm8uY3VycjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3ltLT5jdXJyLnZhbCA9IHN5bS0+bmFtZTsKKwkJc3ltLT5jdXJyLnRyaSA9IG5vOworCQlyZXR1cm47CisJfQorCWlmICghc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pKQorCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfV1JJVEU7CisKKwlzeW1fY2FsY192aXNpYmlsaXR5KHN5bSk7CisKKwkvKiBzZXQgZGVmYXVsdCBpZiByZWN1cnNpdmVseSBjYWxsZWQgKi8KKwlzeW0tPmN1cnIgPSBuZXd2YWw7CisKKwlzd2l0Y2ggKHN5bV9nZXRfdHlwZShzeW0pKSB7CisJY2FzZSBTX0JPT0xFQU46CisJY2FzZSBTX1RSSVNUQVRFOgorCQlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pICYmIHN5bS0+dmlzaWJsZSA9PSB5ZXMpIHsKKwkJCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSk7CisJCQluZXd2YWwudHJpID0gKHByb3BfZ2V0X3N5bWJvbChwcm9wKS0+Y3Vyci52YWwgPT0gc3ltKSA/IHllcyA6IG5vOworCQl9IGVsc2UgeworCQkJaWYgKHN5bS0+dmlzaWJsZSAhPSBubykgeworCQkJCS8qIGlmIHRoZSBzeW1ib2wgaXMgdmlzaWJsZSB1c2UgdGhlIHVzZXIgdmFsdWUKKwkJCQkgKiBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB0cnkgdGhlIGRlZmF1bHQgdmFsdWUKKwkJCQkgKi8KKwkJCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9XUklURTsKKwkJCQlpZiAoc3ltX2hhc192YWx1ZShzeW0pKSB7CisJCQkJCW5ld3ZhbC50cmkgPSBFWFBSX0FORChzeW0tPmRlZltTX0RFRl9VU0VSXS50cmksCisJCQkJCQkJICAgICAgc3ltLT52aXNpYmxlKTsKKwkJCQkJZ290byBjYWxjX25ld3ZhbDsKKwkJCQl9CisJCQl9CisJCQlpZiAoc3ltLT5yZXZfZGVwLnRyaSAhPSBubykKKwkJCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9XUklURTsKKwkJCWlmICghc3ltX2lzX2Nob2ljZShzeW0pKSB7CisJCQkJcHJvcCA9IHN5bV9nZXRfZGVmYXVsdF9wcm9wKHN5bSk7CisJCQkJaWYgKHByb3ApIHsKKwkJCQkJc3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJVEU7CisJCQkJCW5ld3ZhbC50cmkgPSBFWFBSX0FORChleHByX2NhbGNfdmFsdWUocHJvcC0+ZXhwciksCisJCQkJCQkJICAgICAgcHJvcC0+dmlzaWJsZS50cmkpOworCQkJCX0KKwkJCX0KKwkJY2FsY19uZXd2YWw6CisJCQlpZiAoc3ltLT5kaXJfZGVwLnRyaSA9PSBubyAmJiBzeW0tPnJldl9kZXAudHJpICE9IG5vKSB7CisJCQkJc3RydWN0IGV4cHIgKmU7CisJCQkJZSA9IGV4cHJfc2ltcGxpZnlfdW5tZXRfZGVwKHN5bS0+cmV2X2RlcC5leHByLAorCQkJCSAgICBzeW0tPmRpcl9kZXAuZXhwcik7CisJCQkJZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiAoIik7CisJCQkJZXhwcl9mcHJpbnQoZSwgc3RkZXJyKTsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIikgc2VsZWN0cyAlcyB3aGljaCBoYXMgdW5tZXQgZGlyZWN0IGRlcGVuZGVuY2llcyAoIiwKKwkJCQkJc3ltLT5uYW1lKTsKKwkJCQlleHByX2ZwcmludChzeW0tPmRpcl9kZXAuZXhwciwgc3RkZXJyKTsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIilcbiIpOworCQkJCWV4cHJfZnJlZShlKTsKKwkJCX0KKwkJCW5ld3ZhbC50cmkgPSBFWFBSX09SKG5ld3ZhbC50cmksIHN5bS0+cmV2X2RlcC50cmkpOworCQl9CisJCWlmIChuZXd2YWwudHJpID09IG1vZCAmJiBzeW1fZ2V0X3R5cGUoc3ltKSA9PSBTX0JPT0xFQU4pCisJCQluZXd2YWwudHJpID0geWVzOworCQlicmVhazsKKwljYXNlIFNfU1RSSU5HOgorCWNhc2UgU19IRVg6CisJY2FzZSBTX0lOVDoKKwkJaWYgKHN5bS0+dmlzaWJsZSAhPSBubykgeworCQkJc3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJVEU7CisJCQlpZiAoc3ltX2hhc192YWx1ZShzeW0pKSB7CisJCQkJbmV3dmFsLnZhbCA9IHN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlwcm9wID0gc3ltX2dldF9kZWZhdWx0X3Byb3Aoc3ltKTsKKwkJaWYgKHByb3ApIHsKKwkJCXN0cnVjdCBzeW1ib2wgKmRzID0gcHJvcF9nZXRfc3ltYm9sKHByb3ApOworCQkJaWYgKGRzKSB7CisJCQkJc3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJVEU7CisJCQkJc3ltX2NhbGNfdmFsdWUoZHMpOworCQkJCW5ld3ZhbC52YWwgPSBkcy0+Y3Vyci52YWw7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJOworCX0KKworCXN5bS0+Y3VyciA9IG5ld3ZhbDsKKwlpZiAoc3ltX2lzX2Nob2ljZShzeW0pICYmIG5ld3ZhbC50cmkgPT0geWVzKQorCQlzeW0tPmN1cnIudmFsID0gc3ltX2NhbGNfY2hvaWNlKHN5bSk7CisJc3ltX3ZhbGlkYXRlX3JhbmdlKHN5bSk7CisKKwlpZiAobWVtY21wKCZvbGR2YWwsICZzeW0tPmN1cnIsIHNpemVvZihvbGR2YWwpKSkgeworCQlzeW1fc2V0X2NoYW5nZWQoc3ltKTsKKwkJaWYgKG1vZHVsZXNfc3ltID09IHN5bSkgeworCQkJc3ltX3NldF9hbGxfY2hhbmdlZCgpOworCQkJbW9kdWxlc192YWwgPSBtb2R1bGVzX3N5bS0+Y3Vyci50cmk7CisJCX0KKwl9CisKKwlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKSB7CisJCXN0cnVjdCBzeW1ib2wgKmNob2ljZV9zeW07CisKKwkJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKTsKKwkJZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBlLCBjaG9pY2Vfc3ltKSB7CisJCQlpZiAoKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV1JJVEUpICYmCisJCQkgICAgY2hvaWNlX3N5bS0+dmlzaWJsZSAhPSBubykKKwkJCQljaG9pY2Vfc3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJVEU7CisJCQlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9DSEFOR0VEKQorCQkJCXN5bV9zZXRfY2hhbmdlZChjaG9pY2Vfc3ltKTsKKwkJfQorCX0KKworCWlmIChzeW0tPmZsYWdzICYgU1lNQk9MX0FVVE8pCisJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9XUklURTsKK30KKwordm9pZCBzeW1fY2xlYXJfYWxsX3ZhbGlkKHZvaWQpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCWludCBpOworCisJZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkKKwkJc3ltLT5mbGFncyAmPSB+U1lNQk9MX1ZBTElEOworCXN5bV9hZGRfY2hhbmdlX2NvdW50KDEpOworCWlmIChtb2R1bGVzX3N5bSkKKwkJc3ltX2NhbGNfdmFsdWUobW9kdWxlc19zeW0pOworfQorCit2b2lkIHN5bV9zZXRfY2hhbmdlZChzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCisJc3ltLT5mbGFncyB8PSBTWU1CT0xfQ0hBTkdFRDsKKwlmb3IgKHByb3AgPSBzeW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7CisJCWlmIChwcm9wLT5tZW51KQorCQkJcHJvcC0+bWVudS0+ZmxhZ3MgfD0gTUVOVV9DSEFOR0VEOworCX0KK30KKwordm9pZCBzeW1fc2V0X2FsbF9jaGFuZ2VkKHZvaWQpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCWludCBpOworCisJZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkKKwkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7Cit9CisKK2Jvb2wgc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzdHJ1Y3Qgc3ltYm9sICpzeW0sIHRyaXN0YXRlIHZhbCkKK3sKKwlpbnQgdHlwZSA9IHN5bV9nZXRfdHlwZShzeW0pOworCisJaWYgKHN5bS0+dmlzaWJsZSA9PSBubykKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHR5cGUgIT0gU19CT09MRUFOICYmIHR5cGUgIT0gU19UUklTVEFURSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHR5cGUgPT0gU19CT09MRUFOICYmIHZhbCA9PSBtb2QpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoc3ltLT52aXNpYmxlIDw9IHN5bS0+cmV2X2RlcC50cmkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pICYmIHN5bS0+dmlzaWJsZSA9PSB5ZXMpCisJCXJldHVybiB2YWwgPT0geWVzOworCXJldHVybiB2YWwgPj0gc3ltLT5yZXZfZGVwLnRyaSAmJiB2YWwgPD0gc3ltLT52aXNpYmxlOworfQorCitib29sIHN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltLCB0cmlzdGF0ZSB2YWwpCit7CisJdHJpc3RhdGUgb2xkdmFsID0gc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pOworCisJaWYgKG9sZHZhbCAhPSB2YWwgJiYgIXN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCB2YWwpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX0RFRl9VU0VSKSkgeworCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsKKwkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7CisJfQorCS8qCisJICogc2V0dGluZyBhIGNob2ljZSB2YWx1ZSBhbHNvIHJlc2V0cyB0aGUgbmV3IGZsYWcgb2YgdGhlIGNob2ljZQorCSAqIHN5bWJvbCBhbmQgYWxsIG90aGVyIGNob2ljZSB2YWx1ZXMuCisJICovCisJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSAmJiB2YWwgPT0geWVzKSB7CisJCXN0cnVjdCBzeW1ib2wgKmNzID0gcHJvcF9nZXRfc3ltYm9sKHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKSk7CisJCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwkJc3RydWN0IGV4cHIgKmU7CisKKwkJY3MtPmRlZltTX0RFRl9VU0VSXS52YWwgPSBzeW07CisJCWNzLT5mbGFncyB8PSBTWU1CT0xfREVGX1VTRVI7CisJCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKGNzKTsKKwkJZm9yIChlID0gcHJvcC0+ZXhwcjsgZTsgZSA9IGUtPmxlZnQuZXhwcikgeworCQkJaWYgKGUtPnJpZ2h0LnN5bS0+dmlzaWJsZSAhPSBubykKKwkJCQllLT5yaWdodC5zeW0tPmZsYWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsKKwkJfQorCX0KKworCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IHZhbDsKKwlpZiAob2xkdmFsICE9IHZhbCkKKwkJc3ltX2NsZWFyX2FsbF92YWxpZCgpOworCisJcmV0dXJuIHRydWU7Cit9CisKK3RyaXN0YXRlIHN5bV90b2dnbGVfdHJpc3RhdGVfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXRyaXN0YXRlIG9sZHZhbCwgbmV3dmFsOworCisJb2xkdmFsID0gbmV3dmFsID0gc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pOworCWRvIHsKKwkJc3dpdGNoIChuZXd2YWwpIHsKKwkJY2FzZSBubzoKKwkJCW5ld3ZhbCA9IG1vZDsKKwkJCWJyZWFrOworCQljYXNlIG1vZDoKKwkJCW5ld3ZhbCA9IHllczsKKwkJCWJyZWFrOworCQljYXNlIHllczoKKwkJCW5ld3ZhbCA9IG5vOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBuZXd2YWwpKQorCQkJYnJlYWs7CisJfSB3aGlsZSAob2xkdmFsICE9IG5ld3ZhbCk7CisJcmV0dXJuIG5ld3ZhbDsKK30KKworYm9vbCBzeW1fc3RyaW5nX3ZhbGlkKHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAqc3RyKQoreworCXNpZ25lZCBjaGFyIGNoOworCisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNfU1RSSU5HOgorCQlyZXR1cm4gdHJ1ZTsKKwljYXNlIFNfSU5UOgorCQljaCA9ICpzdHIrKzsKKwkJaWYgKGNoID09ICctJykKKwkJCWNoID0gKnN0cisrOworCQlpZiAoIWlzZGlnaXQoY2gpKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAoY2ggPT0gJzAnICYmICpzdHIgIT0gMCkKKwkJCXJldHVybiBmYWxzZTsKKwkJd2hpbGUgKChjaCA9ICpzdHIrKykpIHsKKwkJCWlmICghaXNkaWdpdChjaCkpCisJCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCXJldHVybiB0cnVlOworCWNhc2UgU19IRVg6CisJCWlmIChzdHJbMF0gPT0gJzAnICYmIChzdHJbMV0gPT0gJ3gnIHx8IHN0clsxXSA9PSAnWCcpKQorCQkJc3RyICs9IDI7CisJCWNoID0gKnN0cisrOworCQlkbyB7CisJCQlpZiAoIWlzeGRpZ2l0KGNoKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCX0gd2hpbGUgKChjaCA9ICpzdHIrKykpOworCQlyZXR1cm4gdHJ1ZTsKKwljYXNlIFNfQk9PTEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6CisJCXN3aXRjaCAoc3RyWzBdKSB7CisJCWNhc2UgJ3knOiBjYXNlICdZJzoKKwkJY2FzZSAnbSc6IGNhc2UgJ00nOgorCQljYXNlICduJzogY2FzZSAnTic6CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworYm9vbCBzeW1fc3RyaW5nX3dpdGhpbl9yYW5nZShzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKnN0cikKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJaW50IHZhbDsKKworCXN3aXRjaCAoc3ltLT50eXBlKSB7CisJY2FzZSBTX1NUUklORzoKKwkJcmV0dXJuIHN5bV9zdHJpbmdfdmFsaWQoc3ltLCBzdHIpOworCWNhc2UgU19JTlQ6CisJCWlmICghc3ltX3N0cmluZ192YWxpZChzeW0sIHN0cikpCisJCQlyZXR1cm4gZmFsc2U7CisJCXByb3AgPSBzeW1fZ2V0X3JhbmdlX3Byb3Aoc3ltKTsKKwkJaWYgKCFwcm9wKQorCQkJcmV0dXJuIHRydWU7CisJCXZhbCA9IHN0cnRvbChzdHIsIE5VTEwsIDEwKTsKKwkJcmV0dXJuIHZhbCA+PSBzeW1fZ2V0X3JhbmdlX3ZhbChwcm9wLT5leHByLT5sZWZ0LnN5bSwgMTApICYmCisJCSAgICAgICB2YWwgPD0gc3ltX2dldF9yYW5nZV92YWwocHJvcC0+ZXhwci0+cmlnaHQuc3ltLCAxMCk7CisJY2FzZSBTX0hFWDoKKwkJaWYgKCFzeW1fc3RyaW5nX3ZhbGlkKHN5bSwgc3RyKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJcHJvcCA9IHN5bV9nZXRfcmFuZ2VfcHJvcChzeW0pOworCQlpZiAoIXByb3ApCisJCQlyZXR1cm4gdHJ1ZTsKKwkJdmFsID0gc3RydG9sKHN0ciwgTlVMTCwgMTYpOworCQlyZXR1cm4gdmFsID49IHN5bV9nZXRfcmFuZ2VfdmFsKHByb3AtPmV4cHItPmxlZnQuc3ltLCAxNikgJiYKKwkJICAgICAgIHZhbCA8PSBzeW1fZ2V0X3JhbmdlX3ZhbChwcm9wLT5leHByLT5yaWdodC5zeW0sIDE2KTsKKwljYXNlIFNfQk9PTEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6CisJCXN3aXRjaCAoc3RyWzBdKSB7CisJCWNhc2UgJ3knOiBjYXNlICdZJzoKKwkJCXJldHVybiBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5bSwgeWVzKTsKKwkJY2FzZSAnbSc6IGNhc2UgJ00nOgorCQkJcmV0dXJuIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCBtb2QpOworCQljYXNlICduJzogY2FzZSAnTic6CisJCQlyZXR1cm4gc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIG5vKTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworYm9vbCBzeW1fc2V0X3N0cmluZ192YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKm5ld3ZhbCkKK3sKKwljb25zdCBjaGFyICpvbGR2YWw7CisJY2hhciAqdmFsOworCWludCBzaXplOworCisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNfQk9PTEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6CisJCXN3aXRjaCAobmV3dmFsWzBdKSB7CisJCWNhc2UgJ3knOiBjYXNlICdZJzoKKwkJCXJldHVybiBzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwgeWVzKTsKKwkJY2FzZSAnbSc6IGNhc2UgJ00nOgorCQkJcmV0dXJuIHN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBtb2QpOworCQljYXNlICduJzogY2FzZSAnTic6CisJCQlyZXR1cm4gc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIG5vKTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJZGVmYXVsdDoKKwkJOworCX0KKworCWlmICghc3ltX3N0cmluZ193aXRoaW5fcmFuZ2Uoc3ltLCBuZXd2YWwpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX0RFRl9VU0VSKSkgeworCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsKKwkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7CisJfQorCisJb2xkdmFsID0gc3ltLT5kZWZbU19ERUZfVVNFUl0udmFsOworCXNpemUgPSBzdHJsZW4obmV3dmFsKSArIDE7CisJaWYgKHN5bS0+dHlwZSA9PSBTX0hFWCAmJiAobmV3dmFsWzBdICE9ICcwJyB8fCAobmV3dmFsWzFdICE9ICd4JyAmJiBuZXd2YWxbMV0gIT0gJ1gnKSkpIHsKKwkJc2l6ZSArPSAyOworCQlzeW0tPmRlZltTX0RFRl9VU0VSXS52YWwgPSB2YWwgPSBtYWxsb2Moc2l6ZSk7CisJCSp2YWwrKyA9ICcwJzsKKwkJKnZhbCsrID0gJ3gnOworCX0gZWxzZSBpZiAoIW9sZHZhbCB8fCBzdHJjbXAob2xkdmFsLCBuZXd2YWwpKQorCQlzeW0tPmRlZltTX0RFRl9VU0VSXS52YWwgPSB2YWwgPSBtYWxsb2Moc2l6ZSk7CisJZWxzZQorCQlyZXR1cm4gdHJ1ZTsKKworCXN0cmNweSh2YWwsIG5ld3ZhbCk7CisJZnJlZSgodm9pZCAqKW9sZHZhbCk7CisJc3ltX2NsZWFyX2FsbF92YWxpZCgpOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBkZWZhdWx0IHZhbHVlIGFzc29jaWF0ZWQgdG8gYSBzeW1ib2wuCisgKiBGb3IgdHJpc3RhdGUgc3ltYm9sIGhhbmRsZSB0aGUgbW9kdWxlcz1uIGNhc2UKKyAqIGluIHdoaWNoIGNhc2UgIm0iIGJlY29tZXMgInkiLgorICogSWYgdGhlIHN5bWJvbCBkb2VzIG5vdCBoYXZlIGFueSBkZWZhdWx0IHRoZW4gZmFsbGJhY2sKKyAqIHRvIHRoZSBmaXhlZCBkZWZhdWx0IHZhbHVlcy4KKyAqLworY29uc3QgY2hhciAqc3ltX2dldF9zdHJpbmdfZGVmYXVsdChzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBzeW1ib2wgKmRzOworCWNvbnN0IGNoYXIgKnN0cjsKKwl0cmlzdGF0ZSB2YWw7CisKKwlzeW1fY2FsY192aXNpYmlsaXR5KHN5bSk7CisJc3ltX2NhbGNfdmFsdWUobW9kdWxlc19zeW0pOworCXZhbCA9IHN5bWJvbF9uby5jdXJyLnRyaTsKKwlzdHIgPSBzeW1ib2xfZW1wdHkuY3Vyci52YWw7CisKKwkvKiBJZiBzeW1ib2wgaGFzIGEgZGVmYXVsdCB2YWx1ZSBsb29rIGl0IHVwICovCisJcHJvcCA9IHN5bV9nZXRfZGVmYXVsdF9wcm9wKHN5bSk7CisJaWYgKHByb3AgIT0gTlVMTCkgeworCQlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCQljYXNlIFNfQk9PTEVBTjoKKwkJY2FzZSBTX1RSSVNUQVRFOgorCQkJLyogVGhlIHZpc2liaWxpdHkgbWF5IGxpbWl0IHRoZSB2YWx1ZSBmcm9tIHllcyA9PiBtb2QgKi8KKwkJCXZhbCA9IEVYUFJfQU5EKGV4cHJfY2FsY192YWx1ZShwcm9wLT5leHByKSwgcHJvcC0+dmlzaWJsZS50cmkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKgorCQkJICogVGhlIGZvbGxvd2luZyBmYWlscyB0byBoYW5kbGUgdGhlIHNpdHVhdGlvbgorCQkJICogd2hlcmUgYSBkZWZhdWx0IHZhbHVlIGlzIGZ1cnRoZXIgbGltaXRlZCBieQorCQkJICogdGhlIHZhbGlkIHJhbmdlLgorCQkJICovCisJCQlkcyA9IHByb3BfZ2V0X3N5bWJvbChwcm9wKTsKKwkJCWlmIChkcyAhPSBOVUxMKSB7CisJCQkJc3ltX2NhbGNfdmFsdWUoZHMpOworCQkJCXN0ciA9IChjb25zdCBjaGFyICopZHMtPmN1cnIudmFsOworCQkJfQorCQl9CisJfQorCisJLyogSGFuZGxlIHNlbGVjdCBzdGF0ZW1lbnRzICovCisJdmFsID0gRVhQUl9PUih2YWwsIHN5bS0+cmV2X2RlcC50cmkpOworCisJLyogdHJhbnNwb3NlIG1vZCB0byB5ZXMgaWYgbW9kdWxlcyBhcmUgbm90IGVuYWJsZWQgKi8KKwlpZiAodmFsID09IG1vZCkKKwkJaWYgKCFzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgbW9kdWxlc19zeW0tPmN1cnIudHJpID09IG5vKQorCQkJdmFsID0geWVzOworCisJLyogdHJhbnNwb3NlIG1vZCB0byB5ZXMgaWYgdHlwZSBpcyBib29sICovCisJaWYgKHN5bS0+dHlwZSA9PSBTX0JPT0xFQU4gJiYgdmFsID09IG1vZCkKKwkJdmFsID0geWVzOworCisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNfQk9PTEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6CisJCXN3aXRjaCAodmFsKSB7CisJCWNhc2Ugbm86IHJldHVybiAibiI7CisJCWNhc2UgbW9kOiByZXR1cm4gIm0iOworCQljYXNlIHllczogcmV0dXJuICJ5IjsKKwkJfQorCWNhc2UgU19JTlQ6CisJY2FzZSBTX0hFWDoKKwkJcmV0dXJuIHN0cjsKKwljYXNlIFNfU1RSSU5HOgorCQlyZXR1cm4gc3RyOworCWNhc2UgU19PVEhFUjoKKwljYXNlIFNfVU5LTk9XTjoKKwkJYnJlYWs7CisJfQorCXJldHVybiAiIjsKK30KKworY29uc3QgY2hhciAqc3ltX2dldF9zdHJpbmdfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXRyaXN0YXRlIHZhbDsKKworCXN3aXRjaCAoc3ltLT50eXBlKSB7CisJY2FzZSBTX0JPT0xFQU46CisJY2FzZSBTX1RSSVNUQVRFOgorCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7CisJCXN3aXRjaCAodmFsKSB7CisJCWNhc2Ugbm86CisJCQlyZXR1cm4gIm4iOworCQljYXNlIG1vZDoKKwkJCXJldHVybiAibSI7CisJCWNhc2UgeWVzOgorCQkJcmV0dXJuICJ5IjsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQk7CisJfQorCXJldHVybiAoY29uc3QgY2hhciAqKXN5bS0+Y3Vyci52YWw7Cit9CisKK2Jvb2wgc3ltX2lzX2NoYW5nYWJsZShzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJcmV0dXJuIHN5bS0+dmlzaWJsZSA+IHN5bS0+cmV2X2RlcC50cmk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBzdHJoYXNoKGNvbnN0IGNoYXIgKnMpCit7CisJLyogZm52MzIgaGFzaCAqLworCXVuc2lnbmVkIGhhc2ggPSAyMTY2MTM2MjYxVTsKKwlmb3IgKDsgKnM7IHMrKykKKwkJaGFzaCA9IChoYXNoIF4gKnMpICogMHgwMTAwMDE5MzsKKwlyZXR1cm4gaGFzaDsKK30KKworc3RydWN0IHN5bWJvbCAqc3ltX2xvb2t1cChjb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltYm9sOworCWNoYXIgKm5ld19uYW1lOworCWludCBoYXNoOworCisJaWYgKG5hbWUpIHsKKwkJaWYgKG5hbWVbMF0gJiYgIW5hbWVbMV0pIHsKKwkJCXN3aXRjaCAobmFtZVswXSkgeworCQkJY2FzZSAneSc6IHJldHVybiAmc3ltYm9sX3llczsKKwkJCWNhc2UgJ20nOiByZXR1cm4gJnN5bWJvbF9tb2Q7CisJCQljYXNlICduJzogcmV0dXJuICZzeW1ib2xfbm87CisJCQl9CisJCX0KKwkJaGFzaCA9IHN0cmhhc2gobmFtZSkgJSBTWU1CT0xfSEFTSFNJWkU7CisKKwkJZm9yIChzeW1ib2wgPSBzeW1ib2xfaGFzaFtoYXNoXTsgc3ltYm9sOyBzeW1ib2wgPSBzeW1ib2wtPm5leHQpIHsKKwkJCWlmIChzeW1ib2wtPm5hbWUgJiYKKwkJCSAgICAhc3RyY21wKHN5bWJvbC0+bmFtZSwgbmFtZSkgJiYKKwkJCSAgICAoZmxhZ3MgPyBzeW1ib2wtPmZsYWdzICYgZmxhZ3MKKwkJCQkgICA6ICEoc3ltYm9sLT5mbGFncyAmIChTWU1CT0xfQ09OU1R8U1lNQk9MX0NIT0lDRSkpKSkKKwkJCQlyZXR1cm4gc3ltYm9sOworCQl9CisJCW5ld19uYW1lID0gc3RyZHVwKG5hbWUpOworCX0gZWxzZSB7CisJCW5ld19uYW1lID0gTlVMTDsKKwkJaGFzaCA9IDA7CisJfQorCisJc3ltYm9sID0gbWFsbG9jKHNpemVvZigqc3ltYm9sKSk7CisJbWVtc2V0KHN5bWJvbCwgMCwgc2l6ZW9mKCpzeW1ib2wpKTsKKwlzeW1ib2wtPm5hbWUgPSBuZXdfbmFtZTsKKwlzeW1ib2wtPnR5cGUgPSBTX1VOS05PV047CisJc3ltYm9sLT5mbGFncyB8PSBmbGFnczsKKworCXN5bWJvbC0+bmV4dCA9IHN5bWJvbF9oYXNoW2hhc2hdOworCXN5bWJvbF9oYXNoW2hhc2hdID0gc3ltYm9sOworCisJcmV0dXJuIHN5bWJvbDsKK30KKworc3RydWN0IHN5bWJvbCAqc3ltX2ZpbmQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW1ib2wgPSBOVUxMOworCWludCBoYXNoID0gMDsKKworCWlmICghbmFtZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAobmFtZVswXSAmJiAhbmFtZVsxXSkgeworCQlzd2l0Y2ggKG5hbWVbMF0pIHsKKwkJY2FzZSAneSc6IHJldHVybiAmc3ltYm9sX3llczsKKwkJY2FzZSAnbSc6IHJldHVybiAmc3ltYm9sX21vZDsKKwkJY2FzZSAnbic6IHJldHVybiAmc3ltYm9sX25vOworCQl9CisJfQorCWhhc2ggPSBzdHJoYXNoKG5hbWUpICUgU1lNQk9MX0hBU0hTSVpFOworCisJZm9yIChzeW1ib2wgPSBzeW1ib2xfaGFzaFtoYXNoXTsgc3ltYm9sOyBzeW1ib2wgPSBzeW1ib2wtPm5leHQpIHsKKwkJaWYgKHN5bWJvbC0+bmFtZSAmJgorCQkgICAgIXN0cmNtcChzeW1ib2wtPm5hbWUsIG5hbWUpICYmCisJCSAgICAhKHN5bWJvbC0+ZmxhZ3MgJiBTWU1CT0xfQ09OU1QpKQorCQkJCWJyZWFrOworCX0KKworCXJldHVybiBzeW1ib2w7Cit9CisKKy8qCisgKiBFeHBhbmQgc3ltYm9sJ3MgbmFtZXMgZW1iZWRkZWQgaW4gdGhlIHN0cmluZyBnaXZlbiBpbiBhcmd1bWVudC4gU3ltYm9scycKKyAqIG5hbWUgdG8gYmUgZXhwYW5kZWQgc2hhbGwgYmUgcHJlZml4ZWQgYnkgYSAnJCcuIFVua25vd24gc3ltYm9sIGV4cGFuZHMgdG8KKyAqIHRoZSBlbXB0eSBzdHJpbmcuCisgKi8KK2NvbnN0IGNoYXIgKnN5bV9leHBhbmRfc3RyaW5nX3ZhbHVlKGNvbnN0IGNoYXIgKmluKQoreworCWNvbnN0IGNoYXIgKnNyYzsKKwljaGFyICpyZXM7CisJc2l6ZV90IHJlc2xlbjsKKworCXJlc2xlbiA9IHN0cmxlbihpbikgKyAxOworCXJlcyA9IG1hbGxvYyhyZXNsZW4pOworCXJlc1swXSA9ICdcMCc7CisKKwl3aGlsZSAoKHNyYyA9IHN0cmNocihpbiwgJyQnKSkpIHsKKwkJY2hhciAqcCwgbmFtZVtTWU1CT0xfTUFYTEVOR1RIXTsKKwkJY29uc3QgY2hhciAqc3ltdmFsID0gIiI7CisJCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwkJc2l6ZV90IG5ld2xlbjsKKworCQlzdHJuY2F0KHJlcywgaW4sIHNyYyAtIGluKTsKKwkJc3JjKys7CisKKwkJcCA9IG5hbWU7CisJCXdoaWxlIChpc2FsbnVtKCpzcmMpIHx8ICpzcmMgPT0gJ18nKQorCQkJKnArKyA9ICpzcmMrKzsKKwkJKnAgPSAnXDAnOworCisJCXN5bSA9IHN5bV9maW5kKG5hbWUpOworCQlpZiAoc3ltICE9IE5VTEwpIHsKKwkJCXN5bV9jYWxjX3ZhbHVlKHN5bSk7CisJCQlzeW12YWwgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOworCQl9CisKKwkJbmV3bGVuID0gc3RybGVuKHJlcykgKyBzdHJsZW4oc3ltdmFsKSArIHN0cmxlbihzcmMpICsgMTsKKwkJaWYgKG5ld2xlbiA+IHJlc2xlbikgeworCQkJcmVzbGVuID0gbmV3bGVuOworCQkJcmVzID0gcmVhbGxvYyhyZXMsIHJlc2xlbik7CisJCX0KKworCQlzdHJjYXQocmVzLCBzeW12YWwpOworCQlpbiA9IHNyYzsKKwl9CisJc3RyY2F0KHJlcywgaW4pOworCisJcmV0dXJuIHJlczsKK30KKworc3RydWN0IHN5bWJvbCAqKnN5bV9yZV9zZWFyY2goY29uc3QgY2hhciAqcGF0dGVybikKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0sICoqc3ltX2FyciA9IE5VTEw7CisJaW50IGksIGNudCwgc2l6ZTsKKwlyZWdleF90IHJlOworCisJY250ID0gc2l6ZSA9IDA7CisJLyogU2tpcCBpZiBlbXB0eSAqLworCWlmIChzdHJsZW4ocGF0dGVybikgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKHJlZ2NvbXAoJnJlLCBwYXR0ZXJuLCBSRUdfRVhURU5ERUR8UkVHX05PU1VCfFJFR19JQ0FTRSkpCisJCXJldHVybiBOVUxMOworCisJZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkgeworCQlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9DT05TVCB8fCAhc3ltLT5uYW1lKQorCQkJY29udGludWU7CisJCWlmIChyZWdleGVjKCZyZSwgc3ltLT5uYW1lLCAwLCBOVUxMLCAwKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoY250ICsgMSA+PSBzaXplKSB7CisJCQl2b2lkICp0bXAgPSBzeW1fYXJyOworCQkJc2l6ZSArPSAxNjsKKwkJCXN5bV9hcnIgPSByZWFsbG9jKHN5bV9hcnIsIHNpemUgKiBzaXplb2Yoc3RydWN0IHN5bWJvbCAqKSk7CisJCQlpZiAoIXN5bV9hcnIpIHsKKwkJCQlmcmVlKHRtcCk7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCX0KKwkJc3ltX2NhbGNfdmFsdWUoc3ltKTsKKwkJc3ltX2FycltjbnQrK10gPSBzeW07CisJfQorCWlmIChzeW1fYXJyKQorCQlzeW1fYXJyW2NudF0gPSBOVUxMOworCXJlZ2ZyZWUoJnJlKTsKKworCXJldHVybiBzeW1fYXJyOworfQorCisvKgorICogV2hlbiB3ZSBjaGVjayBmb3IgcmVjdXJzaXZlIGRlcGVuZGVuY2llcyB3ZSB1c2UgYSBzdGFjayB0byBzYXZlCisgKiBjdXJyZW50IHN0YXRlIHNvIHdlIGNhbiBwcmludCBvdXQgcmVsZXZhbnQgaW5mbyB0byB1c2VyLgorICogVGhlIGVudHJpZXMgYXJlIGxvY2F0ZWQgb24gdGhlIGNhbGwgc3RhY2sgc28gbm8gbmVlZCB0byBmcmVlIG1lbW9yeS4KKyAqIE5vdGUgaW5zZXIoKSByZW1vdmUoKSBtdXN0IGFsd2F5cyBtYXRjaCB0byBwcm9wZXJseSBjbGVhciB0aGUgc3RhY2suCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZGVwX3N0YWNrIHsKKwlzdHJ1Y3QgZGVwX3N0YWNrICpwcmV2LCAqbmV4dDsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBleHByICpleHByOworfSAqY2hlY2tfdG9wOworCitzdGF0aWMgdm9pZCBkZXBfc3RhY2tfaW5zZXJ0KHN0cnVjdCBkZXBfc3RhY2sgKnN0YWNrLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJbWVtc2V0KHN0YWNrLCAwLCBzaXplb2YoKnN0YWNrKSk7CisJaWYgKGNoZWNrX3RvcCkKKwkJY2hlY2tfdG9wLT5uZXh0ID0gc3RhY2s7CisJc3RhY2stPnByZXYgPSBjaGVja190b3A7CisJc3RhY2stPnN5bSA9IHN5bTsKKwljaGVja190b3AgPSBzdGFjazsKK30KKworc3RhdGljIHZvaWQgZGVwX3N0YWNrX3JlbW92ZSh2b2lkKQoreworCWNoZWNrX3RvcCA9IGNoZWNrX3RvcC0+cHJldjsKKwlpZiAoY2hlY2tfdG9wKQorCQljaGVja190b3AtPm5leHQgPSBOVUxMOworfQorCisvKgorICogQ2FsbGVkIHdoZW4gd2UgaGF2ZSBkZXRlY3RlZCBhIHJlY3Vyc2l2ZSBkZXBlbmRlbmN5LgorICogY2hlY2tfdG9wIHBvaW50IHRvIHRoZSB0b3Agb2YgdGhlIHN0YWN0IHNvIHdlIHVzZQorICogdGhlIC0+cHJldiBwb2ludGVyIHRvIGxvY2F0ZSB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay4KKyAqLworc3RhdGljIHZvaWQgc3ltX2NoZWNrX3ByaW50X3JlY3Vyc2l2ZShzdHJ1Y3Qgc3ltYm9sICpsYXN0X3N5bSkKK3sKKwlzdHJ1Y3QgZGVwX3N0YWNrICpzdGFjazsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0sICpuZXh0X3N5bTsKKwlzdHJ1Y3QgbWVudSAqbWVudSA9IE5VTEw7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBkZXBfc3RhY2sgY3Zfc3RhY2s7CisKKwlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShsYXN0X3N5bSkpIHsKKwkJZGVwX3N0YWNrX2luc2VydCgmY3Zfc3RhY2ssIGxhc3Rfc3ltKTsKKwkJbGFzdF9zeW0gPSBwcm9wX2dldF9zeW1ib2woc3ltX2dldF9jaG9pY2VfcHJvcChsYXN0X3N5bSkpOworCX0KKworCWZvciAoc3RhY2sgPSBjaGVja190b3A7IHN0YWNrICE9IE5VTEw7IHN0YWNrID0gc3RhY2stPnByZXYpCisJCWlmIChzdGFjay0+c3ltID09IGxhc3Rfc3ltKQorCQkJYnJlYWs7CisJaWYgKCFzdGFjaykgeworCQlmcHJpbnRmKHN0ZGVyciwgInVuZXhwZWN0ZWQgcmVjdXJzaXZlIGRlcGVuZGVuY3kgZXJyb3JcbiIpOworCQlyZXR1cm47CisJfQorCisJZm9yICg7IHN0YWNrOyBzdGFjayA9IHN0YWNrLT5uZXh0KSB7CisJCXN5bSA9IHN0YWNrLT5zeW07CisJCW5leHRfc3ltID0gc3RhY2stPm5leHQgPyBzdGFjay0+bmV4dC0+c3ltIDogbGFzdF9zeW07CisJCXByb3AgPSBzdGFjay0+cHJvcDsKKwkJaWYgKHByb3AgPT0gTlVMTCkKKwkJCXByb3AgPSBzdGFjay0+c3ltLT5wcm9wOworCisJCS8qIGZvciBjaG9pY2UgdmFsdWVzIGZpbmQgdGhlIG1lbnUgZW50cnkgKHVzZWQgYmVsb3cpICovCisJCWlmIChzeW1faXNfY2hvaWNlKHN5bSkgfHwgc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pKSB7CisJCQlmb3IgKHByb3AgPSBzeW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7CisJCQkJbWVudSA9IHByb3AtPm1lbnU7CisJCQkJaWYgKHByb3AtPm1lbnUpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChzdGFjay0+c3ltID09IGxhc3Rfc3ltKQorCQkJZnByaW50ZihzdGRlcnIsICIlczolZDplcnJvcjogcmVjdXJzaXZlIGRlcGVuZGVuY3kgZGV0ZWN0ZWQhXG4iLAorCQkJCXByb3AtPmZpbGUtPm5hbWUsIHByb3AtPmxpbmVubyk7CisJCWlmIChzdGFjay0+ZXhwcikgeworCQkJZnByaW50ZihzdGRlcnIsICIlczolZDpcdHN5bWJvbCAlcyAlcyB2YWx1ZSBjb250YWlucyAlc1xuIiwKKwkJCQlwcm9wLT5maWxlLT5uYW1lLCBwcm9wLT5saW5lbm8sCisJCQkJc3ltLT5uYW1lID8gc3ltLT5uYW1lIDogIjxjaG9pY2U+IiwKKwkJCQlwcm9wX2dldF90eXBlX25hbWUocHJvcC0+dHlwZSksCisJCQkJbmV4dF9zeW0tPm5hbWUgPyBuZXh0X3N5bS0+bmFtZSA6ICI8Y2hvaWNlPiIpOworCQl9IGVsc2UgaWYgKHN0YWNrLT5wcm9wKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOlx0c3ltYm9sICVzIGRlcGVuZHMgb24gJXNcbiIsCisJCQkJcHJvcC0+ZmlsZS0+bmFtZSwgcHJvcC0+bGluZW5vLAorCQkJCXN5bS0+bmFtZSA/IHN5bS0+bmFtZSA6ICI8Y2hvaWNlPiIsCisJCQkJbmV4dF9zeW0tPm5hbWUgPyBuZXh0X3N5bS0+bmFtZSA6ICI8Y2hvaWNlPiIpOworCQl9IGVsc2UgaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkgeworCQkJZnByaW50ZihzdGRlcnIsICIlczolZDpcdGNob2ljZSAlcyBjb250YWlucyBzeW1ib2wgJXNcbiIsCisJCQkJbWVudS0+ZmlsZS0+bmFtZSwgbWVudS0+bGluZW5vLAorCQkJCXN5bS0+bmFtZSA/IHN5bS0+bmFtZSA6ICI8Y2hvaWNlPiIsCisJCQkJbmV4dF9zeW0tPm5hbWUgPyBuZXh0X3N5bS0+bmFtZSA6ICI8Y2hvaWNlPiIpOworCQl9IGVsc2UgaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkgeworCQkJZnByaW50ZihzdGRlcnIsICIlczolZDpcdHN5bWJvbCAlcyBpcyBwYXJ0IG9mIGNob2ljZSAlc1xuIiwKKwkJCQltZW51LT5maWxlLT5uYW1lLCBtZW51LT5saW5lbm8sCisJCQkJc3ltLT5uYW1lID8gc3ltLT5uYW1lIDogIjxjaG9pY2U+IiwKKwkJCQluZXh0X3N5bS0+bmFtZSA/IG5leHRfc3ltLT5uYW1lIDogIjxjaG9pY2U+Iik7CisJCX0gZWxzZSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOlx0c3ltYm9sICVzIGlzIHNlbGVjdGVkIGJ5ICVzXG4iLAorCQkJCXByb3AtPmZpbGUtPm5hbWUsIHByb3AtPmxpbmVubywKKwkJCQlzeW0tPm5hbWUgPyBzeW0tPm5hbWUgOiAiPGNob2ljZT4iLAorCQkJCW5leHRfc3ltLT5uYW1lID8gbmV4dF9zeW0tPm5hbWUgOiAiPGNob2ljZT4iKTsKKwkJfQorCX0KKworCWlmIChjaGVja190b3AgPT0gJmN2X3N0YWNrKQorCQlkZXBfc3RhY2tfcmVtb3ZlKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3ltYm9sICpzeW1fY2hlY2tfZXhwcl9kZXBzKHN0cnVjdCBleHByICplKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKworCWlmICghZSkKKwkJcmV0dXJuIE5VTEw7CisJc3dpdGNoIChlLT50eXBlKSB7CisJY2FzZSBFX09SOgorCWNhc2UgRV9BTkQ6CisJCXN5bSA9IHN5bV9jaGVja19leHByX2RlcHMoZS0+bGVmdC5leHByKTsKKwkJaWYgKHN5bSkKKwkJCXJldHVybiBzeW07CisJCXJldHVybiBzeW1fY2hlY2tfZXhwcl9kZXBzKGUtPnJpZ2h0LmV4cHIpOworCWNhc2UgRV9OT1Q6CisJCXJldHVybiBzeW1fY2hlY2tfZXhwcl9kZXBzKGUtPmxlZnQuZXhwcik7CisJY2FzZSBFX0VRVUFMOgorCWNhc2UgRV9VTkVRVUFMOgorCQlzeW0gPSBzeW1fY2hlY2tfZGVwcyhlLT5sZWZ0LnN5bSk7CisJCWlmIChzeW0pCisJCQlyZXR1cm4gc3ltOworCQlyZXR1cm4gc3ltX2NoZWNrX2RlcHMoZS0+cmlnaHQuc3ltKTsKKwljYXNlIEVfU1lNQk9MOgorCQlyZXR1cm4gc3ltX2NoZWNrX2RlcHMoZS0+bGVmdC5zeW0pOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlwcmludGYoIk9vcHMhIEhvdyB0byBjaGVjayAlZD9cbiIsIGUtPnR5cGUpOworCXJldHVybiBOVUxMOworfQorCisvKiByZXR1cm4gTlVMTCB3aGVuIGRlcGVuZGVuY2llcyBhcmUgT0sgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3ltYm9sICpzeW1fY2hlY2tfc3ltX2RlcHMoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTI7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBkZXBfc3RhY2sgc3RhY2s7CisKKwlkZXBfc3RhY2tfaW5zZXJ0KCZzdGFjaywgc3ltKTsKKworCXN5bTIgPSBzeW1fY2hlY2tfZXhwcl9kZXBzKHN5bS0+cmV2X2RlcC5leHByKTsKKwlpZiAoc3ltMikKKwkJZ290byBvdXQ7CisKKwlmb3IgKHByb3AgPSBzeW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7CisJCWlmIChwcm9wLT50eXBlID09IFBfQ0hPSUNFIHx8IHByb3AtPnR5cGUgPT0gUF9TRUxFQ1QpCisJCQljb250aW51ZTsKKwkJc3RhY2sucHJvcCA9IHByb3A7CisJCXN5bTIgPSBzeW1fY2hlY2tfZXhwcl9kZXBzKHByb3AtPnZpc2libGUuZXhwcik7CisJCWlmIChzeW0yKQorCQkJYnJlYWs7CisJCWlmIChwcm9wLT50eXBlICE9IFBfREVGQVVMVCB8fCBzeW1faXNfY2hvaWNlKHN5bSkpCisJCQljb250aW51ZTsKKwkJc3RhY2suZXhwciA9IHByb3AtPmV4cHI7CisJCXN5bTIgPSBzeW1fY2hlY2tfZXhwcl9kZXBzKHByb3AtPmV4cHIpOworCQlpZiAoc3ltMikKKwkJCWJyZWFrOworCQlzdGFjay5leHByID0gTlVMTDsKKwl9CisKK291dDoKKwlkZXBfc3RhY2tfcmVtb3ZlKCk7CisKKwlyZXR1cm4gc3ltMjsKK30KKworc3RhdGljIHN0cnVjdCBzeW1ib2wgKnN5bV9jaGVja19jaG9pY2VfZGVwcyhzdHJ1Y3Qgc3ltYm9sICpjaG9pY2UpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltLCAqc3ltMjsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IGV4cHIgKmU7CisJc3RydWN0IGRlcF9zdGFjayBzdGFjazsKKworCWRlcF9zdGFja19pbnNlcnQoJnN0YWNrLCBjaG9pY2UpOworCisJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3AoY2hvaWNlKTsKKwlleHByX2xpc3RfZm9yX2VhY2hfc3ltKHByb3AtPmV4cHIsIGUsIHN5bSkKKwkJc3ltLT5mbGFncyB8PSAoU1lNQk9MX0NIRUNLIHwgU1lNQk9MX0NIRUNLRUQpOworCisJY2hvaWNlLT5mbGFncyB8PSAoU1lNQk9MX0NIRUNLIHwgU1lNQk9MX0NIRUNLRUQpOworCXN5bTIgPSBzeW1fY2hlY2tfc3ltX2RlcHMoY2hvaWNlKTsKKwljaG9pY2UtPmZsYWdzICY9IH5TWU1CT0xfQ0hFQ0s7CisJaWYgKHN5bTIpCisJCWdvdG8gb3V0OworCisJZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBlLCBzeW0pIHsKKwkJc3ltMiA9IHN5bV9jaGVja19zeW1fZGVwcyhzeW0pOworCQlpZiAoc3ltMikKKwkJCWJyZWFrOworCX0KK291dDoKKwlleHByX2xpc3RfZm9yX2VhY2hfc3ltKHByb3AtPmV4cHIsIGUsIHN5bSkKKwkJc3ltLT5mbGFncyAmPSB+U1lNQk9MX0NIRUNLOworCisJaWYgKHN5bTIgJiYgc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0yKSAmJgorCSAgICBwcm9wX2dldF9zeW1ib2woc3ltX2dldF9jaG9pY2VfcHJvcChzeW0yKSkgPT0gY2hvaWNlKQorCQlzeW0yID0gY2hvaWNlOworCisJZGVwX3N0YWNrX3JlbW92ZSgpOworCisJcmV0dXJuIHN5bTI7Cit9CisKK3N0cnVjdCBzeW1ib2wgKnN5bV9jaGVja19kZXBzKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0yOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKworCWlmIChzeW0tPmZsYWdzICYgU1lNQk9MX0NIRUNLKSB7CisJCXN5bV9jaGVja19wcmludF9yZWN1cnNpdmUoc3ltKTsKKwkJcmV0dXJuIHN5bTsKKwl9CisJaWYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hFQ0tFRCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pKSB7CisJCXN0cnVjdCBkZXBfc3RhY2sgc3RhY2s7CisKKwkJLyogZm9yIGNob2ljZSBncm91cHMgc3RhcnQgdGhlIGNoZWNrIHdpdGggbWFpbiBjaG9pY2Ugc3ltYm9sICovCisJCWRlcF9zdGFja19pbnNlcnQoJnN0YWNrLCBzeW0pOworCQlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pOworCQlzeW0yID0gc3ltX2NoZWNrX2RlcHMocHJvcF9nZXRfc3ltYm9sKHByb3ApKTsKKwkJZGVwX3N0YWNrX3JlbW92ZSgpOworCX0gZWxzZSBpZiAoc3ltX2lzX2Nob2ljZShzeW0pKSB7CisJCXN5bTIgPSBzeW1fY2hlY2tfY2hvaWNlX2RlcHMoc3ltKTsKKwl9IGVsc2UgeworCQlzeW0tPmZsYWdzIHw9IChTWU1CT0xfQ0hFQ0sgfCBTWU1CT0xfQ0hFQ0tFRCk7CisJCXN5bTIgPSBzeW1fY2hlY2tfc3ltX2RlcHMoc3ltKTsKKwkJc3ltLT5mbGFncyAmPSB+U1lNQk9MX0NIRUNLOworCX0KKworCWlmIChzeW0yICYmIHN5bTIgPT0gc3ltKQorCQlzeW0yID0gTlVMTDsKKworCXJldHVybiBzeW0yOworfQorCitzdHJ1Y3QgcHJvcGVydHkgKnByb3BfYWxsb2MoZW51bSBwcm9wX3R5cGUgdHlwZSwgc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3QgcHJvcGVydHkgKipwcm9wcDsKKworCXByb3AgPSBtYWxsb2Moc2l6ZW9mKCpwcm9wKSk7CisJbWVtc2V0KHByb3AsIDAsIHNpemVvZigqcHJvcCkpOworCXByb3AtPnR5cGUgPSB0eXBlOworCXByb3AtPnN5bSA9IHN5bTsKKwlwcm9wLT5maWxlID0gY3VycmVudF9maWxlOworCXByb3AtPmxpbmVubyA9IHpjb25mX2xpbmVubygpOworCisJLyogYXBwZW5kIHByb3BlcnR5IHRvIHRoZSBwcm9wIGxpc3Qgb2Ygc3ltYm9sICovCisJaWYgKHN5bSkgeworCQlmb3IgKHByb3BwID0gJnN5bS0+cHJvcDsgKnByb3BwOyBwcm9wcCA9ICYoKnByb3BwKS0+bmV4dCkKKwkJCTsKKwkJKnByb3BwID0gcHJvcDsKKwl9CisKKwlyZXR1cm4gcHJvcDsKK30KKworc3RydWN0IHN5bWJvbCAqcHJvcF9nZXRfc3ltYm9sKHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCkKK3sKKwlpZiAocHJvcC0+ZXhwciAmJiAocHJvcC0+ZXhwci0+dHlwZSA9PSBFX1NZTUJPTCB8fAorCQkJICAgcHJvcC0+ZXhwci0+dHlwZSA9PSBFX0xJU1QpKQorCQlyZXR1cm4gcHJvcC0+ZXhwci0+bGVmdC5zeW07CisJcmV0dXJuIE5VTEw7Cit9CisKK2NvbnN0IGNoYXIgKnByb3BfZ2V0X3R5cGVfbmFtZShlbnVtIHByb3BfdHlwZSB0eXBlKQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgUF9QUk9NUFQ6CisJCXJldHVybiAicHJvbXB0IjsKKwljYXNlIFBfRU5WOgorCQlyZXR1cm4gImVudiI7CisJY2FzZSBQX0NPTU1FTlQ6CisJCXJldHVybiAiY29tbWVudCI7CisJY2FzZSBQX01FTlU6CisJCXJldHVybiAibWVudSI7CisJY2FzZSBQX0RFRkFVTFQ6CisJCXJldHVybiAiZGVmYXVsdCI7CisJY2FzZSBQX0NIT0lDRToKKwkJcmV0dXJuICJjaG9pY2UiOworCWNhc2UgUF9TRUxFQ1Q6CisJCXJldHVybiAic2VsZWN0IjsKKwljYXNlIFBfUkFOR0U6CisJCXJldHVybiAicmFuZ2UiOworCWNhc2UgUF9TWU1CT0w6CisJCXJldHVybiAic3ltYm9sIjsKKwljYXNlIFBfVU5LTk9XTjoKKwkJYnJlYWs7CisJfQorCXJldHVybiAidW5rbm93biI7Cit9CisKK3N0YXRpYyB2b2lkIHByb3BfYWRkX2Vudihjb25zdCBjaGFyICplbnYpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltLCAqc3ltMjsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJY2hhciAqcDsKKworCXN5bSA9IGN1cnJlbnRfZW50cnktPnN5bTsKKwlzeW0tPmZsYWdzIHw9IFNZTUJPTF9BVVRPOworCWZvcl9hbGxfcHJvcGVydGllcyhzeW0sIHByb3AsIFBfRU5WKSB7CisJCXN5bTIgPSBwcm9wX2dldF9zeW1ib2wocHJvcCk7CisJCWlmIChzdHJjbXAoc3ltMi0+bmFtZSwgZW52KSkKKwkJCW1lbnVfd2FybihjdXJyZW50X2VudHJ5LCAicmVkZWZpbmluZyBlbnZpcm9ubWVudCBzeW1ib2wgZnJvbSAlcyIsCisJCQkJICBzeW0yLT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCXByb3AgPSBwcm9wX2FsbG9jKFBfRU5WLCBzeW0pOworCXByb3AtPmV4cHIgPSBleHByX2FsbG9jX3N5bWJvbChzeW1fbG9va3VwKGVudiwgU1lNQk9MX0NPTlNUKSk7CisKKwlzeW1fZW52X2xpc3QgPSBleHByX2FsbG9jX29uZShFX0xJU1QsIHN5bV9lbnZfbGlzdCk7CisJc3ltX2Vudl9saXN0LT5yaWdodC5zeW0gPSBzeW07CisKKwlwID0gZ2V0ZW52KGVudik7CisJaWYgKHApCisJCXN5bV9hZGRfZGVmYXVsdChzeW0sIHApOworfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL3V0aWwuYyBiL2xpYi9jdC1uZy0xLjEzLjQva2NvbmZpZy91dGlsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMzMGNjOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQva2NvbmZpZy91dGlsLmMKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNSBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA1IFNhbSBSYXZuYm9yZyA8c2FtQHJhdm5ib3JnLm9yZz4KKyAqCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIuMC4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAibGtjLmgiCisKKy8qIGZpbGUgYWxyZWFkeSBwcmVzZW50IGluIGxpc3Q/IElmIG5vdCBhZGQgaXQgKi8KK3N0cnVjdCBmaWxlICpmaWxlX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBmaWxlICpmaWxlOworCWNvbnN0IGNoYXIgKmZpbGVfbmFtZSA9IHN5bV9leHBhbmRfc3RyaW5nX3ZhbHVlKG5hbWUpOworCisJZm9yIChmaWxlID0gZmlsZV9saXN0OyBmaWxlOyBmaWxlID0gZmlsZS0+bmV4dCkgeworCQlpZiAoIXN0cmNtcChuYW1lLCBmaWxlLT5uYW1lKSkgeworCQkJZnJlZSgodm9pZCAqKWZpbGVfbmFtZSk7CisJCQlyZXR1cm4gZmlsZTsKKwkJfQorCX0KKworCWZpbGUgPSBtYWxsb2Moc2l6ZW9mKCpmaWxlKSk7CisJbWVtc2V0KGZpbGUsIDAsIHNpemVvZigqZmlsZSkpOworCWZpbGUtPm5hbWUgPSBmaWxlX25hbWU7CisJZmlsZS0+bmV4dCA9IGZpbGVfbGlzdDsKKwlmaWxlX2xpc3QgPSBmaWxlOworCXJldHVybiBmaWxlOworfQorCisvKiB3cml0ZSBhIGRlcGVuZGVuY3kgZmlsZSBhcyB1c2VkIGJ5IGtidWlsZCB0byB0cmFjayBkZXBlbmRlbmNpZXMgKi8KK2ludCBmaWxlX3dyaXRlX2RlcChjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bSwgKmVudl9zeW07CisJc3RydWN0IGV4cHIgKmU7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJRklMRSAqb3V0OworCisJaWYgKCFuYW1lKQorCQluYW1lID0gIi5rY29uZmlnLmQiOworCW91dCA9IGZvcGVuKCIuLmNvbmZpZy50bXAiLCAidyIpOworCWlmICghb3V0KQorCQlyZXR1cm4gMTsKKwlmcHJpbnRmKG91dCwgImRlcHNfY29uZmlnIDo9IFxcXG4iKTsKKwlmb3IgKGZpbGUgPSBmaWxlX2xpc3Q7IGZpbGU7IGZpbGUgPSBmaWxlLT5uZXh0KSB7CisJCWlmIChmaWxlLT5uZXh0KQorCQkJZnByaW50ZihvdXQsICJcdCVzIFxcXG4iLCBmaWxlLT5uYW1lKTsKKwkJZWxzZQorCQkJZnByaW50ZihvdXQsICJcdCVzXG4iLCBmaWxlLT5uYW1lKTsKKwl9CisJZnByaW50ZihvdXQsICJcbiVzOiBcXFxuIgorCQkgICAgICJcdCQoZGVwc19jb25maWcpXG5cbiIsIGNvbmZfZ2V0X2F1dG9jb25maWdfbmFtZSgpKTsKKworCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0oc3ltX2Vudl9saXN0LCBlLCBzeW0pIHsKKwkJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCQljb25zdCBjaGFyICp2YWx1ZTsKKworCQlwcm9wID0gc3ltX2dldF9lbnZfcHJvcChzeW0pOworCQllbnZfc3ltID0gcHJvcF9nZXRfc3ltYm9sKHByb3ApOworCQlpZiAoIWVudl9zeW0pCisJCQljb250aW51ZTsKKwkJdmFsdWUgPSBnZXRlbnYoZW52X3N5bS0+bmFtZSk7CisJCWlmICghdmFsdWUpCisJCQl2YWx1ZSA9ICIiOworCQlmcHJpbnRmKG91dCwgImlmbmVxIFwiJCglcylcIiBcIiVzXCJcbiIsIGVudl9zeW0tPm5hbWUsIHZhbHVlKTsKKwkJZnByaW50ZihvdXQsICIlczogRk9SQ0VcbiIsIGNvbmZfZ2V0X2F1dG9jb25maWdfbmFtZSgpKTsKKwkJZnByaW50ZihvdXQsICJlbmRpZlxuIik7CisJfQorCisJZnByaW50ZihvdXQsICJcbiQoZGVwc19jb25maWcpOiA7XG4iKTsKKwlmY2xvc2Uob3V0KTsKKwlyZW5hbWUoIi4uY29uZmlnLnRtcCIsIG5hbWUpOworCXJldHVybiAwOworfQorCisKKy8qIEFsbG9jYXRlIGluaXRpYWwgZ3Jvd2FibGUgc3RyaW5nICovCitzdHJ1Y3QgZ3N0ciBzdHJfbmV3KHZvaWQpCit7CisJc3RydWN0IGdzdHIgZ3M7CisJZ3MucyA9IG1hbGxvYyhzaXplb2YoY2hhcikgKiA2NCk7CisJZ3MubGVuID0gNjQ7CisJZ3MubWF4X3dpZHRoID0gMDsKKwlzdHJjcHkoZ3MucywgIlwwIik7CisJcmV0dXJuIGdzOworfQorCisvKiBBbGxvY2F0ZSBhbmQgYXNzaWduIGdyb3dhYmxlIHN0cmluZyAqLworc3RydWN0IGdzdHIgc3RyX2Fzc2lnbihjb25zdCBjaGFyICpzKQoreworCXN0cnVjdCBnc3RyIGdzOworCWdzLnMgPSBzdHJkdXAocyk7CisJZ3MubGVuID0gc3RybGVuKHMpICsgMTsKKwlncy5tYXhfd2lkdGggPSAwOworCXJldHVybiBnczsKK30KKworLyogRnJlZSBzdG9yYWdlIGZvciBncm93YWJsZSBzdHJpbmcgKi8KK3ZvaWQgc3RyX2ZyZWUoc3RydWN0IGdzdHIgKmdzKQoreworCWlmIChncy0+cykKKwkJZnJlZShncy0+cyk7CisJZ3MtPnMgPSBOVUxMOworCWdzLT5sZW4gPSAwOworfQorCisvKiBBcHBlbmQgdG8gZ3Jvd2FibGUgc3RyaW5nICovCit2b2lkIHN0cl9hcHBlbmQoc3RydWN0IGdzdHIgKmdzLCBjb25zdCBjaGFyICpzKQoreworCXNpemVfdCBsOworCWlmIChzKSB7CisJCWwgPSBzdHJsZW4oZ3MtPnMpICsgc3RybGVuKHMpICsgMTsKKwkJaWYgKGwgPiBncy0+bGVuKSB7CisJCQlncy0+cyAgID0gcmVhbGxvYyhncy0+cywgbCk7CisJCQlncy0+bGVuID0gbDsKKwkJfQorCQlzdHJjYXQoZ3MtPnMsIHMpOworCX0KK30KKworLyogQXBwZW5kIHByaW50ZiBmb3JtYXR0ZWQgc3RyaW5nIHRvIGdyb3dhYmxlIHN0cmluZyAqLwordm9pZCBzdHJfcHJpbnRmKHN0cnVjdCBnc3RyICpncywgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwljaGFyIHNbMTAwMDBdOyAvKiBiaWcgZW5vdWdoLi4uICovCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJdnNucHJpbnRmKHMsIHNpemVvZihzKSwgZm10LCBhcCk7CisJc3RyX2FwcGVuZChncywgcyk7CisJdmFfZW5kKGFwKTsKK30KKworLyogUmV0cmlldmUgdmFsdWUgb2YgZ3Jvd2FibGUgc3RyaW5nICovCitjb25zdCBjaGFyICpzdHJfZ2V0KHN0cnVjdCBnc3RyICpncykKK3sKKwlyZXR1cm4gZ3MtPnM7Cit9CisKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQva2NvbmZpZy96Y29uZi5oYXNoLmMgYi9saWIvY3QtbmctMS4xMy40L2tjb25maWcvemNvbmYuaGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNTVkNWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2tjb25maWcvemNvbmYuaGFzaC5jCkBAIC0wLDAgKzEsMjQ1IEBACisvKiBBTlNJLUMgY29kZSBwcm9kdWNlZCBieSBncGVyZiB2ZXJzaW9uIDMuMC4zICovCisvKiBDb21tYW5kLWxpbmU6IGdwZXJmICAqLworLyogQ29tcHV0ZWQgcG9zaXRpb25zOiAtaycxLDMnICovCisKKyNpZiAhKCgnICcgPT0gMzIpICYmICgnIScgPT0gMzMpICYmICgnIicgPT0gMzQpICYmICgnIycgPT0gMzUpIFwKKyAgICAgICYmICgnJScgPT0gMzcpICYmICgnJicgPT0gMzgpICYmICgnXCcnID09IDM5KSAmJiAoJygnID09IDQwKSBcCisgICAgICAmJiAoJyknID09IDQxKSAmJiAoJyonID09IDQyKSAmJiAoJysnID09IDQzKSAmJiAoJywnID09IDQ0KSBcCisgICAgICAmJiAoJy0nID09IDQ1KSAmJiAoJy4nID09IDQ2KSAmJiAoJy8nID09IDQ3KSAmJiAoJzAnID09IDQ4KSBcCisgICAgICAmJiAoJzEnID09IDQ5KSAmJiAoJzInID09IDUwKSAmJiAoJzMnID09IDUxKSAmJiAoJzQnID09IDUyKSBcCisgICAgICAmJiAoJzUnID09IDUzKSAmJiAoJzYnID09IDU0KSAmJiAoJzcnID09IDU1KSAmJiAoJzgnID09IDU2KSBcCisgICAgICAmJiAoJzknID09IDU3KSAmJiAoJzonID09IDU4KSAmJiAoJzsnID09IDU5KSAmJiAoJzwnID09IDYwKSBcCisgICAgICAmJiAoJz0nID09IDYxKSAmJiAoJz4nID09IDYyKSAmJiAoJz8nID09IDYzKSAmJiAoJ0EnID09IDY1KSBcCisgICAgICAmJiAoJ0InID09IDY2KSAmJiAoJ0MnID09IDY3KSAmJiAoJ0QnID09IDY4KSAmJiAoJ0UnID09IDY5KSBcCisgICAgICAmJiAoJ0YnID09IDcwKSAmJiAoJ0cnID09IDcxKSAmJiAoJ0gnID09IDcyKSAmJiAoJ0knID09IDczKSBcCisgICAgICAmJiAoJ0onID09IDc0KSAmJiAoJ0snID09IDc1KSAmJiAoJ0wnID09IDc2KSAmJiAoJ00nID09IDc3KSBcCisgICAgICAmJiAoJ04nID09IDc4KSAmJiAoJ08nID09IDc5KSAmJiAoJ1AnID09IDgwKSAmJiAoJ1EnID09IDgxKSBcCisgICAgICAmJiAoJ1InID09IDgyKSAmJiAoJ1MnID09IDgzKSAmJiAoJ1QnID09IDg0KSAmJiAoJ1UnID09IDg1KSBcCisgICAgICAmJiAoJ1YnID09IDg2KSAmJiAoJ1cnID09IDg3KSAmJiAoJ1gnID09IDg4KSAmJiAoJ1knID09IDg5KSBcCisgICAgICAmJiAoJ1onID09IDkwKSAmJiAoJ1snID09IDkxKSAmJiAoJ1xcJyA9PSA5MikgJiYgKCddJyA9PSA5MykgXAorICAgICAgJiYgKCdeJyA9PSA5NCkgJiYgKCdfJyA9PSA5NSkgJiYgKCdhJyA9PSA5NykgJiYgKCdiJyA9PSA5OCkgXAorICAgICAgJiYgKCdjJyA9PSA5OSkgJiYgKCdkJyA9PSAxMDApICYmICgnZScgPT0gMTAxKSAmJiAoJ2YnID09IDEwMikgXAorICAgICAgJiYgKCdnJyA9PSAxMDMpICYmICgnaCcgPT0gMTA0KSAmJiAoJ2knID09IDEwNSkgJiYgKCdqJyA9PSAxMDYpIFwKKyAgICAgICYmICgnaycgPT0gMTA3KSAmJiAoJ2wnID09IDEwOCkgJiYgKCdtJyA9PSAxMDkpICYmICgnbicgPT0gMTEwKSBcCisgICAgICAmJiAoJ28nID09IDExMSkgJiYgKCdwJyA9PSAxMTIpICYmICgncScgPT0gMTEzKSAmJiAoJ3InID09IDExNCkgXAorICAgICAgJiYgKCdzJyA9PSAxMTUpICYmICgndCcgPT0gMTE2KSAmJiAoJ3UnID09IDExNykgJiYgKCd2JyA9PSAxMTgpIFwKKyAgICAgICYmICgndycgPT0gMTE5KSAmJiAoJ3gnID09IDEyMCkgJiYgKCd5JyA9PSAxMjEpICYmICgneicgPT0gMTIyKSBcCisgICAgICAmJiAoJ3snID09IDEyMykgJiYgKCd8JyA9PSAxMjQpICYmICgnfScgPT0gMTI1KSAmJiAoJ34nID09IDEyNikpCisvKiBUaGUgY2hhcmFjdGVyIHNldCBpcyBub3QgYmFzZWQgb24gSVNPLTY0Ni4gICovCisjZXJyb3IgImdwZXJmIGdlbmVyYXRlZCB0YWJsZXMgZG9uJ3Qgd29yayB3aXRoIHRoaXMgZXhlY3V0aW9uIGNoYXJhY3RlciBzZXQuIFBsZWFzZSByZXBvcnQgYSBidWcgdG8gPGJ1Zy1nbnUtZ3BlcmZAZ251Lm9yZz4uIgorI2VuZGlmCisKK3N0cnVjdCBrY29uZl9pZDsKKworc3RhdGljIHN0cnVjdCBrY29uZl9pZCAqa2NvbmZfaWRfbG9va3VwKHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnN0ciwgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGxlbik7CisvKiBtYXhpbXVtIGtleSByYW5nZSA9IDUwLCBkdXBsaWNhdGVzID0gMCAqLworCisjaWZkZWYgX19HTlVDX18KK19faW5saW5lCisjZWxzZQorI2lmZGVmIF9fY3BsdXNwbHVzCitpbmxpbmUKKyNlbmRpZgorI2VuZGlmCitzdGF0aWMgdW5zaWduZWQgaW50CitrY29uZl9pZF9oYXNoIChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBsZW4pCit7CisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGFzc29fdmFsdWVzW10gPQorICAgIHsKKyAgICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLAorICAgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsCisgICAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwKKyAgICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLAorICAgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsCisgICAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwKKyAgICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLAorICAgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsCisgICAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwKKyAgICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNDAsICA1LAorICAgICAgIDAsICAwLCAgNSwgNTIsICAwLCAyMCwgNTIsIDUyLCAxMCwgMjAsCisgICAgICAgNSwgIDAsIDM1LCA1MiwgIDAsIDMwLCAgMCwgMTUsICAwLCA1MiwKKyAgICAgIDE1LCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLAorICAgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsCisgICAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwKKyAgICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLAorICAgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsCisgICAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwKKyAgICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLAorICAgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsCisgICAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwKKyAgICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLAorICAgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsCisgICAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwKKyAgICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLAorICAgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MgorICAgIH07CisgIHJlZ2lzdGVyIGludCBodmFsID0gbGVuOworCisgIHN3aXRjaCAoaHZhbCkKKyAgICB7CisgICAgICBkZWZhdWx0OgorICAgICAgICBodmFsICs9IGFzc29fdmFsdWVzWyh1bnNpZ25lZCBjaGFyKXN0clsyXV07CisgICAgICAvKkZBTExUSFJPVUdIKi8KKyAgICAgIGNhc2UgMjoKKyAgICAgIGNhc2UgMToKKyAgICAgICAgaHZhbCArPSBhc3NvX3ZhbHVlc1sodW5zaWduZWQgY2hhcilzdHJbMF1dOworICAgICAgICBicmVhazsKKyAgICB9CisgIHJldHVybiBodmFsOworfQorCitzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190CisgIHsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMltzaXplb2YoIm9uIildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIzW3NpemVvZigiZW52IildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHI1W3NpemVvZigiZW5kaWYiKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjZbc2l6ZW9mKCJvcHRpb24iKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjdbc2l6ZW9mKCJlbmRtZW51IildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHI4W3NpemVvZigib3B0aW9uYWwiKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjlbc2l6ZW9mKCJlbmRjaG9pY2UiKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjEwW3NpemVvZigicmFuZ2UiKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjExW3NpemVvZigiY2hvaWNlIildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIxMltzaXplb2YoImRlZmF1bHQiKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjEzW3NpemVvZigiZGVmX2Jvb2wiKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjE0W3NpemVvZigiaGVscCIpXTsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMTZbc2l6ZW9mKCJjb25maWciKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjE3W3NpemVvZigiZGVmX3RyaXN0YXRlIildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIxOFtzaXplb2YoImhleCIpXTsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMTlbc2l6ZW9mKCJkZWZjb25maWdfbGlzdCIpXTsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMjJbc2l6ZW9mKCJpZiIpXTsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMjNbc2l6ZW9mKCJpbnQiKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjI3W3NpemVvZigibW9kdWxlcyIpXTsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMjhbc2l6ZW9mKCJ0cmlzdGF0ZSIpXTsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMjlbc2l6ZW9mKCJtZW51IildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIzMltzaXplb2YoImNvbW1lbnQiKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjM1W3NpemVvZigibWVudWNvbmZpZyIpXTsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMzZbc2l6ZW9mKCJzdHJpbmciKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjM3W3NpemVvZigidmlzaWJsZSIpXTsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyNDFbc2l6ZW9mKCJwcm9tcHQiKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjQyW3NpemVvZigiZGVwZW5kcyIpXTsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyNDRbc2l6ZW9mKCJib29sIildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHI0NltzaXplb2YoInNlbGVjdCIpXTsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyNDdbc2l6ZW9mKCJib29sZWFuIildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHI0OFtzaXplb2YoIm1haW5tZW51IildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHI1MVtzaXplb2YoInNvdXJjZSIpXTsKKyAgfTsKK3N0YXRpYyBzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190IGtjb25mX2lkX3N0cmluZ3NfY29udGVudHMgPQorICB7CisgICAgIm9uIiwKKyAgICAiZW52IiwKKyAgICAiZW5kaWYiLAorICAgICJvcHRpb24iLAorICAgICJlbmRtZW51IiwKKyAgICAib3B0aW9uYWwiLAorICAgICJlbmRjaG9pY2UiLAorICAgICJyYW5nZSIsCisgICAgImNob2ljZSIsCisgICAgImRlZmF1bHQiLAorICAgICJkZWZfYm9vbCIsCisgICAgImhlbHAiLAorICAgICJjb25maWciLAorICAgICJkZWZfdHJpc3RhdGUiLAorICAgICJoZXgiLAorICAgICJkZWZjb25maWdfbGlzdCIsCisgICAgImlmIiwKKyAgICAiaW50IiwKKyAgICAibW9kdWxlcyIsCisgICAgInRyaXN0YXRlIiwKKyAgICAibWVudSIsCisgICAgImNvbW1lbnQiLAorICAgICJtZW51Y29uZmlnIiwKKyAgICAic3RyaW5nIiwKKyAgICAidmlzaWJsZSIsCisgICAgInByb21wdCIsCisgICAgImRlcGVuZHMiLAorICAgICJib29sIiwKKyAgICAic2VsZWN0IiwKKyAgICAiYm9vbGVhbiIsCisgICAgIm1haW5tZW51IiwKKyAgICAic291cmNlIgorICB9OworI2RlZmluZSBrY29uZl9pZF9zdHJpbmdzICgoY29uc3QgY2hhciAqKSAma2NvbmZfaWRfc3RyaW5nc19jb250ZW50cykKKyNpZmRlZiBfX0dOVUNfXworX19pbmxpbmUKKyNpZmRlZiBfX0dOVUNfU1REQ19JTkxJTkVfXworX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fKSkKKyNlbmRpZgorI2VuZGlmCitzdHJ1Y3Qga2NvbmZfaWQgKgora2NvbmZfaWRfbG9va3VwIChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBsZW4pCit7CisgIGVudW0KKyAgICB7CisgICAgICBUT1RBTF9LRVlXT1JEUyA9IDMyLAorICAgICAgTUlOX1dPUkRfTEVOR1RIID0gMiwKKyAgICAgIE1BWF9XT1JEX0xFTkdUSCA9IDE0LAorICAgICAgTUlOX0hBU0hfVkFMVUUgPSAyLAorICAgICAgTUFYX0hBU0hfVkFMVUUgPSA1MQorICAgIH07CisKKyAgc3RhdGljIHN0cnVjdCBrY29uZl9pZCB3b3JkbGlzdFtdID0KKyAgICB7CisgICAgICB7LTF9LCB7LTF9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjIsCQlUX09OLAkJVEZfUEFSQU19LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjMsCQlUX09QVF9FTlYsCVRGX09QVElPTn0sCisgICAgICB7LTF9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjUsCQlUX0VORElGLAlURl9DT01NQU5EfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHI2LAkJVF9PUFRJT04sCVRGX0NPTU1BTkR9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjcsCVRfRU5ETUVOVSwJVEZfQ09NTUFORH0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyOCwJVF9PUFRJT05BTCwJVEZfQ09NTUFORH0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyOSwJVF9FTkRDSE9JQ0UsCVRGX0NPTU1BTkR9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjEwLAkJVF9SQU5HRSwJVEZfQ09NTUFORH0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMTEsCQlUX0NIT0lDRSwJVEZfQ09NTUFORH0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMTIsCVRfREVGQVVMVCwJVEZfQ09NTUFORCwgU19VTktOT1dOfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIxMywJVF9ERUZBVUxULAlURl9DT01NQU5ELCBTX0JPT0xFQU59LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjE0LAkJVF9IRUxQLAkJVEZfQ09NTUFORH0sCisgICAgICB7LTF9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjE2LAkJVF9DT05GSUcsCVRGX0NPTU1BTkR9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjE3LAlUX0RFRkFVTFQsCVRGX0NPTU1BTkQsIFNfVFJJU1RBVEV9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjE4LAkJVF9UWVBFLAkJVEZfQ09NTUFORCwgU19IRVh9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjE5LAlUX09QVF9ERUZDT05GSUdfTElTVCxURl9PUFRJT059LAorICAgICAgey0xfSwgey0xfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIyMiwJCVRfSUYsCQlURl9DT01NQU5EfFRGX1BBUkFNfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIyMywJCVRfVFlQRSwJCVRGX0NPTU1BTkQsIFNfSU5UfSwKKyAgICAgIHstMX0sIHstMX0sIHstMX0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMjcsCVRfT1BUX01PRFVMRVMsCVRGX09QVElPTn0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMjgsCVRfVFlQRSwJCVRGX0NPTU1BTkQsIFNfVFJJU1RBVEV9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjI5LAkJVF9NRU5VLAkJVEZfQ09NTUFORH0sCisgICAgICB7LTF9LCB7LTF9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjMyLAlUX0NPTU1FTlQsCVRGX0NPTU1BTkR9LAorICAgICAgey0xfSwgey0xfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIzNSwJVF9NRU5VQ09ORklHLAlURl9DT01NQU5EfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIzNiwJCVRfVFlQRSwJCVRGX0NPTU1BTkQsIFNfU1RSSU5HfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIzNywJVF9WSVNJQkxFLAlURl9DT01NQU5EfSwKKyAgICAgIHstMX0sIHstMX0sIHstMX0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyNDEsCQlUX1BST01QVCwJVEZfQ09NTUFORH0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyNDIsCVRfREVQRU5EUywJVEZfQ09NTUFORH0sCisgICAgICB7LTF9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjQ0LAkJVF9UWVBFLAkJVEZfQ09NTUFORCwgU19CT09MRUFOfSwKKyAgICAgIHstMX0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyNDYsCQlUX1NFTEVDVCwJVEZfQ09NTUFORH0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyNDcsCVRfVFlQRSwJCVRGX0NPTU1BTkQsIFNfQk9PTEVBTn0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyNDgsCVRfTUFJTk1FTlUsCVRGX0NPTU1BTkR9LAorICAgICAgey0xfSwgey0xfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHI1MSwJCVRfU09VUkNFLAlURl9DT01NQU5EfQorICAgIH07CisKKyAgaWYgKGxlbiA8PSBNQVhfV09SRF9MRU5HVEggJiYgbGVuID49IE1JTl9XT1JEX0xFTkdUSCkKKyAgICB7CisgICAgICByZWdpc3RlciBpbnQga2V5ID0ga2NvbmZfaWRfaGFzaCAoc3RyLCBsZW4pOworCisgICAgICBpZiAoa2V5IDw9IE1BWF9IQVNIX1ZBTFVFICYmIGtleSA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgcmVnaXN0ZXIgaW50IG8gPSB3b3JkbGlzdFtrZXldLm5hbWU7CisgICAgICAgICAgaWYgKG8gPj0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgY2hhciAqcyA9IG8gKyBrY29uZl9pZF9zdHJpbmdzOworCisgICAgICAgICAgICAgIGlmICgqc3RyID09ICpzICYmICFzdHJuY21wIChzdHIgKyAxLCBzICsgMSwgbGVuIC0gMSkgJiYgc1tsZW5dID09ICdcMCcpCisgICAgICAgICAgICAgICAgcmV0dXJuICZ3b3JkbGlzdFtrZXldOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICByZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL3pjb25mLnRhYi5jIGIvbGliL2N0LW5nLTEuMTMuNC9rY29uZmlnL3pjb25mLnRhYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxM2NkN2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L2tjb25maWcvemNvbmYudGFiLmMKQEAgLTAsMCArMSwyNTA1IEBACisKKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjQuMS4gICovCisKKy8qIFNrZWxldG9uIGltcGxlbWVudGF0aW9uIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCisgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yaworICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCisgICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZgorICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZQorICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcworICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCisgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCisgICAKKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KKyAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KKworLyogQyBMQUxSKDEpIHBhcnNlciBza2VsZXRvbiB3cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4sIGJ5CisgICBzaW1wbGlmeWluZyB0aGUgb3JpZ2luYWwgc28tY2FsbGVkICJzZW1hbnRpYyIgcGFyc2VyLiAgKi8KKworLyogQWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxvdyBzaG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQKKyAgIGluZnJpbmdpbmcgb24gdXNlciBuYW1lIHNwYWNlLiAgVGhpcyBzaG91bGQgYmUgZG9uZSBldmVuIGZvciBsb2NhbAorICAgdmFyaWFibGVzLCBhcyB0aGV5IG1pZ2h0IG90aGVyd2lzZSBiZSBleHBhbmRlZCBieSB1c2VyIG1hY3Jvcy4KKyAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGluIGluY2x1ZGUgZmlsZXMgdG8KKyAgIGRlZmluZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0aGV5IGFyZSBub3RlZCAiSU5GUklOR0VTIE9OCisgICBVU0VSIE5BTUUgU1BBQ0UiIGJlbG93LiAgKi8KKworLyogSWRlbnRpZnkgQmlzb24gb3V0cHV0LiAgKi8KKyNkZWZpbmUgWVlCSVNPTiAxCisKKy8qIEJpc29uIHZlcnNpb24uICAqLworI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuNC4xIgorCisvKiBTa2VsZXRvbiBuYW1lLiAgKi8KKyNkZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCisKKy8qIFB1cmUgcGFyc2Vycy4gICovCisjZGVmaW5lIFlZUFVSRSAwCisKKy8qIFB1c2ggcGFyc2Vycy4gICovCisjZGVmaW5lIFlZUFVTSCAwCisKKy8qIFB1bGwgcGFyc2Vycy4gICovCisjZGVmaW5lIFlZUFVMTCAxCisKKy8qIFVzaW5nIGxvY2F0aW9ucy4gICovCisjZGVmaW5lIFlZTFNQX05FRURFRCAwCisKKy8qIFN1YnN0aXR1dGUgdGhlIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiBuYW1lcy4gICovCisjZGVmaW5lIHl5cGFyc2UgICAgICAgICB6Y29uZnBhcnNlCisjZGVmaW5lIHl5bGV4ICAgICAgICAgICB6Y29uZmxleAorI2RlZmluZSB5eWVycm9yICAgICAgICAgemNvbmZlcnJvcgorI2RlZmluZSB5eWx2YWwgICAgICAgICAgemNvbmZsdmFsCisjZGVmaW5lIHl5Y2hhciAgICAgICAgICB6Y29uZmNoYXIKKyNkZWZpbmUgeXlkZWJ1ZyAgICAgICAgIHpjb25mZGVidWcKKyNkZWZpbmUgeXluZXJycyAgICAgICAgIHpjb25mbmVycnMKKworCisvKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KKworCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuCisgKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisKKyNkZWZpbmUgTEtDX0RJUkVDVF9MSU5LCisjaW5jbHVkZSAibGtjLmgiCisKKyNkZWZpbmUgcHJpbnRkKG1hc2ssIGZtdC4uLikgaWYgKGNkZWJ1ZyAmIChtYXNrKSkgcHJpbnRmKGZtdCkKKworI2RlZmluZSBQUklOVEQJCTB4MDAwMQorI2RlZmluZSBERUJVR19QQVJTRQkweDAwMDIKKworaW50IGNkZWJ1ZyA9IFBSSU5URDsKKworZXh0ZXJuIGludCB6Y29uZmxleCh2b2lkKTsKK3N0YXRpYyB2b2lkIHpjb25mcHJpbnQoY29uc3QgY2hhciAqZXJyLCAuLi4pOworc3RhdGljIHZvaWQgemNvbmZfZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pOworc3RhdGljIHZvaWQgemNvbmZlcnJvcihjb25zdCBjaGFyICplcnIpOworc3RhdGljIGJvb2wgemNvbmZfZW5kdG9rZW4oc3RydWN0IGtjb25mX2lkICppZCwgaW50IHN0YXJ0dG9rZW4sIGludCBlbmR0b2tlbik7CisKK3N0cnVjdCBzeW1ib2wgKnN5bWJvbF9oYXNoW1NZTUJPTF9IQVNIU0laRV07CisKK3N0YXRpYyBzdHJ1Y3QgbWVudSAqY3VycmVudF9tZW51LCAqY3VycmVudF9lbnRyeTsKKworI2RlZmluZSBZWURFQlVHIDAKKyNpZiBZWURFQlVHCisjZGVmaW5lIFlZRVJST1JfVkVSQk9TRQorI2VuZGlmCisKKworCisvKiBFbmFibGluZyB0cmFjZXMuICAqLworI2lmbmRlZiBZWURFQlVHCisjIGRlZmluZSBZWURFQlVHIDAKKyNlbmRpZgorCisvKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KKyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQorI2Vsc2UKKyMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCisjZW5kaWYKKworLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KKyNpZm5kZWYgWVlUT0tFTl9UQUJMRQorIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCisjZW5kaWYKKworCisvKiBUb2tlbnMuICAqLworI2lmbmRlZiBZWVRPS0VOVFlQRQorIyBkZWZpbmUgWVlUT0tFTlRZUEUKKyAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2VycworICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KKyAgIGVudW0geXl0b2tlbnR5cGUgeworICAgICBUX01BSU5NRU5VID0gMjU4LAorICAgICBUX01FTlUgPSAyNTksCisgICAgIFRfRU5ETUVOVSA9IDI2MCwKKyAgICAgVF9TT1VSQ0UgPSAyNjEsCisgICAgIFRfQ0hPSUNFID0gMjYyLAorICAgICBUX0VORENIT0lDRSA9IDI2MywKKyAgICAgVF9DT01NRU5UID0gMjY0LAorICAgICBUX0NPTkZJRyA9IDI2NSwKKyAgICAgVF9NRU5VQ09ORklHID0gMjY2LAorICAgICBUX0hFTFAgPSAyNjcsCisgICAgIFRfSEVMUFRFWFQgPSAyNjgsCisgICAgIFRfSUYgPSAyNjksCisgICAgIFRfRU5ESUYgPSAyNzAsCisgICAgIFRfREVQRU5EUyA9IDI3MSwKKyAgICAgVF9PUFRJT05BTCA9IDI3MiwKKyAgICAgVF9QUk9NUFQgPSAyNzMsCisgICAgIFRfVFlQRSA9IDI3NCwKKyAgICAgVF9ERUZBVUxUID0gMjc1LAorICAgICBUX1NFTEVDVCA9IDI3NiwKKyAgICAgVF9SQU5HRSA9IDI3NywKKyAgICAgVF9WSVNJQkxFID0gMjc4LAorICAgICBUX09QVElPTiA9IDI3OSwKKyAgICAgVF9PTiA9IDI4MCwKKyAgICAgVF9XT1JEID0gMjgxLAorICAgICBUX1dPUkRfUVVPVEUgPSAyODIsCisgICAgIFRfVU5FUVVBTCA9IDI4MywKKyAgICAgVF9DTE9TRV9QQVJFTiA9IDI4NCwKKyAgICAgVF9PUEVOX1BBUkVOID0gMjg1LAorICAgICBUX0VPTCA9IDI4NiwKKyAgICAgVF9PUiA9IDI4NywKKyAgICAgVF9BTkQgPSAyODgsCisgICAgIFRfRVFVQUwgPSAyODksCisgICAgIFRfTk9UID0gMjkwCisgICB9OworI2VuZGlmCisKKworCisjaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKK3R5cGVkZWYgdW5pb24gWVlTVFlQRQoreworCisKKwljaGFyICpzdHJpbmc7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJc3RydWN0IHN5bWJvbCAqc3ltYm9sOworCXN0cnVjdCBleHByICpleHByOworCXN0cnVjdCBtZW51ICptZW51OworCXN0cnVjdCBrY29uZl9pZCAqaWQ7CisKKworCit9IFlZU1RZUEU7CisjIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLworIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCisjZW5kaWYKKworCisvKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCisKKworLyogSW5jbHVkZSB6Y29uZi5oYXNoLmMgaGVyZSBzbyBpdCBjYW4gc2VlIHRoZSB0b2tlbiBjb25zdGFudHMuICovCisjaW5jbHVkZSAiemNvbmYuaGFzaC5jIgorCisKKworI2lmZGVmIHNob3J0CisjIHVuZGVmIHNob3J0CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9VSU5UOAordHlwZWRlZiBZWVRZUEVfVUlOVDggeXl0eXBlX3VpbnQ4OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB5eXR5cGVfdWludDg7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9JTlQ4Cit0eXBlZGVmIFlZVFlQRV9JTlQ4IHl5dHlwZV9pbnQ4OworI2VsaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQordHlwZWRlZiBzaWduZWQgY2hhciB5eXR5cGVfaW50ODsKKyNlbHNlCit0eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50ODsKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX1VJTlQxNgordHlwZWRlZiBZWVRZUEVfVUlOVDE2IHl5dHlwZV91aW50MTY7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgeXl0eXBlX3VpbnQxNjsKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX0lOVDE2Cit0eXBlZGVmIFlZVFlQRV9JTlQxNiB5eXR5cGVfaW50MTY7CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDE2OworI2VuZGlmCisKKyNpZm5kZWYgWVlTSVpFX1QKKyMgaWZkZWYgX19TSVpFX1RZUEVfXworIyAgZGVmaW5lIFlZU0laRV9UIF9fU0laRV9UWVBFX18KKyMgZWxpZiBkZWZpbmVkIHNpemVfdAorIyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAorIyBlbGlmICEgZGVmaW5lZCBZWVNJWkVfVCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCisjICBpbmNsdWRlIDxzdGRkZWYuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAorIyBlbHNlCisjICBkZWZpbmUgWVlTSVpFX1QgdW5zaWduZWQgaW50CisjIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBZWVNJWkVfTUFYSU1VTSAoKFlZU0laRV9UKSAtMSkKKworI2lmbmRlZiBZWV8KKyMgaWYgWVlFTkFCTEVfTkxTCisjICBpZiBFTkFCTEVfTkxTCisjICAgaW5jbHVkZSA8bGliaW50bC5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZGVmaW5lIFlZXyhtc2dpZCkgZGdldHRleHQgKCJiaXNvbi1ydW50aW1lIiwgbXNnaWQpCisjICBlbmRpZgorIyBlbmRpZgorIyBpZm5kZWYgWVlfCisjICBkZWZpbmUgWVlfKG1zZ2lkKSBtc2dpZAorIyBlbmRpZgorI2VuZGlmCisKKy8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5ncyBieSAidXNpbmciIEUuICAqLworI2lmICEgZGVmaW5lZCBsaW50IHx8IGRlZmluZWQgX19HTlVDX18KKyMgZGVmaW5lIFlZVVNFKGUpICgodm9pZCkgKGUpKQorI2Vsc2UKKyMgZGVmaW5lIFlZVVNFKGUpIC8qIGVtcHR5ICovCisjZW5kaWYKKworLyogSWRlbnRpdHkgZnVuY3Rpb24sIHVzZWQgdG8gc3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgY29uc3RhbnQgY29uZGl0aW9ucy4gICovCisjaWZuZGVmIGxpbnQKKyMgZGVmaW5lIFlZSUQobikgKG4pCisjZWxzZQorI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyBpbnQKK1lZSUQgKGludCB5eWkpCisjZWxzZQorc3RhdGljIGludAorWVlJRCAoeXlpKQorICAgIGludCB5eWk7CisjZW5kaWYKK3sKKyAgcmV0dXJuIHl5aTsKK30KKyNlbmRpZgorCisjaWYgISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFCisKKy8qIFRoZSBwYXJzZXIgaW52b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vzc2FyeSBzeW1ib2xzLiAgKi8KKworIyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKKyMgIGlmIFlZU1RBQ0tfVVNFX0FMTE9DQQorIyAgIGlmZGVmIF9fR05VQ19fCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYnVpbHRpbl9hbGxvY2EKKyMgICBlbGlmIGRlZmluZWQgX19CVUlMVElOX1ZBX0FSR19JTkNSCisjICAgIGluY2x1ZGUgPGFsbG9jYS5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZWxpZiBkZWZpbmVkIF9BSVgKKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19hbGxvY2EKKyMgICBlbGlmIGRlZmluZWQgX01TQ19WRVIKKyMgICAgaW5jbHVkZSA8bWFsbG9jLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisjICAgZWxzZQorIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKKyMgICAgaWYgISBkZWZpbmVkIF9BTExPQ0FfSCAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKKyMgICAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgICBpZm5kZWYgX1NURExJQl9ICisjICAgICAgZGVmaW5lIF9TVERMSUJfSCAxCisjICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmZGVmIFlZU1RBQ0tfQUxMT0MKKyAgIC8qIFBhY2lmeSBHQ0MncyBgZW1wdHkgaWYtYm9keScgd2FybmluZy4gICovCisjICBkZWZpbmUgWVlTVEFDS19GUkVFKFB0cikgZG8geyAvKiBlbXB0eSAqLzsgfSB3aGlsZSAoWVlJRCAoMCkpCisjICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCisgICAgLyogVGhlIE9TIG1pZ2h0IGd1YXJhbnRlZSBvbmx5IG9uZSBndWFyZCBwYWdlIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLAorICAgICAgIGFuZCBhIHBhZ2Ugc2l6ZSBjYW4gYmUgYXMgc21hbGwgYXMgNDA5NiBieXRlcy4gIFNvIHdlIGNhbm5vdCBzYWZlbHkKKyAgICAgICBpbnZva2UgYWxsb2NhIChOKSBpZiBOIGV4Y2VlZHMgNDA5Ni4gIFVzZSBhIHNsaWdodGx5IHNtYWxsZXIgbnVtYmVyCisgICAgICAgdG8gYWxsb3cgZm9yIGEgZmV3IGNvbXBpbGVyLWFsbG9jYXRlZCB0ZW1wb3Jhcnkgc3RhY2sgc2xvdHMuICAqLworIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gNDAzMiAvKiByZWFzb25hYmxlIGNpcmNhIDIwMDYgKi8KKyMgIGVuZGlmCisjIGVsc2UKKyMgIGRlZmluZSBZWVNUQUNLX0FMTE9DIFlZTUFMTE9DCisjICBkZWZpbmUgWVlTVEFDS19GUkVFIFlZRlJFRQorIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQorIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gWVlTSVpFX01BWElNVU0KKyMgIGVuZGlmCisjICBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiAhIGRlZmluZWQgX1NURExJQl9IIFwKKyAgICAgICAmJiAhICgoZGVmaW5lZCBZWU1BTExPQyB8fCBkZWZpbmVkIG1hbGxvYykgXAorCSAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQorIyAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgaWZuZGVmIF9TVERMSUJfSAorIyAgICBkZWZpbmUgX1NURExJQl9IIDEKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmbmRlZiBZWU1BTExPQworIyAgIGRlZmluZSBZWU1BTExPQyBtYWxsb2MKKyMgICBpZiAhIGRlZmluZWQgbWFsbG9jICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQordm9pZCAqbWFsbG9jIChZWVNJWkVfVCk7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmbmRlZiBZWUZSRUUKKyMgICBkZWZpbmUgWVlGUkVFIGZyZWUKKyMgICBpZiAhIGRlZmluZWQgZnJlZSAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3ZvaWQgZnJlZSAodm9pZCAqKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmIC8qICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRSAqLworCisKKyNpZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAorICAgICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKKwkgfHwgKGRlZmluZWQgWVlTVFlQRV9JU19UUklWSUFMICYmIFlZU1RZUEVfSVNfVFJJVklBTCkpKQorCisvKiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVtYmVyLiAgKi8KK3VuaW9uIHl5YWxsb2MKK3sKKyAgeXl0eXBlX2ludDE2IHl5c3NfYWxsb2M7CisgIFlZU1RZUEUgeXl2c19hbGxvYzsKK307CisKKy8qIFRoZSBzaXplIG9mIHRoZSBtYXhpbXVtIGdhcCBiZXR3ZWVuIG9uZSBhbGlnbmVkIHN0YWNrIGFuZCB0aGUgbmV4dC4gICovCisjIGRlZmluZSBZWVNUQUNLX0dBUF9NQVhJTVVNIChzaXplb2YgKHVuaW9uIHl5YWxsb2MpIC0gMSkKKworLyogVGhlIHNpemUgb2YgYW4gYXJyYXkgbGFyZ2UgdG8gZW5vdWdoIHRvIGhvbGQgYWxsIHN0YWNrcywgZWFjaCB3aXRoCisgICBOIGVsZW1lbnRzLiAgKi8KKyMgZGVmaW5lIFlZU1RBQ0tfQllURVMoTikgXAorICAgICAoKE4pICogKHNpemVvZiAoeXl0eXBlX2ludDE2KSArIHNpemVvZiAoWVlTVFlQRSkpIFwKKyAgICAgICsgWVlTVEFDS19HQVBfTUFYSU1VTSkKKworLyogQ29weSBDT1VOVCBvYmplY3RzIGZyb20gRlJPTSB0byBUTy4gIFRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRvCisgICBub3Qgb3ZlcmxhcC4gICovCisjIGlmbmRlZiBZWUNPUFkKKyMgIGlmIGRlZmluZWQgX19HTlVDX18gJiYgMSA8IF9fR05VQ19fCisjICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpIFwKKyAgICAgIF9fYnVpbHRpbl9tZW1jcHkgKFRvLCBGcm9tLCAoQ291bnQpICogc2l6ZW9mICgqKEZyb20pKSkKKyMgIGVsc2UKKyMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkJCVwKKyAgICAgIGRvCQkJCQlcCisJewkJCQkJXAorCSAgWVlTSVpFX1QgeXlpOwkJCQlcCisJICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5aSsrKQlcCisJICAgIChUbylbeXlpXSA9IChGcm9tKVt5eWldOwkJXAorCX0JCQkJCVwKKyAgICAgIHdoaWxlIChZWUlEICgwKSkKKyMgIGVuZGlmCisjIGVuZGlmCisKKy8qIFJlbG9jYXRlIFNUQUNLIGZyb20gaXRzIG9sZCBsb2NhdGlvbiB0byB0aGUgbmV3IG9uZS4gIFRoZQorICAgbG9jYWwgdmFyaWFibGVzIFlZU0laRSBhbmQgWVlTVEFDS1NJWkUgZ2l2ZSB0aGUgb2xkIGFuZCBuZXcgbnVtYmVyIG9mCisgICBlbGVtZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZlcyB0aGUgbmV3IGxvY2F0aW9uIG9mIHRoZQorICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJvcGVybHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQKKyAgIHN0YWNrLiAgKi8KKyMgZGVmaW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2tfYWxsb2MsIFN0YWNrKQkJCQlcCisgICAgZG8JCQkJCQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCVlZU0laRV9UIHl5bmV3Ynl0ZXM7CQkJCQkJXAorCVlZQ09QWSAoJnl5cHRyLT5TdGFja19hbGxvYywgU3RhY2ssIHl5c2l6ZSk7CQkJXAorCVN0YWNrID0gJnl5cHRyLT5TdGFja19hbGxvYzsJCQkJCVwKKwl5eW5ld2J5dGVzID0geXlzdGFja3NpemUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCisJeXlwdHIgKz0geXluZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgICB3aGlsZSAoWVlJRCAoMCkpCisKKyNlbmRpZgorCisvKiBZWUZJTkFMIC0tIFN0YXRlIG51bWJlciBvZiB0aGUgdGVybWluYXRpb24gc3RhdGUuICAqLworI2RlZmluZSBZWUZJTkFMICAxMQorLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJMRS4gICovCisjZGVmaW5lIFlZTEFTVCAgIDI5MAorCisvKiBZWU5UT0tFTlMgLS0gTnVtYmVyIG9mIHRlcm1pbmFscy4gICovCisjZGVmaW5lIFlZTlRPS0VOUyAgMzYKKy8qIFlZTk5UUyAtLSBOdW1iZXIgb2Ygbm9udGVybWluYWxzLiAgKi8KKyNkZWZpbmUgWVlOTlRTICA1MAorLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHJ1bGVzLiAgKi8KKyNkZWZpbmUgWVlOUlVMRVMgIDExOAorLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCisjZGVmaW5lIFlZTlNUQVRFUyAgMTkxCisKKy8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLworI2RlZmluZSBZWVVOREVGVE9LICAyCisjZGVmaW5lIFlZTUFYVVRPSyAgIDI5MAorCisjZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkJCQkJCQlcCisgICgodW5zaWduZWQgaW50KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0ZVtZWVhdIDogWVlVTkRFRlRPSykKKworLyogWVlUUkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dHJhbnNsYXRlW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwKKyAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwKKyAgICAgIDM1Cit9OworCisjaWYgWVlERUJVRworLyogWVlQUkhTW1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0IFJIUyBzeW1ib2wgb2YgcnVsZSBudW1iZXIgWVlOIGluCisgICBZWVJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXByaHNbXSA9Cit7CisgICAgICAgMCwgICAgIDAsICAgICAzLCAgICAgNiwgICAgIDgsICAgIDExLCAgICAxMywgICAgMTQsICAgIDE3LCAgICAyMCwKKyAgICAgIDIzLCAgICAyNiwgICAgMzEsICAgIDM2LCAgICA0MCwgICAgNDIsICAgIDQ0LCAgICA0NiwgICAgNDgsICAgIDUwLAorICAgICAgNTIsICAgIDU0LCAgICA1NiwgICAgNTgsICAgIDYwLCAgICA2MiwgICAgNjQsICAgIDY2LCAgICA2OCwgICAgNzIsCisgICAgICA3NSwgICAgNzksICAgIDgyLCAgICA4NiwgICAgODksICAgIDkwLCAgICA5MywgICAgOTYsICAgIDk5LCAgIDEwMiwKKyAgICAgMTA1LCAgIDEwOCwgICAxMTIsICAgMTE3LCAgIDEyMiwgICAxMjcsICAgMTMzLCAgIDEzNywgICAxMzgsICAgMTQyLAorICAgICAxNDMsICAgMTQ2LCAgIDE1MCwgICAxNTMsICAgMTU1LCAgIDE1OSwgICAxNjAsICAgMTYzLCAgIDE2NiwgICAxNjksCisgICAgIDE3MiwgICAxNzUsICAgMTgwLCAgIDE4NCwgICAxODcsICAgMTkyLCAgIDE5MywgICAxOTYsICAgMjAwLCAgIDIwMiwKKyAgICAgMjA2LCAgIDIwNywgICAyMTAsICAgMjEzLCAgIDIxNiwgICAyMjAsICAgMjI0LCAgIDIyOCwgICAyMzAsICAgMjM0LAorICAgICAyMzUsICAgMjM4LCAgIDI0MSwgICAyNDQsICAgMjQ4LCAgIDI1MiwgICAyNTUsICAgMjU4LCAgIDI2MSwgICAyNjIsCisgICAgIDI2NSwgICAyNjgsICAgMjcxLCAgIDI3NiwgICAyNzcsICAgMjgwLCAgIDI4MywgICAyODYsICAgMjg3LCAgIDI5MCwKKyAgICAgMjkyLCAgIDI5NCwgICAyOTcsICAgMzAwLCAgIDMwMywgICAzMDUsICAgMzA4LCAgIDMwOSwgICAzMTIsICAgMzE0LAorICAgICAzMTgsICAgMzIyLCAgIDMyNiwgICAzMjksICAgMzMzLCAgIDMzNywgICAzMzksICAgMzQxLCAgIDM0MgorfTsKKworLyogWVlSSFMgLS0gQSBgLTEnLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBydWxlcycgUkhTLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXJoc1tdID0KK3sKKyAgICAgIDM3LCAgICAgMCwgICAgLTEsICAgIDgxLCAgICAzOCwgICAgLTEsICAgIDM4LCAgICAtMSwgICAgNjMsICAgIDM5LAorICAgICAgLTEsICAgIDM5LCAgICAtMSwgICAgLTEsICAgIDM5LCAgICA0MSwgICAgLTEsICAgIDM5LCAgICA1NSwgICAgLTEsCisgICAgICAzOSwgICAgNjcsICAgIC0xLCAgICAzOSwgICAgODAsICAgIC0xLCAgICAzOSwgICAgMjYsICAgICAxLCAgICAzMSwKKyAgICAgIC0xLCAgICAzOSwgICAgNDAsICAgICAxLCAgICAzMSwgICAgLTEsICAgIDM5LCAgICAgMSwgICAgMzEsICAgIC0xLAorICAgICAgMTYsICAgIC0xLCAgICAxOCwgICAgLTEsICAgIDE5LCAgICAtMSwgICAgMjEsICAgIC0xLCAgICAxNywgICAgLTEsCisgICAgICAyMiwgICAgLTEsICAgIDIwLCAgICAtMSwgICAgMjMsICAgIC0xLCAgICAzMSwgICAgLTEsICAgIDYxLCAgICAtMSwKKyAgICAgIDcxLCAgICAtMSwgICAgNDQsICAgIC0xLCAgICA0NiwgICAgLTEsICAgIDY5LCAgICAtMSwgICAgMjYsICAgICAxLAorICAgICAgMzEsICAgIC0xLCAgICAgMSwgICAgMzEsICAgIC0xLCAgICAxMCwgICAgMjYsICAgIDMxLCAgICAtMSwgICAgNDMsCisgICAgICA0NywgICAgLTEsICAgIDExLCAgICAyNiwgICAgMzEsICAgIC0xLCAgICA0NSwgICAgNDcsICAgIC0xLCAgICAtMSwKKyAgICAgIDQ3LCAgICA0OCwgICAgLTEsICAgIDQ3LCAgICA0OSwgICAgLTEsICAgIDQ3LCAgICA3NSwgICAgLTEsICAgIDQ3LAorICAgICAgNzMsICAgIC0xLCAgICA0NywgICAgNDIsICAgIC0xLCAgICA0NywgICAgMzEsICAgIC0xLCAgICAxOSwgICAgNzgsCisgICAgICAzMSwgICAgLTEsICAgIDE4LCAgICA3OSwgICAgODIsICAgIDMxLCAgICAtMSwgICAgMjAsICAgIDgzLCAgICA4MiwKKyAgICAgIDMxLCAgICAtMSwgICAgMjEsICAgIDI2LCAgICA4MiwgICAgMzEsICAgIC0xLCAgICAyMiwgICAgODQsICAgIDg0LAorICAgICAgODIsICAgIDMxLCAgICAtMSwgICAgMjQsICAgIDUwLCAgICAzMSwgICAgLTEsICAgIC0xLCAgICA1MCwgICAgMjYsCisgICAgICA1MSwgICAgLTEsICAgIC0xLCAgICAzNCwgICAgNzksICAgIC0xLCAgICAgNywgICAgODUsICAgIDMxLCAgICAtMSwKKyAgICAgIDUyLCAgICA1NiwgICAgLTEsICAgIDgwLCAgICAtMSwgICAgNTMsICAgIDU4LCAgICA1NCwgICAgLTEsICAgIC0xLAorICAgICAgNTYsICAgIDU3LCAgICAtMSwgICAgNTYsICAgIDc1LCAgICAtMSwgICAgNTYsICAgIDczLCAgICAtMSwgICAgNTYsCisgICAgICAzMSwgICAgLTEsICAgIDU2LCAgICA0MiwgICAgLTEsICAgIDE4LCAgICA3OSwgICAgODIsICAgIDMxLCAgICAtMSwKKyAgICAgIDE5LCAgICA3OCwgICAgMzEsICAgIC0xLCAgICAxNywgICAgMzEsICAgIC0xLCAgICAyMCwgICAgMjYsICAgIDgyLAorICAgICAgMzEsICAgIC0xLCAgICAtMSwgICAgNTgsICAgIDQxLCAgICAtMSwgICAgMTQsICAgIDgzLCAgICA4MSwgICAgLTEsCisgICAgICA4MCwgICAgLTEsICAgIDU5LCAgICA2MiwgICAgNjAsICAgIC0xLCAgICAtMSwgICAgNjIsICAgIDQxLCAgICAtMSwKKyAgICAgIDYyLCAgICA2NywgICAgLTEsICAgIDYyLCAgICA1NSwgICAgLTEsICAgICAzLCAgICA3OSwgICAgODEsICAgIC0xLAorICAgICAgIDQsICAgIDc5LCAgICAzMSwgICAgLTEsICAgIDY0LCAgICA3NiwgICAgNzQsICAgIC0xLCAgICA4MCwgICAgLTEsCisgICAgICA2NSwgICAgNjgsICAgIDY2LCAgICAtMSwgICAgLTEsICAgIDY4LCAgICA0MSwgICAgLTEsICAgIDY4LCAgICA2NywKKyAgICAgIC0xLCAgICA2OCwgICAgNTUsICAgIC0xLCAgICAgNiwgICAgNzksICAgIDMxLCAgICAtMSwgICAgIDksICAgIDc5LAorICAgICAgMzEsICAgIC0xLCAgICA3MCwgICAgNzQsICAgIC0xLCAgICAxMiwgICAgMzEsICAgIC0xLCAgICA3MiwgICAgMTMsCisgICAgICAtMSwgICAgLTEsICAgIDc0LCAgICA3NSwgICAgLTEsICAgIDc0LCAgICAzMSwgICAgLTEsICAgIDc0LCAgICA0MiwKKyAgICAgIC0xLCAgICAxNiwgICAgMjUsICAgIDgzLCAgICAzMSwgICAgLTEsICAgIC0xLCAgICA3NiwgICAgNzcsICAgIC0xLAorICAgICAgNzYsICAgIDMxLCAgICAtMSwgICAgMjMsICAgIDgyLCAgICAtMSwgICAgLTEsICAgIDc5LCAgICA4MiwgICAgLTEsCisgICAgICAyNiwgICAgLTEsICAgIDI3LCAgICAtMSwgICAgIDUsICAgIDMxLCAgICAtMSwgICAgIDgsICAgIDMxLCAgICAtMSwKKyAgICAgIDE1LCAgICAzMSwgICAgLTEsICAgIDMxLCAgICAtMSwgICAgODEsICAgIDMxLCAgICAtMSwgICAgLTEsICAgIDE0LAorICAgICAgODMsICAgIC0xLCAgICA4NCwgICAgLTEsICAgIDg0LCAgICAzNCwgICAgODQsICAgIC0xLCAgICA4NCwgICAgMjgsCisgICAgICA4NCwgICAgLTEsICAgIDMwLCAgICA4MywgICAgMjksICAgIC0xLCAgICAzNSwgICAgODMsICAgIC0xLCAgICA4MywKKyAgICAgIDMyLCAgICA4MywgICAgLTEsICAgIDgzLCAgICAzMywgICAgODMsICAgIC0xLCAgICAyNiwgICAgLTEsICAgIDI3LAorICAgICAgLTEsICAgIC0xLCAgICAyNiwgICAgLTEKK307CisKKy8qIFlZUkxJTkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXlybGluZVtdID0KK3sKKyAgICAgICAwLCAgIDEwOCwgICAxMDgsICAgMTA4LCAgIDExMCwgICAxMTAsICAgMTEyLCAgIDExNCwgICAxMTUsICAgMTE2LAorICAgICAxMTcsICAgMTE4LCAgIDExOSwgICAxMjMsICAgMTI3LCAgIDEyNywgICAxMjcsICAgMTI3LCAgIDEyNywgICAxMjcsCisgICAgIDEyNywgICAxMjcsICAgMTMxLCAgIDEzMiwgICAxMzMsICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTQwLCAgIDE0MSwKKyAgICAgMTQ3LCAgIDE1NSwgICAxNjEsICAgMTY5LCAgIDE3OSwgICAxODEsICAgMTgyLCAgIDE4MywgICAxODQsICAgMTg1LAorICAgICAxODYsICAgMTg5LCAgIDE5NywgICAyMDMsICAgMjEzLCAgIDIxOSwgICAyMjUsICAgMjI4LCAgIDIzMCwgICAyNDEsCisgICAgIDI0MiwgICAyNDcsICAgMjU2LCAgIDI2MSwgICAyNjksICAgMjcyLCAgIDI3NCwgICAyNzUsICAgMjc2LCAgIDI3NywKKyAgICAgMjc4LCAgIDI4MSwgICAyODcsICAgMjk4LCAgIDMwNCwgICAzMTQsICAgMzE2LCAgIDMyMSwgICAzMjksICAgMzM3LAorICAgICAzNDAsICAgMzQyLCAgIDM0MywgICAzNDQsICAgMzQ5LCAgIDM1NiwgICAzNjMsICAgMzY4LCAgIDM3NiwgICAzNzksCisgICAgIDM4MSwgICAzODIsICAgMzgzLCAgIDM4NiwgICAzOTQsICAgNDAxLCAgIDQwOCwgICA0MTQsICAgNDIxLCAgIDQyMywKKyAgICAgNDI0LCAgIDQyNSwgICA0MjgsICAgNDM2LCAgIDQzOCwgICA0MzksICAgNDQyLCAgIDQ0OSwgICA0NTEsICAgNDU2LAorICAgICA0NTcsICAgNDYwLCAgIDQ2MSwgICA0NjIsICAgNDY2LCAgIDQ2NywgICA0NzAsICAgNDcxLCAgIDQ3NCwgICA0NzUsCisgICAgIDQ3NiwgICA0NzcsICAgNDc4LCAgIDQ3OSwgICA0ODAsICAgNDgzLCAgIDQ4NCwgICA0ODcsICAgNDg4Cit9OworI2VuZGlmCisKKyNpZiBZWURFQlVHIHx8IFlZRVJST1JfVkVSQk9TRSB8fCBZWVRPS0VOX1RBQkxFCisvKiBZWVROQU1FW1NZTUJPTC1OVU1dIC0tIFN0cmluZyBuYW1lIG9mIHRoZSBzeW1ib2wgU1lNQk9MLU5VTS4KKyAgIEZpcnN0LCB0aGUgdGVybWluYWxzLCB0aGVuLCBzdGFydGluZyBhdCBZWU5UT0tFTlMsIG5vbnRlcm1pbmFscy4gICovCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KK3sKKyAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJUX01BSU5NRU5VIiwgIlRfTUVOVSIsICJUX0VORE1FTlUiLAorICAiVF9TT1VSQ0UiLCAiVF9DSE9JQ0UiLCAiVF9FTkRDSE9JQ0UiLCAiVF9DT01NRU5UIiwgIlRfQ09ORklHIiwKKyAgIlRfTUVOVUNPTkZJRyIsICJUX0hFTFAiLCAiVF9IRUxQVEVYVCIsICJUX0lGIiwgIlRfRU5ESUYiLCAiVF9ERVBFTkRTIiwKKyAgIlRfT1BUSU9OQUwiLCAiVF9QUk9NUFQiLCAiVF9UWVBFIiwgIlRfREVGQVVMVCIsICJUX1NFTEVDVCIsICJUX1JBTkdFIiwKKyAgIlRfVklTSUJMRSIsICJUX09QVElPTiIsICJUX09OIiwgIlRfV09SRCIsICJUX1dPUkRfUVVPVEUiLCAiVF9VTkVRVUFMIiwKKyAgIlRfQ0xPU0VfUEFSRU4iLCAiVF9PUEVOX1BBUkVOIiwgIlRfRU9MIiwgIlRfT1IiLCAiVF9BTkQiLCAiVF9FUVVBTCIsCisgICJUX05PVCIsICIkYWNjZXB0IiwgImlucHV0IiwgInN0YXJ0IiwgInN0bXRfbGlzdCIsICJvcHRpb25fbmFtZSIsCisgICJjb21tb25fc3RtdCIsICJvcHRpb25fZXJyb3IiLCAiY29uZmlnX2VudHJ5X3N0YXJ0IiwgImNvbmZpZ19zdG10IiwKKyAgIm1lbnVjb25maWdfZW50cnlfc3RhcnQiLCAibWVudWNvbmZpZ19zdG10IiwgImNvbmZpZ19vcHRpb25fbGlzdCIsCisgICJjb25maWdfb3B0aW9uIiwgInN5bWJvbF9vcHRpb24iLCAic3ltYm9sX29wdGlvbl9saXN0IiwKKyAgInN5bWJvbF9vcHRpb25fYXJnIiwgImNob2ljZSIsICJjaG9pY2VfZW50cnkiLCAiY2hvaWNlX2VuZCIsCisgICJjaG9pY2Vfc3RtdCIsICJjaG9pY2Vfb3B0aW9uX2xpc3QiLCAiY2hvaWNlX29wdGlvbiIsICJjaG9pY2VfYmxvY2siLAorICAiaWZfZW50cnkiLCAiaWZfZW5kIiwgImlmX3N0bXQiLCAiaWZfYmxvY2siLCAibWFpbm1lbnVfc3RtdCIsICJtZW51IiwKKyAgIm1lbnVfZW50cnkiLCAibWVudV9lbmQiLCAibWVudV9zdG10IiwgIm1lbnVfYmxvY2siLCAic291cmNlX3N0bXQiLAorICAiY29tbWVudCIsICJjb21tZW50X3N0bXQiLCAiaGVscF9zdGFydCIsICJoZWxwIiwgImRlcGVuZHNfbGlzdCIsCisgICJkZXBlbmRzIiwgInZpc2liaWxpdHlfbGlzdCIsICJ2aXNpYmxlIiwgInByb21wdF9zdG10X29wdCIsICJwcm9tcHQiLAorICAiZW5kIiwgIm5sIiwgImlmX2V4cHIiLCAiZXhwciIsICJzeW1ib2wiLCAid29yZF9vcHQiLCAwCit9OworI2VuZGlmCisKKyMgaWZkZWYgWVlQUklOVAorLyogWVlUT0tOVU1bWVlMRVgtTlVNXSAtLSBJbnRlcm5hbCB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0bworICAgdG9rZW4gWVlMRVgtTlVNLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10gPQoreworICAgICAgIDAsICAgMjU2LCAgIDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAyNjEsICAgMjYyLCAgIDI2MywgICAyNjQsCisgICAgIDI2NSwgICAyNjYsICAgMjY3LCAgIDI2OCwgICAyNjksICAgMjcwLCAgIDI3MSwgICAyNzIsICAgMjczLCAgIDI3NCwKKyAgICAgMjc1LCAgIDI3NiwgICAyNzcsICAgMjc4LCAgIDI3OSwgICAyODAsICAgMjgxLCAgIDI4MiwgICAyODMsICAgMjg0LAorICAgICAyODUsICAgMjg2LCAgIDI4NywgICAyODgsICAgMjg5LCAgIDI5MAorfTsKKyMgZW5kaWYKKworLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjFbXSA9Cit7CisgICAgICAgMCwgICAgMzYsICAgIDM3LCAgICAzNywgICAgMzgsICAgIDM4LCAgICAzOSwgICAgMzksICAgIDM5LCAgICAzOSwKKyAgICAgIDM5LCAgICAzOSwgICAgMzksICAgIDM5LCAgICA0MCwgICAgNDAsICAgIDQwLCAgICA0MCwgICAgNDAsICAgIDQwLAorICAgICAgNDAsICAgIDQwLCAgICA0MSwgICAgNDEsICAgIDQxLCAgICA0MSwgICAgNDEsICAgIDQxLCAgICA0MiwgICAgNDIsCisgICAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ3LCAgICA0NywgICAgNDcsICAgIDQ3LCAgICA0NywKKyAgICAgIDQ3LCAgICA0OCwgICAgNDgsICAgIDQ4LCAgICA0OCwgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTAsICAgIDUxLAorICAgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICA1NiwgICAgNTYsICAgIDU2LCAgICA1NiwgICAgNTYsCisgICAgICA1NiwgICAgNTcsICAgIDU3LCAgICA1NywgICAgNTcsICAgIDU4LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwKKyAgICAgIDYyLCAgICA2MiwgICAgNjIsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LAorICAgICAgNjgsICAgIDY4LCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzQsCisgICAgICA3NCwgICAgNzQsICAgIDc1LCAgICA3NiwgICAgNzYsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc4LCAgICA3OSwKKyAgICAgIDc5LCAgICA4MCwgICAgODAsICAgIDgwLCAgICA4MSwgICAgODEsICAgIDgyLCAgICA4MiwgICAgODMsICAgIDgzLAorICAgICAgODMsICAgIDgzLCAgICA4MywgICAgODMsICAgIDgzLCAgICA4NCwgICAgODQsICAgIDg1LCAgICA4NQorfTsKKworLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xzIGNvbXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIyW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDQsICAgICA0LCAgICAgMywgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKKyAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAyLAorICAgICAgIDMsICAgICAyLCAgICAgMywgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNCwgICAgIDQsICAgICA1LCAgICAgMywgICAgIDAsICAgICAzLCAgICAgMCwKKyAgICAgICAyLCAgICAgMywgICAgIDIsICAgICAxLCAgICAgMywgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICA0LCAgICAgMywgICAgIDIsICAgICA0LCAgICAgMCwgICAgIDIsICAgICAzLCAgICAgMSwgICAgIDMsCisgICAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMCwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDAsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDEsCisgICAgICAgMSwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMCwgICAgIDIsICAgICAxLCAgICAgMywKKyAgICAgICAzLCAgICAgMywgICAgIDIsICAgICAzLCAgICAgMywgICAgIDEsICAgICAxLCAgICAgMCwgICAgIDEKK307CisKKy8qIFlZREVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcnVsZSB0byByZWR1Y2Ugd2l0aCBpbiBzdGF0ZQorICAgU1RBVEUtTlVNIHdoZW4gWVlUQUJMRSBkb2Vzbid0IHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgdG8gZG8uICBaZXJvCisgICBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5ZGVmYWN0W10gPQoreworICAgICAgIDYsICAgICAwLCAgIDEwNCwgICAgIDAsICAgICAzLCAgICAgMCwgICAgIDYsICAgICA2LCAgICA5OSwgICAxMDAsCisgICAgICAgMCwgICAgIDEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExNywgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE0LCAgICAxOCwgICAgMTUsICAgIDE2LCAgICAyMCwgICAgMTcsICAgIDE5LAorICAgICAgMjEsICAgICAwLCAgICAyMiwgICAgIDAsICAgICA3LCAgICAzNCwgICAgMjUsICAgIDM0LCAgICAyNiwgICAgNTUsCisgICAgICA2NSwgICAgIDgsICAgIDcwLCAgICAyMywgICAgOTMsICAgIDc5LCAgICAgOSwgICAgMjcsICAgIDg4LCAgICAyNCwKKyAgICAgIDEwLCAgICAgMCwgICAxMDUsICAgICAyLCAgICA3NCwgICAgMTMsICAgICAwLCAgIDEwMSwgICAgIDAsICAgMTE4LAorICAgICAgIDAsICAgMTAyLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExNSwgICAxMTYsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDEwOCwgICAxMDMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA4OCwKKyAgICAgICAwLCAgICAgMCwgICAgNzUsICAgIDgzLCAgICA1MSwgICAgODQsICAgIDMwLCAgICAzMiwgICAgIDAsICAgMTEyLAorICAgICAgIDAsICAgICAwLCAgICA2NywgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgOTcsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDQ3LCAgICAgMCwgICAgNDAsICAgIDM5LCAgICAzNSwKKyAgICAgIDM2LCAgICAgMCwgICAgMzgsICAgIDM3LCAgICAgMCwgICAgIDAsICAgIDk3LCAgICAgMCwgICAgNTksICAgIDYwLAorICAgICAgNTYsICAgIDU4LCAgICA1NywgICAgNjYsICAgIDU0LCAgICA1MywgICAgNzEsICAgIDczLCAgICA2OSwgICAgNzIsCisgICAgICA2OCwgICAxMDYsICAgIDk1LCAgICAgMCwgICAgOTQsICAgIDgwLCAgICA4MiwgICAgNzgsICAgIDgxLCAgICA3NywKKyAgICAgIDkwLCAgICA5MSwgICAgODksICAgMTExLCAgIDExMywgICAxMTQsICAgMTEwLCAgIDEwOSwgICAgMjksICAgIDg2LAorICAgICAgIDAsICAgMTA2LCAgICAgMCwgICAxMDYsICAgMTA2LCAgIDEwNiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgODcsCisgICAgICA2MywgICAxMDYsICAgICAwLCAgIDEwNiwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsICAgIDQxLCAgICA5OCwKKyAgICAgICAwLCAgICAgMCwgICAxMDYsICAgIDQ5LCAgICA0NiwgICAgMjgsICAgICAwLCAgICA2MiwgICAgIDAsICAgMTA3LAorICAgICAgOTIsICAgIDQyLCAgICA0MywgICAgNDQsICAgICAwLCAgICAgMCwgICAgNDgsICAgIDYxLCAgICA2NCwgICAgNDUsCisgICAgICA1MAorfTsKKworLyogWVlERUZHT1RPW05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eWRlZmdvdG9bXSA9Cit7CisgICAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgMzMsICAgIDM0LCAgIDEwOCwgICAgMzUsICAgIDM2LCAgICAzNywKKyAgICAgIDM4LCAgICA3NCwgICAxMDksICAgMTEwLCAgIDE1NywgICAxODYsICAgIDM5LCAgICA0MCwgICAxMjQsICAgIDQxLAorICAgICAgNzYsICAgMTIwLCAgICA3NywgICAgNDIsICAgMTI4LCAgICA0MywgICAgNzgsICAgICA2LCAgICA0NCwgICAgNDUsCisgICAgIDEzNywgICAgNDYsICAgIDgwLCAgICA0NywgICAgNDgsICAgIDQ5LCAgIDExMSwgICAxMTIsICAgIDgxLCAgIDExMywKKyAgICAgIDc5LCAgIDEzNCwgICAxNTIsICAgMTUzLCAgICA1MCwgICAgIDcsICAgMTY1LCAgICA2OSwgICAgNzAsICAgIDYwCit9OworCisvKiBZWVBBQ1RbU1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKKyAgIFNUQVRFLU5VTS4gICovCisjZGVmaW5lIFlZUEFDVF9OSU5GIC05MAorc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBhY3RbXSA9Cit7CisgICAgICAgNCwgICAgNDIsICAgLTkwLCAgICA5NiwgICAtOTAsICAgMTExLCAgIC05MCwgICAgMTUsICAgLTkwLCAgIC05MCwKKyAgICAgIDc1LCAgIC05MCwgICAgODIsICAgIDQyLCAgIDEwNCwgICAgNDIsICAgMTEwLCAgIDEwNywgICAgNDIsICAgMTE1LAorICAgICAxMjUsICAgIC00LCAgIDEyMSwgICAtOTAsICAgLTkwLCAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwgICAtOTAsCisgICAgIC05MCwgICAxNjIsICAgLTkwLCAgIDE2MywgICAtOTAsICAgLTkwLCAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwKKyAgICAgLTkwLCAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwgICAtOTAsICAgLTkwLAorICAgICAtOTAsICAgMTM5LCAgIC05MCwgICAtOTAsICAgMTM4LCAgIC05MCwgICAxNDIsICAgLTkwLCAgIDE0MywgICAtOTAsCisgICAgIDE1MiwgICAtOTAsICAgMTY0LCAgIDE2NywgICAxNjgsICAgLTkwLCAgIC05MCwgICAgLTQsICAgIC00LCAgICA3NywKKyAgICAgLTE4LCAgIC05MCwgICAxNzcsICAgMTg1LCAgICAzMywgICAgNzEsICAgMTk1LCAgIDI0NywgICAyMzYsICAgIC0yLAorICAgICAyMzYsICAgMTcxLCAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwgICAtOTAsICAgLTkwLCAgICA0MSwgICAtOTAsCisgICAgICAtNCwgICAgLTQsICAgMTM4LCAgICA5NywgICAgOTcsICAgLTkwLCAgIC05MCwgICAxODYsICAgMTg3LCAgIDE5NCwKKyAgICAgIDQyLCAgICA0MiwgICAgLTQsICAgMTk2LCAgICA5NywgICAtOTAsICAgMjE5LCAgIC05MCwgICAtOTAsICAgLTkwLAorICAgICAtOTAsICAgMjEwLCAgIC05MCwgICAtOTAsICAgMjA0LCAgICA0MiwgICAgNDIsICAgMTk5LCAgIC05MCwgICAtOTAsCisgICAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwKKyAgICAgLTkwLCAgIDIyMiwgICAtOTAsICAgMjIzLCAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwgICAtOTAsICAgLTkwLAorICAgICAtOTAsICAgLTkwLCAgIC05MCwgICAtOTAsICAgMjE1LCAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwgICAtOTAsCisgICAgICAtNCwgICAyMjIsICAgMjI4LCAgIDIyMiwgICAgLTUsICAgMjIyLCAgICA5NywgICAgMzUsICAgMjI5LCAgIC05MCwKKyAgICAgLTkwLCAgIDIyMiwgICAyMzIsICAgMjIyLCAgICAtNCwgICAtOTAsICAgMTM1LCAgIDIzMywgICAtOTAsICAgLTkwLAorICAgICAyMzQsICAgMjM1LCAgIDIyMiwgICAyNDAsICAgLTkwLCAgIC05MCwgICAyMzcsICAgLTkwLCAgIDIzOSwgICAtMTMsCisgICAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwgICAyNDQsICAgIDQyLCAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwKKyAgICAgLTkwCit9OworCisvKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBnb3RvW10gPQoreworICAgICAtOTAsICAgLTkwLCAgIDI2OSwgICAyNzEsICAgLTkwLCAgICAyMywgICAtNzAsICAgLTkwLCAgIC05MCwgICAtOTAsCisgICAgIC05MCwgICAyNDMsICAgLTkwLCAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwgICAtOTAsICAgLTkwLCAgIC00OCwKKyAgICAgLTkwLCAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwgICAtOTAsICAgLTkwLAorICAgICAtOTAsICAgLTIwLCAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwgICAtOTAsICAgMjA2LCAgIDIwNSwgICAtNjgsCisgICAgIC05MCwgICAtOTAsICAgMTY5LCAgICAtMSwgICAgMjcsICAgIC03LCAgIDExOCwgICAtNjYsICAgLTg5LCAgIC05MAorfTsKKworLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCisgICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gKKyAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiB6ZXJvLCBkbyB3aGF0IFlZREVGQUNUIHNheXMuCisgICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCisjZGVmaW5lIFlZVEFCTEVfTklORiAtODYKK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXl0YWJsZVtdID0KK3sKKyAgICAgIDEwLCAgICA4OCwgICAgODksICAgIDU0LCAgIDE0NiwgICAxNDcsICAgMTE5LCAgICAgMSwgICAxMjIsICAgMTY0LAorICAgICAgOTMsICAgMTQxLCAgICA1NiwgICAxNDIsICAgIDU4LCAgIDE1NiwgICAgOTQsICAgIDYyLCAgICAgMSwgICAgOTAsCisgICAgICA5MSwgICAxMzEsICAgIDY1LCAgICA2NiwgICAxNDQsICAgMTQ1LCAgICA2NywgICAgOTAsICAgIDkxLCAgIDEzMiwKKyAgICAgMTI3LCAgICA2OCwgICAxMzYsICAgLTMxLCAgICA5NywgICAgIDIsICAgMTU0LCAgIC0zMSwgICAtMzEsICAgLTMxLAorICAgICAtMzEsICAgLTMxLCAgIC0zMSwgICAtMzEsICAgLTMxLCAgICA5OCwgICAgNTIsICAgLTMxLCAgIC0zMSwgICAgOTksCisgICAgIC0zMSwgICAxMDAsICAgMTAxLCAgIDEwMiwgICAxMDMsICAgMTA0LCAgIC0zMSwgICAxMDUsICAgMTI5LCAgIDEwNiwKKyAgICAgMTM4LCAgIDE3MywgICAgOTIsICAgMTQxLCAgIDEwNywgICAxNDIsICAgMTc0LCAgIDE3MiwgICAgIDgsICAgICA5LAorICAgICAxNDMsICAgLTMzLCAgICA5NywgICAgOTAsICAgIDkxLCAgIC0zMywgICAtMzMsICAgLTMzLCAgIC0zMywgICAtMzMsCisgICAgIC0zMywgICAtMzMsICAgLTMzLCAgICA5OCwgICAxNjYsICAgLTMzLCAgIC0zMywgICAgOTksICAgLTMzLCAgIDEwMCwKKyAgICAgMTAxLCAgIDEwMiwgICAxMDMsICAgMTA0LCAgIC0zMywgICAxMDUsICAgIDExLCAgIDEwNiwgICAxNzksICAgMTUxLAorICAgICAxMjMsICAgMTI2LCAgIDEwNywgICAxMzUsICAgMTI1LCAgIDEzMCwgICAgIDIsICAgMTM5LCAgICAgMiwgICAgOTAsCisgICAgICA5MSwgICAgLTUsICAgIDEyLCAgICA1NSwgICAxNjEsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywKKyAgICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDY1LCAgICA2NiwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LAorICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICA1NywgICAgNTksICAgIDMxLCAgICA2MSwgICAgLTQsCisgICAgICAxMiwgICAgNjMsICAgIDMyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwKKyAgICAgIDIwLCAgICA2NCwgICAgNzEsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LAorICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgNzIsICAgIDczLCAgICAzMSwgICAxODAsICAgIDkwLCAgICA5MSwgICAgNTIsCisgICAgICAzMiwgICAtODUsICAgIDk3LCAgICA4MiwgICAgODMsICAgLTg1LCAgIC04NSwgICAtODUsICAgLTg1LCAgIC04NSwKKyAgICAgLTg1LCAgIC04NSwgICAtODUsICAgIDg0LCAgIDE5MCwgICAtODUsICAgLTg1LCAgICA5OSwgICAtODUsICAgLTg1LAorICAgICAtODUsICAgLTg1LCAgIC04NSwgICAtODUsICAgLTg1LCAgICA4NSwgICAgOTcsICAgMTA2LCAgICA4NiwgICAgODcsCisgICAgIC01MiwgICAtNTIsICAgMTQwLCAgIC01MiwgICAtNTIsICAgLTUyLCAgIC01MiwgICAgOTgsICAgIDk1LCAgIC01MiwKKyAgICAgLTUyLCAgICA5OSwgICAxMTQsICAgMTE1LCAgIDExNiwgICAxMTcsICAgIDk2LCAgIDE0OCwgICAxNDksICAgMTUwLAorICAgICAxNTgsICAgMTA2LCAgIDE1NSwgICAxNTksICAgIDk3LCAgIDE2MywgICAxMTgsICAgLTc2LCAgIC03NiwgICAtNzYsCisgICAgIC03NiwgICAtNzYsICAgLTc2LCAgIC03NiwgICAtNzYsICAgMTYwLCAgIDE2NCwgICAtNzYsICAgLTc2LCAgICA5OSwKKyAgICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgOTEsICAgMTA2LAorICAgICAgMjEsICAgIDIyLCAgICAxNCwgICAgMTUsICAgMTQwLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAxNjgsCisgICAgIDE3NSwgICAgMjEsICAgIDIyLCAgIDE3NywgICAxODEsICAgMTgyLCAgIDE4MywgICAgMzIsICAgMTg3LCAgIDE2NywKKyAgICAgMTg4LCAgIDE2OSwgICAxNzAsICAgMTcxLCAgIDE4NSwgICAxODksICAgIDUzLCAgICA1MSwgICAgMzIsICAgMTc2LAorICAgICAgNzUsICAgMTc4LCAgIDEyMSwgICAgIDAsICAgMTMzLCAgIDE2MiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDE4NAorfTsKKworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eWNoZWNrW10gPQoreworICAgICAgIDEsICAgIDY3LCAgICA2OCwgICAgMTAsICAgIDkzLCAgICA5NCwgICAgNzYsICAgICAzLCAgICA3NiwgICAgMTQsCisgICAgICAyOCwgICAgODEsICAgIDEzLCAgICA4MSwgICAgMTUsICAgMTA0LCAgICAzNCwgICAgMTgsICAgICAzLCAgICAzMiwKKyAgICAgIDMzLCAgICAyMywgICAgMjYsICAgIDI3LCAgICA5MCwgICAgOTEsICAgIDMwLCAgICAzMiwgICAgMzMsICAgIDMxLAorICAgICAgNzgsICAgIDM1LCAgICA4MCwgICAgIDAsICAgICAxLCAgICAzMSwgICAxMDIsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAzMSwgICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgNzgsICAgIDI2LAorICAgICAgODAsICAgIDI2LCAgICA2OSwgICAxMzMsICAgIDMxLCAgIDEzMywgICAgMzEsICAgMTU2LCAgICAyNiwgICAgMjcsCisgICAgICAyOSwgICAgIDAsICAgICAxLCAgICAzMiwgICAgMzMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKKyAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgIDE1MCwgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgIDAsICAgIDI2LCAgIDE2NCwgICAxMDAsCisgICAgICA3NywgICAgNzgsICAgIDMxLCAgICA4MCwgICAgNzcsICAgIDc4LCAgICAzMSwgICAgODAsICAgIDMxLCAgICAzMiwKKyAgICAgIDMzLCAgICAgMCwgICAgIDEsICAgIDMxLCAgIDExNSwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAorICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMjYsICAgIDI3LCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDMxLCAgICAyNiwgICAgMjYsICAgIDMxLCAgICAgMCwKKyAgICAgICAxLCAgICAyNiwgICAgMzEsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLAorICAgICAgMTEsICAgIDI2LCAgICAzMSwgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsCisgICAgICAyMSwgICAgMjIsICAgIDIzLCAgICAgMSwgICAgIDEsICAgIDI2LCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzMSwKKyAgICAgIDMxLCAgICAgMCwgICAgIDEsICAgIDMxLCAgICAzMSwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAorICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMzEsICAgMTg1LCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDMxLCAgICAgMSwgICAgMjYsICAgIDMxLCAgICAzMSwKKyAgICAgICA1LCAgICAgNiwgICAgMzEsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMzEsICAgIDE0LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMzEsICAgIDMxLCAgICAzMSwgICAgMjUsCisgICAgICAgMSwgICAgMjYsICAgIDI2LCAgICAxMywgICAgIDEsICAgIDI2LCAgICAzMSwgICAgIDQsICAgICA1LCAgICAgNiwKKyAgICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMzEsICAgIDE0LCAgICAxNCwgICAgMTUsICAgIDE2LAorICAgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAzMywgICAgMjYsCisgICAgICAxNCwgICAgMTUsICAgICA1LCAgICAgNiwgICAgMzEsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAzMSwKKyAgICAgIDMxLCAgICAxNCwgICAgMTUsICAgIDMxLCAgICAzMSwgICAgMzEsICAgIDMxLCAgICAzMSwgICAgMzEsICAgMTUxLAorICAgICAgMzEsICAgMTUzLCAgIDE1NCwgICAxNTUsICAgIDM0LCAgICAzMSwgICAgIDcsICAgICA2LCAgICAzMSwgICAxNjEsCisgICAgICAzNywgICAxNjMsICAgIDc2LCAgICAtMSwgICAgNzksICAgMTE2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgMTcyCit9OworCisvKiBZWVNUT1NbU1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0aGUpIGFjY2Vzc2luZworICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5VTS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0KK3sKKyAgICAgICAwLCAgICAgMywgICAgMzEsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDYzLCAgICA4MSwgICAgMjYsICAgIDI3LAorICAgICAgNzksICAgICAwLCAgICAgMSwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsCisgICAgICAxMSwgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKKyAgICAgIDIzLCAgICAyNiwgICAgMzEsICAgIDQwLCAgICA0MSwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDUyLAorICAgICAgNTMsICAgIDU1LCAgICA1OSwgICAgNjEsICAgIDY0LCAgICA2NSwgICAgNjcsICAgIDY5LCAgICA3MCwgICAgNzEsCisgICAgICA4MCwgICAgMzksICAgIDMxLCAgICAzOCwgICAgODEsICAgIDMxLCAgICA3OSwgICAgMzEsICAgIDc5LCAgICAyNiwKKyAgICAgIDg1LCAgICAzMSwgICAgNzksICAgIDI2LCAgICAyNiwgICAgMjYsICAgIDI3LCAgICAzMCwgICAgMzUsICAgIDgzLAorICAgICAgODQsICAgIDMxLCAgICAgMSwgICAgIDEsICAgIDQ3LCAgICA0NywgICAgNTYsICAgIDU4LCAgICA2MiwgICAgNzYsCisgICAgICA2OCwgICAgNzQsICAgIDMxLCAgICAzMSwgICAgMzEsICAgIDMxLCAgICAzMSwgICAgMzEsICAgIDgzLCAgICA4MywKKyAgICAgIDMyLCAgICAzMywgICAgODEsICAgIDI4LCAgICAzNCwgICAgMzEsICAgIDMxLCAgICAgMSwgICAgMTIsICAgIDE2LAorICAgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyNCwgICAgMjYsICAgIDMxLCAgICA0MiwgICAgNDgsCisgICAgICA0OSwgICAgNzIsICAgIDczLCAgICA3NSwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDMxLCAgICA0MiwKKyAgICAgIDU3LCAgICA3MywgICAgNzUsICAgIDQxLCAgICA1NCwgICAgODAsICAgIDQxLCAgICA1NSwgICAgNjAsICAgIDY3LAorICAgICAgODAsICAgIDIzLCAgICAzMSwgICAgNzQsICAgIDc3LCAgICA0MSwgICAgNTUsICAgIDY2LCAgICA2NywgICAgODAsCisgICAgICAzMSwgICAgNDIsICAgIDc1LCAgICAyOSwgICAgODMsICAgIDgzLCAgICA4NCwgICAgODQsICAgIDMxLCAgICAzMSwKKyAgICAgIDI1LCAgICA3OSwgICAgNzgsICAgIDc5LCAgICA4MywgICAgMjYsICAgIDg0LCAgICA1MCwgICAgIDEsICAgIDEzLAorICAgICAgMzEsICAgIDc5LCAgICA3OCwgICAgMjYsICAgIDE0LCAgICA4MiwgICAgODMsICAgIDgyLCAgICAzMSwgICAgODIsCisgICAgICA4MiwgICAgODIsICAgIDg0LCAgICAyNiwgICAgMzEsICAgIDMxLCAgICA4MiwgICAgMzEsICAgIDgyLCAgICA4MywKKyAgICAgIDMxLCAgICAzMSwgICAgMzEsICAgIDMxLCAgICA4MiwgICAgMzQsICAgIDUxLCAgICAzMSwgICAgMzEsICAgIDMxLAorICAgICAgNzkKK307CisKKyNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3RhdHVzID0gMCkKKyNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVNUFRZKQorI2RlZmluZSBZWUVNUFRZCQkoLTIpCisjZGVmaW5lIFlZRU9GCQkwCisKKyNkZWZpbmUgWVlBQ0NFUFQJZ290byB5eWFjY2VwdGxhYgorI2RlZmluZSBZWUFCT1JUCQlnb3RvIHl5YWJvcnRsYWIKKyNkZWZpbmUgWVlFUlJPUgkJZ290byB5eWVycm9ybGFiCisKKworLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQorICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KKyAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgKi8KKworI2RlZmluZSBZWUZBSUwJCWdvdG8geXllcnJsYWIKKworI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCisKKyNkZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZhbHVlKQkJCQkJXAorZG8JCQkJCQkJCVwKKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09IDEpCQkJCVwKKyAgICB7CQkJCQkJCQlcCisgICAgICB5eWNoYXIgPSAoVG9rZW4pOwkJCQkJCVwKKyAgICAgIHl5bHZhbCA9IChWYWx1ZSk7CQkJCQkJXAorICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwkJCQlcCisgICAgICBZWVBPUFNUQUNLICgxKTsJCQkJCQlcCisgICAgICBnb3RvIHl5YmFja3VwOwkJCQkJCVwKKyAgICB9CQkJCQkJCQlcCisgIGVsc2UJCQkJCQkJCVwKKyAgICB7CQkJCQkJCQlcCisgICAgICB5eWVycm9yIChZWV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKSk7IFwKKyAgICAgIFlZRVJST1I7CQkJCQkJCVwKKyAgICB9CQkJCQkJCQlcCit3aGlsZSAoWVlJRCAoMCkpCisKKworI2RlZmluZSBZWVRFUlJPUgkxCisjZGVmaW5lIFlZRVJSQ09ERQkyNTYKKworCisvKiBZWUxMT0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhTWzFdIHRvIFJIU1tOXS4KKyAgIElmIE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0aGUgZW1wdHkgbG9jYXRpb24gd2hpY2ggZW5kcworICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhTWzBdIChhbHdheXMgZGVmaW5lZCkuICAqLworCisjZGVmaW5lIFlZUkhTTE9DKFJocywgSykgKChSaHMpW0tdKQorI2lmbmRlZiBZWUxMT0NfREVGQVVMVAorIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKQkJCQlcCisgICAgZG8JCQkJCQkJCQlcCisgICAgICBpZiAoWVlJRCAoTikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7CQkJCQkJCQlcCisJICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfbGluZTsJXAorCSAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2NvbHVtbjsJXAorCSAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfbGluZTsJCVwKKwkgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsJXAorCX0JCQkJCQkJCVwKKyAgICAgIGVsc2UJCQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gKEN1cnJlbnQpLmxhc3RfbGluZSAgID0JCVwKKwkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9saW5lOwkJCQlcCisJICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gKEN1cnJlbnQpLmxhc3RfY29sdW1uID0JCVwKKwkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9jb2x1bW47CQkJCVwKKwl9CQkJCQkJCQlcCisgICAgd2hpbGUgKFlZSUQgKDApKQorI2VuZGlmCisKKworLyogWVlfTE9DQVRJT05fUFJJTlQgLS0gUHJpbnQgdGhlIGxvY2F0aW9uIG9uIHRoZSBzdHJlYW0uCisgICBUaGlzIG1hY3JvIHdhcyBub3QgbWFuZGF0ZWQgb3JpZ2luYWxseTogZGVmaW5lIG9ubHkgaWYgd2Uga25vdworICAgd2Ugd29uJ3QgYnJlYWsgdXNlciBjb2RlOiB3aGVuIHRoZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdlIGtub3cuICAqLworCisjaWZuZGVmIFlZX0xPQ0FUSU9OX1BSSU5UCisjIGlmIFlZTFRZUEVfSVNfVFJJVklBTAorIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykJCQlcCisgICAgIGZwcmludGYgKEZpbGUsICIlZC4lZC0lZC4lZCIsCQkJXAorCSAgICAgIChMb2MpLmZpcnN0X2xpbmUsIChMb2MpLmZpcnN0X2NvbHVtbiwJXAorCSAgICAgIChMb2MpLmxhc3RfbGluZSwgIChMb2MpLmxhc3RfY29sdW1uKQorIyBlbHNlCisjICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQpIDApCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcgd2l0aCB0aGUgcmlnaHQgYXJndW1lbnRzLiAgKi8KKworI2lmZGVmIFlZTEVYX1BBUkFNCisjIGRlZmluZSBZWUxFWCB5eWxleCAoWVlMRVhfUEFSQU0pCisjZWxzZQorIyBkZWZpbmUgWVlMRVggeXlsZXggKCkKKyNlbmRpZgorCisvKiBFbmFibGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovCisjaWYgWVlERUJVRworCisjIGlmbmRlZiBZWUZQUklOVEYKKyMgIGluY2x1ZGUgPHN0ZGlvLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50ZgorIyBlbmRpZgorCisjIGRlZmluZSBZWURQUklOVEYoQXJncykJCQlcCitkbyB7CQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJCVwKKyAgICBZWUZQUklOVEYgQXJnczsJCQkJXAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKyMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQkJCSAgXAorZG8gewkJCQkJCQkJCSAgXAorICBpZiAoeXlkZWJ1ZykJCQkJCQkJCSAgXAorICAgIHsJCQkJCQkJCQkgIFwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOwkJCQkJICBcCisgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwJCQkJCQkgIFwKKwkJICBUeXBlLCBWYWx1ZSk7IFwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsJCQkJCQkgIFwKKyAgICB9CQkJCQkJCQkJICBcCit9IHdoaWxlIChZWUlEICgwKSkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qQVJHU1VTRUQqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXApCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXApCisgICAgRklMRSAqeXlvdXRwdXQ7CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7CisjZW5kaWYKK3sKKyAgaWYgKCF5eXZhbHVlcCkKKyAgICByZXR1cm47CisjIGlmZGVmIFlZUFJJTlQKKyAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKKyAgICBZWVBSSU5UICh5eW91dHB1dCwgeXl0b2tudW1beXl0eXBlXSwgKnl5dmFsdWVwKTsKKyMgZWxzZQorICBZWVVTRSAoeXlvdXRwdXQpOworIyBlbmRpZgorICBzd2l0Y2ggKHl5dHlwZSkKKyAgICB7CisgICAgICBkZWZhdWx0OgorCWJyZWFrOworICAgIH0KK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwKQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwKQorICAgIEZJTEUgKnl5b3V0cHV0OworICAgIGludCB5eXR5cGU7CisgICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOworI2VuZGlmCit7CisgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCisgICAgWVlGUFJJTlRGICh5eW91dHB1dCwgInRva2VuICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOworICBlbHNlCisgICAgWVlGUFJJTlRGICh5eW91dHB1dCwgIm50ZXJtICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOworCisgIHl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXApOworICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiKSIpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlfc3RhY2tfcHJpbnQgLS0gUHJpbnQgdGhlIHN0YXRlIHN0YWNrIGZyb20gaXRzIEJPVFRPTSB1cCB0byBpdHMgfAorfCBUT1AgKGluY2x1ZGVkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICp5eWJvdHRvbSwgeXl0eXBlX2ludDE2ICp5eXRvcCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3RhY2tfcHJpbnQgKHl5Ym90dG9tLCB5eXRvcCkKKyAgICB5eXR5cGVfaW50MTYgKnl5Ym90dG9tOworICAgIHl5dHlwZV9pbnQxNiAqeXl0b3A7CisjZW5kaWYKK3sKKyAgWVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKKyAgZm9yICg7IHl5Ym90dG9tIDw9IHl5dG9wOyB5eWJvdHRvbSsrKQorICAgIHsKKyAgICAgIGludCB5eWJvdCA9ICp5eWJvdHRvbTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgeXlib3QpOworICAgIH0KKyAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOworfQorCisjIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkJCQkJXAorZG8gewkJCQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJCQkJXAorICAgIHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOwkJCQlcCit9IHdoaWxlIChZWUlEICgwKSkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUmVwb3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBnb2luZyB0byBiZSByZWR1Y2VkLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfcmVkdWNlX3ByaW50IChZWVNUWVBFICp5eXZzcCwgaW50IHl5cnVsZSkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlydWxlKQorICAgIFlZU1RZUEUgKnl5dnNwOworICAgIGludCB5eXJ1bGU7CisjZW5kaWYKK3sKKyAgaW50IHl5bnJocyA9IHl5cjJbeXlydWxlXTsKKyAgaW50IHl5aTsKKyAgdW5zaWduZWQgbG9uZyBpbnQgeXlsbm8gPSB5eXJsaW5lW3l5cnVsZV07CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiUmVkdWNpbmcgc3RhY2sgYnkgcnVsZSAlZCAobGluZSAlbHUpOlxuIiwKKwkgICAgIHl5cnVsZSAtIDEsIHl5bG5vKTsKKyAgLyogVGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICovCisgIGZvciAoeXlpID0gMDsgeXlpIDwgeXlucmhzOyB5eWkrKykKKyAgICB7CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOworICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsIHl5cmhzW3l5cHJoc1t5eXJ1bGVdICsgeXlpXSwKKwkJICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQorCQkgICAgICAgCQkgICAgICAgKTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKKyAgICB9Cit9CisKKyMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQkJXAorZG8gewkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJXAorICAgIHl5X3JlZHVjZV9wcmludCAoeXl2c3AsIFJ1bGUpOyBcCit9IHdoaWxlIChZWUlEICgwKSkKKworLyogTm9uemVybyBtZWFucyBwcmludCBwYXJzZSB0cmFjZS4gIEl0IGlzIGxlZnQgdW5pbml0aWFsaXplZCBzbyB0aGF0CisgICBtdWx0aXBsZSBwYXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8KK2ludCB5eWRlYnVnOworI2Vsc2UgLyogIVlZREVCVUcgKi8KKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQorIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCisjIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkKKyMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQorI2VuZGlmIC8qICFZWURFQlVHICovCisKKworLyogWVlJTklUREVQVEggLS0gaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3MuICAqLworI2lmbmRlZglZWUlOSVRERVBUSAorIyBkZWZpbmUgWVlJTklUREVQVEggMjAwCisjZW5kaWYKKworLyogWVlNQVhERVBUSCAtLSBtYXhpbXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9ubHkKKyAgIGlmIHRoZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0aG9kIGlzIHVzZWQpLgorCisgICBEbyBub3QgbWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgorICAgWVlTVEFDS19BTExPQ19NQVhJTVVNIDwgWVlTVEFDS19CWVRFUyAoWVlNQVhERVBUSCkKKyAgIGV2YWx1YXRlZCB3aXRoIGluZmluaXRlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMuICAqLworCisjaWZuZGVmIFlZTUFYREVQVEgKKyMgZGVmaW5lIFlZTUFYREVQVEggMTAwMDAKKyNlbmRpZgorCisMCisKKyNpZiBZWUVSUk9SX1ZFUkJPU0UKKworIyBpZm5kZWYgeXlzdHJsZW4KKyMgIGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19ICisjICAgZGVmaW5lIHl5c3RybGVuIHN0cmxlbgorIyAgZWxzZQorLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgWVlTVFIuICAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyBZWVNJWkVfVAoreXlzdHJsZW4gKGNvbnN0IGNoYXIgKnl5c3RyKQorI2Vsc2UKK3N0YXRpYyBZWVNJWkVfVAoreXlzdHJsZW4gKHl5c3RyKQorICAgIGNvbnN0IGNoYXIgKnl5c3RyOworI2VuZGlmCit7CisgIFlZU0laRV9UIHl5bGVuOworICBmb3IgKHl5bGVuID0gMDsgeXlzdHJbeXlsZW5dOyB5eWxlbisrKQorICAgIGNvbnRpbnVlOworICByZXR1cm4geXlsZW47Cit9CisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmbmRlZiB5eXN0cGNweQorIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0ggJiYgZGVmaW5lZCBfR05VX1NPVVJDRQorIyAgIGRlZmluZSB5eXN0cGNweSBzdHBjcHkKKyMgIGVsc2UKKy8qIENvcHkgWVlTUkMgdG8gWVlERVNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4KKyAgIFlZREVTVC4gICovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIGNoYXIgKgoreXlzdHBjcHkgKGNoYXIgKnl5ZGVzdCwgY29uc3QgY2hhciAqeXlzcmMpCisjZWxzZQorc3RhdGljIGNoYXIgKgoreXlzdHBjcHkgKHl5ZGVzdCwgeXlzcmMpCisgICAgY2hhciAqeXlkZXN0OworICAgIGNvbnN0IGNoYXIgKnl5c3JjOworI2VuZGlmCit7CisgIGNoYXIgKnl5ZCA9IHl5ZGVzdDsKKyAgY29uc3QgY2hhciAqeXlzID0geXlzcmM7CisKKyAgd2hpbGUgKCgqeXlkKysgPSAqeXlzKyspICE9ICdcMCcpCisgICAgY29udGludWU7CisKKyAgcmV0dXJuIHl5ZCAtIDE7Cit9CisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmbmRlZiB5eXRuYW1lcnIKKy8qIENvcHkgdG8gWVlSRVMgdGhlIGNvbnRlbnRzIG9mIFlZU1RSIGFmdGVyIHN0cmlwcGluZyBhd2F5IHVubmVjZXNzYXJ5CisgICBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzLCBzbyB0aGF0IGl0J3Mgc3VpdGFibGUgZm9yIHl5ZXJyb3IuICBUaGUKKyAgIGhldXJpc3RpYyBpcyB0aGF0IGRvdWJsZS1xdW90aW5nIGlzIHVubmVjZXNzYXJ5IHVubGVzcyB0aGUgc3RyaW5nCisgICBjb250YWlucyBhbiBhcG9zdHJvcGhlLCBhIGNvbW1hLCBvciBiYWNrc2xhc2ggKG90aGVyIHRoYW4KKyAgIGJhY2tzbGFzaC1iYWNrc2xhc2gpLiAgWVlTVFIgaXMgdGFrZW4gZnJvbSB5eXRuYW1lLiAgSWYgWVlSRVMgaXMKKyAgIG51bGwsIGRvIG5vdCBjb3B5OyBpbnN0ZWFkLCByZXR1cm4gdGhlIGxlbmd0aCBvZiB3aGF0IHRoZSByZXN1bHQKKyAgIHdvdWxkIGhhdmUgYmVlbi4gICovCitzdGF0aWMgWVlTSVpFX1QKK3l5dG5hbWVyciAoY2hhciAqeXlyZXMsIGNvbnN0IGNoYXIgKnl5c3RyKQoreworICBpZiAoKnl5c3RyID09ICciJykKKyAgICB7CisgICAgICBZWVNJWkVfVCB5eW4gPSAwOworICAgICAgY2hhciBjb25zdCAqeXlwID0geXlzdHI7CisKKyAgICAgIGZvciAoOzspCisJc3dpdGNoICgqKyt5eXApCisJICB7CisJICBjYXNlICdcJyc6CisJICBjYXNlICcsJzoKKwkgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOworCisJICBjYXNlICdcXCc6CisJICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKKwkgICAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CisJICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisJICBkZWZhdWx0OgorCSAgICBpZiAoeXlyZXMpCisJICAgICAgeXlyZXNbeXluXSA9ICp5eXA7CisJICAgIHl5bisrOworCSAgICBicmVhazsKKworCSAgY2FzZSAnIic6CisJICAgIGlmICh5eXJlcykKKwkgICAgICB5eXJlc1t5eW5dID0gJ1wwJzsKKwkgICAgcmV0dXJuIHl5bjsKKwkgIH0KKyAgICBkb19ub3Rfc3RyaXBfcXVvdGVzOiA7CisgICAgfQorCisgIGlmICghIHl5cmVzKQorICAgIHJldHVybiB5eXN0cmxlbiAoeXlzdHIpOworCisgIHJldHVybiB5eXN0cGNweSAoeXlyZXMsIHl5c3RyKSAtIHl5cmVzOworfQorIyBlbmRpZgorCisvKiBDb3B5IGludG8gWVlSRVNVTFQgYW4gZXJyb3IgbWVzc2FnZSBhYm91dCB0aGUgdW5leHBlY3RlZCB0b2tlbgorICAgWVlDSEFSIHdoaWxlIGluIHN0YXRlIFlZU1RBVEUuICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQsCisgICBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4gIElmIFlZUkVTVUxUIGlzIG51bGwsIGRvIG5vdAorICAgY29weSBhbnl0aGluZzsganVzdCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlCisgICBjb3BpZWQuICBBcyBhIHNwZWNpYWwgY2FzZSwgcmV0dXJuIDAgaWYgYW4gb3JkaW5hcnkgInN5bnRheCBlcnJvciIKKyAgIG1lc3NhZ2Ugd2lsbCBkby4gIFJldHVybiBZWVNJWkVfTUFYSU1VTSBpZiBvdmVyZmxvdyBvY2N1cnMgZHVyaW5nCisgICBzaXplIGNhbGN1bGF0aW9uLiAgKi8KK3N0YXRpYyBZWVNJWkVfVAoreXlzeW50YXhfZXJyb3IgKGNoYXIgKnl5cmVzdWx0LCBpbnQgeXlzdGF0ZSwgaW50IHl5Y2hhcikKK3sKKyAgaW50IHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKworICBpZiAoISAoWVlQQUNUX05JTkYgPCB5eW4gJiYgeXluIDw9IFlZTEFTVCkpCisgICAgcmV0dXJuIDA7CisgIGVsc2UKKyAgICB7CisgICAgICBpbnQgeXl0eXBlID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CisgICAgICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5dHlwZV0pOworICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsKKyAgICAgIFlZU0laRV9UIHl5c2l6ZTE7CisgICAgICBpbnQgeXlzaXplX292ZXJmbG93ID0gMDsKKyAgICAgIGVudW0geyBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNID0gNSB9OworICAgICAgY2hhciBjb25zdCAqeXlhcmdbWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTV07CisgICAgICBpbnQgeXl4OworCisjIGlmIDAKKyAgICAgIC8qIFRoaXMgaXMgc28geGdldHRleHQgc2VlcyB0aGUgdHJhbnNsYXRhYmxlIGZvcm1hdHMgdGhhdCBhcmUKKwkgY29uc3RydWN0ZWQgb24gdGhlIGZseS4gICovCisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIpOworICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIpOworICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpOworICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpOworICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIpOworIyBlbmRpZgorICAgICAgY2hhciAqeXlmbXQ7CisgICAgICBjaGFyIGNvbnN0ICp5eWY7CisgICAgICBzdGF0aWMgY2hhciBjb25zdCB5eXVuZXhwZWN0ZWRbXSA9ICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiOworICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXlleHBlY3RpbmdbXSA9ICIsIGV4cGVjdGluZyAlcyI7CisgICAgICBzdGF0aWMgY2hhciBjb25zdCB5eW9yW10gPSAiIG9yICVzIjsKKyAgICAgIGNoYXIgeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZAorCQkgICAgKyBzaXplb2YgeXlleHBlY3RpbmcgLSAxCisJCSAgICArICgoWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSAtIDIpCisJCSAgICAgICAqIChzaXplb2YgeXlvciAtIDEpKV07CisgICAgICBjaGFyIGNvbnN0ICp5eXByZWZpeCA9IHl5ZXhwZWN0aW5nOworCisgICAgICAvKiBTdGFydCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCisJIFlZQ0hFQ0suICAqLworICAgICAgaW50IHl5eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAwOworCisgICAgICAvKiBTdGF5IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8KKyAgICAgIGludCB5eWNoZWNrbGltID0gWVlMQVNUIC0geXluICsgMTsKKyAgICAgIGludCB5eXhlbmQgPSB5eWNoZWNrbGltIDwgWVlOVE9LRU5TID8geXljaGVja2xpbSA6IFlZTlRPS0VOUzsKKyAgICAgIGludCB5eWNvdW50ID0gMTsKKworICAgICAgeXlhcmdbMF0gPSB5eXRuYW1lW3l5dHlwZV07CisgICAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZvcm1hdCwgeXl1bmV4cGVjdGVkKTsKKworICAgICAgZm9yICh5eXggPSB5eXhiZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkKKwlpZiAoeXljaGVja1t5eXggKyB5eW5dID09IHl5eCAmJiB5eXggIT0gWVlURVJST1IpCisJICB7CisJICAgIGlmICh5eWNvdW50ID09IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0pCisJICAgICAgeworCQl5eWNvdW50ID0gMTsKKwkJeXlzaXplID0geXlzaXplMDsKKwkJeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZCAtIDFdID0gJ1wwJzsKKwkJYnJlYWs7CisJICAgICAgfQorCSAgICB5eWFyZ1t5eWNvdW50KytdID0geXl0bmFtZVt5eXhdOworCSAgICB5eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5eF0pOworCSAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOworCSAgICB5eXNpemUgPSB5eXNpemUxOworCSAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZtdCwgeXlwcmVmaXgpOworCSAgICB5eXByZWZpeCA9IHl5b3I7CisJICB9CisKKyAgICAgIHl5ZiA9IFlZXyh5eWZvcm1hdCk7CisgICAgICB5eXNpemUxID0geXlzaXplICsgeXlzdHJsZW4gKHl5Zik7CisgICAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOworICAgICAgeXlzaXplID0geXlzaXplMTsKKworICAgICAgaWYgKHl5c2l6ZV9vdmVyZmxvdykKKwlyZXR1cm4gWVlTSVpFX01BWElNVU07CisKKyAgICAgIGlmICh5eXJlc3VsdCkKKwl7CisJICAvKiBBdm9pZCBzcHJpbnRmLCBhcyB0aGF0IGluZnJpbmdlcyBvbiB0aGUgdXNlcidzIG5hbWUgc3BhY2UuCisJICAgICBEb24ndCBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciBldmVuIGlmIHRoZSB0cmFuc2xhdGlvbgorCSAgICAgcHJvZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJzLiAgKi8KKwkgIGNoYXIgKnl5cCA9IHl5cmVzdWx0OworCSAgaW50IHl5aSA9IDA7CisJICB3aGlsZSAoKCp5eXAgPSAqeXlmKSAhPSAnXDAnKQorCSAgICB7CisJICAgICAgaWYgKCp5eXAgPT0gJyUnICYmIHl5ZlsxXSA9PSAncycgJiYgeXlpIDwgeXljb3VudCkKKwkJeworCQkgIHl5cCArPSB5eXRuYW1lcnIgKHl5cCwgeXlhcmdbeXlpKytdKTsKKwkJICB5eWYgKz0gMjsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIHl5cCsrOworCQkgIHl5ZisrOworCQl9CisJICAgIH0KKwl9CisgICAgICByZXR1cm4geXlzaXplOworICAgIH0KK30KKyNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJPU0UgKi8KKwwKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUmVsZWFzZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgdG8gdGhpcyBzeW1ib2wuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKkFSR1NVU0VEKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlkZXN0cnVjdCAoY29uc3QgY2hhciAqeXltc2csIGludCB5eXR5cGUsIFlZU1RZUEUgKnl5dmFsdWVwKQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eWRlc3RydWN0ICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCkKKyAgICBjb25zdCBjaGFyICp5eW1zZzsKKyAgICBpbnQgeXl0eXBlOworICAgIFlZU1RZUEUgKnl5dmFsdWVwOworI2VuZGlmCit7CisgIFlZVVNFICh5eXZhbHVlcCk7CisKKyAgaWYgKCF5eW1zZykKKyAgICB5eW1zZyA9ICJEZWxldGluZyI7CisgIFlZX1NZTUJPTF9QUklOVCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wKTsKKworICBzd2l0Y2ggKHl5dHlwZSkKKyAgICB7CisgICAgICBjYXNlIDUzOiAvKiAiY2hvaWNlX2VudHJ5IiAqLworCisJeworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IG1pc3NpbmcgZW5kIHN0YXRlbWVudCBmb3IgdGhpcyBlbnRyeVxuIiwKKwkJKHl5dmFsdWVwLT5tZW51KS0+ZmlsZS0+bmFtZSwgKHl5dmFsdWVwLT5tZW51KS0+bGluZW5vKTsKKwlpZiAoY3VycmVudF9tZW51ID09ICh5eXZhbHVlcC0+bWVudSkpCisJCW1lbnVfZW5kX21lbnUoKTsKK307CisKKwlicmVhazsKKyAgICAgIGNhc2UgNTk6IC8qICJpZl9lbnRyeSIgKi8KKworCXsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBtaXNzaW5nIGVuZCBzdGF0ZW1lbnQgZm9yIHRoaXMgZW50cnlcbiIsCisJCSh5eXZhbHVlcC0+bWVudSktPmZpbGUtPm5hbWUsICh5eXZhbHVlcC0+bWVudSktPmxpbmVubyk7CisJaWYgKGN1cnJlbnRfbWVudSA9PSAoeXl2YWx1ZXAtPm1lbnUpKQorCQltZW51X2VuZF9tZW51KCk7Cit9OworCisJYnJlYWs7CisgICAgICBjYXNlIDY1OiAvKiAibWVudV9lbnRyeSIgKi8KKworCXsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBtaXNzaW5nIGVuZCBzdGF0ZW1lbnQgZm9yIHRoaXMgZW50cnlcbiIsCisJCSh5eXZhbHVlcC0+bWVudSktPmZpbGUtPm5hbWUsICh5eXZhbHVlcC0+bWVudSktPmxpbmVubyk7CisJaWYgKGN1cnJlbnRfbWVudSA9PSAoeXl2YWx1ZXAtPm1lbnUpKQorCQltZW51X2VuZF9tZW51KCk7Cit9OworCisJYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisJYnJlYWs7CisgICAgfQorfQorCisvKiBQcmV2ZW50IHdhcm5pbmdzIGZyb20gLVdtaXNzaW5nLXByb3RvdHlwZXMuICAqLworI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKK2ludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsKKyNlbHNlCitpbnQgeXlwYXJzZSAoKTsKKyNlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCitpbnQgeXlwYXJzZSAodm9pZCk7CisjZWxzZQoraW50IHl5cGFyc2UgKCk7CisjZW5kaWYKKyNlbmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKworCisvKiBUaGUgbG9va2FoZWFkIHN5bWJvbC4gICovCitpbnQgeXljaGFyOworCisvKiBUaGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLworWVlTVFlQRSB5eWx2YWw7CisKKy8qIE51bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZhci4gICovCitpbnQgeXluZXJyczsKKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlwYXJzZSBvciB5eXB1c2hfcGFyc2UuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQoraW50Cit5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKQorI2Vsc2UKK2ludAoreXlwYXJzZSAoWVlQQVJTRV9QQVJBTSkKKyAgICB2b2lkICpZWVBBUlNFX1BBUkFNOworI2VuZGlmCisjZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitpbnQKK3l5cGFyc2UgKHZvaWQpCisjZWxzZQoraW50Cit5eXBhcnNlICgpCisKKyNlbmRpZgorI2VuZGlmCit7CisKKworICAgIGludCB5eXN0YXRlOworICAgIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLworICAgIGludCB5eWVycnN0YXR1czsKKworICAgIC8qIFRoZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgorICAgICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMuCisgICAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcy4KKworICAgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdworICAgICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLworCisgICAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KKyAgICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOworICAgIHl5dHlwZV9pbnQxNiAqeXlzczsKKyAgICB5eXR5cGVfaW50MTYgKnl5c3NwOworCisgICAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KKyAgICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKKyAgICBZWVNUWVBFICp5eXZzOworICAgIFlZU1RZUEUgKnl5dnNwOworCisgICAgWVlTSVpFX1QgeXlzdGFja3NpemU7CisKKyAgaW50IHl5bjsKKyAgaW50IHl5cmVzdWx0OworICAvKiBMb29rYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlci4gICovCisgIGludCB5eXRva2VuOworICAvKiBUaGUgdmFyaWFibGVzIHVzZWQgdG8gcmV0dXJuIHNlbWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQorICAgICBhY3Rpb24gcm91dGluZXMuICAqLworICBZWVNUWVBFIHl5dmFsOworCisjaWYgWVlFUlJPUl9WRVJCT1NFCisgIC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2NhdGVkIHNpemUuICAqLworICBjaGFyIHl5bXNnYnVmWzEyOF07CisgIGNoYXIgKnl5bXNnID0geXltc2didWY7CisgIFlZU0laRV9UIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworI2VuZGlmCisKKyNkZWZpbmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSkKKworICAvKiBUaGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLgorICAgICBLZWVwIHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovCisgIGludCB5eWxlbiA9IDA7CisKKyAgeXl0b2tlbiA9IDA7CisgIHl5c3MgPSB5eXNzYTsKKyAgeXl2cyA9IHl5dnNhOworICB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOworCisgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7CisKKyAgeXlzdGF0ZSA9IDA7CisgIHl5ZXJyc3RhdHVzID0gMDsKKyAgeXluZXJycyA9IDA7CisgIHl5Y2hhciA9IFlZRU1QVFk7IC8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCisKKyAgLyogSW5pdGlhbGl6ZSBzdGFjayBwb2ludGVycy4KKyAgICAgV2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCisgICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KKyAgICAgVGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLworICB5eXNzcCA9IHl5c3M7CisgIHl5dnNwID0geXl2czsKKworICBnb3RvIHl5c2V0c3RhdGU7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGluIHl5c3RhdGUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyB5eW5ld3N0YXRlOgorICAvKiBJbiBhbGwgY2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcworICAgICBoYXZlIGp1c3QgYmVlbiBwdXNoZWQuICBTbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3RhY2tzLiAgKi8KKyAgeXlzc3ArKzsKKworIHl5c2V0c3RhdGU6CisgICp5eXNzcCA9IHl5c3RhdGU7CisKKyAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCisgICAgeworICAgICAgLyogR2V0IHRoZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0aGUgdGhyZWUgc3RhY2tzLCBpbiBlbGVtZW50cy4gICovCisgICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOworCisjaWZkZWYgeXlvdmVyZmxvdworICAgICAgeworCS8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjay4gIFVzZSBjb3BpZXMgb2YKKwkgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvCisJICAgbWVtb3J5LiAgKi8KKwlZWVNUWVBFICp5eXZzMSA9IHl5dnM7CisJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CisKKwkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKKwkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCisJICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodAorCSAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLworCXl5b3ZlcmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAorCQkgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCisJCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKKwkJICAgICZ5eXN0YWNrc2l6ZSk7CisKKwl5eXNzID0geXlzczE7CisJeXl2cyA9IHl5dnMxOworICAgICAgfQorI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLworIyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQorICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKyMgZWxzZQorICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCisgICAgICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkKKwlnb3RvIHl5ZXhoYXVzdGVkbGFiOworICAgICAgeXlzdGFja3NpemUgKj0gMjsKKyAgICAgIGlmIChZWU1BWERFUFRIIDwgeXlzdGFja3NpemUpCisJeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOworCisgICAgICB7CisJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CisJdW5pb24geXlhbGxvYyAqeXlwdHIgPQorCSAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsKKwlpZiAoISB5eXB0cikKKwkgIGdvdG8geXlleGhhdXN0ZWRsYWI7CisJWVlTVEFDS19SRUxPQ0FURSAoeXlzc19hbGxvYywgeXlzcyk7CisJWVlTVEFDS19SRUxPQ0FURSAoeXl2c19hbGxvYywgeXl2cyk7CisjICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCisJaWYgKHl5c3MxICE9IHl5c3NhKQorCSAgWVlTVEFDS19GUkVFICh5eXNzMSk7CisgICAgICB9CisjIGVuZGlmCisjZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLworCisgICAgICB5eXNzcCA9IHl5c3MgKyB5eXNpemUgLSAxOworICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0gMTsKKworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWx1XG4iLAorCQkgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsKKworICAgICAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCisJWVlBQk9SVDsKKyAgICB9CisKKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsKKworICBpZiAoeXlzdGF0ZSA9PSBZWUZJTkFMKQorICAgIFlZQUNDRVBUOworCisgIGdvdG8geXliYWNrdXA7CisKKy8qLS0tLS0tLS0tLS0uCit8IHl5YmFja3VwLiAgfAorYC0tLS0tLS0tLS0tKi8KK3l5YmFja3VwOgorCisgIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICBSZWFkIGEKKyAgICAgbG9va2FoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKworICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8KKyAgeXluID0geXlwYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IFlZUEFDVF9OSU5GKQorICAgIGdvdG8geXlkZWZhdWx0OworCisgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rYWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogWVlDSEFSIGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9va2FoZWFkIHN5bWJvbC4gICovCisgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKKyAgICB7CisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTsKKyAgICAgIHl5Y2hhciA9IFlZTEVYOworICAgIH0KKworICBpZiAoeXljaGFyIDw9IFlZRU9GKQorICAgIHsKKyAgICAgIHl5Y2hhciA9IHl5dG9rZW4gPSBZWUVPRjsKKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOworICAgICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOworICAgIH0KKworICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBzZWVpbmcgdG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KKyAgICAgZGV0ZWN0IGFuIGVycm9yLCB0YWtlIHRoYXQgYWN0aW9uLiAgKi8KKyAgeXluICs9IHl5dG9rZW47CisgIGlmICh5eW4gPCAwIHx8IFlZTEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tlbikKKyAgICBnb3RvIHl5ZGVmYXVsdDsKKyAgeXluID0geXl0YWJsZVt5eW5dOworICBpZiAoeXluIDw9IDApCisgICAgeworICAgICAgaWYgKHl5biA9PSAwIHx8IHl5biA9PSBZWVRBQkxFX05JTkYpCisJZ290byB5eWVycmxhYjsKKyAgICAgIHl5biA9IC15eW47CisgICAgICBnb3RvIHl5cmVkdWNlOworICAgIH0KKworICAvKiBDb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yCisgICAgIHN0YXR1cy4gICovCisgIGlmICh5eWVycnN0YXR1cykKKyAgICB5eWVycnN0YXR1cy0tOworCisgIC8qIFNoaWZ0IHRoZSBsb29rYWhlYWQgdG9rZW4uICAqLworICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOworCisgIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4uICAqLworICB5eWNoYXIgPSBZWUVNUFRZOworCisgIHl5c3RhdGUgPSB5eW47CisgICorK3l5dnNwID0geXlsdmFsOworCisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWRlZmF1bHQgLS0gZG8gdGhlIGRlZmF1bHQgYWN0aW9uIGZvciB0aGUgY3VycmVudCBzdGF0ZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWRlZmF1bHQ6CisgIHl5biA9IHl5ZGVmYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IDApCisgICAgZ290byB5eWVycmxhYjsKKyAgZ290byB5eXJlZHVjZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eXJlZHVjZSAtLSBEbyBhIHJlZHVjdGlvbi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eXJlZHVjZToKKyAgLyogeXluIGlzIHRoZSBudW1iZXIgb2YgYSBydWxlIHRvIHJlZHVjZSB3aXRoLiAgKi8KKyAgeXlsZW4gPSB5eXIyW3l5bl07CisKKyAgLyogSWYgWVlMRU4gaXMgbm9uemVybywgaW1wbGVtZW50IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBhY3Rpb246CisgICAgIGAkJCA9ICQxJy4KKworICAgICBPdGhlcndpc2UsIHRoZSBmb2xsb3dpbmcgbGluZSBzZXRzIFlZVkFMIHRvIGdhcmJhZ2UuCisgICAgIFRoaXMgYmVoYXZpb3IgaXMgdW5kb2N1bWVudGVkIGFuZCBCaXNvbgorICAgICB1c2VycyBzaG91bGQgbm90IHJlbHkgdXBvbiBpdC4gIEFzc2lnbmluZyB0byBZWVZBTAorICAgICB1bmNvbmRpdGlvbmFsbHkgbWFrZXMgdGhlIHBhcnNlciBhIGJpdCBzbWFsbGVyLCBhbmQgaXQgYXZvaWRzIGEKKyAgICAgR0NDIHdhcm5pbmcgdGhhdCBZWVZBTCBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkLiAgKi8KKyAgeXl2YWwgPSB5eXZzcFsxLXl5bGVuXTsKKworCisgIFlZX1JFRFVDRV9QUklOVCAoeXluKTsKKyAgc3dpdGNoICh5eW4pCisgICAgeworICAgICAgICBjYXNlIDEwOgorCisgICAgeyB6Y29uZl9lcnJvcigidW5leHBlY3RlZCBlbmQgc3RhdGVtZW50Iik7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMToKKworICAgIHsgemNvbmZfZXJyb3IoInVua25vd24gc3RhdGVtZW50IFwiJXNcIiIsICh5eXZzcFsoMikgLSAoNCldLnN0cmluZykpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTI6CisKKyAgICB7CisJemNvbmZfZXJyb3IoInVuZXhwZWN0ZWQgb3B0aW9uIFwiJXNcIiIsIGtjb25mX2lkX3N0cmluZ3MgKyAoeXl2c3BbKDIpIC0gKDQpXS5pZCktPm5hbWUpOworO30KKyAgICBicmVhazsKKworICBjYXNlIDEzOgorCisgICAgeyB6Y29uZl9lcnJvcigiaW52YWxpZCBzdGF0ZW1lbnQiKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDI4OgorCisgICAgeyB6Y29uZl9lcnJvcigidW5rbm93biBvcHRpb24gXCIlc1wiIiwgKHl5dnNwWygxKSAtICgzKV0uc3RyaW5nKSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyOToKKworICAgIHsgemNvbmZfZXJyb3IoImludmFsaWQgb3B0aW9uIik7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzMDoKKworICAgIHsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBzeW1fbG9va3VwKCh5eXZzcFsoMikgLSAoMyldLnN0cmluZyksIDApOworCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX09QVElPTkFMOworCW1lbnVfYWRkX2VudHJ5KHN5bSk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6Y29uZmlnICVzXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCAoeXl2c3BbKDIpIC0gKDMpXS5zdHJpbmcpKTsKKzt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzMToKKworICAgIHsKKwltZW51X2VuZF9lbnRyeSgpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmVuZGNvbmZpZ1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cis7fQorICAgIGJyZWFrOworCisgIGNhc2UgMzI6CisKKyAgICB7CisJc3RydWN0IHN5bWJvbCAqc3ltID0gc3ltX2xvb2t1cCgoeXl2c3BbKDIpIC0gKDMpXS5zdHJpbmcpLCAwKTsKKwlzeW0tPmZsYWdzIHw9IFNZTUJPTF9PUFRJT05BTDsKKwltZW51X2FkZF9lbnRyeShzeW0pOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOm1lbnVjb25maWcgJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICh5eXZzcFsoMikgLSAoMyldLnN0cmluZykpOworO30KKyAgICBicmVhazsKKworICBjYXNlIDMzOgorCisgICAgeworCWlmIChjdXJyZW50X2VudHJ5LT5wcm9tcHQpCisJCWN1cnJlbnRfZW50cnktPnByb21wdC0+dHlwZSA9IFBfTUVOVTsKKwllbHNlCisJCXpjb25mcHJpbnQoIndhcm5pbmc6IG1lbnVjb25maWcgc3RhdGVtZW50IHdpdGhvdXQgcHJvbXB0Iik7CisJbWVudV9lbmRfZW50cnkoKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRjb25maWdcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworO30KKyAgICBicmVhazsKKworICBjYXNlIDQxOgorCisgICAgeworCW1lbnVfc2V0X3R5cGUoKHl5dnNwWygxKSAtICgzKV0uaWQpLT5zdHlwZSk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6dHlwZSgldSlcbiIsCisJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksCisJCSh5eXZzcFsoMSkgLSAoMyldLmlkKS0+c3R5cGUpOworO30KKyAgICBicmVhazsKKworICBjYXNlIDQyOgorCisgICAgeworCW1lbnVfYWRkX3Byb21wdChQX1BST01QVCwgKHl5dnNwWygyKSAtICg0KV0uc3RyaW5nKSwgKHl5dnNwWygzKSAtICg0KV0uZXhwcikpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnByb21wdFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cis7fQorICAgIGJyZWFrOworCisgIGNhc2UgNDM6CisKKyAgICB7CisJbWVudV9hZGRfZXhwcihQX0RFRkFVTFQsICh5eXZzcFsoMikgLSAoNCldLmV4cHIpLCAoeXl2c3BbKDMpIC0gKDQpXS5leHByKSk7CisJaWYgKCh5eXZzcFsoMSkgLSAoNCldLmlkKS0+c3R5cGUgIT0gU19VTktOT1dOKQorCQltZW51X3NldF90eXBlKCh5eXZzcFsoMSkgLSAoNCldLmlkKS0+c3R5cGUpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRlZmF1bHQoJXUpXG4iLAorCQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLAorCQkoeXl2c3BbKDEpIC0gKDQpXS5pZCktPnN0eXBlKTsKKzt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0NDoKKworICAgIHsKKwltZW51X2FkZF9zeW1ib2woUF9TRUxFQ1QsIHN5bV9sb29rdXAoKHl5dnNwWygyKSAtICg0KV0uc3RyaW5nKSwgMCksICh5eXZzcFsoMykgLSAoNCldLmV4cHIpKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpzZWxlY3RcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworO30KKyAgICBicmVhazsKKworICBjYXNlIDQ1OgorCisgICAgeworCW1lbnVfYWRkX2V4cHIoUF9SQU5HRSwgZXhwcl9hbGxvY19jb21wKEVfUkFOR0UsKHl5dnNwWygyKSAtICg1KV0uc3ltYm9sKSwgKHl5dnNwWygzKSAtICg1KV0uc3ltYm9sKSksICh5eXZzcFsoNCkgLSAoNSldLmV4cHIpKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpyYW5nZVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cis7fQorICAgIGJyZWFrOworCisgIGNhc2UgNDg6CisKKyAgICB7CisJc3RydWN0IGtjb25mX2lkICppZCA9IGtjb25mX2lkX2xvb2t1cCgoeXl2c3BbKDIpIC0gKDMpXS5zdHJpbmcpLCBzdHJsZW4oKHl5dnNwWygyKSAtICgzKV0uc3RyaW5nKSkpOworCWlmIChpZCAmJiBpZC0+ZmxhZ3MgJiBURl9PUFRJT04pCisJCW1lbnVfYWRkX29wdGlvbihpZC0+dG9rZW4sICh5eXZzcFsoMykgLSAoMyldLnN0cmluZykpOworCWVsc2UKKwkJemNvbmZwcmludCgid2FybmluZzogaWdub3JpbmcgdW5rbm93biBvcHRpb24gJXMiLCAoeXl2c3BbKDIpIC0gKDMpXS5zdHJpbmcpKTsKKwlmcmVlKCh5eXZzcFsoMikgLSAoMyldLnN0cmluZykpOworO30KKyAgICBicmVhazsKKworICBjYXNlIDQ5OgorCisgICAgeyAoeXl2YWwuc3RyaW5nKSA9IE5VTEw7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1MDoKKworICAgIHsgKHl5dmFsLnN0cmluZykgPSAoeXl2c3BbKDIpIC0gKDIpXS5zdHJpbmcpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNTE6CisKKyAgICB7CisJc3RydWN0IHN5bWJvbCAqc3ltID0gc3ltX2xvb2t1cCgoeXl2c3BbKDIpIC0gKDMpXS5zdHJpbmcpLCBTWU1CT0xfQ0hPSUNFKTsKKwlzeW0tPmZsYWdzIHw9IFNZTUJPTF9BVVRPOworCW1lbnVfYWRkX2VudHJ5KHN5bSk7CisJbWVudV9hZGRfZXhwcihQX0NIT0lDRSwgTlVMTCwgTlVMTCk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6Y2hvaWNlXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKKzt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1MjoKKworICAgIHsKKwkoeXl2YWwubWVudSkgPSBtZW51X2FkZF9tZW51KCk7Cis7fQorICAgIGJyZWFrOworCisgIGNhc2UgNTM6CisKKyAgICB7CisJaWYgKHpjb25mX2VuZHRva2VuKCh5eXZzcFsoMSkgLSAoMSldLmlkKSwgVF9DSE9JQ0UsIFRfRU5EQ0hPSUNFKSkgeworCQltZW51X2VuZF9tZW51KCk7CisJCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmVuZGNob2ljZVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJfQorO30KKyAgICBicmVhazsKKworICBjYXNlIDYxOgorCisgICAgeworCW1lbnVfYWRkX3Byb21wdChQX1BST01QVCwgKHl5dnNwWygyKSAtICg0KV0uc3RyaW5nKSwgKHl5dnNwWygzKSAtICg0KV0uZXhwcikpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnByb21wdFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cis7fQorICAgIGJyZWFrOworCisgIGNhc2UgNjI6CisKKyAgICB7CisJaWYgKCh5eXZzcFsoMSkgLSAoMyldLmlkKS0+c3R5cGUgPT0gU19CT09MRUFOIHx8ICh5eXZzcFsoMSkgLSAoMyldLmlkKS0+c3R5cGUgPT0gU19UUklTVEFURSkgeworCQltZW51X3NldF90eXBlKCh5eXZzcFsoMSkgLSAoMyldLmlkKS0+c3R5cGUpOworCQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDp0eXBlKCV1KVxuIiwKKwkJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksCisJCQkoeXl2c3BbKDEpIC0gKDMpXS5pZCktPnN0eXBlKTsKKwl9IGVsc2UKKwkJWVlFUlJPUjsKKzt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2MzoKKworICAgIHsKKwljdXJyZW50X2VudHJ5LT5zeW0tPmZsYWdzIHw9IFNZTUJPTF9PUFRJT05BTDsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpvcHRpb25hbFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cis7fQorICAgIGJyZWFrOworCisgIGNhc2UgNjQ6CisKKyAgICB7CisJaWYgKCh5eXZzcFsoMSkgLSAoNCldLmlkKS0+c3R5cGUgPT0gU19VTktOT1dOKSB7CisJCW1lbnVfYWRkX3N5bWJvbChQX0RFRkFVTFQsIHN5bV9sb29rdXAoKHl5dnNwWygyKSAtICg0KV0uc3RyaW5nKSwgMCksICh5eXZzcFsoMykgLSAoNCldLmV4cHIpKTsKKwkJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZGVmYXVsdFxuIiwKKwkJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCX0gZWxzZQorCQlZWUVSUk9SOworO30KKyAgICBicmVhazsKKworICBjYXNlIDY3OgorCisgICAgeworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmlmXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKKwltZW51X2FkZF9lbnRyeShOVUxMKTsKKwltZW51X2FkZF9kZXAoKHl5dnNwWygyKSAtICgzKV0uZXhwcikpOworCSh5eXZhbC5tZW51KSA9IG1lbnVfYWRkX21lbnUoKTsKKzt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2ODoKKworICAgIHsKKwlpZiAoemNvbmZfZW5kdG9rZW4oKHl5dnNwWygxKSAtICgxKV0uaWQpLCBUX0lGLCBUX0VORElGKSkgeworCQltZW51X2VuZF9tZW51KCk7CisJCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmVuZGlmXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKKwl9Cis7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzQ6CisKKyAgICB7CisJbWVudV9hZGRfcHJvbXB0KFBfTUVOVSwgKHl5dnNwWygyKSAtICgzKV0uc3RyaW5nKSwgTlVMTCk7Cis7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzU6CisKKyAgICB7CisJbWVudV9hZGRfZW50cnkoTlVMTCk7CisJbWVudV9hZGRfcHJvbXB0KFBfTUVOVSwgKHl5dnNwWygyKSAtICgzKV0uc3RyaW5nKSwgTlVMTCk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6bWVudVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cis7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzY6CisKKyAgICB7CisJKHl5dmFsLm1lbnUpID0gbWVudV9hZGRfbWVudSgpOworO30KKyAgICBicmVhazsKKworICBjYXNlIDc3OgorCisgICAgeworCWlmICh6Y29uZl9lbmR0b2tlbigoeXl2c3BbKDEpIC0gKDEpXS5pZCksIFRfTUVOVSwgVF9FTkRNRU5VKSkgeworCQltZW51X2VuZF9tZW51KCk7CisJCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmVuZG1lbnVcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCX0KKzt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4MzoKKworICAgIHsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpzb3VyY2UgJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICh5eXZzcFsoMikgLSAoMyldLnN0cmluZykpOworCXpjb25mX25leHRmaWxlKCh5eXZzcFsoMikgLSAoMyldLnN0cmluZykpOworO30KKyAgICBicmVhazsKKworICBjYXNlIDg0OgorCisgICAgeworCW1lbnVfYWRkX2VudHJ5KE5VTEwpOworCW1lbnVfYWRkX3Byb21wdChQX0NPTU1FTlQsICh5eXZzcFsoMikgLSAoMyldLnN0cmluZyksIE5VTEwpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmNvbW1lbnRcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworO30KKyAgICBicmVhazsKKworICBjYXNlIDg1OgorCisgICAgeworCW1lbnVfZW5kX2VudHJ5KCk7Cis7fQorICAgIGJyZWFrOworCisgIGNhc2UgODY6CisKKyAgICB7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6aGVscFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJemNvbmZfc3RhcnRoZWxwKCk7Cis7fQorICAgIGJyZWFrOworCisgIGNhc2UgODc6CisKKyAgICB7CisJY3VycmVudF9lbnRyeS0+aGVscCA9ICh5eXZzcFsoMikgLSAoMildLnN0cmluZyk7Cis7fQorICAgIGJyZWFrOworCisgIGNhc2UgOTI6CisKKyAgICB7CisJbWVudV9hZGRfZGVwKCh5eXZzcFsoMykgLSAoNCldLmV4cHIpKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpkZXBlbmRzIG9uXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKKzt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5NjoKKworICAgIHsKKwltZW51X2FkZF92aXNpYmlsaXR5KCh5eXZzcFsoMikgLSAoMildLmV4cHIpKTsKKzt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5ODoKKworICAgIHsKKwltZW51X2FkZF9wcm9tcHQoUF9QUk9NUFQsICh5eXZzcFsoMSkgLSAoMildLnN0cmluZyksICh5eXZzcFsoMikgLSAoMildLmV4cHIpKTsKKzt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDE6CisKKyAgICB7ICh5eXZhbC5pZCkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pZCk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDI6CisKKyAgICB7ICh5eXZhbC5pZCkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pZCk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDM6CisKKyAgICB7ICh5eXZhbC5pZCkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pZCk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDY6CisKKyAgICB7ICh5eXZhbC5leHByKSA9IE5VTEw7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDc6CisKKyAgICB7ICh5eXZhbC5leHByKSA9ICh5eXZzcFsoMikgLSAoMildLmV4cHIpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTA4OgorCisgICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX3N5bWJvbCgoeXl2c3BbKDEpIC0gKDEpXS5zeW1ib2wpKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDEwOToKKworICAgIHsgKHl5dmFsLmV4cHIpID0gZXhwcl9hbGxvY19jb21wKEVfRVFVQUwsICh5eXZzcFsoMSkgLSAoMyldLnN5bWJvbCksICh5eXZzcFsoMykgLSAoMyldLnN5bWJvbCkpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTEwOgorCisgICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX2NvbXAoRV9VTkVRVUFMLCAoeXl2c3BbKDEpIC0gKDMpXS5zeW1ib2wpLCAoeXl2c3BbKDMpIC0gKDMpXS5zeW1ib2wpKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDExMToKKworICAgIHsgKHl5dmFsLmV4cHIpID0gKHl5dnNwWygyKSAtICgzKV0uZXhwcik7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTI6CisKKyAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2Nfb25lKEVfTk9ULCAoeXl2c3BbKDIpIC0gKDIpXS5leHByKSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTM6CisKKyAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2NfdHdvKEVfT1IsICh5eXZzcFsoMSkgLSAoMyldLmV4cHIpLCAoeXl2c3BbKDMpIC0gKDMpXS5leHByKSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTQ6CisKKyAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2NfdHdvKEVfQU5ELCAoeXl2c3BbKDEpIC0gKDMpXS5leHByKSwgKHl5dnNwWygzKSAtICgzKV0uZXhwcikpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTE1OgorCisgICAgeyAoeXl2YWwuc3ltYm9sKSA9IHN5bV9sb29rdXAoKHl5dnNwWygxKSAtICgxKV0uc3RyaW5nKSwgMCk7IGZyZWUoKHl5dnNwWygxKSAtICgxKV0uc3RyaW5nKSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTY6CisKKyAgICB7ICh5eXZhbC5zeW1ib2wpID0gc3ltX2xvb2t1cCgoeXl2c3BbKDEpIC0gKDEpXS5zdHJpbmcpLCBTWU1CT0xfQ09OU1QpOyBmcmVlKCh5eXZzcFsoMSkgLSAoMSldLnN0cmluZykpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTE3OgorCisgICAgeyAoeXl2YWwuc3RyaW5nKSA9IE5VTEw7IDt9CisgICAgYnJlYWs7CisKKworCisgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKKworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIHl5bGVuID0gMDsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKworICAqKyt5eXZzcCA9IHl5dmFsOworCisgIC8qIE5vdyBgc2hpZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4gIERldGVybWluZSB3aGF0IHN0YXRlCisgICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQorICAgICBudW1iZXIgcmVkdWNlZCBieS4gICovCisKKyAgeXluID0geXlyMVt5eW5dOworCisgIHl5c3RhdGUgPSB5eXBnb3RvW3l5biAtIFlZTlRPS0VOU10gKyAqeXlzc3A7CisgIGlmICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9PSAqeXlzc3ApCisgICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07CisgIGVsc2UKKyAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRPS0VOU107CisKKyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvciB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJybGFiOgorICAvKiBJZiBub3QgYWxyZWFkeSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVycm9yLiAgKi8KKyAgaWYgKCF5eWVycnN0YXR1cykKKyAgICB7CisgICAgICArK3l5bmVycnM7CisjaWYgISBZWUVSUk9SX1ZFUkJPU0UKKyAgICAgIHl5ZXJyb3IgKFlZXygic3ludGF4IGVycm9yIikpOworI2Vsc2UKKyAgICAgIHsKKwlZWVNJWkVfVCB5eXNpemUgPSB5eXN5bnRheF9lcnJvciAoMCwgeXlzdGF0ZSwgeXljaGFyKTsKKwlpZiAoeXltc2dfYWxsb2MgPCB5eXNpemUgJiYgeXltc2dfYWxsb2MgPCBZWVNUQUNLX0FMTE9DX01BWElNVU0pCisJICB7CisJICAgIFlZU0laRV9UIHl5YWxsb2MgPSAyICogeXlzaXplOworCSAgICBpZiAoISAoeXlzaXplIDw9IHl5YWxsb2MgJiYgeXlhbGxvYyA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQorCSAgICAgIHl5YWxsb2MgPSBZWVNUQUNLX0FMTE9DX01BWElNVU07CisJICAgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKKwkgICAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKKwkgICAgeXltc2cgPSAoY2hhciAqKSBZWVNUQUNLX0FMTE9DICh5eWFsbG9jKTsKKwkgICAgaWYgKHl5bXNnKQorCSAgICAgIHl5bXNnX2FsbG9jID0geXlhbGxvYzsKKwkgICAgZWxzZQorCSAgICAgIHsKKwkJeXltc2cgPSB5eW1zZ2J1ZjsKKwkJeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7CisJICAgICAgfQorCSAgfQorCisJaWYgKDAgPCB5eXNpemUgJiYgeXlzaXplIDw9IHl5bXNnX2FsbG9jKQorCSAgeworCSAgICAodm9pZCkgeXlzeW50YXhfZXJyb3IgKHl5bXNnLCB5eXN0YXRlLCB5eWNoYXIpOworCSAgICB5eWVycm9yICh5eW1zZyk7CisJICB9CisJZWxzZQorCSAgeworCSAgICB5eWVycm9yIChZWV8oInN5bnRheCBlcnJvciIpKTsKKwkgICAgaWYgKHl5c2l6ZSAhPSAwKQorCSAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7CisJICB9CisgICAgICB9CisjZW5kaWYKKyAgICB9CisKKworCisgIGlmICh5eWVycnN0YXR1cyA9PSAzKQorICAgIHsKKyAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KKwkgZXJyb3IsIGRpc2NhcmQgaXQuICAqLworCisgICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQorCXsKKwkgIC8qIFJldHVybiBmYWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4gICovCisJICBpZiAoeXljaGFyID09IFlZRU9GKQorCSAgICBZWUFCT1JUOworCX0KKyAgICAgIGVsc2UKKwl7CisJICB5eWRlc3RydWN0ICgiRXJyb3I6IGRpc2NhcmRpbmciLAorCQkgICAgICB5eXRva2VuLCAmeXlsdmFsKTsKKwkgIHl5Y2hhciA9IFlZRU1QVFk7CisJfQorICAgIH0KKworICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKKyAgICAgdG9rZW4uICAqLworICBnb3RvIHl5ZXJybGFiMTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJvcmxhYiAtLSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBZWUVSUk9SLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVycm9ybGFiOgorCisgIC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGludm9rZXMKKyAgICAgWVlFUlJPUiBhbmQgdGhlIGxhYmVsIHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5ldmVyIGFwcGVhcnMgaW4gdXNlcgorICAgICBjb2RlLiAgKi8KKyAgaWYgKC8qQ09OU1RDT05EKi8gMCkKKyAgICAgZ290byB5eWVycm9ybGFiOworCisgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAgdGhpcyBZWUVSUk9SLiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICB5eWxlbiA9IDA7CisgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisgIHl5c3RhdGUgPSAqeXlzc3A7CisgIGdvdG8geXllcnJsYWIxOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIxIC0tIGNvbW1vbiBjb2RlIGZvciBib3RoIHN5bnRheCBlcnJvciBhbmQgWVlFUlJPUi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJybGFiMToKKyAgeXllcnJzdGF0dXMgPSAzOwkvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAqLworCisgIGZvciAoOzspCisgICAgeworICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOworICAgICAgaWYgKHl5biAhPSBZWVBBQ1RfTklORikKKwl7CisJICB5eW4gKz0gWVlURVJST1I7CisJICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5bl0gPT0gWVlURVJST1IpCisJICAgIHsKKwkgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07CisJICAgICAgaWYgKDAgPCB5eW4pCisJCWJyZWFrOworCSAgICB9CisJfQorCisgICAgICAvKiBQb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICovCisgICAgICBpZiAoeXlzc3AgPT0geXlzcykKKwlZWUFCT1JUOworCisKKyAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogcG9wcGluZyIsCisJCSAgeXlzdG9zW3l5c3RhdGVdLCB5eXZzcCk7CisgICAgICBZWVBPUFNUQUNLICgxKTsKKyAgICAgIHl5c3RhdGUgPSAqeXlzc3A7CisgICAgICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworICAgIH0KKworICAqKyt5eXZzcCA9IHl5bHZhbDsKKworCisgIC8qIFNoaWZ0IHRoZSBlcnJvciB0b2tlbi4gICovCisgIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXlzdG9zW3l5bl0sIHl5dnNwLCB5eWxzcCk7CisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlhY2NlcHRsYWIgLS0gWVlBQ0NFUFQgY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5YWNjZXB0bGFiOgorICB5eXJlc3VsdCA9IDA7CisgIGdvdG8geXlyZXR1cm47CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5YWJvcnRsYWIgLS0gWVlBQk9SVCBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5YWJvcnRsYWI6CisgIHl5cmVzdWx0ID0gMTsKKyAgZ290byB5eXJldHVybjsKKworI2lmICFkZWZpbmVkKHl5b3ZlcmZsb3cpIHx8IFlZRVJST1JfVkVSQk9TRQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWV4aGF1c3RlZGxhYiAtLSBtZW1vcnkgZXhoYXVzdGlvbiBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlleGhhdXN0ZWRsYWI6CisgIHl5ZXJyb3IgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpKTsKKyAgeXlyZXN1bHQgPSAyOworICAvKiBGYWxsIHRocm91Z2guICAqLworI2VuZGlmCisKK3l5cmV0dXJuOgorICBpZiAoeXljaGFyICE9IFlZRU1QVFkpCisgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCisJCSB5eXRva2VuLCAmeXlsdmFsKTsKKyAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAorICAgICB0aGlzIFlZQUJPUlQgb3IgWVlBQ0NFUFQuICAqLworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisgIHdoaWxlICh5eXNzcCAhPSB5eXNzKQorICAgIHsKKyAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwKKwkJICB5eXN0b3NbKnl5c3NwXSwgeXl2c3ApOworICAgICAgWVlQT1BTVEFDSyAoMSk7CisgICAgfQorI2lmbmRlZiB5eW92ZXJmbG93CisgIGlmICh5eXNzICE9IHl5c3NhKQorICAgIFlZU1RBQ0tfRlJFRSAoeXlzcyk7CisjZW5kaWYKKyNpZiBZWUVSUk9SX1ZFUkJPU0UKKyAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQorICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOworI2VuZGlmCisgIC8qIE1ha2Ugc3VyZSBZWUlEIGlzIHVzZWQuICAqLworICByZXR1cm4gWVlJRCAoeXlyZXN1bHQpOworfQorCisKKworCisKK3ZvaWQgY29uZl9wYXJzZShjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlpbnQgaTsKKworCXpjb25mX2luaXRzY2FuKG5hbWUpOworCisJc3ltX2luaXQoKTsKKwlfbWVudV9pbml0KCk7CisJbW9kdWxlc19zeW0gPSBzeW1fbG9va3VwKE5VTEwsIDApOworCW1vZHVsZXNfc3ltLT50eXBlID0gU19CT09MRUFOOworCW1vZHVsZXNfc3ltLT5mbGFncyB8PSBTWU1CT0xfQVVUTzsKKwlyb290bWVudS5wcm9tcHQgPSBtZW51X2FkZF9wcm9tcHQoUF9NRU5VLCBQQUNLQUdFICIgQ29uZmlndXJhdGlvbiIsIE5VTEwpOworCisjaWYgWVlERUJVRworCWlmIChnZXRlbnYoIlpDT05GX0RFQlVHIikpCisJCXpjb25mZGVidWcgPSAxOworI2VuZGlmCisJemNvbmZwYXJzZSgpOworCWlmICh6Y29uZm5lcnJzKQorCQlleGl0KDEpOworCWlmICghbW9kdWxlc19zeW0tPnByb3ApIHsKKwkJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCisJCXByb3AgPSBwcm9wX2FsbG9jKFBfREVGQVVMVCwgbW9kdWxlc19zeW0pOworCQlwcm9wLT5leHByID0gZXhwcl9hbGxvY19zeW1ib2woc3ltX2xvb2t1cCgiTU9EVUxFUyIsIDApKTsKKwl9CisKKwlyb290bWVudS5wcm9tcHQtPnRleHQgPSBfKHJvb3RtZW51LnByb21wdC0+dGV4dCk7CisJcm9vdG1lbnUucHJvbXB0LT50ZXh0ID0gc3ltX2V4cGFuZF9zdHJpbmdfdmFsdWUocm9vdG1lbnUucHJvbXB0LT50ZXh0KTsKKworCW1lbnVfZmluYWxpemUoJnJvb3RtZW51KTsKKwlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7CisJCWlmIChzeW1fY2hlY2tfZGVwcyhzeW0pKQorCQkJemNvbmZuZXJycysrOworICAgICAgICB9CisJaWYgKHpjb25mbmVycnMpCisJCWV4aXQoMSk7CisJc3ltX3NldF9jaGFuZ2VfY291bnQoMSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp6Y29uZl90b2tlbm5hbWUoaW50IHRva2VuKQoreworCXN3aXRjaCAodG9rZW4pIHsKKwljYXNlIFRfTUVOVToJCXJldHVybiAibWVudSI7CisJY2FzZSBUX0VORE1FTlU6CQlyZXR1cm4gImVuZG1lbnUiOworCWNhc2UgVF9DSE9JQ0U6CQlyZXR1cm4gImNob2ljZSI7CisJY2FzZSBUX0VORENIT0lDRToJcmV0dXJuICJlbmRjaG9pY2UiOworCWNhc2UgVF9JRjoJCXJldHVybiAiaWYiOworCWNhc2UgVF9FTkRJRjoJCXJldHVybiAiZW5kaWYiOworCWNhc2UgVF9ERVBFTkRTOgkJcmV0dXJuICJkZXBlbmRzIjsKKwljYXNlIFRfVklTSUJMRToJCXJldHVybiAidmlzaWJsZSI7CisJfQorCXJldHVybiAiPHRva2VuPiI7Cit9CisKK3N0YXRpYyBib29sIHpjb25mX2VuZHRva2VuKHN0cnVjdCBrY29uZl9pZCAqaWQsIGludCBzdGFydHRva2VuLCBpbnQgZW5kdG9rZW4pCit7CisJaWYgKGlkLT50b2tlbiAhPSBlbmR0b2tlbikgeworCQl6Y29uZl9lcnJvcigidW5leHBlY3RlZCAnJXMnIHdpdGhpbiAlcyBibG9jayIsCisJCQlrY29uZl9pZF9zdHJpbmdzICsgaWQtPm5hbWUsIHpjb25mX3Rva2VubmFtZShzdGFydHRva2VuKSk7CisJCXpjb25mbmVycnMrKzsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlpZiAoY3VycmVudF9tZW51LT5maWxlICE9IGN1cnJlbnRfZmlsZSkgeworCQl6Y29uZl9lcnJvcigiJyVzJyBpbiBkaWZmZXJlbnQgZmlsZSB0aGFuICclcyciLAorCQkJa2NvbmZfaWRfc3RyaW5ncyArIGlkLT5uYW1lLCB6Y29uZl90b2tlbm5hbWUoc3RhcnR0b2tlbikpOworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBsb2NhdGlvbiBvZiB0aGUgJyVzJ1xuIiwKKwkJCWN1cnJlbnRfbWVudS0+ZmlsZS0+bmFtZSwgY3VycmVudF9tZW51LT5saW5lbm8sCisJCQl6Y29uZl90b2tlbm5hbWUoc3RhcnR0b2tlbikpOworCQl6Y29uZm5lcnJzKys7CisJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHpjb25mcHJpbnQoY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCXZhX3N0YXJ0KGFwLCBlcnIpOworCXZmcHJpbnRmKHN0ZGVyciwgZXJyLCBhcCk7CisJdmFfZW5kKGFwKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHpjb25mX2Vycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwl6Y29uZm5lcnJzKys7CisJZnByaW50ZihzdGRlcnIsICIlczolZDogIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJdmFfc3RhcnQoYXAsIGVycik7CisJdmZwcmludGYoc3RkZXJyLCBlcnIsIGFwKTsKKwl2YV9lbmQoYXApOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKK30KKworc3RhdGljIHZvaWQgemNvbmZlcnJvcihjb25zdCBjaGFyICplcnIpCit7CisjaWYgWVlERUJVRworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICVzXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpICsgMSwgZXJyKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBwcmludF9xdW90ZWRfc3RyaW5nKEZJTEUgKm91dCwgY29uc3QgY2hhciAqc3RyKQoreworCWNvbnN0IGNoYXIgKnA7CisJaW50IGxlbjsKKworCXB1dGMoJyInLCBvdXQpOworCXdoaWxlICgocCA9IHN0cmNocihzdHIsICciJykpKSB7CisJCWxlbiA9IHAgLSBzdHI7CisJCWlmIChsZW4pCisJCQlmcHJpbnRmKG91dCwgIiUuKnMiLCBsZW4sIHN0cik7CisJCWZwdXRzKCJcXFwiIiwgb3V0KTsKKwkJc3RyID0gcCArIDE7CisJfQorCWZwdXRzKHN0ciwgb3V0KTsKKwlwdXRjKCciJywgb3V0KTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfc3ltYm9sKEZJTEUgKm91dCwgc3RydWN0IG1lbnUgKm1lbnUpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltID0gbWVudS0+c3ltOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKworCWlmIChzeW1faXNfY2hvaWNlKHN5bSkpCisJCWZwcmludGYob3V0LCAiXG5jaG9pY2VcbiIpOworCWVsc2UKKwkJZnByaW50ZihvdXQsICJcbmNvbmZpZyAlc1xuIiwgc3ltLT5uYW1lKTsKKwlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCWNhc2UgU19CT09MRUFOOgorCQlmcHV0cygiICBib29sZWFuXG4iLCBvdXQpOworCQlicmVhazsKKwljYXNlIFNfVFJJU1RBVEU6CisJCWZwdXRzKCIgIHRyaXN0YXRlXG4iLCBvdXQpOworCQlicmVhazsKKwljYXNlIFNfU1RSSU5HOgorCQlmcHV0cygiICBzdHJpbmdcbiIsIG91dCk7CisJCWJyZWFrOworCWNhc2UgU19JTlQ6CisJCWZwdXRzKCIgIGludGVnZXJcbiIsIG91dCk7CisJCWJyZWFrOworCWNhc2UgU19IRVg6CisJCWZwdXRzKCIgIGhleFxuIiwgb3V0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZnB1dHMoIiAgPz8/XG4iLCBvdXQpOworCQlicmVhazsKKwl9CisJZm9yIChwcm9wID0gc3ltLT5wcm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgeworCQlpZiAocHJvcC0+bWVudSAhPSBtZW51KQorCQkJY29udGludWU7CisJCXN3aXRjaCAocHJvcC0+dHlwZSkgeworCQljYXNlIFBfUFJPTVBUOgorCQkJZnB1dHMoIiAgcHJvbXB0ICIsIG91dCk7CisJCQlwcmludF9xdW90ZWRfc3RyaW5nKG91dCwgcHJvcC0+dGV4dCk7CisJCQlpZiAoIWV4cHJfaXNfeWVzKHByb3AtPnZpc2libGUuZXhwcikpIHsKKwkJCQlmcHV0cygiIGlmICIsIG91dCk7CisJCQkJZXhwcl9mcHJpbnQocHJvcC0+dmlzaWJsZS5leHByLCBvdXQpOworCQkJfQorCQkJZnB1dGMoJ1xuJywgb3V0KTsKKwkJCWJyZWFrOworCQljYXNlIFBfREVGQVVMVDoKKwkJCWZwdXRzKCAiICBkZWZhdWx0ICIsIG91dCk7CisJCQlleHByX2ZwcmludChwcm9wLT5leHByLCBvdXQpOworCQkJaWYgKCFleHByX2lzX3llcyhwcm9wLT52aXNpYmxlLmV4cHIpKSB7CisJCQkJZnB1dHMoIiBpZiAiLCBvdXQpOworCQkJCWV4cHJfZnByaW50KHByb3AtPnZpc2libGUuZXhwciwgb3V0KTsKKwkJCX0KKwkJCWZwdXRjKCdcbicsIG91dCk7CisJCQlicmVhazsKKwkJY2FzZSBQX0NIT0lDRToKKwkJCWZwdXRzKCIgICNjaG9pY2UgdmFsdWVcbiIsIG91dCk7CisJCQlicmVhazsKKwkJY2FzZSBQX1NFTEVDVDoKKwkJCWZwdXRzKCAiICBzZWxlY3QgIiwgb3V0KTsKKwkJCWV4cHJfZnByaW50KHByb3AtPmV4cHIsIG91dCk7CisJCQlmcHV0YygnXG4nLCBvdXQpOworCQkJYnJlYWs7CisJCWNhc2UgUF9SQU5HRToKKwkJCWZwdXRzKCAiICByYW5nZSAiLCBvdXQpOworCQkJZXhwcl9mcHJpbnQocHJvcC0+ZXhwciwgb3V0KTsKKwkJCWZwdXRjKCdcbicsIG91dCk7CisJCQlicmVhazsKKwkJY2FzZSBQX01FTlU6CisJCQlmcHV0cyggIiAgbWVudSAiLCBvdXQpOworCQkJcHJpbnRfcXVvdGVkX3N0cmluZyhvdXQsIHByb3AtPnRleHQpOworCQkJZnB1dGMoJ1xuJywgb3V0KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZnByaW50ZihvdXQsICIgIHVua25vd24gcHJvcCAlZCFcbiIsIHByb3AtPnR5cGUpOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKG1lbnUtPmhlbHApIHsKKwkJaW50IGxlbiA9IHN0cmxlbihtZW51LT5oZWxwKTsKKwkJd2hpbGUgKG1lbnUtPmhlbHBbLS1sZW5dID09ICdcbicpCisJCQltZW51LT5oZWxwW2xlbl0gPSAwOworCQlmcHJpbnRmKG91dCwgIiAgaGVscFxuJXNcbiIsIG1lbnUtPmhlbHApOworCX0KK30KKwordm9pZCB6Y29uZmR1bXAoRklMRSAqb3V0KQoreworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3RydWN0IG1lbnUgKm1lbnU7CisKKwltZW51ID0gcm9vdG1lbnUubGlzdDsKKwl3aGlsZSAobWVudSkgeworCQlpZiAoKHN5bSA9IG1lbnUtPnN5bSkpCisJCQlwcmludF9zeW1ib2wob3V0LCBtZW51KTsKKwkJZWxzZSBpZiAoKHByb3AgPSBtZW51LT5wcm9tcHQpKSB7CisJCQlzd2l0Y2ggKHByb3AtPnR5cGUpIHsKKwkJCWNhc2UgUF9DT01NRU5UOgorCQkJCWZwdXRzKCJcbmNvbW1lbnQgIiwgb3V0KTsKKwkJCQlwcmludF9xdW90ZWRfc3RyaW5nKG91dCwgcHJvcC0+dGV4dCk7CisJCQkJZnB1dHMoIlxuIiwgb3V0KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUF9NRU5VOgorCQkJCWZwdXRzKCJcbm1lbnUgIiwgb3V0KTsKKwkJCQlwcmludF9xdW90ZWRfc3RyaW5nKG91dCwgcHJvcC0+dGV4dCk7CisJCQkJZnB1dHMoIlxuIiwgb3V0KTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJOworCQkJfQorCQkJaWYgKCFleHByX2lzX3llcyhwcm9wLT52aXNpYmxlLmV4cHIpKSB7CisJCQkJZnB1dHMoIiAgZGVwZW5kcyAiLCBvdXQpOworCQkJCWV4cHJfZnByaW50KHByb3AtPnZpc2libGUuZXhwciwgb3V0KTsKKwkJCQlmcHV0YygnXG4nLCBvdXQpOworCQkJfQorCQl9CisKKwkJaWYgKG1lbnUtPmxpc3QpCisJCQltZW51ID0gbWVudS0+bGlzdDsKKwkJZWxzZSBpZiAobWVudS0+bmV4dCkKKwkJCW1lbnUgPSBtZW51LT5uZXh0OworCQllbHNlIHdoaWxlICgobWVudSA9IG1lbnUtPnBhcmVudCkpIHsKKwkJCWlmIChtZW51LT5wcm9tcHQgJiYgbWVudS0+cHJvbXB0LT50eXBlID09IFBfTUVOVSkKKwkJCQlmcHV0cygiXG5lbmRtZW51XG4iLCBvdXQpOworCQkJaWYgKG1lbnUtPm5leHQpIHsKKwkJCQltZW51ID0gbWVudS0+bmV4dDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KK30KKworI2luY2x1ZGUgImxleC56Y29uZi5jIgorI2luY2x1ZGUgInV0aWwuYyIKKyNpbmNsdWRlICJjb25mZGF0YS5jIgorI2luY2x1ZGUgImV4cHIuYyIKKyNpbmNsdWRlICJzeW1ib2wuYyIKKyNpbmNsdWRlICJtZW51LmMiCisKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9FTEZraWNrZXJzLzIuMGEvMTAwLXVzZV9DQ19ub3RfZ2NjLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL0VMRmtpY2tlcnMvMi4wYS8xMDAtdXNlX0NDX25vdF9nY2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzczMTM2YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9FTEZraWNrZXJzLzIuMGEvMTAwLXVzZV9DQ19ub3RfZ2NjLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK2RpZmYgLWR1ciBFTEZraWNrZXJzLm9yaWcvc3N0cmlwL01ha2VmaWxlIEVMRmtpY2tlcnMvc3N0cmlwL01ha2VmaWxlCistLS0gRUxGa2lja2Vycy5vcmlnL3NzdHJpcC9NYWtlZmlsZQkyMDAxLTAzLTI0IDEyOjU4OjI3LjAwMDAwMDAwMCArMDEwMAorKysrIEVMRmtpY2tlcnMvc3N0cmlwL01ha2VmaWxlCTIwMDctMDUtMzEgMjE6MTc6MTguMDAwMDAwMDAwICswMjAwCitAQCAtMSw3ICsxLDcgQEAKKyAjICBNYWtlZmlsZSBmb3Igc3N0cmlwCisgCisgc3N0cmlwOiBzc3RyaXAuYworLQlnY2MgLWdnZGIgLVdhbGwgLVcgLW8gc3N0cmlwIHNzdHJpcC5jCisrCSQoQ0MpIC1XYWxsIC1XIC1vIHNzdHJpcCBzc3RyaXAuYworIAorIGNsZWFuOgorIAlybSAtZiBzc3RyaXAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9QREN1cnNlcy8zLjQvbWluZ3czMl9jcm9zc19jb21waWxlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL1BEQ3Vyc2VzLzMuNC9taW5ndzMyX2Nyb3NzX2NvbXBpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYwZmY5YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9QREN1cnNlcy8zLjQvbWluZ3czMl9jcm9zc19jb21waWxlLnBhdGNoCkBAIC0wLDAgKzEsODcgQEAKKy0tLSBQREN1cnNlcy0zLjQub3JpZy93aW4zMi9taW5nd2luMzIubWFrCTIwMDktMTEtMDIgMTM6NTA6MTEuMDAwMDAwMDAwICswMTAwCisrKysgUERDdXJzZXMtMy40L3dpbjMyL21pbmd3aW4zMi5tYWsJMjAwOS0xMS0wMiAxMzo1Mzo0My4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xOCw3ICsxOCw3IEBACisKKyBQRENVUlNFU19XSU5fSAk9ICQob3NkaXIpL3BkY3dpbi5oCisKKy1DQwkJPSBnY2MKKytDQwkJPSAkKENST1NTX0NPTVBJTEUpZ2NjCisKKyBpZmVxICgkKERFQlVHKSxZKQorIAlDRkxBR1MgID0gLWcgLVdhbGwgLURQRENERUJVRworQEAgLTMwLDggKzMwLDggQEAKKworIENGTEFHUyArPSAtSSQoUERDVVJTRVNfU1JDRElSKQorCistQkFTRURFRgkJPSAkKFBEQ1VSU0VTX1NSQ0RJUilcZXhwLWJhc2UuZGVmCistV0lERURFRgkJPSAkKFBEQ1VSU0VTX1NSQ0RJUilcZXhwLXdpZGUuZGVmCisrQkFTRURFRgkJPSAkKFBEQ1VSU0VTX1NSQ0RJUikvZXhwLWJhc2UuZGVmCisrV0lERURFRgkJPSAkKFBEQ1VSU0VTX1NSQ0RJUikvZXhwLXdpZGUuZGVmCisKKyBERUZERVBTCQk9ICQoQkFTRURFRikKKworQEAgLTQ2LDE3ICs0NiwxNyBAQAorCisgREVGRklMRQkJPSBwZGN1cnNlcy5kZWYKKworLUxJTksJCT0gZ2NjCisrTElOSwkJPSAkKENST1NTX0NPTVBJTEUpZ2NjCisKKyBpZmVxICgkKERMTCksWSkKKyAJQ0ZMQUdTICs9IC1EUERDX0RMTF9CVUlMRAorLQlMSUJFWEUgPSBnY2MgJChERUZGSUxFKQorKwlMSUJFWEUgPSAkKENST1NTX0NPTVBJTEUpZ2NjICQoREVGRklMRSkKKyAJTElCRkxBR1MgPSAtV2wsLS1vdXQtaW1wbGliLHBkY3Vyc2VzLmEgLXNoYXJlZCAtbworIAlMSUJDVVJTRVMgPSBwZGN1cnNlcy5kbGwKKyAJTElCREVQUyA9ICQoTElCT0JKUykgJChQRENPQkpTKSAkKERFRkZJTEUpCisgCUNMRUFOID0gJChMSUJDVVJTRVMpICouYSAkKERFRkZJTEUpCisgZWxzZQorLQlMSUJFWEUgPSBhcgorKwlMSUJFWEUgPSAkKENST1NTX0NPTVBJTEUpYXIKKyAJTElCRkxBR1MgPSByY3YKKyAJTElCQ1VSU0VTID0gcGRjdXJzZXMuYQorIAlMSUJERVBTID0gJChMSUJPQkpTKSAkKFBEQ09CSlMpCitAQCAtNzAsMjQgKzcwLDI0IEBACisgbGliczoJJChMSUJDVVJTRVMpCisKKyBjbGVhbjoKKy0JLWRlbCAqLm8KKy0JLWRlbCAqLmV4ZQorLQktZGVsICQoQ0xFQU4pCisrCS1ybSAqLm8KKysJLXJtICouZXhlCisrCS1ybSAkKENMRUFOKQorCisgZGVtb3M6CSQoREVNT1MpCistCXN0cmlwICouZXhlCisrCSQoQ1JPU1NfQ09NUElMRSlzdHJpcCAqLmV4ZQorCisgJChERUZGSUxFKTogJChERUZERVBTKQorIAllY2hvIExJQlJBUlkgcGRjdXJzZXMgPiAkQAorIAllY2hvIEVYUE9SVFMgPj4gJEAKKy0JdHlwZSAkKEJBU0VERUYpID4+ICRACisrCWNhdCAkKEJBU0VERUYpID4+ICRACisgaWZlcSAoJChXSURFKSxZKQorLQl0eXBlICQoV0lERURFRikgPj4gJEAKKysJY2F0ICQoV0lERURFRikgPj4gJEAKKyBlbmRpZgorCisgJChMSUJDVVJTRVMpIDogJChMSUJERVBTKQorIAkkKExJQkVYRSkgJChMSUJGTEFHUykgJEAgJD8KKy0JLWNvcHkgcGRjdXJzZXMuYSBwYW5lbC5hCisrCS1jcCBwZGN1cnNlcy5hIHBhbmVsLmEKKworICQoTElCT0JKUykgJChQRENPQkpTKSA6ICQoUERDVVJTRVNfSEVBREVSUykKKyAkKFBEQ09CSlMpIDogJChQRENVUlNFU19XSU5fSCkKKy0tLSBQREN1cnNlcy0zLjQub3JpZy9jdXJzZXMuaAkyMDA5LTExLTAzIDE0OjEyOjE4LjAwMDAwMDAwMCArMDEwMAorKysrIFBEQ3Vyc2VzLTMuNC4vY3Vyc2VzLmgJMjAwOS0xMS0wMyAxNDoxNDowOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC04Miw3ICs4Miw5IEBACisgICoKKyAgKi8KKworKyNpZm5kZWYgX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQKKyB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgYm9vbDsgICAgLyogUERDdXJzZXMgQm9vbGVhbiB0eXBlICovCisrI2VuZGlmCisKKyAjaWZkZWYgQ0hUWVBFX0xPTkcKKyAjIGlmIF9MUDY0CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xNi4xYS8xMDAtYmZkLWhhc2gtdHdlYWsucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xNi4xYS8xMDAtYmZkLWhhc2gtdHdlYWsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZkZTkzYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE2LjFhLzEwMC1iZmQtaGFzaC10d2Vhay5wYXRjaApAQCAtMCwwICsxLDIzIEBACitTaWduZWQtb2ZmLWJ5OiBkYW5rQGtlZ2VsLmNvbQorCitSYWlzaW5nIHRoZSBzaXplIG9mIHRoZSBoYXNoIHRhYmxlIGlzIGEgbm90aWNhYmxlIHdpbiB3aGVuIGxpbmtpbmcgCithdCBsZWFzdCBvbmUgbGFyZ2UgYXBwLiAgCisKK1RoZXJlIHdhcyBhIHBhdGNoLAoraHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9tbC9iaW51dGlscy8yMDA0LTA2L21zZzAwMTY1Lmh0bWwKK3RvIGRvIHRoaXMgZHluYW1pY2FsbHkuICBObyBpZGVhIHdoeSB0aGF0IGRpZG4ndCBtYWtlIGl0IGluLgorU28gdGhpcyB0aW55IGNoYW5nZSB0byByYWlzZSB0aGUgZGVmYXVsdCBzaXplIGlzIGp1c3QKK2Egc3RvcGdhcCBmb3Igbm93LgorCisKKy0tLSBiaW51dGlscy0yLjE2LjEvYmZkL2hhc2guYy5vbGQJMjAwNi0wMy0wMiAyMzowMTozOS4wMDAwMDAwMDAgLTA4MDAKKysrKyBiaW51dGlscy0yLjE2LjEvYmZkL2hhc2guYwkyMDA2LTAzLTAyIDIzOjAxOjU4LjAwMDAwMDAwMCAtMDgwMAorQEAgLTMwMCw3ICszMDAsNyBAQAorICovCisgCisgLyogVGhlIGRlZmF1bHQgbnVtYmVyIG9mIGVudHJpZXMgdG8gdXNlIHdoZW4gY3JlYXRpbmcgYSBoYXNoIHRhYmxlLiAgKi8KKy0jZGVmaW5lIERFRkFVTFRfU0laRSA0MDUxCisrI2RlZmluZSBERUZBVUxUX1NJWkUgMzI3NDkKKyBzdGF0aWMgc2l6ZV90IGJmZF9kZWZhdWx0X2hhc2hfdGFibGVfc2l6ZSA9IERFRkFVTFRfU0laRTsKKyAKKyAvKiBDcmVhdGUgYSBuZXcgaGFzaCB0YWJsZSwgZ2l2ZW4gYSBudW1iZXIgb2YgZW50cmllcy4gICovCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xNi4xYS8xMTAtcHNpZ25hbC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE2LjFhLzExMC1wc2lnbmFsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZmE2MDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xNi4xYS8xMTAtcHNpZ25hbC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitNYWtlIHBzaWduYWwgcHJvdG90eXBlIGluIGxpYmliZXJ0eSBtYXRjaCB0aGF0IGluIGdsaWJjLgorCitGaXhlczoKKworZ2NjLTIuOTUuMy1nbGliYy0yLjEuMy9iaW51dGlscy0yLjE1L2xpYmliZXJ0eS9zdHJzaWduYWwuYzogSW4gZnVuY3Rpb24gYHBzaWduYWwnOgorZ2NjLTIuOTUuMy1nbGliYy0yLjEuMy9iaW51dGlscy0yLjE1L2xpYmliZXJ0eS9zdHJzaWduYWwuYzo1NjM6IGFyZ3VtZW50IGBzaWdubycgZG9lc24ndCBtYXRjaCBwcm90b3R5cGUKKy91c3IvaW5jbHVkZS9zaWduYWwuaDoxMzE6IHByb3RvdHlwZSBkZWNsYXJhdGlvbgorZ2NjLTIuOTUuMy1nbGliYy0yLjEuMy9iaW51dGlscy0yLjE1L2xpYmliZXJ0eS9zdHJzaWduYWwuYzo1NjM6IGFyZ3VtZW50IGBtZXNzYWdlJyBkb2Vzbid0IG1hdGNoIHByb3RvdHlwZQorL3Vzci9pbmNsdWRlL3NpZ25hbC5oOjEzMTogcHJvdG90eXBlIGRlY2xhcmF0aW9uCitnY2MtMi45NS4zLWdsaWJjLTIuMS4zL2JpbnV0aWxzLTIuMTUvbGliaWJlcnR5L3N0cnNpZ25hbC5jOjU2ODogd2FybmluZzogY29tcGFyaXNvbiBiZXR3ZWVuIHNpZ25lZCBhbmQgdW5zaWduZWQKK21wcm90ZWN0Li4uIG1ha2VbMV06ICoqKiBbc3Ryc2lnbmFsLm9dIEVycm9yIDEKK21ha2VbMV06IExlYXZpbmcgZGlyZWN0b3J5IGAvZXhwb3J0L2hkYTMvZGtlZ2VsL3F1ZXVlL2pvYmRpci5wcm9kdXNlcl9jcHNtMTcvY3Jvc3N0b29sLTAuMzIvYnVpbGQvaTY4Ni11bmtub3duLWxpbnV4LWdudS9nY2MtMi45NS4zLWdsaWJjLTIuMS4zL2J1aWxkLWJpbnV0aWxzL2xpYmliZXJ0eScKK21ha2U6ICoqKiBbYWxsLWxpYmliZXJ0eV0gRXJyb3IgMgorCit3aGVuIGJ1aWxkaW5nIG9uIHJlZCBoYXQgNy4xCit0aG91Z2ggaXQncyBhIGJpdCBvZiBhIG15c3Rlcnkgd2h5IGxpYmliZXJ0eSdzIHBzaWduYWwgaXMgYmVpbmcgY29tcGlsZWQgYXQKK2FsbCwgc2luY2UgcmVkIGhhdCA3LjEncyBnbGliYyBzdXBwb3J0cyBwc2lnbmFsIChoZW5jZSB0aGUgZXJyb3IgbWVzc2FnZSkKKworLS0tIGJpbnV0aWxzLTIuMTUvbGliaWJlcnR5L3N0cnNpZ25hbC5jLm9sZAkyMDA1LTA0LTE4IDEzOjU3OjQwLjAwMDAwMDAwMCAtMDcwMAorKysrIGJpbnV0aWxzLTIuMTUvbGliaWJlcnR5L3N0cnNpZ25hbC5jCTIwMDUtMDQtMTggMTM6NTk6MDkuMDAwMDAwMDAwIC0wNzAwCitAQCAtNTQ0LDcgKzU0NCw3IEBACisgCisgLyoKKyAKKy1AZGVmdHlwZWZuIFN1cHBsZW1lbnRhbCB2b2lkIHBzaWduYWwgKHVuc2lnbmVkIEB2YXJ7c2lnbm99LCBjaGFyICpAdmFye21lc3NhZ2V9KQorK0BkZWZ0eXBlZm4gU3VwcGxlbWVudGFsIHZvaWQgcHNpZ25hbCAoaW50IEB2YXJ7c2lnbm99LCBjb25zdCBjaGFyICpAdmFye21lc3NhZ2V9KQorIAorIFByaW50IEB2YXJ7bWVzc2FnZX0gdG8gdGhlIHN0YW5kYXJkIGVycm9yLCBmb2xsb3dlZCBieSBhIGNvbG9uLAorIGZvbGxvd2VkIGJ5IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgc2lnbmFsIHNwZWNpZmllZCBieSBAdmFye3NpZ25vfSwKK0BAIC01NTcsOSArNTU3LDcgQEAKKyAjaWZuZGVmIEhBVkVfUFNJR05BTAorIAorIHZvaWQKKy1wc2lnbmFsIChzaWdubywgbWVzc2FnZSkKKy0gIHVuc2lnbmVkIHNpZ25vOworLSAgY2hhciAqbWVzc2FnZTsKKytwc2lnbmFsIChpbnQgc2lnbm8sIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCisgeworICAgaWYgKHNpZ25hbF9uYW1lcyA9PSBOVUxMKQorICAgICB7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xNi4xYS8xMjAtc2tpcC1jb21tZW50cy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE2LjFhLzEyMC1za2lwLWNvbW1lbnRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjYTlhNDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xNi4xYS8xMjAtc2tpcC1jb21tZW50cy5wYXRjaApAQCAtMCwwICsxLDk1IEBACitbcmVtb3ZlZCBmaXJzdCBodW5rIHNvIGl0IHdvdWxkIGFwcGx5IHRvIDIuMTYuMSAtIGNvcHlyaWdodCBkYXRlIGFscmVhZHkgdXBkYXRlZCAtIGRhbmtdCisKK1JldHJpZXZlZCBmcm9tIGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vbWwvYmludXRpbHMvMjAwNC0wNC9tc2cwMDY0Ni5odG1sCitGaXhlcworbG9jYWxlYWxpYXMuczo1NDQ6IEVycm9yOiBqdW5rIGF0IGVuZCBvZiBsaW5lLCBmaXJzdCB1bnJlY29nbml6ZWQgY2hhcmFjdGVyIGlzIGAsJyAKK3doZW4gYnVpbGRpbmcgZ2xpYmMtMi4zLjIgd2l0aCBnY2MtMy40LjAgYW5kIGJpbnV0aWxzLTIuMTUuOTAuMC4zCisKK1BhdGhzIGFkanVzdGVkIHRvIG1hdGNoIGNyb3NzdG9vbCdzIHBhdGNoZXIuCisKK01lc3NhZ2UtSWQ6IG0zbjA1MnF3MmcuZnNmQHdoaXRlYm94Lm01ci5kZQorRnJvbTogQW5kcmVhcyBTY2h3YWIgPHNjaHdhYiBhdCBzdXNlIGRvdCBkZT4KK1RvOiBOYXRoYW4gU2lkd2VsbCA8bmF0aGFuIGF0IGNvZGVzb3VyY2VyeSBkb3QgY29tPgorQ2M6IElhbiBMYW5jZSBUYXlsb3IgPGlhbiBhdCB3YXNhYmlzeXN0ZW1zIGRvdCBjb20+LCBiaW51dGlscyBhdCBzb3VyY2VzIGRvdCByZWRoYXQgZG90IGNvbQorRGF0ZTogRnJpLCAyMyBBcHIgMjAwNCAyMjoyNzoxOSArMDIwMAorU3ViamVjdDogUmU6IGRlbWFuZF9lbXB0eV9yZXN0X29mX2xpbmUgYW5kIGlnbm9yZV9yZXN0X29mX2xpbmUKKworTmF0aGFuIFNpZHdlbGwgPG5hdGhhbkBjb2Rlc291cmNlcnkuY29tPiB3cml0ZXM6CisKKz4gSW5kZXg6IHJlYWQuYworPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis+IFJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2FzL3JlYWQuYyx2Cis+IHJldHJpZXZpbmcgcmV2aXNpb24gMS43NgorPiBkaWZmIC1jIC0zIC1wIC1yMS43NiByZWFkLmMKKz4gKioqIHJlYWQuYwkxMiBNYXIgMjAwNCAxNzo0ODoxMiAtMDAwMAkxLjc2Cis+IC0tLSByZWFkLmMJMTggTWFyIDIwMDQgMDk6NTY6MDUgLTAwMDAKKz4gKioqKioqKioqKioqKioqIHJlYWRfYV9zb3VyY2VfZmlsZSAoY2hhciAqbmFtZSkKKz4gKioqIDEwNTMsMTA1OSAqKioqCis+ICAgI2VuZGlmCis+ICAgCSAgaW5wdXRfbGluZV9wb2ludGVyLS07Cis+ICAgCSAgLyogUmVwb3J0IHVua25vd24gY2hhciBhcyBpZ25vcmVkLiAgKi8KKz4gISAJICBpZ25vcmVfcmVzdF9vZl9saW5lICgpOworPiAgIAl9Cis+ICAgCis+ICAgI2lmZGVmIG1kX2FmdGVyX3Bhc3NfaG9vaworPiAtLS0gMTA1MywxMDU5IC0tLS0KKz4gICAjZW5kaWYKKz4gICAJICBpbnB1dF9saW5lX3BvaW50ZXItLTsKKz4gICAJICAvKiBSZXBvcnQgdW5rbm93biBjaGFyIGFzIGlnbm9yZWQuICAqLworPiAhIAkgIGRlbWFuZF9lbXB0eV9yZXN0X29mX2xpbmUgKCk7Cis+ICAgCX0KKz4gICAKKz4gICAjaWZkZWYgbWRfYWZ0ZXJfcGFzc19ob29rCisKK1RoaXMgbWVhbnMgdGhhdCB0aGUgdW5rbm93biBjaGFyYWN0ZXIgaXMgbm8gbG9uZ2VyIGlnbm9yZWQsIGRlc3BpdGUgdGhlCitjb21tZW50LiAgQXMgYSBzaWRlIGVmZmVjdCBhIGxpbmUgc3RhcnRpbmcgd2l0aCBhIGxpbmUgY29tbWVudCBjaGFyYWN0ZXIKK25vdCBmb2xsb3dlZCBieSBBUFAgaW4gTk9fQVBQIG1vZGUgbm93IHRyaWdnZXJzIGFuIGVycm9yIGluc3RlYWQgb2YganVzdCBhCit3YXJuaW5nLCBicmVha2luZyBidWlsZHMgb2YgZ2xpYmMgb24gbTY4ay1saW51eC4gIEVhcmxpZXIgaW4KK3JlYWRfYV9zb3VyY2VfZmlsZSB3aGVyZSAjQVBQIGlzIGhhbmRsZWQgdGhlcmUgaXMgYW5vdGhlciBjb21tZW50IHRoYXQKK2NsYWltcyB0aGF0IHVua25vd24gY29tbWVudHMgYXJlIGlnbm9yZWQsIHdoZW4gaW4gZmFjdCB0aGV5IGFyZW4ndCAob25seQordGhlIGluaXRpYWwgbGluZSBjb21tZW50IGNoYXJhY3RlciBpcyBza2lwcGVkKS4KKworTm90ZSB0aGF0IHRoZSBwcmVzZW5jZSBvZiAjQVBQIHdpbGwgbWVzcyB1cCB0aGUgbGluZSBjb3VudGVycywgYnV0Cit0aGF0IGFwcGVhcnMgdG8gYmUgZGlmZmljdWx0IHRvIGZpeC4KKworQW5kcmVhcy4KKworMjAwNC0wNC0yMyAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAc3VzZS5kZT4KKworCSogcmVhZC5jIChyZWFkX2Ffc291cmNlX2ZpbGUpOiBJZ25vcmUgdW5rbm93biB0ZXh0IGFmdGVyIGxpbmUKKwljb21tZW50IGNoYXJhY3Rlci4gIEZpeCBtaXNsZWFkaW5nIGNvbW1lbnQuCisKKy0tLSBiaW51dGlscy9nYXMvcmVhZC5jLn4xLjc4Ln4JMjAwNC0wNC0yMyAwODo1ODoyMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBiaW51dGlscy9nYXMvcmVhZC5jCTIwMDQtMDQtMjMgMjE6NDk6MDEuMDAwMDAwMDAwICswMjAwCitAQCAtOTUwLDEwICs5NTAsMTQgQEAgcmVhZF9hX3NvdXJjZV9maWxlIChjaGFyICpuYW1lKQorIAkgICAgICB1bnNpZ25lZCBpbnQgbmV3X2xlbmd0aDsKKyAJICAgICAgY2hhciAqdG1wX2J1ZiA9IDA7CisgCistCSAgICAgIGJ1bXBfbGluZV9jb3VudGVycyAoKTsKKyAJICAgICAgcyA9IGlucHV0X2xpbmVfcG9pbnRlcjsKKyAJICAgICAgaWYgKHN0cm5jbXAgKHMsICJBUFBcbiIsIDQpKQorLQkJY29udGludWU7CS8qIFdlIGlnbm9yZSBpdCAqLworKwkJeworKwkJICAvKiBXZSBpZ25vcmUgaXQgKi8KKysJCSAgaWdub3JlX3Jlc3Rfb2ZfbGluZSAoKTsKKysJCSAgY29udGludWU7CisrCQl9CisrCSAgICAgIGJ1bXBfbGluZV9jb3VudGVycyAoKTsKKyAJICAgICAgcyArPSA0OworIAorIAkgICAgICBzYl9uZXcgKCZzYnVmKTsKK0BAIC0xMDUyLDcgKzEwNTYsNyBAQCByZWFkX2Ffc291cmNlX2ZpbGUgKGNoYXIgKm5hbWUpCisgCSAgICBjb250aW51ZTsKKyAjZW5kaWYKKyAJICBpbnB1dF9saW5lX3BvaW50ZXItLTsKKy0JICAvKiBSZXBvcnQgdW5rbm93biBjaGFyIGFzIGlnbm9yZWQuICAqLworKwkgIC8qIFJlcG9ydCB1bmtub3duIGNoYXIgYXMgZXJyb3IuICAqLworIAkgIGRlbWFuZF9lbXB0eV9yZXN0X29mX2xpbmUgKCk7CisgCX0KKyAKKworLS0gCitBbmRyZWFzIFNjaHdhYiwgU3VTRSBMYWJzLCBzY2h3YWJAc3VzZS5kZQorU3VTRSBMaW51eCBBRywgTWF4ZmVsZHN0cmEmI3hDMztlIDUsIDkwNDA5IE4mI3hDMztybmJlcmcsIEdlcm1hbnkKK0tleSBmaW5nZXJwcmludCA9IDU4Q0EgNTRDNyA2RDUzIDk0MkIgMTc1NiAgMDFEMyA0NEQ1IDIxNEIgODI3NiA0RUQ1CisiQW5kIG5vdyBmb3Igc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50LiIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE2LjFhLzEzMC1jYWxsYWhhbi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE2LjFhLzEzMC1jYWxsYWhhbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzkwNTBmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTYuMWEvMTMwLWNhbGxhaGFuLnBhdGNoCkBAIC0wLDAgKzEsNjkzIEBACitTaWduZWQtb2ZmLWJ5OiBkYW5rQGtlZ2VsLmNvbQorRml4ZXMgbGQgc3BlZWQgaXNzdWUuIAorU2VlIGh0dHA6Ly93ZWJsb2dzLm1vemlsbGF6aW5lLm9yZy9yb2MvYXJjaGl2ZXMvMjAwNS8wMi9vcHRpbWl6aW5nX2dudS5odG1sCitTZWUgdGhyZWFkICJSZTogb3B0aW1pemF0aW9ucyBmb3IgM3ggc3BlZWR1cCBpbiBsZCIsCitodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL21sL2JpbnV0aWxzLzIwMDUtMDMvbXNnMDA4NDcuaHRtbAorCitXaWxkY2FyZCBzZWN0aW9uIG1hdGNoaW5nIGVuaGFuY2VtZW50LCBiYWNrcG9ydGVkIGZyb20gdGhlIGJpbnV0aWxzIENWUyB0cmVlLgorSGVyZSdzIHRoZSBDVlMgbG9nIGNvbW1lbnQgZnJvbSB0aGUgb3JpZ2luYWwgY2hhbmdlIHRvIGxkbGFuZy5jOgorCityZXZpc2lvbiAxLjE3NworZGF0ZTogMjAwNS8wNC8wNiAxNTozMzowMjsgIGF1dGhvcjogamFrdWI7ICBzdGF0ZTogRXhwOyAgbGluZXM6ICs0MzggLTUxCisyMDA1LTA0LTA2ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworICAgICAgICAqIGxkbGFuZy5jOiBGb3JtYXR0aW5nLgorICAgICAgICAod2Fsa193aWxkX2NvbnNpZGVyX3NlY3Rpb24pOiBSZW1lbWJlciByZXR1cm4gdmFsdWUgZnJvbSB3aWxkY2FyZHAuCisgICAgICAgIChpc19zaW1wbGVfd2lsZCk6IFVzZSBzdHJjc3BuIGluc3RlYWQgb2YgMiBzdHJwYnJrIGNhbGxzIGFuZCBzdHJsZW4uCisgICAgICAgICh3aWxkX3NwZWNfY2FuX292ZXJsYXApOiBVc2Ugc3RyY3NwbiBpbnN0ZWFkIG9mIHN0cnBicmsgYW5kIHN0cmxlbi4KKworMjAwNS0wNC0wNiAgUm9iZXJ0IE8nQ2FsbGFoYW4gIDxyb2NhbGxhaGFuQG5vdmVsbC5jb20+CisKKyAgICAgICAgKiBsZC5oIChsZWFuX3NlY3Rpb25fdXNlcmRhdGFfdHlwZSk6IFJlbW92ZS4KKyAgICAgICAgKGZhdF9zZWN0aW9uX3VzZXJkYXRhX3R5cGUpOiBSZW1vdmUgZmlsZSBmaWVsZC4KKyAgICAgICAgKFNFQ1RJT05fVVNFUkRBVEFfU0laRSk6IFJlbW92ZS4KKyAgICAgICAgKiBsZGxhbmcuYyAoaW5pdF9vcyk6IEVsaW1pbmF0ZSBpbml0aWFsaXphdGlvbiBvZiB1bnVzZWQKKyAgICAgICAgbGVhbl9zZWN0aW9uX3VzZXJkYXRhX3R5cGUuCisKKyAgICAgICAgKiBsZGxhbmcuaCAoY2FsbGJhY2tfdCwgd2Fsa193aWxkX3NlY3Rpb25faGFuZGxlcl90KTogTmV3CisgICAgICAgIHR5cGVkZWZzLgorICAgICAgICAoc3RydWN0IGxhbmdfd2lsZF9zdGF0ZW1lbnRfc3RydWN0KTogQWRkIHdhbGtfd2lsZF9zZWN0aW9uX2hhbmRsZXIKKyAgICAgICAgYW5kIGhhbmRsZXJfZGF0YSBmaWVsZHMuCisgICAgICAgICogbGRsYW5nLmMgKGNhbGxiYWNrX3QpOiBSZW1vdmVkLgorICAgICAgICAod2Fsa193aWxkX2NvbnNpZGVyX3NlY3Rpb24sIHdhbGtfd2lsZF9zZWN0aW9uX2dlbmVyYWwsCisgICAgICAgIHNlY3Rpb25faXRlcmF0b3JfY2FsbGJhY2ssIGZpbmRfc2VjdGlvbiwgaXNfc2ltcGxlX3dpbGQsCisgICAgICAgIG1hdGNoX3NpbXBsZV93aWxkLCB3YWxrX3dpbGRfc2VjdGlvbl9zcGVjczFfd2lsZDAsCisgICAgICAgIHdhbGtfd2lsZF9zZWN0aW9uX3NwZWNzMV93aWxkMSwgd2Fsa193aWxkX3NlY3Rpb25fc3BlY3MyX3dpbGQxLAorICAgICAgICB3YWxrX3dpbGRfc2VjdGlvbl9zcGVjczNfd2lsZDIsIHdhbGtfd2lsZF9zZWN0aW9uX3NwZWNzNF93aWxkMiwKKyAgICAgICAgd2lsZF9zcGVjX2Nhbl9vdmVybGFwLCBhbmFseXplX3dhbGtfd2lsZF9zZWN0aW9uX2hhbmRsZXIpOiBOZXcKKyAgICAgICAgZnVuY3Rpb25zLgorICAgICAgICAobGFuZ19hZGRfd2lsZCk6IENhbGwgYW5hbHl6ZV93YWxrX3dpbGRfc2VjdGlvbl9oYW5kbGVyLgorICAgICAgICAod2Fsa193aWxkX3NlY3Rpb24pOiBSZW5hbWVkIHRvIHdhbGtfd2lsZF9zZWN0aW9uX2dlbmVyYWwgYW5kCisgICAgICAgIGNyZWF0ZWQgYSB3cmFwcGVyIGZ1bmN0aW9uLgorICAgICAgICAoc2VjdGlvbl9pdGVyYXRvcl9jYWxsYmFja19kYXRhKTogTmV3IHR5cGVkZWYuCisKKworSW5kZXg6IHNyYy9sZC9sZC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2xkL2xkLmgsdgorcmV0cmlldmluZyByZXZpc2lvbiAxLjI2CityZXRyaWV2aW5nIHJldmlzaW9uIDEuMjcKK2RpZmYgLXUgLXIxLjI2IC1yMS4yNworLS0tIGJpbnV0aWxzL2xkL2xkLmgub2xkCTE2IE1hciAyMDA1IDIxOjUyOjQyIC0wMDAwCTEuMjYKKysrKyBiaW51dGlscy9sZC9sZC5oCTYgQXByIDIwMDUgMTU6MzM6MDIgLTAwMDAJMS4yNworQEAgLTEsNiArMSw2IEBACisgLyogbGQuaCAtLSBnZW5lcmFsIGxpbmtlciBoZWFkZXIgZmlsZQorICAgIENvcHlyaWdodCAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorLSAgIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQKKysgICAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1CisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0xELCB0aGUgR251IExpbmtlci4KK0BAIC04OSwyOCArODksMTUgQEAKKyAgIHN0cnVjdCBtYXBfc3ltYm9sX2RlZiAqbmV4dDsKKyB9OworIAorLS8qIEV4dHJhIGluZm9ybWF0aW9uIHdlIGhvbGQgb24gc2VjdGlvbnMgKi8KKy10eXBlZGVmIHN0cnVjdCBsZWFuX3VzZXJfc2VjdGlvbl9zdHJ1Y3QgeworLSAgLyogRm9yIG91dHB1dCBzZWN0aW9uczogcG9pbnRlciB0byB0aGUgc2VjdGlvbiB3aGVyZSB0aGlzIGRhdGEgd2lsbCBnby4gICovCistICBzdHJ1Y3QgbGFuZ19pbnB1dF9zdGF0ZW1lbnRfc3RydWN0ICpmaWxlOworLX0gbGVhbl9zZWN0aW9uX3VzZXJkYXRhX3R5cGU7CistCisgLyogVGhlIGluaXRpYWwgcGFydCBvZiBmYXRfdXNlcl9zZWN0aW9uX3N0cnVjdCBoYXMgdG8gYmUgaWRlbnRpYWwgd2l0aAorICAgIGxlYW5fdXNlcl9zZWN0aW9uX3N0cnVjdC4gICovCisgdHlwZWRlZiBzdHJ1Y3QgZmF0X3VzZXJfc2VjdGlvbl9zdHJ1Y3QgeworLSAgLyogRm9yIG91dHB1dCBzZWN0aW9uczogcG9pbnRlciB0byB0aGUgc2VjdGlvbiB3aGVyZSB0aGlzIGRhdGEgd2lsbCBnby4gICovCistICBzdHJ1Y3QgbGFuZ19pbnB1dF9zdGF0ZW1lbnRfc3RydWN0ICpmaWxlOworICAgLyogRm9yIGlucHV0IHNlY3Rpb25zLCB3aGVuIHdyaXRpbmcgYSBtYXAgZmlsZTogaGVhZCAvIHRhaWwgb2YgYSBsaW5rZWQKKyAgICAgIGxpc3Qgb2YgaGFzaCB0YWJsZSBlbnRyaWVzIGZvciBzeW1ib2xzIGRlZmluZWQgaW4gdGhpcyBzZWN0aW9uLiAgKi8KKyAgIHN0cnVjdCBtYXBfc3ltYm9sX2RlZiAqbWFwX3N5bWJvbF9kZWZfaGVhZDsKKyAgIHN0cnVjdCBtYXBfc3ltYm9sX2RlZiAqKm1hcF9zeW1ib2xfZGVmX3RhaWw7CisgfSBmYXRfc2VjdGlvbl91c2VyZGF0YV90eXBlOworIAorLSNkZWZpbmUgU0VDVElPTl9VU0VSREFUQV9TSVpFIFwKKy0gKGNvbW1hbmRfbGluZS5yZWR1Y2VfbWVtb3J5X292ZXJoZWFkcyBcCistICA/IHNpemVvZiAobGVhbl9zZWN0aW9uX3VzZXJkYXRhX3R5cGUpIFwKKy0gIDogc2l6ZW9mIChmYXRfc2VjdGlvbl91c2VyZGF0YV90eXBlKSkKKy0KKyAjZGVmaW5lIGdldF91c2VyZGF0YSh4KSAoKHgpLT51c2VyZGF0YSkKKyAKKyAjZGVmaW5lIEJZVEVfU0laRQkoMSkKK0luZGV4OiBzcmMvbGQvbGRsYW5nLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvbGQvbGRsYW5nLmMsdgorcmV0cmlldmluZyByZXZpc2lvbiAxLjE3NgorcmV0cmlldmluZyByZXZpc2lvbiAxLjE3NworZGlmZiAtdSAtcjEuMTc2IC1yMS4xNzcKKy0tLSBiaW51dGlscy9sZC9sZGxhbmcuYy5vbGQJMTggTWFyIDIwMDUgMTM6NTY6MjYgLTAwMDAJMS4xNzYKKysrKyBiaW51dGlscy9sZC9sZGxhbmcuYwk2IEFwciAyMDA1IDE1OjMzOjAyIC0wMDAwCTEuMTc3CitAQCAtODQsOSArODQsNiBAQAorIHN0YXRpYyB2b2lkIGxhbmdfcmVjb3JkX3BoZHJzICh2b2lkKTsKKyBzdGF0aWMgdm9pZCBsYW5nX2RvX3ZlcnNpb25fZXhwb3J0c19zZWN0aW9uICh2b2lkKTsKKyAKKy10eXBlZGVmIHZvaWQgKCpjYWxsYmFja190KSAobGFuZ193aWxkX3N0YXRlbWVudF90eXBlICosIHN0cnVjdCB3aWxkY2FyZF9saXN0ICosCistCQkJICAgIGFzZWN0aW9uICosIGxhbmdfaW5wdXRfc3RhdGVtZW50X3R5cGUgKiwgdm9pZCAqKTsKKy0KKyAvKiBFeHBvcnRlZCB2YXJpYWJsZXMuICAqLworIGxhbmdfb3V0cHV0X3NlY3Rpb25fc3RhdGVtZW50X3R5cGUgKmFic19vdXRwdXRfc2VjdGlvbjsKKyBsYW5nX3N0YXRlbWVudF9saXN0X3R5cGUgbGFuZ19vdXRwdXRfc2VjdGlvbl9zdGF0ZW1lbnQ7CitAQCAtMTU1LDIxICsxNTIsNzEgQEAKKyAKKyAvKiBHZW5lcmljIHRyYXZlcnNhbCByb3V0aW5lcyBmb3IgZmluZGluZyBtYXRjaGluZyBzZWN0aW9ucy4gICovCisgCisrLyogVHJ5IHByb2Nlc3NpbmcgYSBzZWN0aW9uIGFnYWluc3QgYSB3aWxkY2FyZC4gIFRoaXMganVzdCBjYWxscworKyAgIHRoZSBjYWxsYmFjayB1bmxlc3MgdGhlIGZpbGVuYW1lIGV4Y2x1c2lvbiBsaXN0IGlzIHByZXNlbnQKKysgICBhbmQgZXhjbHVkZXMgdGhlIGZpbGUuICBJdCdzIGhhcmRseSBldmVyIHByZXNlbnQgc28gdGhpcworKyAgIGZ1bmN0aW9uIGlzIHZlcnkgZmFzdC4gICovCisrCisrc3RhdGljIHZvaWQKKyt3YWxrX3dpbGRfY29uc2lkZXJfc2VjdGlvbiAobGFuZ193aWxkX3N0YXRlbWVudF90eXBlICpwdHIsCisrCQkJICAgIGxhbmdfaW5wdXRfc3RhdGVtZW50X3R5cGUgKmZpbGUsCisrCQkJICAgIGFzZWN0aW9uICpzLAorKwkJCSAgICBzdHJ1Y3Qgd2lsZGNhcmRfbGlzdCAqc2VjLAorKwkJCSAgICBjYWxsYmFja190IGNhbGxiYWNrLAorKwkJCSAgICB2b2lkICpkYXRhKQorK3sKKysgIGJmZF9ib29sZWFuIHNraXAgPSBGQUxTRTsKKysgIHN0cnVjdCBuYW1lX2xpc3QgKmxpc3RfdG1wOworKworKyAgLyogRG9uJ3QgcHJvY2VzcyBzZWN0aW9ucyBmcm9tIGZpbGVzIHdoaWNoIHdlcmUKKysgICAgIGV4Y2x1ZGVkLiAgKi8KKysgIGZvciAobGlzdF90bXAgPSBzZWMtPnNwZWMuZXhjbHVkZV9uYW1lX2xpc3Q7CisrICAgICAgIGxpc3RfdG1wOworKyAgICAgICBsaXN0X3RtcCA9IGxpc3RfdG1wLT5uZXh0KQorKyAgICB7CisrICAgICAgYmZkX2Jvb2xlYW4gaXNfd2lsZGNhcmQgPSB3aWxkY2FyZHAgKGxpc3RfdG1wLT5uYW1lKTsKKysgICAgICBpZiAoaXNfd2lsZGNhcmQpCisrCXNraXAgPSBmbm1hdGNoIChsaXN0X3RtcC0+bmFtZSwgZmlsZS0+ZmlsZW5hbWUsIDApID09IDA7CisrICAgICAgZWxzZQorKwlza2lwID0gc3RyY21wIChsaXN0X3RtcC0+bmFtZSwgZmlsZS0+ZmlsZW5hbWUpID09IDA7CisrCisrICAgICAgLyogSWYgdGhpcyBmaWxlIGlzIHBhcnQgb2YgYW4gYXJjaGl2ZSwgYW5kIHRoZSBhcmNoaXZlIGlzCisrCSBleGNsdWRlZCwgZXhjbHVkZSB0aGlzIGZpbGUuICAqLworKyAgICAgIGlmICghIHNraXAgJiYgZmlsZS0+dGhlX2JmZCAhPSBOVUxMCisrCSAgJiYgZmlsZS0+dGhlX2JmZC0+bXlfYXJjaGl2ZSAhPSBOVUxMCisrCSAgJiYgZmlsZS0+dGhlX2JmZC0+bXlfYXJjaGl2ZS0+ZmlsZW5hbWUgIT0gTlVMTCkKKysJeworKwkgIGlmIChpc193aWxkY2FyZCkKKysJICAgIHNraXAgPSBmbm1hdGNoIChsaXN0X3RtcC0+bmFtZSwKKysJCQkgICAgZmlsZS0+dGhlX2JmZC0+bXlfYXJjaGl2ZS0+ZmlsZW5hbWUsCisrCQkJICAgIDApID09IDA7CisrCSAgZWxzZQorKwkgICAgc2tpcCA9IHN0cmNtcCAobGlzdF90bXAtPm5hbWUsCisrCQkJICAgZmlsZS0+dGhlX2JmZC0+bXlfYXJjaGl2ZS0+ZmlsZW5hbWUpID09IDA7CisrCX0KKysKKysgICAgICBpZiAoc2tpcCkKKysJYnJlYWs7CisrICAgIH0KKysKKysgIGlmICghc2tpcCkKKysgICAgKCpjYWxsYmFjaykgKHB0ciwgc2VjLCBzLCBmaWxlLCBkYXRhKTsKKyt9CisrCisrLyogTG93ZXN0IGNvbW1vbiBkZW5vbWluYXRvciByb3V0aW5lIHRoYXQgY2FuIGhhbmRsZSBldmVyeXRoaW5nIGNvcnJlY3RseSwKKysgICBidXQgc2xvd2x5LiAgKi8KKysKKyBzdGF0aWMgdm9pZAorLXdhbGtfd2lsZF9zZWN0aW9uIChsYW5nX3dpbGRfc3RhdGVtZW50X3R5cGUgKnB0ciwKKy0JCSAgIGxhbmdfaW5wdXRfc3RhdGVtZW50X3R5cGUgKmZpbGUsCistCQkgICBjYWxsYmFja190IGNhbGxiYWNrLAorLQkJICAgdm9pZCAqZGF0YSkKKyt3YWxrX3dpbGRfc2VjdGlvbl9nZW5lcmFsIChsYW5nX3dpbGRfc3RhdGVtZW50X3R5cGUgKnB0ciwKKysJCQkgICBsYW5nX2lucHV0X3N0YXRlbWVudF90eXBlICpmaWxlLAorKwkJCSAgIGNhbGxiYWNrX3QgY2FsbGJhY2ssCisrCQkJICAgdm9pZCAqZGF0YSkKKyB7CisgICBhc2VjdGlvbiAqczsKKy0KKy0gIGlmIChmaWxlLT5qdXN0X3N5bXNfZmxhZykKKy0gICAgcmV0dXJuOworKyAgc3RydWN0IHdpbGRjYXJkX2xpc3QgKnNlYzsKKyAKKyAgIGZvciAocyA9IGZpbGUtPnRoZV9iZmQtPnNlY3Rpb25zOyBzICE9IE5VTEw7IHMgPSBzLT5uZXh0KQorICAgICB7CistICAgICAgc3RydWN0IHdpbGRjYXJkX2xpc3QgKnNlYzsKKy0KKyAgICAgICBzZWMgPSBwdHItPnNlY3Rpb25fbGlzdDsKKyAgICAgICBpZiAoc2VjID09IE5VTEwpCisgCSgqY2FsbGJhY2spIChwdHIsIHNlYywgcywgZmlsZSwgZGF0YSk7CitAQCAtMTc3LDM5ICsyMjQsOCBAQAorICAgICAgIHdoaWxlIChzZWMgIT0gTlVMTCkKKyAJeworIAkgIGJmZF9ib29sZWFuIHNraXAgPSBGQUxTRTsKKy0JICBzdHJ1Y3QgbmFtZV9saXN0ICpsaXN0X3RtcDsKKyAKKy0JICAvKiBEb24ndCBwcm9jZXNzIHNlY3Rpb25zIGZyb20gZmlsZXMgd2hpY2ggd2VyZQorLQkgICAgIGV4Y2x1ZGVkLiAgKi8KKy0JICBmb3IgKGxpc3RfdG1wID0gc2VjLT5zcGVjLmV4Y2x1ZGVfbmFtZV9saXN0OworLQkgICAgICAgbGlzdF90bXA7CistCSAgICAgICBsaXN0X3RtcCA9IGxpc3RfdG1wLT5uZXh0KQorLQkgICAgeworLQkgICAgICBpZiAod2lsZGNhcmRwIChsaXN0X3RtcC0+bmFtZSkpCistCQlza2lwID0gZm5tYXRjaCAobGlzdF90bXAtPm5hbWUsIGZpbGUtPmZpbGVuYW1lLCAwKSA9PSAwOworLQkgICAgICBlbHNlCistCQlza2lwID0gc3RyY21wIChsaXN0X3RtcC0+bmFtZSwgZmlsZS0+ZmlsZW5hbWUpID09IDA7CistCistCSAgICAgIC8qIElmIHRoaXMgZmlsZSBpcyBwYXJ0IG9mIGFuIGFyY2hpdmUsIGFuZCB0aGUgYXJjaGl2ZSBpcworLQkJIGV4Y2x1ZGVkLCBleGNsdWRlIHRoaXMgZmlsZS4gICovCistCSAgICAgIGlmICghIHNraXAgJiYgZmlsZS0+dGhlX2JmZCAhPSBOVUxMCistCQkgICYmIGZpbGUtPnRoZV9iZmQtPm15X2FyY2hpdmUgIT0gTlVMTAorLQkJICAmJiBmaWxlLT50aGVfYmZkLT5teV9hcmNoaXZlLT5maWxlbmFtZSAhPSBOVUxMKQorLQkJeworLQkJICBpZiAod2lsZGNhcmRwIChsaXN0X3RtcC0+bmFtZSkpCistCQkgICAgc2tpcCA9IGZubWF0Y2ggKGxpc3RfdG1wLT5uYW1lLAorLQkJCQkgICAgZmlsZS0+dGhlX2JmZC0+bXlfYXJjaGl2ZS0+ZmlsZW5hbWUsCistCQkJCSAgICAwKSA9PSAwOworLQkJICBlbHNlCistCQkgICAgc2tpcCA9IHN0cmNtcCAobGlzdF90bXAtPm5hbWUsCistCQkJCSAgIGZpbGUtPnRoZV9iZmQtPm15X2FyY2hpdmUtPmZpbGVuYW1lKSA9PSAwOworLQkJfQorLQorLQkgICAgICBpZiAoc2tpcCkKKy0JCWJyZWFrOworLQkgICAgfQorLQorLQkgIGlmICghc2tpcCAmJiBzZWMtPnNwZWMubmFtZSAhPSBOVUxMKQorKwkgIGlmIChzZWMtPnNwZWMubmFtZSAhPSBOVUxMKQorIAkgICAgeworIAkgICAgICBjb25zdCBjaGFyICpzbmFtZSA9IGJmZF9nZXRfc2VjdGlvbl9uYW1lIChmaWxlLT50aGVfYmZkLCBzKTsKKyAKK0BAIC0yMjAsMTMgKzIzNiwzODEgQEAKKyAJICAgIH0KKyAKKyAJICBpZiAoIXNraXApCistCSAgICAoKmNhbGxiYWNrKSAocHRyLCBzZWMsIHMsIGZpbGUsIGRhdGEpOworKwkgICAgd2Fsa193aWxkX2NvbnNpZGVyX3NlY3Rpb24gKHB0ciwgZmlsZSwgcywgc2VjLCBjYWxsYmFjaywgZGF0YSk7CisgCisgCSAgc2VjID0gc2VjLT5uZXh0OworIAl9CisgICAgIH0KKyB9CisgCisrLyogUm91dGluZXMgdG8gZmluZCBhIHNpbmdsZSBzZWN0aW9uIGdpdmVuIGl0cyBuYW1lLiAgSWYgdGhlcmUncyBtb3JlCisrICAgdGhhbiBvbmUgc2VjdGlvbiB3aXRoIHRoYXQgbmFtZSwgd2UgcmVwb3J0IHRoYXQuICAqLworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgYXNlY3Rpb24gKmZvdW5kX3NlY3Rpb247CisrICBiZmRfYm9vbGVhbiBtdWx0aXBsZV9zZWN0aW9uc19mb3VuZDsKKyt9IHNlY3Rpb25faXRlcmF0b3JfY2FsbGJhY2tfZGF0YTsKKysKKytzdGF0aWMgYmZkX2Jvb2xlYW4KKytzZWN0aW9uX2l0ZXJhdG9yX2NhbGxiYWNrIChiZmQgKmJmZCBBVFRSSUJVVEVfVU5VU0VELCBhc2VjdGlvbiAqcywgdm9pZCAqZGF0YSkKKyt7CisrICBzZWN0aW9uX2l0ZXJhdG9yX2NhbGxiYWNrX2RhdGEgKmQgPSBkYXRhOworKworKyAgaWYgKGQtPmZvdW5kX3NlY3Rpb24gIT0gTlVMTCkKKysgICAgeworKyAgICAgIGQtPm11bHRpcGxlX3NlY3Rpb25zX2ZvdW5kID0gVFJVRTsKKysgICAgICByZXR1cm4gVFJVRTsKKysgICAgfQorKworKyAgZC0+Zm91bmRfc2VjdGlvbiA9IHM7CisrICByZXR1cm4gRkFMU0U7CisrfQorKworK3N0YXRpYyBhc2VjdGlvbiAqCisrZmluZF9zZWN0aW9uIChsYW5nX2lucHV0X3N0YXRlbWVudF90eXBlICpmaWxlLAorKwkgICAgICBzdHJ1Y3Qgd2lsZGNhcmRfbGlzdCAqc2VjLAorKwkgICAgICBiZmRfYm9vbGVhbiAqbXVsdGlwbGVfc2VjdGlvbnNfZm91bmQpCisreworKyAgc2VjdGlvbl9pdGVyYXRvcl9jYWxsYmFja19kYXRhIGNiX2RhdGEgPSB7IE5VTEwsIEZBTFNFIH07CisrCisrICBiZmRfZ2V0X3NlY3Rpb25fYnlfbmFtZV9pZiAoZmlsZS0+dGhlX2JmZCwgc2VjLT5zcGVjLm5hbWUsIAorKwkJCSAgICAgIHNlY3Rpb25faXRlcmF0b3JfY2FsbGJhY2ssICZjYl9kYXRhKTsKKysgICptdWx0aXBsZV9zZWN0aW9uc19mb3VuZCA9IGNiX2RhdGEubXVsdGlwbGVfc2VjdGlvbnNfZm91bmQ7CisrICByZXR1cm4gY2JfZGF0YS5mb3VuZF9zZWN0aW9uOworK30KKysKKysvKiBDb2RlIGZvciBoYW5kbGluZyBzaW1wbGUgd2lsZGNhcmRzIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCBmbm1hdGNoLAorKyAgIHdoaWNoIGNhbiBiZSBleHBlbnNpdmUgYmVjYXVzZSBvZiBjaGFyc2V0IHRyYW5zbGF0aW9ucyBldGMuICAqLworKworKy8qIEEgc2ltcGxlIHdpbGQgaXMgYSBsaXRlcmFsIHN0cmluZyBmb2xsb3dlZCBieSBhIHNpbmdsZSAnKicsCisrICAgd2hlcmUgdGhlIGxpdGVyYWwgcGFydCBpcyBhdCBsZWFzdCA0IGNoYXJhY3RlcnMgbG9uZy4gICovCisrCisrc3RhdGljIGJmZF9ib29sZWFuCisraXNfc2ltcGxlX3dpbGQgKGNvbnN0IGNoYXIgKm5hbWUpCisreworKyAgc2l6ZV90IGxlbiA9IHN0cmNzcG4gKG5hbWUsICIqP1siKTsKKysgIHJldHVybiBsZW4gPj0gNCAmJiBuYW1lW2xlbl0gPT0gJyonICYmIG5hbWVbbGVuICsgMV0gPT0gJ1wwJzsKKyt9CisrCisrc3RhdGljIGJmZF9ib29sZWFuCisrbWF0Y2hfc2ltcGxlX3dpbGQgKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNvbnN0IGNoYXIgKm5hbWUpCisreworKyAgLyogVGhlIGZpcnN0IGZvdXIgY2hhcmFjdGVycyBvZiB0aGUgcGF0dGVybiBhcmUgZ3VhcmFudGVlZCB2YWxpZAorKyAgICAgbm9uLXdpbGRjYXJkIGNoYXJhY3RlcnMuICBTbyB3ZSBjYW4gZ28gZmFzdGVyLiAgKi8KKysgIGlmIChwYXR0ZXJuWzBdICE9IG5hbWVbMF0gfHwgcGF0dGVyblsxXSAhPSBuYW1lWzFdCisrICAgICAgfHwgcGF0dGVyblsyXSAhPSBuYW1lWzJdIHx8IHBhdHRlcm5bM10gIT0gbmFtZVszXSkKKysgICAgcmV0dXJuIEZBTFNFOworKworKyAgcGF0dGVybiArPSA0OworKyAgbmFtZSArPSA0OworKyAgd2hpbGUgKCpwYXR0ZXJuICE9ICcqJykKKysgICAgaWYgKCpuYW1lKysgIT0gKnBhdHRlcm4rKykKKysgICAgICByZXR1cm4gRkFMU0U7CisrCisrICByZXR1cm4gVFJVRTsKKyt9CisrCisrLyogU3BlY2lhbGl6ZWQsIG9wdGltaXplZCByb3V0aW5lcyBmb3IgaGFuZGxpbmcgZGlmZmVyZW50IGtpbmRzIG9mCisrICAgd2lsZGNhcmRzICovCisrCisrc3RhdGljIHZvaWQKKyt3YWxrX3dpbGRfc2VjdGlvbl9zcGVjczFfd2lsZDAgKGxhbmdfd2lsZF9zdGF0ZW1lbnRfdHlwZSAqcHRyLAorKwkJCQlsYW5nX2lucHV0X3N0YXRlbWVudF90eXBlICpmaWxlLAorKwkJCQljYWxsYmFja190IGNhbGxiYWNrLAorKwkJCQl2b2lkICpkYXRhKQorK3sKKysgIC8qIFdlIGNhbiBqdXN0IGRvIGEgaGFzaCBsb29rdXAgZm9yIHRoZSBzZWN0aW9uIHdpdGggdGhlIHJpZ2h0IG5hbWUuCisrICAgICBCdXQgaWYgdGhhdCBsb29rdXAgZGlzY292ZXJzIG1vcmUgdGhhbiBvbmUgc2VjdGlvbiB3aXRoIHRoZSBuYW1lCisrICAgICAoc2hvdWxkIGJlIHJhcmUpLCB3ZSBmYWxsIGJhY2sgdG8gdGhlIGdlbmVyYWwgYWxnb3JpdGhtIGJlY2F1c2UKKysgICAgIHdlIHdvdWxkIG90aGVyd2lzZSBoYXZlIHRvIHNvcnQgdGhlIHNlY3Rpb25zIHRvIG1ha2Ugc3VyZSB0aGV5CisrICAgICBnZXQgcHJvY2Vzc2VkIGluIHRoZSBiZmQncyBvcmRlci4gICovCisrICBiZmRfYm9vbGVhbiBtdWx0aXBsZV9zZWN0aW9uc19mb3VuZDsKKysgIHN0cnVjdCB3aWxkY2FyZF9saXN0ICpzZWMwID0gcHRyLT5oYW5kbGVyX2RhdGFbMF07CisrICBhc2VjdGlvbiAqczAgPSBmaW5kX3NlY3Rpb24gKGZpbGUsIHNlYzAsICZtdWx0aXBsZV9zZWN0aW9uc19mb3VuZCk7CisrCisrICBpZiAobXVsdGlwbGVfc2VjdGlvbnNfZm91bmQpCisrICAgIHdhbGtfd2lsZF9zZWN0aW9uX2dlbmVyYWwgKHB0ciwgZmlsZSwgY2FsbGJhY2ssIGRhdGEpOworKyAgZWxzZSBpZiAoczApCisrICAgIHdhbGtfd2lsZF9jb25zaWRlcl9zZWN0aW9uIChwdHIsIGZpbGUsIHMwLCBzZWMwLCBjYWxsYmFjaywgZGF0YSk7CisrfQorKworK3N0YXRpYyB2b2lkCisrd2Fsa193aWxkX3NlY3Rpb25fc3BlY3MxX3dpbGQxIChsYW5nX3dpbGRfc3RhdGVtZW50X3R5cGUgKnB0ciwKKysJCQkJbGFuZ19pbnB1dF9zdGF0ZW1lbnRfdHlwZSAqZmlsZSwKKysJCQkJY2FsbGJhY2tfdCBjYWxsYmFjaywKKysJCQkJdm9pZCAqZGF0YSkKKyt7CisrICBhc2VjdGlvbiAqczsKKysgIHN0cnVjdCB3aWxkY2FyZF9saXN0ICp3aWxkc2VjMCA9IHB0ci0+aGFuZGxlcl9kYXRhWzBdOworKworKyAgZm9yIChzID0gZmlsZS0+dGhlX2JmZC0+c2VjdGlvbnM7IHMgIT0gTlVMTDsgcyA9IHMtPm5leHQpCisrICAgIHsKKysgICAgICBjb25zdCBjaGFyICpzbmFtZSA9IGJmZF9nZXRfc2VjdGlvbl9uYW1lIChmaWxlLT50aGVfYmZkLCBzKTsKKysgICAgICBiZmRfYm9vbGVhbiBza2lwID0gIW1hdGNoX3NpbXBsZV93aWxkICh3aWxkc2VjMC0+c3BlYy5uYW1lLCBzbmFtZSk7CisrCisrICAgICAgaWYgKCFza2lwKQorKwl3YWxrX3dpbGRfY29uc2lkZXJfc2VjdGlvbiAocHRyLCBmaWxlLCBzLCB3aWxkc2VjMCwgY2FsbGJhY2ssIGRhdGEpOworKyAgICB9CisrfQorKworK3N0YXRpYyB2b2lkCisrd2Fsa193aWxkX3NlY3Rpb25fc3BlY3MyX3dpbGQxIChsYW5nX3dpbGRfc3RhdGVtZW50X3R5cGUgKnB0ciwKKysJCQkJbGFuZ19pbnB1dF9zdGF0ZW1lbnRfdHlwZSAqZmlsZSwKKysJCQkJY2FsbGJhY2tfdCBjYWxsYmFjaywKKysJCQkJdm9pZCAqZGF0YSkKKyt7CisrICBhc2VjdGlvbiAqczsKKysgIHN0cnVjdCB3aWxkY2FyZF9saXN0ICpzZWMwID0gcHRyLT5oYW5kbGVyX2RhdGFbMF07CisrICBzdHJ1Y3Qgd2lsZGNhcmRfbGlzdCAqd2lsZHNlYzEgPSBwdHItPmhhbmRsZXJfZGF0YVsxXTsKKysgIGJmZF9ib29sZWFuIG11bHRpcGxlX3NlY3Rpb25zX2ZvdW5kOworKyAgYXNlY3Rpb24gKnMwID0gZmluZF9zZWN0aW9uIChmaWxlLCBzZWMwLCAmbXVsdGlwbGVfc2VjdGlvbnNfZm91bmQpOworKworKyAgaWYgKG11bHRpcGxlX3NlY3Rpb25zX2ZvdW5kKQorKyAgICB7CisrICAgICAgd2Fsa193aWxkX3NlY3Rpb25fZ2VuZXJhbCAocHRyLCBmaWxlLCBjYWxsYmFjaywgZGF0YSk7CisrICAgICAgcmV0dXJuOworKyAgICB9CisrCisrICAvKiBOb3RlIHRoYXQgaWYgdGhlIHNlY3Rpb24gd2FzIG5vdCBmb3VuZCwgczAgaXMgTlVMTCBhbmQKKysgICAgIHdlJ2xsIHNpbXBseSBuZXZlciBzdWNjZWVkIHRoZSBzID09IHMwIHRlc3QgYmVsb3cuICAqLworKyAgZm9yIChzID0gZmlsZS0+dGhlX2JmZC0+c2VjdGlvbnM7IHMgIT0gTlVMTDsgcyA9IHMtPm5leHQpCisrICAgIHsKKysgICAgICAvKiBSZWNhbGwgdGhhdCBpbiB0aGlzIGNvZGUgcGF0aCwgYSBzZWN0aW9uIGNhbm5vdCBzYXRpc2Z5IG1vcmUKKysJIHRoYW4gb25lIHNwZWMsIHNvIGlmIHMgPT0gczAgdGhlbiBpdCBjYW5ub3QgbWF0Y2gKKysJIHdpbGRzcGVjMS4gICovCisrICAgICAgaWYgKHMgPT0gczApCisrCXdhbGtfd2lsZF9jb25zaWRlcl9zZWN0aW9uIChwdHIsIGZpbGUsIHMsIHNlYzAsIGNhbGxiYWNrLCBkYXRhKTsKKysgICAgICBlbHNlCisrCXsKKysJICBjb25zdCBjaGFyICpzbmFtZSA9IGJmZF9nZXRfc2VjdGlvbl9uYW1lIChmaWxlLT50aGVfYmZkLCBzKTsKKysJICBiZmRfYm9vbGVhbiBza2lwID0gIW1hdGNoX3NpbXBsZV93aWxkICh3aWxkc2VjMS0+c3BlYy5uYW1lLCBzbmFtZSk7CisrCisrCSAgaWYgKCFza2lwKQorKwkgICAgd2Fsa193aWxkX2NvbnNpZGVyX3NlY3Rpb24gKHB0ciwgZmlsZSwgcywgd2lsZHNlYzEsIGNhbGxiYWNrLAorKwkJCQkJZGF0YSk7CisrCX0KKysgICAgfQorK30KKysKKytzdGF0aWMgdm9pZAorK3dhbGtfd2lsZF9zZWN0aW9uX3NwZWNzM193aWxkMiAobGFuZ193aWxkX3N0YXRlbWVudF90eXBlICpwdHIsCisrCQkJCWxhbmdfaW5wdXRfc3RhdGVtZW50X3R5cGUgKmZpbGUsCisrCQkJCWNhbGxiYWNrX3QgY2FsbGJhY2ssCisrCQkJCXZvaWQgKmRhdGEpCisreworKyAgYXNlY3Rpb24gKnM7CisrICBzdHJ1Y3Qgd2lsZGNhcmRfbGlzdCAqc2VjMCA9IHB0ci0+aGFuZGxlcl9kYXRhWzBdOworKyAgc3RydWN0IHdpbGRjYXJkX2xpc3QgKndpbGRzZWMxID0gcHRyLT5oYW5kbGVyX2RhdGFbMV07CisrICBzdHJ1Y3Qgd2lsZGNhcmRfbGlzdCAqd2lsZHNlYzIgPSBwdHItPmhhbmRsZXJfZGF0YVsyXTsKKysgIGJmZF9ib29sZWFuIG11bHRpcGxlX3NlY3Rpb25zX2ZvdW5kOworKyAgYXNlY3Rpb24gKnMwID0gZmluZF9zZWN0aW9uIChmaWxlLCBzZWMwLCAmbXVsdGlwbGVfc2VjdGlvbnNfZm91bmQpOworKworKyAgaWYgKG11bHRpcGxlX3NlY3Rpb25zX2ZvdW5kKQorKyAgICB7CisrICAgICAgd2Fsa193aWxkX3NlY3Rpb25fZ2VuZXJhbCAocHRyLCBmaWxlLCBjYWxsYmFjaywgZGF0YSk7CisrICAgICAgcmV0dXJuOworKyAgICB9CisrCisrICBmb3IgKHMgPSBmaWxlLT50aGVfYmZkLT5zZWN0aW9uczsgcyAhPSBOVUxMOyBzID0gcy0+bmV4dCkKKysgICAgeworKyAgICAgIGlmIChzID09IHMwKQorKwl3YWxrX3dpbGRfY29uc2lkZXJfc2VjdGlvbiAocHRyLCBmaWxlLCBzLCBzZWMwLCBjYWxsYmFjaywgZGF0YSk7CisrICAgICAgZWxzZQorKwl7CisrCSAgY29uc3QgY2hhciAqc25hbWUgPSBiZmRfZ2V0X3NlY3Rpb25fbmFtZSAoZmlsZS0+dGhlX2JmZCwgcyk7CisrCSAgYmZkX2Jvb2xlYW4gc2tpcCA9ICFtYXRjaF9zaW1wbGVfd2lsZCAod2lsZHNlYzEtPnNwZWMubmFtZSwgc25hbWUpOworKworKwkgIGlmICghc2tpcCkKKysJICAgIHdhbGtfd2lsZF9jb25zaWRlcl9zZWN0aW9uIChwdHIsIGZpbGUsIHMsIHdpbGRzZWMxLCBjYWxsYmFjaywgZGF0YSk7CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBza2lwID0gIW1hdGNoX3NpbXBsZV93aWxkICh3aWxkc2VjMi0+c3BlYy5uYW1lLCBzbmFtZSk7CisrCSAgICAgIGlmICghc2tpcCkKKysJCXdhbGtfd2lsZF9jb25zaWRlcl9zZWN0aW9uIChwdHIsIGZpbGUsIHMsIHdpbGRzZWMyLCBjYWxsYmFjaywKKysJCQkJCSAgICBkYXRhKTsKKysJICAgIH0KKysJfQorKyAgICB9CisrfQorKworK3N0YXRpYyB2b2lkCisrd2Fsa193aWxkX3NlY3Rpb25fc3BlY3M0X3dpbGQyIChsYW5nX3dpbGRfc3RhdGVtZW50X3R5cGUgKnB0ciwKKysJCQkJbGFuZ19pbnB1dF9zdGF0ZW1lbnRfdHlwZSAqZmlsZSwKKysJCQkJY2FsbGJhY2tfdCBjYWxsYmFjaywKKysJCQkJdm9pZCAqZGF0YSkKKyt7CisrICBhc2VjdGlvbiAqczsKKysgIHN0cnVjdCB3aWxkY2FyZF9saXN0ICpzZWMwID0gcHRyLT5oYW5kbGVyX2RhdGFbMF07CisrICBzdHJ1Y3Qgd2lsZGNhcmRfbGlzdCAqc2VjMSA9IHB0ci0+aGFuZGxlcl9kYXRhWzFdOworKyAgc3RydWN0IHdpbGRjYXJkX2xpc3QgKndpbGRzZWMyID0gcHRyLT5oYW5kbGVyX2RhdGFbMl07CisrICBzdHJ1Y3Qgd2lsZGNhcmRfbGlzdCAqd2lsZHNlYzMgPSBwdHItPmhhbmRsZXJfZGF0YVszXTsKKysgIGJmZF9ib29sZWFuIG11bHRpcGxlX3NlY3Rpb25zX2ZvdW5kOworKyAgYXNlY3Rpb24gKnMwID0gZmluZF9zZWN0aW9uIChmaWxlLCBzZWMwLCAmbXVsdGlwbGVfc2VjdGlvbnNfZm91bmQpLCAqczE7CisrCisrICBpZiAobXVsdGlwbGVfc2VjdGlvbnNfZm91bmQpCisrICAgIHsKKysgICAgICB3YWxrX3dpbGRfc2VjdGlvbl9nZW5lcmFsIChwdHIsIGZpbGUsIGNhbGxiYWNrLCBkYXRhKTsKKysgICAgICByZXR1cm47CisrICAgIH0KKysKKysgIHMxID0gZmluZF9zZWN0aW9uIChmaWxlLCBzZWMxLCAmbXVsdGlwbGVfc2VjdGlvbnNfZm91bmQpOworKyAgaWYgKG11bHRpcGxlX3NlY3Rpb25zX2ZvdW5kKQorKyAgICB7CisrICAgICAgd2Fsa193aWxkX3NlY3Rpb25fZ2VuZXJhbCAocHRyLCBmaWxlLCBjYWxsYmFjaywgZGF0YSk7CisrICAgICAgcmV0dXJuOworKyAgICB9CisrCisrICBmb3IgKHMgPSBmaWxlLT50aGVfYmZkLT5zZWN0aW9uczsgcyAhPSBOVUxMOyBzID0gcy0+bmV4dCkKKysgICAgeworKyAgICAgIGlmIChzID09IHMwKQorKwl3YWxrX3dpbGRfY29uc2lkZXJfc2VjdGlvbiAocHRyLCBmaWxlLCBzLCBzZWMwLCBjYWxsYmFjaywgZGF0YSk7CisrICAgICAgZWxzZQorKwlpZiAocyA9PSBzMSkKKysJICB3YWxrX3dpbGRfY29uc2lkZXJfc2VjdGlvbiAocHRyLCBmaWxlLCBzLCBzZWMxLCBjYWxsYmFjaywgZGF0YSk7CisrCWVsc2UKKysJICB7CisrCSAgICBjb25zdCBjaGFyICpzbmFtZSA9IGJmZF9nZXRfc2VjdGlvbl9uYW1lIChmaWxlLT50aGVfYmZkLCBzKTsKKysJICAgIGJmZF9ib29sZWFuIHNraXAgPSAhbWF0Y2hfc2ltcGxlX3dpbGQgKHdpbGRzZWMyLT5zcGVjLm5hbWUsCisrCQkJCQkJICAgc25hbWUpOworKworKwkgICAgaWYgKCFza2lwKQorKwkgICAgICB3YWxrX3dpbGRfY29uc2lkZXJfc2VjdGlvbiAocHRyLCBmaWxlLCBzLCB3aWxkc2VjMiwgY2FsbGJhY2ssCisrCQkJCQkgIGRhdGEpOworKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlza2lwID0gIW1hdGNoX3NpbXBsZV93aWxkICh3aWxkc2VjMy0+c3BlYy5uYW1lLCBzbmFtZSk7CisrCQlpZiAoIXNraXApCisrCQkgIHdhbGtfd2lsZF9jb25zaWRlcl9zZWN0aW9uIChwdHIsIGZpbGUsIHMsIHdpbGRzZWMzLAorKwkJCQkJICAgICAgY2FsbGJhY2ssIGRhdGEpOworKwkgICAgICB9CisrCSAgfQorKyAgICB9CisrfQorKworK3N0YXRpYyB2b2lkCisrd2Fsa193aWxkX3NlY3Rpb24gKGxhbmdfd2lsZF9zdGF0ZW1lbnRfdHlwZSAqcHRyLAorKwkJICAgbGFuZ19pbnB1dF9zdGF0ZW1lbnRfdHlwZSAqZmlsZSwKKysJCSAgIGNhbGxiYWNrX3QgY2FsbGJhY2ssCisrCQkgICB2b2lkICpkYXRhKQorK3sKKysgIGlmIChmaWxlLT5qdXN0X3N5bXNfZmxhZykKKysgICAgcmV0dXJuOworKworKyAgKCpwdHItPndhbGtfd2lsZF9zZWN0aW9uX2hhbmRsZXIpIChwdHIsIGZpbGUsIGNhbGxiYWNrLCBkYXRhKTsKKyt9CisrCisrLyogUmV0dXJucyBUUlVFIHdoZW4gbmFtZTEgaXMgYSB3aWxkY2FyZCBzcGVjIHRoYXQgbWlnaHQgbWF0Y2gKKysgICBzb21ldGhpbmcgbmFtZTIgY2FuIG1hdGNoLiAgV2UncmUgY29uc2VydmF0aXZlOiB3ZSByZXR1cm4gRkFMU0UKKysgICBvbmx5IGlmIHRoZSBwcmVmaXhlcyBvZiBuYW1lMSBhbmQgbmFtZTIgYXJlIGRpZmZlcmVudCB1cCB0byB0aGUKKysgICBmaXJzdCB3aWxkY2FyZCBjaGFyYWN0ZXIuICAqLworKworK3N0YXRpYyBiZmRfYm9vbGVhbgorK3dpbGRfc3BlY19jYW5fb3ZlcmxhcCAoY29uc3QgY2hhciAqbmFtZTEsIGNvbnN0IGNoYXIgKm5hbWUyKQorK3sKKysgIHNpemVfdCBwcmVmaXgxX2xlbiA9IHN0cmNzcG4gKG5hbWUxLCAiPypbIik7CisrICBzaXplX3QgcHJlZml4Ml9sZW4gPSBzdHJjc3BuIChuYW1lMiwgIj8qWyIpOworKyAgc2l6ZV90IG1pbl9wcmVmaXhfbGVuOworKworKyAgLyogTm90ZSB0aGF0IGlmIHRoZXJlIGlzIG5vIHdpbGRjYXJkIGNoYXJhY3RlciwgdGhlbiB3ZSB0cmVhdCB0aGUKKysgICAgIHRlcm1pbmF0aW5nIDAgYXMgcGFydCBvZiB0aGUgcHJlZml4LiAgVGh1cyAiLnRleHQiIHdvbid0IG1hdGNoCisrICAgICAiLnRleHQuIiBvciAiLnRleHQuKiIsIGZvciBleGFtcGxlLiAgKi8KKysgIGlmIChuYW1lMVtwcmVmaXgxX2xlbl0gPT0gJ1wwJykKKysgICAgcHJlZml4MV9sZW4rKzsKKysgIGlmIChuYW1lMltwcmVmaXgyX2xlbl0gPT0gJ1wwJykKKysgICAgcHJlZml4Ml9sZW4rKzsKKysKKysgIG1pbl9wcmVmaXhfbGVuID0gcHJlZml4MV9sZW4gPCBwcmVmaXgyX2xlbiA/IHByZWZpeDFfbGVuIDogcHJlZml4Ml9sZW47CisrCisrICByZXR1cm4gbWVtY21wIChuYW1lMSwgbmFtZTIsIG1pbl9wcmVmaXhfbGVuKSA9PSAwOworK30KKysKKysvKiBTZWxlY3Qgc3BlY2lhbGl6ZWQgY29kZSB0byBoYW5kbGUgdmFyaW91cyBraW5kcyBvZiB3aWxkY2FyZAorKyAgIHN0YXRlbWVudHMuICAqLworKworK3N0YXRpYyB2b2lkCisrYW5hbHl6ZV93YWxrX3dpbGRfc2VjdGlvbl9oYW5kbGVyIChsYW5nX3dpbGRfc3RhdGVtZW50X3R5cGUgKnB0cikKKyt7CisrICBpbnQgc2VjX2NvdW50ID0gMDsKKysgIGludCB3aWxkX25hbWVfY291bnQgPSAwOworKyAgc3RydWN0IHdpbGRjYXJkX2xpc3QgKnNlYzsKKysgIGludCBzaWduYXR1cmU7CisrICBpbnQgZGF0YV9jb3VudGVyOworKworKyAgcHRyLT53YWxrX3dpbGRfc2VjdGlvbl9oYW5kbGVyID0gd2Fsa193aWxkX3NlY3Rpb25fZ2VuZXJhbDsKKysKKysgIC8qIENvdW50IGhvdyBtYW55IHdpbGRjYXJkX3NwZWNzIHRoZXJlIGFyZSwgYW5kIGhvdyBtYW55IG9mIHRob3NlCisrICAgICBhY3R1YWxseSB1c2Ugd2lsZGNhcmRzIGluIHRoZSBuYW1lLiAgQWxzbywgYmFpbCBvdXQgaWYgYW55IG9mIHRoZQorKyAgICAgd2lsZGNhcmQgbmFtZXMgYXJlIE5VTEwuIChDYW4gdGhpcyBhY3R1YWxseSBoYXBwZW4/CisrICAgICB3YWxrX3dpbGRfc2VjdGlvbiB1c2VkIHRvIHRlc3QgZm9yIGl0LikgIEFuZCBiYWlsIG91dCBpZiBhbnkKKysgICAgIG9mIHRoZSB3aWxkY2FyZHMgYXJlIG1vcmUgY29tcGxleCB0aGFuIGEgc2ltcGxlIHN0cmluZworKyAgICAgZW5kaW5nIGluIGEgc2luZ2xlICcqJy4gICovCisrICBmb3IgKHNlYyA9IHB0ci0+c2VjdGlvbl9saXN0OyBzZWMgIT0gTlVMTDsgc2VjID0gc2VjLT5uZXh0KQorKyAgICB7CisrICAgICAgKytzZWNfY291bnQ7CisrICAgICAgaWYgKHNlYy0+c3BlYy5uYW1lID09IE5VTEwpCisrCXJldHVybjsKKysgICAgICBpZiAod2lsZGNhcmRwIChzZWMtPnNwZWMubmFtZSkpCisrCXsKKysJICArK3dpbGRfbmFtZV9jb3VudDsKKysJICBpZiAoIWlzX3NpbXBsZV93aWxkIChzZWMtPnNwZWMubmFtZSkpCisrCSAgICByZXR1cm47CisrCX0KKysgICAgfQorKworKyAgLyogVGhlIHplcm8tc3BlYyBjYXNlIHdvdWxkIGJlIGVhc3kgdG8gb3B0aW1pemUgYnV0IGl0IGRvZXNuJ3QKKysgICAgIGhhcHBlbiBpbiBwcmFjdGljZS4gIExpa2V3aXNlLCBtb3JlIHRoYW4gNCBzcGVjcyBkb2Vzbid0CisrICAgICBoYXBwZW4gaW4gcHJhY3RpY2UuICAqLworKyAgaWYgKHNlY19jb3VudCA9PSAwIHx8IHNlY19jb3VudCA+IDQpCisrICAgIHJldHVybjsKKysKKysgIC8qIENoZWNrIHRoYXQgbm8gdHdvIHNwZWNzIGNhbiBtYXRjaCB0aGUgc2FtZSBzZWN0aW9uLiAgKi8KKysgIGZvciAoc2VjID0gcHRyLT5zZWN0aW9uX2xpc3Q7IHNlYyAhPSBOVUxMOyBzZWMgPSBzZWMtPm5leHQpCisrICAgIHsKKysgICAgICBzdHJ1Y3Qgd2lsZGNhcmRfbGlzdCAqc2VjMjsKKysgICAgICBmb3IgKHNlYzIgPSBzZWMtPm5leHQ7IHNlYzIgIT0gTlVMTDsgc2VjMiA9IHNlYzItPm5leHQpCisrCXsKKysJICBpZiAod2lsZF9zcGVjX2Nhbl9vdmVybGFwIChzZWMtPnNwZWMubmFtZSwgc2VjMi0+c3BlYy5uYW1lKSkKKysJICAgIHJldHVybjsKKysJfQorKyAgICB9CisrCisrICBzaWduYXR1cmUgPSAoc2VjX2NvdW50IDw8IDgpICsgd2lsZF9uYW1lX2NvdW50OworKyAgc3dpdGNoIChzaWduYXR1cmUpCisrICAgIHsKKysgICAgY2FzZSAweDAxMDA6CisrICAgICAgcHRyLT53YWxrX3dpbGRfc2VjdGlvbl9oYW5kbGVyID0gd2Fsa193aWxkX3NlY3Rpb25fc3BlY3MxX3dpbGQwOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIDB4MDEwMToKKysgICAgICBwdHItPndhbGtfd2lsZF9zZWN0aW9uX2hhbmRsZXIgPSB3YWxrX3dpbGRfc2VjdGlvbl9zcGVjczFfd2lsZDE7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgMHgwMjAxOgorKyAgICAgIHB0ci0+d2Fsa193aWxkX3NlY3Rpb25faGFuZGxlciA9IHdhbGtfd2lsZF9zZWN0aW9uX3NwZWNzMl93aWxkMTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSAweDAzMDI6CisrICAgICAgcHRyLT53YWxrX3dpbGRfc2VjdGlvbl9oYW5kbGVyID0gd2Fsa193aWxkX3NlY3Rpb25fc3BlY3MzX3dpbGQyOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIDB4MDQwMjoKKysgICAgICBwdHItPndhbGtfd2lsZF9zZWN0aW9uX2hhbmRsZXIgPSB3YWxrX3dpbGRfc2VjdGlvbl9zcGVjczRfd2lsZDI7CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuOworKyAgICB9CisrCisrICAvKiBOb3cgZmlsbCB0aGUgZGF0YSBhcnJheSB3aXRoIHBvaW50ZXJzIHRvIHRoZSBzcGVjcywgZmlyc3QgdGhlCisrICAgICBzcGVjcyB3aXRoIG5vbi13aWxkY2FyZCBuYW1lcywgdGhlbiB0aGUgc3BlY3Mgd2l0aCB3aWxkY2FyZAorKyAgICAgbmFtZXMuICBJdCdzIE9LIHRvIHByb2Nlc3MgdGhlIHNwZWNzIGluIGRpZmZlcmVudCBvcmRlciBmcm9tIHRoZQorKyAgICAgZ2l2ZW4gb3JkZXIsIGJlY2F1c2Ugd2UndmUgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQgbm8gc2VjdGlvbgorKyAgICAgd2lsbCBtYXRjaCBtb3JlIHRoYW4gb25lIHNwZWMuICAqLworKyAgZGF0YV9jb3VudGVyID0gMDsKKysgIGZvciAoc2VjID0gcHRyLT5zZWN0aW9uX2xpc3Q7IHNlYyAhPSBOVUxMOyBzZWMgPSBzZWMtPm5leHQpCisrICAgIGlmICghd2lsZGNhcmRwIChzZWMtPnNwZWMubmFtZSkpCisrICAgICAgcHRyLT5oYW5kbGVyX2RhdGFbZGF0YV9jb3VudGVyKytdID0gc2VjOworKyAgZm9yIChzZWMgPSBwdHItPnNlY3Rpb25fbGlzdDsgc2VjICE9IE5VTEw7IHNlYyA9IHNlYy0+bmV4dCkKKysgICAgaWYgKHdpbGRjYXJkcCAoc2VjLT5zcGVjLm5hbWUpKQorKyAgICAgIHB0ci0+aGFuZGxlcl9kYXRhW2RhdGFfY291bnRlcisrXSA9IHNlYzsKKyt9CisrCisgLyogSGFuZGxlIGEgd2lsZCBzdGF0ZW1lbnQgZm9yIGEgc2luZ2xlIGZpbGUgRi4gICovCisgCisgc3RhdGljIHZvaWQKK0BAIC0xMTc1LDE3ICsxNTU5LDEyIEBACisgc3RhdGljIHZvaWQKKyBpbml0X29zIChsYW5nX291dHB1dF9zZWN0aW9uX3N0YXRlbWVudF90eXBlICpzKQorIHsKKy0gIGxlYW5fc2VjdGlvbl91c2VyZGF0YV90eXBlICpuZXc7CistCisgICBpZiAocy0+YmZkX3NlY3Rpb24gIT0gTlVMTCkKKyAgICAgcmV0dXJuOworIAorICAgaWYgKHN0cmNtcCAocy0+bmFtZSwgRElTQ0FSRF9TRUNUSU9OX05BTUUpID09IDApCisgICAgIGVpbmZvIChfKCIlUCVGOiBJbGxlZ2FsIHVzZSBvZiBgJXMnIHNlY3Rpb25cbiIpLCBESVNDQVJEX1NFQ1RJT05fTkFNRSk7CisgCistICBuZXcgPSBzdGF0X2FsbG9jIChTRUNUSU9OX1VTRVJEQVRBX1NJWkUpOworLSAgbWVtc2V0IChuZXcsIDAsIFNFQ1RJT05fVVNFUkRBVEFfU0laRSk7CistCisgICBzLT5iZmRfc2VjdGlvbiA9IGJmZF9nZXRfc2VjdGlvbl9ieV9uYW1lIChvdXRwdXRfYmZkLCBzLT5uYW1lKTsKKyAgIGlmIChzLT5iZmRfc2VjdGlvbiA9PSBOVUxMKQorICAgICBzLT5iZmRfc2VjdGlvbiA9IGJmZF9tYWtlX3NlY3Rpb24gKG91dHB1dF9iZmQsIHMtPm5hbWUpOworQEAgLTExOTksNyArMTU3OCwxNCBAQAorICAgLyogV2UgaW5pdGlhbGl6ZSBhbiBvdXRwdXQgc2VjdGlvbnMgb3V0cHV0IG9mZnNldCB0byBtaW51cyBpdHMgb3duCisgICAgICB2bWEgdG8gYWxsb3cgdXMgdG8gb3V0cHV0IGEgc2VjdGlvbiB0aHJvdWdoIGl0c2VsZi4gICovCisgICBzLT5iZmRfc2VjdGlvbi0+b3V0cHV0X29mZnNldCA9IDA7CistICBnZXRfdXNlcmRhdGEgKHMtPmJmZF9zZWN0aW9uKSA9IG5ldzsKKysgIGlmICghY29tbWFuZF9saW5lLnJlZHVjZV9tZW1vcnlfb3ZlcmhlYWRzKQorKyAgICB7CisrICAgICAgZmF0X3NlY3Rpb25fdXNlcmRhdGFfdHlwZSAqbmV3CisrCT0gc3RhdF9hbGxvYyAoc2l6ZW9mIChmYXRfc2VjdGlvbl91c2VyZGF0YV90eXBlKSk7CisrICAgICAgbWVtc2V0IChuZXcsIDAsIHNpemVvZiAoZmF0X3NlY3Rpb25fdXNlcmRhdGFfdHlwZSkpOworKyAgICAgIGdldF91c2VyZGF0YSAocy0+YmZkX3NlY3Rpb24pID0gbmV3OworKyAgICB9CisrCisgCisgICAvKiBJZiB0aGVyZSBpcyBhIGJhc2UgYWRkcmVzcywgbWFrZSBzdXJlIHRoYXQgYW55IHNlY3Rpb25zIGl0IG1pZ2h0CisgICAgICBtZW50aW9uIGFyZSBpbml0aWFsaXplZC4gICovCitAQCAtNDkzOSw2ICs1MzI1LDcgQEAKKyAgIG5ldy0+c2VjdGlvbl9saXN0ID0gc2VjdGlvbl9saXN0OworICAgbmV3LT5rZWVwX3NlY3Rpb25zID0ga2VlcF9zZWN0aW9uczsKKyAgIGxhbmdfbGlzdF9pbml0ICgmbmV3LT5jaGlsZHJlbik7CisrICBhbmFseXplX3dhbGtfd2lsZF9zZWN0aW9uX2hhbmRsZXIgKG5ldyk7CisgfQorIAorIHZvaWQKK0luZGV4OiBzcmMvbGQvbGRsYW5nLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvbGQvbGRsYW5nLmgsdgorcmV0cmlldmluZyByZXZpc2lvbiAxLjQ0CityZXRyaWV2aW5nIHJldmlzaW9uIDEuNDUKK2RpZmYgLXUgLXIxLjQ0IC1yMS40NQorLS0tIGJpbnV0aWxzL2xkL2xkbGFuZy5oLm9sZAkzIE1hciAyMDA1IDExOjUxOjU4IC0wMDAwCTEuNDQKKysrKyBiaW51dGlscy9sZC9sZGxhbmcuaAk2IEFwciAyMDA1IDE1OjMzOjAzIC0wMDAwCTEuNDUKK0BAIC0yOTgsNyArMjk4LDE3IEBACisgICB1bmlvbiBsYW5nX3N0YXRlbWVudF91bmlvbiAqZmlsZTsKKyB9IGxhbmdfYWZpbGVfYXNlY3Rpb25fcGFpcl9zdGF0ZW1lbnRfdHlwZTsKKyAKKy10eXBlZGVmIHN0cnVjdCBsYW5nX3dpbGRfc3RhdGVtZW50X3N0cnVjdAorK3R5cGVkZWYgc3RydWN0IGxhbmdfd2lsZF9zdGF0ZW1lbnRfc3RydWN0IGxhbmdfd2lsZF9zdGF0ZW1lbnRfdHlwZTsKKysKKyt0eXBlZGVmIHZvaWQgKCpjYWxsYmFja190KSAobGFuZ193aWxkX3N0YXRlbWVudF90eXBlICosIHN0cnVjdCB3aWxkY2FyZF9saXN0ICosCisrCQkJICAgIGFzZWN0aW9uICosIGxhbmdfaW5wdXRfc3RhdGVtZW50X3R5cGUgKiwgdm9pZCAqKTsKKysKKyt0eXBlZGVmIHZvaWQgKCp3YWxrX3dpbGRfc2VjdGlvbl9oYW5kbGVyX3QpIChsYW5nX3dpbGRfc3RhdGVtZW50X3R5cGUgKiwKKysJCQkJCSAgICAgbGFuZ19pbnB1dF9zdGF0ZW1lbnRfdHlwZSAqLAorKwkJCQkJICAgICBjYWxsYmFja190IGNhbGxiYWNrLAorKwkJCQkJICAgICB2b2lkICpkYXRhKTsKKysKKytzdHJ1Y3QgbGFuZ193aWxkX3N0YXRlbWVudF9zdHJ1Y3QKKyB7CisgICBsYW5nX3N0YXRlbWVudF9oZWFkZXJfdHlwZSBoZWFkZXI7CisgICBjb25zdCBjaGFyICpmaWxlbmFtZTsKK0BAIC0zMDYsNyArMzE2LDEwIEBACisgICBzdHJ1Y3Qgd2lsZGNhcmRfbGlzdCAqc2VjdGlvbl9saXN0OworICAgYmZkX2Jvb2xlYW4ga2VlcF9zZWN0aW9uczsKKyAgIGxhbmdfc3RhdGVtZW50X2xpc3RfdHlwZSBjaGlsZHJlbjsKKy19IGxhbmdfd2lsZF9zdGF0ZW1lbnRfdHlwZTsKKysKKysgIHdhbGtfd2lsZF9zZWN0aW9uX2hhbmRsZXJfdCB3YWxrX3dpbGRfc2VjdGlvbl9oYW5kbGVyOworKyAgc3RydWN0IHdpbGRjYXJkX2xpc3QgKmhhbmRsZXJfZGF0YVs0XTsKKyt9OworIAorIHR5cGVkZWYgc3RydWN0IGxhbmdfYWRkcmVzc19zdGF0ZW1lbnRfc3RydWN0CisgewpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTYuMWEvMTQwLWNyb3NzLWdwcm9mLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTYuMWEvMTQwLWNyb3NzLWdwcm9mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNmMxOGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xNi4xYS8xNDAtY3Jvc3MtZ3Byb2YucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorLS0tIGJpbnV0aWxzLTIuMTUvY29uZmlndXJlLm9sZAkyMDA0LTA3LTIxIDIxOjM2OjQ3LjAwMDAwMDAwMCAtMDcwMAorKysrIGJpbnV0aWxzLTIuMTUvY29uZmlndXJlCTIwMDQtMDctMjEgMjE6Mzc6MDguMDAwMDAwMDAwIC0wNzAwCitAQCAtOTk5LDcgKzk5OSw3IEBACisgCisgIyBTb21lIHRvb2xzIGFyZSBvbmx5IHN1aXRhYmxlIGZvciBidWlsZGluZyBpbiBhICJuYXRpdmUiIHNpdHVhdGlvbi4KKyAjIFJlbW92ZSB0aGVzZSBpZiBob3N0IT10YXJnZXQuICAKKy1uYXRpdmVfb25seT0iYXV0b2NvbmYgYXV0b21ha2UgbGlidG9vbCBmaWxldXRpbHMgZmluZCBnYXdrIGdldHRleHQgZ3ppcCBoZWxsbyBpbmRlbnQgbTQgcmNzIHJlY29kZSBzZWQgc2hlbGx1dGlscyB0YXIgdGV4dHV0aWxzIHV1ZGVjb2RlIHdkaWZmIGdwcm9mIHRhcmdldC1ncm9mZiBndWlsZSBwZXJsIHRpbWUgYXNoIGJhc2ggYnppcDIgcHJtcyBnbnVzZXJ2IHRhcmdldC1ncGVyZiIKKytuYXRpdmVfb25seT0iYXV0b2NvbmYgYXV0b21ha2UgbGlidG9vbCBmaWxldXRpbHMgZmluZCBnYXdrIGdldHRleHQgZ3ppcCBoZWxsbyBpbmRlbnQgbTQgcmNzIHJlY29kZSBzZWQgc2hlbGx1dGlscyB0YXIgdGV4dHV0aWxzIHV1ZGVjb2RlIHdkaWZmIHRhcmdldC1ncm9mZiBndWlsZSBwZXJsIHRpbWUgYXNoIGJhc2ggYnppcDIgcHJtcyBnbnVzZXJ2IHRhcmdldC1ncGVyZiIKKyAKKyAjIFNpbWlsYXJseSwgc29tZSBhcmUgb25seSBzdWl0YWJsZSBmb3IgY3Jvc3MgdG9vbGNoYWlucy4KKyAjIFJlbW92ZSB0aGVzZSBpZiBob3N0PXRhcmdldC4KKy0tLSBiaW51dGlscy0yLjE1L2NvbmZpZ3VyZS5pbi5vbGQJMjAwNC0wNy0yMSAyMTozNzoxOS4wMDAwMDAwMDAgLTA3MDAKKysrKyBiaW51dGlscy0yLjE1L2NvbmZpZ3VyZS5pbgkyMDA0LTA3LTIxIDIxOjM3OjM0LjAwMDAwMDAwMCAtMDcwMAorQEAgLTIzNiw3ICsyMzYsNyBAQAorIAorICMgU29tZSB0b29scyBhcmUgb25seSBzdWl0YWJsZSBmb3IgYnVpbGRpbmcgaW4gYSAibmF0aXZlIiBzaXR1YXRpb24uCisgIyBSZW1vdmUgdGhlc2UgaWYgaG9zdCE9dGFyZ2V0LiAgCistbmF0aXZlX29ubHk9ImF1dG9jb25mIGF1dG9tYWtlIGxpYnRvb2wgZmlsZXV0aWxzIGZpbmQgZ2F3ayBnZXR0ZXh0IGd6aXAgaGVsbG8gaW5kZW50IG00IHJjcyByZWNvZGUgc2VkIHNoZWxsdXRpbHMgdGFyIHRleHR1dGlscyB1dWRlY29kZSB3ZGlmZiBncHJvZiB0YXJnZXQtZ3JvZmYgZ3VpbGUgcGVybCB0aW1lIGFzaCBiYXNoIGJ6aXAyIHBybXMgZ251c2VydiB0YXJnZXQtZ3BlcmYiCisrbmF0aXZlX29ubHk9ImF1dG9jb25mIGF1dG9tYWtlIGxpYnRvb2wgZmlsZXV0aWxzIGZpbmQgZ2F3ayBnZXR0ZXh0IGd6aXAgaGVsbG8gaW5kZW50IG00IHJjcyByZWNvZGUgc2VkIHNoZWxsdXRpbHMgdGFyIHRleHR1dGlscyB1dWRlY29kZSB3ZGlmZiB0YXJnZXQtZ3JvZmYgZ3VpbGUgcGVybCB0aW1lIGFzaCBiYXNoIGJ6aXAyIHBybXMgZ251c2VydiB0YXJnZXQtZ3BlcmYiCisgCisgIyBTaW1pbGFybHksIHNvbWUgYXJlIG9ubHkgc3VpdGFibGUgZm9yIGNyb3NzIHRvb2xjaGFpbnMuCisgIyBSZW1vdmUgdGhlc2UgaWYgaG9zdD10YXJnZXQuCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xNi4xYS8xNTAtc3RhYnMtdHdlYWsucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xNi4xYS8xNTAtc3RhYnMtdHdlYWsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZlMzYxMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE2LjFhLzE1MC1zdGFicy10d2Vhay5wYXRjaApAQCAtMCwwICsxLDI4IEBACitTaWduZWQtb2ZmLWJ5OiBkYW5rQGtlZ2VsLmNvbQorCitTZWUgaHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2JpbnV0aWxzLzIwMDUtMTIvbXNnMDAyNzAuaHRtbAoraHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2JpbnV0aWxzLWN2cy8yMDA1LTEyL21zZzAwMTM5Lmh0bWwKKworU1RBQlMgaGFzaCB0YWJsZSBzaXplIGNoYW5nZSwgYmFja3BvcnRlZCBmcm9tIHRoZSBiaW51dGlscyBDVlMgdHJlZS4gIEhlcmUncwordGhlIENWUyBsb2cgY29tbWVudCBmb3IgdGhlIG9yaWdpbmFsIGNoYW5nZToKKworcmV2aXNpb24gMS4yNQorZGF0ZTogMjAwNS8xMi8yOSAxMDoyOToyMzsgIGF1dGhvcjogbmlja2M7ICBzdGF0ZTogRXhwOyAgbGluZXM6ICsyIC0zCisoX2JmZF9saW5rX3NlY3Rpb25fc3RhYnMpOiBVc2UgYmZkX2hhc2hfdGFibGVfaW5pdCByYXRoZXIgdGhhbgorYmZkX2hhc2hfdGFibGVfaW5pdF9uKC4uLiwyNTEpIHNvIHRoYXQgdGhlIHNpemUgb2YgdGhlIGhhc2ggdGFibGUgY2FuIGJlCitjb250cm9sbGVkIGJ5IHRoZSB1c2VyLgorCistLS0gYmludXRpbHMvYmZkL3N0YWJzLmMub2xkCTQgTWF5IDIwMDUgMTU6NTM6MzkgLTAwMDAJMS4yNAorKysrIGJpbnV0aWxzL2JmZC9zdGFicy5jCTI5IERlYyAyMDA1IDEwOjI5OjIzIC0wMDAwCTEuMjUKK0BAIC0xOTQsOSArMTk0LDggQEAKKyAJZ290byBlcnJvcl9yZXR1cm47CisgICAgICAgLyogTWFrZSBzdXJlIHRoZSBmaXJzdCBieXRlIGlzIHplcm8uICAqLworICAgICAgICh2b2lkKSBfYmZkX3N0cmluZ3RhYl9hZGQgKHNpbmZvLT5zdHJpbmdzLCAiIiwgVFJVRSwgVFJVRSk7CistICAgICAgaWYgKCEgYmZkX2hhc2hfdGFibGVfaW5pdF9uICgmc2luZm8tPmluY2x1ZGVzLAorLQkJCQkgICBzdGFiX2xpbmtfaW5jbHVkZXNfbmV3ZnVuYywKKy0JCQkJICAgMjUxKSkKKysgICAgICBpZiAoISBiZmRfaGFzaF90YWJsZV9pbml0ICgmc2luZm8tPmluY2x1ZGVzLAorKwkJCQkgc3RhYl9saW5rX2luY2x1ZGVzX25ld2Z1bmMpKQorIAlnb3RvIGVycm9yX3JldHVybjsKKyAgICAgICBzaW5mby0+c3RhYnN0ciA9IGJmZF9tYWtlX3NlY3Rpb25fYW55d2F5IChhYmZkLCAiLnN0YWJzdHIiKTsKKyAgICAgICBpZiAoc2luZm8tPnN0YWJzdHIgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE2LjFhLzE2MC1pMzg2LW5vLWRpdmlkZS1jb21tZW50LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTYuMWEvMTYwLWkzODYtbm8tZGl2aWRlLWNvbW1lbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ2YTU1ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE2LjFhLzE2MC1pMzg2LW5vLWRpdmlkZS1jb21tZW50LnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK2RpZmYgLWR1ck4gYmludXRpbHMtMi4xNi4xLm9yaWcvZ2FzL2NvbmZpZy90Yy1pMzg2LmMgYmludXRpbHMtMi4xNi4xL2dhcy9jb25maWcvdGMtaTM4Ni5jCistLS0gYmludXRpbHMtMi4xNi4xLm9yaWcvZ2FzL2NvbmZpZy90Yy1pMzg2LmMJMjAwNS0wNC0xMyAxOTo1ODo0Mi4wMDAwMDAwMDAgKzAyMDAKKysrKyBiaW51dGlscy0yLjE2LjEvZ2FzL2NvbmZpZy90Yy1pMzg2LmMJMjAwOC0wOS0yMiAwOTowMDowOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xOTIsMTYgKzE5MiwxMCBAQAorICNlbmRpZgorIAk7CisgCistI2lmIChkZWZpbmVkIChURV9JMzg2QUlYKQkJCQlcCistICAgICB8fCAoKGRlZmluZWQgKE9CSl9FTEYpIHx8IGRlZmluZWQgKE9CSl9NQVlCRV9FTEYpKQlcCistCSAmJiAhZGVmaW5lZCAoVEVfTElOVVgpCQkJCVwKKy0gCSAmJiAhZGVmaW5lZCAoVEVfTkVUV0FSRSkJCQlcCistCSAmJiAhZGVmaW5lZCAoVEVfRnJlZUJTRCkJCQlcCistCSAmJiAhZGVmaW5lZCAoVEVfTmV0QlNEKSkpCisgLyogVGhpcyBhcnJheSBob2xkcyB0aGUgY2hhcnMgdGhhdCBhbHdheXMgc3RhcnQgYSBjb21tZW50LiAgSWYgdGhlCisgICAgcHJlLXByb2Nlc3NvciBpcyBkaXNhYmxlZCwgdGhlc2UgYXJlbid0IHZlcnkgdXNlZnVsLiAgKi8KKy1jb25zdCBjaGFyIGNvbW1lbnRfY2hhcnNbXSA9ICIjLyI7CistI2RlZmluZSBQUkVGSVhfU0VQQVJBVE9SICdcXCcKKytjb25zdCBjaGFyIGNvbW1lbnRfY2hhcnNbXSA9ICIjIjsKKysjZGVmaW5lIFBSRUZJWF9TRVBBUkFUT1IgJy8nCisgCisgLyogVGhpcyBhcnJheSBob2xkcyB0aGUgY2hhcnMgdGhhdCBvbmx5IHN0YXJ0IGEgY29tbWVudCBhdCB0aGUgYmVnaW5uaW5nIG9mCisgICAgYSBsaW5lLiAgSWYgdGhlIGxpbmUgc2VlbXMgdG8gaGF2ZSB0aGUgZm9ybSAnIyAxMjMgZmlsZW5hbWUnCitAQCAtMjExLDE2ICsyMDUsNyBAQAorICAgICNOT19BUFAgYXQgdGhlIGJlZ2lubmluZyBvZiBpdHMgb3V0cHV0LgorICAgIEFsc28gbm90ZSB0aGF0IGNvbW1lbnRzIHN0YXJ0ZWQgbGlrZSB0aGlzIG9uZSB3aWxsIGFsd2F5cyB3b3JrIGlmCisgICAgJy8nIGlzbid0IG90aGVyd2lzZSBkZWZpbmVkLiAgKi8KKy1jb25zdCBjaGFyIGxpbmVfY29tbWVudF9jaGFyc1tdID0gIiMiOworLQorLSNlbHNlCistLyogUHV0dGluZyAnLycgaGVyZSBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIHVzZSB0aGUgZGl2aWRlIG9wZXJhdG9yLgorLSAgIEhvd2V2ZXIsIHdlIG5lZWQgaXQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBTVlI0IHN5c3RlbXMuICAqLworLWNvbnN0IGNoYXIgY29tbWVudF9jaGFyc1tdID0gIiMiOworLSNkZWZpbmUgUFJFRklYX1NFUEFSQVRPUiAnLycKKy0KKy1jb25zdCBjaGFyIGxpbmVfY29tbWVudF9jaGFyc1tdID0gIi8jIjsKKy0jZW5kaWYKKytjb25zdCBjaGFyIGxpbmVfY29tbWVudF9jaGFyc1tdID0gIiMvIjsKKyAKKyBjb25zdCBjaGFyIGxpbmVfc2VwYXJhdG9yX2NoYXJzW10gPSAiOyI7CisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xN2EvMTAwLXVjbGliYy1jb25mLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTdhLzEwMC11Y2xpYmMtY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjdiNzZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTdhLzEwMC11Y2xpYmMtY29uZi5wYXRjaApAQCAtMCwwICsxLDE0OSBAQAorZGlmZiAtZHVyIGJpbnV0aWxzLTIuMTcub2xkL2JmZC9jb25maWd1cmUgYmludXRpbHMtMi4xNy9iZmQvY29uZmlndXJlCistLS0gYmludXRpbHMtMi4xNy5vbGQvYmZkL2NvbmZpZ3VyZQkyMDA2LTA2LTIzIDIwOjE3OjAzLjAwMDAwMDAwMCArMDIwMAorKysrIGJpbnV0aWxzLTIuMTcvYmZkL2NvbmZpZ3VyZQkyMDA3LTA1LTAxIDE4OjI2OjAzLjAwMDAwMDAwMCArMDIwMAorQEAgLTM1NzYsNyArMzU3Niw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4LWdudSp8bGludXgtdWNsaWJjKikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorZGlmZiAtZHVyIGJpbnV0aWxzLTIuMTcub2xkL2JpbnV0aWxzL2NvbmZpZ3VyZSBiaW51dGlscy0yLjE3L2JpbnV0aWxzL2NvbmZpZ3VyZQorLS0tIGJpbnV0aWxzLTIuMTcub2xkL2JpbnV0aWxzL2NvbmZpZ3VyZQkyMDA2LTA0LTA2IDIzOjQ5OjI5LjAwMDAwMDAwMCArMDIwMAorKysrIGJpbnV0aWxzLTIuMTcvYmludXRpbHMvY29uZmlndXJlCTIwMDctMDUtMDEgMTg6MjY6MDMuMDAwMDAwMDAwICswMjAwCitAQCAtMzQxMSw3ICszNDExLDcgQEAKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgtZ251KnxsaW51eC11Y2xpYmMqKQorICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgIDs7CisgCitkaWZmIC1kdXIgYmludXRpbHMtMi4xNy5vbGQvY29uZmlndXJlIGJpbnV0aWxzLTIuMTcvY29uZmlndXJlCistLS0gYmludXRpbHMtMi4xNy5vbGQvY29uZmlndXJlCTIwMDYtMDQtMDYgMjM6NDk6MjUuMDAwMDAwMDAwICswMjAwCisrKysgYmludXRpbHMtMi4xNy9jb25maWd1cmUJMjAwNy0wNS0wMSAxODoyNjowMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMjc2LDcgKzEyNzYsNyBAQAorICAgYW0zM18yLjAtKi1saW51eCopCisgICAgIG5vY29uZmlnZGlycz0iJG5vY29uZmlnZGlycyAke2xpYmdjan0gdGFyZ2V0LW5ld2xpYiB0YXJnZXQtbGliZ2xvc3MiCisgICAgIDs7CistICBzaC0qLWxpbnV4KikKKysgIHNoKi0qLWxpbnV4KikKKyAgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzICR7bGliZ2NqfSB0YXJnZXQtbmV3bGliIHRhcmdldC1saWJnbG9zcyIKKyAgICAgOzsgICAgCisgICBzaCotKi1wZXxtaXBzKi0qLXBlfCphcm0td2luY2UtcGUpCitAQCAtMTU4NCw3ICsxNTg0LDcgQEAKKyAgIHJvbXAtKi0qKQorICAgICBub2NvbmZpZ2RpcnM9IiRub2NvbmZpZ2RpcnMgYmZkIGJpbnV0aWxzIGxkIGdhcyBvcGNvZGVzIHRhcmdldC1saWJnbG9zcyAke2xpYmdjan0iCisgICAgIDs7CistICBzaC0qLSogfCBzaDY0LSotKikKKysgIHNoKi0qLSogfCBzaDY0LSotKikKKyAgICAgY2FzZSAiJHtob3N0fSIgaW4KKyAgICAgICBpWzM0NTY3ODldODYtKi12c3RhKSA7OyAjIGRvbid0IGFkZCBncHJvZiBiYWNrIGluCisgICAgICAgaVszNDU2Nzg5XTg2LSotZ28zMiopIDs7ICMgZG9uJ3QgYWRkIGdwcm9mIGJhY2sgaW4KK2RpZmYgLWR1ciBiaW51dGlscy0yLjE3Lm9sZC9jb25maWd1cmUuaW4gYmludXRpbHMtMi4xNy9jb25maWd1cmUuaW4KKy0tLSBiaW51dGlscy0yLjE3Lm9sZC9jb25maWd1cmUuaW4JMjAwNi0wNi0yMyAyMDoxOTo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBiaW51dGlscy0yLjE3L2NvbmZpZ3VyZS5pbgkyMDA3LTA1LTAxIDE4OjI2OjAzLjAwMDAwMDAwMCArMDIwMAorQEAgLTQ2OCw3ICs0NjgsNyBAQAorICAgYW0zM18yLjAtKi1saW51eCopCisgICAgIG5vY29uZmlnZGlycz0iJG5vY29uZmlnZGlycyAke2xpYmdjan0gdGFyZ2V0LW5ld2xpYiB0YXJnZXQtbGliZ2xvc3MiCisgICAgIDs7CistICBzaC0qLWxpbnV4KikKKysgIHNoKi0qLWxpbnV4KikKKyAgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzICR7bGliZ2NqfSB0YXJnZXQtbmV3bGliIHRhcmdldC1saWJnbG9zcyIKKyAgICAgOzsgICAgCisgICBzaCotKi1wZXxtaXBzKi0qLXBlfCphcm0td2luY2UtcGUpCitAQCAtNzc2LDcgKzc3Niw3IEBACisgICByb21wLSotKikKKyAgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzIGJmZCBiaW51dGlscyBsZCBnYXMgb3Bjb2RlcyB0YXJnZXQtbGliZ2xvc3MgJHtsaWJnY2p9IgorICAgICA7OworLSAgc2gtKi0qIHwgc2g2NC0qLSopCisrICBzaCotKi0qIHwgc2g2NC0qLSopCisgICAgIGNhc2UgIiR7aG9zdH0iIGluCisgICAgICAgaVtbMzQ1Njc4OV1dODYtKi12c3RhKSA7OyAjIGRvbid0IGFkZCBncHJvZiBiYWNrIGluCisgICAgICAgaVtbMzQ1Njc4OV1dODYtKi1nbzMyKikgOzsgIyBkb24ndCBhZGQgZ3Byb2YgYmFjayBpbgorZGlmZiAtZHVyIGJpbnV0aWxzLTIuMTcub2xkL2dhcy9jb25maWd1cmUgYmludXRpbHMtMi4xNy9nYXMvY29uZmlndXJlCistLS0gYmludXRpbHMtMi4xNy5vbGQvZ2FzL2NvbmZpZ3VyZQkyMDA2LTA0LTA2IDIzOjQ5OjMxLjAwMDAwMDAwMCArMDIwMAorKysrIGJpbnV0aWxzLTIuMTcvZ2FzL2NvbmZpZ3VyZQkyMDA3LTA1LTAxIDE4OjI2OjAzLjAwMDAwMDAwMCArMDIwMAorQEAgLTM0MTEsNyArMzQxMSw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4LWdudSp8bGludXgtdWNsaWJjKikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorZGlmZiAtZHVyIGJpbnV0aWxzLTIuMTcub2xkL2dwcm9mL2NvbmZpZ3VyZSBiaW51dGlscy0yLjE3L2dwcm9mL2NvbmZpZ3VyZQorLS0tIGJpbnV0aWxzLTIuMTcub2xkL2dwcm9mL2NvbmZpZ3VyZQkyMDA2LTA0LTA2IDIzOjQ5OjMzLjAwMDAwMDAwMCArMDIwMAorKysrIGJpbnV0aWxzLTIuMTcvZ3Byb2YvY29uZmlndXJlCTIwMDctMDUtMDEgMTg6MjY6MDMuMDAwMDAwMDAwICswMjAwCitAQCAtMzQxNCw2ICszNDE0LDExIEBACisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKKytsaW51eC11Y2xpYmMqKQorKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKysgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC9saWIvbGlidUNsaWJjLSouc29gCisrICA7OworKworIG5ldGJzZCogfCBrbmV0YnNkKi1nbnUpCisgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXC5dK1wuc29cLlswLTldK1wuWzAtOV0rJCcKK2RpZmYgLWR1ciBiaW51dGlscy0yLjE3Lm9sZC9sZC9jb25maWd1cmUgYmludXRpbHMtMi4xNy9sZC9jb25maWd1cmUKKy0tLSBiaW51dGlscy0yLjE3Lm9sZC9sZC9jb25maWd1cmUJMjAwNi0wNC0xMSAxMjozNjoyNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBiaW51dGlscy0yLjE3L2xkL2NvbmZpZ3VyZQkyMDA3LTA1LTAxIDE4OjI2OjAzLjAwMDAwMDAwMCArMDIwMAorQEAgLTM0MTMsNyArMzQxMyw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4LWdudSp8bGludXgtdWNsaWJjKikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorZGlmZiAtZHVyIGJpbnV0aWxzLTIuMTcub2xkL2xpYnRvb2wubTQgYmludXRpbHMtMi4xNy9saWJ0b29sLm00CistLS0gYmludXRpbHMtMi4xNy5vbGQvbGlidG9vbC5tNAkyMDA1LTEyLTI3IDE3OjM3OjU3LjAwMDAwMDAwMCArMDEwMAorKysrIGJpbnV0aWxzLTIuMTcvbGlidG9vbC5tNAkyMDA3LTA1LTAxIDE4OjI2OjAzLjAwMDAwMDAwMCArMDIwMAorQEAgLTczOSw3ICs3MzksNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eC1nbnUqfGxpbnV4LXVjbGliYyopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKK2RpZmYgLWR1ciBiaW51dGlscy0yLjE3Lm9sZC9sdGNvbmZpZyBiaW51dGlscy0yLjE3L2x0Y29uZmlnCistLS0gYmludXRpbHMtMi4xNy5vbGQvbHRjb25maWcJMjAwNS0wNy0xNiAwNDozNjozOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBiaW51dGlscy0yLjE3L2x0Y29uZmlnCTIwMDctMDUtMDEgMTg6MjY6MDMuMDAwMDAwMDAwICswMjAwCitAQCAtNjAyLDYgKzYwMiw3IEBACisgCisgIyBUcmFuc2Zvcm0gbGludXgqIHRvICotKi1saW51eC1nbnUqLCB0byBzdXBwb3J0IG9sZCBjb25maWd1cmUgc2NyaXB0cy4KKyBjYXNlICRob3N0X29zIGluCisrbGludXgtdWNsaWJjKikgOzsKKyBsaW51eC1nbnUqKSA7OworIGxpbnV4KikgaG9zdD1gZWNobyAkaG9zdCB8IHNlZCAncy9eXCguKi0uKi1saW51eFwpXCguKlwpJC9cMS1nbnVcMi8nYAorIGVzYWMKK0BAIC0xMjQ3LDcgKzEyNDgsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eC1nbnUqfGxpbnV4LXVjbGliYyopCisgICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgbmVlZF92ZXJzaW9uPW5vCitkaWZmIC1kdXIgYmludXRpbHMtMi4xNy5vbGQvb3Bjb2Rlcy9jb25maWd1cmUgYmludXRpbHMtMi4xNy9vcGNvZGVzL2NvbmZpZ3VyZQorLS0tIGJpbnV0aWxzLTIuMTcub2xkL29wY29kZXMvY29uZmlndXJlCTIwMDYtMDItMTcgMTU6MzY6MjguMDAwMDAwMDAwICswMTAwCisrKysgYmludXRpbHMtMi4xNy9vcGNvZGVzL2NvbmZpZ3VyZQkyMDA3LTA1LTAxIDE4OjI2OjAzLjAwMDAwMDAwMCArMDIwMAorQEAgLTM1NzksNyArMzU3OSw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4LWdudSp8bGludXgtdWNsaWJjKikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTdhLzExMC1hcm0tZWFiaS1jb25mLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTdhLzExMC1hcm0tZWFiaS1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZDNhNGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xN2EvMTEwLWFybS1lYWJpLWNvbmYucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorZGlmZiAtZHVyIGJpbnV0aWxzLTIuMTcub2xkL2NvbmZpZ3VyZSBiaW51dGlscy0yLjE3L2NvbmZpZ3VyZQorLS0tIGJpbnV0aWxzLTIuMTcub2xkL2NvbmZpZ3VyZQkyMDA3LTA1LTAxIDE4OjI2OjAzLjAwMDAwMDAwMCArMDIwMAorKysrIGJpbnV0aWxzLTIuMTcvY29uZmlndXJlCTIwMDctMDUtMDEgMTg6MjY6MDYuMDAwMDAwMDAwICswMjAwCitAQCAtMTMwNSw3ICsxMzA1LDcgQEAKKyAgIGFybS0qLWVsZiogfCBzdHJvbmdhcm0tKi1lbGYqIHwgeHNjYWxlLSotZWxmKiB8IGFybSotKi1lYWJpKiApCisgICAgIG5vY29uZmlnZGlycz0iJG5vY29uZmlnZGlycyB0YXJnZXQtbGliZmZpIHRhcmdldC1xdGhyZWFkcyIKKyAgICAgOzsKKy0gIGFybSotKi1saW51eC1nbnVlYWJpKQorKyAgYXJtKi0qLWxpbnV4LWdudWVhYmkgfCBhcm0qLSotbGludXgtdWNsaWJjZ251ZWFiaSkKKyAgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzIHRhcmdldC1saWJmZmkgdGFyZ2V0LXF0aHJlYWRzIgorICAgICBub2NvbmZpZ2RpcnM9IiRub2NvbmZpZ2RpcnMgdGFyZ2V0LWxpYmphdmEgdGFyZ2V0LWxpYm9iamMiCisgICAgIDs7CitkaWZmIC1kdXIgYmludXRpbHMtMi4xNy5vbGQvY29uZmlndXJlLmluIGJpbnV0aWxzLTIuMTcvY29uZmlndXJlLmluCistLS0gYmludXRpbHMtMi4xNy5vbGQvY29uZmlndXJlLmluCTIwMDctMDUtMDEgMTg6MjY6MDMuMDAwMDAwMDAwICswMjAwCisrKysgYmludXRpbHMtMi4xNy9jb25maWd1cmUuaW4JMjAwNy0wNS0wMSAxODoyNjowNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC00OTcsNyArNDk3LDcgQEAKKyAgIGFybS0qLWVsZiogfCBzdHJvbmdhcm0tKi1lbGYqIHwgeHNjYWxlLSotZWxmKiB8IGFybSotKi1lYWJpKiApCisgICAgIG5vY29uZmlnZGlycz0iJG5vY29uZmlnZGlycyB0YXJnZXQtbGliZmZpIHRhcmdldC1xdGhyZWFkcyIKKyAgICAgOzsKKy0gIGFybSotKi1saW51eC1nbnVlYWJpKQorKyAgYXJtKi0qLWxpbnV4LWdudWVhYmkgfCBhcm0qLSotbGludXgtdWNsaWJjZ251ZWFiaSkKKyAgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzIHRhcmdldC1saWJmZmkgdGFyZ2V0LXF0aHJlYWRzIgorICAgICBub2NvbmZpZ2RpcnM9IiRub2NvbmZpZ2RpcnMgdGFyZ2V0LWxpYmphdmEgdGFyZ2V0LWxpYm9iamMiCisgICAgIDs7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xN2EvMTIwLW1ha2VpbmZvLXZlcnNpb24ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xN2EvMTIwLW1ha2VpbmZvLXZlcnNpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBmZjVkZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE3YS8xMjAtbWFrZWluZm8tdmVyc2lvbi5wYXRjaApAQCAtMCwwICsxLDE2IEBACitkaWZmIC11IGJpbnV0aWxzLTIuMTgtb3JpZy9jb25maWd1cmUgYmludXRpbHMtMi4xOC9jb25maWd1cmUKKy0tLSBiaW51dGlscy0yLjE4LW9yaWcvY29uZmlndXJlCTIwMDctMDgtMDYgMTY6Mjk6NDAuMDAwMDAwMDAwIC0wNDAwCisrKysgYmludXRpbHMtMi4xOC9jb25maWd1cmUJMjAwNy0wOS0yNyAyMjo0MTo1MS4wMDAwMDAwMDAgLTA0MDAKK0BAIC02MTI1LDEwICs2MTI1LDEwIEBACisgICAqIiB0ZXhpbmZvICIqKSBNQUtFSU5GTz0nJCRyLyQoQlVJTERfU1VCRElSKS90ZXhpbmZvL21ha2VpbmZvL21ha2VpbmZvJyA7OworICAgKikKKyAKKy0gICAgIyBGb3IgYW4gaW5zdGFsbGVkIG1ha2VpbmZvLCB3ZSByZXF1aXJlIGl0IHRvIGJlIGZyb20gdGV4aW5mbyA0LjQgb3IKKysgICAgIyBGb3IgYW4gaW5zdGFsbGVkIG1ha2VpbmZvLCB3ZSByZXF1aXJlIGl0IHRvIGJlIGZyb20gdGV4aW5mbyA0LjYgb3IKKyAgICAgIyBoaWdoZXIsIGVsc2Ugd2UgdXNlIHRoZSAibWlzc2luZyIgZHVtbXkuCisgICAgIGlmICR7TUFLRUlORk99IC0tdmVyc2lvbiBcCistICAgICAgIHwgZWdyZXAgJ3RleGluZm9bXjAtOV0qKFsxLTNdWzAtOV18NFwuWzQtOV18WzUtOV0pJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgICAgfCBlZ3JlcCAndGV4aW5mb1teMC05XSooNFwuKFs2LTldfFsxLTldWzAtOV0pfFs1LTldfFsxLTldWzAtOV0pJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICA6CisgICAgIGVsc2UKKyAgICAgICBNQUtFSU5GTz0iJE1JU1NJTkcgbWFrZWluZm8iCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xN2EvMTMwLWxkX21ha2VmaWxlX3BhdGNoLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTdhLzEzMC1sZF9tYWtlZmlsZV9wYXRjaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDBlYzY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTdhLzEzMC1sZF9tYWtlZmlsZV9wYXRjaC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitkaWZmIC1kdXIgYmludXRpbHMtMi4xNy5vbGQvbGQvTWFrZWZpbGUuYW0gYmludXRpbHMtMi4xNy9sZC9NYWtlZmlsZS5hbQorLS0tIGJpbnV0aWxzLTIuMTcub2xkL2xkL01ha2VmaWxlLmFtCTIwMDYtMDYtMDMgMDY6NDU6NTAuMDAwMDAwMDAwICswMjAwCisrKysgYmludXRpbHMtMi4xNy9sZC9NYWtlZmlsZS5hbQkyMDA3LTA1LTAxIDE4OjI2OjA5LjAwMDAwMDAwMCArMDIwMAorQEAgLTIwLDcgKzIwLDcgQEAKKyAjIFdlIHB1dCB0aGUgc2NyaXB0cyBpbiB0aGUgZGlyZWN0b3J5ICQoc2NyaXB0ZGlyKS9sZHNjcmlwdHMuCisgIyBXZSBjYW4ndCBwdXQgdGhlIHNjcmlwdHMgaW4gJChkYXRhZGlyKSBiZWNhdXNlIHRoZSBTRUFSQ0hfRElSCisgIyBkaXJlY3RpdmVzIG5lZWQgdG8gYmUgZGlmZmVyZW50IGZvciBuYXRpdmUgYW5kIGNyb3NzIGxpbmtlcnMuCistc2NyaXB0ZGlyID0gJCh0b29sZGlyKS9saWIKKytzY3JpcHRkaXIgPSAkKGxpYmRpcikKKyAKKyBFTVVMID0gQEVNVUxACisgRU1VTEFUSU9OX09GSUxFUyA9IEBFTVVMQVRJT05fT0ZJTEVTQAorZGlmZiAtZHVyIGJpbnV0aWxzLTIuMTcub2xkL2xkL01ha2VmaWxlLmluIGJpbnV0aWxzLTIuMTcvbGQvTWFrZWZpbGUuaW4KKy0tLSBiaW51dGlscy0yLjE3Lm9sZC9sZC9NYWtlZmlsZS5pbgkyMDA2LTA2LTAzIDA2OjQ1OjUwLjAwMDAwMDAwMCArMDIwMAorKysrIGJpbnV0aWxzLTIuMTcvbGQvTWFrZWZpbGUuaW4JMjAwNy0wNS0wMSAxODoyNjowOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNjksNyArMjY5LDcgQEAKKyAjIFdlIHB1dCB0aGUgc2NyaXB0cyBpbiB0aGUgZGlyZWN0b3J5ICQoc2NyaXB0ZGlyKS9sZHNjcmlwdHMuCisgIyBXZSBjYW4ndCBwdXQgdGhlIHNjcmlwdHMgaW4gJChkYXRhZGlyKSBiZWNhdXNlIHRoZSBTRUFSQ0hfRElSCisgIyBkaXJlY3RpdmVzIG5lZWQgdG8gYmUgZGlmZmVyZW50IGZvciBuYXRpdmUgYW5kIGNyb3NzIGxpbmtlcnMuCistc2NyaXB0ZGlyID0gJCh0b29sZGlyKS9saWIKKytzY3JpcHRkaXIgPSAkKGxpYmRpcikKKyBCQVNFRElSID0gJChzcmNkaXIpLy4uCisgQkZERElSID0gJChCQVNFRElSKS9iZmQKKyBJTkNESVIgPSAkKEJBU0VESVIpL2luY2x1ZGUKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE3YS8xNDAtYmV0dGVyX2ZpbGVfZXJyb3IucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xN2EvMTQwLWJldHRlcl9maWxlX2Vycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MDBmMTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xN2EvMTQwLWJldHRlcl9maWxlX2Vycm9yLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK2RpZmYgLWR1ciBiaW51dGlscy0yLjE3Lm9sZC9iZmQvb3BuY2xzLmMgYmludXRpbHMtMi4xNy9iZmQvb3BuY2xzLmMKKy0tLSBiaW51dGlscy0yLjE3Lm9sZC9iZmQvb3BuY2xzLmMJMjAwNi0wMy0xNiAxMzoyMDoxNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBiaW51dGlscy0yLjE3L2JmZC9vcG5jbHMuYwkyMDA3LTA1LTAxIDE4OjI2OjExLjAwMDAwMDAwMCArMDIwMAorQEAgLTE1OCw2ICsxNTgsMTMgQEAKKyB7CisgICBiZmQgKm5iZmQ7CisgICBjb25zdCBiZmRfdGFyZ2V0ICp0YXJnZXRfdmVjOworKyAgc3RydWN0IHN0YXQgczsKKysKKysgIGlmIChzdGF0IChmaWxlbmFtZSwgJnMpID09IDApCisrICAgIGlmIChTX0lTRElSKHMuc3RfbW9kZSkpIHsKKysgICAgICBiZmRfc2V0X2Vycm9yIChiZmRfZXJyb3JfZmlsZV9ub3RfcmVjb2duaXplZCk7CisrICAgICAgcmV0dXJuIE5VTEw7CisrICAgIH0KKyAKKyAgIG5iZmQgPSBfYmZkX25ld19iZmQgKCk7CisgICBpZiAobmJmZCA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTdhLzE1MC1jaGVja19sZHJ1bnBhdGhfbGVuZ3RoLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTdhLzE1MC1jaGVja19sZHJ1bnBhdGhfbGVuZ3RoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMjQ3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xN2EvMTUwLWNoZWNrX2xkcnVucGF0aF9sZW5ndGgucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorZGlmZiAtZHVyIGJpbnV0aWxzLTIuMTcub2xkL2xkL2VtdWx0ZW1wbC9lbGYzMi5lbSBiaW51dGlscy0yLjE3L2xkL2VtdWx0ZW1wbC9lbGYzMi5lbQorLS0tIGJpbnV0aWxzLTIuMTcub2xkL2xkL2VtdWx0ZW1wbC9lbGYzMi5lbQkyMDA2LTA2LTEyIDE1OjA1OjA0LjAwMDAwMDAwMCArMDIwMAorKysrIGJpbnV0aWxzLTIuMTcvbGQvZW11bHRlbXBsL2VsZjMyLmVtCTIwMDctMDUtMDEgMTg6MjY6MTMuMDAwMDAwMDAwICswMjAwCitAQCAtOTcwLDYgKzk3MCw4IEBACisgCSAgICAgICYmIGNvbW1hbmRfbGluZS5ycGF0aCA9PSBOVUxMKQorIAkgICAgeworIAkgICAgICBsaWJfcGF0aCA9IChjb25zdCBjaGFyICopIGdldGVudiAoIkxEX1JVTl9QQVRIIik7CisrCSAgICAgIGlmICgobGliX3BhdGgpICYmIChzdHJsZW4gKGxpYl9wYXRoKSA9PSAwKSkKKysJCSAgbGliX3BhdGggPSBOVUxMOworIAkgICAgICBpZiAoZ2xkJHtFTVVMQVRJT05fTkFNRX1fc2VhcmNoX25lZWRlZCAobGliX3BhdGgsICZuLAorIAkJCQkJCSAgICAgIGZvcmNlKSkKKyAJCWJyZWFrOworQEAgLTExNTQsNiArMTE1Niw4IEBACisgICBycGF0aCA9IGNvbW1hbmRfbGluZS5ycGF0aDsKKyAgIGlmIChycGF0aCA9PSBOVUxMKQorICAgICBycGF0aCA9IChjb25zdCBjaGFyICopIGdldGVudiAoIkxEX1JVTl9QQVRIIik7CisrICBpZiAoKHJwYXRoKSAmJiAoc3RybGVuIChycGF0aCkgPT0gMCkpCisrICAgICAgcnBhdGggPSBOVUxMOworICAgaWYgKCEgKGJmZF9lbGZfc2l6ZV9keW5hbWljX3NlY3Rpb25zCisgCSAob3V0cHV0X2JmZCwgY29tbWFuZF9saW5lLnNvbmFtZSwgcnBhdGgsCisgCSAgY29tbWFuZF9saW5lLmZpbHRlcl9zaGxpYiwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE3YS8xNjAtbWlwcy1FTEZfTUFYUEFHRVNJWkUtNEsucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xN2EvMTYwLW1pcHMtRUxGX01BWFBBR0VTSVpFLTRLLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNDk4MGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xN2EvMTYwLW1pcHMtRUxGX01BWFBBR0VTSVpFLTRLLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK2RpZmYgLWR1ciBiaW51dGlscy0yLjE3Lm9sZC9iZmQvZWxmMzItbWlwcy5jIGJpbnV0aWxzLTIuMTcvYmZkL2VsZjMyLW1pcHMuYworLS0tIGJpbnV0aWxzLTIuMTcub2xkL2JmZC9lbGYzMi1taXBzLmMJMjAwNi0wMy0yMiAxMDoyODoxMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBiaW51dGlscy0yLjE3L2JmZC9lbGYzMi1taXBzLmMJMjAwNy0wNS0wMSAxODoyNjoxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNjE3LDcgKzE2MTcsOSBAQAorIAorIC8qIFRoZSBTVlI0IE1JUFMgQUJJIHNheXMgdGhhdCB0aGlzIHNob3VsZCBiZSAweDEwMDAwLCBhbmQgTGludXggdXNlcworICAgIHBhZ2Ugc2l6ZXMgb2YgdXAgdG8gdGhhdCBsaW1pdCwgc28gd2UgbmVlZCB0byByZXNwZWN0IGl0LiAgKi8KKy0jZGVmaW5lIEVMRl9NQVhQQUdFU0laRQkJCTB4MTAwMDAKKysvKiNkZWZpbmUgRUxGX01BWFBBR0VTSVpFCQkJMHgxMDAwMCovCisrLyogVXNlIDRLIHRvIHNocmluayB0aGUgZWxmIGhlYWRlci4gIE5PVCBmb3IgZ2VuZXJhbCB1c2UhICovCisrI2RlZmluZSBFTEZfTUFYUEFHRVNJWkUJCQkweDEwMDAKKyAjZGVmaW5lIGVsZjMyX2JlZAkJCWVsZjMyX3RyYWRiZWQKKyAKKyAvKiBJbmNsdWRlIHRoZSB0YXJnZXQgZmlsZSBhZ2FpbiBmb3IgdGhpcyB0YXJnZXQuICAqLworZGlmZiAtZHVyIGJpbnV0aWxzLTIuMTcub2xkL2JmZC9lbGZuMzItbWlwcy5jIGJpbnV0aWxzLTIuMTcvYmZkL2VsZm4zMi1taXBzLmMKKy0tLSBiaW51dGlscy0yLjE3Lm9sZC9iZmQvZWxmbjMyLW1pcHMuYwkyMDA1LTExLTIzIDE1OjA0OjE3LjAwMDAwMDAwMCArMDEwMAorKysrIGJpbnV0aWxzLTIuMTcvYmZkL2VsZm4zMi1taXBzLmMJMjAwNy0wNS0wMSAxODoyNjoxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNDAyLDcgKzI0MDIsOSBAQAorIAorIC8qIFRoZSBTVlI0IE1JUFMgQUJJIHNheXMgdGhhdCB0aGlzIHNob3VsZCBiZSAweDEwMDAwLCBhbmQgTGludXggdXNlcworICAgIHBhZ2Ugc2l6ZXMgb2YgdXAgdG8gdGhhdCBsaW1pdCwgc28gd2UgbmVlZCB0byByZXNwZWN0IGl0LiAgKi8KKy0jZGVmaW5lIEVMRl9NQVhQQUdFU0laRQkJCTB4MTAwMDAKKysvKiNkZWZpbmUgRUxGX01BWFBBR0VTSVpFCQkJMHgxMDAwMCovCisrLyogVXNlIDRLIHRvIHNocmluayB0aGUgZWxmIGhlYWRlci4gIE5PVCBmb3IgZ2VuZXJhbCB1c2UhICovCisrI2RlZmluZSBFTEZfTUFYUEFHRVNJWkUJCQkweDEwMDAKKyAjZGVmaW5lIGVsZjMyX2JlZAkJCWVsZjMyX3RyYWRiZWQKKyAKKyAvKiBJbmNsdWRlIHRoZSB0YXJnZXQgZmlsZSBhZ2FpbiBmb3IgdGhpcyB0YXJnZXQuICAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTdhLzE3MC1iZmQtaGFzaC10d2Vhay5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE3YS8xNzAtYmZkLWhhc2gtdHdlYWsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg3ODI4MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE3YS8xNzAtYmZkLWhhc2gtdHdlYWsucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorU2lnbmVkLW9mZi1ieTogZGFua0BrZWdlbC5jb20KKworUmFpc2luZyB0aGUgc2l6ZSBvZiB0aGUgaGFzaCB0YWJsZSBpcyBhIG5vdGljYWJsZSB3aW4gd2hlbiBsaW5raW5nIAorYXQgbGVhc3Qgb25lIGxhcmdlIGFwcC4gIAorCitUaGVyZSB3YXMgYSBwYXRjaCwKK2h0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vbWwvYmludXRpbHMvMjAwNC0wNi9tc2cwMDE2NS5odG1sCit0byBkbyB0aGlzIGR5bmFtaWNhbGx5LiAgTm8gaWRlYSB3aHkgdGhhdCBkaWRuJ3QgbWFrZSBpdCBpbi4KK1NvIHRoaXMgdGlueSBjaGFuZ2UgdG8gcmFpc2UgdGhlIGRlZmF1bHQgc2l6ZSBpcyBqdXN0CithIHN0b3BnYXAgZm9yIG5vdy4KKworCistLS0gYmludXRpbHMtMi4xNy9iZmQvaGFzaC5jLm9sZAkyMDA2LTAzLTAyIDIzOjAxOjM5LjAwMDAwMDAwMCAtMDgwMAorKysrIGJpbnV0aWxzLTIuMTcvYmZkL2hhc2guYwkyMDA2LTAzLTAyIDIzOjAxOjU4LjAwMDAwMDAwMCAtMDgwMAorQEAgLTI5OCw3ICsyOTgsNyBAQAorICovCisgCisgLyogVGhlIGRlZmF1bHQgbnVtYmVyIG9mIGVudHJpZXMgdG8gdXNlIHdoZW4gY3JlYXRpbmcgYSBoYXNoIHRhYmxlLiAgKi8KKy0jZGVmaW5lIERFRkFVTFRfU0laRSA0MDUxCisrI2RlZmluZSBERUZBVUxUX1NJWkUgMzI3NDkKKyBzdGF0aWMgc2l6ZV90IGJmZF9kZWZhdWx0X2hhc2hfdGFibGVfc2l6ZSA9IERFRkFVTFRfU0laRTsKKyAKKyAvKiBDcmVhdGUgYSBuZXcgaGFzaCB0YWJsZSwgZ2l2ZW4gYSBudW1iZXIgb2YgZW50cmllcy4gICovCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xN2EvMTgwLXBzaWduYWwucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xN2EvMTgwLXBzaWduYWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUwNmZmMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE3YS8xODAtcHNpZ25hbC5wYXRjaApAQCAtMCwwICsxLDI5IEBACitNYWtlIHBzaWduYWwgcHJvdG90eXBlIGluIGxpYmliZXJ0eSBtYXRjaCB0aGF0IGluIGdsaWJjLgorCitGaXhlczoKKworZ2NjLTIuOTUuMy1nbGliYy0yLjEuMy9iaW51dGlscy0yLjE1L2xpYmliZXJ0eS9zdHJzaWduYWwuYzogSW4gZnVuY3Rpb24gYHBzaWduYWwnOgorZ2NjLTIuOTUuMy1nbGliYy0yLjEuMy9iaW51dGlscy0yLjE1L2xpYmliZXJ0eS9zdHJzaWduYWwuYzo1NjM6IGFyZ3VtZW50IGBzaWdubycgZG9lc24ndCBtYXRjaCBwcm90b3R5cGUKKy91c3IvaW5jbHVkZS9zaWduYWwuaDoxMzE6IHByb3RvdHlwZSBkZWNsYXJhdGlvbgorZ2NjLTIuOTUuMy1nbGliYy0yLjEuMy9iaW51dGlscy0yLjE1L2xpYmliZXJ0eS9zdHJzaWduYWwuYzo1NjM6IGFyZ3VtZW50IGBtZXNzYWdlJyBkb2Vzbid0IG1hdGNoIHByb3RvdHlwZQorL3Vzci9pbmNsdWRlL3NpZ25hbC5oOjEzMTogcHJvdG90eXBlIGRlY2xhcmF0aW9uCitnY2MtMi45NS4zLWdsaWJjLTIuMS4zL2JpbnV0aWxzLTIuMTUvbGliaWJlcnR5L3N0cnNpZ25hbC5jOjU2ODogd2FybmluZzogY29tcGFyaXNvbiBiZXR3ZWVuIHNpZ25lZCBhbmQgdW5zaWduZWQKK21wcm90ZWN0Li4uIG1ha2VbMV06ICoqKiBbc3Ryc2lnbmFsLm9dIEVycm9yIDEKK21ha2VbMV06IExlYXZpbmcgZGlyZWN0b3J5IGAvZXhwb3J0L2hkYTMvZGtlZ2VsL3F1ZXVlL2pvYmRpci5wcm9kdXNlcl9jcHNtMTcvY3Jvc3N0b29sLTAuMzIvYnVpbGQvaTY4Ni11bmtub3duLWxpbnV4LWdudS9nY2MtMi45NS4zLWdsaWJjLTIuMS4zL2J1aWxkLWJpbnV0aWxzL2xpYmliZXJ0eScKK21ha2U6ICoqKiBbYWxsLWxpYmliZXJ0eV0gRXJyb3IgMgorCit3aGVuIGJ1aWxkaW5nIG9uIHJlZCBoYXQgNy4xCit0aG91Z2ggaXQncyBhIGJpdCBvZiBhIG15c3Rlcnkgd2h5IGxpYmliZXJ0eSdzIHBzaWduYWwgaXMgYmVpbmcgY29tcGlsZWQgYXQKK2FsbCwgc2luY2UgcmVkIGhhdCA3LjEncyBnbGliYyBzdXBwb3J0cyBwc2lnbmFsIChoZW5jZSB0aGUgZXJyb3IgbWVzc2FnZSkKKworLS0tIGJpbnV0aWxzLTIuMTcvbGliaWJlcnR5L3N0cnNpZ25hbC5jLm9sZAkyMDA1LTA0LTE4IDEzOjU3OjQwLjAwMDAwMDAwMCAtMDcwMAorKysrIGJpbnV0aWxzLTIuMTcvbGliaWJlcnR5L3N0cnNpZ25hbC5jCTIwMDUtMDQtMTggMTM6NTk6MDkuMDAwMDAwMDAwIC0wNzAwCitAQCAtNTM2LDcgKzUzNiw3IEBACisgCisgLyoKKyAKKy1AZGVmdHlwZWZuIFN1cHBsZW1lbnRhbCB2b2lkIHBzaWduYWwgKHVuc2lnbmVkIEB2YXJ7c2lnbm99LCBjaGFyICpAdmFye21lc3NhZ2V9KQorK0BkZWZ0eXBlZm4gU3VwcGxlbWVudGFsIHZvaWQgcHNpZ25hbCAoaW50IEB2YXJ7c2lnbm99LCBjb25zdCBjaGFyICpAdmFye21lc3NhZ2V9KQorIAorIFByaW50IEB2YXJ7bWVzc2FnZX0gdG8gdGhlIHN0YW5kYXJkIGVycm9yLCBmb2xsb3dlZCBieSBhIGNvbG9uLAorIGZvbGxvd2VkIGJ5IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgc2lnbmFsIHNwZWNpZmllZCBieSBAdmFye3NpZ25vfSwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE3YS8xOTAtc2tpcC1jb21tZW50cy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE3YS8xOTAtc2tpcC1jb21tZW50cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjQ5YWQzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTdhLzE5MC1za2lwLWNvbW1lbnRzLnBhdGNoCkBAIC0wLDAgKzEsOTUgQEAKK1tyZW1vdmVkIGZpcnN0IGh1bmsgc28gaXQgd291bGQgYXBwbHkgdG8gMi4xNi4xIC0gY29weXJpZ2h0IGRhdGUgYWxyZWFkeSB1cGRhdGVkIC0gZGFua10KKworUmV0cmlldmVkIGZyb20gaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9tbC9iaW51dGlscy8yMDA0LTA0L21zZzAwNjQ2Lmh0bWwKK0ZpeGVzCitsb2NhbGVhbGlhcy5zOjU0NDogRXJyb3I6IGp1bmsgYXQgZW5kIG9mIGxpbmUsIGZpcnN0IHVucmVjb2duaXplZCBjaGFyYWN0ZXIgaXMgYCwnIAord2hlbiBidWlsZGluZyBnbGliYy0yLjMuMiB3aXRoIGdjYy0zLjQuMCBhbmQgYmludXRpbHMtMi4xNS45MC4wLjMKKworUGF0aHMgYWRqdXN0ZWQgdG8gbWF0Y2ggY3Jvc3N0b29sJ3MgcGF0Y2hlci4KKworTWVzc2FnZS1JZDogbTNuMDUycXcyZy5mc2ZAd2hpdGVib3gubTVyLmRlCitGcm9tOiBBbmRyZWFzIFNjaHdhYiA8c2Nod2FiIGF0IHN1c2UgZG90IGRlPgorVG86IE5hdGhhbiBTaWR3ZWxsIDxuYXRoYW4gYXQgY29kZXNvdXJjZXJ5IGRvdCBjb20+CitDYzogSWFuIExhbmNlIFRheWxvciA8aWFuIGF0IHdhc2FiaXN5c3RlbXMgZG90IGNvbT4sIGJpbnV0aWxzIGF0IHNvdXJjZXMgZG90IHJlZGhhdCBkb3QgY29tCitEYXRlOiBGcmksIDIzIEFwciAyMDA0IDIyOjI3OjE5ICswMjAwCitTdWJqZWN0OiBSZTogZGVtYW5kX2VtcHR5X3Jlc3Rfb2ZfbGluZSBhbmQgaWdub3JlX3Jlc3Rfb2ZfbGluZQorCitOYXRoYW4gU2lkd2VsbCA8bmF0aGFuQGNvZGVzb3VyY2VyeS5jb20+IHdyaXRlczoKKworPiBJbmRleDogcmVhZC5jCis+ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKz4gUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nYXMvcmVhZC5jLHYKKz4gcmV0cmlldmluZyByZXZpc2lvbiAxLjc2Cis+IGRpZmYgLWMgLTMgLXAgLXIxLjc2IHJlYWQuYworPiAqKiogcmVhZC5jCTEyIE1hciAyMDA0IDE3OjQ4OjEyIC0wMDAwCTEuNzYKKz4gLS0tIHJlYWQuYwkxOCBNYXIgMjAwNCAwOTo1NjowNSAtMDAwMAorPiAqKioqKioqKioqKioqKiogcmVhZF9hX3NvdXJjZV9maWxlIChjaGFyICpuYW1lKQorPiAqKiogMTA1MywxMDU5ICoqKioKKz4gICAjZW5kaWYKKz4gICAJICBpbnB1dF9saW5lX3BvaW50ZXItLTsKKz4gICAJICAvKiBSZXBvcnQgdW5rbm93biBjaGFyIGFzIGlnbm9yZWQuICAqLworPiAhIAkgIGlnbm9yZV9yZXN0X29mX2xpbmUgKCk7Cis+ICAgCX0KKz4gICAKKz4gICAjaWZkZWYgbWRfYWZ0ZXJfcGFzc19ob29rCis+IC0tLSAxMDUzLDEwNTkgLS0tLQorPiAgICNlbmRpZgorPiAgIAkgIGlucHV0X2xpbmVfcG9pbnRlci0tOworPiAgIAkgIC8qIFJlcG9ydCB1bmtub3duIGNoYXIgYXMgaWdub3JlZC4gICovCis+ICEgCSAgZGVtYW5kX2VtcHR5X3Jlc3Rfb2ZfbGluZSAoKTsKKz4gICAJfQorPiAgIAorPiAgICNpZmRlZiBtZF9hZnRlcl9wYXNzX2hvb2sKKworVGhpcyBtZWFucyB0aGF0IHRoZSB1bmtub3duIGNoYXJhY3RlciBpcyBubyBsb25nZXIgaWdub3JlZCwgZGVzcGl0ZSB0aGUKK2NvbW1lbnQuICBBcyBhIHNpZGUgZWZmZWN0IGEgbGluZSBzdGFydGluZyB3aXRoIGEgbGluZSBjb21tZW50IGNoYXJhY3Rlcgorbm90IGZvbGxvd2VkIGJ5IEFQUCBpbiBOT19BUFAgbW9kZSBub3cgdHJpZ2dlcnMgYW4gZXJyb3IgaW5zdGVhZCBvZiBqdXN0IGEKK3dhcm5pbmcsIGJyZWFraW5nIGJ1aWxkcyBvZiBnbGliYyBvbiBtNjhrLWxpbnV4LiAgRWFybGllciBpbgorcmVhZF9hX3NvdXJjZV9maWxlIHdoZXJlICNBUFAgaXMgaGFuZGxlZCB0aGVyZSBpcyBhbm90aGVyIGNvbW1lbnQgdGhhdAorY2xhaW1zIHRoYXQgdW5rbm93biBjb21tZW50cyBhcmUgaWdub3JlZCwgd2hlbiBpbiBmYWN0IHRoZXkgYXJlbid0IChvbmx5Cit0aGUgaW5pdGlhbCBsaW5lIGNvbW1lbnQgY2hhcmFjdGVyIGlzIHNraXBwZWQpLgorCitOb3RlIHRoYXQgdGhlIHByZXNlbmNlIG9mICNBUFAgd2lsbCBtZXNzIHVwIHRoZSBsaW5lIGNvdW50ZXJzLCBidXQKK3RoYXQgYXBwZWFycyB0byBiZSBkaWZmaWN1bHQgdG8gZml4LgorCitBbmRyZWFzLgorCisyMDA0LTA0LTIzICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgorCisJKiByZWFkLmMgKHJlYWRfYV9zb3VyY2VfZmlsZSk6IElnbm9yZSB1bmtub3duIHRleHQgYWZ0ZXIgbGluZQorCWNvbW1lbnQgY2hhcmFjdGVyLiAgRml4IG1pc2xlYWRpbmcgY29tbWVudC4KKworLS0tIGJpbnV0aWxzL2dhcy9yZWFkLmMufjEuNzgufgkyMDA0LTA0LTIzIDA4OjU4OjIzLjAwMDAwMDAwMCArMDIwMAorKysrIGJpbnV0aWxzL2dhcy9yZWFkLmMJMjAwNC0wNC0yMyAyMTo0OTowMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMDA4LDEwICsxMDA4LDE0IEBAIHJlYWRfYV9zb3VyY2VfZmlsZSAoY2hhciAqbmFtZSkKKyAJICAgICAgdW5zaWduZWQgaW50IG5ld19sZW5ndGg7CisgCSAgICAgIGNoYXIgKnRtcF9idWYgPSAwOworIAorLQkgICAgICBidW1wX2xpbmVfY291bnRlcnMgKCk7CisgCSAgICAgIHMgPSBpbnB1dF9saW5lX3BvaW50ZXI7CisgCSAgICAgIGlmIChzdHJuY21wIChzLCAiQVBQXG4iLCA0KSkKKy0JCWNvbnRpbnVlOwkvKiBXZSBpZ25vcmUgaXQgKi8KKysJCXsKKysJCSAgLyogV2UgaWdub3JlIGl0ICovCisrCQkgIGlnbm9yZV9yZXN0X29mX2xpbmUgKCk7CisrCQkgIGNvbnRpbnVlOworKwkJfQorKwkgICAgICBidW1wX2xpbmVfY291bnRlcnMgKCk7CisgCSAgICAgIHMgKz0gNDsKKyAKKyAJICAgICAgc2JfbmV3ICgmc2J1Zik7CitAQCAtMTExMCw3ICsxMTEwLDcgQEAgcmVhZF9hX3NvdXJjZV9maWxlIChjaGFyICpuYW1lKQorIAkgICAgY29udGludWU7CisgI2VuZGlmCisgCSAgaW5wdXRfbGluZV9wb2ludGVyLS07CistCSAgLyogUmVwb3J0IHVua25vd24gY2hhciBhcyBpZ25vcmVkLiAgKi8KKysJICAvKiBSZXBvcnQgdW5rbm93biBjaGFyIGFzIGVycm9yLiAgKi8KKyAJICBkZW1hbmRfZW1wdHlfcmVzdF9vZl9saW5lICgpOworIAl9CisgCisKKy0tIAorQW5kcmVhcyBTY2h3YWIsIFN1U0UgTGFicywgc2Nod2FiQHN1c2UuZGUKK1N1U0UgTGludXggQUcsIE1heGZlbGRzdHJhJiN4QzM7ZSA1LCA5MDQwOSBOJiN4QzM7cm5iZXJnLCBHZXJtYW55CitLZXkgZmluZ2VycHJpbnQgPSA1OENBIDU0QzcgNkQ1MyA5NDJCIDE3NTYgIDAxRDMgNDRENSAyMTRCIDgyNzYgNEVENQorIkFuZCBub3cgZm9yIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudC4iCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xN2EvMjAwLWNyb3NzLWdwcm9mLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTdhLzIwMC1jcm9zcy1ncHJvZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGE3OWIzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTdhLzIwMC1jcm9zcy1ncHJvZi5wYXRjaApAQCAtMCwwICsxLDIyIEBACistLS0gYmludXRpbHMtMi4xNy9jb25maWd1cmUub2xkCTIwMDQtMDctMjEgMjE6MzY6NDcuMDAwMDAwMDAwIC0wNzAwCisrKysgYmludXRpbHMtMi4xNy9jb25maWd1cmUJMjAwNC0wNy0yMSAyMTozNzowOC4wMDAwMDAwMDAgLTA3MDAKK0BAIC0xMDIyLDcgKzEwMjIsNyBAQAorIAorICMgU29tZSB0b29scyBhcmUgb25seSBzdWl0YWJsZSBmb3IgYnVpbGRpbmcgaW4gYSAibmF0aXZlIiBzaXR1YXRpb24uCisgIyBSZW1vdmUgdGhlc2UgaWYgaG9zdCE9dGFyZ2V0LiAgCistbmF0aXZlX29ubHk9ImF1dG9jb25mIGF1dG9tYWtlIGxpYnRvb2wgZmlsZXV0aWxzIGZpbmQgZ2F3ayBnZXR0ZXh0IGd6aXAgaGVsbG8gaW5kZW50IG00IHJjcyByZWNvZGUgc2VkIHNoZWxsdXRpbHMgdGFyIHRleHR1dGlscyB1dWRlY29kZSB3ZGlmZiBncHJvZiB0YXJnZXQtZ3JvZmYgZ3VpbGUgcGVybCB0aW1lIGFzaCBiYXNoIGJ6aXAyIHBybXMgZ251c2VydiB0YXJnZXQtZ3BlcmYiCisrbmF0aXZlX29ubHk9ImF1dG9jb25mIGF1dG9tYWtlIGxpYnRvb2wgZmlsZXV0aWxzIGZpbmQgZ2F3ayBnZXR0ZXh0IGd6aXAgaGVsbG8gaW5kZW50IG00IHJjcyByZWNvZGUgc2VkIHNoZWxsdXRpbHMgdGFyIHRleHR1dGlscyB1dWRlY29kZSB3ZGlmZiB0YXJnZXQtZ3JvZmYgZ3VpbGUgcGVybCB0aW1lIGFzaCBiYXNoIGJ6aXAyIHBybXMgZ251c2VydiB0YXJnZXQtZ3BlcmYiCisgCisgIyBTaW1pbGFybHksIHNvbWUgYXJlIG9ubHkgc3VpdGFibGUgZm9yIGNyb3NzIHRvb2xjaGFpbnMuCisgIyBSZW1vdmUgdGhlc2UgaWYgaG9zdD10YXJnZXQuCistLS0gYmludXRpbHMtMi4xNy9jb25maWd1cmUuaW4ub2xkCTIwMDQtMDctMjEgMjE6Mzc6MTkuMDAwMDAwMDAwIC0wNzAwCisrKysgYmludXRpbHMtMi4xNy9jb25maWd1cmUuaW4JMjAwNC0wNy0yMSAyMTozNzozNC4wMDAwMDAwMDAgLTA3MDAKK0BAIC0yMjcsNyArMjI3LDcgQEAKKyAKKyAjIFNvbWUgdG9vbHMgYXJlIG9ubHkgc3VpdGFibGUgZm9yIGJ1aWxkaW5nIGluIGEgIm5hdGl2ZSIgc2l0dWF0aW9uLgorICMgUmVtb3ZlIHRoZXNlIGlmIGhvc3QhPXRhcmdldC4gIAorLW5hdGl2ZV9vbmx5PSJhdXRvY29uZiBhdXRvbWFrZSBsaWJ0b29sIGZpbGV1dGlscyBmaW5kIGdhd2sgZ2V0dGV4dCBnemlwIGhlbGxvIGluZGVudCBtNCByY3MgcmVjb2RlIHNlZCBzaGVsbHV0aWxzIHRhciB0ZXh0dXRpbHMgdXVkZWNvZGUgd2RpZmYgZ3Byb2YgdGFyZ2V0LWdyb2ZmIGd1aWxlIHBlcmwgdGltZSBhc2ggYmFzaCBiemlwMiBwcm1zIGdudXNlcnYgdGFyZ2V0LWdwZXJmIgorK25hdGl2ZV9vbmx5PSJhdXRvY29uZiBhdXRvbWFrZSBsaWJ0b29sIGZpbGV1dGlscyBmaW5kIGdhd2sgZ2V0dGV4dCBnemlwIGhlbGxvIGluZGVudCBtNCByY3MgcmVjb2RlIHNlZCBzaGVsbHV0aWxzIHRhciB0ZXh0dXRpbHMgdXVkZWNvZGUgd2RpZmYgdGFyZ2V0LWdyb2ZmIGd1aWxlIHBlcmwgdGltZSBhc2ggYmFzaCBiemlwMiBwcm1zIGdudXNlcnYgdGFyZ2V0LWdwZXJmIgorIAorICMgU2ltaWxhcmx5LCBzb21lIGFyZSBvbmx5IHN1aXRhYmxlIGZvciBjcm9zcyB0b29sY2hhaW5zLgorICMgUmVtb3ZlIHRoZXNlIGlmIGhvc3Q9dGFyZ2V0LgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTdhLzIxMC1pMzg2LW5vLWRpdmlkZS1jb21tZW50LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTdhLzIxMC1pMzg2LW5vLWRpdmlkZS1jb21tZW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YjNmNjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xN2EvMjEwLWkzODYtbm8tZGl2aWRlLWNvbW1lbnQucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorZGlmZiAtZHVyTiBiaW51dGlscy0yLjE3Lm9yaWcvZ2FzL2NvbmZpZy90Yy1pMzg2LmMgYmludXRpbHMtMi4xNy9nYXMvY29uZmlnL3RjLWkzODYuYworLS0tIGJpbnV0aWxzLTIuMTcub3JpZy9nYXMvY29uZmlnL3RjLWkzODYuYwkyMDA2LTA0LTA3IDA4OjQwOjU3LjAwMDAwMDAwMCArMDIwMAorKysrIGJpbnV0aWxzLTIuMTcvZ2FzL2NvbmZpZy90Yy1pMzg2LmMJMjAwOC0wOS0yMiAwOTowNjowNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xOTYsMjQgKzE5NiwxMCBAQAorICNlbmRpZgorIAk7CisgCistI2lmIChkZWZpbmVkIChURV9JMzg2QUlYKQkJCQlcCistICAgICB8fCAoKGRlZmluZWQgKE9CSl9FTEYpIHx8IGRlZmluZWQgKE9CSl9NQVlCRV9FTEYpKQlcCistCSAmJiAhZGVmaW5lZCAoVEVfR05VKQkJCQlcCistCSAmJiAhZGVmaW5lZCAoVEVfTElOVVgpCQkJCVwKKy0gCSAmJiAhZGVmaW5lZCAoVEVfTkVUV0FSRSkJCQlcCistCSAmJiAhZGVmaW5lZCAoVEVfRnJlZUJTRCkJCQlcCistCSAmJiAhZGVmaW5lZCAoVEVfTmV0QlNEKSkpCisgLyogVGhpcyBhcnJheSBob2xkcyB0aGUgY2hhcnMgdGhhdCBhbHdheXMgc3RhcnQgYSBjb21tZW50LiAgSWYgdGhlCistICAgcHJlLXByb2Nlc3NvciBpcyBkaXNhYmxlZCwgdGhlc2UgYXJlbid0IHZlcnkgdXNlZnVsLiAgVGhlIG9wdGlvbgorLSAgIC0tZGl2aWRlIHdpbGwgcmVtb3ZlICcvJyBmcm9tIHRoaXMgbGlzdC4gICovCistY29uc3QgY2hhciAqaTM4Nl9jb21tZW50X2NoYXJzID0gIiMvIjsKKy0jZGVmaW5lIFNWUjRfQ09NTUVOVF9DSEFSUyAxCistI2RlZmluZSBQUkVGSVhfU0VQQVJBVE9SICdcXCcKKy0KKy0jZWxzZQorKyAgIHByZS1wcm9jZXNzb3IgaXMgZGlzYWJsZWQsIHRoZXNlIGFyZW4ndCB2ZXJ5IHVzZWZ1bC4gICovCisgY29uc3QgY2hhciAqaTM4Nl9jb21tZW50X2NoYXJzID0gIiMiOworICNkZWZpbmUgUFJFRklYX1NFUEFSQVRPUiAnLycKKy0jZW5kaWYKKyAKKyAvKiBUaGlzIGFycmF5IGhvbGRzIHRoZSBjaGFycyB0aGF0IG9ubHkgc3RhcnQgYSBjb21tZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YKKyAgICBhIGxpbmUuICBJZiB0aGUgbGluZSBzZWVtcyB0byBoYXZlIHRoZSBmb3JtICcjIDEyMyBmaWxlbmFtZScKK0BAIC01NDg2LDIwICs1NDcyLDYgQEAKKyAgICAgICBicmVhazsKKyAKKyAgICAgY2FzZSBPUFRJT05fRElWSURFOgorLSNpZmRlZiBTVlI0X0NPTU1FTlRfQ0hBUlMKKy0gICAgICB7CistCWNoYXIgKm4sICp0OworLQljb25zdCBjaGFyICpzOworLQorLQluID0gKGNoYXIgKikgeG1hbGxvYyAoc3RybGVuIChpMzg2X2NvbW1lbnRfY2hhcnMpICsgMSk7CistCXQgPSBuOworLQlmb3IgKHMgPSBpMzg2X2NvbW1lbnRfY2hhcnM7ICpzICE9ICdcMCc7IHMrKykKKy0JICBpZiAoKnMgIT0gJy8nKQorLQkgICAgKnQrKyA9ICpzOworLQkqdCA9ICdcMCc7CistCWkzODZfY29tbWVudF9jaGFycyA9IG47CistICAgICAgfQorLSNlbmRpZgorICAgICAgIGJyZWFrOworIAorICAgICBkZWZhdWx0OgorQEAgLTU1MjUsMTMgKzU0OTcsOCBAQAorICAgZnByaW50ZiAoc3RyZWFtLCBfKCJcCisgICAtcyAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVkXG4iKSk7CisgI2VuZGlmCistI2lmZGVmIFNWUjRfQ09NTUVOVF9DSEFSUworLSAgZnByaW50ZiAoc3RyZWFtLCBfKCJcCistICAtLWRpdmlkZSAgICAgICAgICAgICAgICBkbyBub3QgdHJlYXQgYC8nIGFzIGEgY29tbWVudCBjaGFyYWN0ZXJcbiIpKTsKKy0jZWxzZQorICAgZnByaW50ZiAoc3RyZWFtLCBfKCJcCisgICAtLWRpdmlkZSAgICAgICAgICAgICAgICBpZ25vcmVkXG4iKSk7CistI2VuZGlmCisgfQorIAorICNpZiAoKGRlZmluZWQgKE9CSl9NQVlCRV9DT0ZGKSAmJiBkZWZpbmVkIChPQkpfTUFZQkVfQU9VVCkpIFwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE4YS8xMDAtbWFrZWluZm8tdmVyc2lvbi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE4YS8xMDAtbWFrZWluZm8tdmVyc2lvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTExZDYyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMThhLzEwMC1tYWtlaW5mby12ZXJzaW9uLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK2RpZmYgLXUgYmludXRpbHMtMi4xOC1vcmlnL2NvbmZpZ3VyZSBiaW51dGlscy0yLjE4L2NvbmZpZ3VyZQorLS0tIGJpbnV0aWxzLTIuMTgtb3JpZy9jb25maWd1cmUJMjAwNy0wOC0wNiAxNjoyOTo0MC4wMDAwMDAwMDAgLTA0MDAKKysrKyBiaW51dGlscy0yLjE4L2NvbmZpZ3VyZQkyMDA3LTA5LTI3IDIyOjQxOjUxLjAwMDAwMDAwMCAtMDQwMAorQEAgLTYxMjUsMTAgKzYxMjUsMTAgQEAKKyAgICoiIHRleGluZm8gIiopIE1BS0VJTkZPPSckJHIvJChCVUlMRF9TVUJESVIpL3RleGluZm8vbWFrZWluZm8vbWFrZWluZm8nIDs7CisgICAqKQorIAorLSAgICAjIEZvciBhbiBpbnN0YWxsZWQgbWFrZWluZm8sIHdlIHJlcXVpcmUgaXQgdG8gYmUgZnJvbSB0ZXhpbmZvIDQuNCBvcgorKyAgICAjIEZvciBhbiBpbnN0YWxsZWQgbWFrZWluZm8sIHdlIHJlcXVpcmUgaXQgdG8gYmUgZnJvbSB0ZXhpbmZvIDQuNiBvcgorICAgICAjIGhpZ2hlciwgZWxzZSB3ZSB1c2UgdGhlICJtaXNzaW5nIiBkdW1teS4KKyAgICAgaWYgJHtNQUtFSU5GT30gLS12ZXJzaW9uIFwKKy0gICAgICAgfCBlZ3JlcCAndGV4aW5mb1teMC05XSooWzEtM11bMC05XXw0XC5bNC05XXxbNS05XSknID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgICB8IGVncmVwICd0ZXhpbmZvW14wLTldKig0XC4oWzYtOV18WzEtOV1bMC05XSl8WzUtOV18WzEtOV1bMC05XSknID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgIDoKKyAgICAgZWxzZQorICAgICAgIE1BS0VJTkZPPSIkTUlTU0lORyBtYWtlaW5mbyIKK2RpZmYgLXUgYmludXRpbHMtMi4xOC1vcmlnL2NvbmZpZ3VyZS5hYyBiaW51dGlscy0yLjE4L2NvbmZpZ3VyZS5hYworLS0tIGJpbnV0aWxzLTIuMTgtb3JpZy9jb25maWd1cmUuYWMJMjAwNy0wOC0yOCAxNjoyNDoyNi4wMDAwMDAwMDAgLTA0MDAKKysrKyBiaW51dGlscy0yLjE4L2NvbmZpZ3VyZS5hYwkyMDA3LTA5LTI3IDIyOjQxOjAwLjAwMDAwMDAwMCAtMDQwMAorQEAgLTI0MDAsMTAgKzI0MDAsMTAgQEAKKyAgICoiIHRleGluZm8gIiopIE1BS0VJTkZPPSckJHIvJChCVUlMRF9TVUJESVIpL3RleGluZm8vbWFrZWluZm8vbWFrZWluZm8nIDs7CisgICAqKQorIGNoYW5nZXF1b3RlKCwpCistICAgICMgRm9yIGFuIGluc3RhbGxlZCBtYWtlaW5mbywgd2UgcmVxdWlyZSBpdCB0byBiZSBmcm9tIHRleGluZm8gNC40IG9yCisrICAgICMgRm9yIGFuIGluc3RhbGxlZCBtYWtlaW5mbywgd2UgcmVxdWlyZSBpdCB0byBiZSBmcm9tIHRleGluZm8gNC42IG9yCisgICAgICMgaGlnaGVyLCBlbHNlIHdlIHVzZSB0aGUgIm1pc3NpbmciIGR1bW15LgorICAgICBpZiAke01BS0VJTkZPfSAtLXZlcnNpb24gXAorLSAgICAgICB8IGVncmVwICd0ZXhpbmZvW14wLTldKihbMS0zXVswLTldfDRcLls0LTldfFs1LTldKScgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgICAgIHwgZWdyZXAgJ3RleGluZm9bXjAtOV0qKDRcLihbNi05XXxbMS05XVswLTldKXxbNS05XXxbMS05XVswLTldKScgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgOgorICAgICBlbHNlCisgICAgICAgTUFLRUlORk89IiRNSVNTSU5HIG1ha2VpbmZvIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMThhLzExMC1lbmFibGUtZGFzaC12Mi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE4YS8xMTAtZW5hYmxlLWRhc2gtdjIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg3MDgyYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE4YS8xMTAtZW5hYmxlLWRhc2gtdjIucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorRW5hYmxlIHVzaW5nIGEgc2hlbGwgb3RoZXIgdGhhbiBiYXNoLgorQ291cnRlc3kgIk1hcnRpbiBHdXkiIDxtYXJ0aW53Z3V5QHlhaG9vLml0PgoraHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2Nyb3NzZ2NjLzIwMDgtMDgvbXNnMDAwMzcuaHRtbAorCistLS0gYmludXRpbHMtMi4xOC5vcmlnL2xkL2dlbnNjcmlwdHMuc2gJMjAwNy0wOC0xMiAyMDowMDowNy4wMDAwMDAwMDAgKzAxMDAKKysrKyBiaW51dGlscy0yLjE4L2xkL2dlbnNjcmlwdHMuc2gJMjAwOC0wOC0yNSAxNjowOTo1NC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zOTgsOSArMzk4LDExIEBACisgICAgIC4gJGVtX3NjcmlwdAorICAgICBlbV9zY3JpcHQ9JGN1cnJlbnRfc2NyaXB0CisgICB9CistICBmcmFnbWVudCgpCisrICAKKysgIGFsaWFzIGZyYWdtZW50PSdlbV9saW5lbm89JExJTkVOTzsgZnJhZ21lbnRfZW0nCisrICBmcmFnbWVudF9lbSgpCisgICB7CistICAgIGxvY2FsIGxpbmVubz0kWyR7QkFTSF9MSU5FTk9bMF19ICsgMV0KKysgICAgbG9jYWwgbGluZW5vPSRbJGVtX2xpbmVubyArIDFdCisgICAgIGVjaG8gPj4gZSR7RU1VTEFUSU9OX05BTUV9LmMgIiNsaW5lICRsaW5lbm8gXCIkZW1fc2NyaXB0XCIiCisgICAgIGNhdCA+PiBlJHtFTVVMQVRJT05fTkFNRX0uYworICAgfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMThhLzEyMC1pMzg2LW5vLWRpdmlkZS1jb21tZW50LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMThhLzEyMC1pMzg2LW5vLWRpdmlkZS1jb21tZW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYmJjZWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xOGEvMTIwLWkzODYtbm8tZGl2aWRlLWNvbW1lbnQucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorZGlmZiAtZHVyTiBiaW51dGlscy0yLjE4Lm9yaWcvZ2FzL2NvbmZpZy90Yy1pMzg2LmMgYmludXRpbHMtMi4xOC9nYXMvY29uZmlnL3RjLWkzODYuYworLS0tIGJpbnV0aWxzLTIuMTgub3JpZy9nYXMvY29uZmlnL3RjLWkzODYuYwkyMDA3LTA4LTI0IDE2OjAxOjIyLjAwMDAwMDAwMCArMDIwMAorKysrIGJpbnV0aWxzLTIuMTgvZ2FzL2NvbmZpZy90Yy1pMzg2LmMJMjAwOC0wOS0yMiAwODoxMTo0Mi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xODAsMjQgKzE4MCwxMCBAQAorICNlbmRpZgorIAk7CisgCistI2lmIChkZWZpbmVkIChURV9JMzg2QUlYKQkJCQlcCistICAgICB8fCAoKGRlZmluZWQgKE9CSl9FTEYpIHx8IGRlZmluZWQgKE9CSl9NQVlCRV9FTEYpKQlcCistCSAmJiAhZGVmaW5lZCAoVEVfR05VKQkJCQlcCistCSAmJiAhZGVmaW5lZCAoVEVfTElOVVgpCQkJCVwKKy0gCSAmJiAhZGVmaW5lZCAoVEVfTkVUV0FSRSkJCQlcCistCSAmJiAhZGVmaW5lZCAoVEVfRnJlZUJTRCkJCQlcCistCSAmJiAhZGVmaW5lZCAoVEVfTmV0QlNEKSkpCisgLyogVGhpcyBhcnJheSBob2xkcyB0aGUgY2hhcnMgdGhhdCBhbHdheXMgc3RhcnQgYSBjb21tZW50LiAgSWYgdGhlCistICAgcHJlLXByb2Nlc3NvciBpcyBkaXNhYmxlZCwgdGhlc2UgYXJlbid0IHZlcnkgdXNlZnVsLiAgVGhlIG9wdGlvbgorLSAgIC0tZGl2aWRlIHdpbGwgcmVtb3ZlICcvJyBmcm9tIHRoaXMgbGlzdC4gICovCistY29uc3QgY2hhciAqaTM4Nl9jb21tZW50X2NoYXJzID0gIiMvIjsKKy0jZGVmaW5lIFNWUjRfQ09NTUVOVF9DSEFSUyAxCistI2RlZmluZSBQUkVGSVhfU0VQQVJBVE9SICdcXCcKKy0KKy0jZWxzZQorKyAgIHByZS1wcm9jZXNzb3IgaXMgZGlzYWJsZWQsIHRoZXNlIGFyZW4ndCB2ZXJ5IHVzZWZ1bC4gICovCisgY29uc3QgY2hhciAqaTM4Nl9jb21tZW50X2NoYXJzID0gIiMiOworICNkZWZpbmUgUFJFRklYX1NFUEFSQVRPUiAnLycKKy0jZW5kaWYKKyAKKyAvKiBUaGlzIGFycmF5IGhvbGRzIHRoZSBjaGFycyB0aGF0IG9ubHkgc3RhcnQgYSBjb21tZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YKKyAgICBhIGxpbmUuICBJZiB0aGUgbGluZSBzZWVtcyB0byBoYXZlIHRoZSBmb3JtICcjIDEyMyBmaWxlbmFtZScKK0BAIC02MDYxLDIwICs2MDQ3LDYgQEAKKyAgICAgICBicmVhazsKKyAKKyAgICAgY2FzZSBPUFRJT05fRElWSURFOgorLSNpZmRlZiBTVlI0X0NPTU1FTlRfQ0hBUlMKKy0gICAgICB7CistCWNoYXIgKm4sICp0OworLQljb25zdCBjaGFyICpzOworLQorLQluID0gKGNoYXIgKikgeG1hbGxvYyAoc3RybGVuIChpMzg2X2NvbW1lbnRfY2hhcnMpICsgMSk7CistCXQgPSBuOworLQlmb3IgKHMgPSBpMzg2X2NvbW1lbnRfY2hhcnM7ICpzICE9ICdcMCc7IHMrKykKKy0JICBpZiAoKnMgIT0gJy8nKQorLQkgICAgKnQrKyA9ICpzOworLQkqdCA9ICdcMCc7CistCWkzODZfY29tbWVudF9jaGFycyA9IG47CistICAgICAgfQorLSNlbmRpZgorICAgICAgIGJyZWFrOworIAorICAgICBjYXNlIE9QVElPTl9NQVJDSDoKK0BAIC02MTQyLDEzICs2MTE0LDggQEAKKyAgIGZwcmludGYgKHN0cmVhbSwgXygiXAorICAgLS0zMi8tLTY0ICAgICAgICAgICAgICAgZ2VuZXJhdGUgMzJiaXQvNjRiaXQgY29kZVxuIikpOworICNlbmRpZgorLSNpZmRlZiBTVlI0X0NPTU1FTlRfQ0hBUlMKKy0gIGZwcmludGYgKHN0cmVhbSwgXygiXAorLSAgLS1kaXZpZGUgICAgICAgICAgICAgICAgZG8gbm90IHRyZWF0IGAvJyBhcyBhIGNvbW1lbnQgY2hhcmFjdGVyXG4iKSk7CistI2Vsc2UKKyAgIGZwcmludGYgKHN0cmVhbSwgXygiXAorICAgLS1kaXZpZGUgICAgICAgICAgICAgICAgaWdub3JlZFxuIikpOworLSNlbmRpZgorICAgZnByaW50ZiAoc3RyZWFtLCBfKCJcCisgICAtbWFyY2g9Q1BVLy1tdHVuZT1DUFUgICBnZW5lcmF0ZSBjb2RlL29wdGltaXplIGZvciBDUFUsIHdoZXJlIENQVSBpcyBvbmUgb2Y6XG5cCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTM4NiwgaTQ4NiwgcGVudGl1bSwgcGVudGl1bXBybywgcGVudGl1bTQsIG5vY29uYSxcblwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE4YS8xMzAtYXZyMzItYXRtZWwtdjEuMC4xLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMThhLzEzMC1hdnIzMi1hdG1lbC12MS4wLjEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI0N2VmOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE4YS8xMzAtYXZyMzItYXRtZWwtdjEuMC4xLnBhdGNoCkBAIC0wLDAgKzEsNTI3NDcgQEAKKy0tLSBhL2JmZC9hcmNodXJlcy5jCisrKysgYi9iZmQvYXJjaHVyZXMuYworQEAgLTM0Niw2ICszNDYsMTEgQEAgREVTQ1JJUFRJT04KKyAuI2RlZmluZSBiZmRfbWFjaF9hdnI0CQk0CisgLiNkZWZpbmUgYmZkX21hY2hfYXZyNQkJNQorIC4jZGVmaW5lIGJmZF9tYWNoX2F2cjYJCTYKKysuICBiZmRfYXJjaF9hdnIzMiwgICAgIHsqIEF0bWVsIEFWUjMyICp9CisrLiNkZWZpbmUgYmZkX21hY2hfYXZyMzJfYXAJNzAwMAorKy4jZGVmaW5lIGJmZF9tYWNoX2F2cjMyX3VjCTMwMDAKKysuI2RlZmluZSBiZmRfbWFjaF9hdnIzMl91Y3IxICAgIDMwMDEKKysuI2RlZmluZSBiZmRfbWFjaF9hdnIzMl91Y3IyICAgIDMwMDIKKyAuICBiZmRfYXJjaF9iZmluLCAgICAgICAgeyogQURJIEJsYWNrZmluICp9CisgLiNkZWZpbmUgYmZkX21hY2hfYmZpbiAgICAgICAgICAxCisgLiAgYmZkX2FyY2hfY3IxNiwgICAgICAgeyogTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBDb21wYWN0UklTQyAoaWUgQ1IxNikuICp9CitAQCAtNDM4LDYgKzQ0Myw3IEBAIGV4dGVybiBjb25zdCBiZmRfYXJjaF9pbmZvX3R5cGUgYmZkX2FscGgKKyBleHRlcm4gY29uc3QgYmZkX2FyY2hfaW5mb190eXBlIGJmZF9hcmNfYXJjaDsKKyBleHRlcm4gY29uc3QgYmZkX2FyY2hfaW5mb190eXBlIGJmZF9hcm1fYXJjaDsKKyBleHRlcm4gY29uc3QgYmZkX2FyY2hfaW5mb190eXBlIGJmZF9hdnJfYXJjaDsKKytleHRlcm4gY29uc3QgYmZkX2FyY2hfaW5mb190eXBlIGJmZF9hdnIzMl9hcmNoOworIGV4dGVybiBjb25zdCBiZmRfYXJjaF9pbmZvX3R5cGUgYmZkX2JmaW5fYXJjaDsKKyBleHRlcm4gY29uc3QgYmZkX2FyY2hfaW5mb190eXBlIGJmZF9jcjE2X2FyY2g7CisgZXh0ZXJuIGNvbnN0IGJmZF9hcmNoX2luZm9fdHlwZSBiZmRfY3IxNmNfYXJjaDsKK0BAIC01MDksNiArNTE1LDcgQEAgc3RhdGljIGNvbnN0IGJmZF9hcmNoX2luZm9fdHlwZSAqIGNvbnN0IAorICAgICAmYmZkX2FyY19hcmNoLAorICAgICAmYmZkX2FybV9hcmNoLAorICAgICAmYmZkX2F2cl9hcmNoLAorKyAgICAmYmZkX2F2cjMyX2FyY2gsCisgICAgICZiZmRfYmZpbl9hcmNoLAorICAgICAmYmZkX2NyMTZfYXJjaCwKKyAgICAgJmJmZF9jcjE2Y19hcmNoLAorLS0tIGEvYmZkL2NvbmZpZy5iZmQKKysrKyBiL2JmZC9jb25maWcuYmZkCitAQCAtMzM1LDYgKzMzNSwxMCBAQCBjYXNlICIke3Rhcmd9IiBpbgorICAgICB0YXJnX3VuZGVyc2NvcmU9eWVzCisgICAgIDs7CisgCisrICBhdnIzMi0qLSopCisrICAgIHRhcmdfZGVmdmVjPWJmZF9lbGYzMl9hdnIzMl92ZWMKKysgICAgOzsKKysKKyAgIGMzMC0qLSphb3V0KiB8IHRpYzMwLSotKmFvdXQqKQorICAgICB0YXJnX2RlZnZlYz10aWMzMF9hb3V0X3ZlYworICAgICA7OworLS0tIGEvYmZkL2NvbmZpZ3VyZS5pbgorKysrIGIvYmZkL2NvbmZpZ3VyZS5pbgorQEAgLTgsNyArOCw3IEBAIEFDX0NPTkZJR19TUkNESVIoW2xpYmJmZC5jXSkKKyBBQ19DQU5PTklDQUxfVEFSR0VUCisgQUNfSVNDX1BPU0lYCisgCistQU1fSU5JVF9BVVRPTUFLRShiZmQsIDIuMTgpCisrQU1fSU5JVF9BVVRPTUFLRShiZmQsIDIuMTguYXRtZWwuMS4wLjEuYXZyMzJsaW51eC4xKQorIAorIGRubCBUaGVzZSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgQU1fUFJPR19MSUJUT09MLCBiZWNhdXNlIGl0IG1heSB3YW50CisgZG5sIHRvIGNhbGwgQUNfQ0hFQ0tfUFJPRy4KK0BAIC02MTksNiArNjE5LDcgQEAgZG8KKyAgICAgYmZkX2VmaV9hcHBfaWE2NF92ZWMpCXRiPSIkdGIgZWZpLWFwcC1pYTY0LmxvIHBlcGlnZW4ubG8gY29mZmxpbmsubG8iOyB0YXJnZXRfc2l6ZT02NCA7OworICAgICBiZmRfZWxmMzJfYW0zM2xpbl92ZWMpCXRiPSIkdGIgZWxmMzItYW0zM2xpbi5sbyBlbGYzMi5sbyAkZWxmIiA7OworICAgICBiZmRfZWxmMzJfYXZyX3ZlYykJCXRiPSIkdGIgZWxmMzItYXZyLmxvIGVsZjMyLmxvICRlbGYiIDs7CisrICAgIGJmZF9lbGYzMl9hdnIzMl92ZWMpCXRiPSIkdGIgZWxmMzItYXZyMzIubG8gZWxmMzIubG8gJGVsZiIgOzsKKyAgICAgYmZkX2VsZjMyX2JmaW5fdmVjKQkJdGI9IiR0YiBlbGYzMi1iZmluLmxvIGVsZjMyLmxvICRlbGYiIDs7CisgICAgIGJmZF9lbGYzMl9iZmluZmRwaWNfdmVjKQl0Yj0iJHRiIGVsZjMyLWJmaW4ubG8gZWxmMzIubG8gJGVsZiIgOzsKKyAgICAgYmZkX2VsZjMyX2JpZ19nZW5lcmljX3ZlYykgCXRiPSIkdGIgZWxmMzItZ2VuLmxvIGVsZjMyLmxvICRlbGYiIDs7CistLS0gL2Rldi9udWxsCisrKysgYi9iZmQvY3B1LWF2cjMyLmMKK0BAIC0wLDAgKzEsNTEgQEAKKysvKiBCRkQgbGlicmFyeSBzdXBwb3J0IHJvdXRpbmVzIGZvciBBVlIzMi4KKysgICBDb3B5cmlnaHQgMjAwMy0yMDA2IEF0bWVsIENvcnBvcmF0aW9uLgorKworKyAgIFdyaXR0ZW4gYnkgSGFhdmFyZCBTa2lubmVtb2VuLCBBdG1lbCBOb3J3YXksIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CisrCisrICAgVGhpcyBpcyBwYXJ0IG9mIEJGRCwgdGhlIEJpbmFyeSBGaWxlIERlc2NyaXB0b3IgbGlicmFyeS4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKysgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKworKyNpbmNsdWRlICJiZmQuaCIKKysjaW5jbHVkZSAic3lzZGVwLmgiCisrI2luY2x1ZGUgImxpYmJmZC5oIgorKworKyNkZWZpbmUgTihtYWNoaW5lLCBwcmludCwgZGVmYXVsdCwgbmV4dCkJCQlcCisrICB7CQkJCQkJCQlcCisrICAgIDMyLAkJCQkvKiAzMiBiaXRzIGluIGEgd29yZCAqLwkJXAorKyAgICAzMiwJCQkJLyogMzIgYml0cyBpbiBhbiBhZGRyZXNzICovCVwKKysgICAgOCwJCQkJLyogOCBiaXRzIGluIGEgYnl0ZSAqLwkJXAorKyAgICBiZmRfYXJjaF9hdnIzMiwJCS8qIGFyY2hpdGVjdHVyZSAqLwkJXAorKyAgICBtYWNoaW5lLAkJCS8qIG1hY2hpbmUgKi8JCQlcCisrICAgICJhdnIzMiIsCQkJLyogYXJjaCBuYW1lICovCQkJXAorKyAgICBwcmludCwJCQkvKiBwcmludGFibGUgbmFtZSAqLwkJXAorKyAgICAxLAkJCQkvKiBzZWN0aW9uIGFsaWduIHBvd2VyICovCVwKKysgICAgZGVmYXVsdCwJCQkvKiB0aGUgZGVmYXVsdCBtYWNoaW5lPyAqLwlcCisrICAgIGJmZF9kZWZhdWx0X2NvbXBhdGlibGUsCQkJCQlcCisrICAgIGJmZF9kZWZhdWx0X3NjYW4sCQkJCQkJXAorKyAgICBuZXh0LAkJCQkJCQlcCisrICB9CisrCisrc3RhdGljIGNvbnN0IGJmZF9hcmNoX2luZm9fdHlwZSBjcHVfaW5mb1tdID0KKyt7CisrICBOKGJmZF9tYWNoX2F2cjMyX2FwLCAiYXZyMzI6YXAiLCBGQUxTRSwgJmNwdV9pbmZvWzFdKSwKKysgIE4oYmZkX21hY2hfYXZyMzJfdWMsICJhdnIzMjp1YyIsIEZBTFNFLCAmY3B1X2luZm9bMl0pLAorKyAgTihiZmRfbWFjaF9hdnIzMl91Y3IxLCAiYXZyMzI6dWNyMSIsIEZBTFNFLCAmY3B1X2luZm9bM10pLAorKyAgTihiZmRfbWFjaF9hdnIzMl91Y3IyLCAiYXZyMzI6dWNyMiIsIEZBTFNFLCBOVUxMKSwKKyt9OworKworK2NvbnN0IGJmZF9hcmNoX2luZm9fdHlwZSBiZmRfYXZyMzJfYXJjaCA9CisrICBOKGJmZF9tYWNoX2F2cjMyX2FwLCAiYXZyMzIiLCBUUlVFLCAmY3B1X2luZm9bMF0pOworLS0tIC9kZXYvbnVsbAorKysrIGIvYmZkL2VsZjMyLWF2cjMyLmMKK0BAIC0wLDAgKzEsMzkxNSBAQAorKy8qIEFWUjMyLXNwZWNpZmljIHN1cHBvcnQgZm9yIDMyLWJpdCBFTEYuCisrICAgQ29weXJpZ2h0IDIwMDMtMjAwNiBBdG1lbCBDb3Jwb3JhdGlvbi4KKysKKysgICBXcml0dGVuIGJ5IEhhYXZhcmQgU2tpbm5lbW9lbiwgQXRtZWwgTm9yd2F5LCA8aHNraW5uZW1vZW5AYXRtZWwuY29tPgorKworKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJGRCwgdGhlIEJpbmFyeSBGaWxlIERlc2NyaXB0b3IgbGlicmFyeS4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKysgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICovCisrCisrI2luY2x1ZGUgImJmZC5oIgorKyNpbmNsdWRlICJzeXNkZXAuaCIKKysjaW5jbHVkZSAiYmZkbGluay5oIgorKyNpbmNsdWRlICJsaWJiZmQuaCIKKysjaW5jbHVkZSAiZWxmLWJmZC5oIgorKyNpbmNsdWRlICJlbGYvYXZyMzIuaCIKKysjaW5jbHVkZSAiZWxmMzItYXZyMzIuaCIKKysKKysjZGVmaW5lIHhERUJVRworKyNkZWZpbmUgeFJFTEFYX0RFQlVHCisrCisrI2lmZGVmIERFQlVHCisrIyBkZWZpbmUgcHJfZGVidWcoZm10LCBhcmdzLi4uKSBmcHJpbnRmKHN0ZGVyciwgZm10LCAjI2FyZ3MpCisrI2Vsc2UKKysjIGRlZmluZSBwcl9kZWJ1ZyhmbXQsIGFyZ3MuLi4pIGRvIHsgfSB3aGlsZSAoMCkKKysjZW5kaWYKKysKKysjaWZkZWYgUkVMQVhfREVCVUcKKysjIGRlZmluZSBSREJHKGZtdCwgYXJncy4uLikgZnByaW50ZihzdGRlcnIsIGZtdCwgIyNhcmdzKQorKyNlbHNlCisrIyBkZWZpbmUgUkRCRyhmbXQsIGFyZ3MuLi4pIGRvIHsgfSB3aGlsZSAoMCkKKysjZW5kaWYKKysKKysvKiBXaGVuIHRoaW5ncyBnbyB3cm9uZywgd2Ugd2FudCBpdCB0byBibG93IHVwLCBkYW1uaXQhICovCisrI3VuZGVmIEJGRF9BU1NFUlQKKysjdW5kZWYgYWJvcnQKKysjZGVmaW5lIEJGRF9BU1NFUlQoZXhwcikJCQkJCVwKKysgIGRvCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCVwKKysgICAgICBpZiAoIShleHByKSkJCQkJCQlcCisrCXsJCQkJCQkJXAorKwkgIGJmZF9hc3NlcnQoX19GSUxFX18sIF9fTElORV9fKTsJCQlcCisrCSAgYWJvcnQoKTsJCQkJCQlcCisrCX0JCQkJCQkJXAorKyAgICB9CQkJCQkJCQlcCisrICB3aGlsZSAoMCkKKysKKysvKiBUaGUgbmFtZSBvZiB0aGUgZHluYW1pYyBpbnRlcnByZXRlci4gVGhpcyBpcyBwdXQgaW4gdGhlIC5pbnRlcnAgc2VjdGlvbi4gKi8KKysjZGVmaW5lIEVMRl9EWU5BTUlDX0lOVEVSUFJFVEVSCQkiL2xpYi9sZC5zby4xIgorKworKyNkZWZpbmUgQVZSMzJfR09UX0hFQURFUl9TSVpFCQk4CisrI2RlZmluZSBBVlIzMl9GVU5DVElPTl9TVFVCX1NJWkUJOAorKworKyNkZWZpbmUgRUxGX1JfSU5GTyh4LCB5KSBFTEYzMl9SX0lORk8oeCwgeSkKKysjZGVmaW5lIEVMRl9SX1RZUEUoeCkgRUxGMzJfUl9UWVBFKHgpCisrI2RlZmluZSBFTEZfUl9TWU0oeCkgRUxGMzJfUl9TWU0oeCkKKysKKysjZGVmaW5lIE5PUF9PUENPREUgMHhkNzAzCisrCisrCisrLyogTWFwcGluZyBiZXR3ZWVuIEJGRCByZWxvY2F0aW9ucyBhbmQgRUxGIHJlbG9jYXRpb25zICovCisrCisrc3RhdGljIHJlbG9jX2hvd3RvX3R5cGUgKgorK2JmZF9lbGYzMl9iZmRfcmVsb2NfdHlwZV9sb29rdXAoYmZkICphYmZkLCBiZmRfcmVsb2NfY29kZV9yZWFsX3R5cGUgY29kZSk7CisrCisrc3RhdGljIHJlbG9jX2hvd3RvX3R5cGUgKgorK2JmZF9lbGYzMl9iZmRfcmVsb2NfbmFtZV9sb29rdXAoYmZkICphYmZkLCBjb25zdCBjaGFyICpyX25hbWUpOworKworK3N0YXRpYyB2b2lkCisrYXZyMzJfaW5mb190b19ob3d0byAoYmZkICphYmZkLCBhcmVsZW50ICpjYWNoZV9wdHIsIEVsZl9JbnRlcm5hbF9SZWxhICpkc3QpOworKworKy8qIEdlbmVyaWMgSE9XVE8gKi8KKysjZGVmaW5lIEdFTkgobmFtZSwgYWxpZ24sIHNpemUsIGJpdHNpemUsIHBjcmVsLCBiaXRwb3MsIGNvbXBsYWluLCBtYXNrKQlcCisrICBIT1dUTyhuYW1lLCBhbGlnbiwgc2l6ZSwgYml0c2l6ZSwgcGNyZWwsIGJpdHBvcywJCQlcCisrCWNvbXBsYWluX292ZXJmbG93XyMjY29tcGxhaW4sIGJmZF9lbGZfZ2VuZXJpY19yZWxvYywgI25hbWUsCVwKKysJRkFMU0UsIDAsIG1hc2ssIHBjcmVsKQorKworK3N0YXRpYyByZWxvY19ob3d0b190eXBlIGVsZl9hdnIzMl9ob3d0b190YWJsZVtdID0geworKyAgLyogICBOQU1FCQkgQUxOIFNaIEJTWiBQQ1JFTCAgQlAgQ09NUExBSU4gIE1BU0sJICAgICovCisrICBHRU5IKFJfQVZSMzJfTk9ORSwJICAwLCAwLCAwLCAgRkFMU0UsIDAsIGRvbnQsCTB4MDAwMDAwMDApLAorKworKyAgR0VOSChSX0FWUjMyXzMyLAkgIDAsIDIsIDMyLCBGQUxTRSwgMCwgZG9udCwJMHhmZmZmZmZmZiksCisrICBHRU5IKFJfQVZSMzJfMTYsCSAgMCwgMSwgMTYsIEZBTFNFLCAwLCBiaXRmaWVsZCwJMHgwMDAwZmZmZiksCisrICBHRU5IKFJfQVZSMzJfOCwJICAwLCAwLCAgOCwgRkFMU0UsIDAsIGJpdGZpZWxkLAkweDAwMDAwMGZmKSwKKysgIEdFTkgoUl9BVlIzMl8zMl9QQ1JFTCwgIDAsIDIsIDMyLCBUUlVFLCAgMCwgc2lnbmVkLCAgIDB4ZmZmZmZmZmYpLAorKyAgR0VOSChSX0FWUjMyXzE2X1BDUkVMLCAgMCwgMSwgMTYsIFRSVUUsICAwLCBzaWduZWQsICAgMHgwMDAwZmZmZiksCisrICBHRU5IKFJfQVZSMzJfOF9QQ1JFTCwJICAwLCAwLCAgOCwgVFJVRSwgIDAsIHNpZ25lZCwgICAweDAwMDAwMGZmKSwKKysKKysgIC8qIERpZmZlcmVuY2UgYmV0d2VlbiB0d28gc3ltYm9sIChzeW0yIC0gc3ltMSkuICBUaGUgcmVsb2MgZW5jb2RlcworKyAgICAgdGhlIHZhbHVlIG9mIHN5bTEuICBUaGUgZmllbGQgY29udGFpbnMgdGhlIGRpZmZlcmVuY2UgYmVmb3JlIGFueQorKyAgICAgcmVsYXhpbmcgaXMgZG9uZS4gICovCisrICBHRU5IKFJfQVZSMzJfRElGRjMyLAkgIDAsIDIsIDMyLCBGQUxTRSwgMCwgZG9udCwJMHhmZmZmZmZmZiksCisrICBHRU5IKFJfQVZSMzJfRElGRjE2LAkgIDAsIDEsIDE2LCBGQUxTRSwgMCwgc2lnbmVkLAkweDAwMDBmZmZmKSwKKysgIEdFTkgoUl9BVlIzMl9ESUZGOCwJICAwLCAwLCAgOCwgRkFMU0UsIDAsIHNpZ25lZCwJMHgwMDAwMDBmZiksCisrCisrICBHRU5IKFJfQVZSMzJfR09UMzIsCSAgMCwgMiwgMzIsIEZBTFNFLCAwLCBzaWduZWQsCTB4ZmZmZmZmZmYpLAorKyAgR0VOSChSX0FWUjMyX0dPVDE2LAkgIDAsIDEsIDE2LCBGQUxTRSwgMCwgc2lnbmVkLAkweDAwMDBmZmZmKSwKKysgIEdFTkgoUl9BVlIzMl9HT1Q4LAkgIDAsIDAsICA4LCBGQUxTRSwgMCwgc2lnbmVkLAkweDAwMDAwMGZmKSwKKysKKysgIEdFTkgoUl9BVlIzMl8yMVMsCSAgMCwgMiwgMjEsIEZBTFNFLCAwLCBzaWduZWQsCTB4MWUxMGZmZmYpLAorKyAgR0VOSChSX0FWUjMyXzE2VSwJICAwLCAyLCAxNiwgRkFMU0UsIDAsIHVuc2lnbmVkLAkweDAwMDBmZmZmKSwKKysgIEdFTkgoUl9BVlIzMl8xNlMsCSAgMCwgMiwgMTYsIEZBTFNFLCAwLCBzaWduZWQsCTB4MDAwMGZmZmYpLAorKyAgR0VOSChSX0FWUjMyXzhTLAkgIDAsIDEsICA4LCBGQUxTRSwgNCwgc2lnbmVkLAkweDAwMDAwZmYwKSwKKysgIEdFTkgoUl9BVlIzMl84U19FWFQsCSAgMCwgMiwgIDgsIEZBTFNFLCAwLCBzaWduZWQsCTB4MDAwMDAwZmYpLAorKworKyAgR0VOSChSX0FWUjMyXzIySF9QQ1JFTCwgMSwgMiwgMjEsIFRSVUUsICAwLCBzaWduZWQsCTB4MWUxMGZmZmYpLAorKyAgR0VOSChSX0FWUjMyXzE4V19QQ1JFTCwgMiwgMiwgMTYsIFRSVUUsICAwLCBzaWduZWQsCTB4MDAwMGZmZmYpLAorKyAgR0VOSChSX0FWUjMyXzE2Ql9QQ1JFTCwgMCwgMiwgMTYsIFRSVUUsICAwLCBzaWduZWQsCTB4MDAwMGZmZmYpLAorKyAgR0VOSChSX0FWUjMyXzE2Tl9QQ1JFTCwgMCwgMiwgMTYsIFRSVUUsICAwLCBzaWduZWQsCTB4MDAwMGZmZmYpLAorKyAgR0VOSChSX0FWUjMyXzE0VVdfUENSRUwsIDIsIDIsIDEyLCBUUlVFLCAwLCB1bnNpZ25lZCwgMHgwMDAwZjBmZiksCisrICBHRU5IKFJfQVZSMzJfMTFIX1BDUkVMLCAxLCAxLCAxMCwgVFJVRSwgIDQsIHNpZ25lZCwJMHgwMDAwMGZmMyksCisrICBHRU5IKFJfQVZSMzJfMTBVV19QQ1JFTCwgMiwgMiwgOCwgVFJVRSwgIDAsIHVuc2lnbmVkLCAweDAwMDAwMGZmKSwKKysgIEdFTkgoUl9BVlIzMl85SF9QQ1JFTCwgIDEsIDEsICA4LCBUUlVFLCAgNCwgc2lnbmVkLAkweDAwMDAwZmYwKSwKKysgIEdFTkgoUl9BVlIzMl85VVdfUENSRUwsIDIsIDEsICA3LCBUUlVFLCAgNCwgdW5zaWduZWQsCTB4MDAwMDA3ZjApLAorKworKyAgR0VOSChSX0FWUjMyX0hJMTYsCSAxNiwgMiwgMTYsIEZBTFNFLCAwLCBkb250LAkweDAwMDBmZmZmKSwKKysgIEdFTkgoUl9BVlIzMl9MTzE2LAkgIDAsIDIsIDE2LCBGQUxTRSwgMCwgZG9udCwJMHgwMDAwZmZmZiksCisrCisrICBHRU5IKFJfQVZSMzJfR09UUEMsCSAgMCwgMiwgMzIsIEZBTFNFLCAwLCBkb250LAkweGZmZmZmZmZmKSwKKysgIEdFTkgoUl9BVlIzMl9HT1RDQUxMLCAgIDIsIDIsIDIxLCBGQUxTRSwgMCwgc2lnbmVkLAkweDFlMTBmZmZmKSwKKysgIEdFTkgoUl9BVlIzMl9MREFfR09ULAkgIDIsIDIsIDIxLCBGQUxTRSwgMCwgc2lnbmVkLAkweDFlMTBmZmZmKSwKKysgIEdFTkgoUl9BVlIzMl9HT1QyMVMsCSAgMCwgMiwgMjEsIEZBTFNFLCAwLCBzaWduZWQsCTB4MWUxMGZmZmYpLAorKyAgR0VOSChSX0FWUjMyX0dPVDE4U1csCSAgMiwgMiwgMTYsIEZBTFNFLCAwLCBzaWduZWQsCTB4MDAwMGZmZmYpLAorKyAgR0VOSChSX0FWUjMyX0dPVDE2UywJICAwLCAyLCAxNiwgRkFMU0UsIDAsIHNpZ25lZCwJMHgwMDAwZmZmZiksCisrICBHRU5IKFJfQVZSMzJfR09UN1VXLAkgIDIsIDEsICA1LCBGQUxTRSwgNCwgdW5zaWduZWQsIDB4MDAwMDAxZjApLAorKworKyAgR0VOSChSX0FWUjMyXzMyX0NQRU5ULCAgMCwgMiwgMzIsIEZBTFNFLCAwLCBkb250LAkweGZmZmZmZmZmKSwKKysgIEdFTkgoUl9BVlIzMl9DUENBTEwsCSAgMiwgMiwgMTYsIFRSVUUsICAwLCBzaWduZWQsCTB4MDAwMGZmZmYpLAorKyAgR0VOSChSX0FWUjMyXzE2X0NQLAkgIDAsIDIsIDE2LCBUUlVFLCAgMCwgc2lnbmVkLAkweDAwMDBmZmZmKSwKKysgIEdFTkgoUl9BVlIzMl85V19DUCwJICAyLCAxLCAgNywgVFJVRSwgIDQsIHVuc2lnbmVkLCAweDAwMDAwN2YwKSwKKysKKysgIEdFTkgoUl9BVlIzMl9SRUxBVElWRSwgIDAsIDIsIDMyLCBGQUxTRSwgMCwgc2lnbmVkLAkweGZmZmZmZmZmKSwKKysgIEdFTkgoUl9BVlIzMl9HTE9CX0RBVCwgIDAsIDIsIDMyLCBGQUxTRSwgMCwgZG9udCwJMHhmZmZmZmZmZiksCisrICBHRU5IKFJfQVZSMzJfSk1QX1NMT1QsICAwLCAyLCAzMiwgRkFMU0UsIDAsIGRvbnQsCTB4ZmZmZmZmZmYpLAorKworKyAgR0VOSChSX0FWUjMyX0FMSUdOLAkgIDAsIDEsIDAsICBGQUxTRSwgMCwgdW5zaWduZWQsIDB4MDAwMDAwMDApLAorKworKyAgR0VOSChSX0FWUjMyXzE1UywJICAyLCAyLCAxNSwgRkFMU0UsIDAsIHNpZ25lZCwJMHgwMDAwN2ZmZiksCisrfTsKKysKKytzdHJ1Y3QgZWxmX3JlbG9jX21hcAorK3sKKysgIGJmZF9yZWxvY19jb2RlX3JlYWxfdHlwZSBiZmRfcmVsb2NfdmFsOworKyAgdW5zaWduZWQgY2hhciBlbGZfcmVsb2NfdmFsOworK307CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBlbGZfcmVsb2NfbWFwIGF2cjMyX3JlbG9jX21hcFtdID0KKyt7CisrICB7IEJGRF9SRUxPQ19OT05FLAkJCVJfQVZSMzJfTk9ORSB9LAorKworKyAgeyBCRkRfUkVMT0NfMzIsCQkJUl9BVlIzMl8zMiB9LAorKyAgeyBCRkRfUkVMT0NfMTYsCQkJUl9BVlIzMl8xNiB9LAorKyAgeyBCRkRfUkVMT0NfOCwJCQlSX0FWUjMyXzggfSwKKysgIHsgQkZEX1JFTE9DXzMyX1BDUkVMLAkJCVJfQVZSMzJfMzJfUENSRUwgfSwKKysgIHsgQkZEX1JFTE9DXzE2X1BDUkVMLAkJCVJfQVZSMzJfMTZfUENSRUwgfSwKKysgIHsgQkZEX1JFTE9DXzhfUENSRUwsCQkJUl9BVlIzMl84X1BDUkVMIH0sCisrICB7IEJGRF9SRUxPQ19BVlIzMl9ESUZGMzIsCQlSX0FWUjMyX0RJRkYzMiB9LAorKyAgeyBCRkRfUkVMT0NfQVZSMzJfRElGRjE2LAkJUl9BVlIzMl9ESUZGMTYgfSwKKysgIHsgQkZEX1JFTE9DX0FWUjMyX0RJRkY4LAkJUl9BVlIzMl9ESUZGOCB9LAorKyAgeyBCRkRfUkVMT0NfQVZSMzJfR09UMzIsCQlSX0FWUjMyX0dPVDMyIH0sCisrICB7IEJGRF9SRUxPQ19BVlIzMl9HT1QxNiwJCVJfQVZSMzJfR09UMTYgfSwKKysgIHsgQkZEX1JFTE9DX0FWUjMyX0dPVDgsCQlSX0FWUjMyX0dPVDggfSwKKysKKysgIHsgQkZEX1JFTE9DX0FWUjMyXzIxUywJCVJfQVZSMzJfMjFTIH0sCisrICB7IEJGRF9SRUxPQ19BVlIzMl8xNlUsCQlSX0FWUjMyXzE2VSB9LAorKyAgeyBCRkRfUkVMT0NfQVZSMzJfMTZTLAkJUl9BVlIzMl8xNlMgfSwKKysgIHsgQkZEX1JFTE9DX0FWUjMyX1NVQjUsCQlSX0FWUjMyXzE2UyB9LAorKyAgeyBCRkRfUkVMT0NfQVZSMzJfOFNfRVhULAkJUl9BVlIzMl84U19FWFQgfSwKKysgIHsgQkZEX1JFTE9DX0FWUjMyXzhTLAkJCVJfQVZSMzJfOFMgfSwKKysKKysgIHsgQkZEX1JFTE9DX0FWUjMyXzIySF9QQ1JFTCwJCVJfQVZSMzJfMjJIX1BDUkVMIH0sCisrICB7IEJGRF9SRUxPQ19BVlIzMl8xOFdfUENSRUwsCQlSX0FWUjMyXzE4V19QQ1JFTCB9LAorKyAgeyBCRkRfUkVMT0NfQVZSMzJfMTZCX1BDUkVMLAkJUl9BVlIzMl8xNkJfUENSRUwgfSwKKysgIHsgQkZEX1JFTE9DX0FWUjMyXzE2Tl9QQ1JFTCwJCVJfQVZSMzJfMTZOX1BDUkVMIH0sCisrICB7IEJGRF9SRUxPQ19BVlIzMl8xMUhfUENSRUwsCQlSX0FWUjMyXzExSF9QQ1JFTCB9LAorKyAgeyBCRkRfUkVMT0NfQVZSMzJfMTBVV19QQ1JFTCwJCVJfQVZSMzJfMTBVV19QQ1JFTCB9LAorKyAgeyBCRkRfUkVMT0NfQVZSMzJfOUhfUENSRUwsCQlSX0FWUjMyXzlIX1BDUkVMIH0sCisrICB7IEJGRF9SRUxPQ19BVlIzMl85VVdfUENSRUwsCQlSX0FWUjMyXzlVV19QQ1JFTCB9LAorKworKyAgeyBCRkRfUkVMT0NfSEkxNiwJCQlSX0FWUjMyX0hJMTYgfSwKKysgIHsgQkZEX1JFTE9DX0xPMTYsCQkJUl9BVlIzMl9MTzE2IH0sCisrCisrICB7IEJGRF9SRUxPQ19BVlIzMl9HT1RQQywJCVJfQVZSMzJfR09UUEMgfSwKKysgIHsgQkZEX1JFTE9DX0FWUjMyX0dPVENBTEwsCQlSX0FWUjMyX0dPVENBTEwgfSwKKysgIHsgQkZEX1JFTE9DX0FWUjMyX0xEQV9HT1QsCQlSX0FWUjMyX0xEQV9HT1QgfSwKKysgIHsgQkZEX1JFTE9DX0FWUjMyX0dPVDIxUywJCVJfQVZSMzJfR09UMjFTIH0sCisrICB7IEJGRF9SRUxPQ19BVlIzMl9HT1QxOFNXLAkJUl9BVlIzMl9HT1QxOFNXIH0sCisrICB7IEJGRF9SRUxPQ19BVlIzMl9HT1QxNlMsCQlSX0FWUjMyX0dPVDE2UyB9LAorKyAgLyogR09UN1VXIHNob3VsZCBuZXZlciBiZSBnZW5lcmF0ZWQgYnkgdGhlIGFzc2VtYmxlciAqLworKworKyAgeyBCRkRfUkVMT0NfQVZSMzJfMzJfQ1BFTlQsCQlSX0FWUjMyXzMyX0NQRU5UIH0sCisrICB7IEJGRF9SRUxPQ19BVlIzMl9DUENBTEwsCQlSX0FWUjMyX0NQQ0FMTCB9LAorKyAgeyBCRkRfUkVMT0NfQVZSMzJfMTZfQ1AsCQlSX0FWUjMyXzE2X0NQIH0sCisrICB7IEJGRF9SRUxPQ19BVlIzMl85V19DUCwJCVJfQVZSMzJfOVdfQ1AgfSwKKysKKysgIHsgQkZEX1JFTE9DX0FWUjMyX0FMSUdOLAkJUl9BVlIzMl9BTElHTiB9LAorKworKyAgeyBCRkRfUkVMT0NfQVZSMzJfMTVTLAkJUl9BVlIzMl8xNVMgfSwKKyt9OworKworK3N0YXRpYyByZWxvY19ob3d0b190eXBlICoKKytiZmRfZWxmMzJfYmZkX3JlbG9jX3R5cGVfbG9va3VwIChiZmQgKmFiZmQgQVRUUklCVVRFX1VOVVNFRCwKKysJCQkJIGJmZF9yZWxvY19jb2RlX3JlYWxfdHlwZSBjb2RlKQorK3sKKysgIHVuc2lnbmVkIGludCBpOworKworKyAgZm9yIChpID0gMDsgaSA8IHNpemVvZihhdnIzMl9yZWxvY19tYXApIC8gc2l6ZW9mKHN0cnVjdCBlbGZfcmVsb2NfbWFwKTsgaSsrKQorKyAgICB7CisrICAgICAgaWYgKGF2cjMyX3JlbG9jX21hcFtpXS5iZmRfcmVsb2NfdmFsID09IGNvZGUpCisrCXJldHVybiAmZWxmX2F2cjMyX2hvd3RvX3RhYmxlW2F2cjMyX3JlbG9jX21hcFtpXS5lbGZfcmVsb2NfdmFsXTsKKysgICAgfQorKworKyAgcmV0dXJuIE5VTEw7CisrfQorKworK3N0YXRpYyByZWxvY19ob3d0b190eXBlICoKKytiZmRfZWxmMzJfYmZkX3JlbG9jX25hbWVfbG9va3VwIChiZmQgKmFiZmQgQVRUUklCVVRFX1VOVVNFRCwKKysgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJfbmFtZSkKKyt7CisrICB1bnNpZ25lZCBpbnQgaTsKKysKKysgIGZvciAoaSA9IDA7CisrICAgICAgIGkgPCBzaXplb2YgKGVsZl9hdnIzMl9ob3d0b190YWJsZSkgLyBzaXplb2YgKGVsZl9hdnIzMl9ob3d0b190YWJsZVswXSk7CisrICAgICAgIGkrKykKKysgICAgaWYgKGVsZl9hdnIzMl9ob3d0b190YWJsZVtpXS5uYW1lICE9IE5VTEwKKysgICAgJiYgc3RyY2FzZWNtcCAoZWxmX2F2cjMyX2hvd3RvX3RhYmxlW2ldLm5hbWUsIHJfbmFtZSkgPT0gMCkKKysgICAgICByZXR1cm4gJmVsZl9hdnIzMl9ob3d0b190YWJsZVtpXTsKKysKKysgIHJldHVybiBOVUxMOworK30KKysKKysvKiBTZXQgdGhlIGhvd3RvIHBvaW50ZXIgZm9yIGFuIEFWUjMyIEVMRiByZWxvYy4gICovCisrc3RhdGljIHZvaWQKKythdnIzMl9pbmZvX3RvX2hvd3RvIChiZmQgKmFiZmQgQVRUUklCVVRFX1VOVVNFRCwKKysJCSAgICAgYXJlbGVudCAqY2FjaGVfcHRyLAorKwkJICAgICBFbGZfSW50ZXJuYWxfUmVsYSAqZHN0KQorK3sKKysgIHVuc2lnbmVkIGludCByX3R5cGU7CisrCisrICByX3R5cGUgPSBFTEYzMl9SX1RZUEUgKGRzdC0+cl9pbmZvKTsKKysgIEJGRF9BU1NFUlQgKHJfdHlwZSA8ICh1bnNpZ25lZCBpbnQpIFJfQVZSMzJfbWF4KTsKKysgIGNhY2hlX3B0ci0+aG93dG8gPSAmZWxmX2F2cjMyX2hvd3RvX3RhYmxlW3JfdHlwZV07CisrfQorKworKworKy8qIEFWUjMyIEVMRiBsaW5rZXIgaGFzaCB0YWJsZSBhbmQgYXNzb2NpYXRlZCBoYXNoIGVudHJpZXMuICovCisrCisrc3RhdGljIHN0cnVjdCBiZmRfaGFzaF9lbnRyeSAqCisrYXZyMzJfZWxmX2xpbmtfaGFzaF9uZXdmdW5jKHN0cnVjdCBiZmRfaGFzaF9lbnRyeSAqZW50cnksCisrCQkJICAgIHN0cnVjdCBiZmRfaGFzaF90YWJsZSAqdGFibGUsCisrCQkJICAgIGNvbnN0IGNoYXIgKnN0cmluZyk7Cisrc3RhdGljIHZvaWQKKythdnIzMl9lbGZfY29weV9pbmRpcmVjdF9zeW1ib2woc3RydWN0IGJmZF9saW5rX2luZm8gKmluZm8sCisrCQkJICAgICAgIHN0cnVjdCBlbGZfbGlua19oYXNoX2VudHJ5ICpkaXIsCisrCQkJICAgICAgIHN0cnVjdCBlbGZfbGlua19oYXNoX2VudHJ5ICppbmQpOworK3N0YXRpYyBzdHJ1Y3QgYmZkX2xpbmtfaGFzaF90YWJsZSAqCisrYXZyMzJfZWxmX2xpbmtfaGFzaF90YWJsZV9jcmVhdGUoYmZkICphYmZkKTsKKysKKysvKgorKyAgVHJ5IHRvIGxpbWl0IG1lbW9yeSB1c2FnZSB0byBzb21ldGhpbmcgcmVhc29uYWJsZSB3aGVuIHNvcnRpbmcgdGhlCisrICBHT1QuICBJZiBqdXN0IGEgY291cGxlIG9mIGVudHJpZXMgZW5kIHVwIGdldHRpbmcgbW9yZSByZWZlcmVuY2VzCisrICB0aGFuIHRoaXMsIGl0IHdvbid0IGFmZmVjdCBwZXJmb3JtYW5jZSBhdCBhbGwsIGJ1dCBpZiB0aGVyZSBhcmUgbWFueQorKyAgb2YgdGhlbSwgd2UgY291bGQgZW5kIHVwIHdpdGggdGhlIHdyb25nIHN5bWJvbHMgYmVpbmcgYXNzaWduZWQgdGhlCisrICBmaXJzdCBHT1QgZW50cmllcy4KKysqLworKyNkZWZpbmUgTUFYX05SX0dPVF9IT0xFUwkyMDQ4CisrCisrLyoKKysgIEFWUjMyIEdPVCBlbnRyeS4gIFdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiByZWZjb3VudHMgYW5kIG9mZnNldHMKKysgIHNpbXVsdGFuZW91c2x5LCBzaW5jZSB3ZSBuZWVkIHRoZSBvZmZzZXRzIGR1cmluZyByZWxheGF0aW9uLCBhbmQgd2UKKysgIGFsc28gd2FudCB0byBiZSBhYmxlIHRvIGRyb3AgR09UIGVudHJpZXMgZHVyaW5nIHJlbGF4YXRpb24uIEluCisrICBhZGRpdGlvbiB0byB0aGlzLCB3ZSB3YW50IHRvIGtlZXAgdGhlIGxpc3Qgb2YgR09UIGVudHJpZXMgc29ydGVkIHNvCisrICB0aGF0IHdlIGNhbiBrZWVwIHRoZSBtb3N0LXVzZWQgZW50cmllcyBhdCB0aGUgbG93ZXN0IG9mZnNldHMuCisrKi8KKytzdHJ1Y3QgZ290X2VudHJ5CisreworKyAgc3RydWN0IGdvdF9lbnRyeSAqbmV4dDsKKysgIHN0cnVjdCBnb3RfZW50cnkgKipwcHJldjsKKysgIGludCByZWZjb3VudDsKKysgIGJmZF9zaWduZWRfdm1hIG9mZnNldDsKKyt9OworKworK3N0cnVjdCBlbGZfYXZyMzJfbGlua19oYXNoX2VudHJ5CisreworKyAgc3RydWN0IGVsZl9saW5rX2hhc2hfZW50cnkgcm9vdDsKKysKKysgIC8qIE51bWJlciBvZiBydW50aW1lIHJlbG9jYXRpb25zIGFnYWluc3QgdGhpcyBzeW1ib2wuICAqLworKyAgdW5zaWduZWQgaW50IHBvc3NpYmx5X2R5bmFtaWNfcmVsb2NzOworKworKyAgLyogSWYgdGhlcmUgYXJlIGFueXRoaW5nIGJ1dCBSX0FWUjMyX0dPVDE4IHJlbG9jYXRpb25zIGFnYWluc3QgdGhpcworKyAgICAgc3ltYm9sLCBpdCBtZWFucyB0aGF0IHNvbWVvbmUgbWF5IGJlIHRha2luZyB0aGUgYWRkcmVzcyBvZiB0aGUKKysgICAgIGZ1bmN0aW9uLCBhbmQgd2Ugc2hvdWxkIHRoZXJlZm9yZSBub3QgY3JlYXRlIGEgc3R1Yi4gICovCisrICBiZmRfYm9vbGVhbiBub19mbl9zdHViOworKworKyAgLyogSWYgdGhlcmUgaXMgYSBSX0FWUjMyXzMyIHJlbG9jYXRpb24gaW4gYSByZWFkLW9ubHkgc2VjdGlvbgorKyAgICAgYWdhaW5zdCB0aGlzIHN5bWJvbCwgd2UgY291bGQgYmUgaW4gdHJvdWJsZS4gSWYgd2UncmUgbGlua2luZyBhCisrICAgICBzaGFyZWQgbGlicmFyeSBvciB0aGlzIHN5bWJvbCBpcyBkZWZpbmVkIGluIG9uZSwgaXQgbWVhbnMgd2UgbXVzdAorKyAgICAgZW1pdCBhIHJ1bi10aW1lIHJlbG9jIGZvciBpdCBhbmQgdGhhdCdzIG5vdCBhbGxvd2VkIGluIHJlYWQtb25seQorKyAgICAgc2VjdGlvbnMuICAqLworKyAgYXNlY3Rpb24gKnJlYWRvbmx5X3JlbG9jX3NlYzsKKysgIGJmZF92bWEgcmVhZG9ubHlfcmVsb2Nfb2Zmc2V0OworKworKyAgLyogUmVjb3JkIHdoaWNoIGZyYWcgKGlmIGFueSkgY29udGFpbnMgdGhlIHN5bWJvbC4gIFRoaXMgaXMgdXNlZAorKyAgICAgZHVyaW5nIHJlbGF4YXRpb24gaW4gb3JkZXIgdG8gYXZvaWQgaGF2aW5nIHRvIHVwZGF0ZSBhbGwgc3ltYm9scworKyAgICAgd2hlbmV2ZXIgd2UgbW92ZSBzb21ldGhpbmcuICBGb3IgbG9jYWwgc3ltYm9scywgdGhpcyBpbmZvcm1hdGlvbgorKyAgICAgaXMgaW4gdGhlIGxvY2FsX3N5bV9mcmFnIG1lbWJlciBvZiBzdHJ1Y3QgZWxmX29ial90ZGF0YS4gICovCisrICBzdHJ1Y3QgZnJhZ21lbnQgKnN5bV9mcmFnOworK307CisrI2RlZmluZSBhdnIzMl9lbGZfaGFzaF9lbnRyeShlbnQpICgoc3RydWN0IGVsZl9hdnIzMl9saW5rX2hhc2hfZW50cnkgKikoZW50KSkKKysKKytzdHJ1Y3QgZWxmX2F2cjMyX2xpbmtfaGFzaF90YWJsZQorK3sKKysgIHN0cnVjdCBlbGZfbGlua19oYXNoX3RhYmxlIHJvb3Q7CisrCisrICAvKiBTaG9ydGN1dHMgdG8gZ2V0IHRvIGR5bmFtaWMgbGlua2VyIHNlY3Rpb25zLiAgKi8KKysgIGFzZWN0aW9uICpzZ290OworKyAgYXNlY3Rpb24gKnNyZWxnb3Q7CisrICBhc2VjdGlvbiAqc3N0dWI7CisrCisrICAvKiBXZSB1c2UgYSB2YXJpYXRpb24gb2YgUGlnZW9uaG9sZSBTb3J0IHRvIHNvcnQgdGhlIEdPVC4gIEFmdGVyIHRoZQorKyAgICAgaW5pdGlhbCByZWZjb3VudHMgaGF2ZSBiZWVuIGRldGVybWluZWQsIHdlIGluaXRpYWxpemUKKysgICAgIG5yX2dvdF9ob2xlcyB0byB0aGUgaGlnaGVzdCByZWZjb3VudCBldmVyIHNlZW4gYW5kIGFsbG9jYXRlIGFuCisrICAgICBhcnJheSBvZiBucl9nb3RfaG9sZXMgZW50cmllcyBmb3IgZ290X2hvbGUuICBFYWNoIEdPVCBlbnRyeSBpcworKyAgICAgdGhlbiBzdG9yZWQgaW4gdGhpcyBhcnJheSBhdCB0aGUgaW5kZXggZ2l2ZW4gYnkgaXRzIHJlZmNvdW50LgorKworKyAgICAgV2hlbiBhIEdPVCBlbnRyeSBoYXMgaXRzIHJlZmNvdW50IGRlY3JlbWVudGVkIGR1cmluZyByZWxheGF0aW9uLAorKyAgICAgaXQgaXMgbW92ZWQgdG8gYSBsb3dlciBpbmRleCBpbiB0aGUgZ290X2hvbGUgYXJyYXkuCisrICAgKi8KKysgIHN0cnVjdCBnb3RfZW50cnkgKipnb3RfaG9sZTsKKysgIGludCBucl9nb3RfaG9sZXM7CisrCisrICAvKiBEeW5hbWljIHJlbG9jYXRpb25zIHRvIGxvY2FsIHN5bWJvbHMuICBPbmx5IHVzZWQgd2hlbiBsaW5raW5nIGEKKysgICAgIHNoYXJlZCBsaWJyYXJ5IGFuZCAtQnN5bWJvbGljIGlzIG5vdCBnaXZlbi4gICovCisrICB1bnNpZ25lZCBpbnQgbG9jYWxfZHluYW1pY19yZWxvY3M7CisrCisrICBiZmRfYm9vbGVhbiByZWxvY2F0aW9uc19hbmFseXplZDsKKysgIGJmZF9ib29sZWFuIHN5bWJvbHNfYWRqdXN0ZWQ7CisrICBiZmRfYm9vbGVhbiByZXBlYXRfcGFzczsKKysgIGJmZF9ib29sZWFuIGRpcmVjdF9kYXRhX3JlZnM7CisrICB1bnNpZ25lZCBpbnQgcmVsYXhfaXRlcmF0aW9uOworKyAgdW5zaWduZWQgaW50IHJlbGF4X3Bhc3M7CisrfTsKKysjZGVmaW5lIGF2cjMyX2VsZl9oYXNoX3RhYmxlKHApCQkJCVwKKysgICgoc3RydWN0IGVsZl9hdnIzMl9saW5rX2hhc2hfdGFibGUgKikoKHApLT5oYXNoKSkKKysKKytzdGF0aWMgc3RydWN0IGJmZF9oYXNoX2VudHJ5ICoKKythdnIzMl9lbGZfbGlua19oYXNoX25ld2Z1bmMoc3RydWN0IGJmZF9oYXNoX2VudHJ5ICplbnRyeSwKKysJCQkgICAgc3RydWN0IGJmZF9oYXNoX3RhYmxlICp0YWJsZSwKKysJCQkgICAgY29uc3QgY2hhciAqc3RyaW5nKQorK3sKKysgIHN0cnVjdCBlbGZfYXZyMzJfbGlua19oYXNoX2VudHJ5ICpyZXQgPSBhdnIzMl9lbGZfaGFzaF9lbnRyeShlbnRyeSk7CisrCisrICAvKiBBbGxvY2F0ZSB0aGUgc3RydWN0dXJlIGlmIGl0IGhhc24ndCBhbHJlYWR5IGJlZW4gYWxsb2NhdGVkIGJ5IGEKKysgICAgIHN1YmNsYXNzICovCisrICBpZiAocmV0ID09IE5VTEwpCisrICAgIHJldCA9IChzdHJ1Y3QgZWxmX2F2cjMyX2xpbmtfaGFzaF9lbnRyeSAqKQorKyAgICAgIGJmZF9oYXNoX2FsbG9jYXRlKHRhYmxlLCBzaXplb2Yoc3RydWN0IGVsZl9hdnIzMl9saW5rX2hhc2hfZW50cnkpKTsKKysKKysgIGlmIChyZXQgPT0gTlVMTCkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICBtZW1zZXQocmV0LCAwLCBzaXplb2Yoc3RydWN0IGVsZl9hdnIzMl9saW5rX2hhc2hfZW50cnkpKTsKKysKKysgIC8qIEdpdmUgdGhlIHN1cGVyY2xhc3MgYSBjaGFuY2UgKi8KKysgIHJldCA9IChzdHJ1Y3QgZWxmX2F2cjMyX2xpbmtfaGFzaF9lbnRyeSAqKQorKyAgICBfYmZkX2VsZl9saW5rX2hhc2hfbmV3ZnVuYygoc3RydWN0IGJmZF9oYXNoX2VudHJ5ICopcmV0LCB0YWJsZSwgc3RyaW5nKTsKKysKKysgIHJldHVybiAoc3RydWN0IGJmZF9oYXNoX2VudHJ5ICopcmV0OworK30KKysKKysvKiBDb3B5IGRhdGEgZnJvbSBhbiBpbmRpcmVjdCBzeW1ib2wgdG8gaXRzIGRpcmVjdCBzeW1ib2wsIGhpZGluZyB0aGUKKysgICBvbGQgaW5kaXJlY3Qgc3ltYm9sLiAgUHJvY2VzcyBhZGRpdGlvbmFsIHJlbG9jYXRpb24gaW5mb3JtYXRpb24uCisrICAgQWxzbyBjYWxsZWQgZm9yIHdlYWtkZWZzLCBpbiB3aGljaCBjYXNlIHdlIGp1c3QgbGV0CisrICAgX2JmZF9lbGZfbGlua19oYXNoX2NvcHlfaW5kaXJlY3QgY29weSB0aGUgZmxhZ3MgZm9yIHVzLiAgKi8KKysKKytzdGF0aWMgdm9pZAorK2F2cjMyX2VsZl9jb3B5X2luZGlyZWN0X3N5bWJvbChzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqaW5mbywKKysJCQkgICAgICAgc3RydWN0IGVsZl9saW5rX2hhc2hfZW50cnkgKmRpciwKKysJCQkgICAgICAgc3RydWN0IGVsZl9saW5rX2hhc2hfZW50cnkgKmluZCkKKyt7CisrICBzdHJ1Y3QgZWxmX2F2cjMyX2xpbmtfaGFzaF9lbnRyeSAqZWRpciwgKmVpbmQ7CisrCisrICBfYmZkX2VsZl9saW5rX2hhc2hfY29weV9pbmRpcmVjdCAoaW5mbywgZGlyLCBpbmQpOworKworKyAgaWYgKGluZC0+cm9vdC50eXBlICE9IGJmZF9saW5rX2hhc2hfaW5kaXJlY3QpCisrICAgIHJldHVybjsKKysKKysgIGVkaXIgPSAoc3RydWN0IGVsZl9hdnIzMl9saW5rX2hhc2hfZW50cnkgKilkaXI7CisrICBlaW5kID0gKHN0cnVjdCBlbGZfYXZyMzJfbGlua19oYXNoX2VudHJ5ICopaW5kOworKworKyAgZWRpci0+cG9zc2libHlfZHluYW1pY19yZWxvY3MgKz0gZWluZC0+cG9zc2libHlfZHluYW1pY19yZWxvY3M7CisrICBlZGlyLT5ub19mbl9zdHViID0gZWRpci0+bm9fZm5fc3R1YiB8fCBlaW5kLT5ub19mbl9zdHViOworK30KKysKKytzdGF0aWMgc3RydWN0IGJmZF9saW5rX2hhc2hfdGFibGUgKgorK2F2cjMyX2VsZl9saW5rX2hhc2hfdGFibGVfY3JlYXRlKGJmZCAqYWJmZCkKKyt7CisrICBzdHJ1Y3QgZWxmX2F2cjMyX2xpbmtfaGFzaF90YWJsZSAqcmV0OworKworKyAgcmV0ID0gYmZkX3ptYWxsb2Moc2l6ZW9mKCpyZXQpKTsKKysgIGlmIChyZXQgPT0gTlVMTCkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICBpZiAoISBfYmZkX2VsZl9saW5rX2hhc2hfdGFibGVfaW5pdCgmcmV0LT5yb290LCBhYmZkLAorKwkJCQkgICAgICBhdnIzMl9lbGZfbGlua19oYXNoX25ld2Z1bmMsCisrICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoc3RydWN0IGVsZl9hdnIzMl9saW5rX2hhc2hfZW50cnkpKSkKKysgICAgeworKyAgICAgIGZyZWUocmV0KTsKKysgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorKworKyAgLyogUHJldmVudCB0aGUgQkZEIGNvcmUgZnJvbSBjcmVhdGluZyBib2d1cyBnb3RfZW50cnkgcG9pbnRlcnMgKi8KKysgIHJldC0+cm9vdC5pbml0X2dvdF9yZWZjb3VudC5nbGlzdCA9IE5VTEw7CisrICByZXQtPnJvb3QuaW5pdF9wbHRfcmVmY291bnQuZ2xpc3QgPSBOVUxMOworKyAgcmV0LT5yb290LmluaXRfZ290X29mZnNldC5nbGlzdCA9IE5VTEw7CisrICByZXQtPnJvb3QuaW5pdF9wbHRfb2Zmc2V0LmdsaXN0ID0gTlVMTDsKKysKKysgIHJldHVybiAmcmV0LT5yb290LnJvb3Q7CisrfQorKworKworKy8qIEluaXRpYWwgYW5hbHlzaXMgYW5kIGNyZWF0aW9uIG9mIGR5bmFtaWMgc2VjdGlvbnMgYW5kIHN5bWJvbHMgKi8KKysKKytzdGF0aWMgYXNlY3Rpb24gKgorK2NyZWF0ZV9keW5hbWljX3NlY3Rpb24oYmZkICpkeW5vYmosIGNvbnN0IGNoYXIgKm5hbWUsIGZsYWd3b3JkIGZsYWdzLAorKwkJICAgICAgIHVuc2lnbmVkIGludCBhbGlnbl9wb3dlcik7Cisrc3RhdGljIHN0cnVjdCBlbGZfbGlua19oYXNoX2VudHJ5ICoKKytjcmVhdGVfZHluYW1pY19zeW1ib2woYmZkICpkeW5vYmosIHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvLAorKwkJICAgICAgY29uc3QgY2hhciAqbmFtZSwgYXNlY3Rpb24gKnNlYywKKysJCSAgICAgIGJmZF92bWEgb2Zmc2V0KTsKKytzdGF0aWMgYmZkX2Jvb2xlYW4KKythdnIzMl9lbGZfY3JlYXRlX2dvdF9zZWN0aW9uIChiZmQgKmR5bm9iaiwgc3RydWN0IGJmZF9saW5rX2luZm8gKmluZm8pOworK3N0YXRpYyBiZmRfYm9vbGVhbgorK2F2cjMyX2VsZl9jcmVhdGVfZHluYW1pY19zZWN0aW9ucyAoYmZkICpkeW5vYmosIHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvKTsKKytzdGF0aWMgYmZkX2Jvb2xlYW4KKythdnIzMl9jaGVja19yZWxvY3MgKGJmZCAqYWJmZCwgc3RydWN0IGJmZF9saW5rX2luZm8gKmluZm8sIGFzZWN0aW9uICpzZWMsCisrCQkgICAgY29uc3QgRWxmX0ludGVybmFsX1JlbGEgKnJlbG9jcyk7Cisrc3RhdGljIGJmZF9ib29sZWFuCisrYXZyMzJfZWxmX2FkanVzdF9keW5hbWljX3N5bWJvbChzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqaW5mbywKKysJCQkJc3RydWN0IGVsZl9saW5rX2hhc2hfZW50cnkgKmgpOworKworK3N0YXRpYyBhc2VjdGlvbiAqCisrY3JlYXRlX2R5bmFtaWNfc2VjdGlvbihiZmQgKmR5bm9iaiwgY29uc3QgY2hhciAqbmFtZSwgZmxhZ3dvcmQgZmxhZ3MsCisrCQkgICAgICAgdW5zaWduZWQgaW50IGFsaWduX3Bvd2VyKQorK3sKKysgIGFzZWN0aW9uICpzZWM7CisrCisrICBzZWMgPSBiZmRfbWFrZV9zZWN0aW9uKGR5bm9iaiwgbmFtZSk7CisrICBpZiAoIXNlYworKyAgICAgIHx8ICFiZmRfc2V0X3NlY3Rpb25fZmxhZ3MoZHlub2JqLCBzZWMsIGZsYWdzKQorKyAgICAgIHx8ICFiZmRfc2V0X3NlY3Rpb25fYWxpZ25tZW50KGR5bm9iaiwgc2VjLCBhbGlnbl9wb3dlcikpCisrICAgIHJldHVybiBOVUxMOworKworKyAgcmV0dXJuIHNlYzsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBlbGZfbGlua19oYXNoX2VudHJ5ICoKKytjcmVhdGVfZHluYW1pY19zeW1ib2woYmZkICpkeW5vYmosIHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvLAorKwkJICAgICAgY29uc3QgY2hhciAqbmFtZSwgYXNlY3Rpb24gKnNlYywKKysJCSAgICAgIGJmZF92bWEgb2Zmc2V0KQorK3sKKysgIHN0cnVjdCBiZmRfbGlua19oYXNoX2VudHJ5ICpiaCA9IE5VTEw7CisrICBzdHJ1Y3QgZWxmX2xpbmtfaGFzaF9lbnRyeSAqaDsKKysgIGNvbnN0IHN0cnVjdCBlbGZfYmFja2VuZF9kYXRhICpiZWQgPSBnZXRfZWxmX2JhY2tlbmRfZGF0YSAoZHlub2JqKTsKKysKKysgIGlmICghKF9iZmRfZ2VuZXJpY19saW5rX2FkZF9vbmVfc3ltYm9sCisrCShpbmZvLCBkeW5vYmosIG5hbWUsIEJTRl9HTE9CQUwsIHNlYywgb2Zmc2V0LCBOVUxMLCBGQUxTRSwKKysJIGJlZC0+Y29sbGVjdCwgJmJoKSkpCisrICAgIHJldHVybiBOVUxMOworKworKyAgaCA9IChzdHJ1Y3QgZWxmX2xpbmtfaGFzaF9lbnRyeSAqKWJoOworKyAgaC0+ZGVmX3JlZ3VsYXIgPSAxOworKyAgaC0+dHlwZSA9IFNUVF9PQkpFQ1Q7CisrICBoLT5vdGhlciA9IFNUVl9ISURERU47CisrCisrICByZXR1cm4gaDsKKyt9CisrCisrc3RhdGljIGJmZF9ib29sZWFuCisrYXZyMzJfZWxmX2NyZWF0ZV9nb3Rfc2VjdGlvbiAoYmZkICpkeW5vYmosIHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvKQorK3sKKysgIHN0cnVjdCBlbGZfYXZyMzJfbGlua19oYXNoX3RhYmxlICpodGFiOworKyAgZmxhZ3dvcmQgZmxhZ3M7CisrICBjb25zdCBzdHJ1Y3QgZWxmX2JhY2tlbmRfZGF0YSAqYmVkID0gZ2V0X2VsZl9iYWNrZW5kX2RhdGEgKGR5bm9iaik7CisrCisrICBodGFiID0gYXZyMzJfZWxmX2hhc2hfdGFibGUoaW5mbyk7CisrICBmbGFncyA9IGJlZC0+ZHluYW1pY19zZWNfZmxhZ3M7CisrCisrICBpZiAoaHRhYi0+c2dvdCkKKysgICAgcmV0dXJuIFRSVUU7CisrCisrICBodGFiLT5zZ290ID0gY3JlYXRlX2R5bmFtaWNfc2VjdGlvbihkeW5vYmosICIuZ290IiwgZmxhZ3MsIDIpOworKyAgaWYgKCFodGFiLT5zcmVsZ290KQorKyAgICBodGFiLT5zcmVsZ290ID0gY3JlYXRlX2R5bmFtaWNfc2VjdGlvbihkeW5vYmosICIucmVsYS5nb3QiLAorKwkJCQkJICAgZmxhZ3MgfCBTRUNfUkVBRE9OTFksIDIpOworKworKyAgaWYgKCFodGFiLT5zZ290IHx8ICFodGFiLT5zcmVsZ290KQorKyAgICByZXR1cm4gRkFMU0U7CisrCisrICBodGFiLT5yb290Lmhnb3QgPSBjcmVhdGVfZHluYW1pY19zeW1ib2woZHlub2JqLCBpbmZvLCAiX0dMT0JBTF9PRkZTRVRfVEFCTEVfIiwKKysJCQkJCSAgaHRhYi0+c2dvdCwgMCk7CisrICBpZiAoIWh0YWItPnJvb3QuaGdvdCkKKysgICAgcmV0dXJuIEZBTFNFOworKworKyAgLyogTWFrZSByb29tIGZvciB0aGUgR09UIGhlYWRlciAqLworKyAgaHRhYi0+c2dvdC0+c2l6ZSArPSBiZWQtPmdvdF9oZWFkZXJfc2l6ZTsKKysKKysgIHJldHVybiBUUlVFOworK30KKysKKysvKiAoMSkgQ3JlYXRlIGFsbCBkeW5hbWljIChpLmUuIGxpbmtlciBnZW5lcmF0ZWQpIHNlY3Rpb25zIHRoYXQgd2UgbWF5CisrICAgbmVlZCBkdXJpbmcgdGhlIGxpbmsgKi8KKysKKytzdGF0aWMgYmZkX2Jvb2xlYW4KKythdnIzMl9lbGZfY3JlYXRlX2R5bmFtaWNfc2VjdGlvbnMgKGJmZCAqZHlub2JqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqaW5mbykKKyt7CisrICBzdHJ1Y3QgZWxmX2F2cjMyX2xpbmtfaGFzaF90YWJsZSAqaHRhYjsKKysgIGZsYWd3b3JkIGZsYWdzOworKyAgY29uc3Qgc3RydWN0IGVsZl9iYWNrZW5kX2RhdGEgKmJlZCA9IGdldF9lbGZfYmFja2VuZF9kYXRhIChkeW5vYmopOworKworKyAgcHJfZGVidWcoIigxKSBjcmVhdGUgZHluYW1pYyBzZWN0aW9uc1xuIik7CisrCisrICBodGFiID0gYXZyMzJfZWxmX2hhc2hfdGFibGUoaW5mbyk7CisrICBmbGFncyA9IGJlZC0+ZHluYW1pY19zZWNfZmxhZ3M7CisrCisrICBpZiAoIWF2cjMyX2VsZl9jcmVhdGVfZ290X3NlY3Rpb24gKGR5bm9iaiwgaW5mbykpCisrICAgIHJldHVybiBGQUxTRTsKKysKKysgIGlmICghaHRhYi0+c3N0dWIpCisrICAgIGh0YWItPnNzdHViID0gY3JlYXRlX2R5bmFtaWNfc2VjdGlvbihkeW5vYmosICIuc3R1YiIsCisrCQkJCQkgZmxhZ3MgfCBTRUNfUkVBRE9OTFkgfCBTRUNfQ09ERSwgMik7CisrCisrICBpZiAoIWh0YWItPnNzdHViKQorKyAgICByZXR1cm4gRkFMU0U7CisrCisrICByZXR1cm4gVFJVRTsKKyt9CisrCisrLyogKDIpIEdvIHRocm91Z2ggYWxsIHRoZSByZWxvY3MgYW5kIGNvdW50IGFueSBwb3RlbnRpYWwgR09ULSBvcgorKyAgIFBMVC1yZWZlcmVuY2VzIHRvIGVhY2ggc3ltYm9sICovCisrCisrc3RhdGljIGJmZF9ib29sZWFuCisrYXZyMzJfY2hlY2tfcmVsb2NzIChiZmQgKmFiZmQsIHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvLCBhc2VjdGlvbiAqc2VjLAorKwkJICAgIGNvbnN0IEVsZl9JbnRlcm5hbF9SZWxhICpyZWxvY3MpCisreworKyAgRWxmX0ludGVybmFsX1NoZHIgKnN5bXRhYl9oZHI7CisrICBzdHJ1Y3QgZWxmX2F2cjMyX2xpbmtfaGFzaF90YWJsZSAqaHRhYjsKKysgIHN0cnVjdCBlbGZfbGlua19oYXNoX2VudHJ5ICoqc3ltX2hhc2hlczsKKysgIGNvbnN0IEVsZl9JbnRlcm5hbF9SZWxhICpyZWwsICpyZWxfZW5kOworKyAgc3RydWN0IGdvdF9lbnRyeSAqKmxvY2FsX2dvdF9lbnRzOworKyAgc3RydWN0IGdvdF9lbnRyeSAqZ290OworKyAgY29uc3Qgc3RydWN0IGVsZl9iYWNrZW5kX2RhdGEgKmJlZCA9IGdldF9lbGZfYmFja2VuZF9kYXRhIChhYmZkKTsKKysgIGFzZWN0aW9uICpzZ290OworKyAgYmZkICpkeW5vYmo7CisrCisrICBwcl9kZWJ1ZygiKDIpIGNoZWNrIHJlbG9jcyBmb3IgJXM6PCVzPiAoc2l6ZSAweCVseClcbiIsCisrCSAgIGFiZmQtPmZpbGVuYW1lLCBzZWMtPm5hbWUsIHNlYy0+c2l6ZSk7CisrCisrICBpZiAoaW5mby0+cmVsb2NhdGFibGUpCisrICAgIHJldHVybiBUUlVFOworKworKyAgZHlub2JqID0gZWxmX2hhc2hfdGFibGUoaW5mbyktPmR5bm9iajsKKysgIHN5bXRhYl9oZHIgPSAmZWxmX3RkYXRhKGFiZmQpLT5zeW10YWJfaGRyOworKyAgc3ltX2hhc2hlcyA9IGVsZl9zeW1faGFzaGVzKGFiZmQpOworKyAgaHRhYiA9IGF2cjMyX2VsZl9oYXNoX3RhYmxlKGluZm8pOworKyAgbG9jYWxfZ290X2VudHMgPSBlbGZfbG9jYWxfZ290X2VudHMoYWJmZCk7CisrICBzZ290ID0gaHRhYi0+c2dvdDsKKysKKysgIHJlbF9lbmQgPSByZWxvY3MgKyBzZWMtPnJlbG9jX2NvdW50OworKyAgZm9yIChyZWwgPSByZWxvY3M7IHJlbCA8IHJlbF9lbmQ7IHJlbCsrKQorKyAgICB7CisrICAgICAgdW5zaWduZWQgbG9uZyByX3N5bW5keCwgcl90eXBlOworKyAgICAgIHN0cnVjdCBlbGZfYXZyMzJfbGlua19oYXNoX2VudHJ5ICpoOworKworKyAgICAgIHJfc3ltbmR4ID0gRUxGMzJfUl9TWU0ocmVsLT5yX2luZm8pOworKyAgICAgIHJfdHlwZSA9IEVMRjMyX1JfVFlQRShyZWwtPnJfaW5mbyk7CisrCisrICAgICAgLyogTG9jYWwgc3ltYm9scyB1c2UgbG9jYWxfZ290X2VudHMsIHdoaWxlIG90aGVycyBzdG9yZSB0aGUgc2FtZQorKwkgaW5mb3JtYXRpb24gaW4gdGhlIGhhc2ggZW50cnkgKi8KKysgICAgICBpZiAocl9zeW1uZHggPCBzeW10YWJfaGRyLT5zaF9pbmZvKQorKwl7CisrCSAgcHJfZGVidWcoIiAgKDJhKSBwcm9jZXNzaW5nIGxvY2FsIHN5bWJvbCAlbHVcbiIsIHJfc3ltbmR4KTsKKysJICBoID0gTlVMTDsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGggPSAoc3RydWN0IGVsZl9hdnIzMl9saW5rX2hhc2hfZW50cnkgKikKKysJICAgIHN5bV9oYXNoZXNbcl9zeW1uZHggLSBzeW10YWJfaGRyLT5zaF9pbmZvXTsKKysJICB3aGlsZSAoaC0+cm9vdC50eXBlID09IGJmZF9saW5rX2hhc2hfaW5kaXJlY3QKKysJCSB8fCBoLT5yb290LnR5cGUgPT0gYmZkX2xpbmtfaGFzaF93YXJuaW5nKQorKwkgICAgaCA9IChzdHJ1Y3QgZWxmX2F2cjMyX2xpbmtfaGFzaF9lbnRyeSAqKWgtPnJvb3Qucm9vdC51LmkubGluazsKKysJICBwcl9kZWJ1ZygiICAoMmEpIHByb2Nlc3Npbmcgc3ltYm9sICVzXG4iLCBoLT5yb290LnJvb3Qucm9vdC5zdHJpbmcpOworKwl9CisrCisrICAgICAgLyogU29tZSByZWxvY3MgcmVxdWlyZSBzcGVjaWFsIHNlY3Rpb25zIHRvIGJlIGNyZWF0ZWQuICAqLworKyAgICAgIHN3aXRjaCAocl90eXBlKQorKwl7CisrCWNhc2UgUl9BVlIzMl9HT1QzMjoKKysJY2FzZSBSX0FWUjMyX0dPVDE2OgorKwljYXNlIFJfQVZSMzJfR09UODoKKysJY2FzZSBSX0FWUjMyX0dPVDIxUzoKKysJY2FzZSBSX0FWUjMyX0dPVDE4U1c6CisrCWNhc2UgUl9BVlIzMl9HT1QxNlM6CisrCWNhc2UgUl9BVlIzMl9HT1Q3VVc6CisrCWNhc2UgUl9BVlIzMl9MREFfR09UOgorKwljYXNlIFJfQVZSMzJfR09UQ0FMTDoKKysJICBpZiAocmVsLT5yX2FkZGVuZCkKKysJICAgIHsKKysJICAgICAgaWYgKGluZm8tPmNhbGxiYWNrcy0+cmVsb2NfZGFuZ2Vyb3VzCisrCQkgIChpbmZvLCBfKCJOb24temVybyBhZGRlbmQgb24gR09ULXJlbGF0aXZlIHJlbG9jYXRpb24iKSwKKysJCSAgIGFiZmQsIHNlYywgcmVsLT5yX29mZnNldCkgPT0gRkFMU0UpCisrCQlyZXR1cm4gRkFMU0U7CisrCSAgICB9CisrCSAgLyogZmFsbCB0aHJvdWdoICovCisrCWNhc2UgUl9BVlIzMl9HT1RQQzoKKysJICBpZiAoZHlub2JqID09IE5VTEwpCisrCSAgICBlbGZfaGFzaF90YWJsZShpbmZvKS0+ZHlub2JqID0gZHlub2JqID0gYWJmZDsKKysJICBpZiAoc2dvdCA9PSBOVUxMICYmICFhdnIzMl9lbGZfY3JlYXRlX2dvdF9zZWN0aW9uKGR5bm9iaiwgaW5mbykpCisrCSAgICByZXR1cm4gRkFMU0U7CisrCSAgYnJlYWs7CisrCWNhc2UgUl9BVlIzMl8zMjoKKysJICAvKiBXZSBtYXkgbmVlZCB0byBjcmVhdGUgLnJlbGEuZHluIGxhdGVyIG9uLiAgKi8KKysJICBpZiAoZHlub2JqID09IE5VTEwKKysJICAgICAgJiYgKGluZm8tPnNoYXJlZCB8fCBoICE9IE5VTEwpCisrCSAgICAgICYmIChzZWMtPmZsYWdzICYgU0VDX0FMTE9DKSkKKysJICAgIGVsZl9oYXNoX3RhYmxlKGluZm8pLT5keW5vYmogPSBkeW5vYmogPSBhYmZkOworKwkgIGJyZWFrOworKwl9CisrCisrICAgICAgaWYgKGggIT0gTlVMTCAmJiByX3R5cGUgIT0gUl9BVlIzMl9HT1QxOFNXKQorKwloLT5ub19mbl9zdHViID0gVFJVRTsKKysKKysgICAgICBzd2l0Y2ggKHJfdHlwZSkKKysJeworKwljYXNlIFJfQVZSMzJfR09UMzI6CisrCWNhc2UgUl9BVlIzMl9HT1QxNjoKKysJY2FzZSBSX0FWUjMyX0dPVDg6CisrCWNhc2UgUl9BVlIzMl9HT1QyMVM6CisrCWNhc2UgUl9BVlIzMl9HT1QxOFNXOgorKwljYXNlIFJfQVZSMzJfR09UMTZTOgorKwljYXNlIFJfQVZSMzJfR09UN1VXOgorKwljYXNlIFJfQVZSMzJfTERBX0dPVDoKKysJY2FzZSBSX0FWUjMyX0dPVENBTEw6CisrCSAgaWYgKGggIT0gTlVMTCkKKysJICAgIHsKKysJICAgICAgZ290ID0gaC0+cm9vdC5nb3QuZ2xpc3Q7CisrCSAgICAgIGlmICghZ290KQorKwkJeworKwkJICBnb3QgPSBiZmRfemFsbG9jKGFiZmQsIHNpemVvZihzdHJ1Y3QgZ290X2VudHJ5KSk7CisrCQkgIGlmICghZ290KQorKwkJICAgIHJldHVybiBGQUxTRTsKKysJCSAgaC0+cm9vdC5nb3QuZ2xpc3QgPSBnb3Q7CisrCQl9CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBpZiAoIWxvY2FsX2dvdF9lbnRzKQorKwkJeworKwkJICBiZmRfc2l6ZV90eXBlIHNpemU7CisrCQkgIGJmZF9zaXplX3R5cGUgaTsKKysJCSAgc3RydWN0IGdvdF9lbnRyeSAqdG1wX2VudHJ5OworKworKwkJICBzaXplID0gc3ltdGFiX2hkci0+c2hfaW5mbzsKKysJCSAgc2l6ZSAqPSBzaXplb2Yoc3RydWN0IGdvdF9lbnRyeSAqKSArIHNpemVvZihzdHJ1Y3QgZ290X2VudHJ5KTsKKysJCSAgbG9jYWxfZ290X2VudHMgPSBiZmRfemFsbG9jKGFiZmQsIHNpemUpOworKwkJICBpZiAoIWxvY2FsX2dvdF9lbnRzKQorKwkJICAgIHJldHVybiBGQUxTRTsKKysKKysJCSAgZWxmX2xvY2FsX2dvdF9lbnRzKGFiZmQpID0gbG9jYWxfZ290X2VudHM7CisrCisrCQkgIHRtcF9lbnRyeSA9IChzdHJ1Y3QgZ290X2VudHJ5ICopKGxvY2FsX2dvdF9lbnRzCisrCQkJCQkJICAgKyBzeW10YWJfaGRyLT5zaF9pbmZvKTsKKysJCSAgZm9yIChpID0gMDsgaSA8IHN5bXRhYl9oZHItPnNoX2luZm87IGkrKykKKysJCSAgICBsb2NhbF9nb3RfZW50c1tpXSA9ICZ0bXBfZW50cnlbaV07CisrCQl9CisrCisrCSAgICAgIGdvdCA9IGxvY2FsX2dvdF9lbnRzW3Jfc3ltbmR4XTsKKysJICAgIH0KKysKKysJICBnb3QtPnJlZmNvdW50Kys7CisrCSAgaWYgKGdvdC0+cmVmY291bnQgPiBodGFiLT5ucl9nb3RfaG9sZXMpCisrCSAgICBodGFiLT5ucl9nb3RfaG9sZXMgPSBnb3QtPnJlZmNvdW50OworKwkgIGJyZWFrOworKworKwljYXNlIFJfQVZSMzJfMzI6CisrCSAgaWYgKChpbmZvLT5zaGFyZWQgfHwgaCAhPSBOVUxMKQorKwkgICAgICAmJiAoc2VjLT5mbGFncyAmIFNFQ19BTExPQykpCisrCSAgICB7CisrCSAgICAgIGlmIChodGFiLT5zcmVsZ290ID09IE5VTEwpCisrCQl7CisrCQkgIGh0YWItPnNyZWxnb3QgPSBjcmVhdGVfZHluYW1pY19zZWN0aW9uKGR5bm9iaiwgIi5yZWxhLmdvdCIsCisrCQkJCQkJCSBiZWQtPmR5bmFtaWNfc2VjX2ZsYWdzCisrCQkJCQkJCSB8IFNFQ19SRUFET05MWSwgMik7CisrCQkgIGlmIChodGFiLT5zcmVsZ290ID09IE5VTEwpCisrCQkgICAgcmV0dXJuIEZBTFNFOworKwkJfQorKworKwkgICAgICBpZiAoc2VjLT5mbGFncyAmIFNFQ19SRUFET05MWQorKwkJICAmJiAhaC0+cmVhZG9ubHlfcmVsb2Nfc2VjKQorKwkJeworKwkJICBoLT5yZWFkb25seV9yZWxvY19zZWMgPSBzZWM7CisrCQkgIGgtPnJlYWRvbmx5X3JlbG9jX29mZnNldCA9IHJlbC0+cl9vZmZzZXQ7CisrCQl9CisrCisrCSAgICAgIGlmIChoICE9IE5VTEwpCisrCQl7CisrCQkgIHByX2RlYnVnKCJOb24tR09UIHJlZmVyZW5jZSB0byBzeW1ib2wgJXNcbiIsCisrCQkJICAgaC0+cm9vdC5yb290LnJvb3Quc3RyaW5nKTsKKysJCSAgaC0+cG9zc2libHlfZHluYW1pY19yZWxvY3MrKzsKKysJCX0KKysJICAgICAgZWxzZQorKwkJeworKwkJICBwcl9kZWJ1ZygiTm9uLUdPVCByZWZlcmVuY2UgdG8gbG9jYWwgc3ltYm9sICVsdVxuIiwKKysJCQkgICByX3N5bW5keCk7CisrCQkgIGh0YWItPmxvY2FsX2R5bmFtaWNfcmVsb2NzKys7CisrCQl9CisrCSAgICB9CisrCisrCSAgYnJlYWs7CisrCisrCSAgLyogVE9ETzogR05VX1ZUSU5IRVJJVCBhbmQgR05VX1ZURU5UUlkgKi8KKysJfQorKyAgICB9CisrCisrICByZXR1cm4gVFJVRTsKKyt9CisrCisrLyogKDMpIEFkanVzdCBhIHN5bWJvbCBkZWZpbmVkIGJ5IGEgZHluYW1pYyBvYmplY3QgYW5kIHJlZmVyZW5jZWQgYnkgYQorKyAgIHJlZ3VsYXIgb2JqZWN0LiAgVGhlIGN1cnJlbnQgZGVmaW5pdGlvbiBpcyBpbiBzb21lIHNlY3Rpb24gb2YgdGhlCisrICAgZHluYW1pYyBvYmplY3QsIGJ1dCB3ZSdyZSBub3QgaW5jbHVkaW5nIHRob3NlIHNlY3Rpb25zLiAgV2UgaGF2ZSB0bworKyAgIGNoYW5nZSB0aGUgZGVmaW5pdGlvbiB0byBzb21ldGhpbmcgdGhlIHJlc3Qgb2YgdGhlIGxpbmsgY2FuCisrICAgdW5kZXJzdGFuZC4gICovCisrCisrc3RhdGljIGJmZF9ib29sZWFuCisrYXZyMzJfZWxmX2FkanVzdF9keW5hbWljX3N5bWJvbChzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqaW5mbywKKysJCQkJc3RydWN0IGVsZl9saW5rX2hhc2hfZW50cnkgKmgpCisreworKyAgc3RydWN0IGVsZl9hdnIzMl9saW5rX2hhc2hfdGFibGUgKmh0YWI7CisrICBzdHJ1Y3QgZWxmX2F2cjMyX2xpbmtfaGFzaF9lbnRyeSAqaGF2cjsKKysgIGJmZCAqZHlub2JqOworKworKyAgcHJfZGVidWcoIigzKSBhZGp1c3QgZHluYW1pYyBzeW1ib2wgJXNcbiIsIGgtPnJvb3Qucm9vdC5zdHJpbmcpOworKworKyAgaHRhYiA9IGF2cjMyX2VsZl9oYXNoX3RhYmxlKGluZm8pOworKyAgaGF2ciA9IChzdHJ1Y3QgZWxmX2F2cjMyX2xpbmtfaGFzaF9lbnRyeSAqKWg7CisrICBkeW5vYmogPSBlbGZfaGFzaF90YWJsZShpbmZvKS0+ZHlub2JqOworKworKyAgLyogTWFrZSBzdXJlIHdlIGtub3cgd2hhdCBpcyBnb2luZyBvbiBoZXJlLiAgKi8KKysgIEJGRF9BU1NFUlQgKGR5bm9iaiAhPSBOVUxMCisrCSAgICAgICYmIChoLT51LndlYWtkZWYgIT0gTlVMTAorKwkJICB8fCAoaC0+ZGVmX2R5bmFtaWMKKysJCSAgICAgICYmIGgtPnJlZl9yZWd1bGFyCisrCQkgICAgICAmJiAhaC0+ZGVmX3JlZ3VsYXIpKSk7CisrCisrICAvKiBXZSBkb24ndCB3YW50IGR5bmFtaWMgcmVsb2NhdGlvbnMgaW4gcmVhZC1vbmx5IHNlY3Rpb25zLiAqLworKyAgaWYgKGhhdnItPnJlYWRvbmx5X3JlbG9jX3NlYykKKysgICAgeworKyAgICAgIGlmIChpbmZvLT5jYWxsYmFja3MtPnJlbG9jX2Rhbmdlcm91cworKwkgIChpbmZvLCBfKCJkeW5hbWljIHJlbG9jYXRpb24gaW4gcmVhZC1vbmx5IHNlY3Rpb24iKSwKKysJICAgaGF2ci0+cmVhZG9ubHlfcmVsb2Nfc2VjLT5vd25lciwgaGF2ci0+cmVhZG9ubHlfcmVsb2Nfc2VjLAorKwkgICBoYXZyLT5yZWFkb25seV9yZWxvY19vZmZzZXQpID09IEZBTFNFKQorKwlyZXR1cm4gRkFMU0U7CisrICAgIH0KKysKKysgIC8qIElmIHRoaXMgaXMgYSBmdW5jdGlvbiwgY3JlYXRlIGEgc3R1YiBpZiBwb3NzaWJsZSBhbmQgc2V0IHRoZQorKyAgICAgc3ltYm9sIHRvIHRoZSBzdHViIGxvY2F0aW9uLiAgKi8KKysgIGlmICgwICYmICFoYXZyLT5ub19mbl9zdHViKQorKyAgICB7CisrICAgICAgaWYgKCFoLT5kZWZfcmVndWxhcikKKysJeworKwkgIGFzZWN0aW9uICpzID0gaHRhYi0+c3N0dWI7CisrCisrCSAgQkZEX0FTU0VSVChzICE9IE5VTEwpOworKworKwkgIGgtPnJvb3QudS5kZWYuc2VjdGlvbiA9IHM7CisrCSAgaC0+cm9vdC51LmRlZi52YWx1ZSA9IHMtPnNpemU7CisrCSAgaC0+cGx0Lm9mZnNldCA9IHMtPnNpemU7CisrCSAgcy0+c2l6ZSArPSBBVlIzMl9GVU5DVElPTl9TVFVCX1NJWkU7CisrCisrCSAgcmV0dXJuIFRSVUU7CisrCX0KKysgICAgfQorKyAgZWxzZSBpZiAoaC0+dHlwZSA9PSBTVFRfRlVOQykKKysgICAgeworKyAgICAgIC8qIFRoaXMgd2lsbCBzZXQgdGhlIGVudHJ5IGZvciB0aGlzIHN5bWJvbCBpbiB0aGUgR09UIHRvIDAsIGFuZAorKwkgdGhlIGR5bmFtaWMgbGlua2VyIHdpbGwgdGFrZSBjYXJlIG9mIHRoaXMuICovCisrICAgICAgaC0+cm9vdC51LmRlZi52YWx1ZSA9IDA7CisrICAgICAgcmV0dXJuIFRSVUU7CisrICAgIH0KKysKKysgIC8qIElmIHRoaXMgaXMgYSB3ZWFrIHN5bWJvbCwgYW5kIHRoZXJlIGlzIGEgcmVhbCBkZWZpbml0aW9uLCB0aGUKKysgICAgIHByb2Nlc3NvciBpbmRlcGVuZGVudCBjb2RlIHdpbGwgaGF2ZSBhcnJhbmdlZCBmb3IgdXMgdG8gc2VlIHRoZQorKyAgICAgcmVhbCBkZWZpbml0aW9uIGZpcnN0LCBhbmQgd2UgY2FuIGp1c3QgdXNlIHRoZSBzYW1lIHZhbHVlLiAgKi8KKysgIGlmIChoLT51LndlYWtkZWYgIT0gTlVMTCkKKysgICAgeworKyAgICAgIEJGRF9BU1NFUlQoaC0+dS53ZWFrZGVmLT5yb290LnR5cGUgPT0gYmZkX2xpbmtfaGFzaF9kZWZpbmVkCisrCQkgfHwgaC0+dS53ZWFrZGVmLT5yb290LnR5cGUgPT0gYmZkX2xpbmtfaGFzaF9kZWZ3ZWFrKTsKKysgICAgICBoLT5yb290LnUuZGVmLnNlY3Rpb24gPSBoLT51LndlYWtkZWYtPnJvb3QudS5kZWYuc2VjdGlvbjsKKysgICAgICBoLT5yb290LnUuZGVmLnZhbHVlID0gaC0+dS53ZWFrZGVmLT5yb290LnUuZGVmLnZhbHVlOworKyAgICAgIHJldHVybiBUUlVFOworKyAgICB9CisrCisrICAvKiBUaGlzIGlzIGEgcmVmZXJlbmNlIHRvIGEgc3ltYm9sIGRlZmluZWQgYnkgYSBkeW5hbWljIG9iamVjdCB3aGljaAorKyAgICAgaXMgbm90IGEgZnVuY3Rpb24uICAqLworKworKyAgcmV0dXJuIFRSVUU7CisrfQorKworKworKy8qIEdhcmJhZ2UtY29sbGVjdGlvbiBvZiB1bnVzZWQgc2VjdGlvbnMgKi8KKysKKytzdGF0aWMgYXNlY3Rpb24gKgorK2F2cjMyX2VsZl9nY19tYXJrX2hvb2soYXNlY3Rpb24gKnNlYywKKysJCSAgICAgICBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqaW5mbyBBVFRSSUJVVEVfVU5VU0VELAorKwkJICAgICAgIEVsZl9JbnRlcm5hbF9SZWxhICpyZWwsCisrCQkgICAgICAgc3RydWN0IGVsZl9saW5rX2hhc2hfZW50cnkgKmgsCisrCQkgICAgICAgRWxmX0ludGVybmFsX1N5bSAqc3ltKQorK3sKKysgIGlmIChoKQorKyAgICB7CisrICAgICAgc3dpdGNoIChFTEYzMl9SX1RZUEUocmVsLT5yX2luZm8pKQorKwl7CisrCSAgLyogVE9ETzogVlRJTkhFUklUL1ZURU5UUlkgKi8KKysJZGVmYXVsdDoKKysJICBzd2l0Y2ggKGgtPnJvb3QudHlwZSkKKysJICAgIHsKKysJICAgIGNhc2UgYmZkX2xpbmtfaGFzaF9kZWZpbmVkOgorKwkgICAgY2FzZSBiZmRfbGlua19oYXNoX2RlZndlYWs6CisrCSAgICAgIHJldHVybiBoLT5yb290LnUuZGVmLnNlY3Rpb247CisrCisrCSAgICBjYXNlIGJmZF9saW5rX2hhc2hfY29tbW9uOgorKwkgICAgICByZXR1cm4gaC0+cm9vdC51LmMucC0+c2VjdGlvbjsKKysKKysJICAgIGRlZmF1bHQ6CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKwl9CisrICAgIH0KKysgIGVsc2UKKysgICAgcmV0dXJuIGJmZF9zZWN0aW9uX2Zyb21fZWxmX2luZGV4KHNlYy0+b3duZXIsIHN5bS0+c3Rfc2huZHgpOworKworKyAgcmV0dXJuIE5VTEw7CisrfQorKworKy8qIFVwZGF0ZSB0aGUgR09UIGVudHJ5IHJlZmVyZW5jZSBjb3VudHMgZm9yIHRoZSBzZWN0aW9uIGJlaW5nIHJlbW92ZWQuICovCisrc3RhdGljIGJmZF9ib29sZWFuCisrYXZyMzJfZWxmX2djX3N3ZWVwX2hvb2soYmZkICphYmZkLAorKwkJCXN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvIEFUVFJJQlVURV9VTlVTRUQsCisrCQkJYXNlY3Rpb24gKnNlYywKKysJCQljb25zdCBFbGZfSW50ZXJuYWxfUmVsYSAqcmVsb2NzKQorK3sKKysgIEVsZl9JbnRlcm5hbF9TaGRyICpzeW10YWJfaGRyOworKyAgc3RydWN0IGVsZl9hdnIzMl9saW5rX2hhc2hfZW50cnkgKipzeW1faGFzaGVzOworKyAgc3RydWN0IGdvdF9lbnRyeSAqKmxvY2FsX2dvdF9lbnRzOworKyAgY29uc3QgRWxmX0ludGVybmFsX1JlbGEgKnJlbCwgKnJlbGVuZDsKKysKKysgIGlmICghKHNlYy0+ZmxhZ3MgJiBTRUNfQUxMT0MpKQorKyAgICByZXR1cm4gVFJVRTsKKysKKysgIHN5bXRhYl9oZHIgPSAmZWxmX3RkYXRhKGFiZmQpLT5zeW10YWJfaGRyOworKyAgc3ltX2hhc2hlcyA9IChzdHJ1Y3QgZWxmX2F2cjMyX2xpbmtfaGFzaF9lbnRyeSAqKillbGZfc3ltX2hhc2hlcyhhYmZkKTsKKysgIGxvY2FsX2dvdF9lbnRzID0gZWxmX2xvY2FsX2dvdF9lbnRzKGFiZmQpOworKworKyAgcmVsZW5kID0gcmVsb2NzICsgc2VjLT5yZWxvY19jb3VudDsKKysgIGZvciAocmVsID0gcmVsb2NzOyByZWwgPCByZWxlbmQ7IHJlbCsrKQorKyAgICB7CisrICAgICAgdW5zaWduZWQgbG9uZyByX3N5bW5keDsKKysgICAgICB1bnNpZ25lZCBpbnQgcl90eXBlOworKyAgICAgIHN0cnVjdCBlbGZfYXZyMzJfbGlua19oYXNoX2VudHJ5ICpoID0gTlVMTDsKKysKKysgICAgICByX3N5bW5keCA9IEVMRjMyX1JfU1lNKHJlbC0+cl9pbmZvKTsKKysgICAgICBpZiAocl9zeW1uZHggPj0gc3ltdGFiX2hkci0+c2hfaW5mbykKKysJeworKwkgIGggPSBzeW1faGFzaGVzW3Jfc3ltbmR4IC0gc3ltdGFiX2hkci0+c2hfaW5mb107CisrCSAgd2hpbGUgKGgtPnJvb3Qucm9vdC50eXBlID09IGJmZF9saW5rX2hhc2hfaW5kaXJlY3QKKysJCSB8fCBoLT5yb290LnJvb3QudHlwZSA9PSBiZmRfbGlua19oYXNoX3dhcm5pbmcpCisrCSAgICBoID0gKHN0cnVjdCBlbGZfYXZyMzJfbGlua19oYXNoX2VudHJ5ICopaC0+cm9vdC5yb290LnUuaS5saW5rOworKwl9CisrCisrICAgICAgcl90eXBlID0gRUxGMzJfUl9UWVBFKHJlbC0+cl9pbmZvKTsKKysKKysgICAgICBzd2l0Y2ggKHJfdHlwZSkKKysJeworKwljYXNlIFJfQVZSMzJfR09UMzI6CisrCWNhc2UgUl9BVlIzMl9HT1QxNjoKKysJY2FzZSBSX0FWUjMyX0dPVDg6CisrCWNhc2UgUl9BVlIzMl9HT1QyMVM6CisrCWNhc2UgUl9BVlIzMl9HT1QxOFNXOgorKwljYXNlIFJfQVZSMzJfR09UMTZTOgorKwljYXNlIFJfQVZSMzJfR09UN1VXOgorKwljYXNlIFJfQVZSMzJfTERBX0dPVDoKKysJY2FzZSBSX0FWUjMyX0dPVENBTEw6CisrCSAgaWYgKGgpCisrCSAgICBoLT5yb290LmdvdC5nbGlzdC0+cmVmY291bnQtLTsKKysJICBlbHNlCisrCSAgICBsb2NhbF9nb3RfZW50c1tyX3N5bW5keF0tPnJlZmNvdW50LS07CisrCSAgYnJlYWs7CisrCisrCWNhc2UgUl9BVlIzMl8zMjoKKysJICBpZiAoaW5mby0+c2hhcmVkIHx8IGgpCisrCSAgICB7CisrCSAgICAgIGlmIChoKQorKwkJaC0+cG9zc2libHlfZHluYW1pY19yZWxvY3MtLTsKKysJICAgICAgZWxzZQorKwkJYXZyMzJfZWxmX2hhc2hfdGFibGUoaW5mbyktPmxvY2FsX2R5bmFtaWNfcmVsb2NzLS07CisrCSAgICB9CisrCisrCWRlZmF1bHQ6CisrCSAgYnJlYWs7CisrCX0KKysgICAgfQorKworKyAgcmV0dXJuIFRSVUU7CisrfQorKworKy8qIFNpemluZyBhbmQgcmVmY291bnRpbmcgb2YgZHluYW1pYyBzZWN0aW9ucyAqLworKworK3N0YXRpYyB2b2lkCisraW5zZXJ0X2dvdF9lbnRyeShzdHJ1Y3QgZWxmX2F2cjMyX2xpbmtfaGFzaF90YWJsZSAqaHRhYiwgc3RydWN0IGdvdF9lbnRyeSAqZ290KTsKKytzdGF0aWMgdm9pZAorK3VucmVmX2dvdF9lbnRyeShzdHJ1Y3QgZWxmX2F2cjMyX2xpbmtfaGFzaF90YWJsZSAqaHRhYiwgc3RydWN0IGdvdF9lbnRyeSAqZ290KTsKKytzdGF0aWMgdm9pZAorK3JlZl9nb3RfZW50cnkoc3RydWN0IGVsZl9hdnIzMl9saW5rX2hhc2hfdGFibGUgKmh0YWIsIHN0cnVjdCBnb3RfZW50cnkgKmdvdCk7Cisrc3RhdGljIGJmZF9ib29sZWFuCisrYXNzaWduX2dvdF9vZmZzZXRzKHN0cnVjdCBlbGZfYXZyMzJfbGlua19oYXNoX3RhYmxlICpodGFiKTsKKytzdGF0aWMgYmZkX2Jvb2xlYW4KKythbGxvY2F0ZV9keW5yZWxvY3Moc3RydWN0IGVsZl9saW5rX2hhc2hfZW50cnkgKmgsIHZvaWQgKl9pbmZvKTsKKytzdGF0aWMgYmZkX2Jvb2xlYW4KKythdnIzMl9lbGZfc2l6ZV9keW5hbWljX3NlY3Rpb25zIChiZmQgKm91dHB1dF9iZmQsCisrCQkJCSBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqaW5mbyk7CisrCisrc3RhdGljIHZvaWQKKytpbnNlcnRfZ290X2VudHJ5KHN0cnVjdCBlbGZfYXZyMzJfbGlua19oYXNoX3RhYmxlICpodGFiLCBzdHJ1Y3QgZ290X2VudHJ5ICpnb3QpCisreworKyAgLyogQW55IGVudHJpZXMgd2l0aCBnb3RfcmVmY291bnQgPiBodGFiLT5ucl9nb3RfaG9sZXMgZW5kIHVwIGluIHRoZQorKyAgICogbGFzdCBwaWdlb25ob2xlIHdpdGhvdXQgYW55IHNvcnRpbmcuIFdlIGV4cGVjdCB0aGUgbnVtYmVyIG9mIHN1Y2gKKysgICAqIGVudHJpZXMgdG8gYmUgc21hbGwsIHNvIGl0IGlzIHZlcnkgdW5saWtlbHkgdG8gYWZmZWN0CisrICAgKiBwZXJmb3JtYW5jZS4gICovCisrICBpbnQgZW50cnkgPSBnb3QtPnJlZmNvdW50OworKworKyAgaWYgKGVudHJ5ID4gaHRhYi0+bnJfZ290X2hvbGVzKQorKyAgICBlbnRyeSA9IGh0YWItPm5yX2dvdF9ob2xlczsKKysKKysgIGdvdC0+cHByZXYgPSAmaHRhYi0+Z290X2hvbGVbZW50cnldOworKyAgZ290LT5uZXh0ID0gaHRhYi0+Z290X2hvbGVbZW50cnldOworKworKyAgaWYgKGdvdC0+bmV4dCkKKysgICAgZ290LT5uZXh0LT5wcHJldiA9ICZnb3QtPm5leHQ7CisrCisrICBodGFiLT5nb3RfaG9sZVtlbnRyeV0gPSBnb3Q7CisrfQorKworKy8qIERlY3JlbWVudCB0aGUgcmVmY291bnQgb2YgYSBHT1QgZW50cnkgYW5kIHVwZGF0ZSBpdHMgcG9zaXRpb24gaW4KKysgICB0aGUgcGlnZW9uaG9sZSBhcnJheS4gICovCisrc3RhdGljIHZvaWQKKyt1bnJlZl9nb3RfZW50cnkoc3RydWN0IGVsZl9hdnIzMl9saW5rX2hhc2hfdGFibGUgKmh0YWIsIHN0cnVjdCBnb3RfZW50cnkgKmdvdCkKKyt7CisrICBCRkRfQVNTRVJUKGdvdC0+cmVmY291bnQgPiAwKTsKKysKKysgIGlmIChnb3QtPm5leHQpCisrICAgIGdvdC0+bmV4dC0+cHByZXYgPSBnb3QtPnBwcmV2OworKworKyAgKihnb3QtPnBwcmV2KSA9IGdvdC0+bmV4dDsKKysgIGdvdC0+cmVmY291bnQtLTsKKysgIGluc2VydF9nb3RfZW50cnkoaHRhYiwgZ290KTsKKyt9CisrCisrc3RhdGljIHZvaWQKKytyZWZfZ290X2VudHJ5KHN0cnVjdCBlbGZfYXZyMzJfbGlua19oYXNoX3RhYmxlICpodGFiLCBzdHJ1Y3QgZ290X2VudHJ5ICpnb3QpCisreworKyAgaWYgKGdvdC0+bmV4dCkKKysgICAgZ290LT5uZXh0LT5wcHJldiA9IGdvdC0+cHByZXY7CisrCisrICAqKGdvdC0+cHByZXYpID0gZ290LT5uZXh0OworKyAgZ290LT5yZWZjb3VudCsrOworKyAgaW5zZXJ0X2dvdF9lbnRyeShodGFiLCBnb3QpOworKworKyAgQkZEX0FTU0VSVChnb3QtPnJlZmNvdW50ID4gMCk7CisrfQorKworKy8qIEFzc2lnbiBvZmZzZXRzIHRvIGFsbCBHT1QgZW50cmllcyB3ZSBpbnRlbmQgdG8ga2VlcC4gIFRoZSBlbnRyaWVzCisrICAgdGhhdCBhcmUgcmVmZXJlbmNlZCBtb3N0IG9mdGVuIGFyZSBwbGFjZWQgYXQgbG93IG9mZnNldHMgc28gdGhhdCB3ZQorKyAgIGNhbiB1c2UgY29tcGFjdCBpbnN0cnVjdGlvbnMgYXMgbXVjaCBhcyBwb3NzaWJsZS4KKysKKysgICBSZXR1cm5zIFRSVUUgaWYgYW55IG9mZnNldHMgb3IgdGhlIHRvdGFsIHNpemUgb2YgdGhlIEdPVCBjaGFuZ2VkLiAgKi8KKysKKytzdGF0aWMgYmZkX2Jvb2xlYW4KKythc3NpZ25fZ290X29mZnNldHMoc3RydWN0IGVsZl9hdnIzMl9saW5rX2hhc2hfdGFibGUgKmh0YWIpCisreworKyAgc3RydWN0IGdvdF9lbnRyeSAqZ290OworKyAgYmZkX3NpemVfdHlwZSBnb3Rfc2l6ZSA9IDA7CisrICBiZmRfYm9vbGVhbiBjaGFuZ2VkID0gRkFMU0U7CisrICBiZmRfc2lnbmVkX3ZtYSBvZmZzZXQ7CisrICBpbnQgaTsKKysKKysgIC8qIFRoZSBHT1QgaGVhZGVyIHByb3ZpZGVzIHRoZSBhZGRyZXNzIG9mIHRoZSBEWU5BTUlDIHNlZ21lbnQsIHNvCisrICAgICB3ZSBuZWVkIHRoYXQgZXZlbiBpZiB0aGUgR09UIGlzIG90aGVyd2lzZSBlbXB0eS4gICovCisrICBpZiAoaHRhYi0+cm9vdC5keW5hbWljX3NlY3Rpb25zX2NyZWF0ZWQpCisrICAgIGdvdF9zaXplID0gQVZSMzJfR09UX0hFQURFUl9TSVpFOworKworKyAgZm9yIChpID0gaHRhYi0+bnJfZ290X2hvbGVzOyBpID4gMDsgaS0tKQorKyAgICB7CisrICAgICAgZ290ID0gaHRhYi0+Z290X2hvbGVbaV07CisrICAgICAgd2hpbGUgKGdvdCkKKysJeworKwkgIGlmIChnb3QtPnJlZmNvdW50ID4gMCkKKysJICAgIHsKKysJICAgICAgb2Zmc2V0ID0gZ290X3NpemU7CisrCSAgICAgIGlmIChnb3QtPm9mZnNldCAhPSBvZmZzZXQpCisrCQl7CisrCQkgIFJEQkcoIkdPVCBvZmZzZXQgY2hhbmdlZDogJWxkIC0+ICVsZFxuIiwKKysJCSAgICAgICBnb3QtPm9mZnNldCwgb2Zmc2V0KTsKKysJCSAgY2hhbmdlZCA9IFRSVUU7CisrCQl9CisrCSAgICAgIGdvdC0+b2Zmc2V0ID0gb2Zmc2V0OworKwkgICAgICBnb3Rfc2l6ZSArPSA0OworKwkgICAgfQorKwkgIGdvdCA9IGdvdC0+bmV4dDsKKysJfQorKyAgICB9CisrCisrICBpZiAoaHRhYi0+c2dvdC0+c2l6ZSAhPSBnb3Rfc2l6ZSkKKysgICAgeworKyAgICAgIFJEQkcoIkdPVCBzaXplIGNoYW5nZWQ6ICVsdSAtPiAlbHVcbiIsIGh0YWItPnNnb3QtPnNpemUsCisrCSAgIGdvdF9zaXplKTsKKysgICAgICBjaGFuZ2VkID0gVFJVRTsKKysgICAgfQorKyAgaHRhYi0+c2dvdC0+c2l6ZSA9IGdvdF9zaXplOworKworKyAgUkRCRygiYXNzaWduX2dvdF9vZmZzZXRzOiB0b3RhbCBzaXplICVsdSAoJXMpXG4iLAorKyAgICAgICBnb3Rfc2l6ZSwgY2hhbmdlZCA/ICJjaGFuZ2VkIiA6ICJubyBjaGFuZ2UiKTsKKysKKysgIHJldHVybiBjaGFuZ2VkOworK30KKysKKytzdGF0aWMgYmZkX2Jvb2xlYW4KKythbGxvY2F0ZV9keW5yZWxvY3Moc3RydWN0IGVsZl9saW5rX2hhc2hfZW50cnkgKmgsIHZvaWQgKl9pbmZvKQorK3sKKysgIHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvID0gX2luZm87CisrICBzdHJ1Y3QgZWxmX2F2cjMyX2xpbmtfaGFzaF90YWJsZSAqaHRhYjsKKysgIHN0cnVjdCBlbGZfYXZyMzJfbGlua19oYXNoX2VudHJ5ICpoYXZyOworKyAgc3RydWN0IGdvdF9lbnRyeSAqZ290OworKworKyAgcHJfZGVidWcoIiAgKDRiKSBhbGxvY2F0ZV9keW5yZWxvY3M6ICVzXG4iLCBoLT5yb290LnJvb3Quc3RyaW5nKTsKKysKKysgIGlmIChoLT5yb290LnR5cGUgPT0gYmZkX2xpbmtfaGFzaF9pbmRpcmVjdCkKKysgICAgcmV0dXJuIFRSVUU7CisrCisrICBpZiAoaC0+cm9vdC50eXBlID09IGJmZF9saW5rX2hhc2hfd2FybmluZykKKysgICAgLyogV2hlbiB3YXJuaW5nIHN5bWJvbHMgYXJlIGNyZWF0ZWQsIHRoZXkgKipyZXBsYWNlKiogdGhlICJyZWFsIgorKyAgICAgICBlbnRyeSBpbiB0aGUgaGFzaCB0YWJsZSwgdGh1cyB3ZSBuZXZlciBnZXQgdG8gc2VlIHRoZSByZWFsCisrICAgICAgIHN5bWJvbCBpbiBhIGhhc2ggdHJhdmVyc2FsLiAgU28gbG9vayBhdCBpdCBub3cuICAqLworKyAgICBoID0gKHN0cnVjdCBlbGZfbGlua19oYXNoX2VudHJ5ICopIGgtPnJvb3QudS5pLmxpbms7CisrCisrICBodGFiID0gYXZyMzJfZWxmX2hhc2hfdGFibGUoaW5mbyk7CisrICBoYXZyID0gKHN0cnVjdCBlbGZfYXZyMzJfbGlua19oYXNoX2VudHJ5ICopaDsKKysKKysgIGdvdCA9IGgtPmdvdC5nbGlzdDsKKysKKysgIC8qIElmIGdvdCBpcyBOVUxMLCB0aGUgc3ltYm9sIGlzIG5ldmVyIHJlZmVyZW5jZWQgdGhyb3VnaCB0aGUgR09UICovCisrICBpZiAoZ290ICYmIGdvdC0+cmVmY291bnQgPiAwKQorKyAgICB7CisrICAgICAgaW5zZXJ0X2dvdF9lbnRyeShodGFiLCBnb3QpOworKworKyAgICAgIC8qIFNoYXJlZCBsaWJyYXJpZXMgbmVlZCByZWxvY3MgZm9yIGFsbCBHT1QgZW50cmllcyB1bmxlc3MgdGhlCisrCSBzeW1ib2wgaXMgZm9yY2VkIGxvY2FsIG9yIC1Cc3ltYm9saWMgaXMgdXNlZC4gIE90aGVycyBuZWVkCisrCSByZWxvY3MgZm9yIGV2ZXJ5dGhpbmcgdGhhdCBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBkZWZpbmVkIGluCisrCSBhIHJlZ3VsYXIgb2JqZWN0LiAgKi8KKysgICAgICBpZiAoKGluZm8tPnNoYXJlZAorKwkgICAmJiAhaW5mby0+c3ltYm9saWMKKysJICAgJiYgaC0+ZHluaW5keCAhPSAtMSkKKysJICB8fCAoaHRhYi0+cm9vdC5keW5hbWljX3NlY3Rpb25zX2NyZWF0ZWQKKysJICAgICAgJiYgaC0+ZGVmX2R5bmFtaWMKKysJICAgICAgJiYgIWgtPmRlZl9yZWd1bGFyKSkKKysJaHRhYi0+c3JlbGdvdC0+c2l6ZSArPSBzaXplb2YoRWxmMzJfRXh0ZXJuYWxfUmVsYSk7CisrICAgIH0KKysKKysgIGlmIChoYXZyLT5wb3NzaWJseV9keW5hbWljX3JlbG9jcworKyAgICAgICYmIChpbmZvLT5zaGFyZWQKKysJICB8fCAoZWxmX2hhc2hfdGFibGUoaW5mbyktPmR5bmFtaWNfc2VjdGlvbnNfY3JlYXRlZAorKwkgICAgICAmJiBoLT5kZWZfZHluYW1pYworKwkgICAgICAmJiAhaC0+ZGVmX3JlZ3VsYXIpKSkKKysgICAgeworKyAgICAgIHByX2RlYnVnKCJBbGxvY2F0aW5nICVkIGR5bmFtaWMgcmVsb2MgYWdhaW5zdCBzeW1ib2wgJXMuLi5cbiIsCisrCSAgICAgICBoYXZyLT5wb3NzaWJseV9keW5hbWljX3JlbG9jcywgaC0+cm9vdC5yb290LnN0cmluZyk7CisrICAgICAgaHRhYi0+c3JlbGdvdC0+c2l6ZSArPSAoaGF2ci0+cG9zc2libHlfZHluYW1pY19yZWxvY3MKKysJCQkgICAgICAqIHNpemVvZihFbGYzMl9FeHRlcm5hbF9SZWxhKSk7CisrICAgIH0KKysKKysgIHJldHVybiBUUlVFOworK30KKysKKysvKiAoNCkgQ2FsY3VsYXRlIHRoZSBzaXplcyBvZiB0aGUgbGlua2VyLWdlbmVyYXRlZCBzZWN0aW9ucyBhbmQKKysgICBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZW0uICAqLworKworK3N0YXRpYyBiZmRfYm9vbGVhbgorK2F2cjMyX2VsZl9zaXplX2R5bmFtaWNfc2VjdGlvbnMgKGJmZCAqb3V0cHV0X2JmZCwKKysJCQkJIHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvKQorK3sKKysgIHN0cnVjdCBlbGZfYXZyMzJfbGlua19oYXNoX3RhYmxlICpodGFiOworKyAgYmZkICpkeW5vYmo7CisrICBhc2VjdGlvbiAqczsKKysgIGJmZCAqaWJmZDsKKysgIGJmZF9ib29sZWFuIHJlbG9jczsKKysKKysgIHByX2RlYnVnKCIoNCkgc2l6ZSBkeW5hbWljIHNlY3Rpb25zXG4iKTsKKysKKysgIGh0YWIgPSBhdnIzMl9lbGZfaGFzaF90YWJsZShpbmZvKTsKKysgIGR5bm9iaiA9IGh0YWItPnJvb3QuZHlub2JqOworKyAgQkZEX0FTU0VSVChkeW5vYmogIT0gTlVMTCk7CisrCisrICBpZiAoaHRhYi0+cm9vdC5keW5hbWljX3NlY3Rpb25zX2NyZWF0ZWQpCisrICAgIHsKKysgICAgICAvKiBJbml0aWFsaXplIHRoZSBjb250ZW50cyBvZiB0aGUgLmludGVycCBzZWN0aW9uIHRvIHRoZSBuYW1lIG9mCisrCSB0aGUgZHluYW1pYyBsb2FkZXIgKi8KKysgICAgICBpZiAoaW5mby0+ZXhlY3V0YWJsZSkKKysJeworKwkgIHMgPSBiZmRfZ2V0X3NlY3Rpb25fYnlfbmFtZShkeW5vYmosICIuaW50ZXJwIik7CisrCSAgQkZEX0FTU0VSVChzICE9IE5VTEwpOworKwkgIHMtPnNpemUgPSBzaXplb2YoRUxGX0RZTkFNSUNfSU5URVJQUkVURVIpOworKwkgIHMtPmNvbnRlbnRzID0gKHVuc2lnbmVkIGNoYXIgKilFTEZfRFlOQU1JQ19JTlRFUlBSRVRFUjsKKysJfQorKyAgICB9CisrCisrICBpZiAoaHRhYi0+bnJfZ290X2hvbGVzID4gMCkKKysgICAgeworKyAgICAgIC8qIEFsbG9jYXRlIGhvbGVzIGZvciB0aGUgcGlnZW9uaG9sZSBzb3J0IGFsZ29yaXRobSAqLworKyAgICAgIHByX2RlYnVnKCJIaWdoZXN0IEdPVCByZWZjb3VudDogJWRcbiIsIGh0YWItPm5yX2dvdF9ob2xlcyk7CisrCisrICAgICAgLyogTGltaXQgdGhlIG1lbW9yeSB1c2FnZSBieSBjbGlwcGluZyB0aGUgbnVtYmVyIG9mIHBpZ2VvbmhvbGVzCisrICAgICAgICogYXQgYSBwcmVkZWZpbmVkIG1heGltdW0uIEFsbCBlbnRyaWVzIHdpdGggYSBoaWdoZXIgcmVmY291bnQKKysgICAgICAgKiB3aWxsIGVuZCB1cCBpbiB0aGUgbGFzdCBwaWdlb25ob2xlLiAgKi8KKysgICAgaWYgKGh0YWItPm5yX2dvdF9ob2xlcyA+PSBNQVhfTlJfR09UX0hPTEVTKQorKyAgICB7CisrICAgICAgICBodGFiLT5ucl9nb3RfaG9sZXMgPSBNQVhfTlJfR09UX0hPTEVTIC0gMTsKKysKKysgICAgICAgIHByX2RlYnVnKCJMaW1pdGluZyBtYXhpbXVtIG51bWJlciBvZiBHT1QgcGlnZW9uaG9sZXMgdG8gJXVcbiIsCisrICAgICAgICAgICAgICAgICAgICBodGFiLT5ucl9nb3RfaG9sZXMpOworKyAgICB9CisrICAgICAgaHRhYi0+Z290X2hvbGUgPSBiZmRfemFsbG9jKG91dHB1dF9iZmQsCisrCQkJCSAgc2l6ZW9mKHN0cnVjdCBnb3RfZW50cnkgKikKKysJCQkJICAqIChodGFiLT5ucl9nb3RfaG9sZXMgKyAxKSk7CisrICAgICAgaWYgKCFodGFiLT5nb3RfaG9sZSkKKysJcmV0dXJuIEZBTFNFOworKworKyAgICAgIC8qIFNldCB1cCAuZ290IG9mZnNldHMgZm9yIGxvY2FsIHN5bXMuICAqLworKyAgICAgIGZvciAoaWJmZCA9IGluZm8tPmlucHV0X2JmZHM7IGliZmQgIT0gTlVMTDsgaWJmZCA9IGliZmQtPmxpbmtfbmV4dCkKKysJeworKwkgIHN0cnVjdCBnb3RfZW50cnkgKipsb2NhbF9nb3Q7CisrCSAgc3RydWN0IGdvdF9lbnRyeSAqKmVuZF9sb2NhbF9nb3Q7CisrCSAgRWxmX0ludGVybmFsX1NoZHIgKnN5bXRhYl9oZHI7CisrCSAgYmZkX3NpemVfdHlwZSBsb2NzeW1jb3VudDsKKysKKysJICBwcl9kZWJ1ZygiICAoNGEpIHByb2Nlc3NpbmcgZmlsZSAlcy4uLlxuIiwgaWJmZC0+ZmlsZW5hbWUpOworKworKwkgIEJGRF9BU1NFUlQoYmZkX2dldF9mbGF2b3VyKGliZmQpID09IGJmZF90YXJnZXRfZWxmX2ZsYXZvdXIpOworKworKwkgIGxvY2FsX2dvdCA9IGVsZl9sb2NhbF9nb3RfZW50cyhpYmZkKTsKKysJICBpZiAoIWxvY2FsX2dvdCkKKysJICAgIGNvbnRpbnVlOworKworKwkgIHN5bXRhYl9oZHIgPSAmZWxmX3RkYXRhKGliZmQpLT5zeW10YWJfaGRyOworKwkgIGxvY3N5bWNvdW50ID0gc3ltdGFiX2hkci0+c2hfaW5mbzsKKysJICBlbmRfbG9jYWxfZ290ID0gbG9jYWxfZ290ICsgbG9jc3ltY291bnQ7CisrCisrCSAgZm9yICg7IGxvY2FsX2dvdCA8IGVuZF9sb2NhbF9nb3Q7ICsrbG9jYWxfZ290KQorKwkgICAgaW5zZXJ0X2dvdF9lbnRyeShodGFiLCAqbG9jYWxfZ290KTsKKysJfQorKyAgICB9CisrCisrICAvKiBBbGxvY2F0ZSBnbG9iYWwgc3ltIC5nb3QgZW50cmllcyBhbmQgc3BhY2UgZm9yIGdsb2JhbCBzeW0KKysgICAgIGR5bmFtaWMgcmVsb2NzICovCisrICBlbGZfbGlua19oYXNoX3RyYXZlcnNlKCZodGFiLT5yb290LCBhbGxvY2F0ZV9keW5yZWxvY3MsIGluZm8pOworKworKyAgLyogTm93IHRoYXQgd2UgaGF2ZSBzb3J0ZWQgdGhlIEdPVCBlbnRyaWVzLCB3ZSBhcmUgcmVhZHkgdG8KKysgICAgIGFzc2lnbiBvZmZzZXRzIGFuZCBkZXRlcm1pbmUgdGhlIGluaXRpYWwgc2l6ZSBvZiB0aGUgR09ULiAqLworKyAgaWYgKGh0YWItPnNnb3QpCisrICAgIGFzc2lnbl9nb3Rfb2Zmc2V0cyhodGFiKTsKKysKKysgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciBsb2NhbCBzeW0gZHluYW1pYyByZWxvY3MgKi8KKysgIEJGRF9BU1NFUlQoaHRhYi0+bG9jYWxfZHluYW1pY19yZWxvY3MgPT0gMCB8fCBpbmZvLT5zaGFyZWQpOworKyAgaWYgKGh0YWItPmxvY2FsX2R5bmFtaWNfcmVsb2NzKQorKyAgICBodGFiLT5zcmVsZ290LT5zaXplICs9IChodGFiLT5sb2NhbF9keW5hbWljX3JlbG9jcworKwkJCSAgICAqIHNpemVvZihFbGYzMl9FeHRlcm5hbF9SZWxhKSk7CisrCisrICAvKiBXZSBub3cgaGF2ZSBkZXRlcm1pbmVkIHRoZSBzaXplcyBvZiB0aGUgdmFyaW91cyBkeW5hbWljCisrICAgICBzZWN0aW9ucy4gQWxsb2NhdGUgbWVtb3J5IGZvciB0aGVtLiAqLworKyAgcmVsb2NzID0gRkFMU0U7CisrICBmb3IgKHMgPSBkeW5vYmotPnNlY3Rpb25zOyBzOyBzID0gcy0+bmV4dCkKKysgICAgeworKyAgICAgIGlmICgocy0+ZmxhZ3MgJiBTRUNfTElOS0VSX0NSRUFURUQpID09IDApCisrCWNvbnRpbnVlOworKworKyAgICAgIGlmIChzID09IGh0YWItPnNnb3QKKysJICB8fCBzID09IGh0YWItPnNzdHViKQorKwl7CisrCSAgLyogU3RyaXAgdGhpcyBzZWN0aW9uIGlmIHdlIGRvbid0IG5lZWQgaXQgKi8KKysJfQorKyAgICAgIGVsc2UgaWYgKHN0cm5jbXAgKGJmZF9nZXRfc2VjdGlvbl9uYW1lKGR5bm9iaiwgcyksICIucmVsYSIsIDUpID09IDApCisrCXsKKysJICBpZiAocy0+c2l6ZSAhPSAwKQorKwkgICAgcmVsb2NzID0gVFJVRTsKKysKKysJICBzLT5yZWxvY19jb3VudCA9IDA7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvKiBJdCdzIG5vdCBvbmUgb2Ygb3VyIHNlY3Rpb25zICovCisrCSAgY29udGludWU7CisrCX0KKysKKysgICAgICBpZiAocy0+c2l6ZSA9PSAwKQorKwl7CisrCSAgLyogU3RyaXAgdW5uZWVkZWQgc2VjdGlvbnMgKi8KKysJICBwcl9kZWJ1ZygiU3RyaXBwaW5nIHNlY3Rpb24gJXMgZnJvbSBvdXRwdXQuLi5cbiIsIHMtPm5hbWUpOworKwkgIC8qIGRlbGV0ZWQgZnVuY3Rpb24gaW4gMi4xNworKyAgICAgIF9iZmRfc3RyaXBfc2VjdGlvbl9mcm9tX291dHB1dChpbmZvLCBzKTsKKysgICAgICAqLworKwkgIGNvbnRpbnVlOworKwl9CisrCisrICAgICAgcy0+Y29udGVudHMgPSBiZmRfemFsbG9jKGR5bm9iaiwgcy0+c2l6ZSk7CisrICAgICAgaWYgKHMtPmNvbnRlbnRzID09IE5VTEwpCisrCXJldHVybiBGQUxTRTsKKysgICAgfQorKworKyAgaWYgKGh0YWItPnJvb3QuZHluYW1pY19zZWN0aW9uc19jcmVhdGVkKQorKyAgICB7CisrICAgICAgLyogQWRkIHNvbWUgZW50cmllcyB0byB0aGUgLmR5bmFtaWMgc2VjdGlvbi4gIFdlIGZpbGwgaW4gdGhlCisrCSB2YWx1ZXMgbGF0ZXIsIGluIHNoX2VsZl9maW5pc2hfZHluYW1pY19zZWN0aW9ucywgYnV0IHdlCisrCSBtdXN0IGFkZCB0aGUgZW50cmllcyBub3cgc28gdGhhdCB3ZSBnZXQgdGhlIGNvcnJlY3Qgc2l6ZSBmb3IKKysJIHRoZSAuZHluYW1pYyBzZWN0aW9uLiAgVGhlIERUX0RFQlVHIGVudHJ5IGlzIGZpbGxlZCBpbiBieSB0aGUKKysJIGR5bmFtaWMgbGlua2VyIGFuZCB1c2VkIGJ5IHRoZSBkZWJ1Z2dlci4gICovCisrI2RlZmluZSBhZGRfZHluYW1pY19lbnRyeShUQUcsIFZBTCkgX2JmZF9lbGZfYWRkX2R5bmFtaWNfZW50cnkoaW5mbywgVEFHLCBWQUwpCisrCisrICAgICAgaWYgKCFhZGRfZHluYW1pY19lbnRyeShEVF9QTFRHT1QsIDApKQorKwlyZXR1cm4gRkFMU0U7CisrICAgICAgaWYgKCFhZGRfZHluYW1pY19lbnRyeShEVF9BVlIzMl9HT1RTWiwgMCkpCisrCXJldHVybiBGQUxTRTsKKysKKysgICAgICBpZiAoaW5mby0+ZXhlY3V0YWJsZSkKKysJeworKwkgIGlmICghYWRkX2R5bmFtaWNfZW50cnkoRFRfREVCVUcsIDApKQorKwkgICAgcmV0dXJuIEZBTFNFOworKwl9CisrICAgICAgaWYgKHJlbG9jcykKKysJeworKwkgIGlmICghYWRkX2R5bmFtaWNfZW50cnkoRFRfUkVMQSwgMCkKKysJICAgICAgfHwgIWFkZF9keW5hbWljX2VudHJ5KERUX1JFTEFTWiwgMCkKKysJICAgICAgfHwgIWFkZF9keW5hbWljX2VudHJ5KERUX1JFTEFFTlQsCisrCQkJCSAgICBzaXplb2YoRWxmMzJfRXh0ZXJuYWxfUmVsYSkpKQorKwkgICAgcmV0dXJuIEZBTFNFOworKwl9CisrICAgIH0KKysjdW5kZWYgYWRkX2R5bmFtaWNfZW50cnkKKysKKysgIHJldHVybiBUUlVFOworK30KKysKKysKKysvKiBBY2Nlc3MgdG8gaW50ZXJuYWwgcmVsb2NhdGlvbnMsIHNlY3Rpb24gY29udGVudHMgYW5kIHN5bWJvbHMuCisrICAgKHN0b2xlbiBmcm9tIHRoZSB4dGVuc2EgcG9ydCkgICovCisrCisrc3RhdGljIEVsZl9JbnRlcm5hbF9SZWxhICoKKytyZXRyaWV2ZV9pbnRlcm5hbF9yZWxvY3MgKGJmZCAqYWJmZCwgYXNlY3Rpb24gKnNlYywgYmZkX2Jvb2xlYW4ga2VlcF9tZW1vcnkpOworK3N0YXRpYyB2b2lkCisrcGluX2ludGVybmFsX3JlbG9jcyAoYXNlY3Rpb24gKnNlYywgRWxmX0ludGVybmFsX1JlbGEgKmludGVybmFsX3JlbG9jcyk7Cisrc3RhdGljIHZvaWQKKytyZWxlYXNlX2ludGVybmFsX3JlbG9jcyAoYXNlY3Rpb24gKnNlYywgRWxmX0ludGVybmFsX1JlbGEgKmludGVybmFsX3JlbG9jcyk7Cisrc3RhdGljIGJmZF9ieXRlICoKKytyZXRyaWV2ZV9jb250ZW50cyAoYmZkICphYmZkLCBhc2VjdGlvbiAqc2VjLCBiZmRfYm9vbGVhbiBrZWVwX21lbW9yeSk7CisrLyoKKytzdGF0aWMgdm9pZAorK3Bpbl9jb250ZW50cyAoYXNlY3Rpb24gKnNlYywgYmZkX2J5dGUgKmNvbnRlbnRzKTsKKysqLworK3N0YXRpYyB2b2lkCisrcmVsZWFzZV9jb250ZW50cyAoYXNlY3Rpb24gKnNlYywgYmZkX2J5dGUgKmNvbnRlbnRzKTsKKytzdGF0aWMgRWxmX0ludGVybmFsX1N5bSAqCisrcmV0cmlldmVfbG9jYWxfc3ltcyAoYmZkICppbnB1dF9iZmQsIGJmZF9ib29sZWFuIGtlZXBfbWVtb3J5KTsKKysvKgorK3N0YXRpYyB2b2lkCisrcGluX2xvY2FsX3N5bXMgKGJmZCAqaW5wdXRfYmZkLCBFbGZfSW50ZXJuYWxfU3ltICppc3ltYnVmKTsKKysqLworK3N0YXRpYyB2b2lkCisrcmVsZWFzZV9sb2NhbF9zeW1zIChiZmQgKmlucHV0X2JmZCwgRWxmX0ludGVybmFsX1N5bSAqaXN5bWJ1Zik7CisrCisrLyogRHVyaW5nIHJlbGF4YXRpb24sIHdlIG5lZWQgdG8gbW9kaWZ5IHJlbG9jYXRpb25zLCBzZWN0aW9uIGNvbnRlbnRzLAorKyAgIGFuZCBzeW1ib2wgZGVmaW5pdGlvbnMsIGFuZCB3ZSBuZWVkIHRvIGtlZXAgdGhlIG9yaWdpbmFsIHZhbHVlcyBmcm9tCisrICAgYmVpbmcgcmVsb2FkZWQgZnJvbSB0aGUgaW5wdXQgZmlsZXMsIGkuZS4sIHdlIG5lZWQgdG8gInBpbiIgdGhlCisrICAgbW9kaWZpZWQgdmFsdWVzIGluIG1lbW9yeS4gIFdlIGFsc28gd2FudCB0byBjb250aW51ZSB0byBvYnNlcnZlIHRoZQorKyAgIHNldHRpbmcgb2YgdGhlICJrZWVwLW1lbW9yeSIgZmxhZy4gIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHdyYXAgdGhlCisrICAgc3RhbmRhcmQgQkZEIGZ1bmN0aW9ucyB0byB0YWtlIGNhcmUgb2YgdGhpcyBmb3IgdXMuICAqLworKworK3N0YXRpYyBFbGZfSW50ZXJuYWxfUmVsYSAqCisrcmV0cmlldmVfaW50ZXJuYWxfcmVsb2NzIChiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWMsIGJmZF9ib29sZWFuIGtlZXBfbWVtb3J5KQorK3sKKysgIC8qIF9iZmRfZWxmX2xpbmtfcmVhZF9yZWxvY3Mga25vd3MgYWJvdXQgY2FjaGluZywgc28gbm8gbmVlZCBmb3IgdXMKKysgICAgIHRvIGJlIGNsZXZlciBoZXJlLiAgKi8KKysgIHJldHVybiBfYmZkX2VsZl9saW5rX3JlYWRfcmVsb2NzKGFiZmQsIHNlYywgTlVMTCwgTlVMTCwga2VlcF9tZW1vcnkpOworK30KKysKKytzdGF0aWMgdm9pZAorK3Bpbl9pbnRlcm5hbF9yZWxvY3MgKGFzZWN0aW9uICpzZWMsIEVsZl9JbnRlcm5hbF9SZWxhICppbnRlcm5hbF9yZWxvY3MpCisreworKyAgZWxmX3NlY3Rpb25fZGF0YSAoc2VjKS0+cmVsb2NzID0gaW50ZXJuYWxfcmVsb2NzOworK30KKysKKytzdGF0aWMgdm9pZAorK3JlbGVhc2VfaW50ZXJuYWxfcmVsb2NzIChhc2VjdGlvbiAqc2VjLCBFbGZfSW50ZXJuYWxfUmVsYSAqaW50ZXJuYWxfcmVsb2NzKQorK3sKKysgIGlmIChpbnRlcm5hbF9yZWxvY3MKKysgICAgICAmJiBlbGZfc2VjdGlvbl9kYXRhIChzZWMpLT5yZWxvY3MgIT0gaW50ZXJuYWxfcmVsb2NzKQorKyAgICBmcmVlIChpbnRlcm5hbF9yZWxvY3MpOworK30KKysKKytzdGF0aWMgYmZkX2J5dGUgKgorK3JldHJpZXZlX2NvbnRlbnRzIChiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWMsIGJmZF9ib29sZWFuIGtlZXBfbWVtb3J5KQorK3sKKysgIGJmZF9ieXRlICpjb250ZW50czsKKysgIGJmZF9zaXplX3R5cGUgc2VjX3NpemU7CisrCisrICBzZWNfc2l6ZSA9IGJmZF9nZXRfc2VjdGlvbl9saW1pdCAoYWJmZCwgc2VjKTsKKysgIGNvbnRlbnRzID0gZWxmX3NlY3Rpb25fZGF0YSAoc2VjKS0+dGhpc19oZHIuY29udGVudHM7CisrCisrICBpZiAoY29udGVudHMgPT0gTlVMTCAmJiBzZWNfc2l6ZSAhPSAwKQorKyAgICB7CisrICAgICAgaWYgKCFiZmRfbWFsbG9jX2FuZF9nZXRfc2VjdGlvbiAoYWJmZCwgc2VjLCAmY29udGVudHMpKQorKwl7CisrCSAgaWYgKGNvbnRlbnRzKQorKwkgICAgZnJlZSAoY29udGVudHMpOworKwkgIHJldHVybiBOVUxMOworKwl9CisrICAgICAgaWYgKGtlZXBfbWVtb3J5KQorKwllbGZfc2VjdGlvbl9kYXRhIChzZWMpLT50aGlzX2hkci5jb250ZW50cyA9IGNvbnRlbnRzOworKyAgICB9CisrICByZXR1cm4gY29udGVudHM7CisrfQorKworKy8qCisrc3RhdGljIHZvaWQKKytwaW5fY29udGVudHMgKGFzZWN0aW9uICpzZWMsIGJmZF9ieXRlICpjb250ZW50cykKKyt7CisrICBlbGZfc2VjdGlvbl9kYXRhIChzZWMpLT50aGlzX2hkci5jb250ZW50cyA9IGNvbnRlbnRzOworK30KKysqLworK3N0YXRpYyB2b2lkCisrcmVsZWFzZV9jb250ZW50cyAoYXNlY3Rpb24gKnNlYywgYmZkX2J5dGUgKmNvbnRlbnRzKQorK3sKKysgIGlmIChjb250ZW50cyAmJiBlbGZfc2VjdGlvbl9kYXRhIChzZWMpLT50aGlzX2hkci5jb250ZW50cyAhPSBjb250ZW50cykKKysgICAgZnJlZSAoY29udGVudHMpOworK30KKysKKytzdGF0aWMgRWxmX0ludGVybmFsX1N5bSAqCisrcmV0cmlldmVfbG9jYWxfc3ltcyAoYmZkICppbnB1dF9iZmQsIGJmZF9ib29sZWFuIGtlZXBfbWVtb3J5KQorK3sKKysgIEVsZl9JbnRlcm5hbF9TaGRyICpzeW10YWJfaGRyOworKyAgRWxmX0ludGVybmFsX1N5bSAqaXN5bWJ1ZjsKKysgIHNpemVfdCBsb2NzeW1jb3VudDsKKysKKysgIHN5bXRhYl9oZHIgPSAmZWxmX3RkYXRhIChpbnB1dF9iZmQpLT5zeW10YWJfaGRyOworKyAgbG9jc3ltY291bnQgPSBzeW10YWJfaGRyLT5zaF9pbmZvOworKworKyAgaXN5bWJ1ZiA9IChFbGZfSW50ZXJuYWxfU3ltICopIHN5bXRhYl9oZHItPmNvbnRlbnRzOworKyAgaWYgKGlzeW1idWYgPT0gTlVMTCAmJiBsb2NzeW1jb3VudCAhPSAwKQorKyAgICB7CisrICAgICAgaXN5bWJ1ZiA9IGJmZF9lbGZfZ2V0X2VsZl9zeW1zIChpbnB1dF9iZmQsIHN5bXRhYl9oZHIsIGxvY3N5bWNvdW50LCAwLAorKwkJCQkgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKKysgICAgICBpZiAoaXN5bWJ1ZiAmJiBrZWVwX21lbW9yeSkKKysJc3ltdGFiX2hkci0+Y29udGVudHMgPSAodW5zaWduZWQgY2hhciAqKSBpc3ltYnVmOworKyAgICB9CisrCisrICByZXR1cm4gaXN5bWJ1ZjsKKyt9CisrCisrLyoKKytzdGF0aWMgdm9pZAorK3Bpbl9sb2NhbF9zeW1zIChiZmQgKmlucHV0X2JmZCwgRWxmX0ludGVybmFsX1N5bSAqaXN5bWJ1ZikKKyt7CisrICBlbGZfdGRhdGEgKGlucHV0X2JmZCktPnN5bXRhYl9oZHIuY29udGVudHMgPSAodW5zaWduZWQgY2hhciAqKWlzeW1idWY7CisrfQorKworKyovCisrc3RhdGljIHZvaWQKKytyZWxlYXNlX2xvY2FsX3N5bXMgKGJmZCAqaW5wdXRfYmZkLCBFbGZfSW50ZXJuYWxfU3ltICppc3ltYnVmKQorK3sKKysgIGlmIChpc3ltYnVmICYmIChlbGZfdGRhdGEgKGlucHV0X2JmZCktPnN5bXRhYl9oZHIuY29udGVudHMKKysJCSAgIT0gKHVuc2lnbmVkIGNoYXIgKilpc3ltYnVmKSkKKysgICAgZnJlZSAoaXN5bWJ1Zik7CisrfQorKworKwwvKiBEYXRhIHN0cnVjdHVyZXMgdXNlZCBkdXJpbmcgcmVsYXhhdGlvbi4gKi8KKysKKytlbnVtIHJlbGF4X3N0YXRlX2lkIHsKKysgIFJTX0VSUk9SID0gLTEsCisrICBSU19OT05FID0gMCwKKysgIFJTX0FMSUdOLAorKyAgUlNfQ1BFTlQsCisrICBSU19QSUNfQ0FMTCwKKysgIFJTX1BJQ19NQ0FMTCwKKysgIFJTX1BJQ19SQ0FMTDIsCisrICBSU19QSUNfUkNBTEwxLAorKyAgUlNfUElDX0xEQSwKKysgIFJTX1BJQ19MRFc0LAorKyAgUlNfUElDX0xEVzMsCisrICBSU19QSUNfU1VCNSwKKysgIFJTX05PUElDX01DQUxMLAorKyAgUlNfTk9QSUNfUkNBTEwyLAorKyAgUlNfTk9QSUNfUkNBTEwxLAorKyAgUlNfTk9QSUNfTERXNCwKKysgIFJTX05PUElDX0xERFBDLAorKyAgUlNfTk9QSUNfU1VCNSwKKysgIFJTX05PUElDX01PVjIsCisrICBSU19OT1BJQ19NT1YxLAorKyAgUlNfUkNBTEwyLAorKyAgUlNfUkNBTEwxLAorKyAgUlNfQlJDMiwKKysgIFJTX0JSQzEsCisrICBSU19CUkFMLAorKyAgUlNfUkpNUCwKKysgIFJTX01BWCwKKyt9OworKworK2VudW0gcmVmZXJlbmNlX3R5cGUgeworKyAgUkVGX0FCU09MVVRFLAorKyAgUkVGX1BDUkVMLAorKyAgUkVGX0NQT09MLAorKyAgUkVGX0dPVCwKKyt9OworKworK3N0cnVjdCByZWxheF9zdGF0ZQorK3sKKysgIGNvbnN0IGNoYXIgKm5hbWU7CisrICBlbnVtIHJlbGF4X3N0YXRlX2lkIGlkOworKyAgZW51bSByZWxheF9zdGF0ZV9pZCBkaXJlY3Q7CisrICBlbnVtIHJlbGF4X3N0YXRlX2lkIG5leHQ7CisrICBlbnVtIHJlbGF4X3N0YXRlX2lkIHByZXY7CisrCisrICBlbnVtIHJlZmVyZW5jZV90eXBlIHJlZnR5cGU7CisrCisrICB1bnNpZ25lZCBpbnQgcl90eXBlOworKworKyAgYmZkX3ZtYSBvcGNvZGU7CisrICBiZmRfdm1hIG9wY29kZV9tYXNrOworKworKyAgYmZkX3NpZ25lZF92bWEgcmFuZ2VfbWluOworKyAgYmZkX3NpZ25lZF92bWEgcmFuZ2VfbWF4OworKworKyAgYmZkX3NpemVfdHlwZSBzaXplOworK307CisrCisrLyoKKysgKiBUaGlzIGlzIGZvciByZWxvY3MgdGhhdAorKyAqICAgYSkgaGFzIGFuIGFkZGVuZCBvciBpcyBvZiB0eXBlIFJfQVZSMzJfRElGRjMyLCBhbmQKKysgKiAgIGIpIHJlZmVyZW5jZXMgYSBkaWZmZXJlbnQgc2VjdGlvbiB0aGFuIGl0J3MgaW4sIGFuZAorKyAqICAgYykgcmVmZXJlbmNlcyBhIHNlY3Rpb24gdGhhdCBpcyByZWxheGFibGUKKysgKgorKyAqIGFzIHdlbGwgYXMgcmVsb2NzIHRoYXQgcmVmZXJlbmNlcyB0aGUgY29uc3RhbnQgcG9vbCwgaW4gd2hpY2ggY2FzZQorKyAqIHRoZSBhZGRfZnJhZyBtZW1iZXIgcG9pbnRzIHRvIHRoZSBmcmFnIGNvbnRhaW5pbmcgdGhlIGNvbnN0YW50IHBvb2wKKysgKiBlbnRyeS4KKysgKgorKyAqIFN1Y2ggcmVsb2NzIG11c3QgYmUgZml4ZWQgdXAgd2hlbmV2ZXIgd2UgZGVsZXRlIGFueSBjb2RlLiBTZWN0aW9ucworKyAqIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgcmVsb2NzIHdpdGggYWxsIG9mIHRoZSBhYm92ZSBwcm9wZXJ0aWVzIGRvbid0CisrICogaGF2ZSBhbnkgYWRkaXRpb25hbCByZWxvYyBkYXRhLCBidXQgc2VjdGlvbnMgdGhhdCBkbyB3aWxsIGhhdmUKKysgKiBhZGRpdGlvbmFsIGRhdGEgZm9yIGFsbCBpdHMgcmVsb2NzLgorKyAqLworK3N0cnVjdCBhdnIzMl9yZWxvY19kYXRhCisreworKyAgc3RydWN0IGZyYWdtZW50ICphZGRfZnJhZzsKKysgIHN0cnVjdCBmcmFnbWVudCAqc3ViX2ZyYWc7CisrfTsKKysKKysvKgorKyAqIEEgJ2ZyYWdtZW50JyBpcyBhIHJlbGF4YWJsZSBlbnRpdHksIHRoYXQgaXMsIGNvZGUgbWF5IGJlIGFkZGVkIG9yCisrICogZGVsZXRlZCBhdCB0aGUgZW5kIG9mIGEgZnJhZ21lbnQuIFdoZW4gdGhpcyBoYXBwZW5zLCBhbGwgc3Vic2VxdWVudAorKyAqIGZyYWdtZW50cyBpbiB0aGUgbGlzdCB3aWxsIGhhdmUgdGhlaXIgb2Zmc2V0cyB1cGRhdGVkLgorKyAqLworK3N0cnVjdCBmcmFnbWVudAorK3sKKysgIGVudW0gcmVsYXhfc3RhdGVfaWQgc3RhdGU7CisrICBlbnVtIHJlbGF4X3N0YXRlX2lkIGluaXRpYWxfc3RhdGU7CisrCisrICBFbGZfSW50ZXJuYWxfUmVsYSAqcmVsYTsKKysgIGJmZF9zaXplX3R5cGUgc2l6ZTsKKysgIGJmZF92bWEgb2Zmc2V0OworKyAgaW50IHNpemVfYWRqdXN0OworKyAgaW50IG9mZnNldF9hZGp1c3Q7CisrICBiZmRfYm9vbGVhbiBoYXNfZ3Jvd247CisrCisrICAvKiBPbmx5IHVzZWQgYnkgY29uc3RhbnQgcG9vbCBlbnRyaWVzLiAgV2hlbiB0aGlzIGRyb3BzIHRvIHplcm8sIHRoZQorKyAgICAgZnJhZyBpcyBkaXNjYXJkZWQgKGkuZS4gc2l6ZV9hZGp1c3QgaXMgc2V0IHRvIC00LikgICovCisrICBpbnQgcmVmY291bnQ7CisrfTsKKysKKytzdHJ1Y3QgYXZyMzJfcmVsYXhfZGF0YQorK3sKKysgIHVuc2lnbmVkIGludCBmcmFnX2NvdW50OworKyAgc3RydWN0IGZyYWdtZW50ICpmcmFnOworKyAgc3RydWN0IGF2cjMyX3JlbG9jX2RhdGEgKnJlbG9jX2RhdGE7CisrCisrICAvKiBUUlVFIGlmIHRoaXMgc2VjdGlvbiBoYXMgb25lIG9yIG1vcmUgcmVsYXhhYmxlIHJlbG9jYXRpb25zICovCisrICBiZmRfYm9vbGVhbiBpc19yZWxheGFibGU7CisrICB1bnNpZ25lZCBpbnQgaXRlcmF0aW9uOworK307CisrCisrc3RydWN0IGF2cjMyX3NlY3Rpb25fZGF0YQorK3sKKysgIHN0cnVjdCBiZmRfZWxmX3NlY3Rpb25fZGF0YSBlbGY7CisrICBzdHJ1Y3QgYXZyMzJfcmVsYXhfZGF0YSByZWxheF9kYXRhOworK307CisrCisrDC8qIFJlbGF4IHN0YXRlIGRlZmluaXRpb25zICovCisrCisrI2RlZmluZSBQSUNfTU9WMl9PUENPREUJCTB4ZTA2MDAwMDAKKysjZGVmaW5lIFBJQ19NT1YyX01BU0sJCTB4ZTFlMDAwMDAKKysjZGVmaW5lIFBJQ19NT1YyX1JBTkdFX01JTgkoLTEwNDg1NzYgKiA0KQorKyNkZWZpbmUgUElDX01PVjJfUkFOR0VfTUFYCSgxMDQ4NTc1ICogNCkKKysjZGVmaW5lIFBJQ19NQ0FMTF9PUENPREUJMHhmMDE2MDAwMAorKyNkZWZpbmUgUElDX01DQUxMX01BU0sJCTB4ZmZmZjAwMDAKKysjZGVmaW5lIFBJQ19NQ0FMTF9SQU5HRV9NSU4JKC0xMzEwNzIpCisrI2RlZmluZSBQSUNfTUNBTExfUkFOR0VfTUFYCSgxMzEwNjgpCisrI2RlZmluZSBSQ0FMTDJfT1BDT0RFCQkweGUwYTAwMDAwCisrI2RlZmluZSBSQ0FMTDJfTUFTSwkJMHhlMWVmMDAwMAorKyNkZWZpbmUgUkNBTEwyX1JBTkdFX01JTgkoLTIwOTcxNTIpCisrI2RlZmluZSBSQ0FMTDJfUkFOR0VfTUFYCSgyMDk3MTUwKQorKyNkZWZpbmUgUkNBTEwxX09QQ09ERQkJMHhjMDBjMDAwMAorKyNkZWZpbmUgUkNBTEwxX01BU0sJCTB4ZjAwYzAwMDAKKysjZGVmaW5lIFJDQUxMMV9SQU5HRV9NSU4JKC0xMDI0KQorKyNkZWZpbmUgUkNBTEwxX1JBTkdFX01BWAkoMTAyMikKKysjZGVmaW5lIFBJQ19MRFc0X09QQ09ERQkJMHhlY2YwMDAwMAorKyNkZWZpbmUgUElDX0xEVzRfTUFTSwkJMHhmZmYwMDAwMAorKyNkZWZpbmUgUElDX0xEVzRfUkFOR0VfTUlOCSgtMzI3NjgpCisrI2RlZmluZSBQSUNfTERXNF9SQU5HRV9NQVgJKDMyNzY3KQorKyNkZWZpbmUgUElDX0xEVzNfT1BDT0RFCQkweDZjMDAwMDAwCisrI2RlZmluZSBQSUNfTERXM19NQVNLCQkweGZlMDAwMDAwCisrI2RlZmluZSBQSUNfTERXM19SQU5HRV9NSU4JKDApCisrI2RlZmluZSBQSUNfTERXM19SQU5HRV9NQVgJKDEyNCkKKysjZGVmaW5lIFNVQjVfUENfT1BDT0RFCQkweGZlYzAwMDAwCisrI2RlZmluZSBTVUI1X1BDX01BU0sJCTB4ZmZmMDAwMDAKKysjZGVmaW5lIFNVQjVfUENfUkFOR0VfTUlOCSgtMzI3NjgpCisrI2RlZmluZSBTVUI1X1BDX1JBTkdFX01BWAkoMzI3NjcpCisrI2RlZmluZSBOT1BJQ19NQ0FMTF9PUENPREUJMHhmMDFmMDAwMAorKyNkZWZpbmUgTk9QSUNfTUNBTExfTUFTSwkweGZmZmYwMDAwCisrI2RlZmluZSBOT1BJQ19NQ0FMTF9SQU5HRV9NSU4JUElDX01DQUxMX1JBTkdFX01JTgorKyNkZWZpbmUgTk9QSUNfTUNBTExfUkFOR0VfTUFYCVBJQ19NQ0FMTF9SQU5HRV9NQVgKKysjZGVmaW5lIE5PUElDX0xEVzRfT1BDT0RFCTB4ZmVmMDAwMDAKKysjZGVmaW5lIE5PUElDX0xEVzRfTUFTSwkJMHhmZmYwMDAwMAorKyNkZWZpbmUgTk9QSUNfTERXNF9SQU5HRV9NSU4JUElDX0xEVzRfUkFOR0VfTUlOCisrI2RlZmluZSBOT1BJQ19MRFc0X1JBTkdFX01BWAlQSUNfTERXNF9SQU5HRV9NQVgKKysjZGVmaW5lIExERFBDX09QQ09ERQkJMHg0ODAwMDAwMAorKyNkZWZpbmUgTEREUENfTUFTSwkJMHhmODAwMDAwMAorKyNkZWZpbmUgTEREUENfUkFOR0VfTUlOCQkwCisrI2RlZmluZSBMRERQQ19SQU5HRV9NQVgJCTUwOAorKworKyNkZWZpbmUgTk9QSUNfTU9WMl9PUENPREUgIDB4ZTA2MDAwMDAKKysjZGVmaW5lIE5PUElDX01PVjJfTUFTSyAgICAgICAgMHhlMWUwMDAwMAorKyNkZWZpbmUgTk9QSUNfTU9WMl9SQU5HRV9NSU4gICAoLTEwNDg1NzYpCisrI2RlZmluZSBOT1BJQ19NT1YyX1JBTkdFX01BWCAgICgxMDQ4NTc1KQorKyNkZWZpbmUgTk9QSUNfTU9WMV9PUENPREUgIDB4MzAwMDAwMDAKKysjZGVmaW5lIE5PUElDX01PVjFfTUFTSyAgICAgICAgMHhmMDAwMDAwMAorKyNkZWZpbmUgTk9QSUNfTU9WMV9SQU5HRV9NSU4gICAoLTEyOCkKKysjZGVmaW5lIE5PUElDX01PVjFfUkFOR0VfTUFYICAgKDEyNykKKysKKysvKiBPbmx5IGJyYzIgdmFyaWFudHMgd2l0aCBjb25kWzNdID09IDAgaXMgY29uc2lkZXJlZCwgc2luY2UgdGhlCisrICAgb3RoZXJzIGFyZSBub3QgcmVsYXhhYmxlLiAgYnJhbCBpcyBhIHNwZWNpYWwgY2FzZSBhbmQgaXMgaGFuZGxlZAorKyAgIHNlcGFyYXRlbHkuICAqLworKyNkZWZpbmUgQlJDMl9PUENPREUJCTB4ZTA4MDAwMDAKKysjZGVmaW5lIEJSQzJfTUFTSwkJMHhlMWU4MDAwMAorKyNkZWZpbmUgQlJDMl9SQU5HRV9NSU4JCSgtMjA5NzE1MikKKysjZGVmaW5lIEJSQzJfUkFOR0VfTUFYCQkoMjA5NzE1MCkKKysjZGVmaW5lIEJSQzFfT1BDT0RFCQkweGMwMDAwMDAwCisrI2RlZmluZSBCUkMxX01BU0sJCTB4ZjAwODAwMDAKKysjZGVmaW5lIEJSQzFfUkFOR0VfTUlOCQkoLTI1NikKKysjZGVmaW5lIEJSQzFfUkFOR0VfTUFYCQkoMjU0KQorKyNkZWZpbmUgQlJBTF9PUENPREUJCTB4ZTA4ZjAwMDAKKysjZGVmaW5lIEJSQUxfTUFTSwkJMHhlMWVmMDAwMAorKyNkZWZpbmUgQlJBTF9SQU5HRV9NSU4JCUJSQzJfUkFOR0VfTUlOCisrI2RlZmluZSBCUkFMX1JBTkdFX01BWAkJQlJDMl9SQU5HRV9NQVgKKysjZGVmaW5lIFJKTVBfT1BDT0RFCQkweGMwMDgwMDAwCisrI2RlZmluZSBSSk1QX01BU0sJCTB4ZjAwYzAwMDAKKysjZGVmaW5lIFJKTVBfUkFOR0VfTUlOCQkoLTEwMjQpCisrI2RlZmluZSBSSk1QX1JBTkdFX01BWAkJKDEwMjIpCisrCisrLyogRGVmaW5lIGEgcmVsYXggc3RhdGUgdXNpbmcgdGhlIEdPVCAgKi8KKysjZGVmaW5lIFJHKGlkLCBkaXIsIG5leHQsIHByZXYsIHJfdHlwZSwgb3BjLCBzaXplKQkJCVwKKysgIHsgIlJTXyIjaWQsIFJTXyMjaWQsIFJTXyMjZGlyLCBSU18jI25leHQsIFJTXyMjcHJldiwgUkVGX0dPVCwJCVwKKysgICAgICBSX0FWUjMyXyMjcl90eXBlLAlvcGMjI19PUENPREUsIG9wYyMjX01BU0ssCQkJXAorKyAgICAgIG9wYyMjX1JBTkdFX01JTiwgb3BjIyNfUkFOR0VfTUFYLCBzaXplIH0KKysvKiBEZWZpbmUgYSByZWxheCBzdGF0ZSB1c2luZyB0aGUgQ29uc3RhbnQgUG9vbCAgKi8KKysjZGVmaW5lIFJDKGlkLCBkaXIsIG5leHQsIHByZXYsIHJfdHlwZSwgb3BjLCBzaXplKQkJCVwKKysgIHsgIlJTXyIjaWQsIFJTXyMjaWQsIFJTXyMjZGlyLCBSU18jI25leHQsIFJTXyMjcHJldiwgUkVGX0NQT09MLAlcCisrICAgICAgUl9BVlIzMl8jI3JfdHlwZSwJb3BjIyNfT1BDT0RFLCBvcGMjI19NQVNLLAkJCVwKKysgICAgICBvcGMjI19SQU5HRV9NSU4sIG9wYyMjX1JBTkdFX01BWCwgc2l6ZSB9CisrCisrLyogRGVmaW5lIGEgcmVsYXggc3RhdGUgdXNpbmcgcGMtcmVsYXRpdmUgZGlyZWN0IHJlZmVyZW5jZSAgKi8KKysjZGVmaW5lIFJQKGlkLCBkaXIsIG5leHQsIHByZXYsIHJfdHlwZSwgb3BjLCBzaXplKQkJCVwKKysgIHsgIlJTXyIjaWQsIFJTXyMjaWQsIFJTXyMjZGlyLCBSU18jI25leHQsIFJTXyMjcHJldiwgUkVGX1BDUkVMLAlcCisrICAgICAgUl9BVlIzMl8jI3JfdHlwZSwJb3BjIyNfT1BDT0RFLCBvcGMjI19NQVNLLAkJCVwKKysgICAgICBvcGMjI19SQU5HRV9NSU4sIG9wYyMjX1JBTkdFX01BWCwgc2l6ZSB9CisrCisrLyogRGVmaW5lIGEgcmVsYXggc3RhdGUgdXNpbmcgbm9uLXBjLXJlbGF0aXZlIGRpcmVjdCByZWZlcmVuY2UgKi8KKysjZGVmaW5lIFJEKGlkLCBkaXIsIG5leHQsIHByZXYsIHJfdHlwZSwgb3BjLCBzaXplKSAgICAgICAgIFwKKysgIHsgIlJTXyIjaWQsIFJTXyMjaWQsIFJTXyMjZGlyLCBSU18jI25leHQsIFJTXyMjcHJldiwgUkVGX0FCU09MVVRFLCAgIFwKKysgICAgICBSX0FWUjMyXyMjcl90eXBlLCAgICBvcGMjI19PUENPREUsIG9wYyMjX01BU0ssICAgICAgICAgICBcCisrICAgICAgb3BjIyNfUkFOR0VfTUlOLCBvcGMjI19SQU5HRV9NQVgsIHNpemUgfQorKworKy8qIERlZmluZSBhIHJlbGF4IHN0YXRlIHRoYXQgd2lsbCBiZSBoYW5kbGVkIHNwZWNpYWxseSAgKi8KKysjZGVmaW5lIFJTKGlkLCByX3R5cGUsIHNpemUpCQkJCQkJXAorKyAgeyAiUlNfIiNpZCwgUlNfIyNpZCwgUlNfTk9ORSwgUlNfTk9ORSwgUlNfTk9ORSwgUkVGX0FCU09MVVRFLAkJXAorKyAgICAgIFJfQVZSMzJfIyNyX3R5cGUsIDAsIDAsIDAsIDAsIHNpemUgfQorKworK2NvbnN0IHN0cnVjdCByZWxheF9zdGF0ZSByZWxheF9zdGF0ZVtSU19NQVhdID0geworKyAgUlMoTk9ORSwgTk9ORSwgMCksCisrICBSUyhBTElHTiwgQUxJR04sIDApLAorKyAgUlMoQ1BFTlQsIDMyX0NQRU5ULCA0KSwKKysKKysgIFJHKFBJQ19DQUxMLCBQSUNfUkNBTEwxLCBQSUNfTUNBTEwsIE5PTkUsIEdPVENBTEwsIFBJQ19NT1YyLCAxMCksCisrICBSRyhQSUNfTUNBTEwsIFBJQ19SQ0FMTDEsIE5PTkUsIFBJQ19DQUxMLCBHT1QxOFNXLCBQSUNfTUNBTEwsIDQpLAorKyAgUlAoUElDX1JDQUxMMiwgTk9ORSwgUElDX1JDQUxMMSwgUElDX01DQUxMLCAyMkhfUENSRUwsIFJDQUxMMiwgNCksCisrICBSUChQSUNfUkNBTEwxLCBOT05FLCBOT05FLCBQSUNfUkNBTEwyLCAxMUhfUENSRUwsIFJDQUxMMSwgMiksCisrCisrICBSRyhQSUNfTERBLCBQSUNfU1VCNSwgUElDX0xEVzQsIE5PTkUsIExEQV9HT1QsIFBJQ19NT1YyLCA4KSwKKysgIFJHKFBJQ19MRFc0LCBQSUNfU1VCNSwgUElDX0xEVzMsIFBJQ19MREEsIEdPVDE2UywgUElDX0xEVzQsIDQpLAorKyAgUkcoUElDX0xEVzMsIFBJQ19TVUI1LCBOT05FLCBQSUNfTERXNCwgR09UN1VXLCBQSUNfTERXMywgMiksCisrICBSUChQSUNfU1VCNSwgTk9ORSwgTk9ORSwgUElDX0xEVzMsIDE2Tl9QQ1JFTCwgU1VCNV9QQywgNCksCisrCisrICBSQyhOT1BJQ19NQ0FMTCwgTk9QSUNfUkNBTEwxLCBOT05FLCBOT05FLCBDUENBTEwsIE5PUElDX01DQUxMLCA0KSwKKysgIFJQKE5PUElDX1JDQUxMMiwgTk9ORSwgTk9QSUNfUkNBTEwxLCBOT1BJQ19NQ0FMTCwgMjJIX1BDUkVMLCBSQ0FMTDIsIDQpLAorKyAgUlAoTk9QSUNfUkNBTEwxLCBOT05FLCBOT05FLCBOT1BJQ19SQ0FMTDIsIDExSF9QQ1JFTCwgUkNBTEwxLCAyKSwKKysKKysgIFJDKE5PUElDX0xEVzQsIE5PUElDX01PVjEsIE5PUElDX0xERFBDLCBOT05FLCAxNl9DUCwgTk9QSUNfTERXNCwgNCksCisrICBSQyhOT1BJQ19MRERQQywgTk9QSUNfTU9WMSwgTk9ORSwgTk9QSUNfTERXNCwgOVdfQ1AsIExERFBDLCAyKSwKKysgIFJQKE5PUElDX1NVQjUsIE5PUElDX01PVjEsIE5PTkUsIE5PUElDX0xERFBDLCAxNk5fUENSRUwsIFNVQjVfUEMsIDQpLAorKyAgUkQoTk9QSUNfTU9WMiwgTk9ORSwgTk9QSUNfTU9WMSwgTk9QSUNfU1VCNSwgMjFTLCBOT1BJQ19NT1YyLCA0KSwKKysgIFJEKE5PUElDX01PVjEsIE5PTkUsIE5PTkUsIE5PUElDX01PVjIsIDhTLCBOT1BJQ19NT1YxLCAyKSwKKysKKysgIFJQKFJDQUxMMiwgTk9ORSwgUkNBTEwxLCBOT05FLCAyMkhfUENSRUwsIFJDQUxMMiwgNCksCisrICBSUChSQ0FMTDEsIE5PTkUsIE5PTkUsIFJDQUxMMiwgMTFIX1BDUkVMLCBSQ0FMTDEsIDIpLAorKyAgUlAoQlJDMiwgTk9ORSwgQlJDMSwgTk9ORSwgMjJIX1BDUkVMLCBCUkMyLCA0KSwKKysgIFJQKEJSQzEsIE5PTkUsIE5PTkUsIEJSQzIsIDlIX1BDUkVMLCBCUkMxLCAyKSwKKysgIFJQKEJSQUwsIE5PTkUsIFJKTVAsIE5PTkUsIDIySF9QQ1JFTCwgQlJBTCwgNCksCisrICBSUChSSk1QLCBOT05FLCBOT05FLCBCUkFMLCAxMUhfUENSRUwsIFJKTVAsIDIpLAorK307CisrCisrc3RhdGljIGJmZF9ib29sZWFuCisrYXZyMzJfZWxmX25ld19zZWN0aW9uX2hvb2soYmZkICphYmZkLCBhc2VjdGlvbiAqc2VjKQorK3sKKysgIHN0cnVjdCBhdnIzMl9zZWN0aW9uX2RhdGEgKnNkYXRhOworKworKyAgc2RhdGEgPSBiZmRfemFsbG9jKGFiZmQsIHNpemVvZihzdHJ1Y3QgYXZyMzJfc2VjdGlvbl9kYXRhKSk7CisrICBpZiAoIXNkYXRhKQorKyAgICByZXR1cm4gRkFMU0U7CisrCisrICBzZWMtPnVzZWRfYnlfYmZkID0gc2RhdGE7CisrICByZXR1cm4gX2JmZF9lbGZfbmV3X3NlY3Rpb25faG9vayhhYmZkLCBzZWMpOworK30KKysKKytzdGF0aWMgc3RydWN0IGF2cjMyX3JlbGF4X2RhdGEgKgorK2F2cjMyX3JlbGF4X2RhdGEoYXNlY3Rpb24gKnNlYykKKyt7CisrICBzdHJ1Y3QgYXZyMzJfc2VjdGlvbl9kYXRhICpzZGF0YTsKKysKKysgIEJGRF9BU1NFUlQoc2VjLT51c2VkX2J5X2JmZCk7CisrCisrICBzZGF0YSA9IChzdHJ1Y3QgYXZyMzJfc2VjdGlvbl9kYXRhICopZWxmX3NlY3Rpb25fZGF0YShzZWMpOworKyAgcmV0dXJuICZzZGF0YS0+cmVsYXhfZGF0YTsKKyt9CisrCisrDC8qIExpbmstdGltZSByZWxheGF0aW9uICovCisrCisrc3RhdGljIGJmZF9ib29sZWFuCisrYXZyMzJfZWxmX3JlbGF4X3NlY3Rpb24oYmZkICphYmZkLCBhc2VjdGlvbiAqc2VjLAorKwkJCXN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvLCBiZmRfYm9vbGVhbiAqYWdhaW4pOworKworK2VudW0gcmVsYXhfcGFzc19pZCB7CisrICBSRUxBWF9QQVNTX1NJWkVfRlJBR1MsCisrICBSRUxBWF9QQVNTX01PVkVfREFUQSwKKyt9OworKworKy8qIFN0b2xlbiBmcm9tIHRoZSB4dGVuc2EgcG9ydCAqLworK3N0YXRpYyBpbnQKKytpbnRlcm5hbF9yZWxvY19jb21wYXJlIChjb25zdCB2b2lkICphcCwgY29uc3Qgdm9pZCAqYnApCisreworKyAgY29uc3QgRWxmX0ludGVybmFsX1JlbGEgKmEgPSAoY29uc3QgRWxmX0ludGVybmFsX1JlbGEgKikgYXA7CisrICBjb25zdCBFbGZfSW50ZXJuYWxfUmVsYSAqYiA9IChjb25zdCBFbGZfSW50ZXJuYWxfUmVsYSAqKSBicDsKKysKKysgIGlmIChhLT5yX29mZnNldCAhPSBiLT5yX29mZnNldCkKKysgICAgcmV0dXJuIChhLT5yX29mZnNldCAtIGItPnJfb2Zmc2V0KTsKKysKKysgIC8qIFdlIGRvbid0IG5lZWQgdG8gc29ydCBvbiB0aGVzZSBjcml0ZXJpYSBmb3IgY29ycmVjdG5lc3MsCisrICAgICBidXQgZW5mb3JjaW5nIGEgbW9yZSBzdHJpY3Qgb3JkZXJpbmcgcHJldmVudHMgdW5zdGFibGUgcXNvcnQKKysgICAgIGZyb20gYmVoYXZpbmcgZGlmZmVyZW50bHkgd2l0aCBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zLgorKyAgICAgV2l0aG91dCB0aGUgY29kZSBiZWxvdyB3ZSBnZXQgY29ycmVjdCBidXQgZGlmZmVyZW50IHJlc3VsdHMKKysgICAgIG9uIFNvbGFyaXMgMi43IGFuZCAyLjguICBXZSB3b3VsZCBsaWtlIHRvIGFsd2F5cyBwcm9kdWNlIHRoZQorKyAgICAgc2FtZSByZXN1bHRzIG5vIG1hdHRlciB0aGUgaG9zdC4gICovCisrCisrICBpZiAoYS0+cl9pbmZvICE9IGItPnJfaW5mbykKKysgICAgcmV0dXJuIChhLT5yX2luZm8gLSBiLT5yX2luZm8pOworKworKyAgcmV0dXJuIChhLT5yX2FkZGVuZCAtIGItPnJfYWRkZW5kKTsKKyt9CisrCisrc3RhdGljIGVudW0gcmVsYXhfc3RhdGVfaWQKKytnZXRfcGNyZWwyMl9yZWxheF9zdGF0ZShiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWMsIHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvLAorKwkJCWNvbnN0IEVsZl9JbnRlcm5hbF9SZWxhICpyZWxhKQorK3sKKysgIGJmZF9ieXRlICpjb250ZW50czsKKysgIGJmZF92bWEgaW5zbjsKKysgIGVudW0gcmVsYXhfc3RhdGVfaWQgcnMgPSBSU19OT05FOworKworKyAgY29udGVudHMgPSByZXRyaWV2ZV9jb250ZW50cyhhYmZkLCBzZWMsIGluZm8tPmtlZXBfbWVtb3J5KTsKKysgIGlmICghY29udGVudHMpCisrICAgIHJldHVybiBSU19FUlJPUjsKKysKKysgIGluc24gPSBiZmRfZ2V0XzMyKGFiZmQsIGNvbnRlbnRzICsgcmVsYS0+cl9vZmZzZXQpOworKyAgaWYgKChpbnNuICYgUkNBTEwyX01BU0spID09IFJDQUxMMl9PUENPREUpCisrICAgIHJzID0gUlNfUkNBTEwyOworKyAgZWxzZSBpZiAoKGluc24gJiBCUkFMX01BU0spID09IEJSQUxfT1BDT0RFKQorKyAgICAvKiBPcHRpbWl6aW5nIGJyYWwgLT4gcmptcCBnZXRzIHVzIGludG8gYWxsIGtpbmRzIG9mCisrICAgICAgIHRyb3VibGUgd2l0aCBqdW1wIHRhYmxlcy4gQmV0dGVyIG5vdCBkbyBpdC4gICovCisrICAgIHJzID0gUlNfTk9ORTsKKysgIGVsc2UgaWYgKChpbnNuICYgQlJDMl9NQVNLKSA9PSBCUkMyX09QQ09ERSkKKysgICAgcnMgPSBSU19CUkMyOworKworKyAgcmVsZWFzZV9jb250ZW50cyhzZWMsIGNvbnRlbnRzKTsKKysKKysgIHJldHVybiByczsKKyt9CisrCisrc3RhdGljIGVudW0gcmVsYXhfc3RhdGVfaWQKKytnZXRfaW5pdGlhbF9yZWxheF9zdGF0ZShiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWMsIHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvLAorKwkJCWNvbnN0IEVsZl9JbnRlcm5hbF9SZWxhICpyZWxhKQorK3sKKysgIHN3aXRjaCAoRUxGX1JfVFlQRShyZWxhLT5yX2luZm8pKQorKyAgICB7CisrICAgIGNhc2UgUl9BVlIzMl9HT1RDQUxMOgorKyAgICAgIHJldHVybiBSU19QSUNfQ0FMTDsKKysgICAgY2FzZSBSX0FWUjMyX0dPVDE4U1c6CisrICAgICAgcmV0dXJuIFJTX1BJQ19NQ0FMTDsKKysgICAgY2FzZSBSX0FWUjMyX0xEQV9HT1Q6CisrICAgICAgcmV0dXJuIFJTX1BJQ19MREE7CisrICAgIGNhc2UgUl9BVlIzMl9HT1QxNlM6CisrICAgICAgcmV0dXJuIFJTX1BJQ19MRFc0OworKyAgICBjYXNlIFJfQVZSMzJfQ1BDQUxMOgorKyAgICAgIHJldHVybiBSU19OT1BJQ19NQ0FMTDsKKysgICAgY2FzZSBSX0FWUjMyXzE2X0NQOgorKyAgICAgIHJldHVybiBSU19OT1BJQ19MRFc0OworKyAgICBjYXNlIFJfQVZSMzJfOVdfQ1A6CisrICAgICAgcmV0dXJuIFJTX05PUElDX0xERFBDOworKyAgICBjYXNlIFJfQVZSMzJfQUxJR046CisrICAgICAgcmV0dXJuIFJTX0FMSUdOOworKyAgICBjYXNlIFJfQVZSMzJfMzJfQ1BFTlQ6CisrICAgICAgcmV0dXJuIFJTX0NQRU5UOworKyAgICBjYXNlIFJfQVZSMzJfMjJIX1BDUkVMOgorKyAgICAgIHJldHVybiBnZXRfcGNyZWwyMl9yZWxheF9zdGF0ZShhYmZkLCBzZWMsIGluZm8sIHJlbGEpOworKyAgICBjYXNlIFJfQVZSMzJfOUhfUENSRUw6CisrICAgICAgcmV0dXJuIFJTX0JSQzE7CisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIFJTX05PTkU7CisrICAgIH0KKyt9CisrCisrc3RhdGljIGJmZF9ib29sZWFuCisrcmVsb2NfaXNfY3Bvb2xfcmVmKGNvbnN0IEVsZl9JbnRlcm5hbF9SZWxhICpyZWxhKQorK3sKKysgIHN3aXRjaCAoRUxGX1JfVFlQRShyZWxhLT5yX2luZm8pKQorKyAgICB7CisrICAgIGNhc2UgUl9BVlIzMl9DUENBTEw6CisrICAgIGNhc2UgUl9BVlIzMl8xNl9DUDoKKysgICAgY2FzZSBSX0FWUjMyXzlXX0NQOgorKyAgICAgIHJldHVybiBUUlVFOworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBGQUxTRTsKKysgICAgfQorK30KKysKKytzdGF0aWMgc3RydWN0IGZyYWdtZW50ICoKKytuZXdfZnJhZyhiZmQgKmFiZmQgQVRUUklCVVRFX1VOVVNFRCwgYXNlY3Rpb24gKnNlYywKKysJIHN0cnVjdCBhdnIzMl9yZWxheF9kYXRhICpyZCwgZW51bSByZWxheF9zdGF0ZV9pZCBzdGF0ZSwKKysJIEVsZl9JbnRlcm5hbF9SZWxhICpyZWxhKQorK3sKKysgIHN0cnVjdCBmcmFnbWVudCAqZnJhZzsKKysgIGJmZF9zaXplX3R5cGUgcl9zaXplOworKyAgYmZkX3ZtYSByX29mZnNldDsKKysgIHVuc2lnbmVkIGludCBpID0gcmQtPmZyYWdfY291bnQ7CisrCisrICBCRkRfQVNTRVJUKHN0YXRlID49IFJTX05PTkUgJiYgc3RhdGUgPCBSU19NQVgpOworKworKyAgcmQtPmZyYWdfY291bnQrKzsKKysgIGZyYWcgPSBiZmRfcmVhbGxvYyhyZC0+ZnJhZywgc2l6ZW9mKHN0cnVjdCBmcmFnbWVudCkgKiByZC0+ZnJhZ19jb3VudCk7CisrICBpZiAoIWZyYWcpCisrICAgIHJldHVybiBOVUxMOworKyAgcmQtPmZyYWcgPSBmcmFnOworKworKyAgZnJhZyArPSBpOworKyAgbWVtc2V0KGZyYWcsIDAsIHNpemVvZihzdHJ1Y3QgZnJhZ21lbnQpKTsKKysKKysgIGlmIChzdGF0ZSA9PSBSU19BTElHTikKKysgICAgcl9zaXplID0gKCgocmVsYS0+cl9vZmZzZXQgKyAoMSA8PCByZWxhLT5yX2FkZGVuZCkgLSAxKQorKwkgICAgICAgJiB+KCgxIDw8IHJlbGEtPnJfYWRkZW5kKSAtIDEpKSAtIHJlbGEtPnJfb2Zmc2V0KTsKKysgIGVsc2UKKysgICAgcl9zaXplID0gcmVsYXhfc3RhdGVbc3RhdGVdLnNpemU7CisrCisrICBpZiAocmVsYSkKKysgICAgcl9vZmZzZXQgPSByZWxhLT5yX29mZnNldDsKKysgIGVsc2UKKysgICAgcl9vZmZzZXQgPSBzZWMtPnNpemU7CisrCisrICBpZiAoaSA9PSAwKQorKyAgICB7CisrICAgICAgZnJhZy0+b2Zmc2V0ID0gMDsKKysgICAgICBmcmFnLT5zaXplID0gcl9vZmZzZXQgKyByX3NpemU7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGZyYWctPm9mZnNldCA9IHJkLT5mcmFnW2kgLSAxXS5vZmZzZXQgKyByZC0+ZnJhZ1tpIC0gMV0uc2l6ZTsKKysgICAgICBmcmFnLT5zaXplID0gcl9vZmZzZXQgKyByX3NpemUgLSBmcmFnLT5vZmZzZXQ7CisrICAgIH0KKysKKysgIGlmIChzdGF0ZSAhPSBSU19DUEVOVCkKKysgICAgLyogTWFrZSBzdXJlIHdlIGRvbid0IGRpc2NhcmQgdGhpcyBmcmFnICovCisrICAgIGZyYWctPnJlZmNvdW50ID0gMTsKKysKKysgIGZyYWctPmluaXRpYWxfc3RhdGUgPSBmcmFnLT5zdGF0ZSA9IHN0YXRlOworKyAgZnJhZy0+cmVsYSA9IHJlbGE7CisrCisrICByZXR1cm4gZnJhZzsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBmcmFnbWVudCAqCisrZmluZF9mcmFnKGFzZWN0aW9uICpzZWMsIGJmZF92bWEgb2Zmc2V0KQorK3sKKysgIHN0cnVjdCBmcmFnbWVudCAqZmlyc3QsICpsYXN0OworKyAgc3RydWN0IGF2cjMyX3JlbGF4X2RhdGEgKnJkID0gYXZyMzJfcmVsYXhfZGF0YShzZWMpOworKworKyAgaWYgKHJkLT5mcmFnX2NvdW50ID09IDApCisrICAgIHJldHVybiBOVUxMOworKworKyAgZmlyc3QgPSAmcmQtPmZyYWdbMF07CisrICBsYXN0ID0gJnJkLT5mcmFnW3JkLT5mcmFnX2NvdW50IC0gMV07CisrCisrICAvKiBUaGlzIG1heSBiZSBhIHJlbG9jIHJlZmVyZW5jaW5nIHRoZSBlbmQgb2YgYSBzZWN0aW9uLiAgVGhlIGxhc3QKKysgICAgIGZyYWcgd2lsbCBuZXZlciBoYXZlIGEgcmVsb2MgYXNzb2NpYXRlZCB3aXRoIGl0LCBzbyBpdHMgc2l6ZSB3aWxsCisrICAgICBuZXZlciBjaGFuZ2UsIHRodXMgdGhlIG9mZnNldCBhZGp1c3RtZW50IG9mIHRoZSBsYXN0IGZyYWcgd2lsbAorKyAgICAgYWx3YXlzIGJlIHRoZSBzYW1lIGFzIHRoZSBvZmZzZXQgYWRqdXN0bWVudCBvZiB0aGUgZW5kIG9mIHRoZQorKyAgICAgc2VjdGlvbi4gICovCisrICBpZiAob2Zmc2V0ID09IHNlYy0+c2l6ZSkKKysgICAgeworKyAgICAgIEJGRF9BU1NFUlQobGFzdC0+b2Zmc2V0ICsgbGFzdC0+c2l6ZSA9PSBzZWMtPnNpemUpOworKyAgICAgIEJGRF9BU1NFUlQoIWxhc3QtPnJlbGEpOworKyAgICAgIHJldHVybiBsYXN0OworKyAgICB9CisrCisrICB3aGlsZSAoZmlyc3QgPD0gbGFzdCkKKysgICAgeworKyAgICAgIHN0cnVjdCBmcmFnbWVudCAqbWlkOworKworKyAgICAgIG1pZCA9IChsYXN0IC0gZmlyc3QpIC8gMiArIGZpcnN0OworKyAgICAgIGlmICgobWlkLT5vZmZzZXQgKyBtaWQtPnNpemUpIDw9IG9mZnNldCkKKysJZmlyc3QgPSBtaWQgKyAxOworKyAgICAgIGVsc2UgaWYgKG1pZC0+b2Zmc2V0ID4gb2Zmc2V0KQorKwlsYXN0ID0gbWlkIC0gMTsKKysgICAgICBlbHNlCisrCXJldHVybiBtaWQ7CisrICAgIH0KKysKKysgIHJldHVybiBOVUxMOworK30KKysKKysvKiBMb29rIHRocm91Z2ggYWxsIHJlbG9jcyBpbiBhIHNlY3Rpb24gYW5kIGRldGVybWluZSBpZiBhbnkgcmVsb2NzCisrICAgbWF5IGJlIGFmZmVjdGVkIGJ5IHJlbGF4YXRpb24gaW4gb3RoZXIgc2VjdGlvbnMuICBJZiBzbywgYWxsb2NhdGUKKysgICBhbiBhcnJheSBvZiBhZGRpdGlvbmFsIHJlbG9jYXRpb24gZGF0YSB3aGljaCBsaW5rcyB0aGUgYWZmZWN0ZWQKKysgICByZWxvY2F0aW9ucyB0byB0aGUgZnJhZyhzKSB3aGVyZSB0aGUgcmVsYXhhdGlvbiBtYXkgb2NjdXIuCisrCisrICAgVGhpcyBmdW5jdGlvbiBhbHNvIGxpbmtzIGNwb29sIHJlZmVyZW5jZXMgdG8gY3Bvb2wgZW50cmllcyBhbmQKKysgICBpbmNyZW1lbnRzIHRoZSByZWZjb3VudCBvZiB0aGUgbGF0dGVyIHdoZW4gdGhpcyBoYXBwZW5zLiAgKi8KKysKKytzdGF0aWMgYmZkX2Jvb2xlYW4KKythbGxvY2F0ZV9yZWxvY19kYXRhKGJmZCAqYWJmZCwgYXNlY3Rpb24gKnNlYywgRWxmX0ludGVybmFsX1JlbGEgKnJlbG9jcywKKysJCSAgICBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqaW5mbykKKyt7CisrICBFbGZfSW50ZXJuYWxfU2hkciAqc3ltdGFiX2hkcjsKKysgIEVsZl9JbnRlcm5hbF9TeW0gKmlzeW1idWYgPSBOVUxMOworKyAgc3RydWN0IGF2cjMyX3JlbGF4X2RhdGEgKnJkOworKyAgdW5zaWduZWQgaW50IGk7CisrICBiZmRfYm9vbGVhbiByZXQgPSBGQUxTRTsKKysKKysgIHN5bXRhYl9oZHIgPSAmZWxmX3RkYXRhKGFiZmQpLT5zeW10YWJfaGRyOworKyAgcmQgPSBhdnIzMl9yZWxheF9kYXRhKHNlYyk7CisrCisrICBSREJHKCIlczwlcz46IGFsbG9jYXRlX3JlbG9jX2RhdGFcbiIsIGFiZmQtPmZpbGVuYW1lLCBzZWMtPm5hbWUpOworKworKyAgZm9yIChpID0gMDsgaSA8IHNlYy0+cmVsb2NfY291bnQ7IGkrKykKKysgICAgeworKyAgICAgIEVsZl9JbnRlcm5hbF9SZWxhICpyZWwgPSAmcmVsb2NzW2ldOworKyAgICAgIGFzZWN0aW9uICpzeW1fc2VjOworKyAgICAgIHVuc2lnbmVkIGxvbmcgcl9zeW1uZHg7CisrICAgICAgYmZkX3ZtYSBzeW1fdmFsdWU7CisrCisrICAgICAgaWYgKCFyZWwtPnJfYWRkZW5kICYmIEVMRl9SX1RZUEUocmVsLT5yX2luZm8pICE9IFJfQVZSMzJfRElGRjMyCisrCSAgJiYgIXJlbG9jX2lzX2Nwb29sX3JlZihyZWwpKQorKwljb250aW51ZTsKKysKKysgICAgICByX3N5bW5keCA9IEVMRl9SX1NZTShyZWwtPnJfaW5mbyk7CisrCisrICAgICAgaWYgKHJfc3ltbmR4IDwgc3ltdGFiX2hkci0+c2hfaW5mbykKKysJeworKwkgIEVsZl9JbnRlcm5hbF9TeW0gKmlzeW07CisrCisrCSAgaWYgKCFpc3ltYnVmKQorKwkgICAgaXN5bWJ1ZiA9IHJldHJpZXZlX2xvY2FsX3N5bXMoYWJmZCwgaW5mby0+a2VlcF9tZW1vcnkpOworKwkgIGlmICghaXN5bWJ1ZikKKysJICAgIHJldHVybiBGQUxTRTsKKysKKysJICBpc3ltID0gJmlzeW1idWZbcl9zeW1uZHhdOworKwkgIHN5bV9zZWMgPSBiZmRfc2VjdGlvbl9mcm9tX2VsZl9pbmRleChhYmZkLCBpc3ltLT5zdF9zaG5keCk7CisrCSAgc3ltX3ZhbHVlID0gaXN5bS0+c3RfdmFsdWU7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICBzdHJ1Y3QgZWxmX2xpbmtfaGFzaF9lbnRyeSAqaDsKKysKKysJICBoID0gZWxmX3N5bV9oYXNoZXMoYWJmZClbcl9zeW1uZHggLSBzeW10YWJfaGRyLT5zaF9pbmZvXTsKKysKKysJICB3aGlsZSAoaC0+cm9vdC50eXBlID09IGJmZF9saW5rX2hhc2hfaW5kaXJlY3QKKysJCSB8fCBoLT5yb290LnR5cGUgPT0gYmZkX2xpbmtfaGFzaF93YXJuaW5nKQorKwkgICAgaCA9IChzdHJ1Y3QgZWxmX2xpbmtfaGFzaF9lbnRyeSAqKWgtPnJvb3QudS5pLmxpbms7CisrCisrCSAgaWYgKGgtPnJvb3QudHlwZSAhPSBiZmRfbGlua19oYXNoX2RlZmluZWQKKysJICAgICAgJiYgaC0+cm9vdC50eXBlICE9IGJmZF9saW5rX2hhc2hfZGVmd2VhaykKKysJICAgIGNvbnRpbnVlOworKworKwkgIHN5bV9zZWMgPSBoLT5yb290LnUuZGVmLnNlY3Rpb247CisrCSAgc3ltX3ZhbHVlID0gaC0+cm9vdC51LmRlZi52YWx1ZTsKKysJfQorKworKyAgICAgIGlmIChzeW1fc2VjICYmIGF2cjMyX3JlbGF4X2RhdGEoc3ltX3NlYyktPmlzX3JlbGF4YWJsZSkKKysJeworKwkgIGJmZF9zaXplX3R5cGUgc2l6ZTsKKysJICBzdHJ1Y3QgZnJhZ21lbnQgKmZyYWc7CisrCisrCSAgaWYgKCFyZC0+cmVsb2NfZGF0YSkKKysJICAgIHsKKysJICAgICAgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXZyMzJfcmVsb2NfZGF0YSkgKiBzZWMtPnJlbG9jX2NvdW50OworKwkgICAgICByZC0+cmVsb2NfZGF0YSA9IGJmZF96YWxsb2MoYWJmZCwgc2l6ZSk7CisrCSAgICAgIGlmICghcmQtPnJlbG9jX2RhdGEpCisrCQlnb3RvIG91dDsKKysJICAgIH0KKysKKysJICBSREJHKCJbJTNkXSAweCUwNGx4OiB0YXJnZXQ6IDB4JWx4ICsgMHglbHgiLAorKwkgICAgICAgaSwgcmVsLT5yX29mZnNldCwgc3ltX3ZhbHVlLCByZWwtPnJfYWRkZW5kKTsKKysKKysJICBmcmFnID0gZmluZF9mcmFnKHN5bV9zZWMsIHN5bV92YWx1ZSArIHJlbC0+cl9hZGRlbmQpOworKwkgIEJGRF9BU1NFUlQoZnJhZyk7CisrCSAgcmQtPnJlbG9jX2RhdGFbaV0uYWRkX2ZyYWcgPSBmcmFnOworKworKwkgIFJEQkcoIiAtPiAlczwlcz46JTA0bHhcbiIsIHN5bV9zZWMtPm93bmVyLT5maWxlbmFtZSwgc3ltX3NlYy0+bmFtZSwKKysJICAgICAgIGZyYWctPnJlbGEgPyBmcmFnLT5yZWxhLT5yX29mZnNldCA6IHN5bV9zZWMtPnNpemUpOworKworKwkgIGlmIChyZWxvY19pc19jcG9vbF9yZWYocmVsKSkKKysJICAgIHsKKysJICAgICAgQkZEX0FTU0VSVChFTEZfUl9UWVBFKGZyYWctPnJlbGEtPnJfaW5mbykgPT0gUl9BVlIzMl8zMl9DUEVOVCk7CisrCSAgICAgIGZyYWctPnJlZmNvdW50Kys7CisrCSAgICB9CisrCisrCSAgaWYgKEVMRl9SX1RZUEUocmVsLT5yX2luZm8pID09IFJfQVZSMzJfRElGRjMyKQorKwkgICAgeworKwkgICAgICBiZmRfYnl0ZSAqY29udGVudHM7CisrCSAgICAgIGJmZF9zaWduZWRfdm1hIGRpZmY7CisrCisrCSAgICAgIGNvbnRlbnRzID0gcmV0cmlldmVfY29udGVudHMoYWJmZCwgc2VjLCBpbmZvLT5rZWVwX21lbW9yeSk7CisrCSAgICAgIGlmICghY29udGVudHMpCisrCQlnb3RvIG91dDsKKysKKysJICAgICAgZGlmZiA9IGJmZF9nZXRfc2lnbmVkXzMyKGFiZmQsIGNvbnRlbnRzICsgcmVsLT5yX29mZnNldCk7CisrCSAgICAgIGZyYWcgPSBmaW5kX2ZyYWcoc3ltX3NlYywgc3ltX3ZhbHVlICsgcmVsLT5yX2FkZGVuZCArIGRpZmYpOworKwkgICAgICBCRkRfQVNTRVJUKGZyYWcpOworKwkgICAgICByZC0+cmVsb2NfZGF0YVtpXS5zdWJfZnJhZyA9IGZyYWc7CisrCisrCSAgICAgIHJlbGVhc2VfY29udGVudHMoc2VjLCBjb250ZW50cyk7CisrCSAgICB9CisrCX0KKysgICAgfQorKworKyAgcmV0ID0gVFJVRTsKKysKKysgb3V0OgorKyAgcmVsZWFzZV9sb2NhbF9zeW1zKGFiZmQsIGlzeW1idWYpOworKyAgcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIGJmZF9ib29sZWFuCisrZ2xvYmFsX3N5bV9zZXRfZnJhZyhzdHJ1Y3QgZWxmX2F2cjMyX2xpbmtfaGFzaF9lbnRyeSAqaGF2ciwKKysJCSAgICBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqaW5mbyBBVFRSSUJVVEVfVU5VU0VEKQorK3sKKysgIHN0cnVjdCBmcmFnbWVudCAqZnJhZzsKKysgIGFzZWN0aW9uICpzZWM7CisrCisrICBpZiAoaGF2ci0+cm9vdC5yb290LnR5cGUgIT0gYmZkX2xpbmtfaGFzaF9kZWZpbmVkCisrICAgICAgJiYgaGF2ci0+cm9vdC5yb290LnR5cGUgIT0gYmZkX2xpbmtfaGFzaF9kZWZ3ZWFrKQorKyAgICByZXR1cm4gVFJVRTsKKysKKysgIHNlYyA9IGhhdnItPnJvb3Qucm9vdC51LmRlZi5zZWN0aW9uOworKyAgaWYgKGJmZF9pc19jb25zdF9zZWN0aW9uKHNlYykKKysgICAgICB8fCAhYXZyMzJfcmVsYXhfZGF0YShzZWMpLT5pc19yZWxheGFibGUpCisrICAgIHJldHVybiBUUlVFOworKworKyAgZnJhZyA9IGZpbmRfZnJhZyhzZWMsIGhhdnItPnJvb3Qucm9vdC51LmRlZi52YWx1ZSk7CisrICBpZiAoIWZyYWcpCisrICAgIHsKKysgICAgICB1bnNpZ25lZCBpbnQgaTsKKysgICAgICBzdHJ1Y3QgYXZyMzJfcmVsYXhfZGF0YSAqcmQgPSBhdnIzMl9yZWxheF9kYXRhKHNlYyk7CisrCisrICAgICAgUkRCRygiSW4gJXM6IE5vIGZyYWcgZm9yICVzIDwlcyslbHU+IChsaW1pdCAlbHUpXG4iLAorKwkgICBzZWMtPm93bmVyLT5maWxlbmFtZSwgaGF2ci0+cm9vdC5yb290LnJvb3Quc3RyaW5nLAorKwkgICBzZWMtPm5hbWUsIGhhdnItPnJvb3Qucm9vdC51LmRlZi52YWx1ZSwgc2VjLT5zaXplKTsKKysgICAgICBmb3IgKGkgPSAwOyBpIDwgcmQtPmZyYWdfY291bnQ7IGkrKykKKysJUkRCRygiICAgICU4bHUgLSAlOGx1XG4iLCByZC0+ZnJhZ1tpXS5vZmZzZXQsCisrCSAgICAgcmQtPmZyYWdbaV0ub2Zmc2V0ICsgcmQtPmZyYWdbaV0uc2l6ZSk7CisrICAgIH0KKysgIEJGRF9BU1NFUlQoZnJhZyk7CisrCisrICBoYXZyLT5zeW1fZnJhZyA9IGZyYWc7CisrICByZXR1cm4gVFJVRTsKKyt9CisrCisrc3RhdGljIGJmZF9ib29sZWFuCisrYW5hbHl6ZV9yZWxvY2F0aW9ucyhzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqaW5mbykKKyt7CisrICBiZmQgKmFiZmQ7CisrICBhc2VjdGlvbiAqc2VjOworKworKyAgLyogRGl2aWRlIGFsbCByZWxheGFibGUgc2VjdGlvbnMgaW50byBmcmFnbWVudHMgKi8KKysgIGZvciAoYWJmZCA9IGluZm8tPmlucHV0X2JmZHM7IGFiZmQ7IGFiZmQgPSBhYmZkLT5saW5rX25leHQpCisrICAgIHsKKysgICAgICBpZiAoIShlbGZfZWxmaGVhZGVyKGFiZmQpLT5lX2ZsYWdzICYgRUZfQVZSMzJfTElOS1JFTEFYKSkKKysJeworKwkgIGlmICghKCppbmZvLT5jYWxsYmFja3MtPndhcm5pbmcpCisrCSAgICAgIChpbmZvLCBfKCJpbnB1dCBpcyBub3QgcmVsYXhhYmxlIiksIE5VTEwsIGFiZmQsIE5VTEwsIDApKQorKwkgICAgcmV0dXJuIEZBTFNFOworKwkgIGNvbnRpbnVlOworKwl9CisrCisrICAgICAgZm9yIChzZWMgPSBhYmZkLT5zZWN0aW9uczsgc2VjOyBzZWMgPSBzZWMtPm5leHQpCisrCXsKKysJICBzdHJ1Y3QgYXZyMzJfcmVsYXhfZGF0YSAqcmQ7CisrCSAgc3RydWN0IGZyYWdtZW50ICpmcmFnOworKwkgIEVsZl9JbnRlcm5hbF9SZWxhICpyZWxvY3M7CisrCSAgdW5zaWduZWQgaW50IGk7CisrCSAgYmZkX2Jvb2xlYW4gcmV0ID0gVFJVRTsKKysKKysJICBpZiAoIShzZWMtPmZsYWdzICYgU0VDX1JFTE9DKSB8fCBzZWMtPnJlbG9jX2NvdW50ID09IDApCisrCSAgICBjb250aW51ZTsKKysKKysJICByZCA9IGF2cjMyX3JlbGF4X2RhdGEoc2VjKTsKKysKKysJICByZWxvY3MgPSByZXRyaWV2ZV9pbnRlcm5hbF9yZWxvY3MoYWJmZCwgc2VjLCBpbmZvLT5rZWVwX21lbW9yeSk7CisrCSAgaWYgKCFyZWxvY3MpCisrCSAgICByZXR1cm4gRkFMU0U7CisrCisrCSAgcXNvcnQocmVsb2NzLCBzZWMtPnJlbG9jX2NvdW50LCBzaXplb2YoRWxmX0ludGVybmFsX1JlbGEpLAorKwkJaW50ZXJuYWxfcmVsb2NfY29tcGFyZSk7CisrCisrCSAgZm9yIChpID0gMDsgaSA8IHNlYy0+cmVsb2NfY291bnQ7IGkrKykKKysJICAgIHsKKysJICAgICAgZW51bSByZWxheF9zdGF0ZV9pZCBzdGF0ZTsKKysKKysJICAgICAgcmV0ID0gRkFMU0U7CisrCSAgICAgIHN0YXRlID0gZ2V0X2luaXRpYWxfcmVsYXhfc3RhdGUoYWJmZCwgc2VjLCBpbmZvLCAmcmVsb2NzW2ldKTsKKysJICAgICAgaWYgKHN0YXRlID09IFJTX0VSUk9SKQorKwkJYnJlYWs7CisrCisrCSAgICAgIGlmIChzdGF0ZSkKKysJCXsKKysJCSAgZnJhZyA9IG5ld19mcmFnKGFiZmQsIHNlYywgcmQsIHN0YXRlLCAmcmVsb2NzW2ldKTsKKysJCSAgaWYgKCFmcmFnKQorKwkJICAgIGJyZWFrOworKworKwkJICBwaW5faW50ZXJuYWxfcmVsb2NzKHNlYywgcmVsb2NzKTsKKysJCSAgcmQtPmlzX3JlbGF4YWJsZSA9IFRSVUU7CisrCQl9CisrCisrCSAgICAgIHJldCA9IFRSVUU7CisrCSAgICB9CisrCisrCSAgcmVsZWFzZV9pbnRlcm5hbF9yZWxvY3Moc2VjLCByZWxvY3MpOworKwkgIGlmICghcmV0KQorKwkgICAgcmV0dXJuIHJldDsKKysKKysJICBpZiAocmQtPmlzX3JlbGF4YWJsZSkKKysJICAgIHsKKysJICAgICAgZnJhZyA9IG5ld19mcmFnKGFiZmQsIHNlYywgcmQsIFJTX05PTkUsIE5VTEwpOworKwkgICAgICBpZiAoIWZyYWcpCisrCQlyZXR1cm4gRkFMU0U7CisrCSAgICB9CisrCX0KKysgICAgfQorKworKyAgLyogTGluayBlYWNoIGdsb2JhbCBzeW1ib2wgdG8gdGhlIGZyYWdtZW50IHdoZXJlIGl0J3MgZGVmaW5lZC4gICovCisrICBlbGZfbGlua19oYXNoX3RyYXZlcnNlKGVsZl9oYXNoX3RhYmxlKGluZm8pLCBnbG9iYWxfc3ltX3NldF9mcmFnLCBpbmZvKTsKKysKKysgIC8qIERvIHRoZSBzYW1lIGZvciBsb2NhbCBzeW1ib2xzLiAqLworKyAgZm9yIChhYmZkID0gaW5mby0+aW5wdXRfYmZkczsgYWJmZDsgYWJmZCA9IGFiZmQtPmxpbmtfbmV4dCkKKysgICAgeworKyAgICAgIEVsZl9JbnRlcm5hbF9TeW0gKmlzeW1idWYsICppc3ltOworKyAgICAgIHN0cnVjdCBmcmFnbWVudCAqKmxvY2FsX3N5bV9mcmFnOworKyAgICAgIHVuc2lnbmVkIGludCBpLCBzeW1fY291bnQ7CisrCisrICAgICAgc3ltX2NvdW50ID0gZWxmX3RkYXRhKGFiZmQpLT5zeW10YWJfaGRyLnNoX2luZm87CisrICAgICAgaWYgKHN5bV9jb3VudCA9PSAwKQorKwljb250aW51ZTsKKysKKysgICAgICBsb2NhbF9zeW1fZnJhZyA9IGJmZF96YWxsb2MoYWJmZCwgc3ltX2NvdW50ICogc2l6ZW9mKHN0cnVjdCBmcmFnbWVudCAqKSk7CisrICAgICAgaWYgKCFsb2NhbF9zeW1fZnJhZykKKysJcmV0dXJuIEZBTFNFOworKyAgICAgIGVsZl90ZGF0YShhYmZkKS0+bG9jYWxfc3ltX2ZyYWcgPSBsb2NhbF9zeW1fZnJhZzsKKysKKysgICAgICBpc3ltYnVmID0gcmV0cmlldmVfbG9jYWxfc3ltcyhhYmZkLCBpbmZvLT5rZWVwX21lbW9yeSk7CisrICAgICAgaWYgKCFpc3ltYnVmKQorKwlyZXR1cm4gRkFMU0U7CisrCisrICAgICAgZm9yIChpID0gMDsgaSA8IHN5bV9jb3VudDsgaSsrKQorKwl7CisrCSAgc3RydWN0IGF2cjMyX3JlbGF4X2RhdGEgKnJkOworKwkgIHN0cnVjdCBmcmFnbWVudCAqZnJhZzsKKysJICBhc2VjdGlvbiAqc2VjOworKworKwkgIGlzeW0gPSAmaXN5bWJ1ZltpXTsKKysKKysJICBzZWMgPSBiZmRfc2VjdGlvbl9mcm9tX2VsZl9pbmRleChhYmZkLCBpc3ltLT5zdF9zaG5keCk7CisrCSAgaWYgKCFzZWMpCisrCSAgICBjb250aW51ZTsKKysKKysJICByZCA9IGF2cjMyX3JlbGF4X2RhdGEoc2VjKTsKKysJICBpZiAoIXJkLT5pc19yZWxheGFibGUpCisrCSAgICBjb250aW51ZTsKKysKKysJICBmcmFnID0gZmluZF9mcmFnKHNlYywgaXN5bS0+c3RfdmFsdWUpOworKwkgIEJGRF9BU1NFUlQoZnJhZyk7CisrCisrCSAgbG9jYWxfc3ltX2ZyYWdbaV0gPSBmcmFnOworKwl9CisrCisrICAgICAgcmVsZWFzZV9sb2NhbF9zeW1zKGFiZmQsIGlzeW1idWYpOworKyAgICB9CisrCisrICAvKiBBbmQgYWdhaW4gZm9yIHJlbG9jcyB3aXRoIGFkZGVuZHMgYW5kIGNvbnN0YW50IHBvb2wgcmVmZXJlbmNlcyAqLworKyAgZm9yIChhYmZkID0gaW5mby0+aW5wdXRfYmZkczsgYWJmZDsgYWJmZCA9IGFiZmQtPmxpbmtfbmV4dCkKKysgICAgZm9yIChzZWMgPSBhYmZkLT5zZWN0aW9uczsgc2VjOyBzZWMgPSBzZWMtPm5leHQpCisrICAgICAgeworKwlFbGZfSW50ZXJuYWxfUmVsYSAqcmVsb2NzOworKwliZmRfYm9vbGVhbiByZXQ7CisrCisrCWlmICghKHNlYy0+ZmxhZ3MgJiBTRUNfUkVMT0MpIHx8IHNlYy0+cmVsb2NfY291bnQgPT0gMCkKKysJICBjb250aW51ZTsKKysKKysJcmVsb2NzID0gcmV0cmlldmVfaW50ZXJuYWxfcmVsb2NzKGFiZmQsIHNlYywgaW5mby0+a2VlcF9tZW1vcnkpOworKwlpZiAoIXJlbG9jcykKKysJICByZXR1cm4gRkFMU0U7CisrCisrCXJldCA9IGFsbG9jYXRlX3JlbG9jX2RhdGEoYWJmZCwgc2VjLCByZWxvY3MsIGluZm8pOworKworKwlyZWxlYXNlX2ludGVybmFsX3JlbG9jcyhzZWMsIHJlbG9jcyk7CisrCWlmIChyZXQgPT0gRkFMU0UpCisrCSAgcmV0dXJuIHJldDsKKysgICAgICB9CisrCisrICByZXR1cm4gVFJVRTsKKyt9CisrCisrc3RhdGljIGJmZF9ib29sZWFuCisrcnNfaXNfZ29vZF9lbm91Z2goY29uc3Qgc3RydWN0IHJlbGF4X3N0YXRlICpycywgc3RydWN0IGZyYWdtZW50ICpmcmFnLAorKwkJICBiZmRfdm1hIHN5bXZhbCwgYmZkX3ZtYSBhZGRyLCBzdHJ1Y3QgZ290X2VudHJ5ICpnb3QsCisrCQkgIHN0cnVjdCBhdnIzMl9yZWxvY19kYXRhICppbmRfZGF0YSwKKysJCSAgYmZkX3NpZ25lZF92bWEgb2Zmc2V0X2FkanVzdCkKKyt7CisrICBiZmRfc2lnbmVkX3ZtYSB0YXJnZXQgPSAwOworKworKyAgc3dpdGNoIChycy0+cmVmdHlwZSkKKysgICAgeworKyAgICBjYXNlIFJFRl9BQlNPTFVURToKKysgICAgICB0YXJnZXQgPSBzeW12YWw7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgUkVGX1BDUkVMOgorKyAgICAgIHRhcmdldCA9IHN5bXZhbCAtIGFkZHI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgUkVGX0NQT09MOgorKyAgICAgIC8qIGNwb29sIGZyYWdzIGFyZSBhbHdheXMgaW4gdGhlIHNhbWUgc2VjdGlvbiBhbmQgYWx3YXlzIGFmdGVyCisrCSBhbGwgZnJhZ3MgcmVmZXJyaW5nIHRvIGl0LiAgU28gaXQncyBhbHdheXMgY29ycmVjdCB0byBhZGQgaW4KKysJIG9mZnNldF9hZGp1c3QgaGVyZS4gICovCisrICAgICAgdGFyZ2V0ID0gKGluZF9kYXRhLT5hZGRfZnJhZy0+b2Zmc2V0ICsgaW5kX2RhdGEtPmFkZF9mcmFnLT5vZmZzZXRfYWRqdXN0CisrCQkrIG9mZnNldF9hZGp1c3QgLSBmcmFnLT5vZmZzZXQgLSBmcmFnLT5vZmZzZXRfYWRqdXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBSRUZfR09UOgorKyAgICAgIHRhcmdldCA9IGdvdC0+b2Zmc2V0OworKyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIGFib3J0KCk7CisrICAgIH0KKysKKysgIGlmICh0YXJnZXQgPj0gcnMtPnJhbmdlX21pbiAmJiB0YXJnZXQgPD0gcnMtPnJhbmdlX21heCkKKysgICAgcmV0dXJuIFRSVUU7CisrICBlbHNlCisrICAgIHJldHVybiBGQUxTRTsKKyt9CisrCisrc3RhdGljIGJmZF9ib29sZWFuCisrYXZyMzJfc2l6ZV9mcmFncyhiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWMsIHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvKQorK3sKKysgIHN0cnVjdCBlbGZfYXZyMzJfbGlua19oYXNoX3RhYmxlICpodGFiOworKyAgc3RydWN0IGF2cjMyX3JlbGF4X2RhdGEgKnJkOworKyAgRWxmX0ludGVybmFsX1NoZHIgKnN5bXRhYl9oZHI7CisrICBFbGZfSW50ZXJuYWxfUmVsYSAqcmVsb2NzID0gTlVMTDsKKysgIEVsZl9JbnRlcm5hbF9TeW0gKmlzeW1idWYgPSBOVUxMOworKyAgc3RydWN0IGdvdF9lbnRyeSAqKmxvY2FsX2dvdF9lbnRzOworKyAgc3RydWN0IGZyYWdtZW50ICoqbG9jYWxfc3ltX2ZyYWc7CisrICBiZmRfYm9vbGVhbiByZXQgPSBGQUxTRTsKKysgIGJmZF9zaWduZWRfdm1hIGRlbHRhID0gMDsKKysgIHVuc2lnbmVkIGludCBpOworKworKyAgaHRhYiA9IGF2cjMyX2VsZl9oYXNoX3RhYmxlKGluZm8pOworKyAgcmQgPSBhdnIzMl9yZWxheF9kYXRhKHNlYyk7CisrCisrICBpZiAoc2VjID09IGh0YWItPnNnb3QpCisrICAgIHsKKysgICAgICBSREJHKCJSZWxheGluZyBHT1Qgc2VjdGlvbiAodm1hOiAweCVseClcbiIsCisrCSAgIHNlYy0+b3V0cHV0X3NlY3Rpb24tPnZtYSArIHNlYy0+b3V0cHV0X29mZnNldCk7CisrICAgICAgaWYgKGFzc2lnbl9nb3Rfb2Zmc2V0cyhodGFiKSkKKysJaHRhYi0+cmVwZWF0X3Bhc3MgPSBUUlVFOworKyAgICAgIHJldHVybiBUUlVFOworKyAgICB9CisrCisrICBpZiAoIXJkLT5pc19yZWxheGFibGUpCisrICAgIHJldHVybiBUUlVFOworKworKyAgaWYgKCFzZWMtPnJhd3NpemUpCisrICAgIHNlYy0+cmF3c2l6ZSA9IHNlYy0+c2l6ZTsKKysKKysgIHN5bXRhYl9oZHIgPSAmZWxmX3RkYXRhKGFiZmQpLT5zeW10YWJfaGRyOworKyAgcmVsb2NzID0gcmV0cmlldmVfaW50ZXJuYWxfcmVsb2NzKGFiZmQsIHNlYywgaW5mby0+a2VlcF9tZW1vcnkpOworKyAgaWYgKCFyZWxvY3MpCisrICAgIGdvdG8gb3V0OworKworKyAgaXN5bWJ1ZiA9IHJldHJpZXZlX2xvY2FsX3N5bXMoYWJmZCwgaW5mby0+a2VlcF9tZW1vcnkpOworKyAgaWYgKCFpc3ltYnVmKQorKyAgICBnb3RvIG91dDsKKysKKysgIGxvY2FsX2dvdF9lbnRzID0gZWxmX2xvY2FsX2dvdF9lbnRzKGFiZmQpOworKyAgbG9jYWxfc3ltX2ZyYWcgPSBlbGZfdGRhdGEoYWJmZCktPmxvY2FsX3N5bV9mcmFnOworKworKyAgUkRCRygic2l6ZV9mcmFnczogJXM8JXM+XG4gIHZtYTogMHglMDhseCwgc2l6ZTogMHglMDhseFxuIiwKKysgICAgICAgYWJmZC0+ZmlsZW5hbWUsIHNlYy0+bmFtZSwKKysgICAgICAgc2VjLT5vdXRwdXRfc2VjdGlvbi0+dm1hICsgc2VjLT5vdXRwdXRfb2Zmc2V0LCBzZWMtPnNpemUpOworKworKyAgZm9yIChpID0gMDsgaSA8IHJkLT5mcmFnX2NvdW50OyBpKyspCisrICAgIHsKKysgICAgICBzdHJ1Y3QgZnJhZ21lbnQgKmZyYWcgPSAmcmQtPmZyYWdbaV07CisrICAgICAgc3RydWN0IGF2cjMyX3JlbG9jX2RhdGEgKnJfZGF0YSA9IE5VTEwsICppbmRfZGF0YSA9IE5VTEw7CisrICAgICAgY29uc3Qgc3RydWN0IHJlbGF4X3N0YXRlICpzdGF0ZSwgKm5leHRfc3RhdGU7CisrICAgICAgc3RydWN0IGZyYWdtZW50ICp0YXJnZXRfZnJhZyA9IE5VTEw7CisrICAgICAgYXNlY3Rpb24gKnN5bV9zZWMgPSBOVUxMOworKyAgICAgIEVsZl9JbnRlcm5hbF9SZWxhICpyZWxhOworKyAgICAgIHN0cnVjdCBnb3RfZW50cnkgKmdvdDsKKysgICAgICBiZmRfdm1hIHN5bXZhbCwgcl9vZmZzZXQsIGFkZGVuZCwgYWRkcjsKKysgICAgICBiZmRfc2lnbmVkX3ZtYSBzaXplX2FkanVzdCA9IDAsIGRpc3RhbmNlOworKyAgICAgIHVuc2lnbmVkIGxvbmcgcl9zeW1uZHg7CisrICAgICAgYmZkX2Jvb2xlYW4gZGVmaW5lZCA9IFRSVUUsIGR5bmFtaWMgPSBGQUxTRTsKKysgICAgICB1bnNpZ25lZCBjaGFyIHN5bV90eXBlOworKworKyAgICAgIGZyYWctPm9mZnNldF9hZGp1c3QgKz0gZGVsdGE7CisrICAgICAgc3RhdGUgPSBuZXh0X3N0YXRlID0gJnJlbGF4X3N0YXRlW2ZyYWctPnN0YXRlXTsKKysgICAgICByZWxhID0gZnJhZy0+cmVsYTsKKysKKysgICAgICBCRkRfQVNTRVJUKHN0YXRlLT5pZCA9PSBmcmFnLT5zdGF0ZSk7CisrCisrICAgICAgUkRCRygiICAweCUwNGx4JWMlZDogJXMgW3NpemUgJWxkXSIsIHJlbGEgPyByZWxhLT5yX29mZnNldCA6IHNlYy0+cmF3c2l6ZSwKKysJICAgKGZyYWctPm9mZnNldF9hZGp1c3QgPCAwKT8nLSc6JysnLAorKwkgICBhYnMoZnJhZy0+b2Zmc2V0X2FkanVzdCksIHN0YXRlLT5uYW1lLCBzdGF0ZS0+c2l6ZSk7CisrCisrICAgICAgaWYgKCFyZWxhKQorKwl7CisrCSAgUkRCRygiOiBubyByZWxvYywgaWdub3JpbmdcbiIpOworKwkgIGNvbnRpbnVlOworKwl9CisrCisrICAgICAgQkZEX0FTU0VSVCgodW5zaWduZWQgaW50KShyZWxhIC0gcmVsb2NzKSA8IHNlYy0+cmVsb2NfY291bnQpOworKyAgICAgIEJGRF9BU1NFUlQoc3RhdGUgIT0gUlNfTk9ORSk7CisrCisrICAgICAgcl9vZmZzZXQgPSByZWxhLT5yX29mZnNldCArIGZyYWctPm9mZnNldF9hZGp1c3Q7CisrICAgICAgYWRkciA9IHNlYy0+b3V0cHV0X3NlY3Rpb24tPnZtYSArIHNlYy0+b3V0cHV0X29mZnNldCArIHJfb2Zmc2V0OworKworKyAgICAgIHN3aXRjaCAoZnJhZy0+c3RhdGUpCisrCXsKKysJY2FzZSBSU19BTElHTjoKKysJICBzaXplX2FkanVzdCA9ICgoYWRkciArICgxIDw8IHJlbGEtPnJfYWRkZW5kKSAtIDEpCisrCQkJICYgfigoMSA8PCByZWxhLT5yX2FkZGVuZCkgLSAxKSk7CisrCSAgc2l6ZV9hZGp1c3QgLT0gKHNlYy0+b3V0cHV0X3NlY3Rpb24tPnZtYSArIHNlYy0+b3V0cHV0X29mZnNldAorKwkJCSAgKyBmcmFnLT5vZmZzZXQgKyBmcmFnLT5vZmZzZXRfYWRqdXN0CisrCQkJICArIGZyYWctPnNpemUgKyBmcmFnLT5zaXplX2FkanVzdCk7CisrCisrCSAgUkRCRygiOiBhZGp1c3Rpbmcgc2l6ZSAlbHUgLT4gJWx1XG4iLCBmcmFnLT5zaXplICsgZnJhZy0+c2l6ZV9hZGp1c3QsCisrCSAgICAgICBmcmFnLT5zaXplICsgZnJhZy0+c2l6ZV9hZGp1c3QgKyBzaXplX2FkanVzdCk7CisrCSAgYnJlYWs7CisrCisrCWNhc2UgUlNfQ1BFTlQ6CisrCSAgaWYgKGZyYWctPnJlZmNvdW50ID09IDAgJiYgZnJhZy0+c2l6ZV9hZGp1c3QgPT0gMCkKKysJICAgIHsKKysJICAgICAgUkRCRygiOiBkaXNjYXJkaW5nIGZyYWdcbiIpOworKwkgICAgICBzaXplX2FkanVzdCA9IC00OworKwkgICAgfQorKwkgIGVsc2UgaWYgKGZyYWctPnJlZmNvdW50ID4gMCAmJiBmcmFnLT5zaXplX2FkanVzdCA8IDApCisrCSAgICB7CisrCSAgICAgIFJEQkcoIjogdW4tZGlzY2FyZGluZyBmcmFnXG4iKTsKKysJICAgICAgc2l6ZV9hZGp1c3QgPSA0OworKwkgICAgfQorKwkgIGJyZWFrOworKworKwlkZWZhdWx0OgorKwkgIGlmIChyZC0+cmVsb2NfZGF0YSkKKysJICAgIHJfZGF0YSA9ICZyZC0+cmVsb2NfZGF0YVtmcmFnLT5yZWxhIC0gcmVsb2NzXTsKKysKKysJICAvKiBJZiB0aGlzIGlzIGEgY3Bvb2wgcmVmZXJlbmNlLCB3ZSB3YW50IHRoZSBzeW1ib2wgdGhhdCB0aGUKKysJICAgICBjcG9vbCBlbnRyeSByZWZlcnMgdG8sIG5vdCB0aGUgc3ltYm9sIGZvciB0aGUgY3Bvb2wgZW50cnkKKysJICAgICBpdHNlbGYsIGFzIHdlIGFscmVhZHkga25vdyB3aGF0IGZyYWcgaXQncyBpbi4gICovCisrCSAgaWYgKHJlbGF4X3N0YXRlW2ZyYWctPmluaXRpYWxfc3RhdGVdLnJlZnR5cGUgPT0gUkVGX0NQT09MKQorKwkgICAgeworKwkgICAgICBFbGZfSW50ZXJuYWxfUmVsYSAqaXJlbGEgPSByX2RhdGEtPmFkZF9mcmFnLT5yZWxhOworKworKwkgICAgICByX3N5bW5keCA9IEVMRl9SX1NZTShpcmVsYS0+cl9pbmZvKTsKKysJICAgICAgYWRkZW5kID0gaXJlbGEtPnJfYWRkZW5kOworKworKwkgICAgICAvKiBUaGUgY29uc3RhbnQgcG9vbCBtdXN0IGJlIGluIHRoZSBzYW1lIHNlY3Rpb24gYXMgdGhlCisrCQkgcmVsb2MgcmVmZXJyaW5nIHRvIGl0LiAgKi8KKysJICAgICAgQkZEX0FTU0VSVCgodW5zaWduZWQgbG9uZykoaXJlbGEgLSByZWxvY3MpIDwgc2VjLT5yZWxvY19jb3VudCk7CisrCisrCSAgICAgIGluZF9kYXRhID0gcl9kYXRhOworKwkgICAgICByX2RhdGEgPSAmcmQtPnJlbG9jX2RhdGFbaXJlbGEgLSByZWxvY3NdOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgcl9zeW1uZHggPSBFTEZfUl9TWU0ocmVsYS0+cl9pbmZvKTsKKysJICAgICAgYWRkZW5kID0gcmVsYS0+cl9hZGRlbmQ7CisrCSAgICB9CisrCisrCSAgLyogR2V0IHRoZSB2YWx1ZSBvZiB0aGUgc3ltYm9sIHJlZmVycmVkIHRvIGJ5IHRoZSByZWxvYy4gICovCisrCSAgaWYgKHJfc3ltbmR4IDwgc3ltdGFiX2hkci0+c2hfaW5mbykKKysJICAgIHsKKysJICAgICAgRWxmX0ludGVybmFsX1N5bSAqaXN5bTsKKysKKysJICAgICAgaXN5bSA9IGlzeW1idWYgKyByX3N5bW5keDsKKysJICAgICAgc3ltdmFsID0gMDsKKysKKysJICAgICAgUkRCRygiIGxvY2FsIHN5bSAlbHU6ICIsIHJfc3ltbmR4KTsKKysKKysJICAgICAgaWYgKGlzeW0tPnN0X3NobmR4ID09IFNITl9VTkRFRikKKysJCWRlZmluZWQgPSBGQUxTRTsKKysJICAgICAgZWxzZSBpZiAoaXN5bS0+c3Rfc2huZHggPT0gU0hOX0FCUykKKysJCXN5bV9zZWMgPSBiZmRfYWJzX3NlY3Rpb25fcHRyOworKwkgICAgICBlbHNlIGlmIChpc3ltLT5zdF9zaG5keCA9PSBTSE5fQ09NTU9OKQorKwkJc3ltX3NlYyA9IGJmZF9jb21fc2VjdGlvbl9wdHI7CisrCSAgICAgIGVsc2UKKysJCXN5bV9zZWMgPSBiZmRfc2VjdGlvbl9mcm9tX2VsZl9pbmRleChhYmZkLCBpc3ltLT5zdF9zaG5keCk7CisrCisrCSAgICAgIHN5bXZhbCA9IGlzeW0tPnN0X3ZhbHVlOworKwkgICAgICBzeW1fdHlwZSA9IEVMRl9TVF9UWVBFKGlzeW0tPnN0X2luZm8pOworKwkgICAgICB0YXJnZXRfZnJhZyA9IGxvY2FsX3N5bV9mcmFnW3Jfc3ltbmR4XTsKKysKKysJICAgICAgaWYgKGxvY2FsX2dvdF9lbnRzKQorKwkJZ290ID0gbG9jYWxfZ290X2VudHNbcl9zeW1uZHhdOworKwkgICAgICBlbHNlCisrCQlnb3QgPSBOVUxMOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgLyogR2xvYmFsIHN5bWJvbCAqLworKwkgICAgICB1bnNpZ25lZCBsb25nIGluZGV4OworKwkgICAgICBzdHJ1Y3QgZWxmX2xpbmtfaGFzaF9lbnRyeSAqaDsKKysJICAgICAgc3RydWN0IGVsZl9hdnIzMl9saW5rX2hhc2hfZW50cnkgKmhhdnI7CisrCisrCSAgICAgIGluZGV4ID0gcl9zeW1uZHggLSBzeW10YWJfaGRyLT5zaF9pbmZvOworKwkgICAgICBoID0gZWxmX3N5bV9oYXNoZXMoYWJmZClbaW5kZXhdOworKwkgICAgICBCRkRfQVNTRVJUKGggIT0gTlVMTCk7CisrCisrCSAgICAgIHdoaWxlIChoLT5yb290LnR5cGUgPT0gYmZkX2xpbmtfaGFzaF9pbmRpcmVjdAorKwkJICAgICB8fCBoLT5yb290LnR5cGUgPT0gYmZkX2xpbmtfaGFzaF93YXJuaW5nKQorKwkJaCA9IChzdHJ1Y3QgZWxmX2xpbmtfaGFzaF9lbnRyeSAqKWgtPnJvb3QudS5pLmxpbms7CisrCisrCSAgICAgIGhhdnIgPSAoc3RydWN0IGVsZl9hdnIzMl9saW5rX2hhc2hfZW50cnkgKiloOworKwkgICAgICBnb3QgPSBoLT5nb3QuZ2xpc3Q7CisrCisrCSAgICAgIHN5bXZhbCA9IDA7CisrCisrCSAgICAgIFJEQkcoIiAlczogIiwgaC0+cm9vdC5yb290LnN0cmluZyk7CisrCisrCSAgICAgIGlmIChoLT5yb290LnR5cGUgIT0gYmZkX2xpbmtfaGFzaF9kZWZpbmVkCisrCQkgICYmIGgtPnJvb3QudHlwZSAhPSBiZmRfbGlua19oYXNoX2RlZndlYWspCisrCQl7CisrCQkgIFJEQkcoIih1bmRlZikiKTsKKysJCSAgZGVmaW5lZCA9IEZBTFNFOworKwkJfQorKwkgICAgICBlbHNlIGlmICgoaW5mby0+c2hhcmVkICYmICFpbmZvLT5zeW1ib2xpYyAmJiBoLT5keW5pbmR4ICE9IC0xKQorKwkJICAgICAgIHx8IChodGFiLT5yb290LmR5bmFtaWNfc2VjdGlvbnNfY3JlYXRlZAorKwkJCSAgICYmIGgtPmRlZl9keW5hbWljICYmICFoLT5kZWZfcmVndWxhcikpCisrCQl7CisrCQkgIFJEQkcoIihkeW5hbWljKSIpOworKwkJICBkeW5hbWljID0gVFJVRTsKKysJCSAgc3ltX3NlYyA9IGgtPnJvb3QudS5kZWYuc2VjdGlvbjsKKysJCX0KKysJICAgICAgZWxzZQorKwkJeworKwkJICBzeW1fc2VjID0gaC0+cm9vdC51LmRlZi5zZWN0aW9uOworKwkJICBzeW12YWwgPSBoLT5yb290LnUuZGVmLnZhbHVlOworKwkJICB0YXJnZXRfZnJhZyA9IGhhdnItPnN5bV9mcmFnOworKwkJfQorKworKwkgICAgICBzeW1fdHlwZSA9IGgtPnR5cGU7CisrCSAgICB9CisrCisrCSAgLyogVGhhbmtzIHRvIGVsZjMyLXBwYyBmb3IgdGhpcyBvbmUuICAqLworKwkgIGlmIChzeW1fc2VjICYmIHN5bV9zZWMtPnNlY19pbmZvX3R5cGUgPT0gRUxGX0lORk9fVFlQRV9NRVJHRSkKKysJICAgIHsKKysJICAgICAgLyogQXQgdGhpcyBzdGFnZSBpbiBsaW5raW5nLCBubyBTRUNfTUVSR0Ugc3ltYm9sIGhhcyBiZWVuCisrCQkgYWRqdXN0ZWQsIHNvIGFsbCByZWZlcmVuY2VzIHRvIHN1Y2ggc3ltYm9scyBuZWVkIHRvIGJlCisrCQkgcGFzc2VkIHRocm91Z2ggX2JmZF9tZXJnZWRfc2VjdGlvbl9vZmZzZXQuICAoTGF0ZXIsIGluCisrCQkgcmVsb2NhdGVfc2VjdGlvbiwgYWxsIFNFQ19NRVJHRSBzeW1ib2xzICpleGNlcHQqIGZvcgorKwkJIHNlY3Rpb24gc3ltYm9scyBoYXZlIGJlZW4gYWRqdXN0ZWQuKQorKworKwkgICAgICAgICBTRUNfTUVSR0Ugc2VjdGlvbnMgYXJlIG5vdCByZWxheGVkIGJ5IHVzLCBhcyB0aGV5CisrCSAgICAgICAgIHNob3VsZG4ndCBjb250YWluIGFueSBjb2RlLiAgKi8KKysKKysJICAgICAgQkZEX0FTU0VSVCghdGFyZ2V0X2ZyYWcgJiYgIShyX2RhdGEgJiYgcl9kYXRhLT5hZGRfZnJhZykpOworKworKwkgICAgICAvKiBnYXMgbWF5IHJlZHVjZSByZWxvY2F0aW9ucyBhZ2FpbnN0IHN5bWJvbHMgaW4gU0VDX01FUkdFCisrCQkgc2VjdGlvbnMgdG8gYSByZWxvY2F0aW9uIGFnYWluc3QgdGhlIHNlY3Rpb24gc3ltYm9sIHdoZW4KKysJCSB0aGUgb3JpZ2luYWwgYWRkZW5kIHdhcyB6ZXJvLiAgV2hlbiB0aGUgcmVsb2MgaXMgYWdhaW5zdAorKwkJIGEgc2VjdGlvbiBzeW1ib2wgd2Ugc2hvdWxkIGluY2x1ZGUgdGhlIGFkZGVuZCBpbiB0aGUKKysJCSBvZmZzZXQgcGFzc2VkIHRvIF9iZmRfbWVyZ2VkX3NlY3Rpb25fb2Zmc2V0LCBzaW5jZSB0aGUKKysJCSBsb2NhdGlvbiBvZiBpbnRlcmVzdCBpcyB0aGUgb3JpZ2luYWwgc3ltYm9sLiAgT24gdGhlCisrCQkgb3RoZXIgaGFuZCwgYW4gYWNjZXNzIHRvICJzeW0rYWRkZW5kIiB3aGVyZSAic3ltIiBpcyBub3QKKysJCSBhIHNlY3Rpb24gc3ltYm9sIHNob3VsZCBub3QgaW5jbHVkZSB0aGUgYWRkZW5kOyAgU3VjaCBhbgorKwkJIGFjY2VzcyBpcyBwcmVzdW1lZCB0byBiZSBhbiBvZmZzZXQgZnJvbSAic3ltIjsgIFRoZQorKwkJIGxvY2F0aW9uIG9mIGludGVyZXN0IGlzIGp1c3QgInN5bSIuICAqLworKwkgICAgICBSREJHKCJcbiAgICBNRVJHRTogJXM6IDB4JWx4KzB4JWx4KzB4JWx4IC0+ICIsCisrCQkgICAoc3ltX3R5cGUgPT0gU1RUX1NFQ1RJT04pPyJzZWN0aW9uIjoibm90IHNlY3Rpb24iLAorKwkJICAgc3ltX3NlYy0+b3V0cHV0X3NlY3Rpb24tPnZtYSArIHN5bV9zZWMtPm91dHB1dF9vZmZzZXQsCisrCQkgICBzeW12YWwsIGFkZGVuZCk7CisrCisrCSAgICAgIGlmIChzeW1fdHlwZSA9PSBTVFRfU0VDVElPTikKKysJCXN5bXZhbCArPSBhZGRlbmQ7CisrCisrCSAgICAgIHN5bXZhbCA9IChfYmZkX21lcmdlZF9zZWN0aW9uX29mZnNldAorKwkJCShhYmZkLCAmc3ltX3NlYywKKysJCQkgZWxmX3NlY3Rpb25fZGF0YShzeW1fc2VjKS0+c2VjX2luZm8sIHN5bXZhbCkpOworKworKwkgICAgICBpZiAoc3ltX3R5cGUgIT0gU1RUX1NFQ1RJT04pCisrCQlzeW12YWwgKz0gYWRkZW5kOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHN5bXZhbCArPSBhZGRlbmQ7CisrCisrCSAgaWYgKGRlZmluZWQgJiYgIWR5bmFtaWMpCisrCSAgICB7CisrCSAgICAgIFJEQkcoIjB4JWx4KzB4JWx4IiwKKysJCSAgIHN5bV9zZWMtPm91dHB1dF9zZWN0aW9uLT52bWEgKyBzeW1fc2VjLT5vdXRwdXRfb2Zmc2V0LAorKwkJICAgc3ltdmFsKTsKKysJICAgICAgc3ltdmFsICs9IHN5bV9zZWMtPm91dHB1dF9zZWN0aW9uLT52bWEgKyBzeW1fc2VjLT5vdXRwdXRfb2Zmc2V0OworKwkgICAgfQorKworKwkgIGlmIChyX2RhdGEgJiYgcl9kYXRhLT5hZGRfZnJhZykKKysJICAgIC8qIElmIHRoZSBhZGRfZnJhZyBwb2ludGVyIGlzIHNldCwgaXQgbWVhbnMgdGhhdCB0aGlzIHJlbG9jCisrCSAgICAgICBoYXMgYW4gYWRkZW5kIHRoYXQgbWF5IGJlIGFmZmVjdGVkIGJ5IHJlbGF4YXRpb24uICAqLworKwkgICAgdGFyZ2V0X2ZyYWcgPSByX2RhdGEtPmFkZF9mcmFnOworKworKwkgIGlmICh0YXJnZXRfZnJhZykKKysJICAgIHsKKysJICAgICAgc3ltdmFsICs9IHRhcmdldF9mcmFnLT5vZmZzZXRfYWRqdXN0OworKworKwkgICAgICAvKiBJZiB0YXJnZXRfZnJhZyBjb21lcyBhZnRlciB0aGlzIGZyYWcgaW4gdGhlIHNhbWUKKysJCSBzZWN0aW9uLCB3ZSBzaG91bGQgYXNzdW1lIHRoYXQgaXQgd2lsbCBiZSBtb3ZlZCBieQorKwkJIHRoZSBzYW1lIGFtb3VudCB3ZSBhcmUuICAqLworKwkgICAgICBpZiAoKHRhcmdldF9mcmFnIC0gcmQtPmZyYWcpIDwgKGludClyZC0+ZnJhZ19jb3VudAorKwkJICAmJiB0YXJnZXRfZnJhZyA+IGZyYWcpCisrCQlzeW12YWwgKz0gZGVsdGE7CisrCSAgICB9CisrCisrCSAgZGlzdGFuY2UgPSBzeW12YWwgLSBhZGRyOworKworKwkgIC8qIEZpcnN0LCB0cnkgdG8gbWFrZSBhIGRpcmVjdCByZWZlcmVuY2UuICBJZiB0aGUgc3ltYm9sIGlzCisrCSAgICAgZHluYW1pYyBvciB1bmRlZmluZWQsIHdlIG11c3QgdGFrZSBjYXJlIG5vdCB0byBjaGFuZ2UgaXRzCisrCSAgICAgcmVmZXJlbmNlIHR5cGUsIHRoYXQgaXMsIHdlIGNhbid0IG1ha2UgaXQgZGlyZWN0LgorKworKwkgICAgIEFsc28sIGl0IHNlZW1zIGxpa2Ugc29tZSBzZWN0aW9ucyBtYXkgYWN0dWFsbHkgYmUgcmVzaXplZAorKwkgICAgIGFmdGVyIHRoZSByZWxheGF0aW9uIGNvZGUgaXMgZG9uZSwgc28gd2UgY2FuJ3QgcmVhbGx5CisrCSAgICAgdHJ1c3QgdGhhdCBvdXIgImRpc3RhbmNlIiBpcyBjb3JyZWN0LiAgVGhlcmUncyByZWFsbHkgbm8KKysJICAgICBlYXN5IHNvbHV0aW9uIHRvIHRoaXMgcHJvYmxlbSwgc28gd2UnbGwganVzdCBkaXNhbGxvdworKwkgICAgIGRpcmVjdCByZWZlcmVuY2VzIHRvIFNFQ19EQVRBIHNlY3Rpb25zLgorKworKwkgICAgIE9oLCBhbmQgLmJzcyBpc24ndCBhY3R1YWxseSBTRUNfREFUQSwgc28gd2UgZGlzYWxsb3cKKysJICAgICAhU0VDX0hBU19DT05URU5UUyBhcyB3ZWxsLiAqLworKwkgIGlmICghZHluYW1pYyAmJiBkZWZpbmVkCisrCSAgICAgICYmIChodGFiLT5kaXJlY3RfZGF0YV9yZWZzCisrCQkgIHx8ICghKHN5bV9zZWMtPmZsYWdzICYgU0VDX0RBVEEpCisrCQkgICAgICAmJiAoc3ltX3NlYy0+ZmxhZ3MgJiBTRUNfSEFTX0NPTlRFTlRTKSkpCisrCSAgICAgICYmIG5leHRfc3RhdGUtPmRpcmVjdCkKKysJICAgIHsKKysJICAgICAgbmV4dF9zdGF0ZSA9ICZyZWxheF9zdGF0ZVtuZXh0X3N0YXRlLT5kaXJlY3RdOworKwkgICAgICBSREJHKCIgRC0+ICVzIiwgbmV4dF9zdGF0ZS0+bmFtZSk7CisrCSAgICB9CisrCisrCSAgLyogSXRlcmF0ZSBiYWNrd2FyZHMgdW50aWwgd2UgZmluZCBhIHN0YXRlIHRoYXQgZml0cy4gICovCisrCSAgd2hpbGUgKG5leHRfc3RhdGUtPnByZXYKKysJCSAmJiAhcnNfaXNfZ29vZF9lbm91Z2gobmV4dF9zdGF0ZSwgZnJhZywgc3ltdmFsLCBhZGRyLAorKwkJCQkgICAgICAgZ290LCBpbmRfZGF0YSwgZGVsdGEpKQorKwkgICAgeworKwkgICAgICBuZXh0X3N0YXRlID0gJnJlbGF4X3N0YXRlW25leHRfc3RhdGUtPnByZXZdOworKwkgICAgICBSREJHKCIgUC0+ICVzIiwgbmV4dF9zdGF0ZS0+bmFtZSk7CisrCSAgICB9CisrCisrCSAgLyogVGhlbiB0cnkgdG8gZmluZCB0aGUgYmVzdCBwb3NzaWJsZSBzdGF0ZS4gICovCisrCSAgd2hpbGUgKG5leHRfc3RhdGUtPm5leHQpCisrCSAgICB7CisrCSAgICAgIGNvbnN0IHN0cnVjdCByZWxheF9zdGF0ZSAqY2FuZGlkYXRlOworKworKwkgICAgICBjYW5kaWRhdGUgPSAmcmVsYXhfc3RhdGVbbmV4dF9zdGF0ZS0+bmV4dF07CisrCSAgICAgIGlmICghcnNfaXNfZ29vZF9lbm91Z2goY2FuZGlkYXRlLCBmcmFnLCBzeW12YWwsIGFkZHIsIGdvdCwKKysJCQkJICAgICBpbmRfZGF0YSwgZGVsdGEpKQorKwkJYnJlYWs7CisrCisrCSAgICAgIG5leHRfc3RhdGUgPSBjYW5kaWRhdGU7CisrCSAgICAgIFJEQkcoIiBOLT4gJXMiLCBuZXh0X3N0YXRlLT5uYW1lKTsKKysJICAgIH0KKysKKysJICBSREJHKCIgW3NpemUgJWxkXVxuIiwgbmV4dF9zdGF0ZS0+c2l6ZSk7CisrCisrCSAgQkZEX0FTU0VSVChuZXh0X3N0YXRlLT5pZCk7CisrCSAgQkZEX0FTU0VSVCghZHluYW1pYyB8fCBuZXh0X3N0YXRlLT5yZWZ0eXBlID09IFJFRl9HT1QpOworKworKwkgIHNpemVfYWRqdXN0ID0gbmV4dF9zdGF0ZS0+c2l6ZSAtIHN0YXRlLT5zaXplOworKworKwkgIC8qIFRoZXJlJ3MgYSB0aGVvcmV0aWNhbCBwb3NzaWJpbGl0eSB0aGF0IHNocmlua2luZyBvbmUgZnJhZworKwkgICAgIG1heSBjYXVzZSBhbm90aGVyIHRvIGdyb3csIHdoaWNoIG1heSBjYXVzZSB0aGUgZmlyc3Qgb25lIHRvCisrCSAgICAgZ3JvdyBhcyB3ZWxsLCBhbmQgd2UncmUgYmFjayB3aGVyZSB3ZSBzdGFydGVkLiAgQXZvaWQgdGhpcworKwkgICAgIHNjZW5hcmlvIGJ5IGRpc2FsbG93aW5nIGEgZnJhZyB0aGF0IGhhcyBncm93biB0byBldmVyCisrCSAgICAgc2hyaW5rIGFnYWluLiAgKi8KKysJICBpZiAoc3RhdGUtPnJlZnR5cGUgPT0gUkVGX0dPVCAmJiBuZXh0X3N0YXRlLT5yZWZ0eXBlICE9IFJFRl9HT1QpCisrCSAgICB7CisrCSAgICAgIGlmIChmcmFnLT5oYXNfZ3Jvd24pCisrCQluZXh0X3N0YXRlID0gc3RhdGU7CisrCSAgICAgIGVsc2UKKysJCXVucmVmX2dvdF9lbnRyeShodGFiLCBnb3QpOworKwkgICAgfQorKwkgIGVsc2UgaWYgKHN0YXRlLT5yZWZ0eXBlICE9IFJFRl9HT1QgJiYgbmV4dF9zdGF0ZS0+cmVmdHlwZSA9PSBSRUZfR09UKQorKwkgICAgeworKwkgICAgICByZWZfZ290X2VudHJ5KGh0YWIsIGdvdCk7CisrCSAgICAgIGZyYWctPmhhc19ncm93biA9IFRSVUU7CisrCSAgICB9CisrCSAgZWxzZSBpZiAoc3RhdGUtPnJlZnR5cGUgPT0gUkVGX0NQT09MCisrCQkgICAmJiBuZXh0X3N0YXRlLT5yZWZ0eXBlICE9IFJFRl9DUE9PTCkKKysJICAgIHsKKysJICAgICAgaWYgKGZyYWctPmhhc19ncm93bikKKysJCW5leHRfc3RhdGUgPSBzdGF0ZTsKKysJICAgICAgZWxzZQorKwkJaW5kX2RhdGEtPmFkZF9mcmFnLT5yZWZjb3VudC0tOworKwkgICAgfQorKwkgIGVsc2UgaWYgKHN0YXRlLT5yZWZ0eXBlICE9IFJFRl9DUE9PTAorKwkJICAgJiYgbmV4dF9zdGF0ZS0+cmVmdHlwZSA9PSBSRUZfQ1BPT0wpCisrCSAgICB7CisrCSAgICAgIGluZF9kYXRhLT5hZGRfZnJhZy0+cmVmY291bnQrKzsKKysJICAgICAgZnJhZy0+aGFzX2dyb3duID0gVFJVRTsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIGlmIChmcmFnLT5oYXNfZ3Jvd24gJiYgc2l6ZV9hZGp1c3QgPCAwKQorKwkJbmV4dF9zdGF0ZSA9IHN0YXRlOworKwkgICAgICBlbHNlIGlmIChzaXplX2FkanVzdCA+IDApCisrCQlmcmFnLT5oYXNfZ3Jvd24gPSBUUlVFOworKwkgICAgfQorKworKwkgIHNpemVfYWRqdXN0ID0gbmV4dF9zdGF0ZS0+c2l6ZSAtIHN0YXRlLT5zaXplOworKwkgIGZyYWctPnN0YXRlID0gbmV4dF9zdGF0ZS0+aWQ7CisrCisrCSAgYnJlYWs7CisrCX0KKysKKysgICAgICBpZiAoc2l6ZV9hZGp1c3QpCisrCWh0YWItPnJlcGVhdF9wYXNzID0gVFJVRTsKKysKKysgICAgICBmcmFnLT5zaXplX2FkanVzdCArPSBzaXplX2FkanVzdDsKKysgICAgICBzZWMtPnNpemUgKz0gc2l6ZV9hZGp1c3Q7CisrICAgICAgZGVsdGEgKz0gc2l6ZV9hZGp1c3Q7CisrCisrICAgICAgQkZEX0FTU0VSVCgoZnJhZy0+b2Zmc2V0ICsgZnJhZy0+b2Zmc2V0X2FkanVzdAorKwkJICArIGZyYWctPnNpemUgKyBmcmFnLT5zaXplX2FkanVzdCkKKysJCSA9PSAoZnJhZ1sxXS5vZmZzZXQgKyBmcmFnWzFdLm9mZnNldF9hZGp1c3QgKyBkZWx0YSkpOworKyAgICB9CisrCisrICByZXQgPSBUUlVFOworKworKyBvdXQ6CisrICByZWxlYXNlX2xvY2FsX3N5bXMoYWJmZCwgaXN5bWJ1Zik7CisrICByZWxlYXNlX2ludGVybmFsX3JlbG9jcyhzZWMsIHJlbG9jcyk7CisrICByZXR1cm4gcmV0OworK30KKysKKytzdGF0aWMgYmZkX2Jvb2xlYW4KKythZGp1c3RfZ2xvYmFsX3N5bWJvbChzdHJ1Y3QgZWxmX2F2cjMyX2xpbmtfaGFzaF9lbnRyeSAqaGF2ciwKKysJCSAgICAgc3RydWN0IGJmZF9saW5rX2luZm8gKmluZm8gQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICBzdHJ1Y3QgZWxmX2xpbmtfaGFzaF9lbnRyeSAqaCA9ICZoYXZyLT5yb290OworKworKyAgaWYgKGhhdnItPnN5bV9mcmFnICYmIChoLT5yb290LnR5cGUgPT0gYmZkX2xpbmtfaGFzaF9kZWZpbmVkCisrCQkJIHx8IGgtPnJvb3QudHlwZSA9PSBiZmRfbGlua19oYXNoX2RlZndlYWspKQorKyAgICB7CisrICAgICAgUkRCRygiYWRqdXN0X2dsb2JhbF9zeW1ib2w6ICVzIDB4JTA4bHggLT4gMHglMDhseFxuIiwKKysJICAgaC0+cm9vdC5yb290LnN0cmluZywgaC0+cm9vdC51LmRlZi52YWx1ZSwKKysJICAgaC0+cm9vdC51LmRlZi52YWx1ZSArIGhhdnItPnN5bV9mcmFnLT5vZmZzZXRfYWRqdXN0KTsKKysgICAgICBoLT5yb290LnUuZGVmLnZhbHVlICs9IGhhdnItPnN5bV9mcmFnLT5vZmZzZXRfYWRqdXN0OworKyAgICB9CisrICByZXR1cm4gVFJVRTsKKyt9CisrCisrc3RhdGljIGJmZF9ib29sZWFuCisrYWRqdXN0X3N5bXMoc3RydWN0IGJmZF9saW5rX2luZm8gKmluZm8pCisreworKyAgc3RydWN0IGVsZl9hdnIzMl9saW5rX2hhc2hfdGFibGUgKmh0YWI7CisrICBiZmQgKmFiZmQ7CisrCisrICBodGFiID0gYXZyMzJfZWxmX2hhc2hfdGFibGUoaW5mbyk7CisrICBlbGZfbGlua19oYXNoX3RyYXZlcnNlKCZodGFiLT5yb290LCBhZGp1c3RfZ2xvYmFsX3N5bWJvbCwgaW5mbyk7CisrCisrICBmb3IgKGFiZmQgPSBpbmZvLT5pbnB1dF9iZmRzOyBhYmZkOyBhYmZkID0gYWJmZC0+bGlua19uZXh0KQorKyAgICB7CisrICAgICAgRWxmX0ludGVybmFsX1N5bSAqaXN5bWJ1ZjsKKysgICAgICBzdHJ1Y3QgZnJhZ21lbnQgKipsb2NhbF9zeW1fZnJhZywgKmZyYWc7CisrICAgICAgdW5zaWduZWQgaW50IGksIHN5bV9jb3VudDsKKysKKysgICAgICBzeW1fY291bnQgPSBlbGZfdGRhdGEoYWJmZCktPnN5bXRhYl9oZHIuc2hfaW5mbzsKKysgICAgICBpZiAoc3ltX2NvdW50ID09IDApCisrCWNvbnRpbnVlOworKworKyAgICAgIGlzeW1idWYgPSByZXRyaWV2ZV9sb2NhbF9zeW1zKGFiZmQsIGluZm8tPmtlZXBfbWVtb3J5KTsKKysgICAgICBpZiAoIWlzeW1idWYpCisrCXJldHVybiBGQUxTRTsKKysKKysgICAgICBsb2NhbF9zeW1fZnJhZyA9IGVsZl90ZGF0YShhYmZkKS0+bG9jYWxfc3ltX2ZyYWc7CisrCisrICAgICAgZm9yIChpID0gMDsgaSA8IHN5bV9jb3VudDsgaSsrKQorKwl7CisrCSAgZnJhZyA9IGxvY2FsX3N5bV9mcmFnW2ldOworKwkgIGlmIChmcmFnKQorKwkgICAgeworKwkgICAgICBSREJHKCJhZGp1c3RfbG9jYWxfc3ltYm9sOiAlc1sldV0gMHglMDhseCAtPiAweCUwOGx4XG4iLAorKwkJICAgYWJmZC0+ZmlsZW5hbWUsIGksIGlzeW1idWZbaV0uc3RfdmFsdWUsCisrCQkgICBpc3ltYnVmW2ldLnN0X3ZhbHVlICsgZnJhZy0+b2Zmc2V0X2FkanVzdCk7CisrCSAgICAgIGlzeW1idWZbaV0uc3RfdmFsdWUgKz0gZnJhZy0+b2Zmc2V0X2FkanVzdDsKKysJICAgIH0KKysJfQorKworKyAgICAgIHJlbGVhc2VfbG9jYWxfc3ltcyhhYmZkLCBpc3ltYnVmKTsKKysgICAgfQorKworKyAgaHRhYi0+c3ltYm9sc19hZGp1c3RlZCA9IFRSVUU7CisrICByZXR1cm4gVFJVRTsKKyt9CisrCisrc3RhdGljIGJmZF9ib29sZWFuCisrYWRqdXN0X3JlbG9jcyhiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWMsIHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvKQorK3sKKysgIHN0cnVjdCBhdnIzMl9yZWxheF9kYXRhICpyZDsKKysgIEVsZl9JbnRlcm5hbF9SZWxhICpyZWxvY3M7CisrICBFbGZfSW50ZXJuYWxfU2hkciAqc3ltdGFiX2hkcjsKKysgIHVuc2lnbmVkIGludCBpOworKyAgYmZkX2Jvb2xlYW4gcmV0ID0gRkFMU0U7CisrCisrICByZCA9IGF2cjMyX3JlbGF4X2RhdGEoc2VjKTsKKysgIGlmICghcmQtPnJlbG9jX2RhdGEpCisrICAgIHJldHVybiBUUlVFOworKworKyAgUkRCRygiYWRqdXN0X3JlbG9jczogJXM8JXM+IChjb3VudDogJXUpXG4iLCBhYmZkLT5maWxlbmFtZSwgc2VjLT5uYW1lLAorKyAgICAgICBzZWMtPnJlbG9jX2NvdW50KTsKKysKKysgIHJlbG9jcyA9IHJldHJpZXZlX2ludGVybmFsX3JlbG9jcyhhYmZkLCBzZWMsIGluZm8tPmtlZXBfbWVtb3J5KTsKKysgIGlmICghcmVsb2NzKQorKyAgICByZXR1cm4gRkFMU0U7CisrCisrICBzeW10YWJfaGRyID0gJmVsZl90ZGF0YShhYmZkKS0+c3ltdGFiX2hkcjsKKysKKysgIGZvciAoaSA9IDA7IGkgPCBzZWMtPnJlbG9jX2NvdW50OyBpKyspCisrICAgIHsKKysgICAgICBFbGZfSW50ZXJuYWxfUmVsYSAqcmVsYSA9ICZyZWxvY3NbaV07CisrICAgICAgc3RydWN0IGF2cjMyX3JlbG9jX2RhdGEgKnJfZGF0YSA9ICZyZC0+cmVsb2NfZGF0YVtpXTsKKysgICAgICBzdHJ1Y3QgZnJhZ21lbnQgKnN5bV9mcmFnOworKyAgICAgIHVuc2lnbmVkIGxvbmcgcl9zeW1uZHg7CisrCisrICAgICAgaWYgKHJfZGF0YS0+YWRkX2ZyYWcpCisrCXsKKysJICByX3N5bW5keCA9IEVMRl9SX1NZTShyZWxhLT5yX2luZm8pOworKworKwkgIGlmIChyX3N5bW5keCA8IHN5bXRhYl9oZHItPnNoX2luZm8pCisrCSAgICBzeW1fZnJhZyA9IGVsZl90ZGF0YShhYmZkKS0+bG9jYWxfc3ltX2ZyYWdbcl9zeW1uZHhdOworKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgc3RydWN0IGVsZl9saW5rX2hhc2hfZW50cnkgKmg7CisrCisrCSAgICAgIGggPSBlbGZfc3ltX2hhc2hlcyhhYmZkKVtyX3N5bW5keCAtIHN5bXRhYl9oZHItPnNoX2luZm9dOworKworKwkgICAgICB3aGlsZSAoaC0+cm9vdC50eXBlID09IGJmZF9saW5rX2hhc2hfaW5kaXJlY3QKKysJCSAgICAgfHwgaC0+cm9vdC50eXBlID09IGJmZF9saW5rX2hhc2hfd2FybmluZykKKysJCWggPSAoc3RydWN0IGVsZl9saW5rX2hhc2hfZW50cnkgKiloLT5yb290LnUuaS5saW5rOworKworKwkgICAgICBCRkRfQVNTRVJUKGgtPnJvb3QudHlwZSA9PSBiZmRfbGlua19oYXNoX2RlZmluZWQKKysJCQkgfHwgaC0+cm9vdC50eXBlID09IGJmZF9saW5rX2hhc2hfZGVmd2Vhayk7CisrCisrCSAgICAgIHN5bV9mcmFnID0gKChzdHJ1Y3QgZWxmX2F2cjMyX2xpbmtfaGFzaF9lbnRyeSAqKWgpLT5zeW1fZnJhZzsKKysJICAgIH0KKysKKysJICBSREJHKCIgICAgYWRkZW5kOiAweCUwOGx4IC0+IDB4JTA4bHhcbiIsCisrCSAgICAgICByZWxhLT5yX2FkZGVuZCwKKysJICAgICAgIHJlbGEtPnJfYWRkZW5kICsgcl9kYXRhLT5hZGRfZnJhZy0+b2Zmc2V0X2FkanVzdAorKwkgICAgICAgLSAoc3ltX2ZyYWcgPyBzeW1fZnJhZy0+b2Zmc2V0X2FkanVzdCA6IDApKTsKKysKKysJICAvKiBJZiB0aGlzIGlzIGFnYWluc3QgYSBzZWN0aW9uIHN5bWJvbCwgd2Ugd29uJ3QgZmluZCBhbnkKKysJICAgICBzeW1fZnJhZywgc28gd2UnbGwganVzdCBhZGp1c3QgdGhlIGFkZGVuZC4gICovCisrCSAgcmVsYS0+cl9hZGRlbmQgKz0gcl9kYXRhLT5hZGRfZnJhZy0+b2Zmc2V0X2FkanVzdDsKKysJICBpZiAoc3ltX2ZyYWcpCisrCSAgICByZWxhLT5yX2FkZGVuZCAtPSBzeW1fZnJhZy0+b2Zmc2V0X2FkanVzdDsKKysKKysJICBpZiAocl9kYXRhLT5zdWJfZnJhZykKKysJICAgIHsKKysJICAgICAgYmZkX2J5dGUgKmNvbnRlbnRzOworKwkgICAgICBiZmRfc2lnbmVkX3ZtYSBkaWZmOworKworKwkgICAgICBjb250ZW50cyA9IHJldHJpZXZlX2NvbnRlbnRzKGFiZmQsIHNlYywgaW5mby0+a2VlcF9tZW1vcnkpOworKwkgICAgICBpZiAoIWNvbnRlbnRzKQorKwkJZ290byBvdXQ7CisrCisrCSAgICAgIC8qIEkgcmVhbGl6ZSBub3cgdGhhdCBzdWJfZnJhZyBpcyBtaXNuYW1lZC4gIEl0J3MKKysJCSBhY3R1YWxseSBhZGRfZnJhZyB3aGljaCBpcyBzdWJ0cmFjdGVkIGluIHRoaXMKKysJCSBjYXNlLi4uICAqLworKwkgICAgICBkaWZmID0gYmZkX2dldF9zaWduZWRfMzIoYWJmZCwgY29udGVudHMgKyByZWxhLT5yX29mZnNldCk7CisrCSAgICAgIGRpZmYgKz0gKHJfZGF0YS0+c3ViX2ZyYWctPm9mZnNldF9hZGp1c3QKKysJCSAgICAgICAtIHJfZGF0YS0+YWRkX2ZyYWctPm9mZnNldF9hZGp1c3QpOworKwkgICAgICBiZmRfcHV0XzMyKGFiZmQsIGRpZmYsIGNvbnRlbnRzICsgcmVsYS0+cl9vZmZzZXQpOworKworKwkgICAgICBSREJHKCIgICAweCVseDogRElGRjMyIHVwZGF0ZWQ6IDB4JWx4XG4iLCByZWxhLT5yX29mZnNldCwgZGlmZik7CisrCisrCSAgICAgIHJlbGVhc2VfY29udGVudHMoc2VjLCBjb250ZW50cyk7CisrCSAgICB9CisrCX0KKysgICAgICBlbHNlCisrCUJGRF9BU1NFUlQoIXJfZGF0YS0+c3ViX2ZyYWcpOworKyAgICB9CisrCisrICByZXQgPSBUUlVFOworKworKyBvdXQ6CisrICByZWxlYXNlX2ludGVybmFsX3JlbG9jcyhzZWMsIHJlbG9jcyk7CisrICByZXR1cm4gcmV0OworK30KKysKKytzdGF0aWMgYmZkX2Jvb2xlYW4KKythdnIzMl9tb3ZlX2RhdGEoYmZkICphYmZkLCBhc2VjdGlvbiAqc2VjLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqaW5mbykKKyt7CisrICBzdHJ1Y3QgZWxmX2F2cjMyX2xpbmtfaGFzaF90YWJsZSAqaHRhYjsKKysgIHN0cnVjdCBhdnIzMl9yZWxheF9kYXRhICpyZDsKKysgIHN0cnVjdCBmcmFnbWVudCAqZnJhZywgKmZyYWdlbmQ7CisrICBFbGZfSW50ZXJuYWxfUmVsYSAqcmVsb2NzID0gTlVMTDsKKysgIGJmZF9ieXRlICpjb250ZW50cyA9IE5VTEw7CisrICB1bnNpZ25lZCBpbnQgaTsKKysgIGJmZF9ib29sZWFuIHJldCA9IEZBTFNFOworKworKyAgaHRhYiA9IGF2cjMyX2VsZl9oYXNoX3RhYmxlKGluZm8pOworKyAgcmQgPSBhdnIzMl9yZWxheF9kYXRhKHNlYyk7CisrCisrICBpZiAoIWh0YWItPnN5bWJvbHNfYWRqdXN0ZWQpCisrICAgIGlmICghYWRqdXN0X3N5bXMoaW5mbykpCisrICAgICAgcmV0dXJuIEZBTFNFOworKworKyAgaWYgKHJkLT5pc19yZWxheGFibGUpCisrICAgIHsKKysgICAgICAvKiBSZXNpemUgdGhlIHNlY3Rpb24gZmlyc3QsIHNvIHRoYXQgd2UgY2FuIGJlIHN1cmUgdGhhdCBlbm91Z2gKKysJIG1lbW9yeSBpcyBhbGxvY2F0ZWQgaW4gY2FzZSB0aGUgc2VjdGlvbiBoYXMgZ3Jvd24uICAqLworKyAgICAgIGlmIChzZWMtPnNpemUgPiBzZWMtPnJhd3NpemUKKysJICAmJiBlbGZfc2VjdGlvbl9kYXRhKHNlYyktPnRoaXNfaGRyLmNvbnRlbnRzKQorKwl7CisrCSAgLyogV2UgbXVzdCBub3QgdXNlIGNhY2hlZCBkYXRhIGlmIHRoZSBzZWN0aW9uIGhhcyBncm93bi4gICovCisrCSAgZnJlZShlbGZfc2VjdGlvbl9kYXRhKHNlYyktPnRoaXNfaGRyLmNvbnRlbnRzKTsKKysJICBlbGZfc2VjdGlvbl9kYXRhKHNlYyktPnRoaXNfaGRyLmNvbnRlbnRzID0gTlVMTDsKKysJfQorKworKyAgICAgIHJlbG9jcyA9IHJldHJpZXZlX2ludGVybmFsX3JlbG9jcyhhYmZkLCBzZWMsIGluZm8tPmtlZXBfbWVtb3J5KTsKKysgICAgICBpZiAoIXJlbG9jcykKKysJZ290byBvdXQ7CisrICAgICAgY29udGVudHMgPSByZXRyaWV2ZV9jb250ZW50cyhhYmZkLCBzZWMsIGluZm8tPmtlZXBfbWVtb3J5KTsKKysgICAgICBpZiAoIWNvbnRlbnRzKQorKwlnb3RvIG91dDsKKysKKysgICAgICBmcmFnZW5kID0gcmQtPmZyYWcgKyByZC0+ZnJhZ19jb3VudDsKKysKKysgICAgICBSREJHKCJtb3ZlX2RhdGE6ICVzPCVzPjogcmVsb2NzPSVwLCBjb250ZW50cz0lcFxuIiwKKysJICAgYWJmZC0+ZmlsZW5hbWUsIHNlYy0+bmFtZSwgcmVsb2NzLCBjb250ZW50cyk7CisrCisrICAgICAgLyogRmlyc3QsIG1vdmUgdGhlIGRhdGEgaW50byBwbGFjZS4gV2UgbXVzdCB0YWtlIGNhcmUgdG8gbW92ZQorKwkgZnJhZ3MgaW4gdGhlIHJpZ2h0IG9yZGVyIHNvIHRoYXQgd2UgZG9uJ3QgYWNjaWRlbnRhbGx5CisrCSBvdmVyd3JpdGUgcGFydHMgb2YgdGhlIG5leHQgZnJhZy4gICovCisrICAgICAgZm9yIChmcmFnID0gcmQtPmZyYWc7IGZyYWcgPCBmcmFnZW5kOyBmcmFnKyspCisrCXsKKysJICBSREJHKCIgICAgMHglMDhseCVjMHgleDogc2l6ZSAweCVseCVjMHgleFxuIiwKKysJICAgICAgIGZyYWctPm9mZnNldCwgZnJhZy0+b2Zmc2V0X2FkanVzdCA+PSAwID8gJysnIDogJy0nLAorKwkgICAgICAgYWJzKGZyYWctPm9mZnNldF9hZGp1c3QpLAorKwkgICAgICAgZnJhZy0+c2l6ZSwgZnJhZy0+c2l6ZV9hZGp1c3QgPj0gMCA/ICcrJyA6ICctJywKKysJICAgICAgIGFicyhmcmFnLT5zaXplX2FkanVzdCkpOworKwkgIGlmIChmcmFnLT5vZmZzZXRfYWRqdXN0ID4gMCkKKysJICAgIHsKKysJICAgICAgc3RydWN0IGZyYWdtZW50ICpwcmV2ID0gZnJhZyAtIDE7CisrCSAgICAgIHN0cnVjdCBmcmFnbWVudCAqbGFzdDsKKysKKysJICAgICAgZm9yIChsYXN0ID0gZnJhZzsgbGFzdCA8IGZyYWdlbmQgJiYgbGFzdC0+b2Zmc2V0X2FkanVzdCA+IDA7CisrCQkgICBsYXN0KyspIDsKKysKKysJICAgICAgaWYgKGxhc3QgPT0gZnJhZ2VuZCkKKysJCWxhc3QtLTsKKysKKysJICAgICAgZm9yIChmcmFnID0gbGFzdDsgZnJhZyAhPSBwcmV2OyBmcmFnLS0pCisrCQl7CisrCQkgIGlmIChmcmFnLT5vZmZzZXRfYWRqdXN0CisrCQkgICAgICAmJiBmcmFnLT5zaXplICsgZnJhZy0+c2l6ZV9hZGp1c3QgPiAwKQorKwkJICAgIHsKKysJCSAgICAgIFJEQkcoIm1lbW1vdmUgMHglbHggLT4gMHglbHggKHNpemUgJWx1KVxuIiwKKysJCQkgICBmcmFnLT5vZmZzZXQsIGZyYWctPm9mZnNldCArIGZyYWctPm9mZnNldF9hZGp1c3QsCisrCQkJICAgZnJhZy0+c2l6ZSArIGZyYWctPnNpemVfYWRqdXN0KTsKKysJCSAgICAgIG1lbW1vdmUoY29udGVudHMgKyBmcmFnLT5vZmZzZXQgKyBmcmFnLT5vZmZzZXRfYWRqdXN0LAorKwkJCSAgICAgIGNvbnRlbnRzICsgZnJhZy0+b2Zmc2V0LAorKwkJCSAgICAgIGZyYWctPnNpemUgKyBmcmFnLT5zaXplX2FkanVzdCk7CisrCQkgICAgfQorKwkJfQorKwkgICAgICBmcmFnID0gbGFzdDsKKysJICAgIH0KKysJICBlbHNlIGlmIChmcmFnLT5vZmZzZXRfYWRqdXN0ICYmIGZyYWctPnNpemUgKyBmcmFnLT5zaXplX2FkanVzdCA+IDApCisrCSAgICB7CisrCSAgICAgIFJEQkcoIm1lbW1vdmUgMHglbHggLT4gMHglbHggKHNpemUgJWx1KVxuIiwKKysJCSAgIGZyYWctPm9mZnNldCwgZnJhZy0+b2Zmc2V0ICsgZnJhZy0+b2Zmc2V0X2FkanVzdCwKKysJCSAgIGZyYWctPnNpemUgKyBmcmFnLT5zaXplX2FkanVzdCk7CisrCSAgICAgIG1lbW1vdmUoY29udGVudHMgKyBmcmFnLT5vZmZzZXQgKyBmcmFnLT5vZmZzZXRfYWRqdXN0LAorKwkJICAgICAgY29udGVudHMgKyBmcmFnLT5vZmZzZXQsCisrCQkgICAgICBmcmFnLT5zaXplICsgZnJhZy0+c2l6ZV9hZGp1c3QpOworKwkgICAgfQorKwl9CisrCisrICAgICAgaSA9IDA7CisrCisrICAgICAgZm9yIChmcmFnID0gcmQtPmZyYWc7IGZyYWcgPCBmcmFnZW5kOyBmcmFnKyspCisrCXsKKysJICBjb25zdCBzdHJ1Y3QgcmVsYXhfc3RhdGUgKnN0YXRlLCAqaXN0YXRlOworKwkgIHN0cnVjdCBhdnIzMl9yZWxvY19kYXRhICpyX2RhdGEgPSBOVUxMOworKworKwkgIGlzdGF0ZSA9ICZyZWxheF9zdGF0ZVtmcmFnLT5pbml0aWFsX3N0YXRlXTsKKysJICBzdGF0ZSA9ICZyZWxheF9zdGF0ZVtmcmFnLT5zdGF0ZV07CisrCisrCSAgaWYgKHJkLT5yZWxvY19kYXRhKQorKwkgICAgcl9kYXRhID0gJnJkLT5yZWxvY19kYXRhW2ZyYWctPnJlbGEgLSByZWxvY3NdOworKworKwkgIEJGRF9BU1NFUlQoKGxvbmcpKGZyYWctPnNpemUgKyBmcmFnLT5zaXplX2FkanVzdCkgPj0gMCk7CisrCSAgQkZEX0FTU0VSVChzdGF0ZS0+cmVmdHlwZSAhPSBSRUZfQ1BPT0wKKysJCSAgICAgfHwgcl9kYXRhLT5hZGRfZnJhZy0+cmVmY291bnQgPiAwKTsKKysKKysJICBpZiAoaXN0YXRlLT5yZWZ0eXBlID09IFJFRl9DUE9PTCAmJiBzdGF0ZS0+cmVmdHlwZSAhPSBSRUZfQ1BPT0wpCisrCSAgICB7CisrCSAgICAgIHN0cnVjdCBmcmFnbWVudCAqaWZyYWc7CisrCisrCSAgICAgIC8qIEFuIGluZGlyZWN0IHJlZmVyZW5jZSB0aHJvdWdoIHRoZSBjcG9vbCBoYXMgYmVlbgorKwkJIGNvbnZlcnRlZCB0byBhIGRpcmVjdCByZWZlcmVuY2UuICBXZSBtdXN0IHVwZGF0ZSB0aGUKKysJCSByZWxvYyB0byBwb2ludCB0byB0aGUgc3ltYm9sIGl0c2VsZiBpbnN0ZWFkIG9mIHRoZQorKwkJIGNvbnN0YW50IHBvb2wgZW50cnkuICBUaGUgcmVsb2MgdHlwZSB3aWxsIGJlIHVwZGF0ZWQKKysJCSBsYXRlci4gICovCisrCSAgICAgIGlmcmFnID0gcl9kYXRhLT5hZGRfZnJhZzsKKysJICAgICAgZnJhZy0+cmVsYS0+cl9pbmZvID0gaWZyYWctPnJlbGEtPnJfaW5mbzsKKysJICAgICAgZnJhZy0+cmVsYS0+cl9hZGRlbmQgPSBpZnJhZy0+cmVsYS0+cl9hZGRlbmQ7CisrCisrCSAgICAgIC8qIENvcHkgdGhlIHJlbG9jIGRhdGEgc28gdGhlIGFkZGVuZCB3aWxsIGJlIGFkanVzdGVkCisrCQkgY29ycmVjdGx5IGxhdGVyLiAgKi8KKysJICAgICAgKnJfZGF0YSA9IHJkLT5yZWxvY19kYXRhW2lmcmFnLT5yZWxhIC0gcmVsb2NzXTsKKysJICAgIH0KKysKKysJICAvKiBNb3ZlIGFsbCByZWxvY3MgY292ZXJlZCBieSB0aGlzIGZyYWcuICAqLworKwkgIGlmIChmcmFnLT5yZWxhKQorKwkgICAgQkZEX0FTU0VSVCgmcmVsb2NzW2ldIDw9IGZyYWctPnJlbGEpOworKwkgIGVsc2UKKysJICAgIEJGRF9BU1NFUlQoKGZyYWcgKyAxKSA9PSBmcmFnZW5kICYmIGZyYWctPnN0YXRlID09IFJTX05PTkUpOworKworKwkgIGlmIChmcmFnID09IHJkLT5mcmFnKQorKwkgICAgQkZEX0FTU0VSVChpID09IDApOworKwkgIGVsc2UKKysJICAgIEJGRF9BU1NFUlQoJnJlbG9jc1tpXSA+IGZyYWdbLTFdLnJlbGEpOworKworKwkgIC8qIElmIG5vbi1udWxsLCBmcmFnLT5yZWxhIGlzIHRoZSBsYXN0IHJlbG9jYXRpb24gaW4gdGhlCisrCSAgICAgZnJhZ21lbnQuICBmcmFnLT5yZWxhIGNhbiBvbmx5IGJlIG51bGwgaW4gdGhlIGxhc3QKKysJICAgICBmcmFnbWVudCwgc28gaW4gdGhhdCBjYXNlLCB3ZSdsbCBqdXN0IGRvIHRoZSByZXN0LiAgKi8KKysJICBmb3IgKDsgKGkgPCBzZWMtPnJlbG9jX2NvdW50CisrCQkgICYmICghZnJhZy0+cmVsYSB8fCAmcmVsb2NzW2ldIDw9IGZyYWctPnJlbGEpKTsgaSsrKQorKwkgICAgeworKwkgICAgICBSREJHKCJbJTR1XSByX29mZnNldCAweCUwOGx4IC0+IDB4JTA4bHhcbiIsIGksIHJlbG9jc1tpXS5yX29mZnNldCwKKysJCSAgIHJlbG9jc1tpXS5yX29mZnNldCArIGZyYWctPm9mZnNldF9hZGp1c3QpOworKwkgICAgICByZWxvY3NbaV0ucl9vZmZzZXQgKz0gZnJhZy0+b2Zmc2V0X2FkanVzdDsKKysJICAgIH0KKysKKysJICBpZiAoZnJhZy0+cmVmY291bnQgPT0gMCkKKysJICAgIHsKKysJICAgICAgLyogSWYgdGhpcyBmcmFnIGlzIHRvIGJlIGRpc2NhcmRlZCwgbWFrZSBzdXJlIHdlIHdvbid0CisrCQkgcmVsb2NhdGUgaXQgbGF0ZXIgb24uICAqLworKwkgICAgICBCRkRfQVNTRVJUKGZyYWctPnN0YXRlID09IFJTX0NQRU5UKTsKKysJICAgICAgZnJhZy0+cmVsYS0+cl9pbmZvID0gRUxGX1JfSU5GTyhFTEZfUl9TWU0oZnJhZy0+cmVsYS0+cl9pbmZvKSwKKysJCQkJCSAgICBSX0FWUjMyX05PTkUpOworKwkgICAgfQorKwkgIGVsc2UgaWYgKGZyYWctPnN0YXRlID09IFJTX0FMSUdOKQorKwkgICAgeworKwkgICAgICBiZmRfdm1hIGFkZHIsIGFkZHJfZW5kOworKworKwkgICAgICBhZGRyID0gZnJhZy0+cmVsYS0+cl9vZmZzZXQ7CisrCSAgICAgIGFkZHJfZW5kID0gKGZyYWctPm9mZnNldCArIGZyYWctPm9mZnNldF9hZGp1c3QKKysJCQkgICsgZnJhZy0+c2l6ZSArIGZyYWctPnNpemVfYWRqdXN0KTsKKysKKysJICAgICAgLyogSWYgdGhlIHNlY3Rpb24gaXMgZXhlY3V0YWJsZSwgaW5zZXJ0IE5PUHMuCisrCQkgT3RoZXJ3aXNlLCBpbnNlcnQgemVyb2VzLiAgKi8KKysJICAgICAgaWYgKHNlYy0+ZmxhZ3MgJiBTRUNfQ09ERSkKKysJCXsKKysJCSAgaWYgKGFkZHIgJiAxKQorKwkJICAgIHsKKysJCSAgICAgIGJmZF9wdXRfOChhYmZkLCAwLCBjb250ZW50cyArIGFkZHIpOworKwkJICAgICAgYWRkcisrOworKwkJICAgIH0KKysKKysJCSAgQkZEX0FTU0VSVCghKChhZGRyX2VuZCAtIGFkZHIpICYgMSkpOworKworKwkJICB3aGlsZSAoYWRkciA8IGFkZHJfZW5kKQorKwkJICAgIHsKKysJCSAgICAgIGJmZF9wdXRfMTYoYWJmZCwgTk9QX09QQ09ERSwgY29udGVudHMgKyBhZGRyKTsKKysJCSAgICAgIGFkZHIgKz0gMjsKKysJCSAgICB9CisrCQl9CisrCSAgICAgIGVsc2UKKysJCW1lbXNldChjb250ZW50cyArIGFkZHIsIDAsIGFkZHJfZW5kIC0gYWRkcik7CisrCSAgICB9CisrCSAgZWxzZSBpZiAoc3RhdGUtPm9wY29kZV9tYXNrKQorKwkgICAgeworKwkgICAgICBiZmRfdm1hIGluc247CisrCisrCSAgICAgIC8qIFVwZGF0ZSB0aGUgb3Bjb2RlIGFuZCB0aGUgcmVsb2NhdGlvbiB0eXBlIHVubGVzcyBpdCdzIGEKKysJCSAic3BlY2lhbCIgcmVsYXggc3RhdGUgKGkuZS4gUlNfTk9ORSwgUlNfQUxJR04gb3IKKysJCSBSU19DUEVOVC4pLCBpbiB3aGljaCBjYXNlIHRoZSBvcGNvZGUgbWFzayBpcyB6ZXJvLiAgKi8KKysJICAgICAgaW5zbiA9IGJmZF9nZXRfMzIoYWJmZCwgY29udGVudHMgKyBmcmFnLT5yZWxhLT5yX29mZnNldCk7CisrCSAgICAgIGluc24gJj0gfnN0YXRlLT5vcGNvZGVfbWFzazsKKysJICAgICAgaW5zbiB8PSBzdGF0ZS0+b3Bjb2RlOworKwkgICAgICBSREJHKCIgICAgMHglbHg6IGluc2VydGluZyBpbnNuICUwOGx4XG4iLAorKwkJICAgZnJhZy0+cmVsYS0+cl9vZmZzZXQsIGluc24pOworKwkgICAgICBiZmRfcHV0XzMyKGFiZmQsIGluc24sIGNvbnRlbnRzICsgZnJhZy0+cmVsYS0+cl9vZmZzZXQpOworKworKwkgICAgICBmcmFnLT5yZWxhLT5yX2luZm8gPSBFTEZfUl9JTkZPKEVMRl9SX1NZTShmcmFnLT5yZWxhLT5yX2luZm8pLAorKwkJCQkJICAgICAgc3RhdGUtPnJfdHlwZSk7CisrCSAgICB9CisrCisrCSAgaWYgKChmcmFnICsgMSkgPT0gZnJhZ2VuZCkKKysJICAgIEJGRF9BU1NFUlQoKGZyYWctPm9mZnNldCArIGZyYWctPnNpemUgKyBmcmFnLT5vZmZzZXRfYWRqdXN0CisrCQkJKyBmcmFnLT5zaXplX2FkanVzdCkgPT0gc2VjLT5zaXplKTsKKysJICBlbHNlCisrCSAgICBCRkRfQVNTRVJUKChmcmFnLT5vZmZzZXQgKyBmcmFnLT5zaXplICsgZnJhZy0+b2Zmc2V0X2FkanVzdAorKwkJCSsgZnJhZy0+c2l6ZV9hZGp1c3QpCisrCQkgICAgICAgPT0gKGZyYWdbMV0ub2Zmc2V0ICsgZnJhZ1sxXS5vZmZzZXRfYWRqdXN0KSk7CisrCX0KKysgICAgfQorKworKyAgLyogQWRqdXN0IHJlbG9jIGFkZGVuZHMgYW5kIERJRkYzMiBkaWZmZXJlbmNlcyAqLworKyAgaWYgKCFhZGp1c3RfcmVsb2NzKGFiZmQsIHNlYywgaW5mbykpCisrICAgIHJldHVybiBGQUxTRTsKKysKKysgIHJldCA9IFRSVUU7CisrCisrIG91dDoKKysgIHJlbGVhc2VfY29udGVudHMoc2VjLCBjb250ZW50cyk7CisrICByZWxlYXNlX2ludGVybmFsX3JlbG9jcyhzZWMsIHJlbG9jcyk7CisrICByZXR1cm4gcmV0OworK30KKysKKytzdGF0aWMgYmZkX2Jvb2xlYW4KKythdnIzMl9lbGZfcmVsYXhfc2VjdGlvbihiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWMsCisrCQkJc3RydWN0IGJmZF9saW5rX2luZm8gKmluZm8sIGJmZF9ib29sZWFuICphZ2FpbikKKyt7CisrICBzdHJ1Y3QgZWxmX2F2cjMyX2xpbmtfaGFzaF90YWJsZSAqaHRhYjsKKysgIHN0cnVjdCBhdnIzMl9yZWxheF9kYXRhICpyZDsKKysKKysgICphZ2FpbiA9IEZBTFNFOworKyAgaWYgKGluZm8tPnJlbG9jYXRhYmxlKQorKyAgICByZXR1cm4gVFJVRTsKKysKKysgIGh0YWIgPSBhdnIzMl9lbGZfaGFzaF90YWJsZShpbmZvKTsKKysgIGlmICgoIShzZWMtPmZsYWdzICYgU0VDX1JFTE9DKSB8fCBzZWMtPnJlbG9jX2NvdW50ID09IDApCisrICAgICAgJiYgc2VjICE9IGh0YWItPnNnb3QpCisrICAgIHJldHVybiBUUlVFOworKworKyAgaWYgKCFodGFiLT5yZWxvY2F0aW9uc19hbmFseXplZCkKKysgICAgeworKyAgICAgIGlmICghYW5hbHl6ZV9yZWxvY2F0aW9ucyhpbmZvKSkKKysJcmV0dXJuIEZBTFNFOworKyAgICAgIGh0YWItPnJlbG9jYXRpb25zX2FuYWx5emVkID0gVFJVRTsKKysgICAgfQorKworKyAgcmQgPSBhdnIzMl9yZWxheF9kYXRhKHNlYyk7CisrCisrICBpZiAocmQtPml0ZXJhdGlvbiAhPSBodGFiLT5yZWxheF9pdGVyYXRpb24pCisrICAgIHsKKysgICAgICBpZiAoIWh0YWItPnJlcGVhdF9wYXNzKQorKwlodGFiLT5yZWxheF9wYXNzKys7CisrICAgICAgaHRhYi0+cmVsYXhfaXRlcmF0aW9uKys7CisrICAgICAgaHRhYi0+cmVwZWF0X3Bhc3MgPSBGQUxTRTsKKysgICAgfQorKworKyAgcmQtPml0ZXJhdGlvbisrOworKworKyAgc3dpdGNoIChodGFiLT5yZWxheF9wYXNzKQorKyAgICB7CisrICAgIGNhc2UgUkVMQVhfUEFTU19TSVpFX0ZSQUdTOgorKyAgICAgIGlmICghYXZyMzJfc2l6ZV9mcmFncyhhYmZkLCBzZWMsIGluZm8pKQorKwlyZXR1cm4gRkFMU0U7CisrICAgICAgKmFnYWluID0gVFJVRTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBSRUxBWF9QQVNTX01PVkVfREFUQToKKysgICAgICBpZiAoIWF2cjMyX21vdmVfZGF0YShhYmZkLCBzZWMsIGluZm8pKQorKwlyZXR1cm4gRkFMU0U7CisrICAgICAgYnJlYWs7CisrICB9CisrCisrICByZXR1cm4gVFJVRTsKKyt9CisrCisrCisrLyogUmVsb2NhdGlvbiAqLworKworK3N0YXRpYyBiZmRfcmVsb2Nfc3RhdHVzX3R5cGUKKythdnIzMl9jaGVja19yZWxvY192YWx1ZShhc2VjdGlvbiAqc2VjLCBFbGZfSW50ZXJuYWxfUmVsYSAqcmVsYSwKKysJCQliZmRfc2lnbmVkX3ZtYSByZWxvY2F0aW9uLCByZWxvY19ob3d0b190eXBlICpob3d0byk7Cisrc3RhdGljIGJmZF9yZWxvY19zdGF0dXNfdHlwZQorK2F2cjMyX2ZpbmFsX2xpbmtfcmVsb2NhdGUocmVsb2NfaG93dG9fdHlwZSAqaG93dG8sIGJmZCAqaW5wdXRfYmZkLAorKwkJCSAgYXNlY3Rpb24gKmlucHV0X3NlY3Rpb24sIGJmZF9ieXRlICpjb250ZW50cywKKysJCQkgIEVsZl9JbnRlcm5hbF9SZWxhICpyZWwsIGJmZF92bWEgdmFsdWUpOworK3N0YXRpYyBiZmRfYm9vbGVhbgorK2F2cjMyX2VsZl9yZWxvY2F0ZV9zZWN0aW9uKGJmZCAqb3V0cHV0X2JmZCwgc3RydWN0IGJmZF9saW5rX2luZm8gKmluZm8sCisrCQkJICAgYmZkICppbnB1dF9iZmQsIGFzZWN0aW9uICppbnB1dF9zZWN0aW9uLAorKwkJCSAgIGJmZF9ieXRlICpjb250ZW50cywgRWxmX0ludGVybmFsX1JlbGEgKnJlbG9jcywKKysJCQkgICBFbGZfSW50ZXJuYWxfU3ltICpsb2NhbF9zeW1zLAorKwkJCSAgIGFzZWN0aW9uICoqbG9jYWxfc2VjdGlvbnMpOworKworKworKyNkZWZpbmUgc3ltYm9sX2FkZHJlc3Moc3ltYm9sKSBcCisrICBzeW1ib2wtPnZhbHVlICsgc3ltYm9sLT5zZWN0aW9uLT5vdXRwdXRfc2VjdGlvbi0+dm1hIFwKKysgICsgc3ltYm9sLT5zZWN0aW9uLT5vdXRwdXRfb2Zmc2V0CisrCisrI2RlZmluZSBhdnIzMl9lbGZfaW5zZXJ0X2ZpZWxkKHNpemUsIGZpZWxkLCBhYmZkLCByZWxvY19lbnRyeSwgZGF0YSkJXAorKyAgZG8JCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgdW5zaWduZWQgbG9uZyB4OwkJCQkJCQlcCisrICAgICAgeCA9IGJmZF9nZXRfIyNzaXplIChhYmZkLCBkYXRhICsgcmVsb2NfZW50cnktPmFkZHJlc3MpOwkJXAorKyAgICAgIHggJj0gfnJlbG9jX2VudHJ5LT5ob3d0by0+ZHN0X21hc2s7CQkJCVwKKysgICAgICB4IHw9IGZpZWxkICYgcmVsb2NfZW50cnktPmhvd3RvLT5kc3RfbWFzazsJCQlcCisrICAgICAgYmZkX3B1dF8jI3NpemUgKGFiZmQsIChiZmRfdm1hKSB4LCBkYXRhICsgcmVsb2NfZW50cnktPmFkZHJlc3MpOwlcCisrICAgIH0JCQkJCQkJCQlcCisrICB3aGlsZSgwKQorKworK3N0YXRpYyBiZmRfcmVsb2Nfc3RhdHVzX3R5cGUKKythdnIzMl9jaGVja19yZWxvY192YWx1ZShhc2VjdGlvbiAqc2VjIEFUVFJJQlVURV9VTlVTRUQsCisrCQkJRWxmX0ludGVybmFsX1JlbGEgKnJlbGEgQVRUUklCVVRFX1VOVVNFRCwKKysJCQliZmRfc2lnbmVkX3ZtYSByZWxvY2F0aW9uLAorKwkJCXJlbG9jX2hvd3RvX3R5cGUgKmhvd3RvKQorK3sKKysgIGJmZF92bWEgcmVsb2NfdTsKKysKKysgIC8qIFdlIHRha2UgImNvbXBsYWluX292ZXJmbG93X2RvbnQiIHRvIG1lYW4gImRvbid0IGNvbXBsYWluIG9uCisrICAgICBhbGlnbm1lbnQgZWl0aGVyIi4gVGhpcyB3YXksIHdlIGRvbid0IGhhdmUgdG8gc3BlY2lhbC1jYXNlCisrICAgICBSX0FWUjMyX0hJMTYgKi8KKysgIGlmIChob3d0by0+Y29tcGxhaW5fb25fb3ZlcmZsb3cgPT0gY29tcGxhaW5fb3ZlcmZsb3dfZG9udCkKKysgICAgcmV0dXJuIGJmZF9yZWxvY19vazsKKysKKysgIC8qIENoZWNrIGlmIHRoZSB2YWx1ZSBpcyBjb3JyZWN0bHkgYWxpZ25lZCAqLworKyAgaWYgKHJlbG9jYXRpb24gJiAoKDEgPDwgaG93dG8tPnJpZ2h0c2hpZnQpIC0gMSkpCisrICAgIHsKKysgICAgICBSREJHKCJtaXNhbGlnbmVkOiAlczwlcyslbHg+OiAlczogMHglbHggKGFsaWduICV1KVxuIiwKKysJICAgc2VjLT5vd25lci0+ZmlsZW5hbWUsIHNlYy0+bmFtZSwgcmVsYS0+cl9vZmZzZXQsCisrCSAgIGhvd3RvLT5uYW1lLCByZWxvY2F0aW9uLCBob3d0by0+cmlnaHRzaGlmdCk7CisrICAgICAgcmV0dXJuIGJmZF9yZWxvY19vdmVyZmxvdzsKKysgICAgfQorKworKyAgLyogTm93LCBnZXQgcmlkIG9mIHRoZSB1bm5lY2Vzc2FyeSBiaXRzICovCisrICByZWxvY2F0aW9uID4+PSBob3d0by0+cmlnaHRzaGlmdDsKKysgIHJlbG9jX3UgPSAoYmZkX3ZtYSlyZWxvY2F0aW9uOworKworKyAgc3dpdGNoIChob3d0by0+Y29tcGxhaW5fb25fb3ZlcmZsb3cpCisrICAgIHsKKysgICAgY2FzZSBjb21wbGFpbl9vdmVyZmxvd191bnNpZ25lZDoKKysgICAgY2FzZSBjb21wbGFpbl9vdmVyZmxvd19iaXRmaWVsZDoKKysgICAgICBpZiAocmVsb2NfdSA+ICh1bnNpZ25lZCBsb25nKSgoMSA8PCBob3d0by0+Yml0c2l6ZSkgLSAxKSkKKysJeworKwkgIFJEQkcoInVuc2lnbmVkIG92ZXJmbG93OiAlczwlcyslbHg+OiAlczogMHglbHggKHNpemUgJXUpXG4iLAorKwkgICAgICAgc2VjLT5vd25lci0+ZmlsZW5hbWUsIHNlYy0+bmFtZSwgcmVsYS0+cl9vZmZzZXQsCisrCSAgICAgICBob3d0by0+bmFtZSwgcmVsb2NfdSwgaG93dG8tPmJpdHNpemUpOworKwkgIFJEQkcoInJlbG9jIHZtYTogMHglbHhcbiIsCisrCSAgICAgICBzZWMtPm91dHB1dF9zZWN0aW9uLT52bWEgKyBzZWMtPm91dHB1dF9vZmZzZXQgKyByZWxhLT5yX29mZnNldCk7CisrCisrCSAgcmV0dXJuIGJmZF9yZWxvY19vdmVyZmxvdzsKKysJfQorKyAgICAgIGJyZWFrOworKyAgICBjYXNlIGNvbXBsYWluX292ZXJmbG93X3NpZ25lZDoKKysgICAgICBpZiAocmVsb2NhdGlvbiA+ICgxIDw8IChob3d0by0+Yml0c2l6ZSAtIDEpKSAtIDEpCisrCXsKKysJICBSREJHKCJzaWduZWQgb3ZlcmZsb3c6ICVzPCVzKyVseD46ICVzOiAweCVseCAoc2l6ZSAldSlcbiIsCisrCSAgICAgICBzZWMtPm93bmVyLT5maWxlbmFtZSwgc2VjLT5uYW1lLCByZWxhLT5yX29mZnNldCwKKysJICAgICAgIGhvd3RvLT5uYW1lLCByZWxvY191LCBob3d0by0+Yml0c2l6ZSk7CisrCSAgUkRCRygicmVsb2Mgdm1hOiAweCVseFxuIiwKKysJICAgICAgIHNlYy0+b3V0cHV0X3NlY3Rpb24tPnZtYSArIHNlYy0+b3V0cHV0X29mZnNldCArIHJlbGEtPnJfb2Zmc2V0KTsKKysKKysJICByZXR1cm4gYmZkX3JlbG9jX292ZXJmbG93OworKwl9CisrICAgICAgaWYgKHJlbG9jYXRpb24gPCAtKDEgPDwgKGhvd3RvLT5iaXRzaXplIC0gMSkpKQorKwl7CisrCSAgUkRCRygic2lnbmVkIG92ZXJmbG93OiAlczwlcyslbHg+OiAlczogLTB4JWx4IChzaXplICV1KVxuIiwKKysJICAgICAgIHNlYy0+b3duZXItPmZpbGVuYW1lLCBzZWMtPm5hbWUsIHJlbGEtPnJfb2Zmc2V0LAorKwkgICAgICAgaG93dG8tPm5hbWUsIC1yZWxvY2F0aW9uLCBob3d0by0+Yml0c2l6ZSk7CisrCSAgUkRCRygicmVsb2Mgdm1hOiAweCVseFxuIiwKKysJICAgICAgIHNlYy0+b3V0cHV0X3NlY3Rpb24tPnZtYSArIHNlYy0+b3V0cHV0X29mZnNldCArIHJlbGEtPnJfb2Zmc2V0KTsKKysKKysJICByZXR1cm4gYmZkX3JlbG9jX292ZXJmbG93OworKwl9CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgYWJvcnQoKTsKKysgICAgfQorKworKyAgcmV0dXJuIGJmZF9yZWxvY19vazsKKyt9CisrCisrCisrc3RhdGljIGJmZF9yZWxvY19zdGF0dXNfdHlwZQorK2F2cjMyX2ZpbmFsX2xpbmtfcmVsb2NhdGUocmVsb2NfaG93dG9fdHlwZSAqaG93dG8sCisrCQkJICBiZmQgKmlucHV0X2JmZCwKKysJCQkgIGFzZWN0aW9uICppbnB1dF9zZWN0aW9uLAorKwkJCSAgYmZkX2J5dGUgKmNvbnRlbnRzLAorKwkJCSAgRWxmX0ludGVybmFsX1JlbGEgKnJlbCwKKysJCQkgIGJmZF92bWEgdmFsdWUpCisreworKyAgYmZkX3ZtYSBmaWVsZDsKKysgIGJmZF92bWEgcmVsb2NhdGlvbjsKKysgIGJmZF9yZWxvY19zdGF0dXNfdHlwZSBzdGF0dXM7CisrICBiZmRfYnl0ZSAqcCA9IGNvbnRlbnRzICsgcmVsLT5yX29mZnNldDsKKysgIHVuc2lnbmVkIGxvbmcgeDsKKysKKysgIHByX2RlYnVnKCIgICg2YikgZmluYWwgbGluayByZWxvY2F0ZVxuIik7CisrCisrICAvKiBTYW5pdHkgY2hlY2sgdGhlIGFkZHJlc3MgKi8KKysgIGlmIChyZWwtPnJfb2Zmc2V0ID4gaW5wdXRfc2VjdGlvbi0+c2l6ZSkKKysgICAgeworKyAgICAgICgqX2JmZF9lcnJvcl9oYW5kbGVyKQorKwkoIiVCOiAlQSsweCVseDogb2Zmc2V0IG91dCBvZiByYW5nZSAoc2VjdGlvbiBzaXplOiAweCVseCkiLAorKwkgaW5wdXRfYmZkLCBpbnB1dF9zZWN0aW9uLCByZWwtPnJfb2Zmc2V0LCBpbnB1dF9zZWN0aW9uLT5zaXplKTsKKysgICAgICByZXR1cm4gYmZkX3JlbG9jX291dG9mcmFuZ2U7CisrICAgIH0KKysKKysgIHJlbG9jYXRpb24gPSB2YWx1ZSArIHJlbC0+cl9hZGRlbmQ7CisrCisrICBpZiAoaG93dG8tPnBjX3JlbGF0aXZlKQorKyAgICB7CisrICAgICAgYmZkX3ZtYSBhZGRyOworKworKyAgICAgIGFkZHIgPSBpbnB1dF9zZWN0aW9uLT5vdXRwdXRfc2VjdGlvbi0+dm1hCisrCSsgaW5wdXRfc2VjdGlvbi0+b3V0cHV0X29mZnNldCArIHJlbC0+cl9vZmZzZXQ7CisrICAgICAgYWRkciAmPSB+MFVMIDw8IGhvd3RvLT5yaWdodHNoaWZ0OworKyAgICAgIHJlbG9jYXRpb24gLT0gYWRkcjsKKysgICAgfQorKworKyAgc3dpdGNoIChFTEYzMl9SX1RZUEUocmVsLT5yX2luZm8pKQorKyAgICB7CisrICAgIGNhc2UgUl9BVlIzMl8xNk5fUENSRUw6CisrICAgICAgLyogc3ViIHJlZywgcGMsIC4gLSAoc3ltICsgYWRkZW5kKSAqLworKyAgICAgIHJlbG9jYXRpb24gPSAtcmVsb2NhdGlvbjsKKysgICAgICBicmVhazsKKysgICAgfQorKworKyAgc3RhdHVzID0gYXZyMzJfY2hlY2tfcmVsb2NfdmFsdWUoaW5wdXRfc2VjdGlvbiwgcmVsLCByZWxvY2F0aW9uLCBob3d0byk7CisrCisrICByZWxvY2F0aW9uID4+PSBob3d0by0+cmlnaHRzaGlmdDsKKysgIGlmIChob3d0by0+Yml0c2l6ZSA9PSAyMSkKKysgICAgZmllbGQgPSAocmVsb2NhdGlvbiAmIDB4ZmZmZikKKysgICAgICB8ICgocmVsb2NhdGlvbiAmIDB4MTAwMDApIDw8IDQpCisrICAgICAgfCAoKHJlbG9jYXRpb24gJiAweDFlMDAwMCkgPDwgOCk7CisrICBlbHNlIGlmIChob3d0by0+Yml0c2l6ZSA9PSAxMikKKysgICAgZmllbGQgPSAocmVsb2NhdGlvbiAmIDB4ZmYpIHwgKChyZWxvY2F0aW9uICYgMHhmMDApIDw8IDQpOworKyAgZWxzZSBpZiAoaG93dG8tPmJpdHNpemUgPT0gMTApCisrICAgIGZpZWxkID0gKChyZWxvY2F0aW9uICYgMHhmZikgPDwgNCkKKysgICAgICB8ICgocmVsb2NhdGlvbiAmIDB4MzAwKSA+PiA4KTsKKysgIGVsc2UKKysgICAgZmllbGQgPSByZWxvY2F0aW9uIDw8IGhvd3RvLT5iaXRwb3M7CisrCisrICBzd2l0Y2ggKGhvd3RvLT5zaXplKQorKyAgICB7CisrICAgIGNhc2UgMDoKKysgICAgICB4ID0gYmZkX2dldF84IChpbnB1dF9iZmQsIHApOworKyAgICAgIHggJj0gfmhvd3RvLT5kc3RfbWFzazsKKysgICAgICB4IHw9IGZpZWxkICYgaG93dG8tPmRzdF9tYXNrOworKyAgICAgIGJmZF9wdXRfOCAoaW5wdXRfYmZkLCAoYmZkX3ZtYSkgeCwgcCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgMToKKysgICAgICB4ID0gYmZkX2dldF8xNiAoaW5wdXRfYmZkLCBwKTsKKysgICAgICB4ICY9IH5ob3d0by0+ZHN0X21hc2s7CisrICAgICAgeCB8PSBmaWVsZCAmIGhvd3RvLT5kc3RfbWFzazsKKysgICAgICBiZmRfcHV0XzE2IChpbnB1dF9iZmQsIChiZmRfdm1hKSB4LCBwKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSAyOgorKyAgICAgIHggPSBiZmRfZ2V0XzMyIChpbnB1dF9iZmQsIHApOworKyAgICAgIHggJj0gfmhvd3RvLT5kc3RfbWFzazsKKysgICAgICB4IHw9IGZpZWxkICYgaG93dG8tPmRzdF9tYXNrOworKyAgICAgIGJmZF9wdXRfMzIgKGlucHV0X2JmZCwgKGJmZF92bWEpIHgsIHApOworKyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIGFib3J0KCk7CisrICAgIH0KKysKKysgIHJldHVybiBzdGF0dXM7CisrfQorKworKy8qICg2KSBBcHBseSByZWxvY2F0aW9ucyB0byB0aGUgbm9ybWFsIChub24tZHluYW1pYykgc2VjdGlvbnMgKi8KKysKKytzdGF0aWMgYmZkX2Jvb2xlYW4KKythdnIzMl9lbGZfcmVsb2NhdGVfc2VjdGlvbihiZmQgKm91dHB1dF9iZmQsIHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvLAorKwkJCSAgIGJmZCAqaW5wdXRfYmZkLCBhc2VjdGlvbiAqaW5wdXRfc2VjdGlvbiwKKysJCQkgICBiZmRfYnl0ZSAqY29udGVudHMsIEVsZl9JbnRlcm5hbF9SZWxhICpyZWxvY3MsCisrCQkJICAgRWxmX0ludGVybmFsX1N5bSAqbG9jYWxfc3ltcywKKysJCQkgICBhc2VjdGlvbiAqKmxvY2FsX3NlY3Rpb25zKQorK3sKKysgIHN0cnVjdCBlbGZfYXZyMzJfbGlua19oYXNoX3RhYmxlICpodGFiOworKyAgRWxmX0ludGVybmFsX1NoZHIgKnN5bXRhYl9oZHI7CisrICBFbGZfSW50ZXJuYWxfUmVsYSAqcmVsLCAqcmVsZW5kOworKyAgc3RydWN0IGVsZl9saW5rX2hhc2hfZW50cnkgKipzeW1faGFzaGVzOworKyAgc3RydWN0IGdvdF9lbnRyeSAqKmxvY2FsX2dvdF9lbnRzOworKyAgYXNlY3Rpb24gKnNnb3Q7CisrICBhc2VjdGlvbiAqc3JlbGdvdDsKKysKKysgIHByX2RlYnVnKCIoNikgcmVsb2NhdGUgc2VjdGlvbiAlczo8JXM+IChzaXplIDB4JWx4KVxuIiwKKysJICAgaW5wdXRfYmZkLT5maWxlbmFtZSwgaW5wdXRfc2VjdGlvbi0+bmFtZSwgaW5wdXRfc2VjdGlvbi0+c2l6ZSk7CisrCisrICAvKiBJZiB3ZSdyZSBkb2luZyBhIHBhcnRpYWwgbGluaywgd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZyBzaW5jZQorKyAgICAgd2UncmUgdXNpbmcgUkVMQSByZWxvY2F0aW9ucyAqLworKyAgaWYgKGluZm8tPnJlbG9jYXRhYmxlKQorKyAgICByZXR1cm4gVFJVRTsKKysKKysgIGh0YWIgPSBhdnIzMl9lbGZfaGFzaF90YWJsZShpbmZvKTsKKysgIHN5bXRhYl9oZHIgPSAmZWxmX3RkYXRhKGlucHV0X2JmZCktPnN5bXRhYl9oZHI7CisrICBzeW1faGFzaGVzID0gZWxmX3N5bV9oYXNoZXMoaW5wdXRfYmZkKTsKKysgIGxvY2FsX2dvdF9lbnRzID0gZWxmX2xvY2FsX2dvdF9lbnRzKGlucHV0X2JmZCk7CisrICBzZ290ID0gaHRhYi0+c2dvdDsKKysgIHNyZWxnb3QgPSBodGFiLT5zcmVsZ290OworKworKyAgcmVsZW5kID0gcmVsb2NzICsgaW5wdXRfc2VjdGlvbi0+cmVsb2NfY291bnQ7CisrICBmb3IgKHJlbCA9IHJlbG9jczsgcmVsIDwgcmVsZW5kOyByZWwrKykKKysgICAgeworKyAgICAgIHVuc2lnbmVkIGxvbmcgcl90eXBlLCByX3N5bW5keDsKKysgICAgICByZWxvY19ob3d0b190eXBlICpob3d0bzsKKysgICAgICBFbGZfSW50ZXJuYWxfU3ltICpzeW0gPSBOVUxMOworKyAgICAgIHN0cnVjdCBlbGZfbGlua19oYXNoX2VudHJ5ICpoID0gTlVMTDsKKysgICAgICBhc2VjdGlvbiAqc2VjID0gTlVMTDsKKysgICAgICBiZmRfdm1hIHZhbHVlOworKyAgICAgIGJmZF92bWEgb2Zmc2V0OworKyAgICAgIGJmZF9yZWxvY19zdGF0dXNfdHlwZSBzdGF0dXM7CisrCisrICAgICAgcl90eXBlID0gRUxGMzJfUl9UWVBFKHJlbC0+cl9pbmZvKTsKKysgICAgICByX3N5bW5keCA9IEVMRjMyX1JfU1lNKHJlbC0+cl9pbmZvKTsKKysKKysgICAgICBpZiAocl90eXBlID09IFJfQVZSMzJfTk9ORQorKwkgIHx8IHJfdHlwZSA9PSBSX0FWUjMyX0FMSUdOCisrCSAgfHwgcl90eXBlID09IFJfQVZSMzJfRElGRjMyCisrCSAgfHwgcl90eXBlID09IFJfQVZSMzJfRElGRjE2CisrCSAgfHwgcl90eXBlID09IFJfQVZSMzJfRElGRjgpCisrCWNvbnRpbnVlOworKworKyAgICAgIC8qIFNhbml0eSBjaGVjayAqLworKyAgICAgIGlmIChyX3R5cGUgPiBSX0FWUjMyX21heCkKKysJeworKwkgIGJmZF9zZXRfZXJyb3IoYmZkX2Vycm9yX2JhZF92YWx1ZSk7CisrCSAgcmV0dXJuIEZBTFNFOworKwl9CisrCisrICAgICAgaG93dG8gPSAmZWxmX2F2cjMyX2hvd3RvX3RhYmxlW3JfdHlwZV07CisrCisrICAgICAgaWYgKHJfc3ltbmR4IDwgc3ltdGFiX2hkci0+c2hfaW5mbykKKysJeworKwkgIHN5bSA9IGxvY2FsX3N5bXMgKyByX3N5bW5keDsKKysJICBzZWMgPSBsb2NhbF9zZWN0aW9uc1tyX3N5bW5keF07CisrCisrCSAgcHJfZGVidWcoIiAgKDZhKSBwcm9jZXNzaW5nICVzIGFnYWluc3QgbG9jYWwgc3ltYm9sICVsdVxuIiwKKysJCSAgIGhvd3RvLT5uYW1lLCByX3N5bW5keCk7CisrCisrCSAgLyogVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBjaGFuZ2VzIHJlbC0+cl9hZGRlbmQgYmVoaW5kIG91ciBiYWNrLiAqLworKwkgIHZhbHVlID0gX2JmZF9lbGZfcmVsYV9sb2NhbF9zeW0ob3V0cHV0X2JmZCwgc3ltLCAmc2VjLCByZWwpOworKwkgIHByX2RlYnVnKCIgICAgPT4gdmFsdWU6ICVseCwgYWRkZW5kOiAlbHhcbiIsIHZhbHVlLCByZWwtPnJfYWRkZW5kKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGlmIChzeW1faGFzaGVzID09IE5VTEwpCisrCSAgICByZXR1cm4gRkFMU0U7CisrCisrCSAgaCA9IHN5bV9oYXNoZXNbcl9zeW1uZHggLSBzeW10YWJfaGRyLT5zaF9pbmZvXTsKKysJICB3aGlsZSAoaC0+cm9vdC50eXBlID09IGJmZF9saW5rX2hhc2hfaW5kaXJlY3QKKysJCSB8fCBoLT5yb290LnR5cGUgPT0gYmZkX2xpbmtfaGFzaF93YXJuaW5nKQorKwkgICAgaCA9IChzdHJ1Y3QgZWxmX2xpbmtfaGFzaF9lbnRyeSAqKWgtPnJvb3QudS5pLmxpbms7CisrCisrCSAgcHJfZGVidWcoIiAgKDZhKSBwcm9jZXNzaW5nICVzIGFnYWluc3Qgc3ltYm9sICVzXG4iLAorKwkJICAgaG93dG8tPm5hbWUsIGgtPnJvb3Qucm9vdC5zdHJpbmcpOworKworKwkgIGlmIChoLT5yb290LnR5cGUgPT0gYmZkX2xpbmtfaGFzaF9kZWZpbmVkCisrCSAgICAgIHx8IGgtPnJvb3QudHlwZSA9PSBiZmRfbGlua19oYXNoX2RlZndlYWspCisrCSAgICB7CisrCSAgICAgIGJmZF9ib29sZWFuIGR5bjsKKysKKysJICAgICAgZHluID0gaHRhYi0+cm9vdC5keW5hbWljX3NlY3Rpb25zX2NyZWF0ZWQ7CisrCSAgICAgIHNlYyA9IGgtPnJvb3QudS5kZWYuc2VjdGlvbjsKKysKKysJICAgICAgaWYgKHNlYy0+b3V0cHV0X3NlY3Rpb24pCisrCQl2YWx1ZSA9IChoLT5yb290LnUuZGVmLnZhbHVlCisrCQkJICsgc2VjLT5vdXRwdXRfc2VjdGlvbi0+dm1hCisrCQkJICsgc2VjLT5vdXRwdXRfb2Zmc2V0KTsKKysJICAgICAgZWxzZQorKwkJdmFsdWUgPSBoLT5yb290LnUuZGVmLnZhbHVlOworKwkgICAgfQorKwkgIGVsc2UgaWYgKGgtPnJvb3QudHlwZSA9PSBiZmRfbGlua19oYXNoX3VuZGVmd2VhaykKKysJICAgIHZhbHVlID0gMDsKKysJICBlbHNlIGlmIChpbmZvLT51bnJlc29sdmVkX3N5bXNfaW5fb2JqZWN0cyA9PSBSTV9JR05PUkUKKysJCSAgICYmIEVMRl9TVF9WSVNJQklMSVRZKGgtPm90aGVyKSA9PSBTVFZfREVGQVVMVCkKKysJICAgIHZhbHVlID0gMDsKKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIGJmZF9ib29sZWFuIGVycjsKKysJICAgICAgZXJyID0gKGluZm8tPnVucmVzb2x2ZWRfc3ltc19pbl9vYmplY3RzID09IFJNX0dFTkVSQVRFX0VSUk9SCisrCQkgICAgIHx8IEVMRl9TVF9WSVNJQklMSVRZKGgtPm90aGVyKSAhPSBTVFZfREVGQVVMVCk7CisrCSAgICAgIGlmICghaW5mby0+Y2FsbGJhY2tzLT51bmRlZmluZWRfc3ltYm9sCisrCQkgIChpbmZvLCBoLT5yb290LnJvb3Quc3RyaW5nLCBpbnB1dF9iZmQsCisrCQkgICBpbnB1dF9zZWN0aW9uLCByZWwtPnJfb2Zmc2V0LCBlcnIpKQorKwkJcmV0dXJuIEZBTFNFOworKwkgICAgICB2YWx1ZSA9IDA7CisrCSAgICB9CisrCisrCSAgcHJfZGVidWcoIiAgICA9PiB2YWx1ZTogJWx4LCBhZGRlbmQ6ICVseFxuIiwgdmFsdWUsIHJlbC0+cl9hZGRlbmQpOworKwl9CisrCisrICAgICAgc3dpdGNoIChyX3R5cGUpCisrCXsKKysJY2FzZSBSX0FWUjMyX0dPVDMyOgorKwljYXNlIFJfQVZSMzJfR09UMTY6CisrCWNhc2UgUl9BVlIzMl9HT1Q4OgorKwljYXNlIFJfQVZSMzJfR09UMjFTOgorKwljYXNlIFJfQVZSMzJfR09UMThTVzoKKysJY2FzZSBSX0FWUjMyX0dPVDE2UzoKKysJY2FzZSBSX0FWUjMyX0dPVDdVVzoKKysJY2FzZSBSX0FWUjMyX0xEQV9HT1Q6CisrCWNhc2UgUl9BVlIzMl9HT1RDQUxMOgorKwkgIEJGRF9BU1NFUlQoc2dvdCAhPSBOVUxMKTsKKysKKysJICBpZiAoaCAhPSBOVUxMKQorKwkgICAgeworKwkgICAgICBCRkRfQVNTRVJUKGgtPmdvdC5nbGlzdC0+cmVmY291bnQgPiAwKTsKKysJICAgICAgb2Zmc2V0ID0gaC0+Z290LmdsaXN0LT5vZmZzZXQ7CisrCisrCSAgICAgIEJGRF9BU1NFUlQob2Zmc2V0IDwgc2dvdC0+c2l6ZSk7CisrCSAgICAgIGlmICghZWxmX2hhc2hfdGFibGUoaW5mbyktPmR5bmFtaWNfc2VjdGlvbnNfY3JlYXRlZAorKwkJICB8fCAoaC0+ZGVmX3JlZ3VsYXIKKysJCSAgICAgICYmICghaW5mby0+c2hhcmVkCisrCQkJICB8fCBpbmZvLT5zeW1ib2xpYworKwkJCSAgfHwgaC0+ZHluaW5keCA9PSAtMSkpKQorKwkJeworKwkJICAvKiBUaGlzIGlzIGFjdHVhbGx5IGEgc3RhdGljIGxpbmssIG9yIGl0IGlzIGEKKysJCSAgICAgLUJzeW1ib2xpYyBsaW5rIGFuZCB0aGUgc3ltYm9sIGlzIGRlZmluZWQKKysJCSAgICAgbG9jYWxseSwgb3IgdGhlIHN5bWJvbCB3YXMgZm9yY2VkIHRvIGJlIGxvY2FsLiAgKi8KKysJCSAgYmZkX3B1dF8zMihvdXRwdXRfYmZkLCB2YWx1ZSwgc2dvdC0+Y29udGVudHMgKyBvZmZzZXQpOworKwkJfQorKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgQkZEX0FTU0VSVChsb2NhbF9nb3RfZW50cyAmJgorKwkJCSBsb2NhbF9nb3RfZW50c1tyX3N5bW5keF0tPnJlZmNvdW50ID4gMCk7CisrCSAgICAgIG9mZnNldCA9IGxvY2FsX2dvdF9lbnRzW3Jfc3ltbmR4XS0+b2Zmc2V0OworKworKwkgICAgICAvKiBMb2NhbCBHT1QgZW50cmllcyBkb24ndCBoYXZlIHJlbG9jcy4gIElmIHRoaXMgaXMgYQorKwkJIHNoYXJlZCBsaWJyYXJ5LCB0aGUgZHluYW1pYyBsaW5rZXIgd2lsbCBhZGQgdGhlIGxvYWQKKysJCSBhZGRyZXNzIHRvIHRoZSBpbml0aWFsIHZhbHVlIGF0IHN0YXJ0dXAuICAqLworKwkgICAgICBCRkRfQVNTRVJUKG9mZnNldCA8IHNnb3QtPnNpemUpOworKwkgICAgICBwcl9kZWJ1ZygiSW5pdGlhbGl6aW5nIEdPVCBlbnRyeSBhdCBvZmZzZXQgJWx1OiAweCVseFxuIiwKKysJCSAgICAgICBvZmZzZXQsIHZhbHVlKTsKKysJICAgICAgYmZkX3B1dF8zMiAob3V0cHV0X2JmZCwgdmFsdWUsIHNnb3QtPmNvbnRlbnRzICsgb2Zmc2V0KTsKKysJICAgIH0KKysKKysJICB2YWx1ZSA9IHNnb3QtPm91dHB1dF9vZmZzZXQgKyBvZmZzZXQ7CisrCSAgcHJfZGVidWcoIkdPVCByZWZlcmVuY2U6IE5ldyB2YWx1ZSAlbHhcbiIsIHZhbHVlKTsKKysJICBicmVhazsKKysKKysJY2FzZSBSX0FWUjMyX0dPVFBDOgorKwkgIC8qIFRoaXMgcmVsb2NhdGlvbiB0eXBlIGlzIGZvciBjb25zdGFudCBwb29sIGVudHJpZXMgdXNlZCBpbgorKwkgICAgIHRoZSBjYWxjdWxhdGlvbiAiUmQgPSBQQyAtIChQQyAtIEdPVCkiLCB3aGVyZSB0aGUKKysJICAgICBjb25zdGFudCBwb29sIHN1cHBsaWVzIHRoZSBjb25zdGFudCAoUEMgLSBHT1QpCisrCSAgICAgb2Zmc2V0LiBUaGUgc3ltYm9sIHZhbHVlICsgYWRkZW5kIGluZGljYXRlcyB3aGVyZSB0aGUKKysJICAgICB2YWx1ZSBvZiBQQyBpcyB0YWtlbi4gKi8KKysJICB2YWx1ZSAtPSBzZ290LT5vdXRwdXRfc2VjdGlvbi0+dm1hOworKwkgIGJyZWFrOworKworKwljYXNlIFJfQVZSMzJfMzJfUENSRUw6CisrCSAgLyogV2UgbXVzdCBhZGp1c3Qgcl9vZmZzZXQgdG8gYWNjb3VudCBmb3IgZGlzY2FyZGVkIGRhdGEgaW4KKysJICAgICB0aGUgLmVoX2ZyYW1lIHNlY3Rpb24uICBUaGlzIGlzIHByb2JhYmx5IG5vdCB0aGUgcmlnaHQKKysJICAgICB3YXkgdG8gZG8gdGhpcywgc2luY2UgQUZBSUNTIGFsbCBvdGhlciBhcmNoaXRlY3R1cmVzIGRvCisrCSAgICAgaXQgc29tZSBvdGhlciB3YXkuICBJIGp1c3QgY2FuJ3QgZmlndXJlIG91dCBob3cuLi4gICovCisrCSAgeworKwkgICAgYmZkX3ZtYSByX29mZnNldDsKKysKKysJICAgIHJfb2Zmc2V0ID0gX2JmZF9lbGZfc2VjdGlvbl9vZmZzZXQob3V0cHV0X2JmZCwgaW5mbywKKysJCQkJCSAgICAgICBpbnB1dF9zZWN0aW9uLAorKwkJCQkJICAgICAgIHJlbC0+cl9vZmZzZXQpOworKwkgICAgaWYgKHJfb2Zmc2V0ID09IChiZmRfdm1hKS0xCisrCQl8fCByX29mZnNldCA9PSAoYmZkX3ZtYSktMikKKysJICAgICAgY29udGludWU7CisrCSAgICByZWwtPnJfb2Zmc2V0ID0gcl9vZmZzZXQ7CisrCSAgfQorKwkgIGJyZWFrOworKworKwljYXNlIFJfQVZSMzJfMzI6CisrCSAgLyogV2UgbmVlZCB0byBlbWl0IGEgcnVuLXRpbWUgcmVsb2NhdGlvbiBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOgorKwkgICAgICAgLSB3ZSdyZSBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5CisrCSAgICAgICAtIHRoZSBzeW1ib2wgaXMgbm90IGRlZmluZWQgaW4gYW55IHJlZ3VsYXIgb2JqZWN0cworKworKwkgICAgIE9mIGNvdXJzZSwgc2VjdGlvbnMgdGhhdCBhcmVuJ3QgZ29pbmcgdG8gYmUgcGFydCBvZiB0aGUKKysJICAgICBydW4tdGltZSBpbWFnZSB3aWxsIG5vdCBnZXQgYW55IHJlbG9jcywgYW5kIHVuZGVmaW5lZAorKwkgICAgIHN5bWJvbHMgd29uJ3QgaGF2ZSBhbnkgZWl0aGVyIChvbmx5IHdlYWsgdW5kZWZpbmVkCisrCSAgICAgc3ltYm9scyBzaG91bGQgZ2V0IHRoaXMgZmFyKS4gICovCisrCSAgaWYgKChpbmZvLT5zaGFyZWQKKysJICAgICAgIHx8IChlbGZfaGFzaF90YWJsZShpbmZvKS0+ZHluYW1pY19zZWN0aW9uc19jcmVhdGVkCisrCQkgICAmJiBoICE9IE5VTEwKKysJCSAgICYmIGgtPmRlZl9keW5hbWljCisrCQkgICAmJiAhaC0+ZGVmX3JlZ3VsYXIpKQorKwkgICAgICAmJiByX3N5bW5keCAhPSAwCisrCSAgICAgICYmIChpbnB1dF9zZWN0aW9uLT5mbGFncyAmIFNFQ19BTExPQykpCisrCSAgICB7CisrCSAgICAgIEVsZl9JbnRlcm5hbF9SZWxhIG91dHJlbDsKKysJICAgICAgYmZkX2J5dGUgKmxvYzsKKysJICAgICAgYmZkX2Jvb2xlYW4gc2tpcCwgcmVsb2NhdGU7CisrCSAgICAgIHN0cnVjdCBlbGZfYXZyMzJfbGlua19oYXNoX2VudHJ5ICphdnJoOworKworKwkgICAgICBwcl9kZWJ1ZygiR29pbmcgdG8gZ2VuZXJhdGUgZHluYW1pYyByZWxvYy4uLlxuIik7CisrCisrCSAgICAgIHNraXAgPSBGQUxTRTsKKysJICAgICAgcmVsb2NhdGUgPSBGQUxTRTsKKysKKysJICAgICAgb3V0cmVsLnJfb2Zmc2V0ID0gX2JmZF9lbGZfc2VjdGlvbl9vZmZzZXQob3V0cHV0X2JmZCwgaW5mbywKKysJCQkJCQkJaW5wdXRfc2VjdGlvbiwKKysJCQkJCQkJcmVsLT5yX29mZnNldCk7CisrCSAgICAgIGlmIChvdXRyZWwucl9vZmZzZXQgPT0gKGJmZF92bWEpLTEpCisrCQlza2lwID0gVFJVRTsKKysJICAgICAgZWxzZSBpZiAob3V0cmVsLnJfb2Zmc2V0ID09IChiZmRfdm1hKS0yKQorKwkJc2tpcCA9IFRSVUUsIHJlbG9jYXRlID0gVFJVRTsKKysKKysJICAgICAgb3V0cmVsLnJfb2Zmc2V0ICs9IChpbnB1dF9zZWN0aW9uLT5vdXRwdXRfc2VjdGlvbi0+dm1hCisrCQkJCSAgKyBpbnB1dF9zZWN0aW9uLT5vdXRwdXRfb2Zmc2V0KTsKKysKKysJICAgICAgcHJfZGVidWcoIiAgICAuLi4gb2Zmc2V0ICVseCwgZHluaW5keCAlbGRcbiIsCisrCQkgICAgICAgb3V0cmVsLnJfb2Zmc2V0LCBoID8gaC0+ZHluaW5keCA6IC0xKTsKKysKKysJICAgICAgaWYgKHNraXApCisrCQltZW1zZXQoJm91dHJlbCwgMCwgc2l6ZW9mKG91dHJlbCkpOworKwkgICAgICBlbHNlCisrCQl7CisrCQkgIGF2cmggPSAoc3RydWN0IGVsZl9hdnIzMl9saW5rX2hhc2hfZW50cnkgKiloOworKwkJICAvKiBoLT5keW5pbmR4IG1heSBiZSAtMSBpZiB0aGlzIHN5bWJvbCB3YXMgbWFya2VkIHRvCisrCQkgICAgIGJlY29tZSBsb2NhbC4gICovCisrCQkgIGlmIChoID09IE5VTEwKKysJCSAgICAgIHx8ICgoaW5mby0+c3ltYm9saWMgfHwgaC0+ZHluaW5keCA9PSAtMSkKKysJCQkgICYmIGgtPmRlZl9yZWd1bGFyKSkKKysJCSAgICB7CisrCQkgICAgICByZWxvY2F0ZSA9IFRSVUU7CisrCQkgICAgICBvdXRyZWwucl9pbmZvID0gRUxGMzJfUl9JTkZPKDAsIFJfQVZSMzJfUkVMQVRJVkUpOworKwkJICAgICAgb3V0cmVsLnJfYWRkZW5kID0gdmFsdWUgKyByZWwtPnJfYWRkZW5kOworKwkJICAgICAgcHJfZGVidWcoIiAgICAuLi4gUl9BVlIzMl9SRUxBVElWRVxuIik7CisrCQkgICAgfQorKwkJICBlbHNlCisrCQkgICAgeworKwkJICAgICAgQkZEX0FTU0VSVChoLT5keW5pbmR4ICE9IC0xKTsKKysJCSAgICAgIHJlbG9jYXRlID0gVFJVRTsKKysJCSAgICAgIG91dHJlbC5yX2luZm8gPSBFTEYzMl9SX0lORk8oaC0+ZHluaW5keCwgUl9BVlIzMl9HTE9CX0RBVCk7CisrCQkgICAgICBvdXRyZWwucl9hZGRlbmQgPSByZWwtPnJfYWRkZW5kOworKwkJICAgICAgcHJfZGVidWcoIiAgICAuLi4gUl9BVlIzMl9HTE9CX0RBVFxuIik7CisrCQkgICAgfQorKwkJfQorKworKwkgICAgICBwcl9kZWJ1Zygic3JlbGdvdCByZWxvY19jb3VudDogJWQsIHNpemUgJWx1XG4iLAorKwkJICAgICAgIHNyZWxnb3QtPnJlbG9jX2NvdW50LCBzcmVsZ290LT5zaXplKTsKKysKKysJICAgICAgbG9jID0gc3JlbGdvdC0+Y29udGVudHM7CisrCSAgICAgIGxvYyArPSBzcmVsZ290LT5yZWxvY19jb3VudCsrICogc2l6ZW9mKEVsZjMyX0V4dGVybmFsX1JlbGEpOworKwkgICAgICBiZmRfZWxmMzJfc3dhcF9yZWxvY2Ffb3V0KG91dHB1dF9iZmQsICZvdXRyZWwsIGxvYyk7CisrCisrCSAgICAgIEJGRF9BU1NFUlQoc3JlbGdvdC0+cmVsb2NfY291bnQgKiBzaXplb2YoRWxmMzJfRXh0ZXJuYWxfUmVsYSkKKysJCQkgPD0gc3JlbGdvdC0+c2l6ZSk7CisrCisrCSAgICAgIGlmICghcmVsb2NhdGUpCisrCQljb250aW51ZTsKKysJICAgIH0KKysJICBicmVhazsKKysJfQorKworKyAgICAgIHN0YXR1cyA9IGF2cjMyX2ZpbmFsX2xpbmtfcmVsb2NhdGUoaG93dG8sIGlucHV0X2JmZCwgaW5wdXRfc2VjdGlvbiwKKysJCQkJCSBjb250ZW50cywgcmVsLCB2YWx1ZSk7CisrCisrICAgICAgc3dpdGNoIChzdGF0dXMpCisrCXsKKysJY2FzZSBiZmRfcmVsb2Nfb2s6CisrCSAgYnJlYWs7CisrCisrCWNhc2UgYmZkX3JlbG9jX292ZXJmbG93OgorKwkgIHsKKysJICAgIGNvbnN0IGNoYXIgKm5hbWU7CisrCisrCSAgICBpZiAoaCAhPSBOVUxMKQorKwkgICAgICBuYW1lID0gaC0+cm9vdC5yb290LnN0cmluZzsKKysJICAgIGVsc2UKKysJICAgICAgeworKwkJbmFtZSA9IGJmZF9lbGZfc3RyaW5nX2Zyb21fZWxmX3NlY3Rpb24oaW5wdXRfYmZkLAorKwkJCQkJCSAgICAgICBzeW10YWJfaGRyLT5zaF9saW5rLAorKwkJCQkJCSAgICAgICBzeW0tPnN0X25hbWUpOworKwkJaWYgKG5hbWUgPT0gTlVMTCkKKysJCSAgcmV0dXJuIEZBTFNFOworKwkJaWYgKCpuYW1lID09ICdcMCcpCisrCQkgIG5hbWUgPSBiZmRfc2VjdGlvbl9uYW1lKGlucHV0X2JmZCwgc2VjKTsKKysJICAgICAgfQorKwkgICAgaWYgKCEoKCppbmZvLT5jYWxsYmFja3MtPnJlbG9jX292ZXJmbG93KQorKwkJICAoaW5mbywgKGggPyAmaC0+cm9vdCA6IE5VTEwpLCBuYW1lLCBob3d0by0+bmFtZSwKKysJCSAgIHJlbC0+cl9hZGRlbmQsIGlucHV0X2JmZCwgaW5wdXRfc2VjdGlvbiwgcmVsLT5yX29mZnNldCkpKQorKwkgICAgICByZXR1cm4gRkFMU0U7CisrCSAgfQorKwkgIGJyZWFrOworKworKwljYXNlIGJmZF9yZWxvY19vdXRvZnJhbmdlOgorKwlkZWZhdWx0OgorKwkgIGFib3J0KCk7CisrCX0KKysgICAgfQorKworKyAgcmV0dXJuIFRSVUU7CisrfQorKworKworKy8qIEFkZGl0aW9uYWwgcHJvY2Vzc2luZyBvZiBkeW5hbWljIHNlY3Rpb25zIGFmdGVyIHJlbG9jYXRpb24gKi8KKysKKytzdGF0aWMgYmZkX2Jvb2xlYW4KKythdnIzMl9lbGZfZmluaXNoX2R5bmFtaWNfc3ltYm9sKGJmZCAqb3V0cHV0X2JmZCwgc3RydWN0IGJmZF9saW5rX2luZm8gKmluZm8sCisrCQkJCXN0cnVjdCBlbGZfbGlua19oYXNoX2VudHJ5ICpoLAorKwkJCQlFbGZfSW50ZXJuYWxfU3ltICpzeW0pOworK3N0YXRpYyBiZmRfYm9vbGVhbgorK2F2cjMyX2VsZl9maW5pc2hfZHluYW1pY19zZWN0aW9ucyhiZmQgKm91dHB1dF9iZmQsIHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvKTsKKysKKysKKysvKiAoNykgSW5pdGlhbGl6ZSB0aGUgY29udGVudHMgb2YgYSBkeW5hbWljIHN5bWJvbCBhbmQvb3IgZW1pdAorKyAgIHJlbG9jYXRpb25zIGZvciBpdCAqLworKworK3N0YXRpYyBiZmRfYm9vbGVhbgorK2F2cjMyX2VsZl9maW5pc2hfZHluYW1pY19zeW1ib2woYmZkICpvdXRwdXRfYmZkLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqaW5mbywKKysJCQkJc3RydWN0IGVsZl9saW5rX2hhc2hfZW50cnkgKmgsCisrCQkJCUVsZl9JbnRlcm5hbF9TeW0gKnN5bSkKKyt7CisrICBzdHJ1Y3QgZWxmX2F2cjMyX2xpbmtfaGFzaF90YWJsZSAqaHRhYjsKKysgIHN0cnVjdCBnb3RfZW50cnkgKmdvdDsKKysKKysgIHByX2RlYnVnKCIoNykgZmluaXNoIGR5bmFtaWMgc3ltYm9sOiAlc1xuIiwgaC0+cm9vdC5yb290LnN0cmluZyk7CisrCisrICBodGFiID0gYXZyMzJfZWxmX2hhc2hfdGFibGUoaW5mbyk7CisrICBnb3QgPSBoLT5nb3QuZ2xpc3Q7CisrCisrICBpZiAoZ290ICYmIGdvdC0+cmVmY291bnQgPiAwKQorKyAgICB7CisrICAgICAgYXNlY3Rpb24gKnNnb3Q7CisrICAgICAgYXNlY3Rpb24gKnNyZWxnb3Q7CisrICAgICAgRWxmX0ludGVybmFsX1JlbGEgcmVsOworKyAgICAgIGJmZF9ieXRlICpsb2M7CisrCisrICAgICAgLyogVGhpcyBzeW1ib2wgaGFzIGFuIGVudHJ5IGluIHRoZSBHT1QuIFNldCBpdCB1cC4gKi8KKysgICAgICBzZ290ID0gaHRhYi0+c2dvdDsKKysgICAgICBzcmVsZ290ID0gaHRhYi0+c3JlbGdvdDsKKysgICAgICBCRkRfQVNTRVJUKHNnb3QgJiYgc3JlbGdvdCk7CisrCisrICAgICAgcmVsLnJfb2Zmc2V0ID0gKHNnb3QtPm91dHB1dF9zZWN0aW9uLT52bWEKKysJCSAgICAgICsgc2dvdC0+b3V0cHV0X29mZnNldAorKwkJICAgICAgKyBnb3QtPm9mZnNldCk7CisrCisrICAgICAgLyogSWYgdGhpcyBpcyBhIHN0YXRpYyBsaW5rLCBvciBpdCBpcyBhIC1Cc3ltYm9saWMgbGluayBhbmQgdGhlCisrCSBzeW1ib2wgaXMgZGVmaW5lZCBsb2NhbGx5IG9yIHdhcyBmb3JjZWQgdG8gYmUgbG9jYWwgYmVjYXVzZQorKwkgb2YgYSB2ZXJzaW9uIGZpbGUsIHdlIGp1c3Qgd2FudCB0byBlbWl0IGEgUkVMQVRJVkUgcmVsb2MuIFRoZQorKwkgZW50cnkgaW4gdGhlIGdsb2JhbCBvZmZzZXQgdGFibGUgd2lsbCBhbHJlYWR5IGhhdmUgYmVlbgorKwkgaW5pdGlhbGl6ZWQgaW4gdGhlIHJlbG9jYXRlX3NlY3Rpb24gZnVuY3Rpb24uICovCisrICAgICAgaWYgKChpbmZvLT5zaGFyZWQKKysJICAgJiYgIWluZm8tPnN5bWJvbGljCisrCSAgICYmIGgtPmR5bmluZHggIT0gLTEpCisrCSAgfHwgKGh0YWItPnJvb3QuZHluYW1pY19zZWN0aW9uc19jcmVhdGVkCisrCSAgICAgICYmIGgtPmRlZl9keW5hbWljCisrCSAgICAgICYmICFoLT5kZWZfcmVndWxhcikpCisrCXsKKysJICBiZmRfcHV0XzMyKG91dHB1dF9iZmQsIDAsIHNnb3QtPmNvbnRlbnRzICsgZ290LT5vZmZzZXQpOworKwkgIHJlbC5yX2luZm8gPSBFTEYzMl9SX0lORk8oaC0+ZHluaW5keCwgUl9BVlIzMl9HTE9CX0RBVCk7CisrCSAgcmVsLnJfYWRkZW5kID0gMDsKKysKKysJICBwcl9kZWJ1ZygiR09UIHJlbG9jIFJfQVZSMzJfR0xPQl9EQVQsIGR5bmluZHg6ICVsZFxuIiwgaC0+ZHluaW5keCk7CisrCSAgcHJfZGVidWcoIiAgICBzcmVsZ290IHJlbG9jX2NvdW50OiAlZCwgc2l6ZTogJWx1XG4iLAorKwkJICAgc3JlbGdvdC0+cmVsb2NfY291bnQsIHNyZWxnb3QtPnNpemUpOworKworKwkgIGxvYyA9IChzcmVsZ290LT5jb250ZW50cworKwkJICsgc3JlbGdvdC0+cmVsb2NfY291bnQrKyAqIHNpemVvZihFbGYzMl9FeHRlcm5hbF9SZWxhKSk7CisrCSAgYmZkX2VsZjMyX3N3YXBfcmVsb2NhX291dChvdXRwdXRfYmZkLCAmcmVsLCBsb2MpOworKworKwkgIEJGRF9BU1NFUlQoc3JlbGdvdC0+cmVsb2NfY291bnQgKiBzaXplb2YoRWxmMzJfRXh0ZXJuYWxfUmVsYSkKKysJCSAgICAgPD0gc3JlbGdvdC0+c2l6ZSk7CisrCX0KKysgICAgfQorKworKyAgLyogTWFyayBfRFlOQU1JQyBhbmQgX0dMT0JBTF9PRkZTRVRfVEFCTEVfIGFzIGFic29sdXRlICovCisrICBpZiAoc3RyY21wKGgtPnJvb3Qucm9vdC5zdHJpbmcsICJfRFlOQU1JQyIpID09IDAKKysgICAgICB8fCBzdHJjbXAoaC0+cm9vdC5yb290LnN0cmluZywgIl9HTE9CQUxfT0ZGU0VUX1RBQkxFXyIpID09IDApCisrICAgIHN5bS0+c3Rfc2huZHggPSBTSE5fQUJTOworKworKyAgcmV0dXJuIFRSVUU7CisrfQorKworKy8qICg4KSBEbyBhbnkgcmVtYWluaW5nIGluaXRpYWxpemF0aW9uIG9mIHRoZSBkeW5hbWljIHNlY3Rpb25zICovCisrCisrc3RhdGljIGJmZF9ib29sZWFuCisrYXZyMzJfZWxmX2ZpbmlzaF9keW5hbWljX3NlY3Rpb25zKGJmZCAqb3V0cHV0X2JmZCwgc3RydWN0IGJmZF9saW5rX2luZm8gKmluZm8pCisreworKyAgc3RydWN0IGVsZl9hdnIzMl9saW5rX2hhc2hfdGFibGUgKmh0YWI7CisrICBhc2VjdGlvbiAqc2dvdCwgKnNkeW47CisrCisrICBwcl9kZWJ1ZygiKDgpIGZpbmlzaCBkeW5hbWljIHNlY3Rpb25zXG4iKTsKKysKKysgIGh0YWIgPSBhdnIzMl9lbGZfaGFzaF90YWJsZShpbmZvKTsKKysgIHNnb3QgPSBodGFiLT5zZ290OworKyAgc2R5biA9IGJmZF9nZXRfc2VjdGlvbl9ieV9uYW1lKGh0YWItPnJvb3QuZHlub2JqLCAiLmR5bmFtaWMiKTsKKysKKysgIGlmIChodGFiLT5yb290LmR5bmFtaWNfc2VjdGlvbnNfY3JlYXRlZCkKKysgICAgeworKyAgICAgIEVsZjMyX0V4dGVybmFsX0R5biAqZHluY29uLCAqZHluY29uZW5kOworKworKyAgICAgIEJGRF9BU1NFUlQoc2R5biAmJiBzZ290ICYmIHNnb3QtPnNpemUgPj0gQVZSMzJfR09UX0hFQURFUl9TSVpFKTsKKysKKysgICAgICBkeW5jb24gPSAoRWxmMzJfRXh0ZXJuYWxfRHluICopc2R5bi0+Y29udGVudHM7CisrICAgICAgZHluY29uZW5kID0gKEVsZjMyX0V4dGVybmFsX0R5biAqKShzZHluLT5jb250ZW50cyArIHNkeW4tPnNpemUpOworKyAgICAgIGZvciAoOyBkeW5jb24gPCBkeW5jb25lbmQ7IGR5bmNvbisrKQorKwl7CisrCSAgRWxmX0ludGVybmFsX0R5biBkeW47CisrCSAgYXNlY3Rpb24gKnM7CisrCisrCSAgYmZkX2VsZjMyX3N3YXBfZHluX2luKGh0YWItPnJvb3QuZHlub2JqLCBkeW5jb24sICZkeW4pOworKworKwkgIHN3aXRjaCAoZHluLmRfdGFnKQorKwkgICAgeworKwkgICAgZGVmYXVsdDoKKysJICAgICAgYnJlYWs7CisrCisrCSAgICBjYXNlIERUX1BMVEdPVDoKKysJICAgICAgcyA9IHNnb3QtPm91dHB1dF9zZWN0aW9uOworKwkgICAgICBCRkRfQVNTRVJUKHMgIT0gTlVMTCk7CisrCSAgICAgIGR5bi5kX3VuLmRfcHRyID0gcy0+dm1hOworKwkgICAgICBiZmRfZWxmMzJfc3dhcF9keW5fb3V0KG91dHB1dF9iZmQsICZkeW4sIGR5bmNvbik7CisrCSAgICAgIGJyZWFrOworKworKwkgICAgY2FzZSBEVF9BVlIzMl9HT1RTWjoKKysJICAgICAgcyA9IHNnb3QtPm91dHB1dF9zZWN0aW9uOworKwkgICAgICBCRkRfQVNTRVJUKHMgIT0gTlVMTCk7CisrCSAgICAgIGR5bi5kX3VuLmRfdmFsID0gcy0+c2l6ZTsKKysJICAgICAgYmZkX2VsZjMyX3N3YXBfZHluX291dChvdXRwdXRfYmZkLCAmZHluLCBkeW5jb24pOworKwkgICAgICBicmVhazsKKysJICAgIH0KKysJfQorKworKyAgICAgIC8qIEZpbGwgaW4gdGhlIGZpcnN0IHR3byBlbnRyaWVzIGluIHRoZSBnbG9iYWwgb2Zmc2V0IHRhYmxlICovCisrICAgICAgYmZkX3B1dF8zMihvdXRwdXRfYmZkLAorKwkJIHNkeW4tPm91dHB1dF9zZWN0aW9uLT52bWEgKyBzZHluLT5vdXRwdXRfb2Zmc2V0LAorKwkJIHNnb3QtPmNvbnRlbnRzKTsKKysKKysgICAgICAvKiBUaGUgcnVudGltZSBsaW5rZXIgd2lsbCBmaWxsIHRoaXMgb25lIGluIHdpdGggdGhlIGFkZHJlc3Mgb2YKKysJIHRoZSBydW4tdGltZSBsaW5rIG1hcCAqLworKyAgICAgIGJmZF9wdXRfMzIob3V0cHV0X2JmZCwgMCwgc2dvdC0+Y29udGVudHMgKyA0KTsKKysgICAgfQorKworKyAgaWYgKHNnb3QpCisrICAgIGVsZl9zZWN0aW9uX2RhdGEoc2dvdC0+b3V0cHV0X3NlY3Rpb24pLT50aGlzX2hkci5zaF9lbnRzaXplID0gNDsKKysKKysgIHJldHVybiBUUlVFOworK30KKysKKysKKysvKiBBVlIzMi1zcGVjaWZpYyBwcml2YXRlIEVMRiBkYXRhICovCisrCisrc3RhdGljIGJmZF9ib29sZWFuCisrYXZyMzJfZWxmX3NldF9wcml2YXRlX2ZsYWdzKGJmZCAqYWJmZCwgZmxhZ3dvcmQgZmxhZ3MpOworK3N0YXRpYyBiZmRfYm9vbGVhbgorK2F2cjMyX2VsZl9jb3B5X3ByaXZhdGVfYmZkX2RhdGEoYmZkICppYmZkLCBiZmQgKm9iZmQpOworK3N0YXRpYyBiZmRfYm9vbGVhbgorK2F2cjMyX2VsZl9tZXJnZV9wcml2YXRlX2JmZF9kYXRhKGJmZCAqaWJmZCwgYmZkICpvYmZkKTsKKytzdGF0aWMgYmZkX2Jvb2xlYW4KKythdnIzMl9lbGZfcHJpbnRfcHJpdmF0ZV9iZmRfZGF0YShiZmQgKmFiZmQsIHZvaWQgKnB0cik7CisrCisrc3RhdGljIGJmZF9ib29sZWFuCisrYXZyMzJfZWxmX3NldF9wcml2YXRlX2ZsYWdzKGJmZCAqYWJmZCwgZmxhZ3dvcmQgZmxhZ3MpCisreworKyAgZWxmX2VsZmhlYWRlcihhYmZkKS0+ZV9mbGFncyA9IGZsYWdzOworKyAgZWxmX2ZsYWdzX2luaXQoYWJmZCkgPSBUUlVFOworKworKyAgcmV0dXJuIFRSVUU7CisrfQorKworKy8qIENvcHkgYmFja2VuZCBzcGVjaWZpYyBkYXRhIGZyb20gb25lIG9iamVjdCBtb2R1bGUgdG8gYW5vdGhlci4gICovCisrCisrc3RhdGljIGJmZF9ib29sZWFuCisrYXZyMzJfZWxmX2NvcHlfcHJpdmF0ZV9iZmRfZGF0YShiZmQgKmliZmQsIGJmZCAqb2JmZCkKKyt7CisrICBlbGZfZWxmaGVhZGVyKG9iZmQpLT5lX2ZsYWdzID0gZWxmX2VsZmhlYWRlcihpYmZkKS0+ZV9mbGFnczsKKysgIHJldHVybiBUUlVFOworK30KKysKKysvKiBNZXJnZSBiYWNrZW5kIHNwZWNpZmljIGRhdGEgZnJvbSBhbiBvYmplY3QgZmlsZSB0byB0aGUgb3V0cHV0CisrICAgb2JqZWN0IGZpbGUgd2hlbiBsaW5raW5nLiAgKi8KKysKKytzdGF0aWMgYmZkX2Jvb2xlYW4KKythdnIzMl9lbGZfbWVyZ2VfcHJpdmF0ZV9iZmRfZGF0YShiZmQgKmliZmQsIGJmZCAqb2JmZCkKKyt7CisrICBmbGFnd29yZCBvdXRfZmxhZ3MsIGluX2ZsYWdzOworKworKyAgcHJfZGVidWcoIigwKSBtZXJnZV9wcml2YXRlX2JmZF9kYXRhOiAlcyAtPiAlc1xuIiwKKysJICAgaWJmZC0+ZmlsZW5hbWUsIG9iZmQtPmZpbGVuYW1lKTsKKysKKysgIGluX2ZsYWdzID0gZWxmX2VsZmhlYWRlcihpYmZkKS0+ZV9mbGFnczsKKysgIG91dF9mbGFncyA9IGVsZl9lbGZoZWFkZXIob2JmZCktPmVfZmxhZ3M7CisrCisrICBpZiAoZWxmX2ZsYWdzX2luaXQob2JmZCkpCisrICAgIHsKKysgICAgICAvKiBJZiBvbmUgb2YgdGhlIGlucHV0cyBhcmUgbm9uLVBJQywgdGhlIG91dHB1dCBtdXN0IGJlCisrCSBjb25zaWRlcmVkIG5vbi1QSUMuICBUaGUgc2FtZSBhcHBsaWVzIHRvIGxpbmtyZWxheC4gICovCisrICAgICAgaWYgKCEoaW5fZmxhZ3MgJiBFRl9BVlIzMl9QSUMpKQorKwlvdXRfZmxhZ3MgJj0gfkVGX0FWUjMyX1BJQzsKKysgICAgICBpZiAoIShpbl9mbGFncyAmIEVGX0FWUjMyX0xJTktSRUxBWCkpCisrCW91dF9mbGFncyAmPSB+RUZfQVZSMzJfTElOS1JFTEFYOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBlbGZfZmxhZ3NfaW5pdChvYmZkKSA9IFRSVUU7CisrICAgICAgb3V0X2ZsYWdzID0gaW5fZmxhZ3M7CisrICAgIH0KKysKKysgIGVsZl9lbGZoZWFkZXIob2JmZCktPmVfZmxhZ3MgPSBvdXRfZmxhZ3M7CisrCisrICByZXR1cm4gVFJVRTsKKyt9CisrCisrc3RhdGljIGJmZF9ib29sZWFuCisrYXZyMzJfZWxmX3ByaW50X3ByaXZhdGVfYmZkX2RhdGEoYmZkICphYmZkLCB2b2lkICpwdHIpCisreworKyAgRklMRSAqZmlsZSA9IChGSUxFICopcHRyOworKyAgdW5zaWduZWQgbG9uZyBmbGFnczsKKysKKysgIEJGRF9BU1NFUlQoYWJmZCAhPSBOVUxMICYmIHB0ciAhPSBOVUxMKTsKKysKKysgIF9iZmRfZWxmX3ByaW50X3ByaXZhdGVfYmZkX2RhdGEoYWJmZCwgcHRyKTsKKysKKysgIGZsYWdzID0gZWxmX2VsZmhlYWRlcihhYmZkKS0+ZV9mbGFnczsKKysKKysgIGZwcmludGYoZmlsZSwgXygicHJpdmF0ZSBmbGFncyA9ICVseDoiKSwgZWxmX2VsZmhlYWRlcihhYmZkKS0+ZV9mbGFncyk7CisrCisrICBpZiAoZmxhZ3MgJiBFRl9BVlIzMl9QSUMpCisrICAgIGZwcmludGYoZmlsZSwgIiBbUElDXSIpOworKyAgaWYgKGZsYWdzICYgRUZfQVZSMzJfTElOS1JFTEFYKQorKyAgICBmcHJpbnRmKGZpbGUsICIgW2xpbmtlciByZWxheGFibGVdIik7CisrCisrICBmbGFncyAmPSB+KEVGX0FWUjMyX1BJQyB8IEVGX0FWUjMyX0xJTktSRUxBWCk7CisrCisrICBpZiAoZmxhZ3MpCisrICAgIGZwcmludGYoZmlsZSwgXygiPFVucmVjb2duaXplZCBmbGFnIGJpdHMgc2V0PiIpKTsKKysKKysgIGZwdXRjKCdcbicsIGZpbGUpOworKworKyAgcmV0dXJuIFRSVUU7CisrfQorKworKy8qIFNldCBhdnIzMi1zcGVjaWZpYyBsaW5rZXIgb3B0aW9ucy4gICovCisrdm9pZCBiZmRfZWxmMzJfYXZyMzJfc2V0X29wdGlvbnMoc3RydWN0IGJmZF9saW5rX2luZm8gKmluZm8sCisrCQkJCSBpbnQgZGlyZWN0X2RhdGFfcmVmcykKKyt7CisrICBzdHJ1Y3QgZWxmX2F2cjMyX2xpbmtfaGFzaF90YWJsZSAqaHRhYjsKKysKKysgIGh0YWIgPSBhdnIzMl9lbGZfaGFzaF90YWJsZSAoaW5mbyk7CisrICBodGFiLT5kaXJlY3RfZGF0YV9yZWZzID0gISFkaXJlY3RfZGF0YV9yZWZzOworK30KKysKKysKKysKKysvKiBVbmRlcnN0YW5kaW5nIGNvcmUgZHVtcHMgKi8KKysKKytzdGF0aWMgYmZkX2Jvb2xlYW4KKythdnIzMl9lbGZfZ3Jva19wcnN0YXR1cyhiZmQgKmFiZmQsIEVsZl9JbnRlcm5hbF9Ob3RlICpub3RlKTsKKytzdGF0aWMgYmZkX2Jvb2xlYW4KKythdnIzMl9lbGZfZ3Jva19wc2luZm8oYmZkICphYmZkLCBFbGZfSW50ZXJuYWxfTm90ZSAqbm90ZSk7CisrCisrc3RhdGljIGJmZF9ib29sZWFuCisrYXZyMzJfZWxmX2dyb2tfcHJzdGF0dXMoYmZkICphYmZkLCBFbGZfSW50ZXJuYWxfTm90ZSAqbm90ZSkKKyt7CisrICAvKiBMaW51eC9BVlIzMkIgZWxmX3Byc3RhdHVzICovCisrICBpZiAobm90ZS0+ZGVzY3N6ICE9IDE0OCkKKysgICAgcmV0dXJuIEZBTFNFOworKworKyAgLyogcHJfY3Vyc2lnICovCisrICBlbGZfdGRhdGEoYWJmZCktPmNvcmVfc2lnbmFsID0gYmZkX2dldF8xNihhYmZkLCBub3RlLT5kZXNjZGF0YSArIDEyKTsKKysKKysgIC8qIHByX3BpZCAqLworKyAgZWxmX3RkYXRhKGFiZmQpLT5jb3JlX3BpZCA9IGJmZF9nZXRfMzIoYWJmZCwgbm90ZS0+ZGVzY2RhdGEgKyAyNCk7CisrCisrICAvKiBNYWtlIGEgIi5yZWcvOTk5IiBzZWN0aW9uIGZvciBwcl9yZWcuIFRoZSBzaXplIGlzIGZvciAxNgorKyAgICAgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycywgU1IgYW5kIHIxMl9vcmlnICgxOCAqIDQgPSA3MikuICAqLworKyAgcmV0dXJuIF9iZmRfZWxmY29yZV9tYWtlX3BzZXVkb3NlY3Rpb24oYWJmZCwgIi5yZWciLCA3MiwKKysJCQkJCSBub3RlLT5kZXNjcG9zICsgNzIpOworK30KKysKKytzdGF0aWMgYmZkX2Jvb2xlYW4KKythdnIzMl9lbGZfZ3Jva19wc2luZm8oYmZkICphYmZkLCBFbGZfSW50ZXJuYWxfTm90ZSAqbm90ZSkKKyt7CisrICAvKiBMaW51eC9BVlIzMkIgZWxmX3BycHNpbmZvICovCisrICBpZiAobm90ZS0+ZGVzY3N6ICE9IDEyOCkKKysgICAgcmV0dXJuIEZBTFNFOworKworKyAgZWxmX3RkYXRhKGFiZmQpLT5jb3JlX3Byb2dyYW0KKysgICAgPSBfYmZkX2VsZmNvcmVfc3RybmR1cChhYmZkLCBub3RlLT5kZXNjZGF0YSArIDMyLCAxNik7CisrICBlbGZfdGRhdGEoYWJmZCktPmNvcmVfY29tbWFuZAorKyAgICA9IF9iZmRfZWxmY29yZV9zdHJuZHVwKGFiZmQsIG5vdGUtPmRlc2NkYXRhICsgNDgsIDgwKTsKKysKKysgIC8qIE5vdGUgdGhhdCBmb3Igc29tZSByZWFzb24sIGEgc3B1cmlvdXMgc3BhY2UgaXMgdGFja2VkCisrICAgICBvbnRvIHRoZSBlbmQgb2YgdGhlIGFyZ3MgaW4gc29tZSAoYXQgbGVhc3Qgb25lIGFueXdheSkKKysgICAgIGltcGxlbWVudGF0aW9ucywgc28gc3RyaXAgaXQgb2ZmIGlmIGl0IGV4aXN0cy4gICovCisrCisrICB7CisrICAgIGNoYXIgKmNvbW1hbmQgPSBlbGZfdGRhdGEgKGFiZmQpLT5jb3JlX2NvbW1hbmQ7CisrICAgIGludCBuID0gc3RybGVuIChjb21tYW5kKTsKKysKKysgICAgaWYgKDAgPCBuICYmIGNvbW1hbmRbbiAtIDFdID09ICcgJykKKysgICAgICBjb21tYW5kW24gLSAxXSA9ICdcMCc7CisrICB9CisrCisrICByZXR1cm4gVFJVRTsKKyt9CisrCisrCisrI2RlZmluZSBFTEZfQVJDSAkJCWJmZF9hcmNoX2F2cjMyCisrI2RlZmluZSBFTEZfTUFDSElORV9DT0RFCQlFTV9BVlIzMgorKyNkZWZpbmUgRUxGX01BWFBBR0VTSVpFCQkJMHgxMDAwCisrCisrI2RlZmluZSBUQVJHRVRfQklHX1NZTQkJCWJmZF9lbGYzMl9hdnIzMl92ZWMKKysjZGVmaW5lIFRBUkdFVF9CSUdfTkFNRQkJCSJlbGYzMi1hdnIzMiIKKysKKysjZGVmaW5lIGVsZl9iYWNrZW5kX2dyb2tfcHJzdGF0dXMJYXZyMzJfZWxmX2dyb2tfcHJzdGF0dXMKKysjZGVmaW5lIGVsZl9iYWNrZW5kX2dyb2tfcHNpbmZvCQlhdnIzMl9lbGZfZ3Jva19wc2luZm8KKysKKysvKiBPbmx5IFJFTEEgcmVsb2NhdGlvbnMgYXJlIHVzZWQgKi8KKysjZGVmaW5lIGVsZl9iYWNrZW5kX21heV91c2VfcmVsX3AJMAorKyNkZWZpbmUgZWxmX2JhY2tlbmRfbWF5X3VzZV9yZWxhX3AJMQorKyNkZWZpbmUgZWxmX2JhY2tlbmRfZGVmYXVsdF91c2VfcmVsYV9wCTEKKysjZGVmaW5lIGVsZl9iYWNrZW5kX3JlbGFfbm9ybWFsCQkxCisrI2RlZmluZSBlbGZfaW5mb190b19ob3d0b19yZWwJCU5VTEwKKysjZGVmaW5lIGVsZl9pbmZvX3RvX2hvd3RvCQlhdnIzMl9pbmZvX3RvX2hvd3RvCisrCisrI2RlZmluZSBiZmRfZWxmMzJfYmZkX2NvcHlfcHJpdmF0ZV9iZmRfZGF0YQlhdnIzMl9lbGZfY29weV9wcml2YXRlX2JmZF9kYXRhCisrI2RlZmluZSBiZmRfZWxmMzJfYmZkX21lcmdlX3ByaXZhdGVfYmZkX2RhdGEJYXZyMzJfZWxmX21lcmdlX3ByaXZhdGVfYmZkX2RhdGEKKysjZGVmaW5lIGJmZF9lbGYzMl9iZmRfc2V0X3ByaXZhdGVfZmxhZ3MJCWF2cjMyX2VsZl9zZXRfcHJpdmF0ZV9mbGFncworKyNkZWZpbmUgYmZkX2VsZjMyX2JmZF9wcmludF9wcml2YXRlX2JmZF9kYXRhCWF2cjMyX2VsZl9wcmludF9wcml2YXRlX2JmZF9kYXRhCisrI2RlZmluZSBiZmRfZWxmMzJfbmV3X3NlY3Rpb25faG9vawkJYXZyMzJfZWxmX25ld19zZWN0aW9uX2hvb2sKKysKKysjZGVmaW5lIGVsZl9iYWNrZW5kX2djX21hcmtfaG9vawkJYXZyMzJfZWxmX2djX21hcmtfaG9vaworKyNkZWZpbmUgZWxmX2JhY2tlbmRfZ2Nfc3dlZXBfaG9vawkJYXZyMzJfZWxmX2djX3N3ZWVwX2hvb2sKKysjZGVmaW5lIGVsZl9iYWNrZW5kX3JlbG9jYXRlX3NlY3Rpb24JYXZyMzJfZWxmX3JlbG9jYXRlX3NlY3Rpb24KKysjZGVmaW5lIGVsZl9iYWNrZW5kX2NvcHlfaW5kaXJlY3Rfc3ltYm9sIGF2cjMyX2VsZl9jb3B5X2luZGlyZWN0X3N5bWJvbAorKyNkZWZpbmUgZWxmX2JhY2tlbmRfY3JlYXRlX2R5bmFtaWNfc2VjdGlvbnMgYXZyMzJfZWxmX2NyZWF0ZV9keW5hbWljX3NlY3Rpb25zCisrI2RlZmluZSBiZmRfZWxmMzJfYmZkX2xpbmtfaGFzaF90YWJsZV9jcmVhdGUgYXZyMzJfZWxmX2xpbmtfaGFzaF90YWJsZV9jcmVhdGUKKysjZGVmaW5lIGVsZl9iYWNrZW5kX2FkanVzdF9keW5hbWljX3N5bWJvbCBhdnIzMl9lbGZfYWRqdXN0X2R5bmFtaWNfc3ltYm9sCisrI2RlZmluZSBlbGZfYmFja2VuZF9zaXplX2R5bmFtaWNfc2VjdGlvbnMgYXZyMzJfZWxmX3NpemVfZHluYW1pY19zZWN0aW9ucworKyNkZWZpbmUgZWxmX2JhY2tlbmRfZmluaXNoX2R5bmFtaWNfc3ltYm9sIGF2cjMyX2VsZl9maW5pc2hfZHluYW1pY19zeW1ib2wKKysjZGVmaW5lIGVsZl9iYWNrZW5kX2ZpbmlzaF9keW5hbWljX3NlY3Rpb25zIGF2cjMyX2VsZl9maW5pc2hfZHluYW1pY19zZWN0aW9ucworKworKyNkZWZpbmUgYmZkX2VsZjMyX2JmZF9yZWxheF9zZWN0aW9uCWF2cjMyX2VsZl9yZWxheF9zZWN0aW9uCisrCisrLyogRmluZCBvdXQgd2hpY2ggc3ltYm9scyBuZWVkIGFuIGVudHJ5IGluIC5nb3QuICovCisrI2RlZmluZSBlbGZfYmFja2VuZF9jaGVja19yZWxvY3MJYXZyMzJfY2hlY2tfcmVsb2NzCisrI2RlZmluZSBlbGZfYmFja2VuZF9jYW5fcmVmY291bnQJMQorKyNkZWZpbmUgZWxmX2JhY2tlbmRfY2FuX2djX3NlY3Rpb25zCTEKKysjZGVmaW5lIGVsZl9iYWNrZW5kX3BsdF9yZWFkb25seQkxCisrI2RlZmluZSBlbGZfYmFja2VuZF9wbHRfbm90X2xvYWRlZAkxCisrI2RlZmluZSBlbGZfYmFja2VuZF93YW50X3BsdF9zeW0JMAorKyNkZWZpbmUgZWxmX2JhY2tlbmRfcGx0X2FsaWdubWVudAkyCisrI2RlZmluZSBlbGZfYmFja2VuZF93YW50X2R5bmJzcwkJMAorKyNkZWZpbmUgZWxmX2JhY2tlbmRfd2FudF9nb3RfcGx0CTAKKysjZGVmaW5lIGVsZl9iYWNrZW5kX3dhbnRfZ290X3N5bQkxCisrI2RlZmluZSBlbGZfYmFja2VuZF9nb3RfaGVhZGVyX3NpemUJQVZSMzJfR09UX0hFQURFUl9TSVpFCisrCisrI2luY2x1ZGUgImVsZjMyLXRhcmdldC5oIgorLS0tIC9kZXYvbnVsbAorKysrIGIvYmZkL2VsZjMyLWF2cjMyLmgKK0BAIC0wLDAgKzEsMjMgQEAKKysvKiBBVlIzMi1zcGVjaWZpYyBzdXBwb3J0IGZvciAzMi1iaXQgRUxGLgorKyAgIENvcHlyaWdodCAyMDA3IEF0bWVsIENvcnBvcmF0aW9uLgorKworKyAgIFdyaXR0ZW4gYnkgSGFhdmFyZCBTa2lubmVtb2VuLCBBdG1lbCBOb3J3YXksIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CisrCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQkZELCB0aGUgQmluYXJ5IEZpbGUgRGVzY3JpcHRvciBsaWJyYXJ5LgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gKi8KKysKKyt2b2lkIGJmZF9lbGYzMl9hdnIzMl9zZXRfb3B0aW9ucyhzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqaW5mbywKKysJCQkJIGludCBkaXJlY3RfZGF0YV9yZWZzKTsKKy0tLSBhL2JmZC9lbGYtYmZkLmgKKysrKyBiL2JmZC9lbGYtYmZkLmgKK0BAIC0xNDAwLDYgKzE0MDAsMTAgQEAgc3RydWN0IGVsZl9vYmpfdGRhdGEKKyAgICAgIGZpbmRfbmVhcmVzdF9saW5lLiAgKi8KKyAgIHN0cnVjdCBtaXBzX2VsZl9maW5kX2xpbmUgKmZpbmRfbGluZV9pbmZvOworIAorKyAgLyogVXNlZCBieSBBVlIzMiBFTEYgcmVsYXhhdGlvbiBjb2RlLiAgQ29udGFpbnMgYW4gYXJyYXkgb2YgcG9pbnRlcnMKKysgICAgIGZvciBlYWNoIGxvY2FsIHN5bWJvbCB0byB0aGUgZnJhZ21lbnQgd2hlcmUgaXQgaXMgZGVmaW5lZC4gICovCisrICBzdHJ1Y3QgZnJhZ21lbnQgKipsb2NhbF9zeW1fZnJhZzsKKysKKyAgIC8qIEEgcGxhY2UgdG8gc3Rhc2ggZHdhcmYxIGluZm8gZm9yIHRoaXMgYmZkLiAgKi8KKyAgIHN0cnVjdCBkd2FyZjFfZGVidWcgKmR3YXJmMV9maW5kX2xpbmVfaW5mbzsKKyAKKy0tLSBhL2JmZC9NYWtlZmlsZS5hbQorKysrIGIvYmZkL01ha2VmaWxlLmFtCitAQCAtNjMsNiArNjMsNyBAQCBBTExfTUFDSElORVMgPSBcCisgCWNwdS1hcmMubG8gXAorIAljcHUtYXJtLmxvIFwKKyAJY3B1LWF2ci5sbyBcCisrCWNwdS1hdnIzMi5sbyBcCisgCWNwdS1iZmluLmxvIFwKKyAJY3B1LWNyMTYubG8gXAorIAljcHUtY3IxNmMubG8gXAorQEAgLTI0Myw2ICsyNDQsNyBAQCBCRkQzMl9CQUNLRU5EUyA9IFwKKyAJZWxmMzItYXJjLmxvIFwKKyAJZWxmMzItYXJtLmxvIFwKKyAJZWxmMzItYXZyLmxvIFwKKysJZWxmMzItYXZyMzIubG8gXAorIAllbGYzMi1iZmluLmxvIFwKKyAJZWxmMzItY3IxNi5sbyBcCisgCWVsZjMyLWNyMTZjLmxvIFwKK0BAIC0xMzI4LDYgKzEzMzAsMTAgQEAgZWxmMzItY3IxNi5sbzogZWxmMzItY3IxNi5jICQoSU5DRElSKS9maQorICAgJChJTkNESVIpL2hhc2h0YWIuaCAkKElOQ0RJUikvbGliaWJlcnR5LmggZWxmLWJmZC5oIFwKKyAgICQoSU5DRElSKS9lbGYvY29tbW9uLmggJChJTkNESVIpL2VsZi9pbnRlcm5hbC5oICQoSU5DRElSKS9lbGYvZXh0ZXJuYWwuaCBcCisgICAkKElOQ0RJUikvZWxmL2NyMTYuaCAkKElOQ0RJUikvZWxmL3JlbG9jLW1hY3Jvcy5oIGVsZjMyLXRhcmdldC5oCisrZWxmMzItYXZyMzIubG86IGVsZjMyLWF2cjMyLmMgJChJTkNESVIpL2ZpbGVuYW1lcy5oIGVsZi1iZmQuaCBcCisrICAkKElOQ0RJUikvZWxmL2NvbW1vbi5oICQoSU5DRElSKS9lbGYvaW50ZXJuYWwuaCAkKElOQ0RJUikvZWxmL2V4dGVybmFsLmggXAorKyAgJChJTkNESVIpL2JmZGxpbmsuaCAkKElOQ0RJUikvZWxmL2F2cjMyLmggJChJTkNESVIpL2VsZi9yZWxvYy1tYWNyb3MuaCBcCisrICBlbGYzMi10YXJnZXQuaAorIGVsZjMyLWNyMTZjLmxvOiBlbGYzMi1jcjE2Yy5jICQoSU5DRElSKS9maWxlbmFtZXMuaCBcCisgICAkKElOQ0RJUikvaGFzaHRhYi5oICQoSU5DRElSKS9iZmRsaW5rLmggJChJTkNESVIpL2VsZi9jcjE2Yy5oIFwKKyAgICQoSU5DRElSKS9lbGYvcmVsb2MtbWFjcm9zLmggZWxmLWJmZC5oICQoSU5DRElSKS9lbGYvY29tbW9uLmggXAorLS0tIGEvYmZkL3JlbG9jLmMKKysrKyBiL2JmZC9yZWxvYy5jCitAQCAtMzk0OCw2ICszOTQ4LDEzMSBAQCBFTlVNRE9DCisgICBpbnN0cnVjdGlvbnMKKyAKKyBFTlVNCisrICBCRkRfUkVMT0NfQVZSMzJfRElGRjMyCisrRU5VTVgKKysgIEJGRF9SRUxPQ19BVlIzMl9ESUZGMTYKKytFTlVNWAorKyAgQkZEX1JFTE9DX0FWUjMyX0RJRkY4CisrRU5VTURPQworKyAgRGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBsYWJlbHM6IEwyIC0gTDEuIFRoZSB2YWx1ZSBvZiBMMSBpcyBlbmNvZGVkCisrICBhcyBzeW0gKyBhZGRlbmQsIHdoaWxlIHRoZSBpbml0aWFsIGRpZmZlcmVuY2UgYWZ0ZXIgYXNzZW1ibHkgaXMKKysgIGluc2VydGVkIGludG8gdGhlIG9iamVjdCBmaWxlIGJ5IHRoZSBhc3NlbWJsZXIuCisrRU5VTQorKyAgQkZEX1JFTE9DX0FWUjMyX0dPVDMyCisrRU5VTVgKKysgIEJGRF9SRUxPQ19BVlIzMl9HT1QxNgorK0VOVU1YCisrICBCRkRfUkVMT0NfQVZSMzJfR09UOAorK0VOVU1ET0MKKysgIFJlZmVyZW5jZSB0byBhIHN5bWJvbCB0aHJvdWdoIHRoZSBHbG9iYWwgT2Zmc2V0IFRhYmxlLiBUaGUgbGlua2VyCisrICB3aWxsIGFsbG9jYXRlIGFuIGVudHJ5IGZvciBzeW1ib2wgaW4gdGhlIEdPVCBhbmQgaW5zZXJ0IHRoZSBvZmZzZXQKKysgIG9mIHRoaXMgZW50cnkgYXMgdGhlIHJlbG9jYXRpb24gdmFsdWUuCisrRU5VTQorKyAgQkZEX1JFTE9DX0FWUjMyXzIxUworK0VOVU1YCisrICBCRkRfUkVMT0NfQVZSMzJfMTZVCisrRU5VTVgKKysgIEJGRF9SRUxPQ19BVlIzMl8xNlMKKytFTlVNWAorKyAgQkZEX1JFTE9DX0FWUjMyX1NVQjUKKytFTlVNWAorKyAgQkZEX1JFTE9DX0FWUjMyXzhTX0VYVAorK0VOVU1YCisrICBCRkRfUkVMT0NfQVZSMzJfOFMKKytFTlVNWAorKyAgQkZEX1JFTE9DX0FWUjMyXzE1UworK0VOVU1ET0MKKysgIE5vcm1hbCAobm9uLXBjLXJlbGF0aXZlKSBjb2RlIHJlbG9jYXRpb25zLiBBbGlnbm1lbnQgYW5kIHNpZ25lZG5lc3MKKysgIGlzIGluZGljYXRlZCBieSB0aGUgc3VmZml4ZXMuIFMgbWVhbnMgc2lnbmVkLCBVIG1lYW5zIHVuc2lnbmVkLiBXCisrICBtZWFucyB3b3JkLWFsaWduZWQsIEggbWVhbnMgaGFsZndvcmQtYWxpZ25lZCwgbmVpdGhlciBtZWFucworKyAgYnl0ZS1hbGlnbmVkIChubyBhbGlnbm1lbnQuKSBTVUI1IGlzIHRoZSBzYW1lIHJlbG9jYXRpb24gYXMgMTZTLgorK0VOVU0KKysgIEJGRF9SRUxPQ19BVlIzMl8yMkhfUENSRUwKKytFTlVNWAorKyAgQkZEX1JFTE9DX0FWUjMyXzE4V19QQ1JFTAorK0VOVU1YCisrICBCRkRfUkVMT0NfQVZSMzJfMTZCX1BDUkVMCisrRU5VTVgKKysgIEJGRF9SRUxPQ19BVlIzMl8xNk5fUENSRUwKKytFTlVNWAorKyAgQkZEX1JFTE9DX0FWUjMyXzE0VVdfUENSRUwKKytFTlVNWAorKyAgQkZEX1JFTE9DX0FWUjMyXzExSF9QQ1JFTAorK0VOVU1YCisrICBCRkRfUkVMT0NfQVZSMzJfMTBVV19QQ1JFTAorK0VOVU1YCisrICBCRkRfUkVMT0NfQVZSMzJfOUhfUENSRUwKKytFTlVNWAorKyAgQkZEX1JFTE9DX0FWUjMyXzlVV19QQ1JFTAorK0VOVU1ET0MKKysgIFBDLXJlbGF0aXZlIHJlbG9jYXRpb25zIGFyZSBzaWduZWQgaWYgbmVpdGhlciAnVScgbm9yICdTJyBpcworKyAgc3BlY2lmaWVkLiBIb3dldmVyLCB3ZSBleHBsaWNpdGx5IHRhY2sgb24gYSAnQicgdG8gaW5kaWNhdGUgbm8KKysgIGFsaWdubWVudCwgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggZGF0YSByZWxvY3MuIEFsbCBvZiB0aGVzZSByZXNvbHZlCisrICB0byBzeW0gKyBhZGRlbmQgLSBvZmZzZXQsIGV4Y2VwdCB0aGUgb25lIHdpdGggJ04nIChuZWdhdGVkKSBzdWZmaXguCisrICBUaGlzIHBhcnRpY3VsYXIgb25lIHJlc29sdmVzIHRvIG9mZnNldCAtIHN5bSAtIGFkZGVuZC4KKytFTlVNCisrICBCRkRfUkVMT0NfQVZSMzJfR09UUEMKKytFTlVNRE9DCisrICBTdWJ0cmFjdCB0aGUgbGluay10aW1lIGFkZHJlc3Mgb2YgdGhlIEdPVCBmcm9tIChzeW1ib2wgKyBhZGRlbmQpCisrICBhbmQgaW5zZXJ0IHRoZSByZXN1bHQuCisrRU5VTQorKyAgQkZEX1JFTE9DX0FWUjMyX0dPVENBTEwKKytFTlVNWAorKyAgQkZEX1JFTE9DX0FWUjMyX0xEQV9HT1QKKytFTlVNWAorKyAgQkZEX1JFTE9DX0FWUjMyX0dPVDIxUworK0VOVU1YCisrICBCRkRfUkVMT0NfQVZSMzJfR09UMThTVworK0VOVU1YCisrICBCRkRfUkVMT0NfQVZSMzJfR09UMTZTCisrRU5VTURPQworKyAgUmVmZXJlbmNlIHRvIGEgc3ltYm9sIHRocm91Z2ggdGhlIEdPVC4gVGhlIGxpbmtlciB3aWxsIGFsbG9jYXRlIGFuCisrICBlbnRyeSBmb3Igc3ltYm9sIGluIHRoZSBHT1QgYW5kIGluc2VydCB0aGUgb2Zmc2V0IG9mIHRoaXMgZW50cnkgYXMKKysgIHRoZSByZWxvY2F0aW9uIHZhbHVlLiBhZGRlbmQgbXVzdCBiZSB6ZXJvLiBBcyB1c3VhbCwgJ1MnIG1lYW5zCisrICBzaWduZWQsICdXJyBtZWFucyB3b3JkLWFsaWduZWQsIGV0Yy4KKytFTlVNCisrICBCRkRfUkVMT0NfQVZSMzJfMzJfQ1BFTlQKKytFTlVNRE9DCisrICAzMi1iaXQgY29uc3RhbnQgcG9vbCBlbnRyeS4gSSBkb24ndCB0aGluayA4LSBhbmQgMTYtYml0IGVudHJpZXMgbWFrZQorKyAgYSB3aG9sZSBsb3Qgb2Ygc2Vuc2UuCisrRU5VTQorKyAgQkZEX1JFTE9DX0FWUjMyX0NQQ0FMTAorK0VOVU1YCisrICBCRkRfUkVMT0NfQVZSMzJfMTZfQ1AKKytFTlVNWAorKyAgQkZEX1JFTE9DX0FWUjMyXzlXX0NQCisrRU5VTURPQworKyAgQ29uc3RhbnQgcG9vbCByZWZlcmVuY2VzLiBTb21lIG9mIHRoZXNlIHJlbG9jYXRpb25zIGFyZSBzaWduZWQsCisrICBvdGhlcnMgYXJlIHVuc2lnbmVkLiBJdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIsIHNpbmNlIHRoZSBjb25zdGFudAorKyAgcG9vbCBhbHdheXMgY29tZXMgYWZ0ZXIgdGhlIGNvZGUgdGhhdCByZWZlcmVuY2VzIGl0LgorK0VOVU0KKysgIEJGRF9SRUxPQ19BVlIzMl9BTElHTgorK0VOVU1ET0MKKysgIHN5bSBtdXN0IGJlIHRoZSBhYnNvbHV0ZSBzeW1ib2wuIFRoZSBhZGRlbmQgc3BlY2lmaWVzIHRoZSBhbGlnbm1lbnQKKysgIG9yZGVyLCBlLmcuIGlmIGFkZGVuZCBpcyAyLCB0aGUgbGlua2VyIG11c3QgYWRkIHBhZGRpbmcgc28gdGhhdCB0aGUKKysgIG5leHQgYWRkcmVzcyBpcyBhbGlnbmVkIHRvIGEgNC1ieXRlIGJvdW5kYXJ5LgorK0VOVU0KKysgIEJGRF9SRUxPQ19BVlIzMl8xNFVXCisrRU5VTVgKKysgIEJGRF9SRUxPQ19BVlIzMl8xMFVXCisrRU5VTVgKKysgIEJGRF9SRUxPQ19BVlIzMl8xMFNXCisrRU5VTVgKKysgIEJGRF9SRUxPQ19BVlIzMl9TVEhIX1cKKytFTlVNWAorKyAgQkZEX1JFTE9DX0FWUjMyXzdVVworK0VOVU1YCisrICBCRkRfUkVMT0NfQVZSMzJfNlMKKytFTlVNWAorKyAgQkZEX1JFTE9DX0FWUjMyXzZVVworK0VOVU1YCisrICBCRkRfUkVMT0NfQVZSMzJfNFVICisrRU5VTVgKKysgIEJGRF9SRUxPQ19BVlIzMl8zVQorK0VOVU1ET0MKKysgIENvZGUgcmVsb2NhdGlvbnMgdGhhdCB3aWxsIG5ldmVyIG1ha2UgaXQgdG8gdGhlIG91dHB1dCBmaWxlLgorKworK0VOVU0KKyAgIEJGRF9SRUxPQ18zOTBfMTIKKyBFTlVNRE9DCisgICAgRGlyZWN0IDEyIGJpdC4KKy0tLSBhL2JmZC90YXJnZXRzLmMKKysrKyBiL2JmZC90YXJnZXRzLmMKK0BAIC01NjQsNiArNTY0LDcgQEAgZXh0ZXJuIGNvbnN0IGJmZF90YXJnZXQgYmZkX2VmaV9hcHBfaWEzMgorIGV4dGVybiBjb25zdCBiZmRfdGFyZ2V0IGJmZF9lZmlfYXBwX3g4Nl82NF92ZWM7CisgZXh0ZXJuIGNvbnN0IGJmZF90YXJnZXQgYmZkX2VmaV9hcHBfaWE2NF92ZWM7CisgZXh0ZXJuIGNvbnN0IGJmZF90YXJnZXQgYmZkX2VsZjMyX2F2cl92ZWM7CisrZXh0ZXJuIGNvbnN0IGJmZF90YXJnZXQgYmZkX2VsZjMyX2F2cjMyX3ZlYzsKKyBleHRlcm4gY29uc3QgYmZkX3RhcmdldCBiZmRfZWxmMzJfYmZpbl92ZWM7CisgZXh0ZXJuIGNvbnN0IGJmZF90YXJnZXQgYmZkX2VsZjMyX2JmaW5mZHBpY192ZWM7CisgZXh0ZXJuIGNvbnN0IGJmZF90YXJnZXQgYmZkX2VsZjMyX2JpZ19nZW5lcmljX3ZlYzsKK0BAIC04ODQsNiArODg1LDcgQEAgc3RhdGljIGNvbnN0IGJmZF90YXJnZXQgKiBjb25zdCBfYmZkX3RhcgorIAkmYmZkX2VmaV9hcHBfaWE2NF92ZWMsCisgI2VuZGlmCisgCSZiZmRfZWxmMzJfYXZyX3ZlYywKKysJJmJmZF9lbGYzMl9hdnIzMl92ZWMsCisgCSZiZmRfZWxmMzJfYmZpbl92ZWMsCisgCSZiZmRfZWxmMzJfYmZpbmZkcGljX3ZlYywKKyAKKy0tLSBhL2JpbnV0aWxzL01ha2VmaWxlLmFtCisrKysgYi9iaW51dGlscy9NYWtlZmlsZS5hbQorQEAgLTU3Nyw3ICs1NzcsNyBAQCByZWFkZWxmLm86IHJlYWRlbGYuYyBzeXNkZXAuaCAkKElOQ0RJUikvCisgICAkKElOQ0RJUikvYW5zaWRlY2wuaCAkKElOQ0RJUikvc3ltY2F0LmggYnVjb21tLmggZHdhcmYuaCBcCisgICAkKElOQ0RJUikvZWxmL2NvbW1vbi5oICQoSU5DRElSKS9lbGYvZXh0ZXJuYWwuaCAkKElOQ0RJUikvZWxmL2ludGVybmFsLmggXAorICAgJChJTkNESVIpL2VsZi9oOC5oICQoSU5DRElSKS9lbGYvcmVsb2MtbWFjcm9zLmggJChJTkNESVIpL2VsZi9hbHBoYS5oIFwKKy0gICQoSU5DRElSKS9lbGYvYXJjLmggJChJTkNESVIpL2VsZi9hcm0uaCAkKElOQ0RJUikvZWxmL2F2ci5oIFwKKysgICQoSU5DRElSKS9lbGYvYXJjLmggJChJTkNESVIpL2VsZi9hcm0uaCAkKElOQ0RJUikvZWxmL2F2ci5oICQoSU5DRElSKS9lbGYvYXZyMzIuaFwKKyAgICQoSU5DRElSKS9lbGYvYmZpbi5oICQoSU5DRElSKS9lbGYvY3Jpcy5oICQoSU5DRElSKS9lbGYvY3J4LmggXAorICAgJChJTkNESVIpL2VsZi9kMTB2LmggJChJTkNESVIpL2VsZi9kMzB2LmggJChJTkNESVIpL2VsZi9kbHguaCBcCisgICAkKElOQ0RJUikvZWxmL2ZyMzAuaCAkKElOQ0RJUikvZWxmL2Zydi5oICQoSU5DRElSKS9lbGYvaHBwYS5oIFwKKy0tLSBhL2JpbnV0aWxzL3JlYWRlbGYuYworKysrIGIvYmludXRpbHMvcmVhZGVsZi5jCitAQCAtMjEsNyArMjEsNyBAQAorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAgICAwMjExMC0xMzAxLCBVU0EuICAqLworLQwKKysKKyAvKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHJlYWRlbGYgYW5kIG9iamR1bXA6CisgCisgICBCb3RoIHByb2dyYW1zIGFyZSBjYXBhYmxlIG9mIGRpc3BsYXlpbmcgdGhlIGNvbnRlbnRzIG9mIEVMRiBmb3JtYXQgZmlsZXMsCitAQCAtNDAsNyArNDAsNyBAQAorICAgVGhlcmUgaXMgYWxzbyB0aGUgY2FzZSB0aGF0IHJlYWRlbGYgY2FuIHByb3ZpZGUgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBhbgorICAgRUxGIGZpbGUgdGhhbiBpcyBwcm92aWRlZCBieSBvYmpkdW1wLiAgSW4gcGFydGljdWxhciBpdCBjYW4gZGlzcGxheSBEV0FSRgorICAgZGVidWdnaW5nIGluZm9ybWF0aW9uIHdoaWNoIChhdCB0aGUgbW9tZW50KSBvYmpkdW1wIGNhbm5vdC4gICovCistDAorKworICNpbmNsdWRlICJzeXNkZXAuaCIKKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CitAQCAtMTA5LDYgKzEwOSw3IEBACisgI2luY2x1ZGUgImVsZi9hcmMuaCIKKyAjaW5jbHVkZSAiZWxmL2FybS5oIgorICNpbmNsdWRlICJlbGYvYXZyLmgiCisrI2luY2x1ZGUgImVsZi9hdnIzMi5oIgorICNpbmNsdWRlICJlbGYvYmZpbi5oIgorICNpbmNsdWRlICJlbGYvY3IxNi5oIgorICNpbmNsdWRlICJlbGYvY3Jpcy5oIgorQEAgLTMwMyw3ICszMDQsNyBAQCBzdGF0aWMgdm9pZCAoKmJ5dGVfcHV0KSAodW5zaWduZWQgY2hhciAqCisgI2RlZmluZSBzdHJlcShhLGIpCSAgKHN0cmNtcCAoKGEpLCAoYikpID09IDApCisgI2RlZmluZSBzdHJuZXEoYSxiLG4pCSAgKHN0cm5jbXAgKChhKSwgKGIpLCAobikpID09IDApCisgI2RlZmluZSBjb25zdF9zdHJuZXEoYSxiKSAoc3RybmNtcCAoKGEpLCAoYiksIHNpemVvZiAoYikgLSAxKSA9PSAwKQorLQwKKysKKyBzdGF0aWMgdm9pZCAqCisgZ2V0X2RhdGEgKHZvaWQgKnZhciwgRklMRSAqZmlsZSwgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsCisgCSAgY29uc3QgY2hhciAqcmVhc29uKQorQEAgLTYxNCw2ICs2MTUsNyBAQCBndWVzc19pc19yZWxhICh1bnNpZ25lZCBsb25nIGVfbWFjaGluZSkKKyAgICAgY2FzZSBFTV9BTFBIQToKKyAgICAgY2FzZSBFTV9BTFRFUkFfTklPUzI6CisgICAgIGNhc2UgRU1fQVZSOgorKyAgICBjYXNlIEVNX0FWUjMyOgorICAgICBjYXNlIEVNX0FWUl9PTEQ6CisgICAgIGNhc2UgRU1fQkxBQ0tGSU46CisgICAgIGNhc2UgRU1fQ1IxNjoKK0BAIC0xMDA2LDYgKzEwMDgsMTAgQEAgZHVtcF9yZWxvY2F0aW9ucyAoRklMRSAqZmlsZSwKKyAJICBydHlwZSA9IGVsZl9hdnJfcmVsb2NfdHlwZSAodHlwZSk7CisgCSAgYnJlYWs7CisgCisrCWNhc2UgRU1fQVZSMzI6CisrCSAgcnR5cGUgPSBlbGZfYXZyMzJfcmVsb2NfdHlwZSAodHlwZSk7CisrCSAgYnJlYWs7CisrCisgCWNhc2UgRU1fT0xEX1NQQVJDVjk6CisgCWNhc2UgRU1fU1BBUkMzMlBMVVM6CisgCWNhc2UgRU1fU1BBUkNWOToKK0BAIC0xNzYzLDYgKzE3NjksNyBAQCBnZXRfbWFjaGluZV9uYW1lICh1bnNpZ25lZCBlX21hY2hpbmUpCisgICAgIGNhc2UgRU1fVkFYOgkJcmV0dXJuICJEaWdpdGFsIFZBWCI7CisgICAgIGNhc2UgRU1fQVZSX09MRDoKKyAgICAgY2FzZSBFTV9BVlI6CQlyZXR1cm4gIkF0bWVsIEFWUiA4LWJpdCBtaWNyb2NvbnRyb2xsZXIiOworKyAgICBjYXNlIEVNX0FWUjMyOgkJcmV0dXJuICJBdG1lbCBBVlIzMiI7CisgICAgIGNhc2UgRU1fQ1JJUzoJCXJldHVybiAiQXhpcyBDb21tdW5pY2F0aW9ucyAzMi1iaXQgZW1iZWRkZWQgcHJvY2Vzc29yIjsKKyAgICAgY2FzZSBFTV9KQVZFTElOOgkJcmV0dXJuICJJbmZpbmVvbiBUZWNobm9sb2dpZXMgMzItYml0IGVtYmVkZGVkIGNwdSI7CisgICAgIGNhc2UgRU1fRklSRVBBVEg6CQlyZXR1cm4gIkVsZW1lbnQgMTQgNjQtYml0IERTUCBwcm9jZXNzb3IiOworLS0tIGEvZ2FzL2FzLmMKKysrKyBiL2dhcy9hcy5jCitAQCAtNDQxLDEwICs0NDEsMTAgQEAgcGFyc2VfYXJncyAoaW50ICogcGFyZ2MsIGNoYXIgKioqIHBhcmd2KQorICAgICAgICB0aGUgZW5kIG9mIHRoZSBwcmVjZWVkaW5nIGxpbmUgc28gdGhhdCBpdCBpcyBzaW1wbGVyIHRvCisgICAgICAgIHNlbGVjdGl2ZWx5IGFkZCBhbmQgcmVtb3ZlIGxpbmVzIGZyb20gdGhpcyBsaXN0LiAgKi8KKyAgICAgeyJhbHRlcm5hdGUiLCBub19hcmd1bWVudCwgTlVMTCwgT1BUSU9OX0FMVEVSTkFURX0KKy0gICAgLyogVGhlIGVudHJ5IGZvciAiYSIgaXMgaGVyZSB0byBwcmV2ZW50IGdldG9wdF9sb25nX29ubHkoKSBmcm9tCistICAgICAgIGNvbnNpZGVyaW5nIHRoYXQgLWEgaXMgYW4gYWJicmV2aWF0aW9uIGZvciAtLWFsdGVybmF0ZS4gIFRoaXMgaXMKKy0gICAgICAgbmVjZXNzYXJ5IGJlY2F1c2UgLWE9PEZJTEU+IGlzIGEgdmFsaWQgc3dpdGNoIGJ1dCBnZXRvcHQgd291bGQKKy0gICAgICAgbm9ybWFsbHkgcmVqZWN0IGl0IHNpbmNlIC0tYWx0ZXJuYXRlIGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnQuICAqLworKyAgICAvKiBUaGUgbmV4dCB0d28gZW50cmllcyBhcmUgaGVyZSB0byBwcmV2ZW50IGdldG9wdF9sb25nX29ubHkoKSBmcm9tCisrICAgICAgIGNvbnNpZGVyaW5nIHRoYXQgLWEgb3IgLWFsIGlzIGFuIGFiYnJldmlhdGlvbiBmb3IgLS1hbHRlcm5hdGUuCisrICAgICAgIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgLWE9PEZJTEU+IGlzIGEgdmFsaWQgc3dpdGNoIGJ1dCBnZXRvcHQKKysgICAgICAgd291bGQgbm9ybWFsbHkgcmVqZWN0IGl0IHNpbmNlIC0tYWx0ZXJuYXRlIGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnQuICAqLworICAgICAseyJhIiwgb3B0aW9uYWxfYXJndW1lbnQsIE5VTEwsICdhJ30KKyAgICAgLyogSGFuZGxlIC1hbD08RklMRT4uICAqLworICAgICAseyJhbCIsIG9wdGlvbmFsX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fQUx9CitAQCAtODAzLDggKzgwMywxNSBAQCBUaGlzIHByb2dyYW0gaGFzIGFic29sdXRlbHkgbm8gd2FycmFudHkuCisgCWNhc2UgJ2EnOgorIAkgIGlmIChvcHRhcmcpCisgCSAgICB7CistCSAgICAgIGlmIChvcHRhcmcgIT0gb2xkX2FyZ3Zbb3B0aW5kXSAmJiBvcHRhcmdbLTFdID09ICc9JykKKy0JCS0tb3B0YXJnOworKwkgICAgICAvKiBJZiBvcHRhcmcgaXMgcGFydCBvZiB0aGUgLWEgc3dpdGNoIGFuZCBub3QgYSBzZXBhcmF0ZSBhcmd1bWVudAorKwkJIGluIGl0cyBvd24gcmlnaHQsIHRoZW4gc2NhbiBiYWNrd2FyZHMgdG8gdGhlIGp1c3QgYWZ0ZXIgdGhlIC1hLgorKwkJIFRoaXMgbWVhbnMgc2tpcHBpbmcgb3ZlciBib3RoICc9JyBhbmQgJ2wnIHdoaWNoIG1pZ2h0IGhhdmUgYmVlbgorKwkJIHRha2VuIHRvIGJlIHBhcnQgb2YgdGhlIC1hIHN3aXRjaCBpdHNlbGYuICAqLworKwkgICAgICBpZiAob3B0YXJnICE9IG9sZF9hcmd2W29wdGluZF0pCisrCQl7CisrCQkgIHdoaWxlIChvcHRhcmdbLTFdID09ICc9JyB8fCBvcHRhcmdbLTFdID09ICdsJykKKysJCSAgICAtLW9wdGFyZzsKKysJCX0KKyAKKyAJICAgICAgaWYgKG1kX3BhcnNlX29wdGlvbiAob3B0Yywgb3B0YXJnKSAhPSAwKQorIAkJYnJlYWs7CitAQCAtMTIzNCw3ICsxMjQxLDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiogYXJndikKKyAgICAga2VlcF9pdCA9IDA7CisgCisgICBpZiAoIWtlZXBfaXQpCistICAgIHVubGlua19pZl9vcmRpbmFyeSAob3V0X2ZpbGVfbmFtZSk7CisrICAgIHVubGluayAob3V0X2ZpbGVfbmFtZSk7CisgCisgICBpbnB1dF9zY3J1Yl9lbmQgKCk7CisgCistLS0gL2Rldi9udWxsCisrKysgYi9nYXMvY29uZmlnL3RjLWF2cjMyLmMKK0BAIC0wLDAgKzEsNDgwNiBAQAorKy8qIEFzc2VtYmxlciBpbXBsZW1lbnRhdGlvbiBmb3IgQVZSMzIuCisrICAgQ29weXJpZ2h0IDIwMDMtMjAwNiBBdG1lbCBDb3Jwb3JhdGlvbi4KKysKKysgICBXcml0dGVuIGJ5IEhhYXZhcmQgU2tpbm5lbW9lbiwgQXRtZWwgTm9yd2F5LCA8aHNraW5uZW1vZW5AYXRtZWwuY29tPgorKworKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdBUywgdGhlIEdOVSBBc3NlbWJsZXIuCisrCisrICAgR0FTIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBHQVMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKysgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKysgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCBHQVM7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcsIFVTQS4gICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgImFzLmgiCisrI2luY2x1ZGUgInNhZmUtY3R5cGUuaCIKKysjaW5jbHVkZSAic3Vic2Vncy5oIgorKyNpbmNsdWRlICJzeW1jYXQuaCIKKysjaW5jbHVkZSAib3Bjb2Rlcy9hdnIzMi1vcGMuaCIKKysjaW5jbHVkZSAib3Bjb2Rlcy9hdnIzMi1hc20uaCIKKysjaW5jbHVkZSAiZWxmL2F2cjMyLmgiCisrI2luY2x1ZGUgImR3YXJmMmRiZy5oIgorKworKyNkZWZpbmUgeERFQlVHCisrI2RlZmluZSB4T1BDX0NPTlNJU1RFTkNZX0NIRUNLCisrCisrI2lmZGVmIERFQlVHCisrIyBkZWZpbmUgcHJfZGVidWcoZm10LCBhcmdzLi4uKSBmcHJpbnRmKHN0ZGVyciwgZm10LCAjI2FyZ3MpCisrI2Vsc2UKKysjIGRlZmluZSBwcl9kZWJ1ZyhmbXQsIGFyZ3MuLi4pCisrI2VuZGlmCisrCisrLyogMyBNU0Igb2YgaW5zdHJ1Y3Rpb24gd29yZCBpbmRpY2F0ZSBncm91cC4gR3JvdXAgNyAtPiBleHRlbmRlZCAqLworKyNkZWZpbmUgQVZSMzJfQ09NUEFDVF9QKG9wY29kZSkgKChvcGNvZGVbMF0gJiAweGUwKSAhPSAweGUwKQorKworKyNkZWZpbmUgc3RyZXEoYSwgYikJCShzdHJjbXAoYSwgYikgPT0gMCkKKysjZGVmaW5lIHNraXBfd2hpdGVzcGFjZShzdHIpCWRvIHsgd2hpbGUoKihzdHIpID09ICcgJykgKysoc3RyKTsgfSB3aGlsZSgwKQorKworKy8qIEZsYWdzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUgKi8KKytzdGF0aWMgaW50IGF2cjMyX3BpYwk9IEZBTFNFOworK2ludCBsaW5rcmVsYXgJPSBGQUxTRTsKKytpbnQgYXZyMzJfaWFyY29tcGF0CT0gRkFMU0U7CisrCisrLyogVGhpcyBhcnJheSBob2xkcyB0aGUgY2hhcnMgdGhhdCBhbHdheXMgc3RhcnQgYSBjb21tZW50LiAqLworK2NvbnN0IGNoYXIgY29tbWVudF9jaGFyc1tdCQk9ICIjIjsKKysKKysvKiBUaGlzIGFycmF5IGhvbGRzIHRoZSBjaGFycyB0aGF0IG9ubHkgc3RhcnQgYSBjb21tZW50IGF0IHRoZQorKyAgIGJlZ2lubmluZyBvZiBhIGxpbmUuICBXZSBtdXN0IGluY2x1ZGUgJyMnIGhlcmUgYmVjYXVzZSB0aGUgY29tcGlsZXIKKysgICBtYXkgcHJvZHVjZSAjQVBQIGFuZCAjTk9fQVBQIGluIGl0cyBvdXRwdXQuICAqLworK2NvbnN0IGNoYXIgbGluZV9jb21tZW50X2NoYXJzW10JCT0gIiMiOworKworKy8qIFRoZXNlIG1heSBiZSB1c2VkIGluc3RlYWQgb2YgbmV3bGluZSAoc2FtZSBhcyAnOycgaW4gQykuICAqLworK2NvbnN0IGNoYXIgbGluZV9zZXBhcmF0b3JfY2hhcnNbXQk9ICI7IjsKKysKKysvKiBDaGFycyB0aGF0IGNhbiBiZSB1c2VkIHRvIHNlcGFyYXRlIG1hbnRpc3NhIGZyb20gZXhwb25lbnQgaW4KKysgICBmbG9hdGluZyBwb2ludCBudW1iZXJzLiAgKi8KKytjb25zdCBjaGFyIEVYUF9DSEFSU1tdCQkJPSAiZUUiOworKworKy8qIENoYXJzIHRoYXQgbWVhbiB0aGlzIG51bWJlciBpcyBhIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50LiAgKi8KKytjb25zdCBjaGFyIEZMVF9DSEFSU1tdCQkJPSAiZEQiOworKworKy8qIFByZS1kZWZpbmVkICJfR0xPQkFMX09GRlNFVF9UQUJMRV8iICAqLworK3N5bWJvbFMgKkdPVF9zeW1ib2w7CisrCisrc3RhdGljIHN0cnVjdCBoYXNoX2NvbnRyb2wgKmF2cjMyX21uZW1vbmljX2h0YWI7CisrCisrc3RydWN0IGF2cjMyX2lmaWVsZF9kYXRhCisreworKyAgYmZkX3ZtYSB2YWx1ZTsKKysgIC8qIEZJWE1FOiBHZXQgcmlkIG9mIGFsaWduX29yZGVyIGFuZCBjb21wbGFpbi4gY29tcGxhaW4gaXMgbmV2ZXIKKysgICAgIHVzZWQsIGFsaWduX29yZGVyIGlzIHVzZWQgaW4gb25lIHBsYWNlLiAgVHJ5IHRvIHVzZSB0aGUgcmVsYXgKKysgICAgIHRhYmxlIGluc3RlYWQuICAqLworKyAgdW5zaWduZWQgaW50IGFsaWduX29yZGVyOworK307CisrCisrc3RydWN0IGF2cjMyX2luc24KKyt7CisrICBjb25zdCBzdHJ1Y3QgYXZyMzJfc3ludGF4ICpzeW50YXg7CisrICBleHByZXNzaW9uUyBpbW1lZGlhdGU7CisrICBpbnQgcGNyZWw7CisrICBpbnQgZm9yY2VfZXh0ZW5kZWQ7CisrICB1bnNpZ25lZCBpbnQgbmV4dF9zbG90OworKyAgYmZkX3JlbG9jX2NvZGVfcmVhbF90eXBlIHJfdHlwZTsKKysgIHN0cnVjdCBhdnIzMl9pZmllbGRfZGF0YSBmaWVsZF92YWx1ZVtBVlIzMl9NQVhfRklFTERTXTsKKyt9OworKworK3N0YXRpYyBzdHJ1Y3QgYXZyMzJfaW5zbiBjdXJyZW50X2luc247CisrCisrLyogVGhlIHRhcmdldCBzcGVjaWZpYyBwc2V1ZG8tb3BzIHdlIHN1cHBvcnQuICovCisrc3RhdGljIHZvaWQgc19yc2VnIChpbnQpOworK3N0YXRpYyB2b2lkIHNfY3Bvb2woaW50KTsKKysKKytjb25zdCBwc2V1ZG9fdHlwZVMgbWRfcHNldWRvX3RhYmxlW10gPQorK3sKKysgIC8qIE1ha2Ugc3VyZSB0aGF0IC53b3JkIGlzIDMyIGJpdHMgKi8KKysgIHsgIndvcmQiLCBjb25zLCA0IH0sCisrICB7ICJmaWxlIiwgKHZvaWQgKCopIFBBUkFNUyAoKGludCkpKSBkd2FyZjJfZGlyZWN0aXZlX2ZpbGUsIDAgfSwKKysgIHsgImxvYyIsIGR3YXJmMl9kaXJlY3RpdmVfbG9jLCAwIH0sCisrCisrICAvKiAubGNvbW0gcmVxdWlyZXMgYW4gZXhwbGljaXQgYWxpZ25tZW50IHBhcmFtZXRlciAqLworKyAgeyAibGNvbW0iLCBzX2xjb21tLCAxIH0sCisrCisrICAvKiBBVlIzMi1zcGVjaWZpYyBwc2V1ZG8tb3BzICovCisrICB7ICJjcG9vbCIsIHNfY3Bvb2wsIDB9LAorKworKyAgLyogSUFSIGNvbXBhdGlibGUgcHNldWRvLW9wcyAqLworKyAgeyAicHJvZ3JhbSIsIHNfaWdub3JlLCAwIH0sCisrICB7ICJwdWJsaWMiLCBzX2dsb2JsLCAwIH0sCisrICB7ICJleHRlcm4iLCBzX2lnbm9yZSwgMCB9LAorKyAgeyAibW9kdWxlIiwgc19pZ25vcmUsIDAgfSwKKysgIHsgInJzZWciLCBzX3JzZWcsIDAgfSwKKysgIHsgImRjOCIsIGNvbnMsIDEgfSwKKysgIHsgImRjMTYiLCBjb25zLCAyIH0sCisrICB7ICJkYzMyIiwgY29ucywgNCB9LAorKworKyAgeyBOVUxMLCBOVUxMLCAwIH0KKyt9OworKworKy8qIFF1ZXN0aW9uYWJsZSBzdHVmZiBzdGFydHMgaGVyZSAqLworKworK2VudW0gYXZyMzJfb3BpbmZvIHsKKysgIEFWUjMyX09QSU5GT19OT05FID0gQkZEX1JFTE9DX05PTkUsCisrICBBVlIzMl9PUElORk9fR09ULAorKyAgQVZSMzJfT1BJTkZPX1RMU0dELAorKyAgQVZSMzJfT1BJTkZPX0hJLAorKyAgQVZSMzJfT1BJTkZPX0xPLAorK307CisrCisrZW51bSBhdnIzMl9hcmNoIHsKKysgIEFSQ0hfVFlQRV9BUCwKKysgIEFSQ0hfVFlQRV9VQ1IxLAorKyAgQVJDSF9UWVBFX1VDUjIsCisrfTsKKysKKytzdHJ1Y3QgYXJjaF90eXBlX3MKKyt7CisrICAvKiBBcmNoaXRlY3R1cmUgbmFtZSAqLworKyAgY2hhciAqbmFtZTsKKysgIC8qIEluc3RydWN0aW9uIFNldCBBcmNoaXRlY3R1cmUgRmxhZ3MgKi8KKysgIHVuc2lnbmVkIGxvbmcgaXNhX2ZsYWdzOworK307CisrCisrc3RydWN0IHBhcnRfdHlwZV9zCisreworKyAgLyogUGFydCBuYW1lICovCisrICBjaGFyICpuYW1lOworKyAgLyogQXJjaGl0ZWN0dXJlIHR5cGUgKi8KKysgIHVuc2lnbmVkIGludCBhcmNoOworK307CisrCisrc3RhdGljIHN0cnVjdCBhcmNoX3R5cGVfcyBhcmNoX3R5cGVzW10gPQorK3sKKysgIHsiYXAiLCBBVlIzMl9WMSB8IEFWUjMyX1NJTUQgfCBBVlIzMl9EU1AgfCBBVlIzMl9QSUNPfSwKKysgIHsidWNyMSIsIEFWUjMyX1YxIHwgQVZSMzJfRFNQIHwgQVZSMzJfUk1XfSwKKysgIHsidWNyMiIsIEFWUjMyX1YxIHwgQVZSMzJfVjIgfCBBVlIzMl9EU1AgfCBBVlIzMl9STVd9LAorKyAgeyJhbGwtaW5zbiIsIEFWUjMyX1YxIHwgQVZSMzJfVjIgfCBBVlIzMl9TSU1EIHwgQVZSMzJfRFNQIHwgQVZSMzJfUk1XIHwgQVZSMzJfRlAgfCBBVlIzMl9QSUNPfSwKKysgIHtOVUxMLCAwfQorK307CisrCisrc3RhdGljIHN0cnVjdCBwYXJ0X3R5cGVfcyBwYXJ0X3R5cGVzW10gPSB7CisrICB7ImFwNzAwMCIsIEFSQ0hfVFlQRV9BUH0sCisrICB7ImFwNzAwMSIsIEFSQ0hfVFlQRV9BUH0sCisrICB7ImFwNzAwMiIsIEFSQ0hfVFlQRV9BUH0sCisrICB7ImFwNzIwMCIsIEFSQ0hfVFlQRV9BUH0sCisrICB7InVjM2EwMTI4IiwgQVJDSF9UWVBFX1VDUjJ9LAorKyAgeyJ1YzNhMDI1NiIsIEFSQ0hfVFlQRV9VQ1IyfSwKKysgIHsidWMzYTA1MTJlcyIsIEFSQ0hfVFlQRV9VQ1IxfSwKKysgIHsidWMzYTA1MTIiLCBBUkNIX1RZUEVfVUNSMn0sCisrICB7InVjM2ExMTI4IiwgQVJDSF9UWVBFX1VDUjJ9LAorKyAgeyJ1YzNhMTI1NmVzIiwgQVJDSF9UWVBFX1VDUjF9LAorKyAgeyJ1YzNhMTI1NiIsIEFSQ0hfVFlQRV9VQ1IyfSwKKysgIHsidWMzYTE1MTJlcyIsIEFSQ0hfVFlQRV9VQ1IxfSwKKysgIHsidWMzYTE1MTIiLCBBUkNIX1RZUEVfVUNSMn0sCisrICB7InVjM2EzNjQiLCBBUkNIX1RZUEVfVUNSMn0sCisrICB7InVjM2EzNjRzIiwgQVJDSF9UWVBFX1VDUjJ9LAorKyAgeyJ1YzNhMzEyOCIsIEFSQ0hfVFlQRV9VQ1IyfSwKKysgIHsidWMzYTMxMjhzIiwgQVJDSF9UWVBFX1VDUjJ9LAorKyAgeyJ1YzNhMzI1NiIsIEFSQ0hfVFlQRV9VQ1IyfSwKKysgIHsidWMzYTMyNTZzIiwgQVJDSF9UWVBFX1VDUjJ9LAorKyAgeyJ1YzNiMDY0IiwgQVJDSF9UWVBFX1VDUjF9LAorKyAgeyJ1YzNiMDEyOCIsIEFSQ0hfVFlQRV9VQ1IxfSwKKysgIHsidWMzYjAyNTZlcyIsIEFSQ0hfVFlQRV9VQ1IxfSwKKysgIHsidWMzYjAyNTYiLCBBUkNIX1RZUEVfVUNSMX0sCisrICB7InVjM2IxNjQiLCBBUkNIX1RZUEVfVUNSMX0sCisrICB7InVjM2IxMTI4IiwgQVJDSF9UWVBFX1VDUjF9LAorKyAgeyJ1YzNiMTI1NmVzIiwgQVJDSF9UWVBFX1VDUjF9LAorKyAgeyJ1YzNiMTI1NiIsIEFSQ0hfVFlQRV9VQ1IxfSwKKysgIHtOVUxMLCAwfQorK307CisrCisrLyogQ3VycmVudCBhcmNoaXRlY3R1cmUgdHlwZS4gICovCisrc3RhdGljIHN0cnVjdCBhcmNoX3R5cGVfcyBkZWZhdWx0X2FyY2ggPSB7ImFsbC1pbnNuIiwgQVZSMzJfVjEgfCBBVlIzMl9WMiB8IEFWUjMyX1NJTUQgfCBBVlIzMl9EU1AgfCBBVlIzMl9STVcgfCBBVlIzMl9GUCB8IEFWUjMyX1BJQ08gfTsKKytzdGF0aWMgc3RydWN0IGFyY2hfdHlwZV9zICphdnIzMl9hcmNoID0gJmRlZmF1bHRfYXJjaDsKKysKKysvKiBEaXNwbGF5IG5pY2VseSBmb3JtYXR0ZWQgbGlzdCBvZiBrbm93biBwYXJ0LSBhbmQgYXJjaGl0ZWN0dXJlIG5hbWVzLiAgKi8KKysKKytzdGF0aWMgdm9pZAorK3Nob3dfYXJjaF9saXN0IChGSUxFICpzdHJlYW0pCisreworKyAgaW50IGksIHg7CisrCisrICBmcHJpbnRmIChzdHJlYW0sIF8oIktub3duIGFyY2hpdGVjdHVyZSBuYW1lczoiKSk7CisrICB4ID0gMTAwMDsKKysKKysgIGZvciAoaSA9IDA7IGFyY2hfdHlwZXNbaV0ubmFtZTsgaSsrKQorKyAgICB7CisrICAgICAgaW50IGxlbiA9IHN0cmxlbiAoYXJjaF90eXBlc1tpXS5uYW1lKTsKKysKKysgICAgICB4ICs9IGxlbiArIDE7CisrCisrICAgICAgaWYgKHggPCA3NSkKKysJZnByaW50ZiAoc3RyZWFtLCAiICVzIiwgYXJjaF90eXBlc1tpXS5uYW1lKTsKKysgICAgICBlbHNlCisrCXsKKysJICBmcHJpbnRmIChzdHJlYW0sICJcbiAgJXMiLCBhcmNoX3R5cGVzW2ldLm5hbWUpOworKwkgIHggPSBsZW4gKyAyOworKwl9CisrICAgIH0KKysKKysgIGZwcmludGYgKHN0cmVhbSwgIlxuIik7CisrfQorKworK3N0YXRpYyB2b2lkCisrc2hvd19wYXJ0X2xpc3QgKEZJTEUgKnN0cmVhbSkKKyt7CisrICBpbnQgaSwgeDsKKysKKysgIGZwcmludGYgKHN0cmVhbSwgXygiS25vd24gcGFydCBuYW1lczoiKSk7CisrICB4ID0gMTAwMDsKKysKKysgIGZvciAoaSA9IDA7IHBhcnRfdHlwZXNbaV0ubmFtZTsgaSsrKQorKyAgICB7CisrICAgICAgaW50IGxlbiA9IHN0cmxlbihwYXJ0X3R5cGVzW2ldLm5hbWUpOworKworKyAgICAgIHggKz0gbGVuICsgMTsKKysKKysgICAgICBpZiAoeCA8IDc1KQorKwlmcHJpbnRmIChzdHJlYW0sICIgJXMiLCBwYXJ0X3R5cGVzW2ldLm5hbWUpOworKyAgICAgIGVsc2UKKysJeworKwkgIGZwcmludGYoc3RyZWFtLCAiXG4gICVzIiwgcGFydF90eXBlc1tpXS5uYW1lKTsKKysJICB4ID0gbGVuICsgMjsKKysJfQorKyAgICB9CisrCisrICBmcHJpbnRmIChzdHJlYW0sICJcbiIpOworK30KKysKKytjb25zdCBjaGFyICptZF9zaG9ydG9wdHMgPSAiIjsKKytzdHJ1Y3Qgb3B0aW9uIG1kX2xvbmdvcHRzW10gPQorK3sKKysjZGVmaW5lIE9QVElPTl9BUkNICQkoT1BUSU9OX01EX0JBU0UpCisrI2RlZmluZSBPUFRJT05fUEFSVAkJKE9QVElPTl9BUkNIICsgMSkKKysjZGVmaW5lIE9QVElPTl9JQVIJCShPUFRJT05fUEFSVCArIDEpCisrI2RlZmluZSBPUFRJT05fUElDCQkoT1BUSU9OX0lBUiArIDEpCisrI2RlZmluZSBPUFRJT05fTk9QSUMJCShPUFRJT05fUElDICsgMSkKKysjZGVmaW5lIE9QVElPTl9MSU5LUkVMQVgJKE9QVElPTl9OT1BJQyArIDEpCisrI2RlZmluZSBPUFRJT05fTk9MSU5LUkVMQVgJKE9QVElPTl9MSU5LUkVMQVggKyAxKQorKyNkZWZpbmUgT1BUSU9OX0RJUkVDVF9EQVRBX1JFRlMgKE9QVElPTl9OT0xJTktSRUxBWCArIDEpCisrICB7Im1hcmNoIiwJCXJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fQVJDSH0sCisrICB7Im1wYXJ0IiwJCXJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fUEFSVH0sCisrICB7ImlhciIsCQlub19hcmd1bWVudCwgTlVMTCwgT1BUSU9OX0lBUn0sCisrICB7InBpYyIsCQlub19hcmd1bWVudCwgTlVMTCwgT1BUSU9OX1BJQ30sCisrICB7Im5vLXBpYyIsCQlub19hcmd1bWVudCwgTlVMTCwgT1BUSU9OX05PUElDfSwKKysgIHsibGlua3JlbGF4IiwJCW5vX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fTElOS1JFTEFYfSwKKysgIHsibm8tbGlua3JlbGF4IiwJbm9fYXJndW1lbnQsIE5VTEwsIE9QVElPTl9OT0xJTktSRUxBWH0sCisrICAvKiBkZXByZWNhdGVkIGFsaWFzIGZvciAtbXBhcnQ9eHh4ICovCisrICB7Im1jcHUiLAkJcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIE9QVElPTl9QQVJUfSwKKysgIHtOVUxMLAkJbm9fYXJndW1lbnQsIE5VTEwsIDB9CisrfTsKKysKKytzaXplX3QgbWRfbG9uZ29wdHNfc2l6ZSA9IHNpemVvZiAobWRfbG9uZ29wdHMpOworKworK3ZvaWQKKyttZF9zaG93X3VzYWdlIChGSUxFICpzdHJlYW0pCisreworKyAgZnByaW50ZiAoc3RyZWFtLCBfKCJcCisrQVZSMzIgb3B0aW9uczpcblwKKysgIC1tYXJjaD1bYXJjaC1uYW1lXSAgICAgIFNlbGVjdCBjcHUgYXJjaGl0ZWN0dXJlLiBbRGVmYXVsdCBgYWxsLWluc24nXVxuXAorKyAgLW1wYXJ0PVtwYXJ0LW5hbWVdICAgICAgU2VsZWN0IHNwZWNpZmljIHBhcnQuIFtEZWZhdWx0IGBub25lJ11cblwKKysgIC0tcGljICAgICAgICAgICAgICAgICAgIFByb2R1Y2UgUG9zaXRpb24tSW5kZXBlbmRlbnQgQ29kZVxuXAorKyAgLS1uby1waWMgICAgICAgICAgICAgICAgRG9uJ3QgcHJvZHVjZSBQb3NpdGlvbi1JbmRlcGVuZGVudCBDb2RlXG5cCisrICAtLWxpbmtyZWxheCAgICAgICAgICAgICBQcm9kdWNlIG91dHB1dCBzdWl0YWJsZSBmb3IgbGlua2VyIHJlbGF4aW5nXG5cCisrICAtLW5vLWxpbmtyZWxheCAgICAgICAgICBEb24ndCBwcm9kdWNlIG91dHB1dCBzdWl0YWJsZSBmb3IgbGlua2VyIHJlbGF4aW5nXG4iKSk7CisrICBzaG93X2FyY2hfbGlzdChzdHJlYW0pOworK30KKysKKytpbnQKKyttZF9wYXJzZV9vcHRpb24gKGludCBjLCBjaGFyICphcmcgQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICBzd2l0Y2ggKGMpCisrICAgIHsKKysgICAgY2FzZSBPUFRJT05fQVJDSDoKKysgICAgICB7CisrCWludCBpOworKwljaGFyICpzID0gYWxsb2NhIChzdHJsZW4gKGFyZykgKyAxKTsKKysKKysJeworKwkgIGNoYXIgKnQgPSBzOworKwkgIGNoYXIgKmFyZzEgPSBhcmc7CisrCisrCSAgZG8KKysJICAgICp0ID0gVE9MT1dFUiAoKmFyZzErKyk7CisrCSAgd2hpbGUgKCp0KyspOworKwl9CisrCisrICAgICAgICAvKiBBZGQgYmFja3dhcmQgY29tcGFiaWxpdHkgKi8KKysgICAgICAgIGlmIChzdHJjbXAgKCJ1YyIsIHMpPT0gMCkKKysgICAgICAgICAgeworKyAgICAgICAgICAgIGFzX3dhcm4oIkRlcHJlY2F0ZWQgYXJjaCBgJXMnIHNwZWNpZmllZC4gIgorKyAgICAgICAgICAgICAgICAgICAgIlBsZWFzZSB1c2UgJy1tYXJjaD11Y3IxJyBpbnN0ZWFkLiAiCisrICAgICAgICAgICAgICAgICAgICAiQ29udmVydGluZyB0byBhcmNoICd1Y3IxJ1xuIiwKKysgICAgICAgICAgICAgICAgICAgICBzKTsKKysgICAgICAgICAgICBzPSJ1Y3IxIjsKKysgICAgICAgICAgfQorKworKwlmb3IgKGkgPSAwOyBhcmNoX3R5cGVzW2ldLm5hbWU7ICsraSkKKysJICBpZiAoc3RyY21wIChhcmNoX3R5cGVzW2ldLm5hbWUsIHMpID09IDApCisrCSAgICBicmVhazsKKysKKysJaWYgKCFhcmNoX3R5cGVzW2ldLm5hbWUpCisrCSAgeworKwkgICAgc2hvd19hcmNoX2xpc3QgKHN0ZGVycik7CisrCSAgICBhc19mYXRhbCAoXygidW5rbm93biBhcmNoaXRlY3R1cmU6ICVzXG4iKSwgYXJnKTsKKysJICB9CisrCisrICAgICAgICBhdnIzMl9hcmNoID0gJmFyY2hfdHlwZXNbaV07CisrCWJyZWFrOworKyAgICAgIH0KKysgICAgY2FzZSBPUFRJT05fUEFSVDoKKysgICAgICB7CisrCWludCBpOworKwljaGFyICpzID0gYWxsb2NhIChzdHJsZW4gKGFyZykgKyAxKTsKKysJY2hhciAqdCA9IHM7CisrCWNoYXIgKnAgPSBhcmc7CisrCisrCS8qIElmIGFyY2ggdHlwZSBoYXMgYWxyZWFkeSBiZWVuIHNldCwgZG9uJ3QgYm90aGVyLgorKwkgICAtbWFyY2g9IGFsd2F5cyBvdmVycmlkZXMgLW1wYXJ0PSAgKi8KKysJaWYgKGF2cjMyX2FyY2ggIT0gJmRlZmF1bHRfYXJjaCkKKysJICBicmVhazsKKysKKysJZG8KKysJICAqdCA9IFRPTE9XRVIgKCpwKyspOworKwl3aGlsZSAoKnQrKyk7CisrCisrCWZvciAoaSA9IDA7IHBhcnRfdHlwZXNbaV0ubmFtZTsgKytpKQorKwkgIGlmIChzdHJjbXAgKHBhcnRfdHlwZXNbaV0ubmFtZSwgcykgPT0gMCkKKysJICAgIGJyZWFrOworKworKwlpZiAoIXBhcnRfdHlwZXNbaV0ubmFtZSkKKysJICB7CisrCSAgICBzaG93X3BhcnRfbGlzdCAoc3RkZXJyKTsKKysJICAgIGFzX2ZhdGFsIChfKCJ1bmtub3duIHBhcnQ6ICVzXG4iKSwgYXJnKTsKKysJICB9CisrCisrCWF2cjMyX2FyY2ggPSAmYXJjaF90eXBlc1twYXJ0X3R5cGVzW2ldLmFyY2hdOworKwlicmVhazsKKysgICAgICB9CisrICAgIGNhc2UgT1BUSU9OX0lBUjoKKysgICAgICBhdnIzMl9pYXJjb21wYXQgPSAxOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIE9QVElPTl9QSUM6CisrICAgICAgYXZyMzJfcGljID0gMTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBPUFRJT05fTk9QSUM6CisrICAgICAgYXZyMzJfcGljID0gMDsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBPUFRJT05fTElOS1JFTEFYOgorKyAgICAgIGxpbmtyZWxheCA9IDE7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgT1BUSU9OX05PTElOS1JFTEFYOgorKyAgICAgIGxpbmtyZWxheCA9IDA7CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysgIHJldHVybiAxOworK30KKysKKysvKiBDYW4ndCB1c2Ugc3ltYm9sX25ldyBoZXJlLCBzbyBoYXZlIHRvIGNyZWF0ZSBhIHN5bWJvbCBhbmQgdGhlbiBhdAorKyAgIGEgbGF0ZXIgZGF0ZSBhc3NpZ24gaXQgYSB2YWx1ZS4gVGhhdHMgd2hhdCB0aGVzZSBmdW5jdGlvbnMgZG8uCisrCisrICAgU2hhbWVsZXNzbHkgc3RvbGVuIGZyb20gQVJNLiAgKi8KKysKKytzdGF0aWMgdm9pZAorK3N5bWJvbF9sb2NhdGUgKHN5bWJvbFMgKiAgICBzeW1ib2xQLAorKwkgICAgICAgY29uc3QgY2hhciAqIG5hbWUsCS8qIEl0IGlzIGNvcGllZCwgdGhlIGNhbGxlciBjYW4gbW9kaWZ5LiAgKi8KKysJICAgICAgIHNlZ1QgICAgICAgICBzZWdtZW50LAkvKiBTZWdtZW50IGlkZW50aWZpZXIgKFNFR188c29tZXRoaW5nPikuICAqLworKwkgICAgICAgdmFsdWVUICAgICAgIHZhbHUsCS8qIFN5bWJvbCB2YWx1ZS4gICovCisrCSAgICAgICBmcmFnUyAqICAgICAgZnJhZykJLyogQXNzb2NpYXRlZCBmcmFnbWVudC4gICovCisreworKyAgdW5zaWduZWQgaW50IG5hbWVfbGVuZ3RoOworKyAgY2hhciAqIHByZXNlcnZlZF9jb3B5X29mX25hbWU7CisrCisrICBuYW1lX2xlbmd0aCA9IHN0cmxlbiAobmFtZSkgKyAxOyAgIC8qICsxIGZvciBcMC4gICovCisrICBvYnN0YWNrX2dyb3cgKCZub3RlcywgbmFtZSwgbmFtZV9sZW5ndGgpOworKyAgcHJlc2VydmVkX2NvcHlfb2ZfbmFtZSA9IG9ic3RhY2tfZmluaXNoICgmbm90ZXMpOworKyNpZmRlZiBTVFJJUF9VTkRFUlNDT1JFCisrICBpZiAocHJlc2VydmVkX2NvcHlfb2ZfbmFtZVswXSA9PSAnXycpCisrICAgIHByZXNlcnZlZF9jb3B5X29mX25hbWUrKzsKKysjZW5kaWYKKysKKysjaWZkZWYgdGNfY2Fub25pY2FsaXplX3N5bWJvbF9uYW1lCisrICBwcmVzZXJ2ZWRfY29weV9vZl9uYW1lID0KKysgICAgdGNfY2Fub25pY2FsaXplX3N5bWJvbF9uYW1lIChwcmVzZXJ2ZWRfY29weV9vZl9uYW1lKTsKKysjZW5kaWYKKysKKysgIFNfU0VUX05BTUUgKHN5bWJvbFAsIHByZXNlcnZlZF9jb3B5X29mX25hbWUpOworKworKyAgU19TRVRfU0VHTUVOVCAoc3ltYm9sUCwgc2VnbWVudCk7CisrICBTX1NFVF9WQUxVRSAoc3ltYm9sUCwgdmFsdSk7CisrICBzeW1ib2xfY2xlYXJfbGlzdF9wb2ludGVycyAoc3ltYm9sUCk7CisrCisrICBzeW1ib2xfc2V0X2ZyYWcgKHN5bWJvbFAsIGZyYWcpOworKworKyAgLyogTGluayB0byBlbmQgb2Ygc3ltYm9sIGNoYWluLiAgKi8KKysgIHsKKysgICAgZXh0ZXJuIGludCBzeW1ib2xfdGFibGVfZnJvemVuOworKworKyAgICBpZiAoc3ltYm9sX3RhYmxlX2Zyb3plbikKKysgICAgICBhYm9ydCAoKTsKKysgIH0KKysKKysgIHN5bWJvbF9hcHBlbmQgKHN5bWJvbFAsIHN5bWJvbF9sYXN0UCwgJiBzeW1ib2xfcm9vdFAsICYgc3ltYm9sX2xhc3RQKTsKKysKKysgIG9ial9zeW1ib2xfbmV3X2hvb2sgKHN5bWJvbFApOworKworKyNpZmRlZiB0Y19zeW1ib2xfbmV3X2hvb2sKKysgIHRjX3N5bWJvbF9uZXdfaG9vayAoc3ltYm9sUCk7CisrI2VuZGlmCisrCisrI2lmZGVmIERFQlVHX1NZTVMKKysgIHZlcmlmeV9zeW1ib2xfY2hhaW4gKHN5bWJvbF9yb290UCwgc3ltYm9sX2xhc3RQKTsKKysjZW5kaWYgLyogREVCVUdfU1lNUyAgKi8KKyt9CisrCisrc3RydWN0IGNwb29sX2VudHJ5CisreworKyAgaW50CQkJcmVmY291bnQ7CisrICBvZmZzZXRUCQlvZmZzZXQ7CisrICBleHByZXNzaW9uUwkJZXhwOworK307CisrCisrc3RydWN0IGNwb29sCisreworKyAgc3RydWN0IGNwb29sCQkqbmV4dDsKKysgIGludAkJCXVzZWQ7CisrICBzdHJ1Y3QgY3Bvb2xfZW50cnkJKmxpdGVyYWxzOworKyAgdW5zaWduZWQgaW50CQlwYWRkaW5nOworKyAgdW5zaWduZWQgaW50CQluZXh0X2ZyZWVfZW50cnk7CisrICB1bnNpZ25lZCBpbnQJCWlkOworKyAgc3ltYm9sUwkJKnN5bWJvbDsKKysgIHNlZ1QJCQlzZWN0aW9uOworKyAgc3Vic2VnVAkJc3ViX3NlY3Rpb247CisrfTsKKysKKytzdHJ1Y3QgY3Bvb2wgKmNwb29sX2xpc3QgPSBOVUxMOworKworK3N0YXRpYyBzdHJ1Y3QgY3Bvb2wgKgorK2ZpbmRfY3Bvb2woc2VnVCBzZWN0aW9uLCBzdWJzZWdUIHN1Yl9zZWN0aW9uKQorK3sKKysgIHN0cnVjdCBjcG9vbCAqcG9vbDsKKysKKysgIGZvciAocG9vbCA9IGNwb29sX2xpc3Q7IHBvb2wgIT0gTlVMTDsgcG9vbCA9IHBvb2wtPm5leHQpCisrICAgIHsKKysgICAgICBpZiAoIXBvb2wtPnVzZWQKKysJICAmJiBwb29sLT5zZWN0aW9uID09IHNlY3Rpb24KKysJICAmJiBwb29sLT5zdWJfc2VjdGlvbiA9PSBzdWJfc2VjdGlvbikKKysJYnJlYWs7CisrICAgIH0KKysKKysgIHJldHVybiBwb29sOworK30KKysKKytzdGF0aWMgc3RydWN0IGNwb29sICoKKytmaW5kX29yX21ha2VfY3Bvb2woc2VnVCBzZWN0aW9uLCBzdWJzZWdUIHN1Yl9zZWN0aW9uKQorK3sKKysgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmV4dF9jcG9vbF9pZCA9IDA7CisrICBzdHJ1Y3QgY3Bvb2wgKnBvb2w7CisrCisrICBwb29sID0gZmluZF9jcG9vbChzZWN0aW9uLCBzdWJfc2VjdGlvbik7CisrCisrICBpZiAoIXBvb2wpCisrICAgIHsKKysgICAgICBwb29sID0geG1hbGxvYyhzaXplb2YoKnBvb2wpKTsKKysgICAgICBpZiAoIXBvb2wpCisrCXJldHVybiBOVUxMOworKworKyAgICAgIHBvb2wtPnVzZWQgPSAwOworKyAgICAgIHBvb2wtPmxpdGVyYWxzID0gTlVMTDsKKysgICAgICBwb29sLT5wYWRkaW5nID0gMDsKKysgICAgICBwb29sLT5uZXh0X2ZyZWVfZW50cnkgPSAwOworKyAgICAgIHBvb2wtPnNlY3Rpb24gPSBzZWN0aW9uOworKyAgICAgIHBvb2wtPnN1Yl9zZWN0aW9uID0gc3ViX3NlY3Rpb247CisrICAgICAgcG9vbC0+bmV4dCA9IGNwb29sX2xpc3Q7CisrICAgICAgcG9vbC0+c3ltYm9sID0gTlVMTDsKKysKKysgICAgICBjcG9vbF9saXN0ID0gcG9vbDsKKysgICAgfQorKworKyAgLyogTlVMTCBzeW1ib2wgbWVhbnMgdGhhdCB0aGUgcG9vbCBpcyBuZXcgb3IgaGFzIGp1c3QgYmVlbiBlbXB0aWVkLiAgKi8KKysgIGlmICghcG9vbC0+c3ltYm9sKQorKyAgICB7CisrICAgICAgcG9vbC0+c3ltYm9sID0gc3ltYm9sX2NyZWF0ZShGQUtFX0xBQkVMX05BTUUsIHVuZGVmaW5lZF9zZWN0aW9uLAorKwkJCQkgICAwLCAmemVyb19hZGRyZXNzX2ZyYWcpOworKyAgICAgIHBvb2wtPmlkID0gbmV4dF9jcG9vbF9pZCsrOworKyAgICB9CisrCisrICByZXR1cm4gcG9vbDsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBjcG9vbCAqCisrYWRkX3RvX2Nwb29sKGV4cHJlc3Npb25TICpleHAsIHVuc2lnbmVkIGludCAqaW5kZXgsIGludCByZWYpCisreworKyAgc3RydWN0IGNwb29sICpwb29sOworKyAgdW5zaWduZWQgaW50IGVudHJ5OworKworKyAgcG9vbCA9IGZpbmRfb3JfbWFrZV9jcG9vbChub3dfc2VnLCBub3dfc3Vic2VnKTsKKysKKysgIC8qIENoZWNrIGlmIHRoaXMgY29uc3RhbnQgaXMgYWxyZWFkeSBpbiB0aGUgcG9vbC4gICovCisrICBmb3IgKGVudHJ5ID0gMDsgZW50cnkgPCBwb29sLT5uZXh0X2ZyZWVfZW50cnk7IGVudHJ5KyspCisrICAgIHsKKysgICAgICBpZiAoKHBvb2wtPmxpdGVyYWxzW2VudHJ5XS5leHAuWF9vcCA9PSBleHAtPlhfb3ApCisrCSAgJiYgKGV4cC0+WF9vcCA9PSBPX2NvbnN0YW50KQorKwkgICYmIChwb29sLT5saXRlcmFsc1tlbnRyeV0uZXhwLlhfYWRkX251bWJlcgorKwkgICAgICA9PSBleHAtPlhfYWRkX251bWJlcikKKysJICAmJiAocG9vbC0+bGl0ZXJhbHNbZW50cnldLmV4cC5YX3Vuc2lnbmVkCisrCSAgICAgID09IGV4cC0+WF91bnNpZ25lZCkpCisrCWJyZWFrOworKworKyAgICAgIGlmICgocG9vbC0+bGl0ZXJhbHNbZW50cnldLmV4cC5YX29wID09IGV4cC0+WF9vcCkKKysJICAmJiAoZXhwLT5YX29wID09IE9fc3ltYm9sKQorKwkgICYmIChwb29sLT5saXRlcmFsc1tlbnRyeV0uZXhwLlhfYWRkX251bWJlcgorKwkgICAgICA9PSBleHAtPlhfYWRkX251bWJlcikKKysJICAmJiAocG9vbC0+bGl0ZXJhbHNbZW50cnldLmV4cC5YX2FkZF9zeW1ib2wKKysJICAgICAgPT0gZXhwLT5YX2FkZF9zeW1ib2wpCisrCSAgJiYgKHBvb2wtPmxpdGVyYWxzW2VudHJ5XS5leHAuWF9vcF9zeW1ib2wKKysJICAgICAgPT0gZXhwLT5YX29wX3N5bWJvbCkpCisrCWJyZWFrOworKyAgICB9CisrCisrICAvKiBDcmVhdGUgYW4gZW50cnkgaWYgd2UgZGlkbid0IGZpbmQgYSBtYXRjaCAqLworKyAgaWYgKGVudHJ5ID09IHBvb2wtPm5leHRfZnJlZV9lbnRyeSkKKysgICAgeworKyAgICAgIHBvb2wtPmxpdGVyYWxzID0geHJlYWxsb2MocG9vbC0+bGl0ZXJhbHMsCisrCQkJCXNpemVvZihzdHJ1Y3QgY3Bvb2xfZW50cnkpICogKGVudHJ5ICsgMSkpOworKyAgICAgIHBvb2wtPmxpdGVyYWxzW2VudHJ5XS5leHAgPSAqZXhwOworKyAgICAgIHBvb2wtPmxpdGVyYWxzW2VudHJ5XS5yZWZjb3VudCA9IDA7CisrICAgICAgcG9vbC0+bmV4dF9mcmVlX2VudHJ5Kys7CisrICAgIH0KKysKKysgIGlmIChpbmRleCkKKysgICAgKmluZGV4ID0gZW50cnk7CisrICBpZiAocmVmKQorKyAgICBwb29sLT5saXRlcmFsc1tlbnRyeV0ucmVmY291bnQrKzsKKysKKysgIHJldHVybiBwb29sOworK30KKysKKytzdHJ1Y3QgYXZyMzJfb3BlcmFuZAorK3sKKysgIGludCBpZDsKKysgIGludCBpc19zaWduZWQ7CisrICBpbnQgaXNfcGNyZWw7CisrICBpbnQgYWxpZ25fb3JkZXI7CisrICBpbnQgKCptYXRjaCkoY2hhciAqc3RyKTsKKysgIHZvaWQgKCpwYXJzZSkoY29uc3Qgc3RydWN0IGF2cjMyX29wZXJhbmQgKm9wLCBjaGFyICpzdHIsIGludCBvcGluZGV4KTsKKyt9OworKworK3N0YXRpYyBpbnQKKyttYXRjaF9hbnl0aGluZyhjaGFyICpzdHIgQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICByZXR1cm4gMTsKKyt9CisrCisrc3RhdGljIGludAorK21hdGNoX2ludHJlZyhjaGFyICpzdHIpCisreworKyAgaW50IHJlZ2lkLCByZXQgPSAxOworKworKyAgcmVnaWQgPSBhdnIzMl9wYXJzZV9pbnRyZWcoc3RyKTsKKysgIGlmIChyZWdpZCA8IDApCisrICAgIHJldCA9IDA7CisrCisrICBwcl9kZWJ1ZygibWF0Y2hfaW50cmVnOiBgJXMnOiAlZFxuIiwgc3RyLCByZXQpOworKworKyAgcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIGludAorK21hdGNoX2ludHJlZ19wcmVkZWMoY2hhciAqc3RyKQorK3sKKysgIGludCByZWdpZDsKKysKKysgIGlmIChzdHJbMF0gIT0gJy0nIHx8IHN0clsxXSAhPSAnLScpCisrICAgIHJldHVybiAwOworKworKyAgcmVnaWQgPSBhdnIzMl9wYXJzZV9pbnRyZWcoc3RyICsgMik7CisrICBpZiAocmVnaWQgPCAwKQorKyAgICByZXR1cm4gMDsKKysKKysgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50CisrbWF0Y2hfaW50cmVnX3Bvc3RpbmMoY2hhciAqc3RyKQorK3sKKysgIGludCByZWdpZCwgcmV0ID0gMTsKKysgIGNoYXIgKnAsIGM7CisrCisrICBmb3IgKHAgPSBzdHI7ICpwOyBwKyspCisrICAgIGlmICgqcCA9PSAnKycpCisrICAgICAgYnJlYWs7CisrCisrICBpZiAocFswXSAhPSAnKycgfHwgcFsxXSAhPSAnKycpCisrICAgIHJldHVybiAwOworKworKyAgYyA9ICpwLCAqcCA9IDA7CisrICByZWdpZCA9IGF2cjMyX3BhcnNlX2ludHJlZyhzdHIpOworKyAgaWYgKHJlZ2lkIDwgMCkKKysgICAgcmV0ID0gMDsKKysKKysgICpwID0gYzsKKysgIHJldHVybiByZXQ7CisrfQorKworK3N0YXRpYyBpbnQKKyttYXRjaF9pbnRyZWdfbHNsKGNoYXIgKnN0cikKKyt7CisrICBpbnQgcmVnaWQsIHJldCA9IDE7CisrICBjaGFyICpwLCBjOworKworKyAgZm9yIChwID0gc3RyOyAqcDsgcCsrKQorKyAgICBpZiAoKnAgPT0gJzwnKQorKyAgICAgIGJyZWFrOworKworKyAgaWYgKHBbMF0gJiYgcFsxXSAhPSAnPCcpCisrICAgIHJldHVybiAwOworKworKyAgYyA9ICpwLCAqcCA9IDA7CisrICByZWdpZCA9IGF2cjMyX3BhcnNlX2ludHJlZyhzdHIpOworKyAgaWYgKHJlZ2lkIDwgMCkKKysgICAgcmV0ID0gMDsKKysKKysgICpwID0gYzsKKysgIHJldHVybiByZXQ7CisrfQorKworK3N0YXRpYyBpbnQKKyttYXRjaF9pbnRyZWdfbHNyKGNoYXIgKnN0cikKKyt7CisrICBpbnQgcmVnaWQsIHJldCA9IDE7CisrICBjaGFyICpwLCBjOworKworKyAgZm9yIChwID0gc3RyOyAqcDsgcCsrKQorKyAgICBpZiAoKnAgPT0gJz4nKQorKyAgICAgIGJyZWFrOworKworKyAgaWYgKHBbMF0gJiYgcFsxXSAhPSAnPicpCisrICAgIHJldHVybiAwOworKworKyAgYyA9ICpwLCAqcCA9IDA7CisrCisrICByZWdpZCA9IGF2cjMyX3BhcnNlX2ludHJlZyhzdHIpOworKyAgaWYgKHJlZ2lkIDwgMCkKKysgICAgcmV0ID0gMDsKKysKKysgICpwID0gYzsKKysgIHJldHVybiByZXQ7CisrfQorKworK3N0YXRpYyBpbnQKKyttYXRjaF9pbnRyZWdfcGFydChjaGFyICpzdHIpCisreworKyAgaW50IHJlZ2lkLCByZXQgPSAxOworKyAgY2hhciAqcCwgYzsKKysKKysgIGZvciAocCA9IHN0cjsgKnA7IHArKykKKysgICAgaWYgKCpwID09ICc6JykKKysgICAgICBicmVhazsKKysKKysgIGlmIChwWzBdICE9ICc6JyB8fCAhSVNQUklOVChwWzFdKSB8fCBwWzJdICE9ICdcMCcpCisrICAgIHJldHVybiAwOworKworKyAgYyA9ICpwLCAqcCA9IDA7CisrICByZWdpZCA9IGF2cjMyX3BhcnNlX2ludHJlZyhzdHIpOworKyAgaWYgKHJlZ2lkIDwgMCkKKysgICAgcmV0ID0gMDsKKysKKysgICpwID0gYzsKKysKKysgIHJldHVybiByZXQ7CisrfQorKworKyNkZWZpbmUgbWF0Y2hfaW50cmVnX2Rpc3AgbWF0Y2hfYW55dGhpbmcKKysKKytzdGF0aWMgaW50CisrbWF0Y2hfaW50cmVnX2luZGV4KGNoYXIgKnN0cikKKyt7CisrICBpbnQgcmVnaWQsIHJldCA9IDE7CisrICBjaGFyICpwLCAqZW5kLCBjOworKworKyAgZm9yIChwID0gc3RyOyAqcDsgcCsrKQorKyAgICBpZiAoKnAgPT0gJ1snKQorKyAgICAgIGJyZWFrOworKworKyAgLyogZG9uJ3QgYWxsb3cgZW1wdHkgZGlzcGxhY2VtZW50IGhlcmUgKGl0IG1ha2VzIG5vIHNlbnNlKSAqLworKyAgaWYgKHBbMF0gIT0gJ1snKQorKyAgICByZXR1cm4gMDsKKysKKysgIGZvciAoZW5kID0gcCArIDE7ICplbmQ7IGVuZCsrKSA7CisrICBpZiAoKigtLWVuZCkgIT0gJ10nKQorKyAgICByZXR1cm4gMDsKKysKKysgIGMgPSAqZW5kLCAqZW5kID0gMDsKKysgIGlmICghbWF0Y2hfaW50cmVnX2xzbChwICsgMSkpCisrICAgIHJldCA9IDA7CisrICAqZW5kID0gYzsKKysKKysgIGlmIChyZXQpCisrICAgIHsKKysgICAgICBjID0gKnAsICpwID0gMDsKKysgICAgICByZWdpZCA9IGF2cjMyX3BhcnNlX2ludHJlZyhzdHIpOworKyAgICAgIGlmIChyZWdpZCA8IDApCisrCXJldCA9IDA7CisrICAgICAgKnAgPSBjOworKyAgICB9CisrCisrICByZXR1cm4gcmV0OworK30KKysKKytzdGF0aWMgaW50CisrbWF0Y2hfaW50cmVnX3hpbmRleChjaGFyICpzdHIpCisreworKyAgaW50IHJlZ2lkLCByZXQgPSAxOworKyAgY2hhciAqcCwgKmVuZCwgYzsKKysKKysgIGZvciAocCA9IHN0cjsgKnA7IHArKykKKysgICAgaWYgKCpwID09ICdbJykKKysgICAgICBicmVhazsKKysKKysgIC8qIGVtcHR5IGRpc3BsYWNlbWVudCBtYWtlcyBubyBzZW5zZSBoZXJlIGVpdGhlciAqLworKyAgaWYgKHBbMF0gIT0gJ1snKQorKyAgICByZXR1cm4gMDsKKysKKysgIGZvciAoZW5kID0gcCArIDE7ICplbmQ7IGVuZCsrKQorKyAgICBpZiAoKmVuZCA9PSAnPCcpCisrICAgICAgYnJlYWs7CisrCisrICBpZiAoIXN0cmVxKGVuZCwgIjw8Ml0iKSkKKysgICAgcmV0dXJuIDA7CisrCisrICBjID0gKmVuZCwgKmVuZCA9IDA7CisrICBpZiAoIW1hdGNoX2ludHJlZ19wYXJ0KHAgKyAxKSkKKysgICAgcmV0ID0gMDsKKysgICplbmQgPSBjOworKworKyAgaWYgKHJldCkKKysgICAgeworKyAgICAgIGMgPSAqcCwgKnAgPSAwOworKyAgICAgIHJlZ2lkID0gYXZyMzJfcGFyc2VfaW50cmVnKHN0cik7CisrICAgICAgaWYgKHJlZ2lkIDwgMCkKKysJcmV0ID0gMDsKKysgICAgICAqcCA9IGM7CisrICAgIH0KKysKKysgIHJldHVybiByZXQ7CisrfQorKworKy8qIFRoZSBQQ19VRElTUF9XIG9wZXJhdG9yIG1heSBzaG93IHVwIGFzIGEgbGFiZWwgb3IgYXMgYSBwY1tkaXNwXQorKyAgIGV4cHJlc3Npb24uICBTbyB0aGVyZSdzIG5vIHBvaW50IGluIGF0dGVtcHRpbmcgdG8gbWF0Y2ggdGhpcy4uLiAgKi8KKysjZGVmaW5lIG1hdGNoX3BjX2Rpc3AJbWF0Y2hfYW55dGhpbmcKKysKKytzdGF0aWMgaW50CisrbWF0Y2hfc3AoY2hhciAqc3RyKQorK3sKKysgIC8qIFNQIGluIGFueSBmb3JtIHdpbGwgZG8gKi8KKysgIHJldHVybiBhdnIzMl9wYXJzZV9pbnRyZWcoc3RyKSA9PSBBVlIzMl9SRUdfU1A7CisrfQorKworK3N0YXRpYyBpbnQKKyttYXRjaF9zcF9kaXNwKGNoYXIgKnN0cikKKyt7CisrICBpbnQgcmVnaWQsIHJldCA9IDE7CisrICBjaGFyICpwLCBjOworKworKyAgZm9yIChwID0gc3RyOyAqcDsgcCsrKQorKyAgICBpZiAoKnAgPT0gJ1snKQorKyAgICAgIGJyZWFrOworKworKyAgLyogYWxsb3cgZW1wdHkgZGlzcGxhY2VtZW50LCBtZWFuaW5nIHplcm8gKi8KKysgIGlmIChwWzBdID09ICdbJykKKysgICAgeworKyAgICAgIGNoYXIgKmVuZDsKKysgICAgICBmb3IgKGVuZCA9IHAgKyAxOyAqZW5kOyBlbmQrKykgOworKyAgICAgIGlmIChlbmRbLTFdICE9ICddJykKKysJcmV0dXJuIDA7CisrICAgIH0KKysKKysgIGMgPSAqcCwgKnAgPSAwOworKyAgcmVnaWQgPSBhdnIzMl9wYXJzZV9pbnRyZWcoc3RyKTsKKysgIGlmIChyZWdpZCAhPSBBVlIzMl9SRUdfU1ApCisrICAgIHJldCA9IDA7CisrCisrICAqcCA9IGM7CisrICByZXR1cm4gcmV0OworK30KKysKKytzdGF0aWMgaW50CisrbWF0Y2hfY3BubyhjaGFyICpzdHIpCisreworKyAgaWYgKHN0cm5jYXNlY21wKHN0ciwgImNwIiwgMikgIT0gMCkKKysgICAgcmV0dXJuIDA7CisrICByZXR1cm4gMTsKKyt9CisrCisrc3RhdGljIGludAorK21hdGNoX2NwcmVnKGNoYXIgKnN0cikKKyt7CisrICBpZiAoc3RybmNhc2VjbXAoc3RyLCAiY3IiLCAyKSAhPSAwKQorKyAgICByZXR1cm4gMDsKKysgIHJldHVybiAxOworK30KKysKKysvKiBXZSBhbGxvdyBjb21wbGV4IGV4cHJlc3Npb25zLCBhbmQgcmVnaXN0ZXIgbmFtZXMgbWF5IHNob3cgdXAgYXMKKysgICBzeW1ib2xzLiAgSnVzdCBtYWtlIHN1cmUgaW1tZWRpYXRlIGV4cHJlc3Npb25zIGFyZSBhbHdheXMgbWF0Y2hlZAorKyAgIGxhc3QuICAqLworKyNkZWZpbmUgbWF0Y2hfY29uc3QJCW1hdGNoX2FueXRoaW5nCisrI2RlZmluZSBtYXRjaF9qbXBsYWJlbAkJbWF0Y2hfYW55dGhpbmcKKysjZGVmaW5lIG1hdGNoX251bWJlcgkJbWF0Y2hfYW55dGhpbmcKKysKKysvKiBNbmVtb25pY3MgdGhhdCB0YWtlIHJlZ2xpc3RzIG5ldmVyIGFjY2VwdCBhbnl0aGluZyBlbHNlICovCisrI2RlZmluZSBtYXRjaF9yZWdsaXN0OAkJbWF0Y2hfYW55dGhpbmcKKysjZGVmaW5lIG1hdGNoX3JlZ2xpc3Q5CQltYXRjaF9hbnl0aGluZworKyNkZWZpbmUgbWF0Y2hfcmVnbGlzdDE2CQltYXRjaF9hbnl0aGluZworKyNkZWZpbmUgbWF0Y2hfcmVnbGlzdF9sZG0JbWF0Y2hfYW55dGhpbmcKKysjZGVmaW5lIG1hdGNoX3JlZ2xpc3RfY3A4CW1hdGNoX2FueXRoaW5nCisrI2RlZmluZSBtYXRjaF9yZWdsaXN0X2NwZDgJbWF0Y2hfYW55dGhpbmcKKysKKysvKiBEaXR0byBmb3IgcmV0dmFsLCBqb3NwaW5jIGFuZCBtY2FsbCAqLworKyNkZWZpbmUgbWF0Y2hfcmV0dmFsCQltYXRjaF9hbnl0aGluZworKyNkZWZpbmUgbWF0Y2hfam9zcGluYwkJbWF0Y2hfYW55dGhpbmcKKysjZGVmaW5lIG1hdGNoX21jYWxsCQltYXRjaF9hbnl0aGluZworKworKy8qIENPSCBpcyB1c2VkIHRvIHNlbGVjdCBiZXR3ZWVuIHR3byBkaWZmZXJlbnQgc3ludGF4ZXMgKi8KKytzdGF0aWMgaW50CisrbWF0Y2hfY29oKGNoYXIgKnN0cikKKyt7CisrICByZXR1cm4gc3RyY2FzZWNtcChzdHIsICJjb2giKSA9PSAwOworK30KKysKKytzdGF0aWMgaW50CisrbWF0Y2hfZnByZWcoY2hhciAqc3RyKQorK3sKKysgIHVuc2lnbmVkIGxvbmcgcmVnaWQ7CisrICBjaGFyICplbmRwdHI7CisrCisrICBpZiAoKHN0clswXSAhPSAnZicgJiYgc3RyWzBdICE9ICdGJykKKysgICAgICB8fCAoc3RyWzFdICE9ICdyJyAmJiBzdHJbMV0gIT0gJ1InKSkKKysgICAgcmV0dXJuIDA7CisrCisrICBzdHIgKz0gMjsKKysgIHJlZ2lkID0gc3RydG91bChzdHIsICZlbmRwdHIsIDEwKTsKKysgIGlmICghKnN0ciB8fCAqZW5kcHRyKQorKyAgICByZXR1cm4gMDsKKysKKysgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50CisrbWF0Y2hfcGljb3JlZyhjaGFyICpzdHIpCisreworKyAgaW50IHJlZ2lkOworKworKyAgcmVnaWQgPSBhdnIzMl9wYXJzZV9waWNvcmVnKHN0cik7CisrICBpZiAocmVnaWQgPCAwKQorKyAgICByZXR1cm4gMDsKKysgIHJldHVybiAxOworK30KKysKKysjZGVmaW5lIG1hdGNoX3BpY29fcmVnbGlzdF93CW1hdGNoX2FueXRoaW5nCisrI2RlZmluZSBtYXRjaF9waWNvX3JlZ2xpc3RfZAltYXRjaF9hbnl0aGluZworKworK3N0YXRpYyBpbnQKKyttYXRjaF9waWNvX2luKGNoYXIgKnN0cikKKyt7CisrICB1bnNpZ25lZCBsb25nIHJlZ2lkOworKyAgY2hhciAqZW5kOworKworKyAgaWYgKHN0cm5jYXNlY21wKHN0ciwgImluIiwgMikgIT0gMCkKKysgICAgcmV0dXJuIDA7CisrCisrICBzdHIgKz0gMjsKKysgIHJlZ2lkID0gc3RydG91bChzdHIsICZlbmQsIDEwKTsKKysgIGlmICghKnN0ciB8fCAqZW5kKQorKyAgICByZXR1cm4gMDsKKysKKysgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50CisrbWF0Y2hfcGljb19vdXQwKGNoYXIgKnN0cikKKyt7CisrICBpZiAoc3RyY2FzZWNtcChzdHIsICJvdXQwIikgIT0gMCkKKysgICAgcmV0dXJuIDA7CisrICByZXR1cm4gMTsKKyt9CisrCisrc3RhdGljIGludAorK21hdGNoX3BpY29fb3V0MShjaGFyICpzdHIpCisreworKyAgaWYgKHN0cmNhc2VjbXAoc3RyLCAib3V0MSIpICE9IDApCisrICAgIHJldHVybiAwOworKyAgcmV0dXJuIDE7CisrfQorKworK3N0YXRpYyBpbnQKKyttYXRjaF9waWNvX291dDIoY2hhciAqc3RyKQorK3sKKysgIGlmIChzdHJjYXNlY21wKHN0ciwgIm91dDIiKSAhPSAwKQorKyAgICByZXR1cm4gMDsKKysgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50CisrbWF0Y2hfcGljb19vdXQzKGNoYXIgKnN0cikKKyt7CisrICBpZiAoc3RyY2FzZWNtcChzdHIsICJvdXQzIikgIT0gMCkKKysgICAgcmV0dXJuIDA7CisrICByZXR1cm4gMTsKKyt9CisrCisrc3RhdGljIHZvaWQgcGFyc2Vfbm90aGluZyhjb25zdCBzdHJ1Y3QgYXZyMzJfb3BlcmFuZCAqb3AgQVRUUklCVVRFX1VOVVNFRCwKKysJCQkgIGNoYXIgKnN0ciBBVFRSSUJVVEVfVU5VU0VELAorKwkJCSAgaW50IG9waW5kZXggQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICAvKiBEbyBub3RoaW5nICh0aGlzIGlzIHVzZWQgZm9yICJtYXRjaC1vbmx5IiBvcGVyYW5kcyBsaWtlIENPSCkgKi8KKyt9CisrCisrc3RhdGljIHZvaWQKKytwYXJzZV9jb25zdChjb25zdCBzdHJ1Y3QgYXZyMzJfb3BlcmFuZCAqb3AsIGNoYXIgKnN0ciwKKysJICAgIGludCBvcGluZGV4IEFUVFJJQlVURV9VTlVTRUQpCisreworKyAgZXhwcmVzc2lvblMgKmV4cCA9ICZjdXJyZW50X2luc24uaW1tZWRpYXRlOworKyAgZXhwcmVzc2lvblMgKnN5bV9leHA7CisrICBpbnQgc2xvdDsKKysgIGNoYXIgKnNhdmU7CisrCisrICBwcl9kZWJ1ZygicGFyc2VfY29uc3Q6IGAlcycgKHNpZ25lZDogJWQsIHBjcmVsOiAlZCwgYWxpZ246ICVkKVxuIiwKKysJICAgc3RyLCBvcC0+aXNfc2lnbmVkLCBvcC0+aXNfcGNyZWwsIG9wLT5hbGlnbl9vcmRlcik7CisrCisrICBzYXZlID0gaW5wdXRfbGluZV9wb2ludGVyOworKyAgaW5wdXRfbGluZV9wb2ludGVyID0gc3RyOworKworKyAgZXhwcmVzc2lvbihleHApOworKworKyAgc2xvdCA9IGN1cnJlbnRfaW5zbi5uZXh0X3Nsb3QrKzsKKysgIGN1cnJlbnRfaW5zbi5maWVsZF92YWx1ZVtzbG90XS5hbGlnbl9vcmRlciA9IG9wLT5hbGlnbl9vcmRlcjsKKysgIGN1cnJlbnRfaW5zbi5wY3JlbCA9IG9wLT5pc19wY3JlbDsKKysKKysgIHN3aXRjaCAoZXhwLT5YX29wKQorKyAgICB7CisrICAgIGNhc2UgT19pbGxlZ2FsOgorKyAgICAgIGFzX2JhZChfKCJpbGxlZ2FsIG9wZXJhbmQiKSk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgT19hYnNlbnQ6CisrICAgICAgYXNfYmFkKF8oIm1pc3Npbmcgb3BlcmFuZCIpKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBPX2NvbnN0YW50OgorKyAgICAgIHByX2RlYnVnKCIgIC0+IGNvbnN0YW50OiAlbGRcbiIsIChsb25nKWV4cC0+WF9hZGRfbnVtYmVyKTsKKysgICAgICBjdXJyZW50X2luc24uZmllbGRfdmFsdWVbc2xvdF0udmFsdWUgPSBleHAtPlhfYWRkX251bWJlcjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBPX3VtaW51czoKKysgICAgICBwcl9kZWJ1ZygiICAtPiB1bWludXNcbiIpOworKyAgICAgIHN5bV9leHAgPSBzeW1ib2xfZ2V0X3ZhbHVlX2V4cHJlc3Npb24oZXhwLT5YX2FkZF9zeW1ib2wpOworKyAgICAgIHN3aXRjaCAoc3ltX2V4cC0+WF9vcCkgeworKyAgICAgIGNhc2UgT19zdWJ0cmFjdDoKKysJcHJfZGVidWcoIiAgICAgLT4gc3VidHJhY3Q6IHN3aXRjaGluZyBvcGVyYW5kc1xuIik7CisrCWV4cC0+WF9vcF9zeW1ib2wgPSBzeW1fZXhwLT5YX2FkZF9zeW1ib2w7CisrCWV4cC0+WF9hZGRfc3ltYm9sID0gc3ltX2V4cC0+WF9vcF9zeW1ib2w7CisrCWV4cC0+WF9vcCA9IE9fc3VidHJhY3Q7CisrCS8qIFRPRE86IFJlbW92ZSB0aGUgb2xkIFhfYWRkX3N5bWJvbCAqLworKwlicmVhazsKKysgICAgICBkZWZhdWx0OgorKwlhc19iYWQoXygiRXhwcmVzc2lvbiB0b28gY29tcGxleFxuIikpOworKwlicmVhazsKKysgICAgICB9CisrICAgICAgYnJlYWs7CisrI2lmIDAKKysgICAgY2FzZSBPX3N1YnRyYWN0OgorKyAgICAgIC8qIEFueSBleHByZXNzaW9uIHN1YnRyYWN0aW5nIGEgc3ltYm9sIGZyb20gdGhlIGN1cnJlbnQgc2VjdGlvbgorKwkgY2FuIGJlIG1hZGUgUEMtcmVsYXRpdmUgYnkgYWRkaW5nIHRoZSByaWdodCBvZmZzZXQuICAqLworKyAgICAgIGlmIChTX0dFVF9TRUdNRU5UKGV4cC0+WF9vcF9zeW1ib2wpID09IG5vd19zZWcpCisrCWN1cnJlbnRfaW5zbi5wY3JlbCA9IFRSVUU7CisrICAgICAgcHJfZGVidWcoIiAgLT4gc3VidHJhY3Q6IHBjcmVsPyAlc1xuIiwKKysJICAgICAgIGN1cnJlbnRfaW5zbi5wY3JlbCA/ICJ5ZXMiIDogIm5vIik7CisrICAgICAgLyogZmFsbCB0aHJvdWdoICovCisrI2VuZGlmCisrICAgIGRlZmF1bHQ6CisrICAgICAgcHJfZGVidWcoIiAgLT4gKCVwIDwlZD4gJXAgKyAlZClcbiIsCisrCSAgICAgICBleHAtPlhfYWRkX3N5bWJvbCwgZXhwLT5YX29wLCBleHAtPlhfb3Bfc3ltYm9sLAorKwkgICAgICAgZXhwLT5YX2FkZF9udW1iZXIpOworKyAgICAgIGN1cnJlbnRfaW5zbi5maWVsZF92YWx1ZVtzbG90XS52YWx1ZSA9IDA7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgIGlucHV0X2xpbmVfcG9pbnRlciA9IHNhdmU7CisrfQorKworK3N0YXRpYyB2b2lkCisrcGFyc2Vfam1wbGFiZWwoY29uc3Qgc3RydWN0IGF2cjMyX29wZXJhbmQgKm9wLCBjaGFyICpzdHIsCisrCSAgICAgICBpbnQgb3BpbmRleCBBVFRSSUJVVEVfVU5VU0VEKQorK3sKKysgIGV4cHJlc3Npb25TICpleHAgPSAmY3VycmVudF9pbnNuLmltbWVkaWF0ZTsKKysgIGludCBzbG90OworKyAgY2hhciAqc2F2ZTsKKysKKysgIHByX2RlYnVnKCJwYXJzZV9qbXBsYWJlbDogYCVzJyAoc2lnbmVkOiAlZCwgcGNyZWw6ICVkLCBhbGlnbjogJWQpXG4iLAorKwkgICBzdHIsIG9wLT5pc19zaWduZWQsIG9wLT5pc19wY3JlbCwgb3AtPmFsaWduX29yZGVyKTsKKysKKysgIHNhdmUgPSBpbnB1dF9saW5lX3BvaW50ZXI7CisrICBpbnB1dF9saW5lX3BvaW50ZXIgPSBzdHI7CisrCisrICBleHByZXNzaW9uKGV4cCk7CisrCisrICBzbG90ID0gY3VycmVudF9pbnNuLm5leHRfc2xvdCsrOworKyAgY3VycmVudF9pbnNuLmZpZWxkX3ZhbHVlW3Nsb3RdLmFsaWduX29yZGVyID0gb3AtPmFsaWduX29yZGVyOworKyAgY3VycmVudF9pbnNuLnBjcmVsID0gVFJVRTsKKysKKysgIHN3aXRjaCAoZXhwLT5YX29wKQorKyAgICB7CisrICAgIGNhc2UgT19pbGxlZ2FsOgorKyAgICAgIGFzX2JhZChfKCJpbGxlZ2FsIG9wZXJhbmQiKSk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgT19hYnNlbnQ6CisrICAgICAgYXNfYmFkKF8oIm1pc3Npbmcgb3BlcmFuZCIpKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBPX2NvbnN0YW50OgorKyAgICAgIHByX2RlYnVnKCIgIC0+IGNvbnN0YW50OiAlbGRcbiIsIChsb25nKWV4cC0+WF9hZGRfbnVtYmVyKTsKKysgICAgICBjdXJyZW50X2luc24uZmllbGRfdmFsdWVbc2xvdF0udmFsdWUgPSBleHAtPlhfYWRkX251bWJlcjsKKysgICAgICBjdXJyZW50X2luc24ucGNyZWwgPSAwOworKyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIHByX2RlYnVnKCIgIC0+ICglcCA8JWQ+ICVwICsgJWQpXG4iLAorKwkgICAgICAgZXhwLT5YX2FkZF9zeW1ib2wsIGV4cC0+WF9vcCwgZXhwLT5YX29wX3N5bWJvbCwKKysJICAgICAgIGV4cC0+WF9hZGRfbnVtYmVyKTsKKysgICAgICBjdXJyZW50X2luc24uZmllbGRfdmFsdWVbc2xvdF0udmFsdWUgPSAwOworKyAgICAgIGJyZWFrOworKyAgICB9CisrCisrICBpbnB1dF9saW5lX3BvaW50ZXIgPSBzYXZlOworK30KKysKKytzdGF0aWMgdm9pZAorK3BhcnNlX2ludHJlZyhjb25zdCBzdHJ1Y3QgYXZyMzJfb3BlcmFuZCAqb3AgQVRUUklCVVRFX1VOVVNFRCwKKysJICAgICBjaGFyICpzdHIsIGludCBvcGluZGV4IEFUVFJJQlVURV9VTlVTRUQpCisreworKyAgaW50IHJlZ2lkLCBzbG90OworKworKyAgcHJfZGVidWcoInBhcnNlX2ludHJlZzogYCVzJ1xuIiwgc3RyKTsKKysKKysgIHJlZ2lkID0gYXZyMzJfcGFyc2VfaW50cmVnKHN0cik7CisrICBhc3NlcnQocmVnaWQgPj0gMCk7CisrCisrICBzbG90ID0gY3VycmVudF9pbnNuLm5leHRfc2xvdCsrOworKyAgY3VycmVudF9pbnNuLmZpZWxkX3ZhbHVlW3Nsb3RdLnZhbHVlID0gcmVnaWQ7CisrICBjdXJyZW50X2luc24uZmllbGRfdmFsdWVbc2xvdF0uYWxpZ25fb3JkZXIgPSBvcC0+YWxpZ25fb3JkZXI7CisrfQorKworK3N0YXRpYyB2b2lkCisrcGFyc2VfaW50cmVnX3ByZWRlYyhjb25zdCBzdHJ1Y3QgYXZyMzJfb3BlcmFuZCAqb3AsIGNoYXIgKnN0ciwgaW50IG9waW5kZXgpCisreworKyAgcGFyc2VfaW50cmVnKG9wLCBzdHIgKyAyLCBvcGluZGV4KTsKKyt9CisrCisrc3RhdGljIHZvaWQKKytwYXJzZV9pbnRyZWdfcG9zdGluYyhjb25zdCBzdHJ1Y3QgYXZyMzJfb3BlcmFuZCAqb3AsIGNoYXIgKnN0ciwgaW50IG9waW5kZXgpCisreworKyAgY2hhciAqcCwgYzsKKysKKysgIHByX2RlYnVnKCJwYXJzZV9pbnRyZWdfcG9zdGluYzogYCVzJ1xuIiwgc3RyKTsKKysKKysgIGZvciAocCA9IHN0cjsgKnAgIT0gJysnOyBwKyspIDsKKysKKysgIGMgPSAqcCwgKnAgPSAwOworKyAgcGFyc2VfaW50cmVnKG9wLCBzdHIsIG9waW5kZXgpOworKyAgKnAgPSBjOworK30KKysKKytzdGF0aWMgdm9pZAorK3BhcnNlX2ludHJlZ19zaGlmdChjb25zdCBzdHJ1Y3QgYXZyMzJfb3BlcmFuZCAqb3AgQVRUUklCVVRFX1VOVVNFRCwKKysJCSAgIGNoYXIgKnN0ciwgaW50IG9waW5kZXggQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICBpbnQgcmVnaWQsIHNsb3QsIHNoaWZ0ID0gMDsKKysgIGNoYXIgKnAsIGM7CisrICBjaGFyIHNoaWZ0b3A7CisrCisrICBwcl9kZWJ1ZygicGFyc2UgUnk8PHNhOiBgJXMnXG4iLCBzdHIpOworKworKyAgZm9yIChwID0gc3RyOyAqcDsgcCsrKQorKyAgICBpZiAoKnAgPT0gJzwnIHx8ICpwID09ICc+JykKKysgICAgICBicmVhazsKKysKKysgIHNoaWZ0b3AgPSAqcDsKKysKKysgIGMgPSAqcCwgKnAgPSAwOworKyAgcmVnaWQgPSBhdnIzMl9wYXJzZV9pbnRyZWcoc3RyKTsKKysgIGFzc2VydChyZWdpZCA+PSAwKTsKKysgICpwID0gYzsKKysKKysgIGlmIChjKQorKyAgICB7CisrICAgICAgaWYgKHBbMF0gIT0gc2hpZnRvcCB8fCBwWzFdICE9IHNoaWZ0b3ApCisrCWFzX2JhZChfKCJleHBlY3RlZCBzaGlmdCBvcGVyYXRvciBpbiBgJXMnIiksIHApOworKyAgICAgIGVsc2UKKysJeworKwkgIGV4cHJlc3Npb25TIGV4cDsKKysJICBjaGFyICpzYXZlZDsKKysKKysJICBzYXZlZCA9IGlucHV0X2xpbmVfcG9pbnRlcjsKKysJICBpbnB1dF9saW5lX3BvaW50ZXIgPSBwICsgMjsKKysJICBleHByZXNzaW9uKCZleHApOworKwkgIGlucHV0X2xpbmVfcG9pbnRlciA9IHNhdmVkOworKworKwkgIGlmIChleHAuWF9vcCAhPSBPX2NvbnN0YW50KQorKwkgICAgYXNfYmFkKF8oInNoaWZ0IGFtb3VudCBtdXN0IGJlIGEgbnVtZXJpYyBjb25zdGFudCIpKTsKKysJICBlbHNlCisrCSAgICBzaGlmdCA9IGV4cC5YX2FkZF9udW1iZXI7CisrCX0KKysgICAgfQorKworKyAgc2xvdCA9IGN1cnJlbnRfaW5zbi5uZXh0X3Nsb3QrKzsKKysgIGN1cnJlbnRfaW5zbi5maWVsZF92YWx1ZVtzbG90XS52YWx1ZSA9IHJlZ2lkOworKyAgc2xvdCA9IGN1cnJlbnRfaW5zbi5uZXh0X3Nsb3QrKzsKKysgIGN1cnJlbnRfaW5zbi5maWVsZF92YWx1ZVtzbG90XS52YWx1ZSA9IHNoaWZ0OworK30KKysKKysvKiBUaGUgbWF0Y2goKSBmdW5jdGlvbiBzZWxlY3RlZCB0aGUgcmlnaHQgb3Bjb2RlLCBzbyBpdCBkb2Vzbid0CisrICAgbWF0dGVyIHdoaWNoIHdheSB3ZSBzaGlmdCBhbnkgbW9yZS4gICovCisrI2RlZmluZSBwYXJzZV9pbnRyZWdfbHNsCXBhcnNlX2ludHJlZ19zaGlmdAorKyNkZWZpbmUgcGFyc2VfaW50cmVnX2xzcglwYXJzZV9pbnRyZWdfc2hpZnQKKysKKytzdGF0aWMgdm9pZAorK3BhcnNlX2ludHJlZ19wYXJ0KGNvbnN0IHN0cnVjdCBhdnIzMl9vcGVyYW5kICpvcCwgY2hhciAqc3RyLAorKwkJICBpbnQgb3BpbmRleCBBVFRSSUJVVEVfVU5VU0VEKQorK3sKKysgIHN0YXRpYyBjb25zdCBjaGFyIGJwYXJ0c1tdID0geyAnYicsICdsJywgJ3UnLCAndCcgfTsKKysgIHN0YXRpYyBjb25zdCBjaGFyIGhwYXJ0c1tdID0geyAnYicsICd0JyB9OworKyAgdW5zaWduZWQgaW50IHNsb3QsIHNlbDsKKysgIGludCByZWdpZDsKKysgIGNoYXIgKnAsIGM7CisrCisrICBwcl9kZWJ1ZygicGFyc2UgcmVnOnBhcnQgYCVzJ1xuIiwgc3RyKTsKKysKKysgIGZvciAocCA9IHN0cjsgKnA7IHArKykKKysgICAgaWYgKCpwID09ICc6JykKKysgICAgICBicmVhazsKKysKKysgIGMgPSAqcCwgKnAgPSAwOworKyAgcmVnaWQgPSBhdnIzMl9wYXJzZV9pbnRyZWcoc3RyKTsKKysgIGFzc2VydChyZWdpZCA+PSAwKTsKKysgICpwID0gYzsKKysKKysgIGFzc2VydChjID09ICc6Jyk7CisrCisrICBpZiAob3AtPmFsaWduX29yZGVyKQorKyAgICB7CisrICAgICAgZm9yIChzZWwgPSAwOyBzZWwgPCBzaXplb2YoaHBhcnRzKTsgc2VsKyspCisrCWlmIChUT0xPV0VSKHBbMV0pID09IGhwYXJ0c1tzZWxdKQorKwkgIGJyZWFrOworKworKyAgICAgIGlmIChzZWwgPj0gc2l6ZW9mKGhwYXJ0cykpCisrCXsKKysJICBhc19iYWQoXygiaW52YWxpZCBoYWxmd29yZCBzZWxlY3RvciBgJWMnIChtdXN0IGJlIGVpdGhlciBiIG9yIHQpIiksCisrCQkgcFsxXSk7CisrCSAgc2VsID0gMDsKKysJfQorKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBmb3IgKHNlbCA9IDA7IHNlbCA8IHNpemVvZihicGFydHMpOyBzZWwrKykKKysJaWYgKFRPTE9XRVIocFsxXSkgPT0gYnBhcnRzW3NlbF0pCisrCSAgYnJlYWs7CisrCisrICAgICAgaWYgKHNlbCA+PSBzaXplb2YoYnBhcnRzKSkKKysJeworKwkgIGFzX2JhZChfKCJpbnZhbGlkIGJ5dGUgc2VsZWN0b3IgYCVjJyAobXVzdCBiZSBvbmUgb2YgYixsLHUsdCkiKSwKKysJCSBwWzFdKTsKKysJICBzZWwgPSAwOworKwl9CisrICAgIH0KKysKKysgIHNsb3QgPSBjdXJyZW50X2luc24ubmV4dF9zbG90Kys7CisrICBjdXJyZW50X2luc24uZmllbGRfdmFsdWVbc2xvdF0udmFsdWUgPSByZWdpZDsKKysgIHNsb3QgPSBjdXJyZW50X2luc24ubmV4dF9zbG90Kys7CisrICBjdXJyZW50X2luc24uZmllbGRfdmFsdWVbc2xvdF0udmFsdWUgPSBzZWw7CisrfQorKworKy8qIFRoaXMgaXMgdGhlIHBhcnNlciBmb3IgIlJwW2Rpc3BsYWNlbWVudF0iIGV4cHJlc3Npb25zLiAgSW4gYWRkaXRpb24KKysgICB0byB0aGUgIm9mZmljaWFsIiBzeW50YXgsIHdlIGFjY2VwdCBhIGxhYmVsIGFzIGEgcmVwbGFjZW1lbnQgZm9yCisrICAgdGhlIHJlZ2lzdGVyIGV4cHJlc3Npb24uICBUaGlzIHN5bnRheCBpbXBsaWVzIFJwPVBDIGFuZCB0aGUKKysgICBkaXNwbGFjZW1lbnQgaXMgdGhlIHBjLXJlbGF0aXZlIGRpc3RhbmNlIHRvIHRoZSBsYWJlbC4gICovCisrc3RhdGljIHZvaWQKKytwYXJzZV9pbnRyZWdfZGlzcChjb25zdCBzdHJ1Y3QgYXZyMzJfb3BlcmFuZCAqb3AsIGNoYXIgKnN0ciwgaW50IG9waW5kZXgpCisreworKyAgZXhwcmVzc2lvblMgKmV4cCA9ICZjdXJyZW50X2luc24uaW1tZWRpYXRlOworKyAgaW50IHNsb3QsIHJlZ2lkOworKyAgY2hhciAqc2F2ZSwgKnAsIGM7CisrCisrICBwcl9kZWJ1ZygicGFyc2VfaW50cmVnX2Rpc3A6IGAlcycgKHNpZ25lZDogJWQsIHBjcmVsOiAlZCwgYWxpZ246ICVkKVxuIiwKKysJICAgc3RyLCBvcC0+aXNfc2lnbmVkLCBvcC0+aXNfcGNyZWwsIG9wLT5hbGlnbl9vcmRlcik7CisrCisrICBmb3IgKHAgPSBzdHI7ICpwOyBwKyspCisrICAgIGlmICgqcCA9PSAnWycpCisrICAgICAgYnJlYWs7CisrCisrICBzbG90ID0gY3VycmVudF9pbnNuLm5leHRfc2xvdCsrOworKworKyAgLyogRmlyc3QsIGNoZWNrIGlmIHdlIGhhdmUgYSB2YWxpZCByZWdpc3RlciBlaXRoZXIgYmVmb3JlICdbJyBvciBhcworKyAgICAgdGhlIHNvbGUgZXhwcmVzc2lvbi4gIElmIHNvLCB3ZSB1c2UgdGhlIFJwW2Rpc3BdIHN5bnRheC4gICovCisrICBjID0gKnAsICpwID0gMDsKKysgIHJlZ2lkID0gYXZyMzJfcGFyc2VfaW50cmVnKHN0cik7CisrICAqcCA9IGM7CisrCisrICBpZiAocmVnaWQgPj0gMCkKKysgICAgeworKyAgICAgIGN1cnJlbnRfaW5zbi5maWVsZF92YWx1ZVtzbG90XS52YWx1ZSA9IHJlZ2lkOworKworKyAgICAgIHNsb3QgPSBjdXJyZW50X2luc24ubmV4dF9zbG90Kys7CisrICAgICAgY3VycmVudF9pbnNuLmZpZWxkX3ZhbHVlW3Nsb3RdLmFsaWduX29yZGVyID0gb3AtPmFsaWduX29yZGVyOworKworKyAgICAgIGlmIChjID09ICdbJykKKysJeworKwkgIHNhdmUgPSBpbnB1dF9saW5lX3BvaW50ZXI7CisrCSAgaW5wdXRfbGluZV9wb2ludGVyID0gcCArIDE7CisrCisrCSAgZXhwcmVzc2lvbihleHApOworKworKwkgIGlmICgqaW5wdXRfbGluZV9wb2ludGVyICE9ICddJykKKysJICAgIGFzX2JhZChfKCJqdW5rIGFmdGVyIGRpc3BsYWNlbWVudCBleHByZXNzaW9uIikpOworKworKwkgIGlucHV0X2xpbmVfcG9pbnRlciA9IHNhdmU7CisrCisrCSAgc3dpdGNoIChleHAtPlhfb3ApCisrCSAgICB7CisrCSAgICBjYXNlIE9faWxsZWdhbDoKKysJICAgICAgYXNfYmFkKF8oImlsbGVnYWwgZGlzcGxhY2VtZW50IGV4cHJlc3Npb24iKSk7CisrCSAgICAgIGJyZWFrOworKwkgICAgY2FzZSBPX2Fic2VudDoKKysJICAgICAgYXNfYmFkKF8oIm1pc3NpbmcgZGlzcGxhY2VtZW50IGV4cHJlc3Npb24iKSk7CisrCSAgICAgIGJyZWFrOworKwkgICAgY2FzZSBPX2NvbnN0YW50OgorKwkgICAgICBwcl9kZWJ1ZygiICAtPiBjb25zdGFudDogJWxkXG4iLCBleHAtPlhfYWRkX251bWJlcik7CisrCSAgICAgIGN1cnJlbnRfaW5zbi5maWVsZF92YWx1ZVtzbG90XS52YWx1ZSA9IGV4cC0+WF9hZGRfbnVtYmVyOworKwkgICAgICBicmVhazsKKysjaWYgMAorKwkgICAgY2FzZSBPX3N1YnRyYWN0OgorKwkgICAgICBpZiAoU19HRVRfU0VHTUVOVChleHAtPlhfb3Bfc3ltYm9sKSA9PSBub3dfc2VnKQorKwkJY3VycmVudF9pbnNuLnBjcmVsID0gVFJVRTsKKysJICAgICAgcHJfZGVidWcoIiAgLT4gc3VidHJhY3Q6IHBjcmVsPyAlc1xuIiwKKysJCSAgICAgICBjdXJyZW50X2luc24ucGNyZWwgPyAieWVzIiA6ICJubyIpOworKwkgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKysjZW5kaWYKKysJICAgIGRlZmF1bHQ6CisrCSAgICAgIHByX2RlYnVnKCIgIC0+ICglcCA8JWQ+ICVwICsgJWQpXG4iLAorKwkJICAgICAgIGV4cC0+WF9hZGRfc3ltYm9sLCBleHAtPlhfb3AsIGV4cC0+WF9vcF9zeW1ib2wsCisrCQkgICAgICAgZXhwLT5YX2FkZF9udW1iZXIpOworKwkgICAgICBjdXJyZW50X2luc24uZmllbGRfdmFsdWVbc2xvdF0udmFsdWUgPSAwOworKwkgICAgfQorKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgZXhwLT5YX29wID0gT19jb25zdGFudDsKKysJICBleHAtPlhfYWRkX251bWJlciA9IDA7CisrCSAgY3VycmVudF9pbnNuLmZpZWxkX3ZhbHVlW3Nsb3RdLnZhbHVlID0gMDsKKysJfQorKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICAvKiBEaWRuJ3QgZmluZCBhIHZhbGlkIHJlZ2lzdGVyLiAgVHJ5IHBhcnNpbmcgaXQgYXMgYSBsYWJlbC4gICovCisrICAgICAgY3VycmVudF9pbnNuLmZpZWxkX3ZhbHVlW3Nsb3RdLnZhbHVlID0gQVZSMzJfUkVHX1BDOworKyAgICAgIHBhcnNlX2ptcGxhYmVsKG9wLCBzdHIsIG9waW5kZXgpOworKyAgICB9CisrfQorKworK3N0YXRpYyB2b2lkCisrcGFyc2VfaW50cmVnX2luZGV4KGNvbnN0IHN0cnVjdCBhdnIzMl9vcGVyYW5kICpvcCBBVFRSSUJVVEVfVU5VU0VELAorKwkJICAgY2hhciAqc3RyLCBpbnQgb3BpbmRleCBBVFRSSUJVVEVfVU5VU0VEKQorK3sKKysgIGludCBzbG90LCByZWdpZDsKKysgIGNoYXIgKnAsICplbmQsIGM7CisrCisrICBmb3IgKHAgPSBzdHI7ICpwOyBwKyspCisrICAgIGlmICgqcCA9PSAnWycpCisrICAgICAgYnJlYWs7CisrCisrICBhc3NlcnQoKnApOworKworKyAgYyA9ICpwLCAqcCA9IDA7CisrICByZWdpZCA9IGF2cjMyX3BhcnNlX2ludHJlZyhzdHIpOworKyAgYXNzZXJ0KHJlZ2lkID49IDApOworKyAgKnAgPSBjOworKworKyAgc2xvdCA9IGN1cnJlbnRfaW5zbi5uZXh0X3Nsb3QrKzsKKysgIGN1cnJlbnRfaW5zbi5maWVsZF92YWx1ZVtzbG90XS52YWx1ZSA9IHJlZ2lkOworKworKyAgcCsrOworKyAgZm9yIChlbmQgPSBwOyAqZW5kOyBlbmQrKykKKysgICAgaWYgKCplbmQgPT0gJ10nIHx8ICplbmQgPT0gJzwnKQorKyAgICAgIGJyZWFrOworKworKyAgYXNzZXJ0KCplbmQpOworKworKyAgYyA9ICplbmQsICplbmQgPSAwOworKyAgcmVnaWQgPSBhdnIzMl9wYXJzZV9pbnRyZWcocCk7CisrICBhc3NlcnQocmVnaWQgPj0gMCk7CisrICAqZW5kID0gYzsKKysKKysgIHNsb3QgPSBjdXJyZW50X2luc24ubmV4dF9zbG90Kys7CisrICBjdXJyZW50X2luc24uZmllbGRfdmFsdWVbc2xvdF0udmFsdWUgPSByZWdpZDsKKysKKysgIHNsb3QgPSBjdXJyZW50X2luc24ubmV4dF9zbG90Kys7CisrICBjdXJyZW50X2luc24uZmllbGRfdmFsdWVbc2xvdF0udmFsdWUgPSAwOworKworKyAgaWYgKCplbmQgPT0gJzwnKQorKyAgICB7CisrICAgICAgZXhwcmVzc2lvblMgZXhwOworKyAgICAgIGNoYXIgKnNhdmU7CisrCisrICAgICAgcCA9IGVuZCArIDI7CisrICAgICAgZm9yIChlbmQgPSBwOyAqZW5kOyBlbmQrKykKKysJaWYgKCplbmQgPT0gJ10nKQorKwkgIGJyZWFrOworKworKyAgICAgIGFzc2VydCgqZW5kID09ICddJyk7CisrCisrICAgICAgYyA9ICplbmQsICplbmQgPSAwOworKyAgICAgIHNhdmUgPSBpbnB1dF9saW5lX3BvaW50ZXI7CisrICAgICAgaW5wdXRfbGluZV9wb2ludGVyID0gcDsKKysgICAgICBleHByZXNzaW9uKCZleHApOworKworKyAgICAgIGlmICgqaW5wdXRfbGluZV9wb2ludGVyKQorKwlhc19iYWQoXygianVuayBhZnRlciBzaGlmdCBleHByZXNzaW9uIikpOworKworKyAgICAgICplbmQgPSBjOworKyAgICAgIGlucHV0X2xpbmVfcG9pbnRlciA9IHNhdmU7CisrCisrICAgICAgaWYgKGV4cC5YX29wID09IE9fY29uc3RhbnQpCisrCWN1cnJlbnRfaW5zbi5maWVsZF92YWx1ZVtzbG90XS52YWx1ZSA9IGV4cC5YX2FkZF9udW1iZXI7CisrICAgICAgZWxzZQorKwlhc19iYWQoXygic2hpZnQgZXhwcmVzc2lvbiB0b28gY29tcGxleCIpKTsKKysgICAgfQorK30KKysKKytzdGF0aWMgdm9pZAorK3BhcnNlX2ludHJlZ194aW5kZXgoY29uc3Qgc3RydWN0IGF2cjMyX29wZXJhbmQgKm9wLCBjaGFyICpzdHIsIGludCBvcGluZGV4KQorK3sKKysgIGludCBzbG90LCByZWdpZDsKKysgIGNoYXIgKnAsICplbmQsIGM7CisrCisrICBmb3IgKHAgPSBzdHI7ICpwOyBwKyspCisrICAgIGlmICgqcCA9PSAnWycpCisrICAgICAgYnJlYWs7CisrCisrICBhc3NlcnQoKnApOworKworKyAgYyA9ICpwLCAqcCA9IDA7CisrICByZWdpZCA9IGF2cjMyX3BhcnNlX2ludHJlZyhzdHIpOworKyAgYXNzZXJ0KHJlZ2lkID49IDApOworKyAgKnAgPSBjOworKworKyAgc2xvdCA9IGN1cnJlbnRfaW5zbi5uZXh0X3Nsb3QrKzsKKysgIGN1cnJlbnRfaW5zbi5maWVsZF92YWx1ZVtzbG90XS52YWx1ZSA9IHJlZ2lkOworKworKyAgcCsrOworKyAgZm9yIChlbmQgPSBwOyAqZW5kOyBlbmQrKykKKysgICAgaWYgKCplbmQgPT0gJzwnKQorKyAgICAgIGJyZWFrOworKworKyAgYXNzZXJ0KCplbmQpOworKworKyAgYyA9ICplbmQsICplbmQgPSAwOworKyAgcGFyc2VfaW50cmVnX3BhcnQob3AsIHAsIG9waW5kZXgpOworKyAgKmVuZCA9IGM7CisrfQorKworK3N0YXRpYyB2b2lkCisrcGFyc2VfcGNfZGlzcChjb25zdCBzdHJ1Y3QgYXZyMzJfb3BlcmFuZCAqb3AsIGNoYXIgKnN0ciwgaW50IG9waW5kZXgpCisreworKyAgY2hhciAqcCwgYzsKKysKKysgIGZvciAocCA9IHN0cjsgKnA7IHArKykKKysgICAgaWYgKCpwID09ICdbJykKKysgICAgICBicmVhazsKKysKKysgIC8qIFRoZSBsZGRwYyBpbnN0cnVjdGlvbiBjb21lcyBpbiB0d28gZGlmZmVyZW50IHN5bnRheCB2YXJpYW50czoKKysgICAgICAgbGRkcGMgcmVnLCBleHByZXNzaW9uCisrICAgICAgIGxkZHBjIHJlZywgcGNbZGlzcF0KKysgICAgIElmIHRoZSBvcGVyYW5kIGNvbnRhaW5zIGEgJ1snLCB3ZSB1c2UgdGhlIHNlY29uZCBmb3JtLiAgKi8KKysgIGlmICgqcCkKKysgICAgeworKyAgICAgIGludCByZWdpZDsKKysKKysgICAgICBjID0gKnAsICpwID0gMDsKKysgICAgICByZWdpZCA9IGF2cjMyX3BhcnNlX2ludHJlZyhzdHIpOworKyAgICAgICpwID0gYzsKKysgICAgICBpZiAocmVnaWQgPT0gQVZSMzJfUkVHX1BDKQorKwl7CisrCSAgY2hhciAqZW5kOworKworKwkgIGZvciAoZW5kID0gKytwOyAqZW5kOyBlbmQrKykgOworKwkgIGlmICgqKC0tZW5kKSAhPSAnXScpCisrCSAgICBhc19iYWQoXygidW5yZWNvZ25pemVkIGZvcm0gb2YgaW5zdHJ1Y3Rpb246IGAlcyciKSwgc3RyKTsKKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIGMgPSAqZW5kLCAqZW5kID0gMDsKKysJICAgICAgcGFyc2VfY29uc3Qob3AsIHAsIG9waW5kZXgpOworKwkgICAgICAqZW5kID0gYzsKKysJICAgICAgY3VycmVudF9pbnNuLnBjcmVsID0gMDsKKysJICAgIH0KKysJfQorKyAgICAgIGVsc2UKKysJYXNfYmFkKF8oInVucmVjb2duaXplZCBmb3JtIG9mIGluc3RydWN0aW9uOiBgJXMnIiksIHN0cik7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIHBhcnNlX2ptcGxhYmVsKG9wLCBzdHIsIG9waW5kZXgpOworKyAgICB9CisrfQorKworK3N0YXRpYyB2b2lkIHBhcnNlX3NwKGNvbnN0IHN0cnVjdCBhdnIzMl9vcGVyYW5kICpvcCBBVFRSSUJVVEVfVU5VU0VELAorKwkJICAgICBjaGFyICpzdHIgQVRUUklCVVRFX1VOVVNFRCwKKysJCSAgICAgaW50IG9waW5kZXggQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICBpbnQgc2xvdDsKKysKKysgIHNsb3QgPSBjdXJyZW50X2luc24ubmV4dF9zbG90Kys7CisrICBjdXJyZW50X2luc24uZmllbGRfdmFsdWVbc2xvdF0udmFsdWUgPSBBVlIzMl9SRUdfU1A7CisrfQorKworK3N0YXRpYyB2b2lkCisrcGFyc2Vfc3BfZGlzcChjb25zdCBzdHJ1Y3QgYXZyMzJfb3BlcmFuZCAqb3AsIGNoYXIgKnN0ciwgaW50IG9waW5kZXgpCisreworKyAgY2hhciAqcCwgYzsKKysKKysgIGZvciAoOyAqc3RyOyBzdHIrKykKKysgICAgaWYgKCpzdHIgPT0gJ1snKQorKyAgICAgIGJyZWFrOworKworKyAgYXNzZXJ0KCpzdHIpOworKworKyAgZm9yIChwID0gKytzdHI7ICpwOyBwKyspCisrICAgIGlmICgqcCA9PSAnXScpCisrICAgICAgYnJlYWs7CisrCisrICBjID0gKnAsICpwID0gMDsKKysgIHBhcnNlX2NvbnN0KG9wLCBzdHIsIG9waW5kZXgpOworKyAgKnAgPSBjOworK30KKysKKytzdGF0aWMgdm9pZAorK3BhcnNlX2Nwbm8oY29uc3Qgc3RydWN0IGF2cjMyX29wZXJhbmQgKm9wIEFUVFJJQlVURV9VTlVTRUQsIGNoYXIgKnN0ciwKKysJICAgaW50IG9waW5kZXggQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICBpbnQgc2xvdDsKKysKKysgIHN0ciArPSAyOworKyAgaWYgKCpzdHIgPT0gJyMnKQorKyAgICBzdHIrKzsKKysgIGlmICgqc3RyIDwgJzAnIHx8ICpzdHIgPiAnNycgfHwgc3RyWzFdKQorKyAgICBhc19iYWQoXygiaW52YWxpZCBjb3Byb2Nlc3NvciBgJXMnIiksIHN0cik7CisrCisrICBzbG90ID0gY3VycmVudF9pbnNuLm5leHRfc2xvdCsrOworKyAgY3VycmVudF9pbnNuLmZpZWxkX3ZhbHVlW3Nsb3RdLnZhbHVlID0gKnN0ciAtICcwJzsKKyt9CisrCisrc3RhdGljIHZvaWQKKytwYXJzZV9jcHJlZyhjb25zdCBzdHJ1Y3QgYXZyMzJfb3BlcmFuZCAqb3AsIGNoYXIgKnN0ciwKKysJICAgIGludCBvcGluZGV4IEFUVFJJQlVURV9VTlVTRUQpCisreworKyAgdW5zaWduZWQgaW50IGNyaWQ7CisrICBpbnQgc2xvdDsKKysgIGNoYXIgKmVuZHB0cjsKKysKKysgIHN0ciArPSAyOworKyAgY3JpZCA9IHN0cnRvdWwoc3RyLCAmZW5kcHRyLCAxMCk7CisrICBpZiAoKmVuZHB0ciB8fCBjcmlkID4gMTUgfHwgY3JpZCAmICgoMSA8PCBvcC0+YWxpZ25fb3JkZXIpIC0gMSkpCisrICAgIGFzX2JhZChfKCJpbnZhbGlkIGNvcHJvY2Vzc29yIHJlZ2lzdGVyIGAlcyciKSwgc3RyKTsKKysKKysgIGNyaWQgPj49IG9wLT5hbGlnbl9vcmRlcjsKKysKKysgIHNsb3QgPSBjdXJyZW50X2luc24ubmV4dF9zbG90Kys7CisrICBjdXJyZW50X2luc24uZmllbGRfdmFsdWVbc2xvdF0udmFsdWUgPSBjcmlkOworK30KKysKKytzdGF0aWMgdm9pZAorK3BhcnNlX251bWJlcihjb25zdCBzdHJ1Y3QgYXZyMzJfb3BlcmFuZCAqb3AsIGNoYXIgKnN0ciwKKysJICAgICBpbnQgb3BpbmRleCBBVFRSSUJVVEVfVU5VU0VEKQorK3sKKysgIGV4cHJlc3Npb25TIGV4cDsKKysgIGludCBzbG90OworKyAgY2hhciAqc2F2ZTsKKysKKysgIHNhdmUgPSBpbnB1dF9saW5lX3BvaW50ZXI7CisrICBpbnB1dF9saW5lX3BvaW50ZXIgPSBzdHI7CisrICBleHByZXNzaW9uKCZleHApOworKyAgaW5wdXRfbGluZV9wb2ludGVyID0gc2F2ZTsKKysKKysgIHNsb3QgPSBjdXJyZW50X2luc24ubmV4dF9zbG90Kys7CisrICBjdXJyZW50X2luc24uZmllbGRfdmFsdWVbc2xvdF0uYWxpZ25fb3JkZXIgPSBvcC0+YWxpZ25fb3JkZXI7CisrCisrICBpZiAoZXhwLlhfb3AgPT0gT19jb25zdGFudCkKKysgICAgICBjdXJyZW50X2luc24uZmllbGRfdmFsdWVbc2xvdF0udmFsdWUgPSBleHAuWF9hZGRfbnVtYmVyOworKyAgZWxzZQorKyAgICAgIGFzX2JhZChfKCJpbnZhbGlkIG51bWVyaWMgZXhwcmVzc2lvbiBgJXMnIiksIHN0cik7CisrfQorKworK3N0YXRpYyB2b2lkCisrcGFyc2VfcmVnbGlzdDgoY29uc3Qgc3RydWN0IGF2cjMyX29wZXJhbmQgKm9wIEFUVFJJQlVURV9VTlVTRUQsCisrCSAgICAgICBjaGFyICpzdHIsIGludCBvcGluZGV4IEFUVFJJQlVURV9VTlVTRUQpCisreworKyAgdW5zaWduZWQgbG9uZyByZWdtYXNrOworKyAgdW5zaWduZWQgbG9uZyB2YWx1ZSA9IDA7CisrICBpbnQgc2xvdDsKKysgIGNoYXIgKnRhaWw7CisrCisrICByZWdtYXNrID0gYXZyMzJfcGFyc2VfcmVnbGlzdChzdHIsICZ0YWlsKTsKKysgIGlmICgqdGFpbCkKKysgICAgYXNfYmFkKF8oImludmFsaWQgcmVnaXN0ZXIgbGlzdCBgJXMnIiksIHN0cik7CisrICBlbHNlCisrICAgIHsKKysgICAgICBpZiAoYXZyMzJfbWFrZV9yZWdtYXNrOChyZWdtYXNrLCAmdmFsdWUpKQorKwlhc19iYWQoXygicmVnaXN0ZXIgbGlzdCBgJXMnIGRvZXNuJ3QgZml0IiksIHN0cik7CisrICAgIH0KKysKKysgIHNsb3QgPSBjdXJyZW50X2luc24ubmV4dF9zbG90Kys7CisrICBjdXJyZW50X2luc24uZmllbGRfdmFsdWVbc2xvdF0udmFsdWUgPSB2YWx1ZTsKKyt9CisrCisrc3RhdGljIGludAorK3BhcnNlX3JlZ2xpc3RfdGFpbChjaGFyICpzdHIsIHVuc2lnbmVkIGxvbmcgcmVnbWFzaykKKyt7CisrICBleHByZXNzaW9uUyBleHA7CisrICBjaGFyICpzYXZlLCAqcCwgYzsKKysgIGludCByZWdpZDsKKysKKysgIGZvciAocCA9IHN0ciArIDE7ICpwOyBwKyspCisrICAgIGlmICgqcCA9PSAnPScpCisrICAgICAgYnJlYWs7CisrCisrICBpZiAoISpwKQorKyAgICB7CisrICAgICAgYXNfYmFkKF8oImludmFsaWQgcmVnaXN0ZXIgbGlzdCBgJXMnIiksIHN0cik7CisrICAgICAgcmV0dXJuIC0yOworKyAgICB9CisrCisrICBjID0gKnAsICpwID0gMDsKKysgIHJlZ2lkID0gYXZyMzJfcGFyc2VfaW50cmVnKHN0cik7CisrICAqcCA9IGM7CisrCisrICBpZiAocmVnaWQgIT0gMTIpCisrICAgIHsKKysgICAgICBhc19iYWQoXygiaW52YWxpZCByZWdpc3RlciBsaXN0IGAlcyciKSwgc3RyKTsKKysgICAgICByZXR1cm4gLTI7CisrICAgIH0KKysKKysgIC8qIElmIHdlIGhhdmUgYW4gYXNzaWdubWVudCwgd2UgbXVzdCBwb3AgUEMgYW5kIHdlIG11c3QgX25vdF8KKysgICAgIHBvcCBMUiBvciBSMTIgKi8KKysgIGlmICghKHJlZ21hc2sgJiAoMSA8PCBBVlIzMl9SRUdfUEMpKSkKKysgICAgeworKyAgICAgIGFzX2JhZChfKCJyZXR1cm4gdmFsdWUgc3BlY2lmaWVkIGZvciBub24tcmV0dXJuIGluc3RydWN0aW9uIikpOworKyAgICAgIHJldHVybiAtMjsKKysgICAgfQorKyAgZWxzZSBpZiAocmVnbWFzayAmICgoMSA8PCBBVlIzMl9SRUdfUjEyKSB8ICgxIDw8IEFWUjMyX1JFR19MUikpKQorKyAgICB7CisrICAgICAgYXNfYmFkKF8oImNhbid0IHBvcCBMUiBvciBSMTIgd2hlbiBzcGVjaWZ5aW5nIHJldHVybiB2YWx1ZSIpKTsKKysgICAgICByZXR1cm4gLTI7CisrICAgIH0KKysKKysgIHNhdmUgPSBpbnB1dF9saW5lX3BvaW50ZXI7CisrICBpbnB1dF9saW5lX3BvaW50ZXIgPSBwICsgMTsKKysgIGV4cHJlc3Npb24oJmV4cCk7CisrICBpbnB1dF9saW5lX3BvaW50ZXIgPSBzYXZlOworKworKyAgaWYgKGV4cC5YX29wICE9IE9fY29uc3RhbnQKKysgICAgICB8fCBleHAuWF9hZGRfbnVtYmVyIDwgLTEKKysgICAgICB8fCBleHAuWF9hZGRfbnVtYmVyID4gMSkKKysgICAgeworKyAgICAgIGFzX2JhZChfKCJpbnZhbGlkIHJldHVybiB2YWx1ZSBgJXMnIiksIHN0cik7CisrICAgICAgcmV0dXJuIC0yOworKyAgICB9CisrCisrICByZXR1cm4gZXhwLlhfYWRkX251bWJlcjsKKyt9CisrCisrc3RhdGljIHZvaWQKKytwYXJzZV9yZWdsaXN0OShjb25zdCBzdHJ1Y3QgYXZyMzJfb3BlcmFuZCAqb3AgQVRUUklCVVRFX1VOVVNFRCwKKysJICAgICAgIGNoYXIgKnN0ciwgaW50IG9waW5kZXggQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICB1bnNpZ25lZCBsb25nIHJlZ21hc2s7CisrICB1bnNpZ25lZCBsb25nIHZhbHVlID0gMCwga2JpdCA9IDA7CisrICBpbnQgc2xvdDsKKysgIGNoYXIgKnRhaWw7CisrCisrICByZWdtYXNrID0gYXZyMzJfcGFyc2VfcmVnbGlzdChzdHIsICZ0YWlsKTsKKysgIC8qIHByaW50ZigicGFyc2VkIHJlZ2xpc3QxNjogJTA0bHgsIHRhaWw6IGAlcydcbiIsIHJlZ21hc2ssIHRhaWwpOyAqLworKyAgaWYgKCp0YWlsKQorKyAgICB7CisrICAgICAgaW50IHJldHZhbDsKKysKKysgICAgICByZXR2YWwgPSBwYXJzZV9yZWdsaXN0X3RhaWwodGFpbCwgcmVnbWFzayk7CisrCisrICAgICAgc3dpdGNoIChyZXR2YWwpCisrCXsKKysJY2FzZSAtMToKKysJICByZWdtYXNrIHw9IDEgPDwgQVZSMzJfUkVHX0xSOworKwkgIGJyZWFrOworKwljYXNlIDA6CisrCSAgYnJlYWs7CisrCWNhc2UgMToKKysJICByZWdtYXNrIHw9IDEgPDwgQVZSMzJfUkVHX1IxMjsKKysJICBicmVhazsKKysJZGVmYXVsdDoKKysJICBicmVhazsKKysJfQorKworKyAgICAgIGtiaXQgPSAxOworKyAgICB9CisrCisrICBpZiAoYXZyMzJfbWFrZV9yZWdtYXNrOChyZWdtYXNrLCAmdmFsdWUpKQorKyAgICBhc19iYWQoXygicmVnaXN0ZXIgbGlzdCBgJXMnIGRvZXNuJ3QgZml0IiksIHN0cik7CisrCisrCisrICBzbG90ID0gY3VycmVudF9pbnNuLm5leHRfc2xvdCsrOworKyAgY3VycmVudF9pbnNuLmZpZWxkX3ZhbHVlW3Nsb3RdLnZhbHVlID0gKHZhbHVlIDw8IDEpIHwga2JpdDsKKyt9CisrCisrc3RhdGljIHZvaWQKKytwYXJzZV9yZWdsaXN0MTYoY29uc3Qgc3RydWN0IGF2cjMyX29wZXJhbmQgKm9wIEFUVFJJQlVURV9VTlVTRUQsCisrCQljaGFyICpzdHIsIGludCBvcGluZGV4IEFUVFJJQlVURV9VTlVTRUQpCisreworKyAgdW5zaWduZWQgbG9uZyByZWdtYXNrOworKyAgaW50IHNsb3Q7CisrICBjaGFyICp0YWlsOworKworKyAgcmVnbWFzayA9IGF2cjMyX3BhcnNlX3JlZ2xpc3Qoc3RyLCAmdGFpbCk7CisrICBpZiAoKnRhaWwpCisrICAgIGFzX2JhZChfKCJpbnZhbGlkIHJlZ2lzdGVyIGxpc3QgYCVzJyIpLCBzdHIpOworKworKyAgc2xvdCA9IGN1cnJlbnRfaW5zbi5uZXh0X3Nsb3QrKzsKKysgIGN1cnJlbnRfaW5zbi5maWVsZF92YWx1ZVtzbG90XS52YWx1ZSA9IHJlZ21hc2s7CisrfQorKworK3N0YXRpYyB2b2lkCisrcGFyc2VfcmVnbGlzdF9sZG0oY29uc3Qgc3RydWN0IGF2cjMyX29wZXJhbmQgKm9wIEFUVFJJQlVURV9VTlVTRUQsCisrCQkgIGNoYXIgKnN0ciwgaW50IG9waW5kZXggQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICB1bnNpZ25lZCBsb25nIHJlZ21hc2s7CisrICBpbnQgc2xvdCwgcnAsIHdfYml0ID0gMDsKKysgIGNoYXIgKnRhaWwsICpwLCBjOworKworKyAgZm9yIChwID0gc3RyOyAqcCAmJiAqcCAhPSAnLCc7IHArKykKKysgICAgaWYgKCpwID09ICcrJykKKysgICAgICBicmVhazsKKysKKysgIGMgPSAqcCwgKnAgPSAwOworKyAgcnAgPSBhdnIzMl9wYXJzZV9pbnRyZWcoc3RyKTsKKysgICpwID0gYzsKKysgIGlmIChycCA8IDApCisrICAgIHsKKysgICAgICBhc19iYWQoXygiaW52YWxpZCBkZXN0aW5hdGlvbiByZWdpc3RlciBpbiBgJXMnIiksIHN0cik7CisrICAgICAgcmV0dXJuOworKyAgICB9CisrCisrICBpZiAocFswXSA9PSAnKycgJiYgcFsxXSA9PSAnKycpCisrICAgIHsKKysgICAgICB3X2JpdCA9IDE7CisrICAgICAgcCArPSAyOworKyAgICB9CisrCisrICBpZiAoKnAgIT0gJywnKQorKyAgICB7CisrICAgICAgYXNfYmFkKF8oImV4cGVjdGVkIGAsJyBhZnRlciBkZXN0aW5hdGlvbiByZWdpc3RlciBpbiBgJXMnIiksIHN0cik7CisrICAgICAgcmV0dXJuOworKyAgICB9CisrCisrICBzdHIgPSBwICsgMTsKKysgIHJlZ21hc2sgPSBhdnIzMl9wYXJzZV9yZWdsaXN0KHN0ciwgJnRhaWwpOworKyAgaWYgKCp0YWlsKQorKyAgICB7CisrICAgICAgaW50IHJldHZhbDsKKysKKysgICAgICBpZiAocnAgIT0gQVZSMzJfUkVHX1NQKQorKwl7CisrCSAgYXNfYmFkKF8oImp1bmsgYXQgZW5kIG9mIGxpbmU6IGAlcyciKSwgdGFpbCk7CisrCSAgcmV0dXJuOworKwl9CisrCisrICAgICAgcnAgPSBBVlIzMl9SRUdfUEM7CisrCisrICAgICAgcmV0dmFsID0gcGFyc2VfcmVnbGlzdF90YWlsKHRhaWwsIHJlZ21hc2spOworKworKyAgICAgIHN3aXRjaCAocmV0dmFsKQorKwl7CisrCWNhc2UgLTE6CisrCSAgcmVnbWFzayB8PSAxIDw8IEFWUjMyX1JFR19MUjsKKysJICBicmVhazsKKysJY2FzZSAwOgorKwkgIGJyZWFrOworKwljYXNlIDE6CisrCSAgcmVnbWFzayB8PSAxIDw8IEFWUjMyX1JFR19SMTI7CisrCSAgYnJlYWs7CisrCWRlZmF1bHQ6CisrCSAgcmV0dXJuOworKwl9CisrICAgIH0KKysKKysgIHNsb3QgPSBjdXJyZW50X2luc24ubmV4dF9zbG90Kys7CisrICBjdXJyZW50X2luc24uZmllbGRfdmFsdWVbc2xvdF0udmFsdWUgPSBycDsKKysgIHNsb3QgPSBjdXJyZW50X2luc24ubmV4dF9zbG90Kys7CisrICBjdXJyZW50X2luc24uZmllbGRfdmFsdWVbc2xvdF0udmFsdWUgPSB3X2JpdDsKKysgIHNsb3QgPSBjdXJyZW50X2luc24ubmV4dF9zbG90Kys7CisrICBjdXJyZW50X2luc24uZmllbGRfdmFsdWVbc2xvdF0udmFsdWUgPSByZWdtYXNrOworK30KKysKKytzdGF0aWMgdm9pZAorK3BhcnNlX3JlZ2xpc3RfY3A4KGNvbnN0IHN0cnVjdCBhdnIzMl9vcGVyYW5kICpvcCBBVFRSSUJVVEVfVU5VU0VELAorKwkJICBjaGFyICpzdHIsIGludCBvcGluZGV4IEFUVFJJQlVURV9VTlVTRUQpCisreworKyAgdW5zaWduZWQgbG9uZyByZWdtYXNrOworKyAgaW50IHNsb3QsIGhfYml0ID0gMDsKKysgIGNoYXIgKnRhaWw7CisrCisrICByZWdtYXNrID0gYXZyMzJfcGFyc2VfY3ByZWdsaXN0KHN0ciwgJnRhaWwpOworKyAgaWYgKCp0YWlsKQorKyAgICBhc19iYWQoXygianVuayBhdCBlbmQgb2YgbGluZTogYCVzJyIpLCB0YWlsKTsKKysgIGVsc2UgaWYgKHJlZ21hc2sgJiAweGZmVUwpCisrICAgIHsKKysgICAgICBpZiAocmVnbWFzayAmIDB4ZmYwMFVMKQorKwlhc19iYWQoXygicmVnaXN0ZXIgbGlzdCBgJXMnIGRvZXNuJ3QgZml0IiksIHN0cik7CisrICAgICAgcmVnbWFzayAmPSAweGZmOworKyAgICB9CisrICBlbHNlIGlmIChyZWdtYXNrICYgMHhmZjAwVUwpCisrICAgIHsKKysgICAgICByZWdtYXNrID4+PSA4OworKyAgICAgIGhfYml0ID0gMTsKKysgICAgfQorKyAgZWxzZQorKyAgICBhc193YXJuKF8oInJlZ2lzdGVyIGxpc3QgaXMgZW1wdHkiKSk7CisrCisrICBzbG90ID0gY3VycmVudF9pbnNuLm5leHRfc2xvdCsrOworKyAgY3VycmVudF9pbnNuLmZpZWxkX3ZhbHVlW3Nsb3RdLnZhbHVlID0gcmVnbWFzazsKKysgIHNsb3QgPSBjdXJyZW50X2luc24ubmV4dF9zbG90Kys7CisrICBjdXJyZW50X2luc24uZmllbGRfdmFsdWVbc2xvdF0udmFsdWUgPSBoX2JpdDsKKyt9CisrCisrc3RhdGljIHZvaWQKKytwYXJzZV9yZWdsaXN0X2NwZDgoY29uc3Qgc3RydWN0IGF2cjMyX29wZXJhbmQgKm9wIEFUVFJJQlVURV9VTlVTRUQsCisrCQkgICBjaGFyICpzdHIsIGludCBvcGluZGV4IEFUVFJJQlVURV9VTlVTRUQpCisreworKyAgdW5zaWduZWQgbG9uZyByZWdtYXNrLCByZWdtYXNrX2QgPSAwOworKyAgaW50IHNsb3QsIGk7CisrICBjaGFyICp0YWlsOworKworKyAgcmVnbWFzayA9IGF2cjMyX3BhcnNlX2NwcmVnbGlzdChzdHIsICZ0YWlsKTsKKysgIGlmICgqdGFpbCkKKysgICAgYXNfYmFkKF8oImp1bmsgYXQgZW5kIG9mIGxpbmU6IGAlcyciKSwgdGFpbCk7CisrCisrICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorKyAgICB7CisrICAgICAgaWYgKHJlZ21hc2sgJiAxKQorKwl7CisrCSAgaWYgKCEocmVnbWFzayAmIDIpKQorKwkgICAgeworKwkgICAgICBhc19iYWQoXygicmVnaXN0ZXIgbGlzdCBgJXMnIGRvZXNuJ3QgZml0IiksIHN0cik7CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKwkgIHJlZ21hc2tfZCB8PSAxIDw8IGk7CisrCX0KKysgICAgICBlbHNlIGlmIChyZWdtYXNrICYgMikKKysJeworKwkgIGFzX2JhZChfKCJyZWdpc3RlciBsaXN0IGAlcycgZG9lc24ndCBmaXQiKSwgc3RyKTsKKysJICBicmVhazsKKysJfQorKworKyAgICAgIHJlZ21hc2sgPj49IDI7CisrICAgIH0KKysKKysgIHNsb3QgPSBjdXJyZW50X2luc24ubmV4dF9zbG90Kys7CisrICBjdXJyZW50X2luc24uZmllbGRfdmFsdWVbc2xvdF0udmFsdWUgPSByZWdtYXNrX2Q7CisrfQorKworK3N0YXRpYyB2b2lkCisrcGFyc2VfcmV0dmFsKGNvbnN0IHN0cnVjdCBhdnIzMl9vcGVyYW5kICpvcCBBVFRSSUJVVEVfVU5VU0VELAorKwkgICAgIGNoYXIgKnN0ciwgaW50IG9waW5kZXggQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICBpbnQgcmVnaWQsIHNsb3Q7CisrCisrICByZWdpZCA9IGF2cjMyX3BhcnNlX2ludHJlZyhzdHIpOworKyAgaWYgKHJlZ2lkIDwgMCkKKysgICAgeworKyAgICAgIGV4cHJlc3Npb25TIGV4cDsKKysgICAgICBjaGFyICpzYXZlOworKworKyAgICAgIHJlZ2lkID0gMDsKKysKKysgICAgICBzYXZlID0gaW5wdXRfbGluZV9wb2ludGVyOworKyAgICAgIGlucHV0X2xpbmVfcG9pbnRlciA9IHN0cjsKKysgICAgICBleHByZXNzaW9uKCZleHApOworKyAgICAgIGlucHV0X2xpbmVfcG9pbnRlciA9IHNhdmU7CisrCisrICAgICAgaWYgKGV4cC5YX29wICE9IE9fY29uc3RhbnQpCisrCWFzX2JhZChfKCJpbnZhbGlkIHJldHVybiB2YWx1ZSBgJXMnIiksIHN0cik7CisrICAgICAgZWxzZQorKwlzd2l0Y2ggKGV4cC5YX2FkZF9udW1iZXIpCisrCSAgeworKwkgIGNhc2UgLTE6CisrCSAgICByZWdpZCA9IEFWUjMyX1JFR19MUjsKKysJICAgIGJyZWFrOworKwkgIGNhc2UgMDoKKysJICAgIHJlZ2lkID0gQVZSMzJfUkVHX1NQOworKwkgICAgYnJlYWs7CisrCSAgY2FzZSAxOgorKwkgICAgcmVnaWQgPSBBVlIzMl9SRUdfUEM7CisrCSAgICBicmVhazsKKysJICBkZWZhdWx0OgorKwkgICAgYXNfYmFkKF8oImludmFsaWQgcmV0dXJuIHZhbHVlIGAlcyciKSwgc3RyKTsKKysJICAgIGJyZWFrOworKwkgIH0KKysgICAgfQorKworKyAgc2xvdCA9IGN1cnJlbnRfaW5zbi5uZXh0X3Nsb3QrKzsKKysgIGN1cnJlbnRfaW5zbi5maWVsZF92YWx1ZVtzbG90XS52YWx1ZSA9IHJlZ2lkOworK30KKysKKysjZGVmaW5lIHBhcnNlX21jYWxsIHBhcnNlX2ludHJlZ19kaXNwCisrCisrc3RhdGljIHZvaWQKKytwYXJzZV9qb3NwaW5jKGNvbnN0IHN0cnVjdCBhdnIzMl9vcGVyYW5kICpvcCBBVFRSSUJVVEVfVU5VU0VELAorKwkgICAgICBjaGFyICpzdHIsIGludCBvcGluZGV4IEFUVFJJQlVURV9VTlVTRUQpCisreworKyAgZXhwcmVzc2lvblMgZXhwOworKyAgaW50IHNsb3Q7CisrICBjaGFyICpzYXZlOworKworKyAgc2F2ZSA9IGlucHV0X2xpbmVfcG9pbnRlcjsKKysgIGlucHV0X2xpbmVfcG9pbnRlciA9IHN0cjsKKysgIGV4cHJlc3Npb24oJmV4cCk7CisrICBpbnB1dF9saW5lX3BvaW50ZXIgPSBzYXZlOworKworKyAgc2xvdCA9IGN1cnJlbnRfaW5zbi5uZXh0X3Nsb3QrKzsKKysKKysgIGlmIChleHAuWF9vcCA9PSBPX2NvbnN0YW50KQorKyAgICB7CisrICAgICAgaWYgKGV4cC5YX2FkZF9udW1iZXIgPiAwKQorKwlleHAuWF9hZGRfbnVtYmVyLS07CisrICAgICAgY3VycmVudF9pbnNuLmZpZWxkX3ZhbHVlW3Nsb3RdLnZhbHVlID0gZXhwLlhfYWRkX251bWJlcjsKKysgICAgfQorKyAgZWxzZQorKyAgICBhc19iYWQoXygiaW52YWxpZCBudW1lcmljIGV4cHJlc3Npb24gYCVzJyIpLCBzdHIpOworK30KKysKKysjZGVmaW5lIHBhcnNlX2NvaAkJcGFyc2Vfbm90aGluZworKworK3N0YXRpYyB2b2lkCisrcGFyc2VfZnByZWcoY29uc3Qgc3RydWN0IGF2cjMyX29wZXJhbmQgKm9wLAorKwkgICAgY2hhciAqc3RyLCBpbnQgb3BpbmRleCBBVFRSSUJVVEVfVU5VU0VEKQorK3sKKysgIHVuc2lnbmVkIGxvbmcgcmVnaWQ7CisrICBpbnQgc2xvdDsKKysKKysgIHJlZ2lkID0gc3RydG91bChzdHIgKyAyLCBOVUxMLCAxMCk7CisrCisrICBpZiAoKHJlZ2lkID49IDE2KSB8fCAocmVnaWQgJiAoKDEgPDwgb3AtPmFsaWduX29yZGVyKSAtIDEpKSkKKysgICAgYXNfYmFkKF8oImludmFsaWQgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgYCVzJyIpLCBzdHIpOworKworKyAgc2xvdCA9IGN1cnJlbnRfaW5zbi5uZXh0X3Nsb3QrKzsKKysgIGN1cnJlbnRfaW5zbi5maWVsZF92YWx1ZVtzbG90XS52YWx1ZSA9IHJlZ2lkOworKyAgY3VycmVudF9pbnNuLmZpZWxkX3ZhbHVlW3Nsb3RdLmFsaWduX29yZGVyID0gb3AtPmFsaWduX29yZGVyOworK30KKysKKytzdGF0aWMgdm9pZAorK3BhcnNlX3BpY29yZWcoY29uc3Qgc3RydWN0IGF2cjMyX29wZXJhbmQgKm9wLAorKwkgICAgICBjaGFyICpzdHIsIGludCBvcGluZGV4IEFUVFJJQlVURV9VTlVTRUQpCisreworKyAgdW5zaWduZWQgbG9uZyByZWdpZDsKKysgIGludCBzbG90OworKworKyAgcmVnaWQgPSBhdnIzMl9wYXJzZV9waWNvcmVnKHN0cik7CisrICBpZiAocmVnaWQgJiAoKDEgPDwgb3AtPmFsaWduX29yZGVyKSAtIDEpKQorKyAgICBhc19iYWQoXygiaW52YWxpZCBkb3VibGUtd29yZCBQaUNvIHJlZ2lzdGVyIGAlcyciKSwgc3RyKTsKKysKKysgIHNsb3QgPSBjdXJyZW50X2luc24ubmV4dF9zbG90Kys7CisrICBjdXJyZW50X2luc24uZmllbGRfdmFsdWVbc2xvdF0udmFsdWUgPSByZWdpZDsKKysgIGN1cnJlbnRfaW5zbi5maWVsZF92YWx1ZVtzbG90XS5hbGlnbl9vcmRlciA9IG9wLT5hbGlnbl9vcmRlcjsKKyt9CisrCisrc3RhdGljIHZvaWQKKytwYXJzZV9waWNvX3JlZ2xpc3Rfdyhjb25zdCBzdHJ1Y3QgYXZyMzJfb3BlcmFuZCAqb3AgQVRUUklCVVRFX1VOVVNFRCwKKysJCSAgICAgY2hhciAqc3RyLCBpbnQgb3BpbmRleCBBVFRSSUJVVEVfVU5VU0VEKQorK3sKKysgIHVuc2lnbmVkIGxvbmcgcmVnbWFzazsKKysgIGludCBzbG90LCBoX2JpdCA9IDA7CisrICBjaGFyICp0YWlsOworKworKyAgcmVnbWFzayA9IGF2cjMyX3BhcnNlX3BpY29fcmVnbGlzdChzdHIsICZ0YWlsKTsKKysgIGlmICgqdGFpbCkKKysgICAgYXNfYmFkKF8oImp1bmsgYXQgZW5kIG9mIGxpbmU6IGAlcyciKSwgdGFpbCk7CisrCisrICBpZiAocmVnbWFzayAmIDB4MDBmZlVMKQorKyAgICB7CisrICAgICAgaWYgKHJlZ21hc2sgJiAweGZmMDBVTCkKKysJYXNfYmFkKF8oInJlZ2lzdGVyIGxpc3QgYCVzJyBkb2Vzbid0IGZpdCIpLCBzdHIpOworKyAgICAgIHJlZ21hc2sgJj0gMHgwMGZmVUw7CisrICAgIH0KKysgIGVsc2UgaWYgKHJlZ21hc2sgJiAweGZmMDBVTCkKKysgICAgeworKyAgICAgIHJlZ21hc2sgPj49IDg7CisrICAgICAgaF9iaXQgPSAxOworKyAgICB9CisrICBlbHNlCisrICAgIGFzX3dhcm4oXygicmVnaXN0ZXIgbGlzdCBpcyBlbXB0eSIpKTsKKysKKysgIHNsb3QgPSBjdXJyZW50X2luc24ubmV4dF9zbG90Kys7CisrICBjdXJyZW50X2luc24uZmllbGRfdmFsdWVbc2xvdF0udmFsdWUgPSByZWdtYXNrOworKyAgc2xvdCA9IGN1cnJlbnRfaW5zbi5uZXh0X3Nsb3QrKzsKKysgIGN1cnJlbnRfaW5zbi5maWVsZF92YWx1ZVtzbG90XS52YWx1ZSA9IGhfYml0OworK30KKysKKytzdGF0aWMgdm9pZAorK3BhcnNlX3BpY29fcmVnbGlzdF9kKGNvbnN0IHN0cnVjdCBhdnIzMl9vcGVyYW5kICpvcCBBVFRSSUJVVEVfVU5VU0VELAorKwkJICAgICBjaGFyICpzdHIsIGludCBvcGluZGV4IEFUVFJJQlVURV9VTlVTRUQpCisreworKyAgdW5zaWduZWQgbG9uZyByZWdtYXNrLCByZWdtYXNrX2QgPSAwOworKyAgaW50IHNsb3QsIGk7CisrICBjaGFyICp0YWlsOworKworKyAgcmVnbWFzayA9IGF2cjMyX3BhcnNlX3BpY29fcmVnbGlzdChzdHIsICZ0YWlsKTsKKysgIGlmICgqdGFpbCkKKysgICAgYXNfYmFkKF8oImp1bmsgYXQgZW5kIG9mIGxpbmU6IGAlcyciKSwgdGFpbCk7CisrCisrICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorKyAgICB7CisrICAgICAgaWYgKHJlZ21hc2sgJiAxKQorKwl7CisrCSAgaWYgKCEocmVnbWFzayAmIDIpKQorKwkgICAgeworKwkgICAgICBhc19iYWQoXygicmVnaXN0ZXIgbGlzdCBgJXMnIGRvZXNuJ3QgZml0IiksIHN0cik7CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKwkgIHJlZ21hc2tfZCB8PSAxIDw8IGk7CisrCX0KKysgICAgICBlbHNlIGlmIChyZWdtYXNrICYgMikKKysJeworKwkgIGFzX2JhZChfKCJyZWdpc3RlciBsaXN0IGAlcycgZG9lc24ndCBmaXQiKSwgc3RyKTsKKysJICBicmVhazsKKysJfQorKworKyAgICAgIHJlZ21hc2sgPj49IDI7CisrICAgIH0KKysKKysgIHNsb3QgPSBjdXJyZW50X2luc24ubmV4dF9zbG90Kys7CisrICBjdXJyZW50X2luc24uZmllbGRfdmFsdWVbc2xvdF0udmFsdWUgPSByZWdtYXNrX2Q7CisrfQorKworK3N0YXRpYyB2b2lkCisrcGFyc2VfcGljb19pbihjb25zdCBzdHJ1Y3QgYXZyMzJfb3BlcmFuZCAqb3AgQVRUUklCVVRFX1VOVVNFRCwKKysJICAgICAgY2hhciAqc3RyLCBpbnQgb3BpbmRleCBBVFRSSUJVVEVfVU5VU0VEKQorK3sKKysgIHVuc2lnbmVkIGxvbmcgcmVnaWQ7CisrICBpbnQgc2xvdDsKKysKKysgIHJlZ2lkID0gc3RydG91bChzdHIgKyAyLCBOVUxMLCAxMCk7CisrCisrICBpZiAocmVnaWQgPj0gMTIpCisrICAgIGFzX2JhZChfKCJpbnZhbGlkIFBpQ28gSU4gcmVnaXN0ZXIgYCVzJyIpLCBzdHIpOworKworKyAgc2xvdCA9IGN1cnJlbnRfaW5zbi5uZXh0X3Nsb3QrKzsKKysgIGN1cnJlbnRfaW5zbi5maWVsZF92YWx1ZVtzbG90XS52YWx1ZSA9IHJlZ2lkOworKyAgY3VycmVudF9pbnNuLmZpZWxkX3ZhbHVlW3Nsb3RdLmFsaWduX29yZGVyID0gMDsKKyt9CisrCisrI2RlZmluZSBwYXJzZV9waWNvX291dDAJCXBhcnNlX25vdGhpbmcKKysjZGVmaW5lIHBhcnNlX3BpY29fb3V0MQkJcGFyc2Vfbm90aGluZworKyNkZWZpbmUgcGFyc2VfcGljb19vdXQyCQlwYXJzZV9ub3RoaW5nCisrI2RlZmluZSBwYXJzZV9waWNvX291dDMJCXBhcnNlX25vdGhpbmcKKysKKysjZGVmaW5lIE9QKG5hbWUsIHNnbiwgcGNyZWwsIGFsaWduLCBmdW5jKSBcCisrICB7IEFWUjMyX09QRVJBTkRfIyNuYW1lLCBzZ24sIHBjcmVsLCBhbGlnbiwgbWF0Y2hfIyNmdW5jLCBwYXJzZV8jI2Z1bmMgfQorKworK3N0cnVjdCBhdnIzMl9vcGVyYW5kIGF2cjMyX29wZXJhbmRfdGFibGVbXSA9IHsKKysgIE9QKElOVFJFRywgMCwgMCwgMCwgaW50cmVnKSwKKysgIE9QKElOVFJFR19QUkVERUMsIDAsIDAsIDAsIGludHJlZ19wcmVkZWMpLAorKyAgT1AoSU5UUkVHX1BPU1RJTkMsIDAsIDAsIDAsIGludHJlZ19wb3N0aW5jKSwKKysgIE9QKElOVFJFR19MU0wsIDAsIDAsIDAsIGludHJlZ19sc2wpLAorKyAgT1AoSU5UUkVHX0xTUiwgMCwgMCwgMCwgaW50cmVnX2xzciksCisrICBPUChJTlRSRUdfQlNFTCwgMCwgMCwgMCwgaW50cmVnX3BhcnQpLAorKyAgT1AoSU5UUkVHX0hTRUwsIDAsIDAsIDEsIGludHJlZ19wYXJ0KSwKKysgIE9QKElOVFJFR19TRElTUCwgMSwgMCwgMCwgaW50cmVnX2Rpc3ApLAorKyAgT1AoSU5UUkVHX1NESVNQX0gsIDEsIDAsIDEsIGludHJlZ19kaXNwKSwKKysgIE9QKElOVFJFR19TRElTUF9XLCAxLCAwLCAyLCBpbnRyZWdfZGlzcCksCisrICBPUChJTlRSRUdfVURJU1AsIDAsIDAsIDAsIGludHJlZ19kaXNwKSwKKysgIE9QKElOVFJFR19VRElTUF9ILCAwLCAwLCAxLCBpbnRyZWdfZGlzcCksCisrICBPUChJTlRSRUdfVURJU1BfVywgMCwgMCwgMiwgaW50cmVnX2Rpc3ApLAorKyAgT1AoSU5UUkVHX0lOREVYLCAwLCAwLCAwLCBpbnRyZWdfaW5kZXgpLAorKyAgT1AoSU5UUkVHX1hJTkRFWCwgMCwgMCwgMCwgaW50cmVnX3hpbmRleCksCisrICBPUChEV1JFRywgMCwgMCwgMSwgaW50cmVnKSwKKysgIE9QKFBDX1VESVNQX1csIDAsIDEsIDIsIHBjX2Rpc3ApLAorKyAgT1AoU1AsIDAsIDAsIDAsIHNwKSwKKysgIE9QKFNQX1VESVNQX1csIDAsIDAsIDIsIHNwX2Rpc3ApLAorKyAgT1AoQ1BOTywgMCwgMCwgMCwgY3BubyksCisrICBPUChDUFJFRywgMCwgMCwgMCwgY3ByZWcpLAorKyAgT1AoQ1BSRUdfRCwgMCwgMCwgMSwgY3ByZWcpLAorKyAgT1AoVU5TSUdORURfQ09OU1QsIDAsIDAsIDAsIGNvbnN0KSwKKysgIE9QKFVOU0lHTkVEX0NPTlNUX1csIDAsIDAsIDIsIGNvbnN0KSwKKysgIE9QKFNJR05FRF9DT05TVCwgMSwgMCwgMCwgY29uc3QpLAorKyAgT1AoU0lHTkVEX0NPTlNUX1csIDEsIDAsIDIsIGNvbnN0KSwKKysgIE9QKEpNUExBQkVMLCAxLCAxLCAxLCBqbXBsYWJlbCksCisrICBPUChVTlNJR05FRF9OVU1CRVIsIDAsIDAsIDAsIG51bWJlciksCisrICBPUChVTlNJR05FRF9OVU1CRVJfVywgMCwgMCwgMiwgbnVtYmVyKSwKKysgIE9QKFJFR0xJU1Q4LCAwLCAwLCAwLCByZWdsaXN0OCksCisrICBPUChSRUdMSVNUOSwgMCwgMCwgMCwgcmVnbGlzdDkpLAorKyAgT1AoUkVHTElTVDE2LCAwLCAwLCAwLCByZWdsaXN0MTYpLAorKyAgT1AoUkVHTElTVF9MRE0sIDAsIDAsIDAsIHJlZ2xpc3RfbGRtKSwKKysgIE9QKFJFR0xJU1RfQ1A4LCAwLCAwLCAwLCByZWdsaXN0X2NwOCksCisrICBPUChSRUdMSVNUX0NQRDgsIDAsIDAsIDAsIHJlZ2xpc3RfY3BkOCksCisrICBPUChSRVRWQUwsIDAsIDAsIDAsIHJldHZhbCksCisrICBPUChNQ0FMTCwgMSwgMCwgMiwgbWNhbGwpLAorKyAgT1AoSk9TUElOQywgMCwgMCwgMCwgam9zcGluYyksCisrICBPUChDT0gsIDAsIDAsIDAsIGNvaCksCisrICBPUChGUFJFR19TLCAwLCAwLCAwLCBmcHJlZyksCisrICBPUChGUFJFR19ELCAwLCAwLCAxLCBmcHJlZyksCisrICBPUChQSUNPX1JFR19XLCAwLCAwLCAwLCBwaWNvcmVnKSwKKysgIE9QKFBJQ09fUkVHX0QsIDAsIDAsIDEsIHBpY29yZWcpLAorKyAgT1AoUElDT19SRUdMSVNUX1csIDAsIDAsIDAsIHBpY29fcmVnbGlzdF93KSwKKysgIE9QKFBJQ09fUkVHTElTVF9ELCAwLCAwLCAwLCBwaWNvX3JlZ2xpc3RfZCksCisrICBPUChQSUNPX0lOLCAwLCAwLCAwLCBwaWNvX2luKSwKKysgIE9QKFBJQ09fT1VUMCwgMCwgMCwgMCwgcGljb19vdXQwKSwKKysgIE9QKFBJQ09fT1VUMSwgMCwgMCwgMCwgcGljb19vdXQxKSwKKysgIE9QKFBJQ09fT1VUMiwgMCwgMCwgMCwgcGljb19vdXQyKSwKKysgIE9QKFBJQ09fT1VUMywgMCwgMCwgMCwgcGljb19vdXQzKSwKKyt9OworKworK3N5bWJvbFMgKgorK21kX3VuZGVmaW5lZF9zeW1ib2wgKGNoYXIgKm5hbWUgQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICBwcl9kZWJ1ZygibWRfdW5kZWZpbmVkX3N5bWJvbDogJXNcbiIsIG5hbWUpOworKyAgcmV0dXJuIDA7CisrfQorKworK3N0cnVjdCBhdnIzMl9yZWxheF90eXBlCisreworKyAgbG9uZyBsb3dlcl9ib3VuZDsKKysgIGxvbmcgdXBwZXJfYm91bmQ7CisrICB1bnNpZ25lZCBjaGFyIGFsaWduOworKyAgdW5zaWduZWQgY2hhciBsZW5ndGg7CisrICBzaWduZWQgc2hvcnQgbmV4dDsKKyt9OworKworKyNkZWZpbmUgRU1QVFkgeyAwLCAwLCAwLCAwLCAtMSB9CisrI2RlZmluZSBDKGxvd2VyLCB1cHBlciwgYWxpZ24sIG5leHQpCQkJXAorKyAgeyAobG93ZXIpLCAodXBwZXIpLCAoYWxpZ24pLCAyLCBBVlIzMl9PUENfIyNuZXh0IH0KKysjZGVmaW5lIEUobG93ZXIsIHVwcGVyLCBhbGlnbikJCQkJXAorKyAgeyAobG93ZXIpLCAodXBwZXIpLCAoYWxpZ24pLCA0LCAtMSB9CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhdnIzMl9yZWxheF90eXBlIGF2cjMyX3JlbGF4X3RhYmxlW10gPQorKyAgeworKyAgICAvKiAwICovCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwKKysgICAgRU1QVFksIEVNUFRZLCBFTVBUWSwKKysgICAgRSgwLCA2NTUzNSwgMCksIEUoMCwgNjU1MzUsIDApLCBFKDAsIDY1NTM1LCAwKSwgRSgwLCA2NTUzNSwgMCksCisrICAgIEVNUFRZLAorKyAgICAvKiAxNiAqLworKyAgICBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwKKysKKysgICAgQygtMjU2LCAyNTQsIDEsIEJSRVEyKSwgQygtMjU2LCAyNTQsIDEsIEJSTkUyKSwKKysgICAgQygtMjU2LCAyNTQsIDEsIEJSQ0MyKSwgQygtMjU2LCAyNTQsIDEsIEJSQ1MyKSwKKysgICAgQygtMjU2LCAyNTQsIDEsIEJSR0UyKSwgQygtMjU2LCAyNTQsIDEsIEJSTFQyKSwKKysgICAgQygtMjU2LCAyNTQsIDEsIEJSTUkyKSwgQygtMjU2LCAyNTQsIDEsIEJSUEwyKSwKKysgICAgRSgtMjA5NzE1MiwgMjA5NzE1MCwgMSksIEUoLTIwOTcxNTIsIDIwOTcxNTAsIDEpLAorKyAgICBFKC0yMDk3MTUyLCAyMDk3MTUwLCAxKSwgRSgtMjA5NzE1MiwgMjA5NzE1MCwgMSksCisrICAgIC8qIDMyICovCisrICAgIEUoLTIwOTcxNTIsIDIwOTcxNTAsIDEpLCBFKC0yMDk3MTUyLCAyMDk3MTUwLCAxKSwKKysgICAgRSgtMjA5NzE1MiwgMjA5NzE1MCwgMSksIEUoLTIwOTcxNTIsIDIwOTcxNTAsIDEpLAorKyAgICBFKC0yMDk3MTUyLCAyMDk3MTUwLCAxKSwgRSgtMjA5NzE1MiwgMjA5NzE1MCwgMSksCisrICAgIEUoLTIwOTcxNTIsIDIwOTcxNTAsIDEpLCBFKC0yMDk3MTUyLCAyMDk3MTUwLCAxKSwKKysgICAgRSgtMjA5NzE1MiwgMjA5NzE1MCwgMSksIEUoLTIwOTcxNTIsIDIwOTcxNTAsIDEpLAorKyAgICBFKC0yMDk3MTUyLCAyMDk3MTUwLCAxKSwgRSgtMjA5NzE1MiwgMjA5NzE1MCwgMSksCisrCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICAvKiA0OCAqLworKyAgICBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksCisrCisrICAgIEMoLTMyLCAzMSwgMCwgQ1BfVzMpLCBFKC0xMDQ4NTc2LCAxMDQ4NTc1LCAwKSwKKysKKysgICAgRU1QVFksIEVNUFRZLCBFTVBUWSwKKysgICAgLyogNjQ6IGNzcmZjeiAqLworKyAgICBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICBFKDAsIDY1NTM1LCAwKSwgRSgwLCA2NTUzNSwgMCksCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICBFKC0zMjc2OCwgMzI3NjcsIDApLAorKyAgICAvKiA4MDogTERfU0IyICovCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwKKysKKysgICAgQygwLCA3LCAwLCBMRF9VQjQpLCBFKC0zMjc2OCwgMzI3NjcsIDApLAorKworKyAgICBFTVBUWSwKKysgICAgRU1QVFksIEVNUFRZLAorKworKyAgICBDKDAsIDE0LCAxLCBMRF9TSDQpLCBFKC0zMjc2OCwgMzI3NjcsIDApLAorKworKyAgICBFTVBUWSwgRU1QVFksIEVNUFRZLAorKworKyAgICBDKDAsIDE0LCAxLCBMRF9VSDQpLAorKworKyAgICAvKiA5NjogTERfVUg0ICovCisrICAgIEUoLTMyNzY4LCAzMjc2NywgMCksCisrCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLAorKworKyAgICBDKDAsIDEyNCwgMiwgTERfVzQpLCBFKC0zMjc2OCwgMzI3NjcsIDApLAorKworKyAgICBFKDAsIDEwMjAsIDIpLAkvKiBMRENfRDEgKi8KKysgICAgRU1QVFksIEVNUFRZLAorKyAgICBFKDAsIDEwMjAsIDIpLAkvKiBMRENfVzEgKi8KKysgICAgRU1QVFksIEVNUFRZLAorKyAgICBFKDAsIDE2MzgwLCAyKSwJLyogTERDMF9EICovCisrICAgIEUoMCwgMTYzODAsIDIpLAkvKiBMREMwX1cgKi8KKysgICAgRU1QVFksCisrCisrICAgIC8qIDExMjogTERDTV9EX1BVICovCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksCisrCisrICAgIEMoMCwgNTA4LCAyLCBMRERQQ19FWFQpLCBFKC0zMjc2OCwgMzI3NjcsIDApLAorKworKyAgICBFTVBUWSxFTVBUWSwgRU1QVFksCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwKKysKKysgICAgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwKKysgICAgLyogMTM0OiBNQUNISF9XICovCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksCisrICAgIEUoLTEzMTA3MiwgMTMxMDY4LCAyKSwJLyogTUNBTEwgKi8KKysgICAgRSgwLCAxMDIwLCAyKSwJCS8qIE1GRFIgKi8KKysgICAgRSgwLCAxMDIwLCAyKSwJCS8qIE1GU1IgKi8KKysgICAgRU1QVFksIEVNUFRZLAorKworKyAgICBDKC0xMjgsIDEyNywgMCwgTU9WMiksIEUoLTEwNDg1NzYsIDEwNDg1NzUsIDApLAorKworKyAgICBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwKKysKKysgICAgRSgtMTI4LCAxMjcsIDApLAkJLyogTU9WRVEyICovCisrICAgIEUoLTEyOCwgMTI3LCAwKSwJCS8qIE1PVk5FMiAqLworKyAgICBFKC0xMjgsIDEyNywgMCksCQkvKiBNT1ZDQzIgKi8KKysgICAgRSgtMTI4LCAxMjcsIDApLAkJLyogMTY2OiBNT1ZDUzIgKi8KKysgICAgRSgtMTI4LCAxMjcsIDApLAkJLyogTU9WR0UyICovCisrICAgIEUoLTEyOCwgMTI3LCAwKSwJCS8qIE1PVkxUMiAqLworKyAgICBFKC0xMjgsIDEyNywgMCksCQkvKiBNT1ZNSTIgKi8KKysgICAgRSgtMTI4LCAxMjcsIDApLAkJLyogTU9WUEwyICovCisrICAgIEUoLTEyOCwgMTI3LCAwKSwJCS8qIE1PVkxTMiAqLworKyAgICBFKC0xMjgsIDEyNywgMCksCQkvKiBNT1ZHVDIgKi8KKysgICAgRSgtMTI4LCAxMjcsIDApLAkJLyogTU9WTEUyICovCisrICAgIEUoLTEyOCwgMTI3LCAwKSwJCS8qIE1PVkhJMiAqLworKyAgICBFKC0xMjgsIDEyNywgMCksCQkvKiBNT1ZWUzIgKi8KKysgICAgRSgtMTI4LCAxMjcsIDApLAkJLyogTU9WVkMyICovCisrICAgIEUoLTEyOCwgMTI3LCAwKSwJCS8qIE1PVlFTMiAqLworKyAgICBFKC0xMjgsIDEyNywgMCksCQkvKiBNT1ZBTDIgKi8KKysKKysgICAgRSgwLCAxMDIwLCAyKSwJCS8qIE1URFIgKi8KKysgICAgRSgwLCAxMDIwLCAyKSwJCS8qIE1UU1IgKi8KKysgICAgRU1QVFksCisrICAgIEVNUFRZLAorKyAgICBFKC0xMjgsIDEyNywgMCksCQkvKiBNVUwzICovCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwKKysgICAgLyogMTk4OiBNVkNSX1cgKi8KKysgICAgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICBFKDAsIDY1NTM1LCAwKSwgRSgwLCA2NTUzNSwgMCksCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwKKysgICAgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICAvKiAyMzA6IFBBU1JfSCAqLworKyAgICBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwKKysgICAgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksCisrICAgIC8qIDI2MjogUFVOUENLU0JfSCAqLworKyAgICBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksCisrCisrICAgIEMoLTEwMjQsIDEwMjIsIDEsIFJDQUxMMiksIEUoLTIwOTcxNTIsIDIwOTcxNTAsIDEpLAorKworKyAgICBFTVBUWSwKKysgICAgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksCisrCisrICAgIEMoLTEwMjQsIDEwMjIsIDEsIEJSQUwpLAorKworKyAgICBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICBFKC0xMjgsIDEyNywgMCksCQkvKiBSU1VCMiAqLworKyAgICAvKiAyOTQ6IFNBVEFERF9IICovCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwKKysgICAgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICBFKDAsIDI1NSwgMCksCQkvKiBTTEVFUCAqLworKyAgICBFTVBUWSwgRU1QVFksCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwKKysgICAgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICAvKiAzMjY6IFNUX0IyICovCisrICAgIEVNUFRZLCBFTVBUWSwKKysgICAgQygwLCA3LCAwLCBTVF9CNCksIEUoLTMyNzY4LCAzMjc2NywgMCksCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICBFKC0zMjc2OCwgMzI3NjcsIDApLAorKyAgICBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICBDKDAsIDE0LCAxLCBTVF9INCksIEUoLTMyNzY4LCAzMjc2NywgMCksCisrICAgIEVNUFRZLCBFTVBUWSwKKysgICAgRU1QVFksCisrICAgIEMoMCwgNjAsIDIsIFNUX1c0KSwgRSgtMzI3NjgsIDMyNzY3LCAwKSwKKysgICAgRSgwLCAxMDIwLCAyKSwJLyogU1RDX0QxICovCisrICAgIEVNUFRZLCBFTVBUWSwKKysgICAgRSgwLCAxMDIwLCAyKSwJLyogU1RDX1cxICovCisrICAgIEVNUFRZLCBFTVBUWSwKKysgICAgRSgwLCAxNjM4MCwgMiksCS8qIFNUQzBfRCAqLworKyAgICBFKDAsIDE2MzgwLCAyKSwJLyogU1RDMF9XICovCisrCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwKKysgICAgLyogMzU4OiBTVERTUCAqLworKyAgICBFTVBUWSwgRU1QVFksCisrICAgIEUoMCwgMTAyMCwgMiksCS8qIFNUSEhfVzEgKi8KKysgICAgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICBFKC0zMjc2OCwgMzI3NjcsIDApLAorKyAgICBDKC01MTIsIDUwOCwgMiwgU1VCNCksCisrICAgIEMoLTEyOCwgMTI3LCAwLCBTVUI0KSwgRSgtMTA0ODU3NiwgMTA0ODU3NiwgMCksCisrICAgIC8qIFNVQntjb25kfSAqLworKyAgICBFKC0xMjgsIDEyNywgMCksIEUoLTEyOCwgMTI3LCAwKSwgRSgtMTI4LCAxMjcsIDApLCBFKC0xMjgsIDEyNywgMCksCisrICAgIEUoLTEyOCwgMTI3LCAwKSwgRSgtMTI4LCAxMjcsIDApLCBFKC0xMjgsIDEyNywgMCksIEUoLTEyOCwgMTI3LCAwKSwKKysgICAgRSgtMTI4LCAxMjcsIDApLCBFKC0xMjgsIDEyNywgMCksIEUoLTEyOCwgMTI3LCAwKSwgRSgtMTI4LCAxMjcsIDApLAorKyAgICBFKC0xMjgsIDEyNywgMCksIEUoLTEyOCwgMTI3LCAwKSwgRSgtMTI4LCAxMjcsIDApLCBFKC0xMjgsIDEyNywgMCksCisrICAgIC8qIFNVQkZ7Y29uZH0gKi8KKysgICAgRSgtMTI4LCAxMjcsIDApLCBFKC0xMjgsIDEyNywgMCksIEUoLTEyOCwgMTI3LCAwKSwgRSgtMTI4LCAxMjcsIDApLAorKyAgICBFKC0xMjgsIDEyNywgMCksIEUoLTEyOCwgMTI3LCAwKSwgRSgtMTI4LCAxMjcsIDApLCBFKC0xMjgsIDEyNywgMCksCisrICAgIEUoLTEyOCwgMTI3LCAwKSwgRSgtMTI4LCAxMjcsIDApLCBFKC0xMjgsIDEyNywgMCksIEUoLTEyOCwgMTI3LCAwKSwKKysgICAgRSgtMTI4LCAxMjcsIDApLCBFKC0xMjgsIDEyNywgMCksIEUoLTEyOCwgMTI3LCAwKSwgRSgtMTI4LCAxMjcsIDApLAorKyAgICBFTVBUWSwKKysKKysgICAgLyogNDA2OiBTV0FQX0IgKi8KKysgICAgRU1QVFksIEVNUFRZLCBFTVBUWSwKKysgICAgRSgwLCAyNTUsIDApLAkvKiBTWU5DICovCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICAvKiA0MTQ6IFRTVCAqLworKyAgICBFTVBUWSwgRU1QVFksIEUoLTY1NTM2LCA2NTUzNSwgMiksIEUoLTY1NTM2LCA2NTUzNSwgMiksIEUoLTY1NTM2LCA2NTUzNSwgMiksIEVNUFRZLCBFTVBUWSwgRU1QVFksCisrICAgIC8qIDQyMjogUlNVQntjb25kfSAqLworKyAgICBFKC0xMjgsIDEyNywgMCksIEUoLTEyOCwgMTI3LCAwKSwgRSgtMTI4LCAxMjcsIDApLCBFKC0xMjgsIDEyNywgMCksCisrICAgIEUoLTEyOCwgMTI3LCAwKSwgRSgtMTI4LCAxMjcsIDApLCBFKC0xMjgsIDEyNywgMCksIEUoLTEyOCwgMTI3LCAwKSwKKysgICAgRSgtMTI4LCAxMjcsIDApLCBFKC0xMjgsIDEyNywgMCksIEUoLTEyOCwgMTI3LCAwKSwgRSgtMTI4LCAxMjcsIDApLAorKyAgICBFKC0xMjgsIDEyNywgMCksIEUoLTEyOCwgMTI3LCAwKSwgRSgtMTI4LCAxMjcsIDApLCBFKC0xMjgsIDEyNywgMCksCisrICAgIC8qIDQzNjogQUREe2NvbmR9ICovCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwKKysgICAgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICAvKiA0NTQ6IFNVQntjb25kfSAqLworKyAgICBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwKKysgICAgLyogNDcyOiBBTkR7Y29uZH0gKi8KKysgICAgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksCisrICAgIC8qIDQ4NjogT1J7Y29uZH0gKi8KKysgICAgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksCisrICAgIC8qIDUwMjogRU9Se2NvbmR9ICovCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwKKysgICAgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICAvKiA1MTg6IExELnd7Y29uZH0gKi8KKysgICAgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksCisrICAgIC8qIDUzNDogTEQuc2h7Y29uZH0gKi8KKysgICAgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksCisrICAgIC8qIDU1MDogTEQudWh7Y29uZH0gKi8KKysgICAgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksCisrICAgIC8qIDU2NjogTEQuc2J7Y29uZH0gKi8KKysgICAgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksCisrICAgIC8qIDU4MjogTEQudWJ7Y29uZH0gKi8KKysgICAgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksCisrICAgIC8qIDU5NjogU1Qud3tjb25kfSAqLworKyAgICBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwKKysgICAgLyogNjE0OiBTVC5oe2NvbmR9ICovCisrICAgIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwKKysgICAgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICAvKiA2MzA6IFNULmJ7Y29uZH0gKi8KKysgICAgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLAorKyAgICBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksIEVNUFRZLCBFTVBUWSwgRU1QVFksCisrICAgIC8qIDY0NjogbW92aCAqLworKyAgICBFKDAsIDY1NTM1LCAwKQorKyAgfTsKKysKKysjdW5kZWYgRQorKyN1bmRlZiBDCisrI3VuZGVmIEVNUFRZCisrCisrI2RlZmluZSBBVlIzMl9SU19OT05FICgtMSkKKysKKysjZGVmaW5lIGF2cjMyX3JzX3NpemUoc3RhdGUpIChhdnIzMl9yZWxheF90YWJsZVsoc3RhdGUpXS5sZW5ndGgpCisrI2RlZmluZSBhdnIzMl9yc19hbGlnbihzdGF0ZSkgKGF2cjMyX3JlbGF4X3RhYmxlWyhzdGF0ZSldLmFsaWduKQorKyNkZWZpbmUgcmVsYXhfbW9yZShzdGF0ZSkgKGF2cjMyX3JlbGF4X3RhYmxlWyhzdGF0ZSldLm5leHQpCisrCisrI2RlZmluZSBvcGNfaW5pdGlhbF9zdWJzdGF0ZShvcGMpICgob3BjKS0+aWQpCisrCisrc3RhdGljIGludCBuZWVkX3JlbGF4KGludCBzdWJ0eXBlLCBvZmZzZXRUIGRpc3RhbmNlKQorK3sKKysgIG9mZnNldFQgdXBwZXJfYm91bmQsIGxvd2VyX2JvdW5kOworKworKyAgdXBwZXJfYm91bmQgPSBhdnIzMl9yZWxheF90YWJsZVtzdWJ0eXBlXS51cHBlcl9ib3VuZDsKKysgIGxvd2VyX2JvdW5kID0gYXZyMzJfcmVsYXhfdGFibGVbc3VidHlwZV0ubG93ZXJfYm91bmQ7CisrCisrICBpZiAoZGlzdGFuY2UgJiAoKDEgPDwgYXZyMzJfcnNfYWxpZ24oc3VidHlwZSkpIC0gMSkpCisrICAgIHJldHVybiAxOworKyAgaWYgKChkaXN0YW5jZSA+IHVwcGVyX2JvdW5kKSB8fCAoZGlzdGFuY2UgPCBsb3dlcl9ib3VuZCkpCisrICAgIHJldHVybiAxOworKworKyAgcmV0dXJuIDA7CisrfQorKworK2VudW0geworKyAgTERBX1NVQlRZUEVfTU9WMSwKKysgIExEQV9TVUJUWVBFX01PVjIsCisrICBMREFfU1VCVFlQRV9TVUIsCisrICBMREFfU1VCVFlQRV9MRERQQywKKysgIExEQV9TVUJUWVBFX0xEVywKKysgIExEQV9TVUJUWVBFX0dPVExPQUQsCisrICBMREFfU1VCVFlQRV9HT1RMT0FEX0xBUkdFLAorK307CisrCisrZW51bSB7CisrICBDQUxMX1NVQlRZUEVfUkNBTEwxLAorKyAgQ0FMTF9TVUJUWVBFX1JDQUxMMiwKKysgIENBTExfU1VCVFlQRV9NQ0FMTF9DUCwKKysgIENBTExfU1VCVFlQRV9NQ0FMTF9HT1QsCisrICBDQUxMX1NVQlRZUEVfTUNBTExfTEFSR0UsCisrfTsKKysKKysjZGVmaW5lIExEQV9JTklUSUFMX1NJWkUJKGF2cjMyX3BpYyA/IDQgOiAyKQorKyNkZWZpbmUgQ0FMTF9JTklUSUFMX1NJWkUJMgorKworKyNkZWZpbmUgbmVlZF9yZWxvYyhzeW0sIHNlZywgcGNyZWwpCQkJCQlcCisrICAoIShTX0lTX0RFRklORUQoc3ltKQkJCQkJCQlcCisrICAgICAmJiAoKHBjcmVsICYmIFNfR0VUX1NFR01FTlQoc3ltKSA9PSBzZWcpCQkJCVwKKysJIHx8ICghcGNyZWwgJiYgU19HRVRfU0VHTUVOVChzeW0pID09IGFic29sdXRlX3NlY3Rpb24pKSkJXAorKyAgIHx8IFNfRk9SQ0VfUkVMT0Moc3ltLCAxKSkKKysKKysvKiBSZXR1cm4gYW4gaW5pdGlhbCBndWVzcyBvZiB0aGUgbGVuZ3RoIGJ5IHdoaWNoIGEgZnJhZ21lbnQgbXVzdCBncm93IHRvCisrICAgaG9sZCBhIGJyYW5jaCB0byByZWFjaCBpdHMgZGVzdGluYXRpb24uCisrICAgQWxzbyB1cGRhdGVzIGZyX3R5cGUvZnJfc3VidHlwZSBhcyBuZWNlc3NhcnkuCisrCisrICAgQ2FsbGVkIGp1c3QgYmVmb3JlIGRvaW5nIHJlbGF4YXRpb24uCisrICAgQW55IHN5bWJvbCB0aGF0IGlzIG5vdyB1bmRlZmluZWQgd2lsbCBub3QgYmVjb21lIGRlZmluZWQuCisrICAgVGhlIGd1ZXNzIGZvciBmcl92YXIgaXMgQUNUVUFMTFkgdGhlIGdyb3d0aCBiZXlvbmQgZnJfZml4LgorKyAgIFdoYXRldmVyIHdlIGRvIHRvIGdyb3cgZnJfZml4IG9yIGZyX3ZhciBjb250cmlidXRlcyB0byBvdXIgcmV0dXJuZWQgdmFsdWUuCisrICAgQWx0aG91Z2ggaXQgbWF5IG5vdCBiZSBleHBsaWNpdCBpbiB0aGUgZnJhZywgcHJldGVuZCBmcl92YXIgc3RhcnRzIHdpdGggYQorKyAgIDAgdmFsdWUuICAqLworKworK3N0YXRpYyBpbnQKKythdnIzMl9kZWZhdWx0X2VzdGltYXRlX3NpemVfYmVmb3JlX3JlbGF4IChmcmFnUyAqZnJhZ1AsIHNlZ1Qgc2VnbWVudCkKKyt7CisrICBpbnQgZ3Jvd3RoID0gMDsKKysKKysgIGFzc2VydChmcmFnUCk7CisrICBhc3NlcnQoZnJhZ1AtPmZyX3N5bWJvbCk7CisrCisrICBpZiAoZnJhZ1AtPnRjX2ZyYWdfZGF0YS5mb3JjZV9leHRlbmRlZAorKyAgICAgIHx8IG5lZWRfcmVsb2MoZnJhZ1AtPmZyX3N5bWJvbCwgc2VnbWVudCwgZnJhZ1AtPnRjX2ZyYWdfZGF0YS5wY3JlbCkpCisrICAgIHsKKysgICAgICBpbnQgbGFyZ2VzdF9zdGF0ZSA9IGZyYWdQLT5mcl9zdWJ0eXBlOworKyAgICAgIHdoaWxlIChyZWxheF9tb3JlKGxhcmdlc3Rfc3RhdGUpICE9IEFWUjMyX1JTX05PTkUpCisrCWxhcmdlc3Rfc3RhdGUgPSByZWxheF9tb3JlKGxhcmdlc3Rfc3RhdGUpOworKyAgICAgIGdyb3d0aCA9IGF2cjMyX3JzX3NpemUobGFyZ2VzdF9zdGF0ZSkgLSBmcmFnUC0+ZnJfdmFyOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBncm93dGggPSBhdnIzMl9yc19zaXplKGZyYWdQLT5mcl9zdWJ0eXBlKSAtIGZyYWdQLT5mcl92YXI7CisrICAgIH0KKysKKysgIHByX2RlYnVnKCIlczolZDogbWRfZXN0aW1hdGVfc2l6ZV9iZWZvcmVfcmVsYXg6ICVkXG4iLAorKwkgICBmcmFnUC0+ZnJfZmlsZSwgZnJhZ1AtPmZyX2xpbmUsIGdyb3d0aCk7CisrCisrICByZXR1cm4gZ3Jvd3RoOworK30KKysKKytzdGF0aWMgaW50CisrYXZyMzJfbGRhX2VzdGltYXRlX3NpemVfYmVmb3JlX3JlbGF4KGZyYWdTICpmcmFnUCwgc2VnVCBzZWdtZW50IEFUVFJJQlVURV9VTlVTRUQpCisreworKyAgcmV0dXJuIGZyYWdQLT5mcl92YXIgLSBMREFfSU5JVElBTF9TSVpFOworK30KKysKKytzdGF0aWMgaW50CisrYXZyMzJfY2FsbF9lc3RpbWF0ZV9zaXplX2JlZm9yZV9yZWxheChmcmFnUyAqZnJhZ1AsIHNlZ1Qgc2VnbWVudCBBVFRSSUJVVEVfVU5VU0VEKQorK3sKKysgIHJldHVybiBmcmFnUC0+ZnJfdmFyIC0gQ0FMTF9JTklUSUFMX1NJWkU7CisrfQorKworK3N0YXRpYyBpbnQKKythdnIzMl9jcG9vbF9lc3RpbWF0ZV9zaXplX2JlZm9yZV9yZWxheChmcmFnUyAqZnJhZ1AsCisrCQkJCSAgICAgICBzZWdUIHNlZ21lbnQgQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICByZXR1cm4gZnJhZ1AtPmZyX3ZhcjsKKyt9CisrCisrLyogVGhpcyBtYWNybyBtYXkgYmUgZGVmaW5lZCB0byByZWxheCBhIGZyYWcuIEdBUyB3aWxsIGNhbGwgdGhpcyB3aXRoIHRoZQorKyAqIHNlZ21lbnQsIHRoZSBmcmFnLCBhbmQgdGhlIGNoYW5nZSBpbiBzaXplIG9mIGFsbCBwcmV2aW91cyBmcmFnczsKKysgKiBtZF9yZWxheF9mcmFnIHNob3VsZCByZXR1cm4gdGhlIGNoYW5nZSBpbiBzaXplIG9mIHRoZSBmcmFnLiAqLworK3N0YXRpYyBsb25nCisrYXZyMzJfZGVmYXVsdF9yZWxheF9mcmFnIChzZWdUIHNlZ21lbnQsIGZyYWdTICpmcmFnUCwgbG9uZyBzdHJldGNoKQorK3sKKysgIGludCBzdGF0ZSwgbmV4dF9zdGF0ZTsKKysgIHN5bWJvbFMgKnN5bWJvbFA7CS8qIFRoZSB0YXJnZXQgc3ltYm9sICovCisrICBsb25nIGdyb3d0aCA9IDA7CisrCisrICBzdGF0ZSA9IG5leHRfc3RhdGUgPSBmcmFnUC0+ZnJfc3VidHlwZTsKKysKKysgIHN5bWJvbFAgPSBmcmFnUC0+ZnJfc3ltYm9sOworKworKyAgaWYgKGZyYWdQLT50Y19mcmFnX2RhdGEuZm9yY2VfZXh0ZW5kZWQKKysgICAgICB8fCBuZWVkX3JlbG9jKHN5bWJvbFAsIHNlZ21lbnQsIGZyYWdQLT50Y19mcmFnX2RhdGEucGNyZWwpKQorKyAgICB7CisrICAgICAgLyogU3ltYm9sIG11c3QgYmUgcmVzb2x2ZWQgYnkgdGhlIGxpbmtlci4gRW1pdCB0aGUgbGFyZ2VzdAorKwkgcG9zc2libGUgb3Bjb2RlLiAqLworKyAgICAgIHdoaWxlIChyZWxheF9tb3JlKG5leHRfc3RhdGUpICE9IEFWUjMyX1JTX05PTkUpCisrCW5leHRfc3RhdGUgPSByZWxheF9tb3JlKG5leHRfc3RhdGUpOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBhZGRyZXNzVCBhZGRyZXNzOwkvKiBUaGUgYWRkcmVzcyBvZiBmcmFnUCAqLworKyAgICAgIGFkZHJlc3NUIHRhcmdldDsJLyogVGhlIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCBzeW1ib2wgKi8KKysgICAgICBvZmZzZXRUIGRpc3RhbmNlOwkvKiBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgaW5zbiBhbmQgdGhlIHN5bWJvbCAqLworKyAgICAgIGZyYWdTICpzeW1fZnJhZzsKKysKKysgICAgICBhZGRyZXNzID0gZnJhZ1AtPmZyX2FkZHJlc3M7CisrICAgICAgdGFyZ2V0ID0gZnJhZ1AtPmZyX29mZnNldDsKKysgICAgICBzeW1ib2xQID0gZnJhZ1AtPmZyX3N5bWJvbDsKKysgICAgICBzeW1fZnJhZyA9IHN5bWJvbF9nZXRfZnJhZyhzeW1ib2xQKTsKKysKKysgICAgICBhZGRyZXNzICs9IGZyYWdQLT5mcl9maXggLSBmcmFnUC0+ZnJfdmFyOworKyAgICAgIHRhcmdldCArPSBTX0dFVF9WQUxVRShzeW1ib2xQKTsKKysKKysgICAgICBpZiAoc3RyZXRjaCAhPSAwCisrCSAgJiYgc3ltX2ZyYWctPnJlbGF4X21hcmtlciAhPSBmcmFnUC0+cmVsYXhfbWFya2VyCisrCSAgJiYgU19HRVRfU0VHTUVOVChzeW1ib2xQKSA9PSBzZWdtZW50KQorKwkvKiBpZiBpdCB3YXMgY29ycmVjdGx5IGFsaWduZWQgYmVmb3JlLCBtYWtlIHN1cmUgaXQgc3RheXMgYWxpZ25lZCAqLworKwl0YXJnZXQgKz0gc3RyZXRjaCAmICh+MFVMIDw8IGF2cjMyX3JzX2FsaWduKHN0YXRlKSk7CisrCisrICAgICAgaWYgKGZyYWdQLT50Y19mcmFnX2RhdGEucGNyZWwpCisrCWRpc3RhbmNlID0gdGFyZ2V0IC0gKGFkZHJlc3MgJiAofjBVTCA8PCBhdnIzMl9yc19hbGlnbihzdGF0ZSkpKTsKKysgICAgICBlbHNlCisrCWRpc3RhbmNlID0gdGFyZ2V0OworKworKyAgICAgIHByX2RlYnVnKCIlczolZDogcmVsYXggbW9yZT8gMHgleCAtIDB4JXggPSAweCV4ICglZCksIGFsaWduICVkXG4iLAorKwkgICAgICAgZnJhZ1AtPmZyX2ZpbGUsIGZyYWdQLT5mcl9saW5lLCB0YXJnZXQsIGFkZHJlc3MsCisrCSAgICAgICBkaXN0YW5jZSwgZGlzdGFuY2UsIGF2cjMyX3JzX2FsaWduKHN0YXRlKSk7CisrCisrICAgICAgaWYgKG5lZWRfcmVsYXgoc3RhdGUsIGRpc3RhbmNlKSkKKysJeworKwkgIGlmIChyZWxheF9tb3JlKHN0YXRlKSAhPSBBVlIzMl9SU19OT05FKQorKwkgICAgbmV4dF9zdGF0ZSA9IHJlbGF4X21vcmUoc3RhdGUpOworKwkgIHByX2RlYnVnKCIlczolZDogcmVsYXggbW9yZSAlZCAtPiAlZCAoJWQgLSAlZCwgYWxpZ24gJWQpXG4iLAorKwkJICAgZnJhZ1AtPmZyX2ZpbGUsIGZyYWdQLT5mcl9saW5lLCBzdGF0ZSwgbmV4dF9zdGF0ZSwKKysJCSAgIHRhcmdldCwgYWRkcmVzcywgYXZyMzJfcnNfYWxpZ24oc3RhdGUpKTsKKysJfQorKyAgICB9CisrCisrICBncm93dGggPSBhdnIzMl9yc19zaXplKG5leHRfc3RhdGUpIC0gYXZyMzJfcnNfc2l6ZShzdGF0ZSk7CisrICBmcmFnUC0+ZnJfc3VidHlwZSA9IG5leHRfc3RhdGU7CisrCisrICBwcl9kZWJ1ZygiJXM6JWQ6IG1kX3JlbGF4X2ZyYWc6IGdyb3d0aD0lZCwgc3VidHlwZT0lZCwgb3BjPTB4JTA4bHhcbiIsCisrCSAgIGZyYWdQLT5mcl9maWxlLCBmcmFnUC0+ZnJfbGluZSwgZ3Jvd3RoLCBmcmFnUC0+ZnJfc3VidHlwZSwKKysJICAgYXZyMzJfb3BjX3RhYmxlW25leHRfc3RhdGVdLnZhbHVlKTsKKysKKysgIHJldHVybiBncm93dGg7CisrfQorKworK3N0YXRpYyBsb25nCisrYXZyMzJfbGRhX3JlbGF4X2ZyYWcoc2VnVCBzZWdtZW50LCBmcmFnUyAqZnJhZ1AsIGxvbmcgc3RyZXRjaCkKKyt7CisrICBzdHJ1Y3QgY3Bvb2wgKnBvb2w9IE5VTEw7CisrICB1bnNpZ25lZCBpbnQgZW50cnkgPSAwOworKyAgYWRkcmVzc1QgYWRkcmVzcywgdGFyZ2V0OworKyAgb2Zmc2V0VCBkaXN0YW5jZTsKKysgIHN5bWJvbFMgKnN5bWJvbFA7CisrICBmcmFnUyAqc3ltX2ZyYWc7CisrICBsb25nIG9sZF9zaXplLCBuZXdfc2l6ZTsKKysKKysgIHN5bWJvbFAgPSBmcmFnUC0+ZnJfc3ltYm9sOworKyAgb2xkX3NpemUgPSBmcmFnUC0+ZnJfdmFyOworKyAgaWYgKCFhdnIzMl9waWMpCisrICAgIHsKKysgICAgICBwb29sID0gZnJhZ1AtPnRjX2ZyYWdfZGF0YS5wb29sOworKyAgICAgIGVudHJ5ID0gZnJhZ1AtPnRjX2ZyYWdfZGF0YS5wb29sX2VudHJ5OworKyAgICB9CisrCisrICBhZGRyZXNzID0gZnJhZ1AtPmZyX2FkZHJlc3M7CisrICBhZGRyZXNzICs9IGZyYWdQLT5mcl9maXggLSBMREFfSU5JVElBTF9TSVpFOworKworKyAgaWYgKCFTX0lTX0RFRklORUQoc3ltYm9sUCkgfHwgU19GT1JDRV9SRUxPQyhzeW1ib2xQLCAxKSkKKysgICAgZ290byByZWxheF9tYXg7CisrCisrICB0YXJnZXQgPSBmcmFnUC0+ZnJfb2Zmc2V0OworKyAgc3ltX2ZyYWcgPSBzeW1ib2xfZ2V0X2ZyYWcoc3ltYm9sUCk7CisrICB0YXJnZXQgKz0gU19HRVRfVkFMVUUoc3ltYm9sUCk7CisrCisrICBpZiAoc3ltX2ZyYWctPnJlbGF4X21hcmtlciAhPSBmcmFnUC0+cmVsYXhfbWFya2VyCisrICAgICAgJiYgU19HRVRfU0VHTUVOVChzeW1ib2xQKSA9PSBzZWdtZW50KQorKyAgICB0YXJnZXQgKz0gc3RyZXRjaDsKKysKKysgIGRpc3RhbmNlID0gdGFyZ2V0IC0gYWRkcmVzczsKKysKKysgIHByX2RlYnVnKCJsZGFfcmVsYXhfZnJhZzogdGFyZ2V0OiAlZCwgYWRkcmVzczogJWQsIHZhcjogJWRcbiIsCisrCSAgIHRhcmdldCwgYWRkcmVzcywgZnJhZ1AtPmZyX3Zhcik7CisrCisrICBpZiAoIWF2cjMyX3BpYyAmJiBTX0dFVF9TRUdNRU5UKHN5bWJvbFApID09IGFic29sdXRlX3NlY3Rpb24KKysgICAgICAmJiB0YXJnZXQgPD0gMTI3ICYmIChvZmZzZXRUKXRhcmdldCA+PSAtMTI4KQorKyAgICB7CisrICAgICAgaWYgKGZyYWdQLT5mcl9zdWJ0eXBlID09IExEQV9TVUJUWVBFX0xERFBDCisrCSAgfHwgZnJhZ1AtPmZyX3N1YnR5cGUgPT0gTERBX1NVQlRZUEVfTERXKQorKwlwb29sLT5saXRlcmFsc1tlbnRyeV0ucmVmY291bnQtLTsKKysgICAgICBuZXdfc2l6ZSA9IDI7CisrICAgICAgZnJhZ1AtPmZyX3N1YnR5cGUgPSBMREFfU1VCVFlQRV9NT1YxOworKyAgICB9CisrICBlbHNlIGlmICghYXZyMzJfcGljICYmIFNfR0VUX1NFR01FTlQoc3ltYm9sUCkgPT0gYWJzb2x1dGVfc2VjdGlvbgorKwkgICAmJiB0YXJnZXQgPD0gMTA0ODU3NSAmJiAob2Zmc2V0VCl0YXJnZXQgPj0gLTEwNDg1NzYpCisrICAgIHsKKysgICAgICBpZiAoZnJhZ1AtPmZyX3N1YnR5cGUgPT0gTERBX1NVQlRZUEVfTEREUEMKKysJICB8fCBmcmFnUC0+ZnJfc3VidHlwZSA9PSBMREFfU1VCVFlQRV9MRFcpCisrCXBvb2wtPmxpdGVyYWxzW2VudHJ5XS5yZWZjb3VudC0tOworKyAgICAgIG5ld19zaXplID0gNDsKKysgICAgICBmcmFnUC0+ZnJfc3VidHlwZSA9IExEQV9TVUJUWVBFX01PVjI7CisrICAgIH0KKysgIGVsc2UgaWYgKCFsaW5rcmVsYXggJiYgU19HRVRfU0VHTUVOVChzeW1ib2xQKSA9PSBzZWdtZW50CisrCSAgIC8qIHRoZSBmaWVsZCB3aWxsIGJlIG5lZ2F0ZWQsIHNvIHRoaXMgaXMgcmVhbGx5IC0oLTMyNzY4KQorKwkgICAgICBhbmQgLSgzMjc2NykgKi8KKysJICAgJiYgZGlzdGFuY2UgPD0gMzI3NjggJiYgZGlzdGFuY2UgPj0gLTMyNzY3KQorKyAgICB7CisrICAgICAgaWYgKCFhdnIzMl9waWMKKysJICAmJiAoZnJhZ1AtPmZyX3N1YnR5cGUgPT0gTERBX1NVQlRZUEVfTEREUEMKKysJICAgICAgfHwgZnJhZ1AtPmZyX3N1YnR5cGUgPT0gTERBX1NVQlRZUEVfTERXKSkKKysJcG9vbC0+bGl0ZXJhbHNbZW50cnldLnJlZmNvdW50LS07CisrICAgICAgbmV3X3NpemUgPSA0OworKyAgICAgIGZyYWdQLT5mcl9zdWJ0eXBlID0gTERBX1NVQlRZUEVfU1VCOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgcmVsYXhfbWF4OgorKyAgICAgIGlmIChhdnIzMl9waWMpCisrCXsKKysJICBpZiAobGlua3JlbGF4KQorKwkgICAgeworKwkgICAgICBuZXdfc2l6ZSA9IDg7CisrCSAgICAgIGZyYWdQLT5mcl9zdWJ0eXBlID0gTERBX1NVQlRZUEVfR09UTE9BRF9MQVJHRTsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIG5ld19zaXplID0gNDsKKysJICAgICAgZnJhZ1AtPmZyX3N1YnR5cGUgPSBMREFfU1VCVFlQRV9HT1RMT0FEOworKwkgICAgfQorKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgaWYgKGZyYWdQLT5mcl9zdWJ0eXBlICE9IExEQV9TVUJUWVBFX0xERFBDCisrCSAgICAgICYmIGZyYWdQLT5mcl9zdWJ0eXBlICE9IExEQV9TVUJUWVBFX0xEVykKKysJICAgIHBvb2wtPmxpdGVyYWxzW2VudHJ5XS5yZWZjb3VudCsrOworKworKwkgIHN5bV9mcmFnID0gc3ltYm9sX2dldF9mcmFnKHBvb2wtPnN5bWJvbCk7CisrCSAgdGFyZ2V0ID0gKHN5bV9mcmFnLT5mcl9hZGRyZXNzICsgc3ltX2ZyYWctPmZyX2ZpeAorKwkJICAgICsgcG9vbC0+cGFkZGluZyArIHBvb2wtPmxpdGVyYWxzW2VudHJ5XS5vZmZzZXQpOworKworKwkgIHByX2RlYnVnKCJjcG9vbCBzeW0gYWRkcmVzczogMHglbHhcbiIsCisrCQkgICBzeW1fZnJhZy0+ZnJfYWRkcmVzcyArIHN5bV9mcmFnLT5mcl9maXgpOworKworKwkgIGtub3cocG9vbC0+c2VjdGlvbiA9PSBzZWdtZW50KTsKKysKKysJICBpZiAoc3ltX2ZyYWctPnJlbGF4X21hcmtlciAhPSBmcmFnUC0+cmVsYXhfbWFya2VyKQorKwkgICAgdGFyZ2V0ICs9IHN0cmV0Y2g7CisrCisrCSAgZGlzdGFuY2UgPSB0YXJnZXQgLSBhZGRyZXNzOworKwkgIGlmIChkaXN0YW5jZSA8PSA1MDggJiYgZGlzdGFuY2UgPj0gMCkKKysJICAgIHsKKysJICAgICAgbmV3X3NpemUgPSAyOworKwkgICAgICBmcmFnUC0+ZnJfc3VidHlwZSA9IExEQV9TVUJUWVBFX0xERFBDOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgbmV3X3NpemUgPSA0OworKwkgICAgICBmcmFnUC0+ZnJfc3VidHlwZSA9IExEQV9TVUJUWVBFX0xEVzsKKysJICAgIH0KKysKKysJICBwcl9kZWJ1ZygibGRhX3JlbGF4X2ZyYWcgKGNwb29sKTogdGFyZ2V0PTB4JWx4LCBhZGRyZXNzPTB4JWx4LCByZWZjb3VudD0lZFxuIiwKKysJCSAgIHRhcmdldCwgYWRkcmVzcywgcG9vbC0+bGl0ZXJhbHNbZW50cnldLnJlZmNvdW50KTsKKysJfQorKyAgICB9CisrCisrICBmcmFnUC0+ZnJfdmFyID0gbmV3X3NpemU7CisrCisrICBwcl9kZWJ1ZygiJXM6JWQ6IGxkYTogcmVsYXggcGFzcyBkb25lLiBzdWJ0eXBlOiAlZCwgZ3Jvd3RoOiAlbGRcbiIsCisrCSAgIGZyYWdQLT5mcl9maWxlLCBmcmFnUC0+ZnJfbGluZSwKKysJICAgZnJhZ1AtPmZyX3N1YnR5cGUsIG5ld19zaXplIC0gb2xkX3NpemUpOworKworKyAgcmV0dXJuIG5ld19zaXplIC0gb2xkX3NpemU7CisrfQorKworK3N0YXRpYyBsb25nCisrYXZyMzJfY2FsbF9yZWxheF9mcmFnKHNlZ1Qgc2VnbWVudCwgZnJhZ1MgKmZyYWdQLCBsb25nIHN0cmV0Y2gpCisreworKyAgc3RydWN0IGNwb29sICpwb29sID0gTlVMTDsKKysgIHVuc2lnbmVkIGludCBlbnRyeSA9IDA7CisrICBhZGRyZXNzVCBhZGRyZXNzLCB0YXJnZXQ7CisrICBvZmZzZXRUIGRpc3RhbmNlOworKyAgc3ltYm9sUyAqc3ltYm9sUDsKKysgIGZyYWdTICpzeW1fZnJhZzsKKysgIGxvbmcgb2xkX3NpemUsIG5ld19zaXplOworKworKyAgc3ltYm9sUCA9IGZyYWdQLT5mcl9zeW1ib2w7CisrICBvbGRfc2l6ZSA9IGZyYWdQLT5mcl92YXI7CisrICBpZiAoIWF2cjMyX3BpYykKKysgICAgeworKyAgICAgIHBvb2wgPSBmcmFnUC0+dGNfZnJhZ19kYXRhLnBvb2w7CisrICAgICAgZW50cnkgPSBmcmFnUC0+dGNfZnJhZ19kYXRhLnBvb2xfZW50cnk7CisrICAgIH0KKysKKysgIGFkZHJlc3MgPSBmcmFnUC0+ZnJfYWRkcmVzczsKKysgIGFkZHJlc3MgKz0gZnJhZ1AtPmZyX2ZpeCAtIENBTExfSU5JVElBTF9TSVpFOworKworKyAgaWYgKG5lZWRfcmVsb2Moc3ltYm9sUCwgc2VnbWVudCwgMSkpCisrICAgIHsKKysgICAgICBwcl9kZWJ1ZygiY2FsbDogbXVzdCBlbWl0IHJlbG9jXG4iKTsKKysgICAgICBnb3RvIHJlbGF4X21heDsKKysgICAgfQorKworKyAgdGFyZ2V0ID0gZnJhZ1AtPmZyX29mZnNldDsKKysgIHN5bV9mcmFnID0gc3ltYm9sX2dldF9mcmFnKHN5bWJvbFApOworKyAgdGFyZ2V0ICs9IFNfR0VUX1ZBTFVFKHN5bWJvbFApOworKworKyAgaWYgKHN5bV9mcmFnLT5yZWxheF9tYXJrZXIgIT0gZnJhZ1AtPnJlbGF4X21hcmtlcgorKyAgICAgICYmIFNfR0VUX1NFR01FTlQoc3ltYm9sUCkgPT0gc2VnbWVudCkKKysgICAgdGFyZ2V0ICs9IHN0cmV0Y2g7CisrCisrICBkaXN0YW5jZSA9IHRhcmdldCAtIGFkZHJlc3M7CisrCisrICBpZiAoZGlzdGFuY2UgPD0gMTAyMiAmJiBkaXN0YW5jZSA+PSAtMTAyNCkKKysgICAgeworKyAgICAgIHByX2RlYnVnKCJjYWxsOiBkaXN0YW5jZSBpcyAlZCwgZW1pdHRpbmcgc2hvcnQgcmNhbGxcbiIsIGRpc3RhbmNlKTsKKysgICAgICBpZiAoIWF2cjMyX3BpYyAmJiBmcmFnUC0+ZnJfc3VidHlwZSA9PSBDQUxMX1NVQlRZUEVfTUNBTExfQ1ApCisrCXBvb2wtPmxpdGVyYWxzW2VudHJ5XS5yZWZjb3VudC0tOworKyAgICAgIG5ld19zaXplID0gMjsKKysgICAgICBmcmFnUC0+ZnJfc3VidHlwZSA9IENBTExfU1VCVFlQRV9SQ0FMTDE7CisrICAgIH0KKysgIGVsc2UgaWYgKGRpc3RhbmNlIDw9IDIwOTcxNTAgJiYgZGlzdGFuY2UgPj0gLTIwOTcxNTIpCisrICAgIHsKKysgICAgICBwcl9kZWJ1ZygiY2FsbDogZGlzdGFuY2UgaXMgJWQsIGVtaXR0aW5nIGxvbmcgcmNhbGxcbiIsIGRpc3RhbmNlKTsKKysgICAgICBpZiAoIWF2cjMyX3BpYyAmJiBmcmFnUC0+ZnJfc3VidHlwZSA9PSBDQUxMX1NVQlRZUEVfTUNBTExfQ1ApCisrCXBvb2wtPmxpdGVyYWxzW2VudHJ5XS5yZWZjb3VudC0tOworKyAgICAgIG5ld19zaXplID0gNDsKKysgICAgICBmcmFnUC0+ZnJfc3VidHlwZSA9IENBTExfU1VCVFlQRV9SQ0FMTDI7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIHByX2RlYnVnKCJjYWxsOiBkaXN0YW5jZSAlZCB0b28gZmFyLCBlbWl0dGluZyBzb21ldGhpbmcgYmlnXG4iLCBkaXN0YW5jZSk7CisrCisrICAgIHJlbGF4X21heDoKKysgICAgICBpZiAoYXZyMzJfcGljKQorKwl7CisrCSAgaWYgKGxpbmtyZWxheCkKKysJICAgIHsKKysJICAgICAgbmV3X3NpemUgPSAxMDsKKysJICAgICAgZnJhZ1AtPmZyX3N1YnR5cGUgPSBDQUxMX1NVQlRZUEVfTUNBTExfTEFSR0U7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBuZXdfc2l6ZSA9IDQ7CisrCSAgICAgIGZyYWdQLT5mcl9zdWJ0eXBlID0gQ0FMTF9TVUJUWVBFX01DQUxMX0dPVDsKKysJICAgIH0KKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGlmIChmcmFnUC0+ZnJfc3VidHlwZSAhPSBDQUxMX1NVQlRZUEVfTUNBTExfQ1ApCisrCSAgICBwb29sLT5saXRlcmFsc1tlbnRyeV0ucmVmY291bnQrKzsKKysKKysJICBuZXdfc2l6ZSA9IDQ7CisrCSAgZnJhZ1AtPmZyX3N1YnR5cGUgPSBDQUxMX1NVQlRZUEVfTUNBTExfQ1A7CisrCX0KKysgICAgfQorKworKyAgZnJhZ1AtPmZyX3ZhciA9IG5ld19zaXplOworKworKyAgcHJfZGVidWcoIiVzOiVkOiBjYWxsOiByZWxheCBwYXNzIGRvbmUsIGdyb3d0aDogJWQsIGZyX3ZhcjogJWRcbiIsCisrCSAgIGZyYWdQLT5mcl9maWxlLCBmcmFnUC0+ZnJfbGluZSwKKysJICAgbmV3X3NpemUgLSBvbGRfc2l6ZSwgZnJhZ1AtPmZyX3Zhcik7CisrCisrICByZXR1cm4gbmV3X3NpemUgLSBvbGRfc2l6ZTsKKyt9CisrCisrc3RhdGljIGxvbmcKKythdnIzMl9jcG9vbF9yZWxheF9mcmFnKHNlZ1Qgc2VnbWVudCBBVFRSSUJVVEVfVU5VU0VELAorKwkJICAgICAgIGZyYWdTICpmcmFnUCwKKysJCSAgICAgICBsb25nIHN0cmV0Y2ggQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICBzdHJ1Y3QgY3Bvb2wgKnBvb2w7CisrICBhZGRyZXNzVCBhZGRyZXNzOworKyAgbG9uZyBvbGRfc2l6ZSwgbmV3X3NpemU7CisrICB1bnNpZ25lZCBpbnQgZW50cnk7CisrCisrICBwb29sID0gZnJhZ1AtPnRjX2ZyYWdfZGF0YS5wb29sOworKyAgYWRkcmVzcyA9IGZyYWdQLT5mcl9hZGRyZXNzICsgZnJhZ1AtPmZyX2ZpeDsKKysgIG9sZF9zaXplID0gZnJhZ1AtPmZyX3ZhcjsKKysgIG5ld19zaXplID0gMDsKKysKKysgIGZvciAoZW50cnkgPSAwOyBlbnRyeSA8IHBvb2wtPm5leHRfZnJlZV9lbnRyeTsgZW50cnkrKykKKysgICAgeworKyAgICAgIGlmIChwb29sLT5saXRlcmFsc1tlbnRyeV0ucmVmY291bnQgPiAwKQorKwl7CisrCSAgcG9vbC0+bGl0ZXJhbHNbZW50cnldLm9mZnNldCA9IG5ld19zaXplOworKwkgIG5ld19zaXplICs9IDQ7CisrCX0KKysgICAgfQorKworKyAgZnJhZ1AtPmZyX3ZhciA9IG5ld19zaXplOworKworKyAgcmV0dXJuIG5ld19zaXplIC0gb2xkX3NpemU7CisrfQorKworKy8qICpmcmFnUCBoYXMgYmVlbiByZWxheGVkIHRvIGl0cyBmaW5hbCBzaXplLCBhbmQgbm93IG5lZWRzIHRvIGhhdmUKKysgICB0aGUgYnl0ZXMgaW5zaWRlIGl0IG1vZGlmaWVkIHRvIGNvbmZvcm0gdG8gdGhlIG5ldyBzaXplLgorKworKyAgIENhbGxlZCBhZnRlciByZWxheGF0aW9uIGlzIGZpbmlzaGVkLgorKyAgIGZyYWdQLT5mcl90eXBlID09IHJzX21hY2hpbmVfZGVwZW5kZW50LgorKyAgIGZyYWdQLT5mcl9zdWJ0eXBlIGlzIHRoZSBzdWJ0eXBlIG9mIHdoYXQgdGhlIGFkZHJlc3MgcmVsYXhlZCB0by4gICovCisrCisrc3RhdGljIHZvaWQKKythdnIzMl9kZWZhdWx0X2NvbnZlcnRfZnJhZyAoYmZkICphYmZkIEFUVFJJQlVURV9VTlVTRUQsCisrCQkJICAgIHNlZ1Qgc2VnbWVudCBBVFRSSUJVVEVfVU5VU0VELAorKwkJCSAgICBmcmFnUyAqZnJhZ1ApCisreworKyAgY29uc3Qgc3RydWN0IGF2cjMyX29wY29kZSAqb3BjOworKyAgY29uc3Qgc3RydWN0IGF2cjMyX2lmaWVsZCAqaWZpZWxkOworKyAgYmZkX3JlbG9jX2NvZGVfcmVhbF90eXBlIHJfdHlwZTsKKysgIHN5bWJvbFMgKnN5bWJvbFA7CisrICBmaXhTICpmaXhQOworKyAgYmZkX3ZtYSB2YWx1ZTsKKysgIGludCBzdWJ0eXBlOworKworKyAgb3BjID0gJmF2cjMyX29wY190YWJsZVtmcmFnUC0+ZnJfc3VidHlwZV07CisrICBpZmllbGQgPSBvcGMtPmZpZWxkc1tvcGMtPnZhcl9maWVsZF07CisrICBzeW1ib2xQID0gZnJhZ1AtPmZyX3N5bWJvbDsKKysgIHN1YnR5cGUgPSBmcmFnUC0+ZnJfc3VidHlwZTsKKysgIHJfdHlwZSA9IG9wYy0+cmVsb2NfdHlwZTsKKysKKysgIC8qIENsZWFyIHRoZSBvcGNvZGUgYml0cyBhbmQgdGhlIGJpdHMgYmVsb25naW5nIHRvIHRoZSByZWxheGVkCisrICAgICBmaWVsZC4gIFdlIGFzc3VtZSBhbGwgb3RoZXIgZmllbGRzIHN0YXkgdGhlIHNhbWUuICAqLworKyAgdmFsdWUgPSBiZmRfZ2V0YjMyKGZyYWdQLT5mcl9vcGNvZGUpOworKyAgdmFsdWUgJj0gfihvcGMtPm1hc2sgfCBpZmllbGQtPm1hc2spOworKworKyAgLyogSW5zZXJ0IHRoZSBuZXcgb3Bjb2RlICovCisrICB2YWx1ZSB8PSBvcGMtPnZhbHVlOworKyAgYmZkX3B1dGIzMih2YWx1ZSwgZnJhZ1AtPmZyX29wY29kZSk7CisrCisrICBmcmFnUC0+ZnJfZml4ICs9IG9wYy0+c2l6ZSAtIGZyYWdQLT5mcl92YXI7CisrCisrICBpZiAoZnJhZ1AtPnRjX2ZyYWdfZGF0YS5yZWxvY19pbmZvICE9IEFWUjMyX09QSU5GT19OT05FKQorKyAgICB7CisrICAgICAgc3dpdGNoIChmcmFnUC0+dGNfZnJhZ19kYXRhLnJlbG9jX2luZm8pCisrCXsKKysJY2FzZSBBVlIzMl9PUElORk9fSEk6CisrCSAgcl90eXBlID0gQkZEX1JFTE9DX0hJMTY7CisrCSAgYnJlYWs7CisrCWNhc2UgQVZSMzJfT1BJTkZPX0xPOgorKwkgIHJfdHlwZSA9IEJGRF9SRUxPQ19MTzE2OworKwkgIGJyZWFrOworKwljYXNlIEFWUjMyX09QSU5GT19HT1Q6CisrCSAgc3dpdGNoIChyX3R5cGUpCisrCSAgICB7CisrCSAgICBjYXNlIEJGRF9SRUxPQ19BVlIzMl8xOFdfUENSRUw6CisrCSAgICAgIHJfdHlwZSA9IEJGRF9SRUxPQ19BVlIzMl9HT1QxOFNXOworKwkgICAgICBicmVhazsKKysJICAgIGNhc2UgQkZEX1JFTE9DX0FWUjMyXzE2UzoKKysJICAgICAgcl90eXBlID0gQkZEX1JFTE9DX0FWUjMyX0dPVDE2UzsKKysJICAgICAgYnJlYWs7CisrCSAgICBkZWZhdWx0OgorKwkgICAgICBCQURfQ0FTRShyX3R5cGUpOworKwkgICAgICBicmVhazsKKysJICAgIH0KKysJICBicmVhazsKKysJZGVmYXVsdDoKKysJICBCQURfQ0FTRShmcmFnUC0+dGNfZnJhZ19kYXRhLnJlbG9jX2luZm8pOworKwkgIGJyZWFrOworKwl9CisrICAgIH0KKysKKysgIHByX2RlYnVnKCIlczolZDogY29udmVydF9mcmFnOiBuZXcgJXMgZml4dXBcbiIsCisrCSAgIGZyYWdQLT5mcl9maWxlLCBmcmFnUC0+ZnJfbGluZSwKKysJICAgYmZkX2dldF9yZWxvY19jb2RlX25hbWUocl90eXBlKSk7CisrCisrI2lmIDEKKysgIGZpeFAgPSBmaXhfbmV3X2V4cChmcmFnUCwgZnJhZ1AtPmZyX2ZpeCAtIG9wYy0+c2l6ZSwgb3BjLT5zaXplLAorKwkJICAgICAmZnJhZ1AtPnRjX2ZyYWdfZGF0YS5leHAsCisrCQkgICAgIGZyYWdQLT50Y19mcmFnX2RhdGEucGNyZWwsIHJfdHlwZSk7CisrI2Vsc2UKKysgIGZpeFAgPSBmaXhfbmV3KGZyYWdQLCBmcmFnUC0+ZnJfZml4IC0gb3BjLT5zaXplLCBvcGMtPnNpemUsIHN5bWJvbFAsCisrCQkgZnJhZ1AtPmZyX29mZnNldCwgZnJhZ1AtPnRjX2ZyYWdfZGF0YS5wY3JlbCwgcl90eXBlKTsKKysjZW5kaWYKKysKKysgIC8qIFJldmVydCBmaXhfbmV3IGJyYWluIGRhbWFnZS4gImRvdF92YWx1ZSIgaXMgdGhlIHZhbHVlIG9mIFBDIGF0CisrICAgICB0aGUgcG9pbnQgb2YgdGhlIGZpeHVwLCByZWxhdGl2ZSB0byB0aGUgZnJhZyBhZGRyZXNzLiAgZml4X25ldygpCisrICAgICBhbmQgZnJpZW5kcyB0aGluayB0aGV5IGFyZSBvbmx5IGJlaW5nIGNhbGxlZCBkdXJpbmcgdGhlIGFzc2VtYmx5CisrICAgICBwYXNzLCBub3QgZHVyaW5nIHJlbGF4YXRpb24gb3Igc2ltaWxhciwgc28gZnhfZG90X3ZhbHVlLCBmeF9maWxlCisrICAgICBhbmQgZnhfbGluZSBhcmUgYWxsIGluaXRpYWxpemVkIHRvIHRoZSB3cm9uZyB2YWx1ZS4gIEJ1dCB3ZSBkb24ndAorKyAgICAga25vdyB0aGUgc2l6ZSBvZiB0aGUgZml4dXAgdW50aWwgbm93LCBzbyB3ZSByZWFsbHkgY2FuJ3QgbGl2ZSB1cAorKyAgICAgdG8gdGhlIGFzc3VtcHRpb25zIHRoZXNlIGZ1bmN0aW9ucyBtYWtlIGFib3V0IHRoZSB0YXJnZXQuICBXaGF0CisrICAgICBkbyB0aGVzZSBmdW5jdGlvbnMgdGhpbmsgdGhlICJ3aGVyZSIgYW5kICJmcmFnIiBhcmd1bWVudCBtZWFuCisrICAgICBhbnl3YXk/ICAqLworKyAgZml4UC0+ZnhfZG90X3ZhbHVlID0gZnJhZ1AtPmZyX2ZpeCAtIG9wYy0+c2l6ZTsKKysgIGZpeFAtPmZ4X2ZpbGUgPSBmcmFnUC0+ZnJfZmlsZTsKKysgIGZpeFAtPmZ4X2xpbmUgPSBmcmFnUC0+ZnJfbGluZTsKKysKKysgIGZpeFAtPnRjX2ZpeF9kYXRhLmlmaWVsZCA9IGlmaWVsZDsKKysgIGZpeFAtPnRjX2ZpeF9kYXRhLmFsaWduID0gYXZyMzJfcnNfYWxpZ24oc3VidHlwZSk7CisrICBmaXhQLT50Y19maXhfZGF0YS5taW4gPSBhdnIzMl9yZWxheF90YWJsZVtzdWJ0eXBlXS5sb3dlcl9ib3VuZDsKKysgIGZpeFAtPnRjX2ZpeF9kYXRhLm1heCA9IGF2cjMyX3JlbGF4X3RhYmxlW3N1YnR5cGVdLnVwcGVyX2JvdW5kOworK30KKysKKytzdGF0aWMgdm9pZAorK2F2cjMyX2xkYV9jb252ZXJ0X2ZyYWcoYmZkICphYmZkIEFUVFJJQlVURV9VTlVTRUQsCisrCQkgICAgICAgc2VnVCBzZWdtZW50IEFUVFJJQlVURV9VTlVTRUQsCisrCQkgICAgICAgZnJhZ1MgKmZyYWdQKQorK3sKKysgIGNvbnN0IHN0cnVjdCBhdnIzMl9vcGNvZGUgKm9wYzsKKysgIGNvbnN0IHN0cnVjdCBhdnIzMl9pZmllbGQgKmlmaWVsZDsKKysgIGJmZF9yZWxvY19jb2RlX3JlYWxfdHlwZSByX3R5cGU7CisrICBleHByZXNzaW9uUyBleHA7CisrICBzdHJ1Y3QgY3Bvb2wgKnBvb2w7CisrICBmaXhTICpmaXhQOworKyAgYmZkX3ZtYSB2YWx1ZTsKKysgIGludCByZWdpZCwgcGNyZWwgPSAwLCBhbGlnbiA9IDA7CisrICBjaGFyICpwOworKworKyAgcl90eXBlID0gQkZEX1JFTE9DX05PTkU7CisrICByZWdpZCA9IGZyYWdQLT50Y19mcmFnX2RhdGEucmVsb2NfaW5mbzsKKysgIHAgPSBmcmFnUC0+ZnJfb3Bjb2RlOworKyAgZXhwLlhfYWRkX3N5bWJvbCA9IGZyYWdQLT5mcl9zeW1ib2w7CisrICBleHAuWF9hZGRfbnVtYmVyID0gZnJhZ1AtPmZyX29mZnNldDsKKysgIGV4cC5YX29wID0gT19zeW1ib2w7CisrCisrICBwcl9kZWJ1ZygiJXM6JWQ6IGxkYV9jb252ZXJ0X2ZyYWcsIHN1YnR5cGU6ICVkLCBmaXg6ICVkLCB2YXI6ICVkLCByZWdpZDogJWRcbiIsCisrCSAgIGZyYWdQLT5mcl9maWxlLCBmcmFnUC0+ZnJfbGluZSwKKysJICAgZnJhZ1AtPmZyX3N1YnR5cGUsIGZyYWdQLT5mcl9maXgsIGZyYWdQLT5mcl92YXIsIHJlZ2lkKTsKKysKKysgIHN3aXRjaCAoZnJhZ1AtPmZyX3N1YnR5cGUpCisrICAgIHsKKysgICAgY2FzZSBMREFfU1VCVFlQRV9NT1YxOgorKyAgICAgIG9wYyA9ICZhdnIzMl9vcGNfdGFibGVbQVZSMzJfT1BDX01PVjFdOworKyAgICAgIG9wYy0+ZmllbGRzWzBdLT5pbnNlcnQob3BjLT5maWVsZHNbMF0sIHAsIHJlZ2lkKTsKKysgICAgICBpZmllbGQgPSBvcGMtPmZpZWxkc1sxXTsKKysgICAgICByX3R5cGUgPSBvcGMtPnJlbG9jX3R5cGU7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgTERBX1NVQlRZUEVfTU9WMjoKKysgICAgICBvcGMgPSAmYXZyMzJfb3BjX3RhYmxlW0FWUjMyX09QQ19NT1YyXTsKKysgICAgICBvcGMtPmZpZWxkc1swXS0+aW5zZXJ0KG9wYy0+ZmllbGRzWzBdLCBwLCByZWdpZCk7CisrICAgICAgaWZpZWxkID0gb3BjLT5maWVsZHNbMV07CisrICAgICAgcl90eXBlID0gb3BjLT5yZWxvY190eXBlOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIExEQV9TVUJUWVBFX1NVQjoKKysgICAgICBvcGMgPSAmYXZyMzJfb3BjX3RhYmxlW0FWUjMyX09QQ19TVUI1XTsKKysgICAgICBvcGMtPmZpZWxkc1swXS0+aW5zZXJ0KG9wYy0+ZmllbGRzWzBdLCBwLCByZWdpZCk7CisrICAgICAgb3BjLT5maWVsZHNbMV0tPmluc2VydChvcGMtPmZpZWxkc1sxXSwgcCwgQVZSMzJfUkVHX1BDKTsKKysgICAgICBpZmllbGQgPSBvcGMtPmZpZWxkc1syXTsKKysgICAgICByX3R5cGUgPSBCRkRfUkVMT0NfQVZSMzJfMTZOX1BDUkVMOworKworKyAgICAgIC8qIFByZXRlbmQgdGhhdCBTVUI1IGlzbid0IGEgIm5lZ2F0ZWQiIHBjcmVsIGV4cHJlc3Npb24gZm9yIG5vdy4KKysJIFdlJ2xsIGhhdmUgdG8gZml4IGl0IHVwIGxhdGVyIHdoZW4gd2Uga25vdyB3aGV0aGVyIHRvCisrCSBnZW5lcmF0ZSBhIHJlbG9jIGZvciBpdCAoaW4gd2hpY2ggY2FzZSB0aGUgbGlua2VyIHdpbGwgbmVnYXRlCisrCSBpdCwgc28gd2Ugc2hvdWxkbid0KS4gKi8KKysgICAgICBwY3JlbCA9IDE7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgTERBX1NVQlRZUEVfTEREUEM6CisrICAgICAgb3BjID0gJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfTEREUENdOworKyAgICAgIGFsaWduID0gMjsKKysgICAgICByX3R5cGUgPSBCRkRfUkVMT0NfQVZSMzJfOVdfQ1A7CisrICAgICAgZ290byBjcG9vbF9jb21tb247CisrICAgIGNhc2UgTERBX1NVQlRZUEVfTERXOgorKyAgICAgIG9wYyA9ICZhdnIzMl9vcGNfdGFibGVbQVZSMzJfT1BDX0xERFBDX0VYVF07CisrICAgICAgcl90eXBlID0gQkZEX1JFTE9DX0FWUjMyXzE2X0NQOworKyAgICBjcG9vbF9jb21tb246CisrICAgICAgb3BjLT5maWVsZHNbMF0tPmluc2VydChvcGMtPmZpZWxkc1swXSwgcCwgcmVnaWQpOworKyAgICAgIGlmaWVsZCA9IG9wYy0+ZmllbGRzWzFdOworKyAgICAgIHBvb2wgPSBmcmFnUC0+dGNfZnJhZ19kYXRhLnBvb2w7CisrICAgICAgZXhwLlhfYWRkX3N5bWJvbCA9IHBvb2wtPnN5bWJvbDsKKysgICAgICBleHAuWF9hZGRfbnVtYmVyID0gcG9vbC0+bGl0ZXJhbHNbZnJhZ1AtPnRjX2ZyYWdfZGF0YS5wb29sX2VudHJ5XS5vZmZzZXQ7CisrICAgICAgcGNyZWwgPSAxOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIExEQV9TVUJUWVBFX0dPVExPQURfTEFSR0U6CisrICAgICAgLyogbGQudyBSZCwgcjZbUmQgPDwgMl0gKGxhc3QpICovCisrICAgICAgb3BjID0gJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfTERfVzVdOworKyAgICAgIGJmZF9wdXRiMzIob3BjLT52YWx1ZSwgcCArIDQpOworKyAgICAgIG9wYy0+ZmllbGRzWzBdLT5pbnNlcnQob3BjLT5maWVsZHNbMF0sIHAgKyA0LCByZWdpZCk7CisrICAgICAgb3BjLT5maWVsZHNbMV0tPmluc2VydChvcGMtPmZpZWxkc1sxXSwgcCArIDQsIDYpOworKyAgICAgIG9wYy0+ZmllbGRzWzJdLT5pbnNlcnQob3BjLT5maWVsZHNbMl0sIHAgKyA0LCByZWdpZCk7CisrICAgICAgb3BjLT5maWVsZHNbM10tPmluc2VydChvcGMtPmZpZWxkc1szXSwgcCArIDQsIDIpOworKworKyAgICAgIC8qIG1vdiBSZCwgKGdvdF9vZmZzZXQgLyA0KSAqLworKyAgICAgIG9wYyA9ICZhdnIzMl9vcGNfdGFibGVbQVZSMzJfT1BDX01PVjJdOworKyAgICAgIG9wYy0+ZmllbGRzWzBdLT5pbnNlcnQob3BjLT5maWVsZHNbMF0sIHAsIHJlZ2lkKTsKKysgICAgICBpZmllbGQgPSBvcGMtPmZpZWxkc1sxXTsKKysgICAgICByX3R5cGUgPSBCRkRfUkVMT0NfQVZSMzJfTERBX0dPVDsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBMREFfU1VCVFlQRV9HT1RMT0FEOgorKyAgICAgIG9wYyA9ICZhdnIzMl9vcGNfdGFibGVbQVZSMzJfT1BDX0xEX1c0XTsKKysgICAgICBvcGMtPmZpZWxkc1swXS0+aW5zZXJ0KG9wYy0+ZmllbGRzWzBdLCBwLCByZWdpZCk7CisrICAgICAgb3BjLT5maWVsZHNbMV0tPmluc2VydChvcGMtPmZpZWxkc1sxXSwgcCwgNik7CisrICAgICAgaWZpZWxkID0gb3BjLT5maWVsZHNbMl07CisrICAgICAgaWYgKHJfdHlwZSA9PSBCRkRfUkVMT0NfTk9ORSkKKysJcl90eXBlID0gQkZEX1JFTE9DX0FWUjMyX0dPVDE2UzsKKysgICAgICBicmVhazsKKysgICAgZGVmYXVsdDoKKysgICAgICBCQURfQ0FTRShmcmFnUC0+ZnJfc3VidHlwZSk7CisrICAgIH0KKysKKysgIHZhbHVlID0gYmZkX2dldGIzMihwKTsKKysgIHZhbHVlICY9IH4ob3BjLT5tYXNrIHwgaWZpZWxkLT5tYXNrKTsKKysgIHZhbHVlIHw9IG9wYy0+dmFsdWU7CisrICBiZmRfcHV0YjMyKHZhbHVlLCBwKTsKKysKKysgIGZyYWdQLT5mcl9maXggKz0gZnJhZ1AtPmZyX3ZhciAtIExEQV9JTklUSUFMX1NJWkU7CisrCisrICBpZiAoZnJhZ1AtPmZyX25leHQKKysgICAgICAmJiAoKG9mZnNldFQpKGZyYWdQLT5mcl9uZXh0LT5mcl9hZGRyZXNzIC0gZnJhZ1AtPmZyX2FkZHJlc3MpCisrCSAgIT0gZnJhZ1AtPmZyX2ZpeCkpCisrICAgIHsKKysgICAgICBmcHJpbnRmKHN0ZGVyciwgIkxEQSBmcmFnOiBmcl9maXggaXMgd3JvbmchIGZyYWdQLT5mcl92YXIgPSAlbGQsIHJfdHlwZSA9ICVzXG4iLAorKwkgICAgICBmcmFnUC0+ZnJfdmFyLCBiZmRfZ2V0X3JlbG9jX2NvZGVfbmFtZShyX3R5cGUpKTsKKysgICAgICBhYm9ydCgpOworKyAgICB9CisrCisrICBmaXhQID0gZml4X25ld19leHAoZnJhZ1AsIGZyYWdQLT5mcl9maXggLSBmcmFnUC0+ZnJfdmFyLCBmcmFnUC0+ZnJfdmFyLAorKwkJICAgICAmZXhwLCBwY3JlbCwgcl90eXBlKTsKKysKKysgIC8qIFJldmVydCBmaXhfbmV3IGJyYWluIGRhbWFnZS4gImRvdF92YWx1ZSIgaXMgdGhlIHZhbHVlIG9mIFBDIGF0CisrICAgICB0aGUgcG9pbnQgb2YgdGhlIGZpeHVwLCByZWxhdGl2ZSB0byB0aGUgZnJhZyBhZGRyZXNzLiAgZml4X25ldygpCisrICAgICBhbmQgZnJpZW5kcyB0aGluayB0aGV5IGFyZSBvbmx5IGJlaW5nIGNhbGxlZCBkdXJpbmcgdGhlIGFzc2VtYmx5CisrICAgICBwYXNzLCBub3QgZHVyaW5nIHJlbGF4YXRpb24gb3Igc2ltaWxhciwgc28gZnhfZG90X3ZhbHVlLCBmeF9maWxlCisrICAgICBhbmQgZnhfbGluZSBhcmUgYWxsIGluaXRpYWxpemVkIHRvIHRoZSB3cm9uZyB2YWx1ZS4gIEJ1dCB3ZSBkb24ndAorKyAgICAga25vdyB0aGUgc2l6ZSBvZiB0aGUgZml4dXAgdW50aWwgbm93LCBzbyB3ZSByZWFsbHkgY2FuJ3QgbGl2ZSB1cAorKyAgICAgdG8gdGhlIGFzc3VtcHRpb25zIHRoZXNlIGZ1bmN0aW9ucyBtYWtlIGFib3V0IHRoZSB0YXJnZXQuICBXaGF0CisrICAgICBkbyB0aGVzZSBmdW5jdGlvbnMgdGhpbmsgdGhlICJ3aGVyZSIgYW5kICJmcmFnIiBhcmd1bWVudCBtZWFuCisrICAgICBhbnl3YXk/ICAqLworKyAgZml4UC0+ZnhfZG90X3ZhbHVlID0gZnJhZ1AtPmZyX2ZpeCAtIG9wYy0+c2l6ZTsKKysgIGZpeFAtPmZ4X2ZpbGUgPSBmcmFnUC0+ZnJfZmlsZTsKKysgIGZpeFAtPmZ4X2xpbmUgPSBmcmFnUC0+ZnJfbGluZTsKKysKKysgIGZpeFAtPnRjX2ZpeF9kYXRhLmlmaWVsZCA9IGlmaWVsZDsKKysgIGZpeFAtPnRjX2ZpeF9kYXRhLmFsaWduID0gYWxpZ247CisrICAvKiB0aGVzZSBhcmUgb25seSB1c2VkIGlmIHRoZSBmaXh1cCBjYW4gYWN0dWFsbHkgYmUgcmVzb2x2ZWQgKi8KKysgIGZpeFAtPnRjX2ZpeF9kYXRhLm1pbiA9IC0zMjc2ODsKKysgIGZpeFAtPnRjX2ZpeF9kYXRhLm1heCA9IDMyNzY3OworK30KKysKKytzdGF0aWMgdm9pZAorK2F2cjMyX2NhbGxfY29udmVydF9mcmFnKGJmZCAqYWJmZCBBVFRSSUJVVEVfVU5VU0VELAorKwkJICAgICAgIHNlZ1Qgc2VnbWVudCBBVFRSSUJVVEVfVU5VU0VELAorKwkJICAgICAgIGZyYWdTICpmcmFnUCkKKyt7CisrICBjb25zdCBzdHJ1Y3QgYXZyMzJfb3Bjb2RlICpvcGMgPSBOVUxMOworKyAgY29uc3Qgc3RydWN0IGF2cjMyX2lmaWVsZCAqaWZpZWxkOworKyAgYmZkX3JlbG9jX2NvZGVfcmVhbF90eXBlIHJfdHlwZTsKKysgIHN5bWJvbFMgKnN5bWJvbDsKKysgIG9mZnNldFQgb2Zmc2V0OworKyAgZml4UyAqZml4UDsKKysgIGJmZF92bWEgdmFsdWU7CisrICBpbnQgcGNyZWwgPSAwLCBhbGlnbiA9IDA7CisrICBjaGFyICpwOworKworKyAgc3ltYm9sID0gZnJhZ1AtPmZyX3N5bWJvbDsKKysgIG9mZnNldCA9IGZyYWdQLT5mcl9vZmZzZXQ7CisrICByX3R5cGUgPSBCRkRfUkVMT0NfTk9ORTsKKysgIHAgPSBmcmFnUC0+ZnJfb3Bjb2RlOworKworKyAgcHJfZGVidWcoIiVzOiVkOiBjYWxsX2NvbnZlcnRfZnJhZywgc3VidHlwZTogJWQsIGZpeDogJWQsIHZhcjogJWRcbiIsCisrCSAgIGZyYWdQLT5mcl9maWxlLCBmcmFnUC0+ZnJfbGluZSwKKysJICAgZnJhZ1AtPmZyX3N1YnR5cGUsIGZyYWdQLT5mcl9maXgsIGZyYWdQLT5mcl92YXIpOworKworKyAgc3dpdGNoIChmcmFnUC0+ZnJfc3VidHlwZSkKKysgICAgeworKyAgICBjYXNlIENBTExfU1VCVFlQRV9SQ0FMTDE6CisrICAgICAgb3BjID0gJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfUkNBTEwxXTsKKysgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKysgICAgY2FzZSBDQUxMX1NVQlRZUEVfUkNBTEwyOgorKyAgICAgIGlmICghb3BjKQorKwlvcGMgPSAmYXZyMzJfb3BjX3RhYmxlW0FWUjMyX09QQ19SQ0FMTDJdOworKyAgICAgIGlmaWVsZCA9IG9wYy0+ZmllbGRzWzBdOworKyAgICAgIHJfdHlwZSA9IG9wYy0+cmVsb2NfdHlwZTsKKysgICAgICBwY3JlbCA9IDE7CisrICAgICAgYWxpZ24gPSAxOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIENBTExfU1VCVFlQRV9NQ0FMTF9DUDoKKysgICAgICBvcGMgPSAmYXZyMzJfb3BjX3RhYmxlW0FWUjMyX09QQ19NQ0FMTF07CisrICAgICAgb3BjLT5maWVsZHNbMF0tPmluc2VydChvcGMtPmZpZWxkc1swXSwgcCwgQVZSMzJfUkVHX1BDKTsKKysgICAgICBpZmllbGQgPSBvcGMtPmZpZWxkc1sxXTsKKysgICAgICByX3R5cGUgPSBCRkRfUkVMT0NfQVZSMzJfQ1BDQUxMOworKyAgICAgIHN5bWJvbCA9IGZyYWdQLT50Y19mcmFnX2RhdGEucG9vbC0+c3ltYm9sOworKyAgICAgIG9mZnNldCA9IGZyYWdQLT50Y19mcmFnX2RhdGEucG9vbC0+bGl0ZXJhbHNbZnJhZ1AtPnRjX2ZyYWdfZGF0YS5wb29sX2VudHJ5XS5vZmZzZXQ7CisrICAgICAgYXNzZXJ0KGZyYWdQLT50Y19mcmFnX2RhdGEucG9vbC0+bGl0ZXJhbHNbZnJhZ1AtPnRjX2ZyYWdfZGF0YS5wb29sX2VudHJ5XS5yZWZjb3VudCA+IDApOworKyAgICAgIHBjcmVsID0gMTsKKysgICAgICBhbGlnbiA9IDI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQ0FMTF9TVUJUWVBFX01DQUxMX0dPVDoKKysgICAgICBvcGMgPSAmYXZyMzJfb3BjX3RhYmxlW0FWUjMyX09QQ19NQ0FMTF07CisrICAgICAgb3BjLT5maWVsZHNbMF0tPmluc2VydChvcGMtPmZpZWxkc1swXSwgcCwgNik7CisrICAgICAgaWZpZWxkID0gb3BjLT5maWVsZHNbMV07CisrICAgICAgcl90eXBlID0gQkZEX1JFTE9DX0FWUjMyX0dPVDE4U1c7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQ0FMTF9TVUJUWVBFX01DQUxMX0xBUkdFOgorKyAgICAgIGFzc2VydChmcmFnUC0+ZnJfdmFyID09IDEwKTsKKysgICAgICAvKiBsZC53IGxyLCByNltsciA8PCAyXSAqLworKyAgICAgIG9wYyA9ICZhdnIzMl9vcGNfdGFibGVbQVZSMzJfT1BDX0xEX1c1XTsKKysgICAgICBiZmRfcHV0YjMyKG9wYy0+dmFsdWUsIHAgKyA0KTsKKysgICAgICBvcGMtPmZpZWxkc1swXS0+aW5zZXJ0KG9wYy0+ZmllbGRzWzBdLCBwICsgNCwgQVZSMzJfUkVHX0xSKTsKKysgICAgICBvcGMtPmZpZWxkc1sxXS0+aW5zZXJ0KG9wYy0+ZmllbGRzWzFdLCBwICsgNCwgNik7CisrICAgICAgb3BjLT5maWVsZHNbMl0tPmluc2VydChvcGMtPmZpZWxkc1syXSwgcCArIDQsIEFWUjMyX1JFR19MUik7CisrICAgICAgb3BjLT5maWVsZHNbM10tPmluc2VydChvcGMtPmZpZWxkc1szXSwgcCArIDQsIDIpOworKworKyAgICAgIC8qIGljYWxsIGxyICovCisrICAgICAgb3BjID0gJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfSUNBTExdOworKyAgICAgIGJmZF9wdXRiMTYob3BjLT52YWx1ZSA+PiAxNiwgcCArIDgpOworKyAgICAgIG9wYy0+ZmllbGRzWzBdLT5pbnNlcnQob3BjLT5maWVsZHNbMF0sIHAgKyA4LCBBVlIzMl9SRUdfTFIpOworKworKyAgICAgIC8qIG1vdiBsciwgKGdvdF9vZmZzZXQgLyA0KSAqLworKyAgICAgIG9wYyA9ICZhdnIzMl9vcGNfdGFibGVbQVZSMzJfT1BDX01PVjJdOworKyAgICAgIG9wYy0+ZmllbGRzWzBdLT5pbnNlcnQob3BjLT5maWVsZHNbMF0sIHAsIEFWUjMyX1JFR19MUik7CisrICAgICAgaWZpZWxkID0gb3BjLT5maWVsZHNbMV07CisrICAgICAgcl90eXBlID0gQkZEX1JFTE9DX0FWUjMyX0dPVENBTEw7CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgQkFEX0NBU0UoZnJhZ1AtPmZyX3N1YnR5cGUpOworKyAgICB9CisrCisrICAvKiBJbnNlcnQgdGhlIG9wY29kZSBhbmQgY2xlYXIgdGhlIHZhcmlhYmxlIGlmaWVsZCAqLworKyAgdmFsdWUgPSBiZmRfZ2V0YjMyKHApOworKyAgdmFsdWUgJj0gfihvcGMtPm1hc2sgfCBpZmllbGQtPm1hc2spOworKyAgdmFsdWUgfD0gb3BjLT52YWx1ZTsKKysgIGJmZF9wdXRiMzIodmFsdWUsIHApOworKworKyAgZnJhZ1AtPmZyX2ZpeCArPSBmcmFnUC0+ZnJfdmFyIC0gQ0FMTF9JTklUSUFMX1NJWkU7CisrCisrICBpZiAoZnJhZ1AtPmZyX25leHQKKysgICAgICAmJiAoKG9mZnNldFQpKGZyYWdQLT5mcl9uZXh0LT5mcl9hZGRyZXNzIC0gZnJhZ1AtPmZyX2FkZHJlc3MpCisrCSAgIT0gZnJhZ1AtPmZyX2ZpeCkpCisrICAgIHsKKysgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBmcl9maXggJWx1IGlzIHdyb25nISBmcl92YXI9JWx1LCByX3R5cGU9JXNcbiIsCisrCSAgICAgIGZyYWdQLT5mcl9maWxlLCBmcmFnUC0+ZnJfbGluZSwKKysJICAgICAgZnJhZ1AtPmZyX2ZpeCwgZnJhZ1AtPmZyX3ZhciwgYmZkX2dldF9yZWxvY19jb2RlX25hbWUocl90eXBlKSk7CisrICAgICAgZnByaW50ZihzdGRlcnIsICJmcl9maXggc2hvdWxkIGJlICVsZC4gbmV4dCBmcmFnIGlzICVzOiVkXG4iLAorKwkgICAgICAob2Zmc2V0VCkoZnJhZ1AtPmZyX25leHQtPmZyX2FkZHJlc3MgLSBmcmFnUC0+ZnJfYWRkcmVzcyksCisrCSAgICAgIGZyYWdQLT5mcl9uZXh0LT5mcl9maWxlLCBmcmFnUC0+ZnJfbmV4dC0+ZnJfbGluZSk7CisrICAgIH0KKysKKysgIGZpeFAgPSBmaXhfbmV3KGZyYWdQLCBmcmFnUC0+ZnJfZml4IC0gZnJhZ1AtPmZyX3ZhciwgZnJhZ1AtPmZyX3ZhciwKKysJCSBzeW1ib2wsIG9mZnNldCwgcGNyZWwsIHJfdHlwZSk7CisrCisrICAvKiBSZXZlcnQgZml4X25ldyBicmFpbiBkYW1hZ2UuICJkb3RfdmFsdWUiIGlzIHRoZSB2YWx1ZSBvZiBQQyBhdAorKyAgICAgdGhlIHBvaW50IG9mIHRoZSBmaXh1cCwgcmVsYXRpdmUgdG8gdGhlIGZyYWcgYWRkcmVzcy4gIGZpeF9uZXcoKQorKyAgICAgYW5kIGZyaWVuZHMgdGhpbmsgdGhleSBhcmUgb25seSBiZWluZyBjYWxsZWQgZHVyaW5nIHRoZSBhc3NlbWJseQorKyAgICAgcGFzcywgbm90IGR1cmluZyByZWxheGF0aW9uIG9yIHNpbWlsYXIsIHNvIGZ4X2RvdF92YWx1ZSwgZnhfZmlsZQorKyAgICAgYW5kIGZ4X2xpbmUgYXJlIGFsbCBpbml0aWFsaXplZCB0byB0aGUgd3JvbmcgdmFsdWUuICBCdXQgd2UgZG9uJ3QKKysgICAgIGtub3cgdGhlIHNpemUgb2YgdGhlIGZpeHVwIHVudGlsIG5vdywgc28gd2UgcmVhbGx5IGNhbid0IGxpdmUgdXAKKysgICAgIHRvIHRoZSBhc3N1bXB0aW9ucyB0aGVzZSBmdW5jdGlvbnMgbWFrZSBhYm91dCB0aGUgdGFyZ2V0LiAgV2hhdAorKyAgICAgZG8gdGhlc2UgZnVuY3Rpb25zIHRoaW5rIHRoZSAid2hlcmUiIGFuZCAiZnJhZyIgYXJndW1lbnQgbWVhbgorKyAgICAgYW55d2F5PyAgKi8KKysgIGZpeFAtPmZ4X2RvdF92YWx1ZSA9IGZyYWdQLT5mcl9maXggLSBvcGMtPnNpemU7CisrICBmaXhQLT5meF9maWxlID0gZnJhZ1AtPmZyX2ZpbGU7CisrICBmaXhQLT5meF9saW5lID0gZnJhZ1AtPmZyX2xpbmU7CisrCisrICBmaXhQLT50Y19maXhfZGF0YS5pZmllbGQgPSBpZmllbGQ7CisrICBmaXhQLT50Y19maXhfZGF0YS5hbGlnbiA9IGFsaWduOworKyAgLyogdGhlc2UgYXJlIG9ubHkgdXNlZCBpZiB0aGUgZml4dXAgY2FuIGFjdHVhbGx5IGJlIHJlc29sdmVkICovCisrICBmaXhQLT50Y19maXhfZGF0YS5taW4gPSAtMjA5NzE1MjsKKysgIGZpeFAtPnRjX2ZpeF9kYXRhLm1heCA9IDIwOTcxNTA7CisrfQorKworK3N0YXRpYyB2b2lkCisrYXZyMzJfY3Bvb2xfY29udmVydF9mcmFnKGJmZCAqYWJmZCBBVFRSSUJVVEVfVU5VU0VELAorKwkJCSBzZWdUIHNlZ21lbnQgQVRUUklCVVRFX1VOVVNFRCwKKysJCQkgZnJhZ1MgKmZyYWdQKQorK3sKKysgIHN0cnVjdCBjcG9vbCAqcG9vbDsKKysgIGFkZHJlc3NUIGFkZHJlc3M7CisrICB1bnNpZ25lZCBpbnQgZW50cnk7CisrICBjaGFyICpwOworKyAgY2hhciBzeW1fbmFtZVsyMF07CisrCisrICAvKiBEaWQgd2UgZ2V0IHJpZCBvZiB0aGUgZnJhZyBhbHRvZ2V0aGVyPyAqLworKyAgaWYgKCFmcmFnUC0+ZnJfdmFyKQorKyAgICByZXR1cm47CisrCisrICBwb29sID0gZnJhZ1AtPnRjX2ZyYWdfZGF0YS5wb29sOworKyAgYWRkcmVzcyA9IGZyYWdQLT5mcl9hZGRyZXNzICsgZnJhZ1AtPmZyX2ZpeDsKKysgIHAgPSBmcmFnUC0+ZnJfbGl0ZXJhbCArIGZyYWdQLT5mcl9maXg7CisrCisrICBzcHJpbnRmKHN5bV9uYW1lLCAiJCRjcF9cMDAyJXgiLCBwb29sLT5pZCk7CisrICBzeW1ib2xfbG9jYXRlKHBvb2wtPnN5bWJvbCwgc3ltX25hbWUsIHBvb2wtPnNlY3Rpb24sIGZyYWdQLT5mcl9maXgsIGZyYWdQKTsKKysgIHN5bWJvbF90YWJsZV9pbnNlcnQocG9vbC0+c3ltYm9sKTsKKysKKysgIGZvciAoZW50cnkgPSAwOyBlbnRyeSA8IHBvb2wtPm5leHRfZnJlZV9lbnRyeTsgZW50cnkrKykKKysgICAgeworKyAgICAgIGlmIChwb29sLT5saXRlcmFsc1tlbnRyeV0ucmVmY291bnQgPiAwKQorKwl7CisrCSAgZml4X25ld19leHAoZnJhZ1AsIGZyYWdQLT5mcl9maXgsIDQsICZwb29sLT5saXRlcmFsc1tlbnRyeV0uZXhwLAorKwkJICAgICAgRkFMU0UsIEJGRF9SRUxPQ19BVlIzMl8zMl9DUEVOVCk7CisrCSAgZnJhZ1AtPmZyX2ZpeCArPSA0OworKwl9CisrICAgIH0KKyt9CisrCisrc3RhdGljIHN0cnVjdCBhdnIzMl9yZWxheGVyIGF2cjMyX2RlZmF1bHRfcmVsYXhlciA9IHsKKysgIC5lc3RpbWF0ZV9zaXplCT0gYXZyMzJfZGVmYXVsdF9lc3RpbWF0ZV9zaXplX2JlZm9yZV9yZWxheCwKKysgIC5yZWxheF9mcmFnCQk9IGF2cjMyX2RlZmF1bHRfcmVsYXhfZnJhZywKKysgIC5jb252ZXJ0X2ZyYWcJCT0gYXZyMzJfZGVmYXVsdF9jb252ZXJ0X2ZyYWcsCisrfTsKKytzdGF0aWMgc3RydWN0IGF2cjMyX3JlbGF4ZXIgYXZyMzJfbGRhX3JlbGF4ZXIgPSB7CisrICAuZXN0aW1hdGVfc2l6ZQk9IGF2cjMyX2xkYV9lc3RpbWF0ZV9zaXplX2JlZm9yZV9yZWxheCwKKysgIC5yZWxheF9mcmFnCQk9IGF2cjMyX2xkYV9yZWxheF9mcmFnLAorKyAgLmNvbnZlcnRfZnJhZwkJPSBhdnIzMl9sZGFfY29udmVydF9mcmFnLAorK307Cisrc3RhdGljIHN0cnVjdCBhdnIzMl9yZWxheGVyIGF2cjMyX2NhbGxfcmVsYXhlciA9IHsKKysgIC5lc3RpbWF0ZV9zaXplCT0gYXZyMzJfY2FsbF9lc3RpbWF0ZV9zaXplX2JlZm9yZV9yZWxheCwKKysgIC5yZWxheF9mcmFnCQk9IGF2cjMyX2NhbGxfcmVsYXhfZnJhZywKKysgIC5jb252ZXJ0X2ZyYWcJCT0gYXZyMzJfY2FsbF9jb252ZXJ0X2ZyYWcsCisrfTsKKytzdGF0aWMgc3RydWN0IGF2cjMyX3JlbGF4ZXIgYXZyMzJfY3Bvb2xfcmVsYXhlciA9IHsKKysgIC5lc3RpbWF0ZV9zaXplCT0gYXZyMzJfY3Bvb2xfZXN0aW1hdGVfc2l6ZV9iZWZvcmVfcmVsYXgsCisrICAucmVsYXhfZnJhZwkJPSBhdnIzMl9jcG9vbF9yZWxheF9mcmFnLAorKyAgLmNvbnZlcnRfZnJhZwkJPSBhdnIzMl9jcG9vbF9jb252ZXJ0X2ZyYWcsCisrfTsKKysKKytzdGF0aWMgdm9pZCBzX2Nwb29sKGludCBhcmcgQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICBzdHJ1Y3QgY3Bvb2wgKnBvb2w7CisrICB1bnNpZ25lZCBpbnQgbWF4X3NpemU7CisrICBjaGFyICpidWY7CisrCisrICBwb29sID0gZmluZF9jcG9vbChub3dfc2VnLCBub3dfc3Vic2VnKTsKKysgIGlmICghcG9vbCB8fCAhcG9vbC0+c3ltYm9sIHx8IHBvb2wtPm5leHRfZnJlZV9lbnRyeSA9PSAwKQorKyAgICByZXR1cm47CisrCisrICAvKiBNYWtlIHN1cmUgdGhlIGNvbnN0YW50IHBvb2wgaXMgcHJvcGVybHkgYWxpZ25lZCAqLworKyAgZnJhZ19hbGlnbl9jb2RlKDIsIDApOworKyAgaWYgKGJmZF9nZXRfc2VjdGlvbl9hbGlnbm1lbnQoc3Rkb3V0cHV0LCBwb29sLT5zZWN0aW9uKSA8IDIpCisrICAgIGJmZF9zZXRfc2VjdGlvbl9hbGlnbm1lbnQoc3Rkb3V0cHV0LCBwb29sLT5zZWN0aW9uLCAyKTsKKysKKysgIC8qIEFzc3VtZSBub25lIG9mIHRoZSBlbnRyaWVzIGFyZSBkaXNjYXJkZWQsIGFuZCB0aGF0IHdlIG5lZWQgdGhlCisrICAgICBtYXhpbXVtIGFtb3VudCBvZiBhbGlnbm1lbnQuICBCdXQgd2UncmUgbm90IGdvaW5nIHRvIGFsbG9jYXRlCisrICAgICBhbnl0aGluZyB1cCBmcm9udC4gKi8KKysgIG1heF9zaXplID0gcG9vbC0+bmV4dF9mcmVlX2VudHJ5ICogNCArIDI7CisrICBmcmFnX2dyb3cobWF4X3NpemUpOworKyAgYnVmID0gZnJhZ19tb3JlKDApOworKworKyAgZnJhZ19ub3ctPnRjX2ZyYWdfZGF0YS5yZWxheGVyID0gJmF2cjMyX2Nwb29sX3JlbGF4ZXI7CisrICBmcmFnX25vdy0+dGNfZnJhZ19kYXRhLnBvb2wgPSBwb29sOworKworKyAgc3ltYm9sX3NldF9mcmFnKHBvb2wtPnN5bWJvbCwgZnJhZ19ub3cpOworKworKyAgLyogQXNzdW1lIHplcm8gaW5pdGlhbCBzaXplLCBhbGxvd2luZyBvdGhlciByZWxheGVycyB0byBiZQorKyAgICAgb3B0aW1pc3RpYyBhYm91dCB0aGluZ3MuICAqLworKyAgZnJhZ192YXIocnNfbWFjaGluZV9kZXBlbmRlbnQsIG1heF9zaXplLCAwLAorKwkgICAwLCBwb29sLT5zeW1ib2wsIDAsIE5VTEwpOworKworKyAgLyogTWFyayB0aGUgcG9vbCBhcyBlbXB0eS4gICovCisrICBwb29sLT51c2VkID0gMTsKKyt9CisrCisrLyogVGhlIGxvY2F0aW9uIGZyb20gd2hpY2ggYSBQQyByZWxhdGl2ZSBqdW1wIHNob3VsZCBiZSBjYWxjdWxhdGVkLAorKyAgIGdpdmVuIGEgUEMgcmVsYXRpdmUgcmVsb2MuICAqLworKworK2xvbmcKKyttZF9wY3JlbF9mcm9tX3NlY3Rpb24gKGZpeFMgKmZpeFAsIHNlZ1Qgc2VjKQorK3sKKysgIHByX2RlYnVnKCJwY3JlbF9mcm9tX3NlY3Rpb24sIGZ4X29mZnNldCA9ICVkXG4iLCBmaXhQLT5meF9vZmZzZXQpOworKworKyAgaWYgKGZpeFAtPmZ4X2FkZHN5ICE9IE5VTEwKKysgICAgICAmJiAoISBTX0lTX0RFRklORUQgKGZpeFAtPmZ4X2FkZHN5KQorKyAgICAgICAgICB8fCBTX0dFVF9TRUdNRU5UIChmaXhQLT5meF9hZGRzeSkgIT0gc2VjCisrCSAgfHwgU19GT1JDRV9SRUxPQyhmaXhQLT5meF9hZGRzeSwgMSkpKQorKyAgICB7CisrICAgICAgcHJfZGVidWcoIlVua25vd24gcGNyZWwgc3ltYm9sOiAlc1xuIiwgU19HRVRfTkFNRShmaXhQLT5meF9hZGRzeSkpOworKworKyAgICAgIC8qIFRoZSBzeW1ib2wgaXMgdW5kZWZpbmVkIChvciBpcyBkZWZpbmVkIGJ1dCBub3QgaW4gdGhpcyBzZWN0aW9uKS4KKysJIExldCB0aGUgbGlua2VyIGZpZ3VyZSBpdCBvdXQuICAqLworKyAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICBwcl9kZWJ1ZygicGNyZWwgZnJvbSAleCArICV4LCBzeW1ib2w6ICVzICgleClcbiIsCisrCSAgIGZpeFAtPmZ4X2ZyYWctPmZyX2FkZHJlc3MsIGZpeFAtPmZ4X3doZXJlLAorKwkgICBmaXhQLT5meF9hZGRzeT9TX0dFVF9OQU1FKGZpeFAtPmZ4X2FkZHN5KToiKG51bGwpIiwKKysJICAgZml4UC0+ZnhfYWRkc3k/U19HRVRfVkFMVUUoZml4UC0+ZnhfYWRkc3kpOjApOworKworKyAgcmV0dXJuICgoZml4UC0+ZnhfZnJhZy0+ZnJfYWRkcmVzcyArIGZpeFAtPmZ4X3doZXJlKQorKwkgICYgKH4wVUwgPDwgZml4UC0+dGNfZml4X2RhdGEuYWxpZ24pKTsKKyt9CisrCisrdmFsdWVUCisrbWRfc2VjdGlvbl9hbGlnbiAoc2VnVCBzZWdtZW50LCB2YWx1ZVQgc2l6ZSkKKyt7CisrICBpbnQgYWxpZ24gPSBiZmRfZ2V0X3NlY3Rpb25fYWxpZ25tZW50IChzdGRvdXRwdXQsIHNlZ21lbnQpOworKyAgcmV0dXJuICgoc2l6ZSArICgxIDw8IGFsaWduKSAtIDEpICYgKC0xIDw8IGFsaWduKSk7CisrfQorKworK3N0YXRpYyBpbnQgc3ludGF4X21hdGNoZXMoY29uc3Qgc3RydWN0IGF2cjMyX3N5bnRheCAqc3ludGF4LAorKwkJCSAgY2hhciAqc3RyKQorK3sKKysgIGludCBpOworKworKyAgcHJfZGVidWcoInN5bnRheCAlZCBtYXRjaGVzIGAlcyc/XG4iLCBzeW50YXgtPmlkLCBzdHIpOworKworKyAgaWYgKHN5bnRheC0+bnJfb3BlcmFuZHMgPCAwKQorKyAgICB7CisrICAgICAgc3RydWN0IGF2cjMyX29wZXJhbmQgKm9wOworKyAgICAgIGludCBvcHR5cGU7CisrCisrICAgICAgZm9yIChpID0gMDsgaSA8ICgtc3ludGF4LT5ucl9vcGVyYW5kcyAtIDEpOyBpKyspCisrCXsKKysJICBjaGFyICpwOworKwkgIGNoYXIgYzsKKysKKysJICBvcHR5cGUgPSBzeW50YXgtPm9wZXJhbmRbaV07CisrCSAgYXNzZXJ0KG9wdHlwZSA8IEFWUjMyX05SX09QRVJBTkRTKTsKKysJICBvcCA9ICZhdnIzMl9vcGVyYW5kX3RhYmxlW29wdHlwZV07CisrCisrCSAgZm9yIChwID0gc3RyOyAqcDsgcCsrKQorKwkgICAgaWYgKCpwID09ICcsJykKKysJICAgICAgYnJlYWs7CisrCisrCSAgaWYgKHAgPT0gc3RyKQorKwkgICAgcmV0dXJuIDA7CisrCisrCSAgYyA9ICpwOworKwkgICpwID0gMDsKKysKKysJICBpZiAoIW9wLT5tYXRjaChzdHIpKQorKwkgICAgeworKwkgICAgICAqcCA9IGM7CisrCSAgICAgIHJldHVybiAwOworKwkgICAgfQorKworKwkgIHN0ciA9IHA7CisrCSAgKnAgPSBjOworKwkgIGlmIChjKQorKwkgICAgc3RyKys7CisrCX0KKysKKysgICAgICBvcHR5cGUgPSBzeW50YXgtPm9wZXJhbmRbaV07CisrICAgICAgYXNzZXJ0KG9wdHlwZSA8IEFWUjMyX05SX09QRVJBTkRTKTsKKysgICAgICBvcCA9ICZhdnIzMl9vcGVyYW5kX3RhYmxlW29wdHlwZV07CisrCisrICAgICAgaWYgKCFvcC0+bWF0Y2goc3RyKSkKKysJcmV0dXJuIDA7CisrICAgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysgIGZvciAoaSA9IDA7IGkgPCBzeW50YXgtPm5yX29wZXJhbmRzOyBpKyspCisrICAgIHsKKysgICAgICBzdHJ1Y3QgYXZyMzJfb3BlcmFuZCAqb3A7CisrICAgICAgaW50IG9wdHlwZSA9IHN5bnRheC0+b3BlcmFuZFtpXTsKKysgICAgICBjaGFyICpwOworKyAgICAgIGNoYXIgYzsKKysKKysgICAgICBhc3NlcnQob3B0eXBlIDwgQVZSMzJfTlJfT1BFUkFORFMpOworKyAgICAgIG9wID0gJmF2cjMyX29wZXJhbmRfdGFibGVbb3B0eXBlXTsKKysKKysgICAgICBmb3IgKHAgPSBzdHI7ICpwOyBwKyspCisrCWlmICgqcCA9PSAnLCcpCisrCSAgYnJlYWs7CisrCisrICAgICAgaWYgKHAgPT0gc3RyKQorKwlyZXR1cm4gMDsKKysKKysgICAgICBjID0gKnA7CisrICAgICAgKnAgPSAwOworKworKyAgICAgIGlmICghb3AtPm1hdGNoKHN0cikpCisrCXsKKysJICAqcCA9IGM7CisrCSAgcmV0dXJuIDA7CisrCX0KKysKKysgICAgICBzdHIgPSBwOworKyAgICAgICpwID0gYzsKKysgICAgICBpZiAoYykKKysJc3RyKys7CisrICAgIH0KKysKKysgIGlmICgqc3RyID09ICdcMCcpCisrICAgIHJldHVybiAxOworKworKyAgaWYgKCgqc3RyID09ICdlJyB8fCAqc3RyID09ICdFJykgJiYgIXN0clsxXSkKKysgICAgcmV0dXJuIDE7CisrCisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludCBwYXJzZV9vcGVyYW5kcyhjaGFyICpzdHIpCisreworKyAgaW50IGk7CisrCisrICBpZiAoY3VycmVudF9pbnNuLnN5bnRheC0+bnJfb3BlcmFuZHMgPCAwKQorKyAgICB7CisrICAgICAgaW50IG9wdHlwZTsKKysgICAgICBzdHJ1Y3QgYXZyMzJfb3BlcmFuZCAqb3A7CisrCisrICAgICAgZm9yIChpID0gMDsgaSA8ICgtY3VycmVudF9pbnNuLnN5bnRheC0+bnJfb3BlcmFuZHMgLSAxKTsgaSsrKQorKwl7CisrCSAgY2hhciAqcDsKKysJICBjaGFyIGM7CisrCisrCSAgb3B0eXBlID0gY3VycmVudF9pbnNuLnN5bnRheC0+b3BlcmFuZFtpXTsKKysJICBvcCA9ICZhdnIzMl9vcGVyYW5kX3RhYmxlW29wdHlwZV07CisrCisrCSAgZm9yIChwID0gc3RyOyAqcDsgcCsrKQorKwkgICAgaWYgKCpwID09ICcsJykKKysJICAgICAgYnJlYWs7CisrCisrCSAgYXNzZXJ0KHAgIT0gc3RyKTsKKysKKysJICBjID0gKnAsICpwID0gMDsKKysJICBvcC0+cGFyc2Uob3AsIHN0ciwgaSk7CisrCSAgKnAgPSBjOworKworKwkgIHN0ciA9IHA7CisrCSAgaWYgKGMpIHN0cisrOworKwl9CisrCisrICAgICAgLyogZ2l2ZSB0aGUgcmVzdCBvZiB0aGUgbGluZSB0byB0aGUgbGFzdCBvcGVyYW5kICovCisrICAgICAgb3B0eXBlID0gY3VycmVudF9pbnNuLnN5bnRheC0+b3BlcmFuZFtpXTsKKysgICAgICBvcCA9ICZhdnIzMl9vcGVyYW5kX3RhYmxlW29wdHlwZV07CisrICAgICAgb3AtPnBhcnNlKG9wLCBzdHIsIGkpOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VycmVudF9pbnNuLnN5bnRheC0+bnJfb3BlcmFuZHM7IGkrKykKKysJeworKwkgIGludCBvcHR5cGUgPSBjdXJyZW50X2luc24uc3ludGF4LT5vcGVyYW5kW2ldOworKwkgIHN0cnVjdCBhdnIzMl9vcGVyYW5kICpvcCA9ICZhdnIzMl9vcGVyYW5kX3RhYmxlW29wdHlwZV07CisrCSAgY2hhciAqcDsKKysJICBjaGFyIGM7CisrCisrCSAgc2tpcF93aGl0ZXNwYWNlKHN0cik7CisrCisrCSAgZm9yIChwID0gc3RyOyAqcDsgcCsrKQorKwkgICAgaWYgKCpwID09ICcsJykKKysJICAgICAgYnJlYWs7CisrCisrCSAgYXNzZXJ0KHAgIT0gc3RyKTsKKysKKysJICBjID0gKnAsICpwID0gMDsKKysJICBvcC0+cGFyc2Uob3AsIHN0ciwgaSk7CisrCSAgKnAgPSBjOworKworKwkgIHN0ciA9IHA7CisrCSAgaWYgKGMpIHN0cisrOworKwl9CisrCisrICAgICAgaWYgKCpzdHIgPT0gJ0UnIHx8ICpzdHIgPT0gJ2UnKQorKwljdXJyZW50X2luc24uZm9yY2VfZXh0ZW5kZWQgPSAxOworKyAgICB9CisrCisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGNvbnN0IGNoYXIgKgorK2ZpbmlzaF9pbnNuKGNvbnN0IHN0cnVjdCBhdnIzMl9vcGNvZGUgKm9wYykKKyt7CisrICBleHByZXNzaW9uUyAqZXhwID0gJmN1cnJlbnRfaW5zbi5pbW1lZGlhdGU7CisrICB1bnNpZ25lZCBpbnQgaTsKKysgIGludCB3aWxsX3JlbGF4ID0gMDsKKysgIGNoYXIgKmJ1ZjsKKysKKysgIGFzc2VydChjdXJyZW50X2luc24ubmV4dF9zbG90ID09IG9wYy0+bnJfZmllbGRzKTsKKysKKysgIHByX2RlYnVnKCIlczolZDogZmluaXNoX2luc246IHRyeWluZyBvcGNvZGUgJWRcbiIsCisrCSAgIGZyYWdfbm93LT5mcl9maWxlLCBmcmFnX25vdy0+ZnJfbGluZSwgb3BjLT5pZCk7CisrCisrICAvKiBHbyB0aHJvdWdoIHRoZSByZWxheGF0aW9uIHN0YWdlIGZvciBhbGwgaW5zdHJ1Y3Rpb25zIHRoYXQgY2FuCisrICAgICBwb3NzaWJseSB0YWtlIGEgc3ltYm9saWMgaW1tZWRpYXRlLiAgVGhlIHJlbGF4IGNvZGUgd2lsbCB0YWtlCisrICAgICBjYXJlIG9mIHJhbmdlIGNoZWNraW5nIGFuZCBhbGlnbm1lbnQuICAqLworKyAgaWYgKG9wYy0+dmFyX2ZpZWxkICE9IC0xKQorKyAgICB7CisrICAgICAgaW50IHN1YnN0YXRlLCBsYXJnZXN0X3N1YnN0YXRlOworKyAgICAgIHN5bWJvbFMgKnN5bTsKKysgICAgICBvZmZzZXRUIG9mZjsKKysKKysgICAgICB3aWxsX3JlbGF4ID0gMTsKKysgICAgICBzdWJzdGF0ZSA9IGxhcmdlc3Rfc3Vic3RhdGUgPSBvcGNfaW5pdGlhbF9zdWJzdGF0ZShvcGMpOworKworKyAgICAgIHdoaWxlIChyZWxheF9tb3JlKGxhcmdlc3Rfc3Vic3RhdGUpICE9IEFWUjMyX1JTX05PTkUpCisrCWxhcmdlc3Rfc3Vic3RhdGUgPSByZWxheF9tb3JlKGxhcmdlc3Rfc3Vic3RhdGUpOworKworKyAgICAgIHByX2RlYnVnKCJ3aWxsIHJlbGF4LiBpbml0aWFsIHN1YnN0YXRlOiAlZCAoc2l6ZSAlZCksIGxhcmdlc3Qgc3Vic3RhdGU6ICVkIChzaXplICVkKVxuIiwKKysJICAgICAgIHN1YnN0YXRlLCBhdnIzMl9yc19zaXplKHN1YnN0YXRlKSwKKysJICAgICAgIGxhcmdlc3Rfc3Vic3RhdGUsIGF2cjMyX3JzX3NpemUobGFyZ2VzdF9zdWJzdGF0ZSkpOworKworKyAgICAgIC8qIG1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCByb29tIGZvciB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBvcGNvZGUgKi8KKysgICAgICBmcmFnX2dyb3coYXZyMzJfcnNfc2l6ZShsYXJnZXN0X3N1YnN0YXRlKSk7CisrICAgICAgYnVmID0gZnJhZ19tb3JlKG9wYy0+c2l6ZSk7CisrCisrICAgICAgZHdhcmYyX2VtaXRfaW5zbihvcGMtPnNpemUpOworKworKyAgICAgIGZyYWdfbm93LT50Y19mcmFnX2RhdGEucmVsb2NfaW5mbyA9IEFWUjMyX09QSU5GT19OT05FOworKyAgICAgIGZyYWdfbm93LT50Y19mcmFnX2RhdGEucGNyZWwgPSBjdXJyZW50X2luc24ucGNyZWw7CisrICAgICAgZnJhZ19ub3ctPnRjX2ZyYWdfZGF0YS5mb3JjZV9leHRlbmRlZCA9IGN1cnJlbnRfaW5zbi5mb3JjZV9leHRlbmRlZDsKKysgICAgICBmcmFnX25vdy0+dGNfZnJhZ19kYXRhLnJlbGF4ZXIgPSAmYXZyMzJfZGVmYXVsdF9yZWxheGVyOworKworKyAgICAgIGlmIChleHAtPlhfb3AgPT0gT19oaSkKKysJeworKwkgIGZyYWdfbm93LT50Y19mcmFnX2RhdGEucmVsb2NfaW5mbyA9IEFWUjMyX09QSU5GT19ISTsKKysJICBleHAtPlhfb3AgPSBleHAtPlhfbWQ7CisrCX0KKysgICAgICBlbHNlIGlmIChleHAtPlhfb3AgPT0gT19sbykKKysJeworKwkgIGZyYWdfbm93LT50Y19mcmFnX2RhdGEucmVsb2NfaW5mbyA9IEFWUjMyX09QSU5GT19MTzsKKysJICBleHAtPlhfb3AgPSBleHAtPlhfbWQ7CisrCX0KKysgICAgICBlbHNlIGlmIChleHAtPlhfb3AgPT0gT19nb3QpCisrCXsKKysJICBmcmFnX25vdy0+dGNfZnJhZ19kYXRhLnJlbG9jX2luZm8gPSBBVlIzMl9PUElORk9fR09UOworKwkgIGV4cC0+WF9vcCA9IE9fc3ltYm9sOworKwl9CisrCisrI2lmIDAKKysgICAgICBpZiAoKG9wYy0+cmVsb2NfdHlwZSA9PSBCRkRfUkVMT0NfQVZSMzJfU1VCNSkKKysJICAmJiBleHAtPlhfb3AgPT0gT19zdWJ0cmFjdCkKKysJeworKwkgIHN5bWJvbFMgKnRtcDsKKysJICB0bXAgPSBleHAtPlhfYWRkX3N5bWJvbDsKKysJICBleHAtPlhfYWRkX3N5bWJvbCA9IGV4cC0+WF9vcF9zeW1ib2w7CisrCSAgZXhwLT5YX29wX3N5bWJvbCA9IHRtcDsKKysJfQorKyNlbmRpZgorKworKyAgICAgIGZyYWdfbm93LT50Y19mcmFnX2RhdGEuZXhwID0gY3VycmVudF9pbnNuLmltbWVkaWF0ZTsKKysKKysgICAgICBzeW0gPSBleHAtPlhfYWRkX3N5bWJvbDsKKysgICAgICBvZmYgPSBleHAtPlhfYWRkX251bWJlcjsKKysgICAgICBpZiAoZXhwLT5YX29wICE9IE9fc3ltYm9sKQorKwl7CisrCSAgc3ltID0gbWFrZV9leHByX3N5bWJvbChleHApOworKwkgIG9mZiA9IDA7CisrCX0KKysKKysgICAgICBmcmFnX3Zhcihyc19tYWNoaW5lX2RlcGVuZGVudCwKKysJICAgICAgIGF2cjMyX3JzX3NpemUobGFyZ2VzdF9zdWJzdGF0ZSkgLSBvcGMtPnNpemUsCisrCSAgICAgICBvcGMtPnNpemUsCisrCSAgICAgICBzdWJzdGF0ZSwgc3ltLCBvZmYsIGJ1Zik7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGFzc2VydChhdnIzMl9yc19zaXplKG9wY19pbml0aWFsX3N1YnN0YXRlKG9wYykpID09IDApOworKworKyAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBhbHdheXMgaGF2ZSByb29tIGZvciBhbm90aGVyIHdob2xlIHdvcmQsIGFzIHRoZSBpZmllbGQKKysJIGluc2VydGVycyBjYW4gb25seSB3cml0ZSB3b3Jkcy4gKi8KKysgICAgICBmcmFnX2dyb3coNCk7CisrICAgICAgYnVmID0gZnJhZ19tb3JlKG9wYy0+c2l6ZSk7CisrICAgICAgZHdhcmYyX2VtaXRfaW5zbihvcGMtPnNpemUpOworKyAgICB9CisrCisrICBhc3NlcnQoIShvcGMtPnZhbHVlICYgfm9wYy0+bWFzaykpOworKworKyAgcHJfZGVidWcoImluc2VydGluZyBvcGNvZGU6IDB4JWx4XG4iLCBvcGMtPnZhbHVlKTsKKysgIGJmZF9wdXRiMzIob3BjLT52YWx1ZSwgYnVmKTsKKysKKysgIGZvciAoaSA9IDA7IGkgPCBvcGMtPm5yX2ZpZWxkczsgaSsrKQorKyAgICB7CisrICAgICAgY29uc3Qgc3RydWN0IGF2cjMyX2lmaWVsZCAqZiA9IG9wYy0+ZmllbGRzW2ldOworKyAgICAgIGNvbnN0IHN0cnVjdCBhdnIzMl9pZmllbGRfZGF0YSAqZmQgPSAmY3VycmVudF9pbnNuLmZpZWxkX3ZhbHVlW2ldOworKworKyAgICAgIHByX2RlYnVnKCJpbnNlcnRpbmcgZmllbGQ6IDB4JWx4ICYgMHglbHhcbiIsCisrCSAgICAgICBmZC0+dmFsdWUgPj4gZmQtPmFsaWduX29yZGVyLCBmLT5tYXNrKTsKKysKKysgICAgICBmLT5pbnNlcnQoZiwgYnVmLCBmZC0+dmFsdWUgPj4gZmQtPmFsaWduX29yZGVyKTsKKysgICAgfQorKworKyAgYXNzZXJ0KHdpbGxfcmVsYXggfHwgIWN1cnJlbnRfaW5zbi5pbW1lZGlhdGUuWF9hZGRfc3ltYm9sKTsKKysgIHJldHVybiBOVUxMOworK30KKysKKytzdGF0aWMgY29uc3QgY2hhciAqCisrZmluaXNoX2FsaWFzKGNvbnN0IHN0cnVjdCBhdnIzMl9hbGlhcyAqYWxpYXMpCisreworKyAgY29uc3Qgc3RydWN0IGF2cjMyX29wY29kZSAqb3BjOworKyAgc3RydWN0IHsKKysgICAgdW5zaWduZWQgbG9uZyB2YWx1ZTsKKysgICAgdW5zaWduZWQgbG9uZyBhbGlnbjsKKysgIH0gbWFwcGVkX29wZXJhbmRbQVZSMzJfTUFYX09QRVJBTkRTXTsKKysgIHVuc2lnbmVkIGludCBpOworKworKyAgb3BjID0gYWxpYXMtPm9wYzsKKysKKysgIC8qIFJlbWFwIHRoZSBvcGVyYW5kcyBmcm9tIHRoZSBhbGlhcyB0byB0aGUgcmVhbCBvcGNvZGUgKi8KKysgIGZvciAoaSA9IDA7IGkgPCBvcGMtPm5yX2ZpZWxkczsgaSsrKQorKyAgICB7CisrICAgICAgaWYgKGFsaWFzLT5vcGVyYW5kX21hcFtpXS5pc19vcGluZGV4KQorKwl7CisrCSAgc3RydWN0IGF2cjMyX2lmaWVsZF9kYXRhICpmZDsKKysJICBmZCA9ICZjdXJyZW50X2luc24uZmllbGRfdmFsdWVbYWxpYXMtPm9wZXJhbmRfbWFwW2ldLnZhbHVlXTsKKysJICBtYXBwZWRfb3BlcmFuZFtpXS52YWx1ZSA9IGZkLT52YWx1ZTsKKysJICBtYXBwZWRfb3BlcmFuZFtpXS5hbGlnbiA9IGZkLT5hbGlnbl9vcmRlcjsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIG1hcHBlZF9vcGVyYW5kW2ldLnZhbHVlID0gYWxpYXMtPm9wZXJhbmRfbWFwW2ldLnZhbHVlOworKwkgIG1hcHBlZF9vcGVyYW5kW2ldLmFsaWduID0gMDsKKysJfQorKyAgICB9CisrCisrICBmb3IgKGkgPSAwOyBpIDwgb3BjLT5ucl9maWVsZHM7IGkrKykKKysgICAgeworKyAgICAgIGN1cnJlbnRfaW5zbi5maWVsZF92YWx1ZVtpXS52YWx1ZSA9IG1hcHBlZF9vcGVyYW5kW2ldLnZhbHVlOworKyAgICAgIGlmIChvcGMtPmlkID09IEFWUjMyX09QQ19DT1ApCisrCWN1cnJlbnRfaW5zbi5maWVsZF92YWx1ZVtpXS5hbGlnbl9vcmRlciA9IDA7CisrICAgICAgZWxzZQorKwljdXJyZW50X2luc24uZmllbGRfdmFsdWVbaV0uYWxpZ25fb3JkZXIKKysJICA9IG1hcHBlZF9vcGVyYW5kW2ldLmFsaWduOworKyAgICB9CisrCisrICBjdXJyZW50X2luc24ubmV4dF9zbG90ID0gb3BjLT5ucl9maWVsZHM7CisrCisrICByZXR1cm4gZmluaXNoX2luc24ob3BjKTsKKyt9CisrCisrc3RhdGljIGNvbnN0IGNoYXIgKgorK2ZpbmlzaF9sZGEoY29uc3Qgc3RydWN0IGF2cjMyX3N5bnRheCAqc3ludGF4IEFUVFJJQlVURV9VTlVTRUQpCisreworKyAgZXhwcmVzc2lvblMgKmV4cCA9ICZjdXJyZW50X2luc24uaW1tZWRpYXRlOworKyAgcmVsYXhfc3Vic3RhdGVUIGluaXRpYWxfc3VidHlwZTsKKysgIHN5bWJvbFMgKnN5bTsKKysgIG9mZnNldFQgb2ZmOworKyAgaW50IGluaXRpYWxfc2l6ZSwgbWF4X3NpemU7CisrICBjaGFyICpidWY7CisrCisrICBpbml0aWFsX3NpemUgPSBMREFfSU5JVElBTF9TSVpFOworKworKyAgaWYgKGF2cjMyX3BpYykKKysgICAgeworKyAgICAgIGluaXRpYWxfc3VidHlwZSA9IExEQV9TVUJUWVBFX1NVQjsKKysgICAgICBpZiAobGlua3JlbGF4KQorKwltYXhfc2l6ZSA9IDg7CisrICAgICAgZWxzZQorKwltYXhfc2l6ZSA9IDQ7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGluaXRpYWxfc3VidHlwZSA9IExEQV9TVUJUWVBFX01PVjE7CisrICAgICAgbWF4X3NpemUgPSA0OworKyAgICB9CisrCisrICBmcmFnX2dyb3cobWF4X3NpemUpOworKyAgYnVmID0gZnJhZ19tb3JlKGluaXRpYWxfc2l6ZSk7CisrICBkd2FyZjJfZW1pdF9pbnNuKGluaXRpYWxfc2l6ZSk7CisrCisrICBpZiAoZXhwLT5YX29wID09IE9fc3ltYm9sKQorKyAgICB7CisrICAgICAgc3ltID0gZXhwLT5YX2FkZF9zeW1ib2w7CisrICAgICAgb2ZmID0gZXhwLT5YX2FkZF9udW1iZXI7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIHN5bSA9IG1ha2VfZXhwcl9zeW1ib2woZXhwKTsKKysgICAgICBvZmYgPSAwOworKyAgICB9CisrCisrICBmcmFnX25vdy0+dGNfZnJhZ19kYXRhLnJlbG9jX2luZm8gPSBjdXJyZW50X2luc24uZmllbGRfdmFsdWVbMF0udmFsdWU7CisrICBmcmFnX25vdy0+dGNfZnJhZ19kYXRhLnJlbGF4ZXIgPSAmYXZyMzJfbGRhX3JlbGF4ZXI7CisrCisrICBpZiAoIWF2cjMyX3BpYykKKysgICAgeworKyAgICAgIC8qIFRoZSByZWxheGVyIHdpbGwgYnVtcCB0aGUgcmVmY291bnQgaWYgbmVjZXNzYXJ5ICovCisrICAgICAgZnJhZ19ub3ctPnRjX2ZyYWdfZGF0YS5wb29sCisrCT0gYWRkX3RvX2Nwb29sKGV4cCwgJmZyYWdfbm93LT50Y19mcmFnX2RhdGEucG9vbF9lbnRyeSwgMCk7CisrICAgIH0KKysKKysgIGZyYWdfdmFyKHJzX21hY2hpbmVfZGVwZW5kZW50LCBtYXhfc2l6ZSAtIGluaXRpYWxfc2l6ZSwKKysJICAgaW5pdGlhbF9zaXplLCBpbml0aWFsX3N1YnR5cGUsIHN5bSwgb2ZmLCBidWYpOworKworKyAgcmV0dXJuIE5VTEw7CisrfQorKworK3N0YXRpYyBjb25zdCBjaGFyICoKKytmaW5pc2hfY2FsbChjb25zdCBzdHJ1Y3QgYXZyMzJfc3ludGF4ICpzeW50YXggQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICBleHByZXNzaW9uUyAqZXhwID0gJmN1cnJlbnRfaW5zbi5pbW1lZGlhdGU7CisrICBzeW1ib2xTICpzeW07CisrICBvZmZzZXRUIG9mZjsKKysgIGludCBpbml0aWFsX3NpemUsIG1heF9zaXplOworKyAgY2hhciAqYnVmOworKworKyAgaW5pdGlhbF9zaXplID0gQ0FMTF9JTklUSUFMX1NJWkU7CisrCisrICBpZiAoYXZyMzJfcGljKQorKyAgICB7CisrICAgICAgaWYgKGxpbmtyZWxheCkKKysJbWF4X3NpemUgPSAxMDsKKysgICAgICBlbHNlCisrCW1heF9zaXplID0gNDsKKysgICAgfQorKyAgZWxzZQorKyAgICBtYXhfc2l6ZSA9IDQ7CisrCisrICBmcmFnX2dyb3cobWF4X3NpemUpOworKyAgYnVmID0gZnJhZ19tb3JlKGluaXRpYWxfc2l6ZSk7CisrICBkd2FyZjJfZW1pdF9pbnNuKGluaXRpYWxfc2l6ZSk7CisrCisrICBmcmFnX25vdy0+dGNfZnJhZ19kYXRhLnJlbGF4ZXIgPSAmYXZyMzJfY2FsbF9yZWxheGVyOworKworKyAgaWYgKGV4cC0+WF9vcCA9PSBPX3N5bWJvbCkKKysgICAgeworKyAgICAgIHN5bSA9IGV4cC0+WF9hZGRfc3ltYm9sOworKyAgICAgIG9mZiA9IGV4cC0+WF9hZGRfbnVtYmVyOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBzeW0gPSBtYWtlX2V4cHJfc3ltYm9sKGV4cCk7CisrICAgICAgb2ZmID0gMDsKKysgICAgfQorKworKyAgaWYgKCFhdnIzMl9waWMpCisrICAgIHsKKysgICAgICAvKiBUaGUgcmVsYXhlciB3aWxsIGJ1bXAgdGhlIHJlZmNvdW50IGlmIG5lY2Vzc2FyeSAqLworKyAgICAgIGZyYWdfbm93LT50Y19mcmFnX2RhdGEucG9vbAorKwk9IGFkZF90b19jcG9vbChleHAsICZmcmFnX25vdy0+dGNfZnJhZ19kYXRhLnBvb2xfZW50cnksIDApOworKyAgICB9CisrCisrICBmcmFnX3Zhcihyc19tYWNoaW5lX2RlcGVuZGVudCwgbWF4X3NpemUgLSBpbml0aWFsX3NpemUsCisrCSAgIGluaXRpYWxfc2l6ZSwgQ0FMTF9TVUJUWVBFX1JDQUxMMSwgc3ltLCBvZmYsIGJ1Zik7CisrCisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrdm9pZAorK21kX2JlZ2luICh2b2lkKQorK3sKKysgIHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworKyAgaW50IGk7CisrCisrICBhdnIzMl9tbmVtb25pY19odGFiID0gaGFzaF9uZXcoKTsKKysKKysgIGlmICghYXZyMzJfbW5lbW9uaWNfaHRhYikKKysgICAgYXNfZmF0YWwoXygidmlydHVhbCBtZW1vcnkgZXhoYXVzdGVkIikpOworKworKyAgZm9yIChpID0gMDsgaSA8IEFWUjMyX05SX01ORU1PTklDUzsgaSsrKQorKyAgICB7CisrICAgICAgaGFzaF9pbnNlcnQoYXZyMzJfbW5lbW9uaWNfaHRhYiwgYXZyMzJfbW5lbW9uaWNfdGFibGVbaV0ubmFtZSwKKysJCSAgKHZvaWQgKikmYXZyMzJfbW5lbW9uaWNfdGFibGVbaV0pOworKyAgICB9CisrCisrICBpZiAobGlua3JlbGF4KQorKyAgICBmbGFncyB8PSBFRl9BVlIzMl9MSU5LUkVMQVg7CisrICBpZiAoYXZyMzJfcGljKQorKyAgICBmbGFncyB8PSBFRl9BVlIzMl9QSUM7CisrCisrICBiZmRfc2V0X3ByaXZhdGVfZmxhZ3Moc3Rkb3V0cHV0LCBmbGFncyk7CisrCisrI2lmZGVmIE9QQ19DT05TSVNURU5DWV9DSEVDSworKyAgaWYgKHNpemVvZihhdnIzMl9vcGVyYW5kX3RhYmxlKS9zaXplb2YoYXZyMzJfb3BlcmFuZF90YWJsZVswXSkKKysgICAgICA8IEFWUjMyX05SX09QRVJBTkRTKQorKyAgICBhc19mYXRhbChfKCJvcGVyYW5kIHRhYmxlIGlzIGluY29tcGxldGUiKSk7CisrCisrICBmb3IgKGkgPSAwOyBpIDwgQVZSMzJfTlJfT1BFUkFORFM7IGkrKykKKysgICAgaWYgKGF2cjMyX29wZXJhbmRfdGFibGVbaV0uaWQgIT0gaSkKKysgICAgICBhc19mYXRhbChfKCJvcGVyYW5kIHRhYmxlIGluY29uc2lzdGVuY3kgZm91bmQgYXQgaW5kZXggJWRcbiIpLCBpKTsKKysgIHByX2RlYnVnKCIlZCBvcGVyYW5kcyB2ZXJpZmllZFxuIiwgQVZSMzJfTlJfT1BFUkFORFMpOworKworKyAgZm9yIChpID0gMDsgaSA8IEFWUjMyX05SX0lGSUVMRFM7IGkrKykKKysgICAgaWYgKGF2cjMyX2lmaWVsZF90YWJsZVtpXS5pZCAhPSBpKQorKyAgICAgIGFzX2ZhdGFsKF8oImlmaWVsZCB0YWJsZSBpbmNvbnNpc3RlbmN5IGZvdW5kIGF0IGluZGV4ICVkXG4iKSwgaSk7CisrICBwcl9kZWJ1ZygiJWQgaW5zdHJ1Y3Rpb24gZmllbGRzIHZlcmlmaWVkXG4iLCBBVlIzMl9OUl9JRklFTERTKTsKKysKKysgIGZvciAoaSA9IDA7IGkgPCBBVlIzMl9OUl9PUENPREVTOyBpKyspCisrICAgIHsKKysgICAgICBpZiAoYXZyMzJfb3BjX3RhYmxlW2ldLmlkICE9IGkpCisrCWFzX2ZhdGFsKF8oIm9wY29kZSB0YWJsZSBpbmNvbnNpc3RlbmN5IGZvdW5kIGF0IGluZGV4ICVkXG4iKSwgaSk7CisrICAgICAgaWYgKChhdnIzMl9vcGNfdGFibGVbaV0udmFyX2ZpZWxkID09IC0xCisrCSAgICYmIGF2cjMyX3JlbGF4X3RhYmxlW2ldLmxlbmd0aCAhPSAwKQorKwkgIHx8IChhdnIzMl9vcGNfdGFibGVbaV0udmFyX2ZpZWxkICE9IC0xCisrCSAgICAgICYmIGF2cjMyX3JlbGF4X3RhYmxlW2ldLmxlbmd0aCA9PSAwKSkKKysJYXNfZmF0YWwoXygicmVsYXggdGFibGUgaW5jb25zaXN0ZW5jeSBmb3VuZCBhdCBpbmRleCAlZFxuIiksIGkpOworKyAgICB9CisrICBwcl9kZWJ1ZygiJWQgb3Bjb2RlcyB2ZXJpZmllZFxuIiwgQVZSMzJfTlJfT1BDT0RFUyk7CisrCisrICBmb3IgKGkgPSAwOyBpIDwgQVZSMzJfTlJfU1lOVEFYOyBpKyspCisrICAgIGlmIChhdnIzMl9zeW50YXhfdGFibGVbaV0uaWQgIT0gaSkKKysgICAgICBhc19mYXRhbChfKCJzeW50YXggdGFibGUgaW5jb25zaXN0ZW5jeSBmb3VuZCBhdCBpbmRleCAlZFxuIiksIGkpOworKyAgcHJfZGVidWcoIiVkIHN5bnRheCB2YXJpYW50cyB2ZXJpZmllZFxuIiwgQVZSMzJfTlJfU1lOVEFYKTsKKysKKysgIGZvciAoaSA9IDA7IGkgPCBBVlIzMl9OUl9BTElBUzsgaSsrKQorKyAgICBpZiAoYXZyMzJfYWxpYXNfdGFibGVbaV0uaWQgIT0gaSkKKysgICAgICBhc19mYXRhbChfKCJhbGlhcyB0YWJsZSBpbmNvbnNpc3RlbmN5IGZvdW5kIGF0IGluZGV4ICVkXG4iKSwgaSk7CisrICBwcl9kZWJ1ZygiJWQgYWxpYXNlcyB2ZXJpZmllZFxuIiwgQVZSMzJfTlJfQUxJQVMpOworKworKyAgZm9yIChpID0gMDsgaSA8IEFWUjMyX05SX01ORU1PTklDUzsgaSsrKQorKyAgICBpZiAoYXZyMzJfbW5lbW9uaWNfdGFibGVbaV0uaWQgIT0gaSkKKysgICAgICBhc19mYXRhbChfKCJtbmVtb25pYyB0YWJsZSBpbmNvbnNpc3RlbmN5IGZvdW5kIGF0IGluZGV4ICVkXG4iKSwgaSk7CisrICBwcl9kZWJ1ZygiJWQgbW5lbW9uaWNzIHZlcmlmaWVkXG4iLCBBVlIzMl9OUl9NTkVNT05JQ1MpOworKyNlbmRpZgorK30KKysKKyt2b2lkCisrbWRfYXNzZW1ibGUgKGNoYXIgKnN0cikKKyt7CisrICBzdHJ1Y3QgYXZyMzJfbW5lbW9uaWMgKm1uZW1vbmljOworKyAgY2hhciAqcCwgYzsKKysKKysgIG1lbXNldCgmY3VycmVudF9pbnNuLCAwLCBzaXplb2YoY3VycmVudF9pbnNuKSk7CisrICBjdXJyZW50X2luc24uaW1tZWRpYXRlLlhfb3AgPSBPX2NvbnN0YW50OworKworKyAgc2tpcF93aGl0ZXNwYWNlKHN0cik7CisrICBmb3IgKHAgPSBzdHI7ICpwOyBwKyspCisrICAgIGlmICgqcCA9PSAnICcpCisrICAgICAgYnJlYWs7CisrICBjID0gKnA7CisrICAqcCA9IDA7CisrCisrICBtbmVtb25pYyA9IGhhc2hfZmluZChhdnIzMl9tbmVtb25pY19odGFiLCBzdHIpOworKyAgKnAgPSBjOworKyAgaWYgKGMpIHArKzsKKysKKysgIGlmIChtbmVtb25pYykKKysgICAgeworKyAgICAgIGNvbnN0IHN0cnVjdCBhdnIzMl9zeW50YXggKnN5bnRheDsKKysKKysgICAgICBmb3IgKHN5bnRheCA9IG1uZW1vbmljLT5zeW50YXg7IHN5bnRheDsgc3ludGF4ID0gc3ludGF4LT5uZXh0KQorKwl7CisrCSAgY29uc3QgY2hhciAqZXJybXNnID0gTlVMTDsKKysKKysJICBpZiAoc3ludGF4X21hdGNoZXMoc3ludGF4LCBwKSkKKysJICAgIHsKKysJICAgICAgaWYgKCEoc3ludGF4LT5pc2FfZmxhZ3MgJiBhdnIzMl9hcmNoLT5pc2FfZmxhZ3MpKQorKwkJeworKwkJICBhc19iYWQoXygiU2VsZWN0ZWQgYXJjaGl0ZWN0dXJlIGAlcycgIGRvZXMgbm90IHN1cHBvcnQgYCVzJyIpLAorKwkJCSBhdnIzMl9hcmNoLT5uYW1lLCBzdHIpOworKwkJICByZXR1cm47CisrCQl9CisrCisrCSAgICAgIGN1cnJlbnRfaW5zbi5zeW50YXggPSBzeW50YXg7CisrCSAgICAgIHBhcnNlX29wZXJhbmRzKHApOworKworKwkgICAgICBzd2l0Y2ggKHN5bnRheC0+dHlwZSkKKysJCXsKKysJCWNhc2UgQVZSMzJfUEFSU0VSX05PUk1BTDoKKysJCSAgZXJybXNnID0gZmluaXNoX2luc24oc3ludGF4LT51Lm9wYyk7CisrCQkgIGJyZWFrOworKwkJY2FzZSBBVlIzMl9QQVJTRVJfQUxJQVM6CisrCQkgIGVycm1zZyA9IGZpbmlzaF9hbGlhcyhzeW50YXgtPnUuYWxpYXMpOworKwkJICBicmVhazsKKysJCWNhc2UgQVZSMzJfUEFSU0VSX0xEQToKKysJCSAgZXJybXNnID0gZmluaXNoX2xkYShzeW50YXgpOworKwkJICBicmVhazsKKysJCWNhc2UgQVZSMzJfUEFSU0VSX0NBTEw6CisrCQkgIGVycm1zZyA9IGZpbmlzaF9jYWxsKHN5bnRheCk7CisrCQkgIGJyZWFrOworKwkJZGVmYXVsdDoKKysJCSAgQkFEX0NBU0Uoc3ludGF4LT50eXBlKTsKKysJCSAgYnJlYWs7CisrCQl9CisrCisrCSAgICAgIGlmIChlcnJtc2cpCisrCQlhc19iYWQoIiVzIGluIGAlcyciLCBlcnJtc2csIHN0cik7CisrCisrCSAgICAgIHJldHVybjsKKysJICAgIH0KKysJfQorKworKyAgICAgIGFzX2JhZChfKCJ1bnJlY29nbml6ZWQgZm9ybSBvZiBpbnN0cnVjdGlvbjogYCVzJyIpLCBzdHIpOworKyAgICB9CisrICBlbHNlCisrICAgIGFzX2JhZChfKCJ1bnJlY29nbml6ZWQgaW5zdHJ1Y3Rpb24gYCVzJyIpLCBzdHIpOworK30KKysKKyt2b2lkIGF2cjMyX2NsZWFudXAodm9pZCkKKyt7CisrICBzdHJ1Y3QgY3Bvb2wgKnBvb2w7CisrCisrICAvKiBFbWl0IGFueSBjb25zdGFudCBwb29scyB0aGF0IGhhdmVuJ3QgYmVlbiBleHBsaWNpdGx5IGZsdXNoZWQgd2l0aAorKyAgICAgYSAuY3Bvb2wgZGlyZWN0aXZlLiAqLworKyAgZm9yIChwb29sID0gY3Bvb2xfbGlzdDsgcG9vbDsgcG9vbCA9IHBvb2wtPm5leHQpCisrICAgIHsKKysgICAgICBzdWJzZWdfc2V0KHBvb2wtPnNlY3Rpb24sIHBvb2wtPnN1Yl9zZWN0aW9uKTsKKysgICAgICBzX2Nwb29sKDApOworKyAgICB9CisrfQorKworKy8qIEhhbmRsZSBhbnkgUElDLXJlbGF0ZWQgb3BlcmFuZHMgaW4gZGF0YSBhbGxvY2F0aW9uIHBzZXVkby1vcHMgKi8KKyt2b2lkCisrYXZyMzJfY29uc19maXhfbmV3IChmcmFnUyAqZnJhZywgaW50IG9mZiwgaW50IHNpemUsIGV4cHJlc3Npb25TICpleHApCisreworKyAgYmZkX3JlbG9jX2NvZGVfcmVhbF90eXBlIHJfdHlwZSA9IEJGRF9SRUxPQ19VTlVTRUQ7CisrICBpbnQgcGNyZWwgPSAwOworKworKyAgcHJfZGVidWcoIiVzOiV1OiBjb25zX2ZpeF9uZXcsIGFkZF9zeW06ICVzLCBvcF9zeW06ICVzLCBvcDogJWQsIGFkZF9udW06ICVkXG4iLAorKwkgICBmcmFnLT5mcl9maWxlLCBmcmFnLT5mcl9saW5lLAorKwkgICBleHAtPlhfYWRkX3N5bWJvbD9TX0dFVF9OQU1FKGV4cC0+WF9hZGRfc3ltYm9sKToiKG5vbmUpIiwKKysJICAgZXhwLT5YX29wX3N5bWJvbD9TX0dFVF9OQU1FKGV4cC0+WF9vcF9zeW1ib2wpOiIobm9uZSkiLAorKwkgICBleHAtPlhfb3AsIGV4cC0+WF9hZGRfbnVtYmVyKTsKKysKKysgIGlmIChleHAtPlhfb3AgPT0gT19zdWJ0cmFjdCAmJiBleHAtPlhfb3Bfc3ltYm9sKQorKyAgICB7CisrICAgICAgaWYgKGV4cC0+WF9vcF9zeW1ib2wgPT0gR09UX3N5bWJvbCkKKysJeworKwkgIGlmIChzaXplICE9IDQpCisrCSAgICBnb3RvIGJhZF9zaXplOworKwkgIHJfdHlwZSA9IEJGRF9SRUxPQ19BVlIzMl9HT1RQQzsKKysJICBleHAtPlhfb3AgPSBPX3N5bWJvbDsKKysJICBleHAtPlhfb3Bfc3ltYm9sID0gTlVMTDsKKysJfQorKyAgICB9CisrICBlbHNlIGlmIChleHAtPlhfb3AgPT0gT19nb3QpCisrICAgIHsKKysgICAgICBzd2l0Y2ggKHNpemUpCisrCXsKKysJY2FzZSAxOgorKwkgIHJfdHlwZSA9IEJGRF9SRUxPQ19BVlIzMl9HT1Q4OworKwkgIGJyZWFrOworKwljYXNlIDI6CisrCSAgcl90eXBlID0gQkZEX1JFTE9DX0FWUjMyX0dPVDE2OworKwkgIGJyZWFrOworKwljYXNlIDQ6CisrCSAgcl90eXBlID0gQkZEX1JFTE9DX0FWUjMyX0dPVDMyOworKwkgIGJyZWFrOworKwlkZWZhdWx0OgorKwkgIGdvdG8gYmFkX3NpemU7CisrCX0KKysKKysgICAgICBleHAtPlhfb3AgPSBPX3N5bWJvbDsKKysgICAgfQorKworKyAgaWYgKHJfdHlwZSA9PSBCRkRfUkVMT0NfVU5VU0VEKQorKyAgICBzd2l0Y2ggKHNpemUpCisrICAgICAgeworKyAgICAgIGNhc2UgMToKKysJcl90eXBlID0gQkZEX1JFTE9DXzg7CisrCWJyZWFrOworKyAgICAgIGNhc2UgMjoKKysJcl90eXBlID0gQkZEX1JFTE9DXzE2OworKwlicmVhazsKKysgICAgICBjYXNlIDQ6CisrCXJfdHlwZSA9IEJGRF9SRUxPQ18zMjsKKysJYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysJZ290byBiYWRfc2l6ZTsKKysgICAgICB9CisrICBlbHNlIGlmIChzaXplICE9IDQpCisrICAgIHsKKysgICAgYmFkX3NpemU6CisrICAgICAgYXNfYmFkKF8oInVuc3VwcG9ydGVkIEJGRCByZWxvY2F0aW9uIHNpemUgJXUiKSwgc2l6ZSk7CisrICAgICAgcl90eXBlID0gQkZEX1JFTE9DX1VOVVNFRDsKKysgICAgfQorKworKyAgZml4X25ld19leHAgKGZyYWcsIG9mZiwgc2l6ZSwgZXhwLCBwY3JlbCwgcl90eXBlKTsKKyt9CisrCisrc3RhdGljIHZvaWQKKythdnIzMl9mcm9iX3NlY3Rpb24oYmZkICphYmZkIEFUVFJJQlVURV9VTlVTRUQsIHNlZ1Qgc2VjLAorKwkJICAgdm9pZCAqaWdub3JlIEFUVFJJQlVURV9VTlVTRUQpCisreworKyAgc2VnbWVudF9pbmZvX3R5cGUgKnNlZ2luZm87CisrICBmaXhTICpmaXg7CisrCisrICBzZWdpbmZvID0gc2VnX2luZm8oc2VjKTsKKysgIGlmICghc2VnaW5mbykKKysgICAgcmV0dXJuOworKworKyAgZm9yIChmaXggPSBzZWdpbmZvLT5maXhfcm9vdDsgZml4OyBmaXggPSBmaXgtPmZ4X25leHQpCisrICAgIHsKKysgICAgICBpZiAoZml4LT5meF9kb25lKQorKwljb250aW51ZTsKKysKKysgICAgICBpZiAoZml4LT5meF9yX3R5cGUgPT0gQkZEX1JFTE9DX0FWUjMyX1NVQjUKKysJICAmJiBmaXgtPmZ4X2FkZHN5ICYmIGZpeC0+Znhfc3Vic3kpCisrCXsKKysJICBpZiAoU19HRVRfU0VHTUVOVChmaXgtPmZ4X2FkZHN5KSAhPSBTX0dFVF9TRUdNRU5UKGZpeC0+Znhfc3Vic3kpCisrCSAgICAgIHx8IGxpbmtyZWxheCkKKysJICAgIHsKKysJICAgICAgc3ltYm9sUyAqdG1wOworKyNpZmRlZiBERUJVRworKwkgICAgICBmcHJpbnRmKHN0ZGVyciwgIlN3YXBwaW5nIHN5bWJvbHMgaW4gZml4dXA6XG4iKTsKKysJICAgICAgcHJpbnRfZml4dXAoZml4KTsKKysjZW5kaWYKKysJICAgICAgdG1wID0gZml4LT5meF9hZGRzeTsKKysJICAgICAgZml4LT5meF9hZGRzeSA9IGZpeC0+Znhfc3Vic3k7CisrCSAgICAgIGZpeC0+Znhfc3Vic3kgPSB0bXA7CisrCSAgICAgIGZpeC0+Znhfb2Zmc2V0ID0gLWZpeC0+Znhfb2Zmc2V0OworKwkgICAgfQorKwl9CisrICAgIH0KKyt9CisrCisrLyogV2UgbmVlZCB0byBsb29rIGZvciBTVUI1IGluc3RydWN0aW9ucyB3aXRoIGV4cHJlc3Npb25zIHRoYXQgd2lsbCBiZQorKyAgIG1hZGUgUEMtcmVsYXRpdmUgYW5kIHN3aXRjaCBmeF9hZGRzeSB3aXRoIGZ4X3N1YnN5LiAgVGhpcyBoYXMgdG8gYmUKKysgICBkb25lIGJlZm9yZSBhZGp1c3RtZW50IG9yIHRoZSB3cm9uZyBzeW1ib2wgbWlnaHQgYmUgYWRqdXN0ZWQuCisrCisrICAgVGhpcyBhcHBsaWVzIHRvIGZpeHVwcyB0aGF0IGFyZSBhIHJlc3VsdCBvZiBleHByZXNzaW9ucyBsaWtlIC0oc3ltCisrICAgLSAuKSBhbmQgdGhhdCB3aWxsIG1ha2UgaXQgYWxsIHRoZSB3YXkgdG8gbWRfYXBwbHlfZml4MygpLiAgTERBCisrICAgZG9lcyB0aGUgcmlnaHQgdGhpbmcgaW4gY29udmVydF9mcmFnLCBzbyB3ZSBtdXN0IG5vdCBjb252ZXJ0CisrICAgdGhvc2UuICovCisrdm9pZAorK2F2cjMyX2Zyb2JfZmlsZSh2b2lkKQorK3sKKysgIC8qIGlmICgxIHx8ICFsaW5rcmVsYXgpCisrICAgICByZXR1cm47ICovCisrCisrICBiZmRfbWFwX292ZXJfc2VjdGlvbnMoc3Rkb3V0cHV0LCBhdnIzMl9mcm9iX3NlY3Rpb24sIE5VTEwpOworK30KKysKKytzdGF0aWMgYmZkX2Jvb2xlYW4KKytjb252ZXJ0X3RvX2RpZmZfcmVsb2MoZml4UyAqZml4UCkKKyt7CisrICBzd2l0Y2ggKGZpeFAtPmZ4X3JfdHlwZSkKKysgICAgeworKyAgICBjYXNlIEJGRF9SRUxPQ18zMjoKKysgICAgICBmaXhQLT5meF9yX3R5cGUgPSBCRkRfUkVMT0NfQVZSMzJfRElGRjMyOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEJGRF9SRUxPQ18xNjoKKysgICAgICBmaXhQLT5meF9yX3R5cGUgPSBCRkRfUkVMT0NfQVZSMzJfRElGRjE2OworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEJGRF9SRUxPQ184OgorKyAgICAgIGZpeFAtPmZ4X3JfdHlwZSA9IEJGRF9SRUxPQ19BVlIzMl9ESUZGODsKKysgICAgICBicmVhazsKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gRkFMU0U7CisrICAgIH0KKysKKysgIHJldHVybiBUUlVFOworK30KKysKKysvKiBTaW1wbGlmeSBhIGZpeHVwLiAgSWYgcG9zc2libGUsIHRoZSBmaXh1cCBpcyByZWR1Y2VkIHRvIGEgc2luZ2xlCisrICAgY29uc3RhbnQgd2hpY2ggaXMgd3JpdHRlbiB0byB0aGUgb3V0cHV0IGZpbGUuICBPdGhlcndpc2UsIGEKKysgICByZWxvY2F0aW9uIGlzIGdlbmVyYXRlZCBzbyB0aGF0IHRoZSBsaW5rZXIgY2FuIHRha2UgY2FyZSBvZiB0aGUKKysgICByZXN0LgorKworKyAgIEVMRiByZWxvY2F0aW9ucyBoYXZlIGNlcnRhaW4gY29uc3RyYWludHM6IFRoZXkgY2FuIG9ubHkgdGFrZSBhCisrICAgc2luZ2xlIHN5bWJvbCBhbmQgYSBzaW5nbGUgYWRkZW5kLiAgVGhpcyBtZWFucyB0aGF0IGZvciBkaWZmZXJlbmNlCisrICAgZXhwcmVzc2lvbnMsIHdlIF9tdXN0XyBnZXQgcmlkIG9mIHRoZSBmeF9zdWJzeSBzeW1ib2wgc29tZWhvdy4KKysKKysgICBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBsYWJlbHMgaW4gdGhlIHNhbWUgc2VjdGlvbiBjYW4gYmUKKysgICBjYWxjdWxhdGVkIGRpcmVjdGx5IHVubGVzcyAnbGlua3JlbGF4JyBpcyBzZXQsIG9yIGEgcmVsb2NhdGlvbiBpcworKyAgIGZvcmNlZC4gIElmIHNvLCB3ZSBtdXN0IGVtaXQgYSBSX0FWUjMyX0RJRkZ4eCByZWxvY2F0aW9uLiAgSWYgdGhlcmUKKysgICBhcmUgYWRkZW5kcyBpbnZvbHZlZCBhdCB0aGlzIHBvaW50LCB3ZSBtdXN0IGJlIGVzcGVjaWFsbHkgY2FyZWZ1bAorKyAgIGFzIHRoZSByZWxvY2F0aW9uIG11c3QgcG9pbnQgZXhhY3RseSB0byB0aGUgc3ltYm9sIGJlaW5nCisrICAgc3VidHJhY3RlZC4KKysKKysgICBXaGVuIHN1YnRyYWN0aW5nIGEgc3ltYm9sIGRlZmluZWQgaW4gdGhlIHNhbWUgc2VjdGlvbiBhcyB0aGUgZml4dXAsCisrICAgd2UgbWlnaHQgYmUgYWJsZSB0byBjb252ZXJ0IGl0IHRvIGEgUEMtcmVsYXRpdmUgZXhwcmVzc2lvbiwgdW5sZXNzCisrICAgbGlua3JlbGF4IGlzIHNldC4gSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhlcmUncyBubyB3YXkgd2UgY2FuIG1ha2UKKysgICBzdXJlIHRoYXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZml4dXAgYW5kIGZ4X3N1YnN5IHN0YXlzCisrICAgY29uc3RhbnQuICBTbyBmb3Igbm93LCB3ZSdyZSBqdXN0IGdvaW5nIHRvIGRpc2FsbG93IHRoYXQuCisrICAgKi8KKyt2b2lkCisrYXZyMzJfcHJvY2Vzc19maXh1cChmaXhTICpmaXhQLCBzZWdUIHRoaXNfc2VnbWVudCkKKyt7CisrICBzZWdUIGFkZF9zeW1ib2xfc2VnbWVudCA9IGFic29sdXRlX3NlY3Rpb247CisrICBzZWdUIHN1Yl9zeW1ib2xfc2VnbWVudCA9IGFic29sdXRlX3NlY3Rpb247CisrICBzeW1ib2xTICpmeF9hZGRzeSwgKmZ4X3N1YnN5OworKyAgb2Zmc2V0VCB2YWx1ZSA9IDAsIGZ4X29mZnNldDsKKysgIGJmZF9ib29sZWFuIGFwcGx5ID0gRkFMU0U7CisrCisrICBhc3NlcnQodGhpc19zZWdtZW50ICE9IGFic29sdXRlX3NlY3Rpb24pOworKworKyAgaWYgKGZpeFAtPmZ4X3JfdHlwZSA+PSBCRkRfUkVMT0NfVU5VU0VEKQorKyAgICB7CisrICAgICAgYXNfYmFkX3doZXJlKGZpeFAtPmZ4X2ZpbGUsIGZpeFAtPmZ4X2xpbmUsCisrCQkgICBfKCJCYWQgcmVsb2NhdGlvbiB0eXBlICVkXG4iKSwgZml4UC0+Znhfcl90eXBlKTsKKysgICAgICByZXR1cm47CisrICAgIH0KKysKKysgIC8qIEJGRF9SRUxPQ19BVlIzMl9TVUI1IGZpeHVwcyBoYXZlIGJlZW4gc3dhcHBlZCBieSBhdnIzMl9mcm9iX3NlY3Rpb24oKSAqLworKyAgZnhfYWRkc3kgPSBmaXhQLT5meF9hZGRzeTsKKysgIGZ4X3N1YnN5ID0gZml4UC0+Znhfc3Vic3k7CisrICBmeF9vZmZzZXQgPSBmaXhQLT5meF9vZmZzZXQ7CisrCisrICBpZiAoZnhfYWRkc3kpCisrICAgIGFkZF9zeW1ib2xfc2VnbWVudCA9IFNfR0VUX1NFR01FTlQoZnhfYWRkc3kpOworKworKyAgaWYgKGZ4X3N1YnN5KQorKyAgICB7CisrICAgICAgcmVzb2x2ZV9zeW1ib2xfdmFsdWUoZnhfc3Vic3kpOworKyAgICAgIHN1Yl9zeW1ib2xfc2VnbWVudCA9IFNfR0VUX1NFR01FTlQoZnhfc3Vic3kpOworKworKyAgICAgIGlmIChzdWJfc3ltYm9sX3NlZ21lbnQgPT0gdGhpc19zZWdtZW50CisrCSAgJiYgKCFsaW5rcmVsYXgKKysJICAgICAgfHwgU19HRVRfVkFMVUUoZnhfc3Vic3kpID09IChmaXhQLT5meF9mcmFnLT5mcl9hZGRyZXNzCisrCQkJCQkgICArIGZpeFAtPmZ4X3doZXJlKSkpCisrCXsKKysJICBmaXhQLT5meF9wY3JlbCA9IFRSVUU7CisrCSAgZnhfb2Zmc2V0ICs9IChmaXhQLT5meF9mcmFnLT5mcl9hZGRyZXNzICsgZml4UC0+Znhfd2hlcmUKKysJCQktIFNfR0VUX1ZBTFVFKGZ4X3N1YnN5KSk7CisrCSAgZnhfc3Vic3kgPSBOVUxMOworKwl9CisrICAgICAgZWxzZSBpZiAoc3ViX3N5bWJvbF9zZWdtZW50ID09IGFic29sdXRlX3NlY3Rpb24pCisrCXsKKysJICAvKiBUaGUgc3ltYm9sIGlzIHJlYWxseSBhIGNvbnN0YW50LiAgKi8KKysJICBmeF9vZmZzZXQgLT0gU19HRVRfVkFMVUUoZnhfc3Vic3kpOworKwkgIGZ4X3N1YnN5ID0gTlVMTDsKKysJfQorKyAgICAgIGVsc2UgaWYgKFNFR19OT1JNQUwoYWRkX3N5bWJvbF9zZWdtZW50KQorKwkgICAgICAgJiYgc3ViX3N5bWJvbF9zZWdtZW50ID09IGFkZF9zeW1ib2xfc2VnbWVudAorKwkgICAgICAgJiYgKCFsaW5rcmVsYXggfHwgY29udmVydF90b19kaWZmX3JlbG9jKGZpeFApKSkKKysJeworKwkgIC8qIERpZmZlcmVuY2UgYmV0d2VlbiB0d28gbGFiZWxzIGluIHRoZSBzYW1lIHNlY3Rpb24uICAqLworKwkgIGlmIChsaW5rcmVsYXgpCisrCSAgICB7CisrCSAgICAgIC8qIGNvbnZlcnRfdG9fZGlmZigpIGhhcyBlbnN1cmVkIHRoYXQgdGhlIHJlbG9jIHR5cGUgaXMKKysJCSBlaXRoZXIgRElGRjMyLCBESUZGMTYgb3IgRElGRjguICAqLworKwkgICAgICB2YWx1ZSA9IChTX0dFVF9WQUxVRShmeF9hZGRzeSkgKyBmaXhQLT5meF9vZmZzZXQKKysJCSAgICAgICAtIFNfR0VUX1ZBTFVFKGZ4X3N1YnN5KSk7CisrCisrCSAgICAgIC8qIFRyeSB0byBjb252ZXJ0IGl0IHRvIGEgc2VjdGlvbiBzeW1ib2wgaWYgcG9zc2libGUgICovCisrCSAgICAgIGlmICghU19GT1JDRV9SRUxPQyhmeF9hZGRzeSwgMSkKKysJCSAgJiYgIShzdWJfc3ltYm9sX3NlZ21lbnQtPmZsYWdzICYgU0VDX1RIUkVBRF9MT0NBTCkpCisrCQl7CisrCQkgIGZ4X29mZnNldCA9IFNfR0VUX1ZBTFVFKGZ4X3N1YnN5KTsKKysJCSAgZnhfYWRkc3kgPSBzZWN0aW9uX3N5bWJvbChzdWJfc3ltYm9sX3NlZ21lbnQpOworKwkJfQorKwkgICAgICBlbHNlCisrCQl7CisrCQkgIGZ4X2FkZHN5ID0gZnhfc3Vic3k7CisrCQkgIGZ4X29mZnNldCA9IDA7CisrCQl9CisrCisrCSAgICAgIGZ4X3N1YnN5ID0gTlVMTDsKKysJICAgICAgYXBwbHkgPSBUUlVFOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgZnhfb2Zmc2V0ICs9IFNfR0VUX1ZBTFVFKGZ4X2FkZHN5KTsKKysJICAgICAgZnhfb2Zmc2V0IC09IFNfR0VUX1ZBTFVFKGZ4X3N1YnN5KTsKKysJICAgICAgZnhfYWRkc3kgPSBOVUxMOworKwkgICAgICBmeF9zdWJzeSA9IE5VTEw7CisrCSAgICB9CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICBhc19iYWRfd2hlcmUoZml4UC0+ZnhfZmlsZSwgZml4UC0+ZnhfbGluZSwKKysJCSAgICAgICBfKCJjYW4ndCByZXNvbHZlIGAlcycgeyVzIHNlY3Rpb259IC0gYCVzJyB7JXMgc2VjdGlvbn0iKSwKKysJCSAgICAgICBmeF9hZGRzeSA/IFNfR0VUX05BTUUgKGZ4X2FkZHN5KSA6ICIwIiwKKysJCSAgICAgICBzZWdtZW50X25hbWUgKGFkZF9zeW1ib2xfc2VnbWVudCksCisrCQkgICAgICAgU19HRVRfTkFNRSAoZnhfc3Vic3kpLAorKwkJICAgICAgIHNlZ21lbnRfbmFtZSAoc3ViX3N5bWJvbF9zZWdtZW50KSk7CisrCSAgcmV0dXJuOworKwl9CisrICAgIH0KKysKKysgIGlmIChmeF9hZGRzeSAmJiAhVENfRk9SQ0VfUkVMT0NBVElPTihmaXhQKSkKKysgICAgeworKyAgICAgIGlmIChhZGRfc3ltYm9sX3NlZ21lbnQgPT0gdGhpc19zZWdtZW50CisrCSAgJiYgZml4UC0+ZnhfcGNyZWwpCisrCXsKKysJICB2YWx1ZSArPSBTX0dFVF9WQUxVRShmeF9hZGRzeSk7CisrCSAgdmFsdWUgLT0gbWRfcGNyZWxfZnJvbV9zZWN0aW9uKGZpeFAsIHRoaXNfc2VnbWVudCk7CisrCSAgZnhfYWRkc3kgPSBOVUxMOworKwkgIGZpeFAtPmZ4X3BjcmVsID0gRkFMU0U7CisrCX0KKysgICAgICBlbHNlIGlmIChhZGRfc3ltYm9sX3NlZ21lbnQgPT0gYWJzb2x1dGVfc2VjdGlvbikKKysJeworKwkgIGZ4X29mZnNldCArPSBTX0dFVF9WQUxVRShmaXhQLT5meF9hZGRzeSk7CisrCSAgZnhfYWRkc3kgPSBOVUxMOworKwl9CisrICAgIH0KKysKKysgIGlmICghZnhfYWRkc3kpCisrICAgIGZpeFAtPmZ4X2RvbmUgPSBUUlVFOworKworKyAgaWYgKGZpeFAtPmZ4X3BjcmVsKQorKyAgICB7CisrICAgICAgaWYgKGZ4X2FkZHN5ICE9IE5VTEwKKysJICAmJiBTX0lTX0RFRklORUQoZnhfYWRkc3kpCisrCSAgJiYgU19HRVRfU0VHTUVOVChmeF9hZGRzeSkgIT0gdGhpc19zZWdtZW50KQorKwl2YWx1ZSArPSBtZF9wY3JlbF9mcm9tX3NlY3Rpb24oZml4UCwgdGhpc19zZWdtZW50KTsKKysKKysgICAgICBzd2l0Y2ggKGZpeFAtPmZ4X3JfdHlwZSkKKysJeworKwljYXNlIEJGRF9SRUxPQ18zMjoKKysJICBmaXhQLT5meF9yX3R5cGUgPSBCRkRfUkVMT0NfMzJfUENSRUw7CisrCSAgYnJlYWs7CisrCWNhc2UgQkZEX1JFTE9DXzE2OgorKwkgIGZpeFAtPmZ4X3JfdHlwZSA9IEJGRF9SRUxPQ18xNl9QQ1JFTDsKKysJICBicmVhazsKKysJY2FzZSBCRkRfUkVMT0NfODoKKysJICBmaXhQLT5meF9yX3R5cGUgPSBCRkRfUkVMT0NfOF9QQ1JFTDsKKysJICBicmVhazsKKysJY2FzZSBCRkRfUkVMT0NfQVZSMzJfU1VCNToKKysJICBmaXhQLT5meF9yX3R5cGUgPSBCRkRfUkVMT0NfQVZSMzJfMTZOX1BDUkVMOworKwkgIGJyZWFrOworKwljYXNlIEJGRF9SRUxPQ19BVlIzMl8xNlM6CisrCSAgZml4UC0+Znhfcl90eXBlID0gQkZEX1JFTE9DX0FWUjMyXzE2Ql9QQ1JFTDsKKysJICBicmVhazsKKysJY2FzZSBCRkRfUkVMT0NfQVZSMzJfMTRVVzoKKysJICBmaXhQLT5meF9yX3R5cGUgPSBCRkRfUkVMT0NfQVZSMzJfMTRVV19QQ1JFTDsKKysJICBicmVhazsKKysJY2FzZSBCRkRfUkVMT0NfQVZSMzJfMTBVVzoKKysJICBmaXhQLT5meF9yX3R5cGUgPSBCRkRfUkVMT0NfQVZSMzJfMTBVV19QQ1JFTDsKKysJICBicmVhazsKKysJZGVmYXVsdDoKKysJICAvKiBTaG91bGQgaGF2ZSBiZWVuIHRha2VuIGNhcmUgb2YgYWxyZWFkeSAqLworKwkgIGJyZWFrOworKwl9CisrICAgIH0KKysKKysgIGlmIChmaXhQLT5meF9kb25lIHx8IGFwcGx5KQorKyAgICB7CisrICAgICAgY29uc3Qgc3RydWN0IGF2cjMyX2lmaWVsZCAqaWZpZWxkOworKyAgICAgIGNoYXIgKmJ1ZiA9IGZpeFAtPmZ4X3doZXJlICsgZml4UC0+ZnhfZnJhZy0+ZnJfbGl0ZXJhbDsKKysKKysgICAgICBpZiAoZml4UC0+ZnhfZG9uZSkKKysJdmFsdWUgKz0gZnhfb2Zmc2V0OworKworKyAgICAgIC8qIEZvciBob3N0cyB3aXRoIGxvbmdzIGJpZ2dlciB0aGFuIDMyLWJpdHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRvcAorKyAgICAgICAgIGJpdHMgb2YgYSAzMi1iaXQgbmVnYXRpdmUgdmFsdWUgcmVhZCBpbiBieSB0aGUgcGFyc2VyIGFyZSBzZXQsCisrICAgICAgICAgc28gdGhhdCB0aGUgY29ycmVjdCBjb21wYXJpc29ucyBhcmUgbWFkZS4gICovCisrICAgICAgaWYgKHZhbHVlICYgMHg4MDAwMDAwMCkKKysgICAgICAgIHZhbHVlIHw9ICgtMUwgPDwgMzEpOworKworKyAgICAgIHN3aXRjaCAoZml4UC0+Znhfcl90eXBlKQorKwl7CisrCWNhc2UgQkZEX1JFTE9DXzMyOgorKwljYXNlIEJGRF9SRUxPQ18xNjoKKysJY2FzZSBCRkRfUkVMT0NfODoKKysJY2FzZSBCRkRfUkVMT0NfQVZSMzJfRElGRjMyOgorKwljYXNlIEJGRF9SRUxPQ19BVlIzMl9ESUZGMTY6CisrCWNhc2UgQkZEX1JFTE9DX0FWUjMyX0RJRkY4OgorKwkgIG1kX251bWJlcl90b19jaGFycyhidWYsIHZhbHVlLCBmaXhQLT5meF9zaXplKTsKKysJICBicmVhazsKKysJY2FzZSBCRkRfUkVMT0NfSEkxNjoKKysJICB2YWx1ZSA+Pj0gMTY7CisrCWNhc2UgQkZEX1JFTE9DX0xPMTY6CisrCSAgdmFsdWUgJj0gMHhmZmZmOworKwkgIG1kX251bWJlcl90b19jaGFycyhidWYgKyAyLCB2YWx1ZSwgMik7CisrCSAgYnJlYWs7CisrCWNhc2UgQkZEX1JFTE9DX0FWUjMyXzE2Tl9QQ1JFTDoKKysJICB2YWx1ZSA9IC12YWx1ZTsKKysJICAvKiBmYWxsIHRocm91Z2ggKi8KKysJY2FzZSBCRkRfUkVMT0NfQVZSMzJfMjJIX1BDUkVMOgorKwljYXNlIEJGRF9SRUxPQ19BVlIzMl8xOFdfUENSRUw6CisrCWNhc2UgQkZEX1JFTE9DX0FWUjMyXzE2Ql9QQ1JFTDoKKysJY2FzZSBCRkRfUkVMT0NfQVZSMzJfMTFIX1BDUkVMOgorKwljYXNlIEJGRF9SRUxPQ19BVlIzMl85SF9QQ1JFTDoKKysJY2FzZSBCRkRfUkVMT0NfQVZSMzJfOVVXX1BDUkVMOgorKwljYXNlIEJGRF9SRUxPQ19BVlIzMl8zVToKKysJY2FzZSBCRkRfUkVMT0NfQVZSMzJfNFVIOgorKwljYXNlIEJGRF9SRUxPQ19BVlIzMl82VVc6CisrCWNhc2UgQkZEX1JFTE9DX0FWUjMyXzZTOgorKwljYXNlIEJGRF9SRUxPQ19BVlIzMl83VVc6CisrCWNhc2UgQkZEX1JFTE9DX0FWUjMyXzhTX0VYVDoKKysJY2FzZSBCRkRfUkVMT0NfQVZSMzJfOFM6CisrCWNhc2UgQkZEX1JFTE9DX0FWUjMyXzEwVVc6CisrCWNhc2UgQkZEX1JFTE9DX0FWUjMyXzEwU1c6CisrCWNhc2UgQkZEX1JFTE9DX0FWUjMyX1NUSEhfVzoKKysJY2FzZSBCRkRfUkVMT0NfQVZSMzJfMTRVVzoKKysJY2FzZSBCRkRfUkVMT0NfQVZSMzJfMTZTOgorKwljYXNlIEJGRF9SRUxPQ19BVlIzMl8xNlU6CisrCWNhc2UgQkZEX1JFTE9DX0FWUjMyXzIxUzoKKysJY2FzZSBCRkRfUkVMT0NfQVZSMzJfU1VCNToKKysJY2FzZSBCRkRfUkVMT0NfQVZSMzJfQ1BDQUxMOgorKwljYXNlIEJGRF9SRUxPQ19BVlIzMl8xNl9DUDoKKysJY2FzZSBCRkRfUkVMT0NfQVZSMzJfOVdfQ1A6CisrCWNhc2UgQkZEX1JFTE9DX0FWUjMyXzE1UzoKKysJICBpZmllbGQgPSBmaXhQLT50Y19maXhfZGF0YS5pZmllbGQ7CisrCSAgcHJfZGVidWcoImluc2VydCBmaWVsZDogJWxkIDw9ICVsZCA8PSAlbGQgKGFsaWduICV1KVxuIiwKKysJCSAgIGZpeFAtPnRjX2ZpeF9kYXRhLm1pbiwgdmFsdWUsIGZpeFAtPnRjX2ZpeF9kYXRhLm1heCwKKysJCSAgIGZpeFAtPnRjX2ZpeF9kYXRhLmFsaWduKTsKKysJICBpZiAodmFsdWUgPCBmaXhQLT50Y19maXhfZGF0YS5taW4gfHwgdmFsdWUgPiBmaXhQLT50Y19maXhfZGF0YS5tYXgpCisrCSAgICBhc19iYWRfd2hlcmUoZml4UC0+ZnhfZmlsZSwgZml4UC0+ZnhfbGluZSwKKysJCQkgXygib3BlcmFuZCBvdXQgb2YgcmFuZ2UgKCVsZCBub3QgYmV0d2VlbiAlbGQgYW5kICVsZCkiKSwKKysJCQkgdmFsdWUsIGZpeFAtPnRjX2ZpeF9kYXRhLm1pbiwgZml4UC0+dGNfZml4X2RhdGEubWF4KTsKKysJICBpZiAodmFsdWUgJiAoKDEgPDwgZml4UC0+dGNfZml4X2RhdGEuYWxpZ24pIC0gMSkpCisrCSAgICBhc19iYWRfd2hlcmUoZml4UC0+ZnhfZmlsZSwgZml4UC0+ZnhfbGluZSwKKysJCQkgXygibWlzYWxpZ25lZCBvcGVyYW5kIChyZXF1aXJlZCBhbGlnbm1lbnQ6ICVkKSIpLAorKwkJCSAxIDw8IGZpeFAtPnRjX2ZpeF9kYXRhLmFsaWduKTsKKysJICBpZmllbGQtPmluc2VydChpZmllbGQsIGJ1ZiwgdmFsdWUgPj4gZml4UC0+dGNfZml4X2RhdGEuYWxpZ24pOworKwkgIGJyZWFrOworKwljYXNlIEJGRF9SRUxPQ19BVlIzMl9BTElHTjoKKysJICAvKiBOb3RoaW5nIHRvIGRvICovCisrCSAgZml4UC0+ZnhfZG9uZSA9IEZBTFNFOworKwkgIGJyZWFrOworKwlkZWZhdWx0OgorKwkgIGFzX2ZhdGFsKCJyZWxvYyB0eXBlICVzIG5vdCBoYW5kbGVkXG4iLAorKwkJICAgYmZkX2dldF9yZWxvY19jb2RlX25hbWUoZml4UC0+Znhfcl90eXBlKSk7CisrCX0KKysgICAgfQorKworKyAgZml4UC0+ZnhfYWRkc3kgPSBmeF9hZGRzeTsKKysgIGZpeFAtPmZ4X3N1YnN5ID0gZnhfc3Vic3k7CisrICBmaXhQLT5meF9vZmZzZXQgPSBmeF9vZmZzZXQ7CisrCisrICBpZiAoIWZpeFAtPmZ4X2RvbmUpCisrICAgIHsKKysgICAgICBpZiAoIWZpeFAtPmZ4X2FkZHN5KQorKwlmaXhQLT5meF9hZGRzeSA9IGFic19zZWN0aW9uX3N5bTsKKysKKysgICAgICBzeW1ib2xfbWFya191c2VkX2luX3JlbG9jKGZpeFAtPmZ4X2FkZHN5KTsKKysgICAgICBpZiAoZml4UC0+Znhfc3Vic3kpCisrCWFib3J0KCk7CisrICAgIH0KKyt9CisrCisrI2lmIDAKKyt2b2lkCisrbWRfYXBwbHlfZml4MyAoZml4UyAqZml4UCwgdmFsdWVUICp2YWxQLCBzZWdUIHNlZykKKyt7CisrICBjb25zdCBzdHJ1Y3QgYXZyMzJfaWZpZWxkICppZmllbGQ7CisrICBvZmZzZXRUCXZhbHVlID0gKnZhbFA7CisrICBjaGFyCQkqYnVmID0gZml4UC0+Znhfd2hlcmUgKyBmaXhQLT5meF9mcmFnLT5mcl9saXRlcmFsOworKyAgYmZkX2Jvb2xlYW4JYXBwbHk7CisrCisrICBwcl9kZWJ1ZygiJXM6JXU6IGFwcGx5X2ZpeDM6IHJfdHlwZT0lZCB2YWx1ZT0lbHggb2Zmc2V0PSVseFxuIiwKKysJICAgZml4UC0+ZnhfZmlsZSwgZml4UC0+ZnhfbGluZSwgZml4UC0+Znhfcl90eXBlLCAqdmFsUCwKKysJICAgZml4UC0+Znhfb2Zmc2V0KTsKKysKKysgIGlmIChmaXhQLT5meF9yX3R5cGUgPj0gQkZEX1JFTE9DX1VOVVNFRCkKKysgICAgeworKyAgICAgIGFzX2JhZF93aGVyZShmaXhQLT5meF9maWxlLCBmaXhQLT5meF9saW5lLAorKwkJICAgXygiQmFkIHJlbG9jYXRpb24gdHlwZSAlZFxuIiksIGZpeFAtPmZ4X3JfdHlwZSk7CisrICAgICAgcmV0dXJuOworKyAgICB9CisrCisrICBpZiAoIWZpeFAtPmZ4X2FkZHN5ICYmICFmaXhQLT5meF9zdWJzeSkKKysgICAgZml4UC0+ZnhfZG9uZSA9IDE7CisrCisrICBpZiAoZml4UC0+ZnhfcGNyZWwpCisrICAgIHsKKysgICAgICBpZiAoZml4UC0+ZnhfYWRkc3kgIT0gTlVMTAorKwkgICYmIFNfSVNfREVGSU5FRChmaXhQLT5meF9hZGRzeSkKKysJICAmJiBTX0dFVF9TRUdNRU5UKGZpeFAtPmZ4X2FkZHN5KSAhPSBzZWcpCisrCXZhbHVlICs9IG1kX3BjcmVsX2Zyb21fc2VjdGlvbihmaXhQLCBzZWcpOworKworKyAgICAgIHN3aXRjaCAoZml4UC0+Znhfcl90eXBlKQorKwl7CisrCWNhc2UgQkZEX1JFTE9DXzMyOgorKwkgIGZpeFAtPmZ4X3JfdHlwZSA9IEJGRF9SRUxPQ18zMl9QQ1JFTDsKKysJICBicmVhazsKKysJY2FzZSBCRkRfUkVMT0NfMTY6CisrCWNhc2UgQkZEX1JFTE9DXzg6CisrCSAgYXNfYmFkX3doZXJlIChmaXhQLT5meF9maWxlLCBmaXhQLT5meF9saW5lLAorKwkJCV8oIjgtIGFuZCAxNi1iaXQgUEMtcmVsYXRpdmUgcmVsb2NhdGlvbnMgbm90IHN1cHBvcnRlZCIpKTsKKysJICBicmVhazsKKysJY2FzZSBCRkRfUkVMT0NfQVZSMzJfU1VCNToKKysJICBmaXhQLT5meF9yX3R5cGUgPSBCRkRfUkVMT0NfQVZSMzJfUENSRUxfU1VCNTsKKysJICBicmVhazsKKysJY2FzZSBCRkRfUkVMT0NfQVZSMzJfMTZTOgorKwkgIGZpeFAtPmZ4X3JfdHlwZSA9IEJGRF9SRUxPQ19BVlIzMl8xNl9QQ1JFTDsKKysJICBicmVhazsKKysJZGVmYXVsdDoKKysJICAvKiBTaG91bGQgaGF2ZSBiZWVuIHRha2VuIGNhcmUgb2YgYWxyZWFkeSAqLworKwkgIGJyZWFrOworKwl9CisrICAgIH0KKysKKysgIGlmIChmaXhQLT5meF9yX3R5cGUgPT0gQkZEX1JFTE9DXzMyCisrICAgICAgJiYgZml4UC0+Znhfc3Vic3kpCisrICAgIHsKKysgICAgICBmaXhQLT5meF9yX3R5cGUgPSBCRkRfUkVMT0NfQVZSMzJfRElGRjMyOworKworKyAgICAgIC8qIE9mZnNldHMgYXJlIG9ubHkgYWxsb3dlZCBpZiBpdCdzIGEgcmVzdWx0IG9mIGFkanVzdGluZyBhCisrCSBsb2NhbCBzeW1ib2wgaW50byBhIHNlY3Rpb24tcmVsYXRpdmUgb2Zmc2V0LgorKwkgdGNfZml4X2FkanVzdGFibGUoKSBzaG91bGQgcHJldmVudCBhbnkgYWRqdXN0bWVudCBpZiB0aGVyZQorKwkgd2FzIGFuIG9mZnNldCBpbnZvbHZlZCBiZWZvcmUuICAqLworKyAgICAgIGlmIChmaXhQLT5meF9vZmZzZXQgJiYgIXN5bWJvbF9zZWN0aW9uX3AoZml4UC0+ZnhfYWRkc3kpKQorKwlhc19iYWRfd2hlcmUoZml4UC0+ZnhfZmlsZSwgZml4UC0+ZnhfbGluZSwKKysJCSAgICAgXygiY2Fubm90IHJlcHJlc2VudCBzeW1ib2wgZGlmZmVyZW5jZSB3aXRoIGFuIG9mZnNldCIpKTsKKysKKysgICAgICB2YWx1ZSA9IChTX0dFVF9WQUxVRShmaXhQLT5meF9hZGRzeSkgKyBmaXhQLT5meF9vZmZzZXQKKysJICAgICAgIC0gU19HRVRfVkFMVUUoZml4UC0+Znhfc3Vic3kpKTsKKysKKysgICAgICAvKiBUaGUgZGlmZmVyZW5jZSBiZWZvcmUgYW55IHJlbGF4aW5nIHRha2VzIHBsYWNlIGlzIHdyaXR0ZW4KKysJIG91dCwgYW5kIHRoZSBESUZGMzIgcmVsb2MgaWRlbnRpZmllcyB0aGUgYWRkcmVzcyBvZiB0aGUgZmlyc3QKKysJIHN5bWJvbCAoaS5lLiB0aGUgb24gdGhhdCdzIHN1YnRyYWN0ZWQuKSAgKi8KKysgICAgICAqdmFsUCA9IHZhbHVlOworKyAgICAgIGZpeFAtPmZ4X29mZnNldCAtPSB2YWx1ZTsKKysgICAgICBmaXhQLT5meF9zdWJzeSA9IE5VTEw7CisrCisrICAgICAgbWRfbnVtYmVyX3RvX2NoYXJzKGJ1ZiwgdmFsdWUsIGZpeFAtPmZ4X3NpemUpOworKyAgICB9CisrCisrICBpZiAoZml4UC0+ZnhfZG9uZSkKKysgICAgeworKyAgICAgIHN3aXRjaCAoZml4UC0+Znhfcl90eXBlKQorKwl7CisrCWNhc2UgQkZEX1JFTE9DXzg6CisrCWNhc2UgQkZEX1JFTE9DXzE2OgorKwljYXNlIEJGRF9SRUxPQ18zMjoKKysJICBtZF9udW1iZXJfdG9fY2hhcnMoYnVmLCB2YWx1ZSwgZml4UC0+Znhfc2l6ZSk7CisrCSAgYnJlYWs7CisrCWNhc2UgQkZEX1JFTE9DX0hJMTY6CisrCSAgdmFsdWUgPj49IDE2OworKwljYXNlIEJGRF9SRUxPQ19MTzE2OgorKwkgIHZhbHVlICY9IDB4ZmZmZjsKKysJICAqdmFsUCA9IHZhbHVlOworKwkgIG1kX251bWJlcl90b19jaGFycyhidWYgKyAyLCB2YWx1ZSwgMik7CisrCSAgYnJlYWs7CisrCWNhc2UgQkZEX1JFTE9DX0FWUjMyX1BDUkVMX1NVQjU6CisrCSAgdmFsdWUgPSAtdmFsdWU7CisrCSAgLyogZmFsbCB0aHJvdWdoICovCisrCWNhc2UgQkZEX1JFTE9DX0FWUjMyXzlfUENSRUw6CisrCWNhc2UgQkZEX1JFTE9DX0FWUjMyXzExX1BDUkVMOgorKwljYXNlIEJGRF9SRUxPQ19BVlIzMl8xNl9QQ1JFTDoKKysJY2FzZSBCRkRfUkVMT0NfQVZSMzJfMThfUENSRUw6CisrCWNhc2UgQkZEX1JFTE9DX0FWUjMyXzIyX1BDUkVMOgorKwljYXNlIEJGRF9SRUxPQ19BVlIzMl8zVToKKysJY2FzZSBCRkRfUkVMT0NfQVZSMzJfNFVIOgorKwljYXNlIEJGRF9SRUxPQ19BVlIzMl82VVc6CisrCWNhc2UgQkZEX1JFTE9DX0FWUjMyXzZTOgorKwljYXNlIEJGRF9SRUxPQ19BVlIzMl83VVc6CisrCWNhc2UgQkZEX1JFTE9DX0FWUjMyXzhTOgorKwljYXNlIEJGRF9SRUxPQ19BVlIzMl8xMFVXOgorKwljYXNlIEJGRF9SRUxPQ19BVlIzMl8xMFNXOgorKwljYXNlIEJGRF9SRUxPQ19BVlIzMl8xNFVXOgorKwljYXNlIEJGRF9SRUxPQ19BVlIzMl8xNlM6CisrCWNhc2UgQkZEX1JFTE9DX0FWUjMyXzE2VToKKysJY2FzZSBCRkRfUkVMT0NfQVZSMzJfMjFTOgorKwljYXNlIEJGRF9SRUxPQ19BVlIzMl9CUkMxOgorKwljYXNlIEJGRF9SRUxPQ19BVlIzMl9TVUI1OgorKwljYXNlIEJGRF9SRUxPQ19BVlIzMl9DUENBTEw6CisrCWNhc2UgQkZEX1JFTE9DX0FWUjMyXzE2X0NQOgorKwljYXNlIEJGRF9SRUxPQ19BVlIzMl85X0NQOgorKwljYXNlIEJGRF9SRUxPQ19BVlIzMl8xNVM6CisrCSAgaWZpZWxkID0gZml4UC0+dGNfZml4X2RhdGEuaWZpZWxkOworKwkgIHByX2RlYnVnKCJpbnNlcnQgZmllbGQ6ICVsZCA8PSAlbGQgPD0gJWxkIChhbGlnbiAldSlcbiIsCisrCQkgICBmaXhQLT50Y19maXhfZGF0YS5taW4sIHZhbHVlLCBmaXhQLT50Y19maXhfZGF0YS5tYXgsCisrCQkgICBmaXhQLT50Y19maXhfZGF0YS5hbGlnbik7CisrCSAgaWYgKHZhbHVlIDwgZml4UC0+dGNfZml4X2RhdGEubWluIHx8IHZhbHVlID4gZml4UC0+dGNfZml4X2RhdGEubWF4KQorKwkgICAgYXNfYmFkX3doZXJlKGZpeFAtPmZ4X2ZpbGUsIGZpeFAtPmZ4X2xpbmUsCisrCQkJIF8oIm9wZXJhbmQgb3V0IG9mIHJhbmdlICglbGQgbm90IGJldHdlZW4gJWxkIGFuZCAlbGQpIiksCisrCQkJIHZhbHVlLCBmaXhQLT50Y19maXhfZGF0YS5taW4sIGZpeFAtPnRjX2ZpeF9kYXRhLm1heCk7CisrCSAgaWYgKHZhbHVlICYgKCgxIDw8IGZpeFAtPnRjX2ZpeF9kYXRhLmFsaWduKSAtIDEpKQorKwkgICAgYXNfYmFkX3doZXJlKGZpeFAtPmZ4X2ZpbGUsIGZpeFAtPmZ4X2xpbmUsCisrCQkJIF8oIm1pc2FsaWduZWQgb3BlcmFuZCAocmVxdWlyZWQgYWxpZ25tZW50OiAlZCkiKSwKKysJCQkgMSA8PCBmaXhQLT50Y19maXhfZGF0YS5hbGlnbik7CisrCSAgaWZpZWxkLT5pbnNlcnQoaWZpZWxkLCBidWYsIHZhbHVlID4+IGZpeFAtPnRjX2ZpeF9kYXRhLmFsaWduKTsKKysJICBicmVhazsKKysJY2FzZSBCRkRfUkVMT0NfQVZSMzJfQUxJR046CisrCSAgLyogTm90aGluZyB0byBkbyAqLworKwkgIGZpeFAtPmZ4X2RvbmUgPSBGQUxTRTsKKysJICBicmVhazsKKysJZGVmYXVsdDoKKysJICBhc19mYXRhbCgicmVsb2MgdHlwZSAlcyBub3QgaGFuZGxlZFxuIiwKKysJCSAgIGJmZF9nZXRfcmVsb2NfY29kZV9uYW1lKGZpeFAtPmZ4X3JfdHlwZSkpOworKwl9CisrICAgIH0KKyt9CisrI2VuZGlmCisrCisrYXJlbGVudCAqCisrdGNfZ2VuX3JlbG9jIChhc2VjdGlvbiAqc2VjdGlvbiBBVFRSSUJVVEVfVU5VU0VELAorKwkgICAgICBmaXhTICpmaXhwKQorK3sKKysgIGFyZWxlbnQgKnJlbG9jOworKyAgYmZkX3JlbG9jX2NvZGVfcmVhbF90eXBlIGNvZGU7CisrCisrICByZWxvYyA9IHhtYWxsb2MgKHNpemVvZiAoYXJlbGVudCkpOworKworKyAgcmVsb2MtPnN5bV9wdHJfcHRyID0geG1hbGxvYyAoc2l6ZW9mIChhc3ltYm9sICopKTsKKysgICpyZWxvYy0+c3ltX3B0cl9wdHIgPSBzeW1ib2xfZ2V0X2JmZHN5bSAoZml4cC0+ZnhfYWRkc3kpOworKyAgcmVsb2MtPmFkZHJlc3MgPSBmaXhwLT5meF9mcmFnLT5mcl9hZGRyZXNzICsgZml4cC0+Znhfd2hlcmU7CisrICByZWxvYy0+YWRkZW5kID0gZml4cC0+Znhfb2Zmc2V0OworKyAgY29kZSA9IGZpeHAtPmZ4X3JfdHlwZTsKKysKKysgIHJlbG9jLT5ob3d0byA9IGJmZF9yZWxvY190eXBlX2xvb2t1cCAoc3Rkb3V0cHV0LCBjb2RlKTsKKysKKysgIGlmIChyZWxvYy0+aG93dG8gPT0gTlVMTCkKKysgICAgeworKyAgICAgIGFzX2JhZF93aGVyZSAoZml4cC0+ZnhfZmlsZSwgZml4cC0+ZnhfbGluZSwKKysJCSAgICBfKCJjYW5ub3QgcmVwcmVzZW50IHJlbG9jYXRpb24gJXMgaW4gdGhpcyBvYmplY3QgZmlsZSBmb3JtYXQiKSwKKysJCSAgICBiZmRfZ2V0X3JlbG9jX2NvZGVfbmFtZSAoY29kZSkpOworKyAgICAgIHJldHVybiBOVUxMOworKyAgICB9CisrCisrICByZXR1cm4gcmVsb2M7CisrfQorKworK2JmZF9ib29sZWFuCisrYXZyMzJfZm9yY2VfcmVsb2MoZml4UyAqZml4UCkKKyt7CisrICBpZiAobGlua3JlbGF4ICYmIGZpeFAtPmZ4X2FkZHN5CisrICAgICAgJiYgIShTX0dFVF9TRUdNRU5UKGZpeFAtPmZ4X2FkZHN5KS0+ZmxhZ3MgJiBTRUNfREVCVUdHSU5HKQorKyAgICAgICYmIFNfR0VUX1NFR01FTlQoZml4UC0+ZnhfYWRkc3kpICE9IGFic29sdXRlX3NlY3Rpb24pCisrICAgIHsKKysgICAgICBwcl9kZWJ1ZyhzdGRlcnIsICJmb3JjZSByZWxvYzogYWRkc3k9JXAsIHJfdHlwZT0lZCwgc2VjPSVzXG4iLAorKwkgICAgICAgZml4UC0+ZnhfYWRkc3ksIGZpeFAtPmZ4X3JfdHlwZSwgU19HRVRfU0VHTUVOVChmaXhQLT5meF9hZGRzeSktPm5hbWUpOworKyAgICAgIHJldHVybiAxOworKyAgICB9CisrCisrICByZXR1cm4gZ2VuZXJpY19mb3JjZV9yZWxvYyhmaXhQKTsKKyt9CisrCisrYmZkX2Jvb2xlYW4KKythdnIzMl9maXhfYWRqdXN0YWJsZShmaXhTICpmaXhQKQorK3sKKysgIHN3aXRjaCAoZml4UC0+Znhfcl90eXBlKQorKyAgICB7CisrICAgICAgLyogR09UIHJlbG9jYXRpb25zIGNhbid0IGhhdmUgYWRkZW5kcyBzaW5jZSBCRkQgdHJlYXRzIGFsbAorKwkgcmVmZXJlbmNlcyB0byBhIGdpdmVuIHN5bWJvbCB0aGUgc2FtZS4gVGhpcyBtZWFucyB0aGF0IHdlCisrCSBtdXN0IGF2b2lkIHNlY3Rpb24tcmVsYXRpdmUgcmVmZXJlbmNlcyB0byBsb2NhbCBzeW1ib2xzIHdoZW4KKysJIGRlYWxpbmcgd2l0aCB0aGVzZSBraW5kcyBvZiByZWxvY3MgKi8KKysgICAgY2FzZSBCRkRfUkVMT0NfQVZSMzJfR09UMzI6CisrICAgIGNhc2UgQkZEX1JFTE9DX0FWUjMyX0dPVDE2OgorKyAgICBjYXNlIEJGRF9SRUxPQ19BVlIzMl9HT1Q4OgorKyAgICBjYXNlIEJGRF9SRUxPQ19BVlIzMl9HT1QyMVM6CisrICAgIGNhc2UgQkZEX1JFTE9DX0FWUjMyX0dPVDE4U1c6CisrICAgIGNhc2UgQkZEX1JFTE9DX0FWUjMyX0dPVDE2UzoKKysgICAgY2FzZSBCRkRfUkVMT0NfQVZSMzJfTERBX0dPVDoKKysgICAgY2FzZSBCRkRfUkVMT0NfQVZSMzJfR09UQ0FMTDoKKysgICAgICBwcl9kZWJ1ZygiZml4IG5vdCBhZGp1c3RhYmxlXG4iKTsKKysgICAgICByZXR1cm4gMDsKKysKKysgICAgZGVmYXVsdDoKKysgICAgICBicmVhazsKKysgICAgfQorKworKyAgcmV0dXJuIDE7CisrfQorKworKy8qIFdoZW4gd2Ugd2FudCB0aGUgbGlua2VyIHRvIGJlIGFibGUgdG8gcmVsYXggdGhlIGNvZGUsIHdlIG5lZWQgdG8KKysgICBvdXRwdXQgYSByZWxvYyBmb3IgZXZlcnkgLmFsaWduIGRpcmVjdGl2ZSByZXF1ZXN0aW5nIGFuIGFsaWdubWVudAorKyAgIHRvIGEgZm91ciBieXRlIGJvdW5kYXJ5IG9yIGxhcmdlci4gIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZSBsaW5rZXIKKysgICBjYW4ndCBndWFyYW50ZWUgdGhhdCB0aGUgYWxpZ25tZW50IGlzIGFjdHVhbGx5IG1haW50YWluZWQgaW4gdGhlCisrICAgbGlua2VyIG91dHB1dC4KKysKKysgICBUT0RPOiBNaWdodCBhcyB3ZWxsIGluc2VydCBwcm9wZXIgTk9QcyB3aGlsZSB3ZSdyZSBhdCBpdC4uLiAqLworK3ZvaWQKKythdnIzMl9oYW5kbGVfYWxpZ24oZnJhZ1MgKmZyYWcpCisreworKyAgaWYgKGxpbmtyZWxheAorKyAgICAgICYmIGZyYWctPmZyX3R5cGUgPT0gcnNfYWxpZ25fY29kZQorKyAgICAgICYmIGZyYWctPmZyX2FkZHJlc3MgKyBmcmFnLT5mcl9maXggPiAwCisrICAgICAgJiYgZnJhZy0+ZnJfb2Zmc2V0ID4gMCkKKysgICAgeworKyAgICAgIC8qIFRoZSBhbGlnbm1lbnQgb3JkZXIgKGZyX29mZnNldCkgaXMgc3RvcmVkIGluIHRoZSBhZGRlbmQuICovCisrICAgICAgZml4X25ldyhmcmFnLCBmcmFnLT5mcl9maXgsIDIsICZhYnNfc3ltYm9sLCBmcmFnLT5mcl9vZmZzZXQsCisrCSAgICAgIEZBTFNFLCBCRkRfUkVMT0NfQVZSMzJfQUxJR04pOworKyAgICB9CisrfQorKworKy8qIFJlbGF4X2FsaWduLiBBZHZhbmNlIGxvY2F0aW9uIGNvdW50ZXIgdG8gbmV4dCBhZGRyZXNzIHRoYXQgaGFzICdhbGlnbm1lbnQnCisrICAgbG93ZXN0IG9yZGVyIGJpdHMgYWxsIDBzLCByZXR1cm4gc2l6ZSBvZiBhZGp1c3RtZW50IG1hZGUuICAqLworK3JlbGF4X2FkZHJlc3NUCisrYXZyMzJfcmVsYXhfYWxpZ24oc2VnVCBzZWdtZW50IEFUVFJJQlVURV9VTlVTRUQsCisrCQkgIGZyYWdTICpmcmFnUCwKKysJCSAgcmVsYXhfYWRkcmVzc1QgYWRkcmVzcykKKyt7CisrICByZWxheF9hZGRyZXNzVCBtYXNrOworKyAgcmVsYXhfYWRkcmVzc1QgbmV3X2FkZHJlc3M7CisrICBpbnQgYWxpZ25tZW50OworKworKyAgYWxpZ25tZW50ID0gZnJhZ1AtPmZyX29mZnNldDsKKysgIG1hc2sgPSB+KCh+MCkgPDwgYWxpZ25tZW50KTsKKysgIG5ld19hZGRyZXNzID0gKGFkZHJlc3MgKyBtYXNrKSAmICh+bWFzayk7CisrCisrICByZXR1cm4gbmV3X2FkZHJlc3MgLSBhZGRyZXNzOworK30KKysKKysvKiBUdXJuIGEgc3RyaW5nIGluIGlucHV0X2xpbmVfcG9pbnRlciBpbnRvIGEgZmxvYXRpbmcgcG9pbnQgY29uc3RhbnQKKysgICBvZiB0eXBlIHR5cGUsIGFuZCBzdG9yZSB0aGUgYXBwcm9wcmlhdGUgYnl0ZXMgaW4gKmxpdFAuICBUaGUgbnVtYmVyCisrICAgb2YgTElUVExFTlVNUyBlbWl0dGVkIGlzIHN0b3JlZCBpbiAqc2l6ZVAgLiAgQW4gZXJyb3IgbWVzc2FnZSBpcworKyAgIHJldHVybmVkLCBvciBOVUxMIG9uIE9LLiAqLworKworKy8qIEVxdWFsIHRvIE1BWF9QUkVDSVNJT04gaW4gYXRvZi1pZWVlLmMgKi8KKysjZGVmaW5lIE1BWF9MSVRUTEVOVU1TIDYKKysKKytjaGFyICoKKyttZF9hdG9mICh0eXBlLCBsaXRQLCBzaXplUCkKKytjaGFyICAgdHlwZTsKKytjaGFyICogbGl0UDsKKytpbnQgKiAgc2l6ZVA7CisreworKyAgaW50ICAgICAgICAgICAgICBpOworKyAgaW50ICAgICAgICAgICAgICBwcmVjOworKyAgTElUVExFTlVNX1RZUEUgICB3b3JkcyBbTUFYX0xJVFRMRU5VTVNdOworKyAgY2hhciAqICAgICAgICAgICB0OworKworKyAgc3dpdGNoICh0eXBlKQorKyAgeworKyAgICBjYXNlICdmJzoKKysgICAgY2FzZSAnRic6CisrICAgIGNhc2UgJ3MnOgorKyAgICBjYXNlICdTJzoKKysgICAgICBwcmVjID0gMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnZCc6CisrICAgIGNhc2UgJ0QnOgorKyAgICBjYXNlICdyJzoKKysgICAgY2FzZSAnUic6CisrICAgICAgcHJlYyA9IDQ7CisrICAgICAgYnJlYWs7CisrCisrICAgICAgLyogRklYTUU6IFNvbWUgdGFyZ2V0cyBhbGxvdyBvdGhlciBmb3JtYXQgY2hhcnMgZm9yIGJpZ2dlciBzaXplcyBoZXJlLiAgKi8KKysKKysgICAgZGVmYXVsdDoKKysgICAgICAqIHNpemVQID0gMDsKKysgICAgICByZXR1cm4gXygiQmFkIGNhbGwgdG8gbWRfYXRvZigpIik7CisrICB9CisrCisrICB0ID0gYXRvZl9pZWVlIChpbnB1dF9saW5lX3BvaW50ZXIsIHR5cGUsIHdvcmRzKTsKKysgIGlmICh0KQorKyAgICBpbnB1dF9saW5lX3BvaW50ZXIgPSB0OworKyAgKiBzaXplUCA9IHByZWMgKiBzaXplb2YgKExJVFRMRU5VTV9UWVBFKTsKKysKKysgIGZvciAoaSA9IDA7IGkgPCBwcmVjOyBpKyspCisrICB7CisrICAgIG1kX251bWJlcl90b19jaGFycyAobGl0UCwgKHZhbHVlVCkgd29yZHNbaV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChMSVRUTEVOVU1fVFlQRSkpOworKyAgICBsaXRQICs9IHNpemVvZiAoTElUVExFTlVNX1RZUEUpOworKyAgfQorKworKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBjaGFyICphdnIzMl9lbmRfb2ZfbWF0Y2goY2hhciAqY29udCwgY2hhciAqd2hhdCkKKyt7CisrICBpbnQgbGVuID0gc3RybGVuICh3aGF0KTsKKysKKysgIGlmICghIGlzX3BhcnRfb2ZfbmFtZSAoY29udFtsZW5dKQorKyAgICAgICYmIHN0cm5jYXNlY21wIChjb250LCB3aGF0LCBsZW4pID09IDApCisrICAgIHJldHVybiBjb250ICsgbGVuOworKworKyAgcmV0dXJuIE5VTEw7CisrfQorKworK2ludAorK2F2cjMyX3BhcnNlX25hbWUgKGNoYXIgY29uc3QgKm5hbWUsIGV4cHJlc3Npb25TICpleHAsIGNoYXIgKm5leHRjaGFyKQorK3sKKysgIGNoYXIgKm5leHQgPSBpbnB1dF9saW5lX3BvaW50ZXI7CisrICBjaGFyICpuZXh0X2VuZDsKKysKKysgIHByX2RlYnVnKCJwYXJzZV9uYW1lOiAlcywgbmV4dGNoYXI9JWMgKCUwMngpXG4iLCBuYW1lLCAqbmV4dGNoYXIsICpuZXh0Y2hhcik7CisrCisrICBpZiAoKm5leHRjaGFyID09ICcoJykKKysgICAgeworKyAgICAgIGlmIChzdHJjYXNlY21wKG5hbWUsICJoaSIpID09IDApCisrCXsKKysJICAqbmV4dCA9ICpuZXh0Y2hhcjsKKysKKysJICBleHByZXNzaW9uKGV4cCk7CisrCisrCSAgaWYgKGV4cC0+WF9vcCA9PSBPX2NvbnN0YW50KQorKwkgICAgeworKwkgICAgICBwcl9kZWJ1ZygiICAtPiBjb25zdGFudCBoaSgweCUwOGx4KSAtPiAweCUwNGx4XG4iLAorKwkJICAgICAgIGV4cC0+WF9hZGRfbnVtYmVyLCBleHAtPlhfYWRkX251bWJlciA+PiAxNik7CisrCSAgICAgIGV4cC0+WF9hZGRfbnVtYmVyID0gKGV4cC0+WF9hZGRfbnVtYmVyID4+IDE2KSAmIDB4ZmZmZjsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIGV4cC0+WF9tZCA9IGV4cC0+WF9vcDsKKysJICAgICAgZXhwLT5YX29wID0gT19oaTsKKysJICAgIH0KKysKKysJICByZXR1cm4gMTsKKysJfQorKyAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAobmFtZSwgImxvIikgPT0gMCkKKysJeworKwkgICpuZXh0ID0gKm5leHRjaGFyOworKworKwkgIGV4cHJlc3Npb24oZXhwKTsKKysKKysJICBpZiAoZXhwLT5YX29wID09IE9fY29uc3RhbnQpCisrCSAgICBleHAtPlhfYWRkX251bWJlciAmPSAweGZmZmY7CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBleHAtPlhfbWQgPSBleHAtPlhfb3A7CisrCSAgICAgIGV4cC0+WF9vcCA9IE9fbG87CisrCSAgICB9CisrCisrCSAgcmV0dXJuIDE7CisrCX0KKysgICAgfQorKyAgZWxzZSBpZiAoKm5leHRjaGFyID09ICdAJykKKysgICAgeworKyAgICAgIGV4cC0+WF9tZCA9IGV4cC0+WF9vcDsKKysKKysgICAgICBpZiAoKG5leHRfZW5kID0gYXZyMzJfZW5kX29mX21hdGNoIChuZXh0ICsgMSwgImdvdCIpKSkKKysJZXhwLT5YX29wID0gT19nb3Q7CisrICAgICAgZWxzZSBpZiAoKG5leHRfZW5kID0gYXZyMzJfZW5kX29mX21hdGNoIChuZXh0ICsgMSwgInRsc2dkIikpKQorKwlleHAtPlhfb3AgPSBPX3Rsc2dkOworKyAgICAgIC8qIEFkZCBtb3JlIGFzIG5lZWRlZCAqLworKyAgICAgIGVsc2UKKysJeworKwkgIGNoYXIgYzsKKysJICBpbnB1dF9saW5lX3BvaW50ZXIrKzsKKysJICBjID0gZ2V0X3N5bWJvbF9lbmQoKTsKKysJICBhc19iYWQgKF8oInVua25vd24gcmVsb2NhdGlvbiBvdmVycmlkZSBgJXMnIiksIG5leHQgKyAxKTsKKysJICAqaW5wdXRfbGluZV9wb2ludGVyID0gYzsKKysJICBpbnB1dF9saW5lX3BvaW50ZXIgPSBuZXh0OworKwkgIHJldHVybiAwOworKwl9CisrCisrICAgICAgZXhwLT5YX29wX3N5bWJvbCA9IE5VTEw7CisrICAgICAgZXhwLT5YX2FkZF9zeW1ib2wgPSBzeW1ib2xfZmluZF9vcl9tYWtlIChuYW1lKTsKKysgICAgICBleHAtPlhfYWRkX251bWJlciA9IDA7CisrCisrICAgICAgKmlucHV0X2xpbmVfcG9pbnRlciA9ICpuZXh0Y2hhcjsKKysgICAgICBpbnB1dF9saW5lX3BvaW50ZXIgPSBuZXh0X2VuZDsKKysgICAgICAqbmV4dGNoYXIgPSAqaW5wdXRfbGluZV9wb2ludGVyOworKyAgICAgICppbnB1dF9saW5lX3BvaW50ZXIgPSAnXDAnOworKyAgICAgIHJldHVybiAxOworKyAgICB9CisrICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICJfR0xPQkFMX09GRlNFVF9UQUJMRV8iKSA9PSAwKQorKyAgICB7CisrICAgICAgaWYgKCFHT1Rfc3ltYm9sKQorKwlHT1Rfc3ltYm9sID0gc3ltYm9sX2ZpbmRfb3JfbWFrZShuYW1lKTsKKysKKysgICAgICBleHAtPlhfYWRkX3N5bWJvbCA9IEdPVF9zeW1ib2w7CisrICAgICAgZXhwLT5YX29wID0gT19zeW1ib2w7CisrICAgICAgZXhwLT5YX2FkZF9udW1iZXIgPSAwOworKyAgICAgIHJldHVybiAxOworKyAgICB9CisrCisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIHZvaWQKKytzX3JzZWcgKGludCB2YWx1ZSBBVFRSSUJVVEVfVU5VU0VEKQorK3sKKysgIC8qIFN5bnRheDogUlNFRyBzZWdtZW50X25hbWUgWzp0eXBlXSBbTk9ST09UfFJPT1RdIFsoYWxpZ24pXQorKyAgICogRGVmYXVsdHM6CisrICAgKiAgLSB0eXBlOiB1bmRvY3VtZW50ZWQgKCJ0eXBpY2FsbHkgQ09ERSBvciBEQVRBIikKKysgICAqICAtIFJPT1QKKysgICAqICAtIGFsaWduOiAxIGZvciBjb2RlLCAwIGZvciBvdGhlcnMKKysgICAqCisrICAgKiBUT0RPOiBOT1JPT1QgaXMgaWdub3JlZC4gSWYgZ2FzIHN1cHBvcnRzIGRpc2NhcmRhYmxlIHNlZ21lbnRzLCBpdCBzaG91bGQKKysgICAqIGJlIGltcGxlbWVudGVkLgorKyAgICovCisrICBjaGFyICpuYW1lLCAqZW5kOworKyAgaW50IGxlbmd0aCwgdHlwZSwgYXR0cjsKKysgIGludCBhbGlnbiA9IDA7CisrCisrICBTS0lQX1dISVRFU1BBQ0UoKTsKKysKKysgIGVuZCA9IGlucHV0X2xpbmVfcG9pbnRlcjsKKysgIHdoaWxlICgwID09IHN0cmNociAoIlxuXHQ7OiggIiwgKmVuZCkpCisrICAgIGVuZCsrOworKyAgaWYgKGVuZCA9PSBpbnB1dF9saW5lX3BvaW50ZXIpCisrICAgIHsKKysgICAgICBhc193YXJuIChfKCJtaXNzaW5nIG5hbWUiKSk7CisrICAgICAgaWdub3JlX3Jlc3Rfb2ZfbGluZSgpOworKyAgICAgIHJldHVybjsKKysgICAgfQorKworKyAgbmFtZSA9IHhtYWxsb2MgKGVuZCAtIGlucHV0X2xpbmVfcG9pbnRlciArIDEpOworKyAgbWVtY3B5IChuYW1lLCBpbnB1dF9saW5lX3BvaW50ZXIsIGVuZCAtIGlucHV0X2xpbmVfcG9pbnRlcik7CisrICBuYW1lW2VuZCAtIGlucHV0X2xpbmVfcG9pbnRlcl0gPSAnXDAnOworKyAgaW5wdXRfbGluZV9wb2ludGVyID0gZW5kOworKworKyAgU0tJUF9XSElURVNQQUNFKCk7CisrCisrICB0eXBlID0gU0hUX05VTEw7CisrICBhdHRyID0gMDsKKysKKysgIGlmICgqaW5wdXRfbGluZV9wb2ludGVyID09ICc6JykKKysgICAgeworKyAgICAgIC8qIFNraXAgdGhlIGNvbG9uICovCisrICAgICAgKytpbnB1dF9saW5lX3BvaW50ZXI7CisrICAgICAgU0tJUF9XSElURVNQQUNFKCk7CisrCisrICAgICAgLyogUG9zc2libGUgb3B0aW9ucyBhdCB0aGlzIHBvaW50OgorKyAgICAgICAqICAgLSBmbGFnIChST09UIG9yIE5PUk9PVCkKKysgICAgICAgKiAgIC0gYSBzZWdtZW50IHR5cGUKKysgICAgICAgKi8KKysgICAgICBlbmQgPSBpbnB1dF9saW5lX3BvaW50ZXI7CisrICAgICAgd2hpbGUgKDAgPT0gc3RyY2hyICgiXG5cdDs6KCAiLCAqZW5kKSkKKysJZW5kKys7CisrICAgICAgbGVuZ3RoID0gZW5kIC0gaW5wdXRfbGluZV9wb2ludGVyOworKyAgICAgIGlmICgoKGxlbmd0aCA9PSA0KSAmJiAoMCA9PSBzdHJuY2FzZWNtcCggaW5wdXRfbGluZV9wb2ludGVyLCAiUk9PVCIsIDQpKSkgfHwKKysJICAoKGxlbmd0aCA9PSA2KSAmJiAoMCA9PSBzdHJuY2FzZWNtcCggaW5wdXRfbGluZV9wb2ludGVyLCAiTk9ST09UIiwgNikpKSkKKysJeworKwkgIC8qIElnbm9yZSBST09UL05PUk9PVCAqLworKwkgIGlucHV0X2xpbmVfcG9pbnRlciA9IGVuZDsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8qIE11c3QgYmUgYSBzZWdtZW50IHR5cGUgKi8KKysJICBzd2l0Y2ggKCppbnB1dF9saW5lX3BvaW50ZXIpCisrCSAgICB7CisrCSAgICBjYXNlICdDJzoKKysJICAgIGNhc2UgJ2MnOgorKwkgICAgICBpZiAoKGxlbmd0aCA9PSA0KSAmJgorKwkJICAoMCA9PSBzdHJuY2FzZWNtcCAoaW5wdXRfbGluZV9wb2ludGVyLCAiQ09ERSIsIDQpKSkKKysJCXsKKysJCSAgYXR0ciB8PSBTSEZfQUxMT0MgfCBTSEZfRVhFQ0lOU1RSOworKwkJICB0eXBlID0gU0hUX1BST0dCSVRTOworKwkJICBhbGlnbiA9IDE7CisrCQkgIGJyZWFrOworKwkJfQorKwkgICAgICBpZiAoKGxlbmd0aCA9PSA1KSAmJgorKwkJICAoMCA9PSBzdHJuY2FzZWNtcCAoaW5wdXRfbGluZV9wb2ludGVyLCAiQ09OU1QiLCA1KSkpCisrCQl7CisrCQkgIGF0dHIgfD0gU0hGX0FMTE9DOworKwkJICB0eXBlID0gU0hUX1BST0dCSVRTOworKwkJICBicmVhazsKKysJCX0KKysJICAgICAgZ290byBkZV9mYXVsdDsKKysKKysJICAgIGNhc2UgJ0QnOgorKwkgICAgY2FzZSAnZCc6CisrCSAgICAgIGlmICgobGVuZ3RoID09IDQpICYmCisrCQkgICgwID09IHN0cm5jYXNlY21wIChpbnB1dF9saW5lX3BvaW50ZXIsICJEQVRBIiwgNCkpKQorKwkJeworKwkJICBhdHRyIHw9IFNIRl9BTExPQyB8IFNIRl9XUklURTsKKysJCSAgdHlwZSA9IFNIVF9QUk9HQklUUzsKKysJCSAgYnJlYWs7CisrCQl9CisrCSAgICAgIGdvdG8gZGVfZmF1bHQ7CisrCisrCSAgICAgIC8qIFRPRE86IEFkZCBGQVIqLCBIVUdFKiwgSURBVEEgYW5kIE5FQVIqIGlmIG5lY2Vzc2FyeSAqLworKworKwkgICAgY2FzZSAnVSc6CisrCSAgICBjYXNlICd1JzoKKysJICAgICAgaWYgKChsZW5ndGggPT0gNykgJiYKKysJCSAgKDAgPT0gc3RybmNhc2VjbXAgKGlucHV0X2xpbmVfcG9pbnRlciwgIlVOVFlQRUQiLCA3KSkpCisrCQlicmVhazsKKysJICAgICAgZ290byBkZV9mYXVsdDsKKysKKysJICAgICAgLyogVE9ETzogQWRkIFhEQVRBIGFuZCBaUEFHRSBpZiBuZWNlc3NhcnkgKi8KKysKKysJICAgIGRlX2ZhdWx0OgorKwkgICAgZGVmYXVsdDoKKysJICAgICAgYXNfd2FybiAoXygidW5yZWNvZ25pemVkIHNlZ21lbnQgdHlwZSIpKTsKKysJICAgIH0KKysKKysJICBpbnB1dF9saW5lX3BvaW50ZXIgPSBlbmQ7CisrCSAgU0tJUF9XSElURVNQQUNFKCk7CisrCisrCSAgaWYgKCppbnB1dF9saW5lX3BvaW50ZXIgPT0gJzonKQorKwkgICAgeworKwkgICAgICAvKiAgUk9PVC9OT1JPT1QgKi8KKysJICAgICAgKytpbnB1dF9saW5lX3BvaW50ZXI7CisrCSAgICAgIFNLSVBfV0hJVEVTUEFDRSgpOworKworKwkgICAgICBlbmQgPSBpbnB1dF9saW5lX3BvaW50ZXI7CisrCSAgICAgIHdoaWxlICgwID09IHN0cmNociAoIlxuXHQ7OiggIiwgKmVuZCkpCisrCQllbmQrKzsKKysJICAgICAgbGVuZ3RoID0gZW5kIC0gaW5wdXRfbGluZV9wb2ludGVyOworKwkgICAgICBpZiAoISAoKGxlbmd0aCA9PSA0KSAmJgorKwkJICAgICAoMCA9PSBzdHJuY2FzZWNtcCggaW5wdXRfbGluZV9wb2ludGVyLCAiUk9PVCIsIDQpKSkgJiYKKysJCSAgISAoKGxlbmd0aCA9PSA2KSAmJgorKwkJICAgICAoMCA9PSBzdHJuY2FzZWNtcCggaW5wdXRfbGluZV9wb2ludGVyLCAiTk9ST09UIiwgNikpKSkKKysJCXsKKysJCSAgYXNfd2FybiAoXygidW5yZWNvZ25pemVkIHNlZ21lbnQgZmxhZyIpKTsKKysJCX0KKysKKysJICAgICAgaW5wdXRfbGluZV9wb2ludGVyID0gZW5kOworKwkgICAgICBTS0lQX1dISVRFU1BBQ0UoKTsKKysJICAgIH0KKysJfQorKyAgICB9CisrCisrICBpZiAoKmlucHV0X2xpbmVfcG9pbnRlciA9PSAnKCcpCisrICAgIHsKKysgICAgICBhbGlnbiA9IGdldF9hYnNvbHV0ZV9leHByZXNzaW9uICgpOworKyAgICB9CisrCisrICBkZW1hbmRfZW1wdHlfcmVzdF9vZl9saW5lKCk7CisrCisrICBvYmpfZWxmX2NoYW5nZV9zZWN0aW9uIChuYW1lLCB0eXBlLCBhdHRyLCAwLCBOVUxMLCAwLCAwKTsKKysjaWZkZWYgQVZSMzJfREVCVUcKKysgIGZwcmludGYoIHN0ZGVyciwgIlJTRUc6IENoYW5nZWQgc2VjdGlvbiB0byAlcywgdHlwZTogMHgleCwgYXR0cjogMHgleFxuIiwKKysgICAgICBuYW1lLCB0eXBlLCBhdHRyICk7CisrICBmcHJpbnRmKCBzdGRlcnIsICJSU0VHOiBBbGlnbmluZyB0byAyKiolZFxuIiwgYWxpZ24gKTsKKysjZW5kaWYKKysKKysgIGlmIChhbGlnbiA+IDE1KQorKyAgICB7CisrICAgICAgYWxpZ24gPSAxNTsKKysgICAgICBhc193YXJuIChfKCJhbGlnbm1lbnQgdG9vIGxhcmdlOiAldSBhc3N1bWVkIiksIGFsaWduKTsKKysgICAgfQorKworKyAgLyogSG9wZSBub3QsIHRoYXQgaXMgKi8KKysgIGFzc2VydCAobm93X3NlZyAhPSBhYnNvbHV0ZV9zZWN0aW9uKTsKKysKKysgIC8qIE9ubHkgbWFrZSBhIGZyYWcgaWYgd2UgSEFWRSB0by4uLiAqLworKyAgaWYgKGFsaWduICE9IDAgJiYgIW5lZWRfcGFzc18yKQorKyAgICB7CisrICAgICAgaWYgKHN1YnNlZ190ZXh0X3AgKG5vd19zZWcpKQorKwlmcmFnX2FsaWduX2NvZGUgKGFsaWduLCAwKTsKKysgICAgICBlbHNlCisrCWZyYWdfYWxpZ24gKGFsaWduLCAwLCAwKTsKKysgICAgfQorKworKyAgcmVjb3JkX2FsaWdubWVudCAobm93X3NlZywgYWxpZ24gLSBPQ1RFVFNfUEVSX0JZVEVfUE9XRVIpOworK30KKysKKysvKiB2aW06IHN5bnRheD1jIHN3PTIKKysgKi8KKy0tLSAvZGV2L251bGwKKysrKyBiL2dhcy9jb25maWcvdGMtYXZyMzIuaAorQEAgLTAsMCArMSwzMjUgQEAKKysvKiBBc3NlbWJsZXIgZGVmaW5pdGlvbnMgZm9yIEFWUjMyLgorKyAgIENvcHlyaWdodCAyMDAzLTIwMDYgQXRtZWwgQ29ycG9yYXRpb24uCisrCisrICAgV3JpdHRlbiBieSBIYWF2YXJkIFNraW5uZW1vZW4sIEF0bWVsIE5vcndheSwgPGhza2lubmVtb2VuQGF0bWVsLmNvbT4KKysKKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQVMsIHRoZSBHTlUgQXNzZW1ibGVyLgorKworKyAgIEdBUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgR0FTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisrICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisrICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggR0FTOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3LCBVU0EuICAqLworKworKyNpZiAwCisrI2RlZmluZSBERUJVRworKyNkZWZpbmUgREVCVUcxCisrI2RlZmluZSBERUJVRzIKKysjZGVmaW5lIERFQlVHMworKyNkZWZpbmUgREVCVUc0CisrI2RlZmluZSBERUJVRzUKKysjZW5kaWYKKysKKysvKiBBcmUgd2UgdHJ5aW5nIHRvIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgSUFSIGFzc2VtYmxlcj8gKC0taWFyKSAqLworK2V4dGVybiBpbnQgYXZyMzJfaWFyY29tcGF0OworKworKy8qIEJ5IGNvbnZlbnRpb24sIHlvdSBzaG91bGQgZGVmaW5lIHRoaXMgbWFjcm8gaW4gdGhlIGAuaCcgZmlsZS4gIEZvcgorKyAgIGV4YW1wbGUsIGB0Yy1tNjhrLmgnIGRlZmluZXMgYFRDX002OEsnLiAgWW91IG1pZ2h0IGhhdmUgdG8gdXNlIHRoaXMKKysgICBpZiBpdCBpcyBuZWNlc3NhcnkgdG8gYWRkIENQVSBzcGVjaWZpYyBjb2RlIHRvIHRoZSBvYmplY3QgZm9ybWF0CisrICAgZmlsZS4gICovCisrI2RlZmluZSBUQ19BVlIzMgorKworKy8qIFRoaXMgbWFjcm8gaXMgdGhlIEJGRCB0YXJnZXQgbmFtZSB0byB1c2Ugd2hlbiBjcmVhdGluZyB0aGUgb3V0cHV0CisrICAgZmlsZS4gIFRoaXMgd2lsbCBub3JtYWxseSBkZXBlbmQgdXBvbiB0aGUgYE9CSl9GTVQnIG1hY3JvLiAgKi8KKysjZGVmaW5lIFRBUkdFVF9GT1JNQVQgImVsZjMyLWF2cjMyIgorKworKy8qIFRoaXMgbWFjcm8gaXMgdGhlIEJGRCBhcmNoaXRlY3R1cmUgdG8gcGFzcyB0byBgYmZkX3NldF9hcmNoX21hY2gnLiAgKi8KKysjZGVmaW5lIFRBUkdFVF9BUkNIIGJmZF9hcmNoX2F2cjMyCisrCisrLyogVGhpcyBtYWNybyBpcyB0aGUgQkZEIG1hY2hpbmUgbnVtYmVyIHRvIHBhc3MgdG8KKysgICBgYmZkX3NldF9hcmNoX21hY2gnLiAgSWYgaXQgaXMgbm90IGRlZmluZWQsIEdBUyB3aWxsIHVzZSAwLiAgKi8KKysjZGVmaW5lIFRBUkdFVF9NQUNIIDAKKysKKysvKiBVTkRPQ1VNRU5URUQ6IEFsbG93IC8vLXN0eWxlIGNvbW1lbnRzICovCisrI2RlZmluZSBET1VCTEVTTEFTSF9MSU5FX0NPTU1FTlRTCisrCisrLyogWW91IHNob3VsZCBkZWZpbmUgdGhpcyBtYWNybyB0byBiZSBub24temVybyBpZiB0aGUgdGFyZ2V0IGlzIGJpZworKyAgIGVuZGlhbiwgYW5kIHplcm8gaWYgdGhlIHRhcmdldCBpcyBsaXR0bGUgZW5kaWFuLiAgKi8KKysjZGVmaW5lIFRBUkdFVF9CWVRFU19CSUdfRU5ESUFOIDEKKysKKysvKiBGSVhNRTogSXQgc2VlbXMgdGhhdCBHQVMgb25seSBleHBlY3RzIGEgb25lLWJ5dGUgb3Bjb2RlLi4uCisrICAgI2RlZmluZSBOT1BfT1BDT0RFIDB4ZDcwMyAqLworKworKy8qIElmIHlvdSBkZWZpbmUgdGhpcyBtYWNybywgR0FTIHdpbGwgd2FybiBhYm91dCB0aGUgdXNlIG9mCisrICAgbm9uc3RhbmRhcmQgZXNjYXBlIHNlcXVlbmNlcyBpbiBhIHN0cmluZy4gICovCisrI3VuZGVmIE9OTFlfU1RBTkRBUkRfRVNDQVBFUworKworKyNkZWZpbmUgRFdBUkYyX0ZPUk1BVCgpIGR3YXJmMl9mb3JtYXRfMzJiaXQKKysKKysvKiBJbnN0cnVjdGlvbnMgYXJlIGVpdGhlciAyIG9yIDQgYnl0ZXMgbG9uZyAqLworKy8qICNkZWZpbmUgRFdBUkYyX0xJTkVfTUlOX0lOU05fTEVOR1RIIDIgKi8KKysKKysvKiBHQVMgd2lsbCBjYWxsIHRoaXMgZnVuY3Rpb24gZm9yIGFueSBleHByZXNzaW9uIHRoYXQgY2FuIG5vdCBiZQorKyAgIHJlY29nbml6ZWQuICBXaGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQsIGBpbnB1dF9saW5lX3BvaW50ZXInCisrICAgd2lsbCBwb2ludCB0byB0aGUgc3RhcnQgb2YgdGhlIGV4cHJlc3Npb24uICAqLworKyNkZWZpbmUgbWRfb3BlcmFuZCh4KQorKworKyNkZWZpbmUgbWRfcGFyc2VfbmFtZShuYW1lLCBleHByLCBtb2RlLCBjKSBhdnIzMl9wYXJzZV9uYW1lKG5hbWUsIGV4cHIsIGMpCisrZXh0ZXJuIGludCBhdnIzMl9wYXJzZV9uYW1lKGNvbnN0IGNoYXIgKiwgc3RydWN0IGV4cHJlc3Npb25TICosIGNoYXIgKik7CisrCisrLyogWW91IG1heSBkZWZpbmUgdGhpcyBtYWNybyB0byBnZW5lcmF0ZSBhIGZpeHVwIGZvciBhIGRhdGEKKysgICBhbGxvY2F0aW9uIHBzZXVkby1vcC4gICovCisrI2RlZmluZSBUQ19DT05TX0ZJWF9ORVcoRlJBRywgT0ZGLCBMRU4sIEVYUCkJXAorKyAgYXZyMzJfY29uc19maXhfbmV3KEZSQUcsIE9GRiwgTEVOLCBFWFApCisrdm9pZCBhdnIzMl9jb25zX2ZpeF9uZXcgKGZyYWdTICosIGludCwgaW50LCBleHByZXNzaW9uUyAqKTsKKysKKysvKiBgZXh0c3ltIC0gLicgZXhwcmVzc2lvbnMgY2FuIGJlIGVtaXR0ZWQgdXNpbmcgUEMtcmVsYXRpdmUgcmVsb2NzICovCisrI2RlZmluZSBESUZGX0VYUFJfT0sKKysKKysvKiBUaGlzIGlzIHVzZWQgdG8gY29uc3RydWN0IGV4cHJlc3Npb25zIG91dCBvZiBAZ290b2ZmLCBldGMuIFRoZQorKyAgIHJlbG9jYXRpb24gdHlwZSBpcyBzdG9yZWQgaW4gWF9tZCAqLworKyNkZWZpbmUgT19nb3QJCU9fbWQxCisrI2RlZmluZSBPX2hpCQlPX21kMgorKyNkZWZpbmUgT19sbwkJT19tZDMKKysjZGVmaW5lIE9fdGxzZ2QJCU9fbWQ0CisrCisrLyogWW91IG1heSBkZWZpbmUgdGhpcyBtYWNybyB0byBwYXJzZSBhbiBleHByZXNzaW9uIHVzZWQgaW4gYSBkYXRhCisrICAgYWxsb2NhdGlvbiBwc2V1ZG8tb3Agc3VjaCBhcyBgLndvcmQnLiAgWW91IGNhbiB1c2UgdGhpcyB0bworKyAgIHJlY29nbml6ZSByZWxvY2F0aW9uIGRpcmVjdGl2ZXMgdGhhdCBtYXkgYXBwZWFyIGluIHN1Y2ggZGlyZWN0aXZlcy4gICovCisrLyogI2RlZmluZSBUQ19QQVJTRV9DT05TX0VYUFJFU1NJT04oRVhQUixOKSBhdnJfcGFyc2VfY29uc19leHByZXNzaW9uIChFWFBSLE4pCisrICAgdm9pZCBhdnJfcGFyc2VfY29uc19leHByZXNzaW9uIChleHByZXNzaW9uUyAqZXhwLCBpbnQgbmJ5dGVzKTsgKi8KKysKKysvKiBUaGlzIHNob3VsZCBqdXN0IGNhbGwgZWl0aGVyIGBudW1iZXJfdG9fY2hhcnNfYmlnZW5kaWFuJyBvcgorKyAgIGBudW1iZXJfdG9fY2hhcnNfbGl0dGxlZW5kaWFuJywgd2hpY2hldmVyIGlzIGFwcHJvcHJpYXRlLiAgT24KKysgICB0YXJnZXRzIGxpa2UgdGhlIE1JUFMgd2hpY2ggc3VwcG9ydCBvcHRpb25zIHRvIGNoYW5nZSB0aGUKKysgICBlbmRpYW5uZXNzLCB3aGljaCBmdW5jdGlvbiB0byBjYWxsIGlzIGEgcnVudGltZSBkZWNpc2lvbi4gIE9uCisrICAgb3RoZXIgdGFyZ2V0cywgYG1kX251bWJlcl90b19jaGFycycgY2FuIGJlIGEgc2ltcGxlIG1hY3JvLiAgKi8KKysjZGVmaW5lIG1kX251bWJlcl90b19jaGFycyBudW1iZXJfdG9fY2hhcnNfYmlnZW5kaWFuCisrCisrLyogYG1kX3Nob3J0X2p1bXBfc2l6ZScKKysgICBgbWRfbG9uZ19qdW1wX3NpemUnCisrICAgYG1kX2NyZWF0ZV9zaG9ydF9qdW1wJworKyAgIGBtZF9jcmVhdGVfbG9uZ19qdW1wJworKyAgIElmIGBXT1JLSU5HX0RPVF9XT1JEJyBpcyBkZWZpbmVkLCBHQVMgd2lsbCBub3QgZG8gYnJva2VuIHdvcmQKKysgICBwcm9jZXNzaW5nICgqbm90ZSBCcm9rZW4gd29yZHM6Oi4pLiAgT3RoZXJ3aXNlLCB5b3Ugc2hvdWxkIHNldAorKyAgIGBtZF9zaG9ydF9qdW1wX3NpemUnIHRvIHRoZSBzaXplIG9mIGEgc2hvcnQganVtcCAoYSBqdW1wIHRoYXQgaXMKKysgICBqdXN0IGxvbmcgZW5vdWdoIHRvIGp1bXAgYXJvdW5kIGEgbG9uZyBqbXApIGFuZAorKyAgIGBtZF9sb25nX2p1bXBfc2l6ZScgdG8gdGhlIHNpemUgb2YgYSBsb25nIGp1bXAgKGEganVtcCB0aGF0IGNhbiBnbworKyAgIGFueXdoZXJlIGluIHRoZSBmdW5jdGlvbiksIFlvdSBzaG91bGQgZGVmaW5lCisrICAgYG1kX2NyZWF0ZV9zaG9ydF9qdW1wJyB0byBjcmVhdGUgYSBzaG9ydCBqdW1wIGFyb3VuZCBhIGxvbmcganVtcCwKKysgICBhbmQgZGVmaW5lIGBtZF9jcmVhdGVfbG9uZ19qdW1wJyB0byBjcmVhdGUgYSBsb25nIGp1bXAuICAqLworKyNkZWZpbmUgV09SS0lOR19ET1RfV09SRAorKworKy8qIElmIHlvdSBkZWZpbmUgdGhpcyBtYWNybywgaXQgbWVhbnMgdGhhdCBgdGNfZ2VuX3JlbG9jJyBtYXkgcmV0dXJuCisrICAgbXVsdGlwbGUgcmVsb2NhdGlvbiBlbnRyaWVzIGZvciBhIHNpbmdsZSBmaXh1cC4gIEluIHRoaXMgY2FzZSwgdGhlCisrICAgcmV0dXJuIHZhbHVlIG9mIGB0Y19nZW5fcmVsb2MnIGlzIGEgcG9pbnRlciB0byBhIG51bGwgdGVybWluYXRlZAorKyAgIGFycmF5LiAgKi8KKysjdW5kZWYgUkVMT0NfRVhQQU5TSU9OX1BPU1NJQkxFCisrCisrLyogSWYgeW91IGRlZmluZSB0aGlzIG1hY3JvLCBHQVMgd2lsbCBub3QgcmVxdWlyZSBwc2V1ZG8tb3BzIHRvIHN0YXJ0IHdpdGggYSAuCisrICAgY2hhcmFjdGVyLiAqLworKyNkZWZpbmUgTk9fUFNFVURPX0RPVCAoYXZyMzJfaWFyY29tcGF0KQorKworKy8qIFRoZSBJQVIgYXNzZW1ibGVyIHVzZXMgJCBhcyB0aGUgbG9jYXRpb24gY291bnRlci4gVW5mb3J0dW5hdGVseSwgd2UKKysgICBjYW4ndCBtYWtlIHRoaXMgZGVwZW5kZW50IG9uIGF2cjMyX2lhcmNvbXBhdC4uLiAqLworKyNkZWZpbmUgRE9MTEFSX0RPVAorKworKy8qIFZhbHVlcyBwYXNzZWQgdG8gbWRfYXBwbHlfZml4MyBkb24ndCBpbmNsdWRlIHRoZSBzeW1ib2wgdmFsdWUuICAqLworKyNkZWZpbmUgTURfQVBQTFlfU1lNX1ZBTFVFKEZJWCkgMAorKworKy8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcHV0IGludG8gYSB3b3JkIGluIGEgbGlzdGluZy4gIFRoaXMgYWZmZWN0cworKyAgIHRoZSB3YXkgdGhlIGJ5dGVzIGFyZSBjbHVtcGVkIHRvZ2V0aGVyIGluIHRoZSBsaXN0aW5nLiAgRm9yCisrICAgZXhhbXBsZSwgYSB2YWx1ZSBvZiAyIG1pZ2h0IHByaW50IGAxMjM0IDU2NzgnIHdoZXJlIGEgdmFsdWUgb2YgMQorKyAgIHdvdWxkIHByaW50IGAxMiAzNCA1NiA3OCcuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA0LiAgKi8KKysjZGVmaW5lIExJU1RJTkdfV09SRF9TSVpFIDQKKysKKysvKiBleHRlcm4gY29uc3Qgc3RydWN0IHJlbGF4X3R5cGUgbWRfcmVsYXhfdGFibGVbXTsKKysjZGVmaW5lIFRDX0dFTkVSSUNfUkVMQVhfVEFCTEUgbWRfcmVsYXhfdGFibGUgKi8KKysKKysvKgorKyAgQW4gYC5sY29tbScgZGlyZWN0aXZlIHdpdGggbm8gZXhwbGljaXQgYWxpZ25tZW50IHBhcmFtZXRlciB3aWxsIHVzZQorKyAgdGhpcyBtYWNybyB0byBzZXQgUDJWQVIgdG8gdGhlIGFsaWdubWVudCB0aGF0IGEgcmVxdWVzdCBmb3IgU0laRQorKyAgYnl0ZXMgd2lsbCBoYXZlLiAgVGhlIGFsaWdubWVudCBpcyBleHByZXNzZWQgYXMgYSBwb3dlciBvZiB0d28uICBJZgorKyAgbm8gYWxpZ25tZW50IHNob3VsZCB0YWtlIHBsYWNlLCB0aGUgbWFjcm8gZGVmaW5pdGlvbiBzaG91bGQgZG8KKysgIG5vdGhpbmcuICBTb21lIHRhcmdldHMgZGVmaW5lIGEgYC5ic3MnIGRpcmVjdGl2ZSB0aGF0IGlzIGFsc28KKysgIGFmZmVjdGVkIGJ5IHRoaXMgbWFjcm8uICBUaGUgZGVmYXVsdCBkZWZpbml0aW9uIHdpbGwgc2V0IFAyVkFSIHRvCisrICB0aGUgdHJ1bmNhdGVkIHBvd2VyIG9mIHR3byBvZiBzaXplcyB1cCB0byBlaWdodCBieXRlcy4KKysKKysgIFdlIHdhbnQgZG91Ymxld29yZHMgdG8gYmUgd29yZC1hbGlnbmVkLCBzbyB3ZSdyZSBnb2luZyB0byBtb2RpZnkgdGhlCisrICBkZWZhdWx0IGRlZmluaXRpb24gYSB0aW55IGJpdC4KKysqLworKyNkZWZpbmUgVENfSU1QTElDSVRfTENPTU1fQUxJR05NRU5UKFNJWkUsIFAyVkFSKQlcCisrICBkbwkJCQkJCQlcCisrICAgIHsJCQkJCQkJXAorKyAgICAgIGlmICgoU0laRSkgPj0gNCkJCQkJCVwKKysJKFAyVkFSKSA9IDI7CQkJCQlcCisrICAgICAgZWxzZSBpZiAoKFNJWkUpID49IDIpCQkJCVwKKysJKFAyVkFSKSA9IDE7CQkJCQlcCisrICAgICAgZWxzZQkJCQkJCVwKKysJKFAyVkFSKSA9IDA7CQkJCQlcCisrICAgIH0JCQkJCQkJXAorKyAgd2hpbGUgKDApCisrCisrLyogV2hlbiByZWxheGluZywgd2UgbmVlZCB0byBnZW5lcmF0ZSByZWxvY2F0aW9ucyBmb3IgYWxpZ25tZW50CisrICAgZGlyZWN0aXZlcy4gICovCisrI2RlZmluZSBIQU5ETEVfQUxJR04oZnJhZykgYXZyMzJfaGFuZGxlX2FsaWduKGZyYWcpCisrZXh0ZXJuIHZvaWQgYXZyMzJfaGFuZGxlX2FsaWduKGZyYWdTICopOworKworKy8qIFNlZSBpbnRlcm5hbHMgZG9jIGZvciBleHBsYW5hdGlvbi4gT2ggd2FpdC4uLgorKyAgIE5vdywgY2FuIHlvdSBndWVzcyB3aGVyZSAiYWxpZ25tZW50IiBjb21lcyBmcm9tPyA7LSkgKi8KKysjZGVmaW5lIE1BWF9NRU1fRk9SX1JTX0FMSUdOX0NPREUgKCgxIDw8IGFsaWdubWVudCkgLSAxKQorKworKy8qIFdlIG5lZWQgdG8gc3RvcCBnYXMgZnJvbSByZWR1Y2luZyBjZXJ0YWluIGV4cHJlc3Npb25zIChlLmcuIEdPVAorKyAgIHJlZmVyZW5jZXMpICovCisrI2RlZmluZSB0Y19maXhfYWRqdXN0YWJsZShmaXgpIGF2cjMyX2ZpeF9hZGp1c3RhYmxlKGZpeCkKKytleHRlcm4gYmZkX2Jvb2xlYW4gYXZyMzJfZml4X2FkanVzdGFibGUoc3RydWN0IGZpeCAqKTsKKysKKysvKiBUaGUgbGlua2VyIG5lZWRzIHRvIGJlIHBhc3NlZCBhIGxpdHRsZSBtb3JlIGluZm9ybWF0aW9uIHdoZW4gcmVsYXhpbmcuICovCisrI2RlZmluZSBUQ19GT1JDRV9SRUxPQ0FUSU9OKGZpeCkgYXZyMzJfZm9yY2VfcmVsb2MoZml4KQorK2V4dGVybiBiZmRfYm9vbGVhbiBhdnIzMl9mb3JjZV9yZWxvYyhzdHJ1Y3QgZml4ICopOworKworKy8qIEknbSB0aXJlZCBvZiB3b3JraW5nIGFyb3VuZCBhbGwgdGhlIG1hZG5lc3MgaW4gZml4dXBfc2VnbWVudCgpLgorKyAgIFRoaXMgaG9vayB3aWxsIGRvIGJhc2ljYWxseSB0aGUgc2FtZSB0aGluZ3MgYXMgdGhlIGdlbmVyaWMgY29kZSwKKysgICBhbmQgdGhlbiBpdCB3aWxsICJnb3RvIiByaWdodCBwYXN0IGl0LiAgKi8KKysjZGVmaW5lIFRDX1ZBTElEQVRFX0ZJWChGSVgsIFNFRywgU0tJUCkJCVwKKysgIGRvCQkJCQkJXAorKyAgICB7CQkJCQkJXAorKyAgICAgIGF2cjMyX3Byb2Nlc3NfZml4dXAoRklYLCBTRUcpOwkJXAorKyAgICAgIGlmICghKEZJWCktPmZ4X2RvbmUpCQkJXAorKwkrK3NlZ19yZWxvY19jb3VudDsJCQlcCisrICAgICAgZ290byBTS0lQOwkJCQlcCisrICAgIH0JCQkJCQlcCisrICB3aGlsZSAoMCkKKytleHRlcm4gdm9pZCBhdnIzMl9wcm9jZXNzX2ZpeHVwKHN0cnVjdCBmaXggKmZpeFAsIHNlZ1QgdGhpc19zZWdtZW50KTsKKysKKysvKiBQb3NpdGl2ZSB2YWx1ZXMgb2YgVENfRlhfU0laRV9TTEFDSyBhbGxvdyBhIHRhcmdldCB0byBkZWZpbmUKKysgICBmaXh1cHMgdGhhdCBmYXIgcGFzdCB0aGUgZW5kIG9mIGEgZnJhZy4gIEhhdmluZyBzdWNoIGZpeHVwcworKyAgIGlzIG9mIGNvdXJzZSBtb3N0IG1vc3QgbGlrZWx5IGEgYnVnIGluIHNldHRpbmcgZnhfc2l6ZSBjb3JyZWN0bHkuCisrICAgQSBuZWdhdGl2ZSB2YWx1ZSBkaXNhYmxlcyB0aGUgZml4dXAgY2hlY2sgZW50aXJlbHksIHdoaWNoIGlzCisrICAgYXBwcm9wcmlhdGUgZm9yIHNvbWV0aGluZyBsaWtlIHRoZSBSZW5lc2FzIC8gU3VwZXJIIFNIX0NPVU5UCisrICAgcmVsb2MuICAqLworKy8qIFRoaXMgdGFyZ2V0IGlzIGJ1Z2d5LCBhbmQgc2V0cyBmaXggc2l6ZSB0b28gbGFyZ2UuICAqLworKyNkZWZpbmUgVENfRlhfU0laRV9TTEFDSyhGSVgpIC0xCisrCisrLyogV2UgZG9uJ3Qgd2FudCB0aGUgZ2FzIGNvcmUgdG8gbWFrZSBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgb3VyIHdheSBvZgorKyAgIGRvaW5nIGxpbmtyZWxheGluZy4gICovCisrI2RlZmluZSBUQ19MSU5LUkVMQVhfRklYVVAoU0VHKQkJCTAKKysKKysvKiAuLi4gYnV0IHdlIGRvIHdhbnQgaXQgdG8gaW5zZXJ0IGxvdHMgb2YgcGFkZGluZy4gKi8KKysjZGVmaW5lIExJTktFUl9SRUxBWElOR19TSFJJTktTX09OTFkKKysKKysvKiBCZXR0ZXIgZG8gaXQgb3Vyc2VsdmVzLCByZWFsbHkuLi4gKi8KKysjZGVmaW5lIFRDX1JFTEFYX0FMSUdOKFNFRywgRlJBRywgQUREUikJYXZyMzJfcmVsYXhfYWxpZ24oU0VHLCBGUkFHLCBBRERSKQorK2V4dGVybiByZWxheF9hZGRyZXNzVAorK2F2cjMyX3JlbGF4X2FsaWduKHNlZ1Qgc2VnbWVudCwgZnJhZ1MgKmZyYWdQLCByZWxheF9hZGRyZXNzVCBhZGRyZXNzKTsKKysKKysvKiBVc2UgbGluZSBudW1iZXIgZm9ybWF0IHRoYXQgaXMgYW1lbmFibGUgdG8gbGlua2VyIHJlbGF4YXRpb24uICAqLworKyNkZWZpbmUgRFdBUkYyX1VTRV9GSVhFRF9BRFZBTkNFX1BDIChsaW5rcmVsYXggIT0gMCkKKysKKysvKiBUaGlzIGlzIGNhbGxlZCBieSB3cml0ZV9vYmplY3RfZmlsZSgpIGp1c3QgYmVmb3JlIHN5bWJvbHMgYXJlCisrICAgYXR0ZW1wdGVkIGNvbnZlcnRlZCBpbnRvIHNlY3Rpb24gc3ltYm9scy4gICovCisrI2RlZmluZSB0Y19mcm9iX2ZpbGVfYmVmb3JlX2FkanVzdCgpCWF2cjMyX2Zyb2JfZmlsZSgpCisrZXh0ZXJuIHZvaWQgYXZyMzJfZnJvYl9maWxlKHZvaWQpOworKworKy8qIElmIHlvdSBkZWZpbmUgdGhpcyBtYWNybywgR0FTIHdpbGwgY2FsbCBpdCBhdCB0aGUgZW5kIG9mIGVhY2ggaW5wdXQKKysgICBmaWxlLiAgKi8KKysjZGVmaW5lIG1kX2NsZWFudXAoKSBhdnIzMl9jbGVhbnVwKCkKKytleHRlcm4gdm9pZCBhdnIzMl9jbGVhbnVwKHZvaWQpOworKworKy8qIFRoZXJlJ3MgYW4gQVZSMzItc3BlY2lmaWMgaGFjayBpbiBvcGVyYW5kKCkgd2hpY2ggY3JlYXRlcyBPX21kCisrICAgZXhwcmVzc2lvbnMgd2hlbiBlbmNvdW50ZXJpbmcgSFdSRCBvciBMV1JELiBXZSBuZWVkIHRvIGdlbmVyYXRlCisrICAgcHJvcGVyIHJlbG9jcyBmb3IgdGhlbSAqLworKy8qICNkZWZpbmUgbWRfY2dlbl9yZWNvcmRfZml4dXBfZXhwIGF2cjMyX2NnZW5fcmVjb3JkX2ZpeHVwX2V4cCAqLworKworKy8qIEkgbmVlZGVkIHRvIGFkZCBhbiBleHRyYSBob29rIGluIGdhc19jZ2VuX2ZpbmlzaF9pbnNuKCkgZm9yCisrICAgY29udmVyc2lvbiBvZiBPX21kKiBvcGVyYW5kcyBiZWNhdXNlIG1kX2NnZW5fcmVjb3JkX2ZpeHVwX2V4cCgpCisrICAgaXNuJ3QgY2FsbGVkIGZvciByZWxheGFibGUgaW5zbnMgKi8KKysvKiAjZGVmaW5lIG1kX2NnZW5fY29udmVydF9leHByKGV4cCwgb3BpbmZvKSBhdnIzMl9jZ2VuX2NvbnZlcnRfZXhwcihleHAsIG9waW5mbykKKysgICBpbnQgYXZyMzJfY2dlbl9jb252ZXJ0X2V4cHIoZXhwcmVzc2lvblMgKiwgaW50KTsgKi8KKysKKysvKiAjZGVmaW5lIHRjX2dlbl9yZWxvYyBnYXNfY2dlbl90Y19nZW5fcmVsb2MgKi8KKysKKysvKiBJZiB5b3UgZGVmaW5lIHRoaXMgbWFjcm8sIGl0IHNob3VsZCByZXR1cm4gdGhlIHBvc2l0aW9uIGZyb20gd2hpY2gKKysgICB0aGUgUEMgcmVsYXRpdmUgYWRqdXN0bWVudCBmb3IgYSBQQyByZWxhdGl2ZSBmaXh1cCBzaG91bGQgYmUKKysgICBtYWRlLiBPbiBtYW55IHByb2Nlc3NvcnMsIHRoZSBiYXNlIG9mIGEgUEMgcmVsYXRpdmUgaW5zdHJ1Y3Rpb24gaXMKKysgICB0aGUgbmV4dCBpbnN0cnVjdGlvbiwgc28gdGhpcyBtYWNybyB3b3VsZCByZXR1cm4gdGhlIGxlbmd0aCBvZiBhbgorKyAgIGluc3RydWN0aW9uLCBwbHVzIHRoZSBhZGRyZXNzIG9mIHRoZSBQQyByZWxhdGl2ZSBmaXh1cC4gVGhlIGxhdHRlcgorKyAgIGNhbiBiZSBjYWxjdWxhdGVkIGFzIGZpeHAtPmZ4X3doZXJlICsgZml4cC0+ZnhfZnJhZy0+ZnJfYWRkcmVzcy4gKi8KKytleHRlcm4gbG9uZyBtZF9wY3JlbF9mcm9tX3NlY3Rpb24gKHN0cnVjdCBmaXggKiwgc2VnVCk7CisrI2RlZmluZSBNRF9QQ1JFTF9GUk9NX1NFQ1RJT04oRklYLCBTRUMpIG1kX3BjcmVsX2Zyb21fc2VjdGlvbiAoRklYLCBTRUMpCisrCisrI2RlZmluZSBMT0NBTF9MQUJFTChuYW1lKSAobmFtZVswXSA9PSAnLicgJiYgKG5hbWVbMV0gPT0gJ0wnKSkKKysjZGVmaW5lIExPQ0FMX0xBQkVMU19GQgkJMQorKworK3N0cnVjdCBhdnIzMl9yZWxheGVyCisreworKyAgaW50ICgqZXN0aW1hdGVfc2l6ZSkoZnJhZ1MgKiwgc2VnVCk7CisrICBsb25nICgqcmVsYXhfZnJhZykoc2VnVCwgZnJhZ1MgKiwgbG9uZyk7CisrICB2b2lkICgqY29udmVydF9mcmFnKShiZmQgKiwgc2VnVCwgZnJhZ1MgKik7CisrfTsKKysKKysvKiBBVlIzMiBoYXMgcXVpdGUgY29tcGxleCBpbnN0cnVjdGlvbiBjb2RpbmcsIHdoaWNoIG1lYW5zIHdlIG5lZWQKKysgKiBsb3RzIG9mIGluZm9ybWF0aW9uIGluIG9yZGVyIHRvIGRvIHRoZSByaWdodCB0aGluZyBkdXJpbmcgcmVsYXhpbmcKKysgKiAoYmFzaWNhbGx5LCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gcmVjb25zdHJ1Y3QgYSB3aG9sZSBuZXcgb3Bjb2RlIGlmCisrICogbmVjZXNzYXJ5KSAqLworKyNkZWZpbmUgVENfRlJBR19UWVBFIHN0cnVjdCBhdnIzMl9mcmFnX2RhdGEKKysKKytzdHJ1Y3QgY3Bvb2w7CisrCisrc3RydWN0IGF2cjMyX2ZyYWdfZGF0YQorK3sKKysgIC8qIFRPRE86IE1heWJlIGFkZCBhbiBleHByZXNzaW9uIG9iamVjdCBoZXJlIHNvIHRoYXQgd2UgY2FuIHVzZQorKyAgICAgZml4X25ld19leHAoKSBpbiBtZF9jb252ZXJ0X2ZyYWc/ICBXZSBtYXkgaGF2ZSB0byBkZWNpZGUKKysgICAgIHBjcmVsLW5lc3MgaW4gbWRfZXN0aW1hdGVfc2l6ZV9iZWZvcmVfcmVsYXgoKSBhcyB3ZWxsLi4ub3Igd2UKKysgICAgIG1pZ2h0IGRvIGl0IHdoZW4gcGFyc2luZy4gIERvaW5nIGl0IHdoaWxlIHBhcnNpbmcgbWF5IGZhaWwKKysgICAgIGJlY2F1c2UgdGhlIHN1Yl9zeW1ib2wgaXMgdW5kZWZpbmVkIHRoZW4uLi4gKi8KKysgIGludCBwY3JlbDsKKysgIGludCBmb3JjZV9leHRlbmRlZDsKKysgIGludCByZWxvY19pbmZvOworKyAgc3RydWN0IGF2cjMyX3JlbGF4ZXIgKnJlbGF4ZXI7CisrICBleHByZXNzaW9uUyBleHA7CisrCisrICAvKiBQb2ludHMgdG8gYXNzb2NpYXRlZCBjb25zdGFudCBwb29sLCBmb3IgdXNlIGJ5IExEQSBhbmQgQ0FMTCBpbgorKyAgICAgbm9uLXBpYyBtb2RlLCBhbmQgd2hlbiByZWxheGluZyB0aGUgLmNwb29sIGRpcmVjdGl2ZSAqLworKyAgc3RydWN0IGNwb29sICpwb29sOworKyAgdW5zaWduZWQgaW50IHBvb2xfZW50cnk7CisrfTsKKysKKysvKiBXZSB3aWxsIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgZmllbGRzIGV4cGxpY2l0bHkgd2hlbiBuZWVkZWQgKi8KKysjZGVmaW5lIFRDX0ZSQUdfSU5JVChmcmFnUCkKKysKKysjZGVmaW5lIG1kX2VzdGltYXRlX3NpemVfYmVmb3JlX3JlbGF4KGZyYWdQLCBzZWdUKQkJCVwKKysgICgoZnJhZ1ApLT50Y19mcmFnX2RhdGEucmVsYXhlci0+ZXN0aW1hdGVfc2l6ZShmcmFnUCwgc2VnVCkpCisrI2RlZmluZSBtZF9yZWxheF9mcmFnKHNlZ21lbnQsIGZyYWdQLCBzdHJldGNoKQkJCQlcCisrICAoKGZyYWdQKS0+dGNfZnJhZ19kYXRhLnJlbGF4ZXItPnJlbGF4X2ZyYWcoc2VnbWVudCwgZnJhZ1AsIHN0cmV0Y2gpKQorKyNkZWZpbmUgbWRfY29udmVydF9mcmFnKGFiZmQsIHNlZ21lbnQsIGZyYWdQKQkJCQlcCisrICAoKGZyYWdQKS0+dGNfZnJhZ19kYXRhLnJlbGF4ZXItPmNvbnZlcnRfZnJhZyhhYmZkLCBzZWdtZW50LCBmcmFnUCkpCisrCisrI2RlZmluZSBUQ19GSVhfVFlQRSBzdHJ1Y3QgYXZyMzJfZml4X2RhdGEKKysKKytzdHJ1Y3QgYXZyMzJfZml4X2RhdGEKKyt7CisrICBjb25zdCBzdHJ1Y3QgYXZyMzJfaWZpZWxkICppZmllbGQ7CisrICB1bnNpZ25lZCBpbnQgYWxpZ247CisrICBsb25nIG1pbjsKKysgIGxvbmcgbWF4OworK307CisrCisrI2RlZmluZSBUQ19JTklUX0ZJWF9EQVRBKGZpeFApCQkJXAorKyAgZG8JCQkJCQlcCisrICAgIHsJCQkJCQlcCisrICAgICAgKGZpeFApLT50Y19maXhfZGF0YS5pZmllbGQgPSBOVUxMOwlcCisrICAgICAgKGZpeFApLT50Y19maXhfZGF0YS5hbGlnbiA9IDA7CQlcCisrICAgICAgKGZpeFApLT50Y19maXhfZGF0YS5taW4gPSAwOwkJXAorKyAgICAgIChmaXhQKS0+dGNfZml4X2RhdGEubWF4ID0gMDsJCVwKKysgICAgfQkJCQkJCVwKKysgIHdoaWxlICgwKQorLS0tIGEvZ2FzL2NvbmZpZ3VyZS50Z3QKKysrKyBiL2dhcy9jb25maWd1cmUudGd0CitAQCAtMzMsNiArMzMsNyBAQCBjYXNlICR7Y3B1fSBpbgorICAgYW0zM18yLjApCQljcHVfdHlwZT1tbjEwMzAwIGVuZGlhbj1saXR0bGUgOzsKKyAgIGFybSpiZXxhcm0qYikJCWNwdV90eXBlPWFybSBlbmRpYW49YmlnIDs7CisgICBhcm0qKQkJCWNwdV90eXBlPWFybSBlbmRpYW49bGl0dGxlIDs7CisrICBhdnIzMiopCQljcHVfdHlwZT1hdnIzMiBlbmRpYW49YmlnIDs7CisgICBiZmluKikJCWNwdV90eXBlPWJmaW4gZW5kaWFuPWxpdHRsZSA7OworICAgYzR4KikJCQljcHVfdHlwZT10aWM0eCA7OworICAgY3IxNiopCQljcHVfdHlwZT1jcjE2IGVuZGlhbj1saXR0bGUgOzsKK0BAIC0xMjksNiArMTMwLDkgQEAgY2FzZSAke2dlbmVyaWNfdGFyZ2V0fSBpbgorICAgYmZpbi0qZWxmKQkJCQlmbXQ9ZWxmIDs7CisgICBjcjE2LSotZWxmKikJICAgIAkJCWZtdD1lbGYgOzsKKyAKKysgIGF2cjMyLSotbGludXgqKQkJCWZtdD1lbGYgIGVtPWxpbnV4IGJmZF9nYXM9eWVzIDs7CisrICBhdnIzMiopCQkJCWZtdD1lbGYgIGJmZF9nYXM9eWVzIDs7CisrCisgICBjcmlzLSotbGludXgtKiB8IGNyaXN2MzItKi1saW51eC0qKQorIAkJCQkJZm10PW11bHRpIGVtPWxpbnV4IDs7CisgICBjcmlzLSotKiB8IGNyaXN2MzItKi0qKQkJZm10PW11bHRpIDs7CistLS0gYS9nYXMvZG9jL2FsbC50ZXhpCisrKysgYi9nYXMvZG9jL2FsbC50ZXhpCitAQCAtMzAsNiArMzAsNyBAQAorIEBzZXQgQVJDCisgQHNldCBBUk0KKyBAc2V0IEFWUgorK0BzZXQgQVZSMzIKKyBAc2V0IEJGSU4KKyBAc2V0IENSMTYKKyBAc2V0IENSSVMKKy0tLSBhL2dhcy9kb2MvYXMudGV4aW5mbworKysrIGIvZ2FzL2RvYy9hcy50ZXhpbmZvCitAQCAtNjM1Myw2ICs2MzUzLDkgQEAgc3ViamVjdCwgc2VlIHRoZSBoYXJkd2FyZSBtYW51ZmFjdHVyZXIncworIEBpZnNldCBBVlIKKyAqIEFWUi1EZXBlbmRlbnQ6OiAgICAgICAgICAgICAgIEFWUiBEZXBlbmRlbnQgRmVhdHVyZXMKKyBAZW5kIGlmc2V0CisrQGlmc2V0IEFWUjMyCisrKiBBVlIzMi1EZXBlbmRlbnQ6OiAgICAgICAgICAgICBBVlIzMiBEZXBlbmRlbnQgRmVhdHVyZXMKKytAZW5kIGlmc2V0CisgQGlmc2V0IEJGSU4KKyAqIEJGSU4tRGVwZW5kZW50OjoJCUJGSU4gRGVwZW5kZW50IEZlYXR1cmVzCisgQGVuZCBpZnNldAorQEAgLTY0NzYsNiArNjQ3OSwxMCBAQCBzdWJqZWN0LCBzZWUgdGhlIGhhcmR3YXJlIG1hbnVmYWN0dXJlcidzCisgQGluY2x1ZGUgYy1hdnIudGV4aQorIEBlbmQgaWZzZXQKKyAKKytAaWZzZXQgQVZSMzIKKytAaW5jbHVkZSBjLWF2cjMyLnRleGkKKytAZW5kIGlmc2V0CisrCisgQGlmc2V0IEJGSU4KKyBAaW5jbHVkZSBjLWJmaW4udGV4aQorIEBlbmQgaWZzZXQKKy0tLSAvZGV2L251bGwKKysrKyBiL2dhcy9kb2MvYy1hdnIzMi50ZXhpCitAQCAtMCwwICsxLDI0NyBAQAorK0BjIENvcHlyaWdodCAyMDA1LCAyMDA2CisrQGMgQXRtZWwgQ29ycG9yYXRpb24KKytAYyBUaGlzIGlzIHBhcnQgb2YgdGhlIEdBUyBtYW51YWwuCisrQGMgRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGFzLnRleGluZm8uCisrCisrQGlmc2V0IEdFTkVSSUMKKytAcGFnZQorK0Bub2RlIEFWUjMyLURlcGVuZGVudAorK0BjaGFwdGVyIEFWUjMyIERlcGVuZGVudCBGZWF0dXJlcworK0BlbmQgaWZzZXQKKysKKytAaWZjbGVhciBHRU5FUklDCisrQG5vZGUgTWFjaGluZSBEZXBlbmRlbmNpZXMKKytAY2hhcHRlciBBVlIzMiBEZXBlbmRlbnQgRmVhdHVyZXMKKytAZW5kIGlmY2xlYXIKKysKKytAY2luZGV4IEFWUjMyIHN1cHBvcnQKKytAbWVudQorKyogQVZSMzIgT3B0aW9uczo6ICAgICAgICAgICAgICAgT3B0aW9ucworKyogQVZSMzIgU3ludGF4OjogICAgICAgICAgICAgICAgU3ludGF4CisrKiBBVlIzMiBEaXJlY3RpdmVzOjogICAgICAgICAgICBEaXJlY3RpdmVzCisrKiBBVlIzMiBPcGNvZGVzOjogICAgICAgICAgICAgICBPcGNvZGVzCisrQGVuZCBtZW51CisrCisrQG5vZGUgQVZSMzIgT3B0aW9ucworK0BzZWN0aW9uIE9wdGlvbnMKKytAY2luZGV4IEFWUjMyIG9wdGlvbnMKKytAY2luZGV4IG9wdGlvbnMgZm9yIEFWUjMyCisrCisrVGhlcmUgYXJlIGN1cnJlbnRseSBubyBBVlIzMi1zcGVjaWZpYyBvcHRpb25zLiAgSG93ZXZlciwgdGhlIGZvbGxvd2luZworK29wdGlvbnMgYXJlIHBsYW5uZWQ6CisrCisrQHRhYmxlIEBjb2RlCisrCisrQGNpbmRleCBAY29kZXstLXBpY30gY29tbWFuZCBsaW5lIG9wdGlvbiwgQVZSMzIKKytAY2luZGV4IFBJQyBjb2RlIGdlbmVyYXRpb24gZm9yIEFWUjMyCisrQGl0ZW0gLS1waWMKKytUaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhhdCB0aGUgb3V0cHV0IG9mIHRoZSBhc3NlbWJsZXIgc2hvdWxkIGJlIG1hcmtlZAorK2FzIHBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUgKFBJQykuICBJdCB3aWxsIGFsc28gZW5zdXJlIHRoYXQKKytwc2V1ZG8taW5zdHJ1Y3Rpb25zIHRoYXQgZGVhbCB3aXRoIGFkZHJlc3MgY2FsY3VsYXRpb24gYXJlIG91dHB1dCBhcworK1BJQywgYW5kIHRoYXQgYWxsIGFic29sdXRlIGFkZHJlc3MgcmVmZXJlbmNlcyBpbiB0aGUgY29kZSBhcmUgbWFya2VkIGFzCisrc3VjaC4KKysKKytAY2luZGV4IEBjb2Rley0tbGlua3JlbGF4fSBjb21tYW5kIGxpbmUgb3B0aW9uLCBBVlIzMgorK0BpdGVtIC0tbGlua3JlbGF4CisrVGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoYXQgdGhlIG91dHB1dCBvZiB0aGUgYXNzZW1ibGVyIHNob3VsZCBiZSBtYXJrZWQKKythcyBsaW5rZXItcmVsYXhhYmxlLiAgSXQgd2lsbCBhbHNvIGVuc3VyZSB0aGF0IGFsbCBQQy1yZWxhdGl2ZSBvcGVyYW5kcworK3RoYXQgbWF5IGNoYW5nZSBkdXJpbmcgbGlua2VyIHJlbGF4YXRpb24gZ2V0IGFwcHJvcHJpYXRlIHJlbG9jYXRpb25zLgorKworK0BlbmQgdGFibGUKKysKKysKKytAbm9kZSBBVlIzMiBTeW50YXgKKytAc2VjdGlvbiBTeW50YXgKKytAbWVudQorKyogQVZSMzItQ2hhcnM6OiAgICAgICAgICAgICAgU3BlY2lhbCBDaGFyYWN0ZXJzCisrKiBBVlIzMi1TeW1yZWZzOjogICAgICAgICAgICBTeW1ib2wgcmVmZXJlbmNlcworK0BlbmQgbWVudQorKworK0Bub2RlIEFWUjMyLUNoYXJzCisrQHN1YnNlY3Rpb24gU3BlY2lhbCBDaGFyYWN0ZXJzCisrCisrQGNpbmRleCBsaW5lIGNvbW1lbnQgY2hhcmFjdGVyLCBBVlIzMgorK0BjaW5kZXggQVZSMzIgbGluZSBjb21tZW50IGNoYXJhY3RlcgorK1RoZSBwcmVzZW5jZSBvZiBhIEBzYW1wey8vfSBvbiBhIGxpbmUgaW5kaWNhdGVzIHRoZSBzdGFydCBvZiBhIGNvbW1lbnQKKyt0aGF0IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBsaW5lLiAgSWYgYSBAc2FtcHsjfSBhcHBlYXJzIGFzCisrdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGxpbmUsIHRoZSB3aG9sZSBsaW5lIGlzIHRyZWF0ZWQgYXMgYSBjb21tZW50LgorKworK0BjaW5kZXggbGluZSBzZXBhcmF0b3IsIEFWUjMyCisrQGNpbmRleCBzdGF0ZW1lbnQgc2VwYXJhdG9yLCBBVlIzMgorK0BjaW5kZXggQVZSMzIgbGluZSBzZXBhcmF0b3IKKytUaGUgQHNhbXB7O30gY2hhcmFjdGVyIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgYSBuZXdsaW5lIHRvIHNlcGFyYXRlCisrc3RhdGVtZW50cy4KKysKKytAbm9kZSBBVlIzMi1TeW1yZWZzCisrQHN1YnNlY3Rpb24gU3ltYm9sIHJlZmVyZW5jZXMKKysKKytUaGUgYWJzb2x1dGUgdmFsdWUgb2YgYSBzeW1ib2wgY2FuIGJlIG9idGFpbmVkIGJ5IHNpbXBseSBuYW1pbmcgdGhlCisrc3ltYm9sLiAgSG93ZXZlciwgYXMgQVZSMzIgc3ltYm9scyBoYXZlIDMyLWJpdCB2YWx1ZXMsIG1vc3Qgc3ltYm9scyBoYXZlCisrdmFsdWVzIHRoYXQgYXJlIG91dHNpZGUgdGhlIHJhbmdlIG9mIGFueSBpbnN0cnVjdGlvbnMuCisrCisrSW5zdHJ1Y3Rpb25zIHRoYXQgdGFrZSBhIFBDLXJlbGF0aXZlIG9mZnNldCwgZS5nLiBAY29kZXtsZGRwY30gb3IKKytAY29kZXtyY2FsbH0sIGNhbiBhbHNvIHJlZmVyZW5jZSBhIHN5bWJvbCBieSBzaW1wbHkgbmFtaW5nIHRoZSBzeW1ib2wKKysobm8gZXhwbGljaXQgY2FsY3VsYXRpb25zIG5lY2Vzc2FyeSkuICBJbiB0aGlzIGNhc2UsIHRoZSBhc3NlbWJsZXIgb3IKKytsaW5rZXIgc3VidHJhY3RzIHRoZSBhZGRyZXNzIG9mIHRoZSBpbnN0cnVjdGlvbiBmcm9tIHRoZSBzeW1ib2wncyB2YWx1ZQorK2FuZCBpbnNlcnRzIHRoZSByZXN1bHQgaW50byB0aGUgaW5zdHJ1Y3Rpb24uICBOb3RlIHRoYXQgZXZlbiB0aG91Z2ggYW4KKytvdmVyZmxvdyBpcyBsZXNzIGxpa2VseSB0byBoYXBwZW4gZm9yIGEgcmVsYXRpdmUgcmVmZXJlbmNlIHRoYW4gZm9yIGFuCisrYWJzb2x1dGUgcmVmZXJlbmNlLCB0aGUgYXNzZW1ibGVyIG9yIGxpbmtlciB3aWxsIGdlbmVyYXRlIGFuIGVycm9yIGlmCisrdGhlIHJlZmVyZW5jZWQgc3ltYm9sIGlzIHRvbyBmYXIgYXdheSBmcm9tIHRoZSBjdXJyZW50IGxvY2F0aW9uLgorKworK1JlbGF0aXZlIHJlZmVyZW5jZXMgY2FuIGJlIHVzZWQgZm9yIGRhdGEgYXMgd2VsbC4gIEZvciBleGFtcGxlOgorKworK0BzbWFsbGV4YW1wbGUKKysgICAgICAgIGxkZHBjICAgcjAsIDJmCisrMTogICAgICBhZGQgICAgIHIwLCBwYworKyAgICAgICAgLi4uCisrICAgICAgICAuYWxpZ24gIDIKKysyOiAgICAgIC5pbnQgICAgQHZhcntzb21lX3N5bWJvbH0gLSAxYgorK0BlbmQgc21hbGxleGFtcGxlCisrCisrSGVyZSwgcjAgd2lsbCBlbmQgdXAgd2l0aCB0aGUgcnVuLXRpbWUgYWRkcmVzcyBvZiBAdmFye3NvbWVfc3ltYm9sfSBldmVuCisraWYgdGhlIHByb2dyYW0gd2FzIGxvYWRlZCBhdCBhIGRpZmZlcmVudCBhZGRyZXNzIHRoYW4gaXQgd2FzIGxpbmtlZAorKyhwb3NpdGlvbi1pbmRlcGVuZGVudCBjb2RlKS4KKysKKytAc3Vic3Vic2VjdGlvbiBTeW1ib2wgbW9kaWZpZXJzCisrCisrQHRhYmxlIEBjb2RlCisrCisrQGl0ZW0gQGNvZGV7aGkoQHZhcntzeW1ib2x9KX0KKytFdmFsdWF0ZXMgdG8gdGhlIHZhbHVlIG9mIHRoZSBzeW1ib2wgc2hpZnRlZCByaWdodCAxNiBiaXRzLiAgVGhpcyB3aWxsCisrd29yayBldmVuIGlmIEB2YXJ7c3ltYm9sfSBpcyBkZWZpbmVkIGluIGEgZGlmZmVyZW50IG1vZHVsZS4KKysKKytAaXRlbSBAY29kZXtsbyhAdmFye3N5bWJvbH0pfQorK0V2YWx1YXRlcyB0byB0aGUgbG93IDE2IGJpdHMgb2YgdGhlIHN5bWJvbCdzIHZhbHVlLiAgVGhpcyB3aWxsIHdvcmsgZXZlbgorK2lmIEB2YXJ7c3ltYm9sfSBpcyBkZWZpbmVkIGluIGEgZGlmZmVyZW50IG1vZHVsZS4KKysKKytAaXRlbSBAY29kZXtAdmFye3N5bWJvbH1AQGdvdH0KKytDcmVhdGUgYSBHT1QgZW50cnkgZm9yIEB2YXJ7c3ltYm9sfSBhbmQgcmV0dXJuIHRoZSBvZmZzZXQgb2YgdGhhdCBlbnRyeQorK3JlbGF0aXZlIHRvIHRoZSBHT1QgYmFzZS4KKysKKytAZW5kIHRhYmxlCisrCisrCisrQG5vZGUgQVZSMzIgRGlyZWN0aXZlcworK0BzZWN0aW9uIERpcmVjdGl2ZXMKKytAY2luZGV4IG1hY2hpbmUgZGlyZWN0aXZlcywgQVZSMzIKKytAY2luZGV4IEFWUjMyIGRpcmVjdGl2ZXMKKysKKytAdGFibGUgQGNvZGUKKysKKytAY2luZGV4IEBjb2Rley5jcG9vbH0gZGlyZWN0aXZlLCBBVlIzMgorK0BpdGVtIC5jcG9vbAorK1RoaXMgZGlyZWN0aXZlIGNhdXNlcyB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgY29uc3RhbnQgcG9vbCB0byBiZQorK2R1bXBlZCBpbnRvIHRoZSBjdXJyZW50IHNlY3Rpb24gYXQgdGhlIGN1cnJlbnQgbG9jYXRpb24gKGFsaWduZWQgdG8gYQorK3dvcmQgYm91bmRhcnkpLiAgQGNvZGV7R0FTfSBtYWludGFpbnMgYSBzZXBhcmF0ZSBjb25zdGFudCBwb29sIGZvciBlYWNoCisrc2VjdGlvbiBhbmQgZWFjaCBzdWItc2VjdGlvbi4gIFRoZSBAY29kZXsuY3Bvb2x9IGRpcmVjdGl2ZSB3aWxsIG9ubHkKKythZmZlY3QgdGhlIGNvbnN0YW50IHBvb2wgb2YgdGhlIGN1cnJlbnQgc2VjdGlvbiBhbmQgc3ViLXNlY3Rpb24uICBBdCB0aGUKKytlbmQgb2YgYXNzZW1ibHksIGFsbCByZW1haW5pbmcsIG5vbi1lbXB0eSBjb25zdGFudCBwb29scyB3aWxsCisrYXV0b21hdGljYWxseSBiZSBkdW1wZWQuCisrCisrQGVuZCB0YWJsZQorKworKworK0Bub2RlIEFWUjMyIE9wY29kZXMKKytAc2VjdGlvbiBPcGNvZGVzCisrQGNpbmRleCBBVlIzMiBvcGNvZGVzCisrQGNpbmRleCBvcGNvZGVzIGZvciBBVlIzMgorKworK0Bjb2Rle0B2YWx1ZXtBU319IGltcGxlbWVudHMgYWxsIHRoZSBzdGFuZGFyZCBBVlIzMiBvcGNvZGVzLiAgSXQgYWxzbworK2ltcGxlbWVudHMgc2V2ZXJhbCBwc2V1ZG8tb3Bjb2Rlcywgd2hpY2ggYXJlIHJlY29tbWVuZGVkIHRvIHVzZSB3aGVyZXZlcgorK3Bvc3NpYmxlIGJlY2F1c2UgdGhleSBnaXZlIHRoZSB0b29sIGNoYWluIGJldHRlciBmcmVlZG9tIHRvIGdlbmVyYXRlCisrb3B0aW1hbCBjb2RlLgorKworK0B0YWJsZSBAY29kZQorKworK0BjaW5kZXggQGNvZGV7TERBLlcgcmVnLCBzeW1ib2x9IHBzZXVkbyBvcCwgQVZSMzIKKytAaXRlbSBMREEuVworK0BzbWFsbGV4YW1wbGUKKysgICAgICAgIGxkYS53ICAgQHZhcntyZWd9LCBAdmFye3N5bWJvbH0KKytAZW5kIHNtYWxsZXhhbXBsZQorKworK1RoaXMgaW5zdHJ1Y3Rpb24gd2lsbCBsb2FkIHRoZSBhZGRyZXNzIG9mIEB2YXJ7c3ltYm9sfSBpbnRvCisrQHZhcntyZWd9LiBUaGUgaW5zdHJ1Y3Rpb24gd2lsbCBldmFsdWF0ZSB0byBvbmUgb2YgdGhlIGZvbGxvd2luZywKKytkZXBlbmRpbmcgb24gdGhlIHJlbGF0aXZlIGRpc3RhbmNlIHRvIHRoZSBzeW1ib2wsIHRoZSByZWxhdGl2ZSBkaXN0YW5jZQorK3RvIHRoZSBjb25zdGFudCBwb29sIGFuZCB3aGV0aGVyIHRoZSBAY29kZXstLXBpY30gb3B0aW9uIGhhcyBiZWVuCisrc3BlY2lmaWVkLiBJZiB0aGUgQGNvZGV7LS1waWN9IG9wdGlvbiBoYXMgbm90IGJlZW4gc3BlY2lmaWVkLCB0aGUKKythbHRlcm5hdGl2ZXMgYXJlIGFzIGZvbGxvd3M6CisrQHNtYWxsZXhhbXBsZQorKyAgICAgICAgLyogQHZhcntzeW1ib2x9IGV2YWx1YXRlcyB0byBhIHNtYWxsIGVub3VnaCB2YWx1ZSAqLworKyAgICAgICAgbW92ICAgICBAdmFye3JlZ30sIEB2YXJ7c3ltYm9sfQorKworKyAgICAgICAgLyogKC4gLSBAdmFye3N5bWJvbH0pIGV2YWx1YXRlcyB0byBhIHNtYWxsIGVub3VnaCB2YWx1ZSAqLworKyAgICAgICAgc3ViICAgICBAdmFye3JlZ30sIHBjLCAuIC0gQHZhcntzeW1ib2x9CisrCisrICAgICAgICAvKiBDb25zdGFudCBwb29sIGlzIGNsb3NlIGVub3VnaCAqLworKyAgICAgICAgbGRkcGMgICBAdmFye3JlZ30sIEB2YXJ7Y3BlbnR9CisrICAgICAgICAuLi4KKytAdmFye2NwZW50fToKKysgICAgICAgIC5sb25nICAgQHZhcntzeW1ib2x9CisrCisrICAgICAgICAvKiBPdGhlcndpc2UgKG5vdCBpbXBsZW1lbnRlZCB5ZXQsIHByb2JhYmx5IG5vdCBuZWNlc3NhcnkpICovCisrICAgICAgICBtb3YgICAgIEB2YXJ7cmVnfSwgbG8oQHZhcntzeW1ib2x9KQorKyAgICAgICAgb3JoICAgICBAdmFye3JlZ30sIGhpKEB2YXJ7c3ltYm9sfSkKKytAZW5kIHNtYWxsZXhhbXBsZQorKworK0lmIHRoZSBAY29kZXstLXBpY30gb3B0aW9uIGhhcyBiZWVuIHNwZWNpZmllZCwgdGhlIGFsdGVybmF0aXZlcyBhcmUgYXMKKytmb2xsb3dzOgorK0BzbWFsbGV4YW1wbGUKKysgICAgICAgIC8qICguIC0gQHZhcntzeW1ib2x9KSBldmFsdWF0ZXMgdG8gYSBzbWFsbCBlbm91Z2ggdmFsdWUgKi8KKysgICAgICAgIHN1YiAgICAgQHZhcntyZWd9LCBwYywgLiAtIEB2YXJ7c3ltYm9sfQorKworKyAgICAgICAgLyogSWYgQGNvZGV7LS1saW5rcmVsYXh9IG5vdCBzcGVjaWZpZWQgKi8KKysgICAgICAgIGxkLncgICAgQHZhcntyZWd9LCByNltAdmFye3N5bWJvbH1AQGdvdF0KKysKKysgICAgICAgIC8qIE90aGVyd2lzZSAqLworKyAgICAgICAgbW92ICAgICBAdmFye3JlZ30sIEB2YXJ7c3ltYm9sfUBAZ290IC8gNAorKyAgICAgICAgbGQudyAgICBAdmFye3JlZ30sIHI2W0B2YXJ7cmVnfSA8PCAyXQorK0BlbmQgc21hbGxleGFtcGxlCisrCisrSWYgQHZhcntzeW1ib2x9IGlzIG5vdCBkZWZpbmVkIGluIHRoZSBzYW1lIGZpbGUgYW5kIHNlY3Rpb24gYXMgdGhlCisrQGNvZGV7TERBLld9IGluc3RydWN0aW9uLCB0aGUgbW9zdCBwZXNzaW1pc3RpYyBhbHRlcm5hdGl2ZSBvZiB0aGUKKythYm92ZSBpcyBzZWxlY3RlZC4gVGhlIGxpbmtlciBtYXkgY29udmVydCBpdCBiYWNrIGludG8gdGhlIG1vc3QKKytvcHRpbWFsIGFsdGVybmF0aXZlIHdoZW4gdGhlIGZpbmFsIHZhbHVlIG9mIGFsbCBzeW1ib2xzIGlzIGtub3duLgorKworK0BjaW5kZXggQGNvZGV7Q0FMTCBzeW1ib2x9IHBzZXVkbyBvcCwgQVZSMzIKKytAaXRlbSBDQUxMCisrQHNtYWxsZXhhbXBsZQorKyAgICAgICAgY2FsbCAgICBAdmFye3N5bWJvbH0KKytAZW5kIHNtYWxsZXhhbXBsZQorKworK1RoaXMgaW5zdHJ1Y3Rpb24gd2lsbCBpbnNlcnQgY29kZSB0byBjYWxsIHRoZSBzdWJyb3V0aW5lIGlkZW50aWZpZWQgYnkKKytAdmFye3N5bWJvbH0uIEl0IHdpbGwgZXZhbHVhdGUgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmcsIGRlcGVuZGluZyBvbgorK3RoZSByZWxhdGl2ZSBkaXN0YW5jZSB0byB0aGUgc3ltYm9sIGFzIHdlbGwgYXMgdGhlIEBjb2Rley0tbGlua3JlbGF4fQorK2FuZCBAY29kZXstLXBpY30gY29tbWFuZC1saW5lIG9wdGlvbnMuCisrCisrSWYgQHZhcntzeW1ib2x9IGlzIGRlZmluZWQgaW4gdGhlIHNhbWUgc2VjdGlvbiBhbmQgaW5wdXQgZmlsZSwgYW5kIHRoZQorK2Rpc3RhbmNlIGlzIHNtYWxsIGVub3VnaCwgYW4gQGNvZGV7cmNhbGx9IGluc3RydWN0aW9uIGlzIGluc2VydGVkOgorK0BzbWFsbGV4YW1wbGUKKysgICAgICAgIHJjYWxsICAgQHZhcntzeW1ib2x9CisrQGVuZCBzbWFsbGV4YW1wbGUKKysKKytPdGhlcndpc2UsIGlmIHRoZSBAY29kZXstLXBpY30gb3B0aW9uIGhhcyBub3QgYmVlbiBzcGVjaWZpZWQ6CisrQHNtYWxsZXhhbXBsZQorKyAgICAgICAgbWNhbGwgICBAdmFye2NwZW50fQorKyAgICAgICAgLi4uCisrQHZhcntjcGVudH06CisrICAgICAgICAubG9uZyAgIEB2YXJ7c3ltYm9sfQorK0BlbmQgc21hbGxleGFtcGxlCisrCisrRmluYWxseSwgaWYgbm90aGluZyBlbHNlIGZpdHMgYW5kIHRoZSBAY29kZXstLXBpY30gb3B0aW9uIGhhcyBiZWVuCisrc3BlY2lmaWVkLCB0aGUgYXNzZW1ibGVyIHdpbGwgaW5kaXJlY3QgdGhlIGNhbGwgdGhyb3VnaCB0aGUgR2xvYmFsCisrT2Zmc2V0IFRhYmxlOgorK0BzbWFsbGV4YW1wbGUKKysgICAgICAgIC8qIElmIEBjb2Rley0tbGlua3JlbGF4fSBub3Qgc3BlY2lmaWVkICovCisrICAgICAgICBtY2FsbCAgIHI2W0B2YXJ7c3ltYm9sfUBAZ290XQorKworKyAgICAgICAgLyogSWYgQGNvZGV7LS1saW5rcmVsYXh9IHNwZWNpZmllZCAqLworKyAgICAgICAgbW92ICAgICBsciwgQHZhcntzeW1ib2x9QEBnb3QgLyA0CisrICAgICAgICBsZC53ICAgIGxyLCByNltsciA8PCAyXQorKyAgICAgICAgaWNhbGwgICBscgorK0BlbmQgc21hbGxleGFtcGxlCisrCisrVGhlIGxpbmtlciwgYWZ0ZXIgZGV0ZXJtaW5pbmcgdGhlIGZpbmFsIHZhbHVlIG9mIEB2YXJ7c3ltYm9sfSwgbWF5CisrY29udmVydCBhbnkgb2YgdGhlc2UgaW50byBtb3JlIG9wdGltYWwgYWx0ZXJuYXRpdmVzLiBUaGlzIGluY2x1ZGVzCisrZGVsZXRpbmcgYW55IHN1cGVyZmx1b3VzIGNvbnN0YW50IHBvb2wtIGFuZCBHT1QtZW50cmllcy4KKysKKytAZW5kIHRhYmxlCistLS0gYS9nYXMvZG9jL01ha2VmaWxlLmFtCisrKysgYi9nYXMvZG9jL01ha2VmaWxlLmFtCitAQCAtMzMsNiArMzMsNyBAQCBDUFVfRE9DUyA9IFwKKyAJYy1hcmMudGV4aSBcCisgCWMtYXJtLnRleGkgXAorIAljLWF2ci50ZXhpIFwKKysgICAgYy1hdnIzMi50ZXhpIFwKKyAJYy1iZmluLnRleGkgXAorIAljLWNyMTYudGV4aSBcCisgCWMtZDEwdi50ZXhpIFwKKy0tLSBhL2dhcy9NYWtlZmlsZS5hbQorKysrIGIvZ2FzL01ha2VmaWxlLmFtCitAQCAtNDcsNiArNDcsNyBAQCBDUFVfVFlQRVMgPSBcCisgCWFyYyBcCisgCWFybSBcCisgCWF2ciBcCisrCWF2cjMyIFwKKyAJYmZpbiBcCisgCWNyMTYgXAorIAljcmlzIFwKK0BAIC0yNDEsNiArMjQyLDcgQEAgVEFSR0VUX0NQVV9DRklMRVMgPSBcCisgCWNvbmZpZy90Yy1hcmMuYyBcCisgCWNvbmZpZy90Yy1hcm0uYyBcCisgCWNvbmZpZy90Yy1hdnIuYyBcCisrCWNvbmZpZy90Yy1hdnIzMi5jIFwKKyAJY29uZmlnL3RjLWJmaW4uYyBcCisgCWNvbmZpZy90Yy1jcjE2LmMgXAorIAljb25maWcvdGMtY3Jpcy5jIFwKK0BAIC0yOTYsNiArMjk4LDcgQEAgVEFSR0VUX0NQVV9IRklMRVMgPSBcCisgCWNvbmZpZy90Yy1hcmMuaCBcCisgCWNvbmZpZy90Yy1hcm0uaCBcCisgCWNvbmZpZy90Yy1hdnIuaCBcCisrCWNvbmZpZy90Yy1hdnIzMi5oIFwKKyAJY29uZmlnL3RjLWJmaW4uaCBcCisgCWNvbmZpZy90Yy1jcjE2LmggXAorIAljb25maWcvdGMtY3Jpcy5oIFwKK0BAIC0xMDUwLDYgKzEwNTMsMTEgQEAgREVQVENfYXZyX2VsZiA9ICQoc3JjZGlyKS9jb25maWcvb2JqLWVsZgorICAgJChJTkNESVIpL2JmZGxpbmsuaCAkKHNyY2RpcikvY29uZmlnL3RjLWF2ci5oIGR3YXJmMmRiZy5oIFwKKyAgICQoSU5DRElSKS9zYWZlLWN0eXBlLmggc3Vic2Vncy5oICQoSU5DRElSKS9vYnN0YWNrLmggXAorICAgJChJTkNESVIpL29wY29kZS9hdnIuaAorK0RFUFRDX2F2cjMyX2VsZiA9ICQoSU5DRElSKS9zeW1jYXQuaCAkKHNyY2RpcikvY29uZmlnL29iai1lbGYuaCBcCisrICAkKEJGRERJUikvZWxmLWJmZC5oICQoSU5DRElSKS9lbGYvY29tbW9uLmggJChJTkNESVIpL2VsZi9pbnRlcm5hbC5oIFwKKysgICQoSU5DRElSKS9lbGYvZXh0ZXJuYWwuaCAkKElOQ0RJUikvYmZkbGluay5oICQoc3JjZGlyKS9jb25maWcvdGMtYXZyMzIuaCBcCisrICAkKElOQ0RJUikvc2FmZS1jdHlwZS5oIHN1YnNlZ3MuaCAkKElOQ0RJUikvb2JzdGFjay5oIFwKKysgICQoc3JjZGlyKS8uLi9vcGNvZGVzL2F2cjMyLW9wYy5oICQoc3JjZGlyKS8uLi9vcGNvZGVzL2F2cjMyLWFzbS5oCisgREVQVENfYmZpbl9lbGYgPSAkKHNyY2RpcikvY29uZmlnL29iai1lbGYuaCAkKEJGRERJUikvZWxmLWJmZC5oIFwKKyAgICQoSU5DRElSKS9lbGYvY29tbW9uLmggJChJTkNESVIpL2VsZi9pbnRlcm5hbC5oICQoSU5DRElSKS9lbGYvZXh0ZXJuYWwuaCBcCisgICAkKElOQ0RJUikvYmZkbGluay5oICQoc3JjZGlyKS9jb25maWcvdGMtYmZpbi5oIGR3YXJmMmRiZy5oIFwKK0BAIC0xNDg3LDYgKzE0OTUsMTEgQEAgREVQT0JKX2F2cl9lbGYgPSAkKHNyY2RpcikvY29uZmlnL29iai1lbAorICAgJChJTkNESVIpL2JmZGxpbmsuaCAkKHNyY2RpcikvY29uZmlnL3RjLWF2ci5oIGR3YXJmMmRiZy5oIFwKKyAgICQoSU5DRElSKS9zYWZlLWN0eXBlLmggc3Vic2Vncy5oICQoSU5DRElSKS9vYnN0YWNrLmggXAorICAgJChJTkNESVIpL29ic3RhY2suaCBzdHJ1Yy1zeW1ib2wuaCBkd2FyZjJkYmcuaCAkKElOQ0RJUikvYW91dC9hb3V0NjQuaAorK0RFUE9CSl9hdnIzMl9lbGYgPSAkKElOQ0RJUikvc3ltY2F0LmggJChzcmNkaXIpL2NvbmZpZy9vYmotZWxmLmggXAorKyAgJChCRkRESVIpL2VsZi1iZmQuaCAkKElOQ0RJUikvZWxmL2NvbW1vbi5oICQoSU5DRElSKS9lbGYvaW50ZXJuYWwuaCBcCisrICAkKElOQ0RJUikvZWxmL2V4dGVybmFsLmggJChJTkNESVIpL2JmZGxpbmsuaCAkKHNyY2RpcikvY29uZmlnL3RjLWF2cjMyLmggXAorKyAgJChJTkNESVIpL3NhZmUtY3R5cGUuaCBzdWJzZWdzLmggJChJTkNESVIpL29ic3RhY2suaCBcCisrICBzdHJ1Yy1zeW1ib2wuaCBkd2FyZjJkYmcuaAorIERFUE9CSl9iZmluX2VsZiA9ICQoc3JjZGlyKS9jb25maWcvb2JqLWVsZi5oICQoQkZERElSKS9lbGYtYmZkLmggXAorICAgJChJTkNESVIpL2VsZi9jb21tb24uaCAkKElOQ0RJUikvZWxmL2ludGVybmFsLmggJChJTkNESVIpL2VsZi9leHRlcm5hbC5oIFwKKyAgICQoSU5DRElSKS9iZmRsaW5rLmggJChzcmNkaXIpL2NvbmZpZy90Yy1iZmluLmggZHdhcmYyZGJnLmggXAorQEAgLTE4NTgsNiArMTg3MSw5IEBAIERFUF9jcjE2X2VsZiA9ICQoc3JjZGlyKS9jb25maWcvb2JqLWVsZi4KKyAgICQoSU5DRElSKS9iZmRsaW5rLmggJChzcmNkaXIpL2NvbmZpZy90Yy1jcjE2LmggZHdhcmYyZGJnLmggXAorICAgJChzcmNkaXIpL2NvbmZpZy9vYmotY29mZi5oICQoSU5DRElSKS9jb2ZmL2ludGVybmFsLmggXAorICAgJChCRkRESVIpL2xpYmNvZmYuaAorK0RFUF9hdnIzMl9lbGYgPSAkKHNyY2RpcikvY29uZmlnL29iai1lbGYuaCAkKElOQ0RJUikvc3ltY2F0LmggXAorKyAgJChCRkRESVIpL2VsZi1iZmQuaCAkKElOQ0RJUikvZWxmL2NvbW1vbi5oICQoSU5DRElSKS9lbGYvaW50ZXJuYWwuaCBcCisrICAkKElOQ0RJUikvZWxmL2V4dGVybmFsLmggJChJTkNESVIpL2JmZGxpbmsuaCAkKHNyY2RpcikvY29uZmlnL3RjLWF2cjMyLmgKKyBERVBfY3Jpc19hb3V0ID0gJChzcmNkaXIpL2NvbmZpZy9vYmotYW91dC5oICQoc3JjZGlyKS9jb25maWcvdGMtY3Jpcy5oIFwKKyAgICQoQkZERElSKS9saWJhb3V0LmggJChJTkNESVIpL2JmZGxpbmsuaAorIERFUF9jcmlzX2VsZiA9ICQoc3JjZGlyKS9jb25maWcvb2JqLWVsZi5oICQoQkZERElSKS9lbGYtYmZkLmggXAorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2FzL3Rlc3RzdWl0ZS9nYXMvYXZyMzIvYWxpYXNlcy5kCitAQCAtMCwwICsxLDE5IEBACisrI2FzOgorKyNvYmpkdW1wOiAtZHIKKysjbmFtZTogYWxpYXNlcworKworKy4qOiArZmlsZSBmb3JtYXQgLioKKysKKytEaXNhc3NlbWJseSBvZiBzZWN0aW9uIFwudGV4dDoKKysKKyswMDAwMDAwMCA8bGRfbm9kaXNwPjoKKysgICAwOgkxOSA4MCAgICAgIFsgXHRdK2xkXC51YiByMCxyMTJcWzB4MFxdCisrICAgMjoJZjkgMjAgMDAgMDBbIFx0XStsZFwuc2IgcjAscjEyXFswXF0KKysgICA2Ogk5OCA4MCAgICAgIFsgXHRdK2xkXC51aCByMCxyMTJcWzB4MFxdCisrICAgODoJOTggMDAgICAgICBbIFx0XStsZFwuc2ggcjAscjEyXFsweDBcXQorKyAgIGE6CTc4IDAwICAgICAgWyBcdF0rbGRcLncgcjAscjEyXFsweDBcXQorKworKzAwMDAwMDBjIDxzdF9ub2Rpc3A+OgorKyAgIGM6CWI4IDgwICAgICAgWyBcdF0rc3RcLmIgcjEyXFsweDBcXSxyMAorKyAgIGU6CWI4IDAwICAgICAgWyBcdF0rc3RcLmggcjEyXFsweDBcXSxyMAorKyAgMTA6CTk5IDAwICAgICAgWyBcdF0rc3RcLncgcjEyXFsweDBcXSxyMAorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2FzL3Rlc3RzdWl0ZS9nYXMvYXZyMzIvYWxpYXNlcy5zCitAQCAtMCwwICsxLDE0IEBACisrCS50ZXh0CisrCS5nbG9iYWwJbGRfbm9kaXNwCisrbGRfbm9kaXNwOgorKwlsZC51YglyMCwgcjEyCisrCWxkLnNiCXIwLCByMTIKKysJbGQudWgJcjAsIHIxMgorKwlsZC5zaAlyMCwgcjEyCisrCWxkLncJcjAsIHIxMgorKworKwkuZ2xvYmFsIHN0X25vZGlzcAorK3N0X25vZGlzcDoKKysJc3QuYglyMTIsIHIwCisrCXN0LmgJcjEyLCByMAorKwlzdC53CXIxMiwgcjAKKy0tLSAvZGV2L251bGwKKysrKyBiL2dhcy90ZXN0c3VpdGUvZ2FzL2F2cjMyL2FsbGluc24uZAorQEAgLTAsMCArMSwyOTg3IEBACisrI2FzOgorKyNvYmpkdW1wOiAtZHIKKysjbmFtZTogYWxsaW5zbgorKworKy4qOiArZmlsZSBmb3JtYXQgLioKKysKKytEaXNhc3NlbWJseSBvZiBzZWN0aW9uIFwudGV4dDoKKysKKytbMC05YS1mXSogPGxkX2Q1PjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMDIgM2UgCWxkXC5kIGxyLHBjXFtwYzw8MHgzXF0KKysgKlswLTlhLWZdKjoJZTAgMDAgMDIgMDAgCWxkXC5kIHIwLHIwXFtyMFxdCisrICpbMC05YS1mXSo6CWVhIDA1IDAyIDI2IAlsZFwuZCByNixyNVxbcjU8PDB4MlxdCisrICpbMC05YS1mXSo6CWU4IDA0IDAyIDE0IAlsZFwuZCByNCxyNFxbcjQ8PDB4MVxdCisrICpbMC05YS1mXSo6CWZjIDBlIDAyIDFlIAlsZFwuZCBscixsclxbbHI8PDB4MVxdCisrICpbMC05YS1mXSo6CWU2IDBkIDAyIDJhIAlsZFwuZCByMTAscjNcW3NwPDwweDJcXQorKyAqWzAtOWEtZl0qOglmNCAwNiAwMiAyOCAJbGRcLmQgcjgscjEwXFtyNjw8MHgyXF0KKysgKlswLTlhLWZdKjoJZWUgMDkgMDIgMDIgCWxkXC5kIHIyLHI3XFtyOVxdCisrCisrWzAtOWEtZl0qIDxsZF93NT46CisrICpbMC05YS1mXSo6CWZlIDBmIDAzIDBmIAlsZFwudyBwYyxwY1xbcGNcXQorKyAqWzAtOWEtZl0qOglmOCAwYyAwMyAzYyAJbGRcLncgcjEyLHIxMlxbcjEyPDwweDNcXQorKyAqWzAtOWEtZl0qOgllYSAwNSAwMyAyNSAJbGRcLncgcjUscjVcW3I1PDwweDJcXQorKyAqWzAtOWEtZl0qOgllOCAwNCAwMyAxNCAJbGRcLncgcjQscjRcW3I0PDwweDFcXQorKyAqWzAtOWEtZl0qOglmYyAwZSAwMyAxZSAJbGRcLncgbHIsbHJcW2xyPDwweDFcXQorKyAqWzAtOWEtZl0qOglmMiAwOSAwMyAwMiAJbGRcLncgcjIscjlcW3I5XF0KKysgKlswLTlhLWZdKjoJZTQgMDYgMDMgMGIgCWxkXC53IHIxMSxyMlxbcjZcXQorKyAqWzAtOWEtZl0qOgllNCAwZCAwMyAzMCAJbGRcLncgcjAscjJcW3NwPDwweDNcXQorKworK1swLTlhLWZdKiA8bGRfc2g1PjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMDQgMGYgCWxkXC5zaCBwYyxwY1xbcGNcXQorKyAqWzAtOWEtZl0qOglmOCAwYyAwNCAzYyAJbGRcLnNoIHIxMixyMTJcW3IxMjw8MHgzXF0KKysgKlswLTlhLWZdKjoJZWEgMDUgMDQgMjUgCWxkXC5zaCByNSxyNVxbcjU8PDB4MlxdCisrICpbMC05YS1mXSo6CWU4IDA0IDA0IDE0IAlsZFwuc2ggcjQscjRcW3I0PDwweDFcXQorKyAqWzAtOWEtZl0qOglmYyAwZSAwNCAxZSAJbGRcLnNoIGxyLGxyXFtscjw8MHgxXF0KKysgKlswLTlhLWZdKjoJZTAgMGYgMDQgMmIgCWxkXC5zaCByMTEscjBcW3BjPDwweDJcXQorKyAqWzAtOWEtZl0qOglmYSAwNiAwNCAyYSAJbGRcLnNoIHIxMCxzcFxbcjY8PDB4MlxdCisrICpbMC05YS1mXSo6CWU0IDAyIDA0IDBjIAlsZFwuc2ggcjEyLHIyXFtyMlxdCisrCisrWzAtOWEtZl0qIDxsZF91aDU+OgorKyAqWzAtOWEtZl0qOglmZSAwZiAwNSAwZiAJbGRcLnVoIHBjLHBjXFtwY1xdCisrICpbMC05YS1mXSo6CWY4IDBjIDA1IDNjIAlsZFwudWggcjEyLHIxMlxbcjEyPDwweDNcXQorKyAqWzAtOWEtZl0qOgllYSAwNSAwNSAyNSAJbGRcLnVoIHI1LHI1XFtyNTw8MHgyXF0KKysgKlswLTlhLWZdKjoJZTggMDQgMDUgMTQgCWxkXC51aCByNCxyNFxbcjQ8PDB4MVxdCisrICpbMC05YS1mXSo6CWZjIDBlIDA1IDFlIAlsZFwudWggbHIsbHJcW2xyPDwweDFcXQorKyAqWzAtOWEtZl0qOglmZSAwZSAwNSAzOCAJbGRcLnVoIHI4LHBjXFtscjw8MHgzXF0KKysgKlswLTlhLWZdKjoJZTIgMGYgMDUgMTYgCWxkXC51aCByNixyMVxbcGM8PDB4MVxdCisrICpbMC05YS1mXSo6CWZjIDBkIDA1IDE2IAlsZFwudWggcjYsbHJcW3NwPDwweDFcXQorKworK1swLTlhLWZdKiA8bGRfc2IyPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMDYgMGYgCWxkXC5zYiBwYyxwY1xbcGNcXQorKyAqWzAtOWEtZl0qOglmOCAwYyAwNiAzYyAJbGRcLnNiIHIxMixyMTJcW3IxMjw8MHgzXF0KKysgKlswLTlhLWZdKjoJZWEgMDUgMDYgMjUgCWxkXC5zYiByNSxyNVxbcjU8PDB4MlxdCisrICpbMC05YS1mXSo6CWU4IDA0IDA2IDE0IAlsZFwuc2IgcjQscjRcW3I0PDwweDFcXQorKyAqWzAtOWEtZl0qOglmYyAwZSAwNiAxZSAJbGRcLnNiIGxyLGxyXFtscjw8MHgxXF0KKysgKlswLTlhLWZdKjoJZTIgMGYgMDYgMzkgCWxkXC5zYiByOSxyMVxbcGM8PDB4M1xdCisrICpbMC05YS1mXSo6CWU2IDBiIDA2IDEwIAlsZFwuc2IgcjAscjNcW3IxMTw8MHgxXF0KKysgKlswLTlhLWZdKjoJZWEgMDUgMDYgMWEgCWxkXC5zYiByMTAscjVcW3I1PDwweDFcXQorKworK1swLTlhLWZdKiA8bGRfdWI1PjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMDcgMGYgCWxkXC51YiBwYyxwY1xbcGNcXQorKyAqWzAtOWEtZl0qOglmOCAwYyAwNyAzYyAJbGRcLnViIHIxMixyMTJcW3IxMjw8MHgzXF0KKysgKlswLTlhLWZdKjoJZWEgMDUgMDcgMjUgCWxkXC51YiByNSxyNVxbcjU8PDB4MlxdCisrICpbMC05YS1mXSo6CWU4IDA0IDA3IDE0IAlsZFwudWIgcjQscjRcW3I0PDwweDFcXQorKyAqWzAtOWEtZl0qOglmYyAwZSAwNyAxZSAJbGRcLnViIGxyLGxyXFtscjw8MHgxXF0KKysgKlswLTlhLWZdKjoJZjggMDcgMDcgMzYgCWxkXC51YiByNixyMTJcW3I3PDwweDNcXQorKyAqWzAtOWEtZl0qOgllYyAwYyAwNyAwMiAJbGRcLnViIHIyLHI2XFtyMTJcXQorKyAqWzAtOWEtZl0qOgllZSAwYiAwNyAxMCAJbGRcLnViIHIwLHI3XFtyMTE8PDB4MVxdCisrCisrWzAtOWEtZl0qIDxzdF9kNT46CisrICpbMC05YS1mXSo6CWZlIDBmIDA4IDBlIAlzdFwuZCBwY1xbcGNcXSxscgorKyAqWzAtOWEtZl0qOglmOCAwYyAwOCAzYyAJc3RcLmQgcjEyXFtyMTI8PDB4M1xdLHIxMgorKyAqWzAtOWEtZl0qOgllYSAwNSAwOCAyNiAJc3RcLmQgcjVcW3I1PDwweDJcXSxyNgorKyAqWzAtOWEtZl0qOgllOCAwNCAwOCAxNCAJc3RcLmQgcjRcW3I0PDwweDFcXSxyNAorKyAqWzAtOWEtZl0qOglmYyAwZSAwOCAxZSAJc3RcLmQgbHJcW2xyPDwweDFcXSxscgorKyAqWzAtOWEtZl0qOgllMiAwOSAwOCAxNCAJc3RcLmQgcjFcW3I5PDwweDFcXSxyNAorKyAqWzAtOWEtZl0qOglmNCAwMiAwOCAxNCAJc3RcLmQgcjEwXFtyMjw8MHgxXF0scjQKKysgKlswLTlhLWZdKjoJZjggMDYgMDggMGUgCXN0XC5kIHIxMlxbcjZcXSxscgorKworK1swLTlhLWZdKiA8c3RfdzU+OgorKyAqWzAtOWEtZl0qOglmZSAwZiAwOSAwZiAJc3RcLncgcGNcW3BjXF0scGMKKysgKlswLTlhLWZdKjoJZjggMGMgMDkgM2MgCXN0XC53IHIxMlxbcjEyPDwweDNcXSxyMTIKKysgKlswLTlhLWZdKjoJZWEgMDUgMDkgMjUgCXN0XC53IHI1XFtyNTw8MHgyXF0scjUKKysgKlswLTlhLWZdKjoJZTggMDQgMDkgMTQgCXN0XC53IHI0XFtyNDw8MHgxXF0scjQKKysgKlswLTlhLWZdKjoJZmMgMGUgMDkgMWUgCXN0XC53IGxyXFtscjw8MHgxXF0sbHIKKysgKlswLTlhLWZdKjoJZTIgMGEgMDkgMDMgCXN0XC53IHIxXFtyMTBcXSxyMworKyAqWzAtOWEtZl0qOgllMCAwYSAwOSAxOSAJc3RcLncgcjBcW3IxMDw8MHgxXF0scjkKKysgKlswLTlhLWZdKjoJZTggMDUgMDkgM2YgCXN0XC53IHI0XFtyNTw8MHgzXF0scGMKKysKKytbMC05YS1mXSogPHN0X2g1PjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMGEgMGYgCXN0XC5oIHBjXFtwY1xdLHBjCisrICpbMC05YS1mXSo6CWY4IDBjIDBhIDNjIAlzdFwuaCByMTJcW3IxMjw8MHgzXF0scjEyCisrICpbMC05YS1mXSo6CWVhIDA1IDBhIDI1IAlzdFwuaCByNVxbcjU8PDB4MlxdLHI1CisrICpbMC05YS1mXSo6CWU4IDA0IDBhIDE0IAlzdFwuaCByNFxbcjQ8PDB4MVxdLHI0CisrICpbMC05YS1mXSo6CWZjIDBlIDBhIDFlIAlzdFwuaCBsclxbbHI8PDB4MVxdLGxyCisrICpbMC05YS1mXSo6CWU0IDA5IDBhIDBiIAlzdFwuaCByMlxbcjlcXSxyMTEKKysgKlswLTlhLWZdKjoJZWEgMDEgMGEgMmMgCXN0XC5oIHI1XFtyMTw8MHgyXF0scjEyCisrICpbMC05YS1mXSo6CWZlIDA4IDBhIDIzIAlzdFwuaCBwY1xbcjg8PDB4MlxdLHIzCisrCisrWzAtOWEtZl0qIDxzdF9iNT46CisrICpbMC05YS1mXSo6CWZlIDBmIDBiIDBmIAlzdFwuYiBwY1xbcGNcXSxwYworKyAqWzAtOWEtZl0qOglmOCAwYyAwYiAzYyAJc3RcLmIgcjEyXFtyMTI8PDB4M1xdLHIxMgorKyAqWzAtOWEtZl0qOgllYSAwNSAwYiAyNSAJc3RcLmIgcjVcW3I1PDwweDJcXSxyNQorKyAqWzAtOWEtZl0qOgllOCAwNCAwYiAxNCAJc3RcLmIgcjRcW3I0PDwweDFcXSxyNAorKyAqWzAtOWEtZl0qOglmYyAwZSAwYiAxZSAJc3RcLmIgbHJcW2xyPDwweDFcXSxscgorKyAqWzAtOWEtZl0qOgllMiAwOCAwYiAxNiAJc3RcLmIgcjFcW3I4PDwweDFcXSxyNgorKyAqWzAtOWEtZl0qOglmYyAwZSAwYiAzMSAJc3RcLmIgbHJcW2xyPDwweDNcXSxyMQorKyAqWzAtOWEtZl0qOgllYSAwMCAwYiAyZiAJc3RcLmIgcjVcW3IwPDwweDJcXSxwYworKworK1swLTlhLWZdKiA8ZGl2cz46CisrICpbMC05YS1mXSo6CWZlIDBmIDBjIDBmIAlkaXZzIHBjLHBjLHBjCisrICpbMC05YS1mXSo6CWY4IDBjIDBjIDBjIAlkaXZzIHIxMixyMTIscjEyCisrICpbMC05YS1mXSo6CWVhIDA1IDBjIDA1IAlkaXZzIHI1LHI1LHI1CisrICpbMC05YS1mXSo6CWU4IDA0IDBjIDA0IAlkaXZzIHI0LHI0LHI0CisrICpbMC05YS1mXSo6CWZjIDBlIDBjIDBlIAlkaXZzIGxyLGxyLGxyCisrICpbMC05YS1mXSo6CWZlIDBmIDBjIDAzIAlkaXZzIHIzLHBjLHBjCisrICpbMC05YS1mXSo6CWY4IDAyIDBjIDA5IAlkaXZzIHI5LHIxMixyMgorKyAqWzAtOWEtZl0qOgllOCAwMSAwYyAwNyAJZGl2cyByNyxyNCxyMQorKworK1swLTlhLWZdKiA8YWRkMT46CisrICpbMC05YS1mXSo6CTFlIDBmICAgICAgIAlhZGQgcGMscGMKKysgKlswLTlhLWZdKjoJMTggMGMgICAgICAgCWFkZCByMTIscjEyCisrICpbMC05YS1mXSo6CTBhIDA1ICAgICAgIAlhZGQgcjUscjUKKysgKlswLTlhLWZdKjoJMDggMDQgICAgICAgCWFkZCByNCxyNAorKyAqWzAtOWEtZl0qOgkxYyAwZSAgICAgICAJYWRkIGxyLGxyCisrICpbMC05YS1mXSo6CTEyIDBjICAgICAgIAlhZGQgcjEyLHI5CisrICpbMC05YS1mXSo6CTA2IDA2ICAgICAgIAlhZGQgcjYscjMKKysgKlswLTlhLWZdKjoJMTggMGEgICAgICAgCWFkZCByMTAscjEyCisrCisrWzAtOWEtZl0qIDxzdWIxPjoKKysgKlswLTlhLWZdKjoJMWUgMWYgICAgICAgCXN1YiBwYyxwYworKyAqWzAtOWEtZl0qOgkxOCAxYyAgICAgICAJc3ViIHIxMixyMTIKKysgKlswLTlhLWZdKjoJMGEgMTUgICAgICAgCXN1YiByNSxyNQorKyAqWzAtOWEtZl0qOgkwOCAxNCAgICAgICAJc3ViIHI0LHI0CisrICpbMC05YS1mXSo6CTFjIDFlICAgICAgIAlzdWIgbHIsbHIKKysgKlswLTlhLWZdKjoJMGMgMWUgICAgICAgCXN1YiBscixyNgorKyAqWzAtOWEtZl0qOgkxYSAxMCAgICAgICAJc3ViIHIwLHNwCisrICpbMC05YS1mXSo6CTE4IDE2ICAgICAgIAlzdWIgcjYscjEyCisrCisrWzAtOWEtZl0qIDxyc3ViMT46CisrICpbMC05YS1mXSo6CTFlIDJmICAgICAgIAlyc3ViIHBjLHBjCisrICpbMC05YS1mXSo6CTE4IDJjICAgICAgIAlyc3ViIHIxMixyMTIKKysgKlswLTlhLWZdKjoJMGEgMjUgICAgICAgCXJzdWIgcjUscjUKKysgKlswLTlhLWZdKjoJMDggMjQgICAgICAgCXJzdWIgcjQscjQKKysgKlswLTlhLWZdKjoJMWMgMmUgICAgICAgCXJzdWIgbHIsbHIKKysgKlswLTlhLWZdKjoJMWEgMmIgICAgICAgCXJzdWIgcjExLHNwCisrICpbMC05YS1mXSo6CTA4IDI3ICAgICAgIAlyc3ViIHI3LHI0CisrICpbMC05YS1mXSo6CTAyIDI5ICAgICAgIAlyc3ViIHI5LHIxCisrCisrWzAtOWEtZl0qIDxjcDE+OgorKyAqWzAtOWEtZl0qOgkxZSAzZiAgICAgICAJY3BcLncgcGMscGMKKysgKlswLTlhLWZdKjoJMTggM2MgICAgICAgCWNwXC53IHIxMixyMTIKKysgKlswLTlhLWZdKjoJMGEgMzUgICAgICAgCWNwXC53IHI1LHI1CisrICpbMC05YS1mXSo6CTA4IDM0ICAgICAgIAljcFwudyByNCxyNAorKyAqWzAtOWEtZl0qOgkxYyAzZSAgICAgICAJY3BcLncgbHIsbHIKKysgKlswLTlhLWZdKjoJMDQgMzYgICAgICAgCWNwXC53IHI2LHIyCisrICpbMC05YS1mXSo6CTEyIDMwICAgICAgIAljcFwudyByMCxyOQorKyAqWzAtOWEtZl0qOgkxYSAzMyAgICAgICAJY3BcLncgcjMsc3AKKysKKytbMC05YS1mXSogPG9yMT46CisrICpbMC05YS1mXSo6CTFlIDRmICAgICAgIAlvciBwYyxwYworKyAqWzAtOWEtZl0qOgkxOCA0YyAgICAgICAJb3IgcjEyLHIxMgorKyAqWzAtOWEtZl0qOgkwYSA0NSAgICAgICAJb3IgcjUscjUKKysgKlswLTlhLWZdKjoJMDggNDQgICAgICAgCW9yIHI0LHI0CisrICpbMC05YS1mXSo6CTFjIDRlICAgICAgIAlvciBscixscgorKyAqWzAtOWEtZl0qOgkxMiA0NCAgICAgICAJb3IgcjQscjkKKysgKlswLTlhLWZdKjoJMDggNGIgICAgICAgCW9yIHIxMSxyNAorKyAqWzAtOWEtZl0qOgkwMCA0NCAgICAgICAJb3IgcjQscjAKKysKKytbMC05YS1mXSogPGVvcjE+OgorKyAqWzAtOWEtZl0qOgkxZSA1ZiAgICAgICAJZW9yIHBjLHBjCisrICpbMC05YS1mXSo6CTE4IDVjICAgICAgIAllb3IgcjEyLHIxMgorKyAqWzAtOWEtZl0qOgkwYSA1NSAgICAgICAJZW9yIHI1LHI1CisrICpbMC05YS1mXSo6CTA4IDU0ICAgICAgIAllb3IgcjQscjQKKysgKlswLTlhLWZdKjoJMWMgNWUgICAgICAgCWVvciBscixscgorKyAqWzAtOWEtZl0qOgkxNiA1YyAgICAgICAJZW9yIHIxMixyMTEKKysgKlswLTlhLWZdKjoJMDIgNTAgICAgICAgCWVvciByMCxyMQorKyAqWzAtOWEtZl0qOgkxZSA1NSAgICAgICAJZW9yIHI1LHBjCisrCisrWzAtOWEtZl0qIDxhbmQxPjoKKysgKlswLTlhLWZdKjoJMWUgNmYgICAgICAgCWFuZCBwYyxwYworKyAqWzAtOWEtZl0qOgkxOCA2YyAgICAgICAJYW5kIHIxMixyMTIKKysgKlswLTlhLWZdKjoJMGEgNjUgICAgICAgCWFuZCByNSxyNQorKyAqWzAtOWEtZl0qOgkwOCA2NCAgICAgICAJYW5kIHI0LHI0CisrICpbMC05YS1mXSo6CTFjIDZlICAgICAgIAlhbmQgbHIsbHIKKysgKlswLTlhLWZdKjoJMDIgNjggICAgICAgCWFuZCByOCxyMQorKyAqWzAtOWEtZl0qOgkxYSA2MCAgICAgICAJYW5kIHIwLHNwCisrICpbMC05YS1mXSo6CTBhIDZhICAgICAgIAlhbmQgcjEwLHI1CisrCisrWzAtOWEtZl0qIDx0c3Q+OgorKyAqWzAtOWEtZl0qOgkxZSA3ZiAgICAgICAJdHN0IHBjLHBjCisrICpbMC05YS1mXSo6CTE4IDdjICAgICAgIAl0c3QgcjEyLHIxMgorKyAqWzAtOWEtZl0qOgkwYSA3NSAgICAgICAJdHN0IHI1LHI1CisrICpbMC05YS1mXSo6CTA4IDc0ICAgICAgIAl0c3QgcjQscjQKKysgKlswLTlhLWZdKjoJMWMgN2UgICAgICAgCXRzdCBscixscgorKyAqWzAtOWEtZl0qOgkxOCA3MCAgICAgICAJdHN0IHIwLHIxMgorKyAqWzAtOWEtZl0qOgkwYyA3YSAgICAgICAJdHN0IHIxMCxyNgorKyAqWzAtOWEtZl0qOgkwOCA3ZCAgICAgICAJdHN0IHNwLHI0CisrCisrWzAtOWEtZl0qIDxhbmRuPjoKKysgKlswLTlhLWZdKjoJMWUgOGYgICAgICAgCWFuZG4gcGMscGMKKysgKlswLTlhLWZdKjoJMTggOGMgICAgICAgCWFuZG4gcjEyLHIxMgorKyAqWzAtOWEtZl0qOgkwYSA4NSAgICAgICAJYW5kbiByNSxyNQorKyAqWzAtOWEtZl0qOgkwOCA4NCAgICAgICAJYW5kbiByNCxyNAorKyAqWzAtOWEtZl0qOgkxYyA4ZSAgICAgICAJYW5kbiBscixscgorKyAqWzAtOWEtZl0qOgkxOCA4OSAgICAgICAJYW5kbiByOSxyMTIKKysgKlswLTlhLWZdKjoJMWEgOGIgICAgICAgCWFuZG4gcjExLHNwCisrICpbMC05YS1mXSo6CTBhIDhjICAgICAgIAlhbmRuIHIxMixyNQorKworK1swLTlhLWZdKiA8bW92Mz46CisrICpbMC05YS1mXSo6CTFlIDlmICAgICAgIAltb3YgcGMscGMKKysgKlswLTlhLWZdKjoJMTggOWMgICAgICAgCW1vdiByMTIscjEyCisrICpbMC05YS1mXSo6CTBhIDk1ICAgICAgIAltb3YgcjUscjUKKysgKlswLTlhLWZdKjoJMDggOTQgICAgICAgCW1vdiByNCxyNAorKyAqWzAtOWEtZl0qOgkxYyA5ZSAgICAgICAJbW92IGxyLGxyCisrICpbMC05YS1mXSo6CTEyIDk1ICAgICAgIAltb3YgcjUscjkKKysgKlswLTlhLWZdKjoJMTYgOWIgICAgICAgCW1vdiByMTEscjExCisrICpbMC05YS1mXSo6CTFjIDkyICAgICAgIAltb3YgcjIsbHIKKysKKytbMC05YS1mXSogPHN0X3cxPjoKKysgKlswLTlhLWZdKjoJMWUgYWYgICAgICAgCXN0XC53IHBjXCtcKyxwYworKyAqWzAtOWEtZl0qOgkxOCBhYyAgICAgICAJc3RcLncgcjEyXCtcKyxyMTIKKysgKlswLTlhLWZdKjoJMGEgYTUgICAgICAgCXN0XC53IHI1XCtcKyxyNQorKyAqWzAtOWEtZl0qOgkwOCBhNCAgICAgICAJc3RcLncgcjRcK1wrLHI0CisrICpbMC05YS1mXSo6CTFjIGFlICAgICAgIAlzdFwudyBsclwrXCssbHIKKysgKlswLTlhLWZdKjoJMDIgYWIgICAgICAgCXN0XC53IHIxXCtcKyxyMTEKKysgKlswLTlhLWZdKjoJMWEgYTAgICAgICAgCXN0XC53IHNwXCtcKyxyMAorKyAqWzAtOWEtZl0qOgkxYSBhMSAgICAgICAJc3RcLncgc3BcK1wrLHIxCisrCisrWzAtOWEtZl0qIDxzdF9oMT46CisrICpbMC05YS1mXSo6CTFlIGJmICAgICAgIAlzdFwuaCBwY1wrXCsscGMKKysgKlswLTlhLWZdKjoJMTggYmMgICAgICAgCXN0XC5oIHIxMlwrXCsscjEyCisrICpbMC05YS1mXSo6CTBhIGI1ICAgICAgIAlzdFwuaCByNVwrXCsscjUKKysgKlswLTlhLWZdKjoJMDggYjQgICAgICAgCXN0XC5oIHI0XCtcKyxyNAorKyAqWzAtOWEtZl0qOgkxYyBiZSAgICAgICAJc3RcLmggbHJcK1wrLGxyCisrICpbMC05YS1mXSo6CTE4IGJkICAgICAgIAlzdFwuaCByMTJcK1wrLHNwCisrICpbMC05YS1mXSo6CTBlIGJlICAgICAgIAlzdFwuaCByN1wrXCssbHIKKysgKlswLTlhLWZdKjoJMGUgYjQgICAgICAgCXN0XC5oIHI3XCtcKyxyNAorKworK1swLTlhLWZdKiA8c3RfYjE+OgorKyAqWzAtOWEtZl0qOgkxZSBjZiAgICAgICAJc3RcLmIgcGNcK1wrLHBjCisrICpbMC05YS1mXSo6CTE4IGNjICAgICAgIAlzdFwuYiByMTJcK1wrLHIxMgorKyAqWzAtOWEtZl0qOgkwYSBjNSAgICAgICAJc3RcLmIgcjVcK1wrLHI1CisrICpbMC05YS1mXSo6CTA4IGM0ICAgICAgIAlzdFwuYiByNFwrXCsscjQKKysgKlswLTlhLWZdKjoJMWMgY2UgICAgICAgCXN0XC5iIGxyXCtcKyxscgorKyAqWzAtOWEtZl0qOgkxMiBjZCAgICAgICAJc3RcLmIgcjlcK1wrLHNwCisrICpbMC05YS1mXSo6CTAyIGNkICAgICAgIAlzdFwuYiByMVwrXCssc3AKKysgKlswLTlhLWZdKjoJMDAgYzQgICAgICAgCXN0XC5iIHIwXCtcKyxyNAorKworK1swLTlhLWZdKiA8c3RfdzI+OgorKyAqWzAtOWEtZl0qOgkxZSBkZiAgICAgICAJc3RcLncgLS1wYyxwYworKyAqWzAtOWEtZl0qOgkxOCBkYyAgICAgICAJc3RcLncgLS1yMTIscjEyCisrICpbMC05YS1mXSo6CTBhIGQ1ICAgICAgIAlzdFwudyAtLXI1LHI1CisrICpbMC05YS1mXSo6CTA4IGQ0ICAgICAgIAlzdFwudyAtLXI0LHI0CisrICpbMC05YS1mXSo6CTFjIGRlICAgICAgIAlzdFwudyAtLWxyLGxyCisrICpbMC05YS1mXSo6CTAyIGQ3ICAgICAgIAlzdFwudyAtLXIxLHI3CisrICpbMC05YS1mXSo6CTA2IGQ5ICAgICAgIAlzdFwudyAtLXIzLHI5CisrICpbMC05YS1mXSo6CTBhIGQ1ICAgICAgIAlzdFwudyAtLXI1LHI1CisrCisrWzAtOWEtZl0qIDxzdF9oMj46CisrICpbMC05YS1mXSo6CTFlIGVmICAgICAgIAlzdFwuaCAtLXBjLHBjCisrICpbMC05YS1mXSo6CTE4IGVjICAgICAgIAlzdFwuaCAtLXIxMixyMTIKKysgKlswLTlhLWZdKjoJMGEgZTUgICAgICAgCXN0XC5oIC0tcjUscjUKKysgKlswLTlhLWZdKjoJMDggZTQgICAgICAgCXN0XC5oIC0tcjQscjQKKysgKlswLTlhLWZdKjoJMWMgZWUgICAgICAgCXN0XC5oIC0tbHIsbHIKKysgKlswLTlhLWZdKjoJMGEgZTcgICAgICAgCXN0XC5oIC0tcjUscjcKKysgKlswLTlhLWZdKjoJMTAgZTggICAgICAgCXN0XC5oIC0tcjgscjgKKysgKlswLTlhLWZdKjoJMGUgZTIgICAgICAgCXN0XC5oIC0tcjcscjIKKysKKytbMC05YS1mXSogPHN0X2IyPjoKKysgKlswLTlhLWZdKjoJMWUgZmYgICAgICAgCXN0XC5iIC0tcGMscGMKKysgKlswLTlhLWZdKjoJMTggZmMgICAgICAgCXN0XC5iIC0tcjEyLHIxMgorKyAqWzAtOWEtZl0qOgkwYSBmNSAgICAgICAJc3RcLmIgLS1yNSxyNQorKyAqWzAtOWEtZl0qOgkwOCBmNCAgICAgICAJc3RcLmIgLS1yNCxyNAorKyAqWzAtOWEtZl0qOgkxYyBmZSAgICAgICAJc3RcLmIgLS1scixscgorKyAqWzAtOWEtZl0qOgkxYSBmZCAgICAgICAJc3RcLmIgLS1zcCxzcAorKyAqWzAtOWEtZl0qOgkxYSBmYiAgICAgICAJc3RcLmIgLS1zcCxyMTEKKysgKlswLTlhLWZdKjoJMDggZjUgICAgICAgCXN0XC5iIC0tcjQscjUKKysKKytbMC05YS1mXSogPGxkX3cxPjoKKysgKlswLTlhLWZdKjoJMWYgMGYgICAgICAgCWxkXC53IHBjLHBjXCtcKworKyAqWzAtOWEtZl0qOgkxOSAwYyAgICAgICAJbGRcLncgcjEyLHIxMlwrXCsKKysgKlswLTlhLWZdKjoJMGIgMDUgICAgICAgCWxkXC53IHI1LHI1XCtcKworKyAqWzAtOWEtZl0qOgkwOSAwNCAgICAgICAJbGRcLncgcjQscjRcK1wrCisrICpbMC05YS1mXSo6CTFkIDBlICAgICAgIAlsZFwudyBscixsclwrXCsKKysgKlswLTlhLWZdKjoJMGYgMDMgICAgICAgCWxkXC53IHIzLHI3XCtcKworKyAqWzAtOWEtZl0qOgkxZCAwMyAgICAgICAJbGRcLncgcjMsbHJcK1wrCisrICpbMC05YS1mXSo6CTBiIDBjICAgICAgIAlsZFwudyByMTIscjVcK1wrCisrCisrWzAtOWEtZl0qIDxsZF9zaDE+OgorKyAqWzAtOWEtZl0qOgkxZiAxZiAgICAgICAJbGRcLnNoIHBjLHBjXCtcKworKyAqWzAtOWEtZl0qOgkxOSAxYyAgICAgICAJbGRcLnNoIHIxMixyMTJcK1wrCisrICpbMC05YS1mXSo6CTBiIDE1ICAgICAgIAlsZFwuc2ggcjUscjVcK1wrCisrICpbMC05YS1mXSo6CTA5IDE0ICAgICAgIAlsZFwuc2ggcjQscjRcK1wrCisrICpbMC05YS1mXSo6CTFkIDFlICAgICAgIAlsZFwuc2ggbHIsbHJcK1wrCisrICpbMC05YS1mXSo6CTA1IDFiICAgICAgIAlsZFwuc2ggcjExLHIyXCtcKworKyAqWzAtOWEtZl0qOgkxMSAxMiAgICAgICAJbGRcLnNoIHIyLHI4XCtcKworKyAqWzAtOWEtZl0qOgkwZCAxNyAgICAgICAJbGRcLnNoIHI3LHI2XCtcKworKworK1swLTlhLWZdKiA8bGRfdWgxPjoKKysgKlswLTlhLWZdKjoJMWYgMmYgICAgICAgCWxkXC51aCBwYyxwY1wrXCsKKysgKlswLTlhLWZdKjoJMTkgMmMgICAgICAgCWxkXC51aCByMTIscjEyXCtcKworKyAqWzAtOWEtZl0qOgkwYiAyNSAgICAgICAJbGRcLnVoIHI1LHI1XCtcKworKyAqWzAtOWEtZl0qOgkwOSAyNCAgICAgICAJbGRcLnVoIHI0LHI0XCtcKworKyAqWzAtOWEtZl0qOgkxZCAyZSAgICAgICAJbGRcLnVoIGxyLGxyXCtcKworKyAqWzAtOWEtZl0qOgkwZiAyNiAgICAgICAJbGRcLnVoIHI2LHI3XCtcKworKyAqWzAtOWEtZl0qOgkxNyAyYSAgICAgICAJbGRcLnVoIHIxMCxyMTFcK1wrCisrICpbMC05YS1mXSo6CTA5IDJlICAgICAgIAlsZFwudWggbHIscjRcK1wrCisrCisrWzAtOWEtZl0qIDxsZF91YjE+OgorKyAqWzAtOWEtZl0qOgkxZiAzZiAgICAgICAJbGRcLnViIHBjLHBjXCtcKworKyAqWzAtOWEtZl0qOgkxOSAzYyAgICAgICAJbGRcLnViIHIxMixyMTJcK1wrCisrICpbMC05YS1mXSo6CTBiIDM1ICAgICAgIAlsZFwudWIgcjUscjVcK1wrCisrICpbMC05YS1mXSo6CTA5IDM0ICAgICAgIAlsZFwudWIgcjQscjRcK1wrCisrICpbMC05YS1mXSo6CTFkIDNlICAgICAgIAlsZFwudWIgbHIsbHJcK1wrCisrICpbMC05YS1mXSo6CTFkIDM4ICAgICAgIAlsZFwudWIgcjgsbHJcK1wrCisrICpbMC05YS1mXSo6CTE5IDNjICAgICAgIAlsZFwudWIgcjEyLHIxMlwrXCsKKysgKlswLTlhLWZdKjoJMTUgM2IgICAgICAgCWxkXC51YiByMTEscjEwXCtcKworKworK1swLTlhLWZdKiA8bGRfdzI+OgorKyAqWzAtOWEtZl0qOgkxZiA0ZiAgICAgICAJbGRcLncgcGMsLS1wYworKyAqWzAtOWEtZl0qOgkxOSA0YyAgICAgICAJbGRcLncgcjEyLC0tcjEyCisrICpbMC05YS1mXSo6CTBiIDQ1ICAgICAgIAlsZFwudyByNSwtLXI1CisrICpbMC05YS1mXSo6CTA5IDQ0ICAgICAgIAlsZFwudyByNCwtLXI0CisrICpbMC05YS1mXSo6CTFkIDRlICAgICAgIAlsZFwudyBsciwtLWxyCisrICpbMC05YS1mXSo6CTFkIDRhICAgICAgIAlsZFwudyByMTAsLS1scgorKyAqWzAtOWEtZl0qOgkxMyA0YyAgICAgICAJbGRcLncgcjEyLC0tcjkKKysgKlswLTlhLWZdKjoJMGIgNDYgICAgICAgCWxkXC53IHI2LC0tcjUKKysKKytbMC05YS1mXSogPGxkX3NoMj46CisrICpbMC05YS1mXSo6CTFmIDVmICAgICAgIAlsZFwuc2ggcGMsLS1wYworKyAqWzAtOWEtZl0qOgkxOSA1YyAgICAgICAJbGRcLnNoIHIxMiwtLXIxMgorKyAqWzAtOWEtZl0qOgkwYiA1NSAgICAgICAJbGRcLnNoIHI1LC0tcjUKKysgKlswLTlhLWZdKjoJMDkgNTQgICAgICAgCWxkXC5zaCByNCwtLXI0CisrICpbMC05YS1mXSo6CTFkIDVlICAgICAgIAlsZFwuc2ggbHIsLS1scgorKyAqWzAtOWEtZl0qOgkxNSA1ZiAgICAgICAJbGRcLnNoIHBjLC0tcjEwCisrICpbMC05YS1mXSo6CTA3IDU2ICAgICAgIAlsZFwuc2ggcjYsLS1yMworKyAqWzAtOWEtZl0qOgkwZCA1NCAgICAgICAJbGRcLnNoIHI0LC0tcjYKKysKKytbMC05YS1mXSogPGxkX3VoMj46CisrICpbMC05YS1mXSo6CTFmIDZmICAgICAgIAlsZFwudWggcGMsLS1wYworKyAqWzAtOWEtZl0qOgkxOSA2YyAgICAgICAJbGRcLnVoIHIxMiwtLXIxMgorKyAqWzAtOWEtZl0qOgkwYiA2NSAgICAgICAJbGRcLnVoIHI1LC0tcjUKKysgKlswLTlhLWZdKjoJMDkgNjQgICAgICAgCWxkXC51aCByNCwtLXI0CisrICpbMC05YS1mXSo6CTFkIDZlICAgICAgIAlsZFwudWggbHIsLS1scgorKyAqWzAtOWEtZl0qOgkwNSA2MyAgICAgICAJbGRcLnVoIHIzLC0tcjIKKysgKlswLTlhLWZdKjoJMDEgNjEgICAgICAgCWxkXC51aCByMSwtLXIwCisrICpbMC05YS1mXSo6CTEzIDYyICAgICAgIAlsZFwudWggcjIsLS1yOQorKworK1swLTlhLWZdKiA8bGRfdWIyPjoKKysgKlswLTlhLWZdKjoJMWYgN2YgICAgICAgCWxkXC51YiBwYywtLXBjCisrICpbMC05YS1mXSo6CTE5IDdjICAgICAgIAlsZFwudWIgcjEyLC0tcjEyCisrICpbMC05YS1mXSo6CTBiIDc1ICAgICAgIAlsZFwudWIgcjUsLS1yNQorKyAqWzAtOWEtZl0qOgkwOSA3NCAgICAgICAJbGRcLnViIHI0LC0tcjQKKysgKlswLTlhLWZdKjoJMWQgN2UgICAgICAgCWxkXC51YiBsciwtLWxyCisrICpbMC05YS1mXSo6CTAzIDcxICAgICAgIAlsZFwudWIgcjEsLS1yMQorKyAqWzAtOWEtZl0qOgkwZCA3MCAgICAgICAJbGRcLnViIHIwLC0tcjYKKysgKlswLTlhLWZdKjoJMGYgNzIgICAgICAgCWxkXC51YiByMiwtLXI3CisrCisrWzAtOWEtZl0qIDxsZF91YjM+OgorKyAqWzAtOWEtZl0qOgkxZiA4ZiAgICAgICAJbGRcLnViIHBjLHBjXFsweDBcXQorKyAqWzAtOWEtZl0qOgkxOSBmYyAgICAgICAJbGRcLnViIHIxMixyMTJcWzB4N1xdCisrICpbMC05YS1mXSo6CTBiIGM1ICAgICAgIAlsZFwudWIgcjUscjVcWzB4NFxdCisrICpbMC05YS1mXSo6CTA5IGI0ICAgICAgIAlsZFwudWIgcjQscjRcWzB4M1xdCisrICpbMC05YS1mXSo6CTFkIDllICAgICAgIAlsZFwudWIgbHIsbHJcWzB4MVxdCisrICpbMC05YS1mXSo6CTEzIGU2ICAgICAgIAlsZFwudWIgcjYscjlcWzB4NlxdCisrICpbMC05YS1mXSo6CTFkIGMyICAgICAgIAlsZFwudWIgcjIsbHJcWzB4NFxdCisrICpbMC05YS1mXSo6CTExIDgxICAgICAgIAlsZFwudWIgcjEscjhcWzB4MFxdCisrCisrWzAtOWEtZl0qIDxzdWIzX3NwPjoKKysgKlswLTlhLWZdKjoJMjAgMGQgICAgICAgCXN1YiBzcCwwCisrICpbMC05YS1mXSo6CTJmIGZkICAgICAgIAlzdWIgc3AsLTQKKysgKlswLTlhLWZdKjoJMjggMGQgICAgICAgCXN1YiBzcCwtNTEyCisrICpbMC05YS1mXSo6CTI3IGZkICAgICAgIAlzdWIgc3AsNTA4CisrICpbMC05YS1mXSo6CTIwIDFkICAgICAgIAlzdWIgc3AsNAorKyAqWzAtOWEtZl0qOgkyMCBiZCAgICAgICAJc3ViIHNwLDQ0CisrICpbMC05YS1mXSo6CTIwIDJkICAgICAgIAlzdWIgc3AsOAorKyAqWzAtOWEtZl0qOgkyNSA3ZCAgICAgICAJc3ViIHNwLDM0OAorKworK1swLTlhLWZdKiA8c3ViMz46CisrICpbMC05YS1mXSo6CTIwIDBmICAgICAgIAlzdWIgcGMsMAorKyAqWzAtOWEtZl0qOgkyZiBmYyAgICAgICAJc3ViIHIxMiwtMQorKyAqWzAtOWEtZl0qOgkyOCAwNSAgICAgICAJc3ViIHI1LC0xMjgKKysgKlswLTlhLWZdKjoJMjcgZjQgICAgICAgCXN1YiByNCwxMjcKKysgKlswLTlhLWZdKjoJMjAgMWUgICAgICAgCXN1YiBsciwxCisrICpbMC05YS1mXSo6CTJkIDc2ICAgICAgIAlzdWIgcjYsLTQxCisrICpbMC05YS1mXSo6CTIyIDU0ICAgICAgIAlzdWIgcjQsMzcKKysgKlswLTlhLWZdKjoJMjMgOGMgICAgICAgCXN1YiByMTIsNTYKKysKKytbMC05YS1mXSogPG1vdjE+OgorKyAqWzAtOWEtZl0qOgkzMCAwZiAgICAgICAJbW92IHBjLDAKKysgKlswLTlhLWZdKjoJM2YgZmMgICAgICAgCW1vdiByMTIsLTEKKysgKlswLTlhLWZdKjoJMzggMDUgICAgICAgCW1vdiByNSwtMTI4CisrICpbMC05YS1mXSo6CTM3IGY0ICAgICAgIAltb3YgcjQsMTI3CisrICpbMC05YS1mXSo6CTMwIDFlICAgICAgIAltb3YgbHIsMQorKyAqWzAtOWEtZl0qOgkzMCBlZiAgICAgICAJbW92IHBjLDE0CisrICpbMC05YS1mXSo6CTM5IGM2ICAgICAgIAltb3YgcjYsLTEwMAorKyAqWzAtOWEtZl0qOgkzOCA2ZSAgICAgICAJbW92IGxyLC0xMjIKKysKKytbMC05YS1mXSogPGxkZHNwPjoKKysgKlswLTlhLWZdKjoJNDAgMGYgICAgICAgCWxkZHNwIHBjLHNwXFsweDBcXQorKyAqWzAtOWEtZl0qOgk0NyBmYyAgICAgICAJbGRkc3AgcjEyLHNwXFsweDFmY1xdCisrICpbMC05YS1mXSo6CTQ0IDA1ICAgICAgIAlsZGRzcCByNSxzcFxbMHgxMDBcXQorKyAqWzAtOWEtZl0qOgk0MyBmNCAgICAgICAJbGRkc3AgcjQsc3BcWzB4ZmNcXQorKyAqWzAtOWEtZl0qOgk0MCAxZSAgICAgICAJbGRkc3AgbHIsc3BcWzB4NFxdCisrICpbMC05YS1mXSo6CTQ0IDBlICAgICAgIAlsZGRzcCBscixzcFxbMHgxMDBcXQorKyAqWzAtOWEtZl0qOgk0MCA1YyAgICAgICAJbGRkc3AgcjEyLHNwXFsweDE0XF0KKysgKlswLTlhLWZdKjoJNDcgNjkgICAgICAgCWxkZHNwIHI5LHNwXFsweDFkOFxdCisrCisrWzAtOWEtZl0qIDxsZGRwYz46CisrICpbMC05YS1mXSo6CTQ4IDBmICAgICAgIAlsZGRwYyBwYyxbMC05YS1mXSogPC4qPgorKyAqWzAtOWEtZl0qOgk0ZiBmMCAgICAgICAJbGRkcGMgcjAsWzAtOWEtZl0qIDwuKj4KKysgKlswLTlhLWZdKjoJNGMgMDggICAgICAgCWxkZHBjIHI4LFswLTlhLWZdKiA8Lio+CisrICpbMC05YS1mXSo6CTRiIGY3ICAgICAgIAlsZGRwYyByNyxbMC05YS1mXSogPC4qPgorKyAqWzAtOWEtZl0qOgk0OCAxZSAgICAgICAJbGRkcGMgbHIsWzAtOWEtZl0qIDwuKj4KKysgKlswLTlhLWZdKjoJNGYgNmQgICAgICAgCWxkZHBjIHNwLFswLTlhLWZdKiA8Lio+CisrICpbMC05YS1mXSo6CTQ5IGU2ICAgICAgIAlsZGRwYyByNixbMC05YS1mXSogPC4qPgorKyAqWzAtOWEtZl0qOgk0OCA3YiAgICAgICAJbGRkcGMgcjExLFswLTlhLWZdKiA8Lio+CisrCisrWzAtOWEtZl0qIDxzdGRzcD46CisrICpbMC05YS1mXSo6CTUwIDBmICAgICAgIAlzdGRzcCBzcFxbMHgwXF0scGMKKysgKlswLTlhLWZdKjoJNTcgZmMgICAgICAgCXN0ZHNwIHNwXFsweDFmY1xdLHIxMgorKyAqWzAtOWEtZl0qOgk1NCAwNSAgICAgICAJc3Rkc3Agc3BcWzB4MTAwXF0scjUKKysgKlswLTlhLWZdKjoJNTMgZjQgICAgICAgCXN0ZHNwIHNwXFsweGZjXF0scjQKKysgKlswLTlhLWZdKjoJNTAgMWUgICAgICAgCXN0ZHNwIHNwXFsweDRcXSxscgorKyAqWzAtOWEtZl0qOgk1NCBjZiAgICAgICAJc3Rkc3Agc3BcWzB4MTMwXF0scGMKKysgKlswLTlhLWZdKjoJNTQgMDAgICAgICAgCXN0ZHNwIHNwXFsweDEwMFxdLHIwCisrICpbMC05YS1mXSo6CTU1IDQ1ICAgICAgIAlzdGRzcCBzcFxbMHgxNTBcXSxyNQorKworK1swLTlhLWZdKiA8Y3AyPjoKKysgKlswLTlhLWZdKjoJNTggMGYgICAgICAgCWNwLncgcGMsMAorKyAqWzAtOWEtZl0qOgk1YiBmYyAgICAgICAJY3AudyByMTIsLTEKKysgKlswLTlhLWZdKjoJNWEgMDUgICAgICAgCWNwLncgcjUsLTMyCisrICpbMC05YS1mXSo6CTU5IGY0ICAgICAgIAljcC53IHI0LDMxCisrICpbMC05YS1mXSo6CTU4IDFlICAgICAgIAljcC53IGxyLDEKKysgKlswLTlhLWZdKjoJNTggMzggICAgICAgCWNwLncgcjgsMworKyAqWzAtOWEtZl0qOgk1OSAwZSAgICAgICAJY3AudyBsciwxNgorKyAqWzAtOWEtZl0qOgk1YSA2NyAgICAgICAJY3AudyByNywtMjYKKysKKytbMC05YS1mXSogPGFjcj46CisrICpbMC05YS1mXSo6CTVjIDBmICAgICAgIAlhY3IgcGMKKysgKlswLTlhLWZdKjoJNWMgMGMgICAgICAgCWFjciByMTIKKysgKlswLTlhLWZdKjoJNWMgMDUgICAgICAgCWFjciByNQorKyAqWzAtOWEtZl0qOgk1YyAwNCAgICAgICAJYWNyIHI0CisrICpbMC05YS1mXSo6CTVjIDBlICAgICAgIAlhY3IgbHIKKysgKlswLTlhLWZdKjoJNWMgMDIgICAgICAgCWFjciByMgorKyAqWzAtOWEtZl0qOgk1YyAwYyAgICAgICAJYWNyIHIxMgorKyAqWzAtOWEtZl0qOgk1YyAwZiAgICAgICAJYWNyIHBjCisrCisrWzAtOWEtZl0qIDxzY3I+OgorKyAqWzAtOWEtZl0qOgk1YyAxZiAgICAgICAJc2NyIHBjCisrICpbMC05YS1mXSo6CTVjIDFjICAgICAgIAlzY3IgcjEyCisrICpbMC05YS1mXSo6CTVjIDE1ICAgICAgIAlzY3IgcjUKKysgKlswLTlhLWZdKjoJNWMgMTQgICAgICAgCXNjciByNAorKyAqWzAtOWEtZl0qOgk1YyAxZSAgICAgICAJc2NyIGxyCisrICpbMC05YS1mXSo6CTVjIDFmICAgICAgIAlzY3IgcGMKKysgKlswLTlhLWZdKjoJNWMgMTYgICAgICAgCXNjciByNgorKyAqWzAtOWEtZl0qOgk1YyAxMSAgICAgICAJc2NyIHIxCisrCisrWzAtOWEtZl0qIDxjcGMwPjoKKysgKlswLTlhLWZdKjoJNWMgMmYgICAgICAgCWNwYyBwYworKyAqWzAtOWEtZl0qOgk1YyAyYyAgICAgICAJY3BjIHIxMgorKyAqWzAtOWEtZl0qOgk1YyAyNSAgICAgICAJY3BjIHI1CisrICpbMC05YS1mXSo6CTVjIDI0ICAgICAgIAljcGMgcjQKKysgKlswLTlhLWZdKjoJNWMgMmUgICAgICAgCWNwYyBscgorKyAqWzAtOWEtZl0qOgk1YyAyZiAgICAgICAJY3BjIHBjCisrICpbMC05YS1mXSo6CTVjIDI0ICAgICAgIAljcGMgcjQKKysgKlswLTlhLWZdKjoJNWMgMjkgICAgICAgCWNwYyByOQorKworK1swLTlhLWZdKiA8bmVnPjoKKysgKlswLTlhLWZdKjoJNWMgM2YgICAgICAgCW5lZyBwYworKyAqWzAtOWEtZl0qOgk1YyAzYyAgICAgICAJbmVnIHIxMgorKyAqWzAtOWEtZl0qOgk1YyAzNSAgICAgICAJbmVnIHI1CisrICpbMC05YS1mXSo6CTVjIDM0ICAgICAgIAluZWcgcjQKKysgKlswLTlhLWZdKjoJNWMgM2UgICAgICAgCW5lZyBscgorKyAqWzAtOWEtZl0qOgk1YyAzNyAgICAgICAJbmVnIHI3CisrICpbMC05YS1mXSo6CTVjIDMxICAgICAgIAluZWcgcjEKKysgKlswLTlhLWZdKjoJNWMgMzkgICAgICAgCW5lZyByOQorKworK1swLTlhLWZdKiA8YWJzPjoKKysgKlswLTlhLWZdKjoJNWMgNGYgICAgICAgCWFicyBwYworKyAqWzAtOWEtZl0qOgk1YyA0YyAgICAgICAJYWJzIHIxMgorKyAqWzAtOWEtZl0qOgk1YyA0NSAgICAgICAJYWJzIHI1CisrICpbMC05YS1mXSo6CTVjIDQ0ICAgICAgIAlhYnMgcjQKKysgKlswLTlhLWZdKjoJNWMgNGUgICAgICAgCWFicyBscgorKyAqWzAtOWEtZl0qOgk1YyA0NiAgICAgICAJYWJzIHI2CisrICpbMC05YS1mXSo6CTVjIDQ2ICAgICAgIAlhYnMgcjYKKysgKlswLTlhLWZdKjoJNWMgNDQgICAgICAgCWFicyByNAorKworK1swLTlhLWZdKiA8Y2FzdHVfYj46CisrICpbMC05YS1mXSo6CTVjIDVmICAgICAgIAljYXN0dVwuYiBwYworKyAqWzAtOWEtZl0qOgk1YyA1YyAgICAgICAJY2FzdHVcLmIgcjEyCisrICpbMC05YS1mXSo6CTVjIDU1ICAgICAgIAljYXN0dVwuYiByNQorKyAqWzAtOWEtZl0qOgk1YyA1NCAgICAgICAJY2FzdHVcLmIgcjQKKysgKlswLTlhLWZdKjoJNWMgNWUgICAgICAgCWNhc3R1XC5iIGxyCisrICpbMC05YS1mXSo6CTVjIDU3ICAgICAgIAljYXN0dVwuYiByNworKyAqWzAtOWEtZl0qOgk1YyA1ZCAgICAgICAJY2FzdHVcLmIgc3AKKysgKlswLTlhLWZdKjoJNWMgNTkgICAgICAgCWNhc3R1XC5iIHI5CisrCisrWzAtOWEtZl0qIDxjYXN0c19iPjoKKysgKlswLTlhLWZdKjoJNWMgNmYgICAgICAgCWNhc3RzXC5iIHBjCisrICpbMC05YS1mXSo6CTVjIDZjICAgICAgIAljYXN0c1wuYiByMTIKKysgKlswLTlhLWZdKjoJNWMgNjUgICAgICAgCWNhc3RzXC5iIHI1CisrICpbMC05YS1mXSo6CTVjIDY0ICAgICAgIAljYXN0c1wuYiByNAorKyAqWzAtOWEtZl0qOgk1YyA2ZSAgICAgICAJY2FzdHNcLmIgbHIKKysgKlswLTlhLWZdKjoJNWMgNmIgICAgICAgCWNhc3RzXC5iIHIxMQorKyAqWzAtOWEtZl0qOgk1YyA2MSAgICAgICAJY2FzdHNcLmIgcjEKKysgKlswLTlhLWZdKjoJNWMgNmEgICAgICAgCWNhc3RzXC5iIHIxMAorKworK1swLTlhLWZdKiA8Y2FzdHVfaD46CisrICpbMC05YS1mXSo6CTVjIDdmICAgICAgIAljYXN0dVwuaCBwYworKyAqWzAtOWEtZl0qOgk1YyA3YyAgICAgICAJY2FzdHVcLmggcjEyCisrICpbMC05YS1mXSo6CTVjIDc1ICAgICAgIAljYXN0dVwuaCByNQorKyAqWzAtOWEtZl0qOgk1YyA3NCAgICAgICAJY2FzdHVcLmggcjQKKysgKlswLTlhLWZdKjoJNWMgN2UgICAgICAgCWNhc3R1XC5oIGxyCisrICpbMC05YS1mXSo6CTVjIDdhICAgICAgIAljYXN0dVwuaCByMTAKKysgKlswLTlhLWZdKjoJNWMgN2IgICAgICAgCWNhc3R1XC5oIHIxMQorKyAqWzAtOWEtZl0qOgk1YyA3MSAgICAgICAJY2FzdHVcLmggcjEKKysKKytbMC05YS1mXSogPGNhc3RzX2g+OgorKyAqWzAtOWEtZl0qOgk1YyA4ZiAgICAgICAJY2FzdHNcLmggcGMKKysgKlswLTlhLWZdKjoJNWMgOGMgICAgICAgCWNhc3RzXC5oIHIxMgorKyAqWzAtOWEtZl0qOgk1YyA4NSAgICAgICAJY2FzdHNcLmggcjUKKysgKlswLTlhLWZdKjoJNWMgODQgICAgICAgCWNhc3RzXC5oIHI0CisrICpbMC05YS1mXSo6CTVjIDhlICAgICAgIAljYXN0c1wuaCBscgorKyAqWzAtOWEtZl0qOgk1YyA4MCAgICAgICAJY2FzdHNcLmggcjAKKysgKlswLTlhLWZdKjoJNWMgODUgICAgICAgCWNhc3RzXC5oIHI1CisrICpbMC05YS1mXSo6CTVjIDg5ICAgICAgIAljYXN0c1wuaCByOQorKworK1swLTlhLWZdKiA8YnJldj46CisrICpbMC05YS1mXSo6CTVjIDlmICAgICAgIAlicmV2IHBjCisrICpbMC05YS1mXSo6CTVjIDljICAgICAgIAlicmV2IHIxMgorKyAqWzAtOWEtZl0qOgk1YyA5NSAgICAgICAJYnJldiByNQorKyAqWzAtOWEtZl0qOgk1YyA5NCAgICAgICAJYnJldiByNAorKyAqWzAtOWEtZl0qOgk1YyA5ZSAgICAgICAJYnJldiBscgorKyAqWzAtOWEtZl0qOgk1YyA5NSAgICAgICAJYnJldiByNQorKyAqWzAtOWEtZl0qOgk1YyA5YSAgICAgICAJYnJldiByMTAKKysgKlswLTlhLWZdKjoJNWMgOTggICAgICAgCWJyZXYgcjgKKysKKytbMC05YS1mXSogPHN3YXBfaD46CisrICpbMC05YS1mXSo6CTVjIGFmICAgICAgIAlzd2FwXC5oIHBjCisrICpbMC05YS1mXSo6CTVjIGFjICAgICAgIAlzd2FwXC5oIHIxMgorKyAqWzAtOWEtZl0qOgk1YyBhNSAgICAgICAJc3dhcFwuaCByNQorKyAqWzAtOWEtZl0qOgk1YyBhNCAgICAgICAJc3dhcFwuaCByNAorKyAqWzAtOWEtZl0qOgk1YyBhZSAgICAgICAJc3dhcFwuaCBscgorKyAqWzAtOWEtZl0qOgk1YyBhNyAgICAgICAJc3dhcFwuaCByNworKyAqWzAtOWEtZl0qOgk1YyBhMCAgICAgICAJc3dhcFwuaCByMAorKyAqWzAtOWEtZl0qOgk1YyBhOCAgICAgICAJc3dhcFwuaCByOAorKworK1swLTlhLWZdKiA8c3dhcF9iPjoKKysgKlswLTlhLWZdKjoJNWMgYmYgICAgICAgCXN3YXBcLmIgcGMKKysgKlswLTlhLWZdKjoJNWMgYmMgICAgICAgCXN3YXBcLmIgcjEyCisrICpbMC05YS1mXSo6CTVjIGI1ICAgICAgIAlzd2FwXC5iIHI1CisrICpbMC05YS1mXSo6CTVjIGI0ICAgICAgIAlzd2FwXC5iIHI0CisrICpbMC05YS1mXSo6CTVjIGJlICAgICAgIAlzd2FwXC5iIGxyCisrICpbMC05YS1mXSo6CTVjIGJhICAgICAgIAlzd2FwXC5iIHIxMAorKyAqWzAtOWEtZl0qOgk1YyBiYyAgICAgICAJc3dhcFwuYiByMTIKKysgKlswLTlhLWZdKjoJNWMgYjEgICAgICAgCXN3YXBcLmIgcjEKKysKKytbMC05YS1mXSogPHN3YXBfYmg+OgorKyAqWzAtOWEtZl0qOgk1YyBjZiAgICAgICAJc3dhcFwuYmggcGMKKysgKlswLTlhLWZdKjoJNWMgY2MgICAgICAgCXN3YXBcLmJoIHIxMgorKyAqWzAtOWEtZl0qOgk1YyBjNSAgICAgICAJc3dhcFwuYmggcjUKKysgKlswLTlhLWZdKjoJNWMgYzQgICAgICAgCXN3YXBcLmJoIHI0CisrICpbMC05YS1mXSo6CTVjIGNlICAgICAgIAlzd2FwXC5iaCBscgorKyAqWzAtOWEtZl0qOgk1YyBjOSAgICAgICAJc3dhcFwuYmggcjkKKysgKlswLTlhLWZdKjoJNWMgYzQgICAgICAgCXN3YXBcLmJoIHI0CisrICpbMC05YS1mXSo6CTVjIGMxICAgICAgIAlzd2FwXC5iaCByMQorKworK1swLTlhLWZdKiA8T25lX3NfY29tcGxpbWVudD46CisrICpbMC05YS1mXSo6CTVjIGRmICAgICAgIAljb20gcGMKKysgKlswLTlhLWZdKjoJNWMgZGMgICAgICAgCWNvbSByMTIKKysgKlswLTlhLWZdKjoJNWMgZDUgICAgICAgCWNvbSByNQorKyAqWzAtOWEtZl0qOgk1YyBkNCAgICAgICAJY29tIHI0CisrICpbMC05YS1mXSo6CTVjIGRlICAgICAgIAljb20gbHIKKysgKlswLTlhLWZdKjoJNWMgZDIgICAgICAgCWNvbSByMgorKyAqWzAtOWEtZl0qOgk1YyBkMiAgICAgICAJY29tIHIyCisrICpbMC05YS1mXSo6CTVjIGQ3ICAgICAgIAljb20gcjcKKysKKytbMC05YS1mXSogPHRuYno+OgorKyAqWzAtOWEtZl0qOgk1YyBlZiAgICAgICAJdG5ieiBwYworKyAqWzAtOWEtZl0qOgk1YyBlYyAgICAgICAJdG5ieiByMTIKKysgKlswLTlhLWZdKjoJNWMgZTUgICAgICAgCXRuYnogcjUKKysgKlswLTlhLWZdKjoJNWMgZTQgICAgICAgCXRuYnogcjQKKysgKlswLTlhLWZdKjoJNWMgZWUgICAgICAgCXRuYnogbHIKKysgKlswLTlhLWZdKjoJNWMgZTggICAgICAgCXRuYnogcjgKKysgKlswLTlhLWZdKjoJNWMgZWMgICAgICAgCXRuYnogcjEyCisrICpbMC05YS1mXSo6CTVjIGVmICAgICAgIAl0bmJ6IHBjCisrCisrWzAtOWEtZl0qIDxyb2w+OgorKyAqWzAtOWEtZl0qOgk1YyBmZiAgICAgICAJcm9sIHBjCisrICpbMC05YS1mXSo6CTVjIGZjICAgICAgIAlyb2wgcjEyCisrICpbMC05YS1mXSo6CTVjIGY1ICAgICAgIAlyb2wgcjUKKysgKlswLTlhLWZdKjoJNWMgZjQgICAgICAgCXJvbCByNAorKyAqWzAtOWEtZl0qOgk1YyBmZSAgICAgICAJcm9sIGxyCisrICpbMC05YS1mXSo6CTVjIGZhICAgICAgIAlyb2wgcjEwCisrICpbMC05YS1mXSo6CTVjIGY5ICAgICAgIAlyb2wgcjkKKysgKlswLTlhLWZdKjoJNWMgZjUgICAgICAgCXJvbCByNQorKworK1swLTlhLWZdKiA8cm9yPjoKKysgKlswLTlhLWZdKjoJNWQgMGYgICAgICAgCXJvciBwYworKyAqWzAtOWEtZl0qOgk1ZCAwYyAgICAgICAJcm9yIHIxMgorKyAqWzAtOWEtZl0qOgk1ZCAwNSAgICAgICAJcm9yIHI1CisrICpbMC05YS1mXSo6CTVkIDA0ICAgICAgIAlyb3IgcjQKKysgKlswLTlhLWZdKjoJNWQgMGUgICAgICAgCXJvciBscgorKyAqWzAtOWEtZl0qOgk1ZCAwOCAgICAgICAJcm9yIHI4CisrICpbMC05YS1mXSo6CTVkIDA0ICAgICAgIAlyb3IgcjQKKysgKlswLTlhLWZdKjoJNWQgMDcgICAgICAgCXJvciByNworKworK1swLTlhLWZdKiA8aWNhbGw+OgorKyAqWzAtOWEtZl0qOgk1ZCAxZiAgICAgICAJaWNhbGwgcGMKKysgKlswLTlhLWZdKjoJNWQgMWMgICAgICAgCWljYWxsIHIxMgorKyAqWzAtOWEtZl0qOgk1ZCAxNSAgICAgICAJaWNhbGwgcjUKKysgKlswLTlhLWZdKjoJNWQgMTQgICAgICAgCWljYWxsIHI0CisrICpbMC05YS1mXSo6CTVkIDFlICAgICAgIAlpY2FsbCBscgorKyAqWzAtOWEtZl0qOgk1ZCAxMyAgICAgICAJaWNhbGwgcjMKKysgKlswLTlhLWZdKjoJNWQgMTEgICAgICAgCWljYWxsIHIxCisrICpbMC05YS1mXSo6CTVkIDEzICAgICAgIAlpY2FsbCByMworKworK1swLTlhLWZdKiA8bXVzdHI+OgorKyAqWzAtOWEtZl0qOgk1ZCAyZiAgICAgICAJbXVzdHIgcGMKKysgKlswLTlhLWZdKjoJNWQgMmMgICAgICAgCW11c3RyIHIxMgorKyAqWzAtOWEtZl0qOgk1ZCAyNSAgICAgICAJbXVzdHIgcjUKKysgKlswLTlhLWZdKjoJNWQgMjQgICAgICAgCW11c3RyIHI0CisrICpbMC05YS1mXSo6CTVkIDJlICAgICAgIAltdXN0ciBscgorKyAqWzAtOWEtZl0qOgk1ZCAyMSAgICAgICAJbXVzdHIgcjEKKysgKlswLTlhLWZdKjoJNWQgMjQgICAgICAgCW11c3RyIHI0CisrICpbMC05YS1mXSo6CTVkIDJjICAgICAgIAltdXN0ciByMTIKKysKKytbMC05YS1mXSogPG11c2ZyPjoKKysgKlswLTlhLWZdKjoJNWQgM2YgICAgICAgCW11c2ZyIHBjCisrICpbMC05YS1mXSo6CTVkIDNjICAgICAgIAltdXNmciByMTIKKysgKlswLTlhLWZdKjoJNWQgMzUgICAgICAgCW11c2ZyIHI1CisrICpbMC05YS1mXSo6CTVkIDM0ICAgICAgIAltdXNmciByNAorKyAqWzAtOWEtZl0qOgk1ZCAzZSAgICAgICAJbXVzZnIgbHIKKysgKlswLTlhLWZdKjoJNWQgM2IgICAgICAgCW11c2ZyIHIxMQorKyAqWzAtOWEtZl0qOgk1ZCAzYyAgICAgICAJbXVzZnIgcjEyCisrICpbMC05YS1mXSo6CTVkIDMyICAgICAgIAltdXNmciByMgorKworK1swLTlhLWZdKiA8cmV0X2NvbmQ+OgorKyAqWzAtOWEtZl0qOgk1ZSAwZiAgICAgICAJcmV0ZXEgMQorKyAqWzAtOWEtZl0qOgk1ZSBmYyAgICAgICAJcmV0YWwgcjEyCisrICpbMC05YS1mXSo6CTVlIDg1ICAgICAgIAlyZXRscyByNQorKyAqWzAtOWEtZl0qOgk1ZSA3NCAgICAgICAJcmV0cGwgcjQKKysgKlswLTlhLWZdKjoJNWUgMWUgICAgICAgCXJldG5lIC0xCisrICpbMC05YS1mXSo6CTVlIDkwICAgICAgIAlyZXRndCByMAorKyAqWzAtOWEtZl0qOgk1ZSA5YyAgICAgICAJcmV0Z3QgcjEyCisrICpbMC05YS1mXSo6CTVlIDRhICAgICAgIAlyZXRnZSByMTAKKysKKytbMC05YS1mXSogPHNyX2NvbmQ+OgorKyAqWzAtOWEtZl0qOgk1ZiAwZiAgICAgICAJc3JlcSBwYworKyAqWzAtOWEtZl0qOgk1ZiBmYyAgICAgICAJc3JhbCByMTIKKysgKlswLTlhLWZdKjoJNWYgODUgICAgICAgCXNybHMgcjUKKysgKlswLTlhLWZdKjoJNWYgNzQgICAgICAgCXNycGwgcjQKKysgKlswLTlhLWZdKjoJNWYgMWUgICAgICAgCXNybmUgbHIKKysgKlswLTlhLWZdKjoJNWYgNTAgICAgICAgCXNybHQgcjAKKysgKlswLTlhLWZdKjoJNWYgZmQgICAgICAgCXNyYWwgc3AKKysgKlswLTlhLWZdKjoJNWYgNDkgICAgICAgCXNyZ2UgcjkKKysKKytbMC05YS1mXSogPGxkX3czPjoKKysgKlswLTlhLWZdKjoJN2UgMGYgICAgICAgCWxkXC53IHBjLHBjXFsweDBcXQorKyAqWzAtOWEtZl0qOgk3OSBmYyAgICAgICAJbGRcLncgcjEyLHIxMlxbMHg3Y1xdCisrICpbMC05YS1mXSo6CTZiIDA1ICAgICAgIAlsZFwudyByNSxyNVxbMHg0MFxdCisrICpbMC05YS1mXSo6CTY4IGY0ICAgICAgIAlsZFwudyByNCxyNFxbMHgzY1xdCisrICpbMC05YS1mXSo6CTdjIDFlICAgICAgIAlsZFwudyBscixsclxbMHg0XF0KKysgKlswLTlhLWZdKjoJNjQgZGQgICAgICAgCWxkXC53IHNwLHIyXFsweDM0XF0KKysgKlswLTlhLWZdKjoJNjIgMjkgICAgICAgCWxkXC53IHI5LHIxXFsweDhcXQorKyAqWzAtOWEtZl0qOgk3YSBmNSAgICAgICAJbGRcLncgcjUsc3BcWzB4M2NcXQorKworK1swLTlhLWZdKiA8bGRfc2gzPjoKKysgKlswLTlhLWZdKjoJOWUgMGYgICAgICAgCWxkXC5zaCBwYyxwY1xbMHgwXF0KKysgKlswLTlhLWZdKjoJOTggN2MgICAgICAgCWxkXC5zaCByMTIscjEyXFsweGVcXQorKyAqWzAtOWEtZl0qOgk4YSA0NSAgICAgICAJbGRcLnNoIHI1LHI1XFsweDhcXQorKyAqWzAtOWEtZl0qOgk4OCAzNCAgICAgICAJbGRcLnNoIHI0LHI0XFsweDZcXQorKyAqWzAtOWEtZl0qOgk5YyAxZSAgICAgICAJbGRcLnNoIGxyLGxyXFsweDJcXQorKyAqWzAtOWEtZl0qOgk4NCA0NCAgICAgICAJbGRcLnNoIHI0LHIyXFsweDhcXQorKyAqWzAtOWEtZl0qOgk5YyA1ZCAgICAgICAJbGRcLnNoIHNwLGxyXFsweGFcXQorKyAqWzAtOWEtZl0qOgk5NiAxMiAgICAgICAJbGRcLnNoIHIyLHIxMVxbMHgyXF0KKysKKytbMC05YS1mXSogPGxkX3VoMz46CisrICpbMC05YS1mXSo6CTllIDhmICAgICAgIAlsZFwudWggcGMscGNcWzB4MFxdCisrICpbMC05YS1mXSo6CTk4IGZjICAgICAgIAlsZFwudWggcjEyLHIxMlxbMHhlXF0KKysgKlswLTlhLWZdKjoJOGEgYzUgICAgICAgCWxkXC51aCByNSxyNVxbMHg4XF0KKysgKlswLTlhLWZdKjoJODggYjQgICAgICAgCWxkXC51aCByNCxyNFxbMHg2XF0KKysgKlswLTlhLWZdKjoJOWMgOWUgICAgICAgCWxkXC51aCBscixsclxbMHgyXF0KKysgKlswLTlhLWZdKjoJODAgZGEgICAgICAgCWxkXC51aCByMTAscjBcWzB4YVxdCisrICpbMC05YS1mXSo6CTk2IGM4ICAgICAgIAlsZFwudWggcjgscjExXFsweDhcXQorKyAqWzAtOWEtZl0qOgk4NCBlYSAgICAgICAJbGRcLnVoIHIxMCxyMlxbMHhjXF0KKysKKytbMC05YS1mXSogPHN0X3czPjoKKysgKlswLTlhLWZdKjoJOWYgMGYgICAgICAgCXN0XC53IHBjXFsweDBcXSxwYworKyAqWzAtOWEtZl0qOgk5OSBmYyAgICAgICAJc3RcLncgcjEyXFsweDNjXF0scjEyCisrICpbMC05YS1mXSo6CThiIDg1ICAgICAgIAlzdFwudyByNVxbMHgyMFxdLHI1CisrICpbMC05YS1mXSo6CTg5IDc0ICAgICAgIAlzdFwudyByNFxbMHgxY1xdLHI0CisrICpbMC05YS1mXSo6CTlkIDFlICAgICAgIAlzdFwudyBsclxbMHg0XF0sbHIKKysgKlswLTlhLWZdKjoJOGYgYmIgICAgICAgCXN0XC53IHI3XFsweDJjXF0scjExCisrICpbMC05YS1mXSo6CTg1IDY2ICAgICAgIAlzdFwudyByMlxbMHgxOFxdLHI2CisrICpbMC05YS1mXSo6CTg5IDM5ICAgICAgIAlzdFwudyByNFxbMHhjXF0scjkKKysKKytbMC05YS1mXSogPHN0X2gzPjoKKysgKlswLTlhLWZdKjoJYmUgMGYgICAgICAgCXN0XC5oIHBjXFsweDBcXSxwYworKyAqWzAtOWEtZl0qOgliOCA3YyAgICAgICAJc3RcLmggcjEyXFsweGVcXSxyMTIKKysgKlswLTlhLWZdKjoJYWEgNDUgICAgICAgCXN0XC5oIHI1XFsweDhcXSxyNQorKyAqWzAtOWEtZl0qOglhOCAzNCAgICAgICAJc3RcLmggcjRcWzB4NlxdLHI0CisrICpbMC05YS1mXSo6CWJjIDFlICAgICAgIAlzdFwuaCBsclxbMHgyXF0sbHIKKysgKlswLTlhLWZdKjoJYmMgNWMgICAgICAgCXN0XC5oIGxyXFsweGFcXSxyMTIKKysgKlswLTlhLWZdKjoJYWMgMjAgICAgICAgCXN0XC5oIHI2XFsweDRcXSxyMAorKyAqWzAtOWEtZl0qOglhYSA2ZCAgICAgICAJc3RcLmggcjVcWzB4Y1xdLHNwCisrCisrWzAtOWEtZl0qIDxzdF9iMz46CisrICpbMC05YS1mXSo6CWJlIDhmICAgICAgIAlzdFwuYiBwY1xbMHgwXF0scGMKKysgKlswLTlhLWZdKjoJYjggZmMgICAgICAgCXN0XC5iIHIxMlxbMHg3XF0scjEyCisrICpbMC05YS1mXSo6CWFhIGM1ICAgICAgIAlzdFwuYiByNVxbMHg0XF0scjUKKysgKlswLTlhLWZdKjoJYTggYjQgICAgICAgCXN0XC5iIHI0XFsweDNcXSxyNAorKyAqWzAtOWEtZl0qOgliYyA5ZSAgICAgICAJc3RcLmIgbHJcWzB4MVxdLGxyCisrICpbMC05YS1mXSo6CWI4IGU5ICAgICAgIAlzdFwuYiByMTJcWzB4NlxdLHI5CisrICpbMC05YS1mXSo6CWE0IGJlICAgICAgIAlzdFwuYiByMlxbMHgzXF0sbHIKKysgKlswLTlhLWZdKjoJYTIgYmIgICAgICAgCXN0XC5iIHIxXFsweDNcXSxyMTEKKysKKytbMC05YS1mXSogPGxkZD46CisrICpbMC05YS1mXSo6CWJmIDAwICAgICAgIAlsZFwuZCByMCxwYworKyAqWzAtOWEtZl0qOgliOSAwZSAgICAgICAJbGRcLmQgbHIscjEyCisrICpbMC05YS1mXSo6CWFiIDA4ICAgICAgIAlsZFwuZCByOCxyNQorKyAqWzAtOWEtZl0qOglhOSAwNiAgICAgICAJbGRcLmQgcjYscjQKKysgKlswLTlhLWZdKjoJYmQgMDIgICAgICAgCWxkXC5kIHIyLGxyCisrICpbMC05YS1mXSo6CWFmIDBlICAgICAgIAlsZFwuZCBscixyNworKyAqWzAtOWEtZl0qOglhOSAwNCAgICAgICAJbGRcLmQgcjQscjQKKysgKlswLTlhLWZdKjoJYmYgMGUgICAgICAgCWxkXC5kIGxyLHBjCisrCisrWzAtOWEtZl0qIDxsZGRfcG9zdGluYz46CisrICpbMC05YS1mXSo6CWJmIDAxICAgICAgIAlsZFwuZCByMCxwY1wrXCsKKysgKlswLTlhLWZdKjoJYjkgMGYgICAgICAgCWxkXC5kIGxyLHIxMlwrXCsKKysgKlswLTlhLWZdKjoJYWIgMDkgICAgICAgCWxkXC5kIHI4LHI1XCtcKworKyAqWzAtOWEtZl0qOglhOSAwNyAgICAgICAJbGRcLmQgcjYscjRcK1wrCisrICpbMC05YS1mXSo6CWJkIDAzICAgICAgIAlsZFwuZCByMixsclwrXCsKKysgKlswLTlhLWZdKjoJYWIgMGYgICAgICAgCWxkXC5kIGxyLHI1XCtcKworKyAqWzAtOWEtZl0qOgliNyAwZCAgICAgICAJbGRcLmQgcjEyLHIxMVwrXCsKKysgKlswLTlhLWZdKjoJYjkgMDMgICAgICAgCWxkXC5kIHIyLHIxMlwrXCsKKysKKytbMC05YS1mXSogPGxkZF9wcmVkZWM+OgorKyAqWzAtOWEtZl0qOgliZiAxMCAgICAgICAJbGRcLmQgcjAsLS1wYworKyAqWzAtOWEtZl0qOgliOSAxZSAgICAgICAJbGRcLmQgbHIsLS1yMTIKKysgKlswLTlhLWZdKjoJYWIgMTggICAgICAgCWxkXC5kIHI4LC0tcjUKKysgKlswLTlhLWZdKjoJYTkgMTYgICAgICAgCWxkXC5kIHI2LC0tcjQKKysgKlswLTlhLWZdKjoJYmQgMTIgICAgICAgCWxkXC5kIHIyLC0tbHIKKysgKlswLTlhLWZdKjoJYTEgMTggICAgICAgCWxkXC5kIHI4LC0tcjAKKysgKlswLTlhLWZdKjoJYmYgMWEgICAgICAgCWxkXC5kIHIxMCwtLXBjCisrICpbMC05YS1mXSo6CWE5IDEyICAgICAgIAlsZFwuZCByMiwtLXI0CisrCisrWzAtOWEtZl0qIDxzdGQ+OgorKyAqWzAtOWEtZl0qOgliZiAxMSAgICAgICAJc3RcLmQgcGMscjAKKysgKlswLTlhLWZdKjoJYjkgMWYgICAgICAgCXN0XC5kIHIxMixscgorKyAqWzAtOWEtZl0qOglhYiAxOSAgICAgICAJc3RcLmQgcjUscjgKKysgKlswLTlhLWZdKjoJYTkgMTcgICAgICAgCXN0XC5kIHI0LHI2CisrICpbMC05YS1mXSo6CWJkIDEzICAgICAgIAlzdFwuZCBscixyMgorKyAqWzAtOWEtZl0qOglhMSAxZCAgICAgICAJc3RcLmQgcjAscjEyCisrICpbMC05YS1mXSo6CWJiIDE1ICAgICAgIAlzdFwuZCBzcCxyNAorKyAqWzAtOWEtZl0qOgliOSAxZCAgICAgICAJc3RcLmQgcjEyLHIxMgorKworK1swLTlhLWZdKiA8c3RkX3Bvc3RpbmM+OgorKyAqWzAtOWEtZl0qOgliZiAyMCAgICAgICAJc3RcLmQgcGNcK1wrLHIwCisrICpbMC05YS1mXSo6CWI5IDJlICAgICAgIAlzdFwuZCByMTJcK1wrLGxyCisrICpbMC05YS1mXSo6CWFiIDI4ICAgICAgIAlzdFwuZCByNVwrXCsscjgKKysgKlswLTlhLWZdKjoJYTkgMjYgICAgICAgCXN0XC5kIHI0XCtcKyxyNgorKyAqWzAtOWEtZl0qOgliZCAyMiAgICAgICAJc3RcLmQgbHJcK1wrLHIyCisrICpbMC05YS1mXSo6CWJiIDI2ICAgICAgIAlzdFwuZCBzcFwrXCsscjYKKysgKlswLTlhLWZdKjoJYjUgMjYgICAgICAgCXN0XC5kIHIxMFwrXCsscjYKKysgKlswLTlhLWZdKjoJYWYgMjIgICAgICAgCXN0XC5kIHI3XCtcKyxyMgorKworK1swLTlhLWZdKiA8c3RkX3ByZWRlYz46CisrICpbMC05YS1mXSo6CWJmIDIxICAgICAgIAlzdFwuZCAtLXBjLHIwCisrICpbMC05YS1mXSo6CWI5IDJmICAgICAgIAlzdFwuZCAtLXIxMixscgorKyAqWzAtOWEtZl0qOglhYiAyOSAgICAgICAJc3RcLmQgLS1yNSxyOAorKyAqWzAtOWEtZl0qOglhOSAyNyAgICAgICAJc3RcLmQgLS1yNCxyNgorKyAqWzAtOWEtZl0qOgliZCAyMyAgICAgICAJc3RcLmQgLS1scixyMgorKyAqWzAtOWEtZl0qOglhNyAyNyAgICAgICAJc3RcLmQgLS1yMyxyNgorKyAqWzAtOWEtZl0qOgliZCAyMyAgICAgICAJc3RcLmQgLS1scixyMgorKyAqWzAtOWEtZl0qOglhMSAyNSAgICAgICAJc3RcLmQgLS1yMCxyNAorKworK1swLTlhLWZdKiA8bXVsPjoKKysgKlswLTlhLWZdKjoJYmYgM2YgICAgICAgCW11bCBwYyxwYworKyAqWzAtOWEtZl0qOgliOSAzYyAgICAgICAJbXVsIHIxMixyMTIKKysgKlswLTlhLWZdKjoJYWIgMzUgICAgICAgCW11bCByNSxyNQorKyAqWzAtOWEtZl0qOglhOSAzNCAgICAgICAJbXVsIHI0LHI0CisrICpbMC05YS1mXSo6CWJkIDNlICAgICAgIAltdWwgbHIsbHIKKysgKlswLTlhLWZdKjoJYmQgM2EgICAgICAgCW11bCByMTAsbHIKKysgKlswLTlhLWZdKjoJYjEgMzAgICAgICAgCW11bCByMCxyOAorKyAqWzAtOWEtZl0qOglhYiAzOCAgICAgICAJbXVsIHI4LHI1CisrCisrWzAtOWEtZl0qIDxhc3JfaW1tNT46CisrICpbMC05YS1mXSo6CWExIDRmICAgICAgIAlhc3IgcGMsMHgwCisrICpbMC05YS1mXSo6CWJmIDVjICAgICAgIAlhc3IgcjEyLDB4MWYKKysgKlswLTlhLWZdKjoJYjEgNDUgICAgICAgCWFzciByNSwweDEwCisrICpbMC05YS1mXSo6CWFmIDU0ICAgICAgIAlhc3IgcjQsMHhmCisrICpbMC05YS1mXSo6CWExIDVlICAgICAgIAlhc3IgbHIsMHgxCisrICpbMC05YS1mXSo6CWI3IDU2ICAgICAgIAlhc3IgcjYsMHgxNworKyAqWzAtOWEtZl0qOgliMyA0NiAgICAgICAJYXNyIHI2LDB4MTIKKysgKlswLTlhLWZdKjoJYTkgNDUgICAgICAgCWFzciByNSwweDgKKysKKytbMC05YS1mXSogPGxzbF9pbW01PjoKKysgKlswLTlhLWZdKjoJYTEgNmYgICAgICAgCWxzbCBwYywweDAKKysgKlswLTlhLWZdKjoJYmYgN2MgICAgICAgCWxzbCByMTIsMHgxZgorKyAqWzAtOWEtZl0qOgliMSA2NSAgICAgICAJbHNsIHI1LDB4MTAKKysgKlswLTlhLWZdKjoJYWYgNzQgICAgICAgCWxzbCByNCwweGYKKysgKlswLTlhLWZdKjoJYTEgN2UgICAgICAgCWxzbCBsciwweDEKKysgKlswLTlhLWZdKjoJYWQgN2MgICAgICAgCWxzbCByMTIsMHhkCisrICpbMC05YS1mXSo6CWIxIDY2ICAgICAgIAlsc2wgcjYsMHgxMAorKyAqWzAtOWEtZl0qOgliOSA3MSAgICAgICAJbHNsIHIxLDB4MTkKKysKKytbMC05YS1mXSogPGxzcl9pbW01PjoKKysgKlswLTlhLWZdKjoJYTEgOGYgICAgICAgCWxzciBwYywweDAKKysgKlswLTlhLWZdKjoJYmYgOWMgICAgICAgCWxzciByMTIsMHgxZgorKyAqWzAtOWEtZl0qOgliMSA4NSAgICAgICAJbHNyIHI1LDB4MTAKKysgKlswLTlhLWZdKjoJYWYgOTQgICAgICAgCWxzciByNCwweGYKKysgKlswLTlhLWZdKjoJYTEgOWUgICAgICAgCWxzciBsciwweDEKKysgKlswLTlhLWZdKjoJYTEgOTAgICAgICAgCWxzciByMCwweDEKKysgKlswLTlhLWZdKjoJYWIgODggICAgICAgCWxzciByOCwweGEKKysgKlswLTlhLWZdKjoJYmIgODcgICAgICAgCWxzciByNywweDFhCisrCisrWzAtOWEtZl0qIDxzYnI+OgorKyAqWzAtOWEtZl0qOglhMSBhZiAgICAgICAJc2JyIHBjLDB4MAorKyAqWzAtOWEtZl0qOgliZiBiYyAgICAgICAJc2JyIHIxMiwweDFmCisrICpbMC05YS1mXSo6CWIxIGE1ICAgICAgIAlzYnIgcjUsMHgxMAorKyAqWzAtOWEtZl0qOglhZiBiNCAgICAgICAJc2JyIHI0LDB4ZgorKyAqWzAtOWEtZl0qOglhMSBiZSAgICAgICAJc2JyIGxyLDB4MQorKyAqWzAtOWEtZl0qOgliZiBiOCAgICAgICAJc2JyIHI4LDB4MWYKKysgKlswLTlhLWZdKjoJYjcgYTYgICAgICAgCXNiciByNiwweDE2CisrICpbMC05YS1mXSo6CWI3IGIxICAgICAgIAlzYnIgcjEsMHgxNworKworK1swLTlhLWZdKiA8Y2JyPjoKKysgKlswLTlhLWZdKjoJYTEgY2YgICAgICAgCWNiciBwYywweDAKKysgKlswLTlhLWZdKjoJYmYgZGMgICAgICAgCWNiciByMTIsMHgxZgorKyAqWzAtOWEtZl0qOgliMSBjNSAgICAgICAJY2JyIHI1LDB4MTAKKysgKlswLTlhLWZdKjoJYWYgZDQgICAgICAgCWNiciByNCwweGYKKysgKlswLTlhLWZdKjoJYTEgZGUgICAgICAgCWNiciBsciwweDEKKysgKlswLTlhLWZdKjoJYWIgY2MgICAgICAgCWNiciByMTIsMHhhCisrICpbMC05YS1mXSo6CWI3IGM3ICAgICAgIAljYnIgcjcsMHgxNgorKyAqWzAtOWEtZl0qOglhOSBkOCAgICAgICAJY2JyIHI4LDB4OQorKworK1swLTlhLWZdKiA8YnJjMT46CisrICpbMC05YS1mXSo6CWMwIDAwICAgICAgIAlicmVxIFswLTlhLWZdKiA8Lio+CisrICpbMC05YS1mXSo6CWNmIGY3ICAgICAgIAlicnBsIFswLTlhLWZdKiA8Lio+CisrICpbMC05YS1mXSo6CWM4IDA0ICAgICAgIAlicmdlIFswLTlhLWZdKiA8Lio+CisrICpbMC05YS1mXSo6CWM3IGYzICAgICAgIAlicmNzIFswLTlhLWZdKiA8Lio+CisrICpbMC05YS1mXSo6CWMwIDExICAgICAgIAlicm5lIFswLTlhLWZdKiA8Lio+CisrICpbMC05YS1mXSo6CWM3IDMzICAgICAgIAlicmNzIFswLTlhLWZdKiA8Lio+CisrICpbMC05YS1mXSo6CWNmIDcwICAgICAgIAlicmVxIFswLTlhLWZdKiA8Lio+CisrICpbMC05YS1mXSo6CWMwIDYwICAgICAgIAlicmVxIFswLTlhLWZdKiA8Lio+CisrCisrWzAtOWEtZl0qIDxyam1wPjoKKysgKlswLTlhLWZdKjoJYzAgMDggICAgICAgCXJqbXAgWzAtOWEtZl0qIDwuKj4KKysgKlswLTlhLWZdKjoJY2YgZmIgICAgICAgCXJqbXAgWzAtOWEtZl0qIDwuKj4KKysgKlswLTlhLWZdKjoJYzAgMGEgICAgICAgCXJqbXAgWzAtOWEtZl0qIDwuKj4KKysgKlswLTlhLWZdKjoJY2YgZjkgICAgICAgCXJqbXAgWzAtOWEtZl0qIDwuKj4KKysgKlswLTlhLWZdKjoJYzAgMTggICAgICAgCXJqbXAgWzAtOWEtZl0qIDwuKj4KKysgKlswLTlhLWZdKjoJYzEgZmEgICAgICAgCXJqbXAgWzAtOWEtZl0qIDwuKj4KKysgKlswLTlhLWZdKjoJYzAgNzggICAgICAgCXJqbXAgWzAtOWEtZl0qIDwuKj4KKysgKlswLTlhLWZdKjoJY2YgZWEgICAgICAgCXJqbXAgWzAtOWEtZl0qIDwuKj4KKysKKytbMC05YS1mXSogPHJjYWxsMT46CisrICpbMC05YS1mXSo6CWMwIDBjICAgICAgIAlyY2FsbCBbMC05YS1mXSogPC4qPgorKyAqWzAtOWEtZl0qOgljZiBmZiAgICAgICAJcmNhbGwgWzAtOWEtZl0qIDwuKj4KKysgKlswLTlhLWZdKjoJYzAgMGUgICAgICAgCXJjYWxsIFswLTlhLWZdKiA8Lio+CisrICpbMC05YS1mXSo6CWNmIGZkICAgICAgIAlyY2FsbCBbMC05YS1mXSogPC4qPgorKyAqWzAtOWEtZl0qOgljMCAxYyAgICAgICAJcmNhbGwgWzAtOWEtZl0qIDwuKj4KKysgKlswLTlhLWZdKjoJYzYgY2MgICAgICAgCXJjYWxsIFswLTlhLWZdKiA8Lio+CisrICpbMC05YS1mXSo6CWNmIDdlICAgICAgIAlyY2FsbCBbMC05YS1mXSogPC4qPgorKyAqWzAtOWEtZl0qOgljMSBhZSAgICAgICAJcmNhbGwgWzAtOWEtZl0qIDwuKj4KKysKKytbMC05YS1mXSogPGFjYWxsPjoKKysgKlswLTlhLWZdKjoJZDAgMDAgICAgICAgCWFjYWxsIDB4MAorKyAqWzAtOWEtZl0qOglkZiBmMCAgICAgICAJYWNhbGwgMHgzZmMKKysgKlswLTlhLWZdKjoJZDggMDAgICAgICAgCWFjYWxsIDB4MjAwCisrICpbMC05YS1mXSo6CWQ3IGYwICAgICAgIAlhY2FsbCAweDFmYworKyAqWzAtOWEtZl0qOglkMCAxMCAgICAgICAJYWNhbGwgMHg0CisrICpbMC05YS1mXSo6CWQ1IDkwICAgICAgIAlhY2FsbCAweDE2NAorKyAqWzAtOWEtZl0qOglkNCBjMCAgICAgICAJYWNhbGwgMHgxMzAKKysgKlswLTlhLWZdKjoJZDIgYjAgICAgICAgCWFjYWxsIDB4YWMKKysKKytbMC05YS1mXSogPHNjYWxsPjoKKysgKlswLTlhLWZdKjoJZDcgMzMgICAgICAgCXNjYWxsCisrICpbMC05YS1mXSo6CWQ3IDMzICAgICAgIAlzY2FsbAorKyAqWzAtOWEtZl0qOglkNyAzMyAgICAgICAJc2NhbGwKKysgKlswLTlhLWZdKjoJZDcgMzMgICAgICAgCXNjYWxsCisrICpbMC05YS1mXSo6CWQ3IDMzICAgICAgIAlzY2FsbAorKyAqWzAtOWEtZl0qOglkNyAzMyAgICAgICAJc2NhbGwKKysgKlswLTlhLWZdKjoJZDcgMzMgICAgICAgCXNjYWxsCisrICpbMC05YS1mXSo6CWQ3IDMzICAgICAgIAlzY2FsbAorKworK1swLTlhLWZdKiA8cG9wbT46CisrICpbMC05YS1mXSo6CWQ4IDAyICAgICAgIAlwb3BtIHBjCisrICpbMC05YS1mXSo6CWRkIGZhICAgICAgIAlwb3BtIHIwLXIxMSxwYyxyMTI9LTEKKysgKlswLTlhLWZdKjoJZDQgMDIgICAgICAgCXBvcG0gbHIKKysgKlswLTlhLWZdKjoJZGIgZmEgICAgICAgCXBvcG0gcjAtcjExLHBjLHIxMj0xCisrICpbMC05YS1mXSo6CWQwIDEyICAgICAgIAlwb3BtIHIwLXIzCisrICpbMC05YS1mXSo6CWQ4IGUyICAgICAgIAlwb3BtIHI0LXIxMCxwYworKyAqWzAtOWEtZl0qOglkOSAxYSAgICAgICAJcG9wbSByMC1yMyxyMTEscGMscjEyPTAKKysgKlswLTlhLWZdKjoJZDcgYjIgICAgICAgCXBvcG0gcjAtcjcscjEwLXIxMixscgorKworK1swLTlhLWZdKiA8cHVzaG0+OgorKyAqWzAtOWEtZl0qOglkOCAwMSAgICAgICAJcHVzaG0gcGMKKysgKlswLTlhLWZdKjoJZGYgZjEgICAgICAgCXB1c2htIHIwLXIxMixsci1wYworKyAqWzAtOWEtZl0qOglkOCAwMSAgICAgICAJcHVzaG0gcGMKKysgKlswLTlhLWZdKjoJZDcgZjEgICAgICAgCXB1c2htIHIwLXIxMixscgorKyAqWzAtOWEtZl0qOglkMCAxMSAgICAgICAJcHVzaG0gcjAtcjMKKysgKlswLTlhLWZdKjoJZGMgYzEgICAgICAgCXB1c2htIHI4LXIxMCxsci1wYworKyAqWzAtOWEtZl0qOglkMCA5MSAgICAgICAJcHVzaG0gcjAtcjMscjEwCisrICpbMC05YS1mXSo6CWQyIDQxICAgICAgIAlwdXNobSByOC1yOSxyMTIKKysKKytbMC05YS1mXSogPHBvcG1fbj46CisrLioKKysuKgorKy4qCisrLioKKysuKgorKy4qCisrLioKKysuKgorKworK1swLTlhLWZdKiA8cHVzaG1fbj46CisrLioKKysuKgorKy4qCisrLioKKysuKgorKy4qCisrLioKKysuKgorKworK1swLTlhLWZdKiA8Y3NyZmN6PjoKKysgKlswLTlhLWZdKjoJZDAgMDMgICAgICAgCWNzcmZjeiAweDAKKysgKlswLTlhLWZdKjoJZDEgZjMgICAgICAgCWNzcmZjeiAweDFmCisrICpbMC05YS1mXSo6CWQxIDAzICAgICAgIAljc3JmY3ogMHgxMAorKyAqWzAtOWEtZl0qOglkMCBmMyAgICAgICAJY3NyZmN6IDB4ZgorKyAqWzAtOWEtZl0qOglkMCAxMyAgICAgICAJY3NyZmN6IDB4MQorKyAqWzAtOWEtZl0qOglkMCA1MyAgICAgICAJY3NyZmN6IDB4NQorKyAqWzAtOWEtZl0qOglkMCBkMyAgICAgICAJY3NyZmN6IDB4ZAorKyAqWzAtOWEtZl0qOglkMSA3MyAgICAgICAJY3NyZmN6IDB4MTcKKysKKytbMC05YS1mXSogPHNzcmY+OgorKyAqWzAtOWEtZl0qOglkMiAwMyAgICAgICAJc3NyZiAweDAKKysgKlswLTlhLWZdKjoJZDMgZjMgICAgICAgCXNzcmYgMHgxZgorKyAqWzAtOWEtZl0qOglkMyAwMyAgICAgICAJc3NyZiAweDEwCisrICpbMC05YS1mXSo6CWQyIGYzICAgICAgIAlzc3JmIDB4ZgorKyAqWzAtOWEtZl0qOglkMiAxMyAgICAgICAJc3NyZiAweDEKKysgKlswLTlhLWZdKjoJZDMgZDMgICAgICAgCXNzcmYgMHgxZAorKyAqWzAtOWEtZl0qOglkMiBkMyAgICAgICAJc3NyZiAweGQKKysgKlswLTlhLWZdKjoJZDIgZDMgICAgICAgCXNzcmYgMHhkCisrCisrWzAtOWEtZl0qIDxjc3JmPjoKKysgKlswLTlhLWZdKjoJZDQgMDMgICAgICAgCWNzcmYgMHgwCisrICpbMC05YS1mXSo6CWQ1IGYzICAgICAgIAljc3JmIDB4MWYKKysgKlswLTlhLWZdKjoJZDUgMDMgICAgICAgCWNzcmYgMHgxMAorKyAqWzAtOWEtZl0qOglkNCBmMyAgICAgICAJY3NyZiAweGYKKysgKlswLTlhLWZdKjoJZDQgMTMgICAgICAgCWNzcmYgMHgxCisrICpbMC05YS1mXSo6CWQ0IGEzICAgICAgIAljc3JmIDB4YQorKyAqWzAtOWEtZl0qOglkNCBmMyAgICAgICAJY3NyZiAweGYKKysgKlswLTlhLWZdKjoJZDQgYjMgICAgICAgCWNzcmYgMHhiCisrCisrWzAtOWEtZl0qIDxyZXRlPjoKKysgKlswLTlhLWZdKjoJZDYgMDMgICAgICAgCXJldGUKKysKKytbMC05YS1mXSogPHJldHM+OgorKyAqWzAtOWEtZl0qOglkNiAxMyAgICAgICAJcmV0cworKworK1swLTlhLWZdKiA8cmV0ZD46CisrICpbMC05YS1mXSo6CWQ2IDIzICAgICAgIAlyZXRkCisrCisrWzAtOWEtZl0qIDxyZXRqPjoKKysgKlswLTlhLWZdKjoJZDYgMzMgICAgICAgCXJldGoKKysKKytbMC05YS1mXSogPHRsYnI+OgorKyAqWzAtOWEtZl0qOglkNiA0MyAgICAgICAJdGxicgorKworK1swLTlhLWZdKiA8dGxicz46CisrICpbMC05YS1mXSo6CWQ2IDUzICAgICAgIAl0bGJzCisrCisrWzAtOWEtZl0qIDx0bGJ3PjoKKysgKlswLTlhLWZdKjoJZDYgNjMgICAgICAgCXRsYncKKysKKytbMC05YS1mXSogPGJyZWFrcG9pbnQ+OgorKyAqWzAtOWEtZl0qOglkNiA3MyAgICAgICAJYnJlYWtwb2ludAorKworK1swLTlhLWZdKiA8aW5jam9zcD46CisrICpbMC05YS1mXSo6CWQ2IDgzICAgICAgIAlpbmNqb3NwIDEKKysgKlswLTlhLWZdKjoJZDYgOTMgICAgICAgCWluY2pvc3AgMgorKyAqWzAtOWEtZl0qOglkNiBhMyAgICAgICAJaW5jam9zcCAzCisrICpbMC05YS1mXSo6CWQ2IGIzICAgICAgIAlpbmNqb3NwIDQKKysgKlswLTlhLWZdKjoJZDYgYzMgICAgICAgCWluY2pvc3AgLTQKKysgKlswLTlhLWZdKjoJZDYgZDMgICAgICAgCWluY2pvc3AgLTMKKysgKlswLTlhLWZdKjoJZDYgZTMgICAgICAgCWluY2pvc3AgLTIKKysgKlswLTlhLWZdKjoJZDYgZjMgICAgICAgCWluY2pvc3AgLTEKKysKKytbMC05YS1mXSogPG5vcD46CisrICpbMC05YS1mXSo6CWQ3IDAzICAgICAgIAlub3AKKysKKytbMC05YS1mXSogPHBvcGpjPjoKKysgKlswLTlhLWZdKjoJZDcgMTMgICAgICAgCXBvcGpjCisrCisrWzAtOWEtZl0qIDxwdXNoamM+OgorKyAqWzAtOWEtZl0qOglkNyAyMyAgICAgICAJcHVzaGpjCisrCisrWzAtOWEtZl0qIDxhZGQyPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMDAgMGYgCWFkZCBwYyxwYyxwYworKyAqWzAtOWEtZl0qOglmOCAwYyAwMCAzYyAJYWRkIHIxMixyMTIscjEyPDwweDMKKysgKlswLTlhLWZdKjoJZWEgMDUgMDAgMjUgCWFkZCByNSxyNSxyNTw8MHgyCisrICpbMC05YS1mXSo6CWU4IDA0IDAwIDE0IAlhZGQgcjQscjQscjQ8PDB4MQorKyAqWzAtOWEtZl0qOglmYyAwZSAwMCAxZSAJYWRkIGxyLGxyLGxyPDwweDEKKysgKlswLTlhLWZdKjoJZjggMDAgMDAgMTAgCWFkZCByMCxyMTIscjA8PDB4MQorKyAqWzAtOWEtZl0qOglmOCAwNCAwMCAwOSAJYWRkIHI5LHIxMixyNAorKyAqWzAtOWEtZl0qOglmOCAwNyAwMCAyYyAJYWRkIHIxMixyMTIscjc8PDB4MgorKworK1swLTlhLWZdKiA8c3ViMj46CisrICpbMC05YS1mXSo6CWZlIDBmIDAxIDBmIAlzdWIgcGMscGMscGMKKysgKlswLTlhLWZdKjoJZjggMGMgMDEgM2MgCXN1YiByMTIscjEyLHIxMjw8MHgzCisrICpbMC05YS1mXSo6CWVhIDA1IDAxIDI1IAlzdWIgcjUscjUscjU8PDB4MgorKyAqWzAtOWEtZl0qOgllOCAwNCAwMSAxNCAJc3ViIHI0LHI0LHI0PDwweDEKKysgKlswLTlhLWZdKjoJZmMgMGUgMDEgMWUgCXN1YiBscixscixscjw8MHgxCisrICpbMC05YS1mXSo6CWU2IDA0IDAxIDBkIAlzdWIgc3AscjMscjQKKysgKlswLTlhLWZdKjoJZWUgMDMgMDEgMDMgCXN1YiByMyxyNyxyMworKyAqWzAtOWEtZl0qOglmNCAwZCAwMSAxZCAJc3ViIHNwLHIxMCxzcDw8MHgxCisrCisrWzAtOWEtZl0qIDxkaXZ1PjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMGQgMGYgCWRpdnUgcGMscGMscGMKKysgKlswLTlhLWZdKjoJZjggMGMgMGQgMGMgCWRpdnUgcjEyLHIxMixyMTIKKysgKlswLTlhLWZdKjoJZWEgMDUgMGQgMDUgCWRpdnUgcjUscjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMGQgMDQgCWRpdnUgcjQscjQscjQKKysgKlswLTlhLWZdKjoJZmMgMGUgMGQgMGUgCWRpdnUgbHIsbHIsbHIKKysgKlswLTlhLWZdKjoJZTggMGYgMGQgMGQgCWRpdnUgc3AscjQscGMKKysgKlswLTlhLWZdKjoJZWEgMGQgMGQgMDUgCWRpdnUgcjUscjUsc3AKKysgKlswLTlhLWZdKjoJZmEgMDAgMGQgMGEgCWRpdnUgcjEwLHNwLHIwCisrCisrWzAtOWEtZl0qIDxhZGRoaF93PjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMGUgMGYgCWFkZGhoXC53IHBjLHBjOmIscGM6YgorKyAqWzAtOWEtZl0qOglmOCAwYyAwZSAzYyAJYWRkaGhcLncgcjEyLHIxMjp0LHIxMjp0CisrICpbMC05YS1mXSo6CWVhIDA1IDBlIDM1IAlhZGRoaFwudyByNSxyNTp0LHI1OnQKKysgKlswLTlhLWZdKjoJZTggMDQgMGUgMDQgCWFkZGhoXC53IHI0LHI0OmIscjQ6YgorKyAqWzAtOWEtZl0qOglmYyAwZSAwZSAzZSAJYWRkaGhcLncgbHIsbHI6dCxscjp0CisrICpbMC05YS1mXSo6CWUwIDAzIDBlIDAwIAlhZGRoaFwudyByMCxyMDpiLHIzOmIKKysgKlswLTlhLWZdKjoJZjggMDcgMGUgMmUgCWFkZGhoXC53IGxyLHIxMjp0LHI3OmIKKysgKlswLTlhLWZdKjoJZjQgMDIgMGUgMjMgCWFkZGhoXC53IHIzLHIxMDp0LHIyOmIKKysKKytbMC05YS1mXSogPHN1YmhoX3c+OgorKyAqWzAtOWEtZl0qOglmZSAwZiAwZiAwZiAJc3ViaGhcLncgcGMscGM6YixwYzpiCisrICpbMC05YS1mXSo6CWY4IDBjIDBmIDNjIAlzdWJoaFwudyByMTIscjEyOnQscjEyOnQKKysgKlswLTlhLWZdKjoJZWEgMDUgMGYgMzUgCXN1YmhoXC53IHI1LHI1OnQscjU6dAorKyAqWzAtOWEtZl0qOgllOCAwNCAwZiAwNCAJc3ViaGhcLncgcjQscjQ6YixyNDpiCisrICpbMC05YS1mXSo6CWZjIDBlIDBmIDNlIAlzdWJoaFwudyBscixscjp0LGxyOnQKKysgKlswLTlhLWZdKjoJZTIgMDcgMGYgMmEgCXN1YmhoXC53IHIxMCxyMTp0LHI3OmIKKysgKlswLTlhLWZdKjoJZjQgMGUgMGYgM2YgCXN1YmhoXC53IHBjLHIxMDp0LGxyOnQKKysgKlswLTlhLWZdKjoJZTAgMGMgMGYgMjMgCXN1YmhoXC53IHIzLHIwOnQscjEyOmIKKysKKytbMC05YS1mXSogPGFkYz46CisrICpbMC05YS1mXSo6CWZlIDBmIDAwIDRmIAlhZGMgcGMscGMscGMKKysgKlswLTlhLWZdKjoJZjggMGMgMDAgNGMgCWFkYyByMTIscjEyLHIxMgorKyAqWzAtOWEtZl0qOgllYSAwNSAwMCA0NSAJYWRjIHI1LHI1LHI1CisrICpbMC05YS1mXSo6CWU4IDA0IDAwIDQ0IAlhZGMgcjQscjQscjQKKysgKlswLTlhLWZdKjoJZmMgMGUgMDAgNGUgCWFkYyBscixscixscgorKyAqWzAtOWEtZl0qOgllMCAwNyAwMCA0NCAJYWRjIHI0LHIwLHI3CisrICpbMC05YS1mXSo6CWU4IDAzIDAwIDRkIAlhZGMgc3AscjQscjMKKysgKlswLTlhLWZdKjoJZjggMDAgMDAgNDIgCWFkYyByMixyMTIscjAKKysKKytbMC05YS1mXSogPHNiYz46CisrICpbMC05YS1mXSo6CWZlIDBmIDAxIDRmIAlzYmMgcGMscGMscGMKKysgKlswLTlhLWZdKjoJZjggMGMgMDEgNGMgCXNiYyByMTIscjEyLHIxMgorKyAqWzAtOWEtZl0qOgllYSAwNSAwMSA0NSAJc2JjIHI1LHI1LHI1CisrICpbMC05YS1mXSo6CWU4IDA0IDAxIDQ0IAlzYmMgcjQscjQscjQKKysgKlswLTlhLWZdKjoJZmMgMGUgMDEgNGUgCXNiYyBscixscixscgorKyAqWzAtOWEtZl0qOgllZSAwOSAwMSA0NiAJc2JjIHI2LHI3LHI5CisrICpbMC05YS1mXSo6CWYwIDA1IDAxIDQwIAlzYmMgcjAscjgscjUKKysgKlswLTlhLWZdKjoJZTAgMDQgMDEgNDEgCXNiYyByMSxyMCxyNAorKworK1swLTlhLWZdKiA8bXVsXzI+OgorKyAqWzAtOWEtZl0qOglmZSAwZiAwMiA0ZiAJbXVsIHBjLHBjLHBjCisrICpbMC05YS1mXSo6CWY4IDBjIDAyIDRjIAltdWwgcjEyLHIxMixyMTIKKysgKlswLTlhLWZdKjoJZWEgMDUgMDIgNDUgCW11bCByNSxyNSxyNQorKyAqWzAtOWEtZl0qOgllOCAwNCAwMiA0NCAJbXVsIHI0LHI0LHI0CisrICpbMC05YS1mXSo6CWZjIDBlIDAyIDRlIAltdWwgbHIsbHIsbHIKKysgKlswLTlhLWZdKjoJZTAgMDAgMDIgNGYgCW11bCBwYyxyMCxyMAorKyAqWzAtOWEtZl0qOglmZSAwZSAwMiA0OCAJbXVsIHI4LHBjLGxyCisrICpbMC05YS1mXSo6CWY4IDBmIDAyIDQ0IAltdWwgcjQscjEyLHBjCisrCisrWzAtOWEtZl0qIDxtYWM+OgorKyAqWzAtOWEtZl0qOglmZSAwZiAwMyA0ZiAJbWFjIHBjLHBjLHBjCisrICpbMC05YS1mXSo6CWY4IDBjIDAzIDRjIAltYWMgcjEyLHIxMixyMTIKKysgKlswLTlhLWZdKjoJZWEgMDUgMDMgNDUgCW1hYyByNSxyNSxyNQorKyAqWzAtOWEtZl0qOgllOCAwNCAwMyA0NCAJbWFjIHI0LHI0LHI0CisrICpbMC05YS1mXSo6CWZjIDBlIDAzIDRlIAltYWMgbHIsbHIsbHIKKysgKlswLTlhLWZdKjoJZTggMDAgMDMgNGEgCW1hYyByMTAscjQscjAKKysgKlswLTlhLWZdKjoJZmMgMDAgMDMgNDcgCW1hYyByNyxscixyMAorKyAqWzAtOWEtZl0qOglmMiAwYyAwMyA0MiAJbWFjIHIyLHI5LHIxMgorKworK1swLTlhLWZdKiA8bXVsc2Q+OgorKyAqWzAtOWEtZl0qOglmZSAwZiAwNCA0ZiAJbXVsc1wuZCBwYyxwYyxwYworKyAqWzAtOWEtZl0qOglmOCAwYyAwNCA0YyAJbXVsc1wuZCByMTIscjEyLHIxMgorKyAqWzAtOWEtZl0qOgllYSAwNSAwNCA0NSAJbXVsc1wuZCByNSxyNSxyNQorKyAqWzAtOWEtZl0qOgllOCAwNCAwNCA0NCAJbXVsc1wuZCByNCxyNCxyNAorKyAqWzAtOWEtZl0qOglmYyAwZSAwNCA0ZSAJbXVsc1wuZCBscixscixscgorKyAqWzAtOWEtZl0qOglmMCAwZSAwNCA0MiAJbXVsc1wuZCByMixyOCxscgorKyAqWzAtOWEtZl0qOgllMCAwYiAwNCA0NCAJbXVsc1wuZCByNCxyMCxyMTEKKysgKlswLTlhLWZdKjoJZmMgMDYgMDQgNDUgCW11bHNcLmQgcjUsbHIscjYKKysKKytbMC05YS1mXSogPG1hY3NkPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMDUgNDAgCW1hY3NcLmQgcjAscGMscGMKKysgKlswLTlhLWZdKjoJZjggMGMgMDUgNGUgCW1hY3NcLmQgbHIscjEyLHIxMgorKyAqWzAtOWEtZl0qOgllYSAwNSAwNSA0OCAJbWFjc1wuZCByOCxyNSxyNQorKyAqWzAtOWEtZl0qOgllOCAwNCAwNSA0NiAJbWFjc1wuZCByNixyNCxyNAorKyAqWzAtOWEtZl0qOglmYyAwZSAwNSA0MiAJbWFjc1wuZCByMixscixscgorKyAqWzAtOWEtZl0qOgllMiAwOSAwNSA0OCAJbWFjc1wuZCByOCxyMSxyOQorKyAqWzAtOWEtZl0qOglmMCAwOCAwNSA0ZSAJbWFjc1wuZCBscixyOCxyOAorKyAqWzAtOWEtZl0qOgllNiAwYyAwNSA0NCAJbWFjc1wuZCByNCxyMyxyMTIKKysKKytbMC05YS1mXSogPG11bHVkPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMDYgNDAgCW11bHVcLmQgcjAscGMscGMKKysgKlswLTlhLWZdKjoJZjggMGMgMDYgNGUgCW11bHVcLmQgbHIscjEyLHIxMgorKyAqWzAtOWEtZl0qOgllYSAwNSAwNiA0OCAJbXVsdVwuZCByOCxyNSxyNQorKyAqWzAtOWEtZl0qOgllOCAwNCAwNiA0NiAJbXVsdVwuZCByNixyNCxyNAorKyAqWzAtOWEtZl0qOglmYyAwZSAwNiA0MiAJbXVsdVwuZCByMixscixscgorKyAqWzAtOWEtZl0qOgllYSAwMCAwNiA0NiAJbXVsdVwuZCByNixyNSxyMAorKyAqWzAtOWEtZl0qOgllYyAwMSAwNiA0NCAJbXVsdVwuZCByNCxyNixyMQorKyAqWzAtOWEtZl0qOglmMCAwMiAwNiA0OCAJbXVsdVwuZCByOCxyOCxyMgorKworK1swLTlhLWZdKiA8bWFjdWQ+OgorKyAqWzAtOWEtZl0qOglmZSAwZiAwNyA0MCAJbWFjdVwuZCByMCxwYyxwYworKyAqWzAtOWEtZl0qOglmOCAwYyAwNyA0ZSAJbWFjdVwuZCBscixyMTIscjEyCisrICpbMC05YS1mXSo6CWVhIDA1IDA3IDQ4IAltYWN1XC5kIHI4LHI1LHI1CisrICpbMC05YS1mXSo6CWU4IDA0IDA3IDQ2IAltYWN1XC5kIHI2LHI0LHI0CisrICpbMC05YS1mXSo6CWZjIDBlIDA3IDQyIAltYWN1XC5kIHIyLGxyLGxyCisrICpbMC05YS1mXSo6CWZhIDBiIDA3IDQ2IAltYWN1XC5kIHI2LHNwLHIxMQorKyAqWzAtOWEtZl0qOgllOCAwOCAwNyA0MiAJbWFjdVwuZCByMixyNCxyOAorKyAqWzAtOWEtZl0qOglmNCAwOSAwNyA0NiAJbWFjdVwuZCByNixyMTAscjkKKysKKytbMC05YS1mXSogPGFzcl8xPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMDggNGYgCWFzciBwYyxwYyxwYworKyAqWzAtOWEtZl0qOglmOCAwYyAwOCA0YyAJYXNyIHIxMixyMTIscjEyCisrICpbMC05YS1mXSo6CWVhIDA1IDA4IDQ1IAlhc3IgcjUscjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMDggNDQgCWFzciByNCxyNCxyNAorKyAqWzAtOWEtZl0qOglmYyAwZSAwOCA0ZSAJYXNyIGxyLGxyLGxyCisrICpbMC05YS1mXSo6CWVjIDBmIDA4IDRmIAlhc3IgcGMscjYscGMKKysgKlswLTlhLWZdKjoJZWMgMGMgMDggNDAgCWFzciByMCxyNixyMTIKKysgKlswLTlhLWZdKjoJZmEgMDAgMDggNDQgCWFzciByNCxzcCxyMAorKworK1swLTlhLWZdKiA8bHNsXzE+OgorKyAqWzAtOWEtZl0qOglmZSAwZiAwOSA0ZiAJbHNsIHBjLHBjLHBjCisrICpbMC05YS1mXSo6CWY4IDBjIDA5IDRjIAlsc2wgcjEyLHIxMixyMTIKKysgKlswLTlhLWZdKjoJZWEgMDUgMDkgNDUgCWxzbCByNSxyNSxyNQorKyAqWzAtOWEtZl0qOgllOCAwNCAwOSA0NCAJbHNsIHI0LHI0LHI0CisrICpbMC05YS1mXSo6CWZjIDBlIDA5IDRlIAlsc2wgbHIsbHIsbHIKKysgKlswLTlhLWZdKjoJZWEgMGUgMDkgNGUgCWxzbCBscixyNSxscgorKyAqWzAtOWEtZl0qOglmZSAwMyAwOSA0NSAJbHNsIHI1LHBjLHIzCisrICpbMC05YS1mXSo6CWZlIDA5IDA5IDQxIAlsc2wgcjEscGMscjkKKysKKytbMC05YS1mXSogPGxzcl8xPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMGEgNGYgCWxzciBwYyxwYyxwYworKyAqWzAtOWEtZl0qOglmOCAwYyAwYSA0YyAJbHNyIHIxMixyMTIscjEyCisrICpbMC05YS1mXSo6CWVhIDA1IDBhIDQ1IAlsc3IgcjUscjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMGEgNDQgCWxzciByNCxyNCxyNAorKyAqWzAtOWEtZl0qOglmYyAwZSAwYSA0ZSAJbHNyIGxyLGxyLGxyCisrICpbMC05YS1mXSo6CWU4IDAxIDBhIDQyIAlsc3IgcjIscjQscjEKKysgKlswLTlhLWZdKjoJZTIgMDYgMGEgNDUgCWxzciByNSxyMSxyNgorKyAqWzAtOWEtZl0qOgllYyAwNyAwYSA0ZCAJbHNyIHNwLHI2LHI3CisrCisrWzAtOWEtZl0qIDx4Y2hnPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMGIgNGYgCXhjaGcgcGMscGMscGMKKysgKlswLTlhLWZdKjoJZjggMGMgMGIgNGMgCXhjaGcgcjEyLHIxMixyMTIKKysgKlswLTlhLWZdKjoJZWEgMDUgMGIgNDUgCXhjaGcgcjUscjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMGIgNDQgCXhjaGcgcjQscjQscjQKKysgKlswLTlhLWZdKjoJZmMgMGUgMGIgNGUgCXhjaGcgbHIsbHIsbHIKKysgKlswLTlhLWZdKjoJZTggMGQgMGIgNGUgCXhjaGcgbHIscjQsc3AKKysgKlswLTlhLWZdKjoJZWEgMGMgMGIgNDEgCXhjaGcgcjEscjUscjEyCisrICpbMC05YS1mXSo6CWY4IDAwIDBiIDRlIAl4Y2hnIGxyLHIxMixyMAorKworK1swLTlhLWZdKiA8bWF4PjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMGMgNGYgCW1heCBwYyxwYyxwYworKyAqWzAtOWEtZl0qOglmOCAwYyAwYyA0YyAJbWF4IHIxMixyMTIscjEyCisrICpbMC05YS1mXSo6CWVhIDA1IDBjIDQ1IAltYXggcjUscjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMGMgNDQgCW1heCByNCxyNCxyNAorKyAqWzAtOWEtZl0qOglmYyAwZSAwYyA0ZSAJbWF4IGxyLGxyLGxyCisrICpbMC05YS1mXSo6CWU0IDBkIDBjIDRlIAltYXggbHIscjIsc3AKKysgKlswLTlhLWZdKjoJZjQgMDkgMGMgNDQgCW1heCByNCxyMTAscjkKKysgKlswLTlhLWZdKjoJZjIgMGUgMGMgNGUgCW1heCBscixyOSxscgorKworK1swLTlhLWZdKiA8bWluPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMGQgNGYgCW1pbiBwYyxwYyxwYworKyAqWzAtOWEtZl0qOglmOCAwYyAwZCA0YyAJbWluIHIxMixyMTIscjEyCisrICpbMC05YS1mXSo6CWVhIDA1IDBkIDQ1IAltaW4gcjUscjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMGQgNDQgCW1pbiByNCxyNCxyNAorKyAqWzAtOWEtZl0qOglmYyAwZSAwZCA0ZSAJbWluIGxyLGxyLGxyCisrICpbMC05YS1mXSo6CWVlIDA4IDBkIDQ5IAltaW4gcjkscjcscjgKKysgKlswLTlhLWZdKjoJZWEgMDUgMGQgNGQgCW1pbiBzcCxyNSxyNQorKyAqWzAtOWEtZl0qOgllMiAwNCAwZCA0NCAJbWluIHI0LHIxLHI0CisrCisrWzAtOWEtZl0qIDxhZGRhYnM+OgorKyAqWzAtOWEtZl0qOglmZSAwZiAwZSA0ZiAJYWRkYWJzIHBjLHBjLHBjCisrICpbMC05YS1mXSo6CWY4IDBjIDBlIDRjIAlhZGRhYnMgcjEyLHIxMixyMTIKKysgKlswLTlhLWZdKjoJZWEgMDUgMGUgNDUgCWFkZGFicyByNSxyNSxyNQorKyAqWzAtOWEtZl0qOgllOCAwNCAwZSA0NCAJYWRkYWJzIHI0LHI0LHI0CisrICpbMC05YS1mXSo6CWZjIDBlIDBlIDRlIAlhZGRhYnMgbHIsbHIsbHIKKysgKlswLTlhLWZdKjoJZjQgMDAgMGUgNDcgCWFkZGFicyByNyxyMTAscjAKKysgKlswLTlhLWZdKjoJZjIgMDcgMGUgNDkgCWFkZGFicyByOSxyOSxyNworKyAqWzAtOWEtZl0qOglmMCAwYyAwZSA0MiAJYWRkYWJzIHIyLHI4LHIxMgorKworK1swLTlhLWZdKiA8bXVsbmhoX3c+OgorKyAqWzAtOWEtZl0qOglmZSAwZiAwMSA4ZiAJbXVsbmhoXC53IHBjLHBjOmIscGM6YgorKyAqWzAtOWEtZl0qOglmOCAwYyAwMSBiYyAJbXVsbmhoXC53IHIxMixyMTI6dCxyMTI6dAorKyAqWzAtOWEtZl0qOgllYSAwNSAwMSBiNSAJbXVsbmhoXC53IHI1LHI1OnQscjU6dAorKyAqWzAtOWEtZl0qOgllOCAwNCAwMSA4NCAJbXVsbmhoXC53IHI0LHI0OmIscjQ6YgorKyAqWzAtOWEtZl0qOglmYyAwZSAwMSBiZSAJbXVsbmhoXC53IGxyLGxyOnQsbHI6dAorKyAqWzAtOWEtZl0qOglmYSAwOSAwMSBhYiAJbXVsbmhoXC53IHIxMSxzcDp0LHI5OmIKKysgKlswLTlhLWZdKjoJZTggMGUgMDEgOWQgCW11bG5oaFwudyBzcCxyNDpiLGxyOnQKKysgKlswLTlhLWZdKjoJZTQgMGIgMDEgYWMgCW11bG5oaFwudyByMTIscjI6dCxyMTE6YgorKworK1swLTlhLWZdKiA8bXVsbndoX2Q+OgorKyAqWzAtOWEtZl0qOglmZSAwZiAwMiA4MCAJbXVsbndoXC5kIHIwLHBjLHBjOmIKKysgKlswLTlhLWZdKjoJZjggMGMgMDIgOWUgCW11bG53aFwuZCBscixyMTIscjEyOnQKKysgKlswLTlhLWZdKjoJZWEgMDUgMDIgOTggCW11bG53aFwuZCByOCxyNSxyNTp0CisrICpbMC05YS1mXSo6CWU4IDA0IDAyIDg2IAltdWxud2hcLmQgcjYscjQscjQ6YgorKyAqWzAtOWEtZl0qOglmYyAwZSAwMiA5MiAJbXVsbndoXC5kIHIyLGxyLGxyOnQKKysgKlswLTlhLWZdKjoJZTYgMDIgMDIgOWUgCW11bG53aFwuZCBscixyMyxyMjp0CisrICpbMC05YS1mXSo6CWVhIDA5IDAyIDg0IAltdWxud2hcLmQgcjQscjUscjk6YgorKyAqWzAtOWEtZl0qOgllOCAwNCAwMiA5YyAJbXVsbndoXC5kIHIxMixyNCxyNDp0CisrCisrWzAtOWEtZl0qIDxtYWNoaF93PjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMDQgOGYgCW1hY2hoXC53IHBjLHBjOmIscGM6YgorKyAqWzAtOWEtZl0qOglmOCAwYyAwNCBiYyAJbWFjaGhcLncgcjEyLHIxMjp0LHIxMjp0CisrICpbMC05YS1mXSo6CWVhIDA1IDA0IGI1IAltYWNoaFwudyByNSxyNTp0LHI1OnQKKysgKlswLTlhLWZdKjoJZTggMDQgMDQgODQgCW1hY2hoXC53IHI0LHI0OmIscjQ6YgorKyAqWzAtOWEtZl0qOglmYyAwZSAwNCBiZSAJbWFjaGhcLncgbHIsbHI6dCxscjp0CisrICpbMC05YS1mXSo6CWVhIDAxIDA0IDllIAltYWNoaFwudyBscixyNTpiLHIxOnQKKysgKlswLTlhLWZdKjoJZWMgMDcgMDQgODkgCW1hY2hoXC53IHI5LHI2OmIscjc6YgorKyAqWzAtOWEtZl0qOglmYyAwYyAwNCBhNSAJbWFjaGhcLncgcjUsbHI6dCxyMTI6YgorKworK1swLTlhLWZdKiA8bWFjaGhfZD46CisrICpbMC05YS1mXSo6CWZlIDBmIDA1IDgwIAltYWNoaFwuZCByMCxwYzpiLHBjOmIKKysgKlswLTlhLWZdKjoJZjggMGMgMDUgYmUgCW1hY2hoXC5kIGxyLHIxMjp0LHIxMjp0CisrICpbMC05YS1mXSo6CWVhIDA1IDA1IGI4IAltYWNoaFwuZCByOCxyNTp0LHI1OnQKKysgKlswLTlhLWZdKjoJZTggMDQgMDUgODYgCW1hY2hoXC5kIHI2LHI0OmIscjQ6YgorKyAqWzAtOWEtZl0qOglmYyAwZSAwNSBiMiAJbWFjaGhcLmQgcjIsbHI6dCxscjp0CisrICpbMC05YS1mXSo6CWUwIDA4IDA1IDhhIAltYWNoaFwuZCByMTAscjA6YixyODpiCisrICpbMC05YS1mXSo6CWU4IDA1IDA1IDllIAltYWNoaFwuZCBscixyNDpiLHI1OnQKKysgKlswLTlhLWZdKjoJZTAgMDQgMDUgOTggCW1hY2hoXC5kIHI4LHIwOmIscjQ6dAorKworK1swLTlhLWZdKiA8bWFjc2F0aGhfdz46CisrICpbMC05YS1mXSo6CWZlIDBmIDA2IDhmIAltYWNzYXRoaFwudyBwYyxwYzpiLHBjOmIKKysgKlswLTlhLWZdKjoJZjggMGMgMDYgYmMgCW1hY3NhdGhoXC53IHIxMixyMTI6dCxyMTI6dAorKyAqWzAtOWEtZl0qOgllYSAwNSAwNiBiNSAJbWFjc2F0aGhcLncgcjUscjU6dCxyNTp0CisrICpbMC05YS1mXSo6CWU4IDA0IDA2IDg0IAltYWNzYXRoaFwudyByNCxyNDpiLHI0OmIKKysgKlswLTlhLWZdKjoJZmMgMGUgMDYgYmUgCW1hY3NhdGhoXC53IGxyLGxyOnQsbHI6dAorKyAqWzAtOWEtZl0qOgllZSAwZiAwNiBiNyAJbWFjc2F0aGhcLncgcjcscjc6dCxwYzp0CisrICpbMC05YS1mXSo6CWU0IDA0IDA2IGE0IAltYWNzYXRoaFwudyByNCxyMjp0LHI0OmIKKysgKlswLTlhLWZdKjoJZjAgMDMgMDYgYjQgCW1hY3NhdGhoXC53IHI0LHI4OnQscjM6dAorKworK1swLTlhLWZdKiA8bXVsaGhfdz46CisrICpbMC05YS1mXSo6CWZlIDBmIDA3IDhmIAltdWxoaFwudyBwYyxwYzpiLHBjOmIKKysgKlswLTlhLWZdKjoJZjggMGMgMDcgYmMgCW11bGhoXC53IHIxMixyMTI6dCxyMTI6dAorKyAqWzAtOWEtZl0qOgllYSAwNSAwNyBiNSAJbXVsaGhcLncgcjUscjU6dCxyNTp0CisrICpbMC05YS1mXSo6CWU4IDA0IDA3IDg0IAltdWxoaFwudyByNCxyNDpiLHI0OmIKKysgKlswLTlhLWZdKjoJZmMgMGUgMDcgYmUgCW11bGhoXC53IGxyLGxyOnQsbHI6dAorKyAqWzAtOWEtZl0qOgllOCAwOSAwNyBhNyAJbXVsaGhcLncgcjcscjQ6dCxyOTpiCisrICpbMC05YS1mXSo6CWU2IDA3IDA3IGJmIAltdWxoaFwudyBwYyxyMzp0LHI3OnQKKysgKlswLTlhLWZdKjoJZTggMDkgMDcgOWYgCW11bGhoXC53IHBjLHI0OmIscjk6dAorKworK1swLTlhLWZdKiA8bXVsc2F0aGhfaD46CisrICpbMC05YS1mXSo6CWZlIDBmIDA4IDhmIAltdWxzYXRoaFwuaCBwYyxwYzpiLHBjOmIKKysgKlswLTlhLWZdKjoJZjggMGMgMDggYmMgCW11bHNhdGhoXC5oIHIxMixyMTI6dCxyMTI6dAorKyAqWzAtOWEtZl0qOgllYSAwNSAwOCBiNSAJbXVsc2F0aGhcLmggcjUscjU6dCxyNTp0CisrICpbMC05YS1mXSo6CWU4IDA0IDA4IDg0IAltdWxzYXRoaFwuaCByNCxyNDpiLHI0OmIKKysgKlswLTlhLWZdKjoJZmMgMGUgMDggYmUgCW11bHNhdGhoXC5oIGxyLGxyOnQsbHI6dAorKyAqWzAtOWEtZl0qOgllMiAwZCAwOCA4MyAJbXVsc2F0aGhcLmggcjMscjE6YixzcDpiCisrICpbMC05YS1mXSo6CWZjIDBiIDA4IGFiIAltdWxzYXRoaFwuaCByMTEsbHI6dCxyMTE6YgorKyAqWzAtOWEtZl0qOglmMCAwYiAwOCA5OCAJbXVsc2F0aGhcLmggcjgscjg6YixyMTE6dAorKworK1swLTlhLWZdKiA8bXVsc2F0aGhfdz46CisrICpbMC05YS1mXSo6CWZlIDBmIDA5IDhmIAltdWxzYXRoaFwudyBwYyxwYzpiLHBjOmIKKysgKlswLTlhLWZdKjoJZjggMGMgMDkgYmMgCW11bHNhdGhoXC53IHIxMixyMTI6dCxyMTI6dAorKyAqWzAtOWEtZl0qOgllYSAwNSAwOSBiNSAJbXVsc2F0aGhcLncgcjUscjU6dCxyNTp0CisrICpbMC05YS1mXSo6CWU4IDA0IDA5IDg0IAltdWxzYXRoaFwudyByNCxyNDpiLHI0OmIKKysgKlswLTlhLWZdKjoJZmMgMGUgMDkgYmUgCW11bHNhdGhoXC53IGxyLGxyOnQsbHI6dAorKyAqWzAtOWEtZl0qOglmNiAwNiAwOSBhZSAJbXVsc2F0aGhcLncgbHIscjExOnQscjY6YgorKyAqWzAtOWEtZl0qOgllYyAwNyAwOSA5NiAJbXVsc2F0aGhcLncgcjYscjY6YixyNzp0CisrICpbMC05YS1mXSo6CWU0IDAzIDA5IDhhIAltdWxzYXRoaFwudyByMTAscjI6YixyMzpiCisrCisrWzAtOWEtZl0qIDxtdWxzYXRybmRoaF9oPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMGEgOGYgCW11bHNhdHJuZGhoXC5oIHBjLHBjOmIscGM6YgorKyAqWzAtOWEtZl0qOglmOCAwYyAwYSBiYyAJbXVsc2F0cm5kaGhcLmggcjEyLHIxMjp0LHIxMjp0CisrICpbMC05YS1mXSo6CWVhIDA1IDBhIGI1IAltdWxzYXRybmRoaFwuaCByNSxyNTp0LHI1OnQKKysgKlswLTlhLWZdKjoJZTggMDQgMGEgODQgCW11bHNhdHJuZGhoXC5oIHI0LHI0OmIscjQ6YgorKyAqWzAtOWEtZl0qOglmYyAwZSAwYSBiZSAJbXVsc2F0cm5kaGhcLmggbHIsbHI6dCxscjp0CisrICpbMC05YS1mXSo6CWVjIDA5IDBhIDhiIAltdWxzYXRybmRoaFwuaCByMTEscjY6YixyOTpiCisrICpbMC05YS1mXSo6CWU2IDA4IDBhIDliIAltdWxzYXRybmRoaFwuaCByMTEscjM6YixyODp0CisrICpbMC05YS1mXSo6CWZhIDA3IDBhIGI1IAltdWxzYXRybmRoaFwuaCByNSxzcDp0LHI3OnQKKysKKytbMC05YS1mXSogPG11bHNhdHJuZHdoX3c+OgorKyAqWzAtOWEtZl0qOglmZSAwZiAwYiA4ZiAJbXVsc2F0cm5kd2hcLncgcGMscGMscGM6YgorKyAqWzAtOWEtZl0qOglmOCAwYyAwYiA5YyAJbXVsc2F0cm5kd2hcLncgcjEyLHIxMixyMTI6dAorKyAqWzAtOWEtZl0qOgllYSAwNSAwYiA5NSAJbXVsc2F0cm5kd2hcLncgcjUscjUscjU6dAorKyAqWzAtOWEtZl0qOgllOCAwNCAwYiA4NCAJbXVsc2F0cm5kd2hcLncgcjQscjQscjQ6YgorKyAqWzAtOWEtZl0qOglmYyAwZSAwYiA5ZSAJbXVsc2F0cm5kd2hcLncgbHIsbHIsbHI6dAorKyAqWzAtOWEtZl0qOglmOCAwMCAwYiA4NSAJbXVsc2F0cm5kd2hcLncgcjUscjEyLHIwOmIKKysgKlswLTlhLWZdKjoJZjQgMGYgMGIgODcgCW11bHNhdHJuZHdoXC53IHI3LHIxMCxwYzpiCisrICpbMC05YS1mXSo6CWYwIDA1IDBiIDlhIAltdWxzYXRybmR3aFwudyByMTAscjgscjU6dAorKworK1swLTlhLWZdKiA8bWFjd2hfZD46CisrICpbMC05YS1mXSo6CWZlIDBmIDBjIDgwIAltYWN3aFwuZCByMCxwYyxwYzpiCisrICpbMC05YS1mXSo6CWY4IDBjIDBjIDllIAltYWN3aFwuZCBscixyMTIscjEyOnQKKysgKlswLTlhLWZdKjoJZWEgMDUgMGMgOTggCW1hY3doXC5kIHI4LHI1LHI1OnQKKysgKlswLTlhLWZdKjoJZTggMDQgMGMgODYgCW1hY3doXC5kIHI2LHI0LHI0OmIKKysgKlswLTlhLWZdKjoJZmMgMGUgMGMgOTIgCW1hY3doXC5kIHIyLGxyLGxyOnQKKysgKlswLTlhLWZdKjoJZjQgMGMgMGMgOTQgCW1hY3doXC5kIHI0LHIxMCxyMTI6dAorKyAqWzAtOWEtZl0qOgllZSAwZCAwYyA4NCAJbWFjd2hcLmQgcjQscjcsc3A6YgorKyAqWzAtOWEtZl0qOglmMiAwYiAwYyA4ZSAJbWFjd2hcLmQgbHIscjkscjExOmIKKysKKytbMC05YS1mXSogPG11bHdoX2Q+OgorKyAqWzAtOWEtZl0qOglmZSAwZiAwZCA4MCAJbXVsd2hcLmQgcjAscGMscGM6YgorKyAqWzAtOWEtZl0qOglmOCAwYyAwZCA5ZSAJbXVsd2hcLmQgbHIscjEyLHIxMjp0CisrICpbMC05YS1mXSo6CWVhIDA1IDBkIDk4IAltdWx3aFwuZCByOCxyNSxyNTp0CisrICpbMC05YS1mXSo6CWU4IDA0IDBkIDg2IAltdWx3aFwuZCByNixyNCxyNDpiCisrICpbMC05YS1mXSo6CWZjIDBlIDBkIDkyIAltdWx3aFwuZCByMixscixscjp0CisrICpbMC05YS1mXSo6CWVhIDAxIDBkIDhjIAltdWx3aFwuZCByMTIscjUscjE6YgorKyAqWzAtOWEtZl0qOgllMiAwMyAwZCA5MCAJbXVsd2hcLmQgcjAscjEscjM6dAorKyAqWzAtOWEtZl0qOglmMiAwMiAwZCA4MCAJbXVsd2hcLmQgcjAscjkscjI6YgorKworK1swLTlhLWZdKiA8bXVsc2F0d2hfdz46CisrICpbMC05YS1mXSo6CWZlIDBmIDBlIDhmIAltdWxzYXR3aFwudyBwYyxwYyxwYzpiCisrICpbMC05YS1mXSo6CWY4IDBjIDBlIDljIAltdWxzYXR3aFwudyByMTIscjEyLHIxMjp0CisrICpbMC05YS1mXSo6CWVhIDA1IDBlIDk1IAltdWxzYXR3aFwudyByNSxyNSxyNTp0CisrICpbMC05YS1mXSo6CWU4IDA0IDBlIDg0IAltdWxzYXR3aFwudyByNCxyNCxyNDpiCisrICpbMC05YS1mXSo6CWZjIDBlIDBlIDllIAltdWxzYXR3aFwudyBscixscixscjp0CisrICpbMC05YS1mXSo6CWZlIDBhIDBlIDliIAltdWxzYXR3aFwudyByMTEscGMscjEwOnQKKysgKlswLTlhLWZdKjoJZjggMDkgMGUgOWQgCW11bHNhdHdoXC53IHNwLHIxMixyOTp0CisrICpbMC05YS1mXSo6CWU2IDAyIDBlIDkwIAltdWxzYXR3aFwudyByMCxyMyxyMjp0CisrCisrWzAtOWEtZl0qIDxsZHc3PjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMGYgOGYgCWxkXC53IHBjLHBjXFtwYzpiPDwyXF0KKysgKlswLTlhLWZdKjoJZjggMGMgMGYgYmMgCWxkXC53IHIxMixyMTJcW3IxMjp0PDwyXF0KKysgKlswLTlhLWZdKjoJZWEgMDUgMGYgYTUgCWxkXC53IHI1LHI1XFtyNTp1PDwyXF0KKysgKlswLTlhLWZdKjoJZTggMDQgMGYgOTQgCWxkXC53IHI0LHI0XFtyNDpsPDwyXF0KKysgKlswLTlhLWZdKjoJZmMgMGUgMGYgOWUgCWxkXC53IGxyLGxyXFtscjpsPDwyXF0KKysgKlswLTlhLWZdKjoJZjQgMDYgMGYgOTkgCWxkXC53IHI5LHIxMFxbcjY6bDw8MlxdCisrICpbMC05YS1mXSo6CWY0IDBhIDBmIDgyIAlsZFwudyByMixyMTBcW3IxMDpiPDwyXF0KKysgKlswLTlhLWZdKjoJZWEgMGYgMGYgOGIgCWxkXC53IHIxMSxyNVxbcGM6Yjw8MlxdCisrCisrWzAtOWEtZl0qIDxzYXRhZGRfdz46CisrICpbMC05YS1mXSo6CWZlIDBmIDAwIGNmIAlzYXRhZGRcLncgcGMscGMscGMKKysgKlswLTlhLWZdKjoJZjggMGMgMDAgY2MgCXNhdGFkZFwudyByMTIscjEyLHIxMgorKyAqWzAtOWEtZl0qOgllYSAwNSAwMCBjNSAJc2F0YWRkXC53IHI1LHI1LHI1CisrICpbMC05YS1mXSo6CWU4IDA0IDAwIGM0IAlzYXRhZGRcLncgcjQscjQscjQKKysgKlswLTlhLWZdKjoJZmMgMGUgMDAgY2UgCXNhdGFkZFwudyBscixscixscgorKyAqWzAtOWEtZl0qOglmMCAwYiAwMCBjNCAJc2F0YWRkXC53IHI0LHI4LHIxMQorKyAqWzAtOWEtZl0qOglmOCAwNiAwMCBjMyAJc2F0YWRkXC53IHIzLHIxMixyNgorKyAqWzAtOWEtZl0qOglmYyAwOSAwMCBjMyAJc2F0YWRkXC53IHIzLGxyLHI5CisrCisrWzAtOWEtZl0qIDxzYXRzdWJfdzE+OgorKyAqWzAtOWEtZl0qOglmZSAwZiAwMSBjZiAJc2F0c3ViXC53IHBjLHBjLHBjCisrICpbMC05YS1mXSo6CWY4IDBjIDAxIGNjIAlzYXRzdWJcLncgcjEyLHIxMixyMTIKKysgKlswLTlhLWZdKjoJZWEgMDUgMDEgYzUgCXNhdHN1YlwudyByNSxyNSxyNQorKyAqWzAtOWEtZl0qOgllOCAwNCAwMSBjNCAJc2F0c3ViXC53IHI0LHI0LHI0CisrICpbMC05YS1mXSo6CWZjIDBlIDAxIGNlIAlzYXRzdWJcLncgbHIsbHIsbHIKKysgKlswLTlhLWZdKjoJZmEgMDAgMDEgYzggCXNhdHN1YlwudyByOCxzcCxyMAorKyAqWzAtOWEtZl0qOglmMCAwNCAwMSBjOSAJc2F0c3ViXC53IHI5LHI4LHI0CisrICpbMC05YS1mXSo6CWZjIDAyIDAxIGNmIAlzYXRzdWJcLncgcGMsbHIscjIKKysKKytbMC05YS1mXSogPHNhdGFkZF9oPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMDIgY2YgCXNhdGFkZFwuaCBwYyxwYyxwYworKyAqWzAtOWEtZl0qOglmOCAwYyAwMiBjYyAJc2F0YWRkXC5oIHIxMixyMTIscjEyCisrICpbMC05YS1mXSo6CWVhIDA1IDAyIGM1IAlzYXRhZGRcLmggcjUscjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMDIgYzQgCXNhdGFkZFwuaCByNCxyNCxyNAorKyAqWzAtOWEtZl0qOglmYyAwZSAwMiBjZSAJc2F0YWRkXC5oIGxyLGxyLGxyCisrICpbMC05YS1mXSo6CWU2IDA5IDAyIGM3IAlzYXRhZGRcLmggcjcscjMscjkKKysgKlswLTlhLWZdKjoJZTAgMDIgMDIgYzEgCXNhdGFkZFwuaCByMSxyMCxyMgorKyAqWzAtOWEtZl0qOgllOCAwZSAwMiBjMSAJc2F0YWRkXC5oIHIxLHI0LGxyCisrCisrWzAtOWEtZl0qIDxzYXRzdWJfaD46CisrICpbMC05YS1mXSo6CWZlIDBmIDAzIGNmIAlzYXRzdWJcLmggcGMscGMscGMKKysgKlswLTlhLWZdKjoJZjggMGMgMDMgY2MgCXNhdHN1YlwuaCByMTIscjEyLHIxMgorKyAqWzAtOWEtZl0qOgllYSAwNSAwMyBjNSAJc2F0c3ViXC5oIHI1LHI1LHI1CisrICpbMC05YS1mXSo6CWU4IDA0IDAzIGM0IAlzYXRzdWJcLmggcjQscjQscjQKKysgKlswLTlhLWZdKjoJZmMgMGUgMDMgY2UgCXNhdHN1YlwuaCBscixscixscgorKyAqWzAtOWEtZl0qOglmYyAwMyAwMyBjZSAJc2F0c3ViXC5oIGxyLGxyLHIzCisrICpbMC05YS1mXSo6CWVjIDA1IDAzIGNiIAlzYXRzdWJcLmggcjExLHI2LHI1CisrICpbMC05YS1mXSo6CWZhIDAwIDAzIGMzIAlzYXRzdWJcLmggcjMsc3AscjAKKysKKytbMC05YS1mXSogPG11bDM+OgorKyAqWzAtOWEtZl0qOglmZSAwZiAxMCAwMCAJbXVsIHBjLHBjLDAKKysgKlswLTlhLWZdKjoJZjggMGMgMTAgZmYgCW11bCByMTIscjEyLC0xCisrICpbMC05YS1mXSo6CWVhIDA1IDEwIDgwIAltdWwgcjUscjUsLTEyOAorKyAqWzAtOWEtZl0qOgllOCAwNCAxMCA3ZiAJbXVsIHI0LHI0LDEyNworKyAqWzAtOWEtZl0qOglmYyAwZSAxMCAwMSAJbXVsIGxyLGxyLDEKKysgKlswLTlhLWZdKjoJZTQgMGMgMTAgZjkgCW11bCByMTIscjIsLTcKKysgKlswLTlhLWZdKjoJZmUgMDEgMTAgNWYgCW11bCByMSxwYyw5NQorKyAqWzAtOWEtZl0qOgllYyAwNCAxMCAxMyAJbXVsIHI0LHI2LDE5CisrCisrWzAtOWEtZl0qIDxyc3ViMj46CisrICpbMC05YS1mXSo6CWZlIDBmIDExIDAwIAlyc3ViIHBjLHBjLDAKKysgKlswLTlhLWZdKjoJZjggMGMgMTEgZmYgCXJzdWIgcjEyLHIxMiwtMQorKyAqWzAtOWEtZl0qOgllYSAwNSAxMSA4MCAJcnN1YiByNSxyNSwtMTI4CisrICpbMC05YS1mXSo6CWU4IDA0IDExIDdmIAlyc3ViIHI0LHI0LDEyNworKyAqWzAtOWEtZl0qOglmYyAwZSAxMSAwMSAJcnN1YiBscixsciwxCisrICpbMC05YS1mXSo6CWZjIDA5IDExIDYwIAlyc3ViIHI5LGxyLDk2CisrICpbMC05YS1mXSo6CWUyIDBiIDExIDM4IAlyc3ViIHIxMSxyMSw1NgorKyAqWzAtOWEtZl0qOgllZSAwMCAxMSBhOSAJcnN1YiByMCxyNywtODcKKysKKytbMC05YS1mXSogPGNsej46CisrICpbMC05YS1mXSo6CWZlIDBmIDEyIDAwIAljbHogcGMscGMKKysgKlswLTlhLWZdKjoJZjggMGMgMTIgMDAgCWNseiByMTIscjEyCisrICpbMC05YS1mXSo6CWVhIDA1IDEyIDAwIAljbHogcjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMTIgMDAgCWNseiByNCxyNAorKyAqWzAtOWEtZl0qOglmYyAwZSAxMiAwMCAJY2x6IGxyLGxyCisrICpbMC05YS1mXSo6CWU2IDAyIDEyIDAwIAljbHogcjIscjMKKysgKlswLTlhLWZdKjoJZjYgMDUgMTIgMDAgCWNseiByNSxyMTEKKysgKlswLTlhLWZdKjoJZTYgMGYgMTIgMDAgCWNseiBwYyxyMworKworK1swLTlhLWZdKiA8Y3BjMT46CisrICpbMC05YS1mXSo6CWZlIDBmIDEzIDAwIAljcGMgcGMscGMKKysgKlswLTlhLWZdKjoJZjggMGMgMTMgMDAgCWNwYyByMTIscjEyCisrICpbMC05YS1mXSo6CWVhIDA1IDEzIDAwIAljcGMgcjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMTMgMDAgCWNwYyByNCxyNAorKyAqWzAtOWEtZl0qOglmYyAwZSAxMyAwMCAJY3BjIGxyLGxyCisrICpbMC05YS1mXSo6CWU4IDBmIDEzIDAwIAljcGMgcGMscjQKKysgKlswLTlhLWZdKjoJZjIgMDUgMTMgMDAgCWNwYyByNSxyOQorKyAqWzAtOWEtZl0qOgllZSAwNiAxMyAwMCAJY3BjIHI2LHI3CisrCisrWzAtOWEtZl0qIDxhc3IzPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMTQgMDAgCWFzciBwYyxwYywweDAKKysgKlswLTlhLWZdKjoJZjggMGMgMTQgMWYgCWFzciByMTIscjEyLDB4MWYKKysgKlswLTlhLWZdKjoJZWEgMDUgMTQgMTAgCWFzciByNSxyNSwweDEwCisrICpbMC05YS1mXSo6CWU4IDA0IDE0IDBmIAlhc3IgcjQscjQsMHhmCisrICpbMC05YS1mXSo6CWZjIDBlIDE0IDAxIAlhc3IgbHIsbHIsMHgxCisrICpbMC05YS1mXSo6CWY2IDA0IDE0IDEzIAlhc3IgcjQscjExLDB4MTMKKysgKlswLTlhLWZdKjoJZmUgMGQgMTQgMWEgCWFzciBzcCxwYywweDFhCisrICpbMC05YS1mXSo6CWZhIDBiIDE0IDA4IAlhc3IgcjExLHNwLDB4OAorKworK1swLTlhLWZdKiA8bHNsMz46CisrICpbMC05YS1mXSo6CWZlIDBmIDE1IDAwIAlsc2wgcGMscGMsMHgwCisrICpbMC05YS1mXSo6CWY4IDBjIDE1IDFmIAlsc2wgcjEyLHIxMiwweDFmCisrICpbMC05YS1mXSo6CWVhIDA1IDE1IDEwIAlsc2wgcjUscjUsMHgxMAorKyAqWzAtOWEtZl0qOgllOCAwNCAxNSAwZiAJbHNsIHI0LHI0LDB4ZgorKyAqWzAtOWEtZl0qOglmYyAwZSAxNSAwMSAJbHNsIGxyLGxyLDB4MQorKyAqWzAtOWEtZl0qOglmNCAwOCAxNSAxMSAJbHNsIHI4LHIxMCwweDExCisrICpbMC05YS1mXSo6CWZjIDAyIDE1IDAzIAlsc2wgcjIsbHIsMHgzCisrICpbMC05YS1mXSo6CWY2IDBlIDE1IDBlIAlsc2wgbHIscjExLDB4ZQorKworK1swLTlhLWZdKiA8bHNyMz46CisrICpbMC05YS1mXSo6CWZlIDBmIDE2IDAwIAlsc3IgcGMscGMsMHgwCisrICpbMC05YS1mXSo6CWY4IDBjIDE2IDFmIAlsc3IgcjEyLHIxMiwweDFmCisrICpbMC05YS1mXSo6CWVhIDA1IDE2IDEwIAlsc3IgcjUscjUsMHgxMAorKyAqWzAtOWEtZl0qOgllOCAwNCAxNiAwZiAJbHNyIHI0LHI0LDB4ZgorKyAqWzAtOWEtZl0qOglmYyAwZSAxNiAwMSAJbHNyIGxyLGxyLDB4MQorKyAqWzAtOWEtZl0qOgllNiAwNCAxNiAxZiAJbHNyIHI0LHIzLDB4MWYKKysgKlswLTlhLWZdKjoJZjIgMGYgMTYgMGUgCWxzciBwYyxyOSwweGUKKysgKlswLTlhLWZdKjoJZTAgMDMgMTYgMDYgCWxzciByMyxyMCwweDYKKysKKytbMC05YS1mXSogPG1vdmMxPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMTcgMDAgCW1vdmVxIHBjLHBjCisrICpbMC05YS1mXSo6CWY4IDBjIDE3IGYwIAltb3ZhbCByMTIscjEyCisrICpbMC05YS1mXSo6CWVhIDA1IDE3IDgwIAltb3ZscyByNSxyNQorKyAqWzAtOWEtZl0qOgllOCAwNCAxNyA3MCAJbW92cGwgcjQscjQKKysgKlswLTlhLWZdKjoJZmMgMGUgMTcgMTAgCW1vdm5lIGxyLGxyCisrICpbMC05YS1mXSo6CWY2IDBmIDE3IDEwIAltb3ZuZSBwYyxyMTEKKysgKlswLTlhLWZdKjoJZTQgMGEgMTcgNjAgCW1vdm1pIHIxMCxyMgorKyAqWzAtOWEtZl0qOglmOCAwOCAxNyA4MCAJbW92bHMgcjgscjEyCisrCisrWzAtOWEtZl0qIDxwYWRkX2g+OgorKyAqWzAtOWEtZl0qOglmZSAwZiAyMCAwZiAJcGFkZFwuaCBwYyxwYyxwYworKyAqWzAtOWEtZl0qOglmOCAwYyAyMCAwYyAJcGFkZFwuaCByMTIscjEyLHIxMgorKyAqWzAtOWEtZl0qOgllYSAwNSAyMCAwNSAJcGFkZFwuaCByNSxyNSxyNQorKyAqWzAtOWEtZl0qOgllOCAwNCAyMCAwNCAJcGFkZFwuaCByNCxyNCxyNAorKyAqWzAtOWEtZl0qOglmYyAwZSAyMCAwZSAJcGFkZFwuaCBscixscixscgorKyAqWzAtOWEtZl0qOgllNCAwNyAyMCAwOCAJcGFkZFwuaCByOCxyMixyNworKyAqWzAtOWEtZl0qOgllMCAwMyAyMCAwMCAJcGFkZFwuaCByMCxyMCxyMworKyAqWzAtOWEtZl0qOglmNiAwNiAyMCAwZCAJcGFkZFwuaCBzcCxyMTEscjYKKysKKytbMC05YS1mXSogPHBzdWJfaD46CisrICpbMC05YS1mXSo6CWZlIDBmIDIwIDFmIAlwc3ViXC5oIHBjLHBjLHBjCisrICpbMC05YS1mXSo6CWY4IDBjIDIwIDFjIAlwc3ViXC5oIHIxMixyMTIscjEyCisrICpbMC05YS1mXSo6CWVhIDA1IDIwIDE1IAlwc3ViXC5oIHI1LHI1LHI1CisrICpbMC05YS1mXSo6CWU4IDA0IDIwIDE0IAlwc3ViXC5oIHI0LHI0LHI0CisrICpbMC05YS1mXSo6CWZjIDBlIDIwIDFlIAlwc3ViXC5oIGxyLGxyLGxyCisrICpbMC05YS1mXSo6CWVjIDA4IDIwIDFlIAlwc3ViXC5oIGxyLHI2LHI4CisrICpbMC05YS1mXSo6CWUyIDBkIDIwIDEwIAlwc3ViXC5oIHIwLHIxLHNwCisrICpbMC05YS1mXSo6CWZlIDBkIDIwIDFmIAlwc3ViXC5oIHBjLHBjLHNwCisrCisrWzAtOWEtZl0qIDxwYWRkeF9oPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMjAgMmYgCXBhZGR4XC5oIHBjLHBjLHBjCisrICpbMC05YS1mXSo6CWY4IDBjIDIwIDJjIAlwYWRkeFwuaCByMTIscjEyLHIxMgorKyAqWzAtOWEtZl0qOgllYSAwNSAyMCAyNSAJcGFkZHhcLmggcjUscjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMjAgMjQgCXBhZGR4XC5oIHI0LHI0LHI0CisrICpbMC05YS1mXSo6CWZjIDBlIDIwIDJlIAlwYWRkeFwuaCBscixscixscgorKyAqWzAtOWEtZl0qOglmZSAwMSAyMCAyZiAJcGFkZHhcLmggcGMscGMscjEKKysgKlswLTlhLWZdKjoJZTggMDUgMjAgMmEgCXBhZGR4XC5oIHIxMCxyNCxyNQorKyAqWzAtOWEtZl0qOglmZSAwMiAyMCAyNSAJcGFkZHhcLmggcjUscGMscjIKKysKKytbMC05YS1mXSogPHBzdWJ4X2g+OgorKyAqWzAtOWEtZl0qOglmZSAwZiAyMCAzZiAJcHN1YnhcLmggcGMscGMscGMKKysgKlswLTlhLWZdKjoJZjggMGMgMjAgM2MgCXBzdWJ4XC5oIHIxMixyMTIscjEyCisrICpbMC05YS1mXSo6CWVhIDA1IDIwIDM1IAlwc3VieFwuaCByNSxyNSxyNQorKyAqWzAtOWEtZl0qOgllOCAwNCAyMCAzNCAJcHN1YnhcLmggcjQscjQscjQKKysgKlswLTlhLWZdKjoJZmMgMGUgMjAgM2UgCXBzdWJ4XC5oIGxyLGxyLGxyCisrICpbMC05YS1mXSo6CWY4IDA1IDIwIDM1IAlwc3VieFwuaCByNSxyMTIscjUKKysgKlswLTlhLWZdKjoJZjAgMDMgMjAgMzMgCXBzdWJ4XC5oIHIzLHI4LHIzCisrICpbMC05YS1mXSo6CWU0IDAzIDIwIDM1IAlwc3VieFwuaCByNSxyMixyMworKworK1swLTlhLWZdKiA8cGFkZHNfc2g+OgorKyAqWzAtOWEtZl0qOglmZSAwZiAyMCA0ZiAJcGFkZHNcLnNoIHBjLHBjLHBjCisrICpbMC05YS1mXSo6CWY4IDBjIDIwIDRjIAlwYWRkc1wuc2ggcjEyLHIxMixyMTIKKysgKlswLTlhLWZdKjoJZWEgMDUgMjAgNDUgCXBhZGRzXC5zaCByNSxyNSxyNQorKyAqWzAtOWEtZl0qOgllOCAwNCAyMCA0NCAJcGFkZHNcLnNoIHI0LHI0LHI0CisrICpbMC05YS1mXSo6CWZjIDBlIDIwIDRlIAlwYWRkc1wuc2ggbHIsbHIsbHIKKysgKlswLTlhLWZdKjoJZmMgMDIgMjAgNDkgCXBhZGRzXC5zaCByOSxscixyMgorKyAqWzAtOWEtZl0qOglmMCAwMSAyMCA0NiAJcGFkZHNcLnNoIHI2LHI4LHIxCisrICpbMC05YS1mXSo6CWU4IDBhIDIwIDQ2IAlwYWRkc1wuc2ggcjYscjQscjEwCisrCisrWzAtOWEtZl0qIDxwc3Vic19zaD46CisrICpbMC05YS1mXSo6CWZlIDBmIDIwIDVmIAlwc3Vic1wuc2ggcGMscGMscGMKKysgKlswLTlhLWZdKjoJZjggMGMgMjAgNWMgCXBzdWJzXC5zaCByMTIscjEyLHIxMgorKyAqWzAtOWEtZl0qOgllYSAwNSAyMCA1NSAJcHN1YnNcLnNoIHI1LHI1LHI1CisrICpbMC05YS1mXSo6CWU4IDA0IDIwIDU0IAlwc3Vic1wuc2ggcjQscjQscjQKKysgKlswLTlhLWZdKjoJZmMgMGUgMjAgNWUgCXBzdWJzXC5zaCBscixscixscgorKyAqWzAtOWEtZl0qOglmYyAwYiAyMCA1NiAJcHN1YnNcLnNoIHI2LGxyLHIxMQorKyAqWzAtOWEtZl0qOglmOCAwNCAyMCA1MiAJcHN1YnNcLnNoIHIyLHIxMixyNAorKyAqWzAtOWEtZl0qOglmMiAwMCAyMCA1MCAJcHN1YnNcLnNoIHIwLHI5LHIwCisrCisrWzAtOWEtZl0qIDxwYWRkeHNfc2g+OgorKyAqWzAtOWEtZl0qOglmZSAwZiAyMCA2ZiAJcGFkZHhzXC5zaCBwYyxwYyxwYworKyAqWzAtOWEtZl0qOglmOCAwYyAyMCA2YyAJcGFkZHhzXC5zaCByMTIscjEyLHIxMgorKyAqWzAtOWEtZl0qOgllYSAwNSAyMCA2NSAJcGFkZHhzXC5zaCByNSxyNSxyNQorKyAqWzAtOWEtZl0qOgllOCAwNCAyMCA2NCAJcGFkZHhzXC5zaCByNCxyNCxyNAorKyAqWzAtOWEtZl0qOglmYyAwZSAyMCA2ZSAJcGFkZHhzXC5zaCBscixscixscgorKyAqWzAtOWEtZl0qOgllNiAwOSAyMCA2MCAJcGFkZHhzXC5zaCByMCxyMyxyOQorKyAqWzAtOWEtZl0qOglmNCAwYiAyMCA2ZiAJcGFkZHhzXC5zaCBwYyxyMTAscjExCisrICpbMC05YS1mXSo6CWY0IDBmIDIwIDZmIAlwYWRkeHNcLnNoIHBjLHIxMCxwYworKworK1swLTlhLWZdKiA8cHN1YnhzX3NoPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMjAgN2YgCXBzdWJ4c1wuc2ggcGMscGMscGMKKysgKlswLTlhLWZdKjoJZjggMGMgMjAgN2MgCXBzdWJ4c1wuc2ggcjEyLHIxMixyMTIKKysgKlswLTlhLWZdKjoJZWEgMDUgMjAgNzUgCXBzdWJ4c1wuc2ggcjUscjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMjAgNzQgCXBzdWJ4c1wuc2ggcjQscjQscjQKKysgKlswLTlhLWZdKjoJZmMgMGUgMjAgN2UgCXBzdWJ4c1wuc2ggbHIsbHIsbHIKKysgKlswLTlhLWZdKjoJZTggMDQgMjAgNzcgCXBzdWJ4c1wuc2ggcjcscjQscjQKKysgKlswLTlhLWZdKjoJZjAgMDMgMjAgNzcgCXBzdWJ4c1wuc2ggcjcscjgscjMKKysgKlswLTlhLWZdKjoJZWMgMDUgMjAgN2YgCXBzdWJ4c1wuc2ggcGMscjYscjUKKysKKytbMC05YS1mXSogPHBhZGRzX3VoPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMjAgOGYgCXBhZGRzXC51aCBwYyxwYyxwYworKyAqWzAtOWEtZl0qOglmOCAwYyAyMCA4YyAJcGFkZHNcLnVoIHIxMixyMTIscjEyCisrICpbMC05YS1mXSo6CWVhIDA1IDIwIDg1IAlwYWRkc1wudWggcjUscjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMjAgODQgCXBhZGRzXC51aCByNCxyNCxyNAorKyAqWzAtOWEtZl0qOglmYyAwZSAyMCA4ZSAJcGFkZHNcLnVoIGxyLGxyLGxyCisrICpbMC05YS1mXSo6CWY2IDA3IDIwIDhjIAlwYWRkc1wudWggcjEyLHIxMSxyNworKyAqWzAtOWEtZl0qOglmMCAwZSAyMCA4NyAJcGFkZHNcLnVoIHI3LHI4LGxyCisrICpbMC05YS1mXSo6CWYyIDA3IDIwIDg2IAlwYWRkc1wudWggcjYscjkscjcKKysKKytbMC05YS1mXSogPHBzdWJzX3VoPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMjAgOWYgCXBzdWJzXC51aCBwYyxwYyxwYworKyAqWzAtOWEtZl0qOglmOCAwYyAyMCA5YyAJcHN1YnNcLnVoIHIxMixyMTIscjEyCisrICpbMC05YS1mXSo6CWVhIDA1IDIwIDk1IAlwc3Vic1wudWggcjUscjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMjAgOTQgCXBzdWJzXC51aCByNCxyNCxyNAorKyAqWzAtOWEtZl0qOglmYyAwZSAyMCA5ZSAJcHN1YnNcLnVoIGxyLGxyLGxyCisrICpbMC05YS1mXSo6CWY0IDA2IDIwIDllIAlwc3Vic1wudWggbHIscjEwLHI2CisrICpbMC05YS1mXSo6CWU0IDBmIDIwIDlkIAlwc3Vic1wudWggc3AscjIscGMKKysgKlswLTlhLWZdKjoJZjIgMDIgMjAgOTIgCXBzdWJzXC51aCByMixyOSxyMgorKworK1swLTlhLWZdKiA8cGFkZHhzX3VoPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMjAgYWYgCXBhZGR4c1wudWggcGMscGMscGMKKysgKlswLTlhLWZdKjoJZjggMGMgMjAgYWMgCXBhZGR4c1wudWggcjEyLHIxMixyMTIKKysgKlswLTlhLWZdKjoJZWEgMDUgMjAgYTUgCXBhZGR4c1wudWggcjUscjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMjAgYTQgCXBhZGR4c1wudWggcjQscjQscjQKKysgKlswLTlhLWZdKjoJZmMgMGUgMjAgYWUgCXBhZGR4c1wudWggbHIsbHIsbHIKKysgKlswLTlhLWZdKjoJZjIgMDUgMjAgYTcgCXBhZGR4c1wudWggcjcscjkscjUKKysgKlswLTlhLWZdKjoJZTIgMDQgMjAgYTkgCXBhZGR4c1wudWggcjkscjEscjQKKysgKlswLTlhLWZdKjoJZTQgMDMgMjAgYTUgCXBhZGR4c1wudWggcjUscjIscjMKKysKKytbMC05YS1mXSogPHBzdWJ4c191aD46CisrICpbMC05YS1mXSo6CWZlIDBmIDIwIGJmIAlwc3VieHNcLnVoIHBjLHBjLHBjCisrICpbMC05YS1mXSo6CWY4IDBjIDIwIGJjIAlwc3VieHNcLnVoIHIxMixyMTIscjEyCisrICpbMC05YS1mXSo6CWVhIDA1IDIwIGI1IAlwc3VieHNcLnVoIHI1LHI1LHI1CisrICpbMC05YS1mXSo6CWU4IDA0IDIwIGI0IAlwc3VieHNcLnVoIHI0LHI0LHI0CisrICpbMC05YS1mXSo6CWZjIDBlIDIwIGJlIAlwc3VieHNcLnVoIGxyLGxyLGxyCisrICpbMC05YS1mXSo6CWVhIDBkIDIwIGJkIAlwc3VieHNcLnVoIHNwLHI1LHNwCisrICpbMC05YS1mXSo6CWVjIDA2IDIwIGJkIAlwc3VieHNcLnVoIHNwLHI2LHI2CisrICpbMC05YS1mXSo6CWY2IDA4IDIwIGIzIAlwc3VieHNcLnVoIHIzLHIxMSxyOAorKworK1swLTlhLWZdKiA8cGFkZGhfc2g+OgorKyAqWzAtOWEtZl0qOglmZSAwZiAyMCBjZiAJcGFkZGhcLnNoIHBjLHBjLHBjCisrICpbMC05YS1mXSo6CWY4IDBjIDIwIGNjIAlwYWRkaFwuc2ggcjEyLHIxMixyMTIKKysgKlswLTlhLWZdKjoJZWEgMDUgMjAgYzUgCXBhZGRoXC5zaCByNSxyNSxyNQorKyAqWzAtOWEtZl0qOgllOCAwNCAyMCBjNCAJcGFkZGhcLnNoIHI0LHI0LHI0CisrICpbMC05YS1mXSo6CWZjIDBlIDIwIGNlIAlwYWRkaFwuc2ggbHIsbHIsbHIKKysgKlswLTlhLWZdKjoJZmEgMDMgMjAgY2MgCXBhZGRoXC5zaCByMTIsc3AscjMKKysgKlswLTlhLWZdKjoJZWEgMDMgMjAgY2YgCXBhZGRoXC5zaCBwYyxyNSxyMworKyAqWzAtOWEtZl0qOglmMCAwZCAyMCBjOCAJcGFkZGhcLnNoIHI4LHI4LHNwCisrCisrWzAtOWEtZl0qIDxwc3ViaF9zaD46CisrICpbMC05YS1mXSo6CWZlIDBmIDIwIGRmIAlwc3ViaFwuc2ggcGMscGMscGMKKysgKlswLTlhLWZdKjoJZjggMGMgMjAgZGMgCXBzdWJoXC5zaCByMTIscjEyLHIxMgorKyAqWzAtOWEtZl0qOgllYSAwNSAyMCBkNSAJcHN1YmhcLnNoIHI1LHI1LHI1CisrICpbMC05YS1mXSo6CWU4IDA0IDIwIGQ0IAlwc3ViaFwuc2ggcjQscjQscjQKKysgKlswLTlhLWZdKjoJZmMgMGUgMjAgZGUgCXBzdWJoXC5zaCBscixscixscgorKyAqWzAtOWEtZl0qOgllYSAwOCAyMCBkMSAJcHN1YmhcLnNoIHIxLHI1LHI4CisrICpbMC05YS1mXSo6CWU2IDA2IDIwIGQ3IAlwc3ViaFwuc2ggcjcscjMscjYKKysgKlswLTlhLWZdKjoJZTYgMDMgMjAgZDQgCXBzdWJoXC5zaCByNCxyMyxyMworKworK1swLTlhLWZdKiA8cGFkZHhoX3NoPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMjAgZWYgCXBhZGR4aFwuc2ggcGMscGMscGMKKysgKlswLTlhLWZdKjoJZjggMGMgMjAgZWMgCXBhZGR4aFwuc2ggcjEyLHIxMixyMTIKKysgKlswLTlhLWZdKjoJZWEgMDUgMjAgZTUgCXBhZGR4aFwuc2ggcjUscjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMjAgZTQgCXBhZGR4aFwuc2ggcjQscjQscjQKKysgKlswLTlhLWZdKjoJZmMgMGUgMjAgZWUgCXBhZGR4aFwuc2ggbHIsbHIsbHIKKysgKlswLTlhLWZdKjoJZTAgMDQgMjAgZTYgCXBhZGR4aFwuc2ggcjYscjAscjQKKysgKlswLTlhLWZdKjoJZjAgMDkgMjAgZTkgCXBhZGR4aFwuc2ggcjkscjgscjkKKysgKlswLTlhLWZdKjoJZTAgMGQgMjAgZTMgCXBhZGR4aFwuc2ggcjMscjAsc3AKKysKKytbMC05YS1mXSogPHBzdWJ4aF9zaD46CisrICpbMC05YS1mXSo6CWZlIDBmIDIwIGZmIAlwc3VieGhcLnNoIHBjLHBjLHBjCisrICpbMC05YS1mXSo6CWY4IDBjIDIwIGZjIAlwc3VieGhcLnNoIHIxMixyMTIscjEyCisrICpbMC05YS1mXSo6CWVhIDA1IDIwIGY1IAlwc3VieGhcLnNoIHI1LHI1LHI1CisrICpbMC05YS1mXSo6CWU4IDA0IDIwIGY0IAlwc3VieGhcLnNoIHI0LHI0LHI0CisrICpbMC05YS1mXSo6CWZjIDBlIDIwIGZlIAlwc3VieGhcLnNoIGxyLGxyLGxyCisrICpbMC05YS1mXSo6CWZlIDBjIDIwIGY0IAlwc3VieGhcLnNoIHI0LHBjLHIxMgorKyAqWzAtOWEtZl0qOgllOCAwNiAyMCBmOCAJcHN1YnhoXC5zaCByOCxyNCxyNgorKyAqWzAtOWEtZl0qOglmMiAwNCAyMCBmYyAJcHN1YnhoXC5zaCByMTIscjkscjQKKysKKytbMC05YS1mXSogPHBhZGRzdWJfaD46CisrICpbMC05YS1mXSo6CWZlIDBmIDIxIDBmIAlwYWRkc3ViXC5oIHBjLHBjOmIscGM6YgorKyAqWzAtOWEtZl0qOglmOCAwYyAyMSAzYyAJcGFkZHN1YlwuaCByMTIscjEyOnQscjEyOnQKKysgKlswLTlhLWZdKjoJZWEgMDUgMjEgMzUgCXBhZGRzdWJcLmggcjUscjU6dCxyNTp0CisrICpbMC05YS1mXSo6CWU4IDA0IDIxIDA0IAlwYWRkc3ViXC5oIHI0LHI0OmIscjQ6YgorKyAqWzAtOWEtZl0qOglmYyAwZSAyMSAzZSAJcGFkZHN1YlwuaCBscixscjp0LGxyOnQKKysgKlswLTlhLWZdKjoJZTQgMGUgMjEgMjUgCXBhZGRzdWJcLmggcjUscjI6dCxscjpiCisrICpbMC05YS1mXSo6CWUyIDA4IDIxIDA3IAlwYWRkc3ViXC5oIHI3LHIxOmIscjg6YgorKyAqWzAtOWEtZl0qOglmNCAwNSAyMSAzNiAJcGFkZHN1YlwuaCByNixyMTA6dCxyNTp0CisrCisrWzAtOWEtZl0qIDxwc3ViYWRkX2g+OgorKyAqWzAtOWEtZl0qOglmZSAwZiAyMSA0ZiAJcHN1YmFkZFwuaCBwYyxwYzpiLHBjOmIKKysgKlswLTlhLWZdKjoJZjggMGMgMjEgN2MgCXBzdWJhZGRcLmggcjEyLHIxMjp0LHIxMjp0CisrICpbMC05YS1mXSo6CWVhIDA1IDIxIDc1IAlwc3ViYWRkXC5oIHI1LHI1OnQscjU6dAorKyAqWzAtOWEtZl0qOgllOCAwNCAyMSA0NCAJcHN1YmFkZFwuaCByNCxyNDpiLHI0OmIKKysgKlswLTlhLWZdKjoJZmMgMGUgMjEgN2UgCXBzdWJhZGRcLmggbHIsbHI6dCxscjp0CisrICpbMC05YS1mXSo6CWY2IDA4IDIxIDc5IAlwc3ViYWRkXC5oIHI5LHIxMTp0LHI4OnQKKysgKlswLTlhLWZdKjoJZWUgMGUgMjEgN2EgCXBzdWJhZGRcLmggcjEwLHI3OnQsbHI6dAorKyAqWzAtOWEtZl0qOglmZSAwZiAyMSA2NiAJcHN1YmFkZFwuaCByNixwYzp0LHBjOmIKKysKKytbMC05YS1mXSogPHBhZGRzdWJzX3NoPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMjEgOGYgCXBhZGRzdWJzXC5zaCBwYyxwYzpiLHBjOmIKKysgKlswLTlhLWZdKjoJZjggMGMgMjEgYmMgCXBhZGRzdWJzXC5zaCByMTIscjEyOnQscjEyOnQKKysgKlswLTlhLWZdKjoJZWEgMDUgMjEgYjUgCXBhZGRzdWJzXC5zaCByNSxyNTp0LHI1OnQKKysgKlswLTlhLWZdKjoJZTggMDQgMjEgODQgCXBhZGRzdWJzXC5zaCByNCxyNDpiLHI0OmIKKysgKlswLTlhLWZdKjoJZmMgMGUgMjEgYmUgCXBhZGRzdWJzXC5zaCBscixscjp0LGxyOnQKKysgKlswLTlhLWZdKjoJZmMgMDAgMjEgYTAgCXBhZGRzdWJzXC5zaCByMCxscjp0LHIwOmIKKysgKlswLTlhLWZdKjoJZTQgMDQgMjEgYjkgCXBhZGRzdWJzXC5zaCByOSxyMjp0LHI0OnQKKysgKlswLTlhLWZdKjoJZjIgMGQgMjEgYmMgCXBhZGRzdWJzXC5zaCByMTIscjk6dCxzcDp0CisrCisrWzAtOWEtZl0qIDxwc3ViYWRkc19zaD46CisrICpbMC05YS1mXSo6CWZlIDBmIDIxIGNmIAlwc3ViYWRkc1wuc2ggcGMscGM6YixwYzpiCisrICpbMC05YS1mXSo6CWY4IDBjIDIxIGZjIAlwc3ViYWRkc1wuc2ggcjEyLHIxMjp0LHIxMjp0CisrICpbMC05YS1mXSo6CWVhIDA1IDIxIGY1IAlwc3ViYWRkc1wuc2ggcjUscjU6dCxyNTp0CisrICpbMC05YS1mXSo6CWU4IDA0IDIxIGM0IAlwc3ViYWRkc1wuc2ggcjQscjQ6YixyNDpiCisrICpbMC05YS1mXSo6CWZjIDBlIDIxIGZlIAlwc3ViYWRkc1wuc2ggbHIsbHI6dCxscjp0CisrICpbMC05YS1mXSo6CWZjIDAxIDIxIGRmIAlwc3ViYWRkc1wuc2ggcGMsbHI6YixyMTp0CisrICpbMC05YS1mXSo6CWU2IDBjIDIxIGNiIAlwc3ViYWRkc1wuc2ggcjExLHIzOmIscjEyOmIKKysgKlswLTlhLWZdKjoJZTQgMDggMjEgZmEgCXBzdWJhZGRzXC5zaCByMTAscjI6dCxyODp0CisrCisrWzAtOWEtZl0qIDxwYWRkc3Vic191aD46CisrICpbMC05YS1mXSo6CWZlIDBmIDIyIDBmIAlwYWRkc3Vic1wudWggcGMscGM6YixwYzpiCisrICpbMC05YS1mXSo6CWY4IDBjIDIyIDNjIAlwYWRkc3Vic1wudWggcjEyLHIxMjp0LHIxMjp0CisrICpbMC05YS1mXSo6CWVhIDA1IDIyIDM1IAlwYWRkc3Vic1wudWggcjUscjU6dCxyNTp0CisrICpbMC05YS1mXSo6CWU4IDA0IDIyIDA0IAlwYWRkc3Vic1wudWggcjQscjQ6YixyNDpiCisrICpbMC05YS1mXSo6CWZjIDBlIDIyIDNlIAlwYWRkc3Vic1wudWggbHIsbHI6dCxscjp0CisrICpbMC05YS1mXSo6CWU0IDAzIDIyIDA5IAlwYWRkc3Vic1wudWggcjkscjI6YixyMzpiCisrICpbMC05YS1mXSo6CWZhIDA3IDIyIDFkIAlwYWRkc3Vic1wudWggc3Asc3A6YixyNzp0CisrICpbMC05YS1mXSo6CWUwIDBhIDIyIDFlIAlwYWRkc3Vic1wudWggbHIscjA6YixyMTA6dAorKworK1swLTlhLWZdKiA8cHN1YmFkZHNfdWg+OgorKyAqWzAtOWEtZl0qOglmZSAwZiAyMiA0ZiAJcHN1YmFkZHNcLnVoIHBjLHBjOmIscGM6YgorKyAqWzAtOWEtZl0qOglmOCAwYyAyMiA3YyAJcHN1YmFkZHNcLnVoIHIxMixyMTI6dCxyMTI6dAorKyAqWzAtOWEtZl0qOgllYSAwNSAyMiA3NSAJcHN1YmFkZHNcLnVoIHI1LHI1OnQscjU6dAorKyAqWzAtOWEtZl0qOgllOCAwNCAyMiA0NCAJcHN1YmFkZHNcLnVoIHI0LHI0OmIscjQ6YgorKyAqWzAtOWEtZl0qOglmYyAwZSAyMiA3ZSAJcHN1YmFkZHNcLnVoIGxyLGxyOnQsbHI6dAorKyAqWzAtOWEtZl0qOglmMiAwZiAyMiA3YyAJcHN1YmFkZHNcLnVoIHIxMixyOTp0LHBjOnQKKysgKlswLTlhLWZdKjoJZWMgMDggMjIgNDggCXBzdWJhZGRzXC51aCByOCxyNjpiLHI4OmIKKysgKlswLTlhLWZdKjoJZjAgMDQgMjIgNDggCXBzdWJhZGRzXC51aCByOCxyODpiLHI0OmIKKysKKytbMC05YS1mXSogPHBhZGRzdWJoX3NoPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMjIgOGYgCXBhZGRzdWJoXC5zaCBwYyxwYzpiLHBjOmIKKysgKlswLTlhLWZdKjoJZjggMGMgMjIgYmMgCXBhZGRzdWJoXC5zaCByMTIscjEyOnQscjEyOnQKKysgKlswLTlhLWZdKjoJZWEgMDUgMjIgYjUgCXBhZGRzdWJoXC5zaCByNSxyNTp0LHI1OnQKKysgKlswLTlhLWZdKjoJZTggMDQgMjIgODQgCXBhZGRzdWJoXC5zaCByNCxyNDpiLHI0OmIKKysgKlswLTlhLWZdKjoJZmMgMGUgMjIgYmUgCXBhZGRzdWJoXC5zaCBscixscjp0LGxyOnQKKysgKlswLTlhLWZdKjoJZjIgMDkgMjIgYTggCXBhZGRzdWJoXC5zaCByOCxyOTp0LHI5OmIKKysgKlswLTlhLWZdKjoJZmEgMDEgMjIgYjAgCXBhZGRzdWJoXC5zaCByMCxzcDp0LHIxOnQKKysgKlswLTlhLWZdKjoJZTIgMDAgMjIgOTMgCXBhZGRzdWJoXC5zaCByMyxyMTpiLHIwOnQKKysKKytbMC05YS1mXSogPHBzdWJhZGRoX3NoPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMjIgY2YgCXBzdWJhZGRoXC5zaCBwYyxwYzpiLHBjOmIKKysgKlswLTlhLWZdKjoJZjggMGMgMjIgZmMgCXBzdWJhZGRoXC5zaCByMTIscjEyOnQscjEyOnQKKysgKlswLTlhLWZdKjoJZWEgMDUgMjIgZjUgCXBzdWJhZGRoXC5zaCByNSxyNTp0LHI1OnQKKysgKlswLTlhLWZdKjoJZTggMDQgMjIgYzQgCXBzdWJhZGRoXC5zaCByNCxyNDpiLHI0OmIKKysgKlswLTlhLWZdKjoJZmMgMGUgMjIgZmUgCXBzdWJhZGRoXC5zaCBscixscjp0LGxyOnQKKysgKlswLTlhLWZdKjoJZTYgMGEgMjIgZTcgCXBzdWJhZGRoXC5zaCByNyxyMzp0LHIxMDpiCisrICpbMC05YS1mXSo6CWU0IDAxIDIyIGY3IAlwc3ViYWRkaFwuc2ggcjcscjI6dCxyMTp0CisrICpbMC05YS1mXSo6CWU2IDA2IDIyIGNiIAlwc3ViYWRkaFwuc2ggcjExLHIzOmIscjY6YgorKworK1swLTlhLWZdKiA8cGFkZF9iPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMjMgMGYgCXBhZGRcLmIgcGMscGMscGMKKysgKlswLTlhLWZdKjoJZjggMGMgMjMgMGMgCXBhZGRcLmIgcjEyLHIxMixyMTIKKysgKlswLTlhLWZdKjoJZWEgMDUgMjMgMDUgCXBhZGRcLmIgcjUscjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMjMgMDQgCXBhZGRcLmIgcjQscjQscjQKKysgKlswLTlhLWZdKjoJZmMgMGUgMjMgMGUgCXBhZGRcLmIgbHIsbHIsbHIKKysgKlswLTlhLWZdKjoJZWMgMGYgMjMgMDIgCXBhZGRcLmIgcjIscjYscGMKKysgKlswLTlhLWZdKjoJZjIgMGMgMjMgMDggCXBhZGRcLmIgcjgscjkscjEyCisrICpbMC05YS1mXSo6CWY4IDAzIDIzIDA1IAlwYWRkXC5iIHI1LHIxMixyMworKworK1swLTlhLWZdKiA8cHN1Yl9iPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMjMgMWYgCXBzdWJcLmIgcGMscGMscGMKKysgKlswLTlhLWZdKjoJZjggMGMgMjMgMWMgCXBzdWJcLmIgcjEyLHIxMixyMTIKKysgKlswLTlhLWZdKjoJZWEgMDUgMjMgMTUgCXBzdWJcLmIgcjUscjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMjMgMTQgCXBzdWJcLmIgcjQscjQscjQKKysgKlswLTlhLWZdKjoJZmMgMGUgMjMgMWUgCXBzdWJcLmIgbHIsbHIsbHIKKysgKlswLTlhLWZdKjoJZjggMGYgMjMgMTAgCXBzdWJcLmIgcjAscjEyLHBjCisrICpbMC05YS1mXSo6CWZhIDBhIDIzIDE3IAlwc3ViXC5iIHI3LHNwLHIxMAorKyAqWzAtOWEtZl0qOglmYSAwYyAyMyAxNSAJcHN1YlwuYiByNSxzcCxyMTIKKysKKytbMC05YS1mXSogPHBhZGRzX3NiPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMjMgMmYgCXBhZGRzXC5zYiBwYyxwYyxwYworKyAqWzAtOWEtZl0qOglmOCAwYyAyMyAyYyAJcGFkZHNcLnNiIHIxMixyMTIscjEyCisrICpbMC05YS1mXSo6CWVhIDA1IDIzIDI1IAlwYWRkc1wuc2IgcjUscjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMjMgMjQgCXBhZGRzXC5zYiByNCxyNCxyNAorKyAqWzAtOWEtZl0qOglmYyAwZSAyMyAyZSAJcGFkZHNcLnNiIGxyLGxyLGxyCisrICpbMC05YS1mXSo6CWY2IDA0IDIzIDJkIAlwYWRkc1wuc2Igc3AscjExLHI0CisrICpbMC05YS1mXSo6CWY0IDBiIDIzIDJiIAlwYWRkc1wuc2IgcjExLHIxMCxyMTEKKysgKlswLTlhLWZdKjoJZjggMDYgMjMgMjUgCXBhZGRzXC5zYiByNSxyMTIscjYKKysKKytbMC05YS1mXSogPHBzdWJzX3NiPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMjMgM2YgCXBzdWJzXC5zYiBwYyxwYyxwYworKyAqWzAtOWEtZl0qOglmOCAwYyAyMyAzYyAJcHN1YnNcLnNiIHIxMixyMTIscjEyCisrICpbMC05YS1mXSo6CWVhIDA1IDIzIDM1IAlwc3Vic1wuc2IgcjUscjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMjMgMzQgCXBzdWJzXC5zYiByNCxyNCxyNAorKyAqWzAtOWEtZl0qOglmYyAwZSAyMyAzZSAJcHN1YnNcLnNiIGxyLGxyLGxyCisrICpbMC05YS1mXSo6CWVjIDA4IDIzIDM3IAlwc3Vic1wuc2IgcjcscjYscjgKKysgKlswLTlhLWZdKjoJZjQgMDkgMjMgM2MgCXBzdWJzXC5zYiByMTIscjEwLHI5CisrICpbMC05YS1mXSo6CWY2IDAwIDIzIDNmIAlwc3Vic1wuc2IgcGMscjExLHIwCisrCisrWzAtOWEtZl0qIDxwYWRkc191Yj46CisrICpbMC05YS1mXSo6CWZlIDBmIDIzIDRmIAlwYWRkc1wudWIgcGMscGMscGMKKysgKlswLTlhLWZdKjoJZjggMGMgMjMgNGMgCXBhZGRzXC51YiByMTIscjEyLHIxMgorKyAqWzAtOWEtZl0qOgllYSAwNSAyMyA0NSAJcGFkZHNcLnViIHI1LHI1LHI1CisrICpbMC05YS1mXSo6CWU4IDA0IDIzIDQ0IAlwYWRkc1wudWIgcjQscjQscjQKKysgKlswLTlhLWZdKjoJZmMgMGUgMjMgNGUgCXBhZGRzXC51YiBscixscixscgorKyAqWzAtOWEtZl0qOgllNCAwYiAyMyA0MyAJcGFkZHNcLnViIHIzLHIyLHIxMQorKyAqWzAtOWEtZl0qOglmMCAwMSAyMyA0YSAJcGFkZHNcLnViIHIxMCxyOCxyMQorKyAqWzAtOWEtZl0qOglmMCAwYSAyMyA0YiAJcGFkZHNcLnViIHIxMSxyOCxyMTAKKysKKytbMC05YS1mXSogPHBzdWJzX3ViPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMjMgNWYgCXBzdWJzXC51YiBwYyxwYyxwYworKyAqWzAtOWEtZl0qOglmOCAwYyAyMyA1YyAJcHN1YnNcLnViIHIxMixyMTIscjEyCisrICpbMC05YS1mXSo6CWVhIDA1IDIzIDU1IAlwc3Vic1wudWIgcjUscjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMjMgNTQgCXBzdWJzXC51YiByNCxyNCxyNAorKyAqWzAtOWEtZl0qOglmYyAwZSAyMyA1ZSAJcHN1YnNcLnViIGxyLGxyLGxyCisrICpbMC05YS1mXSo6CWU0IDA3IDIzIDUwIAlwc3Vic1wudWIgcjAscjIscjcKKysgKlswLTlhLWZdKjoJZWEgMDMgMjMgNWUgCXBzdWJzXC51YiBscixyNSxyMworKyAqWzAtOWEtZl0qOgllZSAwOSAyMyA1NiAJcHN1YnNcLnViIHI2LHI3LHI5CisrCisrWzAtOWEtZl0qIDxwYWRkaF91Yj46CisrICpbMC05YS1mXSo6CWZlIDBmIDIzIDZmIAlwYWRkaFwudWIgcGMscGMscGMKKysgKlswLTlhLWZdKjoJZjggMGMgMjMgNmMgCXBhZGRoXC51YiByMTIscjEyLHIxMgorKyAqWzAtOWEtZl0qOgllYSAwNSAyMyA2NSAJcGFkZGhcLnViIHI1LHI1LHI1CisrICpbMC05YS1mXSo6CWU4IDA0IDIzIDY0IAlwYWRkaFwudWIgcjQscjQscjQKKysgKlswLTlhLWZdKjoJZmMgMGUgMjMgNmUgCXBhZGRoXC51YiBscixscixscgorKyAqWzAtOWEtZl0qOgllMiAwMCAyMyA2ZSAJcGFkZGhcLnViIGxyLHIxLHIwCisrICpbMC05YS1mXSo6CWVlIDA3IDIzIDYyIAlwYWRkaFwudWIgcjIscjcscjcKKysgKlswLTlhLWZdKjoJZTIgMDIgMjMgNjIgCXBhZGRoXC51YiByMixyMSxyMgorKworK1swLTlhLWZdKiA8cHN1YmhfdWI+OgorKyAqWzAtOWEtZl0qOglmZSAwZiAyMyA3ZiAJcHN1YmhcLnViIHBjLHBjLHBjCisrICpbMC05YS1mXSo6CWY4IDBjIDIzIDdjIAlwc3ViaFwudWIgcjEyLHIxMixyMTIKKysgKlswLTlhLWZdKjoJZWEgMDUgMjMgNzUgCXBzdWJoXC51YiByNSxyNSxyNQorKyAqWzAtOWEtZl0qOgllOCAwNCAyMyA3NCAJcHN1YmhcLnViIHI0LHI0LHI0CisrICpbMC05YS1mXSo6CWZjIDBlIDIzIDdlIAlwc3ViaFwudWIgbHIsbHIsbHIKKysgKlswLTlhLWZdKjoJZTIgMDYgMjMgNzAgCXBzdWJoXC51YiByMCxyMSxyNgorKyAqWzAtOWEtZl0qOglmYyAwYSAyMyA3NCAJcHN1YmhcLnViIHI0LGxyLHIxMAorKyAqWzAtOWEtZl0qOglmMCAwMSAyMyA3OSAJcHN1YmhcLnViIHI5LHI4LHIxCisrCisrWzAtOWEtZl0qIDxwbWF4X3ViPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMjMgOGYgCXBtYXhcLnViIHBjLHBjLHBjCisrICpbMC05YS1mXSo6CWY4IDBjIDIzIDhjIAlwbWF4XC51YiByMTIscjEyLHIxMgorKyAqWzAtOWEtZl0qOgllYSAwNSAyMyA4NSAJcG1heFwudWIgcjUscjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMjMgODQgCXBtYXhcLnViIHI0LHI0LHI0CisrICpbMC05YS1mXSo6CWZjIDBlIDIzIDhlIAlwbWF4XC51YiBscixscixscgorKyAqWzAtOWEtZl0qOgllNCAwYiAyMyA4ZiAJcG1heFwudWIgcGMscjIscjExCisrICpbMC05YS1mXSo6CWUyIDAxIDIzIDhjIAlwbWF4XC51YiByMTIscjEscjEKKysgKlswLTlhLWZdKjoJZTQgMDAgMjMgODUgCXBtYXhcLnViIHI1LHIyLHIwCisrCisrWzAtOWEtZl0qIDxwbWF4X3NoPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMjMgOWYgCXBtYXhcLnNoIHBjLHBjLHBjCisrICpbMC05YS1mXSo6CWY4IDBjIDIzIDljIAlwbWF4XC5zaCByMTIscjEyLHIxMgorKyAqWzAtOWEtZl0qOgllYSAwNSAyMyA5NSAJcG1heFwuc2ggcjUscjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMjMgOTQgCXBtYXhcLnNoIHI0LHI0LHI0CisrICpbMC05YS1mXSo6CWZjIDBlIDIzIDllIAlwbWF4XC5zaCBscixscixscgorKyAqWzAtOWEtZl0qOgllYyAwYyAyMyA5ZSAJcG1heFwuc2ggbHIscjYscjEyCisrICpbMC05YS1mXSo6CWZlIDA1IDIzIDkyIAlwbWF4XC5zaCByMixwYyxyNQorKyAqWzAtOWEtZl0qOgllNCAwNyAyMyA5ZiAJcG1heFwuc2ggcGMscjIscjcKKysKKytbMC05YS1mXSogPHBtaW5fdWI+OgorKyAqWzAtOWEtZl0qOglmZSAwZiAyMyBhZiAJcG1pblwudWIgcGMscGMscGMKKysgKlswLTlhLWZdKjoJZjggMGMgMjMgYWMgCXBtaW5cLnViIHIxMixyMTIscjEyCisrICpbMC05YS1mXSo6CWVhIDA1IDIzIGE1IAlwbWluXC51YiByNSxyNSxyNQorKyAqWzAtOWEtZl0qOgllOCAwNCAyMyBhNCAJcG1pblwudWIgcjQscjQscjQKKysgKlswLTlhLWZdKjoJZmMgMGUgMjMgYWUgCXBtaW5cLnViIGxyLGxyLGxyCisrICpbMC05YS1mXSo6CWUyIDA1IDIzIGE4IAlwbWluXC51YiByOCxyMSxyNQorKyAqWzAtOWEtZl0qOglmMCAwMyAyMyBhMSAJcG1pblwudWIgcjEscjgscjMKKysgKlswLTlhLWZdKjoJZTQgMDcgMjMgYTAgCXBtaW5cLnViIHIwLHIyLHI3CisrCisrWzAtOWEtZl0qIDxwbWluX3NoPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMjMgYmYgCXBtaW5cLnNoIHBjLHBjLHBjCisrICpbMC05YS1mXSo6CWY4IDBjIDIzIGJjIAlwbWluXC5zaCByMTIscjEyLHIxMgorKyAqWzAtOWEtZl0qOgllYSAwNSAyMyBiNSAJcG1pblwuc2ggcjUscjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMjMgYjQgCXBtaW5cLnNoIHI0LHI0LHI0CisrICpbMC05YS1mXSo6CWZjIDBlIDIzIGJlIAlwbWluXC5zaCBscixscixscgorKyAqWzAtOWEtZl0qOgllOCAwYSAyMyBiOCAJcG1pblwuc2ggcjgscjQscjEwCisrICpbMC05YS1mXSo6CWY0IDBjIDIzIGJlIAlwbWluXC5zaCBscixyMTAscjEyCisrICpbMC05YS1mXSo6CWVjIDAyIDIzIGIyIAlwbWluXC5zaCByMixyNixyMgorKworK1swLTlhLWZdKiA8cGF2Z191Yj46CisrICpbMC05YS1mXSo6CWZlIDBmIDIzIGNmIAlwYXZnXC51YiBwYyxwYyxwYworKyAqWzAtOWEtZl0qOglmOCAwYyAyMyBjYyAJcGF2Z1wudWIgcjEyLHIxMixyMTIKKysgKlswLTlhLWZdKjoJZWEgMDUgMjMgYzUgCXBhdmdcLnViIHI1LHI1LHI1CisrICpbMC05YS1mXSo6CWU4IDA0IDIzIGM0IAlwYXZnXC51YiByNCxyNCxyNAorKyAqWzAtOWEtZl0qOglmYyAwZSAyMyBjZSAJcGF2Z1wudWIgbHIsbHIsbHIKKysgKlswLTlhLWZdKjoJZTIgMDYgMjMgYzAgCXBhdmdcLnViIHIwLHIxLHI2CisrICpbMC05YS1mXSo6CWU2IDA2IDIzIGM4IAlwYXZnXC51YiByOCxyMyxyNgorKyAqWzAtOWEtZl0qOglmOCAwYSAyMyBjZiAJcGF2Z1wudWIgcGMscjEyLHIxMAorKworK1swLTlhLWZdKiA8cGF2Z19zaD46CisrICpbMC05YS1mXSo6CWZlIDBmIDIzIGRmIAlwYXZnXC5zaCBwYyxwYyxwYworKyAqWzAtOWEtZl0qOglmOCAwYyAyMyBkYyAJcGF2Z1wuc2ggcjEyLHIxMixyMTIKKysgKlswLTlhLWZdKjoJZWEgMDUgMjMgZDUgCXBhdmdcLnNoIHI1LHI1LHI1CisrICpbMC05YS1mXSo6CWU4IDA0IDIzIGQ0IAlwYXZnXC5zaCByNCxyNCxyNAorKyAqWzAtOWEtZl0qOglmYyAwZSAyMyBkZSAJcGF2Z1wuc2ggbHIsbHIsbHIKKysgKlswLTlhLWZdKjoJZmUgMGQgMjMgZDkgCXBhdmdcLnNoIHI5LHBjLHNwCisrICpbMC05YS1mXSo6CWZhIDAzIDIzIGRmIAlwYXZnXC5zaCBwYyxzcCxyMworKyAqWzAtOWEtZl0qOgllMiAwOSAyMyBkNiAJcGF2Z1wuc2ggcjYscjEscjkKKysKKytbMC05YS1mXSogPHBhYnNfc2I+OgorKyAqWzAtOWEtZl0qOgllMCAwZiAyMyBlZiAJcGFic1wuc2IgcGMscGMKKysgKlswLTlhLWZdKjoJZTAgMGMgMjMgZWMgCXBhYnNcLnNiIHIxMixyMTIKKysgKlswLTlhLWZdKjoJZTAgMDUgMjMgZTUgCXBhYnNcLnNiIHI1LHI1CisrICpbMC05YS1mXSo6CWUwIDA0IDIzIGU0IAlwYWJzXC5zYiByNCxyNAorKyAqWzAtOWEtZl0qOgllMCAwZSAyMyBlZSAJcGFic1wuc2IgbHIsbHIKKysgKlswLTlhLWZdKjoJZTAgMDYgMjMgZWIgCXBhYnNcLnNiIHIxMSxyNgorKyAqWzAtOWEtZl0qOgllMCAwOSAyMyBlZSAJcGFic1wuc2IgbHIscjkKKysgKlswLTlhLWZdKjoJZTAgMDcgMjMgZWQgCXBhYnNcLnNiIHNwLHI3CisrCisrWzAtOWEtZl0qIDxwYWJzX3NoPjoKKysgKlswLTlhLWZdKjoJZTAgMGYgMjMgZmYgCXBhYnNcLnNoIHBjLHBjCisrICpbMC05YS1mXSo6CWUwIDBjIDIzIGZjIAlwYWJzXC5zaCByMTIscjEyCisrICpbMC05YS1mXSo6CWUwIDA1IDIzIGY1IAlwYWJzXC5zaCByNSxyNQorKyAqWzAtOWEtZl0qOgllMCAwNCAyMyBmNCAJcGFic1wuc2ggcjQscjQKKysgKlswLTlhLWZdKjoJZTAgMGUgMjMgZmUgCXBhYnNcLnNoIGxyLGxyCisrICpbMC05YS1mXSo6CWUwIDAzIDIzIGZmIAlwYWJzXC5zaCBwYyxyMworKyAqWzAtOWEtZl0qOgllMCAwNyAyMyBmNSAJcGFic1wuc2ggcjUscjcKKysgKlswLTlhLWZdKjoJZTAgMDAgMjMgZjQgCXBhYnNcLnNoIHI0LHIwCisrCisrWzAtOWEtZl0qIDxwc2FkPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMjQgMGYgCXBzYWQgcGMscGMscGMKKysgKlswLTlhLWZdKjoJZjggMGMgMjQgMGMgCXBzYWQgcjEyLHIxMixyMTIKKysgKlswLTlhLWZdKjoJZWEgMDUgMjQgMDUgCXBzYWQgcjUscjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMjQgMDQgCXBzYWQgcjQscjQscjQKKysgKlswLTlhLWZdKjoJZmMgMGUgMjQgMGUgCXBzYWQgbHIsbHIsbHIKKysgKlswLTlhLWZdKjoJZjYgMGIgMjQgMDkgCXBzYWQgcjkscjExLHIxMQorKyAqWzAtOWEtZl0qOgllOCAwZCAyNCAwZSAJcHNhZCBscixyNCxzcAorKyAqWzAtOWEtZl0qOgllOCAwNSAyNCAwZSAJcHNhZCBscixyNCxyNQorKworK1swLTlhLWZdKiA8cGFzcl9iPjoKKysgKlswLTlhLWZdKjoJZmUgMDAgMjQgMWYgCXBhc3JcLmIgcGMscGMsMHgwCisrICpbMC05YS1mXSo6CWY4IDA3IDI0IDFjIAlwYXNyXC5iIHIxMixyMTIsMHg3CisrICpbMC05YS1mXSo6CWVhIDA0IDI0IDE1IAlwYXNyXC5iIHI1LHI1LDB4NAorKyAqWzAtOWEtZl0qOgllOCAwMyAyNCAxNCAJcGFzclwuYiByNCxyNCwweDMKKysgKlswLTlhLWZdKjoJZmMgMDEgMjQgMWUgCXBhc3JcLmIgbHIsbHIsMHgxCisrICpbMC05YS1mXSo6CWVlIDAxIDI0IDFmIAlwYXNyXC5iIHBjLHI3LDB4MQorKyAqWzAtOWEtZl0qOglmYyAwNiAyNCAxZCAJcGFzclwuYiBzcCxsciwweDYKKysgKlswLTlhLWZdKjoJZTYgMDIgMjQgMWQgCXBhc3JcLmIgc3AscjMsMHgyCisrCisrWzAtOWEtZl0qIDxwbHNsX2I+OgorKyAqWzAtOWEtZl0qOglmZSAwMCAyNCAyZiAJcGxzbFwuYiBwYyxwYywweDAKKysgKlswLTlhLWZdKjoJZjggMDcgMjQgMmMgCXBsc2xcLmIgcjEyLHIxMiwweDcKKysgKlswLTlhLWZdKjoJZWEgMDQgMjQgMjUgCXBsc2xcLmIgcjUscjUsMHg0CisrICpbMC05YS1mXSo6CWU4IDAzIDI0IDI0IAlwbHNsXC5iIHI0LHI0LDB4MworKyAqWzAtOWEtZl0qOglmYyAwMSAyNCAyZSAJcGxzbFwuYiBscixsciwweDEKKysgKlswLTlhLWZdKjoJZjYgMDQgMjQgMjIgCXBsc2xcLmIgcjIscjExLDB4NAorKyAqWzAtOWEtZl0qOgllYSAwNyAyNCAyOCAJcGxzbFwuYiByOCxyNSwweDcKKysgKlswLTlhLWZdKjoJZTAgMDIgMjQgMmYgCXBsc2xcLmIgcGMscjAsMHgyCisrCisrWzAtOWEtZl0qIDxwbHNyX2I+OgorKyAqWzAtOWEtZl0qOglmZSAwMCAyNCAzZiAJcGxzclwuYiBwYyxwYywweDAKKysgKlswLTlhLWZdKjoJZjggMDcgMjQgM2MgCXBsc3JcLmIgcjEyLHIxMiwweDcKKysgKlswLTlhLWZdKjoJZWEgMDQgMjQgMzUgCXBsc3JcLmIgcjUscjUsMHg0CisrICpbMC05YS1mXSo6CWU4IDAzIDI0IDM0IAlwbHNyXC5iIHI0LHI0LDB4MworKyAqWzAtOWEtZl0qOglmYyAwMSAyNCAzZSAJcGxzclwuYiBscixsciwweDEKKysgKlswLTlhLWZdKjoJZTIgMDIgMjQgM2MgCXBsc3JcLmIgcjEyLHIxLDB4MgorKyAqWzAtOWEtZl0qOglmZSAwNyAyNCAzNiAJcGxzclwuYiByNixwYywweDcKKysgKlswLTlhLWZdKjoJZjYgMDIgMjQgM2MgCXBsc3JcLmIgcjEyLHIxMSwweDIKKysKKytbMC05YS1mXSogPHBhc3JfaD46CisrICpbMC05YS1mXSo6CWZlIDAwIDI0IDRmIAlwYXNyXC5oIHBjLHBjLDB4MAorKyAqWzAtOWEtZl0qOglmOCAwZiAyNCA0YyAJcGFzclwuaCByMTIscjEyLDB4ZgorKyAqWzAtOWEtZl0qOgllYSAwOCAyNCA0NSAJcGFzclwuaCByNSxyNSwweDgKKysgKlswLTlhLWZdKjoJZTggMDcgMjQgNDQgCXBhc3JcLmggcjQscjQsMHg3CisrICpbMC05YS1mXSo6CWZjIDAxIDI0IDRlIAlwYXNyXC5oIGxyLGxyLDB4MQorKyAqWzAtOWEtZl0qOglmNiAwYSAyNCA0MCAJcGFzclwuaCByMCxyMTEsMHhhCisrICpbMC05YS1mXSo6CWVjIDA4IDI0IDQ0IAlwYXNyXC5oIHI0LHI2LDB4OAorKyAqWzAtOWEtZl0qOgllNCAwNCAyNCA0NiAJcGFzclwuaCByNixyMiwweDQKKysKKytbMC05YS1mXSogPHBsc2xfaD46CisrICpbMC05YS1mXSo6CWZlIDAwIDI0IDVmIAlwbHNsXC5oIHBjLHBjLDB4MAorKyAqWzAtOWEtZl0qOglmOCAwZiAyNCA1YyAJcGxzbFwuaCByMTIscjEyLDB4ZgorKyAqWzAtOWEtZl0qOgllYSAwOCAyNCA1NSAJcGxzbFwuaCByNSxyNSwweDgKKysgKlswLTlhLWZdKjoJZTggMDcgMjQgNTQgCXBsc2xcLmggcjQscjQsMHg3CisrICpbMC05YS1mXSo6CWZjIDAxIDI0IDVlIAlwbHNsXC5oIGxyLGxyLDB4MQorKyAqWzAtOWEtZl0qOglmNCAwOSAyNCA1NSAJcGxzbFwuaCByNSxyMTAsMHg5CisrICpbMC05YS1mXSo6CWZjIDA4IDI0IDVkIAlwbHNsXC5oIHNwLGxyLDB4OAorKyAqWzAtOWEtZl0qOglmYyAwNyAyNCA1MCAJcGxzbFwuaCByMCxsciwweDcKKysKKytbMC05YS1mXSogPHBsc3JfaD46CisrICpbMC05YS1mXSo6CWZlIDAwIDI0IDZmIAlwbHNyXC5oIHBjLHBjLDB4MAorKyAqWzAtOWEtZl0qOglmOCAwZiAyNCA2YyAJcGxzclwuaCByMTIscjEyLDB4ZgorKyAqWzAtOWEtZl0qOgllYSAwOCAyNCA2NSAJcGxzclwuaCByNSxyNSwweDgKKysgKlswLTlhLWZdKjoJZTggMDcgMjQgNjQgCXBsc3JcLmggcjQscjQsMHg3CisrICpbMC05YS1mXSo6CWZjIDAxIDI0IDZlIAlwbHNyXC5oIGxyLGxyLDB4MQorKyAqWzAtOWEtZl0qOgllMCAwZiAyNCA2YiAJcGxzclwuaCByMTEscjAsMHhmCisrICpbMC05YS1mXSo6CWU2IDAzIDI0IDZlIAlwbHNyXC5oIGxyLHIzLDB4MworKyAqWzAtOWEtZl0qOglmYyAwYSAyNCA2OCAJcGxzclwuaCByOCxsciwweGEKKysKKytbMC05YS1mXSogPHBhY2t3X3NoPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMjQgN2YgCXBhY2t3XC5zaCBwYyxwYyxwYworKyAqWzAtOWEtZl0qOglmOCAwYyAyNCA3YyAJcGFja3dcLnNoIHIxMixyMTIscjEyCisrICpbMC05YS1mXSo6CWVhIDA1IDI0IDc1IAlwYWNrd1wuc2ggcjUscjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMjQgNzQgCXBhY2t3XC5zaCByNCxyNCxyNAorKyAqWzAtOWEtZl0qOglmYyAwZSAyNCA3ZSAJcGFja3dcLnNoIGxyLGxyLGxyCisrICpbMC05YS1mXSo6CWY2IDBhIDI0IDdkIAlwYWNrd1wuc2ggc3AscjExLHIxMAorKyAqWzAtOWEtZl0qOgllNCAwYyAyNCA3OCAJcGFja3dcLnNoIHI4LHIyLHIxMgorKyAqWzAtOWEtZl0qOgllMiAwNSAyNCA3OCAJcGFja3dcLnNoIHI4LHIxLHI1CisrCisrWzAtOWEtZl0qIDxwdW5wY2t1Yl9oPjoKKysgKlswLTlhLWZdKjoJZmUgMDAgMjQgOGYgCXB1bnBja3ViXC5oIHBjLHBjOmIKKysgKlswLTlhLWZdKjoJZjggMDAgMjQgOWMgCXB1bnBja3ViXC5oIHIxMixyMTI6dAorKyAqWzAtOWEtZl0qOgllYSAwMCAyNCA5NSAJcHVucGNrdWJcLmggcjUscjU6dAorKyAqWzAtOWEtZl0qOgllOCAwMCAyNCA4NCAJcHVucGNrdWJcLmggcjQscjQ6YgorKyAqWzAtOWEtZl0qOglmYyAwMCAyNCA5ZSAJcHVucGNrdWJcLmggbHIsbHI6dAorKyAqWzAtOWEtZl0qOgllMiAwMCAyNCA5NiAJcHVucGNrdWJcLmggcjYscjE6dAorKyAqWzAtOWEtZl0qOgllYSAwMCAyNCA4ZSAJcHVucGNrdWJcLmggbHIscjU6YgorKyAqWzAtOWEtZl0qOgllNCAwMCAyNCA5ZSAJcHVucGNrdWJcLmggbHIscjI6dAorKworK1swLTlhLWZdKiA8cHVucGNrc2JfaD46CisrICpbMC05YS1mXSo6CWZlIDAwIDI0IGFmIAlwdW5wY2tzYlwuaCBwYyxwYzpiCisrICpbMC05YS1mXSo6CWY4IDAwIDI0IGJjIAlwdW5wY2tzYlwuaCByMTIscjEyOnQKKysgKlswLTlhLWZdKjoJZWEgMDAgMjQgYjUgCXB1bnBja3NiXC5oIHI1LHI1OnQKKysgKlswLTlhLWZdKjoJZTggMDAgMjQgYTQgCXB1bnBja3NiXC5oIHI0LHI0OmIKKysgKlswLTlhLWZdKjoJZmMgMDAgMjQgYmUgCXB1bnBja3NiXC5oIGxyLGxyOnQKKysgKlswLTlhLWZdKjoJZWUgMDAgMjQgYjQgCXB1bnBja3NiXC5oIHI0LHI3OnQKKysgKlswLTlhLWZdKjoJZmMgMDAgMjQgYTYgCXB1bnBja3NiXC5oIHI2LGxyOmIKKysgKlswLTlhLWZdKjoJZjggMDAgMjQgYmMgCXB1bnBja3NiXC5oIHIxMixyMTI6dAorKworK1swLTlhLWZdKiA8cGFja3NoX3ViPjoKKysgKlswLTlhLWZdKjoJZmUgMGYgMjQgY2YgCXBhY2tzaFwudWIgcGMscGMscGMKKysgKlswLTlhLWZdKjoJZjggMGMgMjQgY2MgCXBhY2tzaFwudWIgcjEyLHIxMixyMTIKKysgKlswLTlhLWZdKjoJZWEgMDUgMjQgYzUgCXBhY2tzaFwudWIgcjUscjUscjUKKysgKlswLTlhLWZdKjoJZTggMDQgMjQgYzQgCXBhY2tzaFwudWIgcjQscjQscjQKKysgKlswLTlhLWZdKjoJZmMgMGUgMjQgY2UgCXBhY2tzaFwudWIgbHIsbHIsbHIKKysgKlswLTlhLWZdKjoJZWMgMDMgMjQgYzMgCXBhY2tzaFwudWIgcjMscjYscjMKKysgKlswLTlhLWZdKjoJZTAgMDMgMjQgYzggCXBhY2tzaFwudWIgcjgscjAscjMKKysgKlswLTlhLWZdKjoJZTYgMGUgMjQgYzkgCXBhY2tzaFwudWIgcjkscjMsbHIKKysKKytbMC05YS1mXSogPHBhY2tzaF9zYj46CisrICpbMC05YS1mXSo6CWZlIDBmIDI0IGRmIAlwYWNrc2hcLnNiIHBjLHBjLHBjCisrICpbMC05YS1mXSo6CWY4IDBjIDI0IGRjIAlwYWNrc2hcLnNiIHIxMixyMTIscjEyCisrICpbMC05YS1mXSo6CWVhIDA1IDI0IGQ1IAlwYWNrc2hcLnNiIHI1LHI1LHI1CisrICpbMC05YS1mXSo6CWU4IDA0IDI0IGQ0IAlwYWNrc2hcLnNiIHI0LHI0LHI0CisrICpbMC05YS1mXSo6CWZjIDBlIDI0IGRlIAlwYWNrc2hcLnNiIGxyLGxyLGxyCisrICpbMC05YS1mXSo6CWYwIDAxIDI0IGQ2IAlwYWNrc2hcLnNiIHI2LHI4LHIxCisrICpbMC05YS1mXSo6CWYyIDA4IDI0IGRlIAlwYWNrc2hcLnNiIGxyLHI5LHI4CisrICpbMC05YS1mXSo6CWVjIDA2IDI0IGRkIAlwYWNrc2hcLnNiIHNwLHI2LHI2CisrCisrWzAtOWEtZl0qIDxhbmRsPjoKKysgKlswLTlhLWZdKjoJZTAgMWYgMDAgMDAgCWFuZGwgcGMsMHgwCisrICpbMC05YS1mXSo6CWUwIDFjIGZmIGZmIAlhbmRsIHIxMiwweGZmZmYKKysgKlswLTlhLWZdKjoJZTAgMTUgODAgMDAgCWFuZGwgcjUsMHg4MDAwCisrICpbMC05YS1mXSo6CWUwIDE0IDdmIGZmIAlhbmRsIHI0LDB4N2ZmZgorKyAqWzAtOWEtZl0qOgllMCAxZSAwMCAwMSAJYW5kbCBsciwweDEKKysgKlswLTlhLWZdKjoJZTAgMWYgNWEgNTggCWFuZGwgcGMsMHg1YTU4CisrICpbMC05YS1mXSo6CWUwIDE4IGI4IDllIAlhbmRsIHI4LDB4Yjg5ZQorKyAqWzAtOWEtZl0qOgllMCAxNyAzNSA5NyAJYW5kbCByNywweDM1OTcKKysKKytbMC05YS1mXSogPGFuZGxfY29oPjoKKysgKlswLTlhLWZdKjoJZTIgMWYgMDAgMDAgCWFuZGwgcGMsMHgwLENPSAorKyAqWzAtOWEtZl0qOgllMiAxYyBmZiBmZiAJYW5kbCByMTIsMHhmZmZmLENPSAorKyAqWzAtOWEtZl0qOgllMiAxNSA4MCAwMCAJYW5kbCByNSwweDgwMDAsQ09ICisrICpbMC05YS1mXSo6CWUyIDE0IDdmIGZmIAlhbmRsIHI0LDB4N2ZmZixDT0gKKysgKlswLTlhLWZdKjoJZTIgMWUgMDAgMDEgCWFuZGwgbHIsMHgxLENPSAorKyAqWzAtOWEtZl0qOgllMiAxNiA1OCBlMSAJYW5kbCByNiwweDU4ZTEsQ09ICisrICpbMC05YS1mXSo6CWUyIDEwIDllIGNkIAlhbmRsIHIwLDB4OWVjZCxDT0gKKysgKlswLTlhLWZdKjoJZTIgMTQgYmQgYzQgCWFuZGwgcjQsMHhiZGM0LENPSAorKworK1swLTlhLWZdKiA8YW5kaD46CisrICpbMC05YS1mXSo6CWU0IDFmIDAwIDAwIAlhbmRoIHBjLDB4MAorKyAqWzAtOWEtZl0qOgllNCAxYyBmZiBmZiAJYW5kaCByMTIsMHhmZmZmCisrICpbMC05YS1mXSo6CWU0IDE1IDgwIDAwIAlhbmRoIHI1LDB4ODAwMAorKyAqWzAtOWEtZl0qOgllNCAxNCA3ZiBmZiAJYW5kaCByNCwweDdmZmYKKysgKlswLTlhLWZdKjoJZTQgMWUgMDAgMDEgCWFuZGggbHIsMHgxCisrICpbMC05YS1mXSo6CWU0IDFjIGNjIDU4IAlhbmRoIHIxMiwweGNjNTgKKysgKlswLTlhLWZdKjoJZTQgMTMgMjEgZTMgCWFuZGggcjMsMHgyMWUzCisrICpbMC05YS1mXSo6CWU0IDEyIGE3IGViIAlhbmRoIHIyLDB4YTdlYgorKworK1swLTlhLWZdKiA8YW5kaF9jb2g+OgorKyAqWzAtOWEtZl0qOgllNiAxZiAwMCAwMCAJYW5kaCBwYywweDAsQ09ICisrICpbMC05YS1mXSo6CWU2IDFjIGZmIGZmIAlhbmRoIHIxMiwweGZmZmYsQ09ICisrICpbMC05YS1mXSo6CWU2IDE1IDgwIDAwIAlhbmRoIHI1LDB4ODAwMCxDT0gKKysgKlswLTlhLWZdKjoJZTYgMTQgN2YgZmYgCWFuZGggcjQsMHg3ZmZmLENPSAorKyAqWzAtOWEtZl0qOgllNiAxZSAwMCAwMSAJYW5kaCBsciwweDEsQ09ICisrICpbMC05YS1mXSo6CWU2IDFiIDg2IDBkIAlhbmRoIHIxMSwweDg2MGQsQ09ICisrICpbMC05YS1mXSo6CWU2IDE4IGNlIGY2IAlhbmRoIHI4LDB4Y2VmNixDT0gKKysgKlswLTlhLWZdKjoJZTYgMWEgNWMgODMgCWFuZGggcjEwLDB4NWM4MyxDT0gKKysKKytbMC05YS1mXSogPG9ybD46CisrICpbMC05YS1mXSo6CWU4IDFmIDAwIDAwIAlvcmwgcGMsMHgwCisrICpbMC05YS1mXSo6CWU4IDFjIGZmIGZmIAlvcmwgcjEyLDB4ZmZmZgorKyAqWzAtOWEtZl0qOgllOCAxNSA4MCAwMCAJb3JsIHI1LDB4ODAwMAorKyAqWzAtOWEtZl0qOgllOCAxNCA3ZiBmZiAJb3JsIHI0LDB4N2ZmZgorKyAqWzAtOWEtZl0qOgllOCAxZSAwMCAwMSAJb3JsIGxyLDB4MQorKyAqWzAtOWEtZl0qOgllOCAxZCA0MSA3ZSAJb3JsIHNwLDB4NDE3ZQorKyAqWzAtOWEtZl0qOgllOCAxMCA1MiBiZCAJb3JsIHIwLDB4NTJiZAorKyAqWzAtOWEtZl0qOgllOCAxZiBhYyA0NyAJb3JsIHBjLDB4YWM0NworKworK1swLTlhLWZdKiA8b3JoPjoKKysgKlswLTlhLWZdKjoJZWEgMWYgMDAgMDAgCW9yaCBwYywweDAKKysgKlswLTlhLWZdKjoJZWEgMWMgZmYgZmYgCW9yaCByMTIsMHhmZmZmCisrICpbMC05YS1mXSo6CWVhIDE1IDgwIDAwIAlvcmggcjUsMHg4MDAwCisrICpbMC05YS1mXSo6CWVhIDE0IDdmIGZmIAlvcmggcjQsMHg3ZmZmCisrICpbMC05YS1mXSo6CWVhIDFlIDAwIDAxIAlvcmggbHIsMHgxCisrICpbMC05YS1mXSo6CWVhIDE4IDZlIDdkIAlvcmggcjgsMHg2ZTdkCisrICpbMC05YS1mXSo6CWVhIDFjIDc3IDFjIAlvcmggcjEyLDB4NzcxYworKyAqWzAtOWEtZl0qOgllYSAxMSBlYSAxYSAJb3JoIHIxLDB4ZWExYQorKworK1swLTlhLWZdKiA8ZW9ybD46CisrICpbMC05YS1mXSo6CWVjIDFmIDAwIDAwIAllb3JsIHBjLDB4MAorKyAqWzAtOWEtZl0qOgllYyAxYyBmZiBmZiAJZW9ybCByMTIsMHhmZmZmCisrICpbMC05YS1mXSo6CWVjIDE1IDgwIDAwIAllb3JsIHI1LDB4ODAwMAorKyAqWzAtOWEtZl0qOgllYyAxNCA3ZiBmZiAJZW9ybCByNCwweDdmZmYKKysgKlswLTlhLWZdKjoJZWMgMWUgMDAgMDEgCWVvcmwgbHIsMHgxCisrICpbMC05YS1mXSo6CWVjIDE0IGM3IGI5IAllb3JsIHI0LDB4YzdiOQorKyAqWzAtOWEtZl0qOgllYyAxNiBmYiBkZCAJZW9ybCByNiwweGZiZGQKKysgKlswLTlhLWZdKjoJZWMgMTEgNTEgYjEgCWVvcmwgcjEsMHg1MWIxCisrCisrWzAtOWEtZl0qIDxlb3JoPjoKKysgKlswLTlhLWZdKjoJZWUgMWYgMDAgMDAgCWVvcmggcGMsMHgwCisrICpbMC05YS1mXSo6CWVlIDFjIGZmIGZmIAllb3JoIHIxMiwweGZmZmYKKysgKlswLTlhLWZdKjoJZWUgMTUgODAgMDAgCWVvcmggcjUsMHg4MDAwCisrICpbMC05YS1mXSo6CWVlIDE0IDdmIGZmIAllb3JoIHI0LDB4N2ZmZgorKyAqWzAtOWEtZl0qOgllZSAxZSAwMCAwMSAJZW9yaCBsciwweDEKKysgKlswLTlhLWZdKjoJZWUgMTAgMmQgZDQgCWVvcmggcjAsMHgyZGQ0CisrICpbMC05YS1mXSo6CWVlIDFhIDk0IGI1IAllb3JoIHIxMCwweDk0YjUKKysgKlswLTlhLWZdKjoJZWUgMTkgZGYgMmEgCWVvcmggcjksMHhkZjJhCisrCisrWzAtOWEtZl0qIDxtY2FsbD46CisrICpbMC05YS1mXSo6CWYwIDFmIDAwIDAwIAltY2FsbCBbMC05YS1mXSogPC4qPgorKyAqWzAtOWEtZl0qOglmMCAxYyBmZiBmZiAJbWNhbGwgcjEyXFstNFxdCisrICpbMC05YS1mXSo6CWYwIDE1IDgwIDAwIAltY2FsbCByNVxbLTEzMTA3MlxdCisrICpbMC05YS1mXSo6CWYwIDE0IDdmIGZmIAltY2FsbCByNFxbMTMxMDY4XF0KKysgKlswLTlhLWZdKjoJZjAgMWUgMDAgMDEgCW1jYWxsIGxyXFs0XF0KKysgKlswLTlhLWZdKjoJZjAgMWQgM2IgYmYgCW1jYWxsIHNwXFs2MTE4MFxdCisrICpbMC05YS1mXSo6CWYwIDE0IGRkIGQyIAltY2FsbCByNFxbLTM1MDAwXF0KKysgKlswLTlhLWZdKjoJZjAgMTAgMDkgYjEgCW1jYWxsIHIwXFs5OTI0XF0KKysKKytbMC05YS1mXSogPHByZWY+OgorKyAqWzAtOWEtZl0qOglmMiAxZiAwMCAwMCAJcHJlZiBwY1xbMFxdCisrICpbMC05YS1mXSo6CWYyIDFjIGZmIGZmIAlwcmVmIHIxMlxbLTFcXQorKyAqWzAtOWEtZl0qOglmMiAxNSA4MCAwMCAJcHJlZiByNVxbLTMyNzY4XF0KKysgKlswLTlhLWZdKjoJZjIgMTQgN2YgZmYgCXByZWYgcjRcWzMyNzY3XF0KKysgKlswLTlhLWZdKjoJZjIgMWUgMDAgMDEgCXByZWYgbHJcWzFcXQorKyAqWzAtOWEtZl0qOglmMiAxNyAxZSA0NCAJcHJlZiByN1xbNzc0OFxdCisrICpbMC05YS1mXSo6CWYyIDE3IGUxIGVkIAlwcmVmIHI3XFstNzY5OVxdCisrICpbMC05YS1mXSo6CWYyIDEyIDlhIGRjIAlwcmVmIHIyXFstMjU4OTJcXQorKworK1swLTlhLWZdKiA8Y2FjaGU+OgorKyAqWzAtOWEtZl0qOglmNCAxZiAwMCAwMCAJY2FjaGUgcGNcWzBcXSwweDAKKysgKlswLTlhLWZdKjoJZjQgMWMgZmYgZmYgCWNhY2hlIHIxMlxbLTFcXSwweDFmCisrICpbMC05YS1mXSo6CWY0IDE1IDg0IDAwIAljYWNoZSByNVxbLTEwMjRcXSwweDEwCisrICpbMC05YS1mXSo6CWY0IDE0IDdiIGZmIAljYWNoZSByNFxbMTAyM1xdLDB4ZgorKyAqWzAtOWEtZl0qOglmNCAxZSAwOCAwMSAJY2FjaGUgbHJcWzFcXSwweDEKKysgKlswLTlhLWZdKjoJZjQgMTMgOGMgM2MgCWNhY2hlIHIzXFstOTY0XF0sMHgxMQorKyAqWzAtOWEtZl0qOglmNCAxNCBiNiA4OSAJY2FjaGUgcjRcWy0zNzVcXSwweDE2CisrICpbMC05YS1mXSo6CWY0IDEzIDhjIDg4IAljYWNoZSByM1xbLTg4OFxdLDB4MTEKKysKKytbMC05YS1mXSogPHN1YjQ+OgorKyAqWzAtOWEtZl0qOgkyMCAwZiAgICAgICAJc3ViIHBjLDAKKysgKlswLTlhLWZdKjoJMmYgZmMgICAgICAgCXN1YiByMTIsLTEKKysgKlswLTlhLWZdKjoJZjAgMjUgMDAgMDAgCXN1YiByNSwtMTA0ODU3NgorKyAqWzAtOWEtZl0qOgllZSAzNCBmZiBmZiAJc3ViIHI0LDEwNDg1NzUKKysgKlswLTlhLWZdKjoJMjAgMWUgICAgICAgCXN1YiBsciwxCisrICpbMC05YS1mXSo6CWY2IDIyIDhkIDZjIAlzdWIgcjIsLTYxOTE1NgorKyAqWzAtOWEtZl0qOgllNiAzZSAwYSBjZCAJc3ViIGxyLDQ2MTUxNworKyAqWzAtOWEtZl0qOglmYyAzOCAyZCAyNSAJc3ViIHI4LC0xODUwNTEKKysKKytbMC05YS1mXSogPGNwMz46CisrICpbMC05YS1mXSo6CTU4IDBmICAgICAgIAljcC53IHBjLDAKKysgKlswLTlhLWZdKjoJNWIgZmMgICAgICAgCWNwLncgcjEyLC0xCisrICpbMC05YS1mXSo6CWYwIDQ1IDAwIDAwIAljcC53IHI1LC0xMDQ4NTc2CisrICpbMC05YS1mXSo6CWVlIDU0IGZmIGZmIAljcC53IHI0LDEwNDg1NzUKKysgKlswLTlhLWZdKjoJNTggMWUgICAgICAgCWNwLncgbHIsMQorKyAqWzAtOWEtZl0qOgllMCA1MSBlNCBhZSAJY3AudyByMSwxMjQwNzgKKysgKlswLTlhLWZdKjoJZmEgNDAgMzcgZTMgCWNwLncgcjAsLTM3ODkwOQorKyAqWzAtOWEtZl0qOglmYyA0NCA0YSAxNCAJY3AudyByNCwtMjQzMTgwCisrCisrWzAtOWEtZl0qIDxtb3YyPjoKKysgKlswLTlhLWZdKjoJMzAgMGYgICAgICAgCW1vdiBwYywwCisrICpbMC05YS1mXSo6CTNmIGZjICAgICAgIAltb3YgcjEyLC0xCisrICpbMC05YS1mXSo6CWYwIDY1IDAwIDAwIAltb3YgcjUsLTEwNDg1NzYKKysgKlswLTlhLWZdKjoJZWUgNzQgZmYgZmYgCW1vdiByNCwxMDQ4NTc1CisrICpbMC05YS1mXSo6CTMwIDFlICAgICAgIAltb3YgbHIsMQorKyAqWzAtOWEtZl0qOglmYSA3NSAyOSBhMyAJbW92IHI1LC0zMTcwMjEKKysgKlswLTlhLWZdKjoJZjQgNmQgOTEgOTQgCW1vdiBzcCwtNzQ5MTY0CisrICpbMC05YS1mXSo6CWVlIDY1IDU4IDkzIAltb3YgcjUsOTQwMTc5CisrCisrWzAtOWEtZl0qIDxicmMyPjoKKysgKlswLTlhLWZdKjoJYzAgMDAgICAgICAgCWJyZXEgWzAtOWEtZl0qIDwuKj4KKysgKlswLTlhLWZdKjoJZmUgOWYgZmYgZmYgCWJyYWwgWzAtOWEtZl0qIDwuKj4KKysgKlswLTlhLWZdKjoJZjAgODggMDAgMDAgCWJybHMgWzAtOWEtZl0qIDwuKj4KKysgKlswLTlhLWZdKjoJZWUgOTcgZmYgZmYgCWJycGwgWzAtOWEtZl0qIDwuKj4KKysgKlswLTlhLWZdKjoJYzAgMTEgICAgICAgCWJybmUgWzAtOWEtZl0qIDwuKj4KKysgKlswLTlhLWZdKjoJZjIgOGIgNGEgNGQgCWJyaGkgWzAtOWEtZl0qIDwuKj4KKysgKlswLTlhLWZdKjoJZWEgOGUgMTQgY2MgCWJycXMgWzAtOWEtZl0qIDwuKj4KKysgKlswLTlhLWZdKjoJZmEgOTggOTggMzMgCWJybHMgWzAtOWEtZl0qIDwuKj4KKysKKytbMC05YS1mXSogPHJjYWxsMj46CisrICpbMC05YS1mXSo6CWMwIDBjICAgICAgIAlyY2FsbCBbMC05YS1mXSogPC4qPgorKyAqWzAtOWEtZl0qOgljZiBmZiAgICAgICAJcmNhbGwgWzAtOWEtZl0qIDwuKj4KKysgKlswLTlhLWZdKjoJZjAgYTAgMDAgMDAgCXJjYWxsIFswLTlhLWZdKiA8Lio+CisrICpbMC05YS1mXSo6CWVlIGIwIGZmIGZmIAlyY2FsbCBbMC05YS1mXSogPC4qPgorKyAqWzAtOWEtZl0qOgljMCAxYyAgICAgICAJcmNhbGwgWzAtOWEtZl0qIDwuKj4KKysgKlswLTlhLWZdKjoJZTIgYjAgY2EgNWEgCXJjYWxsIFswLTlhLWZdKiA8Lio+CisrICpbMC05YS1mXSo6CWU4IGEwIDQ3IDUyIAlyY2FsbCBbMC05YS1mXSogPC4qPgorKyAqWzAtOWEtZl0qOglmZSBiMCBmZCBlZiAJcmNhbGwgWzAtOWEtZl0qIDwuKj4KKysKKytbMC05YS1mXSogPHN1YjU+OgorKyAqWzAtOWEtZl0qOglmZSBjZiAwMCAwMCAJc3ViIHBjLHBjLDAKKysgKlswLTlhLWZdKjoJZjggY2MgZmYgZmYgCXN1YiByMTIscjEyLC0xCisrICpbMC05YS1mXSo6CWVhIGM1IDgwIDAwIAlzdWIgcjUscjUsLTMyNzY4CisrICpbMC05YS1mXSo6CWU4IGM0IDdmIGZmIAlzdWIgcjQscjQsMzI3NjcKKysgKlswLTlhLWZdKjoJZmMgY2UgMDAgMDEgCXN1YiBscixsciwxCisrICpbMC05YS1mXSo6CWZlIGNmIGNlIDM4IAlzdWIgcGMscGMsLTEyNzQ0CisrICpbMC05YS1mXSo6CWVlIGM3IDk1IDFiIAlzdWIgcjcscjcsLTI3MzY1CisrICpbMC05YS1mXSo6CWYyIGMyIGJjIDMyIAlzdWIgcjIscjksLTE3MzU4CisrCisrWzAtOWEtZl0qIDxzYXRzdWJfdzI+OgorKyAqWzAtOWEtZl0qOglmZSBkZiAwMCAwMCAJc2F0c3ViXC53IHBjLHBjLDAKKysgKlswLTlhLWZdKjoJZjggZGMgZmYgZmYgCXNhdHN1YlwudyByMTIscjEyLC0xCisrICpbMC05YS1mXSo6CWVhIGQ1IDgwIDAwIAlzYXRzdWJcLncgcjUscjUsLTMyNzY4CisrICpbMC05YS1mXSo6CWU4IGQ0IDdmIGZmIAlzYXRzdWJcLncgcjQscjQsMzI3NjcKKysgKlswLTlhLWZdKjoJZmMgZGUgMDAgMDEgCXNhdHN1YlwudyBscixsciwxCisrICpbMC05YS1mXSo6CWZjIGQyIGY4IDI5IAlzYXRzdWJcLncgcjIsbHIsLTIwMDcKKysgKlswLTlhLWZdKjoJZjggZDcgZmMgZjAgCXNhdHN1YlwudyByNyxyMTIsLTc4NAorKyAqWzAtOWEtZl0qOgllZSBkNCA1YSA4YyAJc2F0c3ViXC53IHI0LHI3LDIzMTgwCisrCisrWzAtOWEtZl0qIDxsZF9kND46CisrICpbMC05YS1mXSo6CWZlIGUwIDAwIDAwIAlsZFwuZCByMCxwY1xbMFxdCisrICpbMC05YS1mXSo6CWY4IGVlIGZmIGZmIAlsZFwuZCBscixyMTJcWy0xXF0KKysgKlswLTlhLWZdKjoJZWEgZTggODAgMDAgCWxkXC5kIHI4LHI1XFstMzI3NjhcXQorKyAqWzAtOWEtZl0qOgllOCBlNiA3ZiBmZiAJbGRcLmQgcjYscjRcWzMyNzY3XF0KKysgKlswLTlhLWZdKjoJZmMgZTIgMDAgMDEgCWxkXC5kIHIyLGxyXFsxXF0KKysgKlswLTlhLWZdKjoJZjYgZWUgMzkgYzAgCWxkXC5kIGxyLHIxMVxbMTQ3ODRcXQorKyAqWzAtOWEtZl0qOglmMiBlNiBiNiAyNyAJbGRcLmQgcjYscjlcWy0xODkwNVxdCisrICpbMC05YS1mXSo6CWU2IGUyIGU3IDJkIAlsZFwuZCByMixyM1xbLTYzNTVcXQorKworK1swLTlhLWZdKiA8bGRfdzQ+OgorKyAqWzAtOWEtZl0qOgk3ZSAwZiAgICAgICAJbGRcLncgcGMscGNcWzB4MFxdCisrICpbMC05YS1mXSo6CWY4IGZjIGZmIGZmIAlsZFwudyByMTIscjEyXFstMVxdCisrICpbMC05YS1mXSo6CWVhIGY1IDgwIDAwIAlsZFwudyByNSxyNVxbLTMyNzY4XF0KKysgKlswLTlhLWZdKjoJZTggZjQgN2YgZmYgCWxkXC53IHI0LHI0XFszMjc2N1xdCisrICpbMC05YS1mXSo6CWZjIGZlIDAwIDAxIAlsZFwudyBscixsclxbMVxdCisrICpbMC05YS1mXSo6CWY4IGYwIGE5IDhiIAlsZFwudyByMCxyMTJcWy0yMjEzM1xdCisrICpbMC05YS1mXSo6CWZlIGZkIGFmIGQ3IAlsZFwudyBzcCxwY1xbLTIwNTIxXF0KKysgKlswLTlhLWZdKjoJZDcgMDMgICAgICAgCW5vcAorKworK1swLTlhLWZdKiA8bGRfc2g0PjoKKysgKlswLTlhLWZdKjoJOWUgMGYgICAgICAgCWxkXC5zaCBwYyxwY1xbMHgwXF0KKysgKlswLTlhLWZdKjoJZjkgMGMgZmYgZmYgCWxkXC5zaCByMTIscjEyXFstMVxdCisrICpbMC05YS1mXSo6CWViIDA1IDgwIDAwIAlsZFwuc2ggcjUscjVcWy0zMjc2OFxdCisrICpbMC05YS1mXSo6CWU5IDA0IDdmIGZmIAlsZFwuc2ggcjQscjRcWzMyNzY3XF0KKysgKlswLTlhLWZdKjoJZmQgMGUgMDAgMDEgCWxkXC5zaCBscixsclxbMVxdCisrICpbMC05YS1mXSo6CWY1IDA2IDc4IGQyIAlsZFwuc2ggcjYscjEwXFszMDkzMFxdCisrICpbMC05YS1mXSo6CWY1IDA2IDU1IGQ1IAlsZFwuc2ggcjYscjEwXFsyMTk3M1xdCisrICpbMC05YS1mXSo6CWQ3IDAzICAgICAgIAlub3AKKysKKytbMC05YS1mXSogPGxkX3VoND46CisrICpbMC05YS1mXSo6CTllIDhmICAgICAgIAlsZFwudWggcGMscGNcWzB4MFxdCisrICpbMC05YS1mXSo6CWY5IDFjIGZmIGZmIAlsZFwudWggcjEyLHIxMlxbLTFcXQorKyAqWzAtOWEtZl0qOgllYiAxNSA4MCAwMCAJbGRcLnVoIHI1LHI1XFstMzI3NjhcXQorKyAqWzAtOWEtZl0qOgllOSAxNCA3ZiBmZiAJbGRcLnVoIHI0LHI0XFszMjc2N1xdCisrICpbMC05YS1mXSo6CWZkIDFlIDAwIDAxIAlsZFwudWggbHIsbHJcWzFcXQorKyAqWzAtOWEtZl0qOglmMyAxMSBjYiBkNiAJbGRcLnVoIHIxLHI5XFstMTMzNTRcXQorKyAqWzAtOWEtZl0qOglmNyAxZSA1MyA1OSAJbGRcLnVoIGxyLHIxMVxbMjEzMzdcXQorKyAqWzAtOWEtZl0qOglkNyAwMyAgICAgICAJbm9wCisrCisrWzAtOWEtZl0qIDxsZF9zYjE+OgorKyAqWzAtOWEtZl0qOglmZiAyZiAwMCAwMCAJbGRcLnNiIHBjLHBjXFswXF0KKysgKlswLTlhLWZdKjoJZjkgMmMgZmYgZmYgCWxkXC5zYiByMTIscjEyXFstMVxdCisrICpbMC05YS1mXSo6CWViIDI1IDgwIDAwIAlsZFwuc2IgcjUscjVcWy0zMjc2OFxdCisrICpbMC05YS1mXSo6CWU5IDI0IDdmIGZmIAlsZFwuc2IgcjQscjRcWzMyNzY3XF0KKysgKlswLTlhLWZdKjoJZmQgMmUgMDAgMDEgCWxkXC5zYiBscixsclxbMVxdCisrICpbMC05YS1mXSo6CWZiIDI3IDkwIDA5IAlsZFwuc2Igcjcsc3BcWy0yODY2M1xdCisrICpbMC05YS1mXSo6CWUzIDIyIGU5IDA5IAlsZFwuc2IgcjIscjFcWy01ODc5XF0KKysgKlswLTlhLWZdKjoJZTcgMmMgNDkgMmUgCWxkXC5zYiByMTIscjNcWzE4NzM0XF0KKysKKytbMC05YS1mXSogPGxkX3ViND46CisrICpbMC05YS1mXSo6CTFmIDhmICAgICAgIAlsZFwudWIgcGMscGNcWzB4MFxdCisrICpbMC05YS1mXSo6CWY5IDNjIGZmIGZmIAlsZFwudWIgcjEyLHIxMlxbLTFcXQorKyAqWzAtOWEtZl0qOgllYiAzNSA4MCAwMCAJbGRcLnViIHI1LHI1XFstMzI3NjhcXQorKyAqWzAtOWEtZl0qOgllOSAzNCA3ZiBmZiAJbGRcLnViIHI0LHI0XFszMjc2N1xdCisrICpbMC05YS1mXSo6CTFkIDllICAgICAgIAlsZFwudWIgbHIsbHJcWzB4MVxdCisrICpbMC05YS1mXSo6CWU5IDNmIDIwIDU1IAlsZFwudWIgcGMscjRcWzgyNzdcXQorKyAqWzAtOWEtZl0qOglmOSAzNSA0YSBlNCAJbGRcLnViIHI1LHIxMlxbMTkxNzJcXQorKyAqWzAtOWEtZl0qOglmZCAzYSA2NiBlYiAJbGRcLnViIHIxMCxsclxbMjYzNDdcXQorKworK1swLTlhLWZdKiA8c3RfZDQ+OgorKyAqWzAtOWEtZl0qOglmZSBlMSAwMCAwMCAJc3RcLmQgcGNcWzBcXSxyMAorKyAqWzAtOWEtZl0qOglmOCBlZiBmZiBmZiAJc3RcLmQgcjEyXFstMVxdLGxyCisrICpbMC05YS1mXSo6CWVhIGU5IDgwIDAwIAlzdFwuZCByNVxbLTMyNzY4XF0scjgKKysgKlswLTlhLWZdKjoJZTggZTcgN2YgZmYgCXN0XC5kIHI0XFszMjc2N1xdLHI2CisrICpbMC05YS1mXSo6CWZjIGUzIDAwIDAxIAlzdFwuZCBsclxbMVxdLHIyCisrICpbMC05YS1mXSo6CWVhIGViIDMzIDkwIAlzdFwuZCByNVxbMTMyMDBcXSxyMTAKKysgKlswLTlhLWZdKjoJZWEgZWIgMjQgODggCXN0XC5kIHI1XFs5MzUyXF0scjEwCisrICpbMC05YS1mXSo6CWVhIGU1IDdlIDc1IAlzdFwuZCByNVxbMzIzNzNcXSxyNAorKworK1swLTlhLWZdKiA8c3RfdzQ+OgorKyAqWzAtOWEtZl0qOgk5ZiAwZiAgICAgICAJc3RcLncgcGNcWzB4MFxdLHBjCisrICpbMC05YS1mXSo6CWY5IDRjIGZmIGZmIAlzdFwudyByMTJcWy0xXF0scjEyCisrICpbMC05YS1mXSo6CWViIDQ1IDgwIDAwIAlzdFwudyByNVxbLTMyNzY4XF0scjUKKysgKlswLTlhLWZdKjoJZTkgNDQgN2YgZmYgCXN0XC53IHI0XFszMjc2N1xdLHI0CisrICpbMC05YS1mXSo6CWZkIDRlIDAwIDAxIAlzdFwudyBsclxbMVxdLGxyCisrICpbMC05YS1mXSo6CWZiIDQ3IDE3IGY4IAlzdFwudyBzcFxbNjEzNlxdLHI3CisrICpbMC05YS1mXSo6CWVkIDRjIDY5IGNmIAlzdFwudyByNlxbMjcwODdcXSxyMTIKKysgKlswLTlhLWZdKjoJZDcgMDMgICAgICAgCW5vcAorKworK1swLTlhLWZdKiA8c3RfaDQ+OgorKyAqWzAtOWEtZl0qOgliZSAwZiAgICAgICAJc3RcLmggcGNcWzB4MFxdLHBjCisrICpbMC05YS1mXSo6CWY5IDVjIGZmIGZmIAlzdFwuaCByMTJcWy0xXF0scjEyCisrICpbMC05YS1mXSo6CWViIDU1IDgwIDAwIAlzdFwuaCByNVxbLTMyNzY4XF0scjUKKysgKlswLTlhLWZdKjoJZTkgNTQgN2YgZmYgCXN0XC5oIHI0XFszMjc2N1xdLHI0CisrICpbMC05YS1mXSo6CWZkIDVlIDAwIDAxIAlzdFwuaCBsclxbMVxdLGxyCisrICpbMC05YS1mXSo6CWU5IDU3IGQ5IDE2IAlzdFwuaCByNFxbLTk5NjJcXSxyNworKyAqWzAtOWEtZl0qOglmMyA1MyBjMCA4NiAJc3RcLmggcjlcWy0xNjI1MFxdLHIzCisrICpbMC05YS1mXSo6CWQ3IDAzICAgICAgIAlub3AKKysKKytbMC05YS1mXSogPHN0X2I0PjoKKysgKlswLTlhLWZdKjoJYmUgOGYgICAgICAgCXN0XC5iIHBjXFsweDBcXSxwYworKyAqWzAtOWEtZl0qOglmOSA2YyBmZiBmZiAJc3RcLmIgcjEyXFstMVxdLHIxMgorKyAqWzAtOWEtZl0qOgllYiA2NSA4MCAwMCAJc3RcLmIgcjVcWy0zMjc2OFxdLHI1CisrICpbMC05YS1mXSo6CWU5IDY0IDdmIGZmIAlzdFwuYiByNFxbMzI3NjdcXSxyNAorKyAqWzAtOWEtZl0qOgliYyA5ZSAgICAgICAJc3RcLmIgbHJcWzB4MVxdLGxyCisrICpbMC05YS1mXSo6CWY5IDY2IDc1IDk2IAlzdFwuYiByMTJcWzMwMTAyXF0scjYKKysgKlswLTlhLWZdKjoJZWIgNjEgNzEgMzEgCXN0XC5iIHI1XFsyODk3N1xdLHIxCisrICpbMC05YS1mXSo6CWUxIDYxIDE1IDVlIAlzdFwuYiByMFxbNTQ3MFxdLHIxCisrCisrWzAtOWEtZl0qIDxtZnNyPjoKKysgKlswLTlhLWZdKjoJZTEgYmYgMDAgMDAgCW1mc3IgcGMsMHgwCisrICpbMC05YS1mXSo6CWUxIGJjIDAwIGZmIAltZnNyIHIxMiwweDNmYworKyAqWzAtOWEtZl0qOgllMSBiNSAwMCA4MCAJbWZzciByNSwweDIwMAorKyAqWzAtOWEtZl0qOgllMSBiNCAwMCA3ZiAJbWZzciByNCwweDFmYworKyAqWzAtOWEtZl0qOgllMSBiZSAwMCAwMSAJbWZzciBsciwweDQKKysgKlswLTlhLWZdKjoJZTEgYjIgMDAgYWUgCW1mc3IgcjIsMHgyYjgKKysgKlswLTlhLWZdKjoJZTEgYjQgMDAgNDEgCW1mc3IgcjQsMHgxMDQKKysgKlswLTlhLWZdKjoJZTEgYmEgMDAgZmUgCW1mc3IgcjEwLDB4M2Y4CisrCisrWzAtOWEtZl0qIDxtdHNyPjoKKysgKlswLTlhLWZdKjoJZTMgYmYgMDAgMDAgCW10c3IgMHgwLHBjCisrICpbMC05YS1mXSo6CWUzIGJjIDAwIGZmIAltdHNyIDB4M2ZjLHIxMgorKyAqWzAtOWEtZl0qOgllMyBiNSAwMCA4MCAJbXRzciAweDIwMCxyNQorKyAqWzAtOWEtZl0qOgllMyBiNCAwMCA3ZiAJbXRzciAweDFmYyxyNAorKyAqWzAtOWEtZl0qOgllMyBiZSAwMCAwMSAJbXRzciAweDQsbHIKKysgKlswLTlhLWZdKjoJZTMgYmEgMDAgMzggCW10c3IgMHhlMCxyMTAKKysgKlswLTlhLWZdKjoJZTMgYmMgMDAgZDEgCW10c3IgMHgzNDQscjEyCisrICpbMC05YS1mXSo6CWUzIGI5IDAwIDRjIAltdHNyIDB4MTMwLHI5CisrCisrWzAtOWEtZl0qIDxtZmRyPjoKKysgKlswLTlhLWZdKjoJZTUgYmYgMDAgMDAgCW1mZHIgcGMsMHgwCisrICpbMC05YS1mXSo6CWU1IGJjIDAwIGZmIAltZmRyIHIxMiwweDNmYworKyAqWzAtOWEtZl0qOgllNSBiNSAwMCA4MCAJbWZkciByNSwweDIwMAorKyAqWzAtOWEtZl0qOgllNSBiNCAwMCA3ZiAJbWZkciByNCwweDFmYworKyAqWzAtOWEtZl0qOgllNSBiZSAwMCAwMSAJbWZkciBsciwweDQKKysgKlswLTlhLWZdKjoJZTUgYjYgMDAgZTkgCW1mZHIgcjYsMHgzYTQKKysgKlswLTlhLWZdKjoJZTUgYjUgMDAgMDkgCW1mZHIgcjUsMHgyNAorKyAqWzAtOWEtZl0qOgllNSBiOSAwMCA0YiAJbWZkciByOSwweDEyYworKworK1swLTlhLWZdKiA8bXRkcj46CisrICpbMC05YS1mXSo6CWU3IGJmIDAwIDAwIAltdGRyIDB4MCxwYworKyAqWzAtOWEtZl0qOgllNyBiYyAwMCBmZiAJbXRkciAweDNmYyxyMTIKKysgKlswLTlhLWZdKjoJZTcgYjUgMDAgODAgCW10ZHIgMHgyMDAscjUKKysgKlswLTlhLWZdKjoJZTcgYjQgMDAgN2YgCW10ZHIgMHgxZmMscjQKKysgKlswLTlhLWZdKjoJZTcgYmUgMDAgMDEgCW10ZHIgMHg0LGxyCisrICpbMC05YS1mXSo6CWU3IGI4IDAwIDJkIAltdGRyIDB4YjQscjgKKysgKlswLTlhLWZdKjoJZTcgYmEgMDAgYjQgCW10ZHIgMHgyZDAscjEwCisrICpbMC05YS1mXSo6CWU3IGJlIDAwIDY2IAltdGRyIDB4MTk4LGxyCisrCisrWzAtOWEtZl0qIDxzbGVlcD46CisrICpbMC05YS1mXSo6CWU5IGIwIDAwIDAwIAlzbGVlcCAweDAKKysgKlswLTlhLWZdKjoJZTkgYjAgMDAgZmYgCXNsZWVwIDB4ZmYKKysgKlswLTlhLWZdKjoJZTkgYjAgMDAgODAgCXNsZWVwIDB4ODAKKysgKlswLTlhLWZdKjoJZTkgYjAgMDAgN2YgCXNsZWVwIDB4N2YKKysgKlswLTlhLWZdKjoJZTkgYjAgMDAgMDEgCXNsZWVwIDB4MQorKyAqWzAtOWEtZl0qOgllOSBiMCAwMCBmZSAJc2xlZXAgMHhmZQorKyAqWzAtOWEtZl0qOgllOSBiMCAwMCAwZiAJc2xlZXAgMHhmCisrICpbMC05YS1mXSo6CWU5IGIwIDAwIDJiIAlzbGVlcCAweDJiCisrCisrWzAtOWEtZl0qIDxzeW5jPjoKKysgKlswLTlhLWZdKjoJZWIgYjAgMDAgMDAgCXN5bmMgMHgwCisrICpbMC05YS1mXSo6CWViIGIwIDAwIGZmIAlzeW5jIDB4ZmYKKysgKlswLTlhLWZdKjoJZWIgYjAgMDAgODAgCXN5bmMgMHg4MAorKyAqWzAtOWEtZl0qOgllYiBiMCAwMCA3ZiAJc3luYyAweDdmCisrICpbMC05YS1mXSo6CWViIGIwIDAwIDAxIAlzeW5jIDB4MQorKyAqWzAtOWEtZl0qOgllYiBiMCAwMCBhNiAJc3luYyAweGE2CisrICpbMC05YS1mXSo6CWViIGIwIDAwIGU2IAlzeW5jIDB4ZTYKKysgKlswLTlhLWZdKjoJZWIgYjAgMDAgYjQgCXN5bmMgMHhiNAorKworK1swLTlhLWZdKiA8YmxkPjoKKysgKlswLTlhLWZdKjoJZWQgYmYgMDAgMDAgCWJsZCBwYywweDAKKysgKlswLTlhLWZdKjoJZWQgYmMgMDAgMWYgCWJsZCByMTIsMHgxZgorKyAqWzAtOWEtZl0qOgllZCBiNSAwMCAxMCAJYmxkIHI1LDB4MTAKKysgKlswLTlhLWZdKjoJZWQgYjQgMDAgMGYgCWJsZCByNCwweGYKKysgKlswLTlhLWZdKjoJZWQgYmUgMDAgMDEgCWJsZCBsciwweDEKKysgKlswLTlhLWZdKjoJZWQgYjkgMDAgMGYgCWJsZCByOSwweGYKKysgKlswLTlhLWZdKjoJZWQgYjAgMDAgMDQgCWJsZCByMCwweDQKKysgKlswLTlhLWZdKjoJZWQgYmUgMDAgMWEgCWJsZCBsciwweDFhCisrCisrWzAtOWEtZl0qIDxic3Q+OgorKyAqWzAtOWEtZl0qOgllZiBiZiAwMCAwMCAJYnN0IHBjLDB4MAorKyAqWzAtOWEtZl0qOgllZiBiYyAwMCAxZiAJYnN0IHIxMiwweDFmCisrICpbMC05YS1mXSo6CWVmIGI1IDAwIDEwIAlic3QgcjUsMHgxMAorKyAqWzAtOWEtZl0qOgllZiBiNCAwMCAwZiAJYnN0IHI0LDB4ZgorKyAqWzAtOWEtZl0qOgllZiBiZSAwMCAwMSAJYnN0IGxyLDB4MQorKyAqWzAtOWEtZl0qOgllZiBiYSAwMCAxYyAJYnN0IHIxMCwweDFjCisrICpbMC05YS1mXSo6CWVmIGIwIDAwIDAzIAlic3QgcjAsMHgzCisrICpbMC05YS1mXSo6CWVmIGJkIDAwIDAyIAlic3Qgc3AsMHgyCisrCisrWzAtOWEtZl0qIDxzYXRzPjoKKysgKlswLTlhLWZdKjoJZjEgYmYgMDAgMDAgCXNhdHMgcGMsMHgwCisrICpbMC05YS1mXSo6CWYxIGJjIDAzIGZmIAlzYXRzIHIxMj4+MHgxZiwweDFmCisrICpbMC05YS1mXSo6CWYxIGI1IDAyIDEwIAlzYXRzIHI1Pj4weDEwLDB4MTAKKysgKlswLTlhLWZdKjoJZjEgYjQgMDEgZWYgCXNhdHMgcjQ+PjB4ZiwweGYKKysgKlswLTlhLWZdKjoJZjEgYmUgMDAgMjEgCXNhdHMgbHI+PjB4MSwweDEKKysgKlswLTlhLWZdKjoJZjEgYmEgMDIgNjMgCXNhdHMgcjEwPj4weDMsMHgxMworKyAqWzAtOWEtZl0qOglmMSBiYSAwMyA0MiAJc2F0cyByMTA+PjB4MiwweDFhCisrICpbMC05YS1mXSo6CWYxIGIxIDAwIDM0IAlzYXRzIHIxPj4weDE0LDB4MQorKworK1swLTlhLWZdKiA8c2F0dT46CisrICpbMC05YS1mXSo6CWYxIGJmIDA0IDAwIAlzYXR1IHBjLDB4MAorKyAqWzAtOWEtZl0qOglmMSBiYyAwNyBmZiAJc2F0dSByMTI+PjB4MWYsMHgxZgorKyAqWzAtOWEtZl0qOglmMSBiNSAwNiAxMCAJc2F0dSByNT4+MHgxMCwweDEwCisrICpbMC05YS1mXSo6CWYxIGI0IDA1IGVmIAlzYXR1IHI0Pj4weGYsMHhmCisrICpbMC05YS1mXSo6CWYxIGJlIDA0IDIxIAlzYXR1IGxyPj4weDEsMHgxCisrICpbMC05YS1mXSo6CWYxIGJmIDA0IGU1IAlzYXR1IHBjPj4weDUsMHg3CisrICpbMC05YS1mXSo6CWYxIGI3IDA0IGE1IAlzYXR1IHI3Pj4weDUsMHg1CisrICpbMC05YS1mXSo6CWYxIGIyIDA2IDdhIAlzYXR1IHIyPj4weDFhLDB4MTMKKysKKytbMC05YS1mXSogPHNhdHJuZHM+OgorKyAqWzAtOWEtZl0qOglmMyBiZiAwMCAwMCAJc2F0cm5kcyBwYywweDAKKysgKlswLTlhLWZdKjoJZjMgYmMgMDMgZmYgCXNhdHJuZHMgcjEyPj4weDFmLDB4MWYKKysgKlswLTlhLWZdKjoJZjMgYjUgMDIgMTAgCXNhdHJuZHMgcjU+PjB4MTAsMHgxMAorKyAqWzAtOWEtZl0qOglmMyBiNCAwMSBlZiAJc2F0cm5kcyByND4+MHhmLDB4ZgorKyAqWzAtOWEtZl0qOglmMyBiZSAwMCAyMSAJc2F0cm5kcyBscj4+MHgxLDB4MQorKyAqWzAtOWEtZl0qOglmMyBiMCAwMiA3NSAJc2F0cm5kcyByMD4+MHgxNSwweDEzCisrICpbMC05YS1mXSo6CWYzIGJkIDAwIDQwIAlzYXRybmRzIHNwLDB4MgorKyAqWzAtOWEtZl0qOglmMyBiNyAwMyBhNiAJc2F0cm5kcyByNz4+MHg2LDB4MWQKKysKKytbMC05YS1mXSogPHNhdHJuZHU+OgorKyAqWzAtOWEtZl0qOglmMyBiZiAwNCAwMCAJc2F0cm5kdSBwYywweDAKKysgKlswLTlhLWZdKjoJZjMgYmMgMDcgZmYgCXNhdHJuZHUgcjEyPj4weDFmLDB4MWYKKysgKlswLTlhLWZdKjoJZjMgYjUgMDYgMTAgCXNhdHJuZHUgcjU+PjB4MTAsMHgxMAorKyAqWzAtOWEtZl0qOglmMyBiNCAwNSBlZiAJc2F0cm5kdSByND4+MHhmLDB4ZgorKyAqWzAtOWEtZl0qOglmMyBiZSAwNCAyMSAJc2F0cm5kdSBscj4+MHgxLDB4MQorKyAqWzAtOWEtZl0qOglmMyBiYyAwNyA0MCAJc2F0cm5kdSByMTIsMHgxYQorKyAqWzAtOWEtZl0qOglmMyBiNCAwNCA3NSAJc2F0cm5kdSByND4+MHgxNSwweDMKKysgKlswLTlhLWZdKjoJZjMgYmEgMDYgMDMgCXNhdHJuZHUgcjEwPj4weDMsMHgxMAorKworK1swLTlhLWZdKiA8c3ViZmM+OgorKyAqWzAtOWEtZl0qOglmNSBiZiAwMCAwMCAJc3ViZmVxIHBjLDAKKysgKlswLTlhLWZdKjoJZjUgYmMgMGYgZmYgCXN1YmZhbCByMTIsLTEKKysgKlswLTlhLWZdKjoJZjUgYjUgMDggODAgCXN1YmZscyByNSwtMTI4CisrICpbMC05YS1mXSo6CWY1IGI0IDA3IDdmIAlzdWJmcGwgcjQsMTI3CisrICpbMC05YS1mXSo6CWY1IGJlIDAxIDAxIAlzdWJmbmUgbHIsMQorKyAqWzAtOWEtZl0qOglmNSBiYSAwOCAwOCAJc3ViZmxzIHIxMCw4CisrICpbMC05YS1mXSo6CWY1IGJiIDBkIDYzIAlzdWJmdmMgcjExLDk5CisrICpbMC05YS1mXSo6CWY1IGIyIDBjIDQ5IAlzdWJmdnMgcjIsNzMKKysKKytbMC05YS1mXSogPHN1YmM+OgorKyAqWzAtOWEtZl0qOglmNyBiZiAwMCAwMCAJc3ViZXEgcGMsMAorKyAqWzAtOWEtZl0qOglmNyBiYyAwZiBmZiAJc3ViYWwgcjEyLC0xCisrICpbMC05YS1mXSo6CWY3IGI1IDA4IDgwIAlzdWJscyByNSwtMTI4CisrICpbMC05YS1mXSo6CWY3IGI0IDA3IDdmIAlzdWJwbCByNCwxMjcKKysgKlswLTlhLWZdKjoJZjcgYmUgMDEgMDEgCXN1Ym5lIGxyLDEKKysgKlswLTlhLWZdKjoJZjcgYmMgMDggNzYgCXN1YmxzIHIxMiwxMTgKKysgKlswLTlhLWZdKjoJZjcgYmUgMGQgZjQgCXN1YnZjIGxyLC0xMgorKyAqWzAtOWEtZl0qOglmNyBiNCAwNiBmMyAJc3VibWkgcjQsLTEzCisrCisrWzAtOWEtZl0qIDxtb3ZjMj46CisrICpbMC05YS1mXSo6CWY5IGJmIDAwIDAwIAltb3ZlcSBwYywwCisrICpbMC05YS1mXSo6CWY5IGJjIDBmIGZmIAltb3ZhbCByMTIsLTEKKysgKlswLTlhLWZdKjoJZjkgYjUgMDggODAgCW1vdmxzIHI1LC0xMjgKKysgKlswLTlhLWZdKjoJZjkgYjQgMDcgN2YgCW1vdnBsIHI0LDEyNworKyAqWzAtOWEtZl0qOglmOSBiZSAwMSAwMSAJbW92bmUgbHIsMQorKyAqWzAtOWEtZl0qOglmOSBiMyAwNSA4NiAJbW92bHQgcjMsLTEyMgorKyAqWzAtOWEtZl0qOglmOSBiOCAwZCAwMiAJbW92dmMgcjgsMgorKyAqWzAtOWEtZl0qOglmOSBiNyAwMSA5MSAJbW92bmUgcjcsLTExMQorKworK1swLTlhLWZdKiA8Y3BfYj46CisrICpbMC05YS1mXSo6CWUwIDBmIDE4IDAwIAljcFwuYiBwYyxyMAorKyAqWzAtOWEtZl0qOglmZSAwMCAxOCAwMCAJY3BcLmIgcjAscGMKKysgKlswLTlhLWZdKjoJZjAgMDcgMTggMDAgCWNwXC5iIHI3LHI4CisrICpbMC05YS1mXSo6CWVlIDA4IDE4IDAwIAljcFwuYiByOCxyNworKworK1swLTlhLWZdKiA8Y3BfaD46CisrICpbMC05YS1mXSo6CWUwIDBmIDE5IDAwIAljcFwuaCBwYyxyMAorKyAqWzAtOWEtZl0qOglmZSAwMCAxOSAwMCAJY3BcLmggcjAscGMKKysgKlswLTlhLWZdKjoJZjAgMDcgMTkgMDAgCWNwXC5oIHI3LHI4CisrICpbMC05YS1mXSo6CWVlIDA4IDE5IDAwIAljcFwuaCByOCxyNworKworK1swLTlhLWZdKiA8bGRtPjoKKysgKlswLTlhLWZdKjoJZTEgY2YgMDAgN2UgCWxkbSBwYyxyMS1yNgorKyAqWzAtOWEtZl0qOgllMSBjYyBmZiBmZiAJbGRtIHIxMixyMC1wYworKyAqWzAtOWEtZl0qOgllMSBjNSA4MCAwMCAJbGRtIHI1LHBjCisrICpbMC05YS1mXSo6CWUxIGM0IDdmIGZmIAlsZG0gcjQscjAtbHIKKysgKlswLTlhLWZdKjoJZTEgY2UgMDAgMDEgCWxkbSBscixyMAorKyAqWzAtOWEtZl0qOgllMSBjOSA0MCAyMiAJbGRtIHI5LHIxLHI1LGxyCisrICpbMC05YS1mXSo6CWUxIGNiIDgxIGVjIAlsZG0gcjExLHIyLXIzLHI1LXI4LHBjCisrICpbMC05YS1mXSo6CWUxIGM2IGEyIDA5IAlsZG0gcjYscjAscjMscjksc3AscGMKKysKKytbMC05YS1mXSogPGxkbV9wdT46CisrICpbMC05YS1mXSo6CWUzIGNmIDAzIGMwIAlsZG0gcGNcK1wrLHI2LXI5CisrICpbMC05YS1mXSo6CWUzIGNjIGZmIGZmIAlsZG0gcjEyXCtcKyxyMC1wYworKyAqWzAtOWEtZl0qOgllMyBjNSA4MCAwMCAJbGRtIHI1XCtcKyxwYworKyAqWzAtOWEtZl0qOgllMyBjNCA3ZiBmZiAJbGRtIHI0XCtcKyxyMC1scgorKyAqWzAtOWEtZl0qOgllMyBjZSAwMCAwMSAJbGRtIGxyXCtcKyxyMAorKyAqWzAtOWEtZl0qOgllMyBjYyBkNSAzOCAJbGRtIHIxMlwrXCsscjMtcjUscjgscjEwLHIxMixsci1wYworKyAqWzAtOWEtZl0qOgllMyBjYSBjMCA3NCAJbGRtIHIxMFwrXCsscjIscjQtcjYsbHItcGMKKysgKlswLTlhLWZdKjoJZTMgYzYgN2UgMWEgCWxkbSByNlwrXCsscjEscjMtcjQscjktbHIKKysKKytbMC05YS1mXSogPGxkbXRzPjoKKysgKlswLTlhLWZdKjoJZTUgY2YgMDEgODAgCWxkbXRzIHBjLHI3LXI4CisrICpbMC05YS1mXSo6CWU1IGNjIGZmIGZmIAlsZG10cyByMTIscjAtcGMKKysgKlswLTlhLWZdKjoJZTUgYzUgODAgMDAgCWxkbXRzIHI1LHBjCisrICpbMC05YS1mXSo6CWU1IGM0IDdmIGZmIAlsZG10cyByNCxyMC1scgorKyAqWzAtOWEtZl0qOgllNSBjZSAwMCAwMSAJbGRtdHMgbHIscjAKKysgKlswLTlhLWZdKjoJZTUgYzAgMTggMDYgCWxkbXRzIHIwLHIxLXIyLHIxMS1yMTIKKysgKlswLTlhLWZdKjoJZTUgY2UgNjEgOTcgCWxkbXRzIGxyLHIwLXIyLHI0LHI3LXI4LHNwLWxyCisrICpbMC05YS1mXSo6CWU1IGNjIGMyIDNiIAlsZG10cyByMTIscjAtcjEscjMtcjUscjksbHItcGMKKysKKytbMC05YS1mXSogPGxkbXRzX3B1PjoKKysgKlswLTlhLWZdKjoJZTcgY2YgMDIgMDAgCWxkbXRzIHBjXCtcKyxyOQorKyAqWzAtOWEtZl0qOgllNyBjYyBmZiBmZiAJbGRtdHMgcjEyXCtcKyxyMC1wYworKyAqWzAtOWEtZl0qOgllNyBjNSA4MCAwMCAJbGRtdHMgcjVcK1wrLHBjCisrICpbMC05YS1mXSo6CWU3IGM0IDdmIGZmIAlsZG10cyByNFwrXCsscjAtbHIKKysgKlswLTlhLWZdKjoJZTcgY2UgMDAgMDEgCWxkbXRzIGxyXCtcKyxyMAorKyAqWzAtOWEtZl0qOgllNyBjZCAwYSBiZCAJbGRtdHMgc3BcK1wrLHIwLHIyLXI1LHI3LHI5LHIxMQorKyAqWzAtOWEtZl0qOgllNyBjNSAwYyA4ZSAJbGRtdHMgcjVcK1wrLHIxLXIzLHI3LHIxMC1yMTEKKysgKlswLTlhLWZdKjoJZTcgYzggYTEgOWMgCWxkbXRzIHI4XCtcKyxyMi1yNCxyNy1yOCxzcCxwYworKworK1swLTlhLWZdKiA8c3RtPjoKKysgKlswLTlhLWZdKjoJZTkgY2YgMDAgODAgCXN0bSBwYyxyNworKyAqWzAtOWEtZl0qOgllOSBjYyBmZiBmZiAJc3RtIHIxMixyMC1wYworKyAqWzAtOWEtZl0qOgllOSBjNSA4MCAwMCAJc3RtIHI1LHBjCisrICpbMC05YS1mXSo6CWU5IGM0IDdmIGZmIAlzdG0gcjQscjAtbHIKKysgKlswLTlhLWZdKjoJZTkgY2UgMDAgMDEgCXN0bSBscixyMAorKyAqWzAtOWEtZl0qOgllOSBjZCA0OSAyYyAJc3RtIHNwLHIyLXIzLHI1LHI4LHIxMSxscgorKyAqWzAtOWEtZl0qOgllOSBjNCA0YyA1ZiAJc3RtIHI0LHIwLXI0LHI2LHIxMC1yMTEsbHIKKysgKlswLTlhLWZdKjoJZTkgYzkgZjIgMjIgCXN0bSByOSxyMSxyNSxyOSxyMTItcGMKKysKKytbMC05YS1mXSogPHN0bV9wdT46CisrICpbMC05YS1mXSo6CWViIGNmIDAwIDcwIAlzdG0gLS1wYyxyNC1yNgorKyAqWzAtOWEtZl0qOgllYiBjYyBmZiBmZiAJc3RtIC0tcjEyLHIwLXBjCisrICpbMC05YS1mXSo6CWViIGM1IDgwIDAwIAlzdG0gLS1yNSxwYworKyAqWzAtOWEtZl0qOgllYiBjNCA3ZiBmZiAJc3RtIC0tcjQscjAtbHIKKysgKlswLTlhLWZdKjoJZWIgY2UgMDAgMDEgCXN0bSAtLWxyLHIwCisrICpbMC05YS1mXSo6CWViIGNiIGZiIGYxIAlzdG0gLS1yMTEscjAscjQtcjkscjExLXBjCisrICpbMC05YS1mXSo6CWViIGNiIDU2IDA5IAlzdG0gLS1yMTEscjAscjMscjktcjEwLHIxMixscgorKyAqWzAtOWEtZl0qOgllYiBjNiA2MyAwNCAJc3RtIC0tcjYscjIscjgtcjksc3AtbHIKKysKKytbMC05YS1mXSogPHN0bXRzPjoKKysgKlswLTlhLWZdKjoJZWQgY2YgMDEgMDAgCXN0bXRzIHBjLHI4CisrICpbMC05YS1mXSo6CWVkIGNjIGZmIGZmIAlzdG10cyByMTIscjAtcGMKKysgKlswLTlhLWZdKjoJZWQgYzUgODAgMDAgCXN0bXRzIHI1LHBjCisrICpbMC05YS1mXSo6CWVkIGM0IDdmIGZmIAlzdG10cyByNCxyMC1scgorKyAqWzAtOWEtZl0qOgllZCBjZSAwMCAwMSAJc3RtdHMgbHIscjAKKysgKlswLTlhLWZdKjoJZWQgYzEgYzYgNWIgCXN0bXRzIHIxLHIwLXIxLHIzLXI0LHI2LHI5LXIxMCxsci1wYworKyAqWzAtOWEtZl0qOgllZCBjMyAxZCBjMSAJc3RtdHMgcjMscjAscjYtcjgscjEwLXIxMgorKyAqWzAtOWEtZl0qOgllZCBjYiBkNiBkMSAJc3RtdHMgcjExLHIwLHI0LHI2LXI3LHI5LXIxMCxyMTIsbHItcGMKKysKKytbMC05YS1mXSogPHN0bXRzX3B1PjoKKysgKlswLTlhLWZdKjoJZWYgY2YgMDEgYzAgCXN0bXRzIC0tcGMscjYtcjgKKysgKlswLTlhLWZdKjoJZWYgY2MgZmYgZmYgCXN0bXRzIC0tcjEyLHIwLXBjCisrICpbMC05YS1mXSo6CWVmIGM1IDgwIDAwIAlzdG10cyAtLXI1LHBjCisrICpbMC05YS1mXSo6CWVmIGM0IDdmIGZmIAlzdG10cyAtLXI0LHIwLWxyCisrICpbMC05YS1mXSo6CWVmIGNlIDAwIDAxIAlzdG10cyAtLWxyLHIwCisrICpbMC05YS1mXSo6CWVmIGMyIDM2IDE5IAlzdG10cyAtLXIyLHIwLHIzLXI0LHI5LXIxMCxyMTItc3AKKysgKlswLTlhLWZdKjoJZWYgYzMgYzAgMDMgCXN0bXRzIC0tcjMscjAtcjEsbHItcGMKKysgKlswLTlhLWZdKjoJZWYgYzAgNDQgN2QgCXN0bXRzIC0tcjAscjAscjItcjYscjEwLGxyCisrCisrWzAtOWEtZl0qIDxsZGluc19oPjoKKysgKlswLTlhLWZdKjoJZmYgZGYgMDAgMDAgCWxkaW5zXC5oIHBjOmIscGNcWzBcXQorKyAqWzAtOWEtZl0qOglmOSBkYyAxZiBmZiAJbGRpbnNcLmggcjEyOnQscjEyXFstMlxdCisrICpbMC05YS1mXSo6CWViIGQ1IDE4IDAwIAlsZGluc1wuaCByNTp0LHI1XFstNDA5NlxdCisrICpbMC05YS1mXSo6CWU5IGQ0IDA3IGZmIAlsZGluc1wuaCByNDpiLHI0XFs0MDk0XF0KKysgKlswLTlhLWZdKjoJZmQgZGUgMTAgMDEgCWxkaW5zXC5oIGxyOnQsbHJcWzJcXQorKyAqWzAtOWEtZl0qOglmZCBkMCAxMyBjNSAJbGRpbnNcLmggcjA6dCxsclxbMTkzMFxdCisrICpbMC05YS1mXSo6CWVmIGQzIDBlIGY1IAlsZGluc1wuaCByMzpiLHI3XFstNTM0XF0KKysgKlswLTlhLWZdKjoJZjkgZDIgMGIgOWEgCWxkaW5zXC5oIHIyOmIscjEyXFstMjI1MlxdCisrCisrWzAtOWEtZl0qIDxsZGluc19iPjoKKysgKlswLTlhLWZdKjoJZmYgZGYgNDAgMDAgCWxkaW5zXC5iIHBjOmIscGNcWzBcXQorKyAqWzAtOWEtZl0qOglmOSBkYyA3ZiBmZiAJbGRpbnNcLmIgcjEyOnQscjEyXFstMVxdCisrICpbMC05YS1mXSo6CWViIGQ1IDY4IDAwIAlsZGluc1wuYiByNTp1LHI1XFstMjA0OFxdCisrICpbMC05YS1mXSo6CWU5IGQ0IDU3IGZmIAlsZGluc1wuYiByNDpsLHI0XFsyMDQ3XF0KKysgKlswLTlhLWZdKjoJZmQgZGUgNTAgMDEgCWxkaW5zXC5iIGxyOmwsbHJcWzFcXQorKyAqWzAtOWEtZl0qOgllOSBkNiA3ZCA2YSAJbGRpbnNcLmIgcjY6dCxyNFxbLTY2MlxdCisrICpbMC05YS1mXSo6CWUzIGQ1IDRmIDY5IAlsZGluc1wuYiByNTpiLHIxXFstMTUxXF0KKysgKlswLTlhLWZdKjoJZjcgZGEgNzggN2QgCWxkaW5zXC5iIHIxMDp0LHIxMVxbLTE5MjNcXQorKworK1swLTlhLWZdKiA8bGRzd3Bfc2g+OgorKyAqWzAtOWEtZl0qOglmZiBkZiAyMCAwMCAJbGRzd3BcLnNoIHBjLHBjXFswXF0KKysgKlswLTlhLWZdKjoJZjkgZGMgMmYgZmYgCWxkc3dwXC5zaCByMTIscjEyXFstMlxdCisrICpbMC05YS1mXSo6CWViIGQ1IDI4IDAwIAlsZHN3cFwuc2ggcjUscjVcWy00MDk2XF0KKysgKlswLTlhLWZdKjoJZTkgZDQgMjcgZmYgCWxkc3dwXC5zaCByNCxyNFxbNDA5NFxdCisrICpbMC05YS1mXSo6CWZkIGRlIDIwIDAxIAlsZHN3cFwuc2ggbHIsbHJcWzJcXQorKyAqWzAtOWEtZl0qOglmNSBkOSAyNyA4NCAJbGRzd3BcLnNoIHI5LHIxMFxbMzg0OFxdCisrICpbMC05YS1mXSo6CWY5IGQ0IDJjIDA0IAlsZHN3cFwuc2ggcjQscjEyXFstMjA0MFxdCisrICpbMC05YS1mXSo6CWU1IGRhIDI2IDA4IAlsZHN3cFwuc2ggcjEwLHIyXFszMDg4XF0KKysKKytbMC05YS1mXSogPGxkc3dwX3VoPjoKKysgKlswLTlhLWZdKjoJZmYgZGYgMzAgMDAgCWxkc3dwXC51aCBwYyxwY1xbMFxdCisrICpbMC05YS1mXSo6CWY5IGRjIDNmIGZmIAlsZHN3cFwudWggcjEyLHIxMlxbLTJcXQorKyAqWzAtOWEtZl0qOgllYiBkNSAzOCAwMCAJbGRzd3BcLnVoIHI1LHI1XFstNDA5NlxdCisrICpbMC05YS1mXSo6CWU5IGQ0IDM3IGZmIAlsZHN3cFwudWggcjQscjRcWzQwOTRcXQorKyAqWzAtOWEtZl0qOglmZCBkZSAzMCAwMSAJbGRzd3BcLnVoIGxyLGxyXFsyXF0KKysgKlswLTlhLWZdKjoJZjMgZDQgMzcgNDYgCWxkc3dwXC51aCByNCxyOVxbMzcyNFxdCisrICpbMC05YS1mXSo6CWZiIGRlIDNjIGJjIAlsZHN3cFwudWggbHIsc3BcWy0xNjcyXF0KKysgKlswLTlhLWZdKjoJZjkgZDggMzggN2QgCWxkc3dwXC51aCByOCxyMTJcWy0zODQ2XF0KKysKKytbMC05YS1mXSogPGxkc3dwX3c+OgorKyAqWzAtOWEtZl0qOglmZiBkZiA4MCAwMCAJbGRzd3BcLncgcGMscGNcWzBcXQorKyAqWzAtOWEtZl0qOglmOSBkYyA4ZiBmZiAJbGRzd3BcLncgcjEyLHIxMlxbLTRcXQorKyAqWzAtOWEtZl0qOgllYiBkNSA4OCAwMCAJbGRzd3BcLncgcjUscjVcWy04MTkyXF0KKysgKlswLTlhLWZdKjoJZTkgZDQgODcgZmYgCWxkc3dwXC53IHI0LHI0XFs4MTg4XF0KKysgKlswLTlhLWZdKjoJZmQgZGUgODAgMDEgCWxkc3dwXC53IGxyLGxyXFs0XF0KKysgKlswLTlhLWZdKjoJZWYgZGQgODEgZDEgCWxkc3dwXC53IHNwLHI3XFsxODYwXF0KKysgKlswLTlhLWZdKjoJZWIgZGYgOGMgYzEgCWxkc3dwXC53IHBjLHI1XFstMzMyNFxdCisrICpbMC05YS1mXSo6CWY1IGRjIDhjIGM4IAlsZHN3cFwudyByMTIscjEwXFstMzI5NlxdCisrCisrWzAtOWEtZl0qIDxzdHN3cF9oPjoKKysgKlswLTlhLWZdKjoJZmYgZGYgOTAgMDAgCXN0c3dwXC5oIHBjXFswXF0scGMKKysgKlswLTlhLWZdKjoJZjkgZGMgOWYgZmYgCXN0c3dwXC5oIHIxMlxbLTJcXSxyMTIKKysgKlswLTlhLWZdKjoJZWIgZDUgOTggMDAgCXN0c3dwXC5oIHI1XFstNDA5NlxdLHI1CisrICpbMC05YS1mXSo6CWU5IGQ0IDk3IGZmIAlzdHN3cFwuaCByNFxbNDA5NFxdLHI0CisrICpbMC05YS1mXSo6CWZkIGRlIDkwIDAxIAlzdHN3cFwuaCBsclxbMlxdLGxyCisrICpbMC05YS1mXSo6CWVmIGRhIDkwIDIwIAlzdHN3cFwuaCByN1xbNjRcXSxyMTAKKysgKlswLTlhLWZdKjoJZjUgZDIgOTUgZTggCXN0c3dwXC5oIHIxMFxbMzAyNFxdLHIyCisrICpbMC05YS1mXSo6CWUxIGRhIDliIDc0IAlzdHN3cFwuaCByMFxbLTIzMjhcXSxyMTAKKysKKytbMC05YS1mXSogPHN0c3dwX3c+OgorKyAqWzAtOWEtZl0qOglmZiBkZiBhMCAwMCAJc3Rzd3BcLncgcGNcWzBcXSxwYworKyAqWzAtOWEtZl0qOglmOSBkYyBhZiBmZiAJc3Rzd3BcLncgcjEyXFstNFxdLHIxMgorKyAqWzAtOWEtZl0qOgllYiBkNSBhOCAwMCAJc3Rzd3BcLncgcjVcWy04MTkyXF0scjUKKysgKlswLTlhLWZdKjoJZTkgZDQgYTcgZmYgCXN0c3dwXC53IHI0XFs4MTg4XF0scjQKKysgKlswLTlhLWZdKjoJZmQgZGUgYTAgMDEgCXN0c3dwXC53IGxyXFs0XF0sbHIKKysgKlswLTlhLWZdKjoJZmYgZDggYTEgMjEgCXN0c3dwXC53IHBjXFsxMTU2XF0scjgKKysgKlswLTlhLWZdKjoJZmIgZGEgYTcgY2UgCXN0c3dwXC53IHNwXFs3OTkyXF0scjEwCisrICpbMC05YS1mXSo6CWYxIGQ1IGFlIGRiIAlzdHN3cFwudyByOFxbLTExNzJcXSxyNQorKworK1swLTlhLWZdKiA8YW5kMj46CisrICpbMC05YS1mXSo6CWZmIGVmIDAwIDBmIAlhbmQgcGMscGMscGMKKysgKlswLTlhLWZdKjoJZjkgZWMgMDEgZmMgCWFuZCByMTIscjEyLHIxMjw8MHgxZgorKyAqWzAtOWEtZl0qOgllYiBlNSAwMSAwNSAJYW5kIHI1LHI1LHI1PDwweDEwCisrICpbMC05YS1mXSo6CWU5IGU0IDAwIGY0IAlhbmQgcjQscjQscjQ8PDB4ZgorKyAqWzAtOWEtZl0qOglmZCBlZSAwMCAxZSAJYW5kIGxyLGxyLGxyPDwweDEKKysgKlswLTlhLWZdKjoJZTUgZTEgMDAgMWEgCWFuZCByMTAscjIscjE8PDB4MQorKyAqWzAtOWEtZl0qOglmMSBlYiAwMSBiYyAJYW5kIHIxMixyOCxyMTE8PDB4MWIKKysgKlswLTlhLWZdKjoJZWYgZTAgMDAgM2EgCWFuZCByMTAscjcscjA8PDB4MworKworK1swLTlhLWZdKiA8YW5kMz46CisrICpbMC05YS1mXSo6CWZmIGVmIDAyIDBmIAlhbmQgcGMscGMscGMKKysgKlswLTlhLWZdKjoJZjkgZWMgMDMgZmMgCWFuZCByMTIscjEyLHIxMj4+MHgxZgorKyAqWzAtOWEtZl0qOgllYiBlNSAwMyAwNSAJYW5kIHI1LHI1LHI1Pj4weDEwCisrICpbMC05YS1mXSo6CWU5IGU0IDAyIGY0IAlhbmQgcjQscjQscjQ+PjB4ZgorKyAqWzAtOWEtZl0qOglmZCBlZSAwMiAxZSAJYW5kIGxyLGxyLGxyPj4weDEKKysgKlswLTlhLWZdKjoJZjEgZTcgMDMgMWMgCWFuZCByMTIscjgscjc+PjB4MTEKKysgKlswLTlhLWZdKjoJZTkgZTkgMDMgNGYgCWFuZCBwYyxyNCxyOT4+MHgxNAorKyAqWzAtOWEtZl0qOglmMyBlYSAwMiBjYSAJYW5kIHIxMCxyOSxyMTA+PjB4YworKworK1swLTlhLWZdKiA8b3IyPjoKKysgKlswLTlhLWZdKjoJZmYgZWYgMTAgMGYgCW9yIHBjLHBjLHBjCisrICpbMC05YS1mXSo6CWY5IGVjIDExIGZjIAlvciByMTIscjEyLHIxMjw8MHgxZgorKyAqWzAtOWEtZl0qOgllYiBlNSAxMSAwNSAJb3IgcjUscjUscjU8PDB4MTAKKysgKlswLTlhLWZdKjoJZTkgZTQgMTAgZjQgCW9yIHI0LHI0LHI0PDwweGYKKysgKlswLTlhLWZdKjoJZmQgZWUgMTAgMWUgCW9yIGxyLGxyLGxyPDwweDEKKysgKlswLTlhLWZdKjoJZmIgZWIgMTEgZDggCW9yIHI4LHNwLHIxMTw8MHgxZAorKyAqWzAtOWEtZl0qOglmMyBlMiAxMSBjZiAJb3IgcGMscjkscjI8PDB4MWMKKysgKlswLTlhLWZdKjoJZTMgZTIgMTAgMzUgCW9yIHI1LHIxLHIyPDwweDMKKysKKytbMC05YS1mXSogPG9yMz46CisrICpbMC05YS1mXSo6CWZmIGVmIDEyIDBmIAlvciBwYyxwYyxwYworKyAqWzAtOWEtZl0qOglmOSBlYyAxMyBmYyAJb3IgcjEyLHIxMixyMTI+PjB4MWYKKysgKlswLTlhLWZdKjoJZWIgZTUgMTMgMDUgCW9yIHI1LHI1LHI1Pj4weDEwCisrICpbMC05YS1mXSo6CWU5IGU0IDEyIGY0IAlvciByNCxyNCxyND4+MHhmCisrICpbMC05YS1mXSo6CWZkIGVlIDEyIDFlIAlvciBscixscixscj4+MHgxCisrICpbMC05YS1mXSo6CWZiIGVkIDEyIDIxIAlvciByMSxzcCxzcD4+MHgyCisrICpbMC05YS1mXSo6CWUzIGUxIDEzIGQwIAlvciByMCxyMSxyMT4+MHgxZAorKyAqWzAtOWEtZl0qOglmOSBlOCAxMiA4NCAJb3IgcjQscjEyLHI4Pj4weDgKKysKKytbMC05YS1mXSogPGVvcjI+OgorKyAqWzAtOWEtZl0qOglmZiBlZiAyMCAwZiAJZW9yIHBjLHBjLHBjCisrICpbMC05YS1mXSo6CWY5IGVjIDIxIGZjIAllb3IgcjEyLHIxMixyMTI8PDB4MWYKKysgKlswLTlhLWZdKjoJZWIgZTUgMjEgMDUgCWVvciByNSxyNSxyNTw8MHgxMAorKyAqWzAtOWEtZl0qOgllOSBlNCAyMCBmNCAJZW9yIHI0LHI0LHI0PDwweGYKKysgKlswLTlhLWZdKjoJZmQgZWUgMjAgMWUgCWVvciBscixscixscjw8MHgxCisrICpbMC05YS1mXSo6CWYzIGU0IDIwIGJhIAllb3IgcjEwLHI5LHI0PDwweGIKKysgKlswLTlhLWZdKjoJZTEgZTEgMjEgZjQgCWVvciByNCxyMCxyMTw8MHgxZgorKyAqWzAtOWEtZl0qOgllNSBlYyAyMCBkNiAJZW9yIHI2LHIyLHIxMjw8MHhkCisrCisrWzAtOWEtZl0qIDxlb3IzPjoKKysgKlswLTlhLWZdKjoJZmYgZWYgMjIgMGYgCWVvciBwYyxwYyxwYworKyAqWzAtOWEtZl0qOglmOSBlYyAyMyBmYyAJZW9yIHIxMixyMTIscjEyPj4weDFmCisrICpbMC05YS1mXSo6CWViIGU1IDIzIDA1IAllb3IgcjUscjUscjU+PjB4MTAKKysgKlswLTlhLWZdKjoJZTkgZTQgMjIgZjQgCWVvciByNCxyNCxyND4+MHhmCisrICpbMC05YS1mXSo6CWZkIGVlIDIyIDFlIAllb3IgbHIsbHIsbHI+PjB4MQorKyAqWzAtOWEtZl0qOgllYiBlNSAyMyA2NSAJZW9yIHI1LHI1LHI1Pj4weDE2CisrICpbMC05YS1mXSo6CWUzIGVlIDIyIDNhIAllb3IgcjEwLHIxLGxyPj4weDMKKysgKlswLTlhLWZdKjoJZmQgZWQgMjMgYTcgCWVvciByNyxscixzcD4+MHgxYQorKworK1swLTlhLWZdKiA8c3RoaF93Mj46CisrICpbMC05YS1mXSo6CWZmIGVmIDhmIDBmIAlzdGhoXC53IHBjXFtwY1xdLHBjOmIscGM6YgorKyAqWzAtOWEtZl0qOglmOSBlYyBiYyAzYyAJc3RoaFwudyByMTJcW3IxMjw8MHgzXF0scjEyOnQscjEyOnQKKysgKlswLTlhLWZdKjoJZWIgZTUgYjUgMjUgCXN0aGhcLncgcjVcW3I1PDwweDJcXSxyNTp0LHI1OnQKKysgKlswLTlhLWZdKjoJZTkgZTQgODQgMTQgCXN0aGhcLncgcjRcW3I0PDwweDFcXSxyNDpiLHI0OmIKKysgKlswLTlhLWZdKjoJZmQgZWUgYmUgMWUgCXN0aGhcLncgbHJcW2xyPDwweDFcXSxscjp0LGxyOnQKKysgKlswLTlhLWZdKjoJZTMgZWMgYjYgM2QgCXN0aGhcLncgc3BcW3I2PDwweDNcXSxyMTp0LHIxMjp0CisrICpbMC05YS1mXSo6CWYzIGU5IGI2IDA2IAlzdGhoXC53IHI2XFtyNlxdLHI5OnQscjk6dAorKyAqWzAtOWEtZl0qOgllMSBlYiA5MyAwYSAJc3RoaFwudyByMTBcW3IzXF0scjA6YixyMTE6dAorKworK1swLTlhLWZdKiA8c3RoaF93MT46CisrICpbMC05YS1mXSo6CWZmIGVmIGMwIDBmIAlzdGhoXC53IHBjXFsweDBcXSxwYzpiLHBjOmIKKysgKlswLTlhLWZdKjoJZjkgZWMgZmYgZmMgCXN0aGhcLncgcjEyXFsweDNmY1xdLHIxMjp0LHIxMjp0CisrICpbMC05YS1mXSo6CWViIGU1IGY4IDA1IAlzdGhoXC53IHI1XFsweDIwMFxdLHI1OnQscjU6dAorKyAqWzAtOWEtZl0qOgllOSBlNCBjNyBmNCAJc3RoaFwudyByNFxbMHgxZmNcXSxyNDpiLHI0OmIKKysgKlswLTlhLWZdKjoJZmQgZWUgZjAgMWUgCXN0aGhcLncgbHJcWzB4NFxdLGxyOnQsbHI6dAorKyAqWzAtOWEtZl0qOglmMyBlMCBlNiA1NCAJc3RoaFwudyByNFxbMHgxOTRcXSxyOTp0LHIwOmIKKysgKlswLTlhLWZdKjoJZTUgZWEgZTUgNzggCXN0aGhcLncgcjhcWzB4MTVjXF0scjI6dCxyMTA6YgorKyAqWzAtOWEtZl0qOglmMyBlMiBjMiBiZCAJc3RoaFwudyBzcFxbMHhhY1xdLHI5OmIscjI6YgorKworK1swLTlhLWZdKiA8Y29wPjoKKysgKlswLTlhLWZdKjoJZTEgYTAgMDAgMDAgCWNvcCBjcDAsY3IwLGNyMCxjcjAsMHgwCisrICpbMC05YS1mXSo6CWU3IGFmIGZmIGZmIAljb3AgY3A3LGNyMTUsY3IxNSxjcjE1LDB4N2YKKysgKlswLTlhLWZdKjoJZTMgYTggNzUgNTUgCWNvcCBjcDMsY3I1LGNyNSxjcjUsMHgzMQorKyAqWzAtOWEtZl0qOgllMyBhOCA0NCA0NCAJY29wIGNwMixjcjQsY3I0LGNyNCwweDMwCisrICpbMC05YS1mXSo6CWU1IGFkIGE4IDM3IAljb3AgY3A1LGNyOCxjcjMsY3I3LDB4NWEKKysKKytbMC05YS1mXSogPGxkY193MT46CisrICpbMC05YS1mXSo6CWU5IGEwIDAwIDAwIAlsZGNcLncgY3AwLGNyMCxyMFxbMHgwXF0KKysgKlswLTlhLWZdKjoJZTkgYWYgZWYgZmYgCWxkY1wudyBjcDcsY3IxNSxwY1xbMHgzZmNcXQorKyAqWzAtOWEtZl0qOgllOSBhNSA2NSA4MCAJbGRjXC53IGNwMyxjcjUscjVcWzB4MjAwXF0KKysgKlswLTlhLWZdKjoJZTkgYTQgNDQgN2YgCWxkY1wudyBjcDIsY3I0LHI0XFsweDFmY1xdCisrICpbMC05YS1mXSo6CWU5IGFkIDg5IDI0IAlsZGNcLncgY3A0LGNyOSxzcFxbMHg5MFxdCisrCisrWzAtOWEtZl0qIDxsZGNfdzI+OgorKyAqWzAtOWEtZl0qOgllZiBhMCAwMCA0MCAJbGRjXC53IGNwMCxjcjAsLS1yMAorKyAqWzAtOWEtZl0qOgllZiBhZiBlZiA0MCAJbGRjXC53IGNwNyxjcjE1LC0tcGMKKysgKlswLTlhLWZdKjoJZWYgYTUgNjUgNDAgCWxkY1wudyBjcDMsY3I1LC0tcjUKKysgKlswLTlhLWZdKjoJZWYgYTQgNDQgNDAgCWxkY1wudyBjcDIsY3I0LC0tcjQKKysgKlswLTlhLWZdKjoJZWYgYWQgODkgNDAgCWxkY1wudyBjcDQsY3I5LC0tc3AKKysKKytbMC05YS1mXSogPGxkY193Mz46CisrICpbMC05YS1mXSo6CWVmIGEwIDEwIDAwIAlsZGNcLncgY3AwLGNyMCxyMFxbcjBcXQorKyAqWzAtOWEtZl0qOgllZiBhZiBmZiAzZiAJbGRjXC53IGNwNyxjcjE1LHBjXFtwYzw8MHgzXF0KKysgKlswLTlhLWZdKjoJZWYgYTUgNzUgMjQgCWxkY1wudyBjcDMsY3I1LHI1XFtyNDw8MHgyXF0KKysgKlswLTlhLWZdKjoJZWYgYTQgNTQgMTMgCWxkY1wudyBjcDIsY3I0LHI0XFtyMzw8MHgxXF0KKysgKlswLTlhLWZdKjoJZWYgYWQgOTkgMGMgCWxkY1wudyBjcDQsY3I5LHNwXFtyMTJcXQorKworK1swLTlhLWZdKiA8bGRjX2QxPjoKKysgKlswLTlhLWZdKjoJZTkgYTAgMTAgMDAgCWxkY1wuZCBjcDAsY3IwLHIwXFsweDBcXQorKyAqWzAtOWEtZl0qOgllOSBhZiBmZSBmZiAJbGRjXC5kIGNwNyxjcjE0LHBjXFsweDNmY1xdCisrICpbMC05YS1mXSo6CWU5IGE1IDc2IDgwIAlsZGNcLmQgY3AzLGNyNixyNVxbMHgyMDBcXQorKyAqWzAtOWEtZl0qOgllOSBhNCA1NCA3ZiAJbGRjXC5kIGNwMixjcjQscjRcWzB4MWZjXF0KKysgKlswLTlhLWZdKjoJZTkgYWQgOTggMjQgCWxkY1wuZCBjcDQsY3I4LHNwXFsweDkwXF0KKysKKytbMC05YS1mXSogPGxkY19kMj46CisrICpbMC05YS1mXSo6CWVmIGEwIDAwIDUwIAlsZGNcLmQgY3AwLGNyMCwtLXIwCisrICpbMC05YS1mXSo6CWVmIGFmIGVlIDUwIAlsZGNcLmQgY3A3LGNyMTQsLS1wYworKyAqWzAtOWEtZl0qOgllZiBhNSA2NiA1MCAJbGRjXC5kIGNwMyxjcjYsLS1yNQorKyAqWzAtOWEtZl0qOgllZiBhNCA0NCA1MCAJbGRjXC5kIGNwMixjcjQsLS1yNAorKyAqWzAtOWEtZl0qOgllZiBhZCA4OCA1MCAJbGRjXC5kIGNwNCxjcjgsLS1zcAorKworK1swLTlhLWZdKiA8bGRjX2QzPjoKKysgKlswLTlhLWZdKjoJZWYgYTAgMTAgNDAgCWxkY1wuZCBjcDAsY3IwLHIwXFtyMFxdCisrICpbMC05YS1mXSo6CWVmIGFmIGZlIDdmIAlsZGNcLmQgY3A3LGNyMTQscGNcW3BjPDwweDNcXQorKyAqWzAtOWEtZl0qOgllZiBhNSA3NiA2NCAJbGRjXC5kIGNwMyxjcjYscjVcW3I0PDwweDJcXQorKyAqWzAtOWEtZl0qOgllZiBhNCA1NCA1MyAJbGRjXC5kIGNwMixjcjQscjRcW3IzPDwweDFcXQorKyAqWzAtOWEtZl0qOgllZiBhZCA5OCA0YyAJbGRjXC5kIGNwNCxjcjgsc3BcW3IxMlxdCisrCisrWzAtOWEtZl0qIDxzdGNfdzE+OgorKyAqWzAtOWEtZl0qOgllYiBhMCAwMCAwMCAJc3RjXC53IGNwMCxyMFxbMHgwXF0sY3IwCisrICpbMC05YS1mXSo6CWViIGFmIGVmIGZmIAlzdGNcLncgY3A3LHBjXFsweDNmY1xdLGNyMTUKKysgKlswLTlhLWZdKjoJZWIgYTUgNjUgODAgCXN0Y1wudyBjcDMscjVcWzB4MjAwXF0sY3I1CisrICpbMC05YS1mXSo6CWViIGE0IDQ0IDdmIAlzdGNcLncgY3AyLHI0XFsweDFmY1xdLGNyNAorKyAqWzAtOWEtZl0qOgllYiBhZCA4OSAyNCAJc3RjXC53IGNwNCxzcFxbMHg5MFxdLGNyOQorKworK1swLTlhLWZdKiA8c3RjX3cyPjoKKysgKlswLTlhLWZdKjoJZWYgYTAgMDAgNjAgCXN0Y1wudyBjcDAscjBcK1wrLGNyMAorKyAqWzAtOWEtZl0qOgllZiBhZiBlZiA2MCAJc3RjXC53IGNwNyxwY1wrXCssY3IxNQorKyAqWzAtOWEtZl0qOgllZiBhNSA2NSA2MCAJc3RjXC53IGNwMyxyNVwrXCssY3I1CisrICpbMC05YS1mXSo6CWVmIGE0IDQ0IDYwIAlzdGNcLncgY3AyLHI0XCtcKyxjcjQKKysgKlswLTlhLWZdKjoJZWYgYWQgODkgNjAgCXN0Y1wudyBjcDQsc3BcK1wrLGNyOQorKworK1swLTlhLWZdKiA8c3RjX3czPjoKKysgKlswLTlhLWZdKjoJZWYgYTAgMTAgODAgCXN0Y1wudyBjcDAscjBcW3IwXF0sY3IwCisrICpbMC05YS1mXSo6CWVmIGFmIGZmIGJmIAlzdGNcLncgY3A3LHBjXFtwYzw8MHgzXF0sY3IxNQorKyAqWzAtOWEtZl0qOgllZiBhNSA3NSBhNCAJc3RjXC53IGNwMyxyNVxbcjQ8PDB4MlxdLGNyNQorKyAqWzAtOWEtZl0qOgllZiBhNCA1NCA5MyAJc3RjXC53IGNwMixyNFxbcjM8PDB4MVxdLGNyNAorKyAqWzAtOWEtZl0qOgllZiBhZCA5OSA4YyAJc3RjXC53IGNwNCxzcFxbcjEyXF0sY3I5CisrCisrWzAtOWEtZl0qIDxzdGNfZDE+OgorKyAqWzAtOWEtZl0qOgllYiBhMCAxMCAwMCAJc3RjXC5kIGNwMCxyMFxbMHgwXF0sY3IwCisrICpbMC05YS1mXSo6CWViIGFmIGZlIGZmIAlzdGNcLmQgY3A3LHBjXFsweDNmY1xdLGNyMTQKKysgKlswLTlhLWZdKjoJZWIgYTUgNzYgODAgCXN0Y1wuZCBjcDMscjVcWzB4MjAwXF0sY3I2CisrICpbMC05YS1mXSo6CWViIGE0IDU0IDdmIAlzdGNcLmQgY3AyLHI0XFsweDFmY1xdLGNyNAorKyAqWzAtOWEtZl0qOgllYiBhZCA5OCAyNCAJc3RjXC5kIGNwNCxzcFxbMHg5MFxdLGNyOAorKworK1swLTlhLWZdKiA8c3RjX2QyPjoKKysgKlswLTlhLWZdKjoJZWYgYTAgMDAgNzAgCXN0Y1wuZCBjcDAscjBcK1wrLGNyMAorKyAqWzAtOWEtZl0qOgllZiBhZiBlZSA3MCAJc3RjXC5kIGNwNyxwY1wrXCssY3IxNAorKyAqWzAtOWEtZl0qOgllZiBhNSA2NiA3MCAJc3RjXC5kIGNwMyxyNVwrXCssY3I2CisrICpbMC05YS1mXSo6CWVmIGE0IDQ0IDcwIAlzdGNcLmQgY3AyLHI0XCtcKyxjcjQKKysgKlswLTlhLWZdKjoJZWYgYWQgODggNzAgCXN0Y1wuZCBjcDQsc3BcK1wrLGNyOAorKworK1swLTlhLWZdKiA8c3RjX2QzPjoKKysgKlswLTlhLWZdKjoJZWYgYTAgMTAgYzAgCXN0Y1wuZCBjcDAscjBcW3IwXF0sY3IwCisrICpbMC05YS1mXSo6CWVmIGFmIGZlIGZmIAlzdGNcLmQgY3A3LHBjXFtwYzw8MHgzXF0sY3IxNAorKyAqWzAtOWEtZl0qOgllZiBhNSA3NiBlNCAJc3RjXC5kIGNwMyxyNVxbcjQ8PDB4MlxdLGNyNgorKyAqWzAtOWEtZl0qOgllZiBhNCA1NCBkMyAJc3RjXC5kIGNwMixyNFxbcjM8PDB4MVxdLGNyNAorKyAqWzAtOWEtZl0qOgllZiBhZCA5OCBjYyAJc3RjXC5kIGNwNCxzcFxbcjEyXF0sY3I4CisrCisrWzAtOWEtZl0qIDxsZGMwX3c+OgorKyAqWzAtOWEtZl0qOglmMSBhMCAwMCAwMCAJbGRjMFwudyBjcjAscjBcWzB4MFxdCisrICpbMC05YS1mXSo6CWYxIGFmIGZmIGZmIAlsZGMwXC53IGNyMTUscGNcWzB4M2ZmY1xdCisrICpbMC05YS1mXSo6CWYxIGE1IDg1IDAwIAlsZGMwXC53IGNyNSxyNVxbMHgyMDAwXF0KKysgKlswLTlhLWZdKjoJZjEgYTQgNzQgZmYgCWxkYzBcLncgY3I0LHI0XFsweDFmZmNcXQorKyAqWzAtOWEtZl0qOglmMSBhZCAwOSA5MyAJbGRjMFwudyBjcjksc3BcWzB4MjRjXF0KKysKKytbMC05YS1mXSogPGxkYzBfZD46CisrICpbMC05YS1mXSo6CWYzIGEwIDAwIDAwIAlsZGMwXC5kIGNyMCxyMFxbMHgwXF0KKysgKlswLTlhLWZdKjoJZjMgYWYgZmUgZmYgCWxkYzBcLmQgY3IxNCxwY1xbMHgzZmZjXF0KKysgKlswLTlhLWZdKjoJZjMgYTUgODYgMDAgCWxkYzBcLmQgY3I2LHI1XFsweDIwMDBcXQorKyAqWzAtOWEtZl0qOglmMyBhNCA3NCBmZiAJbGRjMFwuZCBjcjQscjRcWzB4MWZmY1xdCisrICpbMC05YS1mXSo6CWYzIGFkIDA4IDkzIAlsZGMwXC5kIGNyOCxzcFxbMHgyNGNcXQorKworK1swLTlhLWZdKiA8c3RjMF93PjoKKysgKlswLTlhLWZdKjoJZjUgYTAgMDAgMDAgCXN0YzBcLncgcjBcWzB4MFxdLGNyMAorKyAqWzAtOWEtZl0qOglmNSBhZiBmZiBmZiAJc3RjMFwudyBwY1xbMHgzZmZjXF0sY3IxNQorKyAqWzAtOWEtZl0qOglmNSBhNSA4NSAwMCAJc3RjMFwudyByNVxbMHgyMDAwXF0sY3I1CisrICpbMC05YS1mXSo6CWY1IGE0IDc0IGZmIAlzdGMwXC53IHI0XFsweDFmZmNcXSxjcjQKKysgKlswLTlhLWZdKjoJZjUgYWQgMDkgOTMgCXN0YzBcLncgc3BcWzB4MjRjXF0sY3I5CisrCisrWzAtOWEtZl0qIDxzdGMwX2Q+OgorKyAqWzAtOWEtZl0qOglmNyBhMCAwMCAwMCAJc3RjMFwuZCByMFxbMHgwXF0sY3IwCisrICpbMC05YS1mXSo6CWY3IGFmIGZlIGZmIAlzdGMwXC5kIHBjXFsweDNmZmNcXSxjcjE0CisrICpbMC05YS1mXSo6CWY3IGE1IDg2IDAwIAlzdGMwXC5kIHI1XFsweDIwMDBcXSxjcjYKKysgKlswLTlhLWZdKjoJZjcgYTQgNzQgZmYgCXN0YzBcLmQgcjRcWzB4MWZmY1xdLGNyNAorKyAqWzAtOWEtZl0qOglmNyBhZCAwOCA5MyAJc3RjMFwuZCBzcFxbMHgyNGNcXSxjcjgKKysKKytbMC05YS1mXSogPG1lbWM+OgorKyAqWzAtOWEtZl0qOglmNiAxMCAwMCAwMCAJbWVtYyAwLDB4MAorKyAqWzAtOWEtZl0qOglmNiAxZiBmZiBmZiAJbWVtYyAtNCwweDFmCisrICpbMC05YS1mXSo6CWY2IDE4IDQwIDAwIAltZW1jIC02NTUzNiwweDEwCisrICpbMC05YS1mXSo6CWY2IDE3IGJmIGZmIAltZW1jIDY1NTMyLDB4ZgorKworK1swLTlhLWZdKiA8bWVtcz46CisrICpbMC05YS1mXSo6CWY4IDEwIDAwIDAwIAltZW1zIDAsMHgwCisrICpbMC05YS1mXSo6CWY4IDFmIGZmIGZmIAltZW1zIC00LDB4MWYKKysgKlswLTlhLWZdKjoJZjggMTggNDAgMDAgCW1lbXMgLTY1NTM2LDB4MTAKKysgKlswLTlhLWZdKjoJZjggMTcgYmYgZmYgCW1lbXMgNjU1MzIsMHhmCisrCisrWzAtOWEtZl0qIDxtZW10PjoKKysgKlswLTlhLWZdKjoJZmEgMTAgMDAgMDAgCW1lbXQgMCwweDAKKysgKlswLTlhLWZdKjoJZmEgMWYgZmYgZmYgCW1lbXQgLTQsMHgxZgorKyAqWzAtOWEtZl0qOglmYSAxOCA0MCAwMCAJbWVtdCAtNjU1MzYsMHgxMAorKyAqWzAtOWEtZl0qOglmYSAxNyBiZiBmZiAJbWVtdCA2NTUzMiwweGYKKysKKytbMC05YS1mXSogPHN0Y29uZD46CisrICpbMC05YS1mXSo6CWUxIDcwIDAwIDAwIAlzdGNvbmQgcjBcWzBcXSxyMAorKyAqWzAtOWEtZl0qOglmZiA3ZiBmZiBmZiAJc3Rjb25kIHBjXFstMVxdLHBjCisrICpbMC05YS1mXSo6CWYxIDc3IDgwIDAwIAlzdGNvbmQgcjhcWy0zMjc2OFxdLHI3CisrICpbMC05YS1mXSo6CWVmIDc4IDdmIGZmIAlzdGNvbmQgcjdcWzMyNzY3XF0scjgKKysgKlswLTlhLWZdKjoJZWIgN2EgMTIgMzQgCXN0Y29uZCByNVxbNDY2MFxdLHIxMAorKworK1swLTlhLWZdKiA8bGRjbV93PjoKKysgKlswLTlhLWZdKjoJZWQgYWYgMDAgZmYgCWxkY21cLncgY3AwLHBjLGNyMC1jcjcKKysgKlswLTlhLWZdKjoJZWQgYTAgZTAgMDEgCWxkY21cLncgY3A3LHIwLGNyMAorKyAqWzAtOWEtZl0qOgllZCBhNCA5MCA3ZiAJbGRjbVwudyBjcDQscjRcK1wrLGNyMC1jcjYKKysgKlswLTlhLWZdKjoJZWQgYTcgNjAgODAgCWxkY21cLncgY3AzLHI3LGNyNworKyAqWzAtOWEtZl0qOgllZCBhYyAzMCA3MiAJbGRjbVwudyBjcDEscjEyXCtcKyxjcjEsY3I0LWNyNgorKyAqWzAtOWEtZl0qOgllZCBhZiAwMSBmZiAJbGRjbVwudyBjcDAscGMsY3I4LWNyMTUKKysgKlswLTlhLWZdKjoJZWQgYTAgZTEgMDEgCWxkY21cLncgY3A3LHIwLGNyOAorKyAqWzAtOWEtZl0qOgllZCBhNCA5MSA3ZiAJbGRjbVwudyBjcDQscjRcK1wrLGNyOC1jcjE0CisrICpbMC05YS1mXSo6CWVkIGE3IDYxIDgwIAlsZGNtXC53IGNwMyxyNyxjcjE1CisrICpbMC05YS1mXSo6CWVkIGFjIDMxIDcyIAlsZGNtXC53IGNwMSxyMTJcK1wrLGNyOSxjcjEyLWNyMTQKKysKKytbMC05YS1mXSogPGxkY21fZD46CisrICpbMC05YS1mXSo6CWVkIGFmIDA0IGZmIAlsZGNtXC5kIGNwMCxwYyxjcjAtY3IxNQorKyAqWzAtOWEtZl0qOgllZCBhMCBlNCAwMSAJbGRjbVwuZCBjcDcscjAsY3IwLWNyMQorKyAqWzAtOWEtZl0qOgllZCBhNCA5NCA3ZiAJbGRjbVwuZCBjcDQscjRcK1wrLGNyMC1jcjEzCisrICpbMC05YS1mXSo6CWVkIGE3IDY0IDgwIAlsZGNtXC5kIGNwMyxyNyxjcjE0LWNyMTUKKysgKlswLTlhLWZdKjoJZWQgYWMgNTQgOTMgCWxkY21cLmQgY3AyLHIxMlwrXCssY3IwLWNyMyxjcjgtY3I5LGNyMTQtY3IxNQorKworK1swLTlhLWZdKiA8c3RjbV93PjoKKysgKlswLTlhLWZdKjoJZWQgYWYgMDIgZmYgCXN0Y21cLncgY3AwLHBjLGNyMC1jcjcKKysgKlswLTlhLWZdKjoJZWQgYTAgZTIgMDEgCXN0Y21cLncgY3A3LHIwLGNyMAorKyAqWzAtOWEtZl0qOgllZCBhNCA5MiA3ZiAJc3RjbVwudyBjcDQsLS1yNCxjcjAtY3I2CisrICpbMC05YS1mXSo6CWVkIGE3IDYyIDgwIAlzdGNtXC53IGNwMyxyNyxjcjcKKysgKlswLTlhLWZdKjoJZWQgYWMgMzIgNzIgCXN0Y21cLncgY3AxLC0tcjEyLGNyMSxjcjQtY3I2CisrICpbMC05YS1mXSo6CWVkIGFmIDAzIGZmIAlzdGNtXC53IGNwMCxwYyxjcjgtY3IxNQorKyAqWzAtOWEtZl0qOgllZCBhMCBlMyAwMSAJc3RjbVwudyBjcDcscjAsY3I4CisrICpbMC05YS1mXSo6CWVkIGE0IDkzIDdmIAlzdGNtXC53IGNwNCwtLXI0LGNyOC1jcjE0CisrICpbMC05YS1mXSo6CWVkIGE3IDYzIDgwIAlzdGNtXC53IGNwMyxyNyxjcjE1CisrICpbMC05YS1mXSo6CWVkIGFjIDMzIDcyIAlzdGNtXC53IGNwMSwtLXIxMixjcjksY3IxMi1jcjE0CisrCisrWzAtOWEtZl0qIDxzdGNtX2Q+OgorKyAqWzAtOWEtZl0qOgllZCBhZiAwNSBmZiAJc3RjbVwuZCBjcDAscGMsY3IwLWNyMTUKKysgKlswLTlhLWZdKjoJZWQgYTAgZTUgMDEgCXN0Y21cLmQgY3A3LHIwLGNyMC1jcjEKKysgKlswLTlhLWZdKjoJZWQgYTQgOTUgN2YgCXN0Y21cLmQgY3A0LC0tcjQsY3IwLWNyMTMKKysgKlswLTlhLWZdKjoJZWQgYTcgNjUgODAgCXN0Y21cLmQgY3AzLHI3LGNyMTQtY3IxNQorKyAqWzAtOWEtZl0qOgllZCBhYyA1NSA5MyAJc3RjbVwuZCBjcDIsLS1yMTIsY3IwLWNyMyxjcjgtY3I5LGNyMTQtY3IxNQorKworK1swLTlhLWZdKiA8bXZjcl93PjoKKysgKlswLTlhLWZdKjoJZWYgYWYgZWYgMDAgCW12Y3JcLncgY3A3LHBjLGNyMTUKKysgKlswLTlhLWZdKjoJZWYgYTAgMDAgMDAgCW12Y3JcLncgY3AwLHIwLGNyMAorKyAqWzAtOWEtZl0qOgllZiBhZiAwZiAwMCAJbXZjclwudyBjcDAscGMsY3IxNQorKyAqWzAtOWEtZl0qOgllZiBhMCBlZiAwMCAJbXZjclwudyBjcDcscjAsY3IxNQorKyAqWzAtOWEtZl0qOgllZiBhZiBlMCAwMCAJbXZjclwudyBjcDcscGMsY3IwCisrICpbMC05YS1mXSo6CWVmIGE3IDg4IDAwIAltdmNyXC53IGNwNCxyNyxjcjgKKysgKlswLTlhLWZdKjoJZWYgYTggNjcgMDAgCW12Y3JcLncgY3AzLHI4LGNyNworKworK1swLTlhLWZdKiA8bXZjcl9kPjoKKysgKlswLTlhLWZdKjoJZWYgYWUgZWUgMTAgCW12Y3JcLmQgY3A3LGxyLGNyMTQKKysgKlswLTlhLWZdKjoJZWYgYTAgMDAgMTAgCW12Y3JcLmQgY3AwLHIwLGNyMAorKyAqWzAtOWEtZl0qOgllZiBhZSAwZSAxMCAJbXZjclwuZCBjcDAsbHIsY3IxNAorKyAqWzAtOWEtZl0qOgllZiBhMCBlZSAxMCAJbXZjclwuZCBjcDcscjAsY3IxNAorKyAqWzAtOWEtZl0qOgllZiBhZSBlMCAxMCAJbXZjclwuZCBjcDcsbHIsY3IwCisrICpbMC05YS1mXSo6CWVmIGE2IDg4IDEwIAltdmNyXC5kIGNwNCxyNixjcjgKKysgKlswLTlhLWZdKjoJZWYgYTggNjYgMTAgCW12Y3JcLmQgY3AzLHI4LGNyNgorKworK1swLTlhLWZdKiA8bXZyY193PjoKKysgKlswLTlhLWZdKjoJZWYgYWYgZWYgMjAgCW12cmNcLncgY3A3LGNyMTUscGMKKysgKlswLTlhLWZdKjoJZWYgYTAgMDAgMjAgCW12cmNcLncgY3AwLGNyMCxyMAorKyAqWzAtOWEtZl0qOgllZiBhZiAwZiAyMCAJbXZyY1wudyBjcDAsY3IxNSxwYworKyAqWzAtOWEtZl0qOgllZiBhMCBlZiAyMCAJbXZyY1wudyBjcDcsY3IxNSxyMAorKyAqWzAtOWEtZl0qOgllZiBhZiBlMCAyMCAJbXZyY1wudyBjcDcsY3IwLHBjCisrICpbMC05YS1mXSo6CWVmIGE3IDg4IDIwIAltdnJjXC53IGNwNCxjcjgscjcKKysgKlswLTlhLWZdKjoJZWYgYTggNjcgMjAgCW12cmNcLncgY3AzLGNyNyxyOAorKworK1swLTlhLWZdKiA8bXZyY19kPjoKKysgKlswLTlhLWZdKjoJZWYgYWUgZWUgMzAgCW12cmNcLmQgY3A3LGNyMTQsbHIKKysgKlswLTlhLWZdKjoJZWYgYTAgMDAgMzAgCW12cmNcLmQgY3AwLGNyMCxyMAorKyAqWzAtOWEtZl0qOgllZiBhZSAwZSAzMCAJbXZyY1wuZCBjcDAsY3IxNCxscgorKyAqWzAtOWEtZl0qOgllZiBhMCBlZSAzMCAJbXZyY1wuZCBjcDcsY3IxNCxyMAorKyAqWzAtOWEtZl0qOgllZiBhZSBlMCAzMCAJbXZyY1wuZCBjcDcsY3IwLGxyCisrICpbMC05YS1mXSo6CWVmIGE2IDg4IDMwIAltdnJjXC5kIGNwNCxjcjgscjYKKysgKlswLTlhLWZdKjoJZWYgYTggNjYgMzAgCW12cmNcLmQgY3AzLGNyNixyOAorKworK1swLTlhLWZdKiA8YmZleHRzPjoKKysgKlswLTlhLWZdKjoJZmYgZGYgYjMgZmYgCWJmZXh0cyBwYyxwYywweDFmLDB4MWYKKysgKlswLTlhLWZdKjoJZTEgZDAgYjAgMDAgCWJmZXh0cyByMCxyMCwweDAsMHgwCisrICpbMC05YS1mXSo6CWUxIGRmIGIzIGZmIAliZmV4dHMgcjAscGMsMHgxZiwweDFmCisrICpbMC05YS1mXSo6CWZmIGQwIGIzIGZmIAliZmV4dHMgcGMscjAsMHgxZiwweDFmCisrICpbMC05YS1mXSo6CWZmIGRmIGIwIDFmIAliZmV4dHMgcGMscGMsMHgwLDB4MWYKKysgKlswLTlhLWZdKjoJZmYgZGYgYjMgZTAgCWJmZXh0cyBwYyxwYywweDFmLDB4MAorKyAqWzAtOWEtZl0qOgllZiBkOCBiMSBmMCAJYmZleHRzIHI3LHI4LDB4ZiwweDEwCisrICpbMC05YS1mXSo6CWYxIGQ3IGIyIDBmIAliZmV4dHMgcjgscjcsMHgxMCwweGYKKysKKytbMC05YS1mXSogPGJmZXh0dT46CisrICpbMC05YS1mXSo6CWZmIGRmIGMzIGZmIAliZmV4dHUgcGMscGMsMHgxZiwweDFmCisrICpbMC05YS1mXSo6CWUxIGQwIGMwIDAwIAliZmV4dHUgcjAscjAsMHgwLDB4MAorKyAqWzAtOWEtZl0qOgllMSBkZiBjMyBmZiAJYmZleHR1IHIwLHBjLDB4MWYsMHgxZgorKyAqWzAtOWEtZl0qOglmZiBkMCBjMyBmZiAJYmZleHR1IHBjLHIwLDB4MWYsMHgxZgorKyAqWzAtOWEtZl0qOglmZiBkZiBjMCAxZiAJYmZleHR1IHBjLHBjLDB4MCwweDFmCisrICpbMC05YS1mXSo6CWZmIGRmIGMzIGUwIAliZmV4dHUgcGMscGMsMHgxZiwweDAKKysgKlswLTlhLWZdKjoJZWYgZDggYzEgZjAgCWJmZXh0dSByNyxyOCwweGYsMHgxMAorKyAqWzAtOWEtZl0qOglmMSBkNyBjMiAwZiAJYmZleHR1IHI4LHI3LDB4MTAsMHhmCisrCisrWzAtOWEtZl0qIDxiZmlucz46CisrICpbMC05YS1mXSo6CWZmIGRmIGQzIGZmIAliZmlucyBwYyxwYywweDFmLDB4MWYKKysgKlswLTlhLWZdKjoJZTEgZDAgZDAgMDAgCWJmaW5zIHIwLHIwLDB4MCwweDAKKysgKlswLTlhLWZdKjoJZTEgZGYgZDMgZmYgCWJmaW5zIHIwLHBjLDB4MWYsMHgxZgorKyAqWzAtOWEtZl0qOglmZiBkMCBkMyBmZiAJYmZpbnMgcGMscjAsMHgxZiwweDFmCisrICpbMC05YS1mXSo6CWZmIGRmIGQwIDFmIAliZmlucyBwYyxwYywweDAsMHgxZgorKyAqWzAtOWEtZl0qOglmZiBkZiBkMyBlMCAJYmZpbnMgcGMscGMsMHgxZiwweDAKKysgKlswLTlhLWZdKjoJZWYgZDggZDEgZjAgCWJmaW5zIHI3LHI4LDB4ZiwweDEwCisrICpbMC05YS1mXSo6CWYxIGQ3IGQyIDBmIAliZmlucyByOCxyNywweDEwLDB4ZgorKworK1swLTlhLWZdKiA8cnN1YmM+OgorKyAqWzAtOWEtZl0qOglmYiBiZiAwMCAwMCAJcnN1YmVxIHBjLDAKKysgKlswLTlhLWZdKjoJZmIgYmMgMGYgZmYgCXJzdWJhbCByMTIsLTEKKysgKlswLTlhLWZdKjoJZmIgYjUgMDggODAgCXJzdWJscyByNSwtMTI4CisrICpbMC05YS1mXSo6CWZiIGI0IDA3IDdmIAlyc3VicGwgcjQsMTI3CisrICpbMC05YS1mXSo6CWZiIGJlIDAxIDAxIAlyc3VibmUgbHIsMQorKyAqWzAtOWEtZl0qOglmYiBiYyAwOCA3NiAJcnN1YmxzIHIxMiwxMTgKKysgKlswLTlhLWZdKjoJZmIgYmUgMGQgZjQgCXJzdWJ2YyBsciwtMTIKKysgKlswLTlhLWZdKjoJZmIgYjQgMDYgZjMgCXJzdWJtaSByNCwtMTMKKysKKytbMC05YS1mXSogPGFkZGM+OgorKyAqWzAtOWEtZl0qOglmZiBkZiBlMCAwZiAJYWRkZXEgcGMscGMscGMKKysgKlswLTlhLWZdKjoJZjkgZGMgZWYgMGMgCWFkZGFsIHIxMixyMTIscjEyCisrICpbMC05YS1mXSo6CWViIGQ1IGU4IDA1IAlhZGRscyByNSxyNSxyNQorKyAqWzAtOWEtZl0qOgllOSBkNCBlNyAwNCAJYWRkcGwgcjQscjQscjQgICAKKysgKlswLTlhLWZdKjoJZmQgZGUgZTEgMGUgCWFkZG5lIGxyLGxyLGxyCisrICpbMC05YS1mXSo6CWU1IGQxIGU4IDBhIAlhZGRscyByMTAscjIscjEKKysgKlswLTlhLWZdKjoJZjEgZGIgZWQgMGMgCWFkZHZjIHIxMixyOCxyMTEKKysgKlswLTlhLWZdKjoJZWYgZDAgZTYgMGEgCWFkZG1pIHIxMCxyNyxyMAorKworK1swLTlhLWZdKiA8c3ViYzI+OgorKyAqWzAtOWEtZl0qOglmZiBkZiBlMCAxZiAJc3ViZXEgcGMscGMscGMKKysgKlswLTlhLWZdKjoJZjkgZGMgZWYgMWMgCXN1YmFsIHIxMixyMTIscjEyCisrICpbMC05YS1mXSo6CWViIGQ1IGU4IDE1IAlzdWJscyByNSxyNSxyNQorKyAqWzAtOWEtZl0qOgllOSBkNCBlNyAxNCAJc3VicGwgcjQscjQscjQgICAKKysgKlswLTlhLWZdKjoJZmQgZGUgZTEgMWUgCXN1Ym5lIGxyLGxyLGxyCisrICpbMC05YS1mXSo6CWU1IGQxIGU4IDFhIAlzdWJscyByMTAscjIscjEKKysgKlswLTlhLWZdKjoJZjEgZGIgZWQgMWMgCXN1YnZjIHIxMixyOCxyMTEKKysgKlswLTlhLWZdKjoJZWYgZDAgZTYgMWEgCXN1Ym1pIHIxMCxyNyxyMAorKworK1swLTlhLWZdKiA8YW5kYz46CisrICpbMC05YS1mXSo6CWZmIGRmIGUwIDJmIAlhbmRlcSBwYyxwYyxwYworKyAqWzAtOWEtZl0qOglmOSBkYyBlZiAyYyAJYW5kYWwgcjEyLHIxMixyMTIKKysgKlswLTlhLWZdKjoJZWIgZDUgZTggMjUgCWFuZGxzIHI1LHI1LHI1CisrICpbMC05YS1mXSo6CWU5IGQ0IGU3IDI0IAlhbmRwbCByNCxyNCxyNCAgIAorKyAqWzAtOWEtZl0qOglmZCBkZSBlMSAyZSAJYW5kbmUgbHIsbHIsbHIKKysgKlswLTlhLWZdKjoJZTUgZDEgZTggMmEgCWFuZGxzIHIxMCxyMixyMQorKyAqWzAtOWEtZl0qOglmMSBkYiBlZCAyYyAJYW5kdmMgcjEyLHI4LHIxMQorKyAqWzAtOWEtZl0qOgllZiBkMCBlNiAyYSAJYW5kbWkgcjEwLHI3LHIwCisrCisrWzAtOWEtZl0qIDxvcmM+OgorKyAqWzAtOWEtZl0qOglmZiBkZiBlMCAzZiAJb3JlcSBwYyxwYyxwYworKyAqWzAtOWEtZl0qOglmOSBkYyBlZiAzYyAJb3JhbCByMTIscjEyLHIxMgorKyAqWzAtOWEtZl0qOgllYiBkNSBlOCAzNSAJb3JscyByNSxyNSxyNQorKyAqWzAtOWEtZl0qOgllOSBkNCBlNyAzNCAJb3JwbCByNCxyNCxyNCAgIAorKyAqWzAtOWEtZl0qOglmZCBkZSBlMSAzZSAJb3JuZSBscixscixscgorKyAqWzAtOWEtZl0qOgllNSBkMSBlOCAzYSAJb3JscyByMTAscjIscjEKKysgKlswLTlhLWZdKjoJZjEgZGIgZWQgM2MgCW9ydmMgcjEyLHI4LHIxMQorKyAqWzAtOWEtZl0qOgllZiBkMCBlNiAzYSAJb3JtaSByMTAscjcscjAKKysKKytbMC05YS1mXSogPGVvcmM+OgorKyAqWzAtOWEtZl0qOglmZiBkZiBlMCA0ZiAJZW9yZXEgcGMscGMscGMKKysgKlswLTlhLWZdKjoJZjkgZGMgZWYgNGMgCWVvcmFsIHIxMixyMTIscjEyCisrICpbMC05YS1mXSo6CWViIGQ1IGU4IDQ1IAllb3JscyByNSxyNSxyNQorKyAqWzAtOWEtZl0qOgllOSBkNCBlNyA0NCAJZW9ycGwgcjQscjQscjQgICAKKysgKlswLTlhLWZdKjoJZmQgZGUgZTEgNGUgCWVvcm5lIGxyLGxyLGxyCisrICpbMC05YS1mXSo6CWU1IGQxIGU4IDRhIAllb3JscyByMTAscjIscjEKKysgKlswLTlhLWZdKjoJZjEgZGIgZWQgNGMgCWVvcnZjIHIxMixyOCxyMTEKKysgKlswLTlhLWZdKjoJZWYgZDAgZTYgNGEgCWVvcm1pIHIxMCxyNyxyMAorKworK1swLTlhLWZdKiA8bGRjb25kPjoKKysgKlswLTlhLWZdKjoJZmYgZmYgMDEgZmYgICAgIGxkLndlcSAgcGMscGNbMHg3ZmNdCisrICpbMC05YS1mXSo6CWY5IGZjIGYzIGZmICAgICBsZC5zaGFsIHIxMixyMTJbMHgzZmVdCisrICpbMC05YS1mXSo6CWViIGY1IDg0IDAwICAgICBsZC5zaGxzIHI1LHI1WzB4MF0KKysgKlswLTlhLWZdKjoJZTkgZjQgNzkgZmYgICAgIGxkLnVicGwgcjQscjRbMHgxZmZdCisrICpbMC05YS1mXSo6CWZkIGZlIDE2IDAwICAgICBsZC5zYm5lIGxyLGxyWzB4MF0KKysgKlswLTlhLWZdKjoJZTUgZmEgODAgMDAgICAgIGxkLndscyAgcjEwLHIyWzB4MF0KKysgKlswLTlhLWZdKjoJZjEgZmMgZDMgZmYgICAgIGxkLnNodmMgcjEyLHI4WzB4M2ZlXQorKyAqWzAtOWEtZl0qOgllZiBmYSA2OCAwMSAgICAgbGQudWJtaSByMTAscjdbMHgxXQorKworK1swLTlhLWZdKiA8c3Rjb25kMj46CisrICpbMC05YS1mXSo6CWZmIGZmIDBiIGZmICAgICBzdC53ZXEgcGNbMHg3ZmNdLHBjCisrICpbMC05YS1mXSo6CWY5IGZjIGZkIGZmICAgICBzdC5oYWwgcjEyWzB4M2ZlXSxyMTIKKysgKlswLTlhLWZdKjoJZWIgZjUgOGMgMDAgICAgIHN0LmhscyByNVsweDBdLHI1CisrICpbMC05YS1mXSo6CWU5IGY0IDdmIGZmICAgICBzdC5icGwgcjRbMHgxZmZdLHI0CisrICpbMC05YS1mXSo6CWZkIGZlIDFlIDAwICAgICBzdC5ibmUgbHJbMHgwXSxscgorKyAqWzAtOWEtZl0qOgllNSBmYSA4YSAwMCAgICAgc3Qud2xzIHIyWzB4MF0scjEwCisrICpbMC05YS1mXSo6CWYxIGZjIGRkIGZmICAgICBzdC5odmMgcjhbMHgzZmVdLHIxMgorKyAqWzAtOWEtZl0qOgllZiBmYSA2ZSAwMSAgICAgc3QuYm1pIHI3WzB4MV0scjEwCisrCisrWzAtOWEtZl0qIDxtb3ZoPjoKKysgKlswLTlhLWZdKjoJZmMgMWYgZmYgZmYgICAgIG1vdmggcGMsMHhmZmZmCisrICpbMC05YS1mXSo6CWZjIDEwIDAwIDAwICAgICBtb3ZoIHIwLDB4MAorKyAqWzAtOWEtZl0qOglmYyAxNSAwMCAwMSAgICAgbW92aCByNSwweDEKKysgKlswLTlhLWZdKjoJZmMgMWMgN2YgZmYgICAgIG1vdmggcjEyLDB4N2ZmZgorKworLS0tIC9kZXYvbnVsbAorKysrIGIvZ2FzL3Rlc3RzdWl0ZS9nYXMvYXZyMzIvYWxsaW5zbi5leHAKK0BAIC0wLDAgKzEsNSBAQAorKyMgQVZSMzIgYXNzZW1ibGVyIHRlc3RzdWl0ZS4gLSotIFRjbCAtKi0KKysKKytpZiBbaXN0YXJnZXQgYXZyMzItKi0qXSB7CisrICAgIHJ1bl9kdW1wX3Rlc3QgImFsbGluc24iCisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2FzL3Rlc3RzdWl0ZS9nYXMvYXZyMzIvYWxsaW5zbi5zCitAQCAtMCwwICsxLDMzMzAgQEAKKysgLmRhdGEKKytmb29kYXRhOiAud29yZCA0MgorKyAudGV4dAorK2Zvb3RleHQ6CisrCS50ZXh0CisrCS5nbG9iYWwgbGRfZDUKKytsZF9kNToKKysJbGQuZCBscixwY1twYzw8M10KKysJbGQuZCByMCxyMFtyMDw8MF0KKysJbGQuZCByNixyNVtyNTw8Ml0KKysJbGQuZCByNCxyNFtyNDw8MV0KKysJbGQuZCBscixscltscjw8MV0KKysJbGQuZCByMTAscjNbc3A8PDJdCisrCWxkLmQgcjgscjEwW3I2PDwyXQorKwlsZC5kIHIyLHI3W3I5PDwwXQorKwkudGV4dAorKwkuZ2xvYmFsIGxkX3c1CisrbGRfdzU6CisrCWxkLncgcGMscGNbcGM8PDBdCisrCWxkLncgcjEyLHIxMltyMTI8PDNdCisrCWxkLncgcjUscjVbcjU8PDJdCisrCWxkLncgcjQscjRbcjQ8PDFdCisrCWxkLncgbHIsbHJbbHI8PDFdCisrCWxkLncgcjIscjlbcjk8PDBdCisrCWxkLncgcjExLHIyW3I2PDwwXQorKwlsZC53IHIwLHIyW3NwPDwzXQorKwkudGV4dAorKwkuZ2xvYmFsIGxkX3NoNQorK2xkX3NoNToKKysJbGQuc2ggcGMscGNbcGM8PDBdCisrCWxkLnNoIHIxMixyMTJbcjEyPDwzXQorKwlsZC5zaCByNSxyNVtyNTw8Ml0KKysJbGQuc2ggcjQscjRbcjQ8PDFdCisrCWxkLnNoIGxyLGxyW2xyPDwxXQorKwlsZC5zaCByMTEscjBbcGM8PDJdCisrCWxkLnNoIHIxMCxzcFtyNjw8Ml0KKysJbGQuc2ggcjEyLHIyW3IyPDwwXQorKwkudGV4dAorKwkuZ2xvYmFsIGxkX3VoNQorK2xkX3VoNToKKysJbGQudWggcGMscGNbcGM8PDBdCisrCWxkLnVoIHIxMixyMTJbcjEyPDwzXQorKwlsZC51aCByNSxyNVtyNTw8Ml0KKysJbGQudWggcjQscjRbcjQ8PDFdCisrCWxkLnVoIGxyLGxyW2xyPDwxXQorKwlsZC51aCByOCxwY1tscjw8M10KKysJbGQudWggcjYscjFbcGM8PDFdCisrCWxkLnVoIHI2LGxyW3NwPDwxXQorKwkudGV4dAorKwkuZ2xvYmFsIGxkX3NiMgorK2xkX3NiMjoKKysJbGQuc2IgcGMscGNbcGM8PDBdCisrCWxkLnNiIHIxMixyMTJbcjEyPDwzXQorKwlsZC5zYiByNSxyNVtyNTw8Ml0KKysJbGQuc2IgcjQscjRbcjQ8PDFdCisrCWxkLnNiIGxyLGxyW2xyPDwxXQorKwlsZC5zYiByOSxyMVtwYzw8M10KKysJbGQuc2IgcjAscjNbcjExPDwxXQorKwlsZC5zYiByMTAscjVbcjU8PDFdCisrCS50ZXh0CisrCS5nbG9iYWwgbGRfdWI1CisrbGRfdWI1OgorKwlsZC51YiBwYyxwY1twYzw8MF0KKysJbGQudWIgcjEyLHIxMltyMTI8PDNdCisrCWxkLnViIHI1LHI1W3I1PDwyXQorKwlsZC51YiByNCxyNFtyNDw8MV0KKysJbGQudWIgbHIsbHJbbHI8PDFdCisrCWxkLnViIHI2LHIxMltyNzw8M10KKysJbGQudWIgcjIscjZbcjEyPDwwXQorKwlsZC51YiByMCxyN1tyMTE8PDFdCisrCS50ZXh0CisrCS5nbG9iYWwgc3RfZDUKKytzdF9kNToKKysJc3QuZCBwY1twYzw8MF0scjE0CisrCXN0LmQgcjEyW3IxMjw8M10scjEyCisrCXN0LmQgcjVbcjU8PDJdLHI2CisrCXN0LmQgcjRbcjQ8PDFdLHI0CisrCXN0LmQgbHJbbHI8PDFdLGxyCisrCXN0LmQgcjFbcjk8PDFdLHI0CisrCXN0LmQgcjEwW3IyPDwxXSxyNAorKwlzdC5kIHIxMltyNjw8MF0sbHIKKysJLnRleHQKKysJLmdsb2JhbCBzdF93NQorK3N0X3c1OgorKwlzdC53IHBjW3BjPDwwXSxwYworKwlzdC53IHIxMltyMTI8PDNdLHIxMgorKwlzdC53IHI1W3I1PDwyXSxyNQorKwlzdC53IHI0W3I0PDwxXSxyNAorKwlzdC53IGxyW2xyPDwxXSxscgorKwlzdC53IHIxW3IxMDw8MF0scjMKKysJc3QudyByMFtyMTA8PDFdLHI5CisrCXN0LncgcjRbcjU8PDNdLHBjCisrCS50ZXh0CisrCS5nbG9iYWwgc3RfaDUKKytzdF9oNToKKysJc3QuaCBwY1twYzw8MF0scGMKKysJc3QuaCByMTJbcjEyPDwzXSxyMTIKKysJc3QuaCByNVtyNTw8Ml0scjUKKysJc3QuaCByNFtyNDw8MV0scjQKKysJc3QuaCBscltscjw8MV0sbHIKKysJc3QuaCByMltyOTw8MF0scjExCisrCXN0LmggcjVbcjE8PDJdLHIxMgorKwlzdC5oIHBjW3I4PDwyXSxyMworKwkudGV4dAorKwkuZ2xvYmFsIHN0X2I1Cisrc3RfYjU6CisrCXN0LmIgcGNbcGM8PDBdLHBjCisrCXN0LmIgcjEyW3IxMjw8M10scjEyCisrCXN0LmIgcjVbcjU8PDJdLHI1CisrCXN0LmIgcjRbcjQ8PDFdLHI0CisrCXN0LmIgbHJbbHI8PDFdLGxyCisrCXN0LmIgcjFbcjg8PDFdLHI2CisrCXN0LmIgbHJbbHI8PDNdLHIxCisrCXN0LmIgcjVbcjA8PDJdLHBjCisrCS50ZXh0CisrCS5nbG9iYWwgZGl2cworK2RpdnM6CisrCWRpdnMgcGMscGMscGMKKysJZGl2cyByMTIscjEyLHIxMgorKwlkaXZzIHI1LHI1LHI1CisrCWRpdnMgcjQscjQscjQKKysJZGl2cyBscixscixscgorKwlkaXZzIHIzLHBjLHBjCisrCWRpdnMgcjkscjEyLHIyCisrCWRpdnMgcjcscjQscjEKKysJLnRleHQKKysJLmdsb2JhbCBhZGQxCisrYWRkMToKKysJYWRkIHBjLHBjCisrCWFkZCByMTIscjEyCisrCWFkZCByNSxyNQorKwlhZGQgcjQscjQKKysJYWRkIGxyLGxyCisrCWFkZCByMTIscjkKKysJYWRkIHI2LHIzCisrCWFkZCByMTAscjEyCisrCS50ZXh0CisrCS5nbG9iYWwgc3ViMQorK3N1YjE6CisrCXN1YiBwYyxwYworKwlzdWIgcjEyLHIxMgorKwlzdWIgcjUscjUKKysJc3ViIHI0LHI0CisrCXN1YiBscixscgorKwlzdWIgbHIscjYKKysJc3ViIHIwLHNwCisrCXN1YiByNixyMTIKKysJLnRleHQKKysJLmdsb2JhbCByc3ViMQorK3JzdWIxOgorKwlyc3ViIHBjLHBjCisrCXJzdWIgcjEyLHIxMgorKwlyc3ViIHI1LHI1CisrCXJzdWIgcjQscjQKKysJcnN1YiBscixscgorKwlyc3ViIHIxMSxzcAorKwlyc3ViIHI3LHI0CisrCXJzdWIgcjkscjEKKysJLnRleHQKKysJLmdsb2JhbCBjcDEKKytjcDE6CisrCWNwIHBjLHBjCisrCWNwIHIxMixyMTIKKysJY3AgcjUscjUKKysJY3AgcjQscjQKKysJY3AgbHIsbHIKKysJY3AgcjYscjIKKysJY3AgcjAscjkKKysJY3AgcjMsc3AKKysJLnRleHQKKysJLmdsb2JhbCBvcjEKKytvcjE6CisrCW9yIHBjLHBjCisrCW9yIHIxMixyMTIKKysJb3IgcjUscjUKKysJb3IgcjQscjQKKysJb3IgbHIsbHIKKysJb3IgcjQscjkKKysJb3IgcjExLHI0CisrCW9yIHI0LHIwCisrCS50ZXh0CisrCS5nbG9iYWwgZW9yMQorK2VvcjE6CisrCWVvciBwYyxwYworKwllb3IgcjEyLHIxMgorKwllb3IgcjUscjUKKysJZW9yIHI0LHI0CisrCWVvciBscixscgorKwllb3IgcjEyLHIxMQorKwllb3IgcjAscjEKKysJZW9yIHI1LHBjCisrCS50ZXh0CisrCS5nbG9iYWwgYW5kMQorK2FuZDE6CisrCWFuZCBwYyxwYworKwlhbmQgcjEyLHIxMgorKwlhbmQgcjUscjUKKysJYW5kIHI0LHI0CisrCWFuZCBscixscgorKwlhbmQgcjgscjEKKysJYW5kIHIwLHNwCisrCWFuZCByMTAscjUKKysJLnRleHQKKysJLmdsb2JhbCB0c3QKKyt0c3Q6CisrCXRzdCBwYyxwYworKwl0c3QgcjEyLHIxMgorKwl0c3QgcjUscjUKKysJdHN0IHI0LHI0CisrCXRzdCBscixscgorKwl0c3QgcjAscjEyCisrCXRzdCByMTAscjYKKysJdHN0IHNwLHI0CisrCS50ZXh0CisrCS5nbG9iYWwgYW5kbgorK2FuZG46CisrCWFuZG4gcGMscGMKKysJYW5kbiByMTIscjEyCisrCWFuZG4gcjUscjUKKysJYW5kbiByNCxyNAorKwlhbmRuIGxyLGxyCisrCWFuZG4gcjkscjEyCisrCWFuZG4gcjExLHNwCisrCWFuZG4gcjEyLHI1CisrCS50ZXh0CisrCS5nbG9iYWwgbW92MworK21vdjM6CisrCW1vdiBwYyxwYworKwltb3YgcjEyLHIxMgorKwltb3YgcjUscjUKKysJbW92IHI0LHI0CisrCW1vdiBscixscgorKwltb3YgcjUscjkKKysJbW92IHIxMSxyMTEKKysJbW92IHIyLGxyCisrCS50ZXh0CisrCS5nbG9iYWwgc3RfdzEKKytzdF93MToKKysJc3QudyBwYysrLHBjCisrCXN0LncgcjEyKysscjEyCisrCXN0LncgcjUrKyxyNQorKwlzdC53IHI0KysscjQKKysJc3QudyBscisrLGxyCisrCXN0LncgcjErKyxyMTEKKysJc3QudyBzcCsrLHIwCisrCXN0Lncgc3ArKyxyMQorKwkudGV4dAorKwkuZ2xvYmFsIHN0X2gxCisrc3RfaDE6CisrCXN0LmggcGMrKyxwYworKwlzdC5oIHIxMisrLHIxMgorKwlzdC5oIHI1KysscjUKKysJc3QuaCByNCsrLHI0CisrCXN0LmggbHIrKyxscgorKwlzdC5oIHIxMisrLHNwCisrCXN0LmggcjcrKyxscgorKwlzdC5oIHI3KysscjQKKysJLnRleHQKKysJLmdsb2JhbCBzdF9iMQorK3N0X2IxOgorKwlzdC5iIHBjKysscGMKKysJc3QuYiByMTIrKyxyMTIKKysJc3QuYiByNSsrLHI1CisrCXN0LmIgcjQrKyxyNAorKwlzdC5iIGxyKyssbHIKKysJc3QuYiByOSsrLHNwCisrCXN0LmIgcjErKyxzcAorKwlzdC5iIHIwKysscjQKKysJLnRleHQKKysJLmdsb2JhbCBzdF93MgorK3N0X3cyOgorKwlzdC53IC0tcGMscGMKKysJc3QudyAtLXIxMixyMTIKKysJc3QudyAtLXI1LHI1CisrCXN0LncgLS1yNCxyNAorKwlzdC53IC0tbHIsbHIKKysJc3QudyAtLXIxLHI3CisrCXN0LncgLS1yMyxyOQorKwlzdC53IC0tcjUscjUKKysJLnRleHQKKysJLmdsb2JhbCBzdF9oMgorK3N0X2gyOgorKwlzdC5oIC0tcGMscGMKKysJc3QuaCAtLXIxMixyMTIKKysJc3QuaCAtLXI1LHI1CisrCXN0LmggLS1yNCxyNAorKwlzdC5oIC0tbHIsbHIKKysJc3QuaCAtLXI1LHI3CisrCXN0LmggLS1yOCxyOAorKwlzdC5oIC0tcjcscjIKKysJLnRleHQKKysJLmdsb2JhbCBzdF9iMgorK3N0X2IyOgorKwlzdC5iIC0tcGMscGMKKysJc3QuYiAtLXIxMixyMTIKKysJc3QuYiAtLXI1LHI1CisrCXN0LmIgLS1yNCxyNAorKwlzdC5iIC0tbHIsbHIKKysJc3QuYiAtLXNwLHNwCisrCXN0LmIgLS1zcCxyMTEKKysJc3QuYiAtLXI0LHI1CisrCS50ZXh0CisrCS5nbG9iYWwgbGRfdzEKKytsZF93MToKKysJbGQudyBwYyxwYysrCisrCWxkLncgcjEyLHIxMisrCisrCWxkLncgcjUscjUrKworKwlsZC53IHI0LHI0KysKKysJbGQudyBscixscisrCisrCWxkLncgcjMscjcrKworKwlsZC53IHIzLGxyKysKKysJbGQudyByMTIscjUrKworKwkudGV4dAorKwkuZ2xvYmFsIGxkX3NoMQorK2xkX3NoMToKKysJbGQuc2ggcGMscGMrKworKwlsZC5zaCByMTIscjEyKysKKysJbGQuc2ggcjUscjUrKworKwlsZC5zaCByNCxyNCsrCisrCWxkLnNoIGxyLGxyKysKKysJbGQuc2ggcjExLHIyKysKKysJbGQuc2ggcjIscjgrKworKwlsZC5zaCByNyxyNisrCisrCS50ZXh0CisrCS5nbG9iYWwgbGRfdWgxCisrbGRfdWgxOgorKwlsZC51aCBwYyxwYysrCisrCWxkLnVoIHIxMixyMTIrKworKwlsZC51aCByNSxyNSsrCisrCWxkLnVoIHI0LHI0KysKKysJbGQudWggbHIsbHIrKworKwlsZC51aCByNixyNysrCisrCWxkLnVoIHIxMCxyMTErKworKwlsZC51aCBscixyNCsrCisrCS50ZXh0CisrCS5nbG9iYWwgbGRfdWIxCisrbGRfdWIxOgorKwlsZC51YiBwYyxwYysrCisrCWxkLnViIHIxMixyMTIrKworKwlsZC51YiByNSxyNSsrCisrCWxkLnViIHI0LHI0KysKKysJbGQudWIgbHIsbHIrKworKwlsZC51YiByOCxscisrCisrCWxkLnViIHIxMixyMTIrKworKwlsZC51YiByMTEscjEwKysKKysJLnRleHQKKysJLmdsb2JhbCBsZF93MgorK2xkX3cyOgorKwlsZC53IHBjLC0tcGMKKysJbGQudyByMTIsLS1yMTIKKysJbGQudyByNSwtLXI1CisrCWxkLncgcjQsLS1yNAorKwlsZC53IGxyLC0tbHIKKysJbGQudyByMTAsLS1scgorKwlsZC53IHIxMiwtLXI5CisrCWxkLncgcjYsLS1yNQorKwkudGV4dAorKwkuZ2xvYmFsIGxkX3NoMgorK2xkX3NoMjoKKysJbGQuc2ggcGMsLS1wYworKwlsZC5zaCByMTIsLS1yMTIKKysJbGQuc2ggcjUsLS1yNQorKwlsZC5zaCByNCwtLXI0CisrCWxkLnNoIGxyLC0tbHIKKysJbGQuc2ggcGMsLS1yMTAKKysJbGQuc2ggcjYsLS1yMworKwlsZC5zaCByNCwtLXI2CisrCS50ZXh0CisrCS5nbG9iYWwgbGRfdWgyCisrbGRfdWgyOgorKwlsZC51aCBwYywtLXBjCisrCWxkLnVoIHIxMiwtLXIxMgorKwlsZC51aCByNSwtLXI1CisrCWxkLnVoIHI0LC0tcjQKKysJbGQudWggbHIsLS1scgorKwlsZC51aCByMywtLXIyCisrCWxkLnVoIHIxLC0tcjAKKysJbGQudWggcjIsLS1yOQorKwkudGV4dAorKwkuZ2xvYmFsIGxkX3ViMgorK2xkX3ViMjoKKysJbGQudWIgcGMsLS1wYworKwlsZC51YiByMTIsLS1yMTIKKysJbGQudWIgcjUsLS1yNQorKwlsZC51YiByNCwtLXI0CisrCWxkLnViIGxyLC0tbHIKKysJbGQudWIgcjEsLS1yMQorKwlsZC51YiByMCwtLXI2CisrCWxkLnViIHIyLC0tcjcKKysJLnRleHQKKysJLmdsb2JhbCBsZF91YjMKKytsZF91YjM6CisrCWxkLnViIHBjLHBjWzBdCisrCWxkLnViIHIxMixyMTJbN10KKysJbGQudWIgcjUscjVbNF0KKysJbGQudWIgcjQscjRbM10KKysJbGQudWIgbHIsbHJbMV0KKysJbGQudWIgcjYscjlbNl0KKysJbGQudWIgcjIsbHJbNF0KKysJbGQudWIgcjEscjhbMF0KKysJLnRleHQKKysJLmdsb2JhbCBzdWIzX3NwCisrc3ViM19zcDoKKysJc3ViIHNwLDAKKysJc3ViIHNwLC00CisrCXN1YiBzcCwtNTEyCisrCXN1YiBzcCw1MDgKKysJc3ViIHNwLDQKKysJc3ViIHNwLDQ0CisrCXN1YiBzcCw4CisrCXN1YiBzcCwzNDgKKysJLnRleHQKKysJLmdsb2JhbCBzdWIzCisrc3ViMzoKKysJc3ViIHBjLDAKKysJc3ViIHIxMiwtMQorKwlzdWIgcjUsLTEyOAorKwlzdWIgcjQsMTI3CisrCXN1YiBsciwxCisrCXN1YiByNiwtNDEKKysJc3ViIHI0LDM3CisrCXN1YiByMTIsNTYKKysJLnRleHQKKysJLmdsb2JhbCBtb3YxCisrbW92MToKKysJbW92IHBjLDAKKysJbW92IHIxMiwtMQorKwltb3YgcjUsLTEyOAorKwltb3YgcjQsMTI3CisrCW1vdiBsciwxCisrCW1vdiBwYywxNAorKwltb3YgcjYsLTEwMAorKwltb3YgbHIsLTEyMgorKwkudGV4dAorKwkuZ2xvYmFsIGxkZHNwCisrbGRkc3A6CisrCWxkZHNwIHBjLHNwWzBdCisrCWxkZHNwIHIxMixzcFs1MDhdCisrCWxkZHNwIHI1LHNwWzI1Nl0KKysJbGRkc3AgcjQsc3BbMjUyXQorKwlsZGRzcCBscixzcFs0XQorKwlsZGRzcCBscixzcFsyNTZdCisrCWxkZHNwIHIxMixzcFsyMF0KKysJbGRkc3Agcjksc3BbNDcyXQorKwkudGV4dAorKwkuZ2xvYmFsIGxkZHBjCisrbGRkcGM6CisrCWxkZHBjIHBjLHBjWzBdCisrCWxkZHBjIHIwLHBjWzUwOF0KKysJbGRkcGMgcjgscGNbMjU2XQorKwlsZGRwYyByNyxwY1syNTJdCisrCWxkZHBjIGxyLHBjWzRdCisrCWxkZHBjIHNwLHBjWzQ3Ml0KKysJbGRkcGMgcjYscGNbMTIwXQorKwlsZGRwYyByMTEscGNbMjhdCisrCS50ZXh0CisrCS5nbG9iYWwgc3Rkc3AKKytzdGRzcDoKKysJc3Rkc3Agc3BbMF0scGMKKysJc3Rkc3Agc3BbNTA4XSxyMTIKKysJc3Rkc3Agc3BbMjU2XSxyNQorKwlzdGRzcCBzcFsyNTJdLHI0CisrCXN0ZHNwIHNwWzRdLGxyCisrCXN0ZHNwIHNwWzMwNF0scGMKKysJc3Rkc3Agc3BbMjU2XSxyMAorKwlzdGRzcCBzcFszMzZdLHI1CisrCS50ZXh0CisrCS5nbG9iYWwgY3AyCisrY3AyOgorKwljcCBwYywwCisrCWNwIHIxMiwtMQorKwljcCByNSwtMzIKKysJY3AgcjQsMzEKKysJY3AgbHIsMQorKwljcCByOCwzCisrCWNwIGxyLDE2CisrCWNwIHI3LC0yNgorKwkudGV4dAorKwkuZ2xvYmFsIGFjcgorK2FjcjoKKysJYWNyIHBjCisrCWFjciByMTIKKysJYWNyIHI1CisrCWFjciByNAorKwlhY3IgbHIKKysJYWNyIHIyCisrCWFjciByMTIKKysJYWNyIHBjCisrCS50ZXh0CisrCS5nbG9iYWwgc2NyCisrc2NyOgorKwlzY3IgcGMKKysJc2NyIHIxMgorKwlzY3IgcjUKKysJc2NyIHI0CisrCXNjciBscgorKwlzY3IgcGMKKysJc2NyIHI2CisrCXNjciByMQorKwkudGV4dAorKwkuZ2xvYmFsIGNwYzAKKytjcGMwOgorKwljcGMgcGMKKysJY3BjIHIxMgorKwljcGMgcjUKKysJY3BjIHI0CisrCWNwYyBscgorKwljcGMgcGMKKysJY3BjIHI0CisrCWNwYyByOQorKwkudGV4dAorKwkuZ2xvYmFsIG5lZworK25lZzoKKysJbmVnIHBjCisrCW5lZyByMTIKKysJbmVnIHI1CisrCW5lZyByNAorKwluZWcgbHIKKysJbmVnIHI3CisrCW5lZyByMQorKwluZWcgcjkKKysJLnRleHQKKysJLmdsb2JhbCBhYnMKKythYnM6CisrCWFicyBwYworKwlhYnMgcjEyCisrCWFicyByNQorKwlhYnMgcjQKKysJYWJzIGxyCisrCWFicyByNgorKwlhYnMgcjYKKysJYWJzIHI0CisrCS50ZXh0CisrCS5nbG9iYWwgY2FzdHVfYgorK2Nhc3R1X2I6CisrCWNhc3R1LmIgcGMKKysJY2FzdHUuYiByMTIKKysJY2FzdHUuYiByNQorKwljYXN0dS5iIHI0CisrCWNhc3R1LmIgbHIKKysJY2FzdHUuYiByNworKwljYXN0dS5iIHNwCisrCWNhc3R1LmIgcjkKKysJLnRleHQKKysJLmdsb2JhbCBjYXN0c19iCisrY2FzdHNfYjoKKysJY2FzdHMuYiBwYworKwljYXN0cy5iIHIxMgorKwljYXN0cy5iIHI1CisrCWNhc3RzLmIgcjQKKysJY2FzdHMuYiBscgorKwljYXN0cy5iIHIxMQorKwljYXN0cy5iIHIxCisrCWNhc3RzLmIgcjEwCisrCS50ZXh0CisrCS5nbG9iYWwgY2FzdHVfaAorK2Nhc3R1X2g6CisrCWNhc3R1LmggcGMKKysJY2FzdHUuaCByMTIKKysJY2FzdHUuaCByNQorKwljYXN0dS5oIHI0CisrCWNhc3R1LmggbHIKKysJY2FzdHUuaCByMTAKKysJY2FzdHUuaCByMTEKKysJY2FzdHUuaCByMQorKwkudGV4dAorKwkuZ2xvYmFsIGNhc3RzX2gKKytjYXN0c19oOgorKwljYXN0cy5oIHBjCisrCWNhc3RzLmggcjEyCisrCWNhc3RzLmggcjUKKysJY2FzdHMuaCByNAorKwljYXN0cy5oIGxyCisrCWNhc3RzLmggcjAKKysJY2FzdHMuaCByNQorKwljYXN0cy5oIHI5CisrCS50ZXh0CisrCS5nbG9iYWwgYnJldgorK2JyZXY6CisrCWJyZXYgcGMKKysJYnJldiByMTIKKysJYnJldiByNQorKwlicmV2IHI0CisrCWJyZXYgbHIKKysJYnJldiByNQorKwlicmV2IHIxMAorKwlicmV2IHI4CisrCS50ZXh0CisrCS5nbG9iYWwgc3dhcF9oCisrc3dhcF9oOgorKwlzd2FwLmggcGMKKysJc3dhcC5oIHIxMgorKwlzd2FwLmggcjUKKysJc3dhcC5oIHI0CisrCXN3YXAuaCBscgorKwlzd2FwLmggcjcKKysJc3dhcC5oIHIwCisrCXN3YXAuaCByOAorKwkudGV4dAorKwkuZ2xvYmFsIHN3YXBfYgorK3N3YXBfYjoKKysJc3dhcC5iIHBjCisrCXN3YXAuYiByMTIKKysJc3dhcC5iIHI1CisrCXN3YXAuYiByNAorKwlzd2FwLmIgbHIKKysJc3dhcC5iIHIxMAorKwlzd2FwLmIgcjEyCisrCXN3YXAuYiByMQorKwkudGV4dAorKwkuZ2xvYmFsIHN3YXBfYmgKKytzd2FwX2JoOgorKwlzd2FwLmJoIHBjCisrCXN3YXAuYmggcjEyCisrCXN3YXAuYmggcjUKKysJc3dhcC5iaCByNAorKwlzd2FwLmJoIGxyCisrCXN3YXAuYmggcjkKKysJc3dhcC5iaCByNAorKwlzd2FwLmJoIHIxCisrCS50ZXh0CisrCS5nbG9iYWwgT25lX3NfY29tcGxpbWVudAorK09uZV9zX2NvbXBsaW1lbnQ6CisrCWNvbSBwYworKwljb20gcjEyCisrCWNvbSByNQorKwljb20gcjQKKysJY29tIGxyCisrCWNvbSByMgorKwljb20gcjIKKysJY29tIHI3CisrCS50ZXh0CisrCS5nbG9iYWwgdG5iegorK3RuYno6CisrCXRuYnogcGMKKysJdG5ieiByMTIKKysJdG5ieiByNQorKwl0bmJ6IHI0CisrCXRuYnogbHIKKysJdG5ieiByOAorKwl0bmJ6IHIxMgorKwl0bmJ6IHBjCisrCS50ZXh0CisrCS5nbG9iYWwgcm9sCisrcm9sOgorKwlyb2wgcGMKKysJcm9sIHIxMgorKwlyb2wgcjUKKysJcm9sIHI0CisrCXJvbCBscgorKwlyb2wgcjEwCisrCXJvbCByOQorKwlyb2wgcjUKKysJLnRleHQKKysJLmdsb2JhbCByb3IKKytyb3I6CisrCXJvciBwYworKwlyb3IgcjEyCisrCXJvciByNQorKwlyb3IgcjQKKysJcm9yIGxyCisrCXJvciByOAorKwlyb3IgcjQKKysJcm9yIHI3CisrCS50ZXh0CisrCS5nbG9iYWwgaWNhbGwKKytpY2FsbDoKKysJaWNhbGwgcGMKKysJaWNhbGwgcjEyCisrCWljYWxsIHI1CisrCWljYWxsIHI0CisrCWljYWxsIGxyCisrCWljYWxsIHIzCisrCWljYWxsIHIxCisrCWljYWxsIHIzCisrCS50ZXh0CisrCS5nbG9iYWwgbXVzdHIKKyttdXN0cjoKKysJbXVzdHIgcGMKKysJbXVzdHIgcjEyCisrCW11c3RyIHI1CisrCW11c3RyIHI0CisrCW11c3RyIGxyCisrCW11c3RyIHIxCisrCW11c3RyIHI0CisrCW11c3RyIHIxMgorKwkudGV4dAorKwkuZ2xvYmFsIG11c2ZyCisrbXVzZnI6CisrCW11c2ZyIHBjCisrCW11c2ZyIHIxMgorKwltdXNmciByNQorKwltdXNmciByNAorKwltdXNmciBscgorKwltdXNmciByMTEKKysJbXVzZnIgcjEyCisrCW11c2ZyIHIyCisrCS50ZXh0CisrCS5nbG9iYWwgcmV0X2NvbmQKKytyZXRfY29uZDoKKysJcmV0ZXEgcGMKKysJcmV0YWwgcjEyCisrCXJldGxzIHI1CisrCXJldHBsIHI0CisrCXJldG5lIGxyCisrCXJldGd0IHIwCisrCXJldGd0IHIxMgorKwlyZXRnZSByMTAKKysJLnRleHQKKysJLmdsb2JhbCBzcl9jb25kCisrc3JfY29uZDoKKysJc3JlcSBwYworKwlzcmFsIHIxMgorKwlzcmxzIHI1CisrCXNycGwgcjQKKysJc3JuZSBscgorKwlzcmx0IHIwCisrCXNyYWwgc3AKKysJc3JnZSByOQorKwkudGV4dAorKwkuZ2xvYmFsIGxkX3czCisrbGRfdzM6CisrCWxkLncgcGMscGNbMF0KKysJbGQudyByMTIscjEyWzEyNF0KKysJbGQudyByNSxyNVs2NF0KKysJbGQudyByNCxyNFs2MF0KKysJbGQudyBscixscls0XQorKwlsZC53IHNwLHIyWzUyXQorKwlsZC53IHI5LHIxWzhdCisrCWxkLncgcjUsc3BbNjBdCisrCS50ZXh0CisrCS5nbG9iYWwgbGRfc2gzCisrbGRfc2gzOgorKwlsZC5zaCBwYyxwY1swXQorKwlsZC5zaCByMTIscjEyWzE0XQorKwlsZC5zaCByNSxyNVs4XQorKwlsZC5zaCByNCxyNFs2XQorKwlsZC5zaCBscixsclsyXQorKwlsZC5zaCByNCxyMls4XQorKwlsZC5zaCBzcCxsclsxMF0KKysJbGQuc2ggcjIscjExWzJdCisrCS50ZXh0CisrCS5nbG9iYWwgbGRfdWgzCisrbGRfdWgzOgorKwlsZC51aCBwYyxwY1swXQorKwlsZC51aCByMTIscjEyWzE0XQorKwlsZC51aCByNSxyNVs4XQorKwlsZC51aCByNCxyNFs2XQorKwlsZC51aCBscixsclsyXQorKwlsZC51aCByMTAscjBbMTBdCisrCWxkLnVoIHI4LHIxMVs4XQorKwlsZC51aCByMTAscjJbMTJdCisrCS50ZXh0CisrCS5nbG9iYWwgc3RfdzMKKytzdF93MzoKKysJc3QudyBwY1swXSxwYworKwlzdC53IHIxMls2MF0scjEyCisrCXN0LncgcjVbMzJdLHI1CisrCXN0LncgcjRbMjhdLHI0CisrCXN0LncgbHJbNF0sbHIKKysJc3QudyByN1s0NF0scjExCisrCXN0LncgcjJbMjRdLHI2CisrCXN0LncgcjRbMTJdLHI5CisrCS50ZXh0CisrCS5nbG9iYWwgc3RfaDMKKytzdF9oMzoKKysJc3QuaCBwY1swXSxwYworKwlzdC5oIHIxMlsxNF0scjEyCisrCXN0LmggcjVbOF0scjUKKysJc3QuaCByNFs2XSxyNAorKwlzdC5oIGxyWzJdLGxyCisrCXN0LmggbHJbMTBdLHIxMgorKwlzdC5oIHI2WzRdLHIwCisrCXN0LmggcjVbMTJdLHNwCisrCS50ZXh0CisrCS5nbG9iYWwgc3RfYjMKKytzdF9iMzoKKysJc3QuYiBwY1swXSxwYworKwlzdC5iIHIxMls3XSxyMTIKKysJc3QuYiByNVs0XSxyNQorKwlzdC5iIHI0WzNdLHI0CisrCXN0LmIgbHJbMV0sbHIKKysJc3QuYiByMTJbNl0scjkKKysJc3QuYiByMlszXSxscgorKwlzdC5iIHIxWzNdLHIxMQorKwkudGV4dAorKwkuZ2xvYmFsIGxkZAorK2xkZDoKKysJbGQuZCByMCxwYworKwlsZC5kIHIxNCxyMTIKKysJbGQuZCByOCxyNQorKwlsZC5kIHI2LHI0CisrCWxkLmQgcjIsbHIKKysJbGQuZCByMTQscjcKKysJbGQuZCByNCxyNAorKwlsZC5kIHIxNCxwYworKwkudGV4dAorKwkuZ2xvYmFsIGxkZF9wb3N0aW5jCisrbGRkX3Bvc3RpbmM6CisrCWxkLmQgcjAscGMrKworKwlsZC5kIHIxNCxyMTIrKworKwlsZC5kIHI4LHI1KysKKysJbGQuZCByNixyNCsrCisrCWxkLmQgcjIsbHIrKworKwlsZC5kIHIxNCxyNSsrCisrCWxkLmQgcjEyLHIxMSsrCisrCWxkLmQgcjIscjEyKysKKysJLnRleHQKKysJLmdsb2JhbCBsZGRfcHJlZGVjCisrbGRkX3ByZWRlYzoKKysJbGQuZCByMCwtLXBjCisrCWxkLmQgcjE0LC0tcjEyCisrCWxkLmQgcjgsLS1yNQorKwlsZC5kIHI2LC0tcjQKKysJbGQuZCByMiwtLWxyCisrCWxkLmQgcjgsLS1yMAorKwlsZC5kIHIxMCwtLXBjCisrCWxkLmQgcjIsLS1yNAorKwkudGV4dAorKwkuZ2xvYmFsIHN0ZAorK3N0ZDoKKysJc3QuZCBwYyxyMAorKwlzdC5kIHIxMixyMTQKKysJc3QuZCByNSxyOAorKwlzdC5kIHI0LHI2CisrCXN0LmQgbHIscjIKKysJc3QuZCByMCxyMTIKKysJc3QuZCBzcCxyNAorKwlzdC5kIHIxMixyMTIKKysJLnRleHQKKysJLmdsb2JhbCBzdGRfcG9zdGluYworK3N0ZF9wb3N0aW5jOgorKwlzdC5kIHBjKysscjAKKysJc3QuZCByMTIrKyxyMTQKKysJc3QuZCByNSsrLHI4CisrCXN0LmQgcjQrKyxyNgorKwlzdC5kIGxyKysscjIKKysJc3QuZCBzcCsrLHI2CisrCXN0LmQgcjEwKysscjYKKysJc3QuZCByNysrLHIyCisrCS50ZXh0CisrCS5nbG9iYWwgc3RkX3ByZWRlYworK3N0ZF9wcmVkZWM6CisrCXN0LmQgLS1wYyxyMAorKwlzdC5kIC0tcjEyLHIxNAorKwlzdC5kIC0tcjUscjgKKysJc3QuZCAtLXI0LHI2CisrCXN0LmQgLS1scixyMgorKwlzdC5kIC0tcjMscjYKKysJc3QuZCAtLWxyLHIyCisrCXN0LmQgLS1yMCxyNAorKwkudGV4dAorKwkuZ2xvYmFsIG11bAorK211bDoKKysJbXVsIHBjLHBjCisrCW11bCByMTIscjEyCisrCW11bCByNSxyNQorKwltdWwgcjQscjQKKysJbXVsIGxyLGxyCisrCW11bCByMTAsbHIKKysJbXVsIHIwLHI4CisrCW11bCByOCxyNQorKwkudGV4dAorKwkuZ2xvYmFsIGFzcl9pbW01CisrYXNyX2ltbTU6CisrCWFzciBwYywwCisrCWFzciByMTIsMzEKKysJYXNyIHI1LDE2CisrCWFzciByNCwxNQorKwlhc3IgbHIsMQorKwlhc3IgcjYsMjMKKysJYXNyIHI2LDE4CisrCWFzciByNSw4CisrCS50ZXh0CisrCS5nbG9iYWwgbHNsX2ltbTUKKytsc2xfaW1tNToKKysJbHNsIHBjLDAKKysJbHNsIHIxMiwzMQorKwlsc2wgcjUsMTYKKysJbHNsIHI0LDE1CisrCWxzbCBsciwxCisrCWxzbCByMTIsMTMKKysJbHNsIHI2LDE2CisrCWxzbCByMSwyNQorKwkudGV4dAorKwkuZ2xvYmFsIGxzcl9pbW01CisrbHNyX2ltbTU6CisrCWxzciBwYywwCisrCWxzciByMTIsMzEKKysJbHNyIHI1LDE2CisrCWxzciByNCwxNQorKwlsc3IgbHIsMQorKwlsc3IgcjAsMQorKwlsc3IgcjgsMTAKKysJbHNyIHI3LDI2CisrCS50ZXh0CisrCS5nbG9iYWwgc2JyCisrc2JyOgorKwlzYnIgcGMsMAorKwlzYnIgcjEyLDMxCisrCXNiciByNSwxNgorKwlzYnIgcjQsMTUKKysJc2JyIGxyLDEKKysJc2JyIHI4LDMxCisrCXNiciByNiwyMgorKwlzYnIgcjEsMjMKKysJLnRleHQKKysJLmdsb2JhbCBjYnIKKytjYnI6CisrCWNiciBwYywwCisrCWNiciByMTIsMzEKKysJY2JyIHI1LDE2CisrCWNiciByNCwxNQorKwljYnIgbHIsMQorKwljYnIgcjEyLDEwCisrCWNiciByNywyMgorKwljYnIgcjgsOQorKwkudGV4dAorKwkuZ2xvYmFsIGJyYzEKKyticmMxOgorKwlicmVxIDAKKysJYnJwbCAtMgorKwlicmdlIC0yNTYKKysJYnJjcyAyNTQKKysJYnJuZSAyCisrCWJyY3MgMjMwCisrCWJyZXEgLTE4CisrCWJyZXEgMTIKKysJLnRleHQKKysJLmdsb2JhbCByam1wCisrcmptcDoKKysJcmptcCAwCisrCXJqbXAgLTIKKysJcmptcCAtMTAyNAorKwlyam1wIDEwMjIKKysJcmptcCAyCisrCXJqbXAgLTk2MgorKwlyam1wIDE0CisrCXJqbXAgLTUxNgorKwkudGV4dAorKwkuZ2xvYmFsIHJjYWxsMQorK3JjYWxsMToKKysJcmNhbGwgMAorKwlyY2FsbCAtMgorKwlyY2FsbCAtMTAyNAorKwlyY2FsbCAxMDIyCisrCXJjYWxsIDIKKysJcmNhbGwgMjE2CisrCXJjYWxsIC01MzAKKysJcmNhbGwgLTk3MgorKwkudGV4dAorKwkuZ2xvYmFsIGFjYWxsCisrYWNhbGw6CisrCWFjYWxsIDAKKysJYWNhbGwgMTAyMAorKwlhY2FsbCA1MTIKKysJYWNhbGwgNTA4CisrCWFjYWxsIDQKKysJYWNhbGwgMzU2CisrCWFjYWxsIDMwNAorKwlhY2FsbCAxNzIKKysJLnRleHQKKysJLmdsb2JhbCBzY2FsbAorK3NjYWxsOgorKwlzY2FsbAorKwlzY2FsbAorKwlzY2FsbAorKwlzY2FsbAorKwlzY2FsbAorKwlzY2FsbAorKwlzY2FsbAorKwlzY2FsbAorKwkudGV4dAorKwkuZ2xvYmFsIHBvcG0KKytwb3BtOgorKwkvKiBwb3BtIHdpdGggbm8gYXJndW1lbnQgZmFpbHMgY3VycmVudGx5ICovCisrCXBvcG0gcGMKKysJcG9wbSByMC1yMTEscGMscjEyPS0xCisrCXBvcG0gbHIKKysJcG9wbSByMC1yMTEscGMscjEyPTEKKysJcG9wbSByMC1yMworKwlwb3BtIHI0LXIxMCxwYworKwlwb3BtIHIwLXIzLHIxMSxwYyxyMTI9MAorKwlwb3BtIHIwLXI3LHIxMC1yMTIsbHIKKysJLnRleHQKKysJLmdsb2JhbCBwdXNobQorK3B1c2htOgorKwlwdXNobSBwYworKwlwdXNobSByMC1yMTIsbHIscGMKKysJcHVzaG0gcGMKKysJcHVzaG0gcjAtcjEyLGxyCisrCXB1c2htIHIwLXIzCisrCXB1c2htIHI4LXIxMCxscixwYworKwlwdXNobSByMC1yMyxyMTAKKysJcHVzaG0gcjgtcjkscjEyCisrCS50ZXh0CisrCS5nbG9iYWwgcG9wbV9uCisrcG9wbV9uOgorKwlwb3BtIHBjCisrCXBvcG0gcjAtcjExLHBjLHIxMj0tMQorKwlwb3BtIGxyCisrCXBvcG0gcjAtcjExLHBjLHIxMj0xCisrCXBvcG0gcjAtcjMKKysJcG9wbSByNC1yMTAscGMKKysJcG9wbSByMC1yMyxyMTEscGMscjEyPTAKKysJcG9wbSByMC1yNyxyMTAtcjEyLGxyCisrCS50ZXh0CisrCS5nbG9iYWwgcHVzaG1fbgorK3B1c2htX246CisrCXB1c2htIHBjCisrCXB1c2htIHIwLXIxMixscixwYworKwlwdXNobSBwYworKwlwdXNobSByMC1yMTIsbHIKKysJcHVzaG0gcjAtcjMKKysJcHVzaG0gcjgtcjEwLGxyLHBjCisrCXB1c2htIHIwLXIzLHIxMAorKwlwdXNobSByOC1yOSxyMTIKKysJLnRleHQKKysJLmdsb2JhbCBjc3JmY3oKKytjc3JmY3o6CisrCWNzcmZjeiAwCisrCWNzcmZjeiAzMQorKwljc3JmY3ogMTYKKysJY3NyZmN6IDE1CisrCWNzcmZjeiAxCisrCWNzcmZjeiA1CisrCWNzcmZjeiAxMworKwljc3JmY3ogMjMKKysJLnRleHQKKysJLmdsb2JhbCBzc3JmCisrc3NyZjoKKysJc3NyZiAwCisrCXNzcmYgMzEKKysJc3NyZiAxNgorKwlzc3JmIDE1CisrCXNzcmYgMQorKwlzc3JmIDI5CisrCXNzcmYgMTMKKysJc3NyZiAxMworKwkudGV4dAorKwkuZ2xvYmFsIGNzcmYKKytjc3JmOgorKwljc3JmIDAKKysJY3NyZiAzMQorKwljc3JmIDE2CisrCWNzcmYgMTUKKysJY3NyZiAxCisrCWNzcmYgMTAKKysJY3NyZiAxNQorKwljc3JmIDExCisrCS50ZXh0CisrCS5nbG9iYWwgcmV0ZQorK3JldGU6CisrCXJldGUKKysJLnRleHQKKysJLmdsb2JhbCByZXRzCisrcmV0czoKKysJcmV0cworKwkudGV4dAorKwkuZ2xvYmFsIHJldGQKKytyZXRkOgorKwlyZXRkCisrCS50ZXh0CisrCS5nbG9iYWwgcmV0agorK3JldGo6CisrCXJldGoKKysJLnRleHQKKysJLmdsb2JhbCB0bGJyCisrdGxicjoKKysJdGxicgorKwkudGV4dAorKwkuZ2xvYmFsIHRsYnMKKyt0bGJzOgorKwl0bGJzCisrCS50ZXh0CisrCS5nbG9iYWwgdGxidworK3RsYnc6CisrCXRsYncKKysJLnRleHQKKysJLmdsb2JhbCBicmVha3BvaW50CisrYnJlYWtwb2ludDoKKysJYnJlYWtwb2ludAorKwkudGV4dAorKwkuZ2xvYmFsIGluY2pvc3AKKytpbmNqb3NwOgorKwlpbmNqb3NwIDEKKysJaW5jam9zcCAyCisrCWluY2pvc3AgMworKwlpbmNqb3NwIDQKKysJaW5jam9zcCAtNAorKwlpbmNqb3NwIC0zCisrCWluY2pvc3AgLTIKKysJaW5jam9zcCAtMQorKwkudGV4dAorKwkuZ2xvYmFsIG5vcAorK25vcDoKKysJbm9wCisrCS50ZXh0CisrCS5nbG9iYWwgcG9wamMKKytwb3BqYzoKKysJcG9wamMKKysJLnRleHQKKysJLmdsb2JhbCBwdXNoamMKKytwdXNoamM6CisrCXB1c2hqYworKwkudGV4dAorKwkuZ2xvYmFsIGFkZDIKKythZGQyOgorKwlhZGQgcGMscGMscGM8PDAKKysJYWRkIHIxMixyMTIscjEyPDwzCisrCWFkZCByNSxyNSxyNTw8MgorKwlhZGQgcjQscjQscjQ8PDEKKysJYWRkIGxyLGxyLGxyPDwxCisrCWFkZCByMCxyMTIscjA8PDEKKysJYWRkIHI5LHIxMixyNDw8MAorKwlhZGQgcjEyLHIxMixyNzw8MgorKwkudGV4dAorKwkuZ2xvYmFsIHN1YjIKKytzdWIyOgorKwlzdWIgcGMscGMscGM8PDAKKysJc3ViIHIxMixyMTIscjEyPDwzCisrCXN1YiByNSxyNSxyNTw8MgorKwlzdWIgcjQscjQscjQ8PDEKKysJc3ViIGxyLGxyLGxyPDwxCisrCXN1YiBzcCxyMyxyNDw8MAorKwlzdWIgcjMscjcscjM8PDAKKysJc3ViIHNwLHIxMCxzcDw8MQorKwkudGV4dAorKwkuZ2xvYmFsIGRpdnUKKytkaXZ1OgorKwlkaXZ1IHBjLHBjLHBjCisrCWRpdnUgcjEyLHIxMixyMTIKKysJZGl2dSByNSxyNSxyNQorKwlkaXZ1IHI0LHI0LHI0CisrCWRpdnUgbHIsbHIsbHIKKysJZGl2dSBzcCxyNCxwYworKwlkaXZ1IHI1LHI1LHNwCisrCWRpdnUgcjEwLHNwLHIwCisrCS50ZXh0CisrCS5nbG9iYWwgYWRkaGhfdworK2FkZGhoX3c6CisrCWFkZGhoLncgcGMscGM6YixwYzpiCisrCWFkZGhoLncgcjEyLHIxMjp0LHIxMjp0CisrCWFkZGhoLncgcjUscjU6dCxyNTp0CisrCWFkZGhoLncgcjQscjQ6YixyNDpiCisrCWFkZGhoLncgbHIsbHI6dCxscjp0CisrCWFkZGhoLncgcjAscjA6YixyMzpiCisrCWFkZGhoLncgbHIscjEyOnQscjc6YgorKwlhZGRoaC53IHIzLHIxMDp0LHIyOmIKKysJLnRleHQKKysJLmdsb2JhbCBzdWJoaF93Cisrc3ViaGhfdzoKKysJc3ViaGgudyBwYyxwYzpiLHBjOmIKKysJc3ViaGgudyByMTIscjEyOnQscjEyOnQKKysJc3ViaGgudyByNSxyNTp0LHI1OnQKKysJc3ViaGgudyByNCxyNDpiLHI0OmIKKysJc3ViaGgudyBscixscjp0LGxyOnQKKysJc3ViaGgudyByMTAscjE6dCxyNzpiCisrCXN1YmhoLncgcGMscjEwOnQsbHI6dAorKwlzdWJoaC53IHIzLHIwOnQscjEyOmIKKysJLnRleHQKKysJLmdsb2JhbCBhZGMKKythZGM6CisrCWFkYyBwYyxwYyxwYworKwlhZGMgcjEyLHIxMixyMTIKKysJYWRjIHI1LHI1LHI1CisrCWFkYyByNCxyNCxyNAorKwlhZGMgbHIsbHIsbHIKKysJYWRjIHI0LHIwLHI3CisrCWFkYyBzcCxyNCxyMworKwlhZGMgcjIscjEyLHIwCisrCS50ZXh0CisrCS5nbG9iYWwgc2JjCisrc2JjOgorKwlzYmMgcGMscGMscGMKKysJc2JjIHIxMixyMTIscjEyCisrCXNiYyByNSxyNSxyNQorKwlzYmMgcjQscjQscjQKKysJc2JjIGxyLGxyLGxyCisrCXNiYyByNixyNyxyOQorKwlzYmMgcjAscjgscjUKKysJc2JjIHIxLHIwLHI0CisrCS50ZXh0CisrCS5nbG9iYWwgbXVsXzIKKyttdWxfMjoKKysJbXVsIHBjLHBjLHBjCisrCW11bCByMTIscjEyLHIxMgorKwltdWwgcjUscjUscjUKKysJbXVsIHI0LHI0LHI0CisrCW11bCBscixscixscgorKwltdWwgcGMscjAscjAKKysJbXVsIHI4LHBjLGxyCisrCW11bCByNCxyMTIscGMKKysJLnRleHQKKysJLmdsb2JhbCBtYWMKKyttYWM6CisrCW1hYyBwYyxwYyxwYworKwltYWMgcjEyLHIxMixyMTIKKysJbWFjIHI1LHI1LHI1CisrCW1hYyByNCxyNCxyNAorKwltYWMgbHIsbHIsbHIKKysJbWFjIHIxMCxyNCxyMAorKwltYWMgcjcsbHIscjAKKysJbWFjIHIyLHI5LHIxMgorKwkudGV4dAorKwkuZ2xvYmFsIG11bHNkCisrbXVsc2Q6CisrCW11bHMuZCBwYyxwYyxwYworKwltdWxzLmQgcjEyLHIxMixyMTIKKysJbXVscy5kIHI1LHI1LHI1CisrCW11bHMuZCByNCxyNCxyNAorKwltdWxzLmQgbHIsbHIsbHIKKysJbXVscy5kIHIyLHI4LGxyCisrCW11bHMuZCByNCxyMCxyMTEKKysJbXVscy5kIHI1LGxyLHI2CisrCS50ZXh0CisrCS5nbG9iYWwgbWFjc2QKKyttYWNzZDoKKysJbWFjcy5kIHIwLHBjLHBjCisrCW1hY3MuZCByMTQscjEyLHIxMgorKwltYWNzLmQgcjgscjUscjUKKysJbWFjcy5kIHI2LHI0LHI0CisrCW1hY3MuZCByMixscixscgorKwltYWNzLmQgcjgscjEscjkKKysJbWFjcy5kIHIxNCxyOCxyOAorKwltYWNzLmQgcjQscjMscjEyCisrCS50ZXh0CisrCS5nbG9iYWwgbXVsdWQKKyttdWx1ZDoKKysJbXVsdS5kIHIwLHBjLHBjCisrCW11bHUuZCByMTQscjEyLHIxMgorKwltdWx1LmQgcjgscjUscjUKKysJbXVsdS5kIHI2LHI0LHI0CisrCW11bHUuZCByMixscixscgorKwltdWx1LmQgcjYscjUscjAKKysJbXVsdS5kIHI0LHI2LHIxCisrCW11bHUuZCByOCxyOCxyMgorKwkudGV4dAorKwkuZ2xvYmFsIG1hY3VkCisrbWFjdWQ6CisrCW1hY3UuZCByMCxwYyxwYworKwltYWN1LmQgcjE0LHIxMixyMTIKKysJbWFjdS5kIHI4LHI1LHI1CisrCW1hY3UuZCByNixyNCxyNAorKwltYWN1LmQgcjIsbHIsbHIKKysJbWFjdS5kIHI2LHNwLHIxMQorKwltYWN1LmQgcjIscjQscjgKKysJbWFjdS5kIHI2LHIxMCxyOQorKwkudGV4dAorKwkuZ2xvYmFsIGFzcl8xCisrYXNyXzE6CisrCWFzciBwYyxwYyxwYworKwlhc3IgcjEyLHIxMixyMTIKKysJYXNyIHI1LHI1LHI1CisrCWFzciByNCxyNCxyNAorKwlhc3IgbHIsbHIsbHIKKysJYXNyIHBjLHI2LHBjCisrCWFzciByMCxyNixyMTIKKysJYXNyIHI0LHNwLHIwCisrCS50ZXh0CisrCS5nbG9iYWwgbHNsXzEKKytsc2xfMToKKysJbHNsIHBjLHBjLHBjCisrCWxzbCByMTIscjEyLHIxMgorKwlsc2wgcjUscjUscjUKKysJbHNsIHI0LHI0LHI0CisrCWxzbCBscixscixscgorKwlsc2wgbHIscjUsbHIKKysJbHNsIHI1LHBjLHIzCisrCWxzbCByMSxwYyxyOQorKwkudGV4dAorKwkuZ2xvYmFsIGxzcl8xCisrbHNyXzE6CisrCWxzciBwYyxwYyxwYworKwlsc3IgcjEyLHIxMixyMTIKKysJbHNyIHI1LHI1LHI1CisrCWxzciByNCxyNCxyNAorKwlsc3IgbHIsbHIsbHIKKysJbHNyIHIyLHI0LHIxCisrCWxzciByNSxyMSxyNgorKwlsc3Igc3AscjYscjcKKysJLnRleHQKKysJLmdsb2JhbCB4Y2hnCisreGNoZzoKKysJeGNoZyBwYyxwYyxwYworKwl4Y2hnIHIxMixyMTIscjEyCisrCXhjaGcgcjUscjUscjUKKysJeGNoZyByNCxyNCxyNAorKwl4Y2hnIGxyLGxyLGxyCisrCXhjaGcgbHIscjQsc3AKKysJeGNoZyByMSxyNSxyMTIKKysJeGNoZyBscixyMTIscjAKKysJLnRleHQKKysJLmdsb2JhbCBtYXgKKyttYXg6CisrCW1heCBwYyxwYyxwYworKwltYXggcjEyLHIxMixyMTIKKysJbWF4IHI1LHI1LHI1CisrCW1heCByNCxyNCxyNAorKwltYXggbHIsbHIsbHIKKysJbWF4IGxyLHIyLHNwCisrCW1heCByNCxyMTAscjkKKysJbWF4IGxyLHI5LGxyCisrCS50ZXh0CisrCS5nbG9iYWwgbWluCisrbWluOgorKwltaW4gcGMscGMscGMKKysJbWluIHIxMixyMTIscjEyCisrCW1pbiByNSxyNSxyNQorKwltaW4gcjQscjQscjQKKysJbWluIGxyLGxyLGxyCisrCW1pbiByOSxyNyxyOAorKwltaW4gc3AscjUscjUKKysJbWluIHI0LHIxLHI0CisrCS50ZXh0CisrCS5nbG9iYWwgYWRkYWJzCisrYWRkYWJzOgorKwlhZGRhYnMgcGMscGMscGMKKysJYWRkYWJzIHIxMixyMTIscjEyCisrCWFkZGFicyByNSxyNSxyNQorKwlhZGRhYnMgcjQscjQscjQKKysJYWRkYWJzIGxyLGxyLGxyCisrCWFkZGFicyByNyxyMTAscjAKKysJYWRkYWJzIHI5LHI5LHI3CisrCWFkZGFicyByMixyOCxyMTIKKysJLnRleHQKKysJLmdsb2JhbCBtdWxuaGhfdworK211bG5oaF93OgorKwltdWxuaGgudyBwYyxwYzpiLHBjOmIKKysJbXVsbmhoLncgcjEyLHIxMjp0LHIxMjp0CisrCW11bG5oaC53IHI1LHI1OnQscjU6dAorKwltdWxuaGgudyByNCxyNDpiLHI0OmIKKysJbXVsbmhoLncgbHIsbHI6dCxscjp0CisrCW11bG5oaC53IHIxMSxzcDp0LHI5OmIKKysJbXVsbmhoLncgc3AscjQ6Yixscjp0CisrCW11bG5oaC53IHIxMixyMjp0LHIxMTpiCisrCS50ZXh0CisrCS5nbG9iYWwgbXVsbndoX2QKKyttdWxud2hfZDoKKysJbXVsbndoLmQgcjAscGMscGM6YgorKwltdWxud2guZCByMTQscjEyLHIxMjp0CisrCW11bG53aC5kIHI4LHI1LHI1OnQKKysJbXVsbndoLmQgcjYscjQscjQ6YgorKwltdWxud2guZCByMixscixscjp0CisrCW11bG53aC5kIHIxNCxyMyxyMjp0CisrCW11bG53aC5kIHI0LHI1LHI5OmIKKysJbXVsbndoLmQgcjEyLHI0LHI0OnQKKysJLnRleHQKKysJLmdsb2JhbCBtYWNoaF93CisrbWFjaGhfdzoKKysJbWFjaGgudyBwYyxwYzpiLHBjOmIKKysJbWFjaGgudyByMTIscjEyOnQscjEyOnQKKysJbWFjaGgudyByNSxyNTp0LHI1OnQKKysJbWFjaGgudyByNCxyNDpiLHI0OmIKKysJbWFjaGgudyBscixscjp0LGxyOnQKKysJbWFjaGgudyBscixyNTpiLHIxOnQKKysJbWFjaGgudyByOSxyNjpiLHI3OmIKKysJbWFjaGgudyByNSxscjp0LHIxMjpiCisrCS50ZXh0CisrCS5nbG9iYWwgbWFjaGhfZAorK21hY2hoX2Q6CisrCW1hY2hoLmQgcjAscGM6YixwYzpiCisrCW1hY2hoLmQgcjE0LHIxMjp0LHIxMjp0CisrCW1hY2hoLmQgcjgscjU6dCxyNTp0CisrCW1hY2hoLmQgcjYscjQ6YixyNDpiCisrCW1hY2hoLmQgcjIsbHI6dCxscjp0CisrCW1hY2hoLmQgcjEwLHIwOmIscjg6YgorKwltYWNoaC5kIHIxNCxyNDpiLHI1OnQKKysJbWFjaGguZCByOCxyMDpiLHI0OnQKKysJLnRleHQKKysJLmdsb2JhbCBtYWNzYXRoaF93CisrbWFjc2F0aGhfdzoKKysJbWFjc2F0aGgudyBwYyxwYzpiLHBjOmIKKysJbWFjc2F0aGgudyByMTIscjEyOnQscjEyOnQKKysJbWFjc2F0aGgudyByNSxyNTp0LHI1OnQKKysJbWFjc2F0aGgudyByNCxyNDpiLHI0OmIKKysJbWFjc2F0aGgudyBscixscjp0LGxyOnQKKysJbWFjc2F0aGgudyByNyxyNzp0LHBjOnQKKysJbWFjc2F0aGgudyByNCxyMjp0LHI0OmIKKysJbWFjc2F0aGgudyByNCxyODp0LHIzOnQKKysJLnRleHQKKysJLmdsb2JhbCBtdWxoaF93CisrbXVsaGhfdzoKKysJbXVsaGgudyBwYyxwYzpiLHBjOmIKKysJbXVsaGgudyByMTIscjEyOnQscjEyOnQKKysJbXVsaGgudyByNSxyNTp0LHI1OnQKKysJbXVsaGgudyByNCxyNDpiLHI0OmIKKysJbXVsaGgudyBscixscjp0LGxyOnQKKysJbXVsaGgudyByNyxyNDp0LHI5OmIKKysJbXVsaGgudyBwYyxyMzp0LHI3OnQKKysJbXVsaGgudyBwYyxyNDpiLHI5OnQKKysJLnRleHQKKysJLmdsb2JhbCBtdWxzYXRoaF9oCisrbXVsc2F0aGhfaDoKKysJbXVsc2F0aGguaCBwYyxwYzpiLHBjOmIKKysJbXVsc2F0aGguaCByMTIscjEyOnQscjEyOnQKKysJbXVsc2F0aGguaCByNSxyNTp0LHI1OnQKKysJbXVsc2F0aGguaCByNCxyNDpiLHI0OmIKKysJbXVsc2F0aGguaCBscixscjp0LGxyOnQKKysJbXVsc2F0aGguaCByMyxyMTpiLHNwOmIKKysJbXVsc2F0aGguaCByMTEsbHI6dCxyMTE6YgorKwltdWxzYXRoaC5oIHI4LHI4OmIscjExOnQKKysJLnRleHQKKysJLmdsb2JhbCBtdWxzYXRoaF93CisrbXVsc2F0aGhfdzoKKysJbXVsc2F0aGgudyBwYyxwYzpiLHBjOmIKKysJbXVsc2F0aGgudyByMTIscjEyOnQscjEyOnQKKysJbXVsc2F0aGgudyByNSxyNTp0LHI1OnQKKysJbXVsc2F0aGgudyByNCxyNDpiLHI0OmIKKysJbXVsc2F0aGgudyBscixscjp0LGxyOnQKKysJbXVsc2F0aGgudyBscixyMTE6dCxyNjpiCisrCW11bHNhdGhoLncgcjYscjY6YixyNzp0CisrCW11bHNhdGhoLncgcjEwLHIyOmIscjM6YgorKwkudGV4dAorKwkuZ2xvYmFsIG11bHNhdHJuZGhoX2gKKyttdWxzYXRybmRoaF9oOgorKwltdWxzYXRybmRoaC5oIHBjLHBjOmIscGM6YgorKwltdWxzYXRybmRoaC5oIHIxMixyMTI6dCxyMTI6dAorKwltdWxzYXRybmRoaC5oIHI1LHI1OnQscjU6dAorKwltdWxzYXRybmRoaC5oIHI0LHI0OmIscjQ6YgorKwltdWxzYXRybmRoaC5oIGxyLGxyOnQsbHI6dAorKwltdWxzYXRybmRoaC5oIHIxMSxyNjpiLHI5OmIKKysJbXVsc2F0cm5kaGguaCByMTEscjM6YixyODp0CisrCW11bHNhdHJuZGhoLmggcjUsc3A6dCxyNzp0CisrCS50ZXh0CisrCS5nbG9iYWwgbXVsc2F0cm5kd2hfdworK211bHNhdHJuZHdoX3c6CisrCW11bHNhdHJuZHdoLncgcGMscGMscGM6YgorKwltdWxzYXRybmR3aC53IHIxMixyMTIscjEyOnQKKysJbXVsc2F0cm5kd2gudyByNSxyNSxyNTp0CisrCW11bHNhdHJuZHdoLncgcjQscjQscjQ6YgorKwltdWxzYXRybmR3aC53IGxyLGxyLGxyOnQKKysJbXVsc2F0cm5kd2gudyByNSxyMTIscjA6YgorKwltdWxzYXRybmR3aC53IHI3LHIxMCxwYzpiCisrCW11bHNhdHJuZHdoLncgcjEwLHI4LHI1OnQKKysJLnRleHQKKysJLmdsb2JhbCBtYWN3aF9kCisrbWFjd2hfZDoKKysJbWFjd2guZCByMCxwYyxwYzpiCisrCW1hY3doLmQgcjE0LHIxMixyMTI6dAorKwltYWN3aC5kIHI4LHI1LHI1OnQKKysJbWFjd2guZCByNixyNCxyNDpiCisrCW1hY3doLmQgcjIsbHIsbHI6dAorKwltYWN3aC5kIHI0LHIxMCxyMTI6dAorKwltYWN3aC5kIHI0LHI3LHNwOmIKKysJbWFjd2guZCByMTQscjkscjExOmIKKysJLnRleHQKKysJLmdsb2JhbCBtdWx3aF9kCisrbXVsd2hfZDoKKysJbXVsd2guZCByMCxwYyxwYzpiCisrCW11bHdoLmQgcjE0LHIxMixyMTI6dAorKwltdWx3aC5kIHI4LHI1LHI1OnQKKysJbXVsd2guZCByNixyNCxyNDpiCisrCW11bHdoLmQgcjIsbHIsbHI6dAorKwltdWx3aC5kIHIxMixyNSxyMTpiCisrCW11bHdoLmQgcjAscjEscjM6dAorKwltdWx3aC5kIHIwLHI5LHIyOmIKKysJLnRleHQKKysJLmdsb2JhbCBtdWxzYXR3aF93CisrbXVsc2F0d2hfdzoKKysJbXVsc2F0d2gudyBwYyxwYyxwYzpiCisrCW11bHNhdHdoLncgcjEyLHIxMixyMTI6dAorKwltdWxzYXR3aC53IHI1LHI1LHI1OnQKKysJbXVsc2F0d2gudyByNCxyNCxyNDpiCisrCW11bHNhdHdoLncgbHIsbHIsbHI6dAorKwltdWxzYXR3aC53IHIxMSxwYyxyMTA6dAorKwltdWxzYXR3aC53IHNwLHIxMixyOTp0CisrCW11bHNhdHdoLncgcjAscjMscjI6dAorKwkudGV4dAorKwkuZ2xvYmFsIGxkdzcKKytsZHc3OgorKwlsZC53IHBjLHBjW3BjOmI8PDJdCisrCWxkLncgcjEyLHIxMltyMTI6dDw8Ml0KKysJbGQudyByNSxyNVtyNTp1PDwyXQorKwlsZC53IHI0LHI0W3I0Omw8PDJdCisrCWxkLncgbHIsbHJbbHI6bDw8Ml0KKysJbGQudyByOSxyMTBbcjY6bDw8Ml0KKysJbGQudyByMixyMTBbcjEwOmI8PDJdCisrCWxkLncgcjExLHI1W3BjOmI8PDJdCisrCS50ZXh0CisrCS5nbG9iYWwgc2F0YWRkX3cKKytzYXRhZGRfdzoKKysJc2F0YWRkLncgcGMscGMscGMKKysJc2F0YWRkLncgcjEyLHIxMixyMTIKKysJc2F0YWRkLncgcjUscjUscjUKKysJc2F0YWRkLncgcjQscjQscjQKKysJc2F0YWRkLncgbHIsbHIsbHIKKysJc2F0YWRkLncgcjQscjgscjExCisrCXNhdGFkZC53IHIzLHIxMixyNgorKwlzYXRhZGQudyByMyxscixyOQorKwkudGV4dAorKwkuZ2xvYmFsIHNhdHN1Yl93MQorK3NhdHN1Yl93MToKKysJc2F0c3ViLncgcGMscGMscGMKKysJc2F0c3ViLncgcjEyLHIxMixyMTIKKysJc2F0c3ViLncgcjUscjUscjUKKysJc2F0c3ViLncgcjQscjQscjQKKysJc2F0c3ViLncgbHIsbHIsbHIKKysJc2F0c3ViLncgcjgsc3AscjAKKysJc2F0c3ViLncgcjkscjgscjQKKysJc2F0c3ViLncgcGMsbHIscjIKKysJLnRleHQKKysJLmdsb2JhbCBzYXRhZGRfaAorK3NhdGFkZF9oOgorKwlzYXRhZGQuaCBwYyxwYyxwYworKwlzYXRhZGQuaCByMTIscjEyLHIxMgorKwlzYXRhZGQuaCByNSxyNSxyNQorKwlzYXRhZGQuaCByNCxyNCxyNAorKwlzYXRhZGQuaCBscixscixscgorKwlzYXRhZGQuaCByNyxyMyxyOQorKwlzYXRhZGQuaCByMSxyMCxyMgorKwlzYXRhZGQuaCByMSxyNCxscgorKwkudGV4dAorKwkuZ2xvYmFsIHNhdHN1Yl9oCisrc2F0c3ViX2g6CisrCXNhdHN1Yi5oIHBjLHBjLHBjCisrCXNhdHN1Yi5oIHIxMixyMTIscjEyCisrCXNhdHN1Yi5oIHI1LHI1LHI1CisrCXNhdHN1Yi5oIHI0LHI0LHI0CisrCXNhdHN1Yi5oIGxyLGxyLGxyCisrCXNhdHN1Yi5oIGxyLGxyLHIzCisrCXNhdHN1Yi5oIHIxMSxyNixyNQorKwlzYXRzdWIuaCByMyxzcCxyMAorKwkudGV4dAorKwkuZ2xvYmFsIG11bDMKKyttdWwzOgorKwltdWwgcGMscGMsMAorKwltdWwgcjEyLHIxMiwtMQorKwltdWwgcjUscjUsLTEyOAorKwltdWwgcjQscjQsMTI3CisrCW11bCBscixsciwxCisrCW11bCByMTIscjIsLTcKKysJbXVsIHIxLHBjLDk1CisrCW11bCByNCxyNiwxOQorKwkudGV4dAorKwkuZ2xvYmFsIHJzdWIyCisrcnN1YjI6CisrCXJzdWIgcGMscGMsMAorKwlyc3ViIHIxMixyMTIsLTEKKysJcnN1YiByNSxyNSwtMTI4CisrCXJzdWIgcjQscjQsMTI3CisrCXJzdWIgbHIsbHIsMQorKwlyc3ViIHI5LGxyLDk2CisrCXJzdWIgcjExLHIxLDU2CisrCXJzdWIgcjAscjcsLTg3CisrCS50ZXh0CisrCS5nbG9iYWwgY2x6CisrY2x6OgorKwljbHogcGMscGMKKysJY2x6IHIxMixyMTIKKysJY2x6IHI1LHI1CisrCWNseiByNCxyNAorKwljbHogbHIsbHIKKysJY2x6IHIyLHIzCisrCWNseiByNSxyMTEKKysJY2x6IHBjLHIzCisrCS50ZXh0CisrCS5nbG9iYWwgY3BjMQorK2NwYzE6CisrCWNwYyBwYyxwYworKwljcGMgcjEyLHIxMgorKwljcGMgcjUscjUKKysJY3BjIHI0LHI0CisrCWNwYyBscixscgorKwljcGMgcGMscjQKKysJY3BjIHI1LHI5CisrCWNwYyByNixyNworKwkudGV4dAorKwkuZ2xvYmFsIGFzcjMKKythc3IzOgorKwlhc3IgcGMscGMsMAorKwlhc3IgcjEyLHIxMiwzMQorKwlhc3IgcjUscjUsMTYKKysJYXNyIHI0LHI0LDE1CisrCWFzciBscixsciwxCisrCWFzciByNCxyMTEsMTkKKysJYXNyIHNwLHBjLDI2CisrCWFzciByMTEsc3AsOAorKwkudGV4dAorKwkuZ2xvYmFsIGxzbDMKKytsc2wzOgorKwlsc2wgcGMscGMsMAorKwlsc2wgcjEyLHIxMiwzMQorKwlsc2wgcjUscjUsMTYKKysJbHNsIHI0LHI0LDE1CisrCWxzbCBscixsciwxCisrCWxzbCByOCxyMTAsMTcKKysJbHNsIHIyLGxyLDMKKysJbHNsIGxyLHIxMSwxNAorKwkudGV4dAorKwkuZ2xvYmFsIGxzcjMKKytsc3IzOgorKwlsc3IgcGMscGMsMAorKwlsc3IgcjEyLHIxMiwzMQorKwlsc3IgcjUscjUsMTYKKysJbHNyIHI0LHI0LDE1CisrCWxzciBscixsciwxCisrCWxzciByNCxyMywzMQorKwlsc3IgcGMscjksMTQKKysJbHNyIHIzLHIwLDYKKysvKgkudGV4dAorKwkuZ2xvYmFsIGV4dHJhY3RfYgorK2V4dHJhY3RfYjoKKysJZXh0cmFjdC5iIHBjLHBjOmIKKysJZXh0cmFjdC5iIHIxMixyMTI6dAorKwlleHRyYWN0LmIgcjUscjU6dQorKwlleHRyYWN0LmIgcjQscjQ6bAorKwlleHRyYWN0LmIgbHIsbHI6bAorKwlleHRyYWN0LmIgcjIscjU6bAorKwlleHRyYWN0LmIgcjEyLHIzOmwKKysJZXh0cmFjdC5iIHNwLHIzOmwKKysJLnRleHQKKysJLmdsb2JhbCBpbnNlcnRfYgorK2luc2VydF9iOgorKwlpbnNlcnQuYiBwYzpiLHBjCisrCWluc2VydC5iIHIxMjp0LHIxMgorKwlpbnNlcnQuYiByNTp1LHI1CisrCWluc2VydC5iIHI0OmwscjQKKysJaW5zZXJ0LmIgbHI6bCxscgorKwlpbnNlcnQuYiByMTI6dSxyMworKwlpbnNlcnQuYiByMTA6bCxscgorKwlpbnNlcnQuYiByMTE6bCxyMTIKKysJLnRleHQKKysJLmdsb2JhbCBleHRyYWN0X2gKKytleHRyYWN0X2g6CisrCWV4dHJhY3QuaCBwYyxwYzpiCisrCWV4dHJhY3QuaCByMTIscjEyOnQKKysJZXh0cmFjdC5oIHI1LHI1OnQKKysJZXh0cmFjdC5oIHI0LHI0OmIKKysJZXh0cmFjdC5oIGxyLGxyOnQKKysJZXh0cmFjdC5oIHIxMSxscjpiCisrCWV4dHJhY3QuaCByMTAscjA6YgorKwlleHRyYWN0LmggcjExLHIxMjpiCisrCS50ZXh0CisrCS5nbG9iYWwgaW5zZXJ0X2gKKytpbnNlcnRfaDoKKysJaW5zZXJ0LmggcGM6YixwYworKwlpbnNlcnQuaCByMTI6dCxyMTIKKysJaW5zZXJ0LmggcjU6dCxyNQorKwlpbnNlcnQuaCByNDpiLHI0CisrCWluc2VydC5oIGxyOnQsbHIKKysJaW5zZXJ0LmggcjEyOnQscjExCisrCWluc2VydC5oIHI3OmIscjYKKysJaW5zZXJ0LmggcjE6dCxyMTEgKi8KKysJLnRleHQKKysJLmdsb2JhbCBtb3ZjMQorK21vdmMxOgorKwltb3ZlcSBwYyxwYworKwltb3ZhbCByMTIscjEyCisrCW1vdmxzIHI1LHI1CisrCW1vdnBsIHI0LHI0CisrCW1vdm5lIGxyLGxyCisrCW1vdm5lIHBjLHIxMQorKwltb3ZtaSByMTAscjIKKysJbW92bHMgcjgscjEyCisrCS50ZXh0CisrCS5nbG9iYWwgcGFkZF9oCisrcGFkZF9oOgorKwlwYWRkLmggcGMscGMscGMKKysJcGFkZC5oIHIxMixyMTIscjEyCisrCXBhZGQuaCByNSxyNSxyNQorKwlwYWRkLmggcjQscjQscjQKKysJcGFkZC5oIGxyLGxyLGxyCisrCXBhZGQuaCByOCxyMixyNworKwlwYWRkLmggcjAscjAscjMKKysJcGFkZC5oIHNwLHIxMSxyNgorKwkudGV4dAorKwkuZ2xvYmFsIHBzdWJfaAorK3BzdWJfaDoKKysJcHN1Yi5oIHBjLHBjLHBjCisrCXBzdWIuaCByMTIscjEyLHIxMgorKwlwc3ViLmggcjUscjUscjUKKysJcHN1Yi5oIHI0LHI0LHI0CisrCXBzdWIuaCBscixscixscgorKwlwc3ViLmggbHIscjYscjgKKysJcHN1Yi5oIHIwLHIxLHNwCisrCXBzdWIuaCBwYyxwYyxzcAorKwkudGV4dAorKwkuZ2xvYmFsIHBhZGR4X2gKKytwYWRkeF9oOgorKwlwYWRkeC5oIHBjLHBjLHBjCisrCXBhZGR4LmggcjEyLHIxMixyMTIKKysJcGFkZHguaCByNSxyNSxyNQorKwlwYWRkeC5oIHI0LHI0LHI0CisrCXBhZGR4LmggbHIsbHIsbHIKKysJcGFkZHguaCBwYyxwYyxyMQorKwlwYWRkeC5oIHIxMCxyNCxyNQorKwlwYWRkeC5oIHI1LHBjLHIyCisrCS50ZXh0CisrCS5nbG9iYWwgcHN1YnhfaAorK3BzdWJ4X2g6CisrCXBzdWJ4LmggcGMscGMscGMKKysJcHN1YnguaCByMTIscjEyLHIxMgorKwlwc3VieC5oIHI1LHI1LHI1CisrCXBzdWJ4LmggcjQscjQscjQKKysJcHN1YnguaCBscixscixscgorKwlwc3VieC5oIHI1LHIxMixyNQorKwlwc3VieC5oIHIzLHI4LHIzCisrCXBzdWJ4LmggcjUscjIscjMKKysJLnRleHQKKysJLmdsb2JhbCBwYWRkc19zaAorK3BhZGRzX3NoOgorKwlwYWRkcy5zaCBwYyxwYyxwYworKwlwYWRkcy5zaCByMTIscjEyLHIxMgorKwlwYWRkcy5zaCByNSxyNSxyNQorKwlwYWRkcy5zaCByNCxyNCxyNAorKwlwYWRkcy5zaCBscixscixscgorKwlwYWRkcy5zaCByOSxscixyMgorKwlwYWRkcy5zaCByNixyOCxyMQorKwlwYWRkcy5zaCByNixyNCxyMTAKKysJLnRleHQKKysJLmdsb2JhbCBwc3Vic19zaAorK3BzdWJzX3NoOgorKwlwc3Vicy5zaCBwYyxwYyxwYworKwlwc3Vicy5zaCByMTIscjEyLHIxMgorKwlwc3Vicy5zaCByNSxyNSxyNQorKwlwc3Vicy5zaCByNCxyNCxyNAorKwlwc3Vicy5zaCBscixscixscgorKwlwc3Vicy5zaCByNixscixyMTEKKysJcHN1YnMuc2ggcjIscjEyLHI0CisrCXBzdWJzLnNoIHIwLHI5LHIwCisrCS50ZXh0CisrCS5nbG9iYWwgcGFkZHhzX3NoCisrcGFkZHhzX3NoOgorKwlwYWRkeHMuc2ggcGMscGMscGMKKysJcGFkZHhzLnNoIHIxMixyMTIscjEyCisrCXBhZGR4cy5zaCByNSxyNSxyNQorKwlwYWRkeHMuc2ggcjQscjQscjQKKysJcGFkZHhzLnNoIGxyLGxyLGxyCisrCXBhZGR4cy5zaCByMCxyMyxyOQorKwlwYWRkeHMuc2ggcGMscjEwLHIxMQorKwlwYWRkeHMuc2ggcGMscjEwLHBjCisrCS50ZXh0CisrCS5nbG9iYWwgcHN1YnhzX3NoCisrcHN1YnhzX3NoOgorKwlwc3VieHMuc2ggcGMscGMscGMKKysJcHN1YnhzLnNoIHIxMixyMTIscjEyCisrCXBzdWJ4cy5zaCByNSxyNSxyNQorKwlwc3VieHMuc2ggcjQscjQscjQKKysJcHN1YnhzLnNoIGxyLGxyLGxyCisrCXBzdWJ4cy5zaCByNyxyNCxyNAorKwlwc3VieHMuc2ggcjcscjgscjMKKysJcHN1YnhzLnNoIHBjLHI2LHI1CisrCS50ZXh0CisrCS5nbG9iYWwgcGFkZHNfdWgKKytwYWRkc191aDoKKysJcGFkZHMudWggcGMscGMscGMKKysJcGFkZHMudWggcjEyLHIxMixyMTIKKysJcGFkZHMudWggcjUscjUscjUKKysJcGFkZHMudWggcjQscjQscjQKKysJcGFkZHMudWggbHIsbHIsbHIKKysJcGFkZHMudWggcjEyLHIxMSxyNworKwlwYWRkcy51aCByNyxyOCxscgorKwlwYWRkcy51aCByNixyOSxyNworKwkudGV4dAorKwkuZ2xvYmFsIHBzdWJzX3VoCisrcHN1YnNfdWg6CisrCXBzdWJzLnVoIHBjLHBjLHBjCisrCXBzdWJzLnVoIHIxMixyMTIscjEyCisrCXBzdWJzLnVoIHI1LHI1LHI1CisrCXBzdWJzLnVoIHI0LHI0LHI0CisrCXBzdWJzLnVoIGxyLGxyLGxyCisrCXBzdWJzLnVoIGxyLHIxMCxyNgorKwlwc3Vicy51aCBzcCxyMixwYworKwlwc3Vicy51aCByMixyOSxyMgorKwkudGV4dAorKwkuZ2xvYmFsIHBhZGR4c191aAorK3BhZGR4c191aDoKKysJcGFkZHhzLnVoIHBjLHBjLHBjCisrCXBhZGR4cy51aCByMTIscjEyLHIxMgorKwlwYWRkeHMudWggcjUscjUscjUKKysJcGFkZHhzLnVoIHI0LHI0LHI0CisrCXBhZGR4cy51aCBscixscixscgorKwlwYWRkeHMudWggcjcscjkscjUKKysJcGFkZHhzLnVoIHI5LHIxLHI0CisrCXBhZGR4cy51aCByNSxyMixyMworKwkudGV4dAorKwkuZ2xvYmFsIHBzdWJ4c191aAorK3BzdWJ4c191aDoKKysJcHN1YnhzLnVoIHBjLHBjLHBjCisrCXBzdWJ4cy51aCByMTIscjEyLHIxMgorKwlwc3VieHMudWggcjUscjUscjUKKysJcHN1YnhzLnVoIHI0LHI0LHI0CisrCXBzdWJ4cy51aCBscixscixscgorKwlwc3VieHMudWggc3AscjUsc3AKKysJcHN1YnhzLnVoIHNwLHI2LHI2CisrCXBzdWJ4cy51aCByMyxyMTEscjgKKysJLnRleHQKKysJLmdsb2JhbCBwYWRkaF9zaAorK3BhZGRoX3NoOgorKwlwYWRkaC5zaCBwYyxwYyxwYworKwlwYWRkaC5zaCByMTIscjEyLHIxMgorKwlwYWRkaC5zaCByNSxyNSxyNQorKwlwYWRkaC5zaCByNCxyNCxyNAorKwlwYWRkaC5zaCBscixscixscgorKwlwYWRkaC5zaCByMTIsc3AscjMKKysJcGFkZGguc2ggcGMscjUscjMKKysJcGFkZGguc2ggcjgscjgsc3AKKysJLnRleHQKKysJLmdsb2JhbCBwc3ViaF9zaAorK3BzdWJoX3NoOgorKwlwc3ViaC5zaCBwYyxwYyxwYworKwlwc3ViaC5zaCByMTIscjEyLHIxMgorKwlwc3ViaC5zaCByNSxyNSxyNQorKwlwc3ViaC5zaCByNCxyNCxyNAorKwlwc3ViaC5zaCBscixscixscgorKwlwc3ViaC5zaCByMSxyNSxyOAorKwlwc3ViaC5zaCByNyxyMyxyNgorKwlwc3ViaC5zaCByNCxyMyxyMworKwkudGV4dAorKwkuZ2xvYmFsIHBhZGR4aF9zaAorK3BhZGR4aF9zaDoKKysJcGFkZHhoLnNoIHBjLHBjLHBjCisrCXBhZGR4aC5zaCByMTIscjEyLHIxMgorKwlwYWRkeGguc2ggcjUscjUscjUKKysJcGFkZHhoLnNoIHI0LHI0LHI0CisrCXBhZGR4aC5zaCBscixscixscgorKwlwYWRkeGguc2ggcjYscjAscjQKKysJcGFkZHhoLnNoIHI5LHI4LHI5CisrCXBhZGR4aC5zaCByMyxyMCxzcAorKwkudGV4dAorKwkuZ2xvYmFsIHBzdWJ4aF9zaAorK3BzdWJ4aF9zaDoKKysJcHN1YnhoLnNoIHBjLHBjLHBjCisrCXBzdWJ4aC5zaCByMTIscjEyLHIxMgorKwlwc3VieGguc2ggcjUscjUscjUKKysJcHN1YnhoLnNoIHI0LHI0LHI0CisrCXBzdWJ4aC5zaCBscixscixscgorKwlwc3VieGguc2ggcjQscGMscjEyCisrCXBzdWJ4aC5zaCByOCxyNCxyNgorKwlwc3VieGguc2ggcjEyLHI5LHI0CisrCS50ZXh0CisrCS5nbG9iYWwgcGFkZHN1Yl9oCisrcGFkZHN1Yl9oOgorKwlwYWRkc3ViLmggcGMscGM6YixwYzpiCisrCXBhZGRzdWIuaCByMTIscjEyOnQscjEyOnQKKysJcGFkZHN1Yi5oIHI1LHI1OnQscjU6dAorKwlwYWRkc3ViLmggcjQscjQ6YixyNDpiCisrCXBhZGRzdWIuaCBscixscjp0LGxyOnQKKysJcGFkZHN1Yi5oIHI1LHIyOnQsbHI6YgorKwlwYWRkc3ViLmggcjcscjE6YixyODpiCisrCXBhZGRzdWIuaCByNixyMTA6dCxyNTp0CisrCS50ZXh0CisrCS5nbG9iYWwgcHN1YmFkZF9oCisrcHN1YmFkZF9oOgorKwlwc3ViYWRkLmggcGMscGM6YixwYzpiCisrCXBzdWJhZGQuaCByMTIscjEyOnQscjEyOnQKKysJcHN1YmFkZC5oIHI1LHI1OnQscjU6dAorKwlwc3ViYWRkLmggcjQscjQ6YixyNDpiCisrCXBzdWJhZGQuaCBscixscjp0LGxyOnQKKysJcHN1YmFkZC5oIHI5LHIxMTp0LHI4OnQKKysJcHN1YmFkZC5oIHIxMCxyNzp0LGxyOnQKKysJcHN1YmFkZC5oIHI2LHBjOnQscGM6YgorKwkudGV4dAorKwkuZ2xvYmFsIHBhZGRzdWJzX3NoCisrcGFkZHN1YnNfc2g6CisrCXBhZGRzdWJzLnNoIHBjLHBjOmIscGM6YgorKwlwYWRkc3Vicy5zaCByMTIscjEyOnQscjEyOnQKKysJcGFkZHN1YnMuc2ggcjUscjU6dCxyNTp0CisrCXBhZGRzdWJzLnNoIHI0LHI0OmIscjQ6YgorKwlwYWRkc3Vicy5zaCBscixscjp0LGxyOnQKKysJcGFkZHN1YnMuc2ggcjAsbHI6dCxyMDpiCisrCXBhZGRzdWJzLnNoIHI5LHIyOnQscjQ6dAorKwlwYWRkc3Vicy5zaCByMTIscjk6dCxzcDp0CisrCS50ZXh0CisrCS5nbG9iYWwgcHN1YmFkZHNfc2gKKytwc3ViYWRkc19zaDoKKysJcHN1YmFkZHMuc2ggcGMscGM6YixwYzpiCisrCXBzdWJhZGRzLnNoIHIxMixyMTI6dCxyMTI6dAorKwlwc3ViYWRkcy5zaCByNSxyNTp0LHI1OnQKKysJcHN1YmFkZHMuc2ggcjQscjQ6YixyNDpiCisrCXBzdWJhZGRzLnNoIGxyLGxyOnQsbHI6dAorKwlwc3ViYWRkcy5zaCBwYyxscjpiLHIxOnQKKysJcHN1YmFkZHMuc2ggcjExLHIzOmIscjEyOmIKKysJcHN1YmFkZHMuc2ggcjEwLHIyOnQscjg6dAorKwkudGV4dAorKwkuZ2xvYmFsIHBhZGRzdWJzX3VoCisrcGFkZHN1YnNfdWg6CisrCXBhZGRzdWJzLnVoIHBjLHBjOmIscGM6YgorKwlwYWRkc3Vicy51aCByMTIscjEyOnQscjEyOnQKKysJcGFkZHN1YnMudWggcjUscjU6dCxyNTp0CisrCXBhZGRzdWJzLnVoIHI0LHI0OmIscjQ6YgorKwlwYWRkc3Vicy51aCBscixscjp0LGxyOnQKKysJcGFkZHN1YnMudWggcjkscjI6YixyMzpiCisrCXBhZGRzdWJzLnVoIHNwLHNwOmIscjc6dAorKwlwYWRkc3Vicy51aCBscixyMDpiLHIxMDp0CisrCS50ZXh0CisrCS5nbG9iYWwgcHN1YmFkZHNfdWgKKytwc3ViYWRkc191aDoKKysJcHN1YmFkZHMudWggcGMscGM6YixwYzpiCisrCXBzdWJhZGRzLnVoIHIxMixyMTI6dCxyMTI6dAorKwlwc3ViYWRkcy51aCByNSxyNTp0LHI1OnQKKysJcHN1YmFkZHMudWggcjQscjQ6YixyNDpiCisrCXBzdWJhZGRzLnVoIGxyLGxyOnQsbHI6dAorKwlwc3ViYWRkcy51aCByMTIscjk6dCxwYzp0CisrCXBzdWJhZGRzLnVoIHI4LHI2OmIscjg6YgorKwlwc3ViYWRkcy51aCByOCxyODpiLHI0OmIKKysJLnRleHQKKysJLmdsb2JhbCBwYWRkc3ViaF9zaAorK3BhZGRzdWJoX3NoOgorKwlwYWRkc3ViaC5zaCBwYyxwYzpiLHBjOmIKKysJcGFkZHN1Ymguc2ggcjEyLHIxMjp0LHIxMjp0CisrCXBhZGRzdWJoLnNoIHI1LHI1OnQscjU6dAorKwlwYWRkc3ViaC5zaCByNCxyNDpiLHI0OmIKKysJcGFkZHN1Ymguc2ggbHIsbHI6dCxscjp0CisrCXBhZGRzdWJoLnNoIHI4LHI5OnQscjk6YgorKwlwYWRkc3ViaC5zaCByMCxzcDp0LHIxOnQKKysJcGFkZHN1Ymguc2ggcjMscjE6YixyMDp0CisrCS50ZXh0CisrCS5nbG9iYWwgcHN1YmFkZGhfc2gKKytwc3ViYWRkaF9zaDoKKysJcHN1YmFkZGguc2ggcGMscGM6YixwYzpiCisrCXBzdWJhZGRoLnNoIHIxMixyMTI6dCxyMTI6dAorKwlwc3ViYWRkaC5zaCByNSxyNTp0LHI1OnQKKysJcHN1YmFkZGguc2ggcjQscjQ6YixyNDpiCisrCXBzdWJhZGRoLnNoIGxyLGxyOnQsbHI6dAorKwlwc3ViYWRkaC5zaCByNyxyMzp0LHIxMDpiCisrCXBzdWJhZGRoLnNoIHI3LHIyOnQscjE6dAorKwlwc3ViYWRkaC5zaCByMTEscjM6YixyNjpiCisrCS50ZXh0CisrCS5nbG9iYWwgcGFkZF9iCisrcGFkZF9iOgorKwlwYWRkLmIgcGMscGMscGMKKysJcGFkZC5iIHIxMixyMTIscjEyCisrCXBhZGQuYiByNSxyNSxyNQorKwlwYWRkLmIgcjQscjQscjQKKysJcGFkZC5iIGxyLGxyLGxyCisrCXBhZGQuYiByMixyNixwYworKwlwYWRkLmIgcjgscjkscjEyCisrCXBhZGQuYiByNSxyMTIscjMKKysJLnRleHQKKysJLmdsb2JhbCBwc3ViX2IKKytwc3ViX2I6CisrCXBzdWIuYiBwYyxwYyxwYworKwlwc3ViLmIgcjEyLHIxMixyMTIKKysJcHN1Yi5iIHI1LHI1LHI1CisrCXBzdWIuYiByNCxyNCxyNAorKwlwc3ViLmIgbHIsbHIsbHIKKysJcHN1Yi5iIHIwLHIxMixwYworKwlwc3ViLmIgcjcsc3AscjEwCisrCXBzdWIuYiByNSxzcCxyMTIKKysJLnRleHQKKysJLmdsb2JhbCBwYWRkc19zYgorK3BhZGRzX3NiOgorKwlwYWRkcy5zYiBwYyxwYyxwYworKwlwYWRkcy5zYiByMTIscjEyLHIxMgorKwlwYWRkcy5zYiByNSxyNSxyNQorKwlwYWRkcy5zYiByNCxyNCxyNAorKwlwYWRkcy5zYiBscixscixscgorKwlwYWRkcy5zYiBzcCxyMTEscjQKKysJcGFkZHMuc2IgcjExLHIxMCxyMTEKKysJcGFkZHMuc2IgcjUscjEyLHI2CisrCS50ZXh0CisrCS5nbG9iYWwgcHN1YnNfc2IKKytwc3Vic19zYjoKKysJcHN1YnMuc2IgcGMscGMscGMKKysJcHN1YnMuc2IgcjEyLHIxMixyMTIKKysJcHN1YnMuc2IgcjUscjUscjUKKysJcHN1YnMuc2IgcjQscjQscjQKKysJcHN1YnMuc2IgbHIsbHIsbHIKKysJcHN1YnMuc2IgcjcscjYscjgKKysJcHN1YnMuc2IgcjEyLHIxMCxyOQorKwlwc3Vicy5zYiBwYyxyMTEscjAKKysJLnRleHQKKysJLmdsb2JhbCBwYWRkc191YgorK3BhZGRzX3ViOgorKwlwYWRkcy51YiBwYyxwYyxwYworKwlwYWRkcy51YiByMTIscjEyLHIxMgorKwlwYWRkcy51YiByNSxyNSxyNQorKwlwYWRkcy51YiByNCxyNCxyNAorKwlwYWRkcy51YiBscixscixscgorKwlwYWRkcy51YiByMyxyMixyMTEKKysJcGFkZHMudWIgcjEwLHI4LHIxCisrCXBhZGRzLnViIHIxMSxyOCxyMTAKKysJLnRleHQKKysJLmdsb2JhbCBwc3Vic191YgorK3BzdWJzX3ViOgorKwlwc3Vicy51YiBwYyxwYyxwYworKwlwc3Vicy51YiByMTIscjEyLHIxMgorKwlwc3Vicy51YiByNSxyNSxyNQorKwlwc3Vicy51YiByNCxyNCxyNAorKwlwc3Vicy51YiBscixscixscgorKwlwc3Vicy51YiByMCxyMixyNworKwlwc3Vicy51YiBscixyNSxyMworKwlwc3Vicy51YiByNixyNyxyOQorKwkudGV4dAorKwkuZ2xvYmFsIHBhZGRoX3ViCisrcGFkZGhfdWI6CisrCXBhZGRoLnViIHBjLHBjLHBjCisrCXBhZGRoLnViIHIxMixyMTIscjEyCisrCXBhZGRoLnViIHI1LHI1LHI1CisrCXBhZGRoLnViIHI0LHI0LHI0CisrCXBhZGRoLnViIGxyLGxyLGxyCisrCXBhZGRoLnViIGxyLHIxLHIwCisrCXBhZGRoLnViIHIyLHI3LHI3CisrCXBhZGRoLnViIHIyLHIxLHIyCisrCS50ZXh0CisrCS5nbG9iYWwgcHN1YmhfdWIKKytwc3ViaF91YjoKKysJcHN1YmgudWIgcGMscGMscGMKKysJcHN1YmgudWIgcjEyLHIxMixyMTIKKysJcHN1YmgudWIgcjUscjUscjUKKysJcHN1YmgudWIgcjQscjQscjQKKysJcHN1YmgudWIgbHIsbHIsbHIKKysJcHN1YmgudWIgcjAscjEscjYKKysJcHN1YmgudWIgcjQsbHIscjEwCisrCXBzdWJoLnViIHI5LHI4LHIxCisrCS50ZXh0CisrCS5nbG9iYWwgcG1heF91YgorK3BtYXhfdWI6CisrCXBtYXgudWIgcGMscGMscGMKKysJcG1heC51YiByMTIscjEyLHIxMgorKwlwbWF4LnViIHI1LHI1LHI1CisrCXBtYXgudWIgcjQscjQscjQKKysJcG1heC51YiBscixscixscgorKwlwbWF4LnViIHBjLHIyLHIxMQorKwlwbWF4LnViIHIxMixyMSxyMQorKwlwbWF4LnViIHI1LHIyLHIwCisrCS50ZXh0CisrCS5nbG9iYWwgcG1heF9zaAorK3BtYXhfc2g6CisrCXBtYXguc2ggcGMscGMscGMKKysJcG1heC5zaCByMTIscjEyLHIxMgorKwlwbWF4LnNoIHI1LHI1LHI1CisrCXBtYXguc2ggcjQscjQscjQKKysJcG1heC5zaCBscixscixscgorKwlwbWF4LnNoIGxyLHI2LHIxMgorKwlwbWF4LnNoIHIyLHBjLHI1CisrCXBtYXguc2ggcGMscjIscjcKKysJLnRleHQKKysJLmdsb2JhbCBwbWluX3ViCisrcG1pbl91YjoKKysJcG1pbi51YiBwYyxwYyxwYworKwlwbWluLnViIHIxMixyMTIscjEyCisrCXBtaW4udWIgcjUscjUscjUKKysJcG1pbi51YiByNCxyNCxyNAorKwlwbWluLnViIGxyLGxyLGxyCisrCXBtaW4udWIgcjgscjEscjUKKysJcG1pbi51YiByMSxyOCxyMworKwlwbWluLnViIHIwLHIyLHI3CisrCS50ZXh0CisrCS5nbG9iYWwgcG1pbl9zaAorK3BtaW5fc2g6CisrCXBtaW4uc2ggcGMscGMscGMKKysJcG1pbi5zaCByMTIscjEyLHIxMgorKwlwbWluLnNoIHI1LHI1LHI1CisrCXBtaW4uc2ggcjQscjQscjQKKysJcG1pbi5zaCBscixscixscgorKwlwbWluLnNoIHI4LHI0LHIxMAorKwlwbWluLnNoIGxyLHIxMCxyMTIKKysJcG1pbi5zaCByMixyNixyMgorKwkudGV4dAorKwkuZ2xvYmFsIHBhdmdfdWIKKytwYXZnX3ViOgorKwlwYXZnLnViIHBjLHBjLHBjCisrCXBhdmcudWIgcjEyLHIxMixyMTIKKysJcGF2Zy51YiByNSxyNSxyNQorKwlwYXZnLnViIHI0LHI0LHI0CisrCXBhdmcudWIgbHIsbHIsbHIKKysJcGF2Zy51YiByMCxyMSxyNgorKwlwYXZnLnViIHI4LHIzLHI2CisrCXBhdmcudWIgcGMscjEyLHIxMAorKwkudGV4dAorKwkuZ2xvYmFsIHBhdmdfc2gKKytwYXZnX3NoOgorKwlwYXZnLnNoIHBjLHBjLHBjCisrCXBhdmcuc2ggcjEyLHIxMixyMTIKKysJcGF2Zy5zaCByNSxyNSxyNQorKwlwYXZnLnNoIHI0LHI0LHI0CisrCXBhdmcuc2ggbHIsbHIsbHIKKysJcGF2Zy5zaCByOSxwYyxzcAorKwlwYXZnLnNoIHBjLHNwLHIzCisrCXBhdmcuc2ggcjYscjEscjkKKysJLnRleHQKKysJLmdsb2JhbCBwYWJzX3NiCisrcGFic19zYjoKKysJcGFicy5zYiBwYyxwYworKwlwYWJzLnNiIHIxMixyMTIKKysJcGFicy5zYiByNSxyNQorKwlwYWJzLnNiIHI0LHI0CisrCXBhYnMuc2IgbHIsbHIKKysJcGFicy5zYiByMTEscjYKKysJcGFicy5zYiBscixyOQorKwlwYWJzLnNiIHNwLHI3CisrCS50ZXh0CisrCS5nbG9iYWwgcGFic19zaAorK3BhYnNfc2g6CisrCXBhYnMuc2ggcGMscGMKKysJcGFicy5zaCByMTIscjEyCisrCXBhYnMuc2ggcjUscjUKKysJcGFicy5zaCByNCxyNAorKwlwYWJzLnNoIGxyLGxyCisrCXBhYnMuc2ggcGMscjMKKysJcGFicy5zaCByNSxyNworKwlwYWJzLnNoIHI0LHIwCisrCS50ZXh0CisrCS5nbG9iYWwgcHNhZAorK3BzYWQ6CisrCXBzYWQgcGMscGMscGMKKysJcHNhZCByMTIscjEyLHIxMgorKwlwc2FkIHI1LHI1LHI1CisrCXBzYWQgcjQscjQscjQKKysJcHNhZCBscixscixscgorKwlwc2FkIHI5LHIxMSxyMTEKKysJcHNhZCBscixyNCxzcAorKwlwc2FkIGxyLHI0LHI1CisrCS50ZXh0CisrCS5nbG9iYWwgcGFzcl9iCisrcGFzcl9iOgorKwlwYXNyLmIgcGMscGMsMAorKwlwYXNyLmIgcjEyLHIxMiw3CisrCXBhc3IuYiByNSxyNSw0CisrCXBhc3IuYiByNCxyNCwzCisrCXBhc3IuYiBscixsciwxCisrCXBhc3IuYiBwYyxyNywxCisrCXBhc3IuYiBzcCxsciw2CisrCXBhc3IuYiBzcCxyMywyCisrCS50ZXh0CisrCS5nbG9iYWwgcGxzbF9iCisrcGxzbF9iOgorKwlwbHNsLmIgcGMscGMsMAorKwlwbHNsLmIgcjEyLHIxMiw3CisrCXBsc2wuYiByNSxyNSw0CisrCXBsc2wuYiByNCxyNCwzCisrCXBsc2wuYiBscixsciwxCisrCXBsc2wuYiByMixyMTEsNAorKwlwbHNsLmIgcjgscjUsNworKwlwbHNsLmIgcGMscjAsMgorKwkudGV4dAorKwkuZ2xvYmFsIHBsc3JfYgorK3Bsc3JfYjoKKysJcGxzci5iIHBjLHBjLDAKKysJcGxzci5iIHIxMixyMTIsNworKwlwbHNyLmIgcjUscjUsNAorKwlwbHNyLmIgcjQscjQsMworKwlwbHNyLmIgbHIsbHIsMQorKwlwbHNyLmIgcjEyLHIxLDIKKysJcGxzci5iIHI2LHBjLDcKKysJcGxzci5iIHIxMixyMTEsMgorKwkudGV4dAorKwkuZ2xvYmFsIHBhc3JfaAorK3Bhc3JfaDoKKysJcGFzci5oIHBjLHBjLDAKKysJcGFzci5oIHIxMixyMTIsMTUKKysJcGFzci5oIHI1LHI1LDgKKysJcGFzci5oIHI0LHI0LDcKKysJcGFzci5oIGxyLGxyLDEKKysJcGFzci5oIHIwLHIxMSwxMAorKwlwYXNyLmggcjQscjYsOAorKwlwYXNyLmggcjYscjIsNAorKwkudGV4dAorKwkuZ2xvYmFsIHBsc2xfaAorK3Bsc2xfaDoKKysJcGxzbC5oIHBjLHBjLDAKKysJcGxzbC5oIHIxMixyMTIsMTUKKysJcGxzbC5oIHI1LHI1LDgKKysJcGxzbC5oIHI0LHI0LDcKKysJcGxzbC5oIGxyLGxyLDEKKysJcGxzbC5oIHI1LHIxMCw5CisrCXBsc2wuaCBzcCxsciw4CisrCXBsc2wuaCByMCxsciw3CisrCS50ZXh0CisrCS5nbG9iYWwgcGxzcl9oCisrcGxzcl9oOgorKwlwbHNyLmggcGMscGMsMAorKwlwbHNyLmggcjEyLHIxMiwxNQorKwlwbHNyLmggcjUscjUsOAorKwlwbHNyLmggcjQscjQsNworKwlwbHNyLmggbHIsbHIsMQorKwlwbHNyLmggcjExLHIwLDE1CisrCXBsc3IuaCBscixyMywzCisrCXBsc3IuaCByOCxsciwxMAorKwkudGV4dAorKwkuZ2xvYmFsIHBhY2t3X3NoCisrcGFja3dfc2g6CisrCXBhY2t3LnNoIHBjLHBjLHBjCisrCXBhY2t3LnNoIHIxMixyMTIscjEyCisrCXBhY2t3LnNoIHI1LHI1LHI1CisrCXBhY2t3LnNoIHI0LHI0LHI0CisrCXBhY2t3LnNoIGxyLGxyLGxyCisrCXBhY2t3LnNoIHNwLHIxMSxyMTAKKysJcGFja3cuc2ggcjgscjIscjEyCisrCXBhY2t3LnNoIHI4LHIxLHI1CisrCS50ZXh0CisrCS5nbG9iYWwgcHVucGNrdWJfaAorK3B1bnBja3ViX2g6CisrCXB1bnBja3ViLmggcGMscGM6YgorKwlwdW5wY2t1Yi5oIHIxMixyMTI6dAorKwlwdW5wY2t1Yi5oIHI1LHI1OnQKKysJcHVucGNrdWIuaCByNCxyNDpiCisrCXB1bnBja3ViLmggbHIsbHI6dAorKwlwdW5wY2t1Yi5oIHI2LHIxOnQKKysJcHVucGNrdWIuaCBscixyNTpiCisrCXB1bnBja3ViLmggbHIscjI6dAorKwkudGV4dAorKwkuZ2xvYmFsIHB1bnBja3NiX2gKKytwdW5wY2tzYl9oOgorKwlwdW5wY2tzYi5oIHBjLHBjOmIKKysJcHVucGNrc2IuaCByMTIscjEyOnQKKysJcHVucGNrc2IuaCByNSxyNTp0CisrCXB1bnBja3NiLmggcjQscjQ6YgorKwlwdW5wY2tzYi5oIGxyLGxyOnQKKysJcHVucGNrc2IuaCByNCxyNzp0CisrCXB1bnBja3NiLmggcjYsbHI6YgorKwlwdW5wY2tzYi5oIHIxMixyMTI6dAorKwkudGV4dAorKwkuZ2xvYmFsIHBhY2tzaF91YgorK3BhY2tzaF91YjoKKysJcGFja3NoLnViIHBjLHBjLHBjCisrCXBhY2tzaC51YiByMTIscjEyLHIxMgorKwlwYWNrc2gudWIgcjUscjUscjUKKysJcGFja3NoLnViIHI0LHI0LHI0CisrCXBhY2tzaC51YiBscixscixscgorKwlwYWNrc2gudWIgcjMscjYscjMKKysJcGFja3NoLnViIHI4LHIwLHIzCisrCXBhY2tzaC51YiByOSxyMyxscgorKwkudGV4dAorKwkuZ2xvYmFsIHBhY2tzaF9zYgorK3BhY2tzaF9zYjoKKysJcGFja3NoLnNiIHBjLHBjLHBjCisrCXBhY2tzaC5zYiByMTIscjEyLHIxMgorKwlwYWNrc2guc2IgcjUscjUscjUKKysJcGFja3NoLnNiIHI0LHI0LHI0CisrCXBhY2tzaC5zYiBscixscixscgorKwlwYWNrc2guc2IgcjYscjgscjEKKysJcGFja3NoLnNiIGxyLHI5LHI4CisrCXBhY2tzaC5zYiBzcCxyNixyNgorKwkudGV4dAorKwkuZ2xvYmFsIGFuZGwKKythbmRsOgorKwlhbmRsIHBjLDAKKysJYW5kbCByMTIsNjU1MzUKKysJYW5kbCByNSwzMjc2OAorKwlhbmRsIHI0LDMyNzY3CisrCWFuZGwgbHIsMQorKwlhbmRsIHBjLDIzMTI4CisrCWFuZGwgcjgsNDcyNjIKKysJYW5kbCByNywxMzcxOQorKwkudGV4dAorKwkuZ2xvYmFsIGFuZGxfY29oCisrYW5kbF9jb2g6CisrCWFuZGwgcGMsMCxDT0gKKysJYW5kbCByMTIsNjU1MzUsQ09ICisrCWFuZGwgcjUsMzI3NjgsQ09ICisrCWFuZGwgcjQsMzI3NjcsQ09ICisrCWFuZGwgbHIsMSxDT0gKKysJYW5kbCByNiwyMjc1MyxDT0gKKysJYW5kbCByMCw0MDY1MyxDT0gKKysJYW5kbCByNCw0ODU4MCxDT0gKKysJLnRleHQKKysJLmdsb2JhbCBhbmRoCisrYW5kaDoKKysJYW5kaCBwYywwCisrCWFuZGggcjEyLDY1NTM1CisrCWFuZGggcjUsMzI3NjgKKysJYW5kaCByNCwzMjc2NworKwlhbmRoIGxyLDEKKysJYW5kaCByMTIsNTIzMTIKKysJYW5kaCByMyw4Njc1CisrCWFuZGggcjIsNDI5ODcKKysJLnRleHQKKysJLmdsb2JhbCBhbmRoX2NvaAorK2FuZGhfY29oOgorKwlhbmRoIHBjLDAsQ09ICisrCWFuZGggcjEyLDY1NTM1LENPSAorKwlhbmRoIHI1LDMyNzY4LENPSAorKwlhbmRoIHI0LDMyNzY3LENPSAorKwlhbmRoIGxyLDEsQ09ICisrCWFuZGggcjExLDM0MzE3LENPSAorKwlhbmRoIHI4LDUyOTgyLENPSAorKwlhbmRoIHIxMCwyMzY4MyxDT0gKKysJLnRleHQKKysJLmdsb2JhbCBvcmwKKytvcmw6CisrCW9ybCBwYywwCisrCW9ybCByMTIsNjU1MzUKKysJb3JsIHI1LDMyNzY4CisrCW9ybCByNCwzMjc2NworKwlvcmwgbHIsMQorKwlvcmwgc3AsMTY3NjYKKysJb3JsIHIwLDIxMTgxCisrCW9ybCBwYyw0NDEwMworKwkudGV4dAorKwkuZ2xvYmFsIG9yaAorK29yaDoKKysJb3JoIHBjLDAKKysJb3JoIHIxMiw2NTUzNQorKwlvcmggcjUsMzI3NjgKKysJb3JoIHI0LDMyNzY3CisrCW9yaCBsciwxCisrCW9yaCByOCwyODI4NQorKwlvcmggcjEyLDMwNDkyCisrCW9yaCByMSw1OTkzMAorKwkudGV4dAorKwkuZ2xvYmFsIGVvcmwKKytlb3JsOgorKwllb3JsIHBjLDAKKysJZW9ybCByMTIsNjU1MzUKKysJZW9ybCByNSwzMjc2OAorKwllb3JsIHI0LDMyNzY3CisrCWVvcmwgbHIsMQorKwllb3JsIHI0LDUxMTI5CisrCWVvcmwgcjYsNjQ0NzcKKysJZW9ybCByMSwyMDkxMworKwkudGV4dAorKwkuZ2xvYmFsIGVvcmgKKytlb3JoOgorKwllb3JoIHBjLDAKKysJZW9yaCByMTIsNjU1MzUKKysJZW9yaCByNSwzMjc2OAorKwllb3JoIHI0LDMyNzY3CisrCWVvcmggbHIsMQorKwllb3JoIHIwLDExNzMyCisrCWVvcmggcjEwLDM4MDY5CisrCWVvcmggcjksNTcxMzAKKysJLnRleHQKKysJLmdsb2JhbCBtY2FsbAorK21jYWxsOgorKwltY2FsbCBwY1swXQorKwltY2FsbCByMTJbLTRdCisrCW1jYWxsIHI1Wy0xMzEwNzJdCisrCW1jYWxsIHI0WzEzMTA2OF0KKysJbWNhbGwgbHJbNF0KKysJbWNhbGwgc3BbNjExODBdCisrCW1jYWxsIHI0Wy0zNTAwMF0KKysJbWNhbGwgcjBbOTkyNF0KKysJLnRleHQKKysJLmdsb2JhbCBwcmVmCisrcHJlZjoKKysJcHJlZiBwY1swXQorKwlwcmVmIHIxMlstMV0KKysJcHJlZiByNVstMzI3NjhdCisrCXByZWYgcjRbMzI3NjddCisrCXByZWYgbHJbMV0KKysJcHJlZiByN1s3NzQ4XQorKwlwcmVmIHI3Wy03Njk5XQorKwlwcmVmIHIyWy0yNTg5Ml0KKysJLnRleHQKKysJLmdsb2JhbCBjYWNoZQorK2NhY2hlOgorKwljYWNoZSBwY1swXSwwCisrCWNhY2hlIHIxMlstMV0sMzEKKysJY2FjaGUgcjVbLTEwMjRdLDE2CisrCWNhY2hlIHI0WzEwMjNdLDE1CisrCWNhY2hlIGxyWzFdLDEKKysJY2FjaGUgcjNbLTk2NF0sMTcKKysJY2FjaGUgcjRbLTM3NV0sMjIKKysJY2FjaGUgcjNbLTg4OF0sMTcKKysJLnRleHQKKysJLmdsb2JhbCBzdWI0Cisrc3ViNDoKKysJc3ViIHBjLDAKKysJc3ViIHIxMiwtMQorKwlzdWIgcjUsLTEwNDg1NzYKKysJc3ViIHI0LDEwNDg1NzUKKysJc3ViIGxyLDEKKysJc3ViIHIyLC02MTkxNTYKKysJc3ViIGxyLDQ2MTUxNworKwlzdWIgcjgsLTE4NTA1MQorKwkudGV4dAorKwkuZ2xvYmFsIGNwMworK2NwMzoKKysJY3AgcGMsMAorKwljcCByMTIsLTEKKysJY3AgcjUsLTEwNDg1NzYKKysJY3AgcjQsMTA0ODU3NQorKwljcCBsciwxCisrCWNwIHIxLDEyNDA3OAorKwljcCByMCwtMzc4OTA5CisrCWNwIHI0LC0yNDMxODAKKysJLnRleHQKKysJLmdsb2JhbCBtb3YyCisrbW92MjoKKysJbW92IHBjLDAKKysJbW92IHIxMiwtMQorKwltb3YgcjUsLTEwNDg1NzYKKysJbW92IHI0LDEwNDg1NzUKKysJbW92IGxyLDEKKysJbW92IHI1LC0zMTcwMjEKKysJbW92IHNwLC03NDkxNjQKKysJbW92IHI1LDk0MDE3OQorKwkudGV4dAorKwkuZ2xvYmFsIGJyYzIKKyticmMyOgorKwlicmVxIDAKKysJYnJhbCAtMgorKwlicmxzIC0yMDk3MTUyCisrCWJycGwgMjA5NzE1MAorKwlicm5lIDIKKysJYnJoaSAtMTc5Njk2NgorKwlicnFzIDEzMjEzNjgKKysJYnJscyAtNTc3NDM0CisrCS50ZXh0CisrCS5nbG9iYWwgcmNhbGwyCisrcmNhbGwyOgorKwlyY2FsbCAwCisrCXJjYWxsIC0yCisrCXJjYWxsIC0yMDk3MTUyCisrCXJjYWxsIDIwOTcxNTAKKysJcmNhbGwgMgorKwlyY2FsbCA0OTY4MjAKKysJcmNhbGwgMTA4NTA5MgorKwlyY2FsbCAtMTA1OAorKwkudGV4dAorKwkuZ2xvYmFsIHN1YjUKKytzdWI1OgorKwlzdWIgcGMscGMsMAorKwlzdWIgcjEyLHIxMiwtMQorKwlzdWIgcjUscjUsLTMyNzY4CisrCXN1YiByNCxyNCwzMjc2NworKwlzdWIgbHIsbHIsMQorKwlzdWIgcGMscGMsLTEyNzQ0CisrCXN1YiByNyxyNywtMjczNjUKKysJc3ViIHIyLHI5LC0xNzM1OAorKwkudGV4dAorKwkuZ2xvYmFsIHNhdHN1Yl93MgorK3NhdHN1Yl93MjoKKysJc2F0c3ViLncgcGMscGMsMAorKwlzYXRzdWIudyByMTIscjEyLC0xCisrCXNhdHN1Yi53IHI1LHI1LC0zMjc2OAorKwlzYXRzdWIudyByNCxyNCwzMjc2NworKwlzYXRzdWIudyBscixsciwxCisrCXNhdHN1Yi53IHIyLGxyLC0yMDA3CisrCXNhdHN1Yi53IHI3LHIxMiwtNzg0CisrCXNhdHN1Yi53IHI0LHI3LDIzMTgwCisrCS50ZXh0CisrCS5nbG9iYWwgbGRfZDQKKytsZF9kNDoKKysJbGQuZCByMCxwY1swXQorKwlsZC5kIHIxNCxyMTJbLTFdCisrCWxkLmQgcjgscjVbLTMyNzY4XQorKwlsZC5kIHI2LHI0WzMyNzY3XQorKwlsZC5kIHIyLGxyWzFdCisrCWxkLmQgcjE0LHIxMVsxNDc4NF0KKysJbGQuZCByNixyOVstMTg5MDVdCisrCWxkLmQgcjIscjNbLTYzNTVdCisrCS50ZXh0CisrCS5nbG9iYWwgbGRfdzQKKytsZF93NDoKKysJbGQudyBwYyxwY1swXQorKwlsZC53IHIxMixyMTJbLTFdCisrCWxkLncgcjUscjVbLTMyNzY4XQorKwlsZC53IHI0LHI0WzMyNzY3XQorKwlsZC53IGxyLGxyWzFdCisrCWxkLncgcjAscjEyWy0yMjEzM10KKysJbGQudyBzcCxwY1stMjA1MjFdCisrCS8qIGxkLncgcjMscjVbMjkwMzVdICovCisrCW5vcAorKwkudGV4dAorKwkuZ2xvYmFsIGxkX3NoNAorK2xkX3NoNDoKKysJbGQuc2ggcGMscGNbMF0KKysJbGQuc2ggcjEyLHIxMlstMV0KKysJbGQuc2ggcjUscjVbLTMyNzY4XQorKwlsZC5zaCByNCxyNFszMjc2N10KKysJbGQuc2ggbHIsbHJbMV0KKysJbGQuc2ggcjYscjEwWzMwOTMwXQorKwlsZC5zaCByNixyMTBbMjE5NzNdCisrCS8qIGxkLnNoIHIxMSxyMTBbLTIwNThdICovCisrCW5vcAorKwkudGV4dAorKwkuZ2xvYmFsIGxkX3VoNAorK2xkX3VoNDoKKysJbGQudWggcGMscGNbMF0KKysJbGQudWggcjEyLHIxMlstMV0KKysJbGQudWggcjUscjVbLTMyNzY4XQorKwlsZC51aCByNCxyNFszMjc2N10KKysJbGQudWggbHIsbHJbMV0KKysJbGQudWggcjEscjlbLTEzMzU0XQorKwlsZC51aCBscixyMTFbMjEzMzddCisrCS8qIGxkLnVoIHIyLGxyWy0yNTM3MF0gKi8KKysJbm9wCisrCS50ZXh0CisrCS5nbG9iYWwgbGRfc2IxCisrbGRfc2IxOgorKwlsZC5zYiBwYyxwY1swXQorKwlsZC5zYiByMTIscjEyWy0xXQorKwlsZC5zYiByNSxyNVstMzI3NjhdCisrCWxkLnNiIHI0LHI0WzMyNzY3XQorKwlsZC5zYiBscixsclsxXQorKwlsZC5zYiByNyxzcFstMjg2NjNdCisrCWxkLnNiIHIyLHIxWy01ODc5XQorKwlsZC5zYiByMTIscjNbMTg3MzRdCisrCS50ZXh0CisrCS5nbG9iYWwgbGRfdWI0CisrbGRfdWI0OgorKwlsZC51YiBwYyxwY1swXQorKwlsZC51YiByMTIscjEyWy0xXQorKwlsZC51YiByNSxyNVstMzI3NjhdCisrCWxkLnViIHI0LHI0WzMyNzY3XQorKwlsZC51YiBscixsclsxXQorKwlsZC51YiBwYyxyNFs4Mjc3XQorKwlsZC51YiByNSxyMTJbMTkxNzJdCisrCWxkLnViIHIxMCxsclsyNjM0N10KKysJLnRleHQKKysJLmdsb2JhbCBzdF9kNAorK3N0X2Q0OgorKwlzdC5kIHBjWzBdLHIwCisrCXN0LmQgcjEyWy0xXSxyMTQKKysJc3QuZCByNVstMzI3NjhdLHI4CisrCXN0LmQgcjRbMzI3NjddLHI2CisrCXN0LmQgbHJbMV0scjIKKysJc3QuZCByNVsxMzIwMF0scjEwCisrCXN0LmQgcjVbOTM1Ml0scjEwCisrCXN0LmQgcjVbMzIzNzNdLHI0CisrCS50ZXh0CisrCS5nbG9iYWwgc3RfdzQKKytzdF93NDoKKysJc3QudyBwY1swXSxwYworKwlzdC53IHIxMlstMV0scjEyCisrCXN0LncgcjVbLTMyNzY4XSxyNQorKwlzdC53IHI0WzMyNzY3XSxyNAorKwlzdC53IGxyWzFdLGxyCisrCXN0Lncgc3BbNjEzNl0scjcKKysJc3QudyByNlsyNzA4N10scjEyCisrCS8qIHN0LncgcjNbMjAxNDNdLHI3ICovCisrCW5vcAorKwkudGV4dAorKwkuZ2xvYmFsIHN0X2g0Cisrc3RfaDQ6CisrCXN0LmggcGNbMF0scGMKKysJc3QuaCByMTJbLTFdLHIxMgorKwlzdC5oIHI1Wy0zMjc2OF0scjUKKysJc3QuaCByNFszMjc2N10scjQKKysJc3QuaCBsclsxXSxscgorKwlzdC5oIHI0Wy05OTYyXSxyNworKwlzdC5oIHI5Wy0xNjI1MF0scjMKKysJLyogc3QuaCByOFstMjg4MTBdLHI3ICovCisrCW5vcAorKwkudGV4dAorKwkuZ2xvYmFsIHN0X2I0Cisrc3RfYjQ6CisrCXN0LmIgcGNbMF0scGMKKysJc3QuYiByMTJbLTFdLHIxMgorKwlzdC5iIHI1Wy0zMjc2OF0scjUKKysJc3QuYiByNFszMjc2N10scjQKKysJc3QuYiBsclsxXSxscgorKwlzdC5iIHIxMlszMDEwMl0scjYKKysJc3QuYiByNVsyODk3N10scjEKKysJc3QuYiByMFs1NDcwXSxyMQorKwkudGV4dAorKwkuZ2xvYmFsIG1mc3IKKyttZnNyOgorKwltZnNyIHBjLDAKKysJbWZzciByMTIsMTAyMAorKwltZnNyIHI1LDUxMgorKwltZnNyIHI0LDUwOAorKwltZnNyIGxyLDQKKysJbWZzciByMiw2OTYKKysJbWZzciByNCwyNjAKKysJbWZzciByMTAsMTAxNgorKwkudGV4dAorKwkuZ2xvYmFsIG10c3IKKyttdHNyOgorKwltdHNyIDAscGMKKysJbXRzciAxMDIwLHIxMgorKwltdHNyIDUxMixyNQorKwltdHNyIDUwOCxyNAorKwltdHNyIDQsbHIKKysJbXRzciAyMjQscjEwCisrCW10c3IgODM2LHIxMgorKwltdHNyIDMwNCxyOQorKwkudGV4dAorKwkuZ2xvYmFsIG1mZHIKKyttZmRyOgorKwltZmRyIHBjLDAKKysJbWZkciByMTIsMTAyMAorKwltZmRyIHI1LDUxMgorKwltZmRyIHI0LDUwOAorKwltZmRyIGxyLDQKKysJbWZkciByNiw5MzIKKysJbWZkciByNSwzNgorKwltZmRyIHI5LDMwMAorKwkudGV4dAorKwkuZ2xvYmFsIG10ZHIKKyttdGRyOgorKwltdGRyIDAscGMKKysJbXRkciAxMDIwLHIxMgorKwltdGRyIDUxMixyNQorKwltdGRyIDUwOCxyNAorKwltdGRyIDQsbHIKKysJbXRkciAxODAscjgKKysJbXRkciA3MjAscjEwCisrCW10ZHIgNDA4LGxyCisrCS50ZXh0CisrCS5nbG9iYWwgc2xlZXAKKytzbGVlcDoKKysJc2xlZXAgMAorKwlzbGVlcCAyNTUKKysJc2xlZXAgMTI4CisrCXNsZWVwIDEyNworKwlzbGVlcCAxCisrCXNsZWVwIDI1NAorKwlzbGVlcCAxNQorKwlzbGVlcCA0MworKwkudGV4dAorKwkuZ2xvYmFsIHN5bmMKKytzeW5jOgorKwlzeW5jIDAKKysJc3luYyAyNTUKKysJc3luYyAxMjgKKysJc3luYyAxMjcKKysJc3luYyAxCisrCXN5bmMgMTY2CisrCXN5bmMgMjMwCisrCXN5bmMgMTgwCisrCS50ZXh0CisrCS5nbG9iYWwgYmxkCisrYmxkOgorKwlibGQgcGMsMAorKwlibGQgcjEyLDMxCisrCWJsZCByNSwxNgorKwlibGQgcjQsMTUKKysJYmxkIGxyLDEKKysJYmxkIHI5LDE1CisrCWJsZCByMCw0CisrCWJsZCBsciwyNgorKwkudGV4dAorKwkuZ2xvYmFsIGJzdAorK2JzdDoKKysJYnN0IHBjLDAKKysJYnN0IHIxMiwzMQorKwlic3QgcjUsMTYKKysJYnN0IHI0LDE1CisrCWJzdCBsciwxCisrCWJzdCByMTAsMjgKKysJYnN0IHIwLDMKKysJYnN0IHNwLDIKKysJLnRleHQKKysJLmdsb2JhbCBzYXRzCisrc2F0czoKKysJc2F0cyBwYz4+MCwwCisrCXNhdHMgcjEyPj4zMSwzMQorKwlzYXRzIHI1Pj4xNiwxNgorKwlzYXRzIHI0Pj4xNSwxNQorKwlzYXRzIGxyPj4xLDEKKysJc2F0cyByMTA+PjMsMTkKKysJc2F0cyByMTA+PjIsMjYKKysJc2F0cyByMT4+MjAsMQorKwkudGV4dAorKwkuZ2xvYmFsIHNhdHUKKytzYXR1OgorKwlzYXR1IHBjPj4wLDAKKysJc2F0dSByMTI+PjMxLDMxCisrCXNhdHUgcjU+PjE2LDE2CisrCXNhdHUgcjQ+PjE1LDE1CisrCXNhdHUgbHI+PjEsMQorKwlzYXR1IHBjPj41LDcKKysJc2F0dSByNz4+NSw1CisrCXNhdHUgcjI+PjI2LDE5CisrCS50ZXh0CisrCS5nbG9iYWwgc2F0cm5kcworK3NhdHJuZHM6CisrCXNhdHJuZHMgcGM+PjAsMAorKwlzYXRybmRzIHIxMj4+MzEsMzEKKysJc2F0cm5kcyByNT4+MTYsMTYKKysJc2F0cm5kcyByND4+MTUsMTUKKysJc2F0cm5kcyBscj4+MSwxCisrCXNhdHJuZHMgcjA+PjIxLDE5CisrCXNhdHJuZHMgc3A+PjAsMgorKwlzYXRybmRzIHI3Pj42LDI5CisrCS50ZXh0CisrCS5nbG9iYWwgc2F0cm5kdQorK3NhdHJuZHU6CisrCXNhdHJuZHUgcGM+PjAsMAorKwlzYXRybmR1IHIxMj4+MzEsMzEKKysJc2F0cm5kdSByNT4+MTYsMTYKKysJc2F0cm5kdSByND4+MTUsMTUKKysJc2F0cm5kdSBscj4+MSwxCisrCXNhdHJuZHUgcjEyPj4wLDI2CisrCXNhdHJuZHUgcjQ+PjIxLDMKKysJc2F0cm5kdSByMTA+PjMsMTYKKysJLnRleHQKKysJLmdsb2JhbCBzdWJmYworK3N1YmZjOgorKwlzdWJmZXEgcGMsMAorKwlzdWJmYWwgcjEyLC0xCisrCXN1YmZscyByNSwtMTI4CisrCXN1YmZwbCByNCwxMjcKKysJc3ViZm5lIGxyLDEKKysJc3ViZmxzIHIxMCw4CisrCXN1YmZ2YyByMTEsOTkKKysJc3ViZnZzIHIyLDczCisrCS50ZXh0CisrCS5nbG9iYWwgc3ViYworK3N1YmM6CisrCXN1YmVxIHBjLDAKKysJc3ViYWwgcjEyLC0xCisrCXN1YmxzIHI1LC0xMjgKKysJc3VicGwgcjQsMTI3CisrCXN1Ym5lIGxyLDEKKysJc3VibHMgcjEyLDExOAorKwlzdWJ2YyBsciwtMTIKKysJc3VibWkgcjQsLTEzCisrCS50ZXh0CisrCS5nbG9iYWwgbW92YzIKKyttb3ZjMjoKKysJbW92ZXEgcGMsMAorKwltb3ZhbCByMTIsLTEKKysJbW92bHMgcjUsLTEyOAorKwltb3ZwbCByNCwxMjcKKysJbW92bmUgbHIsMQorKwltb3ZsdCByMywtMTIyCisrCW1vdnZjIHI4LDIKKysJbW92bmUgcjcsLTExMQorKwkudGV4dAorKwkuZ2xvYmFsIGNwX2IKKytjcF9iOgorKwljcC5iIHBjLHIwCisrCWNwLmIgcjAscGMKKysJY3AuYiByNyxyOAorKwljcC5iIHI4LHI3CisrCS50ZXh0CisrCS5nbG9iYWwgY3BfaAorK2NwX2g6CisrCWNwLmggcGMscjAKKysJY3AuaCByMCxwYworKwljcC5oIHI3LHI4CisrCWNwLmggcjgscjcKKysJLnRleHQKKysJLmdsb2JhbCBsZG0KKytsZG06CisrCWxkbSBwYyxyMS1yNgorKwlsZG0gcjEyLHIwLXIxNQorKwlsZG0gcjUscjE1CisrCWxkbSByNCxyMC1yMTQKKysJbGRtIGxyLHIwCisrCWxkbSByOSxyMSxyNSxyMTQKKysJbGRtIHIxMSxyMi1yMyxyNS1yOCxyMTUKKysJbGRtIHI2LHIwLHIzLHI5LHIxMyxyMTUKKysJLnRleHQKKysJLmdsb2JhbCBsZG1fcHUKKytsZG1fcHU6CisrCWxkbSBwYysrLHI2LXI5CisrCWxkbSByMTIrKyxyMC1yMTUKKysJbGRtIHI1KysscjE1CisrCWxkbSByNCsrLHIwLXIxNAorKwlsZG0gbHIrKyxyMAorKwlsZG0gcjEyKysscjMtcjUscjgscjEwLHIxMixyMTQtcjE1CisrCWxkbSByMTArKyxyMixyNC1yNixyMTQtcjE1CisrCWxkbSByNisrLHIxLHIzLXI0LHI5LXIxNAorKwkudGV4dAorKwkuZ2xvYmFsIGxkbXRzCisrbGRtdHM6CisrCWxkbXRzIHBjLHI3LXI4CisrCWxkbXRzIHIxMixyMC1yMTUKKysJbGRtdHMgcjUscjE1CisrCWxkbXRzIHI0LHIwLXIxNAorKwlsZG10cyBscixyMAorKwlsZG10cyByMCxyMS1yMixyMTEtcjEyCisrCWxkbXRzIGxyLHIwLXIyLHI0LHI3LXI4LHIxMy1yMTQKKysJbGRtdHMgcjEyLHIwLXIxLHIzLXI1LHI5LHIxNC1yMTUKKysJLnRleHQKKysJLmdsb2JhbCBsZG10c19wdQorK2xkbXRzX3B1OgorKwlsZG10cyBwYysrLHI5CisrCWxkbXRzIHIxMisrLHIwLXIxNQorKwlsZG10cyByNSsrLHIxNQorKwlsZG10cyByNCsrLHIwLXIxNAorKwlsZG10cyBscisrLHIwCisrCWxkbXRzIHNwKysscjAscjItcjUscjcscjkscjExCisrCWxkbXRzIHI1KysscjEtcjMscjcscjEwLXIxMQorKwlsZG10cyByOCsrLHIyLXI0LHI3LXI4LHIxMyxyMTUKKysJLnRleHQKKysJLmdsb2JhbCBzdG0KKytzdG06CisrCXN0bSBwYyxyNworKwlzdG0gcjEyLHIwLXIxNQorKwlzdG0gcjUscjE1CisrCXN0bSByNCxyMC1yMTQKKysJc3RtIGxyLHIwCisrCXN0bSBzcCxyMi1yMyxyNSxyOCxyMTEscjE0CisrCXN0bSByNCxyMC1yNCxyNixyMTAtcjExLHIxNAorKwlzdG0gcjkscjEscjUscjkscjEyLXIxNQorKwkudGV4dAorKwkuZ2xvYmFsIHN0bV9wdQorK3N0bV9wdToKKysJc3RtIC0tcGMscjQtcjYKKysJc3RtIC0tcjEyLHIwLXIxNQorKwlzdG0gLS1yNSxyMTUKKysJc3RtIC0tcjQscjAtcjE0CisrCXN0bSAtLWxyLHIwCisrCXN0bSAtLXIxMSxyMCxyNC1yOSxyMTEtcjE1CisrCXN0bSAtLXIxMSxyMCxyMyxyOS1yMTAscjEyLHIxNAorKwlzdG0gLS1yNixyMixyOC1yOSxyMTMtcjE0CisrCS50ZXh0CisrCS5nbG9iYWwgc3RtdHMKKytzdG10czoKKysJc3RtdHMgcGMscjgKKysJc3RtdHMgcjEyLHIwLXIxNQorKwlzdG10cyByNSxyMTUKKysJc3RtdHMgcjQscjAtcjE0CisrCXN0bXRzIGxyLHIwCisrCXN0bXRzIHIxLHIwLXIxLHIzLXI0LHI2LHI5LXIxMCxyMTQtcjE1CisrCXN0bXRzIHIzLHIwLHI2LXI4LHIxMC1yMTIKKysJc3RtdHMgcjExLHIwLHI0LHI2LXI3LHI5LXIxMCxyMTIscjE0LXIxNQorKwkudGV4dAorKwkuZ2xvYmFsIHN0bXRzX3B1Cisrc3RtdHNfcHU6CisrCXN0bXRzIC0tcGMscjYtcjgKKysJc3RtdHMgLS1yMTIscjAtcjE1CisrCXN0bXRzIC0tcjUscjE1CisrCXN0bXRzIC0tcjQscjAtcjE0CisrCXN0bXRzIC0tbHIscjAKKysJc3RtdHMgLS1yMixyMCxyMy1yNCxyOS1yMTAscjEyLXIxMworKwlzdG10cyAtLXIzLHIwLXIxLHIxNC1yMTUKKysJc3RtdHMgLS1yMCxyMCxyMi1yNixyMTAscjE0CisrCS50ZXh0CisrCS5nbG9iYWwgbGRpbnNfaAorK2xkaW5zX2g6CisrCWxkaW5zLmggcGM6YixwY1swXQorKwlsZGlucy5oIHIxMjp0LHIxMlstMl0KKysJbGRpbnMuaCByNTp0LHI1Wy00MDk2XQorKwlsZGlucy5oIHI0OmIscjRbNDA5NF0KKysJbGRpbnMuaCBscjp0LGxyWzJdCisrCWxkaW5zLmggcjA6dCxsclsxOTMwXQorKwlsZGlucy5oIHIzOmIscjdbLTUzNF0KKysJbGRpbnMuaCByMjpiLHIxMlstMjI1Ml0KKysJLnRleHQKKysJLmdsb2JhbCBsZGluc19iCisrbGRpbnNfYjoKKysJbGRpbnMuYiBwYzpiLHBjWzBdCisrCWxkaW5zLmIgcjEyOnQscjEyWy0xXQorKwlsZGlucy5iIHI1OnUscjVbLTIwNDhdCisrCWxkaW5zLmIgcjQ6bCxyNFsyMDQ3XQorKwlsZGlucy5iIGxyOmwsbHJbMV0KKysJbGRpbnMuYiByNjp0LHI0Wy02NjJdCisrCWxkaW5zLmIgcjU6YixyMVstMTUxXQorKwlsZGlucy5iIHIxMDp0LHIxMVstMTkyM10KKysJLnRleHQKKysJLmdsb2JhbCBsZHN3cF9zaAorK2xkc3dwX3NoOgorKwlsZHN3cC5zaCBwYyxwY1swXQorKwlsZHN3cC5zaCByMTIscjEyWy0yXQorKwlsZHN3cC5zaCByNSxyNVstNDA5Nl0KKysJbGRzd3Auc2ggcjQscjRbNDA5NF0KKysJbGRzd3Auc2ggbHIsbHJbMl0KKysJbGRzd3Auc2ggcjkscjEwWzM4NDhdCisrCWxkc3dwLnNoIHI0LHIxMlstMjA0MF0KKysJbGRzd3Auc2ggcjEwLHIyWzMwODhdCisrCS50ZXh0CisrCS5nbG9iYWwgbGRzd3BfdWgKKytsZHN3cF91aDoKKysJbGRzd3AudWggcGMscGNbMF0KKysJbGRzd3AudWggcjEyLHIxMlstMl0KKysJbGRzd3AudWggcjUscjVbLTQwOTZdCisrCWxkc3dwLnVoIHI0LHI0WzQwOTRdCisrCWxkc3dwLnVoIGxyLGxyWzJdCisrCWxkc3dwLnVoIHI0LHI5WzM3MjRdCisrCWxkc3dwLnVoIGxyLHNwWy0xNjcyXQorKwlsZHN3cC51aCByOCxyMTJbLTM4NDZdCisrCS50ZXh0CisrCS5nbG9iYWwgbGRzd3BfdworK2xkc3dwX3c6CisrCWxkc3dwLncgcGMscGNbMF0KKysJbGRzd3AudyByMTIscjEyWy00XQorKwlsZHN3cC53IHI1LHI1Wy04MTkyXQorKwlsZHN3cC53IHI0LHI0WzgxODhdCisrCWxkc3dwLncgbHIsbHJbNF0KKysJbGRzd3AudyBzcCxyN1sxODYwXQorKwlsZHN3cC53IHBjLHI1Wy0zMzI0XQorKwlsZHN3cC53IHIxMixyMTBbLTMyOTZdCisrCS50ZXh0CisrCS5nbG9iYWwgc3Rzd3BfaAorK3N0c3dwX2g6CisrCXN0c3dwLmggcGNbMF0scGMKKysJc3Rzd3AuaCByMTJbLTJdLHIxMgorKwlzdHN3cC5oIHI1Wy00MDk2XSxyNQorKwlzdHN3cC5oIHI0WzQwOTRdLHI0CisrCXN0c3dwLmggbHJbMl0sbHIKKysJc3Rzd3AuaCByN1s2NF0scjEwCisrCXN0c3dwLmggcjEwWzMwMjRdLHIyCisrCXN0c3dwLmggcjBbLTIzMjhdLHIxMAorKwkudGV4dAorKwkuZ2xvYmFsIHN0c3dwX3cKKytzdHN3cF93OgorKwlzdHN3cC53IHBjWzBdLHBjCisrCXN0c3dwLncgcjEyWy00XSxyMTIKKysJc3Rzd3AudyByNVstODE5Ml0scjUKKysJc3Rzd3AudyByNFs4MTg4XSxyNAorKwlzdHN3cC53IGxyWzRdLGxyCisrCXN0c3dwLncgcGNbMTE1Nl0scjgKKysJc3Rzd3AudyBzcFs3OTkyXSxyMTAKKysJc3Rzd3AudyByOFstMTE3Ml0scjUKKysJLnRleHQKKysJLmdsb2JhbCBhbmQyCisrYW5kMjoKKysJYW5kIHBjLHBjLHBjPDwwCisrCWFuZCByMTIscjEyLHIxMjw8MzEKKysJYW5kIHI1LHI1LHI1PDwxNgorKwlhbmQgcjQscjQscjQ8PDE1CisrCWFuZCBscixscixscjw8MQorKwlhbmQgcjEwLHIyLHIxPDwxCisrCWFuZCByMTIscjgscjExPDwyNworKwlhbmQgcjEwLHI3LHIwPDwzCisrCS50ZXh0CisrCS5nbG9iYWwgYW5kMworK2FuZDM6CisrCWFuZCBwYyxwYyxwYz4+MAorKwlhbmQgcjEyLHIxMixyMTI+PjMxCisrCWFuZCByNSxyNSxyNT4+MTYKKysJYW5kIHI0LHI0LHI0Pj4xNQorKwlhbmQgbHIsbHIsbHI+PjEKKysJYW5kIHIxMixyOCxyNz4+MTcKKysJYW5kIHBjLHI0LHI5Pj4yMAorKwlhbmQgcjEwLHI5LHIxMD4+MTIKKysJLnRleHQKKysJLmdsb2JhbCBvcjIKKytvcjI6CisrCW9yIHBjLHBjLHBjPDwwCisrCW9yIHIxMixyMTIscjEyPDwzMQorKwlvciByNSxyNSxyNTw8MTYKKysJb3IgcjQscjQscjQ8PDE1CisrCW9yIGxyLGxyLGxyPDwxCisrCW9yIHI4LHNwLHIxMTw8MjkKKysJb3IgcGMscjkscjI8PDI4CisrCW9yIHI1LHIxLHIyPDwzCisrCS50ZXh0CisrCS5nbG9iYWwgb3IzCisrb3IzOgorKwlvciBwYyxwYyxwYz4+MAorKwlvciByMTIscjEyLHIxMj4+MzEKKysJb3IgcjUscjUscjU+PjE2CisrCW9yIHI0LHI0LHI0Pj4xNQorKwlvciBscixscixscj4+MQorKwlvciByMSxzcCxzcD4+MgorKwlvciByMCxyMSxyMT4+MjkKKysJb3IgcjQscjEyLHI4Pj44CisrCS50ZXh0CisrCS5nbG9iYWwgZW9yMgorK2VvcjI6CisrCWVvciBwYyxwYyxwYzw8MAorKwllb3IgcjEyLHIxMixyMTI8PDMxCisrCWVvciByNSxyNSxyNTw8MTYKKysJZW9yIHI0LHI0LHI0PDwxNQorKwllb3IgbHIsbHIsbHI8PDEKKysJZW9yIHIxMCxyOSxyNDw8MTEKKysJZW9yIHI0LHIwLHIxPDwzMQorKwllb3IgcjYscjIscjEyPDwxMworKwkudGV4dAorKwkuZ2xvYmFsIGVvcjMKKytlb3IzOgorKwllb3IgcGMscGMscGM+PjAKKysJZW9yIHIxMixyMTIscjEyPj4zMQorKwllb3IgcjUscjUscjU+PjE2CisrCWVvciByNCxyNCxyND4+MTUKKysJZW9yIGxyLGxyLGxyPj4xCisrCWVvciByNSxyNSxyNT4+MjIKKysJZW9yIHIxMCxyMSxscj4+MworKwllb3IgcjcsbHIsc3A+PjI2CisrCS50ZXh0CisrCS5nbG9iYWwgc3RoaF93MgorK3N0aGhfdzI6CisrCXN0aGgudyBwY1twYzw8MF0scGM6YixwYzpiCisrCXN0aGgudyByMTJbcjEyPDwzXSxyMTI6dCxyMTI6dAorKwlzdGhoLncgcjVbcjU8PDJdLHI1OnQscjU6dAorKwlzdGhoLncgcjRbcjQ8PDFdLHI0OmIscjQ6YgorKwlzdGhoLncgbHJbbHI8PDFdLGxyOnQsbHI6dAorKwlzdGhoLncgc3BbcjY8PDNdLHIxOnQscjEyOnQKKysJc3RoaC53IHI2W3I2PDwwXSxyOTp0LHI5OnQKKysJc3RoaC53IHIxMFtyMzw8MF0scjA6YixyMTE6dAorKwkudGV4dAorKwkuZ2xvYmFsIHN0aGhfdzEKKytzdGhoX3cxOgorKwlzdGhoLncgcGNbMF0scGM6YixwYzpiCisrCXN0aGgudyByMTJbMTAyMF0scjEyOnQscjEyOnQKKysJc3RoaC53IHI1WzUxMl0scjU6dCxyNTp0CisrCXN0aGgudyByNFs1MDhdLHI0OmIscjQ6YgorKwlzdGhoLncgbHJbNF0sbHI6dCxscjp0CisrCXN0aGgudyByNFs0MDRdLHI5OnQscjA6YgorKwlzdGhoLncgcjhbMzQ4XSxyMjp0LHIxMDpiCisrCXN0aGgudyBzcFsxNzJdLHI5OmIscjI6YgorKwkudGV4dAorKwkuZ2xvYmFsIGNvcAorK2NvcDoKKysJY29wIGNwMCxjcjAsY3IwLGNyMCwwCisrCWNvcCBjcDcsY3IxNSxjcjE1LGNyMTUsMHg3ZgorKwljb3AgY3AzLGNyNSxjcjUsY3I1LDB4MzEKKysJY29wIGNwMixjcjQsY3I0LGNyNCwweDMwCisrCWNvcCBjcDUsY3I4LGNyMyxjcjcsMHg1YQorKwkudGV4dAorKwkuZ2xvYmFsIGxkY193MQorK2xkY193MToKKysJbGRjLncgY3AwLGNyMCxyMFswXQorKwlsZGMudyBjcDcsY3IxNSxwY1syNTU8PDJdCisrCWxkYy53IGNwMyxjcjUscjVbMTI4PDwyXQorKwlsZGMudyBjcDIsY3I0LHI0WzEyNzw8Ml0KKysJbGRjLncgY3A0LGNyOSxyMTNbMzY8PDJdCisrCS50ZXh0CisrCS5nbG9iYWwgbGRjX3cyCisrbGRjX3cyOgorKwlsZGMudyBjcDAsY3IwLC0tcjAKKysJbGRjLncgY3A3LGNyMTUsLS1wYworKwlsZGMudyBjcDMsY3I1LC0tcjUKKysJbGRjLncgY3AyLGNyNCwtLXI0CisrCWxkYy53IGNwNCxjcjksLS1yMTMKKysJLnRleHQKKysJLmdsb2JhbCBsZGNfdzMKKytsZGNfdzM6CisrCWxkYy53IGNwMCxjcjAscjBbcjBdCisrCWxkYy53IGNwNyxjcjE1LHBjW3BjPDwzXQorKwlsZGMudyBjcDMsY3I1LHI1W3I0PDwyXQorKwlsZGMudyBjcDIsY3I0LHI0W3IzPDwxXQorKwlsZGMudyBjcDQsY3I5LHIxM1tyMTI8PDBdCisrCS50ZXh0CisrCS5nbG9iYWwgbGRjX2QxCisrbGRjX2QxOgorKwlsZGMuZCBjcDAsY3IwLHIwWzBdCisrCWxkYy5kIGNwNyxjcjE0LHBjWzI1NTw8Ml0KKysJbGRjLmQgY3AzLGNyNixyNVsxMjg8PDJdCisrCWxkYy5kIGNwMixjcjQscjRbMTI3PDwyXQorKwlsZGMuZCBjcDQsY3I4LHIxM1szNjw8Ml0KKysJLnRleHQKKysJLmdsb2JhbCBsZGNfZDIKKytsZGNfZDI6CisrCWxkYy5kIGNwMCxjcjAsLS1yMAorKwlsZGMuZCBjcDcsY3IxNCwtLXBjCisrCWxkYy5kIGNwMyxjcjYsLS1yNQorKwlsZGMuZCBjcDIsY3I0LC0tcjQKKysJbGRjLmQgY3A0LGNyOCwtLXIxMworKwkudGV4dAorKwkuZ2xvYmFsIGxkY19kMworK2xkY19kMzoKKysJbGRjLmQgY3AwLGNyMCxyMFtyMF0KKysJbGRjLmQgY3A3LGNyMTQscGNbcGM8PDNdCisrCWxkYy5kIGNwMyxjcjYscjVbcjQ8PDJdCisrCWxkYy5kIGNwMixjcjQscjRbcjM8PDFdCisrCWxkYy5kIGNwNCxjcjgscjEzW3IxMjw8MF0KKysJLnRleHQKKysJLmdsb2JhbCBzdGNfdzEKKytzdGNfdzE6CisrCXN0Yy53IGNwMCxyMFswXSxjcjAKKysJc3RjLncgY3A3LHBjWzI1NTw8Ml0sY3IxNQorKwlzdGMudyBjcDMscjVbMTI4PDwyXSxjcjUKKysJc3RjLncgY3AyLHI0WzEyNzw8Ml0sY3I0CisrCXN0Yy53IGNwNCxyMTNbMzY8PDJdLGNyOQorKwkudGV4dAorKwkuZ2xvYmFsIHN0Y193MgorK3N0Y193MjoKKysJc3RjLncgY3AwLHIwKyssY3IwCisrCXN0Yy53IGNwNyxwYysrLGNyMTUKKysJc3RjLncgY3AzLHI1KyssY3I1CisrCXN0Yy53IGNwMixyNCsrLGNyNAorKwlzdGMudyBjcDQscjEzKyssY3I5CisrCS50ZXh0CisrCS5nbG9iYWwgc3RjX3czCisrc3RjX3czOgorKwlzdGMudyBjcDAscjBbcjBdLGNyMAorKwlzdGMudyBjcDcscGNbcGM8PDNdLGNyMTUKKysJc3RjLncgY3AzLHI1W3I0PDwyXSxjcjUKKysJc3RjLncgY3AyLHI0W3IzPDwxXSxjcjQKKysJc3RjLncgY3A0LHIxM1tyMTI8PDBdLGNyOQorKwkudGV4dAorKwkuZ2xvYmFsIHN0Y19kMQorK3N0Y19kMToKKysJc3RjLmQgY3AwLHIwWzBdLGNyMAorKwlzdGMuZCBjcDcscGNbMjU1PDwyXSxjcjE0CisrCXN0Yy5kIGNwMyxyNVsxMjg8PDJdLGNyNgorKwlzdGMuZCBjcDIscjRbMTI3PDwyXSxjcjQKKysJc3RjLmQgY3A0LHIxM1szNjw8Ml0sY3I4CisrCS50ZXh0CisrCS5nbG9iYWwgc3RjX2QyCisrc3RjX2QyOgorKwlzdGMuZCBjcDAscjArKyxjcjAKKysJc3RjLmQgY3A3LHBjKyssY3IxNAorKwlzdGMuZCBjcDMscjUrKyxjcjYKKysJc3RjLmQgY3AyLHI0KyssY3I0CisrCXN0Yy5kIGNwNCxyMTMrKyxjcjgKKysJLnRleHQKKysJLmdsb2JhbCBzdGNfZDMKKytzdGNfZDM6CisrCXN0Yy5kIGNwMCxyMFtyMF0sY3IwCisrCXN0Yy5kIGNwNyxwY1twYzw8M10sY3IxNAorKwlzdGMuZCBjcDMscjVbcjQ8PDJdLGNyNgorKwlzdGMuZCBjcDIscjRbcjM8PDFdLGNyNAorKwlzdGMuZCBjcDQscjEzW3IxMjw8MF0sY3I4CisrCS50ZXh0CisrCS5nbG9iYWwgbGRjMF93CisrbGRjMF93OgorKwlsZGMwLncgY3IwLHIwWzBdCisrCWxkYzAudyBjcjE1LHBjWzQwOTU8PDJdCisrCWxkYzAudyBjcjUscjVbMjA0ODw8Ml0KKysJbGRjMC53IGNyNCxyNFsyMDQ3PDwyXQorKwlsZGMwLncgY3I5LHIxM1sxNDc8PDJdCisrCS50ZXh0CisrCS5nbG9iYWwgbGRjMF9kCisrbGRjMF9kOgorKwlsZGMwLmQgY3IwLHIwWzBdCisrCWxkYzAuZCBjcjE0LHBjWzQwOTU8PDJdCisrCWxkYzAuZCBjcjYscjVbMjA0ODw8Ml0KKysJbGRjMC5kIGNyNCxyNFsyMDQ3PDwyXQorKwlsZGMwLmQgY3I4LHIxM1sxNDc8PDJdCisrCS50ZXh0CisrCS5nbG9iYWwgc3RjMF93Cisrc3RjMF93OgorKwlzdGMwLncgcjBbMF0sY3IwCisrCXN0YzAudyBwY1s0MDk1PDwyXSxjcjE1CisrCXN0YzAudyByNVsyMDQ4PDwyXSxjcjUKKysJc3RjMC53IHI0WzIwNDc8PDJdLGNyNAorKwlzdGMwLncgcjEzWzE0Nzw8Ml0sY3I5CisrCS50ZXh0CisrCS5nbG9iYWwgc3RjMF9kCisrc3RjMF9kOgorKwlzdGMwLmQgcjBbMF0sY3IwCisrCXN0YzAuZCBwY1s0MDk1PDwyXSxjcjE0CisrCXN0YzAuZCByNVsyMDQ4PDwyXSxjcjYKKysJc3RjMC5kIHI0WzIwNDc8PDJdLGNyNAorKwlzdGMwLmQgcjEzWzE0Nzw8Ml0sY3I4CisrCS50ZXh0CisrCS5nbG9iYWwgbWVtYworK21lbWM6CisrCW1lbWMgMCwgMAorKwltZW1jIC00LCAzMQorKwltZW1jIC02NTUzNiwgMTYKKysJbWVtYyA2NTUzMiwgMTUKKysJLnRleHQKKysJLmdsb2JhbCBtZW1zCisrbWVtczoKKysJbWVtcyAwLCAwCisrCW1lbXMgLTQsIDMxCisrCW1lbXMgLTY1NTM2LCAxNgorKwltZW1zIDY1NTMyLCAxNQorKwkudGV4dAorKwkuZ2xvYmFsIG1lbXQKKyttZW10OgorKwltZW10IDAsIDAKKysJbWVtdCAtNCwgMzEKKysJbWVtdCAtNjU1MzYsIDE2CisrCW1lbXQgNjU1MzIsIDE1CisrCisrCS50ZXh0CisrCS5nbG9iYWwgc3Rjb25kCisrc3Rjb25kOgorKwlzdGNvbmQgcjBbMF0sIHIwCisrCXN0Y29uZCBwY1stMV0sIHBjCisrCXN0Y29uZCByOFstMzI3NjhdLCByNworKwlzdGNvbmQgcjdbMzI3NjddLCByOAorKwlzdGNvbmQgcjVbMHgxMjM0XSwgcjEwCisrCisrbGRjbV93OgorKwlsZGNtLncgY3AwLHBjLGNyMC1jcjcKKysJbGRjbS53IGNwNyxyMCxjcjAKKysJbGRjbS53IGNwNCxyNCsrLGNyMC1jcjYKKysJbGRjbS53IGNwMyxyNyxjcjcKKysJbGRjbS53IGNwMSxyMTIrKyxjcjEsY3I0LWNyNgorKwlsZGNtLncgY3AwLHBjLGNyOC1jcjE1CisrCWxkY20udyBjcDcscjAsY3I4CisrCWxkY20udyBjcDQscjQrKyxjcjgtY3IxNAorKwlsZGNtLncgY3AzLHI3LGNyMTUKKysJbGRjbS53IGNwMSxyMTIrKyxjcjksY3IxMi1jcjE0CisrCisrbGRjbV9kOgorKwlsZGNtLmQgY3AwLHBjLGNyMC1jcjE1CisrCWxkY20uZCBjcDcscjAsY3IwLGNyMQorKwlsZGNtLmQgY3A0LHI0KyssY3IwLWNyMTMKKysJbGRjbS5kIGNwMyxyNyxjcjE0LWNyMTUKKysJbGRjbS5kIGNwMixyMTIrKyxjcjAtY3IzLGNyOC1jcjksY3IxNC1jcjE1CisrCisrc3RjbV93OgorKwlzdGNtLncgY3AwLHBjLGNyMC1jcjcKKysJc3RjbS53IGNwNyxyMCxjcjAKKysJc3RjbS53IGNwNCwtLXI0LGNyMC1jcjYKKysJc3RjbS53IGNwMyxyNyxjcjcKKysJc3RjbS53IGNwMSwtLXIxMixjcjEsY3I0LWNyNgorKwlzdGNtLncgY3AwLHBjLGNyOC1jcjE1CisrCXN0Y20udyBjcDcscjAsY3I4CisrCXN0Y20udyBjcDQsLS1yNCxjcjgtY3IxNAorKwlzdGNtLncgY3AzLHI3LGNyMTUKKysJc3RjbS53IGNwMSwtLXIxMixjcjksY3IxMi1jcjE0CisrCisrc3RjbV9kOgorKwlzdGNtLmQgY3AwLHBjLGNyMC1jcjE1CisrCXN0Y20uZCBjcDcscjAsY3IwLGNyMQorKwlzdGNtLmQgY3A0LC0tcjQsY3IwLWNyMTMKKysJc3RjbS5kIGNwMyxyNyxjcjE0LWNyMTUKKysJc3RjbS5kIGNwMiwtLXIxMixjcjAtY3IzLGNyOC1jcjksY3IxNC1jcjE1CisrCisrbXZjcl93OgorKwltdmNyLncgY3A3LHBjLGNyMTUKKysJbXZjci53IGNwMCxyMCxjcjAKKysJbXZjci53IGNwMCxwYyxjcjE1CisrCW12Y3IudyBjcDcscjAsY3IxNQorKwltdmNyLncgY3A3LHBjLGNyMAorKwltdmNyLncgY3A0LHI3LGNyOAorKwltdmNyLncgY3AzLHI4LGNyNworKworK212Y3JfZDoKKysJbXZjci5kIGNwNyxscixjcjE0CisrCW12Y3IuZCBjcDAscjAsY3IwCisrCW12Y3IuZCBjcDAsbHIsY3IxNAorKwltdmNyLmQgY3A3LHIwLGNyMTQKKysJbXZjci5kIGNwNyxscixjcjAKKysJbXZjci5kIGNwNCxyNixjcjgKKysJbXZjci5kIGNwMyxyOCxjcjYKKysKKyttdnJjX3c6CisrCW12cmMudyBjcDcsY3IxNSxwYworKwltdnJjLncgY3AwLGNyMCxyMAorKwltdnJjLncgY3AwLGNyMTUscGMKKysJbXZyYy53IGNwNyxjcjE1LHIwCisrCW12cmMudyBjcDcsY3IwLHBjCisrCW12cmMudyBjcDQsY3I4LHI3CisrCW12cmMudyBjcDMsY3I3LHI4CisrCisrbXZyY19kOgorKwltdnJjLmQgY3A3LGNyMTQsbHIKKysJbXZyYy5kIGNwMCxjcjAscjAKKysJbXZyYy5kIGNwMCxjcjE0LGxyCisrCW12cmMuZCBjcDcsY3IxNCxyMAorKwltdnJjLmQgY3A3LGNyMCxscgorKwltdnJjLmQgY3A0LGNyOCxyNgorKwltdnJjLmQgY3AzLGNyNixyOAorKworK2JmZXh0czoKKysJYmZleHRzIHBjLHBjLDMxLDMxCisrCWJmZXh0cyByMCxyMCwwLDAKKysJYmZleHRzIHIwLHBjLDMxLDMxCisrCWJmZXh0cyBwYyxyMCwzMSwzMQorKwliZmV4dHMgcGMscGMsMCwzMQorKwliZmV4dHMgcGMscGMsMzEsMAorKwliZmV4dHMgcjcscjgsMTUsMTYKKysJYmZleHRzIHI4LHI3LDE2LDE1CisrCisrYmZleHR1OgorKwliZmV4dHUgcGMscGMsMzEsMzEKKysJYmZleHR1IHIwLHIwLDAsMAorKwliZmV4dHUgcjAscGMsMzEsMzEKKysJYmZleHR1IHBjLHIwLDMxLDMxCisrCWJmZXh0dSBwYyxwYywwLDMxCisrCWJmZXh0dSBwYyxwYywzMSwwCisrCWJmZXh0dSByNyxyOCwxNSwxNgorKwliZmV4dHUgcjgscjcsMTYsMTUKKysKKytiZmluczoKKysJYmZpbnMgcGMscGMsMzEsMzEKKysJYmZpbnMgcjAscjAsMCwwCisrCWJmaW5zIHIwLHBjLDMxLDMxCisrCWJmaW5zIHBjLHIwLDMxLDMxCisrCWJmaW5zIHBjLHBjLDAsMzEKKysJYmZpbnMgcGMscGMsMzEsMAorKwliZmlucyByNyxyOCwxNSwxNgorKwliZmlucyByOCxyNywxNiwxNQorKworK3JzdWJjOgorKwlyc3ViZXEgcGMsMAorKwlyc3ViYWwgcjEyLC0xCisrCXJzdWJscyByNSwtMTI4CisrCXJzdWJwbCByNCwxMjcKKysJcnN1Ym5lIGxyLDEKKysJcnN1YmxzIHIxMiwxMTgKKysJcnN1YnZjIGxyLC0xMgorKwlyc3VibWkgcjQsLTEzCisrCisrYWRkYzoKKysJYWRkZXEgcGMscGMscGMKKysJYWRkYWwgcjEyLHIxMixyMTIKKysJYWRkbHMgcjUscjUscjUKKysJYWRkcGwgcjQscjQscjQKKysJYWRkbmUgbHIsbHIsbHIKKysJYWRkbHMgcjEwLHIyLHIxCisrCWFkZHZjIHIxMixyOCxyMTEKKysJYWRkbWkgcjEwLHI3LHIwICAgCisrCisrc3ViYzI6CisrCXN1YmVxIHBjLHBjLHBjCisrCXN1YmFsIHIxMixyMTIscjEyCisrCXN1YmxzIHI1LHI1LHI1CisrCXN1YnBsIHI0LHI0LHI0CisrCXN1Ym5lIGxyLGxyLGxyCisrCXN1YmxzIHIxMCxyMixyMQorKwlzdWJ2YyByMTIscjgscjExCisrCXN1Ym1pIHIxMCxyNyxyMCAgIAorKworK2FuZGM6CisrCWFuZGVxIHBjLHBjLHBjCisrCWFuZGFsIHIxMixyMTIscjEyCisrCWFuZGxzIHI1LHI1LHI1CisrCWFuZHBsIHI0LHI0LHI0CisrCWFuZG5lIGxyLGxyLGxyCisrCWFuZGxzIHIxMCxyMixyMQorKwlhbmR2YyByMTIscjgscjExCisrCWFuZG1pIHIxMCxyNyxyMCAgIAorKworK29yYzoKKysJb3JlcSBwYyxwYyxwYworKwlvcmFsIHIxMixyMTIscjEyCisrCW9ybHMgcjUscjUscjUKKysJb3JwbCByNCxyNCxyNAorKwlvcm5lIGxyLGxyLGxyCisrCW9ybHMgcjEwLHIyLHIxCisrCW9ydmMgcjEyLHI4LHIxMQorKwlvcm1pIHIxMCxyNyxyMCAgIAorKworK2VvcmM6CisrCWVvcmVxIHBjLHBjLHBjCisrCWVvcmFsIHIxMixyMTIscjEyCisrCWVvcmxzIHI1LHI1LHI1CisrCWVvcnBsIHI0LHI0LHI0CisrCWVvcm5lIGxyLGxyLGxyCisrCWVvcmxzIHIxMCxyMixyMQorKwllb3J2YyByMTIscjgscjExCisrCWVvcm1pIHIxMCxyNyxyMCAgIAorKworK2xkY29uZDoKKysJbGQud2VxICBwYyxwY1syMDQ0XQorKwlsZC5zaGFsIHIxMixyMTJbMTAyMl0KKysJbGQudWhscyByNSxyNVswXQorKwlsZC51YnBsIHI0LHI0WzUxMV0KKysJbGQuc2JuZSBscixsclswXQorKwlsZC53bHMgIHIxMCxyMlswXQorKwlsZC5zaHZjIHIxMixyOFsweDNmZV0KKysJbGQudWJtaSByMTAscjdbMV0KKysgIAorK3N0Y29uZDI6CisrCXN0LndlcSBwY1syMDQ0XSxwYworKwlzdC5oYWwgcjEyWzEwMjJdLHIxMgorKwlzdC5obHMgcjVbMF0scjUKKysJc3QuYnBsIHI0WzUxMV0scjQKKysJc3QuYm5lIGxyWzBdLGxyCisrCXN0LndscyByMlswXSxyMTAKKysJc3QuaHZjIHI4WzB4M2ZlXSxyMTIKKysJc3QuYm1pIHI3WzFdLHIxMAorKwkKKyttb3ZoOgkKKysJbW92aAlwYywgNjU1MzUKKysJbW92aAlyMCwgMAorKwltb3ZoCXI1LCAxCisrCW1vdmgJcjEyLCAzMjc2NworKwkKKysJCQorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2FzL3Rlc3RzdWl0ZS9nYXMvYXZyMzIvYXZyMzIuZXhwCitAQCAtMCwwICsxLDIzIEBACisrIyBBVlIzMiBhc3NlbWJsZXIgdGVzdHN1aXRlLiAtKi0gVGNsIC0qLQorKworK2lmIFtpc3RhcmdldCBhdnIzMi0qLSpdIHsKKysgICAgcnVuX2R1bXBfdGVzdCAiaHdyZC1sd3JkIgorKyAgICBydW5fZHVtcF90ZXN0ICJwY3JlbCIKKysgICAgcnVuX2R1bXBfdGVzdCAiYWxpYXNlcyIKKysgICAgcnVuX2R1bXBfdGVzdCAiZHdhcmYyIgorKyAgICBydW5fZHVtcF90ZXN0ICJwaWNfcmVsb2MiCisrICAgIHJ1bl9kdW1wX3Rlc3QgImZwaW5zbiIKKysgICAgcnVuX2R1bXBfdGVzdCAicGljbyIKKysgICAgcnVuX2R1bXBfdGVzdCAibGRhX3BpYyIKKysgICAgcnVuX2R1bXBfdGVzdCAibGRhX3BpY19saW5rcmVsYXgiCisrICAgIHJ1bl9kdW1wX3Rlc3QgImxkYV9ub3BpYyIKKysgICAgcnVuX2R1bXBfdGVzdCAibGRhX25vcGljX2xpbmtyZWxheCIKKysgICAgcnVuX2R1bXBfdGVzdCAiY2FsbF9waWMiCisrICAgIHJ1bl9kdW1wX3Rlc3QgImNhbGxfcGljX2xpbmtyZWxheCIKKysgICAgcnVuX2R1bXBfdGVzdCAiY2FsbF9ub3BpYyIKKysgICAgcnVuX2R1bXBfdGVzdCAiY2FsbF9ub3BpY19saW5rcmVsYXgiCisrICAgIHJ1bl9kdW1wX3Rlc3QgImptcHRhYmxlIgorKyAgICBydW5fZHVtcF90ZXN0ICJqbXB0YWJsZV9saW5rcmVsYXgiCisrICAgIHJ1bl9kdW1wX3Rlc3QgInN5bWRpZmYiCisrICAgIHJ1bl9kdW1wX3Rlc3QgInN5bWRpZmZfbGlua3JlbGF4IgorK30KKy0tLSAvZGV2L251bGwKKysrKyBiL2dhcy90ZXN0c3VpdGUvZ2FzL2F2cjMyL2NhbGxfbm9waWMuZAorQEAgLTAsMCArMSwzNiBAQAorKyNzb3VyY2U6IGNhbGwucworKyNhczoKKysjb2JqZHVtcDogLWRyCisrI25hbWU6IGNhbGxfbm9waWMKKysKKysuKjogK2ZpbGUgZm9ybWF0IC4qCisrCisrRGlzYXNzZW1ibHkgb2Ygc2VjdGlvbiBcLnRleHQ6CisrCisrMDAwMDAwMDAgPGNhbGxfdGVzdD46CisrICAgICAgIDA6CWQ3IDAzICAgICAgIAlub3AKKysKKyswMDAwMDAwMiA8dG9vZmFyX25lZ2F0aXZlPjoKKysJXC5cLlwuCisrICAxZmZmZmU6CTAwIDAwICAgICAgIAlhZGQgcjAscjAKKysgIDIwMDAwMDoJZjAgYTAgMDAgMDAgCXJjYWxsIDAgPGNhbGxfdGVzdD4KKysgIDIwMDAwNDoJZjAgMWYgMDAgMGMgCW1jYWxsIDIwMDAzNCA8dG9vZmFyX25lZ2F0aXZlXCsweDIwMDAzMj4KKysgIDIwMDAwODoJZjAgMWYgMDAgMGMgCW1jYWxsIDIwMDAzOCA8dG9vZmFyX25lZ2F0aXZlXCsweDIwMDAzNj4KKysgIDIwMDAwYzoJZjAgMWYgMDAgMGMgCW1jYWxsIDIwMDAzYyA8dG9vZmFyX25lZ2F0aXZlXCsweDIwMDAzYT4KKysgIDIwMDAxMDoJZjAgMWYgMDAgMGMgCW1jYWxsIDIwMDA0MCA8dG9vZmFyX25lZ2F0aXZlXCsweDIwMDAzZT4KKysJXC5cLlwuCisrICAyMDAwMzA6CWVlIGIwIGZmIGZmIAlyY2FsbCA0MDAwMmUgPGZhcl9wb3NpdGl2ZT4KKysJXC5cLlwuCisrCQkJMjAwMDM0OiBSX0FWUjMyXzMyX0NQRU5UCVwudGV4dFwrMHgyCisrCQkJMjAwMDM4OiBSX0FWUjMyXzMyX0NQRU5UCVwudGV4dFwuaW5pdAorKwkJCTIwMDAzYzogUl9BVlIzMl8zMl9DUEVOVAl1bmRlZmluZWQKKysJCQkyMDAwNDA6IFJfQVZSMzJfMzJfQ1BFTlQJXC50ZXh0XCsweDQwMDAyYworKworKzAwNDAwMDJjIDx0b29mYXJfcG9zaXRpdmU+OgorKyAgNDAwMDJjOglkNyAwMyAgICAgICAJbm9wCisrMDA0MDAwMmUgPGZhcl9wb3NpdGl2ZT46CisrICA0MDAwMmU6CWQ3IDAzICAgICAgIAlub3AKKytEaXNhc3NlbWJseSBvZiBzZWN0aW9uIFwudGV4dFwuaW5pdDoKKysKKyswMDAwMDAwMCA8ZGlmZmVyZW50X3NlY3Rpb24+OgorKyAgIDA6CWUyIGMwIDAwIDAwIAlzdWIgcjAscjEsMAorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2FzL3Rlc3RzdWl0ZS9nYXMvYXZyMzIvY2FsbF9ub3BpY19saW5rcmVsYXguZAorQEAgLTAsMCArMSw0MyBAQAorKyNzb3VyY2U6IGNhbGwucworKyNhczogLS1saW5rcmVsYXgKKysjb2JqZHVtcDogLWRyCisrI25hbWU6IGNhbGxfbm9waWNfbGlua3JlbGF4CisrCisrLio6ICtmaWxlIGZvcm1hdCAuKgorKworK0Rpc2Fzc2VtYmx5IG9mIHNlY3Rpb24gXC50ZXh0OgorKworKzAwMDAwMDAwIDxjYWxsX3Rlc3Q+OgorKyAgICAgICAwOglkNyAwMyAgICAgICAJbm9wCisrCisrMDAwMDAwMDIgPHRvb2Zhcl9uZWdhdGl2ZT46CisrCVwuXC5cLgorKyAgMWZmZmZlOgkwMCAwMCAgICAgICAJYWRkIHIwLHIwCisrICAyMDAwMDA6CWUwIGEwIDAwIDAwIAlyY2FsbCAyMDAwMDAgPHRvb2Zhcl9uZWdhdGl2ZVwrMHgxZmZmZmU+CisrCQkJMjAwMDAwOiBSX0FWUjMyXzIySF9QQ1JFTAlcLnRleHQKKysgIDIwMDAwNDoJZjAgMWYgMDAgMDAgCW1jYWxsIDIwMDAwNCA8dG9vZmFyX25lZ2F0aXZlXCsweDIwMDAwMj4KKysJCQkyMDAwMDQ6IFJfQVZSMzJfQ1BDQUxMCVwudGV4dFwrMHgyMDAwMzQKKysgIDIwMDAwODoJZjAgMWYgMDAgMDAgCW1jYWxsIDIwMDAwOCA8dG9vZmFyX25lZ2F0aXZlXCsweDIwMDAwNj4KKysJCQkyMDAwMDg6IFJfQVZSMzJfQ1BDQUxMCVwudGV4dFwrMHgyMDAwMzgKKysgIDIwMDAwYzoJZjAgMWYgMDAgMDAgCW1jYWxsIDIwMDAwYyA8dG9vZmFyX25lZ2F0aXZlXCsweDIwMDAwYT4KKysJCQkyMDAwMGM6IFJfQVZSMzJfQ1BDQUxMCVwudGV4dFwrMHgyMDAwM2MKKysgIDIwMDAxMDoJZjAgMWYgMDAgMDAgCW1jYWxsIDIwMDAxMCA8dG9vZmFyX25lZ2F0aXZlXCsweDIwMDAwZT4KKysJCQkyMDAwMTA6IFJfQVZSMzJfQ1BDQUxMCVwudGV4dFwrMHgyMDAwNDAKKysJXC5cLlwuCisrICAyMDAwMzA6CWUwIGEwIDAwIDAwIAlyY2FsbCAyMDAwMzAgPHRvb2Zhcl9uZWdhdGl2ZVwrMHgyMDAwMmU+CisrCQkJMjAwMDMwOiBSX0FWUjMyXzIySF9QQ1JFTAlcLnRleHRcKzB4NDAwMDJlCisrCVwuXC5cLgorKwkJCTIwMDAzNDogUl9BVlIzMl9BTElHTglcKkFCU1wqXCsweDIKKysJCQkyMDAwMzQ6IFJfQVZSMzJfMzJfQ1BFTlQJXC50ZXh0XCsweDIKKysJCQkyMDAwMzg6IFJfQVZSMzJfMzJfQ1BFTlQJXC50ZXh0XC5pbml0CisrCQkJMjAwMDNjOiBSX0FWUjMyXzMyX0NQRU5UCXVuZGVmaW5lZAorKwkJCTIwMDA0MDogUl9BVlIzMl8zMl9DUEVOVAlcLnRleHRcKzB4NDAwMDJjCisrCisrMDA0MDAwMmMgPHRvb2Zhcl9wb3NpdGl2ZT46CisrICA0MDAwMmM6CWQ3IDAzICAgICAgIAlub3AKKyswMDQwMDAyZSA8ZmFyX3Bvc2l0aXZlPjoKKysgIDQwMDAyZToJZDcgMDMgICAgICAgCW5vcAorK0Rpc2Fzc2VtYmx5IG9mIHNlY3Rpb24gXC50ZXh0XC5pbml0OgorKworKzAwMDAwMDAwIDxkaWZmZXJlbnRfc2VjdGlvbj46CisrICAgMDoJZTIgYzAgMDAgMDAgCXN1YiByMCxyMSwwCistLS0gL2Rldi9udWxsCisrKysgYi9nYXMvdGVzdHN1aXRlL2dhcy9hdnIzMi9jYWxsX3BpYy5kCitAQCAtMCwwICsxLDM2IEBACisrI3NvdXJjZTogY2FsbC5zCisrI2FzOiAtLXBpYworKyNvYmpkdW1wOiAtZHIKKysjbmFtZTogY2FsbF9waWMKKysKKysuKjogK2ZpbGUgZm9ybWF0IC4qCisrCisrRGlzYXNzZW1ibHkgb2Ygc2VjdGlvbiBcLnRleHQ6CisrCisrMDAwMDAwMDAgPGNhbGxfdGVzdD46CisrICAgICAgIDA6CWQ3IDAzICAgICAgIAlub3AKKysKKyswMDAwMDAwMiA8dG9vZmFyX25lZ2F0aXZlPjoKKysJXC5cLlwuCisrICAxZmZmZmU6CTAwIDAwICAgICAgIAlhZGQgcjAscjAKKysgIDIwMDAwMDoJZjAgYTAgMDAgMDAgCXJjYWxsIDAgPGNhbGxfdGVzdD4KKysgIDIwMDAwNDoJZjAgMTYgMDAgMDAgCW1jYWxsIHI2XFswXF0KKysJCQkyMDAwMDQ6IFJfQVZSMzJfR09UMThTVwl0b29mYXJfbmVnYXRpdmUKKysgIDIwMDAwODoJZjAgMTYgMDAgMDAgCW1jYWxsIHI2XFswXF0KKysJCQkyMDAwMDg6IFJfQVZSMzJfR09UMThTVwlkaWZmZXJlbnRfc2VjdGlvbgorKyAgMjAwMDBjOglmMCAxNiAwMCAwMCAJbWNhbGwgcjZcWzBcXQorKwkJCTIwMDAwYzogUl9BVlIzMl9HT1QxOFNXCXVuZGVmaW5lZAorKyAgMjAwMDEwOglmMCAxNiAwMCAwMCAJbWNhbGwgcjZcWzBcXQorKwkJCTIwMDAxMDogUl9BVlIzMl9HT1QxOFNXCXRvb2Zhcl9wb3NpdGl2ZQorKwlcLlwuXC4KKysgIDIwMDAzMDoJZWUgYjAgZmYgZmYgCXJjYWxsIDQwMDAyZSA8ZmFyX3Bvc2l0aXZlPgorKwlcLlwuXC4KKysKKyswMDQwMDAyYyA8dG9vZmFyX3Bvc2l0aXZlPjoKKysgIDQwMDAyYzoJZDcgMDMgICAgICAgCW5vcAorKzAwNDAwMDJlIDxmYXJfcG9zaXRpdmU+OgorKyAgNDAwMDJlOglkNyAwMyAgICAgICAJbm9wCisrRGlzYXNzZW1ibHkgb2Ygc2VjdGlvbiBcLnRleHRcLmluaXQ6CisrCisrMDAwMDAwMDAgPGRpZmZlcmVudF9zZWN0aW9uPjoKKysgICAwOgllMiBjMCAwMCAwMCAJc3ViIHIwLHIxLDAKKy0tLSAvZGV2L251bGwKKysrKyBiL2dhcy90ZXN0c3VpdGUvZ2FzL2F2cjMyL2NhbGxfcGljX2xpbmtyZWxheC5kCitAQCAtMCwwICsxLDQ3IEBACisrI3NvdXJjZTogY2FsbC5zCisrI2FzOiAtLXBpYyAtLWxpbmtyZWxheAorKyNvYmpkdW1wOiAtZHIKKysjbmFtZTogY2FsbF9waWNfbGlua3JlbGF4CisrCisrLio6ICtmaWxlIGZvcm1hdCAuKgorKworK0Rpc2Fzc2VtYmx5IG9mIHNlY3Rpb24gXC50ZXh0OgorKworKzAwMDAwMDAwIDxjYWxsX3Rlc3Q+OgorKyAgICAgICAwOglkNyAwMyAgICAgICAJbm9wCisrCisrMDAwMDAwMDIgPHRvb2Zhcl9uZWdhdGl2ZT46CisrCVwuXC5cLgorKyAgMWZmZmZlOgkwMCAwMCAgICAgICAJYWRkIHIwLHIwCisrICAyMDAwMDA6CWUwIGEwIDAwIDAwIAlyY2FsbCAyMDAwMDAgPHRvb2Zhcl9uZWdhdGl2ZVwrMHgxZmZmZmU+CisrCQkJMjAwMDAwOiBSX0FWUjMyXzIySF9QQ1JFTAlcLnRleHQKKysgIDIwMDAwNDoJZTAgNmUgMDAgMDAgCW1vdiBsciwwCisrCQkJMjAwMDA0OiBSX0FWUjMyX0dPVENBTEwJdG9vZmFyX25lZ2F0aXZlCisrICAyMDAwMDg6CWVjIDBlIDAzIDJlIAlsZFwudyBscixyNlxbbHI8PDB4MlxdCisrICAyMDAwMGM6CTVkIDFlICAgICAgIAlpY2FsbCBscgorKyAgMjAwMDBlOgllMCA2ZSAwMCAwMCAJbW92IGxyLDAKKysJCQkyMDAwMGU6IFJfQVZSMzJfR09UQ0FMTAlkaWZmZXJlbnRfc2VjdGlvbgorKyAgMjAwMDEyOgllYyAwZSAwMyAyZSAJbGRcLncgbHIscjZcW2xyPDwweDJcXQorKyAgMjAwMDE2Ogk1ZCAxZSAgICAgICAJaWNhbGwgbHIKKysgIDIwMDAxODoJZTAgNmUgMDAgMDAgCW1vdiBsciwwCisrCQkJMjAwMDE4OiBSX0FWUjMyX0dPVENBTEwJdW5kZWZpbmVkCisrICAyMDAwMWM6CWVjIDBlIDAzIDJlIAlsZFwudyBscixyNlxbbHI8PDB4MlxdCisrICAyMDAwMjA6CTVkIDFlICAgICAgIAlpY2FsbCBscgorKyAgMjAwMDIyOgllMCA2ZSAwMCAwMCAJbW92IGxyLDAKKysJCQkyMDAwMjI6IFJfQVZSMzJfR09UQ0FMTAl0b29mYXJfcG9zaXRpdmUKKysgIDIwMDAyNjoJZWMgMGUgMDMgMmUgCWxkXC53IGxyLHI2XFtscjw8MHgyXF0KKysgIDIwMDAyYToJNWQgMWUgICAgICAgCWljYWxsIGxyCisrICAyMDAwMmM6CTAwIDAwICAgICAgIAlhZGQgcjAscjAKKysgIDIwMDAyZToJMDAgMDAgICAgICAgCWFkZCByMCxyMAorKyAgMjAwMDMwOgllMCBhMCAwMCAwMCAJcmNhbGwgMjAwMDMwIDx0b29mYXJfbmVnYXRpdmVcKzB4MjAwMDJlPgorKwkJCTIwMDAzMDogUl9BVlIzMl8yMkhfUENSRUwJXC50ZXh0XCsweDQwMDAyZQorKwlcLlwuXC4KKysKKyswMDQwMDAyYyA8dG9vZmFyX3Bvc2l0aXZlPjoKKysgIDQwMDAyYzoJZDcgMDMgICAgICAgCW5vcAorKzAwNDAwMDJlIDxmYXJfcG9zaXRpdmU+OgorKyAgNDAwMDJlOglkNyAwMyAgICAgICAJbm9wCisrRGlzYXNzZW1ibHkgb2Ygc2VjdGlvbiBcLnRleHRcLmluaXQ6CisrCisrMDAwMDAwMDAgPGRpZmZlcmVudF9zZWN0aW9uPjoKKysgICAwOgllMiBjMCAwMCAwMCAJc3ViIHIwLHIxLDAKKy0tLSAvZGV2L251bGwKKysrKyBiL2dhcy90ZXN0c3VpdGUvZ2FzL2F2cjMyL2NhbGwucworQEAgLTAsMCArMSwzMCBAQAorKworKwkudGV4dAorKwkuZ2xvYmFsIGNhbGxfdGVzdAorK2NhbGxfdGVzdDoKKytmYXJfbmVnYXRpdmU6CisrCW5vcAorK3Rvb2Zhcl9uZWdhdGl2ZToKKysKKysJLm9yZwkweDIwMDAwMAorKworKwljYWxsCWZhcl9uZWdhdGl2ZQorKwljYWxsCXRvb2Zhcl9uZWdhdGl2ZQorKwljYWxsCWRpZmZlcmVudF9zZWN0aW9uCisrCWNhbGwJdW5kZWZpbmVkCisrCWNhbGwJdG9vZmFyX3Bvc2l0aXZlCisrCS5vcmcJMHgyMDAwMzAKKysJY2FsbAlmYXJfcG9zaXRpdmUKKysKKysJLmNwb29sCisrCisrCS5vcmcJMHg0MDAwMmMKKysKKyt0b29mYXJfcG9zaXRpdmU6CisrCW5vcAorK2Zhcl9wb3NpdGl2ZToKKysJbm9wCisrCisrCS5zZWN0aW9uIC50ZXh0LmluaXQsImF4IixAcHJvZ2JpdHMKKytkaWZmZXJlbnRfc2VjdGlvbjoKKysJc3ViCXIwLCByMSwgMAorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2FzL3Rlc3RzdWl0ZS9nYXMvYXZyMzIvZHdhcmYyLmQKK0BAIC0wLDAgKzEsNDIgQEAKKysjcmVhZGVsZjogLXdsCisrI25hbWU6IGR3YXJmMgorKyNzb3VyY2U6IGR3YXJmMi5zCisrCisrRHVtcCBvZiBkZWJ1ZyBjb250ZW50cyBvZiBzZWN0aW9uIFwuZGVidWdfbGluZToKKysKKysgIExlbmd0aDogICAgICAgICAgICAgICAgICAgICAgNTMKKysgIERXQVJGIFZlcnNpb246ICAgICAgICAgICAgICAgMgorKyAgUHJvbG9ndWUgTGVuZ3RoOiAgICAgICAgICAgICAyNgorKyAgTWluaW11bSBJbnN0cnVjdGlvbiBMZW5ndGg6ICAxCisrICBJbml0aWFsIHZhbHVlIG9mICdpc19zdG10JzogIDEKKysgIExpbmUgQmFzZTogICAgICAgICAgICAgICAgICAgLTUKKysgIExpbmUgUmFuZ2U6ICAgICAgICAgICAgICAgICAgMTQKKysgIE9wY29kZSBCYXNlOiAgICAgICAgICAgICAgICAgMTAKKysgIFwoUG9pbnRlciBzaXplOiAgICAgICAgICAgICAgIDRcKQorKworKyBPcGNvZGVzOgorKyAgT3Bjb2RlIDEgaGFzIDAgYXJncworKyAgT3Bjb2RlIDIgaGFzIDEgYXJncworKyAgT3Bjb2RlIDMgaGFzIDEgYXJncworKyAgT3Bjb2RlIDQgaGFzIDEgYXJncworKyAgT3Bjb2RlIDUgaGFzIDEgYXJncworKyAgT3Bjb2RlIDYgaGFzIDAgYXJncworKyAgT3Bjb2RlIDcgaGFzIDAgYXJncworKyAgT3Bjb2RlIDggaGFzIDAgYXJncworKyAgT3Bjb2RlIDkgaGFzIDEgYXJncworKworKyBUaGUgRGlyZWN0b3J5IFRhYmxlIGlzIGVtcHR5XC4KKysKKysgVGhlIEZpbGUgTmFtZSBUYWJsZToKKysgIEVudHJ5CURpcglUaW1lCVNpemUJTmFtZQorKyAgMQkwCTAJMAltYWluXC5jCisrCisrIExpbmUgTnVtYmVyIFN0YXRlbWVudHM6CisrICBFeHRlbmRlZCBvcGNvZGUgMjogc2V0IEFkZHJlc3MgdG8gMHgwCisrICBBZHZhbmNlIExpbmUgYnkgODcgdG8gODgKKysgIENvcHkKKysgIEFkdmFuY2UgTGluZSBieSAyMyB0byAxMTEKKysgIFNwZWNpYWwgb3Bjb2RlIC4qOiBhZHZhbmNlIEFkZHJlc3MgYnkgNCB0byAweDQgYW5kIExpbmUgYnkgMCB0byAxMTEKKysgIFNwZWNpYWwgb3Bjb2RlIC4qOiBhZHZhbmNlIEFkZHJlc3MgYnkgMTAgdG8gMHhlIGFuZCBMaW5lIGJ5IDEgdG8gMTEyCisrICBBZHZhbmNlIFBDIGJ5IDUzMCB0byAyMjAKKysgIEV4dGVuZGVkIG9wY29kZSAxOiBFbmQgb2YgU2VxdWVuY2UKKy0tLSAvZGV2L251bGwKKysrKyBiL2dhcy90ZXN0c3VpdGUvZ2FzL2F2cjMyL2R3YXJmMi5zCitAQCAtMCwwICsxLDY3IEBACisrIyBTb3VyY2UgZmlsZSB1c2VkIHRvIHRlc3QgRFdBUkYyIGluZm9ybWF0aW9uIGZvciBBVlIzMi4KKysKKysJLmZpbGUJIm1haW4uYyIKKysKKysJLnNlY3Rpb24gLmRlYnVnX2FiYnJldiwiIixAcHJvZ2JpdHMKKysuTGRlYnVnX2FiYnJldjA6CisrCS5zZWN0aW9uIC5kZWJ1Z19pbmZvLCIiLEBwcm9nYml0cworKy5MZGVidWdfaW5mbzA6CisrCS5zZWN0aW9uIC5kZWJ1Z19saW5lLCIiLEBwcm9nYml0cworKy5MZGVidWdfbGluZTA6CisrCisrCS50ZXh0CisrCS5hbGlnbgkxCisrCS5nbG9ibAltYWluCisrCS50eXBlCW1haW4sIEBmdW5jdGlvbgorKy5MdGV4dDA6CisrbWFpbjoKKysJLmZpbGUgMSAibWFpbi5jIgorKwkubG9jIDEgODggMAorKwlwdXNobQlyMC1yNyxscgorKwlzdWIJc3AsIDQKKysJLmxvYyAxIDExMSAwCisrCWxkZHBjCXIxMiwgLkxDMQorKwlsZGRwYwlyNywgLkxDMQorKwlpY2FsbAlyNworKwkubG9jIDEgMTEyIDAKKysJbGRkcGMJcjYsIC5MQzQKKysKKysJLmFsaWduCTIKKysuTEM0OgkuaW50CTAKKysKKysJLmZpbGwJMjU2LCAyLCAwCisrCisrCS5hbGlnbgkyCisrLkxDMToKKysJLmludAkwCisrLkxDMjoKKysJLmludAkwCisrLkxDMzoKKysJLmludAkwCisrCS5zaXplCW1haW4sIC4gLSBtYWluCisrCisrLkxldGV4dDA6CisrCisrCS5zZWN0aW9uIC5kZWJ1Z19pbmZvCisrCS5pbnQJLkxlZGVidWdfaW5mbzAgLSAuTGRlYnVnX2luZm8wCS8vIHNpemUKKysJLnNob3J0CTIJCQkJLy8gdmVyc2lvbgorKwkuaW50CS5MZGVidWdfYWJicmV2MAkJCS8vIGFiYnJldiBvZmZzZXQKKysJLmJ5dGUJNAkJCQkvLyBieXRlcyBwZXIgYWRkcgorKworKwkudWxlYjEyOCAxCQkJCS8vIGFiYnJldiAxCisrCS5pbnQJLkxkZWJ1Z19saW5lMAkJCS8vIERXX0FUX3N0bXRfbGlzdAorKwkuaW50CS5MZXRleHQwCQkJLy8gRFdfQVRfaGlnaF9wYworKwkuaW50CS5MdGV4dDAJCQkJLy8gRFdfQVRfbG93X3BjCisrCisrLkxlZGVidWdfaW5mbzA6CisrCisrCS5zZWN0aW9uIC5kZWJ1Z19hYmJyZXYKKysJLnVsZWIxMjggMHgwMQorKwkudWxlYjEyOCAweDExCQkvLyBEV19UQUdfY29tcGlsZV91bml0CisrCS5ieXRlCTAJCS8vIERXX0NISUxEUkVOX25vCisrCS51bGViMTI4IDB4MTAsIDB4NgkvLyBEV19BVF9zdG10X2xpc3QKKysJLnVsZWIxMjggMHgxMiwgMHgxCS8vIERXX0FUX2hpZ2hfcGMKKysJLnVsZWIxMjggMHgxMSwgMHgxCS8vIERXX0FUX2xvd19wYworKwkudWxlYjEyOCAwLCAwCisrCisrCS5ieXRlCTAKKy0tLSAvZGV2L251bGwKKysrKyBiL2dhcy90ZXN0c3VpdGUvZ2FzL2F2cjMyL2ZwaW5zbi5kCitAQCAtMCwwICsxLDI3MSBAQAorKyNhczoKKysjb2JqZHVtcDogLWRyCisrI25hbWU6IGZwaW5zbgorKworKy4qOiArZmlsZSBmb3JtYXQgLioKKysKKytEaXNhc3NlbWJseSBvZiBzZWN0aW9uIFwudGV4dDoKKysKKytbMC05YS1mXSogPGZhZGRfcz46CisrICpbMC05YS1mXSo6CWUxIGEyIDBmIGZmIAljb3AgY3AwLGNyMTUsY3IxNSxjcjE1LDB4NAorKyAqWzAtOWEtZl0qOgllMSBhMiAwMCAwMCAJY29wIGNwMCxjcjAsY3IwLGNyMCwweDQKKysgKlswLTlhLWZdKjoJZTEgYTIgMDAgZmYgCWNvcCBjcDAsY3IwLGNyMTUsY3IxNSwweDQKKysgKlswLTlhLWZdKjoJZTEgYTIgMGYgMGYgCWNvcCBjcDAsY3IxNSxjcjAsY3IxNSwweDQKKysgKlswLTlhLWZdKjoJZTEgYTIgMGYgZjAgCWNvcCBjcDAsY3IxNSxjcjE1LGNyMCwweDQKKysgKlswLTlhLWZdKjoJZTEgYTIgMDcgODggCWNvcCBjcDAsY3I3LGNyOCxjcjgsMHg0CisrICpbMC05YS1mXSo6CWUxIGEyIDA4IDc4IAljb3AgY3AwLGNyOCxjcjcsY3I4LDB4NAorKyAqWzAtOWEtZl0qOgllMSBhMiAwOCA4NyAJY29wIGNwMCxjcjgsY3I4LGNyNywweDQKKysKKytbMC05YS1mXSogPGZzdWJfcz46CisrICpbMC05YS1mXSo6CWUxIGEyIDFmIGZmIAljb3AgY3AwLGNyMTUsY3IxNSxjcjE1LDB4NQorKyAqWzAtOWEtZl0qOgllMSBhMiAxMCAwMCAJY29wIGNwMCxjcjAsY3IwLGNyMCwweDUKKysgKlswLTlhLWZdKjoJZTEgYTIgMTAgZmYgCWNvcCBjcDAsY3IwLGNyMTUsY3IxNSwweDUKKysgKlswLTlhLWZdKjoJZTEgYTIgMWYgMGYgCWNvcCBjcDAsY3IxNSxjcjAsY3IxNSwweDUKKysgKlswLTlhLWZdKjoJZTEgYTIgMWYgZjAgCWNvcCBjcDAsY3IxNSxjcjE1LGNyMCwweDUKKysgKlswLTlhLWZdKjoJZTEgYTIgMTcgODggCWNvcCBjcDAsY3I3LGNyOCxjcjgsMHg1CisrICpbMC05YS1mXSo6CWUxIGEyIDE4IDc4IAljb3AgY3AwLGNyOCxjcjcsY3I4LDB4NQorKyAqWzAtOWEtZl0qOgllMSBhMiAxOCA4NyAJY29wIGNwMCxjcjgsY3I4LGNyNywweDUKKysKKytbMC05YS1mXSogPGZtYWNfcz46CisrICpbMC05YS1mXSo6CWUxIGEwIDBmIGZmIAljb3AgY3AwLGNyMTUsY3IxNSxjcjE1LDB4MAorKyAqWzAtOWEtZl0qOgllMSBhMCAwMCAwMCAJY29wIGNwMCxjcjAsY3IwLGNyMCwweDAKKysgKlswLTlhLWZdKjoJZTEgYTAgMDAgZmYgCWNvcCBjcDAsY3IwLGNyMTUsY3IxNSwweDAKKysgKlswLTlhLWZdKjoJZTEgYTAgMGYgMGYgCWNvcCBjcDAsY3IxNSxjcjAsY3IxNSwweDAKKysgKlswLTlhLWZdKjoJZTEgYTAgMGYgZjAgCWNvcCBjcDAsY3IxNSxjcjE1LGNyMCwweDAKKysgKlswLTlhLWZdKjoJZTEgYTAgMDcgODggCWNvcCBjcDAsY3I3LGNyOCxjcjgsMHgwCisrICpbMC05YS1mXSo6CWUxIGEwIDA4IDc4IAljb3AgY3AwLGNyOCxjcjcsY3I4LDB4MAorKyAqWzAtOWEtZl0qOgllMSBhMCAwOCA4NyAJY29wIGNwMCxjcjgsY3I4LGNyNywweDAKKysKKytbMC05YS1mXSogPGZubWFjX3M+OgorKyAqWzAtOWEtZl0qOgllMSBhMCAxZiBmZiAJY29wIGNwMCxjcjE1LGNyMTUsY3IxNSwweDEKKysgKlswLTlhLWZdKjoJZTEgYTAgMTAgMDAgCWNvcCBjcDAsY3IwLGNyMCxjcjAsMHgxCisrICpbMC05YS1mXSo6CWUxIGEwIDEwIGZmIAljb3AgY3AwLGNyMCxjcjE1LGNyMTUsMHgxCisrICpbMC05YS1mXSo6CWUxIGEwIDFmIDBmIAljb3AgY3AwLGNyMTUsY3IwLGNyMTUsMHgxCisrICpbMC05YS1mXSo6CWUxIGEwIDFmIGYwIAljb3AgY3AwLGNyMTUsY3IxNSxjcjAsMHgxCisrICpbMC05YS1mXSo6CWUxIGEwIDE3IDg4IAljb3AgY3AwLGNyNyxjcjgsY3I4LDB4MQorKyAqWzAtOWEtZl0qOgllMSBhMCAxOCA3OCAJY29wIGNwMCxjcjgsY3I3LGNyOCwweDEKKysgKlswLTlhLWZdKjoJZTEgYTAgMTggODcgCWNvcCBjcDAsY3I4LGNyOCxjcjcsMHgxCisrCisrWzAtOWEtZl0qIDxmbXNjX3M+OgorKyAqWzAtOWEtZl0qOgllMSBhMSAwZiBmZiAJY29wIGNwMCxjcjE1LGNyMTUsY3IxNSwweDIKKysgKlswLTlhLWZdKjoJZTEgYTEgMDAgMDAgCWNvcCBjcDAsY3IwLGNyMCxjcjAsMHgyCisrICpbMC05YS1mXSo6CWUxIGExIDAwIGZmIAljb3AgY3AwLGNyMCxjcjE1LGNyMTUsMHgyCisrICpbMC05YS1mXSo6CWUxIGExIDBmIDBmIAljb3AgY3AwLGNyMTUsY3IwLGNyMTUsMHgyCisrICpbMC05YS1mXSo6CWUxIGExIDBmIGYwIAljb3AgY3AwLGNyMTUsY3IxNSxjcjAsMHgyCisrICpbMC05YS1mXSo6CWUxIGExIDA3IDg4IAljb3AgY3AwLGNyNyxjcjgsY3I4LDB4MgorKyAqWzAtOWEtZl0qOgllMSBhMSAwOCA3OCAJY29wIGNwMCxjcjgsY3I3LGNyOCwweDIKKysgKlswLTlhLWZdKjoJZTEgYTEgMDggODcgCWNvcCBjcDAsY3I4LGNyOCxjcjcsMHgyCisrCisrWzAtOWEtZl0qIDxmbm1zY19zPjoKKysgKlswLTlhLWZdKjoJZTEgYTEgMWYgZmYgCWNvcCBjcDAsY3IxNSxjcjE1LGNyMTUsMHgzCisrICpbMC05YS1mXSo6CWUxIGExIDEwIDAwIAljb3AgY3AwLGNyMCxjcjAsY3IwLDB4MworKyAqWzAtOWEtZl0qOgllMSBhMSAxMCBmZiAJY29wIGNwMCxjcjAsY3IxNSxjcjE1LDB4MworKyAqWzAtOWEtZl0qOgllMSBhMSAxZiAwZiAJY29wIGNwMCxjcjE1LGNyMCxjcjE1LDB4MworKyAqWzAtOWEtZl0qOgllMSBhMSAxZiBmMCAJY29wIGNwMCxjcjE1LGNyMTUsY3IwLDB4MworKyAqWzAtOWEtZl0qOgllMSBhMSAxNyA4OCAJY29wIGNwMCxjcjcsY3I4LGNyOCwweDMKKysgKlswLTlhLWZdKjoJZTEgYTEgMTggNzggCWNvcCBjcDAsY3I4LGNyNyxjcjgsMHgzCisrICpbMC05YS1mXSo6CWUxIGExIDE4IDg3IAljb3AgY3AwLGNyOCxjcjgsY3I3LDB4MworKworK1swLTlhLWZdKiA8Zm11bF9zPjoKKysgKlswLTlhLWZdKjoJZTEgYTMgMGYgZmYgCWNvcCBjcDAsY3IxNSxjcjE1LGNyMTUsMHg2CisrICpbMC05YS1mXSo6CWUxIGEzIDAwIDAwIAljb3AgY3AwLGNyMCxjcjAsY3IwLDB4NgorKyAqWzAtOWEtZl0qOgllMSBhMyAwMCBmZiAJY29wIGNwMCxjcjAsY3IxNSxjcjE1LDB4NgorKyAqWzAtOWEtZl0qOgllMSBhMyAwZiAwZiAJY29wIGNwMCxjcjE1LGNyMCxjcjE1LDB4NgorKyAqWzAtOWEtZl0qOgllMSBhMyAwZiBmMCAJY29wIGNwMCxjcjE1LGNyMTUsY3IwLDB4NgorKyAqWzAtOWEtZl0qOgllMSBhMyAwNyA4OCAJY29wIGNwMCxjcjcsY3I4LGNyOCwweDYKKysgKlswLTlhLWZdKjoJZTEgYTMgMDggNzggCWNvcCBjcDAsY3I4LGNyNyxjcjgsMHg2CisrICpbMC05YS1mXSo6CWUxIGEzIDA4IDg3IAljb3AgY3AwLGNyOCxjcjgsY3I3LDB4NgorKworK1swLTlhLWZdKiA8Zm5tdWxfcz46CisrICpbMC05YS1mXSo6CWUxIGEzIDFmIGZmIAljb3AgY3AwLGNyMTUsY3IxNSxjcjE1LDB4NworKyAqWzAtOWEtZl0qOgllMSBhMyAxMCAwMCAJY29wIGNwMCxjcjAsY3IwLGNyMCwweDcKKysgKlswLTlhLWZdKjoJZTEgYTMgMTAgZmYgCWNvcCBjcDAsY3IwLGNyMTUsY3IxNSwweDcKKysgKlswLTlhLWZdKjoJZTEgYTMgMWYgMGYgCWNvcCBjcDAsY3IxNSxjcjAsY3IxNSwweDcKKysgKlswLTlhLWZdKjoJZTEgYTMgMWYgZjAgCWNvcCBjcDAsY3IxNSxjcjE1LGNyMCwweDcKKysgKlswLTlhLWZdKjoJZTEgYTMgMTcgODggCWNvcCBjcDAsY3I3LGNyOCxjcjgsMHg3CisrICpbMC05YS1mXSo6CWUxIGEzIDE4IDc4IAljb3AgY3AwLGNyOCxjcjcsY3I4LDB4NworKyAqWzAtOWEtZl0qOgllMSBhMyAxOCA4NyAJY29wIGNwMCxjcjgsY3I4LGNyNywweDcKKysKKytbMC05YS1mXSogPGZuZWdfcz46CisrICpbMC05YS1mXSo6CWUxIGE0IDBmIGYwIAljb3AgY3AwLGNyMTUsY3IxNSxjcjAsMHg4CisrICpbMC05YS1mXSo6CWUxIGE0IDAwIDAwIAljb3AgY3AwLGNyMCxjcjAsY3IwLDB4OAorKyAqWzAtOWEtZl0qOgllMSBhNCAwMCBmMCAJY29wIGNwMCxjcjAsY3IxNSxjcjAsMHg4CisrICpbMC05YS1mXSo6CWUxIGE0IDBmIDAwIAljb3AgY3AwLGNyMTUsY3IwLGNyMCwweDgKKysgKlswLTlhLWZdKjoJZTEgYTQgMDcgODAgCWNvcCBjcDAsY3I3LGNyOCxjcjAsMHg4CisrICpbMC05YS1mXSo6CWUxIGE0IDA4IDcwIAljb3AgY3AwLGNyOCxjcjcsY3IwLDB4OAorKworK1swLTlhLWZdKiA8ZmFic19zPjoKKysgKlswLTlhLWZdKjoJZTEgYTQgMWYgZjAgCWNvcCBjcDAsY3IxNSxjcjE1LGNyMCwweDkKKysgKlswLTlhLWZdKjoJZTEgYTQgMTAgMDAgCWNvcCBjcDAsY3IwLGNyMCxjcjAsMHg5CisrICpbMC05YS1mXSo6CWUxIGE0IDEwIGYwIAljb3AgY3AwLGNyMCxjcjE1LGNyMCwweDkKKysgKlswLTlhLWZdKjoJZTEgYTQgMWYgMDAgCWNvcCBjcDAsY3IxNSxjcjAsY3IwLDB4OQorKyAqWzAtOWEtZl0qOgllMSBhNCAxNyA4MCAJY29wIGNwMCxjcjcsY3I4LGNyMCwweDkKKysgKlswLTlhLWZdKjoJZTEgYTQgMTggNzAgCWNvcCBjcDAsY3I4LGNyNyxjcjAsMHg5CisrCisrWzAtOWEtZl0qIDxmY21wX3M+OgorKyAqWzAtOWEtZl0qOgllMSBhNiAxMCBmZiAJY29wIGNwMCxjcjAsY3IxNSxjcjE1LDB4ZAorKyAqWzAtOWEtZl0qOgllMSBhNiAxMCAwMCAJY29wIGNwMCxjcjAsY3IwLGNyMCwweGQKKysgKlswLTlhLWZdKjoJZTEgYTYgMTAgMGYgCWNvcCBjcDAsY3IwLGNyMCxjcjE1LDB4ZAorKyAqWzAtOWEtZl0qOgllMSBhNiAxMCBmMCAJY29wIGNwMCxjcjAsY3IxNSxjcjAsMHhkCisrICpbMC05YS1mXSo6CWUxIGE2IDEwIDc4IAljb3AgY3AwLGNyMCxjcjcsY3I4LDB4ZAorKyAqWzAtOWEtZl0qOgllMSBhNiAxMCA4NyAJY29wIGNwMCxjcjAsY3I4LGNyNywweGQKKysKKytbMC05YS1mXSogPGZhZGRfZD46CisrICpbMC05YS1mXSo6CWU1IGEyIDBlIGVlIAljb3AgY3AwLGNyMTQsY3IxNCxjcjE0LDB4NDQKKysgKlswLTlhLWZdKjoJZTUgYTIgMDAgMDAgCWNvcCBjcDAsY3IwLGNyMCxjcjAsMHg0NAorKyAqWzAtOWEtZl0qOgllNSBhMiAwMCBlZSAJY29wIGNwMCxjcjAsY3IxNCxjcjE0LDB4NDQKKysgKlswLTlhLWZdKjoJZTUgYTIgMGUgMGUgCWNvcCBjcDAsY3IxNCxjcjAsY3IxNCwweDQ0CisrICpbMC05YS1mXSo6CWU1IGEyIDBlIGUwIAljb3AgY3AwLGNyMTQsY3IxNCxjcjAsMHg0NAorKyAqWzAtOWEtZl0qOgllNSBhMiAwNiA4OCAJY29wIGNwMCxjcjYsY3I4LGNyOCwweDQ0CisrICpbMC05YS1mXSo6CWU1IGEyIDA4IDY4IAljb3AgY3AwLGNyOCxjcjYsY3I4LDB4NDQKKysgKlswLTlhLWZdKjoJZTUgYTIgMDggODYgCWNvcCBjcDAsY3I4LGNyOCxjcjYsMHg0NAorKworK1swLTlhLWZdKiA8ZnN1Yl9kPjoKKysgKlswLTlhLWZdKjoJZTUgYTIgMWUgZWUgCWNvcCBjcDAsY3IxNCxjcjE0LGNyMTQsMHg0NQorKyAqWzAtOWEtZl0qOgllNSBhMiAxMCAwMCAJY29wIGNwMCxjcjAsY3IwLGNyMCwweDQ1CisrICpbMC05YS1mXSo6CWU1IGEyIDEwIGVlIAljb3AgY3AwLGNyMCxjcjE0LGNyMTQsMHg0NQorKyAqWzAtOWEtZl0qOgllNSBhMiAxZSAwZSAJY29wIGNwMCxjcjE0LGNyMCxjcjE0LDB4NDUKKysgKlswLTlhLWZdKjoJZTUgYTIgMWUgZTAgCWNvcCBjcDAsY3IxNCxjcjE0LGNyMCwweDQ1CisrICpbMC05YS1mXSo6CWU1IGEyIDE2IDg4IAljb3AgY3AwLGNyNixjcjgsY3I4LDB4NDUKKysgKlswLTlhLWZdKjoJZTUgYTIgMTggNjggCWNvcCBjcDAsY3I4LGNyNixjcjgsMHg0NQorKyAqWzAtOWEtZl0qOgllNSBhMiAxOCA4NiAJY29wIGNwMCxjcjgsY3I4LGNyNiwweDQ1CisrCisrWzAtOWEtZl0qIDxmbWFjX2Q+OgorKyAqWzAtOWEtZl0qOgllNSBhMCAwZSBlZSAJY29wIGNwMCxjcjE0LGNyMTQsY3IxNCwweDQwCisrICpbMC05YS1mXSo6CWU1IGEwIDAwIDAwIAljb3AgY3AwLGNyMCxjcjAsY3IwLDB4NDAKKysgKlswLTlhLWZdKjoJZTUgYTAgMDAgZWUgCWNvcCBjcDAsY3IwLGNyMTQsY3IxNCwweDQwCisrICpbMC05YS1mXSo6CWU1IGEwIDBlIDBlIAljb3AgY3AwLGNyMTQsY3IwLGNyMTQsMHg0MAorKyAqWzAtOWEtZl0qOgllNSBhMCAwZSBlMCAJY29wIGNwMCxjcjE0LGNyMTQsY3IwLDB4NDAKKysgKlswLTlhLWZdKjoJZTUgYTAgMDYgODggCWNvcCBjcDAsY3I2LGNyOCxjcjgsMHg0MAorKyAqWzAtOWEtZl0qOgllNSBhMCAwOCA2OCAJY29wIGNwMCxjcjgsY3I2LGNyOCwweDQwCisrICpbMC05YS1mXSo6CWU1IGEwIDA4IDg2IAljb3AgY3AwLGNyOCxjcjgsY3I2LDB4NDAKKysKKytbMC05YS1mXSogPGZubWFjX2Q+OgorKyAqWzAtOWEtZl0qOgllNSBhMCAxZSBlZSAJY29wIGNwMCxjcjE0LGNyMTQsY3IxNCwweDQxCisrICpbMC05YS1mXSo6CWU1IGEwIDEwIDAwIAljb3AgY3AwLGNyMCxjcjAsY3IwLDB4NDEKKysgKlswLTlhLWZdKjoJZTUgYTAgMTAgZWUgCWNvcCBjcDAsY3IwLGNyMTQsY3IxNCwweDQxCisrICpbMC05YS1mXSo6CWU1IGEwIDFlIDBlIAljb3AgY3AwLGNyMTQsY3IwLGNyMTQsMHg0MQorKyAqWzAtOWEtZl0qOgllNSBhMCAxZSBlMCAJY29wIGNwMCxjcjE0LGNyMTQsY3IwLDB4NDEKKysgKlswLTlhLWZdKjoJZTUgYTAgMTYgODggCWNvcCBjcDAsY3I2LGNyOCxjcjgsMHg0MQorKyAqWzAtOWEtZl0qOgllNSBhMCAxOCA2OCAJY29wIGNwMCxjcjgsY3I2LGNyOCwweDQxCisrICpbMC05YS1mXSo6CWU1IGEwIDE4IDg2IAljb3AgY3AwLGNyOCxjcjgsY3I2LDB4NDEKKysKKytbMC05YS1mXSogPGZtc2NfZD46CisrICpbMC05YS1mXSo6CWU1IGExIDBlIGVlIAljb3AgY3AwLGNyMTQsY3IxNCxjcjE0LDB4NDIKKysgKlswLTlhLWZdKjoJZTUgYTEgMDAgMDAgCWNvcCBjcDAsY3IwLGNyMCxjcjAsMHg0MgorKyAqWzAtOWEtZl0qOgllNSBhMSAwMCBlZSAJY29wIGNwMCxjcjAsY3IxNCxjcjE0LDB4NDIKKysgKlswLTlhLWZdKjoJZTUgYTEgMGUgMGUgCWNvcCBjcDAsY3IxNCxjcjAsY3IxNCwweDQyCisrICpbMC05YS1mXSo6CWU1IGExIDBlIGUwIAljb3AgY3AwLGNyMTQsY3IxNCxjcjAsMHg0MgorKyAqWzAtOWEtZl0qOgllNSBhMSAwNiA4OCAJY29wIGNwMCxjcjYsY3I4LGNyOCwweDQyCisrICpbMC05YS1mXSo6CWU1IGExIDA4IDY4IAljb3AgY3AwLGNyOCxjcjYsY3I4LDB4NDIKKysgKlswLTlhLWZdKjoJZTUgYTEgMDggODYgCWNvcCBjcDAsY3I4LGNyOCxjcjYsMHg0MgorKworK1swLTlhLWZdKiA8Zm5tc2NfZD46CisrICpbMC05YS1mXSo6CWU1IGExIDFlIGVlIAljb3AgY3AwLGNyMTQsY3IxNCxjcjE0LDB4NDMKKysgKlswLTlhLWZdKjoJZTUgYTEgMTAgMDAgCWNvcCBjcDAsY3IwLGNyMCxjcjAsMHg0MworKyAqWzAtOWEtZl0qOgllNSBhMSAxMCBlZSAJY29wIGNwMCxjcjAsY3IxNCxjcjE0LDB4NDMKKysgKlswLTlhLWZdKjoJZTUgYTEgMWUgMGUgCWNvcCBjcDAsY3IxNCxjcjAsY3IxNCwweDQzCisrICpbMC05YS1mXSo6CWU1IGExIDFlIGUwIAljb3AgY3AwLGNyMTQsY3IxNCxjcjAsMHg0MworKyAqWzAtOWEtZl0qOgllNSBhMSAxNiA4OCAJY29wIGNwMCxjcjYsY3I4LGNyOCwweDQzCisrICpbMC05YS1mXSo6CWU1IGExIDE4IDY4IAljb3AgY3AwLGNyOCxjcjYsY3I4LDB4NDMKKysgKlswLTlhLWZdKjoJZTUgYTEgMTggODYgCWNvcCBjcDAsY3I4LGNyOCxjcjYsMHg0MworKworK1swLTlhLWZdKiA8Zm11bF9kPjoKKysgKlswLTlhLWZdKjoJZTUgYTMgMGUgZWUgCWNvcCBjcDAsY3IxNCxjcjE0LGNyMTQsMHg0NgorKyAqWzAtOWEtZl0qOgllNSBhMyAwMCAwMCAJY29wIGNwMCxjcjAsY3IwLGNyMCwweDQ2CisrICpbMC05YS1mXSo6CWU1IGEzIDAwIGVlIAljb3AgY3AwLGNyMCxjcjE0LGNyMTQsMHg0NgorKyAqWzAtOWEtZl0qOgllNSBhMyAwZSAwZSAJY29wIGNwMCxjcjE0LGNyMCxjcjE0LDB4NDYKKysgKlswLTlhLWZdKjoJZTUgYTMgMGUgZTAgCWNvcCBjcDAsY3IxNCxjcjE0LGNyMCwweDQ2CisrICpbMC05YS1mXSo6CWU1IGEzIDA2IDg4IAljb3AgY3AwLGNyNixjcjgsY3I4LDB4NDYKKysgKlswLTlhLWZdKjoJZTUgYTMgMDggNjggCWNvcCBjcDAsY3I4LGNyNixjcjgsMHg0NgorKyAqWzAtOWEtZl0qOgllNSBhMyAwOCA4NiAJY29wIGNwMCxjcjgsY3I4LGNyNiwweDQ2CisrCisrWzAtOWEtZl0qIDxmbm11bF9kPjoKKysgKlswLTlhLWZdKjoJZTUgYTMgMWUgZWUgCWNvcCBjcDAsY3IxNCxjcjE0LGNyMTQsMHg0NworKyAqWzAtOWEtZl0qOgllNSBhMyAxMCAwMCAJY29wIGNwMCxjcjAsY3IwLGNyMCwweDQ3CisrICpbMC05YS1mXSo6CWU1IGEzIDEwIGVlIAljb3AgY3AwLGNyMCxjcjE0LGNyMTQsMHg0NworKyAqWzAtOWEtZl0qOgllNSBhMyAxZSAwZSAJY29wIGNwMCxjcjE0LGNyMCxjcjE0LDB4NDcKKysgKlswLTlhLWZdKjoJZTUgYTMgMWUgZTAgCWNvcCBjcDAsY3IxNCxjcjE0LGNyMCwweDQ3CisrICpbMC05YS1mXSo6CWU1IGEzIDE2IDg4IAljb3AgY3AwLGNyNixjcjgsY3I4LDB4NDcKKysgKlswLTlhLWZdKjoJZTUgYTMgMTggNjggCWNvcCBjcDAsY3I4LGNyNixjcjgsMHg0NworKyAqWzAtOWEtZl0qOgllNSBhMyAxOCA4NiAJY29wIGNwMCxjcjgsY3I4LGNyNiwweDQ3CisrCisrWzAtOWEtZl0qIDxmbmVnX2Q+OgorKyAqWzAtOWEtZl0qOgllNSBhNCAwZSBlMCAJY29wIGNwMCxjcjE0LGNyMTQsY3IwLDB4NDgKKysgKlswLTlhLWZdKjoJZTUgYTQgMDAgMDAgCWNvcCBjcDAsY3IwLGNyMCxjcjAsMHg0OAorKyAqWzAtOWEtZl0qOgllNSBhNCAwMCBlMCAJY29wIGNwMCxjcjAsY3IxNCxjcjAsMHg0OAorKyAqWzAtOWEtZl0qOgllNSBhNCAwZSAwMCAJY29wIGNwMCxjcjE0LGNyMCxjcjAsMHg0OAorKyAqWzAtOWEtZl0qOgllNSBhNCAwNiA4MCAJY29wIGNwMCxjcjYsY3I4LGNyMCwweDQ4CisrICpbMC05YS1mXSo6CWU1IGE0IDA4IDYwIAljb3AgY3AwLGNyOCxjcjYsY3IwLDB4NDgKKysKKytbMC05YS1mXSogPGZhYnNfZD46CisrICpbMC05YS1mXSo6CWU1IGE0IDFlIGUwIAljb3AgY3AwLGNyMTQsY3IxNCxjcjAsMHg0OQorKyAqWzAtOWEtZl0qOgllNSBhNCAxMCAwMCAJY29wIGNwMCxjcjAsY3IwLGNyMCwweDQ5CisrICpbMC05YS1mXSo6CWU1IGE0IDEwIGUwIAljb3AgY3AwLGNyMCxjcjE0LGNyMCwweDQ5CisrICpbMC05YS1mXSo6CWU1IGE0IDFlIDAwIAljb3AgY3AwLGNyMTQsY3IwLGNyMCwweDQ5CisrICpbMC05YS1mXSo6CWU1IGE0IDE2IDgwIAljb3AgY3AwLGNyNixjcjgsY3IwLDB4NDkKKysgKlswLTlhLWZdKjoJZTUgYTQgMTggNjAgCWNvcCBjcDAsY3I4LGNyNixjcjAsMHg0OQorKworK1swLTlhLWZdKiA8ZmNtcF9kPjoKKysgKlswLTlhLWZdKjoJZTUgYTYgMTAgZWUgCWNvcCBjcDAsY3IwLGNyMTQsY3IxNCwweDRkCisrICpbMC05YS1mXSo6CWU1IGE2IDEwIDAwIAljb3AgY3AwLGNyMCxjcjAsY3IwLDB4NGQKKysgKlswLTlhLWZdKjoJZTUgYTYgMTAgMGUgCWNvcCBjcDAsY3IwLGNyMCxjcjE0LDB4NGQKKysgKlswLTlhLWZdKjoJZTUgYTYgMTAgZTAgCWNvcCBjcDAsY3IwLGNyMTQsY3IwLDB4NGQKKysgKlswLTlhLWZdKjoJZTUgYTYgMTAgNjggCWNvcCBjcDAsY3IwLGNyNixjcjgsMHg0ZAorKyAqWzAtOWEtZl0qOgllNSBhNiAxMCA4NiAJY29wIGNwMCxjcjAsY3I4LGNyNiwweDRkCisrCisrWzAtOWEtZl0qIDxmbW92X3M+OgorKyAqWzAtOWEtZl0qOgllMSBhNSAwZiBmMCAJY29wIGNwMCxjcjE1LGNyMTUsY3IwLDB4YQorKyAqWzAtOWEtZl0qOgllMSBhNSAwMCAwMCAJY29wIGNwMCxjcjAsY3IwLGNyMCwweGEKKysgKlswLTlhLWZdKjoJZTEgYTUgMGYgMDAgCWNvcCBjcDAsY3IxNSxjcjAsY3IwLDB4YQorKyAqWzAtOWEtZl0qOgllMSBhNSAwMCBmMCAJY29wIGNwMCxjcjAsY3IxNSxjcjAsMHhhCisrICpbMC05YS1mXSo6CWUxIGE1IDA4IDcwIAljb3AgY3AwLGNyOCxjcjcsY3IwLDB4YQorKyAqWzAtOWEtZl0qOgllMSBhNSAwNyA4MCAJY29wIGNwMCxjcjcsY3I4LGNyMCwweGEKKysgKlswLTlhLWZdKjoJZWYgYWYgMGYgMDAgCW12Y3IudyBjcDAscGMsY3IxNQorKyAqWzAtOWEtZl0qOgllZiBhMCAwMCAwMCAJbXZjci53IGNwMCxyMCxjcjAKKysgKlswLTlhLWZdKjoJZWYgYWYgMDAgMDAgCW12Y3IudyBjcDAscGMsY3IwCisrICpbMC05YS1mXSo6CWVmIGEwIDBmIDAwIAltdmNyLncgY3AwLHIwLGNyMTUKKysgKlswLTlhLWZdKjoJZWYgYTggMDcgMDAgCW12Y3IudyBjcDAscjgsY3I3CisrICpbMC05YS1mXSo6CWVmIGE3IDA4IDAwIAltdmNyLncgY3AwLHI3LGNyOAorKyAqWzAtOWEtZl0qOgllZiBhZiAwZiAyMCAJbXZyYy53IGNwMCxjcjE1LHBjCisrICpbMC05YS1mXSo6CWVmIGEwIDAwIDIwIAltdnJjLncgY3AwLGNyMCxyMAorKyAqWzAtOWEtZl0qOgllZiBhMCAwZiAyMCAJbXZyYy53IGNwMCxjcjE1LHIwCisrICpbMC05YS1mXSo6CWVmIGFmIDAwIDIwIAltdnJjLncgY3AwLGNyMCxwYworKyAqWzAtOWEtZl0qOgllZiBhNyAwOCAyMCAJbXZyYy53IGNwMCxjcjgscjcKKysgKlswLTlhLWZdKjoJZWYgYTggMDcgMjAgCW12cmMudyBjcDAsY3I3LHI4CisrCisrWzAtOWEtZl0qIDxmbW92X2Q+OgorKyAqWzAtOWEtZl0qOgllNSBhNSAwZSBlMCAJY29wIGNwMCxjcjE0LGNyMTQsY3IwLDB4NGEKKysgKlswLTlhLWZdKjoJZTUgYTUgMDAgMDAgCWNvcCBjcDAsY3IwLGNyMCxjcjAsMHg0YQorKyAqWzAtOWEtZl0qOgllNSBhNSAwZSAwMCAJY29wIGNwMCxjcjE0LGNyMCxjcjAsMHg0YQorKyAqWzAtOWEtZl0qOgllNSBhNSAwMCBlMCAJY29wIGNwMCxjcjAsY3IxNCxjcjAsMHg0YQorKyAqWzAtOWEtZl0qOgllNSBhNSAwOCA2MCAJY29wIGNwMCxjcjgsY3I2LGNyMCwweDRhCisrICpbMC05YS1mXSo6CWU1IGE1IDA2IDgwIAljb3AgY3AwLGNyNixjcjgsY3IwLDB4NGEKKysgKlswLTlhLWZdKjoJZWYgYWUgMGUgMTAgCW12Y3IuZCBjcDAsbHIsY3IxNAorKyAqWzAtOWEtZl0qOgllZiBhMCAwMCAxMCAJbXZjci5kIGNwMCxyMCxjcjAKKysgKlswLTlhLWZdKjoJZWYgYWUgMDAgMTAgCW12Y3IuZCBjcDAsbHIsY3IwCisrICpbMC05YS1mXSo6CWVmIGEwIDBlIDEwIAltdmNyLmQgY3AwLHIwLGNyMTQKKysgKlswLTlhLWZdKjoJZWYgYTggMDYgMTAgCW12Y3IuZCBjcDAscjgsY3I2CisrICpbMC05YS1mXSo6CWVmIGE2IDA4IDEwIAltdmNyLmQgY3AwLHI2LGNyOAorKyAqWzAtOWEtZl0qOgllZiBhZSAwZSAzMCAJbXZyYy5kIGNwMCxjcjE0LGxyCisrICpbMC05YS1mXSo6CWVmIGEwIDAwIDMwIAltdnJjLmQgY3AwLGNyMCxyMAorKyAqWzAtOWEtZl0qOgllZiBhMCAwZSAzMCAJbXZyYy5kIGNwMCxjcjE0LHIwCisrICpbMC05YS1mXSo6CWVmIGFlIDAwIDMwIAltdnJjLmQgY3AwLGNyMCxscgorKyAqWzAtOWEtZl0qOgllZiBhNiAwOCAzMCAJbXZyYy5kIGNwMCxjcjgscjYKKysgKlswLTlhLWZdKjoJZWYgYTggMDYgMzAgCW12cmMuZCBjcDAsY3I2LHI4CisrCisrWzAtOWEtZl0qIDxmY2FzdHNfZD46CisrICpbMC05YS1mXSo6CWUxIGE3IDFmIGUwIAljb3AgY3AwLGNyMTUsY3IxNCxjcjAsMHhmCisrICpbMC05YS1mXSo6CWUxIGE3IDEwIDAwIAljb3AgY3AwLGNyMCxjcjAsY3IwLDB4ZgorKyAqWzAtOWEtZl0qOgllMSBhNyAxZiAwMCAJY29wIGNwMCxjcjE1LGNyMCxjcjAsMHhmCisrICpbMC05YS1mXSo6CWUxIGE3IDEwIGUwIAljb3AgY3AwLGNyMCxjcjE0LGNyMCwweGYKKysgKlswLTlhLWZdKjoJZTEgYTcgMTggNjAgCWNvcCBjcDAsY3I4LGNyNixjcjAsMHhmCisrICpbMC05YS1mXSo6CWUxIGE3IDE3IDgwIAljb3AgY3AwLGNyNyxjcjgsY3IwLDB4ZgorKworK1swLTlhLWZdKiA8ZmNhc3RkX3M+OgorKyAqWzAtOWEtZl0qOgllMSBhOCAwZSBmMCAJY29wIGNwMCxjcjE0LGNyMTUsY3IwLDB4MTAKKysgKlswLTlhLWZdKjoJZTEgYTggMDAgMDAgCWNvcCBjcDAsY3IwLGNyMCxjcjAsMHgxMAorKyAqWzAtOWEtZl0qOgllMSBhOCAwZSAwMCAJY29wIGNwMCxjcjE0LGNyMCxjcjAsMHgxMAorKyAqWzAtOWEtZl0qOgllMSBhOCAwMCBmMCAJY29wIGNwMCxjcjAsY3IxNSxjcjAsMHgxMAorKyAqWzAtOWEtZl0qOgllMSBhOCAwOCA3MCAJY29wIGNwMCxjcjgsY3I3LGNyMCwweDEwCisrICpbMC05YS1mXSo6CWUxIGE4IDA2IDgwIAljb3AgY3AwLGNyNixjcjgsY3IwLDB4MTAKKy0tLSAvZGV2L251bGwKKysrKyBiL2dhcy90ZXN0c3VpdGUvZ2FzL2F2cjMyL2ZwaW5zbi5zCitAQCAtMCwwICsxLDI2NiBAQAorKworKwkudGV4dAorKwkuZ2xvYmFsCWZhZGRfcworK2ZhZGRfczoKKysJZmFkZC5zIGZyMTUsIGZyMTUsIGZyMTUKKysJZmFkZC5zIGZyMCwgZnIwLCBmcjAKKysJZmFkZC5zIGZyMCwgZnIxNSwgZnIxNQorKwlmYWRkLnMgZnIxNSwgZnIwLCBmcjE1CisrCWZhZGQucyBmcjE1LCBmcjE1LCBmcjAKKysJZmFkZC5zIGZyNywgZnI4LCBmcjgKKysJZmFkZC5zIGZyOCwgZnI3LCBmcjgKKysJZmFkZC5zIGZyOCwgZnI4LCBmcjcKKysJLmdsb2JhbAlmc3ViX3MKKytmc3ViX3M6CisrCWZzdWIucyBmcjE1LCBmcjE1LCBmcjE1CisrCWZzdWIucyBmcjAsIGZyMCwgZnIwCisrCWZzdWIucyBmcjAsIGZyMTUsIGZyMTUKKysJZnN1Yi5zIGZyMTUsIGZyMCwgZnIxNQorKwlmc3ViLnMgZnIxNSwgZnIxNSwgZnIwCisrCWZzdWIucyBmcjcsIGZyOCwgZnI4CisrCWZzdWIucyBmcjgsIGZyNywgZnI4CisrCWZzdWIucyBmcjgsIGZyOCwgZnI3CisrCS5nbG9iYWwJZm1hY19zCisrZm1hY19zOgorKwlmbWFjLnMgZnIxNSwgZnIxNSwgZnIxNQorKwlmbWFjLnMgZnIwLCBmcjAsIGZyMAorKwlmbWFjLnMgZnIwLCBmcjE1LCBmcjE1CisrCWZtYWMucyBmcjE1LCBmcjAsIGZyMTUKKysJZm1hYy5zIGZyMTUsIGZyMTUsIGZyMAorKwlmbWFjLnMgZnI3LCBmcjgsIGZyOAorKwlmbWFjLnMgZnI4LCBmcjcsIGZyOAorKwlmbWFjLnMgZnI4LCBmcjgsIGZyNworKwkuZ2xvYmFsCWZubWFjX3MKKytmbm1hY19zOgorKwlmbm1hYy5zIGZyMTUsIGZyMTUsIGZyMTUKKysJZm5tYWMucyBmcjAsIGZyMCwgZnIwCisrCWZubWFjLnMgZnIwLCBmcjE1LCBmcjE1CisrCWZubWFjLnMgZnIxNSwgZnIwLCBmcjE1CisrCWZubWFjLnMgZnIxNSwgZnIxNSwgZnIwCisrCWZubWFjLnMgZnI3LCBmcjgsIGZyOAorKwlmbm1hYy5zIGZyOCwgZnI3LCBmcjgKKysJZm5tYWMucyBmcjgsIGZyOCwgZnI3CisrCS5nbG9iYWwJZm1zY19zCisrZm1zY19zOgorKwlmbXNjLnMgZnIxNSwgZnIxNSwgZnIxNQorKwlmbXNjLnMgZnIwLCBmcjAsIGZyMAorKwlmbXNjLnMgZnIwLCBmcjE1LCBmcjE1CisrCWZtc2MucyBmcjE1LCBmcjAsIGZyMTUKKysJZm1zYy5zIGZyMTUsIGZyMTUsIGZyMAorKwlmbXNjLnMgZnI3LCBmcjgsIGZyOAorKwlmbXNjLnMgZnI4LCBmcjcsIGZyOAorKwlmbXNjLnMgZnI4LCBmcjgsIGZyNworKwkuZ2xvYmFsCWZubXNjX3MKKytmbm1zY19zOgorKwlmbm1zYy5zIGZyMTUsIGZyMTUsIGZyMTUKKysJZm5tc2MucyBmcjAsIGZyMCwgZnIwCisrCWZubXNjLnMgZnIwLCBmcjE1LCBmcjE1CisrCWZubXNjLnMgZnIxNSwgZnIwLCBmcjE1CisrCWZubXNjLnMgZnIxNSwgZnIxNSwgZnIwCisrCWZubXNjLnMgZnI3LCBmcjgsIGZyOAorKwlmbm1zYy5zIGZyOCwgZnI3LCBmcjgKKysJZm5tc2MucyBmcjgsIGZyOCwgZnI3CisrCS5nbG9iYWwJZm11bF9zCisrZm11bF9zOgorKwlmbXVsLnMgZnIxNSwgZnIxNSwgZnIxNQorKwlmbXVsLnMgZnIwLCBmcjAsIGZyMAorKwlmbXVsLnMgZnIwLCBmcjE1LCBmcjE1CisrCWZtdWwucyBmcjE1LCBmcjAsIGZyMTUKKysJZm11bC5zIGZyMTUsIGZyMTUsIGZyMAorKwlmbXVsLnMgZnI3LCBmcjgsIGZyOAorKwlmbXVsLnMgZnI4LCBmcjcsIGZyOAorKwlmbXVsLnMgZnI4LCBmcjgsIGZyNworKwkuZ2xvYmFsCWZubXVsX3MKKytmbm11bF9zOgorKwlmbm11bC5zIGZyMTUsIGZyMTUsIGZyMTUKKysJZm5tdWwucyBmcjAsIGZyMCwgZnIwCisrCWZubXVsLnMgZnIwLCBmcjE1LCBmcjE1CisrCWZubXVsLnMgZnIxNSwgZnIwLCBmcjE1CisrCWZubXVsLnMgZnIxNSwgZnIxNSwgZnIwCisrCWZubXVsLnMgZnI3LCBmcjgsIGZyOAorKwlmbm11bC5zIGZyOCwgZnI3LCBmcjgKKysJZm5tdWwucyBmcjgsIGZyOCwgZnI3CisrCS5nbG9iYWwJZm5lZ19zCisrZm5lZ19zOgorKwlmbmVnLnMgZnIxNSwgZnIxNQorKwlmbmVnLnMgZnIwLCBmcjAKKysJZm5lZy5zIGZyMCwgZnIxNQorKwlmbmVnLnMgZnIxNSwgZnIwCisrCWZuZWcucyBmcjcsIGZyOAorKwlmbmVnLnMgZnI4LCBmcjcKKysJLmdsb2JhbAlmYWJzX3MKKytmYWJzX3M6CisrCWZhYnMucyBmcjE1LCBmcjE1CisrCWZhYnMucyBmcjAsIGZyMAorKwlmYWJzLnMgZnIwLCBmcjE1CisrCWZhYnMucyBmcjE1LCBmcjAKKysJZmFicy5zIGZyNywgZnI4CisrCWZhYnMucyBmcjgsIGZyNworKwkuZ2xvYmFsCWZjbXBfcworK2ZjbXBfczoKKysJZmNtcC5zIGZyMTUsIGZyMTUKKysJZmNtcC5zIGZyMCwgZnIwCisrCWZjbXAucyBmcjAsIGZyMTUKKysJZmNtcC5zIGZyMTUsIGZyMAorKwlmY21wLnMgZnI3LCBmcjgKKysJZmNtcC5zIGZyOCwgZnI3CisrCS5nbG9iYWwJZmFkZF9kCisrZmFkZF9kOgorKwlmYWRkLmQgZnIxNCwgZnIxNCwgZnIxNAorKwlmYWRkLmQgZnIwLCBmcjAsIGZyMAorKwlmYWRkLmQgZnIwLCBmcjE0LCBmcjE0CisrCWZhZGQuZCBmcjE0LCBmcjAsIGZyMTQKKysJZmFkZC5kIGZyMTQsIGZyMTQsIGZyMAorKwlmYWRkLmQgZnI2LCBmcjgsIGZyOAorKwlmYWRkLmQgZnI4LCBmcjYsIGZyOAorKwlmYWRkLmQgZnI4LCBmcjgsIGZyNgorKwkuZ2xvYmFsCWZzdWJfZAorK2ZzdWJfZDoKKysJZnN1Yi5kIGZyMTQsIGZyMTQsIGZyMTQKKysJZnN1Yi5kIGZyMCwgZnIwLCBmcjAKKysJZnN1Yi5kIGZyMCwgZnIxNCwgZnIxNAorKwlmc3ViLmQgZnIxNCwgZnIwLCBmcjE0CisrCWZzdWIuZCBmcjE0LCBmcjE0LCBmcjAKKysJZnN1Yi5kIGZyNiwgZnI4LCBmcjgKKysJZnN1Yi5kIGZyOCwgZnI2LCBmcjgKKysJZnN1Yi5kIGZyOCwgZnI4LCBmcjYKKysJLmdsb2JhbAlmbWFjX2QKKytmbWFjX2Q6CisrCWZtYWMuZCBmcjE0LCBmcjE0LCBmcjE0CisrCWZtYWMuZCBmcjAsIGZyMCwgZnIwCisrCWZtYWMuZCBmcjAsIGZyMTQsIGZyMTQKKysJZm1hYy5kIGZyMTQsIGZyMCwgZnIxNAorKwlmbWFjLmQgZnIxNCwgZnIxNCwgZnIwCisrCWZtYWMuZCBmcjYsIGZyOCwgZnI4CisrCWZtYWMuZCBmcjgsIGZyNiwgZnI4CisrCWZtYWMuZCBmcjgsIGZyOCwgZnI2CisrCS5nbG9iYWwJZm5tYWNfZAorK2ZubWFjX2Q6CisrCWZubWFjLmQgZnIxNCwgZnIxNCwgZnIxNAorKwlmbm1hYy5kIGZyMCwgZnIwLCBmcjAKKysJZm5tYWMuZCBmcjAsIGZyMTQsIGZyMTQKKysJZm5tYWMuZCBmcjE0LCBmcjAsIGZyMTQKKysJZm5tYWMuZCBmcjE0LCBmcjE0LCBmcjAKKysJZm5tYWMuZCBmcjYsIGZyOCwgZnI4CisrCWZubWFjLmQgZnI4LCBmcjYsIGZyOAorKwlmbm1hYy5kIGZyOCwgZnI4LCBmcjYKKysJLmdsb2JhbAlmbXNjX2QKKytmbXNjX2Q6CisrCWZtc2MuZCBmcjE0LCBmcjE0LCBmcjE0CisrCWZtc2MuZCBmcjAsIGZyMCwgZnIwCisrCWZtc2MuZCBmcjAsIGZyMTQsIGZyMTQKKysJZm1zYy5kIGZyMTQsIGZyMCwgZnIxNAorKwlmbXNjLmQgZnIxNCwgZnIxNCwgZnIwCisrCWZtc2MuZCBmcjYsIGZyOCwgZnI4CisrCWZtc2MuZCBmcjgsIGZyNiwgZnI4CisrCWZtc2MuZCBmcjgsIGZyOCwgZnI2CisrCS5nbG9iYWwJZm5tc2NfZAorK2ZubXNjX2Q6CisrCWZubXNjLmQgZnIxNCwgZnIxNCwgZnIxNAorKwlmbm1zYy5kIGZyMCwgZnIwLCBmcjAKKysJZm5tc2MuZCBmcjAsIGZyMTQsIGZyMTQKKysJZm5tc2MuZCBmcjE0LCBmcjAsIGZyMTQKKysJZm5tc2MuZCBmcjE0LCBmcjE0LCBmcjAKKysJZm5tc2MuZCBmcjYsIGZyOCwgZnI4CisrCWZubXNjLmQgZnI4LCBmcjYsIGZyOAorKwlmbm1zYy5kIGZyOCwgZnI4LCBmcjYKKysJLmdsb2JhbAlmbXVsX2QKKytmbXVsX2Q6CisrCWZtdWwuZCBmcjE0LCBmcjE0LCBmcjE0CisrCWZtdWwuZCBmcjAsIGZyMCwgZnIwCisrCWZtdWwuZCBmcjAsIGZyMTQsIGZyMTQKKysJZm11bC5kIGZyMTQsIGZyMCwgZnIxNAorKwlmbXVsLmQgZnIxNCwgZnIxNCwgZnIwCisrCWZtdWwuZCBmcjYsIGZyOCwgZnI4CisrCWZtdWwuZCBmcjgsIGZyNiwgZnI4CisrCWZtdWwuZCBmcjgsIGZyOCwgZnI2CisrCS5nbG9iYWwJZm5tdWxfZAorK2ZubXVsX2Q6CisrCWZubXVsLmQgZnIxNCwgZnIxNCwgZnIxNAorKwlmbm11bC5kIGZyMCwgZnIwLCBmcjAKKysJZm5tdWwuZCBmcjAsIGZyMTQsIGZyMTQKKysJZm5tdWwuZCBmcjE0LCBmcjAsIGZyMTQKKysJZm5tdWwuZCBmcjE0LCBmcjE0LCBmcjAKKysJZm5tdWwuZCBmcjYsIGZyOCwgZnI4CisrCWZubXVsLmQgZnI4LCBmcjYsIGZyOAorKwlmbm11bC5kIGZyOCwgZnI4LCBmcjYKKysJLmdsb2JhbAlmbmVnX2QKKytmbmVnX2Q6CisrCWZuZWcuZCBmcjE0LCBmcjE0CisrCWZuZWcuZCBmcjAsIGZyMAorKwlmbmVnLmQgZnIwLCBmcjE0CisrCWZuZWcuZCBmcjE0LCBmcjAKKysJZm5lZy5kIGZyNiwgZnI4CisrCWZuZWcuZCBmcjgsIGZyNgorKwkuZ2xvYmFsCWZhYnNfZAorK2ZhYnNfZDoKKysJZmFicy5kIGZyMTQsIGZyMTQKKysJZmFicy5kIGZyMCwgZnIwCisrCWZhYnMuZCBmcjAsIGZyMTQKKysJZmFicy5kIGZyMTQsIGZyMAorKwlmYWJzLmQgZnI2LCBmcjgKKysJZmFicy5kIGZyOCwgZnI2CisrCS5nbG9iYWwJZmNtcF9kCisrZmNtcF9kOgorKwlmY21wLmQgZnIxNCwgZnIxNAorKwlmY21wLmQgZnIwLCBmcjAKKysJZmNtcC5kIGZyMCwgZnIxNAorKwlmY21wLmQgZnIxNCwgZnIwCisrCWZjbXAuZCBmcjYsIGZyOAorKwlmY21wLmQgZnI4LCBmcjYKKysJLmdsb2JhbCBmbW92X3MKKytmbW92X3M6CisrCWZtb3YucyBmcjE1LCBmcjE1CisrCWZtb3YucyBmcjAsIGZyMAorKwlmbW92LnMgZnIxNSwgZnIwCisrCWZtb3YucyBmcjAsIGZyMTUKKysJZm1vdi5zIGZyOCwgZnI3CisrCWZtb3YucyBmcjcsIGZyOAorKwlmbW92LnMgcGMsIGZyMTUKKysJZm1vdi5zIHIwLCBmcjAKKysJZm1vdi5zIHBjLCBmcjAKKysJZm1vdi5zIHIwLCBmcjE1CisrCWZtb3YucyByOCwgZnI3CisrCWZtb3YucyByNywgZnI4CisrCWZtb3YucyBmcjE1LCBwYworKwlmbW92LnMgZnIwLCByMAorKwlmbW92LnMgZnIxNSwgcjAKKysJZm1vdi5zIGZyMCwgcGMKKysJZm1vdi5zIGZyOCwgcjcKKysJZm1vdi5zIGZyNywgcjgKKysJLmdsb2JhbCBmbW92X2QKKytmbW92X2Q6CisrCWZtb3YuZCBmcjE0LCBmcjE0CisrCWZtb3YuZCBmcjAsIGZyMAorKwlmbW92LmQgZnIxNCwgZnIwCisrCWZtb3YuZCBmcjAsIGZyMTQKKysJZm1vdi5kIGZyOCwgZnI2CisrCWZtb3YuZCBmcjYsIGZyOAorKwlmbW92LmQgbHIsIGZyMTQKKysJZm1vdi5kIHIwLCBmcjAKKysJZm1vdi5kIGxyLCBmcjAKKysJZm1vdi5kIHIwLCBmcjE0CisrCWZtb3YuZCByOCwgZnI2CisrCWZtb3YuZCByNiwgZnI4CisrCWZtb3YuZCBmcjE0LCBscgorKwlmbW92LmQgZnIwLCByMAorKwlmbW92LmQgZnIxNCwgcjAKKysJZm1vdi5kIGZyMCwgbHIKKysJZm1vdi5kIGZyOCwgcjYKKysJZm1vdi5kIGZyNiwgcjgKKysJLmdsb2JhbCBmY2FzdHNfZAorK2ZjYXN0c19kOgorKwlmY2FzdHMuZCBmcjE1LCBmcjE0CisrCWZjYXN0cy5kIGZyMCwgZnIwCisrCWZjYXN0cy5kIGZyMTUsIGZyMAorKwlmY2FzdHMuZCBmcjAsIGZyMTQKKysJZmNhc3RzLmQgZnI4LCBmcjYKKysJZmNhc3RzLmQgZnI3LCBmcjgKKysJLmdsb2JhbCBmY2FzdGRfcworK2ZjYXN0ZF9zOgorKwlmY2FzdGQucyBmcjE0LCBmcjE1CisrCWZjYXN0ZC5zIGZyMCwgZnIwCisrCWZjYXN0ZC5zIGZyMTQsIGZyMAorKwlmY2FzdGQucyBmcjAsIGZyMTUKKysJZmNhc3RkLnMgZnI4LCBmcjcKKysJZmNhc3RkLnMgZnI2LCBmcjgKKy0tLSAvZGV2L251bGwKKysrKyBiL2dhcy90ZXN0c3VpdGUvZ2FzL2F2cjMyL2h3cmQtbHdyZC5kCitAQCAtMCwwICsxLDQ3IEBACisrI2FzOgorKyNvYmpkdW1wOiAtZHIKKysjbmFtZTogaHdyZC1sd3JkCisrCisrLio6ICtmaWxlIGZvcm1hdCAuKgorKworK0Rpc2Fzc2VtYmx5IG9mIHNlY3Rpb24gXC50ZXh0OgorKworKzAwMDAwMDAwIDx0ZXN0X2h3cmQ+OgorKyAgIDA6CWUwIDYwIDg3IDY1IAltb3YgcjAsMzQ2NjEKKysgICA0OgllMCA2MCAxMiAzNCAJbW92IHIwLDQ2NjAKKysgICA4OgllMCA2MCAwMCAwMCAJbW92IHIwLDAKKysJCQk4OiBSX0FWUjMyX0hJMTYJXC50ZXh0XCsweDYwCisrICAgYzoJZTAgNjAgMDAgMDAgCW1vdiByMCwwCisrCQkJYzogUl9BVlIzMl9ISTE2CWV4dHN5bTEKKysgIDEwOgllYSAxMCA4NyA2NSAJb3JoIHIwLDB4ODc2NQorKyAgMTQ6CWVhIDEwIDEyIDM0IAlvcmggcjAsMHgxMjM0CisrICAxODoJZWEgMTAgMDAgMDAgCW9yaCByMCwweDAKKysJCQkxODogUl9BVlIzMl9ISTE2CVwudGV4dFwrMHg2MAorKyAgMWM6CWVhIDEwIDAwIDAwIAlvcmggcjAsMHgwCisrCQkJMWM6IFJfQVZSMzJfSEkxNglleHRzeW0xCisrICAyMDoJZTQgMTAgODcgNjUgCWFuZGggcjAsMHg4NzY1CisrICAyNDoJZTQgMTAgMTIgMzQgCWFuZGggcjAsMHgxMjM0CisrICAyODoJZTQgMTAgMDAgMDAgCWFuZGggcjAsMHgwCisrCQkJMjg6IFJfQVZSMzJfSEkxNglcLnRleHRcKzB4NjAKKysgIDJjOgllNCAxMCAwMCAwMCAJYW5kaCByMCwweDAKKysJCQkyYzogUl9BVlIzMl9ISTE2CWV4dHN5bTEKKysKKyswMDAwMDAzMCA8dGVzdF9sd3JkPjoKKysgIDMwOgllMCA2MCA0MyAyMSAJbW92IHIwLDE3MTg1CisrICAzNDoJZTAgNjAgNTYgNzggCW1vdiByMCwyMjEzNgorKyAgMzg6CWUwIDYwIDAwIDAwIAltb3YgcjAsMAorKwkJCTM4OiBSX0FWUjMyX0xPMTYJXC50ZXh0XCsweDYwCisrICAzYzoJZTAgNjAgMDAgMDAgCW1vdiByMCwwCisrCQkJM2M6IFJfQVZSMzJfTE8xNglleHRzeW0xCisrICA0MDoJZTggMTAgNDMgMjEgCW9ybCByMCwweDQzMjEKKysgIDQ0OgllOCAxMCA1NiA3OCAJb3JsIHIwLDB4NTY3OAorKyAgNDg6CWU4IDEwIDAwIDAwIAlvcmwgcjAsMHgwCisrCQkJNDg6IFJfQVZSMzJfTE8xNglcLnRleHRcKzB4NjAKKysgIDRjOgllOCAxMCAwMCAwMCAJb3JsIHIwLDB4MAorKwkJCTRjOiBSX0FWUjMyX0xPMTYJZXh0c3ltMQorKyAgNTA6CWUwIDEwIDQzIDIxIAlhbmRsIHIwLDB4NDMyMQorKyAgNTQ6CWUwIDEwIDU2IDc4IAlhbmRsIHIwLDB4NTY3OAorKyAgNTg6CWUwIDEwIDAwIDAwIAlhbmRsIHIwLDB4MAorKwkJCTU4OiBSX0FWUjMyX0xPMTYJXC50ZXh0XCsweDYwCisrICA1YzoJZTAgMTAgMDAgMDAgCWFuZGwgcjAsMHgwCisrCQkJNWM6IFJfQVZSMzJfTE8xNglleHRzeW0xCistLS0gL2Rldi9udWxsCisrKysgYi9nYXMvdGVzdHN1aXRlL2dhcy9hdnIzMi9od3JkLWx3cmQucworQEAgLTAsMCArMSwzOSBAQAorKworKyAgICAgICAgLmVxdSAgICBzeW0xLCAweDEyMzQ1Njc4CisrCisrICAgICAgICAudGV4dAorKyAgICAgICAgLmdsb2JhbCB0ZXN0X2h3cmQKKyt0ZXN0X2h3cmQ6CisrICAgICAgICBtb3YgICAgIHIwLCBoaSgweDg3NjU0MzIxKQorKyAgICAgICAgbW92ICAgICByMCwgaGkoc3ltMSkKKysgICAgICAgIG1vdiAgICAgcjAsIGhpKHN5bTIpCisrICAgICAgICBtb3YgICAgIHIwLCBoaShleHRzeW0xKQorKworKyAgICAgICAgb3JoCXIwLCBoaSgweDg3NjU0MzIxKQorKyAgICAgICAgb3JoCXIwLCBoaShzeW0xKQorKyAgICAgICAgb3JoCXIwLCBoaShzeW0yKQorKyAgICAgICAgb3JoCXIwLCBoaShleHRzeW0xKQorKworKyAgICAgICAgYW5kaAlyMCwgaGkoMHg4NzY1NDMyMSkKKysgICAgICAgIGFuZGgJcjAsIGhpKHN5bTEpCisrICAgICAgICBhbmRoCXIwLCBoaShzeW0yKQorKyAgICAgICAgYW5kaAlyMCwgaGkoZXh0c3ltMSkKKysKKysgICAgICAgIC5nbG9iYWwgdGVzdF9sd3JkCisrdGVzdF9sd3JkOgorKyAgICAgICAgbW92ICAgICByMCwgbG8oMHg4NzY1NDMyMSkKKysgICAgICAgIG1vdiAgICAgcjAsIGxvKHN5bTEpCisrICAgICAgICBtb3YgICAgIHIwLCBsbyhzeW0yKQorKyAgICAgICAgbW92ICAgICByMCwgbG8oZXh0c3ltMSkKKysKKysgICAgICAgIG9ybAlyMCwgbG8oMHg4NzY1NDMyMSkKKysgICAgICAgIG9ybAlyMCwgbG8oc3ltMSkKKysgICAgICAgIG9ybAlyMCwgbG8oc3ltMikKKysgICAgICAgIG9ybAlyMCwgbG8oZXh0c3ltMSkKKysKKysgICAgICAgIGFuZGwJcjAsIGxvKDB4ODc2NTQzMjEpCisrICAgICAgICBhbmRsCXIwLCBsbyhzeW0xKQorKyAgICAgICAgYW5kbAlyMCwgbG8oc3ltMikKKysgICAgICAgIGFuZGwJcjAsIGxvKGV4dHN5bTEpCisrCisrc3ltMjoKKy0tLSAvZGV2L251bGwKKysrKyBiL2dhcy90ZXN0c3VpdGUvZ2FzL2F2cjMyL2ptcHRhYmxlLmQKK0BAIC0wLDAgKzEsMjAgQEAKKysjc291cmNlOiBqbXB0YWJsZS5zCisrI2FzOgorKyNvYmpkdW1wOiAtZHIKKysjbmFtZTogam1wdGFibGUKKysKKysuKjogK2ZpbGUgZm9ybWF0IC4qCisrCisrRGlzYXNzZW1ibHkgb2Ygc2VjdGlvbiBcLnRleHQ6CisrCisrMDAwMDAwMDAgPGptcHRhYmxlX3Rlc3Q+OgorKyAgIDA6CWZlIGM4IGZmIGY0IAlzdWIgcjgscGMsLTEyCisrICAgNDoJZjAgMDAgMDAgMmYgCWFkZCBwYyxyOCxyMDw8MHgyCisrICAgODoJZDcgMDMgICAgICAgCW5vcAorKyAgIGE6CTAwIDAwICAgICAgIAlhZGQgcjAscjAKKysgICBjOgljMCAzOCAgICAgICAJcmptcCAxMiA8am1wdGFibGVfdGVzdFwrMHgxMj4KKysgICBlOgljMCAzOCAgICAgICAJcmptcCAxNCA8am1wdGFibGVfdGVzdFwrMHgxND4KKysgIDEwOgljMCAzOCAgICAgICAJcmptcCAxNiA8am1wdGFibGVfdGVzdFwrMHgxNj4KKysgIDEyOglkNyAwMyAgICAgICAJbm9wCisrICAxNDoJZDcgMDMgICAgICAgCW5vcAorKyAgMTY6CWQ3IDAzICAgICAgIAlub3AKKy0tLSAvZGV2L251bGwKKysrKyBiL2dhcy90ZXN0c3VpdGUvZ2FzL2F2cjMyL2ptcHRhYmxlX2xpbmtyZWxheC5kCitAQCAtMCwwICsxLDI1IEBACisrI3NvdXJjZTogam1wdGFibGUucworKyNhczogLS1saW5rcmVsYXgKKysjb2JqZHVtcDogLWRyCisrI25hbWU6IGptcHRhYmxlX2xpbmtyZWxheAorKworKy4qOiArZmlsZSBmb3JtYXQgLioKKysKKytEaXNhc3NlbWJseSBvZiBzZWN0aW9uIFwudGV4dDoKKysKKyswMDAwMDAwMCA8am1wdGFibGVfdGVzdD46CisrICAgMDoJZmUgYzggMDAgMDAgCXN1YiByOCxwYywwCisrCQkJMDogUl9BVlIzMl8xNk5fUENSRUwJXC50ZXh0XCsweGMKKysgICA0OglmMCAwMCAwMCAyZiAJYWRkIHBjLHI4LHIwPDwweDIKKysgICA4OglkNyAwMyAgICAgICAJbm9wCisrICAgYToJMDAgMDAgICAgICAgCWFkZCByMCxyMAorKwkJCWE6IFJfQVZSMzJfQUxJR04JXCpBQlNcKlwrMHgyCisrICAgYzoJYzAgMDggICAgICAgCXJqbXAgYyA8am1wdGFibGVfdGVzdFwrMHhjPgorKwkJCWM6IFJfQVZSMzJfMTFIX1BDUkVMCVwudGV4dFwrMHgxMgorKyAgIGU6CWMwIDA4ICAgICAgIAlyam1wIGUgPGptcHRhYmxlX3Rlc3RcKzB4ZT4KKysJCQllOiBSX0FWUjMyXzExSF9QQ1JFTAlcLnRleHRcKzB4MTQKKysgIDEwOgljMCAwOCAgICAgICAJcmptcCAxMCA8am1wdGFibGVfdGVzdFwrMHgxMD4KKysJCQkxMDogUl9BVlIzMl8xMUhfUENSRUwJXC50ZXh0XCsweDE2CisrICAxMjoJZDcgMDMgICAgICAgCW5vcAorKyAgMTQ6CWQ3IDAzICAgICAgIAlub3AKKysgIDE2OglkNyAwMyAgICAgICAJbm9wCistLS0gL2Rldi9udWxsCisrKysgYi9nYXMvdGVzdHN1aXRlL2dhcy9hdnIzMi9qbXB0YWJsZS5zCitAQCAtMCwwICsxLDE0IEBACisrCisrCS50ZXh0CisrCS5nbG9iYWwJam1wdGFibGVfdGVzdAorK2ptcHRhYmxlX3Rlc3Q6CisrCXN1YglyOCwgcGMsIC0oLkwxIC0gLikKKysJYWRkCXBjLCByOCwgcjAgPDwgMgorKwlub3AKKysJLmFsaWduCTIKKysuTDE6CXJqbXAJMWYKKysJcmptcAkyZgorKwlyam1wCTNmCisrMToJbm9wCisrMjoJbm9wCisrMzoJbm9wCistLS0gL2Rldi9udWxsCisrKysgYi9nYXMvdGVzdHN1aXRlL2dhcy9hdnIzMi9sZGFfbm9waWMuZAorQEAgLTAsMCArMSwzMiBAQAorKyNzb3VyY2U6IGxkYS5zCisrI2FzOgorKyNvYmpkdW1wOiAtZHIKKysjbmFtZTogbGRhX25vcGljCisrCisrLio6ICtmaWxlIGZvcm1hdCAuKgorKworK0Rpc2Fzc2VtYmx5IG9mIHNlY3Rpb24gXC50ZXh0OgorKworKzAwMDAwMDAwIDxsZGFfdGVzdD46CisrICAgICAgIDA6CWYyIGM4IDAwIDAwIAlzdWIgcjgscjksMAorKworKzAwMDAwMDA0IDxmYXJfbmVnYXRpdmU+OgorKyAgICAgICA0OglmNiBjYSAwMCAwMCAJc3ViIHIxMCxyMTEsMAorKwkuLi4KKysgICAgODAwMDoJZmUgYzAgN2YgZmMgCXN1YiByMCxwYywzMjc2NAorKyAgICA4MDA0Ogk0OCAzMSAgICAgICAJbGRkcGMgcjEsODAxMCA8ZmFyX25lZ2F0aXZlXCsweDgwMGM+CisrICAgIDgwMDY6CTQ4IDQyICAgICAgIAlsZGRwYyByMiw4MDE0IDxmYXJfbmVnYXRpdmVcKzB4ODAxMD4KKysgICAgODAwODoJNDggNDMgICAgICAgCWxkZHBjIHIzLDgwMTggPGZhcl9uZWdhdGl2ZVwrMHg4MDE0PgorKyAgICA4MDBhOgk0OCA1NCAgICAgICAJbGRkcGMgcjQsODAxYyA8ZmFyX25lZ2F0aXZlXCsweDgwMTg+CisrICAgIDgwMGM6CWZlIGM1IDgwIDA0IAlzdWIgcjUscGMsLTMyNzY0CisrCS4uLgorKwkJCTgwMTA6IFJfQVZSMzJfMzJfQ1BFTlQJXC50ZXh0CisrCQkJODAxNDogUl9BVlIzMl8zMl9DUEVOVAlcLmRhdGEKKysJCQk4MDE4OiBSX0FWUjMyXzMyX0NQRU5UCXVuZGVmaW5lZAorKwkJCTgwMWM6IFJfQVZSMzJfMzJfQ1BFTlQJXC50ZXh0XCsweDEwMDFjCisrCisrMDAwMTAwMDggPGZhcl9wb3NpdGl2ZT46CisrICAgMTAwMDg6CWZhIGNjIDAwIDAwIAlzdWIgcjEyLHNwLDAKKysJLi4uCisrMDAwMTAwMWMgPHRvb2Zhcl9wb3NpdGl2ZT46CisrICAgMTAwMWM6CWZlIGNlIDAwIDAwIAlzdWIgbHIscGMsMAorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2FzL3Rlc3RzdWl0ZS9nYXMvYXZyMzIvbGRhX25vcGljX2xpbmtyZWxheC5kCitAQCAtMCwwICsxLDQxIEBACisrI3NvdXJjZTogbGRhLnMKKysjYXM6IC0tbGlua3JlbGF4CisrI29iamR1bXA6IC1kcgorKyNuYW1lOiBsZGFfbm9waWNfbGlua3JlbGF4CisrCisrLio6ICtmaWxlIGZvcm1hdCAuKgorKworK0Rpc2Fzc2VtYmx5IG9mIHNlY3Rpb24gXC50ZXh0OgorKworKzAwMDAwMDAwIDxsZGFfdGVzdD46CisrICAgICAgIDA6CWYyIGM4IDAwIDAwIAlzdWIgcjgscjksMAorKworKzAwMDAwMDA0IDxmYXJfbmVnYXRpdmU+OgorKyAgICAgICA0OglmNiBjYSAwMCAwMCAJc3ViIHIxMCxyMTEsMAorKwlcLlwuXC4KKysgICAgODAwMDoJNDggMDAgICAgICAgCWxkZHBjIHIwLDgwMDAgPGZhcl9uZWdhdGl2ZVwrMHg3ZmZjPgorKwkJCTgwMDA6IFJfQVZSMzJfOVdfQ1AJXC50ZXh0XCsweDgwMGMKKysgICAgODAwMjoJNDggMDEgICAgICAgCWxkZHBjIHIxLDgwMDAgPGZhcl9uZWdhdGl2ZVwrMHg3ZmZjPgorKwkJCTgwMDI6IFJfQVZSMzJfOVdfQ1AJXC50ZXh0XCsweDgwMTAKKysgICAgODAwNDoJNDggMDIgICAgICAgCWxkZHBjIHIyLDgwMDQgPGZhcl9uZWdhdGl2ZVwrMHg4MDAwPgorKwkJCTgwMDQ6IFJfQVZSMzJfOVdfQ1AJXC50ZXh0XCsweDgwMTQKKysgICAgODAwNjoJNDggMDMgICAgICAgCWxkZHBjIHIzLDgwMDQgPGZhcl9uZWdhdGl2ZVwrMHg4MDAwPgorKwkJCTgwMDY6IFJfQVZSMzJfOVdfQ1AJXC50ZXh0XCsweDgwMTgKKysgICAgODAwODoJNDggMDQgICAgICAgCWxkZHBjIHI0LDgwMDggPGZhcl9uZWdhdGl2ZVwrMHg4MDA0PgorKwkJCTgwMDg6IFJfQVZSMzJfOVdfQ1AJXC50ZXh0XCsweDgwMWMKKysgICAgODAwYToJNDggMDUgICAgICAgCWxkZHBjIHI1LDgwMDggPGZhcl9uZWdhdGl2ZVwrMHg4MDA0PgorKwkJCTgwMGE6IFJfQVZSMzJfOVdfQ1AJXC50ZXh0XCsweDgwMjAKKysJXC5cLlwuCisrCQkJODAwYzogUl9BVlIzMl9BTElHTglcKkFCU1wqXCsweDIKKysJCQk4MDBjOiBSX0FWUjMyXzMyX0NQRU5UCVwudGV4dFwrMHg0CisrCQkJODAxMDogUl9BVlIzMl8zMl9DUEVOVAlcLnRleHQKKysJCQk4MDE0OiBSX0FWUjMyXzMyX0NQRU5UCVwuZGF0YQorKwkJCTgwMTg6IFJfQVZSMzJfMzJfQ1BFTlQJdW5kZWZpbmVkCisrCQkJODAxYzogUl9BVlIzMl8zMl9DUEVOVAlcLnRleHRcKzB4MTAwMjAKKysJCQk4MDIwOiBSX0FWUjMyXzMyX0NQRU5UCVwudGV4dFwrMHgxMDAwYworKworKzAwMDEwMDBjIDxmYXJfcG9zaXRpdmU+OgorKyAgIDEwMDBjOglmYSBjYyAwMCAwMCAJc3ViIHIxMixzcCwwCisrCVwuXC5cLgorKzAwMDEwMDIwIDx0b29mYXJfcG9zaXRpdmU+OgorKyAgIDEwMDIwOglmZSBjZSAwMCAwMCAJc3ViIGxyLHBjLDAKKy0tLSAvZGV2L251bGwKKysrKyBiL2dhcy90ZXN0c3VpdGUvZ2FzL2F2cjMyL2xkYV9waWMuZAorQEAgLTAsMCArMSwzMiBAQAorKyNzb3VyY2U6IGxkYS5zCisrI2FzOiAtLXBpYworKyNvYmpkdW1wOiAtZHIKKysjbmFtZTogbGRhX3BpYworKworKy4qOiArZmlsZSBmb3JtYXQgLioKKysKKytEaXNhc3NlbWJseSBvZiBzZWN0aW9uIFwudGV4dDoKKysKKyswMDAwMDAwMCA8bGRhX3Rlc3Q+OgorKyAgICAgICAwOglmMiBjOCAwMCAwMCAJc3ViIHI4LHI5LDAKKysKKyswMDAwMDAwNCA8ZmFyX25lZ2F0aXZlPjoKKysgICAgICAgNDoJZjYgY2EgMDAgMDAgCXN1YiByMTAscjExLDAKKysJLi4uCisrICAgIDgwMDA6CWZlIGMwIDdmIGZjIAlzdWIgcjAscGMsMzI3NjQKKysgICAgODAwNDoJZWMgZjEgMDAgMDAgCWxkLncgcjEscjZcWzBcXQorKwkJCTgwMDQ6IFJfQVZSMzJfR09UMTZTCXRvb2Zhcl9uZWdhdGl2ZQorKyAgICA4MDA4OgllYyBmMiAwMCAwMCAJbGQudyByMixyNlxbMFxdCisrCQkJODAwODogUl9BVlIzMl9HT1QxNlMJZGlmZmVyZW50X3NlY3Rpb24KKysgICAgODAwYzoJZWMgZjMgMDAgMDAgCWxkLncgcjMscjZcWzBcXQorKwkJCTgwMGM6IFJfQVZSMzJfR09UMTZTCXVuZGVmaW5lZAorKyAgICA4MDEwOgllYyBmNCAwMCAwMCAJbGQudyByNCxyNlxbMFxdCisrCQkJODAxMDogUl9BVlIzMl9HT1QxNlMJdG9vZmFyX3Bvc2l0aXZlCisrICAgIDgwMTQ6CWZlIGM1IDgwIDE0IAlzdWIgcjUscGMsLTMyNzQ4CisrCS4uLgorKworKzAwMDEwMDAwIDxmYXJfcG9zaXRpdmU+OgorKyAgIDEwMDAwOglmYSBjYyAwMCAwMCAJc3ViIHIxMixzcCwwCisrCS4uLgorKzAwMDEwMDE0IDx0b29mYXJfcG9zaXRpdmU+OgorKyAgIDEwMDE0OglmZSBjZSAwMCAwMCAJc3ViIGxyLHBjLDAKKy0tLSAvZGV2L251bGwKKysrKyBiL2dhcy90ZXN0c3VpdGUvZ2FzL2F2cjMyL2xkYV9waWNfbGlua3JlbGF4LmQKK0BAIC0wLDAgKzEsNDAgQEAKKysjc291cmNlOiBsZGEucworKyNhczogLS1waWMgLS1saW5rcmVsYXgKKysjb2JqZHVtcDogLWRyCisrI25hbWU6IGxkYV9waWNfbGlua3JlbGF4CisrCisrLio6ICtmaWxlIGZvcm1hdCAuKgorKworK0Rpc2Fzc2VtYmx5IG9mIHNlY3Rpb24gXC50ZXh0OgorKworKzAwMDAwMDAwIDxsZGFfdGVzdD46CisrICAgICAgIDA6CWYyIGM4IDAwIDAwIAlzdWIgcjgscjksMAorKworKzAwMDAwMDA0IDxmYXJfbmVnYXRpdmU+OgorKyAgICAgICA0OglmNiBjYSAwMCAwMCAJc3ViIHIxMCxyMTEsMAorKwkuLi4KKysgICAgODAwMDoJZTAgNjAgMDAgMDAgCW1vdiByMCwwCisrCQkJODAwMDogUl9BVlIzMl9MREFfR09UCWZhcl9uZWdhdGl2ZQorKyAgICA4MDA0OgllYyAwMCAwMyAyMCAJbGRcLncgcjAscjZcW3IwPDwweDJcXQorKyAgICA4MDA4OgllMCA2MSAwMCAwMCAJbW92IHIxLDAKKysJCQk4MDA4OiBSX0FWUjMyX0xEQV9HT1QJdG9vZmFyX25lZ2F0aXZlCisrICAgIDgwMGM6CWVjIDAxIDAzIDIxIAlsZFwudyByMSxyNlxbcjE8PDB4MlxdCisrICAgIDgwMTA6CWUwIDYyIDAwIDAwIAltb3YgcjIsMAorKwkJCTgwMTA6IFJfQVZSMzJfTERBX0dPVAlkaWZmZXJlbnRfc2VjdGlvbgorKyAgICA4MDE0OgllYyAwMiAwMyAyMiAJbGRcLncgcjIscjZcW3IyPDwweDJcXQorKyAgICA4MDE4OgllMCA2MyAwMCAwMCAJbW92IHIzLDAKKysJCQk4MDE4OiBSX0FWUjMyX0xEQV9HT1QJdW5kZWZpbmVkCisrICAgIDgwMWM6CWVjIDAzIDAzIDIzIAlsZFwudyByMyxyNlxbcjM8PDB4MlxdCisrICAgIDgwMjA6CWUwIDY0IDAwIDAwIAltb3YgcjQsMAorKwkJCTgwMjA6IFJfQVZSMzJfTERBX0dPVAl0b29mYXJfcG9zaXRpdmUKKysgICAgODAyNDoJZWMgMDQgMDMgMjQgCWxkXC53IHI0LHI2XFtyNDw8MHgyXF0KKysgICAgODAyODoJZTAgNjUgMDAgMDAgCW1vdiByNSwwCisrCQkJODAyODogUl9BVlIzMl9MREFfR09UCWZhcl9wb3NpdGl2ZQorKyAgICA4MDJjOgllYyAwNSAwMyAyNSAJbGRcLncgcjUscjZcW3I1PDwweDJcXQorKwkuLi4KKysKKyswMDAxMDAxOCA8ZmFyX3Bvc2l0aXZlPjoKKysgICAxMDAxODoJZmEgY2MgMDAgMDAgCXN1YiByMTIsc3AsMAorKwkuLi4KKyswMDAxMDAyYyA8dG9vZmFyX3Bvc2l0aXZlPjoKKysgICAxMDAyYzoJZmUgY2UgMDAgMDAgCXN1YiBscixwYywwCistLS0gL2Rldi9udWxsCisrKysgYi9nYXMvdGVzdHN1aXRlL2dhcy9hdnIzMi9sZGEucworQEAgLTAsMCArMSwzMCBAQAorKworKwkudGV4dAorKwkuZ2xvYmFsIGxkYV90ZXN0CisrbGRhX3Rlc3Q6CisrdG9vZmFyX25lZ2F0aXZlOgorKwlzdWIJcjgsIHI5LCAwCisrZmFyX25lZ2F0aXZlOgorKwlzdWIJcjEwLCByMTEsIDAKKysKKysJLmZpbGwJMzI3NjAsIDEsIDB4MDAKKysKKysJbGRhLncJcjAsIGZhcl9uZWdhdGl2ZQorKwlsZGEudwlyMSwgdG9vZmFyX25lZ2F0aXZlCisrCWxkYS53CXIyLCBkaWZmZXJlbnRfc2VjdGlvbgorKwlsZGEudwlyMywgdW5kZWZpbmVkCisrCWxkYS53CXI0LCB0b29mYXJfcG9zaXRpdmUKKysJbGRhLncJcjUsIGZhcl9wb3NpdGl2ZQorKworKwkuY3Bvb2wKKysKKysJLmZpbGwJMzI3NDQsIDEsIDB4MDAKKytmYXJfcG9zaXRpdmU6CisrCXN1YglyMTIsIHNwLCAwCisrCS5maWxsCTE2LCAxLCAweDAwCisrdG9vZmFyX3Bvc2l0aXZlOgorKwlzdWIJbHIsIHBjLCAwCisrCisrCS5kYXRhCisrZGlmZmVyZW50X3NlY3Rpb246CisrCS5sb25nCTB4MTIzNDU2NzgKKy0tLSAvZGV2L251bGwKKysrKyBiL2dhcy90ZXN0c3VpdGUvZ2FzL2F2cjMyL3BjcmVsLmQKK0BAIC0wLDAgKzEsNjQgQEAKKysjYXM6CisrI29iamR1bXA6IC1kcgorKyNuYW1lOiBwY3JlbAorKworKy4qOiArZmlsZSBmb3JtYXQgLioKKysKKytEaXNhc3NlbWJseSBvZiBzZWN0aW9uIFwudGV4dDoKKysKKyswMDAwMDAwMCA8dGVzdF9yam1wPjoKKysgICAwOglkNyAwMyAgICAgICAJbm9wCisrICAgMjoJYzAgMjggICAgICAgCXJqbXAgNiA8dGVzdF9yam1wXCsweDY+CisrICAgNDoJZDcgMDMgICAgICAgCW5vcAorKyAgIDY6CWUwIDhmIDAwIDAwIAlicmFsIDYgPHRlc3RfcmptcFwrMHg2PgorKwkJCTY6IFJfQVZSMzJfMjJIX1BDUkVMCWV4dHN5bTEwCisrCisrMDAwMDAwMGEgPHRlc3RfcmNhbGw+OgorKyAgIGE6CWQ3IDAzICAgICAgIAlub3AKKyswMDAwMDAwYyA8dGVzdF9yY2FsbDI+OgorKyAgIGM6CWMwIDJjICAgICAgIAlyY2FsbCAxMCA8dGVzdF9yY2FsbDJcKzB4ND4KKysgICBlOglkNyAwMyAgICAgICAJbm9wCisrICAxMDoJZTAgYTAgMDAgMDAgCXJjYWxsIDEwIDx0ZXN0X3JjYWxsMlwrMHg0PgorKwkJCTEwOiBSX0FWUjMyXzIySF9QQ1JFTAlleHRzeW0yMQorKworKzAwMDAwMDE0IDx0ZXN0X2JyYW5jaD46CisrICAxNDoJYzAgMzEgICAgICAgCWJybmUgMWEgPHRlc3RfYnJhbmNoXCsweDY+CisrICAxNjoJZTAgOGYgMDAgMDAgCWJyYWwgMTYgPHRlc3RfYnJhbmNoXCsweDI+CisrCQkJMTY6IFJfQVZSMzJfMjJIX1BDUkVMCXRlc3RfYnJhbmNoCisrICAxYToJZTAgODAgMDAgMDAgCWJyZXEgMWEgPHRlc3RfYnJhbmNoXCsweDY+CisrCQkJMWE6IFJfQVZSMzJfMjJIX1BDUkVMCWV4dHN5bTIxCisrCisrMDAwMDAwMWUgPHRlc3RfbGRkcGM+OgorKyAgMWU6CTQ4IDMwICAgICAgIAlsZGRwYyByMCwyOCA8c3ltMT4KKysgIDIwOgk0OCAyMCAgICAgICAJbGRkcGMgcjAsMjggPHN5bTE+CisrICAyMjoJZmUgZjAgMDAgMDAgCWxkLncgcjAscGNcWzBcXQorKwkJCTIyOiBSX0FWUjMyXzE2Ql9QQ1JFTAlleHRzeW0xNgorKwlcLlwuXC4KKysKKyswMDAwMDAyOCA8c3ltMT46CisrICAyODoJZDcgMDMgICAgICAgCW5vcAorKyAgMmE6CWQ3IDAzICAgICAgIAlub3AKKysKKyswMDAwMDAyYyA8dGVzdF9sb2NhbD46CisrICAyYzoJNDggMjAgICAgICAgCWxkZHBjIHIwLDM0IDx0ZXN0X2xvY2FsXCsweDg+CisrICAyZToJNDggMzAgICAgICAgCWxkZHBjIHIwLDM4IDx0ZXN0X2xvY2FsXCsweGM+CisrICAzMDoJNDggMjAgICAgICAgCWxkZHBjIHIwLDM4IDx0ZXN0X2xvY2FsXCsweGM+CisrICAzMjoJMDAgMDAgICAgICAgCWFkZCByMCxyMAorKyAgMzQ6CWQ3IDAzICAgICAgIAlub3AKKysgIDM2OglkNyAwMyAgICAgICAJbm9wCisrICAzODoJZDcgMDMgICAgICAgCW5vcAorKyAgM2E6CWQ3IDAzICAgICAgIAlub3AKKysKKytEaXNhc3NlbWJseSBvZiBzZWN0aW9uIFwudGV4dFwuaW5pdDoKKysKKyswMDAwMDAwMCA8dGVzdF9pbnRlcl9zZWN0aW9uPjoKKysgICAwOgllMCBhMCAuLiAuLiAJcmNhbGwgWzAtOWEtZl0rIDwuKj4KKysJCQkwOiBSX0FWUjMyXzIySF9QQ1JFTAl0ZXN0X3JjYWxsCisrICAgNDoJZDcgMDMgICAgICAgCW5vcAorKyAgIDY6CWUwIGEwIC4uIC4uIAlyY2FsbCBbMC05YS1mXSsgPC4qPgorKwkJCTY6IFJfQVZSMzJfMjJIX1BDUkVMCXRlc3RfcmNhbGwKKysgICBhOgllMCBhMCAuLiAuLiAJcmNhbGwgWzAtOWEtel0rIDwuKj4KKysJCQlhOiBSX0FWUjMyXzIySF9QQ1JFTAlcLnRleHRcKzB4YworKyAgIGU6CWQ3IDAzICAgICAgIAlub3AKKysgIDEwOgllMCBhMCAuLiAuLiAJcmNhbGwgWzAtOWEtZl0rIDwuKj4KKysJCQkxMDogUl9BVlIzMl8yMkhfUENSRUwJXC50ZXh0XCsweGMKKy0tLSAvZGV2L251bGwKKysrKyBiL2dhcy90ZXN0c3VpdGUvZ2FzL2F2cjMyL3BjcmVsLnMKK0BAIC0wLDAgKzEsNTcgQEAKKysKKysgICAgICAgIC50ZXh0CisrICAgICAgICAuZ2xvYmFsIHRlc3RfcmptcAorK3Rlc3RfcmptcDoKKysgICAgICAgIG5vcAorKyAgICAgICAgcmptcCAgICAwZgorKyAgICAgICAgbm9wCisrMDogICAgICByam1wICAgIGV4dHN5bTEwCisrCisrICAgICAgICAuZ2xvYmFsIHRlc3RfcmNhbGwKKyt0ZXN0X3JjYWxsOgorKyAgICAgICAgbm9wCisrdGVzdF9yY2FsbDI6CisrICAgICAgICByY2FsbCAgIDBmCisrICAgICAgICBub3AKKyswOiAgICAgIHJjYWxsICAgZXh0c3ltMjEKKysKKysgICAgICAgIC5nbG9iYWwgdGVzdF9icmFuY2gKKyt0ZXN0X2JyYW5jaDoKKysgICAgICAgIGJybmUgICAgMGYKKysJLyogVGhpcyB3aWxsIGdlbmVyYXRlIGEgcmVsb2Mgc2luY2UgdGVzdF9icmFuY2ggaXMgZ2xvYmFsICovCisrICAgICAgICBicmFsICAgIHRlc3RfYnJhbmNoCisrMDoJYnJlcSAgICBleHRzeW0yMQorKworKyAgICAgICAgLmdsb2JhbCB0ZXN0X2xkZHBjCisrdGVzdF9sZGRwYzoKKysgICAgICAgIGxkZHBjICAgcjAsc3ltMQorKyAgICAgICAgbGRkcGMgICByMCxzeW0xCisrICAgICAgICBsZGRwYyAgIHIwLGV4dHN5bTE2CisrCisrICAgICAgICAuYWxpZ24JMgorK3N5bTE6ICAgbm9wCisrICAgICAgICBub3AKKysKKysJLmdsb2JhbAl0ZXN0X2xvY2FsCisrdGVzdF9sb2NhbDoKKysJbGRkcGMJcjAsIC5MQzEKKysJbGRkcGMJcjAsIC5MQzIKKysJbGRkcGMJcjAsIC5MQzEgKyAweDQKKysKKysJLmFsaWduCTIKKysuTEMxOgorKwlub3AKKysJbm9wCisrLkxDMjoKKysJbm9wCisrCW5vcAorKworKwkuc2VjdGlvbiAudGV4dC5pbml0LCJheCIKKysJLmdsb2JhbCB0ZXN0X2ludGVyX3NlY3Rpb24KKyt0ZXN0X2ludGVyX3NlY3Rpb246CisrCXJjYWxsCXRlc3RfcmNhbGwKKysJbm9wCisrCXJjYWxsCXRlc3RfcmNhbGwKKysJcmNhbGwJdGVzdF9yY2FsbDIKKysJbm9wCisrCXJjYWxsCXRlc3RfcmNhbGwyCistLS0gL2Rldi9udWxsCisrKysgYi9nYXMvdGVzdHN1aXRlL2dhcy9hdnIzMi9waWNvLmQKK0BAIC0wLDAgKzEsMTQ5IEBACisrI2FzOgorKyNvYmpkdW1wOiAtZHIKKysjbmFtZTogcGljbworKworKy4qOiArZmlsZSBmb3JtYXQgLioKKysKKytEaXNhc3NlbWJseSBvZiBzZWN0aW9uIFwudGV4dDoKKysKKytbMC05YS1mXSogPHBpY29zdm1hYz46CisrICpbMC05YS1mXSo6CWUxIGE2IDIwIDAwIAljb3AgY3AxLGNyMCxjcjAsY3IwLDB4YworKyAqWzAtOWEtZl0qOgllMSBhNyAyYiBiYiAJY29wIGNwMSxjcjExLGNyMTEsY3IxMSwweGUKKysgKlswLTlhLWZdKjoJZTEgYTYgM2EgMDUgCWNvcCBjcDEsY3IxMCxjcjAsY3I1LDB4ZAorKyAqWzAtOWEtZl0qOgllMSBhNyAzNiA5MCAJY29wIGNwMSxjcjYsY3I5LGNyMCwweGYKKysKKytbMC05YS1mXSogPHBpY29zdm11bD46CisrICpbMC05YS1mXSo6CWUxIGE0IDIwIDAwIAljb3AgY3AxLGNyMCxjcjAsY3IwLDB4OAorKyAqWzAtOWEtZl0qOgllMSBhNSAyYiBiYiAJY29wIGNwMSxjcjExLGNyMTEsY3IxMSwweGEKKysgKlswLTlhLWZdKjoJZTEgYTQgM2EgMDUgCWNvcCBjcDEsY3IxMCxjcjAsY3I1LDB4OQorKyAqWzAtOWEtZl0qOgllMSBhNSAzNiA5MCAJY29wIGNwMSxjcjYsY3I5LGNyMCwweGIKKysKKytbMC05YS1mXSogPHBpY292bWFjPjoKKysgKlswLTlhLWZdKjoJZTEgYTIgMjAgMDAgCWNvcCBjcDEsY3IwLGNyMCxjcjAsMHg0CisrICpbMC05YS1mXSo6CWUxIGEzIDJiIGJiIAljb3AgY3AxLGNyMTEsY3IxMSxjcjExLDB4NgorKyAqWzAtOWEtZl0qOgllMSBhMiAzYSAwNSAJY29wIGNwMSxjcjEwLGNyMCxjcjUsMHg1CisrICpbMC05YS1mXSo6CWUxIGEzIDM2IDkwIAljb3AgY3AxLGNyNixjcjksY3IwLDB4NworKworK1swLTlhLWZdKiA8cGljb3ZtdWw+OgorKyAqWzAtOWEtZl0qOgllMSBhMCAyMCAwMCAJY29wIGNwMSxjcjAsY3IwLGNyMCwweDAKKysgKlswLTlhLWZdKjoJZTEgYTEgMmIgYmIgCWNvcCBjcDEsY3IxMSxjcjExLGNyMTEsMHgyCisrICpbMC05YS1mXSo6CWUxIGEwIDNhIDA1IAljb3AgY3AxLGNyMTAsY3IwLGNyNSwweDEKKysgKlswLTlhLWZdKjoJZTEgYTEgMzYgOTAgCWNvcCBjcDEsY3I2LGNyOSxjcjAsMHgzCisrCisrWzAtOWEtZl0qIDxwaWNvbGRfZD46CisrICpbMC05YS1mXSo6CWU5IGFmIDNlIGZmIAlsZGNcLmQgY3AxLGNyMTQscGNcWzB4M2ZjXF0KKysgKlswLTlhLWZdKjoJZTkgYTAgMzAgZmYgCWxkY1wuZCBjcDEsY3IwLHIwXFsweDNmY1xdCisrICpbMC05YS1mXSo6CWU5IGEwIDMwIDAwIAlsZGNcLmQgY3AxLGNyMCxyMFxbMHgwXF0KKysgKlswLTlhLWZdKjoJZWYgYTggMjYgNTAgCWxkY1wuZCBjcDEsY3I2LC0tcjgKKysgKlswLTlhLWZdKjoJZWYgYTcgMjggNTAgCWxkY1wuZCBjcDEsY3I4LC0tcjcKKysgKlswLTlhLWZdKjoJZWYgYWEgMzIgNjUgCWxkY1wuZCBjcDEsY3IyLHIxMFxbcjU8PDB4MlxdCisrICpbMC05YS1mXSo6CWVmIGEzIDNjIDQ2IAlsZGNcLmQgY3AxLGNyMTIscjNcW3I2XF0KKysKKytbMC05YS1mXSogPHBpY29sZF93PjoKKysgKlswLTlhLWZdKjoJZTkgYWYgMmYgZmYgCWxkY1wudyBjcDEsY3IxNSxwY1xbMHgzZmNcXQorKyAqWzAtOWEtZl0qOgllOSBhMCAyMCBmZiAJbGRjXC53IGNwMSxjcjAscjBcWzB4M2ZjXF0KKysgKlswLTlhLWZdKjoJZTkgYTAgMjAgMDAgCWxkY1wudyBjcDEsY3IwLHIwXFsweDBcXQorKyAqWzAtOWEtZl0qOgllZiBhOCAyNyA0MCAJbGRjXC53IGNwMSxjcjcsLS1yOAorKyAqWzAtOWEtZl0qOgllZiBhNyAyOCA0MCAJbGRjXC53IGNwMSxjcjgsLS1yNworKyAqWzAtOWEtZl0qOgllZiBhYSAzMSAyNSAJbGRjXC53IGNwMSxjcjEscjEwXFtyNTw8MHgyXF0KKysgKlswLTlhLWZdKjoJZWYgYTMgM2QgMDYgCWxkY1wudyBjcDEsY3IxMyxyM1xbcjZcXQorKworK1swLTlhLWZdKiA8cGljb2xkbV9kPjoKKysgKlswLTlhLWZdKjoJZWQgYWYgMjQgZmYgCWxkY21cLmQgY3AxLHBjLGNyMC1jcjE1CisrICpbMC05YS1mXSo6CWVkIGEwIDI0IDAxIAlsZGNtXC5kIGNwMSxyMCxjcjAtY3IxCisrICpbMC05YS1mXSo6CWVkIGE3IDI0IDgwIAlsZGNtXC5kIGNwMSxyNyxjcjE0LWNyMTUKKysgKlswLTlhLWZdKjoJZWQgYTggMjQgN2YgCWxkY21cLmQgY3AxLHI4LGNyMC1jcjEzCisrCisrWzAtOWEtZl0qIDxwaWNvbGRtX2RfcHU+OgorKyAqWzAtOWEtZl0qOgllZCBhZiAzNCBmZiAJbGRjbVwuZCBjcDEscGNcK1wrLGNyMC1jcjE1CisrICpbMC05YS1mXSo6CWVkIGEwIDM0IDAxIAlsZGNtXC5kIGNwMSxyMFwrXCssY3IwLWNyMQorKyAqWzAtOWEtZl0qOgllZCBhNyAzNCA4MCAJbGRjbVwuZCBjcDEscjdcK1wrLGNyMTQtY3IxNQorKyAqWzAtOWEtZl0qOgllZCBhOCAzNCA3ZiAJbGRjbVwuZCBjcDEscjhcK1wrLGNyMC1jcjEzCisrCisrWzAtOWEtZl0qIDxwaWNvbGRtX3c+OgorKyAqWzAtOWEtZl0qOgllZCBhZiAyMCBmZiAJbGRjbVwudyBjcDEscGMsY3IwLWNyNworKyAqWzAtOWEtZl0qOgllZCBhMCAyMCAwMSAJbGRjbVwudyBjcDEscjAsY3IwCisrICpbMC05YS1mXSo6CWVkIGE3IDIwIDgwIAlsZGNtXC53IGNwMSxyNyxjcjcKKysgKlswLTlhLWZdKjoJZWQgYTggMjAgN2YgCWxkY21cLncgY3AxLHI4LGNyMC1jcjYKKysgKlswLTlhLWZdKjoJZWQgYWYgMjEgZmYgCWxkY21cLncgY3AxLHBjLGNyOC1jcjE1CisrICpbMC05YS1mXSo6CWVkIGEwIDIxIDAxIAlsZGNtXC53IGNwMSxyMCxjcjgKKysgKlswLTlhLWZdKjoJZWQgYTcgMjEgODAgCWxkY21cLncgY3AxLHI3LGNyMTUKKysgKlswLTlhLWZdKjoJZWQgYTggMjEgN2YgCWxkY21cLncgY3AxLHI4LGNyOC1jcjE0CisrCisrWzAtOWEtZl0qIDxwaWNvbGRtX3dfcHU+OgorKyAqWzAtOWEtZl0qOgllZCBhZiAzMCBmZiAJbGRjbVwudyBjcDEscGNcK1wrLGNyMC1jcjcKKysgKlswLTlhLWZdKjoJZWQgYTAgMzAgMDEgCWxkY21cLncgY3AxLHIwXCtcKyxjcjAKKysgKlswLTlhLWZdKjoJZWQgYTcgMzAgODAgCWxkY21cLncgY3AxLHI3XCtcKyxjcjcKKysgKlswLTlhLWZdKjoJZWQgYTggMzAgN2YgCWxkY21cLncgY3AxLHI4XCtcKyxjcjAtY3I2CisrICpbMC05YS1mXSo6CWVkIGFmIDMxIGZmIAlsZGNtXC53IGNwMSxwY1wrXCssY3I4LWNyMTUKKysgKlswLTlhLWZdKjoJZWQgYTAgMzEgMDEgCWxkY21cLncgY3AxLHIwXCtcKyxjcjgKKysgKlswLTlhLWZdKjoJZWQgYTcgMzEgODAgCWxkY21cLncgY3AxLHI3XCtcKyxjcjE1CisrICpbMC05YS1mXSo6CWVkIGE4IDMxIDdmIAlsZGNtXC53IGNwMSxyOFwrXCssY3I4LWNyMTQKKysKKytbMC05YS1mXSogPHBpY29tdl9kPjoKKysgKlswLTlhLWZdKjoJZWYgYWUgMmUgMzAgCW12cmNcLmQgY3AxLGNyMTQsbHIKKysgKlswLTlhLWZdKjoJZWYgYTAgMjAgMzAgCW12cmNcLmQgY3AxLGNyMCxyMAorKyAqWzAtOWEtZl0qOgllZiBhOCAyNiAzMCAJbXZyY1wuZCBjcDEsY3I2LHI4CisrICpbMC05YS1mXSo6CWVmIGE2IDI4IDMwIAltdnJjXC5kIGNwMSxjcjgscjYKKysgKlswLTlhLWZdKjoJZWYgYWUgMmUgMTAgCW12Y3JcLmQgY3AxLGxyLGNyMTQKKysgKlswLTlhLWZdKjoJZWYgYTAgMjAgMTAgCW12Y3JcLmQgY3AxLHIwLGNyMAorKyAqWzAtOWEtZl0qOgllZiBhOCAyNiAxMCAJbXZjclwuZCBjcDEscjgsY3I2CisrICpbMC05YS1mXSo6CWVmIGE2IDI4IDEwIAltdmNyXC5kIGNwMSxyNixjcjgKKysKKytbMC05YS1mXSogPHBpY29tdl93PjoKKysgKlswLTlhLWZdKjoJZWYgYWYgMmYgMjAgCW12cmNcLncgY3AxLGNyMTUscGMKKysgKlswLTlhLWZdKjoJZWYgYTAgMjAgMjAgCW12cmNcLncgY3AxLGNyMCxyMAorKyAqWzAtOWEtZl0qOgllZiBhOCAyNyAyMCAJbXZyY1wudyBjcDEsY3I3LHI4CisrICpbMC05YS1mXSo6CWVmIGE3IDI4IDIwIAltdnJjXC53IGNwMSxjcjgscjcKKysgKlswLTlhLWZdKjoJZWYgYWYgMmYgMDAgCW12Y3JcLncgY3AxLHBjLGNyMTUKKysgKlswLTlhLWZdKjoJZWYgYTAgMjAgMDAgCW12Y3JcLncgY3AxLHIwLGNyMAorKyAqWzAtOWEtZl0qOgllZiBhOCAyNyAwMCAJbXZjclwudyBjcDEscjgsY3I3CisrICpbMC05YS1mXSo6CWVmIGE3IDI4IDAwIAltdmNyXC53IGNwMSxyNyxjcjgKKysKKytbMC05YS1mXSogPHBpY29zdF9kPjoKKysgKlswLTlhLWZdKjoJZWIgYWYgM2UgZmYgCXN0Y1wuZCBjcDEscGNcWzB4M2ZjXF0sY3IxNAorKyAqWzAtOWEtZl0qOgllYiBhMCAzMCAwMCAJc3RjXC5kIGNwMSxyMFxbMHgwXF0sY3IwCisrICpbMC05YS1mXSo6CWVmIGE4IDI2IDcwIAlzdGNcLmQgY3AxLHI4XCtcKyxjcjYKKysgKlswLTlhLWZdKjoJZWYgYTcgMjggNzAgCXN0Y1wuZCBjcDEscjdcK1wrLGNyOAorKyAqWzAtOWEtZl0qOgllZiBhYSAzMiBlNSAJc3RjXC5kIGNwMSxyMTBcW3I1PDwweDJcXSxjcjIKKysgKlswLTlhLWZdKjoJZWYgYTMgM2MgYzYgCXN0Y1wuZCBjcDEscjNcW3I2XF0sY3IxMgorKworK1swLTlhLWZdKiA8cGljb3N0X3c+OgorKyAqWzAtOWEtZl0qOgllYiBhZiAyZiBmZiAJc3RjXC53IGNwMSxwY1xbMHgzZmNcXSxjcjE1CisrICpbMC05YS1mXSo6CWViIGEwIDIwIDAwIAlzdGNcLncgY3AxLHIwXFsweDBcXSxjcjAKKysgKlswLTlhLWZdKjoJZWYgYTggMjcgNjAgCXN0Y1wudyBjcDEscjhcK1wrLGNyNworKyAqWzAtOWEtZl0qOgllZiBhNyAyOCA2MCAJc3RjXC53IGNwMSxyN1wrXCssY3I4CisrICpbMC05YS1mXSo6CWVmIGFhIDMxIGE1IAlzdGNcLncgY3AxLHIxMFxbcjU8PDB4MlxdLGNyMQorKyAqWzAtOWEtZl0qOgllZiBhMyAzZCA4NiAJc3RjXC53IGNwMSxyM1xbcjZcXSxjcjEzCisrCisrWzAtOWEtZl0qIDxwaWNvc3RtX2Q+OgorKyAqWzAtOWEtZl0qOgllZCBhZiAyNSBmZiAJc3RjbVwuZCBjcDEscGMsY3IwLWNyMTUKKysgKlswLTlhLWZdKjoJZWQgYTAgMjUgMDEgCXN0Y21cLmQgY3AxLHIwLGNyMC1jcjEKKysgKlswLTlhLWZdKjoJZWQgYTcgMjUgODAgCXN0Y21cLmQgY3AxLHI3LGNyMTQtY3IxNQorKyAqWzAtOWEtZl0qOgllZCBhOCAyNSA3ZiAJc3RjbVwuZCBjcDEscjgsY3IwLWNyMTMKKysKKytbMC05YS1mXSogPHBpY29zdG1fZF9wdT46CisrICpbMC05YS1mXSo6CWVkIGFmIDM1IGZmIAlzdGNtXC5kIGNwMSwtLXBjLGNyMC1jcjE1CisrICpbMC05YS1mXSo6CWVkIGEwIDM1IDAxIAlzdGNtXC5kIGNwMSwtLXIwLGNyMC1jcjEKKysgKlswLTlhLWZdKjoJZWQgYTcgMzUgODAgCXN0Y21cLmQgY3AxLC0tcjcsY3IxNC1jcjE1CisrICpbMC05YS1mXSo6CWVkIGE4IDM1IDdmIAlzdGNtXC5kIGNwMSwtLXI4LGNyMC1jcjEzCisrCisrWzAtOWEtZl0qIDxwaWNvc3RtX3c+OgorKyAqWzAtOWEtZl0qOgllZCBhZiAyMiBmZiAJc3RjbVwudyBjcDEscGMsY3IwLWNyNworKyAqWzAtOWEtZl0qOgllZCBhMCAyMiAwMSAJc3RjbVwudyBjcDEscjAsY3IwCisrICpbMC05YS1mXSo6CWVkIGE3IDIyIDgwIAlzdGNtXC53IGNwMSxyNyxjcjcKKysgKlswLTlhLWZdKjoJZWQgYTggMjIgN2YgCXN0Y21cLncgY3AxLHI4LGNyMC1jcjYKKysgKlswLTlhLWZdKjoJZWQgYWYgMjMgZmYgCXN0Y21cLncgY3AxLHBjLGNyOC1jcjE1CisrICpbMC05YS1mXSo6CWVkIGEwIDIzIDAxIAlzdGNtXC53IGNwMSxyMCxjcjgKKysgKlswLTlhLWZdKjoJZWQgYTcgMjMgODAgCXN0Y21cLncgY3AxLHI3LGNyMTUKKysgKlswLTlhLWZdKjoJZWQgYTggMjMgN2YgCXN0Y21cLncgY3AxLHI4LGNyOC1jcjE0CisrCisrWzAtOWEtZl0qIDxwaWNvc3RtX3dfcHU+OgorKyAqWzAtOWEtZl0qOgllZCBhZiAzMiBmZiAJc3RjbVwudyBjcDEsLS1wYyxjcjAtY3I3CisrICpbMC05YS1mXSo6CWVkIGEwIDMyIDAxIAlzdGNtXC53IGNwMSwtLXIwLGNyMAorKyAqWzAtOWEtZl0qOgllZCBhNyAzMiA4MCAJc3RjbVwudyBjcDEsLS1yNyxjcjcKKysgKlswLTlhLWZdKjoJZWQgYTggMzIgN2YgCXN0Y21cLncgY3AxLC0tcjgsY3IwLWNyNgorKyAqWzAtOWEtZl0qOgllZCBhZiAzMyBmZiAJc3RjbVwudyBjcDEsLS1wYyxjcjgtY3IxNQorKyAqWzAtOWEtZl0qOgllZCBhMCAzMyAwMSAJc3RjbVwudyBjcDEsLS1yMCxjcjgKKysgKlswLTlhLWZdKjoJZWQgYTcgMzMgODAgCXN0Y21cLncgY3AxLC0tcjcsY3IxNQorKyAqWzAtOWEtZl0qOgllZCBhOCAzMyA3ZiAJc3RjbVwudyBjcDEsLS1yOCxjcjgtY3IxNAorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2FzL3Rlc3RzdWl0ZS9nYXMvYXZyMzIvcGljby5zCitAQCAtMCwwICsxLDE0NCBAQAorKworKwkudGV4dAorKwkuZ2xvYmFsCXBpY29zdm1hYworK3BpY29zdm1hYzoKKysJcGljb3N2bWFjCW91dDAsIGluMCwgaW4wLCBpbjAKKysJcGljb3N2bWFjCW91dDIsIGluMTEsIGluMTEsIGluMTEKKysJcGljb3N2bWFjCW91dDEsIGluMTAsIGluMCwgaW41CisrCXBpY29zdm1hYwlvdXQzLCBpbjYsIGluOSwgaW4wCisrCS5nbG9iYWwgcGljb3N2bXVsCisrcGljb3N2bXVsOgorKwlwaWNvc3ZtdWwJb3V0MCwgaW4wLCBpbjAsIGluMAorKwlwaWNvc3ZtdWwJb3V0MiwgaW4xMSwgaW4xMSwgaW4xMQorKwlwaWNvc3ZtdWwJb3V0MSwgaW4xMCwgaW4wLCBpbjUKKysJcGljb3N2bXVsCW91dDMsIGluNiwgaW45LCBpbjAKKysJLmdsb2JhbCBwaWNvdm1hYworK3BpY292bWFjOgorKwlwaWNvdm1hYwlvdXQwLCBpbjAsIGluMCwgaW4wCisrCXBpY292bWFjCW91dDIsIGluMTEsIGluMTEsIGluMTEKKysJcGljb3ZtYWMJb3V0MSwgaW4xMCwgaW4wLCBpbjUKKysJcGljb3ZtYWMJb3V0MywgaW42LCBpbjksIGluMAorKwkuZ2xvYmFsIHBpY292bXVsCisrcGljb3ZtdWw6CisrCXBpY292bXVsCW91dDAsIGluMCwgaW4wLCBpbjAKKysJcGljb3ZtdWwJb3V0MiwgaW4xMSwgaW4xMSwgaW4xMQorKwlwaWNvdm11bAlvdXQxLCBpbjEwLCBpbjAsIGluNQorKwlwaWNvdm11bAlvdXQzLCBpbjYsIGluOSwgaW4wCisrCS5nbG9iYWwJcGljb2xkX2QKKytwaWNvbGRfZDoKKysJcGljb2xkLmQJdm11Ml9vdXQsIHBjWzEwMjBdCisrCXBpY29sZC5kCWlucGl4MiwgcjBbMTAyMF0KKysJcGljb2xkLmQJaW5waXgyLCByMFswXQorKwlwaWNvbGQuZAljb2VmZjBfYSwgLS1yOAorKwlwaWNvbGQuZAljb2VmZjFfYSwgLS1yNworKwlwaWNvbGQuZAlpbnBpeDAsIHIxMFtyNSA8PCAyXQorKwlwaWNvbGQuZAl2bXUwX291dCwgcjNbcjYgPDwgMF0KKysJLmdsb2JhbAlwaWNvbGRfdworK3BpY29sZF93OgkKKysJcGljb2xkLncJY29uZmlnLCBwY1sxMDIwXQorKwlwaWNvbGQudwlpbnBpeDIsIHIwWzEwMjBdCisrCXBpY29sZC53CWlucGl4MiwgcjBbMF0KKysJcGljb2xkLncJY29lZmYwX2IsIC0tcjgKKysJcGljb2xkLncJY29lZmYxX2EsIC0tcjcKKysJcGljb2xkLncJaW5waXgxLCByMTBbcjUgPDwgMl0KKysJcGljb2xkLncJdm11MV9vdXQsIHIzW3I2IDw8IDBdCisrCS5nbG9iYWwJcGljb2xkbV9kCisrcGljb2xkbV9kOgorKwlwaWNvbGRtLmQJcGMsIGlucGl4Mi1jb25maWcKKysJcGljb2xkbS5kCXIwLCBpbnBpeDIsIGlucGl4MQorKwlwaWNvbGRtLmQJcjcsIHZtdTJfb3V0LCBjb25maWcKKysJcGljb2xkbS5kCXI4LCBpbnBpeDItdm11MV9vdXQKKysJLmdsb2JhbAlwaWNvbGRtX2RfcHUKKytwaWNvbGRtX2RfcHU6CisrCXBpY29sZG0uZAlwYysrLCBpbnBpeDIsIGlucGl4MSwgaW5waXgwLCBvdXRwaXgyLCBvdXRwaXgxLCBvdXRwaXgwLCBjb2VmZjBfYSwgY29lZmYwX2IsIGNvZWZmMV9hLCBjb2VmZjFfYiwgY29lZmYyX2EsIGNvZWZmMl9iLCB2bXUwX291dCwgdm11MV9vdXQsIHZtdTJfb3V0LCBjb25maWcKKysJcGljb2xkbS5kCXIwKyssIGlucGl4MiwgaW5waXgxCisrCXBpY29sZG0uZAlyNysrLCB2bXUyX291dCwgY29uZmlnCisrCXBpY29sZG0uZAlyOCsrLCBpbnBpeDIsIGlucGl4MSwgaW5waXgwLCBvdXRwaXgyLCBvdXRwaXgxLCBvdXRwaXgwLCBjb2VmZjBfYSwgY29lZmYwX2IsIGNvZWZmMV9hLCBjb2VmZjFfYiwgY29lZmYyX2EsIGNvZWZmMl9iLCB2bXUwX291dCwgdm11MV9vdXQKKysJLmdsb2JhbAlwaWNvbGRtX3cKKytwaWNvbGRtX3c6CisrCXBpY29sZG0udwlwYywgaW5waXgyLWNvZWZmMF9iCisrCXBpY29sZG0udwlyMCwgaW5waXgyCisrCXBpY29sZG0udwlyNywgY29lZmYwX2IKKysJcGljb2xkbS53CXI4LCBpbnBpeDItY29lZmYwX2EKKysJcGljb2xkbS53CXBjLCBjb2VmZjFfYS1jb25maWcKKysJcGljb2xkbS53CXIwLCBjb2VmZjFfYQorKwlwaWNvbGRtLncJcjcsIGNvbmZpZworKwlwaWNvbGRtLncJcjgsIGNvZWZmMV9hLXZtdTJfb3V0CisrCS5nbG9iYWwJcGljb2xkbV93X3B1CisrcGljb2xkbV93X3B1OgorKwlwaWNvbGRtLncJcGMrKywgaW5waXgyLWNvZWZmMF9iCisrCXBpY29sZG0udwlyMCsrLCBpbnBpeDIKKysJcGljb2xkbS53CXI3KyssIGNvZWZmMF9iCisrCXBpY29sZG0udwlyOCsrLCBpbnBpeDItY29lZmYwX2EKKysJcGljb2xkbS53CXBjKyssIGNvZWZmMV9hLWNvbmZpZworKwlwaWNvbGRtLncJcjArKywgY29lZmYxX2EKKysJcGljb2xkbS53CXI3KyssIGNvbmZpZworKwlwaWNvbGRtLncJcjgrKywgY29lZmYxX2Etdm11Ml9vdXQKKysJLmdsb2JhbAlwaWNvbXZfZAorK3BpY29tdl9kOgorKwlwaWNvbXYuZAl2bXUyX291dCwgbHIKKysJcGljb212LmQJaW5waXgyLCByMAorKwlwaWNvbXYuZAljb2VmZjBfYSwgcjgKKysJcGljb212LmQJY29lZmYxX2EsIHI2CisrCXBpY29tdi5kCXBjLCB2bXUyX291dAorKwlwaWNvbXYuZAlyMCwgaW5waXgyCisrCXBpY29tdi5kCXI4LCBjb2VmZjBfYQorKwlwaWNvbXYuZAlyNiwgY29lZmYxX2EKKysJLmdsb2JhbAlwaWNvbXZfdworK3BpY29tdl93OgorKwlwaWNvbXYudwljb25maWcsIHBjCisrCXBpY29tdi53CWlucGl4MiwgcjAKKysJcGljb212LncJY29lZmYwX2IsIHI4CisrCXBpY29tdi53CWNvZWZmMV9hLCByNworKwlwaWNvbXYudwlwYywgY29uZmlnCisrCXBpY29tdi53CXIwLCBpbnBpeDIKKysJcGljb212LncJcjgsIGNvZWZmMF9iCisrCXBpY29tdi53CXI3LCBjb2VmZjFfYQorKwkuZ2xvYmFsCXBpY29zdF9kCisrcGljb3N0X2Q6CisrCXBpY29zdC5kCXBjWzEwMjBdLCB2bXUyX291dAorKwlwaWNvc3QuZAlyMFswXSwgaW5waXgyCisrCXBpY29zdC5kCXI4KyssIGNvZWZmMF9hCisrCXBpY29zdC5kCXI3KyssIGNvZWZmMV9hCisrCXBpY29zdC5kCXIxMFtyNSA8PCAyXSwgaW5waXgwCisrCXBpY29zdC5kCXIzW3I2IDw8IDBdLCB2bXUwX291dAorKwkuZ2xvYmFsCXBpY29zdF93CisrcGljb3N0X3c6CQorKwlwaWNvc3QudwlwY1sxMDIwXSwgY29uZmlnCisrCXBpY29zdC53CXIwWzBdLCBpbnBpeDIKKysJcGljb3N0LncJcjgrKywgY29lZmYwX2IKKysJcGljb3N0LncJcjcrKywgY29lZmYxX2EKKysJcGljb3N0LncJcjEwW3I1IDw8IDJdLCBpbnBpeDEKKysJcGljb3N0LncJcjNbcjYgPDwgMF0sIHZtdTFfb3V0CisrCS5nbG9iYWwJcGljb3N0bV9kCisrcGljb3N0bV9kOgorKwlwaWNvc3RtLmQJcGMsIGlucGl4Mi1jb25maWcKKysJcGljb3N0bS5kCXIwLCBpbnBpeDIsIGlucGl4MQorKwlwaWNvc3RtLmQJcjcsIHZtdTJfb3V0LCBjb25maWcKKysJcGljb3N0bS5kCXI4LCBpbnBpeDItdm11MV9vdXQKKysJLmdsb2JhbAlwaWNvc3RtX2RfcHUKKytwaWNvc3RtX2RfcHU6CisrCXBpY29zdG0uZAktLXBjLCBpbnBpeDIsIGlucGl4MSwgaW5waXgwLCBvdXRwaXgyLCBvdXRwaXgxLCBvdXRwaXgwLCBjb2VmZjBfYSwgY29lZmYwX2IsIGNvZWZmMV9hLCBjb2VmZjFfYiwgY29lZmYyX2EsIGNvZWZmMl9iLCB2bXUwX291dCwgdm11MV9vdXQsIHZtdTJfb3V0LCBjb25maWcKKysJcGljb3N0bS5kCS0tcjAsIGlucGl4MiwgaW5waXgxCisrCXBpY29zdG0uZAktLXI3LCB2bXUyX291dCwgY29uZmlnCisrCXBpY29zdG0uZAktLXI4LCBpbnBpeDIsIGlucGl4MSwgaW5waXgwLCBvdXRwaXgyLCBvdXRwaXgxLCBvdXRwaXgwLCBjb2VmZjBfYSwgY29lZmYwX2IsIGNvZWZmMV9hLCBjb2VmZjFfYiwgY29lZmYyX2EsIGNvZWZmMl9iLCB2bXUwX291dCwgdm11MV9vdXQKKysJLmdsb2JhbAlwaWNvc3RtX3cKKytwaWNvc3RtX3c6CisrCXBpY29zdG0udwlwYywgaW5waXgyLWNvZWZmMF9iCisrCXBpY29zdG0udwlyMCwgaW5waXgyCisrCXBpY29zdG0udwlyNywgY29lZmYwX2IKKysJcGljb3N0bS53CXI4LCBpbnBpeDItY29lZmYwX2EKKysJcGljb3N0bS53CXBjLCBjb2VmZjFfYS1jb25maWcKKysJcGljb3N0bS53CXIwLCBjb2VmZjFfYQorKwlwaWNvc3RtLncJcjcsIGNvbmZpZworKwlwaWNvc3RtLncJcjgsIGNvZWZmMV9hLXZtdTJfb3V0CisrCS5nbG9iYWwJcGljb3N0bV93X3B1CisrcGljb3N0bV93X3B1OgorKwlwaWNvc3RtLncJLS1wYywgaW5waXgyLWNvZWZmMF9iCisrCXBpY29zdG0udwktLXIwLCBpbnBpeDIKKysJcGljb3N0bS53CS0tcjcsIGNvZWZmMF9iCisrCXBpY29zdG0udwktLXI4LCBpbnBpeDItY29lZmYwX2EKKysJcGljb3N0bS53CS0tcGMsIGNvZWZmMV9hLWNvbmZpZworKwlwaWNvc3RtLncJLS1yMCwgY29lZmYxX2EKKysJcGljb3N0bS53CS0tcjcsIGNvbmZpZworKwlwaWNvc3RtLncJLS1yOCwgY29lZmYxX2Etdm11Ml9vdXQKKy0tLSAvZGV2L251bGwKKysrKyBiL2dhcy90ZXN0c3VpdGUvZ2FzL2F2cjMyL3BpY19yZWxvYy5kCitAQCAtMCwwICsxLDI3IEBACisrI2FzOgorKyNvYmpkdW1wOiAtZHIKKysjbmFtZTogcGljX3JlbG9jCisrCisrLio6ICtmaWxlIGZvcm1hdCAuKgorKworK0Rpc2Fzc2VtYmx5IG9mIHNlY3Rpb24gXC50ZXh0OgorKworKzAwMDAwMDAwIDxtY2FsbF9nb3Q+OgorKyAgIDA6CWYwIDE2IDAwIDAwIAltY2FsbCByNlxbMFxdCisrCQkJMDogUl9BVlIzMl9HT1QxOFNXCWV4dGZ1bmMKKysgICA0OglmMCAxNiAwMCAwMCAJbWNhbGwgcjZcWzBcXQorKwkJCTQ6IFJfQVZSMzJfR09UMThTVwlcLkwxCisrICAgODoJZjAgMTYgMDAgMDAgCW1jYWxsIHI2XFswXF0KKysJCQk4OiBSX0FWUjMyX0dPVDE4U1cJXC5MMgorKyAgIGM6CWYwIDE2IDAwIDAwIAltY2FsbCByNlxbMFxdCisrCQkJYzogUl9BVlIzMl9HT1QxOFNXCW1jYWxsX2dvdAorKworKzAwMDAwMDEwIDxsZHdfZ290PjoKKysgIDEwOgllYyBmMCAwMCAwMCAJbGQudyByMCxyNlxbMFxdCisrCQkJMTA6IFJfQVZSMzJfR09UMTZTCWV4dHZhcgorKyAgMTQ6CWVjIGYwIDAwIDAwIAlsZC53IHIwLHI2XFswXF0KKysJCQkxNDogUl9BVlIzMl9HT1QxNlMJXC5MMworKyAgMTg6CWVjIGYwIDAwIDAwIAlsZC53IHIwLHI2XFswXF0KKysJCQkxODogUl9BVlIzMl9HT1QxNlMJXC5MNAorKyAgMWM6CWVjIGYwIDAwIDAwIAlsZC53IHIwLHI2XFswXF0KKysJCQkxYzogUl9BVlIzMl9HT1QxNlMJbGR3X2dvdAorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2FzL3Rlc3RzdWl0ZS9nYXMvYXZyMzIvcGljX3JlbG9jLnMKK0BAIC0wLDAgKzEsMTggQEAKKysKKysJLnRleHQKKysJLmdsb2JhbAltY2FsbF9nb3QKKyttY2FsbF9nb3Q6CisrLkwxOgorKwltY2FsbAlyNltleHRmdW5jQGdvdF0KKysJbWNhbGwJcjZbLkwxQGdvdF0KKysJbWNhbGwJcjZbLkwyQGdvdF0KKysJbWNhbGwJcjZbbWNhbGxfZ290QGdvdF0KKysuTDI6CisrCisrCS5nbG9iYWwJbGR3X2dvdAorK2xkd19nb3Q6CisrLkwzOglsZC53CXIwLHI2W2V4dHZhckBnb3RdCisrCWxkLncJcjAscjZbLkwzQGdvdF0KKysJbGQudwlyMCxyNlsuTDRAZ290XQorKwlsZC53CXIwLHI2W2xkd19nb3RAZ290XQorKy5MNDoKKy0tLSAvZGV2L251bGwKKysrKyBiL2dhcy90ZXN0c3VpdGUvZ2FzL2F2cjMyL3N5bWRpZmYuZAorQEAgLTAsMCArMSwyNCBAQAorKyNzb3VyY2U6IHN5bWRpZmYucworKyNhczoKKysjb2JqZHVtcDogLWRyCisrI25hbWU6IHN5bWRpZmYKKysKKysuKjogK2ZpbGUgZm9ybWF0IC4qCisrCisrRGlzYXNzZW1ibHkgb2Ygc2VjdGlvbiBcLnRleHQ6CisrCisrMDAwMDAwMDAgPGRpZmYzMj46CisrICAgMDoJMDAgMDAgICAgICAgCWFkZCByMCxyMAorKyAgIDI6CTAwIDA0ICAgICAgIAlhZGQgcjQscjAKKysKKyswMDAwMDAwNCA8ZGlmZjE2PjoKKysgICA0OgkwMCAwNCAgICAgICAJYWRkIHI0LHIwCisrCisrMDAwMDAwMDYgPGRpZmY4PjoKKysgICA2OgkwNCAwMCAgICAgICAJYWRkIHIwLHIyCisrCisrMDAwMDAwMDggPHN5bWRpZmZfdGVzdD46CisrICAgODoJZDcgMDMgICAgICAgCW5vcAorKyAgIGE6CWQ3IDAzICAgICAgIAlub3AKKysgICBjOglkNyAwMyAgICAgICAJbm9wCisrICAgZToJZDcgMDMgICAgICAgCW5vcAorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2FzL3Rlc3RzdWl0ZS9nYXMvYXZyMzIvc3ltZGlmZl9saW5rcmVsYXguZAorQEAgLTAsMCArMSwyOCBAQAorKyNzb3VyY2U6IHN5bWRpZmYucworKyNhczogLS1saW5rcmVsYXgKKysjb2JqZHVtcDogLWRyCisrI25hbWU6IHN5bWRpZmZfbGlua3JlbGF4CisrCisrLio6ICtmaWxlIGZvcm1hdCAuKgorKworK0Rpc2Fzc2VtYmx5IG9mIHNlY3Rpb24gXC50ZXh0OgorKworKzAwMDAwMDAwIDxkaWZmMzI+OgorKyAgIDA6CTAwIDAwICAgICAgIAlhZGQgcjAscjAKKysJCQkwOiBSX0FWUjMyX0RJRkYzMglcLnRleHRcKzB4YQorKyAgIDI6CTAwIDA0ICAgICAgIAlhZGQgcjQscjAKKysKKyswMDAwMDAwNCA8ZGlmZjE2PjoKKysgICA0OgkwMCAwNCAgICAgICAJYWRkIHI0LHIwCisrCQkJNDogUl9BVlIzMl9ESUZGMTYJXC50ZXh0XCsweGEKKysKKyswMDAwMDAwNiA8ZGlmZjg+OgorKyAgIDY6CTA0IDAwICAgICAgIAlhZGQgcjAscjIKKysJCQk2OiBSX0FWUjMyX0RJRkY4CVwudGV4dFwrMHhhCisrCQkJNzogUl9BVlIzMl9BTElHTglcKkFCU1wqXCsweDEKKysKKyswMDAwMDAwOCA8c3ltZGlmZl90ZXN0PjoKKysgICA4OglkNyAwMyAgICAgICAJbm9wCisrICAgYToJZDcgMDMgICAgICAgCW5vcAorKyAgIGM6CWQ3IDAzICAgICAgIAlub3AKKysgICBlOglkNyAwMyAgICAgICAJbm9wCistLS0gL2Rldi9udWxsCisrKysgYi9nYXMvdGVzdHN1aXRlL2dhcy9hdnIzMi9zeW1kaWZmLnMKK0BAIC0wLDAgKzEsMTkgQEAKKysKKysJLnRleHQKKysJLmdsb2JhbAlkaWZmMzIKKytkaWZmMzI6CisrCS5sb25nCS5MMiAtIC5MMQorKwkuZ2xvYmFsCWRpZmYxNgorK2RpZmYxNjoKKysJLnNob3J0CS5MMiAtIC5MMQorKwkuZ2xvYmFsCWRpZmY4CisrZGlmZjg6CisrCS5ieXRlCS5MMiAtIC5MMQorKworKwkuZ2xvYmFsCXN5bWRpZmZfdGVzdAorKwkuYWxpZ24JMQorK3N5bWRpZmZfdGVzdDoKKysJbm9wCisrLkwxOglub3AKKysJbm9wCisrLkwyOglub3AKKy0tLSBhL2dhcy93cml0ZS5jCisrKysgYi9nYXMvd3JpdGUuYworQEAgLTE5NTUsNiArMTk1NSwxMCBAQCByZWxheF9mcmFnIChzZWdUIHNlZ21lbnQsIGZyYWdTICpmcmFnUCwgCisgCisgI2VuZGlmIC8qIGRlZmluZWQgKFRDX0dFTkVSSUNfUkVMQVhfVEFCTEUpICAqLworIAorKyNpZmRlZiBUQ19SRUxBWF9BTElHTgorKyNkZWZpbmUgUkVMQVhfQUxJR04oU0VHLCBGUkFHLCBBRERSKSBUQ19SRUxBWF9BTElHTihTRUcsIEZSQUcsIEFERFIpCisrI2Vsc2UKKysjZGVmaW5lIFJFTEFYX0FMSUdOKFNFRywgRlJBRywgQUREUikgcmVsYXhfYWxpZ24oQUREUiwgKEZSQUcpLT5mcl9vZmZzZXQpCisgLyogUmVsYXhfYWxpZ24uIEFkdmFuY2UgbG9jYXRpb24gY291bnRlciB0byBuZXh0IGFkZHJlc3MgdGhhdCBoYXMgJ2FsaWdubWVudCcKKyAgICBsb3dlc3Qgb3JkZXIgYml0cyBhbGwgMHMsIHJldHVybiBzaXplIG9mIGFkanVzdG1lbnQgbWFkZS4gICovCisgc3RhdGljIHJlbGF4X2FkZHJlc3NUCitAQCAtMTk3NCw2ICsxOTc4LDcgQEAgcmVsYXhfYWxpZ24gKHJlZ2lzdGVyIHJlbGF4X2FkZHJlc3NUIGFkZAorICNlbmRpZgorICAgcmV0dXJuIChuZXdfYWRkcmVzcyAtIGFkZHJlc3MpOworIH0KKysjZW5kaWYKKyAKKyAvKiBOb3cgd2UgaGF2ZSBhIHNlZ21lbnQsIG5vdCBhIGNyb3dkIG9mIHN1Yi1zZWdtZW50cywgd2UgY2FuIG1ha2UKKyAgICBmcl9hZGRyZXNzIHZhbHVlcy4KK0BAIC0yMDE3LDcgKzIwMjIsNyBAQCByZWxheF9zZWdtZW50IChzdHJ1Y3QgZnJhZyAqc2VnbWVudF9mcmFnCisgCWNhc2UgcnNfYWxpZ25fY29kZToKKyAJY2FzZSByc19hbGlnbl90ZXN0OgorIAkgIHsKKy0JICAgIGFkZHJlc3NUIG9mZnNldCA9IHJlbGF4X2FsaWduIChhZGRyZXNzLCAoaW50KSBmcmFnUC0+ZnJfb2Zmc2V0KTsKKysJICAgIGFkZHJlc3NUIG9mZnNldCA9IFJFTEFYX0FMSUdOKHNlZ21lbnQsIGZyYWdQLCBhZGRyZXNzKTsKKyAKKyAJICAgIGlmIChmcmFnUC0+ZnJfc3VidHlwZSAhPSAwICYmIG9mZnNldCA+IGZyYWdQLT5mcl9zdWJ0eXBlKQorIAkgICAgICBvZmZzZXQgPSAwOworQEAgLTIyMTgsMTAgKzIyMjMsMTAgQEAgcmVsYXhfc2VnbWVudCAoc3RydWN0IGZyYWcgKnNlZ21lbnRfZnJhZworIAkJeworIAkJICBhZGRyZXNzVCBvbGRvZmYsIG5ld29mZjsKKyAKKy0JCSAgb2xkb2ZmID0gcmVsYXhfYWxpZ24gKHdhc19hZGRyZXNzICsgZnJhZ1AtPmZyX2ZpeCwKKy0JCQkJCShpbnQpIG9mZnNldCk7CistCQkgIG5ld29mZiA9IHJlbGF4X2FsaWduIChhZGRyZXNzICsgZnJhZ1AtPmZyX2ZpeCwKKy0JCQkJCShpbnQpIG9mZnNldCk7CisrCQkgIG9sZG9mZiA9IFJFTEFYX0FMSUdOIChzZWdtZW50LCBmcmFnUCwKKysJCQkJCXdhc19hZGRyZXNzICsgZnJhZ1AtPmZyX2ZpeCk7CisrCQkgIG5ld29mZiA9IFJFTEFYX0FMSUdOIChzZWdtZW50LCBmcmFnUCwKKysJCQkJCWFkZHJlc3MgKyBmcmFnUC0+ZnJfZml4KTsKKyAKKyAJCSAgaWYgKGZyYWdQLT5mcl9zdWJ0eXBlICE9IDApCisgCQkgICAgeworLS0tIGEvaW5jbHVkZS9kaXMtYXNtLmgKKysrKyBiL2luY2x1ZGUvZGlzLWFzbS5oCitAQCAtMjA0LDEzICsyMDQsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgZGlzYXNzZW1ibGVfaW5mbworIAorIH0gZGlzYXNzZW1ibGVfaW5mbzsKKyAKKy0MCisrCisgLyogU3RhbmRhcmQgZGlzYXNzZW1ibGVycy4gIERpc2Fzc2VtYmxlIG9uZSBpbnN0cnVjdGlvbiBhdCB0aGUgZ2l2ZW4KKyAgICB0YXJnZXQgYWRkcmVzcy4gIFJldHVybiBudW1iZXIgb2Ygb2N0ZXRzIHByb2Nlc3NlZC4gICovCisgdHlwZWRlZiBpbnQgKCpkaXNhc3NlbWJsZXJfZnR5cGUpIChiZmRfdm1hLCBkaXNhc3NlbWJsZV9pbmZvICopOworIAorIGV4dGVybiBpbnQgcHJpbnRfaW5zbl9hbHBoYQkJKGJmZF92bWEsIGRpc2Fzc2VtYmxlX2luZm8gKik7CisgZXh0ZXJuIGludCBwcmludF9pbnNuX2F2cgkJKGJmZF92bWEsIGRpc2Fzc2VtYmxlX2luZm8gKik7CisrZXh0ZXJuIGludCBwcmludF9pbnNuX2F2cjMyCQkoYmZkX3ZtYSwgZGlzYXNzZW1ibGVfaW5mbyAqKTsKKyBleHRlcm4gaW50IHByaW50X2luc25fYmZpbgkJKGJmZF92bWEsIGRpc2Fzc2VtYmxlX2luZm8gKik7CisgZXh0ZXJuIGludCBwcmludF9pbnNuX2JpZ19hcm0JCShiZmRfdm1hLCBkaXNhc3NlbWJsZV9pbmZvICopOworIGV4dGVybiBpbnQgcHJpbnRfaW5zbl9iaWdfbWlwcwkJKGJmZF92bWEsIGRpc2Fzc2VtYmxlX2luZm8gKik7CitAQCAtMjQyLDcgKzI0Myw3IEBAIGV4dGVybiBpbnQgcHJpbnRfaW5zbl9saXR0bGVfYXJtCShiZmRfdm0KKyBleHRlcm4gaW50IHByaW50X2luc25fbGl0dGxlX21pcHMJKGJmZF92bWEsIGRpc2Fzc2VtYmxlX2luZm8gKik7CisgZXh0ZXJuIGludCBwcmludF9pbnNuX2xpdHRsZV9vcjMyCShiZmRfdm1hLCBkaXNhc3NlbWJsZV9pbmZvICopOworIGV4dGVybiBpbnQgcHJpbnRfaW5zbl9saXR0bGVfcG93ZXJwYwkoYmZkX3ZtYSwgZGlzYXNzZW1ibGVfaW5mbyAqKTsKKy1leHRlcm4gaW50IHByaW50X2luc25fbGl0dGxlX3Njb3JlICAgICAgKGJmZF92bWEsIGRpc2Fzc2VtYmxlX2luZm8gKik7IAorK2V4dGVybiBpbnQgcHJpbnRfaW5zbl9saXR0bGVfc2NvcmUgICAgICAoYmZkX3ZtYSwgZGlzYXNzZW1ibGVfaW5mbyAqKTsKKyBleHRlcm4gaW50IHByaW50X2luc25fbTMyYwkgICAgICAgIChiZmRfdm1hLCBkaXNhc3NlbWJsZV9pbmZvICopOworIGV4dGVybiBpbnQgcHJpbnRfaW5zbl9tMzJyCQkoYmZkX3ZtYSwgZGlzYXNzZW1ibGVfaW5mbyAqKTsKKyBleHRlcm4gaW50IHByaW50X2luc25fbTY4aGMxMQkJKGJmZF92bWEsIGRpc2Fzc2VtYmxlX2luZm8gKik7CitAQCAtMjkwLDcgKzI5MSw5IEBAIGV4dGVybiB2b2lkIHByaW50X2kzODZfZGlzYXNzZW1ibGVyX29wdGkKKyBleHRlcm4gdm9pZCBwcmludF9taXBzX2Rpc2Fzc2VtYmxlcl9vcHRpb25zIChGSUxFICopOworIGV4dGVybiB2b2lkIHByaW50X3BwY19kaXNhc3NlbWJsZXJfb3B0aW9ucyAoRklMRSAqKTsKKyBleHRlcm4gdm9pZCBwcmludF9hcm1fZGlzYXNzZW1ibGVyX29wdGlvbnMgKEZJTEUgKik7CisrZXh0ZXJuIHZvaWQgcHJpbnRfYXZyMzJfZGlzYXNzZW1ibGVyX29wdGlvbnMgKEZJTEUgKik7CisgZXh0ZXJuIHZvaWQgcGFyc2VfYXJtX2Rpc2Fzc2VtYmxlcl9vcHRpb24gKGNoYXIgKik7CisrZXh0ZXJuIHZvaWQgcGFyc2VfYXZyMzJfZGlzYXNzZW1ibGVyX29wdGlvbiAoY2hhciAqKTsKKyBleHRlcm4gaW50ICBnZXRfYXJtX3JlZ25hbWVfbnVtX29wdGlvbnMgKHZvaWQpOworIGV4dGVybiBpbnQgIHNldF9hcm1fcmVnbmFtZV9vcHRpb24gKGludCk7CisgZXh0ZXJuIGludCAgZ2V0X2FybV9yZWduYW1lcyAoaW50LCBjb25zdCBjaGFyICoqLCBjb25zdCBjaGFyICoqLCBjb25zdCBjaGFyICpjb25zdCAqKik7CitAQCAtMzA2LDcgKzMwOSw3IEBAIGV4dGVybiB2b2lkIGRpc2Fzc2VtYmxlX2luaXRfZm9yX3RhcmdldCAKKyAvKiBEb2N1bWVudCBhbnkgdGFyZ2V0IHNwZWNpZmljIG9wdGlvbnMgYXZhaWxhYmxlIGZyb20gdGhlIGRpc2Fzc2VtYmxlci4gICovCisgZXh0ZXJuIHZvaWQgZGlzYXNzZW1ibGVyX3VzYWdlIChGSUxFICopOworIAorLQwKKysKKyAvKiBUaGlzIGJsb2NrIG9mIGRlZmluaXRpb25zIGlzIGZvciBwYXJ0aWN1bGFyIGNhbGxlcnMgd2hvIHJlYWQgaW5zdHJ1Y3Rpb25zCisgICAgaW50byBhIGJ1ZmZlciBiZWZvcmUgY2FsbGluZyB0aGUgaW5zdHJ1Y3Rpb24gZGVjb2Rlci4gICovCisgCistLS0gL2Rldi9udWxsCisrKysgYi9pbmNsdWRlL2VsZi9hdnIzMi5oCitAQCAtMCwwICsxLDk4IEBACisrLyogQVZSMzIgRUxGIHN1cHBvcnQgZm9yIEJGRC4KKysgICBDb3B5cmlnaHQgMjAwMy0yMDA2IEF0bWVsIENvcnBvcmF0aW9uLgorKworKyAgIFdyaXR0ZW4gYnkgSGFhdmFyZCBTa2lubmVtb2VuLCBBdG1lbCBOb3J3YXksIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CisrCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQkZELCB0aGUgQmluYXJ5IEZpbGUgRGVzY3JpcHRvciBsaWJyYXJ5LgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorKyAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysKKysjaW5jbHVkZSAiZWxmL3JlbG9jLW1hY3Jvcy5oIgorKworKy8qIENQVS1zcGVjaWZpYyBmbGFncyBmb3IgdGhlIEVMRiBoZWFkZXIgZV9mbGFncyBmaWVsZCAqLworKyNkZWZpbmUgRUZfQVZSMzJfTElOS1JFTEFYCQkweDAxCisrI2RlZmluZSBFRl9BVlIzMl9QSUMJCQkweDAyCisrCisrU1RBUlRfUkVMT0NfTlVNQkVSUyAoZWxmX2F2cjMyX3JlbG9jX3R5cGUpCisrICAgIFJFTE9DX05VTUJFUiAoUl9BVlIzMl9OT05FLAkJCTApCisrCisrICAgIC8qIERhdGEgUmVsb2NhdGlvbnMgKi8KKysgICAgUkVMT0NfTlVNQkVSIChSX0FWUjMyXzMyLAkJCTEpCisrICAgIFJFTE9DX05VTUJFUiAoUl9BVlIzMl8xNiwJCQkyKQorKyAgICBSRUxPQ19OVU1CRVIgKFJfQVZSMzJfOCwJCQkzKQorKyAgICBSRUxPQ19OVU1CRVIgKFJfQVZSMzJfMzJfUENSRUwsCQk0KQorKyAgICBSRUxPQ19OVU1CRVIgKFJfQVZSMzJfMTZfUENSRUwsCQk1KQorKyAgICBSRUxPQ19OVU1CRVIgKFJfQVZSMzJfOF9QQ1JFTCwJCTYpCisrICAgIFJFTE9DX05VTUJFUiAoUl9BVlIzMl9ESUZGMzIsCQk3KQorKyAgICBSRUxPQ19OVU1CRVIgKFJfQVZSMzJfRElGRjE2LAkJOCkKKysgICAgUkVMT0NfTlVNQkVSIChSX0FWUjMyX0RJRkY4LAkJOSkKKysgICAgUkVMT0NfTlVNQkVSIChSX0FWUjMyX0dPVDMyLAkJMTApCisrICAgIFJFTE9DX05VTUJFUiAoUl9BVlIzMl9HT1QxNiwJCTExKQorKyAgICBSRUxPQ19OVU1CRVIgKFJfQVZSMzJfR09UOCwJCQkxMikKKysKKysgICAgLyogTm9ybWFsIENvZGUgUmVsb2NhdGlvbnMgKi8KKysgICAgUkVMT0NfTlVNQkVSIChSX0FWUjMyXzIxUywJCQkxMykKKysgICAgUkVMT0NfTlVNQkVSIChSX0FWUjMyXzE2VSwJCQkxNCkKKysgICAgUkVMT0NfTlVNQkVSIChSX0FWUjMyXzE2UywJCQkxNSkKKysgICAgUkVMT0NfTlVNQkVSIChSX0FWUjMyXzhTLAkJCTE2KQorKyAgICBSRUxPQ19OVU1CRVIgKFJfQVZSMzJfOFNfRVhULAkJMTcpCisrCisrICAgIC8qIFBDLVJlbGF0aXZlIENvZGUgUmVsb2NhdGlvbnMgKi8KKysgICAgUkVMT0NfTlVNQkVSIChSX0FWUjMyXzIySF9QQ1JFTCwJCTE4KQorKyAgICBSRUxPQ19OVU1CRVIgKFJfQVZSMzJfMThXX1BDUkVMLAkJMTkpCisrICAgIFJFTE9DX05VTUJFUiAoUl9BVlIzMl8xNkJfUENSRUwsCQkyMCkKKysgICAgUkVMT0NfTlVNQkVSIChSX0FWUjMyXzE2Tl9QQ1JFTCwJCTIxKQorKyAgICBSRUxPQ19OVU1CRVIgKFJfQVZSMzJfMTRVV19QQ1JFTCwJCTIyKQorKyAgICBSRUxPQ19OVU1CRVIgKFJfQVZSMzJfMTFIX1BDUkVMLAkJMjMpCisrICAgIFJFTE9DX05VTUJFUiAoUl9BVlIzMl8xMFVXX1BDUkVMLAkJMjQpCisrICAgIFJFTE9DX05VTUJFUiAoUl9BVlIzMl85SF9QQ1JFTCwJCTI1KQorKyAgICBSRUxPQ19OVU1CRVIgKFJfQVZSMzJfOVVXX1BDUkVMLAkJMjYpCisrCisrICAgIC8qIFNwZWNpYWwgQ29kZSBSZWxvY2F0aW9ucyAqLworKyAgICBSRUxPQ19OVU1CRVIgKFJfQVZSMzJfSEkxNiwJCQkyNykKKysgICAgUkVMT0NfTlVNQkVSIChSX0FWUjMyX0xPMTYsCQkJMjgpCisrCisrICAgIC8qIFBJQyBSZWxvY2F0aW9ucyAqLworKyAgICBSRUxPQ19OVU1CRVIgKFJfQVZSMzJfR09UUEMsCQkyOSkKKysgICAgUkVMT0NfTlVNQkVSIChSX0FWUjMyX0dPVENBTEwsCQkzMCkKKysgICAgUkVMT0NfTlVNQkVSIChSX0FWUjMyX0xEQV9HT1QsCQkzMSkKKysgICAgUkVMT0NfTlVNQkVSIChSX0FWUjMyX0dPVDIxUywJCTMyKQorKyAgICBSRUxPQ19OVU1CRVIgKFJfQVZSMzJfR09UMThTVywJCTMzKQorKyAgICBSRUxPQ19OVU1CRVIgKFJfQVZSMzJfR09UMTZTLAkJMzQpCisrICAgIFJFTE9DX05VTUJFUiAoUl9BVlIzMl9HT1Q3VVcsCQkzNSkKKysKKysgICAgLyogQ29uc3RhbnQgUG9vbCBSZWxvY2F0aW9ucyAqLworKyAgICBSRUxPQ19OVU1CRVIgKFJfQVZSMzJfMzJfQ1BFTlQsCQkzNikKKysgICAgUkVMT0NfTlVNQkVSIChSX0FWUjMyX0NQQ0FMTCwJCTM3KQorKyAgICBSRUxPQ19OVU1CRVIgKFJfQVZSMzJfMTZfQ1AsCQkzOCkKKysgICAgUkVMT0NfTlVNQkVSIChSX0FWUjMyXzlXX0NQLAkJMzkpCisrCisrICAgIC8qIER5bmFtaWMgUmVsb2NhdGlvbnMgKi8KKysgICAgUkVMT0NfTlVNQkVSIChSX0FWUjMyX1JFTEFUSVZFLAkJNDApCisrICAgIFJFTE9DX05VTUJFUiAoUl9BVlIzMl9HTE9CX0RBVCwJCTQxKQorKyAgICBSRUxPQ19OVU1CRVIgKFJfQVZSMzJfSk1QX1NMT1QsCQk0MikKKysKKysgICAgLyogTGlua3JlbGF4IEluZm9ybWF0aW9uICovCisrICAgIFJFTE9DX05VTUJFUiAoUl9BVlIzMl9BTElHTiwJCTQzKQorKworKyAgICBSRUxPQ19OVU1CRVIgKFJfQVZSMzJfMTVTLAkJICAgICAgICA0NCkKKysKKytFTkRfUkVMT0NfTlVNQkVSUyAoUl9BVlIzMl9tYXgpCisrCisrLyogUHJvY2Vzc29yIHNwZWNpZmljIGR5bmFtaWMgYXJyYXkgdGFncy4gICovCisrCisrLyogVGhlIHRvdGFsIHNpemUgaW4gYnl0ZXMgb2YgdGhlIEdsb2JhbCBPZmZzZXQgVGFibGUgKi8KKysjZGVmaW5lIERUX0FWUjMyX0dPVFNaCQkJMHg3MDAwMDAwMQorLS0tIGEvaW5jbHVkZS9lbGYvY29tbW9uLmgKKysrKyBiL2luY2x1ZGUvZWxmL2NvbW1vbi5oCitAQCAtMjU5LDYgKzI1OSw5IEBACisgLyogVjg1MCBiYWNrZW5kIG1hZ2ljIG51bWJlci4gIFdyaXR0ZW4gaW4gdGhlIGFic2Vuc2Ugb2YgYW4gQUJJLiAgKi8KKyAjZGVmaW5lIEVNX0NZR05VU19WODUwCQkweDkwODAKKyAKKysvKiBBVlIzMiBtYWdpYyBudW1iZXIsIHBpY2tlZCBieSBJQVIgU3lzdGVtcy4gKi8KKysjZGVmaW5lIEVNX0FWUjMyCQkweDE4YWQKKysKKyAvKiBvbGQgUy8zOTAgYmFja2VuZCBtYWdpYyBudW1iZXIuIFdyaXR0ZW4gaW4gdGhlIGFic2VuY2Ugb2YgYW4gQUJJLiAgKi8KKyAjZGVmaW5lIEVNX1MzOTBfT0xECQkweGEzOTAKKyAKKy0tLSBhL2xkL2NvbmZpZ2RvYy50ZXhpCisrKysgYi9sZC9jb25maWdkb2MudGV4aQorQEAgLTcsNiArNyw3IEBACisgQHNldCBIODMwMAorIEBzZXQgSFBQQQorIEBzZXQgSTk2MAorK0BzZXQgQVZSMzIKKyBAc2V0IE02OEhDMTEKKyBAc2V0IE1NSVgKKyBAc2V0IE1TUDQzMAorLS0tIGEvbGQvY29uZmlndXJlLnRndAorKysrIGIvbGQvY29uZmlndXJlLnRndAorQEAgLTEwOSw2ICsxMDksOSBAQCB4c2NhbGUtKi1lbGYpCQl0YXJnX2VtdWw9YXJtZWxmCisgYXZyLSotKikJCXRhcmdfZW11bD1hdnIyCisgCQkJdGFyZ19leHRyYV9lbXVscz0iYXZyMSBhdnIzIGF2cjQgYXZyNSBhdnI2IgorIAkJCTs7CisrYXZyMzItKi1ub25lKSAgICAgICB0YXJnX2VtdWw9YXZyMzJlbGZfYXA3MDAwCisrICAgICAgICAgICAgdGFyZ19leHRyYV9lbXVscz0iYXZyMzJlbGZfYXA3MDAxIGF2cjMyZWxmX2FwNzAwMiBhdnIzMmVsZl9hcDcyMDAgYXZyMzJlbGZfdWMzYTAxMjggYXZyMzJlbGZfdWMzYTAyNTYgYXZyMzJlbGZfdWMzYTA1MTIgYXZyMzJlbGZfdWMzYTA1MTJlcyBhdnIzMmVsZl91YzNhMTEyOCBhdnIzMmVsZl91YzNhMTI1NiBhdnIzMmVsZl91YzNhMTUxMmVzIGF2cjMyZWxmX3VjM2ExNTEyIGF2cjMyZWxmX3VjM2EzNjQgYXZyMzJlbGZfdWMzYTM2NHMgYXZyMzJlbGZfdWMzYTMxMjggYXZyMzJlbGZfdWMzYTMxMjhzIGF2cjMyZWxmX3VjM2EzMjU2IGF2cjMyZWxmX3VjM2EzMjU2cyBhdnIzMmVsZl91YzNiMDY0IGF2cjMyZWxmX3VjM2IwMTI4IGF2cjMyZWxmX3VjM2IwMjU2ZXMgYXZyMzJlbGZfdWMzYjAyNTYgYXZyMzJlbGZfdWMzYjE2NCBhdnIzMmVsZl91YzNiMTEyOCBhdnIzMmVsZl91YzNiMTI1NmVzIGF2cjMyZWxmX3VjM2IxMjU2IiA7OworK2F2cjMyLSotbGludXgqKSAgICAgdGFyZ19lbXVsPWF2cjMybGludXggOzsKKyBiZmluLSotZWxmKQkJdGFyZ19lbXVsPWVsZjMyYmZpbjsKKyAJCQl0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmJmaW5mZCIKKyAJCQl0YXJnX2V4dHJhX2xpYnBhdGg9JHRhcmdfZXh0cmFfZW11bHMKKy0tLSAvZGV2L251bGwKKysrKyBiL2xkL2VtdWxwYXJhbXMvYXZyMzJlbGYuc2gKK0BAIC0wLDAgKzEsMTYzIEBACisrIyBUaGlzIHNjcmlwdCBpcyBjYWxsZWQgZnJvbSBsZC9nZW5zY3JpcHQuc2ggCisrIyBUaGVyZSBpcyBhIGRpZmZlcmVuY2Ugb24gaG93ICdiYXNoJyBhbmQgUE9TSVggaGFuZGxlcyAKKysjIHRoZSAgJy4nIChzb3VyY2UpIGNvbW1hbmQgaW4gYSBzY3JpcHQuCisrIyBnZW5zY3JpcHQuc2ggY2FsbHMgdGhpcyBzY3JpcHQgd2l0aCBhcmd1bWVudCAke0VNVUxBVElPTl9OQU1FfQorKyMgYnV0IHRoYXQgd2lsbCBmYWlsIG9uIFBPU0lYIGNvbXBpbGFudCBzaGVsbHMgbGlrZSAnc2gnIG9yICdkYXNoJworKyMgdGhlcmVmb3IgSSB1c2UgdGhlIHZhcmlhYmxlIGRpcmVjdGx5IGluc3RlYWQgb2YgJDEgCisrRU1VTEFUSU9OPSR7RU1VTEFUSU9OX05BTUV9CisrU0NSSVBUX05BTUU9ZWxmX3hpcAorK1RFTVBMQVRFX05BTUU9ZWxmMzIKKytFWFRSQV9FTV9GSUxFPWF2cjMyZWxmCisrT1VUUFVUX0ZPUk1BVD0iZWxmMzItYXZyMzIiCisrQVJDSD1hdnIzMgorK01BWFBBR0VTSVpFPTQwOTYKKytFTlRSWT1fc3RhcnQKKytFTUJFRERFRD15ZXMKKytOT19TTUFMTF9EQVRBPXllcworK05PUD0weGQ3MDNkNzAzCisrCisrREFUQV9TRUdNRU5UX0FMSUdOPTgKKytCU1NfQUxJR05NRU5UPTgKKysKKytST19MTUFfUkVHSU9OPSJGTEFTSCIKKytST19WTUFfUkVHSU9OPSJGTEFTSCIKKytSV19MTUFfUkVHSU9OPSJGTEFTSCIKKytSV19WTUFfUkVHSU9OPSJDUFVTUkFNIgorKworK1NUQUNLX1NJWkU9MHgxMDAwCisrU1RBQ0tfQUREUj0iT1JJR0lOKENQVVNSQU0pICsgTEVOR1RIKENQVVNSQU0pIC0gJHtTVEFDS19TSVpFfSIKKysKKytEQVRBX1NFR01FTlRfRU5EPSJfX2hlYXBfc3RhcnRfXyA9IEFMSUdOKDgpOworKyAgLiA9ICR7U1RBQ0tfQUREUn07CisrICBfX2hlYXBfZW5kX18gPSAuOyIKKysKKytjYXNlICIkRU1VTEFUSU9OIiBpbgorK2F2cjMyZWxmX2FwKikKKysgICAgTUFDSElORT1hcAorKyAgICBJTklUSUFMX1JFQURPTkxZX1NFQ1RJT05TPSIucmVzZXQgOiB7ICAqKC5yZXNldCkgfSA+RkxBU0ggQVQ+RkxBU0gKKysgICAgLiA9IC4gJiAweDlmZmZmZmZmOyIKKysgICAgVEVYVF9TVEFSVF9BRERSPTB4YTAwMDAwMDAKKysgICAgY2FzZSAiJEVNVUxBVElPTiIgaW4KKysJICAgIGF2cjMyZWxmX2FwNzAwWzAtMl0pCisrCSAgICAgICBNRU1PUlk9Ik1FTU9SWQorKyAgeworKwlGTEFTSCAocnhhaSkgOiBPUklHSU4gPSAweDAwMDAwMDAwLCBMRU5HVEggPSA2NE0KKysJQ1BVU1JBTSAocnd4YSkgOiBPUklHSU4gPSAweDI0MDAwMDAwLCBMRU5HVEggPSAzMksKKysgIH0iCisrICAgICAgICA7OworKyAgICBhdnIzMmVsZl9hcDcyMDApCisrICAgICAgICBNRU1PUlk9Ik1FTU9SWQorKyAgeworKyAgICBGTEFTSCAocnhhaSkgOiBPUklHSU4gPSAweDAwMDAwMDAwLCBMRU5HVEggPSA2NE0KKysgICAgQ1BVU1JBTSAocnd4YSkgOiBPUklHSU4gPSAweDA4MDAwMDAwLCBMRU5HVEggPSA2NEsKKysgIH0iCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrCisrYXZyMzJlbGZfdWMzKikKKysgICAgTUFDSElORT11YworKyAgICBJTklUSUFMX1JFQURPTkxZX1NFQ1RJT05TPSIucmVzZXQgOiB7ICAqKC5yZXNldCkgfSA+RkxBU0ggQVQ+RkxBU0giCisrICAgIFRFWFRfU1RBUlRfQUREUj0weDgwMDAwMDAwCisrICAgIE9USEVSX1NFQ1RJT05TPSIudXNlcnBhZ2UgOiAgewkqKC51c2VycGFnZSAudXNlcnBhZ2UuKikgIH0gPlVTRVJQQUdFIEFUPlVTRVJQQUdFCisrICAJLmZhY3RvcnlwYWdlIDogIHsJKiguZmFjdG9yeXBhZ2UgLmZhY3RvcnlwYWdlLiopICB9ID5GQUNUT1JZUEFHRSBBVD5GQUNUT1JZUEFHRSIKKysKKysgICAgY2FzZSAiJEVNVUxBVElPTiIgaW4KKysgICAgYXZyMzJlbGZfdWMzYVswMV01MTIqKQorKyAgICAgICBNRU1PUlk9Ik1FTU9SWQorKyAgeworKyAgICBGTEFTSCAocnhhaSF3KSA6IE9SSUdJTiA9IDB4ODAwMDAwMDAsIExFTkdUSCA9IDUxMksKKysgICAgQ1BVU1JBTSAod3hhIXJpKSA6IE9SSUdJTiA9IDB4MDAwMDAwMDAsIExFTkdUSCA9IDY0SworKwlVU0VSUEFHRSA6IE9SSUdJTiA9IDB4ODA4MDAwMDAsIExFTkdUSCA9IDUxMgorKwlGQUNUT1JZUEFHRSA6IE9SSUdJTiA9IDB4ODA4MDAyMDAsIExFTkdUSCA9IDUxMgorKyAgfSIKKysgICAgICAgIDs7CisrCisrICAgIGF2cjMyZWxmX3VjM2FbMDFdMjU2KQorKyAgICAgICAgTUVNT1JZPSJNRU1PUlkKKysgIHsKKysgICAgRkxBU0ggKHJ4YWkhdykgOiBPUklHSU4gPSAweDgwMDAwMDAwLCBMRU5HVEggPSAyNTZLCisrICAgIENQVVNSQU0gKHd4YSFyaSkgOiBPUklHSU4gPSAweDAwMDAwMDAwLCBMRU5HVEggPSA2NEsKKysJVVNFUlBBR0UgOiBPUklHSU4gPSAweDgwODAwMDAwLCBMRU5HVEggPSA1MTIKKysJRkFDVE9SWVBBR0UgOiBPUklHSU4gPSAweDgwODAwMjAwLCBMRU5HVEggPSA1MTIKKysgIH0iCisrICAgICAgICA7OworKworKyAgICBhdnIzMmVsZl91YzNiWzAxXTI1NiopCisrICAgICAgICBNRU1PUlk9Ik1FTU9SWQorKyAgeworKyAgICBGTEFTSCAocnhhaSF3KSA6IE9SSUdJTiA9IDB4ODAwMDAwMDAsIExFTkdUSCA9IDI1NksKKysgICAgQ1BVU1JBTSAod3hhIXJpKSA6IE9SSUdJTiA9IDB4MDAwMDAwMDAsIExFTkdUSCA9IDMySworKwlVU0VSUEFHRSA6IE9SSUdJTiA9IDB4ODA4MDAwMDAsIExFTkdUSCA9IDUxMgorKwlGQUNUT1JZUEFHRSA6IE9SSUdJTiA9IDB4ODA4MDAyMDAsIExFTkdUSCA9IDUxMgorKyAgfSIKKysgICAgICAgIDs7CisrCisrICAgIGF2cjMyZWxmX3VjM1thYl1bMDFdMTI4KQorKyAgICAgICAgTUVNT1JZPSJNRU1PUlkKKysgIHsKKysgICAgRkxBU0ggKHJ4YWkhdykgOiBPUklHSU4gPSAweDgwMDAwMDAwLCBMRU5HVEggPSAxMjhLCisrICAgIENQVVNSQU0gKHd4YSFyaSkgOiBPUklHSU4gPSAweDAwMDAwMDAwLCBMRU5HVEggPSAzMksKKysJVVNFUlBBR0UgOiBPUklHSU4gPSAweDgwODAwMDAwLCBMRU5HVEggPSA1MTIKKysJRkFDVE9SWVBBR0UgOiBPUklHSU4gPSAweDgwODAwMjAwLCBMRU5HVEggPSA1MTIKKysgIH0iCisrICAgICAgICA7OworKworKyAgICBhdnIzMmVsZl91YzNiWzAxXTY0KQorKyAgICAgICAgTUVNT1JZPSJNRU1PUlkKKysgIHsKKysgICAgRkxBU0ggKHJ4YWkhdykgOiBPUklHSU4gPSAweDgwMDAwMDAwLCBMRU5HVEggPSA2NEsKKysgICAgQ1BVU1JBTSAod3hhIXJpKSA6IE9SSUdJTiA9IDB4MDAwMDAwMDAsIExFTkdUSCA9IDE2SworKwlVU0VSUEFHRSA6IE9SSUdJTiA9IDB4ODA4MDAwMDAsIExFTkdUSCA9IDUxMgorKwlGQUNUT1JZUEFHRSA6IE9SSUdJTiA9IDB4ODA4MDAyMDAsIExFTkdUSCA9IDUxMgorKyAgfSIKKysgICAgICAgIDs7CisrCisrICAgIGF2cjMyZWxmX3VjM2EzMjU2KikKKysgICAgICAgIE1FTU9SWT0iTUVNT1JZCisrICB7CisrICAgIEZMQVNIIChyeGFpIXcpIDogT1JJR0lOID0gMHg4MDAwMDAwMCwgTEVOR1RIID0gMjU2SworKyAgICBDUFVTUkFNICh3eGEhcmkpIDogT1JJR0lOID0gMHgwMDAwMDAwMCwgTEVOR1RIID0gNjRLCisrICAgIEhTQlNSQU0gKHd4YSFyaSkgOiBPUklHSU4gPSAweEZGMDAwMDAwLCBMRU5HVEggPSA2NEsKKysJVVNFUlBBR0UgOiBPUklHSU4gPSAweDgwODAwMDAwLCBMRU5HVEggPSA1MTIKKysJRkFDVE9SWVBBR0UgOiBPUklHSU4gPSAweDgwODAwMjAwLCBMRU5HVEggPSA1MTIKKysgIH0iCisrICAJCU9USEVSX1NFQ1RJT05TID0iJHtPVEhFUl9TRUNUSU9OU30KKysgIAkuaHNic3JhbSAgICAgICA6IHsgKiguaHNic3JhbSAuaHNic3JhbS4qKSB9ID5IU0JTUkFNIEFUPkZMQVNIIDpGTEFTSAorKyIKKysgIAkJCisrICAgICAgICA7OworKworKyAgICBhdnIzMmVsZl91YzNhMzEyOCopCisrICAgICAgICBNRU1PUlk9Ik1FTU9SWQorKyAgeworKyAgICBGTEFTSCAocnhhaSF3KSA6IE9SSUdJTiA9IDB4ODAwMDAwMDAsIExFTkdUSCA9IDEyOEsKKysgICAgQ1BVU1JBTSAod3hhIXJpKSA6IE9SSUdJTiA9IDB4MDAwMDAwMDAsIExFTkdUSCA9IDY0SworKyAgICBIU0JTUkFNICh3eGEhcmkpIDogT1JJR0lOID0gMHhGRjAwMDAwMCwgTEVOR1RIID0gNjRLCisrICAgIFVTRVJQQUdFIDogT1JJR0lOID0gMHg4MDgwMDAwMCwgTEVOR1RIID0gNTEyCisrICAgIEZBQ1RPUllQQUdFIDogT1JJR0lOID0gMHg4MDgwMDIwMCwgTEVOR1RIID0gNTEyCisrICB9IgorKyAgCQlPVEhFUl9TRUNUSU9OUyA9IiR7T1RIRVJfU0VDVElPTlN9CisrICAJLmhzYnNyYW0gICAgICAgOiB7ICooLmhzYnNyYW0gLmhzYnNyYW0uKikgfSA+SFNCU1JBTSBBVD5GTEFTSCA6RkxBU0gKKysiCisrICAgICAgICA7OworKworKyAgICBhdnIzMmVsZl91YzNhMzY0KikKKysgICAgICAgIE1FTU9SWT0iTUVNT1JZCisrICB7CisrICAgIEZMQVNIIChyeGFpIXcpIDogT1JJR0lOID0gMHg4MDAwMDAwMCwgTEVOR1RIID0gNjRLCisrICAgIENQVVNSQU0gKHd4YSFyaSkgOiBPUklHSU4gPSAweDAwMDAwMDAwLCBMRU5HVEggPSA2NEsKKysgICAgSFNCU1JBTSAod3hhIXJpKSA6IE9SSUdJTiA9IDB4RkYwMDAwMDAsIExFTkdUSCA9IDY0SworKwlVU0VSUEFHRSA6IE9SSUdJTiA9IDB4ODA4MDAwMDAsIExFTkdUSCA9IDUxMgorKwlGQUNUT1JZUEFHRSA6IE9SSUdJTiA9IDB4ODA4MDAyMDAsIExFTkdUSCA9IDUxMgorKyAgfSIKKysgIAkJT1RIRVJfU0VDVElPTlMgPSIke09USEVSX1NFQ1RJT05TfQorKyAgCS5oc2JzcmFtICAgICAgIDogeyAqKC5oc2JzcmFtIC5oc2JzcmFtLiopIH0gPkhTQlNSQU0gQVQ+RkxBU0ggOkZMQVNICisrIgorKyAgICAgICAgOzsKKysKKysKKysgICAgZXNhYworKyAgICA7OworKworK2VzYWMKKy0tLSAvZGV2L251bGwKKysrKyBiL2xkL2VtdWxwYXJhbXMvYXZyMzJsaW51eC5zaAorQEAgLTAsMCArMSwxNCBAQAorK0FSQ0g9YXZyMzIKKytTQ1JJUFRfTkFNRT1lbGYKKytURU1QTEFURV9OQU1FPWVsZjMyCisrRVhUUkFfRU1fRklMRT1hdnIzMmVsZgorK09VVFBVVF9GT1JNQVQ9ImVsZjMyLWF2cjMyIgorK0dFTkVSQVRFX1NITElCX1NDUklQVD15ZXMKKytNQVhQQUdFU0laRT0weDEwMDAKKytURVhUX1NUQVJUX0FERFI9MHgwMDAwMTAwMAorK05PUD0weGQ3MDNkNzAzCisrCisrIyBUaGlzIGFwcGVhcnMgdG8gcGxhY2UgdGhlIEdPVCBiZWZvcmUgdGhlIGRhdGEgc2VjdGlvbiwgd2hpY2ggaXMKKysjIGVzc2VudGlhbCBmb3IgdUNsaW51eC4gIFdlIGRvbid0IHVzZSB0aG9zZSAucyogc2VjdGlvbnMgb24gQVZSMzIKKysjIGFueXdheSwgc28gaXQgc2hvdWxkbid0IGh1cnQgZm9yIHJlZ3VsYXIgTGludXggZWl0aGVyLi4uCisrTk9fU01BTExfREFUQT15ZXMKKy0tLSAvZGV2L251bGwKKysrKyBiL2xkL2VtdWx0ZW1wbC9hdnIzMmVsZi5lbQorQEAgLTAsMCArMSwxMzMgQEAKKysjIFRoaXMgc2hlbGwgc2NyaXB0IGVtaXRzIGEgQyBmaWxlLiAtKi0gQyAtKi0KKysjICAgQ29weXJpZ2h0IChDKSAyMDA3IEF0bWVsIENvcnBvcmF0aW9uCisrIworKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0xELCB0aGUgR251IExpbmtlci4KKysjCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyMKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrIworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisrIworKworKyMgVGhpcyBmaWxlIGlzIHNvdXJjZWQgZnJvbSBlbGYzMi5lbSwgYW5kIGRlZmluZXMgZXh0cmEgYXZyMzItZWxmCisrIyBzcGVjaWZpYyByb3V0aW5lcy4KKysjCisrCisrIyBHZW5lcmF0ZSBsaW5rZXIgc2NyaXB0IGZvciB3cml0YWJsZSByb2RhdGEKKytMRF9GTEFHPXJvZGF0YS13cml0YWJsZQorK0RBVEFfQUxJR05NRU5UPSR7REFUQV9BTElHTk1FTlRffQorK1JFTE9DQVRJTkc9IiAiCisrV1JJVEFCTEVfUk9EQVRBPSIgIgorKyggZWNobyAiLyogTGlua2VyIHNjcmlwdCBmb3Igd3JpdGFibGUgcm9kYXRhICovIgorKyAgLiAke0NVU1RPTUlaRVJfU0NSSVBUfSAke0VNVUxBVElPTl9OQU1FfQorKyAgLiAke3NyY2Rpcn0vc2NyaXB0dGVtcGwvJHtTQ1JJUFRfTkFNRX0uc2MKKyspIHwgc2VkIC1lICcvXiAqJC9kO3MvWyAJXSokLy8nID4gbGRzY3JpcHRzLyR7RU1VTEFUSU9OX05BTUV9Lnh3cgorKworKworK2NhdCA+PiBlJHtFTVVMQVRJT05fTkFNRX0uYyA8PEVPRgorKworKyNpbmNsdWRlICJsaWJiZmQuaCIKKysjaW5jbHVkZSAiZWxmMzItYXZyMzIuaCIKKysKKysvKiBXaGV0aGVyIHRvIGFsbG93IGRpcmVjdCByZWZlcmVuY2VzIChzdWIgb3IgbW92KSB0byBTRUNfREFUQSBhbmQKKysgICAhU0VDX0NPTlRFTlRTIHNlY3Rpb25zIHdoZW4gb3B0aW1pemluZy4gIE5vdCBlbmFibGVkIGJ5IGRlZmF1bHQKKysgICBzaW5jZSBpdCBtaWdodCBjYXVzZSBsaW5rIGVycm9ycy4gICovCisrc3RhdGljIGludCBkaXJlY3RfZGF0YV9yZWZzID0gMDsKKysKKytzdGF0aWMgdm9pZCBhdnIzMl9lbGZfYWZ0ZXJfb3BlbiAodm9pZCkKKyt7CisrICBiZmRfZWxmMzJfYXZyMzJfc2V0X29wdGlvbnMgKCZsaW5rX2luZm8sIGRpcmVjdF9kYXRhX3JlZnMpOworKyAgZ2xkJHtFTVVMQVRJT05fTkFNRX1fYWZ0ZXJfb3BlbiAoKTsKKyt9CisrCisrc3RhdGljIGludCByb2RhdGFfd3JpdGFibGUgPSAwOworKworK3N0YXRpYyBjaGFyICogZ2xkJHtFTVVMQVRJT05fTkFNRX1fZ2V0X3NjcmlwdCAoaW50ICppc2ZpbGUpOworKworK3N0YXRpYyBjaGFyICogYXZyMzJfZWxmX2dldF9zY3JpcHQgKGludCAqaXNmaWxlKQorK3sKKysgIGlmICggcm9kYXRhX3dyaXRhYmxlICkKKysgICAgeworK0VPRgorK2lmIHRlc3QgLW4gIiRDT01QSUxFX0lOIgorK3RoZW4KKysjIFNjcmlwdHMgY29tcGlsZWQgaW4uCisrCisrIyBzZWQgY29tbWFuZHMgdG8gcXVvdGUgYW4gbGQgc2NyaXB0IGFzIGEgQyBzdHJpbmcuCisrc2M9Ii1mIHN0cmluZ2lmeS5zZWQiCisrCisrY2F0ID4+ZSR7RU1VTEFUSU9OX05BTUV9LmMgPDxFT0YKKysgICAgICAqaXNmaWxlID0gMDsKKysgICAgICByZXR1cm4KKytFT0YKKytzZWQgJHNjIGxkc2NyaXB0cy8ke0VNVUxBVElPTl9OQU1FfS54d3IJCQk+PiBlJHtFTVVMQVRJT05fTkFNRX0uYworK2VjaG8gICc7JwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gZSR7RU1VTEFUSU9OX05BTUV9LmMKKytlbHNlCisrIyBTY3JpcHRzIHJlYWQgZnJvbSB0aGUgZmlsZXN5c3RlbS4KKysKKytjYXQgPj5lJHtFTVVMQVRJT05fTkFNRX0uYyA8PEVPRgorKyAgICAgICppc2ZpbGUgPSAxOworKyAgICAgIHJldHVybiAibGRzY3JpcHRzLyR7RU1VTEFUSU9OX05BTUV9Lnh3ciI7CisrRU9GCisrZmkKKysKKytjYXQgPj5lJHtFTVVMQVRJT05fTkFNRX0uYyA8PEVPRgorKyAgICB9CisrICByZXR1cm4gZ2xkJHtFTVVMQVRJT05fTkFNRX1fZ2V0X3NjcmlwdCAoaXNmaWxlKTsKKyt9CisrCisrCisrRU9GCisrCisrIyBEZWZpbmUgc29tZSBzaGVsbCB2YXJzIHRvIGluc2VydCBiaXRzIG9mIGNvZGUgaW50byB0aGUgc3RhbmRhcmQgZWxmCisrIyBwYXJzZV9hcmdzIGFuZCBsaXN0X29wdGlvbnMgZnVuY3Rpb25zLgorKyMKKytQQVJTRV9BTkRfTElTVF9QUk9MT0dVRT0nCisrI2RlZmluZSBPUFRJT05fRElSRUNUX0RBVEEJCTMwMAorKyNkZWZpbmUgT1BUSU9OX05PX0RJUkVDVF9EQVRBCQkzMDEKKysjZGVmaW5lIE9QVElPTl9ST0RBVEFfV1JJVEFCTEUJCTMwMgorKyNkZWZpbmUgT1BUSU9OX05PX1JPREFUQV9XUklUQUJMRQkzMDMKKysnCisrCisrUEFSU0VfQU5EX0xJU1RfTE9OR09QVFM9JworKyAgeyAiZGlyZWN0LWRhdGEiLCBub19hcmd1bWVudCwgTlVMTCwgT1BUSU9OX0RJUkVDVF9EQVRBIH0sCisrICB7ICJuby1kaXJlY3QtZGF0YSIsIG5vX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fTk9fRElSRUNUX0RBVEEgfSwKKysgIHsgInJvZGF0YS13cml0YWJsZSIsIG5vX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fUk9EQVRBX1dSSVRBQkxFIH0sCisrICB7ICJuby1yb2RhdGEtd3JpdGFibGUiLCBub19hcmd1bWVudCwgTlVMTCwgT1BUSU9OX05PX1JPREFUQV9XUklUQUJMRSB9LAorKycKKysKKytQQVJTRV9BTkRfTElTVF9PUFRJT05TPScKKysgIGZwcmludGYgKGZpbGUsIF8oIiAgLS1kaXJlY3QtZGF0YVx0XHRBbGxvdyBkaXJlY3QgZGF0YSByZWZlcmVuY2VzIHdoZW4gb3B0aW1pemluZ1xuIikpOworKyAgZnByaW50ZiAoZmlsZSwgXygiICAtLW5vLWRpcmVjdC1kYXRhXHREbyBub3QgYWxsb3cgZGlyZWN0IGRhdGEgcmVmZXJlbmNlcyB3aGVuIG9wdGltaXppbmdcbiIpKTsKKysgIGZwcmludGYgKGZpbGUsIF8oIiAgLS1yb2RhdGEtd3JpdGFibGVcdFB1dCByZWFkLW9ubHkgZGF0YSBpbiB3cml0YWJsZSBkYXRhIHNlY3Rpb25cbiIpKTsKKysgIGZwcmludGYgKGZpbGUsIF8oIiAgLS1uby1yb2RhdGEtd3JpdGFibGVcdERvIG5vdCBwdXQgcmVhZC1vbmx5IGRhdGEgaW4gd3JpdGFibGUgZGF0YSBzZWN0aW9uXG4iKSk7CisrJworKworK1BBUlNFX0FORF9MSVNUX0FSR1NfQ0FTRVM9JworKyAgICBjYXNlIE9QVElPTl9ESVJFQ1RfREFUQToKKysgICAgICBkaXJlY3RfZGF0YV9yZWZzID0gMTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBPUFRJT05fTk9fRElSRUNUX0RBVEE6CisrICAgICAgZGlyZWN0X2RhdGFfcmVmcyA9IDA7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgT1BUSU9OX1JPREFUQV9XUklUQUJMRToKKysgICAgICByb2RhdGFfd3JpdGFibGUgPSAxOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIE9QVElPTl9OT19ST0RBVEFfV1JJVEFCTEU6CisrICAgICAgcm9kYXRhX3dyaXRhYmxlID0gMDsKKysgICAgICBicmVhazsKKysnCisrCisrIyBSZXBsYWNlIHNvbWUgb2YgdGhlIHN0YW5kYXJkIEVMRiBmdW5jdGlvbnMgd2l0aCBvdXIgb3duIHZlcnNpb25zLgorKyMKKytMREVNVUxfQUZURVJfT1BFTj1hdnIzMl9lbGZfYWZ0ZXJfb3BlbgorK0xERU1VTF9HRVRfU0NSSVBUPWF2cjMyX2VsZl9nZXRfc2NyaXB0CistLS0gYS9sZC9sZC5pbmZvCisrKysgYi9sZC9sZC5pbmZvCitAQCAtNDM0Nyw2ICs0MzQ3LDggQEAgbm90IGxpc3RlZC4KKyAKKyAqIEFSTTo6CQkJCWBsZCcgYW5kIHRoZSBBUk0gZmFtaWx5CisgCisrKiBBVlIzMjo6ICAgICAgICAgICAgICAgICAgICAgICBgbGQnIGFuZCBBVlIzMiBwcm9jZXNzb3JzCisrCisgKiBIUFBBIEVMRjMyOjogICAgICAgICAgICAgICAgICBgbGQnIGFuZCBIUFBBIDMyLWJpdCBFTEYKKyAKKyAqIE1NSVg6OgkJCWBsZCcgYW5kIE1NSVgKK0BAIC00NDg3LDcgKzQ0ODksNyBAQCBQSUMuICBUaGlzIGF2b2lkcyBwcm9ibGVtcyBvbiB1Q2xpbnV4IHRhCisgdXNlZCB0byBnZW5lcmF0ZSByZWxvY2F0YWJsZSBiaW5hcmllcy4KKyAKKyAfCistRmlsZTogbGQuaW5mbywgIE5vZGU6IEFSTSwgIE5leHQ6IEhQUEEgRUxGMzIsICBQcmV2OiBpOTYwLCAgVXA6IE1hY2hpbmUgRGVwZW5kZW50CisrRmlsZTogbGQuaW5mbywgIE5vZGU6IEFSTSwgIE5leHQ6IEFWMzIsICBQcmV2OiBpOTYwLCAgVXA6IE1hY2hpbmUgRGVwZW5kZW50CisgCisgNC40IGBsZCcgYW5kIHRoZSBBUk0gZmFtaWx5CisgPT09PT09PT09PT09PT09PT09PT09PT09PT09CitAQCAtNDU4OCw3ICs0NTkwLDMxIEBAIGVudW1lcmF0aW9uIHZhbHVlcyBmaXR0ZWQgaW50byB0aGUgc21hbGwKKyBkaWFnbm9zZWQuCisgCisgHworLUZpbGU6IGxkLmluZm8sICBOb2RlOiBIUFBBIEVMRjMyLCAgTmV4dDogTU1JWCwgIFByZXY6IEFSTSwgIFVwOiBNYWNoaW5lIERlcGVuZGVudAorK0ZpbGU6IGxkLmluZm8sICBOb2RlOiBBVlIzMiwgIE5leHQ6IEhQUEEgRUxGMzIsICBQcmV2OiBBUk0sICBVcDogTWFjaGluZSBEZXBlbmRlbnQKKysKKys0LjQgYGxkJyBhbmQgQVZSMzIgcHJvY2Vzc29ycworKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrCisrYC0tZGlyZWN0LWRhdGEnCisrCisrYC0tbm8tZGlyZWN0LWRhdGEnCisrICAgICBUYWtpbmcgdGhlIGFkZHJlc3Mgb2YgYSBzeW1ib2wgY2FuIG9mdGVuIGJlIGRvbmUgYnkgdXNpbmcgYSBkaXJlY3QKKysgICAgIGBtb3YnIG9yIHBjLXJlbGF0aXZlIGBzdWInIGluc3RydWN0aW9uLCB3aGljaCBpcyBmYXN0ZXIgdGhhbiB1c2luZworKyAgICAgYSBQQy0gb3IgR09ULXJlbGF0aXZlIGxvYWQsIGVzcGVjaWFsbHkgb24gdGhlIHVDMyBwcm9jZXNzb3JzLgorKyAgICAgSG93ZXZlciwgdGhpcyBkb2VzIG5vdCBhbHdheXMgd29yayB3aGVuIGRlYWxpbmcgd2l0aCBzeW1ib2xzIGluCisrICAgICB0aGUgYC5kYXRhJyBzZWN0aW9uIHNvIHRoaXMgb3B0aW1pemF0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisrCisrICAgICBTcGVjaWZ5aW5nIGAtLWRpcmVjdC1kYXRhJyB3aWxsIGVuYWJsZSB0aGlzIG9wdGltaXphdGlvbi4gTm90ZQorKyAgICAgdGhhdCB0aGlzIG1heSBjYXVzZSBgcmVsb2NhdGlvbiB0cnVuY2F0ZWQgdG8gZml0JyBlcnJvcnMgZm9yCisrICAgICBjZXJ0YWluIGxhcmdlIHByb2dyYW1zLiBJZiB0aGlzIGhhcHBlbnMsIHRoZSBvcHRpbWl6YXRpb24gY2FuIGJlCisrICAgICB0dXJuZWQgb2ZmIGJ5IHNwZWNpZnlpbmcgYC0tbm8tZGlyZWN0LWRhdGEnLgorKworKyAgICAgQWxsIGtub3duIGlzc3VlcyB3aXRoIGRpcmVjdCBkYXRhIG9wdGltaXphdGlvbnMgYXJlIGRldGVjdGVkIGF0CisrICAgICBsaW5rIHRpbWUsIHNvIGlmIHRoZSBsaW5rZXIgZG9lc24ndCBjb21wbGFpbiwgdGhlIHJlc3VsdCBzaG91bGQKKysgICAgIHJ1biBqdXN0IGZpbmUuCisrCisrHworK0ZpbGU6IGxkLmluZm8sICBOb2RlOiBIUFBBIEVMRjMyLCAgTmV4dDogTU1JWCwgIFByZXY6IEFWUjMyLCAgVXA6IE1hY2hpbmUgRGVwZW5kZW50CisgCisgNC41IGBsZCcgYW5kIEhQUEEgMzItYml0IEVMRiBTdXBwb3J0CisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitAQCAtNjMzNiw2ICs2MzYyLDcgQEAgTEQgSW5kZXgKKyAqIC0tbm8tY2hlY2stc2VjdGlvbnM6ICAgICAgICAgICAgICAgICAgIE9wdGlvbnMuICAgICAgICAgICAgKGxpbmUgIDc2NSkKKyAqIC0tbm8tZGVmaW5lLWNvbW1vbjogICAgICAgICAgICAgICAgICAgIE9wdGlvbnMuICAgICAgICAgICAgKGxpbmUgIDc4NykKKyAqIC0tbm8tZGVtYW5nbGU6ICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMuICAgICAgICAgICAgKGxpbmUgIDgxNikKKysqIC0tbm8tZGlyZWN0LWRhdGE6ICAgICAgICAgICAgICAgICAgICAgIEFWUjMyLiAgICAgICAgICAgICAgKGxpbmUgICAgNikKKyAqIC0tbm8tZG90c3ltczogICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyUEM2NCBFTEY2NC4gICAgKGxpbmUgICAzMykKKyAqIC0tbm8tZW51bS1zaXplLXdhcm5pbmc6ICAgICAgICAgICAgICAgIEFSTS4gICAgICAgICAgICAgICAgKGxpbmUgICA5NCkKKyAqIC0tbm8tZ2Mtc2VjdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMuICAgICAgICAgICAgKGxpbmUgIDg0OCkKK0BAIC02NTM0LDYgKzY1NjEsNyBAQCBMRCBJbmRleAorICogQVQoTE1BKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0IFNlY3Rpb24gTE1BLiAobGluZSAgICA2KQorICogQVQ+TE1BX1JFR0lPTjogICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0IFNlY3Rpb24gTE1BLiAobGluZSAgICA2KQorICogYXV0b21hdGljIGRhdGEgaW1wb3J0czogICAgICAgICAgICAgICAgV0lOMzIuICAgICAgICAgICAgICAobGluZSAgMTcwKQorKyogQVZSMzIgb3B0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgQVZSMzIuICAgICAgICAgICAgICAobGluZSAgICA2KQorICogYmFjayBlbmQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkZELiAgICAgICAgICAgICAgICAobGluZSAgICA2KQorICogQkFTRSAoTVJJKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgTVJJLiAgICAgICAgICAgICAgICAobGluZSAgIDU0KQorICogQkU4OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJNLiAgICAgICAgICAgICAgICAobGluZSAgIDIzKQorQEAgLTcwMTgsNiArNzA0Niw3IEBAIE5vZGU6IEg4LzMwMH8xODM4OTcKKyBOb2RlOiBpOTYwfzE4NTUyMgorIE5vZGU6IE02OEhDMTEvNjhIQzEyfzE4NzIwNworIE5vZGU6IEFSTX8xODg5MTAKKytOb2RlOiBBVlIzMn8xODI1NzgKKyBOb2RlOiBIUFBBIEVMRjMyfzE5Mzc2MAorIE5vZGU6IE1NSVh/MTk1MzgzCisgTm9kZTogTVNQNDMwfzE5NjYwMAorLS0tIGEvbGQvbGQudGV4aW5mbworKysrIGIvbGQvbGQudGV4aW5mbworQEAgLTIxLDYgKzIxLDcgQEAKKyBAc2V0IFVzZXNFbnZWYXJzCisgQHNldCBHRU5FUklDCisgQHNldCBBUk0KKytAc2V0IEFWUjMyCisgQHNldCBIODMwMAorIEBzZXQgSFBQQQorIEBzZXQgSTk2MAorQEAgLTEzOSw2ICsxNDAsOSBAQCBzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvCisgQGlmc2V0IEFSTQorICogQVJNOjoJCQkJbGQgYW5kIHRoZSBBUk0gZmFtaWx5CisgQGVuZCBpZnNldAorK0BpZnNldCBBVlIzMgorKyogQVZSMzI6OiAgICAgICAgICAgICAgICAgICAgICAgbGQgYW5kIEFWUjMyIHByb2Nlc3NvcnMKKytAZW5kIGlmc2V0CisgQGlmc2V0IEhQUEEKKyAqIEhQUEEgRUxGMzI6OiAgICAgICAgICAgICAgICAgIGxkIGFuZCBIUFBBIDMyLWJpdCBFTEYKKyBAZW5kIGlmc2V0CitAQCAtNTI0OCw2ICs1MjUyLDkgQEAgZnVuY3Rpb25hbGl0eSBhcmUgbm90IGxpc3RlZC4KKyBAaWZzZXQgQVJNCisgKiBBUk06OgkJCQlAY29tbWFuZHtsZH0gYW5kIHRoZSBBUk0gZmFtaWx5CisgQGVuZCBpZnNldAorK0BpZnNldCBBVlIzMgorKyogQVZSMzI6OiAgICAgICAgICAgICAgICAgICAgICAgQGNvbW1hbmR7bGR9IGFuZCBBVlIzMiBwcm9jZXNzb3JzCisrQGVuZCBpZnNldAorIEBpZnNldCBIUFBBCisgKiBIUFBBIEVMRjMyOjogICAgICAgICAgICAgICAgICBAY29tbWFuZHtsZH0gYW5kIEhQUEEgMzItYml0IEVMRgorIEBlbmQgaWZzZXQKK0BAIC01NTg5LDYgKzU1OTYsNTIgQEAgbm90IGJlIGRpYWdub3NlZC4KKyBAZW5kIGlmY2xlYXIKKyBAZW5kIGlmc2V0CisgCisrQGlmc2V0IEFWUjMyCisrQGlmY2xlYXIgR0VORVJJQworK0ByYWlzZXNlY3Rpb25zCisrQGVuZCBpZmNsZWFyCisrCisrQG5vZGUgQVZSMzIKKytAc2VjdGlvbiBAY29tbWFuZHtsZH0gYW5kIEFWUjMyIHByb2Nlc3NvcnMKKytAY2luZGV4IEFWUjMyIG9wdGlvbnMKKytAdGFibGUgQG9wdGlvbgorK0BraW5kZXggLS1kaXJlY3QtZGF0YQorK0BraW5kZXggLS1uby1kaXJlY3QtZGF0YQorK0BpdGVtIC0tZGlyZWN0LWRhdGEKKytAaXRlbSAtLW5vLWRpcmVjdC1kYXRhCisrVGFraW5nIHRoZSBhZGRyZXNzIG9mIGEgc3ltYm9sIGNhbiBvZnRlbiBiZSBkb25lIGJ5IHVzaW5nIGEgZGlyZWN0CisrQGNvZGV7bW92fSBvciBwYy1yZWxhdGl2ZSBAY29kZXtzdWJ9IGluc3RydWN0aW9uLCB3aGljaCBpcyBmYXN0ZXIgdGhhbgorK3VzaW5nIGEgUEMtIG9yIEdPVC1yZWxhdGl2ZSBsb2FkLCBlc3BlY2lhbGx5IG9uIHRoZSB1QzMKKytwcm9jZXNzb3JzLiBIb3dldmVyLCB0aGlzIGRvZXMgbm90IGFsd2F5cyB3b3JrIHdoZW4gZGVhbGluZyB3aXRoCisrc3ltYm9scyBpbiB0aGUgQGNvZGV7LmRhdGF9IHNlY3Rpb24gc28gdGhpcyBvcHRpbWl6YXRpb24gaXMgZGlzYWJsZWQKKytieSBkZWZhdWx0LgorKworK1NwZWNpZnlpbmcgQG9wdGlvbnstLWRpcmVjdC1kYXRhfSB3aWxsIGVuYWJsZSB0aGlzIG9wdGltaXphdGlvbi4gTm90ZQorK3RoYXQgdGhpcyBtYXkgY2F1c2UgQHNhbXB7cmVsb2NhdGlvbiB0cnVuY2F0ZWQgdG8gZml0fSBlcnJvcnMgZm9yCisrY2VydGFpbiBsYXJnZSBwcm9ncmFtcy4gSWYgdGhpcyBoYXBwZW5zLCB0aGUgb3B0aW1pemF0aW9uIGNhbiBiZQorK3R1cm5lZCBvZmYgYnkgc3BlY2lmeWluZyBAb3B0aW9uey0tbm8tZGlyZWN0LWRhdGF9LgorKworK0FsbCBrbm93biBpc3N1ZXMgd2l0aCBkaXJlY3QgZGF0YSBvcHRpbWl6YXRpb25zIGFyZSBkZXRlY3RlZCBhdCBsaW5rCisrdGltZSwgc28gaWYgdGhlIGxpbmtlciBkb2Vzbid0IGNvbXBsYWluLCB0aGUgcmVzdWx0IHNob3VsZCBydW4ganVzdAorK2ZpbmUuCisrCisrQGtpbmRleCAtLXJvZGF0YS13cml0YWJsZQorK0BraW5kZXggLS1uby1yb2RhdGEtd3JpdGFibGUKKytAaXRlbSAtLXJvZGF0YS13cml0YWJsZQorK0BpdGVtIC0tbm8tcm9kYXRhLXdyaXRhYmxlCisrVXNpbmcgdGhlIEBvcHRpb257LS1yb2RhdGEtd3JpdGFibGV9IG9wdGlvbnMgd2lsbCBjYXVzZSB0aGUgbGlua2VyCisrdG8gdHJ5IGFuZCB1c2UgYSBsaW5rZXIgc2NyaXB0IHdoZXJlIHJlYWQtb25seSBkYXRhIHdpbGwgYmUgcGxhY2VkCisraW4gdGhlIHNhbWUgc2VjdGlvbiBhcyB3cml0YWJsZSBkYXRhLiBUaGlzIGNhbiBnaXZlIGdyZWF0IHBlcmZvcm1hbmNlIAorK2dhaW4gb24gY2FjaGVsZXNzIHByb2Nlc3NvcnMgd2hlcmUgcmVhZC1vbmx5IGRhdGEgbm9ybWFsbHkgaXMgcGxhY2VkIGluCisrZmxhc2gsIGFuZCB3cml0YWJsZSBkYXRhIGlzIHBsYWNlZCBpbiBpbnRlcm5hbCBzcmFtLiBUaGlzIHdpbGwgaG93ZXZlciAKKytjb21lIGF0IHRoZSBleHBlbmNlIG9mIGEgbGFyZ2VyIG1lbW9yeSBmb290cHJpbnQuCisrQGVuZCB0YWJsZQorKworK0BpZmNsZWFyIEdFTkVSSUMKKytAbG93ZXJzZWN0aW9ucworK0BlbmQgaWZjbGVhcgorK0BlbmQgaWZzZXQKKysKKyBAaWZzZXQgSFBQQQorIEBpZmNsZWFyIEdFTkVSSUMKKyBAcmFpc2VzZWN0aW9ucworLS0tIGEvbGQvTWFrZWZpbGUuYW0KKysrKyBiL2xkL01ha2VmaWxlLmFtCitAQCAtMTM3LDcgKzEzNywzNCBAQCBBTExfRU1VTEFUSU9OUyA9IFwKKyAJZWF2cjMubyBcCisgCWVhdnI0Lm8gXAorIAllYXZyNS5vIFwKKy0JZWF2cjYubyBcCisrICAgIGVhdnI2Lm8gXAorKwllYXZyMzJlbGZfYXA3MDAwLm8gXAorKwllYXZyMzJlbGZfYXA3MDAxLm8gXAorKwllYXZyMzJlbGZfYXA3MDAyLm8gXAorKwllYXZyMzJlbGZfYXA3MjAwLm8gXAorKwllYXZyMzJlbGZfdWMzYTAxMjgubyBcCisrCWVhdnIzMmVsZl91YzNhMDI1Ni5vIFwKKysJZWF2cjMyZWxmX3VjM2EwNTEyLm8gXAorKwllYXZyMzJlbGZfdWMzYTA1MTJlcy5vIFwKKysJZWF2cjMyZWxmX3VjM2ExMTI4Lm8gXAorKwllYXZyMzJlbGZfdWMzYTEyNTYubyBcCisrCWVhdnIzMmVsZl91YzNhMTUxMmVzLm8gXAorKwllYXZyMzJlbGZfdWMzYTE1MTIubyBcCisrCWVhdnIzMmVsZl91YzNhMzY0Lm8gXAorKwllYXZyMzJlbGZfdWMzYTM2NHMubyBcCisrCWVhdnIzMmVsZl91YzNhMzEyOC5vIFwKKysJZWF2cjMyZWxmX3VjM2EzMTI4cy5vIFwKKysJZWF2cjMyZWxmX3VjM2EzMjU2Lm8gXAorKwllYXZyMzJlbGZfdWMzYTMyNTZzLm8gXAorKwllYXZyMzJlbGZfdWMzYjA2NC5vIFwKKysJZWF2cjMyZWxmX3VjM2IwMTI4Lm8gXAorKwllYXZyMzJlbGZfdWMzYjAyNTZlcy5vIFwKKysJZWF2cjMyZWxmX3VjM2IwMjU2Lm8gXAorKwllYXZyMzJlbGZfdWMzYjE2NC5vIFwKKysJZWF2cjMyZWxmX3VjM2IxMTI4Lm8gXAorKwllYXZyMzJlbGZfdWMzYjEyNTZlcy5vIFwKKysJZWF2cjMyZWxmX3VjM2IxMjU2Lm8gXAorKwllYXZyMzJsaW51eC5vIFwKKyAJZWNvZmZfaTg2MC5vIFwKKyAJZWNvZmZfc3BhcmMubyBcCisgCWVlbGYzMl9zcHUubyBcCitAQCAtNjIyLDYgKzY0OSwxMTQgQEAgZWF2cjYuYzogJChzcmNkaXIpL2VtdWxwYXJhbXMvYXZyNi5zaCAkKAorICAgJChFTEZfREVQUykgJChzcmNkaXIpL3NjcmlwdHRlbXBsL2F2ci5zYyBcCisgICAke0dFTl9ERVBFTkRTfQorIAkke0dFTlNDUklQVFN9IGF2cjYgIiQodGRpcl9hdnIyKSIKKytlYXZyMzJlbGZfYXA3MDAwLmM6ICQoc3JjZGlyKS9lbXVscGFyYW1zL2F2cjMyZWxmLnNoIFwKKysgICQoc3JjZGlyKS9lbXVsdGVtcGwvZWxmMzIuZW0gJChzcmNkaXIpL2VtdWx0ZW1wbC9hdnIzMmVsZi5lbSBcCisrICAkKHNyY2Rpcikvc2NyaXB0dGVtcGwvZWxmX3hpcC5zYyAke0dFTl9ERVBFTkRTfQorKwkke0dFTlNDUklQVFN9IGF2cjMyZWxmX2FwNzAwMCAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJlbGZfYXA3MDAxLmM6ICQoc3JjZGlyKS9lbXVscGFyYW1zL2F2cjMyZWxmLnNoIFwKKysgICQoc3JjZGlyKS9lbXVsdGVtcGwvZWxmMzIuZW0gJChzcmNkaXIpL2VtdWx0ZW1wbC9hdnIzMmVsZi5lbSBcCisrICAkKHNyY2Rpcikvc2NyaXB0dGVtcGwvZWxmX3hpcC5zYyAke0dFTl9ERVBFTkRTfQorKwkke0dFTlNDUklQVFN9IGF2cjMyZWxmX2FwNzAwMSAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJlbGZfYXA3MDAyLmM6ICQoc3JjZGlyKS9lbXVscGFyYW1zL2F2cjMyZWxmLnNoIFwKKysgICQoc3JjZGlyKS9lbXVsdGVtcGwvZWxmMzIuZW0gJChzcmNkaXIpL2VtdWx0ZW1wbC9hdnIzMmVsZi5lbSBcCisrICAkKHNyY2Rpcikvc2NyaXB0dGVtcGwvZWxmX3hpcC5zYyAke0dFTl9ERVBFTkRTfQorKwkke0dFTlNDUklQVFN9IGF2cjMyZWxmX2FwNzAwMiAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJlbGZfYXA3MjAwLmM6ICQoc3JjZGlyKS9lbXVscGFyYW1zL2F2cjMyZWxmLnNoIFwKKysgICQoc3JjZGlyKS9lbXVsdGVtcGwvZWxmMzIuZW0gJChzcmNkaXIpL2VtdWx0ZW1wbC9hdnIzMmVsZi5lbSBcCisrICAkKHNyY2Rpcikvc2NyaXB0dGVtcGwvZWxmX3hpcC5zYyAke0dFTl9ERVBFTkRTfQorKwkke0dFTlNDUklQVFN9IGF2cjMyZWxmX2FwNzIwMCAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJlbGZfdWMzYTAxMjguYzogJChzcmNkaXIpL2VtdWxwYXJhbXMvYXZyMzJlbGYuc2ggXAorKyAgJChzcmNkaXIpL2VtdWx0ZW1wbC9lbGYzMi5lbSAkKHNyY2RpcikvZW11bHRlbXBsL2F2cjMyZWxmLmVtIFwKKysgICQoc3JjZGlyKS9zY3JpcHR0ZW1wbC9lbGZfeGlwLnNjICR7R0VOX0RFUEVORFN9CisrCSR7R0VOU0NSSVBUU30gYXZyMzJlbGZfdWMzYTAxMjggIiQodGRpcl9hdnIzMikiIGF2cjMyZWxmCisrZWF2cjMyZWxmX3VjM2EwMjU2LmM6ICQoc3JjZGlyKS9lbXVscGFyYW1zL2F2cjMyZWxmLnNoIFwKKysgICQoc3JjZGlyKS9lbXVsdGVtcGwvZWxmMzIuZW0gJChzcmNkaXIpL2VtdWx0ZW1wbC9hdnIzMmVsZi5lbSBcCisrICAkKHNyY2Rpcikvc2NyaXB0dGVtcGwvZWxmX3hpcC5zYyAke0dFTl9ERVBFTkRTfQorKwkke0dFTlNDUklQVFN9IGF2cjMyZWxmX3VjM2EwMjU2ICIkKHRkaXJfYXZyMzIpIiBhdnIzMmVsZgorK2VhdnIzMmVsZl91YzNhMDUxMi5jOiAkKHNyY2RpcikvZW11bHBhcmFtcy9hdnIzMmVsZi5zaCBcCisrICAkKHNyY2RpcikvZW11bHRlbXBsL2VsZjMyLmVtICQoc3JjZGlyKS9lbXVsdGVtcGwvYXZyMzJlbGYuZW0gXAorKyAgJChzcmNkaXIpL3NjcmlwdHRlbXBsL2VsZl94aXAuc2MgJHtHRU5fREVQRU5EU30KKysJJHtHRU5TQ1JJUFRTfSBhdnIzMmVsZl91YzNhMDUxMiAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJlbGZfdWMzYTA1MTJlcy5jOiAkKHNyY2RpcikvZW11bHBhcmFtcy9hdnIzMmVsZi5zaCBcCisrICAkKHNyY2RpcikvZW11bHRlbXBsL2VsZjMyLmVtICQoc3JjZGlyKS9lbXVsdGVtcGwvYXZyMzJlbGYuZW0gXAorKyAgJChzcmNkaXIpL3NjcmlwdHRlbXBsL2VsZl94aXAuc2MgJHtHRU5fREVQRU5EU30KKysJJHtHRU5TQ1JJUFRTfSBhdnIzMmVsZl91YzNhMDUxMmVzICIkKHRkaXJfYXZyMzIpIiBhdnIzMmVsZgorK2VhdnIzMmVsZl91YzNhMTEyOC5jOiAkKHNyY2RpcikvZW11bHBhcmFtcy9hdnIzMmVsZi5zaCBcCisrICAkKHNyY2RpcikvZW11bHRlbXBsL2VsZjMyLmVtICQoc3JjZGlyKS9lbXVsdGVtcGwvYXZyMzJlbGYuZW0gXAorKyAgJChzcmNkaXIpL3NjcmlwdHRlbXBsL2VsZl94aXAuc2MgJHtHRU5fREVQRU5EU30KKysJJHtHRU5TQ1JJUFRTfSBhdnIzMmVsZl91YzNhMTEyOCAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJlbGZfdWMzYTEyNTYuYzogJChzcmNkaXIpL2VtdWxwYXJhbXMvYXZyMzJlbGYuc2ggXAorKyAgJChzcmNkaXIpL2VtdWx0ZW1wbC9lbGYzMi5lbSAkKHNyY2RpcikvZW11bHRlbXBsL2F2cjMyZWxmLmVtIFwKKysgICQoc3JjZGlyKS9zY3JpcHR0ZW1wbC9lbGZfeGlwLnNjICR7R0VOX0RFUEVORFN9CisrCSR7R0VOU0NSSVBUU30gYXZyMzJlbGZfdWMzYTEyNTYgIiQodGRpcl9hdnIzMikiIGF2cjMyZWxmCisrZWF2cjMyZWxmX3VjM2ExNTEyLmM6ICQoc3JjZGlyKS9lbXVscGFyYW1zL2F2cjMyZWxmLnNoIFwKKysgICQoc3JjZGlyKS9lbXVsdGVtcGwvZWxmMzIuZW0gJChzcmNkaXIpL2VtdWx0ZW1wbC9hdnIzMmVsZi5lbSBcCisrICAkKHNyY2Rpcikvc2NyaXB0dGVtcGwvZWxmX3hpcC5zYyAke0dFTl9ERVBFTkRTfQorKwkke0dFTlNDUklQVFN9IGF2cjMyZWxmX3VjM2ExNTEyICIkKHRkaXJfYXZyMzIpIiBhdnIzMmVsZgorK2VhdnIzMmVsZl91YzNhMTUxMmVzLmM6ICQoc3JjZGlyKS9lbXVscGFyYW1zL2F2cjMyZWxmLnNoIFwKKysgICQoc3JjZGlyKS9lbXVsdGVtcGwvZWxmMzIuZW0gJChzcmNkaXIpL2VtdWx0ZW1wbC9hdnIzMmVsZi5lbSBcCisrICAkKHNyY2Rpcikvc2NyaXB0dGVtcGwvZWxmX3hpcC5zYyAke0dFTl9ERVBFTkRTfQorKwkke0dFTlNDUklQVFN9IGF2cjMyZWxmX3VjM2ExNTEyZXMgIiQodGRpcl9hdnIzMikiIGF2cjMyZWxmCisrZWF2cjMyZWxmX3VjM2EzNjQuYzogJChzcmNkaXIpL2VtdWxwYXJhbXMvYXZyMzJlbGYuc2ggXAorKyAgJChzcmNkaXIpL2VtdWx0ZW1wbC9lbGYzMi5lbSAkKHNyY2RpcikvZW11bHRlbXBsL2F2cjMyZWxmLmVtIFwKKysgICQoc3JjZGlyKS9zY3JpcHR0ZW1wbC9lbGZfeGlwLnNjICR7R0VOX0RFUEVORFN9CisrCSR7R0VOU0NSSVBUU30gYXZyMzJlbGZfdWMzYTM2NCAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJlbGZfdWMzYTM2NHMuYzogJChzcmNkaXIpL2VtdWxwYXJhbXMvYXZyMzJlbGYuc2ggXAorKyAgJChzcmNkaXIpL2VtdWx0ZW1wbC9lbGYzMi5lbSAkKHNyY2RpcikvZW11bHRlbXBsL2F2cjMyZWxmLmVtIFwKKysgICQoc3JjZGlyKS9zY3JpcHR0ZW1wbC9lbGZfeGlwLnNjICR7R0VOX0RFUEVORFN9CisrCSR7R0VOU0NSSVBUU30gYXZyMzJlbGZfdWMzYTM2NHMgIiQodGRpcl9hdnIzMikiIGF2cjMyZWxmCisrZWF2cjMyZWxmX3VjM2EzMTI4LmM6ICQoc3JjZGlyKS9lbXVscGFyYW1zL2F2cjMyZWxmLnNoIFwKKysgICQoc3JjZGlyKS9lbXVsdGVtcGwvZWxmMzIuZW0gJChzcmNkaXIpL2VtdWx0ZW1wbC9hdnIzMmVsZi5lbSBcCisrICAkKHNyY2Rpcikvc2NyaXB0dGVtcGwvZWxmX3hpcC5zYyAke0dFTl9ERVBFTkRTfQorKwkke0dFTlNDUklQVFN9IGF2cjMyZWxmX3VjM2EzMTI4ICIkKHRkaXJfYXZyMzIpIiBhdnIzMmVsZgorK2VhdnIzMmVsZl91YzNhMzEyOHMuYzogJChzcmNkaXIpL2VtdWxwYXJhbXMvYXZyMzJlbGYuc2ggXAorKyAgJChzcmNkaXIpL2VtdWx0ZW1wbC9lbGYzMi5lbSAkKHNyY2RpcikvZW11bHRlbXBsL2F2cjMyZWxmLmVtIFwKKysgICQoc3JjZGlyKS9zY3JpcHR0ZW1wbC9lbGZfeGlwLnNjICR7R0VOX0RFUEVORFN9CisrCSR7R0VOU0NSSVBUU30gYXZyMzJlbGZfdWMzYTMxMjhzICIkKHRkaXJfYXZyMzIpIiBhdnIzMmVsZgorK2VhdnIzMmVsZl91YzNhMzI1Ni5jOiAkKHNyY2RpcikvZW11bHBhcmFtcy9hdnIzMmVsZi5zaCBcCisrICAkKHNyY2RpcikvZW11bHRlbXBsL2VsZjMyLmVtICQoc3JjZGlyKS9lbXVsdGVtcGwvYXZyMzJlbGYuZW0gXAorKyAgJChzcmNkaXIpL3NjcmlwdHRlbXBsL2VsZl94aXAuc2MgJHtHRU5fREVQRU5EU30KKysJJHtHRU5TQ1JJUFRTfSBhdnIzMmVsZl91YzNhMzI1NiAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJlbGZfdWMzYTMyNTZzLmM6ICQoc3JjZGlyKS9lbXVscGFyYW1zL2F2cjMyZWxmLnNoIFwKKysgICQoc3JjZGlyKS9lbXVsdGVtcGwvZWxmMzIuZW0gJChzcmNkaXIpL2VtdWx0ZW1wbC9hdnIzMmVsZi5lbSBcCisrICAkKHNyY2Rpcikvc2NyaXB0dGVtcGwvZWxmX3hpcC5zYyAke0dFTl9ERVBFTkRTfQorKwkke0dFTlNDUklQVFN9IGF2cjMyZWxmX3VjM2EzMjU2cyAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJlbGZfdWMzYjA2NC5jOiAkKHNyY2RpcikvZW11bHBhcmFtcy9hdnIzMmVsZi5zaCBcCisrICAkKHNyY2RpcikvZW11bHRlbXBsL2VsZjMyLmVtICQoc3JjZGlyKS9lbXVsdGVtcGwvYXZyMzJlbGYuZW0gXAorKyAgJChzcmNkaXIpL3NjcmlwdHRlbXBsL2VsZl94aXAuc2MgJHtHRU5fREVQRU5EU30KKysJJHtHRU5TQ1JJUFRTfSBhdnIzMmVsZl91YzNiMDY0ICIkKHRkaXJfYXZyMzIpIiBhdnIzMmVsZgorK2VhdnIzMmVsZl91YzNiMDEyOC5jOiAkKHNyY2RpcikvZW11bHBhcmFtcy9hdnIzMmVsZi5zaCBcCisrICAkKHNyY2RpcikvZW11bHRlbXBsL2VsZjMyLmVtICQoc3JjZGlyKS9lbXVsdGVtcGwvYXZyMzJlbGYuZW0gXAorKyAgJChzcmNkaXIpL3NjcmlwdHRlbXBsL2VsZl94aXAuc2MgJHtHRU5fREVQRU5EU30KKysJJHtHRU5TQ1JJUFRTfSBhdnIzMmVsZl91YzNiMDEyOCAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJlbGZfdWMzYjAyNTYuYzogJChzcmNkaXIpL2VtdWxwYXJhbXMvYXZyMzJlbGYuc2ggXAorKyAgJChzcmNkaXIpL2VtdWx0ZW1wbC9lbGYzMi5lbSAkKHNyY2RpcikvZW11bHRlbXBsL2F2cjMyZWxmLmVtIFwKKysgICQoc3JjZGlyKS9zY3JpcHR0ZW1wbC9lbGZfeGlwLnNjICR7R0VOX0RFUEVORFN9CisrCSR7R0VOU0NSSVBUU30gYXZyMzJlbGZfdWMzYjAyNTYgIiQodGRpcl9hdnIzMikiIGF2cjMyZWxmCisrZWF2cjMyZWxmX3VjM2IwMjU2ZXMuYzogJChzcmNkaXIpL2VtdWxwYXJhbXMvYXZyMzJlbGYuc2ggXAorKyAgJChzcmNkaXIpL2VtdWx0ZW1wbC9lbGYzMi5lbSAkKHNyY2RpcikvZW11bHRlbXBsL2F2cjMyZWxmLmVtIFwKKysgICQoc3JjZGlyKS9zY3JpcHR0ZW1wbC9lbGZfeGlwLnNjICR7R0VOX0RFUEVORFN9CisrCSR7R0VOU0NSSVBUU30gYXZyMzJlbGZfdWMzYjAyNTZlcyAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJlbGZfdWMzYjE2NC5jOiAkKHNyY2RpcikvZW11bHBhcmFtcy9hdnIzMmVsZi5zaCBcCisrICAkKHNyY2RpcikvZW11bHRlbXBsL2VsZjMyLmVtICQoc3JjZGlyKS9lbXVsdGVtcGwvYXZyMzJlbGYuZW0gXAorKyAgJChzcmNkaXIpL3NjcmlwdHRlbXBsL2VsZl94aXAuc2MgJHtHRU5fREVQRU5EU30KKysJJHtHRU5TQ1JJUFRTfSBhdnIzMmVsZl91YzNiMTY0ICIkKHRkaXJfYXZyMzIpIiBhdnIzMmVsZgorK2VhdnIzMmVsZl91YzNiMTEyOC5jOiAkKHNyY2RpcikvZW11bHBhcmFtcy9hdnIzMmVsZi5zaCBcCisrICAkKHNyY2RpcikvZW11bHRlbXBsL2VsZjMyLmVtICQoc3JjZGlyKS9lbXVsdGVtcGwvYXZyMzJlbGYuZW0gXAorKyAgJChzcmNkaXIpL3NjcmlwdHRlbXBsL2VsZl94aXAuc2MgJHtHRU5fREVQRU5EU30KKysJJHtHRU5TQ1JJUFRTfSBhdnIzMmVsZl91YzNiMTEyOCAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJlbGZfdWMzYjEyNTYuYzogJChzcmNkaXIpL2VtdWxwYXJhbXMvYXZyMzJlbGYuc2ggXAorKyAgJChzcmNkaXIpL2VtdWx0ZW1wbC9lbGYzMi5lbSAkKHNyY2RpcikvZW11bHRlbXBsL2F2cjMyZWxmLmVtIFwKKysgICQoc3JjZGlyKS9zY3JpcHR0ZW1wbC9lbGZfeGlwLnNjICR7R0VOX0RFUEVORFN9CisrCSR7R0VOU0NSSVBUU30gYXZyMzJlbGZfdWMzYjEyNTYgIiQodGRpcl9hdnIzMikiIGF2cjMyZWxmCisrZWF2cjMyZWxmX3VjM2IxMjU2ZXMuYzogJChzcmNkaXIpL2VtdWxwYXJhbXMvYXZyMzJlbGYuc2ggXAorKyAgJChzcmNkaXIpL2VtdWx0ZW1wbC9lbGYzMi5lbSAkKHNyY2RpcikvZW11bHRlbXBsL2F2cjMyZWxmLmVtIFwKKysgICQoc3JjZGlyKS9zY3JpcHR0ZW1wbC9lbGZfeGlwLnNjICR7R0VOX0RFUEVORFN9CisrCSR7R0VOU0NSSVBUU30gYXZyMzJlbGZfdWMzYjEyNTZlcyAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJsaW51eC5jOiAkKHNyY2RpcikvZW11bHBhcmFtcy9hdnIzMmxpbnV4LnNoIFwKKysgICQoc3JjZGlyKS9lbXVsdGVtcGwvZWxmMzIuZW0gJChzcmNkaXIpL2VtdWx0ZW1wbC9hdnIzMmVsZi5lbSBcCisrICAkKHNyY2Rpcikvc2NyaXB0dGVtcGwvZWxmLnNjICR7R0VOX0RFUEVORFN9CisrCSR7R0VOU0NSSVBUU30gYXZyMzJsaW51eCAiJCh0ZGlyX2F2cjMyKSIKKyBlY29mZl9pODYwLmM6ICQoc3JjZGlyKS9lbXVscGFyYW1zL2NvZmZfaTg2MC5zaCBcCisgICAkKHNyY2RpcikvZW11bHRlbXBsL2dlbmVyaWMuZW0gJChzcmNkaXIpL3NjcmlwdHRlbXBsL2k4NjBjb2ZmLnNjICR7R0VOX0RFUEVORFN9CisgCSR7R0VOU0NSSVBUU30gY29mZl9pODYwICIkKHRkaXJfY29mZl9pODYwKSIKK0BAIC0xODc3LDcgKzIwMTIsOSBAQCBpbnN0YWxsLWV4ZWMtbG9jYWw6IGxkLW5ldyQoRVhFRVhUKQorIAkgIHx8ICQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMX1BST0dSQU0pIGxkLW5ldyQoRVhFRVhUKSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vbGQkKEVYRUVYVCk7IFwKKyAJZmkKKyAKKy1pbnN0YWxsLWRhdGEtbG9jYWw6CisrIyBXZSB3YW50IGluc3RhbGwgdG8gaW1wbHkgaW5zdGFsbC1pbmZvIGFzIHBlciBHTlUgc3RhbmRhcmRzLCBkZXNwaXRlIHRoZQorKyMgY3lnbnVzIG9wdGlvbi4KKytpbnN0YWxsLWRhdGEtbG9jYWw6IGluc3RhbGwtaW5mbworIAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKHNjcmlwdGRpcikvbGRzY3JpcHRzCisgCWZvciBmIGluIGxkc2NyaXB0cy8qOyBkbyBcCisgCSAgJChJTlNUQUxMX0RBVEEpICQkZiAkKERFU1RESVIpJChzY3JpcHRkaXIpLyQkZiA7IFwKKy0tLSAvZGV2L251bGwKKysrKyBiL2xkL3NjcmlwdHRlbXBsL2VsZl94aXAuc2MKK0BAIC0wLDAgKzEsNDU2IEBACisrIworKyMgVW51c3VhbCB2YXJpYWJsZXMgY2hlY2tlZCBieSB0aGlzIGNvZGU6CisrIwlOT1AgLSBmb3VyIGJ5dGUgb3Bjb2RlIGZvciBuby1vcCAoZGVmYXVsdHMgdG8gMCkKKysjCU5PX1NNQUxMX0RBVEEgLSBubyAuc2Jzcy8uc2JzczIvLnNkYXRhLy5zZGF0YTIgc2VjdGlvbnMgaWYgbm90CisrIwkJZW1wdHkuCisrIwlTTUFMTF9EQVRBX0NUT1IgLSAuY3RvcnMgY29udGFpbnMgc21hbGwgZGF0YS4KKysjCVNNQUxMX0RBVEFfRFRPUiAtIC5kdG9ycyBjb250YWlucyBzbWFsbCBkYXRhLgorKyMJREFUQV9BRERSIC0gaWYgZW5kLW9mLXRleHQtcGx1cy1vbmUtcGFnZSBpc24ndCByaWdodCBmb3IgZGF0YSBzdGFydAorKyMJSU5JVElBTF9SRUFET05MWV9TRUNUSU9OUyAtIGF0IHN0YXJ0IG9mIHRleHQgc2VnbWVudAorKyMJT1RIRVJfUkVBRE9OTFlfU0VDVElPTlMgLSBvdGhlciB0aGFuIC50ZXh0IC5pbml0IC5yb2RhdGEgLi4uCisrIwkJKGUuZy4sIC5QQVJJU0MubWlsbGkpCisrIwlPVEhFUl9URVhUX1NFQ1RJT05TIC0gdGhlc2UgZ2V0IHB1dCBpbiAudGV4dCB3aGVuIHJlbG9jYXRpbmcKKysjCU9USEVSX1JFQURXUklURV9TRUNUSU9OUyAtIG90aGVyIHRoYW4gLmRhdGEgLmJzcyAuY3RvcnMgLnNkYXRhIC4uLgorKyMJCShlLmcuLCAuUEFSSVNDLmdsb2JhbCkKKysjCU9USEVSX1JFTFJPX1NFQ1RJT05TIC0gb3RoZXIgdGhhbiAuZGF0YS5yZWwucm8gLi4uCisrIwkJKGUuZy4gUFBDMzIgLmZpeHVwLCAuZ290WzEyXSkKKysjCU9USEVSX0JTU19TRUNUSU9OUyAtIG90aGVyIHRoYW4gLmJzcyAuc2JzcyAuLi4KKysjCU9USEVSX1NFQ1RJT05TIC0gYXQgdGhlIGVuZAorKyMJRVhFQ1VUQUJMRV9TWU1CT0xTIC0gc3ltYm9scyB0aGF0IG11c3QgYmUgZGVmaW5lZCBmb3IgYW4KKysjCQlleGVjdXRhYmxlIChlLmcuLCBfRFlOQU1JQ19MSU5LKQorKyMgICAgICAgVEVYVF9TVEFSVF9BRERSIC0gdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHRleHQgc2VnbWVudCwgYWZ0ZXIgYW55CisrIyAgICAgICAgICAgICAgIGhlYWRlcnMuCisrIyAgICAgICBURVhUX0JBU0VfQUREUkVTUyAtIHRoZSBmaXJzdCBieXRlIG9mIHRoZSB0ZXh0IHNlZ21lbnQuCisrIwlURVhUX1NUQVJUX1NZTUJPTFMgLSBzeW1ib2xzIHRoYXQgYXBwZWFyIGF0IHRoZSBzdGFydCBvZiB0aGUKKysjCQkudGV4dCBzZWN0aW9uLgorKyMJREFUQV9TVEFSVF9TWU1CT0xTIC0gc3ltYm9scyB0aGF0IGFwcGVhciBhdCB0aGUgc3RhcnQgb2YgdGhlCisrIwkJLmRhdGEgc2VjdGlvbi4KKysjCU9USEVSX0dPVF9TWU1CT0xTIC0gc3ltYm9scyBkZWZpbmVkIGp1c3QgYmVmb3JlIC5nb3QuCisrIwlPVEhFUl9HT1RfU0VDVElPTlMgLSBzZWN0aW9ucyBqdXN0IGFmdGVyIC5nb3QuCisrIwlPVEhFUl9TREFUQV9TRUNUSU9OUyAtIHNlY3Rpb25zIGp1c3QgYWZ0ZXIgLnNkYXRhLgorKyMJT1RIRVJfQlNTX1NZTUJPTFMgLSBzeW1ib2xzIHRoYXQgYXBwZWFyIGF0IHRoZSBzdGFydCBvZiB0aGUKKysjCQkuYnNzIHNlY3Rpb24gYmVzaWRlcyBfX2Jzc19zdGFydC4KKysjCURBVEFfUExUIC0gLnBsdCBzaG91bGQgYmUgaW4gZGF0YSBzZWdtZW50LCBub3QgdGV4dCBzZWdtZW50LgorKyMJUExUX0JFRk9SRV9HT1QgLSAucGx0IGp1c3QgYmVmb3JlIC5nb3Qgd2hlbiAucGx0IGlzIGluIGRhdGEgc2VnZW1lbnQuCisrIwlCU1NfUExUIC0gLnBsdCBzaG91bGQgYmUgaW4gYnNzIHNlZ21lbnQKKysjCVRFWFRfRFlOQU1JQyAtIC5keW5hbWljIGluIHRleHQgc2VnbWVudCwgbm90IGRhdGEgc2VnbWVudC4KKysjCUVNQkVEREVEIC0gd2hldGhlciB0aGlzIGlzIGZvciBhbiBlbWJlZGRlZCBzeXN0ZW0uCisrIwlTSExJQl9URVhUX1NUQVJUX0FERFIgLSBpZiBzZXQsIGFkZCB0byBTSVpFT0ZfSEVBREVSUyB0byBzZXQKKysjCQlzdGFydCBhZGRyZXNzIG9mIHNoYXJlZCBsaWJyYXJ5LgorKyMJSU5QVVRfRklMRVMgLSBJTlBVVCBjb21tYW5kIG9mIGZpbGVzIHRvIGFsd2F5cyBpbmNsdWRlCisrIwlXUklUQUJMRV9ST0RBVEEgLSBpZiBzZXQsIHRoZSAucm9kYXRhIHNlY3Rpb24gc2hvdWxkIGJlIHdyaXRhYmxlCisrIwlJTklUX1NUQVJULCBJTklUX0VORCAtICBzdGF0ZW1lbnRzIGp1c3QgYmVmb3JlIGFuZCBqdXN0IGFmdGVyCisrIyAJY29tYmluYXRpb24gb2YgLmluaXQgc2VjdGlvbnMuCisrIwlGSU5JX1NUQVJULCBGSU5JX0VORCAtIHN0YXRlbWVudHMganVzdCBiZWZvcmUgYW5kIGp1c3QgYWZ0ZXIKKysjIAljb21iaW5hdGlvbiBvZiAuZmluaSBzZWN0aW9ucy4KKysjCVNUQUNLX0FERFIgLSBzdGFydCBvZiBhIC5zdGFjayBzZWN0aW9uLgorKyMJT1RIRVJfRU5EX1NZTUJPTFMgLSBzeW1ib2xzIHRvIHBsYWNlIHJpZ2h0IGF0IHRoZSBlbmQgb2YgdGhlIHNjcmlwdC4KKysjCVNFUEFSQVRFX0dPVFBMVCAtIGlmIHNldCwgLmdvdC5wbHQgc2hvdWxkIGJlIHNlcGFyYXRlIG91dHB1dCBzZWN0aW9uLAorKyMJCXNvIHRoYXQgLmdvdCBjYW4gYmUgaW4gdGhlIFJFTFJPIGFyZWEuICBJdCBzaG91bGQgYmUgc2V0IHRvCisrIwkJdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYmVnaW5uaW5nIG9mIC5nb3QucGx0IHdoaWNoIGNhbiBiZQorKyMJCWluIHRoZSBSRUxSTyBhcmVhIGFzIHdlbGwuCisrIworKyMgV2hlbiBhZGRpbmcgc2VjdGlvbnMsIGRvIG5vdGUgdGhhdCB0aGUgbmFtZXMgb2Ygc29tZSBzZWN0aW9ucyBhcmUgdXNlZAorKyMgd2hlbiBzcGVjaWZ5aW5nIHRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBuZXh0LgorKyMKKysKKysjICBNYW55IHNlY3Rpb25zIGNvbWUgaW4gdGhyZWUgZmxhdm91cnMuICBUaGVyZSBpcyB0aGUgJ3JlYWwnIHNlY3Rpb24sCisrIyAgbGlrZSAiLmRhdGEiLiAgVGhlbiB0aGVyZSBhcmUgdGhlIHBlci1wcm9jZWR1cmUgb3IgcGVyLXZhcmlhYmxlCisrIyAgc2VjdGlvbnMsIGdlbmVyYXRlZCBieSAtZmZ1bmN0aW9uLXNlY3Rpb25zIGFuZCAtZmRhdGEtc2VjdGlvbnMgaW4gR0NDLAorKyMgIGFuZCB1c2VmdWwgZm9yIC0tZ2Mtc2VjdGlvbnMsIHdoaWNoIGZvciBhIHZhcmlhYmxlICJmb28iIG1pZ2h0IGJlCisrIyAgIi5kYXRhLmZvbyIuICBUaGVuIHRoZXJlIGFyZSB0aGUgbGlua29uY2Ugc2VjdGlvbnMsIGZvciB3aGljaCB0aGUgbGlua2VyCisrIyAgZWxpbWluYXRlcyBkdXBsaWNhdGVzLCB3aGljaCBhcmUgbmFtZWQgbGlrZSAiLmdudS5saW5rb25jZS5kLmZvbyIuCisrIyAgVGhlIGV4YWN0IGNvcnJlc3BvbmRlbmNlcyBhcmU6CisrIworKyMgIFNlY3Rpb24JTGlua29uY2Ugc2VjdGlvbgorKyMgIC50ZXh0CS5nbnUubGlua29uY2UudC5mb28KKysjICAucm9kYXRhCS5nbnUubGlua29uY2Uuci5mb28KKysjICAuZGF0YQkuZ251LmxpbmtvbmNlLmQuZm9vCisrIyAgLmJzcwkJLmdudS5saW5rb25jZS5iLmZvbworKyMgIC5zZGF0YQkuZ251LmxpbmtvbmNlLnMuZm9vCisrIyAgLnNic3MJLmdudS5saW5rb25jZS5zYi5mb28KKysjICAuc2RhdGEyCS5nbnUubGlua29uY2UuczIuZm9vCisrIyAgLnNic3MyCS5nbnUubGlua29uY2Uuc2IyLmZvbworKyMgIC5kZWJ1Z19pbmZvCS5nbnUubGlua29uY2Uud2kuZm9vCisrIyAgLnRkYXRhCS5nbnUubGlua29uY2UudGQuZm9vCisrIyAgLnRic3MJLmdudS5saW5rb25jZS50Yi5mb28KKysjCisrIyAgRWFjaCBvZiB0aGVzZSBjYW4gYWxzbyBoYXZlIGNvcnJlc3BvbmRpbmcgLnJlbC4qIGFuZCAucmVsYS4qIHNlY3Rpb25zLgorKworK3Rlc3QgLXogIiRFTlRSWSIgJiYgRU5UUlk9X3N0YXJ0CisrdGVzdCAteiAiJHtCSUdfT1VUUFVUX0ZPUk1BVH0iICYmIEJJR19PVVRQVVRfRk9STUFUPSR7T1VUUFVUX0ZPUk1BVH0KKyt0ZXN0IC16ICIke0xJVFRMRV9PVVRQVVRfRk9STUFUfSIgJiYgTElUVExFX09VVFBVVF9GT1JNQVQ9JHtPVVRQVVRfRk9STUFUfQorK2lmIFsgLXogIiRNQUNISU5FIiBdOyB0aGVuIE9VVFBVVF9BUkNIPSR7QVJDSH07IGVsc2UgT1VUUFVUX0FSQ0g9JHtBUkNIfToke01BQ0hJTkV9OyBmaQorK3Rlc3QgLXogIiR7RUxGU0laRX0iICYmIEVMRlNJWkU9MzIKKyt0ZXN0IC16ICIke0FMSUdOTUVOVH0iICYmIEFMSUdOTUVOVD0iJHtFTEZTSVpFfSAvIDgiCisrdGVzdCAiJExEX0ZMQUciID0gIk4iICYmIERBVEFfQUREUj0uCisrdGVzdCAtbiAiJENSRUFURV9TSExJQiRDUkVBVEVfUElFIiAmJiB0ZXN0IC1uICIkU0hMSUJfREFUQV9BRERSIiAmJiBDT01NT05QQUdFU0laRT0iIgorK3Rlc3QgLXogIiRDUkVBVEVfU0hMSUIkQ1JFQVRFX1BJRSIgJiYgdGVzdCAtbiAiJERBVEFfQUREUiIgJiYgQ09NTU9OUEFHRVNJWkU9IiIKKyt0ZXN0IC1uICIkUkVMUk9fTk9XIiAmJiB1bnNldCBTRVBBUkFURV9HT1RQTFQKKytpZiB0ZXN0IC1uICIkUkVMT0NBVElORyI7IHRoZW4KKysgIFJPX1JFR0lPTj0iJHtST19WTUFfUkVHSU9OKyA+fSR7Uk9fVk1BX1JFR0lPTn0ke1JPX0xNQV9SRUdJT04rIEFUPn0ke1JPX0xNQV9SRUdJT059IgorKyAgUldfUkVHSU9OPSIke1JXX1ZNQV9SRUdJT04rID59JHtSV19WTUFfUkVHSU9OfSR7UldfTE1BX1JFR0lPTisgQVQ+fSR7UldfTE1BX1JFR0lPTn0iCisrZWxzZQorKyAgUk9fUkVHSU9OPSIiCisrICBSV19SRUdJT049IiIKKytmaQorK0lOVEVSUD0iLmludGVycCAgICAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLmludGVycCkgfSR7Uk9fUkVHSU9OfSIKKytQTFQ9Ii5wbHQgICAgICAgICAgJHtSRUxPQ0FUSU5HLTB9IDogeyAqKC5wbHQpIH0iCisraWYgdGVzdCAteiAiJEdPVCI7IHRoZW4KKysgIGlmIHRlc3QgLXogIiRTRVBBUkFURV9HT1RQTFQiOyB0aGVuCisrICAgIEdPVD0iLmdvdCAgICAgICAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLmdvdC5wbHQpICooLmdvdCkgfSIKKysgIGVsc2UKKysgICAgR09UPSIuZ290ICAgICAgICAgICR7UkVMT0NBVElORy0wfSA6IHsgKiguZ290KSB9IgorKyAgICBHT1RQTFQ9IiR7UkVMT0NBVElORyske0RBVEFfU0VHTUVOVF9SRUxST19HT1RQTFRfRU5EfX0KKysgIC5nb3QucGx0ICAgICAgJHtSRUxPQ0FUSU5HLTB9IDogeyAqKC5nb3QucGx0KSB9IgorKyAgZmkKKytmaQorK0RBTElHTj0iLmRhbGlnbgk6IHsgLiA9IEFMSUdOKCR7REFUQV9TRUdNRU5UX0FMSUdOfSk7IFBST1ZJREUoX2RhdGFfbG1hID0gLik7IH0ke1JPX1JFR0lPTn0iCisrQkFMSUdOPSIuYmFsaWduCTogeyAuID0gQUxJR04oJHtCU1NfQUxJR05NRU5UfSk7IF9lZGF0YSA9IC47IH0ke1JXX1JFR0lPTn0iCisrRFlOQU1JQz0iLmR5bmFtaWMgICAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLmR5bmFtaWMpIH0iCisrUk9EQVRBPSIucm9kYXRhICAgICAgICR7UkVMT0NBVElORy0wfSA6IHsgKigucm9kYXRhJHtSRUxPQ0FUSU5HKyAucm9kYXRhLiogLmdudS5saW5rb25jZS5yLip9KSB9IgorK0RBVEFSRUxSTz0iLmRhdGEucmVsLnJvIDogeyAqKC5kYXRhLnJlbC5yby5sb2NhbCkgKiguZGF0YS5yZWwucm8qKSB9JHtSV19SRUdJT059IgorK1NUQUNLTk9URT0iL0RJU0NBUkQvIDogeyAqKC5ub3RlLkdOVS1zdGFjaykgfSIKKytpZiB0ZXN0IC16ICIke05PX1NNQUxMX0RBVEF9IjsgdGhlbgorKyAgU0JTUz0iLnNic3MgICAgICAgICAke1JFTE9DQVRJTkctMH0gOgorKyAgeworKyAgICAke1JFTE9DQVRJTkcrUFJPVklERSAoX19zYnNzX3N0YXJ0ID0gLik7fQorKyAgICAke1JFTE9DQVRJTkcrUFJPVklERSAoX19fc2Jzc19zdGFydCA9IC4pO30KKysgICAgJHtDUkVBVEVfU0hMSUIrKiguc2JzczIgLnNic3MyLiogLmdudS5saW5rb25jZS5zYjIuKil9CisrICAgICooLmR5bnNic3MpCisrICAgICooLnNic3Mke1JFTE9DQVRJTkcrIC5zYnNzLiogLmdudS5saW5rb25jZS5zYi4qfSkKKysgICAgKiguc2NvbW1vbikKKysgICAgJHtSRUxPQ0FUSU5HK1BST1ZJREUgKF9fc2Jzc19lbmQgPSAuKTt9CisrICAgICR7UkVMT0NBVElORytQUk9WSURFIChfX19zYnNzX2VuZCA9IC4pO30KKysgIH0ke1JXX1JFR0lPTn0iCisrICBTQlNTMj0iLnNic3MyICAgICAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLnNic3MyJHtSRUxPQ0FUSU5HKyAuc2JzczIuKiAuZ251LmxpbmtvbmNlLnNiMi4qfSkgfSR7UldfUkVHSU9OfSIKKysgIFNEQVRBPSIvKiBXZSB3YW50IHRoZSBzbWFsbCBkYXRhIHNlY3Rpb25zIHRvZ2V0aGVyLCBzbyBzaW5nbGUtaW5zdHJ1Y3Rpb24gb2Zmc2V0cworKyAgICAgY2FuIGFjY2VzcyB0aGVtIGFsbCwgYW5kIGluaXRpYWxpemVkIGRhdGEgYWxsIGJlZm9yZSB1bmluaXRpYWxpemVkLCBzbworKyAgICAgd2UgY2FuIHNob3J0ZW4gdGhlIG9uLWRpc2sgc2VnbWVudCBzaXplLiAgKi8KKysgIC5zZGF0YSAgICAgICAgJHtSRUxPQ0FUSU5HLTB9IDoKKysgIHsKKysgICAgJHtSRUxPQ0FUSU5HKyR7U0RBVEFfU1RBUlRfU1lNQk9MU319CisrICAgICR7Q1JFQVRFX1NITElCKyooLnNkYXRhMiAuc2RhdGEyLiogLmdudS5saW5rb25jZS5zMi4qKX0KKysgICAgKiguc2RhdGEke1JFTE9DQVRJTkcrIC5zZGF0YS4qIC5nbnUubGlua29uY2Uucy4qfSkKKysgIH0ke1JXX1JFR0lPTn0iCisrICBTREFUQTI9Ii5zZGF0YTIgICAgICAgJHtSRUxPQ0FUSU5HLTB9IDogeyAqKC5zZGF0YTIke1JFTE9DQVRJTkcrIC5zZGF0YTIuKiAuZ251LmxpbmtvbmNlLnMyLip9KSB9JHtSV19SRUdJT059IgorKyAgUkVMX1NEQVRBPSIucmVsLnNkYXRhICAgICR7UkVMT0NBVElORy0wfSA6IHsgKigucmVsLnNkYXRhJHtSRUxPQ0FUSU5HKyAucmVsLnNkYXRhLiogLnJlbC5nbnUubGlua29uY2Uucy4qfSkgfSR7Uk9fUkVHSU9OfQorKyAgLnJlbGEuc2RhdGEgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLnJlbGEuc2RhdGEke1JFTE9DQVRJTkcrIC5yZWxhLnNkYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnMuKn0pIH0iCisrICBSRUxfU0JTUz0iLnJlbC5zYnNzICAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLnJlbC5zYnNzJHtSRUxPQ0FUSU5HKyAucmVsLnNic3MuKiAucmVsLmdudS5saW5rb25jZS5zYi4qfSkgfSR7Uk9fUkVHSU9OfQorKyAgLnJlbGEuc2JzcyAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLnJlbGEuc2JzcyR7UkVMT0NBVElORysgLnJlbGEuc2Jzcy4qIC5yZWxhLmdudS5saW5rb25jZS5zYi4qfSkgfSR7Uk9fUkVHSU9OfSIKKysgIFJFTF9TREFUQTI9Ii5yZWwuc2RhdGEyICAgJHtSRUxPQ0FUSU5HLTB9IDogeyAqKC5yZWwuc2RhdGEyJHtSRUxPQ0FUSU5HKyAucmVsLnNkYXRhMi4qIC5yZWwuZ251LmxpbmtvbmNlLnMyLip9KSB9JHtST19SRUdJT059CisrICAucmVsYS5zZGF0YTIgICR7UkVMT0NBVElORy0wfSA6IHsgKigucmVsYS5zZGF0YTIke1JFTE9DQVRJTkcrIC5yZWxhLnNkYXRhMi4qIC5yZWxhLmdudS5saW5rb25jZS5zMi4qfSkgfSR7Uk9fUkVHSU9OfSIKKysgIFJFTF9TQlNTMj0iLnJlbC5zYnNzMiAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLnJlbC5zYnNzMiR7UkVMT0NBVElORysgLnJlbC5zYnNzMi4qIC5yZWwuZ251LmxpbmtvbmNlLnNiMi4qfSkgfSR7Uk9fUkVHSU9OfQorKyAgLnJlbGEuc2JzczIgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLnJlbGEuc2JzczIke1JFTE9DQVRJTkcrIC5yZWxhLnNic3MyLiogLnJlbGEuZ251LmxpbmtvbmNlLnNiMi4qfSkgfSR7Uk9fUkVHSU9OfSIKKytlbHNlCisrICBOT19TTUFMTF9EQVRBPSIgIgorK2ZpCisrdGVzdCAtbiAiJFNFUEFSQVRFX0dPVFBMVCIgJiYgU0VQQVJBVEVfR09UUExUPSIgIgorK0NUT1I9Ii5jdG9ycyAgICAgICAgJHtDT05TVFJVQ1RJTkctMH0gOgorKyAgeworKyAgICAke0NPTlNUUlVDVElORyske0NUT1JfU1RBUlR9fQorKyAgICAvKiBnY2MgdXNlcyBjcnRiZWdpbi5vIHRvIGZpbmQgdGhlIHN0YXJ0IG9mCisrICAgICAgIHRoZSBjb25zdHJ1Y3RvcnMsIHNvIHdlIG1ha2Ugc3VyZSBpdCBpcworKyAgICAgICBmaXJzdC4gIEJlY2F1c2UgdGhpcyBpcyBhIHdpbGRjYXJkLCBpdAorKyAgICAgICBkb2Vzbid0IG1hdHRlciBpZiB0aGUgdXNlciBkb2VzIG5vdAorKyAgICAgICBhY3R1YWxseSBsaW5rIGFnYWluc3QgY3J0YmVnaW4ubzsgdGhlCisrICAgICAgIGxpbmtlciB3b24ndCBsb29rIGZvciBhIGZpbGUgdG8gbWF0Y2ggYQorKyAgICAgICB3aWxkY2FyZC4gIFRoZSB3aWxkY2FyZCBhbHNvIG1lYW5zIHRoYXQgaXQKKysgICAgICAgZG9lc24ndCBtYXR0ZXIgd2hpY2ggZGlyZWN0b3J5IGNydGJlZ2luLm8KKysgICAgICAgaXMgaW4uICAqLworKworKyAgICBLRUVQICgqY3J0YmVnaW4qLm8oLmN0b3JzKSkKKysKKysgICAgLyogV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSAuY3RvciBzZWN0aW9uIGZyb20KKysgICAgICAgZnJvbSB0aGUgY3J0ZW5kLm8gZmlsZSB1bnRpbCBhZnRlciB0aGUgc29ydGVkIGN0b3JzLgorKyAgICAgICBUaGUgLmN0b3Igc2VjdGlvbiBmcm9tIHRoZSBjcnRlbmQgZmlsZSBjb250YWlucyB0aGUKKysgICAgICAgZW5kIG9mIGN0b3JzIG1hcmtlciBhbmQgaXQgbXVzdCBiZSBsYXN0ICovCisrCisrICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kKi5vICRPVEhFUl9FWENMVURFX0ZJTEVTKSAuY3RvcnMpKQorKyAgICBLRUVQICgqKFNPUlQoLmN0b3JzLiopKSkKKysgICAgS0VFUCAoKiguY3RvcnMpKQorKyAgICAke0NPTlNUUlVDVElORyske0NUT1JfRU5EfX0KKysgIH0iCisrRFRPUj0iLmR0b3JzICAgICAgICAke0NPTlNUUlVDVElORy0wfSA6CisrICB7CisrICAgICR7Q09OU1RSVUNUSU5HKyR7RFRPUl9TVEFSVH19CisrICAgIEtFRVAgKCpjcnRiZWdpbioubyguZHRvcnMpKQorKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZCoubyAkT1RIRVJfRVhDTFVERV9GSUxFUykgLmR0b3JzKSkKKysgICAgS0VFUCAoKihTT1JUKC5kdG9ycy4qKSkpCisrICAgIEtFRVAgKCooLmR0b3JzKSkKKysgICAgJHtDT05TVFJVQ1RJTkcrJHtEVE9SX0VORH19CisrICB9IgorK1NUQUNLPSIuc3RhY2sgICAgICAgICR7UkVMT0NBVElORy0wfSR7UkVMT0NBVElORyske1NUQUNLX0FERFJ9fSA6CisrICB7CisrICAgICR7UkVMT0NBVElORytfc3RhY2sgPSAuO30KKysgICAgKiguc3RhY2spCisrICAgICR7UkVMT0NBVElORyske1NUQUNLX1NJWkUrLiA9ICR7U1RBQ0tfU0laRX07fX0KKysgICAgJHtSRUxPQ0FUSU5HK19lc3RhY2sgPSAuO30KKysgIH0ke1JXX1JFR0lPTn0iCisrCisrIyBpZiB0aGlzIGlzIGZvciBhbiBlbWJlZGRlZCBzeXN0ZW0sIGRvbid0IGFkZCBTSVpFT0ZfSEVBREVSUy4KKytpZiBbIC16ICIkRU1CRURERUQiIF07IHRoZW4KKysgICB0ZXN0IC16ICIke1RFWFRfQkFTRV9BRERSRVNTfSIgJiYgVEVYVF9CQVNFX0FERFJFU1M9IiR7VEVYVF9TVEFSVF9BRERSfSArIFNJWkVPRl9IRUFERVJTIgorK2Vsc2UKKysgICB0ZXN0IC16ICIke1RFWFRfQkFTRV9BRERSRVNTfSIgJiYgVEVYVF9CQVNFX0FERFJFU1M9IiR7VEVYVF9TVEFSVF9BRERSfSIKKytmaQorKworK2NhdCA8PEVPRgorK09VVFBVVF9GT1JNQVQoIiR7T1VUUFVUX0ZPUk1BVH0iLCAiJHtCSUdfT1VUUFVUX0ZPUk1BVH0iLAorKwkgICAgICAiJHtMSVRUTEVfT1VUUFVUX0ZPUk1BVH0iKQorK09VVFBVVF9BUkNIKCR7T1VUUFVUX0FSQ0h9KQorK0VOVFJZKCR7RU5UUll9KQorKworKyR7UkVMT0NBVElORyske0xJQl9TRUFSQ0hfRElSU319CisrJHtSRUxPQ0FUSU5HKy8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/CisrICAgX19EWU5BTUlDID0gMDsgJHtTVEFDS1pFUk8rJHtTVEFDS1pFUk99fSAke1NITElCX1BBVEgrJHtTSExJQl9QQVRIfX0gICovfQorKyR7UkVMT0NBVElORyske0VYRUNVVEFCTEVfU1lNQk9MU319CisrJHtSRUxPQ0FUSU5HKyR7SU5QVVRfRklMRVN9fQorKyR7UkVMT0NBVElORy0gLyogRm9yIHNvbWUgcmVhc29uLCB0aGUgU29sYXJpcyBsaW5rZXIgbWFrZXMgYmFkIGV4ZWN1dGFibGVzCisrICBpZiBnbGQgLXIgaXMgdXNlZCBhbmQgdGhlIGludGVybWVkaWF0ZSBmaWxlIGhhcyBzZWN0aW9ucyBzdGFydGluZworKyAgYXQgbm9uLXplcm8gYWRkcmVzc2VzLiAgQ291bGQgYmUgYSBTb2xhcmlzIGxkIGJ1ZywgY291bGQgYmUgYSBHTlUgbGQKKysgIGJ1Zy4gIEJ1dCBmb3Igbm93IGFzc2lnbmluZyB0aGUgemVybyB2bWFzIHdvcmtzLiAgKi99CisrCisrJHtSRUxPQ0FUSU5HKyR7TUVNT1JZfX0KKysKKytTRUNUSU9OUworK3sKKysgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworKyAgJHtDUkVBVEVfU0hMSUItJHtDUkVBVEVfUElFLSR7UkVMT0NBVElORytQUk9WSURFIChfX2V4ZWN1dGFibGVfc3RhcnQgPSAke1RFWFRfU1RBUlRfQUREUn0pOyAuID0gJHtURVhUX0JBU0VfQUREUkVTU307fX19CisrICAke0NSRUFURV9TSExJQiske1JFTE9DQVRJTkcrLiA9ICR7U0hMSUJfVEVYVF9TVEFSVF9BRERSOi0wfSArIFNJWkVPRl9IRUFERVJTO319CisrICAke0NSRUFURV9QSUUrJHtSRUxPQ0FUSU5HKy4gPSAke1NITElCX1RFWFRfU1RBUlRfQUREUjotMH0gKyBTSVpFT0ZfSEVBREVSUzt9fQorKyAgJHtDUkVBVEVfU0hMSUItJHtJTlRFUlB9fQorKyAgJHtJTklUSUFMX1JFQURPTkxZX1NFQ1RJT05TfQorKyAgJHtURVhUX0RZTkFNSUMrJHtEWU5BTUlDfSR7Uk9fUkVHSU9OfX0KKysgIC5oYXNoICAgICAgICAgJHtSRUxPQ0FUSU5HLTB9IDogeyAqKC5oYXNoKSB9JHtST19SRUdJT059CisrICAuZHluc3ltICAgICAgICR7UkVMT0NBVElORy0wfSA6IHsgKiguZHluc3ltKSB9JHtST19SRUdJT059CisrICAuZHluc3RyICAgICAgICR7UkVMT0NBVElORy0wfSA6IHsgKiguZHluc3RyKSB9JHtST19SRUdJT059CisrICAuZ251LnZlcnNpb24gICR7UkVMT0NBVElORy0wfSA6IHsgKiguZ251LnZlcnNpb24pIH0ke1JPX1JFR0lPTn0KKysgIC5nbnUudmVyc2lvbl9kICR7UkVMT0NBVElORy0wfTogeyAqKC5nbnUudmVyc2lvbl9kKSB9JHtST19SRUdJT059CisrICAuZ251LnZlcnNpb25fciAke1JFTE9DQVRJTkctMH06IHsgKiguZ251LnZlcnNpb25fcikgfSR7Uk9fUkVHSU9OfQorKworK0VPRgorK2lmIFsgIngkQ09NQlJFTE9DIiA9IHggXTsgdGhlbgorKyAgQ09NQlJFTE9DQ0FUPWNhdAorK2Vsc2UKKysgIENPTUJSRUxPQ0NBVD0iY2F0ID4gJENPTUJSRUxPQyIKKytmaQorK2V2YWwgJENPTUJSRUxPQ0NBVCA8PEVPRgorKyAgLnJlbC5pbml0ICAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLnJlbC5pbml0KSB9JHtST19SRUdJT059CisrICAucmVsYS5pbml0ICAgICR7UkVMT0NBVElORy0wfSA6IHsgKigucmVsYS5pbml0KSB9JHtST19SRUdJT059CisrICAucmVsLnRleHQgICAgICR7UkVMT0NBVElORy0wfSA6IHsgKigucmVsLnRleHQke1JFTE9DQVRJTkcrIC5yZWwudGV4dC4qIC5yZWwuZ251LmxpbmtvbmNlLnQuKn0pIH0ke1JPX1JFR0lPTn0KKysgIC5yZWxhLnRleHQgICAgJHtSRUxPQ0FUSU5HLTB9IDogeyAqKC5yZWxhLnRleHQke1JFTE9DQVRJTkcrIC5yZWxhLnRleHQuKiAucmVsYS5nbnUubGlua29uY2UudC4qfSkgfSR7Uk9fUkVHSU9OfQorKyAgLnJlbC5maW5pICAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLnJlbC5maW5pKSB9JHtST19SRUdJT059CisrICAucmVsYS5maW5pICAgICR7UkVMT0NBVElORy0wfSA6IHsgKigucmVsYS5maW5pKSB9JHtST19SRUdJT059CisrICAucmVsLnJvZGF0YSAgICR7UkVMT0NBVElORy0wfSA6IHsgKigucmVsLnJvZGF0YSR7UkVMT0NBVElORysgLnJlbC5yb2RhdGEuKiAucmVsLmdudS5saW5rb25jZS5yLip9KSB9JHtST19SRUdJT059CisrICAucmVsYS5yb2RhdGEgICR7UkVMT0NBVElORy0wfSA6IHsgKigucmVsYS5yb2RhdGEke1JFTE9DQVRJTkcrIC5yZWxhLnJvZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5yLip9KSB9JHtST19SRUdJT059CisrICAke09USEVSX1JFQURPTkxZX1JFTE9DX1NFQ1RJT05TfQorKyAgLnJlbC5kYXRhLnJlbC5ybyAke1JFTE9DQVRJTkctMH0gOiB7ICooLnJlbC5kYXRhLnJlbC5ybyR7UkVMT0NBVElORysqfSkgfSR7Uk9fUkVHSU9OfQorKyAgLnJlbGEuZGF0YS5yZWwucm8gJHtSRUxPQ0FUSU5HLTB9IDogeyAqKC5yZWwuZGF0YS5yZWwucm8ke1JFTE9DQVRJTkcrKn0pIH0ke1JPX1JFR0lPTn0KKysgIC5yZWwuZGF0YSAgICAgJHtSRUxPQ0FUSU5HLTB9IDogeyAqKC5yZWwuZGF0YSR7UkVMT0NBVElORysgLnJlbC5kYXRhLiogLnJlbC5nbnUubGlua29uY2UuZC4qfSkgfSR7Uk9fUkVHSU9OfQorKyAgLnJlbGEuZGF0YSAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLnJlbGEuZGF0YSR7UkVMT0NBVElORysgLnJlbGEuZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5kLip9KSB9JHtST19SRUdJT059CisrICAucmVsLnRkYXRhCSR7UkVMT0NBVElORy0wfSA6IHsgKigucmVsLnRkYXRhJHtSRUxPQ0FUSU5HKyAucmVsLnRkYXRhLiogLnJlbC5nbnUubGlua29uY2UudGQuKn0pIH0ke1JPX1JFR0lPTn0KKysgIC5yZWxhLnRkYXRhCSR7UkVMT0NBVElORy0wfSA6IHsgKigucmVsYS50ZGF0YSR7UkVMT0NBVElORysgLnJlbGEudGRhdGEuKiAucmVsYS5nbnUubGlua29uY2UudGQuKn0pIH0ke1JPX1JFR0lPTn0KKysgIC5yZWwudGJzcwkke1JFTE9DQVRJTkctMH0gOiB7ICooLnJlbC50YnNzJHtSRUxPQ0FUSU5HKyAucmVsLnRic3MuKiAucmVsLmdudS5saW5rb25jZS50Yi4qfSkgfSR7Uk9fUkVHSU9OfQorKyAgLnJlbGEudGJzcwkke1JFTE9DQVRJTkctMH0gOiB7ICooLnJlbGEudGJzcyR7UkVMT0NBVElORysgLnJlbGEudGJzcy4qIC5yZWxhLmdudS5saW5rb25jZS50Yi4qfSkgfSR7Uk9fUkVHSU9OfQorKyAgLnJlbC5jdG9ycyAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLnJlbC5jdG9ycykgfSR7Uk9fUkVHSU9OfQorKyAgLnJlbGEuY3RvcnMgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLnJlbGEuY3RvcnMpIH0ke1JPX1JFR0lPTn0KKysgIC5yZWwuZHRvcnMgICAgJHtSRUxPQ0FUSU5HLTB9IDogeyAqKC5yZWwuZHRvcnMpIH0ke1JPX1JFR0lPTn0KKysgIC5yZWxhLmR0b3JzICAgJHtSRUxPQ0FUSU5HLTB9IDogeyAqKC5yZWxhLmR0b3JzKSB9JHtST19SRUdJT059CisrICAucmVsLmdvdCAgICAgICR7UkVMT0NBVElORy0wfSA6IHsgKigucmVsLmdvdCkgfSR7Uk9fUkVHSU9OfQorKyAgLnJlbGEuZ290ICAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLnJlbGEuZ290KSB9JHtST19SRUdJT059CisrICAke09USEVSX0dPVF9SRUxPQ19TRUNUSU9OU30KKysgICR7UkVMX1NEQVRBfQorKyAgJHtSRUxfU0JTU30KKysgICR7UkVMX1NEQVRBMn0KKysgICR7UkVMX1NCU1MyfQorKyAgLnJlbC5ic3MgICAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLnJlbC5ic3Mke1JFTE9DQVRJTkcrIC5yZWwuYnNzLiogLnJlbC5nbnUubGlua29uY2UuYi4qfSkgfSR7Uk9fUkVHSU9OfQorKyAgLnJlbGEuYnNzICAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLnJlbGEuYnNzJHtSRUxPQ0FUSU5HKyAucmVsYS5ic3MuKiAucmVsYS5nbnUubGlua29uY2UuYi4qfSkgfSR7Uk9fUkVHSU9OfQorK0VPRgorK2lmIFsgLW4gIiRDT01CUkVMT0MiIF07IHRoZW4KKytjYXQgPDxFT0YKKysgIC5yZWwuZHluICAgICAgJHtSRUxPQ0FUSU5HLTB9IDoKKysgICAgeworK0VPRgorK3NlZCAtZSAnL15bIAldKlt7fV1bIAldKiQvZDsvOlsgCV0qJC9kOy9cLnJlbGFcLi9kO3MvXi4qOiB7ICpcKC4qXCl9JC8gICAgICBcMS8nICRDT01CUkVMT0MKKytjYXQgPDxFT0YKKysgICAgfSR7Uk9fUkVHSU9OfQorKyAgLnJlbGEuZHluICAgICAke1JFTE9DQVRJTkctMH0gOgorKyAgICB7CisrRU9GCisrc2VkIC1lICcvXlsgCV0qW3t9XVsgCV0qJC9kOy86WyAJXSokL2Q7L1wucmVsXC4vZDtzL14uKjogeyAqXCguKlwpfS8gICAgICBcMS8nICRDT01CUkVMT0MKKytjYXQgPDxFT0YKKysgICAgfSR7Uk9fUkVHSU9OfQorK0VPRgorK2ZpCisrY2F0IDw8RU9GCisrICAucmVsLnBsdCAgICAgICR7UkVMT0NBVElORy0wfSA6IHsgKigucmVsLnBsdCkgfSR7Uk9fUkVHSU9OfQorKyAgLnJlbGEucGx0ICAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLnJlbGEucGx0KSB9JHtST19SRUdJT059CisrICAke09USEVSX1BMVF9SRUxPQ19TRUNUSU9OU30KKysKKysgIC5pbml0ICAgICAgICAgJHtSRUxPQ0FUSU5HLTB9IDoKKysgIHsKKysgICAgJHtSRUxPQ0FUSU5HKyR7SU5JVF9TVEFSVH19CisrICAgIEtFRVAgKCooLmluaXQpKQorKyAgICAke1JFTE9DQVRJTkcrJHtJTklUX0VORH19CisrICB9JHtST19SRUdJT059ID0ke05PUC0wfQorKworKyAgJHtEQVRBX1BMVC0ke0JTU19QTFQtJHtQTFR9JHtST19SRUdJT059fX0KKysgIC50ZXh0ICAgICAgICAgJHtSRUxPQ0FUSU5HLTB9IDoKKysgIHsKKysgICAgJHtSRUxPQ0FUSU5HKyR7VEVYVF9TVEFSVF9TWU1CT0xTfX0KKysgICAgKigudGV4dCAuc3R1YiR7UkVMT0NBVElORysgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKn0pCisrICAgIEtFRVAgKCooLnRleHQuKnBlcnNvbmFsaXR5KikpCisrICAgIC8qIC5nbnUud2FybmluZyBzZWN0aW9ucyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgYnkgZWxmMzIuZW0uICAqLworKyAgICAqKC5nbnUud2FybmluZykKKysgICAgJHtSRUxPQ0FUSU5HKyR7T1RIRVJfVEVYVF9TRUNUSU9OU319CisrICB9JHtST19SRUdJT059ID0ke05PUC0wfQorKyAgLmZpbmkgICAgICAgICAke1JFTE9DQVRJTkctMH0gOgorKyAgeworKyAgICAke1JFTE9DQVRJTkcrJHtGSU5JX1NUQVJUfX0KKysgICAgS0VFUCAoKiguZmluaSkpCisrICAgICR7UkVMT0NBVElORyske0ZJTklfRU5EfX0KKysgIH0ke1JPX1JFR0lPTn0gPSR7Tk9QLTB9CisrICAke1JFTE9DQVRJTkcrUFJPVklERSAoX19ldGV4dCA9IC4pO30KKysgICR7UkVMT0NBVElORytQUk9WSURFIChfZXRleHQgPSAuKTt9CisrICAke1JFTE9DQVRJTkcrUFJPVklERSAoZXRleHQgPSAuKTt9CisrICAke1dSSVRBQkxFX1JPREFUQS0ke1JPREFUQX0ke1JPX1JFR0lPTn19CisrICAucm9kYXRhMSAgICAgICR7UkVMT0NBVElORy0wfSA6IHsgKigucm9kYXRhMSkgfSR7Uk9fUkVHSU9OfQorKyAgJHtDUkVBVEVfU0hMSUItJHtTREFUQTJ9fQorKyAgJHtDUkVBVEVfU0hMSUItJHtTQlNTMn19CisrICAke09USEVSX1JFQURPTkxZX1NFQ1RJT05TfQorKyAgLmVoX2ZyYW1lX2hkciA6IHsgKiguZWhfZnJhbWVfaGRyKSB9JHtST19SRUdJT059CisrICAuZWhfZnJhbWUgICAgICR7UkVMT0NBVElORy0wfSA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5laF9mcmFtZSkpIH0ke1JPX1JFR0lPTn0KKysgIC5nY2NfZXhjZXB0X3RhYmxlICR7UkVMT0NBVElORy0wfSA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5nY2NfZXhjZXB0X3RhYmxlKSkgKiguZ2NjX2V4Y2VwdF90YWJsZS4qKSB9JHtST19SRUdJT059CisrCisrICAke1JFTE9DQVRJTkcrJHtEQUxJR059fQorKyAgJHtSRUxPQ0FUSU5HK1BST1ZJREUgKF9kYXRhID0gT1JJR0lOKCR7UldfVk1BX1JFR0lPTn0pKTt9CisrICAuID0gT1JJR0lOKCR7UldfVk1BX1JFR0lPTn0pOworKyAgLyogRXhjZXB0aW9uIGhhbmRsaW5nICAqLworKyAgLmVoX2ZyYW1lICAgICAke1JFTE9DQVRJTkctMH0gOiBPTkxZX0lGX1JXIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9JHtSV19SRUdJT059CisrICAuZ2NjX2V4Y2VwdF90YWJsZSAke1JFTE9DQVRJTkctMH0gOiBPTkxZX0lGX1JXIHsgS0VFUCAoKiguZ2NjX2V4Y2VwdF90YWJsZSkpICooLmdjY19leGNlcHRfdGFibGUuKikgfSR7UldfUkVHSU9OfQorKworKyAgLyogVGhyZWFkIExvY2FsIFN0b3JhZ2Ugc2VjdGlvbnMgICovCisrICAudGRhdGEJJHtSRUxPQ0FUSU5HLTB9IDogeyAqKC50ZGF0YSR7UkVMT0NBVElORysgLnRkYXRhLiogLmdudS5saW5rb25jZS50ZC4qfSkgfSR7UldfUkVHSU9OfQorKyAgLnRic3MJCSR7UkVMT0NBVElORy0wfSA6IHsgKigudGJzcyR7UkVMT0NBVElORysgLnRic3MuKiAuZ251LmxpbmtvbmNlLnRiLip9KSR7UkVMT0NBVElORysgKigudGNvbW1vbil9IH0ke1JXX1JFR0lPTn0KKysKKysgIC8qIEVuc3VyZSB0aGUgX19wcmVpbml0X2FycmF5X3N0YXJ0IGxhYmVsIGlzIHByb3Blcmx5IGFsaWduZWQuICBXZQorKyAgICAgY291bGQgaW5zdGVhZCBtb3ZlIHRoZSBsYWJlbCBkZWZpbml0aW9uIGluc2lkZSB0aGUgc2VjdGlvbiwgYnV0CisrICAgICB0aGUgbGlua2VyIHdvdWxkIHRoZW4gY3JlYXRlIHRoZSBzZWN0aW9uIGV2ZW4gaWYgaXQgdHVybnMgb3V0IHRvCisrICAgICBiZSBlbXB0eSwgd2hpY2ggaXNuJ3QgcHJldHR5LiAgKi8KKysgICR7UkVMT0NBVElORyske0NSRUFURV9TSExJQi1QUk9WSURFIChfX3ByZWluaXRfYXJyYXlfc3RhcnQgPSBBTElHTigke0FMSUdOTUVOVH0pKTt9fQorKyAgLnByZWluaXRfYXJyYXkgICAke1JFTE9DQVRJTkctMH0gOiB7IEtFRVAgKCooLnByZWluaXRfYXJyYXkpKSB9JHtSV19SRUdJT059CisrICAke1JFTE9DQVRJTkcrJHtDUkVBVEVfU0hMSUItUFJPVklERSAoX19wcmVpbml0X2FycmF5X2VuZCA9IC4pO319CisrCisrICAke1JFTE9DQVRJTkcrJHtDUkVBVEVfU0hMSUItUFJPVklERSAoX19pbml0X2FycmF5X3N0YXJ0ID0gLik7fX0KKysgIC5pbml0X2FycmF5ICAgJHtSRUxPQ0FUSU5HLTB9IDogeyBLRUVQICgqKC5pbml0X2FycmF5KSkgfSR7UldfUkVHSU9OfQorKyAgJHtSRUxPQ0FUSU5HKyR7Q1JFQVRFX1NITElCLVBST1ZJREUgKF9faW5pdF9hcnJheV9lbmQgPSAuKTt9fQorKworKyAgJHtSRUxPQ0FUSU5HKyR7Q1JFQVRFX1NITElCLVBST1ZJREUgKF9fZmluaV9hcnJheV9zdGFydCA9IC4pO319CisrICAuZmluaV9hcnJheSAgICR7UkVMT0NBVElORy0wfSA6IHsgS0VFUCAoKiguZmluaV9hcnJheSkpIH0ke1JXX1JFR0lPTn0KKysgICR7UkVMT0NBVElORyske0NSRUFURV9TSExJQi1QUk9WSURFIChfX2ZpbmlfYXJyYXlfZW5kID0gLik7fX0KKysKKysgICR7U01BTExfREFUQV9DVE9SLSR7UkVMT0NBVElORyske0NUT1J9JHtSV19SRUdJT059fX0KKysgICR7U01BTExfREFUQV9EVE9SLSR7UkVMT0NBVElORyske0RUT1J9JHtSV19SRUdJT059fX0KKysgIC5qY3IgICAgICAgICAgJHtSRUxPQ0FUSU5HLTB9IDogeyBLRUVQICgqKC5qY3IpKSB9JHtSV19SRUdJT059CisrCisrICAke1JFTE9DQVRJTkcrJHtEQVRBUkVMUk99fQorKyAgJHtPVEhFUl9SRUxST19TRUNUSU9OU30KKysgICR7VEVYVF9EWU5BTUlDLSR7RFlOQU1JQ30ke1JXX1JFR0lPTn19CisrICAke05PX1NNQUxMX0RBVEErJHtSRUxST19OT1crJHtHT1R9JHtSV19SRUdJT059fX0KKysgICR7Tk9fU01BTExfREFUQSske1JFTFJPX05PVy0ke1NFUEFSQVRFX0dPVFBMVCske0dPVH0ke1JXX1JFR0lPTn19fX0KKysgICR7Tk9fU01BTExfREFUQSske1JFTFJPX05PVy0ke1NFUEFSQVRFX0dPVFBMVCske0dPVFBMVH0ke1JXX1JFR0lPTn19fX0KKysgICR7UkVMT0NBVElORyske0RBVEFfU0VHTUVOVF9SRUxST19FTkR9fQorKyAgJHtOT19TTUFMTF9EQVRBKyR7UkVMUk9fTk9XLSR7U0VQQVJBVEVfR09UUExULSR7R09UfSR7UldfUkVHSU9OfX19fQorKworKyAgJHtEQVRBX1BMVCske1BMVF9CRUZPUkVfR09ULSR7UExUfSR7UldfUkVHSU9OfX19CisrCisrICAuZGF0YSAgICAgICAgICR7UkVMT0NBVElORy0wfSA6CisrICB7CisrICAgICR7UkVMT0NBVElORyske0RBVEFfU1RBUlRfU1lNQk9MU319CisrICAgICooLmRhdGEke1JFTE9DQVRJTkcrIC5kYXRhLiogLmdudS5saW5rb25jZS5kLip9KQorKyAgICBLRUVQICgqKC5nbnUubGlua29uY2UuZC4qcGVyc29uYWxpdHkqKSkKKysgICAgJHtDT05TVFJVQ1RJTkcrU09SVChDT05TVFJVQ1RPUlMpfQorKyAgfSR7UldfUkVHSU9OfQorKyAgLmRhdGExICAgICAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLmRhdGExKSB9JHtSV19SRUdJT059CisrICAke1dSSVRBQkxFX1JPREFUQSske1JPREFUQX0ke1JXX1JFR0lPTn19CisrICAke09USEVSX1JFQURXUklURV9TRUNUSU9OU30KKysgICR7U01BTExfREFUQV9DVE9SKyR7UkVMT0NBVElORyske0NUT1J9JHtSV19SRUdJT059fX0KKysgICR7U01BTExfREFUQV9EVE9SKyR7UkVMT0NBVElORyske0RUT1J9JHtSV19SRUdJT059fX0KKysgICR7REFUQV9QTFQrJHtQTFRfQkVGT1JFX0dPVCske1BMVH0ke1JXX1JFR0lPTn19fQorKyAgJHtSRUxPQ0FUSU5HKyR7T1RIRVJfR09UX1NZTUJPTFN9fQorKyAgJHtOT19TTUFMTF9EQVRBLSR7R09UfSR7UldfUkVHSU9OfX0KKysgICR7T1RIRVJfR09UX1NFQ1RJT05TfQorKyAgJHtTREFUQX0KKysgICR7T1RIRVJfU0RBVEFfU0VDVElPTlN9CisrICAke1JFTE9DQVRJTkcrJHtCQUxJR059fQorKyAgJHtSRUxPQ0FUSU5HK19lZGF0YSA9IC47fQorKyAgJHtSRUxPQ0FUSU5HK1BST1ZJREUgKGVkYXRhID0gLik7fQorKyAgJHtSRUxPQ0FUSU5HK19fYnNzX3N0YXJ0ID0gLjt9CisrICAke1JFTE9DQVRJTkcrJHtPVEhFUl9CU1NfU1lNQk9MU319CisrICAke1NCU1N9CisrICAke0JTU19QTFQrJHtQTFR9JHtSV19SRUdJT059fQorKyAgLmJzcyAgICAgICAgICAke1JFTE9DQVRJTkctMH0gOgorKyAgeworKyAgICooLmR5bmJzcykKKysgICAqKC5ic3Mke1JFTE9DQVRJTkcrIC5ic3MuKiAuZ251LmxpbmtvbmNlLmIuKn0pCisrICAgKihDT01NT04pCisrICAgLyogQWxpZ24gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgLmJzcyBzZWN0aW9uIG9jY3VwaWVzIHNwYWNlIHVwIHRvCisrICAgICAgX2VuZC4gIEFsaWduIGFmdGVyIC5ic3MgdG8gZW5zdXJlIGNvcnJlY3QgYWxpZ25tZW50IGV2ZW4gaWYgdGhlCisrICAgICAgLmJzcyBzZWN0aW9uIGRpc2FwcGVhcnMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gaW5wdXQgc2VjdGlvbnMuICAqLworKyAgICR7UkVMT0NBVElORysuID0gQUxJR04oJHtCU1NfQUxJR05NRU5UfSk7fQorKyAgfSR7UldfUkVHSU9OfQorKyAgJHtPVEhFUl9CU1NfU0VDVElPTlN9CisrICAke1JFTE9DQVRJTkcrLiA9IEFMSUdOKCR7QlNTX0FMSUdOTUVOVH0pO30KKysgICR7UkVMT0NBVElORytfZW5kID0gLjt9CisrICAke1JFTE9DQVRJTkcrJHtPVEhFUl9CU1NfRU5EX1NZTUJPTFN9fQorKyAgJHtSRUxPQ0FUSU5HK1BST1ZJREUgKGVuZCA9IC4pO30KKysgICR7UkVMT0NBVElORyske0RBVEFfU0VHTUVOVF9FTkR9fQorKworKyAgLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KKysgIC5zdGFiICAgICAgICAgIDAgOiB7ICooLnN0YWIpIH0KKysgIC5zdGFic3RyICAgICAgIDAgOiB7ICooLnN0YWJzdHIpIH0KKysgIC5zdGFiLmV4Y2wgICAgIDAgOiB7ICooLnN0YWIuZXhjbCkgfQorKyAgLnN0YWIuZXhjbHN0ciAgMCA6IHsgKiguc3RhYi5leGNsc3RyKSB9CisrICAuc3RhYi5pbmRleCAgICAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisrICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9CisrCisrICAuY29tbWVudCAgICAgICAwIDogeyAqKC5jb21tZW50KSB9CisrCisrICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KKysgICAgIFN5bWJvbHMgaW4gdGhlIERXQVJGIGRlYnVnZ2luZyBzZWN0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZworKyAgICAgb2YgdGhlIHNlY3Rpb24gc28gd2UgYmVnaW4gdGhlbSBhdCAwLiAgKi8KKysKKysgIC8qIERXQVJGIDEgKi8KKysgIC5kZWJ1ZyAgICAgICAgICAwIDogeyAqKC5kZWJ1ZykgfQorKyAgLmxpbmUgICAgICAgICAgIDAgOiB7ICooLmxpbmUpIH0KKysKKysgIC8qIEdOVSBEV0FSRiAxIGV4dGVuc2lvbnMgKi8KKysgIC5kZWJ1Z19zcmNpbmZvICAwIDogeyAqKC5kZWJ1Z19zcmNpbmZvKSB9CisrICAuZGVidWdfc2ZuYW1lcyAgMCA6IHsgKiguZGVidWdfc2ZuYW1lcykgfQorKworKyAgLyogRFdBUkYgMS4xIGFuZCBEV0FSRiAyICovCisrICAuZGVidWdfYXJhbmdlcyAgMCA6IHsgKiguZGVidWdfYXJhbmdlcykgfQorKyAgLmRlYnVnX3B1Ym5hbWVzIDAgOiB7ICooLmRlYnVnX3B1Ym5hbWVzKSB9CisrCisrICAvKiBEV0FSRiAyICovCisrICAuZGVidWdfaW5mbyAgICAgMCA6IHsgKiguZGVidWdfaW5mbyAuZ251LmxpbmtvbmNlLndpLiopIH0KKysgIC5kZWJ1Z19hYmJyZXYgICAwIDogeyAqKC5kZWJ1Z19hYmJyZXYpIH0KKysgIC5kZWJ1Z19saW5lICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisrICAuZGVidWdfZnJhbWUgICAgMCA6IHsgKiguZGVidWdfZnJhbWUpIH0KKysgIC5kZWJ1Z19zdHIgICAgICAwIDogeyAqKC5kZWJ1Z19zdHIpIH0KKysgIC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKysgIC5kZWJ1Z19tYWNpbmZvICAwIDogeyAqKC5kZWJ1Z19tYWNpbmZvKSB9CisrCisrICAvKiBTR0kvTUlQUyBEV0FSRiAyIGV4dGVuc2lvbnMgKi8KKysgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9CisrICAuZGVidWdfZnVuY25hbWVzIDAgOiB7ICooLmRlYnVnX2Z1bmNuYW1lcykgfQorKyAgLmRlYnVnX3R5cGVuYW1lcyAwIDogeyAqKC5kZWJ1Z190eXBlbmFtZXMpIH0KKysgIC5kZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKysKKysgICR7U1RBQ0tfQUREUiske1NUQUNLfX0KKysgICR7T1RIRVJfU0VDVElPTlN9CisrICAke1JFTE9DQVRJTkcrJHtPVEhFUl9FTkRfU1lNQk9MU319CisrICAke1JFTE9DQVRJTkcrJHtTVEFDS05PVEV9fQorK30KKytFT0YKKy0tLSAvZGV2L251bGwKKysrKyBiL2xkL3Rlc3RzdWl0ZS9sZC1hdnIzMi9hdnIzMi5leHAKK0BAIC0wLDAgKzEsMjUgQEAKKysjIEV4cGVjdCBzY3JpcHQgZm9yIEFWUjMyIEVMRiBsaW5rZXIgdGVzdHMuCisrIyAgIENvcHlyaWdodCAyMDA0LTIwMDYgQXRtZWwgQ29ycG9yYXRpb24uCisrIworKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyMKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKysjCisrIyBXcml0dGVuIGJ5IEhhYXZhcmQgU2tpbm5lbW9lbiAoaHNraW5uZW1vZW5AYXRtZWwuY29tKQorKyMKKysKKytpZiAhW2lzdGFyZ2V0IGF2cjMyLSotKl0geworKyAgICByZXR1cm4KKyt9CisrCisrcnVuX2R1bXBfdGVzdCAicGNyZWwiCistLS0gL2Rldi9udWxsCisrKysgYi9sZC90ZXN0c3VpdGUvbGQtYXZyMzIvcGNyZWwuZAorQEAgLTAsMCArMSw3NCBAQAorKyNuYW1lOiBBVlIzMiBFTEYgUEMtcmVsYXRpdmUgZXh0ZXJuYWwgcmVsb2NzCisrI3NvdXJjZTogc3ltYm9scy5zCisrI3NvdXJjZTogLi4vLi4vLi4vZ2FzL3Rlc3RzdWl0ZS9nYXMvYXZyMzIvcGNyZWwucworKyNsZDogLVQgJHNyY2Rpci8kc3ViZGlyL3BjcmVsLmxkCisrI29iamR1bXA6IC1kCisrCisrLio6ICAgICBmaWxlIGZvcm1hdCBlbGYuKmF2cjMyLioKKysKKytEaXNhc3NlbWJseSBvZiBzZWN0aW9uIC50ZXh0OgorKworK2EwMDAwMDAwIDxfc3RhcnQ+OgorK2EwMDAwMDAwOglkNyAwMyAgICAgICAJbm9wCisrYTAwMDAwMDI6CWQ3IDAzICAgICAgIAlub3AKKysKKythMDAwMDAwNCA8dGVzdF9yam1wPjoKKythMDAwMDAwNDoJZDcgMDMgICAgICAgCW5vcAorK2EwMDAwMDA2OgljMCAyOCAgICAgICAJcmptcCBhMDAwMDAwYSA8dGVzdF9yam1wXCsweDY+CisrYTAwMDAwMDg6CWQ3IDAzICAgICAgIAlub3AKKythMDAwMDAwYToJZTAgOGYgMDEgZmIgCWJyYWwgYTAwMDA0MDAgPGV4dHN5bTEwPgorKworK2EwMDAwMDBlIDx0ZXN0X3JjYWxsPjoKKythMDAwMDAwZToJZDcgMDMgICAgICAgCW5vcAorK2EwMDAwMDEwIDx0ZXN0X3JjYWxsMj46CisrYTAwMDAwMTA6CWMwIDJjICAgICAgIAlyY2FsbCBhMDAwMDAxNCA8dGVzdF9yY2FsbDJcKzB4ND4KKythMDAwMDAxMjoJZDcgMDMgICAgICAgCW5vcAorK2EwMDAwMDE0OgllZSBiMCBmZiBmNiAJcmNhbGwgYTAyMDAwMDAgPGV4dHN5bTIxPgorKworK2EwMDAwMDE4IDx0ZXN0X2JyYW5jaD46CisrYTAwMDAwMTg6CWMwIDMxICAgICAgIAlicm5lIGEwMDAwMDFlIDx0ZXN0X2JyYW5jaFwrMHg2PgorK2EwMDAwMDFhOglmZSA5ZiBmZiBmZiAJYnJhbCBhMDAwMDAxOCA8dGVzdF9icmFuY2g+CisrYTAwMDAwMWU6CWVlIDkwIGZmIGYxIAlicmVxIGEwMjAwMDAwIDxleHRzeW0yMT4KKysKKythMDAwMDAyMiA8dGVzdF9sZGRwYz46CisrYTAwMDAwMjI6CTQ4IDMwICAgICAgIAlsZGRwYyByMCxhMDAwMDAyYyA8c3ltMT4KKythMDAwMDAyNDoJNDggMjAgICAgICAgCWxkZHBjIHIwLGEwMDAwMDJjIDxzeW0xPgorK2EwMDAwMDI2OglmZSBmMCA3ZiBkYSAJbGQudyByMCxwY1xbMzI3MzBcXQorKwkuLi4KKysKKythMDAwMDAyYyA8c3ltMT46CisrYTAwMDAwMmM6CWQ3IDAzICAgICAgIAlub3AKKythMDAwMDAyZToJZDcgMDMgICAgICAgCW5vcAorKworK2EwMDAwMDMwIDx0ZXN0X2xvY2FsPjoKKythMDAwMDAzMDoJNDggMjAgICAgICAgCWxkZHBjIHIwLGEwMDAwMDM4IDx0ZXN0X2xvY2FsXCsweDg+CisrYTAwMDAwMzI6CTQ4IDMwICAgICAgIAlsZGRwYyByMCxhMDAwMDAzYyA8dGVzdF9sb2NhbFwrMHhjPgorK2EwMDAwMDM0Ogk0OCAyMCAgICAgICAJbGRkcGMgcjAsYTAwMDAwM2MgPHRlc3RfbG9jYWxcKzB4Yz4KKythMDAwMDAzNjoJMDAgMDAgICAgICAgCWFkZCByMCxyMAorK2EwMDAwMDM4OglkNyAwMyAgICAgICAJbm9wCisrYTAwMDAwM2E6CWQ3IDAzICAgICAgIAlub3AKKythMDAwMDAzYzoJZDcgMDMgICAgICAgCW5vcAorK2EwMDAwMDNlOglkNyAwMyAgICAgICAJbm9wCisrCisrRGlzYXNzZW1ibHkgb2Ygc2VjdGlvbiBcLnRleHRcLmluaXQ6CisrYTAwMDAwNDAgPHRlc3RfaW50ZXJfc2VjdGlvbj46CisrYTAwMDAwNDA6CWZlIGIwIGZmIGU3IAlyY2FsbCBhMDAwMDAwZSA8dGVzdF9yY2FsbD4KKythMDAwMDA0NDoJZDcgMDMgICAgICAgCW5vcAorK2EwMDAwMDQ2OglmZSBiMCBmZiBlNCAJcmNhbGwgYTAwMDAwMGUgPHRlc3RfcmNhbGw+CisrYTAwMDAwNGE6CWZlIGIwIGZmIGUzIAlyY2FsbCBhMDAwMDAxMCA8dGVzdF9yY2FsbDI+CisrYTAwMDAwNGU6CWQ3IDAzICAgICAgIAlub3AKKythMDAwMDA1MDoJZmUgYjAgZmYgZTAgCXJjYWxsIGEwMDAwMDEwIDx0ZXN0X3JjYWxsMj4KKysKKytEaXNhc3NlbWJseSBvZiBzZWN0aW9uIFwudGV4dFwucGNyZWwxMDoKKysKKythMDAwMDQwMCA8ZXh0c3ltMTA+OgorK2EwMDAwNDAwOglkNyAwMyAgICAgICAJbm9wCisrCisrRGlzYXNzZW1ibHkgb2Ygc2VjdGlvbiBcLnRleHRcLnBjcmVsMTY6CisrCisrYTAwMDgwMDAgPGV4dHN5bTE2PjoKKythMDAwODAwMDoJZDcgMDMgICAgICAgCW5vcAorKworK0Rpc2Fzc2VtYmx5IG9mIHNlY3Rpb24gXC50ZXh0XC5wY3JlbDIxOgorK2EwMjAwMDAwIDxleHRzeW0yMT46CisrYTAyMDAwMDA6CWQ3IDAzICAgICAgIAlub3AKKy0tLSAvZGV2L251bGwKKysrKyBiL2xkL3Rlc3RzdWl0ZS9sZC1hdnIzMi9wY3JlbC5sZAorQEAgLTAsMCArMSwyMyBAQAorK0VOVFJZKF9zdGFydCkKKytTRUNUSU9OUworK3sKKysJLnRleHQgMHhhMDAwMDAwMDoKKysJeworKwkJKigudGV4dCkKKysJfQorKworKwkudGV4dC5wY3JlbDEwIDB4YTAwMDA0MDA6CisrCXsKKysJCSooLnRleHQucGNyZWwxMCkKKysJfQorKworKwkudGV4dC5wY3JlbDE2IDB4YTAwMDgwMDA6CisrCXsKKysJCSooLnRleHQucGNyZWwxNikKKysJfQorKworKwkudGV4dC5wY3JlbDIxIDB4YTAyMDAwMDA6CisrCXsKKysJCSooLnRleHQucGNyZWwyMSkKKysJfQorK30KKy0tLSAvZGV2L251bGwKKysrKyBiL2xkL3Rlc3RzdWl0ZS9sZC1hdnIzMi9zeW1ib2xzLnMKK0BAIC0wLDAgKzEsMjAgQEAKKysJLnRleHQKKysJLmdsb2JhbCBfc3RhcnQKKytfc3RhcnQ6CisrCW5vcAorKwlub3AKKysKKysJLnNlY3Rpb24gLnRleHQucGNyZWwxMCwiYXgiCisrCS5nbG9iYWwgZXh0c3ltMTAKKytleHRzeW0xMDoKKysJbm9wCisrCisrCS5zZWN0aW9uIC50ZXh0LnBjcmVsMTYsImF4IgorKwkuZ2xvYmFsIGV4dHN5bTE2CisrZXh0c3ltMTY6CisrCW5vcAorKworKwkuc2VjdGlvbiAudGV4dC5wY3JlbDIxLCJheCIKKysJLmdsb2JhbCBleHRzeW0yMQorK2V4dHN5bTIxOgorKwlub3AKKy0tLSAvZGV2L251bGwKKysrKyBiL29wY29kZXMvYXZyMzItYXNtLmMKK0BAIC0wLDAgKzEsMjY0IEBACisrLyogQXNzZW1ibGVyIGludGVyZmFjZSBmb3IgQVZSMzIuCisrICAgQ29weXJpZ2h0IDIwMDUsIDIwMDYgQXRtZWwgQ29ycG9yYXRpb24uCisrCisrICAgV3JpdHRlbiBieSBIYWF2YXJkIFNraW5uZW1vZW4sIEF0bWVsIE5vcndheSwgPGhza2lubmVtb2VuQGF0bWVsLmNvbT4KKysKKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJvcGNvZGVzLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorKyAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrCisrI2luY2x1ZGUgImF2cjMyLW9wYy5oIgorKyNpbmNsdWRlICJhdnIzMi1hc20uaCIKKysKKysvKiBTdHJ1Y3R1cmUgZm9yIGEgcmVnaXN0ZXIgaGFzaCB0YWJsZSBlbnRyeS4gICovCisrc3RydWN0IHJlZ19lbnRyeQorK3sKKysgIGNvbnN0IGNoYXIJKm5hbWU7CisrICBpbnQJCW51bWJlcjsKKyt9OworKworKy8qIEludGVnZXIgUmVnaXN0ZXJzLiAgKi8KKytzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ19lbnRyeSByZWdfdGFibGVbXSA9CisrICB7CisrICAgIC8qIFByaW1hcnkgbmFtZXMgKHVzZWQgYnkgdGhlIGRpc2Fzc2VtYmxlcikgKi8KKysgICAgeyAicjAiLCAgIDAgfSwgeyAicjEiLCAgIDEgfSwgeyAicjIiLCAgIDIgfSwgeyAicjMiLCAgIDMgfSwKKysgICAgeyAicjQiLCAgIDQgfSwgeyAicjUiLCAgIDUgfSwgeyAicjYiLCAgIDYgfSwgeyAicjciLCAgIDcgfSwKKysgICAgeyAicjgiLCAgIDggfSwgeyAicjkiLCAgIDkgfSwgeyAicjEwIiwgMTAgfSwgeyAicjExIiwgMTEgfSwKKysgICAgeyAicjEyIiwgMTIgfSwgeyAic3AiLCAgMTMgfSwgeyAibHIiLCAgMTQgfSwgeyAicGMiLCAgMTUgfSwKKysgICAgLyogQWx0ZXJuYXRpdmVzIHRvIHNwLCBsciBhbmQgcGMuICAqLworKyAgICB7ICJyMTMiLCAxMyB9LCB7ICJyMTQiLCAxNCB9LCB7ICJyMTUiLCAxNSB9LAorKyAgfTsKKysjZGVmaW5lIEFWUjMyX05SX0lOVFJFR1MgKHNpemVvZihyZWdfdGFibGUpL3NpemVvZihyZWdfdGFibGVbMF0pKQorKworKy8qIENvcHJvY2Vzc29yIFJlZ2lzdGVycy4gICovCisrc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfZW50cnkgY3JfdGFibGVbXSA9CisrICB7CisrICAgIHsgImNyMCIsICAgMCB9LCB7ICJjcjEiLCAgIDEgfSwgeyAiY3IyIiwgICAyIH0sIHsgImNyMyIsICAgMyB9LAorKyAgICB7ICJjcjQiLCAgIDQgfSwgeyAiY3I1IiwgICA1IH0sIHsgImNyNiIsICAgNiB9LCB7ICJjcjciLCAgIDcgfSwKKysgICAgeyAiY3I4IiwgICA4IH0sIHsgImNyOSIsICAgOSB9LCB7ICJjcjEwIiwgMTAgfSwgeyAiY3IxMSIsIDExIH0sCisrICAgIHsgImNyMTIiLCAxMiB9LCB7ICJjcjEzIiwgMTMgfSwgeyAiY3IxNCIsIDE0IH0sIHsgImNyMTUiLCAxNSB9LAorKyAgfTsKKysjZGVmaW5lIEFWUjMyX05SX0NQUkVHUyAoc2l6ZW9mKGNyX3RhYmxlKS9zaXplb2YoY3JfdGFibGVbMF0pKQorKworKy8qIEZsb2F0aW5nLXBvaW50IFJlZ2lzdGVycy4gICovCisrc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfZW50cnkgZnJfdGFibGVbXSA9CisrICB7CisrICAgIHsgImZyMCIsICAgMCB9LCB7ICJmcjEiLCAgIDEgfSwgeyAiZnIyIiwgICAyIH0sIHsgImZyMyIsICAgMyB9LAorKyAgICB7ICJmcjQiLCAgIDQgfSwgeyAiZnI1IiwgICA1IH0sIHsgImZyNiIsICAgNiB9LCB7ICJmcjciLCAgIDcgfSwKKysgICAgeyAiZnI4IiwgICA4IH0sIHsgImZyOSIsICAgOSB9LCB7ICJmcjEwIiwgMTAgfSwgeyAiZnIxMSIsIDExIH0sCisrICAgIHsgImZyMTIiLCAxMiB9LCB7ICJmcjEzIiwgMTMgfSwgeyAiZnIxNCIsIDE0IH0sIHsgImZyMTUiLCAxNSB9LAorKyAgfTsKKysjZGVmaW5lIEFWUjMyX05SX0ZQUkVHUyAoc2l6ZW9mKGZyX3RhYmxlKS9zaXplb2YoZnJfdGFibGVbMF0pKQorKworKy8qIFBpQ28gUmVnaXN0ZXJzLiAgKi8KKytzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ19lbnRyeSBwaWNvX3RhYmxlW10gPQorKyAgeworKyAgICB7ICJpbnBpeDIiLCAgICAwIH0sIHsgImlucGl4MSIsICAgIDEgfSwgeyAiaW5waXgwIiwgICAgMiB9LAorKyAgICB7ICJvdXRwaXgyIiwgICAzIH0sIHsgIm91dHBpeDEiLCAgIDQgfSwgeyAib3V0cGl4MCIsICAgNSB9LAorKyAgICB7ICJjb2VmZjBfYSIsICA2IH0sIHsgImNvZWZmMF9iIiwgIDcgfSwgeyAiY29lZmYxX2EiLCAgOCB9LAorKyAgICB7ICJjb2VmZjFfYiIsICA5IH0sIHsgImNvZWZmMl9hIiwgMTAgfSwgeyAiY29lZmYyX2IiLCAxMSB9LAorKyAgICB7ICJ2bXUwX291dCIsIDEyIH0sIHsgInZtdTFfb3V0IiwgMTMgfSwgeyAidm11Ml9vdXQiLCAxNCB9LAorKyAgICB7ICJjb25maWciLCAgIDE1IH0sCisrICB9OworKyNkZWZpbmUgQVZSMzJfTlJfUElDT1JFR1MgKHNpemVvZihwaWNvX3RhYmxlKS9zaXplb2YocGljb190YWJsZVswXSkpCisrCisraW50CisrYXZyMzJfcGFyc2VfaW50cmVnKGNvbnN0IGNoYXIgKnN0cikKKyt7CisrICB1bnNpZ25lZCBpbnQgaTsKKysKKysgIGZvciAoaSA9IDA7IGkgPCBBVlIzMl9OUl9JTlRSRUdTOyBpKyspCisrICAgIHsKKysgICAgICBpZiAoc3RyY2FzZWNtcChyZWdfdGFibGVbaV0ubmFtZSwgc3RyKSA9PSAwKQorKwlyZXR1cm4gcmVnX3RhYmxlW2ldLm51bWJlcjsKKysgICAgfQorKworKyAgcmV0dXJuIC0xOworK30KKysKKytpbnQKKythdnIzMl9wYXJzZV9jcHJlZyhjb25zdCBjaGFyICpzdHIpCisreworKyAgdW5zaWduZWQgaW50IGk7CisrCisrICBmb3IgKGkgPSAwOyBpIDwgQVZSMzJfTlJfQ1BSRUdTOyBpKyspCisrICAgIHsKKysgICAgICBpZiAoc3RyY2FzZWNtcChjcl90YWJsZVtpXS5uYW1lLCBzdHIpID09IDApCisrCXJldHVybiBjcl90YWJsZVtpXS5udW1iZXI7CisrICAgIH0KKysKKysgIHJldHVybiAtMTsKKyt9CisrCisraW50IGF2cjMyX3BhcnNlX2ZwcmVnKGNvbnN0IGNoYXIgKnN0cikKKyt7CisrICB1bnNpZ25lZCBpbnQgaTsKKysKKysgIGZvciAoaSA9IDA7IGkgPCBBVlIzMl9OUl9GUFJFR1M7IGkrKykKKysgICAgeworKyAgICAgIGlmIChzdHJjYXNlY21wKGZyX3RhYmxlW2ldLm5hbWUsIHN0cikgPT0gMCkKKysJcmV0dXJuIGZyX3RhYmxlW2ldLm51bWJlcjsKKysgICAgfQorKworKyAgcmV0dXJuIC0xOworK30KKysKKytpbnQgYXZyMzJfcGFyc2VfcGljb3JlZyhjb25zdCBjaGFyICpzdHIpCisreworKyAgdW5zaWduZWQgaW50IGk7CisrCisrICBmb3IgKGkgPSAwOyBpIDwgQVZSMzJfTlJfUElDT1JFR1M7IGkrKykKKysgICAgeworKyAgICAgIGlmIChzdHJjYXNlY21wKHBpY29fdGFibGVbaV0ubmFtZSwgc3RyKSA9PSAwKQorKwlyZXR1cm4gcGljb190YWJsZVtpXS5udW1iZXI7CisrICAgIH0KKysKKysgIHJldHVybiAtMTsKKyt9CisrCisrc3RhdGljIHVuc2lnbmVkIGxvbmcKKytwYXJzZV9yZWdsaXN0KGNoYXIgKnN0ciwgY2hhciAqKmVuZHB0ciwgaW50ICgqcGFyc2VfcmVnKShjb25zdCBjaGFyICopKQorK3sKKysgIGludCByZWdfZnJvbSwgcmVnX3RvOworKyAgdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwOworKyAgY2hhciAqcDEsICpwMiwgYzsKKysKKysgIHdoaWxlICgqc3RyKQorKyAgICB7CisrICAgICAgZm9yIChwMSA9IHN0cjsgKnAxOyBwMSsrKQorKwlpZiAoKnAxID09ICcsJyB8fCAqcDEgPT0gJy0nKQorKwkgIGJyZWFrOworKworKyAgICAgIGMgPSAqcDEsICpwMSA9IDA7CisrICAgICAgcmVnX2Zyb20gPSBwYXJzZV9yZWcoc3RyKTsKKysgICAgICAqcDEgPSBjOworKworKyAgICAgIGlmIChyZWdfZnJvbSA8IDApCisrCWJyZWFrOworKworKyAgICAgIGlmICgqcDEgPT0gJy0nKQorKwl7CisrCSAgZm9yIChwMiA9ICsrcDE7ICpwMjsgcDIrKykKKysJICAgIGlmICgqcDIgPT0gJywnKQorKwkgICAgICBicmVhazsKKysKKysJICBjID0gKnAyLCAqcDIgPSAwOworKwkgIC8qIHByaW50ZigiZ29pbmcgdG8gcGFyc2UgcmVnX3RvIGZyb20gYCVzJ1xuIiwgcDEpOyAqLworKwkgIHJlZ190byA9IHBhcnNlX3JlZyhwMSk7CisrCSAgKnAyID0gYzsKKysKKysJICBpZiAocmVnX3RvIDwgMCkKKysJICAgIGJyZWFrOworKworKwkgIHdoaWxlIChyZWdfZnJvbSA8PSByZWdfdG8pCisrCSAgICByZXN1bHQgfD0gKDEgPDwgcmVnX2Zyb20rKyk7CisrCSAgcDEgPSBwMjsKKysJfQorKyAgICAgIGVsc2UKKysJcmVzdWx0IHw9ICgxIDw8IHJlZ19mcm9tKTsKKysKKysgICAgICBzdHIgPSBwMTsKKysgICAgICBpZiAoKnN0cikgKytzdHI7CisrICAgIH0KKysKKysgIGlmIChlbmRwdHIpCisrICAgICplbmRwdHIgPSBzdHI7CisrCisrICByZXR1cm4gcmVzdWx0OworK30KKysKKyt1bnNpZ25lZCBsb25nCisrYXZyMzJfcGFyc2VfcmVnbGlzdChjaGFyICpzdHIsIGNoYXIgKiplbmRwdHIpCisreworKyAgcmV0dXJuIHBhcnNlX3JlZ2xpc3Qoc3RyLCBlbmRwdHIsIGF2cjMyX3BhcnNlX2ludHJlZyk7CisrfQorKworK3Vuc2lnbmVkIGxvbmcKKythdnIzMl9wYXJzZV9jcHJlZ2xpc3QoY2hhciAqc3RyLCBjaGFyICoqZW5kcHRyKQorK3sKKysgIHJldHVybiBwYXJzZV9yZWdsaXN0KHN0ciwgZW5kcHRyLCBhdnIzMl9wYXJzZV9jcHJlZyk7CisrfQorKworK3Vuc2lnbmVkIGxvbmcKKythdnIzMl9wYXJzZV9waWNvX3JlZ2xpc3QoY2hhciAqc3RyLCBjaGFyICoqZW5kcHRyKQorK3sKKysgIHJldHVybiBwYXJzZV9yZWdsaXN0KHN0ciwgZW5kcHRyLCBhdnIzMl9wYXJzZV9waWNvcmVnKTsKKyt9CisrCisraW50CisrYXZyMzJfbWFrZV9yZWdtYXNrOCh1bnNpZ25lZCBsb25nIHJlZ21hc2sxNiwgdW5zaWduZWQgbG9uZyAqcmVnbWFzazgpCisreworKyAgdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwOworKworKyAgLyogcHJpbnRmKCJjb252ZXJ0IHJlZ21hc2sxNiAweCUwNGx4XG4iLCByZWdtYXNrMTYpOyAqLworKworKyAgaWYgKHJlZ21hc2sxNiAmIDB4ZikKKysgICAgeworKyAgICAgIGlmICgocmVnbWFzazE2ICYgMHhmKSA9PSAweGYpCisrCXJlc3VsdCB8PSAxIDw8IDA7CisrICAgICAgZWxzZQorKwlyZXR1cm4gLTE7CisrICAgIH0KKysgIGlmIChyZWdtYXNrMTYgJiAweGYwKQorKyAgICB7CisrICAgICAgaWYgKChyZWdtYXNrMTYgJiAweGYwKSA9PSAweGYwKQorKwlyZXN1bHQgfD0gMSA8PCAxOworKyAgICAgIGVsc2UKKysJcmV0dXJuIC0xOworKyAgICB9CisrICBpZiAocmVnbWFzazE2ICYgMHgzMDApCisrICAgIHsKKysgICAgICBpZiAoKHJlZ21hc2sxNiAmIDB4MzAwKSA9PSAweDMwMCkKKysJcmVzdWx0IHw9IDEgPDwgMjsKKysgICAgICBlbHNlCisrCXJldHVybiAtMTsKKysgICAgfQorKyAgaWYgKHJlZ21hc2sxNiAmICgxIDw8IDEzKSkKKysgICAgcmV0dXJuIC0xOworKworKyAgaWYgKHJlZ21hc2sxNiAmICgxIDw8IDEwKSkKKysgICAgcmVzdWx0IHw9IDEgPDwgMzsKKysgIGlmIChyZWdtYXNrMTYgJiAoMSA8PCAxMSkpCisrICAgIHJlc3VsdCB8PSAxIDw8IDQ7CisrICBpZiAocmVnbWFzazE2ICYgKDEgPDwgMTIpKQorKyAgICByZXN1bHQgfD0gMSA8PCA1OworKyAgaWYgKHJlZ21hc2sxNiAmICgxIDw8IDE0KSkKKysgICAgcmVzdWx0IHw9IDEgPDwgNjsKKysgIGlmIChyZWdtYXNrMTYgJiAoMSA8PCAxNSkpCisrICAgIHJlc3VsdCB8PSAxIDw8IDc7CisrCisrICAqcmVnbWFzazggPSByZXN1bHQ7CisrCisrICByZXR1cm4gMDsKKyt9CisrCisrI2lmIDAKKytzdHJ1Y3QgcmVnX21hcAorK3sKKysgIGNvbnN0IHN0cnVjdCByZWdfZW50cnkJKm5hbWVzOworKyAgaW50CQkJCW5yX3JlZ3M7CisrICBzdHJ1Y3QgaGFzaF9jb250cm9sCQkqaHRhYjsKKysgIGNvbnN0IGNoYXIJCQkqZXJybXNnOworK307CisrCisrc3RydWN0IHJlZ19tYXAgYWxsX3JlZ19tYXBzW10gPQorKyAgeworKyAgICB7IHJlZ190YWJsZSwgQVZSMzJfTlJfSU5UUkVHUywgTlVMTCwgTl8oImludGVncmFsIHJlZ2lzdGVyIGV4cGVjdGVkIikgfSwKKysgICAgeyBjcl90YWJsZSwgIEFWUjMyX05SX0NQUkVHUywgIE5VTEwsIE5fKCJjb3Byb2Nlc3NvciByZWdpc3RlciBleHBlY3RlZCIpIH0sCisrICB9OworKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvb3Bjb2Rlcy9hdnIzMi1hc20uaAorQEAgLTAsMCArMSw0MiBAQAorKy8qIEFzc2VtYmxlciBpbnRlcmZhY2UgZm9yIEFWUjMyLgorKyAgIENvcHlyaWdodCAyMDA1LCAyMDA2IEF0bWVsIENvcnBvcmF0aW9uLgorKworKyAgIFdyaXR0ZW4gYnkgSGFhdmFyZCBTa2lubmVtb2VuLCBBdG1lbCBOb3J3YXksIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CisrCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlib3Bjb2Rlcy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKysgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKysgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcsIFVTQS4gICovCisrI2lmbmRlZiBfX09QQ09ERVNfQVZSMzJfQVNNX0gKKysjZGVmaW5lIF9fT1BDT0RFU19BVlIzMl9BU01fSAorKworK2V4dGVybiBpbnQKKythdnIzMl9wYXJzZV9pbnRyZWcoY29uc3QgY2hhciAqc3RyKTsKKytleHRlcm4gaW50CisrYXZyMzJfcGFyc2VfY3ByZWcoY29uc3QgY2hhciAqc3RyKTsKKytleHRlcm4gaW50CisrYXZyMzJfcGFyc2VfZnByZWcoY29uc3QgY2hhciAqc3RyKTsKKytleHRlcm4gaW50CisrYXZyMzJfcGFyc2VfcGljb3JlZyhjb25zdCBjaGFyICpzdHIpOworK2V4dGVybiB1bnNpZ25lZCBsb25nCisrYXZyMzJfcGFyc2VfcmVnbGlzdChjaGFyICpzdHIsIGNoYXIgKiplbmRwdHIpOworK2V4dGVybiB1bnNpZ25lZCBsb25nCisrYXZyMzJfcGFyc2VfY3ByZWdsaXN0KGNoYXIgKnN0ciwgY2hhciAqKmVuZHB0cik7CisrZXh0ZXJuIHVuc2lnbmVkIGxvbmcKKythdnIzMl9wYXJzZV9waWNvX3JlZ2xpc3QoY2hhciAqc3RyLCBjaGFyICoqZW5kcHRyKTsKKytleHRlcm4gaW50CisrYXZyMzJfbWFrZV9yZWdtYXNrOCh1bnNpZ25lZCBsb25nIHJlZ21hc2sxNiwgdW5zaWduZWQgbG9uZyAqcmVnbWFzazgpOworKworKyNlbmRpZiAvKiBfX09QQ09ERVNfQVZSMzJfQVNNX0ggKi8KKy0tLSAvZGV2L251bGwKKysrKyBiL29wY29kZXMvYXZyMzItZGlzLmMKK0BAIC0wLDAgKzEsODkxIEBACisrLyogUHJpbnQgQVZSMzIgaW5zdHJ1Y3Rpb25zIGZvciBHREIgYW5kIG9iamR1bXAuCisrICAgQ29weXJpZ2h0IDIwMDUsIDIwMDYgQXRtZWwgQ29ycG9yYXRpb24uCisrCisrICAgV3JpdHRlbiBieSBIYWF2YXJkIFNraW5uZW1vZW4sIEF0bWVsIE5vcndheSwgPGhza2lubmVtb2VuQGF0bWVsLmNvbT4KKysKKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJvcGNvZGVzLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorKyAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysKKysjaW5jbHVkZSAic3lzZGVwLmgiCisrI2luY2x1ZGUgImRpcy1hc20uaCIKKysjaW5jbHVkZSAiYXZyMzItb3BjLmgiCisrI2luY2x1ZGUgIm9waW50bC5oIgorKyNpbmNsdWRlICJzYWZlLWN0eXBlLmgiCisrCisrLyogVE9ETzogU2hhcmUgdGhpcyB3aXRoIC1hc20gKi8KKysKKysvKiBTdHJ1Y3R1cmUgZm9yIGEgcmVnaXN0ZXIgaGFzaCB0YWJsZSBlbnRyeS4gICovCisrc3RydWN0IHJlZ19lbnRyeQorK3sKKysgIGNvbnN0IGNoYXIJKm5hbWU7CisrICBpbnQJCW51bWJlcjsKKyt9OworKworKyNpZm5kZWYgc3RybmVxCisrI2RlZmluZSBzdHJuZXEoYSxiLG4pCShzdHJuY21wICgoYSksIChiKSwgKG4pKSA9PSAwKQorKyNlbmRpZgorKworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2VudHJ5IHJlZ190YWJsZVtdID0KKysgIHsKKysgICAgLyogUHJpbWFyeSBuYW1lcyAodXNlZCBieSB0aGUgZGlzYXNzZW1ibGVyKSAqLworKyAgICB7ICJyMCIsICAgMCB9LCB7ICJyMSIsICAgMSB9LCB7ICJyMiIsICAgMiB9LCB7ICJyMyIsICAgMyB9LAorKyAgICB7ICJyNCIsICAgNCB9LCB7ICJyNSIsICAgNSB9LCB7ICJyNiIsICAgNiB9LCB7ICJyNyIsICAgNyB9LAorKyAgICB7ICJyOCIsICAgOCB9LCB7ICJyOSIsICAgOSB9LCB7ICJyMTAiLCAxMCB9LCB7ICJyMTEiLCAxMSB9LAorKyAgICB7ICJyMTIiLCAxMiB9LCB7ICJzcCIsICAxMyB9LCB7ICJsciIsICAxNCB9LCB7ICJwYyIsICAxNSB9LAorKyAgICAvKiBBbHRlcm5hdGl2ZXMgdG8gc3AsIGxyIGFuZCBwYy4gICovCisrICAgIHsgInIxMyIsIDEzIH0sIHsgInIxNCIsIDE0IH0sIHsgInIxNSIsIDE1IH0sCisrICB9OworKyNkZWZpbmUgQVZSMzJfTlJfSU5UUkVHUyAoc2l6ZW9mKHJlZ190YWJsZSkvc2l6ZW9mKHJlZ190YWJsZVswXSkpCisrCisrLyogQ29wcm9jZXNzb3IgUmVnaXN0ZXJzLiAgKi8KKytzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ19lbnRyeSBjcl90YWJsZVtdID0KKysgIHsKKysgICAgeyAiY3IwIiwgICAwIH0sIHsgImNyMSIsICAgMSB9LCB7ICJjcjIiLCAgIDIgfSwgeyAiY3IzIiwgICAzIH0sCisrICAgIHsgImNyNCIsICAgNCB9LCB7ICJjcjUiLCAgIDUgfSwgeyAiY3I2IiwgICA2IH0sIHsgImNyNyIsICAgNyB9LAorKyAgICB7ICJjcjgiLCAgIDggfSwgeyAiY3I5IiwgICA5IH0sIHsgImNyMTAiLCAxMCB9LCB7ICJjcjExIiwgMTEgfSwKKysgICAgeyAiY3IxMiIsIDEyIH0sIHsgImNyMTMiLCAxMyB9LCB7ICJjcjE0IiwgMTQgfSwgeyAiY3IxNSIsIDE1IH0sCisrICB9OworKyNkZWZpbmUgQVZSMzJfTlJfQ1BSRUdTIChzaXplb2YoY3JfdGFibGUpL3NpemVvZihjcl90YWJsZVswXSkpCisrCisrc3RhdGljIGNvbnN0IGNoYXIgYnBhcnRzWzRdID0geyAnYicsICdsJywgJ3UnLCAndCcgfTsKKytzdGF0aWMgYmZkX3ZtYSBjdXJyZW50X3BjOworKworK3N0cnVjdCBhdnIzMl9maWVsZF92YWx1ZQorK3sKKysgIGNvbnN0IHN0cnVjdCBhdnIzMl9pZmllbGQgKmlmaWVsZDsKKysgIHVuc2lnbmVkIGxvbmcgdmFsdWU7CisrfTsKKysKKytzdHJ1Y3QgYXZyMzJfb3BlcmFuZAorK3sKKysgIGludCBpZDsKKysgIGludCBpc19wY3JlbDsKKysgIGludCBhbGlnbl9vcmRlcjsKKysgIGludCAoKnByaW50KShzdHJ1Y3QgYXZyMzJfb3BlcmFuZCAqb3AsIHN0cnVjdCBkaXNhc3NlbWJsZV9pbmZvICppbmZvLAorKwkgICAgICAgc3RydWN0IGF2cjMyX2ZpZWxkX3ZhbHVlICppZmllbGRzKTsKKyt9OworKworK3N0YXRpYyBzaWduZWQgbG9uZworK2dldF9zaWduZWRfdmFsdWUoY29uc3Qgc3RydWN0IGF2cjMyX2ZpZWxkX3ZhbHVlICpmdikKKyt7CisrICBzaWduZWQgbG9uZyB2YWx1ZSA9IGZ2LT52YWx1ZTsKKysKKysgIGlmIChmdi0+dmFsdWUgJiAoMSA8PCAoZnYtPmlmaWVsZC0+Yml0c2l6ZSAtIDEpKSkKKysgICAgdmFsdWUgfD0gKH4wVUwgPDwgZnYtPmlmaWVsZC0+Yml0c2l6ZSk7CisrCisrICByZXR1cm4gdmFsdWU7CisrfQorKworK3N0YXRpYyB2b2lkCisrcHJpbnRfcmVnbGlzdF9yYW5nZSh1bnNpZ25lZCBpbnQgZmlyc3QsIHVuc2lnbmVkIGludCBsYXN0LAorKwkJICAgIGNvbnN0IHN0cnVjdCByZWdfZW50cnkgKnJlZ19uYW1lcywKKysJCSAgICBpbnQgbmVlZF9jb21tYSwKKysJCSAgICBzdHJ1Y3QgZGlzYXNzZW1ibGVfaW5mbyAqaW5mbykKKyt7CisrICBpZiAobmVlZF9jb21tYSkKKysgICAgaW5mby0+ZnByaW50Zl9mdW5jKGluZm8tPnN0cmVhbSwgIiwiKTsKKysKKysgIGlmIChmaXJzdCA9PSBsYXN0KQorKyAgICBpbmZvLT5mcHJpbnRmX2Z1bmMoaW5mby0+c3RyZWFtLCAiJXMiLAorKwkJICAgICAgIHJlZ19uYW1lc1tmaXJzdF0ubmFtZSk7CisrICBlbHNlCisrICAgIGluZm8tPmZwcmludGZfZnVuYyhpbmZvLT5zdHJlYW0sICIlcy0lcyIsCisrCQkgICAgICAgcmVnX25hbWVzW2ZpcnN0XS5uYW1lLCByZWdfbmFtZXNbbGFzdF0ubmFtZSk7CisrfQorKworK3N0YXRpYyBpbnQKKytwcmludF9pbnRyZWcoc3RydWN0IGF2cjMyX29wZXJhbmQgKm9wLAorKwkgICAgIHN0cnVjdCBkaXNhc3NlbWJsZV9pbmZvICppbmZvLAorKwkgICAgIHN0cnVjdCBhdnIzMl9maWVsZF92YWx1ZSAqaWZpZWxkcykKKyt7CisrICB1bnNpZ25lZCBsb25nIHJlZ2lkID0gaWZpZWxkc1swXS52YWx1ZSA8PCBvcC0+YWxpZ25fb3JkZXI7CisrCisrICBpbmZvLT5mcHJpbnRmX2Z1bmMoaW5mby0+c3RyZWFtLCAiJXMiLAorKwkJICAgICByZWdfdGFibGVbcmVnaWRdLm5hbWUpOworKyAgcmV0dXJuIDE7CisrfQorKworK3N0YXRpYyBpbnQKKytwcmludF9pbnRyZWdfcHJlZGVjKHN0cnVjdCBhdnIzMl9vcGVyYW5kICpvcCBBVFRSSUJVVEVfVU5VU0VELAorKwkJICAgIHN0cnVjdCBkaXNhc3NlbWJsZV9pbmZvICppbmZvLAorKwkJICAgIHN0cnVjdCBhdnIzMl9maWVsZF92YWx1ZSAqaWZpZWxkcykKKyt7CisrICBpbmZvLT5mcHJpbnRmX2Z1bmMoaW5mby0+c3RyZWFtLCAiLS0lcyIsCisrCQkgICAgIHJlZ190YWJsZVtpZmllbGRzWzBdLnZhbHVlXS5uYW1lKTsKKysgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50CisrcHJpbnRfaW50cmVnX3Bvc3RpbmMoc3RydWN0IGF2cjMyX29wZXJhbmQgKm9wIEFUVFJJQlVURV9VTlVTRUQsCisrCQkgICAgIHN0cnVjdCBkaXNhc3NlbWJsZV9pbmZvICppbmZvLAorKwkJICAgICBzdHJ1Y3QgYXZyMzJfZmllbGRfdmFsdWUgKmlmaWVsZHMpCisreworKyAgaW5mby0+ZnByaW50Zl9mdW5jKGluZm8tPnN0cmVhbSwgIiVzKysiLAorKwkJICAgICByZWdfdGFibGVbaWZpZWxkc1swXS52YWx1ZV0ubmFtZSk7CisrICByZXR1cm4gMTsKKyt9CisrCisrc3RhdGljIGludAorK3ByaW50X2ludHJlZ19sc2woc3RydWN0IGF2cjMyX29wZXJhbmQgKm9wIEFUVFJJQlVURV9VTlVTRUQsCisrCQkgc3RydWN0IGRpc2Fzc2VtYmxlX2luZm8gKmluZm8sCisrCQkgc3RydWN0IGF2cjMyX2ZpZWxkX3ZhbHVlICppZmllbGRzKQorK3sKKysgIGNvbnN0IGNoYXIgKnJwID0gcmVnX3RhYmxlW2lmaWVsZHNbMF0udmFsdWVdLm5hbWU7CisrICB1bnNpZ25lZCBsb25nIHNhID0gaWZpZWxkc1sxXS52YWx1ZTsKKysKKysgIGlmIChzYSkKKysgICAgaW5mby0+ZnByaW50Zl9mdW5jKGluZm8tPnN0cmVhbSwgIiVzPDwweCVseCIsIHJwLCBzYSk7CisrICBlbHNlCisrICAgIGluZm8tPmZwcmludGZfZnVuYyhpbmZvLT5zdHJlYW0sICIlcyIsIHJwKTsKKysKKysgIHJldHVybiAyOworK30KKysKKytzdGF0aWMgaW50CisrcHJpbnRfaW50cmVnX2xzcihzdHJ1Y3QgYXZyMzJfb3BlcmFuZCAqb3AgQVRUUklCVVRFX1VOVVNFRCwKKysJCSBzdHJ1Y3QgZGlzYXNzZW1ibGVfaW5mbyAqaW5mbywKKysJCSBzdHJ1Y3QgYXZyMzJfZmllbGRfdmFsdWUgKmlmaWVsZHMpCisreworKyAgY29uc3QgY2hhciAqcnAgPSByZWdfdGFibGVbaWZpZWxkc1swXS52YWx1ZV0ubmFtZTsKKysgIHVuc2lnbmVkIGxvbmcgc2EgPSBpZmllbGRzWzFdLnZhbHVlOworKworKyAgaWYgKHNhKQorKyAgICBpbmZvLT5mcHJpbnRmX2Z1bmMoaW5mby0+c3RyZWFtLCAiJXM+PjB4JWx4IiwgcnAsIHNhKTsKKysgIGVsc2UKKysgICAgaW5mby0+ZnByaW50Zl9mdW5jKGluZm8tPnN0cmVhbSwgIiVzIiwgcnApOworKworKyAgcmV0dXJuIDI7CisrfQorKworK3N0YXRpYyBpbnQKKytwcmludF9pbnRyZWdfYnBhcnQoc3RydWN0IGF2cjMyX29wZXJhbmQgKm9wIEFUVFJJQlVURV9VTlVTRUQsCisrCQkgICBzdHJ1Y3QgZGlzYXNzZW1ibGVfaW5mbyAqaW5mbywKKysJCSAgIHN0cnVjdCBhdnIzMl9maWVsZF92YWx1ZSAqaWZpZWxkcykKKyt7CisrICBpbmZvLT5mcHJpbnRmX2Z1bmMoaW5mby0+c3RyZWFtLCAiJXM6JWMiLAorKwkJICAgICByZWdfdGFibGVbaWZpZWxkc1swXS52YWx1ZV0ubmFtZSwKKysJCSAgICAgYnBhcnRzW2lmaWVsZHNbMV0udmFsdWVdKTsKKysgIHJldHVybiAyOworK30KKysKKytzdGF0aWMgaW50CisrcHJpbnRfaW50cmVnX2hwYXJ0KHN0cnVjdCBhdnIzMl9vcGVyYW5kICpvcCBBVFRSSUJVVEVfVU5VU0VELAorKwkJICAgc3RydWN0IGRpc2Fzc2VtYmxlX2luZm8gKmluZm8sCisrCQkgICBzdHJ1Y3QgYXZyMzJfZmllbGRfdmFsdWUgKmlmaWVsZHMpCisreworKyAgaW5mby0+ZnByaW50Zl9mdW5jKGluZm8tPnN0cmVhbSwgIiVzOiVjIiwKKysJCSAgICAgcmVnX3RhYmxlW2lmaWVsZHNbMF0udmFsdWVdLm5hbWUsCisrCQkgICAgIGlmaWVsZHNbMV0udmFsdWUgPyAndCcgOiAnYicpOworKyAgcmV0dXJuIDI7CisrfQorKworK3N0YXRpYyBpbnQKKytwcmludF9pbnRyZWdfc2Rpc3Aoc3RydWN0IGF2cjMyX29wZXJhbmQgKm9wLAorKwkJICBzdHJ1Y3QgZGlzYXNzZW1ibGVfaW5mbyAqaW5mbywKKysJCSAgc3RydWN0IGF2cjMyX2ZpZWxkX3ZhbHVlICppZmllbGRzKQorK3sKKysgIHNpZ25lZCBsb25nIGRpc3A7CisrCisrICBkaXNwID0gZ2V0X3NpZ25lZF92YWx1ZSgmaWZpZWxkc1sxXSkgPDwgb3AtPmFsaWduX29yZGVyOworKworKyAgaW5mby0+ZnByaW50Zl9mdW5jKGluZm8tPnN0cmVhbSwgIiVzWyVsZF0iLAorKwkJICAgICByZWdfdGFibGVbaWZpZWxkc1swXS52YWx1ZV0ubmFtZSwgZGlzcCk7CisrICByZXR1cm4gMjsKKyt9CisrCisrc3RhdGljIGludAorK3ByaW50X2ludHJlZ191ZGlzcChzdHJ1Y3QgYXZyMzJfb3BlcmFuZCAqb3AsCisrCQkgICBzdHJ1Y3QgZGlzYXNzZW1ibGVfaW5mbyAqaW5mbywKKysJCSAgIHN0cnVjdCBhdnIzMl9maWVsZF92YWx1ZSAqaWZpZWxkcykKKyt7CisrICBpbmZvLT5mcHJpbnRmX2Z1bmMoaW5mby0+c3RyZWFtLCAiJXNbMHglbHhdIiwKKysJCSAgICAgcmVnX3RhYmxlW2lmaWVsZHNbMF0udmFsdWVdLm5hbWUsCisrCQkgICAgIGlmaWVsZHNbMV0udmFsdWUgPDwgb3AtPmFsaWduX29yZGVyKTsKKysgIHJldHVybiAyOworK30KKysKKytzdGF0aWMgaW50CisrcHJpbnRfaW50cmVnX2luZGV4KHN0cnVjdCBhdnIzMl9vcGVyYW5kICpvcCBBVFRSSUJVVEVfVU5VU0VELAorKwkJICAgc3RydWN0IGRpc2Fzc2VtYmxlX2luZm8gKmluZm8sCisrCQkgICBzdHJ1Y3QgYXZyMzJfZmllbGRfdmFsdWUgKmlmaWVsZHMpCisreworKyAgY29uc3QgY2hhciAqcmIsICpyaTsKKysgIHVuc2lnbmVkIGxvbmcgc2EgPSBpZmllbGRzWzJdLnZhbHVlOworKworKyAgcmIgPSByZWdfdGFibGVbaWZpZWxkc1swXS52YWx1ZV0ubmFtZTsKKysgIHJpID0gcmVnX3RhYmxlW2lmaWVsZHNbMV0udmFsdWVdLm5hbWU7CisrCisrICBpZiAoc2EpCisrICAgIGluZm8tPmZwcmludGZfZnVuYyhpbmZvLT5zdHJlYW0sICIlc1slczw8MHglbHhdIiwgcmIsIHJpLCBzYSk7CisrICBlbHNlCisrICAgIGluZm8tPmZwcmludGZfZnVuYyhpbmZvLT5zdHJlYW0sICIlc1slc10iLCByYiwgcmkpOworKworKyAgcmV0dXJuIDM7CisrfQorKworK3N0YXRpYyBpbnQKKytwcmludF9pbnRyZWdfeGluZGV4KHN0cnVjdCBhdnIzMl9vcGVyYW5kICpvcCBBVFRSSUJVVEVfVU5VU0VELAorKwkJICAgIHN0cnVjdCBkaXNhc3NlbWJsZV9pbmZvICppbmZvLAorKwkJICAgIHN0cnVjdCBhdnIzMl9maWVsZF92YWx1ZSAqaWZpZWxkcykKKyt7CisrICBpbmZvLT5mcHJpbnRmX2Z1bmMoaW5mby0+c3RyZWFtLCAiJXNbJXM6JWM8PDJdIiwKKysJCSAgICAgcmVnX3RhYmxlW2lmaWVsZHNbMF0udmFsdWVdLm5hbWUsCisrCQkgICAgIHJlZ190YWJsZVtpZmllbGRzWzFdLnZhbHVlXS5uYW1lLAorKwkJICAgICBicGFydHNbaWZpZWxkc1syXS52YWx1ZV0pOworKyAgcmV0dXJuIDM7CisrfQorKworK3N0YXRpYyBpbnQKKytwcmludF9qbXBsYWJlbChzdHJ1Y3QgYXZyMzJfb3BlcmFuZCAqb3AsCisrCSAgICAgICBzdHJ1Y3QgZGlzYXNzZW1ibGVfaW5mbyAqaW5mbywKKysJICAgICAgIHN0cnVjdCBhdnIzMl9maWVsZF92YWx1ZSAqaWZpZWxkcykKKyt7CisrICBiZmRfdm1hIGFkZHJlc3MsIG9mZnNldDsKKysKKysgIG9mZnNldCA9IGdldF9zaWduZWRfdmFsdWUoaWZpZWxkcykgPDwgb3AtPmFsaWduX29yZGVyOworKyAgYWRkcmVzcyA9IChjdXJyZW50X3BjICYgKH4wVUwgPDwgb3AtPmFsaWduX29yZGVyKSkgKyBvZmZzZXQ7CisrCisrICBpbmZvLT5wcmludF9hZGRyZXNzX2Z1bmMoYWRkcmVzcywgaW5mbyk7CisrCisrICByZXR1cm4gMTsKKyt9CisrCisrc3RhdGljIGludAorK3ByaW50X3BjX2Rpc3Aoc3RydWN0IGF2cjMyX29wZXJhbmQgKm9wLAorKwkgICAgICBzdHJ1Y3QgZGlzYXNzZW1ibGVfaW5mbyAqaW5mbywKKysJICAgICAgc3RydWN0IGF2cjMyX2ZpZWxkX3ZhbHVlICppZmllbGRzKQorK3sKKysgIGJmZF92bWEgYWRkcmVzcywgb2Zmc2V0OworKworKyAgb2Zmc2V0ID0gaWZpZWxkc1swXS52YWx1ZSA8PCBvcC0+YWxpZ25fb3JkZXI7CisrICBhZGRyZXNzID0gKGN1cnJlbnRfcGMgJiAofjBVTCA8PCBvcC0+YWxpZ25fb3JkZXIpKSArIG9mZnNldDsKKysKKysgIGluZm8tPnByaW50X2FkZHJlc3NfZnVuYyhhZGRyZXNzLCBpbmZvKTsKKysKKysgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50CisrcHJpbnRfc3Aoc3RydWN0IGF2cjMyX29wZXJhbmQgKm9wIEFUVFJJQlVURV9VTlVTRUQsCisrCSBzdHJ1Y3QgZGlzYXNzZW1ibGVfaW5mbyAqaW5mbywKKysJIHN0cnVjdCBhdnIzMl9maWVsZF92YWx1ZSAqaWZpZWxkcyBBVFRSSUJVVEVfVU5VU0VEKQorK3sKKysgIGluZm8tPmZwcmludGZfZnVuYyhpbmZvLT5zdHJlYW0sICJzcCIpOworKyAgcmV0dXJuIDE7CisrfQorKworK3N0YXRpYyBpbnQKKytwcmludF9zcF9kaXNwKHN0cnVjdCBhdnIzMl9vcGVyYW5kICpvcCwKKysJICAgICAgc3RydWN0IGRpc2Fzc2VtYmxlX2luZm8gKmluZm8sCisrCSAgICAgIHN0cnVjdCBhdnIzMl9maWVsZF92YWx1ZSAqaWZpZWxkcykKKyt7CisrICBpbmZvLT5mcHJpbnRmX2Z1bmMoaW5mby0+c3RyZWFtLCAic3BbMHglbHhdIiwKKysJCSAgICAgaWZpZWxkc1swXS52YWx1ZSA8PCBvcC0+YWxpZ25fb3JkZXIpOworKyAgcmV0dXJuIDE7CisrfQorKworK3N0YXRpYyBpbnQKKytwcmludF9jcG5vKHN0cnVjdCBhdnIzMl9vcGVyYW5kICpvcCBBVFRSSUJVVEVfVU5VU0VELAorKwkgICBzdHJ1Y3QgZGlzYXNzZW1ibGVfaW5mbyAqaW5mbywKKysJICAgc3RydWN0IGF2cjMyX2ZpZWxkX3ZhbHVlICppZmllbGRzKQorK3sKKysgIGluZm8tPmZwcmludGZfZnVuYyhpbmZvLT5zdHJlYW0sICJjcCVsdSIsIGlmaWVsZHNbMF0udmFsdWUpOworKyAgcmV0dXJuIDE7CisrfQorKworK3N0YXRpYyBpbnQKKytwcmludF9jcHJlZyhzdHJ1Y3QgYXZyMzJfb3BlcmFuZCAqb3AsCisrCSAgICBzdHJ1Y3QgZGlzYXNzZW1ibGVfaW5mbyAqaW5mbywKKysJICAgIHN0cnVjdCBhdnIzMl9maWVsZF92YWx1ZSAqaWZpZWxkcykKKyt7CisrICBpbmZvLT5mcHJpbnRmX2Z1bmMoaW5mby0+c3RyZWFtLCAiY3IlbHUiLAorKwkJICAgICBpZmllbGRzWzBdLnZhbHVlIDw8IG9wLT5hbGlnbl9vcmRlcik7CisrICByZXR1cm4gMTsKKyt9CisrCisrc3RhdGljIGludAorK3ByaW50X3Vjb25zdChzdHJ1Y3QgYXZyMzJfb3BlcmFuZCAqb3AsCisrCSAgICAgc3RydWN0IGRpc2Fzc2VtYmxlX2luZm8gKmluZm8sCisrCSAgICAgc3RydWN0IGF2cjMyX2ZpZWxkX3ZhbHVlICppZmllbGRzKQorK3sKKysgIGluZm8tPmZwcmludGZfZnVuYyhpbmZvLT5zdHJlYW0sICIweCVseCIsCisrCQkgICAgIGlmaWVsZHNbMF0udmFsdWUgPDwgb3AtPmFsaWduX29yZGVyKTsKKysgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50CisrcHJpbnRfc2NvbnN0KHN0cnVjdCBhdnIzMl9vcGVyYW5kICpvcCwKKysJICAgICBzdHJ1Y3QgZGlzYXNzZW1ibGVfaW5mbyAqaW5mbywKKysJICAgICBzdHJ1Y3QgYXZyMzJfZmllbGRfdmFsdWUgKmlmaWVsZHMpCisreworKyAgaW5mby0+ZnByaW50Zl9mdW5jKGluZm8tPnN0cmVhbSwgIiVsZCIsCisrCQkgICAgIGdldF9zaWduZWRfdmFsdWUoaWZpZWxkcykgPDwgb3AtPmFsaWduX29yZGVyKTsKKysgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50CisrcHJpbnRfcmVnbGlzdDhfaGVhZCh1bnNpZ25lZCBsb25nIHJlZ21hc2ssIGludCAqY29tbWFwLAorKwkJICAgIHN0cnVjdCBkaXNhc3NlbWJsZV9pbmZvICppbmZvKQorK3sKKysgIGludCBmaXJzdCA9IC0xLCBsYXN0LCBpID0gMDsKKysgIGludCBuZWVkX2NvbW1hID0gMDsKKysKKysgIHdoaWxlIChpIDwgMTIpCisrICAgIHsKKysgICAgICBpZiAoZmlyc3QgPT0gLTEgJiYgKHJlZ21hc2sgJiAxKSkKKysJeworKwkgIGZpcnN0ID0gaTsKKysJfQorKyAgICAgIGVsc2UgaWYgKGZpcnN0ICE9IC0xICYmICEocmVnbWFzayAmIDEpKQorKwl7CisrCSAgbGFzdCA9IGkgLSAxOworKworKwkgIHByaW50X3JlZ2xpc3RfcmFuZ2UoZmlyc3QsIGxhc3QsIHJlZ190YWJsZSwgbmVlZF9jb21tYSwgaW5mbyk7CisrCSAgbmVlZF9jb21tYSA9IDE7CisrCSAgZmlyc3QgPSAtMTsKKysJfQorKworKyAgICAgIGlmIChpIDwgOCkKKysJaSArPSA0OworKyAgICAgIGVsc2UgaWYgKGkgPCAxMCkKKysJaSArPSAyOworKyAgICAgIGVsc2UKKysJaSsrOworKyAgICAgIHJlZ21hc2sgPj49IDE7CisrICAgIH0KKysKKysgICpjb21tYXAgPSBuZWVkX2NvbW1hOworKyAgcmV0dXJuIGZpcnN0OworK30KKysKKytzdGF0aWMgdm9pZAorK3ByaW50X3JlZ2xpc3Q4X3RhaWwodW5zaWduZWQgbG9uZyByZWdtYXNrLCBpbnQgZmlyc3QsIGludCBuZWVkX2NvbW1hLAorKwkJICAgIHN0cnVjdCBkaXNhc3NlbWJsZV9pbmZvICppbmZvKQorK3sKKysgIGludCBsYXN0ID0gMTE7CisrCisrICBpZiAocmVnbWFzayAmIDB4MjApCisrICAgIHsKKysgICAgICBpZiAoZmlyc3QgPT0gLTEpCisrCWZpcnN0ID0gMTI7CisrICAgICAgbGFzdCA9IDEyOworKyAgICB9CisrCisrICBpZiAoZmlyc3QgIT0gLTEpCisrICAgIHsKKysgICAgICBwcmludF9yZWdsaXN0X3JhbmdlKGZpcnN0LCBsYXN0LCByZWdfdGFibGUsIG5lZWRfY29tbWEsIGluZm8pOworKyAgICAgIG5lZWRfY29tbWEgPSAxOworKyAgICAgIGZpcnN0ID0gLTE7CisrICAgIH0KKysKKysgIGlmIChyZWdtYXNrICYgMHg0MCkKKysgICAgeworKyAgICAgIGlmIChmaXJzdCA9PSAtMSkKKysJZmlyc3QgPSAxNDsKKysgICAgICBsYXN0ID0gMTQ7CisrICAgIH0KKysKKysgIGlmIChyZWdtYXNrICYgMHg4MCkKKysgICAgeworKyAgICAgIGlmIChmaXJzdCA9PSAtMSkKKysJZmlyc3QgPSAxNTsKKysgICAgICBsYXN0ID0gMTU7CisrICAgIH0KKysKKysgIGlmIChmaXJzdCAhPSAtMSkKKysgICAgcHJpbnRfcmVnbGlzdF9yYW5nZShmaXJzdCwgbGFzdCwgcmVnX3RhYmxlLCBuZWVkX2NvbW1hLCBpbmZvKTsKKyt9CisrCisrc3RhdGljIGludAorK3ByaW50X3JlZ2xpc3Q4KHN0cnVjdCBhdnIzMl9vcGVyYW5kICpvcCBBVFRSSUJVVEVfVU5VU0VELAorKwkgICAgICAgc3RydWN0IGRpc2Fzc2VtYmxlX2luZm8gKmluZm8sCisrCSAgICAgICBzdHJ1Y3QgYXZyMzJfZmllbGRfdmFsdWUgKmlmaWVsZHMpCisreworKyAgdW5zaWduZWQgbG9uZyByZWdtYXNrID0gaWZpZWxkc1swXS52YWx1ZTsKKysgIGludCBmaXJzdCwgbmVlZF9jb21tYTsKKysKKysgIGZpcnN0ID0gcHJpbnRfcmVnbGlzdDhfaGVhZChyZWdtYXNrLCAmbmVlZF9jb21tYSwgaW5mbyk7CisrICBwcmludF9yZWdsaXN0OF90YWlsKHJlZ21hc2ssIGZpcnN0LCBuZWVkX2NvbW1hLCBpbmZvKTsKKysKKysgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50CisrcHJpbnRfcmVnbGlzdDkoc3RydWN0IGF2cjMyX29wZXJhbmQgKm9wIEFUVFJJQlVURV9VTlVTRUQsCisrCSAgICAgICBzdHJ1Y3QgZGlzYXNzZW1ibGVfaW5mbyAqaW5mbywKKysJICAgICAgIHN0cnVjdCBhdnIzMl9maWVsZF92YWx1ZSAqaWZpZWxkcykKKyt7CisrICB1bnNpZ25lZCBsb25nIHJlZ21hc2sgPSBpZmllbGRzWzBdLnZhbHVlID4+IDE7CisrICBpbnQgZmlyc3QsIGxhc3QsIG5lZWRfY29tbWE7CisrCisrICBmaXJzdCA9IHByaW50X3JlZ2xpc3Q4X2hlYWQocmVnbWFzaywgJm5lZWRfY29tbWEsIGluZm8pOworKworKyAgaWYgKChpZmllbGRzWzBdLnZhbHVlICYgMHgxMDEpID09IDB4MTAxKQorKyAgICB7CisrICAgICAgaWYgKGZpcnN0ICE9IC0xKQorKwl7CisrCSAgbGFzdCA9IDExOworKworKwkgIHByaW50X3JlZ2xpc3RfcmFuZ2UoZmlyc3QsIGxhc3QsIHJlZ190YWJsZSwgbmVlZF9jb21tYSwgaW5mbyk7CisrCSAgbmVlZF9jb21tYSA9IDE7CisrCSAgZmlyc3QgPSAtMTsKKysJfQorKworKyAgICAgIHByaW50X3JlZ2xpc3RfcmFuZ2UoMTUsIDE1LCByZWdfdGFibGUsIG5lZWRfY29tbWEsIGluZm8pOworKworKyAgICAgIHJlZ21hc2sgPj49IDU7CisrCisrICAgICAgaWYgKChyZWdtYXNrICYgMykgPT0gMCkKKysJaW5mby0+ZnByaW50Zl9mdW5jKGluZm8tPnN0cmVhbSwgIixyMTI9MCIpOworKyAgICAgIGVsc2UgaWYgKChyZWdtYXNrICYgMykgPT0gMSkKKysJaW5mby0+ZnByaW50Zl9mdW5jKGluZm8tPnN0cmVhbSwgIixyMTI9MSIpOworKyAgICAgIGVsc2UKKysJaW5mby0+ZnByaW50Zl9mdW5jKGluZm8tPnN0cmVhbSwgIixyMTI9LTEiKTsKKysgICAgfQorKyAgZWxzZQorKyAgICAgIHByaW50X3JlZ2xpc3Q4X3RhaWwocmVnbWFzaywgZmlyc3QsIG5lZWRfY29tbWEsIGluZm8pOworKworKyAgcmV0dXJuIDE7CisrfQorKworK3N0YXRpYyBpbnQKKytwcmludF9yZWdsaXN0MTYoc3RydWN0IGF2cjMyX29wZXJhbmQgKm9wIEFUVFJJQlVURV9VTlVTRUQsCisrCQlzdHJ1Y3QgZGlzYXNzZW1ibGVfaW5mbyAqaW5mbywKKysJCXN0cnVjdCBhdnIzMl9maWVsZF92YWx1ZSAqaWZpZWxkcykKKyt7CisrICB1bnNpZ25lZCBsb25nIHJlZ21hc2sgPSBpZmllbGRzWzBdLnZhbHVlOworKyAgdW5zaWduZWQgaW50IGkgPSAwLCBmaXJzdCwgbGFzdDsKKysgIGludCBuZWVkX2NvbW1hID0gMDsKKysKKysgIHdoaWxlIChpIDwgMTYpCisrICAgIHsKKysgICAgICBpZiAocmVnbWFzayAmIDEpCisrCXsKKysJICBmaXJzdCA9IGk7CisrCSAgd2hpbGUgKGkgPCAxNikKKysJICAgIHsKKysJICAgICAgaSsrOworKwkgICAgICByZWdtYXNrID4+PSAxOworKwkgICAgICBpZiAoIShyZWdtYXNrICYgMSkpCisrCQlicmVhazsKKysJICAgIH0KKysJICBsYXN0ID0gaSAtIDE7CisrCSAgcHJpbnRfcmVnbGlzdF9yYW5nZShmaXJzdCwgbGFzdCwgcmVnX3RhYmxlLCBuZWVkX2NvbW1hLCBpbmZvKTsKKysJICBuZWVkX2NvbW1hID0gMTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGkrKzsKKysJICByZWdtYXNrID4+PSAxOworKwl9CisrICAgIH0KKysKKysgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50CisrcHJpbnRfcmVnbGlzdF9sZG0oc3RydWN0IGF2cjMyX29wZXJhbmQgKm9wLAorKwkJICBzdHJ1Y3QgZGlzYXNzZW1ibGVfaW5mbyAqaW5mbywKKysJCSAgc3RydWN0IGF2cjMyX2ZpZWxkX3ZhbHVlICppZmllbGRzKQorK3sKKysgIGludCBycCwgd19iaXQ7CisrICBpbnQgaSwgZmlyc3QsIGxhc3Q7CisrICB1bnNpZ25lZCBsb25nIHJlZ21hc2s7CisrCisrICBycCA9IGlmaWVsZHNbMF0udmFsdWU7CisrICB3X2JpdCA9IGlmaWVsZHNbMV0udmFsdWU7CisrICByZWdtYXNrID0gaWZpZWxkc1syXS52YWx1ZTsKKysKKysgIGlmIChyZWdtYXNrICYgKDEgPDwgQVZSMzJfUkVHX1BDKSAmJiBycCA9PSBBVlIzMl9SRUdfUEMpCisrICAgIHsKKysgICAgICBpZiAod19iaXQpCisrCWluZm8tPmZwcmludGZfZnVuYyhpbmZvLT5zdHJlYW0sICJzcCsrIik7CisrICAgICAgZWxzZQorKwlpbmZvLT5mcHJpbnRmX2Z1bmMoaW5mby0+c3RyZWFtLCAic3AiKTsKKysKKysgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7ICkKKysJeworKwkgIGlmIChyZWdtYXNrICYgKDEgPDwgaSkpCisrCSAgICB7CisrCSAgICAgIGZpcnN0ID0gaTsKKysJICAgICAgd2hpbGUgKGkgPCAxMikKKysJCXsKKysJCSAgaSsrOworKwkJICBpZiAoIShyZWdtYXNrICYgKDEgPDwgaSkpKQorKwkJICAgIGJyZWFrOworKwkJfQorKwkgICAgICBsYXN0ID0gaSAtIDE7CisrCSAgICAgIHByaW50X3JlZ2xpc3RfcmFuZ2UoZmlyc3QsIGxhc3QsIHJlZ190YWJsZSwgMSwgaW5mbyk7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgaSsrOworKwl9CisrCisrICAgICAgaW5mby0+ZnByaW50Zl9mdW5jKGluZm8tPnN0cmVhbSwgIixwYyIpOworKyAgICAgIGlmIChyZWdtYXNrICYgKDEgPDwgQVZSMzJfUkVHX0xSKSkKKysJaW5mby0+ZnByaW50Zl9mdW5jKGluZm8tPnN0cmVhbSwgIixyMTI9LTEiKTsKKysgICAgICBlbHNlIGlmIChyZWdtYXNrICYgKDEgPDwgQVZSMzJfUkVHX1IxMikpCisrCWluZm8tPmZwcmludGZfZnVuYyhpbmZvLT5zdHJlYW0sICIscjEyPTEiKTsKKysgICAgICBlbHNlCisrCWluZm8tPmZwcmludGZfZnVuYyhpbmZvLT5zdHJlYW0sICIscjEyPTAiKTsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgaWYgKHdfYml0KQorKwlpbmZvLT5mcHJpbnRmX2Z1bmMoaW5mby0+c3RyZWFtLCAiJXMrKywiLCByZWdfdGFibGVbcnBdLm5hbWUpOworKyAgICAgIGVsc2UKKysJaW5mby0+ZnByaW50Zl9mdW5jKGluZm8tPnN0cmVhbSwgIiVzLCIsIHJlZ190YWJsZVtycF0ubmFtZSk7CisrCisrICAgICAgcHJpbnRfcmVnbGlzdDE2KG9wLCBpbmZvLCBpZmllbGRzICsgMik7CisrICAgIH0KKysKKysgIHJldHVybiAzOworK30KKysKKytzdGF0aWMgaW50CisrcHJpbnRfcmVnbGlzdF9jcDgoc3RydWN0IGF2cjMyX29wZXJhbmQgKm9wIEFUVFJJQlVURV9VTlVTRUQsCisrCQkgIHN0cnVjdCBkaXNhc3NlbWJsZV9pbmZvICppbmZvLAorKwkJICBzdHJ1Y3QgYXZyMzJfZmllbGRfdmFsdWUgKmlmaWVsZHMpCisreworKyAgdW5zaWduZWQgbG9uZyByZWdtYXNrID0gaWZpZWxkc1swXS52YWx1ZTsKKysgIHVuc2lnbmVkIGludCBpID0gMCwgZmlyc3QsIGxhc3QsIG9mZnNldCA9IDA7CisrICBpbnQgbmVlZF9jb21tYSA9IDA7CisrCisrICBpZiAoaWZpZWxkc1sxXS52YWx1ZSkKKysgICAgb2Zmc2V0ID0gODsKKysKKysgIHdoaWxlIChpIDwgOCkKKysgICAgeworKyAgICAgIGlmIChyZWdtYXNrICYgMSkKKysJeworKwkgIGZpcnN0ID0gaTsKKysJICB3aGlsZSAoaSA8IDgpCisrCSAgICB7CisrCSAgICAgIGkrKzsKKysJICAgICAgcmVnbWFzayA+Pj0gMTsKKysJICAgICAgaWYgKCEocmVnbWFzayAmIDEpKQorKwkJYnJlYWs7CisrCSAgICB9CisrCSAgbGFzdCA9IGkgLSAxOworKwkgIHByaW50X3JlZ2xpc3RfcmFuZ2Uob2Zmc2V0ICsgZmlyc3QsIG9mZnNldCArIGxhc3QsCisrCQkJICAgICAgY3JfdGFibGUsIG5lZWRfY29tbWEsIGluZm8pOworKwkgIG5lZWRfY29tbWEgPSAxOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgaSsrOworKwkgIHJlZ21hc2sgPj49IDE7CisrCX0KKysgICAgfQorKworKyAgcmV0dXJuIDI7CisrfQorKworK3N0YXRpYyBpbnQKKytwcmludF9yZWdsaXN0X2NwZDgoc3RydWN0IGF2cjMyX29wZXJhbmQgKm9wIEFUVFJJQlVURV9VTlVTRUQsCisrCQkgICBzdHJ1Y3QgZGlzYXNzZW1ibGVfaW5mbyAqaW5mbywKKysJCSAgIHN0cnVjdCBhdnIzMl9maWVsZF92YWx1ZSAqaWZpZWxkcykKKyt7CisrICB1bnNpZ25lZCBsb25nIHJlZ21hc2sgPSBpZmllbGRzWzBdLnZhbHVlOworKyAgdW5zaWduZWQgaW50IGkgPSAwLCBmaXJzdCwgbGFzdDsKKysgIGludCBuZWVkX2NvbW1hID0gMDsKKysKKysgIHdoaWxlIChpIDwgOCkKKysgICAgeworKyAgICAgIGlmIChyZWdtYXNrICYgMSkKKysJeworKwkgIGZpcnN0ID0gMiAqIGk7CisrCSAgd2hpbGUgKGkgPCA4KQorKwkgICAgeworKwkgICAgICBpKys7CisrCSAgICAgIHJlZ21hc2sgPj49IDE7CisrCSAgICAgIGlmICghKHJlZ21hc2sgJiAxKSkKKysJCWJyZWFrOworKwkgICAgfQorKwkgIGxhc3QgPSAyICogKGkgLSAxKSArIDE7CisrCSAgcHJpbnRfcmVnbGlzdF9yYW5nZShmaXJzdCwgbGFzdCwgY3JfdGFibGUsIG5lZWRfY29tbWEsIGluZm8pOworKwkgIG5lZWRfY29tbWEgPSAxOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgaSsrOworKwkgIHJlZ21hc2sgPj49IDE7CisrCX0KKysgICAgfQorKworKyAgcmV0dXJuIDE7CisrfQorKworK3N0YXRpYyBpbnQKKytwcmludF9yZXR2YWwoc3RydWN0IGF2cjMyX29wZXJhbmQgKm9wIEFUVFJJQlVURV9VTlVTRUQsCisrCSAgICAgc3RydWN0IGRpc2Fzc2VtYmxlX2luZm8gKmluZm8sCisrCSAgICAgc3RydWN0IGF2cjMyX2ZpZWxkX3ZhbHVlICppZmllbGRzKQorK3sKKysgIHVuc2lnbmVkIGxvbmcgcmVnaWQgPSBpZmllbGRzWzBdLnZhbHVlOworKyAgY29uc3QgY2hhciAqcmV0dmFsOworKworKyAgaWYgKHJlZ2lkIDwgQVZSMzJfUkVHX1NQKQorKyAgICByZXR2YWwgPSByZWdfdGFibGVbcmVnaWRdLm5hbWU7CisrICBlbHNlIGlmIChyZWdpZCA9PSBBVlIzMl9SRUdfU1ApCisrICAgIHJldHZhbCA9ICIwIjsKKysgIGVsc2UgaWYgKHJlZ2lkID09IEFWUjMyX1JFR19MUikKKysgICAgcmV0dmFsID0gIi0xIjsKKysgIGVsc2UKKysgICAgcmV0dmFsID0gIjEiOworKworKyAgaW5mby0+ZnByaW50Zl9mdW5jKGluZm8tPnN0cmVhbSwgIiVzIiwgcmV0dmFsKTsKKysKKysgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50CisrcHJpbnRfbWNhbGwoc3RydWN0IGF2cjMyX29wZXJhbmQgKm9wLAorKwkgICAgc3RydWN0IGRpc2Fzc2VtYmxlX2luZm8gKmluZm8sCisrCSAgICBzdHJ1Y3QgYXZyMzJfZmllbGRfdmFsdWUgKmlmaWVsZHMpCisreworKyAgdW5zaWduZWQgbG9uZyByZWdpZCA9IGlmaWVsZHNbMF0udmFsdWU7CisrCisrICBpZiAocmVnaWQgPT0gQVZSMzJfUkVHX1BDKQorKyAgICBwcmludF9qbXBsYWJlbChvcCwgaW5mbywgaWZpZWxkcyArIDEpOworKyAgZWxzZQorKyAgICBwcmludF9pbnRyZWdfc2Rpc3Aob3AsIGluZm8sIGlmaWVsZHMpOworKworKyAgcmV0dXJuIDI7CisrfQorKworK3N0YXRpYyBpbnQKKytwcmludF9qb3NwaW5jKHN0cnVjdCBhdnIzMl9vcGVyYW5kICpvcCBBVFRSSUJVVEVfVU5VU0VELAorKwkgICAgICBzdHJ1Y3QgZGlzYXNzZW1ibGVfaW5mbyAqaW5mbywKKysJICAgICAgc3RydWN0IGF2cjMyX2ZpZWxkX3ZhbHVlICppZmllbGRzKQorK3sKKysgIHNpZ25lZCBsb25nIHZhbHVlID0gaWZpZWxkc1swXS52YWx1ZTsKKysKKysgIGlmICh2YWx1ZSA+PSA0KQorKyAgICB2YWx1ZSAtPSA4OworKyAgZWxzZQorKyAgICB2YWx1ZSArPSAxOworKworKyAgaW5mby0+ZnByaW50Zl9mdW5jKGluZm8tPnN0cmVhbSwgIiVsZCIsIHZhbHVlKTsKKysKKysgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50CisrcHJpbnRfY29oKHN0cnVjdCBhdnIzMl9vcGVyYW5kICpvcCBBVFRSSUJVVEVfVU5VU0VELAorKwkgIHN0cnVjdCBkaXNhc3NlbWJsZV9pbmZvICppbmZvLAorKwkgIHN0cnVjdCBhdnIzMl9maWVsZF92YWx1ZSAqaWZpZWxkcyBBVFRSSUJVVEVfVU5VU0VEKQorK3sKKysgIGluZm8tPmZwcmludGZfZnVuYyhpbmZvLT5zdHJlYW0sICJDT0giKTsKKysgIHJldHVybiAwOworK30KKysKKysjZGVmaW5lIE9QKG5hbWUsIHNnbiwgcGNyZWwsIGFsaWduLCBmdW5jKSBcCisrICB7IEFWUjMyX09QRVJBTkRfIyNuYW1lLCBwY3JlbCwgYWxpZ24sIHByaW50XyMjZnVuYyB9CisrCisrc3RydWN0IGF2cjMyX29wZXJhbmQgb3BlcmFuZFtBVlIzMl9OUl9PUEVSQU5EU10gPQorKyAgeworKyAgICBPUChJTlRSRUcsIDAsIDAsIDAsIGludHJlZyksCisrICAgIE9QKElOVFJFR19QUkVERUMsIDAsIDAsIDAsIGludHJlZ19wcmVkZWMpLAorKyAgICBPUChJTlRSRUdfUE9TVElOQywgMCwgMCwgMCwgaW50cmVnX3Bvc3RpbmMpLAorKyAgICBPUChJTlRSRUdfTFNMLCAwLCAwLCAwLCBpbnRyZWdfbHNsKSwKKysgICAgT1AoSU5UUkVHX0xTUiwgMCwgMCwgMCwgaW50cmVnX2xzciksCisrICAgIE9QKElOVFJFR19CU0VMLCAwLCAwLCAwLCBpbnRyZWdfYnBhcnQpLAorKyAgICBPUChJTlRSRUdfSFNFTCwgMCwgMCwgMSwgaW50cmVnX2hwYXJ0KSwKKysgICAgT1AoSU5UUkVHX1NESVNQLCAxLCAwLCAwLCBpbnRyZWdfc2Rpc3ApLAorKyAgICBPUChJTlRSRUdfU0RJU1BfSCwgMSwgMCwgMSwgaW50cmVnX3NkaXNwKSwKKysgICAgT1AoSU5UUkVHX1NESVNQX1csIDEsIDAsIDIsIGludHJlZ19zZGlzcCksCisrICAgIE9QKElOVFJFR19VRElTUCwgMCwgMCwgMCwgaW50cmVnX3VkaXNwKSwKKysgICAgT1AoSU5UUkVHX1VESVNQX0gsIDAsIDAsIDEsIGludHJlZ191ZGlzcCksCisrICAgIE9QKElOVFJFR19VRElTUF9XLCAwLCAwLCAyLCBpbnRyZWdfdWRpc3ApLAorKyAgICBPUChJTlRSRUdfSU5ERVgsIDAsIDAsIDAsIGludHJlZ19pbmRleCksCisrICAgIE9QKElOVFJFR19YSU5ERVgsIDAsIDAsIDAsIGludHJlZ194aW5kZXgpLAorKyAgICBPUChEV1JFRywgMCwgMCwgMSwgaW50cmVnKSwKKysgICAgT1AoUENfVURJU1BfVywgMCwgMSwgMiwgcGNfZGlzcCksCisrICAgIE9QKFNQLCAwLCAwLCAwLCBzcCksCisrICAgIE9QKFNQX1VESVNQX1csIDAsIDAsIDIsIHNwX2Rpc3ApLAorKyAgICBPUChDUE5PLCAwLCAwLCAwLCBjcG5vKSwKKysgICAgT1AoQ1BSRUcsIDAsIDAsIDAsIGNwcmVnKSwKKysgICAgT1AoQ1BSRUdfRCwgMCwgMCwgMSwgY3ByZWcpLAorKyAgICBPUChVTlNJR05FRF9DT05TVCwgMCwgMCwgMCwgdWNvbnN0KSwKKysgICAgT1AoVU5TSUdORURfQ09OU1RfVywgMCwgMCwgMiwgdWNvbnN0KSwKKysgICAgT1AoU0lHTkVEX0NPTlNULCAxLCAwLCAwLCBzY29uc3QpLAorKyAgICBPUChTSUdORURfQ09OU1RfVywgMSwgMCwgMiwgc2NvbnN0KSwKKysgICAgT1AoSk1QTEFCRUwsIDEsIDEsIDEsIGptcGxhYmVsKSwKKysgICAgT1AoVU5TSUdORURfTlVNQkVSLCAwLCAwLCAwLCB1Y29uc3QpLAorKyAgICBPUChVTlNJR05FRF9OVU1CRVJfVywgMCwgMCwgMiwgdWNvbnN0KSwKKysgICAgT1AoUkVHTElTVDgsIDAsIDAsIDAsIHJlZ2xpc3Q4KSwKKysgICAgT1AoUkVHTElTVDksIDAsIDAsIDAsIHJlZ2xpc3Q5KSwKKysgICAgT1AoUkVHTElTVDE2LCAwLCAwLCAwLCByZWdsaXN0MTYpLAorKyAgICBPUChSRUdMSVNUX0xETSwgMCwgMCwgMCwgcmVnbGlzdF9sZG0pLAorKyAgICBPUChSRUdMSVNUX0NQOCwgMCwgMCwgMCwgcmVnbGlzdF9jcDgpLAorKyAgICBPUChSRUdMSVNUX0NQRDgsIDAsIDAsIDAsIHJlZ2xpc3RfY3BkOCksCisrICAgIE9QKFJFVFZBTCwgMCwgMCwgMCwgcmV0dmFsKSwKKysgICAgT1AoTUNBTEwsIDEsIDAsIDIsIG1jYWxsKSwKKysgICAgT1AoSk9TUElOQywgMCwgMCwgMCwgam9zcGluYyksCisrICAgIE9QKENPSCwgMCwgMCwgMCwgY29oKSwKKysgIH07CisrCisrc3RhdGljIHZvaWQKKytwcmludF9vcGNvZGUoYmZkX3ZtYSBpbnNuX3dvcmQsIGNvbnN0IHN0cnVjdCBhdnIzMl9vcGNvZGUgKm9wYywKKysJICAgICBiZmRfdm1hIHBjLCBzdHJ1Y3QgZGlzYXNzZW1ibGVfaW5mbyAqaW5mbykKKyt7CisrICBjb25zdCBzdHJ1Y3QgYXZyMzJfc3ludGF4ICpzeW50YXggPSBvcGMtPnN5bnRheDsKKysgIHN0cnVjdCBhdnIzMl9maWVsZF92YWx1ZSBmaWVsZHNbQVZSMzJfTUFYX0ZJRUxEU107CisrICB1bnNpZ25lZCBpbnQgaSwgbmV4dF9maWVsZCA9IDAsIG5yX29wZXJhbmRzOworKworKyAgZm9yIChpID0gMDsgaSA8IG9wYy0+bnJfZmllbGRzOyBpKyspCisrICAgIHsKKysgICAgICBvcGMtPmZpZWxkc1tpXS0+ZXh0cmFjdChvcGMtPmZpZWxkc1tpXSwgJmluc25fd29yZCwgJmZpZWxkc1tpXS52YWx1ZSk7CisrICAgICAgZmllbGRzW2ldLmlmaWVsZCA9IG9wYy0+ZmllbGRzW2ldOworKyAgICB9CisrCisrICBjdXJyZW50X3BjID0gcGM7CisrICBpbmZvLT5mcHJpbnRmX2Z1bmMoaW5mby0+c3RyZWFtLCAiJXMiLCBzeW50YXgtPm1uZW1vbmljLT5uYW1lKTsKKysKKysgIGlmIChzeW50YXgtPm5yX29wZXJhbmRzIDwgMCkKKysgICAgbnJfb3BlcmFuZHMgPSAodW5zaWduZWQgaW50KSAtc3ludGF4LT5ucl9vcGVyYW5kczsKKysgIGVsc2UKKysgICAgbnJfb3BlcmFuZHMgPSAodW5zaWduZWQgaW50KSBzeW50YXgtPm5yX29wZXJhbmRzOworKworKyAgZm9yIChpID0gMDsgaSA8IG5yX29wZXJhbmRzOyBpKyspCisrICAgIHsKKysgICAgICBzdHJ1Y3QgYXZyMzJfb3BlcmFuZCAqb3AgPSAmb3BlcmFuZFtzeW50YXgtPm9wZXJhbmRbaV1dOworKworKyAgICAgIGlmIChpKQorKwlpbmZvLT5mcHJpbnRmX2Z1bmMoaW5mby0+c3RyZWFtLCAiLCIpOworKyAgICAgIGVsc2UKKysJaW5mby0+ZnByaW50Zl9mdW5jKGluZm8tPnN0cmVhbSwgIlx0Iik7CisrICAgICAgbmV4dF9maWVsZCArPSBvcC0+cHJpbnQob3AsIGluZm8sICZmaWVsZHNbbmV4dF9maWVsZF0pOworKyAgICB9CisrfQorKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXZyMzJfb3Bjb2RlICoKKytmaW5kX29wY29kZShiZmRfdm1hIGluc25fd29yZCkKKyt7CisrICBpbnQgaTsKKysKKysgIGZvciAoaSA9IDA7IGkgPCBBVlIzMl9OUl9PUENPREVTOyBpKyspCisrICAgIHsKKysgICAgICBjb25zdCBzdHJ1Y3QgYXZyMzJfb3Bjb2RlICpvcGMgPSAmYXZyMzJfb3BjX3RhYmxlW2ldOworKworKyAgICAgIGlmICgoaW5zbl93b3JkICYgb3BjLT5tYXNrKSA9PSBvcGMtPnZhbHVlKQorKwlyZXR1cm4gb3BjOworKyAgICB9CisrCisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrc3RhdGljIGludAorK3JlYWRfaW5zbl93b3JkKGJmZF92bWEgcGMsIGJmZF92bWEgKnZhbHVlcCwKKysJICAgICAgIHN0cnVjdCBkaXNhc3NlbWJsZV9pbmZvICppbmZvKQorK3sKKysgIGJmZF9ieXRlIGJbNF07CisrICBpbnQgc3RhdHVzOworKworKyAgc3RhdHVzID0gaW5mby0+cmVhZF9tZW1vcnlfZnVuYyhwYywgYiwgNCwgaW5mbyk7CisrICBpZiAoc3RhdHVzKQorKyAgICB7CisrICAgICAgc3RhdHVzID0gaW5mby0+cmVhZF9tZW1vcnlfZnVuYyhwYywgYiwgMiwgaW5mbyk7CisrICAgICAgaWYgKHN0YXR1cykKKysJeworKwkgIGluZm8tPm1lbW9yeV9lcnJvcl9mdW5jKHN0YXR1cywgcGMsIGluZm8pOworKwkgIHJldHVybiAtMTsKKysJfQorKyAgICAgIGJbM10gPSBiWzJdID0gMDsKKysgICAgfQorKworKyAgKnZhbHVlcCA9ICAoYlswXSA8PCAyNCkgfCAoYlsxXSA8PCAxNikgfCAoYlsyXSA8PCA4KSB8IGJbM107CisrICByZXR1cm4gMDsKKyt9CisrCisrLyogUGFyc2UgYW4gaW5kaXZpZHVhbCBkaXNhc3NlbWJsZXIgb3B0aW9uLiAgKi8KKysKKyt2b2lkCisrcGFyc2VfYXZyMzJfZGlzYXNzZW1ibGVyX29wdGlvbiAob3B0aW9uKQorKyAgICAgY2hhciAqIG9wdGlvbjsKKyt7CisrICBpZiAob3B0aW9uID09IE5VTEwpCisrICAgIHJldHVybjsKKysKKysgIC8qIFhYWCAtIHNob3VsZCBicmVhayAnb3B0aW9uJyBhdCBmb2xsb3dpbmcgZGVsaW1pdGVyLiAgKi8KKysgIGZwcmludGYgKHN0ZGVyciwgXygiVW5yZWNvZ25pc2VkIGRpc2Fzc2VtYmxlciBvcHRpb246ICVzXG4iKSwgb3B0aW9uKTsKKysKKysgIHJldHVybjsKKyt9CisrCisrLyogUGFyc2UgdGhlIHN0cmluZyBvZiBkaXNhc3NlbWJsZXIgb3B0aW9ucywgc3BsaXRpbmcgaXQgYXQgd2hpdGVzcGFjZXMKKysgICBvciBjb21tYXMuICAoV2hpdGVzcGFjZSBzZXBhcmF0b3JzIHN1cHBvcnRlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpLiAgKi8KKysKKytzdGF0aWMgdm9pZAorK3BhcnNlX2Rpc2Fzc2VtYmxlcl9vcHRpb25zIChjaGFyICpvcHRpb25zKQorK3sKKysgIGlmIChvcHRpb25zID09IE5VTEwpCisrICAgIHJldHVybjsKKysKKysgIHdoaWxlICgqb3B0aW9ucykKKysgICAgeworKyAgICAgIHBhcnNlX2F2cjMyX2Rpc2Fzc2VtYmxlcl9vcHRpb24gKG9wdGlvbnMpOworKworKyAgICAgIC8qIFNraXAgZm9yd2FyZCB0byBuZXh0IHNlcGVyYXRvci4gICovCisrICAgICAgd2hpbGUgKCgqb3B0aW9ucykgJiYgKCEgSVNTUEFDRSAoKm9wdGlvbnMpKSAmJiAoKm9wdGlvbnMgIT0gJywnKSkKKysJKysgb3B0aW9uczsKKysgICAgICAvKiBTa2lwIGZvcndhcmQgcGFzdCBzZXBlcmF0b3JzLiAgKi8KKysgICAgICB3aGlsZSAoSVNTUEFDRSAoKm9wdGlvbnMpIHx8ICgqb3B0aW9ucyA9PSAnLCcpKQorKwkrKyBvcHRpb25zOworKyAgICB9CisrfQorKworK2ludAorK3ByaW50X2luc25fYXZyMzIoYmZkX3ZtYSBwYywgc3RydWN0IGRpc2Fzc2VtYmxlX2luZm8gKmluZm8pCisreworKyAgYmZkX3ZtYSBpbnNuX3dvcmQ7CisrICBjb25zdCBzdHJ1Y3QgYXZyMzJfb3Bjb2RlICpvcGM7CisrCisrICBpZiAoaW5mby0+ZGlzYXNzZW1ibGVyX29wdGlvbnMpCisrICAgIHsKKysgICAgICBwYXJzZV9kaXNhc3NlbWJsZXJfb3B0aW9ucyAoaW5mby0+ZGlzYXNzZW1ibGVyX29wdGlvbnMpOworKworKyAgICAgIC8qIFRvIGF2b2lkIHJlcGVhdGVkIHBhcnNpbmcgb2YgdGhlc2Ugb3B0aW9ucywgd2UgcmVtb3ZlIHRoZW0gaGVyZS4gICovCisrICAgICAgaW5mby0+ZGlzYXNzZW1ibGVyX29wdGlvbnMgPSBOVUxMOworKyAgICB9CisrCisrICBpbmZvLT5ieXRlc19wZXJfY2h1bmsgPSAxOworKyAgaW5mby0+ZGlzcGxheV9lbmRpYW4gPSBCRkRfRU5ESUFOX0JJRzsKKysKKysgIGlmIChyZWFkX2luc25fd29yZChwYywgJmluc25fd29yZCwgaW5mbykpCisrICAgIHJldHVybiAtMTsKKysKKysgIG9wYyA9IGZpbmRfb3Bjb2RlKGluc25fd29yZCk7CisrICBpZiAob3BjKQorKyAgICB7CisrICAgICAgcHJpbnRfb3Bjb2RlKGluc25fd29yZCwgb3BjLCBwYywgaW5mbyk7CisrICAgICAgcmV0dXJuIG9wYy0+c2l6ZTsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgaW5mby0+ZnByaW50Zl9mdW5jKGluZm8tPnN0cmVhbSwgXygiKnVua25vd24qIikpOworKyAgICAgIHJldHVybiAyOworKyAgICB9CisrCisrfQorKworK3ZvaWQKKytwcmludF9hdnIzMl9kaXNhc3NlbWJsZXJfb3B0aW9ucyAoRklMRSAqc3RyZWFtIEFUVFJJQlVURV9VTlVTRUQpCisreworKworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL29wY29kZXMvYXZyMzItb3BjLmMKK0BAIC0wLDAgKzEsNjkzMiBAQAorKy8qIE9wY29kZSB0YWJsZXMgZm9yIEFWUjMyLgorKyAgIENvcHlyaWdodCAyMDA1LCAyMDA2IEF0bWVsIENvcnBvcmF0aW9uLgorKworKyAgIFdyaXR0ZW4gYnkgSGFhdmFyZCBTa2lubmVtb2VuLCBBdG1lbCBOb3J3YXksIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CisrCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlib3Bjb2Rlcy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKysgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKysgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcsIFVTQS4gICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysKKysjaW5jbHVkZSAiYXZyMzItb3BjLmgiCisrCisrI2RlZmluZSBQSUNPX0NQTk8JMQorKworK3ZvaWQKKythdnIzMl9pbnNlcnRfc2ltcGxlKGNvbnN0IHN0cnVjdCBhdnIzMl9pZmllbGQgKmZpZWxkLAorKwkJICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKKyt7CisrICBiZmRfdm1hIHdvcmQ7CisrCisrICB3b3JkID0gYmZkX2dldGIzMihidWYpOworKyAgd29yZCAmPSB+ZmllbGQtPm1hc2s7CisrICB3b3JkIHw9ICh2YWx1ZSA8PCBmaWVsZC0+c2hpZnQpICYgZmllbGQtPm1hc2s7CisrICBiZmRfcHV0YjMyKHdvcmQsIGJ1Zik7CisrfQorKworK3ZvaWQKKythdnIzMl9pbnNlcnRfYml0NWMoY29uc3Qgc3RydWN0IGF2cjMyX2lmaWVsZCAqZmllbGQgQVRUUklCVVRFX1VOVVNFRCwKKysJCSAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKKyt7CisrICBjaGFyICpvcGNvZGUgPSBidWY7CisrCisrICBvcGNvZGVbMF0gPSAob3Bjb2RlWzBdICYgMHhlMSkgfCAodmFsdWUgJiAweDFlKTsKKysgIG9wY29kZVsxXSA9IChvcGNvZGVbMV0gJiAweGVmKSB8ICgodmFsdWUgJiAxKSA8PCA0KTsKKyt9CisrCisrdm9pZAorK2F2cjMyX2luc2VydF9rMTAoY29uc3Qgc3RydWN0IGF2cjMyX2lmaWVsZCAqZmllbGQgQVRUUklCVVRFX1VOVVNFRCwKKysJCSB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCisreworKyAgY2hhciAqb3Bjb2RlID0gYnVmOworKworKyAgb3Bjb2RlWzBdID0gKG9wY29kZVswXSAmIDB4ZjApIHwgKCh2YWx1ZSAmIDB4ZjApID4+IDQpOworKyAgb3Bjb2RlWzFdID0gKChvcGNvZGVbMV0gJiAweDBjKSB8ICgodmFsdWUgJiAweDBmKSA8PCA0KQorKwkgICAgICAgfCAoKHZhbHVlICYgMHgzMDApID4+IDgpKTsKKyt9CisrCisrCisrdm9pZAorK2F2cjMyX2luc2VydF9rMjEoY29uc3Qgc3RydWN0IGF2cjMyX2lmaWVsZCAqZmllbGQsCisrCQkgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIHZhbHVlKQorK3sKKysgIGJmZF92bWEgd29yZDsKKysgIGJmZF92bWEgazIxOworKworKyAgd29yZCA9IGJmZF9nZXRiMzIoYnVmKTsKKysgIHdvcmQgJj0gfmZpZWxkLT5tYXNrOworKyAgazIxID0gKCh2YWx1ZSAmIDB4ZmZmZikgfCAoKHZhbHVlICYgMHgxMDAwMCkgPDwgNCkKKysJIHwgKCh2YWx1ZSAmIDB4MWUwMDAwKSA8PCA4KSk7CisrICBhc3NlcnQoIShrMjEgJiB+ZmllbGQtPm1hc2spKTsKKysgIHdvcmQgfD0gazIxOworKyAgYmZkX3B1dGIzMih3b3JkLCBidWYpOworK30KKysKKyt2b2lkCisrYXZyMzJfaW5zZXJ0X2Nwb3AoY29uc3Qgc3RydWN0IGF2cjMyX2lmaWVsZCAqZmllbGQsCisrCQkgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKKyt7CisrICBiZmRfdm1hIHdvcmQ7CisrCisrICB3b3JkID0gYmZkX2dldGIzMihidWYpOworKyAgd29yZCAmPSB+ZmllbGQtPm1hc2s7CisrICB3b3JkIHw9ICgoKHZhbHVlICYgMHgxZSkgPDwgMTUpIHwgKCh2YWx1ZSAmIDB4NjApIDw8IDIwKQorKwkgICB8ICgodmFsdWUgJiAweDAxKSA8PCAxMikpOworKyAgYmZkX3B1dGIzMih3b3JkLCBidWYpOworK30KKysKKyt2b2lkCisrYXZyMzJfaW5zZXJ0X2sxMmNwKGNvbnN0IHN0cnVjdCBhdnIzMl9pZmllbGQgKmZpZWxkLAorKwkJICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIHZhbHVlKQorK3sKKysgIGJmZF92bWEgd29yZDsKKysKKysgIHdvcmQgPSBiZmRfZ2V0YjMyKGJ1Zik7CisrICB3b3JkICY9IH5maWVsZC0+bWFzazsKKysgIHdvcmQgfD0gKCh2YWx1ZSAmIDB4ZjAwKSA8PCA0KSB8ICh2YWx1ZSAmIDB4ZmYpOworKyAgYmZkX3B1dGIzMih3b3JkLCBidWYpOworK30KKysKKyt2b2lkIGF2cjMyX2V4dHJhY3Rfc2ltcGxlKGNvbnN0IHN0cnVjdCBhdnIzMl9pZmllbGQgKmZpZWxkLAorKwkJCSAgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nICp2YWx1ZSkKKyt7CisrICAvKiBYWFg6IFRoZSBkaXNhc3NlbWJsZXIgaGFzIGRvbmUgYW55IG5lY2Vzc2FyeSBieXRlc3dhcHBpbmcgYWxyZWFkeSAqLworKyAgYmZkX3ZtYSB3b3JkID0gKihiZmRfdm1hICopYnVmOworKworKyAgKnZhbHVlID0gKHdvcmQgJiBmaWVsZC0+bWFzaykgPj4gZmllbGQtPnNoaWZ0OworK30KKysKKyt2b2lkIGF2cjMyX2V4dHJhY3RfYml0NWMoY29uc3Qgc3RydWN0IGF2cjMyX2lmaWVsZCAqZmllbGQgQVRUUklCVVRFX1VOVVNFRCwKKysJCQkgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nICp2YWx1ZSkKKyt7CisrICBiZmRfdm1hIHdvcmQgPSAqKGJmZF92bWEgKilidWY7CisrCisrICAqdmFsdWUgPSAoKHdvcmQgPj4gMjApICYgMSkgfCAoKHdvcmQgPj4gMjQpICYgMHgxZSk7CisrfQorKworK3ZvaWQgYXZyMzJfZXh0cmFjdF9rMTAoY29uc3Qgc3RydWN0IGF2cjMyX2lmaWVsZCAqZmllbGQgQVRUUklCVVRFX1VOVVNFRCwKKysJCSAgICAgICB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgKnZhbHVlKQorK3sKKysgIGJmZF92bWEgd29yZCA9ICooYmZkX3ZtYSAqKWJ1ZjsKKysKKysgICp2YWx1ZSA9ICgod29yZCA+PiA4KSAmIDB4MzAwKSB8ICgod29yZCA+PiAyMCkgJiAweGZmKTsKKyt9CisrCisrdm9pZCBhdnIzMl9leHRyYWN0X2syMShjb25zdCBzdHJ1Y3QgYXZyMzJfaWZpZWxkICpmaWVsZCBBVFRSSUJVVEVfVU5VU0VELAorKwkJICAgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyAqdmFsdWUpCisreworKyAgYmZkX3ZtYSB3b3JkID0gKihiZmRfdm1hICopYnVmOworKworKyAgKnZhbHVlID0gKCh3b3JkICYgMHhmZmZmKSB8ICgod29yZCA+PiA0KSAmIDB4MTAwMDApCisrCSAgICB8ICgod29yZCA+PiA4KSAmIDB4MWUwMDAwKSk7CisrfQorKworK3ZvaWQgYXZyMzJfZXh0cmFjdF9jcG9wKGNvbnN0IHN0cnVjdCBhdnIzMl9pZmllbGQgKmZpZWxkIEFUVFJJQlVURV9VTlVTRUQsCisrCQkJdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nICp2YWx1ZSkKKyt7CisrICBiZmRfdm1hIHdvcmQgPSAqKGJmZF92bWEgKilidWY7CisrCisrICAqdmFsdWUgPSAoKCh3b3JkID4+IDEyKSAmIDEpIHwgKCh3b3JkID4+IDE1KSAmIDB4MWUpCisrCSAgICB8ICgod29yZCA+PiAyMCkgJiAweDYwKSk7CisrfQorKworK3ZvaWQgYXZyMzJfZXh0cmFjdF9rMTJjcChjb25zdCBzdHJ1Y3QgYXZyMzJfaWZpZWxkICpmaWVsZCBBVFRSSUJVVEVfVU5VU0VELAorKwkJCSB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgKnZhbHVlKQorK3sKKysgIGJmZF92bWEgd29yZCA9ICooYmZkX3ZtYSAqKWJ1ZjsKKysKKysgICp2YWx1ZSA9ICgod29yZCA+PiA0KSAmIDB4ZjAwKSB8ICh3b3JkICYgMHhmZik7CisrfQorKworKworKyNkZWZpbmUgSUZMRChpZCwgYml0c3osIHNoaWZ0LCBtYXNrLCBmdW5jKSBcCisrICB7IEFWUjMyX0lGSUVMRF8jI2lkLCBiaXRzeiwgc2hpZnQsIG1hc2ssIFwKKysgICAgYXZyMzJfaW5zZXJ0XyMjZnVuYywgYXZyMzJfZXh0cmFjdF8jI2Z1bmMgfQorKworK2NvbnN0IHN0cnVjdCBhdnIzMl9pZmllbGQgYXZyMzJfaWZpZWxkX3RhYmxlW10gPQorKyAgeworKyAgICBJRkxEKFJYLCA0LCAyNSwgMHgxZTAwMDAwMCwgc2ltcGxlKSwKKysgICAgSUZMRChSWSwgNCwgMTYsIDB4MDAwZjAwMDAsIHNpbXBsZSksCisrICAgIElGTEQoQ09ORDRDLCA0LCAyMCwgMHgwMGYwMDAwMCwgc2ltcGxlKSwKKysgICAgSUZMRChLOEMsIDgsIDIwLCAweDBmZjAwMDAwLCBzaW1wbGUpLAorKyAgICBJRkxEKEs3QywgNywgMjAsIDB4MDdmMDAwMDAsIHNpbXBsZSksCisrICAgIElGTEQoSzVDLCA1LCAyMCwgMHgwMWYwMDAwMCwgc2ltcGxlKSwKKysgICAgSUZMRChLMywgMywgMjAsIDB4MDA3MDAwMDAsIHNpbXBsZSksCisrICAgIElGTEQoUllfRFcsIDMsIDE3LCAweDAwMGUwMDAwLCBzaW1wbGUpLAorKyAgICBJRkxEKENPTkQ0RSwgNCwgOCwgMHgwMDAwMGYwMCwgc2ltcGxlKSwKKysgICAgSUZMRChLOEUsIDgsIDAsIDB4MDAwMDAwZmYsIHNpbXBsZSksCisrICAgIElGTEQoQklUNUMsIDUsIDIwLCAweDFlMTAwMDAwLCBiaXQ1YyksCisrICAgIElGTEQoQ09ORDMsIDMsIDE2LCAweDAwMDcwMDAwLCBzaW1wbGUpLAorKyAgICBJRkxEKEsxMCwgMTAsIDE2LCAweDBmZjMwMDAwLCBrMTApLAorKyAgICBJRkxEKFBPUE0sIDksIDE5LCAweDBmZjgwMDAwLCBzaW1wbGUpLAorKyAgICBJRkxEKEsyLCAyLCA0LCAweDAwMDAwMDMwLCBzaW1wbGUpLAorKyAgICBJRkxEKFJEX0UsIDQsIDAsIDB4MDAwMDAwMGYsIHNpbXBsZSksCisrICAgIElGTEQoUkRfRFcsIDMsIDEsIDB4MDAwMDAwMGUsIHNpbXBsZSksCisrICAgIElGTEQoWCwgMSwgNSwgMHgwMDAwMDAyMCwgc2ltcGxlKSwKKysgICAgSUZMRChZLCAxLCA0LCAweDAwMDAwMDEwLCBzaW1wbGUpLAorKyAgICBJRkxEKFgyLCAxLCAxMywgMHgwMDAwMjAwMCwgc2ltcGxlKSwKKysgICAgSUZMRChZMiwgMSwgMTIsIDB4MDAwMDEwMDAsIHNpbXBsZSksCisrICAgIElGTEQoSzVFLCA1LCAwLCAweDAwMDAwMDFmLCBzaW1wbGUpLAorKyAgICBJRkxEKFBBUlQyLCAyLCAwLCAweDAwMDAwMDAzLCBzaW1wbGUpLAorKyAgICBJRkxEKFBBUlQxLCAxLCAwLCAweDAwMDAwMDAxLCBzaW1wbGUpLAorKyAgICBJRkxEKEsxNiwgMTYsIDAsIDB4MDAwMGZmZmYsIHNpbXBsZSksCisrICAgIElGTEQoQ0FDSEVPUCwgNSwgMTEsIDB4MDAwMGY4MDAsIHNpbXBsZSksCisrICAgIElGTEQoSzExLCAxMSwgMCwgMHgwMDAwMDdmZiwgc2ltcGxlKSwKKysgICAgSUZMRChLMjEsIDIxLCAwLCAweDFlMTBmZmZmLCBrMjEpLAorKyAgICBJRkxEKENQT1AsIDcsIDEyLCAweDA2MGYxMDAwLCBjcG9wKSwKKysgICAgSUZMRChDUE5PLCAzLCAxMywgMHgwMDAwZTAwMCwgc2ltcGxlKSwKKysgICAgSUZMRChDUkRfUkksIDQsIDgsIDB4MDAwMDBmMDAsIHNpbXBsZSksCisrICAgIElGTEQoQ1JYLCA0LCA0LCAweDAwMDAwMGYwLCBzaW1wbGUpLAorKyAgICBJRkxEKENSWSwgNCwgMCwgMHgwMDAwMDAwZiwgc2ltcGxlKSwKKysgICAgSUZMRChLN0UsIDcsIDAsIDB4MDAwMDAwN2YsIHNpbXBsZSksCisrICAgIElGTEQoQ1JEX0RXLCAzLCA5LCAweDAwMDAwZTAwLCBzaW1wbGUpLAorKyAgICBJRkxEKFBBUlQxX0sxMiwgMSwgMTIsIDB4MDAwMDEwMDAsIHNpbXBsZSksCisrICAgIElGTEQoUEFSVDJfSzEyLCAyLCAxMiwgMHgwMDAwMzAwMCwgc2ltcGxlKSwKKysgICAgSUZMRChLMTIsIDEyLCAwLCAweDAwMDAwZmZmLCBzaW1wbGUpLAorKyAgICBJRkxEKFM1LCA1LCA1LCAweDAwMDAwM2UwLCBzaW1wbGUpLAorKyAgICBJRkxEKEs1RTIsIDUsIDQsIDB4MDAwMDAxZjAsIHNpbXBsZSksCisrICAgIElGTEQoSzQsIDQsIDIwLCAweDAwZjAwMDAwLCBzaW1wbGUpLAorKyAgICBJRkxEKENPTkQ0RTIsIDQsIDQsIDB4MDAwMDAwZjAsIHNpbXBsZSksCisrICAgIElGTEQoSzhFMiwgOCwgNCwgMHgwMDAwMGZmMCwgc2ltcGxlKSwKKysgICAgSUZMRChLNiwgNiwgMjAsIDB4MDNmMDAwMDAsIHNpbXBsZSksCisrICAgIElGTEQoTUVNMTUsIDE1LCAwLCAweDAwMDA3ZmZmLCBzaW1wbGUpLAorKyAgICBJRkxEKE1FTUI1LCA1LCAxNSwgMHgwMDBmODAwMCwgc2ltcGxlKSwKKysgICAgSUZMRChXLCAxLCAyNSwgMHgwMjAwMDAwMCwgc2ltcGxlKSwKKysgICAgLyogQ29wcm9jZXNzb3IgTXVsdGlwbGUgSGlnaC9Mb3cgKi8KKysgICAgSUZMRChDTV9ITCwgMSwgOCwgMHgwMDAwMDEwMCwgc2ltcGxlKSwKKysgICAgSUZMRChLMTJDUCwgMTIgLDAsIDB4MDAwMGYwZmYsIGsxMmNwKSwKKysgICAgSUZMRChLOUUsIDkgLDAsIDB4MDAwMDAxZmYsIHNpbXBsZSksCisrICB9OworKyN1bmRlZiBJRkxECisrCisrCisrc3RydWN0IGF2cjMyX29wY29kZSBhdnIzMl9vcGNfdGFibGVbXSA9CisrICB7CisrICAgIHsKKysgICAgICBBVlIzMl9PUENfQUJTLCAyLCAweDVjNDAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0FCU10sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMSwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfQorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0FDQUxMLCAyLCAweGQwMDAwMDAwLCAweGYwMGYwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0FDQUxMXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAxLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4Q10sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19BQ1IsIDIsIDB4NWMwMDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfQUNSXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAxLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0FEQywgNCwgMHhlMDAwMDA0MCwgMHhlMWYwZmZmMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9BRENdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfQUREMSwgMiwgMHgwMDAwMDAwMCwgMHhlMWYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9BREQxXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfQUREMiwgNCwgMHhlMDAwMDAwMCwgMHhlMWYwZmZjMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9BREQyXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCA0LCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzJdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfQUREQUJTLCA0LCAweGUwMDAwZTQwLCAweGUxZjBmZmYwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0FEREFCU10sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19BRERISF9XLCA0LCAweGUwMDAwZTAwLCAweGUxZjBmZmMwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0FEREhIX1ddLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDUsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19BTkQxLCAyLCAweDAwNjAwMDAwLCAweGUxZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0FORDFdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDIsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19BTkQyLCA0LCAweGUxZTAwMDAwLCAweGUxZjBmZTAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0FORDJdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDQsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LNUUyXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0FORDMsIDQsIDB4ZTFlMDAyMDAsIDB4ZTFmMGZlMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfQU5EM10sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgNCwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s1RTJdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfQU5ESCwgNCwgMHhlNDEwMDAwMCwgMHhmZmYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9BTkRIXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfMTZVLCAyLCAxLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LMTZdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfQU5ESF9DT0gsIDQsIDB4ZTYxMDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfQU5ESF9DT0hdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl8xNlUsIDIsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0sxNl0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19BTkRMLCA0LCAweGUwMTAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0FORExdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl8xNlUsIDIsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0sxNl0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19BTkRMX0NPSCwgNCwgMHhlMjEwMDAwMCwgMHhmZmYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9BTkRMX0NPSF0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzE2VSwgMiwgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzE2XSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0FORE4sIDIsIDB4MDA4MDAwMDAsIDB4ZTFmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfQU5ETl0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMiwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0FTUjEsIDQsIDB4ZTAwMDA4NDAsIDB4ZTFmMGZmZjAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfQVNSMV0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19BU1IzLCA0LCAweGUwMDAxNDAwLCAweGUxZjBmZmUwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0FTUjNdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s1RV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19BU1IyLCAyLCAweGExNDAwMDAwLCAweGUxZTAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0FTUjJdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDIsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9CSVQ1Q10sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19CTEQsIDQsIDB4ZWRiMDAwMDAsIDB4ZmZmMGZmZTAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfQkxEXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzVFXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0JSRVExLCAyLCAweGMwMDAwMDAwLCAweGYwMGYwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0JSRVExXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfOUhfUENSRUwsIDEsIDAsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOENdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfQlJORTEsIDIsIDB4YzAwMTAwMDAsIDB4ZjAwZjAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfQlJORTFdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl85SF9QQ1JFTCwgMSwgMCwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4Q10sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19CUkNDMSwgMiwgMHhjMDAyMDAwMCwgMHhmMDBmMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9CUkNDMV0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzlIX1BDUkVMLCAxLCAwLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhDXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0JSQ1MxLCAyLCAweGMwMDMwMDAwLCAweGYwMGYwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0JSQ1MxXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfOUhfUENSRUwsIDEsIDAsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOENdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfQlJHRTEsIDIsIDB4YzAwNDAwMDAsIDB4ZjAwZjAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfQlJHRTFdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl85SF9QQ1JFTCwgMSwgMCwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4Q10sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19CUkxUMSwgMiwgMHhjMDA1MDAwMCwgMHhmMDBmMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9CUkxUMV0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzlIX1BDUkVMLCAxLCAwLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhDXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0JSTUkxLCAyLCAweGMwMDYwMDAwLCAweGYwMGYwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0JSTUkxXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfOUhfUENSRUwsIDEsIDAsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOENdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfQlJQTDEsIDIsIDB4YzAwNzAwMDAsIDB4ZjAwZjAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfQlJQTDFdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl85SF9QQ1JFTCwgMSwgMCwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4Q10sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19CUkVRMiwgNCwgMHhlMDgwMDAwMCwgMHhlMWVmMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9CUkVRMl0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzIySF9QQ1JFTCwgMSwgMCwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0syMV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19CUk5FMiwgNCwgMHhlMDgxMDAwMCwgMHhlMWVmMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9CUk5FMl0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzIySF9QQ1JFTCwgMSwgMCwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0syMV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19CUkNDMiwgNCwgMHhlMDgyMDAwMCwgMHhlMWVmMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9CUkhTMl0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzIySF9QQ1JFTCwgMSwgMCwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0syMV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19CUkNTMiwgNCwgMHhlMDgzMDAwMCwgMHhlMWVmMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9CUkxPMl0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzIySF9QQ1JFTCwgMSwgMCwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0syMV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19CUkdFMiwgNCwgMHhlMDg0MDAwMCwgMHhlMWVmMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9CUkdFMl0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzIySF9QQ1JFTCwgMSwgMCwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0syMV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19CUkxUMiwgNCwgMHhlMDg1MDAwMCwgMHhlMWVmMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9CUkxUMl0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzIySF9QQ1JFTCwgMSwgMCwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0syMV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19CUk1JMiwgNCwgMHhlMDg2MDAwMCwgMHhlMWVmMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9CUk1JMl0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzIySF9QQ1JFTCwgMSwgMCwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0syMV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19CUlBMMiwgNCwgMHhlMDg3MDAwMCwgMHhlMWVmMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9CUlBMMl0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzIySF9QQ1JFTCwgMSwgMCwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0syMV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19CUkxTLCA0LCAweGUwODgwMDAwLCAweGUxZWYwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0JSTFNdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl8yMkhfUENSRUwsIDEsIDAsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LMjFdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfQlJHVCwgNCwgMHhlMDg5MDAwMCwgMHhlMWVmMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9CUkdUXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfMjJIX1BDUkVMLCAxLCAwLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzIxXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0JSTEUsIDQsIDB4ZTA4YTAwMDAsIDB4ZTFlZjAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfQlJMRV0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzIySF9QQ1JFTCwgMSwgMCwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0syMV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19CUkhJLCA0LCAweGUwOGIwMDAwLCAweGUxZWYwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0JSSEldLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl8yMkhfUENSRUwsIDEsIDAsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LMjFdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfQlJWUywgNCwgMHhlMDhjMDAwMCwgMHhlMWVmMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9CUlZTXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfMjJIX1BDUkVMLCAxLCAwLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzIxXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0JSVkMsIDQsIDB4ZTA4ZDAwMDAsIDB4ZTFlZjAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfQlJWQ10sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzIySF9QQ1JFTCwgMSwgMCwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0syMV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19CUlFTLCA0LCAweGUwOGUwMDAwLCAweGUxZWYwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0JSUVNdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl8yMkhfUENSRUwsIDEsIDAsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LMjFdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfQlJBTCwgNCwgMHhlMDhmMDAwMCwgMHhlMWVmMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9CUkFMXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfMjJIX1BDUkVMLCAxLCAwLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzIxXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0JSRUFLUE9JTlQsIDIsIDB4ZDY3MzAwMDAsIDB4ZmZmZjAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfQlJFQUtQT0lOVF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMCwgLTEsIHsgTlVMTCB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0JSRVYsIDIsIDB4NWM5MDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfQlJFVl0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMSwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19CU1QsIDQsIDB4ZWZiMDAwMDAsIDB4ZmZmMGZmZTAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfQlNUXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzVFXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0NBQ0hFLCA0LCAweGY0MTAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0NBQ0hFXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzExXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQ0FDSEVPUF0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19DQVNUU19CLCAyLCAweDVjNjAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0NBU1RTX0JdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDEsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfQ0FTVFNfSCwgMiwgMHg1YzgwMDAwMCwgMHhmZmYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9DQVNUU19IXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAxLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0NBU1RVX0IsIDIsIDB4NWM1MDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfQ0FTVFVfQl0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMSwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19DQVNUVV9ILCAyLCAweDVjNzAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0NBU1RVX0hdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDEsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfQ0JSLCAyLCAweGExYzAwMDAwLCAweGUxZTAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0NCUl0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMiwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0JJVDVDXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0NMWiwgNCwgMHhlMDAwMTIwMCwgMHhlMWYwZmZmZiwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9DTFpdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDIsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19DT00sIDIsIDB4NWNkMDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfQ09NXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAxLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0NPUCwgNCwgMHhlMWEwMDAwMCwgMHhmOWYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9DT1BdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDUsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQ1BOT10sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0NSRF9SSV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0NSWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0NSWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0NQT1BdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfQ1BfQiwgNCwgMHhlMDAwMTgwMCwgMHhlMWYwZmZmZiwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9DUF9CXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfQ1BfSCwgNCwgMHhlMDAwMTkwMCwgMHhlMWYwZmZmZiwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9DUF9IXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfQ1BfVzEsIDIsIDB4MDAzMDAwMDAsIDB4ZTFmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfQ1BfVzFdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDIsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19DUF9XMiwgMiwgMHg1ODAwMDAwMCwgMHhmYzAwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9DUF9XMl0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzZTLCAyLCAxLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LNl0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19DUF9XMywgNCwgMHhlMDQwMDAwMCwgMHhlMWUwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9DUF9XM10sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzIxUywgMiwgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzIxXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0NQQzEsIDQsIDB4ZTAwMDEzMDAsIDB4ZTFmMGZmZmYsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfQ1BDMV0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMiwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0NQQzIsIDIsIDB4NWMyMDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfQ1BDMl0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMSwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19DU1JGLCAyLCAweGQ0MDMwMDAwLCAweGZlMGYwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0NTUkZdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDEsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzVDXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0NTUkZDWiwgMiwgMHhkMDAzMDAwMCwgMHhmZTBmMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9DU1JGQ1pdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDEsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzVDXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0RJVlMsIDQsIDB4ZTAwMDBjMDAsIDB4ZTFmMGZmYzAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfRElWU10sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19ESVZVLCA0LCAweGUwMDAwZDAwLCAweGUxZjBmZmMwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0RJVlVdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfRU9SMSwgMiwgMHgwMDUwMDAwMCwgMHhlMWYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9FT1IxXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfRU9SMiwgNCwgMHhlMWUwMjAwMCwgMHhlMWYwZmUwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9FT1IyXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCA0LCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzVFMl0sCisrICAgICAgfQorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0VPUjMsIDQsIDB4ZTFlMDIyMDAsIDB4ZTFmMGZlMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfRU9SM10sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgNCwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s1RTJdLAorKyAgICAgIH0KKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19FT1JMLCA0LCAweGVjMTAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0VPUkxdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl8xNlUsIDIsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0sxNl0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19FT1JILCA0LCAweGVlMTAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0VPUkhdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl8xNlUsIDIsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0sxNl0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19GUlMsIDIsIDB4ZDc0MzAwMDAsIDB4ZmZmZjAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfRlJTXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAwLCAtMSwgeyBOVUxMIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfSUNBTEwsIDIsIDB4NWQxMDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfSUNBTExdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDEsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfSU5DSk9TUCwgMiwgMHhkNjgzMDAwMCwgMHhmZjhmMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9JTkNKT1NQXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAxLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0szXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xEX0QxLCAyLCAweGExMDEwMDAwLCAweGUxZjEwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0xEX0QxXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZX0RXXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTERfRDIsIDIsIDB4YTExMDAwMDAsIDB4ZTFmMTAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTERfRDJdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDIsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUllfRFddLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19MRF9EMywgMiwgMHhhMTAwMDAwMCwgMHhlMWYxMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9MRF9EM10sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMiwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV9EV10sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xEX0Q1LCA0LCAweGUwMDAwMjAwLCAweGUxZjBmZmMxLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0xEX0Q1XSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCA0LCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0RXXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0syXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xEX0Q0LCA0LCAweGUwZTAwMDAwLCAweGUxZjEwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0xEX0Q0XSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfMTZTLCAzLCAyLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUllfRFddLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0sxNl0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19MRF9TQjIsIDQsIDB4ZTAwMDA2MDAsIDB4ZTFmMGZmYzAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTERfU0IyXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCA0LCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzJdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTERfU0IxLCA0LCAweGUxMjAwMDAwLCAweGUxZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0xEX1NCMV0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzE2UywgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzE2XSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xEX1VCMSwgMiwgMHgwMTMwMDAwMCwgMHhlMWYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9MRF9VQjFdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDIsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19MRF9VQjIsIDIsIDB4MDE3MDAwMDAsIDB4ZTFmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTERfVUIyXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTERfVUI1LCA0LCAweGUwMDAwNzAwLCAweGUxZjBmZmMwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0xEX1VCNV0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgNCwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0syXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xEX1VCMywgMiwgMHgwMTgwMDAwMCwgMHhlMTgwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9MRF9VQjNdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl8zVSwgMywgMiwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LM10sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19MRF9VQjQsIDQsIDB4ZTEzMDAwMDAsIDB4ZTFmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTERfVUI0XSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfMTZTLCAzLCAyLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0sxNl0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19MRF9TSDEsIDIsIDB4MDExMDAwMDAsIDB4ZTFmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTERfU0gxXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTERfU0gyLCAyLCAweDAxNTAwMDAwLCAweGUxZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0xEX1NIMl0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMiwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xEX1NINSwgNCwgMHhlMDAwMDQwMCwgMHhlMWYwZmZjMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9MRF9TSDVdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDQsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LMl0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19MRF9TSDMsIDIsIDB4ODAwMDAwMDAsIDB4ZTE4MDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTERfU0gzXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfNFVILCAzLCAyLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0szXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xEX1NINCwgNCwgMHhlMTAwMDAwMCwgMHhlMWYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9MRF9TSDRdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl8xNlMsIDMsIDIsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzE2XSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xEX1VIMSwgMiwgMHgwMTIwMDAwMCwgMHhlMWYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9MRF9VSDFdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDIsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19MRF9VSDIsIDIsIDB4MDE2MDAwMDAsIDB4ZTFmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTERfVUgyXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTERfVUg1LCA0LCAweGUwMDAwNTAwLCAweGUxZjBmZmMwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0xEX1VINV0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgNCwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0syXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xEX1VIMywgMiwgMHg4MDgwMDAwMCwgMHhlMTgwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9MRF9VSDNdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl80VUgsIDMsIDIsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzNdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTERfVUg0LCA0LCAweGUxMTAwMDAwLCAweGUxZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0xEX1VINF0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzE2UywgMywgMiwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LMTZdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTERfVzEsIDIsIDB4MDEwMDAwMDAsIDB4ZTFmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTERfVzFdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDIsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19MRF9XMiwgMiwgMHgwMTQwMDAwMCwgMHhlMWYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9MRF9XMl0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMiwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xEX1c1LCA0LCAweGUwMDAwMzAwLCAweGUxZjBmZmMwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0xEX1c1XSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCA0LCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzJdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTERfVzYsIDQsIDB4ZTAwMDBmODAsIDB4ZTFmMGZmYzAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTERfVzZdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDQsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LMl0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19MRF9XMywgMiwgMHg2MDAwMDAwMCwgMHhlMDAwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9MRF9XM10sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzdVVywgMywgMiwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LNUNdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTERfVzQsIDQsIDB4ZTBmMDAwMDAsIDB4ZTFmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTERfVzRdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl8xNlMsIDMsIDIsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzE2XSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xEQ19EMSwgNCwgMHhlOWEwMTAwMCwgMHhmZmYwMTEwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9MRENfRDFdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl8xMFVXLCA0LCAzLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQ1BOT10sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0NSRF9EV10sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhFXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xEQ19EMiwgNCwgMHhlZmEwMDA1MCwgMHhmZmYwMTFmZiwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9MRENfRDJdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQ1BOT10sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0NSRF9EV10sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xEQ19EMywgNCwgMHhlZmEwMTA0MCwgMHhmZmYwMTFjMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9MRENfRDNdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDUsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQ1BOT10sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0NSRF9EV10sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0syXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xEQ19XMSwgNCwgMHhlOWEwMDAwMCwgMHhmZmYwMTAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9MRENfVzFdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl8xMFVXLCA0LCAzLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQ1BOT10sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0NSRF9SSV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhFXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xEQ19XMiwgNCwgMHhlZmEwMDA0MCwgMHhmZmYwMTBmZiwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9MRENfVzJdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQ1BOT10sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0NSRF9SSV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xEQ19XMywgNCwgMHhlZmEwMTAwMCwgMHhmZmYwMTBjMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9MRENfVzNdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDUsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQ1BOT10sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0NSRF9SSV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0syXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xEQzBfRCwgNCwgMHhmM2EwMDAwMCwgMHhmZmYwMDEwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9MREMwX0RdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl8xNFVXLCAzLCAyLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQ1JEX0RXXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LMTJDUF0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19MREMwX1csIDQsIDB4ZjFhMDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTERDMF9XXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfMTRVVywgMywgMiwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0NSRF9SSV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzEyQ1BdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTERDTV9ELCA0LCAweGVkYTAwNDAwLCAweGZmZjAxZjAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0xEQ01fRF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9DUE5PXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTERDTV9EX1BVLCA0LCAweGVkYTAxNDAwLCAweGZmZjAxZjAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0xEQ01fRF9QVV0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9DUE5PXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTERDTV9XLCA0LCAweGVkYTAwMDAwLCAweGZmZjAxZTAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0xEQ01fV10sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgNCwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9DUE5PXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9DTV9ITF0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19MRENNX1dfUFUsIDQsIDB4ZWRhMDEwMDAsIDB4ZmZmMDFlMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTERDTV9XX1BVXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCA0LCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0NQTk9dLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4RV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0NNX0hMXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xERFBDLCAyLCAweDQ4MDAwMDAwLCAweGY4MDAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0xERFBDXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfOVVXX1BDUkVMLCAyLCAxLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LN0NdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTEREUENfRVhULCA0LCAweGZlZjAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0xERFBDX0VYVF0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzE2Ql9QQ1JFTCwgMiwgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzE2XSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xERFNQLCAyLCAweDQwMDAwMDAwLCAweGY4MDAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0xERFNQXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzdDXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xESU5TX0IsIDQsIDB4ZTFkMDQwMDAsIDB4ZTFmMGMwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTERJTlNfQl0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgNCwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1BBUlQyX0sxMl0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzEyXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xESU5TX0gsIDQsIDB4ZTFkMDAwMDAsIDB4ZTFmMGUwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTERJTlNfSF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgNCwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1BBUlQxX0sxMl0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzEyXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xETSwgNCwgMHhlMWMwMDAwMCwgMHhmZGYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9MRE1dLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9XXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzE2XSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xETVRTLCA0LCAweGU1YzAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0xETVRTXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzE2XSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xETVRTX1BVLCA0LCAweGU3YzAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0xETVRTX1BVXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzE2XSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xEU1dQX1NILCA0LCAweGUxZDAyMDAwLCAweGUxZjBmMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0xEU1dQX1NIXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LMTJdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTERTV1BfVUgsIDQsIDB4ZTFkMDMwMDAsIDB4ZTFmMGYwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTERTV1BfVUhdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0sxMl0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19MRFNXUF9XLCA0LCAweGUxZDA4MDAwLCAweGUxZjBmMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0xEU1dQX1ddLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0sxMl0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19MU0wxLCA0LCAweGUwMDAwOTQwLCAweGUxZjBmZmYwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0xTTDFdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTFNMMywgNCwgMHhlMDAwMTUwMCwgMHhlMWYwZmZlMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9MU0wzXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LNUVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTFNMMiwgMiwgMHhhMTYwMDAwMCwgMHhlMWUwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9MU0wyXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQklUNUNdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTFNSMSwgNCwgMHhlMDAwMGE0MCwgMHhlMWYwZmZmMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9MU1IxXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xTUjMsIDQsIDB4ZTAwMDE2MDAsIDB4ZTFmMGZmZTAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTFNSM10sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzVFXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0xTUjIsIDIsIDB4YTE4MDAwMDAsIDB4ZTFlMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTFNSMl0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMiwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0JJVDVDXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX01BQywgNCwgMHhlMDAwMDM0MCwgMHhlMWYwZmZmMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NQUNdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTUFDSEhfRCwgNCwgMHhlMDAwMDU4MCwgMHhlMWYwZmZjMSwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NQUNISF9EXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCA1LCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1hdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1ldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTUFDSEhfVywgNCwgMHhlMDAwMDQ4MCwgMHhlMWYwZmZjMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NQUNISF9XXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCA1LCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1hdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1ldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTUFDU19ELCA0LCAweGUwMDAwNTQwLCAweGUxZjBmZmYxLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX01BQ1NfRF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19NQUNTQVRISF9XLCA0LCAweGUwMDAwNjgwLCAweGUxZjBmZmMwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX01BQ1NBVEhIX1ddLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDUsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19NQUNVRCwgNCwgMHhlMDAwMDc0MCwgMHhlMWYwZmZmMSwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NQUNVRF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19NQUNXSF9ELCA0LCAweGUwMDAwYzgwLCAweGUxZjBmZmUxLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX01BQ1dIX0RdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDQsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9ZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX01BWCwgNCwgMHhlMDAwMGM0MCwgMHhlMWYwZmZmMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NQVhdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTUNBTEwsIDQsIDB4ZjAxMDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTUNBTExdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl8xOFdfUENSRUwsIDIsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0sxNl0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19NRkRSLCA0LCAweGU1YjAwMDAwLCAweGZmZjBmZjAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX01GRFJdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl84U19FWFQsIDIsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4RV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19NRlNSLCA0LCAweGUxYjAwMDAwLCAweGZmZjBmZjAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX01GU1JdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl84U19FWFQsIDIsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4RV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19NSU4sIDQsIDB4ZTAwMDBkNDAsIDB4ZTFmMGZmZjAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTUlOXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX01PVjMsIDIsIDB4MDA5MDAwMDAsIDB4ZTFmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTU9WM10sCisrICAgICAgQkZEX1JFTE9DX05PTkUsIDIsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19NT1YxLCAyLCAweDMwMDAwMDAwLCAweGYwMDAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX01PVjFdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl84UywgMiwgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhDXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX01PVjIsIDQsIDB4ZTA2MDAwMDAsIDB4ZTFlMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTU9WMl0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzIxUywgMiwgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzIxXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX01PVkVRMSwgNCwgMHhlMDAwMTcwMCwgMHhlMWYwZmZmZiwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NT1ZFUTFdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDIsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19NT1ZORTEsIDQsIDB4ZTAwMDE3MTAsIDB4ZTFmMGZmZmYsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTU9WTkUxXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTU9WQ0MxLCA0LCAweGUwMDAxNzIwLCAweGUxZjBmZmZmLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX01PVkhTMV0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMiwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX01PVkNTMSwgNCwgMHhlMDAwMTczMCwgMHhlMWYwZmZmZiwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NT1ZMTzFdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDIsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19NT1ZHRTEsIDQsIDB4ZTAwMDE3NDAsIDB4ZTFmMGZmZmYsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTU9WR0UxXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTU9WTFQxLCA0LCAweGUwMDAxNzUwLCAweGUxZjBmZmZmLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX01PVkxUMV0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMiwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX01PVk1JMSwgNCwgMHhlMDAwMTc2MCwgMHhlMWYwZmZmZiwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NT1ZNSTFdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDIsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19NT1ZQTDEsIDQsIDB4ZTAwMDE3NzAsIDB4ZTFmMGZmZmYsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTU9WUEwxXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTU9WTFMxLCA0LCAweGUwMDAxNzgwLCAweGUxZjBmZmZmLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX01PVkxTMV0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMiwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX01PVkdUMSwgNCwgMHhlMDAwMTc5MCwgMHhlMWYwZmZmZiwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NT1ZHVDFdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDIsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19NT1ZMRTEsIDQsIDB4ZTAwMDE3YTAsIDB4ZTFmMGZmZmYsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTU9WTEUxXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTU9WSEkxLCA0LCAweGUwMDAxN2IwLCAweGUxZjBmZmZmLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX01PVkhJMV0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMiwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX01PVlZTMSwgNCwgMHhlMDAwMTdjMCwgMHhlMWYwZmZmZiwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NT1ZWUzFdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDIsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19NT1ZWQzEsIDQsIDB4ZTAwMDE3ZDAsIDB4ZTFmMGZmZmYsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTU9WVkMxXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTU9WUVMxLCA0LCAweGUwMDAxN2UwLCAweGUxZjBmZmZmLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX01PVlFTMV0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMiwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX01PVkFMMSwgNCwgMHhlMDAwMTdmMCwgMHhlMWYwZmZmZiwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NT1ZBTDFdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDIsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19NT1ZFUTIsIDQsIDB4ZjliMDAwMDAsIDB4ZmZmMGZmMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTU9WRVEyXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfOFNfRVhULCAyLCAxLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTU9WTkUyLCA0LCAweGY5YjAwMTAwLCAweGZmZjBmZjAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX01PVk5FMl0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzhTX0VYVCwgMiwgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhFXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX01PVkNDMiwgNCwgMHhmOWIwMDIwMCwgMHhmZmYwZmYwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NT1ZIUzJdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl84U19FWFQsIDIsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4RV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19NT1ZDUzIsIDQsIDB4ZjliMDAzMDAsIDB4ZmZmMGZmMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTU9WTE8yXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfOFNfRVhULCAyLCAxLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTU9WR0UyLCA0LCAweGY5YjAwNDAwLCAweGZmZjBmZjAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX01PVkdFMl0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzhTX0VYVCwgMiwgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhFXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX01PVkxUMiwgNCwgMHhmOWIwMDUwMCwgMHhmZmYwZmYwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NT1ZMVDJdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl84U19FWFQsIDIsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4RV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19NT1ZNSTIsIDQsIDB4ZjliMDA2MDAsIDB4ZmZmMGZmMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTU9WTUkyXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfOFNfRVhULCAyLCAxLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTU9WUEwyLCA0LCAweGY5YjAwNzAwLCAweGZmZjBmZjAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX01PVlBMMl0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzhTX0VYVCwgMiwgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhFXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX01PVkxTMiwgNCwgMHhmOWIwMDgwMCwgMHhmZmYwZmYwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NT1ZMUzJdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl84U19FWFQsIDIsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4RV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19NT1ZHVDIsIDQsIDB4ZjliMDA5MDAsIDB4ZmZmMGZmMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTU9WR1QyXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfOFNfRVhULCAyLCAxLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTU9WTEUyLCA0LCAweGY5YjAwYTAwLCAweGZmZjBmZjAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX01PVkxFMl0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzhTX0VYVCwgMiwgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhFXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX01PVkhJMiwgNCwgMHhmOWIwMGIwMCwgMHhmZmYwZmYwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NT1ZISTJdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl84U19FWFQsIDIsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4RV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19NT1ZWUzIsIDQsIDB4ZjliMDBjMDAsIDB4ZmZmMGZmMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTU9WVlMyXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfOFNfRVhULCAyLCAxLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTU9WVkMyLCA0LCAweGY5YjAwZDAwLCAweGZmZjBmZjAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX01PVlZDMl0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzhTX0VYVCwgMiwgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhFXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX01PVlFTMiwgNCwgMHhmOWIwMGUwMCwgMHhmZmYwZmYwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NT1ZRUzJdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl84U19FWFQsIDIsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4RV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19NT1ZBTDIsIDQsIDB4ZjliMDBmMDAsIDB4ZmZmMGZmMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTU9WQUwyXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfOFNfRVhULCAyLCAxLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTVREUiwgNCwgMHhlN2IwMDAwMCwgMHhmZmYwZmYwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NVERSXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfOFNfRVhULCAyLCAwLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhFXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTVRTUiwgNCwgMHhlM2IwMDAwMCwgMHhmZmYwZmYwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NVFNSXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfOFNfRVhULCAyLCAwLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhFXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTVVMMSwgMiwgMHhhMTMwMDAwMCwgMHhlMWYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NVUwxXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTVVMMiwgNCwgMHhlMDAwMDI0MCwgMHhlMWYwZmZmMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NVUwyXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX01VTDMsIDQsIDB4ZTAwMDEwMDAsIDB4ZTFmMGZmMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTVVMM10sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzhTX0VYVCwgMywgMiwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTVVMSEhfVywgNCwgMHhlMDAwMDc4MCwgMHhlMWYwZmZjMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NVUxISF9XXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCA1LCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1hdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1ldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTVVMTkhIX1csIDQsIDB4ZTAwMDAxODAsIDB4ZTFmMGZmYzAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTVVMTkhIX1ddLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDUsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19NVUxOV0hfRCwgNCwgMHhlMDAwMDI4MCwgMHhlMWYwZmZlMSwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NVUxOV0hfRF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgNCwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1ldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTVVMU0QsIDQsIDB4ZTAwMDA0NDAsIDB4ZTFmMGZmZjAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTVVMU0RdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTVVMU0FUSEhfSCwgNCwgMHhlMDAwMDg4MCwgMHhlMWYwZmZjMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NVUxTQVRISF9IXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCA1LCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1hdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1ldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTVVMU0FUSEhfVywgNCwgMHhlMDAwMDk4MCwgMHhlMWYwZmZjMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NVUxTQVRISF9XXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCA1LCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1hdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1ldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTVVMU0FUUk5ESEhfSCwgNCwgMHhlMDAwMGE4MCwgMHhlMWYwZmZjMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NVUxTQVRSTkRISF9IXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCA1LCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1hdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1ldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTVVMU0FUUk5EV0hfVywgNCwgMHhlMDAwMGI4MCwgMHhlMWYwZmZlMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NVUxTQVRSTkRXSF9XXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCA0LCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19NVUxTQVRXSF9XLCA0LCAweGUwMDAwZTgwLCAweGUxZjBmZmUwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX01VTFNBVFdIX1ddLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDQsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9ZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX01VTFVfRCwgNCwgMHhlMDAwMDY0MCwgMHhlMWYwZmZmMSwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NVUxVX0RdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTVVMV0hfRCwgNCwgMHhlMDAwMGQ4MCwgMHhlMWYwZmZlMSwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NVUxXSF9EXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCA0LCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19NVVNGUiwgMiwgMHg1ZDMwMDAwMCwgMHhmZmYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NVVNGUl0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMSwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfQorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX01VU1RSLCAyLCAweDVkMjAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX01VU1RSXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAxLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9CisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTVZDUl9ELCA0LCAweGVmYTAwMDEwLCAweGZmZjExMWZmLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX01WQ1JfRF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9DUE5PXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUllfRFddLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9DUkRfRFddLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTVZDUl9XLCA0LCAweGVmYTAwMDAwLCAweGZmZjAxMGZmLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX01WQ1JfV10sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9DUE5PXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9DUkRfUkldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTVZSQ19ELCA0LCAweGVmYTAwMDMwLCAweGZmZjExMWZmLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX01WUkNfRF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9DUE5PXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQ1JEX0RXXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUllfRFddLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTVZSQ19XLCA0LCAweGVmYTAwMDIwLCAweGZmZjAxMGZmLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX01WUkNfV10sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9DUE5PXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQ1JEX1JJXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTkVHLCAyLCAweDVjMzAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX05FR10sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMSwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfQorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX05PUCwgMiwgMHhkNzAzMDAwMCwgMHhmZmZmMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9OT1BdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDAsIC0xLCB7IE5VTEwgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19PUjEsIDIsIDB4MDA0MDAwMDAsIDB4ZTFmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfT1IxXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfT1IyLCA0LCAweGUxZTAxMDAwLCAweGUxZjBmZTAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX09SMl0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgNCwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s1RTJdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfT1IzLCA0LCAweGUxZTAxMjAwLCAweGUxZjBmZTAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX09SM10sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgNCwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s1RTJdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfT1JILCA0LCAweGVhMTAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX09SSF0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzE2VSwgMiwgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzE2XSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX09STCwgNCwgMHhlODEwMDAwMCwgMHhmZmYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9PUkxdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl8xNlUsIDIsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0sxNl0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19QQUJTX1NCLCA0LCAweGUwMDAyM2UwLCAweGZmZjBmZmYwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BBQlNfU0JdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDIsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1BBQlNfU0gsIDQsIDB4ZTAwMDIzZjAsIDB4ZmZmMGZmZjAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUEFCU19TSF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMiwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUEFDS1NIX1NCLCA0LCAweGUwMDAyNGQwLCAweGUxZjBmZmYwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BBQ0tTSF9TQl0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19QQUNLU0hfVUIsIDQsIDB4ZTAwMDI0YzAsIDB4ZTFmMGZmZjAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUEFDS1NIX1VCXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1BBQ0tXX1NILCA0LCAweGUwMDAyNDcwLCAweGUxZjBmZmYwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BBQ0tXX1NIXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1BBRERfQiwgNCwgMHhlMDAwMjMwMCwgMHhlMWYwZmZmMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QQUREX0JdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUEFERF9ILCA0LCAweGUwMDAyMDAwLCAweGUxZjBmZmYwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BBRERfSF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19QQURESF9TSCwgNCwgMHhlMDAwMjBjMCwgMHhlMWYwZmZmMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QQURESF9TSF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19QQURESF9VQiwgNCwgMHhlMDAwMjM2MCwgMHhlMWYwZmZmMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QQURESF9VQl0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19QQUREU19TQiwgNCwgMHhlMDAwMjMyMCwgMHhlMWYwZmZmMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QQUREU19TQl0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19QQUREU19TSCwgNCwgMHhlMDAwMjA0MCwgMHhlMWYwZmZmMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QQUREU19TSF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19QQUREU19VQiwgNCwgMHhlMDAwMjM0MCwgMHhlMWYwZmZmMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QQUREU19VQl0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19QQUREU19VSCwgNCwgMHhlMDAwMjA4MCwgMHhlMWYwZmZmMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QQUREU19VSF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19QQUREU1VCX0gsIDQsIDB4ZTAwMDIxMDAsIDB4ZTFmMGZmYzAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUEFERFNVQl9IXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCA1LCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1hdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1ldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUEFERFNVQkhfU0gsIDQsIDB4ZTAwMDIyODAsIDB4ZTFmMGZmYzAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUEFERFNVQkhfU0hdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDUsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19QQUREU1VCU19TSCwgNCwgMHhlMDAwMjE4MCwgMHhlMWYwZmZjMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QQUREU1VCU19TSF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgNSwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9YXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9ZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1BBRERTVUJTX1VILCA0LCAweGUwMDAyMjAwLCAweGUxZjBmZmMwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BBRERTVUJTX1VIXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCA1LCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1hdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1ldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUEFERFhfSCwgNCwgMHhlMDAwMjAyMCwgMHhlMWYwZmZmMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QQUREWF9IXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1BBRERYSF9TSCwgNCwgMHhlMDAwMjBlMCwgMHhlMWYwZmZmMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QQUREWEhfU0hdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUEFERFhTX1NILCA0LCAweGUwMDAyMDYwLCAweGUxZjBmZmYwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BBRERYU19TSF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19QQUREWFNfVUgsIDQsIDB4ZTAwMDIwYTAsIDB4ZTFmMGZmZjAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUEFERFhTX1VIXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1BBU1JfQiwgNCwgMHhlMDAwMjQxMCwgMHhlMWY4ZmZmMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QQVNSX0JdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQ09ORDNdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUEFTUl9ILCA0LCAweGUwMDAyNDQwLCAweGUxZjBmZmYwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BBU1JfSF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19QQVZHX1NILCA0LCAweGUwMDAyM2QwLCAweGUxZjBmZmYwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BBVkdfU0hdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUEFWR19VQiwgNCwgMHhlMDAwMjNjMCwgMHhlMWYwZmZmMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QQVZHX1VCXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1BMU0xfQiwgNCwgMHhlMDAwMjQyMCwgMHhlMWY4ZmZmMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QTFNMX0JdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQ09ORDNdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUExTTF9ILCA0LCAweGUwMDAyNDUwLCAweGUxZjBmZmYwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BMU0xfSF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19QTFNSX0IsIDQsIDB4ZTAwMDI0MzAsIDB4ZTFmOGZmZjAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUExTUl9CXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0NPTkQzXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1BMU1JfSCwgNCwgMHhlMDAwMjQ2MCwgMHhlMWYwZmZmMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QTFNSX0hdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUE1BWF9TSCwgNCwgMHhlMDAwMjM5MCwgMHhlMWYwZmZmMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QTUFYX1NIXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1BNQVhfVUIsIDQsIDB4ZTAwMDIzODAsIDB4ZTFmMGZmZjAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUE1BWF9VQl0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19QTUlOX1NILCA0LCAweGUwMDAyM2IwLCAweGUxZjBmZmYwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BNSU5fU0hdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUE1JTl9VQiwgNCwgMHhlMDAwMjNhMCwgMHhlMWYwZmZmMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QTUlOX1VCXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1BPUEpDLCAyLCAweGQ3MTMwMDAwLCAweGZmZmYwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BPUEpDXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAwLCAtMSwgeyBOVUxMIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUE9QTSwgMiwgMHhkMDAyMDAwMCwgMHhmMDA3MDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QT1BNXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAxLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1BPUE1dLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUE9QTV9FLCA0LCAweGUzY2QwMDAwLCAweGZmZmYwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BPUE1fRV0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMSwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LMTZdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUFJFRiwgNCwgMHhmMjEwMDAwMCwgMHhmZmYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QUkVGXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfMTZTLCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzE2XSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1BTQUQsIDQsIDB4ZTAwMDI0MDAsIDB4ZTFmMGZmZjAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUFNBRF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19QU1VCX0IsIDQsIDB4ZTAwMDIzMTAsIDB4ZTFmMGZmZjAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUFNVQl9CXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1BTVUJfSCwgNCwgMHhlMDAwMjAxMCwgMHhlMWYwZmZmMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QU1VCX0hdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUFNVQkFERF9ILCA0LCAweGUwMDAyMTQwLCAweGUxZjBmZmMwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BTVUJBRERfSF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgNSwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9YXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9ZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1BTVUJBRERIX1NILCA0LCAweGUwMDAyMmMwLCAweGUxZjBmZmMwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BTVUJBRERIX1NIXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCA1LCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1hdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1ldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUFNVQkFERFNfU0gsIDQsIDB4ZTAwMDIxYzAsIDB4ZTFmMGZmYzAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUFNVQkFERFNfU0hdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDUsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19QU1VCQUREU19VSCwgNCwgMHhlMDAwMjI0MCwgMHhlMWYwZmZjMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QU1VCQUREU19VSF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgNSwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9YXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9ZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1BTVUJIX1NILCA0LCAweGUwMDAyMGQwLCAweGUxZjBmZmYwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BTVUJIX1NIXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1BTVUJIX1VCLCA0LCAweGUwMDAyMzcwLCAweGUxZjBmZmYwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BTVUJIX1VCXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1BTVUJTX1NCLCA0LCAweGUwMDAyMzMwLCAweGUxZjBmZmYwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BTVUJTX1NCXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1BTVUJTX1NILCA0LCAweGUwMDAyMDUwLCAweGUxZjBmZmYwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BTVUJTX1NIXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1BTVUJTX1VCLCA0LCAweGUwMDAyMzUwLCAweGUxZjBmZmYwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BTVUJTX1VCXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1BTVUJTX1VILCA0LCAweGUwMDAyMDkwLCAweGUxZjBmZmYwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BTVUJTX1VIXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1BTVUJYX0gsIDQsIDB4ZTAwMDIwMzAsIDB4ZTFmMGZmZjAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUFNVQlhfSF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19QU1VCWEhfU0gsIDQsIDB4ZTAwMDIwZjAsIDB4ZTFmMGZmZjAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUFNVQlhIX1NIXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1BTVUJYU19TSCwgNCwgMHhlMDAwMjA3MCwgMHhlMWYwZmZmMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QU1VCWFNfU0hdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUFNVQlhTX1VILCA0LCAweGUwMDAyMGIwLCAweGUxZjBmZmYwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BTVUJYU19VSF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19QVU5QQ0tTQl9ILCA0LCAweGUwMDAyNGEwLCAweGUxZmZmZmUwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BVTlBDS1NCX0hdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19QVU5QQ0tVQl9ILCA0LCAweGUwMDAyNDgwLCAweGUxZmZmZmUwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BVTlBDS1VCX0hdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19QVVNISkMsIDIsIDB4ZDcyMzAwMDAsIDB4ZmZmZjAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUFVTSEpDXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAwLCAtMSwgeyBOVUxMIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUFVTSE0sIDIsIDB4ZDAwMTAwMDAsIDB4ZjAwZjAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUFVTSE1dLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDEsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhDXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1BVU0hNX0UsIDQsIDB4ZWJjZDAwMDAsIDB4ZmZmZjAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUFVTSE1fRV0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMSwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LMTZdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUkNBTEwxLCAyLCAweGMwMGMwMDAwLCAweGYwMGMwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1JDQUxMMV0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzExSF9QQ1JFTCwgMSwgMCwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0sxMF0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19SQ0FMTDIsIDQsIDB4ZTBhMDAwMDAsIDB4ZTFlZjAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUkNBTEwyXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfMjJIX1BDUkVMLCAxLCAwLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzIxXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1JFVEVRLCAyLCAweDVlMDAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1JFVEVRXSwKKysgICAgICBCRkRfUkVMT0NfTk9ORSwgMSwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19SRVRORSwgMiwgMHg1ZTEwMDAwMCwgMHhmZmYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9SRVRORV0sCisrICAgICAgQkZEX1JFTE9DX05PTkUsIDEsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUkVUQ0MsIDIsIDB4NWUyMDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUkVUSFNdLAorKyAgICAgIEJGRF9SRUxPQ19OT05FLCAxLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1JFVENTLCAyLCAweDVlMzAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1JFVExPXSwKKysgICAgICBCRkRfUkVMT0NfTk9ORSwgMSwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19SRVRHRSwgMiwgMHg1ZTQwMDAwMCwgMHhmZmYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9SRVRHRV0sCisrICAgICAgQkZEX1JFTE9DX05PTkUsIDEsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUkVUTFQsIDIsIDB4NWU1MDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUkVUTFRdLAorKyAgICAgIEJGRF9SRUxPQ19OT05FLCAxLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1JFVE1JLCAyLCAweDVlNjAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1JFVE1JXSwKKysgICAgICBCRkRfUkVMT0NfTk9ORSwgMSwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19SRVRQTCwgMiwgMHg1ZTcwMDAwMCwgMHhmZmYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9SRVRQTF0sCisrICAgICAgQkZEX1JFTE9DX05PTkUsIDEsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUkVUTFMsIDIsIDB4NWU4MDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUkVUTFNdLAorKyAgICAgIEJGRF9SRUxPQ19OT05FLCAxLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1JFVEdULCAyLCAweDVlOTAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1JFVEdUXSwKKysgICAgICBCRkRfUkVMT0NfTk9ORSwgMSwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19SRVRMRSwgMiwgMHg1ZWEwMDAwMCwgMHhmZmYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9SRVRMRV0sCisrICAgICAgQkZEX1JFTE9DX05PTkUsIDEsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUkVUSEksIDIsIDB4NWViMDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUkVUSEldLAorKyAgICAgIEJGRF9SRUxPQ19OT05FLCAxLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1JFVFZTLCAyLCAweDVlYzAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1JFVFZTXSwKKysgICAgICBCRkRfUkVMT0NfTk9ORSwgMSwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19SRVRWQywgMiwgMHg1ZWQwMDAwMCwgMHhmZmYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9SRVRWQ10sCisrICAgICAgQkZEX1JFTE9DX05PTkUsIDEsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUkVUUVMsIDIsIDB4NWVlMDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUkVUUVNdLAorKyAgICAgIEJGRF9SRUxPQ19OT05FLCAxLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1JFVEFMLCAyLCAweDVlZjAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1JFVEFMXSwKKysgICAgICBCRkRfUkVMT0NfTk9ORSwgMSwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19SRVRELCAyLCAweGQ2MjMwMDAwLCAweGZmZmYwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1JFVERdLAorKyAgICAgIEJGRF9SRUxPQ19OT05FLCAwLCAtMSwgeyBOVUxMIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUkVURSwgMiwgMHhkNjAzMDAwMCwgMHhmZmZmMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9SRVRFXSwKKysgICAgICBCRkRfUkVMT0NfTk9ORSwgMCwgLTEsIHsgTlVMTCB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1JFVEosIDIsIDB4ZDYzMzAwMDAsIDB4ZmZmZjAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUkVUSl0sCisrICAgICAgQkZEX1JFTE9DX05PTkUsIDAsIC0xLCB7IE5VTEwgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19SRVRTLCAyLCAweGQ2MTMwMDAwLCAweGZmZmYwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1JFVFNdLAorKyAgICAgIEJGRF9SRUxPQ19OT05FLCAwLCAtMSwgeyBOVUxMIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUkpNUCwgMiwgMHhjMDA4MDAwMCwgMHhmMDBjMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9SSk1QXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfMTFIX1BDUkVMLCAxLCAwLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzEwXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1JPTCwgMiwgMHg1Y2YwMDAwMCwgMHhmZmYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9ST0xdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDEsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0KKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19ST1IsIDIsIDB4NWQwMDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUk9SXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAxLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9CisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfUlNVQjEsIDIsIDB4MDAyMDAwMDAsIDB4ZTFmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUlNVQjFdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDIsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19SU1VCMiwgNCwgMHhlMDAwMTEwMCwgMHhlMWYwZmYwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9SU1VCMl0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzhTX0VYVCwgMywgMiwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU0FUQUREX0gsIDQsIDB4ZTAwMDAyYzAsIDB4ZTFmMGZmZjAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU0FUQUREX0hdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU0FUQUREX1csIDQsIDB4ZTAwMDAwYzAsIDB4ZTFmMGZmZjAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU0FUQUREX1ddLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU0FUUk5EUywgNCwgMHhmM2IwMDAwMCwgMHhmZmYwZmMwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TQVRSTkRTXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzVFXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUzVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU0FUUk5EVSwgNCwgMHhmM2IwMDQwMCwgMHhmZmYwZmMwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TQVRSTkRVXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzVFXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUzVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU0FUUywgNCwgMHhmMWIwMDAwMCwgMHhmZmYwZmMwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TQVRTXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzVFXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUzVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU0FUU1VCX0gsIDQsIDB4ZTAwMDAzYzAsIDB4ZTFmMGZmZjAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU0FUU1VCX0hdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU0FUU1VCX1cxLCA0LCAweGUwMDAwMWMwLCAweGUxZjBmZmYwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NBVFNVQl9XMV0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TQVRTVUJfVzIsIDQsIDB4ZTBkMDAwMDAsIDB4ZTFmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU0FUU1VCX1cyXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LMTZdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU0FUVSwgNCwgMHhmMWIwMDQwMCwgMHhmZmYwZmMwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TQVRVXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzVFXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUzVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU0JDLCA0LCAweGUwMDAwMTQwLCAweGUxZjBmZmYwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NCQ10sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TQlIsIDIsIDB4YTFhMDAwMDAsIDB4ZTFlMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU0JSXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQklUNUNdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU0NBTEwsIDIsIDB4ZDczMzAwMDAsIDB4ZmZmZjAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU0NBTExdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDAsIC0xLCB7IE5VTEwgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TQ1IsIDIsIDB4NWMxMDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU0NSXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAxLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NMRUVQLCA0LCAweGU5YjAwMDAwLCAweGZmZmZmZjAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NMRUVQXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfOFNfRVhULCAxLCAwLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhFXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NSRVEsIDIsIDB4NWYwMDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1JFUV0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMSwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TUk5FLCAyLCAweDVmMTAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NSTkVdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDEsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1JDQywgMiwgMHg1ZjIwMDAwMCwgMHhmZmYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TUkhTXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAxLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NSQ1MsIDIsIDB4NWYzMDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1JMT10sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMSwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TUkdFLCAyLCAweDVmNDAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NSR0VdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDEsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1JMVCwgMiwgMHg1ZjUwMDAwMCwgMHhmZmYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TUkxUXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAxLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NSTUksIDIsIDB4NWY2MDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1JNSV0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMSwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TUlBMLCAyLCAweDVmNzAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NSUExdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDEsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1JMUywgMiwgMHg1ZjgwMDAwMCwgMHhmZmYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TUkxTXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAxLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NSR1QsIDIsIDB4NWY5MDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1JHVF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMSwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TUkxFLCAyLCAweDVmYTAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NSTEVdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDEsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1JISSwgMiwgMHg1ZmIwMDAwMCwgMHhmZmYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TUkhJXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAxLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NSVlMsIDIsIDB4NWZjMDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1JWU10sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMSwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TUlZDLCAyLCAweDVmZDAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NSVkNdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDEsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1JRUywgMiwgMHg1ZmUwMDAwMCwgMHhmZmYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TUlFTXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAxLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NSQUwsIDIsIDB4NWZmMDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1JBTF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMSwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TU1JGLCAyLCAweGQyMDMwMDAwLCAweGZlMGYwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NTUkZdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDEsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzVDXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NUX0IxLCAyLCAweDAwYzAwMDAwLCAweGUxZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NUX0IxXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1RfQjIsIDIsIDB4MDBmMDAwMDAsIDB4ZTFmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1RfQjJdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDIsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TVF9CNSwgNCwgMHhlMDAwMGIwMCwgMHhlMWYwZmZjMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVF9CNV0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgNCwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzJdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SRF9FXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NUX0IzLCAyLCAweGEwODAwMDAwLCAweGUxODAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NUX0IzXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfM1UsIDMsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0szXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1RfQjQsIDQsIDB4ZTE2MDAwMDAsIDB4ZTFmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1RfQjRdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl8xNlMsIDMsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0sxNl0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NUX0QxLCAyLCAweGExMjAwMDAwLCAweGUxZjEwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NUX0QxXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUllfRFddLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1RfRDIsIDIsIDB4YTEyMTAwMDAsIDB4ZTFmMTAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1RfRDJdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDIsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV9EV10sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TVF9EMywgMiwgMHhhMTExMDAwMCwgMHhlMWYxMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVF9EM10sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMiwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZX0RXXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NUX0Q1LCA0LCAweGUwMDAwODAwLCAweGUxZjBmZmMxLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NUX0Q1XSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCA0LCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LMl0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0RXXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NUX0Q0LCA0LCAweGUwZTEwMDAwLCAweGUxZjEwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NUX0Q0XSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfMTZTLCAzLCAxLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LMTZdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV9EV10sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TVF9IMSwgMiwgMHgwMGIwMDAwMCwgMHhlMWYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVF9IMV0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMiwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NUX0gyLCAyLCAweDAwZTAwMDAwLCAweGUxZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NUX0gyXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1RfSDUsIDQsIDB4ZTAwMDBhMDAsIDB4ZTFmMGZmYzAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1RfSDVdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDQsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0syXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TVF9IMywgMiwgMHhhMDAwMDAwMCwgMHhlMTgwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVF9IM10sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzRVSCwgMywgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzNdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TVF9INCwgNCwgMHhlMTUwMDAwMCwgMHhlMWYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVF9INF0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzE2UywgMywgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzE2XSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1RfVzEsIDIsIDB4MDBhMDAwMDAsIDB4ZTFmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1RfVzFdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDIsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TVF9XMiwgMiwgMHgwMGQwMDAwMCwgMHhlMWYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVF9XMl0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMiwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NUX1c1LCA0LCAweGUwMDAwOTAwLCAweGUxZjBmZmMwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NUX1c1XSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCA0LCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LMl0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1RfVzMsIDIsIDB4ODEwMDAwMDAsIDB4ZTEwMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1RfVzNdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl82VVcsIDMsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s0XSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1RfVzQsIDQsIDB4ZTE0MDAwMDAsIDB4ZTFmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1RfVzRdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl8xNlMsIDMsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0sxNl0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NUQ19EMSwgNCwgMHhlYmEwMTAwMCwgMHhmZmYwMTEwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVENfRDFdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl8xMFVXLCA0LCAyLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQ1BOT10sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhFXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQ1JEX0RXXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NUQ19EMiwgNCwgMHhlZmEwMDA3MCwgMHhmZmYwMTFmMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVENfRDJdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQ1BOT10sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQ1JEX0RXXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NUQ19EMywgNCwgMHhlZmEwMTBjMCwgMHhmZmYwMTFjMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVENfRDNdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDUsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQ1BOT10sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0syXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQ1JEX0RXXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NUQ19XMSwgNCwgMHhlYmEwMDAwMCwgMHhmZmYwMTAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVENfVzFdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl8xMFVXLCA0LCAyLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQ1BOT10sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhFXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQ1JEX1JJXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NUQ19XMiwgNCwgMHhlZmEwMDA2MCwgMHhmZmYwMTBmZiwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVENfVzJdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQ1BOT10sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQ1JEX1JJXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NUQ19XMywgNCwgMHhlZmEwMTA4MCwgMHhmZmYwMTBjMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVENfVzNdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDUsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQ1BOT10sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0syXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfQ1JEX1JJXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NUQzBfRCwgNCwgMHhmN2EwMDAwMCwgMHhmZmYwMDEwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVEMwX0RdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl8xNFVXLCAzLCAxLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LMTJDUF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0NSRF9EV10sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TVEMwX1csIDQsIDB4ZjVhMDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1RDMF9XXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfMTRVVywgMywgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzEyQ1BdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9DUkRfUkldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1RDTV9ELCA0LCAweGVkYTAwNTAwLCAweGZmZjAxZjAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NUQ01fRF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9DUE5PXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1RDTV9EX1BVLCA0LCAweGVkYTAxNTAwLCAweGZmZjAxZjAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NUQ01fRF9QVV0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMywgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9DUE5PXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1RDTV9XLCA0LCAweGVkYTAwMjAwLCAweGZmZjAxZTAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NUQ01fV10sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgNCwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9DUE5PXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9DTV9ITF0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TVENNX1dfUFUsIDQsIDB4ZWRhMDEyMDAsIDB4ZmZmMDFlMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1RDTV9XX1BVXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCA0LCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0NQTk9dLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4RV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0NNX0hMXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NUQ09ORCwgNCwgMHhlMTcwMDAwMCwgMHhlMWYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVENPTkRdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LMTZdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TVERTUCwgMiwgMHg1MDAwMDAwMCwgMHhmODAwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVERTUF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMiwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LN0NdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TVEhIX1cyLCA0LCAweGUxZTA4MDAwLCAweGUxZjBjMGMwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NUSEhfVzJdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDcsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0NSRF9SSV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0syXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9YMl0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfWTJdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1RISF9XMSwgNCwgMHhlMWUwYzAwMCwgMHhlMWYwYzAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVEhIX1cxXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfU1RISF9XLCA2LCAxLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUkRfRV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4RTJdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1gyXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9ZMl0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TVE0sIDQsIDB4ZTljMDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1RNXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzE2XSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NUTV9QVSwgNCwgMHhlYmMwMDAwMCwgMHhmZmYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVE1fUFVdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDIsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LMTZdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1RNVFMsIDQsIDB4ZWRjMDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1RNVFNdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDIsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LMTZdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1RNVFNfUFUsIDQsIDB4ZWZjMDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1RNVFNfUFVdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDIsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LMTZdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1RTV1BfSCwgNCwgMHhlMWQwOTAwMCwgMHhlMWYwZjAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVFNXUF9IXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzEyXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1RTV1BfVywgNCwgMHhlMWQwYTAwMCwgMHhlMWYwZjAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVFNXUF9XXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzEyXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1VCMSwgMiwgMHgwMDEwMDAwMCwgMHhlMWYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVUIxXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1VCMiwgNCwgMHhlMDAwMDEwMCwgMHhlMWYwZmZjMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVUIyXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCA0LCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzJdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1VCNSwgNCwgMHhlMGMwMDAwMCwgMHhlMWYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVUI1XSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfU1VCNSwgMywgMiwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LMTZdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1VCM19TUCwgMiwgMHgyMDBkMDAwMCwgMHhmMDBmMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVUIzX1NQXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfMTBTVywgMiwgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhDXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NVQjMsIDIsIDB4MjAwMDAwMDAsIDB4ZjAwMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1VCM10sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzhTLCAyLCAxLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOENdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1VCNCwgNCwgMHhlMDIwMDAwMCwgMHhlMWUwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVUI0XSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfMjFTLCAyLCAxLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LMjFdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1VCRVEsIDQsIDB4ZjdiMDAwMDAsIDB4ZmZmMGZmMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1VCRVFdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl84U19FWFQsIDIsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4RV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TVUJORSwgNCwgMHhmN2IwMDEwMCwgMHhmZmYwZmYwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVUJORV0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzhTX0VYVCwgMiwgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhFXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NVQkNDLCA0LCAweGY3YjAwMjAwLCAweGZmZjBmZjAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NVQkhTXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfOFNfRVhULCAyLCAxLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1VCQ1MsIDQsIDB4ZjdiMDAzMDAsIDB4ZmZmMGZmMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1VCTE9dLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl84U19FWFQsIDIsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4RV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TVUJHRSwgNCwgMHhmN2IwMDQwMCwgMHhmZmYwZmYwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVUJHRV0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzhTX0VYVCwgMiwgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhFXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NVQkxULCA0LCAweGY3YjAwNTAwLCAweGZmZjBmZjAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NVQkxUXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfOFNfRVhULCAyLCAxLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1VCTUksIDQsIDB4ZjdiMDA2MDAsIDB4ZmZmMGZmMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1VCTUldLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl84U19FWFQsIDIsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4RV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TVUJQTCwgNCwgMHhmN2IwMDcwMCwgMHhmZmYwZmYwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVUJQTF0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzhTX0VYVCwgMiwgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhFXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NVQkxTLCA0LCAweGY3YjAwODAwLCAweGZmZjBmZjAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NVQkxTXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfOFNfRVhULCAyLCAxLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1VCR1QsIDQsIDB4ZjdiMDA5MDAsIDB4ZmZmMGZmMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1VCR1RdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl84U19FWFQsIDIsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4RV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TVUJMRSwgNCwgMHhmN2IwMGEwMCwgMHhmZmYwZmYwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVUJMRV0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzhTX0VYVCwgMiwgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhFXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NVQkhJLCA0LCAweGY3YjAwYjAwLCAweGZmZjBmZjAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NVQkhJXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfOFNfRVhULCAyLCAxLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1VCVlMsIDQsIDB4ZjdiMDBjMDAsIDB4ZmZmMGZmMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1VCVlNdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl84U19FWFQsIDIsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4RV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TVUJWQywgNCwgMHhmN2IwMGQwMCwgMHhmZmYwZmYwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVUJWQ10sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzhTX0VYVCwgMiwgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhFXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NVQlFTLCA0LCAweGY3YjAwZTAwLCAweGZmZjBmZjAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NVQlFTXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfOFNfRVhULCAyLCAxLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1VCQUwsIDQsIDB4ZjdiMDBmMDAsIDB4ZmZmMGZmMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1VCQUxdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl84U19FWFQsIDIsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4RV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TVUJGRVEsIDQsIDB4ZjViMDAwMDAsIDB4ZmZmMGZmMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1VCRkVRXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfOFNfRVhULCAyLCAxLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1VCRk5FLCA0LCAweGY1YjAwMTAwLCAweGZmZjBmZjAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NVQkZORV0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzhTX0VYVCwgMiwgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhFXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NVQkZDQywgNCwgMHhmNWIwMDIwMCwgMHhmZmYwZmYwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVUJGSFNdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl84U19FWFQsIDIsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4RV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TVUJGQ1MsIDQsIDB4ZjViMDAzMDAsIDB4ZmZmMGZmMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1VCRkxPXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfOFNfRVhULCAyLCAxLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1VCRkdFLCA0LCAweGY1YjAwNDAwLCAweGZmZjBmZjAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NVQkZHRV0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzhTX0VYVCwgMiwgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhFXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NVQkZMVCwgNCwgMHhmNWIwMDUwMCwgMHhmZmYwZmYwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVUJGTFRdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl84U19FWFQsIDIsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4RV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TVUJGTUksIDQsIDB4ZjViMDA2MDAsIDB4ZmZmMGZmMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1VCRk1JXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfOFNfRVhULCAyLCAxLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1VCRlBMLCA0LCAweGY1YjAwNzAwLCAweGZmZjBmZjAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NVQkZQTF0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzhTX0VYVCwgMiwgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhFXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NVQkZMUywgNCwgMHhmNWIwMDgwMCwgMHhmZmYwZmYwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVUJGTFNdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl84U19FWFQsIDIsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4RV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TVUJGR1QsIDQsIDB4ZjViMDA5MDAsIDB4ZmZmMGZmMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1VCRkdUXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfOFNfRVhULCAyLCAxLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1VCRkxFLCA0LCAweGY1YjAwYTAwLCAweGZmZjBmZjAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NVQkZMRV0sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzhTX0VYVCwgMiwgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhFXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NVQkZISSwgNCwgMHhmNWIwMGIwMCwgMHhmZmYwZmYwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVUJGSEldLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl84U19FWFQsIDIsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4RV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TVUJGVlMsIDQsIDB4ZjViMDBjMDAsIDB4ZmZmMGZmMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1VCRlZTXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfOFNfRVhULCAyLCAxLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1VCRlZDLCA0LCAweGY1YjAwZDAwLCAweGZmZjBmZjAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NVQkZWQ10sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzhTX0VYVCwgMiwgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzhFXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NVQkZRUywgNCwgMHhmNWIwMGUwMCwgMHhmZmYwZmYwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVUJGUVNdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl84U19FWFQsIDIsIDEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4RV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TVUJGQUwsIDQsIDB4ZjViMDBmMDAsIDB4ZmZmMGZmMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1VCRkFMXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfOFNfRVhULCAyLCAxLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1VCSEhfVywgNCwgMHhlMDAwMGYwMCwgMHhlMWYwZmZjMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TVUJISF9XXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCA1LCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1hdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1ldLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfU1dBUF9CLCAyLCAweDVjYjAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NXQVBfQl0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMSwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfQorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NXQVBfQkgsIDIsIDB4NWNjMDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfU1dBUF9CSF0sCisrICAgICAgQkZEX1JFTE9DX1VOVVNFRCwgMSwgLTEsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrICAgICAgfQorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX1NXQVBfSCwgMiwgMHg1Y2EwMDAwMCwgMHhmZmYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9TV0FQX0hdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDEsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0KKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19TWU5DLCA0LCAweGViYjAwMDAwLCAweGZmZmZmZjAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1NZTkNdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl84U19FWFQsIDEsIDAsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOEVdLAorKyAgICAgIH0KKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19UTEJSLCAyLCAweGQ2NDMwMDAwLCAweGZmZmYwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1RMQlJdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDAsIC0xLCB7IE5VTEwgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19UTEJTLCAyLCAweGQ2NTMwMDAwLCAweGZmZmYwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1RMQlNdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDAsIC0xLCB7IE5VTEwgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19UTEJXLCAyLCAweGQ2NjMwMDAwLCAweGZmZmYwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1RMQlddLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDAsIC0xLCB7IE5VTEwgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19UTkJaLCAyLCAweDVjZTAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1ROQlpdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDEsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKyAgICAgIH0KKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19UU1QsIDIsIDB4MDA3MDAwMDAsIDB4ZTFmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfVFNUXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAyLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfWENIRywgNCwgMHhlMDAwMGI0MCwgMHhlMWYwZmZmMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9YQ0hHXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX01FTUMsIDQsIDB4ZjYxMDAwMDAsIDB4ZmZmMDAwMDAsCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfTUVNQ10sCisrICAgICAgQkZEX1JFTE9DX0FWUjMyXzE1UywgMiwgMCwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX01FTTE1XSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfTUVNQjVdLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTUVNUywgNCwgMHhmODEwMDAwMCwgMHhmZmYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NRU1TXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfMTVTLCAyLCAwLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfTUVNMTVdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9NRU1CNV0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX09QQ19NRU1ULCA0LCAweGZhMTAwMDAwLCAweGZmZjAwMDAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX01FTVRdLAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl8xNVMsIDIsIDAsCisrICAgICAgeworKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9NRU0xNV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX01FTUI1XSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0JGRVhUUywgNCwgMHhlMWQwYjAwMCwgMHhlMWYwZmMwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9CRkVYVFNdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDQsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1M1XSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzVFXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0JGRVhUVSwgNCwgMHhlMWQwYzAwMCwgMHhlMWYwZmMwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9CRkVYVFVdLAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDQsIC0xLAorKyAgICAgIHsKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlhdLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1M1XSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzVFXSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfT1BDX0JGSU5TLCA0LCAweGUxZDBkMDAwLCAweGUxZjBmYzAwLAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0JGSU5TXSwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCA0LCAtMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfUlldLAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9TNV0sCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s1RV0sCisrICAgICAgfSwKKysgICAgfSwKKysjZGVmaW5lIEFWUjMyX09QQ09ERV9SU1VCQ09ORChjb25kX25hbWUsIGNvbmRfZmllbGQpICAgICAgICAgICAgICAgICAgICBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIEFWUjMyX09QQ19SU1VCICMjIGNvbmRfbmFtZSAsIDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAweGZiYjAwMDAwIHwgKGNvbmRfZmllbGQgPDwgOCksIDB4ZmZmMGZmMDAsICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUlNVQiAjIyBjb25kX25hbWUgXSwgICAgICAgICAgICAgXAorKyAgICAgIEJGRF9SRUxPQ19BVlIzMl84U19FWFQsIDIsIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX0s4RV0sICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB9LAorKworKyAgICBBVlIzMl9PUENPREVfUlNVQkNPTkQgKEVRLCAwKSAKKysgICAgQVZSMzJfT1BDT0RFX1JTVUJDT05EIChORSwgMSkgCisrICAgIEFWUjMyX09QQ09ERV9SU1VCQ09ORCAoQ0MsIDIpIAorKyAgICBBVlIzMl9PUENPREVfUlNVQkNPTkQgKENTLCAzKSAKKysgICAgQVZSMzJfT1BDT0RFX1JTVUJDT05EIChHRSwgNCkgCisrICAgIEFWUjMyX09QQ09ERV9SU1VCQ09ORCAoTFQsIDUpIAorKyAgICBBVlIzMl9PUENPREVfUlNVQkNPTkQgKE1JLCA2KSAKKysgICAgQVZSMzJfT1BDT0RFX1JTVUJDT05EIChQTCwgNykgCisrICAgIEFWUjMyX09QQ09ERV9SU1VCQ09ORCAoTFMsIDgpIAorKyAgICBBVlIzMl9PUENPREVfUlNVQkNPTkQgKEdULCA5KSAKKysgICAgQVZSMzJfT1BDT0RFX1JTVUJDT05EIChMRSwgMTApIAorKyAgICBBVlIzMl9PUENPREVfUlNVQkNPTkQgKEhJLCAxMSkgCisrICAgIEFWUjMyX09QQ09ERV9SU1VCQ09ORCAoVlMsIDEyKSAKKysgICAgQVZSMzJfT1BDT0RFX1JTVUJDT05EIChWQywgMTMpIAorKyAgICBBVlIzMl9PUENPREVfUlNVQkNPTkQgKFFTLCAxNCkgCisrICAgIEFWUjMyX09QQ09ERV9SU1VCQ09ORCAoQUwsIDE1KSAKKysKKysjZGVmaW5lIEFWUjMyX09QQ09ERV9PUDNfQ09ORChvcF9uYW1lLCBvcF9maWVsZCwgY29uZF9uYW1lLCBjb25kX2ZpZWxkKSBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIEFWUjMyX09QQ18gIyMgb3BfbmFtZSAjIyBjb25kX25hbWUgLCA0LCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAweGUxZDBlMDAwIHwgKGNvbmRfZmllbGQgPDwgOCkgfCAob3BfZmllbGQgPDwgNCksIDB4ZTFmMGZmZjAsICAgICBcCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfICMjIG9wX25hbWUgIyMgY29uZF9uYW1lIF0sICAgICAgXAorKyAgICAgIEJGRF9SRUxPQ19VTlVTRUQsIDMsIC0xLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JEX0VdLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JYXSwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB9LAorKworKyAgICBBVlIzMl9PUENPREVfT1AzX0NPTkQgKEFERCwgMCwgRVEsIDApCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoQURELCAwLCBORSwgMSkKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChBREQsIDAsIENDLCAyKQorKyAgICBBVlIzMl9PUENPREVfT1AzX0NPTkQgKEFERCwgMCwgQ1MsIDMpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoQURELCAwLCBHRSwgNCkKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChBREQsIDAsIExULCA1KQorKyAgICBBVlIzMl9PUENPREVfT1AzX0NPTkQgKEFERCwgMCwgTUksIDYpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoQURELCAwLCBQTCwgNykKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChBREQsIDAsIExTLCA4KQorKyAgICBBVlIzMl9PUENPREVfT1AzX0NPTkQgKEFERCwgMCwgR1QsIDkpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoQURELCAwLCBMRSwgMTApCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoQURELCAwLCBISSwgMTEpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoQURELCAwLCBWUywgMTIpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoQURELCAwLCBWQywgMTMpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoQURELCAwLCBRUywgMTQpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoQURELCAwLCBBTCwgMTUpCisrCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoU1VCMiwgMSwgRVEsIDApCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoU1VCMiwgMSwgTkUsIDEpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoU1VCMiwgMSwgQ0MsIDIpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoU1VCMiwgMSwgQ1MsIDMpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoU1VCMiwgMSwgR0UsIDQpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoU1VCMiwgMSwgTFQsIDUpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoU1VCMiwgMSwgTUksIDYpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoU1VCMiwgMSwgUEwsIDcpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoU1VCMiwgMSwgTFMsIDgpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoU1VCMiwgMSwgR1QsIDkpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoU1VCMiwgMSwgTEUsIDEwKQorKyAgICBBVlIzMl9PUENPREVfT1AzX0NPTkQgKFNVQjIsIDEsIEhJLCAxMSkKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChTVUIyLCAxLCBWUywgMTIpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoU1VCMiwgMSwgVkMsIDEzKQorKyAgICBBVlIzMl9PUENPREVfT1AzX0NPTkQgKFNVQjIsIDEsIFFTLCAxNCkKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChTVUIyLCAxLCBBTCwgMTUpCisrCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoQU5ELCAyLCBFUSwgMCkKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChBTkQsIDIsIE5FLCAxKQorKyAgICBBVlIzMl9PUENPREVfT1AzX0NPTkQgKEFORCwgMiwgQ0MsIDIpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoQU5ELCAyLCBDUywgMykKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChBTkQsIDIsIEdFLCA0KQorKyAgICBBVlIzMl9PUENPREVfT1AzX0NPTkQgKEFORCwgMiwgTFQsIDUpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoQU5ELCAyLCBNSSwgNikKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChBTkQsIDIsIFBMLCA3KQorKyAgICBBVlIzMl9PUENPREVfT1AzX0NPTkQgKEFORCwgMiwgTFMsIDgpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoQU5ELCAyLCBHVCwgOSkKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChBTkQsIDIsIExFLCAxMCkKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChBTkQsIDIsIEhJLCAxMSkKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChBTkQsIDIsIFZTLCAxMikKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChBTkQsIDIsIFZDLCAxMykKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChBTkQsIDIsIFFTLCAxNCkKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChBTkQsIDIsIEFMLCAxNSkKKysKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChPUiwgMywgRVEsIDApCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoT1IsIDMsIE5FLCAxKQorKyAgICBBVlIzMl9PUENPREVfT1AzX0NPTkQgKE9SLCAzLCBDQywgMikKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChPUiwgMywgQ1MsIDMpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoT1IsIDMsIEdFLCA0KQorKyAgICBBVlIzMl9PUENPREVfT1AzX0NPTkQgKE9SLCAzLCBMVCwgNSkKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChPUiwgMywgTUksIDYpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoT1IsIDMsIFBMLCA3KQorKyAgICBBVlIzMl9PUENPREVfT1AzX0NPTkQgKE9SLCAzLCBMUywgOCkKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChPUiwgMywgR1QsIDkpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoT1IsIDMsIExFLCAxMCkKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChPUiwgMywgSEksIDExKQorKyAgICBBVlIzMl9PUENPREVfT1AzX0NPTkQgKE9SLCAzLCBWUywgMTIpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoT1IsIDMsIFZDLCAxMykKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChPUiwgMywgUVMsIDE0KQorKyAgICBBVlIzMl9PUENPREVfT1AzX0NPTkQgKE9SLCAzLCBBTCwgMTUpCisrCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoRU9SLCA0LCBFUSwgMCkKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChFT1IsIDQsIE5FLCAxKQorKyAgICBBVlIzMl9PUENPREVfT1AzX0NPTkQgKEVPUiwgNCwgQ0MsIDIpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoRU9SLCA0LCBDUywgMykKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChFT1IsIDQsIEdFLCA0KQorKyAgICBBVlIzMl9PUENPREVfT1AzX0NPTkQgKEVPUiwgNCwgTFQsIDUpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoRU9SLCA0LCBNSSwgNikKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChFT1IsIDQsIFBMLCA3KQorKyAgICBBVlIzMl9PUENPREVfT1AzX0NPTkQgKEVPUiwgNCwgTFMsIDgpCisrICAgIEFWUjMyX09QQ09ERV9PUDNfQ09ORCAoRU9SLCA0LCBHVCwgOSkKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChFT1IsIDQsIExFLCAxMCkKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChFT1IsIDQsIEhJLCAxMSkKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChFT1IsIDQsIFZTLCAxMikKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChFT1IsIDQsIFZDLCAxMykKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChFT1IsIDQsIFFTLCAxNCkKKysgICAgQVZSMzJfT1BDT0RFX09QM19DT05EIChFT1IsIDQsIEFMLCAxNSkgCisrCisrI2RlZmluZSBBVlIzMl9PUENPREVfTERfQ09ORChvcF9uYW1lLCBvcF9maWVsZCwgY29uZF9uYW1lLCBjb25kX2ZpZWxkKSAgXAorKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBBVlIzMl9PUENfICMjIG9wX25hbWUgIyMgY29uZF9uYW1lICwgNCwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgMHhlMWYwMDAwMCB8IChjb25kX2ZpZWxkIDw8IDEyKSB8IChvcF9maWVsZCAgPDwgOSksIDB4ZTFmMGZlMDAsICAgXAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYXyAjIyBvcF9uYW1lICMjIGNvbmRfbmFtZSBdLCAgICAgIFwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOUVdLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSwKKysgICAgCisrI2RlZmluZSBBVlIzMl9PUENPREVfU1RfQ09ORChvcF9uYW1lLCBvcF9maWVsZCwgY29uZF9uYW1lLCBjb25kX2ZpZWxkKSAgXAorKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBBVlIzMl9PUENfICMjIG9wX25hbWUgIyMgY29uZF9uYW1lICwgNCwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgMHhlMWYwMDAwMCB8IChjb25kX2ZpZWxkIDw8IDEyKSB8IChvcF9maWVsZCAgPDwgOSksIDB4ZTFmMGZlMDAsICAgXAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYXyAjIyBvcF9uYW1lICMjIGNvbmRfbmFtZSBdLCAgICAgIFwKKysgICAgICBCRkRfUkVMT0NfVU5VU0VELCAzLCAtMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWF0sICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9LOUVdLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkmYXZyMzJfaWZpZWxkX3RhYmxlW0FWUjMyX0lGSUVMRF9SWV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSwKKysKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1csIDAsIEVRLCAwKSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1csIDAsIE5FLCAxKSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1csIDAsIENDLCAyKSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1csIDAsIENTLCAzKSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1csIDAsIEdFLCA0KSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1csIDAsIExULCA1KSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1csIDAsIE1JLCA2KSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1csIDAsIFBMLCA3KSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1csIDAsIExTLCA4KSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1csIDAsIEdULCA5KSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1csIDAsIExFLCAxMCkgCisrICAgIEFWUjMyX09QQ09ERV9MRF9DT05EIChMRF9XLCAwLCBISSwgMTEpIAorKyAgICBBVlIzMl9PUENPREVfTERfQ09ORCAoTERfVywgMCwgVlMsIDEyKSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1csIDAsIFZDLCAxMykgCisrICAgIEFWUjMyX09QQ09ERV9MRF9DT05EIChMRF9XLCAwLCBRUywgMTQpIAorKyAgICBBVlIzMl9PUENPREVfTERfQ09ORCAoTERfVywgMCwgQUwsIDE1KSAKKysKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1NILCAxLCBFUSwgMCkgCisrICAgIEFWUjMyX09QQ09ERV9MRF9DT05EIChMRF9TSCwgMSwgTkUsIDEpIAorKyAgICBBVlIzMl9PUENPREVfTERfQ09ORCAoTERfU0gsIDEsIENDLCAyKSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1NILCAxLCBDUywgMykgCisrICAgIEFWUjMyX09QQ09ERV9MRF9DT05EIChMRF9TSCwgMSwgR0UsIDQpIAorKyAgICBBVlIzMl9PUENPREVfTERfQ09ORCAoTERfU0gsIDEsIExULCA1KSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1NILCAxLCBNSSwgNikgCisrICAgIEFWUjMyX09QQ09ERV9MRF9DT05EIChMRF9TSCwgMSwgUEwsIDcpIAorKyAgICBBVlIzMl9PUENPREVfTERfQ09ORCAoTERfU0gsIDEsIExTLCA4KSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1NILCAxLCBHVCwgOSkgCisrICAgIEFWUjMyX09QQ09ERV9MRF9DT05EIChMRF9TSCwgMSwgTEUsIDEwKSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1NILCAxLCBISSwgMTEpIAorKyAgICBBVlIzMl9PUENPREVfTERfQ09ORCAoTERfU0gsIDEsIFZTLCAxMikgCisrICAgIEFWUjMyX09QQ09ERV9MRF9DT05EIChMRF9TSCwgMSwgVkMsIDEzKSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1NILCAxLCBRUywgMTQpIAorKyAgICBBVlIzMl9PUENPREVfTERfQ09ORCAoTERfU0gsIDEsIEFMLCAxNSkgCisrCisrICAgIEFWUjMyX09QQ09ERV9MRF9DT05EIChMRF9VSCwgMiwgRVEsIDApIAorKyAgICBBVlIzMl9PUENPREVfTERfQ09ORCAoTERfVUgsIDIsIE5FLCAxKSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1VILCAyLCBDQywgMikgCisrICAgIEFWUjMyX09QQ09ERV9MRF9DT05EIChMRF9VSCwgMiwgQ1MsIDMpIAorKyAgICBBVlIzMl9PUENPREVfTERfQ09ORCAoTERfVUgsIDIsIEdFLCA0KSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1VILCAyLCBMVCwgNSkgCisrICAgIEFWUjMyX09QQ09ERV9MRF9DT05EIChMRF9VSCwgMiwgTUksIDYpIAorKyAgICBBVlIzMl9PUENPREVfTERfQ09ORCAoTERfVUgsIDIsIFBMLCA3KSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1NILCAyLCBMUywgOCkgCisrICAgIEFWUjMyX09QQ09ERV9MRF9DT05EIChMRF9TSCwgMiwgR1QsIDkpIAorKyAgICBBVlIzMl9PUENPREVfTERfQ09ORCAoTERfU0gsIDIsIExFLCAxMCkgCisrICAgIEFWUjMyX09QQ09ERV9MRF9DT05EIChMRF9TSCwgMiwgSEksIDExKSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1NILCAyLCBWUywgMTIpIAorKyAgICBBVlIzMl9PUENPREVfTERfQ09ORCAoTERfU0gsIDIsIFZDLCAxMykgCisrICAgIEFWUjMyX09QQ09ERV9MRF9DT05EIChMRF9TSCwgMiwgUVMsIDE0KSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1NILCAyLCBBTCwgMTUpIAorKworKyAgICBBVlIzMl9PUENPREVfTERfQ09ORCAoTERfU0IsIDMsIEVRLCAwKSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1NCLCAzLCBORSwgMSkgCisrICAgIEFWUjMyX09QQ09ERV9MRF9DT05EIChMRF9TQiwgMywgQ0MsIDIpIAorKyAgICBBVlIzMl9PUENPREVfTERfQ09ORCAoTERfU0IsIDMsIENTLCAzKSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1NCLCAzLCBHRSwgNCkgCisrICAgIEFWUjMyX09QQ09ERV9MRF9DT05EIChMRF9TQiwgMywgTFQsIDUpIAorKyAgICBBVlIzMl9PUENPREVfTERfQ09ORCAoTERfU0IsIDMsIE1JLCA2KSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1NCLCAzLCBQTCwgNykgCisrICAgIEFWUjMyX09QQ09ERV9MRF9DT05EIChMRF9TQiwgMywgTFMsIDgpIAorKyAgICBBVlIzMl9PUENPREVfTERfQ09ORCAoTERfU0IsIDMsIEdULCA5KSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1NCLCAzLCBMRSwgMTApIAorKyAgICBBVlIzMl9PUENPREVfTERfQ09ORCAoTERfU0IsIDMsIEhJLCAxMSkgCisrICAgIEFWUjMyX09QQ09ERV9MRF9DT05EIChMRF9TQiwgMywgVlMsIDEyKSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1NCLCAzLCBWQywgMTMpIAorKyAgICBBVlIzMl9PUENPREVfTERfQ09ORCAoTERfU0IsIDMsIFFTLCAxNCkgCisrICAgIEFWUjMyX09QQ09ERV9MRF9DT05EIChMRF9TQiwgMywgQUwsIDE1KSAKKysKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1VCLCA0LCBFUSwgMCkgCisrICAgIEFWUjMyX09QQ09ERV9MRF9DT05EIChMRF9VQiwgNCwgTkUsIDEpIAorKyAgICBBVlIzMl9PUENPREVfTERfQ09ORCAoTERfVUIsIDQsIENDLCAyKSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1VCLCA0LCBDUywgMykgCisrICAgIEFWUjMyX09QQ09ERV9MRF9DT05EIChMRF9VQiwgNCwgR0UsIDQpIAorKyAgICBBVlIzMl9PUENPREVfTERfQ09ORCAoTERfVUIsIDQsIExULCA1KSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1VCLCA0LCBNSSwgNikgCisrICAgIEFWUjMyX09QQ09ERV9MRF9DT05EIChMRF9VQiwgNCwgUEwsIDcpIAorKyAgICBBVlIzMl9PUENPREVfTERfQ09ORCAoTERfVUIsIDQsIExTLCA4KSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1VCLCA0LCBHVCwgOSkgCisrICAgIEFWUjMyX09QQ09ERV9MRF9DT05EIChMRF9VQiwgNCwgTEUsIDEwKSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1VCLCA0LCBISSwgMTEpIAorKyAgICBBVlIzMl9PUENPREVfTERfQ09ORCAoTERfVUIsIDQsIFZTLCAxMikgCisrICAgIEFWUjMyX09QQ09ERV9MRF9DT05EIChMRF9VQiwgNCwgVkMsIDEzKSAKKysgICAgQVZSMzJfT1BDT0RFX0xEX0NPTkQgKExEX1VCLCA0LCBRUywgMTQpIAorKyAgICBBVlIzMl9PUENPREVfTERfQ09ORCAoTERfVUIsIDQsIEFMLCAxNSkgCisrCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9XLCA1LCBFUSwgMCkgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9XLCA1LCBORSwgMSkgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9XLCA1LCBDQywgMikgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9XLCA1LCBDUywgMykgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9XLCA1LCBHRSwgNCkgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9XLCA1LCBMVCwgNSkgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9XLCA1LCBNSSwgNikgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9XLCA1LCBQTCwgNykgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9XLCA1LCBMUywgOCkgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9XLCA1LCBHVCwgOSkgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9XLCA1LCBMRSwgMTApIAorKyAgICBBVlIzMl9PUENPREVfU1RfQ09ORCAoU1RfVywgNSwgSEksIDExKSAKKysgICAgQVZSMzJfT1BDT0RFX1NUX0NPTkQgKFNUX1csIDUsIFZTLCAxMikgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9XLCA1LCBWQywgMTMpIAorKyAgICBBVlIzMl9PUENPREVfU1RfQ09ORCAoU1RfVywgNSwgUVMsIDE0KSAKKysgICAgQVZSMzJfT1BDT0RFX1NUX0NPTkQgKFNUX1csIDUsIEFMLCAxNSkgCisrCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9ILCA2LCBFUSwgMCkgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9ILCA2LCBORSwgMSkgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9ILCA2LCBDQywgMikgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9ILCA2LCBDUywgMykgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9ILCA2LCBHRSwgNCkgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9ILCA2LCBMVCwgNSkgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9ILCA2LCBNSSwgNikgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9ILCA2LCBQTCwgNykgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9ILCA2LCBMUywgOCkgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9ILCA2LCBHVCwgOSkgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9ILCA2LCBMRSwgMTApIAorKyAgICBBVlIzMl9PUENPREVfU1RfQ09ORCAoU1RfSCwgNiwgSEksIDExKSAKKysgICAgQVZSMzJfT1BDT0RFX1NUX0NPTkQgKFNUX0gsIDYsIFZTLCAxMikgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9ILCA2LCBWQywgMTMpIAorKyAgICBBVlIzMl9PUENPREVfU1RfQ09ORCAoU1RfSCwgNiwgUVMsIDE0KSAKKysgICAgQVZSMzJfT1BDT0RFX1NUX0NPTkQgKFNUX0gsIDYsIEFMLCAxNSkgCisrCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9CLCA3LCBFUSwgMCkgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9CLCA3LCBORSwgMSkgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9CLCA3LCBDQywgMikgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9CLCA3LCBDUywgMykgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9CLCA3LCBHRSwgNCkgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9CLCA3LCBMVCwgNSkgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9CLCA3LCBNSSwgNikgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9CLCA3LCBQTCwgNykgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9CLCA3LCBMUywgOCkgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9CLCA3LCBHVCwgOSkgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9CLCA3LCBMRSwgMTApIAorKyAgICBBVlIzMl9PUENPREVfU1RfQ09ORCAoU1RfQiwgNywgSEksIDExKSAKKysgICAgQVZSMzJfT1BDT0RFX1NUX0NPTkQgKFNUX0IsIDcsIFZTLCAxMikgCisrICAgIEFWUjMyX09QQ09ERV9TVF9DT05EIChTVF9CLCA3LCBWQywgMTMpIAorKyAgICBBVlIzMl9PUENPREVfU1RfQ09ORCAoU1RfQiwgNywgUVMsIDE0KSAKKysgICAgQVZSMzJfT1BDT0RFX1NUX0NPTkQgKFNUX0IsIDcsIEFMLCAxNSkgCisrCisrICAgIHsKKysgICAgICBBVlIzMl9PUENfTU9WSCwgNCwgMHhmYzEwMDAwMCwgMHhmZmYwMDAwMCwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9NT1ZIXSwKKysgICAgICBCRkRfUkVMT0NfQVZSMzJfMTZVLCAgMiwgMSwKKysgICAgICB7CisrCSZhdnIzMl9pZmllbGRfdGFibGVbQVZSMzJfSUZJRUxEX1JZXSwKKysJJmF2cjMyX2lmaWVsZF90YWJsZVtBVlIzMl9JRklFTERfSzE2XSwKKysgICAgICB9LAorKyAgICB9LAorKworKyB9OworKworKyNkZWZpbmUgRlBBTElBU19EWFkobmFtZSwgb3Bjb2RlKQkJCVwKKysgIHsJCQkJCQkJXAorKyAgICBBVlIzMl9BTElBU18jI25hbWUjI19TLAkJCQlcCisrICAgICZhdnIzMl9vcGNfdGFibGVbQVZSMzJfT1BDX0NPUF0sCQkJXAorKyAgICB7CQkJCQkJCVwKKysgICAgICB7IDAsIDAgfSwJCQkJCQlcCisrICAgICAgeyAxLCAwIH0sIHsgMSwgMSB9LCB7IDEsIDIgfSwJCQlcCisrICAgICAgeyAwLCBvcGNvZGUgfSwJCQkJCVwKKysgICAgfSwJCQkJCQkJXAorKyAgfSwgewkJCQkJCQlcCisrICAgIEFWUjMyX0FMSUFTXyMjbmFtZSMjX0QsCQkJCVwKKysgICAgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfQ09QXSwJCQlcCisrICAgIHsJCQkJCQkJXAorKyAgICAgIHsgMCwgMCB9LAkJCQkJCVwKKysgICAgICB7IDEsIDAgfSwgeyAxLCAxIH0sIHsgMSwgMiB9LAkJCVwKKysgICAgICB7IDAsIChvcGNvZGUpIHwgMHg0MCB9LAkJCQlcCisrICAgIH0sCQkJCQkJCVwKKysgIH0KKysjZGVmaW5lIEZQQUxJQVNfRFgobmFtZSwgb3Bjb2RlKQkJCVwKKysgIHsJCQkJCQkJXAorKyAgICBBVlIzMl9BTElBU18jI25hbWUjI19TLAkJCQlcCisrICAgICZhdnIzMl9vcGNfdGFibGVbQVZSMzJfT1BDX0NPUF0sCQkJXAorKyAgICB7CQkJCQkJCVwKKysgICAgICB7IDAsIDAgfSwJCQkJCQlcCisrICAgICAgeyAxLCAwIH0sIHsgMSwgMSB9LCB7IDAsIDAgfSwJCQlcCisrICAgICAgeyAwLCBvcGNvZGUgfSwJCQkJCVwKKysgICAgfSwJCQkJCQkJXAorKyAgfSwgewkJCQkJCQlcCisrICAgIEFWUjMyX0FMSUFTXyMjbmFtZSMjX0QsCQkJCVwKKysgICAgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfQ09QXSwJCQlcCisrICAgIHsJCQkJCQkJXAorKyAgICAgIHsgMCwgMCB9LAkJCQkJCVwKKysgICAgICB7IDEsIDAgfSwgeyAxLCAxIH0sIHsgMCwgMCB9LAkJCVwKKysgICAgICB7IDAsIChvcGNvZGUpIHwgMHg0MCB9LAkJCQlcCisrICAgIH0sCQkJCQkJCVwKKysgIH0KKysjZGVmaW5lIEZQQUxJQVNfWFkobmFtZSwgb3Bjb2RlKQkJCVwKKysgIHsJCQkJCQkJXAorKyAgICBBVlIzMl9BTElBU18jI25hbWUjI19TLAkJCQlcCisrICAgICZhdnIzMl9vcGNfdGFibGVbQVZSMzJfT1BDX0NPUF0sCQkJXAorKyAgICB7CQkJCQkJCVwKKysgICAgICB7IDAsIDAgfSwJCQkJCQlcCisrICAgICAgeyAwLCAwIH0sIHsgMSwgMCB9LCB7IDEsIDEgfSwJCQlcCisrICAgICAgeyAwLCBvcGNvZGUgfSwJCQkJCVwKKysgICAgfSwJCQkJCQkJXAorKyAgfSwgewkJCQkJCQlcCisrICAgIEFWUjMyX0FMSUFTXyMjbmFtZSMjX0QsCQkJCVwKKysgICAgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfQ09QXSwJCQlcCisrICAgIHsJCQkJCQkJXAorKyAgICAgIHsgMCwgMCB9LAkJCQkJCVwKKysgICAgICB7IDAsIDAgfSwgeyAxLCAwIH0sIHsgMSwgMSB9LAkJCVwKKysgICAgICB7IDAsIChvcGNvZGUpIHwgMHg0MCB9LAkJCQlcCisrICAgIH0sCQkJCQkJCVwKKysgIH0KKysKKytjb25zdCBzdHJ1Y3QgYXZyMzJfYWxpYXMgYXZyMzJfYWxpYXNfdGFibGVbXSA9CisrICB7CisrICAgIEZQQUxJQVNfRFhZKEZNQUMsIDB4MDApLAorKyAgICBGUEFMSUFTX0RYWShGTk1BQywgMHgwMSksCisrICAgIEZQQUxJQVNfRFhZKEZNU0MsIDB4MDIpLAorKyAgICBGUEFMSUFTX0RYWShGTk1TQywgMHgwMyksCisrICAgIEZQQUxJQVNfRFhZKEZBREQsIDB4MDQpLAorKyAgICBGUEFMSUFTX0RYWShGU1VCLCAweDA1KSwKKysgICAgRlBBTElBU19EWFkoRk1VTCwgMHgwNiksCisrICAgIEZQQUxJQVNfRFhZKEZOTVVMLCAweDA3KSwKKysgICAgRlBBTElBU19EWChGTkVHLCAweDA4KSwKKysgICAgRlBBTElBU19EWChGQUJTLCAweDA5KSwKKysgICAgRlBBTElBU19YWShGQ01QLCAweDBkKSwKKysgICAgRlBBTElBU19EWChGTU9WMSwgMHgwYSksCisrICAgIHsKKysgICAgICBBVlIzMl9BTElBU19GTU9WMl9TLAorKyAgICAgICZhdnIzMl9vcGNfdGFibGVbQVZSMzJfT1BDX01WQ1JfV10sCisrICAgICAgeyB7IDAsIDAgfSwgeyAxLCAwIH0sIHsgMSwgMSB9LCB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfQUxJQVNfRk1PVjJfRCwKKysgICAgICAmYXZyMzJfb3BjX3RhYmxlW0FWUjMyX09QQ19NVkNSX0RdLAorKyAgICAgIHsgeyAwLCAwIH0sIHsgMSwgMCB9LCB7IDEsIDEgfSwgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX0FMSUFTX0ZNT1YzX1MsCisrICAgICAgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfTVZSQ19XXSwKKysgICAgICB7IHsgMCwgMCB9LCB7IDEsIDAgfSwgeyAxLCAxIH0sIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9BTElBU19GTU9WM19ELAorKyAgICAgICZhdnIzMl9vcGNfdGFibGVbQVZSMzJfT1BDX01WUkNfRF0sCisrICAgICAgeyB7IDAsIDAgfSwgeyAxLCAwIH0sIHsgMSwgMSB9LCB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfQUxJQVNfRkNBU1RTX0QsCisrICAgICAgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfQ09QXSwKKysgICAgICB7CisrCXsgMCwgMCB9LAorKwl7IDEsIDAgfSwgeyAxLCAxIH0sIHsgMCwgMCB9LAorKwl7IDAsIDB4MGYgfSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfQUxJQVNfRkNBU1REX1MsCisrICAgICAgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfQ09QXSwKKysgICAgICB7CisrCXsgMCwgMCB9LAorKwl7IDEsIDAgfSwgeyAxLCAxIH0sIHsgMCwgMCB9LAorKwl7IDAsIDB4MTAgfSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfQUxJQVNfUElDT1NWTUFDMCwKKysgICAgICAmYXZyMzJfb3BjX3RhYmxlW0FWUjMyX09QQ19DT1BdLAorKyAgICAgIHsKKysJeyAwLCBQSUNPX0NQTk8gfSwKKysJeyAxLCAwIH0sIHsgMSwgMSB9LCB7IDEsIDIgfSwKKysJeyAwLCAweDBjIH0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX0FMSUFTX1BJQ09TVk1BQzEsCisrICAgICAgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfQ09QXSwKKysgICAgICB7CisrCXsgMCwgUElDT19DUE5PIH0sCisrCXsgMSwgMCB9LCB7IDEsIDEgfSwgeyAxLCAyIH0sCisrCXsgMCwgMHgwZCB9LAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9BTElBU19QSUNPU1ZNQUMyLAorKyAgICAgICZhdnIzMl9vcGNfdGFibGVbQVZSMzJfT1BDX0NPUF0sCisrICAgICAgeworKwl7IDAsIFBJQ09fQ1BOTyB9LAorKwl7IDEsIDAgfSwgeyAxLCAxIH0sIHsgMSwgMiB9LAorKwl7IDAsIDB4MGUgfSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfQUxJQVNfUElDT1NWTUFDMywKKysgICAgICAmYXZyMzJfb3BjX3RhYmxlW0FWUjMyX09QQ19DT1BdLAorKyAgICAgIHsKKysJeyAwLCBQSUNPX0NQTk8gfSwKKysJeyAxLCAwIH0sIHsgMSwgMSB9LCB7IDEsIDIgfSwKKysJeyAwLCAweDBmIH0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX0FMSUFTX1BJQ09TVk1VTDAsCisrICAgICAgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfQ09QXSwKKysgICAgICB7CisrCXsgMCwgUElDT19DUE5PIH0sCisrCXsgMSwgMCB9LCB7IDEsIDEgfSwgeyAxLCAyIH0sCisrCXsgMCwgMHgwOCB9LAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9BTElBU19QSUNPU1ZNVUwxLAorKyAgICAgICZhdnIzMl9vcGNfdGFibGVbQVZSMzJfT1BDX0NPUF0sCisrICAgICAgeworKwl7IDAsIFBJQ09fQ1BOTyB9LAorKwl7IDEsIDAgfSwgeyAxLCAxIH0sIHsgMSwgMiB9LAorKwl7IDAsIDB4MDkgfSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfQUxJQVNfUElDT1NWTVVMMiwKKysgICAgICAmYXZyMzJfb3BjX3RhYmxlW0FWUjMyX09QQ19DT1BdLAorKyAgICAgIHsKKysJeyAwLCBQSUNPX0NQTk8gfSwKKysJeyAxLCAwIH0sIHsgMSwgMSB9LCB7IDEsIDIgfSwKKysJeyAwLCAweDBhIH0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX0FMSUFTX1BJQ09TVk1VTDMsCisrICAgICAgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfQ09QXSwKKysgICAgICB7CisrCXsgMCwgUElDT19DUE5PIH0sCisrCXsgMSwgMCB9LCB7IDEsIDEgfSwgeyAxLCAyIH0sCisrCXsgMCwgMHgwYiB9LAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9BTElBU19QSUNPVk1BQzAsCisrICAgICAgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfQ09QXSwKKysgICAgICB7CisrCXsgMCwgUElDT19DUE5PIH0sCisrCXsgMSwgMCB9LCB7IDEsIDEgfSwgeyAxLCAyIH0sCisrCXsgMCwgMHgwNCB9LAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9BTElBU19QSUNPVk1BQzEsCisrICAgICAgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfQ09QXSwKKysgICAgICB7CisrCXsgMCwgUElDT19DUE5PIH0sCisrCXsgMSwgMCB9LCB7IDEsIDEgfSwgeyAxLCAyIH0sCisrCXsgMCwgMHgwNSB9LAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9BTElBU19QSUNPVk1BQzIsCisrICAgICAgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfQ09QXSwKKysgICAgICB7CisrCXsgMCwgUElDT19DUE5PIH0sCisrCXsgMSwgMCB9LCB7IDEsIDEgfSwgeyAxLCAyIH0sCisrCXsgMCwgMHgwNiB9LAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9BTElBU19QSUNPVk1BQzMsCisrICAgICAgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfQ09QXSwKKysgICAgICB7CisrCXsgMCwgUElDT19DUE5PIH0sCisrCXsgMSwgMCB9LCB7IDEsIDEgfSwgeyAxLCAyIH0sCisrCXsgMCwgMHgwNyB9LAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9BTElBU19QSUNPVk1VTDAsCisrICAgICAgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfQ09QXSwKKysgICAgICB7CisrCXsgMCwgUElDT19DUE5PIH0sCisrCXsgMSwgMCB9LCB7IDEsIDEgfSwgeyAxLCAyIH0sCisrCXsgMCwgMHgwMCB9LAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9BTElBU19QSUNPVk1VTDEsCisrICAgICAgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfQ09QXSwKKysgICAgICB7CisrCXsgMCwgUElDT19DUE5PIH0sCisrCXsgMSwgMCB9LCB7IDEsIDEgfSwgeyAxLCAyIH0sCisrCXsgMCwgMHgwMSB9LAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9BTElBU19QSUNPVk1VTDIsCisrICAgICAgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfQ09QXSwKKysgICAgICB7CisrCXsgMCwgUElDT19DUE5PIH0sCisrCXsgMSwgMCB9LCB7IDEsIDEgfSwgeyAxLCAyIH0sCisrCXsgMCwgMHgwMiB9LAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9BTElBU19QSUNPVk1VTDMsCisrICAgICAgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfQ09QXSwKKysgICAgICB7CisrCXsgMCwgUElDT19DUE5PIH0sCisrCXsgMSwgMCB9LCB7IDEsIDEgfSwgeyAxLCAyIH0sCisrCXsgMCwgMHgwMyB9LAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9BTElBU19QSUNPTERfRDEsCisrICAgICAgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfTERDX0QxXSwKKysgICAgICB7CisrCXsgMCwgUElDT19DUE5PIH0sCisrCXsgMSwgMCB9LCB7IDEsIDEgfSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfQUxJQVNfUElDT0xEX0QyLAorKyAgICAgICZhdnIzMl9vcGNfdGFibGVbQVZSMzJfT1BDX0xEQ19EMl0sCisrICAgICAgeworKwl7IDAsIFBJQ09fQ1BOTyB9LAorKwl7IDEsIDAgfSwgeyAxLCAxIH0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX0FMSUFTX1BJQ09MRF9EMywKKysgICAgICAmYXZyMzJfb3BjX3RhYmxlW0FWUjMyX09QQ19MRENfRDNdLAorKyAgICAgIHsKKysJeyAwLCBQSUNPX0NQTk8gfSwKKysJeyAxLCAwIH0sIHsgMSwgMSB9LCB7IDEsIDIgfSwgeyAxLCAzIH0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX0FMSUFTX1BJQ09MRF9XMSwKKysgICAgICAmYXZyMzJfb3BjX3RhYmxlW0FWUjMyX09QQ19MRENfVzFdLAorKyAgICAgIHsKKysJeyAwLCBQSUNPX0NQTk8gfSwKKysJeyAxLCAwIH0sIHsgMSwgMSB9LAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9BTElBU19QSUNPTERfVzIsCisrICAgICAgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfTERDX1cyXSwKKysgICAgICB7CisrCXsgMCwgUElDT19DUE5PIH0sCisrCXsgMSwgMCB9LCB7IDEsIDEgfSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfQUxJQVNfUElDT0xEX1czLAorKyAgICAgICZhdnIzMl9vcGNfdGFibGVbQVZSMzJfT1BDX0xEQ19XM10sCisrICAgICAgeworKwl7IDAsIFBJQ09fQ1BOTyB9LAorKwl7IDEsIDAgfSwgeyAxLCAxIH0sIHsgMSwgMiB9LCB7IDEsIDMgfSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfQUxJQVNfUElDT0xETV9ELAorKyAgICAgICZhdnIzMl9vcGNfdGFibGVbQVZSMzJfT1BDX0xEQ01fRF0sCisrICAgICAgeworKwl7IDAsIFBJQ09fQ1BOTyB9LAorKwl7IDEsIDAgfSwgeyAxLCAxIH0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX0FMSUFTX1BJQ09MRE1fRF9QVSwKKysgICAgICAmYXZyMzJfb3BjX3RhYmxlW0FWUjMyX09QQ19MRENNX0RfUFVdLAorKyAgICAgIHsKKysJeyAwLCBQSUNPX0NQTk8gfSwKKysJeyAxLCAwIH0sIHsgMSwgMSB9LAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9BTElBU19QSUNPTERNX1csCisrICAgICAgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfTERDTV9XXSwKKysgICAgICB7CisrCXsgMCwgUElDT19DUE5PIH0sCisrCXsgMSwgMCB9LCB7IDEsIDEgfSwgeyAxLCAyIH0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX0FMSUFTX1BJQ09MRE1fV19QVSwKKysgICAgICAmYXZyMzJfb3BjX3RhYmxlW0FWUjMyX09QQ19MRENNX1dfUFVdLAorKyAgICAgIHsKKysJeyAwLCBQSUNPX0NQTk8gfSwKKysJeyAxLCAwIH0sIHsgMSwgMSB9LCB7IDEsIDIgfSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfQUxJQVNfUElDT01WX0QxLAorKyAgICAgICZhdnIzMl9vcGNfdGFibGVbQVZSMzJfT1BDX01WQ1JfRF0sCisrICAgICAgeworKwl7IDAsIFBJQ09fQ1BOTyB9LAorKwl7IDEsIDAgfSwgeyAxLCAxIH0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX0FMSUFTX1BJQ09NVl9EMiwKKysgICAgICAmYXZyMzJfb3BjX3RhYmxlW0FWUjMyX09QQ19NVlJDX0RdLAorKyAgICAgIHsKKysJeyAwLCBQSUNPX0NQTk8gfSwKKysJeyAxLCAwIH0sIHsgMSwgMSB9LAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9BTElBU19QSUNPTVZfVzEsCisrICAgICAgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfTVZDUl9XXSwKKysgICAgICB7CisrCXsgMCwgUElDT19DUE5PIH0sCisrCXsgMSwgMCB9LCB7IDEsIDEgfSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfQUxJQVNfUElDT01WX1cyLAorKyAgICAgICZhdnIzMl9vcGNfdGFibGVbQVZSMzJfT1BDX01WUkNfV10sCisrICAgICAgeworKwl7IDAsIFBJQ09fQ1BOTyB9LAorKwl7IDEsIDAgfSwgeyAxLCAxIH0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX0FMSUFTX1BJQ09TVF9EMSwKKysgICAgICAmYXZyMzJfb3BjX3RhYmxlW0FWUjMyX09QQ19TVENfRDFdLAorKyAgICAgIHsKKysJeyAwLCBQSUNPX0NQTk8gfSwKKysJeyAxLCAwIH0sIHsgMSwgMSB9LCB7IDEsIDIgfSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfQUxJQVNfUElDT1NUX0QyLAorKyAgICAgICZhdnIzMl9vcGNfdGFibGVbQVZSMzJfT1BDX1NUQ19EMl0sCisrICAgICAgeworKwl7IDAsIFBJQ09fQ1BOTyB9LAorKwl7IDEsIDAgfSwgeyAxLCAxIH0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX0FMSUFTX1BJQ09TVF9EMywKKysgICAgICAmYXZyMzJfb3BjX3RhYmxlW0FWUjMyX09QQ19TVENfRDNdLAorKyAgICAgIHsKKysJeyAwLCBQSUNPX0NQTk8gfSwKKysJeyAxLCAwIH0sIHsgMSwgMSB9LCB7IDEsIDIgfSwgeyAxLCAzIH0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX0FMSUFTX1BJQ09TVF9XMSwKKysgICAgICAmYXZyMzJfb3BjX3RhYmxlW0FWUjMyX09QQ19TVENfVzFdLAorKyAgICAgIHsKKysJeyAwLCBQSUNPX0NQTk8gfSwKKysJeyAxLCAwIH0sIHsgMSwgMSB9LCB7IDEsIDIgfSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfQUxJQVNfUElDT1NUX1cyLAorKyAgICAgICZhdnIzMl9vcGNfdGFibGVbQVZSMzJfT1BDX1NUQ19XMl0sCisrICAgICAgeworKwl7IDAsIFBJQ09fQ1BOTyB9LAorKwl7IDEsIDAgfSwgeyAxLCAxIH0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX0FMSUFTX1BJQ09TVF9XMywKKysgICAgICAmYXZyMzJfb3BjX3RhYmxlW0FWUjMyX09QQ19TVENfVzNdLAorKyAgICAgIHsKKysJeyAwLCBQSUNPX0NQTk8gfSwKKysJeyAxLCAwIH0sIHsgMSwgMSB9LCB7IDEsIDIgfSwgeyAxLCAzIH0sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX0FMSUFTX1BJQ09TVE1fRCwKKysgICAgICAmYXZyMzJfb3BjX3RhYmxlW0FWUjMyX09QQ19TVENNX0RdLAorKyAgICAgIHsKKysJeyAwLCBQSUNPX0NQTk8gfSwKKysJeyAxLCAwIH0sIHsgMSwgMSB9LAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9BTElBU19QSUNPU1RNX0RfUFUsCisrICAgICAgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfU1RDTV9EX1BVXSwKKysgICAgICB7CisrCXsgMCwgUElDT19DUE5PIH0sCisrCXsgMSwgMCB9LCB7IDEsIDEgfSwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfQUxJQVNfUElDT1NUTV9XLAorKyAgICAgICZhdnIzMl9vcGNfdGFibGVbQVZSMzJfT1BDX1NUQ01fV10sCisrICAgICAgeworKwl7IDAsIFBJQ09fQ1BOTyB9LAorKwl7IDEsIDAgfSwgeyAxLCAxIH0sIHsgMSwgMiB9LAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9BTElBU19QSUNPU1RNX1dfUFUsCisrICAgICAgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfU1RDTV9XX1BVXSwKKysgICAgICB7CisrCXsgMCwgUElDT19DUE5PIH0sCisrCXsgMSwgMCB9LCB7IDEsIDEgfSwgeyAxLCAyIH0sCisrICAgICAgfSwKKysgICAgfSwKKysgIH07CisrCisrCisrI2RlZmluZSBTWU5UQVhfTk9STUFMMChpZCwgbW5lLCBvcGMsIGFyY2gpCQkJXAorKyAgewkJCQkJCQlcCisrICAgIEFWUjMyX1NZTlRBWF8jI2lkLCBhcmNoLAkJCVwKKysgICAgJmF2cjMyX21uZW1vbmljX3RhYmxlW0FWUjMyX01ORU1PTklDXyMjbW5lXSwJXAorKyAgICBBVlIzMl9QQVJTRVJfTk9STUFMLAkJCQkJXAorKyAgICB7ICZhdnIzMl9vcGNfdGFibGVbQVZSMzJfT1BDXyMjb3BjXSwgfSwJCVwKKysgICAgTlVMTCwgMCwgeyB9CQkJCQlcCisrICB9CisrI2RlZmluZSBTWU5UQVhfTk9STUFMMShpZCwgbW5lLCBvcGMsIG9wMCwgYXJjaCkJCVwKKysgIHsJCQkJCQkJXAorKyAgICBBVlIzMl9TWU5UQVhfIyNpZCwgYXJjaCwJCQlcCisrICAgICZhdnIzMl9tbmVtb25pY190YWJsZVtBVlIzMl9NTkVNT05JQ18jI21uZV0sCVwKKysgICAgQVZSMzJfUEFSU0VSX05PUk1BTCwJCQkJCVwKKysgICAgeyAmYXZyMzJfb3BjX3RhYmxlW0FWUjMyX09QQ18jI29wY10sIH0sCQlcCisrICAgIE5VTEwsIDEsCQkJCQkJXAorKyAgICB7CQkJCQkJCVwKKysgICAgICBBVlIzMl9PUEVSQU5EXyMjb3AwLAkJCQlcCisrICAgIH0JCQkJCQkJXAorKyAgfQorKyNkZWZpbmUgU1lOVEFYX05PUk1BTE0xKGlkLCBtbmUsIG9wYywgb3AwLCBhcmNoKQkJXAorKyAgewkJCQkJCQlcCisrICAgIEFWUjMyX1NZTlRBWF8jI2lkLCBhcmNoLAkJCVwKKysgICAgJmF2cjMyX21uZW1vbmljX3RhYmxlW0FWUjMyX01ORU1PTklDXyMjbW5lXSwJXAorKyAgICBBVlIzMl9QQVJTRVJfTk9STUFMLAkJCQkJXAorKyAgICB7ICZhdnIzMl9vcGNfdGFibGVbQVZSMzJfT1BDXyMjb3BjXSwgfSwJCQlcCisrICAgIE5VTEwsIC0xLAkJCQkJCVwKKysgICAgewkJCQkJCQlcCisrICAgICAgQVZSMzJfT1BFUkFORF8jI29wMCwJCQkJXAorKyAgICB9CQkJCQkJCVwKKysgIH0KKysjZGVmaW5lIFNZTlRBWF9OT1JNQUwyKGlkLCBtbmUsIG9wYywgb3AwLCBvcDEsIGFyY2gpCQlcCisrICB7CQkJCQkJCVwKKysgICAgQVZSMzJfU1lOVEFYXyMjaWQsIGFyY2gsCQkJXAorKyAgICAmYXZyMzJfbW5lbW9uaWNfdGFibGVbQVZSMzJfTU5FTU9OSUNfIyNtbmVdLAlcCisrICAgIEFWUjMyX1BBUlNFUl9OT1JNQUwsCQkJCQlcCisrICAgIHsgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfIyNvcGNdLCB9LAkJCVwKKysgICAgTlVMTCwgMiwJCQkJCQlcCisrICAgIHsJCQkJCQkJXAorKyAgICAgIEFWUjMyX09QRVJBTkRfIyNvcDAsIEFWUjMyX09QRVJBTkRfIyNvcDEsCQlcCisrICAgIH0JCQkJCQkJXAorKyAgfQorKyNkZWZpbmUgU1lOVEFYX05PUk1BTE0yKGlkLCBtbmUsIG9wYywgb3AwLCBvcDEsIGFyY2gpCQlcCisrICB7CQkJCQkJCVwKKysgICAgQVZSMzJfU1lOVEFYXyMjaWQsIGFyY2gsCQkJXAorKyAgICAmYXZyMzJfbW5lbW9uaWNfdGFibGVbQVZSMzJfTU5FTU9OSUNfIyNtbmVdLAlcCisrICAgIEFWUjMyX1BBUlNFUl9OT1JNQUwsCQkJCQlcCisrICAgIHsgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfIyNvcGNdLCB9LAkJCVwKKysgICAgTlVMTCwgLTIsCQkJCQkJXAorKyAgICB7CQkJCQkJCVwKKysgICAgICBBVlIzMl9PUEVSQU5EXyMjb3AwLCBBVlIzMl9PUEVSQU5EXyMjb3AxLAkJXAorKyAgICB9CQkJCQkJCVwKKysgIH0KKysjZGVmaW5lIFNZTlRBWF9OT1JNQUwzKGlkLCBtbmUsIG9wYywgb3AwLCBvcDEsIG9wMiwgYXJjaCkJXAorKyAgewkJCQkJCQlcCisrICAgIEFWUjMyX1NZTlRBWF8jI2lkLCBhcmNoLAkJCVwKKysgICAgJmF2cjMyX21uZW1vbmljX3RhYmxlW0FWUjMyX01ORU1PTklDXyMjbW5lXSwJXAorKyAgICBBVlIzMl9QQVJTRVJfTk9STUFMLAkJCQkJXAorKyAgICB7ICZhdnIzMl9vcGNfdGFibGVbQVZSMzJfT1BDXyMjb3BjXSwgfSwJCQlcCisrICAgIE5VTEwsIDMsCQkJCQkJXAorKyAgICB7CQkJCQkJCVwKKysgICAgICBBVlIzMl9PUEVSQU5EXyMjb3AwLCBBVlIzMl9PUEVSQU5EXyMjb3AxLAkJXAorKyAgICAgIEFWUjMyX09QRVJBTkRfIyNvcDIsCQkJCVwKKysgICAgfQkJCQkJCQlcCisrICB9CisrI2RlZmluZSBTWU5UQVhfTk9STUFMTTMoaWQsIG1uZSwgb3BjLCBvcDAsIG9wMSwgb3AyLCBhcmNoKQlcCisrICB7CQkJCQkJCVwKKysgICAgQVZSMzJfU1lOVEFYXyMjaWQsIGFyY2gsCQkJXAorKyAgICAmYXZyMzJfbW5lbW9uaWNfdGFibGVbQVZSMzJfTU5FTU9OSUNfIyNtbmVdLAlcCisrICAgIEFWUjMyX1BBUlNFUl9OT1JNQUwsCQkJCQlcCisrICAgIHsgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfIyNvcGNdLCB9LAkJCVwKKysgICAgTlVMTCwgLTMsCQkJCQkJXAorKyAgICB7CQkJCQkJCVwKKysgICAgICBBVlIzMl9PUEVSQU5EXyMjb3AwLCBBVlIzMl9PUEVSQU5EXyMjb3AxLAkJXAorKyAgICAgIEFWUjMyX09QRVJBTkRfIyNvcDIsCQkJCVwKKysgICAgfQkJCQkJCQlcCisrICB9CisrI2RlZmluZSBTWU5UQVhfTk9STUFMNChpZCwgbW5lLCBvcGMsIG9wMCwgb3AxLCBvcDIsIG9wMywgYXJjaClcCisrICB7CQkJCQkJCVwKKysgICAgQVZSMzJfU1lOVEFYXyMjaWQsIGFyY2gsCQkJXAorKyAgICAmYXZyMzJfbW5lbW9uaWNfdGFibGVbQVZSMzJfTU5FTU9OSUNfIyNtbmVdLAlcCisrICAgIEFWUjMyX1BBUlNFUl9OT1JNQUwsCQkJCQlcCisrICAgIHsgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfIyNvcGNdLCB9LAkJCVwKKysgICAgTlVMTCwgNCwJCQkJCQlcCisrICAgIHsJCQkJCQkJXAorKyAgICAgIEFWUjMyX09QRVJBTkRfIyNvcDAsIEFWUjMyX09QRVJBTkRfIyNvcDEsCQlcCisrICAgICAgQVZSMzJfT1BFUkFORF8jI29wMiwgQVZSMzJfT1BFUkFORF8jI29wMywJCVwKKysgICAgfQkJCQkJCQlcCisrICB9CisrI2RlZmluZSBTWU5UQVhfTk9STUFMNShpZCwgbW5lLCBvcGMsIG9wMCwgb3AxLCBvcDIsIG9wMywgb3A0LCBhcmNoKQlcCisrICB7CQkJCQkJCQlcCisrICAgIEFWUjMyX1NZTlRBWF8jI2lkLCBhcmNoLAkJCQlcCisrICAgICZhdnIzMl9tbmVtb25pY190YWJsZVtBVlIzMl9NTkVNT05JQ18jI21uZV0sCQlcCisrICAgIEFWUjMyX1BBUlNFUl9OT1JNQUwsCQkJCQkJXAorKyAgICB7ICZhdnIzMl9vcGNfdGFibGVbQVZSMzJfT1BDXyMjb3BjXSwgfSwJCQkJXAorKyAgICBOVUxMLCA1LAkJCQkJCQlcCisrICAgIHsJCQkJCQkJCVwKKysgICAgICBBVlIzMl9PUEVSQU5EXyMjb3AwLCBBVlIzMl9PUEVSQU5EXyMjb3AxLAkJCVwKKysgICAgICBBVlIzMl9PUEVSQU5EXyMjb3AyLCBBVlIzMl9PUEVSQU5EXyMjb3AzLAkJCVwKKysgICAgICBBVlIzMl9PUEVSQU5EXyMjb3A0LAkJCQkJXAorKyAgICB9CQkJCQkJCQlcCisrICB9CisrCisrI2RlZmluZSBTWU5UQVhfTk9STUFMX0MxKGlkLCBtbmUsIG9wYywgbnh0LCBvcDAsIGFyY2gpCVwKKysgIHsJCQkJCQkJXAorKyAgICBBVlIzMl9TWU5UQVhfIyNpZCwgYXJjaCwJCQlcCisrICAgICZhdnIzMl9tbmVtb25pY190YWJsZVtBVlIzMl9NTkVNT05JQ18jI21uZV0sCVwKKysgICAgQVZSMzJfUEFSU0VSX05PUk1BTCwJCQkJCVwKKysgICAgeyAmYXZyMzJfb3BjX3RhYmxlW0FWUjMyX09QQ18jI29wY10sIH0sCQkJXAorKyAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF8jI254dF0sIDEsCQlcCisrICAgIHsJCQkJCQkJXAorKyAgICAgIEFWUjMyX09QRVJBTkRfIyNvcDAsCQkJCVwKKysgICAgfQkJCQkJCQlcCisrICB9CisrI2RlZmluZSBTWU5UQVhfTk9STUFMX0NNMShpZCwgbW5lLCBvcGMsIG54dCwgb3AwLCBhcmNoKQlcCisrICB7CQkJCQkJCVwKKysgICAgQVZSMzJfU1lOVEFYXyMjaWQsIGFyY2gsCQkJXAorKyAgICAmYXZyMzJfbW5lbW9uaWNfdGFibGVbQVZSMzJfTU5FTU9OSUNfIyNtbmVdLAlcCisrICAgIEFWUjMyX1BBUlNFUl9OT1JNQUwsCQkJCQlcCisrICAgIHsgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfIyNvcGNdLCB9LAkJCVwKKysgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfIyNueHRdLCAtMSwJXAorKyAgICB7CQkJCQkJCVwKKysgICAgICBBVlIzMl9PUEVSQU5EXyMjb3AwLAkJCQlcCisrICAgIH0JCQkJCQkJXAorKyAgfQorKyNkZWZpbmUgU1lOVEFYX05PUk1BTF9DMihpZCwgbW5lLCBvcGMsIG54dCwgb3AwLCBvcDEsIGFyY2gpCVwKKysgIHsJCQkJCQkJXAorKyAgICBBVlIzMl9TWU5UQVhfIyNpZCwgYXJjaCwJCQlcCisrICAgICZhdnIzMl9tbmVtb25pY190YWJsZVtBVlIzMl9NTkVNT05JQ18jI21uZV0sCVwKKysgICAgQVZSMzJfUEFSU0VSX05PUk1BTCwJCQkJCVwKKysgICAgeyAmYXZyMzJfb3BjX3RhYmxlW0FWUjMyX09QQ18jI29wY10sIH0sCQkJXAorKyAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF8jI254dF0sIDIsCQlcCisrICAgIHsJCQkJCQkJXAorKyAgICAgIEFWUjMyX09QRVJBTkRfIyNvcDAsIEFWUjMyX09QRVJBTkRfIyNvcDEsCQlcCisrICAgIH0JCQkJCQkJXAorKyAgfQorKyNkZWZpbmUgU1lOVEFYX05PUk1BTF9DTTIoaWQsIG1uZSwgb3BjLCBueHQsIG9wMCwgb3AxLCBhcmNoKQlcCisrICB7CQkJCQkJCVwKKysgICAgQVZSMzJfU1lOVEFYXyMjaWQsIGFyY2gsCQkJXAorKyAgICAmYXZyMzJfbW5lbW9uaWNfdGFibGVbQVZSMzJfTU5FTU9OSUNfIyNtbmVdLAlcCisrICAgIEFWUjMyX1BBUlNFUl9OT1JNQUwsCQkJCQlcCisrICAgIHsgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfIyNvcGNdLCB9LAkJCVwKKysgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfIyNueHRdLCAtMiwJXAorKyAgICB7CQkJCQkJCVwKKysgICAgICBBVlIzMl9PUEVSQU5EXyMjb3AwLCBBVlIzMl9PUEVSQU5EXyMjb3AxLAkJXAorKyAgICB9CQkJCQkJCVwKKysgIH0KKysjZGVmaW5lIFNZTlRBWF9OT1JNQUxfQzMoaWQsIG1uZSwgb3BjLCBueHQsIG9wMCwgb3AxLCBvcDIsIGFyY2gpCVwKKysgIHsJCQkJCQkJCVwKKysgICAgQVZSMzJfU1lOVEFYXyMjaWQsIGFyY2gsCQkJCVwKKysgICAgJmF2cjMyX21uZW1vbmljX3RhYmxlW0FWUjMyX01ORU1PTklDXyMjbW5lXSwJCVwKKysgICAgQVZSMzJfUEFSU0VSX05PUk1BTCwJCQkJCQlcCisrICAgIHsgJmF2cjMyX29wY190YWJsZVtBVlIzMl9PUENfIyNvcGNdLCB9LAkJCQlcCisrICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYXyMjbnh0XSwgMywJCQlcCisrICAgIHsJCQkJCQkJCVwKKysgICAgICBBVlIzMl9PUEVSQU5EXyMjb3AwLCBBVlIzMl9PUEVSQU5EXyMjb3AxLAkJCVwKKysgICAgICBBVlIzMl9PUEVSQU5EXyMjb3AyLAkJCQkJXAorKyAgICB9CQkJCQkJCQlcCisrICB9CisrI2RlZmluZSBTWU5UQVhfTk9STUFMX0NNMyhpZCwgbW5lLCBvcGMsIG54dCwgb3AwLCBvcDEsIG9wMiwgYXJjaCkJXAorKyAgewkJCQkJCQkJXAorKyAgICBBVlIzMl9TWU5UQVhfIyNpZCwgYXJjaCwJCQkJXAorKyAgICAmYXZyMzJfbW5lbW9uaWNfdGFibGVbQVZSMzJfTU5FTU9OSUNfIyNtbmVdLAkJXAorKyAgICBBVlIzMl9QQVJTRVJfTk9STUFMLAkJCQkJCVwKKysgICAgeyAmYXZyMzJfb3BjX3RhYmxlW0FWUjMyX09QQ18jI29wY10sIH0sCQkJCVwKKysgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfIyNueHRdLCAtMywJCVwKKysgICAgewkJCQkJCQkJXAorKyAgICAgIEFWUjMyX09QRVJBTkRfIyNvcDAsIEFWUjMyX09QRVJBTkRfIyNvcDEsCQkJXAorKyAgICAgIEFWUjMyX09QRVJBTkRfIyNvcDIsCQkJCQlcCisrICAgIH0JCQkJCQkJCVwKKysgIH0KKysKKysjZGVmaW5lIFNZTlRBWF9GUChuYW1lLCBucl9vcHMpCQkJCQlcCisrICAgIHsJCQkJCQkJCVwKKysgICAgICBBVlIzMl9TWU5UQVhfIyNuYW1lIyNfUywJCQkJCVwKKysgICAgICBBVlIzMl9GUCwgTlVMTCwgQVZSMzJfUEFSU0VSX0FMSUFTLAkJCVwKKysgICAgICB7IC5hbGlhcyA9ICZhdnIzMl9hbGlhc190YWJsZVtBVlIzMl9BTElBU18jI25hbWUjI19TXSB9LAlcCisrICAgICAgTlVMTCwgbnJfb3BzLAkJCQkJCVwKKysgICAgICB7CQkJCQkJCQlcCisrCUFWUjMyX09QRVJBTkRfRlBSRUdfUywJCQkJCVwKKysJQVZSMzJfT1BFUkFORF9GUFJFR19TLAkJCQkJXAorKwlBVlIzMl9PUEVSQU5EX0ZQUkVHX1MsCQkJCQlcCisrICAgICAgfSwJCQkJCQkJXAorKyAgICB9LAkJCQkJCQkJXAorKyAgICB7CQkJCQkJCQlcCisrICAgICAgQVZSMzJfU1lOVEFYXyMjbmFtZSMjX0QsCQkJCQlcCisrICAgICAgQVZSMzJfRlAsIE5VTEwsIEFWUjMyX1BBUlNFUl9BTElBUywJCQlcCisrICAgICAgeyAuYWxpYXMgPSAmYXZyMzJfYWxpYXNfdGFibGVbQVZSMzJfQUxJQVNfIyNuYW1lIyNfRF0gfSwJXAorKyAgICAgIE5VTEwsIG5yX29wcywJCQkJCQlcCisrICAgICAgewkJCQkJCQkJXAorKwlBVlIzMl9PUEVSQU5EX0ZQUkVHX0QsCQkJCQlcCisrCUFWUjMyX09QRVJBTkRfRlBSRUdfRCwJCQkJCVwKKysJQVZSMzJfT1BFUkFORF9GUFJFR19ELAkJCQkJXAorKyAgICAgIH0sCQkJCQkJCVwKKysgICAgfQorKworK2NvbnN0IHN0cnVjdCBhdnIzMl9zeW50YXggYXZyMzJfc3ludGF4X3RhYmxlW10gPQorKyAgeworKyAgICBTWU5UQVhfTk9STUFMMShBQlMsIEFCUywgQUJTLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDEoQUNBTEwsIEFDQUxMLCBBQ0FMTCwgVU5TSUdORURfQ09OU1RfVywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShBQ1IsIEFDUiwgQUNSLCBJTlRSRUcsQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMyhBREMsIEFEQywgQURDLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzIoQUREMSwgQURELCBBREQxLCBBREQyLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMyhBREQyLCBBREQsIEFERDIsIElOVFJFRywgSU5UUkVHLCBJTlRSRUdfTFNMLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwzKEFEREFCUywgQUREQUJTLCBBRERBQlMsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDMoQURESEhfVywgQURESEhfVywgQURESEhfVywgSU5UUkVHLCBJTlRSRUdfSFNFTCwgSU5UUkVHX0hTRUwsIEFWUjMyX0RTUCksCisrICAgIFNZTlRBWF9OT1JNQUxfQzIoQU5EMSwgQU5ELCBBTkQxLCBBTkQyLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MzKEFORDIsIEFORCwgQU5EMiwgQU5EMywgSU5UUkVHLCBJTlRSRUcsIElOVFJFR19MU0wsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDMoQU5EMywgQU5ELCBBTkQzLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHX0xTUiwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKEFOREgsIEFOREgsIEFOREgsIEFOREhfQ09ILCBJTlRSRUcsIFVOU0lHTkVEX0NPTlNULCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwzKEFOREhfQ09ILCBBTkRILCBBTkRIX0NPSCwgSU5UUkVHLCBVTlNJR05FRF9DT05TVCwgQ09ILCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzIoQU5ETCwgQU5ETCwgQU5ETCwgQU5ETF9DT0gsIElOVFJFRywgVU5TSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDMoQU5ETF9DT0gsIEFOREwsIEFORExfQ09ILCBJTlRSRUcsIFVOU0lHTkVEX0NPTlNULCBDT0gsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoQU5ETiwgQU5ETiwgQU5ETiwgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMyhBU1IxLCBBU1IsIEFTUjEsIEFTUjMsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMyhBU1IzLCBBU1IsIEFTUjMsIEFTUjIsIElOVFJFRywgSU5UUkVHLCBVTlNJR05FRF9OVU1CRVIsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoQVNSMiwgQVNSLCBBU1IyLCBJTlRSRUcsIFVOU0lHTkVEX05VTUJFUiwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMNChCRkVYVFMsIEJGRVhUUywgQkZFWFRTLCBJTlRSRUcsIElOVFJFRywgVU5TSUdORURfTlVNQkVSLCBVTlNJR05FRF9OVU1CRVIsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDQoQkZFWFRVLCBCRkVYVFUsIEJGRVhUVSwgSU5UUkVHLCBJTlRSRUcsIFVOU0lHTkVEX05VTUJFUiwgVU5TSUdORURfTlVNQkVSLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUw0KEJGSU5TLCBCRklOUywgQkZJTlMsIElOVFJFRywgSU5UUkVHLCBVTlNJR05FRF9OVU1CRVIsIFVOU0lHTkVEX05VTUJFUiwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMihCTEQsIEJMRCwgQkxELCBJTlRSRUcsIFVOU0lHTkVEX05VTUJFUiwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MxKEJSRVExLCBCUkVRLCBCUkVRMSwgQlJFUTIsIEpNUExBQkVMLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzEoQlJORTEsIEJSTkUsIEJSTkUxLCBCUk5FMiwgSk1QTEFCRUwsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMShCUkNDMSwgQlJDQywgQlJDQzEsIEJSQ0MyLCBKTVBMQUJFTCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MxKEJSQ1MxLCBCUkNTLCBCUkNTMSwgQlJDUzIsIEpNUExBQkVMLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzEoQlJHRTEsIEJSR0UsIEJSR0UxLCBCUkdFMiwgSk1QTEFCRUwsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMShCUkxUMSwgQlJMVCwgQlJMVDEsIEJSTFQyLCBKTVBMQUJFTCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MxKEJSTUkxLCBCUk1JLCBCUk1JMSwgQlJNSTIsIEpNUExBQkVMLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzEoQlJQTDEsIEJSUEwsIEJSUEwxLCBCUlBMMiwgSk1QTEFCRUwsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMShCUkhTMSwgQlJIUywgQlJDQzEsIEJSSFMyLCBKTVBMQUJFTCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MxKEJSTE8xLCBCUkxPLCBCUkNTMSwgQlJMTzIsIEpNUExBQkVMLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKEJSRVEyLCBCUkVRLCBCUkVRMiwgSk1QTEFCRUwsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDEoQlJORTIsIEJSTkUsIEJSTkUyLCBKTVBMQUJFTCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShCUkNDMiwgQlJDQywgQlJDQzIsIEpNUExBQkVMLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKEJSQ1MyLCBCUkNTLCBCUkNTMiwgSk1QTEFCRUwsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDEoQlJHRTIsIEJSR0UsIEJSR0UyLCBKTVBMQUJFTCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShCUkxUMiwgQlJMVCwgQlJMVDIsIEpNUExBQkVMLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKEJSTUkyLCBCUk1JLCBCUk1JMiwgSk1QTEFCRUwsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDEoQlJQTDIsIEJSUEwsIEJSUEwyLCBKTVBMQUJFTCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShCUkxTLCBCUkxTLCBCUkxTLCBKTVBMQUJFTCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShCUkdULCBCUkdULCBCUkdULCBKTVBMQUJFTCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShCUkxFLCBCUkxFLCBCUkxFLCBKTVBMQUJFTCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShCUkhJLCBCUkhJLCBCUkhJLCBKTVBMQUJFTCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShCUlZTLCBCUlZTLCBCUlZTLCBKTVBMQUJFTCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShCUlZDLCBCUlZDLCBCUlZDLCBKTVBMQUJFTCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShCUlFTLCBCUlFTLCBCUlFTLCBKTVBMQUJFTCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShCUkFMLCBCUkFMLCBCUkFMLCBKTVBMQUJFTCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShCUkhTMiwgQlJIUywgQlJDQzIsIEpNUExBQkVMLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKEJSTE8yLCBCUkxPLCBCUkNTMiwgSk1QTEFCRUwsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDAoQlJFQUtQT0lOVCwgQlJFQUtQT0lOVCwgQlJFQUtQT0lOVCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShCUkVWLCBCUkVWLCBCUkVWLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoQlNULCBCU1QsIEJTVCwgSU5UUkVHLCBVTlNJR05FRF9OVU1CRVIsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoQ0FDSEUsIENBQ0hFLCBDQUNIRSwgSU5UUkVHX1NESVNQLCBVTlNJR05FRF9OVU1CRVIsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDEoQ0FTVFNfQiwgQ0FTVFNfQiwgQ0FTVFNfQiwgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKENBU1RTX0gsIENBU1RTX0gsIENBU1RTX0gsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShDQVNUVV9CLCBDQVNUVV9CLCBDQVNUVV9CLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDEoQ0FTVFVfSCwgQ0FTVFVfSCwgQ0FTVFVfSCwgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwyKENCUiwgQ0JSLCBDQlIsIElOVFJFRywgVU5TSUdORURfTlVNQkVSLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwyKENMWiwgQ0xaLCBDTFosIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKENPTSwgQ09NLCBDT00sIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMNShDT1AsIENPUCwgQ09QLCBDUE5PLCBDUFJFRywgQ1BSRUcsIENQUkVHLCBVTlNJR05FRF9OVU1CRVIsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoQ1BfQiwgQ1BfQiwgQ1BfQiwgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoQ1BfSCwgQ1BfSCwgQ1BfSCwgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihDUF9XMSwgQ1BfVywgQ1BfVzEsIENQX1cyLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKENQX1cyLCBDUF9XLCBDUF9XMiwgQ1BfVzMsIElOVFJFRywgU0lHTkVEX0NPTlNULCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwyKENQX1czLCBDUF9XLCBDUF9XMywgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihDUEMxLCBDUEMsIENQQzEsIENQQzIsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKENQQzIsIENQQywgQ1BDMiwgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKENTUkYsIENTUkYsIENTUkYsIFVOU0lHTkVEX05VTUJFUiwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShDU1JGQ1osIENTUkZDWiwgQ1NSRkNaLCBVTlNJR05FRF9OVU1CRVIsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDMoRElWUywgRElWUywgRElWUywgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMyhESVZVLCBESVZVLCBESVZVLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzIoRU9SMSwgRU9SLCBFT1IxLCBFT1IyLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MzKEVPUjIsIEVPUiwgRU9SMiwgRU9SMywgSU5UUkVHLCBJTlRSRUcsIElOVFJFR19MU0wsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDMoRU9SMywgRU9SLCBFT1IzLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHX0xTUiwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMihFT1JMLCBFT1JMLCBFT1JMLCBJTlRSRUcsIFVOU0lHTkVEX0NPTlNULCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwyKEVPUkgsIEVPUkgsIEVPUkgsIElOVFJFRywgVU5TSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDAoRlJTLCBGUlMsIEZSUywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShJQ0FMTCwgSUNBTEwsIElDQUxMLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDEoSU5DSk9TUCwgSU5DSk9TUCwgSU5DSk9TUCwgSk9TUElOQywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKExEX0QxLCBMRF9ELCBMRF9EMSwgTERfRDIsIERXUkVHLCBJTlRSRUdfUE9TVElOQywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKExEX0QyLCBMRF9ELCBMRF9EMiwgTERfRDMsIERXUkVHLCBJTlRSRUdfUFJFREVDLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzIoTERfRDMsIExEX0QsIExEX0QzLCBMRF9ENSwgRFdSRUcsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKExEX0Q1LCBMRF9ELCBMRF9ENSwgTERfRDQsIERXUkVHLCBJTlRSRUdfSU5ERVgsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfRDQsIExEX0QsIExEX0Q0LCBEV1JFRywgSU5UUkVHX1NESVNQLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzIoTERfU0IyLCBMRF9TQiwgTERfU0IyLCBMRF9TQjEsIElOVFJFRywgSU5UUkVHX0lOREVYLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwyKExEX1NCMSwgTERfU0IsIExEX1NCMSwgSU5UUkVHLCBJTlRSRUdfU0RJU1AsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihMRF9VQjEsIExEX1VCLCBMRF9VQjEsIExEX1VCMiwgSU5UUkVHLCBJTlRSRUdfUE9TVElOQywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKExEX1VCMiwgTERfVUIsIExEX1VCMiwgTERfVUI1LCBJTlRSRUcsIElOVFJFR19QUkVERUMsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihMRF9VQjUsIExEX1VCLCBMRF9VQjUsIExEX1VCMywgSU5UUkVHLCBJTlRSRUdfSU5ERVgsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihMRF9VQjMsIExEX1VCLCBMRF9VQjMsIExEX1VCNCwgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfVUI0LCBMRF9VQiwgTERfVUI0LCBJTlRSRUcsIElOVFJFR19TRElTUCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKExEX1NIMSwgTERfU0gsIExEX1NIMSwgTERfU0gyLCBJTlRSRUcsIElOVFJFR19QT1NUSU5DLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzIoTERfU0gyLCBMRF9TSCwgTERfU0gyLCBMRF9TSDUsIElOVFJFRywgSU5UUkVHX1BSRURFQywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKExEX1NINSwgTERfU0gsIExEX1NINSwgTERfU0gzLCBJTlRSRUcsIElOVFJFR19JTkRFWCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKExEX1NIMywgTERfU0gsIExEX1NIMywgTERfU0g0LCBJTlRSRUcsIElOVFJFR19VRElTUF9ILCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwyKExEX1NINCwgTERfU0gsIExEX1NINCwgSU5UUkVHLCBJTlRSRUdfU0RJU1AsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihMRF9VSDEsIExEX1VILCBMRF9VSDEsIExEX1VIMiwgSU5UUkVHLCBJTlRSRUdfUE9TVElOQywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKExEX1VIMiwgTERfVUgsIExEX1VIMiwgTERfVUg1LCBJTlRSRUcsIElOVFJFR19QUkVERUMsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihMRF9VSDUsIExEX1VILCBMRF9VSDUsIExEX1VIMywgSU5UUkVHLCBJTlRSRUdfSU5ERVgsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihMRF9VSDMsIExEX1VILCBMRF9VSDMsIExEX1VINCwgSU5UUkVHLCBJTlRSRUdfVURJU1BfSCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMihMRF9VSDQsIExEX1VILCBMRF9VSDQsIElOVFJFRywgSU5UUkVHX1NESVNQLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzIoTERfVzEsIExEX1csIExEX1cxLCBMRF9XMiwgSU5UUkVHLCBJTlRSRUdfUE9TVElOQywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKExEX1cyLCBMRF9XLCBMRF9XMiwgTERfVzUsIElOVFJFRywgSU5UUkVHX1BSRURFQywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKExEX1c1LCBMRF9XLCBMRF9XNSwgTERfVzYsIElOVFJFRywgSU5UUkVHX0lOREVYLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzIoTERfVzYsIExEX1csIExEX1c2LCBMRF9XMywgSU5UUkVHLCBJTlRSRUdfWElOREVYLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzIoTERfVzMsIExEX1csIExEX1czLCBMRF9XNCwgSU5UUkVHLCBJTlRSRUdfVURJU1BfVywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMihMRF9XNCwgTERfVywgTERfVzQsIElOVFJFRywgSU5UUkVHX1NESVNQLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwzKExEQ19EMSwgTERDX0QsIExEQ19EMSwgQ1BOTywgQ1BSRUdfRCwgSU5UUkVHX1VESVNQX1csIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMyhMRENfRDIsIExEQ19ELCBMRENfRDIsIExEQ19EMSwgQ1BOTywgQ1BSRUdfRCwgSU5UUkVHX1BSRURFQywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MzKExEQ19EMywgTERDX0QsIExEQ19EMywgTERDX0QyLCBDUE5PLCBDUFJFR19ELCBJTlRSRUdfSU5ERVgsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDMoTERDX1cxLCBMRENfVywgTERDX1cxLCBDUE5PLCBDUFJFRywgSU5UUkVHX1VESVNQX1csIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMyhMRENfVzIsIExEQ19XLCBMRENfVzIsIExEQ19XMSwgQ1BOTywgQ1BSRUcsIElOVFJFR19QUkVERUMsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMyhMRENfVzMsIExEQ19XLCBMRENfVzMsIExEQ19XMiwgQ1BOTywgQ1BSRUcsIElOVFJFR19JTkRFWCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMihMREMwX0QsIExEQzBfRCwgTERDMF9ELCBDUFJFR19ELCBJTlRSRUdfVURJU1BfVywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMihMREMwX1csIExEQzBfVywgTERDMF9XLCBDUFJFRywgSU5UUkVHX1VESVNQX1csIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DTTMoTERDTV9ELCBMRENNX0QsIExEQ01fRCwgTERDTV9EX1BVLCBDUE5PLCBJTlRSRUcsIFJFR0xJU1RfQ1BEOCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMTTMoTERDTV9EX1BVLCBMRENNX0QsIExEQ01fRF9QVSwgQ1BOTywgSU5UUkVHX1BPU1RJTkMsIFJFR0xJU1RfQ1BEOCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0NNMyhMRENNX1csIExEQ01fVywgTERDTV9XLCBMRENNX1dfUFUsIENQTk8sIElOVFJFRywgUkVHTElTVF9DUDgsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTE0zKExEQ01fV19QVSwgTERDTV9XLCBMRENNX1dfUFUsIENQTk8sIElOVFJFR19QT1NUSU5DLCBSRUdMSVNUX0NQOCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMihMRERQQywgTEREUEMsIExERFBDLCBJTlRSRUcsIFBDX1VESVNQX1csIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTEREUENfRVhULCBMRERQQywgTEREUENfRVhULCBJTlRSRUcsIFNJR05FRF9DT05TVCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMihMRERTUCwgTEREU1AsIExERFNQLCBJTlRSRUcsIFNQX1VESVNQX1csIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERJTlNfQiwgTERJTlNfQiwgTERJTlNfQiwgSU5UUkVHX0JTRUwsIElOVFJFR19TRElTUCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMihMRElOU19ILCBMRElOU19ILCBMRElOU19ILCBJTlRSRUdfSFNFTCwgSU5UUkVHX1NESVNQX0gsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTE0xKExETSwgTERNLCBMRE0sIFJFR0xJU1RfTERNLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQ00yKExETVRTLCBMRE1UUywgTERNVFMsIExETVRTX1BVLCBJTlRSRUcsIFJFR0xJU1QxNiwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMTTIoTERNVFNfUFUsIExETVRTLCBMRE1UU19QVSwgSU5UUkVHX1BPU1RJTkMsIFJFR0xJU1QxNiwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMihMRFNXUF9TSCwgTERTV1BfU0gsIExEU1dQX1NILCBJTlRSRUcsIElOVFJFR19TRElTUF9ILCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwyKExEU1dQX1VILCBMRFNXUF9VSCwgTERTV1BfVUgsIElOVFJFRywgSU5UUkVHX1NESVNQX0gsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERTV1BfVywgTERTV1BfVywgTERTV1BfVywgSU5UUkVHLCBJTlRSRUdfU0RJU1BfVywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MzKExTTDEsIExTTCwgTFNMMSwgTFNMMywgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MzKExTTDMsIExTTCwgTFNMMywgTFNMMiwgSU5UUkVHLCBJTlRSRUcsIFVOU0lHTkVEX05VTUJFUiwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMihMU0wyLCBMU0wsIExTTDIsIElOVFJFRywgVU5TSUdORURfTlVNQkVSLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzMoTFNSMSwgTFNSLCBMU1IxLCBMU1IzLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzMoTFNSMywgTFNSLCBMU1IzLCBMU1IyLCBJTlRSRUcsIElOVFJFRywgVU5TSUdORURfTlVNQkVSLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwyKExTUjIsIExTUiwgTFNSMiwgSU5UUkVHLCBVTlNJR05FRF9OVU1CRVIsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDMoTUFDLCBNQUMsIE1BQywgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMyhNQUNISF9ELCBNQUNISF9ELCBNQUNISF9ELCBJTlRSRUcsIElOVFJFR19IU0VMLCBJTlRSRUdfSFNFTCwgQVZSMzJfRFNQKSwKKysgICAgU1lOVEFYX05PUk1BTDMoTUFDSEhfVywgTUFDSEhfVywgTUFDSEhfVywgSU5UUkVHLCBJTlRSRUdfSFNFTCwgSU5UUkVHX0hTRUwsIEFWUjMyX0RTUCksCisrICAgIFNZTlRBWF9OT1JNQUwzKE1BQ1NfRCwgTUFDU19ELCBNQUNTX0QsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDMoTUFDU0FUSEhfVywgTUFDU0FUSEhfVywgTUFDU0FUSEhfVywgSU5UUkVHLCBJTlRSRUdfSFNFTCwgSU5UUkVHX0hTRUwsIEFWUjMyX0RTUCksCisrICAgIFNZTlRBWF9OT1JNQUwzKE1BQ1VELCBNQUNVX0QsIE1BQ1VELCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwzKE1BQ1dIX0QsIE1BQ1dIX0QsIE1BQ1dIX0QsIElOVFJFRywgSU5UUkVHLCBJTlRSRUdfSFNFTCwgQVZSMzJfRFNQKSwKKysgICAgU1lOVEFYX05PUk1BTDMoTUFYLCBNQVgsIE1BWCwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShNQ0FMTCwgTUNBTEwsIE1DQUxMLCBNQ0FMTCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMihNRkRSLCBNRkRSLCBNRkRSLCBJTlRSRUcsIFVOU0lHTkVEX0NPTlNUX1csIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTUZTUiwgTUZTUiwgTUZTUiwgSU5UUkVHLCBVTlNJR05FRF9DT05TVF9XLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwzKE1JTiwgTUlOLCBNSU4sIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihNT1YzLCBNT1YsIE1PVjMsIE1PVjEsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzIoTU9WMSwgTU9WLCBNT1YxLCBNT1YyLCBJTlRSRUcsIFNJR05FRF9DT05TVCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMihNT1YyLCBNT1YsIE1PVjIsSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihNT1ZFUTEsIE1PVkVRLCBNT1ZFUTEsIE1PVkVRMiwgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihNT1ZORTEsIE1PVk5FLCBNT1ZORTEsIE1PVk5FMiwgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihNT1ZDQzEsIE1PVkNDLCBNT1ZDQzEsIE1PVkNDMiwgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihNT1ZDUzEsIE1PVkNTLCBNT1ZDUzEsIE1PVkNTMiwgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihNT1ZHRTEsIE1PVkdFLCBNT1ZHRTEsIE1PVkdFMiwgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihNT1ZMVDEsIE1PVkxULCBNT1ZMVDEsIE1PVkxUMiwgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihNT1ZNSTEsIE1PVk1JLCBNT1ZNSTEsIE1PVk1JMiwgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihNT1ZQTDEsIE1PVlBMLCBNT1ZQTDEsIE1PVlBMMiwgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihNT1ZMUzEsIE1PVkxTLCBNT1ZMUzEsIE1PVkxTMiwgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihNT1ZHVDEsIE1PVkdULCBNT1ZHVDEsIE1PVkdUMiwgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihNT1ZMRTEsIE1PVkxFLCBNT1ZMRTEsIE1PVkxFMiwgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihNT1ZISTEsIE1PVkhJLCBNT1ZISTEsIE1PVkhJMiwgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihNT1ZWUzEsIE1PVlZTLCBNT1ZWUzEsIE1PVlZTMiwgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihNT1ZWQzEsIE1PVlZDLCBNT1ZWQzEsIE1PVlZDMiwgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihNT1ZRUzEsIE1PVlFTLCBNT1ZRUzEsIE1PVlFTMiwgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihNT1ZBTDEsIE1PVkFMLCBNT1ZBTDEsIE1PVkFMMiwgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihNT1ZIUzEsIE1PVkhTLCBNT1ZDQzEsIE1PVkhTMiwgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihNT1ZMTzEsIE1PVkxPLCBNT1ZDUzEsIE1PVkxPMiwgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTU9WRVEyLCBNT1ZFUSwgTU9WRVEyLCBJTlRSRUcsIFNJR05FRF9DT05TVCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMihNT1ZORTIsIE1PVk5FLCBNT1ZORTIsIElOVFJFRywgU0lHTkVEX0NPTlNULCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwyKE1PVkNDMiwgTU9WQ0MsIE1PVkNDMiwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTU9WQ1MyLCBNT1ZDUywgTU9WQ1MyLCBJTlRSRUcsIFNJR05FRF9DT05TVCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMihNT1ZHRTIsIE1PVkdFLCBNT1ZHRTIsIElOVFJFRywgU0lHTkVEX0NPTlNULCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwyKE1PVkxUMiwgTU9WTFQsIE1PVkxUMiwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTU9WTUkyLCBNT1ZNSSwgTU9WTUkyLCBJTlRSRUcsIFNJR05FRF9DT05TVCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMihNT1ZQTDIsIE1PVlBMLCBNT1ZQTDIsIElOVFJFRywgU0lHTkVEX0NPTlNULCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwyKE1PVkxTMiwgTU9WTFMsIE1PVkxTMiwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTU9WR1QyLCBNT1ZHVCwgTU9WR1QyLCBJTlRSRUcsIFNJR05FRF9DT05TVCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMihNT1ZMRTIsIE1PVkxFLCBNT1ZMRTIsIElOVFJFRywgU0lHTkVEX0NPTlNULCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwyKE1PVkhJMiwgTU9WSEksIE1PVkhJMiwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTU9WVlMyLCBNT1ZWUywgTU9WVlMyLCBJTlRSRUcsIFNJR05FRF9DT05TVCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMihNT1ZWQzIsIE1PVlZDLCBNT1ZWQzIsIElOVFJFRywgU0lHTkVEX0NPTlNULCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwyKE1PVlFTMiwgTU9WUVMsIE1PVlFTMiwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTU9WQUwyLCBNT1ZBTCwgTU9WQUwyLCBJTlRSRUcsIFNJR05FRF9DT05TVCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMihNT1ZIUzIsIE1PVkhTLCBNT1ZDQzIsIElOVFJFRywgU0lHTkVEX0NPTlNULCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwyKE1PVkxPMiwgTU9WTE8sIE1PVkNTMiwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTVREUiwgTVREUiwgTVREUiwgVU5TSUdORURfQ09OU1RfVywgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwyKE1UU1IsIE1UU1IsIE1UU1IsIFVOU0lHTkVEX0NPTlNUX1csIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKE1VTDEsIE1VTCwgTVVMMSwgTVVMMiwgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMyhNVUwyLCBNVUwsIE1VTDIsIE1VTDMsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDMoTVVMMywgTVVMLCBNVUwzLCBJTlRSRUcsIElOVFJFRywgU0lHTkVEX0NPTlNULCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwzKE1VTEhIX1csIE1VTEhIX1csIE1VTEhIX1csIElOVFJFRywgSU5UUkVHX0hTRUwsIElOVFJFR19IU0VMLCBBVlIzMl9EU1ApLAorKyAgICBTWU5UQVhfTk9STUFMMyhNVUxOSEhfVywgTVVMTkhIX1csIE1VTE5ISF9XLCBJTlRSRUcsIElOVFJFR19IU0VMLCBJTlRSRUdfSFNFTCwgQVZSMzJfRFNQKSwKKysgICAgU1lOVEFYX05PUk1BTDMoTVVMTldIX0QsIE1VTE5XSF9ELCBNVUxOV0hfRCwgSU5UUkVHLCBJTlRSRUcsIElOVFJFR19IU0VMLCBBVlIzMl9EU1ApLAorKyAgICBTWU5UQVhfTk9STUFMMyhNVUxTRCwgTVVMU19ELCBNVUxTRCwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMyhNVUxTQVRISF9ILCBNVUxTQVRISF9ILCBNVUxTQVRISF9ILCBJTlRSRUcsIElOVFJFR19IU0VMLCBJTlRSRUdfSFNFTCwgQVZSMzJfRFNQKSwKKysgICAgU1lOVEFYX05PUk1BTDMoTVVMU0FUSEhfVywgTVVMU0FUSEhfVywgTVVMU0FUSEhfVywgSU5UUkVHLCBJTlRSRUdfSFNFTCwgSU5UUkVHX0hTRUwsIEFWUjMyX0RTUCksCisrICAgIFNZTlRBWF9OT1JNQUwzKE1VTFNBVFJOREhIX0gsIE1VTFNBVFJOREhIX0gsIE1VTFNBVFJOREhIX0gsIElOVFJFRywgSU5UUkVHX0hTRUwsIElOVFJFR19IU0VMLCBBVlIzMl9EU1ApLAorKyAgICBTWU5UQVhfTk9STUFMMyhNVUxTQVRSTkRXSF9XLCBNVUxTQVRSTkRXSF9XLCBNVUxTQVRSTkRXSF9XLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHX0hTRUwsIEFWUjMyX0RTUCksCisrICAgIFNZTlRBWF9OT1JNQUwzKE1VTFNBVFdIX1csIE1VTFNBVFdIX1csIE1VTFNBVFdIX1csIElOVFJFRywgSU5UUkVHLCBJTlRSRUdfSFNFTCwgQVZSMzJfRFNQKSwKKysgICAgU1lOVEFYX05PUk1BTDMoTVVMVV9ELCBNVUxVX0QsIE1VTFVfRCwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMyhNVUxXSF9ELCBNVUxXSF9ELCBNVUxXSF9ELCBJTlRSRUcsIElOVFJFRywgSU5UUkVHX0hTRUwsIEFWUjMyX0RTUCksCisrICAgIFNZTlRBWF9OT1JNQUwxKE1VU0ZSLCBNVVNGUiwgTVVTRlIsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShNVVNUUiwgTVVTVFIsIE1VU1RSLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDMoTVZDUl9ELCBNVkNSX0QsIE1WQ1JfRCwgQ1BOTywgRFdSRUcsIENQUkVHX0QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDMoTVZDUl9XLCBNVkNSX1csIE1WQ1JfVywgQ1BOTywgSU5UUkVHLCBDUFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMyhNVlJDX0QsIE1WUkNfRCwgTVZSQ19ELCBDUE5PLCBDUFJFR19ELCBEV1JFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMyhNVlJDX1csIE1WUkNfVywgTVZSQ19XLCBDUE5PLCBDUFJFRywgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKE5FRywgTkVHLCBORUcsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMChOT1AsIE5PUCwgTk9QLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzIoT1IxLCBPUiwgT1IxLCBPUjIsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzMoT1IyLCBPUiwgT1IyLCBPUjMsIElOVFJFRywgSU5UUkVHLCBJTlRSRUdfTFNMLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwzKE9SMywgT1IsIE9SMywgSU5UUkVHLCBJTlRSRUcsIElOVFJFR19MU1IsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoT1JILCBPUkgsIE9SSCwgSU5UUkVHLCBVTlNJR05FRF9DT05TVCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMihPUkwsIE9STCwgT1JMLCBJTlRSRUcsIFVOU0lHTkVEX0NPTlNULCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwyKFBBQlNfU0IsIFBBQlNfU0IsIFBBQlNfU0IsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9TSU1EKSwKKysgICAgU1lOVEFYX05PUk1BTDIoUEFCU19TSCwgUEFCU19TSCwgUEFCU19TSCwgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1NJTUQpLAorKyAgICBTWU5UQVhfTk9STUFMMyhQQUNLU0hfU0IsIFBBQ0tTSF9TQiwgUEFDS1NIX1NCLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9TSU1EKSwKKysgICAgU1lOVEFYX05PUk1BTDMoUEFDS1NIX1VCLCBQQUNLU0hfVUIsIFBBQ0tTSF9VQiwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfU0lNRCksCisrICAgIFNZTlRBWF9OT1JNQUwzKFBBQ0tXX1NILCBQQUNLV19TSCwgUEFDS1dfU0gsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1NJTUQpLAorKyAgICBTWU5UQVhfTk9STUFMMyhQQUREX0IsIFBBRERfQiwgUEFERF9CLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9TSU1EKSwKKysgICAgU1lOVEFYX05PUk1BTDMoUEFERF9ILCBQQUREX0gsIFBBRERfSCwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfU0lNRCksCisrICAgIFNZTlRBWF9OT1JNQUwzKFBBRERIX1NILCBQQURESF9TSCwgUEFEREhfU0gsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1NJTUQpLAorKyAgICBTWU5UQVhfTk9STUFMMyhQQURESF9VQiwgUEFEREhfVUIsIFBBRERIX1VCLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9TSU1EKSwKKysgICAgU1lOVEFYX05PUk1BTDMoUEFERFNfU0IsIFBBRERTX1NCLCBQQUREU19TQiwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfU0lNRCksCisrICAgIFNZTlRBWF9OT1JNQUwzKFBBRERTX1NILCBQQUREU19TSCwgUEFERFNfU0gsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1NJTUQpLAorKyAgICBTWU5UQVhfTk9STUFMMyhQQUREU19VQiwgUEFERFNfVUIsIFBBRERTX1VCLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9TSU1EKSwKKysgICAgU1lOVEFYX05PUk1BTDMoUEFERFNfVUgsIFBBRERTX1VILCBQQUREU19VSCwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfU0lNRCksCisrICAgIFNZTlRBWF9OT1JNQUwzKFBBRERTVUJfSCwgUEFERFNVQl9ILCBQQUREU1VCX0gsIElOVFJFRywgSU5UUkVHX0hTRUwsIElOVFJFR19IU0VMLCBBVlIzMl9TSU1EKSwKKysgICAgU1lOVEFYX05PUk1BTDMoUEFERFNVQkhfU0gsIFBBRERTVUJIX1NILCBQQUREU1VCSF9TSCwgSU5UUkVHLCBJTlRSRUdfSFNFTCwgSU5UUkVHX0hTRUwsIEFWUjMyX1NJTUQpLAorKyAgICBTWU5UQVhfTk9STUFMMyhQQUREU1VCU19TSCwgUEFERFNVQlNfU0gsIFBBRERTVUJTX1NILCBJTlRSRUcsIElOVFJFR19IU0VMLCBJTlRSRUdfSFNFTCwgQVZSMzJfU0lNRCksCisrICAgIFNZTlRBWF9OT1JNQUwzKFBBRERTVUJTX1VILCBQQUREU1VCU19VSCwgUEFERFNVQlNfVUgsIElOVFJFRywgSU5UUkVHX0hTRUwsIElOVFJFR19IU0VMLCBBVlIzMl9TSU1EKSwKKysgICAgU1lOVEFYX05PUk1BTDMoUEFERFhfSCwgUEFERFhfSCwgUEFERFhfSCwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfU0lNRCksCisrICAgIFNZTlRBWF9OT1JNQUwzKFBBRERYSF9TSCwgUEFERFhIX1NILCBQQUREWEhfU0gsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1NJTUQpLAorKyAgICBTWU5UQVhfTk9STUFMMyhQQUREWFNfU0gsIFBBRERYU19TSCwgUEFERFhTX1NILCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9TSU1EKSwKKysgICAgU1lOVEFYX05PUk1BTDMoUEFERFhTX1VILCBQQUREWFNfVUgsIFBBRERYU19VSCwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfU0lNRCksCisrICAgIFNZTlRBWF9OT1JNQUwzKFBBU1JfQiwgUEFTUl9CLCBQQVNSX0IsIElOVFJFRywgSU5UUkVHLCBVTlNJR05FRF9OVU1CRVIsIEFWUjMyX1NJTUQpLAorKyAgICBTWU5UQVhfTk9STUFMMyhQQVNSX0gsIFBBU1JfSCwgUEFTUl9ILCBJTlRSRUcsIElOVFJFRywgVU5TSUdORURfTlVNQkVSLCBBVlIzMl9TSU1EKSwKKysgICAgU1lOVEFYX05PUk1BTDMoUEFWR19TSCwgUEFWR19TSCwgUEFWR19TSCwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfU0lNRCksCisrICAgIFNZTlRBWF9OT1JNQUwzKFBBVkdfVUIsIFBBVkdfVUIsIFBBVkdfVUIsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1NJTUQpLAorKyAgICBTWU5UQVhfTk9STUFMMyhQTFNMX0IsIFBMU0xfQiwgUExTTF9CLCBJTlRSRUcsIElOVFJFRywgVU5TSUdORURfTlVNQkVSLCBBVlIzMl9TSU1EKSwKKysgICAgU1lOVEFYX05PUk1BTDMoUExTTF9ILCBQTFNMX0gsIFBMU0xfSCwgSU5UUkVHLCBJTlRSRUcsIFVOU0lHTkVEX05VTUJFUiwgQVZSMzJfU0lNRCksCisrICAgIFNZTlRBWF9OT1JNQUwzKFBMU1JfQiwgUExTUl9CLCBQTFNSX0IsIElOVFJFRywgSU5UUkVHLCBVTlNJR05FRF9OVU1CRVIsIEFWUjMyX1NJTUQpLAorKyAgICBTWU5UQVhfTk9STUFMMyhQTFNSX0gsIFBMU1JfSCwgUExTUl9ILCBJTlRSRUcsIElOVFJFRywgVU5TSUdORURfTlVNQkVSLCBBVlIzMl9TSU1EKSwKKysgICAgU1lOVEFYX05PUk1BTDMoUE1BWF9TSCwgUE1BWF9TSCwgUE1BWF9TSCwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfU0lNRCksCisrICAgIFNZTlRBWF9OT1JNQUwzKFBNQVhfVUIsIFBNQVhfVUIsIFBNQVhfVUIsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1NJTUQpLAorKyAgICBTWU5UQVhfTk9STUFMMyhQTUlOX1NILCBQTUlOX1NILCBQTUlOX1NILCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9TSU1EKSwKKysgICAgU1lOVEFYX05PUk1BTDMoUE1JTl9VQiwgUE1JTl9VQiwgUE1JTl9VQiwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfU0lNRCksCisrICAgIFNZTlRBWF9OT1JNQUwwKFBPUEpDLCBQT1BKQywgUE9QSkMsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DTTEoUE9QTSwgUE9QTSwgUE9QTSwgUE9QTV9FLCBSRUdMSVNUOSwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMTTEoUE9QTV9FLCBQT1BNLCBQT1BNX0UsIFJFR0xJU1QxNiwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShQUkVGLCBQUkVGLCBQUkVGLCBJTlRSRUdfU0RJU1AsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDMoUFNBRCwgUFNBRCwgUFNBRCwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfU0lNRCksCisrICAgIFNZTlRBWF9OT1JNQUwzKFBTVUJfQiwgUFNVQl9CLCBQU1VCX0IsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1NJTUQpLAorKyAgICBTWU5UQVhfTk9STUFMMyhQU1VCX0gsIFBTVUJfSCwgUFNVQl9ILCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9TSU1EKSwKKysgICAgU1lOVEFYX05PUk1BTDMoUFNVQkFERF9ILCBQU1VCQUREX0gsIFBTVUJBRERfSCwgSU5UUkVHLCBJTlRSRUdfSFNFTCwgSU5UUkVHX0hTRUwsIEFWUjMyX1NJTUQpLAorKyAgICBTWU5UQVhfTk9STUFMMyhQU1VCQURESF9TSCwgUFNVQkFEREhfU0gsIFBTVUJBRERIX1NILCBJTlRSRUcsIElOVFJFR19IU0VMLCBJTlRSRUdfSFNFTCwgQVZSMzJfU0lNRCksCisrICAgIFNZTlRBWF9OT1JNQUwzKFBTVUJBRERTX1NILCBQU1VCQUREU19TSCwgUFNVQkFERFNfU0gsIElOVFJFRywgSU5UUkVHX0hTRUwsIElOVFJFR19IU0VMLCBBVlIzMl9TSU1EKSwKKysgICAgU1lOVEFYX05PUk1BTDMoUFNVQkFERFNfVUgsIFBTVUJBRERTX1VILCBQU1VCQUREU19VSCwgSU5UUkVHLCBJTlRSRUdfSFNFTCwgSU5UUkVHX0hTRUwsIEFWUjMyX1NJTUQpLAorKyAgICBTWU5UQVhfTk9STUFMMyhQU1VCSF9TSCwgUFNVQkhfU0gsIFBTVUJIX1NILCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9TSU1EKSwKKysgICAgU1lOVEFYX05PUk1BTDMoUFNVQkhfVUIsIFBTVUJIX1VCLCBQU1VCSF9VQiwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfU0lNRCksCisrICAgIFNZTlRBWF9OT1JNQUwzKFBTVUJTX1NCLCBQU1VCU19TQiwgUFNVQlNfU0IsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1NJTUQpLAorKyAgICBTWU5UQVhfTk9STUFMMyhQU1VCU19TSCwgUFNVQlNfU0gsIFBTVUJTX1NILCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9TSU1EKSwKKysgICAgU1lOVEFYX05PUk1BTDMoUFNVQlNfVUIsIFBTVUJTX1VCLCBQU1VCU19VQiwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfU0lNRCksCisrICAgIFNZTlRBWF9OT1JNQUwzKFBTVUJTX1VILCBQU1VCU19VSCwgUFNVQlNfVUgsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1NJTUQpLAorKyAgICBTWU5UQVhfTk9STUFMMyhQU1VCWF9ILCBQU1VCWF9ILCBQU1VCWF9ILCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9TSU1EKSwKKysgICAgU1lOVEFYX05PUk1BTDMoUFNVQlhIX1NILCBQU1VCWEhfU0gsIFBTVUJYSF9TSCwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfU0lNRCksCisrICAgIFNZTlRBWF9OT1JNQUwzKFBTVUJYU19TSCwgUFNVQlhTX1NILCBQU1VCWFNfU0gsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1NJTUQpLAorKyAgICBTWU5UQVhfTk9STUFMMyhQU1VCWFNfVUgsIFBTVUJYU19VSCwgUFNVQlhTX1VILCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9TSU1EKSwKKysgICAgU1lOVEFYX05PUk1BTDIoUFVOUENLU0JfSCwgUFVOUENLU0JfSCwgUFVOUENLU0JfSCwgSU5UUkVHLCBJTlRSRUdfSFNFTCwgQVZSMzJfU0lNRCksCisrICAgIFNZTlRBWF9OT1JNQUwyKFBVTlBDS1VCX0gsIFBVTlBDS1VCX0gsIFBVTlBDS1VCX0gsIElOVFJFRywgSU5UUkVHX0hTRUwsIEFWUjMyX1NJTUQpLAorKyAgICBTWU5UQVhfTk9STUFMMChQVVNISkMsIFBVU0hKQywgUFVTSEpDLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQ00xKFBVU0hNLCBQVVNITSwgUFVTSE0sIFBVU0hNX0UsIFJFR0xJU1Q4LCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxNMShQVVNITV9FLCBQVVNITSwgUFVTSE1fRSwgUkVHTElTVDE2LCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzEoUkNBTEwxLCBSQ0FMTCwgUkNBTEwxLCBSQ0FMTDIsIEpNUExBQkVMLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKFJDQUxMMiwgUkNBTEwsIFJDQUxMMiwgSk1QTEFCRUwsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDEoUkVURVEsIFJFVEVRLCBSRVRFUSwgUkVUVkFMLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKFJFVE5FLCBSRVRORSwgUkVUTkUsIFJFVFZBTCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShSRVRDQywgUkVUQ0MsIFJFVENDLCBSRVRWQUwsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDEoUkVUQ1MsIFJFVENTLCBSRVRDUywgUkVUVkFMLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKFJFVEdFLCBSRVRHRSwgUkVUR0UsIFJFVFZBTCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShSRVRMVCwgUkVUTFQsIFJFVExULCBSRVRWQUwsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDEoUkVUTUksIFJFVE1JLCBSRVRNSSwgUkVUVkFMLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKFJFVFBMLCBSRVRQTCwgUkVUUEwsIFJFVFZBTCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShSRVRMUywgUkVUTFMsIFJFVExTLCBSRVRWQUwsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDEoUkVUR1QsIFJFVEdULCBSRVRHVCwgUkVUVkFMLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKFJFVExFLCBSRVRMRSwgUkVUTEUsIFJFVFZBTCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShSRVRISSwgUkVUSEksIFJFVEhJLCBSRVRWQUwsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDEoUkVUVlMsIFJFVFZTLCBSRVRWUywgUkVUVkFMLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKFJFVFZDLCBSRVRWQywgUkVUVkMsIFJFVFZBTCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShSRVRRUywgUkVUUVMsIFJFVFFTLCBSRVRWQUwsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDEoUkVUQUwsIFJFVEFMLCBSRVRBTCwgUkVUVkFMLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKFJFVEhTLCBSRVRIUywgUkVUQ0MsIFJFVFZBTCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShSRVRMTywgUkVUTE8sIFJFVENTLCBSRVRWQUwsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDAoUkVURCwgUkVURCwgUkVURCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMChSRVRFLCBSRVRFLCBSRVRFLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwwKFJFVEosIFJFVEosIFJFVEosIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDAoUkVUUywgUkVUUywgUkVUUywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShSSk1QLCBSSk1QLCBSSk1QLCBKTVBMQUJFTCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShST0wsIFJPTCwgUk9MLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDEoUk9SLCBST1IsIFJPUiwgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzIoUlNVQjEsIFJTVUIsIFJTVUIxLCBSU1VCMiwgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDMoUlNVQjIsIFJTVUIsIFJTVUIyLCBJTlRSRUcsIElOVFJFRywgU0lHTkVEX0NPTlNULCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwzKFNBVEFERF9ILCBTQVRBRERfSCwgU0FUQUREX0gsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsICBBVlIzMl9EU1ApLAorKyAgICBTWU5UQVhfTk9STUFMMyhTQVRBRERfVywgU0FUQUREX1csIFNBVEFERF9XLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9EU1ApLAorKyAgICBTWU5UQVhfTk9STUFMMihTQVRSTkRTLCBTQVRSTkRTLCBTQVRSTkRTLCBJTlRSRUdfTFNSLCBVTlNJR05FRF9OVU1CRVIsIEFWUjMyX0RTUCksCisrICAgIFNZTlRBWF9OT1JNQUwyKFNBVFJORFUsIFNBVFJORFUsIFNBVFJORFUsIElOVFJFR19MU1IsIFVOU0lHTkVEX05VTUJFUiwgQVZSMzJfRFNQKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU0FUUywgU0FUUywgU0FUUywgSU5UUkVHX0xTUiwgVU5TSUdORURfTlVNQkVSLCBBVlIzMl9EU1ApLAorKyAgICBTWU5UQVhfTk9STUFMMyhTQVRTVUJfSCwgU0FUU1VCX0gsIFNBVFNVQl9ILCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9EU1ApLAorKyAgICBTWU5UQVhfTk9STUFMX0MzKFNBVFNVQl9XMSwgU0FUU1VCX1csIFNBVFNVQl9XMSwgU0FUU1VCX1cyLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9EU1ApLAorKyAgICBTWU5UQVhfTk9STUFMMyhTQVRTVUJfVzIsIFNBVFNVQl9XLCBTQVRTVUJfVzIsIElOVFJFRywgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX0RTUCksCisrICAgIFNZTlRBWF9OT1JNQUwyKFNBVFUsIFNBVFUsIFNBVFUsIElOVFJFR19MU1IsIFVOU0lHTkVEX05VTUJFUiwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMyhTQkMsIFNCQywgU0JDLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwyKFNCUiwgU0JSLCBTQlIsIElOVFJFRywgVU5TSUdORURfTlVNQkVSLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwwKFNDQUxMLCBTQ0FMTCwgU0NBTEwsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDEoU0NSLCBTQ1IsIFNDUiwgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKFNMRUVQLCBTTEVFUCwgU0xFRVAsIFVOU0lHTkVEX0NPTlNULCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKFNSRVEsIFNSRVEsIFNSRVEsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShTUk5FLCBTUk5FLCBTUk5FLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDEoU1JDQywgU1JDQywgU1JDQywgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKFNSQ1MsIFNSQ1MsIFNSQ1MsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShTUkdFLCBTUkdFLCBTUkdFLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDEoU1JMVCwgU1JMVCwgU1JMVCwgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKFNSTUksIFNSTUksIFNSTUksIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShTUlBMLCBTUlBMLCBTUlBMLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDEoU1JMUywgU1JMUywgU1JMUywgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKFNSR1QsIFNSR1QsIFNSR1QsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShTUkxFLCBTUkxFLCBTUkxFLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDEoU1JISSwgU1JISSwgU1JISSwgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKFNSVlMsIFNSVlMsIFNSVlMsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShTUlZDLCBTUlZDLCBTUlZDLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDEoU1JRUywgU1JRUywgU1JRUywgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKFNSQUwsIFNSQUwsIFNSQUwsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShTUkhTLCBTUkhTLCBTUkNDLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDEoU1JMTywgU1JMTywgU1JDUywgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKFNTUkYsIFNTUkYsIFNTUkYsIFVOU0lHTkVEX05VTUJFUiwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKFNUX0IxLCBTVF9CLCBTVF9CMSwgU1RfQjIsIElOVFJFR19QT1NUSU5DLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihTVF9CMiwgU1RfQiwgU1RfQjIsIFNUX0I1LCBJTlRSRUdfUFJFREVDLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihTVF9CNSwgU1RfQiwgU1RfQjUsIFNUX0IzLCBJTlRSRUdfSU5ERVgsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKFNUX0IzLCBTVF9CLCBTVF9CMywgU1RfQjQsIElOVFJFR19VRElTUCwgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwyKFNUX0I0LCBTVF9CLCBTVF9CNCwgSU5UUkVHX1NESVNQLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihTVF9EMSwgU1RfRCwgU1RfRDEsIFNUX0QyLCBJTlRSRUdfUE9TVElOQywgRFdSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihTVF9EMiwgU1RfRCwgU1RfRDIsIFNUX0QzLCBJTlRSRUdfUFJFREVDLCBEV1JFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKFNUX0QzLCBTVF9ELCBTVF9EMywgU1RfRDUsIElOVFJFRywgRFdSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihTVF9ENSwgU1RfRCwgU1RfRDUsIFNUX0Q0LCBJTlRSRUdfSU5ERVgsIERXUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwyKFNUX0Q0LCBTVF9ELCBTVF9ENCwgSU5UUkVHX1NESVNQLCBEV1JFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKFNUX0gxLCBTVF9ILCBTVF9IMSwgU1RfSDIsIElOVFJFR19QT1NUSU5DLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihTVF9IMiwgU1RfSCwgU1RfSDIsIFNUX0g1LCBJTlRSRUdfUFJFREVDLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihTVF9INSwgU1RfSCwgU1RfSDUsIFNUX0gzLCBJTlRSRUdfSU5ERVgsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKFNUX0gzLCBTVF9ILCBTVF9IMywgU1RfSDQsIElOVFJFR19VRElTUF9ILCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfSDQsIFNUX0gsIFNUX0g0LCBJTlRSRUdfU0RJU1AsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKFNUX1cxLCBTVF9XLCBTVF9XMSwgU1RfVzIsIElOVFJFR19QT1NUSU5DLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihTVF9XMiwgU1RfVywgU1RfVzIsIFNUX1c1LCBJTlRSRUdfUFJFREVDLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihTVF9XNSwgU1RfVywgU1RfVzUsIFNUX1czLCBJTlRSRUdfSU5ERVgsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKFNUX1czLCBTVF9XLCBTVF9XMywgU1RfVzQsIElOVFJFR19VRElTUF9XLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfVzQsIFNUX1csIFNUX1c0LCBJTlRSRUdfU0RJU1AsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMyhTVENfRDEsIFNUQ19ELCBTVENfRDEsIENQTk8sIElOVFJFR19VRElTUF9XLCBDUFJFR19ELCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzMoU1RDX0QyLCBTVENfRCwgU1RDX0QyLCBTVENfRDEsIENQTk8sIElOVFJFR19QT1NUSU5DLCBDUFJFR19ELCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzMoU1RDX0QzLCBTVENfRCwgU1RDX0QzLCBTVENfRDIsIENQTk8sIElOVFJFR19JTkRFWCwgQ1BSRUdfRCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMyhTVENfVzEsIFNUQ19XLCBTVENfVzEsIENQTk8sIElOVFJFR19VRElTUF9XLCBDUFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MzKFNUQ19XMiwgU1RDX1csIFNUQ19XMiwgU1RDX1cxLCBDUE5PLCBJTlRSRUdfUE9TVElOQywgQ1BSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMyhTVENfVzMsIFNUQ19XLCBTVENfVzMsIFNUQ19XMiwgQ1BOTywgSU5UUkVHX0lOREVYLCBDUFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMihTVEMwX0QsIFNUQzBfRCwgU1RDMF9ELCBJTlRSRUdfVURJU1BfVywgQ1BSRUdfRCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMihTVEMwX1csIFNUQzBfVywgU1RDMF9XLCBJTlRSRUdfVURJU1BfVywgQ1BSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DTTMoU1RDTV9ELCBTVENNX0QsIFNUQ01fRCwgU1RDTV9EX1BVLCBDUE5PLCBJTlRSRUcsIFJFR0xJU1RfQ1BEOCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMTTMoU1RDTV9EX1BVLCBTVENNX0QsIFNUQ01fRF9QVSwgQ1BOTywgSU5UUkVHX1BSRURFQywgUkVHTElTVF9DUEQ4LCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQ00zKFNUQ01fVywgU1RDTV9XLCBTVENNX1csIFNUQ01fV19QVSwgQ1BOTywgSU5UUkVHLCBSRUdMSVNUX0NQOCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMTTMoU1RDTV9XX1BVLCBTVENNX1csIFNUQ01fV19QVSwgQ1BOTywgSU5UUkVHX1BSRURFQywgUkVHTElTVF9DUDgsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RDT05ELCBTVENPTkQsIFNUQ09ORCwgSU5UUkVHX1NESVNQLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1REU1AsIFNURFNQLCBTVERTUCwgU1BfVURJU1BfVywgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzMoU1RISF9XMiwgU1RISF9XLCBTVEhIX1cyLCBTVEhIX1cxLCBJTlRSRUdfSU5ERVgsIElOVFJFR19IU0VMLCBJTlRSRUdfSFNFTCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMyhTVEhIX1cxLCBTVEhIX1csIFNUSEhfVzEsIElOVFJFR19VRElTUF9XLCBJTlRSRUdfSFNFTCwgSU5UUkVHX0hTRUwsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DTTIoU1RNLCBTVE0sIFNUTSwgU1RNX1BVLCBJTlRSRUcsIFJFR0xJU1QxNiwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMTTIoU1RNX1BVLCBTVE0sIFNUTV9QVSwgSU5UUkVHX1BSRURFQywgUkVHTElTVDE2LCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQ00yKFNUTVRTLCBTVE1UUywgU1RNVFMsIFNUTVRTX1BVLCBJTlRSRUcsIFJFR0xJU1QxNiwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMTTIoU1RNVFNfUFUsIFNUTVRTLCBTVE1UU19QVSwgSU5UUkVHX1BSRURFQywgUkVHTElTVDE2LCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwyKFNUU1dQX0gsIFNUU1dQX0gsIFNUU1dQX0gsIElOVFJFR19TRElTUF9ILCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RTV1BfVywgU1RTV1BfVywgU1RTV1BfVywgSU5UUkVHX1NESVNQX1csIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKFNVQjEsIFNVQiwgU1VCMSwgU1VCMiwgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMyhTVUIyLCBTVUIsIFNVQjIsIFNVQjUsIElOVFJFRywgSU5UUkVHLCBJTlRSRUdfTFNMLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzMoU1VCNSwgU1VCLCBTVUI1LCBTVUIzX1NQLCBJTlRSRUcsIElOVFJFRywgU0lHTkVEX0NPTlNULCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzIoU1VCM19TUCwgU1VCLCBTVUIzX1NQLCBTVUIzLCBTUCwgU0lHTkVEX0NPTlNUX1csIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihTVUIzLCBTVUIsIFNVQjMsIFNVQjQsIElOVFJFRywgU0lHTkVEX0NPTlNULCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwyKFNVQjQsIFNVQiwgU1VCNCwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihTVUJFUSwgU1VCRVEsIFNVQkVRLCBTVUIyRVEsIElOVFJFRywgU0lHTkVEX0NPTlNULCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzIoU1VCTkUsIFNVQk5FLCBTVUJORSwgU1VCMk5FLCBJTlRSRUcsIFNJR05FRF9DT05TVCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKFNVQkNDLCBTVUJDQywgU1VCQ0MsIFNVQjJDQywgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihTVUJDUywgU1VCQ1MsIFNVQkNTLCBTVUIyQ1MsIElOVFJFRywgU0lHTkVEX0NPTlNULCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzIoU1VCR0UsIFNVQkdFLCBTVUJHRSwgU1VCMkdFLCBJTlRSRUcsIFNJR05FRF9DT05TVCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKFNVQkxULCBTVUJMVCwgU1VCTFQsIFNVQjJMVCwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihTVUJNSSwgU1VCTUksIFNVQk1JLCBTVUIyTUksIElOVFJFRywgU0lHTkVEX0NPTlNULCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzIoU1VCUEwsIFNVQlBMLCBTVUJQTCwgU1VCMlBMLCBJTlRSRUcsIFNJR05FRF9DT05TVCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKFNVQkxTLCBTVUJMUywgU1VCTFMsIFNVQjJMUywgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihTVUJHVCwgU1VCR1QsIFNVQkdULCBTVUIyR1QsIElOVFJFRywgU0lHTkVEX0NPTlNULCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzIoU1VCTEUsIFNVQkxFLCBTVUJMRSwgU1VCMkxFLCBJTlRSRUcsIFNJR05FRF9DT05TVCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKFNVQkhJLCBTVUJISSwgU1VCSEksIFNVQjJISSwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihTVUJWUywgU1VCVlMsIFNVQlZTLCBTVUIyVlMsIElOVFJFRywgU0lHTkVEX0NPTlNULCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzIoU1VCVkMsIFNVQlZDLCBTVUJWQywgU1VCMlZDLCBJTlRSRUcsIFNJR05FRF9DT05TVCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKFNVQlFTLCBTVUJRUywgU1VCUVMsIFNVQjJRUywgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTF9DMihTVUJBTCwgU1VCQUwsIFNVQkFMLCBTVUIyQUwsIElOVFJFRywgU0lHTkVEX0NPTlNULCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUxfQzIoU1VCSFMsIFNVQkhTLCBTVUJDQywgU1VCMkNDLCBJTlRSRUcsIFNJR05FRF9DT05TVCwgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMX0MyKFNVQkxPLCBTVUJMTywgU1VCQ1MsIFNVQjJDUywgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1VCRkVRLCBTVUJGRVEsIFNVQkZFUSwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1VCRk5FLCBTVUJGTkUsIFNVQkZORSwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1VCRkNDLCBTVUJGQ0MsIFNVQkZDQywgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1VCRkNTLCBTVUJGQ1MsIFNVQkZDUywgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1VCRkdFLCBTVUJGR0UsIFNVQkZHRSwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1VCRkxULCBTVUJGTFQsIFNVQkZMVCwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1VCRk1JLCBTVUJGTUksIFNVQkZNSSwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1VCRlBMLCBTVUJGUEwsIFNVQkZQTCwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1VCRkxTLCBTVUJGTFMsIFNVQkZMUywgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1VCRkdULCBTVUJGR1QsIFNVQkZHVCwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1VCRkxFLCBTVUJGTEUsIFNVQkZMRSwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1VCRkhJLCBTVUJGSEksIFNVQkZISSwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1VCRlZTLCBTVUJGVlMsIFNVQkZWUywgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1VCRlZDLCBTVUJGVkMsIFNVQkZWQywgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1VCRlFTLCBTVUJGUVMsIFNVQkZRUywgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1VCRkFMLCBTVUJGQUwsIFNVQkZBTCwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1VCRkhTLCBTVUJGSFMsIFNVQkZDQywgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1VCRkxPLCBTVUJGTE8sIFNVQkZDUywgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDMoU1VCSEhfVywgU1VCSEhfVywgU1VCSEhfVywgSU5UUkVHLCBJTlRSRUdfSFNFTCwgSU5UUkVHX0hTRUwsIEFWUjMyX0RTUCksCisrICAgIFNZTlRBWF9OT1JNQUwxKFNXQVBfQiwgU1dBUF9CLCBTV0FQX0IsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMShTV0FQX0JILCBTV0FQX0JILCBTV0FQX0JILCBJTlRSRUcsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDEoU1dBUF9ILCBTV0FQX0gsIFNXQVBfSCwgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKFNZTkMsIFNZTkMsIFNZTkMsIFVOU0lHTkVEX0NPTlNULCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwwKFRMQlIsIFRMQlIsIFRMQlIsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDAoVExCUywgVExCUywgVExCUywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMChUTEJXLCBUTEJXLCBUTEJXLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwxKFROQlosIFROQlosIFROQlosIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMihUU1QsIFRTVCwgVFNULCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjEpLAorKyAgICBTWU5UQVhfTk9STUFMMyhYQ0hHLCBYQ0hHLCBYQ0hHLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMSksCisrICAgIFNZTlRBWF9OT1JNQUwyKE1FTUMsIE1FTUMsIE1FTUMsIFNJR05FRF9DT05TVF9XLCBVTlNJR05FRF9OVU1CRVIsIEFWUjMyX1JNVyksCisrICAgIFNZTlRBWF9OT1JNQUwyKE1FTVMsIE1FTVMsIE1FTVMsIFNJR05FRF9DT05TVF9XLCBVTlNJR05FRF9OVU1CRVIsIEFWUjMyX1JNVyksCisrICAgIFNZTlRBWF9OT1JNQUwyKE1FTVQsIE1FTVQsIE1FTVQsIFNJR05FRF9DT05TVF9XLCBVTlNJR05FRF9OVU1CRVIsIEFWUjMyX1JNVyksCisrICAgIFNZTlRBWF9GUChGQURELCAzKSwKKysgICAgU1lOVEFYX0ZQKEZTVUIsIDMpLAorKyAgICBTWU5UQVhfRlAoRk1BQywgMyksCisrICAgIFNZTlRBWF9GUChGTk1BQywgMyksCisrICAgIFNZTlRBWF9GUChGTVNDLCAzKSwKKysgICAgU1lOVEFYX0ZQKEZOTVNDLCAzKSwKKysgICAgU1lOVEFYX0ZQKEZNVUwsIDMpLAorKyAgICBTWU5UQVhfRlAoRk5NVUwsIDMpLAorKyAgICBTWU5UQVhfRlAoRk5FRywgMiksCisrICAgIFNZTlRBWF9GUChGQUJTLCAyKSwKKysgICAgU1lOVEFYX0ZQKEZDTVAsIDIpLAorKyAgICB7CisrICAgICAgQVZSMzJfU1lOVEFYX0ZNT1YxX1MsCisrICAgICAgQVZSMzJfRlAsIE5VTEwsIEFWUjMyX1BBUlNFUl9BTElBUywKKysgICAgICB7IC5hbGlhcyA9ICZhdnIzMl9hbGlhc190YWJsZVtBVlIzMl9BTElBU19GTU9WMV9TXSB9LAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0ZNT1YyX1NdLAorKyAgICAgIDIsCisrICAgICAgeworKwlBVlIzMl9PUEVSQU5EX0ZQUkVHX1MsCisrCUFWUjMyX09QRVJBTkRfRlBSRUdfUywKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfU1lOVEFYX0ZNT1YxX0QsCisrICAgICAgQVZSMzJfRlAsIE5VTEwsIEFWUjMyX1BBUlNFUl9BTElBUywKKysgICAgICB7IC5hbGlhcyA9ICZhdnIzMl9hbGlhc190YWJsZVtBVlIzMl9BTElBU19GTU9WMV9EXSB9LAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0ZNT1YyX0RdLAorKyAgICAgIDIsCisrICAgICAgeworKwlBVlIzMl9PUEVSQU5EX0ZQUkVHX0QsCisrCUFWUjMyX09QRVJBTkRfRlBSRUdfRCwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfU1lOVEFYX0ZNT1YyX1MsCisrICAgICAgQVZSMzJfRlAsIE5VTEwsIEFWUjMyX1BBUlNFUl9BTElBUywKKysgICAgICB7IC5hbGlhcyA9ICZhdnIzMl9hbGlhc190YWJsZVtBVlIzMl9BTElBU19GTU9WMl9TXSB9LAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX0ZNT1YzX1NdLAorKyAgICAgIDIsCisrICAgICAgeworKwlBVlIzMl9PUEVSQU5EX0lOVFJFRywKKysJQVZSMzJfT1BFUkFORF9GUFJFR19TLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9TWU5UQVhfRk1PVjJfRCwKKysgICAgICBBVlIzMl9GUCwgTlVMTCwgQVZSMzJfUEFSU0VSX0FMSUFTLAorKyAgICAgIHsgLmFsaWFzID0gJmF2cjMyX2FsaWFzX3RhYmxlW0FWUjMyX0FMSUFTX0ZNT1YyX0RdIH0sCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfRk1PVjNfRF0sCisrICAgICAgMiwKKysgICAgICB7CisrCUFWUjMyX09QRVJBTkRfRFdSRUcsCisrCUFWUjMyX09QRVJBTkRfRlBSRUdfRCwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfU1lOVEFYX0ZNT1YzX1MsCisrICAgICAgQVZSMzJfRlAsIE5VTEwsIEFWUjMyX1BBUlNFUl9BTElBUywKKysgICAgICB7IC5hbGlhcyA9ICZhdnIzMl9hbGlhc190YWJsZVtBVlIzMl9BTElBU19GTU9WM19TXSB9LCBOVUxMLAorKyAgICAgIDIsCisrICAgICAgeworKwlBVlIzMl9PUEVSQU5EX0ZQUkVHX1MsCisrCUFWUjMyX09QRVJBTkRfSU5UUkVHLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9TWU5UQVhfRk1PVjNfRCwKKysgICAgICBBVlIzMl9GUCwgTlVMTCwgQVZSMzJfUEFSU0VSX0FMSUFTLAorKyAgICAgIHsgLmFsaWFzID0gJmF2cjMyX2FsaWFzX3RhYmxlW0FWUjMyX0FMSUFTX0ZNT1YzX0RdIH0sIE5VTEwsCisrICAgICAgMiwKKysgICAgICB7CisrCUFWUjMyX09QRVJBTkRfRlBSRUdfRCwKKysJQVZSMzJfT1BFUkFORF9EV1JFRywKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfU1lOVEFYX0ZDQVNUU19ELAorKyAgICAgIEFWUjMyX0ZQLCBOVUxMLCBBVlIzMl9QQVJTRVJfQUxJQVMsCisrICAgICAgeyAuYWxpYXMgPSAmYXZyMzJfYWxpYXNfdGFibGVbQVZSMzJfQUxJQVNfRkNBU1RTX0RdIH0sIE5VTEwsCisrICAgICAgMiwKKysgICAgICB7CisrCUFWUjMyX09QRVJBTkRfRlBSRUdfUywKKysJQVZSMzJfT1BFUkFORF9GUFJFR19ELAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9TWU5UQVhfRkNBU1REX1MsCisrICAgICAgQVZSMzJfRlAsIE5VTEwsIEFWUjMyX1BBUlNFUl9BTElBUywKKysgICAgICB7IC5hbGlhcyA9ICZhdnIzMl9hbGlhc190YWJsZVtBVlIzMl9BTElBU19GQ0FTVERfU10gfSwgTlVMTCwKKysgICAgICAyLAorKyAgICAgIHsKKysJQVZSMzJfT1BFUkFORF9GUFJFR19ELAorKwlBVlIzMl9PUEVSQU5EX0ZQUkVHX1MsCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX1NZTlRBWF9MREFfVywKKysgICAgICBBVlIzMl9WMSwgTlVMTCwgQVZSMzJfUEFSU0VSX0xEQSwKKysgICAgICB7IE5VTEwgfSwgTlVMTCwKKysgICAgICAyLAorKyAgICAgIHsKKysJQVZSMzJfT1BFUkFORF9JTlRSRUcsCisrCUFWUjMyX09QRVJBTkRfU0lHTkVEX0NPTlNULAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9TWU5UQVhfQ0FMTCwKKysgICAgICBBVlIzMl9WMSwgTlVMTCwgQVZSMzJfUEFSU0VSX0NBTEwsCisrICAgICAgeyBOVUxMIH0sIE5VTEwsCisrICAgICAgMSwKKysgICAgICB7CisrCUFWUjMyX09QRVJBTkRfSk1QTEFCRUwsCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX1NZTlRBWF9QSUNPU1ZNQUMwLAorKyAgICAgIEFWUjMyX1BJQ08sICZhdnIzMl9tbmVtb25pY190YWJsZVtBVlIzMl9NTkVNT05JQ19QSUNPU1ZNQUNdLCBBVlIzMl9QQVJTRVJfQUxJQVMsCisrICAgICAgeyAuYWxpYXMgPSAmYXZyMzJfYWxpYXNfdGFibGVbQVZSMzJfQUxJQVNfUElDT1NWTUFDMF0gfSwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QSUNPU1ZNQUMxXSwgNCwKKysgICAgICB7CisrCUFWUjMyX09QRVJBTkRfUElDT19PVVQwLAorKwlBVlIzMl9PUEVSQU5EX1BJQ09fSU4sCisrCUFWUjMyX09QRVJBTkRfUElDT19JTiwKKysJQVZSMzJfT1BFUkFORF9QSUNPX0lOLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9TWU5UQVhfUElDT1NWTUFDMSwKKysgICAgICBBVlIzMl9QSUNPLCAmYXZyMzJfbW5lbW9uaWNfdGFibGVbQVZSMzJfTU5FTU9OSUNfUElDT1NWTUFDXSwgQVZSMzJfUEFSU0VSX0FMSUFTLAorKyAgICAgIHsgLmFsaWFzID0gJmF2cjMyX2FsaWFzX3RhYmxlW0FWUjMyX0FMSUFTX1BJQ09TVk1BQzFdIH0sCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUElDT1NWTUFDMl0sIDQsCisrICAgICAgeworKwlBVlIzMl9PUEVSQU5EX1BJQ09fT1VUMSwKKysJQVZSMzJfT1BFUkFORF9QSUNPX0lOLAorKwlBVlIzMl9PUEVSQU5EX1BJQ09fSU4sCisrCUFWUjMyX09QRVJBTkRfUElDT19JTiwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfU1lOVEFYX1BJQ09TVk1BQzIsCisrICAgICAgQVZSMzJfUElDTywgJmF2cjMyX21uZW1vbmljX3RhYmxlW0FWUjMyX01ORU1PTklDX1BJQ09TVk1BQ10sIEFWUjMyX1BBUlNFUl9BTElBUywKKysgICAgICB7IC5hbGlhcyA9ICZhdnIzMl9hbGlhc190YWJsZVtBVlIzMl9BTElBU19QSUNPU1ZNQUMyXSB9LAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BJQ09TVk1BQzNdLCA0LAorKyAgICAgIHsKKysJQVZSMzJfT1BFUkFORF9QSUNPX09VVDIsCisrCUFWUjMyX09QRVJBTkRfUElDT19JTiwKKysJQVZSMzJfT1BFUkFORF9QSUNPX0lOLAorKwlBVlIzMl9PUEVSQU5EX1BJQ09fSU4sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX1NZTlRBWF9QSUNPU1ZNQUMzLAorKyAgICAgIEFWUjMyX1BJQ08sICZhdnIzMl9tbmVtb25pY190YWJsZVtBVlIzMl9NTkVNT05JQ19QSUNPU1ZNQUNdLCBBVlIzMl9QQVJTRVJfQUxJQVMsCisrICAgICAgeyAuYWxpYXMgPSAmYXZyMzJfYWxpYXNfdGFibGVbQVZSMzJfQUxJQVNfUElDT1NWTUFDM10gfSwKKysgICAgICBOVUxMLCA0LAorKyAgICAgIHsKKysJQVZSMzJfT1BFUkFORF9QSUNPX09VVDMsCisrCUFWUjMyX09QRVJBTkRfUElDT19JTiwKKysJQVZSMzJfT1BFUkFORF9QSUNPX0lOLAorKwlBVlIzMl9PUEVSQU5EX1BJQ09fSU4sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX1NZTlRBWF9QSUNPU1ZNVUwwLAorKyAgICAgIEFWUjMyX1BJQ08sICZhdnIzMl9tbmVtb25pY190YWJsZVtBVlIzMl9NTkVNT05JQ19QSUNPU1ZNVUxdLCBBVlIzMl9QQVJTRVJfQUxJQVMsCisrICAgICAgeyAuYWxpYXMgPSAmYXZyMzJfYWxpYXNfdGFibGVbQVZSMzJfQUxJQVNfUElDT1NWTVVMMF0gfSwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QSUNPU1ZNVUwxXSwgNCwKKysgICAgICB7CisrCUFWUjMyX09QRVJBTkRfUElDT19PVVQwLAorKwlBVlIzMl9PUEVSQU5EX1BJQ09fSU4sCisrCUFWUjMyX09QRVJBTkRfUElDT19JTiwKKysJQVZSMzJfT1BFUkFORF9QSUNPX0lOLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9TWU5UQVhfUElDT1NWTVVMMSwKKysgICAgICBBVlIzMl9QSUNPLCAmYXZyMzJfbW5lbW9uaWNfdGFibGVbQVZSMzJfTU5FTU9OSUNfUElDT1NWTVVMXSwgQVZSMzJfUEFSU0VSX0FMSUFTLAorKyAgICAgIHsgLmFsaWFzID0gJmF2cjMyX2FsaWFzX3RhYmxlW0FWUjMyX0FMSUFTX1BJQ09TVk1VTDFdIH0sCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUElDT1NWTVVMMl0sIDQsCisrICAgICAgeworKwlBVlIzMl9PUEVSQU5EX1BJQ09fT1VUMSwKKysJQVZSMzJfT1BFUkFORF9QSUNPX0lOLAorKwlBVlIzMl9PUEVSQU5EX1BJQ09fSU4sCisrCUFWUjMyX09QRVJBTkRfUElDT19JTiwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfU1lOVEFYX1BJQ09TVk1VTDIsCisrICAgICAgQVZSMzJfUElDTywgJmF2cjMyX21uZW1vbmljX3RhYmxlW0FWUjMyX01ORU1PTklDX1BJQ09TVk1VTF0sIEFWUjMyX1BBUlNFUl9BTElBUywKKysgICAgICB7IC5hbGlhcyA9ICZhdnIzMl9hbGlhc190YWJsZVtBVlIzMl9BTElBU19QSUNPU1ZNVUwyXSB9LAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BJQ09TVk1VTDNdLCA0LAorKyAgICAgIHsKKysJQVZSMzJfT1BFUkFORF9QSUNPX09VVDIsCisrCUFWUjMyX09QRVJBTkRfUElDT19JTiwKKysJQVZSMzJfT1BFUkFORF9QSUNPX0lOLAorKwlBVlIzMl9PUEVSQU5EX1BJQ09fSU4sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX1NZTlRBWF9QSUNPU1ZNVUwzLAorKyAgICAgIEFWUjMyX1BJQ08sICZhdnIzMl9tbmVtb25pY190YWJsZVtBVlIzMl9NTkVNT05JQ19QSUNPU1ZNVUxdLCBBVlIzMl9QQVJTRVJfQUxJQVMsCisrICAgICAgeyAuYWxpYXMgPSAmYXZyMzJfYWxpYXNfdGFibGVbQVZSMzJfQUxJQVNfUElDT1NWTVVMM10gfSwKKysgICAgICBOVUxMLCA0LAorKyAgICAgIHsKKysJQVZSMzJfT1BFUkFORF9QSUNPX09VVDMsCisrCUFWUjMyX09QRVJBTkRfUElDT19JTiwKKysJQVZSMzJfT1BFUkFORF9QSUNPX0lOLAorKwlBVlIzMl9PUEVSQU5EX1BJQ09fSU4sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX1NZTlRBWF9QSUNPVk1BQzAsCisrICAgICAgQVZSMzJfUElDTywgJmF2cjMyX21uZW1vbmljX3RhYmxlW0FWUjMyX01ORU1PTklDX1BJQ09WTUFDXSwgQVZSMzJfUEFSU0VSX0FMSUFTLAorKyAgICAgIHsgLmFsaWFzID0gJmF2cjMyX2FsaWFzX3RhYmxlW0FWUjMyX0FMSUFTX1BJQ09WTUFDMF0gfSwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QSUNPVk1BQzFdLCA0LAorKyAgICAgIHsKKysJQVZSMzJfT1BFUkFORF9QSUNPX09VVDAsCisrCUFWUjMyX09QRVJBTkRfUElDT19JTiwKKysJQVZSMzJfT1BFUkFORF9QSUNPX0lOLAorKwlBVlIzMl9PUEVSQU5EX1BJQ09fSU4sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX1NZTlRBWF9QSUNPVk1BQzEsCisrICAgICAgQVZSMzJfUElDTywgJmF2cjMyX21uZW1vbmljX3RhYmxlW0FWUjMyX01ORU1PTklDX1BJQ09WTUFDXSwgQVZSMzJfUEFSU0VSX0FMSUFTLAorKyAgICAgIHsgLmFsaWFzID0gJmF2cjMyX2FsaWFzX3RhYmxlW0FWUjMyX0FMSUFTX1BJQ09WTUFDMV0gfSwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QSUNPVk1BQzJdLCA0LAorKyAgICAgIHsKKysJQVZSMzJfT1BFUkFORF9QSUNPX09VVDEsCisrCUFWUjMyX09QRVJBTkRfUElDT19JTiwKKysJQVZSMzJfT1BFUkFORF9QSUNPX0lOLAorKwlBVlIzMl9PUEVSQU5EX1BJQ09fSU4sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX1NZTlRBWF9QSUNPVk1BQzIsCisrICAgICAgQVZSMzJfUElDTywgJmF2cjMyX21uZW1vbmljX3RhYmxlW0FWUjMyX01ORU1PTklDX1BJQ09WTUFDXSwgQVZSMzJfUEFSU0VSX0FMSUFTLAorKyAgICAgIHsgLmFsaWFzID0gJmF2cjMyX2FsaWFzX3RhYmxlW0FWUjMyX0FMSUFTX1BJQ09WTUFDMl0gfSwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QSUNPVk1BQzNdLCA0LAorKyAgICAgIHsKKysJQVZSMzJfT1BFUkFORF9QSUNPX09VVDIsCisrCUFWUjMyX09QRVJBTkRfUElDT19JTiwKKysJQVZSMzJfT1BFUkFORF9QSUNPX0lOLAorKwlBVlIzMl9PUEVSQU5EX1BJQ09fSU4sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX1NZTlRBWF9QSUNPVk1BQzMsCisrICAgICAgQVZSMzJfUElDTywgJmF2cjMyX21uZW1vbmljX3RhYmxlW0FWUjMyX01ORU1PTklDX1BJQ09WTUFDXSwgQVZSMzJfUEFSU0VSX0FMSUFTLAorKyAgICAgIHsgLmFsaWFzID0gJmF2cjMyX2FsaWFzX3RhYmxlW0FWUjMyX0FMSUFTX1BJQ09WTUFDM10gfSwKKysgICAgICBOVUxMLCA0LAorKyAgICAgIHsKKysJQVZSMzJfT1BFUkFORF9QSUNPX09VVDMsCisrCUFWUjMyX09QRVJBTkRfUElDT19JTiwKKysJQVZSMzJfT1BFUkFORF9QSUNPX0lOLAorKwlBVlIzMl9PUEVSQU5EX1BJQ09fSU4sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX1NZTlRBWF9QSUNPVk1VTDAsCisrICAgICAgQVZSMzJfUElDTywgJmF2cjMyX21uZW1vbmljX3RhYmxlW0FWUjMyX01ORU1PTklDX1BJQ09WTVVMXSwgQVZSMzJfUEFSU0VSX0FMSUFTLAorKyAgICAgIHsgLmFsaWFzID0gJmF2cjMyX2FsaWFzX3RhYmxlW0FWUjMyX0FMSUFTX1BJQ09WTVVMMF0gfSwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QSUNPVk1VTDFdLCA0LAorKyAgICAgIHsKKysJQVZSMzJfT1BFUkFORF9QSUNPX09VVDAsCisrCUFWUjMyX09QRVJBTkRfUElDT19JTiwKKysJQVZSMzJfT1BFUkFORF9QSUNPX0lOLAorKwlBVlIzMl9PUEVSQU5EX1BJQ09fSU4sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX1NZTlRBWF9QSUNPVk1VTDEsCisrICAgICAgQVZSMzJfUElDTywgJmF2cjMyX21uZW1vbmljX3RhYmxlW0FWUjMyX01ORU1PTklDX1BJQ09WTVVMXSwgQVZSMzJfUEFSU0VSX0FMSUFTLAorKyAgICAgIHsgLmFsaWFzID0gJmF2cjMyX2FsaWFzX3RhYmxlW0FWUjMyX0FMSUFTX1BJQ09WTVVMMV0gfSwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QSUNPVk1VTDJdLCA0LAorKyAgICAgIHsKKysJQVZSMzJfT1BFUkFORF9QSUNPX09VVDEsCisrCUFWUjMyX09QRVJBTkRfUElDT19JTiwKKysJQVZSMzJfT1BFUkFORF9QSUNPX0lOLAorKwlBVlIzMl9PUEVSQU5EX1BJQ09fSU4sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX1NZTlRBWF9QSUNPVk1VTDIsCisrICAgICAgQVZSMzJfUElDTywgJmF2cjMyX21uZW1vbmljX3RhYmxlW0FWUjMyX01ORU1PTklDX1BJQ09WTVVMXSwgQVZSMzJfUEFSU0VSX0FMSUFTLAorKyAgICAgIHsgLmFsaWFzID0gJmF2cjMyX2FsaWFzX3RhYmxlW0FWUjMyX0FMSUFTX1BJQ09WTVVMMl0gfSwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QSUNPVk1VTDNdLCA0LAorKyAgICAgIHsKKysJQVZSMzJfT1BFUkFORF9QSUNPX09VVDIsCisrCUFWUjMyX09QRVJBTkRfUElDT19JTiwKKysJQVZSMzJfT1BFUkFORF9QSUNPX0lOLAorKwlBVlIzMl9PUEVSQU5EX1BJQ09fSU4sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX1NZTlRBWF9QSUNPVk1VTDMsCisrICAgICAgQVZSMzJfUElDTywgJmF2cjMyX21uZW1vbmljX3RhYmxlW0FWUjMyX01ORU1PTklDX1BJQ09WTVVMXSwgQVZSMzJfUEFSU0VSX0FMSUFTLAorKyAgICAgIHsgLmFsaWFzID0gJmF2cjMyX2FsaWFzX3RhYmxlW0FWUjMyX0FMSUFTX1BJQ09WTVVMM10gfSwKKysgICAgICBOVUxMLCA0LAorKyAgICAgIHsKKysJQVZSMzJfT1BFUkFORF9QSUNPX09VVDMsCisrCUFWUjMyX09QRVJBTkRfUElDT19JTiwKKysJQVZSMzJfT1BFUkFORF9QSUNPX0lOLAorKwlBVlIzMl9PUEVSQU5EX1BJQ09fSU4sCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX1NZTlRBWF9QSUNPTERfRDIsCisrICAgICAgQVZSMzJfUElDTywgJmF2cjMyX21uZW1vbmljX3RhYmxlW0FWUjMyX01ORU1PTklDX1BJQ09MRF9EXSwgQVZSMzJfUEFSU0VSX0FMSUFTLAorKyAgICAgIHsgLmFsaWFzID0gJmF2cjMyX2FsaWFzX3RhYmxlW0FWUjMyX0FMSUFTX1BJQ09MRF9EMl0gfSwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QSUNPTERfRDNdLCAyLAorKyAgICAgIHsKKysJQVZSMzJfT1BFUkFORF9QSUNPX1JFR19ELAorKwlBVlIzMl9PUEVSQU5EX0lOVFJFR19QUkVERUMsCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX1NZTlRBWF9QSUNPTERfRDMsCisrICAgICAgQVZSMzJfUElDTywgJmF2cjMyX21uZW1vbmljX3RhYmxlW0FWUjMyX01ORU1PTklDX1BJQ09MRF9EXSwgQVZSMzJfUEFSU0VSX0FMSUFTLAorKyAgICAgIHsgLmFsaWFzID0gJmF2cjMyX2FsaWFzX3RhYmxlW0FWUjMyX0FMSUFTX1BJQ09MRF9EM10gfSwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QSUNPTERfRDFdLCAyLAorKyAgICAgIHsKKysJQVZSMzJfT1BFUkFORF9QSUNPX1JFR19ELAorKwlBVlIzMl9PUEVSQU5EX0lOVFJFR19JTkRFWCwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfU1lOVEFYX1BJQ09MRF9EMSwKKysgICAgICBBVlIzMl9QSUNPLCAmYXZyMzJfbW5lbW9uaWNfdGFibGVbQVZSMzJfTU5FTU9OSUNfUElDT0xEX0RdLCBBVlIzMl9QQVJTRVJfQUxJQVMsCisrICAgICAgeyAuYWxpYXMgPSAmYXZyMzJfYWxpYXNfdGFibGVbQVZSMzJfQUxJQVNfUElDT0xEX0QxXSB9LAorKyAgICAgIE5VTEwsIDIsCisrICAgICAgeworKwlBVlIzMl9PUEVSQU5EX1BJQ09fUkVHX0QsCisrCUFWUjMyX09QRVJBTkRfSU5UUkVHX1VESVNQX1csCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX1NZTlRBWF9QSUNPTERfVzIsCisrICAgICAgQVZSMzJfUElDTywgJmF2cjMyX21uZW1vbmljX3RhYmxlW0FWUjMyX01ORU1PTklDX1BJQ09MRF9XXSwgQVZSMzJfUEFSU0VSX0FMSUFTLAorKyAgICAgIHsgLmFsaWFzID0gJmF2cjMyX2FsaWFzX3RhYmxlW0FWUjMyX0FMSUFTX1BJQ09MRF9XMl0gfSwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QSUNPTERfVzNdLCAyLAorKyAgICAgIHsKKysJQVZSMzJfT1BFUkFORF9QSUNPX1JFR19XLAorKwlBVlIzMl9PUEVSQU5EX0lOVFJFR19QUkVERUMsCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX1NZTlRBWF9QSUNPTERfVzMsCisrICAgICAgQVZSMzJfUElDTywgJmF2cjMyX21uZW1vbmljX3RhYmxlW0FWUjMyX01ORU1PTklDX1BJQ09MRF9XXSwgQVZSMzJfUEFSU0VSX0FMSUFTLAorKyAgICAgIHsgLmFsaWFzID0gJmF2cjMyX2FsaWFzX3RhYmxlW0FWUjMyX0FMSUFTX1BJQ09MRF9XM10gfSwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QSUNPTERfVzFdLCAyLAorKyAgICAgIHsKKysJQVZSMzJfT1BFUkFORF9QSUNPX1JFR19XLAorKwlBVlIzMl9PUEVSQU5EX0lOVFJFR19JTkRFWCwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfU1lOVEFYX1BJQ09MRF9XMSwKKysgICAgICBBVlIzMl9QSUNPLCAmYXZyMzJfbW5lbW9uaWNfdGFibGVbQVZSMzJfTU5FTU9OSUNfUElDT0xEX1ddLCBBVlIzMl9QQVJTRVJfQUxJQVMsCisrICAgICAgeyAuYWxpYXMgPSAmYXZyMzJfYWxpYXNfdGFibGVbQVZSMzJfQUxJQVNfUElDT0xEX1cxXSB9LAorKyAgICAgIE5VTEwsIDIsCisrICAgICAgeworKwlBVlIzMl9PUEVSQU5EX1BJQ09fUkVHX1csCisrCUFWUjMyX09QRVJBTkRfSU5UUkVHX1VESVNQX1csCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX1NZTlRBWF9QSUNPTERNX0QsCisrICAgICAgQVZSMzJfUElDTywgJmF2cjMyX21uZW1vbmljX3RhYmxlW0FWUjMyX01ORU1PTklDX1BJQ09MRE1fRF0sIEFWUjMyX1BBUlNFUl9BTElBUywKKysgICAgICB7IC5hbGlhcyA9ICZhdnIzMl9hbGlhc190YWJsZVtBVlIzMl9BTElBU19QSUNPTERNX0RdIH0sCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUElDT0xETV9EX1BVXSwgLTIsCisrICAgICAgeworKwlBVlIzMl9PUEVSQU5EX0lOVFJFRywKKysJQVZSMzJfT1BFUkFORF9QSUNPX1JFR0xJU1RfRCwKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfU1lOVEFYX1BJQ09MRE1fRF9QVSwKKysgICAgICBBVlIzMl9QSUNPLCAmYXZyMzJfbW5lbW9uaWNfdGFibGVbQVZSMzJfTU5FTU9OSUNfUElDT0xETV9EXSwgQVZSMzJfUEFSU0VSX0FMSUFTLAorKyAgICAgIHsgLmFsaWFzID0gJmF2cjMyX2FsaWFzX3RhYmxlW0FWUjMyX0FMSUFTX1BJQ09MRE1fRF9QVV0gfSwKKysgICAgICBOVUxMLCAtMiwKKysgICAgICB7CisrCUFWUjMyX09QRVJBTkRfSU5UUkVHX1BPU1RJTkMsCisrCUFWUjMyX09QRVJBTkRfUElDT19SRUdMSVNUX0QsCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX1NZTlRBWF9QSUNPTERNX1csCisrICAgICAgQVZSMzJfUElDTywgJmF2cjMyX21uZW1vbmljX3RhYmxlW0FWUjMyX01ORU1PTklDX1BJQ09MRE1fV10sIEFWUjMyX1BBUlNFUl9BTElBUywKKysgICAgICB7IC5hbGlhcyA9ICZhdnIzMl9hbGlhc190YWJsZVtBVlIzMl9BTElBU19QSUNPTERNX1ddIH0sCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUElDT0xETV9XX1BVXSwgLTIsCisrICAgICAgeworKwlBVlIzMl9PUEVSQU5EX0lOVFJFRywKKysJQVZSMzJfT1BFUkFORF9QSUNPX1JFR0xJU1RfVywKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfU1lOVEFYX1BJQ09MRE1fV19QVSwKKysgICAgICBBVlIzMl9QSUNPLCAmYXZyMzJfbW5lbW9uaWNfdGFibGVbQVZSMzJfTU5FTU9OSUNfUElDT0xETV9XXSwgQVZSMzJfUEFSU0VSX0FMSUFTLAorKyAgICAgIHsgLmFsaWFzID0gJmF2cjMyX2FsaWFzX3RhYmxlW0FWUjMyX0FMSUFTX1BJQ09MRE1fV19QVV0gfSwKKysgICAgICBOVUxMLCAtMiwKKysgICAgICB7CisrCUFWUjMyX09QRVJBTkRfSU5UUkVHX1BPU1RJTkMsCisrCUFWUjMyX09QRVJBTkRfUElDT19SRUdMSVNUX1csCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX1NZTlRBWF9QSUNPTVZfRDEsCisrICAgICAgQVZSMzJfUElDTywgJmF2cjMyX21uZW1vbmljX3RhYmxlW0FWUjMyX01ORU1PTklDX1BJQ09NVl9EXSwgQVZSMzJfUEFSU0VSX0FMSUFTLAorKyAgICAgIHsgLmFsaWFzID0gJmF2cjMyX2FsaWFzX3RhYmxlW0FWUjMyX0FMSUFTX1BJQ09NVl9EMV0gfSwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QSUNPTVZfRDJdLCAyLAorKyAgICAgIHsKKysJQVZSMzJfT1BFUkFORF9EV1JFRywKKysJQVZSMzJfT1BFUkFORF9QSUNPX1JFR19ELAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9TWU5UQVhfUElDT01WX0QyLAorKyAgICAgIEFWUjMyX1BJQ08sICZhdnIzMl9tbmVtb25pY190YWJsZVtBVlIzMl9NTkVNT05JQ19QSUNPTVZfRF0sIEFWUjMyX1BBUlNFUl9BTElBUywKKysgICAgICB7IC5hbGlhcyA9ICZhdnIzMl9hbGlhc190YWJsZVtBVlIzMl9BTElBU19QSUNPTVZfRDJdIH0sCisrICAgICAgTlVMTCwgMiwKKysgICAgICB7CisrCUFWUjMyX09QRVJBTkRfUElDT19SRUdfRCwKKysJQVZSMzJfT1BFUkFORF9EV1JFRywKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfU1lOVEFYX1BJQ09NVl9XMSwKKysgICAgICBBVlIzMl9QSUNPLCAmYXZyMzJfbW5lbW9uaWNfdGFibGVbQVZSMzJfTU5FTU9OSUNfUElDT01WX1ddLCBBVlIzMl9QQVJTRVJfQUxJQVMsCisrICAgICAgeyAuYWxpYXMgPSAmYXZyMzJfYWxpYXNfdGFibGVbQVZSMzJfQUxJQVNfUElDT01WX1cxXSB9LAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BJQ09NVl9XMl0sIDIsCisrICAgICAgeworKwlBVlIzMl9PUEVSQU5EX0lOVFJFRywKKysJQVZSMzJfT1BFUkFORF9QSUNPX1JFR19XLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9TWU5UQVhfUElDT01WX1cyLAorKyAgICAgIEFWUjMyX1BJQ08sICZhdnIzMl9tbmVtb25pY190YWJsZVtBVlIzMl9NTkVNT05JQ19QSUNPTVZfV10sIEFWUjMyX1BBUlNFUl9BTElBUywKKysgICAgICB7IC5hbGlhcyA9ICZhdnIzMl9hbGlhc190YWJsZVtBVlIzMl9BTElBU19QSUNPTVZfVzJdIH0sCisrICAgICAgTlVMTCwgMiwKKysgICAgICB7CisrCUFWUjMyX09QRVJBTkRfUElDT19SRUdfVywKKysJQVZSMzJfT1BFUkFORF9JTlRSRUcsCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX1NZTlRBWF9QSUNPU1RfRDIsCisrICAgICAgQVZSMzJfUElDTywgJmF2cjMyX21uZW1vbmljX3RhYmxlW0FWUjMyX01ORU1PTklDX1BJQ09TVF9EXSwgQVZSMzJfUEFSU0VSX0FMSUFTLAorKyAgICAgIHsgLmFsaWFzID0gJmF2cjMyX2FsaWFzX3RhYmxlW0FWUjMyX0FMSUFTX1BJQ09TVF9EMl0gfSwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QSUNPU1RfRDNdLCAyLAorKyAgICAgIHsKKysJQVZSMzJfT1BFUkFORF9JTlRSRUdfUE9TVElOQywKKysJQVZSMzJfT1BFUkFORF9QSUNPX1JFR19ELAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9TWU5UQVhfUElDT1NUX0QzLAorKyAgICAgIEFWUjMyX1BJQ08sICZhdnIzMl9tbmVtb25pY190YWJsZVtBVlIzMl9NTkVNT05JQ19QSUNPU1RfRF0sIEFWUjMyX1BBUlNFUl9BTElBUywKKysgICAgICB7IC5hbGlhcyA9ICZhdnIzMl9hbGlhc190YWJsZVtBVlIzMl9BTElBU19QSUNPU1RfRDNdIH0sCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUElDT1NUX0QxXSwgMiwKKysgICAgICB7CisrCUFWUjMyX09QRVJBTkRfSU5UUkVHX0lOREVYLAorKwlBVlIzMl9PUEVSQU5EX1BJQ09fUkVHX0QsCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX1NZTlRBWF9QSUNPU1RfRDEsCisrICAgICAgQVZSMzJfUElDTywgJmF2cjMyX21uZW1vbmljX3RhYmxlW0FWUjMyX01ORU1PTklDX1BJQ09TVF9EXSwgQVZSMzJfUEFSU0VSX0FMSUFTLAorKyAgICAgIHsgLmFsaWFzID0gJmF2cjMyX2FsaWFzX3RhYmxlW0FWUjMyX0FMSUFTX1BJQ09TVF9EMV0gfSwKKysgICAgICBOVUxMLCAyLAorKyAgICAgIHsKKysJQVZSMzJfT1BFUkFORF9JTlRSRUdfVURJU1BfVywKKysJQVZSMzJfT1BFUkFORF9QSUNPX1JFR19ELAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9TWU5UQVhfUElDT1NUX1cyLAorKyAgICAgIEFWUjMyX1BJQ08sICZhdnIzMl9tbmVtb25pY190YWJsZVtBVlIzMl9NTkVNT05JQ19QSUNPU1RfV10sIEFWUjMyX1BBUlNFUl9BTElBUywKKysgICAgICB7IC5hbGlhcyA9ICZhdnIzMl9hbGlhc190YWJsZVtBVlIzMl9BTElBU19QSUNPU1RfVzJdIH0sCisrICAgICAgJmF2cjMyX3N5bnRheF90YWJsZVtBVlIzMl9TWU5UQVhfUElDT1NUX1czXSwgMiwKKysgICAgICB7CisrCUFWUjMyX09QRVJBTkRfSU5UUkVHX1BPU1RJTkMsCisrCUFWUjMyX09QRVJBTkRfUElDT19SRUdfVywKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfU1lOVEFYX1BJQ09TVF9XMywKKysgICAgICBBVlIzMl9QSUNPLCAmYXZyMzJfbW5lbW9uaWNfdGFibGVbQVZSMzJfTU5FTU9OSUNfUElDT1NUX1ddLCBBVlIzMl9QQVJTRVJfQUxJQVMsCisrICAgICAgeyAuYWxpYXMgPSAmYXZyMzJfYWxpYXNfdGFibGVbQVZSMzJfQUxJQVNfUElDT1NUX1czXSB9LAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BJQ09TVF9XMV0sIDIsCisrICAgICAgeworKwlBVlIzMl9PUEVSQU5EX0lOVFJFR19JTkRFWCwKKysJQVZSMzJfT1BFUkFORF9QSUNPX1JFR19XLAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9TWU5UQVhfUElDT1NUX1cxLAorKyAgICAgIEFWUjMyX1BJQ08sICZhdnIzMl9tbmVtb25pY190YWJsZVtBVlIzMl9NTkVNT05JQ19QSUNPU1RfV10sIEFWUjMyX1BBUlNFUl9BTElBUywKKysgICAgICB7IC5hbGlhcyA9ICZhdnIzMl9hbGlhc190YWJsZVtBVlIzMl9BTElBU19QSUNPU1RfVzFdIH0sCisrICAgICAgTlVMTCwgMiwKKysgICAgICB7CisrCUFWUjMyX09QRVJBTkRfSU5UUkVHX1VESVNQX1csCisrCUFWUjMyX09QRVJBTkRfUElDT19SRUdfVywKKysgICAgICB9LAorKyAgICB9LAorKyAgICB7CisrICAgICAgQVZSMzJfU1lOVEFYX1BJQ09TVE1fRCwKKysgICAgICBBVlIzMl9QSUNPLCAmYXZyMzJfbW5lbW9uaWNfdGFibGVbQVZSMzJfTU5FTU9OSUNfUElDT1NUTV9EXSwgQVZSMzJfUEFSU0VSX0FMSUFTLAorKyAgICAgIHsgLmFsaWFzID0gJmF2cjMyX2FsaWFzX3RhYmxlW0FWUjMyX0FMSUFTX1BJQ09TVE1fRF0gfSwKKysgICAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF9QSUNPU1RNX0RfUFVdLCAtMiwKKysgICAgICB7CisrCUFWUjMyX09QRVJBTkRfSU5UUkVHLAorKwlBVlIzMl9PUEVSQU5EX1BJQ09fUkVHTElTVF9ELAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9TWU5UQVhfUElDT1NUTV9EX1BVLAorKyAgICAgIEFWUjMyX1BJQ08sICZhdnIzMl9tbmVtb25pY190YWJsZVtBVlIzMl9NTkVNT05JQ19QSUNPU1RNX0RdLCBBVlIzMl9QQVJTRVJfQUxJQVMsCisrICAgICAgeyAuYWxpYXMgPSAmYXZyMzJfYWxpYXNfdGFibGVbQVZSMzJfQUxJQVNfUElDT1NUTV9EX1BVXSB9LAorKyAgICAgIE5VTEwsIC0yLAorKyAgICAgIHsKKysJQVZSMzJfT1BFUkFORF9JTlRSRUdfUFJFREVDLAorKwlBVlIzMl9PUEVSQU5EX1BJQ09fUkVHTElTVF9ELAorKyAgICAgIH0sCisrICAgIH0sCisrICAgIHsKKysgICAgICBBVlIzMl9TWU5UQVhfUElDT1NUTV9XLAorKyAgICAgIEFWUjMyX1BJQ08sICZhdnIzMl9tbmVtb25pY190YWJsZVtBVlIzMl9NTkVNT05JQ19QSUNPU1RNX1ddLCBBVlIzMl9QQVJTRVJfQUxJQVMsCisrICAgICAgeyAuYWxpYXMgPSAmYXZyMzJfYWxpYXNfdGFibGVbQVZSMzJfQUxJQVNfUElDT1NUTV9XXSB9LAorKyAgICAgICZhdnIzMl9zeW50YXhfdGFibGVbQVZSMzJfU1lOVEFYX1BJQ09TVE1fV19QVV0sIC0yLAorKyAgICAgIHsKKysJQVZSMzJfT1BFUkFORF9JTlRSRUcsCisrCUFWUjMyX09QRVJBTkRfUElDT19SRUdMSVNUX1csCisrICAgICAgfSwKKysgICAgfSwKKysgICAgeworKyAgICAgIEFWUjMyX1NZTlRBWF9QSUNPU1RNX1dfUFUsCisrICAgICAgQVZSMzJfUElDTywgJmF2cjMyX21uZW1vbmljX3RhYmxlW0FWUjMyX01ORU1PTklDX1BJQ09TVE1fV10sIEFWUjMyX1BBUlNFUl9BTElBUywKKysgICAgICB7IC5hbGlhcyA9ICZhdnIzMl9hbGlhc190YWJsZVtBVlIzMl9BTElBU19QSUNPU1RNX1dfUFVdIH0sCisrICAgICAgTlVMTCwgLTIsCisrICAgICAgeworKwlBVlIzMl9PUEVSQU5EX0lOVFJFR19QUkVERUMsCisrCUFWUjMyX09QRVJBTkRfUElDT19SRUdMSVNUX1csCisrICAgICAgfSwKKysgICAgfSwKKysgICAgU1lOVEFYX05PUk1BTDIoUlNVQkVRLCBSU1VCRVEsIFJTVUJFUSwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YxKSwKKysgICAgU1lOVEFYX05PUk1BTDIoUlNVQk5FLCBSU1VCTkUsIFJTVUJORSwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoUlNVQkNDLCBSU1VCQ0MsIFJTVUJDQywgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoUlNVQkNTLCBSU1VCQ1MsIFJTVUJDUywgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoUlNVQkdFLCBSU1VCR0UsIFJTVUJHRSwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoUlNVQkxULCBSU1VCTFQsIFJTVUJMVCwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoUlNVQk1JLCBSU1VCTUksIFJTVUJNSSwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoUlNVQlBMLCBSU1VCUEwsIFJTVUJQTCwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoUlNVQkxTLCBSU1VCTFMsIFJTVUJMUywgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoUlNVQkdULCBSU1VCR1QsIFJTVUJHVCwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoUlNVQkxFLCBSU1VCTEUsIFJTVUJMRSwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoUlNVQkhJLCBSU1VCSEksIFJTVUJISSwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoUlNVQlZTLCBSU1VCVlMsIFJTVUJWUywgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoUlNVQlZDLCBSU1VCVkMsIFJTVUJWQywgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoUlNVQlFTLCBSU1VCUVMsIFJTVUJRUywgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoUlNVQkFMLCBSU1VCQUwsIFJTVUJBTCwgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoUlNVQkhTLCBSU1VCSFMsIFJTVUJDQywgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoUlNVQkxPLCBSU1VCTE8sIFJTVUJDUywgSU5UUkVHLCBTSUdORURfQ09OU1QsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoQURERVEsIEFEREVRLCBBRERFUSwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhBRERORSwgQURETkUsIEFERE5FLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKEFERENDLCBBRERDQywgQUREQ0MsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoQUREQ1MsIEFERENTLCBBRERDUywgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhBRERHRSwgQURER0UsIEFEREdFLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKEFERExULCBBRERMVCwgQURETFQsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoQURETUksIEFERE1JLCBBRERNSSwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhBRERQTCwgQUREUEwsIEFERFBMLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKEFERExTLCBBRERMUywgQURETFMsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoQURER1QsIEFEREdULCBBRERHVCwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhBRERMRSwgQURETEUsIEFERExFLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKEFEREhJLCBBRERISSwgQURESEksIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoQUREVlMsIEFERFZTLCBBRERWUywgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhBRERWQywgQUREVkMsIEFERFZDLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKEFERFFTLCBBRERRUywgQUREUVMsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoQUREQUwsIEFEREFMLCBBRERBTCwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhBRERIUywgQURESFMsIEFERENDLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKEFERExPLCBBRERMTywgQUREQ1MsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoU1VCMkVRLCBTVUJFUSwgU1VCMkVRLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKFNVQjJORSwgU1VCTkUsIFNVQjJORSwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhTVUIyQ0MsIFNVQkNDLCBTVUIyQ0MsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoU1VCMkNTLCBTVUJDUywgU1VCMkNTLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKFNVQjJHRSwgU1VCR0UsIFNVQjJHRSwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhTVUIyTFQsIFNVQkxULCBTVUIyTFQsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoU1VCMk1JLCBTVUJNSSwgU1VCMk1JLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKFNVQjJQTCwgU1VCUEwsIFNVQjJQTCwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhTVUIyTFMsIFNVQkxTLCBTVUIyTFMsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoU1VCMkdULCBTVUJHVCwgU1VCMkdULCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKFNVQjJMRSwgU1VCTEUsIFNVQjJMRSwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhTVUIySEksIFNVQkhJLCBTVUIySEksIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoU1VCMlZTLCBTVUJWUywgU1VCMlZTLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKFNVQjJWQywgU1VCVkMsIFNVQjJWQywgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhTVUIyUVMsIFNVQlFTLCBTVUIyUVMsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoU1VCMkFMLCBTVUJBTCwgU1VCMkFMLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKFNVQjJIUywgU1VCSFMsIFNVQjJDQywgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhTVUIyTE8sIFNVQkxPLCBTVUIyQ1MsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoQU5ERVEsIEFOREVRLCBBTkRFUSwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhBTkRORSwgQU5ETkUsIEFORE5FLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKEFORENDLCBBTkRDQywgQU5EQ0MsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoQU5EQ1MsIEFORENTLCBBTkRDUywgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhBTkRHRSwgQU5ER0UsIEFOREdFLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKEFORExULCBBTkRMVCwgQU5ETFQsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoQU5ETUksIEFORE1JLCBBTkRNSSwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhBTkRQTCwgQU5EUEwsIEFORFBMLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKEFORExTLCBBTkRMUywgQU5ETFMsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoQU5ER1QsIEFOREdULCBBTkRHVCwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhBTkRMRSwgQU5ETEUsIEFORExFLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKEFOREhJLCBBTkRISSwgQU5ESEksIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoQU5EVlMsIEFORFZTLCBBTkRWUywgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhBTkRWQywgQU5EVkMsIEFORFZDLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKEFORFFTLCBBTkRRUywgQU5EUVMsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoQU5EQUwsIEFOREFMLCBBTkRBTCwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhBTkRIUywgQU5ESFMsIEFORENDLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKEFORExPLCBBTkRMTywgQU5EQ1MsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoT1JFUSwgT1JFUSwgT1JFUSwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhPUk5FLCBPUk5FLCBPUk5FLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKE9SQ0MsIE9SQ0MsIE9SQ0MsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoT1JDUywgT1JDUywgT1JDUywgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhPUkdFLCBPUkdFLCBPUkdFLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKE9STFQsIE9STFQsIE9STFQsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoT1JNSSwgT1JNSSwgT1JNSSwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhPUlBMLCBPUlBMLCBPUlBMLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKE9STFMsIE9STFMsIE9STFMsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoT1JHVCwgT1JHVCwgT1JHVCwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhPUkxFLCBPUkxFLCBPUkxFLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKE9SSEksIE9SSEksIE9SSEksIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoT1JWUywgT1JWUywgT1JWUywgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhPUlZDLCBPUlZDLCBPUlZDLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKE9SUVMsIE9SUVMsIE9SUVMsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoT1JBTCwgT1JBTCwgT1JBTCwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhPUkhTLCBPUkhTLCBPUkNDLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKE9STE8sIE9STE8sIE9SQ1MsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoRU9SRVEsIEVPUkVRLCBFT1JFUSwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhFT1JORSwgRU9STkUsIEVPUk5FLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKEVPUkNDLCBFT1JDQywgRU9SQ0MsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoRU9SQ1MsIEVPUkNTLCBFT1JDUywgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhFT1JHRSwgRU9SR0UsIEVPUkdFLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKEVPUkxULCBFT1JMVCwgRU9STFQsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoRU9STUksIEVPUk1JLCBFT1JNSSwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhFT1JQTCwgRU9SUEwsIEVPUlBMLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKEVPUkxTLCBFT1JMUywgRU9STFMsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoRU9SR1QsIEVPUkdULCBFT1JHVCwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhFT1JMRSwgRU9STEUsIEVPUkxFLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKEVPUkhJLCBFT1JISSwgRU9SSEksIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoRU9SVlMsIEVPUlZTLCBFT1JWUywgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhFT1JWQywgRU9SVkMsIEVPUlZDLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKEVPUlFTLCBFT1JRUywgRU9SUVMsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDMoRU9SQUwsIEVPUkFMLCBFT1JBTCwgSU5UUkVHLCBJTlRSRUcsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMyhFT1JIUywgRU9SSFMsIEVPUkNDLCBJTlRSRUcsIElOVFJFRywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwzKEVPUkxPLCBFT1JMTywgRU9SQ1MsIElOVFJFRywgSU5UUkVHLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfV0VRLCBMRF9XRVEsIExEX1dFUSwgSU5UUkVHLCBJTlRSRUdfVURJU1BfVywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihMRF9XTkUsIExEX1dORSwgTERfV05FLCBJTlRSRUcsIElOVFJFR19VRElTUF9XLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKExEX1dDQywgTERfV0NDLCBMRF9XQ0MsIElOVFJFRywgSU5UUkVHX1VESVNQX1csIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfV0NTLCBMRF9XQ1MsIExEX1dDUywgSU5UUkVHLCBJTlRSRUdfVURJU1BfVywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihMRF9XR0UsIExEX1dHRSwgTERfV0dFLCBJTlRSRUcsIElOVFJFR19VRElTUF9XLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKExEX1dMVCwgTERfV0xULCBMRF9XTFQsIElOVFJFRywgSU5UUkVHX1VESVNQX1csIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfV01JLCBMRF9XTUksIExEX1dNSSwgSU5UUkVHLCBJTlRSRUdfVURJU1BfVywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihMRF9XUEwsIExEX1dQTCwgTERfV1BMLCBJTlRSRUcsIElOVFJFR19VRElTUF9XLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKExEX1dMUywgTERfV0xTLCBMRF9XTFMsIElOVFJFRywgSU5UUkVHX1VESVNQX1csIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfV0dULCBMRF9XR1QsIExEX1dHVCwgSU5UUkVHLCBJTlRSRUdfVURJU1BfVywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihMRF9XTEUsIExEX1dMRSwgTERfV0xFLCBJTlRSRUcsIElOVFJFR19VRElTUF9XLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKExEX1dISSwgTERfV0hJLCBMRF9XSEksIElOVFJFRywgSU5UUkVHX1VESVNQX1csIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfV1ZTLCBMRF9XVlMsIExEX1dWUywgSU5UUkVHLCBJTlRSRUdfVURJU1BfVywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihMRF9XVkMsIExEX1dWQywgTERfV1ZDLCBJTlRSRUcsIElOVFJFR19VRElTUF9XLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKExEX1dRUywgTERfV1FTLCBMRF9XUVMsIElOVFJFRywgSU5UUkVHX1VESVNQX1csIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfV0FMLCBMRF9XQUwsIExEX1dBTCwgSU5UUkVHLCBJTlRSRUdfVURJU1BfVywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihMRF9XSFMsIExEX1dIUywgTERfV0NDLCBJTlRSRUcsIElOVFJFR19VRElTUF9XLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKExEX1dMTywgTERfV0xPLCBMRF9XQ1MsIElOVFJFRywgSU5UUkVHX1VESVNQX1csIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfU0hFUSwgTERfU0hFUSwgTERfU0hFUSwgSU5UUkVHLCBJTlRSRUdfVURJU1BfSCwgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihMRF9TSE5FLCBMRF9TSE5FLCBMRF9TSE5FLCBJTlRSRUcsIElOVFJFR19VRElTUF9ILCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKExEX1NIQ0MsIExEX1NIQ0MsIExEX1NIQ0MsIElOVFJFRywgSU5UUkVHX1VESVNQX0gsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfU0hDUywgTERfU0hDUywgTERfU0hDUywgSU5UUkVHLCBJTlRSRUdfVURJU1BfSCwgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihMRF9TSEdFLCBMRF9TSEdFLCBMRF9TSEdFLCBJTlRSRUcsIElOVFJFR19VRElTUF9ILCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKExEX1NITFQsIExEX1NITFQsIExEX1NITFQsIElOVFJFRywgSU5UUkVHX1VESVNQX0gsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfU0hNSSwgTERfU0hNSSwgTERfU0hNSSwgSU5UUkVHLCBJTlRSRUdfVURJU1BfSCwgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihMRF9TSFBMLCBMRF9TSFBMLCBMRF9TSFBMLCBJTlRSRUcsIElOVFJFR19VRElTUF9ILCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKExEX1NITFMsIExEX1NITFMsIExEX1NITFMsIElOVFJFRywgSU5UUkVHX1VESVNQX0gsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfU0hHVCwgTERfU0hHVCwgTERfU0hHVCwgSU5UUkVHLCBJTlRSRUdfVURJU1BfSCwgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihMRF9TSExFLCBMRF9TSExFLCBMRF9TSExFLCBJTlRSRUcsIElOVFJFR19VRElTUF9ILCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKExEX1NISEksIExEX1NISEksIExEX1NISEksIElOVFJFRywgSU5UUkVHX1VESVNQX0gsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfU0hWUywgTERfU0hWUywgTERfU0hWUywgSU5UUkVHLCBJTlRSRUdfVURJU1BfSCwgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihMRF9TSFZDLCBMRF9TSFZDLCBMRF9TSFZDLCBJTlRSRUcsIElOVFJFR19VRElTUF9ILCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKExEX1NIUVMsIExEX1NIUVMsIExEX1NIUVMsIElOVFJFRywgSU5UUkVHX1VESVNQX0gsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfU0hBTCwgTERfU0hBTCwgTERfU0hBTCwgSU5UUkVHLCBJTlRSRUdfVURJU1BfSCwgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihMRF9TSEhTLCBMRF9TSEhTLCBMRF9TSENDLCBJTlRSRUcsIElOVFJFR19VRElTUF9ILCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKExEX1NITE8sIExEX1NITE8sIExEX1NIQ1MsIElOVFJFRywgSU5UUkVHX1VESVNQX0gsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfVUhFUSwgTERfVUhFUSwgTERfVUhFUSwgSU5UUkVHLCBJTlRSRUdfVURJU1BfSCwgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihMRF9VSE5FLCBMRF9VSE5FLCBMRF9VSE5FLCBJTlRSRUcsIElOVFJFR19VRElTUF9ILCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKExEX1VIQ0MsIExEX1VIQ0MsIExEX1VIQ0MsIElOVFJFRywgSU5UUkVHX1VESVNQX0gsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfVUhDUywgTERfVUhDUywgTERfVUhDUywgSU5UUkVHLCBJTlRSRUdfVURJU1BfSCwgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihMRF9VSEdFLCBMRF9VSEdFLCBMRF9VSEdFLCBJTlRSRUcsIElOVFJFR19VRElTUF9ILCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKExEX1VITFQsIExEX1VITFQsIExEX1VITFQsIElOVFJFRywgSU5UUkVHX1VESVNQX0gsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfVUhNSSwgTERfVUhNSSwgTERfVUhNSSwgSU5UUkVHLCBJTlRSRUdfVURJU1BfSCwgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihMRF9VSFBMLCBMRF9VSFBMLCBMRF9VSFBMLCBJTlRSRUcsIElOVFJFR19VRElTUF9ILCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKExEX1VITFMsIExEX1VITFMsIExEX1VITFMsIElOVFJFRywgSU5UUkVHX1VESVNQX0gsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfVUhHVCwgTERfVUhHVCwgTERfVUhHVCwgSU5UUkVHLCBJTlRSRUdfVURJU1BfSCwgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihMRF9VSExFLCBMRF9VSExFLCBMRF9VSExFLCBJTlRSRUcsIElOVFJFR19VRElTUF9ILCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKExEX1VISEksIExEX1VISEksIExEX1VISEksIElOVFJFRywgSU5UUkVHX1VESVNQX0gsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfVUhWUywgTERfVUhWUywgTERfVUhWUywgSU5UUkVHLCBJTlRSRUdfVURJU1BfSCwgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihMRF9VSFZDLCBMRF9VSFZDLCBMRF9VSFZDLCBJTlRSRUcsIElOVFJFR19VRElTUF9ILCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKExEX1VIUVMsIExEX1VIUVMsIExEX1VIUVMsIElOVFJFRywgSU5UUkVHX1VESVNQX0gsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfVUhBTCwgTERfVUhBTCwgTERfVUhBTCwgSU5UUkVHLCBJTlRSRUdfVURJU1BfSCwgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihMRF9VSEhTLCBMRF9VSEhTLCBMRF9VSENDLCBJTlRSRUcsIElOVFJFR19VRElTUF9ILCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKExEX1VITE8sIExEX1VITE8sIExEX1VIQ1MsIElOVFJFRywgSU5UUkVHX1VESVNQX0gsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfU0JFUSwgTERfU0JFUSwgTERfU0JFUSwgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfU0JORSwgTERfU0JORSwgTERfU0JORSwgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfU0JDQywgTERfU0JDQywgTERfU0JDQywgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfU0JDUywgTERfU0JDUywgTERfU0JDUywgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfU0JHRSwgTERfU0JHRSwgTERfU0JHRSwgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfU0JMVCwgTERfU0JMVCwgTERfU0JMVCwgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfU0JNSSwgTERfU0JNSSwgTERfU0JNSSwgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfU0JQTCwgTERfU0JQTCwgTERfU0JQTCwgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfU0JMUywgTERfU0JMUywgTERfU0JMUywgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfU0JHVCwgTERfU0JHVCwgTERfU0JHVCwgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfU0JMRSwgTERfU0JMRSwgTERfU0JMRSwgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfU0JISSwgTERfU0JISSwgTERfU0JISSwgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfU0JWUywgTERfU0JWUywgTERfU0JWUywgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfU0JWQywgTERfU0JWQywgTERfU0JWQywgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfU0JRUywgTERfU0JRUywgTERfU0JRUywgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfU0JBTCwgTERfU0JBTCwgTERfU0JBTCwgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfU0JIUywgTERfU0JIUywgTERfU0JDQywgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfU0JMTywgTERfU0JMTywgTERfU0JDUywgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfVUJFUSwgTERfVUJFUSwgTERfVUJFUSwgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfVUJORSwgTERfVUJORSwgTERfVUJORSwgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfVUJDQywgTERfVUJDQywgTERfVUJDQywgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfVUJDUywgTERfVUJDUywgTERfVUJDUywgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfVUJHRSwgTERfVUJHRSwgTERfVUJHRSwgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfVUJMVCwgTERfVUJMVCwgTERfVUJMVCwgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfVUJNSSwgTERfVUJNSSwgTERfVUJNSSwgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfVUJQTCwgTERfVUJQTCwgTERfVUJQTCwgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfVUJMUywgTERfVUJMUywgTERfVUJMUywgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfVUJHVCwgTERfVUJHVCwgTERfVUJHVCwgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfVUJMRSwgTERfVUJMRSwgTERfVUJMRSwgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfVUJISSwgTERfVUJISSwgTERfVUJISSwgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfVUJWUywgTERfVUJWUywgTERfVUJWUywgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfVUJWQywgTERfVUJWQywgTERfVUJWQywgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfVUJRUywgTERfVUJRUywgTERfVUJRUywgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfVUJBTCwgTERfVUJBTCwgTERfVUJBTCwgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfVUJIUywgTERfVUJIUywgTERfVUJDQywgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTERfVUJMTywgTERfVUJMTywgTERfVUJDUywgSU5UUkVHLCBJTlRSRUdfVURJU1AsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfV0VRLCBTVF9XRVEsIFNUX1dFUSwgSU5UUkVHX1VESVNQX1csIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihTVF9XTkUsIFNUX1dORSwgU1RfV05FLCBJTlRSRUdfVURJU1BfVywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKFNUX1dDQywgU1RfV0NDLCBTVF9XQ0MsIElOVFJFR19VRElTUF9XLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfV0NTLCBTVF9XQ1MsIFNUX1dDUywgSU5UUkVHX1VESVNQX1csIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihTVF9XR0UsIFNUX1dHRSwgU1RfV0dFLCBJTlRSRUdfVURJU1BfVywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKFNUX1dMVCwgU1RfV0xULCBTVF9XTFQsIElOVFJFR19VRElTUF9XLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfV01JLCBTVF9XTUksIFNUX1dNSSwgSU5UUkVHX1VESVNQX1csIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihTVF9XUEwsIFNUX1dQTCwgU1RfV1BMLCBJTlRSRUdfVURJU1BfVywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKFNUX1dMUywgU1RfV0xTLCBTVF9XTFMsIElOVFJFR19VRElTUF9XLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfV0dULCBTVF9XR1QsIFNUX1dHVCwgSU5UUkVHX1VESVNQX1csIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihTVF9XTEUsIFNUX1dMRSwgU1RfV0xFLCBJTlRSRUdfVURJU1BfVywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKFNUX1dISSwgU1RfV0hJLCBTVF9XSEksIElOVFJFR19VRElTUF9XLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfV1ZTLCBTVF9XVlMsIFNUX1dWUywgSU5UUkVHX1VESVNQX1csIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihTVF9XVkMsIFNUX1dWQywgU1RfV1ZDLCBJTlRSRUdfVURJU1BfVywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKFNUX1dRUywgU1RfV1FTLCBTVF9XUVMsIElOVFJFR19VRElTUF9XLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfV0FMLCBTVF9XQUwsIFNUX1dBTCwgSU5UUkVHX1VESVNQX1csIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihTVF9XSFMsIFNUX1dIUywgU1RfV0NDLCBJTlRSRUdfVURJU1BfVywgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKFNUX1dMTywgU1RfV0xPLCBTVF9XQ1MsIElOVFJFR19VRElTUF9XLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfSEVRLCBTVF9IRVEsIFNUX0hFUSwgSU5UUkVHX1VESVNQX0gsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihTVF9ITkUsIFNUX0hORSwgU1RfSE5FLCBJTlRSRUdfVURJU1BfSCwgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKFNUX0hDQywgU1RfSENDLCBTVF9IQ0MsIElOVFJFR19VRElTUF9ILCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfSENTLCBTVF9IQ1MsIFNUX0hDUywgSU5UUkVHX1VESVNQX0gsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihTVF9IR0UsIFNUX0hHRSwgU1RfSEdFLCBJTlRSRUdfVURJU1BfSCwgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKFNUX0hMVCwgU1RfSExULCBTVF9ITFQsIElOVFJFR19VRElTUF9ILCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfSE1JLCBTVF9ITUksIFNUX0hNSSwgSU5UUkVHX1VESVNQX0gsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihTVF9IUEwsIFNUX0hQTCwgU1RfSFBMLCBJTlRSRUdfVURJU1BfSCwgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKFNUX0hMUywgU1RfSExTLCBTVF9ITFMsIElOVFJFR19VRElTUF9ILCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfSEdULCBTVF9IR1QsIFNUX0hHVCwgSU5UUkVHX1VESVNQX0gsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihTVF9ITEUsIFNUX0hMRSwgU1RfSExFLCBJTlRSRUdfVURJU1BfSCwgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKFNUX0hISSwgU1RfSEhJLCBTVF9ISEksIElOVFJFR19VRElTUF9ILCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfSFZTLCBTVF9IVlMsIFNUX0hWUywgSU5UUkVHX1VESVNQX0gsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihTVF9IVkMsIFNUX0hWQywgU1RfSFZDLCBJTlRSRUdfVURJU1BfSCwgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKFNUX0hRUywgU1RfSFFTLCBTVF9IUVMsIElOVFJFR19VRElTUF9ILCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfSEFMLCBTVF9IQUwsIFNUX0hBTCwgSU5UUkVHX1VESVNQX0gsIElOVFJFRywgQVZSMzJfVjIpLAorKyAgICBTWU5UQVhfTk9STUFMMihTVF9ISFMsIFNUX0hIUywgU1RfSENDLCBJTlRSRUdfVURJU1BfSCwgSU5UUkVHLCBBVlIzMl9WMiksCisrICAgIFNZTlRBWF9OT1JNQUwyKFNUX0hMTywgU1RfSExPLCBTVF9IQ1MsIElOVFJFR19VRElTUF9ILCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfQkVRLCBTVF9CRVEsIFNUX0JFUSwgSU5UUkVHX1VESVNQLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfQk5FLCBTVF9CTkUsIFNUX0JORSwgSU5UUkVHX1VESVNQLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfQkNDLCBTVF9CQ0MsIFNUX0JDQywgSU5UUkVHX1VESVNQLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfQkNTLCBTVF9CQ1MsIFNUX0JDUywgSU5UUkVHX1VESVNQLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfQkdFLCBTVF9CR0UsIFNUX0JHRSwgSU5UUkVHX1VESVNQLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfQkxULCBTVF9CTFQsIFNUX0JMVCwgSU5UUkVHX1VESVNQLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfQk1JLCBTVF9CTUksIFNUX0JNSSwgSU5UUkVHX1VESVNQLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfQlBMLCBTVF9CUEwsIFNUX0JQTCwgSU5UUkVHX1VESVNQLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfQkxTLCBTVF9CTFMsIFNUX0JMUywgSU5UUkVHX1VESVNQLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfQkdULCBTVF9CR1QsIFNUX0JHVCwgSU5UUkVHX1VESVNQLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfQkxFLCBTVF9CTEUsIFNUX0JMRSwgSU5UUkVHX1VESVNQLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfQkhJLCBTVF9CSEksIFNUX0JISSwgSU5UUkVHX1VESVNQLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfQlZTLCBTVF9CVlMsIFNUX0JWUywgSU5UUkVHX1VESVNQLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfQlZDLCBTVF9CVkMsIFNUX0JWQywgSU5UUkVHX1VESVNQLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfQlFTLCBTVF9CUVMsIFNUX0JRUywgSU5UUkVHX1VESVNQLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfQkFMLCBTVF9CQUwsIFNUX0JBTCwgSU5UUkVHX1VESVNQLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfQkhTLCBTVF9CSFMsIFNUX0JDQywgSU5UUkVHX1VESVNQLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoU1RfQkxPLCBTVF9CTE8sIFNUX0JDUywgSU5UUkVHX1VESVNQLCBJTlRSRUcsIEFWUjMyX1YyKSwKKysgICAgU1lOVEFYX05PUk1BTDIoTU9WSCwgTU9WSCwgTU9WSCwgSU5UUkVHLCBVTlNJR05FRF9DT05TVCwgQVZSMzJfVjIpLAorKworKyAgfTsKKysKKysjZGVmaW5lIE5PUk1BTF9NTkVNT05JQyhuYW1lLCBzeW50YXgsIHN0cikJCVwKKysgIHsJCQkJCQkJXAorKyAgICBBVlIzMl9NTkVNT05JQ18jI25hbWUsIHN0ciwJCQkJXAorKyAgICAmYXZyMzJfc3ludGF4X3RhYmxlW0FWUjMyX1NZTlRBWF8jI3N5bnRheF0sCQlcCisrICB9CisrI2RlZmluZSBGUF9NTkVNT05JQyhuYW1lLCBzeW50YXgsIHN0cikJCQlcCisrICBOT1JNQUxfTU5FTU9OSUMobmFtZSMjX1MsIHN5bnRheCMjX1MsIHN0ciAiLnMiKSwJXAorKyAgTk9STUFMX01ORU1PTklDKG5hbWUjI19ELCBzeW50YXgjI19ELCBzdHIgIi5kIikKKysKKytjb25zdCBzdHJ1Y3QgYXZyMzJfbW5lbW9uaWMgYXZyMzJfbW5lbW9uaWNfdGFibGVbXSA9CisrICB7CisrICAgIE5PUk1BTF9NTkVNT05JQyhBQlMsIEFCUywgImFicyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQUNBTEwsIEFDQUxMLCAiYWNhbGwiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEFDUiwgQUNSLCAiYWNyIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhBREMsIEFEQywgImFkYyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQURELCBBREQxLCAiYWRkIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhBRERBQlMsIEFEREFCUywgImFkZGFicyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQURESEhfVywgQURESEhfVywgImFkZGhoLnciKSwKKysgICAgTk9STUFMX01ORU1PTklDKEFORCwgQU5EMSwgImFuZCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQU5ESCwgQU5ESCwgImFuZGgiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEFOREwsIEFOREwsICJhbmRsIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhBTkROLCBBTkROLCAiYW5kbiIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQVNSLCBBU1IxLCAiYXNyIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhCRkVYVFMsIEJGRVhUUywgImJmZXh0cyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQkZFWFRVLCBCRkVYVFUsICJiZmV4dHUiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEJGSU5TLCBCRklOUywgImJmaW5zIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhCTEQsIEJMRCwgImJsZCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQlJFUSwgQlJFUTEsICJicmVxIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhCUk5FLCBCUk5FMSwgImJybmUiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEJSQ0MsIEJSQ0MxLCAiYnJjYyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQlJDUywgQlJDUzEsICJicmNzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhCUkdFLCBCUkdFMSwgImJyZ2UiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEJSTFQsIEJSTFQxLCAiYnJsdCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQlJNSSwgQlJNSTEsICJicm1pIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhCUlBMLCBCUlBMMSwgImJycGwiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEJSSFMsIEJSSFMxLCAiYnJocyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQlJMTywgQlJMTzEsICJicmxvIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhCUkxTLCBCUkxTLCAiYnJscyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQlJHVCwgQlJHVCwgImJyZ3QiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEJSTEUsIEJSTEUsICJicmxlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhCUkhJLCBCUkhJLCAiYnJoaSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQlJWUywgQlJWUywgImJydnMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEJSVkMsIEJSVkMsICJicnZjIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhCUlFTLCBCUlFTLCAiYnJxcyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQlJBTCwgQlJBTCwgImJyYWwiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEJSRUFLUE9JTlQsIEJSRUFLUE9JTlQsICJicmVha3BvaW50IiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhCUkVWLCBCUkVWLCAiYnJldiIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQlNULCBCU1QsICJic3QiKSwKKysgICAgTk9STUFMX01ORU1PTklDKENBQ0hFLCBDQUNIRSwgImNhY2hlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhDQVNUU19CLCBDQVNUU19CLCAiY2FzdHMuYiIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQ0FTVFNfSCwgQ0FTVFNfSCwgImNhc3RzLmgiKSwKKysgICAgTk9STUFMX01ORU1PTklDKENBU1RVX0IsIENBU1RVX0IsICJjYXN0dS5iIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhDQVNUVV9ILCBDQVNUVV9ILCAiY2FzdHUuaCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQ0JSLCBDQlIsICJjYnIiKSwKKysgICAgTk9STUFMX01ORU1PTklDKENMWiwgQ0xaLCAiY2x6IiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhDT00sIENPTSwgImNvbSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQ09QLCBDT1AsICJjb3AiKSwKKysgICAgTk9STUFMX01ORU1PTklDKENQX0IsIENQX0IsICJjcC5iIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhDUF9ILCBDUF9ILCAiY3AuaCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQ1BfVywgQ1BfVzEsICJjcC53IiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhDUCwgQ1BfVzEsICJjcCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQ1BDLCBDUEMxLCAiY3BjIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhDU1JGLCBDU1JGLCAiY3NyZiIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQ1NSRkNaLCBDU1JGQ1osICJjc3JmY3oiKSwKKysgICAgTk9STUFMX01ORU1PTklDKERJVlMsIERJVlMsICJkaXZzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhESVZVLCBESVZVLCAiZGl2dSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoRU9SLCBFT1IxLCAiZW9yIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhFT1JMLCBFT1JMLCAiZW9ybCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoRU9SSCwgRU9SSCwgImVvcmgiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEZSUywgRlJTLCAiZnJzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhJQ0FMTCwgSUNBTEwsICJpY2FsbCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoSU5DSk9TUCwgSU5DSk9TUCwgImluY2pvc3AiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX0QsIExEX0QxLCAibGQuZCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfU0IsIExEX1NCMiwgImxkLnNiIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9VQiwgTERfVUIxLCAibGQudWIiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1NILCBMRF9TSDEsICJsZC5zaCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfVUgsIExEX1VIMSwgImxkLnVoIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9XLCBMRF9XMSwgImxkLnciKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEQ19ELCBMRENfRDMsICJsZGMuZCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERDX1csIExEQ19XMywgImxkYy53IiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMREMwX0QsIExEQzBfRCwgImxkYzAuZCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERDMF9XLCBMREMwX1csICJsZGMwLnciKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEQ01fRCwgTERDTV9ELCAibGRjbS5kIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRENNX1csIExEQ01fVywgImxkY20udyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTEREUEMsIExERFBDLCAibGRkcGMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExERFNQLCBMRERTUCwgImxkZHNwIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRElOU19CLCBMRElOU19CLCAibGRpbnMuYiIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERJTlNfSCwgTERJTlNfSCwgImxkaW5zLmgiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExETSwgTERNLCAibGRtIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRE1UUywgTERNVFMsICJsZG10cyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERTV1BfU0gsIExEU1dQX1NILCAibGRzd3Auc2giKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEU1dQX1VILCBMRFNXUF9VSCwgImxkc3dwLnVoIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRFNXUF9XLCBMRFNXUF9XLCAibGRzd3AudyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTFNMLCBMU0wxLCAibHNsIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMU1IsIExTUjEsICJsc3IiKSwKKysgICAgTk9STUFMX01ORU1PTklDKE1BQywgTUFDLCAibWFjIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhNQUNISF9ELCBNQUNISF9ELCAibWFjaGguZCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTUFDSEhfVywgTUFDSEhfVywgIm1hY2hoLnciKSwKKysgICAgTk9STUFMX01ORU1PTklDKE1BQ1NfRCwgTUFDU19ELCAibWFjcy5kIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhNQUNTQVRISF9XLCBNQUNTQVRISF9XLCAibWFjc2F0aGgudyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTUFDVV9ELCBNQUNVRCwgIm1hY3UuZCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTUFDV0hfRCwgTUFDV0hfRCwgIm1hY3doLmQiKSwKKysgICAgTk9STUFMX01ORU1PTklDKE1BWCwgTUFYLCAibWF4IiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhNQ0FMTCwgTUNBTEwsICJtY2FsbCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTUZEUiwgTUZEUiwgIm1mZHIiKSwKKysgICAgTk9STUFMX01ORU1PTklDKE1GU1IsIE1GU1IsICJtZnNyIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhNSU4sIE1JTiwgIm1pbiIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTU9WLCBNT1YzLCAibW92IiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhNT1ZFUSwgTU9WRVExLCAibW92ZXEiKSwKKysgICAgTk9STUFMX01ORU1PTklDKE1PVk5FLCBNT1ZORTEsICJtb3ZuZSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTU9WQ0MsIE1PVkNDMSwgIm1vdmNjIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhNT1ZDUywgTU9WQ1MxLCAibW92Y3MiKSwKKysgICAgTk9STUFMX01ORU1PTklDKE1PVkdFLCBNT1ZHRTEsICJtb3ZnZSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTU9WTFQsIE1PVkxUMSwgIm1vdmx0IiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhNT1ZNSSwgTU9WTUkxLCAibW92bWkiKSwKKysgICAgTk9STUFMX01ORU1PTklDKE1PVlBMLCBNT1ZQTDEsICJtb3ZwbCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTU9WTFMsIE1PVkxTMSwgIm1vdmxzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhNT1ZHVCwgTU9WR1QxLCAibW92Z3QiKSwKKysgICAgTk9STUFMX01ORU1PTklDKE1PVkxFLCBNT1ZMRTEsICJtb3ZsZSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTU9WSEksIE1PVkhJMSwgIm1vdmhpIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhNT1ZWUywgTU9WVlMxLCAibW92dnMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKE1PVlZDLCBNT1ZWQzEsICJtb3Z2YyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTU9WUVMsIE1PVlFTMSwgIm1vdnFzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhNT1ZBTCwgTU9WQUwxLCAibW92YWwiKSwKKysgICAgTk9STUFMX01ORU1PTklDKE1PVkhTLCBNT1ZIUzEsICJtb3ZocyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTU9WTE8sIE1PVkxPMSwgIm1vdmxvIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhNVERSLCBNVERSLCAibXRkciIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTVRTUiwgTVRTUiwgIm10c3IiKSwKKysgICAgTk9STUFMX01ORU1PTklDKE1VTCwgTVVMMSwgIm11bCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTVVMSEhfVywgTVVMSEhfVywgIm11bGhoLnciKSwKKysgICAgTk9STUFMX01ORU1PTklDKE1VTE5ISF9XLCBNVUxOSEhfVywgIm11bG5oaC53IiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhNVUxOV0hfRCwgTVVMTldIX0QsICJtdWxud2guZCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTVVMU19ELCBNVUxTRCwgIm11bHMuZCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTVVMU0FUSEhfSCwgTVVMU0FUSEhfSCwgIm11bHNhdGhoLmgiKSwKKysgICAgTk9STUFMX01ORU1PTklDKE1VTFNBVEhIX1csIE1VTFNBVEhIX1csICJtdWxzYXRoaC53IiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhNVUxTQVRSTkRISF9ILCBNVUxTQVRSTkRISF9ILCAibXVsc2F0cm5kaGguaCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTVVMU0FUUk5EV0hfVywgTVVMU0FUUk5EV0hfVywgIm11bHNhdHJuZHdoLnciKSwKKysgICAgTk9STUFMX01ORU1PTklDKE1VTFNBVFdIX1csIE1VTFNBVFdIX1csICJtdWxzYXR3aC53IiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhNVUxVX0QsIE1VTFVfRCwgIm11bHUuZCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTVVMV0hfRCwgTVVMV0hfRCwgIm11bHdoLmQiKSwKKysgICAgTk9STUFMX01ORU1PTklDKE1VU0ZSLCBNVVNGUiwgIm11c2ZyIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhNVVNUUiwgTVVTVFIsICJtdXN0ciIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTVZDUl9ELCBNVkNSX0QsICJtdmNyLmQiKSwKKysgICAgTk9STUFMX01ORU1PTklDKE1WQ1JfVywgTVZDUl9XLCAibXZjci53IiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhNVlJDX0QsIE1WUkNfRCwgIm12cmMuZCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTVZSQ19XLCBNVlJDX1csICJtdnJjLnciKSwKKysgICAgTk9STUFMX01ORU1PTklDKE5FRywgTkVHLCAibmVnIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhOT1AsIE5PUCwgIm5vcCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoT1IsIE9SMSwgIm9yIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhPUkgsIE9SSCwgIm9yaCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoT1JMLCBPUkwsICJvcmwiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFBBQlNfU0IsIFBBQlNfU0IsICJwYWJzLnNiIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhQQUJTX1NILCBQQUJTX1NILCAicGFicy5zaCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUEFDS1NIX1NCLCBQQUNLU0hfU0IsICJwYWNrc2guc2IiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFBBQ0tTSF9VQiwgUEFDS1NIX1VCLCAicGFja3NoLnViIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhQQUNLV19TSCwgUEFDS1dfU0gsICJwYWNrdy5zaCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUEFERF9CLCBQQUREX0IsICJwYWRkLmIiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFBBRERfSCwgUEFERF9ILCAicGFkZC5oIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhQQURESF9TSCwgUEFEREhfU0gsICJwYWRkaC5zaCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUEFEREhfVUIsIFBBRERIX1VCLCAicGFkZGgudWIiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFBBRERTX1NCLCBQQUREU19TQiwgInBhZGRzLnNiIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhQQUREU19TSCwgUEFERFNfU0gsICJwYWRkcy5zaCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUEFERFNfVUIsIFBBRERTX1VCLCAicGFkZHMudWIiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFBBRERTX1VILCBQQUREU19VSCwgInBhZGRzLnVoIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhQQUREU1VCX0gsIFBBRERTVUJfSCwgInBhZGRzdWIuaCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUEFERFNVQkhfU0gsIFBBRERTVUJIX1NILCAicGFkZHN1Ymguc2giKSwKKysgICAgTk9STUFMX01ORU1PTklDKFBBRERTVUJTX1NILCBQQUREU1VCU19TSCwgInBhZGRzdWJzLnNoIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhQQUREU1VCU19VSCwgUEFERFNVQlNfVUgsICJwYWRkc3Vicy51aCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUEFERFhfSCwgUEFERFhfSCwgInBhZGR4LmgiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFBBRERYSF9TSCwgUEFERFhIX1NILCAicGFkZHhoLnNoIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhQQUREWFNfU0gsIFBBRERYU19TSCwgInBhZGR4cy5zaCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUEFERFhTX1VILCBQQUREWFNfVUgsICJwYWRkeHMudWgiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFBBU1JfQiwgUEFTUl9CLCAicGFzci5iIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhQQVNSX0gsIFBBU1JfSCwgInBhc3IuaCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUEFWR19TSCwgUEFWR19TSCwgInBhdmcuc2giKSwKKysgICAgTk9STUFMX01ORU1PTklDKFBBVkdfVUIsIFBBVkdfVUIsICJwYXZnLnViIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhQTFNMX0IsIFBMU0xfQiwgInBsc2wuYiIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUExTTF9ILCBQTFNMX0gsICJwbHNsLmgiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFBMU1JfQiwgUExTUl9CLCAicGxzci5iIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhQTFNSX0gsIFBMU1JfSCwgInBsc3IuaCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUE1BWF9TSCwgUE1BWF9TSCwgInBtYXguc2giKSwKKysgICAgTk9STUFMX01ORU1PTklDKFBNQVhfVUIsIFBNQVhfVUIsICJwbWF4LnViIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhQTUlOX1NILCBQTUlOX1NILCAicG1pbi5zaCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUE1JTl9VQiwgUE1JTl9VQiwgInBtaW4udWIiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFBPUEpDLCBQT1BKQywgInBvcGpjIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhQT1BNLCBQT1BNLCAicG9wbSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUFJFRiwgUFJFRiwgInByZWYiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFBTQUQsIFBTQUQsICJwc2FkIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhQU1VCX0IsIFBTVUJfQiwgInBzdWIuYiIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUFNVQl9ILCBQU1VCX0gsICJwc3ViLmgiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFBTVUJBRERfSCwgUFNVQkFERF9ILCAicHN1YmFkZC5oIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhQU1VCQURESF9TSCwgUFNVQkFEREhfU0gsICJwc3ViYWRkaC5zaCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUFNVQkFERFNfU0gsIFBTVUJBRERTX1NILCAicHN1YmFkZHMuc2giKSwKKysgICAgTk9STUFMX01ORU1PTklDKFBTVUJBRERTX1VILCBQU1VCQUREU19VSCwgInBzdWJhZGRzLnVoIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhQU1VCSF9TSCwgUFNVQkhfU0gsICJwc3ViaC5zaCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUFNVQkhfVUIsIFBTVUJIX1VCLCAicHN1YmgudWIiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFBTVUJTX1NCLCBQU1VCU19TQiwgInBzdWJzLnNiIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhQU1VCU19TSCwgUFNVQlNfU0gsICJwc3Vicy5zaCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUFNVQlNfVUIsIFBTVUJTX1VCLCAicHN1YnMudWIiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFBTVUJTX1VILCBQU1VCU19VSCwgInBzdWJzLnVoIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhQU1VCWF9ILCBQU1VCWF9ILCAicHN1YnguaCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUFNVQlhIX1NILCBQU1VCWEhfU0gsICJwc3VieGguc2giKSwKKysgICAgTk9STUFMX01ORU1PTklDKFBTVUJYU19TSCwgUFNVQlhTX1NILCAicHN1YnhzLnNoIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhQU1VCWFNfVUgsIFBTVUJYU19VSCwgInBzdWJ4cy51aCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUFVOUENLU0JfSCwgUFVOUENLU0JfSCwgInB1bnBja3NiLmgiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFBVTlBDS1VCX0gsIFBVTlBDS1VCX0gsICJwdW5wY2t1Yi5oIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhQVVNISkMsIFBVU0hKQywgInB1c2hqYyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUFVTSE0sIFBVU0hNLCAicHVzaG0iKSwKKysgICAgTk9STUFMX01ORU1PTklDKFJDQUxMLCBSQ0FMTDEsICJyY2FsbCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUkVURVEsIFJFVEVRLCAicmV0ZXEiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFJFVE5FLCBSRVRORSwgInJldG5lIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhSRVRDQywgUkVUQ0MsICJyZXRjYyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUkVUQ1MsIFJFVENTLCAicmV0Y3MiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFJFVEdFLCBSRVRHRSwgInJldGdlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhSRVRMVCwgUkVUTFQsICJyZXRsdCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUkVUTUksIFJFVE1JLCAicmV0bWkiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFJFVFBMLCBSRVRQTCwgInJldHBsIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhSRVRMUywgUkVUTFMsICJyZXRscyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUkVUR1QsIFJFVEdULCAicmV0Z3QiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFJFVExFLCBSRVRMRSwgInJldGxlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhSRVRISSwgUkVUSEksICJyZXRoaSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUkVUVlMsIFJFVFZTLCAicmV0dnMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFJFVFZDLCBSRVRWQywgInJldHZjIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhSRVRRUywgUkVUUVMsICJyZXRxcyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUkVUQUwsIFJFVEFMLCAicmV0YWwiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFJFVEhTLCBSRVRIUywgInJldGhzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhSRVRMTywgUkVUTE8sICJyZXRsbyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUkVULCBSRVRBTCwgInJldCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUkVURCwgUkVURCwgInJldGQiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFJFVEUsIFJFVEUsICJyZXRlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhSRVRKLCBSRVRKLCAicmV0aiIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUkVUUywgUkVUUywgInJldHMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFJKTVAsIFJKTVAsICJyam1wIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhST0wsIFJPTCwgInJvbCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUk9SLCBST1IsICJyb3IiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFJTVUIsIFJTVUIxLCAicnN1YiIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU0FUQUREX0gsIFNBVEFERF9ILCAic2F0YWRkLmgiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNBVEFERF9XLCBTQVRBRERfVywgInNhdGFkZC53IiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTQVRSTkRTLCBTQVRSTkRTLCAic2F0cm5kcyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU0FUUk5EVSwgU0FUUk5EVSwgInNhdHJuZHUiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNBVFMsIFNBVFMsICJzYXRzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTQVRTVUJfSCwgU0FUU1VCX0gsICJzYXRzdWIuaCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU0FUU1VCX1csIFNBVFNVQl9XMSwgInNhdHN1Yi53IiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTQVRVLCBTQVRVLCAic2F0dSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU0JDLCBTQkMsICJzYmMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNCUiwgU0JSLCAic2JyIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTQ0FMTCwgU0NBTEwsICJzY2FsbCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU0NSLCBTQ1IsICJzY3IiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNMRUVQLCBTTEVFUCwgInNsZWVwIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTUkVRLCBTUkVRLCAic3JlcSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1JORSwgU1JORSwgInNybmUiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNSQ0MsIFNSQ0MsICJzcmNjIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTUkNTLCBTUkNTLCAic3JjcyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1JHRSwgU1JHRSwgInNyZ2UiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNSTFQsIFNSTFQsICJzcmx0IiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTUk1JLCBTUk1JLCAic3JtaSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1JQTCwgU1JQTCwgInNycGwiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNSTFMsIFNSTFMsICJzcmxzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTUkdULCBTUkdULCAic3JndCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1JMRSwgU1JMRSwgInNybGUiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNSSEksIFNSSEksICJzcmhpIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTUlZTLCBTUlZTLCAic3J2cyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1JWQywgU1JWQywgInNydmMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNSUVMsIFNSUVMsICJzcnFzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTUkFMLCBTUkFMLCAic3JhbCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1JIUywgU1JIUywgInNyaHMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNSTE8sIFNSTE8sICJzcmxvIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTU1JGLCBTU1JGLCAic3NyZiIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1RfQiwgU1RfQjEsICJzdC5iIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVF9ELCBTVF9EMSwgInN0LmQiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNUX0gsIFNUX0gxLCAic3QuaCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1RfVywgU1RfVzEsICJzdC53IiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVENfRCwgU1RDX0QzLCAic3RjLmQiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNUQ19XLCBTVENfVzMsICJzdGMudyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1RDMF9ELCBTVEMwX0QsICJzdGMwLmQiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNUQzBfVywgU1RDMF9XLCAic3RjMC53IiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVENNX0QsIFNUQ01fRCwgInN0Y20uZCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1RDTV9XLCBTVENNX1csICJzdGNtLnciKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNUQ09ORCwgU1RDT05ELCAic3Rjb25kIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVERTUCwgU1REU1AsICJzdGRzcCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1RISF9XLCBTVEhIX1cyLCAic3RoaC53IiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVE0sIFNUTSwgInN0bSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1RNVFMsIFNUTVRTLCAic3RtdHMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNUU1dQX0gsIFNUU1dQX0gsICJzdHN3cC5oIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVFNXUF9XLCBTVFNXUF9XLCAic3Rzd3AudyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1VCLCBTVUIxLCAic3ViIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVUJFUSwgU1VCRVEsICJzdWJlcSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1VCTkUsIFNVQk5FLCAic3VibmUiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNVQkNDLCBTVUJDQywgInN1YmNjIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVUJDUywgU1VCQ1MsICJzdWJjcyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1VCR0UsIFNVQkdFLCAic3ViZ2UiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNVQkxULCBTVUJMVCwgInN1Ymx0IiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVUJNSSwgU1VCTUksICJzdWJtaSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1VCUEwsIFNVQlBMLCAic3VicGwiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNVQkxTLCBTVUJMUywgInN1YmxzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVUJHVCwgU1VCR1QsICJzdWJndCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1VCTEUsIFNVQkxFLCAic3VibGUiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNVQkhJLCBTVUJISSwgInN1YmhpIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVUJWUywgU1VCVlMsICJzdWJ2cyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1VCVkMsIFNVQlZDLCAic3VidmMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNVQlFTLCBTVUJRUywgInN1YnFzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVUJBTCwgU1VCQUwsICJzdWJhbCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1VCSFMsIFNVQkhTLCAic3ViaHMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNVQkxPLCBTVUJMTywgInN1YmxvIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVUJGRVEsIFNVQkZFUSwgInN1YmZlcSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1VCRk5FLCBTVUJGTkUsICJzdWJmbmUiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNVQkZDQywgU1VCRkNDLCAic3ViZmNjIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVUJGQ1MsIFNVQkZDUywgInN1YmZjcyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1VCRkdFLCBTVUJGR0UsICJzdWJmZ2UiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNVQkZMVCwgU1VCRkxULCAic3ViZmx0IiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVUJGTUksIFNVQkZNSSwgInN1YmZtaSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1VCRlBMLCBTVUJGUEwsICJzdWJmcGwiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNVQkZMUywgU1VCRkxTLCAic3ViZmxzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVUJGR1QsIFNVQkZHVCwgInN1YmZndCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1VCRkxFLCBTVUJGTEUsICJzdWJmbGUiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNVQkZISSwgU1VCRkhJLCAic3ViZmhpIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVUJGVlMsIFNVQkZWUywgInN1YmZ2cyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1VCRlZDLCBTVUJGVkMsICJzdWJmdmMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNVQkZRUywgU1VCRlFTLCAic3ViZnFzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVUJGQUwsIFNVQkZBTCwgInN1YmZhbCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1VCRkhTLCBTVUJGSFMsICJzdWJmaHMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNVQkZMTywgU1VCRkxPLCAic3ViZmxvIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVUJISF9XLCBTVUJISF9XLCAic3ViaGgudyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1dBUF9CLCBTV0FQX0IsICJzd2FwLmIiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNXQVBfQkgsIFNXQVBfQkgsICJzd2FwLmJoIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTV0FQX0gsIFNXQVBfSCwgInN3YXAuaCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1lOQywgU1lOQywgInN5bmMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFRMQlIsIFRMQlIsICJ0bGJyIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhUTEJTLCBUTEJTLCAidGxicyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoVExCVywgVExCVywgInRsYnciKSwKKysgICAgTk9STUFMX01ORU1PTklDKFROQlosIFROQlosICJ0bmJ6IiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhUU1QsIFRTVCwgInRzdCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoWENIRywgWENIRywgInhjaGciKSwKKysgICAgTk9STUFMX01ORU1PTklDKE1FTUMsIE1FTUMsICJtZW1jIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhNRU1TLCBNRU1TLCAibWVtcyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTUVNVCwgTUVNVCwgIm1lbXQiKSwKKysgICAgRlBfTU5FTU9OSUMoRkFERCwgRkFERCwgImZhZGQiKSwKKysgICAgRlBfTU5FTU9OSUMoRlNVQiwgRlNVQiwgImZzdWIiKSwKKysgICAgRlBfTU5FTU9OSUMoRk1BQywgRk1BQywgImZtYWMiKSwKKysgICAgRlBfTU5FTU9OSUMoRk5NQUMsIEZOTUFDLCAiZm5tYWMiKSwKKysgICAgRlBfTU5FTU9OSUMoRk1TQywgRk1TQywgImZtc2MiKSwKKysgICAgRlBfTU5FTU9OSUMoRk5NU0MsIEZOTVNDLCAiZm5tc2MiKSwKKysgICAgRlBfTU5FTU9OSUMoRk1VTCwgRk1VTCwgImZtdWwiKSwKKysgICAgRlBfTU5FTU9OSUMoRk5NVUwsIEZOTVVMLCAiZm5tdWwiKSwKKysgICAgRlBfTU5FTU9OSUMoRk5FRywgRk5FRywgImZuZWciKSwKKysgICAgRlBfTU5FTU9OSUMoRkFCUywgRkFCUywgImZhYnMiKSwKKysgICAgRlBfTU5FTU9OSUMoRkNNUCwgRkNNUCwgImZjbXAiKSwKKysgICAgRlBfTU5FTU9OSUMoRk1PViwgRk1PVjEsICJmbW92IiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhGQ0FTVFNfRCwgRkNBU1RTX0QsICJmY2FzdHMuZCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoRkNBU1REX1MsIEZDQVNURF9TLCAiZmNhc3RkLnMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEQV9XLCBMREFfVywgImxkYS53IiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhDQUxMLCBDQUxMLCAiY2FsbCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUElDT1NWTUFDLCBQSUNPU1ZNQUMwLCAicGljb3N2bWFjIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhQSUNPU1ZNVUwsIFBJQ09TVk1VTDAsICJwaWNvc3ZtdWwiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFBJQ09WTUFDLCBQSUNPVk1BQzAsICJwaWNvdm1hYyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUElDT1ZNVUwsIFBJQ09WTVVMMCwgInBpY292bXVsIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhQSUNPTERfRCwgUElDT0xEX0QyLCAicGljb2xkLmQiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFBJQ09MRF9XLCBQSUNPTERfVzIsICJwaWNvbGQudyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUElDT0xETV9ELCBQSUNPTERNX0QsICJwaWNvbGRtLmQiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFBJQ09MRE1fVywgUElDT0xETV9XLCAicGljb2xkbS53IiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhQSUNPTVZfRCwgUElDT01WX0QxLCAicGljb212LmQiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFBJQ09NVl9XLCBQSUNPTVZfVzEsICJwaWNvbXYudyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUElDT1NUX0QsIFBJQ09TVF9EMiwgInBpY29zdC5kIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhQSUNPU1RfVywgUElDT1NUX1cyLCAicGljb3N0LnciKSwKKysgICAgTk9STUFMX01ORU1PTklDKFBJQ09TVE1fRCwgUElDT1NUTV9ELCAicGljb3N0bS5kIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhQSUNPU1RNX1csIFBJQ09TVE1fVywgInBpY29zdG0udyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUlNVQkVRLCBSU1VCRVEsICJyc3ViZXEiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFJTVUJORSwgUlNVQk5FLCAicnN1Ym5lIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhSU1VCQ0MsIFJTVUJDQywgInJzdWJjYyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUlNVQkNTLCBSU1VCQ1MsICJyc3ViY3MiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFJTVUJHRSwgUlNVQkdFLCAicnN1YmdlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhSU1VCTFQsIFJTVUJMVCwgInJzdWJsdCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUlNVQk1JLCBSU1VCTUksICJyc3VibWkiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFJTVUJQTCwgUlNVQlBMLCAicnN1YnBsIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhSU1VCTFMsIFJTVUJMUywgInJzdWJscyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUlNVQkdULCBSU1VCR1QsICJyc3ViZ3QiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFJTVUJMRSwgUlNVQkxFLCAicnN1YmxlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhSU1VCSEksIFJTVUJISSwgInJzdWJoaSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUlNVQlZTLCBSU1VCVlMsICJyc3VidnMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFJTVUJWQywgUlNVQlZDLCAicnN1YnZjIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhSU1VCUVMsIFJTVUJRUywgInJzdWJxcyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoUlNVQkFMLCBSU1VCQUwsICJyc3ViYWwiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFJTVUJIUywgUlNVQkhTLCAicnN1YmhzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhSU1VCTE8sIFJTVUJMTywgInJzdWJsbyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQURERVEsIEFEREVRLCAiYWRkZXEiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEFERE5FLCBBRERORSwgImFkZG5lIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhBRERDQywgQUREQ0MsICJhZGRjYyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQUREQ1MsIEFERENTLCAiYWRkY3MiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEFEREdFLCBBRERHRSwgImFkZGdlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhBRERMVCwgQURETFQsICJhZGRsdCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQURETUksIEFERE1JLCAiYWRkbWkiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEFERFBMLCBBRERQTCwgImFkZHBsIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhBRERMUywgQURETFMsICJhZGRscyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQURER1QsIEFEREdULCAiYWRkZ3QiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEFERExFLCBBRERMRSwgImFkZGxlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhBRERISSwgQURESEksICJhZGRoaSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQUREVlMsIEFERFZTLCAiYWRkdnMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEFERFZDLCBBRERWQywgImFkZHZjIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhBRERRUywgQUREUVMsICJhZGRxcyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQUREQUwsIEFEREFMLCAiYWRkYWwiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEFEREhTLCBBRERIUywgImFkZGhzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhBRERMTywgQURETE8sICJhZGRsbyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQU5ERVEsIEFOREVRLCAiYW5kZXEiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEFORE5FLCBBTkRORSwgImFuZG5lIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhBTkRDQywgQU5EQ0MsICJhbmRjYyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQU5EQ1MsIEFORENTLCAiYW5kY3MiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEFOREdFLCBBTkRHRSwgImFuZGdlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhBTkRMVCwgQU5ETFQsICJhbmRsdCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQU5ETUksIEFORE1JLCAiYW5kbWkiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEFORFBMLCBBTkRQTCwgImFuZHBsIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhBTkRMUywgQU5ETFMsICJhbmRscyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQU5ER1QsIEFOREdULCAiYW5kZ3QiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEFORExFLCBBTkRMRSwgImFuZGxlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhBTkRISSwgQU5ESEksICJhbmRoaSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQU5EVlMsIEFORFZTLCAiYW5kdnMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEFORFZDLCBBTkRWQywgImFuZHZjIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhBTkRRUywgQU5EUVMsICJhbmRxcyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoQU5EQUwsIEFOREFMLCAiYW5kYWwiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEFOREhTLCBBTkRIUywgImFuZGhzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhBTkRMTywgQU5ETE8sICJhbmRsbyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoT1JFUSwgT1JFUSwgIm9yZXEiKSwKKysgICAgTk9STUFMX01ORU1PTklDKE9STkUsIE9STkUsICJvcm5lIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhPUkNDLCBPUkNDLCAib3JjYyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoT1JDUywgT1JDUywgIm9yY3MiKSwKKysgICAgTk9STUFMX01ORU1PTklDKE9SR0UsIE9SR0UsICJvcmdlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhPUkxULCBPUkxULCAib3JsdCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoT1JNSSwgT1JNSSwgIm9ybWkiKSwKKysgICAgTk9STUFMX01ORU1PTklDKE9SUEwsIE9SUEwsICJvcnBsIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhPUkxTLCBPUkxTLCAib3JscyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoT1JHVCwgT1JHVCwgIm9yZ3QiKSwKKysgICAgTk9STUFMX01ORU1PTklDKE9STEUsIE9STEUsICJvcmxlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhPUkhJLCBPUkhJLCAib3JoaSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoT1JWUywgT1JWUywgIm9ydnMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKE9SVkMsIE9SVkMsICJvcnZjIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhPUlFTLCBPUlFTLCAib3JxcyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoT1JBTCwgT1JBTCwgIm9yYWwiKSwKKysgICAgTk9STUFMX01ORU1PTklDKE9SSFMsIE9SSFMsICJvcmhzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhPUkxPLCBPUkxPLCAib3JsbyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoRU9SRVEsIEVPUkVRLCAiZW9yZXEiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEVPUk5FLCBFT1JORSwgImVvcm5lIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhFT1JDQywgRU9SQ0MsICJlb3JjYyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoRU9SQ1MsIEVPUkNTLCAiZW9yY3MiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEVPUkdFLCBFT1JHRSwgImVvcmdlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhFT1JMVCwgRU9STFQsICJlb3JsdCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoRU9STUksIEVPUk1JLCAiZW9ybWkiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEVPUlBMLCBFT1JQTCwgImVvcnBsIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhFT1JMUywgRU9STFMsICJlb3JscyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoRU9SR1QsIEVPUkdULCAiZW9yZ3QiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEVPUkxFLCBFT1JMRSwgImVvcmxlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhFT1JISSwgRU9SSEksICJlb3JoaSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoRU9SVlMsIEVPUlZTLCAiZW9ydnMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEVPUlZDLCBFT1JWQywgImVvcnZjIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhFT1JRUywgRU9SUVMsICJlb3JxcyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoRU9SQUwsIEVPUkFMLCAiZW9yYWwiKSwKKysgICAgTk9STUFMX01ORU1PTklDKEVPUkhTLCBFT1JIUywgImVvcmhzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhFT1JMTywgRU9STE8sICJlb3JsbyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfV0VRLCBMRF9XRVEsICJsZC53ZXEiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1dORSwgTERfV05FLCAibGQud25lIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9XQ0MsIExEX1dDQywgImxkLndjYyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfV0NTLCBMRF9XQ1MsICJsZC53Y3MiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1dHRSwgTERfV0dFLCAibGQud2dlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9XTFQsIExEX1dMVCwgImxkLndsdCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfV01JLCBMRF9XTUksICJsZC53bWkiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1dQTCwgTERfV1BMLCAibGQud3BsIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9XTFMsIExEX1dMUywgImxkLndscyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfV0dULCBMRF9XR1QsICJsZC53Z3QiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1dMRSwgTERfV0xFLCAibGQud2xlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9XSEksIExEX1dISSwgImxkLndoaSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfV1ZTLCBMRF9XVlMsICJsZC53dnMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1dWQywgTERfV1ZDLCAibGQud3ZjIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9XUVMsIExEX1dRUywgImxkLndxcyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfV0FMLCBMRF9XQUwsICJsZC53YWwiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1dIUywgTERfV0hTLCAibGQud2hzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9XTE8sIExEX1dMTywgImxkLndsbyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfU0hFUSwgTERfU0hFUSwgImxkLnNoZXEiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1NITkUsIExEX1NITkUsICJsZC5zaG5lIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9TSENDLCBMRF9TSENDLCAibGQuc2hjYyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfU0hDUywgTERfU0hDUywgImxkLnNoY3MiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1NIR0UsIExEX1NIR0UsICJsZC5zaGdlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9TSExULCBMRF9TSExULCAibGQuc2hsdCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfU0hNSSwgTERfU0hNSSwgImxkLnNobWkiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1NIUEwsIExEX1NIUEwsICJsZC5zaHBsIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9TSExTLCBMRF9TSExTLCAibGQuc2hscyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfU0hHVCwgTERfU0hHVCwgImxkLnNoZ3QiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1NITEUsIExEX1NITEUsICJsZC5zaGxlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9TSEhJLCBMRF9TSEhJLCAibGQuc2hoaSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfU0hWUywgTERfU0hWUywgImxkLnNodnMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1NIVkMsIExEX1NIVkMsICJsZC5zaHZjIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9TSFFTLCBMRF9TSFFTLCAibGQuc2hxcyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfU0hBTCwgTERfU0hBTCwgImxkLnNoYWwiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1NISFMsIExEX1NISFMsICJsZC5zaGhzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9TSExPLCBMRF9TSExPLCAibGQuc2hsbyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfVUhFUSwgTERfVUhFUSwgImxkLnVoZXEiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1VITkUsIExEX1VITkUsICJsZC51aG5lIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9VSENDLCBMRF9VSENDLCAibGQudWhjYyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfVUhDUywgTERfVUhDUywgImxkLnVoY3MiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1VIR0UsIExEX1VIR0UsICJsZC51aGdlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9VSExULCBMRF9VSExULCAibGQudWhsdCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfVUhNSSwgTERfVUhNSSwgImxkLnVobWkiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1VIUEwsIExEX1VIUEwsICJsZC51aHBsIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9VSExTLCBMRF9VSExTLCAibGQudWhscyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfVUhHVCwgTERfVUhHVCwgImxkLnVoZ3QiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1VITEUsIExEX1VITEUsICJsZC51aGxlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9VSEhJLCBMRF9VSEhJLCAibGQudWhoaSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfVUhWUywgTERfVUhWUywgImxkLnVodnMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1VIVkMsIExEX1VIVkMsICJsZC51aHZjIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9VSFFTLCBMRF9VSFFTLCAibGQudWhxcyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfVUhBTCwgTERfVUhBTCwgImxkLnVoYWwiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1VISFMsIExEX1VISFMsICJsZC51aGhzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9VSExPLCBMRF9VSExPLCAibGQudWhsbyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfU0JFUSwgTERfU0JFUSwgImxkLnNiZXEiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1NCTkUsIExEX1NCTkUsICJsZC5zYm5lIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9TQkNDLCBMRF9TQkNDLCAibGQuc2JjYyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfU0JDUywgTERfU0JDUywgImxkLnNiY3MiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1NCR0UsIExEX1NCR0UsICJsZC5zYmdlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9TQkxULCBMRF9TQkxULCAibGQuc2JsdCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfU0JNSSwgTERfU0JNSSwgImxkLnNibWkiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1NCUEwsIExEX1NCUEwsICJsZC5zYnBsIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9TQkxTLCBMRF9TQkxTLCAibGQuc2JscyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfU0JHVCwgTERfU0JHVCwgImxkLnNiZ3QiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1NCTEUsIExEX1NCTEUsICJsZC5zYmxlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9TQkhJLCBMRF9TQkhJLCAibGQuc2JoaSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfU0JWUywgTERfU0JWUywgImxkLnNidnMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1NCVkMsIExEX1NCVkMsICJsZC5zYnZjIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9TQlFTLCBMRF9TQlFTLCAibGQuc2JxcyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfU0JBTCwgTERfU0JBTCwgImxkLnNiYWwiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1NCSFMsIExEX1NCSFMsICJsZC5zYmhzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9TQkxPLCBMRF9TQkxPLCAibGQuc2JsbyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfVUJFUSwgTERfVUJFUSwgImxkLnViZXEiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1VCTkUsIExEX1VCTkUsICJsZC51Ym5lIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9VQkNDLCBMRF9VQkNDLCAibGQudWJjYyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfVUJDUywgTERfVUJDUywgImxkLnViY3MiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1VCR0UsIExEX1VCR0UsICJsZC51YmdlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9VQkxULCBMRF9VQkxULCAibGQudWJsdCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfVUJNSSwgTERfVUJNSSwgImxkLnVibWkiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1VCUEwsIExEX1VCUEwsICJsZC51YnBsIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9VQkxTLCBMRF9VQkxTLCAibGQudWJscyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfVUJHVCwgTERfVUJHVCwgImxkLnViZ3QiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1VCTEUsIExEX1VCTEUsICJsZC51YmxlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9VQkhJLCBMRF9VQkhJLCAibGQudWJoaSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfVUJWUywgTERfVUJWUywgImxkLnVidnMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1VCVkMsIExEX1VCVkMsICJsZC51YnZjIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9VQlFTLCBMRF9VQlFTLCAibGQudWJxcyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTERfVUJBTCwgTERfVUJBTCwgImxkLnViYWwiKSwKKysgICAgTk9STUFMX01ORU1PTklDKExEX1VCSFMsIExEX1VCSFMsICJsZC51YmhzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhMRF9VQkxPLCBMRF9VQkxPLCAibGQudWJsbyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1RfV0VRLCBTVF9XRVEsICJzdC53ZXEiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNUX1dORSwgU1RfV05FLCAic3Qud25lIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVF9XQ0MsIFNUX1dDQywgInN0LndjYyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1RfV0NTLCBTVF9XQ1MsICJzdC53Y3MiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNUX1dHRSwgU1RfV0dFLCAic3Qud2dlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVF9XTFQsIFNUX1dMVCwgInN0LndsdCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1RfV01JLCBTVF9XTUksICJzdC53bWkiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNUX1dQTCwgU1RfV1BMLCAic3Qud3BsIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVF9XTFMsIFNUX1dMUywgInN0LndscyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1RfV0dULCBTVF9XR1QsICJzdC53Z3QiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNUX1dMRSwgU1RfV0xFLCAic3Qud2xlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVF9XSEksIFNUX1dISSwgInN0LndoaSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1RfV1ZTLCBTVF9XVlMsICJzdC53dnMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNUX1dWQywgU1RfV1ZDLCAic3Qud3ZjIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVF9XUVMsIFNUX1dRUywgInN0LndxcyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1RfV0FMLCBTVF9XQUwsICJzdC53YWwiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNUX1dIUywgU1RfV0hTLCAic3Qud2hzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVF9XTE8sIFNUX1dMTywgInN0LndsbyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1RfSEVRLCBTVF9IRVEsICJzdC5oZXEiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNUX0hORSwgU1RfSE5FLCAic3QuaG5lIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVF9IQ0MsIFNUX0hDQywgInN0LmhjYyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1RfSENTLCBTVF9IQ1MsICJzdC5oY3MiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNUX0hHRSwgU1RfSEdFLCAic3QuaGdlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVF9ITFQsIFNUX0hMVCwgInN0LmhsdCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1RfSE1JLCBTVF9ITUksICJzdC5obWkiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNUX0hQTCwgU1RfSFBMLCAic3QuaHBsIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVF9ITFMsIFNUX0hMUywgInN0LmhscyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1RfSEdULCBTVF9IR1QsICJzdC5oZ3QiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNUX0hMRSwgU1RfSExFLCAic3QuaGxlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVF9ISEksIFNUX0hISSwgInN0LmhoaSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1RfSFZTLCBTVF9IVlMsICJzdC5odnMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNUX0hWQywgU1RfSFZDLCAic3QuaHZjIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVF9IUVMsIFNUX0hRUywgInN0LmhxcyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1RfSEFMLCBTVF9IQUwsICJzdC5oYWwiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNUX0hIUywgU1RfSEhTLCAic3QuaGhzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVF9ITE8sIFNUX0hMTywgInN0LmhsbyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1RfQkVRLCBTVF9CRVEsICJzdC5iZXEiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNUX0JORSwgU1RfQk5FLCAic3QuYm5lIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVF9CQ0MsIFNUX0JDQywgInN0LmJjYyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1RfQkNTLCBTVF9CQ1MsICJzdC5iY3MiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNUX0JHRSwgU1RfQkdFLCAic3QuYmdlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVF9CTFQsIFNUX0JMVCwgInN0LmJsdCIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1RfQk1JLCBTVF9CTUksICJzdC5ibWkiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNUX0JQTCwgU1RfQlBMLCAic3QuYnBsIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVF9CTFMsIFNUX0JMUywgInN0LmJscyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1RfQkdULCBTVF9CR1QsICJzdC5iZ3QiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNUX0JMRSwgU1RfQkxFLCAic3QuYmxlIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVF9CSEksIFNUX0JISSwgInN0LmJoaSIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1RfQlZTLCBTVF9CVlMsICJzdC5idnMiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNUX0JWQywgU1RfQlZDLCAic3QuYnZjIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVF9CUVMsIFNUX0JRUywgInN0LmJxcyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoU1RfQkFMLCBTVF9CQUwsICJzdC5iYWwiKSwKKysgICAgTk9STUFMX01ORU1PTklDKFNUX0JIUywgU1RfQkhTLCAic3QuYmhzIiksCisrICAgIE5PUk1BTF9NTkVNT05JQyhTVF9CTE8sIFNUX0JMTywgInN0LmJsbyIpLAorKyAgICBOT1JNQUxfTU5FTU9OSUMoTU9WSCwgTU9WSCwgIm1vdmgiKSwKKysKKysgIH07CisrI3VuZGVmIE5PUk1BTF9NTkVNT05JQworKyN1bmRlZiBBTElBU19NTkVNT05JQworKyN1bmRlZiBGUF9NTkVNT05JQworLS0tIC9kZXYvbnVsbAorKysrIGIvb3Bjb2Rlcy9hdnIzMi1vcGMuaAorQEAgLTAsMCArMSwyMzcwIEBACisrLyogT3Bjb2RlIHRhYmxlcyBmb3IgQVZSMzIuCisrICAgQ29weXJpZ2h0IDIwMDUsIDIwMDYgQXRtZWwgQ29ycG9yYXRpb24uCisrCisrICAgV3JpdHRlbiBieSBIYWF2YXJkIFNraW5uZW1vZW4sIEF0bWVsIE5vcndheSwgPGhza2lubmVtb2VuQGF0bWVsLmNvbT4KKysKKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJvcGNvZGVzLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorKyAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysKKysjaW5jbHVkZSAiYmZkLmgiCisrCisrI2RlZmluZSBBVlIzMl9NQVhfT1BFUkFORFMJOAorKyNkZWZpbmUgQVZSMzJfTUFYX0ZJRUxEUwk4CisrCisrI2RlZmluZSBBVlIzMl9WMQkgICAgICAgICgxIDw8IDEpCisrI2RlZmluZSBBVlIzMl9TSU1ECQkoMSA8PCAyKQorKyNkZWZpbmUgQVZSMzJfRFNQCQkoMSA8PCAzKQorKyNkZWZpbmUgQVZSMzJfUk1XCQkoMSA8PCA0KQorKyNkZWZpbmUgQVZSMzJfVjIJICAgICAgICAoMSA8PCA1KQorKyNkZWZpbmUgQVZSMzJfRlAJCSgxIDw8IDE2KQorKyNkZWZpbmUgQVZSMzJfUElDTwkJKDEgPDwgMTcpCisrCisrLyogUmVnaXN0ZXJzIHdlIGNvbW1vbmx5IHJlZmVyIHRvICovCisrI2RlZmluZSBBVlIzMl9SRUdfUjEyCQkxMgorKyNkZWZpbmUgQVZSMzJfUkVHX1NQCQkxMworKyNkZWZpbmUgQVZSMzJfUkVHX0xSCQkxNAorKyNkZWZpbmUgQVZSMzJfUkVHX1BDCQkxNQorKworK3N0cnVjdCBhdnIzMl9pZmllbGQKKyt7CisrICBpbnQgaWQ7CisrICB1bnNpZ25lZCBzaG9ydCBiaXRzaXplOworKyAgdW5zaWduZWQgc2hvcnQgc2hpZnQ7CisrICB1bnNpZ25lZCBsb25nIG1hc2s7CisrCisrICAvKiBJZiB0aGUgdmFsdWUgZG9lc24ndCBmaXQsIGl0IHdpbGwgYmUgdHJ1bmNhdGVkIHdpdGggbm8gd2FybmluZyAqLworKyAgdm9pZCAoKmluc2VydCkoY29uc3Qgc3RydWN0IGF2cjMyX2lmaWVsZCAqLCB2b2lkICosIHVuc2lnbmVkIGxvbmcpOworKyAgdm9pZCAoKmV4dHJhY3QpKGNvbnN0IHN0cnVjdCBhdnIzMl9pZmllbGQgKiwgdm9pZCAqLCB1bnNpZ25lZCBsb25nICopOworK307CisrCisrc3RydWN0IGF2cjMyX29wY29kZQorK3sKKysgIGludCBpZDsKKysgIGludCBzaXplOworKyAgdW5zaWduZWQgbG9uZyB2YWx1ZTsKKysgIHVuc2lnbmVkIGxvbmcgbWFzazsKKysgIGNvbnN0IHN0cnVjdCBhdnIzMl9zeW50YXggKnN5bnRheDsKKysgIGJmZF9yZWxvY19jb2RlX3JlYWxfdHlwZSByZWxvY190eXBlOworKyAgdW5zaWduZWQgaW50IG5yX2ZpZWxkczsKKysgIC8qIGlmIHJlbGF4YWJsZSwgd2hpY2ggZmllbGQgaXMgdmFyaWFibGUsIG90aGVyd2lzZSAtMSAqLworKyAgaW50IHZhcl9maWVsZDsKKysgIGNvbnN0IHN0cnVjdCBhdnIzMl9pZmllbGQgKmZpZWxkc1tBVlIzMl9NQVhfRklFTERTXTsKKyt9OworKworK3N0cnVjdCBhdnIzMl9hbGlhcworK3sKKysgIGludCBpZDsKKysgIGNvbnN0IHN0cnVjdCBhdnIzMl9vcGNvZGUgKm9wYzsKKysgIHN0cnVjdCB7CisrICAgIGludCBpc19vcGluZGV4OworKyAgICB1bnNpZ25lZCBsb25nIHZhbHVlOworKyAgfSBvcGVyYW5kX21hcFtBVlIzMl9NQVhfT1BFUkFORFNdOworK307CisrCisrc3RydWN0IGF2cjMyX3N5bnRheAorK3sKKysgIGludCBpZDsKKysgIHVuc2lnbmVkIGxvbmcgaXNhX2ZsYWdzOworKyAgY29uc3Qgc3RydWN0IGF2cjMyX21uZW1vbmljICptbmVtb25pYzsKKysgIGludCB0eXBlOworKyAgdW5pb24geworKyAgICBjb25zdCBzdHJ1Y3QgYXZyMzJfb3Bjb2RlICpvcGM7CisrICAgIGNvbnN0IHN0cnVjdCBhdnIzMl9hbGlhcyAqYWxpYXM7CisrICB9IHU7CisrICBjb25zdCBzdHJ1Y3QgYXZyMzJfc3ludGF4ICpuZXh0OworKyAgLyogbmVnYXRpdmUgbWVhbnMgInZhcmFyZyIgKi8KKysgIGludCBucl9vcGVyYW5kczsKKysgIGludCBvcGVyYW5kW0FWUjMyX01BWF9PUEVSQU5EU107CisrfTsKKysKKysjaWYgMAorKyNkZWZpbmUgQVZSMzJfQUxJQVNfTUFLRV9DT05TVCh2YWwpICgodmFsKSB8IDB4ODAwMDAwMDBVTCkKKysjZGVmaW5lIEFWUjMyX0FMSUFTX0lTX0NPTlNUKG1hcHZhbCkgKCgobWFwdmFsKSAmIDB4ODAwMDAwMDBVTCkgIT0gMCkKKysjZGVmaW5lIEFWUjMyX0FMSUFTX0dFVF9DT05TVChtYXB2YWwpICgobWFwdmFsKSAmIH4weDgwMDAwMDAwVUwpCisrI2VuZGlmCisrCisrc3RydWN0IGF2cjMyX21uZW1vbmljCisreworKyAgaW50IGlkOworKyAgY29uc3QgY2hhciAqbmFtZTsKKysgIGNvbnN0IHN0cnVjdCBhdnIzMl9zeW50YXggKnN5bnRheDsKKyt9OworKworK2V4dGVybiBjb25zdCBzdHJ1Y3QgYXZyMzJfaWZpZWxkIGF2cjMyX2lmaWVsZF90YWJsZVtdOworK2V4dGVybiBzdHJ1Y3QgYXZyMzJfb3Bjb2RlIGF2cjMyX29wY190YWJsZVtdOworK2V4dGVybiBjb25zdCBzdHJ1Y3QgYXZyMzJfc3ludGF4IGF2cjMyX3N5bnRheF90YWJsZVtdOworK2V4dGVybiBjb25zdCBzdHJ1Y3QgYXZyMzJfYWxpYXMgYXZyMzJfYWxpYXNfdGFibGVbXTsKKytleHRlcm4gY29uc3Qgc3RydWN0IGF2cjMyX21uZW1vbmljIGF2cjMyX21uZW1vbmljX3RhYmxlW107CisrCisrZXh0ZXJuIHZvaWQgYXZyMzJfaW5zZXJ0X3NpbXBsZShjb25zdCBzdHJ1Y3QgYXZyMzJfaWZpZWxkICpmaWVsZCwKKysJCQkJdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIHZhbHVlKTsKKytleHRlcm4gdm9pZCBhdnIzMl9pbnNlcnRfYml0NWMoY29uc3Qgc3RydWN0IGF2cjMyX2lmaWVsZCAqZmllbGQsCisrCQkJICAgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyB2YWx1ZSk7CisrZXh0ZXJuIHZvaWQgYXZyMzJfaW5zZXJ0X2sxMChjb25zdCBzdHJ1Y3QgYXZyMzJfaWZpZWxkICpmaWVsZCwKKysJCQkgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyB2YWx1ZSk7CisrZXh0ZXJuIHZvaWQgYXZyMzJfaW5zZXJ0X2syMShjb25zdCBzdHJ1Y3QgYXZyMzJfaWZpZWxkICpmaWVsZCwKKysJCQkgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyB2YWx1ZSk7CisrZXh0ZXJuIHZvaWQgYXZyMzJfaW5zZXJ0X2Nwb3AoY29uc3Qgc3RydWN0IGF2cjMyX2lmaWVsZCAqZmllbGQsCisrCQkJICAgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIHZhbHVlKTsKKytleHRlcm4gdm9pZCBhdnIzMl9pbnNlcnRfazEyY3AoY29uc3Qgc3RydWN0IGF2cjMyX2lmaWVsZCAqZmllbGQsCisrCQkJICAgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyB2YWx1ZSk7CisrCisrZXh0ZXJuIHZvaWQgYXZyMzJfZXh0cmFjdF9zaW1wbGUoY29uc3Qgc3RydWN0IGF2cjMyX2lmaWVsZCAqZmllbGQsCisrCQkJCSB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgKnZhbHVlKTsKKytleHRlcm4gdm9pZCBhdnIzMl9leHRyYWN0X2JpdDVjKGNvbnN0IHN0cnVjdCBhdnIzMl9pZmllbGQgKmZpZWxkLAorKwkJCQl2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgKnZhbHVlKTsKKytleHRlcm4gdm9pZCBhdnIzMl9leHRyYWN0X2sxMChjb25zdCBzdHJ1Y3QgYXZyMzJfaWZpZWxkICpmaWVsZCwKKysJCQkgICAgICB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgKnZhbHVlKTsKKytleHRlcm4gdm9pZCBhdnIzMl9leHRyYWN0X2syMShjb25zdCBzdHJ1Y3QgYXZyMzJfaWZpZWxkICpmaWVsZCwKKysJCQkgICAgICB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgKnZhbHVlKTsKKytleHRlcm4gdm9pZCBhdnIzMl9leHRyYWN0X2Nwb3AoY29uc3Qgc3RydWN0IGF2cjMyX2lmaWVsZCAqZmllbGQsCisrCQkJICAgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyAqdmFsdWUpOworK2V4dGVybiB2b2lkIGF2cjMyX2V4dHJhY3RfazEyY3AoY29uc3Qgc3RydWN0IGF2cjMyX2lmaWVsZCAqZmllbGQsCisrCQkJCXZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyAqdmFsdWUpOworKworK2VudW0gYXZyMzJfb3BlcmFuZF90eXBlCisreworKyAgQVZSMzJfT1BFUkFORF9JTlRSRUcsCQkvKiBqdXN0IGEgcmVnaXN0ZXIgKi8KKysgIEFWUjMyX09QRVJBTkRfSU5UUkVHX1BSRURFQywJLyogcmVnaXN0ZXIgd2l0aCBwcmUtZGVjcmVtZW50ICovCisrICBBVlIzMl9PUEVSQU5EX0lOVFJFR19QT1NUSU5DLAkvKiByZWdpc3RlciB3aXRoIHBvc3QtaW5jcmVtZW50ICovCisrICBBVlIzMl9PUEVSQU5EX0lOVFJFR19MU0wsCS8qIHJlZ2lzdGVyIHdpdGggbGVmdCBzaGlmdCAqLworKyAgQVZSMzJfT1BFUkFORF9JTlRSRUdfTFNSLAkvKiByZWdpc3RlciB3aXRoIHJpZ2h0IHNoaWZ0ICovCisrICBBVlIzMl9PUEVSQU5EX0lOVFJFR19CU0VMLAkvKiByZWdpc3RlciB3aXRoIGJ5dGUgc2VsZWN0b3IgKi8KKysgIEFWUjMyX09QRVJBTkRfSU5UUkVHX0hTRUwsCS8qIHJlZ2lzdGVyIHdpdGggaGFsZndvcmQgc2VsZWN0b3IgKi8KKysgIEFWUjMyX09QRVJBTkRfSU5UUkVHX1NESVNQLAkvKiBScFtzaWduZWQgZGlzcF0gKi8KKysgIEFWUjMyX09QRVJBTkRfSU5UUkVHX1NESVNQX0gsCS8qIFJwW3NpZ25lZCBod29yZC1hbGlnbmVkIGRpc3BdICovCisrICBBVlIzMl9PUEVSQU5EX0lOVFJFR19TRElTUF9XLAkvKiBScFtzaWduZWQgd29yZC1hbGlnbmVkIGRpc3BdICovCisrICBBVlIzMl9PUEVSQU5EX0lOVFJFR19VRElTUCwJLyogUnBbdW5zaWduZWQgZGlzcF0gKi8KKysgIEFWUjMyX09QRVJBTkRfSU5UUkVHX1VESVNQX0gsCS8qIFJwW3Vuc2lnbmVkIGh3b3JkLWFsaWduZWQgZGlzcF0gKi8KKysgIEFWUjMyX09QRVJBTkRfSU5UUkVHX1VESVNQX1csIC8qIFJwW3Vuc2lnbmVkIHdvcmQtYWxpZ25lZCBkaXNwXSAqLworKyAgQVZSMzJfT1BFUkFORF9JTlRSRUdfSU5ERVgsCS8qIFJwW1JpIDw8IHNhXSAqLworKyAgQVZSMzJfT1BFUkFORF9JTlRSRUdfWElOREVYLAkvKiBScFtSaTpieXRlc2VsIDw8IDJdICovCisrICBBVlIzMl9PUEVSQU5EX0RXUkVHLAkJLyogRXZlbi1udW1iZXJlZCByZWdpc3RlciAqLworKyAgQVZSMzJfT1BFUkFORF9QQ19VRElTUF9XLAkvKiBQQ1t1bnNpZ25lZCB3b3JkLWFsaWduZWQgZGlzcF0gb3IgbGFiZWwgKi8KKysgIEFWUjMyX09QRVJBTkRfU1AsCQkvKiBKdXN0IFNQICovCisrICBBVlIzMl9PUEVSQU5EX1NQX1VESVNQX1csCS8qIFNQW3Vuc2lnbmVkIHdvcmQtYWxpZ25lZCBkaXNwXSAqLworKyAgQVZSMzJfT1BFUkFORF9DUE5PLAorKyAgQVZSMzJfT1BFUkFORF9DUFJFRywKKysgIEFWUjMyX09QRVJBTkRfQ1BSRUdfRCwKKysgIEFWUjMyX09QRVJBTkRfVU5TSUdORURfQ09OU1QsCisrICBBVlIzMl9PUEVSQU5EX1VOU0lHTkVEX0NPTlNUX1csCisrICBBVlIzMl9PUEVSQU5EX1NJR05FRF9DT05TVCwKKysgIEFWUjMyX09QRVJBTkRfU0lHTkVEX0NPTlNUX1csCisrICBBVlIzMl9PUEVSQU5EX0pNUExBQkVMLAorKyAgQVZSMzJfT1BFUkFORF9VTlNJR05FRF9OVU1CRVIsCisrICBBVlIzMl9PUEVSQU5EX1VOU0lHTkVEX05VTUJFUl9XLAorKyAgQVZSMzJfT1BFUkFORF9SRUdMSVNUOCwKKysgIEFWUjMyX09QRVJBTkRfUkVHTElTVDksCisrICBBVlIzMl9PUEVSQU5EX1JFR0xJU1QxNiwKKysgIEFWUjMyX09QRVJBTkRfUkVHTElTVF9MRE0sCisrICBBVlIzMl9PUEVSQU5EX1JFR0xJU1RfQ1A4LAorKyAgQVZSMzJfT1BFUkFORF9SRUdMSVNUX0NQRDgsCisrICBBVlIzMl9PUEVSQU5EX1JFVFZBTCwKKysgIEFWUjMyX09QRVJBTkRfTUNBTEwsCisrICBBVlIzMl9PUEVSQU5EX0pPU1BJTkMsCisrICBBVlIzMl9PUEVSQU5EX0NPSCwKKysgIEFWUjMyX09QRVJBTkRfRlBSRUdfUywKKysgIEFWUjMyX09QRVJBTkRfRlBSRUdfRCwKKysgIEFWUjMyX09QRVJBTkRfUElDT19SRUdfVywKKysgIEFWUjMyX09QRVJBTkRfUElDT19SRUdfRCwKKysgIEFWUjMyX09QRVJBTkRfUElDT19SRUdMSVNUX1csCisrICBBVlIzMl9PUEVSQU5EX1BJQ09fUkVHTElTVF9ELAorKyAgQVZSMzJfT1BFUkFORF9QSUNPX0lOLAorKyAgQVZSMzJfT1BFUkFORF9QSUNPX09VVDAsCisrICBBVlIzMl9PUEVSQU5EX1BJQ09fT1VUMSwKKysgIEFWUjMyX09QRVJBTkRfUElDT19PVVQyLAorKyAgQVZSMzJfT1BFUkFORF9QSUNPX09VVDMsCisrICBBVlIzMl9PUEVSQU5EX19FTkRfCisrfTsKKysjZGVmaW5lIEFWUjMyX09QRVJBTkRfVU5LTk9XTiBBVlIzMl9PUEVSQU5EX19FTkRfCisrI2RlZmluZSBBVlIzMl9OUl9PUEVSQU5EUyBBVlIzMl9PUEVSQU5EX19FTkRfCisrCisrZW51bSBhdnIzMl9pZmllbGRfdHlwZQorK3sKKysgIEFWUjMyX0lGSUVMRF9SWCwKKysgIEFWUjMyX0lGSUVMRF9SWSwKKysgIEFWUjMyX0lGSUVMRF9DT05ENEMsCisrICBBVlIzMl9JRklFTERfSzhDLAorKyAgQVZSMzJfSUZJRUxEX0s3QywKKysgIEFWUjMyX0lGSUVMRF9LNUMsCisrICBBVlIzMl9JRklFTERfSzMsCisrICBBVlIzMl9JRklFTERfUllfRFcsCisrICBBVlIzMl9JRklFTERfQ09ORDRFLAorKyAgQVZSMzJfSUZJRUxEX0s4RSwKKysgIEFWUjMyX0lGSUVMRF9CSVQ1QywKKysgIEFWUjMyX0lGSUVMRF9DT05EMywKKysgIEFWUjMyX0lGSUVMRF9LMTAsCisrICBBVlIzMl9JRklFTERfUE9QTSwKKysgIEFWUjMyX0lGSUVMRF9LMiwKKysgIEFWUjMyX0lGSUVMRF9SRF9FLAorKyAgQVZSMzJfSUZJRUxEX1JEX0RXLAorKyAgQVZSMzJfSUZJRUxEX1gsCisrICBBVlIzMl9JRklFTERfWSwKKysgIEFWUjMyX0lGSUVMRF9YMiwKKysgIEFWUjMyX0lGSUVMRF9ZMiwKKysgIEFWUjMyX0lGSUVMRF9LNUUsCisrICBBVlIzMl9JRklFTERfUEFSVDIsCisrICBBVlIzMl9JRklFTERfUEFSVDEsCisrICBBVlIzMl9JRklFTERfSzE2LAorKyAgQVZSMzJfSUZJRUxEX0NBQ0hFT1AsCisrICBBVlIzMl9JRklFTERfSzExLAorKyAgQVZSMzJfSUZJRUxEX0syMSwKKysgIEFWUjMyX0lGSUVMRF9DUE9QLAorKyAgQVZSMzJfSUZJRUxEX0NQTk8sCisrICBBVlIzMl9JRklFTERfQ1JEX1JJLAorKyAgQVZSMzJfSUZJRUxEX0NSWCwKKysgIEFWUjMyX0lGSUVMRF9DUlksCisrICBBVlIzMl9JRklFTERfSzdFLAorKyAgQVZSMzJfSUZJRUxEX0NSRF9EVywKKysgIEFWUjMyX0lGSUVMRF9QQVJUMV9LMTIsCisrICBBVlIzMl9JRklFTERfUEFSVDJfSzEyLAorKyAgQVZSMzJfSUZJRUxEX0sxMiwKKysgIEFWUjMyX0lGSUVMRF9TNSwKKysgIEFWUjMyX0lGSUVMRF9LNUUyLAorKyAgQVZSMzJfSUZJRUxEX0s0LAorKyAgQVZSMzJfSUZJRUxEX0NPTkQ0RTIsCisrICBBVlIzMl9JRklFTERfSzhFMiwKKysgIEFWUjMyX0lGSUVMRF9LNiwKKysgIEFWUjMyX0lGSUVMRF9NRU0xNSwKKysgIEFWUjMyX0lGSUVMRF9NRU1CNSwKKysgIEFWUjMyX0lGSUVMRF9XLAorKyAgQVZSMzJfSUZJRUxEX0NNX0hMLAorKyAgQVZSMzJfSUZJRUxEX0sxMkNQLAorKyAgQVZSMzJfSUZJRUxEX0s5RSwKKysgIEFWUjMyX0lGSUVMRF9fRU5EXywKKyt9OworKyNkZWZpbmUgQVZSMzJfTlJfSUZJRUxEUyBBVlIzMl9JRklFTERfX0VORF8KKysKKytlbnVtIGF2cjMyX29wY190eXBlCisreworKyAgQVZSMzJfT1BDX0FCUywKKysgIEFWUjMyX09QQ19BQ0FMTCwKKysgIEFWUjMyX09QQ19BQ1IsCisrICBBVlIzMl9PUENfQURDLAorKyAgQVZSMzJfT1BDX0FERDEsCisrICBBVlIzMl9PUENfQUREMiwKKysgIEFWUjMyX09QQ19BRERBQlMsCisrICBBVlIzMl9PUENfQURESEhfVywKKysgIEFWUjMyX09QQ19BTkQxLAorKyAgQVZSMzJfT1BDX0FORDIsCisrICBBVlIzMl9PUENfQU5EMywKKysgIEFWUjMyX09QQ19BTkRILAorKyAgQVZSMzJfT1BDX0FOREhfQ09ILAorKyAgQVZSMzJfT1BDX0FOREwsCisrICBBVlIzMl9PUENfQU5ETF9DT0gsCisrICBBVlIzMl9PUENfQU5ETiwKKysgIEFWUjMyX09QQ19BU1IxLAorKyAgQVZSMzJfT1BDX0FTUjMsCisrICBBVlIzMl9PUENfQVNSMiwKKysgIEFWUjMyX09QQ19CTEQsCisrICBBVlIzMl9PUENfQlJFUTEsCisrICBBVlIzMl9PUENfQlJORTEsCisrICBBVlIzMl9PUENfQlJDQzEsCisrICBBVlIzMl9PUENfQlJDUzEsCisrICBBVlIzMl9PUENfQlJHRTEsCisrICBBVlIzMl9PUENfQlJMVDEsCisrICBBVlIzMl9PUENfQlJNSTEsCisrICBBVlIzMl9PUENfQlJQTDEsCisrICBBVlIzMl9PUENfQlJFUTIsCisrICBBVlIzMl9PUENfQlJORTIsCisrICBBVlIzMl9PUENfQlJDQzIsCisrICBBVlIzMl9PUENfQlJDUzIsCisrICBBVlIzMl9PUENfQlJHRTIsCisrICBBVlIzMl9PUENfQlJMVDIsCisrICBBVlIzMl9PUENfQlJNSTIsCisrICBBVlIzMl9PUENfQlJQTDIsCisrICBBVlIzMl9PUENfQlJMUywKKysgIEFWUjMyX09QQ19CUkdULAorKyAgQVZSMzJfT1BDX0JSTEUsCisrICBBVlIzMl9PUENfQlJISSwKKysgIEFWUjMyX09QQ19CUlZTLAorKyAgQVZSMzJfT1BDX0JSVkMsCisrICBBVlIzMl9PUENfQlJRUywKKysgIEFWUjMyX09QQ19CUkFMLAorKyAgQVZSMzJfT1BDX0JSRUFLUE9JTlQsCisrICBBVlIzMl9PUENfQlJFViwKKysgIEFWUjMyX09QQ19CU1QsCisrICBBVlIzMl9PUENfQ0FDSEUsCisrICBBVlIzMl9PUENfQ0FTVFNfQiwKKysgIEFWUjMyX09QQ19DQVNUU19ILAorKyAgQVZSMzJfT1BDX0NBU1RVX0IsCisrICBBVlIzMl9PUENfQ0FTVFVfSCwKKysgIEFWUjMyX09QQ19DQlIsCisrICBBVlIzMl9PUENfQ0xaLAorKyAgQVZSMzJfT1BDX0NPTSwKKysgIEFWUjMyX09QQ19DT1AsCisrICBBVlIzMl9PUENfQ1BfQiwKKysgIEFWUjMyX09QQ19DUF9ILAorKyAgQVZSMzJfT1BDX0NQX1cxLAorKyAgQVZSMzJfT1BDX0NQX1cyLAorKyAgQVZSMzJfT1BDX0NQX1czLAorKyAgQVZSMzJfT1BDX0NQQzEsCisrICBBVlIzMl9PUENfQ1BDMiwKKysgIEFWUjMyX09QQ19DU1JGLAorKyAgQVZSMzJfT1BDX0NTUkZDWiwKKysgIEFWUjMyX09QQ19ESVZTLAorKyAgQVZSMzJfT1BDX0RJVlUsCisrICBBVlIzMl9PUENfRU9SMSwKKysgIEFWUjMyX09QQ19FT1IyLAorKyAgQVZSMzJfT1BDX0VPUjMsCisrICBBVlIzMl9PUENfRU9STCwKKysgIEFWUjMyX09QQ19FT1JILAorKyAgQVZSMzJfT1BDX0ZSUywKKysgIEFWUjMyX09QQ19JQ0FMTCwKKysgIEFWUjMyX09QQ19JTkNKT1NQLAorKyAgQVZSMzJfT1BDX0xEX0QxLAorKyAgQVZSMzJfT1BDX0xEX0QyLAorKyAgQVZSMzJfT1BDX0xEX0QzLAorKyAgQVZSMzJfT1BDX0xEX0Q1LAorKyAgQVZSMzJfT1BDX0xEX0Q0LAorKyAgQVZSMzJfT1BDX0xEX1NCMiwKKysgIEFWUjMyX09QQ19MRF9TQjEsCisrICBBVlIzMl9PUENfTERfVUIxLAorKyAgQVZSMzJfT1BDX0xEX1VCMiwKKysgIEFWUjMyX09QQ19MRF9VQjUsCisrICBBVlIzMl9PUENfTERfVUIzLAorKyAgQVZSMzJfT1BDX0xEX1VCNCwKKysgIEFWUjMyX09QQ19MRF9TSDEsCisrICBBVlIzMl9PUENfTERfU0gyLAorKyAgQVZSMzJfT1BDX0xEX1NINSwKKysgIEFWUjMyX09QQ19MRF9TSDMsCisrICBBVlIzMl9PUENfTERfU0g0LAorKyAgQVZSMzJfT1BDX0xEX1VIMSwKKysgIEFWUjMyX09QQ19MRF9VSDIsCisrICBBVlIzMl9PUENfTERfVUg1LAorKyAgQVZSMzJfT1BDX0xEX1VIMywKKysgIEFWUjMyX09QQ19MRF9VSDQsCisrICBBVlIzMl9PUENfTERfVzEsCisrICBBVlIzMl9PUENfTERfVzIsCisrICBBVlIzMl9PUENfTERfVzUsCisrICBBVlIzMl9PUENfTERfVzYsCisrICBBVlIzMl9PUENfTERfVzMsCisrICBBVlIzMl9PUENfTERfVzQsCisrICBBVlIzMl9PUENfTERDX0QxLAorKyAgQVZSMzJfT1BDX0xEQ19EMiwKKysgIEFWUjMyX09QQ19MRENfRDMsCisrICBBVlIzMl9PUENfTERDX1cxLAorKyAgQVZSMzJfT1BDX0xEQ19XMiwKKysgIEFWUjMyX09QQ19MRENfVzMsCisrICBBVlIzMl9PUENfTERDMF9ELAorKyAgQVZSMzJfT1BDX0xEQzBfVywKKysgIEFWUjMyX09QQ19MRENNX0QsCisrICBBVlIzMl9PUENfTERDTV9EX1BVLAorKyAgQVZSMzJfT1BDX0xEQ01fVywKKysgIEFWUjMyX09QQ19MRENNX1dfUFUsCisrICBBVlIzMl9PUENfTEREUEMsCisrICBBVlIzMl9PUENfTEREUENfRVhULAorKyAgQVZSMzJfT1BDX0xERFNQLAorKyAgQVZSMzJfT1BDX0xESU5TX0IsCisrICBBVlIzMl9PUENfTERJTlNfSCwKKysgIEFWUjMyX09QQ19MRE0sCisrICBBVlIzMl9PUENfTERNVFMsCisrICBBVlIzMl9PUENfTERNVFNfUFUsCisrICBBVlIzMl9PUENfTERTV1BfU0gsCisrICBBVlIzMl9PUENfTERTV1BfVUgsCisrICBBVlIzMl9PUENfTERTV1BfVywKKysgIEFWUjMyX09QQ19MU0wxLAorKyAgQVZSMzJfT1BDX0xTTDMsCisrICBBVlIzMl9PUENfTFNMMiwKKysgIEFWUjMyX09QQ19MU1IxLAorKyAgQVZSMzJfT1BDX0xTUjMsCisrICBBVlIzMl9PUENfTFNSMiwKKysgIEFWUjMyX09QQ19NQUMsCisrICBBVlIzMl9PUENfTUFDSEhfRCwKKysgIEFWUjMyX09QQ19NQUNISF9XLAorKyAgQVZSMzJfT1BDX01BQ1NfRCwKKysgIEFWUjMyX09QQ19NQUNTQVRISF9XLAorKyAgQVZSMzJfT1BDX01BQ1VELAorKyAgQVZSMzJfT1BDX01BQ1dIX0QsCisrICBBVlIzMl9PUENfTUFYLAorKyAgQVZSMzJfT1BDX01DQUxMLAorKyAgQVZSMzJfT1BDX01GRFIsCisrICBBVlIzMl9PUENfTUZTUiwKKysgIEFWUjMyX09QQ19NSU4sCisrICBBVlIzMl9PUENfTU9WMywKKysgIEFWUjMyX09QQ19NT1YxLAorKyAgQVZSMzJfT1BDX01PVjIsCisrICBBVlIzMl9PUENfTU9WRVExLAorKyAgQVZSMzJfT1BDX01PVk5FMSwKKysgIEFWUjMyX09QQ19NT1ZDQzEsCisrICBBVlIzMl9PUENfTU9WQ1MxLAorKyAgQVZSMzJfT1BDX01PVkdFMSwKKysgIEFWUjMyX09QQ19NT1ZMVDEsCisrICBBVlIzMl9PUENfTU9WTUkxLAorKyAgQVZSMzJfT1BDX01PVlBMMSwKKysgIEFWUjMyX09QQ19NT1ZMUzEsCisrICBBVlIzMl9PUENfTU9WR1QxLAorKyAgQVZSMzJfT1BDX01PVkxFMSwKKysgIEFWUjMyX09QQ19NT1ZISTEsCisrICBBVlIzMl9PUENfTU9WVlMxLAorKyAgQVZSMzJfT1BDX01PVlZDMSwKKysgIEFWUjMyX09QQ19NT1ZRUzEsCisrICBBVlIzMl9PUENfTU9WQUwxLAorKyAgQVZSMzJfT1BDX01PVkVRMiwKKysgIEFWUjMyX09QQ19NT1ZORTIsCisrICBBVlIzMl9PUENfTU9WQ0MyLAorKyAgQVZSMzJfT1BDX01PVkNTMiwKKysgIEFWUjMyX09QQ19NT1ZHRTIsCisrICBBVlIzMl9PUENfTU9WTFQyLAorKyAgQVZSMzJfT1BDX01PVk1JMiwKKysgIEFWUjMyX09QQ19NT1ZQTDIsCisrICBBVlIzMl9PUENfTU9WTFMyLAorKyAgQVZSMzJfT1BDX01PVkdUMiwKKysgIEFWUjMyX09QQ19NT1ZMRTIsCisrICBBVlIzMl9PUENfTU9WSEkyLAorKyAgQVZSMzJfT1BDX01PVlZTMiwKKysgIEFWUjMyX09QQ19NT1ZWQzIsCisrICBBVlIzMl9PUENfTU9WUVMyLAorKyAgQVZSMzJfT1BDX01PVkFMMiwKKysgIEFWUjMyX09QQ19NVERSLAorKyAgQVZSMzJfT1BDX01UU1IsCisrICBBVlIzMl9PUENfTVVMMSwKKysgIEFWUjMyX09QQ19NVUwyLAorKyAgQVZSMzJfT1BDX01VTDMsCisrICBBVlIzMl9PUENfTVVMSEhfVywKKysgIEFWUjMyX09QQ19NVUxOSEhfVywKKysgIEFWUjMyX09QQ19NVUxOV0hfRCwKKysgIEFWUjMyX09QQ19NVUxTRCwKKysgIEFWUjMyX09QQ19NVUxTQVRISF9ILAorKyAgQVZSMzJfT1BDX01VTFNBVEhIX1csCisrICBBVlIzMl9PUENfTVVMU0FUUk5ESEhfSCwKKysgIEFWUjMyX09QQ19NVUxTQVRSTkRXSF9XLAorKyAgQVZSMzJfT1BDX01VTFNBVFdIX1csCisrICBBVlIzMl9PUENfTVVMVV9ELAorKyAgQVZSMzJfT1BDX01VTFdIX0QsCisrICBBVlIzMl9PUENfTVVTRlIsCisrICBBVlIzMl9PUENfTVVTVFIsCisrICBBVlIzMl9PUENfTVZDUl9ELAorKyAgQVZSMzJfT1BDX01WQ1JfVywKKysgIEFWUjMyX09QQ19NVlJDX0QsCisrICBBVlIzMl9PUENfTVZSQ19XLAorKyAgQVZSMzJfT1BDX05FRywKKysgIEFWUjMyX09QQ19OT1AsCisrICBBVlIzMl9PUENfT1IxLAorKyAgQVZSMzJfT1BDX09SMiwKKysgIEFWUjMyX09QQ19PUjMsCisrICBBVlIzMl9PUENfT1JILAorKyAgQVZSMzJfT1BDX09STCwKKysgIEFWUjMyX09QQ19QQUJTX1NCLAorKyAgQVZSMzJfT1BDX1BBQlNfU0gsCisrICBBVlIzMl9PUENfUEFDS1NIX1NCLAorKyAgQVZSMzJfT1BDX1BBQ0tTSF9VQiwKKysgIEFWUjMyX09QQ19QQUNLV19TSCwKKysgIEFWUjMyX09QQ19QQUREX0IsCisrICBBVlIzMl9PUENfUEFERF9ILAorKyAgQVZSMzJfT1BDX1BBRERIX1NILAorKyAgQVZSMzJfT1BDX1BBRERIX1VCLAorKyAgQVZSMzJfT1BDX1BBRERTX1NCLAorKyAgQVZSMzJfT1BDX1BBRERTX1NILAorKyAgQVZSMzJfT1BDX1BBRERTX1VCLAorKyAgQVZSMzJfT1BDX1BBRERTX1VILAorKyAgQVZSMzJfT1BDX1BBRERTVUJfSCwKKysgIEFWUjMyX09QQ19QQUREU1VCSF9TSCwKKysgIEFWUjMyX09QQ19QQUREU1VCU19TSCwKKysgIEFWUjMyX09QQ19QQUREU1VCU19VSCwKKysgIEFWUjMyX09QQ19QQUREWF9ILAorKyAgQVZSMzJfT1BDX1BBRERYSF9TSCwKKysgIEFWUjMyX09QQ19QQUREWFNfU0gsCisrICBBVlIzMl9PUENfUEFERFhTX1VILAorKyAgQVZSMzJfT1BDX1BBU1JfQiwKKysgIEFWUjMyX09QQ19QQVNSX0gsCisrICBBVlIzMl9PUENfUEFWR19TSCwKKysgIEFWUjMyX09QQ19QQVZHX1VCLAorKyAgQVZSMzJfT1BDX1BMU0xfQiwKKysgIEFWUjMyX09QQ19QTFNMX0gsCisrICBBVlIzMl9PUENfUExTUl9CLAorKyAgQVZSMzJfT1BDX1BMU1JfSCwKKysgIEFWUjMyX09QQ19QTUFYX1NILAorKyAgQVZSMzJfT1BDX1BNQVhfVUIsCisrICBBVlIzMl9PUENfUE1JTl9TSCwKKysgIEFWUjMyX09QQ19QTUlOX1VCLAorKyAgQVZSMzJfT1BDX1BPUEpDLAorKyAgQVZSMzJfT1BDX1BPUE0sCisrICBBVlIzMl9PUENfUE9QTV9FLAorKyAgQVZSMzJfT1BDX1BSRUYsCisrICBBVlIzMl9PUENfUFNBRCwKKysgIEFWUjMyX09QQ19QU1VCX0IsCisrICBBVlIzMl9PUENfUFNVQl9ILAorKyAgQVZSMzJfT1BDX1BTVUJBRERfSCwKKysgIEFWUjMyX09QQ19QU1VCQURESF9TSCwKKysgIEFWUjMyX09QQ19QU1VCQUREU19TSCwKKysgIEFWUjMyX09QQ19QU1VCQUREU19VSCwKKysgIEFWUjMyX09QQ19QU1VCSF9TSCwKKysgIEFWUjMyX09QQ19QU1VCSF9VQiwKKysgIEFWUjMyX09QQ19QU1VCU19TQiwKKysgIEFWUjMyX09QQ19QU1VCU19TSCwKKysgIEFWUjMyX09QQ19QU1VCU19VQiwKKysgIEFWUjMyX09QQ19QU1VCU19VSCwKKysgIEFWUjMyX09QQ19QU1VCWF9ILAorKyAgQVZSMzJfT1BDX1BTVUJYSF9TSCwKKysgIEFWUjMyX09QQ19QU1VCWFNfU0gsCisrICBBVlIzMl9PUENfUFNVQlhTX1VILAorKyAgQVZSMzJfT1BDX1BVTlBDS1NCX0gsCisrICBBVlIzMl9PUENfUFVOUENLVUJfSCwKKysgIEFWUjMyX09QQ19QVVNISkMsCisrICBBVlIzMl9PUENfUFVTSE0sCisrICBBVlIzMl9PUENfUFVTSE1fRSwKKysgIEFWUjMyX09QQ19SQ0FMTDEsCisrICBBVlIzMl9PUENfUkNBTEwyLAorKyAgQVZSMzJfT1BDX1JFVEVRLAorKyAgQVZSMzJfT1BDX1JFVE5FLAorKyAgQVZSMzJfT1BDX1JFVENDLAorKyAgQVZSMzJfT1BDX1JFVENTLAorKyAgQVZSMzJfT1BDX1JFVEdFLAorKyAgQVZSMzJfT1BDX1JFVExULAorKyAgQVZSMzJfT1BDX1JFVE1JLAorKyAgQVZSMzJfT1BDX1JFVFBMLAorKyAgQVZSMzJfT1BDX1JFVExTLAorKyAgQVZSMzJfT1BDX1JFVEdULAorKyAgQVZSMzJfT1BDX1JFVExFLAorKyAgQVZSMzJfT1BDX1JFVEhJLAorKyAgQVZSMzJfT1BDX1JFVFZTLAorKyAgQVZSMzJfT1BDX1JFVFZDLAorKyAgQVZSMzJfT1BDX1JFVFFTLAorKyAgQVZSMzJfT1BDX1JFVEFMLAorKyAgQVZSMzJfT1BDX1JFVEQsCisrICBBVlIzMl9PUENfUkVURSwKKysgIEFWUjMyX09QQ19SRVRKLAorKyAgQVZSMzJfT1BDX1JFVFMsCisrICBBVlIzMl9PUENfUkpNUCwKKysgIEFWUjMyX09QQ19ST0wsCisrICBBVlIzMl9PUENfUk9SLAorKyAgQVZSMzJfT1BDX1JTVUIxLAorKyAgQVZSMzJfT1BDX1JTVUIyLAorKyAgQVZSMzJfT1BDX1NBVEFERF9ILAorKyAgQVZSMzJfT1BDX1NBVEFERF9XLAorKyAgQVZSMzJfT1BDX1NBVFJORFMsCisrICBBVlIzMl9PUENfU0FUUk5EVSwKKysgIEFWUjMyX09QQ19TQVRTLAorKyAgQVZSMzJfT1BDX1NBVFNVQl9ILAorKyAgQVZSMzJfT1BDX1NBVFNVQl9XMSwKKysgIEFWUjMyX09QQ19TQVRTVUJfVzIsCisrICBBVlIzMl9PUENfU0FUVSwKKysgIEFWUjMyX09QQ19TQkMsCisrICBBVlIzMl9PUENfU0JSLAorKyAgQVZSMzJfT1BDX1NDQUxMLAorKyAgQVZSMzJfT1BDX1NDUiwKKysgIEFWUjMyX09QQ19TTEVFUCwKKysgIEFWUjMyX09QQ19TUkVRLAorKyAgQVZSMzJfT1BDX1NSTkUsCisrICBBVlIzMl9PUENfU1JDQywKKysgIEFWUjMyX09QQ19TUkNTLAorKyAgQVZSMzJfT1BDX1NSR0UsCisrICBBVlIzMl9PUENfU1JMVCwKKysgIEFWUjMyX09QQ19TUk1JLAorKyAgQVZSMzJfT1BDX1NSUEwsCisrICBBVlIzMl9PUENfU1JMUywKKysgIEFWUjMyX09QQ19TUkdULAorKyAgQVZSMzJfT1BDX1NSTEUsCisrICBBVlIzMl9PUENfU1JISSwKKysgIEFWUjMyX09QQ19TUlZTLAorKyAgQVZSMzJfT1BDX1NSVkMsCisrICBBVlIzMl9PUENfU1JRUywKKysgIEFWUjMyX09QQ19TUkFMLAorKyAgQVZSMzJfT1BDX1NTUkYsCisrICBBVlIzMl9PUENfU1RfQjEsCisrICBBVlIzMl9PUENfU1RfQjIsCisrICBBVlIzMl9PUENfU1RfQjUsCisrICBBVlIzMl9PUENfU1RfQjMsCisrICBBVlIzMl9PUENfU1RfQjQsCisrICBBVlIzMl9PUENfU1RfRDEsCisrICBBVlIzMl9PUENfU1RfRDIsCisrICBBVlIzMl9PUENfU1RfRDMsCisrICBBVlIzMl9PUENfU1RfRDUsCisrICBBVlIzMl9PUENfU1RfRDQsCisrICBBVlIzMl9PUENfU1RfSDEsCisrICBBVlIzMl9PUENfU1RfSDIsCisrICBBVlIzMl9PUENfU1RfSDUsCisrICBBVlIzMl9PUENfU1RfSDMsCisrICBBVlIzMl9PUENfU1RfSDQsCisrICBBVlIzMl9PUENfU1RfVzEsCisrICBBVlIzMl9PUENfU1RfVzIsCisrICBBVlIzMl9PUENfU1RfVzUsCisrICBBVlIzMl9PUENfU1RfVzMsCisrICBBVlIzMl9PUENfU1RfVzQsCisrICBBVlIzMl9PUENfU1RDX0QxLAorKyAgQVZSMzJfT1BDX1NUQ19EMiwKKysgIEFWUjMyX09QQ19TVENfRDMsCisrICBBVlIzMl9PUENfU1RDX1cxLAorKyAgQVZSMzJfT1BDX1NUQ19XMiwKKysgIEFWUjMyX09QQ19TVENfVzMsCisrICBBVlIzMl9PUENfU1RDMF9ELAorKyAgQVZSMzJfT1BDX1NUQzBfVywKKysgIEFWUjMyX09QQ19TVENNX0QsCisrICBBVlIzMl9PUENfU1RDTV9EX1BVLAorKyAgQVZSMzJfT1BDX1NUQ01fVywKKysgIEFWUjMyX09QQ19TVENNX1dfUFUsCisrICBBVlIzMl9PUENfU1RDT05ELAorKyAgQVZSMzJfT1BDX1NURFNQLAorKyAgQVZSMzJfT1BDX1NUSEhfVzIsCisrICBBVlIzMl9PUENfU1RISF9XMSwKKysgIEFWUjMyX09QQ19TVE0sCisrICBBVlIzMl9PUENfU1RNX1BVLAorKyAgQVZSMzJfT1BDX1NUTVRTLAorKyAgQVZSMzJfT1BDX1NUTVRTX1BVLAorKyAgQVZSMzJfT1BDX1NUU1dQX0gsCisrICBBVlIzMl9PUENfU1RTV1BfVywKKysgIEFWUjMyX09QQ19TVUIxLAorKyAgQVZSMzJfT1BDX1NVQjIsCisrICBBVlIzMl9PUENfU1VCNSwKKysgIEFWUjMyX09QQ19TVUIzX1NQLAorKyAgQVZSMzJfT1BDX1NVQjMsCisrICBBVlIzMl9PUENfU1VCNCwKKysgIEFWUjMyX09QQ19TVUJFUSwKKysgIEFWUjMyX09QQ19TVUJORSwKKysgIEFWUjMyX09QQ19TVUJDQywKKysgIEFWUjMyX09QQ19TVUJDUywKKysgIEFWUjMyX09QQ19TVUJHRSwKKysgIEFWUjMyX09QQ19TVUJMVCwKKysgIEFWUjMyX09QQ19TVUJNSSwKKysgIEFWUjMyX09QQ19TVUJQTCwKKysgIEFWUjMyX09QQ19TVUJMUywKKysgIEFWUjMyX09QQ19TVUJHVCwKKysgIEFWUjMyX09QQ19TVUJMRSwKKysgIEFWUjMyX09QQ19TVUJISSwKKysgIEFWUjMyX09QQ19TVUJWUywKKysgIEFWUjMyX09QQ19TVUJWQywKKysgIEFWUjMyX09QQ19TVUJRUywKKysgIEFWUjMyX09QQ19TVUJBTCwKKysgIEFWUjMyX09QQ19TVUJGRVEsCisrICBBVlIzMl9PUENfU1VCRk5FLAorKyAgQVZSMzJfT1BDX1NVQkZDQywKKysgIEFWUjMyX09QQ19TVUJGQ1MsCisrICBBVlIzMl9PUENfU1VCRkdFLAorKyAgQVZSMzJfT1BDX1NVQkZMVCwKKysgIEFWUjMyX09QQ19TVUJGTUksCisrICBBVlIzMl9PUENfU1VCRlBMLAorKyAgQVZSMzJfT1BDX1NVQkZMUywKKysgIEFWUjMyX09QQ19TVUJGR1QsCisrICBBVlIzMl9PUENfU1VCRkxFLAorKyAgQVZSMzJfT1BDX1NVQkZISSwKKysgIEFWUjMyX09QQ19TVUJGVlMsCisrICBBVlIzMl9PUENfU1VCRlZDLAorKyAgQVZSMzJfT1BDX1NVQkZRUywKKysgIEFWUjMyX09QQ19TVUJGQUwsCisrICBBVlIzMl9PUENfU1VCSEhfVywKKysgIEFWUjMyX09QQ19TV0FQX0IsCisrICBBVlIzMl9PUENfU1dBUF9CSCwKKysgIEFWUjMyX09QQ19TV0FQX0gsCisrICBBVlIzMl9PUENfU1lOQywKKysgIEFWUjMyX09QQ19UTEJSLAorKyAgQVZSMzJfT1BDX1RMQlMsCisrICBBVlIzMl9PUENfVExCVywKKysgIEFWUjMyX09QQ19UTkJaLAorKyAgQVZSMzJfT1BDX1RTVCwKKysgIEFWUjMyX09QQ19YQ0hHLAorKyAgQVZSMzJfT1BDX01FTUMsCisrICBBVlIzMl9PUENfTUVNUywKKysgIEFWUjMyX09QQ19NRU1ULAorKyAgQVZSMzJfT1BDX0JGRVhUUywKKysgIEFWUjMyX09QQ19CRkVYVFUsCisrICBBVlIzMl9PUENfQkZJTlMsCisrICBBVlIzMl9PUENfUlNVQkVRLAorKyAgQVZSMzJfT1BDX1JTVUJORSwKKysgIEFWUjMyX09QQ19SU1VCQ0MsCisrICBBVlIzMl9PUENfUlNVQkNTLAorKyAgQVZSMzJfT1BDX1JTVUJHRSwKKysgIEFWUjMyX09QQ19SU1VCTFQsCisrICBBVlIzMl9PUENfUlNVQk1JLAorKyAgQVZSMzJfT1BDX1JTVUJQTCwKKysgIEFWUjMyX09QQ19SU1VCTFMsCisrICBBVlIzMl9PUENfUlNVQkdULAorKyAgQVZSMzJfT1BDX1JTVUJMRSwKKysgIEFWUjMyX09QQ19SU1VCSEksCisrICBBVlIzMl9PUENfUlNVQlZTLAorKyAgQVZSMzJfT1BDX1JTVUJWQywKKysgIEFWUjMyX09QQ19SU1VCUVMsCisrICBBVlIzMl9PUENfUlNVQkFMLAorKyAgQVZSMzJfT1BDX0FEREVRLAorKyAgQVZSMzJfT1BDX0FERE5FLAorKyAgQVZSMzJfT1BDX0FERENDLAorKyAgQVZSMzJfT1BDX0FERENTLAorKyAgQVZSMzJfT1BDX0FEREdFLAorKyAgQVZSMzJfT1BDX0FERExULAorKyAgQVZSMzJfT1BDX0FERE1JLAorKyAgQVZSMzJfT1BDX0FERFBMLAorKyAgQVZSMzJfT1BDX0FERExTLAorKyAgQVZSMzJfT1BDX0FEREdULAorKyAgQVZSMzJfT1BDX0FERExFLAorKyAgQVZSMzJfT1BDX0FEREhJLAorKyAgQVZSMzJfT1BDX0FERFZTLAorKyAgQVZSMzJfT1BDX0FERFZDLAorKyAgQVZSMzJfT1BDX0FERFFTLAorKyAgQVZSMzJfT1BDX0FEREFMLAorKyAgQVZSMzJfT1BDX1NVQjJFUSwKKysgIEFWUjMyX09QQ19TVUIyTkUsCisrICBBVlIzMl9PUENfU1VCMkNDLAorKyAgQVZSMzJfT1BDX1NVQjJDUywKKysgIEFWUjMyX09QQ19TVUIyR0UsCisrICBBVlIzMl9PUENfU1VCMkxULAorKyAgQVZSMzJfT1BDX1NVQjJNSSwKKysgIEFWUjMyX09QQ19TVUIyUEwsCisrICBBVlIzMl9PUENfU1VCMkxTLAorKyAgQVZSMzJfT1BDX1NVQjJHVCwKKysgIEFWUjMyX09QQ19TVUIyTEUsCisrICBBVlIzMl9PUENfU1VCMkhJLAorKyAgQVZSMzJfT1BDX1NVQjJWUywKKysgIEFWUjMyX09QQ19TVUIyVkMsCisrICBBVlIzMl9PUENfU1VCMlFTLAorKyAgQVZSMzJfT1BDX1NVQjJBTCwKKysgIEFWUjMyX09QQ19BTkRFUSwKKysgIEFWUjMyX09QQ19BTkRORSwKKysgIEFWUjMyX09QQ19BTkRDQywKKysgIEFWUjMyX09QQ19BTkRDUywKKysgIEFWUjMyX09QQ19BTkRHRSwKKysgIEFWUjMyX09QQ19BTkRMVCwKKysgIEFWUjMyX09QQ19BTkRNSSwKKysgIEFWUjMyX09QQ19BTkRQTCwKKysgIEFWUjMyX09QQ19BTkRMUywKKysgIEFWUjMyX09QQ19BTkRHVCwKKysgIEFWUjMyX09QQ19BTkRMRSwKKysgIEFWUjMyX09QQ19BTkRISSwKKysgIEFWUjMyX09QQ19BTkRWUywKKysgIEFWUjMyX09QQ19BTkRWQywKKysgIEFWUjMyX09QQ19BTkRRUywKKysgIEFWUjMyX09QQ19BTkRBTCwKKysgIEFWUjMyX09QQ19PUkVRLAorKyAgQVZSMzJfT1BDX09STkUsCisrICBBVlIzMl9PUENfT1JDQywKKysgIEFWUjMyX09QQ19PUkNTLAorKyAgQVZSMzJfT1BDX09SR0UsCisrICBBVlIzMl9PUENfT1JMVCwKKysgIEFWUjMyX09QQ19PUk1JLAorKyAgQVZSMzJfT1BDX09SUEwsCisrICBBVlIzMl9PUENfT1JMUywKKysgIEFWUjMyX09QQ19PUkdULAorKyAgQVZSMzJfT1BDX09STEUsCisrICBBVlIzMl9PUENfT1JISSwKKysgIEFWUjMyX09QQ19PUlZTLAorKyAgQVZSMzJfT1BDX09SVkMsCisrICBBVlIzMl9PUENfT1JRUywKKysgIEFWUjMyX09QQ19PUkFMLAorKyAgQVZSMzJfT1BDX0VPUkVRLAorKyAgQVZSMzJfT1BDX0VPUk5FLAorKyAgQVZSMzJfT1BDX0VPUkNDLAorKyAgQVZSMzJfT1BDX0VPUkNTLAorKyAgQVZSMzJfT1BDX0VPUkdFLAorKyAgQVZSMzJfT1BDX0VPUkxULAorKyAgQVZSMzJfT1BDX0VPUk1JLAorKyAgQVZSMzJfT1BDX0VPUlBMLAorKyAgQVZSMzJfT1BDX0VPUkxTLAorKyAgQVZSMzJfT1BDX0VPUkdULAorKyAgQVZSMzJfT1BDX0VPUkxFLAorKyAgQVZSMzJfT1BDX0VPUkhJLAorKyAgQVZSMzJfT1BDX0VPUlZTLAorKyAgQVZSMzJfT1BDX0VPUlZDLAorKyAgQVZSMzJfT1BDX0VPUlFTLAorKyAgQVZSMzJfT1BDX0VPUkFMLAorKyAgQVZSMzJfT1BDX0xEX1dFUSwKKysgIEFWUjMyX09QQ19MRF9XTkUsCisrICBBVlIzMl9PUENfTERfV0NDLAorKyAgQVZSMzJfT1BDX0xEX1dDUywKKysgIEFWUjMyX09QQ19MRF9XR0UsCisrICBBVlIzMl9PUENfTERfV0xULAorKyAgQVZSMzJfT1BDX0xEX1dNSSwKKysgIEFWUjMyX09QQ19MRF9XUEwsCisrICBBVlIzMl9PUENfTERfV0xTLAorKyAgQVZSMzJfT1BDX0xEX1dHVCwKKysgIEFWUjMyX09QQ19MRF9XTEUsCisrICBBVlIzMl9PUENfTERfV0hJLAorKyAgQVZSMzJfT1BDX0xEX1dWUywKKysgIEFWUjMyX09QQ19MRF9XVkMsCisrICBBVlIzMl9PUENfTERfV1FTLAorKyAgQVZSMzJfT1BDX0xEX1dBTCwKKysgIEFWUjMyX09QQ19MRF9TSEVRLAorKyAgQVZSMzJfT1BDX0xEX1NITkUsCisrICBBVlIzMl9PUENfTERfU0hDQywKKysgIEFWUjMyX09QQ19MRF9TSENTLAorKyAgQVZSMzJfT1BDX0xEX1NIR0UsCisrICBBVlIzMl9PUENfTERfU0hMVCwKKysgIEFWUjMyX09QQ19MRF9TSE1JLAorKyAgQVZSMzJfT1BDX0xEX1NIUEwsCisrICBBVlIzMl9PUENfTERfU0hMUywKKysgIEFWUjMyX09QQ19MRF9TSEdULAorKyAgQVZSMzJfT1BDX0xEX1NITEUsCisrICBBVlIzMl9PUENfTERfU0hISSwKKysgIEFWUjMyX09QQ19MRF9TSFZTLAorKyAgQVZSMzJfT1BDX0xEX1NIVkMsCisrICBBVlIzMl9PUENfTERfU0hRUywKKysgIEFWUjMyX09QQ19MRF9TSEFMLAorKyAgQVZSMzJfT1BDX0xEX1VIRVEsCisrICBBVlIzMl9PUENfTERfVUhORSwKKysgIEFWUjMyX09QQ19MRF9VSENDLAorKyAgQVZSMzJfT1BDX0xEX1VIQ1MsCisrICBBVlIzMl9PUENfTERfVUhHRSwKKysgIEFWUjMyX09QQ19MRF9VSExULAorKyAgQVZSMzJfT1BDX0xEX1VITUksCisrICBBVlIzMl9PUENfTERfVUhQTCwKKysgIEFWUjMyX09QQ19MRF9VSExTLAorKyAgQVZSMzJfT1BDX0xEX1VIR1QsCisrICBBVlIzMl9PUENfTERfVUhMRSwKKysgIEFWUjMyX09QQ19MRF9VSEhJLAorKyAgQVZSMzJfT1BDX0xEX1VIVlMsCisrICBBVlIzMl9PUENfTERfVUhWQywKKysgIEFWUjMyX09QQ19MRF9VSFFTLAorKyAgQVZSMzJfT1BDX0xEX1VIQUwsCisrICBBVlIzMl9PUENfTERfU0JFUSwKKysgIEFWUjMyX09QQ19MRF9TQk5FLAorKyAgQVZSMzJfT1BDX0xEX1NCQ0MsCisrICBBVlIzMl9PUENfTERfU0JDUywKKysgIEFWUjMyX09QQ19MRF9TQkdFLAorKyAgQVZSMzJfT1BDX0xEX1NCTFQsCisrICBBVlIzMl9PUENfTERfU0JNSSwKKysgIEFWUjMyX09QQ19MRF9TQlBMLAorKyAgQVZSMzJfT1BDX0xEX1NCTFMsCisrICBBVlIzMl9PUENfTERfU0JHVCwKKysgIEFWUjMyX09QQ19MRF9TQkxFLAorKyAgQVZSMzJfT1BDX0xEX1NCSEksCisrICBBVlIzMl9PUENfTERfU0JWUywKKysgIEFWUjMyX09QQ19MRF9TQlZDLAorKyAgQVZSMzJfT1BDX0xEX1NCUVMsCisrICBBVlIzMl9PUENfTERfU0JBTCwKKysgIEFWUjMyX09QQ19MRF9VQkVRLAorKyAgQVZSMzJfT1BDX0xEX1VCTkUsCisrICBBVlIzMl9PUENfTERfVUJDQywKKysgIEFWUjMyX09QQ19MRF9VQkNTLAorKyAgQVZSMzJfT1BDX0xEX1VCR0UsCisrICBBVlIzMl9PUENfTERfVUJMVCwKKysgIEFWUjMyX09QQ19MRF9VQk1JLAorKyAgQVZSMzJfT1BDX0xEX1VCUEwsCisrICBBVlIzMl9PUENfTERfVUJMUywKKysgIEFWUjMyX09QQ19MRF9VQkdULAorKyAgQVZSMzJfT1BDX0xEX1VCTEUsCisrICBBVlIzMl9PUENfTERfVUJISSwKKysgIEFWUjMyX09QQ19MRF9VQlZTLAorKyAgQVZSMzJfT1BDX0xEX1VCVkMsCisrICBBVlIzMl9PUENfTERfVUJRUywKKysgIEFWUjMyX09QQ19MRF9VQkFMLAorKyAgQVZSMzJfT1BDX1NUX1dFUSwKKysgIEFWUjMyX09QQ19TVF9XTkUsCisrICBBVlIzMl9PUENfU1RfV0NDLAorKyAgQVZSMzJfT1BDX1NUX1dDUywKKysgIEFWUjMyX09QQ19TVF9XR0UsCisrICBBVlIzMl9PUENfU1RfV0xULAorKyAgQVZSMzJfT1BDX1NUX1dNSSwKKysgIEFWUjMyX09QQ19TVF9XUEwsCisrICBBVlIzMl9PUENfU1RfV0xTLAorKyAgQVZSMzJfT1BDX1NUX1dHVCwKKysgIEFWUjMyX09QQ19TVF9XTEUsCisrICBBVlIzMl9PUENfU1RfV0hJLAorKyAgQVZSMzJfT1BDX1NUX1dWUywKKysgIEFWUjMyX09QQ19TVF9XVkMsCisrICBBVlIzMl9PUENfU1RfV1FTLAorKyAgQVZSMzJfT1BDX1NUX1dBTCwKKysgIEFWUjMyX09QQ19TVF9IRVEsCisrICBBVlIzMl9PUENfU1RfSE5FLAorKyAgQVZSMzJfT1BDX1NUX0hDQywKKysgIEFWUjMyX09QQ19TVF9IQ1MsCisrICBBVlIzMl9PUENfU1RfSEdFLAorKyAgQVZSMzJfT1BDX1NUX0hMVCwKKysgIEFWUjMyX09QQ19TVF9ITUksCisrICBBVlIzMl9PUENfU1RfSFBMLAorKyAgQVZSMzJfT1BDX1NUX0hMUywKKysgIEFWUjMyX09QQ19TVF9IR1QsCisrICBBVlIzMl9PUENfU1RfSExFLAorKyAgQVZSMzJfT1BDX1NUX0hISSwKKysgIEFWUjMyX09QQ19TVF9IVlMsCisrICBBVlIzMl9PUENfU1RfSFZDLAorKyAgQVZSMzJfT1BDX1NUX0hRUywKKysgIEFWUjMyX09QQ19TVF9IQUwsCisrICBBVlIzMl9PUENfU1RfQkVRLAorKyAgQVZSMzJfT1BDX1NUX0JORSwKKysgIEFWUjMyX09QQ19TVF9CQ0MsCisrICBBVlIzMl9PUENfU1RfQkNTLAorKyAgQVZSMzJfT1BDX1NUX0JHRSwKKysgIEFWUjMyX09QQ19TVF9CTFQsCisrICBBVlIzMl9PUENfU1RfQk1JLAorKyAgQVZSMzJfT1BDX1NUX0JQTCwKKysgIEFWUjMyX09QQ19TVF9CTFMsCisrICBBVlIzMl9PUENfU1RfQkdULAorKyAgQVZSMzJfT1BDX1NUX0JMRSwKKysgIEFWUjMyX09QQ19TVF9CSEksCisrICBBVlIzMl9PUENfU1RfQlZTLAorKyAgQVZSMzJfT1BDX1NUX0JWQywKKysgIEFWUjMyX09QQ19TVF9CUVMsCisrICBBVlIzMl9PUENfU1RfQkFMLAorKyAgQVZSMzJfT1BDX01PVkgsCisrICBBVlIzMl9PUENfX0VORF8KKyt9OworKyNkZWZpbmUgQVZSMzJfTlJfT1BDT0RFUyBBVlIzMl9PUENfX0VORF8KKysKKytlbnVtIGF2cjMyX3N5bnRheF90eXBlCisreworKyAgQVZSMzJfU1lOVEFYX0FCUywKKysgIEFWUjMyX1NZTlRBWF9BQ0FMTCwKKysgIEFWUjMyX1NZTlRBWF9BQ1IsCisrICBBVlIzMl9TWU5UQVhfQURDLAorKyAgQVZSMzJfU1lOVEFYX0FERDEsCisrICBBVlIzMl9TWU5UQVhfQUREMiwKKysgIEFWUjMyX1NZTlRBWF9BRERBQlMsCisrICBBVlIzMl9TWU5UQVhfQURESEhfVywKKysgIEFWUjMyX1NZTlRBWF9BTkQxLAorKyAgQVZSMzJfU1lOVEFYX0FORDIsCisrICBBVlIzMl9TWU5UQVhfQU5EMywKKysgIEFWUjMyX1NZTlRBWF9BTkRILAorKyAgQVZSMzJfU1lOVEFYX0FOREhfQ09ILAorKyAgQVZSMzJfU1lOVEFYX0FOREwsCisrICBBVlIzMl9TWU5UQVhfQU5ETF9DT0gsCisrICBBVlIzMl9TWU5UQVhfQU5ETiwKKysgIEFWUjMyX1NZTlRBWF9BU1IxLAorKyAgQVZSMzJfU1lOVEFYX0FTUjMsCisrICBBVlIzMl9TWU5UQVhfQVNSMiwKKysgIEFWUjMyX1NZTlRBWF9CRkVYVFMsCisrICBBVlIzMl9TWU5UQVhfQkZFWFRVLAorKyAgQVZSMzJfU1lOVEFYX0JGSU5TLAorKyAgQVZSMzJfU1lOVEFYX0JMRCwKKysgIEFWUjMyX1NZTlRBWF9CUkVRMSwKKysgIEFWUjMyX1NZTlRBWF9CUk5FMSwKKysgIEFWUjMyX1NZTlRBWF9CUkNDMSwKKysgIEFWUjMyX1NZTlRBWF9CUkNTMSwKKysgIEFWUjMyX1NZTlRBWF9CUkdFMSwKKysgIEFWUjMyX1NZTlRBWF9CUkxUMSwKKysgIEFWUjMyX1NZTlRBWF9CUk1JMSwKKysgIEFWUjMyX1NZTlRBWF9CUlBMMSwKKysgIEFWUjMyX1NZTlRBWF9CUkhTMSwKKysgIEFWUjMyX1NZTlRBWF9CUkxPMSwKKysgIEFWUjMyX1NZTlRBWF9CUkVRMiwKKysgIEFWUjMyX1NZTlRBWF9CUk5FMiwKKysgIEFWUjMyX1NZTlRBWF9CUkNDMiwKKysgIEFWUjMyX1NZTlRBWF9CUkNTMiwKKysgIEFWUjMyX1NZTlRBWF9CUkdFMiwKKysgIEFWUjMyX1NZTlRBWF9CUkxUMiwKKysgIEFWUjMyX1NZTlRBWF9CUk1JMiwKKysgIEFWUjMyX1NZTlRBWF9CUlBMMiwKKysgIEFWUjMyX1NZTlRBWF9CUkxTLAorKyAgQVZSMzJfU1lOVEFYX0JSR1QsCisrICBBVlIzMl9TWU5UQVhfQlJMRSwKKysgIEFWUjMyX1NZTlRBWF9CUkhJLAorKyAgQVZSMzJfU1lOVEFYX0JSVlMsCisrICBBVlIzMl9TWU5UQVhfQlJWQywKKysgIEFWUjMyX1NZTlRBWF9CUlFTLAorKyAgQVZSMzJfU1lOVEFYX0JSQUwsCisrICBBVlIzMl9TWU5UQVhfQlJIUzIsCisrICBBVlIzMl9TWU5UQVhfQlJMTzIsCisrICBBVlIzMl9TWU5UQVhfQlJFQUtQT0lOVCwKKysgIEFWUjMyX1NZTlRBWF9CUkVWLAorKyAgQVZSMzJfU1lOVEFYX0JTVCwKKysgIEFWUjMyX1NZTlRBWF9DQUNIRSwKKysgIEFWUjMyX1NZTlRBWF9DQVNUU19CLAorKyAgQVZSMzJfU1lOVEFYX0NBU1RTX0gsCisrICBBVlIzMl9TWU5UQVhfQ0FTVFVfQiwKKysgIEFWUjMyX1NZTlRBWF9DQVNUVV9ILAorKyAgQVZSMzJfU1lOVEFYX0NCUiwKKysgIEFWUjMyX1NZTlRBWF9DTFosCisrICBBVlIzMl9TWU5UQVhfQ09NLAorKyAgQVZSMzJfU1lOVEFYX0NPUCwKKysgIEFWUjMyX1NZTlRBWF9DUF9CLAorKyAgQVZSMzJfU1lOVEFYX0NQX0gsCisrICBBVlIzMl9TWU5UQVhfQ1BfVzEsCisrICBBVlIzMl9TWU5UQVhfQ1BfVzIsCisrICBBVlIzMl9TWU5UQVhfQ1BfVzMsCisrICBBVlIzMl9TWU5UQVhfQ1BDMSwKKysgIEFWUjMyX1NZTlRBWF9DUEMyLAorKyAgQVZSMzJfU1lOVEFYX0NTUkYsCisrICBBVlIzMl9TWU5UQVhfQ1NSRkNaLAorKyAgQVZSMzJfU1lOVEFYX0RJVlMsCisrICBBVlIzMl9TWU5UQVhfRElWVSwKKysgIEFWUjMyX1NZTlRBWF9FT1IxLAorKyAgQVZSMzJfU1lOVEFYX0VPUjIsCisrICBBVlIzMl9TWU5UQVhfRU9SMywKKysgIEFWUjMyX1NZTlRBWF9FT1JMLAorKyAgQVZSMzJfU1lOVEFYX0VPUkgsCisrICBBVlIzMl9TWU5UQVhfRlJTLAorKyAgQVZSMzJfU1lOVEFYX0lDQUxMLAorKyAgQVZSMzJfU1lOVEFYX0lOQ0pPU1AsCisrICBBVlIzMl9TWU5UQVhfTERfRDEsCisrICBBVlIzMl9TWU5UQVhfTERfRDIsCisrICBBVlIzMl9TWU5UQVhfTERfRDMsCisrICBBVlIzMl9TWU5UQVhfTERfRDUsCisrICBBVlIzMl9TWU5UQVhfTERfRDQsCisrICBBVlIzMl9TWU5UQVhfTERfU0IyLAorKyAgQVZSMzJfU1lOVEFYX0xEX1NCMSwKKysgIEFWUjMyX1NZTlRBWF9MRF9VQjEsCisrICBBVlIzMl9TWU5UQVhfTERfVUIyLAorKyAgQVZSMzJfU1lOVEFYX0xEX1VCNSwKKysgIEFWUjMyX1NZTlRBWF9MRF9VQjMsCisrICBBVlIzMl9TWU5UQVhfTERfVUI0LAorKyAgQVZSMzJfU1lOVEFYX0xEX1NIMSwKKysgIEFWUjMyX1NZTlRBWF9MRF9TSDIsCisrICBBVlIzMl9TWU5UQVhfTERfU0g1LAorKyAgQVZSMzJfU1lOVEFYX0xEX1NIMywKKysgIEFWUjMyX1NZTlRBWF9MRF9TSDQsCisrICBBVlIzMl9TWU5UQVhfTERfVUgxLAorKyAgQVZSMzJfU1lOVEFYX0xEX1VIMiwKKysgIEFWUjMyX1NZTlRBWF9MRF9VSDUsCisrICBBVlIzMl9TWU5UQVhfTERfVUgzLAorKyAgQVZSMzJfU1lOVEFYX0xEX1VINCwKKysgIEFWUjMyX1NZTlRBWF9MRF9XMSwKKysgIEFWUjMyX1NZTlRBWF9MRF9XMiwKKysgIEFWUjMyX1NZTlRBWF9MRF9XNSwKKysgIEFWUjMyX1NZTlRBWF9MRF9XNiwKKysgIEFWUjMyX1NZTlRBWF9MRF9XMywKKysgIEFWUjMyX1NZTlRBWF9MRF9XNCwKKysgIEFWUjMyX1NZTlRBWF9MRENfRDEsCisrICBBVlIzMl9TWU5UQVhfTERDX0QyLAorKyAgQVZSMzJfU1lOVEFYX0xEQ19EMywKKysgIEFWUjMyX1NZTlRBWF9MRENfVzEsCisrICBBVlIzMl9TWU5UQVhfTERDX1cyLAorKyAgQVZSMzJfU1lOVEFYX0xEQ19XMywKKysgIEFWUjMyX1NZTlRBWF9MREMwX0QsCisrICBBVlIzMl9TWU5UQVhfTERDMF9XLAorKyAgQVZSMzJfU1lOVEFYX0xEQ01fRCwKKysgIEFWUjMyX1NZTlRBWF9MRENNX0RfUFUsCisrICBBVlIzMl9TWU5UQVhfTERDTV9XLAorKyAgQVZSMzJfU1lOVEFYX0xEQ01fV19QVSwKKysgIEFWUjMyX1NZTlRBWF9MRERQQywKKysgIEFWUjMyX1NZTlRBWF9MRERQQ19FWFQsCisrICBBVlIzMl9TWU5UQVhfTEREU1AsCisrICBBVlIzMl9TWU5UQVhfTERJTlNfQiwKKysgIEFWUjMyX1NZTlRBWF9MRElOU19ILAorKyAgQVZSMzJfU1lOVEFYX0xETSwKKysgIEFWUjMyX1NZTlRBWF9MRE1UUywKKysgIEFWUjMyX1NZTlRBWF9MRE1UU19QVSwKKysgIEFWUjMyX1NZTlRBWF9MRFNXUF9TSCwKKysgIEFWUjMyX1NZTlRBWF9MRFNXUF9VSCwKKysgIEFWUjMyX1NZTlRBWF9MRFNXUF9XLAorKyAgQVZSMzJfU1lOVEFYX0xTTDEsCisrICBBVlIzMl9TWU5UQVhfTFNMMywKKysgIEFWUjMyX1NZTlRBWF9MU0wyLAorKyAgQVZSMzJfU1lOVEFYX0xTUjEsCisrICBBVlIzMl9TWU5UQVhfTFNSMywKKysgIEFWUjMyX1NZTlRBWF9MU1IyLAorKyAgQVZSMzJfU1lOVEFYX01BQywKKysgIEFWUjMyX1NZTlRBWF9NQUNISF9ELAorKyAgQVZSMzJfU1lOVEFYX01BQ0hIX1csCisrICBBVlIzMl9TWU5UQVhfTUFDU19ELAorKyAgQVZSMzJfU1lOVEFYX01BQ1NBVEhIX1csCisrICBBVlIzMl9TWU5UQVhfTUFDVUQsCisrICBBVlIzMl9TWU5UQVhfTUFDV0hfRCwKKysgIEFWUjMyX1NZTlRBWF9NQVgsCisrICBBVlIzMl9TWU5UQVhfTUNBTEwsCisrICBBVlIzMl9TWU5UQVhfTUZEUiwKKysgIEFWUjMyX1NZTlRBWF9NRlNSLAorKyAgQVZSMzJfU1lOVEFYX01JTiwKKysgIEFWUjMyX1NZTlRBWF9NT1YzLAorKyAgQVZSMzJfU1lOVEFYX01PVjEsCisrICBBVlIzMl9TWU5UQVhfTU9WMiwKKysgIEFWUjMyX1NZTlRBWF9NT1ZFUTEsCisrICBBVlIzMl9TWU5UQVhfTU9WTkUxLAorKyAgQVZSMzJfU1lOVEFYX01PVkNDMSwKKysgIEFWUjMyX1NZTlRBWF9NT1ZDUzEsCisrICBBVlIzMl9TWU5UQVhfTU9WR0UxLAorKyAgQVZSMzJfU1lOVEFYX01PVkxUMSwKKysgIEFWUjMyX1NZTlRBWF9NT1ZNSTEsCisrICBBVlIzMl9TWU5UQVhfTU9WUEwxLAorKyAgQVZSMzJfU1lOVEFYX01PVkxTMSwKKysgIEFWUjMyX1NZTlRBWF9NT1ZHVDEsCisrICBBVlIzMl9TWU5UQVhfTU9WTEUxLAorKyAgQVZSMzJfU1lOVEFYX01PVkhJMSwKKysgIEFWUjMyX1NZTlRBWF9NT1ZWUzEsCisrICBBVlIzMl9TWU5UQVhfTU9WVkMxLAorKyAgQVZSMzJfU1lOVEFYX01PVlFTMSwKKysgIEFWUjMyX1NZTlRBWF9NT1ZBTDEsCisrICBBVlIzMl9TWU5UQVhfTU9WSFMxLAorKyAgQVZSMzJfU1lOVEFYX01PVkxPMSwKKysgIEFWUjMyX1NZTlRBWF9NT1ZFUTIsCisrICBBVlIzMl9TWU5UQVhfTU9WTkUyLAorKyAgQVZSMzJfU1lOVEFYX01PVkNDMiwKKysgIEFWUjMyX1NZTlRBWF9NT1ZDUzIsCisrICBBVlIzMl9TWU5UQVhfTU9WR0UyLAorKyAgQVZSMzJfU1lOVEFYX01PVkxUMiwKKysgIEFWUjMyX1NZTlRBWF9NT1ZNSTIsCisrICBBVlIzMl9TWU5UQVhfTU9WUEwyLAorKyAgQVZSMzJfU1lOVEFYX01PVkxTMiwKKysgIEFWUjMyX1NZTlRBWF9NT1ZHVDIsCisrICBBVlIzMl9TWU5UQVhfTU9WTEUyLAorKyAgQVZSMzJfU1lOVEFYX01PVkhJMiwKKysgIEFWUjMyX1NZTlRBWF9NT1ZWUzIsCisrICBBVlIzMl9TWU5UQVhfTU9WVkMyLAorKyAgQVZSMzJfU1lOVEFYX01PVlFTMiwKKysgIEFWUjMyX1NZTlRBWF9NT1ZBTDIsCisrICBBVlIzMl9TWU5UQVhfTU9WSFMyLAorKyAgQVZSMzJfU1lOVEFYX01PVkxPMiwKKysgIEFWUjMyX1NZTlRBWF9NVERSLAorKyAgQVZSMzJfU1lOVEFYX01UU1IsCisrICBBVlIzMl9TWU5UQVhfTVVMMSwKKysgIEFWUjMyX1NZTlRBWF9NVUwyLAorKyAgQVZSMzJfU1lOVEFYX01VTDMsCisrICBBVlIzMl9TWU5UQVhfTVVMSEhfVywKKysgIEFWUjMyX1NZTlRBWF9NVUxOSEhfVywKKysgIEFWUjMyX1NZTlRBWF9NVUxOV0hfRCwKKysgIEFWUjMyX1NZTlRBWF9NVUxTRCwKKysgIEFWUjMyX1NZTlRBWF9NVUxTQVRISF9ILAorKyAgQVZSMzJfU1lOVEFYX01VTFNBVEhIX1csCisrICBBVlIzMl9TWU5UQVhfTVVMU0FUUk5ESEhfSCwKKysgIEFWUjMyX1NZTlRBWF9NVUxTQVRSTkRXSF9XLAorKyAgQVZSMzJfU1lOVEFYX01VTFNBVFdIX1csCisrICBBVlIzMl9TWU5UQVhfTVVMVV9ELAorKyAgQVZSMzJfU1lOVEFYX01VTFdIX0QsCisrICBBVlIzMl9TWU5UQVhfTVVTRlIsCisrICBBVlIzMl9TWU5UQVhfTVVTVFIsCisrICBBVlIzMl9TWU5UQVhfTVZDUl9ELAorKyAgQVZSMzJfU1lOVEFYX01WQ1JfVywKKysgIEFWUjMyX1NZTlRBWF9NVlJDX0QsCisrICBBVlIzMl9TWU5UQVhfTVZSQ19XLAorKyAgQVZSMzJfU1lOVEFYX05FRywKKysgIEFWUjMyX1NZTlRBWF9OT1AsCisrICBBVlIzMl9TWU5UQVhfT1IxLAorKyAgQVZSMzJfU1lOVEFYX09SMiwKKysgIEFWUjMyX1NZTlRBWF9PUjMsCisrICBBVlIzMl9TWU5UQVhfT1JILAorKyAgQVZSMzJfU1lOVEFYX09STCwKKysgIEFWUjMyX1NZTlRBWF9QQUJTX1NCLAorKyAgQVZSMzJfU1lOVEFYX1BBQlNfU0gsCisrICBBVlIzMl9TWU5UQVhfUEFDS1NIX1NCLAorKyAgQVZSMzJfU1lOVEFYX1BBQ0tTSF9VQiwKKysgIEFWUjMyX1NZTlRBWF9QQUNLV19TSCwKKysgIEFWUjMyX1NZTlRBWF9QQUREX0IsCisrICBBVlIzMl9TWU5UQVhfUEFERF9ILAorKyAgQVZSMzJfU1lOVEFYX1BBRERIX1NILAorKyAgQVZSMzJfU1lOVEFYX1BBRERIX1VCLAorKyAgQVZSMzJfU1lOVEFYX1BBRERTX1NCLAorKyAgQVZSMzJfU1lOVEFYX1BBRERTX1NILAorKyAgQVZSMzJfU1lOVEFYX1BBRERTX1VCLAorKyAgQVZSMzJfU1lOVEFYX1BBRERTX1VILAorKyAgQVZSMzJfU1lOVEFYX1BBRERTVUJfSCwKKysgIEFWUjMyX1NZTlRBWF9QQUREU1VCSF9TSCwKKysgIEFWUjMyX1NZTlRBWF9QQUREU1VCU19TSCwKKysgIEFWUjMyX1NZTlRBWF9QQUREU1VCU19VSCwKKysgIEFWUjMyX1NZTlRBWF9QQUREWF9ILAorKyAgQVZSMzJfU1lOVEFYX1BBRERYSF9TSCwKKysgIEFWUjMyX1NZTlRBWF9QQUREWFNfU0gsCisrICBBVlIzMl9TWU5UQVhfUEFERFhTX1VILAorKyAgQVZSMzJfU1lOVEFYX1BBU1JfQiwKKysgIEFWUjMyX1NZTlRBWF9QQVNSX0gsCisrICBBVlIzMl9TWU5UQVhfUEFWR19TSCwKKysgIEFWUjMyX1NZTlRBWF9QQVZHX1VCLAorKyAgQVZSMzJfU1lOVEFYX1BMU0xfQiwKKysgIEFWUjMyX1NZTlRBWF9QTFNMX0gsCisrICBBVlIzMl9TWU5UQVhfUExTUl9CLAorKyAgQVZSMzJfU1lOVEFYX1BMU1JfSCwKKysgIEFWUjMyX1NZTlRBWF9QTUFYX1NILAorKyAgQVZSMzJfU1lOVEFYX1BNQVhfVUIsCisrICBBVlIzMl9TWU5UQVhfUE1JTl9TSCwKKysgIEFWUjMyX1NZTlRBWF9QTUlOX1VCLAorKyAgQVZSMzJfU1lOVEFYX1BPUEpDLAorKyAgQVZSMzJfU1lOVEFYX1BPUE0sCisrICBBVlIzMl9TWU5UQVhfUE9QTV9FLAorKyAgQVZSMzJfU1lOVEFYX1BSRUYsCisrICBBVlIzMl9TWU5UQVhfUFNBRCwKKysgIEFWUjMyX1NZTlRBWF9QU1VCX0IsCisrICBBVlIzMl9TWU5UQVhfUFNVQl9ILAorKyAgQVZSMzJfU1lOVEFYX1BTVUJBRERfSCwKKysgIEFWUjMyX1NZTlRBWF9QU1VCQURESF9TSCwKKysgIEFWUjMyX1NZTlRBWF9QU1VCQUREU19TSCwKKysgIEFWUjMyX1NZTlRBWF9QU1VCQUREU19VSCwKKysgIEFWUjMyX1NZTlRBWF9QU1VCSF9TSCwKKysgIEFWUjMyX1NZTlRBWF9QU1VCSF9VQiwKKysgIEFWUjMyX1NZTlRBWF9QU1VCU19TQiwKKysgIEFWUjMyX1NZTlRBWF9QU1VCU19TSCwKKysgIEFWUjMyX1NZTlRBWF9QU1VCU19VQiwKKysgIEFWUjMyX1NZTlRBWF9QU1VCU19VSCwKKysgIEFWUjMyX1NZTlRBWF9QU1VCWF9ILAorKyAgQVZSMzJfU1lOVEFYX1BTVUJYSF9TSCwKKysgIEFWUjMyX1NZTlRBWF9QU1VCWFNfU0gsCisrICBBVlIzMl9TWU5UQVhfUFNVQlhTX1VILAorKyAgQVZSMzJfU1lOVEFYX1BVTlBDS1NCX0gsCisrICBBVlIzMl9TWU5UQVhfUFVOUENLVUJfSCwKKysgIEFWUjMyX1NZTlRBWF9QVVNISkMsCisrICBBVlIzMl9TWU5UQVhfUFVTSE0sCisrICBBVlIzMl9TWU5UQVhfUFVTSE1fRSwKKysgIEFWUjMyX1NZTlRBWF9SQ0FMTDEsCisrICBBVlIzMl9TWU5UQVhfUkNBTEwyLAorKyAgQVZSMzJfU1lOVEFYX1JFVEVRLAorKyAgQVZSMzJfU1lOVEFYX1JFVE5FLAorKyAgQVZSMzJfU1lOVEFYX1JFVENDLAorKyAgQVZSMzJfU1lOVEFYX1JFVENTLAorKyAgQVZSMzJfU1lOVEFYX1JFVEdFLAorKyAgQVZSMzJfU1lOVEFYX1JFVExULAorKyAgQVZSMzJfU1lOVEFYX1JFVE1JLAorKyAgQVZSMzJfU1lOVEFYX1JFVFBMLAorKyAgQVZSMzJfU1lOVEFYX1JFVExTLAorKyAgQVZSMzJfU1lOVEFYX1JFVEdULAorKyAgQVZSMzJfU1lOVEFYX1JFVExFLAorKyAgQVZSMzJfU1lOVEFYX1JFVEhJLAorKyAgQVZSMzJfU1lOVEFYX1JFVFZTLAorKyAgQVZSMzJfU1lOVEFYX1JFVFZDLAorKyAgQVZSMzJfU1lOVEFYX1JFVFFTLAorKyAgQVZSMzJfU1lOVEFYX1JFVEFMLAorKyAgQVZSMzJfU1lOVEFYX1JFVEhTLAorKyAgQVZSMzJfU1lOVEFYX1JFVExPLAorKyAgQVZSMzJfU1lOVEFYX1JFVEQsCisrICBBVlIzMl9TWU5UQVhfUkVURSwKKysgIEFWUjMyX1NZTlRBWF9SRVRKLAorKyAgQVZSMzJfU1lOVEFYX1JFVFMsCisrICBBVlIzMl9TWU5UQVhfUkpNUCwKKysgIEFWUjMyX1NZTlRBWF9ST0wsCisrICBBVlIzMl9TWU5UQVhfUk9SLAorKyAgQVZSMzJfU1lOVEFYX1JTVUIxLAorKyAgQVZSMzJfU1lOVEFYX1JTVUIyLAorKyAgQVZSMzJfU1lOVEFYX1NBVEFERF9ILAorKyAgQVZSMzJfU1lOVEFYX1NBVEFERF9XLAorKyAgQVZSMzJfU1lOVEFYX1NBVFJORFMsCisrICBBVlIzMl9TWU5UQVhfU0FUUk5EVSwKKysgIEFWUjMyX1NZTlRBWF9TQVRTLAorKyAgQVZSMzJfU1lOVEFYX1NBVFNVQl9ILAorKyAgQVZSMzJfU1lOVEFYX1NBVFNVQl9XMSwKKysgIEFWUjMyX1NZTlRBWF9TQVRTVUJfVzIsCisrICBBVlIzMl9TWU5UQVhfU0FUVSwKKysgIEFWUjMyX1NZTlRBWF9TQkMsCisrICBBVlIzMl9TWU5UQVhfU0JSLAorKyAgQVZSMzJfU1lOVEFYX1NDQUxMLAorKyAgQVZSMzJfU1lOVEFYX1NDUiwKKysgIEFWUjMyX1NZTlRBWF9TTEVFUCwKKysgIEFWUjMyX1NZTlRBWF9TUkVRLAorKyAgQVZSMzJfU1lOVEFYX1NSTkUsCisrICBBVlIzMl9TWU5UQVhfU1JDQywKKysgIEFWUjMyX1NZTlRBWF9TUkNTLAorKyAgQVZSMzJfU1lOVEFYX1NSR0UsCisrICBBVlIzMl9TWU5UQVhfU1JMVCwKKysgIEFWUjMyX1NZTlRBWF9TUk1JLAorKyAgQVZSMzJfU1lOVEFYX1NSUEwsCisrICBBVlIzMl9TWU5UQVhfU1JMUywKKysgIEFWUjMyX1NZTlRBWF9TUkdULAorKyAgQVZSMzJfU1lOVEFYX1NSTEUsCisrICBBVlIzMl9TWU5UQVhfU1JISSwKKysgIEFWUjMyX1NZTlRBWF9TUlZTLAorKyAgQVZSMzJfU1lOVEFYX1NSVkMsCisrICBBVlIzMl9TWU5UQVhfU1JRUywKKysgIEFWUjMyX1NZTlRBWF9TUkFMLAorKyAgQVZSMzJfU1lOVEFYX1NSSFMsCisrICBBVlIzMl9TWU5UQVhfU1JMTywKKysgIEFWUjMyX1NZTlRBWF9TU1JGLAorKyAgQVZSMzJfU1lOVEFYX1NUX0IxLAorKyAgQVZSMzJfU1lOVEFYX1NUX0IyLAorKyAgQVZSMzJfU1lOVEFYX1NUX0I1LAorKyAgQVZSMzJfU1lOVEFYX1NUX0IzLAorKyAgQVZSMzJfU1lOVEFYX1NUX0I0LAorKyAgQVZSMzJfU1lOVEFYX1NUX0QxLAorKyAgQVZSMzJfU1lOVEFYX1NUX0QyLAorKyAgQVZSMzJfU1lOVEFYX1NUX0QzLAorKyAgQVZSMzJfU1lOVEFYX1NUX0Q1LAorKyAgQVZSMzJfU1lOVEFYX1NUX0Q0LAorKyAgQVZSMzJfU1lOVEFYX1NUX0gxLAorKyAgQVZSMzJfU1lOVEFYX1NUX0gyLAorKyAgQVZSMzJfU1lOVEFYX1NUX0g1LAorKyAgQVZSMzJfU1lOVEFYX1NUX0gzLAorKyAgQVZSMzJfU1lOVEFYX1NUX0g0LAorKyAgQVZSMzJfU1lOVEFYX1NUX1cxLAorKyAgQVZSMzJfU1lOVEFYX1NUX1cyLAorKyAgQVZSMzJfU1lOVEFYX1NUX1c1LAorKyAgQVZSMzJfU1lOVEFYX1NUX1czLAorKyAgQVZSMzJfU1lOVEFYX1NUX1c0LAorKyAgQVZSMzJfU1lOVEFYX1NUQ19EMSwKKysgIEFWUjMyX1NZTlRBWF9TVENfRDIsCisrICBBVlIzMl9TWU5UQVhfU1RDX0QzLAorKyAgQVZSMzJfU1lOVEFYX1NUQ19XMSwKKysgIEFWUjMyX1NZTlRBWF9TVENfVzIsCisrICBBVlIzMl9TWU5UQVhfU1RDX1czLAorKyAgQVZSMzJfU1lOVEFYX1NUQzBfRCwKKysgIEFWUjMyX1NZTlRBWF9TVEMwX1csCisrICBBVlIzMl9TWU5UQVhfU1RDTV9ELAorKyAgQVZSMzJfU1lOVEFYX1NUQ01fRF9QVSwKKysgIEFWUjMyX1NZTlRBWF9TVENNX1csCisrICBBVlIzMl9TWU5UQVhfU1RDTV9XX1BVLAorKyAgQVZSMzJfU1lOVEFYX1NUQ09ORCwKKysgIEFWUjMyX1NZTlRBWF9TVERTUCwKKysgIEFWUjMyX1NZTlRBWF9TVEhIX1cyLAorKyAgQVZSMzJfU1lOVEFYX1NUSEhfVzEsCisrICBBVlIzMl9TWU5UQVhfU1RNLAorKyAgQVZSMzJfU1lOVEFYX1NUTV9QVSwKKysgIEFWUjMyX1NZTlRBWF9TVE1UUywKKysgIEFWUjMyX1NZTlRBWF9TVE1UU19QVSwKKysgIEFWUjMyX1NZTlRBWF9TVFNXUF9ILAorKyAgQVZSMzJfU1lOVEFYX1NUU1dQX1csCisrICBBVlIzMl9TWU5UQVhfU1VCMSwKKysgIEFWUjMyX1NZTlRBWF9TVUIyLAorKyAgQVZSMzJfU1lOVEFYX1NVQjUsCisrICBBVlIzMl9TWU5UQVhfU1VCM19TUCwKKysgIEFWUjMyX1NZTlRBWF9TVUIzLAorKyAgQVZSMzJfU1lOVEFYX1NVQjQsCisrICBBVlIzMl9TWU5UQVhfU1VCRVEsCisrICBBVlIzMl9TWU5UQVhfU1VCTkUsCisrICBBVlIzMl9TWU5UQVhfU1VCQ0MsCisrICBBVlIzMl9TWU5UQVhfU1VCQ1MsCisrICBBVlIzMl9TWU5UQVhfU1VCR0UsCisrICBBVlIzMl9TWU5UQVhfU1VCTFQsCisrICBBVlIzMl9TWU5UQVhfU1VCTUksCisrICBBVlIzMl9TWU5UQVhfU1VCUEwsCisrICBBVlIzMl9TWU5UQVhfU1VCTFMsCisrICBBVlIzMl9TWU5UQVhfU1VCR1QsCisrICBBVlIzMl9TWU5UQVhfU1VCTEUsCisrICBBVlIzMl9TWU5UQVhfU1VCSEksCisrICBBVlIzMl9TWU5UQVhfU1VCVlMsCisrICBBVlIzMl9TWU5UQVhfU1VCVkMsCisrICBBVlIzMl9TWU5UQVhfU1VCUVMsCisrICBBVlIzMl9TWU5UQVhfU1VCQUwsCisrICBBVlIzMl9TWU5UQVhfU1VCSFMsCisrICBBVlIzMl9TWU5UQVhfU1VCTE8sCisrICBBVlIzMl9TWU5UQVhfU1VCRkVRLAorKyAgQVZSMzJfU1lOVEFYX1NVQkZORSwKKysgIEFWUjMyX1NZTlRBWF9TVUJGQ0MsCisrICBBVlIzMl9TWU5UQVhfU1VCRkNTLAorKyAgQVZSMzJfU1lOVEFYX1NVQkZHRSwKKysgIEFWUjMyX1NZTlRBWF9TVUJGTFQsCisrICBBVlIzMl9TWU5UQVhfU1VCRk1JLAorKyAgQVZSMzJfU1lOVEFYX1NVQkZQTCwKKysgIEFWUjMyX1NZTlRBWF9TVUJGTFMsCisrICBBVlIzMl9TWU5UQVhfU1VCRkdULAorKyAgQVZSMzJfU1lOVEFYX1NVQkZMRSwKKysgIEFWUjMyX1NZTlRBWF9TVUJGSEksCisrICBBVlIzMl9TWU5UQVhfU1VCRlZTLAorKyAgQVZSMzJfU1lOVEFYX1NVQkZWQywKKysgIEFWUjMyX1NZTlRBWF9TVUJGUVMsCisrICBBVlIzMl9TWU5UQVhfU1VCRkFMLAorKyAgQVZSMzJfU1lOVEFYX1NVQkZIUywKKysgIEFWUjMyX1NZTlRBWF9TVUJGTE8sCisrICBBVlIzMl9TWU5UQVhfU1VCSEhfVywKKysgIEFWUjMyX1NZTlRBWF9TV0FQX0IsCisrICBBVlIzMl9TWU5UQVhfU1dBUF9CSCwKKysgIEFWUjMyX1NZTlRBWF9TV0FQX0gsCisrICBBVlIzMl9TWU5UQVhfU1lOQywKKysgIEFWUjMyX1NZTlRBWF9UTEJSLAorKyAgQVZSMzJfU1lOVEFYX1RMQlMsCisrICBBVlIzMl9TWU5UQVhfVExCVywKKysgIEFWUjMyX1NZTlRBWF9UTkJaLAorKyAgQVZSMzJfU1lOVEFYX1RTVCwKKysgIEFWUjMyX1NZTlRBWF9YQ0hHLAorKyAgQVZSMzJfU1lOVEFYX01FTUMsCisrICBBVlIzMl9TWU5UQVhfTUVNUywKKysgIEFWUjMyX1NZTlRBWF9NRU1ULAorKyAgQVZSMzJfU1lOVEFYX0ZBRERfUywKKysgIEFWUjMyX1NZTlRBWF9GQUREX0QsCisrICBBVlIzMl9TWU5UQVhfRlNVQl9TLAorKyAgQVZSMzJfU1lOVEFYX0ZTVUJfRCwKKysgIEFWUjMyX1NZTlRBWF9GTUFDX1MsCisrICBBVlIzMl9TWU5UQVhfRk1BQ19ELAorKyAgQVZSMzJfU1lOVEFYX0ZOTUFDX1MsCisrICBBVlIzMl9TWU5UQVhfRk5NQUNfRCwKKysgIEFWUjMyX1NZTlRBWF9GTVNDX1MsCisrICBBVlIzMl9TWU5UQVhfRk1TQ19ELAorKyAgQVZSMzJfU1lOVEFYX0ZOTVNDX1MsCisrICBBVlIzMl9TWU5UQVhfRk5NU0NfRCwKKysgIEFWUjMyX1NZTlRBWF9GTVVMX1MsCisrICBBVlIzMl9TWU5UQVhfRk1VTF9ELAorKyAgQVZSMzJfU1lOVEFYX0ZOTVVMX1MsCisrICBBVlIzMl9TWU5UQVhfRk5NVUxfRCwKKysgIEFWUjMyX1NZTlRBWF9GTkVHX1MsCisrICBBVlIzMl9TWU5UQVhfRk5FR19ELAorKyAgQVZSMzJfU1lOVEFYX0ZBQlNfUywKKysgIEFWUjMyX1NZTlRBWF9GQUJTX0QsCisrICBBVlIzMl9TWU5UQVhfRkNNUF9TLAorKyAgQVZSMzJfU1lOVEFYX0ZDTVBfRCwKKysgIEFWUjMyX1NZTlRBWF9GTU9WMV9TLAorKyAgQVZSMzJfU1lOVEFYX0ZNT1YxX0QsCisrICBBVlIzMl9TWU5UQVhfRk1PVjJfUywKKysgIEFWUjMyX1NZTlRBWF9GTU9WMl9ELAorKyAgQVZSMzJfU1lOVEFYX0ZNT1YzX1MsCisrICBBVlIzMl9TWU5UQVhfRk1PVjNfRCwKKysgIEFWUjMyX1NZTlRBWF9GQ0FTVFNfRCwKKysgIEFWUjMyX1NZTlRBWF9GQ0FTVERfUywKKysgIEFWUjMyX1NZTlRBWF9MREFfVywKKysgIEFWUjMyX1NZTlRBWF9DQUxMLAorKyAgQVZSMzJfU1lOVEFYX1BJQ09TVk1BQzAsCisrICBBVlIzMl9TWU5UQVhfUElDT1NWTUFDMSwKKysgIEFWUjMyX1NZTlRBWF9QSUNPU1ZNQUMyLAorKyAgQVZSMzJfU1lOVEFYX1BJQ09TVk1BQzMsCisrICBBVlIzMl9TWU5UQVhfUElDT1NWTVVMMCwKKysgIEFWUjMyX1NZTlRBWF9QSUNPU1ZNVUwxLAorKyAgQVZSMzJfU1lOVEFYX1BJQ09TVk1VTDIsCisrICBBVlIzMl9TWU5UQVhfUElDT1NWTVVMMywKKysgIEFWUjMyX1NZTlRBWF9QSUNPVk1BQzAsCisrICBBVlIzMl9TWU5UQVhfUElDT1ZNQUMxLAorKyAgQVZSMzJfU1lOVEFYX1BJQ09WTUFDMiwKKysgIEFWUjMyX1NZTlRBWF9QSUNPVk1BQzMsCisrICBBVlIzMl9TWU5UQVhfUElDT1ZNVUwwLAorKyAgQVZSMzJfU1lOVEFYX1BJQ09WTVVMMSwKKysgIEFWUjMyX1NZTlRBWF9QSUNPVk1VTDIsCisrICBBVlIzMl9TWU5UQVhfUElDT1ZNVUwzLAorKyAgQVZSMzJfU1lOVEFYX1BJQ09MRF9EMiwKKysgIEFWUjMyX1NZTlRBWF9QSUNPTERfRDMsCisrICBBVlIzMl9TWU5UQVhfUElDT0xEX0QxLAorKyAgQVZSMzJfU1lOVEFYX1BJQ09MRF9XMiwKKysgIEFWUjMyX1NZTlRBWF9QSUNPTERfVzMsCisrICBBVlIzMl9TWU5UQVhfUElDT0xEX1cxLAorKyAgQVZSMzJfU1lOVEFYX1BJQ09MRE1fRCwKKysgIEFWUjMyX1NZTlRBWF9QSUNPTERNX0RfUFUsCisrICBBVlIzMl9TWU5UQVhfUElDT0xETV9XLAorKyAgQVZSMzJfU1lOVEFYX1BJQ09MRE1fV19QVSwKKysgIEFWUjMyX1NZTlRBWF9QSUNPTVZfRDEsCisrICBBVlIzMl9TWU5UQVhfUElDT01WX0QyLAorKyAgQVZSMzJfU1lOVEFYX1BJQ09NVl9XMSwKKysgIEFWUjMyX1NZTlRBWF9QSUNPTVZfVzIsCisrICBBVlIzMl9TWU5UQVhfUElDT1NUX0QyLAorKyAgQVZSMzJfU1lOVEFYX1BJQ09TVF9EMywKKysgIEFWUjMyX1NZTlRBWF9QSUNPU1RfRDEsCisrICBBVlIzMl9TWU5UQVhfUElDT1NUX1cyLAorKyAgQVZSMzJfU1lOVEFYX1BJQ09TVF9XMywKKysgIEFWUjMyX1NZTlRBWF9QSUNPU1RfVzEsCisrICBBVlIzMl9TWU5UQVhfUElDT1NUTV9ELAorKyAgQVZSMzJfU1lOVEFYX1BJQ09TVE1fRF9QVSwKKysgIEFWUjMyX1NZTlRBWF9QSUNPU1RNX1csCisrICBBVlIzMl9TWU5UQVhfUElDT1NUTV9XX1BVLAorKyAgQVZSMzJfU1lOVEFYX1JTVUJFUSwKKysgIEFWUjMyX1NZTlRBWF9SU1VCTkUsCisrICBBVlIzMl9TWU5UQVhfUlNVQkNDLAorKyAgQVZSMzJfU1lOVEFYX1JTVUJDUywKKysgIEFWUjMyX1NZTlRBWF9SU1VCR0UsCisrICBBVlIzMl9TWU5UQVhfUlNVQkxULAorKyAgQVZSMzJfU1lOVEFYX1JTVUJNSSwKKysgIEFWUjMyX1NZTlRBWF9SU1VCUEwsCisrICBBVlIzMl9TWU5UQVhfUlNVQkxTLAorKyAgQVZSMzJfU1lOVEFYX1JTVUJHVCwKKysgIEFWUjMyX1NZTlRBWF9SU1VCTEUsCisrICBBVlIzMl9TWU5UQVhfUlNVQkhJLAorKyAgQVZSMzJfU1lOVEFYX1JTVUJWUywKKysgIEFWUjMyX1NZTlRBWF9SU1VCVkMsCisrICBBVlIzMl9TWU5UQVhfUlNVQlFTLAorKyAgQVZSMzJfU1lOVEFYX1JTVUJBTCwKKysgIEFWUjMyX1NZTlRBWF9SU1VCSFMsCisrICBBVlIzMl9TWU5UQVhfUlNVQkxPLAorKyAgQVZSMzJfU1lOVEFYX0FEREVRLAorKyAgQVZSMzJfU1lOVEFYX0FERE5FLAorKyAgQVZSMzJfU1lOVEFYX0FERENDLAorKyAgQVZSMzJfU1lOVEFYX0FERENTLAorKyAgQVZSMzJfU1lOVEFYX0FEREdFLAorKyAgQVZSMzJfU1lOVEFYX0FERExULAorKyAgQVZSMzJfU1lOVEFYX0FERE1JLAorKyAgQVZSMzJfU1lOVEFYX0FERFBMLAorKyAgQVZSMzJfU1lOVEFYX0FERExTLAorKyAgQVZSMzJfU1lOVEFYX0FEREdULAorKyAgQVZSMzJfU1lOVEFYX0FERExFLAorKyAgQVZSMzJfU1lOVEFYX0FEREhJLAorKyAgQVZSMzJfU1lOVEFYX0FERFZTLAorKyAgQVZSMzJfU1lOVEFYX0FERFZDLAorKyAgQVZSMzJfU1lOVEFYX0FERFFTLAorKyAgQVZSMzJfU1lOVEFYX0FEREFMLAorKyAgQVZSMzJfU1lOVEFYX0FEREhTLAorKyAgQVZSMzJfU1lOVEFYX0FERExPLAorKyAgQVZSMzJfU1lOVEFYX1NVQjJFUSwKKysgIEFWUjMyX1NZTlRBWF9TVUIyTkUsCisrICBBVlIzMl9TWU5UQVhfU1VCMkNDLAorKyAgQVZSMzJfU1lOVEFYX1NVQjJDUywKKysgIEFWUjMyX1NZTlRBWF9TVUIyR0UsCisrICBBVlIzMl9TWU5UQVhfU1VCMkxULAorKyAgQVZSMzJfU1lOVEFYX1NVQjJNSSwKKysgIEFWUjMyX1NZTlRBWF9TVUIyUEwsCisrICBBVlIzMl9TWU5UQVhfU1VCMkxTLAorKyAgQVZSMzJfU1lOVEFYX1NVQjJHVCwKKysgIEFWUjMyX1NZTlRBWF9TVUIyTEUsCisrICBBVlIzMl9TWU5UQVhfU1VCMkhJLAorKyAgQVZSMzJfU1lOVEFYX1NVQjJWUywKKysgIEFWUjMyX1NZTlRBWF9TVUIyVkMsCisrICBBVlIzMl9TWU5UQVhfU1VCMlFTLAorKyAgQVZSMzJfU1lOVEFYX1NVQjJBTCwKKysgIEFWUjMyX1NZTlRBWF9TVUIySFMsCisrICBBVlIzMl9TWU5UQVhfU1VCMkxPLAorKyAgQVZSMzJfU1lOVEFYX0FOREVRLAorKyAgQVZSMzJfU1lOVEFYX0FORE5FLAorKyAgQVZSMzJfU1lOVEFYX0FORENDLAorKyAgQVZSMzJfU1lOVEFYX0FORENTLAorKyAgQVZSMzJfU1lOVEFYX0FOREdFLAorKyAgQVZSMzJfU1lOVEFYX0FORExULAorKyAgQVZSMzJfU1lOVEFYX0FORE1JLAorKyAgQVZSMzJfU1lOVEFYX0FORFBMLAorKyAgQVZSMzJfU1lOVEFYX0FORExTLAorKyAgQVZSMzJfU1lOVEFYX0FOREdULAorKyAgQVZSMzJfU1lOVEFYX0FORExFLAorKyAgQVZSMzJfU1lOVEFYX0FOREhJLAorKyAgQVZSMzJfU1lOVEFYX0FORFZTLAorKyAgQVZSMzJfU1lOVEFYX0FORFZDLAorKyAgQVZSMzJfU1lOVEFYX0FORFFTLAorKyAgQVZSMzJfU1lOVEFYX0FOREFMLAorKyAgQVZSMzJfU1lOVEFYX0FOREhTLAorKyAgQVZSMzJfU1lOVEFYX0FORExPLAorKyAgQVZSMzJfU1lOVEFYX09SRVEsCisrICBBVlIzMl9TWU5UQVhfT1JORSwKKysgIEFWUjMyX1NZTlRBWF9PUkNDLAorKyAgQVZSMzJfU1lOVEFYX09SQ1MsCisrICBBVlIzMl9TWU5UQVhfT1JHRSwKKysgIEFWUjMyX1NZTlRBWF9PUkxULAorKyAgQVZSMzJfU1lOVEFYX09STUksCisrICBBVlIzMl9TWU5UQVhfT1JQTCwKKysgIEFWUjMyX1NZTlRBWF9PUkxTLAorKyAgQVZSMzJfU1lOVEFYX09SR1QsCisrICBBVlIzMl9TWU5UQVhfT1JMRSwKKysgIEFWUjMyX1NZTlRBWF9PUkhJLAorKyAgQVZSMzJfU1lOVEFYX09SVlMsCisrICBBVlIzMl9TWU5UQVhfT1JWQywKKysgIEFWUjMyX1NZTlRBWF9PUlFTLAorKyAgQVZSMzJfU1lOVEFYX09SQUwsCisrICBBVlIzMl9TWU5UQVhfT1JIUywKKysgIEFWUjMyX1NZTlRBWF9PUkxPLAorKyAgQVZSMzJfU1lOVEFYX0VPUkVRLAorKyAgQVZSMzJfU1lOVEFYX0VPUk5FLAorKyAgQVZSMzJfU1lOVEFYX0VPUkNDLAorKyAgQVZSMzJfU1lOVEFYX0VPUkNTLAorKyAgQVZSMzJfU1lOVEFYX0VPUkdFLAorKyAgQVZSMzJfU1lOVEFYX0VPUkxULAorKyAgQVZSMzJfU1lOVEFYX0VPUk1JLAorKyAgQVZSMzJfU1lOVEFYX0VPUlBMLAorKyAgQVZSMzJfU1lOVEFYX0VPUkxTLAorKyAgQVZSMzJfU1lOVEFYX0VPUkdULAorKyAgQVZSMzJfU1lOVEFYX0VPUkxFLAorKyAgQVZSMzJfU1lOVEFYX0VPUkhJLAorKyAgQVZSMzJfU1lOVEFYX0VPUlZTLAorKyAgQVZSMzJfU1lOVEFYX0VPUlZDLAorKyAgQVZSMzJfU1lOVEFYX0VPUlFTLAorKyAgQVZSMzJfU1lOVEFYX0VPUkFMLAorKyAgQVZSMzJfU1lOVEFYX0VPUkhTLAorKyAgQVZSMzJfU1lOVEFYX0VPUkxPLAorKyAgQVZSMzJfU1lOVEFYX0xEX1dFUSwKKysgIEFWUjMyX1NZTlRBWF9MRF9XTkUsCisrICBBVlIzMl9TWU5UQVhfTERfV0NDLAorKyAgQVZSMzJfU1lOVEFYX0xEX1dDUywKKysgIEFWUjMyX1NZTlRBWF9MRF9XR0UsCisrICBBVlIzMl9TWU5UQVhfTERfV0xULAorKyAgQVZSMzJfU1lOVEFYX0xEX1dNSSwKKysgIEFWUjMyX1NZTlRBWF9MRF9XUEwsCisrICBBVlIzMl9TWU5UQVhfTERfV0xTLAorKyAgQVZSMzJfU1lOVEFYX0xEX1dHVCwKKysgIEFWUjMyX1NZTlRBWF9MRF9XTEUsCisrICBBVlIzMl9TWU5UQVhfTERfV0hJLAorKyAgQVZSMzJfU1lOVEFYX0xEX1dWUywKKysgIEFWUjMyX1NZTlRBWF9MRF9XVkMsCisrICBBVlIzMl9TWU5UQVhfTERfV1FTLAorKyAgQVZSMzJfU1lOVEFYX0xEX1dBTCwKKysgIEFWUjMyX1NZTlRBWF9MRF9XSFMsCisrICBBVlIzMl9TWU5UQVhfTERfV0xPLAorKyAgQVZSMzJfU1lOVEFYX0xEX1NIRVEsCisrICBBVlIzMl9TWU5UQVhfTERfU0hORSwKKysgIEFWUjMyX1NZTlRBWF9MRF9TSENDLAorKyAgQVZSMzJfU1lOVEFYX0xEX1NIQ1MsCisrICBBVlIzMl9TWU5UQVhfTERfU0hHRSwKKysgIEFWUjMyX1NZTlRBWF9MRF9TSExULAorKyAgQVZSMzJfU1lOVEFYX0xEX1NITUksCisrICBBVlIzMl9TWU5UQVhfTERfU0hQTCwKKysgIEFWUjMyX1NZTlRBWF9MRF9TSExTLAorKyAgQVZSMzJfU1lOVEFYX0xEX1NIR1QsCisrICBBVlIzMl9TWU5UQVhfTERfU0hMRSwKKysgIEFWUjMyX1NZTlRBWF9MRF9TSEhJLAorKyAgQVZSMzJfU1lOVEFYX0xEX1NIVlMsCisrICBBVlIzMl9TWU5UQVhfTERfU0hWQywKKysgIEFWUjMyX1NZTlRBWF9MRF9TSFFTLAorKyAgQVZSMzJfU1lOVEFYX0xEX1NIQUwsCisrICBBVlIzMl9TWU5UQVhfTERfU0hIUywKKysgIEFWUjMyX1NZTlRBWF9MRF9TSExPLAorKyAgQVZSMzJfU1lOVEFYX0xEX1VIRVEsCisrICBBVlIzMl9TWU5UQVhfTERfVUhORSwKKysgIEFWUjMyX1NZTlRBWF9MRF9VSENDLAorKyAgQVZSMzJfU1lOVEFYX0xEX1VIQ1MsCisrICBBVlIzMl9TWU5UQVhfTERfVUhHRSwKKysgIEFWUjMyX1NZTlRBWF9MRF9VSExULAorKyAgQVZSMzJfU1lOVEFYX0xEX1VITUksCisrICBBVlIzMl9TWU5UQVhfTERfVUhQTCwKKysgIEFWUjMyX1NZTlRBWF9MRF9VSExTLAorKyAgQVZSMzJfU1lOVEFYX0xEX1VIR1QsCisrICBBVlIzMl9TWU5UQVhfTERfVUhMRSwKKysgIEFWUjMyX1NZTlRBWF9MRF9VSEhJLAorKyAgQVZSMzJfU1lOVEFYX0xEX1VIVlMsCisrICBBVlIzMl9TWU5UQVhfTERfVUhWQywKKysgIEFWUjMyX1NZTlRBWF9MRF9VSFFTLAorKyAgQVZSMzJfU1lOVEFYX0xEX1VIQUwsCisrICBBVlIzMl9TWU5UQVhfTERfVUhIUywKKysgIEFWUjMyX1NZTlRBWF9MRF9VSExPLAorKyAgQVZSMzJfU1lOVEFYX0xEX1NCRVEsCisrICBBVlIzMl9TWU5UQVhfTERfU0JORSwKKysgIEFWUjMyX1NZTlRBWF9MRF9TQkNDLAorKyAgQVZSMzJfU1lOVEFYX0xEX1NCQ1MsCisrICBBVlIzMl9TWU5UQVhfTERfU0JHRSwKKysgIEFWUjMyX1NZTlRBWF9MRF9TQkxULAorKyAgQVZSMzJfU1lOVEFYX0xEX1NCTUksCisrICBBVlIzMl9TWU5UQVhfTERfU0JQTCwKKysgIEFWUjMyX1NZTlRBWF9MRF9TQkxTLAorKyAgQVZSMzJfU1lOVEFYX0xEX1NCR1QsCisrICBBVlIzMl9TWU5UQVhfTERfU0JMRSwKKysgIEFWUjMyX1NZTlRBWF9MRF9TQkhJLAorKyAgQVZSMzJfU1lOVEFYX0xEX1NCVlMsCisrICBBVlIzMl9TWU5UQVhfTERfU0JWQywKKysgIEFWUjMyX1NZTlRBWF9MRF9TQlFTLAorKyAgQVZSMzJfU1lOVEFYX0xEX1NCQUwsCisrICBBVlIzMl9TWU5UQVhfTERfU0JIUywKKysgIEFWUjMyX1NZTlRBWF9MRF9TQkxPLAorKyAgQVZSMzJfU1lOVEFYX0xEX1VCRVEsCisrICBBVlIzMl9TWU5UQVhfTERfVUJORSwKKysgIEFWUjMyX1NZTlRBWF9MRF9VQkNDLAorKyAgQVZSMzJfU1lOVEFYX0xEX1VCQ1MsCisrICBBVlIzMl9TWU5UQVhfTERfVUJHRSwKKysgIEFWUjMyX1NZTlRBWF9MRF9VQkxULAorKyAgQVZSMzJfU1lOVEFYX0xEX1VCTUksCisrICBBVlIzMl9TWU5UQVhfTERfVUJQTCwKKysgIEFWUjMyX1NZTlRBWF9MRF9VQkxTLAorKyAgQVZSMzJfU1lOVEFYX0xEX1VCR1QsCisrICBBVlIzMl9TWU5UQVhfTERfVUJMRSwKKysgIEFWUjMyX1NZTlRBWF9MRF9VQkhJLAorKyAgQVZSMzJfU1lOVEFYX0xEX1VCVlMsCisrICBBVlIzMl9TWU5UQVhfTERfVUJWQywKKysgIEFWUjMyX1NZTlRBWF9MRF9VQlFTLAorKyAgQVZSMzJfU1lOVEFYX0xEX1VCQUwsCisrICBBVlIzMl9TWU5UQVhfTERfVUJIUywKKysgIEFWUjMyX1NZTlRBWF9MRF9VQkxPLAorKyAgQVZSMzJfU1lOVEFYX1NUX1dFUSwKKysgIEFWUjMyX1NZTlRBWF9TVF9XTkUsCisrICBBVlIzMl9TWU5UQVhfU1RfV0NDLAorKyAgQVZSMzJfU1lOVEFYX1NUX1dDUywKKysgIEFWUjMyX1NZTlRBWF9TVF9XR0UsCisrICBBVlIzMl9TWU5UQVhfU1RfV0xULAorKyAgQVZSMzJfU1lOVEFYX1NUX1dNSSwKKysgIEFWUjMyX1NZTlRBWF9TVF9XUEwsCisrICBBVlIzMl9TWU5UQVhfU1RfV0xTLAorKyAgQVZSMzJfU1lOVEFYX1NUX1dHVCwKKysgIEFWUjMyX1NZTlRBWF9TVF9XTEUsCisrICBBVlIzMl9TWU5UQVhfU1RfV0hJLAorKyAgQVZSMzJfU1lOVEFYX1NUX1dWUywKKysgIEFWUjMyX1NZTlRBWF9TVF9XVkMsCisrICBBVlIzMl9TWU5UQVhfU1RfV1FTLAorKyAgQVZSMzJfU1lOVEFYX1NUX1dBTCwKKysgIEFWUjMyX1NZTlRBWF9TVF9XSFMsCisrICBBVlIzMl9TWU5UQVhfU1RfV0xPLAorKyAgQVZSMzJfU1lOVEFYX1NUX0hFUSwKKysgIEFWUjMyX1NZTlRBWF9TVF9ITkUsCisrICBBVlIzMl9TWU5UQVhfU1RfSENDLAorKyAgQVZSMzJfU1lOVEFYX1NUX0hDUywKKysgIEFWUjMyX1NZTlRBWF9TVF9IR0UsCisrICBBVlIzMl9TWU5UQVhfU1RfSExULAorKyAgQVZSMzJfU1lOVEFYX1NUX0hNSSwKKysgIEFWUjMyX1NZTlRBWF9TVF9IUEwsCisrICBBVlIzMl9TWU5UQVhfU1RfSExTLAorKyAgQVZSMzJfU1lOVEFYX1NUX0hHVCwKKysgIEFWUjMyX1NZTlRBWF9TVF9ITEUsCisrICBBVlIzMl9TWU5UQVhfU1RfSEhJLAorKyAgQVZSMzJfU1lOVEFYX1NUX0hWUywKKysgIEFWUjMyX1NZTlRBWF9TVF9IVkMsCisrICBBVlIzMl9TWU5UQVhfU1RfSFFTLAorKyAgQVZSMzJfU1lOVEFYX1NUX0hBTCwKKysgIEFWUjMyX1NZTlRBWF9TVF9ISFMsCisrICBBVlIzMl9TWU5UQVhfU1RfSExPLAorKyAgQVZSMzJfU1lOVEFYX1NUX0JFUSwKKysgIEFWUjMyX1NZTlRBWF9TVF9CTkUsCisrICBBVlIzMl9TWU5UQVhfU1RfQkNDLAorKyAgQVZSMzJfU1lOVEFYX1NUX0JDUywKKysgIEFWUjMyX1NZTlRBWF9TVF9CR0UsCisrICBBVlIzMl9TWU5UQVhfU1RfQkxULAorKyAgQVZSMzJfU1lOVEFYX1NUX0JNSSwKKysgIEFWUjMyX1NZTlRBWF9TVF9CUEwsCisrICBBVlIzMl9TWU5UQVhfU1RfQkxTLAorKyAgQVZSMzJfU1lOVEFYX1NUX0JHVCwKKysgIEFWUjMyX1NZTlRBWF9TVF9CTEUsCisrICBBVlIzMl9TWU5UQVhfU1RfQkhJLAorKyAgQVZSMzJfU1lOVEFYX1NUX0JWUywKKysgIEFWUjMyX1NZTlRBWF9TVF9CVkMsCisrICBBVlIzMl9TWU5UQVhfU1RfQlFTLAorKyAgQVZSMzJfU1lOVEFYX1NUX0JBTCwKKysgIEFWUjMyX1NZTlRBWF9TVF9CSFMsCisrICBBVlIzMl9TWU5UQVhfU1RfQkxPLAorKyAgQVZSMzJfU1lOVEFYX01PVkgsCisrICBBVlIzMl9TWU5UQVhfX0VORF8KKyt9OworKyNkZWZpbmUgQVZSMzJfTlJfU1lOVEFYIEFWUjMyX1NZTlRBWF9fRU5EXworKworK2VudW0gYXZyMzJfYWxpYXNfdHlwZQorKyAgeworKyAgICBBVlIzMl9BTElBU19GTUFDX1MsCisrICAgIEFWUjMyX0FMSUFTX0ZNQUNfRCwKKysgICAgQVZSMzJfQUxJQVNfRk5NQUNfUywKKysgICAgQVZSMzJfQUxJQVNfRk5NQUNfRCwKKysgICAgQVZSMzJfQUxJQVNfRk1TQ19TLAorKyAgICBBVlIzMl9BTElBU19GTVNDX0QsCisrICAgIEFWUjMyX0FMSUFTX0ZOTVNDX1MsCisrICAgIEFWUjMyX0FMSUFTX0ZOTVNDX0QsCisrICAgIEFWUjMyX0FMSUFTX0ZBRERfUywKKysgICAgQVZSMzJfQUxJQVNfRkFERF9ELAorKyAgICBBVlIzMl9BTElBU19GU1VCX1MsCisrICAgIEFWUjMyX0FMSUFTX0ZTVUJfRCwKKysgICAgQVZSMzJfQUxJQVNfRk1VTF9TLAorKyAgICBBVlIzMl9BTElBU19GTVVMX0QsCisrICAgIEFWUjMyX0FMSUFTX0ZOTVVMX1MsCisrICAgIEFWUjMyX0FMSUFTX0ZOTVVMX0QsCisrICAgIEFWUjMyX0FMSUFTX0ZORUdfUywKKysgICAgQVZSMzJfQUxJQVNfRk5FR19ELAorKyAgICBBVlIzMl9BTElBU19GQUJTX1MsCisrICAgIEFWUjMyX0FMSUFTX0ZBQlNfRCwKKysgICAgQVZSMzJfQUxJQVNfRkNNUF9TLAorKyAgICBBVlIzMl9BTElBU19GQ01QX0QsCisrICAgIEFWUjMyX0FMSUFTX0ZNT1YxX1MsCisrICAgIEFWUjMyX0FMSUFTX0ZNT1YxX0QsCisrICAgIEFWUjMyX0FMSUFTX0ZNT1YyX1MsCisrICAgIEFWUjMyX0FMSUFTX0ZNT1YyX0QsCisrICAgIEFWUjMyX0FMSUFTX0ZNT1YzX1MsCisrICAgIEFWUjMyX0FMSUFTX0ZNT1YzX0QsCisrICAgIEFWUjMyX0FMSUFTX0ZDQVNUU19ELAorKyAgICBBVlIzMl9BTElBU19GQ0FTVERfUywKKysgICAgQVZSMzJfQUxJQVNfUElDT1NWTUFDMCwKKysgICAgQVZSMzJfQUxJQVNfUElDT1NWTUFDMSwKKysgICAgQVZSMzJfQUxJQVNfUElDT1NWTUFDMiwKKysgICAgQVZSMzJfQUxJQVNfUElDT1NWTUFDMywKKysgICAgQVZSMzJfQUxJQVNfUElDT1NWTVVMMCwKKysgICAgQVZSMzJfQUxJQVNfUElDT1NWTVVMMSwKKysgICAgQVZSMzJfQUxJQVNfUElDT1NWTVVMMiwKKysgICAgQVZSMzJfQUxJQVNfUElDT1NWTVVMMywKKysgICAgQVZSMzJfQUxJQVNfUElDT1ZNQUMwLAorKyAgICBBVlIzMl9BTElBU19QSUNPVk1BQzEsCisrICAgIEFWUjMyX0FMSUFTX1BJQ09WTUFDMiwKKysgICAgQVZSMzJfQUxJQVNfUElDT1ZNQUMzLAorKyAgICBBVlIzMl9BTElBU19QSUNPVk1VTDAsCisrICAgIEFWUjMyX0FMSUFTX1BJQ09WTVVMMSwKKysgICAgQVZSMzJfQUxJQVNfUElDT1ZNVUwyLAorKyAgICBBVlIzMl9BTElBU19QSUNPVk1VTDMsCisrICAgIEFWUjMyX0FMSUFTX1BJQ09MRF9EMSwKKysgICAgQVZSMzJfQUxJQVNfUElDT0xEX0QyLAorKyAgICBBVlIzMl9BTElBU19QSUNPTERfRDMsCisrICAgIEFWUjMyX0FMSUFTX1BJQ09MRF9XMSwKKysgICAgQVZSMzJfQUxJQVNfUElDT0xEX1cyLAorKyAgICBBVlIzMl9BTElBU19QSUNPTERfVzMsCisrICAgIEFWUjMyX0FMSUFTX1BJQ09MRE1fRCwKKysgICAgQVZSMzJfQUxJQVNfUElDT0xETV9EX1BVLAorKyAgICBBVlIzMl9BTElBU19QSUNPTERNX1csCisrICAgIEFWUjMyX0FMSUFTX1BJQ09MRE1fV19QVSwKKysgICAgQVZSMzJfQUxJQVNfUElDT01WX0QxLAorKyAgICBBVlIzMl9BTElBU19QSUNPTVZfRDIsCisrICAgIEFWUjMyX0FMSUFTX1BJQ09NVl9XMSwKKysgICAgQVZSMzJfQUxJQVNfUElDT01WX1cyLAorKyAgICBBVlIzMl9BTElBU19QSUNPU1RfRDEsCisrICAgIEFWUjMyX0FMSUFTX1BJQ09TVF9EMiwKKysgICAgQVZSMzJfQUxJQVNfUElDT1NUX0QzLAorKyAgICBBVlIzMl9BTElBU19QSUNPU1RfVzEsCisrICAgIEFWUjMyX0FMSUFTX1BJQ09TVF9XMiwKKysgICAgQVZSMzJfQUxJQVNfUElDT1NUX1czLAorKyAgICBBVlIzMl9BTElBU19QSUNPU1RNX0QsCisrICAgIEFWUjMyX0FMSUFTX1BJQ09TVE1fRF9QVSwKKysgICAgQVZSMzJfQUxJQVNfUElDT1NUTV9XLAorKyAgICBBVlIzMl9BTElBU19QSUNPU1RNX1dfUFUsCisrICAgIEFWUjMyX0FMSUFTX19FTkRfCisrICB9OworKyNkZWZpbmUgQVZSMzJfTlJfQUxJQVMgQVZSMzJfQUxJQVNfX0VORF8KKysKKytlbnVtIGF2cjMyX21uZW1vbmljX3R5cGUKKyt7CisrICBBVlIzMl9NTkVNT05JQ19BQlMsCisrICBBVlIzMl9NTkVNT05JQ19BQ0FMTCwKKysgIEFWUjMyX01ORU1PTklDX0FDUiwKKysgIEFWUjMyX01ORU1PTklDX0FEQywKKysgIEFWUjMyX01ORU1PTklDX0FERCwKKysgIEFWUjMyX01ORU1PTklDX0FEREFCUywKKysgIEFWUjMyX01ORU1PTklDX0FEREhIX1csCisrICBBVlIzMl9NTkVNT05JQ19BTkQsCisrICBBVlIzMl9NTkVNT05JQ19BTkRILAorKyAgQVZSMzJfTU5FTU9OSUNfQU5ETCwKKysgIEFWUjMyX01ORU1PTklDX0FORE4sCisrICBBVlIzMl9NTkVNT05JQ19BU1IsCisrICBBVlIzMl9NTkVNT05JQ19CRkVYVFMsCisrICBBVlIzMl9NTkVNT05JQ19CRkVYVFUsCisrICBBVlIzMl9NTkVNT05JQ19CRklOUywKKysgIEFWUjMyX01ORU1PTklDX0JMRCwKKysgIEFWUjMyX01ORU1PTklDX0JSRVEsCisrICBBVlIzMl9NTkVNT05JQ19CUk5FLAorKyAgQVZSMzJfTU5FTU9OSUNfQlJDQywKKysgIEFWUjMyX01ORU1PTklDX0JSQ1MsCisrICBBVlIzMl9NTkVNT05JQ19CUkdFLAorKyAgQVZSMzJfTU5FTU9OSUNfQlJMVCwKKysgIEFWUjMyX01ORU1PTklDX0JSTUksCisrICBBVlIzMl9NTkVNT05JQ19CUlBMLAorKyAgQVZSMzJfTU5FTU9OSUNfQlJIUywKKysgIEFWUjMyX01ORU1PTklDX0JSTE8sCisrICBBVlIzMl9NTkVNT05JQ19CUkxTLAorKyAgQVZSMzJfTU5FTU9OSUNfQlJHVCwKKysgIEFWUjMyX01ORU1PTklDX0JSTEUsCisrICBBVlIzMl9NTkVNT05JQ19CUkhJLAorKyAgQVZSMzJfTU5FTU9OSUNfQlJWUywKKysgIEFWUjMyX01ORU1PTklDX0JSVkMsCisrICBBVlIzMl9NTkVNT05JQ19CUlFTLAorKyAgQVZSMzJfTU5FTU9OSUNfQlJBTCwKKysgIEFWUjMyX01ORU1PTklDX0JSRUFLUE9JTlQsCisrICBBVlIzMl9NTkVNT05JQ19CUkVWLAorKyAgQVZSMzJfTU5FTU9OSUNfQlNULAorKyAgQVZSMzJfTU5FTU9OSUNfQ0FDSEUsCisrICBBVlIzMl9NTkVNT05JQ19DQVNUU19CLAorKyAgQVZSMzJfTU5FTU9OSUNfQ0FTVFNfSCwKKysgIEFWUjMyX01ORU1PTklDX0NBU1RVX0IsCisrICBBVlIzMl9NTkVNT05JQ19DQVNUVV9ILAorKyAgQVZSMzJfTU5FTU9OSUNfQ0JSLAorKyAgQVZSMzJfTU5FTU9OSUNfQ0xaLAorKyAgQVZSMzJfTU5FTU9OSUNfQ09NLAorKyAgQVZSMzJfTU5FTU9OSUNfQ09QLAorKyAgQVZSMzJfTU5FTU9OSUNfQ1BfQiwKKysgIEFWUjMyX01ORU1PTklDX0NQX0gsCisrICBBVlIzMl9NTkVNT05JQ19DUF9XLAorKyAgQVZSMzJfTU5FTU9OSUNfQ1AsCisrICBBVlIzMl9NTkVNT05JQ19DUEMsCisrICBBVlIzMl9NTkVNT05JQ19DU1JGLAorKyAgQVZSMzJfTU5FTU9OSUNfQ1NSRkNaLAorKyAgQVZSMzJfTU5FTU9OSUNfRElWUywKKysgIEFWUjMyX01ORU1PTklDX0RJVlUsCisrICBBVlIzMl9NTkVNT05JQ19FT1IsCisrICBBVlIzMl9NTkVNT05JQ19FT1JMLAorKyAgQVZSMzJfTU5FTU9OSUNfRU9SSCwKKysgIEFWUjMyX01ORU1PTklDX0ZSUywKKysgIEFWUjMyX01ORU1PTklDX0lDQUxMLAorKyAgQVZSMzJfTU5FTU9OSUNfSU5DSk9TUCwKKysgIEFWUjMyX01ORU1PTklDX0xEX0QsCisrICBBVlIzMl9NTkVNT05JQ19MRF9TQiwKKysgIEFWUjMyX01ORU1PTklDX0xEX1VCLAorKyAgQVZSMzJfTU5FTU9OSUNfTERfU0gsCisrICBBVlIzMl9NTkVNT05JQ19MRF9VSCwKKysgIEFWUjMyX01ORU1PTklDX0xEX1csCisrICBBVlIzMl9NTkVNT05JQ19MRENfRCwKKysgIEFWUjMyX01ORU1PTklDX0xEQ19XLAorKyAgQVZSMzJfTU5FTU9OSUNfTERDMF9ELAorKyAgQVZSMzJfTU5FTU9OSUNfTERDMF9XLAorKyAgQVZSMzJfTU5FTU9OSUNfTERDTV9ELAorKyAgQVZSMzJfTU5FTU9OSUNfTERDTV9XLAorKyAgQVZSMzJfTU5FTU9OSUNfTEREUEMsCisrICBBVlIzMl9NTkVNT05JQ19MRERTUCwKKysgIEFWUjMyX01ORU1PTklDX0xESU5TX0IsCisrICBBVlIzMl9NTkVNT05JQ19MRElOU19ILAorKyAgQVZSMzJfTU5FTU9OSUNfTERNLAorKyAgQVZSMzJfTU5FTU9OSUNfTERNVFMsCisrICBBVlIzMl9NTkVNT05JQ19MRFNXUF9TSCwKKysgIEFWUjMyX01ORU1PTklDX0xEU1dQX1VILAorKyAgQVZSMzJfTU5FTU9OSUNfTERTV1BfVywKKysgIEFWUjMyX01ORU1PTklDX0xTTCwKKysgIEFWUjMyX01ORU1PTklDX0xTUiwKKysgIEFWUjMyX01ORU1PTklDX01BQywKKysgIEFWUjMyX01ORU1PTklDX01BQ0hIX0QsCisrICBBVlIzMl9NTkVNT05JQ19NQUNISF9XLAorKyAgQVZSMzJfTU5FTU9OSUNfTUFDU19ELAorKyAgQVZSMzJfTU5FTU9OSUNfTUFDU0FUSEhfVywKKysgIEFWUjMyX01ORU1PTklDX01BQ1VfRCwKKysgIEFWUjMyX01ORU1PTklDX01BQ1dIX0QsCisrICBBVlIzMl9NTkVNT05JQ19NQVgsCisrICBBVlIzMl9NTkVNT05JQ19NQ0FMTCwKKysgIEFWUjMyX01ORU1PTklDX01GRFIsCisrICBBVlIzMl9NTkVNT05JQ19NRlNSLAorKyAgQVZSMzJfTU5FTU9OSUNfTUlOLAorKyAgQVZSMzJfTU5FTU9OSUNfTU9WLAorKyAgQVZSMzJfTU5FTU9OSUNfTU9WRVEsCisrICBBVlIzMl9NTkVNT05JQ19NT1ZORSwKKysgIEFWUjMyX01ORU1PTklDX01PVkNDLAorKyAgQVZSMzJfTU5FTU9OSUNfTU9WQ1MsCisrICBBVlIzMl9NTkVNT05JQ19NT1ZHRSwKKysgIEFWUjMyX01ORU1PTklDX01PVkxULAorKyAgQVZSMzJfTU5FTU9OSUNfTU9WTUksCisrICBBVlIzMl9NTkVNT05JQ19NT1ZQTCwKKysgIEFWUjMyX01ORU1PTklDX01PVkxTLAorKyAgQVZSMzJfTU5FTU9OSUNfTU9WR1QsCisrICBBVlIzMl9NTkVNT05JQ19NT1ZMRSwKKysgIEFWUjMyX01ORU1PTklDX01PVkhJLAorKyAgQVZSMzJfTU5FTU9OSUNfTU9WVlMsCisrICBBVlIzMl9NTkVNT05JQ19NT1ZWQywKKysgIEFWUjMyX01ORU1PTklDX01PVlFTLAorKyAgQVZSMzJfTU5FTU9OSUNfTU9WQUwsCisrICBBVlIzMl9NTkVNT05JQ19NT1ZIUywKKysgIEFWUjMyX01ORU1PTklDX01PVkxPLAorKyAgQVZSMzJfTU5FTU9OSUNfTVREUiwKKysgIEFWUjMyX01ORU1PTklDX01UU1IsCisrICBBVlIzMl9NTkVNT05JQ19NVUwsCisrICBBVlIzMl9NTkVNT05JQ19NVUxISF9XLAorKyAgQVZSMzJfTU5FTU9OSUNfTVVMTkhIX1csCisrICBBVlIzMl9NTkVNT05JQ19NVUxOV0hfRCwKKysgIEFWUjMyX01ORU1PTklDX01VTFNfRCwKKysgIEFWUjMyX01ORU1PTklDX01VTFNBVEhIX0gsCisrICBBVlIzMl9NTkVNT05JQ19NVUxTQVRISF9XLAorKyAgQVZSMzJfTU5FTU9OSUNfTVVMU0FUUk5ESEhfSCwKKysgIEFWUjMyX01ORU1PTklDX01VTFNBVFJORFdIX1csCisrICBBVlIzMl9NTkVNT05JQ19NVUxTQVRXSF9XLAorKyAgQVZSMzJfTU5FTU9OSUNfTVVMVV9ELAorKyAgQVZSMzJfTU5FTU9OSUNfTVVMV0hfRCwKKysgIEFWUjMyX01ORU1PTklDX01VU0ZSLAorKyAgQVZSMzJfTU5FTU9OSUNfTVVTVFIsCisrICBBVlIzMl9NTkVNT05JQ19NVkNSX0QsCisrICBBVlIzMl9NTkVNT05JQ19NVkNSX1csCisrICBBVlIzMl9NTkVNT05JQ19NVlJDX0QsCisrICBBVlIzMl9NTkVNT05JQ19NVlJDX1csCisrICBBVlIzMl9NTkVNT05JQ19ORUcsCisrICBBVlIzMl9NTkVNT05JQ19OT1AsCisrICBBVlIzMl9NTkVNT05JQ19PUiwKKysgIEFWUjMyX01ORU1PTklDX09SSCwKKysgIEFWUjMyX01ORU1PTklDX09STCwKKysgIEFWUjMyX01ORU1PTklDX1BBQlNfU0IsCisrICBBVlIzMl9NTkVNT05JQ19QQUJTX1NILAorKyAgQVZSMzJfTU5FTU9OSUNfUEFDS1NIX1NCLAorKyAgQVZSMzJfTU5FTU9OSUNfUEFDS1NIX1VCLAorKyAgQVZSMzJfTU5FTU9OSUNfUEFDS1dfU0gsCisrICBBVlIzMl9NTkVNT05JQ19QQUREX0IsCisrICBBVlIzMl9NTkVNT05JQ19QQUREX0gsCisrICBBVlIzMl9NTkVNT05JQ19QQURESF9TSCwKKysgIEFWUjMyX01ORU1PTklDX1BBRERIX1VCLAorKyAgQVZSMzJfTU5FTU9OSUNfUEFERFNfU0IsCisrICBBVlIzMl9NTkVNT05JQ19QQUREU19TSCwKKysgIEFWUjMyX01ORU1PTklDX1BBRERTX1VCLAorKyAgQVZSMzJfTU5FTU9OSUNfUEFERFNfVUgsCisrICBBVlIzMl9NTkVNT05JQ19QQUREU1VCX0gsCisrICBBVlIzMl9NTkVNT05JQ19QQUREU1VCSF9TSCwKKysgIEFWUjMyX01ORU1PTklDX1BBRERTVUJTX1NILAorKyAgQVZSMzJfTU5FTU9OSUNfUEFERFNVQlNfVUgsCisrICBBVlIzMl9NTkVNT05JQ19QQUREWF9ILAorKyAgQVZSMzJfTU5FTU9OSUNfUEFERFhIX1NILAorKyAgQVZSMzJfTU5FTU9OSUNfUEFERFhTX1NILAorKyAgQVZSMzJfTU5FTU9OSUNfUEFERFhTX1VILAorKyAgQVZSMzJfTU5FTU9OSUNfUEFTUl9CLAorKyAgQVZSMzJfTU5FTU9OSUNfUEFTUl9ILAorKyAgQVZSMzJfTU5FTU9OSUNfUEFWR19TSCwKKysgIEFWUjMyX01ORU1PTklDX1BBVkdfVUIsCisrICBBVlIzMl9NTkVNT05JQ19QTFNMX0IsCisrICBBVlIzMl9NTkVNT05JQ19QTFNMX0gsCisrICBBVlIzMl9NTkVNT05JQ19QTFNSX0IsCisrICBBVlIzMl9NTkVNT05JQ19QTFNSX0gsCisrICBBVlIzMl9NTkVNT05JQ19QTUFYX1NILAorKyAgQVZSMzJfTU5FTU9OSUNfUE1BWF9VQiwKKysgIEFWUjMyX01ORU1PTklDX1BNSU5fU0gsCisrICBBVlIzMl9NTkVNT05JQ19QTUlOX1VCLAorKyAgQVZSMzJfTU5FTU9OSUNfUE9QSkMsCisrICBBVlIzMl9NTkVNT05JQ19QT1BNLAorKyAgQVZSMzJfTU5FTU9OSUNfUFJFRiwKKysgIEFWUjMyX01ORU1PTklDX1BTQUQsCisrICBBVlIzMl9NTkVNT05JQ19QU1VCX0IsCisrICBBVlIzMl9NTkVNT05JQ19QU1VCX0gsCisrICBBVlIzMl9NTkVNT05JQ19QU1VCQUREX0gsCisrICBBVlIzMl9NTkVNT05JQ19QU1VCQURESF9TSCwKKysgIEFWUjMyX01ORU1PTklDX1BTVUJBRERTX1NILAorKyAgQVZSMzJfTU5FTU9OSUNfUFNVQkFERFNfVUgsCisrICBBVlIzMl9NTkVNT05JQ19QU1VCSF9TSCwKKysgIEFWUjMyX01ORU1PTklDX1BTVUJIX1VCLAorKyAgQVZSMzJfTU5FTU9OSUNfUFNVQlNfU0IsCisrICBBVlIzMl9NTkVNT05JQ19QU1VCU19TSCwKKysgIEFWUjMyX01ORU1PTklDX1BTVUJTX1VCLAorKyAgQVZSMzJfTU5FTU9OSUNfUFNVQlNfVUgsCisrICBBVlIzMl9NTkVNT05JQ19QU1VCWF9ILAorKyAgQVZSMzJfTU5FTU9OSUNfUFNVQlhIX1NILAorKyAgQVZSMzJfTU5FTU9OSUNfUFNVQlhTX1NILAorKyAgQVZSMzJfTU5FTU9OSUNfUFNVQlhTX1VILAorKyAgQVZSMzJfTU5FTU9OSUNfUFVOUENLU0JfSCwKKysgIEFWUjMyX01ORU1PTklDX1BVTlBDS1VCX0gsCisrICBBVlIzMl9NTkVNT05JQ19QVVNISkMsCisrICBBVlIzMl9NTkVNT05JQ19QVVNITSwKKysgIEFWUjMyX01ORU1PTklDX1JDQUxMLAorKyAgQVZSMzJfTU5FTU9OSUNfUkVURVEsCisrICBBVlIzMl9NTkVNT05JQ19SRVRORSwKKysgIEFWUjMyX01ORU1PTklDX1JFVENDLAorKyAgQVZSMzJfTU5FTU9OSUNfUkVUQ1MsCisrICBBVlIzMl9NTkVNT05JQ19SRVRHRSwKKysgIEFWUjMyX01ORU1PTklDX1JFVExULAorKyAgQVZSMzJfTU5FTU9OSUNfUkVUTUksCisrICBBVlIzMl9NTkVNT05JQ19SRVRQTCwKKysgIEFWUjMyX01ORU1PTklDX1JFVExTLAorKyAgQVZSMzJfTU5FTU9OSUNfUkVUR1QsCisrICBBVlIzMl9NTkVNT05JQ19SRVRMRSwKKysgIEFWUjMyX01ORU1PTklDX1JFVEhJLAorKyAgQVZSMzJfTU5FTU9OSUNfUkVUVlMsCisrICBBVlIzMl9NTkVNT05JQ19SRVRWQywKKysgIEFWUjMyX01ORU1PTklDX1JFVFFTLAorKyAgQVZSMzJfTU5FTU9OSUNfUkVUQUwsCisrICBBVlIzMl9NTkVNT05JQ19SRVRIUywKKysgIEFWUjMyX01ORU1PTklDX1JFVExPLAorKyAgQVZSMzJfTU5FTU9OSUNfUkVULAorKyAgQVZSMzJfTU5FTU9OSUNfUkVURCwKKysgIEFWUjMyX01ORU1PTklDX1JFVEUsCisrICBBVlIzMl9NTkVNT05JQ19SRVRKLAorKyAgQVZSMzJfTU5FTU9OSUNfUkVUUywKKysgIEFWUjMyX01ORU1PTklDX1JKTVAsCisrICBBVlIzMl9NTkVNT05JQ19ST0wsCisrICBBVlIzMl9NTkVNT05JQ19ST1IsCisrICBBVlIzMl9NTkVNT05JQ19SU1VCLAorKyAgQVZSMzJfTU5FTU9OSUNfU0FUQUREX0gsCisrICBBVlIzMl9NTkVNT05JQ19TQVRBRERfVywKKysgIEFWUjMyX01ORU1PTklDX1NBVFJORFMsCisrICBBVlIzMl9NTkVNT05JQ19TQVRSTkRVLAorKyAgQVZSMzJfTU5FTU9OSUNfU0FUUywKKysgIEFWUjMyX01ORU1PTklDX1NBVFNVQl9ILAorKyAgQVZSMzJfTU5FTU9OSUNfU0FUU1VCX1csCisrICBBVlIzMl9NTkVNT05JQ19TQVRVLAorKyAgQVZSMzJfTU5FTU9OSUNfU0JDLAorKyAgQVZSMzJfTU5FTU9OSUNfU0JSLAorKyAgQVZSMzJfTU5FTU9OSUNfU0NBTEwsCisrICBBVlIzMl9NTkVNT05JQ19TQ1IsCisrICBBVlIzMl9NTkVNT05JQ19TTEVFUCwKKysgIEFWUjMyX01ORU1PTklDX1NSRVEsCisrICBBVlIzMl9NTkVNT05JQ19TUk5FLAorKyAgQVZSMzJfTU5FTU9OSUNfU1JDQywKKysgIEFWUjMyX01ORU1PTklDX1NSQ1MsCisrICBBVlIzMl9NTkVNT05JQ19TUkdFLAorKyAgQVZSMzJfTU5FTU9OSUNfU1JMVCwKKysgIEFWUjMyX01ORU1PTklDX1NSTUksCisrICBBVlIzMl9NTkVNT05JQ19TUlBMLAorKyAgQVZSMzJfTU5FTU9OSUNfU1JMUywKKysgIEFWUjMyX01ORU1PTklDX1NSR1QsCisrICBBVlIzMl9NTkVNT05JQ19TUkxFLAorKyAgQVZSMzJfTU5FTU9OSUNfU1JISSwKKysgIEFWUjMyX01ORU1PTklDX1NSVlMsCisrICBBVlIzMl9NTkVNT05JQ19TUlZDLAorKyAgQVZSMzJfTU5FTU9OSUNfU1JRUywKKysgIEFWUjMyX01ORU1PTklDX1NSQUwsCisrICBBVlIzMl9NTkVNT05JQ19TUkhTLAorKyAgQVZSMzJfTU5FTU9OSUNfU1JMTywKKysgIEFWUjMyX01ORU1PTklDX1NTUkYsCisrICBBVlIzMl9NTkVNT05JQ19TVF9CLAorKyAgQVZSMzJfTU5FTU9OSUNfU1RfRCwKKysgIEFWUjMyX01ORU1PTklDX1NUX0gsCisrICBBVlIzMl9NTkVNT05JQ19TVF9XLAorKyAgQVZSMzJfTU5FTU9OSUNfU1RDX0QsCisrICBBVlIzMl9NTkVNT05JQ19TVENfVywKKysgIEFWUjMyX01ORU1PTklDX1NUQzBfRCwKKysgIEFWUjMyX01ORU1PTklDX1NUQzBfVywKKysgIEFWUjMyX01ORU1PTklDX1NUQ01fRCwKKysgIEFWUjMyX01ORU1PTklDX1NUQ01fVywKKysgIEFWUjMyX01ORU1PTklDX1NUQ09ORCwKKysgIEFWUjMyX01ORU1PTklDX1NURFNQLAorKyAgQVZSMzJfTU5FTU9OSUNfU1RISF9XLAorKyAgQVZSMzJfTU5FTU9OSUNfU1RNLAorKyAgQVZSMzJfTU5FTU9OSUNfU1RNVFMsCisrICBBVlIzMl9NTkVNT05JQ19TVFNXUF9ILAorKyAgQVZSMzJfTU5FTU9OSUNfU1RTV1BfVywKKysgIEFWUjMyX01ORU1PTklDX1NVQiwKKysgIEFWUjMyX01ORU1PTklDX1NVQkVRLAorKyAgQVZSMzJfTU5FTU9OSUNfU1VCTkUsCisrICBBVlIzMl9NTkVNT05JQ19TVUJDQywKKysgIEFWUjMyX01ORU1PTklDX1NVQkNTLAorKyAgQVZSMzJfTU5FTU9OSUNfU1VCR0UsCisrICBBVlIzMl9NTkVNT05JQ19TVUJMVCwKKysgIEFWUjMyX01ORU1PTklDX1NVQk1JLAorKyAgQVZSMzJfTU5FTU9OSUNfU1VCUEwsCisrICBBVlIzMl9NTkVNT05JQ19TVUJMUywKKysgIEFWUjMyX01ORU1PTklDX1NVQkdULAorKyAgQVZSMzJfTU5FTU9OSUNfU1VCTEUsCisrICBBVlIzMl9NTkVNT05JQ19TVUJISSwKKysgIEFWUjMyX01ORU1PTklDX1NVQlZTLAorKyAgQVZSMzJfTU5FTU9OSUNfU1VCVkMsCisrICBBVlIzMl9NTkVNT05JQ19TVUJRUywKKysgIEFWUjMyX01ORU1PTklDX1NVQkFMLAorKyAgQVZSMzJfTU5FTU9OSUNfU1VCSFMsCisrICBBVlIzMl9NTkVNT05JQ19TVUJMTywKKysgIEFWUjMyX01ORU1PTklDX1NVQkZFUSwKKysgIEFWUjMyX01ORU1PTklDX1NVQkZORSwKKysgIEFWUjMyX01ORU1PTklDX1NVQkZDQywKKysgIEFWUjMyX01ORU1PTklDX1NVQkZDUywKKysgIEFWUjMyX01ORU1PTklDX1NVQkZHRSwKKysgIEFWUjMyX01ORU1PTklDX1NVQkZMVCwKKysgIEFWUjMyX01ORU1PTklDX1NVQkZNSSwKKysgIEFWUjMyX01ORU1PTklDX1NVQkZQTCwKKysgIEFWUjMyX01ORU1PTklDX1NVQkZMUywKKysgIEFWUjMyX01ORU1PTklDX1NVQkZHVCwKKysgIEFWUjMyX01ORU1PTklDX1NVQkZMRSwKKysgIEFWUjMyX01ORU1PTklDX1NVQkZISSwKKysgIEFWUjMyX01ORU1PTklDX1NVQkZWUywKKysgIEFWUjMyX01ORU1PTklDX1NVQkZWQywKKysgIEFWUjMyX01ORU1PTklDX1NVQkZRUywKKysgIEFWUjMyX01ORU1PTklDX1NVQkZBTCwKKysgIEFWUjMyX01ORU1PTklDX1NVQkZIUywKKysgIEFWUjMyX01ORU1PTklDX1NVQkZMTywKKysgIEFWUjMyX01ORU1PTklDX1NVQkhIX1csCisrICBBVlIzMl9NTkVNT05JQ19TV0FQX0IsCisrICBBVlIzMl9NTkVNT05JQ19TV0FQX0JILAorKyAgQVZSMzJfTU5FTU9OSUNfU1dBUF9ILAorKyAgQVZSMzJfTU5FTU9OSUNfU1lOQywKKysgIEFWUjMyX01ORU1PTklDX1RMQlIsCisrICBBVlIzMl9NTkVNT05JQ19UTEJTLAorKyAgQVZSMzJfTU5FTU9OSUNfVExCVywKKysgIEFWUjMyX01ORU1PTklDX1ROQlosCisrICBBVlIzMl9NTkVNT05JQ19UU1QsCisrICBBVlIzMl9NTkVNT05JQ19YQ0hHLAorKyAgQVZSMzJfTU5FTU9OSUNfTUVNQywKKysgIEFWUjMyX01ORU1PTklDX01FTVMsCisrICBBVlIzMl9NTkVNT05JQ19NRU1ULAorKyAgQVZSMzJfTU5FTU9OSUNfRkFERF9TLAorKyAgQVZSMzJfTU5FTU9OSUNfRkFERF9ELAorKyAgQVZSMzJfTU5FTU9OSUNfRlNVQl9TLAorKyAgQVZSMzJfTU5FTU9OSUNfRlNVQl9ELAorKyAgQVZSMzJfTU5FTU9OSUNfRk1BQ19TLAorKyAgQVZSMzJfTU5FTU9OSUNfRk1BQ19ELAorKyAgQVZSMzJfTU5FTU9OSUNfRk5NQUNfUywKKysgIEFWUjMyX01ORU1PTklDX0ZOTUFDX0QsCisrICBBVlIzMl9NTkVNT05JQ19GTVNDX1MsCisrICBBVlIzMl9NTkVNT05JQ19GTVNDX0QsCisrICBBVlIzMl9NTkVNT05JQ19GTk1TQ19TLAorKyAgQVZSMzJfTU5FTU9OSUNfRk5NU0NfRCwKKysgIEFWUjMyX01ORU1PTklDX0ZNVUxfUywKKysgIEFWUjMyX01ORU1PTklDX0ZNVUxfRCwKKysgIEFWUjMyX01ORU1PTklDX0ZOTVVMX1MsCisrICBBVlIzMl9NTkVNT05JQ19GTk1VTF9ELAorKyAgQVZSMzJfTU5FTU9OSUNfRk5FR19TLAorKyAgQVZSMzJfTU5FTU9OSUNfRk5FR19ELAorKyAgQVZSMzJfTU5FTU9OSUNfRkFCU19TLAorKyAgQVZSMzJfTU5FTU9OSUNfRkFCU19ELAorKyAgQVZSMzJfTU5FTU9OSUNfRkNNUF9TLAorKyAgQVZSMzJfTU5FTU9OSUNfRkNNUF9ELAorKyAgQVZSMzJfTU5FTU9OSUNfRk1PVl9TLAorKyAgQVZSMzJfTU5FTU9OSUNfRk1PVl9ELAorKyAgQVZSMzJfTU5FTU9OSUNfRkNBU1RTX0QsCisrICBBVlIzMl9NTkVNT05JQ19GQ0FTVERfUywKKysgIC8qIEFWUjMyX01ORU1PTklDX0ZMRF9TLAorKyAgICAgQVZSMzJfTU5FTU9OSUNfRkxEX0QsCisrICAgICBBVlIzMl9NTkVNT05JQ19GU1RfUywKKysgICAgIEFWUjMyX01ORU1PTklDX0ZTVF9ELCAqLworKyAgQVZSMzJfTU5FTU9OSUNfTERBX1csCisrICBBVlIzMl9NTkVNT05JQ19DQUxMLAorKyAgQVZSMzJfTU5FTU9OSUNfUElDT1NWTUFDLAorKyAgQVZSMzJfTU5FTU9OSUNfUElDT1NWTVVMLAorKyAgQVZSMzJfTU5FTU9OSUNfUElDT1ZNQUMsCisrICBBVlIzMl9NTkVNT05JQ19QSUNPVk1VTCwKKysgIEFWUjMyX01ORU1PTklDX1BJQ09MRF9ELAorKyAgQVZSMzJfTU5FTU9OSUNfUElDT0xEX1csCisrICBBVlIzMl9NTkVNT05JQ19QSUNPTERNX0QsCisrICBBVlIzMl9NTkVNT05JQ19QSUNPTERNX1csCisrICBBVlIzMl9NTkVNT05JQ19QSUNPTVZfRCwKKysgIEFWUjMyX01ORU1PTklDX1BJQ09NVl9XLAorKyAgQVZSMzJfTU5FTU9OSUNfUElDT1NUX0QsCisrICBBVlIzMl9NTkVNT05JQ19QSUNPU1RfVywKKysgIEFWUjMyX01ORU1PTklDX1BJQ09TVE1fRCwKKysgIEFWUjMyX01ORU1PTklDX1BJQ09TVE1fVywKKysgIEFWUjMyX01ORU1PTklDX1JTVUJFUSwKKysgIEFWUjMyX01ORU1PTklDX1JTVUJORSwKKysgIEFWUjMyX01ORU1PTklDX1JTVUJDQywKKysgIEFWUjMyX01ORU1PTklDX1JTVUJDUywKKysgIEFWUjMyX01ORU1PTklDX1JTVUJHRSwKKysgIEFWUjMyX01ORU1PTklDX1JTVUJMVCwKKysgIEFWUjMyX01ORU1PTklDX1JTVUJNSSwKKysgIEFWUjMyX01ORU1PTklDX1JTVUJQTCwKKysgIEFWUjMyX01ORU1PTklDX1JTVUJMUywKKysgIEFWUjMyX01ORU1PTklDX1JTVUJHVCwKKysgIEFWUjMyX01ORU1PTklDX1JTVUJMRSwKKysgIEFWUjMyX01ORU1PTklDX1JTVUJISSwKKysgIEFWUjMyX01ORU1PTklDX1JTVUJWUywKKysgIEFWUjMyX01ORU1PTklDX1JTVUJWQywKKysgIEFWUjMyX01ORU1PTklDX1JTVUJRUywKKysgIEFWUjMyX01ORU1PTklDX1JTVUJBTCwKKysgIEFWUjMyX01ORU1PTklDX1JTVUJIUywKKysgIEFWUjMyX01ORU1PTklDX1JTVUJMTywKKysgIEFWUjMyX01ORU1PTklDX0FEREVRLAorKyAgQVZSMzJfTU5FTU9OSUNfQURETkUsCisrICBBVlIzMl9NTkVNT05JQ19BRERDQywKKysgIEFWUjMyX01ORU1PTklDX0FERENTLAorKyAgQVZSMzJfTU5FTU9OSUNfQURER0UsCisrICBBVlIzMl9NTkVNT05JQ19BRERMVCwKKysgIEFWUjMyX01ORU1PTklDX0FERE1JLAorKyAgQVZSMzJfTU5FTU9OSUNfQUREUEwsCisrICBBVlIzMl9NTkVNT05JQ19BRERMUywKKysgIEFWUjMyX01ORU1PTklDX0FEREdULAorKyAgQVZSMzJfTU5FTU9OSUNfQURETEUsCisrICBBVlIzMl9NTkVNT05JQ19BRERISSwKKysgIEFWUjMyX01ORU1PTklDX0FERFZTLAorKyAgQVZSMzJfTU5FTU9OSUNfQUREVkMsCisrICBBVlIzMl9NTkVNT05JQ19BRERRUywKKysgIEFWUjMyX01ORU1PTklDX0FEREFMLAorKyAgQVZSMzJfTU5FTU9OSUNfQURESFMsCisrICBBVlIzMl9NTkVNT05JQ19BRERMTywKKysgIEFWUjMyX01ORU1PTklDX0FOREVRLAorKyAgQVZSMzJfTU5FTU9OSUNfQU5ETkUsCisrICBBVlIzMl9NTkVNT05JQ19BTkRDQywKKysgIEFWUjMyX01ORU1PTklDX0FORENTLAorKyAgQVZSMzJfTU5FTU9OSUNfQU5ER0UsCisrICBBVlIzMl9NTkVNT05JQ19BTkRMVCwKKysgIEFWUjMyX01ORU1PTklDX0FORE1JLAorKyAgQVZSMzJfTU5FTU9OSUNfQU5EUEwsCisrICBBVlIzMl9NTkVNT05JQ19BTkRMUywKKysgIEFWUjMyX01ORU1PTklDX0FOREdULAorKyAgQVZSMzJfTU5FTU9OSUNfQU5ETEUsCisrICBBVlIzMl9NTkVNT05JQ19BTkRISSwKKysgIEFWUjMyX01ORU1PTklDX0FORFZTLAorKyAgQVZSMzJfTU5FTU9OSUNfQU5EVkMsCisrICBBVlIzMl9NTkVNT05JQ19BTkRRUywKKysgIEFWUjMyX01ORU1PTklDX0FOREFMLAorKyAgQVZSMzJfTU5FTU9OSUNfQU5ESFMsCisrICBBVlIzMl9NTkVNT05JQ19BTkRMTywKKysgIEFWUjMyX01ORU1PTklDX09SRVEsCisrICBBVlIzMl9NTkVNT05JQ19PUk5FLAorKyAgQVZSMzJfTU5FTU9OSUNfT1JDQywKKysgIEFWUjMyX01ORU1PTklDX09SQ1MsCisrICBBVlIzMl9NTkVNT05JQ19PUkdFLAorKyAgQVZSMzJfTU5FTU9OSUNfT1JMVCwKKysgIEFWUjMyX01ORU1PTklDX09STUksCisrICBBVlIzMl9NTkVNT05JQ19PUlBMLAorKyAgQVZSMzJfTU5FTU9OSUNfT1JMUywKKysgIEFWUjMyX01ORU1PTklDX09SR1QsCisrICBBVlIzMl9NTkVNT05JQ19PUkxFLAorKyAgQVZSMzJfTU5FTU9OSUNfT1JISSwKKysgIEFWUjMyX01ORU1PTklDX09SVlMsCisrICBBVlIzMl9NTkVNT05JQ19PUlZDLAorKyAgQVZSMzJfTU5FTU9OSUNfT1JRUywKKysgIEFWUjMyX01ORU1PTklDX09SQUwsCisrICBBVlIzMl9NTkVNT05JQ19PUkhTLAorKyAgQVZSMzJfTU5FTU9OSUNfT1JMTywKKysgIEFWUjMyX01ORU1PTklDX0VPUkVRLAorKyAgQVZSMzJfTU5FTU9OSUNfRU9STkUsCisrICBBVlIzMl9NTkVNT05JQ19FT1JDQywKKysgIEFWUjMyX01ORU1PTklDX0VPUkNTLAorKyAgQVZSMzJfTU5FTU9OSUNfRU9SR0UsCisrICBBVlIzMl9NTkVNT05JQ19FT1JMVCwKKysgIEFWUjMyX01ORU1PTklDX0VPUk1JLAorKyAgQVZSMzJfTU5FTU9OSUNfRU9SUEwsCisrICBBVlIzMl9NTkVNT05JQ19FT1JMUywKKysgIEFWUjMyX01ORU1PTklDX0VPUkdULAorKyAgQVZSMzJfTU5FTU9OSUNfRU9STEUsCisrICBBVlIzMl9NTkVNT05JQ19FT1JISSwKKysgIEFWUjMyX01ORU1PTklDX0VPUlZTLAorKyAgQVZSMzJfTU5FTU9OSUNfRU9SVkMsCisrICBBVlIzMl9NTkVNT05JQ19FT1JRUywKKysgIEFWUjMyX01ORU1PTklDX0VPUkFMLAorKyAgQVZSMzJfTU5FTU9OSUNfRU9SSFMsCisrICBBVlIzMl9NTkVNT05JQ19FT1JMTywKKysgIEFWUjMyX01ORU1PTklDX0xEX1dFUSwKKysgIEFWUjMyX01ORU1PTklDX0xEX1dORSwKKysgIEFWUjMyX01ORU1PTklDX0xEX1dDQywKKysgIEFWUjMyX01ORU1PTklDX0xEX1dDUywKKysgIEFWUjMyX01ORU1PTklDX0xEX1dHRSwKKysgIEFWUjMyX01ORU1PTklDX0xEX1dMVCwKKysgIEFWUjMyX01ORU1PTklDX0xEX1dNSSwKKysgIEFWUjMyX01ORU1PTklDX0xEX1dQTCwKKysgIEFWUjMyX01ORU1PTklDX0xEX1dMUywKKysgIEFWUjMyX01ORU1PTklDX0xEX1dHVCwKKysgIEFWUjMyX01ORU1PTklDX0xEX1dMRSwKKysgIEFWUjMyX01ORU1PTklDX0xEX1dISSwKKysgIEFWUjMyX01ORU1PTklDX0xEX1dWUywKKysgIEFWUjMyX01ORU1PTklDX0xEX1dWQywKKysgIEFWUjMyX01ORU1PTklDX0xEX1dRUywKKysgIEFWUjMyX01ORU1PTklDX0xEX1dBTCwKKysgIEFWUjMyX01ORU1PTklDX0xEX1dIUywKKysgIEFWUjMyX01ORU1PTklDX0xEX1dMTywKKysgIEFWUjMyX01ORU1PTklDX0xEX1NIRVEsCisrICBBVlIzMl9NTkVNT05JQ19MRF9TSE5FLAorKyAgQVZSMzJfTU5FTU9OSUNfTERfU0hDQywKKysgIEFWUjMyX01ORU1PTklDX0xEX1NIQ1MsCisrICBBVlIzMl9NTkVNT05JQ19MRF9TSEdFLAorKyAgQVZSMzJfTU5FTU9OSUNfTERfU0hMVCwKKysgIEFWUjMyX01ORU1PTklDX0xEX1NITUksCisrICBBVlIzMl9NTkVNT05JQ19MRF9TSFBMLAorKyAgQVZSMzJfTU5FTU9OSUNfTERfU0hMUywKKysgIEFWUjMyX01ORU1PTklDX0xEX1NIR1QsCisrICBBVlIzMl9NTkVNT05JQ19MRF9TSExFLAorKyAgQVZSMzJfTU5FTU9OSUNfTERfU0hISSwKKysgIEFWUjMyX01ORU1PTklDX0xEX1NIVlMsCisrICBBVlIzMl9NTkVNT05JQ19MRF9TSFZDLAorKyAgQVZSMzJfTU5FTU9OSUNfTERfU0hRUywKKysgIEFWUjMyX01ORU1PTklDX0xEX1NIQUwsCisrICBBVlIzMl9NTkVNT05JQ19MRF9TSEhTLAorKyAgQVZSMzJfTU5FTU9OSUNfTERfU0hMTywKKysgIEFWUjMyX01ORU1PTklDX0xEX1VIRVEsCisrICBBVlIzMl9NTkVNT05JQ19MRF9VSE5FLAorKyAgQVZSMzJfTU5FTU9OSUNfTERfVUhDQywKKysgIEFWUjMyX01ORU1PTklDX0xEX1VIQ1MsCisrICBBVlIzMl9NTkVNT05JQ19MRF9VSEdFLAorKyAgQVZSMzJfTU5FTU9OSUNfTERfVUhMVCwKKysgIEFWUjMyX01ORU1PTklDX0xEX1VITUksCisrICBBVlIzMl9NTkVNT05JQ19MRF9VSFBMLAorKyAgQVZSMzJfTU5FTU9OSUNfTERfVUhMUywKKysgIEFWUjMyX01ORU1PTklDX0xEX1VIR1QsCisrICBBVlIzMl9NTkVNT05JQ19MRF9VSExFLAorKyAgQVZSMzJfTU5FTU9OSUNfTERfVUhISSwKKysgIEFWUjMyX01ORU1PTklDX0xEX1VIVlMsCisrICBBVlIzMl9NTkVNT05JQ19MRF9VSFZDLAorKyAgQVZSMzJfTU5FTU9OSUNfTERfVUhRUywKKysgIEFWUjMyX01ORU1PTklDX0xEX1VIQUwsCisrICBBVlIzMl9NTkVNT05JQ19MRF9VSEhTLAorKyAgQVZSMzJfTU5FTU9OSUNfTERfVUhMTywKKysgIEFWUjMyX01ORU1PTklDX0xEX1NCRVEsCisrICBBVlIzMl9NTkVNT05JQ19MRF9TQk5FLAorKyAgQVZSMzJfTU5FTU9OSUNfTERfU0JDQywKKysgIEFWUjMyX01ORU1PTklDX0xEX1NCQ1MsCisrICBBVlIzMl9NTkVNT05JQ19MRF9TQkdFLAorKyAgQVZSMzJfTU5FTU9OSUNfTERfU0JMVCwKKysgIEFWUjMyX01ORU1PTklDX0xEX1NCTUksCisrICBBVlIzMl9NTkVNT05JQ19MRF9TQlBMLAorKyAgQVZSMzJfTU5FTU9OSUNfTERfU0JMUywKKysgIEFWUjMyX01ORU1PTklDX0xEX1NCR1QsCisrICBBVlIzMl9NTkVNT05JQ19MRF9TQkxFLAorKyAgQVZSMzJfTU5FTU9OSUNfTERfU0JISSwKKysgIEFWUjMyX01ORU1PTklDX0xEX1NCVlMsCisrICBBVlIzMl9NTkVNT05JQ19MRF9TQlZDLAorKyAgQVZSMzJfTU5FTU9OSUNfTERfU0JRUywKKysgIEFWUjMyX01ORU1PTklDX0xEX1NCQUwsCisrICBBVlIzMl9NTkVNT05JQ19MRF9TQkhTLAorKyAgQVZSMzJfTU5FTU9OSUNfTERfU0JMTywKKysgIEFWUjMyX01ORU1PTklDX0xEX1VCRVEsCisrICBBVlIzMl9NTkVNT05JQ19MRF9VQk5FLAorKyAgQVZSMzJfTU5FTU9OSUNfTERfVUJDQywKKysgIEFWUjMyX01ORU1PTklDX0xEX1VCQ1MsCisrICBBVlIzMl9NTkVNT05JQ19MRF9VQkdFLAorKyAgQVZSMzJfTU5FTU9OSUNfTERfVUJMVCwKKysgIEFWUjMyX01ORU1PTklDX0xEX1VCTUksCisrICBBVlIzMl9NTkVNT05JQ19MRF9VQlBMLAorKyAgQVZSMzJfTU5FTU9OSUNfTERfVUJMUywKKysgIEFWUjMyX01ORU1PTklDX0xEX1VCR1QsCisrICBBVlIzMl9NTkVNT05JQ19MRF9VQkxFLAorKyAgQVZSMzJfTU5FTU9OSUNfTERfVUJISSwKKysgIEFWUjMyX01ORU1PTklDX0xEX1VCVlMsCisrICBBVlIzMl9NTkVNT05JQ19MRF9VQlZDLAorKyAgQVZSMzJfTU5FTU9OSUNfTERfVUJRUywKKysgIEFWUjMyX01ORU1PTklDX0xEX1VCQUwsCisrICBBVlIzMl9NTkVNT05JQ19MRF9VQkhTLAorKyAgQVZSMzJfTU5FTU9OSUNfTERfVUJMTywKKysgIEFWUjMyX01ORU1PTklDX1NUX1dFUSwKKysgIEFWUjMyX01ORU1PTklDX1NUX1dORSwKKysgIEFWUjMyX01ORU1PTklDX1NUX1dDQywKKysgIEFWUjMyX01ORU1PTklDX1NUX1dDUywKKysgIEFWUjMyX01ORU1PTklDX1NUX1dHRSwKKysgIEFWUjMyX01ORU1PTklDX1NUX1dMVCwKKysgIEFWUjMyX01ORU1PTklDX1NUX1dNSSwKKysgIEFWUjMyX01ORU1PTklDX1NUX1dQTCwKKysgIEFWUjMyX01ORU1PTklDX1NUX1dMUywKKysgIEFWUjMyX01ORU1PTklDX1NUX1dHVCwKKysgIEFWUjMyX01ORU1PTklDX1NUX1dMRSwKKysgIEFWUjMyX01ORU1PTklDX1NUX1dISSwKKysgIEFWUjMyX01ORU1PTklDX1NUX1dWUywKKysgIEFWUjMyX01ORU1PTklDX1NUX1dWQywKKysgIEFWUjMyX01ORU1PTklDX1NUX1dRUywKKysgIEFWUjMyX01ORU1PTklDX1NUX1dBTCwKKysgIEFWUjMyX01ORU1PTklDX1NUX1dIUywKKysgIEFWUjMyX01ORU1PTklDX1NUX1dMTywKKysgIEFWUjMyX01ORU1PTklDX1NUX0hFUSwKKysgIEFWUjMyX01ORU1PTklDX1NUX0hORSwKKysgIEFWUjMyX01ORU1PTklDX1NUX0hDQywKKysgIEFWUjMyX01ORU1PTklDX1NUX0hDUywKKysgIEFWUjMyX01ORU1PTklDX1NUX0hHRSwKKysgIEFWUjMyX01ORU1PTklDX1NUX0hMVCwKKysgIEFWUjMyX01ORU1PTklDX1NUX0hNSSwKKysgIEFWUjMyX01ORU1PTklDX1NUX0hQTCwKKysgIEFWUjMyX01ORU1PTklDX1NUX0hMUywKKysgIEFWUjMyX01ORU1PTklDX1NUX0hHVCwKKysgIEFWUjMyX01ORU1PTklDX1NUX0hMRSwKKysgIEFWUjMyX01ORU1PTklDX1NUX0hISSwKKysgIEFWUjMyX01ORU1PTklDX1NUX0hWUywKKysgIEFWUjMyX01ORU1PTklDX1NUX0hWQywKKysgIEFWUjMyX01ORU1PTklDX1NUX0hRUywKKysgIEFWUjMyX01ORU1PTklDX1NUX0hBTCwKKysgIEFWUjMyX01ORU1PTklDX1NUX0hIUywKKysgIEFWUjMyX01ORU1PTklDX1NUX0hMTywKKysgIEFWUjMyX01ORU1PTklDX1NUX0JFUSwKKysgIEFWUjMyX01ORU1PTklDX1NUX0JORSwKKysgIEFWUjMyX01ORU1PTklDX1NUX0JDQywKKysgIEFWUjMyX01ORU1PTklDX1NUX0JDUywKKysgIEFWUjMyX01ORU1PTklDX1NUX0JHRSwKKysgIEFWUjMyX01ORU1PTklDX1NUX0JMVCwKKysgIEFWUjMyX01ORU1PTklDX1NUX0JNSSwKKysgIEFWUjMyX01ORU1PTklDX1NUX0JQTCwKKysgIEFWUjMyX01ORU1PTklDX1NUX0JMUywKKysgIEFWUjMyX01ORU1PTklDX1NUX0JHVCwKKysgIEFWUjMyX01ORU1PTklDX1NUX0JMRSwKKysgIEFWUjMyX01ORU1PTklDX1NUX0JISSwKKysgIEFWUjMyX01ORU1PTklDX1NUX0JWUywKKysgIEFWUjMyX01ORU1PTklDX1NUX0JWQywKKysgIEFWUjMyX01ORU1PTklDX1NUX0JRUywKKysgIEFWUjMyX01ORU1PTklDX1NUX0JBTCwKKysgIEFWUjMyX01ORU1PTklDX1NUX0JIUywKKysgIEFWUjMyX01ORU1PTklDX1NUX0JMTywKKysgIEFWUjMyX01ORU1PTklDX01PVkgsCisrICBBVlIzMl9NTkVNT05JQ19fRU5EXworK307CisrI2RlZmluZSBBVlIzMl9OUl9NTkVNT05JQ1MgQVZSMzJfTU5FTU9OSUNfX0VORF8KKysKKytlbnVtIGF2cjMyX3N5bnRheF9wYXJzZXIKKysgIHsKKysgICAgQVZSMzJfUEFSU0VSX05PUk1BTCwKKysgICAgQVZSMzJfUEFSU0VSX0FMSUFTLAorKyAgICBBVlIzMl9QQVJTRVJfTERBLAorKyAgICBBVlIzMl9QQVJTRVJfQ0FMTCwKKysgICAgQVZSMzJfUEFSU0VSX19FTkRfCisrICB9OworKyNkZWZpbmUgQVZSMzJfTlJfUEFSU0VSUyBBVlIzMl9QQVJTRVJfX0VORF8KKy0tLSBhL29wY29kZXMvY29uZmlndXJlLmluCisrKysgYi9vcGNvZGVzL2NvbmZpZ3VyZS5pbgorQEAgLTE1OCw2ICsxNTgsNyBAQCBpZiB0ZXN0IHgke2FsbF90YXJnZXRzfSA9IHhmYWxzZSA7IHRoZW4KKyAJYmZkX2FyY19hcmNoKQkJdGE9IiR0YSBhcmMtZGlzLmxvIGFyYy1vcGMubG8gYXJjLWV4dC5sbyIgOzsKKyAJYmZkX2FybV9hcmNoKQkJdGE9IiR0YSBhcm0tZGlzLmxvIiA7OworIAliZmRfYXZyX2FyY2gpCQl0YT0iJHRhIGF2ci1kaXMubG8iIDs7CisrCWJmZF9hdnIzMl9hcmNoKQkJdGE9IiR0YSBhdnIzMi1hc20ubG8gYXZyMzItZGlzLmxvIGF2cjMyLW9wYy5sbyIgOzsKKyAJYmZkX2JmaW5fYXJjaCkJCXRhPSIkdGEgYmZpbi1kaXMubG8iIDs7CisgCWJmZF9jcjE2X2FyY2gpICAgIAl0YT0iJHRhIGNyMTYtZGlzLmxvIGNyMTYtb3BjLmxvIiA7OworIAliZmRfY3Jpc19hcmNoKQkJdGE9IiR0YSBjcmlzLWRpcy5sbyBjcmlzLW9wYy5sbyBjZ2VuLWJpdHNldC5sbyIgOzsKK0BAIC0yMTYsNyArMjE3LDcgQEAgaWYgdGVzdCB4JHthbGxfdGFyZ2V0c30gPSB4ZmFsc2UgOyB0aGVuCisgCQkJCXRhPSIkdGEgc2g2NC1kaXMubG8gc2g2NC1vcGMubG8iCisgCQkJCWFyY2hkZWZzPSIkYXJjaGRlZnMgLURJTkNMVURFX1NITUVESUEiCisgCQkJCWJyZWFrOzsKKy0JICAgIGVzYWM7CisrCSAgICBlc2FjCisgCSAgZG9uZQorIAkJCQl0YT0iJHRhIHNoLWRpcy5sbyBjZ2VuLWJpdHNldC5sbyIgOzsKKyAJYmZkX3NwYXJjX2FyY2gpCQl0YT0iJHRhIHNwYXJjLWRpcy5sbyBzcGFyYy1vcGMubG8iIDs7CistLS0gYS9vcGNvZGVzL2Rpc2Fzc2VtYmxlLmMKKysrKyBiL29wY29kZXMvZGlzYXNzZW1ibGUuYworQEAgLTI3LDYgKzI3LDcgQEAKKyAjZGVmaW5lIEFSQ0hfYXJjCisgI2RlZmluZSBBUkNIX2FybQorICNkZWZpbmUgQVJDSF9hdnIKKysjZGVmaW5lIEFSQ0hfYXZyMzIKKyAjZGVmaW5lIEFSQ0hfYmZpbgorICNkZWZpbmUgQVJDSF9jcjE2CisgI2RlZmluZSBBUkNIX2NyaXMKK0BAIC0xMjgsNiArMTI5LDExIEBAIGRpc2Fzc2VtYmxlciAoYWJmZCkKKyAgICAgICBkaXNhc3NlbWJsZSA9IHByaW50X2luc25fYXZyOworICAgICAgIGJyZWFrOworICNlbmRpZgorKyNpZmRlZiBBUkNIX2F2cjMyCisrICAgIGNhc2UgYmZkX2FyY2hfYXZyMzI6CisrICAgICAgZGlzYXNzZW1ibGUgPSBwcmludF9pbnNuX2F2cjMyOworKyAgICAgIGJyZWFrOworKyNlbmRpZgorICNpZmRlZiBBUkNIX2JmaW4KKyAgICAgY2FzZSBiZmRfYXJjaF9iZmluOgorICAgICAgIGRpc2Fzc2VtYmxlID0gcHJpbnRfaW5zbl9iZmluOworQEAgLTM0Niw5ICszNTIsOSBAQCBkaXNhc3NlbWJsZXIgKGFiZmQpCisgI2lmZGVmIEFSQ0hfc2NvcmUKKyAgICAgY2FzZSBiZmRfYXJjaF9zY29yZToKKyAgICAgICBpZiAoYmZkX2JpZ19lbmRpYW4gKGFiZmQpKQorLSAgICAgICAgZGlzYXNzZW1ibGUgPSBwcmludF9pbnNuX2JpZ19zY29yZTsgICAgICAKKysgICAgICAgIGRpc2Fzc2VtYmxlID0gcHJpbnRfaW5zbl9iaWdfc2NvcmU7CisgICAgICAgZWxzZQorLSAgICAgICAgZGlzYXNzZW1ibGUgPSBwcmludF9pbnNuX2xpdHRsZV9zY29yZTsgCisrICAgICAgICBkaXNhc3NlbWJsZSA9IHByaW50X2luc25fbGl0dGxlX3Njb3JlOworICAgICAgYnJlYWs7CisgI2VuZGlmCisgI2lmZGVmIEFSQ0hfc2gKK0BAIC00NjYsNiArNDcyLDkgQEAgZGlzYXNzZW1ibGVyX3VzYWdlIChzdHJlYW0pCisgI2lmZGVmIEFSQ0hfaTM4NgorICAgcHJpbnRfaTM4Nl9kaXNhc3NlbWJsZXJfb3B0aW9ucyAoc3RyZWFtKTsKKyAjZW5kaWYKKysjaWZkZWYgQVJDSF9hdnIzMgorKyAgcHJpbnRfYXZyMzJfZGlzYXNzZW1ibGVyX29wdGlvbnMgKHN0cmVhbSk7CisrI2VuZGlmCisgCisgICByZXR1cm47CisgfQorLS0tIGEvb3Bjb2Rlcy9NYWtlZmlsZS5hbQorKysrIGIvb3Bjb2Rlcy9NYWtlZmlsZS5hbQorQEAgLTMwLDYgKzMwLDcgQEAgTElCSUJFUlRZID0gLi4vbGliaWJlcnR5L2xpYmliZXJ0eS5hCisgIyBIZWFkZXIgZmlsZXMuCisgSEZJTEVTID0gXAorIAljZ2VuLW9wcy5oIGNnZW4tdHlwZXMuaCBcCisrCWF2cjMyLWFzbS5oIGF2cjMyLW9wYy5oIFwKKyAJZnIzMC1kZXNjLmggZnIzMC1vcGMuaCBcCisgCWZydi1kZXNjLmggZnJ2LW9wYy5oIFwKKyAJaDg1MDAtb3BjLmggXAorQEAgLTYzLDYgKzY0LDkgQEAgQ0ZJTEVTID0gXAorIAlhcmMtZXh0LmMgXAorIAlhcm0tZGlzLmMgXAorIAlhdnItZGlzLmMgXAorKwlhdnIzMi1hc20uYyBcCisrCWF2cjMyLWRpcy5jIFwKKysJYXZyMzItb3BjLmMgXAorIAliZmluLWRpcy5jIFwKKyAJY2dlbi1hc20uYyBcCisgCWNnZW4tYml0c2V0LmMgXAorQEAgLTIxNyw2ICsyMjEsOSBAQCBBTExfTUFDSElORVMgPSBcCisgCWFyYy1leHQubG8gXAorIAlhcm0tZGlzLmxvIFwKKyAJYXZyLWRpcy5sbyBcCisrCWF2cjMyLWFzbS5sbyBcCisrCWF2cjMyLWRpcy5sbyBcCisrCWF2cjMyLW9wYy5sbyBcCisgCWJmaW4tZGlzLmxvIFwKKyAJY2dlbi1hc20ubG8gXAorIAljZ2VuLWJpdHNldC5sbyBcCitAQCAtNjc0LDYgKzY4MSwxNSBAQCBhdnItZGlzLmxvOiBhdnItZGlzLmMgc3lzZGVwLmggY29uZmlnLmggCisgICAkKElOQ0RJUikvZGlzLWFzbS5oICQoQkZEX0gpICQoSU5DRElSKS9hbnNpZGVjbC5oICQoSU5DRElSKS9zeW1jYXQuaCBcCisgICBvcGludGwuaCAkKElOQ0RJUikvbGliaWJlcnR5LmggJChJTkNESVIpL2Fuc2lkZWNsLmggXAorICAgJChJTkNESVIpL29wY29kZS9hdnIuaAorK2F2cjMyLWFzbS5sbzogYXZyMzItYXNtLmMgc3lzZGVwLmggY29uZmlnLmggJChJTkNESVIpL2Fuc2lkZWNsLmggXAorKyAgJChCRkRfSCkgJChJTkNESVIpL3N5bWNhdC5oIGF2cjMyLW9wYy5oIG9waW50bC5oIFwKKysgICQoSU5DRElSKS94cmVnZXguaCAkKElOQ0RJUikveHJlZ2V4Mi5oIFwKKysgICQoSU5DRElSKS9saWJpYmVydHkuaCAkKElOQ0RJUikvc2FmZS1jdHlwZS5oCisrYXZyMzItZGlzLmxvOiBhdnIzMi1kaXMuYyBzeXNkZXAuaCBjb25maWcuaCAkKElOQ0RJUikvYW5zaWRlY2wuaCBcCisrICAkKElOQ0RJUikvZGlzLWFzbS5oICQoQkZEX0gpICQoSU5DRElSKS9zeW1jYXQuaCAkKElOQ0RJUikvbGliaWJlcnR5LmggXAorKyAgYXZyMzItb3BjLmggb3BpbnRsLmgKKythdnIzMi1vcGMubG86IGF2cjMyLW9wYy5jIHN5c2RlcC5oIGNvbmZpZy5oICQoSU5DRElSKS9hbnNpZGVjbC5oIFwKKysgICQoQkZEX0gpICQoSU5DRElSKS9zeW1jYXQuaCBhdnIzMi1vcGMuaCAkKElOQ0RJUikvbGliaWJlcnR5LmgKKyBiZmluLWRpcy5sbzogYmZpbi1kaXMuYyAkKElOQ0RJUikvb3Bjb2RlL2JmaW4uaCAkKElOQ0RJUikvZGlzLWFzbS5oIFwKKyAgICQoQkZEX0gpICQoSU5DRElSKS9hbnNpZGVjbC5oICQoSU5DRElSKS9zeW1jYXQuaAorIGNnZW4tYXNtLmxvOiBjZ2VuLWFzbS5jIHN5c2RlcC5oIGNvbmZpZy5oICQoSU5DRElSKS9hbnNpZGVjbC5oIFwKKy0tLSBhL2JmZC9iZmQtaW4yLmgKKysrKyBiL2JmZC9iZmQtaW4yLmgKK0BAIC0yMDE3LDYgKzIwMTcsMTEgQEAgZW51bSBiZmRfYXJjaGl0ZWN0dXJlCisgI2RlZmluZSBiZmRfbWFjaF9hdnI0ICAgICAgICAgIDQKKyAjZGVmaW5lIGJmZF9tYWNoX2F2cjUgICAgICAgICAgNQorICNkZWZpbmUgYmZkX21hY2hfYXZyNiAgICAgICAgICA2CisrICBiZmRfYXJjaF9hdnIzMiwgICAgIC8qIEF0bWVsIEFWUjMyICovCisrI2RlZmluZSBiZmRfbWFjaF9hdnIzMl9hcCAgICAgIDcwMDAKKysjZGVmaW5lIGJmZF9tYWNoX2F2cjMyX3VjICAgICAgMzAwMAorKyNkZWZpbmUgYmZkX21hY2hfYXZyMzJfdWNyMSAgICAzMDAxCisrI2RlZmluZSBiZmRfbWFjaF9hdnIzMl91Y3IyICAgIDMwMDIKKyAgIGJmZF9hcmNoX2JmaW4sICAgICAgICAvKiBBREkgQmxhY2tmaW4gKi8KKyAjZGVmaW5lIGJmZF9tYWNoX2JmaW4gICAgICAgICAgMQorICAgYmZkX2FyY2hfY3IxNiwgICAgICAgLyogTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBDb21wYWN0UklTQyAoaWUgQ1IxNikuICovCitAQCAtMzc1OCw2ICszNzYzLDg4IEBAIGluc3RydWN0aW9ucyAgKi8KKyBpbnN0cnVjdGlvbnMgICovCisgICBCRkRfUkVMT0NfQVZSXzZfQURJVywKKyAKKysvKiBEaWZmZXJlbmNlIGJldHdlZW4gdHdvIGxhYmVsczogTDIgLSBMMS4gVGhlIHZhbHVlIG9mIEwxIGlzIGVuY29kZWQKKythcyBzeW0gKyBhZGRlbmQsIHdoaWxlIHRoZSBpbml0aWFsIGRpZmZlcmVuY2UgYWZ0ZXIgYXNzZW1ibHkgaXMKKytpbnNlcnRlZCBpbnRvIHRoZSBvYmplY3QgZmlsZSBieSB0aGUgYXNzZW1ibGVyLiAgKi8KKysgIEJGRF9SRUxPQ19BVlIzMl9ESUZGMzIsCisrICBCRkRfUkVMT0NfQVZSMzJfRElGRjE2LAorKyAgQkZEX1JFTE9DX0FWUjMyX0RJRkY4LAorKworKy8qIFJlZmVyZW5jZSB0byBhIHN5bWJvbCB0aHJvdWdoIHRoZSBHbG9iYWwgT2Zmc2V0IFRhYmxlLiBUaGUgbGlua2VyCisrd2lsbCBhbGxvY2F0ZSBhbiBlbnRyeSBmb3Igc3ltYm9sIGluIHRoZSBHT1QgYW5kIGluc2VydCB0aGUgb2Zmc2V0Cisrb2YgdGhpcyBlbnRyeSBhcyB0aGUgcmVsb2NhdGlvbiB2YWx1ZS4gICovCisrICBCRkRfUkVMT0NfQVZSMzJfR09UMzIsCisrICBCRkRfUkVMT0NfQVZSMzJfR09UMTYsCisrICBCRkRfUkVMT0NfQVZSMzJfR09UOCwKKysKKysvKiBOb3JtYWwgKG5vbi1wYy1yZWxhdGl2ZSkgY29kZSByZWxvY2F0aW9ucy4gQWxpZ25tZW50IGFuZCBzaWduZWRuZXNzCisraXMgaW5kaWNhdGVkIGJ5IHRoZSBzdWZmaXhlcy4gUyBtZWFucyBzaWduZWQsIFUgbWVhbnMgdW5zaWduZWQuIFcKKyttZWFucyB3b3JkLWFsaWduZWQsIEggbWVhbnMgaGFsZndvcmQtYWxpZ25lZCwgbmVpdGhlciBtZWFucworK2J5dGUtYWxpZ25lZCAobm8gYWxpZ25tZW50LikgU1VCNSBpcyB0aGUgc2FtZSByZWxvY2F0aW9uIGFzIDE2Uy4gICovCisrICBCRkRfUkVMT0NfQVZSMzJfMjFTLAorKyAgQkZEX1JFTE9DX0FWUjMyXzE2VSwKKysgIEJGRF9SRUxPQ19BVlIzMl8xNlMsCisrICBCRkRfUkVMT0NfQVZSMzJfU1VCNSwKKysgIEJGRF9SRUxPQ19BVlIzMl84U19FWFQsCisrICBCRkRfUkVMT0NfQVZSMzJfOFMsCisrICBCRkRfUkVMT0NfQVZSMzJfMTVTLAorKworKy8qIFBDLXJlbGF0aXZlIHJlbG9jYXRpb25zIGFyZSBzaWduZWQgaWYgbmVpdGhlciAnVScgbm9yICdTJyBpcworK3NwZWNpZmllZC4gSG93ZXZlciwgd2UgZXhwbGljaXRseSB0YWNrIG9uIGEgJ0InIHRvIGluZGljYXRlIG5vCisrYWxpZ25tZW50LCB0byBhdm9pZCBjb25mdXNpb24gd2l0aCBkYXRhIHJlbG9jcy4gQWxsIG9mIHRoZXNlIHJlc29sdmUKKyt0byBzeW0gKyBhZGRlbmQgLSBvZmZzZXQsIGV4Y2VwdCB0aGUgb25lIHdpdGggJ04nIChuZWdhdGVkKSBzdWZmaXguCisrVGhpcyBwYXJ0aWN1bGFyIG9uZSByZXNvbHZlcyB0byBvZmZzZXQgLSBzeW0gLSBhZGRlbmQuICAqLworKyAgQkZEX1JFTE9DX0FWUjMyXzIySF9QQ1JFTCwKKysgIEJGRF9SRUxPQ19BVlIzMl8xOFdfUENSRUwsCisrICBCRkRfUkVMT0NfQVZSMzJfMTZCX1BDUkVMLAorKyAgQkZEX1JFTE9DX0FWUjMyXzE2Tl9QQ1JFTCwKKysgIEJGRF9SRUxPQ19BVlIzMl8xNFVXX1BDUkVMLAorKyAgQkZEX1JFTE9DX0FWUjMyXzExSF9QQ1JFTCwKKysgIEJGRF9SRUxPQ19BVlIzMl8xMFVXX1BDUkVMLAorKyAgQkZEX1JFTE9DX0FWUjMyXzlIX1BDUkVMLAorKyAgQkZEX1JFTE9DX0FWUjMyXzlVV19QQ1JFTCwKKysKKysvKiBTdWJ0cmFjdCB0aGUgbGluay10aW1lIGFkZHJlc3Mgb2YgdGhlIEdPVCBmcm9tIChzeW1ib2wgKyBhZGRlbmQpCisrYW5kIGluc2VydCB0aGUgcmVzdWx0LiAgKi8KKysgIEJGRF9SRUxPQ19BVlIzMl9HT1RQQywKKysKKysvKiBSZWZlcmVuY2UgdG8gYSBzeW1ib2wgdGhyb3VnaCB0aGUgR09ULiBUaGUgbGlua2VyIHdpbGwgYWxsb2NhdGUgYW4KKytlbnRyeSBmb3Igc3ltYm9sIGluIHRoZSBHT1QgYW5kIGluc2VydCB0aGUgb2Zmc2V0IG9mIHRoaXMgZW50cnkgYXMKKyt0aGUgcmVsb2NhdGlvbiB2YWx1ZS4gYWRkZW5kIG11c3QgYmUgemVyby4gQXMgdXN1YWwsICdTJyBtZWFucworK3NpZ25lZCwgJ1cnIG1lYW5zIHdvcmQtYWxpZ25lZCwgZXRjLiAgKi8KKysgIEJGRF9SRUxPQ19BVlIzMl9HT1RDQUxMLAorKyAgQkZEX1JFTE9DX0FWUjMyX0xEQV9HT1QsCisrICBCRkRfUkVMT0NfQVZSMzJfR09UMjFTLAorKyAgQkZEX1JFTE9DX0FWUjMyX0dPVDE4U1csCisrICBCRkRfUkVMT0NfQVZSMzJfR09UMTZTLAorKworKy8qIDMyLWJpdCBjb25zdGFudCBwb29sIGVudHJ5LiBJIGRvbid0IHRoaW5rIDgtIGFuZCAxNi1iaXQgZW50cmllcyBtYWtlCisrYSB3aG9sZSBsb3Qgb2Ygc2Vuc2UuICAqLworKyAgQkZEX1JFTE9DX0FWUjMyXzMyX0NQRU5ULAorKworKy8qIENvbnN0YW50IHBvb2wgcmVmZXJlbmNlcy4gU29tZSBvZiB0aGVzZSByZWxvY2F0aW9ucyBhcmUgc2lnbmVkLAorK290aGVycyBhcmUgdW5zaWduZWQuIEl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlciwgc2luY2UgdGhlIGNvbnN0YW50CisrcG9vbCBhbHdheXMgY29tZXMgYWZ0ZXIgdGhlIGNvZGUgdGhhdCByZWZlcmVuY2VzIGl0LiAgKi8KKysgIEJGRF9SRUxPQ19BVlIzMl9DUENBTEwsCisrICBCRkRfUkVMT0NfQVZSMzJfMTZfQ1AsCisrICBCRkRfUkVMT0NfQVZSMzJfOVdfQ1AsCisrCisrLyogc3ltIG11c3QgYmUgdGhlIGFic29sdXRlIHN5bWJvbC4gVGhlIGFkZGVuZCBzcGVjaWZpZXMgdGhlIGFsaWdubWVudAorK29yZGVyLCBlLmcuIGlmIGFkZGVuZCBpcyAyLCB0aGUgbGlua2VyIG11c3QgYWRkIHBhZGRpbmcgc28gdGhhdCB0aGUKKytuZXh0IGFkZHJlc3MgaXMgYWxpZ25lZCB0byBhIDQtYnl0ZSBib3VuZGFyeS4gICovCisrICBCRkRfUkVMT0NfQVZSMzJfQUxJR04sCisrCisrLyogQ29kZSByZWxvY2F0aW9ucyB0aGF0IHdpbGwgbmV2ZXIgbWFrZSBpdCB0byB0aGUgb3V0cHV0IGZpbGUuICAqLworKyAgQkZEX1JFTE9DX0FWUjMyXzE0VVcsCisrICBCRkRfUkVMT0NfQVZSMzJfMTBVVywKKysgIEJGRF9SRUxPQ19BVlIzMl8xMFNXLAorKyAgQkZEX1JFTE9DX0FWUjMyX1NUSEhfVywKKysgIEJGRF9SRUxPQ19BVlIzMl83VVcsCisrICBCRkRfUkVMT0NfQVZSMzJfNlMsCisrICBCRkRfUkVMT0NfQVZSMzJfNlVXLAorKyAgQkZEX1JFTE9DX0FWUjMyXzRVSCwKKysgIEJGRF9SRUxPQ19BVlIzMl8zVSwKKysKKyAvKiBEaXJlY3QgMTIgYml0LiAgKi8KKyAgIEJGRF9SRUxPQ18zOTBfMTIsCisgCistLS0gL2Rldi9udWxsCisrKysgYi9iZmQvYmZkLWluMy5oCitAQCAtMCwwICsxLDU0MDYgQEAKKysvKiBETyBOT1QgRURJVCEgIC0qLSBidWZmZXItcmVhZC1vbmx5OiB0IC0qLSAgVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgCisrICAgZ2VuZXJhdGVkIGZyb20gImJmZC1pbi5oIiwgImluaXQuYyIsICJvcG5jbHMuYyIsICJsaWJiZmQuYyIsIAorKyAgICJiZmRpby5jIiwgImJmZHdpbi5jIiwgInNlY3Rpb24uYyIsICJhcmNodXJlcy5jIiwgInJlbG9jLmMiLCAKKysgICAic3ltcy5jIiwgImJmZC5jIiwgImFyY2hpdmUuYyIsICJjb3JlZmlsZS5jIiwgInRhcmdldHMuYyIsICJmb3JtYXQuYyIsIAorKyAgICJsaW5rZXIuYyIgYW5kICJzaW1wbGUuYyIuCisrICAgUnVuICJtYWtlIGhlYWRlcnMiIGluIHlvdXIgYnVpbGQgYmZkLyB0byByZWdlbmVyYXRlLiAgKi8KKysKKysvKiBNYWluIGhlYWRlciBmaWxlIGZvciB0aGUgYmZkIGxpYnJhcnkgLS0gcG9ydGFibGUgYWNjZXNzIHRvIG9iamVjdCBmaWxlcy4KKysKKysgICBDb3B5cmlnaHQgMTk5MCwgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwKKysgICAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3CisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgQ29udHJpYnV0ZWQgYnkgQ3lnbnVzIFN1cHBvcnQuCisrCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQkZELCB0aGUgQmluYXJ5IEZpbGUgRGVzY3JpcHRvciBsaWJyYXJ5LgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKysKKysjaWZuZGVmIF9fQkZEX0hfU0VFTl9fCisrI2RlZmluZSBfX0JGRF9IX1NFRU5fXworKworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyNlbmRpZgorKworKyNpbmNsdWRlICJhbnNpZGVjbC5oIgorKyNpbmNsdWRlICJzeW1jYXQuaCIKKysjaWYgZGVmaW5lZCAoX19TVERDX18pIHx8IGRlZmluZWQgKEFMTU9TVF9TVERDKSB8fCBkZWZpbmVkIChIQVZFX1NUUklOR0laRSkKKysjaWZuZGVmIFNBQkVSCisrLyogVGhpcyBoYWNrIGlzIHRvIGF2b2lkIGEgcHJvYmxlbSB3aXRoIHNvbWUgc3RyaWN0IEFOU0kgQyBwcmVwcm9jZXNzb3JzLgorKyAgIFRoZSBwcm9ibGVtIGlzLCAiMzJfIiBpcyBub3QgYSB2YWxpZCBwcmVwcm9jZXNzaW5nIHRva2VuLCBhbmQgd2UgZG9uJ3QKKysgICB3YW50IGV4dHJhIHVuZGVyc2NvcmVzIChlLmcuLCAibmxtXzMyXyIpLiAgVGhlIFhDT05DQVQyIG1hY3JvIHdpbGwKKysgICBjYXVzZSB0aGUgaW5uZXIgQ09OQ0FUMiBtYWNyb3MgdG8gYmUgZXZhbHVhdGVkIGZpcnN0LCBwcm9kdWNpbmcKKysgICBzdGlsbC12YWxpZCBwcC10b2tlbnMuICBUaGVuIHRoZSBmaW5hbCBjb25jYXRlbmF0aW9uIGNhbiBiZSBkb25lLiAgKi8KKysjdW5kZWYgQ09OQ0FUNAorKyNkZWZpbmUgQ09OQ0FUNChhLGIsYyxkKSBYQ09OQ0FUMihDT05DQVQyKGEsYiksQ09OQ0FUMihjLGQpKQorKyNlbmRpZgorKyNlbmRpZgorKworKy8qIFRoaXMgaXMgYSB1dGlsaXR5IG1hY3JvIHRvIGhhbmRsZSB0aGUgc2l0dWF0aW9uIHdoZXJlIHRoZSBjb2RlCisrICAgd2FudHMgdG8gcGxhY2UgYSBjb25zdGFudCBzdHJpbmcgaW50byB0aGUgY29kZSwgZm9sbG93ZWQgYnkgYQorKyAgIGNvbW1hIGFuZCB0aGVuIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZy4gIERvaW5nIHRoaXMgYnkgaGFuZAorKyAgIGlzIGVycm9yIHByb25lLCBzbyB1c2luZyB0aGlzIG1hY3JvIGlzIHNhZmVyLiAgVGhlIG1hY3JvIHdpbGwKKysgICBhbHNvIHNhZmVseSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYSBOVUxMIGlzIHBhc3NlZCBhcyB0aGUgYXJnLiAgKi8KKysjZGVmaW5lIFNUUklOR19DT01NQV9MRU4oU1RSKSAoU1RSKSwgKChTVFIpID8gc2l6ZW9mIChTVFIpIC0gMSA6IDApCisrLyogVW5mb3J0dW5hdGVseSBpdCBpcyBub3QgcG9zc2libGUgdG8gdXNlIHRoZSBTVFJJTkdfQ09NTUFfTEVOIG1hY3JvCisrICAgdG8gY3JlYXRlIHRoZSBhcmd1bWVudHMgdG8gYW5vdGhlciBtYWNybywgc2luY2UgdGhlIHByZXByb2Nlc3NvcgorKyAgIHdpbGwgbWlzLWNvdW50IHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRvIHRoZSBvdXRlciBtYWNybyAoYnkgbm90CisrICAgZXZhbHVhdGluZyBTVFJJTkdfQ09NTUFfTEVOIGFuZCBzbyBtaXNzaW5nIHRoZSBjb21tYSkuICBUaGlzIGlzIGEKKysgICBwcm9ibGVtIGZvciBleGFtcGxlIHdoZW4gdHJ5aW5nIHRvIHVzZSBTVFJJTkdfQ09NTUFfTEVOIHRvIGJ1aWxkCisrICAgdGhlIGFyZ3VtZW50cyB0byB0aGUgc3RybmNtcCgpIG1hY3JvLiAgSGVuY2UgdGhpcyBhbHRlcm5hdGl2ZQorKyAgIGRlZmluaXRpb24gb2Ygc3RybmNtcCBpcyBwcm92aWRlZCBoZXJlLgorKyAgIAorKyAgIE5vdGUgLSB0aGVzZSBtYWNyb3MgZG8gTk9UIHdvcmsgaWYgU1RSMiBpcyBub3QgYSBjb25zdGFudCBzdHJpbmcuICAqLworKyNkZWZpbmUgQ09OU1RfU1RSTkVRKFNUUjEsU1RSMikgKHN0cm5jbXAgKChTVFIxKSwgKFNUUjIpLCBzaXplb2YgKFNUUjIpIC0gMSkgPT0gMCkKKysgIC8qIHN0cmNweSgpIGNhbiBoYXZlIGEgc2ltaWxhciBwcm9ibGVtLCBidXQgc2luY2Ugd2Uga25vdyB3ZSBhcmUKKysgICAgIGNvcHlpbmcgYSBjb25zdGFudCBzdHJpbmcsIHdlIGNhbiB1c2UgbWVtY3B5IHdoaWNoIHdpbGwgYmUgZmFzdGVyCisrICAgICBzaW5jZSB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIGZvciBhIE5VTCBieXRlIGluc2lkZSBTVFIuICBXZQorKyAgICAgY2FuIGFsc28gc2F2ZSB0aW1lIGlmIHdlIGRvIG5vdCBuZWVkIHRvIGNvcHkgdGhlIHRlcm1pbmF0aW5nIE5VTC4gICovCisrI2RlZmluZSBMSVRNRU1DUFkoREVTVCxTVFIyKSBtZW1jcHkgKChERVNUKSwgKFNUUjIpLCBzaXplb2YgKFNUUjIpIC0gMSkKKysjZGVmaW5lIExJVFNUUkNQWShERVNULFNUUjIpIG1lbWNweSAoKERFU1QpLCAoU1RSMiksIHNpemVvZiAoU1RSMikpCisrCisrCisrLyogVGhlIHdvcmQgc2l6ZSB1c2VkIGJ5IEJGRCBvbiB0aGUgaG9zdC4gIFRoaXMgbWF5IGJlIDY0IHdpdGggYSAzMgorKyAgIGJpdCB0YXJnZXQgaWYgdGhlIGhvc3QgaXMgNjQgYml0LCBvciBpZiBvdGhlciA2NCBiaXQgdGFyZ2V0cyBoYXZlCisrICAgYmVlbiBzZWxlY3RlZCB3aXRoIC0tZW5hYmxlLXRhcmdldHMsIG9yIGlmIC0tZW5hYmxlLTY0LWJpdC1iZmQuICAqLworKyNkZWZpbmUgQkZEX0FSQ0hfU0laRSAzMgorKworKy8qIFRoZSB3b3JkIHNpemUgb2YgdGhlIGRlZmF1bHQgYmZkIHRhcmdldC4gICovCisrI2RlZmluZSBCRkRfREVGQVVMVF9UQVJHRVRfU0laRSAzMgorKworKyNkZWZpbmUgQkZEX0hPU1RfNjRCSVRfTE9ORyAwCisrI2RlZmluZSBCRkRfSE9TVF82NEJJVF9MT05HX0xPTkcgMAorKyNkZWZpbmUgQkZEX0hPU1RfTE9OR19MT05HIDEKKysjaWYgMQorKyNkZWZpbmUgQkZEX0hPU1RfNjRfQklUIGxvbmcgbG9uZworKyNkZWZpbmUgQkZEX0hPU1RfVV82NF9CSVQgdW5zaWduZWQgbG9uZyBsb25nCisrdHlwZWRlZiBCRkRfSE9TVF82NF9CSVQgYmZkX2ludDY0X3Q7CisrdHlwZWRlZiBCRkRfSE9TVF9VXzY0X0JJVCBiZmRfdWludDY0X3Q7CisrI2VuZGlmCisrCisrI2lmIEJGRF9BUkNIX1NJWkUgPj0gNjQKKysjZGVmaW5lIEJGRDY0CisrI2VuZGlmCisrCisrI2lmbmRlZiBJTkxJTkUKKysjaWYgX19HTlVDX18gPj0gMgorKyNkZWZpbmUgSU5MSU5FIF9faW5saW5lX18KKysjZWxzZQorKyNkZWZpbmUgSU5MSU5FCisrI2VuZGlmCisrI2VuZGlmCisrCisrLyogRGVjbGFyaW5nIGEgdHlwZSB3aWRlIGVub3VnaCB0byBob2xkIGEgaG9zdCBsb25nIGFuZCBhIGhvc3QgcG9pbnRlci4gICovCisrI2RlZmluZSBCRkRfSE9TVFBUUl9UCXVuc2lnbmVkIGxvbmcKKyt0eXBlZGVmIEJGRF9IT1NUUFRSX1QgYmZkX2hvc3RwdHJfdDsKKysKKysvKiBGb3J3YXJkIGRlY2xhcmF0aW9uLiAgKi8KKyt0eXBlZGVmIHN0cnVjdCBiZmQgYmZkOworKworKy8qIEJvb2xlYW4gdHlwZSB1c2VkIGluIGJmZC4gIFRvbyBtYW55IHN5c3RlbXMgZGVmaW5lIHRoZWlyIG93bgorKyAgIHZlcnNpb25zIG9mICJib29sZWFuIiBmb3IgdXMgdG8gc2FmZWx5IHR5cGVkZWYgYSAiYm9vbGVhbiIgb2YKKysgICBvdXIgb3duLiAgVXNpbmcgYW4gZW51bSBmb3IgImJmZF9ib29sZWFuIiBoYXMgaXRzIG93biBzZXQgb2YKKysgICBwcm9ibGVtcywgd2l0aCBzdHJhbmdlIGxvb2tpbmcgY2FzdHMgcmVxdWlyZWQgdG8gYXZvaWQgd2FybmluZ3MKKysgICBvbiBzb21lIG9sZGVyIGNvbXBpbGVycy4gIFRodXMgd2UganVzdCB1c2UgYW4gaW50LgorKworKyAgIEdlbmVyYWwgcnVsZTogRnVuY3Rpb25zIHdoaWNoIGFyZSBiZmRfYm9vbGVhbiByZXR1cm4gVFJVRSBvbgorKyAgIHN1Y2Nlc3MgYW5kIEZBTFNFIG9uIGZhaWx1cmUgKHVubGVzcyB0aGV5J3JlIGEgcHJlZGljYXRlKS4gICovCisrCisrdHlwZWRlZiBpbnQgYmZkX2Jvb2xlYW47CisrI3VuZGVmIEZBTFNFCisrI3VuZGVmIFRSVUUKKysjZGVmaW5lIEZBTFNFIDAKKysjZGVmaW5lIFRSVUUgMQorKworKyNpZmRlZiBCRkQ2NAorKworKyNpZm5kZWYgQkZEX0hPU1RfNjRfQklUCisrICNlcnJvciBObyA2NCBiaXQgaW50ZWdlciB0eXBlIGF2YWlsYWJsZQorKyNlbmRpZiAvKiAhIGRlZmluZWQgKEJGRF9IT1NUXzY0X0JJVCkgKi8KKysKKyt0eXBlZGVmIEJGRF9IT1NUX1VfNjRfQklUIGJmZF92bWE7CisrdHlwZWRlZiBCRkRfSE9TVF82NF9CSVQgYmZkX3NpZ25lZF92bWE7CisrdHlwZWRlZiBCRkRfSE9TVF9VXzY0X0JJVCBiZmRfc2l6ZV90eXBlOworK3R5cGVkZWYgQkZEX0hPU1RfVV82NF9CSVQgc3ltdmFsdWU7CisrCisrI2lmbmRlZiBmcHJpbnRmX3ZtYQorKyNpZiBCRkRfSE9TVF82NEJJVF9MT05HCisrI2RlZmluZSBzcHJpbnRmX3ZtYShzLHgpIHNwcmludGYgKHMsICIlMDE2bHgiLCB4KQorKyNkZWZpbmUgZnByaW50Zl92bWEoZix4KSBmcHJpbnRmIChmLCAiJTAxNmx4IiwgeCkKKysjZWxpZiBCRkRfSE9TVF82NEJJVF9MT05HX0xPTkcKKysjZGVmaW5lIHNwcmludGZfdm1hKHMseCkgc3ByaW50ZiAocywgIiUwMTZsbHgiLCB4KQorKyNkZWZpbmUgZnByaW50Zl92bWEoZix4KSBmcHJpbnRmIChmLCAiJTAxNmxseCIsIHgpCisrI2Vsc2UKKysjZGVmaW5lIF9iZmRfaW50NjRfbG93KHgpICgodW5zaWduZWQgbG9uZykgKCgoeCkgJiAweGZmZmZmZmZmKSkpCisrI2RlZmluZSBfYmZkX2ludDY0X2hpZ2goeCkgKCh1bnNpZ25lZCBsb25nKSAoKCh4KSA+PiAzMikgJiAweGZmZmZmZmZmKSkKKysjZGVmaW5lIGZwcmludGZfdm1hKHMseCkgXAorKyAgZnByaW50ZiAoKHMpLCAiJTA4bHglMDhseCIsIF9iZmRfaW50NjRfaGlnaCAoeCksIF9iZmRfaW50NjRfbG93ICh4KSkKKysjZGVmaW5lIHNwcmludGZfdm1hKHMseCkgXAorKyAgc3ByaW50ZiAoKHMpLCAiJTA4bHglMDhseCIsIF9iZmRfaW50NjRfaGlnaCAoeCksIF9iZmRfaW50NjRfbG93ICh4KSkKKysjZW5kaWYKKysjZW5kaWYKKysKKysjZWxzZSAvKiBub3QgQkZENjQgICovCisrCisrLyogUmVwcmVzZW50IGEgdGFyZ2V0IGFkZHJlc3MuICBBbHNvIHVzZWQgYXMgYSBnZW5lcmljIHVuc2lnbmVkIHR5cGUKKysgICB3aGljaCBpcyBndWFyYW50ZWVkIHRvIGJlIGJpZyBlbm91Z2ggdG8gaG9sZCBhbnkgYXJpdGhtZXRpYyB0eXBlcworKyAgIHdlIG5lZWQgdG8gZGVhbCB3aXRoLiAgKi8KKyt0eXBlZGVmIHVuc2lnbmVkIGxvbmcgYmZkX3ZtYTsKKysKKysvKiBBIGdlbmVyaWMgc2lnbmVkIHR5cGUgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBiZSBiaWcgZW5vdWdoIHRvIGhvbGQgYW55CisrICAgYXJpdGhtZXRpYyB0eXBlcyB3ZSBuZWVkIHRvIGRlYWwgd2l0aC4gIENhbiBiZSBhc3N1bWVkIHRvIGJlIGNvbXBhdGlibGUKKysgICB3aXRoIGJmZF92bWEgaW4gdGhlIHNhbWUgd2F5IHRoYXQgc2lnbmVkIGFuZCB1bnNpZ25lZCBpbnRzIGFyZSBjb21wYXRpYmxlCisrICAgKGFzIHBhcmFtZXRlcnMsIGluIGFzc2lnbm1lbnQsIGV0YykuICAqLworK3R5cGVkZWYgbG9uZyBiZmRfc2lnbmVkX3ZtYTsKKysKKyt0eXBlZGVmIHVuc2lnbmVkIGxvbmcgc3ltdmFsdWU7CisrdHlwZWRlZiB1bnNpZ25lZCBsb25nIGJmZF9zaXplX3R5cGU7CisrCisrLyogUHJpbnQgYSBiZmRfdm1hIHggb24gc3RyZWFtIHMuICAqLworKyNkZWZpbmUgZnByaW50Zl92bWEocyx4KSBmcHJpbnRmIChzLCAiJTA4bHgiLCB4KQorKyNkZWZpbmUgc3ByaW50Zl92bWEocyx4KSBzcHJpbnRmIChzLCAiJTA4bHgiLCB4KQorKworKyNlbmRpZiAvKiBub3QgQkZENjQgICovCisrCisrI2RlZmluZSBIQUxGX0JGRF9TSVpFX1RZUEUgXAorKyAgKCgoYmZkX3NpemVfdHlwZSkgMSkgPDwgKDggKiBzaXplb2YgKGJmZF9zaXplX3R5cGUpIC8gMikpCisrCisrI2lmbmRlZiBCRkRfSE9TVF82NF9CSVQKKysvKiBGYWxsIGJhY2sgb24gYSAzMiBiaXQgdHlwZS4gIFRoZSBpZGVhIGlzIHRvIG1ha2UgdGhlc2UgdHlwZXMgYWx3YXlzCisrICAgYXZhaWxhYmxlIGZvciBmdW5jdGlvbiByZXR1cm4gdHlwZXMsIGJ1dCBpbiB0aGUgY2FzZSB0aGF0CisrICAgQkZEX0hPU1RfNjRfQklUIGlzIHVuZGVmaW5lZCBzdWNoIGEgZnVuY3Rpb24gc2hvdWxkIGFib3J0IG9yCisrICAgb3RoZXJ3aXNlIHNpZ25hbCBhbiBlcnJvci4gICovCisrdHlwZWRlZiBiZmRfc2lnbmVkX3ZtYSBiZmRfaW50NjRfdDsKKyt0eXBlZGVmIGJmZF92bWEgYmZkX3VpbnQ2NF90OworKyNlbmRpZgorKworKy8qIEFuIG9mZnNldCBpbnRvIGEgZmlsZS4gIEJGRCBhbHdheXMgdXNlcyB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBvZmZzZXQKKysgICBiYXNlZCBvbiB0aGUgYnVpbGQgdGltZSBhdmFpbGFiaWxpdHkgb2YgZnNlZWssIGZzZWVrbywgb3IgZnNlZWtvNjQuICAqLworK3R5cGVkZWYgQkZEX0hPU1RfNjRfQklUIGZpbGVfcHRyOworK3R5cGVkZWYgdW5zaWduZWQgQkZEX0hPU1RfNjRfQklUIHVmaWxlX3B0cjsKKysKKytleHRlcm4gdm9pZCBiZmRfc3ByaW50Zl92bWEgKGJmZCAqLCBjaGFyICosIGJmZF92bWEpOworK2V4dGVybiB2b2lkIGJmZF9mcHJpbnRmX3ZtYSAoYmZkICosIHZvaWQgKiwgYmZkX3ZtYSk7CisrCisrI2RlZmluZSBwcmludGZfdm1hKHgpIGZwcmludGZfdm1hKHN0ZG91dCx4KQorKyNkZWZpbmUgYmZkX3ByaW50Zl92bWEoYWJmZCx4KSBiZmRfZnByaW50Zl92bWEgKGFiZmQsc3Rkb3V0LHgpCisrCisrdHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxhZ3dvcmQ7CS8qIDMyIGJpdHMgb2YgZmxhZ3MgKi8KKyt0eXBlZGVmIHVuc2lnbmVkIGNoYXIgYmZkX2J5dGU7CisrDAorKy8qIEZpbGUgZm9ybWF0cy4gICovCisrCisrdHlwZWRlZiBlbnVtIGJmZF9mb3JtYXQKKyt7CisrICBiZmRfdW5rbm93biA9IDAsCS8qIEZpbGUgZm9ybWF0IGlzIHVua25vd24uICAqLworKyAgYmZkX29iamVjdCwJCS8qIExpbmtlci9hc3NlbWJsZXIvY29tcGlsZXIgb3V0cHV0LiAgKi8KKysgIGJmZF9hcmNoaXZlLAkJLyogT2JqZWN0IGFyY2hpdmUgZmlsZS4gICovCisrICBiZmRfY29yZSwJCS8qIENvcmUgZHVtcC4gICovCisrICBiZmRfdHlwZV9lbmQJCS8qIE1hcmtzIHRoZSBlbmQ7IGRvbid0IHVzZSBpdCEgICovCisrfQorK2JmZF9mb3JtYXQ7CisrCisrLyogVmFsdWVzIHRoYXQgbWF5IGFwcGVhciBpbiB0aGUgZmxhZ3MgZmllbGQgb2YgYSBCRkQuICBUaGVzZSBhbHNvCisrICAgYXBwZWFyIGluIHRoZSBvYmplY3RfZmxhZ3MgZmllbGQgb2YgdGhlIGJmZF90YXJnZXQgc3RydWN0dXJlLCB3aGVyZQorKyAgIHRoZXkgaW5kaWNhdGUgdGhlIHNldCBvZiBmbGFncyB1c2VkIGJ5IHRoYXQgYmFja2VuZCAobm90IGFsbCBmbGFncworKyAgIGFyZSBtZWFuaW5nZnVsIGZvciBhbGwgb2JqZWN0IGZpbGUgZm9ybWF0cykgKEZJWE1FOiBhdCB0aGUgbW9tZW50LAorKyAgIHRoZSBvYmplY3RfZmxhZ3MgdmFsdWVzIGhhdmUgbW9zdGx5IGp1c3QgYmVlbiBjb3BpZWQgZnJvbSBiYWNrZW5kCisrICAgdG8gYW5vdGhlciwgYW5kIGFyZSBub3QgbmVjZXNzYXJpbHkgY29ycmVjdCkuICAqLworKworKy8qIE5vIGZsYWdzLiAgKi8KKysjZGVmaW5lIEJGRF9OT19GTEFHUyAgIAkweDAwCisrCisrLyogQkZEIGNvbnRhaW5zIHJlbG9jYXRpb24gZW50cmllcy4gICovCisrI2RlZmluZSBIQVNfUkVMT0MgICAJMHgwMQorKworKy8qIEJGRCBpcyBkaXJlY3RseSBleGVjdXRhYmxlLiAgKi8KKysjZGVmaW5lIEVYRUNfUCAgICAgIAkweDAyCisrCisrLyogQkZEIGhhcyBsaW5lIG51bWJlciBpbmZvcm1hdGlvbiAoYmFzaWNhbGx5IHVzZWQgZm9yIEZfTE5OTyBpbiBhCisrICAgQ09GRiBoZWFkZXIpLiAgKi8KKysjZGVmaW5lIEhBU19MSU5FTk8gIAkweDA0CisrCisrLyogQkZEIGhhcyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICAqLworKyNkZWZpbmUgSEFTX0RFQlVHICAgCTB4MDgKKysKKysvKiBCRkQgaGFzIHN5bWJvbHMuICAqLworKyNkZWZpbmUgSEFTX1NZTVMgICAgCTB4MTAKKysKKysvKiBCRkQgaGFzIGxvY2FsIHN5bWJvbHMgKGJhc2ljYWxseSB1c2VkIGZvciBGX0xTWU1TIGluIGEgQ09GRgorKyAgIGhlYWRlcikuICAqLworKyNkZWZpbmUgSEFTX0xPQ0FMUyAgCTB4MjAKKysKKysvKiBCRkQgaXMgYSBkeW5hbWljIG9iamVjdC4gICovCisrI2RlZmluZSBEWU5BTUlDICAgICAJMHg0MAorKworKy8qIFRleHQgc2VjdGlvbiBpcyB3cml0ZSBwcm90ZWN0ZWQgKGlmIERfUEFHRUQgaXMgbm90IHNldCwgdGhpcyBpcworKyAgIGxpa2UgYW4gYS5vdXQgTk1BR0lDIGZpbGUpICh0aGUgbGlua2VyIHNldHMgdGhpcyBieSBkZWZhdWx0LCBidXQKKysgICBjbGVhcnMgaXQgZm9yIC1yIG9yIC1OKS4gICovCisrI2RlZmluZSBXUF9URVhUICAgICAJMHg4MAorKworKy8qIEJGRCBpcyBkeW5hbWljYWxseSBwYWdlZCAodGhpcyBpcyBsaWtlIGFuIGEub3V0IFpNQUdJQyBmaWxlKSAodGhlCisrICAgbGlua2VyIHNldHMgdGhpcyBieSBkZWZhdWx0LCBidXQgY2xlYXJzIGl0IGZvciAtciBvciAtbiBvciAtTikuICAqLworKyNkZWZpbmUgRF9QQUdFRCAgICAgCTB4MTAwCisrCisrLyogQkZEIGlzIHJlbGF4YWJsZSAodGhpcyBtZWFucyB0aGF0IGJmZF9yZWxheF9zZWN0aW9uIG1heSBiZSBhYmxlIHRvCisrICAgZG8gc29tZXRoaW5nKSAoc29tZXRpbWVzIGJmZF9yZWxheF9zZWN0aW9uIGNhbiBkbyBzb21ldGhpbmcgZXZlbiBpZgorKyAgIHRoaXMgaXMgbm90IHNldCkuICAqLworKyNkZWZpbmUgQkZEX0lTX1JFTEFYQUJMRSAweDIwMAorKworKy8qIFRoaXMgbWF5IGJlIHNldCBiZWZvcmUgd3JpdGluZyBvdXQgYSBCRkQgdG8gcmVxdWVzdCB1c2luZyBhCisrICAgdHJhZGl0aW9uYWwgZm9ybWF0LiAgRm9yIGV4YW1wbGUsIHRoaXMgaXMgdXNlZCB0byByZXF1ZXN0IHRoYXQgd2hlbgorKyAgIHdyaXRpbmcgb3V0IGFuIGEub3V0IG9iamVjdCB0aGUgc3ltYm9scyBub3QgYmUgaGFzaGVkIHRvIGVsaW1pbmF0ZQorKyAgIGR1cGxpY2F0ZXMuICAqLworKyNkZWZpbmUgQkZEX1RSQURJVElPTkFMX0ZPUk1BVCAweDQwMAorKworKy8qIFRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCB0aGUgQkZEIGNvbnRlbnRzIGFyZSBhY3R1YWxseSBjYWNoZWQgaW4KKysgICBtZW1vcnkuICBJZiB0aGlzIGlzIHNldCwgaW9zdHJlYW0gcG9pbnRzIHRvIGEgYmZkX2luX21lbW9yeSBzdHJ1Y3QuICAqLworKyNkZWZpbmUgQkZEX0lOX01FTU9SWSAweDgwMAorKworKy8qIFRoZSBzZWN0aW9ucyBpbiB0aGlzIEJGRCBzcGVjaWZ5IGEgbWVtb3J5IHBhZ2UuICAqLworKyNkZWZpbmUgSEFTX0xPQURfUEFHRSAweDEwMDAKKysKKysvKiBUaGlzIEJGRCBoYXMgYmVlbiBjcmVhdGVkIGJ5IHRoZSBsaW5rZXIgYW5kIGRvZXNuJ3QgY29ycmVzcG9uZAorKyAgIHRvIGFueSBpbnB1dCBmaWxlLiAgKi8KKysjZGVmaW5lIEJGRF9MSU5LRVJfQ1JFQVRFRCAweDIwMDAKKysMCisrLyogU3ltYm9scyBhbmQgcmVsb2NhdGlvbi4gICovCisrCisrLyogQSBjb3VudCBvZiBjYXJzeW1zIChjYW5vbmljYWwgYXJjaGl2ZSBzeW1ib2xzKS4gICovCisrdHlwZWRlZiB1bnNpZ25lZCBsb25nIHN5bWluZGV4OworKworKy8qIEhvdyB0byBwZXJmb3JtIGEgcmVsb2NhdGlvbi4gICovCisrdHlwZWRlZiBjb25zdCBzdHJ1Y3QgcmVsb2NfaG93dG9fc3RydWN0IHJlbG9jX2hvd3RvX3R5cGU7CisrCisrI2RlZmluZSBCRkRfTk9fTU9SRV9TWU1CT0xTICgoc3ltaW5kZXgpIH4wKQorKworKy8qIEdlbmVyYWwgcHVycG9zZSBwYXJ0IG9mIGEgc3ltYm9sIFg7CisrICAgdGFyZ2V0IHNwZWNpZmljIHBhcnRzIGFyZSBpbiBsaWJjb2ZmLmgsIGxpYmFvdXQuaCwgZXRjLiAgKi8KKysKKysjZGVmaW5lIGJmZF9nZXRfc2VjdGlvbih4KSAoKHgpLT5zZWN0aW9uKQorKyNkZWZpbmUgYmZkX2dldF9vdXRwdXRfc2VjdGlvbih4KSAoKHgpLT5zZWN0aW9uLT5vdXRwdXRfc2VjdGlvbikKKysjZGVmaW5lIGJmZF9zZXRfc2VjdGlvbih4LHkpICgoeCktPnNlY3Rpb24pID0gKHkpCisrI2RlZmluZSBiZmRfYXN5bWJvbF9iYXNlKHgpICgoeCktPnNlY3Rpb24tPnZtYSkKKysjZGVmaW5lIGJmZF9hc3ltYm9sX3ZhbHVlKHgpIChiZmRfYXN5bWJvbF9iYXNlKHgpICsgKHgpLT52YWx1ZSkKKysjZGVmaW5lIGJmZF9hc3ltYm9sX25hbWUoeCkgKCh4KS0+bmFtZSkKKysvKlBlcmhhcHMgZnV0dXJlOiAjZGVmaW5lIGJmZF9hc3ltYm9sX2JmZCh4KSAoKHgpLT5zZWN0aW9uLT5vd25lcikqLworKyNkZWZpbmUgYmZkX2FzeW1ib2xfYmZkKHgpICgoeCktPnRoZV9iZmQpCisrI2RlZmluZSBiZmRfYXN5bWJvbF9mbGF2b3VyKHgpIChiZmRfYXN5bWJvbF9iZmQoeCktPnh2ZWMtPmZsYXZvdXIpCisrCisrLyogQSBjYW5vbmljYWwgYXJjaGl2ZSBzeW1ib2wuICAqLworKy8qIFRoaXMgaXMgYSB0eXBlIHB1biB3aXRoIHN0cnVjdCByYW5saWIgb24gcHVycG9zZSEgICovCisrdHlwZWRlZiBzdHJ1Y3QgY2Fyc3ltCisreworKyAgY2hhciAqbmFtZTsKKysgIGZpbGVfcHRyIGZpbGVfb2Zmc2V0OwkvKiBMb29rIGhlcmUgdG8gZmluZCB0aGUgZmlsZS4gICovCisrfQorK2NhcnN5bTsJCQkvKiBUbyBtYWtlIHRoZXNlIHlvdSBjYWxsIGEgY2Fyc3ltb2dlbi4gICovCisrCisrLyogVXNlZCBpbiBnZW5lcmF0aW5nIGFybWFwcyAoYXJjaGl2ZSB0YWJsZXMgb2YgY29udGVudHMpLgorKyAgIFBlcmhhcHMganVzdCBhIGZvcndhcmQgZGVmaW5pdGlvbiB3b3VsZCBkbz8gICovCisrc3RydWN0IG9ybCAJCQkvKiBPdXRwdXQgcmFubGliLiAgKi8KKyt7CisrICBjaGFyICoqbmFtZTsJCS8qIFN5bWJvbCBuYW1lLiAgKi8KKysgIHVuaW9uCisrICB7CisrICAgIGZpbGVfcHRyIHBvczsKKysgICAgYmZkICphYmZkOworKyAgfSB1OwkJCS8qIGJmZCogb3IgZmlsZSBwb3NpdGlvbi4gICovCisrICBpbnQgbmFtaWR4OwkJLyogSW5kZXggaW50byBzdHJpbmcgdGFibGUuICAqLworK307CisrDAorKy8qIExpbmVudW1iZXIgc3R1ZmYuICAqLworK3R5cGVkZWYgc3RydWN0IGxpbmVub19jYWNoZV9lbnRyeQorK3sKKysgIHVuc2lnbmVkIGludCBsaW5lX251bWJlcjsJLyogTGluZW51bWJlciBmcm9tIHN0YXJ0IG9mIGZ1bmN0aW9uLiAgKi8KKysgIHVuaW9uCisrICB7CisrICAgIHN0cnVjdCBiZmRfc3ltYm9sICpzeW07CS8qIEZ1bmN0aW9uIG5hbWUuICAqLworKyAgICBiZmRfdm1hIG9mZnNldDsJICAgIAkJLyogT2Zmc2V0IGludG8gc2VjdGlvbi4gICovCisrICB9IHU7CisrfQorK2FsZW50OworKwwKKysvKiBPYmplY3QgYW5kIGNvcmUgZmlsZSBzZWN0aW9ucy4gICovCisrCisrI2RlZmluZQlhbGlnbl9wb3dlcihhZGRyLCBhbGlnbikJXAorKyAgKCgoYWRkcikgKyAoKGJmZF92bWEpIDEgPDwgKGFsaWduKSkgLSAxKSAmICgoYmZkX3ZtYSkgLTEgPDwgKGFsaWduKSkpCisrCisrdHlwZWRlZiBzdHJ1Y3QgYmZkX3NlY3Rpb24gKnNlY19wdHI7CisrCisrI2RlZmluZSBiZmRfZ2V0X3NlY3Rpb25fbmFtZShiZmQsIHB0cikgKChwdHIpLT5uYW1lICsgMCkKKysjZGVmaW5lIGJmZF9nZXRfc2VjdGlvbl92bWEoYmZkLCBwdHIpICgocHRyKS0+dm1hICsgMCkKKysjZGVmaW5lIGJmZF9nZXRfc2VjdGlvbl9sbWEoYmZkLCBwdHIpICgocHRyKS0+bG1hICsgMCkKKysjZGVmaW5lIGJmZF9nZXRfc2VjdGlvbl9hbGlnbm1lbnQoYmZkLCBwdHIpICgocHRyKS0+YWxpZ25tZW50X3Bvd2VyICsgMCkKKysjZGVmaW5lIGJmZF9zZWN0aW9uX25hbWUoYmZkLCBwdHIpICgocHRyKS0+bmFtZSkKKysjZGVmaW5lIGJmZF9zZWN0aW9uX3NpemUoYmZkLCBwdHIpICgocHRyKS0+c2l6ZSkKKysjZGVmaW5lIGJmZF9nZXRfc2VjdGlvbl9zaXplKHB0cikgKChwdHIpLT5zaXplKQorKyNkZWZpbmUgYmZkX3NlY3Rpb25fdm1hKGJmZCwgcHRyKSAoKHB0ciktPnZtYSkKKysjZGVmaW5lIGJmZF9zZWN0aW9uX2xtYShiZmQsIHB0cikgKChwdHIpLT5sbWEpCisrI2RlZmluZSBiZmRfc2VjdGlvbl9hbGlnbm1lbnQoYmZkLCBwdHIpICgocHRyKS0+YWxpZ25tZW50X3Bvd2VyKQorKyNkZWZpbmUgYmZkX2dldF9zZWN0aW9uX2ZsYWdzKGJmZCwgcHRyKSAoKHB0ciktPmZsYWdzICsgMCkKKysjZGVmaW5lIGJmZF9nZXRfc2VjdGlvbl91c2VyZGF0YShiZmQsIHB0cikgKChwdHIpLT51c2VyZGF0YSkKKysKKysjZGVmaW5lIGJmZF9pc19jb21fc2VjdGlvbihwdHIpICgoKHB0ciktPmZsYWdzICYgU0VDX0lTX0NPTU1PTikgIT0gMCkKKysKKysjZGVmaW5lIGJmZF9zZXRfc2VjdGlvbl92bWEoYmZkLCBwdHIsIHZhbCkgKCgocHRyKS0+dm1hID0gKHB0ciktPmxtYSA9ICh2YWwpKSwgKChwdHIpLT51c2VyX3NldF92bWEgPSBUUlVFKSwgVFJVRSkKKysjZGVmaW5lIGJmZF9zZXRfc2VjdGlvbl9hbGlnbm1lbnQoYmZkLCBwdHIsIHZhbCkgKCgocHRyKS0+YWxpZ25tZW50X3Bvd2VyID0gKHZhbCkpLFRSVUUpCisrI2RlZmluZSBiZmRfc2V0X3NlY3Rpb25fdXNlcmRhdGEoYmZkLCBwdHIsIHZhbCkgKCgocHRyKS0+dXNlcmRhdGEgPSAodmFsKSksVFJVRSkKKysvKiBGaW5kIHRoZSBhZGRyZXNzIG9uZSBwYXN0IHRoZSBlbmQgb2YgU0VDLiAgKi8KKysjZGVmaW5lIGJmZF9nZXRfc2VjdGlvbl9saW1pdChiZmQsIHNlYykgXAorKyAgKCgoc2VjKS0+cmF3c2l6ZSA/IChzZWMpLT5yYXdzaXplIDogKHNlYyktPnNpemUpIFwKKysgICAvIGJmZF9vY3RldHNfcGVyX2J5dGUgKGJmZCkpCisrCisrLyogUmV0dXJuIFRSVUUgaWYgc2VjdGlvbiBoYXMgYmVlbiBkaXNjYXJkZWQuICAqLworKyNkZWZpbmUgZWxmX2Rpc2NhcmRlZF9zZWN0aW9uKHNlYykJCQkJXAorKyAgKCFiZmRfaXNfYWJzX3NlY3Rpb24gKHNlYykJCQkJCVwKKysgICAmJiBiZmRfaXNfYWJzX3NlY3Rpb24gKChzZWMpLT5vdXRwdXRfc2VjdGlvbikJCVwKKysgICAmJiAoc2VjKS0+c2VjX2luZm9fdHlwZSAhPSBFTEZfSU5GT19UWVBFX01FUkdFCQlcCisrICAgJiYgKHNlYyktPnNlY19pbmZvX3R5cGUgIT0gRUxGX0lORk9fVFlQRV9KVVNUX1NZTVMpCisrCisrLyogRm9yd2FyZCBkZWZpbmUuICAqLworK3N0cnVjdCBzdGF0OworKwwKKyt0eXBlZGVmIGVudW0gYmZkX3ByaW50X3N5bWJvbAorK3sKKysgIGJmZF9wcmludF9zeW1ib2xfbmFtZSwKKysgIGJmZF9wcmludF9zeW1ib2xfbW9yZSwKKysgIGJmZF9wcmludF9zeW1ib2xfYWxsCisrfSBiZmRfcHJpbnRfc3ltYm9sX3R5cGU7CisrCisrLyogSW5mb3JtYXRpb24gYWJvdXQgYSBzeW1ib2wgdGhhdCBubSBuZWVkcy4gICovCisrCisrdHlwZWRlZiBzdHJ1Y3QgX3N5bWJvbF9pbmZvCisreworKyAgc3ltdmFsdWUgdmFsdWU7CisrICBjaGFyIHR5cGU7CisrICBjb25zdCBjaGFyICpuYW1lOyAgICAgICAgICAgIC8qIFN5bWJvbCBuYW1lLiAgKi8KKysgIHVuc2lnbmVkIGNoYXIgc3RhYl90eXBlOyAgICAgLyogU3RhYiB0eXBlLiAgKi8KKysgIGNoYXIgc3RhYl9vdGhlcjsgICAgICAgICAgICAgLyogU3RhYiBvdGhlci4gICovCisrICBzaG9ydCBzdGFiX2Rlc2M7ICAgICAgICAgICAgIC8qIFN0YWIgZGVzYy4gICovCisrICBjb25zdCBjaGFyICpzdGFiX25hbWU7ICAgICAgIC8qIFN0cmluZyBmb3Igc3RhYiB0eXBlLiAgKi8KKyt9IHN5bWJvbF9pbmZvOworKworKy8qIEdldCB0aGUgbmFtZSBvZiBhIHN0YWJzIHR5cGUgY29kZS4gICovCisrCisrZXh0ZXJuIGNvbnN0IGNoYXIgKmJmZF9nZXRfc3RhYl9uYW1lIChpbnQpOworKwwKKysvKiBIYXNoIHRhYmxlIHJvdXRpbmVzLiAgVGhlcmUgaXMgbm8gd2F5IHRvIGZyZWUgdXAgYSBoYXNoIHRhYmxlLiAgKi8KKysKKysvKiBBbiBlbGVtZW50IGluIHRoZSBoYXNoIHRhYmxlLiAgTW9zdCB1c2VzIHdpbGwgYWN0dWFsbHkgdXNlIGEgbGFyZ2VyCisrICAgc3RydWN0dXJlLCBhbmQgYW4gaW5zdGFuY2Ugb2YgdGhpcyB3aWxsIGJlIHRoZSBmaXJzdCBmaWVsZC4gICovCisrCisrc3RydWN0IGJmZF9oYXNoX2VudHJ5CisreworKyAgLyogTmV4dCBlbnRyeSBmb3IgdGhpcyBoYXNoIGNvZGUuICAqLworKyAgc3RydWN0IGJmZF9oYXNoX2VudHJ5ICpuZXh0OworKyAgLyogU3RyaW5nIGJlaW5nIGhhc2hlZC4gICovCisrICBjb25zdCBjaGFyICpzdHJpbmc7CisrICAvKiBIYXNoIGNvZGUuICBUaGlzIGlzIHRoZSBmdWxsIGhhc2ggY29kZSwgbm90IHRoZSBpbmRleCBpbnRvIHRoZQorKyAgICAgdGFibGUuICAqLworKyAgdW5zaWduZWQgbG9uZyBoYXNoOworK307CisrCisrLyogQSBoYXNoIHRhYmxlLiAgKi8KKysKKytzdHJ1Y3QgYmZkX2hhc2hfdGFibGUKKyt7CisrICAvKiBUaGUgaGFzaCBhcnJheS4gICovCisrICBzdHJ1Y3QgYmZkX2hhc2hfZW50cnkgKip0YWJsZTsKKysgIC8qIEEgZnVuY3Rpb24gdXNlZCB0byBjcmVhdGUgbmV3IGVsZW1lbnRzIGluIHRoZSBoYXNoIHRhYmxlLiAgVGhlCisrICAgICBmaXJzdCBlbnRyeSBpcyBpdHNlbGYgYSBwb2ludGVyIHRvIGFuIGVsZW1lbnQuICBXaGVuIHRoaXMKKysgICAgIGZ1bmN0aW9uIGlzIGZpcnN0IGludm9rZWQsIHRoaXMgcG9pbnRlciB3aWxsIGJlIE5VTEwuICBIb3dldmVyLAorKyAgICAgaGF2aW5nIHRoZSBwb2ludGVyIHBlcm1pdHMgYSBoaWVyYXJjaHkgb2YgbWV0aG9kIGZ1bmN0aW9ucyB0byBiZQorKyAgICAgYnVpbHQgZWFjaCBvZiB3aGljaCBjYWxscyB0aGUgZnVuY3Rpb24gaW4gdGhlIHN1cGVyY2xhc3MuICBUaHVzCisrICAgICBlYWNoIGZ1bmN0aW9uIHNob3VsZCBiZSB3cml0dGVuIHRvIGFsbG9jYXRlIGEgbmV3IGJsb2NrIG9mIG1lbW9yeQorKyAgICAgb25seSBpZiB0aGUgYXJndW1lbnQgaXMgTlVMTC4gICovCisrICBzdHJ1Y3QgYmZkX2hhc2hfZW50cnkgKigqbmV3ZnVuYykKKysgICAgKHN0cnVjdCBiZmRfaGFzaF9lbnRyeSAqLCBzdHJ1Y3QgYmZkX2hhc2hfdGFibGUgKiwgY29uc3QgY2hhciAqKTsKKysgICAvKiBBbiBvYmphbGxvYyBmb3IgdGhpcyBoYXNoIHRhYmxlLiAgVGhpcyBpcyBhIHN0cnVjdCBvYmphbGxvYyAqLAorKyAgICAgYnV0IHdlIHVzZSB2b2lkICogdG8gYXZvaWQgcmVxdWlyaW5nIHRoZSBpbmNsdXNpb24gb2Ygb2JqYWxsb2MuaC4gICovCisrICB2b2lkICptZW1vcnk7CisrICAvKiBUaGUgbnVtYmVyIG9mIHNsb3RzIGluIHRoZSBoYXNoIHRhYmxlLiAgKi8KKysgIHVuc2lnbmVkIGludCBzaXplOworKyAgLyogVGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBoYXNoIHRhYmxlLiAgKi8KKysgIHVuc2lnbmVkIGludCBjb3VudDsKKysgIC8qIFRoZSBzaXplIG9mIGVsZW1lbnRzLiAgKi8KKysgIHVuc2lnbmVkIGludCBlbnRzaXplOworKyAgLyogSWYgbm9uLXplcm8sIGRvbid0IGdyb3cgdGhlIGhhc2ggdGFibGUuICAqLworKyAgdW5zaWduZWQgaW50IGZyb3plbjoxOworK307CisrCisrLyogSW5pdGlhbGl6ZSBhIGhhc2ggdGFibGUuICAqLworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfaGFzaF90YWJsZV9pbml0CisrICAoc3RydWN0IGJmZF9oYXNoX3RhYmxlICosCisrICAgc3RydWN0IGJmZF9oYXNoX2VudHJ5ICooKikgKHN0cnVjdCBiZmRfaGFzaF9lbnRyeSAqLAorKwkJCSAgICAgICBzdHJ1Y3QgYmZkX2hhc2hfdGFibGUgKiwKKysJCQkgICAgICAgY29uc3QgY2hhciAqKSwKKysgICB1bnNpZ25lZCBpbnQpOworKworKy8qIEluaXRpYWxpemUgYSBoYXNoIHRhYmxlIHNwZWNpZnlpbmcgYSBzaXplLiAgKi8KKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2hhc2hfdGFibGVfaW5pdF9uCisrICAoc3RydWN0IGJmZF9oYXNoX3RhYmxlICosCisrICAgc3RydWN0IGJmZF9oYXNoX2VudHJ5ICooKikgKHN0cnVjdCBiZmRfaGFzaF9lbnRyeSAqLAorKwkJCSAgICAgICBzdHJ1Y3QgYmZkX2hhc2hfdGFibGUgKiwKKysJCQkgICAgICAgY29uc3QgY2hhciAqKSwKKysgICB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CisrCisrLyogRnJlZSB1cCBhIGhhc2ggdGFibGUuICAqLworK2V4dGVybiB2b2lkIGJmZF9oYXNoX3RhYmxlX2ZyZWUKKysgIChzdHJ1Y3QgYmZkX2hhc2hfdGFibGUgKik7CisrCisrLyogTG9vayB1cCBhIHN0cmluZyBpbiBhIGhhc2ggdGFibGUuICBJZiBDUkVBVEUgaXMgVFJVRSwgYSBuZXcgZW50cnkKKysgICB3aWxsIGJlIGNyZWF0ZWQgZm9yIHRoaXMgc3RyaW5nIGlmIG9uZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LiAgVGhlCisrICAgQ09QWSBhcmd1bWVudCBtdXN0IGJlIFRSVUUgaWYgdGhpcyByb3V0aW5lIHNob3VsZCBjb3B5IHRoZSBzdHJpbmcKKysgICBpbnRvIG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgd2hlbiBhZGRpbmcgYW4gZW50cnkuICAqLworK2V4dGVybiBzdHJ1Y3QgYmZkX2hhc2hfZW50cnkgKmJmZF9oYXNoX2xvb2t1cAorKyAgKHN0cnVjdCBiZmRfaGFzaF90YWJsZSAqLCBjb25zdCBjaGFyICosIGJmZF9ib29sZWFuIGNyZWF0ZSwKKysgICBiZmRfYm9vbGVhbiBjb3B5KTsKKysKKysvKiBSZXBsYWNlIGFuIGVudHJ5IGluIGEgaGFzaCB0YWJsZS4gICovCisrZXh0ZXJuIHZvaWQgYmZkX2hhc2hfcmVwbGFjZQorKyAgKHN0cnVjdCBiZmRfaGFzaF90YWJsZSAqLCBzdHJ1Y3QgYmZkX2hhc2hfZW50cnkgKm9sZCwKKysgICBzdHJ1Y3QgYmZkX2hhc2hfZW50cnkgKm53KTsKKysKKysvKiBCYXNlIG1ldGhvZCBmb3IgY3JlYXRpbmcgYSBoYXNoIHRhYmxlIGVudHJ5LiAgKi8KKytleHRlcm4gc3RydWN0IGJmZF9oYXNoX2VudHJ5ICpiZmRfaGFzaF9uZXdmdW5jCisrICAoc3RydWN0IGJmZF9oYXNoX2VudHJ5ICosIHN0cnVjdCBiZmRfaGFzaF90YWJsZSAqLCBjb25zdCBjaGFyICopOworKworKy8qIEdyYWIgc29tZSBzcGFjZSBmb3IgYSBoYXNoIHRhYmxlIGVudHJ5LiAgKi8KKytleHRlcm4gdm9pZCAqYmZkX2hhc2hfYWxsb2NhdGUKKysgIChzdHJ1Y3QgYmZkX2hhc2hfdGFibGUgKiwgdW5zaWduZWQgaW50KTsKKysKKysvKiBUcmF2ZXJzZSBhIGhhc2ggdGFibGUgaW4gYSByYW5kb20gb3JkZXIsIGNhbGxpbmcgYSBmdW5jdGlvbiBvbiBlYWNoCisrICAgZWxlbWVudC4gIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIEZBTFNFLCB0aGUgdHJhdmVyc2FsIHN0b3BzLiAgVGhlCisrICAgSU5GTyBhcmd1bWVudCBpcyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLiAgKi8KKytleHRlcm4gdm9pZCBiZmRfaGFzaF90cmF2ZXJzZQorKyAgKHN0cnVjdCBiZmRfaGFzaF90YWJsZSAqLAorKyAgIGJmZF9ib29sZWFuICgqKSAoc3RydWN0IGJmZF9oYXNoX2VudHJ5ICosIHZvaWQgKiksCisrICAgdm9pZCAqaW5mbyk7CisrCisrLyogQWxsb3dzIHRoZSBkZWZhdWx0IHNpemUgb2YgYSBoYXNoIHRhYmxlIHRvIGJlIGNvbmZpZ3VyZWQuIE5ldyBoYXNoCisrICAgdGFibGVzIGFsbG9jYXRlZCB1c2luZyBiZmRfaGFzaF90YWJsZV9pbml0IHdpbGwgYmUgY3JlYXRlZCB3aXRoCisrICAgdGhpcyBzaXplLiAgKi8KKytleHRlcm4gdm9pZCBiZmRfaGFzaF9zZXRfZGVmYXVsdF9zaXplIChiZmRfc2l6ZV90eXBlKTsKKysKKysvKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygc3RhYnMgaW4gc2VjdGlvbnMKKysgICBpbmZvcm1hdGlvbiB3aGlsZSBsaW5raW5nLiAgKi8KKysKKytzdHJ1Y3Qgc3RhYl9pbmZvCisreworKyAgLyogQSBoYXNoIHRhYmxlIHVzZWQgdG8gaG9sZCBzdGFicyBzdHJpbmdzLiAgKi8KKysgIHN0cnVjdCBiZmRfc3RydGFiX2hhc2ggKnN0cmluZ3M7CisrICAvKiBUaGUgaGVhZGVyIGZpbGUgaGFzaCB0YWJsZS4gICovCisrICBzdHJ1Y3QgYmZkX2hhc2hfdGFibGUgaW5jbHVkZXM7CisrICAvKiBUaGUgZmlyc3QgLnN0YWJzdHIgc2VjdGlvbi4gICovCisrICBzdHJ1Y3QgYmZkX3NlY3Rpb24gKnN0YWJzdHI7CisrfTsKKysKKysjZGVmaW5lIENPRkZfU1dBUF9UQUJMRSAodm9pZCAqKSAmYmZkX2NvZmZfc3RkX3N3YXBfdGFibGUKKysKKysvKiBVc2VyIHByb2dyYW0gYWNjZXNzIHRvIEJGRCBmYWNpbGl0aWVzLiAgKi8KKysKKysvKiBEaXJlY3QgSS9PIHJvdXRpbmVzLCBmb3IgcHJvZ3JhbXMgd2hpY2gga25vdyBtb3JlIGFib3V0IHRoZSBvYmplY3QKKysgICBmaWxlIHRoYW4gQkZEIGRvZXMuICBVc2UgaGlnaGVyIGxldmVsIHJvdXRpbmVzIGlmIHBvc3NpYmxlLiAgKi8KKysKKytleHRlcm4gYmZkX3NpemVfdHlwZSBiZmRfYnJlYWQgKHZvaWQgKiwgYmZkX3NpemVfdHlwZSwgYmZkICopOworK2V4dGVybiBiZmRfc2l6ZV90eXBlIGJmZF9id3JpdGUgKGNvbnN0IHZvaWQgKiwgYmZkX3NpemVfdHlwZSwgYmZkICopOworK2V4dGVybiBpbnQgYmZkX3NlZWsgKGJmZCAqLCBmaWxlX3B0ciwgaW50KTsKKytleHRlcm4gZmlsZV9wdHIgYmZkX3RlbGwgKGJmZCAqKTsKKytleHRlcm4gaW50IGJmZF9mbHVzaCAoYmZkICopOworK2V4dGVybiBpbnQgYmZkX3N0YXQgKGJmZCAqLCBzdHJ1Y3Qgc3RhdCAqKTsKKysKKysvKiBEZXByZWNhdGVkIG9sZCByb3V0aW5lcy4gICovCisrI2lmIF9fR05VQ19fCisrI2RlZmluZSBiZmRfcmVhZChCVUYsIEVMVFNJWkUsIE5JVEVNUywgQUJGRCkJCQkJXAorKyAgKHdhcm5fZGVwcmVjYXRlZCAoImJmZF9yZWFkIiwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pLAlcCisrICAgYmZkX2JyZWFkICgoQlVGKSwgKEVMVFNJWkUpICogKE5JVEVNUyksIChBQkZEKSkpCisrI2RlZmluZSBiZmRfd3JpdGUoQlVGLCBFTFRTSVpFLCBOSVRFTVMsIEFCRkQpCQkJCVwKKysgICh3YXJuX2RlcHJlY2F0ZWQgKCJiZmRfd3JpdGUiLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyksCVwKKysgICBiZmRfYndyaXRlICgoQlVGKSwgKEVMVFNJWkUpICogKE5JVEVNUyksIChBQkZEKSkpCisrI2Vsc2UKKysjZGVmaW5lIGJmZF9yZWFkKEJVRiwgRUxUU0laRSwgTklURU1TLCBBQkZEKQkJCQlcCisrICAod2Fybl9kZXByZWNhdGVkICgiYmZkX3JlYWQiLCAoY29uc3QgY2hhciAqKSAwLCAwLCAoY29uc3QgY2hhciAqKSAwKSwgXAorKyAgIGJmZF9icmVhZCAoKEJVRiksIChFTFRTSVpFKSAqIChOSVRFTVMpLCAoQUJGRCkpKQorKyNkZWZpbmUgYmZkX3dyaXRlKEJVRiwgRUxUU0laRSwgTklURU1TLCBBQkZEKQkJCQlcCisrICAod2Fybl9kZXByZWNhdGVkICgiYmZkX3dyaXRlIiwgKGNvbnN0IGNoYXIgKikgMCwgMCwgKGNvbnN0IGNoYXIgKikgMCksXAorKyAgIGJmZF9id3JpdGUgKChCVUYpLCAoRUxUU0laRSkgKiAoTklURU1TKSwgKEFCRkQpKSkKKysjZW5kaWYKKytleHRlcm4gdm9pZCB3YXJuX2RlcHJlY2F0ZWQgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKik7CisrCisrLyogQ2FzdCBmcm9tIGNvbnN0IGNoYXIgKiB0byBjaGFyICogc28gdGhhdCBjYWxsZXIgY2FuIGFzc2lnbiB0bworKyAgIGEgY2hhciAqIHdpdGhvdXQgYSB3YXJuaW5nLiAgKi8KKysjZGVmaW5lIGJmZF9nZXRfZmlsZW5hbWUoYWJmZCkgKChjaGFyICopIChhYmZkKS0+ZmlsZW5hbWUpCisrI2RlZmluZSBiZmRfZ2V0X2NhY2hlYWJsZShhYmZkKSAoKGFiZmQpLT5jYWNoZWFibGUpCisrI2RlZmluZSBiZmRfZ2V0X2Zvcm1hdChhYmZkKSAoKGFiZmQpLT5mb3JtYXQpCisrI2RlZmluZSBiZmRfZ2V0X3RhcmdldChhYmZkKSAoKGFiZmQpLT54dmVjLT5uYW1lKQorKyNkZWZpbmUgYmZkX2dldF9mbGF2b3VyKGFiZmQpICgoYWJmZCktPnh2ZWMtPmZsYXZvdXIpCisrI2RlZmluZSBiZmRfZmFtaWx5X2NvZmYoYWJmZCkgXAorKyAgKGJmZF9nZXRfZmxhdm91ciAoYWJmZCkgPT0gYmZkX3RhcmdldF9jb2ZmX2ZsYXZvdXIgfHwgXAorKyAgIGJmZF9nZXRfZmxhdm91ciAoYWJmZCkgPT0gYmZkX3RhcmdldF94Y29mZl9mbGF2b3VyKQorKyNkZWZpbmUgYmZkX2JpZ19lbmRpYW4oYWJmZCkgKChhYmZkKS0+eHZlYy0+Ynl0ZW9yZGVyID09IEJGRF9FTkRJQU5fQklHKQorKyNkZWZpbmUgYmZkX2xpdHRsZV9lbmRpYW4oYWJmZCkgKChhYmZkKS0+eHZlYy0+Ynl0ZW9yZGVyID09IEJGRF9FTkRJQU5fTElUVExFKQorKyNkZWZpbmUgYmZkX2hlYWRlcl9iaWdfZW5kaWFuKGFiZmQpIFwKKysgICgoYWJmZCktPnh2ZWMtPmhlYWRlcl9ieXRlb3JkZXIgPT0gQkZEX0VORElBTl9CSUcpCisrI2RlZmluZSBiZmRfaGVhZGVyX2xpdHRsZV9lbmRpYW4oYWJmZCkgXAorKyAgKChhYmZkKS0+eHZlYy0+aGVhZGVyX2J5dGVvcmRlciA9PSBCRkRfRU5ESUFOX0xJVFRMRSkKKysjZGVmaW5lIGJmZF9nZXRfZmlsZV9mbGFncyhhYmZkKSAoKGFiZmQpLT5mbGFncykKKysjZGVmaW5lIGJmZF9hcHBsaWNhYmxlX2ZpbGVfZmxhZ3MoYWJmZCkgKChhYmZkKS0+eHZlYy0+b2JqZWN0X2ZsYWdzKQorKyNkZWZpbmUgYmZkX2FwcGxpY2FibGVfc2VjdGlvbl9mbGFncyhhYmZkKSAoKGFiZmQpLT54dmVjLT5zZWN0aW9uX2ZsYWdzKQorKyNkZWZpbmUgYmZkX215X2FyY2hpdmUoYWJmZCkgKChhYmZkKS0+bXlfYXJjaGl2ZSkKKysjZGVmaW5lIGJmZF9oYXNfbWFwKGFiZmQpICgoYWJmZCktPmhhc19hcm1hcCkKKysKKysjZGVmaW5lIGJmZF92YWxpZF9yZWxvY190eXBlcyhhYmZkKSAoKGFiZmQpLT54dmVjLT52YWxpZF9yZWxvY190eXBlcykKKysjZGVmaW5lIGJmZF91c3JkYXRhKGFiZmQpICgoYWJmZCktPnVzcmRhdGEpCisrCisrI2RlZmluZSBiZmRfZ2V0X3N0YXJ0X2FkZHJlc3MoYWJmZCkgKChhYmZkKS0+c3RhcnRfYWRkcmVzcykKKysjZGVmaW5lIGJmZF9nZXRfc3ltY291bnQoYWJmZCkgKChhYmZkKS0+c3ltY291bnQpCisrI2RlZmluZSBiZmRfZ2V0X291dHN5bWJvbHMoYWJmZCkgKChhYmZkKS0+b3V0c3ltYm9scykKKysjZGVmaW5lIGJmZF9jb3VudF9zZWN0aW9ucyhhYmZkKSAoKGFiZmQpLT5zZWN0aW9uX2NvdW50KQorKworKyNkZWZpbmUgYmZkX2dldF9keW5hbWljX3N5bWNvdW50KGFiZmQpICgoYWJmZCktPmR5bnN5bWNvdW50KQorKworKyNkZWZpbmUgYmZkX2dldF9zeW1ib2xfbGVhZGluZ19jaGFyKGFiZmQpICgoYWJmZCktPnh2ZWMtPnN5bWJvbF9sZWFkaW5nX2NoYXIpCisrCisrI2RlZmluZSBiZmRfc2V0X2NhY2hlYWJsZShhYmZkLGJvb2wpICgoKGFiZmQpLT5jYWNoZWFibGUgPSBib29sKSwgVFJVRSkKKysKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2NhY2hlX2Nsb3NlCisrICAoYmZkICphYmZkKTsKKysvKiBOQjogVGhpcyBkZWNsYXJhdGlvbiBzaG91bGQgbWF0Y2ggdGhlIGF1dG9nZW5lcmF0ZWQgb25lIGluIGxpYmJmZC5oLiAgKi8KKysKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2NhY2hlX2Nsb3NlX2FsbCAodm9pZCk7CisrCisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF9yZWNvcmRfcGhkcgorKyAgKGJmZCAqLCB1bnNpZ25lZCBsb25nLCBiZmRfYm9vbGVhbiwgZmxhZ3dvcmQsIGJmZF9ib29sZWFuLCBiZmRfdm1hLAorKyAgIGJmZF9ib29sZWFuLCBiZmRfYm9vbGVhbiwgdW5zaWduZWQgaW50LCBzdHJ1Y3QgYmZkX3NlY3Rpb24gKiopOworKworKy8qIEJ5dGUgc3dhcHBpbmcgcm91dGluZXMuICAqLworKworK2JmZF91aW50NjRfdCBiZmRfZ2V0YjY0IChjb25zdCB2b2lkICopOworK2JmZF91aW50NjRfdCBiZmRfZ2V0bDY0IChjb25zdCB2b2lkICopOworK2JmZF9pbnQ2NF90IGJmZF9nZXRiX3NpZ25lZF82NCAoY29uc3Qgdm9pZCAqKTsKKytiZmRfaW50NjRfdCBiZmRfZ2V0bF9zaWduZWRfNjQgKGNvbnN0IHZvaWQgKik7CisrYmZkX3ZtYSBiZmRfZ2V0YjMyIChjb25zdCB2b2lkICopOworK2JmZF92bWEgYmZkX2dldGwzMiAoY29uc3Qgdm9pZCAqKTsKKytiZmRfc2lnbmVkX3ZtYSBiZmRfZ2V0Yl9zaWduZWRfMzIgKGNvbnN0IHZvaWQgKik7CisrYmZkX3NpZ25lZF92bWEgYmZkX2dldGxfc2lnbmVkXzMyIChjb25zdCB2b2lkICopOworK2JmZF92bWEgYmZkX2dldGIxNiAoY29uc3Qgdm9pZCAqKTsKKytiZmRfdm1hIGJmZF9nZXRsMTYgKGNvbnN0IHZvaWQgKik7CisrYmZkX3NpZ25lZF92bWEgYmZkX2dldGJfc2lnbmVkXzE2IChjb25zdCB2b2lkICopOworK2JmZF9zaWduZWRfdm1hIGJmZF9nZXRsX3NpZ25lZF8xNiAoY29uc3Qgdm9pZCAqKTsKKyt2b2lkIGJmZF9wdXRiNjQgKGJmZF91aW50NjRfdCwgdm9pZCAqKTsKKyt2b2lkIGJmZF9wdXRsNjQgKGJmZF91aW50NjRfdCwgdm9pZCAqKTsKKyt2b2lkIGJmZF9wdXRiMzIgKGJmZF92bWEsIHZvaWQgKik7Cisrdm9pZCBiZmRfcHV0bDMyIChiZmRfdm1hLCB2b2lkICopOworK3ZvaWQgYmZkX3B1dGIxNiAoYmZkX3ZtYSwgdm9pZCAqKTsKKyt2b2lkIGJmZF9wdXRsMTYgKGJmZF92bWEsIHZvaWQgKik7CisrCisrLyogQnl0ZSBzd2FwcGluZyByb3V0aW5lcyB3aGljaCB0YWtlIHNpemUgYW5kIGVuZGlhbm5lcyBhcyBhcmd1bWVudHMuICAqLworKworK2JmZF91aW50NjRfdCBiZmRfZ2V0X2JpdHMgKGNvbnN0IHZvaWQgKiwgaW50LCBiZmRfYm9vbGVhbik7Cisrdm9pZCBiZmRfcHV0X2JpdHMgKGJmZF91aW50NjRfdCwgdm9pZCAqLCBpbnQsIGJmZF9ib29sZWFuKTsKKysKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX3NlY3Rpb25fYWxyZWFkeV9saW5rZWRfdGFibGVfaW5pdCAodm9pZCk7CisrZXh0ZXJuIHZvaWQgYmZkX3NlY3Rpb25fYWxyZWFkeV9saW5rZWRfdGFibGVfZnJlZSAodm9pZCk7CisrDAorKy8qIEV4dGVybmFsbHkgdmlzaWJsZSBFQ09GRiByb3V0aW5lcy4gICovCisrCisrI2lmIGRlZmluZWQoX19TVERDX18pIHx8IGRlZmluZWQoQUxNT1NUX1NUREMpCisrc3RydWN0IGVjb2ZmX2RlYnVnX2luZm87Cisrc3RydWN0IGVjb2ZmX2RlYnVnX3N3YXA7Cisrc3RydWN0IGVjb2ZmX2V4dHI7Cisrc3RydWN0IGJmZF9zeW1ib2w7Cisrc3RydWN0IGJmZF9saW5rX2luZm87Cisrc3RydWN0IGJmZF9saW5rX2hhc2hfZW50cnk7Cisrc3RydWN0IGJmZF9lbGZfdmVyc2lvbl90cmVlOworKyNlbmRpZgorK2V4dGVybiBiZmRfdm1hIGJmZF9lY29mZl9nZXRfZ3BfdmFsdWUKKysgIChiZmQgKiBhYmZkKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2Vjb2ZmX3NldF9ncF92YWx1ZQorKyAgKGJmZCAqYWJmZCwgYmZkX3ZtYSBncF92YWx1ZSk7CisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF9lY29mZl9zZXRfcmVnbWFza3MKKysgIChiZmQgKmFiZmQsIHVuc2lnbmVkIGxvbmcgZ3BybWFzaywgdW5zaWduZWQgbG9uZyBmcHJtYXNrLAorKyAgIHVuc2lnbmVkIGxvbmcgKmNwcm1hc2spOworK2V4dGVybiB2b2lkICpiZmRfZWNvZmZfZGVidWdfaW5pdAorKyAgKGJmZCAqb3V0cHV0X2JmZCwgc3RydWN0IGVjb2ZmX2RlYnVnX2luZm8gKm91dHB1dF9kZWJ1ZywKKysgICBjb25zdCBzdHJ1Y3QgZWNvZmZfZGVidWdfc3dhcCAqb3V0cHV0X3N3YXAsIHN0cnVjdCBiZmRfbGlua19pbmZvICopOworK2V4dGVybiB2b2lkIGJmZF9lY29mZl9kZWJ1Z19mcmVlCisrICAodm9pZCAqaGFuZGxlLCBiZmQgKm91dHB1dF9iZmQsIHN0cnVjdCBlY29mZl9kZWJ1Z19pbmZvICpvdXRwdXRfZGVidWcsCisrICAgY29uc3Qgc3RydWN0IGVjb2ZmX2RlYnVnX3N3YXAgKm91dHB1dF9zd2FwLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2Vjb2ZmX2RlYnVnX2FjY3VtdWxhdGUKKysgICh2b2lkICpoYW5kbGUsIGJmZCAqb3V0cHV0X2JmZCwgc3RydWN0IGVjb2ZmX2RlYnVnX2luZm8gKm91dHB1dF9kZWJ1ZywKKysgICBjb25zdCBzdHJ1Y3QgZWNvZmZfZGVidWdfc3dhcCAqb3V0cHV0X3N3YXAsIGJmZCAqaW5wdXRfYmZkLAorKyAgIHN0cnVjdCBlY29mZl9kZWJ1Z19pbmZvICppbnB1dF9kZWJ1ZywKKysgICBjb25zdCBzdHJ1Y3QgZWNvZmZfZGVidWdfc3dhcCAqaW5wdXRfc3dhcCwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF9lY29mZl9kZWJ1Z19hY2N1bXVsYXRlX290aGVyCisrICAodm9pZCAqaGFuZGxlLCBiZmQgKm91dHB1dF9iZmQsIHN0cnVjdCBlY29mZl9kZWJ1Z19pbmZvICpvdXRwdXRfZGVidWcsCisrICAgY29uc3Qgc3RydWN0IGVjb2ZmX2RlYnVnX3N3YXAgKm91dHB1dF9zd2FwLCBiZmQgKmlucHV0X2JmZCwKKysgICBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2Vjb2ZmX2RlYnVnX2V4dGVybmFscworKyAgKGJmZCAqYWJmZCwgc3RydWN0IGVjb2ZmX2RlYnVnX2luZm8gKmRlYnVnLAorKyAgIGNvbnN0IHN0cnVjdCBlY29mZl9kZWJ1Z19zd2FwICpzd2FwLCBiZmRfYm9vbGVhbiByZWxvY2F0YWJsZSwKKysgICBiZmRfYm9vbGVhbiAoKmdldF9leHRyKSAoc3RydWN0IGJmZF9zeW1ib2wgKiwgc3RydWN0IGVjb2ZmX2V4dHIgKiksCisrICAgdm9pZCAoKnNldF9pbmRleCkgKHN0cnVjdCBiZmRfc3ltYm9sICosIGJmZF9zaXplX3R5cGUpKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2Vjb2ZmX2RlYnVnX29uZV9leHRlcm5hbAorKyAgKGJmZCAqYWJmZCwgc3RydWN0IGVjb2ZmX2RlYnVnX2luZm8gKmRlYnVnLAorKyAgIGNvbnN0IHN0cnVjdCBlY29mZl9kZWJ1Z19zd2FwICpzd2FwLCBjb25zdCBjaGFyICpuYW1lLAorKyAgIHN0cnVjdCBlY29mZl9leHRyICplc3ltKTsKKytleHRlcm4gYmZkX3NpemVfdHlwZSBiZmRfZWNvZmZfZGVidWdfc2l6ZQorKyAgKGJmZCAqYWJmZCwgc3RydWN0IGVjb2ZmX2RlYnVnX2luZm8gKmRlYnVnLAorKyAgIGNvbnN0IHN0cnVjdCBlY29mZl9kZWJ1Z19zd2FwICpzd2FwKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2Vjb2ZmX3dyaXRlX2RlYnVnCisrICAoYmZkICphYmZkLCBzdHJ1Y3QgZWNvZmZfZGVidWdfaW5mbyAqZGVidWcsCisrICAgY29uc3Qgc3RydWN0IGVjb2ZmX2RlYnVnX3N3YXAgKnN3YXAsIGZpbGVfcHRyIHdoZXJlKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2Vjb2ZmX3dyaXRlX2FjY3VtdWxhdGVkX2RlYnVnCisrICAodm9pZCAqaGFuZGxlLCBiZmQgKmFiZmQsIHN0cnVjdCBlY29mZl9kZWJ1Z19pbmZvICpkZWJ1ZywKKysgICBjb25zdCBzdHJ1Y3QgZWNvZmZfZGVidWdfc3dhcCAqc3dhcCwKKysgICBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqaW5mbywgZmlsZV9wdHIgd2hlcmUpOworKworKy8qIEV4dGVybmFsbHkgdmlzaWJsZSBFTEYgcm91dGluZXMuICAqLworKworK3N0cnVjdCBiZmRfbGlua19uZWVkZWRfbGlzdAorK3sKKysgIHN0cnVjdCBiZmRfbGlua19uZWVkZWRfbGlzdCAqbmV4dDsKKysgIGJmZCAqYnk7CisrICBjb25zdCBjaGFyICpuYW1lOworK307CisrCisrZW51bSBkeW5hbWljX2xpYl9saW5rX2NsYXNzIHsKKysgIERZTl9OT1JNQUwgPSAwLAorKyAgRFlOX0FTX05FRURFRCA9IDEsCisrICBEWU5fRFRfTkVFREVEID0gMiwKKysgIERZTl9OT19BRERfTkVFREVEID0gNCwKKysgIERZTl9OT19ORUVERUQgPSA4CisrfTsKKysKKytlbnVtIG5vdGljZV9hc25lZWRlZF9hY3Rpb24geworKyAgbm90aWNlX2FzX25lZWRlZCwKKysgIG5vdGljZV9ub3RfbmVlZGVkLAorKyAgbm90aWNlX25lZWRlZAorK307CisrCisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF9lbGZfcmVjb3JkX2xpbmtfYXNzaWdubWVudAorKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBjb25zdCBjaGFyICosIGJmZF9ib29sZWFuLAorKyAgIGJmZF9ib29sZWFuKTsKKytleHRlcm4gc3RydWN0IGJmZF9saW5rX25lZWRlZF9saXN0ICpiZmRfZWxmX2dldF9uZWVkZWRfbGlzdAorKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2VsZl9nZXRfYmZkX25lZWRlZF9saXN0CisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19uZWVkZWRfbGlzdCAqKik7CisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF9lbGZfc2l6ZV9keW5hbWljX3NlY3Rpb25zCisrICAoYmZkICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiBjb25zdCAqLAorKyAgIHN0cnVjdCBiZmRfbGlua19pbmZvICosIHN0cnVjdCBiZmRfc2VjdGlvbiAqKiwKKysgICBzdHJ1Y3QgYmZkX2VsZl92ZXJzaW9uX3RyZWUgKik7CisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF9lbGZfc2l6ZV9keW5zeW1faGFzaF9keW5zdHIKKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrZXh0ZXJuIHZvaWQgYmZkX2VsZl9zZXRfZHRfbmVlZGVkX25hbWUKKysgIChiZmQgKiwgY29uc3QgY2hhciAqKTsKKytleHRlcm4gY29uc3QgY2hhciAqYmZkX2VsZl9nZXRfZHRfc29uYW1lCisrICAoYmZkICopOworK2V4dGVybiB2b2lkIGJmZF9lbGZfc2V0X2R5bl9saWJfY2xhc3MKKysgIChiZmQgKiwgZW51bSBkeW5hbWljX2xpYl9saW5rX2NsYXNzKTsKKytleHRlcm4gaW50IGJmZF9lbGZfZ2V0X2R5bl9saWJfY2xhc3MKKysgIChiZmQgKik7CisrZXh0ZXJuIHN0cnVjdCBiZmRfbGlua19uZWVkZWRfbGlzdCAqYmZkX2VsZl9nZXRfcnVucGF0aF9saXN0CisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfZWxmX2Rpc2NhcmRfaW5mbworKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKytleHRlcm4gdW5zaWduZWQgaW50IF9iZmRfZWxmX2RlZmF1bHRfYWN0aW9uX2Rpc2NhcmRlZAorKyAgKHN0cnVjdCBiZmRfc2VjdGlvbiAqKTsKKysKKysvKiBSZXR1cm4gYW4gdXBwZXIgYm91bmQgb24gdGhlIG51bWJlciBvZiBieXRlcyByZXF1aXJlZCB0byBzdG9yZSBhCisrICAgY29weSBvZiBBQkZEJ3MgcHJvZ3JhbSBoZWFkZXIgdGFibGUgZW50cmllcy4gIFJldHVybiAtMSBpZiBhbiBlcnJvcgorKyAgIG9jY3VyczsgYmZkX2dldF9lcnJvciB3aWxsIHJldHVybiBhbiBhcHByb3ByaWF0ZSBjb2RlLiAgKi8KKytleHRlcm4gbG9uZyBiZmRfZ2V0X2VsZl9waGRyX3VwcGVyX2JvdW5kCisrICAoYmZkICphYmZkKTsKKysKKysvKiBDb3B5IEFCRkQncyBwcm9ncmFtIGhlYWRlciB0YWJsZSBlbnRyaWVzIHRvICpQSERSUy4gIFRoZSBlbnRyaWVzCisrICAgd2lsbCBiZSBzdG9yZWQgYXMgYW4gYXJyYXkgb2YgRWxmX0ludGVybmFsX1BoZHIgc3RydWN0dXJlcywgYXMKKysgICBkZWZpbmVkIGluIGluY2x1ZGUvZWxmL2ludGVybmFsLmguICBUbyBmaW5kIG91dCBob3cgbGFyZ2UgdGhlCisrICAgYnVmZmVyIG5lZWRzIHRvIGJlLCBjYWxsIGJmZF9nZXRfZWxmX3BoZHJfdXBwZXJfYm91bmQuCisrCisrICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgcHJvZ3JhbSBoZWFkZXIgdGFibGUgZW50cmllcyByZWFkLCBvciAtMSBpZiBhbgorKyAgIGVycm9yIG9jY3VyczsgYmZkX2dldF9lcnJvciB3aWxsIHJldHVybiBhbiBhcHByb3ByaWF0ZSBjb2RlLiAgKi8KKytleHRlcm4gaW50IGJmZF9nZXRfZWxmX3BoZHJzCisrICAoYmZkICphYmZkLCB2b2lkICpwaGRycyk7CisrCisrLyogQ3JlYXRlIGEgbmV3IEJGRCBhcyBpZiBieSBiZmRfb3BlbnIuICBSYXRoZXIgdGhhbiBvcGVuaW5nIGEgZmlsZSwKKysgICByZWNvbnN0cnVjdCBhbiBFTEYgZmlsZSBieSByZWFkaW5nIHRoZSBzZWdtZW50cyBvdXQgb2YgcmVtb3RlIG1lbW9yeQorKyAgIGJhc2VkIG9uIHRoZSBFTEYgZmlsZSBoZWFkZXIgYXQgRUhEUl9WTUEgYW5kIHRoZSBFTEYgcHJvZ3JhbSBoZWFkZXJzIGl0CisrICAgcG9pbnRzIHRvLiAgSWYgbm90IG51bGwsICpMT0FEQkFTRVAgaXMgZmlsbGVkIGluIHdpdGggdGhlIGRpZmZlcmVuY2UKKysgICBiZXR3ZWVuIHRoZSBWTUFzIGZyb20gd2hpY2ggdGhlIHNlZ21lbnRzIHdlcmUgcmVhZCwgYW5kIHRoZSBWTUFzIHRoZQorKyAgIGZpbGUgaGVhZGVycyAoYW5kIGhlbmNlIEJGRCdzIGlkZWEgb2YgZWFjaCBzZWN0aW9uJ3MgVk1BKSBwdXQgdGhlbSBhdC4KKysKKysgICBUaGUgZnVuY3Rpb24gVEFSR0VUX1JFQURfTUVNT1JZIGlzIGNhbGxlZCB0byBjb3B5IExFTiBieXRlcyBmcm9tIHRoZQorKyAgIHJlbW90ZSBtZW1vcnkgYXQgdGFyZ2V0IGFkZHJlc3MgVk1BIGludG8gdGhlIGxvY2FsIGJ1ZmZlciBhdCBNWUFERFI7IGl0CisrICAgc2hvdWxkIHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYW4gYGVycm5vJyBjb2RlIG9uIGZhaWx1cmUuICBURU1QTCBtdXN0CisrICAgYmUgYSBCRkQgZm9yIGFuIEVMRiB0YXJnZXQgd2l0aCB0aGUgd29yZCBzaXplIGFuZCBieXRlIG9yZGVyIGZvdW5kIGluCisrICAgdGhlIHJlbW90ZSBtZW1vcnkuICAqLworK2V4dGVybiBiZmQgKmJmZF9lbGZfYmZkX2Zyb21fcmVtb3RlX21lbW9yeQorKyAgKGJmZCAqdGVtcGwsIGJmZF92bWEgZWhkcl92bWEsIGJmZF92bWEgKmxvYWRiYXNlcCwKKysgICBpbnQgKCp0YXJnZXRfcmVhZF9tZW1vcnkpIChiZmRfdm1hIHZtYSwgYmZkX2J5dGUgKm15YWRkciwgaW50IGxlbikpOworKworKy8qIFJldHVybiB0aGUgYXJjaF9zaXplIGZpZWxkIG9mIGFuIGVsZiBiZmQsIG9yIC0xIGlmIG5vdCBlbGYuICAqLworK2V4dGVybiBpbnQgYmZkX2dldF9hcmNoX3NpemUKKysgIChiZmQgKik7CisrCisrLyogUmV0dXJuIFRSVUUgaWYgYWRkcmVzcyAibmF0dXJhbGx5IiBzaWduIGV4dGVuZHMsIG9yIC0xIGlmIG5vdCBlbGYuICAqLworK2V4dGVybiBpbnQgYmZkX2dldF9zaWduX2V4dGVuZF92bWEKKysgIChiZmQgKik7CisrCisrZXh0ZXJuIHN0cnVjdCBiZmRfc2VjdGlvbiAqX2JmZF9lbGZfdGxzX3NldHVwCisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOworKworK2V4dGVybiB2b2lkIF9iZmRfZml4X2V4Y2x1ZGVkX3NlY19zeW1zCisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOworKworK2V4dGVybiB1bnNpZ25lZCBiZmRfbTY4a19tYWNoX3RvX2ZlYXR1cmVzIChpbnQpOworKworK2V4dGVybiBpbnQgYmZkX202OGtfZmVhdHVyZXNfdG9fbWFjaCAodW5zaWduZWQpOworKworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfbTY4a19lbGYzMl9jcmVhdGVfZW1iZWRkZWRfcmVsb2NzCisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIHN0cnVjdCBiZmRfc2VjdGlvbiAqLCBzdHJ1Y3QgYmZkX3NlY3Rpb24gKiwKKysgICBjaGFyICoqKTsKKysKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2JmaW5fZWxmMzJfY3JlYXRlX2VtYmVkZGVkX3JlbG9jcworKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBzdHJ1Y3QgYmZkX3NlY3Rpb24gKiwgc3RydWN0IGJmZF9zZWN0aW9uICosCisrICAgY2hhciAqKik7CisrCisrLyogU3VuT1Mgc2hhcmVkIGxpYnJhcnkgc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlIGxpbmtlci4gICovCisrCisrZXh0ZXJuIHN0cnVjdCBiZmRfbGlua19uZWVkZWRfbGlzdCAqYmZkX3N1bm9zX2dldF9uZWVkZWRfbGlzdAorKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX3N1bm9zX3JlY29yZF9saW5rX2Fzc2lnbm1lbnQKKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKiwgY29uc3QgY2hhciAqKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX3N1bm9zX3NpemVfZHluYW1pY19zZWN0aW9ucworKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBzdHJ1Y3QgYmZkX3NlY3Rpb24gKiosCisrICAgc3RydWN0IGJmZF9zZWN0aW9uICoqLCBzdHJ1Y3QgYmZkX3NlY3Rpb24gKiopOworKworKy8qIExpbnV4IHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSBsaW5rZXIuICAqLworKworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfaTM4NmxpbnV4X3NpemVfZHluYW1pY19zZWN0aW9ucworKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX202OGtsaW51eF9zaXplX2R5bmFtaWNfc2VjdGlvbnMKKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF9zcGFyY2xpbnV4X3NpemVfZHluYW1pY19zZWN0aW9ucworKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKysKKysvKiBtbWFwIGhhY2tzICovCisrCisrc3RydWN0IF9iZmRfd2luZG93X2ludGVybmFsOworK3R5cGVkZWYgc3RydWN0IF9iZmRfd2luZG93X2ludGVybmFsIGJmZF93aW5kb3dfaW50ZXJuYWw7CisrCisrdHlwZWRlZiBzdHJ1Y3QgX2JmZF93aW5kb3cKKyt7CisrICAvKiBXaGF0IHRoZSB1c2VyIGFza2VkIGZvci4gICovCisrICB2b2lkICpkYXRhOworKyAgYmZkX3NpemVfdHlwZSBzaXplOworKyAgLyogVGhlIGFjdHVhbCB3aW5kb3cgdXNlZCBieSBCRkQuICBTbWFsbCB1c2VyLXJlcXVlc3RlZCByZWFkLW9ubHkKKysgICAgIHJlZ2lvbnMgc2hhcmluZyBhIHBhZ2UgbWF5IHNoYXJlIGEgc2luZ2xlIHdpbmRvdyBpbnRvIHRoZSBvYmplY3QKKysgICAgIGZpbGUuICBSZWFkLXdyaXRlIHZlcnNpb25zIHNob3VsZG4ndCB1bnRpbCBJJ3ZlIGZpeGVkIHRoaW5ncyB0bworKyAgICAga2VlcCB0cmFjayBvZiB3aGljaCBwb3J0aW9ucyBoYXZlIGJlZW4gY2xhaW1lZCBieSB0aGUKKysgICAgIGFwcGxpY2F0aW9uOyBkb24ndCB3YW50IHRvIGdpdmUgdGhlIHNhbWUgcmVnaW9uIGJhY2sgd2hlbiB0aGUKKysgICAgIGFwcGxpY2F0aW9uIHdhbnRzIHR3byB3cml0YWJsZSBjb3BpZXMhICAqLworKyAgc3RydWN0IF9iZmRfd2luZG93X2ludGVybmFsICppOworK30KKytiZmRfd2luZG93OworKworK2V4dGVybiB2b2lkIGJmZF9pbml0X3dpbmRvdworKyAgKGJmZF93aW5kb3cgKik7CisrZXh0ZXJuIHZvaWQgYmZkX2ZyZWVfd2luZG93CisrICAoYmZkX3dpbmRvdyAqKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2dldF9maWxlX3dpbmRvdworKyAgKGJmZCAqLCBmaWxlX3B0ciwgYmZkX3NpemVfdHlwZSwgYmZkX3dpbmRvdyAqLCBiZmRfYm9vbGVhbik7CisrCisrLyogWENPRkYgc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlIGxpbmtlci4gICovCisrCisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF94Y29mZl9saW5rX3JlY29yZF9zZXQKKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKiwgc3RydWN0IGJmZF9saW5rX2hhc2hfZW50cnkgKiwgYmZkX3NpemVfdHlwZSk7CisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF94Y29mZl9pbXBvcnRfc3ltYm9sCisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIHN0cnVjdCBiZmRfbGlua19oYXNoX2VudHJ5ICosIGJmZF92bWEsCisrICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50KTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX3hjb2ZmX2V4cG9ydF9zeW1ib2wKKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKiwgc3RydWN0IGJmZF9saW5rX2hhc2hfZW50cnkgKik7CisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF94Y29mZl9saW5rX2NvdW50X3JlbG9jCisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIGNvbnN0IGNoYXIgKik7CisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF94Y29mZl9yZWNvcmRfbGlua19hc3NpZ25tZW50CisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIGNvbnN0IGNoYXIgKik7CisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF94Y29mZl9zaXplX2R5bmFtaWNfc2VjdGlvbnMKKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCisrICAgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgYmZkX2Jvb2xlYW4sCisrICAgaW50LCBiZmRfYm9vbGVhbiwgYmZkX2Jvb2xlYW4sIHN0cnVjdCBiZmRfc2VjdGlvbiAqKiwgYmZkX2Jvb2xlYW4pOworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfeGNvZmZfbGlua19nZW5lcmF0ZV9ydGluaXQKKysgIChiZmQgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGJmZF9ib29sZWFuKTsKKysKKysvKiBYQ09GRiBzdXBwb3J0IHJvdXRpbmVzIGZvciBhci4gICovCisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF94Y29mZl9hcl9hcmNoaXZlX3NldF9tYWdpYworKyAgKGJmZCAqLCBjaGFyICopOworKworKy8qIEV4dGVybmFsbHkgdmlzaWJsZSBDT0ZGIHJvdXRpbmVzLiAgKi8KKysKKysjaWYgZGVmaW5lZChfX1NURENfXykgfHwgZGVmaW5lZChBTE1PU1RfU1REQykKKytzdHJ1Y3QgaW50ZXJuYWxfc3ltZW50OworK3VuaW9uIGludGVybmFsX2F1eGVudDsKKysjZW5kaWYKKysKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2NvZmZfZ2V0X3N5bWVudAorKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX3N5bWJvbCAqLCBzdHJ1Y3QgaW50ZXJuYWxfc3ltZW50ICopOworKworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfY29mZl9nZXRfYXV4ZW50CisrICAoYmZkICosIHN0cnVjdCBiZmRfc3ltYm9sICosIGludCwgdW5pb24gaW50ZXJuYWxfYXV4ZW50ICopOworKworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfY29mZl9zZXRfc3ltYm9sX2NsYXNzCisrICAoYmZkICosIHN0cnVjdCBiZmRfc3ltYm9sICosIHVuc2lnbmVkIGludCk7CisrCisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF9tNjhrX2NvZmZfY3JlYXRlX2VtYmVkZGVkX3JlbG9jcworKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBzdHJ1Y3QgYmZkX3NlY3Rpb24gKiwgc3RydWN0IGJmZF9zZWN0aW9uICosIGNoYXIgKiopOworKworKy8qIEFSTSBWRlAxMSBlcnJhdHVtIHdvcmthcm91bmQgc3VwcG9ydC4gICovCisrdHlwZWRlZiBlbnVtCisreworKyAgQkZEX0FSTV9WRlAxMV9GSVhfREVGQVVMVCwKKysgIEJGRF9BUk1fVkZQMTFfRklYX05PTkUsCisrICBCRkRfQVJNX1ZGUDExX0ZJWF9TQ0FMQVIsCisrICBCRkRfQVJNX1ZGUDExX0ZJWF9WRUNUT1IKKyt9IGJmZF9hcm1fdmZwMTFfZml4OworKworK2V4dGVybiB2b2lkIGJmZF9lbGYzMl9hcm1faW5pdF9tYXBzCisrICAoYmZkICopOworKworK2V4dGVybiB2b2lkIGJmZF9lbGYzMl9hcm1fc2V0X3ZmcDExX2ZpeAorKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKysKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2VsZjMyX2FybV92ZnAxMV9lcnJhdHVtX3NjYW4KKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrCisrZXh0ZXJuIHZvaWQgYmZkX2VsZjMyX2FybV92ZnAxMV9maXhfdmVuZWVyX2xvY2F0aW9ucworKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKysKKysvKiBBUk0gSW50ZXJ3b3JraW5nIHN1cHBvcnQuICBDYWxsZWQgZnJvbSBsaW5rZXIuICAqLworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfYXJtX2FsbG9jYXRlX2ludGVyd29ya2luZ19zZWN0aW9ucworKyAgKHN0cnVjdCBiZmRfbGlua19pbmZvICopOworKworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfYXJtX3Byb2Nlc3NfYmVmb3JlX2FsbG9jYXRpb24KKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKiwgaW50KTsKKysKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2FybV9nZXRfYmZkX2Zvcl9pbnRlcndvcmtpbmcKKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrCisrLyogUEUgQVJNIEludGVyd29ya2luZyBzdXBwb3J0LiAgQ2FsbGVkIGZyb20gbGlua2VyLiAgKi8KKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2FybV9wZV9hbGxvY2F0ZV9pbnRlcndvcmtpbmdfc2VjdGlvbnMKKysgIChzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKysKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2FybV9wZV9wcm9jZXNzX2JlZm9yZV9hbGxvY2F0aW9uCisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIGludCk7CisrCisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF9hcm1fcGVfZ2V0X2JmZF9mb3JfaW50ZXJ3b3JraW5nCisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOworKworKy8qIEVMRiBBUk0gSW50ZXJ3b3JraW5nIHN1cHBvcnQuICBDYWxsZWQgZnJvbSBsaW5rZXIuICAqLworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfZWxmMzJfYXJtX2FsbG9jYXRlX2ludGVyd29ya2luZ19zZWN0aW9ucworKyAgKHN0cnVjdCBiZmRfbGlua19pbmZvICopOworKworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfZWxmMzJfYXJtX3Byb2Nlc3NfYmVmb3JlX2FsbG9jYXRpb24KKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrCisrdm9pZCBiZmRfZWxmMzJfYXJtX3NldF90YXJnZXRfcmVsb2NzCisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIGludCwgY2hhciAqLCBpbnQsIGludCwgYmZkX2FybV92ZnAxMV9maXgsCisrICAgaW50LCBpbnQpOworKworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfZWxmMzJfYXJtX2dldF9iZmRfZm9yX2ludGVyd29ya2luZworKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKysKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2VsZjMyX2FybV9hZGRfZ2x1ZV9zZWN0aW9uc190b19iZmQKKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrCisrLyogRUxGIEFSTSBtYXBwaW5nIHN5bWJvbCBzdXBwb3J0ICovCisrI2RlZmluZSBCRkRfQVJNX1NQRUNJQUxfU1lNX1RZUEVfTUFQCSgxIDw8IDApCisrI2RlZmluZSBCRkRfQVJNX1NQRUNJQUxfU1lNX1RZUEVfVEFHCSgxIDw8IDEpCisrI2RlZmluZSBCRkRfQVJNX1NQRUNJQUxfU1lNX1RZUEVfT1RIRVIgICgxIDw8IDIpCisrI2RlZmluZSBCRkRfQVJNX1NQRUNJQUxfU1lNX1RZUEVfQU5ZCSh+MCkKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2lzX2FybV9zcGVjaWFsX3N5bWJvbF9uYW1lCisrICAoY29uc3QgY2hhciAqIG5hbWUsIGludCB0eXBlKTsKKysKKytleHRlcm4gdm9pZCBiZmRfZWxmMzJfYXJtX3NldF9ieXRlc3dhcF9jb2RlIChzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBpbnQpOworKworKy8qIEFSTSBOb3RlIHNlY3Rpb24gcHJvY2Vzc2luZy4gICovCisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF9hcm1fbWVyZ2VfbWFjaGluZXMKKysgIChiZmQgKiwgYmZkICopOworKworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfYXJtX3VwZGF0ZV9ub3RlcworKyAgKGJmZCAqLCBjb25zdCBjaGFyICopOworKworK2V4dGVybiB1bnNpZ25lZCBpbnQgYmZkX2FybV9nZXRfbWFjaF9mcm9tX25vdGVzCisrICAoYmZkICosIGNvbnN0IGNoYXIgKik7CisrCisrLyogVEkgQ09GRiBsb2FkIHBhZ2Ugc3VwcG9ydC4gICovCisrZXh0ZXJuIHZvaWQgYmZkX3RpY29mZl9zZXRfc2VjdGlvbl9sb2FkX3BhZ2UKKysgIChzdHJ1Y3QgYmZkX3NlY3Rpb24gKiwgaW50KTsKKysKKytleHRlcm4gaW50IGJmZF90aWNvZmZfZ2V0X3NlY3Rpb25fbG9hZF9wYWdlCisrICAoc3RydWN0IGJmZF9zZWN0aW9uICopOworKworKy8qIEg4LzMwMCBmdW5jdGlvbnMuICAqLworK2V4dGVybiBiZmRfdm1hIGJmZF9oODMwMF9wYWRfYWRkcmVzcworKyAgKGJmZCAqLCBiZmRfdm1hKTsKKysKKysvKiBJQTY0IEl0YW5pdW0gY29kZSBnZW5lcmF0aW9uLiAgQ2FsbGVkIGZyb20gbGlua2VyLiAgKi8KKytleHRlcm4gdm9pZCBiZmRfZWxmMzJfaWE2NF9hZnRlcl9wYXJzZQorKyAgKGludCk7CisrCisrZXh0ZXJuIHZvaWQgYmZkX2VsZjY0X2lhNjRfYWZ0ZXJfcGFyc2UKKysgIChpbnQpOworKworKy8qIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgZm9yIGEgY29tZGF0IHNlY3Rpb24sIGFzIGluIFBFLiAgQSBjb21kYXQKKysgICBzZWN0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgc3ltYm9sLiAgV2hlbiB0aGUgbGlua2VyCisrICAgc2VlcyBhIGNvbWRhdCBzZWN0aW9uLCBpdCBrZWVwcyBvbmx5IG9uZSBvZiB0aGUgc2VjdGlvbnMgd2l0aCBhCisrICAgZ2l2ZW4gbmFtZSBhbmQgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gc3ltYm9sLiAgKi8KKysKKytzdHJ1Y3QgY29mZl9jb21kYXRfaW5mbworK3sKKysgIC8qIFRoZSBuYW1lIG9mIHRoZSBzeW1ib2wgYXNzb2NpYXRlZCB3aXRoIGEgY29tZGF0IHNlY3Rpb24uICAqLworKyAgY29uc3QgY2hhciAqbmFtZTsKKysKKysgIC8qIFRoZSBsb2NhbCBzeW1ib2wgdGFibGUgaW5kZXggb2YgdGhlIHN5bWJvbCBhc3NvY2lhdGVkIHdpdGggYQorKyAgICAgY29tZGF0IHNlY3Rpb24uICBUaGlzIGlzIG9ubHkgbWVhbmluZ2Z1bCB0byB0aGUgb2JqZWN0IGZpbGUgZm9ybWF0CisrICAgICBzcGVjaWZpYyBjb2RlOyBpdCBpcyBub3QgYW4gaW5kZXggaW50byB0aGUgbGlzdCByZXR1cm5lZCBieQorKyAgICAgYmZkX2Nhbm9uaWNhbGl6ZV9zeW10YWIuICAqLworKyAgbG9uZyBzeW1ib2w7CisrfTsKKysKKytleHRlcm4gc3RydWN0IGNvZmZfY29tZGF0X2luZm8gKmJmZF9jb2ZmX2dldF9jb21kYXRfc2VjdGlvbgorKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX3NlY3Rpb24gKik7CisrCisrLyogRXh0cmFjdGVkIGZyb20gaW5pdC5jLiAgKi8KKyt2b2lkIGJmZF9pbml0ICh2b2lkKTsKKysKKysvKiBFeHRyYWN0ZWQgZnJvbSBvcG5jbHMuYy4gICovCisrYmZkICpiZmRfZm9wZW4gKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICp0YXJnZXQsCisrICAgIGNvbnN0IGNoYXIgKm1vZGUsIGludCBmZCk7CisrCisrYmZkICpiZmRfb3BlbnIgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICp0YXJnZXQpOworKworK2JmZCAqYmZkX2Zkb3BlbnIgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICp0YXJnZXQsIGludCBmZCk7CisrCisrYmZkICpiZmRfb3BlbnN0cmVhbXIgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB2b2lkICopOworKworK2JmZCAqYmZkX29wZW5yX2lvdmVjIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqdGFyZ2V0LAorKyAgICB2b2lkICooKm9wZW4pIChzdHJ1Y3QgYmZkICpuYmZkLAorKyAgICB2b2lkICpvcGVuX2Nsb3N1cmUpLAorKyAgICB2b2lkICpvcGVuX2Nsb3N1cmUsCisrICAgIGZpbGVfcHRyICgqcHJlYWQpIChzdHJ1Y3QgYmZkICpuYmZkLAorKyAgICB2b2lkICpzdHJlYW0sCisrICAgIHZvaWQgKmJ1ZiwKKysgICAgZmlsZV9wdHIgbmJ5dGVzLAorKyAgICBmaWxlX3B0ciBvZmZzZXQpLAorKyAgICBpbnQgKCpjbG9zZSkgKHN0cnVjdCBiZmQgKm5iZmQsCisrICAgIHZvaWQgKnN0cmVhbSksCisrICAgIGludCAoKnN0YXQpIChzdHJ1Y3QgYmZkICphYmZkLAorKyAgICB2b2lkICpzdHJlYW0sCisrICAgIHN0cnVjdCBzdGF0ICpzYikpOworKworK2JmZCAqYmZkX29wZW53IChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqdGFyZ2V0KTsKKysKKytiZmRfYm9vbGVhbiBiZmRfY2xvc2UgKGJmZCAqYWJmZCk7CisrCisrYmZkX2Jvb2xlYW4gYmZkX2Nsb3NlX2FsbF9kb25lIChiZmQgKik7CisrCisrYmZkICpiZmRfY3JlYXRlIChjb25zdCBjaGFyICpmaWxlbmFtZSwgYmZkICp0ZW1wbCk7CisrCisrYmZkX2Jvb2xlYW4gYmZkX21ha2Vfd3JpdGFibGUgKGJmZCAqYWJmZCk7CisrCisrYmZkX2Jvb2xlYW4gYmZkX21ha2VfcmVhZGFibGUgKGJmZCAqYWJmZCk7CisrCisrdW5zaWduZWQgbG9uZyBiZmRfY2FsY19nbnVfZGVidWdsaW5rX2NyYzMyCisrICAgKHVuc2lnbmVkIGxvbmcgY3JjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGJmZF9zaXplX3R5cGUgbGVuKTsKKysKKytjaGFyICpiZmRfZm9sbG93X2dudV9kZWJ1Z2xpbmsgKGJmZCAqYWJmZCwgY29uc3QgY2hhciAqZGlyKTsKKysKKytzdHJ1Y3QgYmZkX3NlY3Rpb24gKmJmZF9jcmVhdGVfZ251X2RlYnVnbGlua19zZWN0aW9uCisrICAgKGJmZCAqYWJmZCwgY29uc3QgY2hhciAqZmlsZW5hbWUpOworKworK2JmZF9ib29sZWFuIGJmZF9maWxsX2luX2dudV9kZWJ1Z2xpbmtfc2VjdGlvbgorKyAgIChiZmQgKmFiZmQsIHN0cnVjdCBiZmRfc2VjdGlvbiAqc2VjdCwgY29uc3QgY2hhciAqZmlsZW5hbWUpOworKworKy8qIEV4dHJhY3RlZCBmcm9tIGxpYmJmZC5jLiAgKi8KKysKKysvKiBCeXRlIHN3YXBwaW5nIG1hY3JvcyBmb3IgdXNlciBzZWN0aW9uIGRhdGEuICAqLworKworKyNkZWZpbmUgYmZkX3B1dF84KGFiZmQsIHZhbCwgcHRyKSBcCisrICAoKHZvaWQpICgqKCh1bnNpZ25lZCBjaGFyICopIChwdHIpKSA9ICh2YWwpICYgMHhmZikpCisrI2RlZmluZSBiZmRfcHV0X3NpZ25lZF84IFwKKysgIGJmZF9wdXRfOAorKyNkZWZpbmUgYmZkX2dldF84KGFiZmQsIHB0cikgXAorKyAgKCoodW5zaWduZWQgY2hhciAqKSAocHRyKSAmIDB4ZmYpCisrI2RlZmluZSBiZmRfZ2V0X3NpZ25lZF84KGFiZmQsIHB0cikgXAorKyAgKCgoKih1bnNpZ25lZCBjaGFyICopIChwdHIpICYgMHhmZikgXiAweDgwKSAtIDB4ODApCisrCisrI2RlZmluZSBiZmRfcHV0XzE2KGFiZmQsIHZhbCwgcHRyKSBcCisrICBCRkRfU0VORCAoYWJmZCwgYmZkX3B1dHgxNiwgKCh2YWwpLChwdHIpKSkKKysjZGVmaW5lIGJmZF9wdXRfc2lnbmVkXzE2IFwKKysgIGJmZF9wdXRfMTYKKysjZGVmaW5lIGJmZF9nZXRfMTYoYWJmZCwgcHRyKSBcCisrICBCRkRfU0VORCAoYWJmZCwgYmZkX2dldHgxNiwgKHB0cikpCisrI2RlZmluZSBiZmRfZ2V0X3NpZ25lZF8xNihhYmZkLCBwdHIpIFwKKysgIEJGRF9TRU5EIChhYmZkLCBiZmRfZ2V0eF9zaWduZWRfMTYsIChwdHIpKQorKworKyNkZWZpbmUgYmZkX3B1dF8zMihhYmZkLCB2YWwsIHB0cikgXAorKyAgQkZEX1NFTkQgKGFiZmQsIGJmZF9wdXR4MzIsICgodmFsKSwocHRyKSkpCisrI2RlZmluZSBiZmRfcHV0X3NpZ25lZF8zMiBcCisrICBiZmRfcHV0XzMyCisrI2RlZmluZSBiZmRfZ2V0XzMyKGFiZmQsIHB0cikgXAorKyAgQkZEX1NFTkQgKGFiZmQsIGJmZF9nZXR4MzIsIChwdHIpKQorKyNkZWZpbmUgYmZkX2dldF9zaWduZWRfMzIoYWJmZCwgcHRyKSBcCisrICBCRkRfU0VORCAoYWJmZCwgYmZkX2dldHhfc2lnbmVkXzMyLCAocHRyKSkKKysKKysjZGVmaW5lIGJmZF9wdXRfNjQoYWJmZCwgdmFsLCBwdHIpIFwKKysgIEJGRF9TRU5EIChhYmZkLCBiZmRfcHV0eDY0LCAoKHZhbCksIChwdHIpKSkKKysjZGVmaW5lIGJmZF9wdXRfc2lnbmVkXzY0IFwKKysgIGJmZF9wdXRfNjQKKysjZGVmaW5lIGJmZF9nZXRfNjQoYWJmZCwgcHRyKSBcCisrICBCRkRfU0VORCAoYWJmZCwgYmZkX2dldHg2NCwgKHB0cikpCisrI2RlZmluZSBiZmRfZ2V0X3NpZ25lZF82NChhYmZkLCBwdHIpIFwKKysgIEJGRF9TRU5EIChhYmZkLCBiZmRfZ2V0eF9zaWduZWRfNjQsIChwdHIpKQorKworKyNkZWZpbmUgYmZkX2dldChiaXRzLCBhYmZkLCBwdHIpICAgICAgICAgICAgICAgICAgICAgICBcCisrICAoKGJpdHMpID09IDggPyAoYmZkX3ZtYSkgYmZkX2dldF84IChhYmZkLCBwdHIpICAgICAgIFwKKysgICA6IChiaXRzKSA9PSAxNiA/IGJmZF9nZXRfMTYgKGFiZmQsIHB0cikgICAgICAgICAgICAgXAorKyAgIDogKGJpdHMpID09IDMyID8gYmZkX2dldF8zMiAoYWJmZCwgcHRyKSAgICAgICAgICAgICBcCisrICAgOiAoYml0cykgPT0gNjQgPyBiZmRfZ2V0XzY0IChhYmZkLCBwdHIpICAgICAgICAgICAgIFwKKysgICA6IChhYm9ydCAoKSwgKGJmZF92bWEpIC0gMSkpCisrCisrI2RlZmluZSBiZmRfcHV0KGJpdHMsIGFiZmQsIHZhbCwgcHRyKSAgICAgICAgICAgICAgICAgIFwKKysgICgoYml0cykgPT0gOCA/IGJmZF9wdXRfOCAgKGFiZmQsIHZhbCwgcHRyKSAgICAgICAgICAgXAorKyAgIDogKGJpdHMpID09IDE2ID8gYmZkX3B1dF8xNiAoYWJmZCwgdmFsLCBwdHIpICAgICAgICAgICAgICAgIFwKKysgICA6IChiaXRzKSA9PSAzMiA/IGJmZF9wdXRfMzIgKGFiZmQsIHZhbCwgcHRyKSAgICAgICAgICAgICAgICBcCisrICAgOiAoYml0cykgPT0gNjQgPyBiZmRfcHV0XzY0IChhYmZkLCB2YWwsIHB0cikgICAgICAgICAgICAgICAgXAorKyAgIDogKGFib3J0ICgpLCAodm9pZCkgMCkpCisrCisrCisrLyogQnl0ZSBzd2FwcGluZyBtYWNyb3MgZm9yIGZpbGUgaGVhZGVyIGRhdGEuICAqLworKworKyNkZWZpbmUgYmZkX2hfcHV0XzgoYWJmZCwgdmFsLCBwdHIpIFwKKysgIGJmZF9wdXRfOCAoYWJmZCwgdmFsLCBwdHIpCisrI2RlZmluZSBiZmRfaF9wdXRfc2lnbmVkXzgoYWJmZCwgdmFsLCBwdHIpIFwKKysgIGJmZF9wdXRfOCAoYWJmZCwgdmFsLCBwdHIpCisrI2RlZmluZSBiZmRfaF9nZXRfOChhYmZkLCBwdHIpIFwKKysgIGJmZF9nZXRfOCAoYWJmZCwgcHRyKQorKyNkZWZpbmUgYmZkX2hfZ2V0X3NpZ25lZF84KGFiZmQsIHB0cikgXAorKyAgYmZkX2dldF9zaWduZWRfOCAoYWJmZCwgcHRyKQorKworKyNkZWZpbmUgYmZkX2hfcHV0XzE2KGFiZmQsIHZhbCwgcHRyKSBcCisrICBCRkRfU0VORCAoYWJmZCwgYmZkX2hfcHV0eDE2LCAodmFsLCBwdHIpKQorKyNkZWZpbmUgYmZkX2hfcHV0X3NpZ25lZF8xNiBcCisrICBiZmRfaF9wdXRfMTYKKysjZGVmaW5lIGJmZF9oX2dldF8xNihhYmZkLCBwdHIpIFwKKysgIEJGRF9TRU5EIChhYmZkLCBiZmRfaF9nZXR4MTYsIChwdHIpKQorKyNkZWZpbmUgYmZkX2hfZ2V0X3NpZ25lZF8xNihhYmZkLCBwdHIpIFwKKysgIEJGRF9TRU5EIChhYmZkLCBiZmRfaF9nZXR4X3NpZ25lZF8xNiwgKHB0cikpCisrCisrI2RlZmluZSBiZmRfaF9wdXRfMzIoYWJmZCwgdmFsLCBwdHIpIFwKKysgIEJGRF9TRU5EIChhYmZkLCBiZmRfaF9wdXR4MzIsICh2YWwsIHB0cikpCisrI2RlZmluZSBiZmRfaF9wdXRfc2lnbmVkXzMyIFwKKysgIGJmZF9oX3B1dF8zMgorKyNkZWZpbmUgYmZkX2hfZ2V0XzMyKGFiZmQsIHB0cikgXAorKyAgQkZEX1NFTkQgKGFiZmQsIGJmZF9oX2dldHgzMiwgKHB0cikpCisrI2RlZmluZSBiZmRfaF9nZXRfc2lnbmVkXzMyKGFiZmQsIHB0cikgXAorKyAgQkZEX1NFTkQgKGFiZmQsIGJmZF9oX2dldHhfc2lnbmVkXzMyLCAocHRyKSkKKysKKysjZGVmaW5lIGJmZF9oX3B1dF82NChhYmZkLCB2YWwsIHB0cikgXAorKyAgQkZEX1NFTkQgKGFiZmQsIGJmZF9oX3B1dHg2NCwgKHZhbCwgcHRyKSkKKysjZGVmaW5lIGJmZF9oX3B1dF9zaWduZWRfNjQgXAorKyAgYmZkX2hfcHV0XzY0CisrI2RlZmluZSBiZmRfaF9nZXRfNjQoYWJmZCwgcHRyKSBcCisrICBCRkRfU0VORCAoYWJmZCwgYmZkX2hfZ2V0eDY0LCAocHRyKSkKKysjZGVmaW5lIGJmZF9oX2dldF9zaWduZWRfNjQoYWJmZCwgcHRyKSBcCisrICBCRkRfU0VORCAoYWJmZCwgYmZkX2hfZ2V0eF9zaWduZWRfNjQsIChwdHIpKQorKworKy8qIEFsaWFzZXMgZm9yIHRoZSBhYm92ZSwgd2hpY2ggc2hvdWxkIGV2ZW50dWFsbHkgZ28gYXdheS4gICovCisrCisrI2RlZmluZSBIX1BVVF82NCAgYmZkX2hfcHV0XzY0CisrI2RlZmluZSBIX1BVVF8zMiAgYmZkX2hfcHV0XzMyCisrI2RlZmluZSBIX1BVVF8xNiAgYmZkX2hfcHV0XzE2CisrI2RlZmluZSBIX1BVVF84ICAgYmZkX2hfcHV0XzgKKysjZGVmaW5lIEhfUFVUX1M2NCBiZmRfaF9wdXRfc2lnbmVkXzY0CisrI2RlZmluZSBIX1BVVF9TMzIgYmZkX2hfcHV0X3NpZ25lZF8zMgorKyNkZWZpbmUgSF9QVVRfUzE2IGJmZF9oX3B1dF9zaWduZWRfMTYKKysjZGVmaW5lIEhfUFVUX1M4ICBiZmRfaF9wdXRfc2lnbmVkXzgKKysjZGVmaW5lIEhfR0VUXzY0ICBiZmRfaF9nZXRfNjQKKysjZGVmaW5lIEhfR0VUXzMyICBiZmRfaF9nZXRfMzIKKysjZGVmaW5lIEhfR0VUXzE2ICBiZmRfaF9nZXRfMTYKKysjZGVmaW5lIEhfR0VUXzggICBiZmRfaF9nZXRfOAorKyNkZWZpbmUgSF9HRVRfUzY0IGJmZF9oX2dldF9zaWduZWRfNjQKKysjZGVmaW5lIEhfR0VUX1MzMiBiZmRfaF9nZXRfc2lnbmVkXzMyCisrI2RlZmluZSBIX0dFVF9TMTYgYmZkX2hfZ2V0X3NpZ25lZF8xNgorKyNkZWZpbmUgSF9HRVRfUzggIGJmZF9oX2dldF9zaWduZWRfOAorKworKworKy8qIEV4dHJhY3RlZCBmcm9tIGJmZGlvLmMuICAqLworK2xvbmcgYmZkX2dldF9tdGltZSAoYmZkICphYmZkKTsKKysKKytmaWxlX3B0ciBiZmRfZ2V0X3NpemUgKGJmZCAqYWJmZCk7CisrCisrLyogRXh0cmFjdGVkIGZyb20gYmZkd2luLmMuICAqLworKy8qIEV4dHJhY3RlZCBmcm9tIHNlY3Rpb24uYy4gICovCisrdHlwZWRlZiBzdHJ1Y3QgYmZkX3NlY3Rpb24KKyt7CisrICAvKiBUaGUgbmFtZSBvZiB0aGUgc2VjdGlvbjsgdGhlIG5hbWUgaXNuJ3QgYSBjb3B5LCB0aGUgcG9pbnRlciBpcworKyAgICAgdGhlIHNhbWUgYXMgdGhhdCBwYXNzZWQgdG8gYmZkX21ha2Vfc2VjdGlvbi4gICovCisrICBjb25zdCBjaGFyICpuYW1lOworKworKyAgLyogQSB1bmlxdWUgc2VxdWVuY2UgbnVtYmVyLiAgKi8KKysgIGludCBpZDsKKysKKysgIC8qIFdoaWNoIHNlY3Rpb24gaW4gdGhlIGJmZDsgMC4ubi0xIGFzIHNlY3Rpb25zIGFyZSBjcmVhdGVkIGluIGEgYmZkLiAgKi8KKysgIGludCBpbmRleDsKKysKKysgIC8qIFRoZSBuZXh0IHNlY3Rpb24gaW4gdGhlIGxpc3QgYmVsb25naW5nIHRvIHRoZSBCRkQsIG9yIE5VTEwuICAqLworKyAgc3RydWN0IGJmZF9zZWN0aW9uICpuZXh0OworKworKyAgLyogVGhlIHByZXZpb3VzIHNlY3Rpb24gaW4gdGhlIGxpc3QgYmVsb25naW5nIHRvIHRoZSBCRkQsIG9yIE5VTEwuICAqLworKyAgc3RydWN0IGJmZF9zZWN0aW9uICpwcmV2OworKworKyAgLyogVGhlIGZpZWxkIGZsYWdzIGNvbnRhaW5zIGF0dHJpYnV0ZXMgb2YgdGhlIHNlY3Rpb24uIFNvbWUKKysgICAgIGZsYWdzIGFyZSByZWFkIGluIGZyb20gdGhlIG9iamVjdCBmaWxlLCBhbmQgc29tZSBhcmUKKysgICAgIHN5bnRoZXNpemVkIGZyb20gb3RoZXIgaW5mb3JtYXRpb24uICAqLworKyAgZmxhZ3dvcmQgZmxhZ3M7CisrCisrI2RlZmluZSBTRUNfTk9fRkxBR1MgICAweDAwMAorKworKyAgLyogVGVsbHMgdGhlIE9TIHRvIGFsbG9jYXRlIHNwYWNlIGZvciB0aGlzIHNlY3Rpb24gd2hlbiBsb2FkaW5nLgorKyAgICAgVGhpcyBpcyBjbGVhciBmb3IgYSBzZWN0aW9uIGNvbnRhaW5pbmcgZGVidWcgaW5mb3JtYXRpb24gb25seS4gICovCisrI2RlZmluZSBTRUNfQUxMT0MgICAgICAweDAwMQorKworKyAgLyogVGVsbHMgdGhlIE9TIHRvIGxvYWQgdGhlIHNlY3Rpb24gZnJvbSB0aGUgZmlsZSB3aGVuIGxvYWRpbmcuCisrICAgICBUaGlzIGlzIGNsZWFyIGZvciBhIC5ic3Mgc2VjdGlvbi4gICovCisrI2RlZmluZSBTRUNfTE9BRCAgICAgICAweDAwMgorKworKyAgLyogVGhlIHNlY3Rpb24gY29udGFpbnMgZGF0YSBzdGlsbCB0byBiZSByZWxvY2F0ZWQsIHNvIHRoZXJlIGlzCisrICAgICBzb21lIHJlbG9jYXRpb24gaW5mb3JtYXRpb24gdG9vLiAgKi8KKysjZGVmaW5lIFNFQ19SRUxPQyAgICAgIDB4MDA0CisrCisrICAvKiBBIHNpZ25hbCB0byB0aGUgT1MgdGhhdCB0aGUgc2VjdGlvbiBjb250YWlucyByZWFkIG9ubHkgZGF0YS4gICovCisrI2RlZmluZSBTRUNfUkVBRE9OTFkgICAweDAwOAorKworKyAgLyogVGhlIHNlY3Rpb24gY29udGFpbnMgY29kZSBvbmx5LiAgKi8KKysjZGVmaW5lIFNFQ19DT0RFICAgICAgIDB4MDEwCisrCisrICAvKiBUaGUgc2VjdGlvbiBjb250YWlucyBkYXRhIG9ubHkuICAqLworKyNkZWZpbmUgU0VDX0RBVEEgICAgICAgMHgwMjAKKysKKysgIC8qIFRoZSBzZWN0aW9uIHdpbGwgcmVzaWRlIGluIFJPTS4gICovCisrI2RlZmluZSBTRUNfUk9NICAgICAgICAweDA0MAorKworKyAgLyogVGhlIHNlY3Rpb24gY29udGFpbnMgY29uc3RydWN0b3IgaW5mb3JtYXRpb24uIFRoaXMgc2VjdGlvbgorKyAgICAgdHlwZSBpcyB1c2VkIGJ5IHRoZSBsaW5rZXIgdG8gY3JlYXRlIGxpc3RzIG9mIGNvbnN0cnVjdG9ycyBhbmQKKysgICAgIGRlc3RydWN0b3JzIHVzZWQgYnkgPDxnKys+Pi4gV2hlbiBhIGJhY2sgZW5kIHNlZXMgYSBzeW1ib2wKKysgICAgIHdoaWNoIHNob3VsZCBiZSB1c2VkIGluIGEgY29uc3RydWN0b3IgbGlzdCwgaXQgY3JlYXRlcyBhIG5ldworKyAgICAgc2VjdGlvbiBmb3IgdGhlIHR5cGUgb2YgbmFtZSAoZS5nLiwgPDxfX0NUT1JfTElTVF9fPj4pLCBhdHRhY2hlcworKyAgICAgdGhlIHN5bWJvbCB0byBpdCwgYW5kIGJ1aWxkcyBhIHJlbG9jYXRpb24uIFRvIGJ1aWxkIHRoZSBsaXN0cworKyAgICAgb2YgY29uc3RydWN0b3JzLCBhbGwgdGhlIGxpbmtlciBoYXMgdG8gZG8gaXMgY2F0ZW5hdGUgYWxsIHRoZQorKyAgICAgc2VjdGlvbnMgY2FsbGVkIDw8X19DVE9SX0xJU1RfXz4+IGFuZCByZWxvY2F0ZSB0aGUgZGF0YQorKyAgICAgY29udGFpbmVkIHdpdGhpbiAtIGV4YWN0bHkgdGhlIG9wZXJhdGlvbnMgaXQgd291bGQgcGVmb3JtIG9uCisrICAgICBzdGFuZGFyZCBkYXRhLiAgKi8KKysjZGVmaW5lIFNFQ19DT05TVFJVQ1RPUiAweDA4MAorKworKyAgLyogVGhlIHNlY3Rpb24gaGFzIGNvbnRlbnRzIC0gYSBkYXRhIHNlY3Rpb24gY291bGQgYmUKKysgICAgIDw8U0VDX0FMTE9DPj4gfCA8PFNFQ19IQVNfQ09OVEVOVFM+PjsgYSBkZWJ1ZyBzZWN0aW9uIGNvdWxkIGJlCisrICAgICA8PFNFQ19IQVNfQ09OVEVOVFM+PiAgKi8KKysjZGVmaW5lIFNFQ19IQVNfQ09OVEVOVFMgMHgxMDAKKysKKysgIC8qIEFuIGluc3RydWN0aW9uIHRvIHRoZSBsaW5rZXIgdG8gbm90IG91dHB1dCB0aGUgc2VjdGlvbgorKyAgICAgZXZlbiBpZiBpdCBoYXMgaW5mb3JtYXRpb24gd2hpY2ggd291bGQgbm9ybWFsbHkgYmUgd3JpdHRlbi4gICovCisrI2RlZmluZSBTRUNfTkVWRVJfTE9BRCAweDIwMAorKworKyAgLyogVGhlIHNlY3Rpb24gY29udGFpbnMgdGhyZWFkIGxvY2FsIGRhdGEuICAqLworKyNkZWZpbmUgU0VDX1RIUkVBRF9MT0NBTCAweDQwMAorKworKyAgLyogVGhlIHNlY3Rpb24gaGFzIEdPVCByZWZlcmVuY2VzLiAgVGhpcyBmbGFnIGlzIG9ubHkgZm9yIHRoZQorKyAgICAgbGlua2VyLCBhbmQgaXMgY3VycmVudGx5IG9ubHkgdXNlZCBieSB0aGUgZWxmMzItaHBwYSBiYWNrIGVuZC4KKysgICAgIEl0IHdpbGwgYmUgc2V0IGlmIGdsb2JhbCBvZmZzZXQgdGFibGUgcmVmZXJlbmNlcyB3ZXJlIGRldGVjdGVkCisrICAgICBpbiB0aGlzIHNlY3Rpb24sIHdoaWNoIGluZGljYXRlIHRvIHRoZSBsaW5rZXIgdGhhdCB0aGUgc2VjdGlvbgorKyAgICAgY29udGFpbnMgUElDIGNvZGUsIGFuZCBtdXN0IGJlIGhhbmRsZWQgc3BlY2lhbGx5IHdoZW4gZG9pbmcgYQorKyAgICAgc3RhdGljIGxpbmsuICAqLworKyNkZWZpbmUgU0VDX0hBU19HT1RfUkVGIDB4ODAwCisrCisrICAvKiBUaGUgc2VjdGlvbiBjb250YWlucyBjb21tb24gc3ltYm9scyAoc3ltYm9scyBtYXkgYmUgZGVmaW5lZAorKyAgICAgbXVsdGlwbGUgdGltZXMsIHRoZSB2YWx1ZSBvZiBhIHN5bWJvbCBpcyB0aGUgYW1vdW50IG9mCisrICAgICBzcGFjZSBpdCByZXF1aXJlcywgYW5kIHRoZSBsYXJnZXN0IHN5bWJvbCB2YWx1ZSBpcyB0aGUgb25lCisrICAgICB1c2VkKS4gIE1vc3QgdGFyZ2V0cyBoYXZlIGV4YWN0bHkgb25lIG9mIHRoZXNlICh3aGljaCB3ZQorKyAgICAgdHJhbnNsYXRlIHRvIGJmZF9jb21fc2VjdGlvbl9wdHIpLCBidXQgRUNPRkYgaGFzIHR3by4gICovCisrI2RlZmluZSBTRUNfSVNfQ09NTU9OIDB4MTAwMAorKworKyAgLyogVGhlIHNlY3Rpb24gY29udGFpbnMgb25seSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICBGb3IKKysgICAgIGV4YW1wbGUsIHRoaXMgaXMgc2V0IGZvciBFTEYgLmRlYnVnIGFuZCAuc3RhYiBzZWN0aW9ucy4KKysgICAgIHN0cmlwIHRlc3RzIHRoaXMgZmxhZyB0byBzZWUgaWYgYSBzZWN0aW9uIGNhbiBiZQorKyAgICAgZGlzY2FyZGVkLiAgKi8KKysjZGVmaW5lIFNFQ19ERUJVR0dJTkcgMHgyMDAwCisrCisrICAvKiBUaGUgY29udGVudHMgb2YgdGhpcyBzZWN0aW9uIGFyZSBoZWxkIGluIG1lbW9yeSBwb2ludGVkIHRvCisrICAgICBieSB0aGUgY29udGVudHMgZmllbGQuICBUaGlzIGlzIGNoZWNrZWQgYnkgYmZkX2dldF9zZWN0aW9uX2NvbnRlbnRzLAorKyAgICAgYW5kIHRoZSBkYXRhIGlzIHJldHJpZXZlZCBmcm9tIG1lbW9yeSBpZiBhcHByb3ByaWF0ZS4gICovCisrI2RlZmluZSBTRUNfSU5fTUVNT1JZIDB4NDAwMAorKworKyAgLyogVGhlIGNvbnRlbnRzIG9mIHRoaXMgc2VjdGlvbiBhcmUgdG8gYmUgZXhjbHVkZWQgYnkgdGhlCisrICAgICBsaW5rZXIgZm9yIGV4ZWN1dGFibGUgYW5kIHNoYXJlZCBvYmplY3RzIHVubGVzcyB0aG9zZQorKyAgICAgb2JqZWN0cyBhcmUgdG8gYmUgZnVydGhlciByZWxvY2F0ZWQuICAqLworKyNkZWZpbmUgU0VDX0VYQ0xVREUgMHg4MDAwCisrCisrICAvKiBUaGUgY29udGVudHMgb2YgdGhpcyBzZWN0aW9uIGFyZSB0byBiZSBzb3J0ZWQgYmFzZWQgb24gdGhlIHN1bSBvZgorKyAgICAgdGhlIHN5bWJvbCBhbmQgYWRkZW5kIHZhbHVlcyBzcGVjaWZpZWQgYnkgdGhlIGFzc29jaWF0ZWQgcmVsb2NhdGlvbgorKyAgICAgZW50cmllcy4gIEVudHJpZXMgd2l0aG91dCBhc3NvY2lhdGVkIHJlbG9jYXRpb24gZW50cmllcyB3aWxsIGJlCisrICAgICBhcHBlbmRlZCB0byB0aGUgZW5kIG9mIHRoZSBzZWN0aW9uIGluIGFuIHVuc3BlY2lmaWVkIG9yZGVyLiAgKi8KKysjZGVmaW5lIFNFQ19TT1JUX0VOVFJJRVMgMHgxMDAwMAorKworKyAgLyogV2hlbiBsaW5raW5nLCBkdXBsaWNhdGUgc2VjdGlvbnMgb2YgdGhlIHNhbWUgbmFtZSBzaG91bGQgYmUKKysgICAgIGRpc2NhcmRlZCwgcmF0aGVyIHRoYW4gYmVpbmcgY29tYmluZWQgaW50byBhIHNpbmdsZSBzZWN0aW9uIGFzCisrICAgICBpcyB1c3VhbGx5IGRvbmUuICBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IGNvbW1vbiBzeW1ib2xzIGFyZQorKyAgICAgaGFuZGxlZC4gIFNlZSBTRUNfTElOS19EVVBMSUNBVEVTIGJlbG93LiAgKi8KKysjZGVmaW5lIFNFQ19MSU5LX09OQ0UgMHgyMDAwMAorKworKyAgLyogSWYgU0VDX0xJTktfT05DRSBpcyBzZXQsIHRoaXMgYml0ZmllbGQgZGVzY3JpYmVzIGhvdyB0aGUgbGlua2VyCisrICAgICBzaG91bGQgaGFuZGxlIGR1cGxpY2F0ZSBzZWN0aW9ucy4gICovCisrI2RlZmluZSBTRUNfTElOS19EVVBMSUNBVEVTIDB4NDAwMDAKKysKKysgIC8qIFRoaXMgdmFsdWUgZm9yIFNFQ19MSU5LX0RVUExJQ0FURVMgbWVhbnMgdGhhdCBkdXBsaWNhdGUKKysgICAgIHNlY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZSBzaG91bGQgc2ltcGx5IGJlIGRpc2NhcmRlZC4gICovCisrI2RlZmluZSBTRUNfTElOS19EVVBMSUNBVEVTX0RJU0NBUkQgMHgwCisrCisrICAvKiBUaGlzIHZhbHVlIGZvciBTRUNfTElOS19EVVBMSUNBVEVTIG1lYW5zIHRoYXQgdGhlIGxpbmtlcgorKyAgICAgc2hvdWxkIHdhcm4gaWYgdGhlcmUgYXJlIGFueSBkdXBsaWNhdGUgc2VjdGlvbnMsIGFsdGhvdWdoCisrICAgICBpdCBzaG91bGQgc3RpbGwgb25seSBsaW5rIG9uZSBjb3B5LiAgKi8KKysjZGVmaW5lIFNFQ19MSU5LX0RVUExJQ0FURVNfT05FX09OTFkgMHg4MDAwMAorKworKyAgLyogVGhpcyB2YWx1ZSBmb3IgU0VDX0xJTktfRFVQTElDQVRFUyBtZWFucyB0aGF0IHRoZSBsaW5rZXIKKysgICAgIHNob3VsZCB3YXJuIGlmIGFueSBkdXBsaWNhdGUgc2VjdGlvbnMgYXJlIGEgZGlmZmVyZW50IHNpemUuICAqLworKyNkZWZpbmUgU0VDX0xJTktfRFVQTElDQVRFU19TQU1FX1NJWkUgMHgxMDAwMDAKKysKKysgIC8qIFRoaXMgdmFsdWUgZm9yIFNFQ19MSU5LX0RVUExJQ0FURVMgbWVhbnMgdGhhdCB0aGUgbGlua2VyCisrICAgICBzaG91bGQgd2FybiBpZiBhbnkgZHVwbGljYXRlIHNlY3Rpb25zIGNvbnRhaW4gZGlmZmVyZW50CisrICAgICBjb250ZW50cy4gICovCisrI2RlZmluZSBTRUNfTElOS19EVVBMSUNBVEVTX1NBTUVfQ09OVEVOVFMgXAorKyAgKFNFQ19MSU5LX0RVUExJQ0FURVNfT05FX09OTFkgfCBTRUNfTElOS19EVVBMSUNBVEVTX1NBTUVfU0laRSkKKysKKysgIC8qIFRoaXMgc2VjdGlvbiB3YXMgY3JlYXRlZCBieSB0aGUgbGlua2VyIGFzIHBhcnQgb2YgZHluYW1pYworKyAgICAgcmVsb2NhdGlvbiBvciBvdGhlciBhcmNhbmUgcHJvY2Vzc2luZy4gIEl0IGlzIHNraXBwZWQgd2hlbgorKyAgICAgZ29pbmcgdGhyb3VnaCB0aGUgZmlyc3QtcGFzcyBvdXRwdXQsIHRydXN0aW5nIHRoYXQgc29tZW9uZQorKyAgICAgZWxzZSB1cCB0aGUgbGluZSB3aWxsIHRha2UgY2FyZSBvZiBpdCBsYXRlci4gICovCisrI2RlZmluZSBTRUNfTElOS0VSX0NSRUFURUQgMHgyMDAwMDAKKysKKysgIC8qIFRoaXMgc2VjdGlvbiBzaG91bGQgbm90IGJlIHN1YmplY3QgdG8gZ2FyYmFnZSBjb2xsZWN0aW9uLgorKyAgICAgQWxzbyBzZXQgdG8gaW5mb3JtIHRoZSBsaW5rZXIgdGhhdCB0aGlzIHNlY3Rpb24gc2hvdWxkIG5vdCBiZQorKyAgICAgbGlzdGVkIGluIHRoZSBsaW5rIG1hcCBhcyBkaXNjYXJkZWQuICAqLworKyNkZWZpbmUgU0VDX0tFRVAgMHg0MDAwMDAKKysKKysgIC8qIFRoaXMgc2VjdGlvbiBjb250YWlucyAic2hvcnQiIGRhdGEsIGFuZCBzaG91bGQgYmUgcGxhY2VkCisrICAgICAibmVhciIgdGhlIEdQLiAgKi8KKysjZGVmaW5lIFNFQ19TTUFMTF9EQVRBIDB4ODAwMDAwCisrCisrICAvKiBBdHRlbXB0IHRvIG1lcmdlIGlkZW50aWNhbCBlbnRpdGllcyBpbiB0aGUgc2VjdGlvbi4KKysgICAgIEVudGl0eSBzaXplIGlzIGdpdmVuIGluIHRoZSBlbnRzaXplIGZpZWxkLiAgKi8KKysjZGVmaW5lIFNFQ19NRVJHRSAweDEwMDAwMDAKKysKKysgIC8qIElmIGdpdmVuIHdpdGggU0VDX01FUkdFLCBlbnRpdGllcyB0byBtZXJnZSBhcmUgemVybyB0ZXJtaW5hdGVkCisrICAgICBzdHJpbmdzIHdoZXJlIGVudHNpemUgc3BlY2lmaWVzIGNoYXJhY3RlciBzaXplIGluc3RlYWQgb2YgZml4ZWQKKysgICAgIHNpemUgZW50cmllcy4gICovCisrI2RlZmluZSBTRUNfU1RSSU5HUyAweDIwMDAwMDAKKysKKysgIC8qIFRoaXMgc2VjdGlvbiBjb250YWlucyBkYXRhIGFib3V0IHNlY3Rpb24gZ3JvdXBzLiAgKi8KKysjZGVmaW5lIFNFQ19HUk9VUCAweDQwMDAwMDAKKysKKysgIC8qIFRoZSBzZWN0aW9uIGlzIGEgQ09GRiBzaGFyZWQgbGlicmFyeSBzZWN0aW9uLiAgVGhpcyBmbGFnIGlzCisrICAgICBvbmx5IGZvciB0aGUgbGlua2VyLiAgSWYgdGhpcyB0eXBlIG9mIHNlY3Rpb24gYXBwZWFycyBpbgorKyAgICAgdGhlIGlucHV0IGZpbGUsIHRoZSBsaW5rZXIgbXVzdCBjb3B5IGl0IHRvIHRoZSBvdXRwdXQgZmlsZQorKyAgICAgd2l0aG91dCBjaGFuZ2luZyB0aGUgdm1hIG9yIHNpemUuICBGSVhNRTogQWx0aG91Z2ggdGhpcworKyAgICAgd2FzIG9yaWdpbmFsbHkgaW50ZW5kZWQgdG8gYmUgZ2VuZXJhbCwgaXQgcmVhbGx5IGlzIENPRkYKKysgICAgIHNwZWNpZmljIChhbmQgdGhlIGZsYWcgd2FzIHJlbmFtZWQgdG8gaW5kaWNhdGUgdGhpcykuICBJdAorKyAgICAgbWlnaHQgYmUgY2xlYW5lciB0byBoYXZlIHNvbWUgbW9yZSBnZW5lcmFsIG1lY2hhbmlzbSB0bworKyAgICAgYWxsb3cgdGhlIGJhY2sgZW5kIHRvIGNvbnRyb2wgd2hhdCB0aGUgbGlua2VyIGRvZXMgd2l0aAorKyAgICAgc2VjdGlvbnMuICAqLworKyNkZWZpbmUgU0VDX0NPRkZfU0hBUkVEX0xJQlJBUlkgMHgxMDAwMDAwMAorKworKyAgLyogVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGRhdGEgd2hpY2ggbWF5IGJlIHNoYXJlZCB3aXRoIG90aGVyCisrICAgICBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cy4gVGhpcyBpcyBmb3IgQ09GRiBvbmx5LiAgKi8KKysjZGVmaW5lIFNFQ19DT0ZGX1NIQVJFRCAweDIwMDAwMDAwCisrCisrICAvKiBXaGVuIGEgc2VjdGlvbiB3aXRoIHRoaXMgZmxhZyBpcyBiZWluZyBsaW5rZWQsIHRoZW4gaWYgdGhlIHNpemUgb2YKKysgICAgIHRoZSBpbnB1dCBzZWN0aW9uIGlzIGxlc3MgdGhhbiBhIHBhZ2UsIGl0IHNob3VsZCBub3QgY3Jvc3MgYSBwYWdlCisrICAgICBib3VuZGFyeS4gIElmIHRoZSBzaXplIG9mIHRoZSBpbnB1dCBzZWN0aW9uIGlzIG9uZSBwYWdlIG9yIG1vcmUsCisrICAgICBpdCBzaG91bGQgYmUgYWxpZ25lZCBvbiBhIHBhZ2UgYm91bmRhcnkuICBUaGlzIGlzIGZvciBUSQorKyAgICAgVE1TMzIwQzU0WCBvbmx5LiAgKi8KKysjZGVmaW5lIFNFQ19USUM1NFhfQkxPQ0sgMHg0MDAwMDAwMAorKworKyAgLyogQ29uZGl0aW9uYWxseSBsaW5rIHRoaXMgc2VjdGlvbjsgZG8gbm90IGxpbmsgaWYgdGhlcmUgYXJlIG5vCisrICAgICByZWZlcmVuY2VzIGZvdW5kIHRvIGFueSBzeW1ib2wgaW4gdGhlIHNlY3Rpb24uICBUaGlzIGlzIGZvciBUSQorKyAgICAgVE1TMzIwQzU0WCBvbmx5LiAgKi8KKysjZGVmaW5lIFNFQ19USUM1NFhfQ0xJTksgMHg4MDAwMDAwMAorKworKyAgLyogIEVuZCBvZiBzZWN0aW9uIGZsYWdzLiAgKi8KKysKKysgIC8qIFNvbWUgaW50ZXJuYWwgcGFja2VkIGJvb2xlYW4gZmllbGRzLiAgKi8KKysKKysgIC8qIFNlZSB0aGUgdm1hIGZpZWxkLiAgKi8KKysgIHVuc2lnbmVkIGludCB1c2VyX3NldF92bWEgOiAxOworKworKyAgLyogQSBtYXJrIGZsYWcgdXNlZCBieSBzb21lIG9mIHRoZSBsaW5rZXIgYmFja2VuZHMuICAqLworKyAgdW5zaWduZWQgaW50IGxpbmtlcl9tYXJrIDogMTsKKysKKysgIC8qIEFub3RoZXIgbWFyayBmbGFnIHVzZWQgYnkgc29tZSBvZiB0aGUgbGlua2VyIGJhY2tlbmRzLiAgU2V0IGZvcgorKyAgICAgb3V0cHV0IHNlY3Rpb25zIHRoYXQgaGF2ZSBhbiBpbnB1dCBzZWN0aW9uLiAgKi8KKysgIHVuc2lnbmVkIGludCBsaW5rZXJfaGFzX2lucHV0IDogMTsKKysKKysgIC8qIE1hcmsgZmxhZ3MgdXNlZCBieSBzb21lIGxpbmtlciBiYWNrZW5kcyBmb3IgZ2FyYmFnZSBjb2xsZWN0aW9uLiAgKi8KKysgIHVuc2lnbmVkIGludCBnY19tYXJrIDogMTsKKysgIHVuc2lnbmVkIGludCBnY19tYXJrX2Zyb21fZWggOiAxOworKworKyAgLyogVGhlIGZvbGxvd2luZyBmbGFncyBhcmUgdXNlZCBieSB0aGUgRUxGIGxpbmtlci4gKi8KKysKKysgIC8qIE1hcmsgc2VjdGlvbnMgd2hpY2ggaGF2ZSBiZWVuIGFsbG9jYXRlZCB0byBzZWdtZW50cy4gICovCisrICB1bnNpZ25lZCBpbnQgc2VnbWVudF9tYXJrIDogMTsKKysKKysgIC8qIFR5cGUgb2Ygc2VjX2luZm8gaW5mb3JtYXRpb24uICAqLworKyAgdW5zaWduZWQgaW50IHNlY19pbmZvX3R5cGU6MzsKKysjZGVmaW5lIEVMRl9JTkZPX1RZUEVfTk9ORSAgICAgIDAKKysjZGVmaW5lIEVMRl9JTkZPX1RZUEVfU1RBQlMgICAgIDEKKysjZGVmaW5lIEVMRl9JTkZPX1RZUEVfTUVSR0UgICAgIDIKKysjZGVmaW5lIEVMRl9JTkZPX1RZUEVfRUhfRlJBTUUgIDMKKysjZGVmaW5lIEVMRl9JTkZPX1RZUEVfSlVTVF9TWU1TIDQKKysKKysgIC8qIE5vbnplcm8gaWYgdGhpcyBzZWN0aW9uIHVzZXMgUkVMQSByZWxvY2F0aW9ucywgcmF0aGVyIHRoYW4gUkVMLiAgKi8KKysgIHVuc2lnbmVkIGludCB1c2VfcmVsYV9wOjE7CisrCisrICAvKiBCaXRzIHVzZWQgYnkgdmFyaW91cyBiYWNrZW5kcy4gIFRoZSBnZW5lcmljIGNvZGUgZG9lc24ndCB0b3VjaAorKyAgICAgdGhlc2UgZmllbGRzLiAgKi8KKysKKysgIC8qIE5vbnplcm8gaWYgdGhpcyBzZWN0aW9uIGhhcyBUTFMgcmVsYXRlZCByZWxvY2F0aW9ucy4gICovCisrICB1bnNpZ25lZCBpbnQgaGFzX3Rsc19yZWxvYzoxOworKworKyAgLyogTm9uemVybyBpZiB0aGlzIHNlY3Rpb24gaGFzIGEgZ3AgcmVsb2MuICAqLworKyAgdW5zaWduZWQgaW50IGhhc19ncF9yZWxvYzoxOworKworKyAgLyogTm9uemVybyBpZiB0aGlzIHNlY3Rpb24gbmVlZHMgdGhlIHJlbGF4IGZpbmFsaXplIHBhc3MuICAqLworKyAgdW5zaWduZWQgaW50IG5lZWRfZmluYWxpemVfcmVsYXg6MTsKKysKKysgIC8qIFdoZXRoZXIgcmVsb2NhdGlvbnMgaGF2ZSBiZWVuIHByb2Nlc3NlZC4gICovCisrICB1bnNpZ25lZCBpbnQgcmVsb2NfZG9uZSA6IDE7CisrCisrICAvKiBFbmQgb2YgaW50ZXJuYWwgcGFja2VkIGJvb2xlYW4gZmllbGRzLiAgKi8KKysKKysgIC8qICBUaGUgdmlydHVhbCBtZW1vcnkgYWRkcmVzcyBvZiB0aGUgc2VjdGlvbiAtIHdoZXJlIGl0IHdpbGwgYmUKKysgICAgICBhdCBydW4gdGltZS4gIFRoZSBzeW1ib2xzIGFyZSByZWxvY2F0ZWQgYWdhaW5zdCB0aGlzLiAgVGhlCisrICAgICAgdXNlcl9zZXRfdm1hIGZsYWcgaXMgbWFpbnRhaW5lZCBieSBiZmQ7IGlmIGl0J3Mgbm90IHNldCwgdGhlCisrICAgICAgYmFja2VuZCBjYW4gYXNzaWduIGFkZHJlc3NlcyAoZm9yIGV4YW1wbGUsIGluIDw8YS5vdXQ+Piwgd2hlcmUKKysgICAgICB0aGUgZGVmYXVsdCBhZGRyZXNzIGZvciA8PC5kYXRhPj4gaXMgZGVwZW5kZW50IG9uIHRoZSBzcGVjaWZpYworKyAgICAgIHRhcmdldCBhbmQgdmFyaW91cyBmbGFncykuICAqLworKyAgYmZkX3ZtYSB2bWE7CisrCisrICAvKiAgVGhlIGxvYWQgYWRkcmVzcyBvZiB0aGUgc2VjdGlvbiAtIHdoZXJlIGl0IHdvdWxkIGJlIGluIGEKKysgICAgICByb20gaW1hZ2U7IHJlYWxseSBvbmx5IHVzZWQgZm9yIHdyaXRpbmcgc2VjdGlvbiBoZWFkZXIKKysgICAgICBpbmZvcm1hdGlvbi4gICovCisrICBiZmRfdm1hIGxtYTsKKysKKysgIC8qIFRoZSBzaXplIG9mIHRoZSBzZWN0aW9uIGluIG9jdGV0cywgYXMgaXQgd2lsbCBiZSBvdXRwdXQuCisrICAgICBDb250YWlucyBhIHZhbHVlIGV2ZW4gaWYgdGhlIHNlY3Rpb24gaGFzIG5vIGNvbnRlbnRzIChlLmcuLCB0aGUKKysgICAgIHNpemUgb2YgPDwuYnNzPj4pLiAgKi8KKysgIGJmZF9zaXplX3R5cGUgc2l6ZTsKKysKKysgIC8qIEZvciBpbnB1dCBzZWN0aW9ucywgdGhlIG9yaWdpbmFsIHNpemUgb24gZGlzayBvZiB0aGUgc2VjdGlvbiwgaW4KKysgICAgIG9jdGV0cy4gIFRoaXMgZmllbGQgaXMgdXNlZCBieSB0aGUgbGlua2VyIHJlbGF4YXRpb24gY29kZS4gIEl0IGlzCisrICAgICBjdXJyZW50bHkgb25seSBzZXQgZm9yIHNlY3Rpb25zIHdoZXJlIHRoZSBsaW5rZXIgcmVsYXhhdGlvbiBzY2hlbWUKKysgICAgIGRvZXNuJ3QgY2FjaGUgYWx0ZXJlZCBzZWN0aW9uIGFuZCByZWxvYyBjb250ZW50cyAoc3RhYnMsIGVoX2ZyYW1lLAorKyAgICAgU0VDX01FUkdFLCBzb21lIGNvZmYgcmVsYXhpbmcgdGFyZ2V0cyksIGFuZCB0aHVzIHRoZSBvcmlnaW5hbCBzaXplCisrICAgICBuZWVkcyB0byBiZSBrZXB0IHRvIHJlYWQgdGhlIHNlY3Rpb24gbXVsdGlwbGUgdGltZXMuCisrICAgICBGb3Igb3V0cHV0IHNlY3Rpb25zLCByYXdzaXplIGhvbGRzIHRoZSBzZWN0aW9uIHNpemUgY2FsY3VsYXRlZCBvbgorKyAgICAgYSBwcmV2aW91cyBsaW5rZXIgcmVsYXhhdGlvbiBwYXNzLiAgKi8KKysgIGJmZF9zaXplX3R5cGUgcmF3c2l6ZTsKKysKKysgIC8qIElmIHRoaXMgc2VjdGlvbiBpcyBnb2luZyB0byBiZSBvdXRwdXQsIHRoZW4gdGhpcyB2YWx1ZSBpcyB0aGUKKysgICAgIG9mZnNldCBpbiAqYnl0ZXMqIGludG8gdGhlIG91dHB1dCBzZWN0aW9uIG9mIHRoZSBmaXJzdCBieXRlIGluIHRoZQorKyAgICAgaW5wdXQgc2VjdGlvbiAoYnl0ZSA9PT4gc21hbGxlc3QgYWRkcmVzc2FibGUgdW5pdCBvbiB0aGUKKysgICAgIHRhcmdldCkuICBJbiBtb3N0IGNhc2VzLCBpZiB0aGlzIHdhcyBnb2luZyB0byBzdGFydCBhdCB0aGUKKysgICAgIDEwMHRoIG9jdGV0ICg4LWJpdCBxdWFudGl0eSkgaW4gdGhlIG91dHB1dCBzZWN0aW9uLCB0aGlzIHZhbHVlCisrICAgICB3b3VsZCBiZSAxMDAuICBIb3dldmVyLCBpZiB0aGUgdGFyZ2V0IGJ5dGUgc2l6ZSBpcyAxNiBiaXRzCisrICAgICAoYmZkX29jdGV0c19wZXJfYnl0ZSBpcyAiMiIpLCB0aGlzIHZhbHVlIHdvdWxkIGJlIDUwLiAgKi8KKysgIGJmZF92bWEgb3V0cHV0X29mZnNldDsKKysKKysgIC8qIFRoZSBvdXRwdXQgc2VjdGlvbiB0aHJvdWdoIHdoaWNoIHRvIG1hcCBvbiBvdXRwdXQuICAqLworKyAgc3RydWN0IGJmZF9zZWN0aW9uICpvdXRwdXRfc2VjdGlvbjsKKysKKysgIC8qIFRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgb2YgdGhlIHNlY3Rpb24sIGFzIGFuIGV4cG9uZW50IG9mIDIgLQorKyAgICAgZS5nLiwgMyBhbGlnbnMgdG8gMl4zIChvciA4KS4gICovCisrICB1bnNpZ25lZCBpbnQgYWxpZ25tZW50X3Bvd2VyOworKworKyAgLyogSWYgYW4gaW5wdXQgc2VjdGlvbiwgYSBwb2ludGVyIHRvIGEgdmVjdG9yIG9mIHJlbG9jYXRpb24KKysgICAgIHJlY29yZHMgZm9yIHRoZSBkYXRhIGluIHRoaXMgc2VjdGlvbi4gICovCisrICBzdHJ1Y3QgcmVsb2NfY2FjaGVfZW50cnkgKnJlbG9jYXRpb247CisrCisrICAvKiBJZiBhbiBvdXRwdXQgc2VjdGlvbiwgYSBwb2ludGVyIHRvIGEgdmVjdG9yIG9mIHBvaW50ZXJzIHRvCisrICAgICByZWxvY2F0aW9uIHJlY29yZHMgZm9yIHRoZSBkYXRhIGluIHRoaXMgc2VjdGlvbi4gICovCisrICBzdHJ1Y3QgcmVsb2NfY2FjaGVfZW50cnkgKipvcmVsb2NhdGlvbjsKKysKKysgIC8qIFRoZSBudW1iZXIgb2YgcmVsb2NhdGlvbiByZWNvcmRzIGluIG9uZSBvZiB0aGUgYWJvdmUuICAqLworKyAgdW5zaWduZWQgcmVsb2NfY291bnQ7CisrCisrICAvKiBJbmZvcm1hdGlvbiBiZWxvdyBpcyBiYWNrIGVuZCBzcGVjaWZpYyAtIGFuZCBub3QgYWx3YXlzIHVzZWQKKysgICAgIG9yIHVwZGF0ZWQuICAqLworKworKyAgLyogRmlsZSBwb3NpdGlvbiBvZiBzZWN0aW9uIGRhdGEuICAqLworKyAgZmlsZV9wdHIgZmlsZXBvczsKKysKKysgIC8qIEZpbGUgcG9zaXRpb24gb2YgcmVsb2NhdGlvbiBpbmZvLiAgKi8KKysgIGZpbGVfcHRyIHJlbF9maWxlcG9zOworKworKyAgLyogRmlsZSBwb3NpdGlvbiBvZiBsaW5lIGRhdGEuICAqLworKyAgZmlsZV9wdHIgbGluZV9maWxlcG9zOworKworKyAgLyogUG9pbnRlciB0byBkYXRhIGZvciBhcHBsaWNhdGlvbnMuICAqLworKyAgdm9pZCAqdXNlcmRhdGE7CisrCisrICAvKiBJZiB0aGUgU0VDX0lOX01FTU9SWSBmbGFnIGlzIHNldCwgdGhpcyBwb2ludHMgdG8gdGhlIGFjdHVhbAorKyAgICAgY29udGVudHMuICAqLworKyAgdW5zaWduZWQgY2hhciAqY29udGVudHM7CisrCisrICAvKiBBdHRhY2hlZCBsaW5lIG51bWJlciBpbmZvcm1hdGlvbi4gICovCisrICBhbGVudCAqbGluZW5vOworKworKyAgLyogTnVtYmVyIG9mIGxpbmUgbnVtYmVyIHJlY29yZHMuICAqLworKyAgdW5zaWduZWQgaW50IGxpbmVub19jb3VudDsKKysKKysgIC8qIEVudGl0eSBzaXplIGZvciBtZXJnaW5nIHB1cnBvc2VzLiAgKi8KKysgIHVuc2lnbmVkIGludCBlbnRzaXplOworKworKyAgLyogUG9pbnRzIHRvIHRoZSBrZXB0IHNlY3Rpb24gaWYgdGhpcyBzZWN0aW9uIGlzIGEgbGluay1vbmNlIHNlY3Rpb24sCisrICAgICBhbmQgaXMgZGlzY2FyZGVkLiAgKi8KKysgIHN0cnVjdCBiZmRfc2VjdGlvbiAqa2VwdF9zZWN0aW9uOworKworKyAgLyogV2hlbiBhIHNlY3Rpb24gaXMgYmVpbmcgb3V0cHV0LCB0aGlzIHZhbHVlIGNoYW5nZXMgYXMgbW9yZQorKyAgICAgbGluZW51bWJlcnMgYXJlIHdyaXR0ZW4gb3V0LiAgKi8KKysgIGZpbGVfcHRyIG1vdmluZ19saW5lX2ZpbGVwb3M7CisrCisrICAvKiBXaGF0IHRoZSBzZWN0aW9uIG51bWJlciBpcyBpbiB0aGUgdGFyZ2V0IHdvcmxkLiAgKi8KKysgIGludCB0YXJnZXRfaW5kZXg7CisrCisrICB2b2lkICp1c2VkX2J5X2JmZDsKKysKKysgIC8qIElmIHRoaXMgaXMgYSBjb25zdHJ1Y3RvciBzZWN0aW9uIHRoZW4gaGVyZSBpcyBhIGxpc3Qgb2YgdGhlCisrICAgICByZWxvY2F0aW9ucyBjcmVhdGVkIHRvIHJlbG9jYXRlIGl0ZW1zIHdpdGhpbiBpdC4gICovCisrICBzdHJ1Y3QgcmVsZW50X2NoYWluICpjb25zdHJ1Y3Rvcl9jaGFpbjsKKysKKysgIC8qIFRoZSBCRkQgd2hpY2ggb3ducyB0aGUgc2VjdGlvbi4gICovCisrICBiZmQgKm93bmVyOworKworKyAgLyogQSBzeW1ib2wgd2hpY2ggcG9pbnRzIGF0IHRoaXMgc2VjdGlvbiBvbmx5LiAgKi8KKysgIHN0cnVjdCBiZmRfc3ltYm9sICpzeW1ib2w7CisrICBzdHJ1Y3QgYmZkX3N5bWJvbCAqKnN5bWJvbF9wdHJfcHRyOworKworKyAgLyogRWFybHkgaW4gdGhlIGxpbmsgcHJvY2VzcywgbWFwX2hlYWQgYW5kIG1hcF90YWlsIGFyZSB1c2VkIHRvIGJ1aWxkCisrICAgICBhIGxpc3Qgb2YgaW5wdXQgc2VjdGlvbnMgYXR0YWNoZWQgdG8gYW4gb3V0cHV0IHNlY3Rpb24uICBMYXRlciwKKysgICAgIG91dHB1dCBzZWN0aW9ucyB1c2UgdGhlc2UgZmllbGRzIGZvciBhIGxpc3Qgb2YgYmZkX2xpbmtfb3JkZXIKKysgICAgIHN0cnVjdHMuICAqLworKyAgdW5pb24geworKyAgICBzdHJ1Y3QgYmZkX2xpbmtfb3JkZXIgKmxpbmtfb3JkZXI7CisrICAgIHN0cnVjdCBiZmRfc2VjdGlvbiAqczsKKysgIH0gbWFwX2hlYWQsIG1hcF90YWlsOworK30gYXNlY3Rpb247CisrCisrLyogVGhlc2Ugc2VjdGlvbnMgYXJlIGdsb2JhbCwgYW5kIGFyZSBtYW5hZ2VkIGJ5IEJGRC4gIFRoZSBhcHBsaWNhdGlvbgorKyAgIGFuZCB0YXJnZXQgYmFjayBlbmQgYXJlIG5vdCBwZXJtaXR0ZWQgdG8gY2hhbmdlIHRoZSB2YWx1ZXMgaW4KKysgICB0aGVzZSBzZWN0aW9ucy4gIE5ldyBjb2RlIHNob3VsZCB1c2UgdGhlIHNlY3Rpb25fcHRyIG1hY3JvcyByYXRoZXIKKysgICB0aGFuIHJlZmVycmluZyBkaXJlY3RseSB0byB0aGUgY29uc3Qgc2VjdGlvbnMuICBUaGUgY29uc3Qgc2VjdGlvbnMKKysgICBtYXkgZXZlbnR1YWxseSB2YW5pc2guICAqLworKyNkZWZpbmUgQkZEX0FCU19TRUNUSU9OX05BTUUgIipBQlMqIgorKyNkZWZpbmUgQkZEX1VORF9TRUNUSU9OX05BTUUgIipVTkQqIgorKyNkZWZpbmUgQkZEX0NPTV9TRUNUSU9OX05BTUUgIipDT00qIgorKyNkZWZpbmUgQkZEX0lORF9TRUNUSU9OX05BTUUgIipJTkQqIgorKworKy8qIFRoZSBhYnNvbHV0ZSBzZWN0aW9uLiAgKi8KKytleHRlcm4gYXNlY3Rpb24gYmZkX2Fic19zZWN0aW9uOworKyNkZWZpbmUgYmZkX2Fic19zZWN0aW9uX3B0ciAoKGFzZWN0aW9uICopICZiZmRfYWJzX3NlY3Rpb24pCisrI2RlZmluZSBiZmRfaXNfYWJzX3NlY3Rpb24oc2VjKSAoKHNlYykgPT0gYmZkX2Fic19zZWN0aW9uX3B0cikKKysvKiBQb2ludGVyIHRvIHRoZSB1bmRlZmluZWQgc2VjdGlvbi4gICovCisrZXh0ZXJuIGFzZWN0aW9uIGJmZF91bmRfc2VjdGlvbjsKKysjZGVmaW5lIGJmZF91bmRfc2VjdGlvbl9wdHIgKChhc2VjdGlvbiAqKSAmYmZkX3VuZF9zZWN0aW9uKQorKyNkZWZpbmUgYmZkX2lzX3VuZF9zZWN0aW9uKHNlYykgKChzZWMpID09IGJmZF91bmRfc2VjdGlvbl9wdHIpCisrLyogUG9pbnRlciB0byB0aGUgY29tbW9uIHNlY3Rpb24uICAqLworK2V4dGVybiBhc2VjdGlvbiBiZmRfY29tX3NlY3Rpb247CisrI2RlZmluZSBiZmRfY29tX3NlY3Rpb25fcHRyICgoYXNlY3Rpb24gKikgJmJmZF9jb21fc2VjdGlvbikKKysvKiBQb2ludGVyIHRvIHRoZSBpbmRpcmVjdCBzZWN0aW9uLiAgKi8KKytleHRlcm4gYXNlY3Rpb24gYmZkX2luZF9zZWN0aW9uOworKyNkZWZpbmUgYmZkX2luZF9zZWN0aW9uX3B0ciAoKGFzZWN0aW9uICopICZiZmRfaW5kX3NlY3Rpb24pCisrI2RlZmluZSBiZmRfaXNfaW5kX3NlY3Rpb24oc2VjKSAoKHNlYykgPT0gYmZkX2luZF9zZWN0aW9uX3B0cikKKysKKysjZGVmaW5lIGJmZF9pc19jb25zdF9zZWN0aW9uKFNFQykgICAgICAgICAgICAgIFwKKysgKCAgICgoU0VDKSA9PSBiZmRfYWJzX3NlY3Rpb25fcHRyKSAgICAgICAgICAgIFwKKysgIHx8ICgoU0VDKSA9PSBiZmRfdW5kX3NlY3Rpb25fcHRyKSAgICAgICAgICAgIFwKKysgIHx8ICgoU0VDKSA9PSBiZmRfY29tX3NlY3Rpb25fcHRyKSAgICAgICAgICAgIFwKKysgIHx8ICgoU0VDKSA9PSBiZmRfaW5kX3NlY3Rpb25fcHRyKSkKKysKKysvKiBNYWNyb3MgdG8gaGFuZGxlIGluc2VydGlvbiBhbmQgZGVsZXRpb24gb2YgYSBiZmQncyBzZWN0aW9ucy4gIFRoZXNlCisrICAgb25seSBoYW5kbGUgdGhlIGxpc3QgcG9pbnRlcnMsIGllLiBkbyBub3QgYWRqdXN0IHNlY3Rpb25fY291bnQsCisrICAgdGFyZ2V0X2luZGV4IGV0Yy4gICovCisrI2RlZmluZSBiZmRfc2VjdGlvbl9saXN0X3JlbW92ZShBQkZELCBTKSBcCisrICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGFzZWN0aW9uICpfcyA9IFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgYXNlY3Rpb24gKl9uZXh0ID0gX3MtPm5leHQ7ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBhc2VjdGlvbiAqX3ByZXYgPSBfcy0+cHJldjsgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGlmIChfcHJldikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfcHJldi0+bmV4dCA9IF9uZXh0OyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgKEFCRkQpLT5zZWN0aW9ucyA9IF9uZXh0OyAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgaWYgKF9uZXh0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9uZXh0LT5wcmV2ID0gX3ByZXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAoQUJGRCktPnNlY3Rpb25fbGFzdCA9IF9wcmV2OyAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgd2hpbGUgKDApCisrI2RlZmluZSBiZmRfc2VjdGlvbl9saXN0X2FwcGVuZChBQkZELCBTKSBcCisrICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGFzZWN0aW9uICpfcyA9IFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgYmZkICpfYWJmZCA9IEFCRkQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBfcy0+bmV4dCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGlmIChfYWJmZC0+c2VjdGlvbl9sYXN0KSAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX3MtPnByZXYgPSBfYWJmZC0+c2VjdGlvbl9sYXN0OyAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfYWJmZC0+c2VjdGlvbl9sYXN0LT5uZXh0ID0gX3M7ICAgICAgICAgICAgICBcCisrICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9zLT5wcmV2ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX2FiZmQtPnNlY3Rpb25zID0gX3M7ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgX2FiZmQtPnNlY3Rpb25fbGFzdCA9IF9zOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgd2hpbGUgKDApCisrI2RlZmluZSBiZmRfc2VjdGlvbl9saXN0X3ByZXBlbmQoQUJGRCwgUykgXAorKyAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBhc2VjdGlvbiAqX3MgPSBTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGJmZCAqX2FiZmQgPSBBQkZEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgX3MtPnByZXYgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBpZiAoX2FiZmQtPnNlY3Rpb25zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9zLT5uZXh0ID0gX2FiZmQtPnNlY3Rpb25zOyAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX2FiZmQtPnNlY3Rpb25zLT5wcmV2ID0gX3M7ICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfcy0+bmV4dCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9hYmZkLT5zZWN0aW9uX2xhc3QgPSBfczsgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIF9hYmZkLT5zZWN0aW9ucyA9IF9zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHdoaWxlICgwKQorKyNkZWZpbmUgYmZkX3NlY3Rpb25fbGlzdF9pbnNlcnRfYWZ0ZXIoQUJGRCwgQSwgUykgXAorKyAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBhc2VjdGlvbiAqX2EgPSBBOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGFzZWN0aW9uICpfcyA9IFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgYXNlY3Rpb24gKl9uZXh0ID0gX2EtPm5leHQ7ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBfcy0+bmV4dCA9IF9uZXh0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIF9zLT5wcmV2ID0gX2E7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgX2EtPm5leHQgPSBfczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBpZiAoX25leHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX25leHQtPnByZXYgPSBfczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIChBQkZEKS0+c2VjdGlvbl9sYXN0ID0gX3M7ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB3aGlsZSAoMCkKKysjZGVmaW5lIGJmZF9zZWN0aW9uX2xpc3RfaW5zZXJ0X2JlZm9yZShBQkZELCBCLCBTKSBcCisrICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGFzZWN0aW9uICpfYiA9IEI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgYXNlY3Rpb24gKl9zID0gUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBhc2VjdGlvbiAqX3ByZXYgPSBfYi0+cHJldjsgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIF9zLT5wcmV2ID0gX3ByZXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgX3MtPm5leHQgPSBfYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBfYi0+cHJldiA9IF9zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGlmIChfcHJldikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfcHJldi0+bmV4dCA9IF9zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgKEFCRkQpLT5zZWN0aW9ucyA9IF9zOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHdoaWxlICgwKQorKyNkZWZpbmUgYmZkX3NlY3Rpb25fcmVtb3ZlZF9mcm9tX2xpc3QoQUJGRCwgUykgXAorKyAgKChTKS0+bmV4dCA9PSBOVUxMID8gKEFCRkQpLT5zZWN0aW9uX2xhc3QgIT0gKFMpIDogKFMpLT5uZXh0LT5wcmV2ICE9IChTKSkKKysKKysjZGVmaW5lIEJGRF9GQUtFX1NFQ1RJT04oU0VDLCBGTEFHUywgU1lNLCBOQU1FLCBJRFgpICAgICAgICAgICAgICAgICAgIFwKKysgIC8qIG5hbWUsIGlkLCAgaW5kZXgsIG5leHQsIHByZXYsIGZsYWdzLCB1c2VyX3NldF92bWEsICAgICAgICAgICAgKi8gIFwKKysgIHsgTkFNRSwgIElEWCwgMCwgICAgIE5VTEwsIE5VTEwsIEZMQUdTLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIC8qIGxpbmtlcl9tYXJrLCBsaW5rZXJfaGFzX2lucHV0LCBnY19tYXJrLCBnY19tYXJrX2Zyb21fZWgsICAgICAgKi8gIFwKKysgICAgIDAsICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAxLCAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIC8qIHNlZ21lbnRfbWFyaywgc2VjX2luZm9fdHlwZSwgdXNlX3JlbGFfcCwgaGFzX3Rsc19yZWxvYywgICAgICAgKi8gIFwKKysgICAgIDAsICAgICAgICAgICAgMCwgICAgICAgICAgICAgMCwgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIC8qIGhhc19ncF9yZWxvYywgbmVlZF9maW5hbGl6ZV9yZWxheCwgcmVsb2NfZG9uZSwgICAgICAgICAgICAgICAgKi8gIFwKKysgICAgIDAsICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIC8qIHZtYSwgbG1hLCBzaXplLCByYXdzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gIFwKKysgICAgIDAsICAgMCwgICAwLCAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIC8qIG91dHB1dF9vZmZzZXQsIG91dHB1dF9zZWN0aW9uLCAgICAgICAgICAgICAgYWxpZ25tZW50X3Bvd2VyLCAgKi8gIFwKKysgICAgIDAsICAgICAgICAgICAgIChzdHJ1Y3QgYmZkX3NlY3Rpb24gKikgJlNFQywgMCwgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIC8qIHJlbG9jYXRpb24sIG9yZWxvY2F0aW9uLCByZWxvY19jb3VudCwgZmlsZXBvcywgcmVsX2ZpbGVwb3MsICAgKi8gIFwKKysgICAgIE5VTEwsICAgICAgIE5VTEwsICAgICAgICAwLCAgICAgICAgICAgMCwgICAgICAgMCwgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIC8qIGxpbmVfZmlsZXBvcywgdXNlcmRhdGEsIGNvbnRlbnRzLCBsaW5lbm8sIGxpbmVub19jb3VudCwgICAgICAgKi8gIFwKKysgICAgIDAsICAgICAgICAgICAgTlVMTCwgICAgIE5VTEwsICAgICBOVUxMLCAgIDAsICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIC8qIGVudHNpemUsIGtlcHRfc2VjdGlvbiwgbW92aW5nX2xpbmVfZmlsZXBvcywgICAgICAgICAgICAgICAgICAgICovIFwKKysgICAgIDAsICAgICAgIE5VTEwsICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIC8qIHRhcmdldF9pbmRleCwgdXNlZF9ieV9iZmQsIGNvbnN0cnVjdG9yX2NoYWluLCBvd25lciwgICAgICAgICAgKi8gIFwKKysgICAgIDAsICAgICAgICAgICAgTlVMTCwgICAgICAgIE5VTEwsICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIC8qIHN5bWJvbCwgICAgICAgICAgICAgICAgICAgIHN5bWJvbF9wdHJfcHRyLCAgICAgICAgICAgICAgICAgICAgKi8gIFwKKysgICAgIChzdHJ1Y3QgYmZkX3N5bWJvbCAqKSBTWU0sICZTRUMuc3ltYm9sLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIC8qIG1hcF9oZWFkLCBtYXBfdGFpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gIFwKKysgICAgIHsgTlVMTCB9LCB7IE5VTEwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfQorKworK3ZvaWQgYmZkX3NlY3Rpb25fbGlzdF9jbGVhciAoYmZkICopOworKworK2FzZWN0aW9uICpiZmRfZ2V0X3NlY3Rpb25fYnlfbmFtZSAoYmZkICphYmZkLCBjb25zdCBjaGFyICpuYW1lKTsKKysKKythc2VjdGlvbiAqYmZkX2dldF9zZWN0aW9uX2J5X25hbWVfaWYKKysgICAoYmZkICphYmZkLAorKyAgICBjb25zdCBjaGFyICpuYW1lLAorKyAgICBiZmRfYm9vbGVhbiAoKmZ1bmMpIChiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWN0LCB2b2lkICpvYmopLAorKyAgICB2b2lkICpvYmopOworKworK2NoYXIgKmJmZF9nZXRfdW5pcXVlX3NlY3Rpb25fbmFtZQorKyAgIChiZmQgKmFiZmQsIGNvbnN0IGNoYXIgKnRlbXBsYXQsIGludCAqY291bnQpOworKworK2FzZWN0aW9uICpiZmRfbWFrZV9zZWN0aW9uX29sZF93YXkgKGJmZCAqYWJmZCwgY29uc3QgY2hhciAqbmFtZSk7CisrCisrYXNlY3Rpb24gKmJmZF9tYWtlX3NlY3Rpb25fYW55d2F5X3dpdGhfZmxhZ3MKKysgICAoYmZkICphYmZkLCBjb25zdCBjaGFyICpuYW1lLCBmbGFnd29yZCBmbGFncyk7CisrCisrYXNlY3Rpb24gKmJmZF9tYWtlX3NlY3Rpb25fYW55d2F5IChiZmQgKmFiZmQsIGNvbnN0IGNoYXIgKm5hbWUpOworKworK2FzZWN0aW9uICpiZmRfbWFrZV9zZWN0aW9uX3dpdGhfZmxhZ3MKKysgICAoYmZkICosIGNvbnN0IGNoYXIgKm5hbWUsIGZsYWd3b3JkIGZsYWdzKTsKKysKKythc2VjdGlvbiAqYmZkX21ha2Vfc2VjdGlvbiAoYmZkICosIGNvbnN0IGNoYXIgKm5hbWUpOworKworK2JmZF9ib29sZWFuIGJmZF9zZXRfc2VjdGlvbl9mbGFncworKyAgIChiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWMsIGZsYWd3b3JkIGZsYWdzKTsKKysKKyt2b2lkIGJmZF9tYXBfb3Zlcl9zZWN0aW9ucworKyAgIChiZmQgKmFiZmQsCisrICAgIHZvaWQgKCpmdW5jKSAoYmZkICphYmZkLCBhc2VjdGlvbiAqc2VjdCwgdm9pZCAqb2JqKSwKKysgICAgdm9pZCAqb2JqKTsKKysKKythc2VjdGlvbiAqYmZkX3NlY3Rpb25zX2ZpbmRfaWYKKysgICAoYmZkICphYmZkLAorKyAgICBiZmRfYm9vbGVhbiAoKm9wZXJhdGlvbikgKGJmZCAqYWJmZCwgYXNlY3Rpb24gKnNlY3QsIHZvaWQgKm9iaiksCisrICAgIHZvaWQgKm9iaik7CisrCisrYmZkX2Jvb2xlYW4gYmZkX3NldF9zZWN0aW9uX3NpemUKKysgICAoYmZkICphYmZkLCBhc2VjdGlvbiAqc2VjLCBiZmRfc2l6ZV90eXBlIHZhbCk7CisrCisrYmZkX2Jvb2xlYW4gYmZkX3NldF9zZWN0aW9uX2NvbnRlbnRzCisrICAgKGJmZCAqYWJmZCwgYXNlY3Rpb24gKnNlY3Rpb24sIGNvbnN0IHZvaWQgKmRhdGEsCisrICAgIGZpbGVfcHRyIG9mZnNldCwgYmZkX3NpemVfdHlwZSBjb3VudCk7CisrCisrYmZkX2Jvb2xlYW4gYmZkX2dldF9zZWN0aW9uX2NvbnRlbnRzCisrICAgKGJmZCAqYWJmZCwgYXNlY3Rpb24gKnNlY3Rpb24sIHZvaWQgKmxvY2F0aW9uLCBmaWxlX3B0ciBvZmZzZXQsCisrICAgIGJmZF9zaXplX3R5cGUgY291bnQpOworKworK2JmZF9ib29sZWFuIGJmZF9tYWxsb2NfYW5kX2dldF9zZWN0aW9uCisrICAgKGJmZCAqYWJmZCwgYXNlY3Rpb24gKnNlY3Rpb24sIGJmZF9ieXRlICoqYnVmKTsKKysKKytiZmRfYm9vbGVhbiBiZmRfY29weV9wcml2YXRlX3NlY3Rpb25fZGF0YQorKyAgIChiZmQgKmliZmQsIGFzZWN0aW9uICppc2VjLCBiZmQgKm9iZmQsIGFzZWN0aW9uICpvc2VjKTsKKysKKysjZGVmaW5lIGJmZF9jb3B5X3ByaXZhdGVfc2VjdGlvbl9kYXRhKGliZmQsIGlzZWN0aW9uLCBvYmZkLCBvc2VjdGlvbikgXAorKyAgICAgQkZEX1NFTkQgKG9iZmQsIF9iZmRfY29weV9wcml2YXRlX3NlY3Rpb25fZGF0YSwgXAorKyAgICAgICAgICAgICAgIChpYmZkLCBpc2VjdGlvbiwgb2JmZCwgb3NlY3Rpb24pKQorK2JmZF9ib29sZWFuIGJmZF9nZW5lcmljX2lzX2dyb3VwX3NlY3Rpb24gKGJmZCAqLCBjb25zdCBhc2VjdGlvbiAqc2VjKTsKKysKKytiZmRfYm9vbGVhbiBiZmRfZ2VuZXJpY19kaXNjYXJkX2dyb3VwIChiZmQgKmFiZmQsIGFzZWN0aW9uICpncm91cCk7CisrCisrLyogRXh0cmFjdGVkIGZyb20gYXJjaHVyZXMuYy4gICovCisrZW51bSBiZmRfYXJjaGl0ZWN0dXJlCisreworKyAgYmZkX2FyY2hfdW5rbm93biwgICAvKiBGaWxlIGFyY2ggbm90IGtub3duLiAgKi8KKysgIGJmZF9hcmNoX29ic2N1cmUsICAgLyogQXJjaCBrbm93biwgbm90IG9uZSBvZiB0aGVzZS4gICovCisrICBiZmRfYXJjaF9tNjhrLCAgICAgIC8qIE1vdG9yb2xhIDY4eHh4ICovCisrI2RlZmluZSBiZmRfbWFjaF9tNjgwMDAgMQorKyNkZWZpbmUgYmZkX21hY2hfbTY4MDA4IDIKKysjZGVmaW5lIGJmZF9tYWNoX202ODAxMCAzCisrI2RlZmluZSBiZmRfbWFjaF9tNjgwMjAgNAorKyNkZWZpbmUgYmZkX21hY2hfbTY4MDMwIDUKKysjZGVmaW5lIGJmZF9tYWNoX202ODA0MCA2CisrI2RlZmluZSBiZmRfbWFjaF9tNjgwNjAgNworKyNkZWZpbmUgYmZkX21hY2hfY3B1MzIgIDgKKysjZGVmaW5lIGJmZF9tYWNoX2ZpZG8gICA5CisrI2RlZmluZSBiZmRfbWFjaF9tY2ZfaXNhX2Ffbm9kaXYgMTAKKysjZGVmaW5lIGJmZF9tYWNoX21jZl9pc2FfYSAxMQorKyNkZWZpbmUgYmZkX21hY2hfbWNmX2lzYV9hX21hYyAxMgorKyNkZWZpbmUgYmZkX21hY2hfbWNmX2lzYV9hX2VtYWMgMTMKKysjZGVmaW5lIGJmZF9tYWNoX21jZl9pc2FfYXBsdXMgMTQKKysjZGVmaW5lIGJmZF9tYWNoX21jZl9pc2FfYXBsdXNfbWFjIDE1CisrI2RlZmluZSBiZmRfbWFjaF9tY2ZfaXNhX2FwbHVzX2VtYWMgMTYKKysjZGVmaW5lIGJmZF9tYWNoX21jZl9pc2FfYl9ub3VzcCAxNworKyNkZWZpbmUgYmZkX21hY2hfbWNmX2lzYV9iX25vdXNwX21hYyAxOAorKyNkZWZpbmUgYmZkX21hY2hfbWNmX2lzYV9iX25vdXNwX2VtYWMgMTkKKysjZGVmaW5lIGJmZF9tYWNoX21jZl9pc2FfYiAyMAorKyNkZWZpbmUgYmZkX21hY2hfbWNmX2lzYV9iX21hYyAyMQorKyNkZWZpbmUgYmZkX21hY2hfbWNmX2lzYV9iX2VtYWMgMjIKKysjZGVmaW5lIGJmZF9tYWNoX21jZl9pc2FfYl9mbG9hdCAyMworKyNkZWZpbmUgYmZkX21hY2hfbWNmX2lzYV9iX2Zsb2F0X21hYyAyNAorKyNkZWZpbmUgYmZkX21hY2hfbWNmX2lzYV9iX2Zsb2F0X2VtYWMgMjUKKysjZGVmaW5lIGJmZF9tYWNoX21jZl9pc2FfYyAyNgorKyNkZWZpbmUgYmZkX21hY2hfbWNmX2lzYV9jX21hYyAyNworKyNkZWZpbmUgYmZkX21hY2hfbWNmX2lzYV9jX2VtYWMgMjgKKysgIGJmZF9hcmNoX3ZheCwgICAgICAgLyogREVDIFZheCAqLworKyAgYmZkX2FyY2hfaTk2MCwgICAgICAvKiBJbnRlbCA5NjAgKi8KKysgICAgLyogVGhlIG9yZGVyIG9mIHRoZSBmb2xsb3dpbmcgaXMgaW1wb3J0YW50LgorKyAgICAgICBsb3dlciBudW1iZXIgaW5kaWNhdGVzIGEgbWFjaGluZSB0eXBlIHRoYXQKKysgICAgICAgb25seSBhY2NlcHRzIGEgc3Vic2V0IG9mIHRoZSBpbnN0cnVjdGlvbnMKKysgICAgICAgYXZhaWxhYmxlIHRvIG1hY2hpbmVzIHdpdGggaGlnaGVyIG51bWJlcnMuCisrICAgICAgIFRoZSBleGNlcHRpb24gaXMgdGhlICJjYSIsIHdoaWNoIGlzCisrICAgICAgIGluY29tcGF0aWJsZSB3aXRoIGFsbCBvdGhlciBtYWNoaW5lcyBleGNlcHQKKysgICAgICAgImNvcmUiLiAgKi8KKysKKysjZGVmaW5lIGJmZF9tYWNoX2k5NjBfY29yZSAgICAgIDEKKysjZGVmaW5lIGJmZF9tYWNoX2k5NjBfa2Ffc2EgICAgIDIKKysjZGVmaW5lIGJmZF9tYWNoX2k5NjBfa2Jfc2IgICAgIDMKKysjZGVmaW5lIGJmZF9tYWNoX2k5NjBfbWMgICAgICAgIDQKKysjZGVmaW5lIGJmZF9tYWNoX2k5NjBfeGEgICAgICAgIDUKKysjZGVmaW5lIGJmZF9tYWNoX2k5NjBfY2EgICAgICAgIDYKKysjZGVmaW5lIGJmZF9tYWNoX2k5NjBfanggICAgICAgIDcKKysjZGVmaW5lIGJmZF9tYWNoX2k5NjBfaHggICAgICAgIDgKKysKKysgIGJmZF9hcmNoX29yMzIsICAgICAgLyogT3BlblJJU0MgMzIgKi8KKysKKysgIGJmZF9hcmNoX3NwYXJjLCAgICAgLyogU1BBUkMgKi8KKysjZGVmaW5lIGJmZF9tYWNoX3NwYXJjICAgICAgICAgICAgICAgICAxCisrLyogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB2OHBsdXMgYW5kIHY5IGlzIHRoYXQgdjkgaXMgYSB0cnVlIDY0IGJpdCBlbnYuICAqLworKyNkZWZpbmUgYmZkX21hY2hfc3BhcmNfc3BhcmNsZXQgICAgICAgIDIKKysjZGVmaW5lIGJmZF9tYWNoX3NwYXJjX3NwYXJjbGl0ZSAgICAgICAzCisrI2RlZmluZSBiZmRfbWFjaF9zcGFyY192OHBsdXMgICAgICAgICAgNAorKyNkZWZpbmUgYmZkX21hY2hfc3BhcmNfdjhwbHVzYSAgICAgICAgIDUgLyogd2l0aCB1bHRyYXNwYXJjIGFkZCducy4gICovCisrI2RlZmluZSBiZmRfbWFjaF9zcGFyY19zcGFyY2xpdGVfbGUgICAgNgorKyNkZWZpbmUgYmZkX21hY2hfc3BhcmNfdjkgICAgICAgICAgICAgIDcKKysjZGVmaW5lIGJmZF9tYWNoX3NwYXJjX3Y5YSAgICAgICAgICAgICA4IC8qIHdpdGggdWx0cmFzcGFyYyBhZGQnbnMuICAqLworKyNkZWZpbmUgYmZkX21hY2hfc3BhcmNfdjhwbHVzYiAgICAgICAgIDkgLyogd2l0aCBjaGVldGFoIGFkZCducy4gICovCisrI2RlZmluZSBiZmRfbWFjaF9zcGFyY192OWIgICAgICAgICAgICAgMTAgLyogd2l0aCBjaGVldGFoIGFkZCducy4gICovCisrLyogTm9uemVybyBpZiBNQUNIIGhhcyB0aGUgdjkgaW5zdHJ1Y3Rpb24gc2V0LiAgKi8KKysjZGVmaW5lIGJmZF9tYWNoX3NwYXJjX3Y5X3AobWFjaCkgXAorKyAgKChtYWNoKSA+PSBiZmRfbWFjaF9zcGFyY192OHBsdXMgJiYgKG1hY2gpIDw9IGJmZF9tYWNoX3NwYXJjX3Y5YiBcCisrICAgJiYgKG1hY2gpICE9IGJmZF9tYWNoX3NwYXJjX3NwYXJjbGl0ZV9sZSkKKysvKiBOb256ZXJvIGlmIE1BQ0ggaXMgYSA2NCBiaXQgc3BhcmMgYXJjaGl0ZWN0dXJlLiAgKi8KKysjZGVmaW5lIGJmZF9tYWNoX3NwYXJjXzY0Yml0X3AobWFjaCkgXAorKyAgKChtYWNoKSA+PSBiZmRfbWFjaF9zcGFyY192OSAmJiAobWFjaCkgIT0gYmZkX21hY2hfc3BhcmNfdjhwbHVzYikKKysgIGJmZF9hcmNoX3NwdSwgICAgICAgLyogUG93ZXJQQyBTUFUgKi8KKysjZGVmaW5lIGJmZF9tYWNoX3NwdSAgICAgICAgICAgMjU2IAorKyAgYmZkX2FyY2hfbWlwcywgICAgICAvKiBNSVBTIFJ4eHh4ICovCisrI2RlZmluZSBiZmRfbWFjaF9taXBzMzAwMCAgICAgICAgICAgICAgMzAwMAorKyNkZWZpbmUgYmZkX21hY2hfbWlwczM5MDAgICAgICAgICAgICAgIDM5MDAKKysjZGVmaW5lIGJmZF9tYWNoX21pcHM0MDAwICAgICAgICAgICAgICA0MDAwCisrI2RlZmluZSBiZmRfbWFjaF9taXBzNDAxMCAgICAgICAgICAgICAgNDAxMAorKyNkZWZpbmUgYmZkX21hY2hfbWlwczQxMDAgICAgICAgICAgICAgIDQxMDAKKysjZGVmaW5lIGJmZF9tYWNoX21pcHM0MTExICAgICAgICAgICAgICA0MTExCisrI2RlZmluZSBiZmRfbWFjaF9taXBzNDEyMCAgICAgICAgICAgICAgNDEyMAorKyNkZWZpbmUgYmZkX21hY2hfbWlwczQzMDAgICAgICAgICAgICAgIDQzMDAKKysjZGVmaW5lIGJmZF9tYWNoX21pcHM0NDAwICAgICAgICAgICAgICA0NDAwCisrI2RlZmluZSBiZmRfbWFjaF9taXBzNDYwMCAgICAgICAgICAgICAgNDYwMAorKyNkZWZpbmUgYmZkX21hY2hfbWlwczQ2NTAgICAgICAgICAgICAgIDQ2NTAKKysjZGVmaW5lIGJmZF9tYWNoX21pcHM1MDAwICAgICAgICAgICAgICA1MDAwCisrI2RlZmluZSBiZmRfbWFjaF9taXBzNTQwMCAgICAgICAgICAgICAgNTQwMAorKyNkZWZpbmUgYmZkX21hY2hfbWlwczU1MDAgICAgICAgICAgICAgIDU1MDAKKysjZGVmaW5lIGJmZF9tYWNoX21pcHM2MDAwICAgICAgICAgICAgICA2MDAwCisrI2RlZmluZSBiZmRfbWFjaF9taXBzNzAwMCAgICAgICAgICAgICAgNzAwMAorKyNkZWZpbmUgYmZkX21hY2hfbWlwczgwMDAgICAgICAgICAgICAgIDgwMDAKKysjZGVmaW5lIGJmZF9tYWNoX21pcHM5MDAwICAgICAgICAgICAgICA5MDAwCisrI2RlZmluZSBiZmRfbWFjaF9taXBzMTAwMDAgICAgICAgICAgICAgMTAwMDAKKysjZGVmaW5lIGJmZF9tYWNoX21pcHMxMjAwMCAgICAgICAgICAgICAxMjAwMAorKyNkZWZpbmUgYmZkX21hY2hfbWlwczE2ICAgICAgICAgICAgICAgIDE2CisrI2RlZmluZSBiZmRfbWFjaF9taXBzNSAgICAgICAgICAgICAgICAgNQorKyNkZWZpbmUgYmZkX21hY2hfbWlwc19zYjEgICAgICAgICAgICAgIDEyMzEwMjAxIC8qIG9jdGFsICdTQicsIDAxICovCisrI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzIgICAgICAgICAgICAgMzIKKysjZGVmaW5lIGJmZF9tYWNoX21pcHNpc2EzMnIyICAgICAgICAgICAzMworKyNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTY0ICAgICAgICAgICAgIDY0CisrI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhNjRyMiAgICAgICAgICAgNjUKKysgIGJmZF9hcmNoX2kzODYsICAgICAgLyogSW50ZWwgMzg2ICovCisrI2RlZmluZSBiZmRfbWFjaF9pMzg2X2kzODYgMQorKyNkZWZpbmUgYmZkX21hY2hfaTM4Nl9pODA4NiAyCisrI2RlZmluZSBiZmRfbWFjaF9pMzg2X2kzODZfaW50ZWxfc3ludGF4IDMKKysjZGVmaW5lIGJmZF9tYWNoX3g4Nl82NCA2NAorKyNkZWZpbmUgYmZkX21hY2hfeDg2XzY0X2ludGVsX3N5bnRheCA2NQorKyAgYmZkX2FyY2hfd2UzMmssICAgICAvKiBBVCZUIFdFMzJ4eHggKi8KKysgIGJmZF9hcmNoX3RhaG9lLCAgICAgLyogQ0NJL0hhcnJpcyBUYWhvZSAqLworKyAgYmZkX2FyY2hfaTg2MCwgICAgICAvKiBJbnRlbCA4NjAgKi8KKysgIGJmZF9hcmNoX2kzNzAsICAgICAgLyogSUJNIDM2MC8zNzAgTWFpbmZyYW1lcyAqLworKyAgYmZkX2FyY2hfcm9tcCwgICAgICAvKiBJQk0gUk9NUCBQQy9SVCAqLworKyAgYmZkX2FyY2hfY29udmV4LCAgICAvKiBDb252ZXggKi8KKysgIGJmZF9hcmNoX204OGssICAgICAgLyogTW90b3JvbGEgODh4eHggKi8KKysgIGJmZF9hcmNoX205OGssICAgICAgLyogTW90b3JvbGEgOTh4eHggKi8KKysgIGJmZF9hcmNoX3B5cmFtaWQsICAgLyogUHlyYW1pZCBUZWNobm9sb2d5ICovCisrICBiZmRfYXJjaF9oODMwMCwgICAgIC8qIFJlbmVzYXMgSDgvMzAwIChmb3JtZXJseSBIaXRhY2hpIEg4LzMwMCkgKi8KKysjZGVmaW5lIGJmZF9tYWNoX2g4MzAwICAgIDEKKysjZGVmaW5lIGJmZF9tYWNoX2g4MzAwaCAgIDIKKysjZGVmaW5lIGJmZF9tYWNoX2g4MzAwcyAgIDMKKysjZGVmaW5lIGJmZF9tYWNoX2g4MzAwaG4gIDQKKysjZGVmaW5lIGJmZF9tYWNoX2g4MzAwc24gIDUKKysjZGVmaW5lIGJmZF9tYWNoX2g4MzAwc3ggIDYKKysjZGVmaW5lIGJmZF9tYWNoX2g4MzAwc3huIDcKKysgIGJmZF9hcmNoX3BkcDExLCAgICAgLyogREVDIFBEUC0xMSAqLworKyAgYmZkX2FyY2hfcG93ZXJwYywgICAvKiBQb3dlclBDICovCisrI2RlZmluZSBiZmRfbWFjaF9wcGMgICAgICAgICAgIDMyCisrI2RlZmluZSBiZmRfbWFjaF9wcGM2NCAgICAgICAgIDY0CisrI2RlZmluZSBiZmRfbWFjaF9wcGNfNDAzICAgICAgIDQwMworKyNkZWZpbmUgYmZkX21hY2hfcHBjXzQwM2djICAgICA0MDMwCisrI2RlZmluZSBiZmRfbWFjaF9wcGNfNTA1ICAgICAgIDUwNQorKyNkZWZpbmUgYmZkX21hY2hfcHBjXzYwMSAgICAgICA2MDEKKysjZGVmaW5lIGJmZF9tYWNoX3BwY182MDIgICAgICAgNjAyCisrI2RlZmluZSBiZmRfbWFjaF9wcGNfNjAzICAgICAgIDYwMworKyNkZWZpbmUgYmZkX21hY2hfcHBjX2VjNjAzZSAgICA2MDMxCisrI2RlZmluZSBiZmRfbWFjaF9wcGNfNjA0ICAgICAgIDYwNAorKyNkZWZpbmUgYmZkX21hY2hfcHBjXzYyMCAgICAgICA2MjAKKysjZGVmaW5lIGJmZF9tYWNoX3BwY182MzAgICAgICAgNjMwCisrI2RlZmluZSBiZmRfbWFjaF9wcGNfNzUwICAgICAgIDc1MAorKyNkZWZpbmUgYmZkX21hY2hfcHBjXzg2MCAgICAgICA4NjAKKysjZGVmaW5lIGJmZF9tYWNoX3BwY19hMzUgICAgICAgMzUKKysjZGVmaW5lIGJmZF9tYWNoX3BwY19yczY0aWkgICAgNjQyCisrI2RlZmluZSBiZmRfbWFjaF9wcGNfcnM2NGlpaSAgIDY0MworKyNkZWZpbmUgYmZkX21hY2hfcHBjXzc0MDAgICAgICA3NDAwCisrI2RlZmluZSBiZmRfbWFjaF9wcGNfZTUwMCAgICAgIDUwMAorKyAgYmZkX2FyY2hfcnM2MDAwLCAgICAvKiBJQk0gUlMvNjAwMCAqLworKyNkZWZpbmUgYmZkX21hY2hfcnM2ayAgICAgICAgICA2MDAwCisrI2RlZmluZSBiZmRfbWFjaF9yczZrX3JzMSAgICAgIDYwMDEKKysjZGVmaW5lIGJmZF9tYWNoX3JzNmtfcnNjICAgICAgNjAwMworKyNkZWZpbmUgYmZkX21hY2hfcnM2a19yczIgICAgICA2MDAyCisrICBiZmRfYXJjaF9ocHBhLCAgICAgIC8qIEhQIFBBIFJJU0MgKi8KKysjZGVmaW5lIGJmZF9tYWNoX2hwcGExMCAgICAgICAgMTAKKysjZGVmaW5lIGJmZF9tYWNoX2hwcGExMSAgICAgICAgMTEKKysjZGVmaW5lIGJmZF9tYWNoX2hwcGEyMCAgICAgICAgMjAKKysjZGVmaW5lIGJmZF9tYWNoX2hwcGEyMHcgICAgICAgMjUKKysgIGJmZF9hcmNoX2QxMHYsICAgICAgLyogTWl0c3ViaXNoaSBEMTBWICovCisrI2RlZmluZSBiZmRfbWFjaF9kMTB2ICAgICAgICAgIDEKKysjZGVmaW5lIGJmZF9tYWNoX2QxMHZfdHMyICAgICAgMgorKyNkZWZpbmUgYmZkX21hY2hfZDEwdl90czMgICAgICAzCisrICBiZmRfYXJjaF9kMzB2LCAgICAgIC8qIE1pdHN1YmlzaGkgRDMwViAqLworKyAgYmZkX2FyY2hfZGx4LCAgICAgICAvKiBETFggKi8KKysgIGJmZF9hcmNoX202OGhjMTEsICAgLyogTW90b3JvbGEgNjhIQzExICovCisrICBiZmRfYXJjaF9tNjhoYzEyLCAgIC8qIE1vdG9yb2xhIDY4SEMxMiAqLworKyNkZWZpbmUgYmZkX21hY2hfbTY4MTJfZGVmYXVsdCAwCisrI2RlZmluZSBiZmRfbWFjaF9tNjgxMiAgICAgICAgIDEKKysjZGVmaW5lIGJmZF9tYWNoX202ODEycyAgICAgICAgMgorKyAgYmZkX2FyY2hfejhrLCAgICAgICAvKiBaaWxvZyBaODAwMCAqLworKyNkZWZpbmUgYmZkX21hY2hfejgwMDEgICAgICAgICAxCisrI2RlZmluZSBiZmRfbWFjaF96ODAwMiAgICAgICAgIDIKKysgIGJmZF9hcmNoX2g4NTAwLCAgICAgLyogUmVuZXNhcyBIOC81MDAgKGZvcm1lcmx5IEhpdGFjaGkgSDgvNTAwKSAqLworKyAgYmZkX2FyY2hfc2gsICAgICAgICAvKiBSZW5lc2FzIC8gU3VwZXJIIFNIIChmb3JtZXJseSBIaXRhY2hpIFNIKSAqLworKyNkZWZpbmUgYmZkX21hY2hfc2ggICAgICAgICAgICAxCisrI2RlZmluZSBiZmRfbWFjaF9zaDIgICAgICAgIDB4MjAKKysjZGVmaW5lIGJmZF9tYWNoX3NoX2RzcCAgICAgMHgyZAorKyNkZWZpbmUgYmZkX21hY2hfc2gyYSAgICAgICAweDJhCisrI2RlZmluZSBiZmRfbWFjaF9zaDJhX25vZnB1IDB4MmIKKysjZGVmaW5lIGJmZF9tYWNoX3NoMmFfbm9mcHVfb3Jfc2g0X25vbW11X25vZnB1IDB4MmExCisrI2RlZmluZSBiZmRfbWFjaF9zaDJhX25vZnB1X29yX3NoM19ub21tdSAweDJhMgorKyNkZWZpbmUgYmZkX21hY2hfc2gyYV9vcl9zaDQgIDB4MmEzCisrI2RlZmluZSBiZmRfbWFjaF9zaDJhX29yX3NoM2UgMHgyYTQKKysjZGVmaW5lIGJmZF9tYWNoX3NoMmUgICAgICAgMHgyZQorKyNkZWZpbmUgYmZkX21hY2hfc2gzICAgICAgICAweDMwCisrI2RlZmluZSBiZmRfbWFjaF9zaDNfbm9tbXUgIDB4MzEKKysjZGVmaW5lIGJmZF9tYWNoX3NoM19kc3AgICAgMHgzZAorKyNkZWZpbmUgYmZkX21hY2hfc2gzZSAgICAgICAweDNlCisrI2RlZmluZSBiZmRfbWFjaF9zaDQgICAgICAgIDB4NDAKKysjZGVmaW5lIGJmZF9tYWNoX3NoNF9ub2ZwdSAgMHg0MQorKyNkZWZpbmUgYmZkX21hY2hfc2g0X25vbW11X25vZnB1ICAweDQyCisrI2RlZmluZSBiZmRfbWFjaF9zaDRhICAgICAgIDB4NGEKKysjZGVmaW5lIGJmZF9tYWNoX3NoNGFfbm9mcHUgMHg0YgorKyNkZWZpbmUgYmZkX21hY2hfc2g0YWxfZHNwICAweDRkCisrI2RlZmluZSBiZmRfbWFjaF9zaDUgICAgICAgIDB4NTAKKysgIGJmZF9hcmNoX2FscGhhLCAgICAgLyogRGVjIEFscGhhICovCisrI2RlZmluZSBiZmRfbWFjaF9hbHBoYV9ldjQgIDB4MTAKKysjZGVmaW5lIGJmZF9tYWNoX2FscGhhX2V2NSAgMHgyMAorKyNkZWZpbmUgYmZkX21hY2hfYWxwaGFfZXY2ICAweDMwCisrICBiZmRfYXJjaF9hcm0sICAgICAgIC8qIEFkdmFuY2VkIFJpc2MgTWFjaGluZXMgQVJNLiAgKi8KKysjZGVmaW5lIGJmZF9tYWNoX2FybV91bmtub3duICAgMAorKyNkZWZpbmUgYmZkX21hY2hfYXJtXzIgICAgICAgICAxCisrI2RlZmluZSBiZmRfbWFjaF9hcm1fMmEgICAgICAgIDIKKysjZGVmaW5lIGJmZF9tYWNoX2FybV8zICAgICAgICAgMworKyNkZWZpbmUgYmZkX21hY2hfYXJtXzNNICAgICAgICA0CisrI2RlZmluZSBiZmRfbWFjaF9hcm1fNCAgICAgICAgIDUKKysjZGVmaW5lIGJmZF9tYWNoX2FybV80VCAgICAgICAgNgorKyNkZWZpbmUgYmZkX21hY2hfYXJtXzUgICAgICAgICA3CisrI2RlZmluZSBiZmRfbWFjaF9hcm1fNVQgICAgICAgIDgKKysjZGVmaW5lIGJmZF9tYWNoX2FybV81VEUgICAgICAgOQorKyNkZWZpbmUgYmZkX21hY2hfYXJtX1hTY2FsZSAgICAxMAorKyNkZWZpbmUgYmZkX21hY2hfYXJtX2VwOTMxMiAgICAxMQorKyNkZWZpbmUgYmZkX21hY2hfYXJtX2lXTU1YdCAgICAxMgorKyNkZWZpbmUgYmZkX21hY2hfYXJtX2lXTU1YdDIgICAxMworKyAgYmZkX2FyY2hfbnMzMmssICAgICAvKiBOYXRpb25hbCBTZW1pY29uZHVjdG9ycyBuczMyMDAwICovCisrICBiZmRfYXJjaF93NjUsICAgICAgIC8qIFdEQyA2NTgxNiAqLworKyAgYmZkX2FyY2hfdGljMzAsICAgICAvKiBUZXhhcyBJbnN0cnVtZW50cyBUTVMzMjBDMzAgKi8KKysgIGJmZF9hcmNoX3RpYzR4LCAgICAgLyogVGV4YXMgSW5zdHJ1bWVudHMgVE1TMzIwQzNYLzRYICovCisrI2RlZmluZSBiZmRfbWFjaF90aWMzeCAgICAgICAgIDMwCisrI2RlZmluZSBiZmRfbWFjaF90aWM0eCAgICAgICAgIDQwCisrICBiZmRfYXJjaF90aWM1NHgsICAgIC8qIFRleGFzIEluc3RydW1lbnRzIFRNUzMyMEM1NFggKi8KKysgIGJmZF9hcmNoX3RpYzgwLCAgICAgLyogVEkgVE1TMzIwYzgwIChNVlApICovCisrICBiZmRfYXJjaF92ODUwLCAgICAgIC8qIE5FQyBWODUwICovCisrI2RlZmluZSBiZmRfbWFjaF92ODUwICAgICAgICAgIDEKKysjZGVmaW5lIGJmZF9tYWNoX3Y4NTBlICAgICAgICAgJ0UnCisrI2RlZmluZSBiZmRfbWFjaF92ODUwZTEgICAgICAgICcxJworKyAgYmZkX2FyY2hfYXJjLCAgICAgICAvKiBBUkMgQ29yZXMgKi8KKysjZGVmaW5lIGJmZF9tYWNoX2FyY181ICAgICAgICAgNQorKyNkZWZpbmUgYmZkX21hY2hfYXJjXzYgICAgICAgICA2CisrI2RlZmluZSBiZmRfbWFjaF9hcmNfNyAgICAgICAgIDcKKysjZGVmaW5lIGJmZF9tYWNoX2FyY184ICAgICAgICAgOAorKyBiZmRfYXJjaF9tMzJjLCAgICAgLyogUmVuZXNhcyBNMTZDL00zMkMuICAqLworKyNkZWZpbmUgYmZkX21hY2hfbTE2YyAgICAgICAgMHg3NQorKyNkZWZpbmUgYmZkX21hY2hfbTMyYyAgICAgICAgMHg3OAorKyAgYmZkX2FyY2hfbTMyciwgICAgICAvKiBSZW5lc2FzIE0zMlIgKGZvcm1lcmx5IE1pdHN1YmlzaGkgTTMyUi9EKSAqLworKyNkZWZpbmUgYmZkX21hY2hfbTMyciAgICAgICAgICAxIC8qIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gICovCisrI2RlZmluZSBiZmRfbWFjaF9tMzJyeCAgICAgICAgICd4JworKyNkZWZpbmUgYmZkX21hY2hfbTMycjIgICAgICAgICAnMicKKysgIGJmZF9hcmNoX21uMTAyMDAsICAgLyogTWF0c3VzaGl0YSBNTjEwMjAwICovCisrICBiZmRfYXJjaF9tbjEwMzAwLCAgIC8qIE1hdHN1c2hpdGEgTU4xMDMwMCAqLworKyNkZWZpbmUgYmZkX21hY2hfbW4xMDMwMCAgICAgICAgICAgICAgIDMwMAorKyNkZWZpbmUgYmZkX21hY2hfYW0zMyAgICAgICAgICAzMzAKKysjZGVmaW5lIGJmZF9tYWNoX2FtMzNfMiAgICAgICAgMzMyCisrICBiZmRfYXJjaF9mcjMwLAorKyNkZWZpbmUgYmZkX21hY2hfZnIzMCAgICAgICAgICAweDQ2NTIzMzMwCisrICBiZmRfYXJjaF9mcnYsCisrI2RlZmluZSBiZmRfbWFjaF9mcnYgICAgICAgICAgIDEKKysjZGVmaW5lIGJmZF9tYWNoX2ZydnNpbXBsZSAgICAgMgorKyNkZWZpbmUgYmZkX21hY2hfZnIzMDAgICAgICAgICAzMDAKKysjZGVmaW5lIGJmZF9tYWNoX2ZyNDAwICAgICAgICAgNDAwCisrI2RlZmluZSBiZmRfbWFjaF9mcjQ1MCAgICAgICAgIDQ1MAorKyNkZWZpbmUgYmZkX21hY2hfZnJ2dG9tY2F0ICAgICA0OTkgICAgIC8qIGZyNTAwIHByb3RvdHlwZSAqLworKyNkZWZpbmUgYmZkX21hY2hfZnI1MDAgICAgICAgICA1MDAKKysjZGVmaW5lIGJmZF9tYWNoX2ZyNTUwICAgICAgICAgNTUwCisrICBiZmRfYXJjaF9tY29yZSwKKysgIGJmZF9hcmNoX21lcCwKKysjZGVmaW5lIGJmZF9tYWNoX21lcCAgICAgICAgICAgMQorKyNkZWZpbmUgYmZkX21hY2hfbWVwX2gxICAgICAgICAweDY4MzEKKysgIGJmZF9hcmNoX2lhNjQsICAgICAgLyogSFAvSW50ZWwgaWE2NCAqLworKyNkZWZpbmUgYmZkX21hY2hfaWE2NF9lbGY2NCAgICA2NAorKyNkZWZpbmUgYmZkX21hY2hfaWE2NF9lbGYzMiAgICAzMgorKyAgYmZkX2FyY2hfaXAyaywgICAgICAvKiBVYmljb20gSVAySyBtaWNyb2NvbnRyb2xsZXJzLiAqLworKyNkZWZpbmUgYmZkX21hY2hfaXAyMDIyICAgICAgICAxCisrI2RlZmluZSBiZmRfbWFjaF9pcDIwMjJleHQgICAgIDIKKysgYmZkX2FyY2hfaXEyMDAwLCAgICAgLyogVml0ZXNzZSBJUTIwMDAuICAqLworKyNkZWZpbmUgYmZkX21hY2hfaXEyMDAwICAgICAgICAxCisrI2RlZmluZSBiZmRfbWFjaF9pcTEwICAgICAgICAgIDIKKysgIGJmZF9hcmNoX210LAorKyNkZWZpbmUgYmZkX21hY2hfbXMxICAgICAgICAgICAxCisrI2RlZmluZSBiZmRfbWFjaF9tcmlzYzIgICAgICAgIDIKKysjZGVmaW5lIGJmZF9tYWNoX21zMiAgICAgICAgICAgMworKyAgYmZkX2FyY2hfcGosCisrICBiZmRfYXJjaF9hdnIsICAgICAgIC8qIEF0bWVsIEFWUiBtaWNyb2NvbnRyb2xsZXJzLiAgKi8KKysjZGVmaW5lIGJmZF9tYWNoX2F2cjEgICAgICAgICAgMQorKyNkZWZpbmUgYmZkX21hY2hfYXZyMiAgICAgICAgICAyCisrI2RlZmluZSBiZmRfbWFjaF9hdnIzICAgICAgICAgIDMKKysjZGVmaW5lIGJmZF9tYWNoX2F2cjQgICAgICAgICAgNAorKyNkZWZpbmUgYmZkX21hY2hfYXZyNSAgICAgICAgICA1CisrI2RlZmluZSBiZmRfbWFjaF9hdnI2ICAgICAgICAgIDYKKysgIGJmZF9hcmNoX2JmaW4sICAgICAgICAvKiBBREkgQmxhY2tmaW4gKi8KKysjZGVmaW5lIGJmZF9tYWNoX2JmaW4gICAgICAgICAgMQorKyAgYmZkX2FyY2hfY3IxNiwgICAgICAgLyogTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBDb21wYWN0UklTQyAoaWUgQ1IxNikuICovCisrI2RlZmluZSBiZmRfbWFjaF9jcjE2ICAgICAgICAgIDEKKysgIGJmZF9hcmNoX2NyMTZjLCAgICAgICAvKiBOYXRpb25hbCBTZW1pY29uZHVjdG9yIENvbXBhY3RSSVNDLiAqLworKyNkZWZpbmUgYmZkX21hY2hfY3IxNmMgICAgICAgICAxCisrICBiZmRfYXJjaF9jcngsICAgICAgIC8qICBOYXRpb25hbCBTZW1pY29uZHVjdG9yIENSWC4gICovCisrI2RlZmluZSBiZmRfbWFjaF9jcnggICAgICAgICAgIDEKKysgIGJmZF9hcmNoX2NyaXMsICAgICAgLyogQXhpcyBDUklTICovCisrI2RlZmluZSBiZmRfbWFjaF9jcmlzX3YwX3YxMCAgIDI1NQorKyNkZWZpbmUgYmZkX21hY2hfY3Jpc192MzIgICAgICAzMgorKyNkZWZpbmUgYmZkX21hY2hfY3Jpc192MTBfdjMyICAxMDMyCisrICBiZmRfYXJjaF9zMzkwLCAgICAgIC8qIElCTSBzMzkwICovCisrI2RlZmluZSBiZmRfbWFjaF9zMzkwXzMxICAgICAgIDMxCisrI2RlZmluZSBiZmRfbWFjaF9zMzkwXzY0ICAgICAgIDY0CisrICBiZmRfYXJjaF9zY29yZSwgICAgIC8qIFN1bnBsdXMgc2NvcmUgKi8gCisrICBiZmRfYXJjaF9vcGVucmlzYywgIC8qIE9wZW5SSVNDICovCisrICBiZmRfYXJjaF9tbWl4LCAgICAgIC8qIERvbmFsZCBLbnV0aCdzIGVkdWNhdGlvbmFsIHByb2Nlc3Nvci4gICovCisrICBiZmRfYXJjaF94c3Rvcm15MTYsCisrI2RlZmluZSBiZmRfbWFjaF94c3Rvcm15MTYgICAgIDEKKysgIGJmZF9hcmNoX21zcDQzMCwgICAgLyogVGV4YXMgSW5zdHJ1bWVudHMgTVNQNDMwIGFyY2hpdGVjdHVyZS4gICovCisrI2RlZmluZSBiZmRfbWFjaF9tc3AxMSAgICAgICAgICAxMQorKyNkZWZpbmUgYmZkX21hY2hfbXNwMTEwICAgICAgICAgMTEwCisrI2RlZmluZSBiZmRfbWFjaF9tc3AxMiAgICAgICAgICAxMgorKyNkZWZpbmUgYmZkX21hY2hfbXNwMTMgICAgICAgICAgMTMKKysjZGVmaW5lIGJmZF9tYWNoX21zcDE0ICAgICAgICAgIDE0CisrI2RlZmluZSBiZmRfbWFjaF9tc3AxNSAgICAgICAgICAxNQorKyNkZWZpbmUgYmZkX21hY2hfbXNwMTYgICAgICAgICAgMTYKKysjZGVmaW5lIGJmZF9tYWNoX21zcDIxICAgICAgICAgIDIxCisrI2RlZmluZSBiZmRfbWFjaF9tc3AzMSAgICAgICAgICAzMQorKyNkZWZpbmUgYmZkX21hY2hfbXNwMzIgICAgICAgICAgMzIKKysjZGVmaW5lIGJmZF9tYWNoX21zcDMzICAgICAgICAgIDMzCisrI2RlZmluZSBiZmRfbWFjaF9tc3A0MSAgICAgICAgICA0MQorKyNkZWZpbmUgYmZkX21hY2hfbXNwNDIgICAgICAgICAgNDIKKysjZGVmaW5lIGJmZF9tYWNoX21zcDQzICAgICAgICAgIDQzCisrI2RlZmluZSBiZmRfbWFjaF9tc3A0NCAgICAgICAgICA0NAorKyAgYmZkX2FyY2hfeGMxNngsICAgICAvKiBJbmZpbmVvbidzIFhDMTZYIFNlcmllcy4gICAgICAgICAgICAgICAqLworKyNkZWZpbmUgYmZkX21hY2hfeGMxNnggICAgICAgICAxCisrI2RlZmluZSBiZmRfbWFjaF94YzE2eGwgICAgICAgIDIKKysjZGVmaW5lIGJmZF9tYWNoX3hjMTZ4cyAgICAgICAgIDMKKysgIGJmZF9hcmNoX3h0ZW5zYSwgICAgLyogVGVuc2lsaWNhJ3MgWHRlbnNhIGNvcmVzLiAgKi8KKysjZGVmaW5lIGJmZF9tYWNoX3h0ZW5zYSAgICAgICAgMQorKyAgIGJmZF9hcmNoX21heHEsICAgICAvKiBEYWxsYXMgTUFYUSAxMC8yMCAqLworKyNkZWZpbmUgYmZkX21hY2hfbWF4cTEwICAgIDEwCisrI2RlZmluZSBiZmRfbWFjaF9tYXhxMjAgICAgMjAKKysgIGJmZF9hcmNoX3o4MCwKKysjZGVmaW5lIGJmZF9tYWNoX3o4MHN0cmljdCAgICAgIDEgLyogTm8gdW5kb2N1bWVudGVkIG9wY29kZXMuICAqLworKyNkZWZpbmUgYmZkX21hY2hfejgwICAgICAgICAgICAgMyAvKiBXaXRoIGl4bCwgaXhoLCBpeWwsIGFuZCBpeWguICAqLworKyNkZWZpbmUgYmZkX21hY2hfejgwZnVsbCAgICAgICAgNyAvKiBBbGwgdW5kb2N1bWVudGVkIGluc3RydWN0aW9ucy4gICovCisrI2RlZmluZSBiZmRfbWFjaF9yODAwICAgICAgICAgICAxMSAvKiBSODAwOiBzdWNjZXNzb3Igd2l0aCBtdWx0aXBsaWNhdGlvbi4gICovCisrICBiZmRfYXJjaF9sYXN0CisrICB9OworKworK3R5cGVkZWYgc3RydWN0IGJmZF9hcmNoX2luZm8KKyt7CisrICBpbnQgYml0c19wZXJfd29yZDsKKysgIGludCBiaXRzX3Blcl9hZGRyZXNzOworKyAgaW50IGJpdHNfcGVyX2J5dGU7CisrICBlbnVtIGJmZF9hcmNoaXRlY3R1cmUgYXJjaDsKKysgIHVuc2lnbmVkIGxvbmcgbWFjaDsKKysgIGNvbnN0IGNoYXIgKmFyY2hfbmFtZTsKKysgIGNvbnN0IGNoYXIgKnByaW50YWJsZV9uYW1lOworKyAgdW5zaWduZWQgaW50IHNlY3Rpb25fYWxpZ25fcG93ZXI7CisrICAvKiBUUlVFIGlmIHRoaXMgaXMgdGhlIGRlZmF1bHQgbWFjaGluZSBmb3IgdGhlIGFyY2hpdGVjdHVyZS4KKysgICAgIFRoZSBkZWZhdWx0IGFyY2ggc2hvdWxkIGJlIHRoZSBmaXJzdCBlbnRyeSBmb3IgYW4gYXJjaCBzbyB0aGF0CisrICAgICBhbGwgdGhlIGVudHJpZXMgZm9yIHRoYXQgYXJjaCBjYW4gYmUgYWNjZXNzZWQgdmlhIDw8bmV4dD4+LiAgKi8KKysgIGJmZF9ib29sZWFuIHRoZV9kZWZhdWx0OworKyAgY29uc3Qgc3RydWN0IGJmZF9hcmNoX2luZm8gKiAoKmNvbXBhdGlibGUpCisrICAgIChjb25zdCBzdHJ1Y3QgYmZkX2FyY2hfaW5mbyAqYSwgY29uc3Qgc3RydWN0IGJmZF9hcmNoX2luZm8gKmIpOworKworKyAgYmZkX2Jvb2xlYW4gKCpzY2FuKSAoY29uc3Qgc3RydWN0IGJmZF9hcmNoX2luZm8gKiwgY29uc3QgY2hhciAqKTsKKysKKysgIGNvbnN0IHN0cnVjdCBiZmRfYXJjaF9pbmZvICpuZXh0OworK30KKytiZmRfYXJjaF9pbmZvX3R5cGU7CisrCisrY29uc3QgY2hhciAqYmZkX3ByaW50YWJsZV9uYW1lIChiZmQgKmFiZmQpOworKworK2NvbnN0IGJmZF9hcmNoX2luZm9fdHlwZSAqYmZkX3NjYW5fYXJjaCAoY29uc3QgY2hhciAqc3RyaW5nKTsKKysKKytjb25zdCBjaGFyICoqYmZkX2FyY2hfbGlzdCAodm9pZCk7CisrCisrY29uc3QgYmZkX2FyY2hfaW5mb190eXBlICpiZmRfYXJjaF9nZXRfY29tcGF0aWJsZQorKyAgIChjb25zdCBiZmQgKmFiZmQsIGNvbnN0IGJmZCAqYmJmZCwgYmZkX2Jvb2xlYW4gYWNjZXB0X3Vua25vd25zKTsKKysKKyt2b2lkIGJmZF9zZXRfYXJjaF9pbmZvIChiZmQgKmFiZmQsIGNvbnN0IGJmZF9hcmNoX2luZm9fdHlwZSAqYXJnKTsKKysKKytlbnVtIGJmZF9hcmNoaXRlY3R1cmUgYmZkX2dldF9hcmNoIChiZmQgKmFiZmQpOworKworK3Vuc2lnbmVkIGxvbmcgYmZkX2dldF9tYWNoIChiZmQgKmFiZmQpOworKworK3Vuc2lnbmVkIGludCBiZmRfYXJjaF9iaXRzX3Blcl9ieXRlIChiZmQgKmFiZmQpOworKworK3Vuc2lnbmVkIGludCBiZmRfYXJjaF9iaXRzX3Blcl9hZGRyZXNzIChiZmQgKmFiZmQpOworKworK2NvbnN0IGJmZF9hcmNoX2luZm9fdHlwZSAqYmZkX2dldF9hcmNoX2luZm8gKGJmZCAqYWJmZCk7CisrCisrY29uc3QgYmZkX2FyY2hfaW5mb190eXBlICpiZmRfbG9va3VwX2FyY2gKKysgICAoZW51bSBiZmRfYXJjaGl0ZWN0dXJlIGFyY2gsIHVuc2lnbmVkIGxvbmcgbWFjaGluZSk7CisrCisrY29uc3QgY2hhciAqYmZkX3ByaW50YWJsZV9hcmNoX21hY2gKKysgICAoZW51bSBiZmRfYXJjaGl0ZWN0dXJlIGFyY2gsIHVuc2lnbmVkIGxvbmcgbWFjaGluZSk7CisrCisrdW5zaWduZWQgaW50IGJmZF9vY3RldHNfcGVyX2J5dGUgKGJmZCAqYWJmZCk7CisrCisrdW5zaWduZWQgaW50IGJmZF9hcmNoX21hY2hfb2N0ZXRzX3Blcl9ieXRlCisrICAgKGVudW0gYmZkX2FyY2hpdGVjdHVyZSBhcmNoLCB1bnNpZ25lZCBsb25nIG1hY2hpbmUpOworKworKy8qIEV4dHJhY3RlZCBmcm9tIHJlbG9jLmMuICAqLworK3R5cGVkZWYgZW51bSBiZmRfcmVsb2Nfc3RhdHVzCisreworKyAgLyogTm8gZXJyb3JzIGRldGVjdGVkLiAgKi8KKysgIGJmZF9yZWxvY19vaywKKysKKysgIC8qIFRoZSByZWxvY2F0aW9uIHdhcyBwZXJmb3JtZWQsIGJ1dCB0aGVyZSB3YXMgYW4gb3ZlcmZsb3cuICAqLworKyAgYmZkX3JlbG9jX292ZXJmbG93LAorKworKyAgLyogVGhlIGFkZHJlc3MgdG8gcmVsb2NhdGUgd2FzIG5vdCB3aXRoaW4gdGhlIHNlY3Rpb24gc3VwcGxpZWQuICAqLworKyAgYmZkX3JlbG9jX291dG9mcmFuZ2UsCisrCisrICAvKiBVc2VkIGJ5IHNwZWNpYWwgZnVuY3Rpb25zLiAgKi8KKysgIGJmZF9yZWxvY19jb250aW51ZSwKKysKKysgIC8qIFVuc3VwcG9ydGVkIHJlbG9jYXRpb24gc2l6ZSByZXF1ZXN0ZWQuICAqLworKyAgYmZkX3JlbG9jX25vdHN1cHBvcnRlZCwKKysKKysgIC8qIFVudXNlZC4gICovCisrICBiZmRfcmVsb2Nfb3RoZXIsCisrCisrICAvKiBUaGUgc3ltYm9sIHRvIHJlbG9jYXRlIGFnYWluc3Qgd2FzIHVuZGVmaW5lZC4gICovCisrICBiZmRfcmVsb2NfdW5kZWZpbmVkLAorKworKyAgLyogVGhlIHJlbG9jYXRpb24gd2FzIHBlcmZvcm1lZCwgYnV0IG1heSBub3QgYmUgb2sgLSBwcmVzZW50bHkKKysgICAgIGdlbmVyYXRlZCBvbmx5IHdoZW4gbGlua2luZyBpOTYwIGNvZmYgZmlsZXMgd2l0aCBpOTYwIGIub3V0CisrICAgICBzeW1ib2xzLiAgSWYgdGhpcyB0eXBlIGlzIHJldHVybmVkLCB0aGUgZXJyb3JfbWVzc2FnZSBhcmd1bWVudAorKyAgICAgdG8gYmZkX3BlcmZvcm1fcmVsb2NhdGlvbiB3aWxsIGJlIHNldC4gICovCisrICBiZmRfcmVsb2NfZGFuZ2Vyb3VzCisrIH0KKysgYmZkX3JlbG9jX3N0YXR1c190eXBlOworKworKworK3R5cGVkZWYgc3RydWN0IHJlbG9jX2NhY2hlX2VudHJ5CisreworKyAgLyogQSBwb2ludGVyIGludG8gdGhlIGNhbm9uaWNhbCB0YWJsZSBvZiBwb2ludGVycy4gICovCisrICBzdHJ1Y3QgYmZkX3N5bWJvbCAqKnN5bV9wdHJfcHRyOworKworKyAgLyogb2Zmc2V0IGluIHNlY3Rpb24uICAqLworKyAgYmZkX3NpemVfdHlwZSBhZGRyZXNzOworKworKyAgLyogYWRkZW5kIGZvciByZWxvY2F0aW9uIHZhbHVlLiAgKi8KKysgIGJmZF92bWEgYWRkZW5kOworKworKyAgLyogUG9pbnRlciB0byBob3cgdG8gcGVyZm9ybSB0aGUgcmVxdWlyZWQgcmVsb2NhdGlvbi4gICovCisrICByZWxvY19ob3d0b190eXBlICpob3d0bzsKKysKKyt9CisrYXJlbGVudDsKKysKKytlbnVtIGNvbXBsYWluX292ZXJmbG93CisreworKyAgLyogRG8gbm90IGNvbXBsYWluIG9uIG92ZXJmbG93LiAgKi8KKysgIGNvbXBsYWluX292ZXJmbG93X2RvbnQsCisrCisrICAvKiBDb21wbGFpbiBpZiB0aGUgdmFsdWUgb3ZlcmZsb3dzIHdoZW4gY29uc2lkZXJlZCBhcyBhIHNpZ25lZAorKyAgICAgbnVtYmVyIG9uZSBiaXQgbGFyZ2VyIHRoYW4gdGhlIGZpZWxkLiAgaWUuIEEgYml0ZmllbGQgb2YgTiBiaXRzCisrICAgICBpcyBhbGxvd2VkIHRvIHJlcHJlc2VudCAtMioqbiB0byAyKipuLTEuICAqLworKyAgY29tcGxhaW5fb3ZlcmZsb3dfYml0ZmllbGQsCisrCisrICAvKiBDb21wbGFpbiBpZiB0aGUgdmFsdWUgb3ZlcmZsb3dzIHdoZW4gY29uc2lkZXJlZCBhcyBhIHNpZ25lZAorKyAgICAgbnVtYmVyLiAgKi8KKysgIGNvbXBsYWluX292ZXJmbG93X3NpZ25lZCwKKysKKysgIC8qIENvbXBsYWluIGlmIHRoZSB2YWx1ZSBvdmVyZmxvd3Mgd2hlbiBjb25zaWRlcmVkIGFzIGFuCisrICAgICB1bnNpZ25lZCBudW1iZXIuICAqLworKyAgY29tcGxhaW5fb3ZlcmZsb3dfdW5zaWduZWQKKyt9OworKworK3N0cnVjdCByZWxvY19ob3d0b19zdHJ1Y3QKKyt7CisrICAvKiAgVGhlIHR5cGUgZmllbGQgaGFzIG1haW5seSBhIGRvY3VtZW50YXJ5IHVzZSAtIHRoZSBiYWNrIGVuZCBjYW4KKysgICAgICBkbyB3aGF0IGl0IHdhbnRzIHdpdGggaXQsIHRob3VnaCBub3JtYWxseSB0aGUgYmFjayBlbmQncworKyAgICAgIGV4dGVybmFsIGlkZWEgb2Ygd2hhdCBhIHJlbG9jIG51bWJlciBpcyBzdG9yZWQKKysgICAgICBpbiB0aGlzIGZpZWxkLiAgRm9yIGV4YW1wbGUsIGEgUEMgcmVsYXRpdmUgd29yZCByZWxvY2F0aW9uCisrICAgICAgaW4gYSBjb2ZmIGVudmlyb25tZW50IGhhcyB0aGUgdHlwZSAwMjMgLSBiZWNhdXNlIHRoYXQncworKyAgICAgIHdoYXQgdGhlIG91dHNpZGUgd29ybGQgY2FsbHMgYSBSX1BDUldPUkQgcmVsb2MuICAqLworKyAgdW5zaWduZWQgaW50IHR5cGU7CisrCisrICAvKiAgVGhlIHZhbHVlIHRoZSBmaW5hbCByZWxvY2F0aW9uIGlzIHNoaWZ0ZWQgcmlnaHQgYnkuICBUaGlzIGRyb3BzCisrICAgICAgdW53YW50ZWQgZGF0YSBmcm9tIHRoZSByZWxvY2F0aW9uLiAgKi8KKysgIHVuc2lnbmVkIGludCByaWdodHNoaWZ0OworKworKyAgLyogIFRoZSBzaXplIG9mIHRoZSBpdGVtIHRvIGJlIHJlbG9jYXRlZC4gIFRoaXMgaXMgKm5vdCogYQorKyAgICAgIHBvd2VyLW9mLXR3byBtZWFzdXJlLiAgVG8gZ2V0IHRoZSBudW1iZXIgb2YgYnl0ZXMgb3BlcmF0ZWQKKysgICAgICBvbiBieSBhIHR5cGUgb2YgcmVsb2NhdGlvbiwgdXNlIGJmZF9nZXRfcmVsb2Nfc2l6ZS4gICovCisrICBpbnQgc2l6ZTsKKysKKysgIC8qICBUaGUgbnVtYmVyIG9mIGJpdHMgaW4gdGhlIGl0ZW0gdG8gYmUgcmVsb2NhdGVkLiAgVGhpcyBpcyB1c2VkCisrICAgICAgd2hlbiBkb2luZyBvdmVyZmxvdyBjaGVja2luZy4gICovCisrICB1bnNpZ25lZCBpbnQgYml0c2l6ZTsKKysKKysgIC8qICBOb3RlcyB0aGF0IHRoZSByZWxvY2F0aW9uIGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhdGlvbiBpbiB0aGUKKysgICAgICBkYXRhIHNlY3Rpb24gb2YgdGhlIGFkZGVuZC4gIFRoZSByZWxvY2F0aW9uIGZ1bmN0aW9uIHdpbGwKKysgICAgICBzdWJ0cmFjdCBmcm9tIHRoZSByZWxvY2F0aW9uIHZhbHVlIHRoZSBhZGRyZXNzIG9mIHRoZSBsb2NhdGlvbgorKyAgICAgIGJlaW5nIHJlbG9jYXRlZC4gICovCisrICBiZmRfYm9vbGVhbiBwY19yZWxhdGl2ZTsKKysKKysgIC8qICBUaGUgYml0IHBvc2l0aW9uIG9mIHRoZSByZWxvYyB2YWx1ZSBpbiB0aGUgZGVzdGluYXRpb24uCisrICAgICAgVGhlIHJlbG9jYXRlZCB2YWx1ZSBpcyBsZWZ0IHNoaWZ0ZWQgYnkgdGhpcyBhbW91bnQuICAqLworKyAgdW5zaWduZWQgaW50IGJpdHBvczsKKysKKysgIC8qIFdoYXQgdHlwZSBvZiBvdmVyZmxvdyBlcnJvciBzaG91bGQgYmUgY2hlY2tlZCBmb3Igd2hlbgorKyAgICAgcmVsb2NhdGluZy4gICovCisrICBlbnVtIGNvbXBsYWluX292ZXJmbG93IGNvbXBsYWluX29uX292ZXJmbG93OworKworKyAgLyogSWYgdGhpcyBmaWVsZCBpcyBub24gbnVsbCwgdGhlbiB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gaXMKKysgICAgIGNhbGxlZCByYXRoZXIgdGhhbiB0aGUgbm9ybWFsIGZ1bmN0aW9uLiAgVGhpcyBhbGxvd3MgcmVhbGx5CisrICAgICBzdHJhbmdlIHJlbG9jYXRpb24gbWV0aG9kcyB0byBiZSBhY2NvbW1vZGF0ZWQgKGUuZy4sIGk5NjAgY2FsbGoKKysgICAgIGluc3RydWN0aW9ucykuICAqLworKyAgYmZkX3JlbG9jX3N0YXR1c190eXBlICgqc3BlY2lhbF9mdW5jdGlvbikKKysgICAgKGJmZCAqLCBhcmVsZW50ICosIHN0cnVjdCBiZmRfc3ltYm9sICosIHZvaWQgKiwgYXNlY3Rpb24gKiwKKysgICAgIGJmZCAqLCBjaGFyICoqKTsKKysKKysgIC8qIFRoZSB0ZXh0dWFsIG5hbWUgb2YgdGhlIHJlbG9jYXRpb24gdHlwZS4gICovCisrICBjaGFyICpuYW1lOworKworKyAgLyogU29tZSBmb3JtYXRzIHJlY29yZCBhIHJlbG9jYXRpb24gYWRkZW5kIGluIHRoZSBzZWN0aW9uIGNvbnRlbnRzCisrICAgICByYXRoZXIgdGhhbiB3aXRoIHRoZSByZWxvY2F0aW9uLiAgRm9yIEVMRiBmb3JtYXRzIHRoaXMgaXMgdGhlCisrICAgICBkaXN0aW5jdGlvbiBiZXR3ZWVuIFVTRV9SRUwgYW5kIFVTRV9SRUxBICh0aG91Z2ggdGhlIGNvZGUgY2hlY2tzCisrICAgICBmb3IgVVNFX1JFTCA9PSAxLzApLiAgVGhlIHZhbHVlIG9mIHRoaXMgZmllbGQgaXMgVFJVRSBpZiB0aGUKKysgICAgIGFkZGVuZCBpcyByZWNvcmRlZCB3aXRoIHRoZSBzZWN0aW9uIGNvbnRlbnRzOyB3aGVuIHBlcmZvcm1pbmcgYQorKyAgICAgcGFydGlhbCBsaW5rIChsZCAtcikgdGhlIHNlY3Rpb24gY29udGVudHMgKHRoZSBkYXRhKSB3aWxsIGJlCisrICAgICBtb2RpZmllZC4gIFRoZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIGlzIEZBTFNFIGlmIGFkZGVuZHMgYXJlCisrICAgICByZWNvcmRlZCB3aXRoIHRoZSByZWxvY2F0aW9uIChpbiBhcmVsZW50LmFkZGVuZCk7IHdoZW4gcGVyZm9ybWluZworKyAgICAgYSBwYXJ0aWFsIGxpbmsgdGhlIHJlbG9jYXRpb24gd2lsbCBiZSBtb2RpZmllZC4KKysgICAgIEFsbCByZWxvY2F0aW9ucyBmb3IgYWxsIEVMRiBVU0VfUkVMQSB0YXJnZXRzIHNob3VsZCBzZXQgdGhpcyBmaWVsZAorKyAgICAgdG8gRkFMU0UgKHZhbHVlcyBvZiBUUlVFIHNob3VsZCBiZSBsb29rZWQgb24gd2l0aCBzdXNwaWNpb24pLgorKyAgICAgSG93ZXZlciwgdGhlIGNvbnZlcnNlIGlzIG5vdCB0cnVlOiBub3QgYWxsIHJlbG9jYXRpb25zIG9mIGFsbCBFTEYKKysgICAgIFVTRV9SRUwgdGFyZ2V0cyBzZXQgdGhpcyBmaWVsZCB0byBUUlVFLiAgV2h5IHRoaXMgaXMgc28gaXMgcGVjdWxpYXIKKysgICAgIHRvIGVhY2ggcGFydGljdWxhciB0YXJnZXQuICBGb3IgcmVsb2NzIHRoYXQgYXJlbid0IHVzZWQgaW4gcGFydGlhbAorKyAgICAgbGlua3MgKGUuZy4gR09UIHN0dWZmKSBpdCBkb2Vzbid0IG1hdHRlciB3aGF0IHRoaXMgaXMgc2V0IHRvLiAgKi8KKysgIGJmZF9ib29sZWFuIHBhcnRpYWxfaW5wbGFjZTsKKysKKysgIC8qIHNyY19tYXNrIHNlbGVjdHMgdGhlIHBhcnQgb2YgdGhlIGluc3RydWN0aW9uIChvciBkYXRhKSB0byBiZSB1c2VkCisrICAgICBpbiB0aGUgcmVsb2NhdGlvbiBzdW0uICBJZiB0aGUgdGFyZ2V0IHJlbG9jYXRpb25zIGRvbid0IGhhdmUgYW4KKysgICAgIGFkZGVuZCBpbiB0aGUgcmVsb2MsIGVnLiBFTEYgVVNFX1JFTCwgc3JjX21hc2sgd2lsbCBub3JtYWxseSBlcXVhbAorKyAgICAgZHN0X21hc2sgdG8gZXh0cmFjdCB0aGUgYWRkZW5kIGZyb20gdGhlIHNlY3Rpb24gY29udGVudHMuICBJZgorKyAgICAgcmVsb2NhdGlvbnMgZG8gaGF2ZSBhbiBhZGRlbmQgaW4gdGhlIHJlbG9jLCBlZy4gRUxGIFVTRV9SRUxBLCB0aGlzCisrICAgICBmaWVsZCBzaG91bGQgYmUgemVyby4gIE5vbi16ZXJvIHZhbHVlcyBmb3IgRUxGIFVTRV9SRUxBIHRhcmdldHMgYXJlCisrICAgICBib2d1cyBhcyBpbiB0aG9zZSBjYXNlcyB0aGUgdmFsdWUgaW4gdGhlIGRzdF9tYXNrIHBhcnQgb2YgdGhlCisrICAgICBzZWN0aW9uIGNvbnRlbnRzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGdhcmJhZ2UuICAqLworKyAgYmZkX3ZtYSBzcmNfbWFzazsKKysKKysgIC8qIGRzdF9tYXNrIHNlbGVjdHMgd2hpY2ggcGFydHMgb2YgdGhlIGluc3RydWN0aW9uIChvciBkYXRhKSBhcmUKKysgICAgIHJlcGxhY2VkIHdpdGggYSByZWxvY2F0ZWQgdmFsdWUuICAqLworKyAgYmZkX3ZtYSBkc3RfbWFzazsKKysKKysgIC8qIFdoZW4gc29tZSBmb3JtYXRzIGNyZWF0ZSBQQyByZWxhdGl2ZSBpbnN0cnVjdGlvbnMsIHRoZXkgbGVhdmUKKysgICAgIHRoZSB2YWx1ZSBvZiB0aGUgcGMgb2YgdGhlIHBsYWNlIGJlaW5nIHJlbG9jYXRlZCBpbiB0aGUgb2Zmc2V0CisrICAgICBzbG90IG9mIHRoZSBpbnN0cnVjdGlvbiwgc28gdGhhdCBhIFBDIHJlbGF0aXZlIHJlbG9jYXRpb24gY2FuCisrICAgICBiZSBtYWRlIGp1c3QgYnkgYWRkaW5nIGluIGFuIG9yZGluYXJ5IG9mZnNldCAoZS5nLiwgc3VuMyBhLm91dCkuCisrICAgICBTb21lIGZvcm1hdHMgbGVhdmUgdGhlIGRpc3BsYWNlbWVudCBwYXJ0IG9mIGFuIGluc3RydWN0aW9uCisrICAgICBlbXB0eSAoZS5nLiwgbTg4ayBiY3MpOyB0aGlzIGZsYWcgc2lnbmFscyB0aGUgZmFjdC4gICovCisrICBiZmRfYm9vbGVhbiBwY3JlbF9vZmZzZXQ7CisrfTsKKysKKysjZGVmaW5lIEhPV1RPKEMsIFIsIFMsIEIsIFAsIEJJLCBPLCBTRiwgTkFNRSwgSU5QTEFDRSwgTUFTS1NSQywgTUFTS0RTVCwgUEMpIFwKKysgIHsgKHVuc2lnbmVkKSBDLCBSLCBTLCBCLCBQLCBCSSwgTywgU0YsIE5BTUUsIElOUExBQ0UsIE1BU0tTUkMsIE1BU0tEU1QsIFBDIH0KKysjZGVmaW5lIE5FV0hPV1RPKEZVTkNUSU9OLCBOQU1FLCBTSVpFLCBSRUwsIElOKSBcCisrICBIT1dUTyAoMCwgMCwgU0laRSwgMCwgUkVMLCAwLCBjb21wbGFpbl9vdmVyZmxvd19kb250LCBGVU5DVElPTiwgXAorKyAgICAgICAgIE5BTUUsIEZBTFNFLCAwLCAwLCBJTikKKysKKysjZGVmaW5lIEVNUFRZX0hPV1RPKEMpIFwKKysgIEhPV1RPICgoQyksIDAsIDAsIDAsIEZBTFNFLCAwLCBjb21wbGFpbl9vdmVyZmxvd19kb250LCBOVUxMLCBcCisrICAgICAgICAgTlVMTCwgRkFMU0UsIDAsIDAsIEZBTFNFKQorKworKyNkZWZpbmUgSE9XVE9fUFJFUEFSRShyZWxvY2F0aW9uLCBzeW1ib2wpICAgICAgICAgICAgICAgXAorKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBpZiAoc3ltYm9sICE9IE5VTEwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgaWYgKGJmZF9pc19jb21fc2VjdGlvbiAoc3ltYm9sLT5zZWN0aW9uKSkgICAgICAgXAorKyAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIHJlbG9jYXRpb24gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIHJlbG9jYXRpb24gPSBzeW1ib2wtPnZhbHVlOyAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfQorKworK3Vuc2lnbmVkIGludCBiZmRfZ2V0X3JlbG9jX3NpemUgKHJlbG9jX2hvd3RvX3R5cGUgKik7CisrCisrdHlwZWRlZiBzdHJ1Y3QgcmVsZW50X2NoYWluCisreworKyAgYXJlbGVudCByZWxlbnQ7CisrICBzdHJ1Y3QgcmVsZW50X2NoYWluICpuZXh0OworK30KKythcmVsZW50X2NoYWluOworKworK2JmZF9yZWxvY19zdGF0dXNfdHlwZSBiZmRfY2hlY2tfb3ZlcmZsb3cKKysgICAoZW51bSBjb21wbGFpbl9vdmVyZmxvdyBob3csCisrICAgIHVuc2lnbmVkIGludCBiaXRzaXplLAorKyAgICB1bnNpZ25lZCBpbnQgcmlnaHRzaGlmdCwKKysgICAgdW5zaWduZWQgaW50IGFkZHJzaXplLAorKyAgICBiZmRfdm1hIHJlbG9jYXRpb24pOworKworK2JmZF9yZWxvY19zdGF0dXNfdHlwZSBiZmRfcGVyZm9ybV9yZWxvY2F0aW9uCisrICAgKGJmZCAqYWJmZCwKKysgICAgYXJlbGVudCAqcmVsb2NfZW50cnksCisrICAgIHZvaWQgKmRhdGEsCisrICAgIGFzZWN0aW9uICppbnB1dF9zZWN0aW9uLAorKyAgICBiZmQgKm91dHB1dF9iZmQsCisrICAgIGNoYXIgKiplcnJvcl9tZXNzYWdlKTsKKysKKytiZmRfcmVsb2Nfc3RhdHVzX3R5cGUgYmZkX2luc3RhbGxfcmVsb2NhdGlvbgorKyAgIChiZmQgKmFiZmQsCisrICAgIGFyZWxlbnQgKnJlbG9jX2VudHJ5LAorKyAgICB2b2lkICpkYXRhLCBiZmRfdm1hIGRhdGFfc3RhcnQsCisrICAgIGFzZWN0aW9uICppbnB1dF9zZWN0aW9uLAorKyAgICBjaGFyICoqZXJyb3JfbWVzc2FnZSk7CisrCisrZW51bSBiZmRfcmVsb2NfY29kZV9yZWFsIHsKKysgIF9kdW1teV9maXJzdF9iZmRfcmVsb2NfY29kZV9yZWFsLAorKworKworKy8qIEJhc2ljIGFic29sdXRlIHJlbG9jYXRpb25zIG9mIE4gYml0cy4gICovCisrICBCRkRfUkVMT0NfNjQsCisrICBCRkRfUkVMT0NfMzIsCisrICBCRkRfUkVMT0NfMjYsCisrICBCRkRfUkVMT0NfMjQsCisrICBCRkRfUkVMT0NfMTYsCisrICBCRkRfUkVMT0NfMTQsCisrICBCRkRfUkVMT0NfOCwKKysKKysvKiBQQy1yZWxhdGl2ZSByZWxvY2F0aW9ucy4gIFNvbWV0aW1lcyB0aGVzZSBhcmUgcmVsYXRpdmUgdG8gdGhlIGFkZHJlc3MKKytvZiB0aGUgcmVsb2NhdGlvbiBpdHNlbGY7IHNvbWV0aW1lcyB0aGV5IGFyZSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YKKyt0aGUgc2VjdGlvbiBjb250YWluaW5nIHRoZSByZWxvY2F0aW9uLiAgSXQgZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWMgdGFyZ2V0LgorKworK1RoZSAyNC1iaXQgcmVsb2NhdGlvbiBpcyB1c2VkIGluIHNvbWUgSW50ZWwgOTYwIGNvbmZpZ3VyYXRpb25zLiAgKi8KKysgIEJGRF9SRUxPQ182NF9QQ1JFTCwKKysgIEJGRF9SRUxPQ18zMl9QQ1JFTCwKKysgIEJGRF9SRUxPQ18yNF9QQ1JFTCwKKysgIEJGRF9SRUxPQ18xNl9QQ1JFTCwKKysgIEJGRF9SRUxPQ18xMl9QQ1JFTCwKKysgIEJGRF9SRUxPQ184X1BDUkVMLAorKworKy8qIFNlY3Rpb24gcmVsYXRpdmUgcmVsb2NhdGlvbnMuICBTb21lIHRhcmdldHMgbmVlZCB0aGlzIGZvciBEV0FSRjIuICAqLworKyAgQkZEX1JFTE9DXzMyX1NFQ1JFTCwKKysKKysvKiBGb3IgRUxGLiAgKi8KKysgIEJGRF9SRUxPQ18zMl9HT1RfUENSRUwsCisrICBCRkRfUkVMT0NfMTZfR09UX1BDUkVMLAorKyAgQkZEX1JFTE9DXzhfR09UX1BDUkVMLAorKyAgQkZEX1JFTE9DXzMyX0dPVE9GRiwKKysgIEJGRF9SRUxPQ18xNl9HT1RPRkYsCisrICBCRkRfUkVMT0NfTE8xNl9HT1RPRkYsCisrICBCRkRfUkVMT0NfSEkxNl9HT1RPRkYsCisrICBCRkRfUkVMT0NfSEkxNl9TX0dPVE9GRiwKKysgIEJGRF9SRUxPQ184X0dPVE9GRiwKKysgIEJGRF9SRUxPQ182NF9QTFRfUENSRUwsCisrICBCRkRfUkVMT0NfMzJfUExUX1BDUkVMLAorKyAgQkZEX1JFTE9DXzI0X1BMVF9QQ1JFTCwKKysgIEJGRF9SRUxPQ18xNl9QTFRfUENSRUwsCisrICBCRkRfUkVMT0NfOF9QTFRfUENSRUwsCisrICBCRkRfUkVMT0NfNjRfUExUT0ZGLAorKyAgQkZEX1JFTE9DXzMyX1BMVE9GRiwKKysgIEJGRF9SRUxPQ18xNl9QTFRPRkYsCisrICBCRkRfUkVMT0NfTE8xNl9QTFRPRkYsCisrICBCRkRfUkVMT0NfSEkxNl9QTFRPRkYsCisrICBCRkRfUkVMT0NfSEkxNl9TX1BMVE9GRiwKKysgIEJGRF9SRUxPQ184X1BMVE9GRiwKKysKKysvKiBSZWxvY2F0aW9ucyB1c2VkIGJ5IDY4SyBFTEYuICAqLworKyAgQkZEX1JFTE9DXzY4S19HTE9CX0RBVCwKKysgIEJGRF9SRUxPQ182OEtfSk1QX1NMT1QsCisrICBCRkRfUkVMT0NfNjhLX1JFTEFUSVZFLAorKworKy8qIExpbmthZ2UtdGFibGUgcmVsYXRpdmUuICAqLworKyAgQkZEX1JFTE9DXzMyX0JBU0VSRUwsCisrICBCRkRfUkVMT0NfMTZfQkFTRVJFTCwKKysgIEJGRF9SRUxPQ19MTzE2X0JBU0VSRUwsCisrICBCRkRfUkVMT0NfSEkxNl9CQVNFUkVMLAorKyAgQkZEX1JFTE9DX0hJMTZfU19CQVNFUkVMLAorKyAgQkZEX1JFTE9DXzhfQkFTRVJFTCwKKysgIEJGRF9SRUxPQ19SVkEsCisrCisrLyogQWJzb2x1dGUgOC1iaXQgcmVsb2NhdGlvbiwgYnV0IHVzZWQgdG8gZm9ybSBhbiBhZGRyZXNzIGxpa2UgMHhGRm5uLiAgKi8KKysgIEJGRF9SRUxPQ184X0ZGbm4sCisrCisrLyogVGhlc2UgUEMtcmVsYXRpdmUgcmVsb2NhdGlvbnMgYXJlIHN0b3JlZCBhcyB3b3JkIGRpc3BsYWNlbWVudHMgLS0KKytpLmUuLCBieXRlIGRpc3BsYWNlbWVudHMgc2hpZnRlZCByaWdodCB0d28gYml0cy4gIFRoZSAzMC1iaXQgd29yZAorK2Rpc3BsYWNlbWVudCAoPDwzMl9QQ1JFTF9TMj4+IC0tIDMyIGJpdHMsIHNoaWZ0ZWQgMikgaXMgdXNlZCBvbiB0aGUKKytTUEFSQy4gIChTUEFSQyB0b29scyBnZW5lcmFsbHkgcmVmZXIgdG8gdGhpcyBhcyA8PFdESVNQMzA+Pi4pICBUaGUKKytzaWduZWQgMTYtYml0IGRpc3BsYWNlbWVudCBpcyB1c2VkIG9uIHRoZSBNSVBTLCBhbmQgdGhlIDIzLWJpdAorK2Rpc3BsYWNlbWVudCBpcyB1c2VkIG9uIHRoZSBBbHBoYS4gICovCisrICBCRkRfUkVMT0NfMzJfUENSRUxfUzIsCisrICBCRkRfUkVMT0NfMTZfUENSRUxfUzIsCisrICBCRkRfUkVMT0NfMjNfUENSRUxfUzIsCisrCisrLyogSGlnaCAyMiBiaXRzIGFuZCBsb3cgMTAgYml0cyBvZiAzMi1iaXQgdmFsdWUsIHBsYWNlZCBpbnRvIGxvd2VyIGJpdHMgb2YKKyt0aGUgdGFyZ2V0IHdvcmQuICBUaGVzZSBhcmUgdXNlZCBvbiB0aGUgU1BBUkMuICAqLworKyAgQkZEX1JFTE9DX0hJMjIsCisrICBCRkRfUkVMT0NfTE8xMCwKKysKKysvKiBGb3Igc3lzdGVtcyB0aGF0IGFsbG9jYXRlIGEgR2xvYmFsIFBvaW50ZXIgcmVnaXN0ZXIsIHRoZXNlIGFyZQorK2Rpc3BsYWNlbWVudHMgb2ZmIHRoYXQgcmVnaXN0ZXIuICBUaGVzZSByZWxvY2F0aW9uIHR5cGVzIGFyZQorK2hhbmRsZWQgc3BlY2lhbGx5LCBiZWNhdXNlIHRoZSB2YWx1ZSB0aGUgcmVnaXN0ZXIgd2lsbCBoYXZlIGlzCisrZGVjaWRlZCByZWxhdGl2ZWx5IGxhdGUuICAqLworKyAgQkZEX1JFTE9DX0dQUkVMMTYsCisrICBCRkRfUkVMT0NfR1BSRUwzMiwKKysKKysvKiBSZWxvYyB0eXBlcyB1c2VkIGZvciBpOTYwL2Iub3V0LiAgKi8KKysgIEJGRF9SRUxPQ19JOTYwX0NBTExKLAorKworKy8qIFNQQVJDIEVMRiByZWxvY2F0aW9ucy4gIFRoZXJlIGlzIHByb2JhYmx5IHNvbWUgb3ZlcmxhcCB3aXRoIG90aGVyCisrcmVsb2NhdGlvbiB0eXBlcyBhbHJlYWR5IGRlZmluZWQuICAqLworKyAgQkZEX1JFTE9DX05PTkUsCisrICBCRkRfUkVMT0NfU1BBUkNfV0RJU1AyMiwKKysgIEJGRF9SRUxPQ19TUEFSQzIyLAorKyAgQkZEX1JFTE9DX1NQQVJDMTMsCisrICBCRkRfUkVMT0NfU1BBUkNfR09UMTAsCisrICBCRkRfUkVMT0NfU1BBUkNfR09UMTMsCisrICBCRkRfUkVMT0NfU1BBUkNfR09UMjIsCisrICBCRkRfUkVMT0NfU1BBUkNfUEMxMCwKKysgIEJGRF9SRUxPQ19TUEFSQ19QQzIyLAorKyAgQkZEX1JFTE9DX1NQQVJDX1dQTFQzMCwKKysgIEJGRF9SRUxPQ19TUEFSQ19DT1BZLAorKyAgQkZEX1JFTE9DX1NQQVJDX0dMT0JfREFULAorKyAgQkZEX1JFTE9DX1NQQVJDX0pNUF9TTE9ULAorKyAgQkZEX1JFTE9DX1NQQVJDX1JFTEFUSVZFLAorKyAgQkZEX1JFTE9DX1NQQVJDX1VBMTYsCisrICBCRkRfUkVMT0NfU1BBUkNfVUEzMiwKKysgIEJGRF9SRUxPQ19TUEFSQ19VQTY0LAorKworKy8qIEkgdGhpbmsgdGhlc2UgYXJlIHNwZWNpZmljIHRvIFNQQVJDIGEub3V0IChlLmcuLCBTdW4gNCkuICAqLworKyAgQkZEX1JFTE9DX1NQQVJDX0JBU0UxMywKKysgIEJGRF9SRUxPQ19TUEFSQ19CQVNFMjIsCisrCisrLyogU1BBUkM2NCByZWxvY2F0aW9ucyAgKi8KKysjZGVmaW5lIEJGRF9SRUxPQ19TUEFSQ182NCBCRkRfUkVMT0NfNjQKKysgIEJGRF9SRUxPQ19TUEFSQ18xMCwKKysgIEJGRF9SRUxPQ19TUEFSQ18xMSwKKysgIEJGRF9SRUxPQ19TUEFSQ19PTE8xMCwKKysgIEJGRF9SRUxPQ19TUEFSQ19ISDIyLAorKyAgQkZEX1JFTE9DX1NQQVJDX0hNMTAsCisrICBCRkRfUkVMT0NfU1BBUkNfTE0yMiwKKysgIEJGRF9SRUxPQ19TUEFSQ19QQ19ISDIyLAorKyAgQkZEX1JFTE9DX1NQQVJDX1BDX0hNMTAsCisrICBCRkRfUkVMT0NfU1BBUkNfUENfTE0yMiwKKysgIEJGRF9SRUxPQ19TUEFSQ19XRElTUDE2LAorKyAgQkZEX1JFTE9DX1NQQVJDX1dESVNQMTksCisrICBCRkRfUkVMT0NfU1BBUkNfNywKKysgIEJGRF9SRUxPQ19TUEFSQ182LAorKyAgQkZEX1JFTE9DX1NQQVJDXzUsCisrI2RlZmluZSBCRkRfUkVMT0NfU1BBUkNfRElTUDY0IEJGRF9SRUxPQ182NF9QQ1JFTAorKyAgQkZEX1JFTE9DX1NQQVJDX1BMVDMyLAorKyAgQkZEX1JFTE9DX1NQQVJDX1BMVDY0LAorKyAgQkZEX1JFTE9DX1NQQVJDX0hJWDIyLAorKyAgQkZEX1JFTE9DX1NQQVJDX0xPWDEwLAorKyAgQkZEX1JFTE9DX1NQQVJDX0g0NCwKKysgIEJGRF9SRUxPQ19TUEFSQ19NNDQsCisrICBCRkRfUkVMT0NfU1BBUkNfTDQ0LAorKyAgQkZEX1JFTE9DX1NQQVJDX1JFR0lTVEVSLAorKworKy8qIFNQQVJDIGxpdHRsZSBlbmRpYW4gcmVsb2NhdGlvbiAgKi8KKysgIEJGRF9SRUxPQ19TUEFSQ19SRVYzMiwKKysKKysvKiBTUEFSQyBUTFMgcmVsb2NhdGlvbnMgICovCisrICBCRkRfUkVMT0NfU1BBUkNfVExTX0dEX0hJMjIsCisrICBCRkRfUkVMT0NfU1BBUkNfVExTX0dEX0xPMTAsCisrICBCRkRfUkVMT0NfU1BBUkNfVExTX0dEX0FERCwKKysgIEJGRF9SRUxPQ19TUEFSQ19UTFNfR0RfQ0FMTCwKKysgIEJGRF9SRUxPQ19TUEFSQ19UTFNfTERNX0hJMjIsCisrICBCRkRfUkVMT0NfU1BBUkNfVExTX0xETV9MTzEwLAorKyAgQkZEX1JFTE9DX1NQQVJDX1RMU19MRE1fQURELAorKyAgQkZEX1JFTE9DX1NQQVJDX1RMU19MRE1fQ0FMTCwKKysgIEJGRF9SRUxPQ19TUEFSQ19UTFNfTERPX0hJWDIyLAorKyAgQkZEX1JFTE9DX1NQQVJDX1RMU19MRE9fTE9YMTAsCisrICBCRkRfUkVMT0NfU1BBUkNfVExTX0xET19BREQsCisrICBCRkRfUkVMT0NfU1BBUkNfVExTX0lFX0hJMjIsCisrICBCRkRfUkVMT0NfU1BBUkNfVExTX0lFX0xPMTAsCisrICBCRkRfUkVMT0NfU1BBUkNfVExTX0lFX0xELAorKyAgQkZEX1JFTE9DX1NQQVJDX1RMU19JRV9MRFgsCisrICBCRkRfUkVMT0NfU1BBUkNfVExTX0lFX0FERCwKKysgIEJGRF9SRUxPQ19TUEFSQ19UTFNfTEVfSElYMjIsCisrICBCRkRfUkVMT0NfU1BBUkNfVExTX0xFX0xPWDEwLAorKyAgQkZEX1JFTE9DX1NQQVJDX1RMU19EVFBNT0QzMiwKKysgIEJGRF9SRUxPQ19TUEFSQ19UTFNfRFRQTU9ENjQsCisrICBCRkRfUkVMT0NfU1BBUkNfVExTX0RUUE9GRjMyLAorKyAgQkZEX1JFTE9DX1NQQVJDX1RMU19EVFBPRkY2NCwKKysgIEJGRF9SRUxPQ19TUEFSQ19UTFNfVFBPRkYzMiwKKysgIEJGRF9SRUxPQ19TUEFSQ19UTFNfVFBPRkY2NCwKKysKKysvKiBTUFUgUmVsb2NhdGlvbnMuICAqLworKyAgQkZEX1JFTE9DX1NQVV9JTU03LAorKyAgQkZEX1JFTE9DX1NQVV9JTU04LAorKyAgQkZEX1JFTE9DX1NQVV9JTU0xMCwKKysgIEJGRF9SRUxPQ19TUFVfSU1NMTBXLAorKyAgQkZEX1JFTE9DX1NQVV9JTU0xNiwKKysgIEJGRF9SRUxPQ19TUFVfSU1NMTZXLAorKyAgQkZEX1JFTE9DX1NQVV9JTU0xOCwKKysgIEJGRF9SRUxPQ19TUFVfUENSRUw5YSwKKysgIEJGRF9SRUxPQ19TUFVfUENSRUw5YiwKKysgIEJGRF9SRUxPQ19TUFVfUENSRUwxNiwKKysgIEJGRF9SRUxPQ19TUFVfTE8xNiwKKysgIEJGRF9SRUxPQ19TUFVfSEkxNiwKKysgIEJGRF9SRUxPQ19TUFVfUFBVMzIsCisrICBCRkRfUkVMT0NfU1BVX1BQVTY0LAorKworKy8qIEFscGhhIEVDT0ZGIGFuZCBFTEYgcmVsb2NhdGlvbnMuICBTb21lIG9mIHRoZXNlIHRyZWF0IHRoZSBzeW1ib2wgb3IKKysiYWRkZW5kIiBpbiBzb21lIHNwZWNpYWwgd2F5LgorK0ZvciBHUERJU1BfSEkxNiAoImdwZGlzcCIpIHJlbG9jYXRpb25zLCB0aGUgc3ltYm9sIGlzIGlnbm9yZWQgd2hlbgorK3dyaXRpbmc7IHdoZW4gcmVhZGluZywgaXQgd2lsbCBiZSB0aGUgYWJzb2x1dGUgc2VjdGlvbiBzeW1ib2wuICBUaGUKKythZGRlbmQgaXMgdGhlIGRpc3BsYWNlbWVudCBpbiBieXRlcyBvZiB0aGUgImxkYSIgaW5zdHJ1Y3Rpb24gZnJvbQorK3RoZSAibGRhaCIgaW5zdHJ1Y3Rpb24gKHdoaWNoIGlzIGF0IHRoZSBhZGRyZXNzIG9mIHRoaXMgcmVsb2MpLiAgKi8KKysgIEJGRF9SRUxPQ19BTFBIQV9HUERJU1BfSEkxNiwKKysKKysvKiBGb3IgR1BESVNQX0xPMTYgKCJpZ25vcmUiKSByZWxvY2F0aW9ucywgdGhlIHN5bWJvbCBpcyBoYW5kbGVkIGFzCisrd2l0aCBHUERJU1BfSEkxNiByZWxvY3MuICBUaGUgYWRkZW5kIGlzIGlnbm9yZWQgd2hlbiB3cml0aW5nIHRoZQorK3JlbG9jYXRpb25zIG91dCwgYW5kIGlzIGZpbGxlZCBpbiB3aXRoIHRoZSBmaWxlJ3MgR1AgdmFsdWUgb24KKytyZWFkaW5nLCBmb3IgY29udmVuaWVuY2UuICAqLworKyAgQkZEX1JFTE9DX0FMUEhBX0dQRElTUF9MTzE2LAorKworKy8qIFRoZSBFTEYgR1BESVNQIHJlbG9jYXRpb24gaXMgZXhhY3RseSB0aGUgc2FtZSBhcyB0aGUgR1BESVNQX0hJMTYKKytyZWxvY2F0aW9uIGV4Y2VwdCB0aGF0IHRoZXJlIGlzIG5vIGFjY29tcGFueWluZyBHUERJU1BfTE8xNgorK3JlbG9jYXRpb24uICAqLworKyAgQkZEX1JFTE9DX0FMUEhBX0dQRElTUCwKKysKKysvKiBUaGUgQWxwaGEgTElURVJBTC9MSVRVU0UgcmVsb2NzIGFyZSBwcm9kdWNlZCBieSBhIHN5bWJvbCByZWZlcmVuY2U7CisrdGhlIGFzc2VtYmxlciB0dXJucyBpdCBpbnRvIGEgTERRIGluc3RydWN0aW9uIHRvIGxvYWQgdGhlIGFkZHJlc3Mgb2YKKyt0aGUgc3ltYm9sLCBhbmQgdGhlbiBmaWxscyBpbiBhIHJlZ2lzdGVyIGluIHRoZSByZWFsIGluc3RydWN0aW9uLgorKworK1RoZSBMSVRFUkFMIHJlbG9jLCBhdCB0aGUgTERRIGluc3RydWN0aW9uLCByZWZlcnMgdG8gdGhlIC5saXRhCisrc2VjdGlvbiBzeW1ib2wuICBUaGUgYWRkZW5kIGlzIGlnbm9yZWQgd2hlbiB3cml0aW5nLCBidXQgaXMgZmlsbGVkCisraW4gd2l0aCB0aGUgZmlsZSdzIEdQIHZhbHVlIG9uIHJlYWRpbmcsIGZvciBjb252ZW5pZW5jZSwgYXMgd2l0aCB0aGUKKytHUERJU1BfTE8xNiByZWxvYy4KKysKKytUaGUgRUxGX0xJVEVSQUwgcmVsb2MgaXMgc29tZXdoZXJlIGJldHdlZW4gMTZfR09UT0ZGIGFuZCBHUERJU1BfTE8xNi4KKytJdCBzaG91bGQgcmVmZXIgdG8gdGhlIHN5bWJvbCB0byBiZSByZWZlcmVuY2VkLCBhcyB3aXRoIDE2X0dPVE9GRiwKKytidXQgaXQgZ2VuZXJhdGVzIG91dHB1dCBub3QgYmFzZWQgb24gdGhlIHBvc2l0aW9uIHdpdGhpbiB0aGUgLmdvdAorK3NlY3Rpb24sIGJ1dCByZWxhdGl2ZSB0byB0aGUgR1AgdmFsdWUgY2hvc2VuIGZvciB0aGUgZmlsZSBkdXJpbmcgdGhlCisrZmluYWwgbGluayBzdGFnZS4KKysKKytUaGUgTElUVVNFIHJlbG9jLCBvbiB0aGUgaW5zdHJ1Y3Rpb24gdXNpbmcgdGhlIGxvYWRlZCBhZGRyZXNzLCBnaXZlcworK2luZm9ybWF0aW9uIHRvIHRoZSBsaW5rZXIgdGhhdCBpdCBtaWdodCBiZSBhYmxlIHRvIHVzZSB0byBvcHRpbWl6ZQorK2F3YXkgc29tZSBsaXRlcmFsIHNlY3Rpb24gcmVmZXJlbmNlcy4gIFRoZSBzeW1ib2wgaXMgaWdub3JlZCAocmVhZAorK2FzIHRoZSBhYnNvbHV0ZSBzZWN0aW9uIHN5bWJvbCksIGFuZCB0aGUgImFkZGVuZCIgaW5kaWNhdGVzIHRoZSB0eXBlCisrb2YgaW5zdHJ1Y3Rpb24gdXNpbmcgdGhlIHJlZ2lzdGVyOgorKzEgLSAibWVtb3J5IiBmbXQgaW5zbgorKzIgLSBieXRlLW1hbmlwdWxhdGlvbiAoYnl0ZSBvZmZzZXQgcmVnKQorKzMgLSBqc3IgKHRhcmdldCBvZiBicmFuY2gpICAqLworKyAgQkZEX1JFTE9DX0FMUEhBX0xJVEVSQUwsCisrICBCRkRfUkVMT0NfQUxQSEFfRUxGX0xJVEVSQUwsCisrICBCRkRfUkVMT0NfQUxQSEFfTElUVVNFLAorKworKy8qIFRoZSBISU5UIHJlbG9jYXRpb24gaW5kaWNhdGVzIGEgdmFsdWUgdGhhdCBzaG91bGQgYmUgZmlsbGVkIGludG8gdGhlCisrImhpbnQiIGZpZWxkIG9mIGEgam1wL2pzci9yZXQgaW5zdHJ1Y3Rpb24sIGZvciBwb3NzaWJsZSBicmFuY2gtCisrcHJlZGljdGlvbiBsb2dpYyB3aGljaCBtYXkgYmUgcHJvdmlkZWQgb24gc29tZSBwcm9jZXNzb3JzLiAgKi8KKysgIEJGRF9SRUxPQ19BTFBIQV9ISU5ULAorKworKy8qIFRoZSBMSU5LQUdFIHJlbG9jYXRpb24gb3V0cHV0cyBhIGxpbmthZ2UgcGFpciBpbiB0aGUgb2JqZWN0IGZpbGUsCisrd2hpY2ggaXMgZmlsbGVkIGJ5IHRoZSBsaW5rZXIuICAqLworKyAgQkZEX1JFTE9DX0FMUEhBX0xJTktBR0UsCisrCisrLyogVGhlIENPREVBRERSIHJlbG9jYXRpb24gb3V0cHV0cyBhIFNUT19DQSBpbiB0aGUgb2JqZWN0IGZpbGUsCisrd2hpY2ggaXMgZmlsbGVkIGJ5IHRoZSBsaW5rZXIuICAqLworKyAgQkZEX1JFTE9DX0FMUEhBX0NPREVBRERSLAorKworKy8qIFRoZSBHUFJFTF9ISS9MTyByZWxvY2F0aW9ucyB0b2dldGhlciBmb3JtIGEgMzItYml0IG9mZnNldCBmcm9tIHRoZQorK0dQIHJlZ2lzdGVyLiAgKi8KKysgIEJGRF9SRUxPQ19BTFBIQV9HUFJFTF9ISTE2LAorKyAgQkZEX1JFTE9DX0FMUEhBX0dQUkVMX0xPMTYsCisrCisrLyogTGlrZSBCRkRfUkVMT0NfMjNfUENSRUxfUzIsIGV4Y2VwdCB0aGF0IHRoZSBzb3VyY2UgYW5kIHRhcmdldCBtdXN0Cisrc2hhcmUgYSBjb21tb24gR1AsIGFuZCB0aGUgdGFyZ2V0IGFkZHJlc3MgaXMgYWRqdXN0ZWQgZm9yCisrU1RPX0FMUEhBX1NURF9HUExPQUQuICAqLworKyAgQkZEX1JFTE9DX0FMUEhBX0JSU0dQLAorKworKy8qIEFscGhhIHRocmVhZC1sb2NhbCBzdG9yYWdlIHJlbG9jYXRpb25zLiAgKi8KKysgIEJGRF9SRUxPQ19BTFBIQV9UTFNHRCwKKysgIEJGRF9SRUxPQ19BTFBIQV9UTFNMRE0sCisrICBCRkRfUkVMT0NfQUxQSEFfRFRQTU9ENjQsCisrICBCRkRfUkVMT0NfQUxQSEFfR09URFRQUkVMMTYsCisrICBCRkRfUkVMT0NfQUxQSEFfRFRQUkVMNjQsCisrICBCRkRfUkVMT0NfQUxQSEFfRFRQUkVMX0hJMTYsCisrICBCRkRfUkVMT0NfQUxQSEFfRFRQUkVMX0xPMTYsCisrICBCRkRfUkVMT0NfQUxQSEFfRFRQUkVMMTYsCisrICBCRkRfUkVMT0NfQUxQSEFfR09UVFBSRUwxNiwKKysgIEJGRF9SRUxPQ19BTFBIQV9UUFJFTDY0LAorKyAgQkZEX1JFTE9DX0FMUEhBX1RQUkVMX0hJMTYsCisrICBCRkRfUkVMT0NfQUxQSEFfVFBSRUxfTE8xNiwKKysgIEJGRF9SRUxPQ19BTFBIQV9UUFJFTDE2LAorKworKy8qIEJpdHMgMjcuLjIgb2YgdGhlIHJlbG9jYXRpb24gYWRkcmVzcyBzaGlmdGVkIHJpZ2h0IDIgYml0czsKKytzaW1wbGUgcmVsb2Mgb3RoZXJ3aXNlLiAgKi8KKysgIEJGRF9SRUxPQ19NSVBTX0pNUCwKKysKKysvKiBUaGUgTUlQUzE2IGp1bXAgaW5zdHJ1Y3Rpb24uICAqLworKyAgQkZEX1JFTE9DX01JUFMxNl9KTVAsCisrCisrLyogTUlQUzE2IEdQIHJlbGF0aXZlIHJlbG9jLiAgKi8KKysgIEJGRF9SRUxPQ19NSVBTMTZfR1BSRUwsCisrCisrLyogSGlnaCAxNiBiaXRzIG9mIDMyLWJpdCB2YWx1ZTsgc2ltcGxlIHJlbG9jLiAgKi8KKysgIEJGRF9SRUxPQ19ISTE2LAorKworKy8qIEhpZ2ggMTYgYml0cyBvZiAzMi1iaXQgdmFsdWUgYnV0IHRoZSBsb3cgMTYgYml0cyB3aWxsIGJlIHNpZ24KKytleHRlbmRlZCBhbmQgYWRkZWQgdG8gZm9ybSB0aGUgZmluYWwgcmVzdWx0LiAgSWYgdGhlIGxvdyAxNgorK2JpdHMgZm9ybSBhIG5lZ2F0aXZlIG51bWJlciwgd2UgbmVlZCB0byBhZGQgb25lIHRvIHRoZSBoaWdoIHZhbHVlCisrdG8gY29tcGVuc2F0ZSBmb3IgdGhlIGJvcnJvdyB3aGVuIHRoZSBsb3cgYml0cyBhcmUgYWRkZWQuICAqLworKyAgQkZEX1JFTE9DX0hJMTZfUywKKysKKysvKiBMb3cgMTYgYml0cy4gICovCisrICBCRkRfUkVMT0NfTE8xNiwKKysKKysvKiBIaWdoIDE2IGJpdHMgb2YgMzItYml0IHBjLXJlbGF0aXZlIHZhbHVlICAqLworKyAgQkZEX1JFTE9DX0hJMTZfUENSRUwsCisrCisrLyogSGlnaCAxNiBiaXRzIG9mIDMyLWJpdCBwYy1yZWxhdGl2ZSB2YWx1ZSwgYWRqdXN0ZWQgICovCisrICBCRkRfUkVMT0NfSEkxNl9TX1BDUkVMLAorKworKy8qIExvdyAxNiBiaXRzIG9mIHBjLXJlbGF0aXZlIHZhbHVlICAqLworKyAgQkZEX1JFTE9DX0xPMTZfUENSRUwsCisrCisrLyogTUlQUzE2IGhpZ2ggMTYgYml0cyBvZiAzMi1iaXQgdmFsdWUuICAqLworKyAgQkZEX1JFTE9DX01JUFMxNl9ISTE2LAorKworKy8qIE1JUFMxNiBoaWdoIDE2IGJpdHMgb2YgMzItYml0IHZhbHVlIGJ1dCB0aGUgbG93IDE2IGJpdHMgd2lsbCBiZSBzaWduCisrZXh0ZW5kZWQgYW5kIGFkZGVkIHRvIGZvcm0gdGhlIGZpbmFsIHJlc3VsdC4gIElmIHRoZSBsb3cgMTYKKytiaXRzIGZvcm0gYSBuZWdhdGl2ZSBudW1iZXIsIHdlIG5lZWQgdG8gYWRkIG9uZSB0byB0aGUgaGlnaCB2YWx1ZQorK3RvIGNvbXBlbnNhdGUgZm9yIHRoZSBib3Jyb3cgd2hlbiB0aGUgbG93IGJpdHMgYXJlIGFkZGVkLiAgKi8KKysgIEJGRF9SRUxPQ19NSVBTMTZfSEkxNl9TLAorKworKy8qIE1JUFMxNiBsb3cgMTYgYml0cy4gICovCisrICBCRkRfUkVMT0NfTUlQUzE2X0xPMTYsCisrCisrLyogUmVsb2NhdGlvbiBhZ2FpbnN0IGEgTUlQUyBsaXRlcmFsIHNlY3Rpb24uICAqLworKyAgQkZEX1JFTE9DX01JUFNfTElURVJBTCwKKysKKysvKiBNSVBTIEVMRiByZWxvY2F0aW9ucy4gICovCisrICBCRkRfUkVMT0NfTUlQU19HT1QxNiwKKysgIEJGRF9SRUxPQ19NSVBTX0NBTEwxNiwKKysgIEJGRF9SRUxPQ19NSVBTX0dPVF9ISTE2LAorKyAgQkZEX1JFTE9DX01JUFNfR09UX0xPMTYsCisrICBCRkRfUkVMT0NfTUlQU19DQUxMX0hJMTYsCisrICBCRkRfUkVMT0NfTUlQU19DQUxMX0xPMTYsCisrICBCRkRfUkVMT0NfTUlQU19TVUIsCisrICBCRkRfUkVMT0NfTUlQU19HT1RfUEFHRSwKKysgIEJGRF9SRUxPQ19NSVBTX0dPVF9PRlNULAorKyAgQkZEX1JFTE9DX01JUFNfR09UX0RJU1AsCisrICBCRkRfUkVMT0NfTUlQU19TSElGVDUsCisrICBCRkRfUkVMT0NfTUlQU19TSElGVDYsCisrICBCRkRfUkVMT0NfTUlQU19JTlNFUlRfQSwKKysgIEJGRF9SRUxPQ19NSVBTX0lOU0VSVF9CLAorKyAgQkZEX1JFTE9DX01JUFNfREVMRVRFLAorKyAgQkZEX1JFTE9DX01JUFNfSElHSEVTVCwKKysgIEJGRF9SRUxPQ19NSVBTX0hJR0hFUiwKKysgIEJGRF9SRUxPQ19NSVBTX1NDTl9ESVNQLAorKyAgQkZEX1JFTE9DX01JUFNfUkVMMTYsCisrICBCRkRfUkVMT0NfTUlQU19SRUxHT1QsCisrICBCRkRfUkVMT0NfTUlQU19KQUxSLAorKyAgQkZEX1JFTE9DX01JUFNfVExTX0RUUE1PRDMyLAorKyAgQkZEX1JFTE9DX01JUFNfVExTX0RUUFJFTDMyLAorKyAgQkZEX1JFTE9DX01JUFNfVExTX0RUUE1PRDY0LAorKyAgQkZEX1JFTE9DX01JUFNfVExTX0RUUFJFTDY0LAorKyAgQkZEX1JFTE9DX01JUFNfVExTX0dELAorKyAgQkZEX1JFTE9DX01JUFNfVExTX0xETSwKKysgIEJGRF9SRUxPQ19NSVBTX1RMU19EVFBSRUxfSEkxNiwKKysgIEJGRF9SRUxPQ19NSVBTX1RMU19EVFBSRUxfTE8xNiwKKysgIEJGRF9SRUxPQ19NSVBTX1RMU19HT1RUUFJFTCwKKysgIEJGRF9SRUxPQ19NSVBTX1RMU19UUFJFTDMyLAorKyAgQkZEX1JFTE9DX01JUFNfVExTX1RQUkVMNjQsCisrICBCRkRfUkVMT0NfTUlQU19UTFNfVFBSRUxfSEkxNiwKKysgIEJGRF9SRUxPQ19NSVBTX1RMU19UUFJFTF9MTzE2LAorKworKworKy8qIE1JUFMgRUxGIHJlbG9jYXRpb25zIChWeFdvcmtzIGV4dGVuc2lvbnMpLiAgKi8KKysgIEJGRF9SRUxPQ19NSVBTX0NPUFksCisrICBCRkRfUkVMT0NfTUlQU19KVU1QX1NMT1QsCisrCisrCisrLyogRnVqaXRzdSBGcnYgUmVsb2NhdGlvbnMuICAqLworKyAgQkZEX1JFTE9DX0ZSVl9MQUJFTDE2LAorKyAgQkZEX1JFTE9DX0ZSVl9MQUJFTDI0LAorKyAgQkZEX1JFTE9DX0ZSVl9MTzE2LAorKyAgQkZEX1JFTE9DX0ZSVl9ISTE2LAorKyAgQkZEX1JFTE9DX0ZSVl9HUFJFTDEyLAorKyAgQkZEX1JFTE9DX0ZSVl9HUFJFTFUxMiwKKysgIEJGRF9SRUxPQ19GUlZfR1BSRUwzMiwKKysgIEJGRF9SRUxPQ19GUlZfR1BSRUxISSwKKysgIEJGRF9SRUxPQ19GUlZfR1BSRUxMTywKKysgIEJGRF9SRUxPQ19GUlZfR09UMTIsCisrICBCRkRfUkVMT0NfRlJWX0dPVEhJLAorKyAgQkZEX1JFTE9DX0ZSVl9HT1RMTywKKysgIEJGRF9SRUxPQ19GUlZfRlVOQ0RFU0MsCisrICBCRkRfUkVMT0NfRlJWX0ZVTkNERVNDX0dPVDEyLAorKyAgQkZEX1JFTE9DX0ZSVl9GVU5DREVTQ19HT1RISSwKKysgIEJGRF9SRUxPQ19GUlZfRlVOQ0RFU0NfR09UTE8sCisrICBCRkRfUkVMT0NfRlJWX0ZVTkNERVNDX1ZBTFVFLAorKyAgQkZEX1JFTE9DX0ZSVl9GVU5DREVTQ19HT1RPRkYxMiwKKysgIEJGRF9SRUxPQ19GUlZfRlVOQ0RFU0NfR09UT0ZGSEksCisrICBCRkRfUkVMT0NfRlJWX0ZVTkNERVNDX0dPVE9GRkxPLAorKyAgQkZEX1JFTE9DX0ZSVl9HT1RPRkYxMiwKKysgIEJGRF9SRUxPQ19GUlZfR09UT0ZGSEksCisrICBCRkRfUkVMT0NfRlJWX0dPVE9GRkxPLAorKyAgQkZEX1JFTE9DX0ZSVl9HRVRUTFNPRkYsCisrICBCRkRfUkVMT0NfRlJWX1RMU0RFU0NfVkFMVUUsCisrICBCRkRfUkVMT0NfRlJWX0dPVFRMU0RFU0MxMiwKKysgIEJGRF9SRUxPQ19GUlZfR09UVExTREVTQ0hJLAorKyAgQkZEX1JFTE9DX0ZSVl9HT1RUTFNERVNDTE8sCisrICBCRkRfUkVMT0NfRlJWX1RMU01PRkYxMiwKKysgIEJGRF9SRUxPQ19GUlZfVExTTU9GRkhJLAorKyAgQkZEX1JFTE9DX0ZSVl9UTFNNT0ZGTE8sCisrICBCRkRfUkVMT0NfRlJWX0dPVFRMU09GRjEyLAorKyAgQkZEX1JFTE9DX0ZSVl9HT1RUTFNPRkZISSwKKysgIEJGRF9SRUxPQ19GUlZfR09UVExTT0ZGTE8sCisrICBCRkRfUkVMT0NfRlJWX1RMU09GRiwKKysgIEJGRF9SRUxPQ19GUlZfVExTREVTQ19SRUxBWCwKKysgIEJGRF9SRUxPQ19GUlZfR0VUVExTT0ZGX1JFTEFYLAorKyAgQkZEX1JFTE9DX0ZSVl9UTFNPRkZfUkVMQVgsCisrICBCRkRfUkVMT0NfRlJWX1RMU01PRkYsCisrCisrCisrLyogVGhpcyBpcyBhIDI0Yml0IEdPVC1yZWxhdGl2ZSByZWxvYyBmb3IgdGhlIG1uMTAzMDAuICAqLworKyAgQkZEX1JFTE9DX01OMTAzMDBfR09UT0ZGMjQsCisrCisrLyogVGhpcyBpcyBhIDMyYml0IEdPVC1yZWxhdGl2ZSByZWxvYyBmb3IgdGhlIG1uMTAzMDAsIG9mZnNldCBieSB0d28gYnl0ZXMKKytpbiB0aGUgaW5zdHJ1Y3Rpb24uICAqLworKyAgQkZEX1JFTE9DX01OMTAzMDBfR09UMzIsCisrCisrLyogVGhpcyBpcyBhIDI0Yml0IEdPVC1yZWxhdGl2ZSByZWxvYyBmb3IgdGhlIG1uMTAzMDAsIG9mZnNldCBieSB0d28gYnl0ZXMKKytpbiB0aGUgaW5zdHJ1Y3Rpb24uICAqLworKyAgQkZEX1JFTE9DX01OMTAzMDBfR09UMjQsCisrCisrLyogVGhpcyBpcyBhIDE2Yml0IEdPVC1yZWxhdGl2ZSByZWxvYyBmb3IgdGhlIG1uMTAzMDAsIG9mZnNldCBieSB0d28gYnl0ZXMKKytpbiB0aGUgaW5zdHJ1Y3Rpb24uICAqLworKyAgQkZEX1JFTE9DX01OMTAzMDBfR09UMTYsCisrCisrLyogQ29weSBzeW1ib2wgYXQgcnVudGltZS4gICovCisrICBCRkRfUkVMT0NfTU4xMDMwMF9DT1BZLAorKworKy8qIENyZWF0ZSBHT1QgZW50cnkuICAqLworKyAgQkZEX1JFTE9DX01OMTAzMDBfR0xPQl9EQVQsCisrCisrLyogQ3JlYXRlIFBMVCBlbnRyeS4gICovCisrICBCRkRfUkVMT0NfTU4xMDMwMF9KTVBfU0xPVCwKKysKKysvKiBBZGp1c3QgYnkgcHJvZ3JhbSBiYXNlLiAgKi8KKysgIEJGRF9SRUxPQ19NTjEwMzAwX1JFTEFUSVZFLAorKworKworKy8qIGkzODYvZWxmIHJlbG9jYXRpb25zICAqLworKyAgQkZEX1JFTE9DXzM4Nl9HT1QzMiwKKysgIEJGRF9SRUxPQ18zODZfUExUMzIsCisrICBCRkRfUkVMT0NfMzg2X0NPUFksCisrICBCRkRfUkVMT0NfMzg2X0dMT0JfREFULAorKyAgQkZEX1JFTE9DXzM4Nl9KVU1QX1NMT1QsCisrICBCRkRfUkVMT0NfMzg2X1JFTEFUSVZFLAorKyAgQkZEX1JFTE9DXzM4Nl9HT1RPRkYsCisrICBCRkRfUkVMT0NfMzg2X0dPVFBDLAorKyAgQkZEX1JFTE9DXzM4Nl9UTFNfVFBPRkYsCisrICBCRkRfUkVMT0NfMzg2X1RMU19JRSwKKysgIEJGRF9SRUxPQ18zODZfVExTX0dPVElFLAorKyAgQkZEX1JFTE9DXzM4Nl9UTFNfTEUsCisrICBCRkRfUkVMT0NfMzg2X1RMU19HRCwKKysgIEJGRF9SRUxPQ18zODZfVExTX0xETSwKKysgIEJGRF9SRUxPQ18zODZfVExTX0xET18zMiwKKysgIEJGRF9SRUxPQ18zODZfVExTX0lFXzMyLAorKyAgQkZEX1JFTE9DXzM4Nl9UTFNfTEVfMzIsCisrICBCRkRfUkVMT0NfMzg2X1RMU19EVFBNT0QzMiwKKysgIEJGRF9SRUxPQ18zODZfVExTX0RUUE9GRjMyLAorKyAgQkZEX1JFTE9DXzM4Nl9UTFNfVFBPRkYzMiwKKysgIEJGRF9SRUxPQ18zODZfVExTX0dPVERFU0MsCisrICBCRkRfUkVMT0NfMzg2X1RMU19ERVNDX0NBTEwsCisrICBCRkRfUkVMT0NfMzg2X1RMU19ERVNDLAorKworKy8qIHg4Ni02NC9lbGYgcmVsb2NhdGlvbnMgICovCisrICBCRkRfUkVMT0NfWDg2XzY0X0dPVDMyLAorKyAgQkZEX1JFTE9DX1g4Nl82NF9QTFQzMiwKKysgIEJGRF9SRUxPQ19YODZfNjRfQ09QWSwKKysgIEJGRF9SRUxPQ19YODZfNjRfR0xPQl9EQVQsCisrICBCRkRfUkVMT0NfWDg2XzY0X0pVTVBfU0xPVCwKKysgIEJGRF9SRUxPQ19YODZfNjRfUkVMQVRJVkUsCisrICBCRkRfUkVMT0NfWDg2XzY0X0dPVFBDUkVMLAorKyAgQkZEX1JFTE9DX1g4Nl82NF8zMlMsCisrICBCRkRfUkVMT0NfWDg2XzY0X0RUUE1PRDY0LAorKyAgQkZEX1JFTE9DX1g4Nl82NF9EVFBPRkY2NCwKKysgIEJGRF9SRUxPQ19YODZfNjRfVFBPRkY2NCwKKysgIEJGRF9SRUxPQ19YODZfNjRfVExTR0QsCisrICBCRkRfUkVMT0NfWDg2XzY0X1RMU0xELAorKyAgQkZEX1JFTE9DX1g4Nl82NF9EVFBPRkYzMiwKKysgIEJGRF9SRUxPQ19YODZfNjRfR09UVFBPRkYsCisrICBCRkRfUkVMT0NfWDg2XzY0X1RQT0ZGMzIsCisrICBCRkRfUkVMT0NfWDg2XzY0X0dPVE9GRjY0LAorKyAgQkZEX1JFTE9DX1g4Nl82NF9HT1RQQzMyLAorKyAgQkZEX1JFTE9DX1g4Nl82NF9HT1Q2NCwKKysgIEJGRF9SRUxPQ19YODZfNjRfR09UUENSRUw2NCwKKysgIEJGRF9SRUxPQ19YODZfNjRfR09UUEM2NCwKKysgIEJGRF9SRUxPQ19YODZfNjRfR09UUExUNjQsCisrICBCRkRfUkVMT0NfWDg2XzY0X1BMVE9GRjY0LAorKyAgQkZEX1JFTE9DX1g4Nl82NF9HT1RQQzMyX1RMU0RFU0MsCisrICBCRkRfUkVMT0NfWDg2XzY0X1RMU0RFU0NfQ0FMTCwKKysgIEJGRF9SRUxPQ19YODZfNjRfVExTREVTQywKKysKKysvKiBuczMyayByZWxvY2F0aW9ucyAgKi8KKysgIEJGRF9SRUxPQ19OUzMyS19JTU1fOCwKKysgIEJGRF9SRUxPQ19OUzMyS19JTU1fMTYsCisrICBCRkRfUkVMT0NfTlMzMktfSU1NXzMyLAorKyAgQkZEX1JFTE9DX05TMzJLX0lNTV84X1BDUkVMLAorKyAgQkZEX1JFTE9DX05TMzJLX0lNTV8xNl9QQ1JFTCwKKysgIEJGRF9SRUxPQ19OUzMyS19JTU1fMzJfUENSRUwsCisrICBCRkRfUkVMT0NfTlMzMktfRElTUF84LAorKyAgQkZEX1JFTE9DX05TMzJLX0RJU1BfMTYsCisrICBCRkRfUkVMT0NfTlMzMktfRElTUF8zMiwKKysgIEJGRF9SRUxPQ19OUzMyS19ESVNQXzhfUENSRUwsCisrICBCRkRfUkVMT0NfTlMzMktfRElTUF8xNl9QQ1JFTCwKKysgIEJGRF9SRUxPQ19OUzMyS19ESVNQXzMyX1BDUkVMLAorKworKy8qIFBEUDExIHJlbG9jYXRpb25zICAqLworKyAgQkZEX1JFTE9DX1BEUDExX0RJU1BfOF9QQ1JFTCwKKysgIEJGRF9SRUxPQ19QRFAxMV9ESVNQXzZfUENSRUwsCisrCisrLyogUGljb2phdmEgcmVsb2NzLiAgTm90IGFsbCBvZiB0aGVzZSBhcHBlYXIgaW4gb2JqZWN0IGZpbGVzLiAgKi8KKysgIEJGRF9SRUxPQ19QSl9DT0RFX0hJMTYsCisrICBCRkRfUkVMT0NfUEpfQ09ERV9MTzE2LAorKyAgQkZEX1JFTE9DX1BKX0NPREVfRElSMTYsCisrICBCRkRfUkVMT0NfUEpfQ09ERV9ESVIzMiwKKysgIEJGRF9SRUxPQ19QSl9DT0RFX1JFTDE2LAorKyAgQkZEX1JFTE9DX1BKX0NPREVfUkVMMzIsCisrCisrLyogUG93ZXIocnM2MDAwKSBhbmQgUG93ZXJQQyByZWxvY2F0aW9ucy4gICovCisrICBCRkRfUkVMT0NfUFBDX0IyNiwKKysgIEJGRF9SRUxPQ19QUENfQkEyNiwKKysgIEJGRF9SRUxPQ19QUENfVE9DMTYsCisrICBCRkRfUkVMT0NfUFBDX0IxNiwKKysgIEJGRF9SRUxPQ19QUENfQjE2X0JSVEFLRU4sCisrICBCRkRfUkVMT0NfUFBDX0IxNl9CUk5UQUtFTiwKKysgIEJGRF9SRUxPQ19QUENfQkExNiwKKysgIEJGRF9SRUxPQ19QUENfQkExNl9CUlRBS0VOLAorKyAgQkZEX1JFTE9DX1BQQ19CQTE2X0JSTlRBS0VOLAorKyAgQkZEX1JFTE9DX1BQQ19DT1BZLAorKyAgQkZEX1JFTE9DX1BQQ19HTE9CX0RBVCwKKysgIEJGRF9SRUxPQ19QUENfSk1QX1NMT1QsCisrICBCRkRfUkVMT0NfUFBDX1JFTEFUSVZFLAorKyAgQkZEX1JFTE9DX1BQQ19MT0NBTDI0UEMsCisrICBCRkRfUkVMT0NfUFBDX0VNQl9OQUREUjMyLAorKyAgQkZEX1JFTE9DX1BQQ19FTUJfTkFERFIxNiwKKysgIEJGRF9SRUxPQ19QUENfRU1CX05BRERSMTZfTE8sCisrICBCRkRfUkVMT0NfUFBDX0VNQl9OQUREUjE2X0hJLAorKyAgQkZEX1JFTE9DX1BQQ19FTUJfTkFERFIxNl9IQSwKKysgIEJGRF9SRUxPQ19QUENfRU1CX1NEQUkxNiwKKysgIEJGRF9SRUxPQ19QUENfRU1CX1NEQTJJMTYsCisrICBCRkRfUkVMT0NfUFBDX0VNQl9TREEyUkVMLAorKyAgQkZEX1JFTE9DX1BQQ19FTUJfU0RBMjEsCisrICBCRkRfUkVMT0NfUFBDX0VNQl9NUktSRUYsCisrICBCRkRfUkVMT0NfUFBDX0VNQl9SRUxTRUMxNiwKKysgIEJGRF9SRUxPQ19QUENfRU1CX1JFTFNUX0xPLAorKyAgQkZEX1JFTE9DX1BQQ19FTUJfUkVMU1RfSEksCisrICBCRkRfUkVMT0NfUFBDX0VNQl9SRUxTVF9IQSwKKysgIEJGRF9SRUxPQ19QUENfRU1CX0JJVF9GTEQsCisrICBCRkRfUkVMT0NfUFBDX0VNQl9SRUxTREEsCisrICBCRkRfUkVMT0NfUFBDNjRfSElHSEVSLAorKyAgQkZEX1JFTE9DX1BQQzY0X0hJR0hFUl9TLAorKyAgQkZEX1JFTE9DX1BQQzY0X0hJR0hFU1QsCisrICBCRkRfUkVMT0NfUFBDNjRfSElHSEVTVF9TLAorKyAgQkZEX1JFTE9DX1BQQzY0X1RPQzE2X0xPLAorKyAgQkZEX1JFTE9DX1BQQzY0X1RPQzE2X0hJLAorKyAgQkZEX1JFTE9DX1BQQzY0X1RPQzE2X0hBLAorKyAgQkZEX1JFTE9DX1BQQzY0X1RPQywKKysgIEJGRF9SRUxPQ19QUEM2NF9QTFRHT1QxNiwKKysgIEJGRF9SRUxPQ19QUEM2NF9QTFRHT1QxNl9MTywKKysgIEJGRF9SRUxPQ19QUEM2NF9QTFRHT1QxNl9ISSwKKysgIEJGRF9SRUxPQ19QUEM2NF9QTFRHT1QxNl9IQSwKKysgIEJGRF9SRUxPQ19QUEM2NF9BRERSMTZfRFMsCisrICBCRkRfUkVMT0NfUFBDNjRfQUREUjE2X0xPX0RTLAorKyAgQkZEX1JFTE9DX1BQQzY0X0dPVDE2X0RTLAorKyAgQkZEX1JFTE9DX1BQQzY0X0dPVDE2X0xPX0RTLAorKyAgQkZEX1JFTE9DX1BQQzY0X1BMVDE2X0xPX0RTLAorKyAgQkZEX1JFTE9DX1BQQzY0X1NFQ1RPRkZfRFMsCisrICBCRkRfUkVMT0NfUFBDNjRfU0VDVE9GRl9MT19EUywKKysgIEJGRF9SRUxPQ19QUEM2NF9UT0MxNl9EUywKKysgIEJGRF9SRUxPQ19QUEM2NF9UT0MxNl9MT19EUywKKysgIEJGRF9SRUxPQ19QUEM2NF9QTFRHT1QxNl9EUywKKysgIEJGRF9SRUxPQ19QUEM2NF9QTFRHT1QxNl9MT19EUywKKysKKysvKiBQb3dlclBDIGFuZCBQb3dlclBDNjQgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgcmVsb2NhdGlvbnMuICAqLworKyAgQkZEX1JFTE9DX1BQQ19UTFMsCisrICBCRkRfUkVMT0NfUFBDX0RUUE1PRCwKKysgIEJGRF9SRUxPQ19QUENfVFBSRUwxNiwKKysgIEJGRF9SRUxPQ19QUENfVFBSRUwxNl9MTywKKysgIEJGRF9SRUxPQ19QUENfVFBSRUwxNl9ISSwKKysgIEJGRF9SRUxPQ19QUENfVFBSRUwxNl9IQSwKKysgIEJGRF9SRUxPQ19QUENfVFBSRUwsCisrICBCRkRfUkVMT0NfUFBDX0RUUFJFTDE2LAorKyAgQkZEX1JFTE9DX1BQQ19EVFBSRUwxNl9MTywKKysgIEJGRF9SRUxPQ19QUENfRFRQUkVMMTZfSEksCisrICBCRkRfUkVMT0NfUFBDX0RUUFJFTDE2X0hBLAorKyAgQkZEX1JFTE9DX1BQQ19EVFBSRUwsCisrICBCRkRfUkVMT0NfUFBDX0dPVF9UTFNHRDE2LAorKyAgQkZEX1JFTE9DX1BQQ19HT1RfVExTR0QxNl9MTywKKysgIEJGRF9SRUxPQ19QUENfR09UX1RMU0dEMTZfSEksCisrICBCRkRfUkVMT0NfUFBDX0dPVF9UTFNHRDE2X0hBLAorKyAgQkZEX1JFTE9DX1BQQ19HT1RfVExTTEQxNiwKKysgIEJGRF9SRUxPQ19QUENfR09UX1RMU0xEMTZfTE8sCisrICBCRkRfUkVMT0NfUFBDX0dPVF9UTFNMRDE2X0hJLAorKyAgQkZEX1JFTE9DX1BQQ19HT1RfVExTTEQxNl9IQSwKKysgIEJGRF9SRUxPQ19QUENfR09UX1RQUkVMMTYsCisrICBCRkRfUkVMT0NfUFBDX0dPVF9UUFJFTDE2X0xPLAorKyAgQkZEX1JFTE9DX1BQQ19HT1RfVFBSRUwxNl9ISSwKKysgIEJGRF9SRUxPQ19QUENfR09UX1RQUkVMMTZfSEEsCisrICBCRkRfUkVMT0NfUFBDX0dPVF9EVFBSRUwxNiwKKysgIEJGRF9SRUxPQ19QUENfR09UX0RUUFJFTDE2X0xPLAorKyAgQkZEX1JFTE9DX1BQQ19HT1RfRFRQUkVMMTZfSEksCisrICBCRkRfUkVMT0NfUFBDX0dPVF9EVFBSRUwxNl9IQSwKKysgIEJGRF9SRUxPQ19QUEM2NF9UUFJFTDE2X0RTLAorKyAgQkZEX1JFTE9DX1BQQzY0X1RQUkVMMTZfTE9fRFMsCisrICBCRkRfUkVMT0NfUFBDNjRfVFBSRUwxNl9ISUdIRVIsCisrICBCRkRfUkVMT0NfUFBDNjRfVFBSRUwxNl9ISUdIRVJBLAorKyAgQkZEX1JFTE9DX1BQQzY0X1RQUkVMMTZfSElHSEVTVCwKKysgIEJGRF9SRUxPQ19QUEM2NF9UUFJFTDE2X0hJR0hFU1RBLAorKyAgQkZEX1JFTE9DX1BQQzY0X0RUUFJFTDE2X0RTLAorKyAgQkZEX1JFTE9DX1BQQzY0X0RUUFJFTDE2X0xPX0RTLAorKyAgQkZEX1JFTE9DX1BQQzY0X0RUUFJFTDE2X0hJR0hFUiwKKysgIEJGRF9SRUxPQ19QUEM2NF9EVFBSRUwxNl9ISUdIRVJBLAorKyAgQkZEX1JFTE9DX1BQQzY0X0RUUFJFTDE2X0hJR0hFU1QsCisrICBCRkRfUkVMT0NfUFBDNjRfRFRQUkVMMTZfSElHSEVTVEEsCisrCisrLyogSUJNIDM3MC8zOTAgcmVsb2NhdGlvbnMgICovCisrICBCRkRfUkVMT0NfSTM3MF9EMTIsCisrCisrLyogVGhlIHR5cGUgb2YgcmVsb2MgdXNlZCB0byBidWlsZCBhIGNvbnN0cnVjdG9yIHRhYmxlIC0gYXQgdGhlIG1vbWVudAorK3Byb2JhYmx5IGEgMzIgYml0IHdpZGUgYWJzb2x1dGUgcmVsb2NhdGlvbiwgYnV0IHRoZSB0YXJnZXQgY2FuIGNob29zZS4KKytJdCBnZW5lcmFsbHkgZG9lcyBtYXAgdG8gb25lIG9mIHRoZSBvdGhlciByZWxvY2F0aW9uIHR5cGVzLiAgKi8KKysgIEJGRF9SRUxPQ19DVE9SLAorKworKy8qIEFSTSAyNiBiaXQgcGMtcmVsYXRpdmUgYnJhbmNoLiAgVGhlIGxvd2VzdCB0d28gYml0cyBtdXN0IGJlIHplcm8gYW5kIGFyZQorK25vdCBzdG9yZWQgaW4gdGhlIGluc3RydWN0aW9uLiAgKi8KKysgIEJGRF9SRUxPQ19BUk1fUENSRUxfQlJBTkNILAorKworKy8qIEFSTSAyNiBiaXQgcGMtcmVsYXRpdmUgYnJhbmNoLiAgVGhlIGxvd2VzdCBiaXQgbXVzdCBiZSB6ZXJvIGFuZCBpcworK25vdCBzdG9yZWQgaW4gdGhlIGluc3RydWN0aW9uLiAgVGhlIDJuZCBsb3dlc3QgYml0IGNvbWVzIGZyb20gYSAxIGJpdAorK2ZpZWxkIGluIHRoZSBpbnN0cnVjdGlvbi4gICovCisrICBCRkRfUkVMT0NfQVJNX1BDUkVMX0JMWCwKKysKKysvKiBUaHVtYiAyMiBiaXQgcGMtcmVsYXRpdmUgYnJhbmNoLiAgVGhlIGxvd2VzdCBiaXQgbXVzdCBiZSB6ZXJvIGFuZCBpcworK25vdCBzdG9yZWQgaW4gdGhlIGluc3RydWN0aW9uLiAgVGhlIDJuZCBsb3dlc3QgYml0IGNvbWVzIGZyb20gYSAxIGJpdAorK2ZpZWxkIGluIHRoZSBpbnN0cnVjdGlvbi4gICovCisrICBCRkRfUkVMT0NfVEhVTUJfUENSRUxfQkxYLAorKworKy8qIEFSTSAyNi1iaXQgcGMtcmVsYXRpdmUgYnJhbmNoIGZvciBhbiB1bmNvbmRpdGlvbmFsIEJMIG9yIEJMWCBpbnN0cnVjdGlvbi4gICovCisrICBCRkRfUkVMT0NfQVJNX1BDUkVMX0NBTEwsCisrCisrLyogQVJNIDI2LWJpdCBwYy1yZWxhdGl2ZSBicmFuY2ggZm9yIEIgb3IgY29uZGl0aW9uYWwgQkwgaW5zdHJ1Y3Rpb24uICAqLworKyAgQkZEX1JFTE9DX0FSTV9QQ1JFTF9KVU1QLAorKworKy8qIFRodW1iIDctLCA5LSwgMTItLCAyMC0sIDIzLSwgYW5kIDI1LWJpdCBwYy1yZWxhdGl2ZSBicmFuY2hlcy4KKytUaGUgbG93ZXN0IGJpdCBtdXN0IGJlIHplcm8gYW5kIGlzIG5vdCBzdG9yZWQgaW4gdGhlIGluc3RydWN0aW9uLgorK05vdGUgdGhhdCB0aGUgY29ycmVzcG9uZGluZyBFTEYgUl9BUk1fVEhNX0pVTVBubiBjb25zdGFudCBoYXMgYW4KKysibm4iIG9uZSBzbWFsbGVyIGluIGFsbCBjYXNlcy4gIE5vdGUgZnVydGhlciB0aGF0IEJSQU5DSDIzCisrY29ycmVzcG9uZHMgdG8gUl9BUk1fVEhNX0NBTEwuICAqLworKyAgQkZEX1JFTE9DX1RIVU1CX1BDUkVMX0JSQU5DSDcsCisrICBCRkRfUkVMT0NfVEhVTUJfUENSRUxfQlJBTkNIOSwKKysgIEJGRF9SRUxPQ19USFVNQl9QQ1JFTF9CUkFOQ0gxMiwKKysgIEJGRF9SRUxPQ19USFVNQl9QQ1JFTF9CUkFOQ0gyMCwKKysgIEJGRF9SRUxPQ19USFVNQl9QQ1JFTF9CUkFOQ0gyMywKKysgIEJGRF9SRUxPQ19USFVNQl9QQ1JFTF9CUkFOQ0gyNSwKKysKKysvKiAxMi1iaXQgaW1tZWRpYXRlIG9mZnNldCwgdXNlZCBpbiBBUk0tZm9ybWF0IGxkciBhbmQgc3RyIGluc3RydWN0aW9ucy4gICovCisrICBCRkRfUkVMT0NfQVJNX09GRlNFVF9JTU0sCisrCisrLyogNS1iaXQgaW1tZWRpYXRlIG9mZnNldCwgdXNlZCBpbiBUaHVtYi1mb3JtYXQgbGRyIGFuZCBzdHIgaW5zdHJ1Y3Rpb25zLiAgKi8KKysgIEJGRF9SRUxPQ19BUk1fVEhVTUJfT0ZGU0VULAorKworKy8qIFBjLXJlbGF0aXZlIG9yIGFic29sdXRlIHJlbG9jYXRpb24gZGVwZW5kaW5nIG9uIHRhcmdldC4gIFVzZWQgZm9yCisrZW50cmllcyBpbiAuaW5pdF9hcnJheSBzZWN0aW9ucy4gICovCisrICBCRkRfUkVMT0NfQVJNX1RBUkdFVDEsCisrCisrLyogUmVhZC1vbmx5IHNlZ21lbnQgYmFzZSByZWxhdGl2ZSBhZGRyZXNzLiAgKi8KKysgIEJGRF9SRUxPQ19BUk1fUk9TRUdSRUwzMiwKKysKKysvKiBEYXRhIHNlZ21lbnQgYmFzZSByZWxhdGl2ZSBhZGRyZXNzLiAgKi8KKysgIEJGRF9SRUxPQ19BUk1fU0JSRUwzMiwKKysKKysvKiBUaGlzIHJlbG9jIGlzIHVzZWQgZm9yIHJlZmVyZW5jZXMgdG8gUlRUSSBkYXRhIGZyb20gZXhjZXB0aW9uIGhhbmRsaW5nCisrdGFibGVzLiAgVGhlIGFjdHVhbCBkZWZpbml0aW9uIGRlcGVuZHMgb24gdGhlIHRhcmdldC4gIEl0IG1heSBiZSBhCisrcGMtcmVsYXRpdmUgb3Igc29tZSBmb3JtIG9mIEdPVC1pbmRpcmVjdCByZWxvY2F0aW9uLiAgKi8KKysgIEJGRF9SRUxPQ19BUk1fVEFSR0VUMiwKKysKKysvKiAzMS1iaXQgUEMgcmVsYXRpdmUgYWRkcmVzcy4gICovCisrICBCRkRfUkVMT0NfQVJNX1BSRUwzMSwKKysKKysvKiBMb3cgYW5kIEhpZ2ggaGFsZndvcmQgcmVsb2NhdGlvbnMgZm9yIE1PVlcgYW5kIE1PVlQgaW5zdHJ1Y3Rpb25zLiAgKi8KKysgIEJGRF9SRUxPQ19BUk1fTU9WVywKKysgIEJGRF9SRUxPQ19BUk1fTU9WVCwKKysgIEJGRF9SRUxPQ19BUk1fTU9WV19QQ1JFTCwKKysgIEJGRF9SRUxPQ19BUk1fTU9WVF9QQ1JFTCwKKysgIEJGRF9SRUxPQ19BUk1fVEhVTUJfTU9WVywKKysgIEJGRF9SRUxPQ19BUk1fVEhVTUJfTU9WVCwKKysgIEJGRF9SRUxPQ19BUk1fVEhVTUJfTU9WV19QQ1JFTCwKKysgIEJGRF9SRUxPQ19BUk1fVEhVTUJfTU9WVF9QQ1JFTCwKKysKKysvKiBSZWxvY2F0aW9ucyBmb3Igc2V0dGluZyB1cCBHT1RzIGFuZCBQTFRzIGZvciBzaGFyZWQgbGlicmFyaWVzLiAgKi8KKysgIEJGRF9SRUxPQ19BUk1fSlVNUF9TTE9ULAorKyAgQkZEX1JFTE9DX0FSTV9HTE9CX0RBVCwKKysgIEJGRF9SRUxPQ19BUk1fR09UMzIsCisrICBCRkRfUkVMT0NfQVJNX1BMVDMyLAorKyAgQkZEX1JFTE9DX0FSTV9SRUxBVElWRSwKKysgIEJGRF9SRUxPQ19BUk1fR09UT0ZGLAorKyAgQkZEX1JFTE9DX0FSTV9HT1RQQywKKysKKysvKiBBUk0gdGhyZWFkLWxvY2FsIHN0b3JhZ2UgcmVsb2NhdGlvbnMuICAqLworKyAgQkZEX1JFTE9DX0FSTV9UTFNfR0QzMiwKKysgIEJGRF9SRUxPQ19BUk1fVExTX0xETzMyLAorKyAgQkZEX1JFTE9DX0FSTV9UTFNfTERNMzIsCisrICBCRkRfUkVMT0NfQVJNX1RMU19EVFBPRkYzMiwKKysgIEJGRF9SRUxPQ19BUk1fVExTX0RUUE1PRDMyLAorKyAgQkZEX1JFTE9DX0FSTV9UTFNfVFBPRkYzMiwKKysgIEJGRF9SRUxPQ19BUk1fVExTX0lFMzIsCisrICBCRkRfUkVMT0NfQVJNX1RMU19MRTMyLAorKworKy8qIEFSTSBncm91cCByZWxvY2F0aW9ucy4gICovCisrICBCRkRfUkVMT0NfQVJNX0FMVV9QQ19HMF9OQywKKysgIEJGRF9SRUxPQ19BUk1fQUxVX1BDX0cwLAorKyAgQkZEX1JFTE9DX0FSTV9BTFVfUENfRzFfTkMsCisrICBCRkRfUkVMT0NfQVJNX0FMVV9QQ19HMSwKKysgIEJGRF9SRUxPQ19BUk1fQUxVX1BDX0cyLAorKyAgQkZEX1JFTE9DX0FSTV9MRFJfUENfRzAsCisrICBCRkRfUkVMT0NfQVJNX0xEUl9QQ19HMSwKKysgIEJGRF9SRUxPQ19BUk1fTERSX1BDX0cyLAorKyAgQkZEX1JFTE9DX0FSTV9MRFJTX1BDX0cwLAorKyAgQkZEX1JFTE9DX0FSTV9MRFJTX1BDX0cxLAorKyAgQkZEX1JFTE9DX0FSTV9MRFJTX1BDX0cyLAorKyAgQkZEX1JFTE9DX0FSTV9MRENfUENfRzAsCisrICBCRkRfUkVMT0NfQVJNX0xEQ19QQ19HMSwKKysgIEJGRF9SRUxPQ19BUk1fTERDX1BDX0cyLAorKyAgQkZEX1JFTE9DX0FSTV9BTFVfU0JfRzBfTkMsCisrICBCRkRfUkVMT0NfQVJNX0FMVV9TQl9HMCwKKysgIEJGRF9SRUxPQ19BUk1fQUxVX1NCX0cxX05DLAorKyAgQkZEX1JFTE9DX0FSTV9BTFVfU0JfRzEsCisrICBCRkRfUkVMT0NfQVJNX0FMVV9TQl9HMiwKKysgIEJGRF9SRUxPQ19BUk1fTERSX1NCX0cwLAorKyAgQkZEX1JFTE9DX0FSTV9MRFJfU0JfRzEsCisrICBCRkRfUkVMT0NfQVJNX0xEUl9TQl9HMiwKKysgIEJGRF9SRUxPQ19BUk1fTERSU19TQl9HMCwKKysgIEJGRF9SRUxPQ19BUk1fTERSU19TQl9HMSwKKysgIEJGRF9SRUxPQ19BUk1fTERSU19TQl9HMiwKKysgIEJGRF9SRUxPQ19BUk1fTERDX1NCX0cwLAorKyAgQkZEX1JFTE9DX0FSTV9MRENfU0JfRzEsCisrICBCRkRfUkVMT0NfQVJNX0xEQ19TQl9HMiwKKysKKysvKiBUaGVzZSByZWxvY3MgYXJlIG9ubHkgdXNlZCB3aXRoaW4gdGhlIEFSTSBhc3NlbWJsZXIuICBUaGV5IGFyZSBub3QKKysoYXQgcHJlc2VudCkgd3JpdHRlbiB0byBhbnkgb2JqZWN0IGZpbGVzLiAgKi8KKysgIEJGRF9SRUxPQ19BUk1fSU1NRURJQVRFLAorKyAgQkZEX1JFTE9DX0FSTV9BRFJMX0lNTUVESUFURSwKKysgIEJGRF9SRUxPQ19BUk1fVDMyX0lNTUVESUFURSwKKysgIEJGRF9SRUxPQ19BUk1fVDMyX0FERF9JTU0sCisrICBCRkRfUkVMT0NfQVJNX1QzMl9JTU0xMiwKKysgIEJGRF9SRUxPQ19BUk1fVDMyX0FERF9QQzEyLAorKyAgQkZEX1JFTE9DX0FSTV9TSElGVF9JTU0sCisrICBCRkRfUkVMT0NfQVJNX1NNQywKKysgIEJGRF9SRUxPQ19BUk1fU1dJLAorKyAgQkZEX1JFTE9DX0FSTV9NVUxUSSwKKysgIEJGRF9SRUxPQ19BUk1fQ1BfT0ZGX0lNTSwKKysgIEJGRF9SRUxPQ19BUk1fQ1BfT0ZGX0lNTV9TMiwKKysgIEJGRF9SRUxPQ19BUk1fVDMyX0NQX09GRl9JTU0sCisrICBCRkRfUkVMT0NfQVJNX1QzMl9DUF9PRkZfSU1NX1MyLAorKyAgQkZEX1JFTE9DX0FSTV9BRFJfSU1NLAorKyAgQkZEX1JFTE9DX0FSTV9MRFJfSU1NLAorKyAgQkZEX1JFTE9DX0FSTV9MSVRFUkFMLAorKyAgQkZEX1JFTE9DX0FSTV9JTl9QT09MLAorKyAgQkZEX1JFTE9DX0FSTV9PRkZTRVRfSU1NOCwKKysgIEJGRF9SRUxPQ19BUk1fVDMyX09GRlNFVF9VOCwKKysgIEJGRF9SRUxPQ19BUk1fVDMyX09GRlNFVF9JTU0sCisrICBCRkRfUkVMT0NfQVJNX0hXTElURVJBTCwKKysgIEJGRF9SRUxPQ19BUk1fVEhVTUJfQURELAorKyAgQkZEX1JFTE9DX0FSTV9USFVNQl9JTU0sCisrICBCRkRfUkVMT0NfQVJNX1RIVU1CX1NISUZULAorKworKy8qIFJlbmVzYXMgLyBTdXBlckggU0ggcmVsb2NzLiAgTm90IGFsbCBvZiB0aGVzZSBhcHBlYXIgaW4gb2JqZWN0IGZpbGVzLiAgKi8KKysgIEJGRF9SRUxPQ19TSF9QQ0RJU1A4QlkyLAorKyAgQkZEX1JFTE9DX1NIX1BDRElTUDEyQlkyLAorKyAgQkZEX1JFTE9DX1NIX0lNTTMsCisrICBCRkRfUkVMT0NfU0hfSU1NM1UsCisrICBCRkRfUkVMT0NfU0hfRElTUDEyLAorKyAgQkZEX1JFTE9DX1NIX0RJU1AxMkJZMiwKKysgIEJGRF9SRUxPQ19TSF9ESVNQMTJCWTQsCisrICBCRkRfUkVMT0NfU0hfRElTUDEyQlk4LAorKyAgQkZEX1JFTE9DX1NIX0RJU1AyMCwKKysgIEJGRF9SRUxPQ19TSF9ESVNQMjBCWTgsCisrICBCRkRfUkVMT0NfU0hfSU1NNCwKKysgIEJGRF9SRUxPQ19TSF9JTU00QlkyLAorKyAgQkZEX1JFTE9DX1NIX0lNTTRCWTQsCisrICBCRkRfUkVMT0NfU0hfSU1NOCwKKysgIEJGRF9SRUxPQ19TSF9JTU04QlkyLAorKyAgQkZEX1JFTE9DX1NIX0lNTThCWTQsCisrICBCRkRfUkVMT0NfU0hfUENSRUxJTU04QlkyLAorKyAgQkZEX1JFTE9DX1NIX1BDUkVMSU1NOEJZNCwKKysgIEJGRF9SRUxPQ19TSF9TV0lUQ0gxNiwKKysgIEJGRF9SRUxPQ19TSF9TV0lUQ0gzMiwKKysgIEJGRF9SRUxPQ19TSF9VU0VTLAorKyAgQkZEX1JFTE9DX1NIX0NPVU5ULAorKyAgQkZEX1JFTE9DX1NIX0FMSUdOLAorKyAgQkZEX1JFTE9DX1NIX0NPREUsCisrICBCRkRfUkVMT0NfU0hfREFUQSwKKysgIEJGRF9SRUxPQ19TSF9MQUJFTCwKKysgIEJGRF9SRUxPQ19TSF9MT09QX1NUQVJULAorKyAgQkZEX1JFTE9DX1NIX0xPT1BfRU5ELAorKyAgQkZEX1JFTE9DX1NIX0NPUFksCisrICBCRkRfUkVMT0NfU0hfR0xPQl9EQVQsCisrICBCRkRfUkVMT0NfU0hfSk1QX1NMT1QsCisrICBCRkRfUkVMT0NfU0hfUkVMQVRJVkUsCisrICBCRkRfUkVMT0NfU0hfR09UUEMsCisrICBCRkRfUkVMT0NfU0hfR09UX0xPVzE2LAorKyAgQkZEX1JFTE9DX1NIX0dPVF9NRURMT1cxNiwKKysgIEJGRF9SRUxPQ19TSF9HT1RfTUVESEkxNiwKKysgIEJGRF9SRUxPQ19TSF9HT1RfSEkxNiwKKysgIEJGRF9SRUxPQ19TSF9HT1RQTFRfTE9XMTYsCisrICBCRkRfUkVMT0NfU0hfR09UUExUX01FRExPVzE2LAorKyAgQkZEX1JFTE9DX1NIX0dPVFBMVF9NRURISTE2LAorKyAgQkZEX1JFTE9DX1NIX0dPVFBMVF9ISTE2LAorKyAgQkZEX1JFTE9DX1NIX1BMVF9MT1cxNiwKKysgIEJGRF9SRUxPQ19TSF9QTFRfTUVETE9XMTYsCisrICBCRkRfUkVMT0NfU0hfUExUX01FREhJMTYsCisrICBCRkRfUkVMT0NfU0hfUExUX0hJMTYsCisrICBCRkRfUkVMT0NfU0hfR09UT0ZGX0xPVzE2LAorKyAgQkZEX1JFTE9DX1NIX0dPVE9GRl9NRURMT1cxNiwKKysgIEJGRF9SRUxPQ19TSF9HT1RPRkZfTUVESEkxNiwKKysgIEJGRF9SRUxPQ19TSF9HT1RPRkZfSEkxNiwKKysgIEJGRF9SRUxPQ19TSF9HT1RQQ19MT1cxNiwKKysgIEJGRF9SRUxPQ19TSF9HT1RQQ19NRURMT1cxNiwKKysgIEJGRF9SRUxPQ19TSF9HT1RQQ19NRURISTE2LAorKyAgQkZEX1JFTE9DX1NIX0dPVFBDX0hJMTYsCisrICBCRkRfUkVMT0NfU0hfQ09QWTY0LAorKyAgQkZEX1JFTE9DX1NIX0dMT0JfREFUNjQsCisrICBCRkRfUkVMT0NfU0hfSk1QX1NMT1Q2NCwKKysgIEJGRF9SRUxPQ19TSF9SRUxBVElWRTY0LAorKyAgQkZEX1JFTE9DX1NIX0dPVDEwQlk0LAorKyAgQkZEX1JFTE9DX1NIX0dPVDEwQlk4LAorKyAgQkZEX1JFTE9DX1NIX0dPVFBMVDEwQlk0LAorKyAgQkZEX1JFTE9DX1NIX0dPVFBMVDEwQlk4LAorKyAgQkZEX1JFTE9DX1NIX0dPVFBMVDMyLAorKyAgQkZEX1JFTE9DX1NIX1NITUVESUFfQ09ERSwKKysgIEJGRF9SRUxPQ19TSF9JTU1VNSwKKysgIEJGRF9SRUxPQ19TSF9JTU1TNiwKKysgIEJGRF9SRUxPQ19TSF9JTU1TNkJZMzIsCisrICBCRkRfUkVMT0NfU0hfSU1NVTYsCisrICBCRkRfUkVMT0NfU0hfSU1NUzEwLAorKyAgQkZEX1JFTE9DX1NIX0lNTVMxMEJZMiwKKysgIEJGRF9SRUxPQ19TSF9JTU1TMTBCWTQsCisrICBCRkRfUkVMT0NfU0hfSU1NUzEwQlk4LAorKyAgQkZEX1JFTE9DX1NIX0lNTVMxNiwKKysgIEJGRF9SRUxPQ19TSF9JTU1VMTYsCisrICBCRkRfUkVMT0NfU0hfSU1NX0xPVzE2LAorKyAgQkZEX1JFTE9DX1NIX0lNTV9MT1cxNl9QQ1JFTCwKKysgIEJGRF9SRUxPQ19TSF9JTU1fTUVETE9XMTYsCisrICBCRkRfUkVMT0NfU0hfSU1NX01FRExPVzE2X1BDUkVMLAorKyAgQkZEX1JFTE9DX1NIX0lNTV9NRURISTE2LAorKyAgQkZEX1JFTE9DX1NIX0lNTV9NRURISTE2X1BDUkVMLAorKyAgQkZEX1JFTE9DX1NIX0lNTV9ISTE2LAorKyAgQkZEX1JFTE9DX1NIX0lNTV9ISTE2X1BDUkVMLAorKyAgQkZEX1JFTE9DX1NIX1BUXzE2LAorKyAgQkZEX1JFTE9DX1NIX1RMU19HRF8zMiwKKysgIEJGRF9SRUxPQ19TSF9UTFNfTERfMzIsCisrICBCRkRfUkVMT0NfU0hfVExTX0xET18zMiwKKysgIEJGRF9SRUxPQ19TSF9UTFNfSUVfMzIsCisrICBCRkRfUkVMT0NfU0hfVExTX0xFXzMyLAorKyAgQkZEX1JFTE9DX1NIX1RMU19EVFBNT0QzMiwKKysgIEJGRF9SRUxPQ19TSF9UTFNfRFRQT0ZGMzIsCisrICBCRkRfUkVMT0NfU0hfVExTX1RQT0ZGMzIsCisrCisrLyogQVJDIENvcmVzIHJlbG9jcy4KKytBUkMgMjIgYml0IHBjLXJlbGF0aXZlIGJyYW5jaC4gIFRoZSBsb3dlc3QgdHdvIGJpdHMgbXVzdCBiZSB6ZXJvIGFuZCBhcmUKKytub3Qgc3RvcmVkIGluIHRoZSBpbnN0cnVjdGlvbi4gIFRoZSBoaWdoIDIwIGJpdHMgYXJlIGluc3RhbGxlZCBpbiBiaXRzIDI2CisrdGhyb3VnaCA3IG9mIHRoZSBpbnN0cnVjdGlvbi4gICovCisrICBCRkRfUkVMT0NfQVJDX0IyMl9QQ1JFTCwKKysKKysvKiBBUkMgMjYgYml0IGFic29sdXRlIGJyYW5jaC4gIFRoZSBsb3dlc3QgdHdvIGJpdHMgbXVzdCBiZSB6ZXJvIGFuZCBhcmUgbm90Cisrc3RvcmVkIGluIHRoZSBpbnN0cnVjdGlvbi4gIFRoZSBoaWdoIDI0IGJpdHMgYXJlIGluc3RhbGxlZCBpbiBiaXRzIDIzCisrdGhyb3VnaCAwLiAgKi8KKysgIEJGRF9SRUxPQ19BUkNfQjI2LAorKworKy8qIEFESSBCbGFja2ZpbiAxNiBiaXQgaW1tZWRpYXRlIGFic29sdXRlIHJlbG9jLiAgKi8KKysgIEJGRF9SRUxPQ19CRklOXzE2X0lNTSwKKysKKysvKiBBREkgQmxhY2tmaW4gMTYgYml0IGltbWVkaWF0ZSBhYnNvbHV0ZSByZWxvYyBoaWdoZXIgMTYgYml0cy4gICovCisrICBCRkRfUkVMT0NfQkZJTl8xNl9ISUdILAorKworKy8qIEFESSBCbGFja2ZpbiAnYScgcGFydCBvZiBMU0VUVVAuICAqLworKyAgQkZEX1JFTE9DX0JGSU5fNF9QQ1JFTCwKKysKKysvKiBBREkgQmxhY2tmaW4uICAqLworKyAgQkZEX1JFTE9DX0JGSU5fNV9QQ1JFTCwKKysKKysvKiBBREkgQmxhY2tmaW4gMTYgYml0IGltbWVkaWF0ZSBhYnNvbHV0ZSByZWxvYyBsb3dlciAxNiBiaXRzLiAgKi8KKysgIEJGRF9SRUxPQ19CRklOXzE2X0xPVywKKysKKysvKiBBREkgQmxhY2tmaW4uICAqLworKyAgQkZEX1JFTE9DX0JGSU5fMTBfUENSRUwsCisrCisrLyogQURJIEJsYWNrZmluICdiJyBwYXJ0IG9mIExTRVRVUC4gICovCisrICBCRkRfUkVMT0NfQkZJTl8xMV9QQ1JFTCwKKysKKysvKiBBREkgQmxhY2tmaW4uICAqLworKyAgQkZEX1JFTE9DX0JGSU5fMTJfUENSRUxfSlVNUCwKKysKKysvKiBBREkgQmxhY2tmaW4gU2hvcnQganVtcCwgcGNyZWwuICAqLworKyAgQkZEX1JFTE9DX0JGSU5fMTJfUENSRUxfSlVNUF9TLAorKworKy8qIEFESSBCbGFja2ZpbiBDYWxsLnggbm90IGltcGxlbWVudGVkLiAgKi8KKysgIEJGRF9SRUxPQ19CRklOXzI0X1BDUkVMX0NBTExfWCwKKysKKysvKiBBREkgQmxhY2tmaW4gTG9uZyBKdW1wIHBjcmVsLiAgKi8KKysgIEJGRF9SRUxPQ19CRklOXzI0X1BDUkVMX0pVTVBfTCwKKysKKysvKiBBREkgQmxhY2tmaW4gRkQtUElDIHJlbG9jYXRpb25zLiAgKi8KKysgIEJGRF9SRUxPQ19CRklOX0dPVDE3TTQsCisrICBCRkRfUkVMT0NfQkZJTl9HT1RISSwKKysgIEJGRF9SRUxPQ19CRklOX0dPVExPLAorKyAgQkZEX1JFTE9DX0JGSU5fRlVOQ0RFU0MsCisrICBCRkRfUkVMT0NfQkZJTl9GVU5DREVTQ19HT1QxN000LAorKyAgQkZEX1JFTE9DX0JGSU5fRlVOQ0RFU0NfR09USEksCisrICBCRkRfUkVMT0NfQkZJTl9GVU5DREVTQ19HT1RMTywKKysgIEJGRF9SRUxPQ19CRklOX0ZVTkNERVNDX1ZBTFVFLAorKyAgQkZEX1JFTE9DX0JGSU5fRlVOQ0RFU0NfR09UT0ZGMTdNNCwKKysgIEJGRF9SRUxPQ19CRklOX0ZVTkNERVNDX0dPVE9GRkhJLAorKyAgQkZEX1JFTE9DX0JGSU5fRlVOQ0RFU0NfR09UT0ZGTE8sCisrICBCRkRfUkVMT0NfQkZJTl9HT1RPRkYxN000LAorKyAgQkZEX1JFTE9DX0JGSU5fR09UT0ZGSEksCisrICBCRkRfUkVMT0NfQkZJTl9HT1RPRkZMTywKKysKKysvKiBBREkgQmxhY2tmaW4gR09UIHJlbG9jYXRpb24uICAqLworKyAgQkZEX1JFTE9DX0JGSU5fR09ULAorKworKy8qIEFESSBCbGFja2ZpbiBQTFRQQyByZWxvY2F0aW9uLiAgKi8KKysgIEJGRF9SRUxPQ19CRklOX1BMVFBDLAorKworKy8qIEFESSBCbGFja2ZpbiBhcml0aG1ldGljIHJlbG9jYXRpb24uICAqLworKyAgQkZEX0FSRUxPQ19CRklOX1BVU0gsCisrCisrLyogQURJIEJsYWNrZmluIGFyaXRobWV0aWMgcmVsb2NhdGlvbi4gICovCisrICBCRkRfQVJFTE9DX0JGSU5fQ09OU1QsCisrCisrLyogQURJIEJsYWNrZmluIGFyaXRobWV0aWMgcmVsb2NhdGlvbi4gICovCisrICBCRkRfQVJFTE9DX0JGSU5fQURELAorKworKy8qIEFESSBCbGFja2ZpbiBhcml0aG1ldGljIHJlbG9jYXRpb24uICAqLworKyAgQkZEX0FSRUxPQ19CRklOX1NVQiwKKysKKysvKiBBREkgQmxhY2tmaW4gYXJpdGhtZXRpYyByZWxvY2F0aW9uLiAgKi8KKysgIEJGRF9BUkVMT0NfQkZJTl9NVUxULAorKworKy8qIEFESSBCbGFja2ZpbiBhcml0aG1ldGljIHJlbG9jYXRpb24uICAqLworKyAgQkZEX0FSRUxPQ19CRklOX0RJViwKKysKKysvKiBBREkgQmxhY2tmaW4gYXJpdGhtZXRpYyByZWxvY2F0aW9uLiAgKi8KKysgIEJGRF9BUkVMT0NfQkZJTl9NT0QsCisrCisrLyogQURJIEJsYWNrZmluIGFyaXRobWV0aWMgcmVsb2NhdGlvbi4gICovCisrICBCRkRfQVJFTE9DX0JGSU5fTFNISUZULAorKworKy8qIEFESSBCbGFja2ZpbiBhcml0aG1ldGljIHJlbG9jYXRpb24uICAqLworKyAgQkZEX0FSRUxPQ19CRklOX1JTSElGVCwKKysKKysvKiBBREkgQmxhY2tmaW4gYXJpdGhtZXRpYyByZWxvY2F0aW9uLiAgKi8KKysgIEJGRF9BUkVMT0NfQkZJTl9BTkQsCisrCisrLyogQURJIEJsYWNrZmluIGFyaXRobWV0aWMgcmVsb2NhdGlvbi4gICovCisrICBCRkRfQVJFTE9DX0JGSU5fT1IsCisrCisrLyogQURJIEJsYWNrZmluIGFyaXRobWV0aWMgcmVsb2NhdGlvbi4gICovCisrICBCRkRfQVJFTE9DX0JGSU5fWE9SLAorKworKy8qIEFESSBCbGFja2ZpbiBhcml0aG1ldGljIHJlbG9jYXRpb24uICAqLworKyAgQkZEX0FSRUxPQ19CRklOX0xBTkQsCisrCisrLyogQURJIEJsYWNrZmluIGFyaXRobWV0aWMgcmVsb2NhdGlvbi4gICovCisrICBCRkRfQVJFTE9DX0JGSU5fTE9SLAorKworKy8qIEFESSBCbGFja2ZpbiBhcml0aG1ldGljIHJlbG9jYXRpb24uICAqLworKyAgQkZEX0FSRUxPQ19CRklOX0xFTiwKKysKKysvKiBBREkgQmxhY2tmaW4gYXJpdGhtZXRpYyByZWxvY2F0aW9uLiAgKi8KKysgIEJGRF9BUkVMT0NfQkZJTl9ORUcsCisrCisrLyogQURJIEJsYWNrZmluIGFyaXRobWV0aWMgcmVsb2NhdGlvbi4gICovCisrICBCRkRfQVJFTE9DX0JGSU5fQ09NUCwKKysKKysvKiBBREkgQmxhY2tmaW4gYXJpdGhtZXRpYyByZWxvY2F0aW9uLiAgKi8KKysgIEJGRF9BUkVMT0NfQkZJTl9QQUdFLAorKworKy8qIEFESSBCbGFja2ZpbiBhcml0aG1ldGljIHJlbG9jYXRpb24uICAqLworKyAgQkZEX0FSRUxPQ19CRklOX0hXUEFHRSwKKysKKysvKiBBREkgQmxhY2tmaW4gYXJpdGhtZXRpYyByZWxvY2F0aW9uLiAgKi8KKysgIEJGRF9BUkVMT0NfQkZJTl9BRERSLAorKworKy8qIE1pdHN1YmlzaGkgRDEwViByZWxvY3MuCisrVGhpcyBpcyBhIDEwLWJpdCByZWxvYyB3aXRoIHRoZSByaWdodCAyIGJpdHMKKythc3N1bWVkIHRvIGJlIDAuICAqLworKyAgQkZEX1JFTE9DX0QxMFZfMTBfUENSRUxfUiwKKysKKysvKiBNaXRzdWJpc2hpIEQxMFYgcmVsb2NzLgorK1RoaXMgaXMgYSAxMC1iaXQgcmVsb2Mgd2l0aCB0aGUgcmlnaHQgMiBiaXRzCisrYXNzdW1lZCB0byBiZSAwLiAgVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgcHJldmlvdXMgcmVsb2MKKytleGNlcHQgaXQgaXMgaW4gdGhlIGxlZnQgY29udGFpbmVyLCBpLmUuLAorK3NoaWZ0ZWQgbGVmdCAxNSBiaXRzLiAgKi8KKysgIEJGRF9SRUxPQ19EMTBWXzEwX1BDUkVMX0wsCisrCisrLyogVGhpcyBpcyBhbiAxOC1iaXQgcmVsb2Mgd2l0aCB0aGUgcmlnaHQgMiBiaXRzCisrYXNzdW1lZCB0byBiZSAwLiAgKi8KKysgIEJGRF9SRUxPQ19EMTBWXzE4LAorKworKy8qIFRoaXMgaXMgYW4gMTgtYml0IHJlbG9jIHdpdGggdGhlIHJpZ2h0IDIgYml0cworK2Fzc3VtZWQgdG8gYmUgMC4gICovCisrICBCRkRfUkVMT0NfRDEwVl8xOF9QQ1JFTCwKKysKKysvKiBNaXRzdWJpc2hpIEQzMFYgcmVsb2NzLgorK1RoaXMgaXMgYSA2LWJpdCBhYnNvbHV0ZSByZWxvYy4gICovCisrICBCRkRfUkVMT0NfRDMwVl82LAorKworKy8qIFRoaXMgaXMgYSA2LWJpdCBwYy1yZWxhdGl2ZSByZWxvYyB3aXRoCisrdGhlIHJpZ2h0IDMgYml0cyBhc3N1bWVkIHRvIGJlIDAuICAqLworKyAgQkZEX1JFTE9DX0QzMFZfOV9QQ1JFTCwKKysKKysvKiBUaGlzIGlzIGEgNi1iaXQgcGMtcmVsYXRpdmUgcmVsb2Mgd2l0aAorK3RoZSByaWdodCAzIGJpdHMgYXNzdW1lZCB0byBiZSAwLiBTYW1lCisrYXMgdGhlIHByZXZpb3VzIHJlbG9jIGJ1dCBvbiB0aGUgcmlnaHQgc2lkZQorK29mIHRoZSBjb250YWluZXIuICAqLworKyAgQkZEX1JFTE9DX0QzMFZfOV9QQ1JFTF9SLAorKworKy8qIFRoaXMgaXMgYSAxMi1iaXQgYWJzb2x1dGUgcmVsb2Mgd2l0aCB0aGUKKytyaWdodCAzIGJpdHNhc3N1bWVkIHRvIGJlIDAuICAqLworKyAgQkZEX1JFTE9DX0QzMFZfMTUsCisrCisrLyogVGhpcyBpcyBhIDEyLWJpdCBwYy1yZWxhdGl2ZSByZWxvYyB3aXRoCisrdGhlIHJpZ2h0IDMgYml0cyBhc3N1bWVkIHRvIGJlIDAuICAqLworKyAgQkZEX1JFTE9DX0QzMFZfMTVfUENSRUwsCisrCisrLyogVGhpcyBpcyBhIDEyLWJpdCBwYy1yZWxhdGl2ZSByZWxvYyB3aXRoCisrdGhlIHJpZ2h0IDMgYml0cyBhc3N1bWVkIHRvIGJlIDAuIFNhbWUKKythcyB0aGUgcHJldmlvdXMgcmVsb2MgYnV0IG9uIHRoZSByaWdodCBzaWRlCisrb2YgdGhlIGNvbnRhaW5lci4gICovCisrICBCRkRfUkVMT0NfRDMwVl8xNV9QQ1JFTF9SLAorKworKy8qIFRoaXMgaXMgYW4gMTgtYml0IGFic29sdXRlIHJlbG9jIHdpdGgKKyt0aGUgcmlnaHQgMyBiaXRzIGFzc3VtZWQgdG8gYmUgMC4gICovCisrICBCRkRfUkVMT0NfRDMwVl8yMSwKKysKKysvKiBUaGlzIGlzIGFuIDE4LWJpdCBwYy1yZWxhdGl2ZSByZWxvYyB3aXRoCisrdGhlIHJpZ2h0IDMgYml0cyBhc3N1bWVkIHRvIGJlIDAuICAqLworKyAgQkZEX1JFTE9DX0QzMFZfMjFfUENSRUwsCisrCisrLyogVGhpcyBpcyBhbiAxOC1iaXQgcGMtcmVsYXRpdmUgcmVsb2Mgd2l0aAorK3RoZSByaWdodCAzIGJpdHMgYXNzdW1lZCB0byBiZSAwLiBTYW1lCisrYXMgdGhlIHByZXZpb3VzIHJlbG9jIGJ1dCBvbiB0aGUgcmlnaHQgc2lkZQorK29mIHRoZSBjb250YWluZXIuICAqLworKyAgQkZEX1JFTE9DX0QzMFZfMjFfUENSRUxfUiwKKysKKysvKiBUaGlzIGlzIGEgMzItYml0IGFic29sdXRlIHJlbG9jLiAgKi8KKysgIEJGRF9SRUxPQ19EMzBWXzMyLAorKworKy8qIFRoaXMgaXMgYSAzMi1iaXQgcGMtcmVsYXRpdmUgcmVsb2MuICAqLworKyAgQkZEX1JFTE9DX0QzMFZfMzJfUENSRUwsCisrCisrLyogRExYIHJlbG9jcyAgKi8KKysgIEJGRF9SRUxPQ19ETFhfSEkxNl9TLAorKworKy8qIERMWCByZWxvY3MgICovCisrICBCRkRfUkVMT0NfRExYX0xPMTYsCisrCisrLyogRExYIHJlbG9jcyAgKi8KKysgIEJGRF9SRUxPQ19ETFhfSk1QMjYsCisrCisrLyogUmVuZXNhcyBNMTZDL00zMkMgUmVsb2NhdGlvbnMuICAqLworKyAgQkZEX1JFTE9DX00zMkNfSEk4LAorKyAgQkZEX1JFTE9DX00zMkNfUkxfSlVNUCwKKysgIEJGRF9SRUxPQ19NMzJDX1JMXzFBRERSLAorKyAgQkZEX1JFTE9DX00zMkNfUkxfMkFERFIsCisrCisrLyogUmVuZXNhcyBNMzJSIChmb3JtZXJseSBNaXRzdWJpc2hpIE0zMlIpIHJlbG9jcy4KKytUaGlzIGlzIGEgMjQgYml0IGFic29sdXRlIGFkZHJlc3MuICAqLworKyAgQkZEX1JFTE9DX00zMlJfMjQsCisrCisrLyogVGhpcyBpcyBhIDEwLWJpdCBwYy1yZWxhdGl2ZSByZWxvYyB3aXRoIHRoZSByaWdodCAyIGJpdHMgYXNzdW1lZCB0byBiZSAwLiAgKi8KKysgIEJGRF9SRUxPQ19NMzJSXzEwX1BDUkVMLAorKworKy8qIFRoaXMgaXMgYW4gMTgtYml0IHJlbG9jIHdpdGggdGhlIHJpZ2h0IDIgYml0cyBhc3N1bWVkIHRvIGJlIDAuICAqLworKyAgQkZEX1JFTE9DX00zMlJfMThfUENSRUwsCisrCisrLyogVGhpcyBpcyBhIDI2LWJpdCByZWxvYyB3aXRoIHRoZSByaWdodCAyIGJpdHMgYXNzdW1lZCB0byBiZSAwLiAgKi8KKysgIEJGRF9SRUxPQ19NMzJSXzI2X1BDUkVMLAorKworKy8qIFRoaXMgaXMgYSAxNi1iaXQgcmVsb2MgY29udGFpbmluZyB0aGUgaGlnaCAxNiBiaXRzIG9mIGFuIGFkZHJlc3MKKyt1c2VkIHdoZW4gdGhlIGxvd2VyIDE2IGJpdHMgYXJlIHRyZWF0ZWQgYXMgdW5zaWduZWQuICAqLworKyAgQkZEX1JFTE9DX00zMlJfSEkxNl9VTE8sCisrCisrLyogVGhpcyBpcyBhIDE2LWJpdCByZWxvYyBjb250YWluaW5nIHRoZSBoaWdoIDE2IGJpdHMgb2YgYW4gYWRkcmVzcworK3VzZWQgd2hlbiB0aGUgbG93ZXIgMTYgYml0cyBhcmUgdHJlYXRlZCBhcyBzaWduZWQuICAqLworKyAgQkZEX1JFTE9DX00zMlJfSEkxNl9TTE8sCisrCisrLyogVGhpcyBpcyBhIDE2LWJpdCByZWxvYyBjb250YWluaW5nIHRoZSBsb3dlciAxNiBiaXRzIG9mIGFuIGFkZHJlc3MuICAqLworKyAgQkZEX1JFTE9DX00zMlJfTE8xNiwKKysKKysvKiBUaGlzIGlzIGEgMTYtYml0IHJlbG9jIGNvbnRhaW5pbmcgdGhlIHNtYWxsIGRhdGEgYXJlYSBvZmZzZXQgZm9yIHVzZSBpbgorK2FkZDMsIGxvYWQsIGFuZCBzdG9yZSBpbnN0cnVjdGlvbnMuICAqLworKyAgQkZEX1JFTE9DX00zMlJfU0RBMTYsCisrCisrLyogRm9yIFBJQy4gICovCisrICBCRkRfUkVMT0NfTTMyUl9HT1QyNCwKKysgIEJGRF9SRUxPQ19NMzJSXzI2X1BMVFJFTCwKKysgIEJGRF9SRUxPQ19NMzJSX0NPUFksCisrICBCRkRfUkVMT0NfTTMyUl9HTE9CX0RBVCwKKysgIEJGRF9SRUxPQ19NMzJSX0pNUF9TTE9ULAorKyAgQkZEX1JFTE9DX00zMlJfUkVMQVRJVkUsCisrICBCRkRfUkVMT0NfTTMyUl9HT1RPRkYsCisrICBCRkRfUkVMT0NfTTMyUl9HT1RPRkZfSElfVUxPLAorKyAgQkZEX1JFTE9DX00zMlJfR09UT0ZGX0hJX1NMTywKKysgIEJGRF9SRUxPQ19NMzJSX0dPVE9GRl9MTywKKysgIEJGRF9SRUxPQ19NMzJSX0dPVFBDMjQsCisrICBCRkRfUkVMT0NfTTMyUl9HT1QxNl9ISV9VTE8sCisrICBCRkRfUkVMT0NfTTMyUl9HT1QxNl9ISV9TTE8sCisrICBCRkRfUkVMT0NfTTMyUl9HT1QxNl9MTywKKysgIEJGRF9SRUxPQ19NMzJSX0dPVFBDX0hJX1VMTywKKysgIEJGRF9SRUxPQ19NMzJSX0dPVFBDX0hJX1NMTywKKysgIEJGRF9SRUxPQ19NMzJSX0dPVFBDX0xPLAorKworKy8qIFRoaXMgaXMgYSA5LWJpdCByZWxvYyAgKi8KKysgIEJGRF9SRUxPQ19WODUwXzlfUENSRUwsCisrCisrLyogVGhpcyBpcyBhIDIyLWJpdCByZWxvYyAgKi8KKysgIEJGRF9SRUxPQ19WODUwXzIyX1BDUkVMLAorKworKy8qIFRoaXMgaXMgYSAxNiBiaXQgb2Zmc2V0IGZyb20gdGhlIHNob3J0IGRhdGEgYXJlYSBwb2ludGVyLiAgKi8KKysgIEJGRF9SRUxPQ19WODUwX1NEQV8xNl8xNl9PRkZTRVQsCisrCisrLyogVGhpcyBpcyBhIDE2IGJpdCBvZmZzZXQgKG9mIHdoaWNoIG9ubHkgMTUgYml0cyBhcmUgdXNlZCkgZnJvbSB0aGUKKytzaG9ydCBkYXRhIGFyZWEgcG9pbnRlci4gICovCisrICBCRkRfUkVMT0NfVjg1MF9TREFfMTVfMTZfT0ZGU0VULAorKworKy8qIFRoaXMgaXMgYSAxNiBiaXQgb2Zmc2V0IGZyb20gdGhlIHplcm8gZGF0YSBhcmVhIHBvaW50ZXIuICAqLworKyAgQkZEX1JFTE9DX1Y4NTBfWkRBXzE2XzE2X09GRlNFVCwKKysKKysvKiBUaGlzIGlzIGEgMTYgYml0IG9mZnNldCAob2Ygd2hpY2ggb25seSAxNSBiaXRzIGFyZSB1c2VkKSBmcm9tIHRoZQorK3plcm8gZGF0YSBhcmVhIHBvaW50ZXIuICAqLworKyAgQkZEX1JFTE9DX1Y4NTBfWkRBXzE1XzE2X09GRlNFVCwKKysKKysvKiBUaGlzIGlzIGFuIDggYml0IG9mZnNldCAob2Ygd2hpY2ggb25seSA2IGJpdHMgYXJlIHVzZWQpIGZyb20gdGhlCisrdGlueSBkYXRhIGFyZWEgcG9pbnRlci4gICovCisrICBCRkRfUkVMT0NfVjg1MF9UREFfNl84X09GRlNFVCwKKysKKysvKiBUaGlzIGlzIGFuIDhiaXQgb2Zmc2V0IChvZiB3aGljaCBvbmx5IDcgYml0cyBhcmUgdXNlZCkgZnJvbSB0aGUgdGlueQorK2RhdGEgYXJlYSBwb2ludGVyLiAgKi8KKysgIEJGRF9SRUxPQ19WODUwX1REQV83XzhfT0ZGU0VULAorKworKy8qIFRoaXMgaXMgYSA3IGJpdCBvZmZzZXQgZnJvbSB0aGUgdGlueSBkYXRhIGFyZWEgcG9pbnRlci4gICovCisrICBCRkRfUkVMT0NfVjg1MF9UREFfN183X09GRlNFVCwKKysKKysvKiBUaGlzIGlzIGEgMTYgYml0IG9mZnNldCBmcm9tIHRoZSB0aW55IGRhdGEgYXJlYSBwb2ludGVyLiAgKi8KKysgIEJGRF9SRUxPQ19WODUwX1REQV8xNl8xNl9PRkZTRVQsCisrCisrLyogVGhpcyBpcyBhIDUgYml0IG9mZnNldCAob2Ygd2hpY2ggb25seSA0IGJpdHMgYXJlIHVzZWQpIGZyb20gdGhlIHRpbnkKKytkYXRhIGFyZWEgcG9pbnRlci4gICovCisrICBCRkRfUkVMT0NfVjg1MF9UREFfNF81X09GRlNFVCwKKysKKysvKiBUaGlzIGlzIGEgNCBiaXQgb2Zmc2V0IGZyb20gdGhlIHRpbnkgZGF0YSBhcmVhIHBvaW50ZXIuICAqLworKyAgQkZEX1JFTE9DX1Y4NTBfVERBXzRfNF9PRkZTRVQsCisrCisrLyogVGhpcyBpcyBhIDE2IGJpdCBvZmZzZXQgZnJvbSB0aGUgc2hvcnQgZGF0YSBhcmVhIHBvaW50ZXIsIHdpdGggdGhlCisrYml0cyBwbGFjZWQgbm9uLWNvbnRpZ3VvdXNseSBpbiB0aGUgaW5zdHJ1Y3Rpb24uICAqLworKyAgQkZEX1JFTE9DX1Y4NTBfU0RBXzE2XzE2X1NQTElUX09GRlNFVCwKKysKKysvKiBUaGlzIGlzIGEgMTYgYml0IG9mZnNldCBmcm9tIHRoZSB6ZXJvIGRhdGEgYXJlYSBwb2ludGVyLCB3aXRoIHRoZQorK2JpdHMgcGxhY2VkIG5vbi1jb250aWd1b3VzbHkgaW4gdGhlIGluc3RydWN0aW9uLiAgKi8KKysgIEJGRF9SRUxPQ19WODUwX1pEQV8xNl8xNl9TUExJVF9PRkZTRVQsCisrCisrLyogVGhpcyBpcyBhIDYgYml0IG9mZnNldCBmcm9tIHRoZSBjYWxsIHRhYmxlIGJhc2UgcG9pbnRlci4gICovCisrICBCRkRfUkVMT0NfVjg1MF9DQUxMVF82XzdfT0ZGU0VULAorKworKy8qIFRoaXMgaXMgYSAxNiBiaXQgb2Zmc2V0IGZyb20gdGhlIGNhbGwgdGFibGUgYmFzZSBwb2ludGVyLiAgKi8KKysgIEJGRF9SRUxPQ19WODUwX0NBTExUXzE2XzE2X09GRlNFVCwKKysKKysvKiBVc2VkIGZvciByZWxheGluZyBpbmRpcmVjdCBmdW5jdGlvbiBjYWxscy4gICovCisrICBCRkRfUkVMT0NfVjg1MF9MT05HQ0FMTCwKKysKKysvKiBVc2VkIGZvciByZWxheGluZyBpbmRpcmVjdCBqdW1wcy4gICovCisrICBCRkRfUkVMT0NfVjg1MF9MT05HSlVNUCwKKysKKysvKiBVc2VkIHRvIG1haW50YWluIGFsaWdubWVudCB3aGlsc3QgcmVsYXhpbmcuICAqLworKyAgQkZEX1JFTE9DX1Y4NTBfQUxJR04sCisrCisrLyogVGhpcyBpcyBhIHZhcmlhdGlvbiBvZiBCRkRfUkVMT0NfTE8xNiB0aGF0IGNhbiBiZSB1c2VkIGluIHY4NTBlIGxkLmJ1CisraW5zdHJ1Y3Rpb25zLiAgKi8KKysgIEJGRF9SRUxPQ19WODUwX0xPMTZfU1BMSVRfT0ZGU0VULAorKworKy8qIFRoaXMgaXMgYSAzMmJpdCBwY3JlbCByZWxvYyBmb3IgdGhlIG1uMTAzMDAsIG9mZnNldCBieSB0d28gYnl0ZXMgaW4gdGhlCisraW5zdHJ1Y3Rpb24uICAqLworKyAgQkZEX1JFTE9DX01OMTAzMDBfMzJfUENSRUwsCisrCisrLyogVGhpcyBpcyBhIDE2Yml0IHBjcmVsIHJlbG9jIGZvciB0aGUgbW4xMDMwMCwgb2Zmc2V0IGJ5IHR3byBieXRlcyBpbiB0aGUKKytpbnN0cnVjdGlvbi4gICovCisrICBCRkRfUkVMT0NfTU4xMDMwMF8xNl9QQ1JFTCwKKysKKysvKiBUaGlzIGlzIGEgOGJpdCBEUCByZWxvYyBmb3IgdGhlIHRtczMyMGMzMCwgd2hlcmUgdGhlIG1vc3QKKytzaWduaWZpY2FudCA4IGJpdHMgb2YgYSAyNCBiaXQgd29yZCBhcmUgcGxhY2VkIGludG8gdGhlIGxlYXN0Cisrc2lnbmlmaWNhbnQgOCBiaXRzIG9mIHRoZSBvcGNvZGUuICAqLworKyAgQkZEX1JFTE9DX1RJQzMwX0xEUCwKKysKKysvKiBUaGlzIGlzIGEgN2JpdCByZWxvYyBmb3IgdGhlIHRtczMyMGM1NHgsIHdoZXJlIHRoZSBsZWFzdAorK3NpZ25pZmljYW50IDcgYml0cyBvZiBhIDE2IGJpdCB3b3JkIGFyZSBwbGFjZWQgaW50byB0aGUgbGVhc3QKKytzaWduaWZpY2FudCA3IGJpdHMgb2YgdGhlIG9wY29kZS4gICovCisrICBCRkRfUkVMT0NfVElDNTRYX1BBUlRMUzcsCisrCisrLyogVGhpcyBpcyBhIDliaXQgRFAgcmVsb2MgZm9yIHRoZSB0bXMzMjBjNTR4LCB3aGVyZSB0aGUgbW9zdAorK3NpZ25pZmljYW50IDkgYml0cyBvZiBhIDE2IGJpdCB3b3JkIGFyZSBwbGFjZWQgaW50byB0aGUgbGVhc3QKKytzaWduaWZpY2FudCA5IGJpdHMgb2YgdGhlIG9wY29kZS4gICovCisrICBCRkRfUkVMT0NfVElDNTRYX1BBUlRNUzksCisrCisrLyogVGhpcyBpcyBhbiBleHRlbmRlZCBhZGRyZXNzIDIzLWJpdCByZWxvYyBmb3IgdGhlIHRtczMyMGM1NHguICAqLworKyAgQkZEX1JFTE9DX1RJQzU0WF8yMywKKysKKysvKiBUaGlzIGlzIGEgMTYtYml0IHJlbG9jIGZvciB0aGUgdG1zMzIwYzU0eCwgd2hlcmUgdGhlIGxlYXN0Cisrc2lnbmlmaWNhbnQgMTYgYml0cyBvZiBhIDIzLWJpdCBleHRlbmRlZCBhZGRyZXNzIGFyZSBwbGFjZWQgaW50bworK3RoZSBvcGNvZGUuICAqLworKyAgQkZEX1JFTE9DX1RJQzU0WF8xNl9PRl8yMywKKysKKysvKiBUaGlzIGlzIGEgcmVsb2MgZm9yIHRoZSB0bXMzMjBjNTR4LCB3aGVyZSB0aGUgbW9zdAorK3NpZ25pZmljYW50IDcgYml0cyBvZiBhIDIzLWJpdCBleHRlbmRlZCBhZGRyZXNzIGFyZSBwbGFjZWQgaW50bworK3RoZSBvcGNvZGUuICAqLworKyAgQkZEX1JFTE9DX1RJQzU0WF9NUzdfT0ZfMjMsCisrCisrLyogVGhpcyBpcyBhIDQ4IGJpdCByZWxvYyBmb3IgdGhlIEZSMzAgdGhhdCBzdG9yZXMgMzIgYml0cy4gICovCisrICBCRkRfUkVMT0NfRlIzMF80OCwKKysKKysvKiBUaGlzIGlzIGEgMzIgYml0IHJlbG9jIGZvciB0aGUgRlIzMCB0aGF0IHN0b3JlcyAyMCBiaXRzIHNwbGl0IHVwIGludG8KKyt0d28gc2VjdGlvbnMuICAqLworKyAgQkZEX1JFTE9DX0ZSMzBfMjAsCisrCisrLyogVGhpcyBpcyBhIDE2IGJpdCByZWxvYyBmb3IgdGhlIEZSMzAgdGhhdCBzdG9yZXMgYSA2IGJpdCB3b3JkIG9mZnNldCBpbgorKzQgYml0cy4gICovCisrICBCRkRfUkVMT0NfRlIzMF82X0lOXzQsCisrCisrLyogVGhpcyBpcyBhIDE2IGJpdCByZWxvYyBmb3IgdGhlIEZSMzAgdGhhdCBzdG9yZXMgYW4gOCBiaXQgYnl0ZSBvZmZzZXQKKytpbnRvIDggYml0cy4gICovCisrICBCRkRfUkVMT0NfRlIzMF84X0lOXzgsCisrCisrLyogVGhpcyBpcyBhIDE2IGJpdCByZWxvYyBmb3IgdGhlIEZSMzAgdGhhdCBzdG9yZXMgYSA5IGJpdCBzaG9ydCBvZmZzZXQKKytpbnRvIDggYml0cy4gICovCisrICBCRkRfUkVMT0NfRlIzMF85X0lOXzgsCisrCisrLyogVGhpcyBpcyBhIDE2IGJpdCByZWxvYyBmb3IgdGhlIEZSMzAgdGhhdCBzdG9yZXMgYSAxMCBiaXQgd29yZCBvZmZzZXQKKytpbnRvIDggYml0cy4gICovCisrICBCRkRfUkVMT0NfRlIzMF8xMF9JTl84LAorKworKy8qIFRoaXMgaXMgYSAxNiBiaXQgcmVsb2MgZm9yIHRoZSBGUjMwIHRoYXQgc3RvcmVzIGEgOSBiaXQgcGMgcmVsYXRpdmUKKytzaG9ydCBvZmZzZXQgaW50byA4IGJpdHMuICAqLworKyAgQkZEX1JFTE9DX0ZSMzBfOV9QQ1JFTCwKKysKKysvKiBUaGlzIGlzIGEgMTYgYml0IHJlbG9jIGZvciB0aGUgRlIzMCB0aGF0IHN0b3JlcyBhIDEyIGJpdCBwYyByZWxhdGl2ZQorK3Nob3J0IG9mZnNldCBpbnRvIDExIGJpdHMuICAqLworKyAgQkZEX1JFTE9DX0ZSMzBfMTJfUENSRUwsCisrCisrLyogTW90b3JvbGEgTWNvcmUgcmVsb2NhdGlvbnMuICAqLworKyAgQkZEX1JFTE9DX01DT1JFX1BDUkVMX0lNTThCWTQsCisrICBCRkRfUkVMT0NfTUNPUkVfUENSRUxfSU1NMTFCWTIsCisrICBCRkRfUkVMT0NfTUNPUkVfUENSRUxfSU1NNEJZMiwKKysgIEJGRF9SRUxPQ19NQ09SRV9QQ1JFTF8zMiwKKysgIEJGRF9SRUxPQ19NQ09SRV9QQ1JFTF9KU1JfSU1NMTFCWTIsCisrICBCRkRfUkVMT0NfTUNPUkVfUlZBLAorKworKy8qIFRvc2hpYmEgTWVkaWEgUHJvY2Vzc29yIFJlbG9jYXRpb25zLiAgKi8KKysgIEJGRF9SRUxPQ19NRVBfOCwKKysgIEJGRF9SRUxPQ19NRVBfMTYsCisrICBCRkRfUkVMT0NfTUVQXzMyLAorKyAgQkZEX1JFTE9DX01FUF9QQ1JFTDhBMiwKKysgIEJGRF9SRUxPQ19NRVBfUENSRUwxMkEyLAorKyAgQkZEX1JFTE9DX01FUF9QQ1JFTDE3QTIsCisrICBCRkRfUkVMT0NfTUVQX1BDUkVMMjRBMiwKKysgIEJGRF9SRUxPQ19NRVBfUENBQlMyNEEyLAorKyAgQkZEX1JFTE9DX01FUF9MT1cxNiwKKysgIEJGRF9SRUxPQ19NRVBfSEkxNlUsCisrICBCRkRfUkVMT0NfTUVQX0hJMTZTLAorKyAgQkZEX1JFTE9DX01FUF9HUFJFTCwKKysgIEJGRF9SRUxPQ19NRVBfVFBSRUwsCisrICBCRkRfUkVMT0NfTUVQX1RQUkVMNywKKysgIEJGRF9SRUxPQ19NRVBfVFBSRUw3QTIsCisrICBCRkRfUkVMT0NfTUVQX1RQUkVMN0E0LAorKyAgQkZEX1JFTE9DX01FUF9VSU1NMjQsCisrICBCRkRfUkVMT0NfTUVQX0FERFIyNEE0LAorKyAgQkZEX1JFTE9DX01FUF9HTlVfVlRJTkhFUklULAorKyAgQkZEX1JFTE9DX01FUF9HTlVfVlRFTlRSWSwKKysKKysKKysvKiBUaGVzZSBhcmUgcmVsb2NhdGlvbnMgZm9yIHRoZSBHRVRBIGluc3RydWN0aW9uLiAgKi8KKysgIEJGRF9SRUxPQ19NTUlYX0dFVEEsCisrICBCRkRfUkVMT0NfTU1JWF9HRVRBXzEsCisrICBCRkRfUkVMT0NfTU1JWF9HRVRBXzIsCisrICBCRkRfUkVMT0NfTU1JWF9HRVRBXzMsCisrCisrLyogVGhlc2UgYXJlIHJlbG9jYXRpb25zIGZvciBhIGNvbmRpdGlvbmFsIGJyYW5jaCBpbnN0cnVjdGlvbi4gICovCisrICBCRkRfUkVMT0NfTU1JWF9DQlJBTkNILAorKyAgQkZEX1JFTE9DX01NSVhfQ0JSQU5DSF9KLAorKyAgQkZEX1JFTE9DX01NSVhfQ0JSQU5DSF8xLAorKyAgQkZEX1JFTE9DX01NSVhfQ0JSQU5DSF8yLAorKyAgQkZEX1JFTE9DX01NSVhfQ0JSQU5DSF8zLAorKworKy8qIFRoZXNlIGFyZSByZWxvY2F0aW9ucyBmb3IgdGhlIFBVU0hKIGluc3RydWN0aW9uLiAgKi8KKysgIEJGRF9SRUxPQ19NTUlYX1BVU0hKLAorKyAgQkZEX1JFTE9DX01NSVhfUFVTSEpfMSwKKysgIEJGRF9SRUxPQ19NTUlYX1BVU0hKXzIsCisrICBCRkRfUkVMT0NfTU1JWF9QVVNISl8zLAorKyAgQkZEX1JFTE9DX01NSVhfUFVTSEpfU1RVQkJBQkxFLAorKworKy8qIFRoZXNlIGFyZSByZWxvY2F0aW9ucyBmb3IgdGhlIEpNUCBpbnN0cnVjdGlvbi4gICovCisrICBCRkRfUkVMT0NfTU1JWF9KTVAsCisrICBCRkRfUkVMT0NfTU1JWF9KTVBfMSwKKysgIEJGRF9SRUxPQ19NTUlYX0pNUF8yLAorKyAgQkZEX1JFTE9DX01NSVhfSk1QXzMsCisrCisrLyogVGhpcyBpcyBhIHJlbG9jYXRpb24gZm9yIGEgcmVsYXRpdmUgYWRkcmVzcyBhcyBpbiBhIEdFVEEgaW5zdHJ1Y3Rpb24gb3IKKythIGJyYW5jaC4gICovCisrICBCRkRfUkVMT0NfTU1JWF9BRERSMTksCisrCisrLyogVGhpcyBpcyBhIHJlbG9jYXRpb24gZm9yIGEgcmVsYXRpdmUgYWRkcmVzcyBhcyBpbiBhIEpNUCBpbnN0cnVjdGlvbi4gICovCisrICBCRkRfUkVMT0NfTU1JWF9BRERSMjcsCisrCisrLyogVGhpcyBpcyBhIHJlbG9jYXRpb24gZm9yIGFuIGluc3RydWN0aW9uIGZpZWxkIHRoYXQgbWF5IGJlIGEgZ2VuZXJhbAorK3JlZ2lzdGVyIG9yIGEgdmFsdWUgMC4uMjU1LiAgKi8KKysgIEJGRF9SRUxPQ19NTUlYX1JFR19PUl9CWVRFLAorKworKy8qIFRoaXMgaXMgYSByZWxvY2F0aW9uIGZvciBhbiBpbnN0cnVjdGlvbiBmaWVsZCB0aGF0IG1heSBiZSBhIGdlbmVyYWwKKytyZWdpc3Rlci4gICovCisrICBCRkRfUkVMT0NfTU1JWF9SRUcsCisrCisrLyogVGhpcyBpcyBhIHJlbG9jYXRpb24gZm9yIHR3byBpbnN0cnVjdGlvbiBmaWVsZHMgaG9sZGluZyBhIHJlZ2lzdGVyIGFuZAorK2FuIG9mZnNldCwgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIHJlbG9jYXRpb24uICAqLworKyAgQkZEX1JFTE9DX01NSVhfQkFTRV9QTFVTX09GRlNFVCwKKysKKysvKiBUaGlzIHJlbG9jYXRpb24gaXMgYW4gYXNzZXJ0aW9uIHRoYXQgdGhlIGV4cHJlc3Npb24gaXMgbm90IGFsbG9jYXRlZCBhcworK2EgZ2xvYmFsIHJlZ2lzdGVyLiAgSXQgZG9lcyBub3QgbW9kaWZ5IGNvbnRlbnRzLiAgKi8KKysgIEJGRF9SRUxPQ19NTUlYX0xPQ0FMLAorKworKy8qIFRoaXMgaXMgYSAxNiBiaXQgcmVsb2MgZm9yIHRoZSBBVlIgdGhhdCBzdG9yZXMgOCBiaXQgcGMgcmVsYXRpdmUKKytzaG9ydCBvZmZzZXQgaW50byA3IGJpdHMuICAqLworKyAgQkZEX1JFTE9DX0FWUl83X1BDUkVMLAorKworKy8qIFRoaXMgaXMgYSAxNiBiaXQgcmVsb2MgZm9yIHRoZSBBVlIgdGhhdCBzdG9yZXMgMTMgYml0IHBjIHJlbGF0aXZlCisrc2hvcnQgb2Zmc2V0IGludG8gMTIgYml0cy4gICovCisrICBCRkRfUkVMT0NfQVZSXzEzX1BDUkVMLAorKworKy8qIFRoaXMgaXMgYSAxNiBiaXQgcmVsb2MgZm9yIHRoZSBBVlIgdGhhdCBzdG9yZXMgMTcgYml0IHZhbHVlICh1c3VhbGx5CisrcHJvZ3JhbSBtZW1vcnkgYWRkcmVzcykgaW50byAxNiBiaXRzLiAgKi8KKysgIEJGRF9SRUxPQ19BVlJfMTZfUE0sCisrCisrLyogVGhpcyBpcyBhIDE2IGJpdCByZWxvYyBmb3IgdGhlIEFWUiB0aGF0IHN0b3JlcyA4IGJpdCB2YWx1ZSAodXN1YWxseQorK2RhdGEgbWVtb3J5IGFkZHJlc3MpIGludG8gOCBiaXQgaW1tZWRpYXRlIHZhbHVlIG9mIExESSBpbnNuLiAgKi8KKysgIEJGRF9SRUxPQ19BVlJfTE84X0xESSwKKysKKysvKiBUaGlzIGlzIGEgMTYgYml0IHJlbG9jIGZvciB0aGUgQVZSIHRoYXQgc3RvcmVzIDggYml0IHZhbHVlIChoaWdoIDggYml0Cisrb2YgZGF0YSBtZW1vcnkgYWRkcmVzcykgaW50byA4IGJpdCBpbW1lZGlhdGUgdmFsdWUgb2YgTERJIGluc24uICAqLworKyAgQkZEX1JFTE9DX0FWUl9ISThfTERJLAorKworKy8qIFRoaXMgaXMgYSAxNiBiaXQgcmVsb2MgZm9yIHRoZSBBVlIgdGhhdCBzdG9yZXMgOCBiaXQgdmFsdWUgKG1vc3QgaGlnaCA4IGJpdAorK29mIHByb2dyYW0gbWVtb3J5IGFkZHJlc3MpIGludG8gOCBiaXQgaW1tZWRpYXRlIHZhbHVlIG9mIExESSBpbnNuLiAgKi8KKysgIEJGRF9SRUxPQ19BVlJfSEg4X0xESSwKKysKKysvKiBUaGlzIGlzIGEgMTYgYml0IHJlbG9jIGZvciB0aGUgQVZSIHRoYXQgc3RvcmVzIDggYml0IHZhbHVlIChtb3N0IGhpZ2ggOCBiaXQKKytvZiAzMiBiaXQgdmFsdWUpIGludG8gOCBiaXQgaW1tZWRpYXRlIHZhbHVlIG9mIExESSBpbnNuLiAgKi8KKysgIEJGRF9SRUxPQ19BVlJfTVM4X0xESSwKKysKKysvKiBUaGlzIGlzIGEgMTYgYml0IHJlbG9jIGZvciB0aGUgQVZSIHRoYXQgc3RvcmVzIG5lZ2F0ZWQgOCBiaXQgdmFsdWUKKysodXN1YWxseSBkYXRhIG1lbW9yeSBhZGRyZXNzKSBpbnRvIDggYml0IGltbWVkaWF0ZSB2YWx1ZSBvZiBTVUJJIGluc24uICAqLworKyAgQkZEX1JFTE9DX0FWUl9MTzhfTERJX05FRywKKysKKysvKiBUaGlzIGlzIGEgMTYgYml0IHJlbG9jIGZvciB0aGUgQVZSIHRoYXQgc3RvcmVzIG5lZ2F0ZWQgOCBiaXQgdmFsdWUKKysoaGlnaCA4IGJpdCBvZiBkYXRhIG1lbW9yeSBhZGRyZXNzKSBpbnRvIDggYml0IGltbWVkaWF0ZSB2YWx1ZSBvZgorK1NVQkkgaW5zbi4gICovCisrICBCRkRfUkVMT0NfQVZSX0hJOF9MRElfTkVHLAorKworKy8qIFRoaXMgaXMgYSAxNiBiaXQgcmVsb2MgZm9yIHRoZSBBVlIgdGhhdCBzdG9yZXMgbmVnYXRlZCA4IGJpdCB2YWx1ZQorKyhtb3N0IGhpZ2ggOCBiaXQgb2YgcHJvZ3JhbSBtZW1vcnkgYWRkcmVzcykgaW50byA4IGJpdCBpbW1lZGlhdGUgdmFsdWUKKytvZiBMREkgb3IgU1VCSSBpbnNuLiAgKi8KKysgIEJGRF9SRUxPQ19BVlJfSEg4X0xESV9ORUcsCisrCisrLyogVGhpcyBpcyBhIDE2IGJpdCByZWxvYyBmb3IgdGhlIEFWUiB0aGF0IHN0b3JlcyBuZWdhdGVkIDggYml0IHZhbHVlIChtc2IKKytvZiAzMiBiaXQgdmFsdWUpIGludG8gOCBiaXQgaW1tZWRpYXRlIHZhbHVlIG9mIExESSBpbnNuLiAgKi8KKysgIEJGRF9SRUxPQ19BVlJfTVM4X0xESV9ORUcsCisrCisrLyogVGhpcyBpcyBhIDE2IGJpdCByZWxvYyBmb3IgdGhlIEFWUiB0aGF0IHN0b3JlcyA4IGJpdCB2YWx1ZSAodXN1YWxseQorK2NvbW1hbmQgYWRkcmVzcykgaW50byA4IGJpdCBpbW1lZGlhdGUgdmFsdWUgb2YgTERJIGluc24uICAqLworKyAgQkZEX1JFTE9DX0FWUl9MTzhfTERJX1BNLAorKworKy8qIFRoaXMgaXMgYSAxNiBiaXQgcmVsb2MgZm9yIHRoZSBBVlIgdGhhdCBzdG9yZXMgOCBiaXQgdmFsdWUgCisrKGNvbW1hbmQgYWRkcmVzcykgaW50byA4IGJpdCBpbW1lZGlhdGUgdmFsdWUgb2YgTERJIGluc24uIElmIHRoZSBhZGRyZXNzCisraXMgYmV5b25kIHRoZSAxMjhrIGJvdW5kYXJ5LCB0aGUgbGlua2VyIGluc2VydHMgYSBqdW1wIHN0dWIgZm9yIHRoaXMgcmVsb2MKKytpbiB0aGUgbG93ZXIgMTI4ay4gICovCisrICBCRkRfUkVMT0NfQVZSX0xPOF9MRElfR1MsCisrCisrLyogVGhpcyBpcyBhIDE2IGJpdCByZWxvYyBmb3IgdGhlIEFWUiB0aGF0IHN0b3JlcyA4IGJpdCB2YWx1ZSAoaGlnaCA4IGJpdAorK29mIGNvbW1hbmQgYWRkcmVzcykgaW50byA4IGJpdCBpbW1lZGlhdGUgdmFsdWUgb2YgTERJIGluc24uICAqLworKyAgQkZEX1JFTE9DX0FWUl9ISThfTERJX1BNLAorKworKy8qIFRoaXMgaXMgYSAxNiBiaXQgcmVsb2MgZm9yIHRoZSBBVlIgdGhhdCBzdG9yZXMgOCBiaXQgdmFsdWUgKGhpZ2ggOCBiaXQKKytvZiBjb21tYW5kIGFkZHJlc3MpIGludG8gOCBiaXQgaW1tZWRpYXRlIHZhbHVlIG9mIExESSBpbnNuLiAgSWYgdGhlIGFkZHJlc3MKKytpcyBiZXlvbmQgdGhlIDEyOGsgYm91bmRhcnksIHRoZSBsaW5rZXIgaW5zZXJ0cyBhIGp1bXAgc3R1YiBmb3IgdGhpcyByZWxvYworK2JlbG93IDEyOGsuICAqLworKyAgQkZEX1JFTE9DX0FWUl9ISThfTERJX0dTLAorKworKy8qIFRoaXMgaXMgYSAxNiBiaXQgcmVsb2MgZm9yIHRoZSBBVlIgdGhhdCBzdG9yZXMgOCBiaXQgdmFsdWUgKG1vc3QgaGlnaCA4IGJpdAorK29mIGNvbW1hbmQgYWRkcmVzcykgaW50byA4IGJpdCBpbW1lZGlhdGUgdmFsdWUgb2YgTERJIGluc24uICAqLworKyAgQkZEX1JFTE9DX0FWUl9ISDhfTERJX1BNLAorKworKy8qIFRoaXMgaXMgYSAxNiBiaXQgcmVsb2MgZm9yIHRoZSBBVlIgdGhhdCBzdG9yZXMgbmVnYXRlZCA4IGJpdCB2YWx1ZQorKyh1c3VhbGx5IGNvbW1hbmQgYWRkcmVzcykgaW50byA4IGJpdCBpbW1lZGlhdGUgdmFsdWUgb2YgU1VCSSBpbnNuLiAgKi8KKysgIEJGRF9SRUxPQ19BVlJfTE84X0xESV9QTV9ORUcsCisrCisrLyogVGhpcyBpcyBhIDE2IGJpdCByZWxvYyBmb3IgdGhlIEFWUiB0aGF0IHN0b3JlcyBuZWdhdGVkIDggYml0IHZhbHVlCisrKGhpZ2ggOCBiaXQgb2YgMTYgYml0IGNvbW1hbmQgYWRkcmVzcykgaW50byA4IGJpdCBpbW1lZGlhdGUgdmFsdWUKKytvZiBTVUJJIGluc24uICAqLworKyAgQkZEX1JFTE9DX0FWUl9ISThfTERJX1BNX05FRywKKysKKysvKiBUaGlzIGlzIGEgMTYgYml0IHJlbG9jIGZvciB0aGUgQVZSIHRoYXQgc3RvcmVzIG5lZ2F0ZWQgOCBiaXQgdmFsdWUKKysoaGlnaCA2IGJpdCBvZiAyMiBiaXQgY29tbWFuZCBhZGRyZXNzKSBpbnRvIDggYml0IGltbWVkaWF0ZQorK3ZhbHVlIG9mIFNVQkkgaW5zbi4gICovCisrICBCRkRfUkVMT0NfQVZSX0hIOF9MRElfUE1fTkVHLAorKworKy8qIFRoaXMgaXMgYSAzMiBiaXQgcmVsb2MgZm9yIHRoZSBBVlIgdGhhdCBzdG9yZXMgMjMgYml0IHZhbHVlCisraW50byAyMiBiaXRzLiAgKi8KKysgIEJGRF9SRUxPQ19BVlJfQ0FMTCwKKysKKysvKiBUaGlzIGlzIGEgMTYgYml0IHJlbG9jIGZvciB0aGUgQVZSIHRoYXQgc3RvcmVzIGFsbCBuZWVkZWQgYml0cworK2ZvciBhYnNvbHV0ZSBhZGRyZXNzaW5nIHdpdGggbGRpIHdpdGggb3ZlcmZsb3cgY2hlY2sgdG8gbGlua3RpbWUgICovCisrICBCRkRfUkVMT0NfQVZSX0xESSwKKysKKysvKiBUaGlzIGlzIGEgNiBiaXQgcmVsb2MgZm9yIHRoZSBBVlIgdGhhdCBzdG9yZXMgb2Zmc2V0IGZvciBsZGQvc3RkCisraW5zdHJ1Y3Rpb25zICAqLworKyAgQkZEX1JFTE9DX0FWUl82LAorKworKy8qIFRoaXMgaXMgYSA2IGJpdCByZWxvYyBmb3IgdGhlIEFWUiB0aGF0IHN0b3JlcyBvZmZzZXQgZm9yIGFkaXcvc2JpdworK2luc3RydWN0aW9ucyAgKi8KKysgIEJGRF9SRUxPQ19BVlJfNl9BRElXLAorKworKy8qIERpcmVjdCAxMiBiaXQuICAqLworKyAgQkZEX1JFTE9DXzM5MF8xMiwKKysKKysvKiAxMiBiaXQgR09UIG9mZnNldC4gICovCisrICBCRkRfUkVMT0NfMzkwX0dPVDEyLAorKworKy8qIDMyIGJpdCBQQyByZWxhdGl2ZSBQTFQgYWRkcmVzcy4gICovCisrICBCRkRfUkVMT0NfMzkwX1BMVDMyLAorKworKy8qIENvcHkgc3ltYm9sIGF0IHJ1bnRpbWUuICAqLworKyAgQkZEX1JFTE9DXzM5MF9DT1BZLAorKworKy8qIENyZWF0ZSBHT1QgZW50cnkuICAqLworKyAgQkZEX1JFTE9DXzM5MF9HTE9CX0RBVCwKKysKKysvKiBDcmVhdGUgUExUIGVudHJ5LiAgKi8KKysgIEJGRF9SRUxPQ18zOTBfSk1QX1NMT1QsCisrCisrLyogQWRqdXN0IGJ5IHByb2dyYW0gYmFzZS4gICovCisrICBCRkRfUkVMT0NfMzkwX1JFTEFUSVZFLAorKworKy8qIDMyIGJpdCBQQyByZWxhdGl2ZSBvZmZzZXQgdG8gR09ULiAgKi8KKysgIEJGRF9SRUxPQ18zOTBfR09UUEMsCisrCisrLyogMTYgYml0IEdPVCBvZmZzZXQuICAqLworKyAgQkZEX1JFTE9DXzM5MF9HT1QxNiwKKysKKysvKiBQQyByZWxhdGl2ZSAxNiBiaXQgc2hpZnRlZCBieSAxLiAgKi8KKysgIEJGRF9SRUxPQ18zOTBfUEMxNkRCTCwKKysKKysvKiAxNiBiaXQgUEMgcmVsLiBQTFQgc2hpZnRlZCBieSAxLiAgKi8KKysgIEJGRF9SRUxPQ18zOTBfUExUMTZEQkwsCisrCisrLyogUEMgcmVsYXRpdmUgMzIgYml0IHNoaWZ0ZWQgYnkgMS4gICovCisrICBCRkRfUkVMT0NfMzkwX1BDMzJEQkwsCisrCisrLyogMzIgYml0IFBDIHJlbC4gUExUIHNoaWZ0ZWQgYnkgMS4gICovCisrICBCRkRfUkVMT0NfMzkwX1BMVDMyREJMLAorKworKy8qIDMyIGJpdCBQQyByZWwuIEdPVCBzaGlmdGVkIGJ5IDEuICAqLworKyAgQkZEX1JFTE9DXzM5MF9HT1RQQ0RCTCwKKysKKysvKiA2NCBiaXQgR09UIG9mZnNldC4gICovCisrICBCRkRfUkVMT0NfMzkwX0dPVDY0LAorKworKy8qIDY0IGJpdCBQQyByZWxhdGl2ZSBQTFQgYWRkcmVzcy4gICovCisrICBCRkRfUkVMT0NfMzkwX1BMVDY0LAorKworKy8qIDMyIGJpdCByZWwuIG9mZnNldCB0byBHT1QgZW50cnkuICAqLworKyAgQkZEX1JFTE9DXzM5MF9HT1RFTlQsCisrCisrLyogNjQgYml0IG9mZnNldCB0byBHT1QuICAqLworKyAgQkZEX1JFTE9DXzM5MF9HT1RPRkY2NCwKKysKKysvKiAxMi1iaXQgb2Zmc2V0IHRvIHN5bWJvbC1lbnRyeSB3aXRoaW4gR09ULCB3aXRoIFBMVCBoYW5kbGluZy4gICovCisrICBCRkRfUkVMT0NfMzkwX0dPVFBMVDEyLAorKworKy8qIDE2LWJpdCBvZmZzZXQgdG8gc3ltYm9sLWVudHJ5IHdpdGhpbiBHT1QsIHdpdGggUExUIGhhbmRsaW5nLiAgKi8KKysgIEJGRF9SRUxPQ18zOTBfR09UUExUMTYsCisrCisrLyogMzItYml0IG9mZnNldCB0byBzeW1ib2wtZW50cnkgd2l0aGluIEdPVCwgd2l0aCBQTFQgaGFuZGxpbmcuICAqLworKyAgQkZEX1JFTE9DXzM5MF9HT1RQTFQzMiwKKysKKysvKiA2NC1iaXQgb2Zmc2V0IHRvIHN5bWJvbC1lbnRyeSB3aXRoaW4gR09ULCB3aXRoIFBMVCBoYW5kbGluZy4gICovCisrICBCRkRfUkVMT0NfMzkwX0dPVFBMVDY0LAorKworKy8qIDMyLWJpdCByZWwuIG9mZnNldCB0byBzeW1ib2wtZW50cnkgd2l0aGluIEdPVCwgd2l0aCBQTFQgaGFuZGxpbmcuICAqLworKyAgQkZEX1JFTE9DXzM5MF9HT1RQTFRFTlQsCisrCisrLyogMTYtYml0IHJlbC4gb2Zmc2V0IGZyb20gdGhlIEdPVCB0byBhIFBMVCBlbnRyeS4gICovCisrICBCRkRfUkVMT0NfMzkwX1BMVE9GRjE2LAorKworKy8qIDMyLWJpdCByZWwuIG9mZnNldCBmcm9tIHRoZSBHT1QgdG8gYSBQTFQgZW50cnkuICAqLworKyAgQkZEX1JFTE9DXzM5MF9QTFRPRkYzMiwKKysKKysvKiA2NC1iaXQgcmVsLiBvZmZzZXQgZnJvbSB0aGUgR09UIHRvIGEgUExUIGVudHJ5LiAgKi8KKysgIEJGRF9SRUxPQ18zOTBfUExUT0ZGNjQsCisrCisrLyogczM5MCB0bHMgcmVsb2NhdGlvbnMuICAqLworKyAgQkZEX1JFTE9DXzM5MF9UTFNfTE9BRCwKKysgIEJGRF9SRUxPQ18zOTBfVExTX0dEQ0FMTCwKKysgIEJGRF9SRUxPQ18zOTBfVExTX0xEQ0FMTCwKKysgIEJGRF9SRUxPQ18zOTBfVExTX0dEMzIsCisrICBCRkRfUkVMT0NfMzkwX1RMU19HRDY0LAorKyAgQkZEX1JFTE9DXzM5MF9UTFNfR09USUUxMiwKKysgIEJGRF9SRUxPQ18zOTBfVExTX0dPVElFMzIsCisrICBCRkRfUkVMT0NfMzkwX1RMU19HT1RJRTY0LAorKyAgQkZEX1JFTE9DXzM5MF9UTFNfTERNMzIsCisrICBCRkRfUkVMT0NfMzkwX1RMU19MRE02NCwKKysgIEJGRF9SRUxPQ18zOTBfVExTX0lFMzIsCisrICBCRkRfUkVMT0NfMzkwX1RMU19JRTY0LAorKyAgQkZEX1JFTE9DXzM5MF9UTFNfSUVFTlQsCisrICBCRkRfUkVMT0NfMzkwX1RMU19MRTMyLAorKyAgQkZEX1JFTE9DXzM5MF9UTFNfTEU2NCwKKysgIEJGRF9SRUxPQ18zOTBfVExTX0xETzMyLAorKyAgQkZEX1JFTE9DXzM5MF9UTFNfTERPNjQsCisrICBCRkRfUkVMT0NfMzkwX1RMU19EVFBNT0QsCisrICBCRkRfUkVMT0NfMzkwX1RMU19EVFBPRkYsCisrICBCRkRfUkVMT0NfMzkwX1RMU19UUE9GRiwKKysKKysvKiBMb25nIGRpc3BsYWNlbWVudCBleHRlbnNpb24uICAqLworKyAgQkZEX1JFTE9DXzM5MF8yMCwKKysgIEJGRF9SRUxPQ18zOTBfR09UMjAsCisrICBCRkRfUkVMT0NfMzkwX0dPVFBMVDIwLAorKyAgQkZEX1JFTE9DXzM5MF9UTFNfR09USUUyMCwKKysKKysvKiBTY29yZSByZWxvY2F0aW9ucyAgKi8KKysgIEJGRF9SRUxPQ19TQ09SRV9EVU1NWTEsCisrCisrLyogTG93IDE2IGJpdCBmb3IgbG9hZC9zdG9yZSAgKi8KKysgIEJGRF9SRUxPQ19TQ09SRV9HUFJFTDE1LAorKworKy8qIFRoaXMgaXMgYSAyNC1iaXQgcmVsb2Mgd2l0aCB0aGUgcmlnaHQgMSBiaXQgYXNzdW1lZCB0byBiZSAwICAqLworKyAgQkZEX1JFTE9DX1NDT1JFX0RVTU1ZMiwKKysgIEJGRF9SRUxPQ19TQ09SRV9KTVAsCisrCisrLyogVGhpcyBpcyBhIDE5LWJpdCByZWxvYyB3aXRoIHRoZSByaWdodCAxIGJpdCBhc3N1bWVkIHRvIGJlIDAgICovCisrICBCRkRfUkVMT0NfU0NPUkVfQlJBTkNILAorKworKy8qIFRoaXMgaXMgYSAxMS1iaXQgcmVsb2Mgd2l0aCB0aGUgcmlnaHQgMSBiaXQgYXNzdW1lZCB0byBiZSAwICAqLworKyAgQkZEX1JFTE9DX1NDT1JFMTZfSk1QLAorKworKy8qIFRoaXMgaXMgYSA4LWJpdCByZWxvYyB3aXRoIHRoZSByaWdodCAxIGJpdCBhc3N1bWVkIHRvIGJlIDAgICovCisrICBCRkRfUkVMT0NfU0NPUkUxNl9CUkFOQ0gsCisrCisrLyogVW5kb2N1bWVudGVkIFNjb3JlIHJlbG9jcyAgKi8KKysgIEJGRF9SRUxPQ19TQ09SRV9HT1QxNSwKKysgIEJGRF9SRUxPQ19TQ09SRV9HT1RfTE8xNiwKKysgIEJGRF9SRUxPQ19TQ09SRV9DQUxMMTUsCisrICBCRkRfUkVMT0NfU0NPUkVfRFVNTVlfSEkxNiwKKysKKysvKiBTY2VuaXggSVAySyAtIDktYml0IHJlZ2lzdGVyIG51bWJlciAvIGRhdGEgYWRkcmVzcyAgKi8KKysgIEJGRF9SRUxPQ19JUDJLX0ZSOSwKKysKKysvKiBTY2VuaXggSVAySyAtIDQtYml0IHJlZ2lzdGVyL2RhdGEgYmFuayBudW1iZXIgICovCisrICBCRkRfUkVMT0NfSVAyS19CQU5LLAorKworKy8qIFNjZW5peCBJUDJLIC0gbG93IDEzIGJpdHMgb2YgaW5zdHJ1Y3Rpb24gd29yZCBhZGRyZXNzICAqLworKyAgQkZEX1JFTE9DX0lQMktfQUREUjE2Q0pQLAorKworKy8qIFNjZW5peCBJUDJLIC0gaGlnaCAzIGJpdHMgb2YgaW5zdHJ1Y3Rpb24gd29yZCBhZGRyZXNzICAqLworKyAgQkZEX1JFTE9DX0lQMktfUEFHRTMsCisrCisrLyogU2Nlbml4IElQMksgLSBleHQvbG93L2hpZ2ggOCBiaXRzIG9mIGRhdGEgYWRkcmVzcyAgKi8KKysgIEJGRF9SRUxPQ19JUDJLX0xPOERBVEEsCisrICBCRkRfUkVMT0NfSVAyS19ISThEQVRBLAorKyAgQkZEX1JFTE9DX0lQMktfRVg4REFUQSwKKysKKysvKiBTY2VuaXggSVAySyAtIGxvdy9oaWdoIDggYml0cyBvZiBpbnN0cnVjdGlvbiB3b3JkIGFkZHJlc3MgICovCisrICBCRkRfUkVMT0NfSVAyS19MTzhJTlNOLAorKyAgQkZEX1JFTE9DX0lQMktfSEk4SU5TTiwKKysKKysvKiBTY2VuaXggSVAySyAtIGV2ZW4vb2RkIFBDIG1vZGlmaWVyIHRvIG1vZGlmeSBzbmIgcGNsLjAgICovCisrICBCRkRfUkVMT0NfSVAyS19QQ19TS0lQLAorKworKy8qIFNjZW5peCBJUDJLIC0gMTYgYml0IHdvcmQgYWRkcmVzcyBpbiB0ZXh0IHNlY3Rpb24uICAqLworKyAgQkZEX1JFTE9DX0lQMktfVEVYVCwKKysKKysvKiBTY2VuaXggSVAySyAtIDctYml0IHNwIG9yIGRwIG9mZnNldCAgKi8KKysgIEJGRF9SRUxPQ19JUDJLX0ZSX09GRlNFVCwKKysKKysvKiBTY2VuaXggVlBFNEsgY29wcm9jZXNzb3IgLSBkYXRhL2luc24tc3BhY2UgYWRkcmVzc2luZyAgKi8KKysgIEJGRF9SRUxPQ19WUEU0S01BVEhfREFUQSwKKysgIEJGRF9SRUxPQ19WUEU0S01BVEhfSU5TTiwKKysKKysvKiBUaGVzZSB0d28gcmVsb2NhdGlvbnMgYXJlIHVzZWQgYnkgdGhlIGxpbmtlciB0byBkZXRlcm1pbmUgd2hpY2ggb2YKKyt0aGUgZW50cmllcyBpbiBhIEMrKyB2aXJ0dWFsIGZ1bmN0aW9uIHRhYmxlIGFyZSBhY3R1YWxseSB1c2VkLiAgV2hlbgorK3RoZSAtLWdjLXNlY3Rpb25zIG9wdGlvbiBpcyBnaXZlbiwgdGhlIGxpbmtlciB3aWxsIHplcm8gb3V0IHRoZSBlbnRyaWVzCisrdGhhdCBhcmUgbm90IHVzZWQsIHNvIHRoYXQgdGhlIGNvZGUgZm9yIHRob3NlIGZ1bmN0aW9ucyBuZWVkIG5vdCBiZQorK2luY2x1ZGVkIGluIHRoZSBvdXRwdXQuCisrCisrVlRBQkxFX0lOSEVSSVQgaXMgYSB6ZXJvLXNwYWNlIHJlbG9jYXRpb24gdXNlZCB0byBkZXNjcmliZSB0byB0aGUKKytsaW5rZXIgdGhlIGluaGVyaXRhbmNlIHRyZWUgb2YgYSBDKysgdmlydHVhbCBmdW5jdGlvbiB0YWJsZS4gIFRoZQorK3JlbG9jYXRpb24ncyBzeW1ib2wgc2hvdWxkIGJlIHRoZSBwYXJlbnQgY2xhc3MnIHZ0YWJsZSwgYW5kIHRoZQorK3JlbG9jYXRpb24gc2hvdWxkIGJlIGxvY2F0ZWQgYXQgdGhlIGNoaWxkIHZ0YWJsZS4KKysKKytWVEFCTEVfRU5UUlkgaXMgYSB6ZXJvLXNwYWNlIHJlbG9jYXRpb24gdGhhdCBkZXNjcmliZXMgdGhlIHVzZSBvZiBhCisrdmlydHVhbCBmdW5jdGlvbiB0YWJsZSBlbnRyeS4gIFRoZSByZWxvYydzIHN5bWJvbCBzaG91bGQgcmVmZXIgdG8gdGhlCisrdGFibGUgb2YgdGhlIGNsYXNzIG1lbnRpb25lZCBpbiB0aGUgY29kZS4gIE9mZiBvZiB0aGF0IGJhc2UsIGFuIG9mZnNldAorK2Rlc2NyaWJlcyB0aGUgZW50cnkgdGhhdCBpcyBiZWluZyB1c2VkLiAgRm9yIFJlbGEgaG9zdHMsIHRoaXMgb2Zmc2V0CisraXMgc3RvcmVkIGluIHRoZSByZWxvYydzIGFkZGVuZC4gIEZvciBSZWwgaG9zdHMsIHdlIGFyZSBmb3JjZWQgdG8gcHV0CisrdGhpcyBvZmZzZXQgaW4gdGhlIHJlbG9jJ3Mgc2VjdGlvbiBvZmZzZXQuICAqLworKyAgQkZEX1JFTE9DX1ZUQUJMRV9JTkhFUklULAorKyAgQkZEX1JFTE9DX1ZUQUJMRV9FTlRSWSwKKysKKysvKiBJbnRlbCBJQTY0IFJlbG9jYXRpb25zLiAgKi8KKysgIEJGRF9SRUxPQ19JQTY0X0lNTTE0LAorKyAgQkZEX1JFTE9DX0lBNjRfSU1NMjIsCisrICBCRkRfUkVMT0NfSUE2NF9JTU02NCwKKysgIEJGRF9SRUxPQ19JQTY0X0RJUjMyTVNCLAorKyAgQkZEX1JFTE9DX0lBNjRfRElSMzJMU0IsCisrICBCRkRfUkVMT0NfSUE2NF9ESVI2NE1TQiwKKysgIEJGRF9SRUxPQ19JQTY0X0RJUjY0TFNCLAorKyAgQkZEX1JFTE9DX0lBNjRfR1BSRUwyMiwKKysgIEJGRF9SRUxPQ19JQTY0X0dQUkVMNjRJLAorKyAgQkZEX1JFTE9DX0lBNjRfR1BSRUwzMk1TQiwKKysgIEJGRF9SRUxPQ19JQTY0X0dQUkVMMzJMU0IsCisrICBCRkRfUkVMT0NfSUE2NF9HUFJFTDY0TVNCLAorKyAgQkZEX1JFTE9DX0lBNjRfR1BSRUw2NExTQiwKKysgIEJGRF9SRUxPQ19JQTY0X0xUT0ZGMjIsCisrICBCRkRfUkVMT0NfSUE2NF9MVE9GRjY0SSwKKysgIEJGRF9SRUxPQ19JQTY0X1BMVE9GRjIyLAorKyAgQkZEX1JFTE9DX0lBNjRfUExUT0ZGNjRJLAorKyAgQkZEX1JFTE9DX0lBNjRfUExUT0ZGNjRNU0IsCisrICBCRkRfUkVMT0NfSUE2NF9QTFRPRkY2NExTQiwKKysgIEJGRF9SRUxPQ19JQTY0X0ZQVFI2NEksCisrICBCRkRfUkVMT0NfSUE2NF9GUFRSMzJNU0IsCisrICBCRkRfUkVMT0NfSUE2NF9GUFRSMzJMU0IsCisrICBCRkRfUkVMT0NfSUE2NF9GUFRSNjRNU0IsCisrICBCRkRfUkVMT0NfSUE2NF9GUFRSNjRMU0IsCisrICBCRkRfUkVMT0NfSUE2NF9QQ1JFTDIxQiwKKysgIEJGRF9SRUxPQ19JQTY0X1BDUkVMMjFCSSwKKysgIEJGRF9SRUxPQ19JQTY0X1BDUkVMMjFNLAorKyAgQkZEX1JFTE9DX0lBNjRfUENSRUwyMUYsCisrICBCRkRfUkVMT0NfSUE2NF9QQ1JFTDIyLAorKyAgQkZEX1JFTE9DX0lBNjRfUENSRUw2MEIsCisrICBCRkRfUkVMT0NfSUE2NF9QQ1JFTDY0SSwKKysgIEJGRF9SRUxPQ19JQTY0X1BDUkVMMzJNU0IsCisrICBCRkRfUkVMT0NfSUE2NF9QQ1JFTDMyTFNCLAorKyAgQkZEX1JFTE9DX0lBNjRfUENSRUw2NE1TQiwKKysgIEJGRF9SRUxPQ19JQTY0X1BDUkVMNjRMU0IsCisrICBCRkRfUkVMT0NfSUE2NF9MVE9GRl9GUFRSMjIsCisrICBCRkRfUkVMT0NfSUE2NF9MVE9GRl9GUFRSNjRJLAorKyAgQkZEX1JFTE9DX0lBNjRfTFRPRkZfRlBUUjMyTVNCLAorKyAgQkZEX1JFTE9DX0lBNjRfTFRPRkZfRlBUUjMyTFNCLAorKyAgQkZEX1JFTE9DX0lBNjRfTFRPRkZfRlBUUjY0TVNCLAorKyAgQkZEX1JFTE9DX0lBNjRfTFRPRkZfRlBUUjY0TFNCLAorKyAgQkZEX1JFTE9DX0lBNjRfU0VHUkVMMzJNU0IsCisrICBCRkRfUkVMT0NfSUE2NF9TRUdSRUwzMkxTQiwKKysgIEJGRF9SRUxPQ19JQTY0X1NFR1JFTDY0TVNCLAorKyAgQkZEX1JFTE9DX0lBNjRfU0VHUkVMNjRMU0IsCisrICBCRkRfUkVMT0NfSUE2NF9TRUNSRUwzMk1TQiwKKysgIEJGRF9SRUxPQ19JQTY0X1NFQ1JFTDMyTFNCLAorKyAgQkZEX1JFTE9DX0lBNjRfU0VDUkVMNjRNU0IsCisrICBCRkRfUkVMT0NfSUE2NF9TRUNSRUw2NExTQiwKKysgIEJGRF9SRUxPQ19JQTY0X1JFTDMyTVNCLAorKyAgQkZEX1JFTE9DX0lBNjRfUkVMMzJMU0IsCisrICBCRkRfUkVMT0NfSUE2NF9SRUw2NE1TQiwKKysgIEJGRF9SRUxPQ19JQTY0X1JFTDY0TFNCLAorKyAgQkZEX1JFTE9DX0lBNjRfTFRWMzJNU0IsCisrICBCRkRfUkVMT0NfSUE2NF9MVFYzMkxTQiwKKysgIEJGRF9SRUxPQ19JQTY0X0xUVjY0TVNCLAorKyAgQkZEX1JFTE9DX0lBNjRfTFRWNjRMU0IsCisrICBCRkRfUkVMT0NfSUE2NF9JUExUTVNCLAorKyAgQkZEX1JFTE9DX0lBNjRfSVBMVExTQiwKKysgIEJGRF9SRUxPQ19JQTY0X0NPUFksCisrICBCRkRfUkVMT0NfSUE2NF9MVE9GRjIyWCwKKysgIEJGRF9SRUxPQ19JQTY0X0xEWE1PViwKKysgIEJGRF9SRUxPQ19JQTY0X1RQUkVMMTQsCisrICBCRkRfUkVMT0NfSUE2NF9UUFJFTDIyLAorKyAgQkZEX1JFTE9DX0lBNjRfVFBSRUw2NEksCisrICBCRkRfUkVMT0NfSUE2NF9UUFJFTDY0TVNCLAorKyAgQkZEX1JFTE9DX0lBNjRfVFBSRUw2NExTQiwKKysgIEJGRF9SRUxPQ19JQTY0X0xUT0ZGX1RQUkVMMjIsCisrICBCRkRfUkVMT0NfSUE2NF9EVFBNT0Q2NE1TQiwKKysgIEJGRF9SRUxPQ19JQTY0X0RUUE1PRDY0TFNCLAorKyAgQkZEX1JFTE9DX0lBNjRfTFRPRkZfRFRQTU9EMjIsCisrICBCRkRfUkVMT0NfSUE2NF9EVFBSRUwxNCwKKysgIEJGRF9SRUxPQ19JQTY0X0RUUFJFTDIyLAorKyAgQkZEX1JFTE9DX0lBNjRfRFRQUkVMNjRJLAorKyAgQkZEX1JFTE9DX0lBNjRfRFRQUkVMMzJNU0IsCisrICBCRkRfUkVMT0NfSUE2NF9EVFBSRUwzMkxTQiwKKysgIEJGRF9SRUxPQ19JQTY0X0RUUFJFTDY0TVNCLAorKyAgQkZEX1JFTE9DX0lBNjRfRFRQUkVMNjRMU0IsCisrICBCRkRfUkVMT0NfSUE2NF9MVE9GRl9EVFBSRUwyMiwKKysKKysvKiBNb3Rvcm9sYSA2OEhDMTEgcmVsb2MuCisrVGhpcyBpcyB0aGUgOCBiaXQgaGlnaCBwYXJ0IG9mIGFuIGFic29sdXRlIGFkZHJlc3MuICAqLworKyAgQkZEX1JFTE9DX002OEhDMTFfSEk4LAorKworKy8qIE1vdG9yb2xhIDY4SEMxMSByZWxvYy4KKytUaGlzIGlzIHRoZSA4IGJpdCBsb3cgcGFydCBvZiBhbiBhYnNvbHV0ZSBhZGRyZXNzLiAgKi8KKysgIEJGRF9SRUxPQ19NNjhIQzExX0xPOCwKKysKKysvKiBNb3Rvcm9sYSA2OEhDMTEgcmVsb2MuCisrVGhpcyBpcyB0aGUgMyBiaXQgb2YgYSB2YWx1ZS4gICovCisrICBCRkRfUkVMT0NfTTY4SEMxMV8zQiwKKysKKysvKiBNb3Rvcm9sYSA2OEhDMTEgcmVsb2MuCisrVGhpcyByZWxvYyBtYXJrcyB0aGUgYmVnaW5uaW5nIG9mIGEganVtcC9jYWxsIGluc3RydWN0aW9uLgorK0l0IGlzIHVzZWQgZm9yIGxpbmtlciByZWxheGF0aW9uIHRvIGNvcnJlY3RseSBpZGVudGlmeSBiZWdpbm5pbmcKKytvZiBpbnN0cnVjdGlvbiBhbmQgY2hhbmdlIHNvbWUgYnJhbmNoZXMgdG8gdXNlIFBDLXJlbGF0aXZlCisrYWRkcmVzc2luZyBtb2RlLiAgKi8KKysgIEJGRF9SRUxPQ19NNjhIQzExX1JMX0pVTVAsCisrCisrLyogTW90b3JvbGEgNjhIQzExIHJlbG9jLgorK1RoaXMgcmVsb2MgbWFya3MgYSBncm91cCBvZiBzZXZlcmFsIGluc3RydWN0aW9ucyB0aGF0IGdjYyBnZW5lcmF0ZXMKKythbmQgZm9yIHdoaWNoIHRoZSBsaW5rZXIgcmVsYXhhdGlvbiBwYXNzIGNhbiBtb2RpZnkgYW5kL29yIHJlbW92ZQorK3NvbWUgb2YgdGhlbS4gICovCisrICBCRkRfUkVMT0NfTTY4SEMxMV9STF9HUk9VUCwKKysKKysvKiBNb3Rvcm9sYSA2OEhDMTEgcmVsb2MuCisrVGhpcyBpcyB0aGUgMTYtYml0IGxvd2VyIHBhcnQgb2YgYW4gYWRkcmVzcy4gIEl0IGlzIHVzZWQgZm9yICdjYWxsJworK2luc3RydWN0aW9uIHRvIHNwZWNpZnkgdGhlIHN5bWJvbCBhZGRyZXNzIHdpdGhvdXQgYW55IHNwZWNpYWwKKyt0cmFuc2Zvcm1hdGlvbiAoZHVlIHRvIG1lbW9yeSBiYW5rIHdpbmRvdykuICAqLworKyAgQkZEX1JFTE9DX002OEhDMTFfTE8xNiwKKysKKysvKiBNb3Rvcm9sYSA2OEhDMTEgcmVsb2MuCisrVGhpcyBpcyBhIDgtYml0IHJlbG9jIHRoYXQgc3BlY2lmaWVzIHRoZSBwYWdlIG51bWJlciBvZiBhbiBhZGRyZXNzLgorK0l0IGlzIHVzZWQgYnkgJ2NhbGwnIGluc3RydWN0aW9uIHRvIHNwZWNpZnkgdGhlIHBhZ2UgbnVtYmVyIG9mCisrdGhlIHN5bWJvbC4gICovCisrICBCRkRfUkVMT0NfTTY4SEMxMV9QQUdFLAorKworKy8qIE1vdG9yb2xhIDY4SEMxMSByZWxvYy4KKytUaGlzIGlzIGEgMjQtYml0IHJlbG9jIHRoYXQgcmVwcmVzZW50cyB0aGUgYWRkcmVzcyB3aXRoIGEgMTYtYml0CisrdmFsdWUgYW5kIGEgOC1iaXQgcGFnZSBudW1iZXIuICBUaGUgc3ltYm9sIGFkZHJlc3MgaXMgdHJhbnNmb3JtZWQKKyt0byBmb2xsb3cgdGhlIDE2SyBtZW1vcnkgYmFuayBvZiA2OEhDMTIgKHNlZW4gYXMgbWFwcGVkIGluIHRoZSB3aW5kb3cpLiAgKi8KKysgIEJGRF9SRUxPQ19NNjhIQzExXzI0LAorKworKy8qIE1vdG9yb2xhIDY4SEMxMiByZWxvYy4KKytUaGlzIGlzIHRoZSA1IGJpdHMgb2YgYSB2YWx1ZS4gICovCisrICBCRkRfUkVMT0NfTTY4SEMxMl81QiwKKysKKysvKiBOUyBDUjE2QyBSZWxvY2F0aW9ucy4gICovCisrICBCRkRfUkVMT0NfMTZDX05VTTA4LAorKyAgQkZEX1JFTE9DXzE2Q19OVU0wOF9DLAorKyAgQkZEX1JFTE9DXzE2Q19OVU0xNiwKKysgIEJGRF9SRUxPQ18xNkNfTlVNMTZfQywKKysgIEJGRF9SRUxPQ18xNkNfTlVNMzIsCisrICBCRkRfUkVMT0NfMTZDX05VTTMyX0MsCisrICBCRkRfUkVMT0NfMTZDX0RJU1AwNCwKKysgIEJGRF9SRUxPQ18xNkNfRElTUDA0X0MsCisrICBCRkRfUkVMT0NfMTZDX0RJU1AwOCwKKysgIEJGRF9SRUxPQ18xNkNfRElTUDA4X0MsCisrICBCRkRfUkVMT0NfMTZDX0RJU1AxNiwKKysgIEJGRF9SRUxPQ18xNkNfRElTUDE2X0MsCisrICBCRkRfUkVMT0NfMTZDX0RJU1AyNCwKKysgIEJGRF9SRUxPQ18xNkNfRElTUDI0X0MsCisrICBCRkRfUkVMT0NfMTZDX0RJU1AyNGEsCisrICBCRkRfUkVMT0NfMTZDX0RJU1AyNGFfQywKKysgIEJGRF9SRUxPQ18xNkNfUkVHMDQsCisrICBCRkRfUkVMT0NfMTZDX1JFRzA0X0MsCisrICBCRkRfUkVMT0NfMTZDX1JFRzA0YSwKKysgIEJGRF9SRUxPQ18xNkNfUkVHMDRhX0MsCisrICBCRkRfUkVMT0NfMTZDX1JFRzE0LAorKyAgQkZEX1JFTE9DXzE2Q19SRUcxNF9DLAorKyAgQkZEX1JFTE9DXzE2Q19SRUcxNiwKKysgIEJGRF9SRUxPQ18xNkNfUkVHMTZfQywKKysgIEJGRF9SRUxPQ18xNkNfUkVHMjAsCisrICBCRkRfUkVMT0NfMTZDX1JFRzIwX0MsCisrICBCRkRfUkVMT0NfMTZDX0FCUzIwLAorKyAgQkZEX1JFTE9DXzE2Q19BQlMyMF9DLAorKyAgQkZEX1JFTE9DXzE2Q19BQlMyNCwKKysgIEJGRF9SRUxPQ18xNkNfQUJTMjRfQywKKysgIEJGRF9SRUxPQ18xNkNfSU1NMDQsCisrICBCRkRfUkVMT0NfMTZDX0lNTTA0X0MsCisrICBCRkRfUkVMT0NfMTZDX0lNTTE2LAorKyAgQkZEX1JFTE9DXzE2Q19JTU0xNl9DLAorKyAgQkZEX1JFTE9DXzE2Q19JTU0yMCwKKysgIEJGRF9SRUxPQ18xNkNfSU1NMjBfQywKKysgIEJGRF9SRUxPQ18xNkNfSU1NMjQsCisrICBCRkRfUkVMT0NfMTZDX0lNTTI0X0MsCisrICBCRkRfUkVMT0NfMTZDX0lNTTMyLAorKyAgQkZEX1JFTE9DXzE2Q19JTU0zMl9DLAorKworKy8qIE5TIENSMTYgUmVsb2NhdGlvbnMuICAqLworKyAgQkZEX1JFTE9DX0NSMTZfTlVNOCwKKysgIEJGRF9SRUxPQ19DUjE2X05VTTE2LAorKyAgQkZEX1JFTE9DX0NSMTZfTlVNMzIsCisrICBCRkRfUkVMT0NfQ1IxNl9OVU0zMmEsCisrICBCRkRfUkVMT0NfQ1IxNl9SRUdSRUwwLAorKyAgQkZEX1JFTE9DX0NSMTZfUkVHUkVMNCwKKysgIEJGRF9SRUxPQ19DUjE2X1JFR1JFTDRhLAorKyAgQkZEX1JFTE9DX0NSMTZfUkVHUkVMMTQsCisrICBCRkRfUkVMT0NfQ1IxNl9SRUdSRUwxNGEsCisrICBCRkRfUkVMT0NfQ1IxNl9SRUdSRUwxNiwKKysgIEJGRF9SRUxPQ19DUjE2X1JFR1JFTDIwLAorKyAgQkZEX1JFTE9DX0NSMTZfUkVHUkVMMjBhLAorKyAgQkZEX1JFTE9DX0NSMTZfQUJTMjAsCisrICBCRkRfUkVMT0NfQ1IxNl9BQlMyNCwKKysgIEJGRF9SRUxPQ19DUjE2X0lNTTQsCisrICBCRkRfUkVMT0NfQ1IxNl9JTU04LAorKyAgQkZEX1JFTE9DX0NSMTZfSU1NMTYsCisrICBCRkRfUkVMT0NfQ1IxNl9JTU0yMCwKKysgIEJGRF9SRUxPQ19DUjE2X0lNTTI0LAorKyAgQkZEX1JFTE9DX0NSMTZfSU1NMzIsCisrICBCRkRfUkVMT0NfQ1IxNl9JTU0zMmEsCisrICBCRkRfUkVMT0NfQ1IxNl9ESVNQNCwKKysgIEJGRF9SRUxPQ19DUjE2X0RJU1A4LAorKyAgQkZEX1JFTE9DX0NSMTZfRElTUDE2LAorKyAgQkZEX1JFTE9DX0NSMTZfRElTUDIwLAorKyAgQkZEX1JFTE9DX0NSMTZfRElTUDI0LAorKyAgQkZEX1JFTE9DX0NSMTZfRElTUDI0YSwKKysKKysvKiBOUyBDUlggUmVsb2NhdGlvbnMuICAqLworKyAgQkZEX1JFTE9DX0NSWF9SRUw0LAorKyAgQkZEX1JFTE9DX0NSWF9SRUw4LAorKyAgQkZEX1JFTE9DX0NSWF9SRUw4X0NNUCwKKysgIEJGRF9SRUxPQ19DUlhfUkVMMTYsCisrICBCRkRfUkVMT0NfQ1JYX1JFTDI0LAorKyAgQkZEX1JFTE9DX0NSWF9SRUwzMiwKKysgIEJGRF9SRUxPQ19DUlhfUkVHUkVMMTIsCisrICBCRkRfUkVMT0NfQ1JYX1JFR1JFTDIyLAorKyAgQkZEX1JFTE9DX0NSWF9SRUdSRUwyOCwKKysgIEJGRF9SRUxPQ19DUlhfUkVHUkVMMzIsCisrICBCRkRfUkVMT0NfQ1JYX0FCUzE2LAorKyAgQkZEX1JFTE9DX0NSWF9BQlMzMiwKKysgIEJGRF9SRUxPQ19DUlhfTlVNOCwKKysgIEJGRF9SRUxPQ19DUlhfTlVNMTYsCisrICBCRkRfUkVMT0NfQ1JYX05VTTMyLAorKyAgQkZEX1JFTE9DX0NSWF9JTU0xNiwKKysgIEJGRF9SRUxPQ19DUlhfSU1NMzIsCisrICBCRkRfUkVMT0NfQ1JYX1NXSVRDSDgsCisrICBCRkRfUkVMT0NfQ1JYX1NXSVRDSDE2LAorKyAgQkZEX1JFTE9DX0NSWF9TV0lUQ0gzMiwKKysKKysvKiBUaGVzZSByZWxvY3MgYXJlIG9ubHkgdXNlZCB3aXRoaW4gdGhlIENSSVMgYXNzZW1ibGVyLiAgVGhleSBhcmUgbm90CisrKGF0IHByZXNlbnQpIHdyaXR0ZW4gdG8gYW55IG9iamVjdCBmaWxlcy4gICovCisrICBCRkRfUkVMT0NfQ1JJU19CRElTUDgsCisrICBCRkRfUkVMT0NfQ1JJU19VTlNJR05FRF81LAorKyAgQkZEX1JFTE9DX0NSSVNfU0lHTkVEXzYsCisrICBCRkRfUkVMT0NfQ1JJU19VTlNJR05FRF82LAorKyAgQkZEX1JFTE9DX0NSSVNfU0lHTkVEXzgsCisrICBCRkRfUkVMT0NfQ1JJU19VTlNJR05FRF84LAorKyAgQkZEX1JFTE9DX0NSSVNfU0lHTkVEXzE2LAorKyAgQkZEX1JFTE9DX0NSSVNfVU5TSUdORURfMTYsCisrICBCRkRfUkVMT0NfQ1JJU19MQVBDUV9PRkZTRVQsCisrICBCRkRfUkVMT0NfQ1JJU19VTlNJR05FRF80LAorKworKy8qIFJlbG9jcyB1c2VkIGluIEVMRiBzaGFyZWQgbGlicmFyaWVzIGZvciBDUklTLiAgKi8KKysgIEJGRF9SRUxPQ19DUklTX0NPUFksCisrICBCRkRfUkVMT0NfQ1JJU19HTE9CX0RBVCwKKysgIEJGRF9SRUxPQ19DUklTX0pVTVBfU0xPVCwKKysgIEJGRF9SRUxPQ19DUklTX1JFTEFUSVZFLAorKworKy8qIDMyLWJpdCBvZmZzZXQgdG8gc3ltYm9sLWVudHJ5IHdpdGhpbiBHT1QuICAqLworKyAgQkZEX1JFTE9DX0NSSVNfMzJfR09ULAorKworKy8qIDE2LWJpdCBvZmZzZXQgdG8gc3ltYm9sLWVudHJ5IHdpdGhpbiBHT1QuICAqLworKyAgQkZEX1JFTE9DX0NSSVNfMTZfR09ULAorKworKy8qIDMyLWJpdCBvZmZzZXQgdG8gc3ltYm9sLWVudHJ5IHdpdGhpbiBHT1QsIHdpdGggUExUIGhhbmRsaW5nLiAgKi8KKysgIEJGRF9SRUxPQ19DUklTXzMyX0dPVFBMVCwKKysKKysvKiAxNi1iaXQgb2Zmc2V0IHRvIHN5bWJvbC1lbnRyeSB3aXRoaW4gR09ULCB3aXRoIFBMVCBoYW5kbGluZy4gICovCisrICBCRkRfUkVMT0NfQ1JJU18xNl9HT1RQTFQsCisrCisrLyogMzItYml0IG9mZnNldCB0byBzeW1ib2wsIHJlbGF0aXZlIHRvIEdPVC4gICovCisrICBCRkRfUkVMT0NfQ1JJU18zMl9HT1RSRUwsCisrCisrLyogMzItYml0IG9mZnNldCB0byBzeW1ib2wgd2l0aCBQTFQgZW50cnksIHJlbGF0aXZlIHRvIEdPVC4gICovCisrICBCRkRfUkVMT0NfQ1JJU18zMl9QTFRfR09UUkVMLAorKworKy8qIDMyLWJpdCBvZmZzZXQgdG8gc3ltYm9sIHdpdGggUExUIGVudHJ5LCByZWxhdGl2ZSB0byB0aGlzIHJlbG9jYXRpb24uICAqLworKyAgQkZEX1JFTE9DX0NSSVNfMzJfUExUX1BDUkVMLAorKworKy8qIEludGVsIGk4NjAgUmVsb2NhdGlvbnMuICAqLworKyAgQkZEX1JFTE9DXzg2MF9DT1BZLAorKyAgQkZEX1JFTE9DXzg2MF9HTE9CX0RBVCwKKysgIEJGRF9SRUxPQ184NjBfSlVNUF9TTE9ULAorKyAgQkZEX1JFTE9DXzg2MF9SRUxBVElWRSwKKysgIEJGRF9SRUxPQ184NjBfUEMyNiwKKysgIEJGRF9SRUxPQ184NjBfUExUMjYsCisrICBCRkRfUkVMT0NfODYwX1BDMTYsCisrICBCRkRfUkVMT0NfODYwX0xPVzAsCisrICBCRkRfUkVMT0NfODYwX1NQTElUMCwKKysgIEJGRF9SRUxPQ184NjBfTE9XMSwKKysgIEJGRF9SRUxPQ184NjBfU1BMSVQxLAorKyAgQkZEX1JFTE9DXzg2MF9MT1cyLAorKyAgQkZEX1JFTE9DXzg2MF9TUExJVDIsCisrICBCRkRfUkVMT0NfODYwX0xPVzMsCisrICBCRkRfUkVMT0NfODYwX0xPR09UMCwKKysgIEJGRF9SRUxPQ184NjBfU1BHT1QwLAorKyAgQkZEX1JFTE9DXzg2MF9MT0dPVDEsCisrICBCRkRfUkVMT0NfODYwX1NQR09UMSwKKysgIEJGRF9SRUxPQ184NjBfTE9HT1RPRkYwLAorKyAgQkZEX1JFTE9DXzg2MF9TUEdPVE9GRjAsCisrICBCRkRfUkVMT0NfODYwX0xPR09UT0ZGMSwKKysgIEJGRF9SRUxPQ184NjBfU1BHT1RPRkYxLAorKyAgQkZEX1JFTE9DXzg2MF9MT0dPVE9GRjIsCisrICBCRkRfUkVMT0NfODYwX0xPR09UT0ZGMywKKysgIEJGRF9SRUxPQ184NjBfTE9QQywKKysgIEJGRF9SRUxPQ184NjBfSElHSEFESiwKKysgIEJGRF9SRUxPQ184NjBfSEFHT1QsCisrICBCRkRfUkVMT0NfODYwX0hBR09UT0ZGLAorKyAgQkZEX1JFTE9DXzg2MF9IQVBDLAorKyAgQkZEX1JFTE9DXzg2MF9ISUdILAorKyAgQkZEX1JFTE9DXzg2MF9ISUdPVCwKKysgIEJGRF9SRUxPQ184NjBfSElHT1RPRkYsCisrCisrLyogT3BlblJJU0MgUmVsb2NhdGlvbnMuICAqLworKyAgQkZEX1JFTE9DX09QRU5SSVNDX0FCU18yNiwKKysgIEJGRF9SRUxPQ19PUEVOUklTQ19SRUxfMjYsCisrCisrLyogSDggZWxmIFJlbG9jYXRpb25zLiAgKi8KKysgIEJGRF9SRUxPQ19IOF9ESVIxNkE4LAorKyAgQkZEX1JFTE9DX0g4X0RJUjE2UjgsCisrICBCRkRfUkVMT0NfSDhfRElSMjRBOCwKKysgIEJGRF9SRUxPQ19IOF9ESVIyNFI4LAorKyAgQkZEX1JFTE9DX0g4X0RJUjMyQTE2LAorKworKy8qIFNvbnkgWHN0b3JteTE2IFJlbG9jYXRpb25zLiAgKi8KKysgIEJGRF9SRUxPQ19YU1RPUk1ZMTZfUkVMXzEyLAorKyAgQkZEX1JFTE9DX1hTVE9STVkxNl8xMiwKKysgIEJGRF9SRUxPQ19YU1RPUk1ZMTZfMjQsCisrICBCRkRfUkVMT0NfWFNUT1JNWTE2X0ZQVFIxNiwKKysKKysvKiBTZWxmLWRlc2NyaWJpbmcgY29tcGxleCByZWxvY2F0aW9ucy4gICovCisrICBCRkRfUkVMT0NfUkVMQywKKysKKysKKysvKiBJbmZpbmVvbiBSZWxvY2F0aW9ucy4gICovCisrICBCRkRfUkVMT0NfWEMxNlhfUEFHLAorKyAgQkZEX1JFTE9DX1hDMTZYX1BPRiwKKysgIEJGRF9SRUxPQ19YQzE2WF9TRUcsCisrICBCRkRfUkVMT0NfWEMxNlhfU09GLAorKworKy8qIFJlbG9jYXRpb25zIHVzZWQgYnkgVkFYIEVMRi4gICovCisrICBCRkRfUkVMT0NfVkFYX0dMT0JfREFULAorKyAgQkZEX1JFTE9DX1ZBWF9KTVBfU0xPVCwKKysgIEJGRF9SRUxPQ19WQVhfUkVMQVRJVkUsCisrCisrLyogTW9ycGhvIE1UIC0gMTYgYml0IGltbWVkaWF0ZSByZWxvY2F0aW9uLiAgKi8KKysgIEJGRF9SRUxPQ19NVF9QQzE2LAorKworKy8qIE1vcnBobyBNVCAtIEhpIDE2IGJpdHMgb2YgYW4gYWRkcmVzcy4gICovCisrICBCRkRfUkVMT0NfTVRfSEkxNiwKKysKKysvKiBNb3JwaG8gTVQgLSBMb3cgMTYgYml0cyBvZiBhbiBhZGRyZXNzLiAgKi8KKysgIEJGRF9SRUxPQ19NVF9MTzE2LAorKworKy8qIE1vcnBobyBNVCAtIFVzZWQgdG8gdGVsbCB0aGUgbGlua2VyIHdoaWNoIHZ0YWJsZSBlbnRyaWVzIGFyZSB1c2VkLiAgKi8KKysgIEJGRF9SRUxPQ19NVF9HTlVfVlRJTkhFUklULAorKworKy8qIE1vcnBobyBNVCAtIFVzZWQgdG8gdGVsbCB0aGUgbGlua2VyIHdoaWNoIHZ0YWJsZSBlbnRyaWVzIGFyZSB1c2VkLiAgKi8KKysgIEJGRF9SRUxPQ19NVF9HTlVfVlRFTlRSWSwKKysKKysvKiBNb3JwaG8gTVQgLSA4IGJpdCBpbW1lZGlhdGUgcmVsb2NhdGlvbi4gICovCisrICBCRkRfUkVMT0NfTVRfUENJTlNOOCwKKysKKysvKiBtc3A0MzAgc3BlY2lmaWMgcmVsb2NhdGlvbiBjb2RlcyAgKi8KKysgIEJGRF9SRUxPQ19NU1A0MzBfMTBfUENSRUwsCisrICBCRkRfUkVMT0NfTVNQNDMwXzE2X1BDUkVMLAorKyAgQkZEX1JFTE9DX01TUDQzMF8xNiwKKysgIEJGRF9SRUxPQ19NU1A0MzBfMTZfUENSRUxfQllURSwKKysgIEJGRF9SRUxPQ19NU1A0MzBfMTZfQllURSwKKysgIEJGRF9SRUxPQ19NU1A0MzBfMlhfUENSRUwsCisrICBCRkRfUkVMT0NfTVNQNDMwX1JMX1BDUkVMLAorKworKy8qIElRMjAwMCBSZWxvY2F0aW9ucy4gICovCisrICBCRkRfUkVMT0NfSVEyMDAwX09GRlNFVF8xNiwKKysgIEJGRF9SRUxPQ19JUTIwMDBfT0ZGU0VUXzIxLAorKyAgQkZEX1JFTE9DX0lRMjAwMF9VSEkxNiwKKysKKysvKiBTcGVjaWFsIFh0ZW5zYSByZWxvY2F0aW9uIHVzZWQgb25seSBieSBQTFQgZW50cmllcyBpbiBFTEYgc2hhcmVkCisrb2JqZWN0cyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBydW50aW1lIGxpbmtlciBzaG91bGQgc2V0IHRoZSB2YWx1ZQorK3RvIG9uZSBvZiBpdHMgb3duIGludGVybmFsIGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMuICAqLworKyAgQkZEX1JFTE9DX1hURU5TQV9SVExELAorKworKy8qIFh0ZW5zYSByZWxvY2F0aW9ucyBmb3IgRUxGIHNoYXJlZCBvYmplY3RzLiAgKi8KKysgIEJGRF9SRUxPQ19YVEVOU0FfR0xPQl9EQVQsCisrICBCRkRfUkVMT0NfWFRFTlNBX0pNUF9TTE9ULAorKyAgQkZEX1JFTE9DX1hURU5TQV9SRUxBVElWRSwKKysKKysvKiBYdGVuc2EgcmVsb2NhdGlvbiB1c2VkIGluIEVMRiBvYmplY3QgZmlsZXMgZm9yIHN5bWJvbHMgdGhhdCBtYXkgcmVxdWlyZQorK1BMVCBlbnRyaWVzLiAgT3RoZXJ3aXNlLCB0aGlzIGlzIGp1c3QgYSBnZW5lcmljIDMyLWJpdCByZWxvY2F0aW9uLiAgKi8KKysgIEJGRF9SRUxPQ19YVEVOU0FfUExULAorKworKy8qIFh0ZW5zYSByZWxvY2F0aW9ucyB0byBtYXJrIHRoZSBkaWZmZXJlbmNlIG9mIHR3byBsb2NhbCBzeW1ib2xzLgorK1RoZXNlIGFyZSBvbmx5IG5lZWRlZCB0byBzdXBwb3J0IGxpbmtlciByZWxheGF0aW9uIGFuZCBjYW4gYmUgaWdub3JlZAorK3doZW4gbm90IHJlbGF4aW5nLiAgVGhlIGZpZWxkIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlIGRpZmZlcmVuY2UKKythc3N1bWluZyBubyByZWxheGF0aW9uLiAgVGhlIHJlbG9jYXRpb24gZW5jb2RlcyB0aGUgcG9zaXRpb24gb2YgdGhlCisrZmlyc3Qgc3ltYm9sIHNvIHRoZSBsaW5rZXIgY2FuIGRldGVybWluZSB3aGV0aGVyIHRvIGFkanVzdCB0aGUgZmllbGQKKyt2YWx1ZS4gICovCisrICBCRkRfUkVMT0NfWFRFTlNBX0RJRkY4LAorKyAgQkZEX1JFTE9DX1hURU5TQV9ESUZGMTYsCisrICBCRkRfUkVMT0NfWFRFTlNBX0RJRkYzMiwKKysKKysvKiBHZW5lcmljIFh0ZW5zYSByZWxvY2F0aW9ucyBmb3IgaW5zdHJ1Y3Rpb24gb3BlcmFuZHMuICBPbmx5IHRoZSBzbG90CisrbnVtYmVyIGlzIGVuY29kZWQgaW4gdGhlIHJlbG9jYXRpb24uICBUaGUgcmVsb2NhdGlvbiBhcHBsaWVzIHRvIHRoZQorK2xhc3QgUEMtcmVsYXRpdmUgaW1tZWRpYXRlIG9wZXJhbmQsIG9yIGlmIHRoZXJlIGFyZSBubyBQQy1yZWxhdGl2ZQorK2ltbWVkaWF0ZXMsIHRvIHRoZSBsYXN0IGltbWVkaWF0ZSBvcGVyYW5kLiAgKi8KKysgIEJGRF9SRUxPQ19YVEVOU0FfU0xPVDBfT1AsCisrICBCRkRfUkVMT0NfWFRFTlNBX1NMT1QxX09QLAorKyAgQkZEX1JFTE9DX1hURU5TQV9TTE9UMl9PUCwKKysgIEJGRF9SRUxPQ19YVEVOU0FfU0xPVDNfT1AsCisrICBCRkRfUkVMT0NfWFRFTlNBX1NMT1Q0X09QLAorKyAgQkZEX1JFTE9DX1hURU5TQV9TTE9UNV9PUCwKKysgIEJGRF9SRUxPQ19YVEVOU0FfU0xPVDZfT1AsCisrICBCRkRfUkVMT0NfWFRFTlNBX1NMT1Q3X09QLAorKyAgQkZEX1JFTE9DX1hURU5TQV9TTE9UOF9PUCwKKysgIEJGRF9SRUxPQ19YVEVOU0FfU0xPVDlfT1AsCisrICBCRkRfUkVMT0NfWFRFTlNBX1NMT1QxMF9PUCwKKysgIEJGRF9SRUxPQ19YVEVOU0FfU0xPVDExX09QLAorKyAgQkZEX1JFTE9DX1hURU5TQV9TTE9UMTJfT1AsCisrICBCRkRfUkVMT0NfWFRFTlNBX1NMT1QxM19PUCwKKysgIEJGRF9SRUxPQ19YVEVOU0FfU0xPVDE0X09QLAorKworKy8qIEFsdGVybmF0ZSBYdGVuc2EgcmVsb2NhdGlvbnMuICBPbmx5IHRoZSBzbG90IGlzIGVuY29kZWQgaW4gdGhlCisrcmVsb2NhdGlvbi4gIFRoZSBtZWFuaW5nIG9mIHRoZXNlIHJlbG9jYXRpb25zIGlzIG9wY29kZS1zcGVjaWZpYy4gICovCisrICBCRkRfUkVMT0NfWFRFTlNBX1NMT1QwX0FMVCwKKysgIEJGRF9SRUxPQ19YVEVOU0FfU0xPVDFfQUxULAorKyAgQkZEX1JFTE9DX1hURU5TQV9TTE9UMl9BTFQsCisrICBCRkRfUkVMT0NfWFRFTlNBX1NMT1QzX0FMVCwKKysgIEJGRF9SRUxPQ19YVEVOU0FfU0xPVDRfQUxULAorKyAgQkZEX1JFTE9DX1hURU5TQV9TTE9UNV9BTFQsCisrICBCRkRfUkVMT0NfWFRFTlNBX1NMT1Q2X0FMVCwKKysgIEJGRF9SRUxPQ19YVEVOU0FfU0xPVDdfQUxULAorKyAgQkZEX1JFTE9DX1hURU5TQV9TTE9UOF9BTFQsCisrICBCRkRfUkVMT0NfWFRFTlNBX1NMT1Q5X0FMVCwKKysgIEJGRF9SRUxPQ19YVEVOU0FfU0xPVDEwX0FMVCwKKysgIEJGRF9SRUxPQ19YVEVOU0FfU0xPVDExX0FMVCwKKysgIEJGRF9SRUxPQ19YVEVOU0FfU0xPVDEyX0FMVCwKKysgIEJGRF9SRUxPQ19YVEVOU0FfU0xPVDEzX0FMVCwKKysgIEJGRF9SRUxPQ19YVEVOU0FfU0xPVDE0X0FMVCwKKysKKysvKiBYdGVuc2EgcmVsb2NhdGlvbnMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICBUaGVzZSBoYXZlIGFsbCBiZWVuCisrcmVwbGFjZWQgYnkgQkZEX1JFTE9DX1hURU5TQV9TTE9UMF9PUC4gICovCisrICBCRkRfUkVMT0NfWFRFTlNBX09QMCwKKysgIEJGRF9SRUxPQ19YVEVOU0FfT1AxLAorKyAgQkZEX1JFTE9DX1hURU5TQV9PUDIsCisrCisrLyogWHRlbnNhIHJlbG9jYXRpb24gdG8gbWFyayB0aGF0IHRoZSBhc3NlbWJsZXIgZXhwYW5kZWQgdGhlCisraW5zdHJ1Y3Rpb25zIGZyb20gYW4gb3JpZ2luYWwgdGFyZ2V0LiAgVGhlIGV4cGFuc2lvbiBzaXplIGlzCisrZW5jb2RlZCBpbiB0aGUgcmVsb2Mgc2l6ZS4gICovCisrICBCRkRfUkVMT0NfWFRFTlNBX0FTTV9FWFBBTkQsCisrCisrLyogWHRlbnNhIHJlbG9jYXRpb24gdG8gbWFyayB0aGF0IHRoZSBsaW5rZXIgc2hvdWxkIHNpbXBsaWZ5CisrYXNzZW1ibGVyLWV4cGFuZGVkIGluc3RydWN0aW9ucy4gIFRoaXMgaXMgY29tbW9ubHkgdXNlZAorK2ludGVybmFsbHkgYnkgdGhlIGxpbmtlciBhZnRlciBhbmFseXNpcyBvZiBhCisrQkZEX1JFTE9DX1hURU5TQV9BU01fRVhQQU5ELiAgKi8KKysgIEJGRF9SRUxPQ19YVEVOU0FfQVNNX1NJTVBMSUZZLAorKworKy8qIDggYml0IHNpZ25lZCBvZmZzZXQgaW4gKGl4K2QpIG9yIChpeStkKS4gICovCisrICBCRkRfUkVMT0NfWjgwX0RJU1A4LAorKworKy8qIERKTlogb2Zmc2V0LiAgKi8KKysgIEJGRF9SRUxPQ19aOEtfRElTUDcsCisrCisrLyogQ0FMUiBvZmZzZXQuICAqLworKyAgQkZEX1JFTE9DX1o4S19DQUxMUiwKKysKKysvKiA0IGJpdCB2YWx1ZS4gICovCisrICBCRkRfUkVMT0NfWjhLX0lNTTRMLAorKyAgQkZEX1JFTE9DX1VOVVNFRCB9OworK3R5cGVkZWYgZW51bSBiZmRfcmVsb2NfY29kZV9yZWFsIGJmZF9yZWxvY19jb2RlX3JlYWxfdHlwZTsKKytyZWxvY19ob3d0b190eXBlICpiZmRfcmVsb2NfdHlwZV9sb29rdXAKKysgICAoYmZkICphYmZkLCBiZmRfcmVsb2NfY29kZV9yZWFsX3R5cGUgY29kZSk7CisrcmVsb2NfaG93dG9fdHlwZSAqYmZkX3JlbG9jX25hbWVfbG9va3VwCisrICAgKGJmZCAqYWJmZCwgY29uc3QgY2hhciAqcmVsb2NfbmFtZSk7CisrCisrY29uc3QgY2hhciAqYmZkX2dldF9yZWxvY19jb2RlX25hbWUgKGJmZF9yZWxvY19jb2RlX3JlYWxfdHlwZSBjb2RlKTsKKysKKysvKiBFeHRyYWN0ZWQgZnJvbSBzeW1zLmMuICAqLworKworK3R5cGVkZWYgc3RydWN0IGJmZF9zeW1ib2wKKyt7CisrICAvKiBBIHBvaW50ZXIgdG8gdGhlIEJGRCB3aGljaCBvd25zIHRoZSBzeW1ib2wuIFRoaXMgaW5mb3JtYXRpb24KKysgICAgIGlzIG5lY2Vzc2FyeSBzbyB0aGF0IGEgYmFjayBlbmQgY2FuIHdvcmsgb3V0IHdoYXQgYWRkaXRpb25hbAorKyAgICAgaW5mb3JtYXRpb24gKGludmlzaWJsZSB0byB0aGUgYXBwbGljYXRpb24gd3JpdGVyKSBpcyBjYXJyaWVkCisrICAgICB3aXRoIHRoZSBzeW1ib2wuCisrCisrICAgICBUaGlzIGZpZWxkIGlzICphbG1vc3QqIHJlZHVuZGFudCwgc2luY2UgeW91IGNhbiB1c2Ugc2VjdGlvbi0+b3duZXIKKysgICAgIGluc3RlYWQsIGV4Y2VwdCB0aGF0IHNvbWUgc3ltYm9scyBwb2ludCB0byB0aGUgZ2xvYmFsIHNlY3Rpb25zCisrICAgICBiZmRfe2Ficyxjb20sdW5kfV9zZWN0aW9uLiAgVGhpcyBjb3VsZCBiZSBmaXhlZCBieSBtYWtpbmcKKysgICAgIHRoZXNlIGdsb2JhbHMgYmUgcGVyLWJmZCAob3IgcGVyLXRhcmdldC1mbGF2b3IpLiAgRklYTUUuICAqLworKyAgc3RydWN0IGJmZCAqdGhlX2JmZDsgLyogVXNlIGJmZF9hc3ltYm9sX2JmZChzeW0pIHRvIGFjY2VzcyB0aGlzIGZpZWxkLiAgKi8KKysKKysgIC8qIFRoZSB0ZXh0IG9mIHRoZSBzeW1ib2wuIFRoZSBuYW1lIGlzIGxlZnQgYWxvbmUsIGFuZCBub3QgY29waWVkOyB0aGUKKysgICAgIGFwcGxpY2F0aW9uIG1heSBub3QgYWx0ZXIgaXQuICAqLworKyAgY29uc3QgY2hhciAqbmFtZTsKKysKKysgIC8qIFRoZSB2YWx1ZSBvZiB0aGUgc3ltYm9sLiAgVGhpcyByZWFsbHkgc2hvdWxkIGJlIGEgdW5pb24gb2YgYQorKyAgICAgbnVtZXJpYyB2YWx1ZSB3aXRoIGEgcG9pbnRlciwgc2luY2Ugc29tZSBmbGFncyBpbmRpY2F0ZSB0aGF0CisrICAgICBhIHBvaW50ZXIgdG8gYW5vdGhlciBzeW1ib2wgaXMgc3RvcmVkIGhlcmUuICAqLworKyAgc3ltdmFsdWUgdmFsdWU7CisrCisrICAvKiBBdHRyaWJ1dGVzIG9mIGEgc3ltYm9sLiAgKi8KKysjZGVmaW5lIEJTRl9OT19GTEFHUyAgICAweDAwCisrCisrICAvKiBUaGUgc3ltYm9sIGhhcyBsb2NhbCBzY29wZTsgPDxzdGF0aWM+PiBpbiA8PEM+Pi4gVGhlIHZhbHVlCisrICAgICBpcyB0aGUgb2Zmc2V0IGludG8gdGhlIHNlY3Rpb24gb2YgdGhlIGRhdGEuICAqLworKyNkZWZpbmUgQlNGX0xPQ0FMICAgICAgMHgwMQorKworKyAgLyogVGhlIHN5bWJvbCBoYXMgZ2xvYmFsIHNjb3BlOyBpbml0aWFsaXplZCBkYXRhIGluIDw8Qz4+LiBUaGUKKysgICAgIHZhbHVlIGlzIHRoZSBvZmZzZXQgaW50byB0aGUgc2VjdGlvbiBvZiB0aGUgZGF0YS4gICovCisrI2RlZmluZSBCU0ZfR0xPQkFMICAgICAweDAyCisrCisrICAvKiBUaGUgc3ltYm9sIGhhcyBnbG9iYWwgc2NvcGUgYW5kIGlzIGV4cG9ydGVkLiBUaGUgdmFsdWUgaXMKKysgICAgIHRoZSBvZmZzZXQgaW50byB0aGUgc2VjdGlvbiBvZiB0aGUgZGF0YS4gICovCisrI2RlZmluZSBCU0ZfRVhQT1JUICAgICBCU0ZfR0xPQkFMIC8qIE5vIHJlYWwgZGlmZmVyZW5jZS4gICovCisrCisrICAvKiBBIG5vcm1hbCBDIHN5bWJvbCB3b3VsZCBiZSBvbmUgb2Y6CisrICAgICA8PEJTRl9MT0NBTD4+LCA8PEJTRl9GT1JUX0NPTU0+PiwgIDw8QlNGX1VOREVGSU5FRD4+IG9yCisrICAgICA8PEJTRl9HTE9CQUw+Pi4gICovCisrCisrICAvKiBUaGUgc3ltYm9sIGlzIGEgZGVidWdnaW5nIHJlY29yZC4gVGhlIHZhbHVlIGhhcyBhbiBhcmJpdHJhcnkKKysgICAgIG1lYW5pbmcsIHVubGVzcyBCU0ZfREVCVUdHSU5HX1JFTE9DIGlzIGFsc28gc2V0LiAgKi8KKysjZGVmaW5lIEJTRl9ERUJVR0dJTkcgIDB4MDgKKysKKysgIC8qIFRoZSBzeW1ib2wgZGVub3RlcyBhIGZ1bmN0aW9uIGVudHJ5IHBvaW50LiAgVXNlZCBpbiBFTEYsCisrICAgICBwZXJoYXBzIG90aGVycyBzb21lZGF5LiAgKi8KKysjZGVmaW5lIEJTRl9GVU5DVElPTiAgICAweDEwCisrCisrICAvKiBVc2VkIGJ5IHRoZSBsaW5rZXIuICAqLworKyNkZWZpbmUgQlNGX0tFRVAgICAgICAgIDB4MjAKKysjZGVmaW5lIEJTRl9LRUVQX0cgICAgICAweDQwCisrCisrICAvKiBBIHdlYWsgZ2xvYmFsIHN5bWJvbCwgb3ZlcnJpZGFibGUgd2l0aG91dCB3YXJuaW5ncyBieQorKyAgICAgYSByZWd1bGFyIGdsb2JhbCBzeW1ib2wgb2YgdGhlIHNhbWUgbmFtZS4gICovCisrI2RlZmluZSBCU0ZfV0VBSyAgICAgICAgMHg4MAorKworKyAgLyogVGhpcyBzeW1ib2wgd2FzIGNyZWF0ZWQgdG8gcG9pbnQgdG8gYSBzZWN0aW9uLCBlLmcuIEVMRidzCisrICAgICBTVFRfU0VDVElPTiBzeW1ib2xzLiAgKi8KKysjZGVmaW5lIEJTRl9TRUNUSU9OX1NZTSAweDEwMAorKworKyAgLyogVGhlIHN5bWJvbCB1c2VkIHRvIGJlIGEgY29tbW9uIHN5bWJvbCwgYnV0IG5vdyBpdCBpcworKyAgICAgYWxsb2NhdGVkLiAgKi8KKysjZGVmaW5lIEJTRl9PTERfQ09NTU9OICAweDIwMAorKworKyAgLyogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGNvbW1vbiBkYXRhLiAgKi8KKysjZGVmaW5lIEJGRF9GT1JUX0NPTU1fREVGQVVMVF9WQUxVRSAwCisrCisrICAvKiBJbiBzb21lIGZpbGVzIHRoZSB0eXBlIG9mIGEgc3ltYm9sIHNvbWV0aW1lcyBhbHRlcnMgaXRzCisrICAgICBsb2NhdGlvbiBpbiBhbiBvdXRwdXQgZmlsZSAtIGllIGluIGNvZmYgYSA8PElTRkNOPj4gc3ltYm9sCisrICAgICB3aGljaCBpcyBhbHNvIDw8Q19FWFQ+PiBzeW1ib2wgYXBwZWFycyB3aGVyZSBpdCB3YXMKKysgICAgIGRlY2xhcmVkIGFuZCBub3QgYXQgdGhlIGVuZCBvZiBhIHNlY3Rpb24uICBUaGlzIGJpdCBpcyBzZXQKKysgICAgIGJ5IHRoZSB0YXJnZXQgQkZEIHBhcnQgdG8gY29udmV5IHRoaXMgaW5mb3JtYXRpb24uICAqLworKyNkZWZpbmUgQlNGX05PVF9BVF9FTkQgICAgMHg0MDAKKysKKysgIC8qIFNpZ25hbCB0aGF0IHRoZSBzeW1ib2wgaXMgdGhlIGxhYmVsIG9mIGNvbnN0cnVjdG9yIHNlY3Rpb24uICAqLworKyNkZWZpbmUgQlNGX0NPTlNUUlVDVE9SICAgMHg4MDAKKysKKysgIC8qIFNpZ25hbCB0aGF0IHRoZSBzeW1ib2wgaXMgYSB3YXJuaW5nIHN5bWJvbC4gIFRoZSBuYW1lIGlzIGEKKysgICAgIHdhcm5pbmcuICBUaGUgbmFtZSBvZiB0aGUgbmV4dCBzeW1ib2wgaXMgdGhlIG9uZSB0byB3YXJuIGFib3V0OworKyAgICAgaWYgYSByZWZlcmVuY2UgaXMgbWFkZSB0byBhIHN5bWJvbCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIG5leHQKKysgICAgIHN5bWJvbCwgYSB3YXJuaW5nIGlzIGlzc3VlZCBieSB0aGUgbGlua2VyLiAgKi8KKysjZGVmaW5lIEJTRl9XQVJOSU5HICAgICAgIDB4MTAwMAorKworKyAgLyogU2lnbmFsIHRoYXQgdGhlIHN5bWJvbCBpcyBpbmRpcmVjdC4gIFRoaXMgc3ltYm9sIGlzIGFuIGluZGlyZWN0CisrICAgICBwb2ludGVyIHRvIHRoZSBzeW1ib2wgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBuZXh0IHN5bWJvbC4gICovCisrI2RlZmluZSBCU0ZfSU5ESVJFQ1QgICAgICAweDIwMDAKKysKKysgIC8qIEJTRl9GSUxFIG1hcmtzIHN5bWJvbHMgdGhhdCBjb250YWluIGEgZmlsZSBuYW1lLiAgVGhpcyBpcyB1c2VkCisrICAgICBmb3IgRUxGIFNUVF9GSUxFIHN5bWJvbHMuICAqLworKyNkZWZpbmUgQlNGX0ZJTEUgICAgICAgICAgMHg0MDAwCisrCisrICAvKiBTeW1ib2wgaXMgZnJvbSBkeW5hbWljIGxpbmtpbmcgaW5mb3JtYXRpb24uICAqLworKyNkZWZpbmUgQlNGX0RZTkFNSUMgICAgICAgMHg4MDAwCisrCisrICAvKiBUaGUgc3ltYm9sIGRlbm90ZXMgYSBkYXRhIG9iamVjdC4gIFVzZWQgaW4gRUxGLCBhbmQgcGVyaGFwcworKyAgICAgb3RoZXJzIHNvbWVkYXkuICAqLworKyNkZWZpbmUgQlNGX09CSkVDVCAgICAgICAgMHgxMDAwMAorKworKyAgLyogVGhpcyBzeW1ib2wgaXMgYSBkZWJ1Z2dpbmcgc3ltYm9sLiAgVGhlIHZhbHVlIGlzIHRoZSBvZmZzZXQKKysgICAgIGludG8gdGhlIHNlY3Rpb24gb2YgdGhlIGRhdGEuICBCU0ZfREVCVUdHSU5HIHNob3VsZCBiZSBzZXQKKysgICAgIGFzIHdlbGwuICAqLworKyNkZWZpbmUgQlNGX0RFQlVHR0lOR19SRUxPQyAweDIwMDAwCisrCisrICAvKiBUaGlzIHN5bWJvbCBpcyB0aHJlYWQgbG9jYWwuICBVc2VkIGluIEVMRi4gICovCisrI2RlZmluZSBCU0ZfVEhSRUFEX0xPQ0FMICAweDQwMDAwCisrCisrICAvKiBUaGlzIHN5bWJvbCByZXByZXNlbnRzIGEgY29tcGxleCByZWxvY2F0aW9uIGV4cHJlc3Npb24sCisrICAgICB3aXRoIHRoZSBleHByZXNzaW9uIHRyZWUgc2VyaWFsaXplZCBpbiB0aGUgc3ltYm9sIG5hbWUuICAqLworKyNkZWZpbmUgQlNGX1JFTEMgMHg4MDAwMAorKworKyAgLyogVGhpcyBzeW1ib2wgcmVwcmVzZW50cyBhIHNpZ25lZCBjb21wbGV4IHJlbG9jYXRpb24gZXhwcmVzc2lvbiwKKysgICAgIHdpdGggdGhlIGV4cHJlc3Npb24gdHJlZSBzZXJpYWxpemVkIGluIHRoZSBzeW1ib2wgbmFtZS4gICovCisrI2RlZmluZSBCU0ZfU1JFTEMgMHgxMDAwMDAKKysKKysgIGZsYWd3b3JkIGZsYWdzOworKworKyAgLyogQSBwb2ludGVyIHRvIHRoZSBzZWN0aW9uIHRvIHdoaWNoIHRoaXMgc3ltYm9sIGlzCisrICAgICByZWxhdGl2ZS4gIFRoaXMgd2lsbCBhbHdheXMgYmUgbm9uIE5VTEwsIHRoZXJlIGFyZSBzcGVjaWFsCisrICAgICBzZWN0aW9ucyBmb3IgdW5kZWZpbmVkIGFuZCBhYnNvbHV0ZSBzeW1ib2xzLiAgKi8KKysgIHN0cnVjdCBiZmRfc2VjdGlvbiAqc2VjdGlvbjsKKysKKysgIC8qIEJhY2sgZW5kIHNwZWNpYWwgZGF0YS4gICovCisrICB1bmlvbgorKyAgICB7CisrICAgICAgdm9pZCAqcDsKKysgICAgICBiZmRfdm1hIGk7CisrICAgIH0KKysgIHVkYXRhOworK30KKythc3ltYm9sOworKworKyNkZWZpbmUgYmZkX2dldF9zeW10YWJfdXBwZXJfYm91bmQoYWJmZCkgXAorKyAgICAgQkZEX1NFTkQgKGFiZmQsIF9iZmRfZ2V0X3N5bXRhYl91cHBlcl9ib3VuZCwgKGFiZmQpKQorKworK2JmZF9ib29sZWFuIGJmZF9pc19sb2NhbF9sYWJlbCAoYmZkICphYmZkLCBhc3ltYm9sICpzeW0pOworKworK2JmZF9ib29sZWFuIGJmZF9pc19sb2NhbF9sYWJlbF9uYW1lIChiZmQgKmFiZmQsIGNvbnN0IGNoYXIgKm5hbWUpOworKworKyNkZWZpbmUgYmZkX2lzX2xvY2FsX2xhYmVsX25hbWUoYWJmZCwgbmFtZSkgXAorKyAgQkZEX1NFTkQgKGFiZmQsIF9iZmRfaXNfbG9jYWxfbGFiZWxfbmFtZSwgKGFiZmQsIG5hbWUpKQorKworK2JmZF9ib29sZWFuIGJmZF9pc190YXJnZXRfc3BlY2lhbF9zeW1ib2wgKGJmZCAqYWJmZCwgYXN5bWJvbCAqc3ltKTsKKysKKysjZGVmaW5lIGJmZF9pc190YXJnZXRfc3BlY2lhbF9zeW1ib2woYWJmZCwgc3ltKSBcCisrICBCRkRfU0VORCAoYWJmZCwgX2JmZF9pc190YXJnZXRfc3BlY2lhbF9zeW1ib2wsIChhYmZkLCBzeW0pKQorKworKyNkZWZpbmUgYmZkX2Nhbm9uaWNhbGl6ZV9zeW10YWIoYWJmZCwgbG9jYXRpb24pIFwKKysgIEJGRF9TRU5EIChhYmZkLCBfYmZkX2Nhbm9uaWNhbGl6ZV9zeW10YWIsIChhYmZkLCBsb2NhdGlvbikpCisrCisrYmZkX2Jvb2xlYW4gYmZkX3NldF9zeW10YWIKKysgICAoYmZkICphYmZkLCBhc3ltYm9sICoqbG9jYXRpb24sIHVuc2lnbmVkIGludCBjb3VudCk7CisrCisrdm9pZCBiZmRfcHJpbnRfc3ltYm9sX3ZhbmRmIChiZmQgKmFiZmQsIHZvaWQgKmZpbGUsIGFzeW1ib2wgKnN5bWJvbCk7CisrCisrI2RlZmluZSBiZmRfbWFrZV9lbXB0eV9zeW1ib2woYWJmZCkgXAorKyAgQkZEX1NFTkQgKGFiZmQsIF9iZmRfbWFrZV9lbXB0eV9zeW1ib2wsIChhYmZkKSkKKysKKythc3ltYm9sICpfYmZkX2dlbmVyaWNfbWFrZV9lbXB0eV9zeW1ib2wgKGJmZCAqKTsKKysKKysjZGVmaW5lIGJmZF9tYWtlX2RlYnVnX3N5bWJvbChhYmZkLHB0cixzaXplKSBcCisrICBCRkRfU0VORCAoYWJmZCwgX2JmZF9tYWtlX2RlYnVnX3N5bWJvbCwgKGFiZmQsIHB0ciwgc2l6ZSkpCisrCisraW50IGJmZF9kZWNvZGVfc3ltY2xhc3MgKGFzeW1ib2wgKnN5bWJvbCk7CisrCisrYmZkX2Jvb2xlYW4gYmZkX2lzX3VuZGVmaW5lZF9zeW1jbGFzcyAoaW50IHN5bWNsYXNzKTsKKysKKyt2b2lkIGJmZF9zeW1ib2xfaW5mbyAoYXN5bWJvbCAqc3ltYm9sLCBzeW1ib2xfaW5mbyAqcmV0KTsKKysKKytiZmRfYm9vbGVhbiBiZmRfY29weV9wcml2YXRlX3N5bWJvbF9kYXRhCisrICAgKGJmZCAqaWJmZCwgYXN5bWJvbCAqaXN5bSwgYmZkICpvYmZkLCBhc3ltYm9sICpvc3ltKTsKKysKKysjZGVmaW5lIGJmZF9jb3B5X3ByaXZhdGVfc3ltYm9sX2RhdGEoaWJmZCwgaXN5bWJvbCwgb2JmZCwgb3N5bWJvbCkgXAorKyAgQkZEX1NFTkQgKG9iZmQsIF9iZmRfY29weV9wcml2YXRlX3N5bWJvbF9kYXRhLCBcCisrICAgICAgICAgICAgKGliZmQsIGlzeW1ib2wsIG9iZmQsIG9zeW1ib2wpKQorKworKy8qIEV4dHJhY3RlZCBmcm9tIGJmZC5jLiAgKi8KKytzdHJ1Y3QgYmZkCisreworKyAgLyogQSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgQkZEICAqLworKyAgdW5zaWduZWQgaW50IGlkOworKworKyAgLyogVGhlIGZpbGVuYW1lIHRoZSBhcHBsaWNhdGlvbiBvcGVuZWQgdGhlIEJGRCB3aXRoLiAgKi8KKysgIGNvbnN0IGNoYXIgKmZpbGVuYW1lOworKworKyAgLyogQSBwb2ludGVyIHRvIHRoZSB0YXJnZXQganVtcCB0YWJsZS4gICovCisrICBjb25zdCBzdHJ1Y3QgYmZkX3RhcmdldCAqeHZlYzsKKysKKysgIC8qIFRoZSBJT1NUUkVBTSwgYW5kIGNvcnJlc3BvbmRpbmcgSU8gdmVjdG9yIHRoYXQgcHJvdmlkZSBhY2Nlc3MKKysgICAgIHRvIHRoZSBmaWxlIGJhY2tpbmcgdGhlIEJGRC4gICovCisrICB2b2lkICppb3N0cmVhbTsKKysgIGNvbnN0IHN0cnVjdCBiZmRfaW92ZWMgKmlvdmVjOworKworKyAgLyogSXMgdGhlIGZpbGUgZGVzY3JpcHRvciBiZWluZyBjYWNoZWQ/ICBUaGF0IGlzLCBjYW4gaXQgYmUgY2xvc2VkIGFzCisrICAgICBuZWVkZWQsIGFuZCByZS1vcGVuZWQgd2hlbiBhY2Nlc3NlZCBsYXRlcj8gICovCisrICBiZmRfYm9vbGVhbiBjYWNoZWFibGU7CisrCisrICAvKiBNYXJrcyB3aGV0aGVyIHRoZXJlIHdhcyBhIGRlZmF1bHQgdGFyZ2V0IHNwZWNpZmllZCB3aGVuIHRoZQorKyAgICAgQkZEIHdhcyBvcGVuZWQuIFRoaXMgaXMgdXNlZCB0byBzZWxlY3Qgd2hpY2ggbWF0Y2hpbmcgYWxnb3JpdGhtCisrICAgICB0byB1c2UgdG8gY2hvb3NlIHRoZSBiYWNrIGVuZC4gICovCisrICBiZmRfYm9vbGVhbiB0YXJnZXRfZGVmYXVsdGVkOworKworKyAgLyogVGhlIGNhY2hpbmcgcm91dGluZXMgdXNlIHRoZXNlIHRvIG1haW50YWluIGEKKysgICAgIGxlYXN0LXJlY2VudGx5LXVzZWQgbGlzdCBvZiBCRkRzLiAgKi8KKysgIHN0cnVjdCBiZmQgKmxydV9wcmV2LCAqbHJ1X25leHQ7CisrCisrICAvKiBXaGVuIGEgZmlsZSBpcyBjbG9zZWQgYnkgdGhlIGNhY2hpbmcgcm91dGluZXMsIEJGRCByZXRhaW5zCisrICAgICBzdGF0ZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmlsZSBoZXJlLi4uICAqLworKyAgdWZpbGVfcHRyIHdoZXJlOworKworKyAgLyogLi4uIGFuZCBoZXJlOiAoYGBvbmNlJycgbWVhbnMgYXQgbGVhc3Qgb25jZSkuICAqLworKyAgYmZkX2Jvb2xlYW4gb3BlbmVkX29uY2U7CisrCisrICAvKiBTZXQgaWYgd2UgaGF2ZSBhIGxvY2FsbHkgbWFpbnRhaW5lZCBtdGltZSB2YWx1ZSwgcmF0aGVyIHRoYW4KKysgICAgIGdldHRpbmcgaXQgZnJvbSB0aGUgZmlsZSBlYWNoIHRpbWUuICAqLworKyAgYmZkX2Jvb2xlYW4gbXRpbWVfc2V0OworKworKyAgLyogRmlsZSBtb2RpZmllZCB0aW1lLCBpZiBtdGltZV9zZXQgaXMgVFJVRS4gICovCisrICBsb25nIG10aW1lOworKworKyAgLyogUmVzZXJ2ZWQgZm9yIGFuIHVuaW1wbGVtZW50ZWQgZmlsZSBsb2NraW5nIGV4dGVuc2lvbi4gICovCisrICBpbnQgaWZkOworKworKyAgLyogVGhlIGZvcm1hdCB3aGljaCBiZWxvbmdzIHRvIHRoZSBCRkQuIChvYmplY3QsIGNvcmUsIGV0Yy4pICAqLworKyAgYmZkX2Zvcm1hdCBmb3JtYXQ7CisrCisrICAvKiBUaGUgZGlyZWN0aW9uIHdpdGggd2hpY2ggdGhlIEJGRCB3YXMgb3BlbmVkLiAgKi8KKysgIGVudW0gYmZkX2RpcmVjdGlvbgorKyAgICB7CisrICAgICAgbm9fZGlyZWN0aW9uID0gMCwKKysgICAgICByZWFkX2RpcmVjdGlvbiA9IDEsCisrICAgICAgd3JpdGVfZGlyZWN0aW9uID0gMiwKKysgICAgICBib3RoX2RpcmVjdGlvbiA9IDMKKysgICAgfQorKyAgZGlyZWN0aW9uOworKworKyAgLyogRm9ybWF0X3NwZWNpZmljIGZsYWdzLiAgKi8KKysgIGZsYWd3b3JkIGZsYWdzOworKworKyAgLyogQ3VycmVudGx5IG15X2FyY2hpdmUgaXMgdGVzdGVkIGJlZm9yZSBhZGRpbmcgb3JpZ2luIHRvCisrICAgICBhbnl0aGluZy4gSSBiZWxpZXZlIHRoYXQgdGhpcyBjYW4gYmVjb21lIGFsd2F5cyBhbiBhZGQgb2YKKysgICAgIG9yaWdpbiwgd2l0aCBvcmlnaW4gc2V0IHRvIDAgZm9yIG5vbiBhcmNoaXZlIGZpbGVzLiAgKi8KKysgIHVmaWxlX3B0ciBvcmlnaW47CisrCisrICAvKiBSZW1lbWJlciB3aGVuIG91dHB1dCBoYXMgYmVndW4sIHRvIHN0b3Agc3RyYW5nZSB0aGluZ3MKKysgICAgIGZyb20gaGFwcGVuaW5nLiAgKi8KKysgIGJmZF9ib29sZWFuIG91dHB1dF9oYXNfYmVndW47CisrCisrICAvKiBBIGhhc2ggdGFibGUgZm9yIHNlY3Rpb24gbmFtZXMuICAqLworKyAgc3RydWN0IGJmZF9oYXNoX3RhYmxlIHNlY3Rpb25faHRhYjsKKysKKysgIC8qIFBvaW50ZXIgdG8gbGlua2VkIGxpc3Qgb2Ygc2VjdGlvbnMuICAqLworKyAgc3RydWN0IGJmZF9zZWN0aW9uICpzZWN0aW9uczsKKysKKysgIC8qIFRoZSBsYXN0IHNlY3Rpb24gb24gdGhlIHNlY3Rpb24gbGlzdC4gICovCisrICBzdHJ1Y3QgYmZkX3NlY3Rpb24gKnNlY3Rpb25fbGFzdDsKKysKKysgIC8qIFRoZSBudW1iZXIgb2Ygc2VjdGlvbnMuICAqLworKyAgdW5zaWduZWQgaW50IHNlY3Rpb25fY291bnQ7CisrCisrICAvKiBTdHVmZiBvbmx5IHVzZWZ1bCBmb3Igb2JqZWN0IGZpbGVzOgorKyAgICAgVGhlIHN0YXJ0IGFkZHJlc3MuICAqLworKyAgYmZkX3ZtYSBzdGFydF9hZGRyZXNzOworKworKyAgLyogVXNlZCBmb3IgaW5wdXQgYW5kIG91dHB1dC4gICovCisrICB1bnNpZ25lZCBpbnQgc3ltY291bnQ7CisrCisrICAvKiBTeW1ib2wgdGFibGUgZm9yIG91dHB1dCBCRkQgKHdpdGggc3ltY291bnQgZW50cmllcykuICAqLworKyAgc3RydWN0IGJmZF9zeW1ib2wgICoqb3V0c3ltYm9sczsKKysKKysgIC8qIFVzZWQgZm9yIHNsdXJwZWQgZHluYW1pYyBzeW1ib2wgdGFibGVzLiAgKi8KKysgIHVuc2lnbmVkIGludCBkeW5zeW1jb3VudDsKKysKKysgIC8qIFBvaW50ZXIgdG8gc3RydWN0dXJlIHdoaWNoIGNvbnRhaW5zIGFyY2hpdGVjdHVyZSBpbmZvcm1hdGlvbi4gICovCisrICBjb25zdCBzdHJ1Y3QgYmZkX2FyY2hfaW5mbyAqYXJjaF9pbmZvOworKworKyAgLyogRmxhZyBzZXQgaWYgc3ltYm9scyBmcm9tIHRoaXMgQkZEIHNob3VsZCBub3QgYmUgZXhwb3J0ZWQuICAqLworKyAgYmZkX2Jvb2xlYW4gbm9fZXhwb3J0OworKworKyAgLyogU3R1ZmYgb25seSB1c2VmdWwgZm9yIGFyY2hpdmVzLiAgKi8KKysgIHZvaWQgKmFyZWx0X2RhdGE7CisrICBzdHJ1Y3QgYmZkICpteV9hcmNoaXZlOyAgICAgIC8qIFRoZSBjb250YWluaW5nIGFyY2hpdmUgQkZELiAgKi8KKysgIHN0cnVjdCBiZmQgKmFyY2hpdmVfbmV4dDsgICAgLyogVGhlIG5leHQgQkZEIGluIHRoZSBhcmNoaXZlLiAgKi8KKysgIHN0cnVjdCBiZmQgKmFyY2hpdmVfaGVhZDsgICAgLyogVGhlIGZpcnN0IEJGRCBpbiB0aGUgYXJjaGl2ZS4gICovCisrICBiZmRfYm9vbGVhbiBoYXNfYXJtYXA7CisrCisrICAvKiBBIGNoYWluIG9mIEJGRCBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIGEgbGluay4gICovCisrICBzdHJ1Y3QgYmZkICpsaW5rX25leHQ7CisrCisrICAvKiBBIGZpZWxkIHVzZWQgYnkgX2JmZF9nZW5lcmljX2xpbmtfYWRkX2FyY2hpdmVfc3ltYm9scy4gIFRoaXMgd2lsbAorKyAgICAgYmUgdXNlZCBvbmx5IGZvciBhcmNoaXZlIGVsZW1lbnRzLiAgKi8KKysgIGludCBhcmNoaXZlX3Bhc3M7CisrCisrICAvKiBVc2VkIGJ5IHRoZSBiYWNrIGVuZCB0byBob2xkIHByaXZhdGUgZGF0YS4gICovCisrICB1bmlvbgorKyAgICB7CisrICAgICAgc3RydWN0IGFvdXRfZGF0YV9zdHJ1Y3QgKmFvdXRfZGF0YTsKKysgICAgICBzdHJ1Y3QgYXJ0ZGF0YSAqYW91dF9hcl9kYXRhOworKyAgICAgIHN0cnVjdCBfb2FzeXNfZGF0YSAqb2FzeXNfb2JqX2RhdGE7CisrICAgICAgc3RydWN0IF9vYXN5c19hcl9kYXRhICpvYXN5c19hcl9kYXRhOworKyAgICAgIHN0cnVjdCBjb2ZmX3RkYXRhICpjb2ZmX29ial9kYXRhOworKyAgICAgIHN0cnVjdCBwZV90ZGF0YSAqcGVfb2JqX2RhdGE7CisrICAgICAgc3RydWN0IHhjb2ZmX3RkYXRhICp4Y29mZl9vYmpfZGF0YTsKKysgICAgICBzdHJ1Y3QgZWNvZmZfdGRhdGEgKmVjb2ZmX29ial9kYXRhOworKyAgICAgIHN0cnVjdCBpZWVlX2RhdGFfc3RydWN0ICppZWVlX2RhdGE7CisrICAgICAgc3RydWN0IGllZWVfYXJfZGF0YV9zdHJ1Y3QgKmllZWVfYXJfZGF0YTsKKysgICAgICBzdHJ1Y3Qgc3JlY19kYXRhX3N0cnVjdCAqc3JlY19kYXRhOworKyAgICAgIHN0cnVjdCBpaGV4X2RhdGFfc3RydWN0ICppaGV4X2RhdGE7CisrICAgICAgc3RydWN0IHRla2hleF9kYXRhX3N0cnVjdCAqdGVraGV4X2RhdGE7CisrICAgICAgc3RydWN0IGVsZl9vYmpfdGRhdGEgKmVsZl9vYmpfZGF0YTsKKysgICAgICBzdHJ1Y3QgbmxtX29ial90ZGF0YSAqbmxtX29ial9kYXRhOworKyAgICAgIHN0cnVjdCBib3V0X2RhdGFfc3RydWN0ICpib3V0X2RhdGE7CisrICAgICAgc3RydWN0IG1tb19kYXRhX3N0cnVjdCAqbW1vX2RhdGE7CisrICAgICAgc3RydWN0IHN1bl9jb3JlX3N0cnVjdCAqc3VuX2NvcmVfZGF0YTsKKysgICAgICBzdHJ1Y3Qgc2NvNV9jb3JlX3N0cnVjdCAqc2NvNV9jb3JlX2RhdGE7CisrICAgICAgc3RydWN0IHRyYWRfY29yZV9zdHJ1Y3QgKnRyYWRfY29yZV9kYXRhOworKyAgICAgIHN0cnVjdCBzb21fZGF0YV9zdHJ1Y3QgKnNvbV9kYXRhOworKyAgICAgIHN0cnVjdCBocHV4X2NvcmVfc3RydWN0ICpocHV4X2NvcmVfZGF0YTsKKysgICAgICBzdHJ1Y3QgaHBwYWJzZF9jb3JlX3N0cnVjdCAqaHBwYWJzZF9jb3JlX2RhdGE7CisrICAgICAgc3RydWN0IHNnaV9jb3JlX3N0cnVjdCAqc2dpX2NvcmVfZGF0YTsKKysgICAgICBzdHJ1Y3QgbHlueF9jb3JlX3N0cnVjdCAqbHlueF9jb3JlX2RhdGE7CisrICAgICAgc3RydWN0IG9zZl9jb3JlX3N0cnVjdCAqb3NmX2NvcmVfZGF0YTsKKysgICAgICBzdHJ1Y3QgY2lzY29fY29yZV9zdHJ1Y3QgKmNpc2NvX2NvcmVfZGF0YTsKKysgICAgICBzdHJ1Y3QgdmVyc2Fkb3NfZGF0YV9zdHJ1Y3QgKnZlcnNhZG9zX2RhdGE7CisrICAgICAgc3RydWN0IG5ldGJzZF9jb3JlX3N0cnVjdCAqbmV0YnNkX2NvcmVfZGF0YTsKKysgICAgICBzdHJ1Y3QgbWFjaF9vX2RhdGFfc3RydWN0ICptYWNoX29fZGF0YTsKKysgICAgICBzdHJ1Y3QgbWFjaF9vX2ZhdF9kYXRhX3N0cnVjdCAqbWFjaF9vX2ZhdF9kYXRhOworKyAgICAgIHN0cnVjdCBiZmRfcGVmX2RhdGFfc3RydWN0ICpwZWZfZGF0YTsKKysgICAgICBzdHJ1Y3QgYmZkX3BlZl94bGliX2RhdGFfc3RydWN0ICpwZWZfeGxpYl9kYXRhOworKyAgICAgIHN0cnVjdCBiZmRfc3ltX2RhdGFfc3RydWN0ICpzeW1fZGF0YTsKKysgICAgICB2b2lkICphbnk7CisrICAgIH0KKysgIHRkYXRhOworKworKyAgLyogVXNlZCBieSB0aGUgYXBwbGljYXRpb24gdG8gaG9sZCBwcml2YXRlIGRhdGEuICAqLworKyAgdm9pZCAqdXNyZGF0YTsKKysKKysgIC8qIFdoZXJlIGFsbCB0aGUgYWxsb2NhdGVkIHN0dWZmIHVuZGVyIHRoaXMgQkZEIGdvZXMuICBUaGlzIGlzIGEKKysgICAgIHN0cnVjdCBvYmphbGxvYyAqLCBidXQgd2UgdXNlIHZvaWQgKiB0byBhdm9pZCByZXF1aXJpbmcgdGhlIGluY2x1c2lvbgorKyAgICAgb2Ygb2JqYWxsb2MuaC4gICovCisrICB2b2lkICptZW1vcnk7CisrfTsKKysKKyt0eXBlZGVmIGVudW0gYmZkX2Vycm9yCisreworKyAgYmZkX2Vycm9yX25vX2Vycm9yID0gMCwKKysgIGJmZF9lcnJvcl9zeXN0ZW1fY2FsbCwKKysgIGJmZF9lcnJvcl9pbnZhbGlkX3RhcmdldCwKKysgIGJmZF9lcnJvcl93cm9uZ19mb3JtYXQsCisrICBiZmRfZXJyb3Jfd3Jvbmdfb2JqZWN0X2Zvcm1hdCwKKysgIGJmZF9lcnJvcl9pbnZhbGlkX29wZXJhdGlvbiwKKysgIGJmZF9lcnJvcl9ub19tZW1vcnksCisrICBiZmRfZXJyb3Jfbm9fc3ltYm9scywKKysgIGJmZF9lcnJvcl9ub19hcm1hcCwKKysgIGJmZF9lcnJvcl9ub19tb3JlX2FyY2hpdmVkX2ZpbGVzLAorKyAgYmZkX2Vycm9yX21hbGZvcm1lZF9hcmNoaXZlLAorKyAgYmZkX2Vycm9yX2ZpbGVfbm90X3JlY29nbml6ZWQsCisrICBiZmRfZXJyb3JfZmlsZV9hbWJpZ3VvdXNseV9yZWNvZ25pemVkLAorKyAgYmZkX2Vycm9yX25vX2NvbnRlbnRzLAorKyAgYmZkX2Vycm9yX25vbnJlcHJlc2VudGFibGVfc2VjdGlvbiwKKysgIGJmZF9lcnJvcl9ub19kZWJ1Z19zZWN0aW9uLAorKyAgYmZkX2Vycm9yX2JhZF92YWx1ZSwKKysgIGJmZF9lcnJvcl9maWxlX3RydW5jYXRlZCwKKysgIGJmZF9lcnJvcl9maWxlX3Rvb19iaWcsCisrICBiZmRfZXJyb3Jfb25faW5wdXQsCisrICBiZmRfZXJyb3JfaW52YWxpZF9lcnJvcl9jb2RlCisrfQorK2JmZF9lcnJvcl90eXBlOworKworK2JmZF9lcnJvcl90eXBlIGJmZF9nZXRfZXJyb3IgKHZvaWQpOworKworK3ZvaWQgYmZkX3NldF9lcnJvciAoYmZkX2Vycm9yX3R5cGUgZXJyb3JfdGFnLCAuLi4pOworKworK2NvbnN0IGNoYXIgKmJmZF9lcnJtc2cgKGJmZF9lcnJvcl90eXBlIGVycm9yX3RhZyk7CisrCisrdm9pZCBiZmRfcGVycm9yIChjb25zdCBjaGFyICptZXNzYWdlKTsKKysKKyt0eXBlZGVmIHZvaWQgKCpiZmRfZXJyb3JfaGFuZGxlcl90eXBlKSAoY29uc3QgY2hhciAqLCAuLi4pOworKworK2JmZF9lcnJvcl9oYW5kbGVyX3R5cGUgYmZkX3NldF9lcnJvcl9oYW5kbGVyIChiZmRfZXJyb3JfaGFuZGxlcl90eXBlKTsKKysKKyt2b2lkIGJmZF9zZXRfZXJyb3JfcHJvZ3JhbV9uYW1lIChjb25zdCBjaGFyICopOworKworK2JmZF9lcnJvcl9oYW5kbGVyX3R5cGUgYmZkX2dldF9lcnJvcl9oYW5kbGVyICh2b2lkKTsKKysKKytsb25nIGJmZF9nZXRfcmVsb2NfdXBwZXJfYm91bmQgKGJmZCAqYWJmZCwgYXNlY3Rpb24gKnNlY3QpOworKworK2xvbmcgYmZkX2Nhbm9uaWNhbGl6ZV9yZWxvYworKyAgIChiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWMsIGFyZWxlbnQgKipsb2MsIGFzeW1ib2wgKipzeW1zKTsKKysKKyt2b2lkIGJmZF9zZXRfcmVsb2MKKysgICAoYmZkICphYmZkLCBhc2VjdGlvbiAqc2VjLCBhcmVsZW50ICoqcmVsLCB1bnNpZ25lZCBpbnQgY291bnQpOworKworK2JmZF9ib29sZWFuIGJmZF9zZXRfZmlsZV9mbGFncyAoYmZkICphYmZkLCBmbGFnd29yZCBmbGFncyk7CisrCisraW50IGJmZF9nZXRfYXJjaF9zaXplIChiZmQgKmFiZmQpOworKworK2ludCBiZmRfZ2V0X3NpZ25fZXh0ZW5kX3ZtYSAoYmZkICphYmZkKTsKKysKKytiZmRfYm9vbGVhbiBiZmRfc2V0X3N0YXJ0X2FkZHJlc3MgKGJmZCAqYWJmZCwgYmZkX3ZtYSB2bWEpOworKworK3Vuc2lnbmVkIGludCBiZmRfZ2V0X2dwX3NpemUgKGJmZCAqYWJmZCk7CisrCisrdm9pZCBiZmRfc2V0X2dwX3NpemUgKGJmZCAqYWJmZCwgdW5zaWduZWQgaW50IGkpOworKworK2JmZF92bWEgYmZkX3NjYW5fdm1hIChjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKiplbmQsIGludCBiYXNlKTsKKysKKytiZmRfYm9vbGVhbiBiZmRfY29weV9wcml2YXRlX2hlYWRlcl9kYXRhIChiZmQgKmliZmQsIGJmZCAqb2JmZCk7CisrCisrI2RlZmluZSBiZmRfY29weV9wcml2YXRlX2hlYWRlcl9kYXRhKGliZmQsIG9iZmQpIFwKKysgICAgIEJGRF9TRU5EIChvYmZkLCBfYmZkX2NvcHlfcHJpdmF0ZV9oZWFkZXJfZGF0YSwgXAorKyAgICAgICAgICAgICAgIChpYmZkLCBvYmZkKSkKKytiZmRfYm9vbGVhbiBiZmRfY29weV9wcml2YXRlX2JmZF9kYXRhIChiZmQgKmliZmQsIGJmZCAqb2JmZCk7CisrCisrI2RlZmluZSBiZmRfY29weV9wcml2YXRlX2JmZF9kYXRhKGliZmQsIG9iZmQpIFwKKysgICAgIEJGRF9TRU5EIChvYmZkLCBfYmZkX2NvcHlfcHJpdmF0ZV9iZmRfZGF0YSwgXAorKyAgICAgICAgICAgICAgIChpYmZkLCBvYmZkKSkKKytiZmRfYm9vbGVhbiBiZmRfbWVyZ2VfcHJpdmF0ZV9iZmRfZGF0YSAoYmZkICppYmZkLCBiZmQgKm9iZmQpOworKworKyNkZWZpbmUgYmZkX21lcmdlX3ByaXZhdGVfYmZkX2RhdGEoaWJmZCwgb2JmZCkgXAorKyAgICAgQkZEX1NFTkQgKG9iZmQsIF9iZmRfbWVyZ2VfcHJpdmF0ZV9iZmRfZGF0YSwgXAorKyAgICAgICAgICAgICAgIChpYmZkLCBvYmZkKSkKKytiZmRfYm9vbGVhbiBiZmRfc2V0X3ByaXZhdGVfZmxhZ3MgKGJmZCAqYWJmZCwgZmxhZ3dvcmQgZmxhZ3MpOworKworKyNkZWZpbmUgYmZkX3NldF9wcml2YXRlX2ZsYWdzKGFiZmQsIGZsYWdzKSBcCisrICAgICBCRkRfU0VORCAoYWJmZCwgX2JmZF9zZXRfcHJpdmF0ZV9mbGFncywgKGFiZmQsIGZsYWdzKSkKKysjZGVmaW5lIGJmZF9zaXplb2ZfaGVhZGVycyhhYmZkLCBpbmZvKSBcCisrICAgICAgIEJGRF9TRU5EIChhYmZkLCBfYmZkX3NpemVvZl9oZWFkZXJzLCAoYWJmZCwgaW5mbykpCisrCisrI2RlZmluZSBiZmRfZmluZF9uZWFyZXN0X2xpbmUoYWJmZCwgc2VjLCBzeW1zLCBvZmYsIGZpbGUsIGZ1bmMsIGxpbmUpIFwKKysgICAgICAgQkZEX1NFTkQgKGFiZmQsIF9iZmRfZmluZF9uZWFyZXN0X2xpbmUsIFwKKysgICAgICAgICAgICAgICAgIChhYmZkLCBzZWMsIHN5bXMsIG9mZiwgZmlsZSwgZnVuYywgbGluZSkpCisrCisrI2RlZmluZSBiZmRfZmluZF9saW5lKGFiZmQsIHN5bXMsIHN5bSwgZmlsZSwgbGluZSkgXAorKyAgICAgICBCRkRfU0VORCAoYWJmZCwgX2JmZF9maW5kX2xpbmUsIFwKKysgICAgICAgICAgICAgICAgIChhYmZkLCBzeW1zLCBzeW0sIGZpbGUsIGxpbmUpKQorKworKyNkZWZpbmUgYmZkX2ZpbmRfaW5saW5lcl9pbmZvKGFiZmQsIGZpbGUsIGZ1bmMsIGxpbmUpIFwKKysgICAgICAgQkZEX1NFTkQgKGFiZmQsIF9iZmRfZmluZF9pbmxpbmVyX2luZm8sIFwKKysgICAgICAgICAgICAgICAgIChhYmZkLCBmaWxlLCBmdW5jLCBsaW5lKSkKKysKKysjZGVmaW5lIGJmZF9kZWJ1Z19pbmZvX3N0YXJ0KGFiZmQpIFwKKysgICAgICAgQkZEX1NFTkQgKGFiZmQsIF9iZmRfZGVidWdfaW5mb19zdGFydCwgKGFiZmQpKQorKworKyNkZWZpbmUgYmZkX2RlYnVnX2luZm9fZW5kKGFiZmQpIFwKKysgICAgICAgQkZEX1NFTkQgKGFiZmQsIF9iZmRfZGVidWdfaW5mb19lbmQsIChhYmZkKSkKKysKKysjZGVmaW5lIGJmZF9kZWJ1Z19pbmZvX2FjY3VtdWxhdGUoYWJmZCwgc2VjdGlvbikgXAorKyAgICAgICBCRkRfU0VORCAoYWJmZCwgX2JmZF9kZWJ1Z19pbmZvX2FjY3VtdWxhdGUsIChhYmZkLCBzZWN0aW9uKSkKKysKKysjZGVmaW5lIGJmZF9zdGF0X2FyY2hfZWx0KGFiZmQsIHN0YXQpIFwKKysgICAgICAgQkZEX1NFTkQgKGFiZmQsIF9iZmRfc3RhdF9hcmNoX2VsdCwoYWJmZCwgc3RhdCkpCisrCisrI2RlZmluZSBiZmRfdXBkYXRlX2FybWFwX3RpbWVzdGFtcChhYmZkKSBcCisrICAgICAgIEJGRF9TRU5EIChhYmZkLCBfYmZkX3VwZGF0ZV9hcm1hcF90aW1lc3RhbXAsIChhYmZkKSkKKysKKysjZGVmaW5lIGJmZF9zZXRfYXJjaF9tYWNoKGFiZmQsIGFyY2gsIG1hY2gpXAorKyAgICAgICBCRkRfU0VORCAoIGFiZmQsIF9iZmRfc2V0X2FyY2hfbWFjaCwgKGFiZmQsIGFyY2gsIG1hY2gpKQorKworKyNkZWZpbmUgYmZkX3JlbGF4X3NlY3Rpb24oYWJmZCwgc2VjdGlvbiwgbGlua19pbmZvLCBhZ2FpbikgXAorKyAgICAgICBCRkRfU0VORCAoYWJmZCwgX2JmZF9yZWxheF9zZWN0aW9uLCAoYWJmZCwgc2VjdGlvbiwgbGlua19pbmZvLCBhZ2FpbikpCisrCisrI2RlZmluZSBiZmRfZ2Nfc2VjdGlvbnMoYWJmZCwgbGlua19pbmZvKSBcCisrICAgICAgIEJGRF9TRU5EIChhYmZkLCBfYmZkX2djX3NlY3Rpb25zLCAoYWJmZCwgbGlua19pbmZvKSkKKysKKysjZGVmaW5lIGJmZF9tZXJnZV9zZWN0aW9ucyhhYmZkLCBsaW5rX2luZm8pIFwKKysgICAgICAgQkZEX1NFTkQgKGFiZmQsIF9iZmRfbWVyZ2Vfc2VjdGlvbnMsIChhYmZkLCBsaW5rX2luZm8pKQorKworKyNkZWZpbmUgYmZkX2lzX2dyb3VwX3NlY3Rpb24oYWJmZCwgc2VjKSBcCisrICAgICAgIEJGRF9TRU5EIChhYmZkLCBfYmZkX2lzX2dyb3VwX3NlY3Rpb24sIChhYmZkLCBzZWMpKQorKworKyNkZWZpbmUgYmZkX2Rpc2NhcmRfZ3JvdXAoYWJmZCwgc2VjKSBcCisrICAgICAgIEJGRF9TRU5EIChhYmZkLCBfYmZkX2Rpc2NhcmRfZ3JvdXAsIChhYmZkLCBzZWMpKQorKworKyNkZWZpbmUgYmZkX2xpbmtfaGFzaF90YWJsZV9jcmVhdGUoYWJmZCkgXAorKyAgICAgICBCRkRfU0VORCAoYWJmZCwgX2JmZF9saW5rX2hhc2hfdGFibGVfY3JlYXRlLCAoYWJmZCkpCisrCisrI2RlZmluZSBiZmRfbGlua19oYXNoX3RhYmxlX2ZyZWUoYWJmZCwgaGFzaCkgXAorKyAgICAgICBCRkRfU0VORCAoYWJmZCwgX2JmZF9saW5rX2hhc2hfdGFibGVfZnJlZSwgKGhhc2gpKQorKworKyNkZWZpbmUgYmZkX2xpbmtfYWRkX3N5bWJvbHMoYWJmZCwgaW5mbykgXAorKyAgICAgICBCRkRfU0VORCAoYWJmZCwgX2JmZF9saW5rX2FkZF9zeW1ib2xzLCAoYWJmZCwgaW5mbykpCisrCisrI2RlZmluZSBiZmRfbGlua19qdXN0X3N5bXMoYWJmZCwgc2VjLCBpbmZvKSBcCisrICAgICAgIEJGRF9TRU5EIChhYmZkLCBfYmZkX2xpbmtfanVzdF9zeW1zLCAoc2VjLCBpbmZvKSkKKysKKysjZGVmaW5lIGJmZF9maW5hbF9saW5rKGFiZmQsIGluZm8pIFwKKysgICAgICAgQkZEX1NFTkQgKGFiZmQsIF9iZmRfZmluYWxfbGluaywgKGFiZmQsIGluZm8pKQorKworKyNkZWZpbmUgYmZkX2ZyZWVfY2FjaGVkX2luZm8oYWJmZCkgXAorKyAgICAgICBCRkRfU0VORCAoYWJmZCwgX2JmZF9mcmVlX2NhY2hlZF9pbmZvLCAoYWJmZCkpCisrCisrI2RlZmluZSBiZmRfZ2V0X2R5bmFtaWNfc3ltdGFiX3VwcGVyX2JvdW5kKGFiZmQpIFwKKysgICAgICAgQkZEX1NFTkQgKGFiZmQsIF9iZmRfZ2V0X2R5bmFtaWNfc3ltdGFiX3VwcGVyX2JvdW5kLCAoYWJmZCkpCisrCisrI2RlZmluZSBiZmRfcHJpbnRfcHJpdmF0ZV9iZmRfZGF0YShhYmZkLCBmaWxlKVwKKysgICAgICAgQkZEX1NFTkQgKGFiZmQsIF9iZmRfcHJpbnRfcHJpdmF0ZV9iZmRfZGF0YSwgKGFiZmQsIGZpbGUpKQorKworKyNkZWZpbmUgYmZkX2Nhbm9uaWNhbGl6ZV9keW5hbWljX3N5bXRhYihhYmZkLCBhc3ltYm9scykgXAorKyAgICAgICBCRkRfU0VORCAoYWJmZCwgX2JmZF9jYW5vbmljYWxpemVfZHluYW1pY19zeW10YWIsIChhYmZkLCBhc3ltYm9scykpCisrCisrI2RlZmluZSBiZmRfZ2V0X3N5bnRoZXRpY19zeW10YWIoYWJmZCwgY291bnQsIHN5bXMsIGR5bmNvdW50LCBkeW5zeW1zLCByZXQpIFwKKysgICAgICAgQkZEX1NFTkQgKGFiZmQsIF9iZmRfZ2V0X3N5bnRoZXRpY19zeW10YWIsIChhYmZkLCBjb3VudCwgc3ltcywgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR5bmNvdW50LCBkeW5zeW1zLCByZXQpKQorKworKyNkZWZpbmUgYmZkX2dldF9keW5hbWljX3JlbG9jX3VwcGVyX2JvdW5kKGFiZmQpIFwKKysgICAgICAgQkZEX1NFTkQgKGFiZmQsIF9iZmRfZ2V0X2R5bmFtaWNfcmVsb2NfdXBwZXJfYm91bmQsIChhYmZkKSkKKysKKysjZGVmaW5lIGJmZF9jYW5vbmljYWxpemVfZHluYW1pY19yZWxvYyhhYmZkLCBhcmVscywgYXN5bXMpIFwKKysgICAgICAgQkZEX1NFTkQgKGFiZmQsIF9iZmRfY2Fub25pY2FsaXplX2R5bmFtaWNfcmVsb2MsIChhYmZkLCBhcmVscywgYXN5bXMpKQorKworK2V4dGVybiBiZmRfYnl0ZSAqYmZkX2dldF9yZWxvY2F0ZWRfc2VjdGlvbl9jb250ZW50cworKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBzdHJ1Y3QgYmZkX2xpbmtfb3JkZXIgKiwgYmZkX2J5dGUgKiwKKysgICBiZmRfYm9vbGVhbiwgYXN5bWJvbCAqKik7CisrCisrYmZkX2Jvb2xlYW4gYmZkX2FsdF9tYWNoX2NvZGUgKGJmZCAqYWJmZCwgaW50IGFsdGVybmF0aXZlKTsKKysKKytzdHJ1Y3QgYmZkX3ByZXNlcnZlCisreworKyAgdm9pZCAqbWFya2VyOworKyAgdm9pZCAqdGRhdGE7CisrICBmbGFnd29yZCBmbGFnczsKKysgIGNvbnN0IHN0cnVjdCBiZmRfYXJjaF9pbmZvICphcmNoX2luZm87CisrICBzdHJ1Y3QgYmZkX3NlY3Rpb24gKnNlY3Rpb25zOworKyAgc3RydWN0IGJmZF9zZWN0aW9uICpzZWN0aW9uX2xhc3Q7CisrICB1bnNpZ25lZCBpbnQgc2VjdGlvbl9jb3VudDsKKysgIHN0cnVjdCBiZmRfaGFzaF90YWJsZSBzZWN0aW9uX2h0YWI7CisrfTsKKysKKytiZmRfYm9vbGVhbiBiZmRfcHJlc2VydmVfc2F2ZSAoYmZkICosIHN0cnVjdCBiZmRfcHJlc2VydmUgKik7CisrCisrdm9pZCBiZmRfcHJlc2VydmVfcmVzdG9yZSAoYmZkICosIHN0cnVjdCBiZmRfcHJlc2VydmUgKik7CisrCisrdm9pZCBiZmRfcHJlc2VydmVfZmluaXNoIChiZmQgKiwgc3RydWN0IGJmZF9wcmVzZXJ2ZSAqKTsKKysKKytiZmRfdm1hIGJmZF9lbXVsX2dldF9tYXhwYWdlc2l6ZSAoY29uc3QgY2hhciAqKTsKKysKKyt2b2lkIGJmZF9lbXVsX3NldF9tYXhwYWdlc2l6ZSAoY29uc3QgY2hhciAqLCBiZmRfdm1hKTsKKysKKytiZmRfdm1hIGJmZF9lbXVsX2dldF9jb21tb25wYWdlc2l6ZSAoY29uc3QgY2hhciAqKTsKKysKKyt2b2lkIGJmZF9lbXVsX3NldF9jb21tb25wYWdlc2l6ZSAoY29uc3QgY2hhciAqLCBiZmRfdm1hKTsKKysKKytjaGFyICpiZmRfZGVtYW5nbGUgKGJmZCAqLCBjb25zdCBjaGFyICosIGludCk7CisrCisrLyogRXh0cmFjdGVkIGZyb20gYXJjaGl2ZS5jLiAgKi8KKytzeW1pbmRleCBiZmRfZ2V0X25leHRfbWFwZW50CisrICAgKGJmZCAqYWJmZCwgc3ltaW5kZXggcHJldmlvdXMsIGNhcnN5bSAqKnN5bSk7CisrCisrYmZkX2Jvb2xlYW4gYmZkX3NldF9hcmNoaXZlX2hlYWQgKGJmZCAqb3V0cHV0LCBiZmQgKm5ld19oZWFkKTsKKysKKytiZmQgKmJmZF9vcGVucl9uZXh0X2FyY2hpdmVkX2ZpbGUgKGJmZCAqYXJjaGl2ZSwgYmZkICpwcmV2aW91cyk7CisrCisrLyogRXh0cmFjdGVkIGZyb20gY29yZWZpbGUuYy4gICovCisrY29uc3QgY2hhciAqYmZkX2NvcmVfZmlsZV9mYWlsaW5nX2NvbW1hbmQgKGJmZCAqYWJmZCk7CisrCisraW50IGJmZF9jb3JlX2ZpbGVfZmFpbGluZ19zaWduYWwgKGJmZCAqYWJmZCk7CisrCisrYmZkX2Jvb2xlYW4gY29yZV9maWxlX21hdGNoZXNfZXhlY3V0YWJsZV9wCisrICAgKGJmZCAqY29yZV9iZmQsIGJmZCAqZXhlY19iZmQpOworKworK2JmZF9ib29sZWFuIGdlbmVyaWNfY29yZV9maWxlX21hdGNoZXNfZXhlY3V0YWJsZV9wCisrICAgKGJmZCAqY29yZV9iZmQsIGJmZCAqZXhlY19iZmQpOworKworKy8qIEV4dHJhY3RlZCBmcm9tIHRhcmdldHMuYy4gICovCisrI2RlZmluZSBCRkRfU0VORChiZmQsIG1lc3NhZ2UsIGFyZ2xpc3QpIFwKKysgICgoKigoYmZkKS0+eHZlYy0+bWVzc2FnZSkpIGFyZ2xpc3QpCisrCisrI2lmZGVmIERFQlVHX0JGRF9TRU5ECisrI3VuZGVmIEJGRF9TRU5ECisrI2RlZmluZSBCRkRfU0VORChiZmQsIG1lc3NhZ2UsIGFyZ2xpc3QpIFwKKysgICgoKGJmZCkgJiYgKGJmZCktPnh2ZWMgJiYgKGJmZCktPnh2ZWMtPm1lc3NhZ2UpID8gXAorKyAgICAoKCooKGJmZCktPnh2ZWMtPm1lc3NhZ2UpKSBhcmdsaXN0KSA6IFwKKysgICAgKGJmZF9hc3NlcnQgKF9fRklMRV9fLF9fTElORV9fKSwgTlVMTCkpCisrI2VuZGlmCisrI2RlZmluZSBCRkRfU0VORF9GTVQoYmZkLCBtZXNzYWdlLCBhcmdsaXN0KSBcCisrICAoKChiZmQpLT54dmVjLT5tZXNzYWdlWyhpbnQpICgoYmZkKS0+Zm9ybWF0KV0pIGFyZ2xpc3QpCisrCisrI2lmZGVmIERFQlVHX0JGRF9TRU5ECisrI3VuZGVmIEJGRF9TRU5EX0ZNVAorKyNkZWZpbmUgQkZEX1NFTkRfRk1UKGJmZCwgbWVzc2FnZSwgYXJnbGlzdCkgXAorKyAgKCgoYmZkKSAmJiAoYmZkKS0+eHZlYyAmJiAoYmZkKS0+eHZlYy0+bWVzc2FnZSkgPyBcCisrICAgKCgoYmZkKS0+eHZlYy0+bWVzc2FnZVsoaW50KSAoKGJmZCktPmZvcm1hdCldKSBhcmdsaXN0KSA6IFwKKysgICAoYmZkX2Fzc2VydCAoX19GSUxFX18sX19MSU5FX18pLCBOVUxMKSkKKysjZW5kaWYKKysKKytlbnVtIGJmZF9mbGF2b3VyCisreworKyAgYmZkX3RhcmdldF91bmtub3duX2ZsYXZvdXIsCisrICBiZmRfdGFyZ2V0X2FvdXRfZmxhdm91ciwKKysgIGJmZF90YXJnZXRfY29mZl9mbGF2b3VyLAorKyAgYmZkX3RhcmdldF9lY29mZl9mbGF2b3VyLAorKyAgYmZkX3RhcmdldF94Y29mZl9mbGF2b3VyLAorKyAgYmZkX3RhcmdldF9lbGZfZmxhdm91ciwKKysgIGJmZF90YXJnZXRfaWVlZV9mbGF2b3VyLAorKyAgYmZkX3RhcmdldF9ubG1fZmxhdm91ciwKKysgIGJmZF90YXJnZXRfb2FzeXNfZmxhdm91ciwKKysgIGJmZF90YXJnZXRfdGVraGV4X2ZsYXZvdXIsCisrICBiZmRfdGFyZ2V0X3NyZWNfZmxhdm91ciwKKysgIGJmZF90YXJnZXRfaWhleF9mbGF2b3VyLAorKyAgYmZkX3RhcmdldF9zb21fZmxhdm91ciwKKysgIGJmZF90YXJnZXRfb3M5a19mbGF2b3VyLAorKyAgYmZkX3RhcmdldF92ZXJzYWRvc19mbGF2b3VyLAorKyAgYmZkX3RhcmdldF9tc2Rvc19mbGF2b3VyLAorKyAgYmZkX3RhcmdldF9vdmF4X2ZsYXZvdXIsCisrICBiZmRfdGFyZ2V0X2V2YXhfZmxhdm91ciwKKysgIGJmZF90YXJnZXRfbW1vX2ZsYXZvdXIsCisrICBiZmRfdGFyZ2V0X21hY2hfb19mbGF2b3VyLAorKyAgYmZkX3RhcmdldF9wZWZfZmxhdm91ciwKKysgIGJmZF90YXJnZXRfcGVmX3hsaWJfZmxhdm91ciwKKysgIGJmZF90YXJnZXRfc3ltX2ZsYXZvdXIKKyt9OworKworK2VudW0gYmZkX2VuZGlhbiB7IEJGRF9FTkRJQU5fQklHLCBCRkRfRU5ESUFOX0xJVFRMRSwgQkZEX0VORElBTl9VTktOT1dOIH07CisrCisrLyogRm9yd2FyZCBkZWNsYXJhdGlvbi4gICovCisrdHlwZWRlZiBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyBfYmZkX2xpbmtfaW5mbzsKKysKKyt0eXBlZGVmIHN0cnVjdCBiZmRfdGFyZ2V0CisreworKyAgLyogSWRlbnRpZmllcyB0aGUga2luZCBvZiB0YXJnZXQsIGUuZy4sIFN1bk9TNCwgVWx0cml4LCBldGMuICAqLworKyAgY2hhciAqbmFtZTsKKysKKysgLyogVGhlICJmbGF2b3VyIiBvZiBhIGJhY2sgZW5kIGlzIGEgZ2VuZXJhbCBpbmRpY2F0aW9uIGFib3V0CisrICAgIHRoZSBjb250ZW50cyBvZiBhIGZpbGUuICAqLworKyAgZW51bSBiZmRfZmxhdm91ciBmbGF2b3VyOworKworKyAgLyogVGhlIG9yZGVyIG9mIGJ5dGVzIHdpdGhpbiB0aGUgZGF0YSBhcmVhIG9mIGEgZmlsZS4gICovCisrICBlbnVtIGJmZF9lbmRpYW4gYnl0ZW9yZGVyOworKworKyAvKiBUaGUgb3JkZXIgb2YgYnl0ZXMgd2l0aGluIHRoZSBoZWFkZXIgcGFydHMgb2YgYSBmaWxlLiAgKi8KKysgIGVudW0gYmZkX2VuZGlhbiBoZWFkZXJfYnl0ZW9yZGVyOworKworKyAgLyogQSBtYXNrIG9mIGFsbCB0aGUgZmxhZ3Mgd2hpY2ggYW4gZXhlY3V0YWJsZSBtYXkgaGF2ZSBzZXQgLQorKyAgICAgZnJvbSB0aGUgc2V0IDw8QkZEX05PX0ZMQUdTPj4sIDw8SEFTX1JFTE9DPj4sIC4uLjw8RF9QQUdFRD4+LiAgKi8KKysgIGZsYWd3b3JkIG9iamVjdF9mbGFnczsKKysKKysgLyogQSBtYXNrIG9mIGFsbCB0aGUgZmxhZ3Mgd2hpY2ggYSBzZWN0aW9uIG1heSBoYXZlIHNldCAtIGZyb20KKysgICAgdGhlIHNldCA8PFNFQ19OT19GTEFHUz4+LCA8PFNFQ19BTExPQz4+LCAuLi48PFNFVF9ORVZFUl9MT0FEPj4uICAqLworKyAgZmxhZ3dvcmQgc2VjdGlvbl9mbGFnczsKKysKKysgLyogVGhlIGNoYXJhY3RlciBub3JtYWxseSBmb3VuZCBhdCB0aGUgZnJvbnQgb2YgYSBzeW1ib2wuCisrICAgIChpZiBhbnkpLCBwZXJoYXBzIGBfJy4gICovCisrICBjaGFyIHN5bWJvbF9sZWFkaW5nX2NoYXI7CisrCisrIC8qIFRoZSBwYWQgY2hhcmFjdGVyIGZvciBmaWxlIG5hbWVzIHdpdGhpbiBhbiBhcmNoaXZlIGhlYWRlci4gICovCisrICBjaGFyIGFyX3BhZF9jaGFyOworKworKyAgLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gYW4gYXJjaGl2ZSBoZWFkZXIuICAqLworKyAgdW5zaWduZWQgc2hvcnQgYXJfbWF4X25hbWVsZW47CisrCisrICAvKiBFbnRyaWVzIGZvciBieXRlIHN3YXBwaW5nIGZvciBkYXRhLiBUaGVzZSBhcmUgZGlmZmVyZW50IGZyb20gdGhlCisrICAgICBvdGhlciBlbnRyeSBwb2ludHMsIHNpbmNlIHRoZXkgZG9uJ3QgdGFrZSBhIEJGRCBhcyB0aGUgZmlyc3QgYXJndW1lbnQuCisrICAgICBDZXJ0YWluIG90aGVyIGhhbmRsZXJzIGNvdWxkIGRvIHRoZSBzYW1lLiAgKi8KKysgIGJmZF91aW50NjRfdCAgICgqYmZkX2dldHg2NCkgKGNvbnN0IHZvaWQgKik7CisrICBiZmRfaW50NjRfdCAgICAoKmJmZF9nZXR4X3NpZ25lZF82NCkgKGNvbnN0IHZvaWQgKik7CisrICB2b2lkICAgICAgICAgICAoKmJmZF9wdXR4NjQpIChiZmRfdWludDY0X3QsIHZvaWQgKik7CisrICBiZmRfdm1hICAgICAgICAoKmJmZF9nZXR4MzIpIChjb25zdCB2b2lkICopOworKyAgYmZkX3NpZ25lZF92bWEgKCpiZmRfZ2V0eF9zaWduZWRfMzIpIChjb25zdCB2b2lkICopOworKyAgdm9pZCAgICAgICAgICAgKCpiZmRfcHV0eDMyKSAoYmZkX3ZtYSwgdm9pZCAqKTsKKysgIGJmZF92bWEgICAgICAgICgqYmZkX2dldHgxNikgKGNvbnN0IHZvaWQgKik7CisrICBiZmRfc2lnbmVkX3ZtYSAoKmJmZF9nZXR4X3NpZ25lZF8xNikgKGNvbnN0IHZvaWQgKik7CisrICB2b2lkICAgICAgICAgICAoKmJmZF9wdXR4MTYpIChiZmRfdm1hLCB2b2lkICopOworKworKyAgLyogQnl0ZSBzd2FwcGluZyBmb3IgdGhlIGhlYWRlcnMuICAqLworKyAgYmZkX3VpbnQ2NF90ICAgKCpiZmRfaF9nZXR4NjQpIChjb25zdCB2b2lkICopOworKyAgYmZkX2ludDY0X3QgICAgKCpiZmRfaF9nZXR4X3NpZ25lZF82NCkgKGNvbnN0IHZvaWQgKik7CisrICB2b2lkICAgICAgICAgICAoKmJmZF9oX3B1dHg2NCkgKGJmZF91aW50NjRfdCwgdm9pZCAqKTsKKysgIGJmZF92bWEgICAgICAgICgqYmZkX2hfZ2V0eDMyKSAoY29uc3Qgdm9pZCAqKTsKKysgIGJmZF9zaWduZWRfdm1hICgqYmZkX2hfZ2V0eF9zaWduZWRfMzIpIChjb25zdCB2b2lkICopOworKyAgdm9pZCAgICAgICAgICAgKCpiZmRfaF9wdXR4MzIpIChiZmRfdm1hLCB2b2lkICopOworKyAgYmZkX3ZtYSAgICAgICAgKCpiZmRfaF9nZXR4MTYpIChjb25zdCB2b2lkICopOworKyAgYmZkX3NpZ25lZF92bWEgKCpiZmRfaF9nZXR4X3NpZ25lZF8xNikgKGNvbnN0IHZvaWQgKik7CisrICB2b2lkICAgICAgICAgICAoKmJmZF9oX3B1dHgxNikgKGJmZF92bWEsIHZvaWQgKik7CisrCisrICAvKiBGb3JtYXQgZGVwZW5kZW50IHJvdXRpbmVzOiB0aGVzZSBhcmUgdmVjdG9ycyBvZiBlbnRyeSBwb2ludHMKKysgICAgIHdpdGhpbiB0aGUgdGFyZ2V0IHZlY3RvciBzdHJ1Y3R1cmUsIG9uZSBmb3IgZWFjaCBmb3JtYXQgdG8gY2hlY2suICAqLworKworKyAgLyogQ2hlY2sgdGhlIGZvcm1hdCBvZiBhIGZpbGUgYmVpbmcgcmVhZC4gIFJldHVybiBhIDw8YmZkX3RhcmdldCAqPj4gb3IgemVyby4gICovCisrICBjb25zdCBzdHJ1Y3QgYmZkX3RhcmdldCAqKCpfYmZkX2NoZWNrX2Zvcm1hdFtiZmRfdHlwZV9lbmRdKSAoYmZkICopOworKworKyAgLyogU2V0IHRoZSBmb3JtYXQgb2YgYSBmaWxlIGJlaW5nIHdyaXR0ZW4uICAqLworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX3NldF9mb3JtYXRbYmZkX3R5cGVfZW5kXSkgKGJmZCAqKTsKKysKKysgIC8qIFdyaXRlIGNhY2hlZCBpbmZvcm1hdGlvbiBpbnRvIGEgZmlsZSBiZWluZyB3cml0dGVuLCBhdCA8PGJmZF9jbG9zZT4+LiAgKi8KKysgIGJmZF9ib29sZWFuICgqX2JmZF93cml0ZV9jb250ZW50c1tiZmRfdHlwZV9lbmRdKSAoYmZkICopOworKworKworKyAgLyogR2VuZXJpYyBlbnRyeSBwb2ludHMuICAqLworKyNkZWZpbmUgQkZEX0pVTVBfVEFCTEVfR0VORVJJQyhOQU1FKSBcCisrICBOQU1FIyNfY2xvc2VfYW5kX2NsZWFudXAsIFwKKysgIE5BTUUjI19iZmRfZnJlZV9jYWNoZWRfaW5mbywgXAorKyAgTkFNRSMjX25ld19zZWN0aW9uX2hvb2ssIFwKKysgIE5BTUUjI19nZXRfc2VjdGlvbl9jb250ZW50cywgXAorKyAgTkFNRSMjX2dldF9zZWN0aW9uX2NvbnRlbnRzX2luX3dpbmRvdworKworKyAgLyogQ2FsbGVkIHdoZW4gdGhlIEJGRCBpcyBiZWluZyBjbG9zZWQgdG8gZG8gYW55IG5lY2Vzc2FyeSBjbGVhbnVwLiAgKi8KKysgIGJmZF9ib29sZWFuICgqX2Nsb3NlX2FuZF9jbGVhbnVwKSAoYmZkICopOworKyAgLyogQXNrIHRoZSBCRkQgdG8gZnJlZSBhbGwgY2FjaGVkIGluZm9ybWF0aW9uLiAgKi8KKysgIGJmZF9ib29sZWFuICgqX2JmZF9mcmVlX2NhY2hlZF9pbmZvKSAoYmZkICopOworKyAgLyogQ2FsbGVkIHdoZW4gYSBuZXcgc2VjdGlvbiBpcyBjcmVhdGVkLiAgKi8KKysgIGJmZF9ib29sZWFuICgqX25ld19zZWN0aW9uX2hvb2spIChiZmQgKiwgc2VjX3B0cik7CisrICAvKiBSZWFkIHRoZSBjb250ZW50cyBvZiBhIHNlY3Rpb24uICAqLworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX2dldF9zZWN0aW9uX2NvbnRlbnRzKQorKyAgICAoYmZkICosIHNlY19wdHIsIHZvaWQgKiwgZmlsZV9wdHIsIGJmZF9zaXplX3R5cGUpOworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX2dldF9zZWN0aW9uX2NvbnRlbnRzX2luX3dpbmRvdykKKysgICAgKGJmZCAqLCBzZWNfcHRyLCBiZmRfd2luZG93ICosIGZpbGVfcHRyLCBiZmRfc2l6ZV90eXBlKTsKKysKKysgIC8qIEVudHJ5IHBvaW50cyB0byBjb3B5IHByaXZhdGUgZGF0YS4gICovCisrI2RlZmluZSBCRkRfSlVNUF9UQUJMRV9DT1BZKE5BTUUpIFwKKysgIE5BTUUjI19iZmRfY29weV9wcml2YXRlX2JmZF9kYXRhLCBcCisrICBOQU1FIyNfYmZkX21lcmdlX3ByaXZhdGVfYmZkX2RhdGEsIFwKKysgIF9iZmRfZ2VuZXJpY19pbml0X3ByaXZhdGVfc2VjdGlvbl9kYXRhLCBcCisrICBOQU1FIyNfYmZkX2NvcHlfcHJpdmF0ZV9zZWN0aW9uX2RhdGEsIFwKKysgIE5BTUUjI19iZmRfY29weV9wcml2YXRlX3N5bWJvbF9kYXRhLCBcCisrICBOQU1FIyNfYmZkX2NvcHlfcHJpdmF0ZV9oZWFkZXJfZGF0YSwgXAorKyAgTkFNRSMjX2JmZF9zZXRfcHJpdmF0ZV9mbGFncywgXAorKyAgTkFNRSMjX2JmZF9wcmludF9wcml2YXRlX2JmZF9kYXRhCisrCisrICAvKiBDYWxsZWQgdG8gY29weSBCRkQgZ2VuZXJhbCBwcml2YXRlIGRhdGEgZnJvbSBvbmUgb2JqZWN0IGZpbGUKKysgICAgIHRvIGFub3RoZXIuICAqLworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX2NvcHlfcHJpdmF0ZV9iZmRfZGF0YSkgKGJmZCAqLCBiZmQgKik7CisrICAvKiBDYWxsZWQgdG8gbWVyZ2UgQkZEIGdlbmVyYWwgcHJpdmF0ZSBkYXRhIGZyb20gb25lIG9iamVjdCBmaWxlCisrICAgICB0byBhIGNvbW1vbiBvdXRwdXQgZmlsZSB3aGVuIGxpbmtpbmcuICAqLworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX21lcmdlX3ByaXZhdGVfYmZkX2RhdGEpIChiZmQgKiwgYmZkICopOworKyAgLyogQ2FsbGVkIHRvIGluaXRpYWxpemUgQkZEIHByaXZhdGUgc2VjdGlvbiBkYXRhIGZyb20gb25lIG9iamVjdCBmaWxlCisrICAgICB0byBhbm90aGVyLiAgKi8KKysjZGVmaW5lIGJmZF9pbml0X3ByaXZhdGVfc2VjdGlvbl9kYXRhKGliZmQsIGlzZWMsIG9iZmQsIG9zZWMsIGxpbmtfaW5mbykgXAorKyAgQkZEX1NFTkQgKG9iZmQsIF9iZmRfaW5pdF9wcml2YXRlX3NlY3Rpb25fZGF0YSwgKGliZmQsIGlzZWMsIG9iZmQsIG9zZWMsIGxpbmtfaW5mbykpCisrICBiZmRfYm9vbGVhbiAoKl9iZmRfaW5pdF9wcml2YXRlX3NlY3Rpb25fZGF0YSkKKysgICAgKGJmZCAqLCBzZWNfcHRyLCBiZmQgKiwgc2VjX3B0ciwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrICAvKiBDYWxsZWQgdG8gY29weSBCRkQgcHJpdmF0ZSBzZWN0aW9uIGRhdGEgZnJvbSBvbmUgb2JqZWN0IGZpbGUKKysgICAgIHRvIGFub3RoZXIuICAqLworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX2NvcHlfcHJpdmF0ZV9zZWN0aW9uX2RhdGEpCisrICAgIChiZmQgKiwgc2VjX3B0ciwgYmZkICosIHNlY19wdHIpOworKyAgLyogQ2FsbGVkIHRvIGNvcHkgQkZEIHByaXZhdGUgc3ltYm9sIGRhdGEgZnJvbSBvbmUgc3ltYm9sCisrICAgICB0byBhbm90aGVyLiAgKi8KKysgIGJmZF9ib29sZWFuICgqX2JmZF9jb3B5X3ByaXZhdGVfc3ltYm9sX2RhdGEpCisrICAgIChiZmQgKiwgYXN5bWJvbCAqLCBiZmQgKiwgYXN5bWJvbCAqKTsKKysgIC8qIENhbGxlZCB0byBjb3B5IEJGRCBwcml2YXRlIGhlYWRlciBkYXRhIGZyb20gb25lIG9iamVjdCBmaWxlCisrICAgICB0byBhbm90aGVyLiAgKi8KKysgIGJmZF9ib29sZWFuICgqX2JmZF9jb3B5X3ByaXZhdGVfaGVhZGVyX2RhdGEpCisrICAgIChiZmQgKiwgYmZkICopOworKyAgLyogQ2FsbGVkIHRvIHNldCBwcml2YXRlIGJhY2tlbmQgZmxhZ3MuICAqLworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX3NldF9wcml2YXRlX2ZsYWdzKSAoYmZkICosIGZsYWd3b3JkKTsKKysKKysgIC8qIENhbGxlZCB0byBwcmludCBwcml2YXRlIEJGRCBkYXRhLiAgKi8KKysgIGJmZF9ib29sZWFuICgqX2JmZF9wcmludF9wcml2YXRlX2JmZF9kYXRhKSAoYmZkICosIHZvaWQgKik7CisrCisrICAvKiBDb3JlIGZpbGUgZW50cnkgcG9pbnRzLiAgKi8KKysjZGVmaW5lIEJGRF9KVU1QX1RBQkxFX0NPUkUoTkFNRSkgXAorKyAgTkFNRSMjX2NvcmVfZmlsZV9mYWlsaW5nX2NvbW1hbmQsIFwKKysgIE5BTUUjI19jb3JlX2ZpbGVfZmFpbGluZ19zaWduYWwsIFwKKysgIE5BTUUjI19jb3JlX2ZpbGVfbWF0Y2hlc19leGVjdXRhYmxlX3AKKysKKysgIGNoYXIgKiAgICAgICgqX2NvcmVfZmlsZV9mYWlsaW5nX2NvbW1hbmQpIChiZmQgKik7CisrICBpbnQgICAgICAgICAoKl9jb3JlX2ZpbGVfZmFpbGluZ19zaWduYWwpIChiZmQgKik7CisrICBiZmRfYm9vbGVhbiAoKl9jb3JlX2ZpbGVfbWF0Y2hlc19leGVjdXRhYmxlX3ApIChiZmQgKiwgYmZkICopOworKworKyAgLyogQXJjaGl2ZSBlbnRyeSBwb2ludHMuICAqLworKyNkZWZpbmUgQkZEX0pVTVBfVEFCTEVfQVJDSElWRShOQU1FKSBcCisrICBOQU1FIyNfc2x1cnBfYXJtYXAsIFwKKysgIE5BTUUjI19zbHVycF9leHRlbmRlZF9uYW1lX3RhYmxlLCBcCisrICBOQU1FIyNfY29uc3RydWN0X2V4dGVuZGVkX25hbWVfdGFibGUsIFwKKysgIE5BTUUjI190cnVuY2F0ZV9hcm5hbWUsIFwKKysgIE5BTUUjI193cml0ZV9hcm1hcCwgXAorKyAgTkFNRSMjX3JlYWRfYXJfaGRyLCBcCisrICBOQU1FIyNfb3BlbnJfbmV4dF9hcmNoaXZlZF9maWxlLCBcCisrICBOQU1FIyNfZ2V0X2VsdF9hdF9pbmRleCwgXAorKyAgTkFNRSMjX2dlbmVyaWNfc3RhdF9hcmNoX2VsdCwgXAorKyAgTkFNRSMjX3VwZGF0ZV9hcm1hcF90aW1lc3RhbXAKKysKKysgIGJmZF9ib29sZWFuICgqX2JmZF9zbHVycF9hcm1hcCkgKGJmZCAqKTsKKysgIGJmZF9ib29sZWFuICgqX2JmZF9zbHVycF9leHRlbmRlZF9uYW1lX3RhYmxlKSAoYmZkICopOworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX2NvbnN0cnVjdF9leHRlbmRlZF9uYW1lX3RhYmxlKQorKyAgICAoYmZkICosIGNoYXIgKiosIGJmZF9zaXplX3R5cGUgKiwgY29uc3QgY2hhciAqKik7CisrICB2b2lkICAgICAgICAoKl9iZmRfdHJ1bmNhdGVfYXJuYW1lKSAoYmZkICosIGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKKysgIGJmZF9ib29sZWFuICgqd3JpdGVfYXJtYXApCisrICAgIChiZmQgKiwgdW5zaWduZWQgaW50LCBzdHJ1Y3Qgb3JsICosIHVuc2lnbmVkIGludCwgaW50KTsKKysgIHZvaWQgKiAgICAgICgqX2JmZF9yZWFkX2FyX2hkcl9mbikgKGJmZCAqKTsKKysgIGJmZCAqICAgICAgICgqb3BlbnJfbmV4dF9hcmNoaXZlZF9maWxlKSAoYmZkICosIGJmZCAqKTsKKysjZGVmaW5lIGJmZF9nZXRfZWx0X2F0X2luZGV4KGIsaSkgQkZEX1NFTkQgKGIsIF9iZmRfZ2V0X2VsdF9hdF9pbmRleCwgKGIsaSkpCisrICBiZmQgKiAgICAgICAoKl9iZmRfZ2V0X2VsdF9hdF9pbmRleCkgKGJmZCAqLCBzeW1pbmRleCk7CisrICBpbnQgICAgICAgICAoKl9iZmRfc3RhdF9hcmNoX2VsdCkgKGJmZCAqLCBzdHJ1Y3Qgc3RhdCAqKTsKKysgIGJmZF9ib29sZWFuICgqX2JmZF91cGRhdGVfYXJtYXBfdGltZXN0YW1wKSAoYmZkICopOworKworKyAgLyogRW50cnkgcG9pbnRzIHVzZWQgZm9yIHN5bWJvbHMuICAqLworKyNkZWZpbmUgQkZEX0pVTVBfVEFCTEVfU1lNQk9MUyhOQU1FKSBcCisrICBOQU1FIyNfZ2V0X3N5bXRhYl91cHBlcl9ib3VuZCwgXAorKyAgTkFNRSMjX2Nhbm9uaWNhbGl6ZV9zeW10YWIsIFwKKysgIE5BTUUjI19tYWtlX2VtcHR5X3N5bWJvbCwgXAorKyAgTkFNRSMjX3ByaW50X3N5bWJvbCwgXAorKyAgTkFNRSMjX2dldF9zeW1ib2xfaW5mbywgXAorKyAgTkFNRSMjX2JmZF9pc19sb2NhbF9sYWJlbF9uYW1lLCBcCisrICBOQU1FIyNfYmZkX2lzX3RhcmdldF9zcGVjaWFsX3N5bWJvbCwgXAorKyAgTkFNRSMjX2dldF9saW5lbm8sIFwKKysgIE5BTUUjI19maW5kX25lYXJlc3RfbGluZSwgXAorKyAgX2JmZF9nZW5lcmljX2ZpbmRfbGluZSwgXAorKyAgTkFNRSMjX2ZpbmRfaW5saW5lcl9pbmZvLCBcCisrICBOQU1FIyNfYmZkX21ha2VfZGVidWdfc3ltYm9sLCBcCisrICBOQU1FIyNfcmVhZF9taW5pc3ltYm9scywgXAorKyAgTkFNRSMjX21pbmlzeW1ib2xfdG9fc3ltYm9sCisrCisrICBsb25nICAgICAgICAoKl9iZmRfZ2V0X3N5bXRhYl91cHBlcl9ib3VuZCkgKGJmZCAqKTsKKysgIGxvbmcgICAgICAgICgqX2JmZF9jYW5vbmljYWxpemVfc3ltdGFiKQorKyAgICAoYmZkICosIHN0cnVjdCBiZmRfc3ltYm9sICoqKTsKKysgIHN0cnVjdCBiZmRfc3ltYm9sICoKKysgICAgICAgICAgICAgICgqX2JmZF9tYWtlX2VtcHR5X3N5bWJvbCkgKGJmZCAqKTsKKysgIHZvaWQgICAgICAgICgqX2JmZF9wcmludF9zeW1ib2wpCisrICAgIChiZmQgKiwgdm9pZCAqLCBzdHJ1Y3QgYmZkX3N5bWJvbCAqLCBiZmRfcHJpbnRfc3ltYm9sX3R5cGUpOworKyNkZWZpbmUgYmZkX3ByaW50X3N5bWJvbChiLHAscyxlKSBCRkRfU0VORCAoYiwgX2JmZF9wcmludF9zeW1ib2wsIChiLHAscyxlKSkKKysgIHZvaWQgICAgICAgICgqX2JmZF9nZXRfc3ltYm9sX2luZm8pCisrICAgIChiZmQgKiwgc3RydWN0IGJmZF9zeW1ib2wgKiwgc3ltYm9sX2luZm8gKik7CisrI2RlZmluZSBiZmRfZ2V0X3N5bWJvbF9pbmZvKGIscCxlKSBCRkRfU0VORCAoYiwgX2JmZF9nZXRfc3ltYm9sX2luZm8sIChiLHAsZSkpCisrICBiZmRfYm9vbGVhbiAoKl9iZmRfaXNfbG9jYWxfbGFiZWxfbmFtZSkgKGJmZCAqLCBjb25zdCBjaGFyICopOworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX2lzX3RhcmdldF9zcGVjaWFsX3N5bWJvbCkgKGJmZCAqLCBhc3ltYm9sICopOworKyAgYWxlbnQgKiAgICAgKCpfZ2V0X2xpbmVubykgKGJmZCAqLCBzdHJ1Y3QgYmZkX3N5bWJvbCAqKTsKKysgIGJmZF9ib29sZWFuICgqX2JmZF9maW5kX25lYXJlc3RfbGluZSkKKysgICAgKGJmZCAqLCBzdHJ1Y3QgYmZkX3NlY3Rpb24gKiwgc3RydWN0IGJmZF9zeW1ib2wgKiosIGJmZF92bWEsCisrICAgICBjb25zdCBjaGFyICoqLCBjb25zdCBjaGFyICoqLCB1bnNpZ25lZCBpbnQgKik7CisrICBiZmRfYm9vbGVhbiAoKl9iZmRfZmluZF9saW5lKQorKyAgICAoYmZkICosIHN0cnVjdCBiZmRfc3ltYm9sICoqLCBzdHJ1Y3QgYmZkX3N5bWJvbCAqLAorKyAgICAgY29uc3QgY2hhciAqKiwgdW5zaWduZWQgaW50ICopOworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX2ZpbmRfaW5saW5lcl9pbmZvKQorKyAgICAoYmZkICosIGNvbnN0IGNoYXIgKiosIGNvbnN0IGNoYXIgKiosIHVuc2lnbmVkIGludCAqKTsKKysgLyogQmFjay1kb29yIHRvIGFsbG93IGZvcm1hdC1hd2FyZSBhcHBsaWNhdGlvbnMgdG8gY3JlYXRlIGRlYnVnIHN5bWJvbHMKKysgICAgd2hpbGUgdXNpbmcgQkZEIGZvciBldmVyeXRoaW5nIGVsc2UuICBDdXJyZW50bHkgdXNlZCBieSB0aGUgYXNzZW1ibGVyCisrICAgIHdoZW4gY3JlYXRpbmcgQ09GRiBmaWxlcy4gICovCisrICBhc3ltYm9sICogICAoKl9iZmRfbWFrZV9kZWJ1Z19zeW1ib2wpCisrICAgIChiZmQgKiwgdm9pZCAqLCB1bnNpZ25lZCBsb25nIHNpemUpOworKyNkZWZpbmUgYmZkX3JlYWRfbWluaXN5bWJvbHMoYiwgZCwgbSwgcykgXAorKyAgQkZEX1NFTkQgKGIsIF9yZWFkX21pbmlzeW1ib2xzLCAoYiwgZCwgbSwgcykpCisrICBsb25nICAgICAgICAoKl9yZWFkX21pbmlzeW1ib2xzKQorKyAgICAoYmZkICosIGJmZF9ib29sZWFuLCB2b2lkICoqLCB1bnNpZ25lZCBpbnQgKik7CisrI2RlZmluZSBiZmRfbWluaXN5bWJvbF90b19zeW1ib2woYiwgZCwgbSwgZikgXAorKyAgQkZEX1NFTkQgKGIsIF9taW5pc3ltYm9sX3RvX3N5bWJvbCwgKGIsIGQsIG0sIGYpKQorKyAgYXN5bWJvbCAqICAgKCpfbWluaXN5bWJvbF90b19zeW1ib2wpCisrICAgIChiZmQgKiwgYmZkX2Jvb2xlYW4sIGNvbnN0IHZvaWQgKiwgYXN5bWJvbCAqKTsKKysKKysgIC8qIFJvdXRpbmVzIGZvciByZWxvY3MuICAqLworKyNkZWZpbmUgQkZEX0pVTVBfVEFCTEVfUkVMT0NTKE5BTUUpIFwKKysgIE5BTUUjI19nZXRfcmVsb2NfdXBwZXJfYm91bmQsIFwKKysgIE5BTUUjI19jYW5vbmljYWxpemVfcmVsb2MsIFwKKysgIE5BTUUjI19iZmRfcmVsb2NfdHlwZV9sb29rdXAsIFwKKysgIE5BTUUjI19iZmRfcmVsb2NfbmFtZV9sb29rdXAKKysKKysgIGxvbmcgICAgICAgICgqX2dldF9yZWxvY191cHBlcl9ib3VuZCkgKGJmZCAqLCBzZWNfcHRyKTsKKysgIGxvbmcgICAgICAgICgqX2JmZF9jYW5vbmljYWxpemVfcmVsb2MpCisrICAgIChiZmQgKiwgc2VjX3B0ciwgYXJlbGVudCAqKiwgc3RydWN0IGJmZF9zeW1ib2wgKiopOworKyAgLyogU2VlIGRvY3VtZW50YXRpb24gb24gcmVsb2MgdHlwZXMuICAqLworKyAgcmVsb2NfaG93dG9fdHlwZSAqCisrICAgICAgICAgICAgICAoKnJlbG9jX3R5cGVfbG9va3VwKSAoYmZkICosIGJmZF9yZWxvY19jb2RlX3JlYWxfdHlwZSk7CisrICByZWxvY19ob3d0b190eXBlICoKKysgICAgICAgICAgICAgICgqcmVsb2NfbmFtZV9sb29rdXApIChiZmQgKiwgY29uc3QgY2hhciAqKTsKKysKKysKKysgIC8qIFJvdXRpbmVzIHVzZWQgd2hlbiB3cml0aW5nIGFuIG9iamVjdCBmaWxlLiAgKi8KKysjZGVmaW5lIEJGRF9KVU1QX1RBQkxFX1dSSVRFKE5BTUUpIFwKKysgIE5BTUUjI19zZXRfYXJjaF9tYWNoLCBcCisrICBOQU1FIyNfc2V0X3NlY3Rpb25fY29udGVudHMKKysKKysgIGJmZF9ib29sZWFuICgqX2JmZF9zZXRfYXJjaF9tYWNoKQorKyAgICAoYmZkICosIGVudW0gYmZkX2FyY2hpdGVjdHVyZSwgdW5zaWduZWQgbG9uZyk7CisrICBiZmRfYm9vbGVhbiAoKl9iZmRfc2V0X3NlY3Rpb25fY29udGVudHMpCisrICAgIChiZmQgKiwgc2VjX3B0ciwgY29uc3Qgdm9pZCAqLCBmaWxlX3B0ciwgYmZkX3NpemVfdHlwZSk7CisrCisrICAvKiBSb3V0aW5lcyB1c2VkIGJ5IHRoZSBsaW5rZXIuICAqLworKyNkZWZpbmUgQkZEX0pVTVBfVEFCTEVfTElOSyhOQU1FKSBcCisrICBOQU1FIyNfc2l6ZW9mX2hlYWRlcnMsIFwKKysgIE5BTUUjI19iZmRfZ2V0X3JlbG9jYXRlZF9zZWN0aW9uX2NvbnRlbnRzLCBcCisrICBOQU1FIyNfYmZkX3JlbGF4X3NlY3Rpb24sIFwKKysgIE5BTUUjI19iZmRfbGlua19oYXNoX3RhYmxlX2NyZWF0ZSwgXAorKyAgTkFNRSMjX2JmZF9saW5rX2hhc2hfdGFibGVfZnJlZSwgXAorKyAgTkFNRSMjX2JmZF9saW5rX2FkZF9zeW1ib2xzLCBcCisrICBOQU1FIyNfYmZkX2xpbmtfanVzdF9zeW1zLCBcCisrICBOQU1FIyNfYmZkX2ZpbmFsX2xpbmssIFwKKysgIE5BTUUjI19iZmRfbGlua19zcGxpdF9zZWN0aW9uLCBcCisrICBOQU1FIyNfYmZkX2djX3NlY3Rpb25zLCBcCisrICBOQU1FIyNfYmZkX21lcmdlX3NlY3Rpb25zLCBcCisrICBOQU1FIyNfYmZkX2lzX2dyb3VwX3NlY3Rpb24sIFwKKysgIE5BTUUjI19iZmRfZGlzY2FyZF9ncm91cCwgXAorKyAgTkFNRSMjX3NlY3Rpb25fYWxyZWFkeV9saW5rZWQgXAorKworKyAgaW50ICAgICAgICAgKCpfYmZkX3NpemVvZl9oZWFkZXJzKSAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOworKyAgYmZkX2J5dGUgKiAgKCpfYmZkX2dldF9yZWxvY2F0ZWRfc2VjdGlvbl9jb250ZW50cykKKysgICAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBzdHJ1Y3QgYmZkX2xpbmtfb3JkZXIgKiwKKysgICAgIGJmZF9ieXRlICosIGJmZF9ib29sZWFuLCBzdHJ1Y3QgYmZkX3N5bWJvbCAqKik7CisrCisrICBiZmRfYm9vbGVhbiAoKl9iZmRfcmVsYXhfc2VjdGlvbikKKysgICAgKGJmZCAqLCBzdHJ1Y3QgYmZkX3NlY3Rpb24gKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKiwgYmZkX2Jvb2xlYW4gKik7CisrCisrICAvKiBDcmVhdGUgYSBoYXNoIHRhYmxlIGZvciB0aGUgbGlua2VyLiAgRGlmZmVyZW50IGJhY2tlbmRzIHN0b3JlCisrICAgICBkaWZmZXJlbnQgaW5mb3JtYXRpb24gaW4gdGhpcyB0YWJsZS4gICovCisrICBzdHJ1Y3QgYmZkX2xpbmtfaGFzaF90YWJsZSAqCisrICAgICAgICAgICAgICAoKl9iZmRfbGlua19oYXNoX3RhYmxlX2NyZWF0ZSkgKGJmZCAqKTsKKysKKysgIC8qIFJlbGVhc2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIGxpbmtlciBoYXNoIHRhYmxlLiAgKi8KKysgIHZvaWQgICAgICAgICgqX2JmZF9saW5rX2hhc2hfdGFibGVfZnJlZSkgKHN0cnVjdCBiZmRfbGlua19oYXNoX3RhYmxlICopOworKworKyAgLyogQWRkIHN5bWJvbHMgZnJvbSB0aGlzIG9iamVjdCBmaWxlIGludG8gdGhlIGhhc2ggdGFibGUuICAqLworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX2xpbmtfYWRkX3N5bWJvbHMpIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrCisrICAvKiBJbmRpY2F0ZSB0aGF0IHdlIGFyZSBvbmx5IHJldHJpZXZpbmcgc3ltYm9sIHZhbHVlcyBmcm9tIHRoaXMgc2VjdGlvbi4gICovCisrICB2b2lkICAgICAgICAoKl9iZmRfbGlua19qdXN0X3N5bXMpIChhc2VjdGlvbiAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKysKKysgIC8qIERvIGEgbGluayBiYXNlZCBvbiB0aGUgbGlua19vcmRlciBzdHJ1Y3R1cmVzIGF0dGFjaGVkIHRvIGVhY2gKKysgICAgIHNlY3Rpb24gb2YgdGhlIEJGRC4gICovCisrICBiZmRfYm9vbGVhbiAoKl9iZmRfZmluYWxfbGluaykgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKysKKysgIC8qIFNob3VsZCB0aGlzIHNlY3Rpb24gYmUgc3BsaXQgdXAgaW50byBzbWFsbGVyIHBpZWNlcyBkdXJpbmcgbGlua2luZy4gICovCisrICBiZmRfYm9vbGVhbiAoKl9iZmRfbGlua19zcGxpdF9zZWN0aW9uKSAoYmZkICosIHN0cnVjdCBiZmRfc2VjdGlvbiAqKTsKKysKKysgIC8qIFJlbW92ZSBzZWN0aW9ucyB0aGF0IGFyZSBub3QgcmVmZXJlbmNlZCBmcm9tIHRoZSBvdXRwdXQuICAqLworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX2djX3NlY3Rpb25zKSAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOworKworKyAgLyogQXR0ZW1wdCB0byBtZXJnZSBTRUNfTUVSR0Ugc2VjdGlvbnMuICAqLworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX21lcmdlX3NlY3Rpb25zKSAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOworKworKyAgLyogSXMgdGhpcyBzZWN0aW9uIGEgbWVtYmVyIG9mIGEgZ3JvdXA/ICAqLworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX2lzX2dyb3VwX3NlY3Rpb24pIChiZmQgKiwgY29uc3Qgc3RydWN0IGJmZF9zZWN0aW9uICopOworKworKyAgLyogRGlzY2FyZCBtZW1iZXJzIG9mIGEgZ3JvdXAuICAqLworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX2Rpc2NhcmRfZ3JvdXApIChiZmQgKiwgc3RydWN0IGJmZF9zZWN0aW9uICopOworKworKyAgLyogQ2hlY2sgaWYgU0VDIGhhcyBiZWVuIGFscmVhZHkgbGlua2VkIGR1cmluZyBhIHJlbG9jZWF0YWJsZSBvcgorKyAgICAgZmluYWwgbGluay4gICovCisrICB2b2lkICgqX3NlY3Rpb25fYWxyZWFkeV9saW5rZWQpIChiZmQgKiwgc3RydWN0IGJmZF9zZWN0aW9uICosCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKysKKysgIC8qIFJvdXRpbmVzIHRvIGhhbmRsZSBkeW5hbWljIHN5bWJvbHMgYW5kIHJlbG9jcy4gICovCisrI2RlZmluZSBCRkRfSlVNUF9UQUJMRV9EWU5BTUlDKE5BTUUpIFwKKysgIE5BTUUjI19nZXRfZHluYW1pY19zeW10YWJfdXBwZXJfYm91bmQsIFwKKysgIE5BTUUjI19jYW5vbmljYWxpemVfZHluYW1pY19zeW10YWIsIFwKKysgIE5BTUUjI19nZXRfc3ludGhldGljX3N5bXRhYiwgXAorKyAgTkFNRSMjX2dldF9keW5hbWljX3JlbG9jX3VwcGVyX2JvdW5kLCBcCisrICBOQU1FIyNfY2Fub25pY2FsaXplX2R5bmFtaWNfcmVsb2MKKysKKysgIC8qIEdldCB0aGUgYW1vdW50IG9mIG1lbW9yeSByZXF1aXJlZCB0byBob2xkIHRoZSBkeW5hbWljIHN5bWJvbHMuICAqLworKyAgbG9uZyAgICAgICAgKCpfYmZkX2dldF9keW5hbWljX3N5bXRhYl91cHBlcl9ib3VuZCkgKGJmZCAqKTsKKysgIC8qIFJlYWQgaW4gdGhlIGR5bmFtaWMgc3ltYm9scy4gICovCisrICBsb25nICAgICAgICAoKl9iZmRfY2Fub25pY2FsaXplX2R5bmFtaWNfc3ltdGFiKQorKyAgICAoYmZkICosIHN0cnVjdCBiZmRfc3ltYm9sICoqKTsKKysgIC8qIENyZWF0ZSBzeW50aGV0aXplZCBzeW1ib2xzLiAgKi8KKysgIGxvbmcgICAgICAgICgqX2JmZF9nZXRfc3ludGhldGljX3N5bXRhYikKKysgICAgKGJmZCAqLCBsb25nLCBzdHJ1Y3QgYmZkX3N5bWJvbCAqKiwgbG9uZywgc3RydWN0IGJmZF9zeW1ib2wgKiosCisrICAgICBzdHJ1Y3QgYmZkX3N5bWJvbCAqKik7CisrICAvKiBHZXQgdGhlIGFtb3VudCBvZiBtZW1vcnkgcmVxdWlyZWQgdG8gaG9sZCB0aGUgZHluYW1pYyByZWxvY3MuICAqLworKyAgbG9uZyAgICAgICAgKCpfYmZkX2dldF9keW5hbWljX3JlbG9jX3VwcGVyX2JvdW5kKSAoYmZkICopOworKyAgLyogUmVhZCBpbiB0aGUgZHluYW1pYyByZWxvY3MuICAqLworKyAgbG9uZyAgICAgICAgKCpfYmZkX2Nhbm9uaWNhbGl6ZV9keW5hbWljX3JlbG9jKQorKyAgICAoYmZkICosIGFyZWxlbnQgKiosIHN0cnVjdCBiZmRfc3ltYm9sICoqKTsKKysKKysgIC8qIE9wcG9zaXRlIGVuZGlhbiB2ZXJzaW9uIG9mIHRoaXMgdGFyZ2V0LiAgKi8KKysgIGNvbnN0IHN0cnVjdCBiZmRfdGFyZ2V0ICogYWx0ZXJuYXRpdmVfdGFyZ2V0OworKworKyAgLyogRGF0YSBmb3IgdXNlIGJ5IGJhY2stZW5kIHJvdXRpbmVzLCB3aGljaCBpc24ndAorKyAgICAgZ2VuZXJpYyBlbm91Z2ggdG8gYmVsb25nIGluIHRoaXMgc3RydWN0dXJlLiAgKi8KKysgIGNvbnN0IHZvaWQgKmJhY2tlbmRfZGF0YTsKKysKKyt9IGJmZF90YXJnZXQ7CisrCisrYmZkX2Jvb2xlYW4gYmZkX3NldF9kZWZhdWx0X3RhcmdldCAoY29uc3QgY2hhciAqbmFtZSk7CisrCisrY29uc3QgYmZkX3RhcmdldCAqYmZkX2ZpbmRfdGFyZ2V0IChjb25zdCBjaGFyICp0YXJnZXRfbmFtZSwgYmZkICphYmZkKTsKKysKKytjb25zdCBjaGFyICoqIGJmZF90YXJnZXRfbGlzdCAodm9pZCk7CisrCisrY29uc3QgYmZkX3RhcmdldCAqYmZkX3NlYXJjaF9mb3JfdGFyZ2V0CisrICAgKGludCAoKnNlYXJjaF9mdW5jKSAoY29uc3QgYmZkX3RhcmdldCAqLCB2b2lkICopLAorKyAgICB2b2lkICopOworKworKy8qIEV4dHJhY3RlZCBmcm9tIGZvcm1hdC5jLiAgKi8KKytiZmRfYm9vbGVhbiBiZmRfY2hlY2tfZm9ybWF0IChiZmQgKmFiZmQsIGJmZF9mb3JtYXQgZm9ybWF0KTsKKysKKytiZmRfYm9vbGVhbiBiZmRfY2hlY2tfZm9ybWF0X21hdGNoZXMKKysgICAoYmZkICphYmZkLCBiZmRfZm9ybWF0IGZvcm1hdCwgY2hhciAqKiptYXRjaGluZyk7CisrCisrYmZkX2Jvb2xlYW4gYmZkX3NldF9mb3JtYXQgKGJmZCAqYWJmZCwgYmZkX2Zvcm1hdCBmb3JtYXQpOworKworK2NvbnN0IGNoYXIgKmJmZF9mb3JtYXRfc3RyaW5nIChiZmRfZm9ybWF0IGZvcm1hdCk7CisrCisrLyogRXh0cmFjdGVkIGZyb20gbGlua2VyLmMuICAqLworK2JmZF9ib29sZWFuIGJmZF9saW5rX3NwbGl0X3NlY3Rpb24gKGJmZCAqYWJmZCwgYXNlY3Rpb24gKnNlYyk7CisrCisrI2RlZmluZSBiZmRfbGlua19zcGxpdF9zZWN0aW9uKGFiZmQsIHNlYykgXAorKyAgICAgICBCRkRfU0VORCAoYWJmZCwgX2JmZF9saW5rX3NwbGl0X3NlY3Rpb24sIChhYmZkLCBzZWMpKQorKworK3ZvaWQgYmZkX3NlY3Rpb25fYWxyZWFkeV9saW5rZWQgKGJmZCAqYWJmZCwgYXNlY3Rpb24gKnNlYywKKysgICAgc3RydWN0IGJmZF9saW5rX2luZm8gKmluZm8pOworKworKyNkZWZpbmUgYmZkX3NlY3Rpb25fYWxyZWFkeV9saW5rZWQoYWJmZCwgc2VjLCBpbmZvKSBcCisrICAgICAgIEJGRF9TRU5EIChhYmZkLCBfc2VjdGlvbl9hbHJlYWR5X2xpbmtlZCwgKGFiZmQsIHNlYywgaW5mbykpCisrCisrLyogRXh0cmFjdGVkIGZyb20gc2ltcGxlLmMuICAqLworK2JmZF9ieXRlICpiZmRfc2ltcGxlX2dldF9yZWxvY2F0ZWRfc2VjdGlvbl9jb250ZW50cworKyAgIChiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWMsIGJmZF9ieXRlICpvdXRidWYsIGFzeW1ib2wgKipzeW1ib2xfdGFibGUpOworKworKyNpZmRlZiBfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL2JmZC9iZmRfc3RkaW50LmgKK0BAIC0wLDAgKzEsNDcgQEAKKysvKiBnZW5lcmF0ZWQgZm9yICBnY2MgKEdDQykgNC4yLjQgKFVidW50dSA0LjIuNC0zdWJ1bnR1NCkgKi8KKysKKysjaWZuZGVmIEdDQ19HRU5FUkFURURfU1RESU5UX0gKKysjZGVmaW5lIEdDQ19HRU5FUkFURURfU1RESU5UX0ggMQorKworKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrLyogZ2xpYmMgdXNlcyB0aGVzZSBzeW1ib2xzIGFzIGd1YXJkcyB0byBwcmV2ZW50IHJlZGVmaW5pdGlvbnMuICAqLworKyNpZmRlZiBfX2ludDhfdF9kZWZpbmVkCisrI2RlZmluZSBfSU5UOF9UCisrI2RlZmluZSBfSU5UMTZfVAorKyNkZWZpbmUgX0lOVDMyX1QKKysjZW5kaWYKKysjaWZkZWYgX191aW50MzJfdF9kZWZpbmVkCisrI2RlZmluZSBfVUlOVDMyX1QKKysjZW5kaWYKKysKKysKKysvKiBTb21lIHN5c3RlbXMgaGF2ZSBndWFyZCBtYWNyb3MgdG8gcHJldmVudCByZWRlZmluaXRpb25zLCBkZWZpbmUgdGhlbS4gICovCisrI2lmbmRlZiBfSU5UOF9UCisrI2RlZmluZSBfSU5UOF9UCisrI2VuZGlmCisrI2lmbmRlZiBfSU5UMTZfVAorKyNkZWZpbmUgX0lOVDE2X1QKKysjZW5kaWYKKysjaWZuZGVmIF9JTlQzMl9UCisrI2RlZmluZSBfSU5UMzJfVAorKyNlbmRpZgorKyNpZm5kZWYgX1VJTlQ4X1QKKysjZGVmaW5lIF9VSU5UOF9UCisrI2VuZGlmCisrI2lmbmRlZiBfVUlOVDE2X1QKKysjZGVmaW5lIF9VSU5UMTZfVAorKyNlbmRpZgorKyNpZm5kZWYgX1VJTlQzMl9UCisrI2RlZmluZSBfVUlOVDMyX1QKKysjZW5kaWYKKysKKysvKiBzeXN0ZW0gaGVhZGVycyBoYXZlIGdvb2QgdWludDY0X3QgYW5kIGludDY0X3QgKi8KKysjaWZuZGVmIF9JTlQ2NF9UCisrI2RlZmluZSBfSU5UNjRfVAorKyNlbmRpZgorKyNpZm5kZWYgX1VJTlQ2NF9UCisrI2RlZmluZSBfVUlOVDY0X1QKKysjZW5kaWYKKysKKysjZW5kaWYgLyogR0NDX0dFTkVSQVRFRF9TVERJTlRfSCAqLworLS0tIGEvYmZkL2NvbmZpZ3VyZQorKysrIGIvYmZkL2NvbmZpZ3VyZQorQEAgLTI5OTQsNyArMjk5NCw3IEBAIGZpCisgCisgIyBEZWZpbmUgdGhlIGlkZW50aXR5IG9mIHRoZSBwYWNrYWdlLgorICBQQUNLQUdFPWJmZAorLSBWRVJTSU9OPTIuMTgKKysgVkVSU0lPTj0yLjE4LmF0bWVsLjEuMC4xLmF2cjMybGludXguMQorIAorIAorIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKK0BAIC0xOTA0MSw2ICsxOTA0MSw3IEBAIGRvCisgICAgIGJmZF9lZmlfYXBwX2lhNjRfdmVjKQl0Yj0iJHRiIGVmaS1hcHAtaWE2NC5sbyBwZXBpZ2VuLmxvIGNvZmZsaW5rLmxvIjsgdGFyZ2V0X3NpemU9NjQgOzsKKyAgICAgYmZkX2VsZjMyX2FtMzNsaW5fdmVjKQl0Yj0iJHRiIGVsZjMyLWFtMzNsaW4ubG8gZWxmMzIubG8gJGVsZiIgOzsKKyAgICAgYmZkX2VsZjMyX2F2cl92ZWMpCQl0Yj0iJHRiIGVsZjMyLWF2ci5sbyBlbGYzMi5sbyAkZWxmIiA7OworKyAgICBiZmRfZWxmMzJfYXZyMzJfdmVjKQl0Yj0iJHRiIGVsZjMyLWF2cjMyLmxvIGVsZjMyLmxvICRlbGYiIDs7CisgICAgIGJmZF9lbGYzMl9iZmluX3ZlYykJCXRiPSIkdGIgZWxmMzItYmZpbi5sbyBlbGYzMi5sbyAkZWxmIiA7OworICAgICBiZmRfZWxmMzJfYmZpbmZkcGljX3ZlYykJdGI9IiR0YiBlbGYzMi1iZmluLmxvIGVsZjMyLmxvICRlbGYiIDs7CisgICAgIGJmZF9lbGYzMl9iaWdfZ2VuZXJpY192ZWMpIAl0Yj0iJHRiIGVsZjMyLWdlbi5sbyBlbGYzMi5sbyAkZWxmIiA7OworLS0tIC9kZXYvbnVsbAorKysrIGIvYmZkL2RvYy9iZmQuaAorQEAgLTAsMCArMSw1NDkzIEBACisrLyogRE8gTk9UIEVESVQhICAtKi0gYnVmZmVyLXJlYWQtb25seTogdCAtKi0gIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IAorKyAgIGdlbmVyYXRlZCBmcm9tICJiZmQtaW4uaCIsICJpbml0LmMiLCAib3BuY2xzLmMiLCAibGliYmZkLmMiLCAKKysgICAiYmZkaW8uYyIsICJiZmR3aW4uYyIsICJzZWN0aW9uLmMiLCAiYXJjaHVyZXMuYyIsICJyZWxvYy5jIiwgCisrICAgInN5bXMuYyIsICJiZmQuYyIsICJhcmNoaXZlLmMiLCAiY29yZWZpbGUuYyIsICJ0YXJnZXRzLmMiLCAiZm9ybWF0LmMiLCAKKysgICAibGlua2VyLmMiIGFuZCAic2ltcGxlLmMiLgorKyAgIFJ1biAibWFrZSBoZWFkZXJzIiBpbiB5b3VyIGJ1aWxkIGJmZC8gdG8gcmVnZW5lcmF0ZS4gICovCisrCisrLyogTWFpbiBoZWFkZXIgZmlsZSBmb3IgdGhlIGJmZCBsaWJyYXJ5IC0tIHBvcnRhYmxlIGFjY2VzcyB0byBvYmplY3QgZmlsZXMuCisrCisrICAgQ29weXJpZ2h0IDE5OTAsIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsCisrICAgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNworKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIENvbnRyaWJ1dGVkIGJ5IEN5Z251cyBTdXBwb3J0LgorKworKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJGRCwgdGhlIEJpbmFyeSBGaWxlIERlc2NyaXB0b3IgbGlicmFyeS4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisrCisrI2lmbmRlZiBfX0JGRF9IX1NFRU5fXworKyNkZWZpbmUgX19CRkRfSF9TRUVOX18KKysKKysjaWZkZWYgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKysjaW5jbHVkZSAiYW5zaWRlY2wuaCIKKysjaW5jbHVkZSAic3ltY2F0LmgiCisrI2lmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChBTE1PU1RfU1REQykgfHwgZGVmaW5lZCAoSEFWRV9TVFJJTkdJWkUpCisrI2lmbmRlZiBTQUJFUgorKy8qIFRoaXMgaGFjayBpcyB0byBhdm9pZCBhIHByb2JsZW0gd2l0aCBzb21lIHN0cmljdCBBTlNJIEMgcHJlcHJvY2Vzc29ycy4KKysgICBUaGUgcHJvYmxlbSBpcywgIjMyXyIgaXMgbm90IGEgdmFsaWQgcHJlcHJvY2Vzc2luZyB0b2tlbiwgYW5kIHdlIGRvbid0CisrICAgd2FudCBleHRyYSB1bmRlcnNjb3JlcyAoZS5nLiwgIm5sbV8zMl8iKS4gIFRoZSBYQ09OQ0FUMiBtYWNybyB3aWxsCisrICAgY2F1c2UgdGhlIGlubmVyIENPTkNBVDIgbWFjcm9zIHRvIGJlIGV2YWx1YXRlZCBmaXJzdCwgcHJvZHVjaW5nCisrICAgc3RpbGwtdmFsaWQgcHAtdG9rZW5zLiAgVGhlbiB0aGUgZmluYWwgY29uY2F0ZW5hdGlvbiBjYW4gYmUgZG9uZS4gICovCisrI3VuZGVmIENPTkNBVDQKKysjZGVmaW5lIENPTkNBVDQoYSxiLGMsZCkgWENPTkNBVDIoQ09OQ0FUMihhLGIpLENPTkNBVDIoYyxkKSkKKysjZW5kaWYKKysjZW5kaWYKKysKKysvKiBUaGlzIGlzIGEgdXRpbGl0eSBtYWNybyB0byBoYW5kbGUgdGhlIHNpdHVhdGlvbiB3aGVyZSB0aGUgY29kZQorKyAgIHdhbnRzIHRvIHBsYWNlIGEgY29uc3RhbnQgc3RyaW5nIGludG8gdGhlIGNvZGUsIGZvbGxvd2VkIGJ5IGEKKysgICBjb21tYSBhbmQgdGhlbiB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuICBEb2luZyB0aGlzIGJ5IGhhbmQKKysgICBpcyBlcnJvciBwcm9uZSwgc28gdXNpbmcgdGhpcyBtYWNybyBpcyBzYWZlci4gIFRoZSBtYWNybyB3aWxsCisrICAgYWxzbyBzYWZlbHkgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGEgTlVMTCBpcyBwYXNzZWQgYXMgdGhlIGFyZy4gICovCisrI2RlZmluZSBTVFJJTkdfQ09NTUFfTEVOKFNUUikgKFNUUiksICgoU1RSKSA/IHNpemVvZiAoU1RSKSAtIDEgOiAwKQorKy8qIFVuZm9ydHVuYXRlbHkgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHVzZSB0aGUgU1RSSU5HX0NPTU1BX0xFTiBtYWNybworKyAgIHRvIGNyZWF0ZSB0aGUgYXJndW1lbnRzIHRvIGFub3RoZXIgbWFjcm8sIHNpbmNlIHRoZSBwcmVwcm9jZXNzb3IKKysgICB3aWxsIG1pcy1jb3VudCB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byB0aGUgb3V0ZXIgbWFjcm8gKGJ5IG5vdAorKyAgIGV2YWx1YXRpbmcgU1RSSU5HX0NPTU1BX0xFTiBhbmQgc28gbWlzc2luZyB0aGUgY29tbWEpLiAgVGhpcyBpcyBhCisrICAgcHJvYmxlbSBmb3IgZXhhbXBsZSB3aGVuIHRyeWluZyB0byB1c2UgU1RSSU5HX0NPTU1BX0xFTiB0byBidWlsZAorKyAgIHRoZSBhcmd1bWVudHMgdG8gdGhlIHN0cm5jbXAoKSBtYWNyby4gIEhlbmNlIHRoaXMgYWx0ZXJuYXRpdmUKKysgICBkZWZpbml0aW9uIG9mIHN0cm5jbXAgaXMgcHJvdmlkZWQgaGVyZS4KKysgICAKKysgICBOb3RlIC0gdGhlc2UgbWFjcm9zIGRvIE5PVCB3b3JrIGlmIFNUUjIgaXMgbm90IGEgY29uc3RhbnQgc3RyaW5nLiAgKi8KKysjZGVmaW5lIENPTlNUX1NUUk5FUShTVFIxLFNUUjIpIChzdHJuY21wICgoU1RSMSksIChTVFIyKSwgc2l6ZW9mIChTVFIyKSAtIDEpID09IDApCisrICAvKiBzdHJjcHkoKSBjYW4gaGF2ZSBhIHNpbWlsYXIgcHJvYmxlbSwgYnV0IHNpbmNlIHdlIGtub3cgd2UgYXJlCisrICAgICBjb3B5aW5nIGEgY29uc3RhbnQgc3RyaW5nLCB3ZSBjYW4gdXNlIG1lbWNweSB3aGljaCB3aWxsIGJlIGZhc3RlcgorKyAgICAgc2luY2UgdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBmb3IgYSBOVUwgYnl0ZSBpbnNpZGUgU1RSLiAgV2UKKysgICAgIGNhbiBhbHNvIHNhdmUgdGltZSBpZiB3ZSBkbyBub3QgbmVlZCB0byBjb3B5IHRoZSB0ZXJtaW5hdGluZyBOVUwuICAqLworKyNkZWZpbmUgTElUTUVNQ1BZKERFU1QsU1RSMikgbWVtY3B5ICgoREVTVCksIChTVFIyKSwgc2l6ZW9mIChTVFIyKSAtIDEpCisrI2RlZmluZSBMSVRTVFJDUFkoREVTVCxTVFIyKSBtZW1jcHkgKChERVNUKSwgKFNUUjIpLCBzaXplb2YgKFNUUjIpKQorKworKworKy8qIFRoZSB3b3JkIHNpemUgdXNlZCBieSBCRkQgb24gdGhlIGhvc3QuICBUaGlzIG1heSBiZSA2NCB3aXRoIGEgMzIKKysgICBiaXQgdGFyZ2V0IGlmIHRoZSBob3N0IGlzIDY0IGJpdCwgb3IgaWYgb3RoZXIgNjQgYml0IHRhcmdldHMgaGF2ZQorKyAgIGJlZW4gc2VsZWN0ZWQgd2l0aCAtLWVuYWJsZS10YXJnZXRzLCBvciBpZiAtLWVuYWJsZS02NC1iaXQtYmZkLiAgKi8KKysjZGVmaW5lIEJGRF9BUkNIX1NJWkUgQHdvcmRzaXplQAorKworKy8qIFRoZSB3b3JkIHNpemUgb2YgdGhlIGRlZmF1bHQgYmZkIHRhcmdldC4gICovCisrI2RlZmluZSBCRkRfREVGQVVMVF9UQVJHRVRfU0laRSBAYmZkX2RlZmF1bHRfdGFyZ2V0X3NpemVACisrCisrI2RlZmluZSBCRkRfSE9TVF82NEJJVF9MT05HIEBCRkRfSE9TVF82NEJJVF9MT05HQAorKyNkZWZpbmUgQkZEX0hPU1RfNjRCSVRfTE9OR19MT05HIEBCRkRfSE9TVF82NEJJVF9MT05HX0xPTkdACisrI2RlZmluZSBCRkRfSE9TVF9MT05HX0xPTkcgQEJGRF9IT1NUX0xPTkdfTE9OR0AKKysjaWYgQEJGRF9IT1NUXzY0X0JJVF9ERUZJTkVEQAorKyNkZWZpbmUgQkZEX0hPU1RfNjRfQklUIEBCRkRfSE9TVF82NF9CSVRACisrI2RlZmluZSBCRkRfSE9TVF9VXzY0X0JJVCBAQkZEX0hPU1RfVV82NF9CSVRACisrdHlwZWRlZiBCRkRfSE9TVF82NF9CSVQgYmZkX2ludDY0X3Q7CisrdHlwZWRlZiBCRkRfSE9TVF9VXzY0X0JJVCBiZmRfdWludDY0X3Q7CisrI2VuZGlmCisrCisrI2lmIEJGRF9BUkNIX1NJWkUgPj0gNjQKKysjZGVmaW5lIEJGRDY0CisrI2VuZGlmCisrCisrI2lmbmRlZiBJTkxJTkUKKysjaWYgX19HTlVDX18gPj0gMgorKyNkZWZpbmUgSU5MSU5FIF9faW5saW5lX18KKysjZWxzZQorKyNkZWZpbmUgSU5MSU5FCisrI2VuZGlmCisrI2VuZGlmCisrCisrLyogRGVjbGFyaW5nIGEgdHlwZSB3aWRlIGVub3VnaCB0byBob2xkIGEgaG9zdCBsb25nIGFuZCBhIGhvc3QgcG9pbnRlci4gICovCisrI2RlZmluZSBCRkRfSE9TVFBUUl9UCUBCRkRfSE9TVFBUUl9UQAorK3R5cGVkZWYgQkZEX0hPU1RQVFJfVCBiZmRfaG9zdHB0cl90OworKworKy8qIEZvcndhcmQgZGVjbGFyYXRpb24uICAqLworK3R5cGVkZWYgc3RydWN0IGJmZCBiZmQ7CisrCisrLyogQm9vbGVhbiB0eXBlIHVzZWQgaW4gYmZkLiAgVG9vIG1hbnkgc3lzdGVtcyBkZWZpbmUgdGhlaXIgb3duCisrICAgdmVyc2lvbnMgb2YgImJvb2xlYW4iIGZvciB1cyB0byBzYWZlbHkgdHlwZWRlZiBhICJib29sZWFuIiBvZgorKyAgIG91ciBvd24uICBVc2luZyBhbiBlbnVtIGZvciAiYmZkX2Jvb2xlYW4iIGhhcyBpdHMgb3duIHNldCBvZgorKyAgIHByb2JsZW1zLCB3aXRoIHN0cmFuZ2UgbG9va2luZyBjYXN0cyByZXF1aXJlZCB0byBhdm9pZCB3YXJuaW5ncworKyAgIG9uIHNvbWUgb2xkZXIgY29tcGlsZXJzLiAgVGh1cyB3ZSBqdXN0IHVzZSBhbiBpbnQuCisrCisrICAgR2VuZXJhbCBydWxlOiBGdW5jdGlvbnMgd2hpY2ggYXJlIGJmZF9ib29sZWFuIHJldHVybiBUUlVFIG9uCisrICAgc3VjY2VzcyBhbmQgRkFMU0Ugb24gZmFpbHVyZSAodW5sZXNzIHRoZXkncmUgYSBwcmVkaWNhdGUpLiAgKi8KKysKKyt0eXBlZGVmIGludCBiZmRfYm9vbGVhbjsKKysjdW5kZWYgRkFMU0UKKysjdW5kZWYgVFJVRQorKyNkZWZpbmUgRkFMU0UgMAorKyNkZWZpbmUgVFJVRSAxCisrCisrI2lmZGVmIEJGRDY0CisrCisrI2lmbmRlZiBCRkRfSE9TVF82NF9CSVQKKysgI2Vycm9yIE5vIDY0IGJpdCBpbnRlZ2VyIHR5cGUgYXZhaWxhYmxlCisrI2VuZGlmIC8qICEgZGVmaW5lZCAoQkZEX0hPU1RfNjRfQklUKSAqLworKworK3R5cGVkZWYgQkZEX0hPU1RfVV82NF9CSVQgYmZkX3ZtYTsKKyt0eXBlZGVmIEJGRF9IT1NUXzY0X0JJVCBiZmRfc2lnbmVkX3ZtYTsKKyt0eXBlZGVmIEJGRF9IT1NUX1VfNjRfQklUIGJmZF9zaXplX3R5cGU7CisrdHlwZWRlZiBCRkRfSE9TVF9VXzY0X0JJVCBzeW12YWx1ZTsKKysKKysjaWZuZGVmIGZwcmludGZfdm1hCisrI2lmIEJGRF9IT1NUXzY0QklUX0xPTkcKKysjZGVmaW5lIHNwcmludGZfdm1hKHMseCkgc3ByaW50ZiAocywgIiUwMTZseCIsIHgpCisrI2RlZmluZSBmcHJpbnRmX3ZtYShmLHgpIGZwcmludGYgKGYsICIlMDE2bHgiLCB4KQorKyNlbGlmIEJGRF9IT1NUXzY0QklUX0xPTkdfTE9ORworKyNkZWZpbmUgc3ByaW50Zl92bWEocyx4KSBzcHJpbnRmIChzLCAiJTAxNmxseCIsIHgpCisrI2RlZmluZSBmcHJpbnRmX3ZtYShmLHgpIGZwcmludGYgKGYsICIlMDE2bGx4IiwgeCkKKysjZWxzZQorKyNkZWZpbmUgX2JmZF9pbnQ2NF9sb3coeCkgKCh1bnNpZ25lZCBsb25nKSAoKCh4KSAmIDB4ZmZmZmZmZmYpKSkKKysjZGVmaW5lIF9iZmRfaW50NjRfaGlnaCh4KSAoKHVuc2lnbmVkIGxvbmcpICgoKHgpID4+IDMyKSAmIDB4ZmZmZmZmZmYpKQorKyNkZWZpbmUgZnByaW50Zl92bWEocyx4KSBcCisrICBmcHJpbnRmICgocyksICIlMDhseCUwOGx4IiwgX2JmZF9pbnQ2NF9oaWdoICh4KSwgX2JmZF9pbnQ2NF9sb3cgKHgpKQorKyNkZWZpbmUgc3ByaW50Zl92bWEocyx4KSBcCisrICBzcHJpbnRmICgocyksICIlMDhseCUwOGx4IiwgX2JmZF9pbnQ2NF9oaWdoICh4KSwgX2JmZF9pbnQ2NF9sb3cgKHgpKQorKyNlbmRpZgorKyNlbmRpZgorKworKyNlbHNlIC8qIG5vdCBCRkQ2NCAgKi8KKysKKysvKiBSZXByZXNlbnQgYSB0YXJnZXQgYWRkcmVzcy4gIEFsc28gdXNlZCBhcyBhIGdlbmVyaWMgdW5zaWduZWQgdHlwZQorKyAgIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gYmUgYmlnIGVub3VnaCB0byBob2xkIGFueSBhcml0aG1ldGljIHR5cGVzCisrICAgd2UgbmVlZCB0byBkZWFsIHdpdGguICAqLworK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBiZmRfdm1hOworKworKy8qIEEgZ2VuZXJpYyBzaWduZWQgdHlwZSB3aGljaCBpcyBndWFyYW50ZWVkIHRvIGJlIGJpZyBlbm91Z2ggdG8gaG9sZCBhbnkKKysgICBhcml0aG1ldGljIHR5cGVzIHdlIG5lZWQgdG8gZGVhbCB3aXRoLiAgQ2FuIGJlIGFzc3VtZWQgdG8gYmUgY29tcGF0aWJsZQorKyAgIHdpdGggYmZkX3ZtYSBpbiB0aGUgc2FtZSB3YXkgdGhhdCBzaWduZWQgYW5kIHVuc2lnbmVkIGludHMgYXJlIGNvbXBhdGlibGUKKysgICAoYXMgcGFyYW1ldGVycywgaW4gYXNzaWdubWVudCwgZXRjKS4gICovCisrdHlwZWRlZiBsb25nIGJmZF9zaWduZWRfdm1hOworKworK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBzeW12YWx1ZTsKKyt0eXBlZGVmIHVuc2lnbmVkIGxvbmcgYmZkX3NpemVfdHlwZTsKKysKKysvKiBQcmludCBhIGJmZF92bWEgeCBvbiBzdHJlYW0gcy4gICovCisrI2RlZmluZSBmcHJpbnRmX3ZtYShzLHgpIGZwcmludGYgKHMsICIlMDhseCIsIHgpCisrI2RlZmluZSBzcHJpbnRmX3ZtYShzLHgpIHNwcmludGYgKHMsICIlMDhseCIsIHgpCisrCisrI2VuZGlmIC8qIG5vdCBCRkQ2NCAgKi8KKysKKysjZGVmaW5lIEhBTEZfQkZEX1NJWkVfVFlQRSBcCisrICAoKChiZmRfc2l6ZV90eXBlKSAxKSA8PCAoOCAqIHNpemVvZiAoYmZkX3NpemVfdHlwZSkgLyAyKSkKKysKKysjaWZuZGVmIEJGRF9IT1NUXzY0X0JJVAorKy8qIEZhbGwgYmFjayBvbiBhIDMyIGJpdCB0eXBlLiAgVGhlIGlkZWEgaXMgdG8gbWFrZSB0aGVzZSB0eXBlcyBhbHdheXMKKysgICBhdmFpbGFibGUgZm9yIGZ1bmN0aW9uIHJldHVybiB0eXBlcywgYnV0IGluIHRoZSBjYXNlIHRoYXQKKysgICBCRkRfSE9TVF82NF9CSVQgaXMgdW5kZWZpbmVkIHN1Y2ggYSBmdW5jdGlvbiBzaG91bGQgYWJvcnQgb3IKKysgICBvdGhlcndpc2Ugc2lnbmFsIGFuIGVycm9yLiAgKi8KKyt0eXBlZGVmIGJmZF9zaWduZWRfdm1hIGJmZF9pbnQ2NF90OworK3R5cGVkZWYgYmZkX3ZtYSBiZmRfdWludDY0X3Q7CisrI2VuZGlmCisrCisrLyogQW4gb2Zmc2V0IGludG8gYSBmaWxlLiAgQkZEIGFsd2F5cyB1c2VzIHRoZSBsYXJnZXN0IHBvc3NpYmxlIG9mZnNldAorKyAgIGJhc2VkIG9uIHRoZSBidWlsZCB0aW1lIGF2YWlsYWJpbGl0eSBvZiBmc2VlaywgZnNlZWtvLCBvciBmc2Vla282NC4gICovCisrdHlwZWRlZiBAYmZkX2ZpbGVfcHRyQCBmaWxlX3B0cjsKKyt0eXBlZGVmIHVuc2lnbmVkIEBiZmRfZmlsZV9wdHJAIHVmaWxlX3B0cjsKKysKKytleHRlcm4gdm9pZCBiZmRfc3ByaW50Zl92bWEgKGJmZCAqLCBjaGFyICosIGJmZF92bWEpOworK2V4dGVybiB2b2lkIGJmZF9mcHJpbnRmX3ZtYSAoYmZkICosIHZvaWQgKiwgYmZkX3ZtYSk7CisrCisrI2RlZmluZSBwcmludGZfdm1hKHgpIGZwcmludGZfdm1hKHN0ZG91dCx4KQorKyNkZWZpbmUgYmZkX3ByaW50Zl92bWEoYWJmZCx4KSBiZmRfZnByaW50Zl92bWEgKGFiZmQsc3Rkb3V0LHgpCisrCisrdHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxhZ3dvcmQ7CS8qIDMyIGJpdHMgb2YgZmxhZ3MgKi8KKyt0eXBlZGVmIHVuc2lnbmVkIGNoYXIgYmZkX2J5dGU7CisrDAorKy8qIEZpbGUgZm9ybWF0cy4gICovCisrCisrdHlwZWRlZiBlbnVtIGJmZF9mb3JtYXQKKyt7CisrICBiZmRfdW5rbm93biA9IDAsCS8qIEZpbGUgZm9ybWF0IGlzIHVua25vd24uICAqLworKyAgYmZkX29iamVjdCwJCS8qIExpbmtlci9hc3NlbWJsZXIvY29tcGlsZXIgb3V0cHV0LiAgKi8KKysgIGJmZF9hcmNoaXZlLAkJLyogT2JqZWN0IGFyY2hpdmUgZmlsZS4gICovCisrICBiZmRfY29yZSwJCS8qIENvcmUgZHVtcC4gICovCisrICBiZmRfdHlwZV9lbmQJCS8qIE1hcmtzIHRoZSBlbmQ7IGRvbid0IHVzZSBpdCEgICovCisrfQorK2JmZF9mb3JtYXQ7CisrCisrLyogVmFsdWVzIHRoYXQgbWF5IGFwcGVhciBpbiB0aGUgZmxhZ3MgZmllbGQgb2YgYSBCRkQuICBUaGVzZSBhbHNvCisrICAgYXBwZWFyIGluIHRoZSBvYmplY3RfZmxhZ3MgZmllbGQgb2YgdGhlIGJmZF90YXJnZXQgc3RydWN0dXJlLCB3aGVyZQorKyAgIHRoZXkgaW5kaWNhdGUgdGhlIHNldCBvZiBmbGFncyB1c2VkIGJ5IHRoYXQgYmFja2VuZCAobm90IGFsbCBmbGFncworKyAgIGFyZSBtZWFuaW5nZnVsIGZvciBhbGwgb2JqZWN0IGZpbGUgZm9ybWF0cykgKEZJWE1FOiBhdCB0aGUgbW9tZW50LAorKyAgIHRoZSBvYmplY3RfZmxhZ3MgdmFsdWVzIGhhdmUgbW9zdGx5IGp1c3QgYmVlbiBjb3BpZWQgZnJvbSBiYWNrZW5kCisrICAgdG8gYW5vdGhlciwgYW5kIGFyZSBub3QgbmVjZXNzYXJpbHkgY29ycmVjdCkuICAqLworKworKy8qIE5vIGZsYWdzLiAgKi8KKysjZGVmaW5lIEJGRF9OT19GTEFHUyAgIAkweDAwCisrCisrLyogQkZEIGNvbnRhaW5zIHJlbG9jYXRpb24gZW50cmllcy4gICovCisrI2RlZmluZSBIQVNfUkVMT0MgICAJMHgwMQorKworKy8qIEJGRCBpcyBkaXJlY3RseSBleGVjdXRhYmxlLiAgKi8KKysjZGVmaW5lIEVYRUNfUCAgICAgIAkweDAyCisrCisrLyogQkZEIGhhcyBsaW5lIG51bWJlciBpbmZvcm1hdGlvbiAoYmFzaWNhbGx5IHVzZWQgZm9yIEZfTE5OTyBpbiBhCisrICAgQ09GRiBoZWFkZXIpLiAgKi8KKysjZGVmaW5lIEhBU19MSU5FTk8gIAkweDA0CisrCisrLyogQkZEIGhhcyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICAqLworKyNkZWZpbmUgSEFTX0RFQlVHICAgCTB4MDgKKysKKysvKiBCRkQgaGFzIHN5bWJvbHMuICAqLworKyNkZWZpbmUgSEFTX1NZTVMgICAgCTB4MTAKKysKKysvKiBCRkQgaGFzIGxvY2FsIHN5bWJvbHMgKGJhc2ljYWxseSB1c2VkIGZvciBGX0xTWU1TIGluIGEgQ09GRgorKyAgIGhlYWRlcikuICAqLworKyNkZWZpbmUgSEFTX0xPQ0FMUyAgCTB4MjAKKysKKysvKiBCRkQgaXMgYSBkeW5hbWljIG9iamVjdC4gICovCisrI2RlZmluZSBEWU5BTUlDICAgICAJMHg0MAorKworKy8qIFRleHQgc2VjdGlvbiBpcyB3cml0ZSBwcm90ZWN0ZWQgKGlmIERfUEFHRUQgaXMgbm90IHNldCwgdGhpcyBpcworKyAgIGxpa2UgYW4gYS5vdXQgTk1BR0lDIGZpbGUpICh0aGUgbGlua2VyIHNldHMgdGhpcyBieSBkZWZhdWx0LCBidXQKKysgICBjbGVhcnMgaXQgZm9yIC1yIG9yIC1OKS4gICovCisrI2RlZmluZSBXUF9URVhUICAgICAJMHg4MAorKworKy8qIEJGRCBpcyBkeW5hbWljYWxseSBwYWdlZCAodGhpcyBpcyBsaWtlIGFuIGEub3V0IFpNQUdJQyBmaWxlKSAodGhlCisrICAgbGlua2VyIHNldHMgdGhpcyBieSBkZWZhdWx0LCBidXQgY2xlYXJzIGl0IGZvciAtciBvciAtbiBvciAtTikuICAqLworKyNkZWZpbmUgRF9QQUdFRCAgICAgCTB4MTAwCisrCisrLyogQkZEIGlzIHJlbGF4YWJsZSAodGhpcyBtZWFucyB0aGF0IGJmZF9yZWxheF9zZWN0aW9uIG1heSBiZSBhYmxlIHRvCisrICAgZG8gc29tZXRoaW5nKSAoc29tZXRpbWVzIGJmZF9yZWxheF9zZWN0aW9uIGNhbiBkbyBzb21ldGhpbmcgZXZlbiBpZgorKyAgIHRoaXMgaXMgbm90IHNldCkuICAqLworKyNkZWZpbmUgQkZEX0lTX1JFTEFYQUJMRSAweDIwMAorKworKy8qIFRoaXMgbWF5IGJlIHNldCBiZWZvcmUgd3JpdGluZyBvdXQgYSBCRkQgdG8gcmVxdWVzdCB1c2luZyBhCisrICAgdHJhZGl0aW9uYWwgZm9ybWF0LiAgRm9yIGV4YW1wbGUsIHRoaXMgaXMgdXNlZCB0byByZXF1ZXN0IHRoYXQgd2hlbgorKyAgIHdyaXRpbmcgb3V0IGFuIGEub3V0IG9iamVjdCB0aGUgc3ltYm9scyBub3QgYmUgaGFzaGVkIHRvIGVsaW1pbmF0ZQorKyAgIGR1cGxpY2F0ZXMuICAqLworKyNkZWZpbmUgQkZEX1RSQURJVElPTkFMX0ZPUk1BVCAweDQwMAorKworKy8qIFRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCB0aGUgQkZEIGNvbnRlbnRzIGFyZSBhY3R1YWxseSBjYWNoZWQgaW4KKysgICBtZW1vcnkuICBJZiB0aGlzIGlzIHNldCwgaW9zdHJlYW0gcG9pbnRzIHRvIGEgYmZkX2luX21lbW9yeSBzdHJ1Y3QuICAqLworKyNkZWZpbmUgQkZEX0lOX01FTU9SWSAweDgwMAorKworKy8qIFRoZSBzZWN0aW9ucyBpbiB0aGlzIEJGRCBzcGVjaWZ5IGEgbWVtb3J5IHBhZ2UuICAqLworKyNkZWZpbmUgSEFTX0xPQURfUEFHRSAweDEwMDAKKysKKysvKiBUaGlzIEJGRCBoYXMgYmVlbiBjcmVhdGVkIGJ5IHRoZSBsaW5rZXIgYW5kIGRvZXNuJ3QgY29ycmVzcG9uZAorKyAgIHRvIGFueSBpbnB1dCBmaWxlLiAgKi8KKysjZGVmaW5lIEJGRF9MSU5LRVJfQ1JFQVRFRCAweDIwMDAKKysMCisrLyogU3ltYm9scyBhbmQgcmVsb2NhdGlvbi4gICovCisrCisrLyogQSBjb3VudCBvZiBjYXJzeW1zIChjYW5vbmljYWwgYXJjaGl2ZSBzeW1ib2xzKS4gICovCisrdHlwZWRlZiB1bnNpZ25lZCBsb25nIHN5bWluZGV4OworKworKy8qIEhvdyB0byBwZXJmb3JtIGEgcmVsb2NhdGlvbi4gICovCisrdHlwZWRlZiBjb25zdCBzdHJ1Y3QgcmVsb2NfaG93dG9fc3RydWN0IHJlbG9jX2hvd3RvX3R5cGU7CisrCisrI2RlZmluZSBCRkRfTk9fTU9SRV9TWU1CT0xTICgoc3ltaW5kZXgpIH4wKQorKworKy8qIEdlbmVyYWwgcHVycG9zZSBwYXJ0IG9mIGEgc3ltYm9sIFg7CisrICAgdGFyZ2V0IHNwZWNpZmljIHBhcnRzIGFyZSBpbiBsaWJjb2ZmLmgsIGxpYmFvdXQuaCwgZXRjLiAgKi8KKysKKysjZGVmaW5lIGJmZF9nZXRfc2VjdGlvbih4KSAoKHgpLT5zZWN0aW9uKQorKyNkZWZpbmUgYmZkX2dldF9vdXRwdXRfc2VjdGlvbih4KSAoKHgpLT5zZWN0aW9uLT5vdXRwdXRfc2VjdGlvbikKKysjZGVmaW5lIGJmZF9zZXRfc2VjdGlvbih4LHkpICgoeCktPnNlY3Rpb24pID0gKHkpCisrI2RlZmluZSBiZmRfYXN5bWJvbF9iYXNlKHgpICgoeCktPnNlY3Rpb24tPnZtYSkKKysjZGVmaW5lIGJmZF9hc3ltYm9sX3ZhbHVlKHgpIChiZmRfYXN5bWJvbF9iYXNlKHgpICsgKHgpLT52YWx1ZSkKKysjZGVmaW5lIGJmZF9hc3ltYm9sX25hbWUoeCkgKCh4KS0+bmFtZSkKKysvKlBlcmhhcHMgZnV0dXJlOiAjZGVmaW5lIGJmZF9hc3ltYm9sX2JmZCh4KSAoKHgpLT5zZWN0aW9uLT5vd25lcikqLworKyNkZWZpbmUgYmZkX2FzeW1ib2xfYmZkKHgpICgoeCktPnRoZV9iZmQpCisrI2RlZmluZSBiZmRfYXN5bWJvbF9mbGF2b3VyKHgpIChiZmRfYXN5bWJvbF9iZmQoeCktPnh2ZWMtPmZsYXZvdXIpCisrCisrLyogQSBjYW5vbmljYWwgYXJjaGl2ZSBzeW1ib2wuICAqLworKy8qIFRoaXMgaXMgYSB0eXBlIHB1biB3aXRoIHN0cnVjdCByYW5saWIgb24gcHVycG9zZSEgICovCisrdHlwZWRlZiBzdHJ1Y3QgY2Fyc3ltCisreworKyAgY2hhciAqbmFtZTsKKysgIGZpbGVfcHRyIGZpbGVfb2Zmc2V0OwkvKiBMb29rIGhlcmUgdG8gZmluZCB0aGUgZmlsZS4gICovCisrfQorK2NhcnN5bTsJCQkvKiBUbyBtYWtlIHRoZXNlIHlvdSBjYWxsIGEgY2Fyc3ltb2dlbi4gICovCisrCisrLyogVXNlZCBpbiBnZW5lcmF0aW5nIGFybWFwcyAoYXJjaGl2ZSB0YWJsZXMgb2YgY29udGVudHMpLgorKyAgIFBlcmhhcHMganVzdCBhIGZvcndhcmQgZGVmaW5pdGlvbiB3b3VsZCBkbz8gICovCisrc3RydWN0IG9ybCAJCQkvKiBPdXRwdXQgcmFubGliLiAgKi8KKyt7CisrICBjaGFyICoqbmFtZTsJCS8qIFN5bWJvbCBuYW1lLiAgKi8KKysgIHVuaW9uCisrICB7CisrICAgIGZpbGVfcHRyIHBvczsKKysgICAgYmZkICphYmZkOworKyAgfSB1OwkJCS8qIGJmZCogb3IgZmlsZSBwb3NpdGlvbi4gICovCisrICBpbnQgbmFtaWR4OwkJLyogSW5kZXggaW50byBzdHJpbmcgdGFibGUuICAqLworK307CisrDAorKy8qIExpbmVudW1iZXIgc3R1ZmYuICAqLworK3R5cGVkZWYgc3RydWN0IGxpbmVub19jYWNoZV9lbnRyeQorK3sKKysgIHVuc2lnbmVkIGludCBsaW5lX251bWJlcjsJLyogTGluZW51bWJlciBmcm9tIHN0YXJ0IG9mIGZ1bmN0aW9uLiAgKi8KKysgIHVuaW9uCisrICB7CisrICAgIHN0cnVjdCBiZmRfc3ltYm9sICpzeW07CS8qIEZ1bmN0aW9uIG5hbWUuICAqLworKyAgICBiZmRfdm1hIG9mZnNldDsJICAgIAkJLyogT2Zmc2V0IGludG8gc2VjdGlvbi4gICovCisrICB9IHU7CisrfQorK2FsZW50OworKwwKKysvKiBPYmplY3QgYW5kIGNvcmUgZmlsZSBzZWN0aW9ucy4gICovCisrCisrI2RlZmluZQlhbGlnbl9wb3dlcihhZGRyLCBhbGlnbikJXAorKyAgKCgoYWRkcikgKyAoKGJmZF92bWEpIDEgPDwgKGFsaWduKSkgLSAxKSAmICgoYmZkX3ZtYSkgLTEgPDwgKGFsaWduKSkpCisrCisrdHlwZWRlZiBzdHJ1Y3QgYmZkX3NlY3Rpb24gKnNlY19wdHI7CisrCisrI2RlZmluZSBiZmRfZ2V0X3NlY3Rpb25fbmFtZShiZmQsIHB0cikgKChwdHIpLT5uYW1lICsgMCkKKysjZGVmaW5lIGJmZF9nZXRfc2VjdGlvbl92bWEoYmZkLCBwdHIpICgocHRyKS0+dm1hICsgMCkKKysjZGVmaW5lIGJmZF9nZXRfc2VjdGlvbl9sbWEoYmZkLCBwdHIpICgocHRyKS0+bG1hICsgMCkKKysjZGVmaW5lIGJmZF9nZXRfc2VjdGlvbl9hbGlnbm1lbnQoYmZkLCBwdHIpICgocHRyKS0+YWxpZ25tZW50X3Bvd2VyICsgMCkKKysjZGVmaW5lIGJmZF9zZWN0aW9uX25hbWUoYmZkLCBwdHIpICgocHRyKS0+bmFtZSkKKysjZGVmaW5lIGJmZF9zZWN0aW9uX3NpemUoYmZkLCBwdHIpICgocHRyKS0+c2l6ZSkKKysjZGVmaW5lIGJmZF9nZXRfc2VjdGlvbl9zaXplKHB0cikgKChwdHIpLT5zaXplKQorKyNkZWZpbmUgYmZkX3NlY3Rpb25fdm1hKGJmZCwgcHRyKSAoKHB0ciktPnZtYSkKKysjZGVmaW5lIGJmZF9zZWN0aW9uX2xtYShiZmQsIHB0cikgKChwdHIpLT5sbWEpCisrI2RlZmluZSBiZmRfc2VjdGlvbl9hbGlnbm1lbnQoYmZkLCBwdHIpICgocHRyKS0+YWxpZ25tZW50X3Bvd2VyKQorKyNkZWZpbmUgYmZkX2dldF9zZWN0aW9uX2ZsYWdzKGJmZCwgcHRyKSAoKHB0ciktPmZsYWdzICsgMCkKKysjZGVmaW5lIGJmZF9nZXRfc2VjdGlvbl91c2VyZGF0YShiZmQsIHB0cikgKChwdHIpLT51c2VyZGF0YSkKKysKKysjZGVmaW5lIGJmZF9pc19jb21fc2VjdGlvbihwdHIpICgoKHB0ciktPmZsYWdzICYgU0VDX0lTX0NPTU1PTikgIT0gMCkKKysKKysjZGVmaW5lIGJmZF9zZXRfc2VjdGlvbl92bWEoYmZkLCBwdHIsIHZhbCkgKCgocHRyKS0+dm1hID0gKHB0ciktPmxtYSA9ICh2YWwpKSwgKChwdHIpLT51c2VyX3NldF92bWEgPSBUUlVFKSwgVFJVRSkKKysjZGVmaW5lIGJmZF9zZXRfc2VjdGlvbl9hbGlnbm1lbnQoYmZkLCBwdHIsIHZhbCkgKCgocHRyKS0+YWxpZ25tZW50X3Bvd2VyID0gKHZhbCkpLFRSVUUpCisrI2RlZmluZSBiZmRfc2V0X3NlY3Rpb25fdXNlcmRhdGEoYmZkLCBwdHIsIHZhbCkgKCgocHRyKS0+dXNlcmRhdGEgPSAodmFsKSksVFJVRSkKKysvKiBGaW5kIHRoZSBhZGRyZXNzIG9uZSBwYXN0IHRoZSBlbmQgb2YgU0VDLiAgKi8KKysjZGVmaW5lIGJmZF9nZXRfc2VjdGlvbl9saW1pdChiZmQsIHNlYykgXAorKyAgKCgoc2VjKS0+cmF3c2l6ZSA/IChzZWMpLT5yYXdzaXplIDogKHNlYyktPnNpemUpIFwKKysgICAvIGJmZF9vY3RldHNfcGVyX2J5dGUgKGJmZCkpCisrCisrLyogUmV0dXJuIFRSVUUgaWYgc2VjdGlvbiBoYXMgYmVlbiBkaXNjYXJkZWQuICAqLworKyNkZWZpbmUgZWxmX2Rpc2NhcmRlZF9zZWN0aW9uKHNlYykJCQkJXAorKyAgKCFiZmRfaXNfYWJzX3NlY3Rpb24gKHNlYykJCQkJCVwKKysgICAmJiBiZmRfaXNfYWJzX3NlY3Rpb24gKChzZWMpLT5vdXRwdXRfc2VjdGlvbikJCVwKKysgICAmJiAoc2VjKS0+c2VjX2luZm9fdHlwZSAhPSBFTEZfSU5GT19UWVBFX01FUkdFCQlcCisrICAgJiYgKHNlYyktPnNlY19pbmZvX3R5cGUgIT0gRUxGX0lORk9fVFlQRV9KVVNUX1NZTVMpCisrCisrLyogRm9yd2FyZCBkZWZpbmUuICAqLworK3N0cnVjdCBzdGF0OworKwwKKyt0eXBlZGVmIGVudW0gYmZkX3ByaW50X3N5bWJvbAorK3sKKysgIGJmZF9wcmludF9zeW1ib2xfbmFtZSwKKysgIGJmZF9wcmludF9zeW1ib2xfbW9yZSwKKysgIGJmZF9wcmludF9zeW1ib2xfYWxsCisrfSBiZmRfcHJpbnRfc3ltYm9sX3R5cGU7CisrCisrLyogSW5mb3JtYXRpb24gYWJvdXQgYSBzeW1ib2wgdGhhdCBubSBuZWVkcy4gICovCisrCisrdHlwZWRlZiBzdHJ1Y3QgX3N5bWJvbF9pbmZvCisreworKyAgc3ltdmFsdWUgdmFsdWU7CisrICBjaGFyIHR5cGU7CisrICBjb25zdCBjaGFyICpuYW1lOyAgICAgICAgICAgIC8qIFN5bWJvbCBuYW1lLiAgKi8KKysgIHVuc2lnbmVkIGNoYXIgc3RhYl90eXBlOyAgICAgLyogU3RhYiB0eXBlLiAgKi8KKysgIGNoYXIgc3RhYl9vdGhlcjsgICAgICAgICAgICAgLyogU3RhYiBvdGhlci4gICovCisrICBzaG9ydCBzdGFiX2Rlc2M7ICAgICAgICAgICAgIC8qIFN0YWIgZGVzYy4gICovCisrICBjb25zdCBjaGFyICpzdGFiX25hbWU7ICAgICAgIC8qIFN0cmluZyBmb3Igc3RhYiB0eXBlLiAgKi8KKyt9IHN5bWJvbF9pbmZvOworKworKy8qIEdldCB0aGUgbmFtZSBvZiBhIHN0YWJzIHR5cGUgY29kZS4gICovCisrCisrZXh0ZXJuIGNvbnN0IGNoYXIgKmJmZF9nZXRfc3RhYl9uYW1lIChpbnQpOworKwwKKysvKiBIYXNoIHRhYmxlIHJvdXRpbmVzLiAgVGhlcmUgaXMgbm8gd2F5IHRvIGZyZWUgdXAgYSBoYXNoIHRhYmxlLiAgKi8KKysKKysvKiBBbiBlbGVtZW50IGluIHRoZSBoYXNoIHRhYmxlLiAgTW9zdCB1c2VzIHdpbGwgYWN0dWFsbHkgdXNlIGEgbGFyZ2VyCisrICAgc3RydWN0dXJlLCBhbmQgYW4gaW5zdGFuY2Ugb2YgdGhpcyB3aWxsIGJlIHRoZSBmaXJzdCBmaWVsZC4gICovCisrCisrc3RydWN0IGJmZF9oYXNoX2VudHJ5CisreworKyAgLyogTmV4dCBlbnRyeSBmb3IgdGhpcyBoYXNoIGNvZGUuICAqLworKyAgc3RydWN0IGJmZF9oYXNoX2VudHJ5ICpuZXh0OworKyAgLyogU3RyaW5nIGJlaW5nIGhhc2hlZC4gICovCisrICBjb25zdCBjaGFyICpzdHJpbmc7CisrICAvKiBIYXNoIGNvZGUuICBUaGlzIGlzIHRoZSBmdWxsIGhhc2ggY29kZSwgbm90IHRoZSBpbmRleCBpbnRvIHRoZQorKyAgICAgdGFibGUuICAqLworKyAgdW5zaWduZWQgbG9uZyBoYXNoOworK307CisrCisrLyogQSBoYXNoIHRhYmxlLiAgKi8KKysKKytzdHJ1Y3QgYmZkX2hhc2hfdGFibGUKKyt7CisrICAvKiBUaGUgaGFzaCBhcnJheS4gICovCisrICBzdHJ1Y3QgYmZkX2hhc2hfZW50cnkgKip0YWJsZTsKKysgIC8qIEEgZnVuY3Rpb24gdXNlZCB0byBjcmVhdGUgbmV3IGVsZW1lbnRzIGluIHRoZSBoYXNoIHRhYmxlLiAgVGhlCisrICAgICBmaXJzdCBlbnRyeSBpcyBpdHNlbGYgYSBwb2ludGVyIHRvIGFuIGVsZW1lbnQuICBXaGVuIHRoaXMKKysgICAgIGZ1bmN0aW9uIGlzIGZpcnN0IGludm9rZWQsIHRoaXMgcG9pbnRlciB3aWxsIGJlIE5VTEwuICBIb3dldmVyLAorKyAgICAgaGF2aW5nIHRoZSBwb2ludGVyIHBlcm1pdHMgYSBoaWVyYXJjaHkgb2YgbWV0aG9kIGZ1bmN0aW9ucyB0byBiZQorKyAgICAgYnVpbHQgZWFjaCBvZiB3aGljaCBjYWxscyB0aGUgZnVuY3Rpb24gaW4gdGhlIHN1cGVyY2xhc3MuICBUaHVzCisrICAgICBlYWNoIGZ1bmN0aW9uIHNob3VsZCBiZSB3cml0dGVuIHRvIGFsbG9jYXRlIGEgbmV3IGJsb2NrIG9mIG1lbW9yeQorKyAgICAgb25seSBpZiB0aGUgYXJndW1lbnQgaXMgTlVMTC4gICovCisrICBzdHJ1Y3QgYmZkX2hhc2hfZW50cnkgKigqbmV3ZnVuYykKKysgICAgKHN0cnVjdCBiZmRfaGFzaF9lbnRyeSAqLCBzdHJ1Y3QgYmZkX2hhc2hfdGFibGUgKiwgY29uc3QgY2hhciAqKTsKKysgICAvKiBBbiBvYmphbGxvYyBmb3IgdGhpcyBoYXNoIHRhYmxlLiAgVGhpcyBpcyBhIHN0cnVjdCBvYmphbGxvYyAqLAorKyAgICAgYnV0IHdlIHVzZSB2b2lkICogdG8gYXZvaWQgcmVxdWlyaW5nIHRoZSBpbmNsdXNpb24gb2Ygb2JqYWxsb2MuaC4gICovCisrICB2b2lkICptZW1vcnk7CisrICAvKiBUaGUgbnVtYmVyIG9mIHNsb3RzIGluIHRoZSBoYXNoIHRhYmxlLiAgKi8KKysgIHVuc2lnbmVkIGludCBzaXplOworKyAgLyogVGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBoYXNoIHRhYmxlLiAgKi8KKysgIHVuc2lnbmVkIGludCBjb3VudDsKKysgIC8qIFRoZSBzaXplIG9mIGVsZW1lbnRzLiAgKi8KKysgIHVuc2lnbmVkIGludCBlbnRzaXplOworKyAgLyogSWYgbm9uLXplcm8sIGRvbid0IGdyb3cgdGhlIGhhc2ggdGFibGUuICAqLworKyAgdW5zaWduZWQgaW50IGZyb3plbjoxOworK307CisrCisrLyogSW5pdGlhbGl6ZSBhIGhhc2ggdGFibGUuICAqLworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfaGFzaF90YWJsZV9pbml0CisrICAoc3RydWN0IGJmZF9oYXNoX3RhYmxlICosCisrICAgc3RydWN0IGJmZF9oYXNoX2VudHJ5ICooKikgKHN0cnVjdCBiZmRfaGFzaF9lbnRyeSAqLAorKwkJCSAgICAgICBzdHJ1Y3QgYmZkX2hhc2hfdGFibGUgKiwKKysJCQkgICAgICAgY29uc3QgY2hhciAqKSwKKysgICB1bnNpZ25lZCBpbnQpOworKworKy8qIEluaXRpYWxpemUgYSBoYXNoIHRhYmxlIHNwZWNpZnlpbmcgYSBzaXplLiAgKi8KKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2hhc2hfdGFibGVfaW5pdF9uCisrICAoc3RydWN0IGJmZF9oYXNoX3RhYmxlICosCisrICAgc3RydWN0IGJmZF9oYXNoX2VudHJ5ICooKikgKHN0cnVjdCBiZmRfaGFzaF9lbnRyeSAqLAorKwkJCSAgICAgICBzdHJ1Y3QgYmZkX2hhc2hfdGFibGUgKiwKKysJCQkgICAgICAgY29uc3QgY2hhciAqKSwKKysgICB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CisrCisrLyogRnJlZSB1cCBhIGhhc2ggdGFibGUuICAqLworK2V4dGVybiB2b2lkIGJmZF9oYXNoX3RhYmxlX2ZyZWUKKysgIChzdHJ1Y3QgYmZkX2hhc2hfdGFibGUgKik7CisrCisrLyogTG9vayB1cCBhIHN0cmluZyBpbiBhIGhhc2ggdGFibGUuICBJZiBDUkVBVEUgaXMgVFJVRSwgYSBuZXcgZW50cnkKKysgICB3aWxsIGJlIGNyZWF0ZWQgZm9yIHRoaXMgc3RyaW5nIGlmIG9uZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LiAgVGhlCisrICAgQ09QWSBhcmd1bWVudCBtdXN0IGJlIFRSVUUgaWYgdGhpcyByb3V0aW5lIHNob3VsZCBjb3B5IHRoZSBzdHJpbmcKKysgICBpbnRvIG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgd2hlbiBhZGRpbmcgYW4gZW50cnkuICAqLworK2V4dGVybiBzdHJ1Y3QgYmZkX2hhc2hfZW50cnkgKmJmZF9oYXNoX2xvb2t1cAorKyAgKHN0cnVjdCBiZmRfaGFzaF90YWJsZSAqLCBjb25zdCBjaGFyICosIGJmZF9ib29sZWFuIGNyZWF0ZSwKKysgICBiZmRfYm9vbGVhbiBjb3B5KTsKKysKKysvKiBSZXBsYWNlIGFuIGVudHJ5IGluIGEgaGFzaCB0YWJsZS4gICovCisrZXh0ZXJuIHZvaWQgYmZkX2hhc2hfcmVwbGFjZQorKyAgKHN0cnVjdCBiZmRfaGFzaF90YWJsZSAqLCBzdHJ1Y3QgYmZkX2hhc2hfZW50cnkgKm9sZCwKKysgICBzdHJ1Y3QgYmZkX2hhc2hfZW50cnkgKm53KTsKKysKKysvKiBCYXNlIG1ldGhvZCBmb3IgY3JlYXRpbmcgYSBoYXNoIHRhYmxlIGVudHJ5LiAgKi8KKytleHRlcm4gc3RydWN0IGJmZF9oYXNoX2VudHJ5ICpiZmRfaGFzaF9uZXdmdW5jCisrICAoc3RydWN0IGJmZF9oYXNoX2VudHJ5ICosIHN0cnVjdCBiZmRfaGFzaF90YWJsZSAqLCBjb25zdCBjaGFyICopOworKworKy8qIEdyYWIgc29tZSBzcGFjZSBmb3IgYSBoYXNoIHRhYmxlIGVudHJ5LiAgKi8KKytleHRlcm4gdm9pZCAqYmZkX2hhc2hfYWxsb2NhdGUKKysgIChzdHJ1Y3QgYmZkX2hhc2hfdGFibGUgKiwgdW5zaWduZWQgaW50KTsKKysKKysvKiBUcmF2ZXJzZSBhIGhhc2ggdGFibGUgaW4gYSByYW5kb20gb3JkZXIsIGNhbGxpbmcgYSBmdW5jdGlvbiBvbiBlYWNoCisrICAgZWxlbWVudC4gIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIEZBTFNFLCB0aGUgdHJhdmVyc2FsIHN0b3BzLiAgVGhlCisrICAgSU5GTyBhcmd1bWVudCBpcyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLiAgKi8KKytleHRlcm4gdm9pZCBiZmRfaGFzaF90cmF2ZXJzZQorKyAgKHN0cnVjdCBiZmRfaGFzaF90YWJsZSAqLAorKyAgIGJmZF9ib29sZWFuICgqKSAoc3RydWN0IGJmZF9oYXNoX2VudHJ5ICosIHZvaWQgKiksCisrICAgdm9pZCAqaW5mbyk7CisrCisrLyogQWxsb3dzIHRoZSBkZWZhdWx0IHNpemUgb2YgYSBoYXNoIHRhYmxlIHRvIGJlIGNvbmZpZ3VyZWQuIE5ldyBoYXNoCisrICAgdGFibGVzIGFsbG9jYXRlZCB1c2luZyBiZmRfaGFzaF90YWJsZV9pbml0IHdpbGwgYmUgY3JlYXRlZCB3aXRoCisrICAgdGhpcyBzaXplLiAgKi8KKytleHRlcm4gdm9pZCBiZmRfaGFzaF9zZXRfZGVmYXVsdF9zaXplIChiZmRfc2l6ZV90eXBlKTsKKysKKysvKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygc3RhYnMgaW4gc2VjdGlvbnMKKysgICBpbmZvcm1hdGlvbiB3aGlsZSBsaW5raW5nLiAgKi8KKysKKytzdHJ1Y3Qgc3RhYl9pbmZvCisreworKyAgLyogQSBoYXNoIHRhYmxlIHVzZWQgdG8gaG9sZCBzdGFicyBzdHJpbmdzLiAgKi8KKysgIHN0cnVjdCBiZmRfc3RydGFiX2hhc2ggKnN0cmluZ3M7CisrICAvKiBUaGUgaGVhZGVyIGZpbGUgaGFzaCB0YWJsZS4gICovCisrICBzdHJ1Y3QgYmZkX2hhc2hfdGFibGUgaW5jbHVkZXM7CisrICAvKiBUaGUgZmlyc3QgLnN0YWJzdHIgc2VjdGlvbi4gICovCisrICBzdHJ1Y3QgYmZkX3NlY3Rpb24gKnN0YWJzdHI7CisrfTsKKysKKysjZGVmaW5lIENPRkZfU1dBUF9UQUJMRSAodm9pZCAqKSAmYmZkX2NvZmZfc3RkX3N3YXBfdGFibGUKKysKKysvKiBVc2VyIHByb2dyYW0gYWNjZXNzIHRvIEJGRCBmYWNpbGl0aWVzLiAgKi8KKysKKysvKiBEaXJlY3QgSS9PIHJvdXRpbmVzLCBmb3IgcHJvZ3JhbXMgd2hpY2gga25vdyBtb3JlIGFib3V0IHRoZSBvYmplY3QKKysgICBmaWxlIHRoYW4gQkZEIGRvZXMuICBVc2UgaGlnaGVyIGxldmVsIHJvdXRpbmVzIGlmIHBvc3NpYmxlLiAgKi8KKysKKytleHRlcm4gYmZkX3NpemVfdHlwZSBiZmRfYnJlYWQgKHZvaWQgKiwgYmZkX3NpemVfdHlwZSwgYmZkICopOworK2V4dGVybiBiZmRfc2l6ZV90eXBlIGJmZF9id3JpdGUgKGNvbnN0IHZvaWQgKiwgYmZkX3NpemVfdHlwZSwgYmZkICopOworK2V4dGVybiBpbnQgYmZkX3NlZWsgKGJmZCAqLCBmaWxlX3B0ciwgaW50KTsKKytleHRlcm4gZmlsZV9wdHIgYmZkX3RlbGwgKGJmZCAqKTsKKytleHRlcm4gaW50IGJmZF9mbHVzaCAoYmZkICopOworK2V4dGVybiBpbnQgYmZkX3N0YXQgKGJmZCAqLCBzdHJ1Y3Qgc3RhdCAqKTsKKysKKysvKiBEZXByZWNhdGVkIG9sZCByb3V0aW5lcy4gICovCisrI2lmIF9fR05VQ19fCisrI2RlZmluZSBiZmRfcmVhZChCVUYsIEVMVFNJWkUsIE5JVEVNUywgQUJGRCkJCQkJXAorKyAgKHdhcm5fZGVwcmVjYXRlZCAoImJmZF9yZWFkIiwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pLAlcCisrICAgYmZkX2JyZWFkICgoQlVGKSwgKEVMVFNJWkUpICogKE5JVEVNUyksIChBQkZEKSkpCisrI2RlZmluZSBiZmRfd3JpdGUoQlVGLCBFTFRTSVpFLCBOSVRFTVMsIEFCRkQpCQkJCVwKKysgICh3YXJuX2RlcHJlY2F0ZWQgKCJiZmRfd3JpdGUiLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyksCVwKKysgICBiZmRfYndyaXRlICgoQlVGKSwgKEVMVFNJWkUpICogKE5JVEVNUyksIChBQkZEKSkpCisrI2Vsc2UKKysjZGVmaW5lIGJmZF9yZWFkKEJVRiwgRUxUU0laRSwgTklURU1TLCBBQkZEKQkJCQlcCisrICAod2Fybl9kZXByZWNhdGVkICgiYmZkX3JlYWQiLCAoY29uc3QgY2hhciAqKSAwLCAwLCAoY29uc3QgY2hhciAqKSAwKSwgXAorKyAgIGJmZF9icmVhZCAoKEJVRiksIChFTFRTSVpFKSAqIChOSVRFTVMpLCAoQUJGRCkpKQorKyNkZWZpbmUgYmZkX3dyaXRlKEJVRiwgRUxUU0laRSwgTklURU1TLCBBQkZEKQkJCQlcCisrICAod2Fybl9kZXByZWNhdGVkICgiYmZkX3dyaXRlIiwgKGNvbnN0IGNoYXIgKikgMCwgMCwgKGNvbnN0IGNoYXIgKikgMCksXAorKyAgIGJmZF9id3JpdGUgKChCVUYpLCAoRUxUU0laRSkgKiAoTklURU1TKSwgKEFCRkQpKSkKKysjZW5kaWYKKytleHRlcm4gdm9pZCB3YXJuX2RlcHJlY2F0ZWQgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKik7CisrCisrLyogQ2FzdCBmcm9tIGNvbnN0IGNoYXIgKiB0byBjaGFyICogc28gdGhhdCBjYWxsZXIgY2FuIGFzc2lnbiB0bworKyAgIGEgY2hhciAqIHdpdGhvdXQgYSB3YXJuaW5nLiAgKi8KKysjZGVmaW5lIGJmZF9nZXRfZmlsZW5hbWUoYWJmZCkgKChjaGFyICopIChhYmZkKS0+ZmlsZW5hbWUpCisrI2RlZmluZSBiZmRfZ2V0X2NhY2hlYWJsZShhYmZkKSAoKGFiZmQpLT5jYWNoZWFibGUpCisrI2RlZmluZSBiZmRfZ2V0X2Zvcm1hdChhYmZkKSAoKGFiZmQpLT5mb3JtYXQpCisrI2RlZmluZSBiZmRfZ2V0X3RhcmdldChhYmZkKSAoKGFiZmQpLT54dmVjLT5uYW1lKQorKyNkZWZpbmUgYmZkX2dldF9mbGF2b3VyKGFiZmQpICgoYWJmZCktPnh2ZWMtPmZsYXZvdXIpCisrI2RlZmluZSBiZmRfZmFtaWx5X2NvZmYoYWJmZCkgXAorKyAgKGJmZF9nZXRfZmxhdm91ciAoYWJmZCkgPT0gYmZkX3RhcmdldF9jb2ZmX2ZsYXZvdXIgfHwgXAorKyAgIGJmZF9nZXRfZmxhdm91ciAoYWJmZCkgPT0gYmZkX3RhcmdldF94Y29mZl9mbGF2b3VyKQorKyNkZWZpbmUgYmZkX2JpZ19lbmRpYW4oYWJmZCkgKChhYmZkKS0+eHZlYy0+Ynl0ZW9yZGVyID09IEJGRF9FTkRJQU5fQklHKQorKyNkZWZpbmUgYmZkX2xpdHRsZV9lbmRpYW4oYWJmZCkgKChhYmZkKS0+eHZlYy0+Ynl0ZW9yZGVyID09IEJGRF9FTkRJQU5fTElUVExFKQorKyNkZWZpbmUgYmZkX2hlYWRlcl9iaWdfZW5kaWFuKGFiZmQpIFwKKysgICgoYWJmZCktPnh2ZWMtPmhlYWRlcl9ieXRlb3JkZXIgPT0gQkZEX0VORElBTl9CSUcpCisrI2RlZmluZSBiZmRfaGVhZGVyX2xpdHRsZV9lbmRpYW4oYWJmZCkgXAorKyAgKChhYmZkKS0+eHZlYy0+aGVhZGVyX2J5dGVvcmRlciA9PSBCRkRfRU5ESUFOX0xJVFRMRSkKKysjZGVmaW5lIGJmZF9nZXRfZmlsZV9mbGFncyhhYmZkKSAoKGFiZmQpLT5mbGFncykKKysjZGVmaW5lIGJmZF9hcHBsaWNhYmxlX2ZpbGVfZmxhZ3MoYWJmZCkgKChhYmZkKS0+eHZlYy0+b2JqZWN0X2ZsYWdzKQorKyNkZWZpbmUgYmZkX2FwcGxpY2FibGVfc2VjdGlvbl9mbGFncyhhYmZkKSAoKGFiZmQpLT54dmVjLT5zZWN0aW9uX2ZsYWdzKQorKyNkZWZpbmUgYmZkX215X2FyY2hpdmUoYWJmZCkgKChhYmZkKS0+bXlfYXJjaGl2ZSkKKysjZGVmaW5lIGJmZF9oYXNfbWFwKGFiZmQpICgoYWJmZCktPmhhc19hcm1hcCkKKysKKysjZGVmaW5lIGJmZF92YWxpZF9yZWxvY190eXBlcyhhYmZkKSAoKGFiZmQpLT54dmVjLT52YWxpZF9yZWxvY190eXBlcykKKysjZGVmaW5lIGJmZF91c3JkYXRhKGFiZmQpICgoYWJmZCktPnVzcmRhdGEpCisrCisrI2RlZmluZSBiZmRfZ2V0X3N0YXJ0X2FkZHJlc3MoYWJmZCkgKChhYmZkKS0+c3RhcnRfYWRkcmVzcykKKysjZGVmaW5lIGJmZF9nZXRfc3ltY291bnQoYWJmZCkgKChhYmZkKS0+c3ltY291bnQpCisrI2RlZmluZSBiZmRfZ2V0X291dHN5bWJvbHMoYWJmZCkgKChhYmZkKS0+b3V0c3ltYm9scykKKysjZGVmaW5lIGJmZF9jb3VudF9zZWN0aW9ucyhhYmZkKSAoKGFiZmQpLT5zZWN0aW9uX2NvdW50KQorKworKyNkZWZpbmUgYmZkX2dldF9keW5hbWljX3N5bWNvdW50KGFiZmQpICgoYWJmZCktPmR5bnN5bWNvdW50KQorKworKyNkZWZpbmUgYmZkX2dldF9zeW1ib2xfbGVhZGluZ19jaGFyKGFiZmQpICgoYWJmZCktPnh2ZWMtPnN5bWJvbF9sZWFkaW5nX2NoYXIpCisrCisrI2RlZmluZSBiZmRfc2V0X2NhY2hlYWJsZShhYmZkLGJvb2wpICgoKGFiZmQpLT5jYWNoZWFibGUgPSBib29sKSwgVFJVRSkKKysKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2NhY2hlX2Nsb3NlCisrICAoYmZkICphYmZkKTsKKysvKiBOQjogVGhpcyBkZWNsYXJhdGlvbiBzaG91bGQgbWF0Y2ggdGhlIGF1dG9nZW5lcmF0ZWQgb25lIGluIGxpYmJmZC5oLiAgKi8KKysKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2NhY2hlX2Nsb3NlX2FsbCAodm9pZCk7CisrCisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF9yZWNvcmRfcGhkcgorKyAgKGJmZCAqLCB1bnNpZ25lZCBsb25nLCBiZmRfYm9vbGVhbiwgZmxhZ3dvcmQsIGJmZF9ib29sZWFuLCBiZmRfdm1hLAorKyAgIGJmZF9ib29sZWFuLCBiZmRfYm9vbGVhbiwgdW5zaWduZWQgaW50LCBzdHJ1Y3QgYmZkX3NlY3Rpb24gKiopOworKworKy8qIEJ5dGUgc3dhcHBpbmcgcm91dGluZXMuICAqLworKworK2JmZF91aW50NjRfdCBiZmRfZ2V0YjY0IChjb25zdCB2b2lkICopOworK2JmZF91aW50NjRfdCBiZmRfZ2V0bDY0IChjb25zdCB2b2lkICopOworK2JmZF9pbnQ2NF90IGJmZF9nZXRiX3NpZ25lZF82NCAoY29uc3Qgdm9pZCAqKTsKKytiZmRfaW50NjRfdCBiZmRfZ2V0bF9zaWduZWRfNjQgKGNvbnN0IHZvaWQgKik7CisrYmZkX3ZtYSBiZmRfZ2V0YjMyIChjb25zdCB2b2lkICopOworK2JmZF92bWEgYmZkX2dldGwzMiAoY29uc3Qgdm9pZCAqKTsKKytiZmRfc2lnbmVkX3ZtYSBiZmRfZ2V0Yl9zaWduZWRfMzIgKGNvbnN0IHZvaWQgKik7CisrYmZkX3NpZ25lZF92bWEgYmZkX2dldGxfc2lnbmVkXzMyIChjb25zdCB2b2lkICopOworK2JmZF92bWEgYmZkX2dldGIxNiAoY29uc3Qgdm9pZCAqKTsKKytiZmRfdm1hIGJmZF9nZXRsMTYgKGNvbnN0IHZvaWQgKik7CisrYmZkX3NpZ25lZF92bWEgYmZkX2dldGJfc2lnbmVkXzE2IChjb25zdCB2b2lkICopOworK2JmZF9zaWduZWRfdm1hIGJmZF9nZXRsX3NpZ25lZF8xNiAoY29uc3Qgdm9pZCAqKTsKKyt2b2lkIGJmZF9wdXRiNjQgKGJmZF91aW50NjRfdCwgdm9pZCAqKTsKKyt2b2lkIGJmZF9wdXRsNjQgKGJmZF91aW50NjRfdCwgdm9pZCAqKTsKKyt2b2lkIGJmZF9wdXRiMzIgKGJmZF92bWEsIHZvaWQgKik7Cisrdm9pZCBiZmRfcHV0bDMyIChiZmRfdm1hLCB2b2lkICopOworK3ZvaWQgYmZkX3B1dGIxNiAoYmZkX3ZtYSwgdm9pZCAqKTsKKyt2b2lkIGJmZF9wdXRsMTYgKGJmZF92bWEsIHZvaWQgKik7CisrCisrLyogQnl0ZSBzd2FwcGluZyByb3V0aW5lcyB3aGljaCB0YWtlIHNpemUgYW5kIGVuZGlhbm5lcyBhcyBhcmd1bWVudHMuICAqLworKworK2JmZF91aW50NjRfdCBiZmRfZ2V0X2JpdHMgKGNvbnN0IHZvaWQgKiwgaW50LCBiZmRfYm9vbGVhbik7Cisrdm9pZCBiZmRfcHV0X2JpdHMgKGJmZF91aW50NjRfdCwgdm9pZCAqLCBpbnQsIGJmZF9ib29sZWFuKTsKKysKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX3NlY3Rpb25fYWxyZWFkeV9saW5rZWRfdGFibGVfaW5pdCAodm9pZCk7CisrZXh0ZXJuIHZvaWQgYmZkX3NlY3Rpb25fYWxyZWFkeV9saW5rZWRfdGFibGVfZnJlZSAodm9pZCk7CisrDAorKy8qIEV4dGVybmFsbHkgdmlzaWJsZSBFQ09GRiByb3V0aW5lcy4gICovCisrCisrI2lmIGRlZmluZWQoX19TVERDX18pIHx8IGRlZmluZWQoQUxNT1NUX1NUREMpCisrc3RydWN0IGVjb2ZmX2RlYnVnX2luZm87Cisrc3RydWN0IGVjb2ZmX2RlYnVnX3N3YXA7Cisrc3RydWN0IGVjb2ZmX2V4dHI7Cisrc3RydWN0IGJmZF9zeW1ib2w7Cisrc3RydWN0IGJmZF9saW5rX2luZm87Cisrc3RydWN0IGJmZF9saW5rX2hhc2hfZW50cnk7Cisrc3RydWN0IGJmZF9lbGZfdmVyc2lvbl90cmVlOworKyNlbmRpZgorK2V4dGVybiBiZmRfdm1hIGJmZF9lY29mZl9nZXRfZ3BfdmFsdWUKKysgIChiZmQgKiBhYmZkKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2Vjb2ZmX3NldF9ncF92YWx1ZQorKyAgKGJmZCAqYWJmZCwgYmZkX3ZtYSBncF92YWx1ZSk7CisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF9lY29mZl9zZXRfcmVnbWFza3MKKysgIChiZmQgKmFiZmQsIHVuc2lnbmVkIGxvbmcgZ3BybWFzaywgdW5zaWduZWQgbG9uZyBmcHJtYXNrLAorKyAgIHVuc2lnbmVkIGxvbmcgKmNwcm1hc2spOworK2V4dGVybiB2b2lkICpiZmRfZWNvZmZfZGVidWdfaW5pdAorKyAgKGJmZCAqb3V0cHV0X2JmZCwgc3RydWN0IGVjb2ZmX2RlYnVnX2luZm8gKm91dHB1dF9kZWJ1ZywKKysgICBjb25zdCBzdHJ1Y3QgZWNvZmZfZGVidWdfc3dhcCAqb3V0cHV0X3N3YXAsIHN0cnVjdCBiZmRfbGlua19pbmZvICopOworK2V4dGVybiB2b2lkIGJmZF9lY29mZl9kZWJ1Z19mcmVlCisrICAodm9pZCAqaGFuZGxlLCBiZmQgKm91dHB1dF9iZmQsIHN0cnVjdCBlY29mZl9kZWJ1Z19pbmZvICpvdXRwdXRfZGVidWcsCisrICAgY29uc3Qgc3RydWN0IGVjb2ZmX2RlYnVnX3N3YXAgKm91dHB1dF9zd2FwLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2Vjb2ZmX2RlYnVnX2FjY3VtdWxhdGUKKysgICh2b2lkICpoYW5kbGUsIGJmZCAqb3V0cHV0X2JmZCwgc3RydWN0IGVjb2ZmX2RlYnVnX2luZm8gKm91dHB1dF9kZWJ1ZywKKysgICBjb25zdCBzdHJ1Y3QgZWNvZmZfZGVidWdfc3dhcCAqb3V0cHV0X3N3YXAsIGJmZCAqaW5wdXRfYmZkLAorKyAgIHN0cnVjdCBlY29mZl9kZWJ1Z19pbmZvICppbnB1dF9kZWJ1ZywKKysgICBjb25zdCBzdHJ1Y3QgZWNvZmZfZGVidWdfc3dhcCAqaW5wdXRfc3dhcCwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF9lY29mZl9kZWJ1Z19hY2N1bXVsYXRlX290aGVyCisrICAodm9pZCAqaGFuZGxlLCBiZmQgKm91dHB1dF9iZmQsIHN0cnVjdCBlY29mZl9kZWJ1Z19pbmZvICpvdXRwdXRfZGVidWcsCisrICAgY29uc3Qgc3RydWN0IGVjb2ZmX2RlYnVnX3N3YXAgKm91dHB1dF9zd2FwLCBiZmQgKmlucHV0X2JmZCwKKysgICBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2Vjb2ZmX2RlYnVnX2V4dGVybmFscworKyAgKGJmZCAqYWJmZCwgc3RydWN0IGVjb2ZmX2RlYnVnX2luZm8gKmRlYnVnLAorKyAgIGNvbnN0IHN0cnVjdCBlY29mZl9kZWJ1Z19zd2FwICpzd2FwLCBiZmRfYm9vbGVhbiByZWxvY2F0YWJsZSwKKysgICBiZmRfYm9vbGVhbiAoKmdldF9leHRyKSAoc3RydWN0IGJmZF9zeW1ib2wgKiwgc3RydWN0IGVjb2ZmX2V4dHIgKiksCisrICAgdm9pZCAoKnNldF9pbmRleCkgKHN0cnVjdCBiZmRfc3ltYm9sICosIGJmZF9zaXplX3R5cGUpKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2Vjb2ZmX2RlYnVnX29uZV9leHRlcm5hbAorKyAgKGJmZCAqYWJmZCwgc3RydWN0IGVjb2ZmX2RlYnVnX2luZm8gKmRlYnVnLAorKyAgIGNvbnN0IHN0cnVjdCBlY29mZl9kZWJ1Z19zd2FwICpzd2FwLCBjb25zdCBjaGFyICpuYW1lLAorKyAgIHN0cnVjdCBlY29mZl9leHRyICplc3ltKTsKKytleHRlcm4gYmZkX3NpemVfdHlwZSBiZmRfZWNvZmZfZGVidWdfc2l6ZQorKyAgKGJmZCAqYWJmZCwgc3RydWN0IGVjb2ZmX2RlYnVnX2luZm8gKmRlYnVnLAorKyAgIGNvbnN0IHN0cnVjdCBlY29mZl9kZWJ1Z19zd2FwICpzd2FwKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2Vjb2ZmX3dyaXRlX2RlYnVnCisrICAoYmZkICphYmZkLCBzdHJ1Y3QgZWNvZmZfZGVidWdfaW5mbyAqZGVidWcsCisrICAgY29uc3Qgc3RydWN0IGVjb2ZmX2RlYnVnX3N3YXAgKnN3YXAsIGZpbGVfcHRyIHdoZXJlKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2Vjb2ZmX3dyaXRlX2FjY3VtdWxhdGVkX2RlYnVnCisrICAodm9pZCAqaGFuZGxlLCBiZmQgKmFiZmQsIHN0cnVjdCBlY29mZl9kZWJ1Z19pbmZvICpkZWJ1ZywKKysgICBjb25zdCBzdHJ1Y3QgZWNvZmZfZGVidWdfc3dhcCAqc3dhcCwKKysgICBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqaW5mbywgZmlsZV9wdHIgd2hlcmUpOworKworKy8qIEV4dGVybmFsbHkgdmlzaWJsZSBFTEYgcm91dGluZXMuICAqLworKworK3N0cnVjdCBiZmRfbGlua19uZWVkZWRfbGlzdAorK3sKKysgIHN0cnVjdCBiZmRfbGlua19uZWVkZWRfbGlzdCAqbmV4dDsKKysgIGJmZCAqYnk7CisrICBjb25zdCBjaGFyICpuYW1lOworK307CisrCisrZW51bSBkeW5hbWljX2xpYl9saW5rX2NsYXNzIHsKKysgIERZTl9OT1JNQUwgPSAwLAorKyAgRFlOX0FTX05FRURFRCA9IDEsCisrICBEWU5fRFRfTkVFREVEID0gMiwKKysgIERZTl9OT19BRERfTkVFREVEID0gNCwKKysgIERZTl9OT19ORUVERUQgPSA4CisrfTsKKysKKytlbnVtIG5vdGljZV9hc25lZWRlZF9hY3Rpb24geworKyAgbm90aWNlX2FzX25lZWRlZCwKKysgIG5vdGljZV9ub3RfbmVlZGVkLAorKyAgbm90aWNlX25lZWRlZAorK307CisrCisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF9lbGZfcmVjb3JkX2xpbmtfYXNzaWdubWVudAorKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBjb25zdCBjaGFyICosIGJmZF9ib29sZWFuLAorKyAgIGJmZF9ib29sZWFuKTsKKytleHRlcm4gc3RydWN0IGJmZF9saW5rX25lZWRlZF9saXN0ICpiZmRfZWxmX2dldF9uZWVkZWRfbGlzdAorKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2VsZl9nZXRfYmZkX25lZWRlZF9saXN0CisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19uZWVkZWRfbGlzdCAqKik7CisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF9lbGZfc2l6ZV9keW5hbWljX3NlY3Rpb25zCisrICAoYmZkICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiBjb25zdCAqLAorKyAgIHN0cnVjdCBiZmRfbGlua19pbmZvICosIHN0cnVjdCBiZmRfc2VjdGlvbiAqKiwKKysgICBzdHJ1Y3QgYmZkX2VsZl92ZXJzaW9uX3RyZWUgKik7CisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF9lbGZfc2l6ZV9keW5zeW1faGFzaF9keW5zdHIKKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrZXh0ZXJuIHZvaWQgYmZkX2VsZl9zZXRfZHRfbmVlZGVkX25hbWUKKysgIChiZmQgKiwgY29uc3QgY2hhciAqKTsKKytleHRlcm4gY29uc3QgY2hhciAqYmZkX2VsZl9nZXRfZHRfc29uYW1lCisrICAoYmZkICopOworK2V4dGVybiB2b2lkIGJmZF9lbGZfc2V0X2R5bl9saWJfY2xhc3MKKysgIChiZmQgKiwgZW51bSBkeW5hbWljX2xpYl9saW5rX2NsYXNzKTsKKytleHRlcm4gaW50IGJmZF9lbGZfZ2V0X2R5bl9saWJfY2xhc3MKKysgIChiZmQgKik7CisrZXh0ZXJuIHN0cnVjdCBiZmRfbGlua19uZWVkZWRfbGlzdCAqYmZkX2VsZl9nZXRfcnVucGF0aF9saXN0CisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfZWxmX2Rpc2NhcmRfaW5mbworKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKytleHRlcm4gdW5zaWduZWQgaW50IF9iZmRfZWxmX2RlZmF1bHRfYWN0aW9uX2Rpc2NhcmRlZAorKyAgKHN0cnVjdCBiZmRfc2VjdGlvbiAqKTsKKysKKysvKiBSZXR1cm4gYW4gdXBwZXIgYm91bmQgb24gdGhlIG51bWJlciBvZiBieXRlcyByZXF1aXJlZCB0byBzdG9yZSBhCisrICAgY29weSBvZiBBQkZEJ3MgcHJvZ3JhbSBoZWFkZXIgdGFibGUgZW50cmllcy4gIFJldHVybiAtMSBpZiBhbiBlcnJvcgorKyAgIG9jY3VyczsgYmZkX2dldF9lcnJvciB3aWxsIHJldHVybiBhbiBhcHByb3ByaWF0ZSBjb2RlLiAgKi8KKytleHRlcm4gbG9uZyBiZmRfZ2V0X2VsZl9waGRyX3VwcGVyX2JvdW5kCisrICAoYmZkICphYmZkKTsKKysKKysvKiBDb3B5IEFCRkQncyBwcm9ncmFtIGhlYWRlciB0YWJsZSBlbnRyaWVzIHRvICpQSERSUy4gIFRoZSBlbnRyaWVzCisrICAgd2lsbCBiZSBzdG9yZWQgYXMgYW4gYXJyYXkgb2YgRWxmX0ludGVybmFsX1BoZHIgc3RydWN0dXJlcywgYXMKKysgICBkZWZpbmVkIGluIGluY2x1ZGUvZWxmL2ludGVybmFsLmguICBUbyBmaW5kIG91dCBob3cgbGFyZ2UgdGhlCisrICAgYnVmZmVyIG5lZWRzIHRvIGJlLCBjYWxsIGJmZF9nZXRfZWxmX3BoZHJfdXBwZXJfYm91bmQuCisrCisrICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgcHJvZ3JhbSBoZWFkZXIgdGFibGUgZW50cmllcyByZWFkLCBvciAtMSBpZiBhbgorKyAgIGVycm9yIG9jY3VyczsgYmZkX2dldF9lcnJvciB3aWxsIHJldHVybiBhbiBhcHByb3ByaWF0ZSBjb2RlLiAgKi8KKytleHRlcm4gaW50IGJmZF9nZXRfZWxmX3BoZHJzCisrICAoYmZkICphYmZkLCB2b2lkICpwaGRycyk7CisrCisrLyogQ3JlYXRlIGEgbmV3IEJGRCBhcyBpZiBieSBiZmRfb3BlbnIuICBSYXRoZXIgdGhhbiBvcGVuaW5nIGEgZmlsZSwKKysgICByZWNvbnN0cnVjdCBhbiBFTEYgZmlsZSBieSByZWFkaW5nIHRoZSBzZWdtZW50cyBvdXQgb2YgcmVtb3RlIG1lbW9yeQorKyAgIGJhc2VkIG9uIHRoZSBFTEYgZmlsZSBoZWFkZXIgYXQgRUhEUl9WTUEgYW5kIHRoZSBFTEYgcHJvZ3JhbSBoZWFkZXJzIGl0CisrICAgcG9pbnRzIHRvLiAgSWYgbm90IG51bGwsICpMT0FEQkFTRVAgaXMgZmlsbGVkIGluIHdpdGggdGhlIGRpZmZlcmVuY2UKKysgICBiZXR3ZWVuIHRoZSBWTUFzIGZyb20gd2hpY2ggdGhlIHNlZ21lbnRzIHdlcmUgcmVhZCwgYW5kIHRoZSBWTUFzIHRoZQorKyAgIGZpbGUgaGVhZGVycyAoYW5kIGhlbmNlIEJGRCdzIGlkZWEgb2YgZWFjaCBzZWN0aW9uJ3MgVk1BKSBwdXQgdGhlbSBhdC4KKysKKysgICBUaGUgZnVuY3Rpb24gVEFSR0VUX1JFQURfTUVNT1JZIGlzIGNhbGxlZCB0byBjb3B5IExFTiBieXRlcyBmcm9tIHRoZQorKyAgIHJlbW90ZSBtZW1vcnkgYXQgdGFyZ2V0IGFkZHJlc3MgVk1BIGludG8gdGhlIGxvY2FsIGJ1ZmZlciBhdCBNWUFERFI7IGl0CisrICAgc2hvdWxkIHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYW4gYGVycm5vJyBjb2RlIG9uIGZhaWx1cmUuICBURU1QTCBtdXN0CisrICAgYmUgYSBCRkQgZm9yIGFuIEVMRiB0YXJnZXQgd2l0aCB0aGUgd29yZCBzaXplIGFuZCBieXRlIG9yZGVyIGZvdW5kIGluCisrICAgdGhlIHJlbW90ZSBtZW1vcnkuICAqLworK2V4dGVybiBiZmQgKmJmZF9lbGZfYmZkX2Zyb21fcmVtb3RlX21lbW9yeQorKyAgKGJmZCAqdGVtcGwsIGJmZF92bWEgZWhkcl92bWEsIGJmZF92bWEgKmxvYWRiYXNlcCwKKysgICBpbnQgKCp0YXJnZXRfcmVhZF9tZW1vcnkpIChiZmRfdm1hIHZtYSwgYmZkX2J5dGUgKm15YWRkciwgaW50IGxlbikpOworKworKy8qIFJldHVybiB0aGUgYXJjaF9zaXplIGZpZWxkIG9mIGFuIGVsZiBiZmQsIG9yIC0xIGlmIG5vdCBlbGYuICAqLworK2V4dGVybiBpbnQgYmZkX2dldF9hcmNoX3NpemUKKysgIChiZmQgKik7CisrCisrLyogUmV0dXJuIFRSVUUgaWYgYWRkcmVzcyAibmF0dXJhbGx5IiBzaWduIGV4dGVuZHMsIG9yIC0xIGlmIG5vdCBlbGYuICAqLworK2V4dGVybiBpbnQgYmZkX2dldF9zaWduX2V4dGVuZF92bWEKKysgIChiZmQgKik7CisrCisrZXh0ZXJuIHN0cnVjdCBiZmRfc2VjdGlvbiAqX2JmZF9lbGZfdGxzX3NldHVwCisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOworKworK2V4dGVybiB2b2lkIF9iZmRfZml4X2V4Y2x1ZGVkX3NlY19zeW1zCisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOworKworK2V4dGVybiB1bnNpZ25lZCBiZmRfbTY4a19tYWNoX3RvX2ZlYXR1cmVzIChpbnQpOworKworK2V4dGVybiBpbnQgYmZkX202OGtfZmVhdHVyZXNfdG9fbWFjaCAodW5zaWduZWQpOworKworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfbTY4a19lbGYzMl9jcmVhdGVfZW1iZWRkZWRfcmVsb2NzCisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIHN0cnVjdCBiZmRfc2VjdGlvbiAqLCBzdHJ1Y3QgYmZkX3NlY3Rpb24gKiwKKysgICBjaGFyICoqKTsKKysKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2JmaW5fZWxmMzJfY3JlYXRlX2VtYmVkZGVkX3JlbG9jcworKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBzdHJ1Y3QgYmZkX3NlY3Rpb24gKiwgc3RydWN0IGJmZF9zZWN0aW9uICosCisrICAgY2hhciAqKik7CisrCisrLyogU3VuT1Mgc2hhcmVkIGxpYnJhcnkgc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlIGxpbmtlci4gICovCisrCisrZXh0ZXJuIHN0cnVjdCBiZmRfbGlua19uZWVkZWRfbGlzdCAqYmZkX3N1bm9zX2dldF9uZWVkZWRfbGlzdAorKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX3N1bm9zX3JlY29yZF9saW5rX2Fzc2lnbm1lbnQKKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKiwgY29uc3QgY2hhciAqKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX3N1bm9zX3NpemVfZHluYW1pY19zZWN0aW9ucworKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBzdHJ1Y3QgYmZkX3NlY3Rpb24gKiosCisrICAgc3RydWN0IGJmZF9zZWN0aW9uICoqLCBzdHJ1Y3QgYmZkX3NlY3Rpb24gKiopOworKworKy8qIExpbnV4IHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSBsaW5rZXIuICAqLworKworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfaTM4NmxpbnV4X3NpemVfZHluYW1pY19zZWN0aW9ucworKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX202OGtsaW51eF9zaXplX2R5bmFtaWNfc2VjdGlvbnMKKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF9zcGFyY2xpbnV4X3NpemVfZHluYW1pY19zZWN0aW9ucworKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKysKKysvKiBtbWFwIGhhY2tzICovCisrCisrc3RydWN0IF9iZmRfd2luZG93X2ludGVybmFsOworK3R5cGVkZWYgc3RydWN0IF9iZmRfd2luZG93X2ludGVybmFsIGJmZF93aW5kb3dfaW50ZXJuYWw7CisrCisrdHlwZWRlZiBzdHJ1Y3QgX2JmZF93aW5kb3cKKyt7CisrICAvKiBXaGF0IHRoZSB1c2VyIGFza2VkIGZvci4gICovCisrICB2b2lkICpkYXRhOworKyAgYmZkX3NpemVfdHlwZSBzaXplOworKyAgLyogVGhlIGFjdHVhbCB3aW5kb3cgdXNlZCBieSBCRkQuICBTbWFsbCB1c2VyLXJlcXVlc3RlZCByZWFkLW9ubHkKKysgICAgIHJlZ2lvbnMgc2hhcmluZyBhIHBhZ2UgbWF5IHNoYXJlIGEgc2luZ2xlIHdpbmRvdyBpbnRvIHRoZSBvYmplY3QKKysgICAgIGZpbGUuICBSZWFkLXdyaXRlIHZlcnNpb25zIHNob3VsZG4ndCB1bnRpbCBJJ3ZlIGZpeGVkIHRoaW5ncyB0bworKyAgICAga2VlcCB0cmFjayBvZiB3aGljaCBwb3J0aW9ucyBoYXZlIGJlZW4gY2xhaW1lZCBieSB0aGUKKysgICAgIGFwcGxpY2F0aW9uOyBkb24ndCB3YW50IHRvIGdpdmUgdGhlIHNhbWUgcmVnaW9uIGJhY2sgd2hlbiB0aGUKKysgICAgIGFwcGxpY2F0aW9uIHdhbnRzIHR3byB3cml0YWJsZSBjb3BpZXMhICAqLworKyAgc3RydWN0IF9iZmRfd2luZG93X2ludGVybmFsICppOworK30KKytiZmRfd2luZG93OworKworK2V4dGVybiB2b2lkIGJmZF9pbml0X3dpbmRvdworKyAgKGJmZF93aW5kb3cgKik7CisrZXh0ZXJuIHZvaWQgYmZkX2ZyZWVfd2luZG93CisrICAoYmZkX3dpbmRvdyAqKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2dldF9maWxlX3dpbmRvdworKyAgKGJmZCAqLCBmaWxlX3B0ciwgYmZkX3NpemVfdHlwZSwgYmZkX3dpbmRvdyAqLCBiZmRfYm9vbGVhbik7CisrCisrLyogWENPRkYgc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlIGxpbmtlci4gICovCisrCisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF94Y29mZl9saW5rX3JlY29yZF9zZXQKKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKiwgc3RydWN0IGJmZF9saW5rX2hhc2hfZW50cnkgKiwgYmZkX3NpemVfdHlwZSk7CisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF94Y29mZl9pbXBvcnRfc3ltYm9sCisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIHN0cnVjdCBiZmRfbGlua19oYXNoX2VudHJ5ICosIGJmZF92bWEsCisrICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50KTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX3hjb2ZmX2V4cG9ydF9zeW1ib2wKKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKiwgc3RydWN0IGJmZF9saW5rX2hhc2hfZW50cnkgKik7CisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF94Y29mZl9saW5rX2NvdW50X3JlbG9jCisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIGNvbnN0IGNoYXIgKik7CisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF94Y29mZl9yZWNvcmRfbGlua19hc3NpZ25tZW50CisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIGNvbnN0IGNoYXIgKik7CisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF94Y29mZl9zaXplX2R5bmFtaWNfc2VjdGlvbnMKKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCisrICAgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgYmZkX2Jvb2xlYW4sCisrICAgaW50LCBiZmRfYm9vbGVhbiwgYmZkX2Jvb2xlYW4sIHN0cnVjdCBiZmRfc2VjdGlvbiAqKiwgYmZkX2Jvb2xlYW4pOworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfeGNvZmZfbGlua19nZW5lcmF0ZV9ydGluaXQKKysgIChiZmQgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGJmZF9ib29sZWFuKTsKKysKKysvKiBYQ09GRiBzdXBwb3J0IHJvdXRpbmVzIGZvciBhci4gICovCisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF94Y29mZl9hcl9hcmNoaXZlX3NldF9tYWdpYworKyAgKGJmZCAqLCBjaGFyICopOworKworKy8qIEV4dGVybmFsbHkgdmlzaWJsZSBDT0ZGIHJvdXRpbmVzLiAgKi8KKysKKysjaWYgZGVmaW5lZChfX1NURENfXykgfHwgZGVmaW5lZChBTE1PU1RfU1REQykKKytzdHJ1Y3QgaW50ZXJuYWxfc3ltZW50OworK3VuaW9uIGludGVybmFsX2F1eGVudDsKKysjZW5kaWYKKysKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2NvZmZfZ2V0X3N5bWVudAorKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX3N5bWJvbCAqLCBzdHJ1Y3QgaW50ZXJuYWxfc3ltZW50ICopOworKworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfY29mZl9nZXRfYXV4ZW50CisrICAoYmZkICosIHN0cnVjdCBiZmRfc3ltYm9sICosIGludCwgdW5pb24gaW50ZXJuYWxfYXV4ZW50ICopOworKworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfY29mZl9zZXRfc3ltYm9sX2NsYXNzCisrICAoYmZkICosIHN0cnVjdCBiZmRfc3ltYm9sICosIHVuc2lnbmVkIGludCk7CisrCisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF9tNjhrX2NvZmZfY3JlYXRlX2VtYmVkZGVkX3JlbG9jcworKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBzdHJ1Y3QgYmZkX3NlY3Rpb24gKiwgc3RydWN0IGJmZF9zZWN0aW9uICosIGNoYXIgKiopOworKworKy8qIEFSTSBWRlAxMSBlcnJhdHVtIHdvcmthcm91bmQgc3VwcG9ydC4gICovCisrdHlwZWRlZiBlbnVtCisreworKyAgQkZEX0FSTV9WRlAxMV9GSVhfREVGQVVMVCwKKysgIEJGRF9BUk1fVkZQMTFfRklYX05PTkUsCisrICBCRkRfQVJNX1ZGUDExX0ZJWF9TQ0FMQVIsCisrICBCRkRfQVJNX1ZGUDExX0ZJWF9WRUNUT1IKKyt9IGJmZF9hcm1fdmZwMTFfZml4OworKworK2V4dGVybiB2b2lkIGJmZF9lbGYzMl9hcm1faW5pdF9tYXBzCisrICAoYmZkICopOworKworK2V4dGVybiB2b2lkIGJmZF9lbGYzMl9hcm1fc2V0X3ZmcDExX2ZpeAorKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKysKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2VsZjMyX2FybV92ZnAxMV9lcnJhdHVtX3NjYW4KKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrCisrZXh0ZXJuIHZvaWQgYmZkX2VsZjMyX2FybV92ZnAxMV9maXhfdmVuZWVyX2xvY2F0aW9ucworKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKysKKysvKiBBUk0gSW50ZXJ3b3JraW5nIHN1cHBvcnQuICBDYWxsZWQgZnJvbSBsaW5rZXIuICAqLworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfYXJtX2FsbG9jYXRlX2ludGVyd29ya2luZ19zZWN0aW9ucworKyAgKHN0cnVjdCBiZmRfbGlua19pbmZvICopOworKworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfYXJtX3Byb2Nlc3NfYmVmb3JlX2FsbG9jYXRpb24KKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKiwgaW50KTsKKysKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2FybV9nZXRfYmZkX2Zvcl9pbnRlcndvcmtpbmcKKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrCisrLyogUEUgQVJNIEludGVyd29ya2luZyBzdXBwb3J0LiAgQ2FsbGVkIGZyb20gbGlua2VyLiAgKi8KKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2FybV9wZV9hbGxvY2F0ZV9pbnRlcndvcmtpbmdfc2VjdGlvbnMKKysgIChzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKysKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2FybV9wZV9wcm9jZXNzX2JlZm9yZV9hbGxvY2F0aW9uCisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIGludCk7CisrCisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF9hcm1fcGVfZ2V0X2JmZF9mb3JfaW50ZXJ3b3JraW5nCisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOworKworKy8qIEVMRiBBUk0gSW50ZXJ3b3JraW5nIHN1cHBvcnQuICBDYWxsZWQgZnJvbSBsaW5rZXIuICAqLworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfZWxmMzJfYXJtX2FsbG9jYXRlX2ludGVyd29ya2luZ19zZWN0aW9ucworKyAgKHN0cnVjdCBiZmRfbGlua19pbmZvICopOworKworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfZWxmMzJfYXJtX3Byb2Nlc3NfYmVmb3JlX2FsbG9jYXRpb24KKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrCisrdm9pZCBiZmRfZWxmMzJfYXJtX3NldF90YXJnZXRfcmVsb2NzCisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIGludCwgY2hhciAqLCBpbnQsIGludCwgYmZkX2FybV92ZnAxMV9maXgsCisrICAgaW50LCBpbnQpOworKworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfZWxmMzJfYXJtX2dldF9iZmRfZm9yX2ludGVyd29ya2luZworKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKysKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2VsZjMyX2FybV9hZGRfZ2x1ZV9zZWN0aW9uc190b19iZmQKKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrCisrLyogRUxGIEFSTSBtYXBwaW5nIHN5bWJvbCBzdXBwb3J0ICovCisrI2RlZmluZSBCRkRfQVJNX1NQRUNJQUxfU1lNX1RZUEVfTUFQCSgxIDw8IDApCisrI2RlZmluZSBCRkRfQVJNX1NQRUNJQUxfU1lNX1RZUEVfVEFHCSgxIDw8IDEpCisrI2RlZmluZSBCRkRfQVJNX1NQRUNJQUxfU1lNX1RZUEVfT1RIRVIgICgxIDw8IDIpCisrI2RlZmluZSBCRkRfQVJNX1NQRUNJQUxfU1lNX1RZUEVfQU5ZCSh+MCkKKytleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2lzX2FybV9zcGVjaWFsX3N5bWJvbF9uYW1lCisrICAoY29uc3QgY2hhciAqIG5hbWUsIGludCB0eXBlKTsKKysKKytleHRlcm4gdm9pZCBiZmRfZWxmMzJfYXJtX3NldF9ieXRlc3dhcF9jb2RlIChzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBpbnQpOworKworKy8qIEFSTSBOb3RlIHNlY3Rpb24gcHJvY2Vzc2luZy4gICovCisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF9hcm1fbWVyZ2VfbWFjaGluZXMKKysgIChiZmQgKiwgYmZkICopOworKworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfYXJtX3VwZGF0ZV9ub3RlcworKyAgKGJmZCAqLCBjb25zdCBjaGFyICopOworKworK2V4dGVybiB1bnNpZ25lZCBpbnQgYmZkX2FybV9nZXRfbWFjaF9mcm9tX25vdGVzCisrICAoYmZkICosIGNvbnN0IGNoYXIgKik7CisrCisrLyogVEkgQ09GRiBsb2FkIHBhZ2Ugc3VwcG9ydC4gICovCisrZXh0ZXJuIHZvaWQgYmZkX3RpY29mZl9zZXRfc2VjdGlvbl9sb2FkX3BhZ2UKKysgIChzdHJ1Y3QgYmZkX3NlY3Rpb24gKiwgaW50KTsKKysKKytleHRlcm4gaW50IGJmZF90aWNvZmZfZ2V0X3NlY3Rpb25fbG9hZF9wYWdlCisrICAoc3RydWN0IGJmZF9zZWN0aW9uICopOworKworKy8qIEg4LzMwMCBmdW5jdGlvbnMuICAqLworK2V4dGVybiBiZmRfdm1hIGJmZF9oODMwMF9wYWRfYWRkcmVzcworKyAgKGJmZCAqLCBiZmRfdm1hKTsKKysKKysvKiBJQTY0IEl0YW5pdW0gY29kZSBnZW5lcmF0aW9uLiAgQ2FsbGVkIGZyb20gbGlua2VyLiAgKi8KKytleHRlcm4gdm9pZCBiZmRfZWxmMzJfaWE2NF9hZnRlcl9wYXJzZQorKyAgKGludCk7CisrCisrZXh0ZXJuIHZvaWQgYmZkX2VsZjY0X2lhNjRfYWZ0ZXJfcGFyc2UKKysgIChpbnQpOworKworKy8qIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgZm9yIGEgY29tZGF0IHNlY3Rpb24sIGFzIGluIFBFLiAgQSBjb21kYXQKKysgICBzZWN0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgc3ltYm9sLiAgV2hlbiB0aGUgbGlua2VyCisrICAgc2VlcyBhIGNvbWRhdCBzZWN0aW9uLCBpdCBrZWVwcyBvbmx5IG9uZSBvZiB0aGUgc2VjdGlvbnMgd2l0aCBhCisrICAgZ2l2ZW4gbmFtZSBhbmQgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gc3ltYm9sLiAgKi8KKysKKytzdHJ1Y3QgY29mZl9jb21kYXRfaW5mbworK3sKKysgIC8qIFRoZSBuYW1lIG9mIHRoZSBzeW1ib2wgYXNzb2NpYXRlZCB3aXRoIGEgY29tZGF0IHNlY3Rpb24uICAqLworKyAgY29uc3QgY2hhciAqbmFtZTsKKysKKysgIC8qIFRoZSBsb2NhbCBzeW1ib2wgdGFibGUgaW5kZXggb2YgdGhlIHN5bWJvbCBhc3NvY2lhdGVkIHdpdGggYQorKyAgICAgY29tZGF0IHNlY3Rpb24uICBUaGlzIGlzIG9ubHkgbWVhbmluZ2Z1bCB0byB0aGUgb2JqZWN0IGZpbGUgZm9ybWF0CisrICAgICBzcGVjaWZpYyBjb2RlOyBpdCBpcyBub3QgYW4gaW5kZXggaW50byB0aGUgbGlzdCByZXR1cm5lZCBieQorKyAgICAgYmZkX2Nhbm9uaWNhbGl6ZV9zeW10YWIuICAqLworKyAgbG9uZyBzeW1ib2w7CisrfTsKKysKKytleHRlcm4gc3RydWN0IGNvZmZfY29tZGF0X2luZm8gKmJmZF9jb2ZmX2dldF9jb21kYXRfc2VjdGlvbgorKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX3NlY3Rpb24gKik7CisrCisrLyogRXh0cmFjdGVkIGZyb20gaW5pdC5jLiAgKi8KKyt2b2lkIGJmZF9pbml0ICh2b2lkKTsKKysKKysvKiBFeHRyYWN0ZWQgZnJvbSBvcG5jbHMuYy4gICovCisrYmZkICpiZmRfZm9wZW4gKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICp0YXJnZXQsCisrICAgIGNvbnN0IGNoYXIgKm1vZGUsIGludCBmZCk7CisrCisrYmZkICpiZmRfb3BlbnIgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICp0YXJnZXQpOworKworK2JmZCAqYmZkX2Zkb3BlbnIgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICp0YXJnZXQsIGludCBmZCk7CisrCisrYmZkICpiZmRfb3BlbnN0cmVhbXIgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB2b2lkICopOworKworK2JmZCAqYmZkX29wZW5yX2lvdmVjIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqdGFyZ2V0LAorKyAgICB2b2lkICooKm9wZW4pIChzdHJ1Y3QgYmZkICpuYmZkLAorKyAgICB2b2lkICpvcGVuX2Nsb3N1cmUpLAorKyAgICB2b2lkICpvcGVuX2Nsb3N1cmUsCisrICAgIGZpbGVfcHRyICgqcHJlYWQpIChzdHJ1Y3QgYmZkICpuYmZkLAorKyAgICB2b2lkICpzdHJlYW0sCisrICAgIHZvaWQgKmJ1ZiwKKysgICAgZmlsZV9wdHIgbmJ5dGVzLAorKyAgICBmaWxlX3B0ciBvZmZzZXQpLAorKyAgICBpbnQgKCpjbG9zZSkgKHN0cnVjdCBiZmQgKm5iZmQsCisrICAgIHZvaWQgKnN0cmVhbSksCisrICAgIGludCAoKnN0YXQpIChzdHJ1Y3QgYmZkICphYmZkLAorKyAgICB2b2lkICpzdHJlYW0sCisrICAgIHN0cnVjdCBzdGF0ICpzYikpOworKworK2JmZCAqYmZkX29wZW53IChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqdGFyZ2V0KTsKKysKKytiZmRfYm9vbGVhbiBiZmRfY2xvc2UgKGJmZCAqYWJmZCk7CisrCisrYmZkX2Jvb2xlYW4gYmZkX2Nsb3NlX2FsbF9kb25lIChiZmQgKik7CisrCisrYmZkICpiZmRfY3JlYXRlIChjb25zdCBjaGFyICpmaWxlbmFtZSwgYmZkICp0ZW1wbCk7CisrCisrYmZkX2Jvb2xlYW4gYmZkX21ha2Vfd3JpdGFibGUgKGJmZCAqYWJmZCk7CisrCisrYmZkX2Jvb2xlYW4gYmZkX21ha2VfcmVhZGFibGUgKGJmZCAqYWJmZCk7CisrCisrdW5zaWduZWQgbG9uZyBiZmRfY2FsY19nbnVfZGVidWdsaW5rX2NyYzMyCisrICAgKHVuc2lnbmVkIGxvbmcgY3JjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGJmZF9zaXplX3R5cGUgbGVuKTsKKysKKytjaGFyICpiZmRfZm9sbG93X2dudV9kZWJ1Z2xpbmsgKGJmZCAqYWJmZCwgY29uc3QgY2hhciAqZGlyKTsKKysKKytzdHJ1Y3QgYmZkX3NlY3Rpb24gKmJmZF9jcmVhdGVfZ251X2RlYnVnbGlua19zZWN0aW9uCisrICAgKGJmZCAqYWJmZCwgY29uc3QgY2hhciAqZmlsZW5hbWUpOworKworK2JmZF9ib29sZWFuIGJmZF9maWxsX2luX2dudV9kZWJ1Z2xpbmtfc2VjdGlvbgorKyAgIChiZmQgKmFiZmQsIHN0cnVjdCBiZmRfc2VjdGlvbiAqc2VjdCwgY29uc3QgY2hhciAqZmlsZW5hbWUpOworKworKy8qIEV4dHJhY3RlZCBmcm9tIGxpYmJmZC5jLiAgKi8KKysKKysvKiBCeXRlIHN3YXBwaW5nIG1hY3JvcyBmb3IgdXNlciBzZWN0aW9uIGRhdGEuICAqLworKworKyNkZWZpbmUgYmZkX3B1dF84KGFiZmQsIHZhbCwgcHRyKSBcCisrICAoKHZvaWQpICgqKCh1bnNpZ25lZCBjaGFyICopIChwdHIpKSA9ICh2YWwpICYgMHhmZikpCisrI2RlZmluZSBiZmRfcHV0X3NpZ25lZF84IFwKKysgIGJmZF9wdXRfOAorKyNkZWZpbmUgYmZkX2dldF84KGFiZmQsIHB0cikgXAorKyAgKCoodW5zaWduZWQgY2hhciAqKSAocHRyKSAmIDB4ZmYpCisrI2RlZmluZSBiZmRfZ2V0X3NpZ25lZF84KGFiZmQsIHB0cikgXAorKyAgKCgoKih1bnNpZ25lZCBjaGFyICopIChwdHIpICYgMHhmZikgXiAweDgwKSAtIDB4ODApCisrCisrI2RlZmluZSBiZmRfcHV0XzE2KGFiZmQsIHZhbCwgcHRyKSBcCisrICBCRkRfU0VORCAoYWJmZCwgYmZkX3B1dHgxNiwgKCh2YWwpLChwdHIpKSkKKysjZGVmaW5lIGJmZF9wdXRfc2lnbmVkXzE2IFwKKysgIGJmZF9wdXRfMTYKKysjZGVmaW5lIGJmZF9nZXRfMTYoYWJmZCwgcHRyKSBcCisrICBCRkRfU0VORCAoYWJmZCwgYmZkX2dldHgxNiwgKHB0cikpCisrI2RlZmluZSBiZmRfZ2V0X3NpZ25lZF8xNihhYmZkLCBwdHIpIFwKKysgIEJGRF9TRU5EIChhYmZkLCBiZmRfZ2V0eF9zaWduZWRfMTYsIChwdHIpKQorKworKyNkZWZpbmUgYmZkX3B1dF8zMihhYmZkLCB2YWwsIHB0cikgXAorKyAgQkZEX1NFTkQgKGFiZmQsIGJmZF9wdXR4MzIsICgodmFsKSwocHRyKSkpCisrI2RlZmluZSBiZmRfcHV0X3NpZ25lZF8zMiBcCisrICBiZmRfcHV0XzMyCisrI2RlZmluZSBiZmRfZ2V0XzMyKGFiZmQsIHB0cikgXAorKyAgQkZEX1NFTkQgKGFiZmQsIGJmZF9nZXR4MzIsIChwdHIpKQorKyNkZWZpbmUgYmZkX2dldF9zaWduZWRfMzIoYWJmZCwgcHRyKSBcCisrICBCRkRfU0VORCAoYWJmZCwgYmZkX2dldHhfc2lnbmVkXzMyLCAocHRyKSkKKysKKysjZGVmaW5lIGJmZF9wdXRfNjQoYWJmZCwgdmFsLCBwdHIpIFwKKysgIEJGRF9TRU5EIChhYmZkLCBiZmRfcHV0eDY0LCAoKHZhbCksIChwdHIpKSkKKysjZGVmaW5lIGJmZF9wdXRfc2lnbmVkXzY0IFwKKysgIGJmZF9wdXRfNjQKKysjZGVmaW5lIGJmZF9nZXRfNjQoYWJmZCwgcHRyKSBcCisrICBCRkRfU0VORCAoYWJmZCwgYmZkX2dldHg2NCwgKHB0cikpCisrI2RlZmluZSBiZmRfZ2V0X3NpZ25lZF82NChhYmZkLCBwdHIpIFwKKysgIEJGRF9TRU5EIChhYmZkLCBiZmRfZ2V0eF9zaWduZWRfNjQsIChwdHIpKQorKworKyNkZWZpbmUgYmZkX2dldChiaXRzLCBhYmZkLCBwdHIpICAgICAgICAgICAgICAgICAgICAgICBcCisrICAoKGJpdHMpID09IDggPyAoYmZkX3ZtYSkgYmZkX2dldF84IChhYmZkLCBwdHIpICAgICAgIFwKKysgICA6IChiaXRzKSA9PSAxNiA/IGJmZF9nZXRfMTYgKGFiZmQsIHB0cikgICAgICAgICAgICAgXAorKyAgIDogKGJpdHMpID09IDMyID8gYmZkX2dldF8zMiAoYWJmZCwgcHRyKSAgICAgICAgICAgICBcCisrICAgOiAoYml0cykgPT0gNjQgPyBiZmRfZ2V0XzY0IChhYmZkLCBwdHIpICAgICAgICAgICAgIFwKKysgICA6IChhYm9ydCAoKSwgKGJmZF92bWEpIC0gMSkpCisrCisrI2RlZmluZSBiZmRfcHV0KGJpdHMsIGFiZmQsIHZhbCwgcHRyKSAgICAgICAgICAgICAgICAgIFwKKysgICgoYml0cykgPT0gOCA/IGJmZF9wdXRfOCAgKGFiZmQsIHZhbCwgcHRyKSAgICAgICAgICAgXAorKyAgIDogKGJpdHMpID09IDE2ID8gYmZkX3B1dF8xNiAoYWJmZCwgdmFsLCBwdHIpICAgICAgICAgICAgICAgIFwKKysgICA6IChiaXRzKSA9PSAzMiA/IGJmZF9wdXRfMzIgKGFiZmQsIHZhbCwgcHRyKSAgICAgICAgICAgICAgICBcCisrICAgOiAoYml0cykgPT0gNjQgPyBiZmRfcHV0XzY0IChhYmZkLCB2YWwsIHB0cikgICAgICAgICAgICAgICAgXAorKyAgIDogKGFib3J0ICgpLCAodm9pZCkgMCkpCisrCisrCisrLyogQnl0ZSBzd2FwcGluZyBtYWNyb3MgZm9yIGZpbGUgaGVhZGVyIGRhdGEuICAqLworKworKyNkZWZpbmUgYmZkX2hfcHV0XzgoYWJmZCwgdmFsLCBwdHIpIFwKKysgIGJmZF9wdXRfOCAoYWJmZCwgdmFsLCBwdHIpCisrI2RlZmluZSBiZmRfaF9wdXRfc2lnbmVkXzgoYWJmZCwgdmFsLCBwdHIpIFwKKysgIGJmZF9wdXRfOCAoYWJmZCwgdmFsLCBwdHIpCisrI2RlZmluZSBiZmRfaF9nZXRfOChhYmZkLCBwdHIpIFwKKysgIGJmZF9nZXRfOCAoYWJmZCwgcHRyKQorKyNkZWZpbmUgYmZkX2hfZ2V0X3NpZ25lZF84KGFiZmQsIHB0cikgXAorKyAgYmZkX2dldF9zaWduZWRfOCAoYWJmZCwgcHRyKQorKworKyNkZWZpbmUgYmZkX2hfcHV0XzE2KGFiZmQsIHZhbCwgcHRyKSBcCisrICBCRkRfU0VORCAoYWJmZCwgYmZkX2hfcHV0eDE2LCAodmFsLCBwdHIpKQorKyNkZWZpbmUgYmZkX2hfcHV0X3NpZ25lZF8xNiBcCisrICBiZmRfaF9wdXRfMTYKKysjZGVmaW5lIGJmZF9oX2dldF8xNihhYmZkLCBwdHIpIFwKKysgIEJGRF9TRU5EIChhYmZkLCBiZmRfaF9nZXR4MTYsIChwdHIpKQorKyNkZWZpbmUgYmZkX2hfZ2V0X3NpZ25lZF8xNihhYmZkLCBwdHIpIFwKKysgIEJGRF9TRU5EIChhYmZkLCBiZmRfaF9nZXR4X3NpZ25lZF8xNiwgKHB0cikpCisrCisrI2RlZmluZSBiZmRfaF9wdXRfMzIoYWJmZCwgdmFsLCBwdHIpIFwKKysgIEJGRF9TRU5EIChhYmZkLCBiZmRfaF9wdXR4MzIsICh2YWwsIHB0cikpCisrI2RlZmluZSBiZmRfaF9wdXRfc2lnbmVkXzMyIFwKKysgIGJmZF9oX3B1dF8zMgorKyNkZWZpbmUgYmZkX2hfZ2V0XzMyKGFiZmQsIHB0cikgXAorKyAgQkZEX1NFTkQgKGFiZmQsIGJmZF9oX2dldHgzMiwgKHB0cikpCisrI2RlZmluZSBiZmRfaF9nZXRfc2lnbmVkXzMyKGFiZmQsIHB0cikgXAorKyAgQkZEX1NFTkQgKGFiZmQsIGJmZF9oX2dldHhfc2lnbmVkXzMyLCAocHRyKSkKKysKKysjZGVmaW5lIGJmZF9oX3B1dF82NChhYmZkLCB2YWwsIHB0cikgXAorKyAgQkZEX1NFTkQgKGFiZmQsIGJmZF9oX3B1dHg2NCwgKHZhbCwgcHRyKSkKKysjZGVmaW5lIGJmZF9oX3B1dF9zaWduZWRfNjQgXAorKyAgYmZkX2hfcHV0XzY0CisrI2RlZmluZSBiZmRfaF9nZXRfNjQoYWJmZCwgcHRyKSBcCisrICBCRkRfU0VORCAoYWJmZCwgYmZkX2hfZ2V0eDY0LCAocHRyKSkKKysjZGVmaW5lIGJmZF9oX2dldF9zaWduZWRfNjQoYWJmZCwgcHRyKSBcCisrICBCRkRfU0VORCAoYWJmZCwgYmZkX2hfZ2V0eF9zaWduZWRfNjQsIChwdHIpKQorKworKy8qIEFsaWFzZXMgZm9yIHRoZSBhYm92ZSwgd2hpY2ggc2hvdWxkIGV2ZW50dWFsbHkgZ28gYXdheS4gICovCisrCisrI2RlZmluZSBIX1BVVF82NCAgYmZkX2hfcHV0XzY0CisrI2RlZmluZSBIX1BVVF8zMiAgYmZkX2hfcHV0XzMyCisrI2RlZmluZSBIX1BVVF8xNiAgYmZkX2hfcHV0XzE2CisrI2RlZmluZSBIX1BVVF84ICAgYmZkX2hfcHV0XzgKKysjZGVmaW5lIEhfUFVUX1M2NCBiZmRfaF9wdXRfc2lnbmVkXzY0CisrI2RlZmluZSBIX1BVVF9TMzIgYmZkX2hfcHV0X3NpZ25lZF8zMgorKyNkZWZpbmUgSF9QVVRfUzE2IGJmZF9oX3B1dF9zaWduZWRfMTYKKysjZGVmaW5lIEhfUFVUX1M4ICBiZmRfaF9wdXRfc2lnbmVkXzgKKysjZGVmaW5lIEhfR0VUXzY0ICBiZmRfaF9nZXRfNjQKKysjZGVmaW5lIEhfR0VUXzMyICBiZmRfaF9nZXRfMzIKKysjZGVmaW5lIEhfR0VUXzE2ICBiZmRfaF9nZXRfMTYKKysjZGVmaW5lIEhfR0VUXzggICBiZmRfaF9nZXRfOAorKyNkZWZpbmUgSF9HRVRfUzY0IGJmZF9oX2dldF9zaWduZWRfNjQKKysjZGVmaW5lIEhfR0VUX1MzMiBiZmRfaF9nZXRfc2lnbmVkXzMyCisrI2RlZmluZSBIX0dFVF9TMTYgYmZkX2hfZ2V0X3NpZ25lZF8xNgorKyNkZWZpbmUgSF9HRVRfUzggIGJmZF9oX2dldF9zaWduZWRfOAorKworKworKy8qIEV4dHJhY3RlZCBmcm9tIGJmZGlvLmMuICAqLworK2xvbmcgYmZkX2dldF9tdGltZSAoYmZkICphYmZkKTsKKysKKytmaWxlX3B0ciBiZmRfZ2V0X3NpemUgKGJmZCAqYWJmZCk7CisrCisrLyogRXh0cmFjdGVkIGZyb20gYmZkd2luLmMuICAqLworKy8qIEV4dHJhY3RlZCBmcm9tIHNlY3Rpb24uYy4gICovCisrdHlwZWRlZiBzdHJ1Y3QgYmZkX3NlY3Rpb24KKyt7CisrICAvKiBUaGUgbmFtZSBvZiB0aGUgc2VjdGlvbjsgdGhlIG5hbWUgaXNuJ3QgYSBjb3B5LCB0aGUgcG9pbnRlciBpcworKyAgICAgdGhlIHNhbWUgYXMgdGhhdCBwYXNzZWQgdG8gYmZkX21ha2Vfc2VjdGlvbi4gICovCisrICBjb25zdCBjaGFyICpuYW1lOworKworKyAgLyogQSB1bmlxdWUgc2VxdWVuY2UgbnVtYmVyLiAgKi8KKysgIGludCBpZDsKKysKKysgIC8qIFdoaWNoIHNlY3Rpb24gaW4gdGhlIGJmZDsgMC4ubi0xIGFzIHNlY3Rpb25zIGFyZSBjcmVhdGVkIGluIGEgYmZkLiAgKi8KKysgIGludCBpbmRleDsKKysKKysgIC8qIFRoZSBuZXh0IHNlY3Rpb24gaW4gdGhlIGxpc3QgYmVsb25naW5nIHRvIHRoZSBCRkQsIG9yIE5VTEwuICAqLworKyAgc3RydWN0IGJmZF9zZWN0aW9uICpuZXh0OworKworKyAgLyogVGhlIHByZXZpb3VzIHNlY3Rpb24gaW4gdGhlIGxpc3QgYmVsb25naW5nIHRvIHRoZSBCRkQsIG9yIE5VTEwuICAqLworKyAgc3RydWN0IGJmZF9zZWN0aW9uICpwcmV2OworKworKyAgLyogVGhlIGZpZWxkIGZsYWdzIGNvbnRhaW5zIGF0dHJpYnV0ZXMgb2YgdGhlIHNlY3Rpb24uIFNvbWUKKysgICAgIGZsYWdzIGFyZSByZWFkIGluIGZyb20gdGhlIG9iamVjdCBmaWxlLCBhbmQgc29tZSBhcmUKKysgICAgIHN5bnRoZXNpemVkIGZyb20gb3RoZXIgaW5mb3JtYXRpb24uICAqLworKyAgZmxhZ3dvcmQgZmxhZ3M7CisrCisrI2RlZmluZSBTRUNfTk9fRkxBR1MgICAweDAwMAorKworKyAgLyogVGVsbHMgdGhlIE9TIHRvIGFsbG9jYXRlIHNwYWNlIGZvciB0aGlzIHNlY3Rpb24gd2hlbiBsb2FkaW5nLgorKyAgICAgVGhpcyBpcyBjbGVhciBmb3IgYSBzZWN0aW9uIGNvbnRhaW5pbmcgZGVidWcgaW5mb3JtYXRpb24gb25seS4gICovCisrI2RlZmluZSBTRUNfQUxMT0MgICAgICAweDAwMQorKworKyAgLyogVGVsbHMgdGhlIE9TIHRvIGxvYWQgdGhlIHNlY3Rpb24gZnJvbSB0aGUgZmlsZSB3aGVuIGxvYWRpbmcuCisrICAgICBUaGlzIGlzIGNsZWFyIGZvciBhIC5ic3Mgc2VjdGlvbi4gICovCisrI2RlZmluZSBTRUNfTE9BRCAgICAgICAweDAwMgorKworKyAgLyogVGhlIHNlY3Rpb24gY29udGFpbnMgZGF0YSBzdGlsbCB0byBiZSByZWxvY2F0ZWQsIHNvIHRoZXJlIGlzCisrICAgICBzb21lIHJlbG9jYXRpb24gaW5mb3JtYXRpb24gdG9vLiAgKi8KKysjZGVmaW5lIFNFQ19SRUxPQyAgICAgIDB4MDA0CisrCisrICAvKiBBIHNpZ25hbCB0byB0aGUgT1MgdGhhdCB0aGUgc2VjdGlvbiBjb250YWlucyByZWFkIG9ubHkgZGF0YS4gICovCisrI2RlZmluZSBTRUNfUkVBRE9OTFkgICAweDAwOAorKworKyAgLyogVGhlIHNlY3Rpb24gY29udGFpbnMgY29kZSBvbmx5LiAgKi8KKysjZGVmaW5lIFNFQ19DT0RFICAgICAgIDB4MDEwCisrCisrICAvKiBUaGUgc2VjdGlvbiBjb250YWlucyBkYXRhIG9ubHkuICAqLworKyNkZWZpbmUgU0VDX0RBVEEgICAgICAgMHgwMjAKKysKKysgIC8qIFRoZSBzZWN0aW9uIHdpbGwgcmVzaWRlIGluIFJPTS4gICovCisrI2RlZmluZSBTRUNfUk9NICAgICAgICAweDA0MAorKworKyAgLyogVGhlIHNlY3Rpb24gY29udGFpbnMgY29uc3RydWN0b3IgaW5mb3JtYXRpb24uIFRoaXMgc2VjdGlvbgorKyAgICAgdHlwZSBpcyB1c2VkIGJ5IHRoZSBsaW5rZXIgdG8gY3JlYXRlIGxpc3RzIG9mIGNvbnN0cnVjdG9ycyBhbmQKKysgICAgIGRlc3RydWN0b3JzIHVzZWQgYnkgPDxnKys+Pi4gV2hlbiBhIGJhY2sgZW5kIHNlZXMgYSBzeW1ib2wKKysgICAgIHdoaWNoIHNob3VsZCBiZSB1c2VkIGluIGEgY29uc3RydWN0b3IgbGlzdCwgaXQgY3JlYXRlcyBhIG5ldworKyAgICAgc2VjdGlvbiBmb3IgdGhlIHR5cGUgb2YgbmFtZSAoZS5nLiwgPDxfX0NUT1JfTElTVF9fPj4pLCBhdHRhY2hlcworKyAgICAgdGhlIHN5bWJvbCB0byBpdCwgYW5kIGJ1aWxkcyBhIHJlbG9jYXRpb24uIFRvIGJ1aWxkIHRoZSBsaXN0cworKyAgICAgb2YgY29uc3RydWN0b3JzLCBhbGwgdGhlIGxpbmtlciBoYXMgdG8gZG8gaXMgY2F0ZW5hdGUgYWxsIHRoZQorKyAgICAgc2VjdGlvbnMgY2FsbGVkIDw8X19DVE9SX0xJU1RfXz4+IGFuZCByZWxvY2F0ZSB0aGUgZGF0YQorKyAgICAgY29udGFpbmVkIHdpdGhpbiAtIGV4YWN0bHkgdGhlIG9wZXJhdGlvbnMgaXQgd291bGQgcGVmb3JtIG9uCisrICAgICBzdGFuZGFyZCBkYXRhLiAgKi8KKysjZGVmaW5lIFNFQ19DT05TVFJVQ1RPUiAweDA4MAorKworKyAgLyogVGhlIHNlY3Rpb24gaGFzIGNvbnRlbnRzIC0gYSBkYXRhIHNlY3Rpb24gY291bGQgYmUKKysgICAgIDw8U0VDX0FMTE9DPj4gfCA8PFNFQ19IQVNfQ09OVEVOVFM+PjsgYSBkZWJ1ZyBzZWN0aW9uIGNvdWxkIGJlCisrICAgICA8PFNFQ19IQVNfQ09OVEVOVFM+PiAgKi8KKysjZGVmaW5lIFNFQ19IQVNfQ09OVEVOVFMgMHgxMDAKKysKKysgIC8qIEFuIGluc3RydWN0aW9uIHRvIHRoZSBsaW5rZXIgdG8gbm90IG91dHB1dCB0aGUgc2VjdGlvbgorKyAgICAgZXZlbiBpZiBpdCBoYXMgaW5mb3JtYXRpb24gd2hpY2ggd291bGQgbm9ybWFsbHkgYmUgd3JpdHRlbi4gICovCisrI2RlZmluZSBTRUNfTkVWRVJfTE9BRCAweDIwMAorKworKyAgLyogVGhlIHNlY3Rpb24gY29udGFpbnMgdGhyZWFkIGxvY2FsIGRhdGEuICAqLworKyNkZWZpbmUgU0VDX1RIUkVBRF9MT0NBTCAweDQwMAorKworKyAgLyogVGhlIHNlY3Rpb24gaGFzIEdPVCByZWZlcmVuY2VzLiAgVGhpcyBmbGFnIGlzIG9ubHkgZm9yIHRoZQorKyAgICAgbGlua2VyLCBhbmQgaXMgY3VycmVudGx5IG9ubHkgdXNlZCBieSB0aGUgZWxmMzItaHBwYSBiYWNrIGVuZC4KKysgICAgIEl0IHdpbGwgYmUgc2V0IGlmIGdsb2JhbCBvZmZzZXQgdGFibGUgcmVmZXJlbmNlcyB3ZXJlIGRldGVjdGVkCisrICAgICBpbiB0aGlzIHNlY3Rpb24sIHdoaWNoIGluZGljYXRlIHRvIHRoZSBsaW5rZXIgdGhhdCB0aGUgc2VjdGlvbgorKyAgICAgY29udGFpbnMgUElDIGNvZGUsIGFuZCBtdXN0IGJlIGhhbmRsZWQgc3BlY2lhbGx5IHdoZW4gZG9pbmcgYQorKyAgICAgc3RhdGljIGxpbmsuICAqLworKyNkZWZpbmUgU0VDX0hBU19HT1RfUkVGIDB4ODAwCisrCisrICAvKiBUaGUgc2VjdGlvbiBjb250YWlucyBjb21tb24gc3ltYm9scyAoc3ltYm9scyBtYXkgYmUgZGVmaW5lZAorKyAgICAgbXVsdGlwbGUgdGltZXMsIHRoZSB2YWx1ZSBvZiBhIHN5bWJvbCBpcyB0aGUgYW1vdW50IG9mCisrICAgICBzcGFjZSBpdCByZXF1aXJlcywgYW5kIHRoZSBsYXJnZXN0IHN5bWJvbCB2YWx1ZSBpcyB0aGUgb25lCisrICAgICB1c2VkKS4gIE1vc3QgdGFyZ2V0cyBoYXZlIGV4YWN0bHkgb25lIG9mIHRoZXNlICh3aGljaCB3ZQorKyAgICAgdHJhbnNsYXRlIHRvIGJmZF9jb21fc2VjdGlvbl9wdHIpLCBidXQgRUNPRkYgaGFzIHR3by4gICovCisrI2RlZmluZSBTRUNfSVNfQ09NTU9OIDB4MTAwMAorKworKyAgLyogVGhlIHNlY3Rpb24gY29udGFpbnMgb25seSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICBGb3IKKysgICAgIGV4YW1wbGUsIHRoaXMgaXMgc2V0IGZvciBFTEYgLmRlYnVnIGFuZCAuc3RhYiBzZWN0aW9ucy4KKysgICAgIHN0cmlwIHRlc3RzIHRoaXMgZmxhZyB0byBzZWUgaWYgYSBzZWN0aW9uIGNhbiBiZQorKyAgICAgZGlzY2FyZGVkLiAgKi8KKysjZGVmaW5lIFNFQ19ERUJVR0dJTkcgMHgyMDAwCisrCisrICAvKiBUaGUgY29udGVudHMgb2YgdGhpcyBzZWN0aW9uIGFyZSBoZWxkIGluIG1lbW9yeSBwb2ludGVkIHRvCisrICAgICBieSB0aGUgY29udGVudHMgZmllbGQuICBUaGlzIGlzIGNoZWNrZWQgYnkgYmZkX2dldF9zZWN0aW9uX2NvbnRlbnRzLAorKyAgICAgYW5kIHRoZSBkYXRhIGlzIHJldHJpZXZlZCBmcm9tIG1lbW9yeSBpZiBhcHByb3ByaWF0ZS4gICovCisrI2RlZmluZSBTRUNfSU5fTUVNT1JZIDB4NDAwMAorKworKyAgLyogVGhlIGNvbnRlbnRzIG9mIHRoaXMgc2VjdGlvbiBhcmUgdG8gYmUgZXhjbHVkZWQgYnkgdGhlCisrICAgICBsaW5rZXIgZm9yIGV4ZWN1dGFibGUgYW5kIHNoYXJlZCBvYmplY3RzIHVubGVzcyB0aG9zZQorKyAgICAgb2JqZWN0cyBhcmUgdG8gYmUgZnVydGhlciByZWxvY2F0ZWQuICAqLworKyNkZWZpbmUgU0VDX0VYQ0xVREUgMHg4MDAwCisrCisrICAvKiBUaGUgY29udGVudHMgb2YgdGhpcyBzZWN0aW9uIGFyZSB0byBiZSBzb3J0ZWQgYmFzZWQgb24gdGhlIHN1bSBvZgorKyAgICAgdGhlIHN5bWJvbCBhbmQgYWRkZW5kIHZhbHVlcyBzcGVjaWZpZWQgYnkgdGhlIGFzc29jaWF0ZWQgcmVsb2NhdGlvbgorKyAgICAgZW50cmllcy4gIEVudHJpZXMgd2l0aG91dCBhc3NvY2lhdGVkIHJlbG9jYXRpb24gZW50cmllcyB3aWxsIGJlCisrICAgICBhcHBlbmRlZCB0byB0aGUgZW5kIG9mIHRoZSBzZWN0aW9uIGluIGFuIHVuc3BlY2lmaWVkIG9yZGVyLiAgKi8KKysjZGVmaW5lIFNFQ19TT1JUX0VOVFJJRVMgMHgxMDAwMAorKworKyAgLyogV2hlbiBsaW5raW5nLCBkdXBsaWNhdGUgc2VjdGlvbnMgb2YgdGhlIHNhbWUgbmFtZSBzaG91bGQgYmUKKysgICAgIGRpc2NhcmRlZCwgcmF0aGVyIHRoYW4gYmVpbmcgY29tYmluZWQgaW50byBhIHNpbmdsZSBzZWN0aW9uIGFzCisrICAgICBpcyB1c3VhbGx5IGRvbmUuICBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IGNvbW1vbiBzeW1ib2xzIGFyZQorKyAgICAgaGFuZGxlZC4gIFNlZSBTRUNfTElOS19EVVBMSUNBVEVTIGJlbG93LiAgKi8KKysjZGVmaW5lIFNFQ19MSU5LX09OQ0UgMHgyMDAwMAorKworKyAgLyogSWYgU0VDX0xJTktfT05DRSBpcyBzZXQsIHRoaXMgYml0ZmllbGQgZGVzY3JpYmVzIGhvdyB0aGUgbGlua2VyCisrICAgICBzaG91bGQgaGFuZGxlIGR1cGxpY2F0ZSBzZWN0aW9ucy4gICovCisrI2RlZmluZSBTRUNfTElOS19EVVBMSUNBVEVTIDB4NDAwMDAKKysKKysgIC8qIFRoaXMgdmFsdWUgZm9yIFNFQ19MSU5LX0RVUExJQ0FURVMgbWVhbnMgdGhhdCBkdXBsaWNhdGUKKysgICAgIHNlY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZSBzaG91bGQgc2ltcGx5IGJlIGRpc2NhcmRlZC4gICovCisrI2RlZmluZSBTRUNfTElOS19EVVBMSUNBVEVTX0RJU0NBUkQgMHgwCisrCisrICAvKiBUaGlzIHZhbHVlIGZvciBTRUNfTElOS19EVVBMSUNBVEVTIG1lYW5zIHRoYXQgdGhlIGxpbmtlcgorKyAgICAgc2hvdWxkIHdhcm4gaWYgdGhlcmUgYXJlIGFueSBkdXBsaWNhdGUgc2VjdGlvbnMsIGFsdGhvdWdoCisrICAgICBpdCBzaG91bGQgc3RpbGwgb25seSBsaW5rIG9uZSBjb3B5LiAgKi8KKysjZGVmaW5lIFNFQ19MSU5LX0RVUExJQ0FURVNfT05FX09OTFkgMHg4MDAwMAorKworKyAgLyogVGhpcyB2YWx1ZSBmb3IgU0VDX0xJTktfRFVQTElDQVRFUyBtZWFucyB0aGF0IHRoZSBsaW5rZXIKKysgICAgIHNob3VsZCB3YXJuIGlmIGFueSBkdXBsaWNhdGUgc2VjdGlvbnMgYXJlIGEgZGlmZmVyZW50IHNpemUuICAqLworKyNkZWZpbmUgU0VDX0xJTktfRFVQTElDQVRFU19TQU1FX1NJWkUgMHgxMDAwMDAKKysKKysgIC8qIFRoaXMgdmFsdWUgZm9yIFNFQ19MSU5LX0RVUExJQ0FURVMgbWVhbnMgdGhhdCB0aGUgbGlua2VyCisrICAgICBzaG91bGQgd2FybiBpZiBhbnkgZHVwbGljYXRlIHNlY3Rpb25zIGNvbnRhaW4gZGlmZmVyZW50CisrICAgICBjb250ZW50cy4gICovCisrI2RlZmluZSBTRUNfTElOS19EVVBMSUNBVEVTX1NBTUVfQ09OVEVOVFMgXAorKyAgKFNFQ19MSU5LX0RVUExJQ0FURVNfT05FX09OTFkgfCBTRUNfTElOS19EVVBMSUNBVEVTX1NBTUVfU0laRSkKKysKKysgIC8qIFRoaXMgc2VjdGlvbiB3YXMgY3JlYXRlZCBieSB0aGUgbGlua2VyIGFzIHBhcnQgb2YgZHluYW1pYworKyAgICAgcmVsb2NhdGlvbiBvciBvdGhlciBhcmNhbmUgcHJvY2Vzc2luZy4gIEl0IGlzIHNraXBwZWQgd2hlbgorKyAgICAgZ29pbmcgdGhyb3VnaCB0aGUgZmlyc3QtcGFzcyBvdXRwdXQsIHRydXN0aW5nIHRoYXQgc29tZW9uZQorKyAgICAgZWxzZSB1cCB0aGUgbGluZSB3aWxsIHRha2UgY2FyZSBvZiBpdCBsYXRlci4gICovCisrI2RlZmluZSBTRUNfTElOS0VSX0NSRUFURUQgMHgyMDAwMDAKKysKKysgIC8qIFRoaXMgc2VjdGlvbiBzaG91bGQgbm90IGJlIHN1YmplY3QgdG8gZ2FyYmFnZSBjb2xsZWN0aW9uLgorKyAgICAgQWxzbyBzZXQgdG8gaW5mb3JtIHRoZSBsaW5rZXIgdGhhdCB0aGlzIHNlY3Rpb24gc2hvdWxkIG5vdCBiZQorKyAgICAgbGlzdGVkIGluIHRoZSBsaW5rIG1hcCBhcyBkaXNjYXJkZWQuICAqLworKyNkZWZpbmUgU0VDX0tFRVAgMHg0MDAwMDAKKysKKysgIC8qIFRoaXMgc2VjdGlvbiBjb250YWlucyAic2hvcnQiIGRhdGEsIGFuZCBzaG91bGQgYmUgcGxhY2VkCisrICAgICAibmVhciIgdGhlIEdQLiAgKi8KKysjZGVmaW5lIFNFQ19TTUFMTF9EQVRBIDB4ODAwMDAwCisrCisrICAvKiBBdHRlbXB0IHRvIG1lcmdlIGlkZW50aWNhbCBlbnRpdGllcyBpbiB0aGUgc2VjdGlvbi4KKysgICAgIEVudGl0eSBzaXplIGlzIGdpdmVuIGluIHRoZSBlbnRzaXplIGZpZWxkLiAgKi8KKysjZGVmaW5lIFNFQ19NRVJHRSAweDEwMDAwMDAKKysKKysgIC8qIElmIGdpdmVuIHdpdGggU0VDX01FUkdFLCBlbnRpdGllcyB0byBtZXJnZSBhcmUgemVybyB0ZXJtaW5hdGVkCisrICAgICBzdHJpbmdzIHdoZXJlIGVudHNpemUgc3BlY2lmaWVzIGNoYXJhY3RlciBzaXplIGluc3RlYWQgb2YgZml4ZWQKKysgICAgIHNpemUgZW50cmllcy4gICovCisrI2RlZmluZSBTRUNfU1RSSU5HUyAweDIwMDAwMDAKKysKKysgIC8qIFRoaXMgc2VjdGlvbiBjb250YWlucyBkYXRhIGFib3V0IHNlY3Rpb24gZ3JvdXBzLiAgKi8KKysjZGVmaW5lIFNFQ19HUk9VUCAweDQwMDAwMDAKKysKKysgIC8qIFRoZSBzZWN0aW9uIGlzIGEgQ09GRiBzaGFyZWQgbGlicmFyeSBzZWN0aW9uLiAgVGhpcyBmbGFnIGlzCisrICAgICBvbmx5IGZvciB0aGUgbGlua2VyLiAgSWYgdGhpcyB0eXBlIG9mIHNlY3Rpb24gYXBwZWFycyBpbgorKyAgICAgdGhlIGlucHV0IGZpbGUsIHRoZSBsaW5rZXIgbXVzdCBjb3B5IGl0IHRvIHRoZSBvdXRwdXQgZmlsZQorKyAgICAgd2l0aG91dCBjaGFuZ2luZyB0aGUgdm1hIG9yIHNpemUuICBGSVhNRTogQWx0aG91Z2ggdGhpcworKyAgICAgd2FzIG9yaWdpbmFsbHkgaW50ZW5kZWQgdG8gYmUgZ2VuZXJhbCwgaXQgcmVhbGx5IGlzIENPRkYKKysgICAgIHNwZWNpZmljIChhbmQgdGhlIGZsYWcgd2FzIHJlbmFtZWQgdG8gaW5kaWNhdGUgdGhpcykuICBJdAorKyAgICAgbWlnaHQgYmUgY2xlYW5lciB0byBoYXZlIHNvbWUgbW9yZSBnZW5lcmFsIG1lY2hhbmlzbSB0bworKyAgICAgYWxsb3cgdGhlIGJhY2sgZW5kIHRvIGNvbnRyb2wgd2hhdCB0aGUgbGlua2VyIGRvZXMgd2l0aAorKyAgICAgc2VjdGlvbnMuICAqLworKyNkZWZpbmUgU0VDX0NPRkZfU0hBUkVEX0xJQlJBUlkgMHgxMDAwMDAwMAorKworKyAgLyogVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGRhdGEgd2hpY2ggbWF5IGJlIHNoYXJlZCB3aXRoIG90aGVyCisrICAgICBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cy4gVGhpcyBpcyBmb3IgQ09GRiBvbmx5LiAgKi8KKysjZGVmaW5lIFNFQ19DT0ZGX1NIQVJFRCAweDIwMDAwMDAwCisrCisrICAvKiBXaGVuIGEgc2VjdGlvbiB3aXRoIHRoaXMgZmxhZyBpcyBiZWluZyBsaW5rZWQsIHRoZW4gaWYgdGhlIHNpemUgb2YKKysgICAgIHRoZSBpbnB1dCBzZWN0aW9uIGlzIGxlc3MgdGhhbiBhIHBhZ2UsIGl0IHNob3VsZCBub3QgY3Jvc3MgYSBwYWdlCisrICAgICBib3VuZGFyeS4gIElmIHRoZSBzaXplIG9mIHRoZSBpbnB1dCBzZWN0aW9uIGlzIG9uZSBwYWdlIG9yIG1vcmUsCisrICAgICBpdCBzaG91bGQgYmUgYWxpZ25lZCBvbiBhIHBhZ2UgYm91bmRhcnkuICBUaGlzIGlzIGZvciBUSQorKyAgICAgVE1TMzIwQzU0WCBvbmx5LiAgKi8KKysjZGVmaW5lIFNFQ19USUM1NFhfQkxPQ0sgMHg0MDAwMDAwMAorKworKyAgLyogQ29uZGl0aW9uYWxseSBsaW5rIHRoaXMgc2VjdGlvbjsgZG8gbm90IGxpbmsgaWYgdGhlcmUgYXJlIG5vCisrICAgICByZWZlcmVuY2VzIGZvdW5kIHRvIGFueSBzeW1ib2wgaW4gdGhlIHNlY3Rpb24uICBUaGlzIGlzIGZvciBUSQorKyAgICAgVE1TMzIwQzU0WCBvbmx5LiAgKi8KKysjZGVmaW5lIFNFQ19USUM1NFhfQ0xJTksgMHg4MDAwMDAwMAorKworKyAgLyogIEVuZCBvZiBzZWN0aW9uIGZsYWdzLiAgKi8KKysKKysgIC8qIFNvbWUgaW50ZXJuYWwgcGFja2VkIGJvb2xlYW4gZmllbGRzLiAgKi8KKysKKysgIC8qIFNlZSB0aGUgdm1hIGZpZWxkLiAgKi8KKysgIHVuc2lnbmVkIGludCB1c2VyX3NldF92bWEgOiAxOworKworKyAgLyogQSBtYXJrIGZsYWcgdXNlZCBieSBzb21lIG9mIHRoZSBsaW5rZXIgYmFja2VuZHMuICAqLworKyAgdW5zaWduZWQgaW50IGxpbmtlcl9tYXJrIDogMTsKKysKKysgIC8qIEFub3RoZXIgbWFyayBmbGFnIHVzZWQgYnkgc29tZSBvZiB0aGUgbGlua2VyIGJhY2tlbmRzLiAgU2V0IGZvcgorKyAgICAgb3V0cHV0IHNlY3Rpb25zIHRoYXQgaGF2ZSBhbiBpbnB1dCBzZWN0aW9uLiAgKi8KKysgIHVuc2lnbmVkIGludCBsaW5rZXJfaGFzX2lucHV0IDogMTsKKysKKysgIC8qIE1hcmsgZmxhZ3MgdXNlZCBieSBzb21lIGxpbmtlciBiYWNrZW5kcyBmb3IgZ2FyYmFnZSBjb2xsZWN0aW9uLiAgKi8KKysgIHVuc2lnbmVkIGludCBnY19tYXJrIDogMTsKKysgIHVuc2lnbmVkIGludCBnY19tYXJrX2Zyb21fZWggOiAxOworKworKyAgLyogVGhlIGZvbGxvd2luZyBmbGFncyBhcmUgdXNlZCBieSB0aGUgRUxGIGxpbmtlci4gKi8KKysKKysgIC8qIE1hcmsgc2VjdGlvbnMgd2hpY2ggaGF2ZSBiZWVuIGFsbG9jYXRlZCB0byBzZWdtZW50cy4gICovCisrICB1bnNpZ25lZCBpbnQgc2VnbWVudF9tYXJrIDogMTsKKysKKysgIC8qIFR5cGUgb2Ygc2VjX2luZm8gaW5mb3JtYXRpb24uICAqLworKyAgdW5zaWduZWQgaW50IHNlY19pbmZvX3R5cGU6MzsKKysjZGVmaW5lIEVMRl9JTkZPX1RZUEVfTk9ORSAgICAgIDAKKysjZGVmaW5lIEVMRl9JTkZPX1RZUEVfU1RBQlMgICAgIDEKKysjZGVmaW5lIEVMRl9JTkZPX1RZUEVfTUVSR0UgICAgIDIKKysjZGVmaW5lIEVMRl9JTkZPX1RZUEVfRUhfRlJBTUUgIDMKKysjZGVmaW5lIEVMRl9JTkZPX1RZUEVfSlVTVF9TWU1TIDQKKysKKysgIC8qIE5vbnplcm8gaWYgdGhpcyBzZWN0aW9uIHVzZXMgUkVMQSByZWxvY2F0aW9ucywgcmF0aGVyIHRoYW4gUkVMLiAgKi8KKysgIHVuc2lnbmVkIGludCB1c2VfcmVsYV9wOjE7CisrCisrICAvKiBCaXRzIHVzZWQgYnkgdmFyaW91cyBiYWNrZW5kcy4gIFRoZSBnZW5lcmljIGNvZGUgZG9lc24ndCB0b3VjaAorKyAgICAgdGhlc2UgZmllbGRzLiAgKi8KKysKKysgIC8qIE5vbnplcm8gaWYgdGhpcyBzZWN0aW9uIGhhcyBUTFMgcmVsYXRlZCByZWxvY2F0aW9ucy4gICovCisrICB1bnNpZ25lZCBpbnQgaGFzX3Rsc19yZWxvYzoxOworKworKyAgLyogTm9uemVybyBpZiB0aGlzIHNlY3Rpb24gaGFzIGEgZ3AgcmVsb2MuICAqLworKyAgdW5zaWduZWQgaW50IGhhc19ncF9yZWxvYzoxOworKworKyAgLyogTm9uemVybyBpZiB0aGlzIHNlY3Rpb24gbmVlZHMgdGhlIHJlbGF4IGZpbmFsaXplIHBhc3MuICAqLworKyAgdW5zaWduZWQgaW50IG5lZWRfZmluYWxpemVfcmVsYXg6MTsKKysKKysgIC8qIFdoZXRoZXIgcmVsb2NhdGlvbnMgaGF2ZSBiZWVuIHByb2Nlc3NlZC4gICovCisrICB1bnNpZ25lZCBpbnQgcmVsb2NfZG9uZSA6IDE7CisrCisrICAvKiBFbmQgb2YgaW50ZXJuYWwgcGFja2VkIGJvb2xlYW4gZmllbGRzLiAgKi8KKysKKysgIC8qICBUaGUgdmlydHVhbCBtZW1vcnkgYWRkcmVzcyBvZiB0aGUgc2VjdGlvbiAtIHdoZXJlIGl0IHdpbGwgYmUKKysgICAgICBhdCBydW4gdGltZS4gIFRoZSBzeW1ib2xzIGFyZSByZWxvY2F0ZWQgYWdhaW5zdCB0aGlzLiAgVGhlCisrICAgICAgdXNlcl9zZXRfdm1hIGZsYWcgaXMgbWFpbnRhaW5lZCBieSBiZmQ7IGlmIGl0J3Mgbm90IHNldCwgdGhlCisrICAgICAgYmFja2VuZCBjYW4gYXNzaWduIGFkZHJlc3NlcyAoZm9yIGV4YW1wbGUsIGluIDw8YS5vdXQ+Piwgd2hlcmUKKysgICAgICB0aGUgZGVmYXVsdCBhZGRyZXNzIGZvciA8PC5kYXRhPj4gaXMgZGVwZW5kZW50IG9uIHRoZSBzcGVjaWZpYworKyAgICAgIHRhcmdldCBhbmQgdmFyaW91cyBmbGFncykuICAqLworKyAgYmZkX3ZtYSB2bWE7CisrCisrICAvKiAgVGhlIGxvYWQgYWRkcmVzcyBvZiB0aGUgc2VjdGlvbiAtIHdoZXJlIGl0IHdvdWxkIGJlIGluIGEKKysgICAgICByb20gaW1hZ2U7IHJlYWxseSBvbmx5IHVzZWQgZm9yIHdyaXRpbmcgc2VjdGlvbiBoZWFkZXIKKysgICAgICBpbmZvcm1hdGlvbi4gICovCisrICBiZmRfdm1hIGxtYTsKKysKKysgIC8qIFRoZSBzaXplIG9mIHRoZSBzZWN0aW9uIGluIG9jdGV0cywgYXMgaXQgd2lsbCBiZSBvdXRwdXQuCisrICAgICBDb250YWlucyBhIHZhbHVlIGV2ZW4gaWYgdGhlIHNlY3Rpb24gaGFzIG5vIGNvbnRlbnRzIChlLmcuLCB0aGUKKysgICAgIHNpemUgb2YgPDwuYnNzPj4pLiAgKi8KKysgIGJmZF9zaXplX3R5cGUgc2l6ZTsKKysKKysgIC8qIEZvciBpbnB1dCBzZWN0aW9ucywgdGhlIG9yaWdpbmFsIHNpemUgb24gZGlzayBvZiB0aGUgc2VjdGlvbiwgaW4KKysgICAgIG9jdGV0cy4gIFRoaXMgZmllbGQgaXMgdXNlZCBieSB0aGUgbGlua2VyIHJlbGF4YXRpb24gY29kZS4gIEl0IGlzCisrICAgICBjdXJyZW50bHkgb25seSBzZXQgZm9yIHNlY3Rpb25zIHdoZXJlIHRoZSBsaW5rZXIgcmVsYXhhdGlvbiBzY2hlbWUKKysgICAgIGRvZXNuJ3QgY2FjaGUgYWx0ZXJlZCBzZWN0aW9uIGFuZCByZWxvYyBjb250ZW50cyAoc3RhYnMsIGVoX2ZyYW1lLAorKyAgICAgU0VDX01FUkdFLCBzb21lIGNvZmYgcmVsYXhpbmcgdGFyZ2V0cyksIGFuZCB0aHVzIHRoZSBvcmlnaW5hbCBzaXplCisrICAgICBuZWVkcyB0byBiZSBrZXB0IHRvIHJlYWQgdGhlIHNlY3Rpb24gbXVsdGlwbGUgdGltZXMuCisrICAgICBGb3Igb3V0cHV0IHNlY3Rpb25zLCByYXdzaXplIGhvbGRzIHRoZSBzZWN0aW9uIHNpemUgY2FsY3VsYXRlZCBvbgorKyAgICAgYSBwcmV2aW91cyBsaW5rZXIgcmVsYXhhdGlvbiBwYXNzLiAgKi8KKysgIGJmZF9zaXplX3R5cGUgcmF3c2l6ZTsKKysKKysgIC8qIElmIHRoaXMgc2VjdGlvbiBpcyBnb2luZyB0byBiZSBvdXRwdXQsIHRoZW4gdGhpcyB2YWx1ZSBpcyB0aGUKKysgICAgIG9mZnNldCBpbiAqYnl0ZXMqIGludG8gdGhlIG91dHB1dCBzZWN0aW9uIG9mIHRoZSBmaXJzdCBieXRlIGluIHRoZQorKyAgICAgaW5wdXQgc2VjdGlvbiAoYnl0ZSA9PT4gc21hbGxlc3QgYWRkcmVzc2FibGUgdW5pdCBvbiB0aGUKKysgICAgIHRhcmdldCkuICBJbiBtb3N0IGNhc2VzLCBpZiB0aGlzIHdhcyBnb2luZyB0byBzdGFydCBhdCB0aGUKKysgICAgIDEwMHRoIG9jdGV0ICg4LWJpdCBxdWFudGl0eSkgaW4gdGhlIG91dHB1dCBzZWN0aW9uLCB0aGlzIHZhbHVlCisrICAgICB3b3VsZCBiZSAxMDAuICBIb3dldmVyLCBpZiB0aGUgdGFyZ2V0IGJ5dGUgc2l6ZSBpcyAxNiBiaXRzCisrICAgICAoYmZkX29jdGV0c19wZXJfYnl0ZSBpcyAiMiIpLCB0aGlzIHZhbHVlIHdvdWxkIGJlIDUwLiAgKi8KKysgIGJmZF92bWEgb3V0cHV0X29mZnNldDsKKysKKysgIC8qIFRoZSBvdXRwdXQgc2VjdGlvbiB0aHJvdWdoIHdoaWNoIHRvIG1hcCBvbiBvdXRwdXQuICAqLworKyAgc3RydWN0IGJmZF9zZWN0aW9uICpvdXRwdXRfc2VjdGlvbjsKKysKKysgIC8qIFRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgb2YgdGhlIHNlY3Rpb24sIGFzIGFuIGV4cG9uZW50IG9mIDIgLQorKyAgICAgZS5nLiwgMyBhbGlnbnMgdG8gMl4zIChvciA4KS4gICovCisrICB1bnNpZ25lZCBpbnQgYWxpZ25tZW50X3Bvd2VyOworKworKyAgLyogSWYgYW4gaW5wdXQgc2VjdGlvbiwgYSBwb2ludGVyIHRvIGEgdmVjdG9yIG9mIHJlbG9jYXRpb24KKysgICAgIHJlY29yZHMgZm9yIHRoZSBkYXRhIGluIHRoaXMgc2VjdGlvbi4gICovCisrICBzdHJ1Y3QgcmVsb2NfY2FjaGVfZW50cnkgKnJlbG9jYXRpb247CisrCisrICAvKiBJZiBhbiBvdXRwdXQgc2VjdGlvbiwgYSBwb2ludGVyIHRvIGEgdmVjdG9yIG9mIHBvaW50ZXJzIHRvCisrICAgICByZWxvY2F0aW9uIHJlY29yZHMgZm9yIHRoZSBkYXRhIGluIHRoaXMgc2VjdGlvbi4gICovCisrICBzdHJ1Y3QgcmVsb2NfY2FjaGVfZW50cnkgKipvcmVsb2NhdGlvbjsKKysKKysgIC8qIFRoZSBudW1iZXIgb2YgcmVsb2NhdGlvbiByZWNvcmRzIGluIG9uZSBvZiB0aGUgYWJvdmUuICAqLworKyAgdW5zaWduZWQgcmVsb2NfY291bnQ7CisrCisrICAvKiBJbmZvcm1hdGlvbiBiZWxvdyBpcyBiYWNrIGVuZCBzcGVjaWZpYyAtIGFuZCBub3QgYWx3YXlzIHVzZWQKKysgICAgIG9yIHVwZGF0ZWQuICAqLworKworKyAgLyogRmlsZSBwb3NpdGlvbiBvZiBzZWN0aW9uIGRhdGEuICAqLworKyAgZmlsZV9wdHIgZmlsZXBvczsKKysKKysgIC8qIEZpbGUgcG9zaXRpb24gb2YgcmVsb2NhdGlvbiBpbmZvLiAgKi8KKysgIGZpbGVfcHRyIHJlbF9maWxlcG9zOworKworKyAgLyogRmlsZSBwb3NpdGlvbiBvZiBsaW5lIGRhdGEuICAqLworKyAgZmlsZV9wdHIgbGluZV9maWxlcG9zOworKworKyAgLyogUG9pbnRlciB0byBkYXRhIGZvciBhcHBsaWNhdGlvbnMuICAqLworKyAgdm9pZCAqdXNlcmRhdGE7CisrCisrICAvKiBJZiB0aGUgU0VDX0lOX01FTU9SWSBmbGFnIGlzIHNldCwgdGhpcyBwb2ludHMgdG8gdGhlIGFjdHVhbAorKyAgICAgY29udGVudHMuICAqLworKyAgdW5zaWduZWQgY2hhciAqY29udGVudHM7CisrCisrICAvKiBBdHRhY2hlZCBsaW5lIG51bWJlciBpbmZvcm1hdGlvbi4gICovCisrICBhbGVudCAqbGluZW5vOworKworKyAgLyogTnVtYmVyIG9mIGxpbmUgbnVtYmVyIHJlY29yZHMuICAqLworKyAgdW5zaWduZWQgaW50IGxpbmVub19jb3VudDsKKysKKysgIC8qIEVudGl0eSBzaXplIGZvciBtZXJnaW5nIHB1cnBvc2VzLiAgKi8KKysgIHVuc2lnbmVkIGludCBlbnRzaXplOworKworKyAgLyogUG9pbnRzIHRvIHRoZSBrZXB0IHNlY3Rpb24gaWYgdGhpcyBzZWN0aW9uIGlzIGEgbGluay1vbmNlIHNlY3Rpb24sCisrICAgICBhbmQgaXMgZGlzY2FyZGVkLiAgKi8KKysgIHN0cnVjdCBiZmRfc2VjdGlvbiAqa2VwdF9zZWN0aW9uOworKworKyAgLyogV2hlbiBhIHNlY3Rpb24gaXMgYmVpbmcgb3V0cHV0LCB0aGlzIHZhbHVlIGNoYW5nZXMgYXMgbW9yZQorKyAgICAgbGluZW51bWJlcnMgYXJlIHdyaXR0ZW4gb3V0LiAgKi8KKysgIGZpbGVfcHRyIG1vdmluZ19saW5lX2ZpbGVwb3M7CisrCisrICAvKiBXaGF0IHRoZSBzZWN0aW9uIG51bWJlciBpcyBpbiB0aGUgdGFyZ2V0IHdvcmxkLiAgKi8KKysgIGludCB0YXJnZXRfaW5kZXg7CisrCisrICB2b2lkICp1c2VkX2J5X2JmZDsKKysKKysgIC8qIElmIHRoaXMgaXMgYSBjb25zdHJ1Y3RvciBzZWN0aW9uIHRoZW4gaGVyZSBpcyBhIGxpc3Qgb2YgdGhlCisrICAgICByZWxvY2F0aW9ucyBjcmVhdGVkIHRvIHJlbG9jYXRlIGl0ZW1zIHdpdGhpbiBpdC4gICovCisrICBzdHJ1Y3QgcmVsZW50X2NoYWluICpjb25zdHJ1Y3Rvcl9jaGFpbjsKKysKKysgIC8qIFRoZSBCRkQgd2hpY2ggb3ducyB0aGUgc2VjdGlvbi4gICovCisrICBiZmQgKm93bmVyOworKworKyAgLyogQSBzeW1ib2wgd2hpY2ggcG9pbnRzIGF0IHRoaXMgc2VjdGlvbiBvbmx5LiAgKi8KKysgIHN0cnVjdCBiZmRfc3ltYm9sICpzeW1ib2w7CisrICBzdHJ1Y3QgYmZkX3N5bWJvbCAqKnN5bWJvbF9wdHJfcHRyOworKworKyAgLyogRWFybHkgaW4gdGhlIGxpbmsgcHJvY2VzcywgbWFwX2hlYWQgYW5kIG1hcF90YWlsIGFyZSB1c2VkIHRvIGJ1aWxkCisrICAgICBhIGxpc3Qgb2YgaW5wdXQgc2VjdGlvbnMgYXR0YWNoZWQgdG8gYW4gb3V0cHV0IHNlY3Rpb24uICBMYXRlciwKKysgICAgIG91dHB1dCBzZWN0aW9ucyB1c2UgdGhlc2UgZmllbGRzIGZvciBhIGxpc3Qgb2YgYmZkX2xpbmtfb3JkZXIKKysgICAgIHN0cnVjdHMuICAqLworKyAgdW5pb24geworKyAgICBzdHJ1Y3QgYmZkX2xpbmtfb3JkZXIgKmxpbmtfb3JkZXI7CisrICAgIHN0cnVjdCBiZmRfc2VjdGlvbiAqczsKKysgIH0gbWFwX2hlYWQsIG1hcF90YWlsOworK30gYXNlY3Rpb247CisrCisrLyogVGhlc2Ugc2VjdGlvbnMgYXJlIGdsb2JhbCwgYW5kIGFyZSBtYW5hZ2VkIGJ5IEJGRC4gIFRoZSBhcHBsaWNhdGlvbgorKyAgIGFuZCB0YXJnZXQgYmFjayBlbmQgYXJlIG5vdCBwZXJtaXR0ZWQgdG8gY2hhbmdlIHRoZSB2YWx1ZXMgaW4KKysgICB0aGVzZSBzZWN0aW9ucy4gIE5ldyBjb2RlIHNob3VsZCB1c2UgdGhlIHNlY3Rpb25fcHRyIG1hY3JvcyByYXRoZXIKKysgICB0aGFuIHJlZmVycmluZyBkaXJlY3RseSB0byB0aGUgY29uc3Qgc2VjdGlvbnMuICBUaGUgY29uc3Qgc2VjdGlvbnMKKysgICBtYXkgZXZlbnR1YWxseSB2YW5pc2guICAqLworKyNkZWZpbmUgQkZEX0FCU19TRUNUSU9OX05BTUUgIipBQlMqIgorKyNkZWZpbmUgQkZEX1VORF9TRUNUSU9OX05BTUUgIipVTkQqIgorKyNkZWZpbmUgQkZEX0NPTV9TRUNUSU9OX05BTUUgIipDT00qIgorKyNkZWZpbmUgQkZEX0lORF9TRUNUSU9OX05BTUUgIipJTkQqIgorKworKy8qIFRoZSBhYnNvbHV0ZSBzZWN0aW9uLiAgKi8KKytleHRlcm4gYXNlY3Rpb24gYmZkX2Fic19zZWN0aW9uOworKyNkZWZpbmUgYmZkX2Fic19zZWN0aW9uX3B0ciAoKGFzZWN0aW9uICopICZiZmRfYWJzX3NlY3Rpb24pCisrI2RlZmluZSBiZmRfaXNfYWJzX3NlY3Rpb24oc2VjKSAoKHNlYykgPT0gYmZkX2Fic19zZWN0aW9uX3B0cikKKysvKiBQb2ludGVyIHRvIHRoZSB1bmRlZmluZWQgc2VjdGlvbi4gICovCisrZXh0ZXJuIGFzZWN0aW9uIGJmZF91bmRfc2VjdGlvbjsKKysjZGVmaW5lIGJmZF91bmRfc2VjdGlvbl9wdHIgKChhc2VjdGlvbiAqKSAmYmZkX3VuZF9zZWN0aW9uKQorKyNkZWZpbmUgYmZkX2lzX3VuZF9zZWN0aW9uKHNlYykgKChzZWMpID09IGJmZF91bmRfc2VjdGlvbl9wdHIpCisrLyogUG9pbnRlciB0byB0aGUgY29tbW9uIHNlY3Rpb24uICAqLworK2V4dGVybiBhc2VjdGlvbiBiZmRfY29tX3NlY3Rpb247CisrI2RlZmluZSBiZmRfY29tX3NlY3Rpb25fcHRyICgoYXNlY3Rpb24gKikgJmJmZF9jb21fc2VjdGlvbikKKysvKiBQb2ludGVyIHRvIHRoZSBpbmRpcmVjdCBzZWN0aW9uLiAgKi8KKytleHRlcm4gYXNlY3Rpb24gYmZkX2luZF9zZWN0aW9uOworKyNkZWZpbmUgYmZkX2luZF9zZWN0aW9uX3B0ciAoKGFzZWN0aW9uICopICZiZmRfaW5kX3NlY3Rpb24pCisrI2RlZmluZSBiZmRfaXNfaW5kX3NlY3Rpb24oc2VjKSAoKHNlYykgPT0gYmZkX2luZF9zZWN0aW9uX3B0cikKKysKKysjZGVmaW5lIGJmZF9pc19jb25zdF9zZWN0aW9uKFNFQykgICAgICAgICAgICAgIFwKKysgKCAgICgoU0VDKSA9PSBiZmRfYWJzX3NlY3Rpb25fcHRyKSAgICAgICAgICAgIFwKKysgIHx8ICgoU0VDKSA9PSBiZmRfdW5kX3NlY3Rpb25fcHRyKSAgICAgICAgICAgIFwKKysgIHx8ICgoU0VDKSA9PSBiZmRfY29tX3NlY3Rpb25fcHRyKSAgICAgICAgICAgIFwKKysgIHx8ICgoU0VDKSA9PSBiZmRfaW5kX3NlY3Rpb25fcHRyKSkKKysKKysvKiBNYWNyb3MgdG8gaGFuZGxlIGluc2VydGlvbiBhbmQgZGVsZXRpb24gb2YgYSBiZmQncyBzZWN0aW9ucy4gIFRoZXNlCisrICAgb25seSBoYW5kbGUgdGhlIGxpc3QgcG9pbnRlcnMsIGllLiBkbyBub3QgYWRqdXN0IHNlY3Rpb25fY291bnQsCisrICAgdGFyZ2V0X2luZGV4IGV0Yy4gICovCisrI2RlZmluZSBiZmRfc2VjdGlvbl9saXN0X3JlbW92ZShBQkZELCBTKSBcCisrICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGFzZWN0aW9uICpfcyA9IFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgYXNlY3Rpb24gKl9uZXh0ID0gX3MtPm5leHQ7ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBhc2VjdGlvbiAqX3ByZXYgPSBfcy0+cHJldjsgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGlmIChfcHJldikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfcHJldi0+bmV4dCA9IF9uZXh0OyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgKEFCRkQpLT5zZWN0aW9ucyA9IF9uZXh0OyAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgaWYgKF9uZXh0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9uZXh0LT5wcmV2ID0gX3ByZXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAoQUJGRCktPnNlY3Rpb25fbGFzdCA9IF9wcmV2OyAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgd2hpbGUgKDApCisrI2RlZmluZSBiZmRfc2VjdGlvbl9saXN0X2FwcGVuZChBQkZELCBTKSBcCisrICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGFzZWN0aW9uICpfcyA9IFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgYmZkICpfYWJmZCA9IEFCRkQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBfcy0+bmV4dCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGlmIChfYWJmZC0+c2VjdGlvbl9sYXN0KSAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX3MtPnByZXYgPSBfYWJmZC0+c2VjdGlvbl9sYXN0OyAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfYWJmZC0+c2VjdGlvbl9sYXN0LT5uZXh0ID0gX3M7ICAgICAgICAgICAgICBcCisrICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9zLT5wcmV2ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX2FiZmQtPnNlY3Rpb25zID0gX3M7ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgX2FiZmQtPnNlY3Rpb25fbGFzdCA9IF9zOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgd2hpbGUgKDApCisrI2RlZmluZSBiZmRfc2VjdGlvbl9saXN0X3ByZXBlbmQoQUJGRCwgUykgXAorKyAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBhc2VjdGlvbiAqX3MgPSBTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGJmZCAqX2FiZmQgPSBBQkZEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgX3MtPnByZXYgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBpZiAoX2FiZmQtPnNlY3Rpb25zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9zLT5uZXh0ID0gX2FiZmQtPnNlY3Rpb25zOyAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX2FiZmQtPnNlY3Rpb25zLT5wcmV2ID0gX3M7ICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfcy0+bmV4dCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9hYmZkLT5zZWN0aW9uX2xhc3QgPSBfczsgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIF9hYmZkLT5zZWN0aW9ucyA9IF9zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHdoaWxlICgwKQorKyNkZWZpbmUgYmZkX3NlY3Rpb25fbGlzdF9pbnNlcnRfYWZ0ZXIoQUJGRCwgQSwgUykgXAorKyAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBhc2VjdGlvbiAqX2EgPSBBOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGFzZWN0aW9uICpfcyA9IFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgYXNlY3Rpb24gKl9uZXh0ID0gX2EtPm5leHQ7ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBfcy0+bmV4dCA9IF9uZXh0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIF9zLT5wcmV2ID0gX2E7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgX2EtPm5leHQgPSBfczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBpZiAoX25leHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX25leHQtPnByZXYgPSBfczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIChBQkZEKS0+c2VjdGlvbl9sYXN0ID0gX3M7ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB3aGlsZSAoMCkKKysjZGVmaW5lIGJmZF9zZWN0aW9uX2xpc3RfaW5zZXJ0X2JlZm9yZShBQkZELCBCLCBTKSBcCisrICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGFzZWN0aW9uICpfYiA9IEI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgYXNlY3Rpb24gKl9zID0gUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBhc2VjdGlvbiAqX3ByZXYgPSBfYi0+cHJldjsgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIF9zLT5wcmV2ID0gX3ByZXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgX3MtPm5leHQgPSBfYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBfYi0+cHJldiA9IF9zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGlmIChfcHJldikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfcHJldi0+bmV4dCA9IF9zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgKEFCRkQpLT5zZWN0aW9ucyA9IF9zOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHdoaWxlICgwKQorKyNkZWZpbmUgYmZkX3NlY3Rpb25fcmVtb3ZlZF9mcm9tX2xpc3QoQUJGRCwgUykgXAorKyAgKChTKS0+bmV4dCA9PSBOVUxMID8gKEFCRkQpLT5zZWN0aW9uX2xhc3QgIT0gKFMpIDogKFMpLT5uZXh0LT5wcmV2ICE9IChTKSkKKysKKysjZGVmaW5lIEJGRF9GQUtFX1NFQ1RJT04oU0VDLCBGTEFHUywgU1lNLCBOQU1FLCBJRFgpICAgICAgICAgICAgICAgICAgIFwKKysgIC8qIG5hbWUsIGlkLCAgaW5kZXgsIG5leHQsIHByZXYsIGZsYWdzLCB1c2VyX3NldF92bWEsICAgICAgICAgICAgKi8gIFwKKysgIHsgTkFNRSwgIElEWCwgMCwgICAgIE5VTEwsIE5VTEwsIEZMQUdTLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIC8qIGxpbmtlcl9tYXJrLCBsaW5rZXJfaGFzX2lucHV0LCBnY19tYXJrLCBnY19tYXJrX2Zyb21fZWgsICAgICAgKi8gIFwKKysgICAgIDAsICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAxLCAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIC8qIHNlZ21lbnRfbWFyaywgc2VjX2luZm9fdHlwZSwgdXNlX3JlbGFfcCwgaGFzX3Rsc19yZWxvYywgICAgICAgKi8gIFwKKysgICAgIDAsICAgICAgICAgICAgMCwgICAgICAgICAgICAgMCwgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIC8qIGhhc19ncF9yZWxvYywgbmVlZF9maW5hbGl6ZV9yZWxheCwgcmVsb2NfZG9uZSwgICAgICAgICAgICAgICAgKi8gIFwKKysgICAgIDAsICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIC8qIHZtYSwgbG1hLCBzaXplLCByYXdzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gIFwKKysgICAgIDAsICAgMCwgICAwLCAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIC8qIG91dHB1dF9vZmZzZXQsIG91dHB1dF9zZWN0aW9uLCAgICAgICAgICAgICAgYWxpZ25tZW50X3Bvd2VyLCAgKi8gIFwKKysgICAgIDAsICAgICAgICAgICAgIChzdHJ1Y3QgYmZkX3NlY3Rpb24gKikgJlNFQywgMCwgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIC8qIHJlbG9jYXRpb24sIG9yZWxvY2F0aW9uLCByZWxvY19jb3VudCwgZmlsZXBvcywgcmVsX2ZpbGVwb3MsICAgKi8gIFwKKysgICAgIE5VTEwsICAgICAgIE5VTEwsICAgICAgICAwLCAgICAgICAgICAgMCwgICAgICAgMCwgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIC8qIGxpbmVfZmlsZXBvcywgdXNlcmRhdGEsIGNvbnRlbnRzLCBsaW5lbm8sIGxpbmVub19jb3VudCwgICAgICAgKi8gIFwKKysgICAgIDAsICAgICAgICAgICAgTlVMTCwgICAgIE5VTEwsICAgICBOVUxMLCAgIDAsICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIC8qIGVudHNpemUsIGtlcHRfc2VjdGlvbiwgbW92aW5nX2xpbmVfZmlsZXBvcywgICAgICAgICAgICAgICAgICAgICovIFwKKysgICAgIDAsICAgICAgIE5VTEwsICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIC8qIHRhcmdldF9pbmRleCwgdXNlZF9ieV9iZmQsIGNvbnN0cnVjdG9yX2NoYWluLCBvd25lciwgICAgICAgICAgKi8gIFwKKysgICAgIDAsICAgICAgICAgICAgTlVMTCwgICAgICAgIE5VTEwsICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIC8qIHN5bWJvbCwgICAgICAgICAgICAgICAgICAgIHN5bWJvbF9wdHJfcHRyLCAgICAgICAgICAgICAgICAgICAgKi8gIFwKKysgICAgIChzdHJ1Y3QgYmZkX3N5bWJvbCAqKSBTWU0sICZTRUMuc3ltYm9sLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIC8qIG1hcF9oZWFkLCBtYXBfdGFpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gIFwKKysgICAgIHsgTlVMTCB9LCB7IE5VTEwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfQorKworK3ZvaWQgYmZkX3NlY3Rpb25fbGlzdF9jbGVhciAoYmZkICopOworKworK2FzZWN0aW9uICpiZmRfZ2V0X3NlY3Rpb25fYnlfbmFtZSAoYmZkICphYmZkLCBjb25zdCBjaGFyICpuYW1lKTsKKysKKythc2VjdGlvbiAqYmZkX2dldF9zZWN0aW9uX2J5X25hbWVfaWYKKysgICAoYmZkICphYmZkLAorKyAgICBjb25zdCBjaGFyICpuYW1lLAorKyAgICBiZmRfYm9vbGVhbiAoKmZ1bmMpIChiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWN0LCB2b2lkICpvYmopLAorKyAgICB2b2lkICpvYmopOworKworK2NoYXIgKmJmZF9nZXRfdW5pcXVlX3NlY3Rpb25fbmFtZQorKyAgIChiZmQgKmFiZmQsIGNvbnN0IGNoYXIgKnRlbXBsYXQsIGludCAqY291bnQpOworKworK2FzZWN0aW9uICpiZmRfbWFrZV9zZWN0aW9uX29sZF93YXkgKGJmZCAqYWJmZCwgY29uc3QgY2hhciAqbmFtZSk7CisrCisrYXNlY3Rpb24gKmJmZF9tYWtlX3NlY3Rpb25fYW55d2F5X3dpdGhfZmxhZ3MKKysgICAoYmZkICphYmZkLCBjb25zdCBjaGFyICpuYW1lLCBmbGFnd29yZCBmbGFncyk7CisrCisrYXNlY3Rpb24gKmJmZF9tYWtlX3NlY3Rpb25fYW55d2F5IChiZmQgKmFiZmQsIGNvbnN0IGNoYXIgKm5hbWUpOworKworK2FzZWN0aW9uICpiZmRfbWFrZV9zZWN0aW9uX3dpdGhfZmxhZ3MKKysgICAoYmZkICosIGNvbnN0IGNoYXIgKm5hbWUsIGZsYWd3b3JkIGZsYWdzKTsKKysKKythc2VjdGlvbiAqYmZkX21ha2Vfc2VjdGlvbiAoYmZkICosIGNvbnN0IGNoYXIgKm5hbWUpOworKworK2JmZF9ib29sZWFuIGJmZF9zZXRfc2VjdGlvbl9mbGFncworKyAgIChiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWMsIGZsYWd3b3JkIGZsYWdzKTsKKysKKyt2b2lkIGJmZF9tYXBfb3Zlcl9zZWN0aW9ucworKyAgIChiZmQgKmFiZmQsCisrICAgIHZvaWQgKCpmdW5jKSAoYmZkICphYmZkLCBhc2VjdGlvbiAqc2VjdCwgdm9pZCAqb2JqKSwKKysgICAgdm9pZCAqb2JqKTsKKysKKythc2VjdGlvbiAqYmZkX3NlY3Rpb25zX2ZpbmRfaWYKKysgICAoYmZkICphYmZkLAorKyAgICBiZmRfYm9vbGVhbiAoKm9wZXJhdGlvbikgKGJmZCAqYWJmZCwgYXNlY3Rpb24gKnNlY3QsIHZvaWQgKm9iaiksCisrICAgIHZvaWQgKm9iaik7CisrCisrYmZkX2Jvb2xlYW4gYmZkX3NldF9zZWN0aW9uX3NpemUKKysgICAoYmZkICphYmZkLCBhc2VjdGlvbiAqc2VjLCBiZmRfc2l6ZV90eXBlIHZhbCk7CisrCisrYmZkX2Jvb2xlYW4gYmZkX3NldF9zZWN0aW9uX2NvbnRlbnRzCisrICAgKGJmZCAqYWJmZCwgYXNlY3Rpb24gKnNlY3Rpb24sIGNvbnN0IHZvaWQgKmRhdGEsCisrICAgIGZpbGVfcHRyIG9mZnNldCwgYmZkX3NpemVfdHlwZSBjb3VudCk7CisrCisrYmZkX2Jvb2xlYW4gYmZkX2dldF9zZWN0aW9uX2NvbnRlbnRzCisrICAgKGJmZCAqYWJmZCwgYXNlY3Rpb24gKnNlY3Rpb24sIHZvaWQgKmxvY2F0aW9uLCBmaWxlX3B0ciBvZmZzZXQsCisrICAgIGJmZF9zaXplX3R5cGUgY291bnQpOworKworK2JmZF9ib29sZWFuIGJmZF9tYWxsb2NfYW5kX2dldF9zZWN0aW9uCisrICAgKGJmZCAqYWJmZCwgYXNlY3Rpb24gKnNlY3Rpb24sIGJmZF9ieXRlICoqYnVmKTsKKysKKytiZmRfYm9vbGVhbiBiZmRfY29weV9wcml2YXRlX3NlY3Rpb25fZGF0YQorKyAgIChiZmQgKmliZmQsIGFzZWN0aW9uICppc2VjLCBiZmQgKm9iZmQsIGFzZWN0aW9uICpvc2VjKTsKKysKKysjZGVmaW5lIGJmZF9jb3B5X3ByaXZhdGVfc2VjdGlvbl9kYXRhKGliZmQsIGlzZWN0aW9uLCBvYmZkLCBvc2VjdGlvbikgXAorKyAgICAgQkZEX1NFTkQgKG9iZmQsIF9iZmRfY29weV9wcml2YXRlX3NlY3Rpb25fZGF0YSwgXAorKyAgICAgICAgICAgICAgIChpYmZkLCBpc2VjdGlvbiwgb2JmZCwgb3NlY3Rpb24pKQorK2JmZF9ib29sZWFuIGJmZF9nZW5lcmljX2lzX2dyb3VwX3NlY3Rpb24gKGJmZCAqLCBjb25zdCBhc2VjdGlvbiAqc2VjKTsKKysKKytiZmRfYm9vbGVhbiBiZmRfZ2VuZXJpY19kaXNjYXJkX2dyb3VwIChiZmQgKmFiZmQsIGFzZWN0aW9uICpncm91cCk7CisrCisrLyogRXh0cmFjdGVkIGZyb20gYXJjaHVyZXMuYy4gICovCisrZW51bSBiZmRfYXJjaGl0ZWN0dXJlCisreworKyAgYmZkX2FyY2hfdW5rbm93biwgICAvKiBGaWxlIGFyY2ggbm90IGtub3duLiAgKi8KKysgIGJmZF9hcmNoX29ic2N1cmUsICAgLyogQXJjaCBrbm93biwgbm90IG9uZSBvZiB0aGVzZS4gICovCisrICBiZmRfYXJjaF9tNjhrLCAgICAgIC8qIE1vdG9yb2xhIDY4eHh4ICovCisrI2RlZmluZSBiZmRfbWFjaF9tNjgwMDAgMQorKyNkZWZpbmUgYmZkX21hY2hfbTY4MDA4IDIKKysjZGVmaW5lIGJmZF9tYWNoX202ODAxMCAzCisrI2RlZmluZSBiZmRfbWFjaF9tNjgwMjAgNAorKyNkZWZpbmUgYmZkX21hY2hfbTY4MDMwIDUKKysjZGVmaW5lIGJmZF9tYWNoX202ODA0MCA2CisrI2RlZmluZSBiZmRfbWFjaF9tNjgwNjAgNworKyNkZWZpbmUgYmZkX21hY2hfY3B1MzIgIDgKKysjZGVmaW5lIGJmZF9tYWNoX2ZpZG8gICA5CisrI2RlZmluZSBiZmRfbWFjaF9tY2ZfaXNhX2Ffbm9kaXYgMTAKKysjZGVmaW5lIGJmZF9tYWNoX21jZl9pc2FfYSAxMQorKyNkZWZpbmUgYmZkX21hY2hfbWNmX2lzYV9hX21hYyAxMgorKyNkZWZpbmUgYmZkX21hY2hfbWNmX2lzYV9hX2VtYWMgMTMKKysjZGVmaW5lIGJmZF9tYWNoX21jZl9pc2FfYXBsdXMgMTQKKysjZGVmaW5lIGJmZF9tYWNoX21jZl9pc2FfYXBsdXNfbWFjIDE1CisrI2RlZmluZSBiZmRfbWFjaF9tY2ZfaXNhX2FwbHVzX2VtYWMgMTYKKysjZGVmaW5lIGJmZF9tYWNoX21jZl9pc2FfYl9ub3VzcCAxNworKyNkZWZpbmUgYmZkX21hY2hfbWNmX2lzYV9iX25vdXNwX21hYyAxOAorKyNkZWZpbmUgYmZkX21hY2hfbWNmX2lzYV9iX25vdXNwX2VtYWMgMTkKKysjZGVmaW5lIGJmZF9tYWNoX21jZl9pc2FfYiAyMAorKyNkZWZpbmUgYmZkX21hY2hfbWNmX2lzYV9iX21hYyAyMQorKyNkZWZpbmUgYmZkX21hY2hfbWNmX2lzYV9iX2VtYWMgMjIKKysjZGVmaW5lIGJmZF9tYWNoX21jZl9pc2FfYl9mbG9hdCAyMworKyNkZWZpbmUgYmZkX21hY2hfbWNmX2lzYV9iX2Zsb2F0X21hYyAyNAorKyNkZWZpbmUgYmZkX21hY2hfbWNmX2lzYV9iX2Zsb2F0X2VtYWMgMjUKKysjZGVmaW5lIGJmZF9tYWNoX21jZl9pc2FfYyAyNgorKyNkZWZpbmUgYmZkX21hY2hfbWNmX2lzYV9jX21hYyAyNworKyNkZWZpbmUgYmZkX21hY2hfbWNmX2lzYV9jX2VtYWMgMjgKKysgIGJmZF9hcmNoX3ZheCwgICAgICAgLyogREVDIFZheCAqLworKyAgYmZkX2FyY2hfaTk2MCwgICAgICAvKiBJbnRlbCA5NjAgKi8KKysgICAgLyogVGhlIG9yZGVyIG9mIHRoZSBmb2xsb3dpbmcgaXMgaW1wb3J0YW50LgorKyAgICAgICBsb3dlciBudW1iZXIgaW5kaWNhdGVzIGEgbWFjaGluZSB0eXBlIHRoYXQKKysgICAgICAgb25seSBhY2NlcHRzIGEgc3Vic2V0IG9mIHRoZSBpbnN0cnVjdGlvbnMKKysgICAgICAgYXZhaWxhYmxlIHRvIG1hY2hpbmVzIHdpdGggaGlnaGVyIG51bWJlcnMuCisrICAgICAgIFRoZSBleGNlcHRpb24gaXMgdGhlICJjYSIsIHdoaWNoIGlzCisrICAgICAgIGluY29tcGF0aWJsZSB3aXRoIGFsbCBvdGhlciBtYWNoaW5lcyBleGNlcHQKKysgICAgICAgImNvcmUiLiAgKi8KKysKKysjZGVmaW5lIGJmZF9tYWNoX2k5NjBfY29yZSAgICAgIDEKKysjZGVmaW5lIGJmZF9tYWNoX2k5NjBfa2Ffc2EgICAgIDIKKysjZGVmaW5lIGJmZF9tYWNoX2k5NjBfa2Jfc2IgICAgIDMKKysjZGVmaW5lIGJmZF9tYWNoX2k5NjBfbWMgICAgICAgIDQKKysjZGVmaW5lIGJmZF9tYWNoX2k5NjBfeGEgICAgICAgIDUKKysjZGVmaW5lIGJmZF9tYWNoX2k5NjBfY2EgICAgICAgIDYKKysjZGVmaW5lIGJmZF9tYWNoX2k5NjBfanggICAgICAgIDcKKysjZGVmaW5lIGJmZF9tYWNoX2k5NjBfaHggICAgICAgIDgKKysKKysgIGJmZF9hcmNoX29yMzIsICAgICAgLyogT3BlblJJU0MgMzIgKi8KKysKKysgIGJmZF9hcmNoX3NwYXJjLCAgICAgLyogU1BBUkMgKi8KKysjZGVmaW5lIGJmZF9tYWNoX3NwYXJjICAgICAgICAgICAgICAgICAxCisrLyogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB2OHBsdXMgYW5kIHY5IGlzIHRoYXQgdjkgaXMgYSB0cnVlIDY0IGJpdCBlbnYuICAqLworKyNkZWZpbmUgYmZkX21hY2hfc3BhcmNfc3BhcmNsZXQgICAgICAgIDIKKysjZGVmaW5lIGJmZF9tYWNoX3NwYXJjX3NwYXJjbGl0ZSAgICAgICAzCisrI2RlZmluZSBiZmRfbWFjaF9zcGFyY192OHBsdXMgICAgICAgICAgNAorKyNkZWZpbmUgYmZkX21hY2hfc3BhcmNfdjhwbHVzYSAgICAgICAgIDUgLyogd2l0aCB1bHRyYXNwYXJjIGFkZCducy4gICovCisrI2RlZmluZSBiZmRfbWFjaF9zcGFyY19zcGFyY2xpdGVfbGUgICAgNgorKyNkZWZpbmUgYmZkX21hY2hfc3BhcmNfdjkgICAgICAgICAgICAgIDcKKysjZGVmaW5lIGJmZF9tYWNoX3NwYXJjX3Y5YSAgICAgICAgICAgICA4IC8qIHdpdGggdWx0cmFzcGFyYyBhZGQnbnMuICAqLworKyNkZWZpbmUgYmZkX21hY2hfc3BhcmNfdjhwbHVzYiAgICAgICAgIDkgLyogd2l0aCBjaGVldGFoIGFkZCducy4gICovCisrI2RlZmluZSBiZmRfbWFjaF9zcGFyY192OWIgICAgICAgICAgICAgMTAgLyogd2l0aCBjaGVldGFoIGFkZCducy4gICovCisrLyogTm9uemVybyBpZiBNQUNIIGhhcyB0aGUgdjkgaW5zdHJ1Y3Rpb24gc2V0LiAgKi8KKysjZGVmaW5lIGJmZF9tYWNoX3NwYXJjX3Y5X3AobWFjaCkgXAorKyAgKChtYWNoKSA+PSBiZmRfbWFjaF9zcGFyY192OHBsdXMgJiYgKG1hY2gpIDw9IGJmZF9tYWNoX3NwYXJjX3Y5YiBcCisrICAgJiYgKG1hY2gpICE9IGJmZF9tYWNoX3NwYXJjX3NwYXJjbGl0ZV9sZSkKKysvKiBOb256ZXJvIGlmIE1BQ0ggaXMgYSA2NCBiaXQgc3BhcmMgYXJjaGl0ZWN0dXJlLiAgKi8KKysjZGVmaW5lIGJmZF9tYWNoX3NwYXJjXzY0Yml0X3AobWFjaCkgXAorKyAgKChtYWNoKSA+PSBiZmRfbWFjaF9zcGFyY192OSAmJiAobWFjaCkgIT0gYmZkX21hY2hfc3BhcmNfdjhwbHVzYikKKysgIGJmZF9hcmNoX3NwdSwgICAgICAgLyogUG93ZXJQQyBTUFUgKi8KKysjZGVmaW5lIGJmZF9tYWNoX3NwdSAgICAgICAgICAgMjU2IAorKyAgYmZkX2FyY2hfbWlwcywgICAgICAvKiBNSVBTIFJ4eHh4ICovCisrI2RlZmluZSBiZmRfbWFjaF9taXBzMzAwMCAgICAgICAgICAgICAgMzAwMAorKyNkZWZpbmUgYmZkX21hY2hfbWlwczM5MDAgICAgICAgICAgICAgIDM5MDAKKysjZGVmaW5lIGJmZF9tYWNoX21pcHM0MDAwICAgICAgICAgICAgICA0MDAwCisrI2RlZmluZSBiZmRfbWFjaF9taXBzNDAxMCAgICAgICAgICAgICAgNDAxMAorKyNkZWZpbmUgYmZkX21hY2hfbWlwczQxMDAgICAgICAgICAgICAgIDQxMDAKKysjZGVmaW5lIGJmZF9tYWNoX21pcHM0MTExICAgICAgICAgICAgICA0MTExCisrI2RlZmluZSBiZmRfbWFjaF9taXBzNDEyMCAgICAgICAgICAgICAgNDEyMAorKyNkZWZpbmUgYmZkX21hY2hfbWlwczQzMDAgICAgICAgICAgICAgIDQzMDAKKysjZGVmaW5lIGJmZF9tYWNoX21pcHM0NDAwICAgICAgICAgICAgICA0NDAwCisrI2RlZmluZSBiZmRfbWFjaF9taXBzNDYwMCAgICAgICAgICAgICAgNDYwMAorKyNkZWZpbmUgYmZkX21hY2hfbWlwczQ2NTAgICAgICAgICAgICAgIDQ2NTAKKysjZGVmaW5lIGJmZF9tYWNoX21pcHM1MDAwICAgICAgICAgICAgICA1MDAwCisrI2RlZmluZSBiZmRfbWFjaF9taXBzNTQwMCAgICAgICAgICAgICAgNTQwMAorKyNkZWZpbmUgYmZkX21hY2hfbWlwczU1MDAgICAgICAgICAgICAgIDU1MDAKKysjZGVmaW5lIGJmZF9tYWNoX21pcHM2MDAwICAgICAgICAgICAgICA2MDAwCisrI2RlZmluZSBiZmRfbWFjaF9taXBzNzAwMCAgICAgICAgICAgICAgNzAwMAorKyNkZWZpbmUgYmZkX21hY2hfbWlwczgwMDAgICAgICAgICAgICAgIDgwMDAKKysjZGVmaW5lIGJmZF9tYWNoX21pcHM5MDAwICAgICAgICAgICAgICA5MDAwCisrI2RlZmluZSBiZmRfbWFjaF9taXBzMTAwMDAgICAgICAgICAgICAgMTAwMDAKKysjZGVmaW5lIGJmZF9tYWNoX21pcHMxMjAwMCAgICAgICAgICAgICAxMjAwMAorKyNkZWZpbmUgYmZkX21hY2hfbWlwczE2ICAgICAgICAgICAgICAgIDE2CisrI2RlZmluZSBiZmRfbWFjaF9taXBzNSAgICAgICAgICAgICAgICAgNQorKyNkZWZpbmUgYmZkX21hY2hfbWlwc19zYjEgICAgICAgICAgICAgIDEyMzEwMjAxIC8qIG9jdGFsICdTQicsIDAxICovCisrI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzIgICAgICAgICAgICAgMzIKKysjZGVmaW5lIGJmZF9tYWNoX21pcHNpc2EzMnIyICAgICAgICAgICAzMworKyNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTY0ICAgICAgICAgICAgIDY0CisrI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhNjRyMiAgICAgICAgICAgNjUKKysgIGJmZF9hcmNoX2kzODYsICAgICAgLyogSW50ZWwgMzg2ICovCisrI2RlZmluZSBiZmRfbWFjaF9pMzg2X2kzODYgMQorKyNkZWZpbmUgYmZkX21hY2hfaTM4Nl9pODA4NiAyCisrI2RlZmluZSBiZmRfbWFjaF9pMzg2X2kzODZfaW50ZWxfc3ludGF4IDMKKysjZGVmaW5lIGJmZF9tYWNoX3g4Nl82NCA2NAorKyNkZWZpbmUgYmZkX21hY2hfeDg2XzY0X2ludGVsX3N5bnRheCA2NQorKyAgYmZkX2FyY2hfd2UzMmssICAgICAvKiBBVCZUIFdFMzJ4eHggKi8KKysgIGJmZF9hcmNoX3RhaG9lLCAgICAgLyogQ0NJL0hhcnJpcyBUYWhvZSAqLworKyAgYmZkX2FyY2hfaTg2MCwgICAgICAvKiBJbnRlbCA4NjAgKi8KKysgIGJmZF9hcmNoX2kzNzAsICAgICAgLyogSUJNIDM2MC8zNzAgTWFpbmZyYW1lcyAqLworKyAgYmZkX2FyY2hfcm9tcCwgICAgICAvKiBJQk0gUk9NUCBQQy9SVCAqLworKyAgYmZkX2FyY2hfY29udmV4LCAgICAvKiBDb252ZXggKi8KKysgIGJmZF9hcmNoX204OGssICAgICAgLyogTW90b3JvbGEgODh4eHggKi8KKysgIGJmZF9hcmNoX205OGssICAgICAgLyogTW90b3JvbGEgOTh4eHggKi8KKysgIGJmZF9hcmNoX3B5cmFtaWQsICAgLyogUHlyYW1pZCBUZWNobm9sb2d5ICovCisrICBiZmRfYXJjaF9oODMwMCwgICAgIC8qIFJlbmVzYXMgSDgvMzAwIChmb3JtZXJseSBIaXRhY2hpIEg4LzMwMCkgKi8KKysjZGVmaW5lIGJmZF9tYWNoX2g4MzAwICAgIDEKKysjZGVmaW5lIGJmZF9tYWNoX2g4MzAwaCAgIDIKKysjZGVmaW5lIGJmZF9tYWNoX2g4MzAwcyAgIDMKKysjZGVmaW5lIGJmZF9tYWNoX2g4MzAwaG4gIDQKKysjZGVmaW5lIGJmZF9tYWNoX2g4MzAwc24gIDUKKysjZGVmaW5lIGJmZF9tYWNoX2g4MzAwc3ggIDYKKysjZGVmaW5lIGJmZF9tYWNoX2g4MzAwc3huIDcKKysgIGJmZF9hcmNoX3BkcDExLCAgICAgLyogREVDIFBEUC0xMSAqLworKyAgYmZkX2FyY2hfcG93ZXJwYywgICAvKiBQb3dlclBDICovCisrI2RlZmluZSBiZmRfbWFjaF9wcGMgICAgICAgICAgIDMyCisrI2RlZmluZSBiZmRfbWFjaF9wcGM2NCAgICAgICAgIDY0CisrI2RlZmluZSBiZmRfbWFjaF9wcGNfNDAzICAgICAgIDQwMworKyNkZWZpbmUgYmZkX21hY2hfcHBjXzQwM2djICAgICA0MDMwCisrI2RlZmluZSBiZmRfbWFjaF9wcGNfNTA1ICAgICAgIDUwNQorKyNkZWZpbmUgYmZkX21hY2hfcHBjXzYwMSAgICAgICA2MDEKKysjZGVmaW5lIGJmZF9tYWNoX3BwY182MDIgICAgICAgNjAyCisrI2RlZmluZSBiZmRfbWFjaF9wcGNfNjAzICAgICAgIDYwMworKyNkZWZpbmUgYmZkX21hY2hfcHBjX2VjNjAzZSAgICA2MDMxCisrI2RlZmluZSBiZmRfbWFjaF9wcGNfNjA0ICAgICAgIDYwNAorKyNkZWZpbmUgYmZkX21hY2hfcHBjXzYyMCAgICAgICA2MjAKKysjZGVmaW5lIGJmZF9tYWNoX3BwY182MzAgICAgICAgNjMwCisrI2RlZmluZSBiZmRfbWFjaF9wcGNfNzUwICAgICAgIDc1MAorKyNkZWZpbmUgYmZkX21hY2hfcHBjXzg2MCAgICAgICA4NjAKKysjZGVmaW5lIGJmZF9tYWNoX3BwY19hMzUgICAgICAgMzUKKysjZGVmaW5lIGJmZF9tYWNoX3BwY19yczY0aWkgICAgNjQyCisrI2RlZmluZSBiZmRfbWFjaF9wcGNfcnM2NGlpaSAgIDY0MworKyNkZWZpbmUgYmZkX21hY2hfcHBjXzc0MDAgICAgICA3NDAwCisrI2RlZmluZSBiZmRfbWFjaF9wcGNfZTUwMCAgICAgIDUwMAorKyAgYmZkX2FyY2hfcnM2MDAwLCAgICAvKiBJQk0gUlMvNjAwMCAqLworKyNkZWZpbmUgYmZkX21hY2hfcnM2ayAgICAgICAgICA2MDAwCisrI2RlZmluZSBiZmRfbWFjaF9yczZrX3JzMSAgICAgIDYwMDEKKysjZGVmaW5lIGJmZF9tYWNoX3JzNmtfcnNjICAgICAgNjAwMworKyNkZWZpbmUgYmZkX21hY2hfcnM2a19yczIgICAgICA2MDAyCisrICBiZmRfYXJjaF9ocHBhLCAgICAgIC8qIEhQIFBBIFJJU0MgKi8KKysjZGVmaW5lIGJmZF9tYWNoX2hwcGExMCAgICAgICAgMTAKKysjZGVmaW5lIGJmZF9tYWNoX2hwcGExMSAgICAgICAgMTEKKysjZGVmaW5lIGJmZF9tYWNoX2hwcGEyMCAgICAgICAgMjAKKysjZGVmaW5lIGJmZF9tYWNoX2hwcGEyMHcgICAgICAgMjUKKysgIGJmZF9hcmNoX2QxMHYsICAgICAgLyogTWl0c3ViaXNoaSBEMTBWICovCisrI2RlZmluZSBiZmRfbWFjaF9kMTB2ICAgICAgICAgIDEKKysjZGVmaW5lIGJmZF9tYWNoX2QxMHZfdHMyICAgICAgMgorKyNkZWZpbmUgYmZkX21hY2hfZDEwdl90czMgICAgICAzCisrICBiZmRfYXJjaF9kMzB2LCAgICAgIC8qIE1pdHN1YmlzaGkgRDMwViAqLworKyAgYmZkX2FyY2hfZGx4LCAgICAgICAvKiBETFggKi8KKysgIGJmZF9hcmNoX202OGhjMTEsICAgLyogTW90b3JvbGEgNjhIQzExICovCisrICBiZmRfYXJjaF9tNjhoYzEyLCAgIC8qIE1vdG9yb2xhIDY4SEMxMiAqLworKyNkZWZpbmUgYmZkX21hY2hfbTY4MTJfZGVmYXVsdCAwCisrI2RlZmluZSBiZmRfbWFjaF9tNjgxMiAgICAgICAgIDEKKysjZGVmaW5lIGJmZF9tYWNoX202ODEycyAgICAgICAgMgorKyAgYmZkX2FyY2hfejhrLCAgICAgICAvKiBaaWxvZyBaODAwMCAqLworKyNkZWZpbmUgYmZkX21hY2hfejgwMDEgICAgICAgICAxCisrI2RlZmluZSBiZmRfbWFjaF96ODAwMiAgICAgICAgIDIKKysgIGJmZF9hcmNoX2g4NTAwLCAgICAgLyogUmVuZXNhcyBIOC81MDAgKGZvcm1lcmx5IEhpdGFjaGkgSDgvNTAwKSAqLworKyAgYmZkX2FyY2hfc2gsICAgICAgICAvKiBSZW5lc2FzIC8gU3VwZXJIIFNIIChmb3JtZXJseSBIaXRhY2hpIFNIKSAqLworKyNkZWZpbmUgYmZkX21hY2hfc2ggICAgICAgICAgICAxCisrI2RlZmluZSBiZmRfbWFjaF9zaDIgICAgICAgIDB4MjAKKysjZGVmaW5lIGJmZF9tYWNoX3NoX2RzcCAgICAgMHgyZAorKyNkZWZpbmUgYmZkX21hY2hfc2gyYSAgICAgICAweDJhCisrI2RlZmluZSBiZmRfbWFjaF9zaDJhX25vZnB1IDB4MmIKKysjZGVmaW5lIGJmZF9tYWNoX3NoMmFfbm9mcHVfb3Jfc2g0X25vbW11X25vZnB1IDB4MmExCisrI2RlZmluZSBiZmRfbWFjaF9zaDJhX25vZnB1X29yX3NoM19ub21tdSAweDJhMgorKyNkZWZpbmUgYmZkX21hY2hfc2gyYV9vcl9zaDQgIDB4MmEzCisrI2RlZmluZSBiZmRfbWFjaF9zaDJhX29yX3NoM2UgMHgyYTQKKysjZGVmaW5lIGJmZF9tYWNoX3NoMmUgICAgICAgMHgyZQorKyNkZWZpbmUgYmZkX21hY2hfc2gzICAgICAgICAweDMwCisrI2RlZmluZSBiZmRfbWFjaF9zaDNfbm9tbXUgIDB4MzEKKysjZGVmaW5lIGJmZF9tYWNoX3NoM19kc3AgICAgMHgzZAorKyNkZWZpbmUgYmZkX21hY2hfc2gzZSAgICAgICAweDNlCisrI2RlZmluZSBiZmRfbWFjaF9zaDQgICAgICAgIDB4NDAKKysjZGVmaW5lIGJmZF9tYWNoX3NoNF9ub2ZwdSAgMHg0MQorKyNkZWZpbmUgYmZkX21hY2hfc2g0X25vbW11X25vZnB1ICAweDQyCisrI2RlZmluZSBiZmRfbWFjaF9zaDRhICAgICAgIDB4NGEKKysjZGVmaW5lIGJmZF9tYWNoX3NoNGFfbm9mcHUgMHg0YgorKyNkZWZpbmUgYmZkX21hY2hfc2g0YWxfZHNwICAweDRkCisrI2RlZmluZSBiZmRfbWFjaF9zaDUgICAgICAgIDB4NTAKKysgIGJmZF9hcmNoX2FscGhhLCAgICAgLyogRGVjIEFscGhhICovCisrI2RlZmluZSBiZmRfbWFjaF9hbHBoYV9ldjQgIDB4MTAKKysjZGVmaW5lIGJmZF9tYWNoX2FscGhhX2V2NSAgMHgyMAorKyNkZWZpbmUgYmZkX21hY2hfYWxwaGFfZXY2ICAweDMwCisrICBiZmRfYXJjaF9hcm0sICAgICAgIC8qIEFkdmFuY2VkIFJpc2MgTWFjaGluZXMgQVJNLiAgKi8KKysjZGVmaW5lIGJmZF9tYWNoX2FybV91bmtub3duICAgMAorKyNkZWZpbmUgYmZkX21hY2hfYXJtXzIgICAgICAgICAxCisrI2RlZmluZSBiZmRfbWFjaF9hcm1fMmEgICAgICAgIDIKKysjZGVmaW5lIGJmZF9tYWNoX2FybV8zICAgICAgICAgMworKyNkZWZpbmUgYmZkX21hY2hfYXJtXzNNICAgICAgICA0CisrI2RlZmluZSBiZmRfbWFjaF9hcm1fNCAgICAgICAgIDUKKysjZGVmaW5lIGJmZF9tYWNoX2FybV80VCAgICAgICAgNgorKyNkZWZpbmUgYmZkX21hY2hfYXJtXzUgICAgICAgICA3CisrI2RlZmluZSBiZmRfbWFjaF9hcm1fNVQgICAgICAgIDgKKysjZGVmaW5lIGJmZF9tYWNoX2FybV81VEUgICAgICAgOQorKyNkZWZpbmUgYmZkX21hY2hfYXJtX1hTY2FsZSAgICAxMAorKyNkZWZpbmUgYmZkX21hY2hfYXJtX2VwOTMxMiAgICAxMQorKyNkZWZpbmUgYmZkX21hY2hfYXJtX2lXTU1YdCAgICAxMgorKyNkZWZpbmUgYmZkX21hY2hfYXJtX2lXTU1YdDIgICAxMworKyAgYmZkX2FyY2hfbnMzMmssICAgICAvKiBOYXRpb25hbCBTZW1pY29uZHVjdG9ycyBuczMyMDAwICovCisrICBiZmRfYXJjaF93NjUsICAgICAgIC8qIFdEQyA2NTgxNiAqLworKyAgYmZkX2FyY2hfdGljMzAsICAgICAvKiBUZXhhcyBJbnN0cnVtZW50cyBUTVMzMjBDMzAgKi8KKysgIGJmZF9hcmNoX3RpYzR4LCAgICAgLyogVGV4YXMgSW5zdHJ1bWVudHMgVE1TMzIwQzNYLzRYICovCisrI2RlZmluZSBiZmRfbWFjaF90aWMzeCAgICAgICAgIDMwCisrI2RlZmluZSBiZmRfbWFjaF90aWM0eCAgICAgICAgIDQwCisrICBiZmRfYXJjaF90aWM1NHgsICAgIC8qIFRleGFzIEluc3RydW1lbnRzIFRNUzMyMEM1NFggKi8KKysgIGJmZF9hcmNoX3RpYzgwLCAgICAgLyogVEkgVE1TMzIwYzgwIChNVlApICovCisrICBiZmRfYXJjaF92ODUwLCAgICAgIC8qIE5FQyBWODUwICovCisrI2RlZmluZSBiZmRfbWFjaF92ODUwICAgICAgICAgIDEKKysjZGVmaW5lIGJmZF9tYWNoX3Y4NTBlICAgICAgICAgJ0UnCisrI2RlZmluZSBiZmRfbWFjaF92ODUwZTEgICAgICAgICcxJworKyAgYmZkX2FyY2hfYXJjLCAgICAgICAvKiBBUkMgQ29yZXMgKi8KKysjZGVmaW5lIGJmZF9tYWNoX2FyY181ICAgICAgICAgNQorKyNkZWZpbmUgYmZkX21hY2hfYXJjXzYgICAgICAgICA2CisrI2RlZmluZSBiZmRfbWFjaF9hcmNfNyAgICAgICAgIDcKKysjZGVmaW5lIGJmZF9tYWNoX2FyY184ICAgICAgICAgOAorKyBiZmRfYXJjaF9tMzJjLCAgICAgLyogUmVuZXNhcyBNMTZDL00zMkMuICAqLworKyNkZWZpbmUgYmZkX21hY2hfbTE2YyAgICAgICAgMHg3NQorKyNkZWZpbmUgYmZkX21hY2hfbTMyYyAgICAgICAgMHg3OAorKyAgYmZkX2FyY2hfbTMyciwgICAgICAvKiBSZW5lc2FzIE0zMlIgKGZvcm1lcmx5IE1pdHN1YmlzaGkgTTMyUi9EKSAqLworKyNkZWZpbmUgYmZkX21hY2hfbTMyciAgICAgICAgICAxIC8qIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gICovCisrI2RlZmluZSBiZmRfbWFjaF9tMzJyeCAgICAgICAgICd4JworKyNkZWZpbmUgYmZkX21hY2hfbTMycjIgICAgICAgICAnMicKKysgIGJmZF9hcmNoX21uMTAyMDAsICAgLyogTWF0c3VzaGl0YSBNTjEwMjAwICovCisrICBiZmRfYXJjaF9tbjEwMzAwLCAgIC8qIE1hdHN1c2hpdGEgTU4xMDMwMCAqLworKyNkZWZpbmUgYmZkX21hY2hfbW4xMDMwMCAgICAgICAgICAgICAgIDMwMAorKyNkZWZpbmUgYmZkX21hY2hfYW0zMyAgICAgICAgICAzMzAKKysjZGVmaW5lIGJmZF9tYWNoX2FtMzNfMiAgICAgICAgMzMyCisrICBiZmRfYXJjaF9mcjMwLAorKyNkZWZpbmUgYmZkX21hY2hfZnIzMCAgICAgICAgICAweDQ2NTIzMzMwCisrICBiZmRfYXJjaF9mcnYsCisrI2RlZmluZSBiZmRfbWFjaF9mcnYgICAgICAgICAgIDEKKysjZGVmaW5lIGJmZF9tYWNoX2ZydnNpbXBsZSAgICAgMgorKyNkZWZpbmUgYmZkX21hY2hfZnIzMDAgICAgICAgICAzMDAKKysjZGVmaW5lIGJmZF9tYWNoX2ZyNDAwICAgICAgICAgNDAwCisrI2RlZmluZSBiZmRfbWFjaF9mcjQ1MCAgICAgICAgIDQ1MAorKyNkZWZpbmUgYmZkX21hY2hfZnJ2dG9tY2F0ICAgICA0OTkgICAgIC8qIGZyNTAwIHByb3RvdHlwZSAqLworKyNkZWZpbmUgYmZkX21hY2hfZnI1MDAgICAgICAgICA1MDAKKysjZGVmaW5lIGJmZF9tYWNoX2ZyNTUwICAgICAgICAgNTUwCisrICBiZmRfYXJjaF9tY29yZSwKKysgIGJmZF9hcmNoX21lcCwKKysjZGVmaW5lIGJmZF9tYWNoX21lcCAgICAgICAgICAgMQorKyNkZWZpbmUgYmZkX21hY2hfbWVwX2gxICAgICAgICAweDY4MzEKKysgIGJmZF9hcmNoX2lhNjQsICAgICAgLyogSFAvSW50ZWwgaWE2NCAqLworKyNkZWZpbmUgYmZkX21hY2hfaWE2NF9lbGY2NCAgICA2NAorKyNkZWZpbmUgYmZkX21hY2hfaWE2NF9lbGYzMiAgICAzMgorKyAgYmZkX2FyY2hfaXAyaywgICAgICAvKiBVYmljb20gSVAySyBtaWNyb2NvbnRyb2xsZXJzLiAqLworKyNkZWZpbmUgYmZkX21hY2hfaXAyMDIyICAgICAgICAxCisrI2RlZmluZSBiZmRfbWFjaF9pcDIwMjJleHQgICAgIDIKKysgYmZkX2FyY2hfaXEyMDAwLCAgICAgLyogVml0ZXNzZSBJUTIwMDAuICAqLworKyNkZWZpbmUgYmZkX21hY2hfaXEyMDAwICAgICAgICAxCisrI2RlZmluZSBiZmRfbWFjaF9pcTEwICAgICAgICAgIDIKKysgIGJmZF9hcmNoX210LAorKyNkZWZpbmUgYmZkX21hY2hfbXMxICAgICAgICAgICAxCisrI2RlZmluZSBiZmRfbWFjaF9tcmlzYzIgICAgICAgIDIKKysjZGVmaW5lIGJmZF9tYWNoX21zMiAgICAgICAgICAgMworKyAgYmZkX2FyY2hfcGosCisrICBiZmRfYXJjaF9hdnIsICAgICAgIC8qIEF0bWVsIEFWUiBtaWNyb2NvbnRyb2xsZXJzLiAgKi8KKysjZGVmaW5lIGJmZF9tYWNoX2F2cjEgICAgICAgICAgMQorKyNkZWZpbmUgYmZkX21hY2hfYXZyMiAgICAgICAgICAyCisrI2RlZmluZSBiZmRfbWFjaF9hdnIzICAgICAgICAgIDMKKysjZGVmaW5lIGJmZF9tYWNoX2F2cjQgICAgICAgICAgNAorKyNkZWZpbmUgYmZkX21hY2hfYXZyNSAgICAgICAgICA1CisrI2RlZmluZSBiZmRfbWFjaF9hdnI2ICAgICAgICAgIDYKKysgIGJmZF9hcmNoX2F2cjMyLCAgICAgLyogQXRtZWwgQVZSMzIgKi8KKysjZGVmaW5lIGJmZF9tYWNoX2F2cjMyX2FwICAgICAgNzAwMAorKyNkZWZpbmUgYmZkX21hY2hfYXZyMzJfdWMgICAgICAzMDAwCisrI2RlZmluZSBiZmRfbWFjaF9hdnIzMl91Y3IxICAgIDMwMDEKKysjZGVmaW5lIGJmZF9tYWNoX2F2cjMyX3VjcjIgICAgMzAwMgorKyAgYmZkX2FyY2hfYmZpbiwgICAgICAgIC8qIEFESSBCbGFja2ZpbiAqLworKyNkZWZpbmUgYmZkX21hY2hfYmZpbiAgICAgICAgICAxCisrICBiZmRfYXJjaF9jcjE2LCAgICAgICAvKiBOYXRpb25hbCBTZW1pY29uZHVjdG9yIENvbXBhY3RSSVNDIChpZSBDUjE2KS4gKi8KKysjZGVmaW5lIGJmZF9tYWNoX2NyMTYgICAgICAgICAgMQorKyAgYmZkX2FyY2hfY3IxNmMsICAgICAgIC8qIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgQ29tcGFjdFJJU0MuICovCisrI2RlZmluZSBiZmRfbWFjaF9jcjE2YyAgICAgICAgIDEKKysgIGJmZF9hcmNoX2NyeCwgICAgICAgLyogIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgQ1JYLiAgKi8KKysjZGVmaW5lIGJmZF9tYWNoX2NyeCAgICAgICAgICAgMQorKyAgYmZkX2FyY2hfY3JpcywgICAgICAvKiBBeGlzIENSSVMgKi8KKysjZGVmaW5lIGJmZF9tYWNoX2NyaXNfdjBfdjEwICAgMjU1CisrI2RlZmluZSBiZmRfbWFjaF9jcmlzX3YzMiAgICAgIDMyCisrI2RlZmluZSBiZmRfbWFjaF9jcmlzX3YxMF92MzIgIDEwMzIKKysgIGJmZF9hcmNoX3MzOTAsICAgICAgLyogSUJNIHMzOTAgKi8KKysjZGVmaW5lIGJmZF9tYWNoX3MzOTBfMzEgICAgICAgMzEKKysjZGVmaW5lIGJmZF9tYWNoX3MzOTBfNjQgICAgICAgNjQKKysgIGJmZF9hcmNoX3Njb3JlLCAgICAgLyogU3VucGx1cyBzY29yZSAqLyAKKysgIGJmZF9hcmNoX29wZW5yaXNjLCAgLyogT3BlblJJU0MgKi8KKysgIGJmZF9hcmNoX21taXgsICAgICAgLyogRG9uYWxkIEtudXRoJ3MgZWR1Y2F0aW9uYWwgcHJvY2Vzc29yLiAgKi8KKysgIGJmZF9hcmNoX3hzdG9ybXkxNiwKKysjZGVmaW5lIGJmZF9tYWNoX3hzdG9ybXkxNiAgICAgMQorKyAgYmZkX2FyY2hfbXNwNDMwLCAgICAvKiBUZXhhcyBJbnN0cnVtZW50cyBNU1A0MzAgYXJjaGl0ZWN0dXJlLiAgKi8KKysjZGVmaW5lIGJmZF9tYWNoX21zcDExICAgICAgICAgIDExCisrI2RlZmluZSBiZmRfbWFjaF9tc3AxMTAgICAgICAgICAxMTAKKysjZGVmaW5lIGJmZF9tYWNoX21zcDEyICAgICAgICAgIDEyCisrI2RlZmluZSBiZmRfbWFjaF9tc3AxMyAgICAgICAgICAxMworKyNkZWZpbmUgYmZkX21hY2hfbXNwMTQgICAgICAgICAgMTQKKysjZGVmaW5lIGJmZF9tYWNoX21zcDE1ICAgICAgICAgIDE1CisrI2RlZmluZSBiZmRfbWFjaF9tc3AxNiAgICAgICAgICAxNgorKyNkZWZpbmUgYmZkX21hY2hfbXNwMjEgICAgICAgICAgMjEKKysjZGVmaW5lIGJmZF9tYWNoX21zcDMxICAgICAgICAgIDMxCisrI2RlZmluZSBiZmRfbWFjaF9tc3AzMiAgICAgICAgICAzMgorKyNkZWZpbmUgYmZkX21hY2hfbXNwMzMgICAgICAgICAgMzMKKysjZGVmaW5lIGJmZF9tYWNoX21zcDQxICAgICAgICAgIDQxCisrI2RlZmluZSBiZmRfbWFjaF9tc3A0MiAgICAgICAgICA0MgorKyNkZWZpbmUgYmZkX21hY2hfbXNwNDMgICAgICAgICAgNDMKKysjZGVmaW5lIGJmZF9tYWNoX21zcDQ0ICAgICAgICAgIDQ0CisrICBiZmRfYXJjaF94YzE2eCwgICAgIC8qIEluZmluZW9uJ3MgWEMxNlggU2VyaWVzLiAgICAgICAgICAgICAgICovCisrI2RlZmluZSBiZmRfbWFjaF94YzE2eCAgICAgICAgIDEKKysjZGVmaW5lIGJmZF9tYWNoX3hjMTZ4bCAgICAgICAgMgorKyNkZWZpbmUgYmZkX21hY2hfeGMxNnhzICAgICAgICAgMworKyAgYmZkX2FyY2hfeHRlbnNhLCAgICAvKiBUZW5zaWxpY2EncyBYdGVuc2EgY29yZXMuICAqLworKyNkZWZpbmUgYmZkX21hY2hfeHRlbnNhICAgICAgICAxCisrICAgYmZkX2FyY2hfbWF4cSwgICAgIC8qIERhbGxhcyBNQVhRIDEwLzIwICovCisrI2RlZmluZSBiZmRfbWFjaF9tYXhxMTAgICAgMTAKKysjZGVmaW5lIGJmZF9tYWNoX21heHEyMCAgICAyMAorKyAgYmZkX2FyY2hfejgwLAorKyNkZWZpbmUgYmZkX21hY2hfejgwc3RyaWN0ICAgICAgMSAvKiBObyB1bmRvY3VtZW50ZWQgb3Bjb2Rlcy4gICovCisrI2RlZmluZSBiZmRfbWFjaF96ODAgICAgICAgICAgICAzIC8qIFdpdGggaXhsLCBpeGgsIGl5bCwgYW5kIGl5aC4gICovCisrI2RlZmluZSBiZmRfbWFjaF96ODBmdWxsICAgICAgICA3IC8qIEFsbCB1bmRvY3VtZW50ZWQgaW5zdHJ1Y3Rpb25zLiAgKi8KKysjZGVmaW5lIGJmZF9tYWNoX3I4MDAgICAgICAgICAgIDExIC8qIFI4MDA6IHN1Y2Nlc3NvciB3aXRoIG11bHRpcGxpY2F0aW9uLiAgKi8KKysgIGJmZF9hcmNoX2xhc3QKKysgIH07CisrCisrdHlwZWRlZiBzdHJ1Y3QgYmZkX2FyY2hfaW5mbworK3sKKysgIGludCBiaXRzX3Blcl93b3JkOworKyAgaW50IGJpdHNfcGVyX2FkZHJlc3M7CisrICBpbnQgYml0c19wZXJfYnl0ZTsKKysgIGVudW0gYmZkX2FyY2hpdGVjdHVyZSBhcmNoOworKyAgdW5zaWduZWQgbG9uZyBtYWNoOworKyAgY29uc3QgY2hhciAqYXJjaF9uYW1lOworKyAgY29uc3QgY2hhciAqcHJpbnRhYmxlX25hbWU7CisrICB1bnNpZ25lZCBpbnQgc2VjdGlvbl9hbGlnbl9wb3dlcjsKKysgIC8qIFRSVUUgaWYgdGhpcyBpcyB0aGUgZGVmYXVsdCBtYWNoaW5lIGZvciB0aGUgYXJjaGl0ZWN0dXJlLgorKyAgICAgVGhlIGRlZmF1bHQgYXJjaCBzaG91bGQgYmUgdGhlIGZpcnN0IGVudHJ5IGZvciBhbiBhcmNoIHNvIHRoYXQKKysgICAgIGFsbCB0aGUgZW50cmllcyBmb3IgdGhhdCBhcmNoIGNhbiBiZSBhY2Nlc3NlZCB2aWEgPDxuZXh0Pj4uICAqLworKyAgYmZkX2Jvb2xlYW4gdGhlX2RlZmF1bHQ7CisrICBjb25zdCBzdHJ1Y3QgYmZkX2FyY2hfaW5mbyAqICgqY29tcGF0aWJsZSkKKysgICAgKGNvbnN0IHN0cnVjdCBiZmRfYXJjaF9pbmZvICphLCBjb25zdCBzdHJ1Y3QgYmZkX2FyY2hfaW5mbyAqYik7CisrCisrICBiZmRfYm9vbGVhbiAoKnNjYW4pIChjb25zdCBzdHJ1Y3QgYmZkX2FyY2hfaW5mbyAqLCBjb25zdCBjaGFyICopOworKworKyAgY29uc3Qgc3RydWN0IGJmZF9hcmNoX2luZm8gKm5leHQ7CisrfQorK2JmZF9hcmNoX2luZm9fdHlwZTsKKysKKytjb25zdCBjaGFyICpiZmRfcHJpbnRhYmxlX25hbWUgKGJmZCAqYWJmZCk7CisrCisrY29uc3QgYmZkX2FyY2hfaW5mb190eXBlICpiZmRfc2Nhbl9hcmNoIChjb25zdCBjaGFyICpzdHJpbmcpOworKworK2NvbnN0IGNoYXIgKipiZmRfYXJjaF9saXN0ICh2b2lkKTsKKysKKytjb25zdCBiZmRfYXJjaF9pbmZvX3R5cGUgKmJmZF9hcmNoX2dldF9jb21wYXRpYmxlCisrICAgKGNvbnN0IGJmZCAqYWJmZCwgY29uc3QgYmZkICpiYmZkLCBiZmRfYm9vbGVhbiBhY2NlcHRfdW5rbm93bnMpOworKworK3ZvaWQgYmZkX3NldF9hcmNoX2luZm8gKGJmZCAqYWJmZCwgY29uc3QgYmZkX2FyY2hfaW5mb190eXBlICphcmcpOworKworK2VudW0gYmZkX2FyY2hpdGVjdHVyZSBiZmRfZ2V0X2FyY2ggKGJmZCAqYWJmZCk7CisrCisrdW5zaWduZWQgbG9uZyBiZmRfZ2V0X21hY2ggKGJmZCAqYWJmZCk7CisrCisrdW5zaWduZWQgaW50IGJmZF9hcmNoX2JpdHNfcGVyX2J5dGUgKGJmZCAqYWJmZCk7CisrCisrdW5zaWduZWQgaW50IGJmZF9hcmNoX2JpdHNfcGVyX2FkZHJlc3MgKGJmZCAqYWJmZCk7CisrCisrY29uc3QgYmZkX2FyY2hfaW5mb190eXBlICpiZmRfZ2V0X2FyY2hfaW5mbyAoYmZkICphYmZkKTsKKysKKytjb25zdCBiZmRfYXJjaF9pbmZvX3R5cGUgKmJmZF9sb29rdXBfYXJjaAorKyAgIChlbnVtIGJmZF9hcmNoaXRlY3R1cmUgYXJjaCwgdW5zaWduZWQgbG9uZyBtYWNoaW5lKTsKKysKKytjb25zdCBjaGFyICpiZmRfcHJpbnRhYmxlX2FyY2hfbWFjaAorKyAgIChlbnVtIGJmZF9hcmNoaXRlY3R1cmUgYXJjaCwgdW5zaWduZWQgbG9uZyBtYWNoaW5lKTsKKysKKyt1bnNpZ25lZCBpbnQgYmZkX29jdGV0c19wZXJfYnl0ZSAoYmZkICphYmZkKTsKKysKKyt1bnNpZ25lZCBpbnQgYmZkX2FyY2hfbWFjaF9vY3RldHNfcGVyX2J5dGUKKysgICAoZW51bSBiZmRfYXJjaGl0ZWN0dXJlIGFyY2gsIHVuc2lnbmVkIGxvbmcgbWFjaGluZSk7CisrCisrLyogRXh0cmFjdGVkIGZyb20gcmVsb2MuYy4gICovCisrdHlwZWRlZiBlbnVtIGJmZF9yZWxvY19zdGF0dXMKKyt7CisrICAvKiBObyBlcnJvcnMgZGV0ZWN0ZWQuICAqLworKyAgYmZkX3JlbG9jX29rLAorKworKyAgLyogVGhlIHJlbG9jYXRpb24gd2FzIHBlcmZvcm1lZCwgYnV0IHRoZXJlIHdhcyBhbiBvdmVyZmxvdy4gICovCisrICBiZmRfcmVsb2Nfb3ZlcmZsb3csCisrCisrICAvKiBUaGUgYWRkcmVzcyB0byByZWxvY2F0ZSB3YXMgbm90IHdpdGhpbiB0aGUgc2VjdGlvbiBzdXBwbGllZC4gICovCisrICBiZmRfcmVsb2Nfb3V0b2ZyYW5nZSwKKysKKysgIC8qIFVzZWQgYnkgc3BlY2lhbCBmdW5jdGlvbnMuICAqLworKyAgYmZkX3JlbG9jX2NvbnRpbnVlLAorKworKyAgLyogVW5zdXBwb3J0ZWQgcmVsb2NhdGlvbiBzaXplIHJlcXVlc3RlZC4gICovCisrICBiZmRfcmVsb2Nfbm90c3VwcG9ydGVkLAorKworKyAgLyogVW51c2VkLiAgKi8KKysgIGJmZF9yZWxvY19vdGhlciwKKysKKysgIC8qIFRoZSBzeW1ib2wgdG8gcmVsb2NhdGUgYWdhaW5zdCB3YXMgdW5kZWZpbmVkLiAgKi8KKysgIGJmZF9yZWxvY191bmRlZmluZWQsCisrCisrICAvKiBUaGUgcmVsb2NhdGlvbiB3YXMgcGVyZm9ybWVkLCBidXQgbWF5IG5vdCBiZSBvayAtIHByZXNlbnRseQorKyAgICAgZ2VuZXJhdGVkIG9ubHkgd2hlbiBsaW5raW5nIGk5NjAgY29mZiBmaWxlcyB3aXRoIGk5NjAgYi5vdXQKKysgICAgIHN5bWJvbHMuICBJZiB0aGlzIHR5cGUgaXMgcmV0dXJuZWQsIHRoZSBlcnJvcl9tZXNzYWdlIGFyZ3VtZW50CisrICAgICB0byBiZmRfcGVyZm9ybV9yZWxvY2F0aW9uIHdpbGwgYmUgc2V0LiAgKi8KKysgIGJmZF9yZWxvY19kYW5nZXJvdXMKKysgfQorKyBiZmRfcmVsb2Nfc3RhdHVzX3R5cGU7CisrCisrCisrdHlwZWRlZiBzdHJ1Y3QgcmVsb2NfY2FjaGVfZW50cnkKKyt7CisrICAvKiBBIHBvaW50ZXIgaW50byB0aGUgY2Fub25pY2FsIHRhYmxlIG9mIHBvaW50ZXJzLiAgKi8KKysgIHN0cnVjdCBiZmRfc3ltYm9sICoqc3ltX3B0cl9wdHI7CisrCisrICAvKiBvZmZzZXQgaW4gc2VjdGlvbi4gICovCisrICBiZmRfc2l6ZV90eXBlIGFkZHJlc3M7CisrCisrICAvKiBhZGRlbmQgZm9yIHJlbG9jYXRpb24gdmFsdWUuICAqLworKyAgYmZkX3ZtYSBhZGRlbmQ7CisrCisrICAvKiBQb2ludGVyIHRvIGhvdyB0byBwZXJmb3JtIHRoZSByZXF1aXJlZCByZWxvY2F0aW9uLiAgKi8KKysgIHJlbG9jX2hvd3RvX3R5cGUgKmhvd3RvOworKworK30KKythcmVsZW50OworKworK2VudW0gY29tcGxhaW5fb3ZlcmZsb3cKKyt7CisrICAvKiBEbyBub3QgY29tcGxhaW4gb24gb3ZlcmZsb3cuICAqLworKyAgY29tcGxhaW5fb3ZlcmZsb3dfZG9udCwKKysKKysgIC8qIENvbXBsYWluIGlmIHRoZSB2YWx1ZSBvdmVyZmxvd3Mgd2hlbiBjb25zaWRlcmVkIGFzIGEgc2lnbmVkCisrICAgICBudW1iZXIgb25lIGJpdCBsYXJnZXIgdGhhbiB0aGUgZmllbGQuICBpZS4gQSBiaXRmaWVsZCBvZiBOIGJpdHMKKysgICAgIGlzIGFsbG93ZWQgdG8gcmVwcmVzZW50IC0yKipuIHRvIDIqKm4tMS4gICovCisrICBjb21wbGFpbl9vdmVyZmxvd19iaXRmaWVsZCwKKysKKysgIC8qIENvbXBsYWluIGlmIHRoZSB2YWx1ZSBvdmVyZmxvd3Mgd2hlbiBjb25zaWRlcmVkIGFzIGEgc2lnbmVkCisrICAgICBudW1iZXIuICAqLworKyAgY29tcGxhaW5fb3ZlcmZsb3dfc2lnbmVkLAorKworKyAgLyogQ29tcGxhaW4gaWYgdGhlIHZhbHVlIG92ZXJmbG93cyB3aGVuIGNvbnNpZGVyZWQgYXMgYW4KKysgICAgIHVuc2lnbmVkIG51bWJlci4gICovCisrICBjb21wbGFpbl9vdmVyZmxvd191bnNpZ25lZAorK307CisrCisrc3RydWN0IHJlbG9jX2hvd3RvX3N0cnVjdAorK3sKKysgIC8qICBUaGUgdHlwZSBmaWVsZCBoYXMgbWFpbmx5IGEgZG9jdW1lbnRhcnkgdXNlIC0gdGhlIGJhY2sgZW5kIGNhbgorKyAgICAgIGRvIHdoYXQgaXQgd2FudHMgd2l0aCBpdCwgdGhvdWdoIG5vcm1hbGx5IHRoZSBiYWNrIGVuZCdzCisrICAgICAgZXh0ZXJuYWwgaWRlYSBvZiB3aGF0IGEgcmVsb2MgbnVtYmVyIGlzIHN0b3JlZAorKyAgICAgIGluIHRoaXMgZmllbGQuICBGb3IgZXhhbXBsZSwgYSBQQyByZWxhdGl2ZSB3b3JkIHJlbG9jYXRpb24KKysgICAgICBpbiBhIGNvZmYgZW52aXJvbm1lbnQgaGFzIHRoZSB0eXBlIDAyMyAtIGJlY2F1c2UgdGhhdCdzCisrICAgICAgd2hhdCB0aGUgb3V0c2lkZSB3b3JsZCBjYWxscyBhIFJfUENSV09SRCByZWxvYy4gICovCisrICB1bnNpZ25lZCBpbnQgdHlwZTsKKysKKysgIC8qICBUaGUgdmFsdWUgdGhlIGZpbmFsIHJlbG9jYXRpb24gaXMgc2hpZnRlZCByaWdodCBieS4gIFRoaXMgZHJvcHMKKysgICAgICB1bndhbnRlZCBkYXRhIGZyb20gdGhlIHJlbG9jYXRpb24uICAqLworKyAgdW5zaWduZWQgaW50IHJpZ2h0c2hpZnQ7CisrCisrICAvKiAgVGhlIHNpemUgb2YgdGhlIGl0ZW0gdG8gYmUgcmVsb2NhdGVkLiAgVGhpcyBpcyAqbm90KiBhCisrICAgICAgcG93ZXItb2YtdHdvIG1lYXN1cmUuICBUbyBnZXQgdGhlIG51bWJlciBvZiBieXRlcyBvcGVyYXRlZAorKyAgICAgIG9uIGJ5IGEgdHlwZSBvZiByZWxvY2F0aW9uLCB1c2UgYmZkX2dldF9yZWxvY19zaXplLiAgKi8KKysgIGludCBzaXplOworKworKyAgLyogIFRoZSBudW1iZXIgb2YgYml0cyBpbiB0aGUgaXRlbSB0byBiZSByZWxvY2F0ZWQuICBUaGlzIGlzIHVzZWQKKysgICAgICB3aGVuIGRvaW5nIG92ZXJmbG93IGNoZWNraW5nLiAgKi8KKysgIHVuc2lnbmVkIGludCBiaXRzaXplOworKworKyAgLyogIE5vdGVzIHRoYXQgdGhlIHJlbG9jYXRpb24gaXMgcmVsYXRpdmUgdG8gdGhlIGxvY2F0aW9uIGluIHRoZQorKyAgICAgIGRhdGEgc2VjdGlvbiBvZiB0aGUgYWRkZW5kLiAgVGhlIHJlbG9jYXRpb24gZnVuY3Rpb24gd2lsbAorKyAgICAgIHN1YnRyYWN0IGZyb20gdGhlIHJlbG9jYXRpb24gdmFsdWUgdGhlIGFkZHJlc3Mgb2YgdGhlIGxvY2F0aW9uCisrICAgICAgYmVpbmcgcmVsb2NhdGVkLiAgKi8KKysgIGJmZF9ib29sZWFuIHBjX3JlbGF0aXZlOworKworKyAgLyogIFRoZSBiaXQgcG9zaXRpb24gb2YgdGhlIHJlbG9jIHZhbHVlIGluIHRoZSBkZXN0aW5hdGlvbi4KKysgICAgICBUaGUgcmVsb2NhdGVkIHZhbHVlIGlzIGxlZnQgc2hpZnRlZCBieSB0aGlzIGFtb3VudC4gICovCisrICB1bnNpZ25lZCBpbnQgYml0cG9zOworKworKyAgLyogV2hhdCB0eXBlIG9mIG92ZXJmbG93IGVycm9yIHNob3VsZCBiZSBjaGVja2VkIGZvciB3aGVuCisrICAgICByZWxvY2F0aW5nLiAgKi8KKysgIGVudW0gY29tcGxhaW5fb3ZlcmZsb3cgY29tcGxhaW5fb25fb3ZlcmZsb3c7CisrCisrICAvKiBJZiB0aGlzIGZpZWxkIGlzIG5vbiBudWxsLCB0aGVuIHRoZSBzdXBwbGllZCBmdW5jdGlvbiBpcworKyAgICAgY2FsbGVkIHJhdGhlciB0aGFuIHRoZSBub3JtYWwgZnVuY3Rpb24uICBUaGlzIGFsbG93cyByZWFsbHkKKysgICAgIHN0cmFuZ2UgcmVsb2NhdGlvbiBtZXRob2RzIHRvIGJlIGFjY29tbW9kYXRlZCAoZS5nLiwgaTk2MCBjYWxsagorKyAgICAgaW5zdHJ1Y3Rpb25zKS4gICovCisrICBiZmRfcmVsb2Nfc3RhdHVzX3R5cGUgKCpzcGVjaWFsX2Z1bmN0aW9uKQorKyAgICAoYmZkICosIGFyZWxlbnQgKiwgc3RydWN0IGJmZF9zeW1ib2wgKiwgdm9pZCAqLCBhc2VjdGlvbiAqLAorKyAgICAgYmZkICosIGNoYXIgKiopOworKworKyAgLyogVGhlIHRleHR1YWwgbmFtZSBvZiB0aGUgcmVsb2NhdGlvbiB0eXBlLiAgKi8KKysgIGNoYXIgKm5hbWU7CisrCisrICAvKiBTb21lIGZvcm1hdHMgcmVjb3JkIGEgcmVsb2NhdGlvbiBhZGRlbmQgaW4gdGhlIHNlY3Rpb24gY29udGVudHMKKysgICAgIHJhdGhlciB0aGFuIHdpdGggdGhlIHJlbG9jYXRpb24uICBGb3IgRUxGIGZvcm1hdHMgdGhpcyBpcyB0aGUKKysgICAgIGRpc3RpbmN0aW9uIGJldHdlZW4gVVNFX1JFTCBhbmQgVVNFX1JFTEEgKHRob3VnaCB0aGUgY29kZSBjaGVja3MKKysgICAgIGZvciBVU0VfUkVMID09IDEvMCkuICBUaGUgdmFsdWUgb2YgdGhpcyBmaWVsZCBpcyBUUlVFIGlmIHRoZQorKyAgICAgYWRkZW5kIGlzIHJlY29yZGVkIHdpdGggdGhlIHNlY3Rpb24gY29udGVudHM7IHdoZW4gcGVyZm9ybWluZyBhCisrICAgICBwYXJ0aWFsIGxpbmsgKGxkIC1yKSB0aGUgc2VjdGlvbiBjb250ZW50cyAodGhlIGRhdGEpIHdpbGwgYmUKKysgICAgIG1vZGlmaWVkLiAgVGhlIHZhbHVlIG9mIHRoaXMgZmllbGQgaXMgRkFMU0UgaWYgYWRkZW5kcyBhcmUKKysgICAgIHJlY29yZGVkIHdpdGggdGhlIHJlbG9jYXRpb24gKGluIGFyZWxlbnQuYWRkZW5kKTsgd2hlbiBwZXJmb3JtaW5nCisrICAgICBhIHBhcnRpYWwgbGluayB0aGUgcmVsb2NhdGlvbiB3aWxsIGJlIG1vZGlmaWVkLgorKyAgICAgQWxsIHJlbG9jYXRpb25zIGZvciBhbGwgRUxGIFVTRV9SRUxBIHRhcmdldHMgc2hvdWxkIHNldCB0aGlzIGZpZWxkCisrICAgICB0byBGQUxTRSAodmFsdWVzIG9mIFRSVUUgc2hvdWxkIGJlIGxvb2tlZCBvbiB3aXRoIHN1c3BpY2lvbikuCisrICAgICBIb3dldmVyLCB0aGUgY29udmVyc2UgaXMgbm90IHRydWU6IG5vdCBhbGwgcmVsb2NhdGlvbnMgb2YgYWxsIEVMRgorKyAgICAgVVNFX1JFTCB0YXJnZXRzIHNldCB0aGlzIGZpZWxkIHRvIFRSVUUuICBXaHkgdGhpcyBpcyBzbyBpcyBwZWN1bGlhcgorKyAgICAgdG8gZWFjaCBwYXJ0aWN1bGFyIHRhcmdldC4gIEZvciByZWxvY3MgdGhhdCBhcmVuJ3QgdXNlZCBpbiBwYXJ0aWFsCisrICAgICBsaW5rcyAoZS5nLiBHT1Qgc3R1ZmYpIGl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgdGhpcyBpcyBzZXQgdG8uICAqLworKyAgYmZkX2Jvb2xlYW4gcGFydGlhbF9pbnBsYWNlOworKworKyAgLyogc3JjX21hc2sgc2VsZWN0cyB0aGUgcGFydCBvZiB0aGUgaW5zdHJ1Y3Rpb24gKG9yIGRhdGEpIHRvIGJlIHVzZWQKKysgICAgIGluIHRoZSByZWxvY2F0aW9uIHN1bS4gIElmIHRoZSB0YXJnZXQgcmVsb2NhdGlvbnMgZG9uJ3QgaGF2ZSBhbgorKyAgICAgYWRkZW5kIGluIHRoZSByZWxvYywgZWcuIEVMRiBVU0VfUkVMLCBzcmNfbWFzayB3aWxsIG5vcm1hbGx5IGVxdWFsCisrICAgICBkc3RfbWFzayB0byBleHRyYWN0IHRoZSBhZGRlbmQgZnJvbSB0aGUgc2VjdGlvbiBjb250ZW50cy4gIElmCisrICAgICByZWxvY2F0aW9ucyBkbyBoYXZlIGFuIGFkZGVuZCBpbiB0aGUgcmVsb2MsIGVnLiBFTEYgVVNFX1JFTEEsIHRoaXMKKysgICAgIGZpZWxkIHNob3VsZCBiZSB6ZXJvLiAgTm9uLXplcm8gdmFsdWVzIGZvciBFTEYgVVNFX1JFTEEgdGFyZ2V0cyBhcmUKKysgICAgIGJvZ3VzIGFzIGluIHRob3NlIGNhc2VzIHRoZSB2YWx1ZSBpbiB0aGUgZHN0X21hc2sgcGFydCBvZiB0aGUKKysgICAgIHNlY3Rpb24gY29udGVudHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgZ2FyYmFnZS4gICovCisrICBiZmRfdm1hIHNyY19tYXNrOworKworKyAgLyogZHN0X21hc2sgc2VsZWN0cyB3aGljaCBwYXJ0cyBvZiB0aGUgaW5zdHJ1Y3Rpb24gKG9yIGRhdGEpIGFyZQorKyAgICAgcmVwbGFjZWQgd2l0aCBhIHJlbG9jYXRlZCB2YWx1ZS4gICovCisrICBiZmRfdm1hIGRzdF9tYXNrOworKworKyAgLyogV2hlbiBzb21lIGZvcm1hdHMgY3JlYXRlIFBDIHJlbGF0aXZlIGluc3RydWN0aW9ucywgdGhleSBsZWF2ZQorKyAgICAgdGhlIHZhbHVlIG9mIHRoZSBwYyBvZiB0aGUgcGxhY2UgYmVpbmcgcmVsb2NhdGVkIGluIHRoZSBvZmZzZXQKKysgICAgIHNsb3Qgb2YgdGhlIGluc3RydWN0aW9uLCBzbyB0aGF0IGEgUEMgcmVsYXRpdmUgcmVsb2NhdGlvbiBjYW4KKysgICAgIGJlIG1hZGUganVzdCBieSBhZGRpbmcgaW4gYW4gb3JkaW5hcnkgb2Zmc2V0IChlLmcuLCBzdW4zIGEub3V0KS4KKysgICAgIFNvbWUgZm9ybWF0cyBsZWF2ZSB0aGUgZGlzcGxhY2VtZW50IHBhcnQgb2YgYW4gaW5zdHJ1Y3Rpb24KKysgICAgIGVtcHR5IChlLmcuLCBtODhrIGJjcyk7IHRoaXMgZmxhZyBzaWduYWxzIHRoZSBmYWN0LiAgKi8KKysgIGJmZF9ib29sZWFuIHBjcmVsX29mZnNldDsKKyt9OworKworKyNkZWZpbmUgSE9XVE8oQywgUiwgUywgQiwgUCwgQkksIE8sIFNGLCBOQU1FLCBJTlBMQUNFLCBNQVNLU1JDLCBNQVNLRFNULCBQQykgXAorKyAgeyAodW5zaWduZWQpIEMsIFIsIFMsIEIsIFAsIEJJLCBPLCBTRiwgTkFNRSwgSU5QTEFDRSwgTUFTS1NSQywgTUFTS0RTVCwgUEMgfQorKyNkZWZpbmUgTkVXSE9XVE8oRlVOQ1RJT04sIE5BTUUsIFNJWkUsIFJFTCwgSU4pIFwKKysgIEhPV1RPICgwLCAwLCBTSVpFLCAwLCBSRUwsIDAsIGNvbXBsYWluX292ZXJmbG93X2RvbnQsIEZVTkNUSU9OLCBcCisrICAgICAgICAgTkFNRSwgRkFMU0UsIDAsIDAsIElOKQorKworKyNkZWZpbmUgRU1QVFlfSE9XVE8oQykgXAorKyAgSE9XVE8gKChDKSwgMCwgMCwgMCwgRkFMU0UsIDAsIGNvbXBsYWluX292ZXJmbG93X2RvbnQsIE5VTEwsIFwKKysgICAgICAgICBOVUxMLCBGQUxTRSwgMCwgMCwgRkFMU0UpCisrCisrI2RlZmluZSBIT1dUT19QUkVQQVJFKHJlbG9jYXRpb24sIHN5bWJvbCkgICAgICAgICAgICAgICBcCisrICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIGlmIChzeW1ib2wgIT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBpZiAoYmZkX2lzX2NvbV9zZWN0aW9uIChzeW1ib2wtPnNlY3Rpb24pKSAgICAgICBcCisrICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgcmVsb2NhdGlvbiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgcmVsb2NhdGlvbiA9IHN5bWJvbC0+dmFsdWU7ICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9CisrCisrdW5zaWduZWQgaW50IGJmZF9nZXRfcmVsb2Nfc2l6ZSAocmVsb2NfaG93dG9fdHlwZSAqKTsKKysKKyt0eXBlZGVmIHN0cnVjdCByZWxlbnRfY2hhaW4KKyt7CisrICBhcmVsZW50IHJlbGVudDsKKysgIHN0cnVjdCByZWxlbnRfY2hhaW4gKm5leHQ7CisrfQorK2FyZWxlbnRfY2hhaW47CisrCisrYmZkX3JlbG9jX3N0YXR1c190eXBlIGJmZF9jaGVja19vdmVyZmxvdworKyAgIChlbnVtIGNvbXBsYWluX292ZXJmbG93IGhvdywKKysgICAgdW5zaWduZWQgaW50IGJpdHNpemUsCisrICAgIHVuc2lnbmVkIGludCByaWdodHNoaWZ0LAorKyAgICB1bnNpZ25lZCBpbnQgYWRkcnNpemUsCisrICAgIGJmZF92bWEgcmVsb2NhdGlvbik7CisrCisrYmZkX3JlbG9jX3N0YXR1c190eXBlIGJmZF9wZXJmb3JtX3JlbG9jYXRpb24KKysgICAoYmZkICphYmZkLAorKyAgICBhcmVsZW50ICpyZWxvY19lbnRyeSwKKysgICAgdm9pZCAqZGF0YSwKKysgICAgYXNlY3Rpb24gKmlucHV0X3NlY3Rpb24sCisrICAgIGJmZCAqb3V0cHV0X2JmZCwKKysgICAgY2hhciAqKmVycm9yX21lc3NhZ2UpOworKworK2JmZF9yZWxvY19zdGF0dXNfdHlwZSBiZmRfaW5zdGFsbF9yZWxvY2F0aW9uCisrICAgKGJmZCAqYWJmZCwKKysgICAgYXJlbGVudCAqcmVsb2NfZW50cnksCisrICAgIHZvaWQgKmRhdGEsIGJmZF92bWEgZGF0YV9zdGFydCwKKysgICAgYXNlY3Rpb24gKmlucHV0X3NlY3Rpb24sCisrICAgIGNoYXIgKiplcnJvcl9tZXNzYWdlKTsKKysKKytlbnVtIGJmZF9yZWxvY19jb2RlX3JlYWwgeworKyAgX2R1bW15X2ZpcnN0X2JmZF9yZWxvY19jb2RlX3JlYWwsCisrCisrCisrLyogQmFzaWMgYWJzb2x1dGUgcmVsb2NhdGlvbnMgb2YgTiBiaXRzLiAgKi8KKysgIEJGRF9SRUxPQ182NCwKKysgIEJGRF9SRUxPQ18zMiwKKysgIEJGRF9SRUxPQ18yNiwKKysgIEJGRF9SRUxPQ18yNCwKKysgIEJGRF9SRUxPQ18xNiwKKysgIEJGRF9SRUxPQ18xNCwKKysgIEJGRF9SRUxPQ184LAorKworKy8qIFBDLXJlbGF0aXZlIHJlbG9jYXRpb25zLiAgU29tZXRpbWVzIHRoZXNlIGFyZSByZWxhdGl2ZSB0byB0aGUgYWRkcmVzcworK29mIHRoZSByZWxvY2F0aW9uIGl0c2VsZjsgc29tZXRpbWVzIHRoZXkgYXJlIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZgorK3RoZSBzZWN0aW9uIGNvbnRhaW5pbmcgdGhlIHJlbG9jYXRpb24uICBJdCBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpYyB0YXJnZXQuCisrCisrVGhlIDI0LWJpdCByZWxvY2F0aW9uIGlzIHVzZWQgaW4gc29tZSBJbnRlbCA5NjAgY29uZmlndXJhdGlvbnMuICAqLworKyAgQkZEX1JFTE9DXzY0X1BDUkVMLAorKyAgQkZEX1JFTE9DXzMyX1BDUkVMLAorKyAgQkZEX1JFTE9DXzI0X1BDUkVMLAorKyAgQkZEX1JFTE9DXzE2X1BDUkVMLAorKyAgQkZEX1JFTE9DXzEyX1BDUkVMLAorKyAgQkZEX1JFTE9DXzhfUENSRUwsCisrCisrLyogU2VjdGlvbiByZWxhdGl2ZSByZWxvY2F0aW9ucy4gIFNvbWUgdGFyZ2V0cyBuZWVkIHRoaXMgZm9yIERXQVJGMi4gICovCisrICBCRkRfUkVMT0NfMzJfU0VDUkVMLAorKworKy8qIEZvciBFTEYuICAqLworKyAgQkZEX1JFTE9DXzMyX0dPVF9QQ1JFTCwKKysgIEJGRF9SRUxPQ18xNl9HT1RfUENSRUwsCisrICBCRkRfUkVMT0NfOF9HT1RfUENSRUwsCisrICBCRkRfUkVMT0NfMzJfR09UT0ZGLAorKyAgQkZEX1JFTE9DXzE2X0dPVE9GRiwKKysgIEJGRF9SRUxPQ19MTzE2X0dPVE9GRiwKKysgIEJGRF9SRUxPQ19ISTE2X0dPVE9GRiwKKysgIEJGRF9SRUxPQ19ISTE2X1NfR09UT0ZGLAorKyAgQkZEX1JFTE9DXzhfR09UT0ZGLAorKyAgQkZEX1JFTE9DXzY0X1BMVF9QQ1JFTCwKKysgIEJGRF9SRUxPQ18zMl9QTFRfUENSRUwsCisrICBCRkRfUkVMT0NfMjRfUExUX1BDUkVMLAorKyAgQkZEX1JFTE9DXzE2X1BMVF9QQ1JFTCwKKysgIEJGRF9SRUxPQ184X1BMVF9QQ1JFTCwKKysgIEJGRF9SRUxPQ182NF9QTFRPRkYsCisrICBCRkRfUkVMT0NfMzJfUExUT0ZGLAorKyAgQkZEX1JFTE9DXzE2X1BMVE9GRiwKKysgIEJGRF9SRUxPQ19MTzE2X1BMVE9GRiwKKysgIEJGRF9SRUxPQ19ISTE2X1BMVE9GRiwKKysgIEJGRF9SRUxPQ19ISTE2X1NfUExUT0ZGLAorKyAgQkZEX1JFTE9DXzhfUExUT0ZGLAorKworKy8qIFJlbG9jYXRpb25zIHVzZWQgYnkgNjhLIEVMRi4gICovCisrICBCRkRfUkVMT0NfNjhLX0dMT0JfREFULAorKyAgQkZEX1JFTE9DXzY4S19KTVBfU0xPVCwKKysgIEJGRF9SRUxPQ182OEtfUkVMQVRJVkUsCisrCisrLyogTGlua2FnZS10YWJsZSByZWxhdGl2ZS4gICovCisrICBCRkRfUkVMT0NfMzJfQkFTRVJFTCwKKysgIEJGRF9SRUxPQ18xNl9CQVNFUkVMLAorKyAgQkZEX1JFTE9DX0xPMTZfQkFTRVJFTCwKKysgIEJGRF9SRUxPQ19ISTE2X0JBU0VSRUwsCisrICBCRkRfUkVMT0NfSEkxNl9TX0JBU0VSRUwsCisrICBCRkRfUkVMT0NfOF9CQVNFUkVMLAorKyAgQkZEX1JFTE9DX1JWQSwKKysKKysvKiBBYnNvbHV0ZSA4LWJpdCByZWxvY2F0aW9uLCBidXQgdXNlZCB0byBmb3JtIGFuIGFkZHJlc3MgbGlrZSAweEZGbm4uICAqLworKyAgQkZEX1JFTE9DXzhfRkZubiwKKysKKysvKiBUaGVzZSBQQy1yZWxhdGl2ZSByZWxvY2F0aW9ucyBhcmUgc3RvcmVkIGFzIHdvcmQgZGlzcGxhY2VtZW50cyAtLQorK2kuZS4sIGJ5dGUgZGlzcGxhY2VtZW50cyBzaGlmdGVkIHJpZ2h0IHR3byBiaXRzLiAgVGhlIDMwLWJpdCB3b3JkCisrZGlzcGxhY2VtZW50ICg8PDMyX1BDUkVMX1MyPj4gLS0gMzIgYml0cywgc2hpZnRlZCAyKSBpcyB1c2VkIG9uIHRoZQorK1NQQVJDLiAgKFNQQVJDIHRvb2xzIGdlbmVyYWxseSByZWZlciB0byB0aGlzIGFzIDw8V0RJU1AzMD4+LikgIFRoZQorK3NpZ25lZCAxNi1iaXQgZGlzcGxhY2VtZW50IGlzIHVzZWQgb24gdGhlIE1JUFMsIGFuZCB0aGUgMjMtYml0CisrZGlzcGxhY2VtZW50IGlzIHVzZWQgb24gdGhlIEFscGhhLiAgKi8KKysgIEJGRF9SRUxPQ18zMl9QQ1JFTF9TMiwKKysgIEJGRF9SRUxPQ18xNl9QQ1JFTF9TMiwKKysgIEJGRF9SRUxPQ18yM19QQ1JFTF9TMiwKKysKKysvKiBIaWdoIDIyIGJpdHMgYW5kIGxvdyAxMCBiaXRzIG9mIDMyLWJpdCB2YWx1ZSwgcGxhY2VkIGludG8gbG93ZXIgYml0cyBvZgorK3RoZSB0YXJnZXQgd29yZC4gIFRoZXNlIGFyZSB1c2VkIG9uIHRoZSBTUEFSQy4gICovCisrICBCRkRfUkVMT0NfSEkyMiwKKysgIEJGRF9SRUxPQ19MTzEwLAorKworKy8qIEZvciBzeXN0ZW1zIHRoYXQgYWxsb2NhdGUgYSBHbG9iYWwgUG9pbnRlciByZWdpc3RlciwgdGhlc2UgYXJlCisrZGlzcGxhY2VtZW50cyBvZmYgdGhhdCByZWdpc3Rlci4gIFRoZXNlIHJlbG9jYXRpb24gdHlwZXMgYXJlCisraGFuZGxlZCBzcGVjaWFsbHksIGJlY2F1c2UgdGhlIHZhbHVlIHRoZSByZWdpc3RlciB3aWxsIGhhdmUgaXMKKytkZWNpZGVkIHJlbGF0aXZlbHkgbGF0ZS4gICovCisrICBCRkRfUkVMT0NfR1BSRUwxNiwKKysgIEJGRF9SRUxPQ19HUFJFTDMyLAorKworKy8qIFJlbG9jIHR5cGVzIHVzZWQgZm9yIGk5NjAvYi5vdXQuICAqLworKyAgQkZEX1JFTE9DX0k5NjBfQ0FMTEosCisrCisrLyogU1BBUkMgRUxGIHJlbG9jYXRpb25zLiAgVGhlcmUgaXMgcHJvYmFibHkgc29tZSBvdmVybGFwIHdpdGggb3RoZXIKKytyZWxvY2F0aW9uIHR5cGVzIGFscmVhZHkgZGVmaW5lZC4gICovCisrICBCRkRfUkVMT0NfTk9ORSwKKysgIEJGRF9SRUxPQ19TUEFSQ19XRElTUDIyLAorKyAgQkZEX1JFTE9DX1NQQVJDMjIsCisrICBCRkRfUkVMT0NfU1BBUkMxMywKKysgIEJGRF9SRUxPQ19TUEFSQ19HT1QxMCwKKysgIEJGRF9SRUxPQ19TUEFSQ19HT1QxMywKKysgIEJGRF9SRUxPQ19TUEFSQ19HT1QyMiwKKysgIEJGRF9SRUxPQ19TUEFSQ19QQzEwLAorKyAgQkZEX1JFTE9DX1NQQVJDX1BDMjIsCisrICBCRkRfUkVMT0NfU1BBUkNfV1BMVDMwLAorKyAgQkZEX1JFTE9DX1NQQVJDX0NPUFksCisrICBCRkRfUkVMT0NfU1BBUkNfR0xPQl9EQVQsCisrICBCRkRfUkVMT0NfU1BBUkNfSk1QX1NMT1QsCisrICBCRkRfUkVMT0NfU1BBUkNfUkVMQVRJVkUsCisrICBCRkRfUkVMT0NfU1BBUkNfVUExNiwKKysgIEJGRF9SRUxPQ19TUEFSQ19VQTMyLAorKyAgQkZEX1JFTE9DX1NQQVJDX1VBNjQsCisrCisrLyogSSB0aGluayB0aGVzZSBhcmUgc3BlY2lmaWMgdG8gU1BBUkMgYS5vdXQgKGUuZy4sIFN1biA0KS4gICovCisrICBCRkRfUkVMT0NfU1BBUkNfQkFTRTEzLAorKyAgQkZEX1JFTE9DX1NQQVJDX0JBU0UyMiwKKysKKysvKiBTUEFSQzY0IHJlbG9jYXRpb25zICAqLworKyNkZWZpbmUgQkZEX1JFTE9DX1NQQVJDXzY0IEJGRF9SRUxPQ182NAorKyAgQkZEX1JFTE9DX1NQQVJDXzEwLAorKyAgQkZEX1JFTE9DX1NQQVJDXzExLAorKyAgQkZEX1JFTE9DX1NQQVJDX09MTzEwLAorKyAgQkZEX1JFTE9DX1NQQVJDX0hIMjIsCisrICBCRkRfUkVMT0NfU1BBUkNfSE0xMCwKKysgIEJGRF9SRUxPQ19TUEFSQ19MTTIyLAorKyAgQkZEX1JFTE9DX1NQQVJDX1BDX0hIMjIsCisrICBCRkRfUkVMT0NfU1BBUkNfUENfSE0xMCwKKysgIEJGRF9SRUxPQ19TUEFSQ19QQ19MTTIyLAorKyAgQkZEX1JFTE9DX1NQQVJDX1dESVNQMTYsCisrICBCRkRfUkVMT0NfU1BBUkNfV0RJU1AxOSwKKysgIEJGRF9SRUxPQ19TUEFSQ183LAorKyAgQkZEX1JFTE9DX1NQQVJDXzYsCisrICBCRkRfUkVMT0NfU1BBUkNfNSwKKysjZGVmaW5lIEJGRF9SRUxPQ19TUEFSQ19ESVNQNjQgQkZEX1JFTE9DXzY0X1BDUkVMCisrICBCRkRfUkVMT0NfU1BBUkNfUExUMzIsCisrICBCRkRfUkVMT0NfU1BBUkNfUExUNjQsCisrICBCRkRfUkVMT0NfU1BBUkNfSElYMjIsCisrICBCRkRfUkVMT0NfU1BBUkNfTE9YMTAsCisrICBCRkRfUkVMT0NfU1BBUkNfSDQ0LAorKyAgQkZEX1JFTE9DX1NQQVJDX000NCwKKysgIEJGRF9SRUxPQ19TUEFSQ19MNDQsCisrICBCRkRfUkVMT0NfU1BBUkNfUkVHSVNURVIsCisrCisrLyogU1BBUkMgbGl0dGxlIGVuZGlhbiByZWxvY2F0aW9uICAqLworKyAgQkZEX1JFTE9DX1NQQVJDX1JFVjMyLAorKworKy8qIFNQQVJDIFRMUyByZWxvY2F0aW9ucyAgKi8KKysgIEJGRF9SRUxPQ19TUEFSQ19UTFNfR0RfSEkyMiwKKysgIEJGRF9SRUxPQ19TUEFSQ19UTFNfR0RfTE8xMCwKKysgIEJGRF9SRUxPQ19TUEFSQ19UTFNfR0RfQURELAorKyAgQkZEX1JFTE9DX1NQQVJDX1RMU19HRF9DQUxMLAorKyAgQkZEX1JFTE9DX1NQQVJDX1RMU19MRE1fSEkyMiwKKysgIEJGRF9SRUxPQ19TUEFSQ19UTFNfTERNX0xPMTAsCisrICBCRkRfUkVMT0NfU1BBUkNfVExTX0xETV9BREQsCisrICBCRkRfUkVMT0NfU1BBUkNfVExTX0xETV9DQUxMLAorKyAgQkZEX1JFTE9DX1NQQVJDX1RMU19MRE9fSElYMjIsCisrICBCRkRfUkVMT0NfU1BBUkNfVExTX0xET19MT1gxMCwKKysgIEJGRF9SRUxPQ19TUEFSQ19UTFNfTERPX0FERCwKKysgIEJGRF9SRUxPQ19TUEFSQ19UTFNfSUVfSEkyMiwKKysgIEJGRF9SRUxPQ19TUEFSQ19UTFNfSUVfTE8xMCwKKysgIEJGRF9SRUxPQ19TUEFSQ19UTFNfSUVfTEQsCisrICBCRkRfUkVMT0NfU1BBUkNfVExTX0lFX0xEWCwKKysgIEJGRF9SRUxPQ19TUEFSQ19UTFNfSUVfQURELAorKyAgQkZEX1JFTE9DX1NQQVJDX1RMU19MRV9ISVgyMiwKKysgIEJGRF9SRUxPQ19TUEFSQ19UTFNfTEVfTE9YMTAsCisrICBCRkRfUkVMT0NfU1BBUkNfVExTX0RUUE1PRDMyLAorKyAgQkZEX1JFTE9DX1NQQVJDX1RMU19EVFBNT0Q2NCwKKysgIEJGRF9SRUxPQ19TUEFSQ19UTFNfRFRQT0ZGMzIsCisrICBCRkRfUkVMT0NfU1BBUkNfVExTX0RUUE9GRjY0LAorKyAgQkZEX1JFTE9DX1NQQVJDX1RMU19UUE9GRjMyLAorKyAgQkZEX1JFTE9DX1NQQVJDX1RMU19UUE9GRjY0LAorKworKy8qIFNQVSBSZWxvY2F0aW9ucy4gICovCisrICBCRkRfUkVMT0NfU1BVX0lNTTcsCisrICBCRkRfUkVMT0NfU1BVX0lNTTgsCisrICBCRkRfUkVMT0NfU1BVX0lNTTEwLAorKyAgQkZEX1JFTE9DX1NQVV9JTU0xMFcsCisrICBCRkRfUkVMT0NfU1BVX0lNTTE2LAorKyAgQkZEX1JFTE9DX1NQVV9JTU0xNlcsCisrICBCRkRfUkVMT0NfU1BVX0lNTTE4LAorKyAgQkZEX1JFTE9DX1NQVV9QQ1JFTDlhLAorKyAgQkZEX1JFTE9DX1NQVV9QQ1JFTDliLAorKyAgQkZEX1JFTE9DX1NQVV9QQ1JFTDE2LAorKyAgQkZEX1JFTE9DX1NQVV9MTzE2LAorKyAgQkZEX1JFTE9DX1NQVV9ISTE2LAorKyAgQkZEX1JFTE9DX1NQVV9QUFUzMiwKKysgIEJGRF9SRUxPQ19TUFVfUFBVNjQsCisrCisrLyogQWxwaGEgRUNPRkYgYW5kIEVMRiByZWxvY2F0aW9ucy4gIFNvbWUgb2YgdGhlc2UgdHJlYXQgdGhlIHN5bWJvbCBvcgorKyJhZGRlbmQiIGluIHNvbWUgc3BlY2lhbCB3YXkuCisrRm9yIEdQRElTUF9ISTE2ICgiZ3BkaXNwIikgcmVsb2NhdGlvbnMsIHRoZSBzeW1ib2wgaXMgaWdub3JlZCB3aGVuCisrd3JpdGluZzsgd2hlbiByZWFkaW5nLCBpdCB3aWxsIGJlIHRoZSBhYnNvbHV0ZSBzZWN0aW9uIHN5bWJvbC4gIFRoZQorK2FkZGVuZCBpcyB0aGUgZGlzcGxhY2VtZW50IGluIGJ5dGVzIG9mIHRoZSAibGRhIiBpbnN0cnVjdGlvbiBmcm9tCisrdGhlICJsZGFoIiBpbnN0cnVjdGlvbiAod2hpY2ggaXMgYXQgdGhlIGFkZHJlc3Mgb2YgdGhpcyByZWxvYykuICAqLworKyAgQkZEX1JFTE9DX0FMUEhBX0dQRElTUF9ISTE2LAorKworKy8qIEZvciBHUERJU1BfTE8xNiAoImlnbm9yZSIpIHJlbG9jYXRpb25zLCB0aGUgc3ltYm9sIGlzIGhhbmRsZWQgYXMKKyt3aXRoIEdQRElTUF9ISTE2IHJlbG9jcy4gIFRoZSBhZGRlbmQgaXMgaWdub3JlZCB3aGVuIHdyaXRpbmcgdGhlCisrcmVsb2NhdGlvbnMgb3V0LCBhbmQgaXMgZmlsbGVkIGluIHdpdGggdGhlIGZpbGUncyBHUCB2YWx1ZSBvbgorK3JlYWRpbmcsIGZvciBjb252ZW5pZW5jZS4gICovCisrICBCRkRfUkVMT0NfQUxQSEFfR1BESVNQX0xPMTYsCisrCisrLyogVGhlIEVMRiBHUERJU1AgcmVsb2NhdGlvbiBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIHRoZSBHUERJU1BfSEkxNgorK3JlbG9jYXRpb24gZXhjZXB0IHRoYXQgdGhlcmUgaXMgbm8gYWNjb21wYW55aW5nIEdQRElTUF9MTzE2CisrcmVsb2NhdGlvbi4gICovCisrICBCRkRfUkVMT0NfQUxQSEFfR1BESVNQLAorKworKy8qIFRoZSBBbHBoYSBMSVRFUkFML0xJVFVTRSByZWxvY3MgYXJlIHByb2R1Y2VkIGJ5IGEgc3ltYm9sIHJlZmVyZW5jZTsKKyt0aGUgYXNzZW1ibGVyIHR1cm5zIGl0IGludG8gYSBMRFEgaW5zdHJ1Y3Rpb24gdG8gbG9hZCB0aGUgYWRkcmVzcyBvZgorK3RoZSBzeW1ib2wsIGFuZCB0aGVuIGZpbGxzIGluIGEgcmVnaXN0ZXIgaW4gdGhlIHJlYWwgaW5zdHJ1Y3Rpb24uCisrCisrVGhlIExJVEVSQUwgcmVsb2MsIGF0IHRoZSBMRFEgaW5zdHJ1Y3Rpb24sIHJlZmVycyB0byB0aGUgLmxpdGEKKytzZWN0aW9uIHN5bWJvbC4gIFRoZSBhZGRlbmQgaXMgaWdub3JlZCB3aGVuIHdyaXRpbmcsIGJ1dCBpcyBmaWxsZWQKKytpbiB3aXRoIHRoZSBmaWxlJ3MgR1AgdmFsdWUgb24gcmVhZGluZywgZm9yIGNvbnZlbmllbmNlLCBhcyB3aXRoIHRoZQorK0dQRElTUF9MTzE2IHJlbG9jLgorKworK1RoZSBFTEZfTElURVJBTCByZWxvYyBpcyBzb21ld2hlcmUgYmV0d2VlbiAxNl9HT1RPRkYgYW5kIEdQRElTUF9MTzE2LgorK0l0IHNob3VsZCByZWZlciB0byB0aGUgc3ltYm9sIHRvIGJlIHJlZmVyZW5jZWQsIGFzIHdpdGggMTZfR09UT0ZGLAorK2J1dCBpdCBnZW5lcmF0ZXMgb3V0cHV0IG5vdCBiYXNlZCBvbiB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSAuZ290Cisrc2VjdGlvbiwgYnV0IHJlbGF0aXZlIHRvIHRoZSBHUCB2YWx1ZSBjaG9zZW4gZm9yIHRoZSBmaWxlIGR1cmluZyB0aGUKKytmaW5hbCBsaW5rIHN0YWdlLgorKworK1RoZSBMSVRVU0UgcmVsb2MsIG9uIHRoZSBpbnN0cnVjdGlvbiB1c2luZyB0aGUgbG9hZGVkIGFkZHJlc3MsIGdpdmVzCisraW5mb3JtYXRpb24gdG8gdGhlIGxpbmtlciB0aGF0IGl0IG1pZ2h0IGJlIGFibGUgdG8gdXNlIHRvIG9wdGltaXplCisrYXdheSBzb21lIGxpdGVyYWwgc2VjdGlvbiByZWZlcmVuY2VzLiAgVGhlIHN5bWJvbCBpcyBpZ25vcmVkIChyZWFkCisrYXMgdGhlIGFic29sdXRlIHNlY3Rpb24gc3ltYm9sKSwgYW5kIHRoZSAiYWRkZW5kIiBpbmRpY2F0ZXMgdGhlIHR5cGUKKytvZiBpbnN0cnVjdGlvbiB1c2luZyB0aGUgcmVnaXN0ZXI6CisrMSAtICJtZW1vcnkiIGZtdCBpbnNuCisrMiAtIGJ5dGUtbWFuaXB1bGF0aW9uIChieXRlIG9mZnNldCByZWcpCisrMyAtIGpzciAodGFyZ2V0IG9mIGJyYW5jaCkgICovCisrICBCRkRfUkVMT0NfQUxQSEFfTElURVJBTCwKKysgIEJGRF9SRUxPQ19BTFBIQV9FTEZfTElURVJBTCwKKysgIEJGRF9SRUxPQ19BTFBIQV9MSVRVU0UsCisrCisrLyogVGhlIEhJTlQgcmVsb2NhdGlvbiBpbmRpY2F0ZXMgYSB2YWx1ZSB0aGF0IHNob3VsZCBiZSBmaWxsZWQgaW50byB0aGUKKysiaGludCIgZmllbGQgb2YgYSBqbXAvanNyL3JldCBpbnN0cnVjdGlvbiwgZm9yIHBvc3NpYmxlIGJyYW5jaC0KKytwcmVkaWN0aW9uIGxvZ2ljIHdoaWNoIG1heSBiZSBwcm92aWRlZCBvbiBzb21lIHByb2Nlc3NvcnMuICAqLworKyAgQkZEX1JFTE9DX0FMUEhBX0hJTlQsCisrCisrLyogVGhlIExJTktBR0UgcmVsb2NhdGlvbiBvdXRwdXRzIGEgbGlua2FnZSBwYWlyIGluIHRoZSBvYmplY3QgZmlsZSwKKyt3aGljaCBpcyBmaWxsZWQgYnkgdGhlIGxpbmtlci4gICovCisrICBCRkRfUkVMT0NfQUxQSEFfTElOS0FHRSwKKysKKysvKiBUaGUgQ09ERUFERFIgcmVsb2NhdGlvbiBvdXRwdXRzIGEgU1RPX0NBIGluIHRoZSBvYmplY3QgZmlsZSwKKyt3aGljaCBpcyBmaWxsZWQgYnkgdGhlIGxpbmtlci4gICovCisrICBCRkRfUkVMT0NfQUxQSEFfQ09ERUFERFIsCisrCisrLyogVGhlIEdQUkVMX0hJL0xPIHJlbG9jYXRpb25zIHRvZ2V0aGVyIGZvcm0gYSAzMi1iaXQgb2Zmc2V0IGZyb20gdGhlCisrR1AgcmVnaXN0ZXIuICAqLworKyAgQkZEX1JFTE9DX0FMUEhBX0dQUkVMX0hJMTYsCisrICBCRkRfUkVMT0NfQUxQSEFfR1BSRUxfTE8xNiwKKysKKysvKiBMaWtlIEJGRF9SRUxPQ18yM19QQ1JFTF9TMiwgZXhjZXB0IHRoYXQgdGhlIHNvdXJjZSBhbmQgdGFyZ2V0IG11c3QKKytzaGFyZSBhIGNvbW1vbiBHUCwgYW5kIHRoZSB0YXJnZXQgYWRkcmVzcyBpcyBhZGp1c3RlZCBmb3IKKytTVE9fQUxQSEFfU1REX0dQTE9BRC4gICovCisrICBCRkRfUkVMT0NfQUxQSEFfQlJTR1AsCisrCisrLyogQWxwaGEgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgcmVsb2NhdGlvbnMuICAqLworKyAgQkZEX1JFTE9DX0FMUEhBX1RMU0dELAorKyAgQkZEX1JFTE9DX0FMUEhBX1RMU0xETSwKKysgIEJGRF9SRUxPQ19BTFBIQV9EVFBNT0Q2NCwKKysgIEJGRF9SRUxPQ19BTFBIQV9HT1REVFBSRUwxNiwKKysgIEJGRF9SRUxPQ19BTFBIQV9EVFBSRUw2NCwKKysgIEJGRF9SRUxPQ19BTFBIQV9EVFBSRUxfSEkxNiwKKysgIEJGRF9SRUxPQ19BTFBIQV9EVFBSRUxfTE8xNiwKKysgIEJGRF9SRUxPQ19BTFBIQV9EVFBSRUwxNiwKKysgIEJGRF9SRUxPQ19BTFBIQV9HT1RUUFJFTDE2LAorKyAgQkZEX1JFTE9DX0FMUEhBX1RQUkVMNjQsCisrICBCRkRfUkVMT0NfQUxQSEFfVFBSRUxfSEkxNiwKKysgIEJGRF9SRUxPQ19BTFBIQV9UUFJFTF9MTzE2LAorKyAgQkZEX1JFTE9DX0FMUEhBX1RQUkVMMTYsCisrCisrLyogQml0cyAyNy4uMiBvZiB0aGUgcmVsb2NhdGlvbiBhZGRyZXNzIHNoaWZ0ZWQgcmlnaHQgMiBiaXRzOworK3NpbXBsZSByZWxvYyBvdGhlcndpc2UuICAqLworKyAgQkZEX1JFTE9DX01JUFNfSk1QLAorKworKy8qIFRoZSBNSVBTMTYganVtcCBpbnN0cnVjdGlvbi4gICovCisrICBCRkRfUkVMT0NfTUlQUzE2X0pNUCwKKysKKysvKiBNSVBTMTYgR1AgcmVsYXRpdmUgcmVsb2MuICAqLworKyAgQkZEX1JFTE9DX01JUFMxNl9HUFJFTCwKKysKKysvKiBIaWdoIDE2IGJpdHMgb2YgMzItYml0IHZhbHVlOyBzaW1wbGUgcmVsb2MuICAqLworKyAgQkZEX1JFTE9DX0hJMTYsCisrCisrLyogSGlnaCAxNiBiaXRzIG9mIDMyLWJpdCB2YWx1ZSBidXQgdGhlIGxvdyAxNiBiaXRzIHdpbGwgYmUgc2lnbgorK2V4dGVuZGVkIGFuZCBhZGRlZCB0byBmb3JtIHRoZSBmaW5hbCByZXN1bHQuICBJZiB0aGUgbG93IDE2CisrYml0cyBmb3JtIGEgbmVnYXRpdmUgbnVtYmVyLCB3ZSBuZWVkIHRvIGFkZCBvbmUgdG8gdGhlIGhpZ2ggdmFsdWUKKyt0byBjb21wZW5zYXRlIGZvciB0aGUgYm9ycm93IHdoZW4gdGhlIGxvdyBiaXRzIGFyZSBhZGRlZC4gICovCisrICBCRkRfUkVMT0NfSEkxNl9TLAorKworKy8qIExvdyAxNiBiaXRzLiAgKi8KKysgIEJGRF9SRUxPQ19MTzE2LAorKworKy8qIEhpZ2ggMTYgYml0cyBvZiAzMi1iaXQgcGMtcmVsYXRpdmUgdmFsdWUgICovCisrICBCRkRfUkVMT0NfSEkxNl9QQ1JFTCwKKysKKysvKiBIaWdoIDE2IGJpdHMgb2YgMzItYml0IHBjLXJlbGF0aXZlIHZhbHVlLCBhZGp1c3RlZCAgKi8KKysgIEJGRF9SRUxPQ19ISTE2X1NfUENSRUwsCisrCisrLyogTG93IDE2IGJpdHMgb2YgcGMtcmVsYXRpdmUgdmFsdWUgICovCisrICBCRkRfUkVMT0NfTE8xNl9QQ1JFTCwKKysKKysvKiBNSVBTMTYgaGlnaCAxNiBiaXRzIG9mIDMyLWJpdCB2YWx1ZS4gICovCisrICBCRkRfUkVMT0NfTUlQUzE2X0hJMTYsCisrCisrLyogTUlQUzE2IGhpZ2ggMTYgYml0cyBvZiAzMi1iaXQgdmFsdWUgYnV0IHRoZSBsb3cgMTYgYml0cyB3aWxsIGJlIHNpZ24KKytleHRlbmRlZCBhbmQgYWRkZWQgdG8gZm9ybSB0aGUgZmluYWwgcmVzdWx0LiAgSWYgdGhlIGxvdyAxNgorK2JpdHMgZm9ybSBhIG5lZ2F0aXZlIG51bWJlciwgd2UgbmVlZCB0byBhZGQgb25lIHRvIHRoZSBoaWdoIHZhbHVlCisrdG8gY29tcGVuc2F0ZSBmb3IgdGhlIGJvcnJvdyB3aGVuIHRoZSBsb3cgYml0cyBhcmUgYWRkZWQuICAqLworKyAgQkZEX1JFTE9DX01JUFMxNl9ISTE2X1MsCisrCisrLyogTUlQUzE2IGxvdyAxNiBiaXRzLiAgKi8KKysgIEJGRF9SRUxPQ19NSVBTMTZfTE8xNiwKKysKKysvKiBSZWxvY2F0aW9uIGFnYWluc3QgYSBNSVBTIGxpdGVyYWwgc2VjdGlvbi4gICovCisrICBCRkRfUkVMT0NfTUlQU19MSVRFUkFMLAorKworKy8qIE1JUFMgRUxGIHJlbG9jYXRpb25zLiAgKi8KKysgIEJGRF9SRUxPQ19NSVBTX0dPVDE2LAorKyAgQkZEX1JFTE9DX01JUFNfQ0FMTDE2LAorKyAgQkZEX1JFTE9DX01JUFNfR09UX0hJMTYsCisrICBCRkRfUkVMT0NfTUlQU19HT1RfTE8xNiwKKysgIEJGRF9SRUxPQ19NSVBTX0NBTExfSEkxNiwKKysgIEJGRF9SRUxPQ19NSVBTX0NBTExfTE8xNiwKKysgIEJGRF9SRUxPQ19NSVBTX1NVQiwKKysgIEJGRF9SRUxPQ19NSVBTX0dPVF9QQUdFLAorKyAgQkZEX1JFTE9DX01JUFNfR09UX09GU1QsCisrICBCRkRfUkVMT0NfTUlQU19HT1RfRElTUCwKKysgIEJGRF9SRUxPQ19NSVBTX1NISUZUNSwKKysgIEJGRF9SRUxPQ19NSVBTX1NISUZUNiwKKysgIEJGRF9SRUxPQ19NSVBTX0lOU0VSVF9BLAorKyAgQkZEX1JFTE9DX01JUFNfSU5TRVJUX0IsCisrICBCRkRfUkVMT0NfTUlQU19ERUxFVEUsCisrICBCRkRfUkVMT0NfTUlQU19ISUdIRVNULAorKyAgQkZEX1JFTE9DX01JUFNfSElHSEVSLAorKyAgQkZEX1JFTE9DX01JUFNfU0NOX0RJU1AsCisrICBCRkRfUkVMT0NfTUlQU19SRUwxNiwKKysgIEJGRF9SRUxPQ19NSVBTX1JFTEdPVCwKKysgIEJGRF9SRUxPQ19NSVBTX0pBTFIsCisrICBCRkRfUkVMT0NfTUlQU19UTFNfRFRQTU9EMzIsCisrICBCRkRfUkVMT0NfTUlQU19UTFNfRFRQUkVMMzIsCisrICBCRkRfUkVMT0NfTUlQU19UTFNfRFRQTU9ENjQsCisrICBCRkRfUkVMT0NfTUlQU19UTFNfRFRQUkVMNjQsCisrICBCRkRfUkVMT0NfTUlQU19UTFNfR0QsCisrICBCRkRfUkVMT0NfTUlQU19UTFNfTERNLAorKyAgQkZEX1JFTE9DX01JUFNfVExTX0RUUFJFTF9ISTE2LAorKyAgQkZEX1JFTE9DX01JUFNfVExTX0RUUFJFTF9MTzE2LAorKyAgQkZEX1JFTE9DX01JUFNfVExTX0dPVFRQUkVMLAorKyAgQkZEX1JFTE9DX01JUFNfVExTX1RQUkVMMzIsCisrICBCRkRfUkVMT0NfTUlQU19UTFNfVFBSRUw2NCwKKysgIEJGRF9SRUxPQ19NSVBTX1RMU19UUFJFTF9ISTE2LAorKyAgQkZEX1JFTE9DX01JUFNfVExTX1RQUkVMX0xPMTYsCisrCisrCisrLyogTUlQUyBFTEYgcmVsb2NhdGlvbnMgKFZ4V29ya3MgZXh0ZW5zaW9ucykuICAqLworKyAgQkZEX1JFTE9DX01JUFNfQ09QWSwKKysgIEJGRF9SRUxPQ19NSVBTX0pVTVBfU0xPVCwKKysKKysKKysvKiBGdWppdHN1IEZydiBSZWxvY2F0aW9ucy4gICovCisrICBCRkRfUkVMT0NfRlJWX0xBQkVMMTYsCisrICBCRkRfUkVMT0NfRlJWX0xBQkVMMjQsCisrICBCRkRfUkVMT0NfRlJWX0xPMTYsCisrICBCRkRfUkVMT0NfRlJWX0hJMTYsCisrICBCRkRfUkVMT0NfRlJWX0dQUkVMMTIsCisrICBCRkRfUkVMT0NfRlJWX0dQUkVMVTEyLAorKyAgQkZEX1JFTE9DX0ZSVl9HUFJFTDMyLAorKyAgQkZEX1JFTE9DX0ZSVl9HUFJFTEhJLAorKyAgQkZEX1JFTE9DX0ZSVl9HUFJFTExPLAorKyAgQkZEX1JFTE9DX0ZSVl9HT1QxMiwKKysgIEJGRF9SRUxPQ19GUlZfR09USEksCisrICBCRkRfUkVMT0NfRlJWX0dPVExPLAorKyAgQkZEX1JFTE9DX0ZSVl9GVU5DREVTQywKKysgIEJGRF9SRUxPQ19GUlZfRlVOQ0RFU0NfR09UMTIsCisrICBCRkRfUkVMT0NfRlJWX0ZVTkNERVNDX0dPVEhJLAorKyAgQkZEX1JFTE9DX0ZSVl9GVU5DREVTQ19HT1RMTywKKysgIEJGRF9SRUxPQ19GUlZfRlVOQ0RFU0NfVkFMVUUsCisrICBCRkRfUkVMT0NfRlJWX0ZVTkNERVNDX0dPVE9GRjEyLAorKyAgQkZEX1JFTE9DX0ZSVl9GVU5DREVTQ19HT1RPRkZISSwKKysgIEJGRF9SRUxPQ19GUlZfRlVOQ0RFU0NfR09UT0ZGTE8sCisrICBCRkRfUkVMT0NfRlJWX0dPVE9GRjEyLAorKyAgQkZEX1JFTE9DX0ZSVl9HT1RPRkZISSwKKysgIEJGRF9SRUxPQ19GUlZfR09UT0ZGTE8sCisrICBCRkRfUkVMT0NfRlJWX0dFVFRMU09GRiwKKysgIEJGRF9SRUxPQ19GUlZfVExTREVTQ19WQUxVRSwKKysgIEJGRF9SRUxPQ19GUlZfR09UVExTREVTQzEyLAorKyAgQkZEX1JFTE9DX0ZSVl9HT1RUTFNERVNDSEksCisrICBCRkRfUkVMT0NfRlJWX0dPVFRMU0RFU0NMTywKKysgIEJGRF9SRUxPQ19GUlZfVExTTU9GRjEyLAorKyAgQkZEX1JFTE9DX0ZSVl9UTFNNT0ZGSEksCisrICBCRkRfUkVMT0NfRlJWX1RMU01PRkZMTywKKysgIEJGRF9SRUxPQ19GUlZfR09UVExTT0ZGMTIsCisrICBCRkRfUkVMT0NfRlJWX0dPVFRMU09GRkhJLAorKyAgQkZEX1JFTE9DX0ZSVl9HT1RUTFNPRkZMTywKKysgIEJGRF9SRUxPQ19GUlZfVExTT0ZGLAorKyAgQkZEX1JFTE9DX0ZSVl9UTFNERVNDX1JFTEFYLAorKyAgQkZEX1JFTE9DX0ZSVl9HRVRUTFNPRkZfUkVMQVgsCisrICBCRkRfUkVMT0NfRlJWX1RMU09GRl9SRUxBWCwKKysgIEJGRF9SRUxPQ19GUlZfVExTTU9GRiwKKysKKysKKysvKiBUaGlzIGlzIGEgMjRiaXQgR09ULXJlbGF0aXZlIHJlbG9jIGZvciB0aGUgbW4xMDMwMC4gICovCisrICBCRkRfUkVMT0NfTU4xMDMwMF9HT1RPRkYyNCwKKysKKysvKiBUaGlzIGlzIGEgMzJiaXQgR09ULXJlbGF0aXZlIHJlbG9jIGZvciB0aGUgbW4xMDMwMCwgb2Zmc2V0IGJ5IHR3byBieXRlcworK2luIHRoZSBpbnN0cnVjdGlvbi4gICovCisrICBCRkRfUkVMT0NfTU4xMDMwMF9HT1QzMiwKKysKKysvKiBUaGlzIGlzIGEgMjRiaXQgR09ULXJlbGF0aXZlIHJlbG9jIGZvciB0aGUgbW4xMDMwMCwgb2Zmc2V0IGJ5IHR3byBieXRlcworK2luIHRoZSBpbnN0cnVjdGlvbi4gICovCisrICBCRkRfUkVMT0NfTU4xMDMwMF9HT1QyNCwKKysKKysvKiBUaGlzIGlzIGEgMTZiaXQgR09ULXJlbGF0aXZlIHJlbG9jIGZvciB0aGUgbW4xMDMwMCwgb2Zmc2V0IGJ5IHR3byBieXRlcworK2luIHRoZSBpbnN0cnVjdGlvbi4gICovCisrICBCRkRfUkVMT0NfTU4xMDMwMF9HT1QxNiwKKysKKysvKiBDb3B5IHN5bWJvbCBhdCBydW50aW1lLiAgKi8KKysgIEJGRF9SRUxPQ19NTjEwMzAwX0NPUFksCisrCisrLyogQ3JlYXRlIEdPVCBlbnRyeS4gICovCisrICBCRkRfUkVMT0NfTU4xMDMwMF9HTE9CX0RBVCwKKysKKysvKiBDcmVhdGUgUExUIGVudHJ5LiAgKi8KKysgIEJGRF9SRUxPQ19NTjEwMzAwX0pNUF9TTE9ULAorKworKy8qIEFkanVzdCBieSBwcm9ncmFtIGJhc2UuICAqLworKyAgQkZEX1JFTE9DX01OMTAzMDBfUkVMQVRJVkUsCisrCisrCisrLyogaTM4Ni9lbGYgcmVsb2NhdGlvbnMgICovCisrICBCRkRfUkVMT0NfMzg2X0dPVDMyLAorKyAgQkZEX1JFTE9DXzM4Nl9QTFQzMiwKKysgIEJGRF9SRUxPQ18zODZfQ09QWSwKKysgIEJGRF9SRUxPQ18zODZfR0xPQl9EQVQsCisrICBCRkRfUkVMT0NfMzg2X0pVTVBfU0xPVCwKKysgIEJGRF9SRUxPQ18zODZfUkVMQVRJVkUsCisrICBCRkRfUkVMT0NfMzg2X0dPVE9GRiwKKysgIEJGRF9SRUxPQ18zODZfR09UUEMsCisrICBCRkRfUkVMT0NfMzg2X1RMU19UUE9GRiwKKysgIEJGRF9SRUxPQ18zODZfVExTX0lFLAorKyAgQkZEX1JFTE9DXzM4Nl9UTFNfR09USUUsCisrICBCRkRfUkVMT0NfMzg2X1RMU19MRSwKKysgIEJGRF9SRUxPQ18zODZfVExTX0dELAorKyAgQkZEX1JFTE9DXzM4Nl9UTFNfTERNLAorKyAgQkZEX1JFTE9DXzM4Nl9UTFNfTERPXzMyLAorKyAgQkZEX1JFTE9DXzM4Nl9UTFNfSUVfMzIsCisrICBCRkRfUkVMT0NfMzg2X1RMU19MRV8zMiwKKysgIEJGRF9SRUxPQ18zODZfVExTX0RUUE1PRDMyLAorKyAgQkZEX1JFTE9DXzM4Nl9UTFNfRFRQT0ZGMzIsCisrICBCRkRfUkVMT0NfMzg2X1RMU19UUE9GRjMyLAorKyAgQkZEX1JFTE9DXzM4Nl9UTFNfR09UREVTQywKKysgIEJGRF9SRUxPQ18zODZfVExTX0RFU0NfQ0FMTCwKKysgIEJGRF9SRUxPQ18zODZfVExTX0RFU0MsCisrCisrLyogeDg2LTY0L2VsZiByZWxvY2F0aW9ucyAgKi8KKysgIEJGRF9SRUxPQ19YODZfNjRfR09UMzIsCisrICBCRkRfUkVMT0NfWDg2XzY0X1BMVDMyLAorKyAgQkZEX1JFTE9DX1g4Nl82NF9DT1BZLAorKyAgQkZEX1JFTE9DX1g4Nl82NF9HTE9CX0RBVCwKKysgIEJGRF9SRUxPQ19YODZfNjRfSlVNUF9TTE9ULAorKyAgQkZEX1JFTE9DX1g4Nl82NF9SRUxBVElWRSwKKysgIEJGRF9SRUxPQ19YODZfNjRfR09UUENSRUwsCisrICBCRkRfUkVMT0NfWDg2XzY0XzMyUywKKysgIEJGRF9SRUxPQ19YODZfNjRfRFRQTU9ENjQsCisrICBCRkRfUkVMT0NfWDg2XzY0X0RUUE9GRjY0LAorKyAgQkZEX1JFTE9DX1g4Nl82NF9UUE9GRjY0LAorKyAgQkZEX1JFTE9DX1g4Nl82NF9UTFNHRCwKKysgIEJGRF9SRUxPQ19YODZfNjRfVExTTEQsCisrICBCRkRfUkVMT0NfWDg2XzY0X0RUUE9GRjMyLAorKyAgQkZEX1JFTE9DX1g4Nl82NF9HT1RUUE9GRiwKKysgIEJGRF9SRUxPQ19YODZfNjRfVFBPRkYzMiwKKysgIEJGRF9SRUxPQ19YODZfNjRfR09UT0ZGNjQsCisrICBCRkRfUkVMT0NfWDg2XzY0X0dPVFBDMzIsCisrICBCRkRfUkVMT0NfWDg2XzY0X0dPVDY0LAorKyAgQkZEX1JFTE9DX1g4Nl82NF9HT1RQQ1JFTDY0LAorKyAgQkZEX1JFTE9DX1g4Nl82NF9HT1RQQzY0LAorKyAgQkZEX1JFTE9DX1g4Nl82NF9HT1RQTFQ2NCwKKysgIEJGRF9SRUxPQ19YODZfNjRfUExUT0ZGNjQsCisrICBCRkRfUkVMT0NfWDg2XzY0X0dPVFBDMzJfVExTREVTQywKKysgIEJGRF9SRUxPQ19YODZfNjRfVExTREVTQ19DQUxMLAorKyAgQkZEX1JFTE9DX1g4Nl82NF9UTFNERVNDLAorKworKy8qIG5zMzJrIHJlbG9jYXRpb25zICAqLworKyAgQkZEX1JFTE9DX05TMzJLX0lNTV84LAorKyAgQkZEX1JFTE9DX05TMzJLX0lNTV8xNiwKKysgIEJGRF9SRUxPQ19OUzMyS19JTU1fMzIsCisrICBCRkRfUkVMT0NfTlMzMktfSU1NXzhfUENSRUwsCisrICBCRkRfUkVMT0NfTlMzMktfSU1NXzE2X1BDUkVMLAorKyAgQkZEX1JFTE9DX05TMzJLX0lNTV8zMl9QQ1JFTCwKKysgIEJGRF9SRUxPQ19OUzMyS19ESVNQXzgsCisrICBCRkRfUkVMT0NfTlMzMktfRElTUF8xNiwKKysgIEJGRF9SRUxPQ19OUzMyS19ESVNQXzMyLAorKyAgQkZEX1JFTE9DX05TMzJLX0RJU1BfOF9QQ1JFTCwKKysgIEJGRF9SRUxPQ19OUzMyS19ESVNQXzE2X1BDUkVMLAorKyAgQkZEX1JFTE9DX05TMzJLX0RJU1BfMzJfUENSRUwsCisrCisrLyogUERQMTEgcmVsb2NhdGlvbnMgICovCisrICBCRkRfUkVMT0NfUERQMTFfRElTUF84X1BDUkVMLAorKyAgQkZEX1JFTE9DX1BEUDExX0RJU1BfNl9QQ1JFTCwKKysKKysvKiBQaWNvamF2YSByZWxvY3MuICBOb3QgYWxsIG9mIHRoZXNlIGFwcGVhciBpbiBvYmplY3QgZmlsZXMuICAqLworKyAgQkZEX1JFTE9DX1BKX0NPREVfSEkxNiwKKysgIEJGRF9SRUxPQ19QSl9DT0RFX0xPMTYsCisrICBCRkRfUkVMT0NfUEpfQ09ERV9ESVIxNiwKKysgIEJGRF9SRUxPQ19QSl9DT0RFX0RJUjMyLAorKyAgQkZEX1JFTE9DX1BKX0NPREVfUkVMMTYsCisrICBCRkRfUkVMT0NfUEpfQ09ERV9SRUwzMiwKKysKKysvKiBQb3dlcihyczYwMDApIGFuZCBQb3dlclBDIHJlbG9jYXRpb25zLiAgKi8KKysgIEJGRF9SRUxPQ19QUENfQjI2LAorKyAgQkZEX1JFTE9DX1BQQ19CQTI2LAorKyAgQkZEX1JFTE9DX1BQQ19UT0MxNiwKKysgIEJGRF9SRUxPQ19QUENfQjE2LAorKyAgQkZEX1JFTE9DX1BQQ19CMTZfQlJUQUtFTiwKKysgIEJGRF9SRUxPQ19QUENfQjE2X0JSTlRBS0VOLAorKyAgQkZEX1JFTE9DX1BQQ19CQTE2LAorKyAgQkZEX1JFTE9DX1BQQ19CQTE2X0JSVEFLRU4sCisrICBCRkRfUkVMT0NfUFBDX0JBMTZfQlJOVEFLRU4sCisrICBCRkRfUkVMT0NfUFBDX0NPUFksCisrICBCRkRfUkVMT0NfUFBDX0dMT0JfREFULAorKyAgQkZEX1JFTE9DX1BQQ19KTVBfU0xPVCwKKysgIEJGRF9SRUxPQ19QUENfUkVMQVRJVkUsCisrICBCRkRfUkVMT0NfUFBDX0xPQ0FMMjRQQywKKysgIEJGRF9SRUxPQ19QUENfRU1CX05BRERSMzIsCisrICBCRkRfUkVMT0NfUFBDX0VNQl9OQUREUjE2LAorKyAgQkZEX1JFTE9DX1BQQ19FTUJfTkFERFIxNl9MTywKKysgIEJGRF9SRUxPQ19QUENfRU1CX05BRERSMTZfSEksCisrICBCRkRfUkVMT0NfUFBDX0VNQl9OQUREUjE2X0hBLAorKyAgQkZEX1JFTE9DX1BQQ19FTUJfU0RBSTE2LAorKyAgQkZEX1JFTE9DX1BQQ19FTUJfU0RBMkkxNiwKKysgIEJGRF9SRUxPQ19QUENfRU1CX1NEQTJSRUwsCisrICBCRkRfUkVMT0NfUFBDX0VNQl9TREEyMSwKKysgIEJGRF9SRUxPQ19QUENfRU1CX01SS1JFRiwKKysgIEJGRF9SRUxPQ19QUENfRU1CX1JFTFNFQzE2LAorKyAgQkZEX1JFTE9DX1BQQ19FTUJfUkVMU1RfTE8sCisrICBCRkRfUkVMT0NfUFBDX0VNQl9SRUxTVF9ISSwKKysgIEJGRF9SRUxPQ19QUENfRU1CX1JFTFNUX0hBLAorKyAgQkZEX1JFTE9DX1BQQ19FTUJfQklUX0ZMRCwKKysgIEJGRF9SRUxPQ19QUENfRU1CX1JFTFNEQSwKKysgIEJGRF9SRUxPQ19QUEM2NF9ISUdIRVIsCisrICBCRkRfUkVMT0NfUFBDNjRfSElHSEVSX1MsCisrICBCRkRfUkVMT0NfUFBDNjRfSElHSEVTVCwKKysgIEJGRF9SRUxPQ19QUEM2NF9ISUdIRVNUX1MsCisrICBCRkRfUkVMT0NfUFBDNjRfVE9DMTZfTE8sCisrICBCRkRfUkVMT0NfUFBDNjRfVE9DMTZfSEksCisrICBCRkRfUkVMT0NfUFBDNjRfVE9DMTZfSEEsCisrICBCRkRfUkVMT0NfUFBDNjRfVE9DLAorKyAgQkZEX1JFTE9DX1BQQzY0X1BMVEdPVDE2LAorKyAgQkZEX1JFTE9DX1BQQzY0X1BMVEdPVDE2X0xPLAorKyAgQkZEX1JFTE9DX1BQQzY0X1BMVEdPVDE2X0hJLAorKyAgQkZEX1JFTE9DX1BQQzY0X1BMVEdPVDE2X0hBLAorKyAgQkZEX1JFTE9DX1BQQzY0X0FERFIxNl9EUywKKysgIEJGRF9SRUxPQ19QUEM2NF9BRERSMTZfTE9fRFMsCisrICBCRkRfUkVMT0NfUFBDNjRfR09UMTZfRFMsCisrICBCRkRfUkVMT0NfUFBDNjRfR09UMTZfTE9fRFMsCisrICBCRkRfUkVMT0NfUFBDNjRfUExUMTZfTE9fRFMsCisrICBCRkRfUkVMT0NfUFBDNjRfU0VDVE9GRl9EUywKKysgIEJGRF9SRUxPQ19QUEM2NF9TRUNUT0ZGX0xPX0RTLAorKyAgQkZEX1JFTE9DX1BQQzY0X1RPQzE2X0RTLAorKyAgQkZEX1JFTE9DX1BQQzY0X1RPQzE2X0xPX0RTLAorKyAgQkZEX1JFTE9DX1BQQzY0X1BMVEdPVDE2X0RTLAorKyAgQkZEX1JFTE9DX1BQQzY0X1BMVEdPVDE2X0xPX0RTLAorKworKy8qIFBvd2VyUEMgYW5kIFBvd2VyUEM2NCB0aHJlYWQtbG9jYWwgc3RvcmFnZSByZWxvY2F0aW9ucy4gICovCisrICBCRkRfUkVMT0NfUFBDX1RMUywKKysgIEJGRF9SRUxPQ19QUENfRFRQTU9ELAorKyAgQkZEX1JFTE9DX1BQQ19UUFJFTDE2LAorKyAgQkZEX1JFTE9DX1BQQ19UUFJFTDE2X0xPLAorKyAgQkZEX1JFTE9DX1BQQ19UUFJFTDE2X0hJLAorKyAgQkZEX1JFTE9DX1BQQ19UUFJFTDE2X0hBLAorKyAgQkZEX1JFTE9DX1BQQ19UUFJFTCwKKysgIEJGRF9SRUxPQ19QUENfRFRQUkVMMTYsCisrICBCRkRfUkVMT0NfUFBDX0RUUFJFTDE2X0xPLAorKyAgQkZEX1JFTE9DX1BQQ19EVFBSRUwxNl9ISSwKKysgIEJGRF9SRUxPQ19QUENfRFRQUkVMMTZfSEEsCisrICBCRkRfUkVMT0NfUFBDX0RUUFJFTCwKKysgIEJGRF9SRUxPQ19QUENfR09UX1RMU0dEMTYsCisrICBCRkRfUkVMT0NfUFBDX0dPVF9UTFNHRDE2X0xPLAorKyAgQkZEX1JFTE9DX1BQQ19HT1RfVExTR0QxNl9ISSwKKysgIEJGRF9SRUxPQ19QUENfR09UX1RMU0dEMTZfSEEsCisrICBCRkRfUkVMT0NfUFBDX0dPVF9UTFNMRDE2LAorKyAgQkZEX1JFTE9DX1BQQ19HT1RfVExTTEQxNl9MTywKKysgIEJGRF9SRUxPQ19QUENfR09UX1RMU0xEMTZfSEksCisrICBCRkRfUkVMT0NfUFBDX0dPVF9UTFNMRDE2X0hBLAorKyAgQkZEX1JFTE9DX1BQQ19HT1RfVFBSRUwxNiwKKysgIEJGRF9SRUxPQ19QUENfR09UX1RQUkVMMTZfTE8sCisrICBCRkRfUkVMT0NfUFBDX0dPVF9UUFJFTDE2X0hJLAorKyAgQkZEX1JFTE9DX1BQQ19HT1RfVFBSRUwxNl9IQSwKKysgIEJGRF9SRUxPQ19QUENfR09UX0RUUFJFTDE2LAorKyAgQkZEX1JFTE9DX1BQQ19HT1RfRFRQUkVMMTZfTE8sCisrICBCRkRfUkVMT0NfUFBDX0dPVF9EVFBSRUwxNl9ISSwKKysgIEJGRF9SRUxPQ19QUENfR09UX0RUUFJFTDE2X0hBLAorKyAgQkZEX1JFTE9DX1BQQzY0X1RQUkVMMTZfRFMsCisrICBCRkRfUkVMT0NfUFBDNjRfVFBSRUwxNl9MT19EUywKKysgIEJGRF9SRUxPQ19QUEM2NF9UUFJFTDE2X0hJR0hFUiwKKysgIEJGRF9SRUxPQ19QUEM2NF9UUFJFTDE2X0hJR0hFUkEsCisrICBCRkRfUkVMT0NfUFBDNjRfVFBSRUwxNl9ISUdIRVNULAorKyAgQkZEX1JFTE9DX1BQQzY0X1RQUkVMMTZfSElHSEVTVEEsCisrICBCRkRfUkVMT0NfUFBDNjRfRFRQUkVMMTZfRFMsCisrICBCRkRfUkVMT0NfUFBDNjRfRFRQUkVMMTZfTE9fRFMsCisrICBCRkRfUkVMT0NfUFBDNjRfRFRQUkVMMTZfSElHSEVSLAorKyAgQkZEX1JFTE9DX1BQQzY0X0RUUFJFTDE2X0hJR0hFUkEsCisrICBCRkRfUkVMT0NfUFBDNjRfRFRQUkVMMTZfSElHSEVTVCwKKysgIEJGRF9SRUxPQ19QUEM2NF9EVFBSRUwxNl9ISUdIRVNUQSwKKysKKysvKiBJQk0gMzcwLzM5MCByZWxvY2F0aW9ucyAgKi8KKysgIEJGRF9SRUxPQ19JMzcwX0QxMiwKKysKKysvKiBUaGUgdHlwZSBvZiByZWxvYyB1c2VkIHRvIGJ1aWxkIGEgY29uc3RydWN0b3IgdGFibGUgLSBhdCB0aGUgbW9tZW50CisrcHJvYmFibHkgYSAzMiBiaXQgd2lkZSBhYnNvbHV0ZSByZWxvY2F0aW9uLCBidXQgdGhlIHRhcmdldCBjYW4gY2hvb3NlLgorK0l0IGdlbmVyYWxseSBkb2VzIG1hcCB0byBvbmUgb2YgdGhlIG90aGVyIHJlbG9jYXRpb24gdHlwZXMuICAqLworKyAgQkZEX1JFTE9DX0NUT1IsCisrCisrLyogQVJNIDI2IGJpdCBwYy1yZWxhdGl2ZSBicmFuY2guICBUaGUgbG93ZXN0IHR3byBiaXRzIG11c3QgYmUgemVybyBhbmQgYXJlCisrbm90IHN0b3JlZCBpbiB0aGUgaW5zdHJ1Y3Rpb24uICAqLworKyAgQkZEX1JFTE9DX0FSTV9QQ1JFTF9CUkFOQ0gsCisrCisrLyogQVJNIDI2IGJpdCBwYy1yZWxhdGl2ZSBicmFuY2guICBUaGUgbG93ZXN0IGJpdCBtdXN0IGJlIHplcm8gYW5kIGlzCisrbm90IHN0b3JlZCBpbiB0aGUgaW5zdHJ1Y3Rpb24uICBUaGUgMm5kIGxvd2VzdCBiaXQgY29tZXMgZnJvbSBhIDEgYml0CisrZmllbGQgaW4gdGhlIGluc3RydWN0aW9uLiAgKi8KKysgIEJGRF9SRUxPQ19BUk1fUENSRUxfQkxYLAorKworKy8qIFRodW1iIDIyIGJpdCBwYy1yZWxhdGl2ZSBicmFuY2guICBUaGUgbG93ZXN0IGJpdCBtdXN0IGJlIHplcm8gYW5kIGlzCisrbm90IHN0b3JlZCBpbiB0aGUgaW5zdHJ1Y3Rpb24uICBUaGUgMm5kIGxvd2VzdCBiaXQgY29tZXMgZnJvbSBhIDEgYml0CisrZmllbGQgaW4gdGhlIGluc3RydWN0aW9uLiAgKi8KKysgIEJGRF9SRUxPQ19USFVNQl9QQ1JFTF9CTFgsCisrCisrLyogQVJNIDI2LWJpdCBwYy1yZWxhdGl2ZSBicmFuY2ggZm9yIGFuIHVuY29uZGl0aW9uYWwgQkwgb3IgQkxYIGluc3RydWN0aW9uLiAgKi8KKysgIEJGRF9SRUxPQ19BUk1fUENSRUxfQ0FMTCwKKysKKysvKiBBUk0gMjYtYml0IHBjLXJlbGF0aXZlIGJyYW5jaCBmb3IgQiBvciBjb25kaXRpb25hbCBCTCBpbnN0cnVjdGlvbi4gICovCisrICBCRkRfUkVMT0NfQVJNX1BDUkVMX0pVTVAsCisrCisrLyogVGh1bWIgNy0sIDktLCAxMi0sIDIwLSwgMjMtLCBhbmQgMjUtYml0IHBjLXJlbGF0aXZlIGJyYW5jaGVzLgorK1RoZSBsb3dlc3QgYml0IG11c3QgYmUgemVybyBhbmQgaXMgbm90IHN0b3JlZCBpbiB0aGUgaW5zdHJ1Y3Rpb24uCisrTm90ZSB0aGF0IHRoZSBjb3JyZXNwb25kaW5nIEVMRiBSX0FSTV9USE1fSlVNUG5uIGNvbnN0YW50IGhhcyBhbgorKyJubiIgb25lIHNtYWxsZXIgaW4gYWxsIGNhc2VzLiAgTm90ZSBmdXJ0aGVyIHRoYXQgQlJBTkNIMjMKKytjb3JyZXNwb25kcyB0byBSX0FSTV9USE1fQ0FMTC4gICovCisrICBCRkRfUkVMT0NfVEhVTUJfUENSRUxfQlJBTkNINywKKysgIEJGRF9SRUxPQ19USFVNQl9QQ1JFTF9CUkFOQ0g5LAorKyAgQkZEX1JFTE9DX1RIVU1CX1BDUkVMX0JSQU5DSDEyLAorKyAgQkZEX1JFTE9DX1RIVU1CX1BDUkVMX0JSQU5DSDIwLAorKyAgQkZEX1JFTE9DX1RIVU1CX1BDUkVMX0JSQU5DSDIzLAorKyAgQkZEX1JFTE9DX1RIVU1CX1BDUkVMX0JSQU5DSDI1LAorKworKy8qIDEyLWJpdCBpbW1lZGlhdGUgb2Zmc2V0LCB1c2VkIGluIEFSTS1mb3JtYXQgbGRyIGFuZCBzdHIgaW5zdHJ1Y3Rpb25zLiAgKi8KKysgIEJGRF9SRUxPQ19BUk1fT0ZGU0VUX0lNTSwKKysKKysvKiA1LWJpdCBpbW1lZGlhdGUgb2Zmc2V0LCB1c2VkIGluIFRodW1iLWZvcm1hdCBsZHIgYW5kIHN0ciBpbnN0cnVjdGlvbnMuICAqLworKyAgQkZEX1JFTE9DX0FSTV9USFVNQl9PRkZTRVQsCisrCisrLyogUGMtcmVsYXRpdmUgb3IgYWJzb2x1dGUgcmVsb2NhdGlvbiBkZXBlbmRpbmcgb24gdGFyZ2V0LiAgVXNlZCBmb3IKKytlbnRyaWVzIGluIC5pbml0X2FycmF5IHNlY3Rpb25zLiAgKi8KKysgIEJGRF9SRUxPQ19BUk1fVEFSR0VUMSwKKysKKysvKiBSZWFkLW9ubHkgc2VnbWVudCBiYXNlIHJlbGF0aXZlIGFkZHJlc3MuICAqLworKyAgQkZEX1JFTE9DX0FSTV9ST1NFR1JFTDMyLAorKworKy8qIERhdGEgc2VnbWVudCBiYXNlIHJlbGF0aXZlIGFkZHJlc3MuICAqLworKyAgQkZEX1JFTE9DX0FSTV9TQlJFTDMyLAorKworKy8qIFRoaXMgcmVsb2MgaXMgdXNlZCBmb3IgcmVmZXJlbmNlcyB0byBSVFRJIGRhdGEgZnJvbSBleGNlcHRpb24gaGFuZGxpbmcKKyt0YWJsZXMuICBUaGUgYWN0dWFsIGRlZmluaXRpb24gZGVwZW5kcyBvbiB0aGUgdGFyZ2V0LiAgSXQgbWF5IGJlIGEKKytwYy1yZWxhdGl2ZSBvciBzb21lIGZvcm0gb2YgR09ULWluZGlyZWN0IHJlbG9jYXRpb24uICAqLworKyAgQkZEX1JFTE9DX0FSTV9UQVJHRVQyLAorKworKy8qIDMxLWJpdCBQQyByZWxhdGl2ZSBhZGRyZXNzLiAgKi8KKysgIEJGRF9SRUxPQ19BUk1fUFJFTDMxLAorKworKy8qIExvdyBhbmQgSGlnaCBoYWxmd29yZCByZWxvY2F0aW9ucyBmb3IgTU9WVyBhbmQgTU9WVCBpbnN0cnVjdGlvbnMuICAqLworKyAgQkZEX1JFTE9DX0FSTV9NT1ZXLAorKyAgQkZEX1JFTE9DX0FSTV9NT1ZULAorKyAgQkZEX1JFTE9DX0FSTV9NT1ZXX1BDUkVMLAorKyAgQkZEX1JFTE9DX0FSTV9NT1ZUX1BDUkVMLAorKyAgQkZEX1JFTE9DX0FSTV9USFVNQl9NT1ZXLAorKyAgQkZEX1JFTE9DX0FSTV9USFVNQl9NT1ZULAorKyAgQkZEX1JFTE9DX0FSTV9USFVNQl9NT1ZXX1BDUkVMLAorKyAgQkZEX1JFTE9DX0FSTV9USFVNQl9NT1ZUX1BDUkVMLAorKworKy8qIFJlbG9jYXRpb25zIGZvciBzZXR0aW5nIHVwIEdPVHMgYW5kIFBMVHMgZm9yIHNoYXJlZCBsaWJyYXJpZXMuICAqLworKyAgQkZEX1JFTE9DX0FSTV9KVU1QX1NMT1QsCisrICBCRkRfUkVMT0NfQVJNX0dMT0JfREFULAorKyAgQkZEX1JFTE9DX0FSTV9HT1QzMiwKKysgIEJGRF9SRUxPQ19BUk1fUExUMzIsCisrICBCRkRfUkVMT0NfQVJNX1JFTEFUSVZFLAorKyAgQkZEX1JFTE9DX0FSTV9HT1RPRkYsCisrICBCRkRfUkVMT0NfQVJNX0dPVFBDLAorKworKy8qIEFSTSB0aHJlYWQtbG9jYWwgc3RvcmFnZSByZWxvY2F0aW9ucy4gICovCisrICBCRkRfUkVMT0NfQVJNX1RMU19HRDMyLAorKyAgQkZEX1JFTE9DX0FSTV9UTFNfTERPMzIsCisrICBCRkRfUkVMT0NfQVJNX1RMU19MRE0zMiwKKysgIEJGRF9SRUxPQ19BUk1fVExTX0RUUE9GRjMyLAorKyAgQkZEX1JFTE9DX0FSTV9UTFNfRFRQTU9EMzIsCisrICBCRkRfUkVMT0NfQVJNX1RMU19UUE9GRjMyLAorKyAgQkZEX1JFTE9DX0FSTV9UTFNfSUUzMiwKKysgIEJGRF9SRUxPQ19BUk1fVExTX0xFMzIsCisrCisrLyogQVJNIGdyb3VwIHJlbG9jYXRpb25zLiAgKi8KKysgIEJGRF9SRUxPQ19BUk1fQUxVX1BDX0cwX05DLAorKyAgQkZEX1JFTE9DX0FSTV9BTFVfUENfRzAsCisrICBCRkRfUkVMT0NfQVJNX0FMVV9QQ19HMV9OQywKKysgIEJGRF9SRUxPQ19BUk1fQUxVX1BDX0cxLAorKyAgQkZEX1JFTE9DX0FSTV9BTFVfUENfRzIsCisrICBCRkRfUkVMT0NfQVJNX0xEUl9QQ19HMCwKKysgIEJGRF9SRUxPQ19BUk1fTERSX1BDX0cxLAorKyAgQkZEX1JFTE9DX0FSTV9MRFJfUENfRzIsCisrICBCRkRfUkVMT0NfQVJNX0xEUlNfUENfRzAsCisrICBCRkRfUkVMT0NfQVJNX0xEUlNfUENfRzEsCisrICBCRkRfUkVMT0NfQVJNX0xEUlNfUENfRzIsCisrICBCRkRfUkVMT0NfQVJNX0xEQ19QQ19HMCwKKysgIEJGRF9SRUxPQ19BUk1fTERDX1BDX0cxLAorKyAgQkZEX1JFTE9DX0FSTV9MRENfUENfRzIsCisrICBCRkRfUkVMT0NfQVJNX0FMVV9TQl9HMF9OQywKKysgIEJGRF9SRUxPQ19BUk1fQUxVX1NCX0cwLAorKyAgQkZEX1JFTE9DX0FSTV9BTFVfU0JfRzFfTkMsCisrICBCRkRfUkVMT0NfQVJNX0FMVV9TQl9HMSwKKysgIEJGRF9SRUxPQ19BUk1fQUxVX1NCX0cyLAorKyAgQkZEX1JFTE9DX0FSTV9MRFJfU0JfRzAsCisrICBCRkRfUkVMT0NfQVJNX0xEUl9TQl9HMSwKKysgIEJGRF9SRUxPQ19BUk1fTERSX1NCX0cyLAorKyAgQkZEX1JFTE9DX0FSTV9MRFJTX1NCX0cwLAorKyAgQkZEX1JFTE9DX0FSTV9MRFJTX1NCX0cxLAorKyAgQkZEX1JFTE9DX0FSTV9MRFJTX1NCX0cyLAorKyAgQkZEX1JFTE9DX0FSTV9MRENfU0JfRzAsCisrICBCRkRfUkVMT0NfQVJNX0xEQ19TQl9HMSwKKysgIEJGRF9SRUxPQ19BUk1fTERDX1NCX0cyLAorKworKy8qIFRoZXNlIHJlbG9jcyBhcmUgb25seSB1c2VkIHdpdGhpbiB0aGUgQVJNIGFzc2VtYmxlci4gIFRoZXkgYXJlIG5vdAorKyhhdCBwcmVzZW50KSB3cml0dGVuIHRvIGFueSBvYmplY3QgZmlsZXMuICAqLworKyAgQkZEX1JFTE9DX0FSTV9JTU1FRElBVEUsCisrICBCRkRfUkVMT0NfQVJNX0FEUkxfSU1NRURJQVRFLAorKyAgQkZEX1JFTE9DX0FSTV9UMzJfSU1NRURJQVRFLAorKyAgQkZEX1JFTE9DX0FSTV9UMzJfQUREX0lNTSwKKysgIEJGRF9SRUxPQ19BUk1fVDMyX0lNTTEyLAorKyAgQkZEX1JFTE9DX0FSTV9UMzJfQUREX1BDMTIsCisrICBCRkRfUkVMT0NfQVJNX1NISUZUX0lNTSwKKysgIEJGRF9SRUxPQ19BUk1fU01DLAorKyAgQkZEX1JFTE9DX0FSTV9TV0ksCisrICBCRkRfUkVMT0NfQVJNX01VTFRJLAorKyAgQkZEX1JFTE9DX0FSTV9DUF9PRkZfSU1NLAorKyAgQkZEX1JFTE9DX0FSTV9DUF9PRkZfSU1NX1MyLAorKyAgQkZEX1JFTE9DX0FSTV9UMzJfQ1BfT0ZGX0lNTSwKKysgIEJGRF9SRUxPQ19BUk1fVDMyX0NQX09GRl9JTU1fUzIsCisrICBCRkRfUkVMT0NfQVJNX0FEUl9JTU0sCisrICBCRkRfUkVMT0NfQVJNX0xEUl9JTU0sCisrICBCRkRfUkVMT0NfQVJNX0xJVEVSQUwsCisrICBCRkRfUkVMT0NfQVJNX0lOX1BPT0wsCisrICBCRkRfUkVMT0NfQVJNX09GRlNFVF9JTU04LAorKyAgQkZEX1JFTE9DX0FSTV9UMzJfT0ZGU0VUX1U4LAorKyAgQkZEX1JFTE9DX0FSTV9UMzJfT0ZGU0VUX0lNTSwKKysgIEJGRF9SRUxPQ19BUk1fSFdMSVRFUkFMLAorKyAgQkZEX1JFTE9DX0FSTV9USFVNQl9BREQsCisrICBCRkRfUkVMT0NfQVJNX1RIVU1CX0lNTSwKKysgIEJGRF9SRUxPQ19BUk1fVEhVTUJfU0hJRlQsCisrCisrLyogUmVuZXNhcyAvIFN1cGVySCBTSCByZWxvY3MuICBOb3QgYWxsIG9mIHRoZXNlIGFwcGVhciBpbiBvYmplY3QgZmlsZXMuICAqLworKyAgQkZEX1JFTE9DX1NIX1BDRElTUDhCWTIsCisrICBCRkRfUkVMT0NfU0hfUENESVNQMTJCWTIsCisrICBCRkRfUkVMT0NfU0hfSU1NMywKKysgIEJGRF9SRUxPQ19TSF9JTU0zVSwKKysgIEJGRF9SRUxPQ19TSF9ESVNQMTIsCisrICBCRkRfUkVMT0NfU0hfRElTUDEyQlkyLAorKyAgQkZEX1JFTE9DX1NIX0RJU1AxMkJZNCwKKysgIEJGRF9SRUxPQ19TSF9ESVNQMTJCWTgsCisrICBCRkRfUkVMT0NfU0hfRElTUDIwLAorKyAgQkZEX1JFTE9DX1NIX0RJU1AyMEJZOCwKKysgIEJGRF9SRUxPQ19TSF9JTU00LAorKyAgQkZEX1JFTE9DX1NIX0lNTTRCWTIsCisrICBCRkRfUkVMT0NfU0hfSU1NNEJZNCwKKysgIEJGRF9SRUxPQ19TSF9JTU04LAorKyAgQkZEX1JFTE9DX1NIX0lNTThCWTIsCisrICBCRkRfUkVMT0NfU0hfSU1NOEJZNCwKKysgIEJGRF9SRUxPQ19TSF9QQ1JFTElNTThCWTIsCisrICBCRkRfUkVMT0NfU0hfUENSRUxJTU04Qlk0LAorKyAgQkZEX1JFTE9DX1NIX1NXSVRDSDE2LAorKyAgQkZEX1JFTE9DX1NIX1NXSVRDSDMyLAorKyAgQkZEX1JFTE9DX1NIX1VTRVMsCisrICBCRkRfUkVMT0NfU0hfQ09VTlQsCisrICBCRkRfUkVMT0NfU0hfQUxJR04sCisrICBCRkRfUkVMT0NfU0hfQ09ERSwKKysgIEJGRF9SRUxPQ19TSF9EQVRBLAorKyAgQkZEX1JFTE9DX1NIX0xBQkVMLAorKyAgQkZEX1JFTE9DX1NIX0xPT1BfU1RBUlQsCisrICBCRkRfUkVMT0NfU0hfTE9PUF9FTkQsCisrICBCRkRfUkVMT0NfU0hfQ09QWSwKKysgIEJGRF9SRUxPQ19TSF9HTE9CX0RBVCwKKysgIEJGRF9SRUxPQ19TSF9KTVBfU0xPVCwKKysgIEJGRF9SRUxPQ19TSF9SRUxBVElWRSwKKysgIEJGRF9SRUxPQ19TSF9HT1RQQywKKysgIEJGRF9SRUxPQ19TSF9HT1RfTE9XMTYsCisrICBCRkRfUkVMT0NfU0hfR09UX01FRExPVzE2LAorKyAgQkZEX1JFTE9DX1NIX0dPVF9NRURISTE2LAorKyAgQkZEX1JFTE9DX1NIX0dPVF9ISTE2LAorKyAgQkZEX1JFTE9DX1NIX0dPVFBMVF9MT1cxNiwKKysgIEJGRF9SRUxPQ19TSF9HT1RQTFRfTUVETE9XMTYsCisrICBCRkRfUkVMT0NfU0hfR09UUExUX01FREhJMTYsCisrICBCRkRfUkVMT0NfU0hfR09UUExUX0hJMTYsCisrICBCRkRfUkVMT0NfU0hfUExUX0xPVzE2LAorKyAgQkZEX1JFTE9DX1NIX1BMVF9NRURMT1cxNiwKKysgIEJGRF9SRUxPQ19TSF9QTFRfTUVESEkxNiwKKysgIEJGRF9SRUxPQ19TSF9QTFRfSEkxNiwKKysgIEJGRF9SRUxPQ19TSF9HT1RPRkZfTE9XMTYsCisrICBCRkRfUkVMT0NfU0hfR09UT0ZGX01FRExPVzE2LAorKyAgQkZEX1JFTE9DX1NIX0dPVE9GRl9NRURISTE2LAorKyAgQkZEX1JFTE9DX1NIX0dPVE9GRl9ISTE2LAorKyAgQkZEX1JFTE9DX1NIX0dPVFBDX0xPVzE2LAorKyAgQkZEX1JFTE9DX1NIX0dPVFBDX01FRExPVzE2LAorKyAgQkZEX1JFTE9DX1NIX0dPVFBDX01FREhJMTYsCisrICBCRkRfUkVMT0NfU0hfR09UUENfSEkxNiwKKysgIEJGRF9SRUxPQ19TSF9DT1BZNjQsCisrICBCRkRfUkVMT0NfU0hfR0xPQl9EQVQ2NCwKKysgIEJGRF9SRUxPQ19TSF9KTVBfU0xPVDY0LAorKyAgQkZEX1JFTE9DX1NIX1JFTEFUSVZFNjQsCisrICBCRkRfUkVMT0NfU0hfR09UMTBCWTQsCisrICBCRkRfUkVMT0NfU0hfR09UMTBCWTgsCisrICBCRkRfUkVMT0NfU0hfR09UUExUMTBCWTQsCisrICBCRkRfUkVMT0NfU0hfR09UUExUMTBCWTgsCisrICBCRkRfUkVMT0NfU0hfR09UUExUMzIsCisrICBCRkRfUkVMT0NfU0hfU0hNRURJQV9DT0RFLAorKyAgQkZEX1JFTE9DX1NIX0lNTVU1LAorKyAgQkZEX1JFTE9DX1NIX0lNTVM2LAorKyAgQkZEX1JFTE9DX1NIX0lNTVM2QlkzMiwKKysgIEJGRF9SRUxPQ19TSF9JTU1VNiwKKysgIEJGRF9SRUxPQ19TSF9JTU1TMTAsCisrICBCRkRfUkVMT0NfU0hfSU1NUzEwQlkyLAorKyAgQkZEX1JFTE9DX1NIX0lNTVMxMEJZNCwKKysgIEJGRF9SRUxPQ19TSF9JTU1TMTBCWTgsCisrICBCRkRfUkVMT0NfU0hfSU1NUzE2LAorKyAgQkZEX1JFTE9DX1NIX0lNTVUxNiwKKysgIEJGRF9SRUxPQ19TSF9JTU1fTE9XMTYsCisrICBCRkRfUkVMT0NfU0hfSU1NX0xPVzE2X1BDUkVMLAorKyAgQkZEX1JFTE9DX1NIX0lNTV9NRURMT1cxNiwKKysgIEJGRF9SRUxPQ19TSF9JTU1fTUVETE9XMTZfUENSRUwsCisrICBCRkRfUkVMT0NfU0hfSU1NX01FREhJMTYsCisrICBCRkRfUkVMT0NfU0hfSU1NX01FREhJMTZfUENSRUwsCisrICBCRkRfUkVMT0NfU0hfSU1NX0hJMTYsCisrICBCRkRfUkVMT0NfU0hfSU1NX0hJMTZfUENSRUwsCisrICBCRkRfUkVMT0NfU0hfUFRfMTYsCisrICBCRkRfUkVMT0NfU0hfVExTX0dEXzMyLAorKyAgQkZEX1JFTE9DX1NIX1RMU19MRF8zMiwKKysgIEJGRF9SRUxPQ19TSF9UTFNfTERPXzMyLAorKyAgQkZEX1JFTE9DX1NIX1RMU19JRV8zMiwKKysgIEJGRF9SRUxPQ19TSF9UTFNfTEVfMzIsCisrICBCRkRfUkVMT0NfU0hfVExTX0RUUE1PRDMyLAorKyAgQkZEX1JFTE9DX1NIX1RMU19EVFBPRkYzMiwKKysgIEJGRF9SRUxPQ19TSF9UTFNfVFBPRkYzMiwKKysKKysvKiBBUkMgQ29yZXMgcmVsb2NzLgorK0FSQyAyMiBiaXQgcGMtcmVsYXRpdmUgYnJhbmNoLiAgVGhlIGxvd2VzdCB0d28gYml0cyBtdXN0IGJlIHplcm8gYW5kIGFyZQorK25vdCBzdG9yZWQgaW4gdGhlIGluc3RydWN0aW9uLiAgVGhlIGhpZ2ggMjAgYml0cyBhcmUgaW5zdGFsbGVkIGluIGJpdHMgMjYKKyt0aHJvdWdoIDcgb2YgdGhlIGluc3RydWN0aW9uLiAgKi8KKysgIEJGRF9SRUxPQ19BUkNfQjIyX1BDUkVMLAorKworKy8qIEFSQyAyNiBiaXQgYWJzb2x1dGUgYnJhbmNoLiAgVGhlIGxvd2VzdCB0d28gYml0cyBtdXN0IGJlIHplcm8gYW5kIGFyZSBub3QKKytzdG9yZWQgaW4gdGhlIGluc3RydWN0aW9uLiAgVGhlIGhpZ2ggMjQgYml0cyBhcmUgaW5zdGFsbGVkIGluIGJpdHMgMjMKKyt0aHJvdWdoIDAuICAqLworKyAgQkZEX1JFTE9DX0FSQ19CMjYsCisrCisrLyogQURJIEJsYWNrZmluIDE2IGJpdCBpbW1lZGlhdGUgYWJzb2x1dGUgcmVsb2MuICAqLworKyAgQkZEX1JFTE9DX0JGSU5fMTZfSU1NLAorKworKy8qIEFESSBCbGFja2ZpbiAxNiBiaXQgaW1tZWRpYXRlIGFic29sdXRlIHJlbG9jIGhpZ2hlciAxNiBiaXRzLiAgKi8KKysgIEJGRF9SRUxPQ19CRklOXzE2X0hJR0gsCisrCisrLyogQURJIEJsYWNrZmluICdhJyBwYXJ0IG9mIExTRVRVUC4gICovCisrICBCRkRfUkVMT0NfQkZJTl80X1BDUkVMLAorKworKy8qIEFESSBCbGFja2Zpbi4gICovCisrICBCRkRfUkVMT0NfQkZJTl81X1BDUkVMLAorKworKy8qIEFESSBCbGFja2ZpbiAxNiBiaXQgaW1tZWRpYXRlIGFic29sdXRlIHJlbG9jIGxvd2VyIDE2IGJpdHMuICAqLworKyAgQkZEX1JFTE9DX0JGSU5fMTZfTE9XLAorKworKy8qIEFESSBCbGFja2Zpbi4gICovCisrICBCRkRfUkVMT0NfQkZJTl8xMF9QQ1JFTCwKKysKKysvKiBBREkgQmxhY2tmaW4gJ2InIHBhcnQgb2YgTFNFVFVQLiAgKi8KKysgIEJGRF9SRUxPQ19CRklOXzExX1BDUkVMLAorKworKy8qIEFESSBCbGFja2Zpbi4gICovCisrICBCRkRfUkVMT0NfQkZJTl8xMl9QQ1JFTF9KVU1QLAorKworKy8qIEFESSBCbGFja2ZpbiBTaG9ydCBqdW1wLCBwY3JlbC4gICovCisrICBCRkRfUkVMT0NfQkZJTl8xMl9QQ1JFTF9KVU1QX1MsCisrCisrLyogQURJIEJsYWNrZmluIENhbGwueCBub3QgaW1wbGVtZW50ZWQuICAqLworKyAgQkZEX1JFTE9DX0JGSU5fMjRfUENSRUxfQ0FMTF9YLAorKworKy8qIEFESSBCbGFja2ZpbiBMb25nIEp1bXAgcGNyZWwuICAqLworKyAgQkZEX1JFTE9DX0JGSU5fMjRfUENSRUxfSlVNUF9MLAorKworKy8qIEFESSBCbGFja2ZpbiBGRC1QSUMgcmVsb2NhdGlvbnMuICAqLworKyAgQkZEX1JFTE9DX0JGSU5fR09UMTdNNCwKKysgIEJGRF9SRUxPQ19CRklOX0dPVEhJLAorKyAgQkZEX1JFTE9DX0JGSU5fR09UTE8sCisrICBCRkRfUkVMT0NfQkZJTl9GVU5DREVTQywKKysgIEJGRF9SRUxPQ19CRklOX0ZVTkNERVNDX0dPVDE3TTQsCisrICBCRkRfUkVMT0NfQkZJTl9GVU5DREVTQ19HT1RISSwKKysgIEJGRF9SRUxPQ19CRklOX0ZVTkNERVNDX0dPVExPLAorKyAgQkZEX1JFTE9DX0JGSU5fRlVOQ0RFU0NfVkFMVUUsCisrICBCRkRfUkVMT0NfQkZJTl9GVU5DREVTQ19HT1RPRkYxN000LAorKyAgQkZEX1JFTE9DX0JGSU5fRlVOQ0RFU0NfR09UT0ZGSEksCisrICBCRkRfUkVMT0NfQkZJTl9GVU5DREVTQ19HT1RPRkZMTywKKysgIEJGRF9SRUxPQ19CRklOX0dPVE9GRjE3TTQsCisrICBCRkRfUkVMT0NfQkZJTl9HT1RPRkZISSwKKysgIEJGRF9SRUxPQ19CRklOX0dPVE9GRkxPLAorKworKy8qIEFESSBCbGFja2ZpbiBHT1QgcmVsb2NhdGlvbi4gICovCisrICBCRkRfUkVMT0NfQkZJTl9HT1QsCisrCisrLyogQURJIEJsYWNrZmluIFBMVFBDIHJlbG9jYXRpb24uICAqLworKyAgQkZEX1JFTE9DX0JGSU5fUExUUEMsCisrCisrLyogQURJIEJsYWNrZmluIGFyaXRobWV0aWMgcmVsb2NhdGlvbi4gICovCisrICBCRkRfQVJFTE9DX0JGSU5fUFVTSCwKKysKKysvKiBBREkgQmxhY2tmaW4gYXJpdGhtZXRpYyByZWxvY2F0aW9uLiAgKi8KKysgIEJGRF9BUkVMT0NfQkZJTl9DT05TVCwKKysKKysvKiBBREkgQmxhY2tmaW4gYXJpdGhtZXRpYyByZWxvY2F0aW9uLiAgKi8KKysgIEJGRF9BUkVMT0NfQkZJTl9BREQsCisrCisrLyogQURJIEJsYWNrZmluIGFyaXRobWV0aWMgcmVsb2NhdGlvbi4gICovCisrICBCRkRfQVJFTE9DX0JGSU5fU1VCLAorKworKy8qIEFESSBCbGFja2ZpbiBhcml0aG1ldGljIHJlbG9jYXRpb24uICAqLworKyAgQkZEX0FSRUxPQ19CRklOX01VTFQsCisrCisrLyogQURJIEJsYWNrZmluIGFyaXRobWV0aWMgcmVsb2NhdGlvbi4gICovCisrICBCRkRfQVJFTE9DX0JGSU5fRElWLAorKworKy8qIEFESSBCbGFja2ZpbiBhcml0aG1ldGljIHJlbG9jYXRpb24uICAqLworKyAgQkZEX0FSRUxPQ19CRklOX01PRCwKKysKKysvKiBBREkgQmxhY2tmaW4gYXJpdGhtZXRpYyByZWxvY2F0aW9uLiAgKi8KKysgIEJGRF9BUkVMT0NfQkZJTl9MU0hJRlQsCisrCisrLyogQURJIEJsYWNrZmluIGFyaXRobWV0aWMgcmVsb2NhdGlvbi4gICovCisrICBCRkRfQVJFTE9DX0JGSU5fUlNISUZULAorKworKy8qIEFESSBCbGFja2ZpbiBhcml0aG1ldGljIHJlbG9jYXRpb24uICAqLworKyAgQkZEX0FSRUxPQ19CRklOX0FORCwKKysKKysvKiBBREkgQmxhY2tmaW4gYXJpdGhtZXRpYyByZWxvY2F0aW9uLiAgKi8KKysgIEJGRF9BUkVMT0NfQkZJTl9PUiwKKysKKysvKiBBREkgQmxhY2tmaW4gYXJpdGhtZXRpYyByZWxvY2F0aW9uLiAgKi8KKysgIEJGRF9BUkVMT0NfQkZJTl9YT1IsCisrCisrLyogQURJIEJsYWNrZmluIGFyaXRobWV0aWMgcmVsb2NhdGlvbi4gICovCisrICBCRkRfQVJFTE9DX0JGSU5fTEFORCwKKysKKysvKiBBREkgQmxhY2tmaW4gYXJpdGhtZXRpYyByZWxvY2F0aW9uLiAgKi8KKysgIEJGRF9BUkVMT0NfQkZJTl9MT1IsCisrCisrLyogQURJIEJsYWNrZmluIGFyaXRobWV0aWMgcmVsb2NhdGlvbi4gICovCisrICBCRkRfQVJFTE9DX0JGSU5fTEVOLAorKworKy8qIEFESSBCbGFja2ZpbiBhcml0aG1ldGljIHJlbG9jYXRpb24uICAqLworKyAgQkZEX0FSRUxPQ19CRklOX05FRywKKysKKysvKiBBREkgQmxhY2tmaW4gYXJpdGhtZXRpYyByZWxvY2F0aW9uLiAgKi8KKysgIEJGRF9BUkVMT0NfQkZJTl9DT01QLAorKworKy8qIEFESSBCbGFja2ZpbiBhcml0aG1ldGljIHJlbG9jYXRpb24uICAqLworKyAgQkZEX0FSRUxPQ19CRklOX1BBR0UsCisrCisrLyogQURJIEJsYWNrZmluIGFyaXRobWV0aWMgcmVsb2NhdGlvbi4gICovCisrICBCRkRfQVJFTE9DX0JGSU5fSFdQQUdFLAorKworKy8qIEFESSBCbGFja2ZpbiBhcml0aG1ldGljIHJlbG9jYXRpb24uICAqLworKyAgQkZEX0FSRUxPQ19CRklOX0FERFIsCisrCisrLyogTWl0c3ViaXNoaSBEMTBWIHJlbG9jcy4KKytUaGlzIGlzIGEgMTAtYml0IHJlbG9jIHdpdGggdGhlIHJpZ2h0IDIgYml0cworK2Fzc3VtZWQgdG8gYmUgMC4gICovCisrICBCRkRfUkVMT0NfRDEwVl8xMF9QQ1JFTF9SLAorKworKy8qIE1pdHN1YmlzaGkgRDEwViByZWxvY3MuCisrVGhpcyBpcyBhIDEwLWJpdCByZWxvYyB3aXRoIHRoZSByaWdodCAyIGJpdHMKKythc3N1bWVkIHRvIGJlIDAuICBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyByZWxvYworK2V4Y2VwdCBpdCBpcyBpbiB0aGUgbGVmdCBjb250YWluZXIsIGkuZS4sCisrc2hpZnRlZCBsZWZ0IDE1IGJpdHMuICAqLworKyAgQkZEX1JFTE9DX0QxMFZfMTBfUENSRUxfTCwKKysKKysvKiBUaGlzIGlzIGFuIDE4LWJpdCByZWxvYyB3aXRoIHRoZSByaWdodCAyIGJpdHMKKythc3N1bWVkIHRvIGJlIDAuICAqLworKyAgQkZEX1JFTE9DX0QxMFZfMTgsCisrCisrLyogVGhpcyBpcyBhbiAxOC1iaXQgcmVsb2Mgd2l0aCB0aGUgcmlnaHQgMiBiaXRzCisrYXNzdW1lZCB0byBiZSAwLiAgKi8KKysgIEJGRF9SRUxPQ19EMTBWXzE4X1BDUkVMLAorKworKy8qIE1pdHN1YmlzaGkgRDMwViByZWxvY3MuCisrVGhpcyBpcyBhIDYtYml0IGFic29sdXRlIHJlbG9jLiAgKi8KKysgIEJGRF9SRUxPQ19EMzBWXzYsCisrCisrLyogVGhpcyBpcyBhIDYtYml0IHBjLXJlbGF0aXZlIHJlbG9jIHdpdGgKKyt0aGUgcmlnaHQgMyBiaXRzIGFzc3VtZWQgdG8gYmUgMC4gICovCisrICBCRkRfUkVMT0NfRDMwVl85X1BDUkVMLAorKworKy8qIFRoaXMgaXMgYSA2LWJpdCBwYy1yZWxhdGl2ZSByZWxvYyB3aXRoCisrdGhlIHJpZ2h0IDMgYml0cyBhc3N1bWVkIHRvIGJlIDAuIFNhbWUKKythcyB0aGUgcHJldmlvdXMgcmVsb2MgYnV0IG9uIHRoZSByaWdodCBzaWRlCisrb2YgdGhlIGNvbnRhaW5lci4gICovCisrICBCRkRfUkVMT0NfRDMwVl85X1BDUkVMX1IsCisrCisrLyogVGhpcyBpcyBhIDEyLWJpdCBhYnNvbHV0ZSByZWxvYyB3aXRoIHRoZQorK3JpZ2h0IDMgYml0c2Fzc3VtZWQgdG8gYmUgMC4gICovCisrICBCRkRfUkVMT0NfRDMwVl8xNSwKKysKKysvKiBUaGlzIGlzIGEgMTItYml0IHBjLXJlbGF0aXZlIHJlbG9jIHdpdGgKKyt0aGUgcmlnaHQgMyBiaXRzIGFzc3VtZWQgdG8gYmUgMC4gICovCisrICBCRkRfUkVMT0NfRDMwVl8xNV9QQ1JFTCwKKysKKysvKiBUaGlzIGlzIGEgMTItYml0IHBjLXJlbGF0aXZlIHJlbG9jIHdpdGgKKyt0aGUgcmlnaHQgMyBiaXRzIGFzc3VtZWQgdG8gYmUgMC4gU2FtZQorK2FzIHRoZSBwcmV2aW91cyByZWxvYyBidXQgb24gdGhlIHJpZ2h0IHNpZGUKKytvZiB0aGUgY29udGFpbmVyLiAgKi8KKysgIEJGRF9SRUxPQ19EMzBWXzE1X1BDUkVMX1IsCisrCisrLyogVGhpcyBpcyBhbiAxOC1iaXQgYWJzb2x1dGUgcmVsb2Mgd2l0aAorK3RoZSByaWdodCAzIGJpdHMgYXNzdW1lZCB0byBiZSAwLiAgKi8KKysgIEJGRF9SRUxPQ19EMzBWXzIxLAorKworKy8qIFRoaXMgaXMgYW4gMTgtYml0IHBjLXJlbGF0aXZlIHJlbG9jIHdpdGgKKyt0aGUgcmlnaHQgMyBiaXRzIGFzc3VtZWQgdG8gYmUgMC4gICovCisrICBCRkRfUkVMT0NfRDMwVl8yMV9QQ1JFTCwKKysKKysvKiBUaGlzIGlzIGFuIDE4LWJpdCBwYy1yZWxhdGl2ZSByZWxvYyB3aXRoCisrdGhlIHJpZ2h0IDMgYml0cyBhc3N1bWVkIHRvIGJlIDAuIFNhbWUKKythcyB0aGUgcHJldmlvdXMgcmVsb2MgYnV0IG9uIHRoZSByaWdodCBzaWRlCisrb2YgdGhlIGNvbnRhaW5lci4gICovCisrICBCRkRfUkVMT0NfRDMwVl8yMV9QQ1JFTF9SLAorKworKy8qIFRoaXMgaXMgYSAzMi1iaXQgYWJzb2x1dGUgcmVsb2MuICAqLworKyAgQkZEX1JFTE9DX0QzMFZfMzIsCisrCisrLyogVGhpcyBpcyBhIDMyLWJpdCBwYy1yZWxhdGl2ZSByZWxvYy4gICovCisrICBCRkRfUkVMT0NfRDMwVl8zMl9QQ1JFTCwKKysKKysvKiBETFggcmVsb2NzICAqLworKyAgQkZEX1JFTE9DX0RMWF9ISTE2X1MsCisrCisrLyogRExYIHJlbG9jcyAgKi8KKysgIEJGRF9SRUxPQ19ETFhfTE8xNiwKKysKKysvKiBETFggcmVsb2NzICAqLworKyAgQkZEX1JFTE9DX0RMWF9KTVAyNiwKKysKKysvKiBSZW5lc2FzIE0xNkMvTTMyQyBSZWxvY2F0aW9ucy4gICovCisrICBCRkRfUkVMT0NfTTMyQ19ISTgsCisrICBCRkRfUkVMT0NfTTMyQ19STF9KVU1QLAorKyAgQkZEX1JFTE9DX00zMkNfUkxfMUFERFIsCisrICBCRkRfUkVMT0NfTTMyQ19STF8yQUREUiwKKysKKysvKiBSZW5lc2FzIE0zMlIgKGZvcm1lcmx5IE1pdHN1YmlzaGkgTTMyUikgcmVsb2NzLgorK1RoaXMgaXMgYSAyNCBiaXQgYWJzb2x1dGUgYWRkcmVzcy4gICovCisrICBCRkRfUkVMT0NfTTMyUl8yNCwKKysKKysvKiBUaGlzIGlzIGEgMTAtYml0IHBjLXJlbGF0aXZlIHJlbG9jIHdpdGggdGhlIHJpZ2h0IDIgYml0cyBhc3N1bWVkIHRvIGJlIDAuICAqLworKyAgQkZEX1JFTE9DX00zMlJfMTBfUENSRUwsCisrCisrLyogVGhpcyBpcyBhbiAxOC1iaXQgcmVsb2Mgd2l0aCB0aGUgcmlnaHQgMiBiaXRzIGFzc3VtZWQgdG8gYmUgMC4gICovCisrICBCRkRfUkVMT0NfTTMyUl8xOF9QQ1JFTCwKKysKKysvKiBUaGlzIGlzIGEgMjYtYml0IHJlbG9jIHdpdGggdGhlIHJpZ2h0IDIgYml0cyBhc3N1bWVkIHRvIGJlIDAuICAqLworKyAgQkZEX1JFTE9DX00zMlJfMjZfUENSRUwsCisrCisrLyogVGhpcyBpcyBhIDE2LWJpdCByZWxvYyBjb250YWluaW5nIHRoZSBoaWdoIDE2IGJpdHMgb2YgYW4gYWRkcmVzcworK3VzZWQgd2hlbiB0aGUgbG93ZXIgMTYgYml0cyBhcmUgdHJlYXRlZCBhcyB1bnNpZ25lZC4gICovCisrICBCRkRfUkVMT0NfTTMyUl9ISTE2X1VMTywKKysKKysvKiBUaGlzIGlzIGEgMTYtYml0IHJlbG9jIGNvbnRhaW5pbmcgdGhlIGhpZ2ggMTYgYml0cyBvZiBhbiBhZGRyZXNzCisrdXNlZCB3aGVuIHRoZSBsb3dlciAxNiBiaXRzIGFyZSB0cmVhdGVkIGFzIHNpZ25lZC4gICovCisrICBCRkRfUkVMT0NfTTMyUl9ISTE2X1NMTywKKysKKysvKiBUaGlzIGlzIGEgMTYtYml0IHJlbG9jIGNvbnRhaW5pbmcgdGhlIGxvd2VyIDE2IGJpdHMgb2YgYW4gYWRkcmVzcy4gICovCisrICBCRkRfUkVMT0NfTTMyUl9MTzE2LAorKworKy8qIFRoaXMgaXMgYSAxNi1iaXQgcmVsb2MgY29udGFpbmluZyB0aGUgc21hbGwgZGF0YSBhcmVhIG9mZnNldCBmb3IgdXNlIGluCisrYWRkMywgbG9hZCwgYW5kIHN0b3JlIGluc3RydWN0aW9ucy4gICovCisrICBCRkRfUkVMT0NfTTMyUl9TREExNiwKKysKKysvKiBGb3IgUElDLiAgKi8KKysgIEJGRF9SRUxPQ19NMzJSX0dPVDI0LAorKyAgQkZEX1JFTE9DX00zMlJfMjZfUExUUkVMLAorKyAgQkZEX1JFTE9DX00zMlJfQ09QWSwKKysgIEJGRF9SRUxPQ19NMzJSX0dMT0JfREFULAorKyAgQkZEX1JFTE9DX00zMlJfSk1QX1NMT1QsCisrICBCRkRfUkVMT0NfTTMyUl9SRUxBVElWRSwKKysgIEJGRF9SRUxPQ19NMzJSX0dPVE9GRiwKKysgIEJGRF9SRUxPQ19NMzJSX0dPVE9GRl9ISV9VTE8sCisrICBCRkRfUkVMT0NfTTMyUl9HT1RPRkZfSElfU0xPLAorKyAgQkZEX1JFTE9DX00zMlJfR09UT0ZGX0xPLAorKyAgQkZEX1JFTE9DX00zMlJfR09UUEMyNCwKKysgIEJGRF9SRUxPQ19NMzJSX0dPVDE2X0hJX1VMTywKKysgIEJGRF9SRUxPQ19NMzJSX0dPVDE2X0hJX1NMTywKKysgIEJGRF9SRUxPQ19NMzJSX0dPVDE2X0xPLAorKyAgQkZEX1JFTE9DX00zMlJfR09UUENfSElfVUxPLAorKyAgQkZEX1JFTE9DX00zMlJfR09UUENfSElfU0xPLAorKyAgQkZEX1JFTE9DX00zMlJfR09UUENfTE8sCisrCisrLyogVGhpcyBpcyBhIDktYml0IHJlbG9jICAqLworKyAgQkZEX1JFTE9DX1Y4NTBfOV9QQ1JFTCwKKysKKysvKiBUaGlzIGlzIGEgMjItYml0IHJlbG9jICAqLworKyAgQkZEX1JFTE9DX1Y4NTBfMjJfUENSRUwsCisrCisrLyogVGhpcyBpcyBhIDE2IGJpdCBvZmZzZXQgZnJvbSB0aGUgc2hvcnQgZGF0YSBhcmVhIHBvaW50ZXIuICAqLworKyAgQkZEX1JFTE9DX1Y4NTBfU0RBXzE2XzE2X09GRlNFVCwKKysKKysvKiBUaGlzIGlzIGEgMTYgYml0IG9mZnNldCAob2Ygd2hpY2ggb25seSAxNSBiaXRzIGFyZSB1c2VkKSBmcm9tIHRoZQorK3Nob3J0IGRhdGEgYXJlYSBwb2ludGVyLiAgKi8KKysgIEJGRF9SRUxPQ19WODUwX1NEQV8xNV8xNl9PRkZTRVQsCisrCisrLyogVGhpcyBpcyBhIDE2IGJpdCBvZmZzZXQgZnJvbSB0aGUgemVybyBkYXRhIGFyZWEgcG9pbnRlci4gICovCisrICBCRkRfUkVMT0NfVjg1MF9aREFfMTZfMTZfT0ZGU0VULAorKworKy8qIFRoaXMgaXMgYSAxNiBiaXQgb2Zmc2V0IChvZiB3aGljaCBvbmx5IDE1IGJpdHMgYXJlIHVzZWQpIGZyb20gdGhlCisremVybyBkYXRhIGFyZWEgcG9pbnRlci4gICovCisrICBCRkRfUkVMT0NfVjg1MF9aREFfMTVfMTZfT0ZGU0VULAorKworKy8qIFRoaXMgaXMgYW4gOCBiaXQgb2Zmc2V0IChvZiB3aGljaCBvbmx5IDYgYml0cyBhcmUgdXNlZCkgZnJvbSB0aGUKKyt0aW55IGRhdGEgYXJlYSBwb2ludGVyLiAgKi8KKysgIEJGRF9SRUxPQ19WODUwX1REQV82XzhfT0ZGU0VULAorKworKy8qIFRoaXMgaXMgYW4gOGJpdCBvZmZzZXQgKG9mIHdoaWNoIG9ubHkgNyBiaXRzIGFyZSB1c2VkKSBmcm9tIHRoZSB0aW55CisrZGF0YSBhcmVhIHBvaW50ZXIuICAqLworKyAgQkZEX1JFTE9DX1Y4NTBfVERBXzdfOF9PRkZTRVQsCisrCisrLyogVGhpcyBpcyBhIDcgYml0IG9mZnNldCBmcm9tIHRoZSB0aW55IGRhdGEgYXJlYSBwb2ludGVyLiAgKi8KKysgIEJGRF9SRUxPQ19WODUwX1REQV83XzdfT0ZGU0VULAorKworKy8qIFRoaXMgaXMgYSAxNiBiaXQgb2Zmc2V0IGZyb20gdGhlIHRpbnkgZGF0YSBhcmVhIHBvaW50ZXIuICAqLworKyAgQkZEX1JFTE9DX1Y4NTBfVERBXzE2XzE2X09GRlNFVCwKKysKKysvKiBUaGlzIGlzIGEgNSBiaXQgb2Zmc2V0IChvZiB3aGljaCBvbmx5IDQgYml0cyBhcmUgdXNlZCkgZnJvbSB0aGUgdGlueQorK2RhdGEgYXJlYSBwb2ludGVyLiAgKi8KKysgIEJGRF9SRUxPQ19WODUwX1REQV80XzVfT0ZGU0VULAorKworKy8qIFRoaXMgaXMgYSA0IGJpdCBvZmZzZXQgZnJvbSB0aGUgdGlueSBkYXRhIGFyZWEgcG9pbnRlci4gICovCisrICBCRkRfUkVMT0NfVjg1MF9UREFfNF80X09GRlNFVCwKKysKKysvKiBUaGlzIGlzIGEgMTYgYml0IG9mZnNldCBmcm9tIHRoZSBzaG9ydCBkYXRhIGFyZWEgcG9pbnRlciwgd2l0aCB0aGUKKytiaXRzIHBsYWNlZCBub24tY29udGlndW91c2x5IGluIHRoZSBpbnN0cnVjdGlvbi4gICovCisrICBCRkRfUkVMT0NfVjg1MF9TREFfMTZfMTZfU1BMSVRfT0ZGU0VULAorKworKy8qIFRoaXMgaXMgYSAxNiBiaXQgb2Zmc2V0IGZyb20gdGhlIHplcm8gZGF0YSBhcmVhIHBvaW50ZXIsIHdpdGggdGhlCisrYml0cyBwbGFjZWQgbm9uLWNvbnRpZ3VvdXNseSBpbiB0aGUgaW5zdHJ1Y3Rpb24uICAqLworKyAgQkZEX1JFTE9DX1Y4NTBfWkRBXzE2XzE2X1NQTElUX09GRlNFVCwKKysKKysvKiBUaGlzIGlzIGEgNiBiaXQgb2Zmc2V0IGZyb20gdGhlIGNhbGwgdGFibGUgYmFzZSBwb2ludGVyLiAgKi8KKysgIEJGRF9SRUxPQ19WODUwX0NBTExUXzZfN19PRkZTRVQsCisrCisrLyogVGhpcyBpcyBhIDE2IGJpdCBvZmZzZXQgZnJvbSB0aGUgY2FsbCB0YWJsZSBiYXNlIHBvaW50ZXIuICAqLworKyAgQkZEX1JFTE9DX1Y4NTBfQ0FMTFRfMTZfMTZfT0ZGU0VULAorKworKy8qIFVzZWQgZm9yIHJlbGF4aW5nIGluZGlyZWN0IGZ1bmN0aW9uIGNhbGxzLiAgKi8KKysgIEJGRF9SRUxPQ19WODUwX0xPTkdDQUxMLAorKworKy8qIFVzZWQgZm9yIHJlbGF4aW5nIGluZGlyZWN0IGp1bXBzLiAgKi8KKysgIEJGRF9SRUxPQ19WODUwX0xPTkdKVU1QLAorKworKy8qIFVzZWQgdG8gbWFpbnRhaW4gYWxpZ25tZW50IHdoaWxzdCByZWxheGluZy4gICovCisrICBCRkRfUkVMT0NfVjg1MF9BTElHTiwKKysKKysvKiBUaGlzIGlzIGEgdmFyaWF0aW9uIG9mIEJGRF9SRUxPQ19MTzE2IHRoYXQgY2FuIGJlIHVzZWQgaW4gdjg1MGUgbGQuYnUKKytpbnN0cnVjdGlvbnMuICAqLworKyAgQkZEX1JFTE9DX1Y4NTBfTE8xNl9TUExJVF9PRkZTRVQsCisrCisrLyogVGhpcyBpcyBhIDMyYml0IHBjcmVsIHJlbG9jIGZvciB0aGUgbW4xMDMwMCwgb2Zmc2V0IGJ5IHR3byBieXRlcyBpbiB0aGUKKytpbnN0cnVjdGlvbi4gICovCisrICBCRkRfUkVMT0NfTU4xMDMwMF8zMl9QQ1JFTCwKKysKKysvKiBUaGlzIGlzIGEgMTZiaXQgcGNyZWwgcmVsb2MgZm9yIHRoZSBtbjEwMzAwLCBvZmZzZXQgYnkgdHdvIGJ5dGVzIGluIHRoZQorK2luc3RydWN0aW9uLiAgKi8KKysgIEJGRF9SRUxPQ19NTjEwMzAwXzE2X1BDUkVMLAorKworKy8qIFRoaXMgaXMgYSA4Yml0IERQIHJlbG9jIGZvciB0aGUgdG1zMzIwYzMwLCB3aGVyZSB0aGUgbW9zdAorK3NpZ25pZmljYW50IDggYml0cyBvZiBhIDI0IGJpdCB3b3JkIGFyZSBwbGFjZWQgaW50byB0aGUgbGVhc3QKKytzaWduaWZpY2FudCA4IGJpdHMgb2YgdGhlIG9wY29kZS4gICovCisrICBCRkRfUkVMT0NfVElDMzBfTERQLAorKworKy8qIFRoaXMgaXMgYSA3Yml0IHJlbG9jIGZvciB0aGUgdG1zMzIwYzU0eCwgd2hlcmUgdGhlIGxlYXN0Cisrc2lnbmlmaWNhbnQgNyBiaXRzIG9mIGEgMTYgYml0IHdvcmQgYXJlIHBsYWNlZCBpbnRvIHRoZSBsZWFzdAorK3NpZ25pZmljYW50IDcgYml0cyBvZiB0aGUgb3Bjb2RlLiAgKi8KKysgIEJGRF9SRUxPQ19USUM1NFhfUEFSVExTNywKKysKKysvKiBUaGlzIGlzIGEgOWJpdCBEUCByZWxvYyBmb3IgdGhlIHRtczMyMGM1NHgsIHdoZXJlIHRoZSBtb3N0Cisrc2lnbmlmaWNhbnQgOSBiaXRzIG9mIGEgMTYgYml0IHdvcmQgYXJlIHBsYWNlZCBpbnRvIHRoZSBsZWFzdAorK3NpZ25pZmljYW50IDkgYml0cyBvZiB0aGUgb3Bjb2RlLiAgKi8KKysgIEJGRF9SRUxPQ19USUM1NFhfUEFSVE1TOSwKKysKKysvKiBUaGlzIGlzIGFuIGV4dGVuZGVkIGFkZHJlc3MgMjMtYml0IHJlbG9jIGZvciB0aGUgdG1zMzIwYzU0eC4gICovCisrICBCRkRfUkVMT0NfVElDNTRYXzIzLAorKworKy8qIFRoaXMgaXMgYSAxNi1iaXQgcmVsb2MgZm9yIHRoZSB0bXMzMjBjNTR4LCB3aGVyZSB0aGUgbGVhc3QKKytzaWduaWZpY2FudCAxNiBiaXRzIG9mIGEgMjMtYml0IGV4dGVuZGVkIGFkZHJlc3MgYXJlIHBsYWNlZCBpbnRvCisrdGhlIG9wY29kZS4gICovCisrICBCRkRfUkVMT0NfVElDNTRYXzE2X09GXzIzLAorKworKy8qIFRoaXMgaXMgYSByZWxvYyBmb3IgdGhlIHRtczMyMGM1NHgsIHdoZXJlIHRoZSBtb3N0Cisrc2lnbmlmaWNhbnQgNyBiaXRzIG9mIGEgMjMtYml0IGV4dGVuZGVkIGFkZHJlc3MgYXJlIHBsYWNlZCBpbnRvCisrdGhlIG9wY29kZS4gICovCisrICBCRkRfUkVMT0NfVElDNTRYX01TN19PRl8yMywKKysKKysvKiBUaGlzIGlzIGEgNDggYml0IHJlbG9jIGZvciB0aGUgRlIzMCB0aGF0IHN0b3JlcyAzMiBiaXRzLiAgKi8KKysgIEJGRF9SRUxPQ19GUjMwXzQ4LAorKworKy8qIFRoaXMgaXMgYSAzMiBiaXQgcmVsb2MgZm9yIHRoZSBGUjMwIHRoYXQgc3RvcmVzIDIwIGJpdHMgc3BsaXQgdXAgaW50bworK3R3byBzZWN0aW9ucy4gICovCisrICBCRkRfUkVMT0NfRlIzMF8yMCwKKysKKysvKiBUaGlzIGlzIGEgMTYgYml0IHJlbG9jIGZvciB0aGUgRlIzMCB0aGF0IHN0b3JlcyBhIDYgYml0IHdvcmQgb2Zmc2V0IGluCisrNCBiaXRzLiAgKi8KKysgIEJGRF9SRUxPQ19GUjMwXzZfSU5fNCwKKysKKysvKiBUaGlzIGlzIGEgMTYgYml0IHJlbG9jIGZvciB0aGUgRlIzMCB0aGF0IHN0b3JlcyBhbiA4IGJpdCBieXRlIG9mZnNldAorK2ludG8gOCBiaXRzLiAgKi8KKysgIEJGRF9SRUxPQ19GUjMwXzhfSU5fOCwKKysKKysvKiBUaGlzIGlzIGEgMTYgYml0IHJlbG9jIGZvciB0aGUgRlIzMCB0aGF0IHN0b3JlcyBhIDkgYml0IHNob3J0IG9mZnNldAorK2ludG8gOCBiaXRzLiAgKi8KKysgIEJGRF9SRUxPQ19GUjMwXzlfSU5fOCwKKysKKysvKiBUaGlzIGlzIGEgMTYgYml0IHJlbG9jIGZvciB0aGUgRlIzMCB0aGF0IHN0b3JlcyBhIDEwIGJpdCB3b3JkIG9mZnNldAorK2ludG8gOCBiaXRzLiAgKi8KKysgIEJGRF9SRUxPQ19GUjMwXzEwX0lOXzgsCisrCisrLyogVGhpcyBpcyBhIDE2IGJpdCByZWxvYyBmb3IgdGhlIEZSMzAgdGhhdCBzdG9yZXMgYSA5IGJpdCBwYyByZWxhdGl2ZQorK3Nob3J0IG9mZnNldCBpbnRvIDggYml0cy4gICovCisrICBCRkRfUkVMT0NfRlIzMF85X1BDUkVMLAorKworKy8qIFRoaXMgaXMgYSAxNiBiaXQgcmVsb2MgZm9yIHRoZSBGUjMwIHRoYXQgc3RvcmVzIGEgMTIgYml0IHBjIHJlbGF0aXZlCisrc2hvcnQgb2Zmc2V0IGludG8gMTEgYml0cy4gICovCisrICBCRkRfUkVMT0NfRlIzMF8xMl9QQ1JFTCwKKysKKysvKiBNb3Rvcm9sYSBNY29yZSByZWxvY2F0aW9ucy4gICovCisrICBCRkRfUkVMT0NfTUNPUkVfUENSRUxfSU1NOEJZNCwKKysgIEJGRF9SRUxPQ19NQ09SRV9QQ1JFTF9JTU0xMUJZMiwKKysgIEJGRF9SRUxPQ19NQ09SRV9QQ1JFTF9JTU00QlkyLAorKyAgQkZEX1JFTE9DX01DT1JFX1BDUkVMXzMyLAorKyAgQkZEX1JFTE9DX01DT1JFX1BDUkVMX0pTUl9JTU0xMUJZMiwKKysgIEJGRF9SRUxPQ19NQ09SRV9SVkEsCisrCisrLyogVG9zaGliYSBNZWRpYSBQcm9jZXNzb3IgUmVsb2NhdGlvbnMuICAqLworKyAgQkZEX1JFTE9DX01FUF84LAorKyAgQkZEX1JFTE9DX01FUF8xNiwKKysgIEJGRF9SRUxPQ19NRVBfMzIsCisrICBCRkRfUkVMT0NfTUVQX1BDUkVMOEEyLAorKyAgQkZEX1JFTE9DX01FUF9QQ1JFTDEyQTIsCisrICBCRkRfUkVMT0NfTUVQX1BDUkVMMTdBMiwKKysgIEJGRF9SRUxPQ19NRVBfUENSRUwyNEEyLAorKyAgQkZEX1JFTE9DX01FUF9QQ0FCUzI0QTIsCisrICBCRkRfUkVMT0NfTUVQX0xPVzE2LAorKyAgQkZEX1JFTE9DX01FUF9ISTE2VSwKKysgIEJGRF9SRUxPQ19NRVBfSEkxNlMsCisrICBCRkRfUkVMT0NfTUVQX0dQUkVMLAorKyAgQkZEX1JFTE9DX01FUF9UUFJFTCwKKysgIEJGRF9SRUxPQ19NRVBfVFBSRUw3LAorKyAgQkZEX1JFTE9DX01FUF9UUFJFTDdBMiwKKysgIEJGRF9SRUxPQ19NRVBfVFBSRUw3QTQsCisrICBCRkRfUkVMT0NfTUVQX1VJTU0yNCwKKysgIEJGRF9SRUxPQ19NRVBfQUREUjI0QTQsCisrICBCRkRfUkVMT0NfTUVQX0dOVV9WVElOSEVSSVQsCisrICBCRkRfUkVMT0NfTUVQX0dOVV9WVEVOVFJZLAorKworKworKy8qIFRoZXNlIGFyZSByZWxvY2F0aW9ucyBmb3IgdGhlIEdFVEEgaW5zdHJ1Y3Rpb24uICAqLworKyAgQkZEX1JFTE9DX01NSVhfR0VUQSwKKysgIEJGRF9SRUxPQ19NTUlYX0dFVEFfMSwKKysgIEJGRF9SRUxPQ19NTUlYX0dFVEFfMiwKKysgIEJGRF9SRUxPQ19NTUlYX0dFVEFfMywKKysKKysvKiBUaGVzZSBhcmUgcmVsb2NhdGlvbnMgZm9yIGEgY29uZGl0aW9uYWwgYnJhbmNoIGluc3RydWN0aW9uLiAgKi8KKysgIEJGRF9SRUxPQ19NTUlYX0NCUkFOQ0gsCisrICBCRkRfUkVMT0NfTU1JWF9DQlJBTkNIX0osCisrICBCRkRfUkVMT0NfTU1JWF9DQlJBTkNIXzEsCisrICBCRkRfUkVMT0NfTU1JWF9DQlJBTkNIXzIsCisrICBCRkRfUkVMT0NfTU1JWF9DQlJBTkNIXzMsCisrCisrLyogVGhlc2UgYXJlIHJlbG9jYXRpb25zIGZvciB0aGUgUFVTSEogaW5zdHJ1Y3Rpb24uICAqLworKyAgQkZEX1JFTE9DX01NSVhfUFVTSEosCisrICBCRkRfUkVMT0NfTU1JWF9QVVNISl8xLAorKyAgQkZEX1JFTE9DX01NSVhfUFVTSEpfMiwKKysgIEJGRF9SRUxPQ19NTUlYX1BVU0hKXzMsCisrICBCRkRfUkVMT0NfTU1JWF9QVVNISl9TVFVCQkFCTEUsCisrCisrLyogVGhlc2UgYXJlIHJlbG9jYXRpb25zIGZvciB0aGUgSk1QIGluc3RydWN0aW9uLiAgKi8KKysgIEJGRF9SRUxPQ19NTUlYX0pNUCwKKysgIEJGRF9SRUxPQ19NTUlYX0pNUF8xLAorKyAgQkZEX1JFTE9DX01NSVhfSk1QXzIsCisrICBCRkRfUkVMT0NfTU1JWF9KTVBfMywKKysKKysvKiBUaGlzIGlzIGEgcmVsb2NhdGlvbiBmb3IgYSByZWxhdGl2ZSBhZGRyZXNzIGFzIGluIGEgR0VUQSBpbnN0cnVjdGlvbiBvcgorK2EgYnJhbmNoLiAgKi8KKysgIEJGRF9SRUxPQ19NTUlYX0FERFIxOSwKKysKKysvKiBUaGlzIGlzIGEgcmVsb2NhdGlvbiBmb3IgYSByZWxhdGl2ZSBhZGRyZXNzIGFzIGluIGEgSk1QIGluc3RydWN0aW9uLiAgKi8KKysgIEJGRF9SRUxPQ19NTUlYX0FERFIyNywKKysKKysvKiBUaGlzIGlzIGEgcmVsb2NhdGlvbiBmb3IgYW4gaW5zdHJ1Y3Rpb24gZmllbGQgdGhhdCBtYXkgYmUgYSBnZW5lcmFsCisrcmVnaXN0ZXIgb3IgYSB2YWx1ZSAwLi4yNTUuICAqLworKyAgQkZEX1JFTE9DX01NSVhfUkVHX09SX0JZVEUsCisrCisrLyogVGhpcyBpcyBhIHJlbG9jYXRpb24gZm9yIGFuIGluc3RydWN0aW9uIGZpZWxkIHRoYXQgbWF5IGJlIGEgZ2VuZXJhbAorK3JlZ2lzdGVyLiAgKi8KKysgIEJGRF9SRUxPQ19NTUlYX1JFRywKKysKKysvKiBUaGlzIGlzIGEgcmVsb2NhdGlvbiBmb3IgdHdvIGluc3RydWN0aW9uIGZpZWxkcyBob2xkaW5nIGEgcmVnaXN0ZXIgYW5kCisrYW4gb2Zmc2V0LCB0aGUgZXF1aXZhbGVudCBvZiB0aGUgcmVsb2NhdGlvbi4gICovCisrICBCRkRfUkVMT0NfTU1JWF9CQVNFX1BMVVNfT0ZGU0VULAorKworKy8qIFRoaXMgcmVsb2NhdGlvbiBpcyBhbiBhc3NlcnRpb24gdGhhdCB0aGUgZXhwcmVzc2lvbiBpcyBub3QgYWxsb2NhdGVkIGFzCisrYSBnbG9iYWwgcmVnaXN0ZXIuICBJdCBkb2VzIG5vdCBtb2RpZnkgY29udGVudHMuICAqLworKyAgQkZEX1JFTE9DX01NSVhfTE9DQUwsCisrCisrLyogVGhpcyBpcyBhIDE2IGJpdCByZWxvYyBmb3IgdGhlIEFWUiB0aGF0IHN0b3JlcyA4IGJpdCBwYyByZWxhdGl2ZQorK3Nob3J0IG9mZnNldCBpbnRvIDcgYml0cy4gICovCisrICBCRkRfUkVMT0NfQVZSXzdfUENSRUwsCisrCisrLyogVGhpcyBpcyBhIDE2IGJpdCByZWxvYyBmb3IgdGhlIEFWUiB0aGF0IHN0b3JlcyAxMyBiaXQgcGMgcmVsYXRpdmUKKytzaG9ydCBvZmZzZXQgaW50byAxMiBiaXRzLiAgKi8KKysgIEJGRF9SRUxPQ19BVlJfMTNfUENSRUwsCisrCisrLyogVGhpcyBpcyBhIDE2IGJpdCByZWxvYyBmb3IgdGhlIEFWUiB0aGF0IHN0b3JlcyAxNyBiaXQgdmFsdWUgKHVzdWFsbHkKKytwcm9ncmFtIG1lbW9yeSBhZGRyZXNzKSBpbnRvIDE2IGJpdHMuICAqLworKyAgQkZEX1JFTE9DX0FWUl8xNl9QTSwKKysKKysvKiBUaGlzIGlzIGEgMTYgYml0IHJlbG9jIGZvciB0aGUgQVZSIHRoYXQgc3RvcmVzIDggYml0IHZhbHVlICh1c3VhbGx5CisrZGF0YSBtZW1vcnkgYWRkcmVzcykgaW50byA4IGJpdCBpbW1lZGlhdGUgdmFsdWUgb2YgTERJIGluc24uICAqLworKyAgQkZEX1JFTE9DX0FWUl9MTzhfTERJLAorKworKy8qIFRoaXMgaXMgYSAxNiBiaXQgcmVsb2MgZm9yIHRoZSBBVlIgdGhhdCBzdG9yZXMgOCBiaXQgdmFsdWUgKGhpZ2ggOCBiaXQKKytvZiBkYXRhIG1lbW9yeSBhZGRyZXNzKSBpbnRvIDggYml0IGltbWVkaWF0ZSB2YWx1ZSBvZiBMREkgaW5zbi4gICovCisrICBCRkRfUkVMT0NfQVZSX0hJOF9MREksCisrCisrLyogVGhpcyBpcyBhIDE2IGJpdCByZWxvYyBmb3IgdGhlIEFWUiB0aGF0IHN0b3JlcyA4IGJpdCB2YWx1ZSAobW9zdCBoaWdoIDggYml0Cisrb2YgcHJvZ3JhbSBtZW1vcnkgYWRkcmVzcykgaW50byA4IGJpdCBpbW1lZGlhdGUgdmFsdWUgb2YgTERJIGluc24uICAqLworKyAgQkZEX1JFTE9DX0FWUl9ISDhfTERJLAorKworKy8qIFRoaXMgaXMgYSAxNiBiaXQgcmVsb2MgZm9yIHRoZSBBVlIgdGhhdCBzdG9yZXMgOCBiaXQgdmFsdWUgKG1vc3QgaGlnaCA4IGJpdAorK29mIDMyIGJpdCB2YWx1ZSkgaW50byA4IGJpdCBpbW1lZGlhdGUgdmFsdWUgb2YgTERJIGluc24uICAqLworKyAgQkZEX1JFTE9DX0FWUl9NUzhfTERJLAorKworKy8qIFRoaXMgaXMgYSAxNiBiaXQgcmVsb2MgZm9yIHRoZSBBVlIgdGhhdCBzdG9yZXMgbmVnYXRlZCA4IGJpdCB2YWx1ZQorKyh1c3VhbGx5IGRhdGEgbWVtb3J5IGFkZHJlc3MpIGludG8gOCBiaXQgaW1tZWRpYXRlIHZhbHVlIG9mIFNVQkkgaW5zbi4gICovCisrICBCRkRfUkVMT0NfQVZSX0xPOF9MRElfTkVHLAorKworKy8qIFRoaXMgaXMgYSAxNiBiaXQgcmVsb2MgZm9yIHRoZSBBVlIgdGhhdCBzdG9yZXMgbmVnYXRlZCA4IGJpdCB2YWx1ZQorKyhoaWdoIDggYml0IG9mIGRhdGEgbWVtb3J5IGFkZHJlc3MpIGludG8gOCBiaXQgaW1tZWRpYXRlIHZhbHVlIG9mCisrU1VCSSBpbnNuLiAgKi8KKysgIEJGRF9SRUxPQ19BVlJfSEk4X0xESV9ORUcsCisrCisrLyogVGhpcyBpcyBhIDE2IGJpdCByZWxvYyBmb3IgdGhlIEFWUiB0aGF0IHN0b3JlcyBuZWdhdGVkIDggYml0IHZhbHVlCisrKG1vc3QgaGlnaCA4IGJpdCBvZiBwcm9ncmFtIG1lbW9yeSBhZGRyZXNzKSBpbnRvIDggYml0IGltbWVkaWF0ZSB2YWx1ZQorK29mIExESSBvciBTVUJJIGluc24uICAqLworKyAgQkZEX1JFTE9DX0FWUl9ISDhfTERJX05FRywKKysKKysvKiBUaGlzIGlzIGEgMTYgYml0IHJlbG9jIGZvciB0aGUgQVZSIHRoYXQgc3RvcmVzIG5lZ2F0ZWQgOCBiaXQgdmFsdWUgKG1zYgorK29mIDMyIGJpdCB2YWx1ZSkgaW50byA4IGJpdCBpbW1lZGlhdGUgdmFsdWUgb2YgTERJIGluc24uICAqLworKyAgQkZEX1JFTE9DX0FWUl9NUzhfTERJX05FRywKKysKKysvKiBUaGlzIGlzIGEgMTYgYml0IHJlbG9jIGZvciB0aGUgQVZSIHRoYXQgc3RvcmVzIDggYml0IHZhbHVlICh1c3VhbGx5CisrY29tbWFuZCBhZGRyZXNzKSBpbnRvIDggYml0IGltbWVkaWF0ZSB2YWx1ZSBvZiBMREkgaW5zbi4gICovCisrICBCRkRfUkVMT0NfQVZSX0xPOF9MRElfUE0sCisrCisrLyogVGhpcyBpcyBhIDE2IGJpdCByZWxvYyBmb3IgdGhlIEFWUiB0aGF0IHN0b3JlcyA4IGJpdCB2YWx1ZSAKKysoY29tbWFuZCBhZGRyZXNzKSBpbnRvIDggYml0IGltbWVkaWF0ZSB2YWx1ZSBvZiBMREkgaW5zbi4gSWYgdGhlIGFkZHJlc3MKKytpcyBiZXlvbmQgdGhlIDEyOGsgYm91bmRhcnksIHRoZSBsaW5rZXIgaW5zZXJ0cyBhIGp1bXAgc3R1YiBmb3IgdGhpcyByZWxvYworK2luIHRoZSBsb3dlciAxMjhrLiAgKi8KKysgIEJGRF9SRUxPQ19BVlJfTE84X0xESV9HUywKKysKKysvKiBUaGlzIGlzIGEgMTYgYml0IHJlbG9jIGZvciB0aGUgQVZSIHRoYXQgc3RvcmVzIDggYml0IHZhbHVlIChoaWdoIDggYml0Cisrb2YgY29tbWFuZCBhZGRyZXNzKSBpbnRvIDggYml0IGltbWVkaWF0ZSB2YWx1ZSBvZiBMREkgaW5zbi4gICovCisrICBCRkRfUkVMT0NfQVZSX0hJOF9MRElfUE0sCisrCisrLyogVGhpcyBpcyBhIDE2IGJpdCByZWxvYyBmb3IgdGhlIEFWUiB0aGF0IHN0b3JlcyA4IGJpdCB2YWx1ZSAoaGlnaCA4IGJpdAorK29mIGNvbW1hbmQgYWRkcmVzcykgaW50byA4IGJpdCBpbW1lZGlhdGUgdmFsdWUgb2YgTERJIGluc24uICBJZiB0aGUgYWRkcmVzcworK2lzIGJleW9uZCB0aGUgMTI4ayBib3VuZGFyeSwgdGhlIGxpbmtlciBpbnNlcnRzIGEganVtcCBzdHViIGZvciB0aGlzIHJlbG9jCisrYmVsb3cgMTI4ay4gICovCisrICBCRkRfUkVMT0NfQVZSX0hJOF9MRElfR1MsCisrCisrLyogVGhpcyBpcyBhIDE2IGJpdCByZWxvYyBmb3IgdGhlIEFWUiB0aGF0IHN0b3JlcyA4IGJpdCB2YWx1ZSAobW9zdCBoaWdoIDggYml0Cisrb2YgY29tbWFuZCBhZGRyZXNzKSBpbnRvIDggYml0IGltbWVkaWF0ZSB2YWx1ZSBvZiBMREkgaW5zbi4gICovCisrICBCRkRfUkVMT0NfQVZSX0hIOF9MRElfUE0sCisrCisrLyogVGhpcyBpcyBhIDE2IGJpdCByZWxvYyBmb3IgdGhlIEFWUiB0aGF0IHN0b3JlcyBuZWdhdGVkIDggYml0IHZhbHVlCisrKHVzdWFsbHkgY29tbWFuZCBhZGRyZXNzKSBpbnRvIDggYml0IGltbWVkaWF0ZSB2YWx1ZSBvZiBTVUJJIGluc24uICAqLworKyAgQkZEX1JFTE9DX0FWUl9MTzhfTERJX1BNX05FRywKKysKKysvKiBUaGlzIGlzIGEgMTYgYml0IHJlbG9jIGZvciB0aGUgQVZSIHRoYXQgc3RvcmVzIG5lZ2F0ZWQgOCBiaXQgdmFsdWUKKysoaGlnaCA4IGJpdCBvZiAxNiBiaXQgY29tbWFuZCBhZGRyZXNzKSBpbnRvIDggYml0IGltbWVkaWF0ZSB2YWx1ZQorK29mIFNVQkkgaW5zbi4gICovCisrICBCRkRfUkVMT0NfQVZSX0hJOF9MRElfUE1fTkVHLAorKworKy8qIFRoaXMgaXMgYSAxNiBiaXQgcmVsb2MgZm9yIHRoZSBBVlIgdGhhdCBzdG9yZXMgbmVnYXRlZCA4IGJpdCB2YWx1ZQorKyhoaWdoIDYgYml0IG9mIDIyIGJpdCBjb21tYW5kIGFkZHJlc3MpIGludG8gOCBiaXQgaW1tZWRpYXRlCisrdmFsdWUgb2YgU1VCSSBpbnNuLiAgKi8KKysgIEJGRF9SRUxPQ19BVlJfSEg4X0xESV9QTV9ORUcsCisrCisrLyogVGhpcyBpcyBhIDMyIGJpdCByZWxvYyBmb3IgdGhlIEFWUiB0aGF0IHN0b3JlcyAyMyBiaXQgdmFsdWUKKytpbnRvIDIyIGJpdHMuICAqLworKyAgQkZEX1JFTE9DX0FWUl9DQUxMLAorKworKy8qIFRoaXMgaXMgYSAxNiBiaXQgcmVsb2MgZm9yIHRoZSBBVlIgdGhhdCBzdG9yZXMgYWxsIG5lZWRlZCBiaXRzCisrZm9yIGFic29sdXRlIGFkZHJlc3Npbmcgd2l0aCBsZGkgd2l0aCBvdmVyZmxvdyBjaGVjayB0byBsaW5rdGltZSAgKi8KKysgIEJGRF9SRUxPQ19BVlJfTERJLAorKworKy8qIFRoaXMgaXMgYSA2IGJpdCByZWxvYyBmb3IgdGhlIEFWUiB0aGF0IHN0b3JlcyBvZmZzZXQgZm9yIGxkZC9zdGQKKytpbnN0cnVjdGlvbnMgICovCisrICBCRkRfUkVMT0NfQVZSXzYsCisrCisrLyogVGhpcyBpcyBhIDYgYml0IHJlbG9jIGZvciB0aGUgQVZSIHRoYXQgc3RvcmVzIG9mZnNldCBmb3IgYWRpdy9zYml3CisraW5zdHJ1Y3Rpb25zICAqLworKyAgQkZEX1JFTE9DX0FWUl82X0FESVcsCisrCisrLyogRGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBsYWJlbHM6IEwyIC0gTDEuIFRoZSB2YWx1ZSBvZiBMMSBpcyBlbmNvZGVkCisrYXMgc3ltICsgYWRkZW5kLCB3aGlsZSB0aGUgaW5pdGlhbCBkaWZmZXJlbmNlIGFmdGVyIGFzc2VtYmx5IGlzCisraW5zZXJ0ZWQgaW50byB0aGUgb2JqZWN0IGZpbGUgYnkgdGhlIGFzc2VtYmxlci4gICovCisrICBCRkRfUkVMT0NfQVZSMzJfRElGRjMyLAorKyAgQkZEX1JFTE9DX0FWUjMyX0RJRkYxNiwKKysgIEJGRF9SRUxPQ19BVlIzMl9ESUZGOCwKKysKKysvKiBSZWZlcmVuY2UgdG8gYSBzeW1ib2wgdGhyb3VnaCB0aGUgR2xvYmFsIE9mZnNldCBUYWJsZS4gVGhlIGxpbmtlcgorK3dpbGwgYWxsb2NhdGUgYW4gZW50cnkgZm9yIHN5bWJvbCBpbiB0aGUgR09UIGFuZCBpbnNlcnQgdGhlIG9mZnNldAorK29mIHRoaXMgZW50cnkgYXMgdGhlIHJlbG9jYXRpb24gdmFsdWUuICAqLworKyAgQkZEX1JFTE9DX0FWUjMyX0dPVDMyLAorKyAgQkZEX1JFTE9DX0FWUjMyX0dPVDE2LAorKyAgQkZEX1JFTE9DX0FWUjMyX0dPVDgsCisrCisrLyogTm9ybWFsIChub24tcGMtcmVsYXRpdmUpIGNvZGUgcmVsb2NhdGlvbnMuIEFsaWdubWVudCBhbmQgc2lnbmVkbmVzcworK2lzIGluZGljYXRlZCBieSB0aGUgc3VmZml4ZXMuIFMgbWVhbnMgc2lnbmVkLCBVIG1lYW5zIHVuc2lnbmVkLiBXCisrbWVhbnMgd29yZC1hbGlnbmVkLCBIIG1lYW5zIGhhbGZ3b3JkLWFsaWduZWQsIG5laXRoZXIgbWVhbnMKKytieXRlLWFsaWduZWQgKG5vIGFsaWdubWVudC4pIFNVQjUgaXMgdGhlIHNhbWUgcmVsb2NhdGlvbiBhcyAxNlMuICAqLworKyAgQkZEX1JFTE9DX0FWUjMyXzIxUywKKysgIEJGRF9SRUxPQ19BVlIzMl8xNlUsCisrICBCRkRfUkVMT0NfQVZSMzJfMTZTLAorKyAgQkZEX1JFTE9DX0FWUjMyX1NVQjUsCisrICBCRkRfUkVMT0NfQVZSMzJfOFNfRVhULAorKyAgQkZEX1JFTE9DX0FWUjMyXzhTLAorKyAgQkZEX1JFTE9DX0FWUjMyXzE1UywKKysKKysvKiBQQy1yZWxhdGl2ZSByZWxvY2F0aW9ucyBhcmUgc2lnbmVkIGlmIG5laXRoZXIgJ1UnIG5vciAnUycgaXMKKytzcGVjaWZpZWQuIEhvd2V2ZXIsIHdlIGV4cGxpY2l0bHkgdGFjayBvbiBhICdCJyB0byBpbmRpY2F0ZSBubworK2FsaWdubWVudCwgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggZGF0YSByZWxvY3MuIEFsbCBvZiB0aGVzZSByZXNvbHZlCisrdG8gc3ltICsgYWRkZW5kIC0gb2Zmc2V0LCBleGNlcHQgdGhlIG9uZSB3aXRoICdOJyAobmVnYXRlZCkgc3VmZml4LgorK1RoaXMgcGFydGljdWxhciBvbmUgcmVzb2x2ZXMgdG8gb2Zmc2V0IC0gc3ltIC0gYWRkZW5kLiAgKi8KKysgIEJGRF9SRUxPQ19BVlIzMl8yMkhfUENSRUwsCisrICBCRkRfUkVMT0NfQVZSMzJfMThXX1BDUkVMLAorKyAgQkZEX1JFTE9DX0FWUjMyXzE2Ql9QQ1JFTCwKKysgIEJGRF9SRUxPQ19BVlIzMl8xNk5fUENSRUwsCisrICBCRkRfUkVMT0NfQVZSMzJfMTRVV19QQ1JFTCwKKysgIEJGRF9SRUxPQ19BVlIzMl8xMUhfUENSRUwsCisrICBCRkRfUkVMT0NfQVZSMzJfMTBVV19QQ1JFTCwKKysgIEJGRF9SRUxPQ19BVlIzMl85SF9QQ1JFTCwKKysgIEJGRF9SRUxPQ19BVlIzMl85VVdfUENSRUwsCisrCisrLyogU3VidHJhY3QgdGhlIGxpbmstdGltZSBhZGRyZXNzIG9mIHRoZSBHT1QgZnJvbSAoc3ltYm9sICsgYWRkZW5kKQorK2FuZCBpbnNlcnQgdGhlIHJlc3VsdC4gICovCisrICBCRkRfUkVMT0NfQVZSMzJfR09UUEMsCisrCisrLyogUmVmZXJlbmNlIHRvIGEgc3ltYm9sIHRocm91Z2ggdGhlIEdPVC4gVGhlIGxpbmtlciB3aWxsIGFsbG9jYXRlIGFuCisrZW50cnkgZm9yIHN5bWJvbCBpbiB0aGUgR09UIGFuZCBpbnNlcnQgdGhlIG9mZnNldCBvZiB0aGlzIGVudHJ5IGFzCisrdGhlIHJlbG9jYXRpb24gdmFsdWUuIGFkZGVuZCBtdXN0IGJlIHplcm8uIEFzIHVzdWFsLCAnUycgbWVhbnMKKytzaWduZWQsICdXJyBtZWFucyB3b3JkLWFsaWduZWQsIGV0Yy4gICovCisrICBCRkRfUkVMT0NfQVZSMzJfR09UQ0FMTCwKKysgIEJGRF9SRUxPQ19BVlIzMl9MREFfR09ULAorKyAgQkZEX1JFTE9DX0FWUjMyX0dPVDIxUywKKysgIEJGRF9SRUxPQ19BVlIzMl9HT1QxOFNXLAorKyAgQkZEX1JFTE9DX0FWUjMyX0dPVDE2UywKKysKKysvKiAzMi1iaXQgY29uc3RhbnQgcG9vbCBlbnRyeS4gSSBkb24ndCB0aGluayA4LSBhbmQgMTYtYml0IGVudHJpZXMgbWFrZQorK2Egd2hvbGUgbG90IG9mIHNlbnNlLiAgKi8KKysgIEJGRF9SRUxPQ19BVlIzMl8zMl9DUEVOVCwKKysKKysvKiBDb25zdGFudCBwb29sIHJlZmVyZW5jZXMuIFNvbWUgb2YgdGhlc2UgcmVsb2NhdGlvbnMgYXJlIHNpZ25lZCwKKytvdGhlcnMgYXJlIHVuc2lnbmVkLiBJdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIsIHNpbmNlIHRoZSBjb25zdGFudAorK3Bvb2wgYWx3YXlzIGNvbWVzIGFmdGVyIHRoZSBjb2RlIHRoYXQgcmVmZXJlbmNlcyBpdC4gICovCisrICBCRkRfUkVMT0NfQVZSMzJfQ1BDQUxMLAorKyAgQkZEX1JFTE9DX0FWUjMyXzE2X0NQLAorKyAgQkZEX1JFTE9DX0FWUjMyXzlXX0NQLAorKworKy8qIHN5bSBtdXN0IGJlIHRoZSBhYnNvbHV0ZSBzeW1ib2wuIFRoZSBhZGRlbmQgc3BlY2lmaWVzIHRoZSBhbGlnbm1lbnQKKytvcmRlciwgZS5nLiBpZiBhZGRlbmQgaXMgMiwgdGhlIGxpbmtlciBtdXN0IGFkZCBwYWRkaW5nIHNvIHRoYXQgdGhlCisrbmV4dCBhZGRyZXNzIGlzIGFsaWduZWQgdG8gYSA0LWJ5dGUgYm91bmRhcnkuICAqLworKyAgQkZEX1JFTE9DX0FWUjMyX0FMSUdOLAorKworKy8qIENvZGUgcmVsb2NhdGlvbnMgdGhhdCB3aWxsIG5ldmVyIG1ha2UgaXQgdG8gdGhlIG91dHB1dCBmaWxlLiAgKi8KKysgIEJGRF9SRUxPQ19BVlIzMl8xNFVXLAorKyAgQkZEX1JFTE9DX0FWUjMyXzEwVVcsCisrICBCRkRfUkVMT0NfQVZSMzJfMTBTVywKKysgIEJGRF9SRUxPQ19BVlIzMl9TVEhIX1csCisrICBCRkRfUkVMT0NfQVZSMzJfN1VXLAorKyAgQkZEX1JFTE9DX0FWUjMyXzZTLAorKyAgQkZEX1JFTE9DX0FWUjMyXzZVVywKKysgIEJGRF9SRUxPQ19BVlIzMl80VUgsCisrICBCRkRfUkVMT0NfQVZSMzJfM1UsCisrCisrLyogRGlyZWN0IDEyIGJpdC4gICovCisrICBCRkRfUkVMT0NfMzkwXzEyLAorKworKy8qIDEyIGJpdCBHT1Qgb2Zmc2V0LiAgKi8KKysgIEJGRF9SRUxPQ18zOTBfR09UMTIsCisrCisrLyogMzIgYml0IFBDIHJlbGF0aXZlIFBMVCBhZGRyZXNzLiAgKi8KKysgIEJGRF9SRUxPQ18zOTBfUExUMzIsCisrCisrLyogQ29weSBzeW1ib2wgYXQgcnVudGltZS4gICovCisrICBCRkRfUkVMT0NfMzkwX0NPUFksCisrCisrLyogQ3JlYXRlIEdPVCBlbnRyeS4gICovCisrICBCRkRfUkVMT0NfMzkwX0dMT0JfREFULAorKworKy8qIENyZWF0ZSBQTFQgZW50cnkuICAqLworKyAgQkZEX1JFTE9DXzM5MF9KTVBfU0xPVCwKKysKKysvKiBBZGp1c3QgYnkgcHJvZ3JhbSBiYXNlLiAgKi8KKysgIEJGRF9SRUxPQ18zOTBfUkVMQVRJVkUsCisrCisrLyogMzIgYml0IFBDIHJlbGF0aXZlIG9mZnNldCB0byBHT1QuICAqLworKyAgQkZEX1JFTE9DXzM5MF9HT1RQQywKKysKKysvKiAxNiBiaXQgR09UIG9mZnNldC4gICovCisrICBCRkRfUkVMT0NfMzkwX0dPVDE2LAorKworKy8qIFBDIHJlbGF0aXZlIDE2IGJpdCBzaGlmdGVkIGJ5IDEuICAqLworKyAgQkZEX1JFTE9DXzM5MF9QQzE2REJMLAorKworKy8qIDE2IGJpdCBQQyByZWwuIFBMVCBzaGlmdGVkIGJ5IDEuICAqLworKyAgQkZEX1JFTE9DXzM5MF9QTFQxNkRCTCwKKysKKysvKiBQQyByZWxhdGl2ZSAzMiBiaXQgc2hpZnRlZCBieSAxLiAgKi8KKysgIEJGRF9SRUxPQ18zOTBfUEMzMkRCTCwKKysKKysvKiAzMiBiaXQgUEMgcmVsLiBQTFQgc2hpZnRlZCBieSAxLiAgKi8KKysgIEJGRF9SRUxPQ18zOTBfUExUMzJEQkwsCisrCisrLyogMzIgYml0IFBDIHJlbC4gR09UIHNoaWZ0ZWQgYnkgMS4gICovCisrICBCRkRfUkVMT0NfMzkwX0dPVFBDREJMLAorKworKy8qIDY0IGJpdCBHT1Qgb2Zmc2V0LiAgKi8KKysgIEJGRF9SRUxPQ18zOTBfR09UNjQsCisrCisrLyogNjQgYml0IFBDIHJlbGF0aXZlIFBMVCBhZGRyZXNzLiAgKi8KKysgIEJGRF9SRUxPQ18zOTBfUExUNjQsCisrCisrLyogMzIgYml0IHJlbC4gb2Zmc2V0IHRvIEdPVCBlbnRyeS4gICovCisrICBCRkRfUkVMT0NfMzkwX0dPVEVOVCwKKysKKysvKiA2NCBiaXQgb2Zmc2V0IHRvIEdPVC4gICovCisrICBCRkRfUkVMT0NfMzkwX0dPVE9GRjY0LAorKworKy8qIDEyLWJpdCBvZmZzZXQgdG8gc3ltYm9sLWVudHJ5IHdpdGhpbiBHT1QsIHdpdGggUExUIGhhbmRsaW5nLiAgKi8KKysgIEJGRF9SRUxPQ18zOTBfR09UUExUMTIsCisrCisrLyogMTYtYml0IG9mZnNldCB0byBzeW1ib2wtZW50cnkgd2l0aGluIEdPVCwgd2l0aCBQTFQgaGFuZGxpbmcuICAqLworKyAgQkZEX1JFTE9DXzM5MF9HT1RQTFQxNiwKKysKKysvKiAzMi1iaXQgb2Zmc2V0IHRvIHN5bWJvbC1lbnRyeSB3aXRoaW4gR09ULCB3aXRoIFBMVCBoYW5kbGluZy4gICovCisrICBCRkRfUkVMT0NfMzkwX0dPVFBMVDMyLAorKworKy8qIDY0LWJpdCBvZmZzZXQgdG8gc3ltYm9sLWVudHJ5IHdpdGhpbiBHT1QsIHdpdGggUExUIGhhbmRsaW5nLiAgKi8KKysgIEJGRF9SRUxPQ18zOTBfR09UUExUNjQsCisrCisrLyogMzItYml0IHJlbC4gb2Zmc2V0IHRvIHN5bWJvbC1lbnRyeSB3aXRoaW4gR09ULCB3aXRoIFBMVCBoYW5kbGluZy4gICovCisrICBCRkRfUkVMT0NfMzkwX0dPVFBMVEVOVCwKKysKKysvKiAxNi1iaXQgcmVsLiBvZmZzZXQgZnJvbSB0aGUgR09UIHRvIGEgUExUIGVudHJ5LiAgKi8KKysgIEJGRF9SRUxPQ18zOTBfUExUT0ZGMTYsCisrCisrLyogMzItYml0IHJlbC4gb2Zmc2V0IGZyb20gdGhlIEdPVCB0byBhIFBMVCBlbnRyeS4gICovCisrICBCRkRfUkVMT0NfMzkwX1BMVE9GRjMyLAorKworKy8qIDY0LWJpdCByZWwuIG9mZnNldCBmcm9tIHRoZSBHT1QgdG8gYSBQTFQgZW50cnkuICAqLworKyAgQkZEX1JFTE9DXzM5MF9QTFRPRkY2NCwKKysKKysvKiBzMzkwIHRscyByZWxvY2F0aW9ucy4gICovCisrICBCRkRfUkVMT0NfMzkwX1RMU19MT0FELAorKyAgQkZEX1JFTE9DXzM5MF9UTFNfR0RDQUxMLAorKyAgQkZEX1JFTE9DXzM5MF9UTFNfTERDQUxMLAorKyAgQkZEX1JFTE9DXzM5MF9UTFNfR0QzMiwKKysgIEJGRF9SRUxPQ18zOTBfVExTX0dENjQsCisrICBCRkRfUkVMT0NfMzkwX1RMU19HT1RJRTEyLAorKyAgQkZEX1JFTE9DXzM5MF9UTFNfR09USUUzMiwKKysgIEJGRF9SRUxPQ18zOTBfVExTX0dPVElFNjQsCisrICBCRkRfUkVMT0NfMzkwX1RMU19MRE0zMiwKKysgIEJGRF9SRUxPQ18zOTBfVExTX0xETTY0LAorKyAgQkZEX1JFTE9DXzM5MF9UTFNfSUUzMiwKKysgIEJGRF9SRUxPQ18zOTBfVExTX0lFNjQsCisrICBCRkRfUkVMT0NfMzkwX1RMU19JRUVOVCwKKysgIEJGRF9SRUxPQ18zOTBfVExTX0xFMzIsCisrICBCRkRfUkVMT0NfMzkwX1RMU19MRTY0LAorKyAgQkZEX1JFTE9DXzM5MF9UTFNfTERPMzIsCisrICBCRkRfUkVMT0NfMzkwX1RMU19MRE82NCwKKysgIEJGRF9SRUxPQ18zOTBfVExTX0RUUE1PRCwKKysgIEJGRF9SRUxPQ18zOTBfVExTX0RUUE9GRiwKKysgIEJGRF9SRUxPQ18zOTBfVExTX1RQT0ZGLAorKworKy8qIExvbmcgZGlzcGxhY2VtZW50IGV4dGVuc2lvbi4gICovCisrICBCRkRfUkVMT0NfMzkwXzIwLAorKyAgQkZEX1JFTE9DXzM5MF9HT1QyMCwKKysgIEJGRF9SRUxPQ18zOTBfR09UUExUMjAsCisrICBCRkRfUkVMT0NfMzkwX1RMU19HT1RJRTIwLAorKworKy8qIFNjb3JlIHJlbG9jYXRpb25zICAqLworKyAgQkZEX1JFTE9DX1NDT1JFX0RVTU1ZMSwKKysKKysvKiBMb3cgMTYgYml0IGZvciBsb2FkL3N0b3JlICAqLworKyAgQkZEX1JFTE9DX1NDT1JFX0dQUkVMMTUsCisrCisrLyogVGhpcyBpcyBhIDI0LWJpdCByZWxvYyB3aXRoIHRoZSByaWdodCAxIGJpdCBhc3N1bWVkIHRvIGJlIDAgICovCisrICBCRkRfUkVMT0NfU0NPUkVfRFVNTVkyLAorKyAgQkZEX1JFTE9DX1NDT1JFX0pNUCwKKysKKysvKiBUaGlzIGlzIGEgMTktYml0IHJlbG9jIHdpdGggdGhlIHJpZ2h0IDEgYml0IGFzc3VtZWQgdG8gYmUgMCAgKi8KKysgIEJGRF9SRUxPQ19TQ09SRV9CUkFOQ0gsCisrCisrLyogVGhpcyBpcyBhIDExLWJpdCByZWxvYyB3aXRoIHRoZSByaWdodCAxIGJpdCBhc3N1bWVkIHRvIGJlIDAgICovCisrICBCRkRfUkVMT0NfU0NPUkUxNl9KTVAsCisrCisrLyogVGhpcyBpcyBhIDgtYml0IHJlbG9jIHdpdGggdGhlIHJpZ2h0IDEgYml0IGFzc3VtZWQgdG8gYmUgMCAgKi8KKysgIEJGRF9SRUxPQ19TQ09SRTE2X0JSQU5DSCwKKysKKysvKiBVbmRvY3VtZW50ZWQgU2NvcmUgcmVsb2NzICAqLworKyAgQkZEX1JFTE9DX1NDT1JFX0dPVDE1LAorKyAgQkZEX1JFTE9DX1NDT1JFX0dPVF9MTzE2LAorKyAgQkZEX1JFTE9DX1NDT1JFX0NBTEwxNSwKKysgIEJGRF9SRUxPQ19TQ09SRV9EVU1NWV9ISTE2LAorKworKy8qIFNjZW5peCBJUDJLIC0gOS1iaXQgcmVnaXN0ZXIgbnVtYmVyIC8gZGF0YSBhZGRyZXNzICAqLworKyAgQkZEX1JFTE9DX0lQMktfRlI5LAorKworKy8qIFNjZW5peCBJUDJLIC0gNC1iaXQgcmVnaXN0ZXIvZGF0YSBiYW5rIG51bWJlciAgKi8KKysgIEJGRF9SRUxPQ19JUDJLX0JBTkssCisrCisrLyogU2Nlbml4IElQMksgLSBsb3cgMTMgYml0cyBvZiBpbnN0cnVjdGlvbiB3b3JkIGFkZHJlc3MgICovCisrICBCRkRfUkVMT0NfSVAyS19BRERSMTZDSlAsCisrCisrLyogU2Nlbml4IElQMksgLSBoaWdoIDMgYml0cyBvZiBpbnN0cnVjdGlvbiB3b3JkIGFkZHJlc3MgICovCisrICBCRkRfUkVMT0NfSVAyS19QQUdFMywKKysKKysvKiBTY2VuaXggSVAySyAtIGV4dC9sb3cvaGlnaCA4IGJpdHMgb2YgZGF0YSBhZGRyZXNzICAqLworKyAgQkZEX1JFTE9DX0lQMktfTE84REFUQSwKKysgIEJGRF9SRUxPQ19JUDJLX0hJOERBVEEsCisrICBCRkRfUkVMT0NfSVAyS19FWDhEQVRBLAorKworKy8qIFNjZW5peCBJUDJLIC0gbG93L2hpZ2ggOCBiaXRzIG9mIGluc3RydWN0aW9uIHdvcmQgYWRkcmVzcyAgKi8KKysgIEJGRF9SRUxPQ19JUDJLX0xPOElOU04sCisrICBCRkRfUkVMT0NfSVAyS19ISThJTlNOLAorKworKy8qIFNjZW5peCBJUDJLIC0gZXZlbi9vZGQgUEMgbW9kaWZpZXIgdG8gbW9kaWZ5IHNuYiBwY2wuMCAgKi8KKysgIEJGRF9SRUxPQ19JUDJLX1BDX1NLSVAsCisrCisrLyogU2Nlbml4IElQMksgLSAxNiBiaXQgd29yZCBhZGRyZXNzIGluIHRleHQgc2VjdGlvbi4gICovCisrICBCRkRfUkVMT0NfSVAyS19URVhULAorKworKy8qIFNjZW5peCBJUDJLIC0gNy1iaXQgc3Agb3IgZHAgb2Zmc2V0ICAqLworKyAgQkZEX1JFTE9DX0lQMktfRlJfT0ZGU0VULAorKworKy8qIFNjZW5peCBWUEU0SyBjb3Byb2Nlc3NvciAtIGRhdGEvaW5zbi1zcGFjZSBhZGRyZXNzaW5nICAqLworKyAgQkZEX1JFTE9DX1ZQRTRLTUFUSF9EQVRBLAorKyAgQkZEX1JFTE9DX1ZQRTRLTUFUSF9JTlNOLAorKworKy8qIFRoZXNlIHR3byByZWxvY2F0aW9ucyBhcmUgdXNlZCBieSB0aGUgbGlua2VyIHRvIGRldGVybWluZSB3aGljaCBvZgorK3RoZSBlbnRyaWVzIGluIGEgQysrIHZpcnR1YWwgZnVuY3Rpb24gdGFibGUgYXJlIGFjdHVhbGx5IHVzZWQuICBXaGVuCisrdGhlIC0tZ2Mtc2VjdGlvbnMgb3B0aW9uIGlzIGdpdmVuLCB0aGUgbGlua2VyIHdpbGwgemVybyBvdXQgdGhlIGVudHJpZXMKKyt0aGF0IGFyZSBub3QgdXNlZCwgc28gdGhhdCB0aGUgY29kZSBmb3IgdGhvc2UgZnVuY3Rpb25zIG5lZWQgbm90IGJlCisraW5jbHVkZWQgaW4gdGhlIG91dHB1dC4KKysKKytWVEFCTEVfSU5IRVJJVCBpcyBhIHplcm8tc3BhY2UgcmVsb2NhdGlvbiB1c2VkIHRvIGRlc2NyaWJlIHRvIHRoZQorK2xpbmtlciB0aGUgaW5oZXJpdGFuY2UgdHJlZSBvZiBhIEMrKyB2aXJ0dWFsIGZ1bmN0aW9uIHRhYmxlLiAgVGhlCisrcmVsb2NhdGlvbidzIHN5bWJvbCBzaG91bGQgYmUgdGhlIHBhcmVudCBjbGFzcycgdnRhYmxlLCBhbmQgdGhlCisrcmVsb2NhdGlvbiBzaG91bGQgYmUgbG9jYXRlZCBhdCB0aGUgY2hpbGQgdnRhYmxlLgorKworK1ZUQUJMRV9FTlRSWSBpcyBhIHplcm8tc3BhY2UgcmVsb2NhdGlvbiB0aGF0IGRlc2NyaWJlcyB0aGUgdXNlIG9mIGEKKyt2aXJ0dWFsIGZ1bmN0aW9uIHRhYmxlIGVudHJ5LiAgVGhlIHJlbG9jJ3Mgc3ltYm9sIHNob3VsZCByZWZlciB0byB0aGUKKyt0YWJsZSBvZiB0aGUgY2xhc3MgbWVudGlvbmVkIGluIHRoZSBjb2RlLiAgT2ZmIG9mIHRoYXQgYmFzZSwgYW4gb2Zmc2V0CisrZGVzY3JpYmVzIHRoZSBlbnRyeSB0aGF0IGlzIGJlaW5nIHVzZWQuICBGb3IgUmVsYSBob3N0cywgdGhpcyBvZmZzZXQKKytpcyBzdG9yZWQgaW4gdGhlIHJlbG9jJ3MgYWRkZW5kLiAgRm9yIFJlbCBob3N0cywgd2UgYXJlIGZvcmNlZCB0byBwdXQKKyt0aGlzIG9mZnNldCBpbiB0aGUgcmVsb2MncyBzZWN0aW9uIG9mZnNldC4gICovCisrICBCRkRfUkVMT0NfVlRBQkxFX0lOSEVSSVQsCisrICBCRkRfUkVMT0NfVlRBQkxFX0VOVFJZLAorKworKy8qIEludGVsIElBNjQgUmVsb2NhdGlvbnMuICAqLworKyAgQkZEX1JFTE9DX0lBNjRfSU1NMTQsCisrICBCRkRfUkVMT0NfSUE2NF9JTU0yMiwKKysgIEJGRF9SRUxPQ19JQTY0X0lNTTY0LAorKyAgQkZEX1JFTE9DX0lBNjRfRElSMzJNU0IsCisrICBCRkRfUkVMT0NfSUE2NF9ESVIzMkxTQiwKKysgIEJGRF9SRUxPQ19JQTY0X0RJUjY0TVNCLAorKyAgQkZEX1JFTE9DX0lBNjRfRElSNjRMU0IsCisrICBCRkRfUkVMT0NfSUE2NF9HUFJFTDIyLAorKyAgQkZEX1JFTE9DX0lBNjRfR1BSRUw2NEksCisrICBCRkRfUkVMT0NfSUE2NF9HUFJFTDMyTVNCLAorKyAgQkZEX1JFTE9DX0lBNjRfR1BSRUwzMkxTQiwKKysgIEJGRF9SRUxPQ19JQTY0X0dQUkVMNjRNU0IsCisrICBCRkRfUkVMT0NfSUE2NF9HUFJFTDY0TFNCLAorKyAgQkZEX1JFTE9DX0lBNjRfTFRPRkYyMiwKKysgIEJGRF9SRUxPQ19JQTY0X0xUT0ZGNjRJLAorKyAgQkZEX1JFTE9DX0lBNjRfUExUT0ZGMjIsCisrICBCRkRfUkVMT0NfSUE2NF9QTFRPRkY2NEksCisrICBCRkRfUkVMT0NfSUE2NF9QTFRPRkY2NE1TQiwKKysgIEJGRF9SRUxPQ19JQTY0X1BMVE9GRjY0TFNCLAorKyAgQkZEX1JFTE9DX0lBNjRfRlBUUjY0SSwKKysgIEJGRF9SRUxPQ19JQTY0X0ZQVFIzMk1TQiwKKysgIEJGRF9SRUxPQ19JQTY0X0ZQVFIzMkxTQiwKKysgIEJGRF9SRUxPQ19JQTY0X0ZQVFI2NE1TQiwKKysgIEJGRF9SRUxPQ19JQTY0X0ZQVFI2NExTQiwKKysgIEJGRF9SRUxPQ19JQTY0X1BDUkVMMjFCLAorKyAgQkZEX1JFTE9DX0lBNjRfUENSRUwyMUJJLAorKyAgQkZEX1JFTE9DX0lBNjRfUENSRUwyMU0sCisrICBCRkRfUkVMT0NfSUE2NF9QQ1JFTDIxRiwKKysgIEJGRF9SRUxPQ19JQTY0X1BDUkVMMjIsCisrICBCRkRfUkVMT0NfSUE2NF9QQ1JFTDYwQiwKKysgIEJGRF9SRUxPQ19JQTY0X1BDUkVMNjRJLAorKyAgQkZEX1JFTE9DX0lBNjRfUENSRUwzMk1TQiwKKysgIEJGRF9SRUxPQ19JQTY0X1BDUkVMMzJMU0IsCisrICBCRkRfUkVMT0NfSUE2NF9QQ1JFTDY0TVNCLAorKyAgQkZEX1JFTE9DX0lBNjRfUENSRUw2NExTQiwKKysgIEJGRF9SRUxPQ19JQTY0X0xUT0ZGX0ZQVFIyMiwKKysgIEJGRF9SRUxPQ19JQTY0X0xUT0ZGX0ZQVFI2NEksCisrICBCRkRfUkVMT0NfSUE2NF9MVE9GRl9GUFRSMzJNU0IsCisrICBCRkRfUkVMT0NfSUE2NF9MVE9GRl9GUFRSMzJMU0IsCisrICBCRkRfUkVMT0NfSUE2NF9MVE9GRl9GUFRSNjRNU0IsCisrICBCRkRfUkVMT0NfSUE2NF9MVE9GRl9GUFRSNjRMU0IsCisrICBCRkRfUkVMT0NfSUE2NF9TRUdSRUwzMk1TQiwKKysgIEJGRF9SRUxPQ19JQTY0X1NFR1JFTDMyTFNCLAorKyAgQkZEX1JFTE9DX0lBNjRfU0VHUkVMNjRNU0IsCisrICBCRkRfUkVMT0NfSUE2NF9TRUdSRUw2NExTQiwKKysgIEJGRF9SRUxPQ19JQTY0X1NFQ1JFTDMyTVNCLAorKyAgQkZEX1JFTE9DX0lBNjRfU0VDUkVMMzJMU0IsCisrICBCRkRfUkVMT0NfSUE2NF9TRUNSRUw2NE1TQiwKKysgIEJGRF9SRUxPQ19JQTY0X1NFQ1JFTDY0TFNCLAorKyAgQkZEX1JFTE9DX0lBNjRfUkVMMzJNU0IsCisrICBCRkRfUkVMT0NfSUE2NF9SRUwzMkxTQiwKKysgIEJGRF9SRUxPQ19JQTY0X1JFTDY0TVNCLAorKyAgQkZEX1JFTE9DX0lBNjRfUkVMNjRMU0IsCisrICBCRkRfUkVMT0NfSUE2NF9MVFYzMk1TQiwKKysgIEJGRF9SRUxPQ19JQTY0X0xUVjMyTFNCLAorKyAgQkZEX1JFTE9DX0lBNjRfTFRWNjRNU0IsCisrICBCRkRfUkVMT0NfSUE2NF9MVFY2NExTQiwKKysgIEJGRF9SRUxPQ19JQTY0X0lQTFRNU0IsCisrICBCRkRfUkVMT0NfSUE2NF9JUExUTFNCLAorKyAgQkZEX1JFTE9DX0lBNjRfQ09QWSwKKysgIEJGRF9SRUxPQ19JQTY0X0xUT0ZGMjJYLAorKyAgQkZEX1JFTE9DX0lBNjRfTERYTU9WLAorKyAgQkZEX1JFTE9DX0lBNjRfVFBSRUwxNCwKKysgIEJGRF9SRUxPQ19JQTY0X1RQUkVMMjIsCisrICBCRkRfUkVMT0NfSUE2NF9UUFJFTDY0SSwKKysgIEJGRF9SRUxPQ19JQTY0X1RQUkVMNjRNU0IsCisrICBCRkRfUkVMT0NfSUE2NF9UUFJFTDY0TFNCLAorKyAgQkZEX1JFTE9DX0lBNjRfTFRPRkZfVFBSRUwyMiwKKysgIEJGRF9SRUxPQ19JQTY0X0RUUE1PRDY0TVNCLAorKyAgQkZEX1JFTE9DX0lBNjRfRFRQTU9ENjRMU0IsCisrICBCRkRfUkVMT0NfSUE2NF9MVE9GRl9EVFBNT0QyMiwKKysgIEJGRF9SRUxPQ19JQTY0X0RUUFJFTDE0LAorKyAgQkZEX1JFTE9DX0lBNjRfRFRQUkVMMjIsCisrICBCRkRfUkVMT0NfSUE2NF9EVFBSRUw2NEksCisrICBCRkRfUkVMT0NfSUE2NF9EVFBSRUwzMk1TQiwKKysgIEJGRF9SRUxPQ19JQTY0X0RUUFJFTDMyTFNCLAorKyAgQkZEX1JFTE9DX0lBNjRfRFRQUkVMNjRNU0IsCisrICBCRkRfUkVMT0NfSUE2NF9EVFBSRUw2NExTQiwKKysgIEJGRF9SRUxPQ19JQTY0X0xUT0ZGX0RUUFJFTDIyLAorKworKy8qIE1vdG9yb2xhIDY4SEMxMSByZWxvYy4KKytUaGlzIGlzIHRoZSA4IGJpdCBoaWdoIHBhcnQgb2YgYW4gYWJzb2x1dGUgYWRkcmVzcy4gICovCisrICBCRkRfUkVMT0NfTTY4SEMxMV9ISTgsCisrCisrLyogTW90b3JvbGEgNjhIQzExIHJlbG9jLgorK1RoaXMgaXMgdGhlIDggYml0IGxvdyBwYXJ0IG9mIGFuIGFic29sdXRlIGFkZHJlc3MuICAqLworKyAgQkZEX1JFTE9DX002OEhDMTFfTE84LAorKworKy8qIE1vdG9yb2xhIDY4SEMxMSByZWxvYy4KKytUaGlzIGlzIHRoZSAzIGJpdCBvZiBhIHZhbHVlLiAgKi8KKysgIEJGRF9SRUxPQ19NNjhIQzExXzNCLAorKworKy8qIE1vdG9yb2xhIDY4SEMxMSByZWxvYy4KKytUaGlzIHJlbG9jIG1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgYSBqdW1wL2NhbGwgaW5zdHJ1Y3Rpb24uCisrSXQgaXMgdXNlZCBmb3IgbGlua2VyIHJlbGF4YXRpb24gdG8gY29ycmVjdGx5IGlkZW50aWZ5IGJlZ2lubmluZworK29mIGluc3RydWN0aW9uIGFuZCBjaGFuZ2Ugc29tZSBicmFuY2hlcyB0byB1c2UgUEMtcmVsYXRpdmUKKythZGRyZXNzaW5nIG1vZGUuICAqLworKyAgQkZEX1JFTE9DX002OEhDMTFfUkxfSlVNUCwKKysKKysvKiBNb3Rvcm9sYSA2OEhDMTEgcmVsb2MuCisrVGhpcyByZWxvYyBtYXJrcyBhIGdyb3VwIG9mIHNldmVyYWwgaW5zdHJ1Y3Rpb25zIHRoYXQgZ2NjIGdlbmVyYXRlcworK2FuZCBmb3Igd2hpY2ggdGhlIGxpbmtlciByZWxheGF0aW9uIHBhc3MgY2FuIG1vZGlmeSBhbmQvb3IgcmVtb3ZlCisrc29tZSBvZiB0aGVtLiAgKi8KKysgIEJGRF9SRUxPQ19NNjhIQzExX1JMX0dST1VQLAorKworKy8qIE1vdG9yb2xhIDY4SEMxMSByZWxvYy4KKytUaGlzIGlzIHRoZSAxNi1iaXQgbG93ZXIgcGFydCBvZiBhbiBhZGRyZXNzLiAgSXQgaXMgdXNlZCBmb3IgJ2NhbGwnCisraW5zdHJ1Y3Rpb24gdG8gc3BlY2lmeSB0aGUgc3ltYm9sIGFkZHJlc3Mgd2l0aG91dCBhbnkgc3BlY2lhbAorK3RyYW5zZm9ybWF0aW9uIChkdWUgdG8gbWVtb3J5IGJhbmsgd2luZG93KS4gICovCisrICBCRkRfUkVMT0NfTTY4SEMxMV9MTzE2LAorKworKy8qIE1vdG9yb2xhIDY4SEMxMSByZWxvYy4KKytUaGlzIGlzIGEgOC1iaXQgcmVsb2MgdGhhdCBzcGVjaWZpZXMgdGhlIHBhZ2UgbnVtYmVyIG9mIGFuIGFkZHJlc3MuCisrSXQgaXMgdXNlZCBieSAnY2FsbCcgaW5zdHJ1Y3Rpb24gdG8gc3BlY2lmeSB0aGUgcGFnZSBudW1iZXIgb2YKKyt0aGUgc3ltYm9sLiAgKi8KKysgIEJGRF9SRUxPQ19NNjhIQzExX1BBR0UsCisrCisrLyogTW90b3JvbGEgNjhIQzExIHJlbG9jLgorK1RoaXMgaXMgYSAyNC1iaXQgcmVsb2MgdGhhdCByZXByZXNlbnRzIHRoZSBhZGRyZXNzIHdpdGggYSAxNi1iaXQKKyt2YWx1ZSBhbmQgYSA4LWJpdCBwYWdlIG51bWJlci4gIFRoZSBzeW1ib2wgYWRkcmVzcyBpcyB0cmFuc2Zvcm1lZAorK3RvIGZvbGxvdyB0aGUgMTZLIG1lbW9yeSBiYW5rIG9mIDY4SEMxMiAoc2VlbiBhcyBtYXBwZWQgaW4gdGhlIHdpbmRvdykuICAqLworKyAgQkZEX1JFTE9DX002OEhDMTFfMjQsCisrCisrLyogTW90b3JvbGEgNjhIQzEyIHJlbG9jLgorK1RoaXMgaXMgdGhlIDUgYml0cyBvZiBhIHZhbHVlLiAgKi8KKysgIEJGRF9SRUxPQ19NNjhIQzEyXzVCLAorKworKy8qIE5TIENSMTZDIFJlbG9jYXRpb25zLiAgKi8KKysgIEJGRF9SRUxPQ18xNkNfTlVNMDgsCisrICBCRkRfUkVMT0NfMTZDX05VTTA4X0MsCisrICBCRkRfUkVMT0NfMTZDX05VTTE2LAorKyAgQkZEX1JFTE9DXzE2Q19OVU0xNl9DLAorKyAgQkZEX1JFTE9DXzE2Q19OVU0zMiwKKysgIEJGRF9SRUxPQ18xNkNfTlVNMzJfQywKKysgIEJGRF9SRUxPQ18xNkNfRElTUDA0LAorKyAgQkZEX1JFTE9DXzE2Q19ESVNQMDRfQywKKysgIEJGRF9SRUxPQ18xNkNfRElTUDA4LAorKyAgQkZEX1JFTE9DXzE2Q19ESVNQMDhfQywKKysgIEJGRF9SRUxPQ18xNkNfRElTUDE2LAorKyAgQkZEX1JFTE9DXzE2Q19ESVNQMTZfQywKKysgIEJGRF9SRUxPQ18xNkNfRElTUDI0LAorKyAgQkZEX1JFTE9DXzE2Q19ESVNQMjRfQywKKysgIEJGRF9SRUxPQ18xNkNfRElTUDI0YSwKKysgIEJGRF9SRUxPQ18xNkNfRElTUDI0YV9DLAorKyAgQkZEX1JFTE9DXzE2Q19SRUcwNCwKKysgIEJGRF9SRUxPQ18xNkNfUkVHMDRfQywKKysgIEJGRF9SRUxPQ18xNkNfUkVHMDRhLAorKyAgQkZEX1JFTE9DXzE2Q19SRUcwNGFfQywKKysgIEJGRF9SRUxPQ18xNkNfUkVHMTQsCisrICBCRkRfUkVMT0NfMTZDX1JFRzE0X0MsCisrICBCRkRfUkVMT0NfMTZDX1JFRzE2LAorKyAgQkZEX1JFTE9DXzE2Q19SRUcxNl9DLAorKyAgQkZEX1JFTE9DXzE2Q19SRUcyMCwKKysgIEJGRF9SRUxPQ18xNkNfUkVHMjBfQywKKysgIEJGRF9SRUxPQ18xNkNfQUJTMjAsCisrICBCRkRfUkVMT0NfMTZDX0FCUzIwX0MsCisrICBCRkRfUkVMT0NfMTZDX0FCUzI0LAorKyAgQkZEX1JFTE9DXzE2Q19BQlMyNF9DLAorKyAgQkZEX1JFTE9DXzE2Q19JTU0wNCwKKysgIEJGRF9SRUxPQ18xNkNfSU1NMDRfQywKKysgIEJGRF9SRUxPQ18xNkNfSU1NMTYsCisrICBCRkRfUkVMT0NfMTZDX0lNTTE2X0MsCisrICBCRkRfUkVMT0NfMTZDX0lNTTIwLAorKyAgQkZEX1JFTE9DXzE2Q19JTU0yMF9DLAorKyAgQkZEX1JFTE9DXzE2Q19JTU0yNCwKKysgIEJGRF9SRUxPQ18xNkNfSU1NMjRfQywKKysgIEJGRF9SRUxPQ18xNkNfSU1NMzIsCisrICBCRkRfUkVMT0NfMTZDX0lNTTMyX0MsCisrCisrLyogTlMgQ1IxNiBSZWxvY2F0aW9ucy4gICovCisrICBCRkRfUkVMT0NfQ1IxNl9OVU04LAorKyAgQkZEX1JFTE9DX0NSMTZfTlVNMTYsCisrICBCRkRfUkVMT0NfQ1IxNl9OVU0zMiwKKysgIEJGRF9SRUxPQ19DUjE2X05VTTMyYSwKKysgIEJGRF9SRUxPQ19DUjE2X1JFR1JFTDAsCisrICBCRkRfUkVMT0NfQ1IxNl9SRUdSRUw0LAorKyAgQkZEX1JFTE9DX0NSMTZfUkVHUkVMNGEsCisrICBCRkRfUkVMT0NfQ1IxNl9SRUdSRUwxNCwKKysgIEJGRF9SRUxPQ19DUjE2X1JFR1JFTDE0YSwKKysgIEJGRF9SRUxPQ19DUjE2X1JFR1JFTDE2LAorKyAgQkZEX1JFTE9DX0NSMTZfUkVHUkVMMjAsCisrICBCRkRfUkVMT0NfQ1IxNl9SRUdSRUwyMGEsCisrICBCRkRfUkVMT0NfQ1IxNl9BQlMyMCwKKysgIEJGRF9SRUxPQ19DUjE2X0FCUzI0LAorKyAgQkZEX1JFTE9DX0NSMTZfSU1NNCwKKysgIEJGRF9SRUxPQ19DUjE2X0lNTTgsCisrICBCRkRfUkVMT0NfQ1IxNl9JTU0xNiwKKysgIEJGRF9SRUxPQ19DUjE2X0lNTTIwLAorKyAgQkZEX1JFTE9DX0NSMTZfSU1NMjQsCisrICBCRkRfUkVMT0NfQ1IxNl9JTU0zMiwKKysgIEJGRF9SRUxPQ19DUjE2X0lNTTMyYSwKKysgIEJGRF9SRUxPQ19DUjE2X0RJU1A0LAorKyAgQkZEX1JFTE9DX0NSMTZfRElTUDgsCisrICBCRkRfUkVMT0NfQ1IxNl9ESVNQMTYsCisrICBCRkRfUkVMT0NfQ1IxNl9ESVNQMjAsCisrICBCRkRfUkVMT0NfQ1IxNl9ESVNQMjQsCisrICBCRkRfUkVMT0NfQ1IxNl9ESVNQMjRhLAorKworKy8qIE5TIENSWCBSZWxvY2F0aW9ucy4gICovCisrICBCRkRfUkVMT0NfQ1JYX1JFTDQsCisrICBCRkRfUkVMT0NfQ1JYX1JFTDgsCisrICBCRkRfUkVMT0NfQ1JYX1JFTDhfQ01QLAorKyAgQkZEX1JFTE9DX0NSWF9SRUwxNiwKKysgIEJGRF9SRUxPQ19DUlhfUkVMMjQsCisrICBCRkRfUkVMT0NfQ1JYX1JFTDMyLAorKyAgQkZEX1JFTE9DX0NSWF9SRUdSRUwxMiwKKysgIEJGRF9SRUxPQ19DUlhfUkVHUkVMMjIsCisrICBCRkRfUkVMT0NfQ1JYX1JFR1JFTDI4LAorKyAgQkZEX1JFTE9DX0NSWF9SRUdSRUwzMiwKKysgIEJGRF9SRUxPQ19DUlhfQUJTMTYsCisrICBCRkRfUkVMT0NfQ1JYX0FCUzMyLAorKyAgQkZEX1JFTE9DX0NSWF9OVU04LAorKyAgQkZEX1JFTE9DX0NSWF9OVU0xNiwKKysgIEJGRF9SRUxPQ19DUlhfTlVNMzIsCisrICBCRkRfUkVMT0NfQ1JYX0lNTTE2LAorKyAgQkZEX1JFTE9DX0NSWF9JTU0zMiwKKysgIEJGRF9SRUxPQ19DUlhfU1dJVENIOCwKKysgIEJGRF9SRUxPQ19DUlhfU1dJVENIMTYsCisrICBCRkRfUkVMT0NfQ1JYX1NXSVRDSDMyLAorKworKy8qIFRoZXNlIHJlbG9jcyBhcmUgb25seSB1c2VkIHdpdGhpbiB0aGUgQ1JJUyBhc3NlbWJsZXIuICBUaGV5IGFyZSBub3QKKysoYXQgcHJlc2VudCkgd3JpdHRlbiB0byBhbnkgb2JqZWN0IGZpbGVzLiAgKi8KKysgIEJGRF9SRUxPQ19DUklTX0JESVNQOCwKKysgIEJGRF9SRUxPQ19DUklTX1VOU0lHTkVEXzUsCisrICBCRkRfUkVMT0NfQ1JJU19TSUdORURfNiwKKysgIEJGRF9SRUxPQ19DUklTX1VOU0lHTkVEXzYsCisrICBCRkRfUkVMT0NfQ1JJU19TSUdORURfOCwKKysgIEJGRF9SRUxPQ19DUklTX1VOU0lHTkVEXzgsCisrICBCRkRfUkVMT0NfQ1JJU19TSUdORURfMTYsCisrICBCRkRfUkVMT0NfQ1JJU19VTlNJR05FRF8xNiwKKysgIEJGRF9SRUxPQ19DUklTX0xBUENRX09GRlNFVCwKKysgIEJGRF9SRUxPQ19DUklTX1VOU0lHTkVEXzQsCisrCisrLyogUmVsb2NzIHVzZWQgaW4gRUxGIHNoYXJlZCBsaWJyYXJpZXMgZm9yIENSSVMuICAqLworKyAgQkZEX1JFTE9DX0NSSVNfQ09QWSwKKysgIEJGRF9SRUxPQ19DUklTX0dMT0JfREFULAorKyAgQkZEX1JFTE9DX0NSSVNfSlVNUF9TTE9ULAorKyAgQkZEX1JFTE9DX0NSSVNfUkVMQVRJVkUsCisrCisrLyogMzItYml0IG9mZnNldCB0byBzeW1ib2wtZW50cnkgd2l0aGluIEdPVC4gICovCisrICBCRkRfUkVMT0NfQ1JJU18zMl9HT1QsCisrCisrLyogMTYtYml0IG9mZnNldCB0byBzeW1ib2wtZW50cnkgd2l0aGluIEdPVC4gICovCisrICBCRkRfUkVMT0NfQ1JJU18xNl9HT1QsCisrCisrLyogMzItYml0IG9mZnNldCB0byBzeW1ib2wtZW50cnkgd2l0aGluIEdPVCwgd2l0aCBQTFQgaGFuZGxpbmcuICAqLworKyAgQkZEX1JFTE9DX0NSSVNfMzJfR09UUExULAorKworKy8qIDE2LWJpdCBvZmZzZXQgdG8gc3ltYm9sLWVudHJ5IHdpdGhpbiBHT1QsIHdpdGggUExUIGhhbmRsaW5nLiAgKi8KKysgIEJGRF9SRUxPQ19DUklTXzE2X0dPVFBMVCwKKysKKysvKiAzMi1iaXQgb2Zmc2V0IHRvIHN5bWJvbCwgcmVsYXRpdmUgdG8gR09ULiAgKi8KKysgIEJGRF9SRUxPQ19DUklTXzMyX0dPVFJFTCwKKysKKysvKiAzMi1iaXQgb2Zmc2V0IHRvIHN5bWJvbCB3aXRoIFBMVCBlbnRyeSwgcmVsYXRpdmUgdG8gR09ULiAgKi8KKysgIEJGRF9SRUxPQ19DUklTXzMyX1BMVF9HT1RSRUwsCisrCisrLyogMzItYml0IG9mZnNldCB0byBzeW1ib2wgd2l0aCBQTFQgZW50cnksIHJlbGF0aXZlIHRvIHRoaXMgcmVsb2NhdGlvbi4gICovCisrICBCRkRfUkVMT0NfQ1JJU18zMl9QTFRfUENSRUwsCisrCisrLyogSW50ZWwgaTg2MCBSZWxvY2F0aW9ucy4gICovCisrICBCRkRfUkVMT0NfODYwX0NPUFksCisrICBCRkRfUkVMT0NfODYwX0dMT0JfREFULAorKyAgQkZEX1JFTE9DXzg2MF9KVU1QX1NMT1QsCisrICBCRkRfUkVMT0NfODYwX1JFTEFUSVZFLAorKyAgQkZEX1JFTE9DXzg2MF9QQzI2LAorKyAgQkZEX1JFTE9DXzg2MF9QTFQyNiwKKysgIEJGRF9SRUxPQ184NjBfUEMxNiwKKysgIEJGRF9SRUxPQ184NjBfTE9XMCwKKysgIEJGRF9SRUxPQ184NjBfU1BMSVQwLAorKyAgQkZEX1JFTE9DXzg2MF9MT1cxLAorKyAgQkZEX1JFTE9DXzg2MF9TUExJVDEsCisrICBCRkRfUkVMT0NfODYwX0xPVzIsCisrICBCRkRfUkVMT0NfODYwX1NQTElUMiwKKysgIEJGRF9SRUxPQ184NjBfTE9XMywKKysgIEJGRF9SRUxPQ184NjBfTE9HT1QwLAorKyAgQkZEX1JFTE9DXzg2MF9TUEdPVDAsCisrICBCRkRfUkVMT0NfODYwX0xPR09UMSwKKysgIEJGRF9SRUxPQ184NjBfU1BHT1QxLAorKyAgQkZEX1JFTE9DXzg2MF9MT0dPVE9GRjAsCisrICBCRkRfUkVMT0NfODYwX1NQR09UT0ZGMCwKKysgIEJGRF9SRUxPQ184NjBfTE9HT1RPRkYxLAorKyAgQkZEX1JFTE9DXzg2MF9TUEdPVE9GRjEsCisrICBCRkRfUkVMT0NfODYwX0xPR09UT0ZGMiwKKysgIEJGRF9SRUxPQ184NjBfTE9HT1RPRkYzLAorKyAgQkZEX1JFTE9DXzg2MF9MT1BDLAorKyAgQkZEX1JFTE9DXzg2MF9ISUdIQURKLAorKyAgQkZEX1JFTE9DXzg2MF9IQUdPVCwKKysgIEJGRF9SRUxPQ184NjBfSEFHT1RPRkYsCisrICBCRkRfUkVMT0NfODYwX0hBUEMsCisrICBCRkRfUkVMT0NfODYwX0hJR0gsCisrICBCRkRfUkVMT0NfODYwX0hJR09ULAorKyAgQkZEX1JFTE9DXzg2MF9ISUdPVE9GRiwKKysKKysvKiBPcGVuUklTQyBSZWxvY2F0aW9ucy4gICovCisrICBCRkRfUkVMT0NfT1BFTlJJU0NfQUJTXzI2LAorKyAgQkZEX1JFTE9DX09QRU5SSVNDX1JFTF8yNiwKKysKKysvKiBIOCBlbGYgUmVsb2NhdGlvbnMuICAqLworKyAgQkZEX1JFTE9DX0g4X0RJUjE2QTgsCisrICBCRkRfUkVMT0NfSDhfRElSMTZSOCwKKysgIEJGRF9SRUxPQ19IOF9ESVIyNEE4LAorKyAgQkZEX1JFTE9DX0g4X0RJUjI0UjgsCisrICBCRkRfUkVMT0NfSDhfRElSMzJBMTYsCisrCisrLyogU29ueSBYc3Rvcm15MTYgUmVsb2NhdGlvbnMuICAqLworKyAgQkZEX1JFTE9DX1hTVE9STVkxNl9SRUxfMTIsCisrICBCRkRfUkVMT0NfWFNUT1JNWTE2XzEyLAorKyAgQkZEX1JFTE9DX1hTVE9STVkxNl8yNCwKKysgIEJGRF9SRUxPQ19YU1RPUk1ZMTZfRlBUUjE2LAorKworKy8qIFNlbGYtZGVzY3JpYmluZyBjb21wbGV4IHJlbG9jYXRpb25zLiAgKi8KKysgIEJGRF9SRUxPQ19SRUxDLAorKworKworKy8qIEluZmluZW9uIFJlbG9jYXRpb25zLiAgKi8KKysgIEJGRF9SRUxPQ19YQzE2WF9QQUcsCisrICBCRkRfUkVMT0NfWEMxNlhfUE9GLAorKyAgQkZEX1JFTE9DX1hDMTZYX1NFRywKKysgIEJGRF9SRUxPQ19YQzE2WF9TT0YsCisrCisrLyogUmVsb2NhdGlvbnMgdXNlZCBieSBWQVggRUxGLiAgKi8KKysgIEJGRF9SRUxPQ19WQVhfR0xPQl9EQVQsCisrICBCRkRfUkVMT0NfVkFYX0pNUF9TTE9ULAorKyAgQkZEX1JFTE9DX1ZBWF9SRUxBVElWRSwKKysKKysvKiBNb3JwaG8gTVQgLSAxNiBiaXQgaW1tZWRpYXRlIHJlbG9jYXRpb24uICAqLworKyAgQkZEX1JFTE9DX01UX1BDMTYsCisrCisrLyogTW9ycGhvIE1UIC0gSGkgMTYgYml0cyBvZiBhbiBhZGRyZXNzLiAgKi8KKysgIEJGRF9SRUxPQ19NVF9ISTE2LAorKworKy8qIE1vcnBobyBNVCAtIExvdyAxNiBiaXRzIG9mIGFuIGFkZHJlc3MuICAqLworKyAgQkZEX1JFTE9DX01UX0xPMTYsCisrCisrLyogTW9ycGhvIE1UIC0gVXNlZCB0byB0ZWxsIHRoZSBsaW5rZXIgd2hpY2ggdnRhYmxlIGVudHJpZXMgYXJlIHVzZWQuICAqLworKyAgQkZEX1JFTE9DX01UX0dOVV9WVElOSEVSSVQsCisrCisrLyogTW9ycGhvIE1UIC0gVXNlZCB0byB0ZWxsIHRoZSBsaW5rZXIgd2hpY2ggdnRhYmxlIGVudHJpZXMgYXJlIHVzZWQuICAqLworKyAgQkZEX1JFTE9DX01UX0dOVV9WVEVOVFJZLAorKworKy8qIE1vcnBobyBNVCAtIDggYml0IGltbWVkaWF0ZSByZWxvY2F0aW9uLiAgKi8KKysgIEJGRF9SRUxPQ19NVF9QQ0lOU044LAorKworKy8qIG1zcDQzMCBzcGVjaWZpYyByZWxvY2F0aW9uIGNvZGVzICAqLworKyAgQkZEX1JFTE9DX01TUDQzMF8xMF9QQ1JFTCwKKysgIEJGRF9SRUxPQ19NU1A0MzBfMTZfUENSRUwsCisrICBCRkRfUkVMT0NfTVNQNDMwXzE2LAorKyAgQkZEX1JFTE9DX01TUDQzMF8xNl9QQ1JFTF9CWVRFLAorKyAgQkZEX1JFTE9DX01TUDQzMF8xNl9CWVRFLAorKyAgQkZEX1JFTE9DX01TUDQzMF8yWF9QQ1JFTCwKKysgIEJGRF9SRUxPQ19NU1A0MzBfUkxfUENSRUwsCisrCisrLyogSVEyMDAwIFJlbG9jYXRpb25zLiAgKi8KKysgIEJGRF9SRUxPQ19JUTIwMDBfT0ZGU0VUXzE2LAorKyAgQkZEX1JFTE9DX0lRMjAwMF9PRkZTRVRfMjEsCisrICBCRkRfUkVMT0NfSVEyMDAwX1VISTE2LAorKworKy8qIFNwZWNpYWwgWHRlbnNhIHJlbG9jYXRpb24gdXNlZCBvbmx5IGJ5IFBMVCBlbnRyaWVzIGluIEVMRiBzaGFyZWQKKytvYmplY3RzIHRvIGluZGljYXRlIHRoYXQgdGhlIHJ1bnRpbWUgbGlua2VyIHNob3VsZCBzZXQgdGhlIHZhbHVlCisrdG8gb25lIG9mIGl0cyBvd24gaW50ZXJuYWwgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcy4gICovCisrICBCRkRfUkVMT0NfWFRFTlNBX1JUTEQsCisrCisrLyogWHRlbnNhIHJlbG9jYXRpb25zIGZvciBFTEYgc2hhcmVkIG9iamVjdHMuICAqLworKyAgQkZEX1JFTE9DX1hURU5TQV9HTE9CX0RBVCwKKysgIEJGRF9SRUxPQ19YVEVOU0FfSk1QX1NMT1QsCisrICBCRkRfUkVMT0NfWFRFTlNBX1JFTEFUSVZFLAorKworKy8qIFh0ZW5zYSByZWxvY2F0aW9uIHVzZWQgaW4gRUxGIG9iamVjdCBmaWxlcyBmb3Igc3ltYm9scyB0aGF0IG1heSByZXF1aXJlCisrUExUIGVudHJpZXMuICBPdGhlcndpc2UsIHRoaXMgaXMganVzdCBhIGdlbmVyaWMgMzItYml0IHJlbG9jYXRpb24uICAqLworKyAgQkZEX1JFTE9DX1hURU5TQV9QTFQsCisrCisrLyogWHRlbnNhIHJlbG9jYXRpb25zIHRvIG1hcmsgdGhlIGRpZmZlcmVuY2Ugb2YgdHdvIGxvY2FsIHN5bWJvbHMuCisrVGhlc2UgYXJlIG9ubHkgbmVlZGVkIHRvIHN1cHBvcnQgbGlua2VyIHJlbGF4YXRpb24gYW5kIGNhbiBiZSBpZ25vcmVkCisrd2hlbiBub3QgcmVsYXhpbmcuICBUaGUgZmllbGQgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUgZGlmZmVyZW5jZQorK2Fzc3VtaW5nIG5vIHJlbGF4YXRpb24uICBUaGUgcmVsb2NhdGlvbiBlbmNvZGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUKKytmaXJzdCBzeW1ib2wgc28gdGhlIGxpbmtlciBjYW4gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gYWRqdXN0IHRoZSBmaWVsZAorK3ZhbHVlLiAgKi8KKysgIEJGRF9SRUxPQ19YVEVOU0FfRElGRjgsCisrICBCRkRfUkVMT0NfWFRFTlNBX0RJRkYxNiwKKysgIEJGRF9SRUxPQ19YVEVOU0FfRElGRjMyLAorKworKy8qIEdlbmVyaWMgWHRlbnNhIHJlbG9jYXRpb25zIGZvciBpbnN0cnVjdGlvbiBvcGVyYW5kcy4gIE9ubHkgdGhlIHNsb3QKKytudW1iZXIgaXMgZW5jb2RlZCBpbiB0aGUgcmVsb2NhdGlvbi4gIFRoZSByZWxvY2F0aW9uIGFwcGxpZXMgdG8gdGhlCisrbGFzdCBQQy1yZWxhdGl2ZSBpbW1lZGlhdGUgb3BlcmFuZCwgb3IgaWYgdGhlcmUgYXJlIG5vIFBDLXJlbGF0aXZlCisraW1tZWRpYXRlcywgdG8gdGhlIGxhc3QgaW1tZWRpYXRlIG9wZXJhbmQuICAqLworKyAgQkZEX1JFTE9DX1hURU5TQV9TTE9UMF9PUCwKKysgIEJGRF9SRUxPQ19YVEVOU0FfU0xPVDFfT1AsCisrICBCRkRfUkVMT0NfWFRFTlNBX1NMT1QyX09QLAorKyAgQkZEX1JFTE9DX1hURU5TQV9TTE9UM19PUCwKKysgIEJGRF9SRUxPQ19YVEVOU0FfU0xPVDRfT1AsCisrICBCRkRfUkVMT0NfWFRFTlNBX1NMT1Q1X09QLAorKyAgQkZEX1JFTE9DX1hURU5TQV9TTE9UNl9PUCwKKysgIEJGRF9SRUxPQ19YVEVOU0FfU0xPVDdfT1AsCisrICBCRkRfUkVMT0NfWFRFTlNBX1NMT1Q4X09QLAorKyAgQkZEX1JFTE9DX1hURU5TQV9TTE9UOV9PUCwKKysgIEJGRF9SRUxPQ19YVEVOU0FfU0xPVDEwX09QLAorKyAgQkZEX1JFTE9DX1hURU5TQV9TTE9UMTFfT1AsCisrICBCRkRfUkVMT0NfWFRFTlNBX1NMT1QxMl9PUCwKKysgIEJGRF9SRUxPQ19YVEVOU0FfU0xPVDEzX09QLAorKyAgQkZEX1JFTE9DX1hURU5TQV9TTE9UMTRfT1AsCisrCisrLyogQWx0ZXJuYXRlIFh0ZW5zYSByZWxvY2F0aW9ucy4gIE9ubHkgdGhlIHNsb3QgaXMgZW5jb2RlZCBpbiB0aGUKKytyZWxvY2F0aW9uLiAgVGhlIG1lYW5pbmcgb2YgdGhlc2UgcmVsb2NhdGlvbnMgaXMgb3Bjb2RlLXNwZWNpZmljLiAgKi8KKysgIEJGRF9SRUxPQ19YVEVOU0FfU0xPVDBfQUxULAorKyAgQkZEX1JFTE9DX1hURU5TQV9TTE9UMV9BTFQsCisrICBCRkRfUkVMT0NfWFRFTlNBX1NMT1QyX0FMVCwKKysgIEJGRF9SRUxPQ19YVEVOU0FfU0xPVDNfQUxULAorKyAgQkZEX1JFTE9DX1hURU5TQV9TTE9UNF9BTFQsCisrICBCRkRfUkVMT0NfWFRFTlNBX1NMT1Q1X0FMVCwKKysgIEJGRF9SRUxPQ19YVEVOU0FfU0xPVDZfQUxULAorKyAgQkZEX1JFTE9DX1hURU5TQV9TTE9UN19BTFQsCisrICBCRkRfUkVMT0NfWFRFTlNBX1NMT1Q4X0FMVCwKKysgIEJGRF9SRUxPQ19YVEVOU0FfU0xPVDlfQUxULAorKyAgQkZEX1JFTE9DX1hURU5TQV9TTE9UMTBfQUxULAorKyAgQkZEX1JFTE9DX1hURU5TQV9TTE9UMTFfQUxULAorKyAgQkZEX1JFTE9DX1hURU5TQV9TTE9UMTJfQUxULAorKyAgQkZEX1JFTE9DX1hURU5TQV9TTE9UMTNfQUxULAorKyAgQkZEX1JFTE9DX1hURU5TQV9TTE9UMTRfQUxULAorKworKy8qIFh0ZW5zYSByZWxvY2F0aW9ucyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gIFRoZXNlIGhhdmUgYWxsIGJlZW4KKytyZXBsYWNlZCBieSBCRkRfUkVMT0NfWFRFTlNBX1NMT1QwX09QLiAgKi8KKysgIEJGRF9SRUxPQ19YVEVOU0FfT1AwLAorKyAgQkZEX1JFTE9DX1hURU5TQV9PUDEsCisrICBCRkRfUkVMT0NfWFRFTlNBX09QMiwKKysKKysvKiBYdGVuc2EgcmVsb2NhdGlvbiB0byBtYXJrIHRoYXQgdGhlIGFzc2VtYmxlciBleHBhbmRlZCB0aGUKKytpbnN0cnVjdGlvbnMgZnJvbSBhbiBvcmlnaW5hbCB0YXJnZXQuICBUaGUgZXhwYW5zaW9uIHNpemUgaXMKKytlbmNvZGVkIGluIHRoZSByZWxvYyBzaXplLiAgKi8KKysgIEJGRF9SRUxPQ19YVEVOU0FfQVNNX0VYUEFORCwKKysKKysvKiBYdGVuc2EgcmVsb2NhdGlvbiB0byBtYXJrIHRoYXQgdGhlIGxpbmtlciBzaG91bGQgc2ltcGxpZnkKKythc3NlbWJsZXItZXhwYW5kZWQgaW5zdHJ1Y3Rpb25zLiAgVGhpcyBpcyBjb21tb25seSB1c2VkCisraW50ZXJuYWxseSBieSB0aGUgbGlua2VyIGFmdGVyIGFuYWx5c2lzIG9mIGEKKytCRkRfUkVMT0NfWFRFTlNBX0FTTV9FWFBBTkQuICAqLworKyAgQkZEX1JFTE9DX1hURU5TQV9BU01fU0lNUExJRlksCisrCisrLyogOCBiaXQgc2lnbmVkIG9mZnNldCBpbiAoaXgrZCkgb3IgKGl5K2QpLiAgKi8KKysgIEJGRF9SRUxPQ19aODBfRElTUDgsCisrCisrLyogREpOWiBvZmZzZXQuICAqLworKyAgQkZEX1JFTE9DX1o4S19ESVNQNywKKysKKysvKiBDQUxSIG9mZnNldC4gICovCisrICBCRkRfUkVMT0NfWjhLX0NBTExSLAorKworKy8qIDQgYml0IHZhbHVlLiAgKi8KKysgIEJGRF9SRUxPQ19aOEtfSU1NNEwsCisrICBCRkRfUkVMT0NfVU5VU0VEIH07CisrdHlwZWRlZiBlbnVtIGJmZF9yZWxvY19jb2RlX3JlYWwgYmZkX3JlbG9jX2NvZGVfcmVhbF90eXBlOworK3JlbG9jX2hvd3RvX3R5cGUgKmJmZF9yZWxvY190eXBlX2xvb2t1cAorKyAgIChiZmQgKmFiZmQsIGJmZF9yZWxvY19jb2RlX3JlYWxfdHlwZSBjb2RlKTsKKytyZWxvY19ob3d0b190eXBlICpiZmRfcmVsb2NfbmFtZV9sb29rdXAKKysgICAoYmZkICphYmZkLCBjb25zdCBjaGFyICpyZWxvY19uYW1lKTsKKysKKytjb25zdCBjaGFyICpiZmRfZ2V0X3JlbG9jX2NvZGVfbmFtZSAoYmZkX3JlbG9jX2NvZGVfcmVhbF90eXBlIGNvZGUpOworKworKy8qIEV4dHJhY3RlZCBmcm9tIHN5bXMuYy4gICovCisrCisrdHlwZWRlZiBzdHJ1Y3QgYmZkX3N5bWJvbAorK3sKKysgIC8qIEEgcG9pbnRlciB0byB0aGUgQkZEIHdoaWNoIG93bnMgdGhlIHN5bWJvbC4gVGhpcyBpbmZvcm1hdGlvbgorKyAgICAgaXMgbmVjZXNzYXJ5IHNvIHRoYXQgYSBiYWNrIGVuZCBjYW4gd29yayBvdXQgd2hhdCBhZGRpdGlvbmFsCisrICAgICBpbmZvcm1hdGlvbiAoaW52aXNpYmxlIHRvIHRoZSBhcHBsaWNhdGlvbiB3cml0ZXIpIGlzIGNhcnJpZWQKKysgICAgIHdpdGggdGhlIHN5bWJvbC4KKysKKysgICAgIFRoaXMgZmllbGQgaXMgKmFsbW9zdCogcmVkdW5kYW50LCBzaW5jZSB5b3UgY2FuIHVzZSBzZWN0aW9uLT5vd25lcgorKyAgICAgaW5zdGVhZCwgZXhjZXB0IHRoYXQgc29tZSBzeW1ib2xzIHBvaW50IHRvIHRoZSBnbG9iYWwgc2VjdGlvbnMKKysgICAgIGJmZF97YWJzLGNvbSx1bmR9X3NlY3Rpb24uICBUaGlzIGNvdWxkIGJlIGZpeGVkIGJ5IG1ha2luZworKyAgICAgdGhlc2UgZ2xvYmFscyBiZSBwZXItYmZkIChvciBwZXItdGFyZ2V0LWZsYXZvcikuICBGSVhNRS4gICovCisrICBzdHJ1Y3QgYmZkICp0aGVfYmZkOyAvKiBVc2UgYmZkX2FzeW1ib2xfYmZkKHN5bSkgdG8gYWNjZXNzIHRoaXMgZmllbGQuICAqLworKworKyAgLyogVGhlIHRleHQgb2YgdGhlIHN5bWJvbC4gVGhlIG5hbWUgaXMgbGVmdCBhbG9uZSwgYW5kIG5vdCBjb3BpZWQ7IHRoZQorKyAgICAgYXBwbGljYXRpb24gbWF5IG5vdCBhbHRlciBpdC4gICovCisrICBjb25zdCBjaGFyICpuYW1lOworKworKyAgLyogVGhlIHZhbHVlIG9mIHRoZSBzeW1ib2wuICBUaGlzIHJlYWxseSBzaG91bGQgYmUgYSB1bmlvbiBvZiBhCisrICAgICBudW1lcmljIHZhbHVlIHdpdGggYSBwb2ludGVyLCBzaW5jZSBzb21lIGZsYWdzIGluZGljYXRlIHRoYXQKKysgICAgIGEgcG9pbnRlciB0byBhbm90aGVyIHN5bWJvbCBpcyBzdG9yZWQgaGVyZS4gICovCisrICBzeW12YWx1ZSB2YWx1ZTsKKysKKysgIC8qIEF0dHJpYnV0ZXMgb2YgYSBzeW1ib2wuICAqLworKyNkZWZpbmUgQlNGX05PX0ZMQUdTICAgIDB4MDAKKysKKysgIC8qIFRoZSBzeW1ib2wgaGFzIGxvY2FsIHNjb3BlOyA8PHN0YXRpYz4+IGluIDw8Qz4+LiBUaGUgdmFsdWUKKysgICAgIGlzIHRoZSBvZmZzZXQgaW50byB0aGUgc2VjdGlvbiBvZiB0aGUgZGF0YS4gICovCisrI2RlZmluZSBCU0ZfTE9DQUwgICAgICAweDAxCisrCisrICAvKiBUaGUgc3ltYm9sIGhhcyBnbG9iYWwgc2NvcGU7IGluaXRpYWxpemVkIGRhdGEgaW4gPDxDPj4uIFRoZQorKyAgICAgdmFsdWUgaXMgdGhlIG9mZnNldCBpbnRvIHRoZSBzZWN0aW9uIG9mIHRoZSBkYXRhLiAgKi8KKysjZGVmaW5lIEJTRl9HTE9CQUwgICAgIDB4MDIKKysKKysgIC8qIFRoZSBzeW1ib2wgaGFzIGdsb2JhbCBzY29wZSBhbmQgaXMgZXhwb3J0ZWQuIFRoZSB2YWx1ZSBpcworKyAgICAgdGhlIG9mZnNldCBpbnRvIHRoZSBzZWN0aW9uIG9mIHRoZSBkYXRhLiAgKi8KKysjZGVmaW5lIEJTRl9FWFBPUlQgICAgIEJTRl9HTE9CQUwgLyogTm8gcmVhbCBkaWZmZXJlbmNlLiAgKi8KKysKKysgIC8qIEEgbm9ybWFsIEMgc3ltYm9sIHdvdWxkIGJlIG9uZSBvZjoKKysgICAgIDw8QlNGX0xPQ0FMPj4sIDw8QlNGX0ZPUlRfQ09NTT4+LCAgPDxCU0ZfVU5ERUZJTkVEPj4gb3IKKysgICAgIDw8QlNGX0dMT0JBTD4+LiAgKi8KKysKKysgIC8qIFRoZSBzeW1ib2wgaXMgYSBkZWJ1Z2dpbmcgcmVjb3JkLiBUaGUgdmFsdWUgaGFzIGFuIGFyYml0cmFyeQorKyAgICAgbWVhbmluZywgdW5sZXNzIEJTRl9ERUJVR0dJTkdfUkVMT0MgaXMgYWxzbyBzZXQuICAqLworKyNkZWZpbmUgQlNGX0RFQlVHR0lORyAgMHgwOAorKworKyAgLyogVGhlIHN5bWJvbCBkZW5vdGVzIGEgZnVuY3Rpb24gZW50cnkgcG9pbnQuICBVc2VkIGluIEVMRiwKKysgICAgIHBlcmhhcHMgb3RoZXJzIHNvbWVkYXkuICAqLworKyNkZWZpbmUgQlNGX0ZVTkNUSU9OICAgIDB4MTAKKysKKysgIC8qIFVzZWQgYnkgdGhlIGxpbmtlci4gICovCisrI2RlZmluZSBCU0ZfS0VFUCAgICAgICAgMHgyMAorKyNkZWZpbmUgQlNGX0tFRVBfRyAgICAgIDB4NDAKKysKKysgIC8qIEEgd2VhayBnbG9iYWwgc3ltYm9sLCBvdmVycmlkYWJsZSB3aXRob3V0IHdhcm5pbmdzIGJ5CisrICAgICBhIHJlZ3VsYXIgZ2xvYmFsIHN5bWJvbCBvZiB0aGUgc2FtZSBuYW1lLiAgKi8KKysjZGVmaW5lIEJTRl9XRUFLICAgICAgICAweDgwCisrCisrICAvKiBUaGlzIHN5bWJvbCB3YXMgY3JlYXRlZCB0byBwb2ludCB0byBhIHNlY3Rpb24sIGUuZy4gRUxGJ3MKKysgICAgIFNUVF9TRUNUSU9OIHN5bWJvbHMuICAqLworKyNkZWZpbmUgQlNGX1NFQ1RJT05fU1lNIDB4MTAwCisrCisrICAvKiBUaGUgc3ltYm9sIHVzZWQgdG8gYmUgYSBjb21tb24gc3ltYm9sLCBidXQgbm93IGl0IGlzCisrICAgICBhbGxvY2F0ZWQuICAqLworKyNkZWZpbmUgQlNGX09MRF9DT01NT04gIDB4MjAwCisrCisrICAvKiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgY29tbW9uIGRhdGEuICAqLworKyNkZWZpbmUgQkZEX0ZPUlRfQ09NTV9ERUZBVUxUX1ZBTFVFIDAKKysKKysgIC8qIEluIHNvbWUgZmlsZXMgdGhlIHR5cGUgb2YgYSBzeW1ib2wgc29tZXRpbWVzIGFsdGVycyBpdHMKKysgICAgIGxvY2F0aW9uIGluIGFuIG91dHB1dCBmaWxlIC0gaWUgaW4gY29mZiBhIDw8SVNGQ04+PiBzeW1ib2wKKysgICAgIHdoaWNoIGlzIGFsc28gPDxDX0VYVD4+IHN5bWJvbCBhcHBlYXJzIHdoZXJlIGl0IHdhcworKyAgICAgZGVjbGFyZWQgYW5kIG5vdCBhdCB0aGUgZW5kIG9mIGEgc2VjdGlvbi4gIFRoaXMgYml0IGlzIHNldAorKyAgICAgYnkgdGhlIHRhcmdldCBCRkQgcGFydCB0byBjb252ZXkgdGhpcyBpbmZvcm1hdGlvbi4gICovCisrI2RlZmluZSBCU0ZfTk9UX0FUX0VORCAgICAweDQwMAorKworKyAgLyogU2lnbmFsIHRoYXQgdGhlIHN5bWJvbCBpcyB0aGUgbGFiZWwgb2YgY29uc3RydWN0b3Igc2VjdGlvbi4gICovCisrI2RlZmluZSBCU0ZfQ09OU1RSVUNUT1IgICAweDgwMAorKworKyAgLyogU2lnbmFsIHRoYXQgdGhlIHN5bWJvbCBpcyBhIHdhcm5pbmcgc3ltYm9sLiAgVGhlIG5hbWUgaXMgYQorKyAgICAgd2FybmluZy4gIFRoZSBuYW1lIG9mIHRoZSBuZXh0IHN5bWJvbCBpcyB0aGUgb25lIHRvIHdhcm4gYWJvdXQ7CisrICAgICBpZiBhIHJlZmVyZW5jZSBpcyBtYWRlIHRvIGEgc3ltYm9sIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgbmV4dAorKyAgICAgc3ltYm9sLCBhIHdhcm5pbmcgaXMgaXNzdWVkIGJ5IHRoZSBsaW5rZXIuICAqLworKyNkZWZpbmUgQlNGX1dBUk5JTkcgICAgICAgMHgxMDAwCisrCisrICAvKiBTaWduYWwgdGhhdCB0aGUgc3ltYm9sIGlzIGluZGlyZWN0LiAgVGhpcyBzeW1ib2wgaXMgYW4gaW5kaXJlY3QKKysgICAgIHBvaW50ZXIgdG8gdGhlIHN5bWJvbCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIG5leHQgc3ltYm9sLiAgKi8KKysjZGVmaW5lIEJTRl9JTkRJUkVDVCAgICAgIDB4MjAwMAorKworKyAgLyogQlNGX0ZJTEUgbWFya3Mgc3ltYm9scyB0aGF0IGNvbnRhaW4gYSBmaWxlIG5hbWUuICBUaGlzIGlzIHVzZWQKKysgICAgIGZvciBFTEYgU1RUX0ZJTEUgc3ltYm9scy4gICovCisrI2RlZmluZSBCU0ZfRklMRSAgICAgICAgICAweDQwMDAKKysKKysgIC8qIFN5bWJvbCBpcyBmcm9tIGR5bmFtaWMgbGlua2luZyBpbmZvcm1hdGlvbi4gICovCisrI2RlZmluZSBCU0ZfRFlOQU1JQyAgICAgICAweDgwMDAKKysKKysgIC8qIFRoZSBzeW1ib2wgZGVub3RlcyBhIGRhdGEgb2JqZWN0LiAgVXNlZCBpbiBFTEYsIGFuZCBwZXJoYXBzCisrICAgICBvdGhlcnMgc29tZWRheS4gICovCisrI2RlZmluZSBCU0ZfT0JKRUNUICAgICAgICAweDEwMDAwCisrCisrICAvKiBUaGlzIHN5bWJvbCBpcyBhIGRlYnVnZ2luZyBzeW1ib2wuICBUaGUgdmFsdWUgaXMgdGhlIG9mZnNldAorKyAgICAgaW50byB0aGUgc2VjdGlvbiBvZiB0aGUgZGF0YS4gIEJTRl9ERUJVR0dJTkcgc2hvdWxkIGJlIHNldAorKyAgICAgYXMgd2VsbC4gICovCisrI2RlZmluZSBCU0ZfREVCVUdHSU5HX1JFTE9DIDB4MjAwMDAKKysKKysgIC8qIFRoaXMgc3ltYm9sIGlzIHRocmVhZCBsb2NhbC4gIFVzZWQgaW4gRUxGLiAgKi8KKysjZGVmaW5lIEJTRl9USFJFQURfTE9DQUwgIDB4NDAwMDAKKysKKysgIC8qIFRoaXMgc3ltYm9sIHJlcHJlc2VudHMgYSBjb21wbGV4IHJlbG9jYXRpb24gZXhwcmVzc2lvbiwKKysgICAgIHdpdGggdGhlIGV4cHJlc3Npb24gdHJlZSBzZXJpYWxpemVkIGluIHRoZSBzeW1ib2wgbmFtZS4gICovCisrI2RlZmluZSBCU0ZfUkVMQyAweDgwMDAwCisrCisrICAvKiBUaGlzIHN5bWJvbCByZXByZXNlbnRzIGEgc2lnbmVkIGNvbXBsZXggcmVsb2NhdGlvbiBleHByZXNzaW9uLAorKyAgICAgd2l0aCB0aGUgZXhwcmVzc2lvbiB0cmVlIHNlcmlhbGl6ZWQgaW4gdGhlIHN5bWJvbCBuYW1lLiAgKi8KKysjZGVmaW5lIEJTRl9TUkVMQyAweDEwMDAwMAorKworKyAgZmxhZ3dvcmQgZmxhZ3M7CisrCisrICAvKiBBIHBvaW50ZXIgdG8gdGhlIHNlY3Rpb24gdG8gd2hpY2ggdGhpcyBzeW1ib2wgaXMKKysgICAgIHJlbGF0aXZlLiAgVGhpcyB3aWxsIGFsd2F5cyBiZSBub24gTlVMTCwgdGhlcmUgYXJlIHNwZWNpYWwKKysgICAgIHNlY3Rpb25zIGZvciB1bmRlZmluZWQgYW5kIGFic29sdXRlIHN5bWJvbHMuICAqLworKyAgc3RydWN0IGJmZF9zZWN0aW9uICpzZWN0aW9uOworKworKyAgLyogQmFjayBlbmQgc3BlY2lhbCBkYXRhLiAgKi8KKysgIHVuaW9uCisrICAgIHsKKysgICAgICB2b2lkICpwOworKyAgICAgIGJmZF92bWEgaTsKKysgICAgfQorKyAgdWRhdGE7CisrfQorK2FzeW1ib2w7CisrCisrI2RlZmluZSBiZmRfZ2V0X3N5bXRhYl91cHBlcl9ib3VuZChhYmZkKSBcCisrICAgICBCRkRfU0VORCAoYWJmZCwgX2JmZF9nZXRfc3ltdGFiX3VwcGVyX2JvdW5kLCAoYWJmZCkpCisrCisrYmZkX2Jvb2xlYW4gYmZkX2lzX2xvY2FsX2xhYmVsIChiZmQgKmFiZmQsIGFzeW1ib2wgKnN5bSk7CisrCisrYmZkX2Jvb2xlYW4gYmZkX2lzX2xvY2FsX2xhYmVsX25hbWUgKGJmZCAqYWJmZCwgY29uc3QgY2hhciAqbmFtZSk7CisrCisrI2RlZmluZSBiZmRfaXNfbG9jYWxfbGFiZWxfbmFtZShhYmZkLCBuYW1lKSBcCisrICBCRkRfU0VORCAoYWJmZCwgX2JmZF9pc19sb2NhbF9sYWJlbF9uYW1lLCAoYWJmZCwgbmFtZSkpCisrCisrYmZkX2Jvb2xlYW4gYmZkX2lzX3RhcmdldF9zcGVjaWFsX3N5bWJvbCAoYmZkICphYmZkLCBhc3ltYm9sICpzeW0pOworKworKyNkZWZpbmUgYmZkX2lzX3RhcmdldF9zcGVjaWFsX3N5bWJvbChhYmZkLCBzeW0pIFwKKysgIEJGRF9TRU5EIChhYmZkLCBfYmZkX2lzX3RhcmdldF9zcGVjaWFsX3N5bWJvbCwgKGFiZmQsIHN5bSkpCisrCisrI2RlZmluZSBiZmRfY2Fub25pY2FsaXplX3N5bXRhYihhYmZkLCBsb2NhdGlvbikgXAorKyAgQkZEX1NFTkQgKGFiZmQsIF9iZmRfY2Fub25pY2FsaXplX3N5bXRhYiwgKGFiZmQsIGxvY2F0aW9uKSkKKysKKytiZmRfYm9vbGVhbiBiZmRfc2V0X3N5bXRhYgorKyAgIChiZmQgKmFiZmQsIGFzeW1ib2wgKipsb2NhdGlvbiwgdW5zaWduZWQgaW50IGNvdW50KTsKKysKKyt2b2lkIGJmZF9wcmludF9zeW1ib2xfdmFuZGYgKGJmZCAqYWJmZCwgdm9pZCAqZmlsZSwgYXN5bWJvbCAqc3ltYm9sKTsKKysKKysjZGVmaW5lIGJmZF9tYWtlX2VtcHR5X3N5bWJvbChhYmZkKSBcCisrICBCRkRfU0VORCAoYWJmZCwgX2JmZF9tYWtlX2VtcHR5X3N5bWJvbCwgKGFiZmQpKQorKworK2FzeW1ib2wgKl9iZmRfZ2VuZXJpY19tYWtlX2VtcHR5X3N5bWJvbCAoYmZkICopOworKworKyNkZWZpbmUgYmZkX21ha2VfZGVidWdfc3ltYm9sKGFiZmQscHRyLHNpemUpIFwKKysgIEJGRF9TRU5EIChhYmZkLCBfYmZkX21ha2VfZGVidWdfc3ltYm9sLCAoYWJmZCwgcHRyLCBzaXplKSkKKysKKytpbnQgYmZkX2RlY29kZV9zeW1jbGFzcyAoYXN5bWJvbCAqc3ltYm9sKTsKKysKKytiZmRfYm9vbGVhbiBiZmRfaXNfdW5kZWZpbmVkX3N5bWNsYXNzIChpbnQgc3ltY2xhc3MpOworKworK3ZvaWQgYmZkX3N5bWJvbF9pbmZvIChhc3ltYm9sICpzeW1ib2wsIHN5bWJvbF9pbmZvICpyZXQpOworKworK2JmZF9ib29sZWFuIGJmZF9jb3B5X3ByaXZhdGVfc3ltYm9sX2RhdGEKKysgICAoYmZkICppYmZkLCBhc3ltYm9sICppc3ltLCBiZmQgKm9iZmQsIGFzeW1ib2wgKm9zeW0pOworKworKyNkZWZpbmUgYmZkX2NvcHlfcHJpdmF0ZV9zeW1ib2xfZGF0YShpYmZkLCBpc3ltYm9sLCBvYmZkLCBvc3ltYm9sKSBcCisrICBCRkRfU0VORCAob2JmZCwgX2JmZF9jb3B5X3ByaXZhdGVfc3ltYm9sX2RhdGEsIFwKKysgICAgICAgICAgICAoaWJmZCwgaXN5bWJvbCwgb2JmZCwgb3N5bWJvbCkpCisrCisrLyogRXh0cmFjdGVkIGZyb20gYmZkLmMuICAqLworK3N0cnVjdCBiZmQKKyt7CisrICAvKiBBIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBCRkQgICovCisrICB1bnNpZ25lZCBpbnQgaWQ7CisrCisrICAvKiBUaGUgZmlsZW5hbWUgdGhlIGFwcGxpY2F0aW9uIG9wZW5lZCB0aGUgQkZEIHdpdGguICAqLworKyAgY29uc3QgY2hhciAqZmlsZW5hbWU7CisrCisrICAvKiBBIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBqdW1wIHRhYmxlLiAgKi8KKysgIGNvbnN0IHN0cnVjdCBiZmRfdGFyZ2V0ICp4dmVjOworKworKyAgLyogVGhlIElPU1RSRUFNLCBhbmQgY29ycmVzcG9uZGluZyBJTyB2ZWN0b3IgdGhhdCBwcm92aWRlIGFjY2VzcworKyAgICAgdG8gdGhlIGZpbGUgYmFja2luZyB0aGUgQkZELiAgKi8KKysgIHZvaWQgKmlvc3RyZWFtOworKyAgY29uc3Qgc3RydWN0IGJmZF9pb3ZlYyAqaW92ZWM7CisrCisrICAvKiBJcyB0aGUgZmlsZSBkZXNjcmlwdG9yIGJlaW5nIGNhY2hlZD8gIFRoYXQgaXMsIGNhbiBpdCBiZSBjbG9zZWQgYXMKKysgICAgIG5lZWRlZCwgYW5kIHJlLW9wZW5lZCB3aGVuIGFjY2Vzc2VkIGxhdGVyPyAgKi8KKysgIGJmZF9ib29sZWFuIGNhY2hlYWJsZTsKKysKKysgIC8qIE1hcmtzIHdoZXRoZXIgdGhlcmUgd2FzIGEgZGVmYXVsdCB0YXJnZXQgc3BlY2lmaWVkIHdoZW4gdGhlCisrICAgICBCRkQgd2FzIG9wZW5lZC4gVGhpcyBpcyB1c2VkIHRvIHNlbGVjdCB3aGljaCBtYXRjaGluZyBhbGdvcml0aG0KKysgICAgIHRvIHVzZSB0byBjaG9vc2UgdGhlIGJhY2sgZW5kLiAgKi8KKysgIGJmZF9ib29sZWFuIHRhcmdldF9kZWZhdWx0ZWQ7CisrCisrICAvKiBUaGUgY2FjaGluZyByb3V0aW5lcyB1c2UgdGhlc2UgdG8gbWFpbnRhaW4gYQorKyAgICAgbGVhc3QtcmVjZW50bHktdXNlZCBsaXN0IG9mIEJGRHMuICAqLworKyAgc3RydWN0IGJmZCAqbHJ1X3ByZXYsICpscnVfbmV4dDsKKysKKysgIC8qIFdoZW4gYSBmaWxlIGlzIGNsb3NlZCBieSB0aGUgY2FjaGluZyByb3V0aW5lcywgQkZEIHJldGFpbnMKKysgICAgIHN0YXRlIGluZm9ybWF0aW9uIG9uIHRoZSBmaWxlIGhlcmUuLi4gICovCisrICB1ZmlsZV9wdHIgd2hlcmU7CisrCisrICAvKiAuLi4gYW5kIGhlcmU6IChgYG9uY2UnJyBtZWFucyBhdCBsZWFzdCBvbmNlKS4gICovCisrICBiZmRfYm9vbGVhbiBvcGVuZWRfb25jZTsKKysKKysgIC8qIFNldCBpZiB3ZSBoYXZlIGEgbG9jYWxseSBtYWludGFpbmVkIG10aW1lIHZhbHVlLCByYXRoZXIgdGhhbgorKyAgICAgZ2V0dGluZyBpdCBmcm9tIHRoZSBmaWxlIGVhY2ggdGltZS4gICovCisrICBiZmRfYm9vbGVhbiBtdGltZV9zZXQ7CisrCisrICAvKiBGaWxlIG1vZGlmaWVkIHRpbWUsIGlmIG10aW1lX3NldCBpcyBUUlVFLiAgKi8KKysgIGxvbmcgbXRpbWU7CisrCisrICAvKiBSZXNlcnZlZCBmb3IgYW4gdW5pbXBsZW1lbnRlZCBmaWxlIGxvY2tpbmcgZXh0ZW5zaW9uLiAgKi8KKysgIGludCBpZmQ7CisrCisrICAvKiBUaGUgZm9ybWF0IHdoaWNoIGJlbG9uZ3MgdG8gdGhlIEJGRC4gKG9iamVjdCwgY29yZSwgZXRjLikgICovCisrICBiZmRfZm9ybWF0IGZvcm1hdDsKKysKKysgIC8qIFRoZSBkaXJlY3Rpb24gd2l0aCB3aGljaCB0aGUgQkZEIHdhcyBvcGVuZWQuICAqLworKyAgZW51bSBiZmRfZGlyZWN0aW9uCisrICAgIHsKKysgICAgICBub19kaXJlY3Rpb24gPSAwLAorKyAgICAgIHJlYWRfZGlyZWN0aW9uID0gMSwKKysgICAgICB3cml0ZV9kaXJlY3Rpb24gPSAyLAorKyAgICAgIGJvdGhfZGlyZWN0aW9uID0gMworKyAgICB9CisrICBkaXJlY3Rpb247CisrCisrICAvKiBGb3JtYXRfc3BlY2lmaWMgZmxhZ3MuICAqLworKyAgZmxhZ3dvcmQgZmxhZ3M7CisrCisrICAvKiBDdXJyZW50bHkgbXlfYXJjaGl2ZSBpcyB0ZXN0ZWQgYmVmb3JlIGFkZGluZyBvcmlnaW4gdG8KKysgICAgIGFueXRoaW5nLiBJIGJlbGlldmUgdGhhdCB0aGlzIGNhbiBiZWNvbWUgYWx3YXlzIGFuIGFkZCBvZgorKyAgICAgb3JpZ2luLCB3aXRoIG9yaWdpbiBzZXQgdG8gMCBmb3Igbm9uIGFyY2hpdmUgZmlsZXMuICAqLworKyAgdWZpbGVfcHRyIG9yaWdpbjsKKysKKysgIC8qIFJlbWVtYmVyIHdoZW4gb3V0cHV0IGhhcyBiZWd1biwgdG8gc3RvcCBzdHJhbmdlIHRoaW5ncworKyAgICAgZnJvbSBoYXBwZW5pbmcuICAqLworKyAgYmZkX2Jvb2xlYW4gb3V0cHV0X2hhc19iZWd1bjsKKysKKysgIC8qIEEgaGFzaCB0YWJsZSBmb3Igc2VjdGlvbiBuYW1lcy4gICovCisrICBzdHJ1Y3QgYmZkX2hhc2hfdGFibGUgc2VjdGlvbl9odGFiOworKworKyAgLyogUG9pbnRlciB0byBsaW5rZWQgbGlzdCBvZiBzZWN0aW9ucy4gICovCisrICBzdHJ1Y3QgYmZkX3NlY3Rpb24gKnNlY3Rpb25zOworKworKyAgLyogVGhlIGxhc3Qgc2VjdGlvbiBvbiB0aGUgc2VjdGlvbiBsaXN0LiAgKi8KKysgIHN0cnVjdCBiZmRfc2VjdGlvbiAqc2VjdGlvbl9sYXN0OworKworKyAgLyogVGhlIG51bWJlciBvZiBzZWN0aW9ucy4gICovCisrICB1bnNpZ25lZCBpbnQgc2VjdGlvbl9jb3VudDsKKysKKysgIC8qIFN0dWZmIG9ubHkgdXNlZnVsIGZvciBvYmplY3QgZmlsZXM6CisrICAgICBUaGUgc3RhcnQgYWRkcmVzcy4gICovCisrICBiZmRfdm1hIHN0YXJ0X2FkZHJlc3M7CisrCisrICAvKiBVc2VkIGZvciBpbnB1dCBhbmQgb3V0cHV0LiAgKi8KKysgIHVuc2lnbmVkIGludCBzeW1jb3VudDsKKysKKysgIC8qIFN5bWJvbCB0YWJsZSBmb3Igb3V0cHV0IEJGRCAod2l0aCBzeW1jb3VudCBlbnRyaWVzKS4gICovCisrICBzdHJ1Y3QgYmZkX3N5bWJvbCAgKipvdXRzeW1ib2xzOworKworKyAgLyogVXNlZCBmb3Igc2x1cnBlZCBkeW5hbWljIHN5bWJvbCB0YWJsZXMuICAqLworKyAgdW5zaWduZWQgaW50IGR5bnN5bWNvdW50OworKworKyAgLyogUG9pbnRlciB0byBzdHJ1Y3R1cmUgd2hpY2ggY29udGFpbnMgYXJjaGl0ZWN0dXJlIGluZm9ybWF0aW9uLiAgKi8KKysgIGNvbnN0IHN0cnVjdCBiZmRfYXJjaF9pbmZvICphcmNoX2luZm87CisrCisrICAvKiBGbGFnIHNldCBpZiBzeW1ib2xzIGZyb20gdGhpcyBCRkQgc2hvdWxkIG5vdCBiZSBleHBvcnRlZC4gICovCisrICBiZmRfYm9vbGVhbiBub19leHBvcnQ7CisrCisrICAvKiBTdHVmZiBvbmx5IHVzZWZ1bCBmb3IgYXJjaGl2ZXMuICAqLworKyAgdm9pZCAqYXJlbHRfZGF0YTsKKysgIHN0cnVjdCBiZmQgKm15X2FyY2hpdmU7ICAgICAgLyogVGhlIGNvbnRhaW5pbmcgYXJjaGl2ZSBCRkQuICAqLworKyAgc3RydWN0IGJmZCAqYXJjaGl2ZV9uZXh0OyAgICAvKiBUaGUgbmV4dCBCRkQgaW4gdGhlIGFyY2hpdmUuICAqLworKyAgc3RydWN0IGJmZCAqYXJjaGl2ZV9oZWFkOyAgICAvKiBUaGUgZmlyc3QgQkZEIGluIHRoZSBhcmNoaXZlLiAgKi8KKysgIGJmZF9ib29sZWFuIGhhc19hcm1hcDsKKysKKysgIC8qIEEgY2hhaW4gb2YgQkZEIHN0cnVjdHVyZXMgaW52b2x2ZWQgaW4gYSBsaW5rLiAgKi8KKysgIHN0cnVjdCBiZmQgKmxpbmtfbmV4dDsKKysKKysgIC8qIEEgZmllbGQgdXNlZCBieSBfYmZkX2dlbmVyaWNfbGlua19hZGRfYXJjaGl2ZV9zeW1ib2xzLiAgVGhpcyB3aWxsCisrICAgICBiZSB1c2VkIG9ubHkgZm9yIGFyY2hpdmUgZWxlbWVudHMuICAqLworKyAgaW50IGFyY2hpdmVfcGFzczsKKysKKysgIC8qIFVzZWQgYnkgdGhlIGJhY2sgZW5kIHRvIGhvbGQgcHJpdmF0ZSBkYXRhLiAgKi8KKysgIHVuaW9uCisrICAgIHsKKysgICAgICBzdHJ1Y3QgYW91dF9kYXRhX3N0cnVjdCAqYW91dF9kYXRhOworKyAgICAgIHN0cnVjdCBhcnRkYXRhICphb3V0X2FyX2RhdGE7CisrICAgICAgc3RydWN0IF9vYXN5c19kYXRhICpvYXN5c19vYmpfZGF0YTsKKysgICAgICBzdHJ1Y3QgX29hc3lzX2FyX2RhdGEgKm9hc3lzX2FyX2RhdGE7CisrICAgICAgc3RydWN0IGNvZmZfdGRhdGEgKmNvZmZfb2JqX2RhdGE7CisrICAgICAgc3RydWN0IHBlX3RkYXRhICpwZV9vYmpfZGF0YTsKKysgICAgICBzdHJ1Y3QgeGNvZmZfdGRhdGEgKnhjb2ZmX29ial9kYXRhOworKyAgICAgIHN0cnVjdCBlY29mZl90ZGF0YSAqZWNvZmZfb2JqX2RhdGE7CisrICAgICAgc3RydWN0IGllZWVfZGF0YV9zdHJ1Y3QgKmllZWVfZGF0YTsKKysgICAgICBzdHJ1Y3QgaWVlZV9hcl9kYXRhX3N0cnVjdCAqaWVlZV9hcl9kYXRhOworKyAgICAgIHN0cnVjdCBzcmVjX2RhdGFfc3RydWN0ICpzcmVjX2RhdGE7CisrICAgICAgc3RydWN0IGloZXhfZGF0YV9zdHJ1Y3QgKmloZXhfZGF0YTsKKysgICAgICBzdHJ1Y3QgdGVraGV4X2RhdGFfc3RydWN0ICp0ZWtoZXhfZGF0YTsKKysgICAgICBzdHJ1Y3QgZWxmX29ial90ZGF0YSAqZWxmX29ial9kYXRhOworKyAgICAgIHN0cnVjdCBubG1fb2JqX3RkYXRhICpubG1fb2JqX2RhdGE7CisrICAgICAgc3RydWN0IGJvdXRfZGF0YV9zdHJ1Y3QgKmJvdXRfZGF0YTsKKysgICAgICBzdHJ1Y3QgbW1vX2RhdGFfc3RydWN0ICptbW9fZGF0YTsKKysgICAgICBzdHJ1Y3Qgc3VuX2NvcmVfc3RydWN0ICpzdW5fY29yZV9kYXRhOworKyAgICAgIHN0cnVjdCBzY281X2NvcmVfc3RydWN0ICpzY281X2NvcmVfZGF0YTsKKysgICAgICBzdHJ1Y3QgdHJhZF9jb3JlX3N0cnVjdCAqdHJhZF9jb3JlX2RhdGE7CisrICAgICAgc3RydWN0IHNvbV9kYXRhX3N0cnVjdCAqc29tX2RhdGE7CisrICAgICAgc3RydWN0IGhwdXhfY29yZV9zdHJ1Y3QgKmhwdXhfY29yZV9kYXRhOworKyAgICAgIHN0cnVjdCBocHBhYnNkX2NvcmVfc3RydWN0ICpocHBhYnNkX2NvcmVfZGF0YTsKKysgICAgICBzdHJ1Y3Qgc2dpX2NvcmVfc3RydWN0ICpzZ2lfY29yZV9kYXRhOworKyAgICAgIHN0cnVjdCBseW54X2NvcmVfc3RydWN0ICpseW54X2NvcmVfZGF0YTsKKysgICAgICBzdHJ1Y3Qgb3NmX2NvcmVfc3RydWN0ICpvc2ZfY29yZV9kYXRhOworKyAgICAgIHN0cnVjdCBjaXNjb19jb3JlX3N0cnVjdCAqY2lzY29fY29yZV9kYXRhOworKyAgICAgIHN0cnVjdCB2ZXJzYWRvc19kYXRhX3N0cnVjdCAqdmVyc2Fkb3NfZGF0YTsKKysgICAgICBzdHJ1Y3QgbmV0YnNkX2NvcmVfc3RydWN0ICpuZXRic2RfY29yZV9kYXRhOworKyAgICAgIHN0cnVjdCBtYWNoX29fZGF0YV9zdHJ1Y3QgKm1hY2hfb19kYXRhOworKyAgICAgIHN0cnVjdCBtYWNoX29fZmF0X2RhdGFfc3RydWN0ICptYWNoX29fZmF0X2RhdGE7CisrICAgICAgc3RydWN0IGJmZF9wZWZfZGF0YV9zdHJ1Y3QgKnBlZl9kYXRhOworKyAgICAgIHN0cnVjdCBiZmRfcGVmX3hsaWJfZGF0YV9zdHJ1Y3QgKnBlZl94bGliX2RhdGE7CisrICAgICAgc3RydWN0IGJmZF9zeW1fZGF0YV9zdHJ1Y3QgKnN5bV9kYXRhOworKyAgICAgIHZvaWQgKmFueTsKKysgICAgfQorKyAgdGRhdGE7CisrCisrICAvKiBVc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiB0byBob2xkIHByaXZhdGUgZGF0YS4gICovCisrICB2b2lkICp1c3JkYXRhOworKworKyAgLyogV2hlcmUgYWxsIHRoZSBhbGxvY2F0ZWQgc3R1ZmYgdW5kZXIgdGhpcyBCRkQgZ29lcy4gIFRoaXMgaXMgYQorKyAgICAgc3RydWN0IG9iamFsbG9jICosIGJ1dCB3ZSB1c2Ugdm9pZCAqIHRvIGF2b2lkIHJlcXVpcmluZyB0aGUgaW5jbHVzaW9uCisrICAgICBvZiBvYmphbGxvYy5oLiAgKi8KKysgIHZvaWQgKm1lbW9yeTsKKyt9OworKworK3R5cGVkZWYgZW51bSBiZmRfZXJyb3IKKyt7CisrICBiZmRfZXJyb3Jfbm9fZXJyb3IgPSAwLAorKyAgYmZkX2Vycm9yX3N5c3RlbV9jYWxsLAorKyAgYmZkX2Vycm9yX2ludmFsaWRfdGFyZ2V0LAorKyAgYmZkX2Vycm9yX3dyb25nX2Zvcm1hdCwKKysgIGJmZF9lcnJvcl93cm9uZ19vYmplY3RfZm9ybWF0LAorKyAgYmZkX2Vycm9yX2ludmFsaWRfb3BlcmF0aW9uLAorKyAgYmZkX2Vycm9yX25vX21lbW9yeSwKKysgIGJmZF9lcnJvcl9ub19zeW1ib2xzLAorKyAgYmZkX2Vycm9yX25vX2FybWFwLAorKyAgYmZkX2Vycm9yX25vX21vcmVfYXJjaGl2ZWRfZmlsZXMsCisrICBiZmRfZXJyb3JfbWFsZm9ybWVkX2FyY2hpdmUsCisrICBiZmRfZXJyb3JfZmlsZV9ub3RfcmVjb2duaXplZCwKKysgIGJmZF9lcnJvcl9maWxlX2FtYmlndW91c2x5X3JlY29nbml6ZWQsCisrICBiZmRfZXJyb3Jfbm9fY29udGVudHMsCisrICBiZmRfZXJyb3Jfbm9ucmVwcmVzZW50YWJsZV9zZWN0aW9uLAorKyAgYmZkX2Vycm9yX25vX2RlYnVnX3NlY3Rpb24sCisrICBiZmRfZXJyb3JfYmFkX3ZhbHVlLAorKyAgYmZkX2Vycm9yX2ZpbGVfdHJ1bmNhdGVkLAorKyAgYmZkX2Vycm9yX2ZpbGVfdG9vX2JpZywKKysgIGJmZF9lcnJvcl9vbl9pbnB1dCwKKysgIGJmZF9lcnJvcl9pbnZhbGlkX2Vycm9yX2NvZGUKKyt9CisrYmZkX2Vycm9yX3R5cGU7CisrCisrYmZkX2Vycm9yX3R5cGUgYmZkX2dldF9lcnJvciAodm9pZCk7CisrCisrdm9pZCBiZmRfc2V0X2Vycm9yIChiZmRfZXJyb3JfdHlwZSBlcnJvcl90YWcsIC4uLik7CisrCisrY29uc3QgY2hhciAqYmZkX2Vycm1zZyAoYmZkX2Vycm9yX3R5cGUgZXJyb3JfdGFnKTsKKysKKyt2b2lkIGJmZF9wZXJyb3IgKGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworKworK3R5cGVkZWYgdm9pZCAoKmJmZF9lcnJvcl9oYW5kbGVyX3R5cGUpIChjb25zdCBjaGFyICosIC4uLik7CisrCisrYmZkX2Vycm9yX2hhbmRsZXJfdHlwZSBiZmRfc2V0X2Vycm9yX2hhbmRsZXIgKGJmZF9lcnJvcl9oYW5kbGVyX3R5cGUpOworKworK3ZvaWQgYmZkX3NldF9lcnJvcl9wcm9ncmFtX25hbWUgKGNvbnN0IGNoYXIgKik7CisrCisrYmZkX2Vycm9yX2hhbmRsZXJfdHlwZSBiZmRfZ2V0X2Vycm9yX2hhbmRsZXIgKHZvaWQpOworKworK2xvbmcgYmZkX2dldF9yZWxvY191cHBlcl9ib3VuZCAoYmZkICphYmZkLCBhc2VjdGlvbiAqc2VjdCk7CisrCisrbG9uZyBiZmRfY2Fub25pY2FsaXplX3JlbG9jCisrICAgKGJmZCAqYWJmZCwgYXNlY3Rpb24gKnNlYywgYXJlbGVudCAqKmxvYywgYXN5bWJvbCAqKnN5bXMpOworKworK3ZvaWQgYmZkX3NldF9yZWxvYworKyAgIChiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWMsIGFyZWxlbnQgKipyZWwsIHVuc2lnbmVkIGludCBjb3VudCk7CisrCisrYmZkX2Jvb2xlYW4gYmZkX3NldF9maWxlX2ZsYWdzIChiZmQgKmFiZmQsIGZsYWd3b3JkIGZsYWdzKTsKKysKKytpbnQgYmZkX2dldF9hcmNoX3NpemUgKGJmZCAqYWJmZCk7CisrCisraW50IGJmZF9nZXRfc2lnbl9leHRlbmRfdm1hIChiZmQgKmFiZmQpOworKworK2JmZF9ib29sZWFuIGJmZF9zZXRfc3RhcnRfYWRkcmVzcyAoYmZkICphYmZkLCBiZmRfdm1hIHZtYSk7CisrCisrdW5zaWduZWQgaW50IGJmZF9nZXRfZ3Bfc2l6ZSAoYmZkICphYmZkKTsKKysKKyt2b2lkIGJmZF9zZXRfZ3Bfc2l6ZSAoYmZkICphYmZkLCB1bnNpZ25lZCBpbnQgaSk7CisrCisrYmZkX3ZtYSBiZmRfc2Nhbl92bWEgKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqKmVuZCwgaW50IGJhc2UpOworKworK2JmZF9ib29sZWFuIGJmZF9jb3B5X3ByaXZhdGVfaGVhZGVyX2RhdGEgKGJmZCAqaWJmZCwgYmZkICpvYmZkKTsKKysKKysjZGVmaW5lIGJmZF9jb3B5X3ByaXZhdGVfaGVhZGVyX2RhdGEoaWJmZCwgb2JmZCkgXAorKyAgICAgQkZEX1NFTkQgKG9iZmQsIF9iZmRfY29weV9wcml2YXRlX2hlYWRlcl9kYXRhLCBcCisrICAgICAgICAgICAgICAgKGliZmQsIG9iZmQpKQorK2JmZF9ib29sZWFuIGJmZF9jb3B5X3ByaXZhdGVfYmZkX2RhdGEgKGJmZCAqaWJmZCwgYmZkICpvYmZkKTsKKysKKysjZGVmaW5lIGJmZF9jb3B5X3ByaXZhdGVfYmZkX2RhdGEoaWJmZCwgb2JmZCkgXAorKyAgICAgQkZEX1NFTkQgKG9iZmQsIF9iZmRfY29weV9wcml2YXRlX2JmZF9kYXRhLCBcCisrICAgICAgICAgICAgICAgKGliZmQsIG9iZmQpKQorK2JmZF9ib29sZWFuIGJmZF9tZXJnZV9wcml2YXRlX2JmZF9kYXRhIChiZmQgKmliZmQsIGJmZCAqb2JmZCk7CisrCisrI2RlZmluZSBiZmRfbWVyZ2VfcHJpdmF0ZV9iZmRfZGF0YShpYmZkLCBvYmZkKSBcCisrICAgICBCRkRfU0VORCAob2JmZCwgX2JmZF9tZXJnZV9wcml2YXRlX2JmZF9kYXRhLCBcCisrICAgICAgICAgICAgICAgKGliZmQsIG9iZmQpKQorK2JmZF9ib29sZWFuIGJmZF9zZXRfcHJpdmF0ZV9mbGFncyAoYmZkICphYmZkLCBmbGFnd29yZCBmbGFncyk7CisrCisrI2RlZmluZSBiZmRfc2V0X3ByaXZhdGVfZmxhZ3MoYWJmZCwgZmxhZ3MpIFwKKysgICAgIEJGRF9TRU5EIChhYmZkLCBfYmZkX3NldF9wcml2YXRlX2ZsYWdzLCAoYWJmZCwgZmxhZ3MpKQorKyNkZWZpbmUgYmZkX3NpemVvZl9oZWFkZXJzKGFiZmQsIGluZm8pIFwKKysgICAgICAgQkZEX1NFTkQgKGFiZmQsIF9iZmRfc2l6ZW9mX2hlYWRlcnMsIChhYmZkLCBpbmZvKSkKKysKKysjZGVmaW5lIGJmZF9maW5kX25lYXJlc3RfbGluZShhYmZkLCBzZWMsIHN5bXMsIG9mZiwgZmlsZSwgZnVuYywgbGluZSkgXAorKyAgICAgICBCRkRfU0VORCAoYWJmZCwgX2JmZF9maW5kX25lYXJlc3RfbGluZSwgXAorKyAgICAgICAgICAgICAgICAgKGFiZmQsIHNlYywgc3ltcywgb2ZmLCBmaWxlLCBmdW5jLCBsaW5lKSkKKysKKysjZGVmaW5lIGJmZF9maW5kX2xpbmUoYWJmZCwgc3ltcywgc3ltLCBmaWxlLCBsaW5lKSBcCisrICAgICAgIEJGRF9TRU5EIChhYmZkLCBfYmZkX2ZpbmRfbGluZSwgXAorKyAgICAgICAgICAgICAgICAgKGFiZmQsIHN5bXMsIHN5bSwgZmlsZSwgbGluZSkpCisrCisrI2RlZmluZSBiZmRfZmluZF9pbmxpbmVyX2luZm8oYWJmZCwgZmlsZSwgZnVuYywgbGluZSkgXAorKyAgICAgICBCRkRfU0VORCAoYWJmZCwgX2JmZF9maW5kX2lubGluZXJfaW5mbywgXAorKyAgICAgICAgICAgICAgICAgKGFiZmQsIGZpbGUsIGZ1bmMsIGxpbmUpKQorKworKyNkZWZpbmUgYmZkX2RlYnVnX2luZm9fc3RhcnQoYWJmZCkgXAorKyAgICAgICBCRkRfU0VORCAoYWJmZCwgX2JmZF9kZWJ1Z19pbmZvX3N0YXJ0LCAoYWJmZCkpCisrCisrI2RlZmluZSBiZmRfZGVidWdfaW5mb19lbmQoYWJmZCkgXAorKyAgICAgICBCRkRfU0VORCAoYWJmZCwgX2JmZF9kZWJ1Z19pbmZvX2VuZCwgKGFiZmQpKQorKworKyNkZWZpbmUgYmZkX2RlYnVnX2luZm9fYWNjdW11bGF0ZShhYmZkLCBzZWN0aW9uKSBcCisrICAgICAgIEJGRF9TRU5EIChhYmZkLCBfYmZkX2RlYnVnX2luZm9fYWNjdW11bGF0ZSwgKGFiZmQsIHNlY3Rpb24pKQorKworKyNkZWZpbmUgYmZkX3N0YXRfYXJjaF9lbHQoYWJmZCwgc3RhdCkgXAorKyAgICAgICBCRkRfU0VORCAoYWJmZCwgX2JmZF9zdGF0X2FyY2hfZWx0LChhYmZkLCBzdGF0KSkKKysKKysjZGVmaW5lIGJmZF91cGRhdGVfYXJtYXBfdGltZXN0YW1wKGFiZmQpIFwKKysgICAgICAgQkZEX1NFTkQgKGFiZmQsIF9iZmRfdXBkYXRlX2FybWFwX3RpbWVzdGFtcCwgKGFiZmQpKQorKworKyNkZWZpbmUgYmZkX3NldF9hcmNoX21hY2goYWJmZCwgYXJjaCwgbWFjaClcCisrICAgICAgIEJGRF9TRU5EICggYWJmZCwgX2JmZF9zZXRfYXJjaF9tYWNoLCAoYWJmZCwgYXJjaCwgbWFjaCkpCisrCisrI2RlZmluZSBiZmRfcmVsYXhfc2VjdGlvbihhYmZkLCBzZWN0aW9uLCBsaW5rX2luZm8sIGFnYWluKSBcCisrICAgICAgIEJGRF9TRU5EIChhYmZkLCBfYmZkX3JlbGF4X3NlY3Rpb24sIChhYmZkLCBzZWN0aW9uLCBsaW5rX2luZm8sIGFnYWluKSkKKysKKysjZGVmaW5lIGJmZF9nY19zZWN0aW9ucyhhYmZkLCBsaW5rX2luZm8pIFwKKysgICAgICAgQkZEX1NFTkQgKGFiZmQsIF9iZmRfZ2Nfc2VjdGlvbnMsIChhYmZkLCBsaW5rX2luZm8pKQorKworKyNkZWZpbmUgYmZkX21lcmdlX3NlY3Rpb25zKGFiZmQsIGxpbmtfaW5mbykgXAorKyAgICAgICBCRkRfU0VORCAoYWJmZCwgX2JmZF9tZXJnZV9zZWN0aW9ucywgKGFiZmQsIGxpbmtfaW5mbykpCisrCisrI2RlZmluZSBiZmRfaXNfZ3JvdXBfc2VjdGlvbihhYmZkLCBzZWMpIFwKKysgICAgICAgQkZEX1NFTkQgKGFiZmQsIF9iZmRfaXNfZ3JvdXBfc2VjdGlvbiwgKGFiZmQsIHNlYykpCisrCisrI2RlZmluZSBiZmRfZGlzY2FyZF9ncm91cChhYmZkLCBzZWMpIFwKKysgICAgICAgQkZEX1NFTkQgKGFiZmQsIF9iZmRfZGlzY2FyZF9ncm91cCwgKGFiZmQsIHNlYykpCisrCisrI2RlZmluZSBiZmRfbGlua19oYXNoX3RhYmxlX2NyZWF0ZShhYmZkKSBcCisrICAgICAgIEJGRF9TRU5EIChhYmZkLCBfYmZkX2xpbmtfaGFzaF90YWJsZV9jcmVhdGUsIChhYmZkKSkKKysKKysjZGVmaW5lIGJmZF9saW5rX2hhc2hfdGFibGVfZnJlZShhYmZkLCBoYXNoKSBcCisrICAgICAgIEJGRF9TRU5EIChhYmZkLCBfYmZkX2xpbmtfaGFzaF90YWJsZV9mcmVlLCAoaGFzaCkpCisrCisrI2RlZmluZSBiZmRfbGlua19hZGRfc3ltYm9scyhhYmZkLCBpbmZvKSBcCisrICAgICAgIEJGRF9TRU5EIChhYmZkLCBfYmZkX2xpbmtfYWRkX3N5bWJvbHMsIChhYmZkLCBpbmZvKSkKKysKKysjZGVmaW5lIGJmZF9saW5rX2p1c3Rfc3ltcyhhYmZkLCBzZWMsIGluZm8pIFwKKysgICAgICAgQkZEX1NFTkQgKGFiZmQsIF9iZmRfbGlua19qdXN0X3N5bXMsIChzZWMsIGluZm8pKQorKworKyNkZWZpbmUgYmZkX2ZpbmFsX2xpbmsoYWJmZCwgaW5mbykgXAorKyAgICAgICBCRkRfU0VORCAoYWJmZCwgX2JmZF9maW5hbF9saW5rLCAoYWJmZCwgaW5mbykpCisrCisrI2RlZmluZSBiZmRfZnJlZV9jYWNoZWRfaW5mbyhhYmZkKSBcCisrICAgICAgIEJGRF9TRU5EIChhYmZkLCBfYmZkX2ZyZWVfY2FjaGVkX2luZm8sIChhYmZkKSkKKysKKysjZGVmaW5lIGJmZF9nZXRfZHluYW1pY19zeW10YWJfdXBwZXJfYm91bmQoYWJmZCkgXAorKyAgICAgICBCRkRfU0VORCAoYWJmZCwgX2JmZF9nZXRfZHluYW1pY19zeW10YWJfdXBwZXJfYm91bmQsIChhYmZkKSkKKysKKysjZGVmaW5lIGJmZF9wcmludF9wcml2YXRlX2JmZF9kYXRhKGFiZmQsIGZpbGUpXAorKyAgICAgICBCRkRfU0VORCAoYWJmZCwgX2JmZF9wcmludF9wcml2YXRlX2JmZF9kYXRhLCAoYWJmZCwgZmlsZSkpCisrCisrI2RlZmluZSBiZmRfY2Fub25pY2FsaXplX2R5bmFtaWNfc3ltdGFiKGFiZmQsIGFzeW1ib2xzKSBcCisrICAgICAgIEJGRF9TRU5EIChhYmZkLCBfYmZkX2Nhbm9uaWNhbGl6ZV9keW5hbWljX3N5bXRhYiwgKGFiZmQsIGFzeW1ib2xzKSkKKysKKysjZGVmaW5lIGJmZF9nZXRfc3ludGhldGljX3N5bXRhYihhYmZkLCBjb3VudCwgc3ltcywgZHluY291bnQsIGR5bnN5bXMsIHJldCkgXAorKyAgICAgICBCRkRfU0VORCAoYWJmZCwgX2JmZF9nZXRfc3ludGhldGljX3N5bXRhYiwgKGFiZmQsIGNvdW50LCBzeW1zLCBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluY291bnQsIGR5bnN5bXMsIHJldCkpCisrCisrI2RlZmluZSBiZmRfZ2V0X2R5bmFtaWNfcmVsb2NfdXBwZXJfYm91bmQoYWJmZCkgXAorKyAgICAgICBCRkRfU0VORCAoYWJmZCwgX2JmZF9nZXRfZHluYW1pY19yZWxvY191cHBlcl9ib3VuZCwgKGFiZmQpKQorKworKyNkZWZpbmUgYmZkX2Nhbm9uaWNhbGl6ZV9keW5hbWljX3JlbG9jKGFiZmQsIGFyZWxzLCBhc3ltcykgXAorKyAgICAgICBCRkRfU0VORCAoYWJmZCwgX2JmZF9jYW5vbmljYWxpemVfZHluYW1pY19yZWxvYywgKGFiZmQsIGFyZWxzLCBhc3ltcykpCisrCisrZXh0ZXJuIGJmZF9ieXRlICpiZmRfZ2V0X3JlbG9jYXRlZF9zZWN0aW9uX2NvbnRlbnRzCisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIHN0cnVjdCBiZmRfbGlua19vcmRlciAqLCBiZmRfYnl0ZSAqLAorKyAgIGJmZF9ib29sZWFuLCBhc3ltYm9sICoqKTsKKysKKytiZmRfYm9vbGVhbiBiZmRfYWx0X21hY2hfY29kZSAoYmZkICphYmZkLCBpbnQgYWx0ZXJuYXRpdmUpOworKworK3N0cnVjdCBiZmRfcHJlc2VydmUKKyt7CisrICB2b2lkICptYXJrZXI7CisrICB2b2lkICp0ZGF0YTsKKysgIGZsYWd3b3JkIGZsYWdzOworKyAgY29uc3Qgc3RydWN0IGJmZF9hcmNoX2luZm8gKmFyY2hfaW5mbzsKKysgIHN0cnVjdCBiZmRfc2VjdGlvbiAqc2VjdGlvbnM7CisrICBzdHJ1Y3QgYmZkX3NlY3Rpb24gKnNlY3Rpb25fbGFzdDsKKysgIHVuc2lnbmVkIGludCBzZWN0aW9uX2NvdW50OworKyAgc3RydWN0IGJmZF9oYXNoX3RhYmxlIHNlY3Rpb25faHRhYjsKKyt9OworKworK2JmZF9ib29sZWFuIGJmZF9wcmVzZXJ2ZV9zYXZlIChiZmQgKiwgc3RydWN0IGJmZF9wcmVzZXJ2ZSAqKTsKKysKKyt2b2lkIGJmZF9wcmVzZXJ2ZV9yZXN0b3JlIChiZmQgKiwgc3RydWN0IGJmZF9wcmVzZXJ2ZSAqKTsKKysKKyt2b2lkIGJmZF9wcmVzZXJ2ZV9maW5pc2ggKGJmZCAqLCBzdHJ1Y3QgYmZkX3ByZXNlcnZlICopOworKworK2JmZF92bWEgYmZkX2VtdWxfZ2V0X21heHBhZ2VzaXplIChjb25zdCBjaGFyICopOworKworK3ZvaWQgYmZkX2VtdWxfc2V0X21heHBhZ2VzaXplIChjb25zdCBjaGFyICosIGJmZF92bWEpOworKworK2JmZF92bWEgYmZkX2VtdWxfZ2V0X2NvbW1vbnBhZ2VzaXplIChjb25zdCBjaGFyICopOworKworK3ZvaWQgYmZkX2VtdWxfc2V0X2NvbW1vbnBhZ2VzaXplIChjb25zdCBjaGFyICosIGJmZF92bWEpOworKworK2NoYXIgKmJmZF9kZW1hbmdsZSAoYmZkICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKysKKysvKiBFeHRyYWN0ZWQgZnJvbSBhcmNoaXZlLmMuICAqLworK3N5bWluZGV4IGJmZF9nZXRfbmV4dF9tYXBlbnQKKysgICAoYmZkICphYmZkLCBzeW1pbmRleCBwcmV2aW91cywgY2Fyc3ltICoqc3ltKTsKKysKKytiZmRfYm9vbGVhbiBiZmRfc2V0X2FyY2hpdmVfaGVhZCAoYmZkICpvdXRwdXQsIGJmZCAqbmV3X2hlYWQpOworKworK2JmZCAqYmZkX29wZW5yX25leHRfYXJjaGl2ZWRfZmlsZSAoYmZkICphcmNoaXZlLCBiZmQgKnByZXZpb3VzKTsKKysKKysvKiBFeHRyYWN0ZWQgZnJvbSBjb3JlZmlsZS5jLiAgKi8KKytjb25zdCBjaGFyICpiZmRfY29yZV9maWxlX2ZhaWxpbmdfY29tbWFuZCAoYmZkICphYmZkKTsKKysKKytpbnQgYmZkX2NvcmVfZmlsZV9mYWlsaW5nX3NpZ25hbCAoYmZkICphYmZkKTsKKysKKytiZmRfYm9vbGVhbiBjb3JlX2ZpbGVfbWF0Y2hlc19leGVjdXRhYmxlX3AKKysgICAoYmZkICpjb3JlX2JmZCwgYmZkICpleGVjX2JmZCk7CisrCisrYmZkX2Jvb2xlYW4gZ2VuZXJpY19jb3JlX2ZpbGVfbWF0Y2hlc19leGVjdXRhYmxlX3AKKysgICAoYmZkICpjb3JlX2JmZCwgYmZkICpleGVjX2JmZCk7CisrCisrLyogRXh0cmFjdGVkIGZyb20gdGFyZ2V0cy5jLiAgKi8KKysjZGVmaW5lIEJGRF9TRU5EKGJmZCwgbWVzc2FnZSwgYXJnbGlzdCkgXAorKyAgKCgqKChiZmQpLT54dmVjLT5tZXNzYWdlKSkgYXJnbGlzdCkKKysKKysjaWZkZWYgREVCVUdfQkZEX1NFTkQKKysjdW5kZWYgQkZEX1NFTkQKKysjZGVmaW5lIEJGRF9TRU5EKGJmZCwgbWVzc2FnZSwgYXJnbGlzdCkgXAorKyAgKCgoYmZkKSAmJiAoYmZkKS0+eHZlYyAmJiAoYmZkKS0+eHZlYy0+bWVzc2FnZSkgPyBcCisrICAgICgoKigoYmZkKS0+eHZlYy0+bWVzc2FnZSkpIGFyZ2xpc3QpIDogXAorKyAgICAoYmZkX2Fzc2VydCAoX19GSUxFX18sX19MSU5FX18pLCBOVUxMKSkKKysjZW5kaWYKKysjZGVmaW5lIEJGRF9TRU5EX0ZNVChiZmQsIG1lc3NhZ2UsIGFyZ2xpc3QpIFwKKysgICgoKGJmZCktPnh2ZWMtPm1lc3NhZ2VbKGludCkgKChiZmQpLT5mb3JtYXQpXSkgYXJnbGlzdCkKKysKKysjaWZkZWYgREVCVUdfQkZEX1NFTkQKKysjdW5kZWYgQkZEX1NFTkRfRk1UCisrI2RlZmluZSBCRkRfU0VORF9GTVQoYmZkLCBtZXNzYWdlLCBhcmdsaXN0KSBcCisrICAoKChiZmQpICYmIChiZmQpLT54dmVjICYmIChiZmQpLT54dmVjLT5tZXNzYWdlKSA/IFwKKysgICAoKChiZmQpLT54dmVjLT5tZXNzYWdlWyhpbnQpICgoYmZkKS0+Zm9ybWF0KV0pIGFyZ2xpc3QpIDogXAorKyAgIChiZmRfYXNzZXJ0IChfX0ZJTEVfXyxfX0xJTkVfXyksIE5VTEwpKQorKyNlbmRpZgorKworK2VudW0gYmZkX2ZsYXZvdXIKKyt7CisrICBiZmRfdGFyZ2V0X3Vua25vd25fZmxhdm91ciwKKysgIGJmZF90YXJnZXRfYW91dF9mbGF2b3VyLAorKyAgYmZkX3RhcmdldF9jb2ZmX2ZsYXZvdXIsCisrICBiZmRfdGFyZ2V0X2Vjb2ZmX2ZsYXZvdXIsCisrICBiZmRfdGFyZ2V0X3hjb2ZmX2ZsYXZvdXIsCisrICBiZmRfdGFyZ2V0X2VsZl9mbGF2b3VyLAorKyAgYmZkX3RhcmdldF9pZWVlX2ZsYXZvdXIsCisrICBiZmRfdGFyZ2V0X25sbV9mbGF2b3VyLAorKyAgYmZkX3RhcmdldF9vYXN5c19mbGF2b3VyLAorKyAgYmZkX3RhcmdldF90ZWtoZXhfZmxhdm91ciwKKysgIGJmZF90YXJnZXRfc3JlY19mbGF2b3VyLAorKyAgYmZkX3RhcmdldF9paGV4X2ZsYXZvdXIsCisrICBiZmRfdGFyZ2V0X3NvbV9mbGF2b3VyLAorKyAgYmZkX3RhcmdldF9vczlrX2ZsYXZvdXIsCisrICBiZmRfdGFyZ2V0X3ZlcnNhZG9zX2ZsYXZvdXIsCisrICBiZmRfdGFyZ2V0X21zZG9zX2ZsYXZvdXIsCisrICBiZmRfdGFyZ2V0X292YXhfZmxhdm91ciwKKysgIGJmZF90YXJnZXRfZXZheF9mbGF2b3VyLAorKyAgYmZkX3RhcmdldF9tbW9fZmxhdm91ciwKKysgIGJmZF90YXJnZXRfbWFjaF9vX2ZsYXZvdXIsCisrICBiZmRfdGFyZ2V0X3BlZl9mbGF2b3VyLAorKyAgYmZkX3RhcmdldF9wZWZfeGxpYl9mbGF2b3VyLAorKyAgYmZkX3RhcmdldF9zeW1fZmxhdm91cgorK307CisrCisrZW51bSBiZmRfZW5kaWFuIHsgQkZEX0VORElBTl9CSUcsIEJGRF9FTkRJQU5fTElUVExFLCBCRkRfRU5ESUFOX1VOS05PV04gfTsKKysKKysvKiBGb3J3YXJkIGRlY2xhcmF0aW9uLiAgKi8KKyt0eXBlZGVmIHN0cnVjdCBiZmRfbGlua19pbmZvIF9iZmRfbGlua19pbmZvOworKworK3R5cGVkZWYgc3RydWN0IGJmZF90YXJnZXQKKyt7CisrICAvKiBJZGVudGlmaWVzIHRoZSBraW5kIG9mIHRhcmdldCwgZS5nLiwgU3VuT1M0LCBVbHRyaXgsIGV0Yy4gICovCisrICBjaGFyICpuYW1lOworKworKyAvKiBUaGUgImZsYXZvdXIiIG9mIGEgYmFjayBlbmQgaXMgYSBnZW5lcmFsIGluZGljYXRpb24gYWJvdXQKKysgICAgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZS4gICovCisrICBlbnVtIGJmZF9mbGF2b3VyIGZsYXZvdXI7CisrCisrICAvKiBUaGUgb3JkZXIgb2YgYnl0ZXMgd2l0aGluIHRoZSBkYXRhIGFyZWEgb2YgYSBmaWxlLiAgKi8KKysgIGVudW0gYmZkX2VuZGlhbiBieXRlb3JkZXI7CisrCisrIC8qIFRoZSBvcmRlciBvZiBieXRlcyB3aXRoaW4gdGhlIGhlYWRlciBwYXJ0cyBvZiBhIGZpbGUuICAqLworKyAgZW51bSBiZmRfZW5kaWFuIGhlYWRlcl9ieXRlb3JkZXI7CisrCisrICAvKiBBIG1hc2sgb2YgYWxsIHRoZSBmbGFncyB3aGljaCBhbiBleGVjdXRhYmxlIG1heSBoYXZlIHNldCAtCisrICAgICBmcm9tIHRoZSBzZXQgPDxCRkRfTk9fRkxBR1M+PiwgPDxIQVNfUkVMT0M+PiwgLi4uPDxEX1BBR0VEPj4uICAqLworKyAgZmxhZ3dvcmQgb2JqZWN0X2ZsYWdzOworKworKyAvKiBBIG1hc2sgb2YgYWxsIHRoZSBmbGFncyB3aGljaCBhIHNlY3Rpb24gbWF5IGhhdmUgc2V0IC0gZnJvbQorKyAgICB0aGUgc2V0IDw8U0VDX05PX0ZMQUdTPj4sIDw8U0VDX0FMTE9DPj4sIC4uLjw8U0VUX05FVkVSX0xPQUQ+Pi4gICovCisrICBmbGFnd29yZCBzZWN0aW9uX2ZsYWdzOworKworKyAvKiBUaGUgY2hhcmFjdGVyIG5vcm1hbGx5IGZvdW5kIGF0IHRoZSBmcm9udCBvZiBhIHN5bWJvbC4KKysgICAgKGlmIGFueSksIHBlcmhhcHMgYF8nLiAgKi8KKysgIGNoYXIgc3ltYm9sX2xlYWRpbmdfY2hhcjsKKysKKysgLyogVGhlIHBhZCBjaGFyYWN0ZXIgZm9yIGZpbGUgbmFtZXMgd2l0aGluIGFuIGFyY2hpdmUgaGVhZGVyLiAgKi8KKysgIGNoYXIgYXJfcGFkX2NoYXI7CisrCisrICAvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBhbiBhcmNoaXZlIGhlYWRlci4gICovCisrICB1bnNpZ25lZCBzaG9ydCBhcl9tYXhfbmFtZWxlbjsKKysKKysgIC8qIEVudHJpZXMgZm9yIGJ5dGUgc3dhcHBpbmcgZm9yIGRhdGEuIFRoZXNlIGFyZSBkaWZmZXJlbnQgZnJvbSB0aGUKKysgICAgIG90aGVyIGVudHJ5IHBvaW50cywgc2luY2UgdGhleSBkb24ndCB0YWtlIGEgQkZEIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KKysgICAgIENlcnRhaW4gb3RoZXIgaGFuZGxlcnMgY291bGQgZG8gdGhlIHNhbWUuICAqLworKyAgYmZkX3VpbnQ2NF90ICAgKCpiZmRfZ2V0eDY0KSAoY29uc3Qgdm9pZCAqKTsKKysgIGJmZF9pbnQ2NF90ICAgICgqYmZkX2dldHhfc2lnbmVkXzY0KSAoY29uc3Qgdm9pZCAqKTsKKysgIHZvaWQgICAgICAgICAgICgqYmZkX3B1dHg2NCkgKGJmZF91aW50NjRfdCwgdm9pZCAqKTsKKysgIGJmZF92bWEgICAgICAgICgqYmZkX2dldHgzMikgKGNvbnN0IHZvaWQgKik7CisrICBiZmRfc2lnbmVkX3ZtYSAoKmJmZF9nZXR4X3NpZ25lZF8zMikgKGNvbnN0IHZvaWQgKik7CisrICB2b2lkICAgICAgICAgICAoKmJmZF9wdXR4MzIpIChiZmRfdm1hLCB2b2lkICopOworKyAgYmZkX3ZtYSAgICAgICAgKCpiZmRfZ2V0eDE2KSAoY29uc3Qgdm9pZCAqKTsKKysgIGJmZF9zaWduZWRfdm1hICgqYmZkX2dldHhfc2lnbmVkXzE2KSAoY29uc3Qgdm9pZCAqKTsKKysgIHZvaWQgICAgICAgICAgICgqYmZkX3B1dHgxNikgKGJmZF92bWEsIHZvaWQgKik7CisrCisrICAvKiBCeXRlIHN3YXBwaW5nIGZvciB0aGUgaGVhZGVycy4gICovCisrICBiZmRfdWludDY0X3QgICAoKmJmZF9oX2dldHg2NCkgKGNvbnN0IHZvaWQgKik7CisrICBiZmRfaW50NjRfdCAgICAoKmJmZF9oX2dldHhfc2lnbmVkXzY0KSAoY29uc3Qgdm9pZCAqKTsKKysgIHZvaWQgICAgICAgICAgICgqYmZkX2hfcHV0eDY0KSAoYmZkX3VpbnQ2NF90LCB2b2lkICopOworKyAgYmZkX3ZtYSAgICAgICAgKCpiZmRfaF9nZXR4MzIpIChjb25zdCB2b2lkICopOworKyAgYmZkX3NpZ25lZF92bWEgKCpiZmRfaF9nZXR4X3NpZ25lZF8zMikgKGNvbnN0IHZvaWQgKik7CisrICB2b2lkICAgICAgICAgICAoKmJmZF9oX3B1dHgzMikgKGJmZF92bWEsIHZvaWQgKik7CisrICBiZmRfdm1hICAgICAgICAoKmJmZF9oX2dldHgxNikgKGNvbnN0IHZvaWQgKik7CisrICBiZmRfc2lnbmVkX3ZtYSAoKmJmZF9oX2dldHhfc2lnbmVkXzE2KSAoY29uc3Qgdm9pZCAqKTsKKysgIHZvaWQgICAgICAgICAgICgqYmZkX2hfcHV0eDE2KSAoYmZkX3ZtYSwgdm9pZCAqKTsKKysKKysgIC8qIEZvcm1hdCBkZXBlbmRlbnQgcm91dGluZXM6IHRoZXNlIGFyZSB2ZWN0b3JzIG9mIGVudHJ5IHBvaW50cworKyAgICAgd2l0aGluIHRoZSB0YXJnZXQgdmVjdG9yIHN0cnVjdHVyZSwgb25lIGZvciBlYWNoIGZvcm1hdCB0byBjaGVjay4gICovCisrCisrICAvKiBDaGVjayB0aGUgZm9ybWF0IG9mIGEgZmlsZSBiZWluZyByZWFkLiAgUmV0dXJuIGEgPDxiZmRfdGFyZ2V0ICo+PiBvciB6ZXJvLiAgKi8KKysgIGNvbnN0IHN0cnVjdCBiZmRfdGFyZ2V0ICooKl9iZmRfY2hlY2tfZm9ybWF0W2JmZF90eXBlX2VuZF0pIChiZmQgKik7CisrCisrICAvKiBTZXQgdGhlIGZvcm1hdCBvZiBhIGZpbGUgYmVpbmcgd3JpdHRlbi4gICovCisrICBiZmRfYm9vbGVhbiAoKl9iZmRfc2V0X2Zvcm1hdFtiZmRfdHlwZV9lbmRdKSAoYmZkICopOworKworKyAgLyogV3JpdGUgY2FjaGVkIGluZm9ybWF0aW9uIGludG8gYSBmaWxlIGJlaW5nIHdyaXR0ZW4sIGF0IDw8YmZkX2Nsb3NlPj4uICAqLworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX3dyaXRlX2NvbnRlbnRzW2JmZF90eXBlX2VuZF0pIChiZmQgKik7CisrCisrCisrICAvKiBHZW5lcmljIGVudHJ5IHBvaW50cy4gICovCisrI2RlZmluZSBCRkRfSlVNUF9UQUJMRV9HRU5FUklDKE5BTUUpIFwKKysgIE5BTUUjI19jbG9zZV9hbmRfY2xlYW51cCwgXAorKyAgTkFNRSMjX2JmZF9mcmVlX2NhY2hlZF9pbmZvLCBcCisrICBOQU1FIyNfbmV3X3NlY3Rpb25faG9vaywgXAorKyAgTkFNRSMjX2dldF9zZWN0aW9uX2NvbnRlbnRzLCBcCisrICBOQU1FIyNfZ2V0X3NlY3Rpb25fY29udGVudHNfaW5fd2luZG93CisrCisrICAvKiBDYWxsZWQgd2hlbiB0aGUgQkZEIGlzIGJlaW5nIGNsb3NlZCB0byBkbyBhbnkgbmVjZXNzYXJ5IGNsZWFudXAuICAqLworKyAgYmZkX2Jvb2xlYW4gKCpfY2xvc2VfYW5kX2NsZWFudXApIChiZmQgKik7CisrICAvKiBBc2sgdGhlIEJGRCB0byBmcmVlIGFsbCBjYWNoZWQgaW5mb3JtYXRpb24uICAqLworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX2ZyZWVfY2FjaGVkX2luZm8pIChiZmQgKik7CisrICAvKiBDYWxsZWQgd2hlbiBhIG5ldyBzZWN0aW9uIGlzIGNyZWF0ZWQuICAqLworKyAgYmZkX2Jvb2xlYW4gKCpfbmV3X3NlY3Rpb25faG9vaykgKGJmZCAqLCBzZWNfcHRyKTsKKysgIC8qIFJlYWQgdGhlIGNvbnRlbnRzIG9mIGEgc2VjdGlvbi4gICovCisrICBiZmRfYm9vbGVhbiAoKl9iZmRfZ2V0X3NlY3Rpb25fY29udGVudHMpCisrICAgIChiZmQgKiwgc2VjX3B0ciwgdm9pZCAqLCBmaWxlX3B0ciwgYmZkX3NpemVfdHlwZSk7CisrICBiZmRfYm9vbGVhbiAoKl9iZmRfZ2V0X3NlY3Rpb25fY29udGVudHNfaW5fd2luZG93KQorKyAgICAoYmZkICosIHNlY19wdHIsIGJmZF93aW5kb3cgKiwgZmlsZV9wdHIsIGJmZF9zaXplX3R5cGUpOworKworKyAgLyogRW50cnkgcG9pbnRzIHRvIGNvcHkgcHJpdmF0ZSBkYXRhLiAgKi8KKysjZGVmaW5lIEJGRF9KVU1QX1RBQkxFX0NPUFkoTkFNRSkgXAorKyAgTkFNRSMjX2JmZF9jb3B5X3ByaXZhdGVfYmZkX2RhdGEsIFwKKysgIE5BTUUjI19iZmRfbWVyZ2VfcHJpdmF0ZV9iZmRfZGF0YSwgXAorKyAgX2JmZF9nZW5lcmljX2luaXRfcHJpdmF0ZV9zZWN0aW9uX2RhdGEsIFwKKysgIE5BTUUjI19iZmRfY29weV9wcml2YXRlX3NlY3Rpb25fZGF0YSwgXAorKyAgTkFNRSMjX2JmZF9jb3B5X3ByaXZhdGVfc3ltYm9sX2RhdGEsIFwKKysgIE5BTUUjI19iZmRfY29weV9wcml2YXRlX2hlYWRlcl9kYXRhLCBcCisrICBOQU1FIyNfYmZkX3NldF9wcml2YXRlX2ZsYWdzLCBcCisrICBOQU1FIyNfYmZkX3ByaW50X3ByaXZhdGVfYmZkX2RhdGEKKysKKysgIC8qIENhbGxlZCB0byBjb3B5IEJGRCBnZW5lcmFsIHByaXZhdGUgZGF0YSBmcm9tIG9uZSBvYmplY3QgZmlsZQorKyAgICAgdG8gYW5vdGhlci4gICovCisrICBiZmRfYm9vbGVhbiAoKl9iZmRfY29weV9wcml2YXRlX2JmZF9kYXRhKSAoYmZkICosIGJmZCAqKTsKKysgIC8qIENhbGxlZCB0byBtZXJnZSBCRkQgZ2VuZXJhbCBwcml2YXRlIGRhdGEgZnJvbSBvbmUgb2JqZWN0IGZpbGUKKysgICAgIHRvIGEgY29tbW9uIG91dHB1dCBmaWxlIHdoZW4gbGlua2luZy4gICovCisrICBiZmRfYm9vbGVhbiAoKl9iZmRfbWVyZ2VfcHJpdmF0ZV9iZmRfZGF0YSkgKGJmZCAqLCBiZmQgKik7CisrICAvKiBDYWxsZWQgdG8gaW5pdGlhbGl6ZSBCRkQgcHJpdmF0ZSBzZWN0aW9uIGRhdGEgZnJvbSBvbmUgb2JqZWN0IGZpbGUKKysgICAgIHRvIGFub3RoZXIuICAqLworKyNkZWZpbmUgYmZkX2luaXRfcHJpdmF0ZV9zZWN0aW9uX2RhdGEoaWJmZCwgaXNlYywgb2JmZCwgb3NlYywgbGlua19pbmZvKSBcCisrICBCRkRfU0VORCAob2JmZCwgX2JmZF9pbml0X3ByaXZhdGVfc2VjdGlvbl9kYXRhLCAoaWJmZCwgaXNlYywgb2JmZCwgb3NlYywgbGlua19pbmZvKSkKKysgIGJmZF9ib29sZWFuICgqX2JmZF9pbml0X3ByaXZhdGVfc2VjdGlvbl9kYXRhKQorKyAgICAoYmZkICosIHNlY19wdHIsIGJmZCAqLCBzZWNfcHRyLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKysgIC8qIENhbGxlZCB0byBjb3B5IEJGRCBwcml2YXRlIHNlY3Rpb24gZGF0YSBmcm9tIG9uZSBvYmplY3QgZmlsZQorKyAgICAgdG8gYW5vdGhlci4gICovCisrICBiZmRfYm9vbGVhbiAoKl9iZmRfY29weV9wcml2YXRlX3NlY3Rpb25fZGF0YSkKKysgICAgKGJmZCAqLCBzZWNfcHRyLCBiZmQgKiwgc2VjX3B0cik7CisrICAvKiBDYWxsZWQgdG8gY29weSBCRkQgcHJpdmF0ZSBzeW1ib2wgZGF0YSBmcm9tIG9uZSBzeW1ib2wKKysgICAgIHRvIGFub3RoZXIuICAqLworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX2NvcHlfcHJpdmF0ZV9zeW1ib2xfZGF0YSkKKysgICAgKGJmZCAqLCBhc3ltYm9sICosIGJmZCAqLCBhc3ltYm9sICopOworKyAgLyogQ2FsbGVkIHRvIGNvcHkgQkZEIHByaXZhdGUgaGVhZGVyIGRhdGEgZnJvbSBvbmUgb2JqZWN0IGZpbGUKKysgICAgIHRvIGFub3RoZXIuICAqLworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX2NvcHlfcHJpdmF0ZV9oZWFkZXJfZGF0YSkKKysgICAgKGJmZCAqLCBiZmQgKik7CisrICAvKiBDYWxsZWQgdG8gc2V0IHByaXZhdGUgYmFja2VuZCBmbGFncy4gICovCisrICBiZmRfYm9vbGVhbiAoKl9iZmRfc2V0X3ByaXZhdGVfZmxhZ3MpIChiZmQgKiwgZmxhZ3dvcmQpOworKworKyAgLyogQ2FsbGVkIHRvIHByaW50IHByaXZhdGUgQkZEIGRhdGEuICAqLworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX3ByaW50X3ByaXZhdGVfYmZkX2RhdGEpIChiZmQgKiwgdm9pZCAqKTsKKysKKysgIC8qIENvcmUgZmlsZSBlbnRyeSBwb2ludHMuICAqLworKyNkZWZpbmUgQkZEX0pVTVBfVEFCTEVfQ09SRShOQU1FKSBcCisrICBOQU1FIyNfY29yZV9maWxlX2ZhaWxpbmdfY29tbWFuZCwgXAorKyAgTkFNRSMjX2NvcmVfZmlsZV9mYWlsaW5nX3NpZ25hbCwgXAorKyAgTkFNRSMjX2NvcmVfZmlsZV9tYXRjaGVzX2V4ZWN1dGFibGVfcAorKworKyAgY2hhciAqICAgICAgKCpfY29yZV9maWxlX2ZhaWxpbmdfY29tbWFuZCkgKGJmZCAqKTsKKysgIGludCAgICAgICAgICgqX2NvcmVfZmlsZV9mYWlsaW5nX3NpZ25hbCkgKGJmZCAqKTsKKysgIGJmZF9ib29sZWFuICgqX2NvcmVfZmlsZV9tYXRjaGVzX2V4ZWN1dGFibGVfcCkgKGJmZCAqLCBiZmQgKik7CisrCisrICAvKiBBcmNoaXZlIGVudHJ5IHBvaW50cy4gICovCisrI2RlZmluZSBCRkRfSlVNUF9UQUJMRV9BUkNISVZFKE5BTUUpIFwKKysgIE5BTUUjI19zbHVycF9hcm1hcCwgXAorKyAgTkFNRSMjX3NsdXJwX2V4dGVuZGVkX25hbWVfdGFibGUsIFwKKysgIE5BTUUjI19jb25zdHJ1Y3RfZXh0ZW5kZWRfbmFtZV90YWJsZSwgXAorKyAgTkFNRSMjX3RydW5jYXRlX2FybmFtZSwgXAorKyAgTkFNRSMjX3dyaXRlX2FybWFwLCBcCisrICBOQU1FIyNfcmVhZF9hcl9oZHIsIFwKKysgIE5BTUUjI19vcGVucl9uZXh0X2FyY2hpdmVkX2ZpbGUsIFwKKysgIE5BTUUjI19nZXRfZWx0X2F0X2luZGV4LCBcCisrICBOQU1FIyNfZ2VuZXJpY19zdGF0X2FyY2hfZWx0LCBcCisrICBOQU1FIyNfdXBkYXRlX2FybWFwX3RpbWVzdGFtcAorKworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX3NsdXJwX2FybWFwKSAoYmZkICopOworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX3NsdXJwX2V4dGVuZGVkX25hbWVfdGFibGUpIChiZmQgKik7CisrICBiZmRfYm9vbGVhbiAoKl9iZmRfY29uc3RydWN0X2V4dGVuZGVkX25hbWVfdGFibGUpCisrICAgIChiZmQgKiwgY2hhciAqKiwgYmZkX3NpemVfdHlwZSAqLCBjb25zdCBjaGFyICoqKTsKKysgIHZvaWQgICAgICAgICgqX2JmZF90cnVuY2F0ZV9hcm5hbWUpIChiZmQgKiwgY29uc3QgY2hhciAqLCBjaGFyICopOworKyAgYmZkX2Jvb2xlYW4gKCp3cml0ZV9hcm1hcCkKKysgICAgKGJmZCAqLCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBvcmwgKiwgdW5zaWduZWQgaW50LCBpbnQpOworKyAgdm9pZCAqICAgICAgKCpfYmZkX3JlYWRfYXJfaGRyX2ZuKSAoYmZkICopOworKyAgYmZkICogICAgICAgKCpvcGVucl9uZXh0X2FyY2hpdmVkX2ZpbGUpIChiZmQgKiwgYmZkICopOworKyNkZWZpbmUgYmZkX2dldF9lbHRfYXRfaW5kZXgoYixpKSBCRkRfU0VORCAoYiwgX2JmZF9nZXRfZWx0X2F0X2luZGV4LCAoYixpKSkKKysgIGJmZCAqICAgICAgICgqX2JmZF9nZXRfZWx0X2F0X2luZGV4KSAoYmZkICosIHN5bWluZGV4KTsKKysgIGludCAgICAgICAgICgqX2JmZF9zdGF0X2FyY2hfZWx0KSAoYmZkICosIHN0cnVjdCBzdGF0ICopOworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX3VwZGF0ZV9hcm1hcF90aW1lc3RhbXApIChiZmQgKik7CisrCisrICAvKiBFbnRyeSBwb2ludHMgdXNlZCBmb3Igc3ltYm9scy4gICovCisrI2RlZmluZSBCRkRfSlVNUF9UQUJMRV9TWU1CT0xTKE5BTUUpIFwKKysgIE5BTUUjI19nZXRfc3ltdGFiX3VwcGVyX2JvdW5kLCBcCisrICBOQU1FIyNfY2Fub25pY2FsaXplX3N5bXRhYiwgXAorKyAgTkFNRSMjX21ha2VfZW1wdHlfc3ltYm9sLCBcCisrICBOQU1FIyNfcHJpbnRfc3ltYm9sLCBcCisrICBOQU1FIyNfZ2V0X3N5bWJvbF9pbmZvLCBcCisrICBOQU1FIyNfYmZkX2lzX2xvY2FsX2xhYmVsX25hbWUsIFwKKysgIE5BTUUjI19iZmRfaXNfdGFyZ2V0X3NwZWNpYWxfc3ltYm9sLCBcCisrICBOQU1FIyNfZ2V0X2xpbmVubywgXAorKyAgTkFNRSMjX2ZpbmRfbmVhcmVzdF9saW5lLCBcCisrICBfYmZkX2dlbmVyaWNfZmluZF9saW5lLCBcCisrICBOQU1FIyNfZmluZF9pbmxpbmVyX2luZm8sIFwKKysgIE5BTUUjI19iZmRfbWFrZV9kZWJ1Z19zeW1ib2wsIFwKKysgIE5BTUUjI19yZWFkX21pbmlzeW1ib2xzLCBcCisrICBOQU1FIyNfbWluaXN5bWJvbF90b19zeW1ib2wKKysKKysgIGxvbmcgICAgICAgICgqX2JmZF9nZXRfc3ltdGFiX3VwcGVyX2JvdW5kKSAoYmZkICopOworKyAgbG9uZyAgICAgICAgKCpfYmZkX2Nhbm9uaWNhbGl6ZV9zeW10YWIpCisrICAgIChiZmQgKiwgc3RydWN0IGJmZF9zeW1ib2wgKiopOworKyAgc3RydWN0IGJmZF9zeW1ib2wgKgorKyAgICAgICAgICAgICAgKCpfYmZkX21ha2VfZW1wdHlfc3ltYm9sKSAoYmZkICopOworKyAgdm9pZCAgICAgICAgKCpfYmZkX3ByaW50X3N5bWJvbCkKKysgICAgKGJmZCAqLCB2b2lkICosIHN0cnVjdCBiZmRfc3ltYm9sICosIGJmZF9wcmludF9zeW1ib2xfdHlwZSk7CisrI2RlZmluZSBiZmRfcHJpbnRfc3ltYm9sKGIscCxzLGUpIEJGRF9TRU5EIChiLCBfYmZkX3ByaW50X3N5bWJvbCwgKGIscCxzLGUpKQorKyAgdm9pZCAgICAgICAgKCpfYmZkX2dldF9zeW1ib2xfaW5mbykKKysgICAgKGJmZCAqLCBzdHJ1Y3QgYmZkX3N5bWJvbCAqLCBzeW1ib2xfaW5mbyAqKTsKKysjZGVmaW5lIGJmZF9nZXRfc3ltYm9sX2luZm8oYixwLGUpIEJGRF9TRU5EIChiLCBfYmZkX2dldF9zeW1ib2xfaW5mbywgKGIscCxlKSkKKysgIGJmZF9ib29sZWFuICgqX2JmZF9pc19sb2NhbF9sYWJlbF9uYW1lKSAoYmZkICosIGNvbnN0IGNoYXIgKik7CisrICBiZmRfYm9vbGVhbiAoKl9iZmRfaXNfdGFyZ2V0X3NwZWNpYWxfc3ltYm9sKSAoYmZkICosIGFzeW1ib2wgKik7CisrICBhbGVudCAqICAgICAoKl9nZXRfbGluZW5vKSAoYmZkICosIHN0cnVjdCBiZmRfc3ltYm9sICopOworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX2ZpbmRfbmVhcmVzdF9saW5lKQorKyAgICAoYmZkICosIHN0cnVjdCBiZmRfc2VjdGlvbiAqLCBzdHJ1Y3QgYmZkX3N5bWJvbCAqKiwgYmZkX3ZtYSwKKysgICAgIGNvbnN0IGNoYXIgKiosIGNvbnN0IGNoYXIgKiosIHVuc2lnbmVkIGludCAqKTsKKysgIGJmZF9ib29sZWFuICgqX2JmZF9maW5kX2xpbmUpCisrICAgIChiZmQgKiwgc3RydWN0IGJmZF9zeW1ib2wgKiosIHN0cnVjdCBiZmRfc3ltYm9sICosCisrICAgICBjb25zdCBjaGFyICoqLCB1bnNpZ25lZCBpbnQgKik7CisrICBiZmRfYm9vbGVhbiAoKl9iZmRfZmluZF9pbmxpbmVyX2luZm8pCisrICAgIChiZmQgKiwgY29uc3QgY2hhciAqKiwgY29uc3QgY2hhciAqKiwgdW5zaWduZWQgaW50ICopOworKyAvKiBCYWNrLWRvb3IgdG8gYWxsb3cgZm9ybWF0LWF3YXJlIGFwcGxpY2F0aW9ucyB0byBjcmVhdGUgZGVidWcgc3ltYm9scworKyAgICB3aGlsZSB1c2luZyBCRkQgZm9yIGV2ZXJ5dGhpbmcgZWxzZS4gIEN1cnJlbnRseSB1c2VkIGJ5IHRoZSBhc3NlbWJsZXIKKysgICAgd2hlbiBjcmVhdGluZyBDT0ZGIGZpbGVzLiAgKi8KKysgIGFzeW1ib2wgKiAgICgqX2JmZF9tYWtlX2RlYnVnX3N5bWJvbCkKKysgICAgKGJmZCAqLCB2b2lkICosIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisrI2RlZmluZSBiZmRfcmVhZF9taW5pc3ltYm9scyhiLCBkLCBtLCBzKSBcCisrICBCRkRfU0VORCAoYiwgX3JlYWRfbWluaXN5bWJvbHMsIChiLCBkLCBtLCBzKSkKKysgIGxvbmcgICAgICAgICgqX3JlYWRfbWluaXN5bWJvbHMpCisrICAgIChiZmQgKiwgYmZkX2Jvb2xlYW4sIHZvaWQgKiosIHVuc2lnbmVkIGludCAqKTsKKysjZGVmaW5lIGJmZF9taW5pc3ltYm9sX3RvX3N5bWJvbChiLCBkLCBtLCBmKSBcCisrICBCRkRfU0VORCAoYiwgX21pbmlzeW1ib2xfdG9fc3ltYm9sLCAoYiwgZCwgbSwgZikpCisrICBhc3ltYm9sICogICAoKl9taW5pc3ltYm9sX3RvX3N5bWJvbCkKKysgICAgKGJmZCAqLCBiZmRfYm9vbGVhbiwgY29uc3Qgdm9pZCAqLCBhc3ltYm9sICopOworKworKyAgLyogUm91dGluZXMgZm9yIHJlbG9jcy4gICovCisrI2RlZmluZSBCRkRfSlVNUF9UQUJMRV9SRUxPQ1MoTkFNRSkgXAorKyAgTkFNRSMjX2dldF9yZWxvY191cHBlcl9ib3VuZCwgXAorKyAgTkFNRSMjX2Nhbm9uaWNhbGl6ZV9yZWxvYywgXAorKyAgTkFNRSMjX2JmZF9yZWxvY190eXBlX2xvb2t1cCwgXAorKyAgTkFNRSMjX2JmZF9yZWxvY19uYW1lX2xvb2t1cAorKworKyAgbG9uZyAgICAgICAgKCpfZ2V0X3JlbG9jX3VwcGVyX2JvdW5kKSAoYmZkICosIHNlY19wdHIpOworKyAgbG9uZyAgICAgICAgKCpfYmZkX2Nhbm9uaWNhbGl6ZV9yZWxvYykKKysgICAgKGJmZCAqLCBzZWNfcHRyLCBhcmVsZW50ICoqLCBzdHJ1Y3QgYmZkX3N5bWJvbCAqKik7CisrICAvKiBTZWUgZG9jdW1lbnRhdGlvbiBvbiByZWxvYyB0eXBlcy4gICovCisrICByZWxvY19ob3d0b190eXBlICoKKysgICAgICAgICAgICAgICgqcmVsb2NfdHlwZV9sb29rdXApIChiZmQgKiwgYmZkX3JlbG9jX2NvZGVfcmVhbF90eXBlKTsKKysgIHJlbG9jX2hvd3RvX3R5cGUgKgorKyAgICAgICAgICAgICAgKCpyZWxvY19uYW1lX2xvb2t1cCkgKGJmZCAqLCBjb25zdCBjaGFyICopOworKworKworKyAgLyogUm91dGluZXMgdXNlZCB3aGVuIHdyaXRpbmcgYW4gb2JqZWN0IGZpbGUuICAqLworKyNkZWZpbmUgQkZEX0pVTVBfVEFCTEVfV1JJVEUoTkFNRSkgXAorKyAgTkFNRSMjX3NldF9hcmNoX21hY2gsIFwKKysgIE5BTUUjI19zZXRfc2VjdGlvbl9jb250ZW50cworKworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX3NldF9hcmNoX21hY2gpCisrICAgIChiZmQgKiwgZW51bSBiZmRfYXJjaGl0ZWN0dXJlLCB1bnNpZ25lZCBsb25nKTsKKysgIGJmZF9ib29sZWFuICgqX2JmZF9zZXRfc2VjdGlvbl9jb250ZW50cykKKysgICAgKGJmZCAqLCBzZWNfcHRyLCBjb25zdCB2b2lkICosIGZpbGVfcHRyLCBiZmRfc2l6ZV90eXBlKTsKKysKKysgIC8qIFJvdXRpbmVzIHVzZWQgYnkgdGhlIGxpbmtlci4gICovCisrI2RlZmluZSBCRkRfSlVNUF9UQUJMRV9MSU5LKE5BTUUpIFwKKysgIE5BTUUjI19zaXplb2ZfaGVhZGVycywgXAorKyAgTkFNRSMjX2JmZF9nZXRfcmVsb2NhdGVkX3NlY3Rpb25fY29udGVudHMsIFwKKysgIE5BTUUjI19iZmRfcmVsYXhfc2VjdGlvbiwgXAorKyAgTkFNRSMjX2JmZF9saW5rX2hhc2hfdGFibGVfY3JlYXRlLCBcCisrICBOQU1FIyNfYmZkX2xpbmtfaGFzaF90YWJsZV9mcmVlLCBcCisrICBOQU1FIyNfYmZkX2xpbmtfYWRkX3N5bWJvbHMsIFwKKysgIE5BTUUjI19iZmRfbGlua19qdXN0X3N5bXMsIFwKKysgIE5BTUUjI19iZmRfZmluYWxfbGluaywgXAorKyAgTkFNRSMjX2JmZF9saW5rX3NwbGl0X3NlY3Rpb24sIFwKKysgIE5BTUUjI19iZmRfZ2Nfc2VjdGlvbnMsIFwKKysgIE5BTUUjI19iZmRfbWVyZ2Vfc2VjdGlvbnMsIFwKKysgIE5BTUUjI19iZmRfaXNfZ3JvdXBfc2VjdGlvbiwgXAorKyAgTkFNRSMjX2JmZF9kaXNjYXJkX2dyb3VwLCBcCisrICBOQU1FIyNfc2VjdGlvbl9hbHJlYWR5X2xpbmtlZCBcCisrCisrICBpbnQgICAgICAgICAoKl9iZmRfc2l6ZW9mX2hlYWRlcnMpIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrICBiZmRfYnl0ZSAqICAoKl9iZmRfZ2V0X3JlbG9jYXRlZF9zZWN0aW9uX2NvbnRlbnRzKQorKyAgICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIHN0cnVjdCBiZmRfbGlua19vcmRlciAqLAorKyAgICAgYmZkX2J5dGUgKiwgYmZkX2Jvb2xlYW4sIHN0cnVjdCBiZmRfc3ltYm9sICoqKTsKKysKKysgIGJmZF9ib29sZWFuICgqX2JmZF9yZWxheF9zZWN0aW9uKQorKyAgICAoYmZkICosIHN0cnVjdCBiZmRfc2VjdGlvbiAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBiZmRfYm9vbGVhbiAqKTsKKysKKysgIC8qIENyZWF0ZSBhIGhhc2ggdGFibGUgZm9yIHRoZSBsaW5rZXIuICBEaWZmZXJlbnQgYmFja2VuZHMgc3RvcmUKKysgICAgIGRpZmZlcmVudCBpbmZvcm1hdGlvbiBpbiB0aGlzIHRhYmxlLiAgKi8KKysgIHN0cnVjdCBiZmRfbGlua19oYXNoX3RhYmxlICoKKysgICAgICAgICAgICAgICgqX2JmZF9saW5rX2hhc2hfdGFibGVfY3JlYXRlKSAoYmZkICopOworKworKyAgLyogUmVsZWFzZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgbGlua2VyIGhhc2ggdGFibGUuICAqLworKyAgdm9pZCAgICAgICAgKCpfYmZkX2xpbmtfaGFzaF90YWJsZV9mcmVlKSAoc3RydWN0IGJmZF9saW5rX2hhc2hfdGFibGUgKik7CisrCisrICAvKiBBZGQgc3ltYm9scyBmcm9tIHRoaXMgb2JqZWN0IGZpbGUgaW50byB0aGUgaGFzaCB0YWJsZS4gICovCisrICBiZmRfYm9vbGVhbiAoKl9iZmRfbGlua19hZGRfc3ltYm9scykgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKysKKysgIC8qIEluZGljYXRlIHRoYXQgd2UgYXJlIG9ubHkgcmV0cmlldmluZyBzeW1ib2wgdmFsdWVzIGZyb20gdGhpcyBzZWN0aW9uLiAgKi8KKysgIHZvaWQgICAgICAgICgqX2JmZF9saW5rX2p1c3Rfc3ltcykgKGFzZWN0aW9uICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOworKworKyAgLyogRG8gYSBsaW5rIGJhc2VkIG9uIHRoZSBsaW5rX29yZGVyIHN0cnVjdHVyZXMgYXR0YWNoZWQgdG8gZWFjaAorKyAgICAgc2VjdGlvbiBvZiB0aGUgQkZELiAgKi8KKysgIGJmZF9ib29sZWFuICgqX2JmZF9maW5hbF9saW5rKSAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOworKworKyAgLyogU2hvdWxkIHRoaXMgc2VjdGlvbiBiZSBzcGxpdCB1cCBpbnRvIHNtYWxsZXIgcGllY2VzIGR1cmluZyBsaW5raW5nLiAgKi8KKysgIGJmZF9ib29sZWFuICgqX2JmZF9saW5rX3NwbGl0X3NlY3Rpb24pIChiZmQgKiwgc3RydWN0IGJmZF9zZWN0aW9uICopOworKworKyAgLyogUmVtb3ZlIHNlY3Rpb25zIHRoYXQgYXJlIG5vdCByZWZlcmVuY2VkIGZyb20gdGhlIG91dHB1dC4gICovCisrICBiZmRfYm9vbGVhbiAoKl9iZmRfZ2Nfc2VjdGlvbnMpIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrCisrICAvKiBBdHRlbXB0IHRvIG1lcmdlIFNFQ19NRVJHRSBzZWN0aW9ucy4gICovCisrICBiZmRfYm9vbGVhbiAoKl9iZmRfbWVyZ2Vfc2VjdGlvbnMpIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrCisrICAvKiBJcyB0aGlzIHNlY3Rpb24gYSBtZW1iZXIgb2YgYSBncm91cD8gICovCisrICBiZmRfYm9vbGVhbiAoKl9iZmRfaXNfZ3JvdXBfc2VjdGlvbikgKGJmZCAqLCBjb25zdCBzdHJ1Y3QgYmZkX3NlY3Rpb24gKik7CisrCisrICAvKiBEaXNjYXJkIG1lbWJlcnMgb2YgYSBncm91cC4gICovCisrICBiZmRfYm9vbGVhbiAoKl9iZmRfZGlzY2FyZF9ncm91cCkgKGJmZCAqLCBzdHJ1Y3QgYmZkX3NlY3Rpb24gKik7CisrCisrICAvKiBDaGVjayBpZiBTRUMgaGFzIGJlZW4gYWxyZWFkeSBsaW5rZWQgZHVyaW5nIGEgcmVsb2NlYXRhYmxlIG9yCisrICAgICBmaW5hbCBsaW5rLiAgKi8KKysgIHZvaWQgKCpfc2VjdGlvbl9hbHJlYWR5X2xpbmtlZCkgKGJmZCAqLCBzdHJ1Y3QgYmZkX3NlY3Rpb24gKiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBiZmRfbGlua19pbmZvICopOworKworKyAgLyogUm91dGluZXMgdG8gaGFuZGxlIGR5bmFtaWMgc3ltYm9scyBhbmQgcmVsb2NzLiAgKi8KKysjZGVmaW5lIEJGRF9KVU1QX1RBQkxFX0RZTkFNSUMoTkFNRSkgXAorKyAgTkFNRSMjX2dldF9keW5hbWljX3N5bXRhYl91cHBlcl9ib3VuZCwgXAorKyAgTkFNRSMjX2Nhbm9uaWNhbGl6ZV9keW5hbWljX3N5bXRhYiwgXAorKyAgTkFNRSMjX2dldF9zeW50aGV0aWNfc3ltdGFiLCBcCisrICBOQU1FIyNfZ2V0X2R5bmFtaWNfcmVsb2NfdXBwZXJfYm91bmQsIFwKKysgIE5BTUUjI19jYW5vbmljYWxpemVfZHluYW1pY19yZWxvYworKworKyAgLyogR2V0IHRoZSBhbW91bnQgb2YgbWVtb3J5IHJlcXVpcmVkIHRvIGhvbGQgdGhlIGR5bmFtaWMgc3ltYm9scy4gICovCisrICBsb25nICAgICAgICAoKl9iZmRfZ2V0X2R5bmFtaWNfc3ltdGFiX3VwcGVyX2JvdW5kKSAoYmZkICopOworKyAgLyogUmVhZCBpbiB0aGUgZHluYW1pYyBzeW1ib2xzLiAgKi8KKysgIGxvbmcgICAgICAgICgqX2JmZF9jYW5vbmljYWxpemVfZHluYW1pY19zeW10YWIpCisrICAgIChiZmQgKiwgc3RydWN0IGJmZF9zeW1ib2wgKiopOworKyAgLyogQ3JlYXRlIHN5bnRoZXRpemVkIHN5bWJvbHMuICAqLworKyAgbG9uZyAgICAgICAgKCpfYmZkX2dldF9zeW50aGV0aWNfc3ltdGFiKQorKyAgICAoYmZkICosIGxvbmcsIHN0cnVjdCBiZmRfc3ltYm9sICoqLCBsb25nLCBzdHJ1Y3QgYmZkX3N5bWJvbCAqKiwKKysgICAgIHN0cnVjdCBiZmRfc3ltYm9sICoqKTsKKysgIC8qIEdldCB0aGUgYW1vdW50IG9mIG1lbW9yeSByZXF1aXJlZCB0byBob2xkIHRoZSBkeW5hbWljIHJlbG9jcy4gICovCisrICBsb25nICAgICAgICAoKl9iZmRfZ2V0X2R5bmFtaWNfcmVsb2NfdXBwZXJfYm91bmQpIChiZmQgKik7CisrICAvKiBSZWFkIGluIHRoZSBkeW5hbWljIHJlbG9jcy4gICovCisrICBsb25nICAgICAgICAoKl9iZmRfY2Fub25pY2FsaXplX2R5bmFtaWNfcmVsb2MpCisrICAgIChiZmQgKiwgYXJlbGVudCAqKiwgc3RydWN0IGJmZF9zeW1ib2wgKiopOworKworKyAgLyogT3Bwb3NpdGUgZW5kaWFuIHZlcnNpb24gb2YgdGhpcyB0YXJnZXQuICAqLworKyAgY29uc3Qgc3RydWN0IGJmZF90YXJnZXQgKiBhbHRlcm5hdGl2ZV90YXJnZXQ7CisrCisrICAvKiBEYXRhIGZvciB1c2UgYnkgYmFjay1lbmQgcm91dGluZXMsIHdoaWNoIGlzbid0CisrICAgICBnZW5lcmljIGVub3VnaCB0byBiZWxvbmcgaW4gdGhpcyBzdHJ1Y3R1cmUuICAqLworKyAgY29uc3Qgdm9pZCAqYmFja2VuZF9kYXRhOworKworK30gYmZkX3RhcmdldDsKKysKKytiZmRfYm9vbGVhbiBiZmRfc2V0X2RlZmF1bHRfdGFyZ2V0IChjb25zdCBjaGFyICpuYW1lKTsKKysKKytjb25zdCBiZmRfdGFyZ2V0ICpiZmRfZmluZF90YXJnZXQgKGNvbnN0IGNoYXIgKnRhcmdldF9uYW1lLCBiZmQgKmFiZmQpOworKworK2NvbnN0IGNoYXIgKiogYmZkX3RhcmdldF9saXN0ICh2b2lkKTsKKysKKytjb25zdCBiZmRfdGFyZ2V0ICpiZmRfc2VhcmNoX2Zvcl90YXJnZXQKKysgICAoaW50ICgqc2VhcmNoX2Z1bmMpIChjb25zdCBiZmRfdGFyZ2V0ICosIHZvaWQgKiksCisrICAgIHZvaWQgKik7CisrCisrLyogRXh0cmFjdGVkIGZyb20gZm9ybWF0LmMuICAqLworK2JmZF9ib29sZWFuIGJmZF9jaGVja19mb3JtYXQgKGJmZCAqYWJmZCwgYmZkX2Zvcm1hdCBmb3JtYXQpOworKworK2JmZF9ib29sZWFuIGJmZF9jaGVja19mb3JtYXRfbWF0Y2hlcworKyAgIChiZmQgKmFiZmQsIGJmZF9mb3JtYXQgZm9ybWF0LCBjaGFyICoqKm1hdGNoaW5nKTsKKysKKytiZmRfYm9vbGVhbiBiZmRfc2V0X2Zvcm1hdCAoYmZkICphYmZkLCBiZmRfZm9ybWF0IGZvcm1hdCk7CisrCisrY29uc3QgY2hhciAqYmZkX2Zvcm1hdF9zdHJpbmcgKGJmZF9mb3JtYXQgZm9ybWF0KTsKKysKKysvKiBFeHRyYWN0ZWQgZnJvbSBsaW5rZXIuYy4gICovCisrYmZkX2Jvb2xlYW4gYmZkX2xpbmtfc3BsaXRfc2VjdGlvbiAoYmZkICphYmZkLCBhc2VjdGlvbiAqc2VjKTsKKysKKysjZGVmaW5lIGJmZF9saW5rX3NwbGl0X3NlY3Rpb24oYWJmZCwgc2VjKSBcCisrICAgICAgIEJGRF9TRU5EIChhYmZkLCBfYmZkX2xpbmtfc3BsaXRfc2VjdGlvbiwgKGFiZmQsIHNlYykpCisrCisrdm9pZCBiZmRfc2VjdGlvbl9hbHJlYWR5X2xpbmtlZCAoYmZkICphYmZkLCBhc2VjdGlvbiAqc2VjLAorKyAgICBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqaW5mbyk7CisrCisrI2RlZmluZSBiZmRfc2VjdGlvbl9hbHJlYWR5X2xpbmtlZChhYmZkLCBzZWMsIGluZm8pIFwKKysgICAgICAgQkZEX1NFTkQgKGFiZmQsIF9zZWN0aW9uX2FscmVhZHlfbGlua2VkLCAoYWJmZCwgc2VjLCBpbmZvKSkKKysKKysvKiBFeHRyYWN0ZWQgZnJvbSBzaW1wbGUuYy4gICovCisrYmZkX2J5dGUgKmJmZF9zaW1wbGVfZ2V0X3JlbG9jYXRlZF9zZWN0aW9uX2NvbnRlbnRzCisrICAgKGJmZCAqYWJmZCwgYXNlY3Rpb24gKnNlYywgYmZkX2J5dGUgKm91dGJ1ZiwgYXN5bWJvbCAqKnN5bWJvbF90YWJsZSk7CisrCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgorKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvYmZkL2RvYy9saWJiZmQuaAorQEAgLTAsMCArMSwyMDc0IEBACisrLyogRE8gTk9UIEVESVQhICAtKi0gYnVmZmVyLXJlYWQtb25seTogdCAtKi0gIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IAorKyAgIGdlbmVyYXRlZCBmcm9tICJsaWJiZmQtaW4uaCIsICJpbml0LmMiLCAibGliYmZkLmMiLCAiYmZkaW8uYyIsIAorKyAgICJiZmR3aW4uYyIsICJjYWNoZS5jIiwgInJlbG9jLmMiLCAiYXJjaHVyZXMuYyIgYW5kICJlbGYuYyIuCisrICAgUnVuICJtYWtlIGhlYWRlcnMiIGluIHlvdXIgYnVpbGQgYmZkLyB0byByZWdlbmVyYXRlLiAgKi8KKysKKysvKiBsaWJiZmQuaCAtLSBEZWNsYXJhdGlvbnMgdXNlZCBieSBiZmQgbGlicmFyeSAqaW1wbGVtZW50YXRpb24qLgorKyAgIChUaGlzIGluY2x1ZGUgZmlsZSBpcyBub3QgZm9yIHVzZXJzIG9mIHRoZSBsaWJyYXJ5LikKKysKKysgICBDb3B5cmlnaHQgMTk5MCwgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwKKysgICAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3CisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgV3JpdHRlbiBieSBDeWdudXMgU3VwcG9ydC4KKysKKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBCRkQsIHRoZSBCaW5hcnkgRmlsZSBEZXNjcmlwdG9yIGxpYnJhcnkuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLAorKyAgIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisrCisrI2luY2x1ZGUgImhhc2h0YWIuaCIKKysKKysvKiBBbGlnbiBhbiBhZGRyZXNzIHVwd2FyZCB0byBhIGJvdW5kYXJ5LCBleHByZXNzZWQgYXMgYSBudW1iZXIgb2YgYnl0ZXMuCisrICAgRS5nLiBhbGlnbiB0byBhbiA4LWJ5dGUgYm91bmRhcnkgd2l0aCBhcmd1bWVudCBvZiA4LiAgVGFrZSBjYXJlIG5ldmVyCisrICAgdG8gd3JhcCBhcm91bmQgaWYgdGhlIGFkZHJlc3MgaXMgd2l0aGluIGJvdW5kYXJ5LTEgb2YgdGhlIGVuZCBvZiB0aGUKKysgICBhZGRyZXNzIHNwYWNlLiAgKi8KKysjZGVmaW5lIEJGRF9BTElHTih0aGlzLCBib3VuZGFyeSkJCQkJCSAgXAorKyAgKCgoKGJmZF92bWEpICh0aGlzKSArIChib3VuZGFyeSkgLSAxKSA+PSAoYmZkX3ZtYSkgKHRoaXMpKQkJICBcCisrICAgPyAoKChiZmRfdm1hKSAodGhpcykgKyAoKGJvdW5kYXJ5KSAtIDEpKSAmIH4gKGJmZF92bWEpICgoYm91bmRhcnkpLTEpKSBcCisrICAgOiB+IChiZmRfdm1hKSAwKQorKworKy8qIElmIHlvdSB3YW50IHRvIHJlYWQgYW5kIHdyaXRlIGxhcmdlIGJsb2NrcywgeW91IG1pZ2h0IHdhbnQgdG8gZG8gaXQKKysgICBpbiBxdWFudGEgb2YgdGhpcyBhbW91bnQgKi8KKysjZGVmaW5lIERFRkFVTFRfQlVGRkVSU0laRSA4MTkyCisrCisrLyogU2V0IGEgdGRhdGEgZmllbGQuICBDYW4ndCB1c2UgdGhlIG90aGVyIG1hY3JvcyBmb3IgdGhpcywgc2luY2UgdGhleQorKyAgIGRvIGNhc3RzLCBhbmQgY2FzdGluZyB0byB0aGUgbGVmdCBvZiBhc3NpZ25tZW50IGlzbid0IHBvcnRhYmxlLiAgKi8KKysjZGVmaW5lIHNldF90ZGF0YShiZmQsIHYpICgoYmZkKS0+dGRhdGEuYW55ID0gKHYpKQorKworKy8qIElmIEJGRF9JTl9NRU1PUlkgaXMgc2V0IGZvciBhIEJGRCwgdGhlbiB0aGUgaW9zdHJlYW0gZmllbGRzIHBvaW50cworKyAgIHRvIGFuIGluc3RhbmNlIG9mIHRoaXMgc3RydWN0dXJlLiAgKi8KKysKKytzdHJ1Y3QgYmZkX2luX21lbW9yeQorK3sKKysgIC8qIFNpemUgb2YgYnVmZmVyLiAgKi8KKysgIGJmZF9zaXplX3R5cGUgc2l6ZTsKKysgIC8qIEJ1ZmZlciBob2xkaW5nIGNvbnRlbnRzIG9mIEJGRC4gICovCisrICBiZmRfYnl0ZSAqYnVmZmVyOworK307CisrCisrc3RydWN0IHNlY3Rpb25faGFzaF9lbnRyeQorK3sKKysgIHN0cnVjdCBiZmRfaGFzaF9lbnRyeSByb290OworKyAgYXNlY3Rpb24gc2VjdGlvbjsKKyt9OworKworKy8qIHRkYXRhIGZvciBhbiBhcmNoaXZlLiAgRm9yIGFuIGlucHV0IGFyY2hpdmUsIGNhY2hlCisrICAgbmVlZHMgdG8gYmUgZnJlZSgpJ2QuICBGb3IgYW4gb3V0cHV0IGFyY2hpdmUsIHN5bWRlZnMgZG8uICAqLworKworK3N0cnVjdCBhcnRkYXRhIHsKKysgIGZpbGVfcHRyIGZpcnN0X2ZpbGVfZmlsZXBvczsKKysgIC8qIFNwZWVkIHVwIHNlYXJjaGluZyB0aGUgYXJtYXAgKi8KKysgIGh0YWJfdCBjYWNoZTsKKysgIGJmZCAqYXJjaGl2ZV9oZWFkOwkJLyogT25seSBpbnRlcmVzdGluZyBpbiBvdXRwdXQgcm91dGluZXMgKi8KKysgIGNhcnN5bSAqc3ltZGVmczsJCS8qIHRoZSBzeW1kZWYgZW50cmllcyAqLworKyAgc3ltaW5kZXggc3ltZGVmX2NvdW50OwkvKiBob3cgbWFueSB0aGVyZSBhcmUgKi8KKysgIGNoYXIgKmV4dGVuZGVkX25hbWVzOwkJLyogY2xldmVyIGludGVsIGV4dGVuc2lvbiAqLworKyAgYmZkX3NpemVfdHlwZSBleHRlbmRlZF9uYW1lc19zaXplOyAvKiBTaXplIG9mIGV4dGVuZGVkIG5hbWVzICovCisrICAvKiB3aGVuIG1vcmUgY29tcGlsZXJzIGFyZSBzdGFuZGFyZCBDLCB0aGlzIGNhbiBiZSBhIHRpbWVfdCAqLworKyAgbG9uZyAgYXJtYXBfdGltZXN0YW1wOwkvKiBUaW1lc3RhbXAgdmFsdWUgd3JpdHRlbiBpbnRvIGFybWFwLgorKwkJCQkgICBUaGlzIGlzIHVzZWQgZm9yIEJTRCBhcmNoaXZlcyB0byBjaGVjaworKwkJCQkgICB0aGF0IHRoZSB0aW1lc3RhbXAgaXMgcmVjZW50IGVub3VnaAorKwkJCQkgICBmb3IgdGhlIEJTRCBsaW5rZXIgdG8gbm90IGNvbXBsYWluLAorKwkJCQkgICBqdXN0IGJlZm9yZSB3ZSBmaW5pc2ggd3JpdGluZyBhbgorKwkJCQkgICBhcmNoaXZlLiAgKi8KKysgIGZpbGVfcHRyIGFybWFwX2RhdGVwb3M7CS8qIFBvc2l0aW9uIHdpdGhpbiBhcmNoaXZlIHRvIHNlZWsgdG8KKysJCQkJICAgcmV3cml0ZSB0aGUgZGF0ZSBmaWVsZC4gICovCisrICB2b2lkICp0ZGF0YTsJCQkvKiBCYWNrZW5kIHNwZWNpZmljIGluZm9ybWF0aW9uLiAgKi8KKyt9OworKworKyNkZWZpbmUgYmZkX2FyZGF0YShiZmQpICgoYmZkKS0+dGRhdGEuYW91dF9hcl9kYXRhKQorKworKy8qIEdvZXMgaW4gYmZkJ3MgYXJlbHRfZGF0YSBzbG90ICovCisrc3RydWN0IGFyZWx0ZGF0YSB7CisrICBjaGFyICogYXJjaF9oZWFkZXI7CQkvKiBpdCdzIGFjdHVhbGx5IGEgc3RyaW5nICovCisrICB1bnNpZ25lZCBpbnQgcGFyc2VkX3NpemU7CS8qIG9jdGV0cyBvZiBmaWxlc2l6ZSBub3QgaW5jbHVkaW5nIGFyX2hkciAqLworKyAgY2hhciAqZmlsZW5hbWU7CQkvKiBudWxsLXRlcm1pbmF0ZWQgKi8KKyt9OworKworKyNkZWZpbmUgYXJlbHRfc2l6ZShiZmQpICgoKHN0cnVjdCBhcmVsdGRhdGEgKikoKGJmZCktPmFyZWx0X2RhdGEpKS0+cGFyc2VkX3NpemUpCisrCisrZXh0ZXJuIHZvaWQgKmJmZF9tYWxsb2MKKysgIChiZmRfc2l6ZV90eXBlKTsKKytleHRlcm4gdm9pZCAqYmZkX3JlYWxsb2MKKysgICh2b2lkICosIGJmZF9zaXplX3R5cGUpOworK2V4dGVybiB2b2lkICpiZmRfem1hbGxvYworKyAgKGJmZF9zaXplX3R5cGUpOworK2V4dGVybiB2b2lkICpiZmRfbWFsbG9jMgorKyAgKGJmZF9zaXplX3R5cGUsIGJmZF9zaXplX3R5cGUpOworK2V4dGVybiB2b2lkICpiZmRfcmVhbGxvYzIKKysgICh2b2lkICosIGJmZF9zaXplX3R5cGUsIGJmZF9zaXplX3R5cGUpOworK2V4dGVybiB2b2lkICpiZmRfem1hbGxvYzIKKysgIChiZmRfc2l6ZV90eXBlLCBiZmRfc2l6ZV90eXBlKTsKKysKKytleHRlcm4gdm9pZCBfYmZkX2RlZmF1bHRfZXJyb3JfaGFuZGxlciAoY29uc3QgY2hhciAqcywgLi4uKTsKKytleHRlcm4gYmZkX2Vycm9yX2hhbmRsZXJfdHlwZSBfYmZkX2Vycm9yX2hhbmRsZXI7CisrCisrLyogVGhlc2Ugcm91dGluZXMgYWxsb2NhdGUgYW5kIGZyZWUgdGhpbmdzIG9uIHRoZSBCRkQncyBvYmphbGxvYy4gICovCisrCisrZXh0ZXJuIHZvaWQgKmJmZF9hbGxvYworKyAgKGJmZCAqLCBiZmRfc2l6ZV90eXBlKTsKKytleHRlcm4gdm9pZCAqYmZkX3phbGxvYworKyAgKGJmZCAqLCBiZmRfc2l6ZV90eXBlKTsKKytleHRlcm4gdm9pZCAqYmZkX2FsbG9jMgorKyAgKGJmZCAqLCBiZmRfc2l6ZV90eXBlLCBiZmRfc2l6ZV90eXBlKTsKKytleHRlcm4gdm9pZCAqYmZkX3phbGxvYzIKKysgIChiZmQgKiwgYmZkX3NpemVfdHlwZSwgYmZkX3NpemVfdHlwZSk7CisrZXh0ZXJuIHZvaWQgYmZkX3JlbGVhc2UKKysgIChiZmQgKiwgdm9pZCAqKTsKKysKKytiZmQgKiBfYmZkX2NyZWF0ZV9lbXB0eV9hcmNoaXZlX2VsZW1lbnRfc2hlbGwKKysgIChiZmQgKm9iZmQpOworK2JmZCAqIF9iZmRfbG9va19mb3JfYmZkX2luX2NhY2hlCisrICAoYmZkICosIGZpbGVfcHRyKTsKKytiZmRfYm9vbGVhbiBfYmZkX2FkZF9iZmRfdG9fYXJjaGl2ZV9jYWNoZQorKyAgKGJmZCAqLCBmaWxlX3B0ciwgYmZkICopOworK2JmZF9ib29sZWFuIF9iZmRfZ2VuZXJpY19ta2FyY2hpdmUKKysgIChiZmQgKmFiZmQpOworK2NvbnN0IGJmZF90YXJnZXQgKmJmZF9nZW5lcmljX2FyY2hpdmVfcAorKyAgKGJmZCAqYWJmZCk7CisrYmZkX2Jvb2xlYW4gYmZkX3NsdXJwX2FybWFwCisrICAoYmZkICphYmZkKTsKKytiZmRfYm9vbGVhbiBiZmRfc2x1cnBfYnNkX2FybWFwX2YyCisrICAoYmZkICphYmZkKTsKKysjZGVmaW5lIGJmZF9zbHVycF9ic2RfYXJtYXAgYmZkX3NsdXJwX2FybWFwCisrI2RlZmluZSBiZmRfc2x1cnBfY29mZl9hcm1hcCBiZmRfc2x1cnBfYXJtYXAKKytiZmRfYm9vbGVhbiBfYmZkX3NsdXJwX2V4dGVuZGVkX25hbWVfdGFibGUKKysgIChiZmQgKmFiZmQpOworK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX2NvbnN0cnVjdF9leHRlbmRlZF9uYW1lX3RhYmxlCisrICAoYmZkICosIGJmZF9ib29sZWFuLCBjaGFyICoqLCBiZmRfc2l6ZV90eXBlICopOworK2JmZF9ib29sZWFuIF9iZmRfd3JpdGVfYXJjaGl2ZV9jb250ZW50cworKyAgKGJmZCAqYWJmZCk7CisrYmZkX2Jvb2xlYW4gX2JmZF9jb21wdXRlX2FuZF93cml0ZV9hcm1hcAorKyAgKGJmZCAqLCB1bnNpZ25lZCBpbnQgZWxlbmd0aCk7CisrYmZkICpfYmZkX2dldF9lbHRfYXRfZmlsZXBvcworKyAgKGJmZCAqYXJjaGl2ZSwgZmlsZV9wdHIgZmlsZXBvcyk7CisrZXh0ZXJuIGJmZCAqX2JmZF9nZW5lcmljX2dldF9lbHRfYXRfaW5kZXgKKysgIChiZmQgKiwgc3ltaW5kZXgpOworK2JmZCAqIF9iZmRfbmV3X2JmZAorKyAgKHZvaWQpOworK3ZvaWQgX2JmZF9kZWxldGVfYmZkCisrICAoYmZkICopOworK2JmZF9ib29sZWFuIF9iZmRfZnJlZV9jYWNoZWRfaW5mbworKyAgKGJmZCAqKTsKKysKKytiZmRfYm9vbGVhbiBiZmRfZmFsc2UKKysgIChiZmQgKmlnbm9yZSk7CisrYmZkX2Jvb2xlYW4gYmZkX3RydWUKKysgIChiZmQgKmlnbm9yZSk7Cisrdm9pZCAqYmZkX251bGx2b2lkcHRyCisrICAoYmZkICppZ25vcmUpOworK2ludCBiZmRfMAorKyAgKGJmZCAqaWdub3JlKTsKKyt1bnNpZ25lZCBpbnQgYmZkXzB1CisrICAoYmZkICppZ25vcmUpOworK2xvbmcgYmZkXzBsCisrICAoYmZkICppZ25vcmUpOworK2xvbmcgX2JmZF9uMQorKyAgKGJmZCAqaWdub3JlKTsKKyt2b2lkIGJmZF92b2lkCisrICAoYmZkICppZ25vcmUpOworKworK2JmZCAqX2JmZF9uZXdfYmZkX2NvbnRhaW5lZF9pbgorKyAgKGJmZCAqKTsKKytjb25zdCBiZmRfdGFyZ2V0ICpfYmZkX2R1bW15X3RhcmdldAorKyAgKGJmZCAqYWJmZCk7CisrCisrdm9pZCBiZmRfZG9udF90cnVuY2F0ZV9hcm5hbWUKKysgIChiZmQgKmFiZmQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjaGFyICpoZHIpOworK3ZvaWQgYmZkX2JzZF90cnVuY2F0ZV9hcm5hbWUKKysgIChiZmQgKmFiZmQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjaGFyICpoZHIpOworK3ZvaWQgYmZkX2dudV90cnVuY2F0ZV9hcm5hbWUKKysgIChiZmQgKmFiZmQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjaGFyICpoZHIpOworKworK2JmZF9ib29sZWFuIGJzZF93cml0ZV9hcm1hcAorKyAgKGJmZCAqYXJjaCwgdW5zaWduZWQgaW50IGVsZW5ndGgsIHN0cnVjdCBvcmwgKm1hcCwgdW5zaWduZWQgaW50IG9ybF9jb3VudCwKKysgICBpbnQgc3RyaWR4KTsKKysKKytiZmRfYm9vbGVhbiBjb2ZmX3dyaXRlX2FybWFwCisrICAoYmZkICphcmNoLCB1bnNpZ25lZCBpbnQgZWxlbmd0aCwgc3RydWN0IG9ybCAqbWFwLCB1bnNpZ25lZCBpbnQgb3JsX2NvdW50LAorKyAgIGludCBzdHJpZHgpOworKworK2V4dGVybiB2b2lkICpfYmZkX2dlbmVyaWNfcmVhZF9hcl9oZHIKKysgIChiZmQgKik7CisrZXh0ZXJuIHZvaWQgX2JmZF9hcl9zcGFjZXBhZAorKyAgKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIGxvbmcpOworKworK2V4dGVybiB2b2lkICpfYmZkX2dlbmVyaWNfcmVhZF9hcl9oZHJfbWFnCisrICAoYmZkICosIGNvbnN0IGNoYXIgKik7CisrCisrYmZkICogYmZkX2dlbmVyaWNfb3BlbnJfbmV4dF9hcmNoaXZlZF9maWxlCisrICAoYmZkICphcmNoaXZlLCBiZmQgKmxhc3RfZmlsZSk7CisrCisraW50IGJmZF9nZW5lcmljX3N0YXRfYXJjaF9lbHQKKysgIChiZmQgKiwgc3RydWN0IHN0YXQgKik7CisrCisrI2RlZmluZSBfYmZkX3JlYWRfYXJfaGRyKGFiZmQpIFwKKysgIEJGRF9TRU5EIChhYmZkLCBfYmZkX3JlYWRfYXJfaGRyX2ZuLCAoYWJmZCkpCisrDAorKy8qIEdlbmVyaWMgcm91dGluZXMgdG8gdXNlIGZvciBCRkRfSlVNUF9UQUJMRV9HRU5FUklDLiAgVXNlCisrICAgQkZEX0pVTVBfVEFCTEVfR0VORVJJQyAoX2JmZF9nZW5lcmljKS4gICovCisrCisrI2RlZmluZSBfYmZkX2dlbmVyaWNfY2xvc2VfYW5kX2NsZWFudXAgYmZkX3RydWUKKysjZGVmaW5lIF9iZmRfZ2VuZXJpY19iZmRfZnJlZV9jYWNoZWRfaW5mbyBiZmRfdHJ1ZQorK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX2dlbmVyaWNfbmV3X3NlY3Rpb25faG9vaworKyAgKGJmZCAqLCBhc2VjdGlvbiAqKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gX2JmZF9nZW5lcmljX2dldF9zZWN0aW9uX2NvbnRlbnRzCisrICAoYmZkICosIGFzZWN0aW9uICosIHZvaWQgKiwgZmlsZV9wdHIsIGJmZF9zaXplX3R5cGUpOworK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX2dlbmVyaWNfZ2V0X3NlY3Rpb25fY29udGVudHNfaW5fd2luZG93CisrICAoYmZkICosIGFzZWN0aW9uICosIGJmZF93aW5kb3cgKiwgZmlsZV9wdHIsIGJmZF9zaXplX3R5cGUpOworKworKy8qIEdlbmVyaWMgcm91dGluZXMgdG8gdXNlIGZvciBCRkRfSlVNUF9UQUJMRV9DT1BZLiAgVXNlCisrICAgQkZEX0pVTVBfVEFCTEVfQ09QWSAoX2JmZF9nZW5lcmljKS4gICovCisrCisrI2RlZmluZSBfYmZkX2dlbmVyaWNfYmZkX2NvcHlfcHJpdmF0ZV9iZmRfZGF0YSBcCisrICAoKGJmZF9ib29sZWFuICgqKSAoYmZkICosIGJmZCAqKSkgYmZkX3RydWUpCisrI2RlZmluZSBfYmZkX2dlbmVyaWNfYmZkX21lcmdlX3ByaXZhdGVfYmZkX2RhdGEgXAorKyAgKChiZmRfYm9vbGVhbiAoKikgKGJmZCAqLCBiZmQgKikpIGJmZF90cnVlKQorKyNkZWZpbmUgX2JmZF9nZW5lcmljX2JmZF9zZXRfcHJpdmF0ZV9mbGFncyBcCisrICAoKGJmZF9ib29sZWFuICgqKSAoYmZkICosIGZsYWd3b3JkKSkgYmZkX3RydWUpCisrI2RlZmluZSBfYmZkX2dlbmVyaWNfYmZkX2NvcHlfcHJpdmF0ZV9zZWN0aW9uX2RhdGEgXAorKyAgKChiZmRfYm9vbGVhbiAoKikgKGJmZCAqLCBhc2VjdGlvbiAqLCBiZmQgKiwgYXNlY3Rpb24gKikpIGJmZF90cnVlKQorKyNkZWZpbmUgX2JmZF9nZW5lcmljX2JmZF9jb3B5X3ByaXZhdGVfc3ltYm9sX2RhdGEgXAorKyAgKChiZmRfYm9vbGVhbiAoKikgKGJmZCAqLCBhc3ltYm9sICosIGJmZCAqLCBhc3ltYm9sICopKSBiZmRfdHJ1ZSkKKysjZGVmaW5lIF9iZmRfZ2VuZXJpY19iZmRfY29weV9wcml2YXRlX2hlYWRlcl9kYXRhIFwKKysgICgoYmZkX2Jvb2xlYW4gKCopIChiZmQgKiwgYmZkICopKSBiZmRfdHJ1ZSkKKysjZGVmaW5lIF9iZmRfZ2VuZXJpY19iZmRfcHJpbnRfcHJpdmF0ZV9iZmRfZGF0YSBcCisrICAoKGJmZF9ib29sZWFuICgqKSAoYmZkICosIHZvaWQgKikpIGJmZF90cnVlKQorKworK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX2dlbmVyaWNfaW5pdF9wcml2YXRlX3NlY3Rpb25fZGF0YQorKyAgKGJmZCAqLCBhc2VjdGlvbiAqLCBiZmQgKiwgYXNlY3Rpb24gKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrCisrLyogUm91dGluZXMgdG8gdXNlIGZvciBCRkRfSlVNUF9UQUJMRV9DT1JFIHdoZW4gdGhlcmUgaXMgbm8gY29yZSBmaWxlCisrICAgc3VwcG9ydC4gIFVzZSBCRkRfSlVNUF9UQUJMRV9DT1JFIChfYmZkX25vY29yZSkuICAqLworKworK2V4dGVybiBjaGFyICpfYmZkX25vY29yZV9jb3JlX2ZpbGVfZmFpbGluZ19jb21tYW5kCisrICAoYmZkICopOworK2V4dGVybiBpbnQgX2JmZF9ub2NvcmVfY29yZV9maWxlX2ZhaWxpbmdfc2lnbmFsCisrICAoYmZkICopOworK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX25vY29yZV9jb3JlX2ZpbGVfbWF0Y2hlc19leGVjdXRhYmxlX3AKKysgIChiZmQgKiwgYmZkICopOworKworKy8qIFJvdXRpbmVzIHRvIHVzZSBmb3IgQkZEX0pVTVBfVEFCTEVfQVJDSElWRSB3aGVuIHRoZXJlIGlzIG5vIGFyY2hpdmUKKysgICBmaWxlIHN1cHBvcnQuICBVc2UgQkZEX0pVTVBfVEFCTEVfQVJDSElWRSAoX2JmZF9ub2FyY2hpdmUpLiAgKi8KKysKKysjZGVmaW5lIF9iZmRfbm9hcmNoaXZlX3NsdXJwX2FybWFwIGJmZF9mYWxzZQorKyNkZWZpbmUgX2JmZF9ub2FyY2hpdmVfc2x1cnBfZXh0ZW5kZWRfbmFtZV90YWJsZSBiZmRfZmFsc2UKKysjZGVmaW5lIF9iZmRfbm9hcmNoaXZlX2NvbnN0cnVjdF9leHRlbmRlZF9uYW1lX3RhYmxlIFwKKysgICgoYmZkX2Jvb2xlYW4gKCopIChiZmQgKiwgY2hhciAqKiwgYmZkX3NpemVfdHlwZSAqLCBjb25zdCBjaGFyICoqKSkgXAorKyAgIGJmZF9mYWxzZSkKKysjZGVmaW5lIF9iZmRfbm9hcmNoaXZlX3RydW5jYXRlX2FybmFtZSBcCisrICAoKHZvaWQgKCopIChiZmQgKiwgY29uc3QgY2hhciAqLCBjaGFyICopKSBiZmRfdm9pZCkKKysjZGVmaW5lIF9iZmRfbm9hcmNoaXZlX3dyaXRlX2FybWFwIFwKKysgICgoYmZkX2Jvb2xlYW4gKCopIChiZmQgKiwgdW5zaWduZWQgaW50LCBzdHJ1Y3Qgb3JsICosIHVuc2lnbmVkIGludCwgaW50KSkgXAorKyAgIGJmZF9mYWxzZSkKKysjZGVmaW5lIF9iZmRfbm9hcmNoaXZlX3JlYWRfYXJfaGRyIGJmZF9udWxsdm9pZHB0cgorKyNkZWZpbmUgX2JmZF9ub2FyY2hpdmVfb3BlbnJfbmV4dF9hcmNoaXZlZF9maWxlIFwKKysgICgoYmZkICooKikgKGJmZCAqLCBiZmQgKikpIGJmZF9udWxsdm9pZHB0cikKKysjZGVmaW5lIF9iZmRfbm9hcmNoaXZlX2dldF9lbHRfYXRfaW5kZXggXAorKyAgKChiZmQgKigqKSAoYmZkICosIHN5bWluZGV4KSkgYmZkX251bGx2b2lkcHRyKQorKyNkZWZpbmUgX2JmZF9ub2FyY2hpdmVfZ2VuZXJpY19zdGF0X2FyY2hfZWx0IGJmZF9nZW5lcmljX3N0YXRfYXJjaF9lbHQKKysjZGVmaW5lIF9iZmRfbm9hcmNoaXZlX3VwZGF0ZV9hcm1hcF90aW1lc3RhbXAgYmZkX2ZhbHNlCisrCisrLyogUm91dGluZXMgdG8gdXNlIGZvciBCRkRfSlVNUF9UQUJMRV9BUkNISVZFIHRvIGdldCBCU0Qgc3R5bGUKKysgICBhcmNoaXZlcy4gIFVzZSBCRkRfSlVNUF9UQUJMRV9BUkNISVZFIChfYmZkX2FyY2hpdmVfYnNkKS4gICovCisrCisrI2RlZmluZSBfYmZkX2FyY2hpdmVfYnNkX3NsdXJwX2FybWFwIGJmZF9zbHVycF9ic2RfYXJtYXAKKysjZGVmaW5lIF9iZmRfYXJjaGl2ZV9ic2Rfc2x1cnBfZXh0ZW5kZWRfbmFtZV90YWJsZSBcCisrICBfYmZkX3NsdXJwX2V4dGVuZGVkX25hbWVfdGFibGUKKytleHRlcm4gYmZkX2Jvb2xlYW4gX2JmZF9hcmNoaXZlX2JzZF9jb25zdHJ1Y3RfZXh0ZW5kZWRfbmFtZV90YWJsZQorKyAgKGJmZCAqLCBjaGFyICoqLCBiZmRfc2l6ZV90eXBlICosIGNvbnN0IGNoYXIgKiopOworKyNkZWZpbmUgX2JmZF9hcmNoaXZlX2JzZF90cnVuY2F0ZV9hcm5hbWUgYmZkX2JzZF90cnVuY2F0ZV9hcm5hbWUKKysjZGVmaW5lIF9iZmRfYXJjaGl2ZV9ic2Rfd3JpdGVfYXJtYXAgYnNkX3dyaXRlX2FybWFwCisrI2RlZmluZSBfYmZkX2FyY2hpdmVfYnNkX3JlYWRfYXJfaGRyIF9iZmRfZ2VuZXJpY19yZWFkX2FyX2hkcgorKyNkZWZpbmUgX2JmZF9hcmNoaXZlX2JzZF9vcGVucl9uZXh0X2FyY2hpdmVkX2ZpbGUgXAorKyAgYmZkX2dlbmVyaWNfb3BlbnJfbmV4dF9hcmNoaXZlZF9maWxlCisrI2RlZmluZSBfYmZkX2FyY2hpdmVfYnNkX2dldF9lbHRfYXRfaW5kZXggX2JmZF9nZW5lcmljX2dldF9lbHRfYXRfaW5kZXgKKysjZGVmaW5lIF9iZmRfYXJjaGl2ZV9ic2RfZ2VuZXJpY19zdGF0X2FyY2hfZWx0IFwKKysgIGJmZF9nZW5lcmljX3N0YXRfYXJjaF9lbHQKKytleHRlcm4gYmZkX2Jvb2xlYW4gX2JmZF9hcmNoaXZlX2JzZF91cGRhdGVfYXJtYXBfdGltZXN0YW1wCisrICAoYmZkICopOworKworKy8qIFJvdXRpbmVzIHRvIHVzZSBmb3IgQkZEX0pVTVBfVEFCTEVfQVJDSElWRSB0byBnZXQgQ09GRiBzdHlsZQorKyAgIGFyY2hpdmVzLiAgVXNlIEJGRF9KVU1QX1RBQkxFX0FSQ0hJVkUgKF9iZmRfYXJjaGl2ZV9jb2ZmKS4gICovCisrCisrI2RlZmluZSBfYmZkX2FyY2hpdmVfY29mZl9zbHVycF9hcm1hcCBiZmRfc2x1cnBfY29mZl9hcm1hcAorKyNkZWZpbmUgX2JmZF9hcmNoaXZlX2NvZmZfc2x1cnBfZXh0ZW5kZWRfbmFtZV90YWJsZSBcCisrICBfYmZkX3NsdXJwX2V4dGVuZGVkX25hbWVfdGFibGUKKytleHRlcm4gYmZkX2Jvb2xlYW4gX2JmZF9hcmNoaXZlX2NvZmZfY29uc3RydWN0X2V4dGVuZGVkX25hbWVfdGFibGUKKysgIChiZmQgKiwgY2hhciAqKiwgYmZkX3NpemVfdHlwZSAqLCBjb25zdCBjaGFyICoqKTsKKysjZGVmaW5lIF9iZmRfYXJjaGl2ZV9jb2ZmX3RydW5jYXRlX2FybmFtZSBiZmRfZG9udF90cnVuY2F0ZV9hcm5hbWUKKysjZGVmaW5lIF9iZmRfYXJjaGl2ZV9jb2ZmX3dyaXRlX2FybWFwIGNvZmZfd3JpdGVfYXJtYXAKKysjZGVmaW5lIF9iZmRfYXJjaGl2ZV9jb2ZmX3JlYWRfYXJfaGRyIF9iZmRfZ2VuZXJpY19yZWFkX2FyX2hkcgorKyNkZWZpbmUgX2JmZF9hcmNoaXZlX2NvZmZfb3BlbnJfbmV4dF9hcmNoaXZlZF9maWxlIFwKKysgIGJmZF9nZW5lcmljX29wZW5yX25leHRfYXJjaGl2ZWRfZmlsZQorKyNkZWZpbmUgX2JmZF9hcmNoaXZlX2NvZmZfZ2V0X2VsdF9hdF9pbmRleCBfYmZkX2dlbmVyaWNfZ2V0X2VsdF9hdF9pbmRleAorKyNkZWZpbmUgX2JmZF9hcmNoaXZlX2NvZmZfZ2VuZXJpY19zdGF0X2FyY2hfZWx0IFwKKysgIGJmZF9nZW5lcmljX3N0YXRfYXJjaF9lbHQKKysjZGVmaW5lIF9iZmRfYXJjaGl2ZV9jb2ZmX3VwZGF0ZV9hcm1hcF90aW1lc3RhbXAgYmZkX3RydWUKKysKKysvKiBSb3V0aW5lcyB0byB1c2UgZm9yIEJGRF9KVU1QX1RBQkxFX1NZTUJPTFMgd2hlcmUgdGhlcmUgaXMgbm8gc3ltYm9sCisrICAgc3VwcG9ydC4gIFVzZSBCRkRfSlVNUF9UQUJMRV9TWU1CT0xTIChfYmZkX25vc3ltYm9scykuICAqLworKworKyNkZWZpbmUgX2JmZF9ub3N5bWJvbHNfZ2V0X3N5bXRhYl91cHBlcl9ib3VuZCBfYmZkX24xCisrI2RlZmluZSBfYmZkX25vc3ltYm9sc19jYW5vbmljYWxpemVfc3ltdGFiIFwKKysgICgobG9uZyAoKikgKGJmZCAqLCBhc3ltYm9sICoqKSkgX2JmZF9uMSkKKysjZGVmaW5lIF9iZmRfbm9zeW1ib2xzX21ha2VfZW1wdHlfc3ltYm9sIF9iZmRfZ2VuZXJpY19tYWtlX2VtcHR5X3N5bWJvbAorKyNkZWZpbmUgX2JmZF9ub3N5bWJvbHNfcHJpbnRfc3ltYm9sIFwKKysgICgodm9pZCAoKikgKGJmZCAqLCB2b2lkICosIGFzeW1ib2wgKiwgYmZkX3ByaW50X3N5bWJvbF90eXBlKSkgYmZkX3ZvaWQpCisrI2RlZmluZSBfYmZkX25vc3ltYm9sc19nZXRfc3ltYm9sX2luZm8gXAorKyAgKCh2b2lkICgqKSAoYmZkICosIGFzeW1ib2wgKiwgc3ltYm9sX2luZm8gKikpIGJmZF92b2lkKQorKyNkZWZpbmUgX2JmZF9ub3N5bWJvbHNfYmZkX2lzX2xvY2FsX2xhYmVsX25hbWUgXAorKyAgKChiZmRfYm9vbGVhbiAoKikgKGJmZCAqLCBjb25zdCBjaGFyICopKSBiZmRfZmFsc2UpCisrI2RlZmluZSBfYmZkX25vc3ltYm9sc19iZmRfaXNfdGFyZ2V0X3NwZWNpYWxfc3ltYm9sIFwKKysgICgoYmZkX2Jvb2xlYW4gKCopIChiZmQgKiwgYXN5bWJvbCAqKSkgYmZkX2ZhbHNlKQorKyNkZWZpbmUgX2JmZF9ub3N5bWJvbHNfZ2V0X2xpbmVubyBcCisrICAoKGFsZW50ICooKikgKGJmZCAqLCBhc3ltYm9sICopKSBiZmRfbnVsbHZvaWRwdHIpCisrI2RlZmluZSBfYmZkX25vc3ltYm9sc19maW5kX25lYXJlc3RfbGluZSBcCisrICAoKGJmZF9ib29sZWFuICgqKSAoYmZkICosIGFzZWN0aW9uICosIGFzeW1ib2wgKiosIGJmZF92bWEsIGNvbnN0IGNoYXIgKiosIFwKKysJCSAgICAgY29uc3QgY2hhciAqKiwgdW5zaWduZWQgaW50ICopKSBcCisrICAgYmZkX2ZhbHNlKQorKyNkZWZpbmUgX2JmZF9ub3N5bWJvbHNfZmluZF9pbmxpbmVyX2luZm8gXAorKyAgKChiZmRfYm9vbGVhbiAoKikgKGJmZCAqLCBjb25zdCBjaGFyICoqLCBjb25zdCBjaGFyICoqLCB1bnNpZ25lZCBpbnQgKikpIFwKKysgICBiZmRfZmFsc2UpCisrI2RlZmluZSBfYmZkX25vc3ltYm9sc19iZmRfbWFrZV9kZWJ1Z19zeW1ib2wgXAorKyAgKChhc3ltYm9sICooKikgKGJmZCAqLCB2b2lkICosIHVuc2lnbmVkIGxvbmcpKSBiZmRfbnVsbHZvaWRwdHIpCisrI2RlZmluZSBfYmZkX25vc3ltYm9sc19yZWFkX21pbmlzeW1ib2xzIFwKKysgICgobG9uZyAoKikgKGJmZCAqLCBiZmRfYm9vbGVhbiwgdm9pZCAqKiwgdW5zaWduZWQgaW50ICopKSBfYmZkX24xKQorKyNkZWZpbmUgX2JmZF9ub3N5bWJvbHNfbWluaXN5bWJvbF90b19zeW1ib2wgXAorKyAgKChhc3ltYm9sICooKikgKGJmZCAqLCBiZmRfYm9vbGVhbiwgY29uc3Qgdm9pZCAqLCBhc3ltYm9sICopKSBcCisrICAgYmZkX251bGx2b2lkcHRyKQorKworKy8qIFJvdXRpbmVzIHRvIHVzZSBmb3IgQkZEX0pVTVBfVEFCTEVfUkVMT0NTIHdoZW4gdGhlcmUgaXMgbm8gcmVsb2MKKysgICBzdXBwb3J0LiAgVXNlIEJGRF9KVU1QX1RBQkxFX1JFTE9DUyAoX2JmZF9ub3JlbG9jcykuICAqLworKworK2V4dGVybiBsb25nIF9iZmRfbm9yZWxvY3NfZ2V0X3JlbG9jX3VwcGVyX2JvdW5kIChiZmQgKiwgYXNlY3Rpb24gKik7CisrZXh0ZXJuIGxvbmcgX2JmZF9ub3JlbG9jc19jYW5vbmljYWxpemVfcmVsb2MgKGJmZCAqLCBhc2VjdGlvbiAqLAorKwkJCQkJICAgICAgYXJlbGVudCAqKiwgYXN5bWJvbCAqKik7CisrI2RlZmluZSBfYmZkX25vcmVsb2NzX2JmZF9yZWxvY190eXBlX2xvb2t1cCBcCisrICAoKHJlbG9jX2hvd3RvX3R5cGUgKigqKSAoYmZkICosIGJmZF9yZWxvY19jb2RlX3JlYWxfdHlwZSkpIGJmZF9udWxsdm9pZHB0cikKKysjZGVmaW5lIF9iZmRfbm9yZWxvY3NfYmZkX3JlbG9jX25hbWVfbG9va3VwIFwKKysgICgocmVsb2NfaG93dG9fdHlwZSAqKCopIChiZmQgKiwgY29uc3QgY2hhciAqKSkgYmZkX251bGx2b2lkcHRyKQorKworKy8qIFJvdXRpbmVzIHRvIHVzZSBmb3IgQkZEX0pVTVBfVEFCTEVfV1JJVEUgZm9yIHRhcmdldHMgd2hpY2ggbWF5IG5vdAorKyAgIGJlIHdyaXR0ZW4uICBVc2UgQkZEX0pVTVBfVEFCTEVfV1JJVEUgKF9iZmRfbm93cml0ZSkuICAqLworKworKyNkZWZpbmUgX2JmZF9ub3dyaXRlX3NldF9hcmNoX21hY2ggXAorKyAgKChiZmRfYm9vbGVhbiAoKikgKGJmZCAqLCBlbnVtIGJmZF9hcmNoaXRlY3R1cmUsIHVuc2lnbmVkIGxvbmcpKSBcCisrICAgYmZkX2ZhbHNlKQorKyNkZWZpbmUgX2JmZF9ub3dyaXRlX3NldF9zZWN0aW9uX2NvbnRlbnRzIFwKKysgICgoYmZkX2Jvb2xlYW4gKCopIChiZmQgKiwgYXNlY3Rpb24gKiwgY29uc3Qgdm9pZCAqLCBmaWxlX3B0ciwgYmZkX3NpemVfdHlwZSkpIFwKKysgICBiZmRfZmFsc2UpCisrCisrLyogR2VuZXJpYyByb3V0aW5lcyB0byB1c2UgZm9yIEJGRF9KVU1QX1RBQkxFX1dSSVRFLiAgVXNlCisrICAgQkZEX0pVTVBfVEFCTEVfV1JJVEUgKF9iZmRfZ2VuZXJpYykuICAqLworKworKyNkZWZpbmUgX2JmZF9nZW5lcmljX3NldF9hcmNoX21hY2ggYmZkX2RlZmF1bHRfc2V0X2FyY2hfbWFjaAorK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX2dlbmVyaWNfc2V0X3NlY3Rpb25fY29udGVudHMKKysgIChiZmQgKiwgYXNlY3Rpb24gKiwgY29uc3Qgdm9pZCAqLCBmaWxlX3B0ciwgYmZkX3NpemVfdHlwZSk7CisrCisrLyogUm91dGluZXMgdG8gdXNlIGZvciBCRkRfSlVNUF9UQUJMRV9MSU5LIGZvciB0YXJnZXRzIHdoaWNoIGRvIG5vdAorKyAgIHN1cHBvcnQgbGlua2luZy4gIFVzZSBCRkRfSlVNUF9UQUJMRV9MSU5LIChfYmZkX25vbGluaykuICAqLworKworKyNkZWZpbmUgX2JmZF9ub2xpbmtfc2l6ZW9mX2hlYWRlcnMgXAorKyAgKChpbnQgKCopIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKikpIGJmZF8wKQorKyNkZWZpbmUgX2JmZF9ub2xpbmtfYmZkX2dldF9yZWxvY2F0ZWRfc2VjdGlvbl9jb250ZW50cyBcCisrICAoKGJmZF9ieXRlICooKikgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBzdHJ1Y3QgYmZkX2xpbmtfb3JkZXIgKiwgXAorKwkJICAgYmZkX2J5dGUgKiwgYmZkX2Jvb2xlYW4sIGFzeW1ib2wgKiopKSBcCisrICAgYmZkX251bGx2b2lkcHRyKQorKyNkZWZpbmUgX2JmZF9ub2xpbmtfYmZkX3JlbGF4X3NlY3Rpb24gXAorKyAgKChiZmRfYm9vbGVhbiAoKikgXAorKyAgICAoYmZkICosIGFzZWN0aW9uICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIGJmZF9ib29sZWFuICopKSBcCisrICAgYmZkX2ZhbHNlKQorKyNkZWZpbmUgX2JmZF9ub2xpbmtfYmZkX2djX3NlY3Rpb25zIFwKKysgICgoYmZkX2Jvb2xlYW4gKCopIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKikpIFwKKysgICBiZmRfZmFsc2UpCisrI2RlZmluZSBfYmZkX25vbGlua19iZmRfbWVyZ2Vfc2VjdGlvbnMgXAorKyAgKChiZmRfYm9vbGVhbiAoKikgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKSkgXAorKyAgIGJmZF9mYWxzZSkKKysjZGVmaW5lIF9iZmRfbm9saW5rX2JmZF9pc19ncm91cF9zZWN0aW9uIFwKKysgICgoYmZkX2Jvb2xlYW4gKCopIChiZmQgKiwgY29uc3Qgc3RydWN0IGJmZF9zZWN0aW9uICopKSBcCisrICAgYmZkX2ZhbHNlKQorKyNkZWZpbmUgX2JmZF9ub2xpbmtfYmZkX2Rpc2NhcmRfZ3JvdXAgXAorKyAgKChiZmRfYm9vbGVhbiAoKikgKGJmZCAqLCBzdHJ1Y3QgYmZkX3NlY3Rpb24gKikpIFwKKysgICBiZmRfZmFsc2UpCisrI2RlZmluZSBfYmZkX25vbGlua19iZmRfbGlua19oYXNoX3RhYmxlX2NyZWF0ZSBcCisrICAoKHN0cnVjdCBiZmRfbGlua19oYXNoX3RhYmxlICooKikgKGJmZCAqKSkgYmZkX251bGx2b2lkcHRyKQorKyNkZWZpbmUgX2JmZF9ub2xpbmtfYmZkX2xpbmtfaGFzaF90YWJsZV9mcmVlIFwKKysgICgodm9pZCAoKikgKHN0cnVjdCBiZmRfbGlua19oYXNoX3RhYmxlICopKSBiZmRfdm9pZCkKKysjZGVmaW5lIF9iZmRfbm9saW5rX2JmZF9saW5rX2FkZF9zeW1ib2xzIFwKKysgICgoYmZkX2Jvb2xlYW4gKCopIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKikpIGJmZF9mYWxzZSkKKysjZGVmaW5lIF9iZmRfbm9saW5rX2JmZF9saW5rX2p1c3Rfc3ltcyBcCisrICAoKHZvaWQgKCopIChhc2VjdGlvbiAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKSkgYmZkX3ZvaWQpCisrI2RlZmluZSBfYmZkX25vbGlua19iZmRfZmluYWxfbGluayBcCisrICAoKGJmZF9ib29sZWFuICgqKSAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopKSBiZmRfZmFsc2UpCisrI2RlZmluZSBfYmZkX25vbGlua19iZmRfbGlua19zcGxpdF9zZWN0aW9uIFwKKysgICgoYmZkX2Jvb2xlYW4gKCopIChiZmQgKiwgc3RydWN0IGJmZF9zZWN0aW9uICopKSBiZmRfZmFsc2UpCisrI2RlZmluZSBfYmZkX25vbGlua19zZWN0aW9uX2FscmVhZHlfbGlua2VkIFwKKysgICgodm9pZCAoKikgKGJmZCAqLCBzdHJ1Y3QgYmZkX3NlY3Rpb24gKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKikpIGJmZF92b2lkKQorKworKy8qIFJvdXRpbmVzIHRvIHVzZSBmb3IgQkZEX0pVTVBfVEFCTEVfRFlOQU1JQyBmb3IgdGFyZ2V0cyB3aGljaCBkbyBub3QKKysgICBoYXZlIGR5bmFtaWMgc3ltYm9scyBvciByZWxvY3MuICBVc2UgQkZEX0pVTVBfVEFCTEVfRFlOQU1JQworKyAgIChfYmZkX25vZHluYW1pYykuICAqLworKworKyNkZWZpbmUgX2JmZF9ub2R5bmFtaWNfZ2V0X2R5bmFtaWNfc3ltdGFiX3VwcGVyX2JvdW5kIF9iZmRfbjEKKysjZGVmaW5lIF9iZmRfbm9keW5hbWljX2Nhbm9uaWNhbGl6ZV9keW5hbWljX3N5bXRhYiBcCisrICAoKGxvbmcgKCopIChiZmQgKiwgYXN5bWJvbCAqKikpIF9iZmRfbjEpCisrI2RlZmluZSBfYmZkX25vZHluYW1pY19nZXRfc3ludGhldGljX3N5bXRhYiBcCisrICAoKGxvbmcgKCopIChiZmQgKiwgbG9uZywgYXN5bWJvbCAqKiwgbG9uZywgYXN5bWJvbCAqKiwgYXN5bWJvbCAqKikpIF9iZmRfbjEpCisrI2RlZmluZSBfYmZkX25vZHluYW1pY19nZXRfZHluYW1pY19yZWxvY191cHBlcl9ib3VuZCBfYmZkX24xCisrI2RlZmluZSBfYmZkX25vZHluYW1pY19jYW5vbmljYWxpemVfZHluYW1pY19yZWxvYyBcCisrICAoKGxvbmcgKCopIChiZmQgKiwgYXJlbGVudCAqKiwgYXN5bWJvbCAqKikpIF9iZmRfbjEpCisrDAorKy8qIEdlbmVyaWMgcm91dGluZSB0byBkZXRlcm1pbmUgb2YgdGhlIGdpdmVuIHN5bWJvbCBpcyBhIGxvY2FsCisrICAgbGFiZWwuICAqLworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfZ2VuZXJpY19pc19sb2NhbF9sYWJlbF9uYW1lCisrICAoYmZkICosIGNvbnN0IGNoYXIgKik7CisrCisrLyogR2VuZXJpYyBtaW5pc3ltYm9sIHJvdXRpbmVzLiAgKi8KKytleHRlcm4gbG9uZyBfYmZkX2dlbmVyaWNfcmVhZF9taW5pc3ltYm9scworKyAgKGJmZCAqLCBiZmRfYm9vbGVhbiwgdm9pZCAqKiwgdW5zaWduZWQgaW50ICopOworK2V4dGVybiBhc3ltYm9sICpfYmZkX2dlbmVyaWNfbWluaXN5bWJvbF90b19zeW1ib2wKKysgIChiZmQgKiwgYmZkX2Jvb2xlYW4sIGNvbnN0IHZvaWQgKiwgYXN5bWJvbCAqKTsKKysKKysvKiBGaW5kIHRoZSBuZWFyZXN0IGxpbmUgdXNpbmcgLnN0YWIvLnN0YWJzdHIgc2VjdGlvbnMuICAqLworK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX3N0YWJfc2VjdGlvbl9maW5kX25lYXJlc3RfbGluZQorKyAgKGJmZCAqLCBhc3ltYm9sICoqLCBhc2VjdGlvbiAqLCBiZmRfdm1hLCBiZmRfYm9vbGVhbiAqLAorKyAgIGNvbnN0IGNoYXIgKiosIGNvbnN0IGNoYXIgKiosIHVuc2lnbmVkIGludCAqLCB2b2lkICoqKTsKKysKKysvKiBGaW5kIHRoZSBuZWFyZXN0IGxpbmUgdXNpbmcgRFdBUkYgMSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICAqLworK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX2R3YXJmMV9maW5kX25lYXJlc3RfbGluZQorKyAgKGJmZCAqLCBhc2VjdGlvbiAqLCBhc3ltYm9sICoqLCBiZmRfdm1hLCBjb25zdCBjaGFyICoqLAorKyAgIGNvbnN0IGNoYXIgKiosIHVuc2lnbmVkIGludCAqKTsKKysKKysvKiBGaW5kIHRoZSBuZWFyZXN0IGxpbmUgdXNpbmcgRFdBUkYgMiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICAqLworK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX2R3YXJmMl9maW5kX25lYXJlc3RfbGluZQorKyAgKGJmZCAqLCBhc2VjdGlvbiAqLCBhc3ltYm9sICoqLCBiZmRfdm1hLCBjb25zdCBjaGFyICoqLCBjb25zdCBjaGFyICoqLAorKyAgIHVuc2lnbmVkIGludCAqLCB1bnNpZ25lZCBpbnQsIHZvaWQgKiopOworKworKy8qIEZpbmQgdGhlIGxpbmUgdXNpbmcgRFdBUkYgMiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICAqLworK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX2R3YXJmMl9maW5kX2xpbmUKKysgIChiZmQgKiwgYXN5bWJvbCAqKiwgYXN5bWJvbCAqLCBjb25zdCBjaGFyICoqLAorKyAgIHVuc2lnbmVkIGludCAqLCB1bnNpZ25lZCBpbnQsIHZvaWQgKiopOworKworK2JmZF9ib29sZWFuIF9iZmRfZ2VuZXJpY19maW5kX2xpbmUKKysgIChiZmQgKiwgYXN5bWJvbCAqKiwgYXN5bWJvbCAqLCBjb25zdCBjaGFyICoqLCB1bnNpZ25lZCBpbnQgKik7CisrCisrLyogRmluZCBpbmxpbmVyIGluZm8gYWZ0ZXIgY2FsbGluZyBiZmRfZmluZF9uZWFyZXN0X2xpbmUuICovCisrZXh0ZXJuIGJmZF9ib29sZWFuIF9iZmRfZHdhcmYyX2ZpbmRfaW5saW5lcl9pbmZvCisrICAoYmZkICosIGNvbnN0IGNoYXIgKiosIGNvbnN0IGNoYXIgKiosIHVuc2lnbmVkIGludCAqLCB2b2lkICoqKTsKKysgIAorKy8qIENyZWF0ZSBhIG5ldyBzZWN0aW9uIGVudHJ5LiAgKi8KKytleHRlcm4gc3RydWN0IGJmZF9oYXNoX2VudHJ5ICpiZmRfc2VjdGlvbl9oYXNoX25ld2Z1bmMKKysgIChzdHJ1Y3QgYmZkX2hhc2hfZW50cnkgKiwgc3RydWN0IGJmZF9oYXNoX3RhYmxlICosIGNvbnN0IGNoYXIgKik7CisrCisrLyogQSByb3V0aW5lIHRvIGNyZWF0ZSBlbnRyaWVzIGZvciBhIGJmZF9saW5rX2hhc2hfdGFibGUuICAqLworK2V4dGVybiBzdHJ1Y3QgYmZkX2hhc2hfZW50cnkgKl9iZmRfbGlua19oYXNoX25ld2Z1bmMKKysgIChzdHJ1Y3QgYmZkX2hhc2hfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgYmZkX2hhc2hfdGFibGUgKnRhYmxlLAorKyAgIGNvbnN0IGNoYXIgKnN0cmluZyk7CisrCisrLyogSW5pdGlhbGl6ZSBhIGJmZF9saW5rX2hhc2hfdGFibGUuICAqLworK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX2xpbmtfaGFzaF90YWJsZV9pbml0CisrICAoc3RydWN0IGJmZF9saW5rX2hhc2hfdGFibGUgKiwgYmZkICosCisrICAgc3RydWN0IGJmZF9oYXNoX2VudHJ5ICooKikgKHN0cnVjdCBiZmRfaGFzaF9lbnRyeSAqLAorKwkJCSAgICAgICBzdHJ1Y3QgYmZkX2hhc2hfdGFibGUgKiwKKysJCQkgICAgICAgY29uc3QgY2hhciAqKSwKKysgICB1bnNpZ25lZCBpbnQpOworKworKy8qIEdlbmVyaWMgbGluayBoYXNoIHRhYmxlIGNyZWF0aW9uIHJvdXRpbmUuICAqLworK2V4dGVybiBzdHJ1Y3QgYmZkX2xpbmtfaGFzaF90YWJsZSAqX2JmZF9nZW5lcmljX2xpbmtfaGFzaF90YWJsZV9jcmVhdGUKKysgIChiZmQgKik7CisrCisrLyogR2VuZXJpYyBsaW5rIGhhc2ggdGFibGUgZGVzdHJ1Y3Rpb24gcm91dGluZS4gICovCisrZXh0ZXJuIHZvaWQgX2JmZF9nZW5lcmljX2xpbmtfaGFzaF90YWJsZV9mcmVlCisrICAoc3RydWN0IGJmZF9saW5rX2hhc2hfdGFibGUgKik7CisrCisrLyogR2VuZXJpYyBhZGQgc3ltYm9sIHJvdXRpbmUuICAqLworK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX2dlbmVyaWNfbGlua19hZGRfc3ltYm9scworKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKysKKysvKiBHZW5lcmljIGFkZCBzeW1ib2wgcm91dGluZS4gIFRoaXMgdmVyc2lvbiBpcyB1c2VkIGJ5IHRhcmdldHMgZm9yCisrICAgd2hpY2ggdGhlIGxpbmtlciBtdXN0IGNvbGxlY3QgY29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycyBieSBuYW1lLAorKyAgIGFzIHRoZSBjb2xsZWN0MiBwcm9ncmFtIGRvZXMuICAqLworK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX2dlbmVyaWNfbGlua19hZGRfc3ltYm9sc19jb2xsZWN0CisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOworKworKy8qIEdlbmVyaWMgYXJjaGl2ZSBhZGQgc3ltYm9sIHJvdXRpbmUuICAqLworK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX2dlbmVyaWNfbGlua19hZGRfYXJjaGl2ZV9zeW1ib2xzCisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosCisrICAgYmZkX2Jvb2xlYW4gKCopIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKiwgYmZkX2Jvb2xlYW4gKikpOworKworKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gdG8gYXZvaWQgcHJvdG90eXBlIGVycm9ycy4gICovCisrdHlwZWRlZiBzdHJ1Y3QgYmZkX2xpbmtfaGFzaF9lbnRyeSBfYmZkX2xpbmtfaGFzaF9lbnRyeTsKKysKKysvKiBHZW5lcmljIHJvdXRpbmUgdG8gYWRkIGEgc2luZ2xlIHN5bWJvbC4gICovCisrZXh0ZXJuIGJmZF9ib29sZWFuIF9iZmRfZ2VuZXJpY19saW5rX2FkZF9vbmVfc3ltYm9sCisrICAoc3RydWN0IGJmZF9saW5rX2luZm8gKiwgYmZkICosIGNvbnN0IGNoYXIgKm5hbWUsIGZsYWd3b3JkLAorKyAgIGFzZWN0aW9uICosIGJmZF92bWEsIGNvbnN0IGNoYXIgKiwgYmZkX2Jvb2xlYW4gY29weSwKKysgICBiZmRfYm9vbGVhbiBjb25zdHJ1Y3Rvciwgc3RydWN0IGJmZF9saW5rX2hhc2hfZW50cnkgKiopOworKworKy8qIEdlbmVyaWMgcm91dGluZSB0byBtYXJrIHNlY3Rpb24gYXMgc3VwcGx5aW5nIHN5bWJvbHMgb25seS4gICovCisrZXh0ZXJuIHZvaWQgX2JmZF9nZW5lcmljX2xpbmtfanVzdF9zeW1zCisrICAoYXNlY3Rpb24gKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrCisrLyogR2VuZXJpYyBsaW5rIHJvdXRpbmUuICAqLworK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX2dlbmVyaWNfZmluYWxfbGluaworKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKysKKytleHRlcm4gYmZkX2Jvb2xlYW4gX2JmZF9nZW5lcmljX2xpbmtfc3BsaXRfc2VjdGlvbgorKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX3NlY3Rpb24gKik7CisrCisrZXh0ZXJuIHZvaWQgX2JmZF9nZW5lcmljX3NlY3Rpb25fYWxyZWFkeV9saW5rZWQKKysgIChiZmQgKiwgc3RydWN0IGJmZF9zZWN0aW9uICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOworKworKy8qIEdlbmVyaWMgcmVsb2NfbGlua19vcmRlciBwcm9jZXNzaW5nIHJvdXRpbmUuICAqLworK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX2dlbmVyaWNfcmVsb2NfbGlua19vcmRlcgorKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBhc2VjdGlvbiAqLCBzdHJ1Y3QgYmZkX2xpbmtfb3JkZXIgKik7CisrCisrLyogRGVmYXVsdCBsaW5rIG9yZGVyIHByb2Nlc3Npbmcgcm91dGluZS4gICovCisrZXh0ZXJuIGJmZF9ib29sZWFuIF9iZmRfZGVmYXVsdF9saW5rX29yZGVyCisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIGFzZWN0aW9uICosIHN0cnVjdCBiZmRfbGlua19vcmRlciAqKTsKKysKKysvKiBDb3VudCB0aGUgbnVtYmVyIG9mIHJlbG9jIGVudHJpZXMgaW4gYSBsaW5rIG9yZGVyIGxpc3QuICAqLworK2V4dGVybiB1bnNpZ25lZCBpbnQgX2JmZF9jb3VudF9saW5rX29yZGVyX3JlbG9jcworKyAgKHN0cnVjdCBiZmRfbGlua19vcmRlciAqKTsKKysKKysvKiBGaW5hbCBsaW5rIHJlbG9jYXRpb24gcm91dGluZS4gICovCisrZXh0ZXJuIGJmZF9yZWxvY19zdGF0dXNfdHlwZSBfYmZkX2ZpbmFsX2xpbmtfcmVsb2NhdGUKKysgIChyZWxvY19ob3d0b190eXBlICosIGJmZCAqLCBhc2VjdGlvbiAqLCBiZmRfYnl0ZSAqLAorKyAgIGJmZF92bWEsIGJmZF92bWEsIGJmZF92bWEpOworKworKy8qIFJlbG9jYXRlIGEgcGFydGljdWxhciBsb2NhdGlvbiBieSBhIGhvd3RvIGFuZCBhIHZhbHVlLiAgKi8KKytleHRlcm4gYmZkX3JlbG9jX3N0YXR1c190eXBlIF9iZmRfcmVsb2NhdGVfY29udGVudHMKKysgIChyZWxvY19ob3d0b190eXBlICosIGJmZCAqLCBiZmRfdm1hLCBiZmRfYnl0ZSAqKTsKKysKKysvKiBDbGVhciBhIGdpdmVuIGxvY2F0aW9uIHVzaW5nIGEgZ2l2ZW4gaG93dG8uICAqLworK2V4dGVybiB2b2lkIF9iZmRfY2xlYXJfY29udGVudHMgKHJlbG9jX2hvd3RvX3R5cGUgKmhvd3RvLCBiZmQgKmlucHV0X2JmZCwKKysJCQkJIGJmZF9ieXRlICpsb2NhdGlvbik7CisrCisrLyogTGluayBzdGFicyBpbiBzZWN0aW9ucyBpbiB0aGUgZmlyc3QgcGFzcy4gICovCisrCisrZXh0ZXJuIGJmZF9ib29sZWFuIF9iZmRfbGlua19zZWN0aW9uX3N0YWJzCisrICAoYmZkICosIHN0cnVjdCBzdGFiX2luZm8gKiwgYXNlY3Rpb24gKiwgYXNlY3Rpb24gKiwgdm9pZCAqKiwKKysgICBiZmRfc2l6ZV90eXBlICopOworKworKy8qIEVsaW1pbmF0ZSBzdGFicyBmb3IgZGlzY2FyZGVkIGZ1bmN0aW9ucyBhbmQgc3ltYm9scy4gICovCisrZXh0ZXJuIGJmZF9ib29sZWFuIF9iZmRfZGlzY2FyZF9zZWN0aW9uX3N0YWJzCisrICAoYmZkICosIGFzZWN0aW9uICosIHZvaWQgKiwgYmZkX2Jvb2xlYW4gKCopIChiZmRfdm1hLCB2b2lkICopLCB2b2lkICopOworKworKy8qIFdyaXRlIG91dCB0aGUgLnN0YWIgc2VjdGlvbiB3aGVuIGxpbmtpbmcgc3RhYnMgaW4gc2VjdGlvbnMuICAqLworKworK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX3dyaXRlX3NlY3Rpb25fc3RhYnMKKysgIChiZmQgKiwgc3RydWN0IHN0YWJfaW5mbyAqLCBhc2VjdGlvbiAqLCB2b2lkICoqLCBiZmRfYnl0ZSAqKTsKKysKKysvKiBXcml0ZSBvdXQgdGhlIC5zdGFic3RyIHN0cmluZyB0YWJsZSB3aGVuIGxpbmtpbmcgc3RhYnMgaW4gc2VjdGlvbnMuICAqLworKworK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX3dyaXRlX3N0YWJfc3RyaW5ncworKyAgKGJmZCAqLCBzdHJ1Y3Qgc3RhYl9pbmZvICopOworKworKy8qIEZpbmQgYW4gb2Zmc2V0IHdpdGhpbiBhIC5zdGFiIHNlY3Rpb24gd2hlbiBsaW5raW5nIHN0YWJzIGluCisrICAgc2VjdGlvbnMuICAqLworKworK2V4dGVybiBiZmRfdm1hIF9iZmRfc3RhYl9zZWN0aW9uX29mZnNldAorKyAgKGFzZWN0aW9uICosIHZvaWQgKiwgYmZkX3ZtYSk7CisrCisrLyogUmVnaXN0ZXIgYSBTRUNfTUVSR0Ugc2VjdGlvbiBhcyBhIGNhbmRpZGF0ZSBmb3IgbWVyZ2luZy4gICovCisrCisrZXh0ZXJuIGJmZF9ib29sZWFuIF9iZmRfYWRkX21lcmdlX3NlY3Rpb24KKysgIChiZmQgKiwgdm9pZCAqKiwgYXNlY3Rpb24gKiwgdm9pZCAqKik7CisrCisrLyogQXR0ZW1wdCB0byBtZXJnZSBTRUNfTUVSR0Ugc2VjdGlvbnMuICAqLworKworK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX21lcmdlX3NlY3Rpb25zCisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIHZvaWQgKiwgdm9pZCAoKikgKGJmZCAqLCBhc2VjdGlvbiAqKSk7CisrCisrLyogV3JpdGUgb3V0IGEgbWVyZ2VkIHNlY3Rpb24uICAqLworKworK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX3dyaXRlX21lcmdlZF9zZWN0aW9uCisrICAoYmZkICosIGFzZWN0aW9uICosIHZvaWQgKik7CisrCisrLyogRmluZCBhbiBvZmZzZXQgd2l0aGluIGEgbW9kaWZpZWQgU0VDX01FUkdFIHNlY3Rpb24uICAqLworKworK2V4dGVybiBiZmRfdm1hIF9iZmRfbWVyZ2VkX3NlY3Rpb25fb2Zmc2V0CisrICAoYmZkICosIGFzZWN0aW9uICoqLCB2b2lkICosIGJmZF92bWEpOworKworKy8qIENyZWF0ZSBhIHN0cmluZyB0YWJsZS4gICovCisrZXh0ZXJuIHN0cnVjdCBiZmRfc3RydGFiX2hhc2ggKl9iZmRfc3RyaW5ndGFiX2luaXQKKysgICh2b2lkKTsKKysKKysvKiBDcmVhdGUgYW4gWENPRkYgLmRlYnVnIHNlY3Rpb24gc3R5bGUgc3RyaW5nIHRhYmxlLiAgKi8KKytleHRlcm4gc3RydWN0IGJmZF9zdHJ0YWJfaGFzaCAqX2JmZF94Y29mZl9zdHJpbmd0YWJfaW5pdAorKyAgKHZvaWQpOworKworKy8qIEZyZWUgYSBzdHJpbmcgdGFibGUuICAqLworK2V4dGVybiB2b2lkIF9iZmRfc3RyaW5ndGFiX2ZyZWUKKysgIChzdHJ1Y3QgYmZkX3N0cnRhYl9oYXNoICopOworKworKy8qIEdldCB0aGUgc2l6ZSBvZiBhIHN0cmluZyB0YWJsZS4gICovCisrZXh0ZXJuIGJmZF9zaXplX3R5cGUgX2JmZF9zdHJpbmd0YWJfc2l6ZQorKyAgKHN0cnVjdCBiZmRfc3RydGFiX2hhc2ggKik7CisrCisrLyogQWRkIGEgc3RyaW5nIHRvIGEgc3RyaW5nIHRhYmxlLiAgKi8KKytleHRlcm4gYmZkX3NpemVfdHlwZSBfYmZkX3N0cmluZ3RhYl9hZGQKKysgIChzdHJ1Y3QgYmZkX3N0cnRhYl9oYXNoICosIGNvbnN0IGNoYXIgKiwgYmZkX2Jvb2xlYW4gaGFzaCwgYmZkX2Jvb2xlYW4gY29weSk7CisrCisrLyogV3JpdGUgb3V0IGEgc3RyaW5nIHRhYmxlLiAgKi8KKytleHRlcm4gYmZkX2Jvb2xlYW4gX2JmZF9zdHJpbmd0YWJfZW1pdAorKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX3N0cnRhYl9oYXNoICopOworKworKy8qIENoZWNrIHRoYXQgZW5kaWFubmVzcyBvZiBpbnB1dCBhbmQgb3V0cHV0IGZpbGUgbWF0Y2guICAqLworK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX2dlbmVyaWNfdmVyaWZ5X2VuZGlhbl9tYXRjaAorKyAgKGJmZCAqLCBiZmQgKik7CisrDAorKy8qIE1hY3JvcyB0byB0ZWxsIGlmIGJmZHMgYXJlIHJlYWQgb3Igd3JpdGUgZW5hYmxlZC4KKysKKysgICBOb3RlIHRoYXQgYmZkcyBvcGVuIGZvciByZWFkIG1heSBiZSBzY3JpYmJsZWQgaW50byBpZiB0aGUgZmQgcGFzc2VkCisrICAgdG8gYmZkX2Zkb3BlbnIgaXMgYWN0dWFsbHkgb3BlbiBib3RoIGZvciByZWFkIGFuZCB3cml0ZQorKyAgIHNpbXVsdGFuZW91c2x5LiAgSG93ZXZlciBhbiBvdXRwdXQgYmZkIHdpbGwgbmV2ZXIgYmUgb3BlbiBmb3IKKysgICByZWFkLiAgVGhlcmVmb3JlIHNvbWV0aW1lcyB5b3Ugd2FudCB0byBjaGVjayBiZmRfcmVhZF9wIG9yCisrICAgIWJmZF9yZWFkX3AsIGFuZCBvbmx5IHNvbWV0aW1lcyBiZmRfd3JpdGVfcC4KKysqLworKworKyNkZWZpbmUJYmZkX3JlYWRfcChhYmZkKSBcCisrICAoKGFiZmQpLT5kaXJlY3Rpb24gPT0gcmVhZF9kaXJlY3Rpb24gfHwgKGFiZmQpLT5kaXJlY3Rpb24gPT0gYm90aF9kaXJlY3Rpb24pCisrI2RlZmluZQliZmRfd3JpdGVfcChhYmZkKSBcCisrICAoKGFiZmQpLT5kaXJlY3Rpb24gPT0gd3JpdGVfZGlyZWN0aW9uIHx8IChhYmZkKS0+ZGlyZWN0aW9uID09IGJvdGhfZGlyZWN0aW9uKQorKworK3ZvaWQgYmZkX2Fzc2VydAorKyAgKGNvbnN0IGNoYXIqLGludCk7CisrCisrI2RlZmluZSBCRkRfQVNTRVJUKHgpIFwKKysgIGRvIHsgaWYgKCEoeCkpIGJmZF9hc3NlcnQoX19GSUxFX18sX19MSU5FX18pOyB9IHdoaWxlICgwKQorKworKyNkZWZpbmUgQkZEX0ZBSUwoKSBcCisrICBkbyB7IGJmZF9hc3NlcnQoX19GSUxFX18sX19MSU5FX18pOyB9IHdoaWxlICgwKQorKworK2V4dGVybiB2b2lkIF9iZmRfYWJvcnQKKysgIChjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKSBBVFRSSUJVVEVfTk9SRVRVUk47CisrCisrLyogaWYgZ2NjID49IDIuNiwgd2UgY2FuIGdpdmUgYSBmdW5jdGlvbiBuYW1lLCB0b28gKi8KKysjaWYgX19HTlVDX18gPCAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDwgNikKKysjZGVmaW5lIF9fUFJFVFRZX0ZVTkNUSU9OX18gICgoY2hhciAqKSBOVUxMKQorKyNlbmRpZgorKworKyN1bmRlZiBhYm9ydAorKyNkZWZpbmUgYWJvcnQoKSBfYmZkX2Fib3J0IChfX0ZJTEVfXywgX19MSU5FX18sIF9fUFJFVFRZX0ZVTkNUSU9OX18pCisrCisrLyogTWFuaXB1bGF0ZSBhIHN5c3RlbSBGSUxFIGJ1dCB1c2luZyBCRkQncyAiZmlsZV9wdHIiLCByYXRoZXIgdGhhbgorKyAgIHRoZSBzeXN0ZW0gIm9mZl90IiBvciAib2ZmNjRfdCIsIGFzIHRoZSBvZmZzZXQuICAqLworK2V4dGVybiBmaWxlX3B0ciByZWFsX2Z0ZWxsIChGSUxFICpmaWxlKTsKKytleHRlcm4gaW50IHJlYWxfZnNlZWsgKEZJTEUgKmZpbGUsIGZpbGVfcHRyIG9mZnNldCwgaW50IHdoZW5jZSk7CisrZXh0ZXJuIEZJTEUgKnJlYWxfZm9wZW4gKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICptb2Rlcyk7CisrCisrLyogTGlzdCBvZiBzdXBwb3J0ZWQgdGFyZ2V0IHZlY3RvcnMsIGFuZCB0aGUgZGVmYXVsdCB2ZWN0b3IgKGlmCisrICAgYmZkX2RlZmF1bHRfdmVjdG9yWzBdIGlzIE5VTEwsIHRoZXJlIGlzIG5vIGRlZmF1bHQpLiAgKi8KKytleHRlcm4gY29uc3QgYmZkX3RhcmdldCAqIGNvbnN0ICpiZmRfdGFyZ2V0X3ZlY3RvcjsKKytleHRlcm4gY29uc3QgYmZkX3RhcmdldCAqYmZkX2RlZmF1bHRfdmVjdG9yW107CisrCisrLyogTGlzdCBvZiBhc3NvY2lhdGVkIHRhcmdldCB2ZWN0b3JzLiAgKi8KKytleHRlcm4gY29uc3QgYmZkX3RhcmdldCAqIGNvbnN0ICpiZmRfYXNzb2NpYXRlZF92ZWN0b3I7CisrCisrLyogRnVuY3Rpb25zIHNoYXJlZCBieSB0aGUgRUNPRkYgYW5kIE1JUFMgRUxGIGJhY2tlbmRzLCB3aGljaCBoYXZlIG5vCisrICAgb3RoZXIgY29tbW9uIGhlYWRlciBmaWxlcy4gICovCisrCisrI2lmIGRlZmluZWQoX19TVERDX18pIHx8IGRlZmluZWQoQUxNT1NUX1NUREMpCisrc3RydWN0IGVjb2ZmX2ZpbmRfbGluZTsKKysjZW5kaWYKKysKKytleHRlcm4gYmZkX2Jvb2xlYW4gX2JmZF9lY29mZl9sb2NhdGVfbGluZQorKyAgKGJmZCAqLCBhc2VjdGlvbiAqLCBiZmRfdm1hLCBzdHJ1Y3QgZWNvZmZfZGVidWdfaW5mbyAqIGNvbnN0LAorKyAgIGNvbnN0IHN0cnVjdCBlY29mZl9kZWJ1Z19zd2FwICogY29uc3QsIHN0cnVjdCBlY29mZl9maW5kX2xpbmUgKiwKKysgICBjb25zdCBjaGFyICoqLCBjb25zdCBjaGFyICoqLCB1bnNpZ25lZCBpbnQgKik7CisrZXh0ZXJuIGJmZF9ib29sZWFuIF9iZmRfZWNvZmZfZ2V0X2FjY3VtdWxhdGVkX3BkcgorKyAgKHZvaWQgKiwgYmZkX2J5dGUgKik7CisrZXh0ZXJuIGJmZF9ib29sZWFuIF9iZmRfZWNvZmZfZ2V0X2FjY3VtdWxhdGVkX3N5bQorKyAgKHZvaWQgKiwgYmZkX2J5dGUgKik7CisrZXh0ZXJuIGJmZF9ib29sZWFuIF9iZmRfZWNvZmZfZ2V0X2FjY3VtdWxhdGVkX3NzCisrICAodm9pZCAqLCBiZmRfYnl0ZSAqKTsKKysKKytleHRlcm4gYmZkX3ZtYSBfYmZkX2dldF9ncF92YWx1ZQorKyAgKGJmZCAqKTsKKytleHRlcm4gdm9pZCBfYmZkX3NldF9ncF92YWx1ZQorKyAgKGJmZCAqLCBiZmRfdm1hKTsKKysKKysvKiBGdW5jdGlvbiBzaGFyZWQgYnkgdGhlIENPRkYgYW5kIEVMRiBTSCBiYWNrZW5kcywgd2hpY2ggaGF2ZSBubworKyAgIG90aGVyIGNvbW1vbiBoZWFkZXIgZmlsZXMuICAqLworKworKyNpZm5kZWYgX2JmZF9zaF9hbGlnbl9sb2FkX3NwYW4KKytleHRlcm4gYmZkX2Jvb2xlYW4gX2JmZF9zaF9hbGlnbl9sb2FkX3NwYW4KKysgIChiZmQgKiwgYXNlY3Rpb24gKiwgYmZkX2J5dGUgKiwKKysgICBiZmRfYm9vbGVhbiAoKikgKGJmZCAqLCBhc2VjdGlvbiAqLCB2b2lkICosIGJmZF9ieXRlICosIGJmZF92bWEpLAorKyAgIHZvaWQgKiwgYmZkX3ZtYSAqKiwgYmZkX3ZtYSAqLCBiZmRfdm1hLCBiZmRfdm1hLCBiZmRfYm9vbGVhbiAqKTsKKysjZW5kaWYKKysKKysvKiBUaGlzIGlzIHRoZSBzaGFwZSBvZiB0aGUgZWxlbWVudHMgaW5zaWRlIHRoZSBhbHJlYWR5X2xpbmtlZCBoYXNoCisrICAgdGFibGUuIEl0IG1hcHMgYSBuYW1lIG9udG8gYSBsaXN0IG9mIGFscmVhZHlfbGlua2VkIGVsZW1lbnRzIHdpdGgKKysgICB0aGUgc2FtZSBuYW1lLiAgKi8KKysKKytzdHJ1Y3QgYmZkX3NlY3Rpb25fYWxyZWFkeV9saW5rZWRfaGFzaF9lbnRyeQorK3sKKysgIHN0cnVjdCBiZmRfaGFzaF9lbnRyeSByb290OworKyAgc3RydWN0IGJmZF9zZWN0aW9uX2FscmVhZHlfbGlua2VkICplbnRyeTsKKyt9OworKworK3N0cnVjdCBiZmRfc2VjdGlvbl9hbHJlYWR5X2xpbmtlZAorK3sKKysgIHN0cnVjdCBiZmRfc2VjdGlvbl9hbHJlYWR5X2xpbmtlZCAqbmV4dDsKKysgIGFzZWN0aW9uICpzZWM7CisrfTsKKysKKytleHRlcm4gc3RydWN0IGJmZF9zZWN0aW9uX2FscmVhZHlfbGlua2VkX2hhc2hfZW50cnkgKgorKyAgYmZkX3NlY3Rpb25fYWxyZWFkeV9saW5rZWRfdGFibGVfbG9va3VwIChjb25zdCBjaGFyICopOworK2V4dGVybiBiZmRfYm9vbGVhbiBiZmRfc2VjdGlvbl9hbHJlYWR5X2xpbmtlZF90YWJsZV9pbnNlcnQKKysgIChzdHJ1Y3QgYmZkX3NlY3Rpb25fYWxyZWFkeV9saW5rZWRfaGFzaF9lbnRyeSAqLCBhc2VjdGlvbiAqKTsKKytleHRlcm4gdm9pZCBiZmRfc2VjdGlvbl9hbHJlYWR5X2xpbmtlZF90YWJsZV90cmF2ZXJzZQorKyAgKGJmZF9ib29sZWFuICgqKSAoc3RydWN0IGJmZF9zZWN0aW9uX2FscmVhZHlfbGlua2VkX2hhc2hfZW50cnkgKiwKKysJCSAgICB2b2lkICopLCB2b2lkICopOworKworK2V4dGVybiBiZmRfdm1hIHJlYWRfdW5zaWduZWRfbGViMTI4IChiZmQgKiwgYmZkX2J5dGUgKiwgdW5zaWduZWQgaW50ICopOworK2V4dGVybiBiZmRfc2lnbmVkX3ZtYSByZWFkX3NpZ25lZF9sZWIxMjggKGJmZCAqLCBiZmRfYnl0ZSAqLCB1bnNpZ25lZCBpbnQgKik7CisrCisrLyogRXh0cmFjdGVkIGZyb20gaW5pdC5jLiAgKi8KKysvKiBFeHRyYWN0ZWQgZnJvbSBsaWJiZmQuYy4gICovCisrYmZkX2Jvb2xlYW4gYmZkX3dyaXRlX2JpZ2VuZGlhbl80Ynl0ZV9pbnQgKGJmZCAqLCB1bnNpZ25lZCBpbnQpOworKworK3Vuc2lnbmVkIGludCBiZmRfbG9nMiAoYmZkX3ZtYSB4KTsKKysKKysvKiBFeHRyYWN0ZWQgZnJvbSBiZmRpby5jLiAgKi8KKytzdHJ1Y3QgYmZkX2lvdmVjCisreworKyAgLyogVG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBtYWNyb3MsIGEgImIiIHJhdGhlciB0aGFuICJmIgorKyAgICAgcHJlZml4IGlzIHByZXBlbmRlZCB0byBlYWNoIG1ldGhvZCBuYW1lLiAgKi8KKysgIC8qIEF0dGVtcHQgdG8gcmVhZC93cml0ZSBOQllURVMgb24gQUJGRCdzIElPU1RSRUFNIHN0b3JpbmcvZmV0Y2hpbmcKKysgICAgIGJ5dGVzIHN0YXJ0aW5nIGF0IFBUUi4gIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5CisrICAgICB0cmFuc2ZlcmVkIChhIHJlYWQgcGFzdCBlbmQtb2YtZmlsZSByZXR1cm5zIGxlc3MgdGhhbiBOQllURVMpLAorKyAgICAgb3IgLTEgKHNldHRpbmcgPDxiZmRfZXJyb3I+PikgaWYgYW4gZXJyb3Igb2NjdXJzLiAgKi8KKysgIGZpbGVfcHRyICgqYnJlYWQpIChzdHJ1Y3QgYmZkICphYmZkLCB2b2lkICpwdHIsIGZpbGVfcHRyIG5ieXRlcyk7CisrICBmaWxlX3B0ciAoKmJ3cml0ZSkgKHN0cnVjdCBiZmQgKmFiZmQsIGNvbnN0IHZvaWQgKnB0ciwKKysgICAgICAgICAgICAgICAgICAgICAgZmlsZV9wdHIgbmJ5dGVzKTsKKysgIC8qIFJldHVybiB0aGUgY3VycmVudCBJT1NUUkVBTSBmaWxlIG9mZnNldCwgb3IgLTEgKHNldHRpbmcgPDxiZmRfZXJyb3I+PgorKyAgICAgaWYgYW4gZXJyb3Igb2NjdXJzLiAgKi8KKysgIGZpbGVfcHRyICgqYnRlbGwpIChzdHJ1Y3QgYmZkICphYmZkKTsKKysgIC8qIEZvciB0aGUgZm9sbG93aW5nLCBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24gYSB2YWx1ZSBvZiAwIGlzIHJldHVybmVkLgorKyAgICAgT3RoZXJ3aXNlLCBhIHZhbHVlIG9mIC0xIGlzIHJldHVybmVkIChhbmQgIDw8YmZkX2Vycm9yPj4gaXMgc2V0KS4gICovCisrICBpbnQgKCpic2VlaykgKHN0cnVjdCBiZmQgKmFiZmQsIGZpbGVfcHRyIG9mZnNldCwgaW50IHdoZW5jZSk7CisrICBpbnQgKCpiY2xvc2UpIChzdHJ1Y3QgYmZkICphYmZkKTsKKysgIGludCAoKmJmbHVzaCkgKHN0cnVjdCBiZmQgKmFiZmQpOworKyAgaW50ICgqYnN0YXQpIChzdHJ1Y3QgYmZkICphYmZkLCBzdHJ1Y3Qgc3RhdCAqc2IpOworK307CisrLyogRXh0cmFjdGVkIGZyb20gYmZkd2luLmMuICAqLworK3N0cnVjdCBfYmZkX3dpbmRvd19pbnRlcm5hbCB7CisrICBzdHJ1Y3QgX2JmZF93aW5kb3dfaW50ZXJuYWwgKm5leHQ7CisrICB2b2lkICpkYXRhOworKyAgYmZkX3NpemVfdHlwZSBzaXplOworKyAgaW50IHJlZmNvdW50IDogMzE7ICAgICAgICAgICAvKiBzaG91bGQgYmUgZW5vdWdoLi4uICAqLworKyAgdW5zaWduZWQgbWFwcGVkIDogMTsgICAgICAgICAvKiAxID0gbW1hcCwgMCA9IG1hbGxvYyAqLworK307CisrLyogRXh0cmFjdGVkIGZyb20gY2FjaGUuYy4gICovCisrYmZkX2Jvb2xlYW4gYmZkX2NhY2hlX2luaXQgKGJmZCAqYWJmZCk7CisrCisrYmZkX2Jvb2xlYW4gYmZkX2NhY2hlX2Nsb3NlIChiZmQgKmFiZmQpOworKworK0ZJTEUqIGJmZF9vcGVuX2ZpbGUgKGJmZCAqYWJmZCk7CisrCisrLyogRXh0cmFjdGVkIGZyb20gcmVsb2MuYy4gICovCisrI2lmZGVmIF9CRkRfTUFLRV9UQUJMRV9iZmRfcmVsb2NfY29kZV9yZWFsCisrCisrc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGJmZF9yZWxvY19jb2RlX3JlYWxfbmFtZXNbXSA9IHsgIkBAdW5pbml0aWFsaXplZEBAIiwKKysKKysgICJCRkRfUkVMT0NfNjQiLAorKyAgIkJGRF9SRUxPQ18zMiIsCisrICAiQkZEX1JFTE9DXzI2IiwKKysgICJCRkRfUkVMT0NfMjQiLAorKyAgIkJGRF9SRUxPQ18xNiIsCisrICAiQkZEX1JFTE9DXzE0IiwKKysgICJCRkRfUkVMT0NfOCIsCisrICAiQkZEX1JFTE9DXzY0X1BDUkVMIiwKKysgICJCRkRfUkVMT0NfMzJfUENSRUwiLAorKyAgIkJGRF9SRUxPQ18yNF9QQ1JFTCIsCisrICAiQkZEX1JFTE9DXzE2X1BDUkVMIiwKKysgICJCRkRfUkVMT0NfMTJfUENSRUwiLAorKyAgIkJGRF9SRUxPQ184X1BDUkVMIiwKKysgICJCRkRfUkVMT0NfMzJfU0VDUkVMIiwKKysgICJCRkRfUkVMT0NfMzJfR09UX1BDUkVMIiwKKysgICJCRkRfUkVMT0NfMTZfR09UX1BDUkVMIiwKKysgICJCRkRfUkVMT0NfOF9HT1RfUENSRUwiLAorKyAgIkJGRF9SRUxPQ18zMl9HT1RPRkYiLAorKyAgIkJGRF9SRUxPQ18xNl9HT1RPRkYiLAorKyAgIkJGRF9SRUxPQ19MTzE2X0dPVE9GRiIsCisrICAiQkZEX1JFTE9DX0hJMTZfR09UT0ZGIiwKKysgICJCRkRfUkVMT0NfSEkxNl9TX0dPVE9GRiIsCisrICAiQkZEX1JFTE9DXzhfR09UT0ZGIiwKKysgICJCRkRfUkVMT0NfNjRfUExUX1BDUkVMIiwKKysgICJCRkRfUkVMT0NfMzJfUExUX1BDUkVMIiwKKysgICJCRkRfUkVMT0NfMjRfUExUX1BDUkVMIiwKKysgICJCRkRfUkVMT0NfMTZfUExUX1BDUkVMIiwKKysgICJCRkRfUkVMT0NfOF9QTFRfUENSRUwiLAorKyAgIkJGRF9SRUxPQ182NF9QTFRPRkYiLAorKyAgIkJGRF9SRUxPQ18zMl9QTFRPRkYiLAorKyAgIkJGRF9SRUxPQ18xNl9QTFRPRkYiLAorKyAgIkJGRF9SRUxPQ19MTzE2X1BMVE9GRiIsCisrICAiQkZEX1JFTE9DX0hJMTZfUExUT0ZGIiwKKysgICJCRkRfUkVMT0NfSEkxNl9TX1BMVE9GRiIsCisrICAiQkZEX1JFTE9DXzhfUExUT0ZGIiwKKysgICJCRkRfUkVMT0NfNjhLX0dMT0JfREFUIiwKKysgICJCRkRfUkVMT0NfNjhLX0pNUF9TTE9UIiwKKysgICJCRkRfUkVMT0NfNjhLX1JFTEFUSVZFIiwKKysgICJCRkRfUkVMT0NfMzJfQkFTRVJFTCIsCisrICAiQkZEX1JFTE9DXzE2X0JBU0VSRUwiLAorKyAgIkJGRF9SRUxPQ19MTzE2X0JBU0VSRUwiLAorKyAgIkJGRF9SRUxPQ19ISTE2X0JBU0VSRUwiLAorKyAgIkJGRF9SRUxPQ19ISTE2X1NfQkFTRVJFTCIsCisrICAiQkZEX1JFTE9DXzhfQkFTRVJFTCIsCisrICAiQkZEX1JFTE9DX1JWQSIsCisrICAiQkZEX1JFTE9DXzhfRkZubiIsCisrICAiQkZEX1JFTE9DXzMyX1BDUkVMX1MyIiwKKysgICJCRkRfUkVMT0NfMTZfUENSRUxfUzIiLAorKyAgIkJGRF9SRUxPQ18yM19QQ1JFTF9TMiIsCisrICAiQkZEX1JFTE9DX0hJMjIiLAorKyAgIkJGRF9SRUxPQ19MTzEwIiwKKysgICJCRkRfUkVMT0NfR1BSRUwxNiIsCisrICAiQkZEX1JFTE9DX0dQUkVMMzIiLAorKyAgIkJGRF9SRUxPQ19JOTYwX0NBTExKIiwKKysgICJCRkRfUkVMT0NfTk9ORSIsCisrICAiQkZEX1JFTE9DX1NQQVJDX1dESVNQMjIiLAorKyAgIkJGRF9SRUxPQ19TUEFSQzIyIiwKKysgICJCRkRfUkVMT0NfU1BBUkMxMyIsCisrICAiQkZEX1JFTE9DX1NQQVJDX0dPVDEwIiwKKysgICJCRkRfUkVMT0NfU1BBUkNfR09UMTMiLAorKyAgIkJGRF9SRUxPQ19TUEFSQ19HT1QyMiIsCisrICAiQkZEX1JFTE9DX1NQQVJDX1BDMTAiLAorKyAgIkJGRF9SRUxPQ19TUEFSQ19QQzIyIiwKKysgICJCRkRfUkVMT0NfU1BBUkNfV1BMVDMwIiwKKysgICJCRkRfUkVMT0NfU1BBUkNfQ09QWSIsCisrICAiQkZEX1JFTE9DX1NQQVJDX0dMT0JfREFUIiwKKysgICJCRkRfUkVMT0NfU1BBUkNfSk1QX1NMT1QiLAorKyAgIkJGRF9SRUxPQ19TUEFSQ19SRUxBVElWRSIsCisrICAiQkZEX1JFTE9DX1NQQVJDX1VBMTYiLAorKyAgIkJGRF9SRUxPQ19TUEFSQ19VQTMyIiwKKysgICJCRkRfUkVMT0NfU1BBUkNfVUE2NCIsCisrICAiQkZEX1JFTE9DX1NQQVJDX0JBU0UxMyIsCisrICAiQkZEX1JFTE9DX1NQQVJDX0JBU0UyMiIsCisrICAiQkZEX1JFTE9DX1NQQVJDXzEwIiwKKysgICJCRkRfUkVMT0NfU1BBUkNfMTEiLAorKyAgIkJGRF9SRUxPQ19TUEFSQ19PTE8xMCIsCisrICAiQkZEX1JFTE9DX1NQQVJDX0hIMjIiLAorKyAgIkJGRF9SRUxPQ19TUEFSQ19ITTEwIiwKKysgICJCRkRfUkVMT0NfU1BBUkNfTE0yMiIsCisrICAiQkZEX1JFTE9DX1NQQVJDX1BDX0hIMjIiLAorKyAgIkJGRF9SRUxPQ19TUEFSQ19QQ19ITTEwIiwKKysgICJCRkRfUkVMT0NfU1BBUkNfUENfTE0yMiIsCisrICAiQkZEX1JFTE9DX1NQQVJDX1dESVNQMTYiLAorKyAgIkJGRF9SRUxPQ19TUEFSQ19XRElTUDE5IiwKKysgICJCRkRfUkVMT0NfU1BBUkNfNyIsCisrICAiQkZEX1JFTE9DX1NQQVJDXzYiLAorKyAgIkJGRF9SRUxPQ19TUEFSQ181IiwKKysgICJCRkRfUkVMT0NfU1BBUkNfUExUMzIiLAorKyAgIkJGRF9SRUxPQ19TUEFSQ19QTFQ2NCIsCisrICAiQkZEX1JFTE9DX1NQQVJDX0hJWDIyIiwKKysgICJCRkRfUkVMT0NfU1BBUkNfTE9YMTAiLAorKyAgIkJGRF9SRUxPQ19TUEFSQ19INDQiLAorKyAgIkJGRF9SRUxPQ19TUEFSQ19NNDQiLAorKyAgIkJGRF9SRUxPQ19TUEFSQ19MNDQiLAorKyAgIkJGRF9SRUxPQ19TUEFSQ19SRUdJU1RFUiIsCisrICAiQkZEX1JFTE9DX1NQQVJDX1JFVjMyIiwKKysgICJCRkRfUkVMT0NfU1BBUkNfVExTX0dEX0hJMjIiLAorKyAgIkJGRF9SRUxPQ19TUEFSQ19UTFNfR0RfTE8xMCIsCisrICAiQkZEX1JFTE9DX1NQQVJDX1RMU19HRF9BREQiLAorKyAgIkJGRF9SRUxPQ19TUEFSQ19UTFNfR0RfQ0FMTCIsCisrICAiQkZEX1JFTE9DX1NQQVJDX1RMU19MRE1fSEkyMiIsCisrICAiQkZEX1JFTE9DX1NQQVJDX1RMU19MRE1fTE8xMCIsCisrICAiQkZEX1JFTE9DX1NQQVJDX1RMU19MRE1fQUREIiwKKysgICJCRkRfUkVMT0NfU1BBUkNfVExTX0xETV9DQUxMIiwKKysgICJCRkRfUkVMT0NfU1BBUkNfVExTX0xET19ISVgyMiIsCisrICAiQkZEX1JFTE9DX1NQQVJDX1RMU19MRE9fTE9YMTAiLAorKyAgIkJGRF9SRUxPQ19TUEFSQ19UTFNfTERPX0FERCIsCisrICAiQkZEX1JFTE9DX1NQQVJDX1RMU19JRV9ISTIyIiwKKysgICJCRkRfUkVMT0NfU1BBUkNfVExTX0lFX0xPMTAiLAorKyAgIkJGRF9SRUxPQ19TUEFSQ19UTFNfSUVfTEQiLAorKyAgIkJGRF9SRUxPQ19TUEFSQ19UTFNfSUVfTERYIiwKKysgICJCRkRfUkVMT0NfU1BBUkNfVExTX0lFX0FERCIsCisrICAiQkZEX1JFTE9DX1NQQVJDX1RMU19MRV9ISVgyMiIsCisrICAiQkZEX1JFTE9DX1NQQVJDX1RMU19MRV9MT1gxMCIsCisrICAiQkZEX1JFTE9DX1NQQVJDX1RMU19EVFBNT0QzMiIsCisrICAiQkZEX1JFTE9DX1NQQVJDX1RMU19EVFBNT0Q2NCIsCisrICAiQkZEX1JFTE9DX1NQQVJDX1RMU19EVFBPRkYzMiIsCisrICAiQkZEX1JFTE9DX1NQQVJDX1RMU19EVFBPRkY2NCIsCisrICAiQkZEX1JFTE9DX1NQQVJDX1RMU19UUE9GRjMyIiwKKysgICJCRkRfUkVMT0NfU1BBUkNfVExTX1RQT0ZGNjQiLAorKyAgIkJGRF9SRUxPQ19TUFVfSU1NNyIsCisrICAiQkZEX1JFTE9DX1NQVV9JTU04IiwKKysgICJCRkRfUkVMT0NfU1BVX0lNTTEwIiwKKysgICJCRkRfUkVMT0NfU1BVX0lNTTEwVyIsCisrICAiQkZEX1JFTE9DX1NQVV9JTU0xNiIsCisrICAiQkZEX1JFTE9DX1NQVV9JTU0xNlciLAorKyAgIkJGRF9SRUxPQ19TUFVfSU1NMTgiLAorKyAgIkJGRF9SRUxPQ19TUFVfUENSRUw5YSIsCisrICAiQkZEX1JFTE9DX1NQVV9QQ1JFTDliIiwKKysgICJCRkRfUkVMT0NfU1BVX1BDUkVMMTYiLAorKyAgIkJGRF9SRUxPQ19TUFVfTE8xNiIsCisrICAiQkZEX1JFTE9DX1NQVV9ISTE2IiwKKysgICJCRkRfUkVMT0NfU1BVX1BQVTMyIiwKKysgICJCRkRfUkVMT0NfU1BVX1BQVTY0IiwKKysgICJCRkRfUkVMT0NfQUxQSEFfR1BESVNQX0hJMTYiLAorKyAgIkJGRF9SRUxPQ19BTFBIQV9HUERJU1BfTE8xNiIsCisrICAiQkZEX1JFTE9DX0FMUEhBX0dQRElTUCIsCisrICAiQkZEX1JFTE9DX0FMUEhBX0xJVEVSQUwiLAorKyAgIkJGRF9SRUxPQ19BTFBIQV9FTEZfTElURVJBTCIsCisrICAiQkZEX1JFTE9DX0FMUEhBX0xJVFVTRSIsCisrICAiQkZEX1JFTE9DX0FMUEhBX0hJTlQiLAorKyAgIkJGRF9SRUxPQ19BTFBIQV9MSU5LQUdFIiwKKysgICJCRkRfUkVMT0NfQUxQSEFfQ09ERUFERFIiLAorKyAgIkJGRF9SRUxPQ19BTFBIQV9HUFJFTF9ISTE2IiwKKysgICJCRkRfUkVMT0NfQUxQSEFfR1BSRUxfTE8xNiIsCisrICAiQkZEX1JFTE9DX0FMUEhBX0JSU0dQIiwKKysgICJCRkRfUkVMT0NfQUxQSEFfVExTR0QiLAorKyAgIkJGRF9SRUxPQ19BTFBIQV9UTFNMRE0iLAorKyAgIkJGRF9SRUxPQ19BTFBIQV9EVFBNT0Q2NCIsCisrICAiQkZEX1JFTE9DX0FMUEhBX0dPVERUUFJFTDE2IiwKKysgICJCRkRfUkVMT0NfQUxQSEFfRFRQUkVMNjQiLAorKyAgIkJGRF9SRUxPQ19BTFBIQV9EVFBSRUxfSEkxNiIsCisrICAiQkZEX1JFTE9DX0FMUEhBX0RUUFJFTF9MTzE2IiwKKysgICJCRkRfUkVMT0NfQUxQSEFfRFRQUkVMMTYiLAorKyAgIkJGRF9SRUxPQ19BTFBIQV9HT1RUUFJFTDE2IiwKKysgICJCRkRfUkVMT0NfQUxQSEFfVFBSRUw2NCIsCisrICAiQkZEX1JFTE9DX0FMUEhBX1RQUkVMX0hJMTYiLAorKyAgIkJGRF9SRUxPQ19BTFBIQV9UUFJFTF9MTzE2IiwKKysgICJCRkRfUkVMT0NfQUxQSEFfVFBSRUwxNiIsCisrICAiQkZEX1JFTE9DX01JUFNfSk1QIiwKKysgICJCRkRfUkVMT0NfTUlQUzE2X0pNUCIsCisrICAiQkZEX1JFTE9DX01JUFMxNl9HUFJFTCIsCisrICAiQkZEX1JFTE9DX0hJMTYiLAorKyAgIkJGRF9SRUxPQ19ISTE2X1MiLAorKyAgIkJGRF9SRUxPQ19MTzE2IiwKKysgICJCRkRfUkVMT0NfSEkxNl9QQ1JFTCIsCisrICAiQkZEX1JFTE9DX0hJMTZfU19QQ1JFTCIsCisrICAiQkZEX1JFTE9DX0xPMTZfUENSRUwiLAorKyAgIkJGRF9SRUxPQ19NSVBTMTZfSEkxNiIsCisrICAiQkZEX1JFTE9DX01JUFMxNl9ISTE2X1MiLAorKyAgIkJGRF9SRUxPQ19NSVBTMTZfTE8xNiIsCisrICAiQkZEX1JFTE9DX01JUFNfTElURVJBTCIsCisrICAiQkZEX1JFTE9DX01JUFNfR09UMTYiLAorKyAgIkJGRF9SRUxPQ19NSVBTX0NBTEwxNiIsCisrICAiQkZEX1JFTE9DX01JUFNfR09UX0hJMTYiLAorKyAgIkJGRF9SRUxPQ19NSVBTX0dPVF9MTzE2IiwKKysgICJCRkRfUkVMT0NfTUlQU19DQUxMX0hJMTYiLAorKyAgIkJGRF9SRUxPQ19NSVBTX0NBTExfTE8xNiIsCisrICAiQkZEX1JFTE9DX01JUFNfU1VCIiwKKysgICJCRkRfUkVMT0NfTUlQU19HT1RfUEFHRSIsCisrICAiQkZEX1JFTE9DX01JUFNfR09UX09GU1QiLAorKyAgIkJGRF9SRUxPQ19NSVBTX0dPVF9ESVNQIiwKKysgICJCRkRfUkVMT0NfTUlQU19TSElGVDUiLAorKyAgIkJGRF9SRUxPQ19NSVBTX1NISUZUNiIsCisrICAiQkZEX1JFTE9DX01JUFNfSU5TRVJUX0EiLAorKyAgIkJGRF9SRUxPQ19NSVBTX0lOU0VSVF9CIiwKKysgICJCRkRfUkVMT0NfTUlQU19ERUxFVEUiLAorKyAgIkJGRF9SRUxPQ19NSVBTX0hJR0hFU1QiLAorKyAgIkJGRF9SRUxPQ19NSVBTX0hJR0hFUiIsCisrICAiQkZEX1JFTE9DX01JUFNfU0NOX0RJU1AiLAorKyAgIkJGRF9SRUxPQ19NSVBTX1JFTDE2IiwKKysgICJCRkRfUkVMT0NfTUlQU19SRUxHT1QiLAorKyAgIkJGRF9SRUxPQ19NSVBTX0pBTFIiLAorKyAgIkJGRF9SRUxPQ19NSVBTX1RMU19EVFBNT0QzMiIsCisrICAiQkZEX1JFTE9DX01JUFNfVExTX0RUUFJFTDMyIiwKKysgICJCRkRfUkVMT0NfTUlQU19UTFNfRFRQTU9ENjQiLAorKyAgIkJGRF9SRUxPQ19NSVBTX1RMU19EVFBSRUw2NCIsCisrICAiQkZEX1JFTE9DX01JUFNfVExTX0dEIiwKKysgICJCRkRfUkVMT0NfTUlQU19UTFNfTERNIiwKKysgICJCRkRfUkVMT0NfTUlQU19UTFNfRFRQUkVMX0hJMTYiLAorKyAgIkJGRF9SRUxPQ19NSVBTX1RMU19EVFBSRUxfTE8xNiIsCisrICAiQkZEX1JFTE9DX01JUFNfVExTX0dPVFRQUkVMIiwKKysgICJCRkRfUkVMT0NfTUlQU19UTFNfVFBSRUwzMiIsCisrICAiQkZEX1JFTE9DX01JUFNfVExTX1RQUkVMNjQiLAorKyAgIkJGRF9SRUxPQ19NSVBTX1RMU19UUFJFTF9ISTE2IiwKKysgICJCRkRfUkVMT0NfTUlQU19UTFNfVFBSRUxfTE8xNiIsCisrCisrICAiQkZEX1JFTE9DX01JUFNfQ09QWSIsCisrICAiQkZEX1JFTE9DX01JUFNfSlVNUF9TTE9UIiwKKysKKysgICJCRkRfUkVMT0NfRlJWX0xBQkVMMTYiLAorKyAgIkJGRF9SRUxPQ19GUlZfTEFCRUwyNCIsCisrICAiQkZEX1JFTE9DX0ZSVl9MTzE2IiwKKysgICJCRkRfUkVMT0NfRlJWX0hJMTYiLAorKyAgIkJGRF9SRUxPQ19GUlZfR1BSRUwxMiIsCisrICAiQkZEX1JFTE9DX0ZSVl9HUFJFTFUxMiIsCisrICAiQkZEX1JFTE9DX0ZSVl9HUFJFTDMyIiwKKysgICJCRkRfUkVMT0NfRlJWX0dQUkVMSEkiLAorKyAgIkJGRF9SRUxPQ19GUlZfR1BSRUxMTyIsCisrICAiQkZEX1JFTE9DX0ZSVl9HT1QxMiIsCisrICAiQkZEX1JFTE9DX0ZSVl9HT1RISSIsCisrICAiQkZEX1JFTE9DX0ZSVl9HT1RMTyIsCisrICAiQkZEX1JFTE9DX0ZSVl9GVU5DREVTQyIsCisrICAiQkZEX1JFTE9DX0ZSVl9GVU5DREVTQ19HT1QxMiIsCisrICAiQkZEX1JFTE9DX0ZSVl9GVU5DREVTQ19HT1RISSIsCisrICAiQkZEX1JFTE9DX0ZSVl9GVU5DREVTQ19HT1RMTyIsCisrICAiQkZEX1JFTE9DX0ZSVl9GVU5DREVTQ19WQUxVRSIsCisrICAiQkZEX1JFTE9DX0ZSVl9GVU5DREVTQ19HT1RPRkYxMiIsCisrICAiQkZEX1JFTE9DX0ZSVl9GVU5DREVTQ19HT1RPRkZISSIsCisrICAiQkZEX1JFTE9DX0ZSVl9GVU5DREVTQ19HT1RPRkZMTyIsCisrICAiQkZEX1JFTE9DX0ZSVl9HT1RPRkYxMiIsCisrICAiQkZEX1JFTE9DX0ZSVl9HT1RPRkZISSIsCisrICAiQkZEX1JFTE9DX0ZSVl9HT1RPRkZMTyIsCisrICAiQkZEX1JFTE9DX0ZSVl9HRVRUTFNPRkYiLAorKyAgIkJGRF9SRUxPQ19GUlZfVExTREVTQ19WQUxVRSIsCisrICAiQkZEX1JFTE9DX0ZSVl9HT1RUTFNERVNDMTIiLAorKyAgIkJGRF9SRUxPQ19GUlZfR09UVExTREVTQ0hJIiwKKysgICJCRkRfUkVMT0NfRlJWX0dPVFRMU0RFU0NMTyIsCisrICAiQkZEX1JFTE9DX0ZSVl9UTFNNT0ZGMTIiLAorKyAgIkJGRF9SRUxPQ19GUlZfVExTTU9GRkhJIiwKKysgICJCRkRfUkVMT0NfRlJWX1RMU01PRkZMTyIsCisrICAiQkZEX1JFTE9DX0ZSVl9HT1RUTFNPRkYxMiIsCisrICAiQkZEX1JFTE9DX0ZSVl9HT1RUTFNPRkZISSIsCisrICAiQkZEX1JFTE9DX0ZSVl9HT1RUTFNPRkZMTyIsCisrICAiQkZEX1JFTE9DX0ZSVl9UTFNPRkYiLAorKyAgIkJGRF9SRUxPQ19GUlZfVExTREVTQ19SRUxBWCIsCisrICAiQkZEX1JFTE9DX0ZSVl9HRVRUTFNPRkZfUkVMQVgiLAorKyAgIkJGRF9SRUxPQ19GUlZfVExTT0ZGX1JFTEFYIiwKKysgICJCRkRfUkVMT0NfRlJWX1RMU01PRkYiLAorKworKyAgIkJGRF9SRUxPQ19NTjEwMzAwX0dPVE9GRjI0IiwKKysgICJCRkRfUkVMT0NfTU4xMDMwMF9HT1QzMiIsCisrICAiQkZEX1JFTE9DX01OMTAzMDBfR09UMjQiLAorKyAgIkJGRF9SRUxPQ19NTjEwMzAwX0dPVDE2IiwKKysgICJCRkRfUkVMT0NfTU4xMDMwMF9DT1BZIiwKKysgICJCRkRfUkVMT0NfTU4xMDMwMF9HTE9CX0RBVCIsCisrICAiQkZEX1JFTE9DX01OMTAzMDBfSk1QX1NMT1QiLAorKyAgIkJGRF9SRUxPQ19NTjEwMzAwX1JFTEFUSVZFIiwKKysKKysgICJCRkRfUkVMT0NfMzg2X0dPVDMyIiwKKysgICJCRkRfUkVMT0NfMzg2X1BMVDMyIiwKKysgICJCRkRfUkVMT0NfMzg2X0NPUFkiLAorKyAgIkJGRF9SRUxPQ18zODZfR0xPQl9EQVQiLAorKyAgIkJGRF9SRUxPQ18zODZfSlVNUF9TTE9UIiwKKysgICJCRkRfUkVMT0NfMzg2X1JFTEFUSVZFIiwKKysgICJCRkRfUkVMT0NfMzg2X0dPVE9GRiIsCisrICAiQkZEX1JFTE9DXzM4Nl9HT1RQQyIsCisrICAiQkZEX1JFTE9DXzM4Nl9UTFNfVFBPRkYiLAorKyAgIkJGRF9SRUxPQ18zODZfVExTX0lFIiwKKysgICJCRkRfUkVMT0NfMzg2X1RMU19HT1RJRSIsCisrICAiQkZEX1JFTE9DXzM4Nl9UTFNfTEUiLAorKyAgIkJGRF9SRUxPQ18zODZfVExTX0dEIiwKKysgICJCRkRfUkVMT0NfMzg2X1RMU19MRE0iLAorKyAgIkJGRF9SRUxPQ18zODZfVExTX0xET18zMiIsCisrICAiQkZEX1JFTE9DXzM4Nl9UTFNfSUVfMzIiLAorKyAgIkJGRF9SRUxPQ18zODZfVExTX0xFXzMyIiwKKysgICJCRkRfUkVMT0NfMzg2X1RMU19EVFBNT0QzMiIsCisrICAiQkZEX1JFTE9DXzM4Nl9UTFNfRFRQT0ZGMzIiLAorKyAgIkJGRF9SRUxPQ18zODZfVExTX1RQT0ZGMzIiLAorKyAgIkJGRF9SRUxPQ18zODZfVExTX0dPVERFU0MiLAorKyAgIkJGRF9SRUxPQ18zODZfVExTX0RFU0NfQ0FMTCIsCisrICAiQkZEX1JFTE9DXzM4Nl9UTFNfREVTQyIsCisrICAiQkZEX1JFTE9DX1g4Nl82NF9HT1QzMiIsCisrICAiQkZEX1JFTE9DX1g4Nl82NF9QTFQzMiIsCisrICAiQkZEX1JFTE9DX1g4Nl82NF9DT1BZIiwKKysgICJCRkRfUkVMT0NfWDg2XzY0X0dMT0JfREFUIiwKKysgICJCRkRfUkVMT0NfWDg2XzY0X0pVTVBfU0xPVCIsCisrICAiQkZEX1JFTE9DX1g4Nl82NF9SRUxBVElWRSIsCisrICAiQkZEX1JFTE9DX1g4Nl82NF9HT1RQQ1JFTCIsCisrICAiQkZEX1JFTE9DX1g4Nl82NF8zMlMiLAorKyAgIkJGRF9SRUxPQ19YODZfNjRfRFRQTU9ENjQiLAorKyAgIkJGRF9SRUxPQ19YODZfNjRfRFRQT0ZGNjQiLAorKyAgIkJGRF9SRUxPQ19YODZfNjRfVFBPRkY2NCIsCisrICAiQkZEX1JFTE9DX1g4Nl82NF9UTFNHRCIsCisrICAiQkZEX1JFTE9DX1g4Nl82NF9UTFNMRCIsCisrICAiQkZEX1JFTE9DX1g4Nl82NF9EVFBPRkYzMiIsCisrICAiQkZEX1JFTE9DX1g4Nl82NF9HT1RUUE9GRiIsCisrICAiQkZEX1JFTE9DX1g4Nl82NF9UUE9GRjMyIiwKKysgICJCRkRfUkVMT0NfWDg2XzY0X0dPVE9GRjY0IiwKKysgICJCRkRfUkVMT0NfWDg2XzY0X0dPVFBDMzIiLAorKyAgIkJGRF9SRUxPQ19YODZfNjRfR09UNjQiLAorKyAgIkJGRF9SRUxPQ19YODZfNjRfR09UUENSRUw2NCIsCisrICAiQkZEX1JFTE9DX1g4Nl82NF9HT1RQQzY0IiwKKysgICJCRkRfUkVMT0NfWDg2XzY0X0dPVFBMVDY0IiwKKysgICJCRkRfUkVMT0NfWDg2XzY0X1BMVE9GRjY0IiwKKysgICJCRkRfUkVMT0NfWDg2XzY0X0dPVFBDMzJfVExTREVTQyIsCisrICAiQkZEX1JFTE9DX1g4Nl82NF9UTFNERVNDX0NBTEwiLAorKyAgIkJGRF9SRUxPQ19YODZfNjRfVExTREVTQyIsCisrICAiQkZEX1JFTE9DX05TMzJLX0lNTV84IiwKKysgICJCRkRfUkVMT0NfTlMzMktfSU1NXzE2IiwKKysgICJCRkRfUkVMT0NfTlMzMktfSU1NXzMyIiwKKysgICJCRkRfUkVMT0NfTlMzMktfSU1NXzhfUENSRUwiLAorKyAgIkJGRF9SRUxPQ19OUzMyS19JTU1fMTZfUENSRUwiLAorKyAgIkJGRF9SRUxPQ19OUzMyS19JTU1fMzJfUENSRUwiLAorKyAgIkJGRF9SRUxPQ19OUzMyS19ESVNQXzgiLAorKyAgIkJGRF9SRUxPQ19OUzMyS19ESVNQXzE2IiwKKysgICJCRkRfUkVMT0NfTlMzMktfRElTUF8zMiIsCisrICAiQkZEX1JFTE9DX05TMzJLX0RJU1BfOF9QQ1JFTCIsCisrICAiQkZEX1JFTE9DX05TMzJLX0RJU1BfMTZfUENSRUwiLAorKyAgIkJGRF9SRUxPQ19OUzMyS19ESVNQXzMyX1BDUkVMIiwKKysgICJCRkRfUkVMT0NfUERQMTFfRElTUF84X1BDUkVMIiwKKysgICJCRkRfUkVMT0NfUERQMTFfRElTUF82X1BDUkVMIiwKKysgICJCRkRfUkVMT0NfUEpfQ09ERV9ISTE2IiwKKysgICJCRkRfUkVMT0NfUEpfQ09ERV9MTzE2IiwKKysgICJCRkRfUkVMT0NfUEpfQ09ERV9ESVIxNiIsCisrICAiQkZEX1JFTE9DX1BKX0NPREVfRElSMzIiLAorKyAgIkJGRF9SRUxPQ19QSl9DT0RFX1JFTDE2IiwKKysgICJCRkRfUkVMT0NfUEpfQ09ERV9SRUwzMiIsCisrICAiQkZEX1JFTE9DX1BQQ19CMjYiLAorKyAgIkJGRF9SRUxPQ19QUENfQkEyNiIsCisrICAiQkZEX1JFTE9DX1BQQ19UT0MxNiIsCisrICAiQkZEX1JFTE9DX1BQQ19CMTYiLAorKyAgIkJGRF9SRUxPQ19QUENfQjE2X0JSVEFLRU4iLAorKyAgIkJGRF9SRUxPQ19QUENfQjE2X0JSTlRBS0VOIiwKKysgICJCRkRfUkVMT0NfUFBDX0JBMTYiLAorKyAgIkJGRF9SRUxPQ19QUENfQkExNl9CUlRBS0VOIiwKKysgICJCRkRfUkVMT0NfUFBDX0JBMTZfQlJOVEFLRU4iLAorKyAgIkJGRF9SRUxPQ19QUENfQ09QWSIsCisrICAiQkZEX1JFTE9DX1BQQ19HTE9CX0RBVCIsCisrICAiQkZEX1JFTE9DX1BQQ19KTVBfU0xPVCIsCisrICAiQkZEX1JFTE9DX1BQQ19SRUxBVElWRSIsCisrICAiQkZEX1JFTE9DX1BQQ19MT0NBTDI0UEMiLAorKyAgIkJGRF9SRUxPQ19QUENfRU1CX05BRERSMzIiLAorKyAgIkJGRF9SRUxPQ19QUENfRU1CX05BRERSMTYiLAorKyAgIkJGRF9SRUxPQ19QUENfRU1CX05BRERSMTZfTE8iLAorKyAgIkJGRF9SRUxPQ19QUENfRU1CX05BRERSMTZfSEkiLAorKyAgIkJGRF9SRUxPQ19QUENfRU1CX05BRERSMTZfSEEiLAorKyAgIkJGRF9SRUxPQ19QUENfRU1CX1NEQUkxNiIsCisrICAiQkZEX1JFTE9DX1BQQ19FTUJfU0RBMkkxNiIsCisrICAiQkZEX1JFTE9DX1BQQ19FTUJfU0RBMlJFTCIsCisrICAiQkZEX1JFTE9DX1BQQ19FTUJfU0RBMjEiLAorKyAgIkJGRF9SRUxPQ19QUENfRU1CX01SS1JFRiIsCisrICAiQkZEX1JFTE9DX1BQQ19FTUJfUkVMU0VDMTYiLAorKyAgIkJGRF9SRUxPQ19QUENfRU1CX1JFTFNUX0xPIiwKKysgICJCRkRfUkVMT0NfUFBDX0VNQl9SRUxTVF9ISSIsCisrICAiQkZEX1JFTE9DX1BQQ19FTUJfUkVMU1RfSEEiLAorKyAgIkJGRF9SRUxPQ19QUENfRU1CX0JJVF9GTEQiLAorKyAgIkJGRF9SRUxPQ19QUENfRU1CX1JFTFNEQSIsCisrICAiQkZEX1JFTE9DX1BQQzY0X0hJR0hFUiIsCisrICAiQkZEX1JFTE9DX1BQQzY0X0hJR0hFUl9TIiwKKysgICJCRkRfUkVMT0NfUFBDNjRfSElHSEVTVCIsCisrICAiQkZEX1JFTE9DX1BQQzY0X0hJR0hFU1RfUyIsCisrICAiQkZEX1JFTE9DX1BQQzY0X1RPQzE2X0xPIiwKKysgICJCRkRfUkVMT0NfUFBDNjRfVE9DMTZfSEkiLAorKyAgIkJGRF9SRUxPQ19QUEM2NF9UT0MxNl9IQSIsCisrICAiQkZEX1JFTE9DX1BQQzY0X1RPQyIsCisrICAiQkZEX1JFTE9DX1BQQzY0X1BMVEdPVDE2IiwKKysgICJCRkRfUkVMT0NfUFBDNjRfUExUR09UMTZfTE8iLAorKyAgIkJGRF9SRUxPQ19QUEM2NF9QTFRHT1QxNl9ISSIsCisrICAiQkZEX1JFTE9DX1BQQzY0X1BMVEdPVDE2X0hBIiwKKysgICJCRkRfUkVMT0NfUFBDNjRfQUREUjE2X0RTIiwKKysgICJCRkRfUkVMT0NfUFBDNjRfQUREUjE2X0xPX0RTIiwKKysgICJCRkRfUkVMT0NfUFBDNjRfR09UMTZfRFMiLAorKyAgIkJGRF9SRUxPQ19QUEM2NF9HT1QxNl9MT19EUyIsCisrICAiQkZEX1JFTE9DX1BQQzY0X1BMVDE2X0xPX0RTIiwKKysgICJCRkRfUkVMT0NfUFBDNjRfU0VDVE9GRl9EUyIsCisrICAiQkZEX1JFTE9DX1BQQzY0X1NFQ1RPRkZfTE9fRFMiLAorKyAgIkJGRF9SRUxPQ19QUEM2NF9UT0MxNl9EUyIsCisrICAiQkZEX1JFTE9DX1BQQzY0X1RPQzE2X0xPX0RTIiwKKysgICJCRkRfUkVMT0NfUFBDNjRfUExUR09UMTZfRFMiLAorKyAgIkJGRF9SRUxPQ19QUEM2NF9QTFRHT1QxNl9MT19EUyIsCisrICAiQkZEX1JFTE9DX1BQQ19UTFMiLAorKyAgIkJGRF9SRUxPQ19QUENfRFRQTU9EIiwKKysgICJCRkRfUkVMT0NfUFBDX1RQUkVMMTYiLAorKyAgIkJGRF9SRUxPQ19QUENfVFBSRUwxNl9MTyIsCisrICAiQkZEX1JFTE9DX1BQQ19UUFJFTDE2X0hJIiwKKysgICJCRkRfUkVMT0NfUFBDX1RQUkVMMTZfSEEiLAorKyAgIkJGRF9SRUxPQ19QUENfVFBSRUwiLAorKyAgIkJGRF9SRUxPQ19QUENfRFRQUkVMMTYiLAorKyAgIkJGRF9SRUxPQ19QUENfRFRQUkVMMTZfTE8iLAorKyAgIkJGRF9SRUxPQ19QUENfRFRQUkVMMTZfSEkiLAorKyAgIkJGRF9SRUxPQ19QUENfRFRQUkVMMTZfSEEiLAorKyAgIkJGRF9SRUxPQ19QUENfRFRQUkVMIiwKKysgICJCRkRfUkVMT0NfUFBDX0dPVF9UTFNHRDE2IiwKKysgICJCRkRfUkVMT0NfUFBDX0dPVF9UTFNHRDE2X0xPIiwKKysgICJCRkRfUkVMT0NfUFBDX0dPVF9UTFNHRDE2X0hJIiwKKysgICJCRkRfUkVMT0NfUFBDX0dPVF9UTFNHRDE2X0hBIiwKKysgICJCRkRfUkVMT0NfUFBDX0dPVF9UTFNMRDE2IiwKKysgICJCRkRfUkVMT0NfUFBDX0dPVF9UTFNMRDE2X0xPIiwKKysgICJCRkRfUkVMT0NfUFBDX0dPVF9UTFNMRDE2X0hJIiwKKysgICJCRkRfUkVMT0NfUFBDX0dPVF9UTFNMRDE2X0hBIiwKKysgICJCRkRfUkVMT0NfUFBDX0dPVF9UUFJFTDE2IiwKKysgICJCRkRfUkVMT0NfUFBDX0dPVF9UUFJFTDE2X0xPIiwKKysgICJCRkRfUkVMT0NfUFBDX0dPVF9UUFJFTDE2X0hJIiwKKysgICJCRkRfUkVMT0NfUFBDX0dPVF9UUFJFTDE2X0hBIiwKKysgICJCRkRfUkVMT0NfUFBDX0dPVF9EVFBSRUwxNiIsCisrICAiQkZEX1JFTE9DX1BQQ19HT1RfRFRQUkVMMTZfTE8iLAorKyAgIkJGRF9SRUxPQ19QUENfR09UX0RUUFJFTDE2X0hJIiwKKysgICJCRkRfUkVMT0NfUFBDX0dPVF9EVFBSRUwxNl9IQSIsCisrICAiQkZEX1JFTE9DX1BQQzY0X1RQUkVMMTZfRFMiLAorKyAgIkJGRF9SRUxPQ19QUEM2NF9UUFJFTDE2X0xPX0RTIiwKKysgICJCRkRfUkVMT0NfUFBDNjRfVFBSRUwxNl9ISUdIRVIiLAorKyAgIkJGRF9SRUxPQ19QUEM2NF9UUFJFTDE2X0hJR0hFUkEiLAorKyAgIkJGRF9SRUxPQ19QUEM2NF9UUFJFTDE2X0hJR0hFU1QiLAorKyAgIkJGRF9SRUxPQ19QUEM2NF9UUFJFTDE2X0hJR0hFU1RBIiwKKysgICJCRkRfUkVMT0NfUFBDNjRfRFRQUkVMMTZfRFMiLAorKyAgIkJGRF9SRUxPQ19QUEM2NF9EVFBSRUwxNl9MT19EUyIsCisrICAiQkZEX1JFTE9DX1BQQzY0X0RUUFJFTDE2X0hJR0hFUiIsCisrICAiQkZEX1JFTE9DX1BQQzY0X0RUUFJFTDE2X0hJR0hFUkEiLAorKyAgIkJGRF9SRUxPQ19QUEM2NF9EVFBSRUwxNl9ISUdIRVNUIiwKKysgICJCRkRfUkVMT0NfUFBDNjRfRFRQUkVMMTZfSElHSEVTVEEiLAorKyAgIkJGRF9SRUxPQ19JMzcwX0QxMiIsCisrICAiQkZEX1JFTE9DX0NUT1IiLAorKyAgIkJGRF9SRUxPQ19BUk1fUENSRUxfQlJBTkNIIiwKKysgICJCRkRfUkVMT0NfQVJNX1BDUkVMX0JMWCIsCisrICAiQkZEX1JFTE9DX1RIVU1CX1BDUkVMX0JMWCIsCisrICAiQkZEX1JFTE9DX0FSTV9QQ1JFTF9DQUxMIiwKKysgICJCRkRfUkVMT0NfQVJNX1BDUkVMX0pVTVAiLAorKyAgIkJGRF9SRUxPQ19USFVNQl9QQ1JFTF9CUkFOQ0g3IiwKKysgICJCRkRfUkVMT0NfVEhVTUJfUENSRUxfQlJBTkNIOSIsCisrICAiQkZEX1JFTE9DX1RIVU1CX1BDUkVMX0JSQU5DSDEyIiwKKysgICJCRkRfUkVMT0NfVEhVTUJfUENSRUxfQlJBTkNIMjAiLAorKyAgIkJGRF9SRUxPQ19USFVNQl9QQ1JFTF9CUkFOQ0gyMyIsCisrICAiQkZEX1JFTE9DX1RIVU1CX1BDUkVMX0JSQU5DSDI1IiwKKysgICJCRkRfUkVMT0NfQVJNX09GRlNFVF9JTU0iLAorKyAgIkJGRF9SRUxPQ19BUk1fVEhVTUJfT0ZGU0VUIiwKKysgICJCRkRfUkVMT0NfQVJNX1RBUkdFVDEiLAorKyAgIkJGRF9SRUxPQ19BUk1fUk9TRUdSRUwzMiIsCisrICAiQkZEX1JFTE9DX0FSTV9TQlJFTDMyIiwKKysgICJCRkRfUkVMT0NfQVJNX1RBUkdFVDIiLAorKyAgIkJGRF9SRUxPQ19BUk1fUFJFTDMxIiwKKysgICJCRkRfUkVMT0NfQVJNX01PVlciLAorKyAgIkJGRF9SRUxPQ19BUk1fTU9WVCIsCisrICAiQkZEX1JFTE9DX0FSTV9NT1ZXX1BDUkVMIiwKKysgICJCRkRfUkVMT0NfQVJNX01PVlRfUENSRUwiLAorKyAgIkJGRF9SRUxPQ19BUk1fVEhVTUJfTU9WVyIsCisrICAiQkZEX1JFTE9DX0FSTV9USFVNQl9NT1ZUIiwKKysgICJCRkRfUkVMT0NfQVJNX1RIVU1CX01PVldfUENSRUwiLAorKyAgIkJGRF9SRUxPQ19BUk1fVEhVTUJfTU9WVF9QQ1JFTCIsCisrICAiQkZEX1JFTE9DX0FSTV9KVU1QX1NMT1QiLAorKyAgIkJGRF9SRUxPQ19BUk1fR0xPQl9EQVQiLAorKyAgIkJGRF9SRUxPQ19BUk1fR09UMzIiLAorKyAgIkJGRF9SRUxPQ19BUk1fUExUMzIiLAorKyAgIkJGRF9SRUxPQ19BUk1fUkVMQVRJVkUiLAorKyAgIkJGRF9SRUxPQ19BUk1fR09UT0ZGIiwKKysgICJCRkRfUkVMT0NfQVJNX0dPVFBDIiwKKysgICJCRkRfUkVMT0NfQVJNX1RMU19HRDMyIiwKKysgICJCRkRfUkVMT0NfQVJNX1RMU19MRE8zMiIsCisrICAiQkZEX1JFTE9DX0FSTV9UTFNfTERNMzIiLAorKyAgIkJGRF9SRUxPQ19BUk1fVExTX0RUUE9GRjMyIiwKKysgICJCRkRfUkVMT0NfQVJNX1RMU19EVFBNT0QzMiIsCisrICAiQkZEX1JFTE9DX0FSTV9UTFNfVFBPRkYzMiIsCisrICAiQkZEX1JFTE9DX0FSTV9UTFNfSUUzMiIsCisrICAiQkZEX1JFTE9DX0FSTV9UTFNfTEUzMiIsCisrICAiQkZEX1JFTE9DX0FSTV9BTFVfUENfRzBfTkMiLAorKyAgIkJGRF9SRUxPQ19BUk1fQUxVX1BDX0cwIiwKKysgICJCRkRfUkVMT0NfQVJNX0FMVV9QQ19HMV9OQyIsCisrICAiQkZEX1JFTE9DX0FSTV9BTFVfUENfRzEiLAorKyAgIkJGRF9SRUxPQ19BUk1fQUxVX1BDX0cyIiwKKysgICJCRkRfUkVMT0NfQVJNX0xEUl9QQ19HMCIsCisrICAiQkZEX1JFTE9DX0FSTV9MRFJfUENfRzEiLAorKyAgIkJGRF9SRUxPQ19BUk1fTERSX1BDX0cyIiwKKysgICJCRkRfUkVMT0NfQVJNX0xEUlNfUENfRzAiLAorKyAgIkJGRF9SRUxPQ19BUk1fTERSU19QQ19HMSIsCisrICAiQkZEX1JFTE9DX0FSTV9MRFJTX1BDX0cyIiwKKysgICJCRkRfUkVMT0NfQVJNX0xEQ19QQ19HMCIsCisrICAiQkZEX1JFTE9DX0FSTV9MRENfUENfRzEiLAorKyAgIkJGRF9SRUxPQ19BUk1fTERDX1BDX0cyIiwKKysgICJCRkRfUkVMT0NfQVJNX0FMVV9TQl9HMF9OQyIsCisrICAiQkZEX1JFTE9DX0FSTV9BTFVfU0JfRzAiLAorKyAgIkJGRF9SRUxPQ19BUk1fQUxVX1NCX0cxX05DIiwKKysgICJCRkRfUkVMT0NfQVJNX0FMVV9TQl9HMSIsCisrICAiQkZEX1JFTE9DX0FSTV9BTFVfU0JfRzIiLAorKyAgIkJGRF9SRUxPQ19BUk1fTERSX1NCX0cwIiwKKysgICJCRkRfUkVMT0NfQVJNX0xEUl9TQl9HMSIsCisrICAiQkZEX1JFTE9DX0FSTV9MRFJfU0JfRzIiLAorKyAgIkJGRF9SRUxPQ19BUk1fTERSU19TQl9HMCIsCisrICAiQkZEX1JFTE9DX0FSTV9MRFJTX1NCX0cxIiwKKysgICJCRkRfUkVMT0NfQVJNX0xEUlNfU0JfRzIiLAorKyAgIkJGRF9SRUxPQ19BUk1fTERDX1NCX0cwIiwKKysgICJCRkRfUkVMT0NfQVJNX0xEQ19TQl9HMSIsCisrICAiQkZEX1JFTE9DX0FSTV9MRENfU0JfRzIiLAorKyAgIkJGRF9SRUxPQ19BUk1fSU1NRURJQVRFIiwKKysgICJCRkRfUkVMT0NfQVJNX0FEUkxfSU1NRURJQVRFIiwKKysgICJCRkRfUkVMT0NfQVJNX1QzMl9JTU1FRElBVEUiLAorKyAgIkJGRF9SRUxPQ19BUk1fVDMyX0FERF9JTU0iLAorKyAgIkJGRF9SRUxPQ19BUk1fVDMyX0lNTTEyIiwKKysgICJCRkRfUkVMT0NfQVJNX1QzMl9BRERfUEMxMiIsCisrICAiQkZEX1JFTE9DX0FSTV9TSElGVF9JTU0iLAorKyAgIkJGRF9SRUxPQ19BUk1fU01DIiwKKysgICJCRkRfUkVMT0NfQVJNX1NXSSIsCisrICAiQkZEX1JFTE9DX0FSTV9NVUxUSSIsCisrICAiQkZEX1JFTE9DX0FSTV9DUF9PRkZfSU1NIiwKKysgICJCRkRfUkVMT0NfQVJNX0NQX09GRl9JTU1fUzIiLAorKyAgIkJGRF9SRUxPQ19BUk1fVDMyX0NQX09GRl9JTU0iLAorKyAgIkJGRF9SRUxPQ19BUk1fVDMyX0NQX09GRl9JTU1fUzIiLAorKyAgIkJGRF9SRUxPQ19BUk1fQURSX0lNTSIsCisrICAiQkZEX1JFTE9DX0FSTV9MRFJfSU1NIiwKKysgICJCRkRfUkVMT0NfQVJNX0xJVEVSQUwiLAorKyAgIkJGRF9SRUxPQ19BUk1fSU5fUE9PTCIsCisrICAiQkZEX1JFTE9DX0FSTV9PRkZTRVRfSU1NOCIsCisrICAiQkZEX1JFTE9DX0FSTV9UMzJfT0ZGU0VUX1U4IiwKKysgICJCRkRfUkVMT0NfQVJNX1QzMl9PRkZTRVRfSU1NIiwKKysgICJCRkRfUkVMT0NfQVJNX0hXTElURVJBTCIsCisrICAiQkZEX1JFTE9DX0FSTV9USFVNQl9BREQiLAorKyAgIkJGRF9SRUxPQ19BUk1fVEhVTUJfSU1NIiwKKysgICJCRkRfUkVMT0NfQVJNX1RIVU1CX1NISUZUIiwKKysgICJCRkRfUkVMT0NfU0hfUENESVNQOEJZMiIsCisrICAiQkZEX1JFTE9DX1NIX1BDRElTUDEyQlkyIiwKKysgICJCRkRfUkVMT0NfU0hfSU1NMyIsCisrICAiQkZEX1JFTE9DX1NIX0lNTTNVIiwKKysgICJCRkRfUkVMT0NfU0hfRElTUDEyIiwKKysgICJCRkRfUkVMT0NfU0hfRElTUDEyQlkyIiwKKysgICJCRkRfUkVMT0NfU0hfRElTUDEyQlk0IiwKKysgICJCRkRfUkVMT0NfU0hfRElTUDEyQlk4IiwKKysgICJCRkRfUkVMT0NfU0hfRElTUDIwIiwKKysgICJCRkRfUkVMT0NfU0hfRElTUDIwQlk4IiwKKysgICJCRkRfUkVMT0NfU0hfSU1NNCIsCisrICAiQkZEX1JFTE9DX1NIX0lNTTRCWTIiLAorKyAgIkJGRF9SRUxPQ19TSF9JTU00Qlk0IiwKKysgICJCRkRfUkVMT0NfU0hfSU1NOCIsCisrICAiQkZEX1JFTE9DX1NIX0lNTThCWTIiLAorKyAgIkJGRF9SRUxPQ19TSF9JTU04Qlk0IiwKKysgICJCRkRfUkVMT0NfU0hfUENSRUxJTU04QlkyIiwKKysgICJCRkRfUkVMT0NfU0hfUENSRUxJTU04Qlk0IiwKKysgICJCRkRfUkVMT0NfU0hfU1dJVENIMTYiLAorKyAgIkJGRF9SRUxPQ19TSF9TV0lUQ0gzMiIsCisrICAiQkZEX1JFTE9DX1NIX1VTRVMiLAorKyAgIkJGRF9SRUxPQ19TSF9DT1VOVCIsCisrICAiQkZEX1JFTE9DX1NIX0FMSUdOIiwKKysgICJCRkRfUkVMT0NfU0hfQ09ERSIsCisrICAiQkZEX1JFTE9DX1NIX0RBVEEiLAorKyAgIkJGRF9SRUxPQ19TSF9MQUJFTCIsCisrICAiQkZEX1JFTE9DX1NIX0xPT1BfU1RBUlQiLAorKyAgIkJGRF9SRUxPQ19TSF9MT09QX0VORCIsCisrICAiQkZEX1JFTE9DX1NIX0NPUFkiLAorKyAgIkJGRF9SRUxPQ19TSF9HTE9CX0RBVCIsCisrICAiQkZEX1JFTE9DX1NIX0pNUF9TTE9UIiwKKysgICJCRkRfUkVMT0NfU0hfUkVMQVRJVkUiLAorKyAgIkJGRF9SRUxPQ19TSF9HT1RQQyIsCisrICAiQkZEX1JFTE9DX1NIX0dPVF9MT1cxNiIsCisrICAiQkZEX1JFTE9DX1NIX0dPVF9NRURMT1cxNiIsCisrICAiQkZEX1JFTE9DX1NIX0dPVF9NRURISTE2IiwKKysgICJCRkRfUkVMT0NfU0hfR09UX0hJMTYiLAorKyAgIkJGRF9SRUxPQ19TSF9HT1RQTFRfTE9XMTYiLAorKyAgIkJGRF9SRUxPQ19TSF9HT1RQTFRfTUVETE9XMTYiLAorKyAgIkJGRF9SRUxPQ19TSF9HT1RQTFRfTUVESEkxNiIsCisrICAiQkZEX1JFTE9DX1NIX0dPVFBMVF9ISTE2IiwKKysgICJCRkRfUkVMT0NfU0hfUExUX0xPVzE2IiwKKysgICJCRkRfUkVMT0NfU0hfUExUX01FRExPVzE2IiwKKysgICJCRkRfUkVMT0NfU0hfUExUX01FREhJMTYiLAorKyAgIkJGRF9SRUxPQ19TSF9QTFRfSEkxNiIsCisrICAiQkZEX1JFTE9DX1NIX0dPVE9GRl9MT1cxNiIsCisrICAiQkZEX1JFTE9DX1NIX0dPVE9GRl9NRURMT1cxNiIsCisrICAiQkZEX1JFTE9DX1NIX0dPVE9GRl9NRURISTE2IiwKKysgICJCRkRfUkVMT0NfU0hfR09UT0ZGX0hJMTYiLAorKyAgIkJGRF9SRUxPQ19TSF9HT1RQQ19MT1cxNiIsCisrICAiQkZEX1JFTE9DX1NIX0dPVFBDX01FRExPVzE2IiwKKysgICJCRkRfUkVMT0NfU0hfR09UUENfTUVESEkxNiIsCisrICAiQkZEX1JFTE9DX1NIX0dPVFBDX0hJMTYiLAorKyAgIkJGRF9SRUxPQ19TSF9DT1BZNjQiLAorKyAgIkJGRF9SRUxPQ19TSF9HTE9CX0RBVDY0IiwKKysgICJCRkRfUkVMT0NfU0hfSk1QX1NMT1Q2NCIsCisrICAiQkZEX1JFTE9DX1NIX1JFTEFUSVZFNjQiLAorKyAgIkJGRF9SRUxPQ19TSF9HT1QxMEJZNCIsCisrICAiQkZEX1JFTE9DX1NIX0dPVDEwQlk4IiwKKysgICJCRkRfUkVMT0NfU0hfR09UUExUMTBCWTQiLAorKyAgIkJGRF9SRUxPQ19TSF9HT1RQTFQxMEJZOCIsCisrICAiQkZEX1JFTE9DX1NIX0dPVFBMVDMyIiwKKysgICJCRkRfUkVMT0NfU0hfU0hNRURJQV9DT0RFIiwKKysgICJCRkRfUkVMT0NfU0hfSU1NVTUiLAorKyAgIkJGRF9SRUxPQ19TSF9JTU1TNiIsCisrICAiQkZEX1JFTE9DX1NIX0lNTVM2QlkzMiIsCisrICAiQkZEX1JFTE9DX1NIX0lNTVU2IiwKKysgICJCRkRfUkVMT0NfU0hfSU1NUzEwIiwKKysgICJCRkRfUkVMT0NfU0hfSU1NUzEwQlkyIiwKKysgICJCRkRfUkVMT0NfU0hfSU1NUzEwQlk0IiwKKysgICJCRkRfUkVMT0NfU0hfSU1NUzEwQlk4IiwKKysgICJCRkRfUkVMT0NfU0hfSU1NUzE2IiwKKysgICJCRkRfUkVMT0NfU0hfSU1NVTE2IiwKKysgICJCRkRfUkVMT0NfU0hfSU1NX0xPVzE2IiwKKysgICJCRkRfUkVMT0NfU0hfSU1NX0xPVzE2X1BDUkVMIiwKKysgICJCRkRfUkVMT0NfU0hfSU1NX01FRExPVzE2IiwKKysgICJCRkRfUkVMT0NfU0hfSU1NX01FRExPVzE2X1BDUkVMIiwKKysgICJCRkRfUkVMT0NfU0hfSU1NX01FREhJMTYiLAorKyAgIkJGRF9SRUxPQ19TSF9JTU1fTUVESEkxNl9QQ1JFTCIsCisrICAiQkZEX1JFTE9DX1NIX0lNTV9ISTE2IiwKKysgICJCRkRfUkVMT0NfU0hfSU1NX0hJMTZfUENSRUwiLAorKyAgIkJGRF9SRUxPQ19TSF9QVF8xNiIsCisrICAiQkZEX1JFTE9DX1NIX1RMU19HRF8zMiIsCisrICAiQkZEX1JFTE9DX1NIX1RMU19MRF8zMiIsCisrICAiQkZEX1JFTE9DX1NIX1RMU19MRE9fMzIiLAorKyAgIkJGRF9SRUxPQ19TSF9UTFNfSUVfMzIiLAorKyAgIkJGRF9SRUxPQ19TSF9UTFNfTEVfMzIiLAorKyAgIkJGRF9SRUxPQ19TSF9UTFNfRFRQTU9EMzIiLAorKyAgIkJGRF9SRUxPQ19TSF9UTFNfRFRQT0ZGMzIiLAorKyAgIkJGRF9SRUxPQ19TSF9UTFNfVFBPRkYzMiIsCisrICAiQkZEX1JFTE9DX0FSQ19CMjJfUENSRUwiLAorKyAgIkJGRF9SRUxPQ19BUkNfQjI2IiwKKysgICJCRkRfUkVMT0NfQkZJTl8xNl9JTU0iLAorKyAgIkJGRF9SRUxPQ19CRklOXzE2X0hJR0giLAorKyAgIkJGRF9SRUxPQ19CRklOXzRfUENSRUwiLAorKyAgIkJGRF9SRUxPQ19CRklOXzVfUENSRUwiLAorKyAgIkJGRF9SRUxPQ19CRklOXzE2X0xPVyIsCisrICAiQkZEX1JFTE9DX0JGSU5fMTBfUENSRUwiLAorKyAgIkJGRF9SRUxPQ19CRklOXzExX1BDUkVMIiwKKysgICJCRkRfUkVMT0NfQkZJTl8xMl9QQ1JFTF9KVU1QIiwKKysgICJCRkRfUkVMT0NfQkZJTl8xMl9QQ1JFTF9KVU1QX1MiLAorKyAgIkJGRF9SRUxPQ19CRklOXzI0X1BDUkVMX0NBTExfWCIsCisrICAiQkZEX1JFTE9DX0JGSU5fMjRfUENSRUxfSlVNUF9MIiwKKysgICJCRkRfUkVMT0NfQkZJTl9HT1QxN000IiwKKysgICJCRkRfUkVMT0NfQkZJTl9HT1RISSIsCisrICAiQkZEX1JFTE9DX0JGSU5fR09UTE8iLAorKyAgIkJGRF9SRUxPQ19CRklOX0ZVTkNERVNDIiwKKysgICJCRkRfUkVMT0NfQkZJTl9GVU5DREVTQ19HT1QxN000IiwKKysgICJCRkRfUkVMT0NfQkZJTl9GVU5DREVTQ19HT1RISSIsCisrICAiQkZEX1JFTE9DX0JGSU5fRlVOQ0RFU0NfR09UTE8iLAorKyAgIkJGRF9SRUxPQ19CRklOX0ZVTkNERVNDX1ZBTFVFIiwKKysgICJCRkRfUkVMT0NfQkZJTl9GVU5DREVTQ19HT1RPRkYxN000IiwKKysgICJCRkRfUkVMT0NfQkZJTl9GVU5DREVTQ19HT1RPRkZISSIsCisrICAiQkZEX1JFTE9DX0JGSU5fRlVOQ0RFU0NfR09UT0ZGTE8iLAorKyAgIkJGRF9SRUxPQ19CRklOX0dPVE9GRjE3TTQiLAorKyAgIkJGRF9SRUxPQ19CRklOX0dPVE9GRkhJIiwKKysgICJCRkRfUkVMT0NfQkZJTl9HT1RPRkZMTyIsCisrICAiQkZEX1JFTE9DX0JGSU5fR09UIiwKKysgICJCRkRfUkVMT0NfQkZJTl9QTFRQQyIsCisrICAiQkZEX0FSRUxPQ19CRklOX1BVU0giLAorKyAgIkJGRF9BUkVMT0NfQkZJTl9DT05TVCIsCisrICAiQkZEX0FSRUxPQ19CRklOX0FERCIsCisrICAiQkZEX0FSRUxPQ19CRklOX1NVQiIsCisrICAiQkZEX0FSRUxPQ19CRklOX01VTFQiLAorKyAgIkJGRF9BUkVMT0NfQkZJTl9ESVYiLAorKyAgIkJGRF9BUkVMT0NfQkZJTl9NT0QiLAorKyAgIkJGRF9BUkVMT0NfQkZJTl9MU0hJRlQiLAorKyAgIkJGRF9BUkVMT0NfQkZJTl9SU0hJRlQiLAorKyAgIkJGRF9BUkVMT0NfQkZJTl9BTkQiLAorKyAgIkJGRF9BUkVMT0NfQkZJTl9PUiIsCisrICAiQkZEX0FSRUxPQ19CRklOX1hPUiIsCisrICAiQkZEX0FSRUxPQ19CRklOX0xBTkQiLAorKyAgIkJGRF9BUkVMT0NfQkZJTl9MT1IiLAorKyAgIkJGRF9BUkVMT0NfQkZJTl9MRU4iLAorKyAgIkJGRF9BUkVMT0NfQkZJTl9ORUciLAorKyAgIkJGRF9BUkVMT0NfQkZJTl9DT01QIiwKKysgICJCRkRfQVJFTE9DX0JGSU5fUEFHRSIsCisrICAiQkZEX0FSRUxPQ19CRklOX0hXUEFHRSIsCisrICAiQkZEX0FSRUxPQ19CRklOX0FERFIiLAorKyAgIkJGRF9SRUxPQ19EMTBWXzEwX1BDUkVMX1IiLAorKyAgIkJGRF9SRUxPQ19EMTBWXzEwX1BDUkVMX0wiLAorKyAgIkJGRF9SRUxPQ19EMTBWXzE4IiwKKysgICJCRkRfUkVMT0NfRDEwVl8xOF9QQ1JFTCIsCisrICAiQkZEX1JFTE9DX0QzMFZfNiIsCisrICAiQkZEX1JFTE9DX0QzMFZfOV9QQ1JFTCIsCisrICAiQkZEX1JFTE9DX0QzMFZfOV9QQ1JFTF9SIiwKKysgICJCRkRfUkVMT0NfRDMwVl8xNSIsCisrICAiQkZEX1JFTE9DX0QzMFZfMTVfUENSRUwiLAorKyAgIkJGRF9SRUxPQ19EMzBWXzE1X1BDUkVMX1IiLAorKyAgIkJGRF9SRUxPQ19EMzBWXzIxIiwKKysgICJCRkRfUkVMT0NfRDMwVl8yMV9QQ1JFTCIsCisrICAiQkZEX1JFTE9DX0QzMFZfMjFfUENSRUxfUiIsCisrICAiQkZEX1JFTE9DX0QzMFZfMzIiLAorKyAgIkJGRF9SRUxPQ19EMzBWXzMyX1BDUkVMIiwKKysgICJCRkRfUkVMT0NfRExYX0hJMTZfUyIsCisrICAiQkZEX1JFTE9DX0RMWF9MTzE2IiwKKysgICJCRkRfUkVMT0NfRExYX0pNUDI2IiwKKysgICJCRkRfUkVMT0NfTTMyQ19ISTgiLAorKyAgIkJGRF9SRUxPQ19NMzJDX1JMX0pVTVAiLAorKyAgIkJGRF9SRUxPQ19NMzJDX1JMXzFBRERSIiwKKysgICJCRkRfUkVMT0NfTTMyQ19STF8yQUREUiIsCisrICAiQkZEX1JFTE9DX00zMlJfMjQiLAorKyAgIkJGRF9SRUxPQ19NMzJSXzEwX1BDUkVMIiwKKysgICJCRkRfUkVMT0NfTTMyUl8xOF9QQ1JFTCIsCisrICAiQkZEX1JFTE9DX00zMlJfMjZfUENSRUwiLAorKyAgIkJGRF9SRUxPQ19NMzJSX0hJMTZfVUxPIiwKKysgICJCRkRfUkVMT0NfTTMyUl9ISTE2X1NMTyIsCisrICAiQkZEX1JFTE9DX00zMlJfTE8xNiIsCisrICAiQkZEX1JFTE9DX00zMlJfU0RBMTYiLAorKyAgIkJGRF9SRUxPQ19NMzJSX0dPVDI0IiwKKysgICJCRkRfUkVMT0NfTTMyUl8yNl9QTFRSRUwiLAorKyAgIkJGRF9SRUxPQ19NMzJSX0NPUFkiLAorKyAgIkJGRF9SRUxPQ19NMzJSX0dMT0JfREFUIiwKKysgICJCRkRfUkVMT0NfTTMyUl9KTVBfU0xPVCIsCisrICAiQkZEX1JFTE9DX00zMlJfUkVMQVRJVkUiLAorKyAgIkJGRF9SRUxPQ19NMzJSX0dPVE9GRiIsCisrICAiQkZEX1JFTE9DX00zMlJfR09UT0ZGX0hJX1VMTyIsCisrICAiQkZEX1JFTE9DX00zMlJfR09UT0ZGX0hJX1NMTyIsCisrICAiQkZEX1JFTE9DX00zMlJfR09UT0ZGX0xPIiwKKysgICJCRkRfUkVMT0NfTTMyUl9HT1RQQzI0IiwKKysgICJCRkRfUkVMT0NfTTMyUl9HT1QxNl9ISV9VTE8iLAorKyAgIkJGRF9SRUxPQ19NMzJSX0dPVDE2X0hJX1NMTyIsCisrICAiQkZEX1JFTE9DX00zMlJfR09UMTZfTE8iLAorKyAgIkJGRF9SRUxPQ19NMzJSX0dPVFBDX0hJX1VMTyIsCisrICAiQkZEX1JFTE9DX00zMlJfR09UUENfSElfU0xPIiwKKysgICJCRkRfUkVMT0NfTTMyUl9HT1RQQ19MTyIsCisrICAiQkZEX1JFTE9DX1Y4NTBfOV9QQ1JFTCIsCisrICAiQkZEX1JFTE9DX1Y4NTBfMjJfUENSRUwiLAorKyAgIkJGRF9SRUxPQ19WODUwX1NEQV8xNl8xNl9PRkZTRVQiLAorKyAgIkJGRF9SRUxPQ19WODUwX1NEQV8xNV8xNl9PRkZTRVQiLAorKyAgIkJGRF9SRUxPQ19WODUwX1pEQV8xNl8xNl9PRkZTRVQiLAorKyAgIkJGRF9SRUxPQ19WODUwX1pEQV8xNV8xNl9PRkZTRVQiLAorKyAgIkJGRF9SRUxPQ19WODUwX1REQV82XzhfT0ZGU0VUIiwKKysgICJCRkRfUkVMT0NfVjg1MF9UREFfN184X09GRlNFVCIsCisrICAiQkZEX1JFTE9DX1Y4NTBfVERBXzdfN19PRkZTRVQiLAorKyAgIkJGRF9SRUxPQ19WODUwX1REQV8xNl8xNl9PRkZTRVQiLAorKyAgIkJGRF9SRUxPQ19WODUwX1REQV80XzVfT0ZGU0VUIiwKKysgICJCRkRfUkVMT0NfVjg1MF9UREFfNF80X09GRlNFVCIsCisrICAiQkZEX1JFTE9DX1Y4NTBfU0RBXzE2XzE2X1NQTElUX09GRlNFVCIsCisrICAiQkZEX1JFTE9DX1Y4NTBfWkRBXzE2XzE2X1NQTElUX09GRlNFVCIsCisrICAiQkZEX1JFTE9DX1Y4NTBfQ0FMTFRfNl83X09GRlNFVCIsCisrICAiQkZEX1JFTE9DX1Y4NTBfQ0FMTFRfMTZfMTZfT0ZGU0VUIiwKKysgICJCRkRfUkVMT0NfVjg1MF9MT05HQ0FMTCIsCisrICAiQkZEX1JFTE9DX1Y4NTBfTE9OR0pVTVAiLAorKyAgIkJGRF9SRUxPQ19WODUwX0FMSUdOIiwKKysgICJCRkRfUkVMT0NfVjg1MF9MTzE2X1NQTElUX09GRlNFVCIsCisrICAiQkZEX1JFTE9DX01OMTAzMDBfMzJfUENSRUwiLAorKyAgIkJGRF9SRUxPQ19NTjEwMzAwXzE2X1BDUkVMIiwKKysgICJCRkRfUkVMT0NfVElDMzBfTERQIiwKKysgICJCRkRfUkVMT0NfVElDNTRYX1BBUlRMUzciLAorKyAgIkJGRF9SRUxPQ19USUM1NFhfUEFSVE1TOSIsCisrICAiQkZEX1JFTE9DX1RJQzU0WF8yMyIsCisrICAiQkZEX1JFTE9DX1RJQzU0WF8xNl9PRl8yMyIsCisrICAiQkZEX1JFTE9DX1RJQzU0WF9NUzdfT0ZfMjMiLAorKyAgIkJGRF9SRUxPQ19GUjMwXzQ4IiwKKysgICJCRkRfUkVMT0NfRlIzMF8yMCIsCisrICAiQkZEX1JFTE9DX0ZSMzBfNl9JTl80IiwKKysgICJCRkRfUkVMT0NfRlIzMF84X0lOXzgiLAorKyAgIkJGRF9SRUxPQ19GUjMwXzlfSU5fOCIsCisrICAiQkZEX1JFTE9DX0ZSMzBfMTBfSU5fOCIsCisrICAiQkZEX1JFTE9DX0ZSMzBfOV9QQ1JFTCIsCisrICAiQkZEX1JFTE9DX0ZSMzBfMTJfUENSRUwiLAorKyAgIkJGRF9SRUxPQ19NQ09SRV9QQ1JFTF9JTU04Qlk0IiwKKysgICJCRkRfUkVMT0NfTUNPUkVfUENSRUxfSU1NMTFCWTIiLAorKyAgIkJGRF9SRUxPQ19NQ09SRV9QQ1JFTF9JTU00QlkyIiwKKysgICJCRkRfUkVMT0NfTUNPUkVfUENSRUxfMzIiLAorKyAgIkJGRF9SRUxPQ19NQ09SRV9QQ1JFTF9KU1JfSU1NMTFCWTIiLAorKyAgIkJGRF9SRUxPQ19NQ09SRV9SVkEiLAorKyAgIkJGRF9SRUxPQ19NRVBfOCIsCisrICAiQkZEX1JFTE9DX01FUF8xNiIsCisrICAiQkZEX1JFTE9DX01FUF8zMiIsCisrICAiQkZEX1JFTE9DX01FUF9QQ1JFTDhBMiIsCisrICAiQkZEX1JFTE9DX01FUF9QQ1JFTDEyQTIiLAorKyAgIkJGRF9SRUxPQ19NRVBfUENSRUwxN0EyIiwKKysgICJCRkRfUkVMT0NfTUVQX1BDUkVMMjRBMiIsCisrICAiQkZEX1JFTE9DX01FUF9QQ0FCUzI0QTIiLAorKyAgIkJGRF9SRUxPQ19NRVBfTE9XMTYiLAorKyAgIkJGRF9SRUxPQ19NRVBfSEkxNlUiLAorKyAgIkJGRF9SRUxPQ19NRVBfSEkxNlMiLAorKyAgIkJGRF9SRUxPQ19NRVBfR1BSRUwiLAorKyAgIkJGRF9SRUxPQ19NRVBfVFBSRUwiLAorKyAgIkJGRF9SRUxPQ19NRVBfVFBSRUw3IiwKKysgICJCRkRfUkVMT0NfTUVQX1RQUkVMN0EyIiwKKysgICJCRkRfUkVMT0NfTUVQX1RQUkVMN0E0IiwKKysgICJCRkRfUkVMT0NfTUVQX1VJTU0yNCIsCisrICAiQkZEX1JFTE9DX01FUF9BRERSMjRBNCIsCisrICAiQkZEX1JFTE9DX01FUF9HTlVfVlRJTkhFUklUIiwKKysgICJCRkRfUkVMT0NfTUVQX0dOVV9WVEVOVFJZIiwKKysKKysgICJCRkRfUkVMT0NfTU1JWF9HRVRBIiwKKysgICJCRkRfUkVMT0NfTU1JWF9HRVRBXzEiLAorKyAgIkJGRF9SRUxPQ19NTUlYX0dFVEFfMiIsCisrICAiQkZEX1JFTE9DX01NSVhfR0VUQV8zIiwKKysgICJCRkRfUkVMT0NfTU1JWF9DQlJBTkNIIiwKKysgICJCRkRfUkVMT0NfTU1JWF9DQlJBTkNIX0oiLAorKyAgIkJGRF9SRUxPQ19NTUlYX0NCUkFOQ0hfMSIsCisrICAiQkZEX1JFTE9DX01NSVhfQ0JSQU5DSF8yIiwKKysgICJCRkRfUkVMT0NfTU1JWF9DQlJBTkNIXzMiLAorKyAgIkJGRF9SRUxPQ19NTUlYX1BVU0hKIiwKKysgICJCRkRfUkVMT0NfTU1JWF9QVVNISl8xIiwKKysgICJCRkRfUkVMT0NfTU1JWF9QVVNISl8yIiwKKysgICJCRkRfUkVMT0NfTU1JWF9QVVNISl8zIiwKKysgICJCRkRfUkVMT0NfTU1JWF9QVVNISl9TVFVCQkFCTEUiLAorKyAgIkJGRF9SRUxPQ19NTUlYX0pNUCIsCisrICAiQkZEX1JFTE9DX01NSVhfSk1QXzEiLAorKyAgIkJGRF9SRUxPQ19NTUlYX0pNUF8yIiwKKysgICJCRkRfUkVMT0NfTU1JWF9KTVBfMyIsCisrICAiQkZEX1JFTE9DX01NSVhfQUREUjE5IiwKKysgICJCRkRfUkVMT0NfTU1JWF9BRERSMjciLAorKyAgIkJGRF9SRUxPQ19NTUlYX1JFR19PUl9CWVRFIiwKKysgICJCRkRfUkVMT0NfTU1JWF9SRUciLAorKyAgIkJGRF9SRUxPQ19NTUlYX0JBU0VfUExVU19PRkZTRVQiLAorKyAgIkJGRF9SRUxPQ19NTUlYX0xPQ0FMIiwKKysgICJCRkRfUkVMT0NfQVZSXzdfUENSRUwiLAorKyAgIkJGRF9SRUxPQ19BVlJfMTNfUENSRUwiLAorKyAgIkJGRF9SRUxPQ19BVlJfMTZfUE0iLAorKyAgIkJGRF9SRUxPQ19BVlJfTE84X0xESSIsCisrICAiQkZEX1JFTE9DX0FWUl9ISThfTERJIiwKKysgICJCRkRfUkVMT0NfQVZSX0hIOF9MREkiLAorKyAgIkJGRF9SRUxPQ19BVlJfTVM4X0xESSIsCisrICAiQkZEX1JFTE9DX0FWUl9MTzhfTERJX05FRyIsCisrICAiQkZEX1JFTE9DX0FWUl9ISThfTERJX05FRyIsCisrICAiQkZEX1JFTE9DX0FWUl9ISDhfTERJX05FRyIsCisrICAiQkZEX1JFTE9DX0FWUl9NUzhfTERJX05FRyIsCisrICAiQkZEX1JFTE9DX0FWUl9MTzhfTERJX1BNIiwKKysgICJCRkRfUkVMT0NfQVZSX0xPOF9MRElfR1MiLAorKyAgIkJGRF9SRUxPQ19BVlJfSEk4X0xESV9QTSIsCisrICAiQkZEX1JFTE9DX0FWUl9ISThfTERJX0dTIiwKKysgICJCRkRfUkVMT0NfQVZSX0hIOF9MRElfUE0iLAorKyAgIkJGRF9SRUxPQ19BVlJfTE84X0xESV9QTV9ORUciLAorKyAgIkJGRF9SRUxPQ19BVlJfSEk4X0xESV9QTV9ORUciLAorKyAgIkJGRF9SRUxPQ19BVlJfSEg4X0xESV9QTV9ORUciLAorKyAgIkJGRF9SRUxPQ19BVlJfQ0FMTCIsCisrICAiQkZEX1JFTE9DX0FWUl9MREkiLAorKyAgIkJGRF9SRUxPQ19BVlJfNiIsCisrICAiQkZEX1JFTE9DX0FWUl82X0FESVciLAorKyAgIkJGRF9SRUxPQ19BVlIzMl9ESUZGMzIiLAorKyAgIkJGRF9SRUxPQ19BVlIzMl9ESUZGMTYiLAorKyAgIkJGRF9SRUxPQ19BVlIzMl9ESUZGOCIsCisrICAiQkZEX1JFTE9DX0FWUjMyX0dPVDMyIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfR09UMTYiLAorKyAgIkJGRF9SRUxPQ19BVlIzMl9HT1Q4IiwKKysgICJCRkRfUkVMT0NfQVZSMzJfMjFTIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfMTZVIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfMTZTIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfU1VCNSIsCisrICAiQkZEX1JFTE9DX0FWUjMyXzhTX0VYVCIsCisrICAiQkZEX1JFTE9DX0FWUjMyXzhTIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfMTVTIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfMjJIX1BDUkVMIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfMThXX1BDUkVMIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfMTZCX1BDUkVMIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfMTZOX1BDUkVMIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfMTRVV19QQ1JFTCIsCisrICAiQkZEX1JFTE9DX0FWUjMyXzExSF9QQ1JFTCIsCisrICAiQkZEX1JFTE9DX0FWUjMyXzEwVVdfUENSRUwiLAorKyAgIkJGRF9SRUxPQ19BVlIzMl85SF9QQ1JFTCIsCisrICAiQkZEX1JFTE9DX0FWUjMyXzlVV19QQ1JFTCIsCisrICAiQkZEX1JFTE9DX0FWUjMyX0dPVFBDIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfR09UQ0FMTCIsCisrICAiQkZEX1JFTE9DX0FWUjMyX0xEQV9HT1QiLAorKyAgIkJGRF9SRUxPQ19BVlIzMl9HT1QyMVMiLAorKyAgIkJGRF9SRUxPQ19BVlIzMl9HT1QxOFNXIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfR09UMTZTIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfMzJfQ1BFTlQiLAorKyAgIkJGRF9SRUxPQ19BVlIzMl9DUENBTEwiLAorKyAgIkJGRF9SRUxPQ19BVlIzMl8xNl9DUCIsCisrICAiQkZEX1JFTE9DX0FWUjMyXzlXX0NQIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfQUxJR04iLAorKyAgIkJGRF9SRUxPQ19BVlIzMl8xNFVXIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfMTBVVyIsCisrICAiQkZEX1JFTE9DX0FWUjMyXzEwU1ciLAorKyAgIkJGRF9SRUxPQ19BVlIzMl9TVEhIX1ciLAorKyAgIkJGRF9SRUxPQ19BVlIzMl83VVciLAorKyAgIkJGRF9SRUxPQ19BVlIzMl82UyIsCisrICAiQkZEX1JFTE9DX0FWUjMyXzZVVyIsCisrICAiQkZEX1JFTE9DX0FWUjMyXzRVSCIsCisrICAiQkZEX1JFTE9DX0FWUjMyXzNVIiwKKysgICJCRkRfUkVMT0NfMzkwXzEyIiwKKysgICJCRkRfUkVMT0NfMzkwX0dPVDEyIiwKKysgICJCRkRfUkVMT0NfMzkwX1BMVDMyIiwKKysgICJCRkRfUkVMT0NfMzkwX0NPUFkiLAorKyAgIkJGRF9SRUxPQ18zOTBfR0xPQl9EQVQiLAorKyAgIkJGRF9SRUxPQ18zOTBfSk1QX1NMT1QiLAorKyAgIkJGRF9SRUxPQ18zOTBfUkVMQVRJVkUiLAorKyAgIkJGRF9SRUxPQ18zOTBfR09UUEMiLAorKyAgIkJGRF9SRUxPQ18zOTBfR09UMTYiLAorKyAgIkJGRF9SRUxPQ18zOTBfUEMxNkRCTCIsCisrICAiQkZEX1JFTE9DXzM5MF9QTFQxNkRCTCIsCisrICAiQkZEX1JFTE9DXzM5MF9QQzMyREJMIiwKKysgICJCRkRfUkVMT0NfMzkwX1BMVDMyREJMIiwKKysgICJCRkRfUkVMT0NfMzkwX0dPVFBDREJMIiwKKysgICJCRkRfUkVMT0NfMzkwX0dPVDY0IiwKKysgICJCRkRfUkVMT0NfMzkwX1BMVDY0IiwKKysgICJCRkRfUkVMT0NfMzkwX0dPVEVOVCIsCisrICAiQkZEX1JFTE9DXzM5MF9HT1RPRkY2NCIsCisrICAiQkZEX1JFTE9DXzM5MF9HT1RQTFQxMiIsCisrICAiQkZEX1JFTE9DXzM5MF9HT1RQTFQxNiIsCisrICAiQkZEX1JFTE9DXzM5MF9HT1RQTFQzMiIsCisrICAiQkZEX1JFTE9DXzM5MF9HT1RQTFQ2NCIsCisrICAiQkZEX1JFTE9DXzM5MF9HT1RQTFRFTlQiLAorKyAgIkJGRF9SRUxPQ18zOTBfUExUT0ZGMTYiLAorKyAgIkJGRF9SRUxPQ18zOTBfUExUT0ZGMzIiLAorKyAgIkJGRF9SRUxPQ18zOTBfUExUT0ZGNjQiLAorKyAgIkJGRF9SRUxPQ18zOTBfVExTX0xPQUQiLAorKyAgIkJGRF9SRUxPQ18zOTBfVExTX0dEQ0FMTCIsCisrICAiQkZEX1JFTE9DXzM5MF9UTFNfTERDQUxMIiwKKysgICJCRkRfUkVMT0NfMzkwX1RMU19HRDMyIiwKKysgICJCRkRfUkVMT0NfMzkwX1RMU19HRDY0IiwKKysgICJCRkRfUkVMT0NfMzkwX1RMU19HT1RJRTEyIiwKKysgICJCRkRfUkVMT0NfMzkwX1RMU19HT1RJRTMyIiwKKysgICJCRkRfUkVMT0NfMzkwX1RMU19HT1RJRTY0IiwKKysgICJCRkRfUkVMT0NfMzkwX1RMU19MRE0zMiIsCisrICAiQkZEX1JFTE9DXzM5MF9UTFNfTERNNjQiLAorKyAgIkJGRF9SRUxPQ18zOTBfVExTX0lFMzIiLAorKyAgIkJGRF9SRUxPQ18zOTBfVExTX0lFNjQiLAorKyAgIkJGRF9SRUxPQ18zOTBfVExTX0lFRU5UIiwKKysgICJCRkRfUkVMT0NfMzkwX1RMU19MRTMyIiwKKysgICJCRkRfUkVMT0NfMzkwX1RMU19MRTY0IiwKKysgICJCRkRfUkVMT0NfMzkwX1RMU19MRE8zMiIsCisrICAiQkZEX1JFTE9DXzM5MF9UTFNfTERPNjQiLAorKyAgIkJGRF9SRUxPQ18zOTBfVExTX0RUUE1PRCIsCisrICAiQkZEX1JFTE9DXzM5MF9UTFNfRFRQT0ZGIiwKKysgICJCRkRfUkVMT0NfMzkwX1RMU19UUE9GRiIsCisrICAiQkZEX1JFTE9DXzM5MF8yMCIsCisrICAiQkZEX1JFTE9DXzM5MF9HT1QyMCIsCisrICAiQkZEX1JFTE9DXzM5MF9HT1RQTFQyMCIsCisrICAiQkZEX1JFTE9DXzM5MF9UTFNfR09USUUyMCIsCisrICAiQkZEX1JFTE9DX1NDT1JFX0RVTU1ZMSIsCisrICAiQkZEX1JFTE9DX1NDT1JFX0dQUkVMMTUiLAorKyAgIkJGRF9SRUxPQ19TQ09SRV9EVU1NWTIiLAorKyAgIkJGRF9SRUxPQ19TQ09SRV9KTVAiLAorKyAgIkJGRF9SRUxPQ19TQ09SRV9CUkFOQ0giLAorKyAgIkJGRF9SRUxPQ19TQ09SRTE2X0pNUCIsCisrICAiQkZEX1JFTE9DX1NDT1JFMTZfQlJBTkNIIiwKKysgICJCRkRfUkVMT0NfU0NPUkVfR09UMTUiLAorKyAgIkJGRF9SRUxPQ19TQ09SRV9HT1RfTE8xNiIsCisrICAiQkZEX1JFTE9DX1NDT1JFX0NBTEwxNSIsCisrICAiQkZEX1JFTE9DX1NDT1JFX0RVTU1ZX0hJMTYiLAorKyAgIkJGRF9SRUxPQ19JUDJLX0ZSOSIsCisrICAiQkZEX1JFTE9DX0lQMktfQkFOSyIsCisrICAiQkZEX1JFTE9DX0lQMktfQUREUjE2Q0pQIiwKKysgICJCRkRfUkVMT0NfSVAyS19QQUdFMyIsCisrICAiQkZEX1JFTE9DX0lQMktfTE84REFUQSIsCisrICAiQkZEX1JFTE9DX0lQMktfSEk4REFUQSIsCisrICAiQkZEX1JFTE9DX0lQMktfRVg4REFUQSIsCisrICAiQkZEX1JFTE9DX0lQMktfTE84SU5TTiIsCisrICAiQkZEX1JFTE9DX0lQMktfSEk4SU5TTiIsCisrICAiQkZEX1JFTE9DX0lQMktfUENfU0tJUCIsCisrICAiQkZEX1JFTE9DX0lQMktfVEVYVCIsCisrICAiQkZEX1JFTE9DX0lQMktfRlJfT0ZGU0VUIiwKKysgICJCRkRfUkVMT0NfVlBFNEtNQVRIX0RBVEEiLAorKyAgIkJGRF9SRUxPQ19WUEU0S01BVEhfSU5TTiIsCisrICAiQkZEX1JFTE9DX1ZUQUJMRV9JTkhFUklUIiwKKysgICJCRkRfUkVMT0NfVlRBQkxFX0VOVFJZIiwKKysgICJCRkRfUkVMT0NfSUE2NF9JTU0xNCIsCisrICAiQkZEX1JFTE9DX0lBNjRfSU1NMjIiLAorKyAgIkJGRF9SRUxPQ19JQTY0X0lNTTY0IiwKKysgICJCRkRfUkVMT0NfSUE2NF9ESVIzMk1TQiIsCisrICAiQkZEX1JFTE9DX0lBNjRfRElSMzJMU0IiLAorKyAgIkJGRF9SRUxPQ19JQTY0X0RJUjY0TVNCIiwKKysgICJCRkRfUkVMT0NfSUE2NF9ESVI2NExTQiIsCisrICAiQkZEX1JFTE9DX0lBNjRfR1BSRUwyMiIsCisrICAiQkZEX1JFTE9DX0lBNjRfR1BSRUw2NEkiLAorKyAgIkJGRF9SRUxPQ19JQTY0X0dQUkVMMzJNU0IiLAorKyAgIkJGRF9SRUxPQ19JQTY0X0dQUkVMMzJMU0IiLAorKyAgIkJGRF9SRUxPQ19JQTY0X0dQUkVMNjRNU0IiLAorKyAgIkJGRF9SRUxPQ19JQTY0X0dQUkVMNjRMU0IiLAorKyAgIkJGRF9SRUxPQ19JQTY0X0xUT0ZGMjIiLAorKyAgIkJGRF9SRUxPQ19JQTY0X0xUT0ZGNjRJIiwKKysgICJCRkRfUkVMT0NfSUE2NF9QTFRPRkYyMiIsCisrICAiQkZEX1JFTE9DX0lBNjRfUExUT0ZGNjRJIiwKKysgICJCRkRfUkVMT0NfSUE2NF9QTFRPRkY2NE1TQiIsCisrICAiQkZEX1JFTE9DX0lBNjRfUExUT0ZGNjRMU0IiLAorKyAgIkJGRF9SRUxPQ19JQTY0X0ZQVFI2NEkiLAorKyAgIkJGRF9SRUxPQ19JQTY0X0ZQVFIzMk1TQiIsCisrICAiQkZEX1JFTE9DX0lBNjRfRlBUUjMyTFNCIiwKKysgICJCRkRfUkVMT0NfSUE2NF9GUFRSNjRNU0IiLAorKyAgIkJGRF9SRUxPQ19JQTY0X0ZQVFI2NExTQiIsCisrICAiQkZEX1JFTE9DX0lBNjRfUENSRUwyMUIiLAorKyAgIkJGRF9SRUxPQ19JQTY0X1BDUkVMMjFCSSIsCisrICAiQkZEX1JFTE9DX0lBNjRfUENSRUwyMU0iLAorKyAgIkJGRF9SRUxPQ19JQTY0X1BDUkVMMjFGIiwKKysgICJCRkRfUkVMT0NfSUE2NF9QQ1JFTDIyIiwKKysgICJCRkRfUkVMT0NfSUE2NF9QQ1JFTDYwQiIsCisrICAiQkZEX1JFTE9DX0lBNjRfUENSRUw2NEkiLAorKyAgIkJGRF9SRUxPQ19JQTY0X1BDUkVMMzJNU0IiLAorKyAgIkJGRF9SRUxPQ19JQTY0X1BDUkVMMzJMU0IiLAorKyAgIkJGRF9SRUxPQ19JQTY0X1BDUkVMNjRNU0IiLAorKyAgIkJGRF9SRUxPQ19JQTY0X1BDUkVMNjRMU0IiLAorKyAgIkJGRF9SRUxPQ19JQTY0X0xUT0ZGX0ZQVFIyMiIsCisrICAiQkZEX1JFTE9DX0lBNjRfTFRPRkZfRlBUUjY0SSIsCisrICAiQkZEX1JFTE9DX0lBNjRfTFRPRkZfRlBUUjMyTVNCIiwKKysgICJCRkRfUkVMT0NfSUE2NF9MVE9GRl9GUFRSMzJMU0IiLAorKyAgIkJGRF9SRUxPQ19JQTY0X0xUT0ZGX0ZQVFI2NE1TQiIsCisrICAiQkZEX1JFTE9DX0lBNjRfTFRPRkZfRlBUUjY0TFNCIiwKKysgICJCRkRfUkVMT0NfSUE2NF9TRUdSRUwzMk1TQiIsCisrICAiQkZEX1JFTE9DX0lBNjRfU0VHUkVMMzJMU0IiLAorKyAgIkJGRF9SRUxPQ19JQTY0X1NFR1JFTDY0TVNCIiwKKysgICJCRkRfUkVMT0NfSUE2NF9TRUdSRUw2NExTQiIsCisrICAiQkZEX1JFTE9DX0lBNjRfU0VDUkVMMzJNU0IiLAorKyAgIkJGRF9SRUxPQ19JQTY0X1NFQ1JFTDMyTFNCIiwKKysgICJCRkRfUkVMT0NfSUE2NF9TRUNSRUw2NE1TQiIsCisrICAiQkZEX1JFTE9DX0lBNjRfU0VDUkVMNjRMU0IiLAorKyAgIkJGRF9SRUxPQ19JQTY0X1JFTDMyTVNCIiwKKysgICJCRkRfUkVMT0NfSUE2NF9SRUwzMkxTQiIsCisrICAiQkZEX1JFTE9DX0lBNjRfUkVMNjRNU0IiLAorKyAgIkJGRF9SRUxPQ19JQTY0X1JFTDY0TFNCIiwKKysgICJCRkRfUkVMT0NfSUE2NF9MVFYzMk1TQiIsCisrICAiQkZEX1JFTE9DX0lBNjRfTFRWMzJMU0IiLAorKyAgIkJGRF9SRUxPQ19JQTY0X0xUVjY0TVNCIiwKKysgICJCRkRfUkVMT0NfSUE2NF9MVFY2NExTQiIsCisrICAiQkZEX1JFTE9DX0lBNjRfSVBMVE1TQiIsCisrICAiQkZEX1JFTE9DX0lBNjRfSVBMVExTQiIsCisrICAiQkZEX1JFTE9DX0lBNjRfQ09QWSIsCisrICAiQkZEX1JFTE9DX0lBNjRfTFRPRkYyMlgiLAorKyAgIkJGRF9SRUxPQ19JQTY0X0xEWE1PViIsCisrICAiQkZEX1JFTE9DX0lBNjRfVFBSRUwxNCIsCisrICAiQkZEX1JFTE9DX0lBNjRfVFBSRUwyMiIsCisrICAiQkZEX1JFTE9DX0lBNjRfVFBSRUw2NEkiLAorKyAgIkJGRF9SRUxPQ19JQTY0X1RQUkVMNjRNU0IiLAorKyAgIkJGRF9SRUxPQ19JQTY0X1RQUkVMNjRMU0IiLAorKyAgIkJGRF9SRUxPQ19JQTY0X0xUT0ZGX1RQUkVMMjIiLAorKyAgIkJGRF9SRUxPQ19JQTY0X0RUUE1PRDY0TVNCIiwKKysgICJCRkRfUkVMT0NfSUE2NF9EVFBNT0Q2NExTQiIsCisrICAiQkZEX1JFTE9DX0lBNjRfTFRPRkZfRFRQTU9EMjIiLAorKyAgIkJGRF9SRUxPQ19JQTY0X0RUUFJFTDE0IiwKKysgICJCRkRfUkVMT0NfSUE2NF9EVFBSRUwyMiIsCisrICAiQkZEX1JFTE9DX0lBNjRfRFRQUkVMNjRJIiwKKysgICJCRkRfUkVMT0NfSUE2NF9EVFBSRUwzMk1TQiIsCisrICAiQkZEX1JFTE9DX0lBNjRfRFRQUkVMMzJMU0IiLAorKyAgIkJGRF9SRUxPQ19JQTY0X0RUUFJFTDY0TVNCIiwKKysgICJCRkRfUkVMT0NfSUE2NF9EVFBSRUw2NExTQiIsCisrICAiQkZEX1JFTE9DX0lBNjRfTFRPRkZfRFRQUkVMMjIiLAorKyAgIkJGRF9SRUxPQ19NNjhIQzExX0hJOCIsCisrICAiQkZEX1JFTE9DX002OEhDMTFfTE84IiwKKysgICJCRkRfUkVMT0NfTTY4SEMxMV8zQiIsCisrICAiQkZEX1JFTE9DX002OEhDMTFfUkxfSlVNUCIsCisrICAiQkZEX1JFTE9DX002OEhDMTFfUkxfR1JPVVAiLAorKyAgIkJGRF9SRUxPQ19NNjhIQzExX0xPMTYiLAorKyAgIkJGRF9SRUxPQ19NNjhIQzExX1BBR0UiLAorKyAgIkJGRF9SRUxPQ19NNjhIQzExXzI0IiwKKysgICJCRkRfUkVMT0NfTTY4SEMxMl81QiIsCisrICAiQkZEX1JFTE9DXzE2Q19OVU0wOCIsCisrICAiQkZEX1JFTE9DXzE2Q19OVU0wOF9DIiwKKysgICJCRkRfUkVMT0NfMTZDX05VTTE2IiwKKysgICJCRkRfUkVMT0NfMTZDX05VTTE2X0MiLAorKyAgIkJGRF9SRUxPQ18xNkNfTlVNMzIiLAorKyAgIkJGRF9SRUxPQ18xNkNfTlVNMzJfQyIsCisrICAiQkZEX1JFTE9DXzE2Q19ESVNQMDQiLAorKyAgIkJGRF9SRUxPQ18xNkNfRElTUDA0X0MiLAorKyAgIkJGRF9SRUxPQ18xNkNfRElTUDA4IiwKKysgICJCRkRfUkVMT0NfMTZDX0RJU1AwOF9DIiwKKysgICJCRkRfUkVMT0NfMTZDX0RJU1AxNiIsCisrICAiQkZEX1JFTE9DXzE2Q19ESVNQMTZfQyIsCisrICAiQkZEX1JFTE9DXzE2Q19ESVNQMjQiLAorKyAgIkJGRF9SRUxPQ18xNkNfRElTUDI0X0MiLAorKyAgIkJGRF9SRUxPQ18xNkNfRElTUDI0YSIsCisrICAiQkZEX1JFTE9DXzE2Q19ESVNQMjRhX0MiLAorKyAgIkJGRF9SRUxPQ18xNkNfUkVHMDQiLAorKyAgIkJGRF9SRUxPQ18xNkNfUkVHMDRfQyIsCisrICAiQkZEX1JFTE9DXzE2Q19SRUcwNGEiLAorKyAgIkJGRF9SRUxPQ18xNkNfUkVHMDRhX0MiLAorKyAgIkJGRF9SRUxPQ18xNkNfUkVHMTQiLAorKyAgIkJGRF9SRUxPQ18xNkNfUkVHMTRfQyIsCisrICAiQkZEX1JFTE9DXzE2Q19SRUcxNiIsCisrICAiQkZEX1JFTE9DXzE2Q19SRUcxNl9DIiwKKysgICJCRkRfUkVMT0NfMTZDX1JFRzIwIiwKKysgICJCRkRfUkVMT0NfMTZDX1JFRzIwX0MiLAorKyAgIkJGRF9SRUxPQ18xNkNfQUJTMjAiLAorKyAgIkJGRF9SRUxPQ18xNkNfQUJTMjBfQyIsCisrICAiQkZEX1JFTE9DXzE2Q19BQlMyNCIsCisrICAiQkZEX1JFTE9DXzE2Q19BQlMyNF9DIiwKKysgICJCRkRfUkVMT0NfMTZDX0lNTTA0IiwKKysgICJCRkRfUkVMT0NfMTZDX0lNTTA0X0MiLAorKyAgIkJGRF9SRUxPQ18xNkNfSU1NMTYiLAorKyAgIkJGRF9SRUxPQ18xNkNfSU1NMTZfQyIsCisrICAiQkZEX1JFTE9DXzE2Q19JTU0yMCIsCisrICAiQkZEX1JFTE9DXzE2Q19JTU0yMF9DIiwKKysgICJCRkRfUkVMT0NfMTZDX0lNTTI0IiwKKysgICJCRkRfUkVMT0NfMTZDX0lNTTI0X0MiLAorKyAgIkJGRF9SRUxPQ18xNkNfSU1NMzIiLAorKyAgIkJGRF9SRUxPQ18xNkNfSU1NMzJfQyIsCisrICAiQkZEX1JFTE9DX0NSMTZfTlVNOCIsCisrICAiQkZEX1JFTE9DX0NSMTZfTlVNMTYiLAorKyAgIkJGRF9SRUxPQ19DUjE2X05VTTMyIiwKKysgICJCRkRfUkVMT0NfQ1IxNl9OVU0zMmEiLAorKyAgIkJGRF9SRUxPQ19DUjE2X1JFR1JFTDAiLAorKyAgIkJGRF9SRUxPQ19DUjE2X1JFR1JFTDQiLAorKyAgIkJGRF9SRUxPQ19DUjE2X1JFR1JFTDRhIiwKKysgICJCRkRfUkVMT0NfQ1IxNl9SRUdSRUwxNCIsCisrICAiQkZEX1JFTE9DX0NSMTZfUkVHUkVMMTRhIiwKKysgICJCRkRfUkVMT0NfQ1IxNl9SRUdSRUwxNiIsCisrICAiQkZEX1JFTE9DX0NSMTZfUkVHUkVMMjAiLAorKyAgIkJGRF9SRUxPQ19DUjE2X1JFR1JFTDIwYSIsCisrICAiQkZEX1JFTE9DX0NSMTZfQUJTMjAiLAorKyAgIkJGRF9SRUxPQ19DUjE2X0FCUzI0IiwKKysgICJCRkRfUkVMT0NfQ1IxNl9JTU00IiwKKysgICJCRkRfUkVMT0NfQ1IxNl9JTU04IiwKKysgICJCRkRfUkVMT0NfQ1IxNl9JTU0xNiIsCisrICAiQkZEX1JFTE9DX0NSMTZfSU1NMjAiLAorKyAgIkJGRF9SRUxPQ19DUjE2X0lNTTI0IiwKKysgICJCRkRfUkVMT0NfQ1IxNl9JTU0zMiIsCisrICAiQkZEX1JFTE9DX0NSMTZfSU1NMzJhIiwKKysgICJCRkRfUkVMT0NfQ1IxNl9ESVNQNCIsCisrICAiQkZEX1JFTE9DX0NSMTZfRElTUDgiLAorKyAgIkJGRF9SRUxPQ19DUjE2X0RJU1AxNiIsCisrICAiQkZEX1JFTE9DX0NSMTZfRElTUDIwIiwKKysgICJCRkRfUkVMT0NfQ1IxNl9ESVNQMjQiLAorKyAgIkJGRF9SRUxPQ19DUjE2X0RJU1AyNGEiLAorKyAgIkJGRF9SRUxPQ19DUlhfUkVMNCIsCisrICAiQkZEX1JFTE9DX0NSWF9SRUw4IiwKKysgICJCRkRfUkVMT0NfQ1JYX1JFTDhfQ01QIiwKKysgICJCRkRfUkVMT0NfQ1JYX1JFTDE2IiwKKysgICJCRkRfUkVMT0NfQ1JYX1JFTDI0IiwKKysgICJCRkRfUkVMT0NfQ1JYX1JFTDMyIiwKKysgICJCRkRfUkVMT0NfQ1JYX1JFR1JFTDEyIiwKKysgICJCRkRfUkVMT0NfQ1JYX1JFR1JFTDIyIiwKKysgICJCRkRfUkVMT0NfQ1JYX1JFR1JFTDI4IiwKKysgICJCRkRfUkVMT0NfQ1JYX1JFR1JFTDMyIiwKKysgICJCRkRfUkVMT0NfQ1JYX0FCUzE2IiwKKysgICJCRkRfUkVMT0NfQ1JYX0FCUzMyIiwKKysgICJCRkRfUkVMT0NfQ1JYX05VTTgiLAorKyAgIkJGRF9SRUxPQ19DUlhfTlVNMTYiLAorKyAgIkJGRF9SRUxPQ19DUlhfTlVNMzIiLAorKyAgIkJGRF9SRUxPQ19DUlhfSU1NMTYiLAorKyAgIkJGRF9SRUxPQ19DUlhfSU1NMzIiLAorKyAgIkJGRF9SRUxPQ19DUlhfU1dJVENIOCIsCisrICAiQkZEX1JFTE9DX0NSWF9TV0lUQ0gxNiIsCisrICAiQkZEX1JFTE9DX0NSWF9TV0lUQ0gzMiIsCisrICAiQkZEX1JFTE9DX0NSSVNfQkRJU1A4IiwKKysgICJCRkRfUkVMT0NfQ1JJU19VTlNJR05FRF81IiwKKysgICJCRkRfUkVMT0NfQ1JJU19TSUdORURfNiIsCisrICAiQkZEX1JFTE9DX0NSSVNfVU5TSUdORURfNiIsCisrICAiQkZEX1JFTE9DX0NSSVNfU0lHTkVEXzgiLAorKyAgIkJGRF9SRUxPQ19DUklTX1VOU0lHTkVEXzgiLAorKyAgIkJGRF9SRUxPQ19DUklTX1NJR05FRF8xNiIsCisrICAiQkZEX1JFTE9DX0NSSVNfVU5TSUdORURfMTYiLAorKyAgIkJGRF9SRUxPQ19DUklTX0xBUENRX09GRlNFVCIsCisrICAiQkZEX1JFTE9DX0NSSVNfVU5TSUdORURfNCIsCisrICAiQkZEX1JFTE9DX0NSSVNfQ09QWSIsCisrICAiQkZEX1JFTE9DX0NSSVNfR0xPQl9EQVQiLAorKyAgIkJGRF9SRUxPQ19DUklTX0pVTVBfU0xPVCIsCisrICAiQkZEX1JFTE9DX0NSSVNfUkVMQVRJVkUiLAorKyAgIkJGRF9SRUxPQ19DUklTXzMyX0dPVCIsCisrICAiQkZEX1JFTE9DX0NSSVNfMTZfR09UIiwKKysgICJCRkRfUkVMT0NfQ1JJU18zMl9HT1RQTFQiLAorKyAgIkJGRF9SRUxPQ19DUklTXzE2X0dPVFBMVCIsCisrICAiQkZEX1JFTE9DX0NSSVNfMzJfR09UUkVMIiwKKysgICJCRkRfUkVMT0NfQ1JJU18zMl9QTFRfR09UUkVMIiwKKysgICJCRkRfUkVMT0NfQ1JJU18zMl9QTFRfUENSRUwiLAorKyAgIkJGRF9SRUxPQ184NjBfQ09QWSIsCisrICAiQkZEX1JFTE9DXzg2MF9HTE9CX0RBVCIsCisrICAiQkZEX1JFTE9DXzg2MF9KVU1QX1NMT1QiLAorKyAgIkJGRF9SRUxPQ184NjBfUkVMQVRJVkUiLAorKyAgIkJGRF9SRUxPQ184NjBfUEMyNiIsCisrICAiQkZEX1JFTE9DXzg2MF9QTFQyNiIsCisrICAiQkZEX1JFTE9DXzg2MF9QQzE2IiwKKysgICJCRkRfUkVMT0NfODYwX0xPVzAiLAorKyAgIkJGRF9SRUxPQ184NjBfU1BMSVQwIiwKKysgICJCRkRfUkVMT0NfODYwX0xPVzEiLAorKyAgIkJGRF9SRUxPQ184NjBfU1BMSVQxIiwKKysgICJCRkRfUkVMT0NfODYwX0xPVzIiLAorKyAgIkJGRF9SRUxPQ184NjBfU1BMSVQyIiwKKysgICJCRkRfUkVMT0NfODYwX0xPVzMiLAorKyAgIkJGRF9SRUxPQ184NjBfTE9HT1QwIiwKKysgICJCRkRfUkVMT0NfODYwX1NQR09UMCIsCisrICAiQkZEX1JFTE9DXzg2MF9MT0dPVDEiLAorKyAgIkJGRF9SRUxPQ184NjBfU1BHT1QxIiwKKysgICJCRkRfUkVMT0NfODYwX0xPR09UT0ZGMCIsCisrICAiQkZEX1JFTE9DXzg2MF9TUEdPVE9GRjAiLAorKyAgIkJGRF9SRUxPQ184NjBfTE9HT1RPRkYxIiwKKysgICJCRkRfUkVMT0NfODYwX1NQR09UT0ZGMSIsCisrICAiQkZEX1JFTE9DXzg2MF9MT0dPVE9GRjIiLAorKyAgIkJGRF9SRUxPQ184NjBfTE9HT1RPRkYzIiwKKysgICJCRkRfUkVMT0NfODYwX0xPUEMiLAorKyAgIkJGRF9SRUxPQ184NjBfSElHSEFESiIsCisrICAiQkZEX1JFTE9DXzg2MF9IQUdPVCIsCisrICAiQkZEX1JFTE9DXzg2MF9IQUdPVE9GRiIsCisrICAiQkZEX1JFTE9DXzg2MF9IQVBDIiwKKysgICJCRkRfUkVMT0NfODYwX0hJR0giLAorKyAgIkJGRF9SRUxPQ184NjBfSElHT1QiLAorKyAgIkJGRF9SRUxPQ184NjBfSElHT1RPRkYiLAorKyAgIkJGRF9SRUxPQ19PUEVOUklTQ19BQlNfMjYiLAorKyAgIkJGRF9SRUxPQ19PUEVOUklTQ19SRUxfMjYiLAorKyAgIkJGRF9SRUxPQ19IOF9ESVIxNkE4IiwKKysgICJCRkRfUkVMT0NfSDhfRElSMTZSOCIsCisrICAiQkZEX1JFTE9DX0g4X0RJUjI0QTgiLAorKyAgIkJGRF9SRUxPQ19IOF9ESVIyNFI4IiwKKysgICJCRkRfUkVMT0NfSDhfRElSMzJBMTYiLAorKyAgIkJGRF9SRUxPQ19YU1RPUk1ZMTZfUkVMXzEyIiwKKysgICJCRkRfUkVMT0NfWFNUT1JNWTE2XzEyIiwKKysgICJCRkRfUkVMT0NfWFNUT1JNWTE2XzI0IiwKKysgICJCRkRfUkVMT0NfWFNUT1JNWTE2X0ZQVFIxNiIsCisrICAiQkZEX1JFTE9DX1JFTEMiLAorKworKyAgIkJGRF9SRUxPQ19YQzE2WF9QQUciLAorKyAgIkJGRF9SRUxPQ19YQzE2WF9QT0YiLAorKyAgIkJGRF9SRUxPQ19YQzE2WF9TRUciLAorKyAgIkJGRF9SRUxPQ19YQzE2WF9TT0YiLAorKyAgIkJGRF9SRUxPQ19WQVhfR0xPQl9EQVQiLAorKyAgIkJGRF9SRUxPQ19WQVhfSk1QX1NMT1QiLAorKyAgIkJGRF9SRUxPQ19WQVhfUkVMQVRJVkUiLAorKyAgIkJGRF9SRUxPQ19NVF9QQzE2IiwKKysgICJCRkRfUkVMT0NfTVRfSEkxNiIsCisrICAiQkZEX1JFTE9DX01UX0xPMTYiLAorKyAgIkJGRF9SRUxPQ19NVF9HTlVfVlRJTkhFUklUIiwKKysgICJCRkRfUkVMT0NfTVRfR05VX1ZURU5UUlkiLAorKyAgIkJGRF9SRUxPQ19NVF9QQ0lOU044IiwKKysgICJCRkRfUkVMT0NfTVNQNDMwXzEwX1BDUkVMIiwKKysgICJCRkRfUkVMT0NfTVNQNDMwXzE2X1BDUkVMIiwKKysgICJCRkRfUkVMT0NfTVNQNDMwXzE2IiwKKysgICJCRkRfUkVMT0NfTVNQNDMwXzE2X1BDUkVMX0JZVEUiLAorKyAgIkJGRF9SRUxPQ19NU1A0MzBfMTZfQllURSIsCisrICAiQkZEX1JFTE9DX01TUDQzMF8yWF9QQ1JFTCIsCisrICAiQkZEX1JFTE9DX01TUDQzMF9STF9QQ1JFTCIsCisrICAiQkZEX1JFTE9DX0lRMjAwMF9PRkZTRVRfMTYiLAorKyAgIkJGRF9SRUxPQ19JUTIwMDBfT0ZGU0VUXzIxIiwKKysgICJCRkRfUkVMT0NfSVEyMDAwX1VISTE2IiwKKysgICJCRkRfUkVMT0NfWFRFTlNBX1JUTEQiLAorKyAgIkJGRF9SRUxPQ19YVEVOU0FfR0xPQl9EQVQiLAorKyAgIkJGRF9SRUxPQ19YVEVOU0FfSk1QX1NMT1QiLAorKyAgIkJGRF9SRUxPQ19YVEVOU0FfUkVMQVRJVkUiLAorKyAgIkJGRF9SRUxPQ19YVEVOU0FfUExUIiwKKysgICJCRkRfUkVMT0NfWFRFTlNBX0RJRkY4IiwKKysgICJCRkRfUkVMT0NfWFRFTlNBX0RJRkYxNiIsCisrICAiQkZEX1JFTE9DX1hURU5TQV9ESUZGMzIiLAorKyAgIkJGRF9SRUxPQ19YVEVOU0FfU0xPVDBfT1AiLAorKyAgIkJGRF9SRUxPQ19YVEVOU0FfU0xPVDFfT1AiLAorKyAgIkJGRF9SRUxPQ19YVEVOU0FfU0xPVDJfT1AiLAorKyAgIkJGRF9SRUxPQ19YVEVOU0FfU0xPVDNfT1AiLAorKyAgIkJGRF9SRUxPQ19YVEVOU0FfU0xPVDRfT1AiLAorKyAgIkJGRF9SRUxPQ19YVEVOU0FfU0xPVDVfT1AiLAorKyAgIkJGRF9SRUxPQ19YVEVOU0FfU0xPVDZfT1AiLAorKyAgIkJGRF9SRUxPQ19YVEVOU0FfU0xPVDdfT1AiLAorKyAgIkJGRF9SRUxPQ19YVEVOU0FfU0xPVDhfT1AiLAorKyAgIkJGRF9SRUxPQ19YVEVOU0FfU0xPVDlfT1AiLAorKyAgIkJGRF9SRUxPQ19YVEVOU0FfU0xPVDEwX09QIiwKKysgICJCRkRfUkVMT0NfWFRFTlNBX1NMT1QxMV9PUCIsCisrICAiQkZEX1JFTE9DX1hURU5TQV9TTE9UMTJfT1AiLAorKyAgIkJGRF9SRUxPQ19YVEVOU0FfU0xPVDEzX09QIiwKKysgICJCRkRfUkVMT0NfWFRFTlNBX1NMT1QxNF9PUCIsCisrICAiQkZEX1JFTE9DX1hURU5TQV9TTE9UMF9BTFQiLAorKyAgIkJGRF9SRUxPQ19YVEVOU0FfU0xPVDFfQUxUIiwKKysgICJCRkRfUkVMT0NfWFRFTlNBX1NMT1QyX0FMVCIsCisrICAiQkZEX1JFTE9DX1hURU5TQV9TTE9UM19BTFQiLAorKyAgIkJGRF9SRUxPQ19YVEVOU0FfU0xPVDRfQUxUIiwKKysgICJCRkRfUkVMT0NfWFRFTlNBX1NMT1Q1X0FMVCIsCisrICAiQkZEX1JFTE9DX1hURU5TQV9TTE9UNl9BTFQiLAorKyAgIkJGRF9SRUxPQ19YVEVOU0FfU0xPVDdfQUxUIiwKKysgICJCRkRfUkVMT0NfWFRFTlNBX1NMT1Q4X0FMVCIsCisrICAiQkZEX1JFTE9DX1hURU5TQV9TTE9UOV9BTFQiLAorKyAgIkJGRF9SRUxPQ19YVEVOU0FfU0xPVDEwX0FMVCIsCisrICAiQkZEX1JFTE9DX1hURU5TQV9TTE9UMTFfQUxUIiwKKysgICJCRkRfUkVMT0NfWFRFTlNBX1NMT1QxMl9BTFQiLAorKyAgIkJGRF9SRUxPQ19YVEVOU0FfU0xPVDEzX0FMVCIsCisrICAiQkZEX1JFTE9DX1hURU5TQV9TTE9UMTRfQUxUIiwKKysgICJCRkRfUkVMT0NfWFRFTlNBX09QMCIsCisrICAiQkZEX1JFTE9DX1hURU5TQV9PUDEiLAorKyAgIkJGRF9SRUxPQ19YVEVOU0FfT1AyIiwKKysgICJCRkRfUkVMT0NfWFRFTlNBX0FTTV9FWFBBTkQiLAorKyAgIkJGRF9SRUxPQ19YVEVOU0FfQVNNX1NJTVBMSUZZIiwKKysgICJCRkRfUkVMT0NfWjgwX0RJU1A4IiwKKysgICJCRkRfUkVMT0NfWjhLX0RJU1A3IiwKKysgICJCRkRfUkVMT0NfWjhLX0NBTExSIiwKKysgICJCRkRfUkVMT0NfWjhLX0lNTTRMIiwKKysgIkBAb3ZlcmZsb3c6IEJGRF9SRUxPQ19VTlVTRURAQCIsCisrfTsKKysjZW5kaWYKKysKKytyZWxvY19ob3d0b190eXBlICpiZmRfZGVmYXVsdF9yZWxvY190eXBlX2xvb2t1cAorKyAgIChiZmQgKmFiZmQsIGJmZF9yZWxvY19jb2RlX3JlYWxfdHlwZSAgY29kZSk7CisrCisrYmZkX2Jvb2xlYW4gYmZkX2dlbmVyaWNfcmVsYXhfc2VjdGlvbgorKyAgIChiZmQgKmFiZmQsCisrICAgIGFzZWN0aW9uICpzZWN0aW9uLAorKyAgICBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLAorKyAgICBiZmRfYm9vbGVhbiAqKTsKKysKKytiZmRfYm9vbGVhbiBiZmRfZ2VuZXJpY19nY19zZWN0aW9ucworKyAgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrCisrYmZkX2Jvb2xlYW4gYmZkX2dlbmVyaWNfbWVyZ2Vfc2VjdGlvbnMKKysgICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOworKworK2JmZF9ieXRlICpiZmRfZ2VuZXJpY19nZXRfcmVsb2NhdGVkX3NlY3Rpb25fY29udGVudHMKKysgICAoYmZkICphYmZkLAorKyAgICBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqbGlua19pbmZvLAorKyAgICBzdHJ1Y3QgYmZkX2xpbmtfb3JkZXIgKmxpbmtfb3JkZXIsCisrICAgIGJmZF9ieXRlICpkYXRhLAorKyAgICBiZmRfYm9vbGVhbiByZWxvY2F0YWJsZSwKKysgICAgYXN5bWJvbCAqKnN5bWJvbHMpOworKworKy8qIEV4dHJhY3RlZCBmcm9tIGFyY2h1cmVzLmMuICAqLworK2V4dGVybiBjb25zdCBiZmRfYXJjaF9pbmZvX3R5cGUgYmZkX2RlZmF1bHRfYXJjaF9zdHJ1Y3Q7CisrYmZkX2Jvb2xlYW4gYmZkX2RlZmF1bHRfc2V0X2FyY2hfbWFjaAorKyAgIChiZmQgKmFiZmQsIGVudW0gYmZkX2FyY2hpdGVjdHVyZSBhcmNoLCB1bnNpZ25lZCBsb25nIG1hY2gpOworKworK2NvbnN0IGJmZF9hcmNoX2luZm9fdHlwZSAqYmZkX2RlZmF1bHRfY29tcGF0aWJsZQorKyAgIChjb25zdCBiZmRfYXJjaF9pbmZvX3R5cGUgKmEsIGNvbnN0IGJmZF9hcmNoX2luZm9fdHlwZSAqYik7CisrCisrYmZkX2Jvb2xlYW4gYmZkX2RlZmF1bHRfc2NhbgorKyAgIChjb25zdCBzdHJ1Y3QgYmZkX2FyY2hfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqc3RyaW5nKTsKKysKKysvKiBFeHRyYWN0ZWQgZnJvbSBlbGYuYy4gICovCisrc3RydWN0IGVsZl9pbnRlcm5hbF9zaGRyICpiZmRfZWxmX2ZpbmRfc2VjdGlvbiAoYmZkICphYmZkLCBjaGFyICpuYW1lKTsKKysKKy0tLSAvZGV2L251bGwKKysrKyBiL2JmZC9kb2MvbGliY29mZi5oCitAQCAtMCwwICsxLDkzNiBAQAorKy8qIERPIE5PVCBFRElUISAgLSotIGJ1ZmZlci1yZWFkLW9ubHk6IHQgLSotICBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSAKKysgICBnZW5lcmF0ZWQgZnJvbSAibGliY29mZi1pbi5oIiBhbmQgImNvZmZjb2RlLmgiLgorKyAgIFJ1biAibWFrZSBoZWFkZXJzIiBpbiB5b3VyIGJ1aWxkIGJmZC8gdG8gcmVnZW5lcmF0ZS4gICovCisrCisrLyogQkZEIENPRkYgb2JqZWN0IGZpbGUgcHJpdmF0ZSBzdHJ1Y3R1cmUuCisrICAgQ29weXJpZ2h0IDE5OTAsIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisrICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNworKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgQ3lnbnVzIFN1cHBvcnQuCisrCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQkZELCB0aGUgQmluYXJ5IEZpbGUgRGVzY3JpcHRvciBsaWJyYXJ5LgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwKKysgICBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworKworKyNpbmNsdWRlICJiZmRsaW5rLmgiCisrCisrLyogT2JqZWN0IGZpbGUgdGRhdGE7IGFjY2VzcyBtYWNyb3MuICAqLworKworKyNkZWZpbmUgY29mZl9kYXRhKGJmZCkJCSAgICAgICgoYmZkKS0+dGRhdGEuY29mZl9vYmpfZGF0YSkKKysjZGVmaW5lIGV4ZWNfaGRyKGJmZCkJCSAgICAgIChjb2ZmX2RhdGEgKGJmZCktPmhkcikKKysjZGVmaW5lIG9ial9wZShiZmQpICAgICAgICAgICAgICAgICAgIChjb2ZmX2RhdGEgKGJmZCktPnBlKQorKyNkZWZpbmUgb2JqX3N5bWJvbHMoYmZkKQkgICAgICAoY29mZl9kYXRhIChiZmQpLT5zeW1ib2xzKQorKyNkZWZpbmUJb2JqX3N5bV9maWxlcG9zKGJmZCkJICAgICAgKGNvZmZfZGF0YSAoYmZkKS0+c3ltX2ZpbGVwb3MpCisrI2RlZmluZSBvYmpfcmVsb2NiYXNlKGJmZCkJICAgICAgKGNvZmZfZGF0YSAoYmZkKS0+cmVsb2NiYXNlKQorKyNkZWZpbmUgb2JqX3Jhd19zeW1lbnRzKGJmZCkJICAgICAgKGNvZmZfZGF0YSAoYmZkKS0+cmF3X3N5bWVudHMpCisrI2RlZmluZSBvYmpfcmF3X3N5bWVudF9jb3VudChiZmQpICAgICAoY29mZl9kYXRhIChiZmQpLT5yYXdfc3ltZW50X2NvdW50KQorKyNkZWZpbmUgb2JqX2NvbnZlcnQoYmZkKQkgICAgICAoY29mZl9kYXRhIChiZmQpLT5jb252ZXJzaW9uX3RhYmxlKQorKyNkZWZpbmUgb2JqX2NvbnZfdGFibGVfc2l6ZShiZmQpICAgICAgKGNvZmZfZGF0YSAoYmZkKS0+Y29udl90YWJsZV9zaXplKQorKyNkZWZpbmUgb2JqX2NvZmZfZXh0ZXJuYWxfc3ltcyhiZmQpICAgKGNvZmZfZGF0YSAoYmZkKS0+ZXh0ZXJuYWxfc3ltcykKKysjZGVmaW5lIG9ial9jb2ZmX2tlZXBfc3ltcyhiZmQpCSAgICAgIChjb2ZmX2RhdGEgKGJmZCktPmtlZXBfc3ltcykKKysjZGVmaW5lIG9ial9jb2ZmX3N0cmluZ3MoYmZkKQkgICAgICAoY29mZl9kYXRhIChiZmQpLT5zdHJpbmdzKQorKyNkZWZpbmUgb2JqX2NvZmZfa2VlcF9zdHJpbmdzKGJmZCkgICAgKGNvZmZfZGF0YSAoYmZkKS0+a2VlcF9zdHJpbmdzKQorKyNkZWZpbmUgb2JqX2NvZmZfc3ltX2hhc2hlcyhiZmQpICAgICAgKGNvZmZfZGF0YSAoYmZkKS0+c3ltX2hhc2hlcykKKysjZGVmaW5lIG9ial9jb2ZmX3N0cmluZ3Nfd3JpdHRlbihiZmQpIChjb2ZmX2RhdGEgKGJmZCktPnN0cmluZ3Nfd3JpdHRlbikKKysjZGVmaW5lIG9ial9jb2ZmX2xvY2FsX3RvY190YWJsZShiZmQpIChjb2ZmX2RhdGEgKGJmZCktPmxvY2FsX3RvY19zeW1fbWFwKQorKworKy8qIGBUZGF0YScgaW5mb3JtYXRpb24ga2VwdCBmb3IgQ09GRiBmaWxlcy4gICovCisrCisrdHlwZWRlZiBzdHJ1Y3QgY29mZl90ZGF0YQorK3sKKysgIHN0cnVjdCBjb2ZmX3N5bWJvbF9zdHJ1Y3QgKnN5bWJvbHM7CS8qIFN5bXRhYiBmb3IgaW5wdXQgYmZkLiAgKi8KKysgIHVuc2lnbmVkIGludCAqY29udmVyc2lvbl90YWJsZTsKKysgIGludCBjb252X3RhYmxlX3NpemU7CisrICBmaWxlX3B0ciBzeW1fZmlsZXBvczsKKysKKysgIHN0cnVjdCBjb2ZmX3B0cl9zdHJ1Y3QgKnJhd19zeW1lbnRzOworKyAgdW5zaWduZWQgbG9uZyByYXdfc3ltZW50X2NvdW50OworKworKyAgLyogVGhlc2UgYXJlIG9ubHkgdmFsaWQgb25jZSB3cml0aW5nIGhhcyBiZWd1bi4gICovCisrICBsb25nIGludCByZWxvY2Jhc2U7CisrCisrICAvKiBUaGVzZSBtZW1iZXJzIGNvbW11bmljYXRlIGltcG9ydGFudCBjb25zdGFudHMgYWJvdXQgdGhlIHN5bWJvbCB0YWJsZQorKyAgICAgdG8gR0RCJ3Mgc3ltYm9sLXJlYWRpbmcgY29kZS4gIFRoZXNlIGBjb25zdGFudHMnIHVuZm9ydHVuYXRlbHkgdmFyeQorKyAgICAgZnJvbSBjb2ZmIGltcGxlbWVudGF0aW9uIHRvIGltcGxlbWVudGF0aW9uLi4uICAqLworKyAgdW5zaWduZWQgbG9jYWxfbl9idG1hc2s7CisrICB1bnNpZ25lZCBsb2NhbF9uX2J0c2hmdDsKKysgIHVuc2lnbmVkIGxvY2FsX25fdG1hc2s7CisrICB1bnNpZ25lZCBsb2NhbF9uX3RzaGlmdDsKKysgIHVuc2lnbmVkIGxvY2FsX3N5bWVzejsKKysgIHVuc2lnbmVkIGxvY2FsX2F1eGVzejsKKysgIHVuc2lnbmVkIGxvY2FsX2xpbmVzejsKKysKKysgIC8qIFRoZSB1bnN3YXBwZWQgZXh0ZXJuYWwgc3ltYm9scy4gIE1heSBiZSBOVUxMLiAgUmVhZCBieQorKyAgICAgX2JmZF9jb2ZmX2dldF9leHRlcm5hbF9zeW1ib2xzLiAgKi8KKysgIHZvaWQgKiBleHRlcm5hbF9zeW1zOworKyAgLyogSWYgdGhpcyBpcyBUUlVFLCB0aGUgZXh0ZXJuYWxfc3ltcyBtYXkgbm90IGJlIGZyZWVkLiAgKi8KKysgIGJmZF9ib29sZWFuIGtlZXBfc3ltczsKKysKKysgIC8qIFRoZSBzdHJpbmcgdGFibGUuICBNYXkgYmUgTlVMTC4gIFJlYWQgYnkKKysgICAgIF9iZmRfY29mZl9yZWFkX3N0cmluZ190YWJsZS4gICovCisrICBjaGFyICpzdHJpbmdzOworKyAgLyogSWYgdGhpcyBpcyBUUlVFLCB0aGUgc3RyaW5ncyBtYXkgbm90IGJlIGZyZWVkLiAgKi8KKysgIGJmZF9ib29sZWFuIGtlZXBfc3RyaW5nczsKKysgIC8qIElmIHRoaXMgaXMgVFJVRSwgdGhlIHN0cmluZ3MgaGF2ZSBiZWVuIHdyaXR0ZW4gb3V0IGFscmVhZHkuICAqLworKyAgYmZkX2Jvb2xlYW4gc3RyaW5nc193cml0dGVuOworKworKyAgLyogSXMgdGhpcyBhIFBFIGZvcm1hdCBjb2ZmIGZpbGU/ICAqLworKyAgaW50IHBlOworKyAgLyogVXNlZCBieSB0aGUgQ09GRiBiYWNrZW5kIGxpbmtlci4gICovCisrICBzdHJ1Y3QgY29mZl9saW5rX2hhc2hfZW50cnkgKipzeW1faGFzaGVzOworKworKyAgLyogVXNlZCBieSB0aGUgcGUgbGlua2VyIGZvciBQb3dlclBDLiAgKi8KKysgIGludCAqbG9jYWxfdG9jX3N5bV9tYXA7CisrCisrICBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqbGlua19pbmZvOworKworKyAgLyogVXNlZCBieSBjb2ZmX2ZpbmRfbmVhcmVzdF9saW5lLiAgKi8KKysgIHZvaWQgKiBsaW5lX2luZm87CisrCisrICAvKiBBIHBsYWNlIHRvIHN0YXNoIGR3YXJmMiBpbmZvIGZvciB0aGlzIGJmZC4gICovCisrICB2b2lkICogZHdhcmYyX2ZpbmRfbGluZV9pbmZvOworKworKyAgLyogVGhlIHRpbWVzdGFtcCBmcm9tIHRoZSBDT0ZGIGZpbGUgaGVhZGVyLiAgKi8KKysgIGxvbmcgdGltZXN0YW1wOworKworKyAgLyogQ29weSBvZiBzb21lIG9mIHRoZSBmX2ZsYWdzIGJpdHMgaW4gdGhlIENPRkYgZmlsZWhkciBzdHJ1Y3R1cmUsCisrICAgICB1c2VkIGJ5IEFSTSBjb2RlLiAgKi8KKysgIGZsYWd3b3JkIGZsYWdzOworKworK30gY29mZl9kYXRhX3R5cGU7CisrCisrLyogVGRhdGEgZm9yIHBlIGltYWdlIGZpbGVzLiAgKi8KKyt0eXBlZGVmIHN0cnVjdCBwZV90ZGF0YQorK3sKKysgIGNvZmZfZGF0YV90eXBlIGNvZmY7CisrICBzdHJ1Y3QgaW50ZXJuYWxfZXh0cmFfcGVfYW91dGhkciBwZV9vcHRoZHI7CisrICBpbnQgZGxsOworKyAgaW50IGhhc19yZWxvY19zZWN0aW9uOworKyAgYmZkX2Jvb2xlYW4gKCppbl9yZWxvY19wKSAoYmZkICosIHJlbG9jX2hvd3RvX3R5cGUgKik7CisrICBmbGFnd29yZCByZWFsX2ZsYWdzOworKyAgaW50IHRhcmdldF9zdWJzeXN0ZW07CisrICBiZmRfYm9vbGVhbiBmb3JjZV9taW5pbXVtX2FsaWdubWVudDsKKyt9IHBlX2RhdGFfdHlwZTsKKysKKysjZGVmaW5lIHBlX2RhdGEoYmZkKQkJKChiZmQpLT50ZGF0YS5wZV9vYmpfZGF0YSkKKysKKysvKiBUZGF0YSBmb3IgWENPRkYgZmlsZXMuICAqLworKworK3N0cnVjdCB4Y29mZl90ZGF0YQorK3sKKysgIC8qIEJhc2ljIENPRkYgaW5mb3JtYXRpb24uICAqLworKyAgY29mZl9kYXRhX3R5cGUgY29mZjsKKysKKysgIC8qIFRSVUUgaWYgdGhpcyBpcyBhbiBYQ09GRjY0IGZpbGUuICovCisrICBiZmRfYm9vbGVhbiB4Y29mZjY0OworKworKyAgLyogVFJVRSBpZiBhIGxhcmdlIGEub3V0IGhlYWRlciBzaG91bGQgYmUgZ2VuZXJhdGVkLiAgKi8KKysgIGJmZF9ib29sZWFuIGZ1bGxfYW91dGhkcjsKKysKKysgIC8qIFRPQyB2YWx1ZS4gICovCisrICBiZmRfdm1hIHRvYzsKKysKKysgIC8qIEluZGV4IG9mIHNlY3Rpb24gaG9sZGluZyBUT0MuICAqLworKyAgaW50IHNudG9jOworKworKyAgLyogSW5kZXggb2Ygc2VjdGlvbiBob2xkaW5nIGVudHJ5IHBvaW50LiAgKi8KKysgIGludCBzbmVudHJ5OworKworKyAgLyogLnRleHQgYWxpZ25tZW50IGZyb20gb3B0aW9uYWwgaGVhZGVyLiAgKi8KKysgIGludCB0ZXh0X2FsaWduX3Bvd2VyOworKworKyAgLyogLmRhdGEgYWxpZ25tZW50IGZyb20gb3B0aW9uYWwgaGVhZGVyLiAgKi8KKysgIGludCBkYXRhX2FsaWduX3Bvd2VyOworKworKyAgLyogbW9kdHlwZSBmcm9tIG9wdGlvbmFsIGhlYWRlci4gICovCisrICBzaG9ydCBtb2R0eXBlOworKworKyAgLyogY3B1dHlwZSBmcm9tIG9wdGlvbmFsIGhlYWRlci4gICovCisrICBzaG9ydCBjcHV0eXBlOworKworKyAgLyogbWF4ZGF0YSBmcm9tIG9wdGlvbmFsIGhlYWRlci4gICovCisrICBiZmRfdm1hIG1heGRhdGE7CisrCisrICAvKiBtYXhzdGFjayBmcm9tIG9wdGlvbmFsIGhlYWRlci4gICovCisrICBiZmRfdm1hIG1heHN0YWNrOworKworKyAgLyogVXNlZCBieSB0aGUgWENPRkYgYmFja2VuZCBsaW5rZXIuICAqLworKyAgYXNlY3Rpb24gKipjc2VjdHM7CisrICB1bnNpZ25lZCBsb25nICpkZWJ1Z19pbmRpY2VzOworKyAgdW5zaWduZWQgaW50IGltcG9ydF9maWxlX2lkOworK307CisrCisrI2RlZmluZSB4Y29mZl9kYXRhKGFiZmQpICgoYWJmZCktPnRkYXRhLnhjb2ZmX29ial9kYXRhKQorKworKy8qIFdlIHRha2UgdGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gYXN5bWJvbCB0byBlbnN1cmUgdGhhdCB0aGUKKysgICBtYWNybyBpcyBvbmx5IGV2ZXIgYXBwbGllZCB0byBhbiBhc3ltYm9sLiAgKi8KKysjZGVmaW5lIGNvZmZzeW1ib2woYXN5bWJvbCkgKChjb2ZmX3N5bWJvbF90eXBlICopKCYoKGFzeW1ib2wpLT50aGVfYmZkKSkpCisrCisrLyogVGhlIHVzZWRfYnlfYmZkIGZpZWxkIG9mIGEgc2VjdGlvbiBtYXkgYmUgc2V0IHRvIGEgcG9pbnRlciB0byB0aGlzCisrICAgc3RydWN0dXJlLiAgKi8KKysKKytzdHJ1Y3QgY29mZl9zZWN0aW9uX3RkYXRhCisreworKyAgLyogVGhlIHJlbG9jcywgc3dhcHBlZCBpbnRvIENPRkYgaW50ZXJuYWwgZm9ybS4gIFRoaXMgbWF5IGJlIE5VTEwuICAqLworKyAgc3RydWN0IGludGVybmFsX3JlbG9jICpyZWxvY3M7CisrICAvKiBJZiB0aGlzIGlzIFRSVUUsIHRoZSByZWxvY3MgZW50cnkgbWF5IG5vdCBiZSBmcmVlZC4gICovCisrICBiZmRfYm9vbGVhbiBrZWVwX3JlbG9jczsKKysgIC8qIFRoZSBzZWN0aW9uIGNvbnRlbnRzLiAgVGhpcyBtYXkgYmUgTlVMTC4gICovCisrICBiZmRfYnl0ZSAqY29udGVudHM7CisrICAvKiBJZiB0aGlzIGlzIFRSVUUsIHRoZSBjb250ZW50cyBlbnRyeSBtYXkgbm90IGJlIGZyZWVkLiAgKi8KKysgIGJmZF9ib29sZWFuIGtlZXBfY29udGVudHM7CisrICAvKiBJbmZvcm1hdGlvbiBjYWNoZWQgYnkgY29mZl9maW5kX25lYXJlc3RfbGluZS4gICovCisrICBiZmRfdm1hIG9mZnNldDsKKysgIHVuc2lnbmVkIGludCBpOworKyAgY29uc3QgY2hhciAqZnVuY3Rpb247CisrICAvKiBPcHRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBhIENPTURBVCBlbnRyeTsgTlVMTCBpZiBub3QgQ09NREFULiAqLworKyAgc3RydWN0IGNvZmZfY29tZGF0X2luZm8gKmNvbWRhdDsKKysgIGludCBsaW5lX2Jhc2U7CisrICAvKiBBIHBvaW50ZXIgdXNlZCBmb3IgLnN0YWIgbGlua2luZyBvcHRpbWl6YXRpb25zLiAgKi8KKysgIHZvaWQgKiBzdGFiX2luZm87CisrICAvKiBBdmFpbGFibGUgZm9yIGluZGl2aWR1YWwgYmFja2VuZHMuICAqLworKyAgdm9pZCAqIHRkYXRhOworK307CisrCisrLyogQW4gYWNjZXNzb3IgbWFjcm8gZm9yIHRoZSBjb2ZmX3NlY3Rpb25fdGRhdGEgc3RydWN0dXJlLiAgKi8KKysjZGVmaW5lIGNvZmZfc2VjdGlvbl9kYXRhKGFiZmQsIHNlYykgXAorKyAgKChzdHJ1Y3QgY29mZl9zZWN0aW9uX3RkYXRhICopIChzZWMpLT51c2VkX2J5X2JmZCkKKysKKysvKiBUZGF0YSBmb3Igc2VjdGlvbnMgaW4gWENPRkYgZmlsZXMuICBUaGlzIGlzIHVzZWQgYnkgdGhlIGxpbmtlci4gICovCisrCisrc3RydWN0IHhjb2ZmX3NlY3Rpb25fdGRhdGEKKyt7CisrICAvKiBVc2VkIGZvciBYQ09GRiBjc2VjdHMgY3JlYXRlZCBieSB0aGUgbGlua2VyOyBwb2ludHMgdG8gdGhlIHJlYWwKKysgICAgIFhDT0ZGIHNlY3Rpb24gd2hpY2ggY29udGFpbnMgdGhpcyBjc2VjdC4gICovCisrICBhc2VjdGlvbiAqZW5jbG9zaW5nOworKyAgLyogVGhlIGxpbmVub19jb3VudCBmaWVsZCBmb3IgdGhlIGVuY2xvc2luZyBzZWN0aW9uLCBiZWNhdXNlIHdlIGFyZQorKyAgICAgZ29pbmcgdG8gY2xvYmJlciBpdCB0aGVyZS4gICovCisrICB1bnNpZ25lZCBpbnQgbGluZW5vX2NvdW50OworKyAgLyogVGhlIGZpcnN0IGFuZCBvbmUgcGFzdCB0aGUgbGFzdCBzeW1ib2wgaW5kaWNlcyBmb3Igc3ltYm9scyB1c2VkCisrICAgICBieSB0aGlzIGNzZWN0LiAgKi8KKysgIHVuc2lnbmVkIGxvbmcgZmlyc3Rfc3ltbmR4OworKyAgdW5zaWduZWQgbG9uZyBsYXN0X3N5bW5keDsKKyt9OworKworKy8qIEFuIGFjY2Vzc29yIG1hY3JvIHRoZSB4Y29mZl9zZWN0aW9uX3RkYXRhIHN0cnVjdHVyZS4gICovCisrI2RlZmluZSB4Y29mZl9zZWN0aW9uX2RhdGEoYWJmZCwgc2VjKSBcCisrICAoKHN0cnVjdCB4Y29mZl9zZWN0aW9uX3RkYXRhICopIGNvZmZfc2VjdGlvbl9kYXRhICgoYWJmZCksIChzZWMpKS0+dGRhdGEpCisrCisrLyogVGRhdGEgZm9yIHNlY3Rpb25zIGluIFBFIGZpbGVzLiAgKi8KKysKKytzdHJ1Y3QgcGVpX3NlY3Rpb25fdGRhdGEKKyt7CisrICAvKiBUaGUgdmlydHVhbCBzaXplIG9mIHRoZSBzZWN0aW9uLiAgKi8KKysgIGJmZF9zaXplX3R5cGUgdmlydF9zaXplOworKyAgLyogVGhlIFBFIHNlY3Rpb24gZmxhZ3MuICAqLworKyAgbG9uZyBwZV9mbGFnczsKKyt9OworKworKy8qIEFuIGFjY2Vzc29yIG1hY3JvIGZvciB0aGUgcGVpX3NlY3Rpb25fdGRhdGEgc3RydWN0dXJlLiAgKi8KKysjZGVmaW5lIHBlaV9zZWN0aW9uX2RhdGEoYWJmZCwgc2VjKSBcCisrICAoKHN0cnVjdCBwZWlfc2VjdGlvbl90ZGF0YSAqKSBjb2ZmX3NlY3Rpb25fZGF0YSAoKGFiZmQpLCAoc2VjKSktPnRkYXRhKQorKworKy8qIENPRkYgbGlua2VyIGhhc2ggdGFibGUgZW50cmllcy4gICovCisrCisrc3RydWN0IGNvZmZfbGlua19oYXNoX2VudHJ5CisreworKyAgc3RydWN0IGJmZF9saW5rX2hhc2hfZW50cnkgcm9vdDsKKysKKysgIC8qIFN5bWJvbCBpbmRleCBpbiBvdXRwdXQgZmlsZS4gIFNldCB0byAtMSBpbml0aWFsbHkuICBTZXQgdG8gLTIgaWYKKysgICAgIHRoZXJlIGlzIGEgcmVsb2MgYWdhaW5zdCB0aGlzIHN5bWJvbC4gICovCisrICBsb25nIGluZHg7CisrCisrICAvKiBTeW1ib2wgdHlwZS4gICovCisrICB1bnNpZ25lZCBzaG9ydCB0eXBlOworKworKyAgLyogU3ltYm9sIGNsYXNzLiAgKi8KKysgIHVuc2lnbmVkIGNoYXIgY2xhc3M7CisrCisrICAvKiBOdW1iZXIgb2YgYXV4aWxpYXJ5IGVudHJpZXMuICAqLworKyAgY2hhciBudW1hdXg7CisrCisrICAvKiBCRkQgdG8gdGFrZSBhdXhpbGlhcnkgZW50cmllcyBmcm9tLiAgKi8KKysgIGJmZCAqYXV4YmZkOworKworKyAgLyogUG9pbnRlciB0byBhcnJheSBvZiBhdXhpbGlhcnkgZW50cmllcywgaWYgYW55LiAgKi8KKysgIHVuaW9uIGludGVybmFsX2F1eGVudCAqYXV4OworKworKyAgLyogRmxhZyB3b3JkOyBsZWdhbCB2YWx1ZXMgZm9sbG93LiAgKi8KKysgIHVuc2lnbmVkIHNob3J0IGNvZmZfbGlua19oYXNoX2ZsYWdzOworKyAgLyogU3ltYm9sIGlzIGEgUEUgc2VjdGlvbiBzeW1ib2wuICAqLworKyNkZWZpbmUgQ09GRl9MSU5LX0hBU0hfUEVfU0VDVElPTl9TWU1CT0wgKDAxKQorK307CisrCisrLyogQ09GRiBsaW5rZXIgaGFzaCB0YWJsZS4gICovCisrCisrc3RydWN0IGNvZmZfbGlua19oYXNoX3RhYmxlCisreworKyAgc3RydWN0IGJmZF9saW5rX2hhc2hfdGFibGUgcm9vdDsKKysgIC8qIEEgcG9pbnRlciB0byBpbmZvcm1hdGlvbiB1c2VkIHRvIGxpbmsgc3RhYnMgaW4gc2VjdGlvbnMuICAqLworKyAgc3RydWN0IHN0YWJfaW5mbyBzdGFiX2luZm87CisrfTsKKysKKysvKiBMb29rIHVwIGFuIGVudHJ5IGluIGEgQ09GRiBsaW5rZXIgaGFzaCB0YWJsZS4gICovCisrCisrI2RlZmluZSBjb2ZmX2xpbmtfaGFzaF9sb29rdXAodGFibGUsIHN0cmluZywgY3JlYXRlLCBjb3B5LCBmb2xsb3cpCVwKKysgICgoc3RydWN0IGNvZmZfbGlua19oYXNoX2VudHJ5ICopCQkJCQlcCisrICAgYmZkX2xpbmtfaGFzaF9sb29rdXAgKCYodGFibGUpLT5yb290LCAoc3RyaW5nKSwgKGNyZWF0ZSksCQlcCisrCQkJIChjb3B5KSwgKGZvbGxvdykpKQorKworKy8qIFRyYXZlcnNlIGEgQ09GRiBsaW5rZXIgaGFzaCB0YWJsZS4gICovCisrCisrI2RlZmluZSBjb2ZmX2xpbmtfaGFzaF90cmF2ZXJzZSh0YWJsZSwgZnVuYywgaW5mbykJCQlcCisrICAoYmZkX2xpbmtfaGFzaF90cmF2ZXJzZQkJCQkJCVwKKysgICAoJih0YWJsZSktPnJvb3QsCQkJCQkJCVwKKysgICAgKGJmZF9ib29sZWFuICgqKSAoc3RydWN0IGJmZF9saW5rX2hhc2hfZW50cnkgKiwgdm9pZCAqKSkgKGZ1bmMpLCBcCisrICAgIChpbmZvKSkpCisrCisrLyogR2V0IHRoZSBDT0ZGIGxpbmtlciBoYXNoIHRhYmxlIGZyb20gYSBsaW5rX2luZm8gc3RydWN0dXJlLiAgKi8KKysKKysjZGVmaW5lIGNvZmZfaGFzaF90YWJsZShwKSAoKHN0cnVjdCBjb2ZmX2xpbmtfaGFzaF90YWJsZSAqKSAoKHApLT5oYXNoKSkKKysKKysvKiBGdW5jdGlvbnMgaW4gY29mZmdlbi5jLiAgKi8KKytleHRlcm4gY29uc3QgYmZkX3RhcmdldCAqY29mZl9vYmplY3RfcAorKyAgKGJmZCAqKTsKKytleHRlcm4gc3RydWN0IGJmZF9zZWN0aW9uICpjb2ZmX3NlY3Rpb25fZnJvbV9iZmRfaW5kZXgKKysgIChiZmQgKiwgaW50KTsKKytleHRlcm4gbG9uZyBjb2ZmX2dldF9zeW10YWJfdXBwZXJfYm91bmQKKysgIChiZmQgKik7CisrZXh0ZXJuIGxvbmcgY29mZl9jYW5vbmljYWxpemVfc3ltdGFiCisrICAoYmZkICosIGFzeW1ib2wgKiopOworK2V4dGVybiBpbnQgY29mZl9jb3VudF9saW5lbnVtYmVycworKyAgKGJmZCAqKTsKKytleHRlcm4gc3RydWN0IGNvZmZfc3ltYm9sX3N0cnVjdCAqY29mZl9zeW1ib2xfZnJvbQorKyAgKGJmZCAqLCBhc3ltYm9sICopOworK2V4dGVybiBiZmRfYm9vbGVhbiBjb2ZmX3JlbnVtYmVyX3N5bWJvbHMKKysgIChiZmQgKiwgaW50ICopOworK2V4dGVybiB2b2lkIGNvZmZfbWFuZ2xlX3N5bWJvbHMKKysgIChiZmQgKik7CisrZXh0ZXJuIGJmZF9ib29sZWFuIGNvZmZfd3JpdGVfc3ltYm9scworKyAgKGJmZCAqKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gY29mZl93cml0ZV9saW5lbnVtYmVycworKyAgKGJmZCAqKTsKKytleHRlcm4gYWxlbnQgKmNvZmZfZ2V0X2xpbmVubworKyAgKGJmZCAqLCBhc3ltYm9sICopOworK2V4dGVybiBhc3ltYm9sICpjb2ZmX3NlY3Rpb25fc3ltYm9sCisrICAoYmZkICosIGNoYXIgKik7CisrZXh0ZXJuIGJmZF9ib29sZWFuIF9iZmRfY29mZl9nZXRfZXh0ZXJuYWxfc3ltYm9scworKyAgKGJmZCAqKTsKKytleHRlcm4gY29uc3QgY2hhciAqX2JmZF9jb2ZmX3JlYWRfc3RyaW5nX3RhYmxlCisrICAoYmZkICopOworK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX2NvZmZfZnJlZV9zeW1ib2xzCisrICAoYmZkICopOworK2V4dGVybiBzdHJ1Y3QgY29mZl9wdHJfc3RydWN0ICpjb2ZmX2dldF9ub3JtYWxpemVkX3N5bXRhYgorKyAgKGJmZCAqKTsKKytleHRlcm4gbG9uZyBjb2ZmX2dldF9yZWxvY191cHBlcl9ib3VuZAorKyAgKGJmZCAqLCBzZWNfcHRyKTsKKytleHRlcm4gYXN5bWJvbCAqY29mZl9tYWtlX2VtcHR5X3N5bWJvbAorKyAgKGJmZCAqKTsKKytleHRlcm4gdm9pZCBjb2ZmX3ByaW50X3N5bWJvbAorKyAgKGJmZCAqLCB2b2lkICogZmlsZXAsIGFzeW1ib2wgKiwgYmZkX3ByaW50X3N5bWJvbF90eXBlKTsKKytleHRlcm4gdm9pZCBjb2ZmX2dldF9zeW1ib2xfaW5mbworKyAgKGJmZCAqLCBhc3ltYm9sICosIHN5bWJvbF9pbmZvICpyZXQpOworK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX2NvZmZfaXNfbG9jYWxfbGFiZWxfbmFtZQorKyAgKGJmZCAqLCBjb25zdCBjaGFyICopOworK2V4dGVybiBhc3ltYm9sICpjb2ZmX2JmZF9tYWtlX2RlYnVnX3N5bWJvbAorKyAgKGJmZCAqLCB2b2lkICosIHVuc2lnbmVkIGxvbmcpOworK2V4dGVybiBiZmRfYm9vbGVhbiBjb2ZmX2ZpbmRfbmVhcmVzdF9saW5lCisrICAoYmZkICosIGFzZWN0aW9uICosIGFzeW1ib2wgKiosIGJmZF92bWEsIGNvbnN0IGNoYXIgKiosCisrICAgY29uc3QgY2hhciAqKiwgdW5zaWduZWQgaW50ICopOworK2V4dGVybiBiZmRfYm9vbGVhbiBjb2ZmX2ZpbmRfaW5saW5lcl9pbmZvCisrICAoYmZkICosIGNvbnN0IGNoYXIgKiosIGNvbnN0IGNoYXIgKiosIHVuc2lnbmVkIGludCAqKTsKKytleHRlcm4gaW50IGNvZmZfc2l6ZW9mX2hlYWRlcnMKKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF9jb2ZmX3JlbG9jMTZfcmVsYXhfc2VjdGlvbgorKyAgKGJmZCAqLCBhc2VjdGlvbiAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBiZmRfYm9vbGVhbiAqKTsKKytleHRlcm4gYmZkX2J5dGUgKmJmZF9jb2ZmX3JlbG9jMTZfZ2V0X3JlbG9jYXRlZF9zZWN0aW9uX2NvbnRlbnRzCisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIHN0cnVjdCBiZmRfbGlua19vcmRlciAqLAorKyAgIGJmZF9ieXRlICosIGJmZF9ib29sZWFuLCBhc3ltYm9sICoqKTsKKytleHRlcm4gYmZkX3ZtYSBiZmRfY29mZl9yZWxvYzE2X2dldF92YWx1ZQorKyAgKGFyZWxlbnQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKiwgYXNlY3Rpb24gKik7CisrZXh0ZXJuIHZvaWQgYmZkX3BlcmZvcm1fc2xpcAorKyAgKGJmZCAqLCB1bnNpZ25lZCBpbnQsIGFzZWN0aW9uICosIGJmZF92bWEpOworKworKy8qIEZ1bmN0aW9ucyBhbmQgdHlwZXMgaW4gY29mZmxpbmsuYy4gICovCisrCisrI2RlZmluZSBTVFJJTkdfU0laRV9TSVpFIDQKKysKKysvKiBXZSB1c2UgYSBoYXNoIHRhYmxlIHRvIG1lcmdlIGlkZW50aWNhbCBlbnVtLCBzdHJ1Y3QsIGFuZCB1bmlvbgorKyAgIGRlZmluaXRpb25zIGluIHRoZSBsaW5rZXIuICAqLworKworKy8qIEluZm9ybWF0aW9uIHdlIGtlZXAgZm9yIGEgc2luZ2xlIGVsZW1lbnQgKGFuIGVudW0gdmFsdWUsIGEKKysgICBzdHJ1Y3R1cmUgb3IgdW5pb24gZmllbGQpIGluIHRoZSBkZWJ1ZyBtZXJnZSBoYXNoIHRhYmxlLiAgKi8KKysKKytzdHJ1Y3QgY29mZl9kZWJ1Z19tZXJnZV9lbGVtZW50CisreworKyAgLyogTmV4dCBlbGVtZW50LiAgKi8KKysgIHN0cnVjdCBjb2ZmX2RlYnVnX21lcmdlX2VsZW1lbnQgKm5leHQ7CisrCisrICAvKiBOYW1lLiAgKi8KKysgIGNvbnN0IGNoYXIgKm5hbWU7CisrCisrICAvKiBUeXBlLiAgKi8KKysgIHVuc2lnbmVkIGludCB0eXBlOworKworKyAgLyogU3ltYm9sIGluZGV4IGZvciBjb21wbGV4IHR5cGUuICAqLworKyAgbG9uZyB0YWduZHg7CisrfTsKKysKKysvKiBBIGxpbmtlZCBsaXN0IG9mIGRlYnVnIG1lcmdlIGVudHJpZXMgZm9yIGEgZ2l2ZW4gbmFtZS4gICovCisrCisrc3RydWN0IGNvZmZfZGVidWdfbWVyZ2VfdHlwZQorK3sKKysgIC8qIE5leHQgdHlwZSB3aXRoIHRoZSBzYW1lIG5hbWUuICAqLworKyAgc3RydWN0IGNvZmZfZGVidWdfbWVyZ2VfdHlwZSAqbmV4dDsKKysKKysgIC8qIENsYXNzIG9mIHR5cGUuICAqLworKyAgaW50IGNsYXNzOworKworKyAgLyogU3ltYm9sIGluZGV4IHdoZXJlIHRoaXMgdHlwZSBpcyBkZWZpbmVkLiAgKi8KKysgIGxvbmcgaW5keDsKKysKKysgIC8qIExpc3Qgb2YgZWxlbWVudHMuICAqLworKyAgc3RydWN0IGNvZmZfZGVidWdfbWVyZ2VfZWxlbWVudCAqZWxlbWVudHM7CisrfTsKKysKKysvKiBJbmZvcm1hdGlvbiB3ZSBzdG9yZSBpbiB0aGUgZGVidWcgbWVyZ2UgaGFzaCB0YWJsZS4gICovCisrCisrc3RydWN0IGNvZmZfZGVidWdfbWVyZ2VfaGFzaF9lbnRyeQorK3sKKysgIHN0cnVjdCBiZmRfaGFzaF9lbnRyeSByb290OworKworKyAgLyogQSBsaXN0IG9mIHR5cGVzIHdpdGggdGhpcyBuYW1lLiAgKi8KKysgIHN0cnVjdCBjb2ZmX2RlYnVnX21lcmdlX3R5cGUgKnR5cGVzOworK307CisrCisrLyogVGhlIGRlYnVnIG1lcmdlIGhhc2ggdGFibGUuICAqLworKworK3N0cnVjdCBjb2ZmX2RlYnVnX21lcmdlX2hhc2hfdGFibGUKKyt7CisrICBzdHJ1Y3QgYmZkX2hhc2hfdGFibGUgcm9vdDsKKyt9OworKworKy8qIEluaXRpYWxpemUgYSBDT0ZGIGRlYnVnIG1lcmdlIGhhc2ggdGFibGUuICAqLworKworKyNkZWZpbmUgY29mZl9kZWJ1Z19tZXJnZV9oYXNoX3RhYmxlX2luaXQodGFibGUpIFwKKysgIChiZmRfaGFzaF90YWJsZV9pbml0ICgmKHRhYmxlKS0+cm9vdCwgX2JmZF9jb2ZmX2RlYnVnX21lcmdlX2hhc2hfbmV3ZnVuYywgXAorKwkJCXNpemVvZiAoc3RydWN0IGNvZmZfZGVidWdfbWVyZ2VfaGFzaF9lbnRyeSkpKQorKworKy8qIEZyZWUgYSBDT0ZGIGRlYnVnIG1lcmdlIGhhc2ggdGFibGUuICAqLworKworKyNkZWZpbmUgY29mZl9kZWJ1Z19tZXJnZV9oYXNoX3RhYmxlX2ZyZWUodGFibGUpIFwKKysgIChiZmRfaGFzaF90YWJsZV9mcmVlICgmKHRhYmxlKS0+cm9vdCkpCisrCisrLyogTG9vayB1cCBhbiBlbnRyeSBpbiBhIENPRkYgZGVidWcgbWVyZ2UgaGFzaCB0YWJsZS4gICovCisrCisrI2RlZmluZSBjb2ZmX2RlYnVnX21lcmdlX2hhc2hfbG9va3VwKHRhYmxlLCBzdHJpbmcsIGNyZWF0ZSwgY29weSkgXAorKyAgKChzdHJ1Y3QgY29mZl9kZWJ1Z19tZXJnZV9oYXNoX2VudHJ5ICopIFwKKysgICBiZmRfaGFzaF9sb29rdXAgKCYodGFibGUpLT5yb290LCAoc3RyaW5nKSwgKGNyZWF0ZSksIChjb3B5KSkpCisrCisrLyogSW5mb3JtYXRpb24gd2Uga2VlcCBmb3IgZWFjaCBzZWN0aW9uIGluIHRoZSBvdXRwdXQgZmlsZSB3aGVuIGRvaW5nCisrICAgYSByZWxvY2F0YWJsZSBsaW5rLiAgKi8KKysKKytzdHJ1Y3QgY29mZl9saW5rX3NlY3Rpb25faW5mbworK3sKKysgIC8qIFRoZSByZWxvY3MgdG8gYmUgb3V0cHV0LiAgKi8KKysgIHN0cnVjdCBpbnRlcm5hbF9yZWxvYyAqcmVsb2NzOworKyAgLyogRm9yIGVhY2ggcmVsb2MgYWdhaW5zdCBhIGdsb2JhbCBzeW1ib2wgd2hvc2UgaW5kZXggd2FzIG5vdCBrbm93bgorKyAgICAgd2hlbiB0aGUgcmVsb2Mgd2FzIGhhbmRsZWQsIHRoZSBnbG9iYWwgaGFzaCB0YWJsZSBlbnRyeS4gICovCisrICBzdHJ1Y3QgY29mZl9saW5rX2hhc2hfZW50cnkgKipyZWxfaGFzaGVzOworK307CisrCisrLyogSW5mb3JtYXRpb24gdGhhdCB3ZSBwYXNzIGFyb3VuZCB3aGlsZSBkb2luZyB0aGUgZmluYWwgbGluayBzdGVwLiAgKi8KKysKKytzdHJ1Y3QgY29mZl9maW5hbF9saW5rX2luZm8KKyt7CisrICAvKiBHZW5lcmFsIGxpbmsgaW5mb3JtYXRpb24uICAqLworKyAgc3RydWN0IGJmZF9saW5rX2luZm8gKmluZm87CisrICAvKiBPdXRwdXQgQkZELiAgKi8KKysgIGJmZCAqb3V0cHV0X2JmZDsKKysgIC8qIFVzZWQgdG8gaW5kaWNhdGUgZmFpbHVyZSBpbiB0cmF2ZXJzYWwgcm91dGluZS4gICovCisrICBiZmRfYm9vbGVhbiBmYWlsZWQ7CisrICAvKiBJZiBkb2luZyAidGFzayBsaW5raW5nIiBzZXQgb25seSBkdXJpbmcgdGhlIHRpbWUgd2hlbiB3ZSB3YW50IHRoZQorKyAgICAgZ2xvYmFsIHN5bWJvbCB3cml0ZXIgdG8gY29udmVydCB0aGUgc3RvcmFnZSBjbGFzcyBvZiBkZWZpbmVkIGdsb2JhbAorKyAgICAgc3ltYm9scyBmcm9tIGdsb2JhbCB0byBzdGF0aWMuICovCisrICBiZmRfYm9vbGVhbiBnbG9iYWxfdG9fc3RhdGljOworKyAgLyogSGFzaCB0YWJsZSBmb3IgbG9uZyBzeW1ib2wgbmFtZXMuICAqLworKyAgc3RydWN0IGJmZF9zdHJ0YWJfaGFzaCAqc3RydGFiOworKyAgLyogV2hlbiBkb2luZyBhIHJlbG9jYXRhYmxlIGxpbmssIGFuIGFycmF5IG9mIGluZm9ybWF0aW9uIGtlcHQgZm9yCisrICAgICBlYWNoIG91dHB1dCBzZWN0aW9uLCBpbmRleGVkIGJ5IHRoZSB0YXJnZXRfaW5kZXggZmllbGQuICAqLworKyAgc3RydWN0IGNvZmZfbGlua19zZWN0aW9uX2luZm8gKnNlY3Rpb25faW5mbzsKKysgIC8qIFN5bWJvbCBpbmRleCBvZiBsYXN0IENfRklMRSBzeW1ib2wgKC0xIGlmIG5vbmUpLiAgKi8KKysgIGxvbmcgbGFzdF9maWxlX2luZGV4OworKyAgLyogQ29udGVudHMgb2YgbGFzdCBDX0ZJTEUgc3ltYm9sLiAgKi8KKysgIHN0cnVjdCBpbnRlcm5hbF9zeW1lbnQgbGFzdF9maWxlOworKyAgLyogU3ltYm9sIGluZGV4IG9mIGZpcnN0IGF1eCBlbnRyeSBvZiBsYXN0IC5iZiBzeW1ib2wgd2l0aCBhbiBlbXB0eQorKyAgICAgZW5kbmR4IGZpZWxkICgtMSBpZiBub25lKS4gICovCisrICBsb25nIGxhc3RfYmZfaW5kZXg7CisrICAvKiBDb250ZW50cyBvZiBsYXN0X2JmX2luZGV4IGF1eCBlbnRyeS4gICovCisrICB1bmlvbiBpbnRlcm5hbF9hdXhlbnQgbGFzdF9iZjsKKysgIC8qIEhhc2ggdGFibGUgdXNlZCB0byBtZXJnZSBkZWJ1ZyBpbmZvcm1hdGlvbi4gICovCisrICBzdHJ1Y3QgY29mZl9kZWJ1Z19tZXJnZV9oYXNoX3RhYmxlIGRlYnVnX21lcmdlOworKyAgLyogQnVmZmVyIGxhcmdlIGVub3VnaCB0byBob2xkIHN3YXBwZWQgc3ltYm9scyBvZiBhbnkgaW5wdXQgZmlsZS4gICovCisrICBzdHJ1Y3QgaW50ZXJuYWxfc3ltZW50ICppbnRlcm5hbF9zeW1zOworKyAgLyogQnVmZmVyIGxhcmdlIGVub3VnaCB0byBob2xkIHNlY3Rpb25zIG9mIHN5bWJvbHMgb2YgYW55IGlucHV0IGZpbGUuICAqLworKyAgYXNlY3Rpb24gKipzZWNfcHRyczsKKysgIC8qIEJ1ZmZlciBsYXJnZSBlbm91Z2ggdG8gaG9sZCBvdXRwdXQgaW5kaWNlcyBvZiBzeW1ib2xzIG9mIGFueQorKyAgICAgaW5wdXQgZmlsZS4gICovCisrICBsb25nICpzeW1faW5kaWNlczsKKysgIC8qIEJ1ZmZlciBsYXJnZSBlbm91Z2ggdG8gaG9sZCBvdXRwdXQgc3ltYm9scyBmb3IgYW55IGlucHV0IGZpbGUuICAqLworKyAgYmZkX2J5dGUgKm91dHN5bXM7CisrICAvKiBCdWZmZXIgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgZXh0ZXJuYWwgbGluZSBudW1iZXJzIGZvciBhbnkgaW5wdXQKKysgICAgIHNlY3Rpb24uICAqLworKyAgYmZkX2J5dGUgKmxpbmVub3M7CisrICAvKiBCdWZmZXIgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYW55IGlucHV0IHNlY3Rpb24uICAqLworKyAgYmZkX2J5dGUgKmNvbnRlbnRzOworKyAgLyogQnVmZmVyIGxhcmdlIGVub3VnaCB0byBob2xkIGV4dGVybmFsIHJlbG9jcyBvZiBhbnkgaW5wdXQgc2VjdGlvbi4gICovCisrICBiZmRfYnl0ZSAqZXh0ZXJuYWxfcmVsb2NzOworKyAgLyogQnVmZmVyIGxhcmdlIGVub3VnaCB0byBob2xkIHN3YXBwZWQgcmVsb2NzIG9mIGFueSBpbnB1dCBzZWN0aW9uLiAgKi8KKysgIHN0cnVjdCBpbnRlcm5hbF9yZWxvYyAqaW50ZXJuYWxfcmVsb2NzOworK307CisrCisrLyogTW9zdCBDT0ZGIHZhcmlhbnRzIGhhdmUgbm8gd2F5IHRvIHJlY29yZCB0aGUgYWxpZ25tZW50IG9mIGEKKysgICBzZWN0aW9uLiAgVGhpcyBzdHJ1Y3QgaXMgdXNlZCB0byBzZXQgYSBzcGVjaWZpYyBhbGlnbm1lbnQgYmFzZWQgb24KKysgICB0aGUgbmFtZSBvZiB0aGUgc2VjdGlvbi4gICovCisrCisrc3RydWN0IGNvZmZfc2VjdGlvbl9hbGlnbm1lbnRfZW50cnkKKyt7CisrICAvKiBUaGUgc2VjdGlvbiBuYW1lLiAgKi8KKysgIGNvbnN0IGNoYXIgKm5hbWU7CisrCisrICAvKiBUaGlzIGlzIGVpdGhlciAodW5zaWduZWQgaW50KSAtMSwgaW5kaWNhdGluZyB0aGF0IHRoZSBzZWN0aW9uCisrICAgICBuYW1lIG11c3QgbWF0Y2ggZXhhY3RseSwgb3IgaXQgaXMgdGhlIG51bWJlciBvZiBsZXR0ZXJzIHdoaWNoCisrICAgICBtdXN0IG1hdGNoIGF0IHRoZSBzdGFydCBvZiB0aGUgbmFtZS4gICovCisrICB1bnNpZ25lZCBpbnQgY29tcGFyaXNvbl9sZW5ndGg7CisrCisrICAvKiBUaGVzZSBtYWNyb3MgbWF5IGJlIHVzZWQgdG8gZmlsbCBpbiB0aGUgZmlyc3QgdHdvIGZpZWxkcyBpbiBhCisrICAgICBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24uICAqLworKyNkZWZpbmUgQ09GRl9TRUNUSU9OX05BTUVfRVhBQ1RfTUFUQ0gobmFtZSkgKG5hbWUpLCAoKHVuc2lnbmVkIGludCkgLTEpCisrI2RlZmluZSBDT0ZGX1NFQ1RJT05fTkFNRV9QQVJUSUFMX01BVENIKG5hbWUpIChuYW1lKSwgKHNpemVvZiAobmFtZSkgLSAxKQorKworKyAgLyogT25seSB1c2UgdGhpcyBlbnRyeSBpZiB0aGUgZGVmYXVsdCBzZWN0aW9uIGFsaWdubWVudCBmb3IgdGhpcworKyAgICAgdGFyZ2V0IGlzIGF0IGxlYXN0IHRoYXQgbXVjaCAoYXMgYSBwb3dlciBvZiB0d28pLiAgSWYgdGhpcyBmaWVsZAorKyAgICAgaXMgQ09GRl9BTElHTk1FTlRfRklFTERfRU1QVFksIGl0IHNob3VsZCBiZSBpZ25vcmVkLiAgKi8KKysgIHVuc2lnbmVkIGludCBkZWZhdWx0X2FsaWdubWVudF9taW47CisrCisrICAvKiBPbmx5IHVzZSB0aGlzIGVudHJ5IGlmIHRoZSBkZWZhdWx0IHNlY3Rpb24gYWxpZ25tZW50IGZvciB0aGlzCisrICAgICB0YXJnZXQgaXMgbm8gZ3JlYXRlciB0aGFuIHRoaXMgKGFzIGEgcG93ZXIgb2YgdHdvKS4gIElmIHRoaXMKKysgICAgIGZpZWxkIGlzIENPRkZfQUxJR05NRU5UX0ZJRUxEX0VNUFRZLCBpdCBzaG91bGQgYmUgaWdub3JlZC4gICovCisrICB1bnNpZ25lZCBpbnQgZGVmYXVsdF9hbGlnbm1lbnRfbWF4OworKworKyNkZWZpbmUgQ09GRl9BTElHTk1FTlRfRklFTERfRU1QVFkgKCh1bnNpZ25lZCBpbnQpIC0xKQorKworKyAgLyogVGhlIGRlc2lyZWQgYWxpZ25tZW50IGZvciB0aGlzIHNlY3Rpb24gKGFzIGEgcG93ZXIgb2YgdHdvKS4gICovCisrICB1bnNpZ25lZCBpbnQgYWxpZ25tZW50X3Bvd2VyOworK307CisrCisrZXh0ZXJuIHN0cnVjdCBiZmRfaGFzaF9lbnRyeSAqX2JmZF9jb2ZmX2xpbmtfaGFzaF9uZXdmdW5jCisrICAoc3RydWN0IGJmZF9oYXNoX2VudHJ5ICosIHN0cnVjdCBiZmRfaGFzaF90YWJsZSAqLCBjb25zdCBjaGFyICopOworK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX2NvZmZfbGlua19oYXNoX3RhYmxlX2luaXQKKysgIChzdHJ1Y3QgY29mZl9saW5rX2hhc2hfdGFibGUgKiwgYmZkICosCisrICAgc3RydWN0IGJmZF9oYXNoX2VudHJ5ICooKikgKHN0cnVjdCBiZmRfaGFzaF9lbnRyeSAqLAorKwkJCSAgICAgICBzdHJ1Y3QgYmZkX2hhc2hfdGFibGUgKiwKKysJCQkgICAgICAgY29uc3QgY2hhciAqKSwKKysgICB1bnNpZ25lZCBpbnQpOworK2V4dGVybiBzdHJ1Y3QgYmZkX2xpbmtfaGFzaF90YWJsZSAqX2JmZF9jb2ZmX2xpbmtfaGFzaF90YWJsZV9jcmVhdGUKKysgIChiZmQgKik7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKl9iZmRfY29mZl9pbnRlcm5hbF9zeW1lbnRfbmFtZQorKyAgKGJmZCAqLCBjb25zdCBzdHJ1Y3QgaW50ZXJuYWxfc3ltZW50ICosIGNoYXIgKik7CisrZXh0ZXJuIGJmZF9ib29sZWFuIF9iZmRfY29mZl9saW5rX2FkZF9zeW1ib2xzCisrICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOworK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX2NvZmZfZmluYWxfbGluaworKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKytleHRlcm4gc3RydWN0IGludGVybmFsX3JlbG9jICpfYmZkX2NvZmZfcmVhZF9pbnRlcm5hbF9yZWxvY3MKKysgIChiZmQgKiwgYXNlY3Rpb24gKiwgYmZkX2Jvb2xlYW4sIGJmZF9ieXRlICosIGJmZF9ib29sZWFuLAorKyAgIHN0cnVjdCBpbnRlcm5hbF9yZWxvYyAqKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gX2JmZF9jb2ZmX2dlbmVyaWNfcmVsb2NhdGVfc2VjdGlvbgorKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBiZmQgKiwgYXNlY3Rpb24gKiwgYmZkX2J5dGUgKiwKKysgICBzdHJ1Y3QgaW50ZXJuYWxfcmVsb2MgKiwgc3RydWN0IGludGVybmFsX3N5bWVudCAqLCBhc2VjdGlvbiAqKik7CisrZXh0ZXJuIHN0cnVjdCBiZmRfaGFzaF9lbnRyeSAqX2JmZF9jb2ZmX2RlYnVnX21lcmdlX2hhc2hfbmV3ZnVuYworKyAgKHN0cnVjdCBiZmRfaGFzaF9lbnRyeSAqLCBzdHJ1Y3QgYmZkX2hhc2hfdGFibGUgKiwgY29uc3QgY2hhciAqKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gX2JmZF9jb2ZmX3dyaXRlX2dsb2JhbF9zeW0KKysgIChzdHJ1Y3QgY29mZl9saW5rX2hhc2hfZW50cnkgKiwgdm9pZCAqKTsKKytleHRlcm4gYmZkX2Jvb2xlYW4gX2JmZF9jb2ZmX3dyaXRlX3Rhc2tfZ2xvYmFscworKyAgKHN0cnVjdCBjb2ZmX2xpbmtfaGFzaF9lbnRyeSAqLCB2b2lkICopOworK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX2NvZmZfbGlua19pbnB1dF9iZmQKKysgIChzdHJ1Y3QgY29mZl9maW5hbF9saW5rX2luZm8gKiwgYmZkICopOworK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZkX2NvZmZfcmVsb2NfbGlua19vcmRlcgorKyAgKGJmZCAqLCBzdHJ1Y3QgY29mZl9maW5hbF9saW5rX2luZm8gKiwgYXNlY3Rpb24gKiwKKysgICBzdHJ1Y3QgYmZkX2xpbmtfb3JkZXIgKik7CisrCisrCisrI2RlZmluZSBjb2ZmX2dldF9zZWN0aW9uX2NvbnRlbnRzX2luX3dpbmRvdyBcCisrICBfYmZkX2dlbmVyaWNfZ2V0X3NlY3Rpb25fY29udGVudHNfaW5fd2luZG93CisrCisrLyogRnVuY3Rpb25zIGluIHhjb2ZmbGluay5jLiAgKi8KKysKKytleHRlcm4gbG9uZyBfYmZkX3hjb2ZmX2dldF9keW5hbWljX3N5bXRhYl91cHBlcl9ib3VuZAorKyAgKGJmZCAqKTsKKytleHRlcm4gbG9uZyBfYmZkX3hjb2ZmX2Nhbm9uaWNhbGl6ZV9keW5hbWljX3N5bXRhYgorKyAgKGJmZCAqLCBhc3ltYm9sICoqKTsKKytleHRlcm4gbG9uZyBfYmZkX3hjb2ZmX2dldF9keW5hbWljX3JlbG9jX3VwcGVyX2JvdW5kCisrICAoYmZkICopOworK2V4dGVybiBsb25nIF9iZmRfeGNvZmZfY2Fub25pY2FsaXplX2R5bmFtaWNfcmVsb2MKKysgIChiZmQgKiwgYXJlbGVudCAqKiwgYXN5bWJvbCAqKik7CisrZXh0ZXJuIHN0cnVjdCBiZmRfbGlua19oYXNoX3RhYmxlICpfYmZkX3hjb2ZmX2JmZF9saW5rX2hhc2hfdGFibGVfY3JlYXRlCisrICAoYmZkICopOworK2V4dGVybiB2b2lkIF9iZmRfeGNvZmZfYmZkX2xpbmtfaGFzaF90YWJsZV9mcmVlCisrICAoc3RydWN0IGJmZF9saW5rX2hhc2hfdGFibGUgKik7CisrZXh0ZXJuIGJmZF9ib29sZWFuIF9iZmRfeGNvZmZfYmZkX2xpbmtfYWRkX3N5bWJvbHMKKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrZXh0ZXJuIGJmZF9ib29sZWFuIF9iZmRfeGNvZmZfYmZkX2ZpbmFsX2xpbmsKKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrZXh0ZXJuIGJmZF9ib29sZWFuIF9iZmRfcHBjX3hjb2ZmX3JlbG9jYXRlX3NlY3Rpb24KKysgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKiwgYmZkICosIGFzZWN0aW9uICosIGJmZF9ieXRlICosCisrICAgc3RydWN0IGludGVybmFsX3JlbG9jICosIHN0cnVjdCBpbnRlcm5hbF9zeW1lbnQgKiwgYXNlY3Rpb24gKiopOworKworKy8qIEZ1bmN0aW9ucyBpbiBjb2ZmLXBwYy5jLiAgRklYTUU6IFRoZXNlIGFyZSBjYWxsZWQgYmUgcGUuZW0gaW4gdGhlCisrICAgbGlua2VyLCBhbmQgc28gc2hvdWxkIHN0YXJ0IHdpdGggYmZkIGFuZCBiZSBkZWNsYXJlZCBpbiBiZmQuaC4gICovCisrCisrZXh0ZXJuIGJmZF9ib29sZWFuIHBwY19hbGxvY2F0ZV90b2Nfc2VjdGlvbgorKyAgKHN0cnVjdCBiZmRfbGlua19pbmZvICopOworK2V4dGVybiBiZmRfYm9vbGVhbiBwcGNfcHJvY2Vzc19iZWZvcmVfYWxsb2NhdGlvbgorKyAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKKysKKysvKiBFeHRyYWN0ZWQgZnJvbSBjb2ZmY29kZS5oLiAgKi8KKyt0eXBlZGVmIHN0cnVjdCBjb2ZmX3B0cl9zdHJ1Y3QKKyt7CisrICAvKiBSZW1lbWJlcnMgdGhlIG9mZnNldCBmcm9tIHRoZSBmaXJzdCBzeW1ib2wgaW4gdGhlIGZpbGUgZm9yCisrICAgICB0aGlzIHN5bWJvbC4gR2VuZXJhdGVkIGJ5IGNvZmZfcmVudW1iZXJfc3ltYm9scy4gKi8KKysgIHVuc2lnbmVkIGludCBvZmZzZXQ7CisrCisrICAvKiBTaG91bGQgdGhlIHZhbHVlIG9mIHRoaXMgc3ltYm9sIGJlIHJlbnVtYmVyZWQuICBVc2VkIGZvcgorKyAgICAgWENPRkYgQ19CU1RBVCBzeW1ib2xzLiAgU2V0IGJ5IGNvZmZfc2x1cnBfc3ltYm9sX3RhYmxlLiAgKi8KKysgIHVuc2lnbmVkIGludCBmaXhfdmFsdWUgOiAxOworKworKyAgLyogU2hvdWxkIHRoZSB0YWcgZmllbGQgb2YgdGhpcyBzeW1ib2wgYmUgcmVudW1iZXJlZC4KKysgICAgIENyZWF0ZWQgYnkgY29mZl9wb2ludGVyaXplX2F1eC4gKi8KKysgIHVuc2lnbmVkIGludCBmaXhfdGFnIDogMTsKKysKKysgIC8qIFNob3VsZCB0aGUgZW5kaWR4IGZpZWxkIG9mIHRoaXMgc3ltYm9sIGJlIHJlbnVtYmVyZWQuCisrICAgICBDcmVhdGVkIGJ5IGNvZmZfcG9pbnRlcml6ZV9hdXguICovCisrICB1bnNpZ25lZCBpbnQgZml4X2VuZCA6IDE7CisrCisrICAvKiBTaG91bGQgdGhlIHhfY3NlY3QueF9zY25sZW4gZmllbGQgYmUgcmVudW1iZXJlZC4KKysgICAgIENyZWF0ZWQgYnkgY29mZl9wb2ludGVyaXplX2F1eC4gKi8KKysgIHVuc2lnbmVkIGludCBmaXhfc2NubGVuIDogMTsKKysKKysgIC8qIEZpeCB1cCBhbiBYQ09GRiBDX0JJTkNML0NfRUlOQ0wgc3ltYm9sLiAgVGhlIHZhbHVlIGlzIHRoZQorKyAgICAgaW5kZXggaW50byB0aGUgbGluZSBudW1iZXIgZW50cmllcy4gIFNldCBieSBjb2ZmX3NsdXJwX3N5bWJvbF90YWJsZS4gICovCisrICB1bnNpZ25lZCBpbnQgZml4X2xpbmUgOiAxOworKworKyAgLyogVGhlIGNvbnRhaW5lciBmb3IgdGhlIHN5bWJvbCBzdHJ1Y3R1cmUgYXMgcmVhZCBhbmQgdHJhbnNsYXRlZAorKyAgICAgZnJvbSB0aGUgZmlsZS4gKi8KKysgIHVuaW9uCisrICB7CisrICAgIHVuaW9uIGludGVybmFsX2F1eGVudCBhdXhlbnQ7CisrICAgIHN0cnVjdCBpbnRlcm5hbF9zeW1lbnQgc3ltZW50OworKyAgfSB1OworK30gY29tYmluZWRfZW50cnlfdHlwZTsKKysKKysKKysvKiBFYWNoIGNhbm9uaWNhbCBhc3ltYm9sIHJlYWxseSBsb29rcyBsaWtlIHRoaXM6ICovCisrCisrdHlwZWRlZiBzdHJ1Y3QgY29mZl9zeW1ib2xfc3RydWN0CisreworKyAgLyogVGhlIGFjdHVhbCBzeW1ib2wgd2hpY2ggdGhlIHJlc3Qgb2YgQkZEIHdvcmtzIHdpdGggKi8KKysgIGFzeW1ib2wgc3ltYm9sOworKworKyAgLyogQSBwb2ludGVyIHRvIHRoZSBoaWRkZW4gaW5mb3JtYXRpb24gZm9yIHRoaXMgc3ltYm9sICovCisrICBjb21iaW5lZF9lbnRyeV90eXBlICpuYXRpdmU7CisrCisrICAvKiBBIHBvaW50ZXIgdG8gdGhlIGxpbmVudW1iZXIgaW5mb3JtYXRpb24gZm9yIHRoaXMgc3ltYm9sICovCisrICBzdHJ1Y3QgbGluZW5vX2NhY2hlX2VudHJ5ICpsaW5lbm87CisrCisrICAvKiBIYXZlIHRoZSBsaW5lIG51bWJlcnMgYmVlbiByZWxvY2F0ZWQgeWV0ID8gKi8KKysgIGJmZF9ib29sZWFuIGRvbmVfbGluZW5vOworK30gY29mZl9zeW1ib2xfdHlwZTsKKysvKiBDT0ZGIHN5bWJvbCBjbGFzc2lmaWNhdGlvbnMuICAqLworKworK2VudW0gY29mZl9zeW1ib2xfY2xhc3NpZmljYXRpb24KKyt7CisrICAvKiBHbG9iYWwgc3ltYm9sLiAgKi8KKysgIENPRkZfU1lNQk9MX0dMT0JBTCwKKysgIC8qIENvbW1vbiBzeW1ib2wuICAqLworKyAgQ09GRl9TWU1CT0xfQ09NTU9OLAorKyAgLyogVW5kZWZpbmVkIHN5bWJvbC4gICovCisrICBDT0ZGX1NZTUJPTF9VTkRFRklORUQsCisrICAvKiBMb2NhbCBzeW1ib2wuICAqLworKyAgQ09GRl9TWU1CT0xfTE9DQUwsCisrICAvKiBQRSBzZWN0aW9uIHN5bWJvbC4gICovCisrICBDT0ZGX1NZTUJPTF9QRV9TRUNUSU9OCisrfTsKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIHZvaWQgKCpfYmZkX2NvZmZfc3dhcF9hdXhfaW4pCisrICAgIChiZmQgKiwgdm9pZCAqLCBpbnQsIGludCwgaW50LCBpbnQsIHZvaWQgKik7CisrCisrICB2b2lkICgqX2JmZF9jb2ZmX3N3YXBfc3ltX2luKQorKyAgICAoYmZkICosIHZvaWQgKiwgdm9pZCAqKTsKKysKKysgIHZvaWQgKCpfYmZkX2NvZmZfc3dhcF9saW5lbm9faW4pCisrICAgIChiZmQgKiwgdm9pZCAqLCB2b2lkICopOworKworKyAgdW5zaWduZWQgaW50ICgqX2JmZF9jb2ZmX3N3YXBfYXV4X291dCkKKysgICAgKGJmZCAqLCB2b2lkICosIGludCwgaW50LCBpbnQsIGludCwgdm9pZCAqKTsKKysKKysgIHVuc2lnbmVkIGludCAoKl9iZmRfY29mZl9zd2FwX3N5bV9vdXQpCisrICAgIChiZmQgKiwgdm9pZCAqLCB2b2lkICopOworKworKyAgdW5zaWduZWQgaW50ICgqX2JmZF9jb2ZmX3N3YXBfbGluZW5vX291dCkKKysgICAgKGJmZCAqLCB2b2lkICosIHZvaWQgKik7CisrCisrICB1bnNpZ25lZCBpbnQgKCpfYmZkX2NvZmZfc3dhcF9yZWxvY19vdXQpCisrICAgIChiZmQgKiwgdm9pZCAqLCB2b2lkICopOworKworKyAgdW5zaWduZWQgaW50ICgqX2JmZF9jb2ZmX3N3YXBfZmlsZWhkcl9vdXQpCisrICAgIChiZmQgKiwgdm9pZCAqLCB2b2lkICopOworKworKyAgdW5zaWduZWQgaW50ICgqX2JmZF9jb2ZmX3N3YXBfYW91dGhkcl9vdXQpCisrICAgIChiZmQgKiwgdm9pZCAqLCB2b2lkICopOworKworKyAgdW5zaWduZWQgaW50ICgqX2JmZF9jb2ZmX3N3YXBfc2NuaGRyX291dCkKKysgICAgKGJmZCAqLCB2b2lkICosIHZvaWQgKik7CisrCisrICB1bnNpZ25lZCBpbnQgX2JmZF9maWxoc3o7CisrICB1bnNpZ25lZCBpbnQgX2JmZF9hb3V0c3o7CisrICB1bnNpZ25lZCBpbnQgX2JmZF9zY25oc3o7CisrICB1bnNpZ25lZCBpbnQgX2JmZF9zeW1lc3o7CisrICB1bnNpZ25lZCBpbnQgX2JmZF9hdXhlc3o7CisrICB1bnNpZ25lZCBpbnQgX2JmZF9yZWxzejsKKysgIHVuc2lnbmVkIGludCBfYmZkX2xpbmVzejsKKysgIHVuc2lnbmVkIGludCBfYmZkX2ZpbG5tbGVuOworKyAgYmZkX2Jvb2xlYW4gX2JmZF9jb2ZmX2xvbmdfZmlsZW5hbWVzOworKyAgYmZkX2Jvb2xlYW4gX2JmZF9jb2ZmX2xvbmdfc2VjdGlvbl9uYW1lczsKKysgIHVuc2lnbmVkIGludCBfYmZkX2NvZmZfZGVmYXVsdF9zZWN0aW9uX2FsaWdubWVudF9wb3dlcjsKKysgIGJmZF9ib29sZWFuIF9iZmRfY29mZl9mb3JjZV9zeW1uYW1lc19pbl9zdHJpbmdzOworKyAgdW5zaWduZWQgaW50IF9iZmRfY29mZl9kZWJ1Z19zdHJpbmdfcHJlZml4X2xlbmd0aDsKKysKKysgIHZvaWQgKCpfYmZkX2NvZmZfc3dhcF9maWxlaGRyX2luKQorKyAgICAoYmZkICosIHZvaWQgKiwgdm9pZCAqKTsKKysKKysgIHZvaWQgKCpfYmZkX2NvZmZfc3dhcF9hb3V0aGRyX2luKQorKyAgICAoYmZkICosIHZvaWQgKiwgdm9pZCAqKTsKKysKKysgIHZvaWQgKCpfYmZkX2NvZmZfc3dhcF9zY25oZHJfaW4pCisrICAgIChiZmQgKiwgdm9pZCAqLCB2b2lkICopOworKworKyAgdm9pZCAoKl9iZmRfY29mZl9zd2FwX3JlbG9jX2luKQorKyAgICAoYmZkICphYmZkLCB2b2lkICosIHZvaWQgKik7CisrCisrICBiZmRfYm9vbGVhbiAoKl9iZmRfY29mZl9iYWRfZm9ybWF0X2hvb2spCisrICAgIChiZmQgKiwgdm9pZCAqKTsKKysKKysgIGJmZF9ib29sZWFuICgqX2JmZF9jb2ZmX3NldF9hcmNoX21hY2hfaG9vaykKKysgICAgKGJmZCAqLCB2b2lkICopOworKworKyAgdm9pZCAqICgqX2JmZF9jb2ZmX21rb2JqZWN0X2hvb2spCisrICAgIChiZmQgKiwgdm9pZCAqLCB2b2lkICopOworKworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX3N0eXBfdG9fc2VjX2ZsYWdzX2hvb2spCisrICAgIChiZmQgKiwgdm9pZCAqLCBjb25zdCBjaGFyICosIGFzZWN0aW9uICosIGZsYWd3b3JkICopOworKworKyAgdm9pZCAoKl9iZmRfc2V0X2FsaWdubWVudF9ob29rKQorKyAgICAoYmZkICosIGFzZWN0aW9uICosIHZvaWQgKik7CisrCisrICBiZmRfYm9vbGVhbiAoKl9iZmRfY29mZl9zbHVycF9zeW1ib2xfdGFibGUpCisrICAgIChiZmQgKik7CisrCisrICBiZmRfYm9vbGVhbiAoKl9iZmRfY29mZl9zeW1uYW1lX2luX2RlYnVnKQorKyAgICAoYmZkICosIHN0cnVjdCBpbnRlcm5hbF9zeW1lbnQgKik7CisrCisrICBiZmRfYm9vbGVhbiAoKl9iZmRfY29mZl9wb2ludGVyaXplX2F1eF9ob29rKQorKyAgICAoYmZkICosIGNvbWJpbmVkX2VudHJ5X3R5cGUgKiwgY29tYmluZWRfZW50cnlfdHlwZSAqLAorKyAgICAgICAgICAgIHVuc2lnbmVkIGludCwgY29tYmluZWRfZW50cnlfdHlwZSAqKTsKKysKKysgIGJmZF9ib29sZWFuICgqX2JmZF9jb2ZmX3ByaW50X2F1eCkKKysgICAgKGJmZCAqLCBGSUxFICosIGNvbWJpbmVkX2VudHJ5X3R5cGUgKiwgY29tYmluZWRfZW50cnlfdHlwZSAqLAorKyAgICAgICAgICAgIGNvbWJpbmVkX2VudHJ5X3R5cGUgKiwgdW5zaWduZWQgaW50KTsKKysKKysgIHZvaWQgKCpfYmZkX2NvZmZfcmVsb2MxNl9leHRyYV9jYXNlcykKKysgICAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBzdHJ1Y3QgYmZkX2xpbmtfb3JkZXIgKiwgYXJlbGVudCAqLAorKyAgICAgICAgICAgYmZkX2J5dGUgKiwgdW5zaWduZWQgaW50ICosIHVuc2lnbmVkIGludCAqKTsKKysKKysgIGludCAoKl9iZmRfY29mZl9yZWxvYzE2X2VzdGltYXRlKQorKyAgICAoYmZkICosIGFzZWN0aW9uICosIGFyZWxlbnQgKiwgdW5zaWduZWQgaW50LAorKyAgICAgICAgICAgIHN0cnVjdCBiZmRfbGlua19pbmZvICopOworKworKyAgZW51bSBjb2ZmX3N5bWJvbF9jbGFzc2lmaWNhdGlvbiAoKl9iZmRfY29mZl9jbGFzc2lmeV9zeW1ib2wpCisrICAgIChiZmQgKiwgc3RydWN0IGludGVybmFsX3N5bWVudCAqKTsKKysKKysgIGJmZF9ib29sZWFuICgqX2JmZF9jb2ZmX2NvbXB1dGVfc2VjdGlvbl9maWxlX3Bvc2l0aW9ucykKKysgICAgKGJmZCAqKTsKKysKKysgIGJmZF9ib29sZWFuICgqX2JmZF9jb2ZmX3N0YXJ0X2ZpbmFsX2xpbmspCisrICAgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisrCisrICBiZmRfYm9vbGVhbiAoKl9iZmRfY29mZl9yZWxvY2F0ZV9zZWN0aW9uKQorKyAgICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIGJmZCAqLCBhc2VjdGlvbiAqLCBiZmRfYnl0ZSAqLAorKyAgICAgICAgICAgIHN0cnVjdCBpbnRlcm5hbF9yZWxvYyAqLCBzdHJ1Y3QgaW50ZXJuYWxfc3ltZW50ICosIGFzZWN0aW9uICoqKTsKKysKKysgIHJlbG9jX2hvd3RvX3R5cGUgKigqX2JmZF9jb2ZmX3J0eXBlX3RvX2hvd3RvKQorKyAgICAoYmZkICosIGFzZWN0aW9uICosIHN0cnVjdCBpbnRlcm5hbF9yZWxvYyAqLAorKyAgICAgICAgICAgIHN0cnVjdCBjb2ZmX2xpbmtfaGFzaF9lbnRyeSAqLCBzdHJ1Y3QgaW50ZXJuYWxfc3ltZW50ICosCisrICAgICAgICAgICAgYmZkX3ZtYSAqKTsKKysKKysgIGJmZF9ib29sZWFuICgqX2JmZF9jb2ZmX2FkanVzdF9zeW1uZHgpCisrICAgIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKiwgYmZkICosIGFzZWN0aW9uICosCisrICAgICAgICAgICAgc3RydWN0IGludGVybmFsX3JlbG9jICosIGJmZF9ib29sZWFuICopOworKworKyAgYmZkX2Jvb2xlYW4gKCpfYmZkX2NvZmZfbGlua19hZGRfb25lX3N5bWJvbCkKKysgICAgKHN0cnVjdCBiZmRfbGlua19pbmZvICosIGJmZCAqLCBjb25zdCBjaGFyICosIGZsYWd3b3JkLAorKyAgICAgICAgICAgIGFzZWN0aW9uICosIGJmZF92bWEsIGNvbnN0IGNoYXIgKiwgYmZkX2Jvb2xlYW4sIGJmZF9ib29sZWFuLAorKyAgICAgICAgICAgIHN0cnVjdCBiZmRfbGlua19oYXNoX2VudHJ5ICoqKTsKKysKKysgIGJmZF9ib29sZWFuICgqX2JmZF9jb2ZmX2xpbmtfb3V0cHV0X2hhc19iZWd1bikKKysgICAgKGJmZCAqLCBzdHJ1Y3QgY29mZl9maW5hbF9saW5rX2luZm8gKik7CisrCisrICBiZmRfYm9vbGVhbiAoKl9iZmRfY29mZl9maW5hbF9saW5rX3Bvc3RzY3JpcHQpCisrICAgIChiZmQgKiwgc3RydWN0IGNvZmZfZmluYWxfbGlua19pbmZvICopOworKworK30gYmZkX2NvZmZfYmFja2VuZF9kYXRhOworKworKyNkZWZpbmUgY29mZl9iYWNrZW5kX2luZm8oYWJmZCkgXAorKyAgKChiZmRfY29mZl9iYWNrZW5kX2RhdGEgKikgKGFiZmQpLT54dmVjLT5iYWNrZW5kX2RhdGEpCisrCisrI2RlZmluZSBiZmRfY29mZl9zd2FwX2F1eF9pbihhLGUsdCxjLGluZCxudW0saSkgXAorKyAgKChjb2ZmX2JhY2tlbmRfaW5mbyAoYSktPl9iZmRfY29mZl9zd2FwX2F1eF9pbikgKGEsZSx0LGMsaW5kLG51bSxpKSkKKysKKysjZGVmaW5lIGJmZF9jb2ZmX3N3YXBfc3ltX2luKGEsZSxpKSBcCisrICAoKGNvZmZfYmFja2VuZF9pbmZvIChhKS0+X2JmZF9jb2ZmX3N3YXBfc3ltX2luKSAoYSxlLGkpKQorKworKyNkZWZpbmUgYmZkX2NvZmZfc3dhcF9saW5lbm9faW4oYSxlLGkpIFwKKysgICgoY29mZl9iYWNrZW5kX2luZm8gKCBhKS0+X2JmZF9jb2ZmX3N3YXBfbGluZW5vX2luKSAoYSxlLGkpKQorKworKyNkZWZpbmUgYmZkX2NvZmZfc3dhcF9yZWxvY19vdXQoYWJmZCwgaSwgbykgXAorKyAgKChjb2ZmX2JhY2tlbmRfaW5mbyAoYWJmZCktPl9iZmRfY29mZl9zd2FwX3JlbG9jX291dCkgKGFiZmQsIGksIG8pKQorKworKyNkZWZpbmUgYmZkX2NvZmZfc3dhcF9saW5lbm9fb3V0KGFiZmQsIGksIG8pIFwKKysgICgoY29mZl9iYWNrZW5kX2luZm8gKGFiZmQpLT5fYmZkX2NvZmZfc3dhcF9saW5lbm9fb3V0KSAoYWJmZCwgaSwgbykpCisrCisrI2RlZmluZSBiZmRfY29mZl9zd2FwX2F1eF9vdXQoYSxpLHQsYyxpbmQsbnVtLG8pIFwKKysgICgoY29mZl9iYWNrZW5kX2luZm8gKGEpLT5fYmZkX2NvZmZfc3dhcF9hdXhfb3V0KSAoYSxpLHQsYyxpbmQsbnVtLG8pKQorKworKyNkZWZpbmUgYmZkX2NvZmZfc3dhcF9zeW1fb3V0KGFiZmQsIGksbykgXAorKyAgKChjb2ZmX2JhY2tlbmRfaW5mbyAoYWJmZCktPl9iZmRfY29mZl9zd2FwX3N5bV9vdXQpIChhYmZkLCBpLCBvKSkKKysKKysjZGVmaW5lIGJmZF9jb2ZmX3N3YXBfc2NuaGRyX291dChhYmZkLCBpLG8pIFwKKysgICgoY29mZl9iYWNrZW5kX2luZm8gKGFiZmQpLT5fYmZkX2NvZmZfc3dhcF9zY25oZHJfb3V0KSAoYWJmZCwgaSwgbykpCisrCisrI2RlZmluZSBiZmRfY29mZl9zd2FwX2ZpbGVoZHJfb3V0KGFiZmQsIGksbykgXAorKyAgKChjb2ZmX2JhY2tlbmRfaW5mbyAoYWJmZCktPl9iZmRfY29mZl9zd2FwX2ZpbGVoZHJfb3V0KSAoYWJmZCwgaSwgbykpCisrCisrI2RlZmluZSBiZmRfY29mZl9zd2FwX2FvdXRoZHJfb3V0KGFiZmQsIGksbykgXAorKyAgKChjb2ZmX2JhY2tlbmRfaW5mbyAoYWJmZCktPl9iZmRfY29mZl9zd2FwX2FvdXRoZHJfb3V0KSAoYWJmZCwgaSwgbykpCisrCisrI2RlZmluZSBiZmRfY29mZl9maWxoc3ooYWJmZCkgKGNvZmZfYmFja2VuZF9pbmZvIChhYmZkKS0+X2JmZF9maWxoc3opCisrI2RlZmluZSBiZmRfY29mZl9hb3V0c3ooYWJmZCkgKGNvZmZfYmFja2VuZF9pbmZvIChhYmZkKS0+X2JmZF9hb3V0c3opCisrI2RlZmluZSBiZmRfY29mZl9zY25oc3ooYWJmZCkgKGNvZmZfYmFja2VuZF9pbmZvIChhYmZkKS0+X2JmZF9zY25oc3opCisrI2RlZmluZSBiZmRfY29mZl9zeW1lc3ooYWJmZCkgKGNvZmZfYmFja2VuZF9pbmZvIChhYmZkKS0+X2JmZF9zeW1lc3opCisrI2RlZmluZSBiZmRfY29mZl9hdXhlc3ooYWJmZCkgKGNvZmZfYmFja2VuZF9pbmZvIChhYmZkKS0+X2JmZF9hdXhlc3opCisrI2RlZmluZSBiZmRfY29mZl9yZWxzeihhYmZkKSAgKGNvZmZfYmFja2VuZF9pbmZvIChhYmZkKS0+X2JmZF9yZWxzeikKKysjZGVmaW5lIGJmZF9jb2ZmX2xpbmVzeihhYmZkKSAoY29mZl9iYWNrZW5kX2luZm8gKGFiZmQpLT5fYmZkX2xpbmVzeikKKysjZGVmaW5lIGJmZF9jb2ZmX2ZpbG5tbGVuKGFiZmQpIChjb2ZmX2JhY2tlbmRfaW5mbyAoYWJmZCktPl9iZmRfZmlsbm1sZW4pCisrI2RlZmluZSBiZmRfY29mZl9sb25nX2ZpbGVuYW1lcyhhYmZkKSBcCisrICAoY29mZl9iYWNrZW5kX2luZm8gKGFiZmQpLT5fYmZkX2NvZmZfbG9uZ19maWxlbmFtZXMpCisrI2RlZmluZSBiZmRfY29mZl9sb25nX3NlY3Rpb25fbmFtZXMoYWJmZCkgXAorKyAgKGNvZmZfYmFja2VuZF9pbmZvIChhYmZkKS0+X2JmZF9jb2ZmX2xvbmdfc2VjdGlvbl9uYW1lcykKKysjZGVmaW5lIGJmZF9jb2ZmX2RlZmF1bHRfc2VjdGlvbl9hbGlnbm1lbnRfcG93ZXIoYWJmZCkgXAorKyAgKGNvZmZfYmFja2VuZF9pbmZvIChhYmZkKS0+X2JmZF9jb2ZmX2RlZmF1bHRfc2VjdGlvbl9hbGlnbm1lbnRfcG93ZXIpCisrI2RlZmluZSBiZmRfY29mZl9zd2FwX2ZpbGVoZHJfaW4oYWJmZCwgaSxvKSBcCisrICAoKGNvZmZfYmFja2VuZF9pbmZvIChhYmZkKS0+X2JmZF9jb2ZmX3N3YXBfZmlsZWhkcl9pbikgKGFiZmQsIGksIG8pKQorKworKyNkZWZpbmUgYmZkX2NvZmZfc3dhcF9hb3V0aGRyX2luKGFiZmQsIGksbykgXAorKyAgKChjb2ZmX2JhY2tlbmRfaW5mbyAoYWJmZCktPl9iZmRfY29mZl9zd2FwX2FvdXRoZHJfaW4pIChhYmZkLCBpLCBvKSkKKysKKysjZGVmaW5lIGJmZF9jb2ZmX3N3YXBfc2NuaGRyX2luKGFiZmQsIGksbykgXAorKyAgKChjb2ZmX2JhY2tlbmRfaW5mbyAoYWJmZCktPl9iZmRfY29mZl9zd2FwX3Njbmhkcl9pbikgKGFiZmQsIGksIG8pKQorKworKyNkZWZpbmUgYmZkX2NvZmZfc3dhcF9yZWxvY19pbihhYmZkLCBpLCBvKSBcCisrICAoKGNvZmZfYmFja2VuZF9pbmZvIChhYmZkKS0+X2JmZF9jb2ZmX3N3YXBfcmVsb2NfaW4pIChhYmZkLCBpLCBvKSkKKysKKysjZGVmaW5lIGJmZF9jb2ZmX2JhZF9mb3JtYXRfaG9vayhhYmZkLCBmaWxlaGRyKSBcCisrICAoKGNvZmZfYmFja2VuZF9pbmZvIChhYmZkKS0+X2JmZF9jb2ZmX2JhZF9mb3JtYXRfaG9vaykgKGFiZmQsIGZpbGVoZHIpKQorKworKyNkZWZpbmUgYmZkX2NvZmZfc2V0X2FyY2hfbWFjaF9ob29rKGFiZmQsIGZpbGVoZHIpXAorKyAgKChjb2ZmX2JhY2tlbmRfaW5mbyAoYWJmZCktPl9iZmRfY29mZl9zZXRfYXJjaF9tYWNoX2hvb2spIChhYmZkLCBmaWxlaGRyKSkKKysjZGVmaW5lIGJmZF9jb2ZmX21rb2JqZWN0X2hvb2soYWJmZCwgZmlsZWhkciwgYW91dGhkcilcCisrICAoKGNvZmZfYmFja2VuZF9pbmZvIChhYmZkKS0+X2JmZF9jb2ZmX21rb2JqZWN0X2hvb2spXAorKyAgIChhYmZkLCBmaWxlaGRyLCBhb3V0aGRyKSkKKysKKysjZGVmaW5lIGJmZF9jb2ZmX3N0eXBfdG9fc2VjX2ZsYWdzX2hvb2soYWJmZCwgc2NuaGRyLCBuYW1lLCBzZWN0aW9uLCBmbGFnc19wdHIpXAorKyAgKChjb2ZmX2JhY2tlbmRfaW5mbyAoYWJmZCktPl9iZmRfc3R5cF90b19zZWNfZmxhZ3NfaG9vaylcCisrICAgKGFiZmQsIHNjbmhkciwgbmFtZSwgc2VjdGlvbiwgZmxhZ3NfcHRyKSkKKysKKysjZGVmaW5lIGJmZF9jb2ZmX3NldF9hbGlnbm1lbnRfaG9vayhhYmZkLCBzZWMsIHNjbmhkcilcCisrICAoKGNvZmZfYmFja2VuZF9pbmZvIChhYmZkKS0+X2JmZF9zZXRfYWxpZ25tZW50X2hvb2spIChhYmZkLCBzZWMsIHNjbmhkcikpCisrCisrI2RlZmluZSBiZmRfY29mZl9zbHVycF9zeW1ib2xfdGFibGUoYWJmZClcCisrICAoKGNvZmZfYmFja2VuZF9pbmZvIChhYmZkKS0+X2JmZF9jb2ZmX3NsdXJwX3N5bWJvbF90YWJsZSkgKGFiZmQpKQorKworKyNkZWZpbmUgYmZkX2NvZmZfc3ltbmFtZV9pbl9kZWJ1ZyhhYmZkLCBzeW0pXAorKyAgKChjb2ZmX2JhY2tlbmRfaW5mbyAoYWJmZCktPl9iZmRfY29mZl9zeW1uYW1lX2luX2RlYnVnKSAoYWJmZCwgc3ltKSkKKysKKysjZGVmaW5lIGJmZF9jb2ZmX2ZvcmNlX3N5bW5hbWVzX2luX3N0cmluZ3MoYWJmZClcCisrICAoY29mZl9iYWNrZW5kX2luZm8gKGFiZmQpLT5fYmZkX2NvZmZfZm9yY2Vfc3ltbmFtZXNfaW5fc3RyaW5ncykKKysKKysjZGVmaW5lIGJmZF9jb2ZmX2RlYnVnX3N0cmluZ19wcmVmaXhfbGVuZ3RoKGFiZmQpXAorKyAgKGNvZmZfYmFja2VuZF9pbmZvIChhYmZkKS0+X2JmZF9jb2ZmX2RlYnVnX3N0cmluZ19wcmVmaXhfbGVuZ3RoKQorKworKyNkZWZpbmUgYmZkX2NvZmZfcHJpbnRfYXV4KGFiZmQsIGZpbGUsIGJhc2UsIHN5bWJvbCwgYXV4LCBpbmRhdXgpXAorKyAgKChjb2ZmX2JhY2tlbmRfaW5mbyAoYWJmZCktPl9iZmRfY29mZl9wcmludF9hdXgpXAorKyAgIChhYmZkLCBmaWxlLCBiYXNlLCBzeW1ib2wsIGF1eCwgaW5kYXV4KSkKKysKKysjZGVmaW5lIGJmZF9jb2ZmX3JlbG9jMTZfZXh0cmFfY2FzZXMoYWJmZCwgbGlua19pbmZvLCBsaW5rX29yZGVyLFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsb2MsIGRhdGEsIHNyY19wdHIsIGRzdF9wdHIpXAorKyAgKChjb2ZmX2JhY2tlbmRfaW5mbyAoYWJmZCktPl9iZmRfY29mZl9yZWxvYzE2X2V4dHJhX2Nhc2VzKVwKKysgICAoYWJmZCwgbGlua19pbmZvLCBsaW5rX29yZGVyLCByZWxvYywgZGF0YSwgc3JjX3B0ciwgZHN0X3B0cikpCisrCisrI2RlZmluZSBiZmRfY29mZl9yZWxvYzE2X2VzdGltYXRlKGFiZmQsIHNlY3Rpb24sIHJlbG9jLCBzaHJpbmssIGxpbmtfaW5mbylcCisrICAoKGNvZmZfYmFja2VuZF9pbmZvIChhYmZkKS0+X2JmZF9jb2ZmX3JlbG9jMTZfZXN0aW1hdGUpXAorKyAgIChhYmZkLCBzZWN0aW9uLCByZWxvYywgc2hyaW5rLCBsaW5rX2luZm8pKQorKworKyNkZWZpbmUgYmZkX2NvZmZfY2xhc3NpZnlfc3ltYm9sKGFiZmQsIHN5bSlcCisrICAoKGNvZmZfYmFja2VuZF9pbmZvIChhYmZkKS0+X2JmZF9jb2ZmX2NsYXNzaWZ5X3N5bWJvbClcCisrICAgKGFiZmQsIHN5bSkpCisrCisrI2RlZmluZSBiZmRfY29mZl9jb21wdXRlX3NlY3Rpb25fZmlsZV9wb3NpdGlvbnMoYWJmZClcCisrICAoKGNvZmZfYmFja2VuZF9pbmZvIChhYmZkKS0+X2JmZF9jb2ZmX2NvbXB1dGVfc2VjdGlvbl9maWxlX3Bvc2l0aW9ucylcCisrICAgKGFiZmQpKQorKworKyNkZWZpbmUgYmZkX2NvZmZfc3RhcnRfZmluYWxfbGluayhvYmZkLCBpbmZvKVwKKysgICgoY29mZl9iYWNrZW5kX2luZm8gKG9iZmQpLT5fYmZkX2NvZmZfc3RhcnRfZmluYWxfbGluaylcCisrICAgKG9iZmQsIGluZm8pKQorKyNkZWZpbmUgYmZkX2NvZmZfcmVsb2NhdGVfc2VjdGlvbihvYmZkLGluZm8saWJmZCxvLGNvbixyZWwsaXN5bXMsc2VjcylcCisrICAoKGNvZmZfYmFja2VuZF9pbmZvIChpYmZkKS0+X2JmZF9jb2ZmX3JlbG9jYXRlX3NlY3Rpb24pXAorKyAgIChvYmZkLCBpbmZvLCBpYmZkLCBvLCBjb24sIHJlbCwgaXN5bXMsIHNlY3MpKQorKyNkZWZpbmUgYmZkX2NvZmZfcnR5cGVfdG9faG93dG8oYWJmZCwgc2VjLCByZWwsIGgsIHN5bSwgYWRkZW5kcClcCisrICAoKGNvZmZfYmFja2VuZF9pbmZvIChhYmZkKS0+X2JmZF9jb2ZmX3J0eXBlX3RvX2hvd3RvKVwKKysgICAoYWJmZCwgc2VjLCByZWwsIGgsIHN5bSwgYWRkZW5kcCkpCisrI2RlZmluZSBiZmRfY29mZl9hZGp1c3Rfc3ltbmR4KG9iZmQsIGluZm8sIGliZmQsIHNlYywgcmVsLCBhZGp1c3RlZHApXAorKyAgKChjb2ZmX2JhY2tlbmRfaW5mbyAoYWJmZCktPl9iZmRfY29mZl9hZGp1c3Rfc3ltbmR4KVwKKysgICAob2JmZCwgaW5mbywgaWJmZCwgc2VjLCByZWwsIGFkanVzdGVkcCkpCisrI2RlZmluZSBiZmRfY29mZl9saW5rX2FkZF9vbmVfc3ltYm9sKGluZm8sIGFiZmQsIG5hbWUsIGZsYWdzLCBzZWN0aW9uLFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIHN0cmluZywgY3AsIGNvbGwsIGhhc2hwKVwKKysgICgoY29mZl9iYWNrZW5kX2luZm8gKGFiZmQpLT5fYmZkX2NvZmZfbGlua19hZGRfb25lX3N5bWJvbClcCisrICAgKGluZm8sIGFiZmQsIG5hbWUsIGZsYWdzLCBzZWN0aW9uLCB2YWx1ZSwgc3RyaW5nLCBjcCwgY29sbCwgaGFzaHApKQorKworKyNkZWZpbmUgYmZkX2NvZmZfbGlua19vdXRwdXRfaGFzX2JlZ3VuKGEscCkgXAorKyAgKChjb2ZmX2JhY2tlbmRfaW5mbyAoYSktPl9iZmRfY29mZl9saW5rX291dHB1dF9oYXNfYmVndW4pIChhLCBwKSkKKysjZGVmaW5lIGJmZF9jb2ZmX2ZpbmFsX2xpbmtfcG9zdHNjcmlwdChhLHApIFwKKysgICgoY29mZl9iYWNrZW5kX2luZm8gKGEpLT5fYmZkX2NvZmZfZmluYWxfbGlua19wb3N0c2NyaXB0KSAoYSwgcCkpCisrCistLS0gYS9iZmQvbGliYmZkLmgKKysrKyBiL2JmZC9saWJiZmQuaAorQEAgLTE2MDEsNiArMTYwMSw0OCBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYmZkX3JlbG9jX2NvZGVfCisgICAiQkZEX1JFTE9DX0FWUl9MREkiLAorICAgIkJGRF9SRUxPQ19BVlJfNiIsCisgICAiQkZEX1JFTE9DX0FWUl82X0FESVciLAorKyAgIkJGRF9SRUxPQ19BVlIzMl9ESUZGMzIiLAorKyAgIkJGRF9SRUxPQ19BVlIzMl9ESUZGMTYiLAorKyAgIkJGRF9SRUxPQ19BVlIzMl9ESUZGOCIsCisrICAiQkZEX1JFTE9DX0FWUjMyX0dPVDMyIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfR09UMTYiLAorKyAgIkJGRF9SRUxPQ19BVlIzMl9HT1Q4IiwKKysgICJCRkRfUkVMT0NfQVZSMzJfMjFTIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfMTZVIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfMTZTIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfU1VCNSIsCisrICAiQkZEX1JFTE9DX0FWUjMyXzhTX0VYVCIsCisrICAiQkZEX1JFTE9DX0FWUjMyXzhTIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfMTVTIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfMjJIX1BDUkVMIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfMThXX1BDUkVMIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfMTZCX1BDUkVMIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfMTZOX1BDUkVMIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfMTRVV19QQ1JFTCIsCisrICAiQkZEX1JFTE9DX0FWUjMyXzExSF9QQ1JFTCIsCisrICAiQkZEX1JFTE9DX0FWUjMyXzEwVVdfUENSRUwiLAorKyAgIkJGRF9SRUxPQ19BVlIzMl85SF9QQ1JFTCIsCisrICAiQkZEX1JFTE9DX0FWUjMyXzlVV19QQ1JFTCIsCisrICAiQkZEX1JFTE9DX0FWUjMyX0dPVFBDIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfR09UQ0FMTCIsCisrICAiQkZEX1JFTE9DX0FWUjMyX0xEQV9HT1QiLAorKyAgIkJGRF9SRUxPQ19BVlIzMl9HT1QyMVMiLAorKyAgIkJGRF9SRUxPQ19BVlIzMl9HT1QxOFNXIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfR09UMTZTIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfMzJfQ1BFTlQiLAorKyAgIkJGRF9SRUxPQ19BVlIzMl9DUENBTEwiLAorKyAgIkJGRF9SRUxPQ19BVlIzMl8xNl9DUCIsCisrICAiQkZEX1JFTE9DX0FWUjMyXzlXX0NQIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfQUxJR04iLAorKyAgIkJGRF9SRUxPQ19BVlIzMl8xNFVXIiwKKysgICJCRkRfUkVMT0NfQVZSMzJfMTBVVyIsCisrICAiQkZEX1JFTE9DX0FWUjMyXzEwU1ciLAorKyAgIkJGRF9SRUxPQ19BVlIzMl9TVEhIX1ciLAorKyAgIkJGRF9SRUxPQ19BVlIzMl83VVciLAorKyAgIkJGRF9SRUxPQ19BVlIzMl82UyIsCisrICAiQkZEX1JFTE9DX0FWUjMyXzZVVyIsCisrICAiQkZEX1JFTE9DX0FWUjMyXzRVSCIsCisrICAiQkZEX1JFTE9DX0FWUjMyXzNVIiwKKyAgICJCRkRfUkVMT0NfMzkwXzEyIiwKKyAgICJCRkRfUkVMT0NfMzkwX0dPVDEyIiwKKyAgICJCRkRfUkVMT0NfMzkwX1BMVDMyIiwKKy0tLSAvZGV2L251bGwKKysrKyBiL2JmZC9saWJ0b29sCitAQCAtMCwwICsxLDc4NzEgQEAKKysjISAvYmluL2Jhc2gKKysKKysjIGxpYnRvb2wgLSBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KKysjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZy5zdGF0dXMgKGJmZCkgMi4xOC5hdG1lbC4xLjAuMQorKyMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IGhjZWd0dmVkdDoKKysjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKysjCisrIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKysjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisrIworKyMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KKysjCisrIyBHTlUgTGlidG9vbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisrIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrIworKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisrIyBpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CisrIyBpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKKysjIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKyMKKysjIEdOVSBMaWJ0b29sIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCBHTlUgTGlidG9vbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIGEgY29weQorKyMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwsIG9yCisrIyBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisrIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKysKKysKKysjIFRoZSBuYW1lcyBvZiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KKythdmFpbGFibGVfdGFncz0iIgorKworKyMgIyMjIEJFR0lOIExJQlRPT0wgQ09ORklHCisrCisrIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgorK2J1aWxkX2xpYnRvb2xfbGlicz1ubworKworKyMgV2hpY2ggcmVsZWFzZSBvZiBsaWJ0b29sLm00IHdhcyB1c2VkPworK21hY3JvX3ZlcnNpb249Mi4yLjQKKyttYWNyb19yZXZpc2lvbj0xLjI5NzYKKysKKysjIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuCisrYnVpbGRfb2xkX2xpYnM9eWVzCisrCisrIyBXaGF0IHR5cGUgb2Ygb2JqZWN0cyB0byBidWlsZC4KKytwaWNfbW9kZT1kZWZhdWx0CisrCisrIyBXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24uCisrZmFzdF9pbnN0YWxsPW5lZWRsZXNzCisrCisrIyBUaGUgaG9zdCBzeXN0ZW0uCisraG9zdF9hbGlhcz1pNjg2LXBjLWxpbnV4LWdudQorK2hvc3Q9aTY4Ni1wYy1saW51eC1nbnUKKytob3N0X29zPWxpbnV4LWdudQorKworKyMgVGhlIGJ1aWxkIHN5c3RlbS4KKytidWlsZF9hbGlhcz1pNjg2LXBjLWxpbnV4LWdudQorK2J1aWxkPWk2ODYtcGMtbGludXgtZ251CisrYnVpbGRfb3M9bGludXgtZ251CisrCisrIyBBIHNlZCBwcm9ncmFtIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0LgorK1NFRD0iL2Jpbi9zZWQiCisrCisrIyBTZWQgdGhhdCBoZWxwcyB1cyBhdm9pZCBhY2NpZGVudGFsbHkgdHJpZ2dlcmluZyBlY2hvKDEpIG9wdGlvbnMgbGlrZSAtbi4KKytYc2VkPSIkU0VEIC1lIDFzL15YLy8iCisrCisrIyBBIGdyZXAgcHJvZ3JhbSB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcy4KKytHUkVQPSIvYmluL2dyZXAiCisrCisrIyBBbiBFUkUgbWF0Y2hlci4KKytFR1JFUD0iL2Jpbi9ncmVwIC1FIgorKworKyMgQSBsaXRlcmFsIHN0cmluZyBtYXRjaGVyLgorK0ZHUkVQPSIvYmluL2dyZXAgLUYiCisrCisrIyBBIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3Rlci4KKytOTT0ibm0iCisrCisrIyBXaGV0aGVyIHdlIG5lZWQgc29mdCBvciBoYXJkIGxpbmtzLgorK0xOX1M9ImxuIC1zIgorKworKyMgV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kPworK21heF9jbWRfbGVuPTgwNTMwNjM2NQorKworKyMgT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpLgorK29iamV4dD1vCisrCisrIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIikuCisrZXhlZXh0PQorKworKyMgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgInVuc2V0Ii4KKytsdF91bnNldD11bnNldAorKworKyMgdHVybiBzcGFjZXMgaW50byBuZXdsaW5lcy4KKytTUDJOTD0idHIgXFwwNDAgXFwwMTIiCisrCisrIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgorK05MMlNQPSJ0ciBcXDAxNVxcMDEyIFxcMDQwXFwwNDAiCisrCisrIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgorK3JlbG9hZF9mbGFnPSIgLXIiCisrcmVsb2FkX2NtZHM9IlwkTERcJHJlbG9hZF9mbGFnIC1vIFwkb3V0cHV0XCRyZWxvYWRfb2JqcyIKKysKKysjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgorK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJwYXNzX2FsbCIKKysKKysjIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gImZpbGVfbWFnaWMiLgorK2ZpbGVfbWFnaWNfY21kPSJcJE1BR0lDX0NNRCIKKysKKysjIFRoZSBhcmNoaXZlci4KKytBUj0iYXIiCisrQVJfRkxBR1M9ImNydSIKKysKKysjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtLgorK1NUUklQPSJzdHJpcCIKKysKKysjIENvbW1hbmRzIHVzZWQgdG8gaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KKytSQU5MSUI9InJhbmxpYiIKKytvbGRfcG9zdGluc3RhbGxfY21kcz0iY2htb2QgNjQ0IFwkb2xkbGliflwkUkFOTElCIFwkb2xkbGliIgorK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9IiIKKysKKysjIEEgQyBjb21waWxlci4KKytMVENDPSJnY2MiCisrCisrIyBMVENDIGNvbXBpbGVyIGZsYWdzLgorK0xUQ0ZMQUdTPSItZyAtTzIiCisrCisrIyBUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzLgorK2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cXChbQUJDREdJUlNUV11bQUJDREdJUlNUV10qXFwpWwkgXVsJIF0qXFwoW19BLVphLXpdW19BLVphLXowLTldKlxcKVwkL1xcMSBcXDIgXFwyL3AnIgorKworKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4KKytnbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXFwoLipcXClcJC9leHRlcm4gaW50IFxcMSgpOy9wJyAtZSAncy9eW0FCQ0RHSVJTVFddKiAuKiBcXCguKlxcKVwkL2V4dGVybiBjaGFyIFxcMTsvcCciCisrCisrIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIuCisrZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFxcKFteIF0qXFwpIFwkLyAge1xcXCJcXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXltBQkNER0lSU1RXXSogXFwoW14gXSpcXCkgXFwoW14gXSpcXClcJC8gIHtcIlxcMlwiLCAodm9pZCAqKSBcXCZcXDJ9LC9wJyIKKysKKysjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgorK2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFxcKFteIF0qXFwpIFwkLyAge1xcXCJcXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXltBQkNER0lSU1RXXSogXFwoW14gXSpcXCkgXFwobGliW14gXSpcXClcJC8gIHtcIlxcMlwiLCAodm9pZCAqKSBcXCZcXDJ9LC9wJyAtZSAncy9eW0FCQ0RHSVJTVFddKiBcXChbXiBdKlxcKSBcXChbXiBdKlxcKVwkLyAge1wibGliXFwyXCIsICh2b2lkICopIFxcJlxcMn0sL3AnIgorKworKyMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgorK29iamRpcj0ubGlicworKworKyMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KKytTSEVMTD0iL2Jpbi9iYXNoIgorKworKyMgQW4gZWNobyBwcm9ncmFtIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgorK0VDSE89ImVjaG8iCisrCisrIyBVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zIHdpdGggImZpbGUiLgorK01BR0lDX0NNRD1maWxlCisrCisrIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KKytuZWVkX2xvY2tzPSJubyIKKysKKysjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCisrRFNZTVVUSUw9IiIKKysKKysjIFRvb2wgdG8gY2hhbmdlIGdsb2JhbCB0byBsb2NhbCBzeW1ib2xzIG9uIE1hYyBPUyBYLgorK05NRURJVD0iIgorKworKyMgVG9vbCB0byBtYW5pcHVsYXRlIGZhdCBvYmplY3RzIGFuZCBhcmNoaXZlcyBvbiBNYWMgT1MgWC4KKytMSVBPPSIiCisrCisrIyBsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWC4KKytPVE9PTD0iIgorKworKyMgbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciA2NCBiaXQgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYIDEwLjQuCisrT1RPT0w2ND0iIgorKworKyMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgorK2xpYmV4dD1hCisrCisrIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKS4KKytzaHJleHRfY21kcz0iLnNvIgorKworKyMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KKytleHRyYWN0X2V4cHN5bXNfY21kcz0iIgorKworKyMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCisrIyByZXN0b3JlZCBhdCBsaW5rIHRpbWUuCisrdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggTERfTElCUkFSWV9QQVRIIExEX1JVTl9QQVRIIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKKysKKysjIERvIHdlIG5lZWQgdGhlICJsaWIiIHByZWZpeCBmb3IgbW9kdWxlcz8KKytuZWVkX2xpYl9wcmVmaXg9bm8KKysKKysjIERvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/CisrbmVlZF92ZXJzaW9uPW5vCisrCisrIyBMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZS4KKyt2ZXJzaW9uX3R5cGU9bGludXgKKysKKysjIFNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KKytydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorKworKyMgU2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZS4KKytzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorKworKyMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPworK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworKworKyMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCisrbGlibmFtZV9zcGVjPSJsaWJcJG5hbWUiCisrCisrIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgorKyMgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRQorK2xpYnJhcnlfbmFtZXNfc3BlYz0iXCR7bGlibmFtZX1cJHtyZWxlYXNlfVwke3NoYXJlZF9leHR9XCR2ZXJzdWZmaXggXCR7bGlibmFtZX1cJHtyZWxlYXNlfVwke3NoYXJlZF9leHR9XCRtYWpvciBcJGxpYm5hbWVcJHtzaGFyZWRfZXh0fSIKKysKKysjIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgorK3NvbmFtZV9zcGVjPSJcJHtsaWJuYW1lfVwke3JlbGVhc2V9XCR7c2hhcmVkX2V4dH1cJG1ham9yIgorKworKyMgQ29tbWFuZCB0byB1c2UgYWZ0ZXIgaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmUuCisrcG9zdGluc3RhbGxfY21kcz0iIgorKworKyMgQ29tbWFuZCB0byB1c2UgYWZ0ZXIgdW5pbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZS4KKytwb3N0dW5pbnN0YWxsX2NtZHM9IiIKKysKKysjIENvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeS4KKytmaW5pc2hfY21kcz0iUEFUSD1cXFwiXFxcJFBBVEg6L3NiaW5cXFwiIGxkY29uZmlnIC1uIFwkbGliZGlyIgorKworKyMgQXMgImZpbmlzaF9jbWRzIiwgZXhjZXB0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0CisrIyBub3Qgc2hvd24uCisrZmluaXNoX2V2YWw9IiIKKysKKysjIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCisraGFyZGNvZGVfaW50b19saWJzPXllcworKworKyMgQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzLgorK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvZ2NjL2k0ODYtbGludXgtZ251LzQuMi40IC91c3IvbGliIC9saWIiCisrCisrIyBSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcy4KKytzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvbGliL2k0ODYtbGludXgtZ251IC91c3IvbGliL2k0ODYtbGludXgtZ251IC91c3IvbGliL2Fsc2EtbGliIC91c3IvbG9jYWwvbGliICIKKysKKysjIFdoZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZC4KKytkbG9wZW5fc3VwcG9ydD11bmtub3duCisrCisrIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCisrZGxvcGVuX3NlbGY9dW5rbm93bgorKworKyMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgorK2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duCisrCisrIyBDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXMuCisrb2xkX3N0cmlwbGliPSJzdHJpcCAtLXN0cmlwLWRlYnVnIgorK3N0cmlwbGliPSJzdHJpcCAtLXN0cmlwLXVubmVlZGVkIgorKworKworKyMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KKytMRD0ibGQiCisrCisrIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgorK29sZF9hcmNoaXZlX2NtZHM9IlwkQVIgXCRBUl9GTEFHUyBcJG9sZGxpYlwkb2xkb2Jqc35cJFJBTkxJQiBcJG9sZGxpYiIKKysKKysjIEEgbGFuZ3VhZ2Ugc3BlY2lmaWMgY29tcGlsZXIuCisrQ0M9ImdjYyIKKysKKysjIElzIHRoZSBjb21waWxlciB0aGUgR05VIGNvbXBpbGVyPworK3dpdGhfZ2NjPXllcworKworKyMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KKytub19idWlsdGluX2ZsYWc9IiAtZm5vLWJ1aWx0aW4iCisrCisrIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorK3dsPSItV2wsIgorKworKyMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorK3BpY19mbGFnPSIgLWZQSUMgLURQSUMiCisrCisrIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorK2xpbmtfc3RhdGljX2ZsYWc9Ii1zdGF0aWMiCisrCisrIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/CisrY29tcGlsZXJfY19vPSJ5ZXMiCisrCisrIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorK2J1aWxkX2xpYnRvb2xfbmVlZF9sYz15ZXMKKysKKysjIFdoZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWMuCisrYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPW5vCisrCisrIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgorK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0iXCR7d2x9LS1leHBvcnQtZHluYW1pYyIKKysKKysjIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KKyt3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0iXCR7d2x9LS13aG9sZS1hcmNoaXZlXCRjb252ZW5pZW5jZSBcJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUiCisrCisrIyBXaGV0aGVyIHRoZSBjb21waWxlciBjb3BlcyB3aXRoIHBhc3Npbmcgbm8gb2JqZWN0cyBkaXJlY3RseS4KKytjb21waWxlcl9uZWVkc19vYmplY3Q9Im5vIgorKworKyMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KKytvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSIiCisrCisrIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCisrb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9IiIKKysKKysjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZS4KKythcmNoaXZlX2NtZHM9IlwkQ0MgLXNoYXJlZCBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgXCR7d2x9LXNvbmFtZSBcJHdsXCRzb25hbWUgLW8gXCRsaWIiCisrYXJjaGl2ZV9leHBzeW1fY21kcz0iZWNobyBcXFwieyBnbG9iYWw6XFxcIiA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUudmVyfgorKwkgICAgY2F0IFwkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgXFxcInMvXFxcXCguKlxcXFwpL1xcXFwxOy9cXFwiID4+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUudmVyfgorKwkgICAgZWNobyBcXFwibG9jYWw6ICo7IH07XFxcIiA+PiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLnZlcn4KKysJICAgIFwkQ0MgLXNoYXJlZCBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgXCR7d2x9LXNvbmFtZSBcJHdsXCRzb25hbWUgXCR7d2x9LXZlcnNpb24tc2NyaXB0IFwke3dsfVwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUudmVyIC1vIFwkbGliIgorKworKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSBpZiBkaWZmZXJlbnQgZnJvbSBidWlsZGluZworKyMgYSBzaGFyZWQgYXJjaGl2ZS4KKyttb2R1bGVfY21kcz0iIgorK21vZHVsZV9leHBzeW1fY21kcz0iIgorKworKyMgV2hldGhlciB3ZSBhcmUgYnVpbGRpbmcgd2l0aCBHTlUgbGQgb3Igbm90LgorK3dpdGhfZ251X2xkPSJ5ZXMiCisrCisrIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KKythbGxvd191bmRlZmluZWRfZmxhZz0iIgorKworKyMgRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgorK25vX3VuZGVmaW5lZF9mbGFnPSIiCisrCisrIyBGbGFnIHRvIGhhcmRjb2RlICRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKysjIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgJGxpYmRpciBkb2VzIG5vdCBleGlzdAorK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Ilwke3dsfS1ycGF0aCBcJHt3bH1cJGxpYmRpciIKKysKKysjIElmIGxkIGlzIHVzZWQgd2hlbiBsaW5raW5nLCBmbGFnIHRvIGhhcmRjb2RlICRsaWJkaXIgaW50byBhIGJpbmFyeQorKyMgZHVyaW5nIGxpbmtpbmcuICBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCisraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0iIgorKworKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KKytoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSIiCisrCisrIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworKyMgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCisraGFyZGNvZGVfZGlyZWN0PW5vCisrCisrIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworKyMgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkgYW5kIHRoZSByZXN1bHRpbmcgbGlicmFyeSBkZXBlbmRlbmN5IGlzCisrIyAiYWJzb2x1dGUiLGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nICR7c2hsaWJwYXRoX3Zhcn0gaWYgdGhlCisrIyBsaWJyYXJ5IGlzIHJlbG9jYXRlZC4KKytoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9bm8KKysKKysjIFNldCB0byAieWVzIiBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisrIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgorK2hhcmRjb2RlX21pbnVzX0w9bm8KKysKKysjIFNldCB0byAieWVzIiBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisrIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgorK2hhcmRjb2RlX3NobGlicGF0aF92YXI9dW5zdXBwb3J0ZWQKKysKKysjIFNldCB0byAieWVzIiBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUgorKyMgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKKysjIGFnYWluc3QgaXQuCisraGFyZGNvZGVfYXV0b21hdGljPW5vCisrCisrIyBTZXQgdG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJhcmllcworKyMgdG8gcnVudGltZSBwYXRoIGxpc3QuCisraW5oZXJpdF9ycGF0aD1ubworKworKyMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorK2xpbmtfYWxsX2RlcGxpYnM9dW5rbm93bgorKworKyMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSAkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorK2ZpeF9zcmNmaWxlX3BhdGg9IiIKKysKKysjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KKythbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKysKKysjIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCisrZXhwb3J0X3N5bWJvbHNfY21kcz0iXCROTSBcJGxpYm9ianMgXCRjb252ZW5pZW5jZSB8IFwkZ2xvYmFsX3N5bWJvbF9waXBlIHwgXCRTRUQgJ3MvLiogLy8nIHwgc29ydCB8IHVuaXEgPiBcJGV4cG9ydF9zeW1ib2xzIgorKworKyMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KKytleGNsdWRlX2V4cHN5bXM9Il9HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiIKKysKKysjIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KKytpbmNsdWRlX2V4cHN5bXM9IiIKKysKKysjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorK3ByZWxpbmtfY21kcz0iIgorKworKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorK2ZpbGVfbGlzdF9zcGVjPSIiCisrCisrIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KKytoYXJkY29kZV9hY3Rpb249aW1tZWRpYXRlCisrCisrIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHCisrCisrIyBHZW5lcmF0ZWQgZnJvbSBsdG1haW4ubTRzaDsgZG8gbm90IGVkaXQgYnkgaGFuZAorKworKyMgbHRtYWluLnNoIChHTlUgbGlidG9vbCAxLjI0MzUgMjAwNy8wMy8xOCAxODo0NDo0MikgMi4xYQorKyMgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCA8Z29yZEBnbnUuYWkubWl0LmVkdT4sIDE5OTYKKysKKysjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCisrIyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKyMKKysjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKysjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKysjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKysjIFVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gW01PREUtQVJHXS4uLgorKyMKKysjIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgorKyMKKysjICAgICAtLWNvbmZpZyAgICAgICAgICAgICBzaG93IGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworKyMgICAgIC0tZGVidWcgICAgICAgICAgICAgIGVuYWJsZSB2ZXJib3NlIHNoZWxsIHRyYWNpbmcKKysjIC1uLCAtLWRyeS1ydW4gICAgICAgICAgICBkaXNwbGF5IGNvbW1hbmRzIHdpdGhvdXQgbW9kaWZ5aW5nIGFueSBmaWxlcworKyMgICAgIC0tZmVhdHVyZXMgICAgICAgICAgIGRpc3BsYXkgYmFzaWMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorKyMgICAgIC0tbW9kZT1NT0RFICAgICAgICAgIHVzZSBvcGVyYXRpb24gbW9kZSBNT0RFCisrIyAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcyAgZG9uJ3QgcmVtb3ZlIGR1cGxpY2F0ZSBkZXBlbmRlbmN5IGxpYnJhcmllcworKyMgICAgIC0tcXVpZXQsIC0tc2lsZW50ICAgIGRvbid0IHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMKKysjICAgICAtLXRhZz1UQUcgICAgICAgICAgICB1c2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZnJvbSB0YWcgVEFHCisrIyAtdiwgLS12ZXJib3NlICAgICAgICAgICAgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyAoZGVmYXVsdCkKKysjICAgICAtLXZlcnNpb24gICAgICAgICAgICBwcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uCisrIyAtaCwgLS1oZWxwICAgICAgICAgICAgICAgcHJpbnQgc2hvcnQgb3IgbG9uZyBoZWxwIG1lc3NhZ2UKKysjCisrIyBNT0RFIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisrIworKyMgICAgICAgY2xlYW4gICAgICAgICAgICAgIHJlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkKKysjICAgICAgIGNvbXBpbGUgICAgICAgICAgICBjb21waWxlIGEgc291cmNlIGZpbGUgaW50byBhIGxpYnRvb2wgb2JqZWN0CisrIyAgICAgICBleGVjdXRlICAgICAgICAgICAgYXV0b21hdGljYWxseSBzZXQgbGlicmFyeSBwYXRoLCB0aGVuIHJ1biBhIHByb2dyYW0KKysjICAgICAgIGZpbmlzaCAgICAgICAgICAgICBjb21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzCisrIyAgICAgICBpbnN0YWxsICAgICAgICAgICAgaW5zdGFsbCBsaWJyYXJpZXMgb3IgZXhlY3V0YWJsZXMKKysjICAgICAgIGxpbmsgICAgICAgICAgICAgICBjcmVhdGUgYSBsaWJyYXJ5IG9yIGFuIGV4ZWN1dGFibGUKKysjICAgICAgIHVuaW5zdGFsbCAgICAgICAgICByZW1vdmUgbGlicmFyaWVzIGZyb20gYW4gaW5zdGFsbGVkIGRpcmVjdG9yeQorKyMKKysjIE1PREUtQVJHUyB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgTU9ERS4KKysjIFRyeSBgJHByb2duYW1lIC0taGVscCAtLW1vZGU9TU9ERScgZm9yIGEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBNT0RFLgorKyMKKysjIFdoZW4gcmVwb3J0aW5nIGEgYnVnLCBwbGVhc2UgZGVzY3JpYmUgYSB0ZXN0IGNhc2UgdG8gcmVwcm9kdWNlIGl0IGFuZAorKyMgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorKyMKKysjICAgICAgIGhvc3QtdHJpcGxldDoJJGhvc3QKKysjICAgICAgIHNoZWxsOgkJJFNIRUxMCisrIyAgICAgICBjb21waWxlcjoJCSRMVENDCisrIyAgICAgICBjb21waWxlciBmbGFnczoJCSRMVENGTEFHUworKyMgICAgICAgbGlua2VyOgkJJExEIChnbnU/ICR3aXRoX2dudV9sZCkKKysjICAgICAgICRwcm9nbmFtZToJCShHTlUgbGlidG9vbCAxLjI0MzUgMjAwNy8wMy8xOCAxODo0NDo0MikgMi4xYQorKyMgICAgICAgYXV0b21ha2U6CQkkYXV0b21ha2VfdmVyc2lvbgorKyMgICAgICAgYXV0b2NvbmY6CQkkYXV0b2NvbmZfdmVyc2lvbgorKyMKKysjIFJlcG9ydCBidWdzIHRvIDxidWctbGlidG9vbEBnbnUub3JnPi4KKysKKytQUk9HUkFNPWx0bWFpbi5zaAorK1BBQ0tBR0U9bGlidG9vbAorK1ZFUlNJT049Mi4xYQorK1RJTUVTVEFNUD0iIDEuMjQzNSAyMDA3LzAzLzE4IDE4OjQ0OjQyIgorK3BhY2thZ2VfcmV2aXNpb249MS4yNDM1CisrCisrIyBCZSBCb3VybmUgY29tcGF0aWJsZQorK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgZW11bGF0ZSBzaAorKyAgTlVMTENNRD06CisrICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisrICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorKyAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCisrICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorK2Vsc2UKKysgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAqcG9zaXgqKSBzZXQgLW8gcG9zaXg7OyBlc2FjCisrZmkKKytCSU5fU0g9eHBnNDsgZXhwb3J0IEJJTl9TSCAjIGZvciBUcnU2NAorK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKKysKKysjIE5MUyBudWlzYW5jZXM6IFdlIHNhdmUgdGhlIG9sZCB2YWx1ZXMgdG8gcmVzdG9yZSBkdXJpbmcgZXhlY3V0ZSBtb2RlLgorKyMgT25seSBzZXQgTEFORyBhbmQgTENfQUxMIHRvIEMgaWYgYWxyZWFkeSBzZXQuCisrIyBUaGVzZSBtdXN0IG5vdCBiZSBzZXQgdW5jb25kaXRpb25hbGx5IGJlY2F1c2Ugbm90IGFsbCBzeXN0ZW1zIHVuZGVyc3RhbmQKKysjIGUuZy4gTEFORz1DIChub3RhYmx5IFNDTykuCisrZm9yIGx0X3ZhciBpbiBMQU5HIExDX0FMTCBMQ19DVFlQRSBMQ19DT0xMQVRFIExDX01FU1NBR0VTCisrZG8KKysgIGV2YWwgImlmIHRlc3QgXCJcJHskbHRfdmFyK3NldH1cIiA9IHNldDsgdGhlbgorKyAgICAgICAgICBzYXZlXyRsdF92YXI9XCQkbHRfdmFyCisrICAgICAgICAgICRsdF92YXI9QworKwkgIGV4cG9ydCAkbHRfdmFyCisrCWZpIgorK2RvbmUKKysKKyskbHRfdW5zZXQgQ0RQQVRICisrCisrCisrCisrCisrCisrOiAke0NQPSJjcCAtZiJ9CisrOiAke0VDSE89ImVjaG8ifQorKzogJHtFR1JFUD0iL2Jpbi9ncmVwIC1FIn0KKys6ICR7RkdSRVA9Ii9iaW4vZ3JlcCAtRiJ9CisrOiAke0dSRVA9Ii9iaW4vZ3JlcCJ9CisrOiAke0xOX1M9ImxuIC1zIn0KKys6ICR7TUFLRT0ibWFrZSJ9CisrOiAke01LRElSPSJta2RpciJ9CisrOiAke01WPSJtdiAtZiJ9CisrOiAke1JNPSJybSAtZiJ9CisrOiAke1NFRD0iL2Jpbi9zZWQifQorKzogJHtTSEVMTD0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0ifQorKzogJHtYc2VkPSIkU0VEIC1lIDFzL15YLy8ifQorKworKyMgR2xvYmFsIHZhcmlhYmxlczoKKytFWElUX1NVQ0NFU1M9MAorK0VYSVRfRkFJTFVSRT0xCisrRVhJVF9NSVNNQVRDSD02MyAgIyAkPyA9IDYzIGlzIHVzZWQgdG8gaW5kaWNhdGUgdmVyc2lvbiBtaXNtYXRjaCB0byBtaXNzaW5nLgorK0VYSVRfU0tJUD03NwkgICMgJD8gPSA3NyBpcyB1c2VkIHRvIGluZGljYXRlIGEgc2tpcHBlZCB0ZXN0IHRvIGF1dG9tYWtlLgorKworK2V4aXRfc3RhdHVzPSRFWElUX1NVQ0NFU1MKKysKKysjIE1ha2Ugc3VyZSBJRlMgaGFzIGEgc2Vuc2libGUgZGVmYXVsdAorK2x0X25sPScKKysnCisrSUZTPSIgCSRsdF9ubCIKKysKKytkaXJuYW1lPSJzLC9bXi9dKiQsLCIKKytiYXNlbmFtZT0icyxeLiovLCwiCisrCisrIyBXb3JrIGFyb3VuZCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGlzc3VlIG9uIElSSVggNi41LiBPbiBJUklYIDYuNCssIHNoCisrIyBpcyBrc2ggYnV0IHdoZW4gdGhlIHNoZWxsIGlzIGludm9rZWQgYXMgInNoIiBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgb2YKKysjIHRoZSBfWFBHIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBlcXVhbCB0byAxIChvbmUpLCB0aGUgc3BlY2lhbAorKyMgcG9zaXRpb25hbCBwYXJhbWV0ZXIgJDAsIHdpdGhpbiBhIGZ1bmN0aW9uIGNhbGwsIGlzIHRoZSBuYW1lIG9mIHRoZQorKyMgZnVuY3Rpb24uCisrcHJvZ3BhdGg9IiQwIgorKworKyMgVGhlIG5hbWUgb2YgdGhpcyBwcm9ncmFtOgorKyMgSW4gdGhlIHVubGlrZWx5IGV2ZW50ICRwcm9nbmFtZSBiZWdhbiB3aXRoIGEgJy0nLCBpdCB3b3VsZCBwbGF5IGhhdm9jIHdpdGgKKysjIGZ1bmNfZWNobyAoaW1hZ2luZSBwcm9nbmFtZT0tbiksIHNvIHdlIHByZXBlbmQgLi8gaW4gdGhhdCBjYXNlOgorK3Byb2duYW1lPWAkRUNITyAiWCRwcm9ncGF0aCIgfCAkWHNlZCAtZSAiJGJhc2VuYW1lIiAtZSAncyxeLSwuLy0sJ2AKKysKKysjIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGFic29sdXRlIHBhdGggZm9yIHJlZXhlY3V0aW9uOgorK2Nhc2UgJHByb2dwYXRoIGluCisrICBbXFwvXSp8W0EtWmEtel06XFwqKSA7OworKyAgKltcXC9dKikKKysgICAgIHByb2dkaXI9YCRFQ0hPICJYJHByb2dwYXRoIiB8ICRYc2VkIC1lICIkZGlybmFtZSJgCisrICAgICBwcm9nZGlyPWBjZCAiJHByb2dkaXIiICYmIHB3ZGAKKysgICAgIHByb2dwYXRoPSIkcHJvZ2Rpci8kcHJvZ25hbWUiCisrICAgICA7OworKyAgKikKKysgICAgIHNhdmVfSUZTPSIkSUZTIgorKyAgICAgSUZTPToKKysgICAgIGZvciBwcm9nZGlyIGluICRQQVRIOyBkbworKyAgICAgICBJRlM9IiRzYXZlX0lGUyIKKysgICAgICAgdGVzdCAteCAiJHByb2dkaXIvJHByb2duYW1lIiAmJiBicmVhaworKyAgICAgZG9uZQorKyAgICAgSUZTPSIkc2F2ZV9JRlMiCisrICAgICB0ZXN0IC1uICIkcHJvZ2RpciIgfHwgcHJvZ2Rpcj1gcHdkYAorKyAgICAgcHJvZ3BhdGg9IiRwcm9nZGlyLyRwcm9nbmFtZSIKKysgICAgIDs7CisrZXNhYworKworKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKKysjIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorK1hzZWQ9IiR7U0VEfSInIC1lIDFzL15YLy8nCisrc2VkX3F1b3RlX3N1YnN0PSdzL1woW2AiJFxcXVwpL1xcXDEvZycKKysKKysjIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KKytkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbImBcXF1cKS9cXFwxL2cnCisrCisrIyBSZS1gXCcgcGFyYW1ldGVyIGV4cGFuc2lvbnMgaW4gb3V0cHV0IG9mIGRvdWJsZV9xdW90ZV9zdWJzdCB0aGF0IHdlcmUKKysjIGBcJy1lZCBpbiBpbnB1dCB0byB0aGUgc2FtZS4gIElmIGFuIG9kZCBudW1iZXIgb2YgYFwnIHByZWNlZGVkIGEgJyQnCisrIyBpbiBpbnB1dCB0byBkb3VibGVfcXVvdGVfc3Vic3QsIHRoYXQgJyQnIHdhcyBwcm90ZWN0ZWQgZnJvbSBleHBhbnNpb24uCisrIyBTaW5jZSBlYWNoIGlucHV0IGBcJyBpcyBub3cgdHdvIGBcJ3MsIGxvb2sgZm9yIGFueSBudW1iZXIgb2YgcnVucyBvZgorKyMgZm91ciBgXCdzIGZvbGxvd2VkIGJ5IHR3byBgXCdzIGFuZCB0aGVuIGEgJyQnLiAgYFwnIHRoYXQgJyQnLgorK2JzPSdcXCcKKyticzI9J1xcXFwnCisrYnM0PSdcXFxcXFxcXCcKKytkb2xsYXI9J1wkJworK3NlZF9kb3VibGVfYmFja3NsYXNoPSJcCisrICBzLyRiczQvJlxcCisrL2cKKysgIHMvXiRiczIkZG9sbGFyLyRicyYvCisrICBzL1xcKFteJGJzXVxcKSRiczIkZG9sbGFyL1xcMSRiczIkYnMkZG9sbGFyL2cKKysgIHMvXG4vL2ciCisrCisrIyBTdGFuZGFyZCBvcHRpb25zOgorK29wdF9kcnlfcnVuPWZhbHNlCisrb3B0X2hlbHA9ZmFsc2UKKytvcHRfcXVpZXQ9ZmFsc2UKKytvcHRfdmVyYm9zZT1mYWxzZQorKworKyMgZnVuY19lY2hvIGFyZy4uLgorKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSwgYWxvbmcgd2l0aCB0aGUgY3VycmVudCBtb2RlCisrIyBuYW1lIGlmIGl0IGhhcyBiZWVuIHNldCB5ZXQuCisrZnVuY19lY2hvICgpCisreworKyAgICAkRUNITyAiJHByb2duYW1lJHttb2RlKzogfSRtb2RlOiAiJHsxKyIkQCJ9CisrfQorKworKyMgZnVuY192ZXJib3NlIGFyZy4uLgorKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSBpbiB2ZXJib3NlIG1vZGUgb25seS4KKytmdW5jX3ZlcmJvc2UgKCkKKyt7CisrICAgICRvcHRfdmVyYm9zZSAmJiBmdW5jX2VjaG8gJHsxKyIkQCJ9CisrCisrICAgICMgQSBidWcgaW4gYmFzaCBoYWx0cyB0aGUgc2NyaXB0IGlmIHRoZSBsYXN0IGxpbmUgb2YgYSBmdW5jdGlvbgorKyAgICAjIGZhaWxzIHdoZW4gc2V0IC1lIGlzIGluIGZvcmNlLCBzbyB3ZSBuZWVkIGFub3RoZXIgY29tbWFuZCB0bworKyAgICAjIHdvcmsgYXJvdW5kIHRoYXQ6CisrICAgIDoKKyt9CisrCisrIyBmdW5jX2Vycm9yIGFyZy4uLgorKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4KKytmdW5jX2Vycm9yICgpCisreworKyAgICAkRUNITyAiJHByb2duYW1lJHttb2RlKzogfSRtb2RlOiAiJHsxKyIkQCJ9IDE+JjIKKyt9CisrCisrIyBmdW5jX3dhcm5pbmcgYXJnLi4uCisrIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCB3YXJuaW5nIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCisrZnVuY193YXJuaW5nICgpCisreworKyAgICAkRUNITyAiJHByb2duYW1lJHttb2RlKzogfSRtb2RlOiB3YXJuaW5nOiAiJHsxKyIkQCJ9IDE+JjIKKyt9CisrCisrIyBmdW5jX2ZhdGFsX2Vycm9yIGFyZy4uLgorKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgYW5kIGV4aXQuCisrZnVuY19mYXRhbF9lcnJvciAoKQorK3sKKysgICAgZnVuY19lcnJvciAkezErIiRAIn0KKysgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisrfQorKworKyMgZnVuY19mYXRhbF9oZWxwIGFyZy4uLgorKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgZm9sbG93ZWQgYnkKKysjIGEgaGVscCBoaW50LCBhbmQgZXhpdC4KKytmdW5jX2ZhdGFsX2hlbHAgKCkKKyt7CisrICAgIGZ1bmNfZXJyb3IgJHsxKyIkQCJ9CisrICAgIGZ1bmNfZmF0YWxfZXJyb3IgIiRoZWxwIgorK30KKytoZWxwPSJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iICAjIyBkZWZhdWx0CisrCisrCisrIyBmdW5jX2dyZXAgZXhwcmVzc2lvbiBmaWxlbmFtZQorKyMgQ2hlY2sgd2hldGhlciBFWFBSRVNTSU9OIG1hdGNoZXMgYW55IGxpbmUgb2YgRklMRU5BTUUsIHdpdGhvdXQgb3V0cHV0LgorK2Z1bmNfZ3JlcCAoKQorK3sKKysgICAgJEdSRVAgIiQxIiAiJDIiID4vZGV2L251bGwgMj4mMQorK30KKysKKysKKysjIGZ1bmNfbWtkaXJfcCBkaXJlY3RvcnktcGF0aAorKyMgTWFrZSBzdXJlIHRoZSBlbnRpcmUgcGF0aCB0byBESVJFQ1RPUlktUEFUSCBpcyBhdmFpbGFibGUuCisrZnVuY19ta2Rpcl9wICgpCisreworKyAgICBteV9kaXJlY3RvcnlfcGF0aD0iJDEiCisrICAgIG15X2Rpcl9saXN0PQorKworKyAgICBpZiB0ZXN0IC1uICIkbXlfZGlyZWN0b3J5X3BhdGgiICYmIHRlc3QgIiRvcHRfZHJ5X3J1biIgIT0gIjoiOyB0aGVuCisrCisrICAgICAgIyBQcm90ZWN0IGRpcmVjdG9yeSBuYW1lcyBzdGFydGluZyB3aXRoIGAtJworKyAgICAgIGNhc2UgJG15X2RpcmVjdG9yeV9wYXRoIGluCisrICAgICAgICAtKikgbXlfZGlyZWN0b3J5X3BhdGg9Ii4vJG15X2RpcmVjdG9yeV9wYXRoIiA7OworKyAgICAgIGVzYWMKKysKKysgICAgICAjIFdoaWxlIHNvbWUgcG9ydGlvbiBvZiBESVIgZG9lcyBub3QgeWV0IGV4aXN0Li4uCisrICAgICAgd2hpbGUgdGVzdCAhIC1kICIkbXlfZGlyZWN0b3J5X3BhdGgiOyBkbworKyAgICAgICAgIyAuLi5tYWtlIGEgbGlzdCBpbiB0b3Btb3N0IGZpcnN0IG9yZGVyLiAgVXNlIGEgY29sb24gZGVsaW1pdGVkCisrCSMgbGlzdCBpbmNhc2Ugc29tZSBwb3J0aW9uIG9mIHBhdGggY29udGFpbnMgd2hpdGVzcGFjZS4KKysgICAgICAgIG15X2Rpcl9saXN0PSIkbXlfZGlyZWN0b3J5X3BhdGg6JG15X2Rpcl9saXN0IgorKworKyAgICAgICAgIyBJZiB0aGUgbGFzdCBwb3J0aW9uIGFkZGVkIGhhcyBubyBzbGFzaCBpbiBpdCwgdGhlIGxpc3QgaXMgZG9uZQorKyAgICAgICAgY2FzZSAkbXlfZGlyZWN0b3J5X3BhdGggaW4gKi8qKSA7OyAqKSBicmVhayA7OyBlc2FjCisrCisrICAgICAgICAjIC4uLm90aGVyd2lzZSB0aHJvdyBhd2F5IHRoZSBjaGlsZCBkaXJlY3RvcnkgYW5kIGxvb3AKKysgICAgICAgIG15X2RpcmVjdG9yeV9wYXRoPWAkRUNITyAiWCRteV9kaXJlY3RvcnlfcGF0aCIgfCAkWHNlZCAtZSAiJGRpcm5hbWUiYAorKyAgICAgIGRvbmUKKysgICAgICBteV9kaXJfbGlzdD1gJEVDSE8gIlgkbXlfZGlyX2xpc3QiIHwgJFhzZWQgLWUgJ3MsOiokLCwnYAorKworKyAgICAgIHNhdmVfbWtkaXJfcF9JRlM9IiRJRlMiOyBJRlM9JzonCisrICAgICAgZm9yIG15X2RpciBpbiAkbXlfZGlyX2xpc3Q7IGRvCisrCUlGUz0iJHNhdmVfbWtkaXJfcF9JRlMiCisrICAgICAgICAjIG1rZGlyIGNhbiBmYWlsIHdpdGggYSBgRmlsZSBleGlzdCcgZXJyb3IgaWYgdHdvIHByb2Nlc3NlcworKyAgICAgICAgIyB0cnkgdG8gY3JlYXRlIG9uZSBvZiB0aGUgZGlyZWN0b3JpZXMgY29uY3VycmVudGx5LiAgRG9uJ3QKKysgICAgICAgICMgc3RvcCBpbiB0aGF0IGNhc2UhCisrICAgICAgICAkTUtESVIgIiRteV9kaXIiIDI+L2Rldi9udWxsIHx8IDoKKysgICAgICBkb25lCisrICAgICAgSUZTPSIkc2F2ZV9ta2Rpcl9wX0lGUyIKKysKKysgICAgICAjIEJhaWwgb3V0IGlmIHdlIChvciBzb21lIG90aGVyIHByb2Nlc3MpIGZhaWxlZCB0byBjcmVhdGUgYSBkaXJlY3RvcnkuCisrICAgICAgdGVzdCAtZCAiJG15X2RpcmVjdG9yeV9wYXRoIiB8fCBcCisrICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJGYWlsZWQgdG8gY3JlYXRlIFxgJDEnIgorKyAgICBmaQorK30KKysKKysKKysjIGZ1bmNfbWt0ZW1wZGlyIFtzdHJpbmddCisrIyBNYWtlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGF0IHdvbid0IGNsYXNoIHdpdGggb3RoZXIgcnVubmluZworKyMgbGlidG9vbCBwcm9jZXNzZXMsIGFuZCBhdm9pZHMgcmFjZSBjb25kaXRpb25zIGlmIHBvc3NpYmxlLiAgSWYKKysjIGdpdmVuLCBTVFJJTkcgaXMgdGhlIGJhc2VuYW1lIGZvciB0aGF0IGRpcmVjdG9yeS4KKytmdW5jX21rdGVtcGRpciAoKQorK3sKKysgICAgbXlfdGVtcGxhdGU9IiR7VE1QRElSLS90bXB9LyR7MS0kcHJvZ25hbWV9IgorKworKyAgICBpZiB0ZXN0ICIkb3B0X2RyeV9ydW4iID0gIjoiOyB0aGVuCisrICAgICAgIyBSZXR1cm4gYSBkaXJlY3RvcnkgbmFtZSwgYnV0IGRvbid0IGNyZWF0ZSBpdCBpbiBkcnktcnVuIG1vZGUKKysgICAgICBteV90bXBkaXI9IiR7bXlfdGVtcGxhdGV9LSQkIgorKyAgICBlbHNlCisrCisrICAgICAgIyBJZiBta3RlbXAgd29ya3MsIHVzZSB0aGF0IGZpcnN0IGFuZCBmb3JlbW9zdAorKyAgICAgIG15X3RtcGRpcj1gbWt0ZW1wIC1kICIke215X3RlbXBsYXRlfS1YWFhYWFhYWCIgMj4vZGV2L251bGxgCisrCisrICAgICAgaWYgdGVzdCAhIC1kICIkbXlfdG1wZGlyIjsgdGhlbgorKyAgICAgICAgIyBGYWlsaW5nIHRoYXQsIGF0IGxlYXN0IHRyeSBhbmQgdXNlICRSQU5ET00gdG8gYXZvaWQgYSByYWNlCisrICAgICAgICBteV90bXBkaXI9IiR7bXlfdGVtcGxhdGV9LSR7UkFORE9NLTB9JCQiCisrCisrICAgICAgICBzYXZlX21rdGVtcGRpcl91bWFzaz1gdW1hc2tgCisrICAgICAgICB1bWFzayAwMDc3CisrICAgICAgICAkTUtESVIgIiRteV90bXBkaXIiCisrICAgICAgICB1bWFzayAkc2F2ZV9ta3RlbXBkaXJfdW1hc2sKKysgICAgICBmaQorKworKyAgICAgICMgSWYgd2UncmUgbm90IGluIGRyeS1ydW4gbW9kZSwgYm9tYiBvdXQgb24gZmFpbHVyZQorKyAgICAgIHRlc3QgLWQgIiRteV90bXBkaXIiIHx8IFwKKysgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBjcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBcYCRteV90bXBkaXInIgorKyAgICBmaQorKworKyAgICAkRUNITyAiWCRteV90bXBkaXIiIHwgJFhzZWQKKyt9CisrCisrCisrIyBmdW5jX3F1b3RlX2Zvcl9ldmFsIGFyZworKyMgQWVzdGhldGljYWxseSBxdW90ZSBBUkcgdG8gYmUgZXZhbGVkIGxhdGVyLgorKyMgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHR3byB2YWx1ZXM6IEZVTkNfUVVPVEVfRk9SX0VWQUxfUkVTVUxUCisrIyBpcyBkb3VibGUtcXVvdGVkLCBzdWl0YWJsZSBmb3IgYSBzdWJzZXF1ZW50IGV2YWwsIHdoZXJlYXMKKysjIEZVTkNfUVVPVEVfRk9SX0VWQUxfVU5RVU9URURfUkVTVUxUIGhhcyBtZXJlbHkgYWxsIGNoYXJhY3RlcnMKKysjIHdoaWNoIGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZSBxdW90ZXMgYmFja3NsYXNoaWZpZWQuCisrZnVuY19xdW90ZV9mb3JfZXZhbCAoKQorK3sKKysgICAgY2FzZSAkMSBpbgorKyAgICAgICpbXFxcYFwiXCRdKikKKysJZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQ9YCRFQ0hPICJYJDEiIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYCA7OworKyAgICAgICopCisrICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdD0iJDEiIDs7CisrICAgIGVzYWMKKysKKysgICAgY2FzZSAkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQgaW4KKysgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMgdG8gZGVsYXkKKysgICAgICAjIHdvcmQgc3BsaXR0aW5nLCBjb21tYW5kIHN1YnN0aXR1dGlvbiBhbmQgYW5kIHZhcmlhYmxlCisrICAgICAgIyBleHBhbnNpb24gZm9yIGEgc3Vic2VxdWVudCBldmFsLgorKyAgICAgICMgTWFueSBCb3VybmUgc2hlbGxzIGNhbm5vdCBoYW5kbGUgY2xvc2UgYnJhY2tldHMgY29ycmVjdGx5CisrICAgICAgIyBpbiBzY2FuIHNldHMsIHNvIHdlIHNwZWNpZnkgaXQgc2VwYXJhdGVseS4KKysgICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKKysgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0PSJcIiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdFwiIgorKyAgICAgICAgOzsKKysgICAgICAqKQorKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdCIKKysgICAgZXNhYworK30KKysKKysKKysjIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCBhcmcKKysjIEFlc3RoZXRpY2FsbHkgcXVvdGUgQVJHIHRvIGJlIGV2YWxlZCBsYXRlcjsgc2FtZSBhcyBhYm92ZSwKKysjIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KKytmdW5jX3F1b3RlX2Zvcl9leHBhbmQgKCkKKyt7CisrICAgIGNhc2UgJDEgaW4KKysgICAgICAqW1xcXGBcIl0qKQorKwlteV9hcmc9YCRFQ0hPICJYJDEiIHwgJFhzZWQgXAorKwkgICAgLWUgIiRkb3VibGVfcXVvdGVfc3Vic3QiIC1lICIkc2VkX2RvdWJsZV9iYWNrc2xhc2giYCA7OworKyAgICAgICopCisrICAgICAgICBteV9hcmc9IiQxIiA7OworKyAgICBlc2FjCisrCisrICAgIGNhc2UgJG15X2FyZyBpbgorKyAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVycyB0byBkZWxheQorKyAgICAgICMgd29yZCBzcGxpdHRpbmcgYW5kIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGZvciBhIHN1YnNlcXVlbnQgZXZhbC4KKysgICAgICAjIE1hbnkgQm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQorKyAgICAgICMgaW4gc2NhbiBzZXRzLCBzbyB3ZSBzcGVjaWZ5IGl0IHNlcGFyYXRlbHkuCisrICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisrICAgICAgICBteV9hcmc9IlwiJG15X2FyZ1wiIgorKyAgICAgICAgOzsKKysgICAgZXNhYworKworKyAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0PSIkbXlfYXJnIgorK30KKysKKysKKysjIGZ1bmNfc2hvd19ldmFsIGNtZCBbZmFpbF9leHBdCisrIyBVbmxlc3Mgb3B0X3NpbGVudCBpcyB0cnVlLCB0aGVuIG91dHB1dCBDTUQuICBUaGVuLCBpZiBvcHRfZHJ5cnVuIGlzCisrIyBub3QgdHJ1ZSwgZXZhbHVhdGUgQ01ELiAgSWYgdGhlIGV2YWx1YXRpb24gb2YgQ01EIGZhaWxzLCBhbmQgRkFJTF9FWFAKKysjIGlzIGdpdmVuLCB0aGVuIGV2YWx1YXRlIGl0LgorK2Z1bmNfc2hvd19ldmFsICgpCisreworKyAgICBteV9jbWQ9IiQxIgorKyAgICBteV9mYWlsX2V4cD0iJHsyLTp9IgorKworKyAgICAke29wdF9zaWxlbnQtZmFsc2V9IHx8IHsKKysgICAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRteV9jbWQiCisrICAgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorKyAgICB9CisrCisrICAgIGlmICR7b3B0X2RyeV9ydW4tZmFsc2V9OyB0aGVuIDo7IGVsc2UKKysgICAgICBldmFsICIkbXlfY21kIgorKyAgICAgIG15X3N0YXR1cz0kPworKyAgICAgIGlmIHRlc3QgIiRteV9zdGF0dXMiIC1lcSAwOyB0aGVuIDo7IGVsc2UKKysJZXZhbCAiKGV4aXQgJG15X3N0YXR1cyk7ICRteV9mYWlsX2V4cCIKKysgICAgICBmaQorKyAgICBmaQorK30KKysKKysKKysKKysKKysKKysjIGZ1bmNfdmVyc2lvbgorKyMgRWNobyB2ZXJzaW9uIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorK2Z1bmNfdmVyc2lvbiAoKQorK3sKKysgICAgJFNFRCAtbiAnL14jICckUFJPR1JBTScgKEdOVSAvLC8jIHdhcnJhbnR5OyAvIHsKKysgICAgICAgIHMvXiMgLy8KKysJcy9eIyAqJC8vCisrICAgICAgICBzL1woKEMpXClbIDAtOSwtXSpcKCBbMS05XVswLTldKlwpL1wxXDIvCisrICAgICAgICBwCisrICAgICB9JyA8ICIkcHJvZ3BhdGgiCisrICAgICBleGl0ICQ/CisrfQorKworKyMgZnVuY191c2FnZQorKyMgRWNobyBzaG9ydCBoZWxwIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorK2Z1bmNfdXNhZ2UgKCkKKyt7CisrICAgICRTRUQgLW4gJy9eIyBVc2FnZTovLC8jIC1oLyB7CisrICAgICAgICBzL14jIC8vCisrCXMvXiMgKiQvLworKwlzL1wkcHJvZ25hbWUvJyRwcm9nbmFtZScvCisrCXAKKysgICAgfScgPCAiJHByb2dwYXRoIgorKyAgICAkRUNITworKyAgICAkRUNITyAicnVuIFxgJHByb2duYW1lIC0taGVscCB8IG1vcmUnIGZvciBmdWxsIHVzYWdlIgorKyAgICBleGl0ICQ/CisrfQorKworKyMgZnVuY19oZWxwCisrIyBFY2hvIGxvbmcgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KKytmdW5jX2hlbHAgKCkKKyt7CisrICAgICRTRUQgLW4gJy9eIyBVc2FnZTovLC8jIFJlcG9ydCBidWdzIHRvLyB7CisrICAgICAgICBzL14jIC8vCisrCXMvXiMgKiQvLworKwlzKlwkcHJvZ25hbWUqJyRwcm9nbmFtZScqCisrCXMqXCRob3N0KiciJGhvc3QiJyoKKysJcypcJFNIRUxMKiciJFNIRUxMIicqCisrCXMqXCRMVENDKiciJExUQ0MiJyoKKysJcypcJExUQ0ZMQUdTKiciJExUQ0ZMQUdTIicqCisrCXMqXCRMRConIiRMRCInKgorKwlzL1wkd2l0aF9nbnVfbGQvJyIkd2l0aF9nbnVfbGQiJy8KKysJcy9cJGF1dG9tYWtlX3ZlcnNpb24vJyJgKGF1dG9tYWtlIC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCRTRUQgMXFgIicvCisrCXMvXCRhdXRvY29uZl92ZXJzaW9uLyciYChhdXRvY29uZiAtLXZlcnNpb24pIDI+L2Rldi9udWxsIHwkU0VEIDFxYCInLworKwlwCisrICAgICB9JyA8ICIkcHJvZ3BhdGgiCisrICAgIGV4aXQgJD8KKyt9CisrCisrIyBmdW5jX21pc3NpbmdfYXJnIGFyZ25hbWUKKysjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IgYW5kIHNldCBnbG9iYWwKKysjIGV4aXRfY21kLgorK2Z1bmNfbWlzc2luZ19hcmcgKCkKKyt7CisrICAgIGZ1bmNfZXJyb3IgIm1pc3NpbmcgYXJndW1lbnQgZm9yICQxIgorKyAgICBleGl0X2NtZD1leGl0CisrfQorKworK2V4aXRfY21kPToKKysKKysKKysKKysKKysKKysjIENoZWNrIHRoYXQgd2UgaGF2ZSBhIHdvcmtpbmcgJEVDSE8uCisraWYgdGVzdCAiWCQxIiA9IFgtLW5vLXJlZXhlYzsgdGhlbgorKyAgIyBEaXNjYXJkIHRoZSAtLW5vLXJlZXhlYyBmbGFnLCBhbmQgY29udGludWUuCisrICBzaGlmdAorK2VsaWYgdGVzdCAiWCQxIiA9IFgtLWZhbGxiYWNrLWVjaG87IHRoZW4KKysgICMgQXZvaWQgaW5saW5lIGRvY3VtZW50IGhlcmUsIGl0IG1heSBiZSBsZWZ0IG92ZXIKKysgIDoKKytlbGlmIHRlc3QgIlhgeyAkRUNITyAnXHQnOyB9IDI+L2Rldi9udWxsYCIgPSAnWFx0JzsgdGhlbgorKyAgIyBZaXBwZWUsICRFQ0hPIHdvcmtzIQorKyAgOgorK2Vsc2UKKysgICMgUmVzdGFydCB1bmRlciB0aGUgY29ycmVjdCBzaGVsbCwgYW5kIHRoZW4gbWF5YmUgJEVDSE8gd2lsbCB3b3JrLgorKyAgZXhlYyAkU0hFTEwgIiRwcm9ncGF0aCIgLS1uby1yZWV4ZWMgJHsxKyIkQCJ9CisrZmkKKysKKytpZiB0ZXN0ICJYJDEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgorKyAgIyB1c2VkIGFzIGZhbGxiYWNrIGVjaG8KKysgIHNoaWZ0CisrICBjYXQgPDxFT0YKKyskKgorK0VPRgorKyAgZXhpdCAkRVhJVF9TVUNDRVNTCisrZmkKKysKKyttYWdpYz0iJSUlTUFHSUMgdmFyaWFibGUlJSUiCisrCisrCisrIyBHbG9iYWwgdmFyaWFibGVzLgorKyMgJG1vZGUgaXMgdW5zZXQKKytub25vcHQ9CisrZXhlY3V0ZV9kbGZpbGVzPQorK3ByZXNlcnZlX2FyZ3M9CisrbG8ybz0icy9cXC5sb1wkLy4ke29iamV4dH0vIgorK28ybG89InMvXFwuJHtvYmpleHR9XCQvLmxvLyIKKytleHRyYWN0ZWRfYXJjaGl2ZXM9CisrZXh0cmFjdGVkX3NlcmlhbD0wCisrCisrb3B0X2RyeV9ydW49ZmFsc2UKKytvcHRfZHVwbGljYXRlX2RlcHM9ZmFsc2UKKytvcHRfc2lsZW50PWZhbHNlCisrb3B0X2RlYnVnPToKKysKKysjIElmIHRoaXMgdmFyaWFibGUgaXMgc2V0IGluIGFueSBvZiB0aGUgYWN0aW9ucywgdGhlIGNvbW1hbmQgaW4gaXQKKysjIHdpbGwgYmUgZXhlY2VkIGF0IHRoZSBlbmQuICBUaGlzIHByZXZlbnRzIGhlcmUtZG9jdW1lbnRzIGZyb20gYmVpbmcKKysjIGxlZnQgb3ZlciBieSBzaGVsbHMuCisrZXhlY19jbWQ9CisrCisrIyBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gYXJnLi4uCisrIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBmb2xsb3dlZCBieQorKyMgYSBjb25maWd1cmF0aW9uIGZhaWx1cmUgaGludCwgYW5kIGV4aXQuCisrZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICgpCisreworKyAgICBmdW5jX2Vycm9yICR7MSsiJEAifQorKyAgICBmdW5jX2Vycm9yICJTZWUgdGhlICRQQUNLQUdFIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorKyAgICBmdW5jX2ZhdGFsX2Vycm9yICJGYXRhbCBjb25maWd1cmF0aW9uIGVycm9yLiIKKyt9CisrCisrCisrIyBmdW5jX2NvbmZpZworKyMgRGlzcGxheSB0aGUgY29uZmlndXJhdGlvbiBmb3IgYWxsIHRoZSB0YWdzIGluIHRoaXMgc2NyaXB0LgorK2Z1bmNfY29uZmlnICgpCisreworKyAgICByZV9iZWdpbmNmPSdeIyAjIyMgQkVHSU4gTElCVE9PTCcKKysgICAgcmVfZW5kY2Y9J14jICMjIyBFTkQgTElCVE9PTCcKKysKKysgICAgIyBEZWZhdWx0IGNvbmZpZ3VyYXRpb24uCisrICAgICRTRUQgIjEsLyRyZV9iZWdpbmNmIENPTkZJRy9kOy8kcmVfZW5kY2YgQ09ORklHLyxcJGQiIDwgIiRwcm9ncGF0aCIKKysKKysgICAgIyBOb3cgcHJpbnQgdGhlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgdGFncy4KKysgICAgZm9yIHRhZ25hbWUgaW4gJHRhZ2xpc3Q7IGRvCisrICAgICAgJFNFRCAtbiAiLyRyZV9iZWdpbmNmIFRBRyBDT05GSUc6ICR0YWduYW1lXCQvLC8kcmVfZW5kY2YgVEFHIENPTkZJRzogJHRhZ25hbWVcJC9wIiA8ICIkcHJvZ3BhdGgiCisrICAgIGRvbmUKKysKKysgICAgZXhpdCAkPworK30KKysKKysjIGZ1bmNfZmVhdHVyZXMKKysjIERpc3BsYXkgdGhlIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KKytmdW5jX2ZlYXR1cmVzICgpCisreworKyAgICAkRUNITyAiaG9zdDogJGhvc3QiCisrICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisrICAgICAgJEVDSE8gImVuYWJsZSBzaGFyZWQgbGlicmFyaWVzIgorKyAgICBlbHNlCisrICAgICAgJEVDSE8gImRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyIKKysgICAgZmkKKysgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorKyAgICAgICRFQ0hPICJlbmFibGUgc3RhdGljIGxpYnJhcmllcyIKKysgICAgZWxzZQorKyAgICAgICRFQ0hPICJkaXNhYmxlIHN0YXRpYyBsaWJyYXJpZXMiCisrICAgIGZpCisrCisrICAgIGV4aXQgJD8KKyt9CisrCisrIyBmdW5jX2VuYWJsZV90YWcgdGFnbmFtZQorKyMgVmVyaWZ5IHRoYXQgVEFHTkFNRSBpcyB2YWxpZCwgYW5kIGVpdGhlciBmbGFnIGFuIGVycm9yIGFuZCBleGl0LCBvcgorKyMgZW5hYmxlIHRoZSBUQUdOQU1FIHRhZy4gIFdlIGFsc28gYWRkIFRBR05BTUUgdG8gdGhlIGdsb2JhbCAkdGFnbGlzdAorKyMgdmFyaWFibGUgaGVyZS4KKytmdW5jX2VuYWJsZV90YWcgKCkKKyt7CisrICAjIEdsb2JhbCB2YXJpYWJsZToKKysgIHRhZ25hbWU9IiQxIgorKworKyAgcmVfYmVnaW5jZj0iXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVcJCIKKysgIHJlX2VuZGNmPSJeIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVcJCIKKysgIHNlZF9leHRyYWN0Y2Y9Ii8kcmVfYmVnaW5jZi8sLyRyZV9lbmRjZi9wIgorKworKyAgIyBWYWxpZGF0ZSB0YWduYW1lLgorKyAgY2FzZSAkdGFnbmFtZSBpbgorKyAgICAqWyEtX0EtWmEtejAtOSwvXSopCisrICAgICAgZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWUiCisrICAgICAgOzsKKysgIGVzYWMKKysKKysgICMgRG9uJ3QgdGVzdCBmb3IgdGhlICJkZWZhdWx0IiBDIHRhZywgYXMgd2Uga25vdyBpdCdzCisrICAjIHRoZXJlIGJ1dCBub3Qgc3BlY2lhbGx5IG1hcmtlZC4KKysgIGNhc2UgJHRhZ25hbWUgaW4KKysgICAgQ0MpIDs7CisrICAgICopCisrICAgICAgaWYgJEdSRVAgIiRyZV9iZWdpbmNmIiAiJHByb2dwYXRoIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysJdGFnbGlzdD0iJHRhZ2xpc3QgJHRhZ25hbWUiCisrCisrCSMgRXZhbHVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uICBCZSBjYXJlZnVsIHRvIHF1b3RlIHRoZSBwYXRoCisrCSMgYW5kIHRoZSBzZWQgc2NyaXB0LCB0byBhdm9pZCBzcGxpdHRpbmcgb24gd2hpdGVzcGFjZSwgYnV0CisrCSMgYWxzbyBkb24ndCB1c2Ugbm9uLXBvcnRhYmxlIHF1b3RlcyB3aXRoaW4gYmFja3F1b3RlcyB3aXRoaW4KKysJIyBxdW90ZXMgd2UgaGF2ZSB0byBkbyBpdCBpbiAyIHN0ZXBzOgorKwlleHRyYWN0ZWRjZj1gJFNFRCAtbiAtZSAiJHNlZF9leHRyYWN0Y2YiIDwgIiRwcm9ncGF0aCJgCisrCWV2YWwgIiRleHRyYWN0ZWRjZiIKKysgICAgICBlbHNlCisrCWZ1bmNfZXJyb3IgImlnbm9yaW5nIHVua25vd24gdGFnICR0YWduYW1lIgorKyAgICAgIGZpCisrICAgICAgOzsKKysgIGVzYWMKKyt9CisrCisrCisrZnVuY19tb2RlX2hlbHAgKCkKKyt7CisrICAgICMgV2UgbmVlZCB0byBkaXNwbGF5IGhlbHAgZm9yIGVhY2ggb2YgdGhlIG1vZGVzLgorKyAgICBjYXNlICRtb2RlIGluCisrICAgICAgIiIpCisrICAgICAgICAjIEdlbmVyaWMgaGVscCBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgdXNhZ2UgY29tbWVudHMKKysgICAgICAgICMgYXQgdGhlIHN0YXJ0IG9mIHRoaXMgZmlsZS4KKysgICAgICAgIGZ1bmNfaGVscAorKyAgICAgICAgOzsKKysKKysgICAgICBjbGVhbikKKysgICAgICAgICRFQ0hPIFwKKysiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9Y2xlYW4gUk0gW1JNLU9QVElPTl0uLi4gRklMRS4uLgorKworK1JlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCisrCisrUk0gaXMgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gdG8gdXNlIHRvIGRlbGV0ZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBGSUxFCisrKHR5cGljYWxseSBcYC9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgXGAtZicpIHRvIGJlIHBhc3NlZAorK3RvIFJNLgorKworK0lmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIG9iamVjdCBvciBwcm9ncmFtLCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQKKyt3aXRoIGl0IGFyZSBkZWxldGVkLiBPdGhlcndpc2UsIG9ubHkgRklMRSBpdHNlbGYgaXMgZGVsZXRlZCB1c2luZyBSTS4iCisrICAgICAgICA7OworKworKyAgICAgIGNvbXBpbGUpCisrICAgICAgJEVDSE8gXAorKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1jb21waWxlIENPTVBJTEUtQ09NTUFORC4uLiBTT1VSQ0VGSUxFCisrCisrQ29tcGlsZSBhIHNvdXJjZSBmaWxlIGludG8gYSBsaWJ0b29sIGxpYnJhcnkgb2JqZWN0LgorKworK1RoaXMgbW9kZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBvcHRpb25zOgorKworKyAgLW8gT1VUUFVULUZJTEUgICAgc2V0IHRoZSBvdXRwdXQgZmlsZSBuYW1lIHRvIE9VVFBVVC1GSUxFCisrICAtbm8tc3VwcHJlc3MgICAgICBkbyBub3Qgc3VwcHJlc3MgY29tcGlsZXIgb3V0cHV0IGZvciBtdWx0aXBsZSBwYXNzZXMKKysgIC1wcmVmZXItcGljICAgICAgIHRyeSB0byBidWlsZGluZyBQSUMgb2JqZWN0cyBvbmx5CisrICAtcHJlZmVyLW5vbi1waWMgICB0cnkgdG8gYnVpbGRpbmcgbm9uLVBJQyBvYmplY3RzIG9ubHkKKysgIC1zaGFyZWQgICAgICAgICAgIGRvIG5vdCBidWlsZCBhIFxgLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCisrICAtc3RhdGljICAgICAgICAgICBvbmx5IGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKysKKytDT01QSUxFLUNPTU1BTkQgaXMgYSBjb21tYW5kIHRvIGJlIHVzZWQgaW4gY3JlYXRpbmcgYSBcYHN0YW5kYXJkJyBvYmplY3QgZmlsZQorK2Zyb20gdGhlIGdpdmVuIFNPVVJDRUZJTEUuCisrCisrVGhlIG91dHB1dCBmaWxlIG5hbWUgaXMgZGV0ZXJtaW5lZCBieSByZW1vdmluZyB0aGUgZGlyZWN0b3J5IGNvbXBvbmVudCBmcm9tCisrU09VUkNFRklMRSwgdGhlbiBzdWJzdGl0dXRpbmcgdGhlIEMgc291cmNlIGNvZGUgc3VmZml4IFxgLmMnIHdpdGggdGhlCisrbGlicmFyeSBvYmplY3Qgc3VmZml4LCBcYC5sbycuIgorKyAgICAgICAgOzsKKysKKysgICAgICBleGVjdXRlKQorKyAgICAgICAgJEVDSE8gXAorKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1leGVjdXRlIENPTU1BTkQgW0FSR1NdLi4uCisrCisrQXV0b21hdGljYWxseSBzZXQgbGlicmFyeSBwYXRoLCB0aGVuIHJ1biBhIHByb2dyYW0uCisrCisrVGhpcyBtb2RlIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnM6CisrCisrICAtZGxvcGVuIEZJTEUgICAgICBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIEZJTEUgdG8gdGhlIGxpYnJhcnkgcGF0aAorKworK1RoaXMgbW9kZSBzZXRzIHRoZSBsaWJyYXJ5IHBhdGggZW52aXJvbm1lbnQgdmFyaWFibGUgYWNjb3JkaW5nIHRvIFxgLWRsb3BlbicKKytmbGFncy4KKysKKytJZiBhbnkgb2YgdGhlIEFSR1MgYXJlIGxpYnRvb2wgZXhlY3V0YWJsZSB3cmFwcGVycywgdGhlbiB0aGV5IGFyZSB0cmFuc2xhdGVkCisraW50byB0aGVpciBjb3JyZXNwb25kaW5nIHVuaW5zdGFsbGVkIGJpbmFyeSwgYW5kIGFueSBvZiB0aGVpciByZXF1aXJlZCBsaWJyYXJ5CisrZGlyZWN0b3JpZXMgYXJlIGFkZGVkIHRvIHRoZSBsaWJyYXJ5IHBhdGguCisrCisrVGhlbiwgQ09NTUFORCBpcyBleGVjdXRlZCwgd2l0aCBBUkdTIGFzIGFyZ3VtZW50cy4iCisrICAgICAgICA7OworKworKyAgICAgIGZpbmlzaCkKKysgICAgICAgICRFQ0hPIFwKKysiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9ZmluaXNoIFtMSUJESVJdLi4uCisrCisrQ29tcGxldGUgdGhlIGluc3RhbGxhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcy4KKysKKytFYWNoIExJQkRJUiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGxpYnRvb2wgbGlicmFyaWVzLgorKworK1RoZSBjb21tYW5kcyB0aGF0IHRoaXMgbW9kZSBleGVjdXRlcyBtYXkgcmVxdWlyZSBzdXBlcnVzZXIgcHJpdmlsZWdlcy4gIFVzZQorK3RoZSBcYC0tZHJ5LXJ1bicgb3B0aW9uIGlmIHlvdSBqdXN0IHdhbnQgdG8gc2VlIHdoYXQgd291bGQgYmUgZXhlY3V0ZWQuIgorKyAgICAgICAgOzsKKysKKysgICAgICBpbnN0YWxsKQorKyAgICAgICAgJEVDSE8gXAorKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1pbnN0YWxsIElOU1RBTEwtQ09NTUFORC4uLgorKworK0luc3RhbGwgZXhlY3V0YWJsZXMgb3IgbGlicmFyaWVzLgorKworK0lOU1RBTEwtQ09NTUFORCBpcyB0aGUgaW5zdGFsbGF0aW9uIGNvbW1hbmQuICBUaGUgZmlyc3QgY29tcG9uZW50IHNob3VsZCBiZQorK2VpdGhlciB0aGUgXGBpbnN0YWxsJyBvciBcYGNwJyBwcm9ncmFtLgorKworK1RoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBvZiBJTlNUQUxMLUNPTU1BTkQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5OgorKworKyAgLWluc3QtcHJlZml4IFBSRUZJWC1ESVIgIFVzZSBQUkVGSVgtRElSIGFzIGEgc3RhZ2luZyBhcmVhIGZvciBpbnN0YWxsYXRpb24KKysKKytUaGUgcmVzdCBvZiB0aGUgY29tcG9uZW50cyBhcmUgaW50ZXJwcmV0ZWQgYXMgYXJndW1lbnRzIHRvIHRoYXQgY29tbWFuZCAob25seQorK0JTRC1jb21wYXRpYmxlIGluc3RhbGwgb3B0aW9ucyBhcmUgcmVjb2duaXplZCkuIgorKyAgICAgICAgOzsKKysKKysgICAgICBsaW5rKQorKyAgICAgICAgJEVDSE8gXAorKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1saW5rIExJTkstQ09NTUFORC4uLgorKworK0xpbmsgb2JqZWN0IGZpbGVzIG9yIGxpYnJhcmllcyB0b2dldGhlciB0byBmb3JtIGFub3RoZXIgbGlicmFyeSwgb3IgdG8KKytjcmVhdGUgYW4gZXhlY3V0YWJsZSBwcm9ncmFtLgorKworK0xJTkstQ09NTUFORCBpcyBhIGNvbW1hbmQgdXNpbmcgdGhlIEMgY29tcGlsZXIgdGhhdCB5b3Ugd291bGQgdXNlIHRvIGNyZWF0ZQorK2EgcHJvZ3JhbSBmcm9tIHNldmVyYWwgb2JqZWN0IGZpbGVzLgorKworK1RoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBvZiBMSU5LLUNPTU1BTkQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5OgorKworKyAgLWFsbC1zdGF0aWMgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgYXQgYWxsCisrICAtYXZvaWQtdmVyc2lvbiAgICBkbyBub3QgYWRkIGEgdmVyc2lvbiBzdWZmaXggaWYgcG9zc2libGUKKysgIC1kbG9wZW4gRklMRSAgICAgIFxgLWRscHJlb3BlbicgRklMRSBpZiBpdCBjYW5ub3QgYmUgZGxvcGVuZWQgYXQgcnVudGltZQorKyAgLWRscHJlb3BlbiBGSUxFICAgbGluayBpbiBGSUxFIGFuZCBhZGQgaXRzIHN5bWJvbHMgdG8gbHRfcHJlbG9hZGVkX3N5bWJvbHMKKysgIC1leHBvcnQtZHluYW1pYyAgIGFsbG93IHN5bWJvbHMgZnJvbSBPVVRQVVQtRklMRSB0byBiZSByZXNvbHZlZCB3aXRoIGRsc3ltKDMpCisrICAtZXhwb3J0LXN5bWJvbHMgU1lNRklMRQorKyAgICAgICAgICAgICAgICAgICAgdHJ5IHRvIGV4cG9ydCBvbmx5IHRoZSBzeW1ib2xzIGxpc3RlZCBpbiBTWU1GSUxFCisrICAtZXhwb3J0LXN5bWJvbHMtcmVnZXggUkVHRVgKKysgICAgICAgICAgICAgICAgICAgIHRyeSB0byBleHBvcnQgb25seSB0aGUgc3ltYm9scyBtYXRjaGluZyBSRUdFWAorKyAgLUxMSUJESVIgICAgICAgICAgc2VhcmNoIExJQkRJUiBmb3IgcmVxdWlyZWQgaW5zdGFsbGVkIGxpYnJhcmllcworKyAgLWxOQU1FICAgICAgICAgICAgT1VUUFVULUZJTEUgcmVxdWlyZXMgdGhlIGluc3RhbGxlZCBsaWJyYXJ5IGxpYk5BTUUKKysgIC1tb2R1bGUgICAgICAgICAgIGJ1aWxkIGEgbGlicmFyeSB0aGF0IGNhbiBkbG9wZW5lZAorKyAgLW5vLWZhc3QtaW5zdGFsbCAgZGlzYWJsZSB0aGUgZmFzdC1pbnN0YWxsIG1vZGUKKysgIC1uby1pbnN0YWxsICAgICAgIGxpbmsgYSBub3QtaW5zdGFsbGFibGUgZXhlY3V0YWJsZQorKyAgLW5vLXVuZGVmaW5lZCAgICAgZGVjbGFyZSB0aGF0IGEgbGlicmFyeSBkb2VzIG5vdCByZWZlciB0byBleHRlcm5hbCBzeW1ib2xzCisrICAtbyBPVVRQVVQtRklMRSAgICBjcmVhdGUgT1VUUFVULUZJTEUgZnJvbSB0aGUgc3BlY2lmaWVkIG9iamVjdHMKKysgIC1vYmplY3RsaXN0IEZJTEUgIFVzZSBhIGxpc3Qgb2Ygb2JqZWN0IGZpbGVzIGZvdW5kIGluIEZJTEUgdG8gc3BlY2lmeSBvYmplY3RzCisrICAtcHJlY2lvdXMtZmlsZXMtcmVnZXggUkVHRVgKKysgICAgICAgICAgICAgICAgICAgIGRvbid0IHJlbW92ZSBvdXRwdXQgZmlsZXMgbWF0Y2hpbmcgUkVHRVgKKysgIC1yZWxlYXNlIFJFTEVBU0UgIHNwZWNpZnkgcGFja2FnZSByZWxlYXNlIGluZm9ybWF0aW9uCisrICAtcnBhdGggTElCRElSICAgICB0aGUgY3JlYXRlZCBsaWJyYXJ5IHdpbGwgZXZlbnR1YWxseSBiZSBpbnN0YWxsZWQgaW4gTElCRElSCisrICAtUlsgXUxJQkRJUiAgICAgICBhZGQgTElCRElSIHRvIHRoZSBydW50aW1lIHBhdGggb2YgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcworKyAgLXNoYXJlZCAgICAgICAgICAgb25seSBkbyBkeW5hbWljIGxpbmtpbmcgb2YgbGlidG9vbCBsaWJyYXJpZXMKKysgIC1zaHJleHQgU1VGRklYICAgIG92ZXJyaWRlIHRoZSBzdGFuZGFyZCBzaGFyZWQgbGlicmFyeSBmaWxlIGV4dGVuc2lvbgorKyAgLXN0YXRpYyAgICAgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgb2YgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKysgIC1zdGF0aWMtbGlidG9vbC1saWJzCisrICAgICAgICAgICAgICAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBvZiBsaWJ0b29sIGxpYnJhcmllcworKyAgLXZlcnNpb24taW5mbyBDVVJSRU5UWzpSRVZJU0lPTls6QUdFXV0KKysgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgbGlicmFyeSB2ZXJzaW9uIGluZm8gW2VhY2ggdmFyaWFibGUgZGVmYXVsdHMgdG8gMF0KKysgIC13ZWFrIExJQk5BTUUgICAgIGRlY2xhcmUgdGhhdCB0aGUgdGFyZ2V0IHByb3ZpZGVzIHRoZSBMSUJOQU1FIGludGVyZmFjZQorKworK0FsbCBvdGhlciBvcHRpb25zIChhcmd1bWVudHMgYmVnaW5uaW5nIHdpdGggXGAtJykgYXJlIGlnbm9yZWQuCisrCisrRXZlcnkgb3RoZXIgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZpbGVuYW1lLiAgRmlsZXMgZW5kaW5nIGluIFxgLmxhJyBhcmUKKyt0cmVhdGVkIGFzIHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzLCBvdGhlciBmaWxlcyBhcmUgc3RhbmRhcmQgb3IgbGlicmFyeQorK29iamVjdCBmaWxlcy4KKysKKytJZiB0aGUgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5sYScsIHRoZW4gYSBsaWJ0b29sIGxpYnJhcnkgaXMgY3JlYXRlZCwKKytvbmx5IGxpYnJhcnkgb2JqZWN0cyAoXGAubG8nIGZpbGVzKSBtYXkgYmUgc3BlY2lmaWVkLCBhbmQgXGAtcnBhdGgnIGlzCisrcmVxdWlyZWQsIGV4Y2VwdCB3aGVuIGNyZWF0aW5nIGEgY29udmVuaWVuY2UgbGlicmFyeS4KKysKKytJZiBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmEnIG9yIFxgLmxpYicsIHRoZW4gYSBzdGFuZGFyZCBsaWJyYXJ5IGlzIGNyZWF0ZWQKKyt1c2luZyBcYGFyJyBhbmQgXGByYW5saWInLCBvciBvbiBXaW5kb3dzIHVzaW5nIFxgbGliJy4KKysKKytJZiBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmxvJyBvciBcYC4ke29iamV4dH0nLCB0aGVuIGEgcmVsb2FkYWJsZSBvYmplY3QgZmlsZQorK2lzIGNyZWF0ZWQsIG90aGVyd2lzZSBhbiBleGVjdXRhYmxlIHByb2dyYW0gaXMgY3JlYXRlZC4iCisrICAgICAgICA7OworKworKyAgICAgIHVuaW5zdGFsbCkKKysgICAgICAgICRFQ0hPIFwKKysiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9dW5pbnN0YWxsIFJNIFtSTS1PUFRJT05dLi4uIEZJTEUuLi4KKysKKytSZW1vdmUgbGlicmFyaWVzIGZyb20gYW4gaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KKysKKytSTSBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSB0byB1c2UgdG8gZGVsZXRlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIEZJTEUKKysodHlwaWNhbGx5IFxgL2Jpbi9ybScpLiAgUk0tT1BUSU9OUyBhcmUgb3B0aW9ucyAoc3VjaCBhcyBcYC1mJykgdG8gYmUgcGFzc2VkCisrdG8gUk0uCisrCisrSWYgRklMRSBpcyBhIGxpYnRvb2wgbGlicmFyeSwgYWxsIHRoZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggaXQgYXJlIGRlbGV0ZWQuCisrT3RoZXJ3aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0ZWQgdXNpbmcgUk0uIgorKyAgICAgICAgOzsKKysKKysgICAgICAqKQorKyAgICAgICAgZnVuY19mYXRhbF9oZWxwICJpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG1vZGUnIgorKyAgICAgICAgOzsKKysgICAgZXNhYworKworKyAgICAkRUNITworKyAgICAkRUNITyAiVHJ5IFxgJHByb2duYW1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgb3RoZXIgbW9kZXMuIgorKworKyAgICBleGl0ICQ/CisrfQorKworKyMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLgorKworKyMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorKyMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKysjIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKytmdW5jX2Rpcm5hbWUgKCkKKyt7CisrICBjYXNlICR7MX0gaW4KKysgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKysgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworKyAgZXNhYworK30KKysKKysjIGZ1bmNfYmFzZW5hbWUgZmlsZQorK2Z1bmNfYmFzZW5hbWUgKCkKKyt7CisrICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCisrfQorKworKyMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKysjIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCisrIyBjYWxsOgorKyMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCisrIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CisrIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCisrIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisrIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCisrIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisrIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCisrIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworKyMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKKyt7CisrICBjYXNlICR7MX0gaW4KKysgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKysgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworKyAgZXNhYworKyAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorK30KKysKKysjIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorKyMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCisrIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKysjIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKysjIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCisrZnVuY19zdHJpcG5hbWUgKCkKKyt7CisrICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCisrICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCisrICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorKyAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKysgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9CisrfQorKworKyMgZnVuY19vcHRfc3BsaXQKKytmdW5jX29wdF9zcGxpdCAoKQorK3sKKysgIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorKyAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KKyt9CisrCisrIyBmdW5jX2xvMm8gb2JqZWN0CisrZnVuY19sbzJvICgpCisreworKyAgY2FzZSAkezF9IGluCisrICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7CisrICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworKyAgZXNhYworK30KKysKKysjIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorK2Z1bmNfeGZvcm0gKCkKKyt7CisrICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCisrfQorKworKyMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKytmdW5jX2FyaXRoICgpCisreworKyAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpCisrfQorKworKyMgZnVuY19sZW4gc3RyaW5nCisrIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorK2Z1bmNfbGVuICgpCisreworKyAgZnVuY19sZW5fcmVzdWx0PSR7IzF9CisrfQorKworKworKyMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCisrIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCisrZnVuY19hcHBlbmQgKCkKKyt7CisrICBldmFsICIkMSs9XCQyIgorK30KKysjIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS4KKysKKysKKysjIFBhcnNlIG9wdGlvbnMgb25jZSwgdGhvcm91Z2hseS4gIFRoaXMgY29tZXMgYXMgc29vbiBhcyBwb3NzaWJsZSBpbgorKyMgdGhlIHNjcmlwdCB0byBtYWtlIHRoaW5ncyBsaWtlIGBsaWJ0b29sIC0tdmVyc2lvbicgaGFwcGVuIHF1aWNrbHkuCisreworKworKyAgIyBTaG9ydGhhbmQgZm9yIC0tbW9kZT1mb28sIG9ubHkgdmFsaWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50CisrICBjYXNlICQxIGluCisrICBjbGVhbnxjbGVhfGNsZXxjbCkKKysgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY2xlYW4gJHsxKyIkQCJ9OyBzaGlmdAorKyAgICA7OworKyAgY29tcGlsZXxjb21waWx8Y29tcGl8Y29tcHxjb218Y298YykKKysgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY29tcGlsZSAkezErIiRAIn07IHNoaWZ0CisrICAgIDs7CisrICBleGVjdXRlfGV4ZWN1dHxleGVjdXxleGVjfGV4ZXxleHxlKQorKyAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBleGVjdXRlICR7MSsiJEAifTsgc2hpZnQKKysgICAgOzsKKysgIGZpbmlzaHxmaW5pc3xmaW5pfGZpbnxmaXxmKQorKyAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdAorKyAgICA7OworKyAgaW5zdGFsbHxpbnN0YWx8aW5zdGF8aW5zdHxpbnN8aW58aSkKKysgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CisrICAgIDs7CisrICBsaW5rfGxpbnxsaXxsKQorKyAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBsaW5rICR7MSsiJEAifTsgc2hpZnQKKysgICAgOzsKKysgIHVuaW5zdGFsbHx1bmluc3RhbHx1bmluc3RhfHVuaW5zdHx1bmluc3x1bmlufHVuaXx1bnx1KQorKyAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSB1bmluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorKyAgICA7OworKyAgZXNhYworKworKyAgIyBQYXJzZSBub24tbW9kZSBzcGVjaWZpYyBhcmd1bWVudHM6CisrICB3aGlsZSB0ZXN0ICIkIyIgLWd0IDA7IGRvCisrICAgIG9wdD0iJDEiCisrICAgIHNoaWZ0CisrCisrICAgIGNhc2UgJG9wdCBpbgorKyAgICAgIC0tY29uZmlnKQkJZnVuY19jb25maWcgCQkJCQk7OworKworKyAgICAgIC0tZGVidWcpCQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0IgorKwkgICAgCQlmdW5jX2VjaG8gImVuYWJsaW5nIHNoZWxsIHRyYWNlIG1vZGUiCisrCSAgICAJCW9wdF9kZWJ1Zz0nc2V0IC14JworKwkJCSRvcHRfZGVidWcKKysJCQk7OworKworKyAgICAgIC1kbG9wZW4pCQl0ZXN0ICIkIyIgLWVxIDAgJiYgZnVuY19taXNzaW5nX2FyZyAiJG9wdCIgJiYgYnJlYWsKKysJCQlleGVjdXRlX2RsZmlsZXM9IiRleGVjdXRlX2RsZmlsZXMgJDEiCisrCQkJc2hpZnQKKysJCQk7OworKworKyAgICAgIC0tZHJ5LXJ1biB8IC1uKQlvcHRfZHJ5X3J1bj06CQkJCQk7OworKyAgICAgIC0tZmVhdHVyZXMpICAgICAgIGZ1bmNfZmVhdHVyZXMJCQkJCTs7CisrICAgICAgLS1maW5pc2gpCQltb2RlPSJmaW5pc2giCQkJCQk7OworKworKyAgICAgIC0tbW9kZSkJCXRlc3QgIiQjIiAtZXEgMCAmJiBmdW5jX21pc3NpbmdfYXJnICIkb3B0IiAmJiBicmVhaworKwkgICAgCQljYXNlICQxIGluCisrCQkJICAjIFZhbGlkIG1vZGUgYXJndW1lbnRzOgorKwkJCSAgY2xlYW4pCTs7CisrCQkJICBjb21waWxlKQk7OworKwkJCSAgZXhlY3V0ZSkJOzsKKysJCQkgIGZpbmlzaCkJOzsKKysJCQkgIGluc3RhbGwpCTs7CisrCQkJICBsaW5rKQkJOzsKKysJCQkgIHJlbGluaykJOzsKKysJCQkgIHVuaW5zdGFsbCkJOzsKKysKKysJCQkgICMgQ2F0Y2ggYW55dGhpbmcgZWxzZSBhcyBhbiBlcnJvcgorKwkJCSAgKikgZnVuY19lcnJvciAiaW52YWxpZCBhcmd1bWVudCBmb3IgJG9wdCIKKysJCQkgICAgIGV4aXRfY21kPWV4aXQKKysJCQkgICAgIGJyZWFrCisrCQkJICAgICA7OworKwkJICAgICAgICBlc2FjCisrCisrCSAgICAJCW1vZGU9IiQxIgorKwkJCXNoaWZ0CisrCQkJOzsKKysKKysgICAgICAtLXByZXNlcnZlLWR1cC1kZXBzKQorKyAgICAgIAkJCW9wdF9kdXBsaWNhdGVfZGVwcz06CQkJCTs7CisrCisrICAgICAgLS1xdWlldHwtLXNpbGVudCkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCIKKysJICAgIAkJb3B0X3NpbGVudD06CisrCQkJOzsKKysKKysgICAgICAtLXZlcmJvc2V8IC12KQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0IgorKwkgICAgCQlvcHRfc2lsZW50PWZhbHNlCisrCQkJOzsKKysKKysgICAgICAtLXRhZykJCXRlc3QgIiQjIiAtZXEgMCAmJiBmdW5jX21pc3NpbmdfYXJnICIkb3B0IiAmJiBicmVhaworKwkJCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQgJDEiCisrCQkJZnVuY19lbmFibGVfdGFnICIkMSIJIyB0YWduYW1lIGlzIHNldCBoZXJlCisrCQkJc2hpZnQKKysJCQk7OworKworKyAgICAgICMgU2VwYXJhdGUgb3B0YXJncyB0byBsb25nIG9wdGlvbnM6CisrICAgICAgLWRsb3Blbj0qfC0tbW9kZT0qfC0tdGFnPSopCisrCQkJZnVuY19vcHRfc3BsaXQgIiRvcHQiCisrCQkJc2V0IGR1bW15ICIkZnVuY19vcHRfc3BsaXRfb3B0IiAiJGZ1bmNfb3B0X3NwbGl0X2FyZyIgJHsxKyIkQCJ9CisrCQkJc2hpZnQKKysJCQk7OworKworKyAgICAgIC1cP3wtaCkJCWZ1bmNfdXNhZ2UJCQkJCTs7CisrICAgICAgLS1oZWxwKQkJb3B0X2hlbHA9OgkJCQkJOzsKKysgICAgICAtLXZlcnNpb24pCWZ1bmNfdmVyc2lvbgkJCQkJOzsKKysKKysgICAgICAtKikJCWZ1bmNfZmF0YWxfaGVscCAidW5yZWNvZ25pemVkIG9wdGlvbiBcYCRvcHQnIgk7OworKworKyAgICAgICopCQlub25vcHQ9IiRvcHQiCisrICAgICAgCQkJYnJlYWsKKysJCQk7OworKyAgICBlc2FjCisrICBkb25lCisrCisrICAjIE5vdyB0aGF0IHdlJ3ZlIGNvbGxlY3RlZCBhIHBvc3NpYmxlIC0tbW9kZSBhcmcsIHNob3cgaGVscCBpZiBuZWNlc3NhcnkKKysgICRvcHRfaGVscCAmJiBmdW5jX21vZGVfaGVscAorKworKyAgY2FzZSAkaG9zdCBpbgorKyAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqcHczMiopCisrICAgICAgIyBkb24ndCBlbGltaW5hdGUgZHVwbGljYXRpb25zIGluICRwb3N0ZGVwcyBhbmQgJHByZWRlcHMKKysgICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPToKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9JG9wdF9kdXBsaWNhdGVfZGVwcworKyAgICAgIDs7CisrICBlc2FjCisrCisrICAjIEhhdmluZyB3YXJuZWQgYWJvdXQgYWxsIG1pcy1zcGVjaWZpZWQgb3B0aW9ucywgYmFpbCBvdXQgaWYKKysgICMgYW55dGhpbmcgd2FzIHdyb25nLgorKyAgJGV4aXRfY21kICRFWElUX0ZBSUxVUkUKKyt9CisrCisrIyBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKysjIEVuc3VyZSB0aGF0IHdlIGFyZSB1c2luZyBtNCBtYWNyb3MsIGFuZCBsaWJ0b29sIHNjcmlwdCBmcm9tIHRoZSBzYW1lCisrIyByZWxlYXNlIG9mIGxpYnRvb2wuCisrZnVuY19jaGVja192ZXJzaW9uX21hdGNoICgpCisreworKyAgaWYgdGVzdCAiJHBhY2thZ2VfcmV2aXNpb24iICE9ICIkbWFjcm9fcmV2aXNpb24iOyB0aGVuCisrICAgIGlmIHRlc3QgIiRWRVJTSU9OIiAhPSAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCisrICAgICAgaWYgdGVzdCAteiAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCisrICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKKyskcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gYW4gb2xkZXIgcmVsZWFzZS4KKyskcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCisrJHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorK19MVF9FT0YKKysgICAgICBlbHNlCisrICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKKyskcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gJFBBQ0tBR0UgJG1hY3JvX3ZlcnNpb24uCisrJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSAkUEFDS0FHRSAkVkVSU0lPTgorKyRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KKytfTFRfRU9GCisrICAgICAgZmkKKysgICAgZWxzZQorKyAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCisrJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24sCisrJHByb2duYW1lOiBidXQgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gcmV2aXNpb24gJG1hY3JvX3JldmlzaW9uLgorKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24KKyskcHJvZ25hbWU6IG9mICRQQUNLQUdFICRWRVJTSU9OIGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCisrX0xUX0VPRgorKyAgICBmaQorKworKyAgICBleGl0ICRFWElUX01JU01BVENICisrICBmaQorK30KKysKKysKKysjIyAtLS0tLS0tLS0tLSAjIworKyMjICAgIE1haW4uICAgICMjCisrIyMgLS0tLS0tLS0tLS0gIyMKKysKKyt7CisrICAjIFNhbml0eSBjaGVja3MgZmlyc3Q6CisrICBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKysKKysgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiICE9IHllczsgdGhlbgorKyAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gIm5vdCBjb25maWd1cmVkIHRvIGJ1aWxkIGFueSBraW5kIG9mIGxpYnJhcnkiCisrICBmaQorKworKyAgdGVzdCAteiAiJG1vZGUiICYmIGZ1bmNfZmF0YWxfZXJyb3IgImVycm9yOiB5b3UgbXVzdCBzcGVjaWZ5IGEgTU9ERS4iCisrCisrCisrICAjIERhcndpbiBzdWNrcworKyAgZXZhbCBzdGRfc2hyZXh0PVwiJHNocmV4dF9jbWRzXCIKKysKKysKKysgICMgT25seSBleGVjdXRlIG1vZGUgaXMgYWxsb3dlZCB0byBoYXZlIC1kbG9wZW4gZmxhZ3MuCisrICBpZiB0ZXN0IC1uICIkZXhlY3V0ZV9kbGZpbGVzIiAmJiB0ZXN0ICIkbW9kZSIgIT0gZXhlY3V0ZTsgdGhlbgorKyAgICBmdW5jX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgLWRsb3BlbiciCisrICAgICRFQ0hPICIkaGVscCIgMT4mMgorKyAgICBleGl0ICRFWElUX0ZBSUxVUkUKKysgIGZpCisrCisrICAjIENoYW5nZSB0aGUgaGVscCBtZXNzYWdlIHRvIGEgbW9kZS1zcGVjaWZpYyBvbmUuCisrICBnZW5lcmljX2hlbHA9IiRoZWxwIgorKyAgaGVscD0iVHJ5IFxgJHByb2duYW1lIC0taGVscCAtLW1vZGU9JG1vZGUnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyt9CisrCisrCisrIyBmdW5jX2xhbGliX3AgZmlsZQorKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgYC5sYScgbGlicmFyeSBvciBgLmxvJyBvYmplY3QgZmlsZS4KKysjIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CisrIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KKytmdW5jX2xhbGliX3AgKCkKKyt7CisrICAgICRTRUQgLWUgNHEgIiQxIiAyPi9kZXYvbnVsbCBcCisrICAgICAgfCAkR1JFUCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiID4gL2Rldi9udWxsIDI+JjEKKyt9CisrCisrIyBmdW5jX2xhbGliX3Vuc2FmZV9wIGZpbGUKKysjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIGAubGEnIGxpYnJhcnkgb3IgYC5sbycgb2JqZWN0IGZpbGUuCisrIyBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIHNhbWUgY2hlY2sgYXMgZnVuY19sYWxpYl9wIHdpdGhvdXQKKysjIHJlc29ydGluZyB0byBleHRlcm5hbCBwcm9ncmFtcy4gIFRvIHRoaXMgZW5kLCBpdCByZWRpcmVjdHMgc3RkaW4gYW5kCisrIyBjbG9zZXMgaXQgYWZ0ZXJ3YXJkcywgd2l0aG91dCBzYXZpbmcgdGhlIG9yaWdpbmFsIGZpbGUgZGVzY3JpcHRvci4KKysjIEFzIGEgc2FmZXR5IG1lYXN1cmUsIHVzZSBpdCBvbmx5IHdoZXJlIGEgbmVnYXRpdmUgcmVzdWx0IHdvdWxkIGJlCisrIyBmYXRhbCBhbnl3YXkuICBXb3JrcyBpZiBgZmlsZScgZG9lcyBub3QgZXhpc3QuCisrZnVuY19sYWxpYl91bnNhZmVfcCAoKQorK3sKKysgICAgbGFsaWJfcD1ubworKyAgICBpZiB0ZXN0IC1yICIkMSIgJiYgZXhlYyA1PCYxIDwiJDEiOyB0aGVuCisrCWZvciBsYWxpYl9wX2wgaW4gMSAyIDMgNAorKwlkbworKwkgICAgcmVhZCBsYWxpYl9wX2xpbmUKKysJICAgIGNhc2UgIiRsYWxpYl9wX2xpbmUiIGluCisrCQlcI1wgR2VuZXJhdGVkXCBieVwgKiRQQUNLQUdFKiApIGxhbGliX3A9eWVzOyBicmVhazs7CisrCSAgICBlc2FjCisrCWRvbmUKKysJZXhlYyAxPCY1IDU8Ji0KKysgICAgZmkKKysgICAgdGVzdCAiJGxhbGliX3AiID0geWVzCisrfQorKworKyMgZnVuY19sdHdyYXBwZXJfcCBmaWxlCisrIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdC4KKysjIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CisrIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KKytmdW5jX2x0d3JhcHBlcl9wICgpCisreworKyAgICBmdW5jX2xhbGliX3AgIiQxIgorK30KKysKKysKKysjIGZ1bmNfZXhlY3V0ZV9jbWRzIGNvbW1hbmRzIGZhaWxfY21kCisrIyBFeGVjdXRlIHRpbGRlLWRlbGltaXRlZCBDT01NQU5EUy4KKysjIElmIEZBSUxfQ01EIGlzIGdpdmVuLCBldmFsIHRoYXQgdXBvbiBmYWlsdXJlLgorKyMgRkFJTF9DTUQgbWF5IHJlYWQtYWNjZXNzIHRoZSBjdXJyZW50IGNvbW1hbmQgaW4gdmFyaWFibGUgQ01EIQorK2Z1bmNfZXhlY3V0ZV9jbWRzICgpCisreworKyAgICAkb3B0X2RlYnVnCisrICAgIHNhdmVfaWZzPSRJRlM7IElGUz0nficKKysgICAgZm9yIGNtZCBpbiAkMTsgZG8KKysgICAgICBJRlM9JHNhdmVfaWZzCisrICAgICAgZXZhbCBjbWQ9XCIkY21kXCIKKysgICAgICBmdW5jX3Nob3dfZXZhbCAiJGNtZCIgIiR7Mi06fSIKKysgICAgZG9uZQorKyAgICBJRlM9JHNhdmVfaWZzCisrfQorKworKworKyMgZnVuY19zb3VyY2UgZmlsZQorKyMgU291cmNlIEZJTEUsIGFkZGluZyBkaXJlY3RvcnkgY29tcG9uZW50IGlmIG5lY2Vzc2FyeS4KKysjIE5vdGUgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJ5IG9uIGN5Z3dpbi9taW5ndyB0byBhcHBlbmQgYSBkb3QgdG8KKysjIEZJTEUgZXZlbiBpZiBib3RoIEZJTEUgYW5kIEZJTEUuZXhlIGV4aXN0OiBhdXRvbWF0aWMtYXBwZW5kLS5leGUKKysjIGJlaGF2aW9yIGhhcHBlbnMgb25seSBmb3IgZXhlYygzKSwgbm90IGZvciBvcGVuKDIpISAgQWxzbywgc291cmNpbmcKKysjIGBGSUxFLicgZG9lcyBub3Qgd29yayBvbiBjeWd3aW4gbWFuYWdlZCBtb3VudHMuCisrZnVuY19zb3VyY2UgKCkKKyt7CisrICAgICRvcHRfZGVidWcKKysgICAgY2FzZSAkMSBpbgorKyAgICAqLyogfCAqXFwqKQkuICIkMSIgOzsKKysgICAgKikJCS4gIi4vJDEiIDs7CisrICAgIGVzYWMKKyt9CisrCisrCisrIyBmdW5jX3dpbjMyX2xpYmlkIGFyZworKyMgcmV0dXJuIHRoZSBsaWJyYXJ5IHR5cGUgb2YgZmlsZSAnYXJnJworKyMKKysjIE5lZWQgYSBsb3Qgb2YgZ29vIHRvIGhhbmRsZSAqYm90aCogRExMcyBhbmQgaW1wb3J0IGxpYnMKKysjIEhhcyB0byBiZSBhIHNoZWxsIGZ1bmN0aW9uIGluIG9yZGVyIHRvICdlYXQnIHRoZSBhcmd1bWVudAorKyMgdGhhdCBpcyBzdXBwbGllZCB3aGVuICRmaWxlX21hZ2ljX2NvbW1hbmQgaXMgY2FsbGVkLgorK2Z1bmNfd2luMzJfbGliaWQgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICB3aW4zMl9saWJpZF90eXBlPSJ1bmtub3duIgorKyAgd2luMzJfZmlsZXJlcz1gZmlsZSAtTCAkMSAyPi9kZXYvbnVsbGAKKysgIGNhc2UgJHdpbjMyX2ZpbGVyZXMgaW4KKysgICphclwgYXJjaGl2ZVwgaW1wb3J0XCBsaWJyYXJ5KikgIyBkZWZpbml0ZWx5IGltcG9ydAorKyAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBpbXBvcnQiCisrICAgIDs7CisrICAqYXJcIGFyY2hpdmUqKSAjIGNvdWxkIGJlIGFuIGltcG9ydCwgb3Igc3RhdGljCisrICAgIGlmIGV2YWwgJE9CSkRVTVAgLWYgJDEgfCAkU0VEIC1lICcxMHEnIDI+L2Rldi9udWxsIHwKKysgICAgICAgJEVHUkVQICdmaWxlIGZvcm1hdCBwZS1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nID4vZGV2L251bGwgOyB0aGVuCisrICAgICAgd2luMzJfbm1yZXM9YGV2YWwgJE5NIC1mIHBvc2l4IC1BICQxIHwKKysJJFNFRCAtbiAtZSAnCisrCSAgICAxLDEwMHsKKysJCS8gSSAveworKwkJICAgIHMsLiosaW1wb3J0LAorKwkJICAgIHAKKysJCSAgICBxCisrCQl9CisrCSAgICB9J2AKKysgICAgICBjYXNlICR3aW4zMl9ubXJlcyBpbgorKyAgICAgIGltcG9ydCopICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBpbXBvcnQiOzsKKysgICAgICAqKSAgICAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgc3RhdGljIjs7CisrICAgICAgZXNhYworKyAgICBmaQorKyAgICA7OworKyAgKkRMTCopCisrICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBETEwiCisrICAgIDs7CisrICAqZXhlY3V0YWJsZSopICMgYnV0IHNoZWxsIHNjcmlwdHMgYXJlICJleGVjdXRhYmxlIiB0b28uLi4KKysgICAgY2FzZSAkd2luMzJfZmlsZXJlcyBpbgorKyAgICAqTVNcIFdpbmRvd3NcIFBFXCBJbnRlbCopCisrICAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IERMTCIKKysgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICBlc2FjCisrICAkRUNITyAiJHdpbjMyX2xpYmlkX3R5cGUiCisrfQorKworKworKworKyMgZnVuY19pbmZlcl90YWcgYXJnCisrIyBJbmZlciB0YWdnZWQgY29uZmlndXJhdGlvbiB0byB1c2UgaWYgYW55IGFyZSBhdmFpbGFibGUgYW5kCisrIyBpZiBvbmUgd2Fzbid0IGNob3NlbiB2aWEgdGhlICItLXRhZyIgY29tbWFuZCBsaW5lIG9wdGlvbi4KKysjIE9ubHkgYXR0ZW1wdCB0aGlzIGlmIHRoZSBjb21waWxlciBpbiB0aGUgYmFzZSBjb21waWxlCisrIyBjb21tYW5kIGRvZXNuJ3QgbWF0Y2ggdGhlIGRlZmF1bHQgY29tcGlsZXIuCisrIyBhcmcgaXMgdXN1YWxseSBvZiB0aGUgZm9ybSAnZ2NjIC4uLicKKytmdW5jX2luZmVyX3RhZyAoKQorK3sKKysgICAgJG9wdF9kZWJ1ZworKyAgICBpZiB0ZXN0IC1uICIkYXZhaWxhYmxlX3RhZ3MiICYmIHRlc3QgLXogIiR0YWduYW1lIjsgdGhlbgorKyAgICAgIENDX3F1b3RlZD0KKysgICAgICBmb3IgYXJnIGluICRDQzsgZG8KKysgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisrCUNDX3F1b3RlZD0iJENDX3F1b3RlZCAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrICAgICAgZG9uZQorKyAgICAgIGNhc2UgJEAgaW4KKysgICAgICAjIEJsYW5rcyBpbiB0aGUgY29tbWFuZCBtYXkgaGF2ZSBiZWVuIHN0cmlwcGVkIGJ5IHRoZSBjYWxsaW5nIHNoZWxsLAorKyAgICAgICMgYnV0IG5vdCBmcm9tIHRoZSBDQyBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIGNvbmZpZ3VyZSB3YXMgcnVuLgorKyAgICAgICIgJENDICIqIHwgIiRDQyAiKiB8ICIgYCRFQ0hPICRDQ2AgIiogfCAiYCRFQ0hPICRDQ2AgIiogfCAiICRDQ19xdW90ZWQiKiB8ICIkQ0NfcXVvdGVkICIqIHwgIiBgJEVDSE8gJENDX3F1b3RlZGAgIiogfCAiYCRFQ0hPICRDQ19xdW90ZWRgICIqKSA7OworKyAgICAgICMgQmxhbmtzIGF0IHRoZSBzdGFydCBvZiAkYmFzZV9jb21waWxlIHdpbGwgY2F1c2UgdGhpcyB0byBmYWlsCisrICAgICAgIyBpZiB3ZSBkb24ndCBjaGVjayBmb3IgdGhlbSBhcyB3ZWxsLgorKyAgICAgICopCisrCWZvciB6IGluICRhdmFpbGFibGVfdGFnczsgZG8KKysJICBpZiAkR1JFUCAiXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHokIiA8ICIkcHJvZ3BhdGgiID4gL2Rldi9udWxsOyB0aGVuCisrCSAgICAjIEV2YWx1YXRlIHRoZSBjb25maWd1cmF0aW9uLgorKwkgICAgZXZhbCAiYCR7U0VEfSAtbiAtZSAnL14jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICckeickLywvXiMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICckeickL3AnIDwgJHByb2dwYXRoYCIKKysJICAgIENDX3F1b3RlZD0KKysJICAgIGZvciBhcmcgaW4gJENDOyBkbworKwkgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgb3RoZXIgc2hlbGwgbWV0YWNoYXJhY3RlcnMuCisrCSAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisrCSAgICAgIENDX3F1b3RlZD0iJENDX3F1b3RlZCAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCSAgICBkb25lCisrCSAgICBjYXNlICIkQCAiIGluCisrCSAgICAgICIgJENDICIqIHwgIiRDQyAiKiB8ICIgYCRFQ0hPICRDQ2AgIiogfCAiYCRFQ0hPICRDQ2AgIiogfCAiICRDQ19xdW90ZWQiKiB8ICIkQ0NfcXVvdGVkICIqIHwgIiBgJEVDSE8gJENDX3F1b3RlZGAgIiogfCAiYCRFQ0hPICRDQ19xdW90ZWRgICIqKQorKwkgICAgICAjIFRoZSBjb21waWxlciBpbiB0aGUgYmFzZSBjb21waWxlIGNvbW1hbmQgbWF0Y2hlcworKwkgICAgICAjIHRoZSBvbmUgaW4gdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9uLgorKwkgICAgICAjIEFzc3VtZSB0aGlzIGlzIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbiB3ZSB3YW50LgorKwkgICAgICB0YWduYW1lPSR6CisrCSAgICAgIGJyZWFrCisrCSAgICAgIDs7CisrCSAgICBlc2FjCisrCSAgZmkKKysJZG9uZQorKwkjIElmICR0YWduYW1lIHN0aWxsIGlzbid0IHNldCwgdGhlbiBubyB0YWdnZWQgY29uZmlndXJhdGlvbgorKwkjIHdhcyBmb3VuZCBhbmQgbGV0IHRoZSB1c2VyIGtub3cgdGhhdCB0aGUgIi0tdGFnIiBjb21tYW5kCisrCSMgbGluZSBvcHRpb24gbXVzdCBiZSB1c2VkLgorKwlpZiB0ZXN0IC16ICIkdGFnbmFtZSI7IHRoZW4KKysJICBmdW5jX2VjaG8gInVuYWJsZSB0byBpbmZlciB0YWdnZWQgY29uZmlndXJhdGlvbiIKKysJICBmdW5jX2ZhdGFsX2Vycm9yICJzcGVjaWZ5IGEgdGFnIHdpdGggXGAtLXRhZyciCisrIwllbHNlCisrIwkgIGZ1bmNfdmVyYm9zZSAidXNpbmcgJHRhZ25hbWUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24iCisrCWZpCisrCTs7CisrICAgICAgZXNhYworKyAgICBmaQorK30KKysKKysKKysKKysjIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zIG91dHB1dG5hbWUgb3JpZ2luYXRvciBwaWNfcAorKyMgRXh0cmFjdCBzeW1ib2xzIGZyb20gZGxwcmVmaWxlcyBhbmQgY3JlYXRlICR7b3V0cHV0bmFtZX1TLm8gd2l0aAorKyMgYSBkbHByZW9wZW4gc3ltYm9sIHRhYmxlLgorK2Z1bmNfZ2VuZXJhdGVfZGxzeW1zICgpCisreworKyAgICAkb3B0X2RlYnVnCisrICAgIG15X291dHB1dG5hbWU9IiQxIgorKyAgICBteV9vcmlnaW5hdG9yPSIkMiIKKysgICAgbXlfcGljX3A9IiR7My1ub30iCisrICAgIG15X3ByZWZpeD1gJEVDSE8gIiRteV9vcmlnaW5hdG9yIiB8IHNlZCAncyVbXmEtekEtWjAtOV0lXyVnJ2AKKysgICAgbXlfZGxzeW1zPQorKworKyAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgorKyAgICAgIGlmIHRlc3QgLW4gIiROTSIgJiYgdGVzdCAtbiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKysJbXlfZGxzeW1zPSIke215X291dHB1dG5hbWV9Uy5jIgorKyAgICAgIGVsc2UKKysJZnVuY19lcnJvciAibm90IGNvbmZpZ3VyZWQgdG8gZXh0cmFjdCBnbG9iYWwgc3ltYm9scyBmcm9tIGRscHJlb3BlbmVkIGZpbGVzIgorKyAgICAgIGZpCisrICAgIGZpCisrCisrICAgIGlmIHRlc3QgLW4gIiRteV9kbHN5bXMiOyB0aGVuCisrICAgICAgY2FzZSAkbXlfZGxzeW1zIGluCisrICAgICAgIiIpIDs7CisrICAgICAgKi5jKQorKwkjIERpc2NvdmVyIHRoZSBubGlzdCBvZiBlYWNoIG9mIHRoZSBkbGZpbGVzLgorKwlubGlzdD0iJG91dHB1dF9vYmpkaXIvJHtteV9vdXRwdXRuYW1lfS5ubSIKKysKKysJZnVuY19zaG93X2V2YWwgIiRSTSAkbmxpc3QgJHtubGlzdH1TICR7bmxpc3R9VCIKKysKKysJIyBQYXJzZSB0aGUgbmFtZSBsaXN0IGludG8gYSBzb3VyY2UgZmlsZS4KKysJZnVuY19lY2hvICJjcmVhdGluZyAkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorKworKwkkb3B0X2RyeV9ydW4gfHwgJEVDSE8gPiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKysvKiAkbXlfZGxzeW1zIC0gc3ltYm9sIHJlc29sdXRpb24gdGFibGUgZm9yIFxgJG15X291dHB1dG5hbWUnIGRsc3ltIGVtdWxhdGlvbi4gKi8KKysvKiBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OICovCisrCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrZXh0ZXJuIFwiQ1wiIHsKKysjZW5kaWYKKysKKysvKiBFeHRlcm5hbCBzeW1ib2wgZGVjbGFyYXRpb25zIGZvciB0aGUgY29tcGlsZXIuICovXAorKyIKKysKKysJaWYgdGVzdCAiJGRsc2VsZiIgPSB5ZXM7IHRoZW4KKysJICBmdW5jX2VjaG8gImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJG91dHB1dCciCisrCisrCSAgJG9wdF9kcnlfcnVuIHx8IGVjaG8gJzogQFBST0dSQU1AICcgPiAiJG5saXN0IgorKworKwkgICMgQWRkIG91ciBvd24gcHJvZ3JhbSBvYmplY3RzIHRvIHRoZSBzeW1ib2wgbGlzdC4KKysJICBwcm9nZmlsZXM9YCRFQ0hPICJYJG9ianMkb2xkX2RlcGxpYnMiIHwgJFNQMk5MIHwgJFhzZWQgLWUgIiRsbzJvIiB8ICROTDJTUGAKKysJICBmb3IgcHJvZ2ZpbGUgaW4gJHByb2dmaWxlczsgZG8KKysJICAgIGZ1bmNfZWNobyAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkcHJvZ2ZpbGUnIgorKwkgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiROTSAkcHJvZ2ZpbGUgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorKwkgIGRvbmUKKysKKysJICBpZiB0ZXN0IC1uICIkZXhjbHVkZV9leHBzeW1zIjsgdGhlbgorKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKysJICAgICAgZXZhbCAnJEVHUkVQIC12ICIgKCRleGNsdWRlX2V4cHN5bXMpJCIgIiRubGlzdCIgPiAiJG5saXN0IlQnCisrCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCisrCSAgICB9CisrCSAgZmkKKysKKysJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisrCSAgICAkb3B0X2RyeV9ydW4gfHwgeworKwkgICAgICBldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRubGlzdCIgPiAiJG5saXN0IlQnCisrCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCisrCSAgICB9CisrCSAgZmkKKysKKysJICAjIFByZXBhcmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scworKwkgIGlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9scyI7IHRoZW4KKysJICAgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiCisrCSAgICAkb3B0X2RyeV9ydW4gfHwgeworKwkgICAgICAkUk0gJGV4cG9ydF9zeW1ib2xzCisrCSAgICAgIGV2YWwgIiR7U0VEfSAtbiAtZSAnL146IEBQUk9HUkFNQCAkL2QnIC1lICdzL14uKiBcKC4qXCkkL1wxL3AnICInPCAiJG5saXN0IiA+ICIkZXhwb3J0X3N5bWJvbHMiJworKwkgICAgICBjYXNlICRob3N0IGluCisrCSAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiApCisrICAgICAgICAgICAgICAgIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisrICAgICAgICAgICAgICAgIGV2YWwgJ2NhdCAiJGV4cG9ydF9zeW1ib2xzIiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKysJICAgICAgICA7OworKwkgICAgICBlc2FjCisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKysJICAgICAgZXZhbCAiJHtTRUR9IC1lICdzL1woW10uWypeJF1cKS9cXFxcXDEvZycgLWUgJ3MvXi8gLycgLWUgJ3MvJC8kLyciJyA8ICIkZXhwb3J0X3N5bWJvbHMiID4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCInCisrCSAgICAgIGV2YWwgJyRHUkVQIC1mICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlQnCisrCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCisrCSAgICAgIGNhc2UgJGhvc3QgaW4KKysJICAgICAgICAqY3lnd2luIHwgKm1pbmd3KiApCisrCSAgICAgICAgICBldmFsICJlY2hvIEVYUE9SVFMgIic+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworKwkgICAgICAgICAgZXZhbCAnY2F0ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworKwkgICAgICAgICAgOzsKKysJICAgICAgZXNhYworKwkgICAgfQorKwkgIGZpCisrCWZpCisrCisrCWZvciBkbHByZWZpbGUgaW4gJGRscHJlZmlsZXM7IGRvCisrCSAgZnVuY19lY2hvICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSBcYCRkbHByZWZpbGUnIgorKwkgIGZ1bmNfYmFzZW5hbWUgIiRkbHByZWZpbGUiCisrCSAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorKwkgICRvcHRfZHJ5X3J1biB8fCB7CisrCSAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJworKwkgICAgZXZhbCAiJE5NICRkbHByZWZpbGUgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorKwkgIH0KKysJZG9uZQorKworKwkkb3B0X2RyeV9ydW4gfHwgeworKwkgICMgTWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgYW4gZW1wdHkgZmlsZS4KKysJICB0ZXN0IC1mICIkbmxpc3QiIHx8IDogPiAiJG5saXN0IgorKworKwkgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCisrCSAgICAkRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVAorKwkgICAgJE1WICIkbmxpc3QiVCAiJG5saXN0IgorKwkgIGZpCisrCisrCSAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KKysJICBpZiAkR1JFUCAtdiAiXjogIiA8ICIkbmxpc3QiIHwKKysJICAgICAgaWYgc29ydCAtayAzIDwvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrCQlzb3J0IC1rIDMKKysJICAgICAgZWxzZQorKwkJc29ydCArMgorKwkgICAgICBmaSB8CisrCSAgICAgIHVuaXEgPiAiJG5saXN0IlM7IHRoZW4KKysJICAgIDoKKysJICBlbHNlCisrCSAgICAkR1JFUCAtdiAiXjogIiA8ICIkbmxpc3QiID4gIiRubGlzdCJTCisrCSAgZmkKKysKKysJICBpZiB0ZXN0IC1mICIkbmxpc3QiUzsgdGhlbgorKwkgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiUyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyInCisrCSAgZWxzZQorKwkgICAgJEVDSE8gJy8qIE5PTkUgKi8nID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorKwkgIGZpCisrCisrCSAgJEVDSE8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisrCisrLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworK3R5cGVkZWYgc3RydWN0IHsKKysgIGNvbnN0IGNoYXIgKm5hbWU7CisrICB2b2lkICphZGRyZXNzOworK30gbHRfZGxzeW1saXN0OworKyIKKysJICBjYXNlICRob3N0IGluCisrCSAgKmN5Z3dpbiogfCAqbWluZ3cqICkKKysJICAgICRFQ0hPID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UKKysgICBydW50aW1lIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbgorKyAgIG9uIHBzZXVkby1yZWxvY3MuICAqLyIKKysJICAgIGx0X2Rsc3ltX2NvbnN0PSA7OworKwkgICpvc2Y1KikKKysJICAgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisrLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YSAqLyIKKysJICAgIGx0X2Rsc3ltX2NvbnN0PSA7OworKwkgICopCisrCSAgICBsdF9kbHN5bV9jb25zdD1jb25zdCA7OworKwkgIGVzYWMKKysKKysJICAkRUNITyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKytleHRlcm4gJGx0X2Rsc3ltX2NvbnN0IGx0X2Rsc3ltbGlzdAorK2x0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXTsKKyskbHRfZGxzeW1fY29uc3QgbHRfZGxzeW1saXN0CisrbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KKyt7XAorKyAgeyBcIiRteV9vcmlnaW5hdG9yXCIsICh2b2lkICopIDAgfSwiCisrCisrCSAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIDwgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisrCisrCSAgJEVDSE8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisrICB7MCwgKHZvaWQgKikgMH0KKyt9OworKworKy8qIFRoaXMgd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBGcmVlQlNEIGxpbmtlciAqLworKyNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKKytzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworKyAgcmV0dXJuIGx0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHM7CisrfQorKyNlbmRpZgorKworKyNpZmRlZiBfX2NwbHVzcGx1cworK30KKysjZW5kaWZcCisrIgorKwl9ICMgISRvcHRfZHJ5X3J1bgorKworKyAgCXBpY19mbGFnX2Zvcl9zeW10YWJsZT0KKysJY2FzZSAiJGNvbXBpbGVfY29tbWFuZCAiIGluCisrCSoiIC1zdGF0aWMgIiopIDs7CisrCSopCisrCSAgY2FzZSAkaG9zdCBpbgorKwkgICMgY29tcGlsaW5nIHRoZSBzeW1ib2wgdGFibGUgZmlsZSB3aXRoIHBpY19mbGFnIHdvcmtzIGFyb3VuZAorKwkgICMgYSBGcmVlQlNEIGJ1ZyB0aGF0IGNhdXNlcyBwcm9ncmFtcyB0byBjcmFzaCB3aGVuIC1sbSBpcworKwkgICMgbGlua2VkIGJlZm9yZSBhbnkgb3RoZXIgUElDIG9iamVjdC4gIEJ1dCB3ZSBtdXN0IG5vdCB1c2UKKysJICAjIHBpY19mbGFnIHdoZW4gbGlua2luZyB3aXRoIC1zdGF0aWMuICBUaGUgcHJvYmxlbSBleGlzdHMgaW4KKysJICAjIEZyZWVCU0QgMi4yLjYgYW5kIGlzIGZpeGVkIGluIEZyZWVCU0QgMy4xLgorKwkgICotKi1mcmVlYnNkMip8Ki0qLWZyZWVic2QzLjAqfCotKi1mcmVlYnNkZWxmMy4wKikKKysJICAgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyAtREZSRUVCU0RfV09SS0FST1VORCIgOzsKKysJICAqLSotaHB1eCopCisrCSAgICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWciICA7OworKwkgICopCisrCSAgICBpZiB0ZXN0ICJYJG15X3BpY19wIiAhPSBYbm87IHRoZW4KKysJICAgICAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIgorKwkgICAgZmkKKysJICAgIDs7CisrCSAgZXNhYworKwkgIDs7CisrCWVzYWMKKysJc3ltdGFiX2NmbGFncz0KKysJZm9yIGFyZyBpbiAkTFRDRkxBR1M7IGRvCisrCSAgY2FzZSAkYXJnIGluCisrCSAgLXBpZSB8IC1mcGllIHwgLWZQSUUpIDs7CisrCSAgKikgc3ltdGFiX2NmbGFncz0iJHN5bXRhYl9jZmxhZ3MgJGFyZyIgOzsKKysJICBlc2FjCisrCWRvbmUKKysKKysJIyBOb3cgY29tcGlsZSB0aGUgZHluYW1pYyBzeW1ib2wgZmlsZS4KKysJZnVuY19zaG93X2V2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkTFRDQyRzeW10YWJfY2ZsYWdzIC1jJG5vX2J1aWx0aW5fZmxhZyRwaWNfZmxhZ19mb3Jfc3ltdGFibGUgIiRteV9kbHN5bXMiKScgJ2V4aXQgJD8nCisrCisrCSMgQ2xlYW4gdXAgdGhlIGdlbmVyYXRlZCBmaWxlcy4KKysJZnVuY19zaG93X2V2YWwgJyRSTSAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIiRubGlzdCIgIiR7bmxpc3R9UyIgIiR7bmxpc3R9VCInCisrCisrCSMgVHJhbnNmb3JtIHRoZSBzeW1ib2wgZmlsZSBpbnRvIHRoZSBjb3JyZWN0IG5hbWUuCisrCXN5bWZpbGVvYmo9IiRvdXRwdXRfb2JqZGlyLyR7bXlfb3V0cHV0bmFtZX1TLiRvYmpleHQiCisrCWNhc2UgJGhvc3QgaW4KKysJKmN5Z3dpbiogfCAqbWluZ3cqICkKKysJICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYiOyB0aGVuCisrCSAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUuZGVmICRzeW1maWxlb2JqJSJgCisrCSAgICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYgJHN5bWZpbGVvYmolImAKKysJICBlbHNlCisrCSAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKysJICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisrCSAgZmkKKysJICA7OworKwkqKQorKwkgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAorKwkgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisrCSAgOzsKKysJZXNhYworKwk7OworKyAgICAgICopCisrCWZ1bmNfZmF0YWxfZXJyb3IgInVua25vd24gc3VmZml4IGZvciBcYCRteV9kbHN5bXMnIgorKwk7OworKyAgICAgIGVzYWMKKysgICAgZWxzZQorKyAgICAgICMgV2Uga2VlcCBnb2luZyBqdXN0IGluIGNhc2UgdGhlIHVzZXIgZGlkbid0IHJlZmVyIHRvCisrICAgICAgIyBsdF9wcmVsb2FkZWRfc3ltYm9scy4gIFRoZSBsaW5rZXIgd2lsbCBmYWlsIGlmIGdsb2JhbF9zeW1ib2xfcGlwZQorKyAgICAgICMgcmVhbGx5IHdhcyByZXF1aXJlZC4KKysKKysgICAgICAjIE51bGxpZnkgdGhlIHN5bWJvbCBmaWxlLgorKyAgICAgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRYc2VkIC1lICJzJSBAU1lNRklMRUAlJSJgCisrICAgICAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIlgkZmluYWxpemVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyUgQFNZTUZJTEVAJSUiYAorKyAgICBmaQorK30KKysKKysjIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlIGRpciBvbGRsaWIKKytmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAoKQorK3sKKysgICAgJG9wdF9kZWJ1ZworKyAgICBmX2V4X2FuX2FyX2Rpcj0iJDEiOyBzaGlmdAorKyAgICBmX2V4X2FuX2FyX29sZGxpYj0iJDEiCisrICAgIGZ1bmNfc2hvd19ldmFsICIoY2QgXCRmX2V4X2FuX2FyX2RpciAmJiAkQVIgeCBcJGZfZXhfYW5fYXJfb2xkbGliKSIgJ2V4aXQgJD8nCisrICAgIGlmICgkQVIgdCAiJGZfZXhfYW5fYXJfb2xkbGliIiB8IHNvcnQgfCBzb3J0IC11YyA+L2Rldi9udWxsIDI+JjEpOyB0aGVuCisrICAgICA6CisrICAgIGVsc2UKKysgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJvYmplY3QgbmFtZSBjb25mbGljdHMgaW4gYXJjaGl2ZTogJGZfZXhfYW5fYXJfZGlyLyRmX2V4X2FuX2FyX29sZGxpYiIKKysgICAgZmkKKyt9CisrCisrCisrIyBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgZ2VudG9wIG9sZGxpYiAuLi4KKytmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgKCkKKyt7CisrICAgICRvcHRfZGVidWcKKysgICAgbXlfZ2VudG9wPSIkMSI7IHNoaWZ0CisrICAgIG15X29sZGxpYnM9JHsxKyIkQCJ9CisrICAgIG15X29sZG9ianM9IiIKKysgICAgbXlfeGxpYj0iIgorKyAgICBteV94YWJzPSIiCisrICAgIG15X3hkaXI9IiIKKysKKysgICAgZm9yIG15X3hsaWIgaW4gJG15X29sZGxpYnM7IGRvCisrICAgICAgIyBFeHRyYWN0IHRoZSBvYmplY3RzLgorKyAgICAgIGNhc2UgJG15X3hsaWIgaW4KKysJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBteV94YWJzPSIkbXlfeGxpYiIgOzsKKysJKikgbXlfeGFicz1gcHdkYCIvJG15X3hsaWIiIDs7CisrICAgICAgZXNhYworKyAgICAgIGZ1bmNfYmFzZW5hbWUgIiRteV94bGliIgorKyAgICAgIG15X3hsaWI9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKysgICAgICBteV94bGliX3U9JG15X3hsaWIKKysgICAgICB3aGlsZSA6OyBkbworKyAgICAgICAgY2FzZSAiICRleHRyYWN0ZWRfYXJjaGl2ZXMgIiBpbgorKwkqIiAkbXlfeGxpYl91ICIqKQorKwkgIGV4dHJhY3RlZF9zZXJpYWw9YGV4cHIgJGV4dHJhY3RlZF9zZXJpYWwgKyAxYAorKwkgIG15X3hsaWJfdT1sdCRleHRyYWN0ZWRfc2VyaWFsLSRteV94bGliIDs7CisrCSopIGJyZWFrIDs7CisrCWVzYWMKKysgICAgICBkb25lCisrICAgICAgZXh0cmFjdGVkX2FyY2hpdmVzPSIkZXh0cmFjdGVkX2FyY2hpdmVzICRteV94bGliX3UiCisrICAgICAgbXlfeGRpcj0iJG15X2dlbnRvcC8kbXlfeGxpYl91IgorKworKyAgICAgIGZ1bmNfbWtkaXJfcCAiJG15X3hkaXIiCisrCisrICAgICAgY2FzZSAkaG9zdCBpbgorKyAgICAgICotZGFyd2luKikKKysJZnVuY19lY2hvICJFeHRyYWN0aW5nICRteV94YWJzIgorKwkjIERvIG5vdCBib3RoZXIgZG9pbmcgYW55dGhpbmcgaWYganVzdCBhIGRyeSBydW4KKysJJG9wdF9kcnlfcnVuIHx8IHsKKysJICBkYXJ3aW5fb3JpZ19kaXI9YHB3ZGAKKysJICBjZCAkbXlfeGRpciB8fCBleGl0ICQ/CisrCSAgZGFyd2luX2FyY2hpdmU9JG15X3hhYnMKKysJICBkYXJ3aW5fY3VyZGlyPWBwd2RgCisrCSAgZGFyd2luX2Jhc2VfYXJjaGl2ZT1gYmFzZW5hbWUgJGRhcndpbl9hcmNoaXZlYAorKwkgIGRhcndpbl9hcmNoZXM9YGxpcG8gLWluZm8gIiRkYXJ3aW5fYXJjaGl2ZSIgMj4vZGV2L251bGwgfCAkR1JFUCBBcmNoaXRlY3R1cmVzIDI+L2Rldi9udWxsIHx8IHRydWVgCisrCSAgaWYgdGVzdCAtbiAiJGRhcndpbl9hcmNoZXMiOyB0aGVuCisrCSAgICBkYXJ3aW5fYXJjaGVzPWAkRUNITyAiJGRhcndpbl9hcmNoZXMiIHwgJFNFRCAtZSAncy8uKmFyZTovLydgCisrCSAgICBkYXJ3aW5fYXJjaD0KKysJICAgIGZ1bmNfZWNobyAiJGRhcndpbl9iYXNlX2FyY2hpdmUgaGFzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgJGRhcndpbl9hcmNoZXMiCisrCSAgICBmb3IgZGFyd2luX2FyY2ggaW4gICRkYXJ3aW5fYXJjaGVzIDsgZG8KKysJICAgICAgZnVuY19ta2Rpcl9wICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9IgorKwkgICAgICBsaXBvIC10aGluICRkYXJ3aW5fYXJjaCAtb3V0cHV0ICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9LyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iICIke2Rhcndpbl9hcmNoaXZlfSIKKysJICAgICAgY2QgInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0iCisrCSAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICJgcHdkYCIgIiR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iCisrCSAgICAgIGNkICIkZGFyd2luX2N1cmRpciIKKysJICAgICAgJFJNICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9LyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iCisrCSAgICBkb25lICMgJGRhcndpbl9hcmNoZXMKKysgICAgICAgICAgICAjIyBPa2F5IG5vdyB3ZSd2ZSBhIGJ1bmNoIG9mIHRoaW4gb2JqZWN0cywgZ290dGEgZmF0dGVuIHRoZW0gdXAgOikKKysJICAgIGRhcndpbl9maWxlbGlzdD1gZmluZCB1bmZhdC0kJCAtdHlwZSBmIC1uYW1lIFwqLm8gLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludHwgeGFyZ3MgYmFzZW5hbWUgfCBzb3J0IC11IHwgJE5MMlNQYAorKwkgICAgZGFyd2luX2ZpbGU9CisrCSAgICBkYXJ3aW5fZmlsZXM9CisrCSAgICBmb3IgZGFyd2luX2ZpbGUgaW4gJGRhcndpbl9maWxlbGlzdDsgZG8KKysJICAgICAgZGFyd2luX2ZpbGVzPWBmaW5kIHVuZmF0LSQkIC1uYW1lICRkYXJ3aW5fZmlsZSAtcHJpbnQgfCAkTkwyU1BgCisrCSAgICAgIGxpcG8gLWNyZWF0ZSAtb3V0cHV0ICIkZGFyd2luX2ZpbGUiICRkYXJ3aW5fZmlsZXMKKysJICAgIGRvbmUgIyAkZGFyd2luX2ZpbGVsaXN0CisrCSAgICAkUk0gLXJmIHVuZmF0LSQkCisrCSAgICBjZCAiJGRhcndpbl9vcmlnX2RpciIKKysJICBlbHNlCisrCSAgICBjZCAkZGFyd2luX29yaWdfZGlyCisrCSAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiJG15X3hkaXIiICIkbXlfeGFicyIKKysJICBmaSAjICRkYXJ3aW5fYXJjaGVzCisrCX0gIyAhJG9wdF9kcnlfcnVuCisrCTs7CisrICAgICAgKikKKysgICAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICIkbXlfeGRpciIgIiRteV94YWJzIgorKwk7OworKyAgICAgIGVzYWMKKysgICAgICBteV9vbGRvYmpzPSIkbXlfb2xkb2JqcyAiYGZpbmQgJG15X3hkaXIgLW5hbWUgXCouJG9iamV4dCAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50IHwgJE5MMlNQYAorKyAgICBkb25lCisrCisrICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQ9IiRteV9vbGRvYmpzIgorK30KKysKKysKKysKKysjIGZ1bmNfd3JpdGVfbGlidG9vbF9vYmplY3Qgb3V0cHV0X25hbWUgcGljX25hbWUgbm9ucGljX25hbWUKKysjIENyZWF0ZSBhIGxpYnRvb2wgb2JqZWN0IGZpbGUgKGFuYWxvZ291cyB0byBhICIubGEiIGZpbGUpLAorKyMgYnV0IGRvbid0IGNyZWF0ZSBpdCBpZiB3ZSdyZSBkb2luZyBhIGRyeSBydW4uCisrZnVuY193cml0ZV9saWJ0b29sX29iamVjdCAoKQorK3sKKysgICAgd3JpdGVfbGlib2JqPSR7MX0KKysgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKysgICAgICB3cml0ZV9sb2JqPVwnJHsyfVwnCisrICAgIGVsc2UKKysgICAgICB3cml0ZV9sb2JqPW5vbmUKKysgICAgZmkKKysKKysgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorKyAgICAgIHdyaXRlX29sZG9iaj1cJyR7M31cJworKyAgICBlbHNlCisrICAgICAgd3JpdGVfb2xkb2JqPW5vbmUKKysgICAgZmkKKysKKysgICAgJG9wdF9kcnlfcnVuIHx8IHsKKysgICAgICBjYXQgPiR7d3JpdGVfbGlib2JqfVQgPDxFT0YKKysjICR3cml0ZV9saWJvYmogLSBhIGxpYnRvb2wgb2JqZWN0IGZpbGUKKysjIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKysjCisrIyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZpbGUhCisrIyBJdCBpcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgdGhlIGxpYnJhcnkuCisrCisrIyBOYW1lIG9mIHRoZSBQSUMgb2JqZWN0LgorK3BpY19vYmplY3Q9JHdyaXRlX2xvYmoKKysKKysjIE5hbWUgb2YgdGhlIG5vbi1QSUMgb2JqZWN0Cisrbm9uX3BpY19vYmplY3Q9JHdyaXRlX29sZG9iagorKworK0VPRgorKyAgICAgIG12IC1mICIke3dyaXRlX2xpYm9ian1UIiAiJHt3cml0ZV9saWJvYmp9IgorKyAgICB9CisrfQorKworKyMgZnVuY19tb2RlX2NvbXBpbGUgYXJnLi4uCisrZnVuY19tb2RlX2NvbXBpbGUgKCkKKyt7CisrICAgICRvcHRfZGVidWcKKysgICAgIyBHZXQgdGhlIGNvbXBpbGF0aW9uIGNvbW1hbmQgYW5kIHRoZSBzb3VyY2UgZmlsZS4KKysgICAgYmFzZV9jb21waWxlPQorKyAgICBzcmNmaWxlPSIkbm9ub3B0IiAgIyAgYWx3YXlzIGtlZXAgYSBub24tZW1wdHkgdmFsdWUgaW4gInNyY2ZpbGUiCisrICAgIHN1cHByZXNzX29wdD15ZXMKKysgICAgc3VwcHJlc3Nfb3V0cHV0PQorKyAgICBhcmdfbW9kZT1ub3JtYWwKKysgICAgbGlib2JqPQorKyAgICBsYXRlcj0KKysgICAgcGllX2ZsYWc9CisrCisrICAgIGZvciBhcmcKKysgICAgZG8KKysgICAgICBjYXNlICRhcmdfbW9kZSBpbgorKyAgICAgIGFyZyAgKQorKwkjIGRvIG5vdCAiY29udGludWUiLiAgSW5zdGVhZCwgYWRkIHRoaXMgdG8gYmFzZV9jb21waWxlCisrCWxhc3Rhcmc9IiRhcmciCisrCWFyZ19tb2RlPW5vcm1hbAorKwk7OworKworKyAgICAgIHRhcmdldCApCisrCWxpYm9iaj0iJGFyZyIKKysJYXJnX21vZGU9bm9ybWFsCisrCWNvbnRpbnVlCisrCTs7CisrCisrICAgICAgbm9ybWFsICkKKysJIyBBY2NlcHQgYW55IGNvbW1hbmQtbGluZSBvcHRpb25zLgorKwljYXNlICRhcmcgaW4KKysJLW8pCisrCSAgdGVzdCAtbiAiJGxpYm9iaiIgJiYgXAorKwkgICAgZnVuY19mYXRhbF9lcnJvciAieW91IGNhbm5vdCBzcGVjaWZ5IFxgLW8nIG1vcmUgdGhhbiBvbmNlIgorKwkgIGFyZ19tb2RlPXRhcmdldAorKwkgIGNvbnRpbnVlCisrCSAgOzsKKysKKysJLXBpZSB8IC1mcGllIHwgLWZQSUUpCisrICAgICAgICAgIHBpZV9mbGFnPSIkcGllX2ZsYWcgJGFyZyIKKysJICBjb250aW51ZQorKwkgIDs7CisrCisrCS1zaGFyZWQgfCAtc3RhdGljIHwgLXByZWZlci1waWMgfCAtcHJlZmVyLW5vbi1waWMpCisrCSAgbGF0ZXI9IiRsYXRlciAkYXJnIgorKwkgIGNvbnRpbnVlCisrCSAgOzsKKysKKysJLW5vLXN1cHByZXNzKQorKwkgIHN1cHByZXNzX29wdD1ubworKwkgIGNvbnRpbnVlCisrCSAgOzsKKysKKysJLVhjb21waWxlcikKKysJICBhcmdfbW9kZT1hcmcgICMgIHRoZSBuZXh0IG9uZSBnb2VzIGludG8gdGhlICJiYXNlX2NvbXBpbGUiIGFyZyBsaXN0CisrCSAgY29udGludWUgICAgICAjICBUaGUgY3VycmVudCAic3JjZmlsZSIgd2lsbCBlaXRoZXIgYmUgcmV0YWluZWQgb3IKKysJICA7OyAgICAgICAgICAgICMgIHJlcGxhY2VkIGxhdGVyLiAgSSB3b3VsZCBndWVzcyB0aGF0IHdvdWxkIGJlIGEgYnVnLgorKworKwktV2MsKikKKysJICBmdW5jX3N0cmlwbmFtZSAnLVdjLCcgJycgIiRhcmciCisrCSAgYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrCSAgbGFzdGFyZz0KKysJICBzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKKysJICBmb3IgYXJnIGluICRhcmdzOyBkbworKwkgICAgSUZTPSIkc2F2ZV9pZnMiCisrCSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorKwkgICAgbGFzdGFyZz0iJGxhc3RhcmcgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKwkgIGRvbmUKKysJICBJRlM9IiRzYXZlX2lmcyIKKysJICBmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRsYXN0YXJnIgorKwkgIGxhc3Rhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKworKwkgICMgQWRkIHRoZSBhcmd1bWVudHMgdG8gYmFzZV9jb21waWxlLgorKwkgIGJhc2VfY29tcGlsZT0iJGJhc2VfY29tcGlsZSAkbGFzdGFyZyIKKysJICBjb250aW51ZQorKwkgIDs7CisrCisrCSopCisrCSAgIyBBY2NlcHQgdGhlIGN1cnJlbnQgYXJndW1lbnQgYXMgdGhlIHNvdXJjZSBmaWxlLgorKwkgICMgVGhlIHByZXZpb3VzICJzcmNmaWxlIiBiZWNvbWVzIHRoZSBjdXJyZW50IGFyZ3VtZW50LgorKwkgICMKKysJICBsYXN0YXJnPSIkc3JjZmlsZSIKKysJICBzcmNmaWxlPSIkYXJnIgorKwkgIDs7CisrCWVzYWMgICMgIGNhc2UgJGFyZworKwk7OworKyAgICAgIGVzYWMgICAgIyAgY2FzZSAkYXJnX21vZGUKKysKKysgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgdGhlIHByZXZpb3VzIGFyZ3VtZW50LgorKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRsYXN0YXJnIgorKyAgICAgIGJhc2VfY29tcGlsZT0iJGJhc2VfY29tcGlsZSAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrICAgIGRvbmUgIyBmb3IgYXJnCisrCisrICAgIGNhc2UgJGFyZ19tb2RlIGluCisrICAgIGFyZykKKysgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIGFyZ3VtZW50IGZvciAtWGNvbXBpbGUiCisrICAgICAgOzsKKysgICAgdGFyZ2V0KQorKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBtdXN0IHNwZWNpZnkgYSB0YXJnZXQgd2l0aCBcYC1vJyIKKysgICAgICA7OworKyAgICAqKQorKyAgICAgICMgR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IG9iamVjdC4KKysgICAgICB0ZXN0IC16ICIkbGlib2JqIiAmJiB7CisrCWZ1bmNfYmFzZW5hbWUgIiRzcmNmaWxlIgorKwlsaWJvYmo9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKysgICAgICB9CisrICAgICAgOzsKKysgICAgZXNhYworKworKyAgICAjIFJlY29nbml6ZSBzZXZlcmFsIGRpZmZlcmVudCBmaWxlIHN1ZmZpeGVzLgorKyAgICAjIElmIHRoZSB1c2VyIHNwZWNpZmllcyAtbyBmaWxlLm8sIGl0IGlzIHJlcGxhY2VkIHdpdGggZmlsZS5sbworKyAgICB4Zm9ybT0nW2NDRlNpZm1zb10nCisrICAgIGNhc2UgJGxpYm9iaiBpbgorKyAgICAqLmFkYSkgeGZvcm09YWRhIDs7CisrICAgICouYWRiKSB4Zm9ybT1hZGIgOzsKKysgICAgKi5hZHMpIHhmb3JtPWFkcyA7OworKyAgICAqLmFzbSkgeGZvcm09YXNtIDs7CisrICAgICouYysrKSB4Zm9ybT1jKysgOzsKKysgICAgKi5jYykgeGZvcm09Y2MgOzsKKysgICAgKi5paSkgeGZvcm09aWkgOzsKKysgICAgKi5jbGFzcykgeGZvcm09Y2xhc3MgOzsKKysgICAgKi5jcHApIHhmb3JtPWNwcCA7OworKyAgICAqLmN4eCkgeGZvcm09Y3h4IDs7CisrICAgICouW2ZGXVswOV0/KSB4Zm9ybT0nW2ZGXVswOV0uJyA7OworKyAgICAqLmZvcikgeGZvcm09Zm9yIDs7CisrICAgICouamF2YSkgeGZvcm09amF2YSA7OworKyAgICAqLm9iaikgeGZvcm09b2JqIDs7CisrICAgIGVzYWMKKysKKysgICAgbGlib2JqPWAkRUNITyAiWCRsaWJvYmoiIHwgJFhzZWQgLWUgInMvXC4keGZvcm0kLy5sby8iYAorKworKyAgICBjYXNlICRsaWJvYmogaW4KKysgICAgKi5sbykgZnVuY19sbzJvICIkbGlib2JqIjsgb2JqPSRmdW5jX2xvMm9fcmVzdWx0IDs7CisrICAgICopCisrICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGRldGVybWluZSBuYW1lIG9mIGxpYnJhcnkgb2JqZWN0IGZyb20gXGAkbGlib2JqJyIKKysgICAgICA7OworKyAgICBlc2FjCisrCisrICAgIGZ1bmNfaW5mZXJfdGFnICRiYXNlX2NvbXBpbGUKKysKKysgICAgZm9yIGFyZyBpbiAkbGF0ZXI7IGRvCisrICAgICAgY2FzZSAkYXJnIGluCisrICAgICAgLXNoYXJlZCkKKysJdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIFwKKysJICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gImNhbiBub3QgYnVpbGQgYSBzaGFyZWQgbGlicmFyeSIKKysJYnVpbGRfb2xkX2xpYnM9bm8KKysJY29udGludWUKKysJOzsKKysKKysgICAgICAtc3RhdGljKQorKwlidWlsZF9saWJ0b29sX2xpYnM9bm8KKysJYnVpbGRfb2xkX2xpYnM9eWVzCisrCWNvbnRpbnVlCisrCTs7CisrCisrICAgICAgLXByZWZlci1waWMpCisrCXBpY19tb2RlPXllcworKwljb250aW51ZQorKwk7OworKworKyAgICAgIC1wcmVmZXItbm9uLXBpYykKKysJcGljX21vZGU9bm8KKysJY29udGludWUKKysJOzsKKysgICAgICBlc2FjCisrICAgIGRvbmUKKysKKysgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGxpYm9iaiIKKysgICAgdGVzdCAiWCRsaWJvYmoiICE9ICJYJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IiBcCisrICAgICAgJiYgJEVDSE8gIlgkbGlib2JqIiB8ICRHUkVQICdbXX4jXip7fTs8Pj8iJyInIicgCSYoKXxgJFtdJyBcCisrICAgICAgJiYgZnVuY193YXJuaW5nICJsaWJvYmogbmFtZSBcYCRsaWJvYmonIG1heSBub3QgY29udGFpbiBzaGVsbCBzcGVjaWFsIGNoYXJhY3RlcnMuIgorKyAgICBmdW5jX2Jhc2VuYW1lICIkb2JqIgorKyAgICBvYmpuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisrICAgIGZ1bmNfZGlybmFtZSAiJG9iaiIgIi8iICIiCisrICAgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorKyAgICBsb2JqPSR7eGRpcn0kb2JqZGlyLyRvYmpuYW1lCisrCisrICAgIHRlc3QgLXogIiRiYXNlX2NvbXBpbGUiICYmIFwKKysgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBjb21waWxhdGlvbiBjb21tYW5kIgorKworKyAgICAjIERlbGV0ZSBhbnkgbGVmdG92ZXIgbGlicmFyeSBvYmplY3RzLgorKyAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisrICAgICAgcmVtb3ZlbGlzdD0iJG9iaiAkbG9iaiAkbGlib2JqICR7bGlib2JqfVQiCisrICAgIGVsc2UKKysgICAgICByZW1vdmVsaXN0PSIkbG9iaiAkbGlib2JqICR7bGlib2JqfVQiCisrICAgIGZpCisrCisrICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKysgICAgdHJhcCAiJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKysKKysgICAgIyBPbiBDeWd3aW4gdGhlcmUncyBubyAicmVhbCIgUElDIGZsYWcgc28gd2UgbXVzdCBidWlsZCBib3RoIG9iamVjdCB0eXBlcworKyAgICBjYXNlICRob3N0X29zIGluCisrICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IG9zMiopCisrICAgICAgcGljX21vZGU9ZGVmYXVsdAorKyAgICAgIDs7CisrICAgIGVzYWMKKysgICAgaWYgdGVzdCAiJHBpY19tb2RlIiA9IG5vICYmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKysgICAgICAjIG5vbi1QSUMgY29kZSBpbiBzaGFyZWQgbGlicmFyaWVzIGlzIG5vdCBzdXBwb3J0ZWQKKysgICAgICBwaWNfbW9kZT1kZWZhdWx0CisrICAgIGZpCisrCisrICAgICMgQ2FsY3VsYXRlIHRoZSBmaWxlbmFtZSBvZiB0aGUgb3V0cHV0IG9iamVjdCBpZiBjb21waWxlciBkb2VzCisrICAgICMgbm90IHN1cHBvcnQgLW8gd2l0aCAtYworKyAgICBpZiB0ZXN0ICIkY29tcGlsZXJfY19vIiA9IG5vOyB0aGVuCisrICAgICAgb3V0cHV0X29iaj1gJEVDSE8gIlgkc3JjZmlsZSIgfCAkWHNlZCAtZSAncyVeLiovJSUnIC1lICdzJVwuW14uXSokJSUnYC4ke29iamV4dH0KKysgICAgICBsb2NrZmlsZT0iJG91dHB1dF9vYmoubG9jayIKKysgICAgICByZW1vdmVsaXN0PSIkcmVtb3ZlbGlzdCAkb3V0cHV0X29iaiAkbG9ja2ZpbGUiCisrICAgICAgdHJhcCAiJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKysgICAgZWxzZQorKyAgICAgIG91dHB1dF9vYmo9CisrICAgICAgbmVlZF9sb2Nrcz1ubworKyAgICAgIGxvY2tmaWxlPQorKyAgICBmaQorKworKyAgICAjIExvY2sgdGhpcyBjcml0aWNhbCBzZWN0aW9uIGlmIGl0IGlzIG5lZWRlZAorKyAgICAjIFdlIHVzZSB0aGlzIHNjcmlwdCBmaWxlIHRvIG1ha2UgdGhlIGxpbmssIGl0IGF2b2lkcyBjcmVhdGluZyBhIG5ldyBmaWxlCisrICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHllczsgdGhlbgorKyAgICAgIHVudGlsICRvcHRfZHJ5X3J1biB8fCBsbiAiJHByb2dwYXRoIiAiJGxvY2tmaWxlIiAyPi9kZXYvbnVsbDsgZG8KKysJZnVuY19lY2hvICJXYWl0aW5nIGZvciAkbG9ja2ZpbGUgdG8gYmUgcmVtb3ZlZCIKKysJc2xlZXAgMgorKyAgICAgIGRvbmUKKysgICAgZWxpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB3YXJuOyB0aGVuCisrICAgICAgaWYgdGVzdCAtZiAiJGxvY2tmaWxlIjsgdGhlbgorKwkkRUNITyAiXAorKyoqKiBFUlJPUiwgJGxvY2tmaWxlIGV4aXN0cyBhbmQgY29udGFpbnM6CisrYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCisrCisrVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQorK3RlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKKyt5b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgXGAtYycgYW5kIFxgLW8nIHRvZ2V0aGVyLiAgSWYgeW91CisrcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgorK2F2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCisrY29tcGlsZXIuIgorKworKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisrCWV4aXQgJEVYSVRfRkFJTFVSRQorKyAgICAgIGZpCisrICAgICAgJEVDSE8gIiRzcmNmaWxlIiA+ICIkbG9ja2ZpbGUiCisrICAgIGZpCisrCisrICAgIGlmIHRlc3QgLW4gIiRmaXhfc3JjZmlsZV9wYXRoIjsgdGhlbgorKyAgICAgIGV2YWwgc3JjZmlsZT1cIiRmaXhfc3JjZmlsZV9wYXRoXCIKKysgICAgZmkKKysgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHNyY2ZpbGUiCisrICAgIHFzcmNmaWxlPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorKworKyAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICIkbGlib2JqIiAiJHtsaWJvYmp9VCIKKysKKysgICAgIyBPbmx5IGJ1aWxkIGEgUElDIG9iamVjdCBpZiB3ZSBhcmUgYnVpbGRpbmcgbGlidG9vbCBsaWJyYXJpZXMuCisrICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisrICAgICAgIyBXaXRob3V0IHRoaXMgYXNzaWdubWVudCwgYmFzZV9jb21waWxlIGdldHMgZW1wdGllZC4KKysgICAgICBmYnNkX2hpZGVvdXNfc2hfYnVnPSRiYXNlX2NvbXBpbGUKKysKKysgICAgICBpZiB0ZXN0ICIkcGljX21vZGUiICE9IG5vOyB0aGVuCisrCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlICRwaWNfZmxhZyIKKysgICAgICBlbHNlCisrCSMgRG9uJ3QgYnVpbGQgUElDIGNvZGUKKysJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUiCisrICAgICAgZmkKKysKKysgICAgICBmdW5jX21rZGlyX3AgIiR4ZGlyJG9iamRpciIKKysKKysgICAgICBpZiB0ZXN0IC16ICIkb3V0cHV0X29iaiI7IHRoZW4KKysJIyBQbGFjZSBQSUMgb2JqZWN0cyBpbiAkb2JqZGlyCisrCWNvbW1hbmQ9IiRjb21tYW5kIC1vICRsb2JqIgorKyAgICAgIGZpCisrCisrICAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAiJGxvYmoiICIkb3V0cHV0X29iaiIKKysKKysgICAgICBmdW5jX3Nob3dfZXZhbCAiJGNvbW1hbmQiCVwKKysgICAgICAgICAgJ3Rlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScKKysKKysgICAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB3YXJuICYmCisrCSB0ZXN0ICJYYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgIiAhPSAiWCRzcmNmaWxlIjsgdGhlbgorKwkkRUNITyAiXAorKyoqKiBFUlJPUiwgJGxvY2tmaWxlIGNvbnRhaW5zOgorK2BjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYAorKworK2J1dCBpdCBzaG91bGQgY29udGFpbjoKKyskc3JjZmlsZQorKworK1RoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKKyt0ZW1wb3Jhcnkgb2JqZWN0IGZpbGUsIGFuZCBsaWJ0b29sIGNvdWxkIG5vdCB3b3JrIGFyb3VuZCBpdCBiZWNhdXNlCisreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IFxgLWMnIGFuZCBcYC1vJyB0b2dldGhlci4gIElmIHlvdQorK3JlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKKythdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgorK2NvbXBpbGVyLiIKKysKKysJJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorKwlleGl0ICRFWElUX0ZBSUxVUkUKKysgICAgICBmaQorKworKyAgICAgICMgSnVzdCBtb3ZlIHRoZSBvYmplY3QgaWYgbmVlZGVkLCB0aGVuIGdvIG9uIHRvIGNvbXBpbGUgdGhlIG5leHQgb25lCisrICAgICAgaWYgdGVzdCAtbiAiJG91dHB1dF9vYmoiICYmIHRlc3QgIlgkb3V0cHV0X29iaiIgIT0gIlgkbG9iaiI7IHRoZW4KKysJZnVuY19zaG93X2V2YWwgJyRNViAiJG91dHB1dF9vYmoiICIkbG9iaiInIFwKKysJICAnZXJyb3I9JD87ICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJGVycm9yJworKyAgICAgIGZpCisrCisrICAgICAgIyBBbGxvdyBlcnJvciBtZXNzYWdlcyBvbmx5IGZyb20gdGhlIGZpcnN0IGNvbXBpbGF0aW9uLgorKyAgICAgIGlmIHRlc3QgIiRzdXBwcmVzc19vcHQiID0geWVzOyB0aGVuCisrCXN1cHByZXNzX291dHB1dD0nID4vZGV2L251bGwgMj4mMScKKysgICAgICBmaQorKyAgICBmaQorKworKyAgICAjIE9ubHkgYnVpbGQgYSBwb3NpdGlvbi1kZXBlbmRlbnQgb2JqZWN0IGlmIHdlIGJ1aWxkIG9sZCBsaWJyYXJpZXMuCisrICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKysgICAgICBpZiB0ZXN0ICIkcGljX21vZGUiICE9IHllczsgdGhlbgorKwkjIERvbid0IGJ1aWxkIFBJQyBjb2RlCisrCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlJHBpZV9mbGFnIgorKyAgICAgIGVsc2UKKysJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUgJHBpY19mbGFnIgorKyAgICAgIGZpCisrICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX2NfbyIgPSB5ZXM7IHRoZW4KKysJY29tbWFuZD0iJGNvbW1hbmQgLW8gJG9iaiIKKysgICAgICBmaQorKworKyAgICAgICMgU3VwcHJlc3MgY29tcGlsZXIgb3V0cHV0IGlmIHdlIGFscmVhZHkgZGlkIGEgUElDIGNvbXBpbGF0aW9uLgorKyAgICAgIGNvbW1hbmQ9IiRjb21tYW5kJHN1cHByZXNzX291dHB1dCIKKysgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICIkb2JqIiAiJG91dHB1dF9vYmoiCisrICAgICAgZnVuY19zaG93X2V2YWwgIiRjb21tYW5kIiBcCisrICAgICAgICAnJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJworKworKyAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHdhcm4gJiYKKysJIHRlc3QgIlhgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAiICE9ICJYJHNyY2ZpbGUiOyB0aGVuCisrCSRFQ0hPICJcCisrKioqIEVSUk9SLCAkbG9ja2ZpbGUgY29udGFpbnM6CisrYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCisrCisrYnV0IGl0IHNob3VsZCBjb250YWluOgorKyRzcmNmaWxlCisrCisrVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQorK3RlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKKyt5b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgXGAtYycgYW5kIFxgLW8nIHRvZ2V0aGVyLiAgSWYgeW91CisrcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgorK2F2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCisrY29tcGlsZXIuIgorKworKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisrCWV4aXQgJEVYSVRfRkFJTFVSRQorKyAgICAgIGZpCisrCisrICAgICAgIyBKdXN0IG1vdmUgdGhlIG9iamVjdCBpZiBuZWVkZWQKKysgICAgICBpZiB0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgdGVzdCAiWCRvdXRwdXRfb2JqIiAhPSAiWCRvYmoiOyB0aGVuCisrCWZ1bmNfc2hvd19ldmFsICckTVYgIiRvdXRwdXRfb2JqIiAiJG9iaiInIFwKKysJICAnZXJyb3I9JD87ICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJGVycm9yJworKyAgICAgIGZpCisrICAgIGZpCisrCisrICAgICRvcHRfZHJ5X3J1biB8fCB7CisrICAgICAgZnVuY193cml0ZV9saWJ0b29sX29iamVjdCAiJGxpYm9iaiIgIiRvYmpkaXIvJG9iam5hbWUiICIkb2JqbmFtZSIKKysKKysgICAgICAjIFVubG9jayB0aGUgY3JpdGljYWwgc2VjdGlvbiBpZiBpdCB3YXMgbG9ja2VkCisrICAgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisrICAgICAgICAkUk0gIiRsb2NrZmlsZSIKKysgICAgICBmaQorKyAgICB9CisrCisrICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworK30KKysKKyt0ZXN0ICIkbW9kZSIgPSBjb21waWxlICYmIGZ1bmNfbW9kZV9jb21waWxlICR7MSsiJEAifQorKworKworKyMgZnVuY19tb2RlX2V4ZWN1dGUgYXJnLi4uCisrZnVuY19tb2RlX2V4ZWN1dGUgKCkKKyt7CisrICAgICRvcHRfZGVidWcKKysgICAgIyBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNvbW1hbmQgbmFtZS4KKysgICAgY21kPSIkbm9ub3B0IgorKyAgICB0ZXN0IC16ICIkY21kIiAmJiBcCisrICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgQ09NTUFORCIKKysKKysgICAgIyBIYW5kbGUgLWRsb3BlbiBmbGFncyBpbW1lZGlhdGVseS4KKysgICAgZm9yIGZpbGUgaW4gJGV4ZWN1dGVfZGxmaWxlczsgZG8KKysgICAgICB0ZXN0IC1mICIkZmlsZSIgXAorKwl8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGZpbGUnIGlzIG5vdCBhIGZpbGUiCisrCisrICAgICAgZGlyPQorKyAgICAgIGNhc2UgJGZpbGUgaW4KKysgICAgICAqLmxhKQorKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorKwlmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAorKwkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisrCisrCSMgUmVhZCB0aGUgbGlidG9vbCBsaWJyYXJ5LgorKwlkbG5hbWU9CisrCWxpYnJhcnlfbmFtZXM9CisrCWZ1bmNfc291cmNlICIkZmlsZSIKKysKKysJIyBTa2lwIHRoaXMgbGlicmFyeSBpZiBpdCBjYW5ub3QgYmUgZGxvcGVuZWQuCisrCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCisrCSAgIyBXYXJuIGlmIGl0IHdhcyBhIHNoYXJlZCBsaWJyYXJ5LgorKwkgIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJiBcCisrCSAgICBmdW5jX3dhcm5pbmcgIlxgJGZpbGUnIHdhcyBub3QgbGlua2VkIHdpdGggXGAtZXhwb3J0LWR5bmFtaWMnIgorKwkgIGNvbnRpbnVlCisrCWZpCisrCisrCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgorKwlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorKworKwlpZiB0ZXN0IC1mICIkZGlyLyRvYmpkaXIvJGRsbmFtZSI7IHRoZW4KKysJICBkaXI9IiRkaXIvJG9iamRpciIKKysJZWxzZQorKwkgIGlmIHRlc3QgISAtZiAiJGRpci8kZGxuYW1lIjsgdGhlbgorKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgXGAkZGxuYW1lJyBpbiBcYCRkaXInIG9yIFxgJGRpci8kb2JqZGlyJyIKKysJICBmaQorKwlmaQorKwk7OworKworKyAgICAgICoubG8pCisrCSMgSnVzdCBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSAubG8gZmlsZS4KKysJZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCisrCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisrCTs7CisrCisrICAgICAgKikKKysJZnVuY193YXJuaW5nICJcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG5vbi1saWJ0b29sIGxpYnJhcmllcyBhbmQgb2JqZWN0cyIKKysJY29udGludWUKKysJOzsKKysgICAgICBlc2FjCisrCisrICAgICAgIyBHZXQgdGhlIGFic29sdXRlIHBhdGhuYW1lLgorKyAgICAgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKKysgICAgICB0ZXN0IC1uICIkYWJzZGlyIiAmJiBkaXI9IiRhYnNkaXIiCisrCisrICAgICAgIyBOb3cgYWRkIHRoZSBkaXJlY3RvcnkgdG8gc2hsaWJwYXRoX3Zhci4KKysgICAgICBpZiBldmFsICJ0ZXN0IC16IFwiXCQkc2hsaWJwYXRoX3ZhclwiIjsgdGhlbgorKwlldmFsICIkc2hsaWJwYXRoX3Zhcj1cIlwkZGlyXCIiCisrICAgICAgZWxzZQorKwlldmFsICIkc2hsaWJwYXRoX3Zhcj1cIlwkZGlyOlwkJHNobGlicGF0aF92YXJcIiIKKysgICAgICBmaQorKyAgICBkb25lCisrCisrICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgc2hsaWJwYXRoX3ZhcgorKyAgICAjIHJhdGhlciB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisrICAgIGxpYnRvb2xfZXhlY3V0ZV9tYWdpYz0iJG1hZ2ljIgorKworKyAgICAjIENoZWNrIGlmIGFueSBvZiB0aGUgYXJndW1lbnRzIGlzIGEgd3JhcHBlciBzY3JpcHQuCisrICAgIGFyZ3M9CisrICAgIGZvciBmaWxlCisrICAgIGRvCisrICAgICAgY2FzZSAkZmlsZSBpbgorKyAgICAgIC0qKSA7OworKyAgICAgICopCisrCSMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIHJlYWxseSBhIGxpYnRvb2wgcHJvZ3JhbS4KKysJaWYgZnVuY19sdHdyYXBwZXJfcCAiJGZpbGUiOyB0aGVuCisrCSAgZnVuY19zb3VyY2UgIiRmaWxlIgorKworKwkgICMgVHJhbnNmb3JtIGFyZyB0byB3cmFwcGVkIG5hbWUuCisrCSAgZmlsZT0iJHByb2dkaXIvJHByb2dyYW0iCisrCWZpCisrCTs7CisrICAgICAgZXNhYworKyAgICAgICMgUXVvdGUgYXJndW1lbnRzICh0byBwcmVzZXJ2ZSBzaGVsbCBtZXRhY2hhcmFjdGVycykuCisrICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZpbGUiCisrICAgICAgYXJncz0iJGFyZ3MgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKyAgICBkb25lCisrCisrICAgIGlmIHRlc3QgIlgkb3B0X2RyeV9ydW4iID0gWGZhbHNlOyB0aGVuCisrICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisrCSMgRXhwb3J0IHRoZSBzaGxpYnBhdGhfdmFyLgorKwlldmFsICJleHBvcnQgJHNobGlicGF0aF92YXIiCisrICAgICAgZmkKKysKKysgICAgICAjIFJlc3RvcmUgc2F2ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzCisrICAgICAgZm9yIGx0X3ZhciBpbiBMQU5HIExDX0FMTCBMQ19DVFlQRSBMQ19DT0xMQVRFIExDX01FU1NBR0VTCisrICAgICAgZG8KKysJZXZhbCAiaWYgdGVzdCBcIlwke3NhdmVfJGx0X3ZhcitzZXR9XCIgPSBzZXQ7IHRoZW4KKysgICAgICAgICAgICAgICAgJGx0X3Zhcj1cJHNhdmVfJGx0X3ZhcjsgZXhwb3J0ICRsdF92YXIKKysJICAgICAgZWxzZQorKwkJJGx0X3Vuc2V0ICRsdF92YXIKKysJICAgICAgZmkiCisrICAgICAgZG9uZQorKworKyAgICAgICMgTm93IHByZXBhcmUgdG8gYWN0dWFsbHkgZXhlYyB0aGUgY29tbWFuZC4KKysgICAgICBleGVjX2NtZD0iXCRjbWQkYXJncyIKKysgICAgZWxzZQorKyAgICAgICMgRGlzcGxheSB3aGF0IHdvdWxkIGJlIGRvbmUuCisrICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisrCWV2YWwgIlwkRUNITyBcIlwkc2hsaWJwYXRoX3Zhcj1cJCRzaGxpYnBhdGhfdmFyXCIiCisrCSRFQ0hPICJleHBvcnQgJHNobGlicGF0aF92YXIiCisrICAgICAgZmkKKysgICAgICAkRUNITyAiJGNtZCRhcmdzIgorKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworKyAgICBmaQorK30KKysKKyt0ZXN0ICIkbW9kZSIgPSBleGVjdXRlICYmIGZ1bmNfbW9kZV9leGVjdXRlICR7MSsiJEAifQorKworKworKyMgZnVuY19tb2RlX2ZpbmlzaCBhcmcuLi4KKytmdW5jX21vZGVfZmluaXNoICgpCisreworKyAgICAkb3B0X2RlYnVnCisrICAgIGxpYmRpcnM9IiRub25vcHQiCisrICAgIGFkbWluY21kcz0KKysKKysgICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KKysgICAgICBmb3IgZGlyCisrICAgICAgZG8KKysJbGliZGlycz0iJGxpYmRpcnMgJGRpciIKKysgICAgICBkb25lCisrCisrICAgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKysJaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzIjsgdGhlbgorKwkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBmaW5pc2ggY29tbWFuZHMuCisrCSAgZnVuY19leGVjdXRlX2NtZHMgIiRmaW5pc2hfY21kcyIgJ2FkbWluY21kcz0iJGFkbWluY21kcworKyciJGNtZCInIicKKysJZmkKKysJaWYgdGVzdCAtbiAiJGZpbmlzaF9ldmFsIjsgdGhlbgorKwkgICMgRG8gdGhlIHNpbmdsZSBmaW5pc2hfZXZhbC4KKysJICBldmFsIGNtZHM9XCIkZmluaXNoX2V2YWxcIgorKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kcyIgfHwgYWRtaW5jbWRzPSIkYWRtaW5jbWRzCisrICAgICAgICRjbWRzIgorKwlmaQorKyAgICAgIGRvbmUKKysgICAgZmkKKysKKysgICAgIyBFeGl0IGhlcmUgaWYgdGhleSB3YW50ZWQgc2lsZW50IG1vZGUuCisrICAgICRvcHRfc2lsZW50ICYmIGV4aXQgJEVYSVRfU1VDQ0VTUworKworKyAgICAkRUNITyAiWC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iIHwgJFhzZWQKKysgICAgJEVDSE8gIkxpYnJhcmllcyBoYXZlIGJlZW4gaW5zdGFsbGVkIGluOiIKKysgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKysgICAgICAkRUNITyAiICAgJGxpYmRpciIKKysgICAgZG9uZQorKyAgICAkRUNITworKyAgICAkRUNITyAiSWYgeW91IGV2ZXIgaGFwcGVuIHRvIHdhbnQgdG8gbGluayBhZ2FpbnN0IGluc3RhbGxlZCBsaWJyYXJpZXMiCisrICAgICRFQ0hPICJpbiBhIGdpdmVuIGRpcmVjdG9yeSwgTElCRElSLCB5b3UgbXVzdCBlaXRoZXIgdXNlIGxpYnRvb2wsIGFuZCIKKysgICAgJEVDSE8gInNwZWNpZnkgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGxpYnJhcnksIG9yIHVzZSB0aGUgXGAtTExJQkRJUiciCisrICAgICRFQ0hPICJmbGFnIGR1cmluZyBsaW5raW5nIGFuZCBkbyBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZzoiCisrICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorKyAgICAgICRFQ0hPICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHNobGlicGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorKyAgICAgICRFQ0hPICIgICAgIGR1cmluZyBleGVjdXRpb24iCisrICAgIGZpCisrICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKysgICAgICAkRUNITyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRydW5wYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCisrICAgICAgJEVDSE8gIiAgICAgZHVyaW5nIGxpbmtpbmciCisrICAgIGZpCisrICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorKyAgICAgIGxpYmRpcj1MSUJESVIKKysgICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrCisrICAgICAgJEVDSE8gIiAgIC0gdXNlIHRoZSBcYCRmbGFnJyBsaW5rZXIgZmxhZyIKKysgICAgZmkKKysgICAgaWYgdGVzdCAtbiAiJGFkbWluY21kcyI7IHRoZW4KKysgICAgICAkRUNITyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgcnVuIHRoZXNlIGNvbW1hbmRzOiRhZG1pbmNtZHMiCisrICAgIGZpCisrICAgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisrICAgICAgJEVDSE8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGFkZCBMSUJESVIgdG8gXGAvZXRjL2xkLnNvLmNvbmYnIgorKyAgICBmaQorKyAgICAkRUNITworKworKyAgICAkRUNITyAiU2VlIGFueSBvcGVyYXRpbmcgc3lzdGVtIGRvY3VtZW50YXRpb24gYWJvdXQgc2hhcmVkIGxpYnJhcmllcyBmb3IiCisrICAgIGNhc2UgJGhvc3QgaW4KKysgICAgICBzb2xhcmlzMi5bNjc4OV18c29sYXJpczIuMVswLTldKQorKyAgICAgICAgJEVDSE8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpLCBjcmxlKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwiCisrCSRFQ0hPICJwYWdlcy4iCisrCTs7CisrICAgICAgKikKKysgICAgICAgICRFQ0hPICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSBhbmQgbGQuc28oOCkgbWFudWFsIHBhZ2VzLiIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgJEVDSE8gIlgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiB8ICRYc2VkCisrICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworK30KKysKKyt0ZXN0ICIkbW9kZSIgPSBmaW5pc2ggJiYgZnVuY19tb2RlX2ZpbmlzaCAkezErIiRAIn0KKysKKysKKysjIGZ1bmNfbW9kZV9pbnN0YWxsIGFyZy4uLgorK2Z1bmNfbW9kZV9pbnN0YWxsICgpCisreworKyAgICAkb3B0X2RlYnVnCisrICAgICMgVGhlcmUgbWF5IGJlIGFuIG9wdGlvbmFsIHNoKDEpIGFyZ3VtZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YKKysgICAgIyBpbnN0YWxsX3Byb2cgKGVzcGVjaWFsbHkgb24gV2luZG93cyBOVCkuCisrICAgIGlmIHRlc3QgIiRub25vcHQiID0gIiRTSEVMTCIgfHwgdGVzdCAiJG5vbm9wdCIgPSAvYmluL3NoIHx8CisrICAgICAgICMgQWxsb3cgdGhlIHVzZSBvZiBHTlUgc2h0b29sJ3MgaW5zdGFsbCBjb21tYW5kLgorKyAgICAgICAkRUNITyAiWCRub25vcHQiIHwgJEdSRVAgc2h0b29sID4vZGV2L251bGw7IHRoZW4KKysgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgaXQuCisrICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJG5vbm9wdCIKKysgICAgICBpbnN0YWxsX3Byb2c9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCAiCisrICAgICAgYXJnPSQxCisrICAgICAgc2hpZnQKKysgICAgZWxzZQorKyAgICAgIGluc3RhbGxfcHJvZz0KKysgICAgICBhcmc9JG5vbm9wdAorKyAgICBmaQorKworKyAgICAjIFRoZSByZWFsIGZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgaW5zdGFsbGF0aW9uIHByb2dyYW0uCisrICAgICMgQWVzdGhldGljYWxseSBxdW90ZSBpdC4KKysgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKysgICAgaW5zdGFsbF9wcm9nPSIkaW5zdGFsbF9wcm9nJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKworKyAgICAjIFdlIG5lZWQgdG8gYWNjZXB0IGF0IGxlYXN0IGFsbCB0aGUgQlNEIGluc3RhbGwgZmxhZ3MuCisrICAgIGRlc3Q9CisrICAgIGZpbGVzPQorKyAgICBvcHRzPQorKyAgICBwcmV2PQorKyAgICBpbnN0YWxsX3R5cGU9CisrICAgIGlzZGlyPW5vCisrICAgIHN0cmlwbWU9CisrICAgIGZvciBhcmcKKysgICAgZG8KKysgICAgICBpZiB0ZXN0IC1uICIkZGVzdCI7IHRoZW4KKysJZmlsZXM9IiRmaWxlcyAkZGVzdCIKKysJZGVzdD0kYXJnCisrCWNvbnRpbnVlCisrICAgICAgZmkKKysKKysgICAgICBjYXNlICRhcmcgaW4KKysgICAgICAtZCkgaXNkaXI9eWVzIDs7CisrICAgICAgLWYpCisrICAgICAgCWNhc2UgIiAkaW5zdGFsbF9wcm9nICIgaW4KKysJKltcXFwgL11jcFwgKikgOzsKKysJKikgcHJldj0kYXJnIDs7CisrCWVzYWMKKysJOzsKKysgICAgICAtZyB8IC1tIHwgLW8pCisrCXByZXY9JGFyZworKwk7OworKyAgICAgIC1zKQorKwlzdHJpcG1lPSIgLXMiCisrCWNvbnRpbnVlCisrCTs7CisrICAgICAgLSopCisrCTs7CisrICAgICAgKikKKysJIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRlZCBhbiBhcmd1bWVudCwgdGhlbiBza2lwIGl0LgorKwlpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KKysJICBwcmV2PQorKwllbHNlCisrCSAgZGVzdD0kYXJnCisrCSAgY29udGludWUKKysJZmkKKysJOzsKKysgICAgICBlc2FjCisrCisrICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBhcmd1bWVudC4KKysgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorKyAgICAgIGluc3RhbGxfcHJvZz0iJGluc3RhbGxfcHJvZyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrICAgIGRvbmUKKysKKysgICAgdGVzdCAteiAiJGluc3RhbGxfcHJvZyIgJiYgXAorKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBpbnN0YWxsIHByb2dyYW0iCisrCisrICAgIHRlc3QgLW4gIiRwcmV2IiAmJiBcCisrICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgXGAkcHJldicgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgorKworKyAgICBpZiB0ZXN0IC16ICIkZmlsZXMiOyB0aGVuCisrICAgICAgaWYgdGVzdCAteiAiJGRlc3QiOyB0aGVuCisrCWZ1bmNfZmF0YWxfaGVscCAibm8gZmlsZSBvciBkZXN0aW5hdGlvbiBzcGVjaWZpZWQiCisrICAgICAgZWxzZQorKwlmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBkZXN0aW5hdGlvbiIKKysgICAgICBmaQorKyAgICBmaQorKworKyAgICAjIFN0cmlwIGFueSB0cmFpbGluZyBzbGFzaCBmcm9tIHRoZSBkZXN0aW5hdGlvbi4KKysgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkZGVzdCIKKysgICAgZGVzdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrCisrICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LgorKyAgICB0ZXN0IC1kICIkZGVzdCIgJiYgaXNkaXI9eWVzCisrICAgIGlmIHRlc3QgIiRpc2RpciIgPSB5ZXM7IHRoZW4KKysgICAgICBkZXN0ZGlyPSIkZGVzdCIKKysgICAgICBkZXN0bmFtZT0KKysgICAgZWxzZQorKyAgICAgIGZ1bmNfZGlybmFtZSAiJGRlc3QiICIiICIuIgorKyAgICAgIGRlc3RkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorKyAgICAgIGZ1bmNfYmFzZW5hbWUgIiRkZXN0IgorKyAgICAgIGRlc3RuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisrCisrICAgICAgIyBOb3QgYSBkaXJlY3RvcnksIHNvIGNoZWNrIHRvIHNlZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGZpbGUgc3BlY2lmaWVkLgorKyAgICAgIHNldCBkdW1teSAkZmlsZXM7IHNoaWZ0CisrICAgICAgdGVzdCAiJCMiIC1ndCAxICYmIFwKKysJZnVuY19mYXRhbF9oZWxwICJcYCRkZXN0JyBpcyBub3QgYSBkaXJlY3RvcnkiCisrICAgIGZpCisrICAgIGNhc2UgJGRlc3RkaXIgaW4KKysgICAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworKyAgICAqKQorKyAgICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KKysJY2FzZSAkZmlsZSBpbgorKwkqLmxvKSA7OworKwkqKQorKwkgIGZ1bmNfZmF0YWxfaGVscCAiXGAkZGVzdGRpcicgbXVzdCBiZSBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSIKKysJICA7OworKwllc2FjCisrICAgICAgZG9uZQorKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCisrICAgICMgdGhhbiBydW5uaW5nIHRoZWlyIHByb2dyYW1zLgorKyAgICBsaWJ0b29sX2luc3RhbGxfbWFnaWM9IiRtYWdpYyIKKysKKysgICAgc3RhdGljbGlicz0KKysgICAgZnV0dXJlX2xpYmRpcnM9CisrICAgIGN1cnJlbnRfbGliZGlycz0KKysgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbworKworKyAgICAgICMgRG8gZWFjaCBpbnN0YWxsYXRpb24uCisrICAgICAgY2FzZSAkZmlsZSBpbgorKyAgICAgICouJGxpYmV4dCkKKysJIyBEbyB0aGUgc3RhdGljIGxpYnJhcmllcyBsYXRlci4KKysJc3RhdGljbGlicz0iJHN0YXRpY2xpYnMgJGZpbGUiCisrCTs7CisrCisrICAgICAgKi5sYSkKKysJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKysJZnVuY19sYWxpYl91bnNhZmVfcCAiJGZpbGUiIFwKKysJICB8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGZpbGUnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKysKKysJbGlicmFyeV9uYW1lcz0KKysJb2xkX2xpYnJhcnk9CisrCXJlbGlua19jb21tYW5kPQorKwlmdW5jX3NvdXJjZSAiJGZpbGUiCisrCisrCSMgQWRkIHRoZSBsaWJkaXIgdG8gY3VycmVudF9saWJkaXJzIGlmIGl0IGlzIHRoZSBkZXN0aW5hdGlvbi4KKysJaWYgdGVzdCAiWCRkZXN0ZGlyIiA9ICJYJGxpYmRpciI7IHRoZW4KKysJICBjYXNlICIkY3VycmVudF9saWJkaXJzICIgaW4KKysJICAqIiAkbGliZGlyICIqKSA7OworKwkgICopIGN1cnJlbnRfbGliZGlycz0iJGN1cnJlbnRfbGliZGlycyAkbGliZGlyIiA7OworKwkgIGVzYWMKKysJZWxzZQorKwkgICMgTm90ZSB0aGUgbGliZGlyIGFzIGEgZnV0dXJlIGxpYmRpci4KKysJICBjYXNlICIkZnV0dXJlX2xpYmRpcnMgIiBpbgorKwkgICoiICRsaWJkaXIgIiopIDs7CisrCSAgKikgZnV0dXJlX2xpYmRpcnM9IiRmdXR1cmVfbGliZGlycyAkbGliZGlyIiA7OworKwkgIGVzYWMKKysJZmkKKysKKysJZnVuY19kaXJuYW1lICIkZmlsZSIgIi8iICIiCisrCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisrCWRpcj0iJGRpciRvYmpkaXIiCisrCisrCWlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKysJICAjIERldGVybWluZSB0aGUgcHJlZml4IHRoZSB1c2VyIGhhcyBhcHBsaWVkIHRvIG91ciBmdXR1cmUgZGlyLgorKwkgIGluc3RfcHJlZml4X2Rpcj1gJEVDSE8gIlgkZGVzdGRpciIgfCAkWHNlZCAtZSAicyUkbGliZGlyXCQlJSJgCisrCisrCSAgIyBEb24ndCBhbGxvdyB0aGUgdXNlciB0byBwbGFjZSB1cyBvdXRzaWRlIG9mIG91ciBleHBlY3RlZAorKwkgICMgbG9jYXRpb24gYi9jIHRoaXMgcHJldmVudHMgZmluZGluZyBkZXBlbmRlbnQgbGlicmFyaWVzIHRoYXQKKysJICAjIGFyZSBpbnN0YWxsZWQgdG8gdGhlIHNhbWUgcHJlZml4LgorKwkgICMgQXQgcHJlc2VudCwgdGhpcyBjaGVjayBkb2Vzbid0IGFmZmVjdCB3aW5kb3dzIC5kbGwncyB0aGF0CisrCSAgIyBhcmUgaW5zdGFsbGVkIGludG8gJGxpYmRpci8uLi9iaW4gKGN1cnJlbnRseSwgdGhhdCB3b3JrcyBmaW5lKQorKwkgICMgYnV0IGl0J3Mgc29tZXRoaW5nIHRvIGtlZXAgYW4gZXllIG9uLgorKwkgIHRlc3QgIiRpbnN0X3ByZWZpeF9kaXIiID0gIiRkZXN0ZGlyIiAmJiBcCisrCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJlcnJvcjogY2Fubm90IGluc3RhbGwgXGAkZmlsZScgdG8gYSBkaXJlY3Rvcnkgbm90IGVuZGluZyBpbiAkbGliZGlyIgorKworKwkgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisrCSAgICAjIFN0aWNrIHRoZSBpbnN0X3ByZWZpeF9kaXIgZGF0YSBpbnRvIHRoZSBsaW5rIGNvbW1hbmQuCisrCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIlgkcmVsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQGluc3RfcHJlZml4X2RpckAlLWluc3QtcHJlZml4LWRpciAkaW5zdF9wcmVmaXhfZGlyJSJgCisrCSAgZWxzZQorKwkgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICJYJHJlbGlua19jb21tYW5kIiB8ICRYc2VkIC1lICJzJUBpbnN0X3ByZWZpeF9kaXJAJSUiYAorKwkgIGZpCisrCisrCSAgZnVuY193YXJuaW5nICJyZWxpbmtpbmcgXGAkZmlsZSciCisrCSAgZnVuY19zaG93X2V2YWwgIiRyZWxpbmtfY29tbWFuZCIgXAorKwkgICAgJ2Z1bmNfZmF0YWxfZXJyb3IgImVycm9yOiByZWxpbmsgXGAkZmlsZSdcJycgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCInCisrCWZpCisrCisrCSMgU2VlIHRoZSBuYW1lcyBvZiB0aGUgc2hhcmVkIGxpYnJhcnkuCisrCXNldCBkdW1teSAkbGlicmFyeV9uYW1lczsgc2hpZnQKKysJaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisrCSAgcmVhbG5hbWU9IiQxIgorKwkgIHNoaWZ0CisrCisrCSAgc3JjbmFtZT0iJHJlYWxuYW1lIgorKwkgIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCIgJiYgc3JjbmFtZT0iJHJlYWxuYW1lIlQKKysKKysJICAjIEluc3RhbGwgdGhlIHNoYXJlZCBsaWJyYXJ5IGFuZCBidWlsZCB0aGUgc3ltbGlua3MuCisrCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgJGRpci8kc3JjbmFtZSAkZGVzdGRpci8kcmVhbG5hbWUiIFwKKysJICAgICAgJ2V4aXQgJD8nCisrCSAgdHN0cmlwbWU9IiRzdHJpcG1lIgorKwkgIGNhc2UgJGhvc3Rfb3MgaW4KKysJICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisrCSAgICBjYXNlICRyZWFsbmFtZSBpbgorKwkgICAgKi5kbGwuYSkKKysJICAgICAgdHN0cmlwbWU9IiIKKysJICAgICAgOzsKKysJICAgIGVzYWMKKysJICAgIDs7CisrCSAgZXNhYworKwkgIGlmIHRlc3QgLW4gIiR0c3RyaXBtZSIgJiYgdGVzdCAtbiAiJHN0cmlwbGliIjsgdGhlbgorKwkgICAgZnVuY19zaG93X2V2YWwgIiRzdHJpcGxpYiAkZGVzdGRpci8kcmVhbG5hbWUiICdleGl0ICQ/JworKwkgIGZpCisrCisrCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCisrCSAgICAjIERlbGV0ZSB0aGUgb2xkIHN5bWxpbmtzLCBhbmQgY3JlYXRlIG5ldyBvbmVzLgorKwkgICAgIyBUcnkgYGxuIC1zZicgZmlyc3QsIGJlY2F1c2UgdGhlIGBsbicgYmluYXJ5IG1pZ2h0IGRlcGVuZCBvbgorKwkgICAgIyB0aGUgc3ltbGluayB3ZSByZXBsYWNlISAgU29sYXJpcyAvYmluL2xuIGRvZXMgbm90IHVuZGVyc3RhbmQgLWYsCisrCSAgICAjIHNvIHdlIGFsc28gbmVlZCB0byB0cnkgcm0gJiYgbG4gLXMuCisrCSAgICBmb3IgbGlua25hbWUKKysJICAgIGRvCisrCSAgICAgIHRlc3QgIiRsaW5rbmFtZSIgIT0gIiRyZWFsbmFtZSIgXAorKwkJJiYgZnVuY19zaG93X2V2YWwgIihjZCAkZGVzdGRpciAmJiB7ICRMTl9TIC1mICRyZWFsbmFtZSAkbGlua25hbWUgfHwgeyAkUk0gJGxpbmtuYW1lICYmICRMTl9TICRyZWFsbmFtZSAkbGlua25hbWU7IH07IH0pIgorKwkgICAgZG9uZQorKwkgIGZpCisrCisrCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgorKwkgIGxpYj0iJGRlc3RkaXIvJHJlYWxuYW1lIgorKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGluc3RhbGxfY21kcyIgJ2V4aXQgJD8nCisrCWZpCisrCisrCSMgSW5zdGFsbCB0aGUgcHNldWRvLWxpYnJhcnkgZm9yIGluZm9ybWF0aW9uIHB1cnBvc2VzLgorKwlmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKysJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorKwlpbnN0bmFtZT0iJGRpci8kbmFtZSJpCisrCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRpbnN0bmFtZSAkZGVzdGRpci8kbmFtZSIgJ2V4aXQgJD8nCisrCisrCSMgTWF5YmUgaW5zdGFsbCB0aGUgc3RhdGljIGxpYnJhcnksIHRvby4KKysJdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBzdGF0aWNsaWJzPSIkc3RhdGljbGlicyAkZGlyLyRvbGRfbGlicmFyeSIKKysJOzsKKysKKysgICAgICAqLmxvKQorKwkjIEluc3RhbGwgKGkuZS4gY29weSkgYSBsaWJ0b29sIG9iamVjdC4KKysKKysJIyBGaWd1cmUgb3V0IGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgaWYgaXQgd2Fzbid0IGFscmVhZHkgc3BlY2lmaWVkLgorKwlpZiB0ZXN0IC1uICIkZGVzdG5hbWUiOyB0aGVuCisrCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0bmFtZSIKKysJZWxzZQorKwkgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorKwkgIGRlc3RmaWxlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisrCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0ZmlsZSIKKysJZmkKKysKKysJIyBEZWR1Y2UgdGhlIG5hbWUgb2YgdGhlIGRlc3RpbmF0aW9uIG9sZC1zdHlsZSBvYmplY3QgZmlsZS4KKysJY2FzZSAkZGVzdGZpbGUgaW4KKysJKi5sbykKKysJICBmdW5jX2xvMm8gIiRkZXN0ZmlsZSIKKysJICBzdGF0aWNkZXN0PSRmdW5jX2xvMm9fcmVzdWx0CisrCSAgOzsKKysJKi4kb2JqZXh0KQorKwkgIHN0YXRpY2Rlc3Q9IiRkZXN0ZmlsZSIKKysJICBkZXN0ZmlsZT0KKysJICA7OworKwkqKQorKwkgIGZ1bmNfZmF0YWxfaGVscCAiY2Fubm90IGNvcHkgYSBsaWJ0b29sIG9iamVjdCB0byBcYCRkZXN0ZmlsZSciCisrCSAgOzsKKysJZXNhYworKworKwkjIEluc3RhbGwgdGhlIGxpYnRvb2wgb2JqZWN0IGlmIHJlcXVlc3RlZC4KKysJdGVzdCAtbiAiJGRlc3RmaWxlIiAmJiBcCisrCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgJGZpbGUgJGRlc3RmaWxlIiAnZXhpdCAkPycKKysKKysJIyBJbnN0YWxsIHRoZSBvbGQgb2JqZWN0IGlmIGVuYWJsZWQuCisrCWlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKysJICAjIERlZHVjZSB0aGUgbmFtZSBvZiB0aGUgb2xkLXN0eWxlIG9iamVjdCBmaWxlLgorKwkgIGZ1bmNfbG8ybyAiJGZpbGUiCisrCSAgc3RhdGljb2JqPSRmdW5jX2xvMm9fcmVzdWx0CisrCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgXCRzdGF0aWNvYmogXCRzdGF0aWNkZXN0IiAnZXhpdCAkPycKKysJZmkKKysJZXhpdCAkRVhJVF9TVUNDRVNTCisrCTs7CisrCisrICAgICAgKikKKysJIyBGaWd1cmUgb3V0IGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgaWYgaXQgd2Fzbid0IGFscmVhZHkgc3BlY2lmaWVkLgorKwlpZiB0ZXN0IC1uICIkZGVzdG5hbWUiOyB0aGVuCisrCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0bmFtZSIKKysJZWxzZQorKwkgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorKwkgIGRlc3RmaWxlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisrCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0ZmlsZSIKKysJZmkKKysKKysJIyBJZiB0aGUgZmlsZSBpcyBtaXNzaW5nLCBhbmQgdGhlcmUgaXMgYSAuZXhlIG9uIHRoZSBlbmQsIHN0cmlwIGl0CisrCSMgYmVjYXVzZSBpdCBpcyBtb3N0IGxpa2VseSBhIGxpYnRvb2wgc2NyaXB0IHdlIGFjdHVhbGx5IHdhbnQgdG8KKysJIyBpbnN0YWxsCisrCXN0cmlwcGVkX2V4dD0iIgorKwljYXNlICRmaWxlIGluCisrCSAgKi5leGUpCisrCSAgICBpZiB0ZXN0ICEgLWYgIiRmaWxlIjsgdGhlbgorKwkgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgorKwkgICAgICBmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysJICAgICAgc3RyaXBwZWRfZXh0PSIuZXhlIgorKwkgICAgZmkKKysJICAgIDs7CisrCWVzYWMKKysKKysJIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgcmVhbGx5IGEgbGlidG9vbCBwcm9ncmFtLgorKwljYXNlICRob3N0IGluCisrCSpjeWd3aW4qfCptaW5ndyopCisrCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgorKwkgICAgd3JhcHBlcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrCSAgICA7OworKwkqKQorKwkgICAgd3JhcHBlcj0kZmlsZQorKwkgICAgOzsKKysJZXNhYworKwlpZiBmdW5jX2x0d3JhcHBlcl9wICIkd3JhcHBlciI7IHRoZW4KKysJICBub3RpbnN0X2RlcGxpYnM9CisrCSAgcmVsaW5rX2NvbW1hbmQ9CisrCisrCSAgZnVuY19zb3VyY2UgIiR3cmFwcGVyIgorKworKwkgICMgQ2hlY2sgdGhlIHZhcmlhYmxlcyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gc2V0LgorKwkgIHRlc3QgLXogIiRnZW5lcmF0ZWRfYnlfbGlidG9vbF92ZXJzaW9uIiAmJiBcCisrCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgXGAkd3JhcHBlciciCisrCisrCSAgZmluYWxpemU9eWVzCisrCSAgZm9yIGxpYiBpbiAkbm90aW5zdF9kZXBsaWJzOyBkbworKwkgICAgIyBDaGVjayB0byBzZWUgdGhhdCBlYWNoIGxpYnJhcnkgaXMgaW5zdGFsbGVkLgorKwkgICAgbGliZGlyPQorKwkgICAgaWYgdGVzdCAtZiAiJGxpYiI7IHRoZW4KKysJICAgICAgZnVuY19zb3VyY2UgIiRsaWIiCisrCSAgICBmaQorKwkgICAgbGliZmlsZT0iJGxpYmRpci8iYCRFQ0hPICJYJGxpYiIgfCAkWHNlZCAtZSAncyVeLiovJSVnJ2AgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0CisrCSAgICBpZiB0ZXN0IC1uICIkbGliZGlyIiAmJiB0ZXN0ICEgLWYgIiRsaWJmaWxlIjsgdGhlbgorKwkgICAgICBmdW5jX3dhcm5pbmcgIlxgJGxpYicgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBcYCRsaWJkaXInIgorKwkgICAgICBmaW5hbGl6ZT1ubworKwkgICAgZmkKKysJICBkb25lCisrCisrCSAgcmVsaW5rX2NvbW1hbmQ9CisrCSAgZnVuY19zb3VyY2UgIiR3cmFwcGVyIgorKworKwkgIG91dHB1dG5hbWU9CisrCSAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSBubyAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisrCSAgICAkb3B0X2RyeV9ydW4gfHwgeworKwkgICAgICBpZiB0ZXN0ICIkZmluYWxpemUiID0geWVzOyB0aGVuCisrCSAgICAgICAgdG1wZGlyPWBmdW5jX21rdGVtcGRpcmAKKysJCWZ1bmNfYmFzZW5hbWUgIiRmaWxlJHN0cmlwcGVkX2V4dCIKKysJCWZpbGU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKysJICAgICAgICBvdXRwdXRuYW1lPSIkdG1wZGlyLyRmaWxlIgorKwkgICAgICAgICMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKysJICAgICAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIlgkcmVsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0bmFtZSInJWcnYAorKworKwkgICAgICAgICRvcHRfc2lsZW50IHx8IHsKKysJICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJHJlbGlua19jb21tYW5kIgorKwkJICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisrCSAgICAgICAgfQorKwkgICAgICAgIGlmIGV2YWwgIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4gOgorKwkgICAgICAgICAgZWxzZQorKwkJICBmdW5jX2Vycm9yICJlcnJvcjogcmVsaW5rIFxgJGZpbGUnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQiCisrCQkgICRvcHRfZHJ5X3J1biB8fCAke1JNfXIgIiR0bXBkaXIiCisrCQkgIGNvbnRpbnVlCisrCSAgICAgICAgZmkKKysJICAgICAgICBmaWxlPSIkb3V0cHV0bmFtZSIKKysJICAgICAgZWxzZQorKwkgICAgICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IHJlbGluayBcYCRmaWxlJyIKKysJICAgICAgZmkKKysJICAgIH0KKysJICBlbHNlCisrCSAgICAjIEluc3RhbGwgdGhlIGJpbmFyeSB0aGF0IHdlIGNvbXBpbGVkIGVhcmxpZXIuCisrCSAgICBmaWxlPWAkRUNITyAiWCRmaWxlJHN0cmlwcGVkX2V4dCIgfCAkWHNlZCAtZSAicyVcKFteL10qXCkkJSRvYmpkaXIvXDElImAKKysJICBmaQorKwlmaQorKworKwkjIHJlbW92ZSAuZXhlIHNpbmNlIGN5Z3dpbiAvdXNyL2Jpbi9pbnN0YWxsIHdpbGwgYXBwZW5kIGFub3RoZXIKKysJIyBvbmUgYW55d2F5CisrCWNhc2UgJGluc3RhbGxfcHJvZywkaG9zdCBpbgorKwkqL3Vzci9iaW4vaW5zdGFsbCosKmN5Z3dpbiopCisrCSAgY2FzZSAkZmlsZTokZGVzdGZpbGUgaW4KKysJICAqLmV4ZToqLmV4ZSkKKysJICAgICMgdGhpcyBpcyBvaworKwkgICAgOzsKKysJICAqLmV4ZToqKQorKwkgICAgZGVzdGZpbGU9JGRlc3RmaWxlLmV4ZQorKwkgICAgOzsKKysJICAqOiouZXhlKQorKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZGVzdGZpbGUiCisrCSAgICBkZXN0ZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrCSAgICA7OworKwkgIGVzYWMKKysJICA7OworKwllc2FjCisrCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nXCRzdHJpcG1lIFwkZmlsZSBcJGRlc3RmaWxlIiAnZXhpdCAkPycKKysJJG9wdF9kcnlfcnVuIHx8IGlmIHRlc3QgLW4gIiRvdXRwdXRuYW1lIjsgdGhlbgorKwkgICR7Uk19ciAiJHRtcGRpciIKKysJZmkKKysJOzsKKysgICAgICBlc2FjCisrICAgIGRvbmUKKysKKysgICAgZm9yIGZpbGUgaW4gJHN0YXRpY2xpYnM7IGRvCisrICAgICAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisrICAgICAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorKworKyAgICAgICMgU2V0IHVwIHRoZSByYW5saWIgcGFyYW1ldGVycy4KKysgICAgICBvbGRsaWI9IiRkZXN0ZGlyLyRuYW1lIgorKworKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nIFwkZmlsZSBcJG9sZGxpYiIgJ2V4aXQgJD8nCisrCisrICAgICAgaWYgdGVzdCAtbiAiJHN0cmlwbWUiICYmIHRlc3QgLW4gIiRvbGRfc3RyaXBsaWIiOyB0aGVuCisrCWZ1bmNfc2hvd19ldmFsICIkb2xkX3N0cmlwbGliICRvbGRsaWIiICdleGl0ICQ/JworKyAgICAgIGZpCisrCisrICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgorKyAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiICdleGl0ICQ/JworKyAgICBkb25lCisrCisrICAgIHRlc3QgLW4gIiRmdXR1cmVfbGliZGlycyIgJiYgXAorKyAgICAgIGZ1bmNfd2FybmluZyAicmVtZW1iZXIgdG8gcnVuIFxgJHByb2duYW1lIC0tZmluaXNoJGZ1dHVyZV9saWJkaXJzJyIKKysKKysgICAgaWYgdGVzdCAtbiAiJGN1cnJlbnRfbGliZGlycyI7IHRoZW4KKysgICAgICAjIE1heWJlIGp1c3QgZG8gYSBkcnkgcnVuLgorKyAgICAgICRvcHRfZHJ5X3J1biAmJiBjdXJyZW50X2xpYmRpcnM9IiAtbiRjdXJyZW50X2xpYmRpcnMiCisrICAgICAgZXhlY19jbWQ9JyRTSEVMTCAkcHJvZ3BhdGggJHByZXNlcnZlX2FyZ3MgLS1maW5pc2gkY3VycmVudF9saWJkaXJzJworKyAgICBlbHNlCisrICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisrICAgIGZpCisrfQorKworK3Rlc3QgIiRtb2RlIiA9IGluc3RhbGwgJiYgZnVuY19tb2RlX2luc3RhbGwgJHsxKyIkQCJ9CisrCisrCisrIyBmdW5jX21vZGVfbGluayBhcmcuLi4KKytmdW5jX21vZGVfbGluayAoKQorK3sKKysgICAgJG9wdF9kZWJ1ZworKyAgICBjYXNlICRob3N0IGluCisrICAgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqKQorKyAgICAgICMgSXQgaXMgaW1wb3NzaWJsZSB0byBsaW5rIGEgZGxsIHdpdGhvdXQgdGhpcyBzZXR0aW5nLCBhbmQKKysgICAgICAjIHdlIHNob3VsZG4ndCBmb3JjZSB0aGUgbWFrZWZpbGUgbWFpbnRhaW5lciB0byBmaWd1cmUgb3V0CisrICAgICAgIyB3aGljaCBzeXN0ZW0gd2UgYXJlIGNvbXBpbGluZyBmb3IgaW4gb3JkZXIgdG8gcGFzcyBhbiBleHRyYQorKyAgICAgICMgZmxhZyBmb3IgZXZlcnkgbGlidG9vbCBpbnZvY2F0aW9uLgorKyAgICAgICMgYWxsb3dfdW5kZWZpbmVkPW5vCisrCisrICAgICAgIyBGSVhNRTogVW5mb3J0dW5hdGVseSwgdGhlcmUgYXJlIHByb2JsZW1zIHdpdGggdGhlIGFib3ZlIHdoZW4gdHJ5aW5nCisrICAgICAgIyB0byBtYWtlIGEgZGxsIHdoaWNoIGhhcyB1bmRlZmluZWQgc3ltYm9scywgaW4gd2hpY2ggY2FzZSBub3QKKysgICAgICAjIGV2ZW4gYSBzdGF0aWMgbGlicmFyeSBpcyBidWlsdC4gIEZvciBub3csIHdlIG5lZWQgdG8gc3BlY2lmeQorKyAgICAgICMgLW5vLXVuZGVmaW5lZCBvbiB0aGUgbGlidG9vbCBsaW5rIGxpbmUgd2hlbiB3ZSBjYW4gYmUgY2VydGFpbgorKyAgICAgICMgdGhhdCBhbGwgc3ltYm9scyBhcmUgc2F0aXNmaWVkLCBvdGhlcndpc2Ugd2UgZ2V0IGEgc3RhdGljIGxpYnJhcnkuCisrICAgICAgYWxsb3dfdW5kZWZpbmVkPXllcworKyAgICAgIDs7CisrICAgICopCisrICAgICAgYWxsb3dfdW5kZWZpbmVkPXllcworKyAgICAgIDs7CisrICAgIGVzYWMKKysgICAgbGlidG9vbF9hcmdzPSRub25vcHQKKysgICAgYmFzZV9jb21waWxlPSIkbm9ub3B0ICRAIgorKyAgICBjb21waWxlX2NvbW1hbmQ9JG5vbm9wdAorKyAgICBmaW5hbGl6ZV9jb21tYW5kPSRub25vcHQKKysKKysgICAgY29tcGlsZV9ycGF0aD0KKysgICAgZmluYWxpemVfcnBhdGg9CisrICAgIGNvbXBpbGVfc2hsaWJwYXRoPQorKyAgICBmaW5hbGl6ZV9zaGxpYnBhdGg9CisrICAgIGNvbnZlbmllbmNlPQorKyAgICBvbGRfY29udmVuaWVuY2U9CisrICAgIGRlcGxpYnM9CisrICAgIG9sZF9kZXBsaWJzPQorKyAgICBjb21waWxlcl9mbGFncz0KKysgICAgbGlua2VyX2ZsYWdzPQorKyAgICBkbGxzZWFyY2hwYXRoPQorKyAgICBsaWJfc2VhcmNoX3BhdGg9YHB3ZGAKKysgICAgaW5zdF9wcmVmaXhfZGlyPQorKyAgICBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0KKysKKysgICAgYXZvaWRfdmVyc2lvbj1ubworKyAgICBkbGZpbGVzPQorKyAgICBkbHByZWZpbGVzPQorKyAgICBkbHNlbGY9bm8KKysgICAgZXhwb3J0X2R5bmFtaWM9bm8KKysgICAgZXhwb3J0X3N5bWJvbHM9CisrICAgIGV4cG9ydF9zeW1ib2xzX3JlZ2V4PQorKyAgICBnZW5lcmF0ZWQ9CisrICAgIGxpYm9ianM9CisrICAgIGx0bGlicz0KKysgICAgbW9kdWxlPW5vCisrICAgIG5vX2luc3RhbGw9bm8KKysgICAgb2Jqcz0KKysgICAgbm9uX3BpY19vYmplY3RzPQorKyAgICBwcmVjaW91c19maWxlc19yZWdleD0KKysgICAgcHJlZmVyX3N0YXRpY19saWJzPW5vCisrICAgIHByZWxvYWQ9bm8KKysgICAgcHJldj0KKysgICAgcHJldmFyZz0KKysgICAgcmVsZWFzZT0KKysgICAgcnBhdGg9CisrICAgIHhycGF0aD0KKysgICAgcGVybV9ycGF0aD0KKysgICAgdGVtcF9ycGF0aD0KKysgICAgdGhyZWFkX3NhZmU9bm8KKysgICAgdmluZm89CisrICAgIHZpbmZvX251bWJlcj1ubworKyAgICB3ZWFrX2xpYnM9CisrICAgIHNpbmdsZV9tb2R1bGU9IiR7d2x9LXNpbmdsZV9tb2R1bGUiCisrICAgIGZ1bmNfaW5mZXJfdGFnICRiYXNlX2NvbXBpbGUKKysKKysgICAgIyBXZSBuZWVkIHRvIGtub3cgLXN0YXRpYywgdG8gZ2V0IHRoZSByaWdodCBvdXRwdXQgZmlsZW5hbWVzLgorKyAgICBmb3IgYXJnCisrICAgIGRvCisrICAgICAgY2FzZSAkYXJnIGluCisrICAgICAgLXNoYXJlZCkKKysJdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIFwKKysJICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gImNhbiBub3QgYnVpbGQgYSBzaGFyZWQgbGlicmFyeSIKKysJYnVpbGRfb2xkX2xpYnM9bm8KKysJYnJlYWsKKysJOzsKKysgICAgICAtYWxsLXN0YXRpYyB8IC1zdGF0aWMgfCAtc3RhdGljLWxpYnRvb2wtbGlicykKKysJY2FzZSAkYXJnIGluCisrCS1hbGwtc3RhdGljKQorKwkgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgLXogIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorKwkgICAgZnVuY193YXJuaW5nICJjb21wbGV0ZSBzdGF0aWMgbGlua2luZyBpcyBpbXBvc3NpYmxlIGluIHRoaXMgY29uZmlndXJhdGlvbiIKKysJICBmaQorKwkgIGlmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorKwkgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYworKwkgICAgIyBTZWUgY29tbWVudCBmb3IgLXN0YXRpYyBmbGFnIGJlbG93LCBmb3IgbW9yZSBkZXRhaWxzLgorKwkgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGxpbmtfc3RhdGljX2ZsYWciCisrCSAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGxpbmtfc3RhdGljX2ZsYWciCisrCSAgZmkKKysJICBwcmVmZXJfc3RhdGljX2xpYnM9eWVzCisrCSAgOzsKKysJLXN0YXRpYykKKysJICBpZiB0ZXN0IC16ICIkcGljX2ZsYWciICYmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorKwkgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYworKwkgIGZpCisrCSAgcHJlZmVyX3N0YXRpY19saWJzPWJ1aWx0CisrCSAgOzsKKysJLXN0YXRpYy1saWJ0b29sLWxpYnMpCisrCSAgaWYgdGVzdCAteiAiJHBpY19mbGFnIiAmJiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKysJICAgIGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0aWMKKysJICBmaQorKwkgIHByZWZlcl9zdGF0aWNfbGlicz15ZXMKKysJICA7OworKwllc2FjCisrCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworKwlidWlsZF9vbGRfbGlicz15ZXMKKysJYnJlYWsKKysJOzsKKysgICAgICBlc2FjCisrICAgIGRvbmUKKysKKysgICAgIyBTZWUgaWYgb3VyIHNoYXJlZCBhcmNoaXZlcyBkZXBlbmQgb24gc3RhdGljIGFyY2hpdmVzLgorKyAgICB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgJiYgYnVpbGRfb2xkX2xpYnM9eWVzCisrCisrICAgICMgR28gdGhyb3VnaCB0aGUgYXJndW1lbnRzLCB0cmFuc2Zvcm1pbmcgdGhlbSBvbiB0aGUgd2F5LgorKyAgICB3aGlsZSB0ZXN0ICIkIyIgLWd0IDA7IGRvCisrICAgICAgYXJnPSIkMSIKKysgICAgICBzaGlmdAorKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisrICAgICAgcWFyZz0kZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQKKysgICAgICBmdW5jX2FwcGVuZCBsaWJ0b29sX2FyZ3MgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCisrICAgICAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCisrICAgICAgaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCisrCWNhc2UgJHByZXYgaW4KKysJb3V0cHV0KQorKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiIEBPVVRQVVRAIgorKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiBAT1VUUFVUQCIKKysJICA7OworKwllc2FjCisrCisrCWNhc2UgJHByZXYgaW4KKysJZGxmaWxlc3xkbHByZWZpbGVzKQorKwkgIGlmIHRlc3QgIiRwcmVsb2FkIiA9IG5vOyB0aGVuCisrCSAgICAjIEFkZCB0aGUgc3ltYm9sIG9iamVjdCBpbnRvIHRoZSBsaW5raW5nIGNvbW1hbmRzLgorKwkgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgQFNZTUZJTEVAIgorKwkgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiIEBTWU1GSUxFQCIKKysJICAgIHByZWxvYWQ9eWVzCisrCSAgZmkKKysJICBjYXNlICRhcmcgaW4KKysJICAqLmxhIHwgKi5sbykgOzsgICMgV2UgaGFuZGxlIHRoZXNlIGNhc2VzIGJlbG93LgorKwkgIGZvcmNlKQorKwkgICAgaWYgdGVzdCAiJGRsc2VsZiIgPSBubzsgdGhlbgorKwkgICAgICBkbHNlbGY9bmVlZGxlc3MKKysJICAgICAgZXhwb3J0X2R5bmFtaWM9eWVzCisrCSAgICBmaQorKwkgICAgcHJldj0KKysJICAgIGNvbnRpbnVlCisrCSAgICA7OworKwkgIHNlbGYpCisrCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisrCSAgICAgIGRsc2VsZj15ZXMKKysJICAgIGVsaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlcyAmJiB0ZXN0ICIkZGxvcGVuX3NlbGYiICE9IHllczsgdGhlbgorKwkgICAgICBkbHNlbGY9eWVzCisrCSAgICBlbHNlCisrCSAgICAgIGRsc2VsZj1uZWVkbGVzcworKwkgICAgICBleHBvcnRfZHluYW1pYz15ZXMKKysJICAgIGZpCisrCSAgICBwcmV2PQorKwkgICAgY29udGludWUKKysJICAgIDs7CisrCSAgKikKKysJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKysJICAgICAgZGxmaWxlcz0iJGRsZmlsZXMgJGFyZyIKKysJICAgIGVsc2UKKysJICAgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGFyZyIKKysJICAgIGZpCisrCSAgICBwcmV2PQorKwkgICAgY29udGludWUKKysJICAgIDs7CisrCSAgZXNhYworKwkgIDs7CisrCWV4cHN5bXMpCisrCSAgZXhwb3J0X3N5bWJvbHM9IiRhcmciCisrCSAgdGVzdCAtZiAiJGFyZyIgXAorKwkgICAgfHwgZnVuY19mYXRhbF9lcnJvciAic3ltYm9sIGZpbGUgXGAkYXJnJyBkb2VzIG5vdCBleGlzdCIKKysJICBwcmV2PQorKwkgIGNvbnRpbnVlCisrCSAgOzsKKysJZXhwc3ltc19yZWdleCkKKysJICBleHBvcnRfc3ltYm9sc19yZWdleD0iJGFyZyIKKysJICBwcmV2PQorKwkgIGNvbnRpbnVlCisrCSAgOzsKKysJZnJhbWV3b3JrKQorKwkgIGNhc2UgJGhvc3QgaW4KKysJICAgICotKi1kYXJ3aW4qKQorKwkgICAgICBjYXNlICIkZGVwbGlicyAiIGluCisrCQkqIiAkcWFyZy5sdGZyYW1ld29yayAiKikgOzsKKysJCSopIGRlcGxpYnM9IiRkZXBsaWJzICRxYXJnLmx0ZnJhbWV3b3JrIiAjIHRoaXMgaXMgZml4ZWQgbGF0ZXIKKysJCSAgIDs7CisrCSAgICAgIGVzYWMKKysJICAgICAgOzsKKysgICAJICBlc2FjCisrCSAgcHJldj0KKysJICBjb250aW51ZQorKwkgIDs7CisrCWluc3RfcHJlZml4KQorKwkgIGluc3RfcHJlZml4X2Rpcj0iJGFyZyIKKysJICBwcmV2PQorKwkgIGNvbnRpbnVlCisrCSAgOzsKKysJb2JqZWN0bGlzdCkKKysJICBpZiB0ZXN0IC1mICIkYXJnIjsgdGhlbgorKwkgICAgc2F2ZV9hcmc9JGFyZworKwkgICAgbW9yZWFyZ3M9CisrCSAgICBmb3IgZmlsIGluIGBjYXQgIiRzYXZlX2FyZyJgCisrCSAgICBkbworKyMJICAgICAgbW9yZWFyZ3M9IiRtb3JlYXJncyAkZmlsIgorKwkgICAgICBhcmc9JGZpbAorKwkgICAgICAjIEEgbGlidG9vbC1jb250cm9sbGVkIG9iamVjdC4KKysKKysJICAgICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgb2JqZWN0LgorKwkgICAgICBpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkYXJnIjsgdGhlbgorKwkJcGljX29iamVjdD0KKysJCW5vbl9waWNfb2JqZWN0PQorKworKwkJIyBSZWFkIHRoZSAubG8gZmlsZQorKwkJZnVuY19zb3VyY2UgIiRhcmciCisrCisrCQlpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwKKysJCSAgIHRlc3QgLXogIiRub25fcGljX29iamVjdCIgfHwKKysJCSAgIHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgJiYKKysJCSAgIHRlc3QgIiRub25fcGljX29iamVjdCIgPSBub25lOyB0aGVuCisrCQkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2Ygb2JqZWN0IGZvciBcYCRhcmcnIgorKwkJZmkKKysKKysJCSMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisrCQlmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorKwkJeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisrCisrCQlpZiB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorKwkJICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorKwkJICBwaWNfb2JqZWN0PSIkeGRpciRwaWNfb2JqZWN0IgorKworKwkJICBpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCisrCQkgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHllczsgdGhlbgorKwkJICAgICAgZGxmaWxlcz0iJGRsZmlsZXMgJHBpY19vYmplY3QiCisrCQkgICAgICBwcmV2PQorKwkJICAgICAgY29udGludWUKKysJCSAgICBlbHNlCisrCQkgICAgICAjIElmIGxpYnRvb2wgb2JqZWN0cyBhcmUgdW5zdXBwb3J0ZWQsIHRoZW4gd2UgbmVlZCB0byBwcmVsb2FkLgorKwkJICAgICAgcHJldj1kbHByZWZpbGVzCisrCQkgICAgZmkKKysJCSAgZmkKKysKKysJCSAgIyBDSEVDSyBNRTogIEkgdGhpbmsgSSBidXN0ZWQgdGhpcy4gIC1Pc3NhbWEKKysJCSAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorKwkJICAgICMgUHJlbG9hZCB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKysJCSAgICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkcGljX29iamVjdCIKKysJCSAgICBwcmV2PQorKwkJICBmaQorKworKwkJICAjIEEgUElDIG9iamVjdC4KKysJCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorKwkJICBhcmc9IiRwaWNfb2JqZWN0IgorKwkJZmkKKysKKysJCSMgTm9uLVBJQyBvYmplY3QuCisrCQlpZiB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKysJCSAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KKysJCSAgbm9uX3BpY19vYmplY3Q9IiR4ZGlyJG5vbl9waWNfb2JqZWN0IgorKworKwkJICAjIEEgc3RhbmRhcmQgbm9uLVBJQyBvYmplY3QKKysJCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorKwkJICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSA7IHRoZW4KKysJCSAgICBhcmc9IiRub25fcGljX29iamVjdCIKKysJCSAgZmkKKysJCWVsc2UKKysJCSAgIyBJZiB0aGUgUElDIG9iamVjdCBleGlzdHMsIHVzZSBpdCBpbnN0ZWFkLgorKwkJICAjICR4ZGlyIHdhcyBwcmVwZW5kZWQgdG8gJHBpY19vYmplY3QgYWJvdmUuCisrCQkgIG5vbl9waWNfb2JqZWN0PSIkcGljX29iamVjdCIKKysJCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorKwkJZmkKKysJICAgICAgZWxzZQorKwkJIyBPbmx5IGFuIGVycm9yIGlmIG5vdCBkb2luZyBhIGRyeS1ydW4uCisrCQlpZiAkb3B0X2RyeV9ydW47IHRoZW4KKysJCSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKysJCSAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKKysJCSAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisrCisrCQkgIGZ1bmNfbG8ybyAiJGFyZyIKKysJCSAgcGljX29iamVjdD0keGRpciRvYmpkaXIvJGZ1bmNfbG8yb19yZXN1bHQKKysJCSAgbm9uX3BpY19vYmplY3Q9JHhkaXIkZnVuY19sbzJvX3Jlc3VsdAorKwkJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCisrCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKysJICAgICAgICBlbHNlCisrCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGFyZycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QiCisrCQlmaQorKwkgICAgICBmaQorKwkgICAgZG9uZQorKwkgIGVsc2UKKysJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImxpbmsgaW5wdXQgZmlsZSBcYCRhcmcnIGRvZXMgbm90IGV4aXN0IgorKwkgIGZpCisrCSAgYXJnPSRzYXZlX2FyZworKwkgIHByZXY9CisrCSAgY29udGludWUKKysJICA7OworKwlwcmVjaW91c19yZWdleCkKKysJICBwcmVjaW91c19maWxlc19yZWdleD0iJGFyZyIKKysJICBwcmV2PQorKwkgIGNvbnRpbnVlCisrCSAgOzsKKysJcmVsZWFzZSkKKysJICByZWxlYXNlPSItJGFyZyIKKysJICBwcmV2PQorKwkgIGNvbnRpbnVlCisrCSAgOzsKKysJcnBhdGggfCB4cnBhdGgpCisrCSAgIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisrCSAgY2FzZSAkYXJnIGluCisrCSAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworKwkgICopCisrCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGFic29sdXRlIHJ1bi1wYXRocyBhcmUgYWxsb3dlZCIKKysJICAgIDs7CisrCSAgZXNhYworKwkgIGlmIHRlc3QgIiRwcmV2IiA9IHJwYXRoOyB0aGVuCisrCSAgICBjYXNlICIkcnBhdGggIiBpbgorKwkgICAgKiIgJGFyZyAiKikgOzsKKysJICAgICopIHJwYXRoPSIkcnBhdGggJGFyZyIgOzsKKysJICAgIGVzYWMKKysJICBlbHNlCisrCSAgICBjYXNlICIkeHJwYXRoICIgaW4KKysJICAgICoiICRhcmcgIiopIDs7CisrCSAgICAqKSB4cnBhdGg9IiR4cnBhdGggJGFyZyIgOzsKKysJICAgIGVzYWMKKysJICBmaQorKwkgIHByZXY9CisrCSAgY29udGludWUKKysJICA7OworKwlzaHJleHQpCisrICAJICBzaHJleHRfY21kcz0iJGFyZyIKKysJICBwcmV2PQorKwkgIGNvbnRpbnVlCisrCSAgOzsKKysJd2VhaykKKysJICB3ZWFrX2xpYnM9IiR3ZWFrX2xpYnMgJGFyZyIKKysJICBwcmV2PQorKwkgIGNvbnRpbnVlCisrCSAgOzsKKysJeGNjbGlua2VyKQorKwkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkcWFyZyIKKysJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRxYXJnIgorKwkgIHByZXY9CisrCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHFhcmciCisrCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRxYXJnIgorKwkgIGNvbnRpbnVlCisrCSAgOzsKKysJeGNvbXBpbGVyKQorKwkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHFhcmciCisrCSAgcHJldj0KKysJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkcWFyZyIKKysJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHFhcmciCisrCSAgY29udGludWUKKysJICA7OworKwl4bGlua2VyKQorKwkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkcWFyZyIKKysJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICR3bCRxYXJnIgorKwkgIHByZXY9CisrCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHdsJHFhcmciCisrCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICR3bCRxYXJnIgorKwkgIGNvbnRpbnVlCisrCSAgOzsKKysJKikKKysJICBldmFsICIkcHJldj1cIlwkYXJnXCIiCisrCSAgcHJldj0KKysJICBjb250aW51ZQorKwkgIDs7CisrCWVzYWMKKysgICAgICBmaSAjIHRlc3QgLW4gIiRwcmV2IgorKworKyAgICAgIHByZXZhcmc9IiRhcmciCisrCisrICAgICAgY2FzZSAkYXJnIGluCisrICAgICAgLWFsbC1zdGF0aWMpCisrCSMgVGhlIGVmZmVjdHMgb2YgLWFsbC1zdGF0aWMgYXJlIGRlZmluZWQgaW4gYSBwcmV2aW91cyBsb29wLgorKwljb250aW51ZQorKwk7OworKworKyAgICAgIC1hbGxvdy11bmRlZmluZWQpCisrCSMgRklYTUU6IHJlbW92ZSB0aGlzIGZsYWcgc29tZXRpbWUgaW4gdGhlIGZ1dHVyZS4KKysJZnVuY19mYXRhbF9lcnJvciAiXGAtYWxsb3ctdW5kZWZpbmVkJyBtdXN0IG5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgaXMgdGhlIGRlZmF1bHQiCisrCTs7CisrCisrICAgICAgLWF2b2lkLXZlcnNpb24pCisrCWF2b2lkX3ZlcnNpb249eWVzCisrCWNvbnRpbnVlCisrCTs7CisrCisrICAgICAgLWRsb3BlbikKKysJcHJldj1kbGZpbGVzCisrCWNvbnRpbnVlCisrCTs7CisrCisrICAgICAgLWRscHJlb3BlbikKKysJcHJldj1kbHByZWZpbGVzCisrCWNvbnRpbnVlCisrCTs7CisrCisrICAgICAgLWV4cG9ydC1keW5hbWljKQorKwlleHBvcnRfZHluYW1pYz15ZXMKKysJY29udGludWUKKysJOzsKKysKKysgICAgICAtZXhwb3J0LXN5bWJvbHMgfCAtZXhwb3J0LXN5bWJvbHMtcmVnZXgpCisrCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIm1vcmUgdGhhbiBvbmUgLWV4cG9ydGVkLXN5bWJvbHMgYXJndW1lbnQgaXMgbm90IGFsbG93ZWQiCisrCWZpCisrCWlmIHRlc3QgIlgkYXJnIiA9ICJYLWV4cG9ydC1zeW1ib2xzIjsgdGhlbgorKwkgIHByZXY9ZXhwc3ltcworKwllbHNlCisrCSAgcHJldj1leHBzeW1zX3JlZ2V4CisrCWZpCisrCWNvbnRpbnVlCisrCTs7CisrCisrICAgICAgLWZyYW1ld29yaykKKysJcHJldj1mcmFtZXdvcmsKKysJY29udGludWUKKysJOzsKKysKKysgICAgICAtaW5zdC1wcmVmaXgtZGlyKQorKwlwcmV2PWluc3RfcHJlZml4CisrCWNvbnRpbnVlCisrCTs7CisrCisrICAgICAgIyBUaGUgbmF0aXZlIElSSVggbGlua2VyIHVuZGVyc3RhbmRzIC1MQU5HOiosIC1MSVNUOiogYW5kIC1MTk86KgorKyAgICAgICMgc28sIGlmIHdlIHNlZSB0aGVzZSBmbGFncyBiZSBjYXJlZnVsIG5vdCB0byB0cmVhdCB0aGVtIGxpa2UgLUwKKysgICAgICAtTFtBLVpdW0EtWl0qOiopCisrCWNhc2UgJHdpdGhfZ2NjLyRob3N0IGluCisrCW5vLyotKi1pcml4KiB8IC8qLSotaXJpeCopCisrCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKysJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKysJICA7OworKwllc2FjCisrCWNvbnRpbnVlCisrCTs7CisrCisrICAgICAgLUwqKQorKwlmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkYXJnIgorKwlkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKwkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKysJY2FzZSAkZGlyIGluCisrCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKysJKikKKysJICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCisrCSAgdGVzdCAteiAiJGFic2RpciIgJiYgXAorKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRkaXInIgorKwkgIGRpcj0iJGFic2RpciIKKysJICA7OworKwllc2FjCisrCWNhc2UgIiRkZXBsaWJzICIgaW4KKysJKiIgLUwkZGlyICIqKSA7OworKwkqKQorKwkgIGRlcGxpYnM9IiRkZXBsaWJzIC1MJGRpciIKKysJICBsaWJfc2VhcmNoX3BhdGg9IiRsaWJfc2VhcmNoX3BhdGggJGRpciIKKysJICA7OworKwllc2FjCisrCWNhc2UgJGhvc3QgaW4KKysJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiopCisrCSAgdGVzdGJpbmRpcj1gJEVDSE8gIlgkZGlyIiB8ICRYc2VkIC1lICdzKi9saWIkKi9iaW4qJ2AKKysJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKysJICAqIjokZGlyOiIqKSA7OworKwkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiRkaXIiOzsKKysJICBlc2FjCisrCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisrCSAgKiI6JHRlc3RiaW5kaXI6IiopIDs7CisrCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JHRlc3RiaW5kaXIiOzsKKysJICBlc2FjCisrCSAgOzsKKysJZXNhYworKwljb250aW51ZQorKwk7OworKworKyAgICAgIC1sKikKKysJaWYgdGVzdCAiWCRhcmciID0gIlgtbGMiIHx8IHRlc3QgIlgkYXJnIiA9ICJYLWxtIjsgdGhlbgorKwkgIGNhc2UgJGhvc3QgaW4KKysJICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotYmVvcyopCisrCSAgICAjIFRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIEMgb3IgbWF0aCBsaWJyYXJ5IChhcyBzdWNoKQorKwkgICAgY29udGludWUKKysJICAgIDs7CisrCSAgKi0qLW9zMiopCisrCSAgICAjIFRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIEMgbGlicmFyeSAoYXMgc3VjaCkKKysJICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorKwkgICAgOzsKKysJICAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCogfCAqLSotZHJhZ29uZmx5KikKKysJICAgICMgRG8gbm90IGluY2x1ZGUgbGliYyBkdWUgdG8gdXMgaGF2aW5nIGxpYmMvbGliY19yLgorKwkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisrCSAgICA7OworKwkgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKysJICAgICMgUmhhcHNvZHkgQyBhbmQgbWF0aCBsaWJyYXJpZXMgYXJlIGluIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisrCSAgICBkZXBsaWJzPSIkZGVwbGlicyBTeXN0ZW0ubHRmcmFtZXdvcmsiCisrCSAgICBjb250aW51ZQorKwkgICAgOzsKKysJICAqLSotc2NvMy4ydjUqIHwgKi0qLXNjbzV2NiopCisrCSAgICAjIENhdXNlcyBwcm9ibGVtcyB3aXRoIF9fY3R5cGUKKysJICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorKwkgICAgOzsKKysJICAqLSotc3lzdjQuMnV3MiogfCAqLSotc3lzdjUqIHwgKi0qLXVuaXh3YXJlKiB8ICotKi1PcGVuVU5JWCopCisrCSAgICAjIENvbXBpbGVyIGluc2VydHMgbGliYyBpbiB0aGUgY29ycmVjdCBwbGFjZSBmb3IgdGhyZWFkcyB0byB3b3JrCisrCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKysJICAgIDs7CisrCSAgZXNhYworKwllbGlmIHRlc3QgIlgkYXJnIiA9ICJYLWxjX3IiOyB0aGVuCisrCSBjYXNlICRob3N0IGluCisrCSAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCogfCAqLSotZHJhZ29uZmx5KikKKysJICAgIyBEbyBub3QgaW5jbHVkZSBsaWJjX3IgZGlyZWN0bHksIHVzZSAtcHRocmVhZCBmbGFnLgorKwkgICBjb250aW51ZQorKwkgICA7OworKwkgZXNhYworKwlmaQorKwlkZXBsaWJzPSIkZGVwbGlicyAkYXJnIgorKwljb250aW51ZQorKwk7OworKworKyAgICAgIC1tb2R1bGUpCisrCW1vZHVsZT15ZXMKKysJY29udGludWUKKysJOzsKKysKKysgICAgICAjIFRydTY0IFVOSVggdXNlcyAtbW9kZWwgW2FyZ10gdG8gZGV0ZXJtaW5lIHRoZSBsYXlvdXQgb2YgQysrCisrICAgICAgIyBjbGFzc2VzLCBuYW1lIG1hbmdsaW5nLCBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLgorKyAgICAgICMgRGFyd2luIHVzZXMgdGhlIC1hcmNoIGZsYWcgdG8gZGV0ZXJtaW5lIG91dHB1dCBhcmNoaXRlY3R1cmUuCisrICAgICAgLW1vZGVsfC1hcmNofC1pc3lzcm9vdCkKKysJY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgorKwlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorKwlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKysJcHJldj14Y29tcGlsZXIKKysJY29udGludWUKKysJOzsKKysKKysgICAgICAtbXR8LW10aHJlYWRzfC1rdGhyZWFkfC1LdGhyZWFkfC1wdGhyZWFkfC1wdGhyZWFkc3wtLXRocmVhZC1zYWZlfC10aHJlYWRzKQorKwljb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCisrCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisrCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorKwljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorKwkgICAgKiIgJGFyZyAiKikgOzsKKysJICAgICogKSBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRhcmciIDs7CisrCWVzYWMKKysJY29udGludWUKKysJOzsKKysKKysgICAgICAtbXVsdGlfbW9kdWxlKQorKwlzaW5nbGVfbW9kdWxlPSIke3dsfS1tdWx0aV9tb2R1bGUiCisrCWNvbnRpbnVlCisrCTs7CisrCisrICAgICAgLW5vLWZhc3QtaW5zdGFsbCkKKysJZmFzdF9pbnN0YWxsPW5vCisrCWNvbnRpbnVlCisrCTs7CisrCisrICAgICAgLW5vLWluc3RhbGwpCisrCWNhc2UgJGhvc3QgaW4KKysJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiopCisrCSAgIyBUaGUgUEFUSCBoYWNrZXJ5IGluIHdyYXBwZXIgc2NyaXB0cyBpcyByZXF1aXJlZCBvbiBXaW5kb3dzCisrCSAgIyBpbiBvcmRlciBmb3IgdGhlIGxvYWRlciB0byBmaW5kIGFueSBkbGxzIGl0IG5lZWRzLgorKwkgIGZ1bmNfd2FybmluZyAiXGAtbm8taW5zdGFsbCcgaXMgaWdub3JlZCBmb3IgJGhvc3QiCisrCSAgZnVuY193YXJuaW5nICJhc3N1bWluZyBcYC1uby1mYXN0LWluc3RhbGwnIGluc3RlYWQiCisrCSAgZmFzdF9pbnN0YWxsPW5vCisrCSAgOzsKKysJKikgbm9faW5zdGFsbD15ZXMgOzsKKysJZXNhYworKwljb250aW51ZQorKwk7OworKworKyAgICAgIC1uby11bmRlZmluZWQpCisrCWFsbG93X3VuZGVmaW5lZD1ubworKwljb250aW51ZQorKwk7OworKworKyAgICAgIC1vYmplY3RsaXN0KQorKwlwcmV2PW9iamVjdGxpc3QKKysJY29udGludWUKKysJOzsKKysKKysgICAgICAtbykgcHJldj1vdXRwdXQgOzsKKysKKysgICAgICAtcHJlY2lvdXMtZmlsZXMtcmVnZXgpCisrCXByZXY9cHJlY2lvdXNfcmVnZXgKKysJY29udGludWUKKysJOzsKKysKKysgICAgICAtcmVsZWFzZSkKKysJcHJldj1yZWxlYXNlCisrCWNvbnRpbnVlCisrCTs7CisrCisrICAgICAgLXJwYXRoKQorKwlwcmV2PXJwYXRoCisrCWNvbnRpbnVlCisrCTs7CisrCisrICAgICAgLVIpCisrCXByZXY9eHJwYXRoCisrCWNvbnRpbnVlCisrCTs7CisrCisrICAgICAgLVIqKQorKwlmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkYXJnIgorKwlkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKwkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKysJY2FzZSAkZGlyIGluCisrCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKysJKikKKysJICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGFic29sdXRlIHJ1bi1wYXRocyBhcmUgYWxsb3dlZCIKKysJICA7OworKwllc2FjCisrCWNhc2UgIiR4cnBhdGggIiBpbgorKwkqIiAkZGlyICIqKSA7OworKwkqKSB4cnBhdGg9IiR4cnBhdGggJGRpciIgOzsKKysJZXNhYworKwljb250aW51ZQorKwk7OworKworKyAgICAgIC1zaGFyZWQpCisrCSMgVGhlIGVmZmVjdHMgb2YgLXNoYXJlZCBhcmUgZGVmaW5lZCBpbiBhIHByZXZpb3VzIGxvb3AuCisrCWNvbnRpbnVlCisrCTs7CisrCisrICAgICAgLXNocmV4dCkKKysJcHJldj1zaHJleHQKKysJY29udGludWUKKysJOzsKKysKKysgICAgICAtc3RhdGljIHwgLXN0YXRpYy1saWJ0b29sLWxpYnMpCisrCSMgVGhlIGVmZmVjdHMgb2YgLXN0YXRpYyBhcmUgZGVmaW5lZCBpbiBhIHByZXZpb3VzIGxvb3AuCisrCSMgV2UgdXNlZCB0byBkbyB0aGUgc2FtZSBhcyAtYWxsLXN0YXRpYyBvbiBwbGF0Zm9ybXMgdGhhdAorKwkjIGRpZG4ndCBoYXZlIGEgUElDIGZsYWcsIGJ1dCB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBlZmZlY3RzCisrCSMgd291bGQgYmUgZXF1aXZhbGVudCB3YXMgd3JvbmcuICBJdCB3b3VsZCBicmVhayBvbiBhdCBsZWFzdAorKwkjIERpZ2l0YWwgVW5peCBhbmQgQUlYLgorKwljb250aW51ZQorKwk7OworKworKyAgICAgIC10aHJlYWQtc2FmZSkKKysJdGhyZWFkX3NhZmU9eWVzCisrCWNvbnRpbnVlCisrCTs7CisrCisrICAgICAgLXZlcnNpb24taW5mbykKKysJcHJldj12aW5mbworKwljb250aW51ZQorKwk7OworKworKyAgICAgIC12ZXJzaW9uLW51bWJlcikKKysJcHJldj12aW5mbworKwl2aW5mb19udW1iZXI9eWVzCisrCWNvbnRpbnVlCisrCTs7CisrCisrICAgICAgLXdlYWspCisrICAgICAgICBwcmV2PXdlYWsKKysJY29udGludWUKKysJOzsKKysKKysgICAgICAtV2MsKikKKysJZnVuY19zdHJpcG5hbWUgJy1XYywnICcnICIkYXJnIgorKwlhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysJYXJnPQorKwlzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKKysJZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCisrCSAgSUZTPSIkc2F2ZV9pZnMiCisrICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgorKwkgIGFyZz0iJGFyZyAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCWRvbmUKKysJSUZTPSIkc2F2ZV9pZnMiCisrCWZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGFyZyIKKysJYXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysJOzsKKysKKysgICAgICAtV2wsKikKKysJZnVuY19zdHJpcG5hbWUgJy1XbCwnICcnICIkYXJnIgorKwlhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysJYXJnPQorKwlzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKKysJZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCisrCSAgSUZTPSIkc2F2ZV9pZnMiCisrICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgorKwkgIGFyZz0iJGFyZyAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysJZG9uZQorKwlJRlM9IiRzYXZlX2lmcyIKKysJZnVuY19zdHJpcG5hbWUgJyAnICcnICIkYXJnIgorKwlhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKwk7OworKworKyAgICAgIC1YY29tcGlsZXIpCisrCXByZXY9eGNvbXBpbGVyCisrCWNvbnRpbnVlCisrCTs7CisrCisrICAgICAgLVhsaW5rZXIpCisrCXByZXY9eGxpbmtlcgorKwljb250aW51ZQorKwk7OworKworKyAgICAgIC1YQ0NsaW5rZXIpCisrCXByZXY9eGNjbGlua2VyCisrCWNvbnRpbnVlCisrCTs7CisrCisrICAgICAgIyAtNjQsIC1taXBzWzAtOV0gZW5hYmxlIDY0LWJpdCBtb2RlIG9uIHRoZSBTR0kgY29tcGlsZXIKKysgICAgICAjIC1yWzAtOV1bMC05XSogc3BlY2lmaWVzIHRoZSBwcm9jZXNzb3Igb24gdGhlIFNHSSBjb21waWxlcgorKyAgICAgICMgLXhhcmNoPSosIC14dGFyZ2V0PSogZW5hYmxlIDY0LWJpdCBtb2RlIG9uIHRoZSBTdW4gY29tcGlsZXIKKysgICAgICAjICtEQSosICtERCogZW5hYmxlIDY0LWJpdCBtb2RlIG9uIHRoZSBIUCBjb21waWxlcgorKyAgICAgICMgLXEqIHBhc3MgdGhyb3VnaCBjb21waWxlciBhcmdzIGZvciB0aGUgSUJNIGNvbXBpbGVyCisrICAgICAgIyAtbSosIC10WzQ1XSosIC10eHNjYWxlKiBwYXNzIHRocm91Z2ggYXJjaGl0ZWN0dXJlLXNwZWNpZmljCisrICAgICAgIyBjb21waWxlciBhcmdzIGZvciBHQ0MKKysgICAgICAjIC1GL3BhdGggZ2l2ZXMgcGF0aCB0byB1bmluc3RhbGxlZCBmcmFtZXdvcmtzLCBnY2Mgb24gZGFyd2luCisrICAgICAgIyAtcCwgLXBnLCAtLWNvdmVyYWdlLCAtZnByb2ZpbGUtKiBwYXNzIHRocm91Z2ggcHJvZmlsaW5nIGZsYWcgZm9yIEdDQworKyAgICAgICMgQGZpbGUgR0NDIHJlc3BvbnNlIGZpbGVzCisrICAgICAgLTY0fC1taXBzWzAtOV18LXJbMC05XVswLTldKnwteGFyY2g9KnwteHRhcmdldD0qfCtEQSp8K0REKnwtcSp8LW0qfCBcCisrICAgICAgLXRbNDVdKnwtdHhzY2FsZSp8LXB8LXBnfC0tY292ZXJhZ2V8LWZwcm9maWxlLSp8LUYqfEAqKQorKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKysJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrICAgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorKyAgICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisrICAgICAgICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCisrICAgICAgICBjb250aW51ZQorKyAgICAgICAgOzsKKysKKysgICAgICAjIFNvbWUgb3RoZXIgY29tcGlsZXIgZmxhZy4KKysgICAgICAtKiB8ICsqKQorKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKysJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCTs7CisrCisrICAgICAgKi4kb2JqZXh0KQorKwkjIEEgc3RhbmRhcmQgb2JqZWN0LgorKwlvYmpzPSIkb2JqcyAkYXJnIgorKwk7OworKworKyAgICAgICoubG8pCisrCSMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgb2JqZWN0LgorKworKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBvYmplY3QuCisrCWlmIGZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRhcmciOyB0aGVuCisrCSAgcGljX29iamVjdD0KKysJICBub25fcGljX29iamVjdD0KKysKKysJICAjIFJlYWQgdGhlIC5sbyBmaWxlCisrCSAgZnVuY19zb3VyY2UgIiRhcmciCisrCisrCSAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8CisrCSAgICAgdGVzdCAteiAiJG5vbl9waWNfb2JqZWN0IiB8fAorKwkgICAgIHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgJiYKKysJICAgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiID0gbm9uZTsgdGhlbgorKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBvYmplY3QgZm9yIFxgJGFyZyciCisrCSAgZmkKKysKKysJICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorKwkgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCisrCSAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisrCisrCSAgaWYgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKysJICAgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisrCSAgICBwaWNfb2JqZWN0PSIkeGRpciRwaWNfb2JqZWN0IgorKworKwkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorKwkgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0geWVzOyB0aGVuCisrCQlkbGZpbGVzPSIkZGxmaWxlcyAkcGljX29iamVjdCIKKysJCXByZXY9CisrCQljb250aW51ZQorKwkgICAgICBlbHNlCisrCQkjIElmIGxpYnRvb2wgb2JqZWN0cyBhcmUgdW5zdXBwb3J0ZWQsIHRoZW4gd2UgbmVlZCB0byBwcmVsb2FkLgorKwkJcHJldj1kbHByZWZpbGVzCisrCSAgICAgIGZpCisrCSAgICBmaQorKworKwkgICAgIyBDSEVDSyBNRTogIEkgdGhpbmsgSSBidXN0ZWQgdGhpcy4gIC1Pc3NhbWEKKysJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKysJICAgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorKwkgICAgICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkcGljX29iamVjdCIKKysJICAgICAgcHJldj0KKysJICAgIGZpCisrCisrCSAgICAjIEEgUElDIG9iamVjdC4KKysJICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKysJICAgIGFyZz0iJHBpY19vYmplY3QiCisrCSAgZmkKKysKKysJICAjIE5vbi1QSUMgb2JqZWN0LgorKwkgIGlmIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorKwkgICAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KKysJICAgIG5vbl9waWNfb2JqZWN0PSIkeGRpciRub25fcGljX29iamVjdCIKKysKKysJICAgICMgQSBzdGFuZGFyZCBub24tUElDIG9iamVjdAorKwkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorKwkgICAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgOyB0aGVuCisrCSAgICAgIGFyZz0iJG5vbl9waWNfb2JqZWN0IgorKwkgICAgZmkKKysJICBlbHNlCisrCSAgICAjIElmIHRoZSBQSUMgb2JqZWN0IGV4aXN0cywgdXNlIGl0IGluc3RlYWQuCisrCSAgICAjICR4ZGlyIHdhcyBwcmVwZW5kZWQgdG8gJHBpY19vYmplY3QgYWJvdmUuCisrCSAgICBub25fcGljX29iamVjdD0iJHBpY19vYmplY3QiCisrCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisrCSAgZmkKKysJZWxzZQorKwkgICMgT25seSBhbiBlcnJvciBpZiBub3QgZG9pbmcgYSBkcnktcnVuLgorKwkgIGlmICRvcHRfZHJ5X3J1bjsgdGhlbgorKwkgICAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKysJICAgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCisrCSAgICB4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKysKKysJICAgIGZ1bmNfbG8ybyAiJGFyZyIKKysJICAgIHBpY19vYmplY3Q9JHhkaXIkb2JqZGlyLyRmdW5jX2xvMm9fcmVzdWx0CisrCSAgICBub25fcGljX29iamVjdD0keGRpciRmdW5jX2xvMm9fcmVzdWx0CisrCSAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCisrCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisrCSAgZWxzZQorKwkgICAgZnVuY19mYXRhbF9lcnJvciAiXGAkYXJnJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdCIKKysJICBmaQorKwlmaQorKwk7OworKworKyAgICAgICouJGxpYmV4dCkKKysJIyBBbiBhcmNoaXZlLgorKwlkZXBsaWJzPSIkZGVwbGlicyAkYXJnIgorKwlvbGRfZGVwbGlicz0iJG9sZF9kZXBsaWJzICRhcmciCisrCWNvbnRpbnVlCisrCTs7CisrCisrICAgICAgKi5sYSkKKysJIyBBIGxpYnRvb2wtY29udHJvbGxlZCBsaWJyYXJ5LgorKworKwlpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCisrCSAgIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbG9wZW4uCisrCSAgZGxmaWxlcz0iJGRsZmlsZXMgJGFyZyIKKysJICBwcmV2PQorKwllbGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKysJICAjIFRoZSBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxwcmVvcGVuLgorKwkgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRhcmciCisrCSAgcHJldj0KKysJZWxzZQorKwkgIGRlcGxpYnM9IiRkZXBsaWJzICRhcmciCisrCWZpCisrCWNvbnRpbnVlCisrCTs7CisrCisrICAgICAgIyBTb21lIG90aGVyIGNvbXBpbGVyIGFyZ3VtZW50LgorKyAgICAgICopCisrCSMgVW5rbm93biBhcmd1bWVudHMgaW4gYm90aCBmaW5hbGl6ZV9jb21tYW5kIGFuZCBjb21waWxlX2NvbW1hbmQgbmVlZAorKwkjIHRvIGJlIGFlc3RoZXRpY2FsbHkgcXVvdGVkIGJlY2F1c2UgdGhleSBhcmUgZXZhbGVkIGxhdGVyLgorKwlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorKwlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysJOzsKKysgICAgICBlc2FjICMgYXJnCisrCisrICAgICAgIyBOb3cgYWN0dWFsbHkgc3Vic3RpdHV0ZSB0aGUgYXJndW1lbnQgaW50byB0aGUgY29tbWFuZHMuCisrICAgICAgaWYgdGVzdCAtbiAiJGFyZyI7IHRoZW4KKysJZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKysJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisrICAgICAgZmkKKysgICAgZG9uZSAjIGFyZ3VtZW50IHBhcnNpbmcgbG9vcAorKworKyAgICB0ZXN0IC1uICIkcHJldiIgJiYgXAorKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAidGhlIFxgJHByZXZhcmcnIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIKKysKKysgICAgaWYgdGVzdCAiJGV4cG9ydF9keW5hbWljIiA9IHllcyAmJiB0ZXN0IC1uICIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIjsgdGhlbgorKyAgICAgIGV2YWwgYXJnPVwiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCisrICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKysgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKysgICAgZmkKKysKKysgICAgb2xkbGlicz0KKysgICAgIyBjYWxjdWxhdGUgdGhlIG5hbWUgb2YgdGhlIGZpbGUsIHdpdGhvdXQgaXRzIGRpcmVjdG9yeQorKyAgICBmdW5jX2Jhc2VuYW1lICIkb3V0cHV0IgorKyAgICBvdXRwdXRuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisrICAgIGxpYm9ianNfc2F2ZT0iJGxpYm9ianMiCisrCisrICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorKyAgICAgICMgZ2V0IHRoZSBkaXJlY3RvcmllcyBsaXN0ZWQgaW4gJHNobGlicGF0aF92YXIKKysgICAgICBldmFsIHNobGliX3NlYXJjaF9wYXRoPVxgXCRFQ0hPIFwiWFwkeyRzaGxpYnBhdGhfdmFyfVwiIFx8IFwkWHNlZCAtZSBcJ3MvOi8gL2dcJ1xgCisrICAgIGVsc2UKKysgICAgICBzaGxpYl9zZWFyY2hfcGF0aD0KKysgICAgZmkKKysgICAgZXZhbCBzeXNfbGliX3NlYXJjaF9wYXRoPVwiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlY1wiCisrICAgIGV2YWwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoPVwiJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjXCIKKysKKysgICAgZnVuY19kaXJuYW1lICIkb3V0cHV0IiAiLyIgIiIKKysgICAgb3V0cHV0X29iamRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkb2JqZGlyIgorKyAgICAjIENyZWF0ZSB0aGUgb2JqZWN0IGRpcmVjdG9yeS4KKysgICAgZnVuY19ta2Rpcl9wICIkb3V0cHV0X29iamRpciIKKysKKysgICAgIyBEZXRlcm1pbmUgdGhlIHR5cGUgb2Ygb3V0cHV0CisrICAgIGNhc2UgJG91dHB1dCBpbgorKyAgICAiIikKKysgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYW4gb3V0cHV0IGZpbGUiCisrICAgICAgOzsKKysgICAgKi4kbGliZXh0KSBsaW5rbW9kZT1vbGRsaWIgOzsKKysgICAgKi5sbyB8ICouJG9iamV4dCkgbGlua21vZGU9b2JqIDs7CisrICAgICoubGEpIGxpbmttb2RlPWxpYiA7OworKyAgICAqKSBsaW5rbW9kZT1wcm9nIDs7ICMgQW55dGhpbmcgZWxzZSBzaG91bGQgYmUgYSBwcm9ncmFtLgorKyAgICBlc2FjCisrCisrICAgIHNwZWNpYWxkZXBsaWJzPQorKworKyAgICBsaWJzPQorKyAgICAjIEZpbmQgYWxsIGludGVyZGVwZW5kZW50IGRlcGxpYnMgYnkgc2VhcmNoaW5nIGZvciBsaWJyYXJpZXMKKysgICAgIyB0aGF0IGFyZSBsaW5rZWQgbW9yZSB0aGFuIG9uY2UgKGUuZy4gLWxhIC1sYiAtbGEpCisrICAgIGZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisrICAgICAgaWYgJG9wdF9kdXBsaWNhdGVfZGVwcyA7IHRoZW4KKysJY2FzZSAiJGxpYnMgIiBpbgorKwkqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisrCWVzYWMKKysgICAgICBmaQorKyAgICAgIGxpYnM9IiRsaWJzICRkZXBsaWIiCisrICAgIGRvbmUKKysKKysgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorKyAgICAgIGxpYnM9IiRwcmVkZXBzICRsaWJzICRjb21waWxlcl9saWJfc2VhcmNoX3BhdGggJHBvc3RkZXBzIgorKworKyAgICAgICMgQ29tcHV0ZSBsaWJyYXJpZXMgdGhhdCBhcmUgbGlzdGVkIG1vcmUgdGhhbiBvbmNlIGluICRwcmVkZXBzCisrICAgICAgIyAkcG9zdGRlcHMgYW5kIG1hcmsgdGhlbSBhcyBzcGVjaWFsIChpLmUuLCB3aG9zZSBkdXBsaWNhdGVzIGFyZQorKyAgICAgICMgbm90IHRvIGJlIGVsaW1pbmF0ZWQpLgorKyAgICAgIHByZV9wb3N0X2RlcHM9CisrICAgICAgaWYgJG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM7IHRoZW4KKysJZm9yIHByZV9wb3N0X2RlcCBpbiAkcHJlZGVwcyAkcG9zdGRlcHM7IGRvCisrCSAgY2FzZSAiJHByZV9wb3N0X2RlcHMgIiBpbgorKwkgICoiICRwcmVfcG9zdF9kZXAgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJHByZV9wb3N0X2RlcHMiIDs7CisrCSAgZXNhYworKwkgIHByZV9wb3N0X2RlcHM9IiRwcmVfcG9zdF9kZXBzICRwcmVfcG9zdF9kZXAiCisrCWRvbmUKKysgICAgICBmaQorKyAgICAgIHByZV9wb3N0X2RlcHM9CisrICAgIGZpCisrCisrICAgIGRlcGxpYnM9CisrICAgIG5ld2RlcGVuZGVuY3lfbGlicz0KKysgICAgbmV3bGliX3NlYXJjaF9wYXRoPQorKyAgICBuZWVkX3JlbGluaz1ubyAjIHdoZXRoZXIgd2UncmUgbGlua2luZyBhbnkgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKysgICAgbm90aW5zdF9kZXBsaWJzPSAjIG5vdC1pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKysgICAgbm90aW5zdF9wYXRoPSAjIHBhdGhzIHRoYXQgY29udGFpbiBub3QtaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisrCisrICAgIGNhc2UgJGxpbmttb2RlIGluCisrICAgIGxpYikKKysJcGFzc2VzPSJjb252IGRscHJlb3BlbiBsaW5rIgorKwlmb3IgZmlsZSBpbiAkZGxmaWxlcyAkZGxwcmVmaWxlczsgZG8KKysJICBjYXNlICRmaWxlIGluCisrCSAgKi5sYSkgOzsKKysJICAqKQorKwkgICAgZnVuY19mYXRhbF9oZWxwICJsaWJyYXJpZXMgY2FuIFxgLWRsb3Blbicgb25seSBsaWJ0b29sIGxpYnJhcmllczogJGZpbGUiCisrCSAgICA7OworKwkgIGVzYWMKKysJZG9uZQorKwk7OworKyAgICBwcm9nKQorKwljb21waWxlX2RlcGxpYnM9CisrCWZpbmFsaXplX2RlcGxpYnM9CisrCWFsbGRlcGxpYnM9bm8KKysJbmV3ZGxmaWxlcz0KKysJbmV3ZGxwcmVmaWxlcz0KKysJcGFzc2VzPSJjb252IHNjYW4gZGxvcGVuIGRscHJlb3BlbiBsaW5rIgorKwk7OworKyAgICAqKSAgcGFzc2VzPSJjb252IgorKwk7OworKyAgICBlc2FjCisrCisrICAgIGZvciBwYXNzIGluICRwYXNzZXM7IGRvCisrICAgICAgIyBUaGUgcHJlb3BlbiBwYXNzIGluIGxpYiBtb2RlIHJldmVyc2VzICRkZXBsaWJzOyBwdXQgaXQgYmFjayBoZXJlCisrICAgICAgIyBzbyB0aGF0IC1MIGNvbWVzIGJlZm9yZSBsaWJzIHRoYXQgbmVlZCBpdCBmb3IgaW5zdGFuY2UuLi4KKysgICAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixsaW5rIjsgdGhlbgorKwkjIyBGSVhNRTogRmluZCB0aGUgcGxhY2Ugd2hlcmUgdGhlIGxpc3QgaXMgcmVidWlsdCBpbiB0aGUgd3JvbmcKKysJIyMgICAgICAgIG9yZGVyLCBhbmQgZml4IGl0IHRoZXJlIHByb3Blcmx5CisrICAgICAgICB0bXBfZGVwbGlicz0KKysJZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KKysJICB0bXBfZGVwbGlicz0iJGRlcGxpYiAkdG1wX2RlcGxpYnMiCisrCWRvbmUKKysJZGVwbGlicz0iJHRtcF9kZXBsaWJzIgorKyAgICAgIGZpCisrCisrICAgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsbGluayIgfHwKKysJIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxzY2FuIjsgdGhlbgorKwlsaWJzPSIkZGVwbGlicyIKKysJZGVwbGlicz0KKysgICAgICBmaQorKyAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisrCWNhc2UgJHBhc3MgaW4KKysJZGxvcGVuKSBsaWJzPSIkZGxmaWxlcyIgOzsKKysJZGxwcmVvcGVuKSBsaWJzPSIkZGxwcmVmaWxlcyIgOzsKKysJbGluaykgbGlicz0iJGRlcGxpYnMgJURFUExJQlMlICRkZXBlbmRlbmN5X2xpYnMiIDs7CisrCWVzYWMKKysgICAgICBmaQorKyAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGRscHJlb3BlbiI7IHRoZW4KKysJIyBDb2xsZWN0IGFuZCBmb3J3YXJkIGRlcGxpYnMgb2YgcHJlb3BlbmVkIGxpYnRvb2wgbGlicworKwlmb3IgbGliIGluICRkbHByZWZpbGVzOyBkbworKwkgICMgSWdub3JlIG5vbi1saWJ0b29sLWxpYnMKKysJICBkZXBlbmRlbmN5X2xpYnM9CisrCSAgY2FzZSAkbGliIGluCisrCSAgKi5sYSkJZnVuY19zb3VyY2UgIiRsaWIiIDs7CisrCSAgZXNhYworKworKwkgICMgQ29sbGVjdCBwcmVvcGVuZWQgbGlidG9vbCBkZXBsaWJzLCBleGNlcHQgYW55IHRoaXMgbGlicmFyeQorKwkgICMgaGFzIGRlY2xhcmVkIGFzIHdlYWsgbGlicworKwkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKysgICAgICAgICAgICBkZXBsaWJfYmFzZT1gJEVDSE8gIlgkZGVwbGliIiB8ICRYc2VkIC1lICIkYmFzZW5hbWUiYAorKwkgICAgY2FzZSAiICR3ZWFrX2xpYnMgIiBpbgorKwkgICAgKiIgJGRlcGxpYl9iYXNlICIqKSA7OworKwkgICAgKikgZGVwbGlicz0iJGRlcGxpYnMgJGRlcGxpYiIgOzsKKysJICAgIGVzYWMKKysJICBkb25lCisrCWRvbmUKKysJbGlicz0iJGRscHJlZmlsZXMiCisrICAgICAgZmkKKysgICAgICBpZiB0ZXN0ICIkcGFzcyIgPSBkbG9wZW47IHRoZW4KKysJIyBDb2xsZWN0IGRscHJlb3BlbmVkIGxpYnJhcmllcworKwlzYXZlX2RlcGxpYnM9IiRkZXBsaWJzIgorKwlkZXBsaWJzPQorKyAgICAgIGZpCisrCisrICAgICAgZm9yIGRlcGxpYiBpbiAkbGliczsgZG8KKysJbGliPQorKwlmb3VuZD1ubworKwljYXNlICRkZXBsaWIgaW4KKysJLW10fC1tdGhyZWFkc3wta3RocmVhZHwtS3RocmVhZHwtcHRocmVhZHwtcHRocmVhZHN8LS10aHJlYWQtc2FmZXwtdGhyZWFkcykKKysJICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKysJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorKwkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKysJICBlbHNlCisrCSAgICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWIiCisrCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliIDsgdGhlbgorKwkJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKysJCSAgICAqIiAkZGVwbGliICIqKSA7OworKwkJICAgICogKSBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRkZXBsaWIiIDs7CisrCQllc2FjCisrCSAgICBmaQorKwkgIGZpCisrCSAgY29udGludWUKKysJICA7OworKwktbCopCisrCSAgaWYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWIgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nOyB0aGVuCisrCSAgICBmdW5jX3dhcm5pbmcgIlxgLWwnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzL29iamVjdHMiCisrCSAgICBjb250aW51ZQorKwkgIGZpCisrCSAgZnVuY19zdHJpcG5hbWUgJy1sJyAnJyAiJGRlcGxpYiIKKysJICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysJICBmb3Igc2VhcmNoZGlyIGluICRuZXdsaWJfc2VhcmNoX3BhdGggJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCisrCSAgICBmb3Igc2VhcmNoX2V4dCBpbiAubGEgJHN0ZF9zaHJleHQgLnNvIC5hOyBkbworKwkgICAgICAjIFNlYXJjaCB0aGUgbGlidG9vbCBsaWJyYXJ5CisrCSAgICAgIGxpYj0iJHNlYXJjaGRpci9saWIke25hbWV9JHtzZWFyY2hfZXh0fSIKKysJICAgICAgaWYgdGVzdCAtZiAiJGxpYiI7IHRoZW4KKysJCWlmIHRlc3QgIiRzZWFyY2hfZXh0IiA9ICIubGEiOyB0aGVuCisrCQkgIGZvdW5kPXllcworKwkJZWxzZQorKwkJICBmb3VuZD1ubworKwkJZmkKKysJCWJyZWFrIDIKKysJICAgICAgZmkKKysJICAgIGRvbmUKKysJICBkb25lCisrCSAgaWYgdGVzdCAiJGZvdW5kIiAhPSB5ZXM7IHRoZW4KKysJICAgICMgZGVwbGliIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGxpYnRvb2wgbGlicmFyeQorKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisrCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorKwkgICAgZWxzZQorKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorKwkgICAgICB0ZXN0ICIkbGlua21vZGUiID0gbGliICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorKwkgICAgZmkKKysJICAgIGNvbnRpbnVlCisrCSAgZWxzZSAjIGRlcGxpYiBpcyBhIGxpYnRvb2wgbGlicmFyeQorKwkgICAgIyBJZiAkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzICYmICRkZXBsaWIgaXMgYSBzdGRsaWIsCisrCSAgICAjIFdlIG5lZWQgdG8gZG8gc29tZSBzcGVjaWFsIHRoaW5ncyBoZXJlLCBhbmQgbm90IGxhdGVyLgorKwkgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorKwkgICAgICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKysJICAgICAgKiIgJGRlcGxpYiAiKikKKysJCWlmIGZ1bmNfbGFsaWJfcCAiJGxpYiI7IHRoZW4KKysJCSAgbGlicmFyeV9uYW1lcz0KKysJCSAgb2xkX2xpYnJhcnk9CisrCQkgIGZ1bmNfc291cmNlICIkbGliIgorKwkJICBmb3IgbCBpbiAkb2xkX2xpYnJhcnkgJGxpYnJhcnlfbmFtZXM7IGRvCisrCQkgICAgbGw9IiRsIgorKwkJICBkb25lCisrCQkgIGlmIHRlc3QgIlgkbGwiID0gIlgkb2xkX2xpYnJhcnkiIDsgdGhlbiAjIG9ubHkgc3RhdGljIHZlcnNpb24gYXZhaWxhYmxlCisrCQkgICAgZm91bmQ9bm8KKysJCSAgICBmdW5jX2Rpcm5hbWUgIiRsaWIiICIiICIuIgorKwkJICAgIGxhZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKysJCSAgICBsaWI9JGxhZGlyLyRvbGRfbGlicmFyeQorKwkJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorKwkJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisrCQkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorKwkJICAgIGVsc2UKKysJCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisrCQkgICAgICB0ZXN0ICIkbGlua21vZGUiID0gbGliICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorKwkJICAgIGZpCisrCQkgICAgY29udGludWUKKysJCSAgZmkKKysJCWZpCisrCQk7OworKwkgICAgICAqKSA7OworKwkgICAgICBlc2FjCisrCSAgICBmaQorKwkgIGZpCisrCSAgOzsgIyAtbAorKwkqLmx0ZnJhbWV3b3JrKQorKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisrCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorKwkgIGVsc2UKKysJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisrCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliIDsgdGhlbgorKwkJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKysJCSAgICAqIiAkZGVwbGliICIqKSA7OworKwkJICAgICogKSBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRkZXBsaWIiIDs7CisrCQllc2FjCisrCSAgICBmaQorKwkgIGZpCisrCSAgY29udGludWUKKysJICA7OworKwktTCopCisrCSAgY2FzZSAkbGlua21vZGUgaW4KKysJICBsaWIpCisrCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorKwkgICAgdGVzdCAiJHBhc3MiID0gY29udiAmJiBjb250aW51ZQorKwkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisrCSAgICBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorKwkgICAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrCSAgICA7OworKwkgIHByb2cpCisrCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisrCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisrCSAgICAgIGNvbnRpbnVlCisrCSAgICBmaQorKwkgICAgaWYgdGVzdCAiJHBhc3MiID0gc2NhbjsgdGhlbgorKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorKwkgICAgZWxzZQorKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKysJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKysJICAgIGZpCisrCSAgICBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorKwkgICAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrCSAgICA7OworKwkgICopCisrCSAgICBmdW5jX3dhcm5pbmcgIlxgLUwnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzL29iamVjdHMiCisrCSAgICA7OworKwkgIGVzYWMgIyBsaW5rbW9kZQorKwkgIGNvbnRpbnVlCisrCSAgOzsgIyAtTAorKwktUiopCisrCSAgaWYgdGVzdCAiJHBhc3MiID0gbGluazsgdGhlbgorKwkgICAgZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGRlcGxpYiIKKysJICAgIGRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrCSAgICAjIE1ha2Ugc3VyZSB0aGUgeHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorKwkgICAgY2FzZSAiJHhycGF0aCAiIGluCisrCSAgICAqIiAkZGlyICIqKSA7OworKwkgICAgKikgeHJwYXRoPSIkeHJwYXRoICRkaXIiIDs7CisrCSAgICBlc2FjCisrCSAgZmkKKysJICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorKwkgIGNvbnRpbnVlCisrCSAgOzsKKysJKi5sYSkgbGliPSIkZGVwbGliIiA7OworKwkqLiRsaWJleHQpCisrCSAgaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKysJICAgIGNvbnRpbnVlCisrCSAgZmkKKysJICBjYXNlICRsaW5rbW9kZSBpbgorKwkgIGxpYikKKysJICAgICMgTGlua2luZyBjb252ZW5pZW5jZSBtb2R1bGVzIGludG8gc2hhcmVkIGxpYnJhcmllcyBpcyBhbGxvd2VkLAorKwkgICAgIyBidXQgbGlua2luZyBvdGhlciBzdGF0aWMgbGlicmFyaWVzIGlzIG5vbi1wb3J0YWJsZS4KKysJICAgIGNhc2UgIiAkZGxwcmVjb252ZW5pZW5jZWxpYnMgIiBpbgorKwkgICAgKiIgJGRlcGxpYiAiKikgOzsKKysJICAgICopCisrCSAgICAgIHZhbGlkX2FfbGliPW5vCisrCSAgICAgIGNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisrCQltYXRjaF9wYXR0ZXJuKikKKysJCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKysJCSAgbWF0Y2hfcGF0dGVybl9yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4qXCkiYAorKwkJICBpZiBldmFsICJcJEVDSE8gXCJYJGRlcGxpYlwiIiAyPi9kZXYvbnVsbCB8ICRYc2VkIC1lIDEwcSBcCisrCQkgICAgfCAkRUdSRVAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorKwkJICAgIHZhbGlkX2FfbGliPXllcworKwkJICBmaQorKwkJOzsKKysJCXBhc3NfYWxsKQorKwkJICB2YWxpZF9hX2xpYj15ZXMKKysJCTs7CisrCSAgICAgIGVzYWMKKysJICAgICAgaWYgdGVzdCAiJHZhbGlkX2FfbGliIiAhPSB5ZXM7IHRoZW4KKysJCSRFQ0hPCisrCQkkRUNITyAiKioqIFdhcm5pbmc6IFRyeWluZyB0byBsaW5rIHdpdGggc3RhdGljIGxpYiBhcmNoaXZlICRkZXBsaWIuIgorKwkJJEVDSE8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisrCQkkRUNITyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKysJCSRFQ0hPICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisrCQkkRUNITyAiKioqIGJlY2F1c2UgdGhlIGZpbGUgZXh0ZW5zaW9ucyAuJGxpYmV4dCBvZiB0aGlzIGFyZ3VtZW50IG1ha2VzIG1lIGJlbGlldmUiCisrCQkkRUNITyAiKioqIHRoYXQgaXQgaXMganVzdCBhIHN0YXRpYyBhcmNoaXZlIHRoYXQgSSBzaG91bGQgbm90IHVzZSBoZXJlLiIKKysJICAgICAgZWxzZQorKwkJJEVDSE8KKysJCSRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSIKKysJCSRFQ0hPICIqKiogc3RhdGljIGxpYnJhcnkgJGRlcGxpYiBpcyBub3QgcG9ydGFibGUhIgorKwkJZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKysJICAgICAgZmkKKysJICAgICAgOzsKKysJICAgIGVzYWMKKysJICAgIGNvbnRpbnVlCisrCSAgICA7OworKwkgIHByb2cpCisrCSAgICBpZiB0ZXN0ICIkcGFzcyIgIT0gbGluazsgdGhlbgorKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorKwkgICAgZWxzZQorKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKysJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKysJICAgIGZpCisrCSAgICBjb250aW51ZQorKwkgICAgOzsKKysJICBlc2FjICMgbGlua21vZGUKKysJICA7OyAjICouJGxpYmV4dAorKwkqLmxvIHwgKi4kb2JqZXh0KQorKwkgIGlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KKysJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisrCSAgZWxpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorKwkgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuIHx8IHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbm87IHRoZW4KKysJICAgICAgIyBJZiB0aGVyZSBpcyBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nIHN0YXRpY2FsbHksCisrCSAgICAgICMgd2UgbmVlZCB0byBwcmVsb2FkLgorKwkgICAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGVwbGliIgorKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKysJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKysJICAgIGVsc2UKKysJICAgICAgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGRlcGxpYiIKKysJICAgIGZpCisrCSAgZmkKKysJICBjb250aW51ZQorKwkgIDs7CisrCSVERVBMSUJTJSkKKysJICBhbGxkZXBsaWJzPXllcworKwkgIGNvbnRpbnVlCisrCSAgOzsKKysJZXNhYyAjIGNhc2UgJGRlcGxpYgorKworKwlpZiB0ZXN0ICIkZm91bmQiID0geWVzIHx8IHRlc3QgLWYgIiRsaWIiOyB0aGVuIDoKKysJZWxzZQorKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIHRoZSBsaWJyYXJ5IFxgJGxpYicgb3IgdW5oYW5kbGVkIGFyZ3VtZW50IFxgJGRlcGxpYiciCisrCWZpCisrCisrCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisrCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRsaWIiIFwKKysJICB8fCBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKysKKysJZnVuY19kaXJuYW1lICIkbGliIiAiIiAiLiIKKysJbGFkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorKworKwlkbG5hbWU9CisrCWRsb3Blbj0KKysJZGxwcmVvcGVuPQorKwlsaWJkaXI9CisrCWxpYnJhcnlfbmFtZXM9CisrCW9sZF9saWJyYXJ5PQorKwlpbmhlcml0ZWRfbGlua2VyX2ZsYWdzPQorKwkjIElmIHRoZSBsaWJyYXJ5IHdhcyBpbnN0YWxsZWQgd2l0aCBhbiBvbGQgcmVsZWFzZSBvZiBsaWJ0b29sLAorKwkjIGl0IHdpbGwgbm90IHJlZGVmaW5lIHZhcmlhYmxlcyBpbnN0YWxsZWQsIG9yIHNob3VsZG5vdGxpbmsKKysJaW5zdGFsbGVkPXllcworKwlzaG91bGRub3RsaW5rPW5vCisrCWF2b2lkdGVtcHJwYXRoPQorKworKworKwkjIFJlYWQgdGhlIC5sYSBmaWxlCisrCWZ1bmNfc291cmNlICIkbGliIgorKworKwkjIENvbnZlcnQgIi1mcmFtZXdvcmsgZm9vIiB0byAiZm9vLmx0ZnJhbWV3b3JrIgorKwlpZiB0ZXN0IC1uICIkaW5oZXJpdGVkX2xpbmtlcl9mbGFncyI7IHRoZW4KKysJICB0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz1gJEVDSE8gIlgkaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkWHNlZCAtZSAncy8tZnJhbWV3b3JrIFwoW14gJF0qXCkvXDEubHRmcmFtZXdvcmsvZydgCisrCSAgZm9yIHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWcgaW4gJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWdzOyBkbworKwkgICAgY2FzZSAiICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisrCSAgICAgICoiICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnICIqKSA7OworKwkgICAgICAqKSBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnIjs7CisrCSAgICBlc2FjCisrCSAgZG9uZQorKwlmaQorKwlkZXBlbmRlbmN5X2xpYnM9YCRFQ0hPICJYICRkZXBlbmRlbmN5X2xpYnMiIHwgJFhzZWQgLWUgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisrCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorKwkgIGNvbXBpbGVfZGVwbGlicz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRjb21waWxlX2RlcGxpYnMiCisrCSAgZmluYWxpemVfZGVwbGlicz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRmaW5hbGl6ZV9kZXBsaWJzIgorKwllbHNlCisrCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIKKysJZmkKKysJaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsbGluayIgfHwKKysJICAgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLHNjYW4iIHx8CisrCSAgIHsgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliOyB9OyB0aGVuCisrCSAgdGVzdCAtbiAiJGRsb3BlbiIgJiYgZGxmaWxlcz0iJGRsZmlsZXMgJGRsb3BlbiIKKysJICB0ZXN0IC1uICIkZGxwcmVvcGVuIiAmJiBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkZGxwcmVvcGVuIgorKwlmaQorKworKwlpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisrCSAgIyBPbmx5IGNoZWNrIGZvciBjb252ZW5pZW5jZSBsaWJyYXJpZXMKKysJICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIgorKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisrCSAgICBpZiB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB0aGVuCisrCSAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciBcYCRsaWInIgorKwkgICAgZmkKKysJICAgICMgSXQgaXMgYSBsaWJ0b29sIGNvbnZlbmllbmNlIGxpYnJhcnksIHNvIGFkZCBpbiBpdHMgb2JqZWN0cy4KKysJICAgIGNvbnZlbmllbmNlPSIkY29udmVuaWVuY2UgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorKwkgICAgb2xkX2NvbnZlbmllbmNlPSIkb2xkX2NvbnZlbmllbmNlICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKKysJICBlbGlmIHRlc3QgIiRsaW5rbW9kZSIgIT0gcHJvZyAmJiB0ZXN0ICIkbGlua21vZGUiICE9IGxpYjsgdGhlbgorKwkgICAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSBjb252ZW5pZW5jZSBsaWJyYXJ5IgorKwkgIGZpCisrCSAgdG1wX2xpYnM9CisrCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKysJICAgIGlmICRvcHRfZHVwbGljYXRlX2RlcHMgOyB0aGVuCisrCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCisrCSAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKysJICAgICAgZXNhYworKwkgICAgZmkKKysJICAgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIKKysJICBkb25lCisrCSAgY29udGludWUKKysJZmkgIyAkcGFzcyA9IGNvbnYKKysKKysKKysJIyBHZXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgd2UgbGluayBhZ2FpbnN0LgorKwlsaW5rbGliPQorKwlmb3IgbCBpbiAkb2xkX2xpYnJhcnkgJGxpYnJhcnlfbmFtZXM7IGRvCisrCSAgbGlua2xpYj0iJGwiCisrCWRvbmUKKysJaWYgdGVzdCAteiAiJGxpbmtsaWIiOyB0aGVuCisrCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yIFxgJGxpYiciCisrCWZpCisrCisrCSMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgorKwlpZiB0ZXN0ICIkcGFzcyIgPSBkbG9wZW47IHRoZW4KKysJICBpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgorKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IC1kbG9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiBcYCRsaWInIgorKwkgIGZpCisrCSAgaWYgdGVzdCAteiAiJGRsbmFtZSIgfHwKKysJICAgICB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiICE9IHllcyB8fAorKwkgICAgIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbm87IHRoZW4KKysJICAgICMgSWYgdGhlcmUgaXMgbm8gZGxuYW1lLCBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nCisrCSAgICAjIHN0YXRpY2FsbHksIHdlIG5lZWQgdG8gcHJlbG9hZC4gIFdlIGFsc28gbmVlZCB0byBwcmVsb2FkIGFueQorKwkgICAgIyBkZXBlbmRlbnQgbGlicmFyaWVzIHNvIGxpYmx0ZGwncyBkZXBsaWIgcHJlbG9hZGVyIGRvZXNuJ3QKKysJICAgICMgYm9tYiBvdXQgaW4gdGhlIGxvYWQgZGVwbGlicyBwaGFzZS4KKysJICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRsaWIgJGRlcGVuZGVuY3lfbGlicyIKKysJICBlbHNlCisrCSAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkbGliIgorKwkgIGZpCisrCSAgY29udGludWUKKysJZmkgIyAkcGFzcyA9IGRsb3BlbgorKworKwkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKysJY2FzZSAkbGFkaXIgaW4KKysJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnNfbGFkaXI9IiRsYWRpciIgOzsKKysJKikKKysJICBhYnNfbGFkaXI9YGNkICIkbGFkaXIiICYmIHB3ZGAKKysJICBpZiB0ZXN0IC16ICIkYWJzX2xhZGlyIjsgdGhlbgorKwkgICAgZnVuY193YXJuaW5nICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mIFxgJGxhZGlyJyIKKysJICAgIGZ1bmNfd2FybmluZyAicGFzc2luZyBpdCBsaXRlcmFsbHkgdG8gdGhlIGxpbmtlciwgYWx0aG91Z2ggaXQgbWlnaHQgZmFpbCIKKysJICAgIGFic19sYWRpcj0iJGxhZGlyIgorKwkgIGZpCisrCSAgOzsKKysJZXNhYworKwlmdW5jX2Jhc2VuYW1lICIkbGliIgorKwlsYW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKysKKysJIyBGaW5kIHRoZSByZWxldmFudCBvYmplY3QgZGlyZWN0b3J5IGFuZCBsaWJyYXJ5IG5hbWUuCisrCWlmIHRlc3QgIlgkaW5zdGFsbGVkIiA9IFh5ZXM7IHRoZW4KKysJICBpZiB0ZXN0ICEgLWYgIiRsaWJkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCisrCSAgICBmdW5jX3dhcm5pbmcgImxpYnJhcnkgXGAkbGliJyB3YXMgbW92ZWQuIgorKwkgICAgZGlyPSIkbGFkaXIiCisrCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisrCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisrCSAgZWxzZQorKwkgICAgZGlyPSIkbGliZGlyIgorKwkgICAgYWJzZGlyPSIkbGliZGlyIgorKwkgIGZpCisrCSAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWMiID0gWHllcyAmJiBhdm9pZHRlbXBycGF0aD15ZXMKKysJZWxzZQorKwkgIGlmIHRlc3QgISAtZiAiJGxhZGlyLyRvYmpkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCisrCSAgICBkaXI9IiRsYWRpciIKKysJICAgIGFic2Rpcj0iJGFic19sYWRpciIKKysJICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKKysJICAgIG5vdGluc3RfcGF0aD0iJG5vdGluc3RfcGF0aCAkYWJzX2xhZGlyIgorKwkgIGVsc2UKKysJICAgIGRpcj0iJGxhZGlyLyRvYmpkaXIiCisrCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIvJG9iamRpciIKKysJICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKKysJICAgIG5vdGluc3RfcGF0aD0iJG5vdGluc3RfcGF0aCAkYWJzX2xhZGlyIgorKwkgIGZpCisrCWZpICMgJGluc3RhbGxlZCA9IHllcworKwlmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmxhJyAiJGxhbmFtZSIKKysJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrCisrCSMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxwcmVvcGVuLgorKwlpZiB0ZXN0ICIkcGFzcyIgPSBkbHByZW9wZW47IHRoZW4KKysJICBpZiB0ZXN0IC16ICIkbGliZGlyIiAmJiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorKwkgICAgZnVuY19mYXRhbF9lcnJvciAib25seSBsaWJyYXJpZXMgbWF5IC1kbHByZW9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiBcYCRsaWInIgorKwkgIGZpCisrCSAgIyBQcmVmZXIgdXNpbmcgYSBzdGF0aWMgbGlicmFyeSAoc28gdGhhdCBubyBzaWxseSBfRFlOQU1JQyBzeW1ib2xzCisrCSAgIyBhcmUgcmVxdWlyZWQgdG8gbGluaykuCisrCSAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorKwkgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRpci8kb2xkX2xpYnJhcnkiCisrCSAgICAjIEtlZXAgYSBsaXN0IG9mIHByZW9wZW5lZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMgdG8gY2hlY2sKKysJICAgICMgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGUgbGluayBwYXNzLgorKwkgICAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorKwkJZGxwcmVjb252ZW5pZW5jZWxpYnM9IiRkbHByZWNvbnZlbmllbmNlbGlicyAkZGlyLyRvbGRfbGlicmFyeSIKKysJICAjIE90aGVyd2lzZSwgdXNlIHRoZSBkbG5hbWUsIHNvIHRoYXQgbHRfZGxvcGVuIGZpbmRzIGl0LgorKwkgIGVsaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKysJICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkaXIvJGRsbmFtZSIKKysJICBlbHNlCisrCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRsaW5rbGliIgorKwkgIGZpCisrCWZpICMgJHBhc3MgPSBkbHByZW9wZW4KKysKKysJaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KKysJICAjIExpbmsgdGhlIGNvbnZlbmllbmNlIGxpYnJhcnkKKysJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisrCSAgICBkZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkZGVwbGlicyIKKysJICBlbGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkY29tcGlsZV9kZXBsaWJzIgorKwkgICAgZmluYWxpemVfZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGZpbmFsaXplX2RlcGxpYnMiCisrCSAgZWxzZQorKwkgICAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIgIyB1c2VkIGZvciBwcm9nLHNjYW4gcGFzcworKwkgIGZpCisrCSAgY29udGludWUKKysJZmkKKysKKysKKysJaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgJiYgdGVzdCAiJHBhc3MiICE9IGxpbms7IHRoZW4KKysJICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGxhZGlyIgorKwkgIGRlcGxpYnM9IiRsaWIgJGRlcGxpYnMiCisrCisrCSAgbGlua2FsbGRlcGxpYnM9bm8KKysJICBpZiB0ZXN0ICIkbGlua19hbGxfZGVwbGlicyIgIT0gbm8gfHwgdGVzdCAteiAiJGxpYnJhcnlfbmFtZXMiIHx8CisrCSAgICAgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBubzsgdGhlbgorKwkgICAgbGlua2FsbGRlcGxpYnM9eWVzCisrCSAgZmkKKysKKysJICB0bXBfbGlicz0KKysJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisrCSAgICBjYXNlICRkZXBsaWIgaW4KKysJICAgIC1MKikgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKysJICAgICAgICAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrCQkgOzsKKysJICAgIGVzYWMKKysJICAgICMgTmVlZCB0byBsaW5rIGFnYWluc3QgYWxsIGRlcGVuZGVuY3lfbGlicz8KKysJICAgIGlmIHRlc3QgIiRsaW5rYWxsZGVwbGlicyIgPSB5ZXM7IHRoZW4KKysJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKysJICAgIGVsc2UKKysJICAgICAgIyBOZWVkIHRvIGhhcmRjb2RlIHNoYXJlZCBsaWJyYXJ5IHBhdGhzCisrCSAgICAgICMgb3IvYW5kIGxpbmsgYWdhaW5zdCBzdGF0aWMgbGlicmFyaWVzCisrCSAgICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorKwkgICAgZmkKKysJICAgIGlmICRvcHRfZHVwbGljYXRlX2RlcHMgOyB0aGVuCisrCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCisrCSAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKysJICAgICAgZXNhYworKwkgICAgZmkKKysJICAgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIKKysJICBkb25lICMgZm9yIGRlcGxpYgorKwkgIGNvbnRpbnVlCisrCWZpICMgJGxpbmttb2RlID0gcHJvZy4uLgorKworKwlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKysJICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYKKysJICAgICB7IHsgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicyIgPSBubyB8fAorKwkgICAgICAgICB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzLCRpbnN0YWxsZWQiID0gImJ1aWx0LHllcyI7IH0gfHwKKysJICAgICAgIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IH07IHRoZW4KKysJICAgICMgV2UgbmVlZCB0byBoYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoCisrCSAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAteiAiJGF2b2lkdGVtcHJwYXRoIiA7IHRoZW4KKysJICAgICAgIyBNYWtlIHN1cmUgdGhlIHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorKwkgICAgICBjYXNlICIkdGVtcF9ycGF0aDoiIGluCisrCSAgICAgICoiJGFic2RpcjoiKikgOzsKKysJICAgICAgKikgdGVtcF9ycGF0aD0iJHRlbXBfcnBhdGgkYWJzZGlyOiIgOzsKKysJICAgICAgZXNhYworKwkgICAgZmkKKysKKysJICAgICMgSGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aC4KKysJICAgICMgU2tpcCBkaXJlY3RvcmllcyB0aGF0IGFyZSBpbiB0aGUgc3lzdGVtIGRlZmF1bHQgcnVuLXRpbWUKKysJICAgICMgc2VhcmNoIHBhdGguCisrCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisrCSAgICAqIiAkYWJzZGlyICIqKSA7OworKwkgICAgKikKKysJICAgICAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgorKwkgICAgICAqIiAkYWJzZGlyICIqKSA7OworKwkgICAgICAqKSBjb21waWxlX3JwYXRoPSIkY29tcGlsZV9ycGF0aCAkYWJzZGlyIgorKwkgICAgICBlc2FjCisrCSAgICAgIDs7CisrCSAgICBlc2FjCisrCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisrCSAgICAqIiAkbGliZGlyICIqKSA7OworKwkgICAgKikKKysJICAgICAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKysJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKysJICAgICAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIgorKwkgICAgICBlc2FjCisrCSAgICAgIDs7CisrCSAgICBlc2FjCisrCSAgZmkgIyAkbGlua21vZGUsJHBhc3MgPSBwcm9nLGxpbmsuLi4KKysKKysJICBpZiB0ZXN0ICIkYWxsZGVwbGlicyIgPSB5ZXMgJiYKKysJICAgICB7IHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgPSBwYXNzX2FsbCB8fAorKwkgICAgICAgeyB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJgorKwkJIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIjsgfTsgfTsgdGhlbgorKwkgICAgIyBXZSBvbmx5IG5lZWQgdG8gc2VhcmNoIGZvciBzdGF0aWMgbGlicmFyaWVzCisrCSAgICBjb250aW51ZQorKwkgIGZpCisrCWZpCisrCisrCWxpbmtfc3RhdGljPW5vICMgV2hldGhlciB0aGUgZGVwbGliIHdpbGwgYmUgbGlua2VkIHN0YXRpY2FsbHkKKysJdXNlX3N0YXRpY19saWJzPSRwcmVmZXJfc3RhdGljX2xpYnMKKysJaWYgdGVzdCAiJHVzZV9zdGF0aWNfbGlicyIgPSBidWlsdCAmJiB0ZXN0ICIkaW5zdGFsbGVkIiA9IHllczsgdGhlbgorKwkgIHVzZV9zdGF0aWNfbGlicz1ubworKwlmaQorKwlpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYKKysJICAgeyB0ZXN0ICIkdXNlX3N0YXRpY19saWJzIiA9IG5vIHx8IHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IH07IHRoZW4KKysJICBjYXNlICRob3N0IGluCisrCSAgKmN5Z3dpbiogfCAqbWluZ3cqKQorKwkgICAgICAjIE5vIHBvaW50IGluIHJlbGlua2luZyBETExzIGJlY2F1c2UgcGF0aHMgYXJlIG5vdCBlbmNvZGVkCisrCSAgICAgIG5vdGluc3RfZGVwbGlicz0iJG5vdGluc3RfZGVwbGlicyAkbGliIgorKwkgICAgICBuZWVkX3JlbGluaz1ubworKwkgICAgOzsKKysJICAqKQorKwkgICAgaWYgdGVzdCAiJGluc3RhbGxlZCIgPSBubzsgdGhlbgorKwkgICAgICBub3RpbnN0X2RlcGxpYnM9IiRub3RpbnN0X2RlcGxpYnMgJGxpYiIKKysJICAgICAgbmVlZF9yZWxpbms9eWVzCisrCSAgICBmaQorKwkgICAgOzsKKysJICBlc2FjCisrCSAgIyBUaGlzIGlzIGEgc2hhcmVkIGxpYnJhcnkKKysKKysJICAjIFdhcm4gYWJvdXQgcG9ydGFiaWxpdHksIGNhbid0IGxpbmsgYWdhaW5zdCAtbW9kdWxlJ3Mgb24gc29tZQorKwkgICMgc3lzdGVtcyAoZGFyd2luKS4gIERvbid0IGJsZWF0IGFib3V0IGRsb3BlbmVkIG1vZHVsZXMgdGhvdWdoIQorKwkgIGRsb3Blbm1vZHVsZT0iIgorKwkgIGZvciBkbHByZW1vZHVsZXRlc3QgaW4gJGRscHJlZmlsZXM7IGRvCisrCSAgICBpZiB0ZXN0ICJYJGRscHJlbW9kdWxldGVzdCIgPSAiWCRsaWIiOyB0aGVuCisrCSAgICAgIGRsb3Blbm1vZHVsZT0iJGRscHJlbW9kdWxldGVzdCIKKysJICAgICAgYnJlYWsKKysJICAgIGZpCisrCSAgZG9uZQorKwkgIGlmIHRlc3QgLXogIiRkbG9wZW5tb2R1bGUiICYmIHRlc3QgIiRzaG91bGRub3RsaW5rIiA9IHllcyAmJiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCisrCSAgICAkRUNITworKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKysJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBleGVjdXRhYmxlICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgorKwkgICAgZWxzZQorKwkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgorKwkgICAgZmkKKysJICAgICRFQ0hPICIqKiogJGxpbmtsaWIgaXMgbm90IHBvcnRhYmxlISIKKysJICBmaQorKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgJiYKKysJICAgICB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiA9IHllczsgdGhlbgorKwkgICAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoLgorKwkgICAgIyBTa2lwIGRpcmVjdG9yaWVzIHRoYXQgYXJlIGluIHRoZSBzeXN0ZW0gZGVmYXVsdCBydW4tdGltZQorKwkgICAgIyBzZWFyY2ggcGF0aC4KKysJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKysJICAgICoiICRhYnNkaXIgIiopIDs7CisrCSAgICAqKQorKwkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCisrCSAgICAgICoiICRhYnNkaXIgIiopIDs7CisrCSAgICAgICopIGNvbXBpbGVfcnBhdGg9IiRjb21waWxlX3JwYXRoICRhYnNkaXIiCisrCSAgICAgIGVzYWMKKysJICAgICAgOzsKKysJICAgIGVzYWMKKysJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKysJICAgICoiICRsaWJkaXIgIiopIDs7CisrCSAgICAqKQorKwkgICAgICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorKwkgICAgICAqIiAkbGliZGlyICIqKSA7OworKwkgICAgICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiCisrCSAgICAgIGVzYWMKKysJICAgICAgOzsKKysJICAgIGVzYWMKKysJICBmaQorKworKwkgIGlmIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyI7IHRoZW4KKysJICAgICMgZmlndXJlIG91dCB0aGUgc29uYW1lCisrCSAgICBzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXMKKysJICAgIHNoaWZ0CisrCSAgICByZWFsbmFtZT0iJDEiCisrCSAgICBzaGlmdAorKwkgICAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisrCSAgICAjIHVzZSBkbG5hbWUgaWYgd2UgZ290IGl0LiBpdCdzIHBlcmZlY3RseSBnb29kLCBubz8KKysJICAgIGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCisrCSAgICAgIHNvbmFtZT0iJGRsbmFtZSIKKysJICAgIGVsaWYgdGVzdCAtbiAiJHNvbmFtZV9zcGVjIjsgdGhlbgorKwkgICAgICAjIGJsZWggd2luZG93cworKwkgICAgICBjYXNlICRob3N0IGluCisrCSAgICAgICpjeWd3aW4qIHwgbWluZ3cqKQorKwkJbWFqb3I9YGV4cHIgJGN1cnJlbnQgLSAkYWdlYAorKwkJdmVyc3VmZml4PSItJG1ham9yIgorKwkJOzsKKysJICAgICAgZXNhYworKwkgICAgICBldmFsIHNvbmFtZT1cIiRzb25hbWVfc3BlY1wiCisrCSAgICBlbHNlCisrCSAgICAgIHNvbmFtZT0iJHJlYWxuYW1lIgorKwkgICAgZmkKKysKKysJICAgICMgTWFrZSBhIG5ldyBuYW1lIGZvciB0aGUgZXh0cmFjdF9leHBzeW1zX2NtZHMgdG8gdXNlCisrCSAgICBzb3Jvb3Q9IiRzb25hbWUiCisrCSAgICBmdW5jX2Jhc2VuYW1lICIkc29yb290IgorKwkgICAgc29uYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisrCSAgICBmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmRsbCcgIiRzb25hbWUiCisrCSAgICBuZXdsaWI9bGliaW1wLSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuYQorKworKwkgICAgIyBJZiB0aGUgbGlicmFyeSBoYXMgbm8gZXhwb3J0IGxpc3QsIHRoZW4gY3JlYXRlIG9uZSBub3cKKysJICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUtZGVmIjsgdGhlbiA6CisrCSAgICBlbHNlCisrCSAgICAgIGZ1bmNfZWNobyAiZXh0cmFjdGluZyBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIFxgJHNvbmFtZSciCisrCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkZXh0cmFjdF9leHBzeW1zX2NtZHMiICdleGl0ICQ/JworKwkgICAgZmkKKysKKysJICAgICMgQ3JlYXRlICRuZXdsaWIKKysJICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRuZXdsaWIiOyB0aGVuIDo7IGVsc2UKKysJICAgICAgZnVuY19lY2hvICJnZW5lcmF0aW5nIGltcG9ydCBsaWJyYXJ5IGZvciBcYCRzb25hbWUnIgorKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIiAnZXhpdCAkPycKKysJICAgIGZpCisrCSAgICAjIG1ha2Ugc3VyZSB0aGUgbGlicmFyeSB2YXJpYWJsZXMgYXJlIHBvaW50aW5nIHRvIHRoZSBuZXcgbGlicmFyeQorKwkgICAgZGlyPSRvdXRwdXRfb2JqZGlyCisrCSAgICBsaW5rbGliPSRuZXdsaWIKKysJICBmaSAjIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIKKysKKysJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisrCSAgICBhZGRfc2hsaWJwYXRoPQorKwkgICAgYWRkX2Rpcj0KKysJICAgIGFkZD0KKysJICAgIGxpYl9saW5rZWQ9eWVzCisrCSAgICBjYXNlICRoYXJkY29kZV9hY3Rpb24gaW4KKysJICAgIGltbWVkaWF0ZSB8IHVuc3VwcG9ydGVkKQorKwkgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IG5vOyB0aGVuCisrCQlhZGQ9IiRkaXIvJGxpbmtsaWIiCisrCQljYXNlICRob3N0IGluCisrCQkgICotKi1zY28zLjJ2NS4wLlswMjRdKikgYWRkX2Rpcj0iLUwkZGlyIiA7OworKwkJICAqLSotc3lzdjQqdXcyKikgYWRkX2Rpcj0iLUwkZGlyIiA7OworKwkJICAqLSotc3lzdjVPcGVuVU5JWCogfCAqLSotc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IFwKKysJCSAgICAqLSotdW5peHdhcmU3KikgYWRkX2Rpcj0iLUwkZGlyIiA7OworKwkJICAqLSotZGFyd2luKiApCisrCQkgICAgIyBpZiB0aGUgbGliIGlzIGEgKG5vbi1kbG9wZW5lZCkgbW9kdWxlIHRoZW4gd2UgY2FuIG5vdAorKwkJICAgICMgbGluayBhZ2FpbnN0IGl0LCBzb21lb25lIGlzIGlnbm9yaW5nIHRoZSBlYXJsaWVyIHdhcm5pbmdzCisrCQkgICAgaWYgL3Vzci9iaW4vZmlsZSAtTCAkYWRkIDI+IC9kZXYvbnVsbCB8CisrCQkJICRHUkVQICI6IFteOl0qIGJ1bmRsZSIgPi9kZXYvbnVsbCA7IHRoZW4KKysJCSAgICAgIGlmIHRlc3QgIlgkZGxvcGVubW9kdWxlIiAhPSAiWCRsaWIiOyB0aGVuCisrCQkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaWIgJGxpbmtsaWIgaXMgYSBtb2R1bGUsIG5vdCBhIHNoYXJlZCBsaWJyYXJ5IgorKwkJCWlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSIgOyB0aGVuCisrCQkJICAkRUNITworKwkJCSAgJEVDSE8gIioqKiBBbmQgdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEgc3RhdGljIGFyY2hpdmUgYXZhaWxhYmxlIgorKwkJCSAgJEVDSE8gIioqKiBUaGUgbGluayB3aWxsIHByb2JhYmx5IGZhaWwsIHNvcnJ5IgorKwkJCWVsc2UKKysJCQkgIGFkZD0iJGRpci8kb2xkX2xpYnJhcnkiCisrCQkJZmkKKysJCSAgICAgIGVsaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorKwkJCWFkZD0iJGRpci8kb2xkX2xpYnJhcnkiCisrCQkgICAgICBmaQorKwkJICAgIGZpCisrCQllc2FjCisrCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKysJCWNhc2UgJGhvc3QgaW4KKysJCSotKi1zdW5vcyopIGFkZF9zaGxpYnBhdGg9IiRkaXIiIDs7CisrCQllc2FjCisrCQlhZGRfZGlyPSItTCRkaXIiCisrCQlhZGQ9Ii1sJG5hbWUiCisrCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0gbm87IHRoZW4KKysJCWFkZF9zaGxpYnBhdGg9IiRkaXIiCisrCQlhZGQ9Ii1sJG5hbWUiCisrCSAgICAgIGVsc2UKKysJCWxpYl9saW5rZWQ9bm8KKysJICAgICAgZmkKKysJICAgICAgOzsKKysJICAgIHJlbGluaykKKysJICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXMgJiYKKysJICAgICAgICAgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSIgPSBubzsgdGhlbgorKwkJYWRkPSIkZGlyLyRsaW5rbGliIgorKwkgICAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IHllczsgdGhlbgorKwkJYWRkX2Rpcj0iLUwkZGlyIgorKwkJIyBUcnkgbG9va2luZyBmaXJzdCBpbiB0aGUgbG9jYXRpb24gd2UncmUgYmVpbmcgaW5zdGFsbGVkIHRvLgorKwkJaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKysJCSAgY2FzZSAkbGliZGlyIGluCisrCQkgICAgW1xcL10qKQorKwkJICAgICAgYWRkX2Rpcj0iJGFkZF9kaXIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKysJCSAgICAgIDs7CisrCQkgIGVzYWMKKysJCWZpCisrCQlhZGQ9Ii1sJG5hbWUiCisrCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisrCQlhZGRfc2hsaWJwYXRoPSIkZGlyIgorKwkJYWRkPSItbCRuYW1lIgorKwkgICAgICBlbHNlCisrCQlsaWJfbGlua2VkPW5vCisrCSAgICAgIGZpCisrCSAgICAgIDs7CisrCSAgICAqKSBsaWJfbGlua2VkPW5vIDs7CisrCSAgICBlc2FjCisrCisrCSAgICBpZiB0ZXN0ICIkbGliX2xpbmtlZCIgIT0geWVzOyB0aGVuCisrCSAgICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAidW5zdXBwb3J0ZWQgaGFyZGNvZGUgcHJvcGVydGllcyIKKysJICAgIGZpCisrCisrCSAgICBpZiB0ZXN0IC1uICIkYWRkX3NobGlicGF0aCI7IHRoZW4KKysJICAgICAgY2FzZSA6JGNvbXBpbGVfc2hsaWJwYXRoOiBpbgorKwkgICAgICAqIjokYWRkX3NobGlicGF0aDoiKikgOzsKKysJICAgICAgKikgY29tcGlsZV9zaGxpYnBhdGg9IiRjb21waWxlX3NobGlicGF0aCRhZGRfc2hsaWJwYXRoOiIgOzsKKysJICAgICAgZXNhYworKwkgICAgZmkKKysJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisrCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBjb21waWxlX2RlcGxpYnM9IiRhZGRfZGlyICRjb21waWxlX2RlcGxpYnMiCisrCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGNvbXBpbGVfZGVwbGlicz0iJGFkZCAkY29tcGlsZV9kZXBsaWJzIgorKwkgICAgZWxzZQorKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZGVwbGlicz0iJGFkZF9kaXIgJGRlcGxpYnMiCisrCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGRlcGxpYnM9IiRhZGQgJGRlcGxpYnMiCisrCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiICE9IHllcyAmJgorKwkJIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiAhPSB5ZXMgJiYKKysJCSB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KKysJCWNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCisrCQkqIjokbGliZGlyOiIqKSA7OworKwkJKikgZmluYWxpemVfc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoJGxpYmRpcjoiIDs7CisrCQllc2FjCisrCSAgICAgIGZpCisrCSAgICBmaQorKwkgIGZpCisrCisrCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisrCSAgICBhZGRfc2hsaWJwYXRoPQorKwkgICAgYWRkX2Rpcj0KKysJICAgIGFkZD0KKysJICAgICMgRmluYWxpemUgY29tbWFuZCBmb3IgYm90aCBpcyBzaW1wbGU6IGp1c3QgaGFyZGNvZGUgaXQuCisrCSAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IHllcyAmJgorKwkgICAgICAgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSIgPSBubzsgdGhlbgorKwkgICAgICBhZGQ9IiRsaWJkaXIvJGxpbmtsaWIiCisrCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IHllczsgdGhlbgorKwkgICAgICBhZGRfZGlyPSItTCRsaWJkaXIiCisrCSAgICAgIGFkZD0iLWwkbmFtZSIKKysJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisrCSAgICAgIGNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCisrCSAgICAgICoiOiRsaWJkaXI6IiopIDs7CisrCSAgICAgICopIGZpbmFsaXplX3NobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCRsaWJkaXI6IiA7OworKwkgICAgICBlc2FjCisrCSAgICAgIGFkZD0iLWwkbmFtZSIKKysJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSB5ZXM7IHRoZW4KKysJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciIgJiYKKysJCSB0ZXN0IC1mICIkaW5zdF9wcmVmaXhfZGlyJGxpYmRpci8kbGlua2xpYiIgOyB0aGVuCisrCQlhZGQ9IiRpbnN0X3ByZWZpeF9kaXIkbGliZGlyLyRsaW5rbGliIgorKwkgICAgICBlbHNlCisrCQlhZGQ9IiRsaWJkaXIvJGxpbmtsaWIiCisrCSAgICAgIGZpCisrCSAgICBlbHNlCisrCSAgICAgICMgV2UgY2Fubm90IHNlZW0gdG8gaGFyZGNvZGUgaXQsIGd1ZXNzIHdlJ2xsIGZha2UgaXQuCisrCSAgICAgIGFkZF9kaXI9Ii1MJGxpYmRpciIKKysJICAgICAgIyBUcnkgbG9va2luZyBmaXJzdCBpbiB0aGUgbG9jYXRpb24gd2UncmUgYmVpbmcgaW5zdGFsbGVkIHRvLgorKwkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorKwkJY2FzZSAkbGliZGlyIGluCisrCQkgIFtcXC9dKikKKysJCSAgICBhZGRfZGlyPSIkYWRkX2RpciAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorKwkJICAgIDs7CisrCQllc2FjCisrCSAgICAgIGZpCisrCSAgICAgIGFkZD0iLWwkbmFtZSIKKysJICAgIGZpCisrCisrCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZmluYWxpemVfZGVwbGlicz0iJGFkZF9kaXIgJGZpbmFsaXplX2RlcGxpYnMiCisrCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGZpbmFsaXplX2RlcGxpYnM9IiRhZGQgJGZpbmFsaXplX2RlcGxpYnMiCisrCSAgICBlbHNlCisrCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBkZXBsaWJzPSIkYWRkX2RpciAkZGVwbGlicyIKKysJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZGVwbGlicz0iJGFkZCAkZGVwbGlicyIKKysJICAgIGZpCisrCSAgZmkKKysJZWxpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorKwkgICMgSGVyZSB3ZSBhc3N1bWUgdGhhdCBvbmUgb2YgaGFyZGNvZGVfZGlyZWN0IG9yIGhhcmRjb2RlX21pbnVzX0wKKysJICAjIGlzIG5vdCB1bnN1cHBvcnRlZC4gIFRoaXMgaXMgdmFsaWQgb24gYWxsIGtub3duIHN0YXRpYyBhbmQKKysJICAjIHNoYXJlZCBwbGF0Zm9ybXMuCisrCSAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgIT0gdW5zdXBwb3J0ZWQ7IHRoZW4KKysJICAgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgbGlua2xpYj0iJG9sZF9saWJyYXJ5IgorKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGlyLyRsaW5rbGliICRjb21waWxlX2RlcGxpYnMiCisrCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGlyLyRsaW5rbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorKwkgIGVsc2UKKysJICAgIGNvbXBpbGVfZGVwbGlicz0iLWwkbmFtZSAtTCRkaXIgJGNvbXBpbGVfZGVwbGlicyIKKysJICAgIGZpbmFsaXplX2RlcGxpYnM9Ii1sJG5hbWUgLUwkZGlyICRmaW5hbGl6ZV9kZXBsaWJzIgorKwkgIGZpCisrCWVsaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKysJICAjIE5vdCBhIHNoYXJlZCBsaWJyYXJ5CisrCSAgaWYgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAhPSBwYXNzX2FsbDsgdGhlbgorKwkgICAgIyBXZSdyZSB0cnlpbmcgbGluayBhIHNoYXJlZCBsaWJyYXJ5IGFnYWluc3QgYSBzdGF0aWMgb25lCisrCSAgICAjIGJ1dCB0aGUgc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBpdC4KKysKKysJICAgICMgSnVzdCBwcmludCBhIHdhcm5pbmcgYW5kIGFkZCB0aGUgbGlicmFyeSB0byBkZXBlbmRlbmN5X2xpYnMgc28KKysJICAgICMgdGhhdCB0aGUgcHJvZ3JhbSBjYW4gYmUgbGlua2VkIGFnYWluc3QgdGhlIHN0YXRpYyBsaWJyYXJ5LgorKwkgICAgJEVDSE8KKysJICAgICRFQ0hPICIqKiogV2FybmluZzogVGhpcyBzeXN0ZW0gY2FuIG5vdCBsaW5rIHRvIHN0YXRpYyBsaWIgYXJjaGl2ZSAkbGliLiIKKysJICAgICRFQ0hPICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorKwkgICAgJEVDSE8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisrCSAgICAkRUNITyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlLiIKKysJICAgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzOyB0aGVuCisrCSAgICAgICRFQ0hPICIqKiogQnV0IGFzIHlvdSB0cnkgdG8gYnVpbGQgYSBtb2R1bGUgbGlicmFyeSwgbGlidG9vbCB3aWxsIHN0aWxsIGNyZWF0ZSAiCisrCSAgICAgICRFQ0hPICIqKiogYSBzdGF0aWMgbW9kdWxlLCB0aGF0IHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlIGRsb3BlbmluZyBhcHBsaWNhdGlvbiIKKysJICAgICAgJEVDSE8gIioqKiBpcyBsaW5rZWQgd2l0aCB0aGUgLWRsb3BlbiBmbGFnIHRvIHJlc29sdmUgc3ltYm9scyBhdCBydW50aW1lLiIKKysJICAgICAgaWYgdGVzdCAteiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKysJCSRFQ0hPCisrCQkkRUNITyAiKioqIEhvd2V2ZXIsIHRoaXMgd291bGQgb25seSB3b3JrIGlmIGxpYnRvb2wgd2FzIGFibGUgdG8gZXh0cmFjdCBzeW1ib2wiCisrCQkkRUNITyAiKioqIGxpc3RzIGZyb20gYSBwcm9ncmFtLCB1c2luZyBcYG5tJyBvciBlcXVpdmFsZW50LCBidXQgbGlidG9vbCBjb3VsZCIKKysJCSRFQ0hPICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCisrCQkkRUNITyAiKioqIFxgbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCisrCSAgICAgIGZpCisrCSAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgorKwkJYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorKwkJYnVpbGRfb2xkX2xpYnM9eWVzCisrCSAgICAgIGVsc2UKKysJCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworKwkgICAgICBmaQorKwkgICAgZmkKKysJICBlbHNlCisrCSAgICBkZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkZGVwbGlicyIKKysJICAgIGxpbmtfc3RhdGljPXllcworKwkgIGZpCisrCWZpICMgbGluayBzaGFyZWQvc3RhdGljIGxpYnJhcnk/CisrCisrCWlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKysJICBpZiB0ZXN0IC1uICIkZGVwZW5kZW5jeV9saWJzIiAmJgorKwkgICAgIHsgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgIT0geWVzIHx8CisrCSAgICAgICB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzIHx8CisrCSAgICAgICB0ZXN0ICIkbGlua19zdGF0aWMiID0geWVzOyB9OyB0aGVuCisrCSAgICAjIEV4dHJhY3QgLVIgZnJvbSBkZXBlbmRlbmN5X2xpYnMKKysJICAgIHRlbXBfZGVwbGlicz0KKysJICAgIGZvciBsaWJkaXIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKysJICAgICAgY2FzZSAkbGliZGlyIGluCisrCSAgICAgIC1SKikgZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGxpYmRpciIKKysJICAgICAgICAgICB0ZW1wX3hycGF0aD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrCQkgICBjYXNlICIgJHhycGF0aCAiIGluCisrCQkgICAqIiAkdGVtcF94cnBhdGggIiopIDs7CisrCQkgICAqKSB4cnBhdGg9IiR4cnBhdGggJHRlbXBfeHJwYXRoIjs7CisrCQkgICBlc2FjOzsKKysJICAgICAgKikgdGVtcF9kZXBsaWJzPSIkdGVtcF9kZXBsaWJzICRsaWJkaXIiOzsKKysJICAgICAgZXNhYworKwkgICAgZG9uZQorKwkgICAgZGVwZW5kZW5jeV9saWJzPSIkdGVtcF9kZXBsaWJzIgorKwkgIGZpCisrCisrCSAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRhYnNkaXIiCisrCSAgIyBMaW5rIGFnYWluc3QgdGhpcyBsaWJyYXJ5CisrCSAgdGVzdCAiJGxpbmtfc3RhdGljIiA9IG5vICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGFic19sYWRpci8kbGFuYW1lICRuZXdkZXBlbmRlbmN5X2xpYnMiCisrCSAgIyAuLi4gYW5kIGl0cyBkZXBlbmRlbmN5X2xpYnMKKysJICB0bXBfbGlicz0KKysJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisrCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKysJICAgIGlmICRvcHRfZHVwbGljYXRlX2RlcHMgOyB0aGVuCisrCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCisrCSAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKysJICAgICAgZXNhYworKwkgICAgZmkKKysJICAgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIKKysJICBkb25lCisrCisrCSAgaWYgdGVzdCAiJGxpbmtfYWxsX2RlcGxpYnMiICE9IG5vOyB0aGVuCisrCSAgICAjIEFkZCB0aGUgc2VhcmNoIHBhdGhzIG9mIGFsbCBkZXBlbmRlbmN5IGxpYnJhcmllcworKwkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworKwkgICAgICBjYXNlICRkZXBsaWIgaW4KKysJICAgICAgLUwqKSBwYXRoPSIkZGVwbGliIiA7OworKwkgICAgICAqLmxhKQorKwkgICAgICAgIGZ1bmNfZGlybmFtZSAiJGRlcGxpYiIgIiIgIi4iCisrCQlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorKwkJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisrCQljYXNlICRkaXIgaW4KKysJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzZGlyPSIkZGlyIiA7OworKwkJKikKKysJCSAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAorKwkJICBpZiB0ZXN0IC16ICIkYWJzZGlyIjsgdGhlbgorKwkJICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRkaXInIgorKwkJICAgIGFic2Rpcj0iJGRpciIKKysJCSAgZmkKKysJCSAgOzsKKysJCWVzYWMKKysJCWlmICRHUkVQICJeaW5zdGFsbGVkPW5vIiAkZGVwbGliID4gL2Rldi9udWxsOyB0aGVuCisrCQljYXNlICRob3N0IGluCisrCQkqLSotZGFyd2luKikKKysJCSAgZGVwZGVwbD0KKysJCSAgZXZhbCBkZXBsaWJyYXJ5X25hbWVzPWAke1NFRH0gLW4gLWUgJ3MvXmxpYnJhcnlfbmFtZXM9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorKwkJICBpZiB0ZXN0IC1uICIkZGVwbGlicmFyeV9uYW1lcyIgOyB0aGVuCisrCQkgICAgZm9yIHRtcCBpbiAkZGVwbGlicmFyeV9uYW1lcyA7IGRvCisrCQkgICAgICBkZXBkZXBsPSR0bXAKKysJCSAgICBkb25lCisrCQkgICAgaWYgdGVzdCAtZiAiJGFic2Rpci8kb2JqZGlyLyRkZXBkZXBsIiA7IHRoZW4KKysJCSAgICAgIGRlcGRlcGw9IiRhYnNkaXIvJG9iamRpci8kZGVwZGVwbCIKKysJCSAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YG90b29sIC1MICRkZXBkZXBsIHwgJFNFRCAtbiAtZSAnM3E7MiwycCcgfCAkU0VEIC1lICdzLyguKi8vJ2AKKysJCSAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YCRFQ0hPICRkYXJ3aW5faW5zdGFsbF9uYW1lYAorKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkZGFyd2luX2luc3RhbGxfbmFtZSI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YG90b29sNjQgLUwgJGRlcGRlcGwgfCAkU0VEIC1uIC1lICczcTsyLDJwJyB8ICRTRUQgLWUgJ3MvKC4qLy8nYAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJEVDSE8gJGRhcndpbl9pbnN0YWxsX25hbWVgCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrCQkgICAgICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWR5bGliX2ZpbGUgJHt3bH0ke2Rhcndpbl9pbnN0YWxsX25hbWV9OiR7ZGVwZGVwbH0iCisrCQkgICAgICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgLWR5bGliX2ZpbGUgJHtkYXJ3aW5faW5zdGFsbF9uYW1lfToke2RlcGRlcGx9IgorKwkJICAgICAgcGF0aD0KKysJCSAgICBmaQorKwkJICBmaQorKwkJICA7OworKwkJKikKKysJCSAgcGF0aD0iLUwkYWJzZGlyLyRvYmpkaXIiCisrCQkgIDs7CisrCQllc2FjCisrCQllbHNlCisrCQkgIGV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisrCQkgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKysJCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKysJCSAgdGVzdCAiJGFic2RpciIgIT0gIiRsaWJkaXIiICYmIFwKKysJCSAgICBmdW5jX3dhcm5pbmcgIlxgJGRlcGxpYicgc2VlbXMgdG8gYmUgbW92ZWQiCisrCisrCQkgIHBhdGg9Ii1MJGFic2RpciIKKysJCWZpCisrCQk7OworKwkgICAgICBlc2FjCisrCSAgICAgIGNhc2UgIiAkZGVwbGlicyAiIGluCisrCSAgICAgICoiICRwYXRoICIqKSA7OworKwkgICAgICAqKSBkZXBsaWJzPSIkcGF0aCAkZGVwbGlicyIgOzsKKysJICAgICAgZXNhYworKwkgICAgZG9uZQorKwkgIGZpICMgbGlua19hbGxfZGVwbGlicyAhPSBubworKwlmaSAjIGxpbmttb2RlID0gbGliCisrICAgICAgZG9uZSAjIGZvciBkZXBsaWIgaW4gJGxpYnMKKysgICAgICBkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMiCisrICAgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuOyB0aGVuCisrCSMgTGluayB0aGUgZGxwcmVvcGVuZWQgbGlicmFyaWVzIGJlZm9yZSBvdGhlciBsaWJyYXJpZXMKKysJZm9yIGRlcGxpYiBpbiAkc2F2ZV9kZXBsaWJzOyBkbworKwkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisrCWRvbmUKKysgICAgICBmaQorKyAgICAgIGlmIHRlc3QgIiRwYXNzIiAhPSBkbG9wZW47IHRoZW4KKysJaWYgdGVzdCAiJHBhc3MiICE9IGNvbnY7IHRoZW4KKysJICAjIE1ha2Ugc3VyZSBsaWJfc2VhcmNoX3BhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCisrCSAgbGliX3NlYXJjaF9wYXRoPQorKwkgIGZvciBkaXIgaW4gJG5ld2xpYl9zZWFyY2hfcGF0aDsgZG8KKysJICAgIGNhc2UgIiRsaWJfc2VhcmNoX3BhdGggIiBpbgorKwkgICAgKiIgJGRpciAiKikgOzsKKysJICAgICopIGxpYl9zZWFyY2hfcGF0aD0iJGxpYl9zZWFyY2hfcGF0aCAkZGlyIiA7OworKwkgICAgZXNhYworKwkgIGRvbmUKKysJICBuZXdsaWJfc2VhcmNoX3BhdGg9CisrCWZpCisrCisrCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgIT0gInByb2csbGluayI7IHRoZW4KKysJICB2YXJzPSJkZXBsaWJzIgorKwllbHNlCisrCSAgdmFycz0iY29tcGlsZV9kZXBsaWJzIGZpbmFsaXplX2RlcGxpYnMiCisrCWZpCisrCWZvciB2YXIgaW4gJHZhcnMgZGVwZW5kZW5jeV9saWJzOyBkbworKwkgICMgQWRkIGxpYnJhcmllcyB0byAkdmFyIGluIHJldmVyc2Ugb3JkZXIKKysJICBldmFsIHRtcF9saWJzPVwiXCQkdmFyXCIKKysJICBuZXdfbGlicz0KKysJICBmb3IgZGVwbGliIGluICR0bXBfbGliczsgZG8KKysJICAgICMgRklYTUU6IFBlZGFudGljYWxseSwgdGhpcyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8sIHNvCisrCSAgICAjICAgICAgICB0aGF0IHNvbWUgbmFzdHkgZGVwZW5kZW5jeSBsb29wIGlzbid0IGFjY2lkZW50YWxseQorKwkgICAgIyAgICAgICAgYnJva2VuOgorKwkgICAgI25ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIKKysJICAgICMgUHJhZ21hdGljYWxseSwgdGhpcyBzZWVtcyB0byBjYXVzZSB2ZXJ5IGZldyBwcm9ibGVtcyBpbgorKwkgICAgIyBwcmFjdGljZToKKysJICAgIGNhc2UgJGRlcGxpYiBpbgorKwkgICAgLUwqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisrCSAgICAtUiopIDs7CisrCSAgICAqKQorKwkgICAgICAjIEFuZCBoZXJlIGlzIHRoZSByZWFzb246IHdoZW4gYSBsaWJyYXJ5IGFwcGVhcnMgbW9yZQorKwkgICAgICAjIHRoYW4gb25jZSBhcyBhbiBleHBsaWNpdCBkZXBlbmRlbmNlIG9mIGEgbGlicmFyeSwgb3IKKysJICAgICAgIyBpcyBpbXBsaWNpdGx5IGxpbmtlZCBpbiBtb3JlIHRoYW4gb25jZSBieSB0aGUKKysJICAgICAgIyBjb21waWxlciwgaXQgaXMgY29uc2lkZXJlZCBzcGVjaWFsLCBhbmQgbXVsdGlwbGUKKysJICAgICAgIyBvY2N1cnJlbmNlcyB0aGVyZW9mIGFyZSBub3QgcmVtb3ZlZC4gIENvbXBhcmUgdGhpcworKwkgICAgICAjIHdpdGggaGF2aW5nIHRoZSBzYW1lIGxpYnJhcnkgYmVpbmcgbGlzdGVkIGFzIGEKKysJICAgICAgIyBkZXBlbmRlbmN5IG9mIG11bHRpcGxlIG90aGVyIGxpYnJhcmllczogaW4gdGhpcyBjYXNlLAorKwkgICAgICAjIHdlIGtub3cgKHBlZGFudGljYWxseSwgd2UgYXNzdW1lKSB0aGUgbGlicmFyeSBkb2VzIG5vdAorKwkgICAgICAjIG5lZWQgdG8gYmUgbGlzdGVkIG1vcmUgdGhhbiBvbmNlLCBzbyB3ZSBrZWVwIG9ubHkgdGhlCisrCSAgICAgICMgbGFzdCBjb3B5LiAgVGhpcyBpcyBub3QgYWx3YXlzIHJpZ2h0LCBidXQgaXQgaXMgcmFyZQorKwkgICAgICAjIGVub3VnaCB0aGF0IHdlIHJlcXVpcmUgdXNlcnMgdGhhdCByZWFsbHkgbWVhbiB0byBwbGF5CisrCSAgICAgICMgc3VjaCB1bnBvcnRhYmxlIGxpbmtpbmcgdHJpY2tzIHRvIGxpbmsgdGhlIGxpYnJhcnkKKysJICAgICAgIyB1c2luZyAtV2wsLWxuYW1lLCBzbyB0aGF0IGxpYnRvb2wgZG9lcyBub3QgY29uc2lkZXIgaXQKKysJICAgICAgIyBmb3IgZHVwbGljYXRlIHJlbW92YWwuCisrCSAgICAgIGNhc2UgIiAkc3BlY2lhbGRlcGxpYnMgIiBpbgorKwkgICAgICAqIiAkZGVwbGliICIqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisrCSAgICAgICopCisrCQljYXNlICIgJG5ld19saWJzICIgaW4KKysJCSoiICRkZXBsaWIgIiopIDs7CisrCQkqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisrCQllc2FjCisrCQk7OworKwkgICAgICBlc2FjCisrCSAgICAgIDs7CisrCSAgICBlc2FjCisrCSAgZG9uZQorKwkgIHRtcF9saWJzPQorKwkgIGZvciBkZXBsaWIgaW4gJG5ld19saWJzOyBkbworKwkgICAgY2FzZSAkZGVwbGliIGluCisrCSAgICAtTCopCisrCSAgICAgIGNhc2UgIiAkdG1wX2xpYnMgIiBpbgorKwkgICAgICAqIiAkZGVwbGliICIqKSA7OworKwkgICAgICAqKSB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiIDs7CisrCSAgICAgIGVzYWMKKysJICAgICAgOzsKKysJICAgICopIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIgOzsKKysJICAgIGVzYWMKKysJICBkb25lCisrCSAgZXZhbCAkdmFyPVwiJHRtcF9saWJzXCIKKysJZG9uZSAjIGZvciB2YXIKKysgICAgICBmaQorKyAgICAgICMgTGFzdCBzdGVwOiByZW1vdmUgcnVudGltZSBsaWJzIGZyb20gZGVwZW5kZW5jeV9saWJzCisrICAgICAgIyAodGhleSBzdGF5IGluIGRlcGxpYnMpCisrICAgICAgdG1wX2xpYnM9CisrICAgICAgZm9yIGkgaW4gJGRlcGVuZGVuY3lfbGlicyA7IGRvCisrCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCAiIGluCisrCSoiICRpICIqKQorKwkgIGk9IiIKKysJICA7OworKwllc2FjCisrCWlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKysJICB0bXBfbGlicz0iJHRtcF9saWJzICRpIgorKwlmaQorKyAgICAgIGRvbmUKKysgICAgICBkZXBlbmRlbmN5X2xpYnM9JHRtcF9saWJzCisrICAgIGRvbmUgIyBmb3IgcGFzcworKyAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorKyAgICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorKyAgICBmaQorKyAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisrICAgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisrICAgIGZpCisrCisrICAgIGNhc2UgJGxpbmttb2RlIGluCisrICAgIG9sZGxpYikKKysgICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgorKwlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisrICAgICAgZmkKKysKKysgICAgICB0ZXN0IC1uICIkZGVwbGlicyIgJiYgXAorKwlmdW5jX3dhcm5pbmcgIlxgLWwnIGFuZCBcYC1MJyBhcmUgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisrCisrCisrICAgICAgdGVzdCAtbiAiJHJwYXRoIiAmJiBcCisrCWZ1bmNfd2FybmluZyAiXGAtcnBhdGgnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorKworKyAgICAgIHRlc3QgLW4gIiR4cnBhdGgiICYmIFwKKysJZnVuY193YXJuaW5nICJcYC1SJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKysKKysgICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKKysJZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8vLXZlcnNpb24tbnVtYmVyJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKysKKysgICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorKwlmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorKworKyAgICAgIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgXAorKwlmdW5jX3dhcm5pbmcgIlxgLWV4cG9ydC1zeW1ib2xzJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKysKKysgICAgICAjIE5vdyBzZXQgdGhlIHZhcmlhYmxlcyBmb3IgYnVpbGRpbmcgb2xkIGxpYnJhcmllcy4KKysgICAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKysgICAgICBvbGRsaWJzPSIkb3V0cHV0IgorKyAgICAgIG9ianM9IiRvYmpzJG9sZF9kZXBsaWJzIgorKyAgICAgIDs7CisrCisrICAgIGxpYikKKysgICAgICAjIE1ha2Ugc3VyZSB3ZSBvbmx5IGdlbmVyYXRlIGxpYnJhcmllcyBvZiB0aGUgZm9ybSBgbGliTkFNRS5sYScuCisrICAgICAgY2FzZSAkb3V0cHV0bmFtZSBpbgorKyAgICAgIGxpYiopCisrCWZ1bmNfc3RyaXBuYW1lICdsaWInICcubGEnICIkb3V0cHV0bmFtZSIKKysJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrCWV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisrCWV2YWwgbGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIgorKwk7OworKyAgICAgICopCisrCXRlc3QgIiRtb2R1bGUiID0gbm8gJiYgXAorKwkgIGZ1bmNfZmF0YWxfaGVscCAibGlidG9vbCBsaWJyYXJ5IFxgJG91dHB1dCcgbXVzdCBiZWdpbiB3aXRoIFxgbGliJyIKKysKKysJaWYgdGVzdCAiJG5lZWRfbGliX3ByZWZpeCIgIT0gbm87IHRoZW4KKysJICAjIEFkZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzIGlmIHJlcXVpcmVkCisrCSAgZnVuY19zdHJpcG5hbWUgJycgJy5sYScgIiRvdXRwdXRuYW1lIgorKwkgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKwkgIGV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisrCSAgZXZhbCBsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiCisrCWVsc2UKKysJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCisrCSAgbGlibmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrCWZpCisrCTs7CisrICAgICAgZXNhYworKworKyAgICAgIGlmIHRlc3QgLW4gIiRvYmpzIjsgdGhlbgorKwlpZiB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiICE9IHBhc3NfYWxsOyB0aGVuCisrCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGJ1aWxkIGxpYnRvb2wgbGlicmFyeSBcYCRvdXRwdXQnIGZyb20gbm9uLWxpYnRvb2wgb2JqZWN0cyBvbiB0aGlzIGhvc3Q6JG9ianMiCisrCWVsc2UKKysJICAkRUNITworKwkgICRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSBub24tbGlidG9vbCIKKysJICAkRUNITyAiKioqIG9iamVjdHMgJG9ianMgaXMgbm90IHBvcnRhYmxlISIKKysJICBsaWJvYmpzPSIkbGlib2JqcyAkb2JqcyIKKysJZmkKKysgICAgICBmaQorKworKyAgICAgIHRlc3QgIiRkbHNlbGYiICE9IG5vICYmIFwKKysJZnVuY193YXJuaW5nICJcYC1kbG9wZW4gc2VsZicgaXMgaWdub3JlZCBmb3IgbGlidG9vbCBsaWJyYXJpZXMiCisrCisrICAgICAgc2V0IGR1bW15ICRycGF0aAorKyAgICAgIHNoaWZ0CisrICAgICAgdGVzdCAiJCMiIC1ndCAxICYmIFwKKysJZnVuY193YXJuaW5nICJpZ25vcmluZyBtdWx0aXBsZSBcYC1ycGF0aCdzIGZvciBhIGxpYnRvb2wgbGlicmFyeSIKKysKKysgICAgICBpbnN0YWxsX2xpYmRpcj0iJDEiCisrCisrICAgICAgb2xkbGlicz0KKysgICAgICBpZiB0ZXN0IC16ICIkcnBhdGgiOyB0aGVuCisrCWlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisrCSAgIyBCdWlsZGluZyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeS4KKysJICAjIFNvbWUgY29tcGlsZXJzIGhhdmUgcHJvYmxlbXMgd2l0aCBhIGAuYWwnIGV4dGVuc2lvbiBzbworKwkgICMgY29udmVuaWVuY2UgbGlicmFyaWVzIHNob3VsZCBoYXZlIHRoZSBzYW1lIGV4dGVuc2lvbiBhbgorKwkgICMgYXJjaGl2ZSBub3JtYWxseSB3b3VsZC4KKysJICBvbGRsaWJzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0ICRvbGRsaWJzIgorKwkgIGJ1aWxkX2xpYnRvb2xfbGlicz1jb252ZW5pZW5jZQorKwkgIGJ1aWxkX29sZF9saWJzPXllcworKwlmaQorKworKwl0ZXN0IC1uICIkdmluZm8iICYmIFwKKysJICBmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mby8tdmVyc2lvbi1udW1iZXInIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIKKysKKysJdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKysJICBmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIKKysgICAgICBlbHNlCisrCisrCSMgUGFyc2UgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gYXJndW1lbnQuCisrCXNhdmVfaWZzPSIkSUZTIjsgSUZTPSc6JworKwlzZXQgZHVtbXkgJHZpbmZvIDAgMCAwCisrCXNoaWZ0CisrCUlGUz0iJHNhdmVfaWZzIgorKworKwl0ZXN0IC1uICIkNyIgJiYgXAorKwkgIGZ1bmNfZmF0YWxfaGVscCAidG9vIG1hbnkgcGFyYW1ldGVycyB0byBcYC12ZXJzaW9uLWluZm8nIgorKworKwkjIGNvbnZlcnQgYWJzb2x1dGUgdmVyc2lvbiBudW1iZXJzIHRvIGxpYnRvb2wgYWdlcworKwkjIHRoaXMgcmV0YWlucyBjb21wYXRpYmlsaXR5IHdpdGggLmxhIGZpbGVzIGFuZCBhdHRlbXB0cworKwkjIHRvIG1ha2UgdGhlIGNvZGUgYmVsb3cgYSBiaXQgbW9yZSBjb21wcmVoZW5zaWJsZQorKworKwljYXNlICR2aW5mb19udW1iZXIgaW4KKysJeWVzKQorKwkgIG51bWJlcl9tYWpvcj0iJDEiCisrCSAgbnVtYmVyX21pbm9yPSIkMiIKKysJICBudW1iZXJfcmV2aXNpb249IiQzIgorKwkgICMKKysJICAjIFRoZXJlIGFyZSByZWFsbHkgb25seSB0d28ga2luZHMgLS0gdGhvc2UgdGhhdAorKwkgICMgdXNlIHRoZSBjdXJyZW50IHJldmlzaW9uIGFzIHRoZSBtYWpvciB2ZXJzaW9uCisrCSAgIyBhbmQgdGhvc2UgdGhhdCBzdWJ0cmFjdCBhZ2UgYW5kIHVzZSBhZ2UgYXMKKysJICAjIGEgbWlub3IgdmVyc2lvbi4gIEJ1dCwgdGhlbiB0aGVyZSBpcyBpcml4CisrCSAgIyB3aGljaCBoYXMgYW4gZXh0cmEgMSBhZGRlZCBqdXN0IGZvciBmdW4KKysJICAjCisrCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisrCSAgZGFyd2lufGxpbnV4fG9zZnx3aW5kb3dzfG5vbmUpCisrCSAgICBjdXJyZW50PWBleHByICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yYAorKwkgICAgYWdlPSIkbnVtYmVyX21pbm9yIgorKwkgICAgcmV2aXNpb249IiRudW1iZXJfcmV2aXNpb24iCisrCSAgICA7OworKwkgIGZyZWVic2QtYW91dHxmcmVlYnNkLWVsZnxzdW5vcykKKysJICAgIGN1cnJlbnQ9IiRudW1iZXJfbWFqb3IiCisrCSAgICByZXZpc2lvbj0iJG51bWJlcl9taW5vciIKKysJICAgIGFnZT0iMCIKKysJICAgIDs7CisrCSAgaXJpeHxub25zdG9wdXgpCisrCSAgICBjdXJyZW50PWBleHByICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yIC0gMWAKKysJICAgIGFnZT0iJG51bWJlcl9taW5vciIKKysJICAgIHJldmlzaW9uPSIkbnVtYmVyX21pbm9yIgorKwkgICAgOzsKKysJICBlc2FjCisrCSAgOzsKKysJbm8pCisrCSAgY3VycmVudD0iJDEiCisrCSAgcmV2aXNpb249IiQyIgorKwkgIGFnZT0iJDMiCisrCSAgOzsKKysJZXNhYworKworKwkjIENoZWNrIHRoYXQgZWFjaCBvZiB0aGUgdGhpbmdzIGFyZSB2YWxpZCBudW1iZXJzLgorKwljYXNlICRjdXJyZW50IGluCisrCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKKysJKikKKysJICBmdW5jX2Vycm9yICJDVVJSRU5UIFxgJGN1cnJlbnQnIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIgorKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKysJICA7OworKwllc2FjCisrCisrCWNhc2UgJHJldmlzaW9uIGluCisrCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKKysJKikKKysJICBmdW5jX2Vycm9yICJSRVZJU0lPTiBcYCRyZXZpc2lvbicgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisrCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgorKwkgIDs7CisrCWVzYWMKKysKKysJY2FzZSAkYWdlIGluCisrCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKKysJKikKKysJICBmdW5jX2Vycm9yICJBR0UgXGAkYWdlJyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKKysJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisrCSAgOzsKKysJZXNhYworKworKwlpZiB0ZXN0ICIkYWdlIiAtZ3QgIiRjdXJyZW50IjsgdGhlbgorKwkgIGZ1bmNfZXJyb3IgIkFHRSBcYCRhZ2UnIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBpbnRlcmZhY2UgbnVtYmVyIFxgJGN1cnJlbnQnIgorKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKysJZmkKKysKKysJIyBDYWxjdWxhdGUgdGhlIHZlcnNpb24gdmFyaWFibGVzLgorKwltYWpvcj0KKysJdmVyc3VmZml4PQorKwl2ZXJzdHJpbmc9CisrCWNhc2UgJHZlcnNpb25fdHlwZSBpbgorKwlub25lKSA7OworKworKwlkYXJ3aW4pCisrCSAgIyBMaWtlIExpbnV4LCBidXQgd2l0aCB0aGUgY3VycmVudCB2ZXJzaW9uIGF2YWlsYWJsZSBpbgorKwkgICMgdmVyc3RyaW5nIGZvciBjb2RpbmcgaXQgaW50byB0aGUgbGlicmFyeSBoZWFkZXIKKysJICBtYWpvcj0uYGV4cHIgJGN1cnJlbnQgLSAkYWdlYAorKwkgIHZlcnN1ZmZpeD0iJG1ham9yLiRhZ2UuJHJldmlzaW9uIgorKwkgICMgRGFyd2luIGxkIGRvZXNuJ3QgbGlrZSAwIGZvciB0aGVzZSBvcHRpb25zLi4uCisrCSAgbWlub3JfY3VycmVudD1gZXhwciAkY3VycmVudCArIDFgCisrCSAgdmVyc3RyaW5nPSItY29tcGF0aWJpbGl0eV92ZXJzaW9uICRtaW5vcl9jdXJyZW50IC1jdXJyZW50X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgorKwkgIDs7CisrCisrCWZyZWVic2QtYW91dCkKKysJICBtYWpvcj0iLiRjdXJyZW50IgorKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRyZXZpc2lvbiI7CisrCSAgOzsKKysKKysJZnJlZWJzZC1lbGYpCisrCSAgbWFqb3I9Ii4kY3VycmVudCIKKysJICB2ZXJzdWZmaXg9Ii4kY3VycmVudCIKKysJICA7OworKworKwlpcml4IHwgbm9uc3RvcHV4KQorKwkgIG1ham9yPWBleHByICRjdXJyZW50IC0gJGFnZSArIDFgCisrCisrCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisrCSAgICBub25zdG9wdXgpIHZlcnN0cmluZ19wcmVmaXg9bm9uc3RvcHV4IDs7CisrCSAgICAqKSAgICAgICAgIHZlcnN0cmluZ19wcmVmaXg9c2dpIDs7CisrCSAgZXNhYworKwkgIHZlcnN0cmluZz0iJHZlcnN0cmluZ19wcmVmaXgkbWFqb3IuJHJldmlzaW9uIgorKworKwkgICMgQWRkIGluIGFsbCB0aGUgaW50ZXJmYWNlcyB0aGF0IHdlIGFyZSBjb21wYXRpYmxlIHdpdGguCisrCSAgbG9vcD0kcmV2aXNpb24KKysJICB3aGlsZSB0ZXN0ICIkbG9vcCIgLW5lIDA7IGRvCisrCSAgICBpZmFjZT1gZXhwciAkcmV2aXNpb24gLSAkbG9vcGAKKysJICAgIGxvb3A9YGV4cHIgJGxvb3AgLSAxYAorKwkgICAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nX3ByZWZpeCRtYWpvci4kaWZhY2U6JHZlcnN0cmluZyIKKysJICBkb25lCisrCisrCSAgIyBCZWZvcmUgdGhpcyBwb2ludCwgJG1ham9yIG11c3Qgbm90IGNvbnRhaW4gYC4nLgorKwkgIG1ham9yPS4kbWFqb3IKKysJICB2ZXJzdWZmaXg9IiRtYWpvci4kcmV2aXNpb24iCisrCSAgOzsKKysKKysJbGludXgpCisrCSAgbWFqb3I9LmBleHByICRjdXJyZW50IC0gJGFnZWAKKysJICB2ZXJzdWZmaXg9IiRtYWpvci4kYWdlLiRyZXZpc2lvbiIKKysJICA7OworKworKwlvc2YpCisrCSAgbWFqb3I9LmBleHByICRjdXJyZW50IC0gJGFnZWAKKysJICB2ZXJzdWZmaXg9Ii4kY3VycmVudC4kYWdlLiRyZXZpc2lvbiIKKysJICB2ZXJzdHJpbmc9IiRjdXJyZW50LiRhZ2UuJHJldmlzaW9uIgorKworKwkgICMgQWRkIGluIGFsbCB0aGUgaW50ZXJmYWNlcyB0aGF0IHdlIGFyZSBjb21wYXRpYmxlIHdpdGguCisrCSAgbG9vcD0kYWdlCisrCSAgd2hpbGUgdGVzdCAiJGxvb3AiIC1uZSAwOyBkbworKwkgICAgaWZhY2U9YGV4cHIgJGN1cnJlbnQgLSAkbG9vcGAKKysJICAgIGxvb3A9YGV4cHIgJGxvb3AgLSAxYAorKwkgICAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nOiR7aWZhY2V9LjAiCisrCSAgZG9uZQorKworKwkgICMgTWFrZSBleGVjdXRhYmxlcyBkZXBlbmQgb24gb3VyIGN1cnJlbnQgdmVyc2lvbi4KKysJICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmc6JHtjdXJyZW50fS4wIgorKwkgIDs7CisrCisrCXFueCkKKysJICBtYWpvcj0iLiRjdXJyZW50IgorKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50IgorKwkgIDs7CisrCisrCXN1bm9zKQorKwkgIG1ham9yPSIuJGN1cnJlbnQiCisrCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQuJHJldmlzaW9uIgorKwkgIDs7CisrCisrCXdpbmRvd3MpCisrCSAgIyBVc2UgJy0nIHJhdGhlciB0aGFuICcuJywgc2luY2Ugd2Ugb25seSB3YW50IG9uZQorKwkgICMgZXh0ZW5zaW9uIG9uIERPUyA4LjMgZmlsZXN5c3RlbXMuCisrCSAgbWFqb3I9YGV4cHIgJGN1cnJlbnQgLSAkYWdlYAorKwkgIHZlcnN1ZmZpeD0iLSRtYWpvciIKKysJICA7OworKworKwkqKQorKwkgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAidW5rbm93biBsaWJyYXJ5IHZlcnNpb24gdHlwZSBcYCR2ZXJzaW9uX3R5cGUnIgorKwkgIDs7CisrCWVzYWMKKysKKysJIyBDbGVhciB0aGUgdmVyc2lvbiBpbmZvIGlmIHdlIGRlZmF1bHRlZCwgYW5kIHRoZXkgc3BlY2lmaWVkIGEgcmVsZWFzZS4KKysJaWYgdGVzdCAteiAiJHZpbmZvIiAmJiB0ZXN0IC1uICIkcmVsZWFzZSI7IHRoZW4KKysJICBtYWpvcj0KKysJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKysJICBkYXJ3aW4pCisrCSAgICAjIHdlIGNhbid0IGNoZWNrIGZvciAiMC4wIiBpbiBhcmNoaXZlX2NtZHMgZHVlIHRvIHF1b3RpbmcKKysJICAgICMgcHJvYmxlbXMsIHNvIHdlIHJlc2V0IGl0IGNvbXBsZXRlbHkKKysJICAgIHZlcnN0cmluZz0KKysJICAgIDs7CisrCSAgKikKKysJICAgIHZlcnN0cmluZz0iMC4wIgorKwkgICAgOzsKKysJICBlc2FjCisrCSAgaWYgdGVzdCAiJG5lZWRfdmVyc2lvbiIgPSBubzsgdGhlbgorKwkgICAgdmVyc3VmZml4PQorKwkgIGVsc2UKKysJICAgIHZlcnN1ZmZpeD0iLjAuMCIKKysJICBmaQorKwlmaQorKworKwkjIFJlbW92ZSB2ZXJzaW9uIGluZm8gZnJvbSBuYW1lIGlmIHZlcnNpb25pbmcgc2hvdWxkIGJlIGF2b2lkZWQKKysJaWYgdGVzdCAiJGF2b2lkX3ZlcnNpb24iID0geWVzICYmIHRlc3QgIiRuZWVkX3ZlcnNpb24iID0gbm87IHRoZW4KKysJICBtYWpvcj0KKysJICB2ZXJzdWZmaXg9CisrCSAgdmVyc3RyaW5nPSIiCisrCWZpCisrCisrCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBhcmNoaXZlIHdpbGwgaGF2ZSB1bmRlZmluZWQgc3ltYm9scy4KKysJaWYgdGVzdCAiJGFsbG93X3VuZGVmaW5lZCIgPSB5ZXM7IHRoZW4KKysJICBpZiB0ZXN0ICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciID0gdW5zdXBwb3J0ZWQ7IHRoZW4KKysJICAgIGZ1bmNfd2FybmluZyAidW5kZWZpbmVkIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gJGhvc3Qgc2hhcmVkIGxpYnJhcmllcyIKKysJICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworKwkgICAgYnVpbGRfb2xkX2xpYnM9eWVzCisrCSAgZmkKKysJZWxzZQorKwkgICMgRG9uJ3QgYWxsb3cgdW5kZWZpbmVkIHN5bWJvbHMuCisrCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9IiRub191bmRlZmluZWRfZmxhZyIKKysJZmkKKysKKysgICAgICBmaQorKworKyAgICAgIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zICIkbGlibmFtZSIgIiRsaWJuYW1lIiAieWVzIgorKyAgICAgIGxpYm9ianM9IiRsaWJvYmpzICRzeW1maWxlb2JqIgorKyAgICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisrCisrICAgICAgaWYgdGVzdCAiJG1vZGUiICE9IHJlbGluazsgdGhlbgorKwkjIFJlbW92ZSBvdXIgb3V0cHV0cywgYnV0IGRvbid0IHJlbW92ZSBvYmplY3QgZmlsZXMgc2luY2UgdGhleQorKwkjIG1heSBoYXZlIGJlZW4gY3JlYXRlZCB3aGVuIGNvbXBpbGluZyBQSUMgb2JqZWN0cy4KKysJcmVtb3ZlbGlzdD0KKysJdGVtcHJlbW92ZWxpc3Q9YCRFQ0hPICIkb3V0cHV0X29iamRpci8qImAKKysJZm9yIHAgaW4gJHRlbXByZW1vdmVsaXN0OyBkbworKwkgIGNhc2UgJHAgaW4KKysJICAgICouJG9iamV4dCkKKysJICAgICAgIDs7CisrCSAgICAkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSB8ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiogfCAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9JHtyZWxlYXNlfS4qKQorKwkgICAgICAgaWYgdGVzdCAiWCRwcmVjaW91c19maWxlc19yZWdleCIgIT0gIlgiOyB0aGVuCisrCQkgaWYgJEVDSE8gIiRwIiB8ICRFR1JFUCAtZSAiJHByZWNpb3VzX2ZpbGVzX3JlZ2V4IiA+L2Rldi9udWxsIDI+JjEKKysJCSB0aGVuCisrCQkgICBjb250aW51ZQorKwkJIGZpCisrCSAgICAgICBmaQorKwkgICAgICAgcmVtb3ZlbGlzdD0iJHJlbW92ZWxpc3QgJHAiCisrCSAgICAgICA7OworKwkgICAgKikgOzsKKysJICBlc2FjCisrCWRvbmUKKysJdGVzdCAtbiAiJHJlbW92ZWxpc3QiICYmIFwKKysJICBmdW5jX3Nob3dfZXZhbCAiJHtSTX1yIFwkcmVtb3ZlbGlzdCIKKysgICAgICBmaQorKworKyAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorKyAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0gY29udmVuaWVuY2UgOyB0aGVuCisrCW9sZGxpYnM9IiRvbGRsaWJzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisrCisrCSMgVHJhbnNmb3JtIC5sbyBmaWxlcyB0byAubyBmaWxlcy4KKysJb2xkb2Jqcz0iJG9ianMgImAkRUNITyAiWCRsaWJvYmpzIiB8ICRTUDJOTCB8ICRYc2VkIC1lICcvXC4nJHtsaWJleHR9JyQvZCcgLWUgIiRsbzJvIiB8ICROTDJTUGAKKysgICAgICBmaQorKworKyAgICAgICMgRWxpbWluYXRlIGFsbCB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMuCisrICAgICAgI2ZvciBwYXRoIGluICRub3RpbnN0X3BhdGg7IGRvCisrICAgICAgIwlsaWJfc2VhcmNoX3BhdGg9YCRFQ0hPICJYJGxpYl9zZWFyY2hfcGF0aCAiIHwgJFhzZWQgLWUgInMlICRwYXRoICUgJWciYAorKyAgICAgICMJZGVwbGlicz1gJEVDSE8gIlgkZGVwbGlicyAiIHwgJFhzZWQgLWUgInMlIC1MJHBhdGggJSAlZyJgCisrICAgICAgIwlkZXBlbmRlbmN5X2xpYnM9YCRFQ0hPICJYJGRlcGVuZGVuY3lfbGlicyAiIHwgJFhzZWQgLWUgInMlIC1MJHBhdGggJSAlZyJgCisrICAgICAgI2RvbmUKKysKKysgICAgICBpZiB0ZXN0IC1uICIkeHJwYXRoIjsgdGhlbgorKwkjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhbnkgcnBhdGggZmxhZ3MsIHRoZW4gYWRkIHRoZW0uCisrCXRlbXBfeHJwYXRoPQorKwlmb3IgbGliZGlyIGluICR4cnBhdGg7IGRvCisrCSAgdGVtcF94cnBhdGg9IiR0ZW1wX3hycGF0aCAtUiRsaWJkaXIiCisrCSAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKysJICAqIiAkbGliZGlyICIqKSA7OworKwkgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIgOzsKKysJICBlc2FjCisrCWRvbmUKKysJaWYgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKysJICBkZXBlbmRlbmN5X2xpYnM9IiR0ZW1wX3hycGF0aCAkZGVwZW5kZW5jeV9saWJzIgorKwlmaQorKyAgICAgIGZpCisrCisrICAgICAgIyBNYWtlIHN1cmUgZGxmaWxlcyBjb250YWlucyBvbmx5IHVuaXF1ZSBmaWxlcyB0aGF0IHdvbid0IGJlIGRscHJlb3BlbmVkCisrICAgICAgb2xkX2RsZmlsZXM9IiRkbGZpbGVzIgorKyAgICAgIGRsZmlsZXM9CisrICAgICAgZm9yIGxpYiBpbiAkb2xkX2RsZmlsZXM7IGRvCisrCWNhc2UgIiAkZGxwcmVmaWxlcyAkZGxmaWxlcyAiIGluCisrCSoiICRsaWIgIiopIDs7CisrCSopIGRsZmlsZXM9IiRkbGZpbGVzICRsaWIiIDs7CisrCWVzYWMKKysgICAgICBkb25lCisrCisrICAgICAgIyBNYWtlIHN1cmUgZGxwcmVmaWxlcyBjb250YWlucyBvbmx5IHVuaXF1ZSBmaWxlcworKyAgICAgIG9sZF9kbHByZWZpbGVzPSIkZGxwcmVmaWxlcyIKKysgICAgICBkbHByZWZpbGVzPQorKyAgICAgIGZvciBsaWIgaW4gJG9sZF9kbHByZWZpbGVzOyBkbworKwljYXNlICIkZGxwcmVmaWxlcyAiIGluCisrCSoiICRsaWIgIiopIDs7CisrCSopIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRsaWIiIDs7CisrCWVzYWMKKysgICAgICBkb25lCisrCisrICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKysJaWYgdGVzdCAtbiAiJHJwYXRoIjsgdGhlbgorKwkgIGNhc2UgJGhvc3QgaW4KKysJICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotKi1iZW9zKikKKysJICAgICMgdGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgYyBsaWJyYXJ5IChhcyBzdWNoKSEKKysJICAgIDs7CisrCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorKwkgICAgIyBSaGFwc29keSBDIGxpYnJhcnkgaXMgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsKKysJICAgIGRlcGxpYnM9IiRkZXBsaWJzIFN5c3RlbS5sdGZyYW1ld29yayIKKysJICAgIDs7CisrCSAgKi0qLW5ldGJzZCopCisrCSAgICAjIERvbid0IGxpbmsgd2l0aCBsaWJjIHVudGlsIHRoZSBhLm91dCBsZC5zbyBpcyBmaXhlZC4KKysJICAgIDs7CisrCSAgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSopCisrCSAgICAjIERvIG5vdCBpbmNsdWRlIGxpYmMgZHVlIHRvIHVzIGhhdmluZyBsaWJjL2xpYmNfci4KKysJICAgIDs7CisrCSAgKi0qLXNjbzMuMnY1KiB8ICotKi1zY281djYqKQorKwkgICAgIyBDYXVzZXMgcHJvYmxlbXMgd2l0aCBfX2N0eXBlCisrCSAgICA7OworKwkgICotKi1zeXN2NC4ydXcyKiB8ICotKi1zeXN2NSogfCAqLSotdW5peHdhcmUqIHwgKi0qLU9wZW5VTklYKikKKysJICAgICMgQ29tcGlsZXIgaW5zZXJ0cyBsaWJjIGluIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aHJlYWRzIHRvIHdvcmsKKysgCSAgICA7OworKyAJICAqKQorKwkgICAgIyBBZGQgbGliYyB0byBkZXBsaWJzIG9uIGFsbCBvdGhlciBzeXN0ZW1zIGlmIG5lY2Vzc2FyeS4KKysJICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX25lZWRfbGMiID0gInllcyI7IHRoZW4KKysJICAgICAgZGVwbGlicz0iJGRlcGxpYnMgLWxjIgorKwkgICAgZmkKKysJICAgIDs7CisrCSAgZXNhYworKwlmaQorKworKwkjIFRyYW5zZm9ybSBkZXBsaWJzIGludG8gb25seSBkZXBsaWJzIHRoYXQgY2FuIGJlIGxpbmtlZCBpbiBzaGFyZWQuCisrCW5hbWVfc2F2ZT0kbmFtZQorKwlsaWJuYW1lX3NhdmU9JGxpYm5hbWUKKysJcmVsZWFzZV9zYXZlPSRyZWxlYXNlCisrCXZlcnN1ZmZpeF9zYXZlPSR2ZXJzdWZmaXgKKysJbWFqb3Jfc2F2ZT0kbWFqb3IKKysJIyBJJ20gbm90IHN1cmUgaWYgSSdtIHRyZWF0aW5nIHRoZSByZWxlYXNlIGNvcnJlY3RseS4gIEkgdGhpbmsKKysJIyByZWxlYXNlIHNob3VsZCBzaG93IHVwIGluIHRoZSAtbCAoaWUgLWxnbXA1KSBzbyB3ZSBkb24ndCB3YW50IHRvCisrCSMgYWRkIGl0IGluIHR3aWNlLiAgSXMgdGhhdCBjb3JyZWN0PworKwlyZWxlYXNlPSIiCisrCXZlcnN1ZmZpeD0iIgorKwltYWpvcj0iIgorKwluZXdkZXBsaWJzPQorKwlkcm9wcGVkZGVwcz1ubworKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorKwlwYXNzX2FsbCkKKysJICAjIERvbid0IGNoZWNrIGZvciBzaGFyZWQvc3RhdGljLiAgRXZlcnl0aGluZyB3b3Jrcy4KKysJICAjIFRoaXMgbWlnaHQgYmUgYSBsaXR0bGUgbmFpdmUuICBXZSBtaWdodCB3YW50IHRvIGNoZWNrCisrCSAgIyB3aGV0aGVyIHRoZSBsaWJyYXJ5IGV4aXN0cyBvciBub3QuICBCdXQgdGhpcyBpcyBvbgorKwkgICMgb3NmMyAmIG9zZjQgYW5kIEknbSBub3QgcmVhbGx5IHN1cmUuLi4gSnVzdAorKwkgICMgaW1wbGVtZW50aW5nIHdoYXQgd2FzIGFscmVhZHkgdGhlIGJlaGF2aW9yLgorKwkgIG5ld2RlcGxpYnM9JGRlcGxpYnMKKysJICA7OworKwl0ZXN0X2NvbXBpbGUpCisrCSAgIyBUaGlzIGNvZGUgc3RyZXNzZXMgdGhlICJsaWJyYXJpZXMgYXJlIHByb2dyYW1zIiBwYXJhZGlnbSB0byBpdHMKKysJICAjIGxpbWl0cy4gTWF5YmUgZXZlbiBicmVha3MgaXQuICBXZSBjb21waWxlIGEgcHJvZ3JhbSwgbGlua2luZyBpdAorKwkgICMgYWdhaW5zdCB0aGUgZGVwbGlicyBhcyBhIHByb3h5IGZvciB0aGUgbGlicmFyeS4gIFRoZW4gd2UgY2FuIGNoZWNrCisrCSAgIyB3aGV0aGVyIHRoZXkgbGlua2VkIGluIHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgd2l0aCBsZGQuCisrCSAgJG9wdF9kcnlfcnVuIHx8ICRSTSBjb25mdGVzdC5jCisrCSAgY2F0ID4gY29uZnRlc3QuYyA8PEVPRgorKwkgIGludCBtYWluKCkgeyByZXR1cm4gMDsgfQorK0VPRgorKwkgICRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QKKysJICBpZiAkTFRDQyAkTFRDRkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAkZGVwbGliczsgdGhlbgorKwkgICAgbGRkX291dHB1dD1gbGRkIGNvbmZ0ZXN0YAorKwkgICAgZm9yIGkgaW4gJGRlcGxpYnM7IGRvCisrCSAgICAgIG5hbWU9YGV4cHIgJGkgOiAnLWxcKC4qXCknYAorKwkgICAgICAjIElmICRuYW1lIGlzIGVtcHR5IHdlIGFyZSBvcGVyYXRpbmcgb24gYSAtTCBhcmd1bWVudC4KKysJICAgICAgaWYgdGVzdCAiJG5hbWUiICE9ICIiICYmIHRlc3QgIiRuYW1lIiAhPSAiMCI7IHRoZW4KKysJCWlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKysJCSAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisrCQkgICoiICRpICIqKQorKwkJICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorKwkJICAgIGk9IiIKKysJCSAgICA7OworKwkJICBlc2FjCisrCQlmaQorKwkJaWYgdGVzdCAtbiAiJGkiIDsgdGhlbgorKwkJICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKysJCSAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAorKwkJICBzZXQgZHVtbXkgJGRlcGxpYl9tYXRjaGVzOyBzaGlmdAorKwkJICBkZXBsaWJfbWF0Y2g9JDEKKysJCSAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgorKwkJICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorKwkJICBlbHNlCisrCQkgICAgZHJvcHBlZGRlcHM9eWVzCisrCQkgICAgJEVDSE8KKysJCSAgICAkRUNITyAiKioqIFdhcm5pbmc6IGR5bmFtaWMgbGlua2VyIGRvZXMgbm90IGFjY2VwdCBuZWVkZWQgbGlicmFyeSAkaS4iCisrCQkgICAgJEVDSE8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisrCQkgICAgJEVDSE8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisrCQkgICAgJEVDSE8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggSSBiZWxpZXZlIHlvdSBkbyBub3QgaGF2ZSIKKysJCSAgICAkRUNITyAiKioqIGJlY2F1c2UgYSB0ZXN0X2NvbXBpbGUgZGlkIHJldmVhbCB0aGF0IHRoZSBsaW5rZXIgZGlkIG5vdCB1c2UgaXQgZm9yIgorKwkJICAgICRFQ0hPICIqKiogaXRzIGR5bmFtaWMgZGVwZW5kZW5jeSBsaXN0IHRoYXQgcHJvZ3JhbXMgZ2V0IHJlc29sdmVkIHdpdGggYXQgcnVudGltZS4iCisrCQkgIGZpCisrCQlmaQorKwkgICAgICBlbHNlCisrCQluZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKysJICAgICAgZmkKKysJICAgIGRvbmUKKysJICBlbHNlCisrCSAgICAjIEVycm9yIG9jY3VycmVkIGluIHRoZSBmaXJzdCBjb21waWxlLiAgTGV0J3MgdHJ5IHRvIHNhbHZhZ2UKKysJICAgICMgdGhlIHNpdHVhdGlvbjogQ29tcGlsZSBhIHNlcGFyYXRlIHByb2dyYW0gZm9yIGVhY2ggbGlicmFyeS4KKysJICAgIGZvciBpIGluICRkZXBsaWJzOyBkbworKwkgICAgICBuYW1lPWBleHByICRpIDogJy1sXCguKlwpJ2AKKysJICAgICAgIyBJZiAkbmFtZSBpcyBlbXB0eSB3ZSBhcmUgb3BlcmF0aW5nIG9uIGEgLUwgYXJndW1lbnQuCisrCSAgICAgIGlmIHRlc3QgIiRuYW1lIiAhPSAiIiAmJiB0ZXN0ICIkbmFtZSIgIT0gIjAiOyB0aGVuCisrCQkkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0CisrCQlpZiAkTFRDQyAkTFRDRkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAkaTsgdGhlbgorKwkJICBsZGRfb3V0cHV0PWBsZGQgY29uZnRlc3RgCisrCQkgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKysJCSAgICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKysJCSAgICAqIiAkaSAiKikKKysJCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorKwkJICAgICAgaT0iIgorKwkJICAgICAgOzsKKysJCSAgICBlc2FjCisrCQkgIGZpCisrCQkgIGlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKysJCSAgICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKysJCSAgICBkZXBsaWJfbWF0Y2hlcz1gZXZhbCAiXFwkRUNITyBcIiRsaWJyYXJ5X25hbWVzX3NwZWNcIiJgCisrCQkgICAgc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlczsgc2hpZnQKKysJCSAgICBkZXBsaWJfbWF0Y2g9JDEKKysJCSAgICBpZiB0ZXN0IGBleHByICIkbGRkX291dHB1dCIgOiAiLiokZGVwbGliX21hdGNoImAgLW5lIDAgOyB0aGVuCisrCQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKysJCSAgICBlbHNlCisrCQkgICAgICBkcm9wcGVkZGVwcz15ZXMKKysJCSAgICAgICRFQ0hPCisrCQkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IGR5bmFtaWMgbGlua2VyIGRvZXMgbm90IGFjY2VwdCBuZWVkZWQgbGlicmFyeSAkaS4iCisrCQkgICAgICAkRUNITyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKysJCSAgICAgICRFQ0hPICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorKwkJICAgICAgJEVDSE8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKysJCSAgICAgICRFQ0hPICIqKiogYmVjYXVzZSBhIHRlc3RfY29tcGlsZSBkaWQgcmV2ZWFsIHRoYXQgdGhlIGxpbmtlciBkaWQgbm90IHVzZSB0aGlzIG9uZSIKKysJCSAgICAgICRFQ0hPICIqKiogYXMgYSBkeW5hbWljIGRlcGVuZGVuY3kgdGhhdCBwcm9ncmFtcyBjYW4gZ2V0IHJlc29sdmVkIHdpdGggYXQgcnVudGltZS4iCisrCQkgICAgZmkKKysJCSAgZmkKKysJCWVsc2UKKysJCSAgZHJvcHBlZGRlcHM9eWVzCisrCQkgICRFQ0hPCisrCQkgICRFQ0hPICIqKiogV2FybmluZyEgIExpYnJhcnkgJGkgaXMgbmVlZGVkIGJ5IHRoaXMgbGlicmFyeSBidXQgSSB3YXMgbm90IGFibGUgdG8iCisrCQkgICRFQ0hPICIqKiogbWFrZSBpdCBsaW5rIGluISAgWW91IHdpbGwgcHJvYmFibHkgbmVlZCB0byBpbnN0YWxsIGl0IG9yIHNvbWUiCisrCQkgICRFQ0hPICIqKiogbGlicmFyeSB0aGF0IGl0IGRlcGVuZHMgb24gYmVmb3JlIHRoaXMgbGlicmFyeSB3aWxsIGJlIGZ1bGx5IgorKwkJICAkRUNITyAiKioqIGZ1bmN0aW9uYWwuICBJbnN0YWxsaW5nIGl0IGJlZm9yZSBjb250aW51aW5nIHdvdWxkIGJlIGV2ZW4gYmV0dGVyLiIKKysJCWZpCisrCSAgICAgIGVsc2UKKysJCW5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorKwkgICAgICBmaQorKwkgICAgZG9uZQorKwkgIGZpCisrCSAgOzsKKysJZmlsZV9tYWdpYyopCisrCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKysJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCisrCSAgZm9yIGFfZGVwbGliIGluICRkZXBsaWJzOyBkbworKwkgICAgbmFtZT1gZXhwciAkYV9kZXBsaWIgOiAnLWxcKC4qXCknYAorKwkgICAgIyBJZiAkbmFtZSBpcyBlbXB0eSB3ZSBhcmUgb3BlcmF0aW5nIG9uIGEgLUwgYXJndW1lbnQuCisrCSAgICBpZiB0ZXN0ICIkbmFtZSIgIT0gIiIgJiYgdGVzdCAgIiRuYW1lIiAhPSAiMCI7IHRoZW4KKysJICAgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorKwkJY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisrCQkqIiAkYV9kZXBsaWIgIiopCisrCQkgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKysJCSAgYV9kZXBsaWI9IiIKKysJCSAgOzsKKysJCWVzYWMKKysJICAgICAgZmkKKysJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKysJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorKwkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCisrCQkgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZVsuLV0qIDI+L2Rldi9udWxsYAorKwkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCisrCQkgICAgICAjIEZvbGxvdyBzb2Z0IGxpbmtzLgorKwkJICAgICAgaWYgbHMgLWxMZCAiJHBvdGVudF9saWIiIDI+L2Rldi9udWxsIHwKKysJCQkgJEdSRVAgIiAtPiAiID4vZGV2L251bGw7IHRoZW4KKysJCQljb250aW51ZQorKwkJICAgICAgZmkKKysJCSAgICAgICMgVGhlIHN0YXRlbWVudCBhYm92ZSB0cmllcyB0byBhdm9pZCBlbnRlcmluZyBhbgorKwkJICAgICAgIyBlbmRsZXNzIGxvb3AgYmVsb3csIGluIGNhc2Ugb2YgY3ljbGljIGxpbmtzLgorKwkJICAgICAgIyBXZSBtaWdodCBzdGlsbCBlbnRlciBhbiBlbmRsZXNzIGxvb3AsIHNpbmNlIGEgbGluaworKwkJICAgICAgIyBsb29wIGNhbiBiZSBjbG9zZWQgd2hpbGUgd2UgZm9sbG93IGxpbmtzLAorKwkJICAgICAgIyBidXQgc28gd2hhdD8KKysJCSAgICAgIHBvdGxpYj0iJHBvdGVudF9saWIiCisrCQkgICAgICB3aGlsZSB0ZXN0IC1oICIkcG90bGliIiAyPi9kZXYvbnVsbDsgZG8KKysJCQlwb3RsaWJsaW5rPWBscyAtbGQgJHBvdGxpYiB8ICR7U0VEfSAncy8uKiAtPiAvLydgCisrCQkJY2FzZSAkcG90bGlibGluayBpbgorKwkJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgcG90bGliPSIkcG90bGlibGluayI7OworKwkJCSopIHBvdGxpYj1gJEVDSE8gIlgkcG90bGliIiB8ICRYc2VkIC1lICdzLFteL10qJCwsJ2AiJHBvdGxpYmxpbmsiOzsKKysJCQllc2FjCisrCQkgICAgICBkb25lCisrCQkgICAgICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcIlwkcG90bGliXCIgMj4vZGV2L251bGwgfAorKwkJCSAkU0VEIC1lIDEwcSB8CisrCQkJICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisrCQkJbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorKwkJCWFfZGVwbGliPSIiCisrCQkJYnJlYWsgMgorKwkJICAgICAgZmkKKysJCSAgZG9uZQorKwkJZG9uZQorKwkgICAgICBmaQorKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorKwkJZHJvcHBlZGRlcHM9eWVzCisrCQkkRUNITworKwkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaW5rZXIgcGF0aCBkb2VzIG5vdCBoYXZlIHJlYWwgZmlsZSBmb3IgbGlicmFyeSAkYV9kZXBsaWIuIgorKwkJJEVDSE8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisrCQkkRUNITyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKysJCSRFQ0hPICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisrCQkkRUNITyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKKysJCWlmIHRlc3QgLXogIiRwb3RsaWIiIDsgdGhlbgorKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYnV0IG5vIGNhbmRpZGF0ZXMgd2VyZSBmb3VuZC4gKC4uLmZvciBmaWxlIG1hZ2ljIHRlc3QpIgorKwkJZWxzZQorKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYW5kIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgcGFzc2VkIGEgZmlsZSBmb3JtYXQgdGVzdCIKKysJCSAgJEVDSE8gIioqKiB1c2luZyBhIGZpbGUgbWFnaWMuIExhc3QgZmlsZSBjaGVja2VkOiAkcG90bGliIgorKwkJZmkKKysJICAgICAgZmkKKysJICAgIGVsc2UKKysJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KKysJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorKwkgICAgZmkKKysJICBkb25lICMgR29uZSB0aHJvdWdoIGFsbCBkZXBsaWJzLgorKwkgIDs7CisrCW1hdGNoX3BhdHRlcm4qKQorKwkgIHNldCBkdW1teSAkZGVwbGlic19jaGVja19tZXRob2Q7IHNoaWZ0CisrCSAgbWF0Y2hfcGF0dGVybl9yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4qXCkiYAorKwkgIGZvciBhX2RlcGxpYiBpbiAkZGVwbGliczsgZG8KKysJICAgIG5hbWU9YGV4cHIgJGFfZGVwbGliIDogJy1sXCguKlwpJ2AKKysJICAgICMgSWYgJG5hbWUgaXMgZW1wdHkgd2UgYXJlIG9wZXJhdGluZyBvbiBhIC1MIGFyZ3VtZW50LgorKwkgICAgaWYgdGVzdCAtbiAiJG5hbWUiICYmIHRlc3QgIiRuYW1lIiAhPSAiMCI7IHRoZW4KKysJICAgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorKwkJY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisrCQkqIiAkYV9kZXBsaWIgIiopCisrCQkgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKysJCSAgYV9kZXBsaWI9IiIKKysJCSAgOzsKKysJCWVzYWMKKysJICAgICAgZmkKKysJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKysJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorKwkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCisrCQkgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZVsuLV0qIDI+L2Rldi9udWxsYAorKwkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCisrCQkgICAgcG90bGliPSIkcG90ZW50X2xpYiIgIyBzZWUgc3ltbGluay1jaGVjayBhYm92ZSBpbiBmaWxlX21hZ2ljIHRlc3QKKysJCSAgICBpZiBldmFsICJcJEVDSE8gXCJYJHBvdGVudF9saWJcIiIgMj4vZGV2L251bGwgfCAkWHNlZCAtZSAxMHEgfCBcCisrCQkgICAgICAgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKysJCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKysJCSAgICAgIGFfZGVwbGliPSIiCisrCQkgICAgICBicmVhayAyCisrCQkgICAgZmkKKysJCSAgZG9uZQorKwkJZG9uZQorKwkgICAgICBmaQorKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorKwkJZHJvcHBlZGRlcHM9eWVzCisrCQkkRUNITworKwkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaW5rZXIgcGF0aCBkb2VzIG5vdCBoYXZlIHJlYWwgZmlsZSBmb3IgbGlicmFyeSAkYV9kZXBsaWIuIgorKwkJJEVDSE8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisrCQkkRUNITyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKysJCSRFQ0hPICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisrCQkkRUNITyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKKysJCWlmIHRlc3QgLXogIiRwb3RsaWIiIDsgdGhlbgorKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYnV0IG5vIGNhbmRpZGF0ZXMgd2VyZSBmb3VuZC4gKC4uLmZvciByZWdleCBwYXR0ZXJuIHRlc3QpIgorKwkJZWxzZQorKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYW5kIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgcGFzc2VkIGEgZmlsZSBmb3JtYXQgdGVzdCIKKysJCSAgJEVDSE8gIioqKiB1c2luZyBhIHJlZ2V4IHBhdHRlcm4uIExhc3QgZmlsZSBjaGVja2VkOiAkcG90bGliIgorKwkJZmkKKysJICAgICAgZmkKKysJICAgIGVsc2UKKysJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KKysJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorKwkgICAgZmkKKysJICBkb25lICMgR29uZSB0aHJvdWdoIGFsbCBkZXBsaWJzLgorKwkgIDs7CisrCW5vbmUgfCB1bmtub3duIHwgKikKKysJICBuZXdkZXBsaWJzPSIiCisrCSAgdG1wX2RlcGxpYnM9YCRFQ0hPICJYICRkZXBsaWJzIiB8ICRYc2VkIFwKKysJICAgICAgLWUgJ3MvIC1sYyQvLycgLWUgJ3MvIC1bTFJdW14gXSovL2cnYAorKwkgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKysJICAgIGZvciBpIGluICRwcmVkZXBzICRwb3N0ZGVwcyA7IGRvCisrCSAgICAgICMgY2FuJ3QgdXNlIFhzZWQgYmVsb3csIGJlY2F1c2UgJGkgbWlnaHQgY29udGFpbiAnLycKKysJICAgICAgdG1wX2RlcGxpYnM9YCRFQ0hPICJYICR0bXBfZGVwbGlicyIgfCAkWHNlZCAtZSAicywkaSwsImAKKysJICAgIGRvbmUKKysJICBmaQorKwkgIGlmICRFQ0hPICJYICR0bXBfZGVwbGlicyIgfCAkWHNlZCAtZSAncy9bIAldLy9nJyB8CisrCSAgICAgJEdSRVAgLiA+L2Rldi9udWxsOyB0aGVuCisrCSAgICAkRUNITworKwkgICAgaWYgdGVzdCAiWCRkZXBsaWJzX2NoZWNrX21ldGhvZCIgPSAiWG5vbmUiOyB0aGVuCisrCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBwbGF0Zm9ybS4iCisrCSAgICBlbHNlCisrCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBrbm93biB0byBiZSBzdXBwb3J0ZWQuIgorKwkgICAgZmkKKysJICAgICRFQ0hPICIqKiogQWxsIGRlY2xhcmVkIGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBiZWluZyBkcm9wcGVkLiIKKysJICAgIGRyb3BwZWRkZXBzPXllcworKwkgIGZpCisrCSAgOzsKKysJZXNhYworKwl2ZXJzdWZmaXg9JHZlcnN1ZmZpeF9zYXZlCisrCW1ham9yPSRtYWpvcl9zYXZlCisrCXJlbGVhc2U9JHJlbGVhc2Vfc2F2ZQorKwlsaWJuYW1lPSRsaWJuYW1lX3NhdmUKKysJbmFtZT0kbmFtZV9zYXZlCisrCisrCWNhc2UgJGhvc3QgaW4KKysJKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorKwkgICMgT24gUmhhcHNvZHkgcmVwbGFjZSB0aGUgQyBsaWJyYXJ5IHdpdGggdGhlIFN5c3RlbSBmcmFtZXdvcmsKKysJICBuZXdkZXBsaWJzPWAkRUNITyAiWCAkbmV3ZGVwbGlicyIgfCAkWHNlZCAtZSAncy8gLWxjIC8gU3lzdGVtLmx0ZnJhbWV3b3JrIC8nYAorKwkgIDs7CisrCWVzYWMKKysKKysJaWYgdGVzdCAiJGRyb3BwZWRkZXBzIiA9IHllczsgdGhlbgorKwkgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzOyB0aGVuCisrCSAgICAkRUNITworKwkgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBsaWJ0b29sIGNvdWxkIG5vdCBzYXRpc2Z5IGFsbCBkZWNsYXJlZCBpbnRlci1saWJyYXJ5IgorKwkgICAgJEVDSE8gIioqKiBkZXBlbmRlbmNpZXMgb2YgbW9kdWxlICRsaWJuYW1lLiAgVGhlcmVmb3JlLCBsaWJ0b29sIHdpbGwgY3JlYXRlIgorKwkgICAgJEVDSE8gIioqKiBhIHN0YXRpYyBtb2R1bGUsIHRoYXQgc2hvdWxkIHdvcmsgYXMgbG9uZyBhcyB0aGUgZGxvcGVuaW5nIgorKwkgICAgJEVDSE8gIioqKiBhcHBsaWNhdGlvbiBpcyBsaW5rZWQgd2l0aCB0aGUgLWRsb3BlbiBmbGFnLiIKKysJICAgIGlmIHRlc3QgLXogIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisrCSAgICAgICRFQ0hPCisrCSAgICAgICRFQ0hPICIqKiogSG93ZXZlciwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKKysJICAgICAgJEVDSE8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgXGBubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCisrCSAgICAgICRFQ0hPICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCisrCSAgICAgICRFQ0hPICIqKiogXGBubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKKysJICAgIGZpCisrCSAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KKysJICAgICAgb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKKysJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorKwkgICAgICBidWlsZF9vbGRfbGlicz15ZXMKKysJICAgIGVsc2UKKysJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisrCSAgICBmaQorKwkgIGVsc2UKKysJICAgICRFQ0hPICIqKiogVGhlIGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIHRoYXQgaGF2ZSBiZWVuIGRyb3BwZWQgaGVyZSB3aWxsIGJlIgorKwkgICAgJEVDSE8gIioqKiBhdXRvbWF0aWNhbGx5IGFkZGVkIHdoZW5ldmVyIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCB0aGlzIGxpYnJhcnkiCisrCSAgICAkRUNITyAiKioqIG9yIGlzIGRlY2xhcmVkIHRvIC1kbG9wZW4gaXQuIgorKworKwkgICAgaWYgdGVzdCAiJGFsbG93X3VuZGVmaW5lZCIgPSBubzsgdGhlbgorKwkgICAgICAkRUNITworKwkgICAgICAkRUNITyAiKioqIFNpbmNlIHRoaXMgbGlicmFyeSBtdXN0IG5vdCBjb250YWluIHVuZGVmaW5lZCBzeW1ib2xzLCIKKysJICAgICAgJEVDSE8gIioqKiBiZWNhdXNlIGVpdGhlciB0aGUgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCB0aGVtIG9yIgorKwkgICAgICAkRUNITyAiKioqIGl0IHdhcyBleHBsaWNpdGx5IHJlcXVlc3RlZCB3aXRoIC1uby11bmRlZmluZWQsIgorKwkgICAgICAkRUNITyAiKioqIGxpYnRvb2wgd2lsbCBvbmx5IGNyZWF0ZSBhIHN0YXRpYyB2ZXJzaW9uIG9mIGl0LiIKKysJICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IG5vOyB0aGVuCisrCQlvbGRsaWJzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorKwkJYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorKwkJYnVpbGRfb2xkX2xpYnM9eWVzCisrCSAgICAgIGVsc2UKKysJCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworKwkgICAgICBmaQorKwkgICAgZmkKKysJICBmaQorKwlmaQorKwkjIERvbmUgY2hlY2tpbmcgZGVwbGlicyEKKysJZGVwbGlicz0kbmV3ZGVwbGlicworKyAgICAgIGZpCisrICAgICAgIyBUaW1lIHRvIGNoYW5nZSBhbGwgb3VyICJmb28ubHRmcmFtZXdvcmsiIHN0dWZmIGJhY2sgdG8gIi1mcmFtZXdvcmsgZm9vIgorKyAgICAgIGNhc2UgJGhvc3QgaW4KKysJKi0qLWRhcndpbiopCisrCSAgbmV3ZGVwbGlicz1gJEVDSE8gIlggJG5ld2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisrCSAgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9YCRFQ0hPICJYICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkWHNlZCAtZSAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKysJICBkZXBsaWJzPWAkRUNITyAiWCAkZGVwbGlicyIgfCAkWHNlZCAtZSAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKysJICA7OworKyAgICAgIGVzYWMKKysKKysgICAgICAjIG1vdmUgbGlicmFyeSBzZWFyY2ggcGF0aHMgdGhhdCBjb2luY2lkZSB3aXRoIHBhdGhzIHRvIG5vdCB5ZXQKKysgICAgICAjIGluc3RhbGxlZCBsaWJyYXJpZXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlicmFyeSBzZWFyY2ggbGlzdAorKyAgICAgIG5ld19saWJzPQorKyAgICAgIGZvciBwYXRoIGluICRub3RpbnN0X3BhdGg7IGRvCisrCWNhc2UgIiAkbmV3X2xpYnMgIiBpbgorKwkqIiAtTCRwYXRoLyRvYmpkaXIgIiopIDs7CisrCSopCisrCSAgY2FzZSAiICRkZXBsaWJzICIgaW4KKysJICAqIiAtTCRwYXRoLyRvYmpkaXIgIiopCisrCSAgICBuZXdfbGlicz0iJG5ld19saWJzIC1MJHBhdGgvJG9iamRpciIgOzsKKysJICBlc2FjCisrCSAgOzsKKysJZXNhYworKyAgICAgIGRvbmUKKysgICAgICBmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbworKwljYXNlICRkZXBsaWIgaW4KKysJLUwqKQorKwkgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgorKwkgICoiICRkZXBsaWIgIiopIDs7CisrCSAgKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworKwkgIGVzYWMKKysJICA7OworKwkqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisrCWVzYWMKKysgICAgICBkb25lCisrICAgICAgZGVwbGlicz0iJG5ld19saWJzIgorKworKyAgICAgICMgQWxsIHRoZSBsaWJyYXJ5LXNwZWNpZmljIHZhcmlhYmxlcyAoaW5zdGFsbF9saWJkaXIgaXMgc2V0IGFib3ZlKS4KKysgICAgICBsaWJyYXJ5X25hbWVzPQorKyAgICAgIG9sZF9saWJyYXJ5PQorKyAgICAgIGRsbmFtZT0KKysKKysgICAgICAjIFRlc3QgYWdhaW4sIHdlIG1heSBoYXZlIGRlY2lkZWQgbm90IHRvIGJ1aWxkIGl0IGFueSBtb3JlCisrICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKysJaWYgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgPSB5ZXM7IHRoZW4KKysJICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGhzCisrCSAgaGFyZGNvZGVfbGliZGlycz0KKysJICBkZXBfcnBhdGg9CisrCSAgcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCIKKysJICB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rICYmIHJwYXRoPSIkY29tcGlsZV9ycGF0aCRycGF0aCIKKysJICBmb3IgbGliZGlyIGluICRycGF0aDsgZG8KKysJICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorKwkgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKysJCWlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorKwkJICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorKwkJZWxzZQorKwkJICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisrCQkgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCisrCQkgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKKysJCSAgICA7OworKwkJICAqKQorKwkJICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorKwkJICAgIDs7CisrCQkgIGVzYWMKKysJCWZpCisrCSAgICAgIGVsc2UKKysJCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysJCWRlcF9ycGF0aD0iJGRlcF9ycGF0aCAkZmxhZyIKKysJICAgICAgZmkKKysJICAgIGVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorKwkgICAgICBjYXNlICIkcGVybV9ycGF0aCAiIGluCisrCSAgICAgICoiICRsaWJkaXIgIiopIDs7CisrCSAgICAgICopIHBlcm1fcnBhdGg9IiRwZXJtX3JwYXRoICRsaWJkaXIiIDs7CisrCSAgICAgIGVzYWMKKysJICAgIGZpCisrCSAgZG9uZQorKwkgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCisrCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCisrCSAgICAgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisrCSAgICBsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorKwkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQiOyB0aGVuCisrCSAgICAgIGV2YWwgZGVwX3JwYXRoPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRcIgorKwkgICAgZWxzZQorKwkgICAgICBldmFsIGRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysJICAgIGZpCisrCSAgZmkKKysJICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiICYmIHRlc3QgLW4gIiRwZXJtX3JwYXRoIjsgdGhlbgorKwkgICAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKysJICAgIHJwYXRoPQorKwkgICAgZm9yIGRpciBpbiAkcGVybV9ycGF0aDsgZG8KKysJICAgICAgcnBhdGg9IiRycGF0aCRkaXI6IgorKwkgICAgZG9uZQorKwkgICAgZXZhbCAiJHJ1bnBhdGhfdmFyPSckcnBhdGhcJCRydW5wYXRoX3Zhcic7IGV4cG9ydCAkcnVucGF0aF92YXIiCisrCSAgZmkKKysJICB0ZXN0IC1uICIkZGVwX3JwYXRoIiAmJiBkZXBsaWJzPSIkZGVwX3JwYXRoICRkZXBsaWJzIgorKwlmaQorKworKwlzaGxpYnBhdGg9IiRmaW5hbGl6ZV9zaGxpYnBhdGgiCisrCXRlc3QgIiRtb2RlIiAhPSByZWxpbmsgJiYgc2hsaWJwYXRoPSIkY29tcGlsZV9zaGxpYnBhdGgkc2hsaWJwYXRoIgorKwlpZiB0ZXN0IC1uICIkc2hsaWJwYXRoIjsgdGhlbgorKwkgIGV2YWwgIiRzaGxpYnBhdGhfdmFyPSckc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3Zhcic7IGV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKKysJZmkKKysKKysJIyBHZXQgdGhlIHJlYWwgYW5kIGxpbmsgbmFtZXMgb2YgdGhlIGxpYnJhcnkuCisrCWV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisrCWV2YWwgbGlicmFyeV9uYW1lcz1cIiRsaWJyYXJ5X25hbWVzX3NwZWNcIgorKwlzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXMKKysJc2hpZnQKKysJcmVhbG5hbWU9IiQxIgorKwlzaGlmdAorKworKwlpZiB0ZXN0IC1uICIkc29uYW1lX3NwZWMiOyB0aGVuCisrCSAgZXZhbCBzb25hbWU9XCIkc29uYW1lX3NwZWNcIgorKwllbHNlCisrCSAgc29uYW1lPSIkcmVhbG5hbWUiCisrCWZpCisrCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCisrCSAgZGxuYW1lPSRzb25hbWUKKysJZmkKKysKKysJbGliPSIkb3V0cHV0X29iamRpci8kcmVhbG5hbWUiCisrCWxpbmtuYW1lcz0KKysJZm9yIGxpbmsKKysJZG8KKysJICBsaW5rbmFtZXM9IiRsaW5rbmFtZXMgJGxpbmsiCisrCWRvbmUKKysKKysJIyBVc2Ugc3RhbmRhcmQgb2JqZWN0cyBpZiB0aGV5IGFyZSBwaWMKKysJdGVzdCAteiAiJHBpY19mbGFnIiAmJiBsaWJvYmpzPWAkRUNITyAiWCRsaWJvYmpzIiB8ICRTUDJOTCB8ICRYc2VkIC1lICIkbG8ybyIgfCAkTkwyU1BgCisrCXRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisrCisrCWRlbGZpbGVzPQorKwlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisrCSAgJG9wdF9kcnlfcnVuIHx8IGNwICIkZXhwb3J0X3N5bWJvbHMiICIkb3V0cHV0X29iamRpci8kbGlibmFtZS51ZXhwIgorKwkgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS51ZXhwIgorKwkgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJGV4cG9ydF9zeW1ib2xzIgorKwlmaQorKworKwlvcmlnX2V4cG9ydF9zeW1ib2xzPQorKwljYXNlICRob3N0X29zIGluCisrCWN5Z3dpbiogfCBtaW5ndyopCisrCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisrCSAgICAjIGV4cG9ydGluZyB1c2luZyB1c2VyIHN1cHBsaWVkIHN5bWZpbGUKKysJICAgIGlmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiAhPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgICAjIGFuZCBpdCdzIE5PVCBhbHJlYWR5IGEgLmRlZiBmaWxlLiBNdXN0IGZpZ3VyZSBvdXQKKysJICAgICAgIyB3aGljaCBvZiB0aGUgZ2l2ZW4gc3ltYm9scyBhcmUgZGF0YSBzeW1ib2xzIGFuZCB0YWcKKysJICAgICAgIyB0aGVtIGFzIHN1Y2guIFNvLCB0cmlnZ2VyIHVzZSBvZiBleHBvcnRfc3ltYm9sc19jbWRzLgorKwkgICAgICAjIGV4cG9ydF9zeW1ib2xzIGdldHMgcmVhc3NpZ25lZCBpbnNpZGUgdGhlICJwcmVwYXJlCisrCSAgICAgICMgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scyIgaWYgc3RhdGVtZW50LCBzbyB0aGUKKysJICAgICAgIyBpbmNsdWRlX2V4cHN5bXMgbG9naWMgc3RpbGwgd29ya3MuCisrCSAgICAgIG9yaWdfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKysJICAgICAgZXhwb3J0X3N5bWJvbHM9CisrCSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKysJICAgIGZpCisrCSAgZmkKKysJICA7OworKwllc2FjCisrCisrCSMgUHJlcGFyZSB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzCisrCWlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9scyI7IHRoZW4KKysJICBpZiB0ZXN0ICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiA9IHllcyB8fCB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisrCSAgICBmdW5jX2VjaG8gImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIgorKwkgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmV4cCIKKysJICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJGV4cG9ydF9zeW1ib2xzCisrCSAgICBjbWRzPSRleHBvcnRfc3ltYm9sc19jbWRzCisrCSAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKysJICAgIGZvciBjbWQgaW4gJGNtZHM7IGRvCisrCSAgICAgIElGUz0iJHNhdmVfaWZzIgorKwkgICAgICBldmFsIGNtZD1cIiRjbWRcIgorKwkgICAgICBpZiBsZW49YGV4cHIgIlgkY21kIiA6ICIuKiJgICYmCisrCSAgICAgICB0ZXN0ICIkbGVuIiAtbGUgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KKysJCWZ1bmNfc2hvd19ldmFsICIkY21kIiAnZXhpdCAkPycKKysJCXNraXBwZWRfZXhwb3J0PWZhbHNlCisrCSAgICAgIGVsc2UKKysJCSMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBleGVjdXRlIGluIG9uZSBzdGVwLgorKwkJZnVuY19lY2hvICJ1c2luZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlIGZvciBleHBvcnQgbGlzdC4uLiIKKysJCXNraXBwZWRfZXhwb3J0PToKKysJCSMgQnJlYWsgb3V0IGVhcmx5LCBvdGhlcndpc2Ugc2tpcHBlZF9leHBvcnQgbWF5IGJlCisrCQkjIHNldCB0byBmYWxzZSBieSBhIGxhdGVyIGJ1dCBzaG9ydGVyIGNtZC4KKysJCWJyZWFrCisrCSAgICAgIGZpCisrCSAgICBkb25lCisrCSAgICBJRlM9IiRzYXZlX2lmcyIKKysJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IjsgdGhlbgorKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkZXhwb3J0X3N5bWJvbHMiID4gIiR7ZXhwb3J0X3N5bWJvbHN9VCInCisrCSAgICAgIGZ1bmNfc2hvd19ldmFsICckTVYgIiR7ZXhwb3J0X3N5bWJvbHN9VCIgIiRleHBvcnRfc3ltYm9scyInCisrCSAgICBmaQorKwkgIGZpCisrCWZpCisrCisrCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKysJICB0bXBfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKysJICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSIkb3JpZ19leHBvcnRfc3ltYm9scyIKKysJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIlgkaW5jbHVkZV9leHBzeW1zIiB8ICRYc2VkIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKKysJZmkKKysKKysJaWYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KKysJICAjIFRoZSBnaXZlbiBleHBvcnRzX3N5bWJvbHMgZmlsZSBoYXMgdG8gYmUgZmlsdGVyZWQsIHNvIGZpbHRlciBpdC4KKysJICBmdW5jX2VjaG8gImZpbHRlciBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYScgdG8gdGFnIERBVEEgZXhwb3J0cyIKKysJICAjIEZJWE1FOiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgcG90ZW50aWFsbHkgY29udGFpbnMgbG90cyBvZgorKwkgICMgJ3MnIGNvbW1hbmRzIHdoaWNoIG5vdCBhbGwgc2VkcyBjYW4gaGFuZGxlLiBHTlUgc2VkIHNob3VsZCBiZSBmaW5lCisrCSAgIyB0aG91Z2guIEFsc28sIHRoZSBmaWx0ZXIgc2NhbGVzIHN1cGVybGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mCisrCSAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKKysJICAjIGlzbid0IGEgYmxlc3NlZCB0b29sLgorKwkgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1lICcvWyAsXURBVEEvIWQ7cyxcKC4qXClcKFsgXCxdLipcKSxzfF5cMSR8XDFcMnwsJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlcgorKwkgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKKysJICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYKKysJICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scworKwlmaQorKworKwl0bXBfZGVwbGlicz0KKysJZm9yIHRlc3RfZGVwbGliIGluICRkZXBsaWJzOyBkbworKwkgIGNhc2UgIiAkY29udmVuaWVuY2UgIiBpbgorKwkgICoiICR0ZXN0X2RlcGxpYiAiKikgOzsKKysJICAqKQorKwkgICAgdG1wX2RlcGxpYnM9IiR0bXBfZGVwbGlicyAkdGVzdF9kZXBsaWIiCisrCSAgICA7OworKwkgIGVzYWMKKysJZG9uZQorKwlkZXBsaWJzPSIkdG1wX2RlcGxpYnMiCisrCisrCWlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKysJICBpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiICYmCisrCSAgICB0ZXN0ICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiA9IHllcyAmJgorKwkgICAgdGVzdCAteiAiJGxpYm9ianMiOyB0aGVuCisrCSAgICAjIGV4dHJhY3QgdGhlIGFyY2hpdmVzLCBzbyB3ZSBoYXZlIG9iamVjdHMgdG8gbGlzdC4KKysJICAgICMgVE9ETzogY291bGQgb3B0aW1pemUgdGhpcyB0byBqdXN0IGV4dHJhY3Qgb25lIGFyY2hpdmUuCisrCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKysJICBmaQorKwkgIGlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKysJICAgIHNhdmVfbGlib2Jqcz0kbGlib2JqcworKwkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisrCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorKwkgIGVsc2UKKysJICAgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisrCSAgICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKysKKysJICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRjb252ZW5pZW5jZQorKwkgICAgbGlib2Jqcz0iJGxpYm9ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisrCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorKwkgIGZpCisrCWZpCisrCisrCWlmIHRlc3QgIiR0aHJlYWRfc2FmZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJHRocmVhZF9zYWZlX2ZsYWdfc3BlYyI7IHRoZW4KKysJICBldmFsIGZsYWc9XCIkdGhyZWFkX3NhZmVfZmxhZ19zcGVjXCIKKysJICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJGZsYWciCisrCWZpCisrCisrCSMgTWFrZSBhIGJhY2t1cCBvZiB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSB3aGVuIHJlbGlua2luZworKwlpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKysJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVUgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVUpJyB8fCBleGl0ICQ/CisrCWZpCisrCisrCSMgRG8gZWFjaCBvZiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KKysJaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJG1vZHVsZV9jbWRzIiA7IHRoZW4KKysJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRtb2R1bGVfZXhwc3ltX2NtZHMiOyB0aGVuCisrCSAgICBldmFsIHRlc3RfY21kcz1cIiRtb2R1bGVfZXhwc3ltX2NtZHNcIgorKwkgICAgY21kcz0kbW9kdWxlX2V4cHN5bV9jbWRzCisrCSAgZWxzZQorKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkbW9kdWxlX2NtZHNcIgorKwkgICAgY21kcz0kbW9kdWxlX2NtZHMKKysJICBmaQorKwllbHNlCisrCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkYXJjaGl2ZV9leHBzeW1fY21kcyI7IHRoZW4KKysJICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfZXhwc3ltX2NtZHNcIgorKwkgICAgY21kcz0kYXJjaGl2ZV9leHBzeW1fY21kcworKwkgIGVsc2UKKysJICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfY21kc1wiCisrCSAgICBjbWRzPSRhcmNoaXZlX2NtZHMKKysJICBmaQorKwlmaQorKworKwlpZiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmCisrCSAgIGxlbj1gZXhwciAiWCR0ZXN0X2NtZHMiIDogIi4qIiAyPi9kZXYvbnVsbGAgJiYKKysJICAgdGVzdCAiJGxlbiIgLWxlICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisrCSAgOgorKwllbHNlCisrCSAgIyBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGxpbmsgaW4gb25lIHN0ZXAsIGxpbmsgcGllY2V3aXNlCisrCSAgIyBvciwgaWYgdXNpbmcgR05VIGxkIGFuZCBza2lwcGVkX2V4cG9ydCBpcyBub3QgOiwgdXNlIGEgbGlua2VyCisrCSAgIyBzY3JpcHQuCisrCisrCSAgIyBTYXZlIHRoZSB2YWx1ZSBvZiAkb3V0cHV0IGFuZCAkbGlib2JqcyBiZWNhdXNlIHdlIHdhbnQgdG8KKysJICAjIHVzZSB0aGVtIGxhdGVyLiAgSWYgd2UgaGF2ZSB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgd2UKKysJICAjIHdhbnQgdG8gdXNlIHNhdmVfbGlib2JqcyBhcyBpdCB3YXMgYmVmb3JlCisrCSAgIyB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyB3YXMgZXhwYW5kZWQsIGJlY2F1c2Ugd2UgY2FuJ3QKKysJICAjIGFzc3VtZSB0aGUgbGlua2VyIHVuZGVyc3RhbmRzIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLgorKwkgICMgVGhpcyBtYXkgaGF2ZSB0byBiZSByZXZpc2l0ZWQsIGluIGNhc2UgdG9vIG1hbnkKKysJICAjIGNvbnZlbmllbmNlIGxpYnJhcmllcyBnZXQgbGlua2VkIGluIGFuZCBlbmQgdXAgZXhjZWVkaW5nCisrCSAgIyB0aGUgc3BlYy4KKysJICBpZiB0ZXN0IC16ICIkY29udmVuaWVuY2UiIHx8IHRlc3QgLXogIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKysJICAgIHNhdmVfbGlib2Jqcz0kbGlib2JqcworKwkgIGZpCisrCSAgc2F2ZV9vdXRwdXQ9JG91dHB1dAorKwkgIG91dHB1dF9sYT1gJEVDSE8gIlgkb3V0cHV0IiB8ICRYc2VkIC1lICIkYmFzZW5hbWUiYAorKworKwkgICMgQ2xlYXIgdGhlIHJlbG9hZGFibGUgb2JqZWN0IGNyZWF0aW9uIGNvbW1hbmQgcXVldWUgYW5kCisrCSAgIyBpbml0aWFsaXplIGsgdG8gb25lLgorKwkgIHRlc3RfY21kcz0KKysJICBjb25jYXRfY21kcz0KKysJICBvYmpsaXN0PQorKwkgIGxhc3Rfcm9iaj0KKysJICBrPTEKKysKKysJICBpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKysJICAgIG91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5sbmtzY3JpcHQKKysJICAgIGZ1bmNfZWNobyAiY3JlYXRpbmcgR05VIGxkIHNjcmlwdDogJG91dHB1dCIKKysJICAgICRFQ0hPICdJTlBVVCAoJyA+ICRvdXRwdXQKKysJICAgIGZvciBvYmogaW4gJHNhdmVfbGlib2JqcworKwkgICAgZG8KKysJICAgICAgJEVDSE8gIiRvYmoiID4+ICRvdXRwdXQKKysJICAgIGRvbmUKKysJICAgICRFQ0hPICcpJyA+PiAkb3V0cHV0CisrCSAgICBkZWxmaWxlcz0iJGRlbGZpbGVzICRvdXRwdXQiCisrCSAgZWxpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgIlgkZmlsZV9saXN0X3NwZWMiICE9IFg7IHRoZW4KKysJICAgIG91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5sbmsKKysJICAgIGZ1bmNfZWNobyAiY3JlYXRpbmcgbGlua2VyIGlucHV0IGZpbGUgbGlzdDogJG91dHB1dCIKKysJICAgIDogPiAkb3V0cHV0CisrCSAgICBzZXQgeCAkc2F2ZV9saWJvYmpzCisrCSAgICBzaGlmdAorKwkgICAgZmlyc3RvYmo9CisrCSAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiA9IHllczsgdGhlbgorKwkgICAgICBmaXJzdG9iaj0iJDEgIgorKwkgICAgICBzaGlmdAorKwkgICAgZmkKKysJICAgIGZvciBvYmoKKysJICAgIGRvCisrCSAgICAgICRFQ0hPICIkb2JqIiA+PiAkb3V0cHV0CisrCSAgICBkb25lCisrCSAgICBkZWxmaWxlcz0iJGRlbGZpbGVzICRvdXRwdXQiCisrCSAgICBvdXRwdXQ9JGZpcnN0b2JqXCIkZmlsZV9saXN0X3NwZWMkb3V0cHV0XCIKKysJICBlbHNlCisrCSAgICBpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIjsgdGhlbgorKwkgICAgICBmdW5jX2VjaG8gImNyZWF0aW5nIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLi4uIgorKwkgICAgICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKysJICAgICAgIyBMb29wIG92ZXIgdGhlIGxpc3Qgb2Ygb2JqZWN0cyB0byBiZSBsaW5rZWQuCisrCSAgICAgIGZvciBvYmogaW4gJHNhdmVfbGlib2JqcworKwkgICAgICBkbworKwkJZXZhbCB0ZXN0X2NtZHM9XCIkcmVsb2FkX2NtZHMgJG9iamxpc3QgJGxhc3Rfcm9ialwiCisrCQlpZiB0ZXN0ICJYJG9iamxpc3QiID0gWCB8fAorKwkJICAgeyBsZW49YGV4cHIgIlgkdGVzdF9jbWRzIiA6ICIuKiIgMj4vZGV2L251bGxgICYmCisrCQkgICAgIHRlc3QgIiRsZW4iIC1sZSAiJG1heF9jbWRfbGVuIjsgfTsgdGhlbgorKwkJICBvYmpsaXN0PSIkb2JqbGlzdCAkb2JqIgorKwkJZWxzZQorKwkJICAjIFRoZSBjb21tYW5kICR0ZXN0X2NtZHMgaXMgYWxtb3N0IHRvbyBsb25nLCBhZGQgYQorKwkJICAjIGNvbW1hbmQgdG8gdGhlIHF1ZXVlLgorKwkJICBpZiB0ZXN0ICIkayIgLWVxIDEgOyB0aGVuCisrCQkgICAgIyBUaGUgZmlyc3QgZmlsZSBkb2Vzbid0IGhhdmUgYSBwcmV2aW91cyBjb21tYW5kIHRvIGFkZC4KKysJCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiJHJlbG9hZF9jbWRzICRvYmpsaXN0ICRsYXN0X3JvYmpcIgorKwkJICBlbHNlCisrCQkgICAgIyBBbGwgc3Vic2VxdWVudCByZWxvYWRhYmxlIG9iamVjdCBmaWxlcyB3aWxsIGxpbmsgaW4KKysJCSAgICAjIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgorKwkJICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzfiRyZWxvYWRfY21kcyAkb2JqbGlzdCAkbGFzdF9yb2JqXCIKKysJCSAgZmkKKysJCSAgbGFzdF9yb2JqPSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CisrCQkgIGs9YGV4cHIgJGsgKyAxYAorKwkJICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKysJCSAgb2JqbGlzdD0kb2JqCisrCQkgIGxlbj0xCisrCQlmaQorKwkgICAgICBkb25lCisrCSAgICAgICMgSGFuZGxlIHRoZSByZW1haW5pbmcgb2JqZWN0cyBieSBjcmVhdGluZyBvbmUgbGFzdAorKwkgICAgICAjIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUuICBBbGwgc3Vic2VxdWVudCByZWxvYWRhYmxlIG9iamVjdAorKwkgICAgICAjIGZpbGVzIHdpbGwgbGluayBpbiB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KKysJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CisrCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kcmVsb2FkX2NtZHMgJG9iamxpc3QgJGxhc3Rfcm9ialwiCisrCisrCSAgICAgICMgU2V0IHVwIGEgY29tbWFuZCB0byByZW1vdmUgdGhlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzCisrCSAgICAgICMgYWZ0ZXIgdGhleSBhcmUgdXNlZC4KKysJICAgICAgaT0wCisrCSAgICAgIHdoaWxlIHRlc3QgIiRpIiAtbHQgIiRrIgorKwkgICAgICBkbworKwkJaT1gZXhwciAkaSArIDFgCisrCQlkZWxmaWxlcz0iJGRlbGZpbGVzICRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtpfS4kb2JqZXh0IgorKwkgICAgICBkb25lCisrCSAgICBlbHNlCisrCSAgICAgIG91dHB1dD0KKysJICAgIGZpCisrCisrCSAgICBpZiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgorKwkgICAgICBmdW5jX2VjaG8gImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIgorKwkgICAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwIgorKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRleHBvcnRfc3ltYm9scworKwkgICAgICBsaWJvYmpzPSRvdXRwdXQKKysJICAgICAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gY3JlYXRlIHRoZSBleHBvcnQgZmlsZS4KKysJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CisrCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzJGV4cG9ydF9zeW1ib2xzX2NtZHNcIgorKwkgICAgZmkKKysKKysJICAgIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmCisrCSAgICAgIGZ1bmNfZWNobyAiY3JlYXRpbmcgYSB0ZW1wb3JhcnkgcmVsb2FkYWJsZSBvYmplY3QgZmlsZTogJG91dHB1dCIKKysKKysJICAgICMgTG9vcCB0aHJvdWdoIHRoZSBjb21tYW5kcyBnZW5lcmF0ZWQgYWJvdmUgYW5kIGV4ZWN1dGUgdGhlbS4KKysJICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworKwkgICAgZm9yIGNtZCBpbiAkY29uY2F0X2NtZHM7IGRvCisrCSAgICAgIElGUz0iJHNhdmVfaWZzIgorKwkgICAgICAkb3B0X3NpbGVudCB8fCB7CisrCQkgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJGNtZCIKKysJCSAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorKwkgICAgICB9CisrCSAgICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kIiB8fCB7CisrCQlsdF9leGl0PSQ/CisrCisrCQkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKysJCWlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorKwkJICAoIGNkICIkb3V0cHV0X29iamRpciIgJiYgXAorKwkJICAgICRSTSAiJHtyZWFsbmFtZX1UIiAmJiBcCisrCQkgICAgJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKKysJCWZpCisrCisrCQlleGl0ICRsdF9leGl0CisrCSAgICAgIH0KKysJICAgIGRvbmUKKysJICAgIElGUz0iJHNhdmVfaWZzIgorKworKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgorKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkZXhwb3J0X3N5bWJvbHMiID4gIiR7ZXhwb3J0X3N5bWJvbHN9VCInCisrCSAgICAgIGZ1bmNfc2hvd19ldmFsICckTVYgIiR7ZXhwb3J0X3N5bWJvbHN9VCIgIiRleHBvcnRfc3ltYm9scyInCisrCSAgICBmaQorKwkgIGZpCisrCisrICAgICAgICAgIGlmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCisrCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisrCSAgICAgIHRtcF9leHBvcnRfc3ltYm9scz0iJGV4cG9ydF9zeW1ib2xzIgorKwkgICAgICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSIkb3JpZ19leHBvcnRfc3ltYm9scyIKKysJICAgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyRFQ0hPICJYJGluY2x1ZGVfZXhwc3ltcyIgfCAkWHNlZCB8ICRTUDJOTCA+PiAiJHRtcF9leHBvcnRfc3ltYm9scyInCisrCSAgICBmaQorKworKwkgICAgaWYgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiOyB0aGVuCisrCSAgICAgICMgVGhlIGdpdmVuIGV4cG9ydHNfc3ltYm9scyBmaWxlIGhhcyB0byBiZSBmaWx0ZXJlZCwgc28gZmlsdGVyIGl0LgorKwkgICAgICBmdW5jX2VjaG8gImZpbHRlciBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYScgdG8gdGFnIERBVEEgZXhwb3J0cyIKKysJICAgICAgIyBGSVhNRTogJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIHBvdGVudGlhbGx5IGNvbnRhaW5zIGxvdHMgb2YKKysJICAgICAgIyAncycgY29tbWFuZHMgd2hpY2ggbm90IGFsbCBzZWRzIGNhbiBoYW5kbGUuIEdOVSBzZWQgc2hvdWxkIGJlIGZpbmUKKysJICAgICAgIyB0aG91Z2guIEFsc28sIHRoZSBmaWx0ZXIgc2NhbGVzIHN1cGVybGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mCisrCSAgICAgICMgZ2xvYmFsIHZhcmlhYmxlcy4gam9pbigxKSB3b3VsZCBiZSBuaWNlIGhlcmUsIGJ1dCB1bmZvcnR1bmF0ZWx5CisrCSAgICAgICMgaXNuJ3QgYSBibGVzc2VkIHRvb2wuCisrCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1lICcvWyAsXURBVEEvIWQ7cyxcKC4qXClcKFsgXCxdLipcKSxzfF5cMSR8XDFcMnwsJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlcgorKwkgICAgICBkZWxmaWxlcz0iJGRlbGZpbGVzICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIiCisrCSAgICAgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZgorKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scworKwkgICAgZmkKKysJICBmaQorKworKwkgIGxpYm9ianM9JG91dHB1dAorKwkgICMgUmVzdG9yZSB0aGUgdmFsdWUgb2Ygb3V0cHV0LgorKwkgIG91dHB1dD0kc2F2ZV9vdXRwdXQKKysKKysJICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiICYmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKysJICAgIGV2YWwgbGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgorKwkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKysJICBmaQorKwkgICMgRXhwYW5kIHRoZSBsaWJyYXJ5IGxpbmtpbmcgY29tbWFuZHMgYWdhaW4gdG8gcmVzZXQgdGhlCisrCSAgIyB2YWx1ZSBvZiAkbGlib2JqcyBmb3IgcGllY2V3aXNlIGxpbmtpbmcuCisrCisrCSAgIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgorKwkgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzICYmIHRlc3QgLW4gIiRtb2R1bGVfY21kcyIgOyB0aGVuCisrCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRtb2R1bGVfZXhwc3ltX2NtZHMiOyB0aGVuCisrCSAgICAgIGNtZHM9JG1vZHVsZV9leHBzeW1fY21kcworKwkgICAgZWxzZQorKwkgICAgICBjbWRzPSRtb2R1bGVfY21kcworKwkgICAgZmkKKysJICBlbHNlCisrCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIjsgdGhlbgorKwkgICAgICBjbWRzPSRhcmNoaXZlX2V4cHN5bV9jbWRzCisrCSAgICBlbHNlCisrCSAgICAgIGNtZHM9JGFyY2hpdmVfY21kcworKwkgICAgZmkKKysJICBmaQorKwlmaQorKworKwlpZiB0ZXN0IC1uICIkZGVsZmlsZXMiOyB0aGVuCisrCSAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcyB0byAkY21kcy4KKysJICBldmFsIGNtZHM9XCJcJGNtZHN+XCRSTSAkZGVsZmlsZXNcIgorKwlmaQorKworKwkjIEFkZCBhbnkgb2JqZWN0cyBmcm9tIHByZWxvYWRlZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMKKysJaWYgdGVzdCAtbiAiJGRscHJlZmlsZXMiOyB0aGVuCisrCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKysJICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKysKKysJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkZGxwcmVmaWxlcworKwkgIGxpYm9ianM9IiRsaWJvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorKwkgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisrCWZpCisrCisrCXNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworKwlmb3IgY21kIGluICRjbWRzOyBkbworKwkgIElGUz0iJHNhdmVfaWZzIgorKwkgIGV2YWwgY21kPVwiJGNtZFwiCisrCSAgJG9wdF9zaWxlbnQgfHwgeworKwkgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkY21kIgorKwkgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorKwkgIH0KKysJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZCIgfHwgeworKwkgICAgbHRfZXhpdD0kPworKworKwkgICAgIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CisrCSAgICBpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKysJICAgICAgKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmIFwKKysJICAgICAgICAkUk0gIiR7cmVhbG5hbWV9VCIgJiYgXAorKwkJJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKKysJICAgIGZpCisrCisrCSAgICBleGl0ICRsdF9leGl0CisrCSAgfQorKwlkb25lCisrCUlGUz0iJHNhdmVfaWZzIgorKworKwkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKysJaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisrCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkUk0gJHtyZWFsbmFtZX1UICYmICRNViAkcmVhbG5hbWUgJHtyZWFsbmFtZX1UICYmICRNViAke3JlYWxuYW1lfVUgJHJlYWxuYW1lKScgfHwgZXhpdCAkPworKworKwkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKysJICAgIGlmIHRlc3QgLXogIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKysJICAgICAgZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCisrCSAgICBmaQorKwkgIGZpCisrCisrCSAgZXhpdCAkRVhJVF9TVUNDRVNTCisrCWZpCisrCisrCSMgQ3JlYXRlIGxpbmtzIHRvIHRoZSByZWFsIGxpYnJhcnkuCisrCWZvciBsaW5rbmFtZSBpbiAkbGlua25hbWVzOyBkbworKwkgIGlmIHRlc3QgIiRyZWFsbmFtZSIgIT0gIiRsaW5rbmFtZSI7IHRoZW4KKysJICAgIGZ1bmNfc2hvd19ldmFsICcoY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiAkUk0gIiRsaW5rbmFtZSIgJiYgJExOX1MgIiRyZWFsbmFtZSIgIiRsaW5rbmFtZSIpJyAnZXhpdCAkPycKKysJICBmaQorKwlkb25lCisrCisrCSMgSWYgLW1vZHVsZSBvciAtZXhwb3J0LWR5bmFtaWMgd2FzIHNwZWNpZmllZCwgc2V0IHRoZSBkbG5hbWUuCisrCWlmIHRlc3QgIiRtb2R1bGUiID0geWVzIHx8IHRlc3QgIiRleHBvcnRfZHluYW1pYyIgPSB5ZXM7IHRoZW4KKysJICAjIE9uIGFsbCBrbm93biBvcGVyYXRpbmcgc3lzdGVtcywgdGhlc2UgYXJlIGlkZW50aWNhbC4KKysJICBkbG5hbWU9IiRzb25hbWUiCisrCWZpCisrICAgICAgZmkKKysgICAgICA7OworKworKyAgICBvYmopCisrICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KKysJZnVuY193YXJuaW5nICJcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisrICAgICAgZmkKKysKKysgICAgICB0ZXN0IC1uICIkZGVwbGlicyIgJiYgXAorKwlmdW5jX3dhcm5pbmcgIlxgLWwnIGFuZCBcYC1MJyBhcmUgaWdub3JlZCBmb3Igb2JqZWN0cyIKKysKKysgICAgICB0ZXN0IC1uICIkcnBhdGgiICYmIFwKKysJZnVuY193YXJuaW5nICJcYC1ycGF0aCcgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKysKKysgICAgICB0ZXN0IC1uICIkeHJwYXRoIiAmJiBcCisrCWZ1bmNfd2FybmluZyAiXGAtUicgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKysKKysgICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKKysJZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisrCisrICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKysJZnVuY193YXJuaW5nICJcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorKworKyAgICAgIGNhc2UgJG91dHB1dCBpbgorKyAgICAgICoubG8pCisrCXRlc3QgLW4gIiRvYmpzJG9sZF9kZXBsaWJzIiAmJiBcCisrCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGJ1aWxkIGxpYnJhcnkgb2JqZWN0IFxgJG91dHB1dCcgZnJvbSBub24tbGlidG9vbCBvYmplY3RzIgorKworKwlsaWJvYmo9JG91dHB1dAorKwlmdW5jX2xvMm8gIiRsaWJvYmoiCisrCW9iaj0kZnVuY19sbzJvX3Jlc3VsdAorKwk7OworKyAgICAgICopCisrCWxpYm9iaj0KKysJb2JqPSIkb3V0cHV0IgorKwk7OworKyAgICAgIGVzYWMKKysKKysgICAgICAjIERlbGV0ZSB0aGUgb2xkIG9iamVjdHMuCisrICAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkb2JqICRsaWJvYmoKKysKKysgICAgICAjIE9iamVjdHMgZnJvbSBjb252ZW5pZW5jZSBsaWJyYXJpZXMuICBUaGlzIGFzc3VtZXMKKysgICAgICAjIHNpbmdsZS12ZXJzaW9uIGNvbnZlbmllbmNlIGxpYnJhcmllcy4gIFdoZW5ldmVyIHdlIGNyZWF0ZQorKyAgICAgICMgZGlmZmVyZW50IG9uZXMgZm9yIFBJQy9ub24tUElDLCB0aGlzIHdlJ2xsIGhhdmUgdG8gZHVwbGljYXRlCisrICAgICAgIyB0aGUgZXh0cmFjdGlvbi4KKysgICAgICByZWxvYWRfY29udl9vYmpzPQorKyAgICAgIGdlbnRvcD0KKysgICAgICAjIHJlbG9hZF9jbWRzIHJ1bnMgJExEIGRpcmVjdGx5LCBzbyBsZXQgdXMgZ2V0IHJpZCBvZgorKyAgICAgICMgLVdsIGZyb20gd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMgYW5kIGhvcGUgd2UgY2FuIGdldCBieSB3aXRoCisrICAgICAgIyB0dXJuaW5nIGNvbW1hIGludG8gc3BhY2UuLgorKyAgICAgIHdsPQorKworKyAgICAgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKysJaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorKwkgIGV2YWwgdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3M9XCIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgorKwkgIHJlbG9hZF9jb252X29ianM9JHJlbG9hZF9vYmpzXCBgJEVDSE8gIlgkdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3MiIHwgJFhzZWQgLWUgJ3N8LHwgfGcnYAorKwllbHNlCisrCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke29ian14IgorKwkgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorKworKwkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRjb252ZW5pZW5jZQorKwkgIHJlbG9hZF9jb252X29ianM9IiRyZWxvYWRfb2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKysJZmkKKysgICAgICBmaQorKworKyAgICAgICMgQ3JlYXRlIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorKyAgICAgIHJlbG9hZF9vYmpzPSIkb2JqcyRvbGRfZGVwbGlicyAiYCRFQ0hPICJYJGxpYm9ianMiIHwgJFNQMk5MIHwgJFhzZWQgLWUgJy9cLicke2xpYmV4dH0kJy9kJyAtZSAnL1wubGliJC9kJyAtZSAiJGxvMm8iIHwgJE5MMlNQYCIgJHJlbG9hZF9jb252X29ianMiICMjIyB0ZXN0c3VpdGU6IHNraXAgbmVzdGVkIHF1b3RpbmcgdGVzdAorKworKyAgICAgIG91dHB1dD0iJG9iaiIKKysgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJHJlbG9hZF9jbWRzIiAnZXhpdCAkPycKKysKKysgICAgICAjIEV4aXQgaWYgd2UgYXJlbid0IGRvaW5nIGEgbGlicmFyeSBvYmplY3QgZmlsZS4KKysgICAgICBpZiB0ZXN0IC16ICIkbGlib2JqIjsgdGhlbgorKwlpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgorKwkgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworKwlmaQorKworKwlleGl0ICRFWElUX1NVQ0NFU1MKKysgICAgICBmaQorKworKyAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllczsgdGhlbgorKwlpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgorKwkgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworKwlmaQorKworKwkjIENyZWF0ZSBhbiBpbnZhbGlkIGxpYnRvb2wgb2JqZWN0IGlmIG5vIFBJQywgc28gdGhhdCB3ZSBkb24ndAorKwkjIGFjY2lkZW50YWxseSBsaW5rIGl0IGludG8gYSBwcm9ncmFtLgorKwkjICRzaG93ICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiCisrCSMgJG9wdF9kcnlfcnVuIHx8IGV2YWwgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIgfHwgZXhpdCAkPworKwlleGl0ICRFWElUX1NVQ0NFU1MKKysgICAgICBmaQorKworKyAgICAgIGlmIHRlc3QgLW4gIiRwaWNfZmxhZyIgfHwgdGVzdCAiJHBpY19tb2RlIiAhPSBkZWZhdWx0OyB0aGVuCisrCSMgT25seSBkbyBjb21tYW5kcyBpZiB3ZSByZWFsbHkgaGF2ZSBkaWZmZXJlbnQgUElDIG9iamVjdHMuCisrCXJlbG9hZF9vYmpzPSIkbGlib2JqcyAkcmVsb2FkX2NvbnZfb2JqcyIKKysJb3V0cHV0PSIkbGlib2JqIgorKwlmdW5jX2V4ZWN1dGVfY21kcyAiJHJlbG9hZF9jbWRzIiAnZXhpdCAkPycKKysgICAgICBmaQorKworKyAgICAgIGlmIHRlc3QgLW4gIiRnZW50b3AiOyB0aGVuCisrCWZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworKyAgICAgIGZpCisrCisrICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisrICAgICAgOzsKKysKKysgICAgcHJvZykKKysgICAgICBjYXNlICRob3N0IGluCisrCSpjeWd3aW4qKSBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRvdXRwdXQiCisrCSAgICAgICAgICBvdXRwdXQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5leGU7OworKyAgICAgIGVzYWMKKysgICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKKysJZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIgorKworKyAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCisrCWZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgcHJvZ3JhbXMiCisrCisrICAgICAgdGVzdCAiJHByZWxvYWQiID0geWVzIFwKKysgICAgICAgICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB1bmtub3duIFwKKysJJiYgdGVzdCAiJGRsb3Blbl9zZWxmIiA9IHVua25vd24gXAorKwkmJiB0ZXN0ICIkZGxvcGVuX3NlbGZfc3RhdGljIiA9IHVua25vd24gJiYgXAorKwkgIGZ1bmNfd2FybmluZyAiXGBMVF9JTklUKFtkbG9wZW5dKScgbm90IHVzZWQuIEFzc3VtaW5nIG5vIGRsb3BlbiBzdXBwb3J0LiIKKysKKysgICAgICBjYXNlICRob3N0IGluCisrICAgICAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorKwkjIE9uIFJoYXBzb2R5IHJlcGxhY2UgdGhlIEMgbGlicmFyeSBpcyB0aGUgU3lzdGVtIGZyYW1ld29yaworKwljb21waWxlX2RlcGxpYnM9YCRFQ0hPICJYICRjb21waWxlX2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKKysJZmluYWxpemVfZGVwbGlicz1gJEVDSE8gIlggJGZpbmFsaXplX2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKKysJOzsKKysgICAgICBlc2FjCisrCisrICAgICAgY2FzZSAkaG9zdCBpbgorKyAgICAgICotKi1kYXJ3aW4qKQorKwkjIERvbid0IGFsbG93IGxhenkgbGlua2luZywgaXQgYnJlYWtzIEMrKyBnbG9iYWwgY29uc3RydWN0b3JzCisrCSMgQnV0IGlzIHN1cHBvc2VkbHkgZml4ZWQgb24gMTAuNCBvciBsYXRlciAoeWF5ISkuCisrCWlmIHRlc3QgIiR0YWduYW1lIiA9IENYWCA7IHRoZW4KKysJICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9IGluCisrCSAgICAxMC5bMDEyM10pCisrCSAgICAgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAke3dsfS1iaW5kX2F0X2xvYWQiCisrCSAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICR7d2x9LWJpbmRfYXRfbG9hZCIKKysJICAgIDs7CisrCSAgZXNhYworKwlmaQorKwkjIFRpbWUgdG8gY2hhbmdlIGFsbCBvdXIgImZvby5sdGZyYW1ld29yayIgc3R1ZmYgYmFjayB0byAiLWZyYW1ld29yayBmb28iCisrCWNvbXBpbGVfZGVwbGlicz1gJEVDSE8gIlggJGNvbXBpbGVfZGVwbGlicyIgfCAkWHNlZCAtZSAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKysJZmluYWxpemVfZGVwbGlicz1gJEVDSE8gIlggJGZpbmFsaXplX2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisrCTs7CisrICAgICAgZXNhYworKworKworKyAgICAgICMgbW92ZSBsaWJyYXJ5IHNlYXJjaCBwYXRocyB0aGF0IGNvaW5jaWRlIHdpdGggcGF0aHMgdG8gbm90IHlldAorKyAgICAgICMgaW5zdGFsbGVkIGxpYnJhcmllcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaWJyYXJ5IHNlYXJjaCBsaXN0CisrICAgICAgbmV3X2xpYnM9CisrICAgICAgZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KKysJY2FzZSAiICRuZXdfbGlicyAiIGluCisrCSoiIC1MJHBhdGgvJG9iamRpciAiKikgOzsKKysJKikKKysJICBjYXNlICIgJGNvbXBpbGVfZGVwbGlicyAiIGluCisrCSAgKiIgLUwkcGF0aC8kb2JqZGlyICIqKQorKwkgICAgbmV3X2xpYnM9IiRuZXdfbGlicyAtTCRwYXRoLyRvYmpkaXIiIDs7CisrCSAgZXNhYworKwkgIDs7CisrCWVzYWMKKysgICAgICBkb25lCisrICAgICAgZm9yIGRlcGxpYiBpbiAkY29tcGlsZV9kZXBsaWJzOyBkbworKwljYXNlICRkZXBsaWIgaW4KKysJLUwqKQorKwkgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgorKwkgICoiICRkZXBsaWIgIiopIDs7CisrCSAgKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworKwkgIGVzYWMKKysJICA7OworKwkqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisrCWVzYWMKKysgICAgICBkb25lCisrICAgICAgY29tcGlsZV9kZXBsaWJzPSIkbmV3X2xpYnMiCisrCisrCisrICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRjb21waWxlX2RlcGxpYnMiCisrICAgICAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJGZpbmFsaXplX2RlcGxpYnMiCisrCisrICAgICAgaWYgdGVzdCAtbiAiJHJwYXRoJHhycGF0aCI7IHRoZW4KKysJIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYW55IHJwYXRoIGZsYWdzLCB0aGVuIGFkZCB0aGVtLgorKwlmb3IgbGliZGlyIGluICRycGF0aCAkeHJwYXRoOyBkbworKwkgICMgVGhpcyBpcyB0aGUgbWFnaWMgdG8gdXNlIC1ycGF0aC4KKysJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorKwkgICoiICRsaWJkaXIgIiopIDs7CisrCSAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIiA7OworKwkgIGVzYWMKKysJZG9uZQorKyAgICAgIGZpCisrCisrICAgICAgIyBOb3cgaGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aHMKKysgICAgICBycGF0aD0KKysgICAgICBoYXJkY29kZV9saWJkaXJzPQorKyAgICAgIGZvciBsaWJkaXIgaW4gJGNvbXBpbGVfcnBhdGggJGZpbmFsaXplX3JwYXRoOyBkbworKwlpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKysJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKysJICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorKwkgICAgICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorKwkgICAgZWxzZQorKwkgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisrCSAgICAgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCisrCSAgICAgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKKysJCTs7CisrCSAgICAgICopCisrCQloYXJkY29kZV9saWJkaXJzPSIkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKysJCTs7CisrCSAgICAgIGVzYWMKKysJICAgIGZpCisrCSAgZWxzZQorKwkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKwkgICAgcnBhdGg9IiRycGF0aCAkZmxhZyIKKysJICBmaQorKwllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKysJICBjYXNlICIkcGVybV9ycGF0aCAiIGluCisrCSAgKiIgJGxpYmRpciAiKikgOzsKKysJICAqKSBwZXJtX3JwYXRoPSIkcGVybV9ycGF0aCAkbGliZGlyIiA7OworKwkgIGVzYWMKKysJZmkKKysJY2FzZSAkaG9zdCBpbgorKwkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKikKKysJICB0ZXN0YmluZGlyPWAke0VDSE99ICIkbGliZGlyIiB8ICR7U0VEfSAtZSAncyovbGliJCovYmluKidgCisrCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisrCSAgKiI6JGxpYmRpcjoiKikgOzsKKysJICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokbGliZGlyIjs7CisrCSAgZXNhYworKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorKwkgICoiOiR0ZXN0YmluZGlyOiIqKSA7OworKwkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiR0ZXN0YmluZGlyIjs7CisrCSAgZXNhYworKwkgIDs7CisrCWVzYWMKKysgICAgICBkb25lCisrICAgICAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KKysgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKysJIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorKwlsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorKwlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysgICAgICBmaQorKyAgICAgIGNvbXBpbGVfcnBhdGg9IiRycGF0aCIKKysKKysgICAgICBycGF0aD0KKysgICAgICBoYXJkY29kZV9saWJkaXJzPQorKyAgICAgIGZvciBsaWJkaXIgaW4gJGZpbmFsaXplX3JwYXRoOyBkbworKwlpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKysJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKysJICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorKwkgICAgICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorKwkgICAgZWxzZQorKwkgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisrCSAgICAgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCisrCSAgICAgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKKysJCTs7CisrCSAgICAgICopCisrCQloYXJkY29kZV9saWJkaXJzPSIkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKysJCTs7CisrCSAgICAgIGVzYWMKKysJICAgIGZpCisrCSAgZWxzZQorKwkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKwkgICAgcnBhdGg9IiRycGF0aCAkZmxhZyIKKysJICBmaQorKwllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKysJICBjYXNlICIkZmluYWxpemVfcGVybV9ycGF0aCAiIGluCisrCSAgKiIgJGxpYmRpciAiKikgOzsKKysJICAqKSBmaW5hbGl6ZV9wZXJtX3JwYXRoPSIkZmluYWxpemVfcGVybV9ycGF0aCAkbGliZGlyIiA7OworKwkgIGVzYWMKKysJZmkKKysgICAgICBkb25lCisrICAgICAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KKysgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKysJIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorKwlsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorKwlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysgICAgICBmaQorKyAgICAgIGZpbmFsaXplX3JwYXRoPSIkcnBhdGgiCisrCisrICAgICAgaWYgdGVzdCAtbiAiJGxpYm9ianMiICYmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKysJIyBUcmFuc2Zvcm0gYWxsIHRoZSBsaWJyYXJ5IG9iamVjdHMgaW50byBzdGFuZGFyZCBvYmplY3RzLgorKwljb21waWxlX2NvbW1hbmQ9YCRFQ0hPICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAiJGxvMm8iIHwgJE5MMlNQYAorKwlmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICIkbG8ybyIgfCAkTkwyU1BgCisrICAgICAgZmkKKysKKysgICAgICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJG91dHB1dG5hbWUiICJAUFJPR1JBTUAiICJubyIKKysKKysgICAgICAjIHRlbXBsYXRlIHByZWxpbmtpbmcgc3RlcAorKyAgICAgIGlmIHRlc3QgLW4gIiRwcmVsaW5rX2NtZHMiOyB0aGVuCisrCWZ1bmNfZXhlY3V0ZV9jbWRzICIkcHJlbGlua19jbWRzIiAnZXhpdCAkPycKKysgICAgICBmaQorKworKyAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPXllcworKyAgICAgIGNhc2UgJGhvc3QgaW4KKysgICAgICAqY3lnd2luKiB8ICptaW5ndyogKQorKyAgICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzOyB0aGVuCisrICAgICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPW5vCisrICAgICAgICBmaQorKyAgICAgICAgOzsKKysgICAgICAqKQorKyAgICAgICAgaWYgdGVzdCAiJG5lZWRfcmVsaW5rIiA9IG5vIHx8IHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllczsgdGhlbgorKyAgICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1ubworKyAgICAgICAgZmkKKysgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgICAgIGlmIHRlc3QgIiR3cmFwcGVyc19yZXF1aXJlZCIgPSBubzsgdGhlbgorKwkjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisrCWNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAorKwlsaW5rX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKKysKKysJIyBXZSBoYXZlIG5vIHVuaW5zdGFsbGVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzLCBzbyBmaW5hbGl6ZSByaWdodCBub3cuCisrCWV4aXRfc3RhdHVzPTAKKysJZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0X3N0YXR1cz0kPycKKysKKysJIyBEZWxldGUgdGhlIGdlbmVyYXRlZCBmaWxlcy4KKysJaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9IjsgdGhlbgorKwkgIGZ1bmNfc2hvd19ldmFsICckUk0gIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSInCisrCWZpCisrCisrCWV4aXQgJGV4aXRfc3RhdHVzCisrICAgICAgZmkKKysKKysgICAgICBpZiB0ZXN0IC1uICIkY29tcGlsZV9zaGxpYnBhdGgkZmluYWxpemVfc2hsaWJwYXRoIjsgdGhlbgorKwljb21waWxlX2NvbW1hbmQ9IiRzaGxpYnBhdGhfdmFyPVwiJGNvbXBpbGVfc2hsaWJwYXRoJGZpbmFsaXplX3NobGlicGF0aFwkJHNobGlicGF0aF92YXJcIiAkY29tcGlsZV9jb21tYW5kIgorKyAgICAgIGZpCisrICAgICAgaWYgdGVzdCAtbiAiJGZpbmFsaXplX3NobGlicGF0aCI7IHRoZW4KKysJZmluYWxpemVfY29tbWFuZD0iJHNobGlicGF0aF92YXI9XCIkZmluYWxpemVfc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3ZhclwiICRmaW5hbGl6ZV9jb21tYW5kIgorKyAgICAgIGZpCisrCisrICAgICAgY29tcGlsZV92YXI9CisrICAgICAgZmluYWxpemVfdmFyPQorKyAgICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKysJaWYgdGVzdCAtbiAiJHBlcm1fcnBhdGgiOyB0aGVuCisrCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKysJICBycGF0aD0KKysJICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbworKwkgICAgcnBhdGg9IiRycGF0aCRkaXI6IgorKwkgIGRvbmUKKysJICBjb21waWxlX3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQkcnVucGF0aF92YXJcIiAiCisrCWZpCisrCWlmIHRlc3QgLW4gIiRmaW5hbGl6ZV9wZXJtX3JwYXRoIjsgdGhlbgorKwkgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCisrCSAgcnBhdGg9CisrCSAgZm9yIGRpciBpbiAkZmluYWxpemVfcGVybV9ycGF0aDsgZG8KKysJICAgIHJwYXRoPSIkcnBhdGgkZGlyOiIKKysJICBkb25lCisrCSAgZmluYWxpemVfdmFyPSIkcnVucGF0aF92YXI9XCIkcnBhdGhcJCRydW5wYXRoX3ZhclwiICIKKysJZmkKKysgICAgICBmaQorKworKyAgICAgIGlmIHRlc3QgIiRub19pbnN0YWxsIiA9IHllczsgdGhlbgorKwkjIFdlIGRvbid0IG5lZWQgdG8gY3JlYXRlIGEgd3JhcHBlciBzY3JpcHQuCisrCWxpbmtfY29tbWFuZD0iJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorKwkjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisrCWxpbmtfY29tbWFuZD1gJEVDSE8gIlgkbGlua19jb21tYW5kIiB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAorKwkjIERlbGV0ZSB0aGUgb2xkIG91dHB1dCBmaWxlLgorKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRvdXRwdXQKKysJIyBMaW5rIHRoZSBleGVjdXRhYmxlIGFuZCBleGl0CisrCWZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdCAkPycKKysJZXhpdCAkRVhJVF9TVUNDRVNTCisrICAgICAgZmkKKysKKysgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uIiA9IHJlbGluazsgdGhlbgorKwkjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKysJbGlua19jb21tYW5kPSIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCisrCXJlbGlua19jb21tYW5kPSIkZmluYWxpemVfdmFyJGZpbmFsaXplX2NvbW1hbmQkZmluYWxpemVfcnBhdGgiCisrCisrCWZ1bmNfd2FybmluZyAidGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBsaWtlIHVuaW5zdGFsbGVkIHNoYXJlZCBsaWJyYXJpZXMiCisrCWZ1bmNfd2FybmluZyAiXGAkb3V0cHV0JyB3aWxsIGJlIHJlbGlua2VkIGR1cmluZyBpbnN0YWxsYXRpb24iCisrICAgICAgZWxzZQorKwlpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiAhPSBubzsgdGhlbgorKwkgIGxpbmtfY29tbWFuZD0iJGZpbmFsaXplX3ZhciRjb21waWxlX2NvbW1hbmQkZmluYWxpemVfcnBhdGgiCisrCSAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KKysJICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiWCRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIgfCAkWHNlZCAtZSAncyVAT1VUUFVUQCVcJHByb2dkaXIvXCRmaWxlJWcnYAorKwkgIGVsc2UKKysJICAgICMgZmFzdF9pbnN0YWxsIGlzIHNldCB0byBuZWVkbGVzcworKwkgICAgcmVsaW5rX2NvbW1hbmQ9CisrCSAgZmkKKysJZWxzZQorKwkgIGxpbmtfY29tbWFuZD0iJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorKwkgIHJlbGlua19jb21tYW5kPSIkZmluYWxpemVfdmFyJGZpbmFsaXplX2NvbW1hbmQkZmluYWxpemVfcnBhdGgiCisrCWZpCisrICAgICAgZmkKKysKKysgICAgICAjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisrICAgICAgbGlua19jb21tYW5kPWAkRUNITyAiWCRsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSInJWcnYAorKworKyAgICAgICMgRGVsZXRlIHRoZSBvbGQgb3V0cHV0IGZpbGVzLgorKyAgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJG91dHB1dCAkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSAkb3V0cHV0X29iamRpci9sdC0kb3V0cHV0bmFtZQorKworKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdCAkPycKKysKKysgICAgICAjIE5vdyBjcmVhdGUgdGhlIHdyYXBwZXIgc2NyaXB0LgorKyAgICAgIGZ1bmNfZWNobyAiY3JlYXRpbmcgJG91dHB1dCIKKysKKysgICAgICAjIFF1b3RlIHRoZSByZWxpbmsgY29tbWFuZCBmb3Igc2hpcHBpbmcuCisrICAgICAgaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorKwkjIFByZXNlcnZlIGFueSB2YXJpYWJsZXMgdGhhdCBtYXkgYWZmZWN0IGNvbXBpbGVyIGJlaGF2aW9yCisrCWZvciB2YXIgaW4gJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rOyBkbworKwkgIGlmIGV2YWwgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiOyB0aGVuCisrCSAgICByZWxpbmtfY29tbWFuZD0ieyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwgJGx0X3Vuc2V0ICR2YXIgfHwgeyAkdmFyPTsgZXhwb3J0ICR2YXI7IH07IH07ICRyZWxpbmtfY29tbWFuZCIKKysJICBlbGlmIGV2YWwgdmFyX3ZhbHVlPVwkJHZhcjsgdGVzdCAteiAiJHZhcl92YWx1ZSI7IHRoZW4KKysJICAgIHJlbGlua19jb21tYW5kPSIkdmFyPTsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKysJICBlbHNlCisrCSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkdmFyX3ZhbHVlIgorKwkgICAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorKwkgIGZpCisrCWRvbmUKKysJcmVsaW5rX2NvbW1hbmQ9IihjZCBgcHdkYDsgJHJlbGlua19jb21tYW5kKSIKKysJcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICJYJHJlbGlua19jb21tYW5kIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKysgICAgICBmaQorKworKyAgICAgICMgUXVvdGUgJEVDSE8gZm9yIHNoaXBwaW5nLgorKyAgICAgIGlmIHRlc3QgIlgkRUNITyIgPSAiWCRTSEVMTCAkcHJvZ3BhdGggLS1mYWxsYmFjay1lY2hvIjsgdGhlbgorKwljYXNlICRwcm9ncGF0aCBpbgorKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIHFlY2hvPSIkU0hFTEwgJHByb2dwYXRoIC0tZmFsbGJhY2stZWNobyI7OworKwkqKSBxZWNobz0iJFNIRUxMIGBwd2RgLyRwcm9ncGF0aCAtLWZhbGxiYWNrLWVjaG8iOzsKKysJZXNhYworKwlxZWNobz1gJEVDSE8gIlgkcWVjaG8iIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKyAgICAgIGVsc2UKKysJcWVjaG89YCRFQ0hPICJYJEVDSE8iIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKyAgICAgIGZpCisrCisrICAgICAgIyBPbmx5IGFjdHVhbGx5IGRvIHRoaW5ncyBpZiBub3QgaW4gZHJ5IHJ1biBtb2RlLgorKyAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisrCSMgd2luMzIgd2lsbCB0aGluayB0aGUgc2NyaXB0IGlzIGEgYmluYXJ5IGlmIGl0IGhhcworKwkjIGEgLmV4ZSBzdWZmaXgsIHNvIHdlIHN0cmlwIGl0IG9mZiBoZXJlLgorKwljYXNlICRvdXRwdXQgaW4KKysJICAqLmV4ZSkgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkb3V0cHV0IgorKwkgICAgICAgICBvdXRwdXQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworKwllc2FjCisrCSMgdGVzdCBmb3IgY3lnd2luIGJlY2F1c2UgbXYgZmFpbHMgdy9vIC5leGUgZXh0ZW5zaW9ucworKwljYXNlICRob3N0IGluCisrCSAgKmN5Z3dpbiopCisrCSAgICBleGVleHQ9LmV4ZQorKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkb3V0cHV0bmFtZSIKKysJICAgIG91dHB1dG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworKwkgICopIGV4ZWV4dD0gOzsKKysJZXNhYworKwljYXNlICRob3N0IGluCisrCSAgKmN5Z3dpbiogfCAqbWluZ3cqICkKKysJICAgIG91dHB1dF9uYW1lPWBiYXNlbmFtZSAkb3V0cHV0YAorKwkgICAgb3V0cHV0X3BhdGg9YGRpcm5hbWUgJG91dHB1dGAKKysJICAgIGN3cmFwcGVyc291cmNlPSIkb3V0cHV0X3BhdGgvJG9iamRpci9sdC0kb3V0cHV0X25hbWUuYyIKKysJICAgIGN3cmFwcGVyPSIkb3V0cHV0X3BhdGgvJG91dHB1dF9uYW1lLmV4ZSIKKysJICAgICRSTSAkY3dyYXBwZXJzb3VyY2UgJGN3cmFwcGVyCisrCSAgICB0cmFwICIkUk0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcjsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKysKKysJICAgIGNhdCA+ICRjd3JhcHBlcnNvdXJjZSA8PEVPRgorKworKy8qICRjd3JhcHBlcnNvdXJjZSAtIHRlbXBvcmFyeSB3cmFwcGVyIGV4ZWN1dGFibGUgZm9yICRvYmpkaXIvJG91dHB1dG5hbWUKKysgICBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisrCisrICAgVGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5ub3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwgYWxsIHRoZSBsaWJ0b29sCisrICAgbGlicmFyaWVzIHRoYXQgaXQgZGVwZW5kcyBvbiBhcmUgaW5zdGFsbGVkLgorKworKyAgIFRoaXMgd3JhcHBlciBleGVjdXRhYmxlIHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKysgICBJZiBpdCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCisrCisrICAgQ3VycmVudGx5LCBpdCBzaW1wbHkgZXhlY3MgdGhlIHdyYXBwZXIgKnNjcmlwdCogIi9iaW4vc2ggJG91dHB1dCIsCisrICAgYnV0IGNvdWxkIGV2ZW50dWFsbHkgYWJzb3JiIGFsbCBvZiB0aGUgc2NyaXB0cyBmdW5jdGlvbmFsaXR5IGFuZAorKyAgIGV4ZWMgJG9iamRpci8kb3V0cHV0bmFtZSBkaXJlY3RseS4KKysqLworK0VPRgorKwkgICAgY2F0ID4+ICRjd3JhcHBlcnNvdXJjZTw8IkVPRiIKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHVuaXN0ZC5oPgorKyNpbmNsdWRlIDxtYWxsb2MuaD4KKysjaW5jbHVkZSA8c3RkYXJnLmg+CisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysKKysjaWYgZGVmaW5lZChQQVRIX01BWCkKKysjIGRlZmluZSBMVF9QQVRITUFYIFBBVEhfTUFYCisrI2VsaWYgZGVmaW5lZChNQVhQQVRITEVOKQorKyMgZGVmaW5lIExUX1BBVEhNQVggTUFYUEFUSExFTgorKyNlbHNlCisrIyBkZWZpbmUgTFRfUEFUSE1BWCAxMDI0CisrI2VuZGlmCisrCisrI2lmbmRlZiBESVJfU0VQQVJBVE9SCisrIyBkZWZpbmUgRElSX1NFUEFSQVRPUiAnLycKKysjIGRlZmluZSBQQVRIX1NFUEFSQVRPUiAnOicKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCAoX1dJTjMyKSB8fCBkZWZpbmVkIChfX01TRE9TX18pIHx8IGRlZmluZWQgKF9fREpHUFBfXykgfHwgXAorKyAgZGVmaW5lZCAoX19PUzJfXykKKysjIGRlZmluZSBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQorKyMgaWZuZGVmIERJUl9TRVBBUkFUT1JfMgorKyMgIGRlZmluZSBESVJfU0VQQVJBVE9SXzIgJ1xcJworKyMgZW5kaWYKKysjIGlmbmRlZiBQQVRIX1NFUEFSQVRPUl8yCisrIyAgZGVmaW5lIFBBVEhfU0VQQVJBVE9SXzIgJzsnCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpZm5kZWYgRElSX1NFUEFSQVRPUl8yCisrIyBkZWZpbmUgSVNfRElSX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gRElSX1NFUEFSQVRPUikKKysjZWxzZSAvKiBESVJfU0VQQVJBVE9SXzIgKi8KKysjIGRlZmluZSBJU19ESVJfU0VQQVJBVE9SKGNoKSBcCisrCSgoKGNoKSA9PSBESVJfU0VQQVJBVE9SKSB8fCAoKGNoKSA9PSBESVJfU0VQQVJBVE9SXzIpKQorKyNlbmRpZiAvKiBESVJfU0VQQVJBVE9SXzIgKi8KKysKKysjaWZuZGVmIFBBVEhfU0VQQVJBVE9SXzIKKysjIGRlZmluZSBJU19QQVRIX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gUEFUSF9TRVBBUkFUT1IpCisrI2Vsc2UgLyogUEFUSF9TRVBBUkFUT1JfMiAqLworKyMgZGVmaW5lIElTX1BBVEhfU0VQQVJBVE9SKGNoKSAoKGNoKSA9PSBQQVRIX1NFUEFSQVRPUl8yKQorKyNlbmRpZiAvKiBQQVRIX1NFUEFSQVRPUl8yICovCisrCisrI2RlZmluZSBYTUFMTE9DKHR5cGUsIG51bSkgICAgICAoKHR5cGUgKikgeG1hbGxvYyAoKG51bSkgKiBzaXplb2YodHlwZSkpKQorKyNkZWZpbmUgWEZSRUUoc3RhbGUpIGRvIHsgXAorKyAgaWYgKHN0YWxlKSB7IGZyZWUgKCh2b2lkICopIHN0YWxlKTsgc3RhbGUgPSAwOyB9IFwKKyt9IHdoaWxlICgwKQorKworKy8qIC1EREVCVUcgaXMgZmFpcmx5IGNvbW1vbiBpbiBDRkxBR1MuICAqLworKyN1bmRlZiBERUJVRworKyNpZiBkZWZpbmVkIERFQlVHV1JBUFBFUgorKyMgZGVmaW5lIERFQlVHKGZvcm1hdCwgLi4uKSBmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBfX1ZBX0FSR1NfXykKKysjZWxzZQorKyMgZGVmaW5lIERFQlVHKGZvcm1hdCwgLi4uKQorKyNlbmRpZgorKworK2NvbnN0IGNoYXIgKnByb2dyYW1fbmFtZSA9IE5VTEw7CisrCisrdm9pZCAqIHhtYWxsb2MgKHNpemVfdCBudW0pOworK2NoYXIgKiB4c3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpOworK2NvbnN0IGNoYXIgKiBiYXNlX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpOworK2NoYXIgKiBmaW5kX2V4ZWN1dGFibGUoY29uc3QgY2hhciAqd3JhcHBlcik7CisraW50ICAgIGNoZWNrX2V4ZWN1dGFibGUoY29uc3QgY2hhciAqcGF0aCk7CisrY2hhciAqIHN0cmVuZHphcChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCk7Cisrdm9pZCBsdF9mYXRhbCAoY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKTsKKysKKytpbnQKKyttYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgIGNoYXIgKipuZXdhcmd6OworKyAgaW50IGk7CisrCisrICBwcm9ncmFtX25hbWUgPSAoY2hhciAqKSB4c3RyZHVwIChiYXNlX25hbWUgKGFyZ3ZbMF0pKTsKKysgIERFQlVHKCIobWFpbikgYXJndlswXSAgICAgIDogJXNcbiIsYXJndlswXSk7CisrICBERUJVRygiKG1haW4pIHByb2dyYW1fbmFtZSA6ICVzXG4iLHByb2dyYW1fbmFtZSk7CisrICBuZXdhcmd6ID0gWE1BTExPQyhjaGFyICosIGFyZ2MrMik7CisrRU9GCisrCisrCSAgICBjYXQgPj4gJGN3cmFwcGVyc291cmNlIDw8RU9GCisrICBuZXdhcmd6WzBdID0gKGNoYXIgKikgeHN0cmR1cCgiJFNIRUxMIik7CisrRU9GCisrCisrCSAgICBjYXQgPj4gJGN3cmFwcGVyc291cmNlIDw8IkVPRiIKKysgIG5ld2FyZ3pbMV0gPSBmaW5kX2V4ZWN1dGFibGUoYXJndlswXSk7CisrICBpZiAobmV3YXJnelsxXSA9PSBOVUxMKQorKyAgICBsdF9mYXRhbCgiQ291bGRuJ3QgZmluZCAlcyIsIGFyZ3ZbMF0pOworKyAgREVCVUcoIihtYWluKSBmb3VuZCBleGUgYXQgOiAlc1xuIixuZXdhcmd6WzFdKTsKKysgIC8qIHdlIGtub3cgdGhlIHNjcmlwdCBoYXMgdGhlIHNhbWUgbmFtZSwgd2l0aG91dCB0aGUgLmV4ZSAqLworKyAgLyogc28gbWFrZSBzdXJlIG5ld2FyZ3pbMV0gZG9lc24ndCBlbmQgaW4gLmV4ZSAqLworKyAgc3RyZW5kemFwKG5ld2FyZ3pbMV0sIi5leGUiKTsKKysgIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisrICAgIG5ld2FyZ3pbaSsxXSA9IHhzdHJkdXAoYXJndltpXSk7CisrICBuZXdhcmd6W2FyZ2MrMV0gPSBOVUxMOworKworKyAgZm9yIChpPTA7IGk8YXJnYysxOyBpKyspCisrICB7CisrICAgIERFQlVHKCIobWFpbikgbmV3YXJnelslZF0gICA6ICVzXG4iLGksbmV3YXJneltpXSk7CisrICAgIDsKKysgIH0KKysKKytFT0YKKysKKysJICAgIGNhc2UgJGhvc3Rfb3MgaW4KKysJICAgICAgbWluZ3cqKQorKwkJY2F0ID4+ICRjd3JhcHBlcnNvdXJjZSA8PEVPRgorKyAgZXhlY3YoIiRTSEVMTCIsKGNoYXIgY29uc3QgKiopbmV3YXJneik7CisrRU9GCisrCSAgICAgIDs7CisrCSAgICAgICopCisrCQljYXQgPj4gJGN3cmFwcGVyc291cmNlIDw8RU9GCisrICBleGVjdigiJFNIRUxMIixuZXdhcmd6KTsKKytFT0YKKysJICAgICAgOzsKKysJICAgIGVzYWMKKysKKysJICAgIGNhdCA+PiAkY3dyYXBwZXJzb3VyY2UgPDwiRU9GIgorKyAgcmV0dXJuIDEyNzsKKyt9CisrCisrdm9pZCAqCisreG1hbGxvYyAoc2l6ZV90IG51bSkKKyt7CisrICB2b2lkICogcCA9ICh2b2lkICopIG1hbGxvYyAobnVtKTsKKysgIGlmICghcCkKKysgICAgbHRfZmF0YWwgKCJNZW1vcnkgZXhoYXVzdGVkIik7CisrCisrICByZXR1cm4gcDsKKyt9CisrCisrY2hhciAqCisreHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKQorK3sKKysgIHJldHVybiBzdHJpbmcgPyBzdHJjcHkgKChjaGFyICopIHhtYWxsb2MgKHN0cmxlbiAoc3RyaW5nKSArIDEpLCBzdHJpbmcpIDogTlVMTAorKzsKKyt9CisrCisrY29uc3QgY2hhciAqCisrYmFzZV9uYW1lIChjb25zdCBjaGFyICpuYW1lKQorK3sKKysgIGNvbnN0IGNoYXIgKmJhc2U7CisrCisrI2lmIGRlZmluZWQgKEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNKQorKyAgLyogU2tpcCBvdmVyIHRoZSBkaXNrIG5hbWUgaW4gTVNET1MgcGF0aG5hbWVzLiAqLworKyAgaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKW5hbWVbMF0pICYmIG5hbWVbMV0gPT0gJzonKQorKyAgICBuYW1lICs9IDI7CisrI2VuZGlmCisrCisrICBmb3IgKGJhc2UgPSBuYW1lOyAqbmFtZTsgbmFtZSsrKQorKyAgICBpZiAoSVNfRElSX1NFUEFSQVRPUiAoKm5hbWUpKQorKyAgICAgIGJhc2UgPSBuYW1lICsgMTsKKysgIHJldHVybiBiYXNlOworK30KKysKKytpbnQKKytjaGVja19leGVjdXRhYmxlKGNvbnN0IGNoYXIgKiBwYXRoKQorK3sKKysgIHN0cnVjdCBzdGF0IHN0OworKworKyAgREVCVUcoIihjaGVja19leGVjdXRhYmxlKSAgOiAlc1xuIiwgcGF0aCA/ICgqcGF0aCA/IHBhdGggOiAiRU1QVFkhIikgOiAiTlVMTCEiKTsKKysgIGlmICgoIXBhdGgpIHx8ICghKnBhdGgpKQorKyAgICByZXR1cm4gMDsKKysKKysgIGlmICgoc3RhdCAocGF0aCwgJnN0KSA+PSAwKSAmJgorKyAgICAgICgKKysJLyogTWluR1cgJiBuYXRpdmUgV0lOMzIgZG8gbm90IHN1cHBvcnQgU19JWE9USCBvciBTX0lYR1JQICovCisrI2lmIGRlZmluZWQgKFNfSVhPVEgpCisrICAgICAgICgoc3Quc3RfbW9kZSAmIFNfSVhPVEgpID09IFNfSVhPVEgpIHx8CisrI2VuZGlmCisrI2lmIGRlZmluZWQgKFNfSVhHUlApCisrICAgICAgICgoc3Quc3RfbW9kZSAmIFNfSVhHUlApID09IFNfSVhHUlApIHx8CisrI2VuZGlmCisrICAgICAgICgoc3Quc3RfbW9kZSAmIFNfSVhVU1IpID09IFNfSVhVU1IpKQorKyAgICAgICkKKysgICAgcmV0dXJuIDE7CisrICBlbHNlCisrICAgIHJldHVybiAwOworK30KKysKKysvKiBTZWFyY2hlcyBmb3IgdGhlIGZ1bGwgcGF0aCBvZiB0aGUgd3JhcHBlci4gIFJldHVybnMKKysgICBuZXdseSBhbGxvY2F0ZWQgZnVsbCBwYXRoIG5hbWUgaWYgZm91bmQsIE5VTEwgb3RoZXJ3aXNlICovCisrY2hhciAqCisrZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyKiB3cmFwcGVyKQorK3sKKysgIGludCBoYXNfc2xhc2ggPSAwOworKyAgY29uc3QgY2hhciogcDsKKysgIGNvbnN0IGNoYXIqIHBfbmV4dDsKKysgIC8qIHN0YXRpYyBidWZmZXIgZm9yIGdldGN3ZCAqLworKyAgY2hhciB0bXBbTFRfUEFUSE1BWCArIDFdOworKyAgaW50IHRtcF9sZW47CisrICBjaGFyKiBjb25jYXRfbmFtZTsKKysKKysgIERFQlVHKCIoZmluZF9leGVjdXRhYmxlKSAgOiAlc1xuIiwgd3JhcHBlciA/ICgqd3JhcHBlciA/IHdyYXBwZXIgOiAiRU1QVFkhIikgOiAiTlVMTCEiKTsKKysKKysgIGlmICgod3JhcHBlciA9PSBOVUxMKSB8fCAoKndyYXBwZXIgPT0gJ1wwJykpCisrICAgIHJldHVybiBOVUxMOworKworKyAgLyogQWJzb2x1dGUgcGF0aD8gKi8KKysjaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCisrICBpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpd3JhcHBlclswXSkgJiYgd3JhcHBlclsxXSA9PSAnOicpCisrICB7CisrICAgIGNvbmNhdF9uYW1lID0geHN0cmR1cCAod3JhcHBlcik7CisrICAgIGlmIChjaGVja19leGVjdXRhYmxlKGNvbmNhdF9uYW1lKSkKKysgICAgICByZXR1cm4gY29uY2F0X25hbWU7CisrICAgIFhGUkVFKGNvbmNhdF9uYW1lKTsKKysgIH0KKysgIGVsc2UKKysgIHsKKysjZW5kaWYKKysgICAgaWYgKElTX0RJUl9TRVBBUkFUT1IgKHdyYXBwZXJbMF0pKQorKyAgICB7CisrICAgICAgY29uY2F0X25hbWUgPSB4c3RyZHVwICh3cmFwcGVyKTsKKysgICAgICBpZiAoY2hlY2tfZXhlY3V0YWJsZShjb25jYXRfbmFtZSkpCisrCXJldHVybiBjb25jYXRfbmFtZTsKKysgICAgICBYRlJFRShjb25jYXRfbmFtZSk7CisrICAgIH0KKysjaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCisrICB9CisrI2VuZGlmCisrCisrICBmb3IgKHAgPSB3cmFwcGVyOyAqcDsgcCsrKQorKyAgICBpZiAoKnAgPT0gJy8nKQorKyAgICB7CisrICAgICAgaGFzX3NsYXNoID0gMTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgaWYgKCFoYXNfc2xhc2gpCisrICB7CisrICAgIC8qIG5vIHNsYXNoZXM7IHNlYXJjaCBQQVRIICovCisrICAgIGNvbnN0IGNoYXIqIHBhdGggPSBnZXRlbnYgKCJQQVRIIik7CisrICAgIGlmIChwYXRoICE9IE5VTEwpCisrICAgIHsKKysgICAgICBmb3IgKHAgPSBwYXRoOyAqcDsgcCA9IHBfbmV4dCkKKysgICAgICB7CisrCWNvbnN0IGNoYXIqIHE7CisrCXNpemVfdCBwX2xlbjsKKysJZm9yIChxID0gcDsgKnE7IHErKykKKysJICBpZiAoSVNfUEFUSF9TRVBBUkFUT1IoKnEpKQorKwkgICAgYnJlYWs7CisrCXBfbGVuID0gcSAtIHA7CisrCXBfbmV4dCA9ICgqcSA9PSAnXDAnID8gcSA6IHEgKyAxKTsKKysJaWYgKHBfbGVuID09IDApCisrCXsKKysJICAvKiBlbXB0eSBwYXRoOiBjdXJyZW50IGRpcmVjdG9yeSAqLworKwkgIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKKysJICAgIGx0X2ZhdGFsICgiZ2V0Y3dkIGZhaWxlZCIpOworKwkgIHRtcF9sZW4gPSBzdHJsZW4odG1wKTsKKysJICBjb25jYXRfbmFtZSA9IFhNQUxMT0MoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4od3JhcHBlcikgKyAxKTsKKysJICBtZW1jcHkgKGNvbmNhdF9uYW1lLCB0bXAsIHRtcF9sZW4pOworKwkgIGNvbmNhdF9uYW1lW3RtcF9sZW5dID0gJy8nOworKwkgIHN0cmNweSAoY29uY2F0X25hbWUgKyB0bXBfbGVuICsgMSwgd3JhcHBlcik7CisrCX0KKysJZWxzZQorKwl7CisrCSAgY29uY2F0X25hbWUgPSBYTUFMTE9DKGNoYXIsIHBfbGVuICsgMSArIHN0cmxlbih3cmFwcGVyKSArIDEpOworKwkgIG1lbWNweSAoY29uY2F0X25hbWUsIHAsIHBfbGVuKTsKKysJICBjb25jYXRfbmFtZVtwX2xlbl0gPSAnLyc7CisrCSAgc3RyY3B5IChjb25jYXRfbmFtZSArIHBfbGVuICsgMSwgd3JhcHBlcik7CisrCX0KKysJaWYgKGNoZWNrX2V4ZWN1dGFibGUoY29uY2F0X25hbWUpKQorKwkgIHJldHVybiBjb25jYXRfbmFtZTsKKysJWEZSRUUoY29uY2F0X25hbWUpOworKyAgICAgIH0KKysgICAgfQorKyAgICAvKiBub3QgZm91bmQgaW4gUEFUSDsgYXNzdW1lIGN1cmRpciAqLworKyAgfQorKyAgLyogUmVsYXRpdmUgcGF0aCB8IG5vdCBmb3VuZCBpbiBwYXRoOiBwcmVwZW5kIGN3ZCAqLworKyAgaWYgKGdldGN3ZCAodG1wLCBMVF9QQVRITUFYKSA9PSBOVUxMKQorKyAgICBsdF9mYXRhbCAoImdldGN3ZCBmYWlsZWQiKTsKKysgIHRtcF9sZW4gPSBzdHJsZW4odG1wKTsKKysgIGNvbmNhdF9uYW1lID0gWE1BTExPQyhjaGFyLCB0bXBfbGVuICsgMSArIHN0cmxlbih3cmFwcGVyKSArIDEpOworKyAgbWVtY3B5IChjb25jYXRfbmFtZSwgdG1wLCB0bXBfbGVuKTsKKysgIGNvbmNhdF9uYW1lW3RtcF9sZW5dID0gJy8nOworKyAgc3RyY3B5IChjb25jYXRfbmFtZSArIHRtcF9sZW4gKyAxLCB3cmFwcGVyKTsKKysKKysgIGlmIChjaGVja19leGVjdXRhYmxlKGNvbmNhdF9uYW1lKSkKKysgICAgcmV0dXJuIGNvbmNhdF9uYW1lOworKyAgWEZSRUUoY29uY2F0X25hbWUpOworKyAgcmV0dXJuIE5VTEw7CisrfQorKworK2NoYXIgKgorK3N0cmVuZHphcChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCkKKyt7CisrICBzaXplX3QgbGVuLCBwYXRsZW47CisrCisrICBhc3NlcnQoc3RyICE9IE5VTEwpOworKyAgYXNzZXJ0KHBhdCAhPSBOVUxMKTsKKysKKysgIGxlbiA9IHN0cmxlbihzdHIpOworKyAgcGF0bGVuID0gc3RybGVuKHBhdCk7CisrCisrICBpZiAocGF0bGVuIDw9IGxlbikKKysgIHsKKysgICAgc3RyICs9IGxlbiAtIHBhdGxlbjsKKysgICAgaWYgKHN0cmNtcChzdHIsIHBhdCkgPT0gMCkKKysgICAgICAqc3RyID0gJ1wwJzsKKysgIH0KKysgIHJldHVybiBzdHI7CisrfQorKworK3N0YXRpYyB2b2lkCisrbHRfZXJyb3JfY29yZSAoaW50IGV4aXRfc3RhdHVzLCBjb25zdCBjaGFyICogbW9kZSwKKysJICBjb25zdCBjaGFyICogbWVzc2FnZSwgdmFfbGlzdCBhcCkKKyt7CisrICBmcHJpbnRmIChzdGRlcnIsICIlczogJXM6ICIsIHByb2dyYW1fbmFtZSwgbW9kZSk7CisrICB2ZnByaW50ZiAoc3RkZXJyLCBtZXNzYWdlLCBhcCk7CisrICBmcHJpbnRmIChzdGRlcnIsICIuXG4iKTsKKysKKysgIGlmIChleGl0X3N0YXR1cyA+PSAwKQorKyAgICBleGl0IChleGl0X3N0YXR1cyk7CisrfQorKworK3ZvaWQKKytsdF9mYXRhbCAoY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKQorK3sKKysgIHZhX2xpc3QgYXA7CisrICB2YV9zdGFydCAoYXAsIG1lc3NhZ2UpOworKyAgbHRfZXJyb3JfY29yZSAoRVhJVF9GQUlMVVJFLCAiRkFUQUwiLCBtZXNzYWdlLCBhcCk7CisrICB2YV9lbmQgKGFwKTsKKyt9CisrRU9GCisrCSAgIyB3ZSBzaG91bGQgcmVhbGx5IHVzZSBhIGJ1aWxkLXBsYXRmb3JtIHNwZWNpZmljIGNvbXBpbGVyCisrCSAgIyBoZXJlLCBidXQgT1RPSCwgdGhlIHdyYXBwZXJzIChzaGVsbCBzY3JpcHQgYW5kIHRoaXMgQyBvbmUpCisrCSAgIyBhcmUgb25seSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gZXhlY3V0ZSB0aGUgInJlYWwiIGJpbmFyeS4KKysJICAjIFNpbmNlIHRoZSAicmVhbCIgYmluYXJ5IGlzIGJ1aWx0IGZvciAkaG9zdCwgdGhlbiB0aGlzCisrCSAgIyB3cmFwcGVyIG1pZ2h0IGFzIHdlbGwgYmUgYnVpbHQgZm9yICRob3N0LCB0b28uCisrCSAgJG9wdF9kcnlfcnVuIHx8ICRMVENDICRMVENGTEFHUyAtcyAtbyAkY3dyYXBwZXIgJGN3cmFwcGVyc291cmNlCisrCSAgOzsKKysJZXNhYworKwkkUk0gJG91dHB1dAorKwl0cmFwICIkUk0gJG91dHB1dDsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKysKKysJJEVDSE8gPiAkb3V0cHV0ICJcCisrIyEgJFNIRUxMCisrCisrIyAkb3V0cHV0IC0gdGVtcG9yYXJ5IHdyYXBwZXIgc2NyaXB0IGZvciAkb2JqZGlyLyRvdXRwdXRuYW1lCisrIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisrIworKyMgVGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5ub3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwgYWxsIHRoZSBsaWJ0b29sCisrIyBsaWJyYXJpZXMgdGhhdCBpdCBkZXBlbmRzIG9uIGFyZSBpbnN0YWxsZWQuCisrIworKyMgVGhpcyB3cmFwcGVyIHNjcmlwdCBzaG91bGQgbmV2ZXIgYmUgbW92ZWQgb3V0IG9mIHRoZSBidWlsZCBkaXJlY3RvcnkuCisrIyBJZiBpdCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCisrCisrIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcworKyMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCisrWHNlZD0nJHtTRUR9IC1lIDFzL15YLy8nCisrc2VkX3F1b3RlX3N1YnN0PSckc2VkX3F1b3RlX3N1YnN0JworKworKyMgQmUgQm91cm5lIGNvbXBhdGlibGUKKytpZiB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwiICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgIGVtdWxhdGUgc2gKKysgIE5VTExDTUQ9OgorKyAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gXCR7MStcIlwkQFwifSwgd2hpY2gKKysgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisrICBhbGlhcyAtZyAnXCR7MStcIlwkQFwifSc9J1wiXCRAXCInCisrICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorK2Vsc2UKKysgIGNhc2UgXGAoc2V0IC1vKSAyPi9kZXYvbnVsbFxgIGluICpwb3NpeCopIHNldCAtbyBwb3NpeDs7IGVzYWMKKytmaQorK0JJTl9TSD14cGc0OyBleHBvcnQgQklOX1NIICMgZm9yIFRydTY0CisrRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorKworKyMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0CisrIyBpZiBDRFBBVEggaXMgc2V0LgorKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKysKKytyZWxpbmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwiCisrCisrIyBUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGRldGVybWluZXMgb3VyIG9wZXJhdGlvbiBtb2RlLgorK2lmIHRlc3QgXCJcJGxpYnRvb2xfaW5zdGFsbF9tYWdpY1wiID0gXCIkbWFnaWNcIjsgdGhlbgorKyAgIyBpbnN0YWxsIG1vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CisrICBnZW5lcmF0ZWRfYnlfbGlidG9vbF92ZXJzaW9uPSckbWFjcm9fdmVyc2lvbicKKysgIG5vdGluc3RfZGVwbGlicz0nJG5vdGluc3RfZGVwbGlicycKKytlbHNlCisrICAjIFdoZW4gd2UgYXJlIHNvdXJjZWQgaW4gZXhlY3V0ZSBtb2RlLCBcJGZpbGUgYW5kIFwkRUNITyBhcmUgYWxyZWFkeSBzZXQuCisrICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCisrICAgIEVDSE89XCIkcWVjaG9cIgorKyAgICBmaWxlPVwiXCQwXCIKKysgICAgIyBNYWtlIHN1cmUgZWNobyB3b3Jrcy4KKysgICAgaWYgdGVzdCBcIlhcJDFcIiA9IFgtLW5vLXJlZXhlYzsgdGhlbgorKyAgICAgICMgRGlzY2FyZCB0aGUgLS1uby1yZWV4ZWMgZmxhZywgYW5kIGNvbnRpbnVlLgorKyAgICAgIHNoaWZ0CisrICAgIGVsaWYgdGVzdCBcIlhcYHsgXCRFQ0hPICdcdCc7IH0gMj4vZGV2L251bGxcYFwiID0gJ1hcdCc7IHRoZW4KKysgICAgICAjIFlpcHBlZSwgXCRFQ0hPIHdvcmtzIQorKyAgICAgIDoKKysgICAgZWxzZQorKyAgICAgICMgUmVzdGFydCB1bmRlciB0aGUgY29ycmVjdCBzaGVsbCwgYW5kIHRoZW4gbWF5YmUgXCRFQ0hPIHdpbGwgd29yay4KKysgICAgICBleGVjICRTSEVMTCBcIlwkMFwiIC0tbm8tcmVleGVjIFwkezErXCJcJEBcIn0KKysgICAgZmkKKysgIGZpXAorKyIKKysJJEVDSE8gPj4gJG91dHB1dCAiXAorKworKyAgIyBGaW5kIHRoZSBkaXJlY3RvcnkgdGhhdCB0aGlzIHNjcmlwdCBsaXZlcyBpbi4KKysgIHRoaXNkaXI9XGBcJEVDSE8gXCJYXCRmaWxlXCIgfCBcJFhzZWQgLWUgJ3MlL1teL10qJCUlJ1xgCisrICB0ZXN0IFwieFwkdGhpc2RpclwiID0gXCJ4XCRmaWxlXCIgJiYgdGhpc2Rpcj0uCisrCisrICAjIEZvbGxvdyBzeW1ib2xpYyBsaW5rcyB1bnRpbCB3ZSBnZXQgdG8gdGhlIHJlYWwgdGhpc2Rpci4KKysgIGZpbGU9XGBscyAtbGQgXCJcJGZpbGVcIiB8ICR7U0VEfSAtbiAncy8uKi0+IC8vcCdcYAorKyAgd2hpbGUgdGVzdCAtbiBcIlwkZmlsZVwiOyBkbworKyAgICBkZXN0ZGlyPVxgXCRFQ0hPIFwiWFwkZmlsZVwiIHwgXCRYc2VkIC1lICdzJS9bXi9dKlwkJSUnXGAKKysKKysgICAgIyBJZiB0aGVyZSB3YXMgYSBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGNoYW5nZSB0aGlzZGlyLgorKyAgICBpZiB0ZXN0IFwieFwkZGVzdGRpclwiICE9IFwieFwkZmlsZVwiOyB0aGVuCisrICAgICAgY2FzZSBcIlwkZGVzdGRpclwiIGluCisrICAgICAgW1xcXFwvXSogfCBbQS1aYS16XTpbXFxcXC9dKikgdGhpc2Rpcj1cIlwkZGVzdGRpclwiIDs7CisrICAgICAgKikgdGhpc2Rpcj1cIlwkdGhpc2Rpci9cJGRlc3RkaXJcIiA7OworKyAgICAgIGVzYWMKKysgICAgZmkKKysKKysgICAgZmlsZT1cYFwkRUNITyBcIlhcJGZpbGVcIiB8IFwkWHNlZCAtZSAncyVeLiovJSUnXGAKKysgICAgZmlsZT1cYGxzIC1sZCBcIlwkdGhpc2Rpci9cJGZpbGVcIiB8ICR7U0VEfSAtbiAncy8uKi0+IC8vcCdcYAorKyAgZG9uZQorKworKyAgIyBUcnkgdG8gZ2V0IHRoZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZS4KKysgIGFic2Rpcj1cYGNkIFwiXCR0aGlzZGlyXCIgJiYgcHdkXGAKKysgIHRlc3QgLW4gXCJcJGFic2RpclwiICYmIHRoaXNkaXI9XCJcJGFic2RpclwiCisrIgorKworKwlpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllczsgdGhlbgorKwkgICRFQ0hPID4+ICRvdXRwdXQgIlwKKysgIHByb2dyYW09bHQtJyRvdXRwdXRuYW1lJyRleGVleHQKKysgIHByb2dkaXI9XCJcJHRoaXNkaXIvJG9iamRpclwiCisrCisrICBpZiB0ZXN0ICEgLWYgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgfHwKKysgICAgIHsgZmlsZT1cYGxzIC0xZHQgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCJcJHByb2dkaXIvLi4vXCRwcm9ncmFtXCIgMj4vZGV2L251bGwgfCAke1NFRH0gMXFcYDsgXFwKKysgICAgICAgdGVzdCBcIlhcJGZpbGVcIiAhPSBcIlhcJHByb2dkaXIvXCRwcm9ncmFtXCI7IH07IHRoZW4KKysKKysgICAgZmlsZT1cIlwkXCQtXCRwcm9ncmFtXCIKKysKKysgICAgaWYgdGVzdCAhIC1kIFwiXCRwcm9nZGlyXCI7IHRoZW4KKysgICAgICAkTUtESVIgXCJcJHByb2dkaXJcIgorKyAgICBlbHNlCisrICAgICAgJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCisrICAgIGZpIgorKworKwkgICRFQ0hPID4+ICRvdXRwdXQgIlwKKysKKysgICAgIyByZWxpbmsgZXhlY3V0YWJsZSBpZiBuZWNlc3NhcnkKKysgICAgaWYgdGVzdCAtbiBcIlwkcmVsaW5rX2NvbW1hbmRcIjsgdGhlbgorKyAgICAgIGlmIHJlbGlua19jb21tYW5kX291dHB1dD1cYGV2YWwgXCRyZWxpbmtfY29tbWFuZCAyPiYxXGA7IHRoZW4gOgorKyAgICAgIGVsc2UKKysJJEVDSE8gXCJcJHJlbGlua19jb21tYW5kX291dHB1dFwiID4mMgorKwkkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKysJZXhpdCAxCisrICAgICAgZmkKKysgICAgZmkKKysKKysgICAgJE1WIFwiXCRwcm9nZGlyL1wkZmlsZVwiIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIDI+L2Rldi9udWxsIHx8CisrICAgIHsgJFJNIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOworKyAgICAgICRNViBcIlwkcHJvZ2Rpci9cJGZpbGVcIiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgfQorKyAgICAkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKysgIGZpIgorKwllbHNlCisrCSAgJEVDSE8gPj4gJG91dHB1dCAiXAorKyAgcHJvZ3JhbT0nJG91dHB1dG5hbWUnCisrICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgorKyIKKysJZmkKKysKKysJJEVDSE8gPj4gJG91dHB1dCAiXAorKworKyAgaWYgdGVzdCAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgdGhlbiIKKysKKysJIyBFeHBvcnQgb3VyIHNobGlicGF0aF92YXIgaWYgd2UgaGF2ZSBvbmUuCisrCWlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KKysJICAkRUNITyA+PiAkb3V0cHV0ICJcCisrICAgICMgQWRkIG91ciBvd24gbGlicmFyeSBwYXRoIHRvICRzaGxpYnBhdGhfdmFyCisrICAgICRzaGxpYnBhdGhfdmFyPVwiJHRlbXBfcnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIKKysKKysgICAgIyBTb21lIHN5c3RlbXMgY2Fubm90IGNvcGUgd2l0aCBjb2xvbi10ZXJtaW5hdGVkICRzaGxpYnBhdGhfdmFyCisrICAgICMgVGhlIHNlY29uZCBjb2xvbiBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIEJlT1MgUjQgc2VkCisrICAgICRzaGxpYnBhdGhfdmFyPVxgXCRFQ0hPIFwiWFwkJHNobGlicGF0aF92YXJcIiB8IFwkWHNlZCAtZSAncy86OipcJC8vJ1xgCisrCisrICAgIGV4cG9ydCAkc2hsaWJwYXRoX3ZhcgorKyIKKysJZmkKKysKKysJIyBmaXh1cCB0aGUgZGxsIHNlYXJjaHBhdGggaWYgd2UgbmVlZCB0by4KKysJaWYgdGVzdCAtbiAiJGRsbHNlYXJjaHBhdGgiOyB0aGVuCisrCSAgJEVDSE8gPj4gJG91dHB1dCAiXAorKyAgICAjIEFkZCB0aGUgZGxsIHNlYXJjaCBwYXRoIGNvbXBvbmVudHMgdG8gdGhlIGV4ZWN1dGFibGUgUEFUSAorKyAgICBQQVRIPSRkbGxzZWFyY2hwYXRoOlwkUEFUSAorKyIKKysJZmkKKysKKysJJEVDSE8gPj4gJG91dHB1dCAiXAorKyAgICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCisrICAgICAgIyBSdW4gdGhlIGFjdHVhbCBwcm9ncmFtIHdpdGggb3VyIGFyZ3VtZW50cy4KKysiCisrCWNhc2UgJGhvc3QgaW4KKysJIyBCYWNrc2xhc2hlcyBzZXBhcmF0ZSBkaXJlY3RvcmllcyBvbiBwbGFpbiB3aW5kb3dzCisrCSotKi1taW5ndyB8ICotKi1vczIqKQorKwkgICRFQ0hPID4+ICRvdXRwdXQgIlwKKysgICAgICBleGVjIFwiXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KKysiCisrCSAgOzsKKysKKysJKikKKysJICAkRUNITyA+PiAkb3V0cHV0ICJcCisrICAgICAgZXhlYyBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CisrIgorKwkgIDs7CisrCWVzYWMKKysJJEVDSE8gPj4gJG91dHB1dCAiXAorKyAgICAgIFwkRUNITyBcIlwkMDogY2Fubm90IGV4ZWMgXCRwcm9ncmFtIFwkKlwiCisrICAgICAgZXhpdCAxCisrICAgIGZpCisrICBlbHNlCisrICAgICMgVGhlIHByb2dyYW0gZG9lc24ndCBleGlzdC4KKysgICAgXCRFQ0hPIFwiXCQwOiBlcnJvcjogXFxcYFwkcHJvZ2Rpci9cJHByb2dyYW0nIGRvZXMgbm90IGV4aXN0XCIgMT4mMgorKyAgICBcJEVDSE8gXCJUaGlzIHNjcmlwdCBpcyBqdXN0IGEgd3JhcHBlciBmb3IgXCRwcm9ncmFtLlwiIDE+JjIKKysgICAgJEVDSE8gXCJTZWUgdGhlICRQQUNLQUdFIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIgMT4mMgorKyAgICBleGl0IDEKKysgIGZpCisrZmlcCisrIgorKwljaG1vZCAreCAkb3V0cHV0CisrICAgICAgfQorKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBTZWUgaWYgd2UgbmVlZCB0byBidWlsZCBhbiBvbGQtZmFzaGlvbmVkIGFyY2hpdmUuCisrICAgIGZvciBvbGRsaWIgaW4gJG9sZGxpYnM7IGRvCisrCisrICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBjb252ZW5pZW5jZTsgdGhlbgorKwlvbGRvYmpzPSIkbGlib2Jqc19zYXZlICRzeW1maWxlb2JqIgorKwlhZGRsaWJzPSIkY29udmVuaWVuY2UiCisrCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworKyAgICAgIGVsc2UKKysJaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBtb2R1bGU7IHRoZW4KKysJICBvbGRvYmpzPSIkbGlib2Jqc19zYXZlIgorKwkgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworKwllbHNlCisrCSAgb2xkb2Jqcz0iJG9sZF9kZXBsaWJzICRub25fcGljX29iamVjdHMiCisrCSAgaWYgdGVzdCAiJHByZWxvYWQiID0geWVzICYmIHRlc3QgLWYgIiRzeW1maWxlb2JqIjsgdGhlbgorKwkgICAgb2xkb2Jqcz0iJG9sZG9ianMgJHN5bWZpbGVvYmoiCisrCSAgZmkKKysJZmkKKysJYWRkbGlicz0iJG9sZF9jb252ZW5pZW5jZSIKKysgICAgICBmaQorKworKyAgICAgIGlmIHRlc3QgLW4gIiRhZGRsaWJzIjsgdGhlbgorKwlnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorKwlnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKysKKysJZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGFkZGxpYnMKKysJb2xkb2Jqcz0iJG9sZG9ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisrICAgICAgZmkKKysKKysgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KKysgICAgICBpZiB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgJiYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKysJY21kcz0kb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcworKyAgICAgIGVsc2UKKysKKysJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCisrCWlmIHRlc3QgLW4gIiRkbHByZWZpbGVzIjsgdGhlbgorKwkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisrCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisrCisrCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKKysJICBvbGRvYmpzPSIkb2xkb2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKysJZmkKKysKKysJIyBQT1NJWCBkZW1hbmRzIG5vIHBhdGhzIHRvIGJlIGVuY29kZWQgaW4gYXJjaGl2ZXMuICBXZSBoYXZlCisrCSMgdG8gYXZvaWQgY3JlYXRpbmcgYXJjaGl2ZXMgd2l0aCBkdXBsaWNhdGUgYmFzZW5hbWVzIGlmIHdlCisrCSMgbWlnaHQgaGF2ZSB0byBleHRyYWN0IHRoZW0gYWZ0ZXJ3YXJkcywgZS5nLiwgd2hlbiBjcmVhdGluZyBhCisrCSMgc3RhdGljIGFyY2hpdmUgb3V0IG9mIGEgY29udmVuaWVuY2UgbGlicmFyeSwgb3Igd2hlbiBsaW5raW5nCisrCSMgdGhlIGVudGlyZXR5IG9mIGEgbGlidG9vbCBhcmNoaXZlIGludG8gYW5vdGhlciAoY3VycmVudGx5CisrCSMgbm90IHN1cHBvcnRlZCBieSBsaWJ0b29sKS4KKysJaWYgKGZvciBvYmogaW4gJG9sZG9ianMKKysJICAgIGRvCisrCSAgICAgIGZ1bmNfYmFzZW5hbWUgIiRvYmoiCisrCSAgICAgICRFQ0hPICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisrCSAgICBkb25lIHwgc29ydCB8IHNvcnQgLXVjID4vZGV2L251bGwgMj4mMSk7IHRoZW4KKysJICA6CisrCWVsc2UKKysJICAkRUNITyAiY29weWluZyBzZWxlY3RlZCBvYmplY3QgZmlsZXMgdG8gYXZvaWQgYmFzZW5hbWUgY29uZmxpY3RzLi4uIgorKwkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisrCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisrCSAgZnVuY19ta2Rpcl9wICIkZ2VudG9wIgorKwkgIHNhdmVfb2xkb2Jqcz0kb2xkb2JqcworKwkgIG9sZG9ianM9CisrCSAgY291bnRlcj0xCisrCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCisrCSAgZG8KKysJICAgIGZ1bmNfYmFzZW5hbWUgIiRvYmoiCisrCSAgICBvYmpiYXNlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisrCSAgICBjYXNlICIgJG9sZG9ianMgIiBpbgorKwkgICAgIiAiKSBvbGRvYmpzPSRvYmogOzsKKysJICAgICpbXCAvXSIkb2JqYmFzZSAiKikKKysJICAgICAgd2hpbGUgOjsgZG8KKysJCSMgTWFrZSBzdXJlIHdlIGRvbid0IHBpY2sgYW4gYWx0ZXJuYXRlIG5hbWUgdGhhdCBhbHNvCisrCQkjIG92ZXJsYXBzLgorKwkJbmV3b2JqPWx0JGNvdW50ZXItJG9iamJhc2UKKysJCWNvdW50ZXI9YGV4cHIgJGNvdW50ZXIgKyAxYAorKwkJY2FzZSAiICRvbGRvYmpzICIgaW4KKysJCSpbXCAvXSIkbmV3b2JqICIqKSA7OworKwkJKikgaWYgdGVzdCAhIC1mICIkZ2VudG9wLyRuZXdvYmoiOyB0aGVuIGJyZWFrOyBmaSA7OworKwkJZXNhYworKwkgICAgICBkb25lCisrCSAgICAgIGZ1bmNfc2hvd19ldmFsICJsbiAkb2JqICRnZW50b3AvJG5ld29iaiB8fCBjcCAkb2JqICRnZW50b3AvJG5ld29iaiIKKysJICAgICAgb2xkb2Jqcz0iJG9sZG9ianMgJGdlbnRvcC8kbmV3b2JqIgorKwkgICAgICA7OworKwkgICAgKikgb2xkb2Jqcz0iJG9sZG9ianMgJG9iaiIgOzsKKysJICAgIGVzYWMKKysJICBkb25lCisrCWZpCisrCWV2YWwgY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKKysKKysJaWYgbGVuPWBleHByICJYJGNtZHMiIDogIi4qIiAyPi9kZXYvbnVsbGAgJiYKKysJICAgdGVzdCAiJGxlbiIgLWxlICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisrCSAgY21kcz0kb2xkX2FyY2hpdmVfY21kcworKwllbHNlCisrCSAgIyB0aGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGxpbmsgaW4gb25lIHN0ZXAsIGxpbmsgaW4gcGFydHMKKysJICBmdW5jX2VjaG8gInVzaW5nIHBpZWNld2lzZSBhcmNoaXZlIGxpbmtpbmcuLi4iCisrCSAgc2F2ZV9SQU5MSUI9JFJBTkxJQgorKwkgIFJBTkxJQj06CisrCSAgb2JqbGlzdD0KKysJICBjb25jYXRfY21kcz0KKysJICBzYXZlX29sZG9ianM9JG9sZG9ianMKKysJICAjIElzIHRoZXJlIGEgYmV0dGVyIHdheSBvZiBmaW5kaW5nIHRoZSBsYXN0IG9iamVjdCBpbiB0aGUgbGlzdD8KKysJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKKysJICBkbworKwkgICAgbGFzdF9vbGRvYmo9JG9iagorKwkgIGRvbmUKKysJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKKysJICBkbworKwkgICAgb2xkb2Jqcz0iJG9iamxpc3QgJG9iaiIKKysJICAgIG9iamxpc3Q9IiRvYmpsaXN0ICRvYmoiCisrCSAgICBldmFsIHRlc3RfY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKKysJICAgIGlmIGxlbj1gZXhwciAiWCR0ZXN0X2NtZHMiIDogIi4qIiAyPi9kZXYvbnVsbGAgJiYKKysJICAgICAgIHRlc3QgIiRsZW4iIC1sZSAiJG1heF9jbWRfbGVuIjsgdGhlbgorKwkgICAgICA6CisrCSAgICBlbHNlCisrCSAgICAgICMgdGhlIGFib3ZlIGNvbW1hbmQgc2hvdWxkIGJlIHVzZWQgYmVmb3JlIGl0IGdldHMgdG9vIGxvbmcKKysJICAgICAgb2xkb2Jqcz0kb2JqbGlzdAorKwkgICAgICBpZiB0ZXN0ICIkb2JqIiA9ICIkbGFzdF9vbGRvYmoiIDsgdGhlbgorKwkJUkFOTElCPSRzYXZlX1JBTkxJQgorKwkgICAgICBmaQorKwkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKysJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRvbGRfYXJjaGl2ZV9jbWRzXCIKKysJICAgICAgb2JqbGlzdD0KKysJICAgIGZpCisrCSAgZG9uZQorKwkgIFJBTkxJQj0kc2F2ZV9SQU5MSUIKKysJICBvbGRvYmpzPSRvYmpsaXN0CisrCSAgaWYgdGVzdCAiWCRvbGRvYmpzIiA9ICJYIiA7IHRoZW4KKysJICAgIGV2YWwgY21kcz1cIlwkY29uY2F0X2NtZHNcIgorKwkgIGVsc2UKKysJICAgIGV2YWwgY21kcz1cIlwkY29uY2F0X2NtZHN+XCRvbGRfYXJjaGl2ZV9jbWRzXCIKKysJICBmaQorKwlmaQorKyAgICAgIGZpCisrICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRjbWRzIiAnZXhpdCAkPycKKysgICAgZG9uZQorKworKyAgICB0ZXN0IC1uICIkZ2VuZXJhdGVkIiAmJiBcCisrICAgICAgZnVuY19zaG93X2V2YWwgIiR7Uk19ciRnZW5lcmF0ZWQiCisrCisrICAgICMgTm93IGNyZWF0ZSB0aGUgbGlidG9vbCBhcmNoaXZlLgorKyAgICBjYXNlICRvdXRwdXQgaW4KKysgICAgKi5sYSkKKysgICAgICBvbGRfbGlicmFyeT0KKysgICAgICB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzICYmIG9sZF9saWJyYXJ5PSIkbGlibmFtZS4kbGliZXh0IgorKyAgICAgIGZ1bmNfZWNobyAiY3JlYXRpbmcgJG91dHB1dCIKKysKKysgICAgICAjIFByZXNlcnZlIGFueSB2YXJpYWJsZXMgdGhhdCBtYXkgYWZmZWN0IGNvbXBpbGVyIGJlaGF2aW9yCisrICAgICAgZm9yIHZhciBpbiAkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms7IGRvCisrCWlmIGV2YWwgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiOyB0aGVuCisrCSAgcmVsaW5rX2NvbW1hbmQ9InsgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiIHx8ICRsdF91bnNldCAkdmFyIHx8IHsgJHZhcj07IGV4cG9ydCAkdmFyOyB9OyB9OyAkcmVsaW5rX2NvbW1hbmQiCisrCWVsaWYgZXZhbCB2YXJfdmFsdWU9XCQkdmFyOyB0ZXN0IC16ICIkdmFyX3ZhbHVlIjsgdGhlbgorKwkgIHJlbGlua19jb21tYW5kPSIkdmFyPTsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKysJZWxzZQorKwkgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR2YXJfdmFsdWUiCisrCSAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorKwlmaQorKyAgICAgIGRvbmUKKysgICAgICAjIFF1b3RlIHRoZSBsaW5rIGNvbW1hbmQgZm9yIHNoaXBwaW5nLgorKyAgICAgIHJlbGlua19jb21tYW5kPSIoY2QgYHB3ZGA7ICRTSEVMTCAkcHJvZ3BhdGggJHByZXNlcnZlX2FyZ3MgLS1tb2RlPXJlbGluayAkbGlidG9vbF9hcmdzIEBpbnN0X3ByZWZpeF9kaXJAKSIKKysgICAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIlgkcmVsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKyAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9hdXRvbWF0aWMiID0geWVzIDsgdGhlbgorKwlyZWxpbmtfY29tbWFuZD0KKysgICAgICBmaQorKworKyAgICAgICMgT25seSBjcmVhdGUgdGhlIG91dHB1dCBpZiBub3QgYSBkcnkgcnVuLgorKyAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisrCWZvciBpbnN0YWxsZWQgaW4gbm8geWVzOyBkbworKwkgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0geWVzOyB0aGVuCisrCSAgICBpZiB0ZXN0IC16ICIkaW5zdGFsbF9saWJkaXIiOyB0aGVuCisrCSAgICAgIGJyZWFrCisrCSAgICBmaQorKwkgICAgb3V0cHV0PSIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSJpCisrCSAgICAjIFJlcGxhY2UgYWxsIHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzIHdpdGggdGhlIGluc3RhbGxlZCBvbmVzCisrCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9CisrCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisrCSAgICAgIGNhc2UgJGRlcGxpYiBpbgorKwkgICAgICAqLmxhKQorKwkJZnVuY19iYXNlbmFtZSAiJGRlcGxpYiIKKysJCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKysJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisrCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisrCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorKwkJbmV3ZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzICRsaWJkaXIvJG5hbWUiCisrCQk7OworKwkgICAgICAqKSBuZXdkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMgJGRlcGxpYiIgOzsKKysJICAgICAgZXNhYworKwkgICAgZG9uZQorKwkgICAgZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzIgorKwkgICAgbmV3ZGxmaWxlcz0KKysKKysJICAgIGZvciBsaWIgaW4gJGRsZmlsZXM7IGRvCisrCSAgICAgIGNhc2UgJGxpYiBpbgorKwkgICAgICAqLmxhKQorKwkgICAgICAgIGZ1bmNfYmFzZW5hbWUgIiRsaWIiCisrCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisrCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorKwkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAorKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKysJCW5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRsaWJkaXIvJG5hbWUiCisrCQk7OworKwkgICAgICAqKSBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkbGliIiA7OworKwkgICAgICBlc2FjCisrCSAgICBkb25lCisrCSAgICBkbGZpbGVzPSIkbmV3ZGxmaWxlcyIKKysJICAgIG5ld2RscHJlZmlsZXM9CisrCSAgICBmb3IgbGliIGluICRkbHByZWZpbGVzOyBkbworKwkgICAgICBjYXNlICRsaWIgaW4KKysJICAgICAgKi5sYSkKKysJCSMgT25seSBwYXNzIHByZW9wZW5lZCBmaWxlcyB0byB0aGUgcHNldWRvLWFyY2hpdmUgKGZvcgorKwkJIyBldmVudHVhbCBsaW5raW5nIHdpdGggdGhlIGFwcC4gdGhhdCBsaW5rcyBpdCkgaWYgd2UKKysJCSMgZGlkbid0IGFscmVhZHkgbGluayB0aGUgcHJlb3BlbmVkIG9iamVjdHMgZGlyZWN0bHkgaW50bworKwkJIyB0aGUgbGlicmFyeToKKysJCWZ1bmNfYmFzZW5hbWUgIiRsaWIiCisrCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisrCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorKwkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAorKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKysJCW5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRsaWJkaXIvJG5hbWUiCisrCQk7OworKwkgICAgICBlc2FjCisrCSAgICBkb25lCisrCSAgICBkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyIKKysJICBlbHNlCisrCSAgICBuZXdkbGZpbGVzPQorKwkgICAgZm9yIGxpYiBpbiAkZGxmaWxlczsgZG8KKysJICAgICAgY2FzZSAkbGliIGluCisrCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFicz0iJGxpYiIgOzsKKysJCSopIGFicz1gcHdkYCIvJGxpYiIgOzsKKysJICAgICAgZXNhYworKwkgICAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkYWJzIgorKwkgICAgZG9uZQorKwkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCisrCSAgICBuZXdkbHByZWZpbGVzPQorKwkgICAgZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KKysJICAgICAgY2FzZSAkbGliIGluCisrCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFicz0iJGxpYiIgOzsKKysJCSopIGFicz1gcHdkYCIvJGxpYiIgOzsKKysJICAgICAgZXNhYworKwkgICAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkYWJzIgorKwkgICAgZG9uZQorKwkgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisrCSAgZmkKKysJICAkUk0gJG91dHB1dAorKwkgICMgcGxhY2UgZGxuYW1lIGluIGNvcnJlY3QgcG9zaXRpb24gZm9yIGN5Z3dpbgorKwkgIHRkbG5hbWU9JGRsbmFtZQorKwkgIGNhc2UgJGhvc3QsJG91dHB1dCwkaW5zdGFsbGVkLCRtb2R1bGUsJGRsbmFtZSBpbgorKwkgICAgKmN5Z3dpbiosKmxhaSx5ZXMsbm8sKi5kbGwgfCAqbWluZ3cqLCpsYWkseWVzLG5vLCouZGxsKSB0ZGxuYW1lPS4uL2Jpbi8kZGxuYW1lIDs7CisrCSAgZXNhYworKwkgICRFQ0hPID4gJG91dHB1dCAiXAorKyMgJG91dHB1dG5hbWUgLSBhIGxpYnRvb2wgbGlicmFyeSBmaWxlCisrIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisrIworKyMgUGxlYXNlIERPIE5PVCBkZWxldGUgdGhpcyBmaWxlIQorKyMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgorKworKyMgVGhlIG5hbWUgdGhhdCB3ZSBjYW4gZGxvcGVuKDMpLgorK2RsbmFtZT0nJHRkbG5hbWUnCisrCisrIyBOYW1lcyBvZiB0aGlzIGxpYnJhcnkuCisrbGlicmFyeV9uYW1lcz0nJGxpYnJhcnlfbmFtZXMnCisrCisrIyBUaGUgbmFtZSBvZiB0aGUgc3RhdGljIGFyY2hpdmUuCisrb2xkX2xpYnJhcnk9JyRvbGRfbGlicmFyeScKKysKKysjIExpbmtlciBmbGFncyB0aGF0IGNhbiBub3QgZ28gaW4gZGVwZW5kZW5jeV9saWJzLgorK2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9JyRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncycKKysKKysjIExpYnJhcmllcyB0aGF0IHRoaXMgb25lIGRlcGVuZHMgdXBvbi4KKytkZXBlbmRlbmN5X2xpYnM9JyRkZXBlbmRlbmN5X2xpYnMnCisrCisrIyBOYW1lcyBvZiBhZGRpdGlvbmFsIHdlYWsgbGlicmFyaWVzIHByb3ZpZGVkIGJ5IHRoaXMgbGlicmFyeQorK3dlYWtfbGlicmFyeV9uYW1lcz0nJHdlYWtfbGlicycKKysKKysjIFZlcnNpb24gaW5mb3JtYXRpb24gZm9yICRsaWJuYW1lLgorK2N1cnJlbnQ9JGN1cnJlbnQKKythZ2U9JGFnZQorK3JldmlzaW9uPSRyZXZpc2lvbgorKworKyMgSXMgdGhpcyBhbiBhbHJlYWR5IGluc3RhbGxlZCBsaWJyYXJ5PworK2luc3RhbGxlZD0kaW5zdGFsbGVkCisrCisrIyBTaG91bGQgd2Ugd2FybiBhYm91dCBwb3J0YWJpbGl0eSB3aGVuIGxpbmtpbmcgYWdhaW5zdCAtbW9kdWxlcz8KKytzaG91bGRub3RsaW5rPSRtb2R1bGUKKysKKysjIEZpbGVzIHRvIGRsb3Blbi9kbHByZW9wZW4KKytkbG9wZW49JyRkbGZpbGVzJworK2RscHJlb3Blbj0nJGRscHJlZmlsZXMnCisrCisrIyBEaXJlY3RvcnkgdGhhdCB0aGlzIGxpYnJhcnkgbmVlZHMgdG8gYmUgaW5zdGFsbGVkIGluOgorK2xpYmRpcj0nJGluc3RhbGxfbGliZGlyJyIKKysJICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IG5vICYmIHRlc3QgIiRuZWVkX3JlbGluayIgPSB5ZXM7IHRoZW4KKysJICAgICRFQ0hPID4+ICRvdXRwdXQgIlwKKytyZWxpbmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwiIgorKwkgIGZpCisrCWRvbmUKKysgICAgICB9CisrCisrICAgICAgIyBEbyBhIHN5bWJvbGljIGxpbmsgc28gdGhhdCB0aGUgbGlidG9vbCBhcmNoaXZlIGNhbiBiZSBmb3VuZCBpbgorKyAgICAgICMgTERfTElCUkFSWV9QQVRIIGJlZm9yZSB0aGUgcHJvZ3JhbSBpcyBpbnN0YWxsZWQuCisrICAgICAgZnVuY19zaG93X2V2YWwgJyggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiAkUk0gIiRvdXRwdXRuYW1lIiAmJiAkTE5fUyAiLi4vJG91dHB1dG5hbWUiICIkb3V0cHV0bmFtZSIgKScgJ2V4aXQgJD8nCisrICAgICAgOzsKKysgICAgZXNhYworKyAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyt9CisrCisreyB0ZXN0ICIkbW9kZSIgPSBsaW5rIHx8IHRlc3QgIiRtb2RlIiA9IHJlbGluazsgfSAmJgorKyAgICBmdW5jX21vZGVfbGluayAkezErIiRAIn0KKysKKysKKysjIGZ1bmNfbW9kZV91bmluc3RhbGwgYXJnLi4uCisrZnVuY19tb2RlX3VuaW5zdGFsbCAoKQorK3sKKysgICAgJG9wdF9kZWJ1ZworKyAgICBSTT0iJG5vbm9wdCIKKysgICAgZmlsZXM9CisrICAgIHJtZm9yY2U9CisrICAgIGV4aXRfc3RhdHVzPTAKKysKKysgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCisrICAgICMgdGhhbiBydW5uaW5nIHRoZWlyIHByb2dyYW1zLgorKyAgICBsaWJ0b29sX2luc3RhbGxfbWFnaWM9IiRtYWdpYyIKKysKKysgICAgZm9yIGFyZworKyAgICBkbworKyAgICAgIGNhc2UgJGFyZyBpbgorKyAgICAgIC1mKSBSTT0iJFJNICRhcmciOyBybWZvcmNlPXllcyA7OworKyAgICAgIC0qKSBSTT0iJFJNICRhcmciIDs7CisrICAgICAgKikgZmlsZXM9IiRmaWxlcyAkYXJnIiA7OworKyAgICAgIGVzYWMKKysgICAgZG9uZQorKworKyAgICB0ZXN0IC16ICIkUk0iICYmIFwKKysgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYW4gUk0gcHJvZ3JhbSIKKysKKysgICAgcm1kaXJzPQorKworKyAgICBvcmlnb2JqZGlyPSIkb2JqZGlyIgorKyAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisrICAgICAgZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCisrICAgICAgZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKysgICAgICBpZiB0ZXN0ICJYJGRpciIgPSBYLjsgdGhlbgorKwlvYmpkaXI9IiRvcmlnb2JqZGlyIgorKyAgICAgIGVsc2UKKysJb2JqZGlyPSIkZGlyLyRvcmlnb2JqZGlyIgorKyAgICAgIGZpCisrICAgICAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisrICAgICAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorKyAgICAgIHRlc3QgIiRtb2RlIiA9IHVuaW5zdGFsbCAmJiBvYmpkaXI9IiRkaXIiCisrCisrICAgICAgIyBSZW1lbWJlciBvYmpkaXIgZm9yIHJlbW92YWwgbGF0ZXIsIGJlaW5nIGNhcmVmdWwgdG8gYXZvaWQgZHVwbGljYXRlcworKyAgICAgIGlmIHRlc3QgIiRtb2RlIiA9IGNsZWFuOyB0aGVuCisrCWNhc2UgIiAkcm1kaXJzICIgaW4KKysJICAqIiAkb2JqZGlyICIqKSA7OworKwkgICopIHJtZGlycz0iJHJtZGlycyAkb2JqZGlyIiA7OworKwllc2FjCisrICAgICAgZmkKKysKKysgICAgICAjIERvbid0IGVycm9yIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QgYW5kIHJtIC1mIHdhcyB1c2VkLgorKyAgICAgIGlmIHsgdGVzdCAtTCAiJGZpbGUiOyB9ID4vZGV2L251bGwgMj4mMSB8fAorKwkgeyB0ZXN0IC1oICIkZmlsZSI7IH0gPi9kZXYvbnVsbCAyPiYxIHx8CisrCSB0ZXN0IC1mICIkZmlsZSI7IHRoZW4KKysJOgorKyAgICAgIGVsaWYgdGVzdCAtZCAiJGZpbGUiOyB0aGVuCisrCWV4aXRfc3RhdHVzPTEKKysJY29udGludWUKKysgICAgICBlbGlmIHRlc3QgIiRybWZvcmNlIiA9IHllczsgdGhlbgorKwljb250aW51ZQorKyAgICAgIGZpCisrCisrICAgICAgcm1maWxlcz0iJGZpbGUiCisrCisrICAgICAgY2FzZSAkbmFtZSBpbgorKyAgICAgICoubGEpCisrCSMgUG9zc2libHkgYSBsaWJ0b29sIGFyY2hpdmUsIHNvIHZlcmlmeSBpdC4KKysJaWYgZnVuY19sYWxpYl9wICIkZmlsZSI7IHRoZW4KKysJICBmdW5jX3NvdXJjZSAkZGlyLyRuYW1lCisrCisrCSAgIyBEZWxldGUgdGhlIGxpYnRvb2wgbGlicmFyaWVzIGFuZCBzeW1saW5rcy4KKysJICBmb3IgbiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKysJICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG4iCisrCSAgZG9uZQorKwkgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kb2xkX2xpYnJhcnkiCisrCisrCSAgY2FzZSAiJG1vZGUiIGluCisrCSAgY2xlYW4pCisrCSAgICBjYXNlICIgICRsaWJyYXJ5X25hbWVzICIgaW4KKysJICAgICMgIiAgIiBpbiB0aGUgYmVnaW5uaW5nIGNhdGNoZXMgZW1wdHkgJGRsbmFtZQorKwkgICAgKiIgJGRsbmFtZSAiKikgOzsKKysJICAgICopIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJGRsbmFtZSIgOzsKKysJICAgIGVzYWMKKysJICAgIHRlc3QgLW4gIiRsaWJkaXIiICYmIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG5hbWUgJG9iamRpci8ke25hbWV9aSIKKysJICAgIDs7CisrCSAgdW5pbnN0YWxsKQorKwkgICAgaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiOyB0aGVuCisrCSAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0dW5pbnN0YWxsIGNvbW1hbmRzLgorKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3R1bmluc3RhbGxfY21kcyIgJ3Rlc3QgIiRybWZvcmNlIiA9IHllcyB8fCBleGl0X3N0YXR1cz0xJworKwkgICAgZmkKKysKKysJICAgIGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKysJICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIG9sZF9wb3N0dW5pbnN0YWxsIGNvbW1hbmRzLgorKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMiICd0ZXN0ICIkcm1mb3JjZSIgPSB5ZXMgfHwgZXhpdF9zdGF0dXM9MScKKysJICAgIGZpCisrCSAgICAjIEZJWE1FOiBzaG91bGQgcmVpbnN0YWxsIHRoZSBiZXN0IHJlbWFpbmluZyBzaGFyZWQgbGlicmFyeS4KKysJICAgIDs7CisrCSAgZXNhYworKwlmaQorKwk7OworKworKyAgICAgICoubG8pCisrCSMgUG9zc2libHkgYSBsaWJ0b29sIG9iamVjdCwgc28gdmVyaWZ5IGl0LgorKwlpZiBmdW5jX2xhbGliX3AgIiRmaWxlIjsgdGhlbgorKworKwkgICMgUmVhZCB0aGUgLmxvIGZpbGUKKysJICBmdW5jX3NvdXJjZSAkZGlyLyRuYW1lCisrCisrCSAgIyBBZGQgUElDIG9iamVjdCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byByZW1vdmUuCisrCSAgaWYgdGVzdCAtbiAiJHBpY19vYmplY3QiICYmCisrCSAgICAgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKysJICAgIHJtZmlsZXM9IiRybWZpbGVzICRkaXIvJHBpY19vYmplY3QiCisrCSAgZmkKKysKKysJICAjIEFkZCBub24tUElDIG9iamVjdCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byByZW1vdmUuCisrCSAgaWYgdGVzdCAtbiAiJG5vbl9waWNfb2JqZWN0IiAmJgorKwkgICAgIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorKwkgICAgcm1maWxlcz0iJHJtZmlsZXMgJGRpci8kbm9uX3BpY19vYmplY3QiCisrCSAgZmkKKysJZmkKKysJOzsKKysKKysgICAgICAqKQorKwlpZiB0ZXN0ICIkbW9kZSIgPSBjbGVhbiA7IHRoZW4KKysJICBub2V4ZW5hbWU9JG5hbWUKKysJICBjYXNlICRmaWxlIGluCisrCSAgKi5leGUpCisrCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgorKwkgICAgZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRuYW1lIgorKwkgICAgbm9leGVuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysJICAgICMgJGZpbGUgd2l0aCAuZXhlIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gcm1maWxlcywKKysJICAgICMgYWRkICRmaWxlIHdpdGhvdXQgLmV4ZQorKwkgICAgcm1maWxlcz0iJHJtZmlsZXMgJGZpbGUiCisrCSAgICA7OworKwkgIGVzYWMKKysJICAjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyBhIGxpYnRvb2wgcHJvZ3JhbS4KKysJICBpZiBmdW5jX2x0d3JhcHBlcl9wICIkZmlsZSI7IHRoZW4KKysJICAgIHJlbGlua19jb21tYW5kPQorKwkgICAgZnVuY19zb3VyY2UgJGRpci8kbm9leGVuYW1lCisrCisrCSAgICAjIG5vdGUgJG5hbWUgc3RpbGwgY29udGFpbnMgLmV4ZSBpZiBpdCB3YXMgaW4gJGZpbGUgb3JpZ2luYWxseQorKwkgICAgIyBhcyBkb2VzIHRoZSB2ZXJzaW9uIG9mICRmaWxlIHRoYXQgd2FzIGFkZGVkIGludG8gJHJtZmlsZXMKKysJICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG5hbWUgJG9iamRpci8ke25hbWV9Uy4ke29iamV4dH0iCisrCSAgICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllcyAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisrCSAgICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvbHQtJG5hbWUiCisrCSAgICBmaQorKwkgICAgaWYgdGVzdCAiWCRub2V4ZW5hbWUiICE9ICJYJG5hbWUiIDsgdGhlbgorKwkgICAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyL2x0LSR7bm9leGVuYW1lfS5jIgorKwkgICAgZmkKKysJICBmaQorKwlmaQorKwk7OworKyAgICAgIGVzYWMKKysgICAgICBmdW5jX3Nob3dfZXZhbCAiJFJNICRybWZpbGVzIiAnZXhpdF9zdGF0dXM9MScKKysgICAgZG9uZQorKyAgICBvYmpkaXI9IiRvcmlnb2JqZGlyIgorKworKyAgICAjIFRyeSB0byByZW1vdmUgdGhlICR7b2JqZGlyfXMgaW4gdGhlIGRpcmVjdG9yaWVzIHdoZXJlIHdlIGRlbGV0ZWQgZmlsZXMKKysgICAgZm9yIGRpciBpbiAkcm1kaXJzOyBkbworKyAgICAgIGlmIHRlc3QgLWQgIiRkaXIiOyB0aGVuCisrCWZ1bmNfc2hvd19ldmFsICJybWRpciAkZGlyID4vZGV2L251bGwgMj4mMSIKKysgICAgICBmaQorKyAgICBkb25lCisrCisrICAgIGV4aXQgJGV4aXRfc3RhdHVzCisrfQorKworK3sgdGVzdCAiJG1vZGUiID0gdW5pbnN0YWxsIHx8IHRlc3QgIiRtb2RlIiA9IGNsZWFuOyB9ICYmCisrICAgIGZ1bmNfbW9kZV91bmluc3RhbGwgJHsxKyIkQCJ9CisrCisrdGVzdCAteiAiJG1vZGUiICYmIHsKKysgIGhlbHA9IiRnZW5lcmljX2hlbHAiCisrICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBNT0RFIgorK30KKysKKyt0ZXN0IC16ICIkZXhlY19jbWQiICYmIFwKKysgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRtb2RlJyIKKysKKytpZiB0ZXN0IC1uICIkZXhlY19jbWQiOyB0aGVuCisrICBldmFsIGV4ZWMgIiRleGVjX2NtZCIKKysgIGV4aXQgJEVYSVRfRkFJTFVSRQorK2ZpCisrCisrZXhpdCAkZXhpdF9zdGF0dXMKKysKKysKKysjIFRoZSBUQUdzIGJlbG93IGFyZSBkZWZpbmVkIHN1Y2ggdGhhdCB3ZSBuZXZlciBnZXQgaW50byBhIHNpdHVhdGlvbgorKyMgaW4gd2hpY2ggd2UgZGlzYWJsZSBib3RoIGtpbmRzIG9mIGxpYnJhcmllcy4gIEdpdmVuIGNvbmZsaWN0aW5nCisrIyBjaG9pY2VzLCB3ZSBnbyBmb3IgYSBzdGF0aWMgbGlicmFyeSwgdGhhdCBpcyB0aGUgbW9zdCBwb3J0YWJsZSwKKysjIHNpbmNlIHdlIGNhbid0IHRlbGwgd2hldGhlciBzaGFyZWQgbGlicmFyaWVzIHdlcmUgZGlzYWJsZWQgYmVjYXVzZQorKyMgdGhlIHVzZXIgYXNrZWQgZm9yIHRoYXQgb3IgYmVjYXVzZSB0aGUgcGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0CisrIyB0aGVtLiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IG9uIEFJWCwgYmVjYXVzZSB3ZSBkb24ndAorKyMgc3VwcG9ydCBoYXZpbmcgYm90aCBzdGF0aWMgYW5kIHNoYXJlZCBsaWJyYXJpZXMgZW5hYmxlZCBhdCB0aGUgc2FtZQorKyMgdGltZSBvbiB0aGF0IHBsYXRmb3JtLCBzbyB3ZSBkZWZhdWx0IHRvIGEgc2hhcmVkLW9ubHkgY29uZmlndXJhdGlvbi4KKysjIElmIGEgZGlzYWJsZS1zaGFyZWQgdGFnIGlzIGdpdmVuLCB3ZSdsbCBmYWxsYmFjayB0byBhIHN0YXRpYy1vbmx5CisrIyBjb25maWd1cmF0aW9uLiAgQnV0IHdlJ2xsIG5ldmVyIGdvIGZyb20gc3RhdGljLW9ubHkgdG8gc2hhcmVkLW9ubHkuCisrCisrIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXNoYXJlZAorK2J1aWxkX2xpYnRvb2xfbGlicz1ubworK2J1aWxkX29sZF9saWJzPXllcworKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc2hhcmVkCisrCisrIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXN0YXRpYworK2J1aWxkX29sZF9saWJzPWBjYXNlICRidWlsZF9saWJ0b29sX2xpYnMgaW4geWVzKSBlY2hvIG5vOzsgKikgZWNobyB5ZXM7OyBlc2FjYAorKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc3RhdGljCisrCisrIyBMb2NhbCBWYXJpYWJsZXM6CisrIyBtb2RlOnNoZWxsLXNjcmlwdAorKyMgc2gtaW5kZW50YXRpb246MgorKyMgRW5kOgorKyMgdmk6c3c9MgorLS0tIGEvYmZkL01ha2VmaWxlLmluCisrKysgYi9iZmQvTWFrZWZpbGUuaW4KK0BAIC0zMTIsNiArMzEyLDcgQEAgQUxMX01BQ0hJTkVTID0gXAorIAljcHUtYXJjLmxvIFwKKyAJY3B1LWFybS5sbyBcCisgCWNwdS1hdnIubG8gXAorKwljcHUtYXZyMzIubG8gXAorIAljcHUtYmZpbi5sbyBcCisgCWNwdS1jcjE2LmxvIFwKKyAJY3B1LWNyMTZjLmxvIFwKK0BAIC00OTMsNiArNDk0LDcgQEAgQkZEMzJfQkFDS0VORFMgPSBcCisgCWVsZjMyLWFyYy5sbyBcCisgCWVsZjMyLWFybS5sbyBcCisgCWVsZjMyLWF2ci5sbyBcCisrCWVsZjMyLWF2cjMyLmxvIFwKKyAJZWxmMzItYmZpbi5sbyBcCisgCWVsZjMyLWNyMTYubG8gXAorIAllbGYzMi1jcjE2Yy5sbyBcCitAQCAtMTkwOCw2ICsxOTEwLDEwIEBAIGVsZjMyLWNyMTYubG86IGVsZjMyLWNyMTYuYyAkKElOQ0RJUikvZmkKKyAgICQoSU5DRElSKS9oYXNodGFiLmggJChJTkNESVIpL2xpYmliZXJ0eS5oIGVsZi1iZmQuaCBcCisgICAkKElOQ0RJUikvZWxmL2NvbW1vbi5oICQoSU5DRElSKS9lbGYvaW50ZXJuYWwuaCAkKElOQ0RJUikvZWxmL2V4dGVybmFsLmggXAorICAgJChJTkNESVIpL2VsZi9jcjE2LmggJChJTkNESVIpL2VsZi9yZWxvYy1tYWNyb3MuaCBlbGYzMi10YXJnZXQuaAorK2VsZjMyLWF2cjMyLmxvOiBlbGYzMi1hdnIzMi5jICQoSU5DRElSKS9maWxlbmFtZXMuaCBlbGYtYmZkLmggXAorKyAgJChJTkNESVIpL2VsZi9jb21tb24uaCAkKElOQ0RJUikvZWxmL2ludGVybmFsLmggJChJTkNESVIpL2VsZi9leHRlcm5hbC5oIFwKKysgICQoSU5DRElSKS9iZmRsaW5rLmggJChJTkNESVIpL2VsZi9hdnIzMi5oICQoSU5DRElSKS9lbGYvcmVsb2MtbWFjcm9zLmggXAorKyAgZWxmMzItdGFyZ2V0LmgKKyBlbGYzMi1jcjE2Yy5sbzogZWxmMzItY3IxNmMuYyAkKElOQ0RJUikvZmlsZW5hbWVzLmggXAorICAgJChJTkNESVIpL2hhc2h0YWIuaCAkKElOQ0RJUikvYmZkbGluay5oICQoSU5DRElSKS9lbGYvY3IxNmMuaCBcCisgICAkKElOQ0RJUikvZWxmL3JlbG9jLW1hY3Jvcy5oIGVsZi1iZmQuaCAkKElOQ0RJUikvZWxmL2NvbW1vbi5oIFwKKy0tLSAvZGV2L251bGwKKysrKyBiL2JmZC9wby9NYWtlZmlsZS5pbgorQEAgLTAsMCArMSwyOTcgQEAKKysjIE1ha2VmaWxlIGZvciBwcm9ncmFtIHNvdXJjZSBkaXJlY3RvcnkgaW4gR05VIE5MUyB1dGlsaXRpZXMgcGFja2FnZS4KKysjIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NyBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4KKysjIENvcHlyaWdodCAyMDAxLCAyMDAzLCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMKKysjIFRoaXMgZmlsZSBtYXkgYmUgY29waWVkIGFuZCB1c2VkIGZyZWVseSB3aXRob3V0IHJlc3RyaWN0aW9ucy4gIEl0IGNhbgorKyMgYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlciB0aGUgR05VIFB1YmxpYyBMaWNlbnNlCisrIyBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dCBmdW5jdGlvbmFsaXR5LgorKyMgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgaXMgKm5vdCogZnJlZWx5IGF2YWlsYWJsZS4KKysKKytQQUNLQUdFID0gYmZkCisrVkVSU0lPTiA9IDIuMTguYXRtZWwuMS4wLjEuYXZyMzJsaW51eC4xCisrCisrU0hFTEwgPSAvYmluL3NoCisrCisrCisrc3JjZGlyID0gLgorK3RvcF9zcmNkaXIgPSAuLgorKworK3RvcF9idWlsZGRpciA9IC4uCisrCisrcHJlZml4ID0gL3VzcgorK2V4ZWNfcHJlZml4ID0gJHtwcmVmaXh9CisrZGF0YWRpciA9ICQocHJlZml4KS9zaGFyZQorK2xvY2FsZWRpciA9ICQoZGF0YWRpcikvbG9jYWxlCisrZ251bG9jYWxlZGlyID0gJChwcmVmaXgpL3NoYXJlL2xvY2FsZQorK2dldHRleHRzcmNkaXIgPSAkKHByZWZpeCkvc2hhcmUvZ2V0dGV4dC9wbworK3N1YmRpciA9IHBvCisrCisrREVTVERJUiA9CisrCisrSU5TVEFMTCA9IC91c3IvYmluL2luc3RhbGwgLWMKKytJTlNUQUxMX0RBVEEgPSAke0lOU1RBTEx9IC1tIDY0NAorK01LSU5TVEFMTERJUlMgPSAkKHRvcF9idWlsZGRpcikvLi8uLi9ta2luc3RhbGxkaXJzCisrCisrQ0MgPSBnY2MKKytHRU5DQVQgPSBnZW5jYXQKKytHTVNHRk1UID0gUEFUSD0uLi9zcmM6JCRQQVRIIC91c3IvYmluL21zZ2ZtdAorK01TR0ZNVCA9IC91c3IvYmluL21zZ2ZtdAorK1hHRVRURVhUID0gUEFUSD0uLi9zcmM6JCRQQVRIIC91c3IvYmluL3hnZXR0ZXh0CisrTVNHTUVSR0UgPSBQQVRIPS4uL3NyYzokJFBBVEggbXNnbWVyZ2UKKysKKytERUZTID0gLURIQVZFX0NPTkZJR19ICisrQ0ZMQUdTID0gLWcgLU8yCisrQ1BQRkxBR1MgPSAKKysKKytJTkNMVURFUyA9IC1JLi4gLUkkKHRvcF9zcmNkaXIpL2ludGwKKysKKytDT01QSUxFID0gJChDQykgLWMgJChERUZTKSAkKElOQ0xVREVTKSAkKENQUEZMQUdTKSAkKENGTEFHUykgJChYQ0ZMQUdTKQorKworK1NPVVJDRVMgPSBjYXQtaWQtdGJsLmMKKytQT0ZJTEVTID0gQFBPRklMRVNACisrR01PRklMRVMgPSBAR01PRklMRVNACisrRElTVEZJTEVTID0gQ2hhbmdlTG9nIE1ha2VmaWxlLmluLmluIFNSQy1QT1RGSUxFUy5pbiBCTEQtUE9URklMRVMuaW4gJChQQUNLQUdFKS5wb3QgXAorK3N0YW1wLWNhdC1pZCAkKFBPRklMRVMpICQoR01PRklMRVMpICQoU09VUkNFUykKKysKKysjIE5vdGUgLSB0aGUgZm9sbG93aW5nIGxpbmUgZ2V0cyBwcm9jZXNzZWQgYnkgYmZkL2NvbmZpZ3VyZSBhbmQgYW1lbmRlZAorKyMgdG8gY29udGFpbiB0aGUgZnVsbCBsaXN0IG9mIHNvdXJjZSBkaXIgUE9URklMRVMuCisrU1JDLVBPVEZJTEVTID0gXAorKworKyMgTm90ZSAtIHRoZSBmb2xsb3dpbmcgbGluZSBnZXRzIHByb2Nlc3NlZCBieSBiZmQvY29uZmlndXJlIGFuZCBhbWVuZGVkCisrIyB0byBjb250YWluIHRoZSBmdWxsIGxpc3Qgb2YgYnVpbGQgZGlyIFBPVEZJTEVTLgorK0JMRC1QT1RGSUxFUyA9IFwKKysKKytDQVRBTE9HUyA9ICBkYS5nbW8gZXMuZ21vIGZyLmdtbyBqYS5nbW8gcm8uZ21vIHJ3LmdtbyBzdi5nbW8gdHIuZ21vIHZpLmdtbyB6aF9DTi5nbW8gZGEuZ21vIGVzLmdtbyBmci5nbW8gamEuZ21vIHJvLmdtbyBydy5nbW8gc3YuZ21vIHRyLmdtbyB2aS5nbW8gemhfQ04uZ21vCisrQ0FUT0JKRVhUID0gLmdtbworK0lOU1RPQkpFWFQgPSAubW8KKysKKysuU1VGRklYRVM6CisrLlNVRkZJWEVTOiAuYyAubyAucG8gLnBveCAuZ21vIC5tbyAubXNnIC5jYXQKKysKKysuYy5vOgorKwkkKENPTVBJTEUpICQ8CisrCisrLnBvLnBveDoKKysJJChNQUtFKSAkKFBBQ0tBR0UpLnBvdAorKwkkKE1TR01FUkdFKSAkPCAkKHNyY2RpcikvJChQQUNLQUdFKS5wb3QgLW8gJCoucG94CisrCisrLnBvLm1vOgorKwkkKE1TR0ZNVCkgLW8gJEAgJDwKKysKKysucG8uZ21vOgorKwlmaWxlPWBlY2hvICQqIHwgc2VkICdzLC4qLywsJ2AuZ21vIFwKKysJICAmJiBybSAtZiAkJGZpbGUgJiYgJChHTVNHRk1UKSAtbyAkJGZpbGUgJDwKKysKKysucG8uY2F0OgorKwlzZWQgLWYgLi4vaW50bC9wbzJtc2cuc2VkIDwgJDwgPiAkKi5tc2cgXAorKwkgICYmIHJtIC1mICRAICYmICQoR0VOQ0FUKSAkQCAkKi5tc2cKKysKKysKKythbGw6IGFsbC15ZXMKKysKKythbGwteWVzOiAkKENBVEFMT0dTKSAjICQoUEFDS0FHRSkucG90CisrYWxsLW5vOgorKworKyQoc3JjZGlyKS8kKFBBQ0tBR0UpLnBvdDogJChTUkMtUE9URklMRVMpICQoQkxELVBPVEZJTEVTKQorKwkkKFhHRVRURVhUKSAtLWRlZmF1bHQtZG9tYWluPSQoUEFDS0FHRSkgXAorKwkgIC0tZGlyZWN0b3J5PSQodG9wX3NyY2RpcikgXAorKwkgIC0tYWRkLWNvbW1lbnRzIC0ta2V5d29yZD1fIC0ta2V5d29yZD1OXyBcCisrCSAgLS1tc2dpZC1idWdzLWFkZHJlc3M9YnVnLWJpbnV0aWxzQGdudS5vcmcgXAorKwkgIC0tZmlsZXMtZnJvbT0kKHNyY2RpcikvU1JDLVBPVEZJTEVTLmluIAorKwkkKFhHRVRURVhUKSAtLWRlZmF1bHQtZG9tYWluPSQoUEFDS0FHRSkgXAorKwkgIC0tZGlyZWN0b3J5PS4uIFwKKysJICAtLWRpcmVjdG9yeT0uIFwKKysJICAtLWFkZC1jb21tZW50cyAtLWtleXdvcmQ9XyAtLWtleXdvcmQ9Tl8gXAorKwkgIC0tam9pbi1leGlzdGluZyBcCisrCSAgLS1tc2dpZC1idWdzLWFkZHJlc3M9YnVnLWJpbnV0aWxzQGdudS5vcmcgXAorKwkgIC0tZmlsZXMtZnJvbT0kKHNyY2RpcikvQkxELVBPVEZJTEVTLmluCisrCXJtIC1mICQoc3JjZGlyKS8kKFBBQ0tBR0UpLnBvdAorKwltdiAkKFBBQ0tBR0UpLnBvICQoc3JjZGlyKS8kKFBBQ0tBR0UpLnBvdAorKworKyQoc3JjZGlyKS9jYXQtaWQtdGJsLmM6IHN0YW1wLWNhdC1pZDsgQDoKKyskKHNyY2Rpcikvc3RhbXAtY2F0LWlkOiAkKFBBQ0tBR0UpLnBvdAorKwlybSAtZiBjYXQtaWQtdGJsLnRtcAorKwlzZWQgLWYgLi4vaW50bC9wbzJ0Ymwuc2VkICQoc3JjZGlyKS8kKFBBQ0tBR0UpLnBvdCBcCisrCQl8IHNlZCAtZSAicy9AUEFDS0FHRSBOQU1FQC8kKFBBQ0tBR0UpLyIgPiBjYXQtaWQtdGJsLnRtcAorKwlpZiBjbXAgLXMgY2F0LWlkLXRibC50bXAgJChzcmNkaXIpL2NhdC1pZC10YmwuYzsgdGhlbiBcCisrCSAgcm0gY2F0LWlkLXRibC50bXA7IFwKKysJZWxzZSBcCisrCSAgZWNobyBjYXQtaWQtdGJsLmMgY2hhbmdlZDsgXAorKwkgIHJtIC1mICQoc3JjZGlyKS9jYXQtaWQtdGJsLmM7IFwKKysJICBtdiBjYXQtaWQtdGJsLnRtcCAkKHNyY2RpcikvY2F0LWlkLXRibC5jOyBcCisrCWZpCisrCWNkICQoc3JjZGlyKSAmJiBybSAtZiBzdGFtcC1jYXQtaWQgJiYgZWNobyB0aW1lc3RhbXAgPiBzdGFtcC1jYXQtaWQKKysKKysKKytpbnN0YWxsOiBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1kYXRhCisraW5zdGFsbC1leGVjOgorK2luc3RhbGwtaW5mbzoKKytpbnN0YWxsLWh0bWw6CisraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEteWVzCisraW5zdGFsbC1kYXRhLW5vOiBhbGwKKytpbnN0YWxsLWRhdGEteWVzOiBhbGwKKysJaWYgdGVzdCAtciAkKE1LSU5TVEFMTERJUlMpOyB0aGVuIFwKKysJICAkKE1LSU5TVEFMTERJUlMpICQoREVTVERJUikkKGRhdGFkaXIpOyBcCisrCWVsc2UgXAorKwkgICQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChkYXRhZGlyKTsgXAorKwlmaQorKwlAY2F0YWxvZ3M9JyQoQ0FUQUxPR1MpJzsgXAorKwlmb3IgY2F0IGluICQkY2F0YWxvZ3M7IGRvIFwKKysJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorKwkgIGNhc2UgIiQkY2F0IiBpbiBcCisrCSAgICAqLmdtbykgZGVzdGRpcj0kKGdudWxvY2FsZWRpcik7OyBcCisrCSAgICAqKSAgICAgZGVzdGRpcj0kKGxvY2FsZWRpcik7OyBcCisrCSAgZXNhYzsgXAorKwkgIGxhbmc9YGVjaG8gJCRjYXQgfCBzZWQgJ3MvXCQoQ0FUT0JKRVhUKSQkLy8nYDsgXAorKwkgIGRpcj0kKERFU1RESVIpJCRkZXN0ZGlyLyQkbGFuZy9MQ19NRVNTQUdFUzsgXAorKwkgIGlmIHRlc3QgLXIgJChNS0lOU1RBTExESVJTKTsgdGhlbiBcCisrCSAgICAkKE1LSU5TVEFMTERJUlMpICQkZGlyOyBcCisrCSAgZWxzZSBcCisrCSAgICAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJCRkaXI7IFwKKysJICBmaTsgXAorKwkgIGlmIHRlc3QgLXIgJCRjYXQ7IHRoZW4gXAorKwkgICAgJChJTlNUQUxMX0RBVEEpICQkY2F0ICQkZGlyLyQoUEFDS0FHRSkkKElOU1RPQkpFWFQpOyBcCisrCSAgICBlY2hvICJpbnN0YWxsaW5nICQkY2F0IGFzICQkZGlyLyQoUEFDS0FHRSkkKElOU1RPQkpFWFQpIjsgXAorKwkgIGVsc2UgXAorKwkgICAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGNhdCAkJGRpci8kKFBBQ0tBR0UpJChJTlNUT0JKRVhUKTsgXAorKwkgICAgZWNobyAiaW5zdGFsbGluZyAkKHNyY2RpcikvJCRjYXQgYXMiIFwKKysJCSAiJCRkaXIvJChQQUNLQUdFKSQoSU5TVE9CSkVYVCkiOyBcCisrCSAgZmk7IFwKKysJICBpZiB0ZXN0IC1yICQkY2F0Lm07IHRoZW4gXAorKwkgICAgJChJTlNUQUxMX0RBVEEpICQkY2F0Lm0gJCRkaXIvJChQQUNLQUdFKSQoSU5TVE9CSkVYVCkubTsgXAorKwkgICAgZWNobyAiaW5zdGFsbGluZyAkJGNhdC5tIGFzICQkZGlyLyQoUEFDS0FHRSkkKElOU1RPQkpFWFQpLm0iOyBcCisrCSAgZWxzZSBcCisrCSAgICBpZiB0ZXN0IC1yICQoc3JjZGlyKS8kJGNhdC5tIDsgdGhlbiBcCisrCSAgICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRjYXQubSBcCisrCQkkJGRpci8kKFBBQ0tBR0UpJChJTlNUT0JKRVhUKS5tOyBcCisrCSAgICAgIGVjaG8gImluc3RhbGxpbmcgJChzcmNkaXIpLyQkY2F0IGFzIiBcCisrCQkgICAiJCRkaXIvJChQQUNLQUdFKSQoSU5TVE9CSkVYVCkubSI7IFwKKysJICAgIGVsc2UgXAorKwkgICAgICB0cnVlOyBcCisrCSAgICBmaTsgXAorKwkgIGZpOyBcCisrCWRvbmUKKysJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dCI7IHRoZW4gXAorKwkgIGlmIHRlc3QgLXIgJChNS0lOU1RBTExESVJTKTsgdGhlbiBcCisrCSAgICAkKE1LSU5TVEFMTERJUlMpICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpOyBcCisrCSAgZWxzZSBcCisrCSAgICAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNURElSKSQoZ2V0dGV4dHNyY2Rpcik7IFwKKysJICBmaTsgXAorKwkgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvTWFrZWZpbGUuaW4uaW4gXAorKwkJCSAgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvTWFrZWZpbGUuaW4uaW47IFwKKysJZWxzZSBcCisrCSAgOiA7IFwKKysJZmkKKysKKysjIERlZmluZSB0aGlzIGFzIGVtcHR5IHVudGlsIEkgZm91bmQgYSB1c2VmdWwgYXBwbGljYXRpb24uCisraW5zdGFsbGNoZWNrOgorKworK3VuaW5zdGFsbDoKKysJY2F0YWxvZ3M9JyQoQ0FUQUxPR1MpJzsgXAorKwlmb3IgY2F0IGluICQkY2F0YWxvZ3M7IGRvIFwKKysJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorKwkgIGxhbmc9YGVjaG8gJCRjYXQgfCBzZWQgJ3MvXCQoQ0FUT0JKRVhUKSQkLy8nYDsgXAorKwkgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nL0xDX01FU1NBR0VTLyQoUEFDS0FHRSkkKElOU1RPQkpFWFQpOyBcCisrCSAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVMvJChQQUNLQUdFKSQoSU5TVE9CSkVYVCkubTsgXAorKwkgIHJtIC1mICQoREVTVERJUikkKGdudWxvY2FsZWRpcikvJCRsYW5nL0xDX01FU1NBR0VTLyQoUEFDS0FHRSkkKElOU1RPQkpFWFQpOyBcCisrCSAgcm0gLWYgJChERVNURElSKSQoZ251bG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVMvJChQQUNLQUdFKSQoSU5TVE9CSkVYVCkubTsgXAorKwlkb25lCisrCXJtIC1mICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpL3BvLU1ha2VmaWxlLmluLmluCisrCisrY2hlY2s6IGFsbAorKworK2NhdC1pZC10YmwubzogLi4vaW50bC9saWJnZXR0ZXh0LmgKKysKKytodG1sIGR2aSBwZGYgcHMgaW5mbyB0YWdzIFRBR1MgSUQ6CisrCisrbW9zdGx5Y2xlYW46CisrCXJtIC1mIGNvcmUgY29yZS4qICoucG94ICQoUEFDS0FHRSkucG8gKi5vbGQucG8gY2F0LWlkLXRibC50bXAKKysJcm0gLWZyICoubworKworK2NsZWFuOiBtb3N0bHljbGVhbgorKworK2Rpc3RjbGVhbjogY2xlYW4KKysJcm0gLWYgTWFrZWZpbGUgTWFrZWZpbGUuaW4gKi5tbyAqLm1zZyAqLmNhdCAqLmNhdC5tCisrCXJtIC1mIFNSQy1QT1RGSUxFUyBCTEQtUE9URklMRVMgCisrCisrbWFpbnRhaW5lci1jbGVhbjogZGlzdGNsZWFuCisrCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZTsiCisrCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKKysJcm0gLWYgJChHTU9GSUxFUykgU1JDLVBPVEZJTEVTLmluIEJMRC1QT1RGSUxFUy5pbgorKworK2Rpc3RkaXIgPSAuLi8kKFBBQ0tBR0UpLSQoVkVSU0lPTikvJChzdWJkaXIpCisrZGlzdCBkaXN0ZGlyOiB1cGRhdGUtcG8gJChESVNURklMRVMpCisrCWRpc3RzPSIkKERJU1RGSUxFUykiOyBcCisrCWZvciBmaWxlIGluICQkZGlzdHM7IGRvIFwKKysJICBsbiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikgMj4gL2Rldi9udWxsIFwKKysJICAgIHx8IGNwIC1wICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKTsgXAorKwlkb25lCisrCisrdXBkYXRlLXBvOiBNYWtlZmlsZQorKwkkKE1BS0UpICQoUEFDS0FHRSkucG90CisrCVBBVEg9YHB3ZGAvLi4vc3JjOiQkUEFUSDsgXAorKwljZCAkKHNyY2Rpcik7IFwKKysJY2F0YWxvZ3M9JyQoQ0FUQUxPR1MpJzsgXAorKwlmb3IgY2F0IGluICQkY2F0YWxvZ3M7IGRvIFwKKysJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorKwkgIGxhbmc9YGVjaG8gJCRjYXQgfCBzZWQgJ3MvXCQoQ0FUT0JKRVhUKSQkLy8nYDsgXAorKwkgIG12ICQkbGFuZy5wbyAkJGxhbmcub2xkLnBvOyBcCisrCSAgZWNobyAiJCRsYW5nOiI7IFwKKysJICBpZiAkKE1TR01FUkdFKSAkJGxhbmcub2xkLnBvICQoUEFDS0FHRSkucG90IC1vICQkbGFuZy5wbzsgdGhlbiBcCisrCSAgICBybSAtZiAkJGxhbmcub2xkLnBvOyBcCisrCSAgZWxzZSBcCisrCSAgICBlY2hvICJtc2dtZXJnZSBmb3IgJCRjYXQgZmFpbGVkISI7IFwKKysJICAgIHJtIC1mICQkbGFuZy5wbzsgXAorKwkgICAgbXYgJCRsYW5nLm9sZC5wbyAkJGxhbmcucG87IFwKKysJICBmaTsgXAorKwlkb25lCisrCisrU1JDLVBPVEZJTEVTOiBTUkMtUE9URklMRVMuaW4KKysJKCBpZiB0ZXN0ICd4JChzcmNkaXIpJyAhPSAneC4nOyB0aGVuIFwKKysJICAgIHBvc3JjcHJlZml4PSckKHRvcF9zcmNkaXIpLyc7IFwKKysJICBlbHNlIFwKKysJICAgIHBvc3JjcHJlZml4PSIuLi8iOyBcCisrCSAgZmk7IFwKKysJICBybSAtZiAkQC10ICRAIFwKKysJICAgICYmIChzZWQgLWUgJy9eIy9kJyBcCisrCSAgICAgICAgICAgIC1lICcvXlsgCV0qJCQvZCcgXAorKwkJICAgIC1lICJzQC4qQAkkJHBvc3JjcHJlZml4JiBcXFxcQCIgPCAkKHNyY2RpcikvJEAuaW4gXAorKwkJfCBzZWQgLWUgJyQkcy9cXCQkLy8nKSA+ICRALXQgXAorKwkgICAgJiYgY2htb2QgYS13ICRALXQgXAorKwkgICAgJiYgbXYgJEAtdCAkQCApCisrCisrQkxELVBPVEZJTEVTOiBCTEQtUE9URklMRVMuaW4KKysJICAoIHJtIC1mICRALXQgJEAgXAorKwkgICAgJiYgKHNlZCAtZSAnL14jL2QnIFwKKysJICAgICAgICAgICAgLWUgJy9eWyAJXSokJC9kJyBcCisrCQkgICAgLWUgInNALipACS4uLyYgXFxcXEAiIDwgJChzcmNkaXIpLyRALmluIFwKKysJCXwgc2VkIC1lICckJHMvXFwkJC8vJykgPiAkQC10IFwKKysJICAgICYmIGNobW9kIGEtdyAkQC10IFwKKysJICAgICYmIG12ICRALXQgJEAgKQorKworK1NSQy1QT1RGSUxFUy5pbjogIyAuLi9NYWtlZmlsZQorKwljZCAuLiAmJiAkKE1BS0UpIHBvL1NSQy1QT1RGSUxFUy5pbgorKworK0JMRC1QT1RGSUxFUy5pbjogIyAuLi9NYWtlZmlsZQorKwljZCAuLiAmJiAkKE1BS0UpIHBvL0JMRC1QT1RGSUxFUy5pbgorKworKyMgTm90ZSAtIFRoZSBwcmVzZW5jZSBvZiBTUkMtUE9URklMRVMgYW5kIEJMRC1QT1RGSUxFUyBhcyBkZXBlbmRlbmNpZXMKKysjIGhlcmUgYnJlYWtzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgJ2Rpc3RjbGVhbicgcnVsZSBmb3IgbWFpbnRhaW5lcnMuCisrIyBUaGlzIGlzIGJlY2F1c2UgaWYgJ21ha2UgZGlzdGNsZWFuJyBpcyBydW4gaW4gdGhlIEJGRCBkaXJlY3RvcnksIHRoZQorKyMgTWFrZWZpbGUgdGhlcmUgd2lsbCBiZSBkZWxldGVkIGJlZm9yZSAnZGlzdGNsZWFuJyBpcyBtYWRlIGhlcmUsIGFuZCBzbworKyMgdGhlIGRlcGVuZGVuY3kgU1JDLVBPVEZJTEVTIC0+IFNSQy1QT1RGSUxFUy5pbiAtPiAuLi9NYWtlZmlsZSBjYW5ub3QKKysjIGJlIHNhdGlzZmllZC4KKysjCisrIyBUaGUgU1JDLVBPVEZJTEVTIGFuZCBCTEQtUE9URklMRVMgZGVwZW5kZW5jaWVzIGNhbm5vdCBiZSByZW1vdmVkLAorKyMgaG93ZXZlciBzaW5jZSBpdCBpcyBuZWNlc3NhcnkgdGhhdCB0aGVzZSBmaWxlcyBiZSBidWlsdCBkdXJpbmcKKysjICpjb25maWd1cmUqIHRpbWUsIHNvIHRoYXQgY29uZmlndXJlIGNhbiBpbnNlcnQgdGhlbSBpbnRvIHRoZQorKyMgcG8vTWFrZWZpbGUgdGhhdCBpdCBpcyBjcmVhdGluZywgc28gdGhhdCB0aGUgTWFrZWZpbGUgd2lsbCBoYXZlCisrIyB0aGUgY29ycmVjdCBkZXBlbmRlbmNpZXMuCisrTWFrZWZpbGU6IE1ha2UtaW4gLi4vY29uZmlnLnN0YXR1cyBTUkMtUE9URklMRVMgQkxELVBPVEZJTEVTCisrCWNkIC4uIFwKKysJICAmJiBDT05GSUdfRklMRVM9JChzdWJkaXIpL01ha2VmaWxlLmluOiQoc3ViZGlyKS9NYWtlLWluIFwKKysJICAgICBDT05GSUdfSEVBREVSUz0gJChTSEVMTCkgLi9jb25maWcuc3RhdHVzCisrCisrIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIG5vdCB0byBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKysjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKysuTk9FWFBPUlQ6CistLS0gYS9iaW51dGlscy9NYWtlZmlsZS5pbgorKysrIGIvYmludXRpbHMvTWFrZWZpbGUuaW4KK0BAIC0xMzI3LDcgKzEzMjcsNyBAQCByZWFkZWxmLm86IHJlYWRlbGYuYyBzeXNkZXAuaCAkKElOQ0RJUikvCisgICAkKElOQ0RJUikvYW5zaWRlY2wuaCAkKElOQ0RJUikvc3ltY2F0LmggYnVjb21tLmggZHdhcmYuaCBcCisgICAkKElOQ0RJUikvZWxmL2NvbW1vbi5oICQoSU5DRElSKS9lbGYvZXh0ZXJuYWwuaCAkKElOQ0RJUikvZWxmL2ludGVybmFsLmggXAorICAgJChJTkNESVIpL2VsZi9oOC5oICQoSU5DRElSKS9lbGYvcmVsb2MtbWFjcm9zLmggJChJTkNESVIpL2VsZi9hbHBoYS5oIFwKKy0gICQoSU5DRElSKS9lbGYvYXJjLmggJChJTkNESVIpL2VsZi9hcm0uaCAkKElOQ0RJUikvZWxmL2F2ci5oIFwKKysgICQoSU5DRElSKS9lbGYvYXJjLmggJChJTkNESVIpL2VsZi9hcm0uaCAkKElOQ0RJUikvZWxmL2F2ci5oICQoSU5DRElSKS9lbGYvYXZyMzIuaFwKKyAgICQoSU5DRElSKS9lbGYvYmZpbi5oICQoSU5DRElSKS9lbGYvY3Jpcy5oICQoSU5DRElSKS9lbGYvY3J4LmggXAorICAgJChJTkNESVIpL2VsZi9kMTB2LmggJChJTkNESVIpL2VsZi9kMzB2LmggJChJTkNESVIpL2VsZi9kbHguaCBcCisgICAkKElOQ0RJUikvZWxmL2ZyMzAuaCAkKElOQ0RJUikvZWxmL2Zydi5oICQoSU5DRElSKS9lbGYvaHBwYS5oIFwKKy0tLSBhL2xkL01ha2VmaWxlLmluCisrKysgYi9sZC9NYWtlZmlsZS5pbgorQEAgLTM4NCw3ICszODQsMzQgQEAgQUxMX0VNVUxBVElPTlMgPSBcCisgCWVhdnIzLm8gXAorIAllYXZyNC5vIFwKKyAJZWF2cjUubyBcCistCWVhdnI2Lm8gXAorKyAgICBlYXZyNi5vIFwKKysJZWF2cjMyZWxmX2FwNzAwMC5vIFwKKysJZWF2cjMyZWxmX2FwNzAwMS5vIFwKKysJZWF2cjMyZWxmX2FwNzAwMi5vIFwKKysJZWF2cjMyZWxmX2FwNzIwMC5vIFwKKysJZWF2cjMyZWxmX3VjM2EwMTI4Lm8gXAorKwllYXZyMzJlbGZfdWMzYTAyNTYubyBcCisrCWVhdnIzMmVsZl91YzNhMDUxMi5vIFwKKysJZWF2cjMyZWxmX3VjM2EwNTEyZXMubyBcCisrCWVhdnIzMmVsZl91YzNhMTEyOC5vIFwKKysJZWF2cjMyZWxmX3VjM2ExMjU2Lm8gXAorKwllYXZyMzJlbGZfdWMzYTE1MTJlcy5vIFwKKysJZWF2cjMyZWxmX3VjM2ExNTEyLm8gXAorKwllYXZyMzJlbGZfdWMzYTM2NC5vIFwKKysJZWF2cjMyZWxmX3VjM2EzNjRzLm8gXAorKwllYXZyMzJlbGZfdWMzYTMxMjgubyBcCisrCWVhdnIzMmVsZl91YzNhMzEyOHMubyBcCisrCWVhdnIzMmVsZl91YzNhMzI1Ni5vIFwKKysJZWF2cjMyZWxmX3VjM2EzMjU2cy5vIFwKKysJZWF2cjMyZWxmX3VjM2IwNjQubyBcCisrCWVhdnIzMmVsZl91YzNiMDEyOC5vIFwKKysJZWF2cjMyZWxmX3VjM2IwMjU2ZXMubyBcCisrCWVhdnIzMmVsZl91YzNiMDI1Ni5vIFwKKysJZWF2cjMyZWxmX3VjM2IxNjQubyBcCisrCWVhdnIzMmVsZl91YzNiMTEyOC5vIFwKKysJZWF2cjMyZWxmX3VjM2IxMjU2ZXMubyBcCisrCWVhdnIzMmVsZl91YzNiMTI1Ni5vIFwKKysJZWF2cjMybGludXgubyBcCisgCWVjb2ZmX2k4NjAubyBcCisgCWVjb2ZmX3NwYXJjLm8gXAorIAllZWxmMzJfc3B1Lm8gXAorQEAgLTE0NDgsNiArMTQ3NSwxMTQgQEAgZWF2cjYuYzogJChzcmNkaXIpL2VtdWxwYXJhbXMvYXZyNi5zaCAkKAorICAgJChFTEZfREVQUykgJChzcmNkaXIpL3NjcmlwdHRlbXBsL2F2ci5zYyBcCisgICAke0dFTl9ERVBFTkRTfQorIAkke0dFTlNDUklQVFN9IGF2cjYgIiQodGRpcl9hdnIyKSIKKytlYXZyMzJlbGZfYXA3MDAwLmM6ICQoc3JjZGlyKS9lbXVscGFyYW1zL2F2cjMyZWxmLnNoIFwKKysgICQoc3JjZGlyKS9lbXVsdGVtcGwvZWxmMzIuZW0gJChzcmNkaXIpL2VtdWx0ZW1wbC9hdnIzMmVsZi5lbSBcCisrICAkKHNyY2Rpcikvc2NyaXB0dGVtcGwvZWxmX3hpcC5zYyAke0dFTl9ERVBFTkRTfQorKwkke0dFTlNDUklQVFN9IGF2cjMyZWxmX2FwNzAwMCAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJlbGZfYXA3MDAxLmM6ICQoc3JjZGlyKS9lbXVscGFyYW1zL2F2cjMyZWxmLnNoIFwKKysgICQoc3JjZGlyKS9lbXVsdGVtcGwvZWxmMzIuZW0gJChzcmNkaXIpL2VtdWx0ZW1wbC9hdnIzMmVsZi5lbSBcCisrICAkKHNyY2Rpcikvc2NyaXB0dGVtcGwvZWxmX3hpcC5zYyAke0dFTl9ERVBFTkRTfQorKwkke0dFTlNDUklQVFN9IGF2cjMyZWxmX2FwNzAwMSAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJlbGZfYXA3MDAyLmM6ICQoc3JjZGlyKS9lbXVscGFyYW1zL2F2cjMyZWxmLnNoIFwKKysgICQoc3JjZGlyKS9lbXVsdGVtcGwvZWxmMzIuZW0gJChzcmNkaXIpL2VtdWx0ZW1wbC9hdnIzMmVsZi5lbSBcCisrICAkKHNyY2Rpcikvc2NyaXB0dGVtcGwvZWxmX3hpcC5zYyAke0dFTl9ERVBFTkRTfQorKwkke0dFTlNDUklQVFN9IGF2cjMyZWxmX2FwNzAwMiAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJlbGZfYXA3MjAwLmM6ICQoc3JjZGlyKS9lbXVscGFyYW1zL2F2cjMyZWxmLnNoIFwKKysgICQoc3JjZGlyKS9lbXVsdGVtcGwvZWxmMzIuZW0gJChzcmNkaXIpL2VtdWx0ZW1wbC9hdnIzMmVsZi5lbSBcCisrICAkKHNyY2Rpcikvc2NyaXB0dGVtcGwvZWxmX3hpcC5zYyAke0dFTl9ERVBFTkRTfQorKwkke0dFTlNDUklQVFN9IGF2cjMyZWxmX2FwNzIwMCAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJlbGZfdWMzYTAxMjguYzogJChzcmNkaXIpL2VtdWxwYXJhbXMvYXZyMzJlbGYuc2ggXAorKyAgJChzcmNkaXIpL2VtdWx0ZW1wbC9lbGYzMi5lbSAkKHNyY2RpcikvZW11bHRlbXBsL2F2cjMyZWxmLmVtIFwKKysgICQoc3JjZGlyKS9zY3JpcHR0ZW1wbC9lbGZfeGlwLnNjICR7R0VOX0RFUEVORFN9CisrCSR7R0VOU0NSSVBUU30gYXZyMzJlbGZfdWMzYTAxMjggIiQodGRpcl9hdnIzMikiIGF2cjMyZWxmCisrZWF2cjMyZWxmX3VjM2EwMjU2LmM6ICQoc3JjZGlyKS9lbXVscGFyYW1zL2F2cjMyZWxmLnNoIFwKKysgICQoc3JjZGlyKS9lbXVsdGVtcGwvZWxmMzIuZW0gJChzcmNkaXIpL2VtdWx0ZW1wbC9hdnIzMmVsZi5lbSBcCisrICAkKHNyY2Rpcikvc2NyaXB0dGVtcGwvZWxmX3hpcC5zYyAke0dFTl9ERVBFTkRTfQorKwkke0dFTlNDUklQVFN9IGF2cjMyZWxmX3VjM2EwMjU2ICIkKHRkaXJfYXZyMzIpIiBhdnIzMmVsZgorK2VhdnIzMmVsZl91YzNhMDUxMi5jOiAkKHNyY2RpcikvZW11bHBhcmFtcy9hdnIzMmVsZi5zaCBcCisrICAkKHNyY2RpcikvZW11bHRlbXBsL2VsZjMyLmVtICQoc3JjZGlyKS9lbXVsdGVtcGwvYXZyMzJlbGYuZW0gXAorKyAgJChzcmNkaXIpL3NjcmlwdHRlbXBsL2VsZl94aXAuc2MgJHtHRU5fREVQRU5EU30KKysJJHtHRU5TQ1JJUFRTfSBhdnIzMmVsZl91YzNhMDUxMiAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJlbGZfdWMzYTA1MTJlcy5jOiAkKHNyY2RpcikvZW11bHBhcmFtcy9hdnIzMmVsZi5zaCBcCisrICAkKHNyY2RpcikvZW11bHRlbXBsL2VsZjMyLmVtICQoc3JjZGlyKS9lbXVsdGVtcGwvYXZyMzJlbGYuZW0gXAorKyAgJChzcmNkaXIpL3NjcmlwdHRlbXBsL2VsZl94aXAuc2MgJHtHRU5fREVQRU5EU30KKysJJHtHRU5TQ1JJUFRTfSBhdnIzMmVsZl91YzNhMDUxMmVzICIkKHRkaXJfYXZyMzIpIiBhdnIzMmVsZgorK2VhdnIzMmVsZl91YzNhMTEyOC5jOiAkKHNyY2RpcikvZW11bHBhcmFtcy9hdnIzMmVsZi5zaCBcCisrICAkKHNyY2RpcikvZW11bHRlbXBsL2VsZjMyLmVtICQoc3JjZGlyKS9lbXVsdGVtcGwvYXZyMzJlbGYuZW0gXAorKyAgJChzcmNkaXIpL3NjcmlwdHRlbXBsL2VsZl94aXAuc2MgJHtHRU5fREVQRU5EU30KKysJJHtHRU5TQ1JJUFRTfSBhdnIzMmVsZl91YzNhMTEyOCAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJlbGZfdWMzYTEyNTYuYzogJChzcmNkaXIpL2VtdWxwYXJhbXMvYXZyMzJlbGYuc2ggXAorKyAgJChzcmNkaXIpL2VtdWx0ZW1wbC9lbGYzMi5lbSAkKHNyY2RpcikvZW11bHRlbXBsL2F2cjMyZWxmLmVtIFwKKysgICQoc3JjZGlyKS9zY3JpcHR0ZW1wbC9lbGZfeGlwLnNjICR7R0VOX0RFUEVORFN9CisrCSR7R0VOU0NSSVBUU30gYXZyMzJlbGZfdWMzYTEyNTYgIiQodGRpcl9hdnIzMikiIGF2cjMyZWxmCisrZWF2cjMyZWxmX3VjM2ExNTEyLmM6ICQoc3JjZGlyKS9lbXVscGFyYW1zL2F2cjMyZWxmLnNoIFwKKysgICQoc3JjZGlyKS9lbXVsdGVtcGwvZWxmMzIuZW0gJChzcmNkaXIpL2VtdWx0ZW1wbC9hdnIzMmVsZi5lbSBcCisrICAkKHNyY2Rpcikvc2NyaXB0dGVtcGwvZWxmX3hpcC5zYyAke0dFTl9ERVBFTkRTfQorKwkke0dFTlNDUklQVFN9IGF2cjMyZWxmX3VjM2ExNTEyICIkKHRkaXJfYXZyMzIpIiBhdnIzMmVsZgorK2VhdnIzMmVsZl91YzNhMTUxMmVzLmM6ICQoc3JjZGlyKS9lbXVscGFyYW1zL2F2cjMyZWxmLnNoIFwKKysgICQoc3JjZGlyKS9lbXVsdGVtcGwvZWxmMzIuZW0gJChzcmNkaXIpL2VtdWx0ZW1wbC9hdnIzMmVsZi5lbSBcCisrICAkKHNyY2Rpcikvc2NyaXB0dGVtcGwvZWxmX3hpcC5zYyAke0dFTl9ERVBFTkRTfQorKwkke0dFTlNDUklQVFN9IGF2cjMyZWxmX3VjM2ExNTEyZXMgIiQodGRpcl9hdnIzMikiIGF2cjMyZWxmCisrZWF2cjMyZWxmX3VjM2EzNjQuYzogJChzcmNkaXIpL2VtdWxwYXJhbXMvYXZyMzJlbGYuc2ggXAorKyAgJChzcmNkaXIpL2VtdWx0ZW1wbC9lbGYzMi5lbSAkKHNyY2RpcikvZW11bHRlbXBsL2F2cjMyZWxmLmVtIFwKKysgICQoc3JjZGlyKS9zY3JpcHR0ZW1wbC9lbGZfeGlwLnNjICR7R0VOX0RFUEVORFN9CisrCSR7R0VOU0NSSVBUU30gYXZyMzJlbGZfdWMzYTM2NCAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJlbGZfdWMzYTM2NHMuYzogJChzcmNkaXIpL2VtdWxwYXJhbXMvYXZyMzJlbGYuc2ggXAorKyAgJChzcmNkaXIpL2VtdWx0ZW1wbC9lbGYzMi5lbSAkKHNyY2RpcikvZW11bHRlbXBsL2F2cjMyZWxmLmVtIFwKKysgICQoc3JjZGlyKS9zY3JpcHR0ZW1wbC9lbGZfeGlwLnNjICR7R0VOX0RFUEVORFN9CisrCSR7R0VOU0NSSVBUU30gYXZyMzJlbGZfdWMzYTM2NHMgIiQodGRpcl9hdnIzMikiIGF2cjMyZWxmCisrZWF2cjMyZWxmX3VjM2EzMTI4LmM6ICQoc3JjZGlyKS9lbXVscGFyYW1zL2F2cjMyZWxmLnNoIFwKKysgICQoc3JjZGlyKS9lbXVsdGVtcGwvZWxmMzIuZW0gJChzcmNkaXIpL2VtdWx0ZW1wbC9hdnIzMmVsZi5lbSBcCisrICAkKHNyY2Rpcikvc2NyaXB0dGVtcGwvZWxmX3hpcC5zYyAke0dFTl9ERVBFTkRTfQorKwkke0dFTlNDUklQVFN9IGF2cjMyZWxmX3VjM2EzMTI4ICIkKHRkaXJfYXZyMzIpIiBhdnIzMmVsZgorK2VhdnIzMmVsZl91YzNhMzEyOHMuYzogJChzcmNkaXIpL2VtdWxwYXJhbXMvYXZyMzJlbGYuc2ggXAorKyAgJChzcmNkaXIpL2VtdWx0ZW1wbC9lbGYzMi5lbSAkKHNyY2RpcikvZW11bHRlbXBsL2F2cjMyZWxmLmVtIFwKKysgICQoc3JjZGlyKS9zY3JpcHR0ZW1wbC9lbGZfeGlwLnNjICR7R0VOX0RFUEVORFN9CisrCSR7R0VOU0NSSVBUU30gYXZyMzJlbGZfdWMzYTMxMjhzICIkKHRkaXJfYXZyMzIpIiBhdnIzMmVsZgorK2VhdnIzMmVsZl91YzNhMzI1Ni5jOiAkKHNyY2RpcikvZW11bHBhcmFtcy9hdnIzMmVsZi5zaCBcCisrICAkKHNyY2RpcikvZW11bHRlbXBsL2VsZjMyLmVtICQoc3JjZGlyKS9lbXVsdGVtcGwvYXZyMzJlbGYuZW0gXAorKyAgJChzcmNkaXIpL3NjcmlwdHRlbXBsL2VsZl94aXAuc2MgJHtHRU5fREVQRU5EU30KKysJJHtHRU5TQ1JJUFRTfSBhdnIzMmVsZl91YzNhMzI1NiAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJlbGZfdWMzYTMyNTZzLmM6ICQoc3JjZGlyKS9lbXVscGFyYW1zL2F2cjMyZWxmLnNoIFwKKysgICQoc3JjZGlyKS9lbXVsdGVtcGwvZWxmMzIuZW0gJChzcmNkaXIpL2VtdWx0ZW1wbC9hdnIzMmVsZi5lbSBcCisrICAkKHNyY2Rpcikvc2NyaXB0dGVtcGwvZWxmX3hpcC5zYyAke0dFTl9ERVBFTkRTfQorKwkke0dFTlNDUklQVFN9IGF2cjMyZWxmX3VjM2EzMjU2cyAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJlbGZfdWMzYjA2NC5jOiAkKHNyY2RpcikvZW11bHBhcmFtcy9hdnIzMmVsZi5zaCBcCisrICAkKHNyY2RpcikvZW11bHRlbXBsL2VsZjMyLmVtICQoc3JjZGlyKS9lbXVsdGVtcGwvYXZyMzJlbGYuZW0gXAorKyAgJChzcmNkaXIpL3NjcmlwdHRlbXBsL2VsZl94aXAuc2MgJHtHRU5fREVQRU5EU30KKysJJHtHRU5TQ1JJUFRTfSBhdnIzMmVsZl91YzNiMDY0ICIkKHRkaXJfYXZyMzIpIiBhdnIzMmVsZgorK2VhdnIzMmVsZl91YzNiMDEyOC5jOiAkKHNyY2RpcikvZW11bHBhcmFtcy9hdnIzMmVsZi5zaCBcCisrICAkKHNyY2RpcikvZW11bHRlbXBsL2VsZjMyLmVtICQoc3JjZGlyKS9lbXVsdGVtcGwvYXZyMzJlbGYuZW0gXAorKyAgJChzcmNkaXIpL3NjcmlwdHRlbXBsL2VsZl94aXAuc2MgJHtHRU5fREVQRU5EU30KKysJJHtHRU5TQ1JJUFRTfSBhdnIzMmVsZl91YzNiMDEyOCAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJlbGZfdWMzYjAyNTYuYzogJChzcmNkaXIpL2VtdWxwYXJhbXMvYXZyMzJlbGYuc2ggXAorKyAgJChzcmNkaXIpL2VtdWx0ZW1wbC9lbGYzMi5lbSAkKHNyY2RpcikvZW11bHRlbXBsL2F2cjMyZWxmLmVtIFwKKysgICQoc3JjZGlyKS9zY3JpcHR0ZW1wbC9lbGZfeGlwLnNjICR7R0VOX0RFUEVORFN9CisrCSR7R0VOU0NSSVBUU30gYXZyMzJlbGZfdWMzYjAyNTYgIiQodGRpcl9hdnIzMikiIGF2cjMyZWxmCisrZWF2cjMyZWxmX3VjM2IwMjU2ZXMuYzogJChzcmNkaXIpL2VtdWxwYXJhbXMvYXZyMzJlbGYuc2ggXAorKyAgJChzcmNkaXIpL2VtdWx0ZW1wbC9lbGYzMi5lbSAkKHNyY2RpcikvZW11bHRlbXBsL2F2cjMyZWxmLmVtIFwKKysgICQoc3JjZGlyKS9zY3JpcHR0ZW1wbC9lbGZfeGlwLnNjICR7R0VOX0RFUEVORFN9CisrCSR7R0VOU0NSSVBUU30gYXZyMzJlbGZfdWMzYjAyNTZlcyAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJlbGZfdWMzYjE2NC5jOiAkKHNyY2RpcikvZW11bHBhcmFtcy9hdnIzMmVsZi5zaCBcCisrICAkKHNyY2RpcikvZW11bHRlbXBsL2VsZjMyLmVtICQoc3JjZGlyKS9lbXVsdGVtcGwvYXZyMzJlbGYuZW0gXAorKyAgJChzcmNkaXIpL3NjcmlwdHRlbXBsL2VsZl94aXAuc2MgJHtHRU5fREVQRU5EU30KKysJJHtHRU5TQ1JJUFRTfSBhdnIzMmVsZl91YzNiMTY0ICIkKHRkaXJfYXZyMzIpIiBhdnIzMmVsZgorK2VhdnIzMmVsZl91YzNiMTEyOC5jOiAkKHNyY2RpcikvZW11bHBhcmFtcy9hdnIzMmVsZi5zaCBcCisrICAkKHNyY2RpcikvZW11bHRlbXBsL2VsZjMyLmVtICQoc3JjZGlyKS9lbXVsdGVtcGwvYXZyMzJlbGYuZW0gXAorKyAgJChzcmNkaXIpL3NjcmlwdHRlbXBsL2VsZl94aXAuc2MgJHtHRU5fREVQRU5EU30KKysJJHtHRU5TQ1JJUFRTfSBhdnIzMmVsZl91YzNiMTEyOCAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJlbGZfdWMzYjEyNTYuYzogJChzcmNkaXIpL2VtdWxwYXJhbXMvYXZyMzJlbGYuc2ggXAorKyAgJChzcmNkaXIpL2VtdWx0ZW1wbC9lbGYzMi5lbSAkKHNyY2RpcikvZW11bHRlbXBsL2F2cjMyZWxmLmVtIFwKKysgICQoc3JjZGlyKS9zY3JpcHR0ZW1wbC9lbGZfeGlwLnNjICR7R0VOX0RFUEVORFN9CisrCSR7R0VOU0NSSVBUU30gYXZyMzJlbGZfdWMzYjEyNTYgIiQodGRpcl9hdnIzMikiIGF2cjMyZWxmCisrZWF2cjMyZWxmX3VjM2IxMjU2ZXMuYzogJChzcmNkaXIpL2VtdWxwYXJhbXMvYXZyMzJlbGYuc2ggXAorKyAgJChzcmNkaXIpL2VtdWx0ZW1wbC9lbGYzMi5lbSAkKHNyY2RpcikvZW11bHRlbXBsL2F2cjMyZWxmLmVtIFwKKysgICQoc3JjZGlyKS9zY3JpcHR0ZW1wbC9lbGZfeGlwLnNjICR7R0VOX0RFUEVORFN9CisrCSR7R0VOU0NSSVBUU30gYXZyMzJlbGZfdWMzYjEyNTZlcyAiJCh0ZGlyX2F2cjMyKSIgYXZyMzJlbGYKKytlYXZyMzJsaW51eC5jOiAkKHNyY2RpcikvZW11bHBhcmFtcy9hdnIzMmxpbnV4LnNoIFwKKysgICQoc3JjZGlyKS9lbXVsdGVtcGwvZWxmMzIuZW0gJChzcmNkaXIpL2VtdWx0ZW1wbC9hdnIzMmVsZi5lbSBcCisrICAkKHNyY2Rpcikvc2NyaXB0dGVtcGwvZWxmLnNjICR7R0VOX0RFUEVORFN9CisrCSR7R0VOU0NSSVBUU30gYXZyMzJsaW51eCAiJCh0ZGlyX2F2cjMyKSIKKyBlY29mZl9pODYwLmM6ICQoc3JjZGlyKS9lbXVscGFyYW1zL2NvZmZfaTg2MC5zaCBcCisgICAkKHNyY2RpcikvZW11bHRlbXBsL2dlbmVyaWMuZW0gJChzcmNkaXIpL3NjcmlwdHRlbXBsL2k4NjBjb2ZmLnNjICR7R0VOX0RFUEVORFN9CisgCSR7R0VOU0NSSVBUU30gY29mZl9pODYwICIkKHRkaXJfY29mZl9pODYwKSIKK0BAIC0yNjc5LDcgKzI4MTQsOSBAQCBpbnN0YWxsLWV4ZWMtbG9jYWw6IGxkLW5ldyQoRVhFRVhUKQorIAkgIHx8ICQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMX1BST0dSQU0pIGxkLW5ldyQoRVhFRVhUKSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vbGQkKEVYRUVYVCk7IFwKKyAJZmkKKyAKKy1pbnN0YWxsLWRhdGEtbG9jYWw6CisrIyBXZSB3YW50IGluc3RhbGwgdG8gaW1wbHkgaW5zdGFsbC1pbmZvIGFzIHBlciBHTlUgc3RhbmRhcmRzLCBkZXNwaXRlIHRoZQorKyMgY3lnbnVzIG9wdGlvbi4KKytpbnN0YWxsLWRhdGEtbG9jYWw6IGluc3RhbGwtaW5mbworIAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKHNjcmlwdGRpcikvbGRzY3JpcHRzCisgCWZvciBmIGluIGxkc2NyaXB0cy8qOyBkbyBcCisgCSAgJChJTlNUQUxMX0RBVEEpICQkZiAkKERFU1RESVIpJChzY3JpcHRkaXIpLyQkZiA7IFwKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYmliZXJ0eS9yZXF1aXJlZC1saXN0CitAQCAtMCwwICsxIEBACisrLi9yZWdleC5vIC4vY3BsdXMtZGVtLm8gLi9jcC1kZW1hbmdsZS5vIC4vbWQ1Lm8gLi9hbGxvY2EubyAuL2FyZ3YubyAuL2Nob29zZS10ZW1wLm8gLi9jb25jYXQubyAuL2NwLWRlbWludC5vIC4vZHluLXN0cmluZy5vIC4vZmRtYXRjaC5vIC4vZmliaGVhcC5vIC4vZmlsZW5hbWVfY21wLm8gLi9mbG9hdGZvcm1hdC5vIC4vZm5tYXRjaC5vIC4vZm9wZW5fdW5sb2NrZWQubyAuL2dldG9wdC5vIC4vZ2V0b3B0MS5vIC4vZ2V0cHdkLm8gLi9nZXRydW50aW1lLm8gLi9oYXNodGFiLm8gLi9oZXgubyAuL2xiYXNlbmFtZS5vIC4vbHJlYWxwYXRoLm8gLi9tYWtlLXJlbGF0aXZlLXByZWZpeC5vIC4vbWFrZS10ZW1wLWZpbGUubyAuL29iamFsbG9jLm8gLi9vYnN0YWNrLm8gLi9wYXJ0aXRpb24ubyAuL3BleGVjdXRlLm8gLi9waHlzbWVtLm8gLi9wZXgtY29tbW9uLm8gLi9wZXgtb25lLm8gLi9wZXgtdW5peC5vIC4vc2FmZS1jdHlwZS5vIC4vc29ydC5vIC4vc3BhY2VzLm8gLi9zcGxheS10cmVlLm8gLi9zdHJlcnJvci5vIC4vc3Ryc2lnbmFsLm8gLi91bmxpbmstaWYtb3JkaW5hcnkubyAuL3hhdGV4aXQubyAuL3hleGl0Lm8gLi94bWFsbG9jLm8gLi94bWVtZHVwLm8gLi94c3RyZHVwLm8gLi94c3RyZXJyb3IubyAuL3hzdHJuZHVwLm8KKy0tLSBhL29wY29kZXMvY29uZmlndXJlCisrKysgYi9vcGNvZGVzL2NvbmZpZ3VyZQorQEAgLTExNDE4LDYgKzExNDE4LDcgQEAgaWYgdGVzdCB4JHthbGxfdGFyZ2V0c30gPSB4ZmFsc2UgOyB0aGVuCisgCWJmZF9hcmNfYXJjaCkJCXRhPSIkdGEgYXJjLWRpcy5sbyBhcmMtb3BjLmxvIGFyYy1leHQubG8iIDs7CisgCWJmZF9hcm1fYXJjaCkJCXRhPSIkdGEgYXJtLWRpcy5sbyIgOzsKKyAJYmZkX2F2cl9hcmNoKQkJdGE9IiR0YSBhdnItZGlzLmxvIiA7OworKwliZmRfYXZyMzJfYXJjaCkJCXRhPSIkdGEgYXZyMzItYXNtLmxvIGF2cjMyLWRpcy5sbyBhdnIzMi1vcGMubG8iIDs7CisgCWJmZF9iZmluX2FyY2gpCQl0YT0iJHRhIGJmaW4tZGlzLmxvIiA7OworIAliZmRfY3IxNl9hcmNoKSAgICAJdGE9IiR0YSBjcjE2LWRpcy5sbyBjcjE2LW9wYy5sbyIgOzsKKyAJYmZkX2NyaXNfYXJjaCkJCXRhPSIkdGEgY3Jpcy1kaXMubG8gY3Jpcy1vcGMubG8gY2dlbi1iaXRzZXQubG8iIDs7CitAQCAtMTE0NzYsNyArMTE0NzcsNyBAQCBpZiB0ZXN0IHgke2FsbF90YXJnZXRzfSA9IHhmYWxzZSA7IHRoZW4KKyAJCQkJdGE9IiR0YSBzaDY0LWRpcy5sbyBzaDY0LW9wYy5sbyIKKyAJCQkJYXJjaGRlZnM9IiRhcmNoZGVmcyAtRElOQ0xVREVfU0hNRURJQSIKKyAJCQkJYnJlYWs7OworLQkgICAgZXNhYzsKKysJICAgIGVzYWMKKyAJICBkb25lCisgCQkJCXRhPSIkdGEgc2gtZGlzLmxvIGNnZW4tYml0c2V0LmxvIiA7OworIAliZmRfc3BhcmNfYXJjaCkJCXRhPSIkdGEgc3BhcmMtZGlzLmxvIHNwYXJjLW9wYy5sbyIgOzsKKy0tLSBhL29wY29kZXMvTWFrZWZpbGUuaW4KKysrKyBiL29wY29kZXMvTWFrZWZpbGUuaW4KK0BAIC0yNTcsNiArMjU3LDcgQEAgTElCSUJFUlRZID0gLi4vbGliaWJlcnR5L2xpYmliZXJ0eS5hCisgIyBIZWFkZXIgZmlsZXMuCisgSEZJTEVTID0gXAorIAljZ2VuLW9wcy5oIGNnZW4tdHlwZXMuaCBcCisrCWF2cjMyLWFzbS5oIGF2cjMyLW9wYy5oIFwKKyAJZnIzMC1kZXNjLmggZnIzMC1vcGMuaCBcCisgCWZydi1kZXNjLmggZnJ2LW9wYy5oIFwKKyAJaDg1MDAtb3BjLmggXAorQEAgLTI5MSw2ICsyOTIsOSBAQCBDRklMRVMgPSBcCisgCWFyYy1leHQuYyBcCisgCWFybS1kaXMuYyBcCisgCWF2ci1kaXMuYyBcCisrCWF2cjMyLWFzbS5jIFwKKysJYXZyMzItZGlzLmMgXAorKwlhdnIzMi1vcGMuYyBcCisgCWJmaW4tZGlzLmMgXAorIAljZ2VuLWFzbS5jIFwKKyAJY2dlbi1iaXRzZXQuYyBcCitAQCAtNDQ1LDYgKzQ0OSw5IEBAIEFMTF9NQUNISU5FUyA9IFwKKyAJYXJjLWV4dC5sbyBcCisgCWFybS1kaXMubG8gXAorIAlhdnItZGlzLmxvIFwKKysJYXZyMzItYXNtLmxvIFwKKysJYXZyMzItZGlzLmxvIFwKKysJYXZyMzItb3BjLmxvIFwKKyAJYmZpbi1kaXMubG8gXAorIAljZ2VuLWFzbS5sbyBcCisgCWNnZW4tYml0c2V0LmxvIFwKK0BAIC0xMjI1LDYgKzEyMzIsMTUgQEAgYXZyLWRpcy5sbzogYXZyLWRpcy5jIHN5c2RlcC5oIGNvbmZpZy5oIAorICAgJChJTkNESVIpL2Rpcy1hc20uaCAkKEJGRF9IKSAkKElOQ0RJUikvYW5zaWRlY2wuaCAkKElOQ0RJUikvc3ltY2F0LmggXAorICAgb3BpbnRsLmggJChJTkNESVIpL2xpYmliZXJ0eS5oICQoSU5DRElSKS9hbnNpZGVjbC5oIFwKKyAgICQoSU5DRElSKS9vcGNvZGUvYXZyLmgKKythdnIzMi1hc20ubG86IGF2cjMyLWFzbS5jIHN5c2RlcC5oIGNvbmZpZy5oICQoSU5DRElSKS9hbnNpZGVjbC5oIFwKKysgICQoQkZEX0gpICQoSU5DRElSKS9zeW1jYXQuaCBhdnIzMi1vcGMuaCBvcGludGwuaCBcCisrICAkKElOQ0RJUikveHJlZ2V4LmggJChJTkNESVIpL3hyZWdleDIuaCBcCisrICAkKElOQ0RJUikvbGliaWJlcnR5LmggJChJTkNESVIpL3NhZmUtY3R5cGUuaAorK2F2cjMyLWRpcy5sbzogYXZyMzItZGlzLmMgc3lzZGVwLmggY29uZmlnLmggJChJTkNESVIpL2Fuc2lkZWNsLmggXAorKyAgJChJTkNESVIpL2Rpcy1hc20uaCAkKEJGRF9IKSAkKElOQ0RJUikvc3ltY2F0LmggJChJTkNESVIpL2xpYmliZXJ0eS5oIFwKKysgIGF2cjMyLW9wYy5oIG9waW50bC5oCisrYXZyMzItb3BjLmxvOiBhdnIzMi1vcGMuYyBzeXNkZXAuaCBjb25maWcuaCAkKElOQ0RJUikvYW5zaWRlY2wuaCBcCisrICAkKEJGRF9IKSAkKElOQ0RJUikvc3ltY2F0LmggYXZyMzItb3BjLmggJChJTkNESVIpL2xpYmliZXJ0eS5oCisgYmZpbi1kaXMubG86IGJmaW4tZGlzLmMgJChJTkNESVIpL29wY29kZS9iZmluLmggJChJTkNESVIpL2Rpcy1hc20uaCBcCisgICAkKEJGRF9IKSAkKElOQ0RJUikvYW5zaWRlY2wuaCAkKElOQ0RJUikvc3ltY2F0LmgKKyBjZ2VuLWFzbS5sbzogY2dlbi1hc20uYyBzeXNkZXAuaCBjb25maWcuaCAkKElOQ0RJUikvYW5zaWRlY2wuaCBcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xOS4xYS8xMDAtcHBjNjQtcGllLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTkuMWEvMTAwLXBwYzY0LXBpZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjIyZmI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTkuMWEvMTAwLXBwYzY0LXBpZS5wYXRjaApAQCAtMCwwICsxLDI1IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi9jcm9zc3Rvb2wtTkcvY3QtbmcudHJ1bmsvcGF0Y2hlcy9iaW51dGlscy8yLjE5LzEwMC1wcGM2NC1waWUucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIEdlbnRvbzoKK2dlbnRvby9zcmMvcGF0Y2hzZXRzL2JpbnV0aWxzLzIuMTkvMDNfYWxsX2JpbnV0aWxzLTIuMTUuOTIuMC4yLXBwYzY0LXBpZS5wYXRjaAorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gYmludXRpbHMtMi4xOS4xLm9yaWcvYmZkL2VsZjY0LXBwYy5jIGJpbnV0aWxzLTIuMTkuMS9iZmQvZWxmNjQtcHBjLmMKKy0tLSBiaW51dGlscy0yLjE5LjEub3JpZy9iZmQvZWxmNjQtcHBjLmMJMjAwOC0xMC0wOSAxNDoxODoyNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBiaW51dGlscy0yLjE5LjEvYmZkL2VsZjY0LXBwYy5jCTIwMDktMDMtMDggMTE6NTY6NTkuMDAwMDAwMDAwICswMTAwCitAQCAtMTEyOTQsNyArMTEyOTQsMTIgQEAKKyAJICAgICAgZWxzZSBpZiAoIVNZTUJPTF9SRUZFUkVOQ0VTX0xPQ0FMIChpbmZvLCAmaC0+ZWxmKQorIAkJICAgICAgICYmICFpc19vcGQKKyAJCSAgICAgICAmJiByX3R5cGUgIT0gUl9QUEM2NF9UT0MpCistCQlvdXRyZWwucl9pbmZvID0gRUxGNjRfUl9JTkZPIChoLT5lbGYuZHluaW5keCwgcl90eXBlKTsKKysJCXsKKysJCSAgb3V0cmVsLnJfaW5mbyA9IEVMRjY0X1JfSU5GTyAoaC0+ZWxmLmR5bmluZHgsIHJfdHlwZSk7CisrCQkgIGlmIChoLT5lbGYuZHluaW5keCA9PSAtMQorKwkJICAgICAgJiYgaC0+ZWxmLnJvb3QudHlwZSA9PSBiZmRfbGlua19oYXNoX3VuZGVmd2VhaykKKysJCSAgbWVtc2V0ICgmb3V0cmVsLCAwLCBzaXplb2Ygb3V0cmVsKTsKKysJCX0KKyAJICAgICAgZWxzZQorIAkJeworIAkJICAvKiBUaGlzIHN5bWJvbCBpcyBsb2NhbCwgb3IgbWFya2VkIHRvIGJlY29tZSBsb2NhbCwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE5LjFhLzExMC1SUEFUSF9FTlZWQVItc21hY2sucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xOS4xYS8xMTAtUlBBVEhfRU5WVkFSLXNtYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZTgxNDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xOS4xYS8xMTAtUlBBVEhfRU5WVkFSLXNtYWNrLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uL2Nyb3NzdG9vbC1ORy9jdC1uZy50cnVuay9wYXRjaGVzL2JpbnV0aWxzLzIuMTkvMTEwLVJQQVRIX0VOVlZBUi1zbWFjay5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gR2VudG9vOgorZ2VudG9vL3NyYy9wYXRjaHNldHMvYmludXRpbHMvMi4xOS8wOF9hbGxfYmludXRpbHMtUlBBVEhfRU5WVkFSLXNtYWNrLnBhdGNoCisKK2h0dHA6Ly9zb3VyY2V3YXJlLm9yZy9tbC9iaW51dGlscy8yMDA3LTA3L21zZzAwNDAxLmh0bWwKK2h0dHA6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDk3MAorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gYmludXRpbHMtMi4xOS4xLm9yaWcvY29uZmlndXJlIGJpbnV0aWxzLTIuMTkuMS9jb25maWd1cmUKKy0tLSBiaW51dGlscy0yLjE5LjEub3JpZy9jb25maWd1cmUJMjAwOC0wOS0wNCAwNDoxODoxNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBiaW51dGlscy0yLjE5LjEvY29uZmlndXJlCTIwMDktMDMtMDggMTE6NTc6MDAuMDAwMDAwMDAwICswMTAwCitAQCAtNTYwMSw2ICs1NjAxLDcgQEAKKyAgICotKi1taW5ndyogfCAqLSotY3lnd2luICkgUlBBVEhfRU5WVkFSPVBBVEggOzsKKyAgICopIFJQQVRIX0VOVlZBUj1MRF9MSUJSQVJZX1BBVEggOzsKKyBlc2FjCisrUlBBVEhfRU5WVkFSPSJjYW50X3RvdWNoX3RoaXNfbmFoX25haF9uYWgiCisgCisgIyBPbiBzeXN0ZW1zIHdoZXJlIHRoZSBkeW5hbWljIGxpYnJhcnkgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgUEFUSCwKKyBpZiB0ZXN0ICIkUlBBVEhfRU5WVkFSIiA9IFBBVEg7IHRoZW4KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE5LjFhLzEyMC1zaC10YXJnZXRzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTkuMWEvMTIwLXNoLXRhcmdldHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQxZWNiZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE5LjFhLzEyMC1zaC10YXJnZXRzLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uL2Nyb3NzdG9vbC1ORy9jdC1uZy50cnVuay9wYXRjaGVzL2JpbnV0aWxzLzIuMTkvMTIwLXNoLXRhcmdldHMucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIEdlbnRvbzoKK2dlbnRvby9zcmMvcGF0Y2hzZXRzL2JpbnV0aWxzLzIuMTkvMTJfYWxsX3NoLXRhcmdldHMucGF0Y2gKKworcjEwMjMxIHwgbGV0aGFsIHwgMjAwNS0wNS0wMiAwOTo1ODowMCAtMDQwMCAoTW9uLCAwMiBNYXkgMjAwNSkgfCAxMyBsaW5lcworCitMaWtld2lzZSwgYmludXRpbHMgaGFzIG5vIGlkZWEgYWJvdXQgYW55IG9mIHRoZXNlIG5ldyB0YXJnZXRzIGVpdGhlciwgc28gd2UKK2ZpeCB0aGF0IHVwIHRvby4uIG5vdyB3ZSdyZSBhYmxlIHRvIGFjdHVhbGx5IGJ1aWxkIGEgcmVhbCB0b29sY2hhaW4gZm9yCitzaDJhX25vZnB1LSBhbmQgb3RoZXIgbW9yZSBpbmVwdGx5IG5hbWVkIHRvb2xjaGFpbnMgKGFuZCB5ZXMsIHRoZXJlIGFyZSBtb3JlCitpbmVwdCB0YXJnZXRzIHRoYW4gdGhhdCBvbmUsIHJlYWxseS4gR28gbG9vaywgSSBwcm9taXNlKS4KKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGJpbnV0aWxzLTIuMTkuMS5vcmlnL2NvbmZpZ3VyZSBiaW51dGlscy0yLjE5LjEvY29uZmlndXJlCistLS0gYmludXRpbHMtMi4xOS4xLm9yaWcvY29uZmlndXJlCTIwMDktMDMtMDggMTE6NTc6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmludXRpbHMtMi4xOS4xL2NvbmZpZ3VyZQkyMDA5LTAzLTA4IDExOjU3OjAwLjAwMDAwMDAwMCArMDEwMAorQEAgLTIyODEsNyArMjI4MSw3IEBACisgICBhbTMzXzIuMC0qLWxpbnV4KikKKyAgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzICR7bGliZ2NqfSB0YXJnZXQtbmV3bGliIHRhcmdldC1saWJnbG9zcyIKKyAgICAgOzsKKy0gIHNoLSotbGludXgqKQorKyAgc2gqLSotbGludXgqKQorICAgICBub2NvbmZpZ2RpcnM9IiRub2NvbmZpZ2RpcnMgJHtsaWJnY2p9IHRhcmdldC1uZXdsaWIgdGFyZ2V0LWxpYmdsb3NzIgorICAgICA7OworICAgc2gqLSotcGV8bWlwcyotKi1wZXwqYXJtLXdpbmNlLXBlKQorQEAgLTI2MDYsNyArMjYwNiw3IEBACisgICByb21wLSotKikKKyAgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzIGJmZCBiaW51dGlscyBsZCBnYXMgb3Bjb2RlcyB0YXJnZXQtbGliZ2xvc3MgJHtsaWJnY2p9IgorICAgICA7OworLSAgc2gtKi0qIHwgc2g2NC0qLSopCisrICBzaCotKi0qIHwgc2g2NC0qLSopCisgICAgIGNhc2UgIiR7aG9zdH0iIGluCisgICAgICAgaVszNDU2Nzg5XTg2LSotdnN0YSkgOzsgIyBkb24ndCBhZGQgZ3Byb2YgYmFjayBpbgorICAgICAgIGlbMzQ1Njc4OV04Ni0qLWdvMzIqKSA7OyAjIGRvbid0IGFkZCBncHJvZiBiYWNrIGluCitkaWZmIC1kdXJOIGJpbnV0aWxzLTIuMTkuMS5vcmlnL2NvbmZpZ3VyZS5hYyBiaW51dGlscy0yLjE5LjEvY29uZmlndXJlLmFjCistLS0gYmludXRpbHMtMi4xOS4xLm9yaWcvY29uZmlndXJlLmFjCTIwMDktMDItMDIgMTI6NTQ6NDkuMDAwMDAwMDAwICswMTAwCisrKysgYmludXRpbHMtMi4xOS4xL2NvbmZpZ3VyZS5hYwkyMDA5LTAzLTA4IDExOjU3OjAwLjAwMDAwMDAwMCArMDEwMAorQEAgLTUzMCw3ICs1MzAsNyBAQAorICAgYW0zM18yLjAtKi1saW51eCopCisgICAgIG5vY29uZmlnZGlycz0iJG5vY29uZmlnZGlycyAke2xpYmdjan0gdGFyZ2V0LW5ld2xpYiB0YXJnZXQtbGliZ2xvc3MiCisgICAgIDs7CistICBzaC0qLWxpbnV4KikKKysgIHNoKi0qLWxpbnV4KikKKyAgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzICR7bGliZ2NqfSB0YXJnZXQtbmV3bGliIHRhcmdldC1saWJnbG9zcyIKKyAgICAgOzsgICAgCisgICBzaCotKi1wZXxtaXBzKi0qLXBlfCphcm0td2luY2UtcGUpCitAQCAtODU1LDcgKzg1NSw3IEBACisgICByb21wLSotKikKKyAgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzIGJmZCBiaW51dGlscyBsZCBnYXMgb3Bjb2RlcyB0YXJnZXQtbGliZ2xvc3MgJHtsaWJnY2p9IgorICAgICA7OworLSAgc2gtKi0qIHwgc2g2NC0qLSopCisrICBzaCotKi0qIHwgc2g2NC0qLSopCisgICAgIGNhc2UgIiR7aG9zdH0iIGluCisgICAgICAgaVtbMzQ1Njc4OV1dODYtKi12c3RhKSA7OyAjIGRvbid0IGFkZCBncHJvZiBiYWNrIGluCisgICAgICAgaVtbMzQ1Njc4OV1dODYtKi1nbzMyKikgOzsgIyBkb24ndCBhZGQgZ3Byb2YgYmFjayBpbgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTkuMWEvMTMwLWNoZWNrX2xkcnVucGF0aF9sZW5ndGgucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xOS4xYS8xMzAtY2hlY2tfbGRydW5wYXRoX2xlbmd0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTVlNzkyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTkuMWEvMTMwLWNoZWNrX2xkcnVucGF0aF9sZW5ndGgucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vY3Jvc3N0b29sLU5HL2N0LW5nLnRydW5rL3BhdGNoZXMvYmludXRpbHMvMi4xOS8xMzAtY2hlY2tfbGRydW5wYXRoX2xlbmd0aC5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gR2VudG9vOgorZ2VudG9vL3NyYy9wYXRjaHNldHMvYmludXRpbHMvMi4xOS80Ml9hbGxfMDEyX2NoZWNrX2xkcnVucGF0aF9sZW5ndGgucGF0Y2gKKworT3JpZ2luYWx5IGZyb20gRGViaWFuOgorIyMgMDEyX2NoZWNrX2xkcnVucGF0aF9sZW5ndGguZHBhdGNoIGJ5IENocmlzIENoaW1lbGlzIDxjaHJpc0BkZWJpYW4ub3JnPgorIyMKKyMjIEFsbCBsaW5lcyBiZWdpbm5pbmcgd2l0aCBgIyMgRFA6JyBhcmUgYSBkZXNjcmlwdGlvbiBvZiB0aGUgcGF0Y2guCisjIyBEUDogT25seSBnZW5lcmF0ZSBhbiBSUEFUSCBlbnRyeSBpZiBMRF9SVU5fUEFUSCBpcyBub3QgZW1wdHksIGZvcgorIyMgRFA6IGNhc2VzIHdoZXJlIC1ycGF0aCBpc24ndCBzcGVjaWZpZWQuICgjMTUxMDI0KQorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gYmludXRpbHMtMi4xOS4xLm9yaWcvbGQvZW11bHRlbXBsL2VsZjMyLmVtIGJpbnV0aWxzLTIuMTkuMS9sZC9lbXVsdGVtcGwvZWxmMzIuZW0KKy0tLSBiaW51dGlscy0yLjE5LjEub3JpZy9sZC9lbXVsdGVtcGwvZWxmMzIuZW0JMjAwOC0wOS0wNyAwNjowMjozMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBiaW51dGlscy0yLjE5LjEvbGQvZW11bHRlbXBsL2VsZjMyLmVtCTIwMDktMDMtMDggMTE6NTc6MDEuMDAwMDAwMDAwICswMTAwCitAQCAtMTIxOSw2ICsxMjE5LDggQEAKKyAJICAgICAgJiYgY29tbWFuZF9saW5lLnJwYXRoID09IE5VTEwpCisgCSAgICB7CisgCSAgICAgIGxpYl9wYXRoID0gKGNvbnN0IGNoYXIgKikgZ2V0ZW52ICgiTERfUlVOX1BBVEgiKTsKKysJICAgICAgaWYgKChsaWJfcGF0aCkgJiYgKHN0cmxlbiAobGliX3BhdGgpID09IDApKQorKwkJICBsaWJfcGF0aCA9IE5VTEw7CisgCSAgICAgIGlmIChnbGQke0VNVUxBVElPTl9OQU1FfV9zZWFyY2hfbmVlZGVkIChsaWJfcGF0aCwgJm4sCisgCQkJCQkJICAgICAgZm9yY2UpKQorIAkJYnJlYWs7CitAQCAtMTQwNCw2ICsxNDA2LDggQEAKKyAgIHJwYXRoID0gY29tbWFuZF9saW5lLnJwYXRoOworICAgaWYgKHJwYXRoID09IE5VTEwpCisgICAgIHJwYXRoID0gKGNvbnN0IGNoYXIgKikgZ2V0ZW52ICgiTERfUlVOX1BBVEgiKTsKKysgIGlmICgocnBhdGgpICYmIChzdHJsZW4gKHJwYXRoKSA9PSAwKSkKKysgICAgICBycGF0aCA9IE5VTEw7CisgICBpZiAoISAoYmZkX2VsZl9zaXplX2R5bmFtaWNfc2VjdGlvbnMKKyAJIChsaW5rX2luZm8ub3V0cHV0X2JmZCwgY29tbWFuZF9saW5lLnNvbmFtZSwgcnBhdGgsCisgCSAgY29tbWFuZF9saW5lLmZpbHRlcl9zaGxpYiwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE5LjFhLzE0MC1wdC1wYXgtZmxhZ3MtMjAwODExMDEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xOS4xYS8xNDAtcHQtcGF4LWZsYWdzLTIwMDgxMTAxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZWFjNjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xOS4xYS8xNDAtcHQtcGF4LWZsYWdzLTIwMDgxMTAxLnBhdGNoCkBAIC0wLDAgKzEsMjU0IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi9jcm9zc3Rvb2wtTkcvY3QtbmcudHJ1bmsvcGF0Y2hlcy9iaW51dGlscy8yLjE5LzE0MC1wdC1wYXgtZmxhZ3MtMjAwODExMDEucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIEdlbnRvbzoKK2dlbnRvby9zcmMvcGF0Y2hzZXRzL2JpbnV0aWxzLzIuMTkvNjNfYWxsX2JpbnV0aWxzLTIuMTktcHQtcGF4LWZsYWdzLTIwMDgxMTAxLnBhdGNoCisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBiaW51dGlscy0yLjE5LjEub3JpZy9iZmQvZWxmLWJmZC5oIGJpbnV0aWxzLTIuMTkuMS9iZmQvZWxmLWJmZC5oCistLS0gYmludXRpbHMtMi4xOS4xLm9yaWcvYmZkL2VsZi1iZmQuaAkyMDA4LTA4LTIxIDAxOjI4OjU4LjAwMDAwMDAwMCArMDIwMAorKysrIGJpbnV0aWxzLTIuMTkuMS9iZmQvZWxmLWJmZC5oCTIwMDktMDMtMDggMTE6NTc6MDIuMDAwMDAwMDAwICswMTAwCitAQCAtMTUyNiw2ICsxNTI2LDkgQEAKKyAgIC8qIFNlZ21lbnQgZmxhZ3MgZm9yIHRoZSBQVF9HTlVfU1RBQ0sgc2VnbWVudC4gICovCisgICB1bnNpZ25lZCBpbnQgc3RhY2tfZmxhZ3M7CisgCisrICAvKiBTZWdtZW50IGZsYWdzIGZvciB0aGUgUFRfUEFYX0ZMQUdTIHNlZ21lbnQuICAqLworKyAgdW5zaWduZWQgaW50IHBheF9mbGFnczsKKysKKyAgIC8qIFN5bWJvbCB2ZXJzaW9uIGRlZmluaXRpb25zIGluIGV4dGVybmFsIG9iamVjdHMuICAqLworICAgRWxmX0ludGVybmFsX1ZlcmRlZiAqdmVyZGVmOworIAorZGlmZiAtZHVyTiBiaW51dGlscy0yLjE5LjEub3JpZy9iZmQvZWxmLmMgYmludXRpbHMtMi4xOS4xL2JmZC9lbGYuYworLS0tIGJpbnV0aWxzLTIuMTkuMS5vcmlnL2JmZC9lbGYuYwkyMDA4LTEyLTIzIDE0OjU0OjQ4LjAwMDAwMDAwMCArMDEwMAorKysrIGJpbnV0aWxzLTIuMTkuMS9iZmQvZWxmLmMJMjAwOS0wMy0wOCAxMTo1NzowMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMTM2LDYgKzExMzYsNyBAQAorICAgICBjYXNlIFBUX0dOVV9FSF9GUkFNRTogcHQgPSAiRUhfRlJBTUUiOyBicmVhazsKKyAgICAgY2FzZSBQVF9HTlVfU1RBQ0s6IHB0ID0gIlNUQUNLIjsgYnJlYWs7CisgICAgIGNhc2UgUFRfR05VX1JFTFJPOiBwdCA9ICJSRUxSTyI7IGJyZWFrOworKyAgICBjYXNlIFBUX1BBWF9GTEFHUzogcHQgPSAiUEFYX0ZMQUdTIjsgYnJlYWs7CisgICAgIGRlZmF1bHQ6IHB0ID0gTlVMTDsgYnJlYWs7CisgICAgIH0KKyAgIHJldHVybiBwdDsKK0BAIC0yNDQyLDYgKzI0NDMsOSBAQAorICAgICBjYXNlIFBUX0dOVV9SRUxSTzoKKyAgICAgICByZXR1cm4gX2JmZF9lbGZfbWFrZV9zZWN0aW9uX2Zyb21fcGhkciAoYWJmZCwgaGRyLCBpbmRleCwgInJlbHJvIik7CisgCisrICAgIGNhc2UgUFRfUEFYX0ZMQUdTOgorKyAgICAgIHJldHVybiBfYmZkX2VsZl9tYWtlX3NlY3Rpb25fZnJvbV9waGRyIChhYmZkLCBoZHIsIGluZGV4LCAicGF4X2ZsYWdzIik7CisrCisgICAgIGRlZmF1bHQ6CisgICAgICAgLyogQ2hlY2sgZm9yIGFueSBwcm9jZXNzb3Itc3BlY2lmaWMgcHJvZ3JhbSBzZWdtZW50IHR5cGVzLiAgKi8KKyAgICAgICBiZWQgPSBnZXRfZWxmX2JhY2tlbmRfZGF0YSAoYWJmZCk7CitAQCAtMzQwNCw2ICszNDA4LDExIEBACisgICAgICAgKytzZWdzOworICAgICB9CisgCisrICAgIHsKKysgICAgICAvKiBXZSBuZWVkIGEgUFRfUEFYX0ZMQUdTIHNlZ21lbnQuICAqLworKyAgICAgICsrc2VnczsKKysgICAgfQorKworICAgZm9yIChzID0gYWJmZC0+c2VjdGlvbnM7IHMgIT0gTlVMTDsgcyA9IHMtPm5leHQpCisgICAgIHsKKyAgICAgICBpZiAoKHMtPmZsYWdzICYgU0VDX0xPQUQpICE9IDAKK0BAIC0zOTgzLDYgKzM5OTIsMjAgQEAKKyAJICAgIH0KKyAJfQorIAorKyAgICB7CisrICAgICAgYW10ID0gc2l6ZW9mIChzdHJ1Y3QgZWxmX3NlZ21lbnRfbWFwKTsKKysgICAgICBtID0gYmZkX3phbGxvYyAoYWJmZCwgYW10KTsKKysgICAgICBpZiAobSA9PSBOVUxMKQorKwlnb3RvIGVycm9yX3JldHVybjsKKysgICAgICBtLT5uZXh0ID0gTlVMTDsKKysgICAgICBtLT5wX3R5cGUgPSBQVF9QQVhfRkxBR1M7CisrICAgICAgbS0+cF9mbGFncyA9IGVsZl90ZGF0YSAoYWJmZCktPnBheF9mbGFnczsKKysgICAgICBtLT5wX2ZsYWdzX3ZhbGlkID0gMTsKKysKKysgICAgICAqcG0gPSBtOworKyAgICAgIHBtID0gJm0tPm5leHQ7CisrICAgIH0KKysKKyAgICAgICBmcmVlIChzZWN0aW9ucyk7CisgICAgICAgZWxmX3RkYXRhIChhYmZkKS0+c2VnbWVudF9tYXAgPSBtZmlyc3Q7CisgICAgIH0KK0BAIC01MTYwLDcgKzUxODMsOCBAQAorICAgICAgICA2LiBQVF9UTFMgc2VnbWVudCBpbmNsdWRlcyBvbmx5IFNIRl9UTFMgc2VjdGlvbnMuCisgICAgICAgIDcuIFNIRl9UTFMgc2VjdGlvbnMgYXJlIG9ubHkgaW4gUFRfVExTIG9yIFBUX0xPQUQgc2VnbWVudHMuCisgICAgICAgIDguIFBUX0RZTkFNSUMgc2hvdWxkIG5vdCBjb250YWluIGVtcHR5IHNlY3Rpb25zIGF0IHRoZSBiZWdpbm5pbmcKKy0JICAod2l0aCB0aGUgcG9zc2libGUgZXhjZXB0aW9uIG9mIC5keW5hbWljKS4gICovCisrCSAgKHdpdGggdGhlIHBvc3NpYmxlIGV4Y2VwdGlvbiBvZiAuZHluYW1pYykuCisrICAgICAgIDkuIFBUX1BBWF9GTEFHUyBzZWdtZW50cyBkb2VzIG5vdCBpbmNsdWRlIGFueSBzZWN0aW9ucy4gICovCisgI2RlZmluZSBJU19TRUNUSU9OX0lOX0lOUFVUX1NFR01FTlQoc2VjdGlvbiwgc2VnbWVudCwgYmVkKQkJXAorICAgKCgoKHNlZ21lbnQtPnBfcGFkZHIJCQkJCQkJXAorICAgICAgID8gSVNfQ09OVEFJTkVEX0JZX0xNQSAoc2VjdGlvbiwgc2VnbWVudCwgc2VnbWVudC0+cF9wYWRkcikJXAorQEAgLTUxNjgsNiArNTE5Miw3IEBACisgICAgICAmJiAoc2VjdGlvbi0+ZmxhZ3MgJiBTRUNfQUxMT0MpICE9IDApCQkJCVwKKyAgICAgfHwgSVNfTk9URSAoc2VnbWVudCwgc2VjdGlvbikpCQkJCQlcCisgICAgJiYgc2VnbWVudC0+cF90eXBlICE9IFBUX0dOVV9TVEFDSwkJCQkJXAorKyAgICYmIHNlZ21lbnQtPnBfdHlwZSAhPSBQVF9QQVhfRkxBR1MJCQkJCVwKKyAgICAmJiAoc2VnbWVudC0+cF90eXBlICE9IFBUX1RMUwkJCQkJXAorICAgICAgICB8fCAoc2VjdGlvbi0+ZmxhZ3MgJiBTRUNfVEhSRUFEX0xPQ0FMKSkJCQkJXAorICAgICYmIChzZWdtZW50LT5wX3R5cGUgPT0gUFRfTE9BRAkJCQkJXAorZGlmZiAtZHVyTiBiaW51dGlscy0yLjE5LjEub3JpZy9iZmQvZWxmbGluay5jIGJpbnV0aWxzLTIuMTkuMS9iZmQvZWxmbGluay5jCistLS0gYmludXRpbHMtMi4xOS4xLm9yaWcvYmZkL2VsZmxpbmsuYwkyMDA4LTA4LTIyIDEwOjMyOjM5LjAwMDAwMDAwMCArMDIwMAorKysrIGJpbnV0aWxzLTIuMTkuMS9iZmQvZWxmbGluay5jCTIwMDktMDMtMDggMTE6NTc6MDIuMDAwMDAwMDAwICswMTAwCitAQCAtNTM5NywxNiArNTM5NywzMCBAQAorICAgICByZXR1cm4gVFJVRTsKKyAKKyAgIGJlZCA9IGdldF9lbGZfYmFja2VuZF9kYXRhIChvdXRwdXRfYmZkKTsKKysgIGVsZl90ZGF0YSAob3V0cHV0X2JmZCktPnBheF9mbGFncyA9IFBGX05PUkFOREVYRUM7CisrCisrICBpZiAoaW5mby0+ZXhlY2hlYXApCisrICAgIGVsZl90ZGF0YSAob3V0cHV0X2JmZCktPnBheF9mbGFncyB8PSBQRl9OT01QUk9URUNUOworKyAgZWxzZSBpZiAoaW5mby0+bm9leGVjaGVhcCkKKysgICAgZWxmX3RkYXRhIChvdXRwdXRfYmZkKS0+cGF4X2ZsYWdzIHw9IFBGX01QUk9URUNUOworKworICAgaWYgKGluZm8tPmV4ZWNzdGFjaykKKy0gICAgZWxmX3RkYXRhIChvdXRwdXRfYmZkKS0+c3RhY2tfZmxhZ3MgPSBQRl9SIHwgUEZfVyB8IFBGX1g7CisrICAgIHsKKysgICAgICBlbGZfdGRhdGEgKG91dHB1dF9iZmQpLT5zdGFja19mbGFncyA9IFBGX1IgfCBQRl9XIHwgUEZfWDsKKysgICAgICBlbGZfdGRhdGEgKG91dHB1dF9iZmQpLT5wYXhfZmxhZ3MgfD0gUEZfRU1VVFJBTVA7CisrICAgIH0KKyAgIGVsc2UgaWYgKGluZm8tPm5vZXhlY3N0YWNrKQorLSAgICBlbGZfdGRhdGEgKG91dHB1dF9iZmQpLT5zdGFja19mbGFncyA9IFBGX1IgfCBQRl9XOworKyAgICB7CisrICAgICAgZWxmX3RkYXRhIChvdXRwdXRfYmZkKS0+c3RhY2tfZmxhZ3MgPSBQRl9SIHwgUEZfVzsKKysgICAgICBlbGZfdGRhdGEgKG91dHB1dF9iZmQpLT5wYXhfZmxhZ3MgfD0gUEZfTk9FTVVUUkFNUDsKKysgICAgfQorICAgZWxzZQorICAgICB7CisgICAgICAgYmZkICppbnB1dG9iajsKKyAgICAgICBhc2VjdGlvbiAqbm90ZXNlYyA9IE5VTEw7CisgICAgICAgaW50IGV4ZWMgPSAwOworIAorKyAgICAgIGVsZl90ZGF0YSAob3V0cHV0X2JmZCktPnBheF9mbGFncyB8PSBQRl9OT0VNVVRSQU1QOworICAgICAgIGZvciAoaW5wdXRvYmogPSBpbmZvLT5pbnB1dF9iZmRzOworIAkgICBpbnB1dG9iajsKKyAJICAgaW5wdXRvYmogPSBpbnB1dG9iai0+bGlua19uZXh0KQorQEAgLTU0MTksNyArNTQzMywxMSBAQAorIAkgIGlmIChzKQorIAkgICAgeworIAkgICAgICBpZiAocy0+ZmxhZ3MgJiBTRUNfQ09ERSkKKy0JCWV4ZWMgPSBQRl9YOworKwkJeworKwkJICBlbGZfdGRhdGEgKG91dHB1dF9iZmQpLT5wYXhfZmxhZ3MgJj0gflBGX05PRU1VVFJBTVA7CisrCQkgIGVsZl90ZGF0YSAob3V0cHV0X2JmZCktPnBheF9mbGFncyB8PSBQRl9FTVVUUkFNUDsKKysJCSAgZXhlYyA9IFBGX1g7CisrCQl9CisgCSAgICAgIG5vdGVzZWMgPSBzOworIAkgICAgfQorIAkgIGVsc2UgaWYgKGJlZC0+ZGVmYXVsdF9leGVjc3RhY2spCitkaWZmIC1kdXJOIGJpbnV0aWxzLTIuMTkuMS5vcmlnL2JpbnV0aWxzL3JlYWRlbGYuYyBiaW51dGlscy0yLjE5LjEvYmludXRpbHMvcmVhZGVsZi5jCistLS0gYmludXRpbHMtMi4xOS4xLm9yaWcvYmludXRpbHMvcmVhZGVsZi5jCTIwMDgtMDktMTcgMTE6MDA6NDQuMDAwMDAwMDAwICswMjAwCisrKysgYmludXRpbHMtMi4xOS4xL2JpbnV0aWxzL3JlYWRlbGYuYwkyMDA5LTAzLTA4IDExOjU3OjAyLjAwMDAwMDAwMCArMDEwMAorQEAgLTI1MDUsNiArMjUwNSw3IEBACisgCQkJcmV0dXJuICJHTlVfRUhfRlJBTUUiOworICAgICBjYXNlIFBUX0dOVV9TVEFDSzoJcmV0dXJuICJHTlVfU1RBQ0siOworICAgICBjYXNlIFBUX0dOVV9SRUxSTzogIHJldHVybiAiR05VX1JFTFJPIjsKKysgICAgY2FzZSBQVF9QQVhfRkxBR1M6ICByZXR1cm4gIlBBWF9GTEFHUyI7CisgCisgICAgIGRlZmF1bHQ6CisgICAgICAgaWYgKChwX3R5cGUgPj0gUFRfTE9QUk9DKSAmJiAocF90eXBlIDw9IFBUX0hJUFJPQykpCitkaWZmIC1kdXJOIGJpbnV0aWxzLTIuMTkuMS5vcmlnL2luY2x1ZGUvYmZkbGluay5oIGJpbnV0aWxzLTIuMTkuMS9pbmNsdWRlL2JmZGxpbmsuaAorLS0tIGJpbnV0aWxzLTIuMTkuMS5vcmlnL2luY2x1ZGUvYmZkbGluay5oCTIwMDgtMDgtMTcgMDU6MTI6NTAuMDAwMDAwMDAwICswMjAwCisrKysgYmludXRpbHMtMi4xOS4xL2luY2x1ZGUvYmZkbGluay5oCTIwMDktMDMtMDggMTE6NTc6MDIuMDAwMDAwMDAwICswMTAwCitAQCAtMzE5LDYgKzMxOSwxNCBAQAorICAgLyogVFJVRSBpZiBQVF9HTlVfUkVMUk8gc2VnbWVudCBzaG91bGQgYmUgY3JlYXRlZC4gICovCisgICB1bnNpZ25lZCBpbnQgcmVscm86IDE7CisgCisrICAvKiBUUlVFIGlmIFBUX1BBWF9GTEFHUyBzZWdtZW50IHNob3VsZCBiZSBjcmVhdGVkIHdpdGggUEZfTk9NUFJPVEVDVAorKyAgICAgZmxhZ3MuICAqLworKyAgdW5zaWduZWQgaW50IGV4ZWNoZWFwOiAxOworKworKyAgLyogVFJVRSBpZiBQVF9QQVhfRkxBR1Mgc2VnbWVudCBzaG91bGQgYmUgY3JlYXRlZCB3aXRoIFBGX01QUk9URUNUCisrICAgICBmbGFncy4gICovCisrICB1bnNpZ25lZCBpbnQgbm9leGVjaGVhcDogMTsKKysKKyAgIC8qIFRSVUUgaWYgd2Ugc2hvdWxkIHdhcm4gd2hlbiBhZGRpbmcgYSBEVF9URVhUUkVMIHRvIGEgc2hhcmVkIG9iamVjdC4gICovCisgICB1bnNpZ25lZCBpbnQgd2Fybl9zaGFyZWRfdGV4dHJlbDogMTsKKyAKK2RpZmYgLWR1ck4gYmludXRpbHMtMi4xOS4xLm9yaWcvaW5jbHVkZS9lbGYvY29tbW9uLmggYmludXRpbHMtMi4xOS4xL2luY2x1ZGUvZWxmL2NvbW1vbi5oCistLS0gYmludXRpbHMtMi4xOS4xLm9yaWcvaW5jbHVkZS9lbGYvY29tbW9uLmgJMjAwOC0wOC0wNCAwMToyMDo0Mi4wMDAwMDAwMDAgKzAyMDAKKysrKyBiaW51dGlscy0yLjE5LjEvaW5jbHVkZS9lbGYvY29tbW9uLmgJMjAwOS0wMy0wOCAxMTo1NzowMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zNjAsNiArMzYwLDcgQEAKKyAjZGVmaW5lIFBUX1NVTldfRUhfRlJBTUUgUFRfR05VX0VIX0ZSQU1FICAgICAgLyogU29sYXJpcyB1c2VzIHRoZSBzYW1lIHZhbHVlICovCisgI2RlZmluZSBQVF9HTlVfU1RBQ0sJKFBUX0xPT1MgKyAweDQ3NGU1NTEpIC8qIFN0YWNrIGZsYWdzICovCisgI2RlZmluZSBQVF9HTlVfUkVMUk8JKFBUX0xPT1MgKyAweDQ3NGU1NTIpIC8qIFJlYWQtb25seSBhZnRlciByZWxvY2F0aW9uICovCisrI2RlZmluZSBQVF9QQVhfRkxBR1MJKFBUX0xPT1MgKyAweDUwNDE1ODApIC8qIFBhWCBmbGFncyAqLworIAorIC8qIFByb2dyYW0gc2VnbWVudCBwZXJtaXNzaW9ucywgaW4gcHJvZ3JhbSBoZWFkZXIgcF9mbGFncyBmaWVsZC4gICovCisgCitAQCAtMzcwLDYgKzM3MSwyMSBAQAorICNkZWZpbmUgUEZfTUFTS09TCTB4MEZGMDAwMDAJLyogTmV3IHZhbHVlLCBPY3QgNCwgMTk5OSBEcmFmdCAqLworICNkZWZpbmUgUEZfTUFTS1BST0MJMHhGMDAwMDAwMAkvKiBQcm9jZXNzb3Itc3BlY2lmaWMgcmVzZXJ2ZWQgYml0cyAqLworIAorKy8qIEZsYWdzIHRvIGNvbnRyb2wgUGFYIGJlaGF2aW9yLiAgKi8KKysKKysjZGVmaW5lIFBGX1BBR0VFWEVDCSgxIDw8IDQpCS8qIEVuYWJsZSAgUEFHRUVYRUMgKi8KKysjZGVmaW5lIFBGX05PUEFHRUVYRUMJKDEgPDwgNSkJLyogRGlzYWJsZSBQQUdFRVhFQyAqLworKyNkZWZpbmUgUEZfU0VHTUVYRUMJKDEgPDwgNikJLyogRW5hYmxlICBTRUdNRVhFQyAqLworKyNkZWZpbmUgUEZfTk9TRUdNRVhFQwkoMSA8PCA3KQkvKiBEaXNhYmxlIFNFR01FWEVDICovCisrI2RlZmluZSBQRl9NUFJPVEVDVAkoMSA8PCA4KQkvKiBFbmFibGUgIE1QUk9URUNUICovCisrI2RlZmluZSBQRl9OT01QUk9URUNUCSgxIDw8IDkpCS8qIERpc2FibGUgTVBST1RFQ1QgKi8KKysjZGVmaW5lIFBGX1JBTkRFWEVDCSgxIDw8IDEwKQkvKiBFbmFibGUgIFJBTkRFWEVDICovCisrI2RlZmluZSBQRl9OT1JBTkRFWEVDCSgxIDw8IDExKQkvKiBEaXNhYmxlIFJBTkRFWEVDICovCisrI2RlZmluZSBQRl9FTVVUUkFNUAkoMSA8PCAxMikJLyogRW5hYmxlICBFTVVUUkFNUCAqLworKyNkZWZpbmUgUEZfTk9FTVVUUkFNUAkoMSA8PCAxMykJLyogRGlzYWJsZSBFTVVUUkFNUCAqLworKyNkZWZpbmUgUEZfUkFORE1NQVAJKDEgPDwgMTQpCS8qIEVuYWJsZSAgUkFORE1NQVAgKi8KKysjZGVmaW5lIFBGX05PUkFORE1NQVAJKDEgPDwgMTUpCS8qIERpc2FibGUgUkFORE1NQVAgKi8KKysKKyAvKiBWYWx1ZXMgZm9yIHNlY3Rpb24gaGVhZGVyLCBzaF90eXBlIGZpZWxkLiAgKi8KKyAKKyAjZGVmaW5lIFNIVF9OVUxMCTAJCS8qIFNlY3Rpb24gaGVhZGVyIHRhYmxlIGVudHJ5IHVudXNlZCAqLworZGlmZiAtZHVyTiBiaW51dGlscy0yLjE5LjEub3JpZy9sZC9lbXVsdGVtcGwvZWxmMzIuZW0gYmludXRpbHMtMi4xOS4xL2xkL2VtdWx0ZW1wbC9lbGYzMi5lbQorLS0tIGJpbnV0aWxzLTIuMTkuMS5vcmlnL2xkL2VtdWx0ZW1wbC9lbGYzMi5lbQkyMDA5LTAzLTA4IDExOjU3OjAxLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbnV0aWxzLTIuMTkuMS9sZC9lbXVsdGVtcGwvZWxmMzIuZW0JMjAwOS0wMy0wOCAxMTo1NzowMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMTQ2LDYgKzIxNDYsMTYgQEAKKyAJICBsaW5rX2luZm8ubm9leGVjc3RhY2sgPSBUUlVFOworIAkgIGxpbmtfaW5mby5leGVjc3RhY2sgPSBGQUxTRTsKKyAJfQorKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAob3B0YXJnLCAiZXhlY2hlYXAiKSA9PSAwKQorKwl7CisrCSAgbGlua19pbmZvLmV4ZWNoZWFwID0gVFJVRTsKKysJICBsaW5rX2luZm8ubm9leGVjaGVhcCA9IEZBTFNFOworKwl9CisrICAgICAgZWxzZSBpZiAoc3RyY21wIChvcHRhcmcsICJub2V4ZWNoZWFwIikgPT0gMCkKKysJeworKwkgIGxpbmtfaW5mby5ub2V4ZWNoZWFwID0gVFJVRTsKKysJICBsaW5rX2luZm8uZXhlY2hlYXAgPSBGQUxTRTsKKysJfQorIEVPRgorIAorICAgaWYgdGVzdCAtbiAiJENPTU1PTlBBR0VTSVpFIjsgdGhlbgorQEAgLTIyMjksNiArMjIzOSw4IEBACisgICBmcHJpbnRmIChmaWxlLCBfKCJcCisgICAteiBleGVjc3RhY2sgICAgICAgICAgICAgICAgTWFyayBleGVjdXRhYmxlIGFzIHJlcXVpcmluZyBleGVjdXRhYmxlIHN0YWNrXG4iKSk7CisgICBmcHJpbnRmIChmaWxlLCBfKCJcCisrICAteiBleGVjaGVhcFx0XHRNYXJrIGV4ZWN1dGFibGUgYXMgcmVxdWlyaW5nIGV4ZWN1dGFibGUgaGVhcFxuIikpOworKyAgZnByaW50ZiAoZmlsZSwgXygiXAorICAgLXogaW5pdGZpcnN0ICAgICAgICAgICAgICAgIE1hcmsgRFNPIHRvIGJlIGluaXRpYWxpemVkIGZpcnN0IGF0IHJ1bnRpbWVcbiIpKTsKKyAgIGZwcmludGYgKGZpbGUsIF8oIlwKKyAgIC16IGludGVycG9zZSAgICAgICAgICAgICAgICBNYXJrIG9iamVjdCB0byBpbnRlcnBvc2UgYWxsIERTT3MgYnV0IGV4ZWN1dGFibGVcbiIpKTsKK0BAIC0yMjUyLDYgKzIyNjQsOCBAQAorICAgLXogbm9kdW1wICAgICAgICAgICAgICAgICAgIE1hcmsgRFNPIG5vdCBhdmFpbGFibGUgdG8gZGxkdW1wXG4iKSk7CisgICBmcHJpbnRmIChmaWxlLCBfKCJcCisgICAteiBub2V4ZWNzdGFjayAgICAgICAgICAgICAgTWFyayBleGVjdXRhYmxlIGFzIG5vdCByZXF1aXJpbmcgZXhlY3V0YWJsZSBzdGFja1xuIikpOworKyAgZnByaW50ZiAoZmlsZSwgXygiXAorKyAgLXogbm9leGVjaGVhcFx0TWFyayBleGVjdXRhYmxlIGFzIG5vdCByZXF1aXJpbmcgZXhlY3V0YWJsZSBoZWFwXG4iKSk7CisgRU9GCisgCisgICBpZiB0ZXN0IC1uICIkQ09NTU9OUEFHRVNJWkUiOyB0aGVuCitkaWZmIC1kdXJOIGJpbnV0aWxzLTIuMTkuMS5vcmlnL2xkL2xkZ3JhbS55IGJpbnV0aWxzLTIuMTkuMS9sZC9sZGdyYW0ueQorLS0tIGJpbnV0aWxzLTIuMTkuMS5vcmlnL2xkL2xkZ3JhbS55CTIwMDgtMDctMDYgMTU6Mzg6MzYuMDAwMDAwMDAwICswMjAwCisrKysgYmludXRpbHMtMi4xOS4xL2xkL2xkZ3JhbS55CTIwMDktMDMtMDggMTE6NTc6MDIuMDAwMDAwMDAwICswMTAwCitAQCAtMTExMiw2ICsxMTEyLDggQEAKKyAJCQkgICAgJCQgPSBleHBfaW50b3AgKDB4NjQ3NGU1NTApOworIAkJCSAgZWxzZSBpZiAoc3RyY21wIChzLCAiUFRfR05VX1NUQUNLIikgPT0gMCkKKyAJCQkgICAgJCQgPSBleHBfaW50b3AgKDB4NjQ3NGU1NTEpOworKwkJCSAgZWxzZSBpZiAoc3RyY21wIChzLCAiUFRfUEFYX0ZMQUdTIikgPT0gMCkKKysJCQkgICAgJCQgPSBleHBfaW50b3AgKDB4NjUwNDE1ODApOworIAkJCSAgZWxzZQorIAkJCSAgICB7CisgCQkJICAgICAgZWluZm8gKF8oIlwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE5LjFhLzE1MC13YXJuLXRleHRyZWwucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xOS4xYS8xNTAtd2Fybi10ZXh0cmVsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYjc3YjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xOS4xYS8xNTAtd2Fybi10ZXh0cmVsLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uL2Nyb3NzdG9vbC1ORy9jdC1uZy50cnVuay9wYXRjaGVzL2JpbnV0aWxzLzIuMTkvMTUwLXdhcm4tdGV4dHJlbC5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gR2VudG9vOgorZ2VudG9vL3NyYy9wYXRjaHNldHMvYmludXRpbHMvMi4xOS82Nl9hbGxfYmludXRpbHMtMi4xOC41MC4wLjItd2Fybi10ZXh0cmVsLnBhdGNoCisKK3RleHRyZWxzIGFyZSBiYWQgZm9yIGZvcmNpbmcgY29weS1vbi13cml0ZSAodGhpcyBhZmZlY3RzIGV2ZXJ5b25lKSwKK2FuZCBmb3Igc2VjdXJpdHkvcnVudGltZSBjb2RlIGdlbmVyYXRpb24sIHRoaXMgYWZmZWN0cyBzZWN1cml0eSBwcGwuCitCdXQgaW4gZWl0aGVyIGNhc2UsIGl0IGRvZXNuJ3QgbWF0dGVyIHdobyBuZWVkcyB0ZXh0cmVscywgaXQncwordGhlIHZlcnkgZmFjdCB0aGF0IHRoZXkncmUgbmVlZGVkIGF0IGFsbC4KKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGJpbnV0aWxzLTIuMTkuMS5vcmlnL2JmZC9lbGZsaW5rLmMgYmludXRpbHMtMi4xOS4xL2JmZC9lbGZsaW5rLmMKKy0tLSBiaW51dGlscy0yLjE5LjEub3JpZy9iZmQvZWxmbGluay5jCTIwMDktMDMtMDggMTE6NTc6MDIuMDAwMDAwMDAwICswMTAwCisrKysgYmludXRpbHMtMi4xOS4xL2JmZC9lbGZsaW5rLmMJMjAwOS0wMy0wOCAxMTo1NzowMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMDgyMCwxNCArMTA4MjAsMTIgQEAKKyAJZ290byBlcnJvcl9yZXR1cm47CisgCisgICAgICAgLyogQ2hlY2sgZm9yIERUX1RFWFRSRUwgKGxhdGUsIGluIGNhc2UgdGhlIGJhY2tlbmQgcmVtb3ZlcyBpdCkuICAqLworLSAgICAgIGlmIChpbmZvLT53YXJuX3NoYXJlZF90ZXh0cmVsICYmIGluZm8tPnNoYXJlZCkKKysgICAgICBvID0gYmZkX2dldF9zZWN0aW9uX2J5X25hbWUgKGR5bm9iaiwgIi5keW5hbWljIik7CisrICAgICAgaWYgKGluZm8tPndhcm5fc2hhcmVkX3RleHRyZWwgJiYgbyAhPSBOVUxMKQorIAl7CisgCSAgYmZkX2J5dGUgKmR5bmNvbiwgKmR5bmNvbmVuZDsKKyAKKyAJICAvKiBGaXggdXAgLmR5bmFtaWMgZW50cmllcy4gICovCistCSAgbyA9IGJmZF9nZXRfc2VjdGlvbl9ieV9uYW1lIChkeW5vYmosICIuZHluYW1pYyIpOworLQkgIEJGRF9BU1NFUlQgKG8gIT0gTlVMTCk7CistCisgCSAgZHluY29uID0gby0+Y29udGVudHM7CisgCSAgZHluY29uZW5kID0gby0+Y29udGVudHMgKyBvLT5zaXplOworIAkgIGZvciAoOyBkeW5jb24gPCBkeW5jb25lbmQ7IGR5bmNvbiArPSBiZWQtPnMtPnNpemVvZl9keW4pCitAQCAtMTA4MzksNyArMTA4MzcsNyBAQAorIAkgICAgICBpZiAoZHluLmRfdGFnID09IERUX1RFWFRSRUwpCisgCQl7CisgCQkgaW5mby0+Y2FsbGJhY2tzLT5laW5mbworLQkJICAgIChfKCIlUDogd2FybmluZzogY3JlYXRpbmcgYSBEVF9URVhUUkVMIGluIGEgc2hhcmVkIG9iamVjdC5cbiIpKTsKKysJCSAgICAoXygiJVA6IHdhcm5pbmc6IGNyZWF0aW5nIGEgRFRfVEVYVFJFTCBpbiBvYmplY3QuXG4iKSk7CisgCQkgIGJyZWFrOworIAkJfQorIAkgICAgfQorZGlmZiAtZHVyTiBiaW51dGlscy0yLjE5LjEub3JpZy9sZC9sZG1haW4uYyBiaW51dGlscy0yLjE5LjEvbGQvbGRtYWluLmMKKy0tLSBiaW51dGlscy0yLjE5LjEub3JpZy9sZC9sZG1haW4uYwkyMDA4LTA4LTE3IDA1OjEyOjUwLjAwMDAwMDAwMCArMDIwMAorKysrIGJpbnV0aWxzLTIuMTkuMS9sZC9sZG1haW4uYwkyMDA5LTAzLTA4IDExOjU3OjAyLjAwMDAwMDAwMCArMDEwMAorQEAgLTI3NCw2ICsyNzQsNyBAQAorICAgbGlua19pbmZvLnJlbGF4X3Bhc3MgPSAxOworICAgbGlua19pbmZvLnBlaTM4Nl9hdXRvX2ltcG9ydCA9IC0xOworICAgbGlua19pbmZvLnNwYXJlX2R5bmFtaWNfdGFncyA9IDU7CisrICBsaW5rX2luZm8ud2Fybl9zaGFyZWRfdGV4dHJlbCA9IFRSVUU7CisgICBsaW5rX2luZm8ucGF0aF9zZXBhcmF0b3IgPSAnOic7CisgCisgICBsZGZpbGVfYWRkX2FyY2ggKCIiKTsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE5LjFhLzE2MC11c2UtbmV3LWxkLWR0YWdzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTkuMWEvMTYwLXVzZS1uZXctbGQtZHRhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzViN2JjNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE5LjFhLzE2MC11c2UtbmV3LWxkLWR0YWdzLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uL2Nyb3NzdG9vbC1ORy9jdC1uZy50cnVuay9wYXRjaGVzL2JpbnV0aWxzLzIuMTkvMTYwLXVzZS1uZXctbGQtZHRhZ3MucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIEdlbnRvbzoKK2dlbnRvby9zcmMvcGF0Y2hzZXRzL2JpbnV0aWxzLzIuMTkvNzZfYWxsX3VzZS1uZXctbGQtZHRhZ3MucGF0Y2gKKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGJpbnV0aWxzLTIuMTkuMS5vcmlnL2xkL2xkbWFpbi5jIGJpbnV0aWxzLTIuMTkuMS9sZC9sZG1haW4uYworLS0tIGJpbnV0aWxzLTIuMTkuMS5vcmlnL2xkL2xkbWFpbi5jCTIwMDktMDMtMDggMTE6NTc6MDMuMDAwMDAwMDAwICswMTAwCisrKysgYmludXRpbHMtMi4xOS4xL2xkL2xkbWFpbi5jCTIwMDktMDMtMDggMTE6NTc6MDMuMDAwMDAwMDAwICswMTAwCitAQCAtMjYyLDYgKzI2Miw3IEBACisgCisgICBsaW5rX2luZm8uYWxsb3dfdW5kZWZpbmVkX3ZlcnNpb24gPSBUUlVFOworICAgbGlua19pbmZvLmtlZXBfbWVtb3J5ID0gVFJVRTsKKysgIGxpbmtfaW5mby5uZXdfZHRhZ3MgPSBUUlVFOworICAgbGlua19pbmZvLmNvbWJyZWxvYyA9IFRSVUU7CisgICBsaW5rX2luZm8uc3RyaXBfZGlzY2FyZGVkID0gVFJVRTsKKyAgIGxpbmtfaW5mby5lbWl0X2hhc2ggPSBUUlVFOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTkuMWEvMTcwLXVzZS1yZWxyby5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE5LjFhLzE3MC11c2UtcmVscm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRlNDdhYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE5LjFhLzE3MC11c2UtcmVscm8ucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vY3Jvc3N0b29sLU5HL2N0LW5nLnRydW5rL3BhdGNoZXMvYmludXRpbHMvMi4xOS8xNzAtdXNlLXJlbHJvLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBHZW50b286CitnZW50b28vc3JjL3BhdGNoc2V0cy9iaW51dGlscy8yLjE5Lzc4X2FsbF91c2UtcmVscm8ucGF0Y2gKKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGJpbnV0aWxzLTIuMTkuMS5vcmlnL2xkL2xkbWFpbi5jIGJpbnV0aWxzLTIuMTkuMS9sZC9sZG1haW4uYworLS0tIGJpbnV0aWxzLTIuMTkuMS5vcmlnL2xkL2xkbWFpbi5jCTIwMDktMDMtMDggMTE6NTc6MDMuMDAwMDAwMDAwICswMTAwCisrKysgYmludXRpbHMtMi4xOS4xL2xkL2xkbWFpbi5jCTIwMDktMDMtMDggMTE6NTc6MDMuMDAwMDAwMDAwICswMTAwCitAQCAtMjY0LDYgKzI2NCw3IEBACisgICBsaW5rX2luZm8ua2VlcF9tZW1vcnkgPSBUUlVFOworICAgbGlua19pbmZvLm5ld19kdGFncyA9IFRSVUU7CisgICBsaW5rX2luZm8uY29tYnJlbG9jID0gVFJVRTsKKysgIGxpbmtfaW5mby5yZWxybyA9IFRSVUU7CisgICBsaW5rX2luZm8uc3RyaXBfZGlzY2FyZGVkID0gVFJVRTsKKyAgIGxpbmtfaW5mby5lbWl0X2hhc2ggPSBUUlVFOworICAgbGlua19pbmZvLmNhbGxiYWNrcyA9ICZsaW5rX2NhbGxiYWNrczsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE5LjFhLzE4MC1saWJpYmVydHktcGljLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTkuMWEvMTgwLWxpYmliZXJ0eS1waWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM2YTE1ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjE5LjFhLzE4MC1saWJpYmVydHktcGljLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uL2Nyb3NzdG9vbC1ORy9jdC1uZy50cnVuay9wYXRjaGVzL2JpbnV0aWxzLzIuMTkvMTgwLWxpYmliZXJ0eS1waWMucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIEdlbnRvbzoKK2dlbnRvby9zcmMvcGF0Y2hzZXRzL2JpbnV0aWxzLzIuMTkvOTFfYWxsX2xpYmliZXJ0eS1waWMucGF0Y2gKKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGJpbnV0aWxzLTIuMTkuMS5vcmlnL2xpYmliZXJ0eS9NYWtlZmlsZS5pbiBiaW51dGlscy0yLjE5LjEvbGliaWJlcnR5L01ha2VmaWxlLmluCistLS0gYmludXRpbHMtMi4xOS4xLm9yaWcvbGliaWJlcnR5L01ha2VmaWxlLmluCTIwMDgtMDctMjQgMTU6NTE6NDkuMDAwMDAwMDAwICswMjAwCisrKysgYmludXRpbHMtMi4xOS4xL2xpYmliZXJ0eS9NYWtlZmlsZS5pbgkyMDA5LTAzLTA4IDExOjU3OjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTIyNyw2ICsyMjcsNyBAQAorIAkgICQoQVIpICQoQVJfRkxBR1MpICQoVEFSR0VUTElCKSBcCisgCSAgICAkKFJFUVVJUkVEX09GSUxFUykgJChFWFRSQV9PRklMRVMpICQoTElCT0JKUyk7IFwKKyAJICAkKFJBTkxJQikgJChUQVJHRVRMSUIpOyBcCisrCSAgY3AgJChUQVJHRVRMSUIpIC4uLyA7IFwKKyAJICBjZCAuLjsgXAorIAllbHNlIHRydWU7IGZpCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4xOS4xYS8xOTAtbWlwczY0LWRlZmF1bHRlbXVsLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTkuMWEvMTkwLW1pcHM2NC1kZWZhdWx0ZW11bC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmE4NDkzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMTkuMWEvMTkwLW1pcHM2NC1kZWZhdWx0ZW11bC5wYXRjaApAQCAtMCwwICsxLDE4IEBACistLS0gYmludXRpbHMtMi4yMC9sZC9jb25maWd1cmUudGd0Lm9yaWcJMjAxMC0wMi0yMCAwNDowNTozMS4wMDAwMDAwMDAgLTA1MDAKKysrKyBiaW51dGlscy0yLjIwL2xkL2NvbmZpZ3VyZS50Z3QJMjAxMC0wMi0yMCAwNDowODoxMS4wMDAwMDAwMDAgLTA1MDAKK0BAIC00MDAsMTEgKzQwMCwxMSBAQAorIG1pcHMqLSotdnh3b3JrcyopCXRhcmdfZW11bD1lbGYzMmVibWlwdnh3b3JrcworIAkJICAgICAgICB0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmVsbWlwdnh3b3JrcyIgOzsKKyBtaXBzKi0qLXdpbmRpc3MpCXRhcmdfZW11bD1lbGYzMm1pcHN3aW5kaXNzIDs7CistbWlwczY0KmVsLSotbGludXgtKikJdGFyZ19lbXVsPWVsZjMybHRzbWlwbjMyCistCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJidHNtaXBuMzIgZWxmMzJsdHNtaXAgZWxmMzJidHNtaXAgZWxmNjRsdHNtaXAgZWxmNjRidHNtaXAiCisrbWlwczY0KmVsLSotbGludXgtKikJdGFyZ19lbXVsPWVsZjY0bHRzbWlwCisrCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJsdHNtaXBuMzIgZWxmMzJidHNtaXBuMzIgZWxmMzJsdHNtaXAgZWxmMzJidHNtaXAgZWxmNjRidHNtaXAiCisgCQkJdGFyZ19leHRyYV9saWJwYXRoPSR0YXJnX2V4dHJhX2VtdWxzIDs7CistbWlwczY0Ki0qLWxpbnV4LSopCXRhcmdfZW11bD1lbGYzMmJ0c21pcG4zMgorLQkJCXRhcmdfZXh0cmFfZW11bHM9ImVsZjMybHRzbWlwbjMyIGVsZjMyYnRzbWlwIGVsZjMybHRzbWlwIGVsZjY0YnRzbWlwIGVsZjY0bHRzbWlwIgorK21pcHM2NCotKi1saW51eC0qKQl0YXJnX2VtdWw9ZWxmNjRidHNtaXAKKysJCQl0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmJ0c21pcG4zMiBlbGYzMmx0c21pcG4zMiBlbGYzMmJ0c21pcCBlbGYzMmx0c21pcCBlbGY2NGx0c21pcCIKKyAJCQl0YXJnX2V4dHJhX2xpYnBhdGg9JHRhcmdfZXh0cmFfZW11bHMgOzsKKyBtaXBzKmVsLSotbGludXgtKikJdGFyZ19lbXVsPWVsZjMybHRzbWlwCisgCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJidHNtaXAgZWxmMzJsdHNtaXBuMzIgZWxmNjRsdHNtaXAgZWxmMzJidHNtaXBuMzIgZWxmNjRidHNtaXAiCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4yMC4xYS8xMDAtcHBjNjQtcGllLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMjAuMWEvMTAwLXBwYzY0LXBpZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzM4NjRiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMjAuMWEvMTAwLXBwYzY0LXBpZS5wYXRjaApAQCAtMCwwICsxLDE5IEBACisKKworZGlmZiAtZHVyTiBiaW51dGlscy0yLjIwLjEub3JpZy9iZmQvZWxmNjQtcHBjLmMgYmludXRpbHMtMi4yMC4xL2JmZC9lbGY2NC1wcGMuYworLS0tIGJpbnV0aWxzLTIuMjAuMS5vcmlnL2JmZC9lbGY2NC1wcGMuYwkyMDEwLTAyLTAzIDE0OjI4OjI1LjAwMDAwMDAwMCArMDEwMAorKysrIGJpbnV0aWxzLTIuMjAuMS9iZmQvZWxmNjQtcHBjLmMJMjAxMC0wOC0xNyAxOTozMjowNC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMTk5MSw3ICsxMTk5MSwxMiBAQAorIAkgICAgICBlbHNlIGlmICghU1lNQk9MX1JFRkVSRU5DRVNfTE9DQUwgKGluZm8sICZoLT5lbGYpCisgCQkgICAgICAgJiYgIWlzX29wZAorIAkJICAgICAgICYmIHJfdHlwZSAhPSBSX1BQQzY0X1RPQykKKy0JCW91dHJlbC5yX2luZm8gPSBFTEY2NF9SX0lORk8gKGgtPmVsZi5keW5pbmR4LCByX3R5cGUpOworKwkJeworKwkJICBvdXRyZWwucl9pbmZvID0gRUxGNjRfUl9JTkZPIChoLT5lbGYuZHluaW5keCwgcl90eXBlKTsKKysJCSAgaWYgKGgtPmVsZi5keW5pbmR4ID09IC0xCisrCQkgICAgICAmJiBoLT5lbGYucm9vdC50eXBlID09IGJmZF9saW5rX2hhc2hfdW5kZWZ3ZWFrKQorKwkJICBtZW1zZXQgKCZvdXRyZWwsIDAsIHNpemVvZiBvdXRyZWwpOworKwkJfQorIAkgICAgICBlbHNlCisgCQl7CisgCQkgIC8qIFRoaXMgc3ltYm9sIGlzIGxvY2FsLCBvciBtYXJrZWQgdG8gYmVjb21lIGxvY2FsLApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMjAuMWEvMTEwLVJQQVRIX0VOVlZBUi1zbWFjay5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjIwLjFhLzExMC1SUEFUSF9FTlZWQVItc21hY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ0NDZhMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjIwLjFhLzExMC1SUEFUSF9FTlZWQVItc21hY2sucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAoraHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2JpbnV0aWxzLzIwMDctMDcvbXNnMDA0MDEuaHRtbAoraHR0cDovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00OTcwCisKK2RpZmYgLWR1ck4gYmludXRpbHMtMi4yMC4xLm9yaWcvY29uZmlndXJlIGJpbnV0aWxzLTIuMjAuMS9jb25maWd1cmUKKy0tLSBiaW51dGlscy0yLjIwLjEub3JpZy9jb25maWd1cmUJMjAxMC0wMy0wMyAxNDo1OTowMi4wMDAwMDAwMDAgKzAxMDAKKysrKyBiaW51dGlscy0yLjIwLjEvY29uZmlndXJlCTIwMTAtMDgtMTcgMTk6MzI6MDUuMDAwMDAwMDAwICswMjAwCitAQCAtNjQ2Niw2ICs2NDY2LDcgQEAKKyAgICotKi1taW5ndyogfCAqLSotY3lnd2luICkgUlBBVEhfRU5WVkFSPVBBVEggOzsKKyAgICopIFJQQVRIX0VOVlZBUj1MRF9MSUJSQVJZX1BBVEggOzsKKyBlc2FjCisrUlBBVEhfRU5WVkFSPSJjYW50X3RvdWNoX3RoaXNfbmFoX25haF9uYWgiCisgCisgIyBPbiBzeXN0ZW1zIHdoZXJlIHRoZSBkeW5hbWljIGxpYnJhcnkgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgUEFUSCwKKyAjIGdjYy8gd2lsbCBwdXQgZHluYW1pYyBsaWJyYXJpZXMgaW50byBhIHN1YmRpcmVjdG9yeSB0byBhdm9pZCBhZGRpbmcKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjIwLjFhLzEyMC1zaC10YXJnZXRzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMjAuMWEvMTIwLXNoLXRhcmdldHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU3NzJkNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjIwLjFhLzEyMC1zaC10YXJnZXRzLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKKworCitkaWZmIC1kdXJOIGJpbnV0aWxzLTIuMjAuMS5vcmlnL2NvbmZpZ3VyZSBiaW51dGlscy0yLjIwLjEvY29uZmlndXJlCistLS0gYmludXRpbHMtMi4yMC4xLm9yaWcvY29uZmlndXJlCTIwMTAtMDgtMTcgMTk6MzI6MDUuMDAwMDAwMDAwICswMjAwCisrKysgYmludXRpbHMtMi4yMC4xL2NvbmZpZ3VyZQkyMDEwLTA4LTE3IDE5OjMyOjA3LjAwMDAwMDAwMCArMDIwMAorQEAgLTMwNTQsNyArMzA1NCw3IEBACisgICBhbTMzXzIuMC0qLWxpbnV4KikKKyAgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzICR7bGliZ2NqfSB0YXJnZXQtbmV3bGliIHRhcmdldC1saWJnbG9zcyIKKyAgICAgOzsKKy0gIHNoLSotbGludXgqKQorKyAgc2gqLSotbGludXgqKQorICAgICBub2NvbmZpZ2RpcnM9IiRub2NvbmZpZ2RpcnMgJHtsaWJnY2p9IHRhcmdldC1uZXdsaWIgdGFyZ2V0LWxpYmdsb3NzIgorICAgICA7OworICAgc2gqLSotcGV8bWlwcyotKi1wZXwqYXJtLXdpbmNlLXBlKQorQEAgLTMzOTAsNyArMzM5MCw3IEBACisgICByb21wLSotKikKKyAgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzIGJmZCBiaW51dGlscyBsZCBnYXMgb3Bjb2RlcyB0YXJnZXQtbGliZ2xvc3MgJHtsaWJnY2p9IgorICAgICA7OworLSAgc2gtKi0qIHwgc2g2NC0qLSopCisrICBzaCotKi0qIHwgc2g2NC0qLSopCisgICAgIGNhc2UgIiR7aG9zdH0iIGluCisgICAgICAgaVszNDU2Nzg5XTg2LSotdnN0YSkgOzsgIyBkb24ndCBhZGQgZ3Byb2YgYmFjayBpbgorICAgICAgIGlbMzQ1Njc4OV04Ni0qLWdvMzIqKSA7OyAjIGRvbid0IGFkZCBncHJvZiBiYWNrIGluCitkaWZmIC1kdXJOIGJpbnV0aWxzLTIuMjAuMS5vcmlnL2NvbmZpZ3VyZS5hYyBiaW51dGlscy0yLjIwLjEvY29uZmlndXJlLmFjCistLS0gYmludXRpbHMtMi4yMC4xLm9yaWcvY29uZmlndXJlLmFjCTIwMTAtMDMtMDMgMTU6MTk6MDguMDAwMDAwMDAwICswMTAwCisrKysgYmludXRpbHMtMi4yMC4xL2NvbmZpZ3VyZS5hYwkyMDEwLTA4LTE3IDE5OjMyOjA3LjAwMDAwMDAwMCArMDIwMAorQEAgLTU0MSw3ICs1NDEsNyBAQAorICAgYW0zM18yLjAtKi1saW51eCopCisgICAgIG5vY29uZmlnZGlycz0iJG5vY29uZmlnZGlycyAke2xpYmdjan0gdGFyZ2V0LW5ld2xpYiB0YXJnZXQtbGliZ2xvc3MiCisgICAgIDs7CistICBzaC0qLWxpbnV4KikKKysgIHNoKi0qLWxpbnV4KikKKyAgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzICR7bGliZ2NqfSB0YXJnZXQtbmV3bGliIHRhcmdldC1saWJnbG9zcyIKKyAgICAgOzsgICAgCisgICBzaCotKi1wZXxtaXBzKi0qLXBlfCphcm0td2luY2UtcGUpCitAQCAtODc3LDcgKzg3Nyw3IEBACisgICByb21wLSotKikKKyAgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzIGJmZCBiaW51dGlscyBsZCBnYXMgb3Bjb2RlcyB0YXJnZXQtbGliZ2xvc3MgJHtsaWJnY2p9IgorICAgICA7OworLSAgc2gtKi0qIHwgc2g2NC0qLSopCisrICBzaCotKi0qIHwgc2g2NC0qLSopCisgICAgIGNhc2UgIiR7aG9zdH0iIGluCisgICAgICAgaVtbMzQ1Njc4OV1dODYtKi12c3RhKSA7OyAjIGRvbid0IGFkZCBncHJvZiBiYWNrIGluCisgICAgICAgaVtbMzQ1Njc4OV1dODYtKi1nbzMyKikgOzsgIyBkb24ndCBhZGQgZ3Byb2YgYmFjayBpbgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMjAuMWEvMTMwLWxkLXN5c3Jvb3QucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4yMC4xYS8xMzAtbGQtc3lzcm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTQwYzQwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMjAuMWEvMTMwLWxkLXN5c3Jvb3QucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorU2lnbmVkLW9mZi1ieTogU3ZlbiBSZWJoYW4gPG9kaW5zaG9yc2VAZ29vZ2xlbWFpbC5jb20+CisKK0Fsd2F5cyB0cnkgdG8gcHJlcGVuZCB0aGUgc3lzcm9vdCBwcmVmaXggdG8gYWJzb2x1dGUgZmlsZW5hbWVzIGZpcnN0LgorCitodHRwOi8vYnVncy5nZW50b28ub3JnLzI3NTY2NgoraHR0cDovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0xMDM0MAorCitkaWZmIC1kdXJOIGJpbnV0aWxzLTIuMjAuMS5vcmlnL2xkL2xkZmlsZS5jIGJpbnV0aWxzLTIuMjAuMS9sZC9sZGZpbGUuYworLS0tIGJpbnV0aWxzLTIuMjAuMS5vcmlnL2xkL2xkZmlsZS5jCTIwMDktMDgtMzAgMDA6MTE6MDEuMDAwMDAwMDAwICswMjAwCisrKysgYmludXRpbHMtMi4yMC4xL2xkL2xkZmlsZS5jCTIwMTAtMDgtMTcgMTk6MzI6MDguMDAwMDAwMDAwICswMjAwCitAQCAtMzA4LDE4ICszMDgsMjQgQEAKKyAgICAgIGRpcmVjdG9yeSBmaXJzdC4gICovCisgICBpZiAoISBlbnRyeS0+aXNfYXJjaGl2ZSkKKyAgICAgeworLSAgICAgIGlmIChlbnRyeS0+c3lzcm9vdGVkICYmIElTX0FCU09MVVRFX1BBVEggKGVudHJ5LT5maWxlbmFtZSkpCisrICAgICAgLyogRm9yIGFic29sdXRlIHBhdGhuYW1lcywgdHJ5IHRvIGFsd2F5cyBvcGVuIHRoZSBmaWxlIGluIHRoZQorKwkgc3lzcm9vdCBmaXJzdC4gSWYgdGhpcyBmYWlscywgdHJ5IHRvIG9wZW4gdGhlIGZpbGUgYXQgdGhlCisrCSBnaXZlbiBsb2NhdGlvbi4gKi8KKysgICAgICBlbnRyeS0+c3lzcm9vdGVkID0gaXNfc3lzcm9vdGVkX3BhdGhuYW1lKGVudHJ5LT5maWxlbmFtZSwgRkFMU0UpOworKyAgICAgIGlmIChJU19BQlNPTFVURV9QQVRIIChlbnRyeS0+ZmlsZW5hbWUpICYmIGxkX3N5c3Jvb3QgJiYgISBlbnRyeS0+c3lzcm9vdGVkKQorIAl7CisgCSAgY2hhciAqbmFtZSA9IGNvbmNhdCAobGRfc3lzcm9vdCwgZW50cnktPmZpbGVuYW1lLAorIAkJCSAgICAgICAoY29uc3QgY2hhciAqKSBOVUxMKTsKKyAJICBpZiAobGRmaWxlX3RyeV9vcGVuX2JmZCAobmFtZSwgZW50cnkpKQorIAkgICAgeworIAkgICAgICBlbnRyeS0+ZmlsZW5hbWUgPSBuYW1lOworKwkgICAgICBlbnRyeS0+c3lzcm9vdGVkID0gVFJVRTsKKyAJICAgICAgcmV0dXJuIFRSVUU7CisgCSAgICB9CisgCSAgZnJlZSAobmFtZSk7CisgCX0KKy0gICAgICBlbHNlIGlmIChsZGZpbGVfdHJ5X29wZW5fYmZkIChlbnRyeS0+ZmlsZW5hbWUsIGVudHJ5KSkKKysKKysgICAgICBpZiAobGRmaWxlX3RyeV9vcGVuX2JmZCAoZW50cnktPmZpbGVuYW1lLCBlbnRyeSkpCisgCXsKKyAJICBlbnRyeS0+c3lzcm9vdGVkID0gSVNfQUJTT0xVVEVfUEFUSCAoZW50cnktPmZpbGVuYW1lKQorIAkgICAgJiYgaXNfc3lzcm9vdGVkX3BhdGhuYW1lIChlbnRyeS0+ZmlsZW5hbWUsIFRSVUUpOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMjAuMWEvMTQwLWNoZWNrX2xkcnVucGF0aF9sZW5ndGgucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4yMC4xYS8xNDAtY2hlY2tfbGRydW5wYXRoX2xlbmd0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjBlNjZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMjAuMWEvMTQwLWNoZWNrX2xkcnVucGF0aF9sZW5ndGgucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorIyEvYmluL3NoIC1lCisjIyAwMTJfY2hlY2tfbGRydW5wYXRoX2xlbmd0aC5kcGF0Y2ggYnkgQ2hyaXMgQ2hpbWVsaXMgPGNocmlzQGRlYmlhbi5vcmc+CisjIworIyMgQWxsIGxpbmVzIGJlZ2lubmluZyB3aXRoIGAjIyBEUDonIGFyZSBhIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXRjaC4KKyMjIERQOiBPbmx5IGdlbmVyYXRlIGFuIFJQQVRIIGVudHJ5IGlmIExEX1JVTl9QQVRIIGlzIG5vdCBlbXB0eSwgZm9yCisjIyBEUDogY2FzZXMgd2hlcmUgLXJwYXRoIGlzbid0IHNwZWNpZmllZC4gKCMxNTEwMjQpCisKK2lmIFsgJCMgLW5lIDEgXTsgdGhlbgorICAgIGVjaG8gPiYyICJgYmFzZW5hbWUgJDBgOiBzY3JpcHQgZXhwZWN0cyAtcGF0Y2h8LXVucGF0Y2ggYXMgYXJndW1lbnQiCisgICAgZXhpdCAxCitmaQorCitbIC1mIGRlYmlhbi9wYXRjaGVzLzAwcGF0Y2gtb3B0cyBdICYmIC4gZGViaWFuL3BhdGNoZXMvMDBwYXRjaC1vcHRzCitwYXRjaF9vcHRzPSIke3BhdGNoX29wdHM6LS1mIC0tbm8tYmFja3VwLWlmLW1pc21hdGNofSIKKworY2FzZSAiJDEiIGluCisgICAgICAgLXBhdGNoKSBwYXRjaCAkcGF0Y2hfb3B0cyAtcDEgPCAkMDs7CisgICAgICAgLXVucGF0Y2gpIHBhdGNoICRwYXRjaF9vcHRzIC1wMSAtUiA8ICQwOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgICAgICBlY2hvID4mMiAiYGJhc2VuYW1lICQwYDogc2NyaXB0IGV4cGVjdHMgLXBhdGNofC11bnBhdGNoIGFzIGFyZ3VtZW50IgorICAgICAgICAgICAgICAgIGV4aXQgMTs7Citlc2FjCisKK2V4aXQgMAorCitARFBBVENIQAorZGlmZiAtdXJOYWQgL2hvbWUvamFtZXMvZGViaWFuL3BhY2thZ2VzL2JpbnV0aWxzL25ldy9iaW51dGlscy0yLjE1L2xkL2VtdWx0ZW1wbC9lbGYzMi5lbSBiaW51dGlscy0yLjE1L2xkL2VtdWx0ZW1wbC9lbGYzMi5lbQorCitkaWZmIC1kdXJOIGJpbnV0aWxzLTIuMjAuMS5vcmlnL2xkL2VtdWx0ZW1wbC9lbGYzMi5lbSBiaW51dGlscy0yLjIwLjEvbGQvZW11bHRlbXBsL2VsZjMyLmVtCistLS0gYmludXRpbHMtMi4yMC4xLm9yaWcvbGQvZW11bHRlbXBsL2VsZjMyLmVtCTIwMDktMDktMTQgMTM6NDM6MzAuMDAwMDAwMDAwICswMjAwCisrKysgYmludXRpbHMtMi4yMC4xL2xkL2VtdWx0ZW1wbC9lbGYzMi5lbQkyMDEwLTA4LTE3IDE5OjMyOjA5LjAwMDAwMDAwMCArMDIwMAorQEAgLTEyMzMsNiArMTIzMyw4IEBACisgCSAgICAgICYmIGNvbW1hbmRfbGluZS5ycGF0aCA9PSBOVUxMKQorIAkgICAgeworIAkgICAgICBsaWJfcGF0aCA9IChjb25zdCBjaGFyICopIGdldGVudiAoIkxEX1JVTl9QQVRIIik7CisrCSAgICAgIGlmICgobGliX3BhdGgpICYmIChzdHJsZW4gKGxpYl9wYXRoKSA9PSAwKSkKKysJCSAgbGliX3BhdGggPSBOVUxMOworIAkgICAgICBpZiAoZ2xkJHtFTVVMQVRJT05fTkFNRX1fc2VhcmNoX25lZWRlZCAobGliX3BhdGgsICZuLAorIAkJCQkJCSAgICAgIGZvcmNlKSkKKyAJCWJyZWFrOworQEAgLTE0MTgsNiArMTQyMCw4IEBACisgICBycGF0aCA9IGNvbW1hbmRfbGluZS5ycGF0aDsKKyAgIGlmIChycGF0aCA9PSBOVUxMKQorICAgICBycGF0aCA9IChjb25zdCBjaGFyICopIGdldGVudiAoIkxEX1JVTl9QQVRIIik7CisrICBpZiAoKHJwYXRoKSAmJiAoc3RybGVuIChycGF0aCkgPT0gMCkpCisrICAgICAgcnBhdGggPSBOVUxMOworICAgaWYgKCEgKGJmZF9lbGZfc2l6ZV9keW5hbWljX3NlY3Rpb25zCisgCSAobGlua19pbmZvLm91dHB1dF9iZmQsIGNvbW1hbmRfbGluZS5zb25hbWUsIHJwYXRoLAorIAkgIGNvbW1hbmRfbGluZS5maWx0ZXJfc2hsaWIsCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4yMC4xYS8xNTAtcHQtcGF4LWZsYWdzLTIwMDkwOTA5LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMjAuMWEvMTUwLXB0LXBheC1mbGFncy0yMDA5MDkwOS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmQyZWY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMjAuMWEvMTUwLXB0LXBheC1mbGFncy0yMDA5MDkwOS5wYXRjaApAQCAtMCwwICsxLDI0OCBAQAorCisKK2RpZmYgLWR1ck4gYmludXRpbHMtMi4yMC4xLm9yaWcvYmZkL2VsZi1iZmQuaCBiaW51dGlscy0yLjIwLjEvYmZkL2VsZi1iZmQuaAorLS0tIGJpbnV0aWxzLTIuMjAuMS5vcmlnL2JmZC9lbGYtYmZkLmgJMjAwOS0wOS0xMCAxMzo0NzoxMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBiaW51dGlscy0yLjIwLjEvYmZkL2VsZi1iZmQuaAkyMDEwLTA4LTE3IDE5OjMyOjExLjAwMDAwMDAwMCArMDIwMAorQEAgLTE1MzEsNiArMTUzMSw5IEBACisgICAvKiBTZWdtZW50IGZsYWdzIGZvciB0aGUgUFRfR05VX1NUQUNLIHNlZ21lbnQuICAqLworICAgdW5zaWduZWQgaW50IHN0YWNrX2ZsYWdzOworIAorKyAgLyogU2VnbWVudCBmbGFncyBmb3IgdGhlIFBUX1BBWF9GTEFHUyBzZWdtZW50LiAgKi8KKysgIHVuc2lnbmVkIGludCBwYXhfZmxhZ3M7CisrCisgICAvKiBTeW1ib2wgdmVyc2lvbiBkZWZpbml0aW9ucyBpbiBleHRlcm5hbCBvYmplY3RzLiAgKi8KKyAgIEVsZl9JbnRlcm5hbF9WZXJkZWYgKnZlcmRlZjsKKyAKK2RpZmYgLWR1ck4gYmludXRpbHMtMi4yMC4xLm9yaWcvYmZkL2VsZi5jIGJpbnV0aWxzLTIuMjAuMS9iZmQvZWxmLmMKKy0tLSBiaW51dGlscy0yLjIwLjEub3JpZy9iZmQvZWxmLmMJMjAwOS0wOS0xMCAxMzo0NzoxMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBiaW51dGlscy0yLjIwLjEvYmZkL2VsZi5jCTIwMTAtMDgtMTcgMTk6MzI6MTEuMDAwMDAwMDAwICswMjAwCitAQCAtMTA4Myw2ICsxMDgzLDcgQEAKKyAgICAgY2FzZSBQVF9HTlVfRUhfRlJBTUU6IHB0ID0gIkVIX0ZSQU1FIjsgYnJlYWs7CisgICAgIGNhc2UgUFRfR05VX1NUQUNLOiBwdCA9ICJTVEFDSyI7IGJyZWFrOworICAgICBjYXNlIFBUX0dOVV9SRUxSTzogcHQgPSAiUkVMUk8iOyBicmVhazsKKysgICAgY2FzZSBQVF9QQVhfRkxBR1M6IHB0ID0gIlBBWF9GTEFHUyI7IGJyZWFrOworICAgICBkZWZhdWx0OiBwdCA9IE5VTEw7IGJyZWFrOworICAgICB9CisgICByZXR1cm4gcHQ7CitAQCAtMjM5Niw2ICsyMzk3LDkgQEAKKyAgICAgY2FzZSBQVF9HTlVfUkVMUk86CisgICAgICAgcmV0dXJuIF9iZmRfZWxmX21ha2Vfc2VjdGlvbl9mcm9tX3BoZHIgKGFiZmQsIGhkciwgaW5kZXgsICJyZWxybyIpOworIAorKyAgICBjYXNlIFBUX1BBWF9GTEFHUzoKKysgICAgICByZXR1cm4gX2JmZF9lbGZfbWFrZV9zZWN0aW9uX2Zyb21fcGhkciAoYWJmZCwgaGRyLCBpbmRleCwgInBheF9mbGFncyIpOworKworICAgICBkZWZhdWx0OgorICAgICAgIC8qIENoZWNrIGZvciBhbnkgcHJvY2Vzc29yLXNwZWNpZmljIHByb2dyYW0gc2VnbWVudCB0eXBlcy4gICovCisgICAgICAgYmVkID0gZ2V0X2VsZl9iYWNrZW5kX2RhdGEgKGFiZmQpOworQEAgLTM0MTMsNiArMzQxNywxMSBAQAorICAgICAgICsrc2VnczsKKyAgICAgfQorIAorKyAgICB7CisrICAgICAgLyogV2UgbmVlZCBhIFBUX1BBWF9GTEFHUyBzZWdtZW50LiAgKi8KKysgICAgICArK3NlZ3M7CisrICAgIH0KKysKKyAgIGZvciAocyA9IGFiZmQtPnNlY3Rpb25zOyBzICE9IE5VTEw7IHMgPSBzLT5uZXh0KQorICAgICB7CisgICAgICAgaWYgKChzLT5mbGFncyAmIFNFQ19MT0FEKSAhPSAwCitAQCAtMzk5NCw2ICs0MDAzLDIwIEBACisgCSAgICB9CisgCX0KKyAKKysgICAgeworKyAgICAgIGFtdCA9IHNpemVvZiAoc3RydWN0IGVsZl9zZWdtZW50X21hcCk7CisrICAgICAgbSA9IGJmZF96YWxsb2MgKGFiZmQsIGFtdCk7CisrICAgICAgaWYgKG0gPT0gTlVMTCkKKysJZ290byBlcnJvcl9yZXR1cm47CisrICAgICAgbS0+bmV4dCA9IE5VTEw7CisrICAgICAgbS0+cF90eXBlID0gUFRfUEFYX0ZMQUdTOworKyAgICAgIG0tPnBfZmxhZ3MgPSBlbGZfdGRhdGEgKGFiZmQpLT5wYXhfZmxhZ3M7CisrICAgICAgbS0+cF9mbGFnc192YWxpZCA9IDE7CisrCisrICAgICAgKnBtID0gbTsKKysgICAgICBwbSA9ICZtLT5uZXh0OworKyAgICB9CisrCisgICAgICAgZnJlZSAoc2VjdGlvbnMpOworICAgICAgIGVsZl90ZGF0YSAoYWJmZCktPnNlZ21lbnRfbWFwID0gbWZpcnN0OworICAgICB9CitAQCAtNTE5OCw3ICs1MjIxLDggQEAKKyAgICAgICAgNi4gUFRfVExTIHNlZ21lbnQgaW5jbHVkZXMgb25seSBTSEZfVExTIHNlY3Rpb25zLgorICAgICAgICA3LiBTSEZfVExTIHNlY3Rpb25zIGFyZSBvbmx5IGluIFBUX1RMUyBvciBQVF9MT0FEIHNlZ21lbnRzLgorICAgICAgICA4LiBQVF9EWU5BTUlDIHNob3VsZCBub3QgY29udGFpbiBlbXB0eSBzZWN0aW9ucyBhdCB0aGUgYmVnaW5uaW5nCistCSAgKHdpdGggdGhlIHBvc3NpYmxlIGV4Y2VwdGlvbiBvZiAuZHluYW1pYykuICAqLworKwkgICh3aXRoIHRoZSBwb3NzaWJsZSBleGNlcHRpb24gb2YgLmR5bmFtaWMpLgorKyAgICAgICA5LiBQVF9QQVhfRkxBR1Mgc2VnbWVudHMgZG8gbm90IGluY2x1ZGUgYW55IHNlY3Rpb25zLiAgKi8KKyAjZGVmaW5lIElTX1NFQ1RJT05fSU5fSU5QVVRfU0VHTUVOVChzZWN0aW9uLCBzZWdtZW50LCBiZWQpCQlcCisgICAoKCgoc2VnbWVudC0+cF9wYWRkcgkJCQkJCQlcCisgICAgICAgPyBJU19DT05UQUlORURfQllfTE1BIChzZWN0aW9uLCBzZWdtZW50LCBzZWdtZW50LT5wX3BhZGRyKQlcCitAQCAtNTIwNiw2ICs1MjMwLDcgQEAKKyAgICAgICYmIChzZWN0aW9uLT5mbGFncyAmIFNFQ19BTExPQykgIT0gMCkJCQkJXAorICAgICB8fCBJU19OT1RFIChzZWdtZW50LCBzZWN0aW9uKSkJCQkJCVwKKyAgICAmJiBzZWdtZW50LT5wX3R5cGUgIT0gUFRfR05VX1NUQUNLCQkJCQlcCisrICAgJiYgc2VnbWVudC0+cF90eXBlICE9IFBUX1BBWF9GTEFHUwkJCQkJXAorICAgICYmIChzZWdtZW50LT5wX3R5cGUgIT0gUFRfVExTCQkJCQlcCisgICAgICAgIHx8IChzZWN0aW9uLT5mbGFncyAmIFNFQ19USFJFQURfTE9DQUwpKQkJCQlcCisgICAgJiYgKHNlZ21lbnQtPnBfdHlwZSA9PSBQVF9MT0FECQkJCQlcCitkaWZmIC1kdXJOIGJpbnV0aWxzLTIuMjAuMS5vcmlnL2JmZC9lbGZsaW5rLmMgYmludXRpbHMtMi4yMC4xL2JmZC9lbGZsaW5rLmMKKy0tLSBiaW51dGlscy0yLjIwLjEub3JpZy9iZmQvZWxmbGluay5jCTIwMDktMDktMTAgMTM6NDc6MTIuMDAwMDAwMDAwICswMjAwCisrKysgYmludXRpbHMtMi4yMC4xL2JmZC9lbGZsaW5rLmMJMjAxMC0wOC0xNyAxOTozMjoxMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC01NDY5LDE2ICs1NDY5LDMwIEBACisgICAgIHJldHVybiBUUlVFOworIAorICAgYmVkID0gZ2V0X2VsZl9iYWNrZW5kX2RhdGEgKG91dHB1dF9iZmQpOworKworKyAgZWxmX3RkYXRhIChvdXRwdXRfYmZkKS0+cGF4X2ZsYWdzID0gUEZfTk9SQU5ERVhFQzsKKysgIGlmIChpbmZvLT5leGVjaGVhcCkKKysgICAgZWxmX3RkYXRhIChvdXRwdXRfYmZkKS0+cGF4X2ZsYWdzIHw9IFBGX05PTVBST1RFQ1Q7CisrICBlbHNlIGlmIChpbmZvLT5ub2V4ZWNoZWFwKQorKyAgICBlbGZfdGRhdGEgKG91dHB1dF9iZmQpLT5wYXhfZmxhZ3MgfD0gUEZfTVBST1RFQ1Q7CisrCisgICBpZiAoaW5mby0+ZXhlY3N0YWNrKQorLSAgICBlbGZfdGRhdGEgKG91dHB1dF9iZmQpLT5zdGFja19mbGFncyA9IFBGX1IgfCBQRl9XIHwgUEZfWDsKKysgICAgeworKyAgICAgIGVsZl90ZGF0YSAob3V0cHV0X2JmZCktPnN0YWNrX2ZsYWdzID0gUEZfUiB8IFBGX1cgfCBQRl9YOworKyAgICAgIGVsZl90ZGF0YSAob3V0cHV0X2JmZCktPnBheF9mbGFncyB8PSBQRl9FTVVUUkFNUDsKKysgICAgfQorICAgZWxzZSBpZiAoaW5mby0+bm9leGVjc3RhY2spCistICAgIGVsZl90ZGF0YSAob3V0cHV0X2JmZCktPnN0YWNrX2ZsYWdzID0gUEZfUiB8IFBGX1c7CisrICAgIHsKKysgICAgICBlbGZfdGRhdGEgKG91dHB1dF9iZmQpLT5zdGFja19mbGFncyA9IFBGX1IgfCBQRl9XOworKyAgICAgIGVsZl90ZGF0YSAob3V0cHV0X2JmZCktPnBheF9mbGFncyB8PSBQRl9OT0VNVVRSQU1QOworKyAgICB9CisgICBlbHNlCisgICAgIHsKKyAgICAgICBiZmQgKmlucHV0b2JqOworICAgICAgIGFzZWN0aW9uICpub3Rlc2VjID0gTlVMTDsKKyAgICAgICBpbnQgZXhlYyA9IDA7CisgCisrICAgICAgZWxmX3RkYXRhIChvdXRwdXRfYmZkKS0+cGF4X2ZsYWdzIHw9IFBGX05PRU1VVFJBTVA7CisgICAgICAgZm9yIChpbnB1dG9iaiA9IGluZm8tPmlucHV0X2JmZHM7CisgCSAgIGlucHV0b2JqOworIAkgICBpbnB1dG9iaiA9IGlucHV0b2JqLT5saW5rX25leHQpCitAQCAtNTQ5MSw3ICs1NTA1LDExIEBACisgCSAgaWYgKHMpCisgCSAgICB7CisgCSAgICAgIGlmIChzLT5mbGFncyAmIFNFQ19DT0RFKQorLQkJZXhlYyA9IFBGX1g7CisrCQl7CisrCQkgIGVsZl90ZGF0YSAob3V0cHV0X2JmZCktPnBheF9mbGFncyAmPSB+UEZfTk9FTVVUUkFNUDsKKysJCSAgZWxmX3RkYXRhIChvdXRwdXRfYmZkKS0+cGF4X2ZsYWdzIHw9IFBGX0VNVVRSQU1QOworKwkJICBleGVjID0gUEZfWDsKKysJCX0KKyAJICAgICAgbm90ZXNlYyA9IHM7CisgCSAgICB9CisgCSAgZWxzZSBpZiAoYmVkLT5kZWZhdWx0X2V4ZWNzdGFjaykKK2RpZmYgLWR1ck4gYmludXRpbHMtMi4yMC4xLm9yaWcvYmludXRpbHMvcmVhZGVsZi5jIGJpbnV0aWxzLTIuMjAuMS9iaW51dGlscy9yZWFkZWxmLmMKKy0tLSBiaW51dGlscy0yLjIwLjEub3JpZy9iaW51dGlscy9yZWFkZWxmLmMJMjAxMC0wMS0xNCAxMTo0ODoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBiaW51dGlscy0yLjIwLjEvYmludXRpbHMvcmVhZGVsZi5jCTIwMTAtMDgtMTcgMTk6MzI6MTEuMDAwMDAwMDAwICswMjAwCitAQCAtMjU2OSw2ICsyNTY5LDcgQEAKKyAJCQlyZXR1cm4gIkdOVV9FSF9GUkFNRSI7CisgICAgIGNhc2UgUFRfR05VX1NUQUNLOglyZXR1cm4gIkdOVV9TVEFDSyI7CisgICAgIGNhc2UgUFRfR05VX1JFTFJPOiAgcmV0dXJuICJHTlVfUkVMUk8iOworKyAgICBjYXNlIFBUX1BBWF9GTEFHUzogIHJldHVybiAiUEFYX0ZMQUdTIjsKKyAKKyAgICAgZGVmYXVsdDoKKyAgICAgICBpZiAoKHBfdHlwZSA+PSBQVF9MT1BST0MpICYmIChwX3R5cGUgPD0gUFRfSElQUk9DKSkKK2RpZmYgLWR1ck4gYmludXRpbHMtMi4yMC4xLm9yaWcvaW5jbHVkZS9iZmRsaW5rLmggYmludXRpbHMtMi4yMC4xL2luY2x1ZGUvYmZkbGluay5oCistLS0gYmludXRpbHMtMi4yMC4xLm9yaWcvaW5jbHVkZS9iZmRsaW5rLmgJMjAwOS0wOS0xMCAxMzo0NzozMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBiaW51dGlscy0yLjIwLjEvaW5jbHVkZS9iZmRsaW5rLmgJMjAxMC0wOC0xNyAxOTozMjoxMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMjEsNiArMzIxLDE0IEBACisgICAvKiBUUlVFIGlmIFBUX0dOVV9SRUxSTyBzZWdtZW50IHNob3VsZCBiZSBjcmVhdGVkLiAgKi8KKyAgIHVuc2lnbmVkIGludCByZWxybzogMTsKKyAKKysgIC8qIFRSVUUgaWYgUFRfUEFYX0ZMQUdTIHNlZ21lbnQgc2hvdWxkIGJlIGNyZWF0ZWQgd2l0aCBQRl9OT01QUk9URUNUCisrICAgICBmbGFncy4gICovCisrICB1bnNpZ25lZCBpbnQgZXhlY2hlYXA6IDE7CisrCisrICAvKiBUUlVFIGlmIFBUX1BBWF9GTEFHUyBzZWdtZW50IHNob3VsZCBiZSBjcmVhdGVkIHdpdGggUEZfTVBST1RFQ1QKKysgICAgIGZsYWdzLiAgKi8KKysgIHVuc2lnbmVkIGludCBub2V4ZWNoZWFwOiAxOworKworICAgLyogVFJVRSBpZiB3ZSBzaG91bGQgd2FybiB3aGVuIGFkZGluZyBhIERUX1RFWFRSRUwgdG8gYSBzaGFyZWQgb2JqZWN0LiAgKi8KKyAgIHVuc2lnbmVkIGludCB3YXJuX3NoYXJlZF90ZXh0cmVsOiAxOworIAorZGlmZiAtZHVyTiBiaW51dGlscy0yLjIwLjEub3JpZy9pbmNsdWRlL2VsZi9jb21tb24uaCBiaW51dGlscy0yLjIwLjEvaW5jbHVkZS9lbGYvY29tbW9uLmgKKy0tLSBiaW51dGlscy0yLjIwLjEub3JpZy9pbmNsdWRlL2VsZi9jb21tb24uaAkyMDA5LTA4LTA5IDE1OjQyOjI2LjAwMDAwMDAwMCArMDIwMAorKysrIGJpbnV0aWxzLTIuMjAuMS9pbmNsdWRlL2VsZi9jb21tb24uaAkyMDEwLTA4LTE3IDE5OjMyOjExLjAwMDAwMDAwMCArMDIwMAorQEAgLTQyMiw2ICs0MjIsNyBAQAorICNkZWZpbmUgUFRfU1VOV19FSF9GUkFNRSBQVF9HTlVfRUhfRlJBTUUgICAgICAvKiBTb2xhcmlzIHVzZXMgdGhlIHNhbWUgdmFsdWUgKi8KKyAjZGVmaW5lIFBUX0dOVV9TVEFDSwkoUFRfTE9PUyArIDB4NDc0ZTU1MSkgLyogU3RhY2sgZmxhZ3MgKi8KKyAjZGVmaW5lIFBUX0dOVV9SRUxSTwkoUFRfTE9PUyArIDB4NDc0ZTU1MikgLyogUmVhZC1vbmx5IGFmdGVyIHJlbG9jYXRpb24gKi8KKysjZGVmaW5lIFBUX1BBWF9GTEFHUwkoUFRfTE9PUyArIDB4NTA0MTU4MCkgLyogUGFYIGZsYWdzICovCisgCisgLyogUHJvZ3JhbSBzZWdtZW50IHBlcm1pc3Npb25zLCBpbiBwcm9ncmFtIGhlYWRlciBwX2ZsYWdzIGZpZWxkLiAgKi8KKyAKK0BAIC00MzIsNiArNDMzLDIxIEBACisgI2RlZmluZSBQRl9NQVNLT1MJMHgwRkYwMDAwMAkvKiBOZXcgdmFsdWUsIE9jdCA0LCAxOTk5IERyYWZ0ICovCisgI2RlZmluZSBQRl9NQVNLUFJPQwkweEYwMDAwMDAwCS8qIFByb2Nlc3Nvci1zcGVjaWZpYyByZXNlcnZlZCBiaXRzICovCisgCisrLyogRmxhZ3MgdG8gY29udHJvbCBQYVggYmVoYXZpb3IuICAqLworKworKyNkZWZpbmUgUEZfUEFHRUVYRUMJKDEgPDwgNCkJLyogRW5hYmxlICBQQUdFRVhFQyAqLworKyNkZWZpbmUgUEZfTk9QQUdFRVhFQwkoMSA8PCA1KQkvKiBEaXNhYmxlIFBBR0VFWEVDICovCisrI2RlZmluZSBQRl9TRUdNRVhFQwkoMSA8PCA2KQkvKiBFbmFibGUgIFNFR01FWEVDICovCisrI2RlZmluZSBQRl9OT1NFR01FWEVDCSgxIDw8IDcpCS8qIERpc2FibGUgU0VHTUVYRUMgKi8KKysjZGVmaW5lIFBGX01QUk9URUNUCSgxIDw8IDgpCS8qIEVuYWJsZSAgTVBST1RFQ1QgKi8KKysjZGVmaW5lIFBGX05PTVBST1RFQ1QJKDEgPDwgOSkJLyogRGlzYWJsZSBNUFJPVEVDVCAqLworKyNkZWZpbmUgUEZfUkFOREVYRUMJKDEgPDwgMTApCS8qIEVuYWJsZSAgUkFOREVYRUMgKi8KKysjZGVmaW5lIFBGX05PUkFOREVYRUMJKDEgPDwgMTEpCS8qIERpc2FibGUgUkFOREVYRUMgKi8KKysjZGVmaW5lIFBGX0VNVVRSQU1QCSgxIDw8IDEyKQkvKiBFbmFibGUgIEVNVVRSQU1QICovCisrI2RlZmluZSBQRl9OT0VNVVRSQU1QCSgxIDw8IDEzKQkvKiBEaXNhYmxlIEVNVVRSQU1QICovCisrI2RlZmluZSBQRl9SQU5ETU1BUAkoMSA8PCAxNCkJLyogRW5hYmxlICBSQU5ETU1BUCAqLworKyNkZWZpbmUgUEZfTk9SQU5ETU1BUAkoMSA8PCAxNSkJLyogRGlzYWJsZSBSQU5ETU1BUCAqLworKworIC8qIFZhbHVlcyBmb3Igc2VjdGlvbiBoZWFkZXIsIHNoX3R5cGUgZmllbGQuICAqLworIAorICNkZWZpbmUgU0hUX05VTEwJMAkJLyogU2VjdGlvbiBoZWFkZXIgdGFibGUgZW50cnkgdW51c2VkICovCitkaWZmIC1kdXJOIGJpbnV0aWxzLTIuMjAuMS5vcmlnL2xkL2VtdWx0ZW1wbC9lbGYzMi5lbSBiaW51dGlscy0yLjIwLjEvbGQvZW11bHRlbXBsL2VsZjMyLmVtCistLS0gYmludXRpbHMtMi4yMC4xLm9yaWcvbGQvZW11bHRlbXBsL2VsZjMyLmVtCTIwMTAtMDgtMTcgMTk6MzI6MDkuMDAwMDAwMDAwICswMjAwCisrKysgYmludXRpbHMtMi4yMC4xL2xkL2VtdWx0ZW1wbC9lbGYzMi5lbQkyMDEwLTA4LTE3IDE5OjMyOjExLjAwMDAwMDAwMCArMDIwMAorQEAgLTIxNjUsNiArMjE2NSwxNiBAQAorIAkgIGxpbmtfaW5mby5ub2V4ZWNzdGFjayA9IFRSVUU7CisgCSAgbGlua19pbmZvLmV4ZWNzdGFjayA9IEZBTFNFOworIAl9CisrICAgICAgZWxzZSBpZiAoc3RyY21wIChvcHRhcmcsICJleGVjaGVhcCIpID09IDApCisrCXsKKysJICBsaW5rX2luZm8uZXhlY2hlYXAgPSBUUlVFOworKwkgIGxpbmtfaW5mby5ub2V4ZWNoZWFwID0gRkFMU0U7CisrCX0KKysgICAgICBlbHNlIGlmIChzdHJjbXAgKG9wdGFyZywgIm5vZXhlY2hlYXAiKSA9PSAwKQorKwl7CisrCSAgbGlua19pbmZvLm5vZXhlY2hlYXAgPSBUUlVFOworKwkgIGxpbmtfaW5mby5leGVjaGVhcCA9IEZBTFNFOworKwl9CisgRU9GCisgCisgICBpZiB0ZXN0IC1uICIkQ09NTU9OUEFHRVNJWkUiOyB0aGVuCitAQCAtMjI0Myw2ICsyMjUzLDggQEAKKyAgIGZwcmludGYgKGZpbGUsIF8oIlwKKyAgIC16IGV4ZWNzdGFjayAgICAgICAgICAgICAgICBNYXJrIGV4ZWN1dGFibGUgYXMgcmVxdWlyaW5nIGV4ZWN1dGFibGUgc3RhY2tcbiIpKTsKKyAgIGZwcmludGYgKGZpbGUsIF8oIlwKKysgIC16IGV4ZWNoZWFwICAgICAgICAgICAgICAgICBNYXJrIGV4ZWN1dGFibGUgYXMgcmVxdWlyaW5nIGV4ZWN1dGFibGUgaGVhcFxuIikpOworKyAgZnByaW50ZiAoZmlsZSwgXygiXAorICAgLXogaW5pdGZpcnN0ICAgICAgICAgICAgICAgIE1hcmsgRFNPIHRvIGJlIGluaXRpYWxpemVkIGZpcnN0IGF0IHJ1bnRpbWVcbiIpKTsKKyAgIGZwcmludGYgKGZpbGUsIF8oIlwKKyAgIC16IGludGVycG9zZSAgICAgICAgICAgICAgICBNYXJrIG9iamVjdCB0byBpbnRlcnBvc2UgYWxsIERTT3MgYnV0IGV4ZWN1dGFibGVcbiIpKTsKK0BAIC0yMjY2LDYgKzIyNzgsOCBAQAorICAgLXogbm9kdW1wICAgICAgICAgICAgICAgICAgIE1hcmsgRFNPIG5vdCBhdmFpbGFibGUgdG8gZGxkdW1wXG4iKSk7CisgICBmcHJpbnRmIChmaWxlLCBfKCJcCisgICAteiBub2V4ZWNzdGFjayAgICAgICAgICAgICAgTWFyayBleGVjdXRhYmxlIGFzIG5vdCByZXF1aXJpbmcgZXhlY3V0YWJsZSBzdGFja1xuIikpOworKyAgZnByaW50ZiAoZmlsZSwgXygiXAorKyAgLXogbm9leGVjaGVhcCAgICAgICAgICAgICAgIE1hcmsgZXhlY3V0YWJsZSBhcyBub3QgcmVxdWlyaW5nIGV4ZWN1dGFibGUgaGVhcFxuIikpOworIEVPRgorIAorICAgaWYgdGVzdCAtbiAiJENPTU1PTlBBR0VTSVpFIjsgdGhlbgorZGlmZiAtZHVyTiBiaW51dGlscy0yLjIwLjEub3JpZy9sZC9sZGdyYW0ueSBiaW51dGlscy0yLjIwLjEvbGQvbGRncmFtLnkKKy0tLSBiaW51dGlscy0yLjIwLjEub3JpZy9sZC9sZGdyYW0ueQkyMDA5LTA5LTAyIDA5OjI1OjM1LjAwMDAwMDAwMCArMDIwMAorKysrIGJpbnV0aWxzLTIuMjAuMS9sZC9sZGdyYW0ueQkyMDEwLTA4LTE3IDE5OjMyOjExLjAwMDAwMDAwMCArMDIwMAorQEAgLTExMTYsNiArMTExNiw4IEBACisgCQkJICAgICQkID0gZXhwX2ludG9wICgweDY0NzRlNTUwKTsKKyAJCQkgIGVsc2UgaWYgKHN0cmNtcCAocywgIlBUX0dOVV9TVEFDSyIpID09IDApCisgCQkJICAgICQkID0gZXhwX2ludG9wICgweDY0NzRlNTUxKTsKKysJCQkgIGVsc2UgaWYgKHN0cmNtcCAocywgIlBUX1BBWF9GTEFHUyIpID09IDApCisrCQkJICAgICQkID0gZXhwX2ludG9wICgweDY1MDQxNTgwKTsKKyAJCQkgIGVsc2UKKyAJCQkgICAgeworIAkJCSAgICAgIGVpbmZvIChfKCJcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4yMC4xYS8xNjAtYW1kNjQtMzJiaXQtcGF0aC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjIwLjFhLzE2MC1hbWQ2NC0zMmJpdC1wYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NTFhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4yMC4xYS8xNjAtYW1kNjQtMzJiaXQtcGF0aC5wYXRjaApAQCAtMCwwICsxLDE5IEBACisKKworZGlmZiAtZHVyTiBiaW51dGlscy0yLjIwLjEub3JpZy9sZC9lbXVscGFyYW1zL2VsZl9pMzg2LnNoIGJpbnV0aWxzLTIuMjAuMS9sZC9lbXVscGFyYW1zL2VsZl9pMzg2LnNoCistLS0gYmludXRpbHMtMi4yMC4xLm9yaWcvbGQvZW11bHBhcmFtcy9lbGZfaTM4Ni5zaAkyMDA5LTA3LTI5IDE2OjU5OjIzLjAwMDAwMDAwMCArMDIwMAorKysrIGJpbnV0aWxzLTIuMjAuMS9sZC9lbXVscGFyYW1zL2VsZl9pMzg2LnNoCTIwMTAtMDgtMTcgMTk6MzI6MTIuMDAwMDAwMDAwICswMjAwCitAQCAtMTMsMyArMTMsMTMgQEAKKyBOT19TTUFMTF9EQVRBPXllcworIFNFUEFSQVRFX0dPVFBMVD0xMgorIElSRUxfSU5fUExUPQorKworKyMgSW4gR2VudG9vLCB3ZSBpbnN0YWxsIDMyYml0IGxpYnMgaW50byAvbGliMzIgaW4gYW4KKysjIEFCSSBzZXR1cCB3aXRoIGFtZDY0L3g4NgorK2Nhc2UgIiR0YXJnZXQiIGluCisrICB4ODZfNjQqLWxpbnV4KikKKysgICAgY2FzZSAiJEVNVUxBVElPTl9OQU1FIiBpbgorKyAgICAgICppMzg2KikgTElCUEFUSF9TVUZGSVg9MzIgIDs7CisrICAgIGVzYWMKKysgIDs7CisrZXNhYwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMjAuMWEvMTcwLXdhcm4tdGV4dHJlbC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjIwLjFhLzE3MC13YXJuLXRleHRyZWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZiYzQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjIwLjFhLzE3MC13YXJuLXRleHRyZWwucGF0Y2gKQEAgLTAsMCArMSw2NiBAQAordGV4dHJlbHMgYXJlIGJhZCBmb3IgZm9yY2luZyBjb3B5LW9uLXdyaXRlICh0aGlzIGFmZmVjdHMgZXZlcnlvbmUpLAorYW5kIGZvciBzZWN1cml0eS9ydW50aW1lIGNvZGUgZ2VuZXJhdGlvbiwgdGhpcyBhZmZlY3RzIHNlY3VyaXR5IHBwbC4KK0J1dCBpbiBlaXRoZXIgY2FzZSwgaXQgZG9lc24ndCBtYXR0ZXIgd2hvIG5lZWRzIHRleHRyZWxzLCBpdCdzCit0aGUgdmVyeSBmYWN0IHRoYXQgdGhleSdyZSBuZWVkZWQgYXQgYWxsLgorCisyMDA2LTA2LTEwICBOZWQgTHVkZCAgPHNvbGFyQGdlbnRvby5vcmc+LCBNaWtlIEZyeXNpbmdlciA8dmFwaWVyQGdlbnRvby5vcmc+CisKKwkqIGJmZC9lbGZsaW5rLmMgKGJmZF9lbGZfZmluYWxfbGluayk6IENoZWNrIGFsbCBvYmplY3RzIGZvciBURVhUUkVMcy4KKwkqIGxkL2xkbWFpbi5jIChtYWluKTogQ2hhbmdlIHRleHRyZWwgd2FybmluZyBkZWZhdWx0IHRvIHRydWUuCisJKiBsZC90ZXN0c3VpdGUvbGliL2xkLWxpYi5leHAgKGRlZmF1bHRfbGRfc2ltcGxlX2xpbmspOiBTY3J1YiBURVhUUkVMCisJd2FybmluZ3MgZnJvbSBsZCBvdXRwdXQuCisKK2RpZmYgLWR1ck4gYmludXRpbHMtMi4yMC4xLm9yaWcvYmZkL2VsZmxpbmsuYyBiaW51dGlscy0yLjIwLjEvYmZkL2VsZmxpbmsuYworLS0tIGJpbnV0aWxzLTIuMjAuMS5vcmlnL2JmZC9lbGZsaW5rLmMJMjAxMC0wOC0xNyAxOTozMjoxMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBiaW51dGlscy0yLjIwLjEvYmZkL2VsZmxpbmsuYwkyMDEwLTA4LTE3IDE5OjMyOjEzLjAwMDAwMDAwMCArMDIwMAorQEAgLTEwOTg4LDE0ICsxMDk4OCwxMiBAQAorIAlnb3RvIGVycm9yX3JldHVybjsKKyAKKyAgICAgICAvKiBDaGVjayBmb3IgRFRfVEVYVFJFTCAobGF0ZSwgaW4gY2FzZSB0aGUgYmFja2VuZCByZW1vdmVzIGl0KS4gICovCistICAgICAgaWYgKGluZm8tPndhcm5fc2hhcmVkX3RleHRyZWwgJiYgaW5mby0+c2hhcmVkKQorKyAgICAgIG8gPSBiZmRfZ2V0X3NlY3Rpb25fYnlfbmFtZSAoZHlub2JqLCAiLmR5bmFtaWMiKTsKKysgICAgICBpZiAoaW5mby0+d2Fybl9zaGFyZWRfdGV4dHJlbCAmJiBvICE9IE5VTEwpCisgCXsKKyAJICBiZmRfYnl0ZSAqZHluY29uLCAqZHluY29uZW5kOworIAorIAkgIC8qIEZpeCB1cCAuZHluYW1pYyBlbnRyaWVzLiAgKi8KKy0JICBvID0gYmZkX2dldF9zZWN0aW9uX2J5X25hbWUgKGR5bm9iaiwgIi5keW5hbWljIik7CistCSAgQkZEX0FTU0VSVCAobyAhPSBOVUxMKTsKKy0KKyAJICBkeW5jb24gPSBvLT5jb250ZW50czsKKyAJICBkeW5jb25lbmQgPSBvLT5jb250ZW50cyArIG8tPnNpemU7CisgCSAgZm9yICg7IGR5bmNvbiA8IGR5bmNvbmVuZDsgZHluY29uICs9IGJlZC0+cy0+c2l6ZW9mX2R5bikKK0BAIC0xMTAwNyw3ICsxMTAwNSw3IEBACisgCSAgICAgIGlmIChkeW4uZF90YWcgPT0gRFRfVEVYVFJFTCkKKyAJCXsKKyAJCSBpbmZvLT5jYWxsYmFja3MtPmVpbmZvCistCQkgICAgKF8oIiVQOiB3YXJuaW5nOiBjcmVhdGluZyBhIERUX1RFWFRSRUwgaW4gYSBzaGFyZWQgb2JqZWN0LlxuIikpOworKwkJICAgIChfKCIlUDogd2FybmluZzogY3JlYXRpbmcgYSBEVF9URVhUUkVMIGluIG9iamVjdC5cbiIpKTsKKyAJCSAgYnJlYWs7CisgCQl9CisgCSAgICB9CitkaWZmIC1kdXJOIGJpbnV0aWxzLTIuMjAuMS5vcmlnL2xkL2xkbWFpbi5jIGJpbnV0aWxzLTIuMjAuMS9sZC9sZG1haW4uYworLS0tIGJpbnV0aWxzLTIuMjAuMS5vcmlnL2xkL2xkbWFpbi5jCTIwMDktMDktMTQgMTM6NDM6MjkuMDAwMDAwMDAwICswMjAwCisrKysgYmludXRpbHMtMi4yMC4xL2xkL2xkbWFpbi5jCTIwMTAtMDgtMTcgMTk6MzI6MTMuMDAwMDAwMDAwICswMjAwCitAQCAtMjgwLDYgKzI4MCw3IEBACisgICBlbXVsYXRpb24gPSBnZXRfZW11bGF0aW9uIChhcmdjLCBhcmd2KTsKKyAgIGxkZW11bF9jaG9vc2VfbW9kZSAoZW11bGF0aW9uKTsKKyAgIGRlZmF1bHRfdGFyZ2V0ID0gbGRlbXVsX2Nob29zZV90YXJnZXQgKGFyZ2MsIGFyZ3YpOworKyAgbGlua19pbmZvLndhcm5fc2hhcmVkX3RleHRyZWwgPSBUUlVFOworICAgY29uZmlnLm1heHBhZ2VzaXplID0gYmZkX2VtdWxfZ2V0X21heHBhZ2VzaXplIChkZWZhdWx0X3RhcmdldCk7CisgICBjb25maWcuY29tbW9ucGFnZXNpemUgPSBiZmRfZW11bF9nZXRfY29tbW9ucGFnZXNpemUgKGRlZmF1bHRfdGFyZ2V0KTsKKyAgIGxhbmdfaW5pdCAoKTsKK2RpZmYgLWR1ck4gYmludXRpbHMtMi4yMC4xLm9yaWcvbGQvdGVzdHN1aXRlL2xpYi9sZC1saWIuZXhwIGJpbnV0aWxzLTIuMjAuMS9sZC90ZXN0c3VpdGUvbGliL2xkLWxpYi5leHAKKy0tLSBiaW51dGlscy0yLjIwLjEub3JpZy9sZC90ZXN0c3VpdGUvbGliL2xkLWxpYi5leHAJMjAwOS0xMC0wMiAxMjo1MToxMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBiaW51dGlscy0yLjIwLjEvbGQvdGVzdHN1aXRlL2xpYi9sZC1saWIuZXhwCTIwMTAtMDgtMTcgMTk6MzI6MTMuMDAwMDAwMDAwICswMjAwCitAQCAtMTk2LDYgKzE5NiwxMCBAQAorICAgICAjIHN5bWJvbCwgc2luY2UgdGhlIGRlZmF1bHQgbGlua2VyIHNjcmlwdCBtaWdodCB1c2UgRU5UUlkuCisgICAgIHJlZ3N1YiAtYWxsICIoXnxcbikoXFteXG5cXSo6IHdhcm5pbmc6IGNhbm5vdCBmaW5kIGVudHJ5IHN5bWJvbFxbXlxuXF0qXG4/KSIgJGV4ZWNfb3V0cHV0ICJcXDEiIGV4ZWNfb3V0cHV0CisgCisrICAgICMgR2VudG9vIHR3ZWFrOgorKyAgICAjIFdlIHdhbnQgdG8gaWdub3JlIFRFWFRSRUwgd2FybmluZ3Mgc2luY2Ugd2UgZm9yY2UgZW5hYmxlIHRoZW0gYnkgZGVmYXVsdAorKyAgICByZWdzdWIgLWFsbCAiXmx0LWxkLW5ldzogd2FybmluZzogY3JlYXRpbmcgYSBEVF9URVhUUkVMIGluIG9iamVjdFwuIiAkZXhlY19vdXRwdXQgIlxcMSIgZXhlY19vdXRwdXQKKysKKyAgICAgaWYgW3N0cmluZyBtYXRjaCAiIiAkZXhlY19vdXRwdXRdIHRoZW4geworIAlyZXR1cm4gMQorICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMjAuMWEvMTkwLXVzZS1uZXctbGQtZHRhZ3MucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4yMC4xYS8xOTAtdXNlLW5ldy1sZC1kdGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTRlYTk5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMjAuMWEvMTkwLXVzZS1uZXctbGQtZHRhZ3MucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorCisKK2RpZmYgLWR1ck4gYmludXRpbHMtMi4yMC4xLm9yaWcvbGQvbGRtYWluLmMgYmludXRpbHMtMi4yMC4xL2xkL2xkbWFpbi5jCistLS0gYmludXRpbHMtMi4yMC4xLm9yaWcvbGQvbGRtYWluLmMJMjAxMC0wOC0xNyAxOTozMjoxMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBiaW51dGlscy0yLjIwLjEvbGQvbGRtYWluLmMJMjAxMC0wOC0xNyAxOTozMjoxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNjIsNiArMjYyLDcgQEAKKyAKKyAgIGxpbmtfaW5mby5hbGxvd191bmRlZmluZWRfdmVyc2lvbiA9IFRSVUU7CisgICBsaW5rX2luZm8ua2VlcF9tZW1vcnkgPSBUUlVFOworKyAgbGlua19pbmZvLm5ld19kdGFncyA9IFRSVUU7CisgICBsaW5rX2luZm8uY29tYnJlbG9jID0gVFJVRTsKKyAgIGxpbmtfaW5mby5zdHJpcF9kaXNjYXJkZWQgPSBUUlVFOworICAgbGlua19pbmZvLmVtaXRfaGFzaCA9IFRSVUU7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4yMC4xYS8yMDAtZG9jdW1lbnQtbmV3LWR0YWdzLWJlaGF2aW91ci5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjIwLjFhLzIwMC1kb2N1bWVudC1uZXctZHRhZ3MtYmVoYXZpb3VyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYjU3NjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4yMC4xYS8yMDAtZG9jdW1lbnQtbmV3LWR0YWdzLWJlaGF2aW91ci5wYXRjaApAQCAtMCwwICsxLDE4IEBACitJbmRleDogYmludXRpbHMtMi4xOS41MS4wLjUvbGQvbGQudGV4aW5mbworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitkaWZmIC1kdXJOIGJpbnV0aWxzLTIuMjAuMS5vcmlnL2xkL2xkLnRleGluZm8gYmludXRpbHMtMi4yMC4xL2xkL2xkLnRleGluZm8KKy0tLSBiaW51dGlscy0yLjIwLjEub3JpZy9sZC9sZC50ZXhpbmZvCTIwMDktMDctMDYgMTU6NDg6NTEuMDAwMDAwMDAwICswMjAwCisrKysgYmludXRpbHMtMi4yMC4xL2xkL2xkLnRleGluZm8JMjAxMC0wOC0xNyAxOTozMjoxNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMDI2LDggKzIwMjYsOSBAQAorIHN5c3RlbXMgbWF5IG5vdCB1bmRlcnN0YW5kIHRoZW0uIElmIHlvdSBzcGVjaWZ5CisgQG9wdGlvbnstLWVuYWJsZS1uZXctZHRhZ3N9LCB0aGUgZHluYW1pYyB0YWdzIHdpbGwgYmUgY3JlYXRlZCBhcyBuZWVkZWQuCisgSWYgeW91IHNwZWNpZnkgQG9wdGlvbnstLWRpc2FibGUtbmV3LWR0YWdzfSwgbm8gbmV3IGR5bmFtaWMgdGFncyB3aWxsIGJlCistY3JlYXRlZC4gQnkgZGVmYXVsdCwgdGhlIG5ldyBkeW5hbWljIHRhZ3MgYXJlIG5vdCBjcmVhdGVkLiBOb3RlIHRoYXQKKy10aG9zZSBvcHRpb25zIGFyZSBvbmx5IGF2YWlsYWJsZSBmb3IgRUxGIHN5c3RlbXMuCisrY3JlYXRlZC4gT24gR2VudG9vLCBieSBkZWZhdWx0LCB0aGUgbmV3IGR5bmFtaWMgdGFncyBhcmUgY3JlYXRlZCAodGhpcworK2RpZmZlcnMgZnJvbSB1cHN0cmVhbSBiZWhhdmlvdXIpLiBOb3RlIHRoYXQgdGhvc2Ugb3B0aW9ucyBhcmUgb25seQorK2F2YWlsYWJsZSBmb3IgRUxGIHN5c3RlbXMuCisgCisgQGtpbmRleCAtLWhhc2gtc2l6ZT1AdmFye251bWJlcn0KKyBAaXRlbSAtLWhhc2gtc2l6ZT1AdmFye251bWJlcn0KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjIwLjFhLzIyMC11c2UtcmVscm8ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4yMC4xYS8yMjAtdXNlLXJlbHJvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MGQwYTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4yMC4xYS8yMjAtdXNlLXJlbHJvLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKKworCitkaWZmIC1kdXJOIGJpbnV0aWxzLTIuMjAuMS5vcmlnL2xkL2xkbWFpbi5jIGJpbnV0aWxzLTIuMjAuMS9sZC9sZG1haW4uYworLS0tIGJpbnV0aWxzLTIuMjAuMS5vcmlnL2xkL2xkbWFpbi5jCTIwMTAtMDgtMTcgMTk6MzI6MTcuMDAwMDAwMDAwICswMjAwCisrKysgYmludXRpbHMtMi4yMC4xL2xkL2xkbWFpbi5jCTIwMTAtMDgtMTcgMTk6MzI6MTguMDAwMDAwMDAwICswMjAwCitAQCAtMjY0LDYgKzI2NCw3IEBACisgICBsaW5rX2luZm8ua2VlcF9tZW1vcnkgPSBUUlVFOworICAgbGlua19pbmZvLm5ld19kdGFncyA9IFRSVUU7CisgICBsaW5rX2luZm8uY29tYnJlbG9jID0gVFJVRTsKKysgIGxpbmtfaW5mby5yZWxybyA9IFRSVUU7CisgICBsaW5rX2luZm8uc3RyaXBfZGlzY2FyZGVkID0gVFJVRTsKKyAgIGxpbmtfaW5mby5lbWl0X2hhc2ggPSBUUlVFOworICNpZm5kZWYgX19taXBzX18KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjIwLjFhLzIzMC1saWJpYmVydHktcGljLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMjAuMWEvMjMwLWxpYmliZXJ0eS1waWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE1YTc3MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjIwLjFhLzIzMC1saWJpYmVydHktcGljLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKKworCitkaWZmIC1kdXJOIGJpbnV0aWxzLTIuMjAuMS5vcmlnL2xpYmliZXJ0eS9NYWtlZmlsZS5pbiBiaW51dGlscy0yLjIwLjEvbGliaWJlcnR5L01ha2VmaWxlLmluCistLS0gYmludXRpbHMtMi4yMC4xLm9yaWcvbGliaWJlcnR5L01ha2VmaWxlLmluCTIwMDktMDgtMjMgMjE6MDM6NTguMDAwMDAwMDAwICswMjAwCisrKysgYmludXRpbHMtMi4yMC4xL2xpYmliZXJ0eS9NYWtlZmlsZS5pbgkyMDEwLTA4LTE3IDE5OjMyOjE5LjAwMDAwMDAwMCArMDIwMAorQEAgLTIyNyw2ICsyMjcsNyBAQAorIAkgICQoQVIpICQoQVJfRkxBR1MpICQoVEFSR0VUTElCKSBcCisgCSAgICAkKFJFUVVJUkVEX09GSUxFUykgJChFWFRSQV9PRklMRVMpICQoTElCT0JKUyk7IFwKKyAJICAkKFJBTkxJQikgJChUQVJHRVRMSUIpOyBcCisrCSAgY3AgJChUQVJHRVRMSUIpIC4uLyA7IFwKKyAJICBjZCAuLjsgXAorIAllbHNlIHRydWU7IGZpCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4yMC4xYS8yNDAtbGRfbWFrZWZpbGUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4yMC4xYS8yNDAtbGRfbWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI0MGEwNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjIwLjFhLzI0MC1sZF9tYWtlZmlsZS5wYXRjaApAQCAtMCwwICsxLDI3IEBACitEZXNjcmlwdGlvbjogY29ycmVjdCB3aGVyZSBsZCBzY3JpcHRzIGFyZSBpbnN0YWxsZWQKK0F1dGhvcjogQ2hyaXMgQ2hpbWVsaXMgPGNocmlzQGRlYmlhbi5vcmc+CisKK2RpZmYgLWR1ck4gYmludXRpbHMtMi4yMC4xLm9yaWcvbGQvTWFrZWZpbGUuYW0gYmludXRpbHMtMi4yMC4xL2xkL01ha2VmaWxlLmFtCistLS0gYmludXRpbHMtMi4yMC4xLm9yaWcvbGQvTWFrZWZpbGUuYW0JMjAxMC0wMi0yMiAwOTowNzowMS4wMDAwMDAwMDAgKzAxMDAKKysrKyBiaW51dGlscy0yLjIwLjEvbGQvTWFrZWZpbGUuYW0JMjAxMC0wOC0xNyAxOTozMjoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNCw3ICsyNCw3IEBACisgIyBXZSBwdXQgdGhlIHNjcmlwdHMgaW4gdGhlIGRpcmVjdG9yeSAkKHNjcmlwdGRpcikvbGRzY3JpcHRzLgorICMgV2UgY2FuJ3QgcHV0IHRoZSBzY3JpcHRzIGluICQoZGF0YWRpcikgYmVjYXVzZSB0aGUgU0VBUkNIX0RJUgorICMgZGlyZWN0aXZlcyBuZWVkIHRvIGJlIGRpZmZlcmVudCBmb3IgbmF0aXZlIGFuZCBjcm9zcyBsaW5rZXJzLgorLXNjcmlwdGRpciA9ICQodG9vbGRpcikvbGliCisrc2NyaXB0ZGlyID0gJChsaWJkaXIpCisgCisgRU1VTCA9IEBFTVVMQAorIEVNVUxBVElPTl9PRklMRVMgPSBARU1VTEFUSU9OX09GSUxFU0AKK2RpZmYgLWR1ck4gYmludXRpbHMtMi4yMC4xLm9yaWcvbGQvTWFrZWZpbGUuaW4gYmludXRpbHMtMi4yMC4xL2xkL01ha2VmaWxlLmluCistLS0gYmludXRpbHMtMi4yMC4xLm9yaWcvbGQvTWFrZWZpbGUuaW4JMjAxMC0wMy0wMyAxNTowNjoyMS4wMDAwMDAwMDAgKzAxMDAKKysrKyBiaW51dGlscy0yLjIwLjEvbGQvTWFrZWZpbGUuaW4JMjAxMC0wOC0xNyAxOTozMjoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMzMsNyArMzMzLDcgQEAKKyAjIFdlIHB1dCB0aGUgc2NyaXB0cyBpbiB0aGUgZGlyZWN0b3J5ICQoc2NyaXB0ZGlyKS9sZHNjcmlwdHMuCisgIyBXZSBjYW4ndCBwdXQgdGhlIHNjcmlwdHMgaW4gJChkYXRhZGlyKSBiZWNhdXNlIHRoZSBTRUFSQ0hfRElSCisgIyBkaXJlY3RpdmVzIG5lZWQgdG8gYmUgZGlmZmVyZW50IGZvciBuYXRpdmUgYW5kIGNyb3NzIGxpbmtlcnMuCistc2NyaXB0ZGlyID0gJCh0b29sZGlyKS9saWIKKytzY3JpcHRkaXIgPSAkKGxpYmRpcikKKyBCQVNFRElSID0gJChzcmNkaXIpLy4uCisgQkZERElSID0gJChCQVNFRElSKS9iZmQKKyBJTkNESVIgPSAkKEJBU0VESVIpL2luY2x1ZGUKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjIwLjFhLzI1MC1hcm0tZWFiaS1jb25mLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMjAuMWEvMjUwLWFybS1lYWJpLWNvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc5YTg3ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjIwLjFhLzI1MC1hcm0tZWFiaS1jb25mLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK2RpZmYgLXUgYmludXRpbHMtMi4yMC5vcmlnL2NvbmZpZ3VyZSBiaW51dGlscy0yLjIwL2NvbmZpZ3VyZQorCitkaWZmIC1kdXJOIGJpbnV0aWxzLTIuMjAuMS5vcmlnL2NvbmZpZ3VyZSBiaW51dGlscy0yLjIwLjEvY29uZmlndXJlCistLS0gYmludXRpbHMtMi4yMC4xLm9yaWcvY29uZmlndXJlCTIwMTAtMDgtMTcgMTk6MzI6MDcuMDAwMDAwMDAwICswMjAwCisrKysgYmludXRpbHMtMi4yMC4xL2NvbmZpZ3VyZQkyMDEwLTA4LTE3IDE5OjMyOjIyLjAwMDAwMDAwMCArMDIwMAorQEAgLTMwODYsNyArMzA4Niw3IEBACisgICAgIG5vY29uZmlnZGlycz0iJG5vY29uZmlnZGlycyB0YXJnZXQtbGliZmZpIHRhcmdldC1xdGhyZWFkcyIKKyAgICAgbGliZ2xvc3NfZGlyPWFybQorICAgICA7OworLSAgYXJtKi0qLWxpbnV4LWdudWVhYmkpCisrICBhcm0qLSotbGludXgtKmdudWVhYmkpCisgICAgIG5vY29uZmlnZGlycz0iJG5vY29uZmlnZGlycyB0YXJnZXQtcXRocmVhZHMiCisgICAgIGNhc2UgJHt3aXRoX25ld2xpYn0gaW4KKyAgICAgICBubykgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzIHRhcmdldC1uZXdsaWIgdGFyZ2V0LWxpYmdsb3NzIgorZGlmZiAtZHVyTiBiaW51dGlscy0yLjIwLjEub3JpZy9jb25maWd1cmUuYWMgYmludXRpbHMtMi4yMC4xL2NvbmZpZ3VyZS5hYworLS0tIGJpbnV0aWxzLTIuMjAuMS5vcmlnL2NvbmZpZ3VyZS5hYwkyMDEwLTA4LTE3IDE5OjMyOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGJpbnV0aWxzLTIuMjAuMS9jb25maWd1cmUuYWMJMjAxMC0wOC0xNyAxOTozMjoyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC01NzMsNyArNTczLDcgQEAKKyAgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzIHRhcmdldC1saWJmZmkgdGFyZ2V0LXF0aHJlYWRzIgorICAgICBsaWJnbG9zc19kaXI9YXJtCisgICAgIDs7CistICBhcm0qLSotbGludXgtZ251ZWFiaSkKKysgIGFybSotKi1saW51eC0qZ251ZWFiaSkKKyAgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzIHRhcmdldC1xdGhyZWFkcyIKKyAgICAgY2FzZSAke3dpdGhfbmV3bGlifSBpbgorICAgICAgIG5vKSBub2NvbmZpZ2RpcnM9IiRub2NvbmZpZ2RpcnMgdGFyZ2V0LW5ld2xpYiB0YXJnZXQtbGliZ2xvc3MiCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4yMC4xYS8yNzAtYmV0dGVyX2ZpbGVfZXJyb3IucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4yMC4xYS8yNzAtYmV0dGVyX2ZpbGVfZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg4MDQ2NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjIwLjFhLzI3MC1iZXR0ZXJfZmlsZV9lcnJvci5wYXRjaApAQCAtMCwwICsxLDQ1IEBACisjIS9iaW4vc2ggLWUKKyMjIDAwNl9iZXR0ZXJfZmlsZV9lcnJvci5kcGF0Y2ggYnkgRGF2aWQgS2ltZG9uIDxkd2hlZG9uQGdvcmRpYW4uY29tPgorIyMKKyMjIEFsbCBsaW5lcyBiZWdpbm5pbmcgd2l0aCBgIyMgRFA6JyBhcmUgYSBkZXNjcmlwdGlvbiBvZiB0aGUgcGF0Y2guCisjIyBEUDogU3BlY2lmeSB3aGljaCBmaWxlbmFtZSBpcyBjYXVzaW5nIGFuIGVycm9yIGlmIHRoZSBmaWxlbmFtZSBpcyBhCisjIyBEUDogZGlyZWN0b3J5LiAoIzQ1ODMyKQorCitpZiBbICQjIC1uZSAxIF07IHRoZW4KKyAgICBlY2hvID4mMiAiYGJhc2VuYW1lICQwYDogc2NyaXB0IGV4cGVjdHMgLXBhdGNofC11bnBhdGNoIGFzIGFyZ3VtZW50IgorICAgIGV4aXQgMQorZmkKKworWyAtZiBkZWJpYW4vcGF0Y2hlcy8wMHBhdGNoLW9wdHMgXSAmJiAuIGRlYmlhbi9wYXRjaGVzLzAwcGF0Y2gtb3B0cworcGF0Y2hfb3B0cz0iJHtwYXRjaF9vcHRzOi0tZiAtLW5vLWJhY2t1cC1pZi1taXNtYXRjaH0iCisKK2Nhc2UgIiQxIiBpbgorICAgICAgIC1wYXRjaCkgcGF0Y2ggJHBhdGNoX29wdHMgLXAxIDwgJDA7OworICAgICAgIC11bnBhdGNoKSBwYXRjaCAkcGF0Y2hfb3B0cyAtcDEgLVIgPCAkMDs7CisgICAgICAgICopCisgICAgICAgICAgICAgICAgZWNobyA+JjIgImBiYXNlbmFtZSAkMGA6IHNjcmlwdCBleHBlY3RzIC1wYXRjaHwtdW5wYXRjaCBhcyBhcmd1bWVudCIKKyAgICAgICAgICAgICAgICBleGl0IDE7OworZXNhYworCitleGl0IDAKKworQERQQVRDSEAKK2RpZmYgLXVyTmFkIC9ob21lL2phbWVzL2RlYmlhbi9wYWNrYWdlcy9iaW51dGlscy9iaW51dGlscy0yLjE0LjkwLjAuNi9iZmQvb3BuY2xzLmMgYmludXRpbHMtMi4xNC45MC4wLjYvYmZkL29wbmNscy5jCisKK2RpZmYgLWR1ck4gYmludXRpbHMtMi4yMC4xLm9yaWcvYmZkL29wbmNscy5jIGJpbnV0aWxzLTIuMjAuMS9iZmQvb3BuY2xzLmMKKy0tLSBiaW51dGlscy0yLjIwLjEub3JpZy9iZmQvb3BuY2xzLmMJMjAxMC0wMS0xNCAxMTo0ODoyMi4wMDAwMDAwMDAgKzAxMDAKKysrKyBiaW51dGlscy0yLjIwLjEvYmZkL29wbmNscy5jCTIwMTAtMDgtMTcgMTk6MzI6MjMuMDAwMDAwMDAwICswMjAwCitAQCAtMTgzLDYgKzE4MywxMyBAQAorIHsKKyAgIGJmZCAqbmJmZDsKKyAgIGNvbnN0IGJmZF90YXJnZXQgKnRhcmdldF92ZWM7CisrICBzdHJ1Y3Qgc3RhdCBzOworKworKyAgaWYgKHN0YXQgKGZpbGVuYW1lLCAmcykgPT0gMCkKKysgICAgaWYgKFNfSVNESVIocy5zdF9tb2RlKSkgeworKyAgICAgIGJmZF9zZXRfZXJyb3IgKGJmZF9lcnJvcl9maWxlX25vdF9yZWNvZ25pemVkKTsKKysgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorIAorICAgbmJmZCA9IF9iZmRfbmV3X2JmZCAoKTsKKyAgIGlmIChuYmZkID09IE5VTEwpCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4yMC4xYS8yODAtdW5leHBvcnRfTERfTElCUkFSWV9QQVRILnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMjAuMWEvMjgwLXVuZXhwb3J0X0xEX0xJQlJBUllfUEFUSC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTllZTQwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMjAuMWEvMjgwLXVuZXhwb3J0X0xEX0xJQlJBUllfUEFUSC5wYXRjaApAQCAtMCwwICsxLDk2IEBACitEZXNjcmlwdGlvbjoKKworVGhpcyBwYXRjaCBpcyBuZWVkZWQgaW4gc2l0dWF0aW9ucyB3aGVyZSBidWlsZCBzeXN0ZW0gaXMgcnVubmluZyBzYW1lIHZlcnNpb24gb2YKK2JpbnV0aWxzIHRoYXQgaXMgaW50ZW5kZWQgdG8gYmUgYnVpbHQgIGNyb3NzLW5hdGl2ZSAoIGJ1aWxkICE9IGhvc3QgPSB0YXJnZXQpCisgYW5kIGhhcyBzaGFyZWQgbGlicmFyaWVzIGVuYWJsZWQuIGJpbnV0aWxzL2JpbnV0aWxzCitNYWtlZmlsZSBoYXMgc29tZSB0b29scyB3aGljaCBhcmUgYnVpbHQgdG8gcnVuIG9uIGJ1aWxkIHN5c3RlbS4gVG9wbGV2ZWwgbWFrZWZpbGUKK2ZvciBiaW51dGlscyBwYXNzZXMgSE9TVF9FWFBPUlRTIHRvIHN1Yi1tYWtlZmlsZXMgd2hpY2ggYWxzbyBpbmNsdWRlIFJQQVRIX0VOVlZBUlMKK2NvbnRhaW5pbmcgTERfTElCUkFSWV9QQVRIIHdoaWNoIGlzIG1vZGlmaWVkIHNvIHRoYXQgaXQgYWxzbyBpbmNsdWRlcyBob3N0IGxpYnJhcmllcworbGlrZSBvcGNvZGVzIGFuZCBsaWJiZmQgd2hpY2ggYXJlIGp1c3QgYnVpbHQgZm9yIHRoZSBob3N0IHN5c3RlbS4gCisKK05vdyB0aGUgcHJvYmxlbSBpcyB0aGF0IHNhbWUgTERfTElCUkFSWV9QQVRIIHZhbHVlIGdldHMgc2V0IGluIGVudmlyb25tZW50IGV2ZW4KK2ZvciB0aGUgdG9vbHMgdGhhdCBhcmUgYmVpbmcgYnVpbHQgZm9yIGJ1aWxkIHN5c3RlbSB1c2luZyBDQ19GT1JfQlVJTEQgYW5kIHRoZSB0b29scworbGlrZSBhcyxsZCBpdCBpbnZva2VzIGZyb20gYnVpbGQgbWFjaGluZSBnZXQgdGhlIExEX0xJQlJBUllfUEFUSCBzZXQgdG8gc2VhcmNoCit0aGUgbmV3bHkgYnVpbGQgaG9zdCBsaWJyYXJpZXMgbGlrZSBvcGNvZGVzIGFuZCBiZmQgYW5kIGlmIGhvc3QgaXMgbGlrZSBhIGJpZyBlbmRpYW4KK3N5c3RlbSBzYXkgKG1pcHMtbGludXgpIHRoZSBidWlsZCBzeXN0ZW0gbGlua2VyIGFuZCBhc3NlbWJsZXIgZG8gbm90IHJ1biBiZWNhdXNlCitsZC5zbyB0cmllcyB0byBsb2FkIHRoZXNlIHNoYXJlZCBsaWJyYXJpZXMgaW5zdGVhZCBvZiB0aGUgb25lcyBmcm9tIC91c3IvbGliIGZvciAKK3RoZSBidWlsZCB0b29scy4gCisKK1RoaXMgcGF0Y2ggZml4ZXMgdGhlIGlzc3VlIGJ5IGNsZWFyaW5nIExEX0xJQlJBUllfUEFUSCBmb3IgQlVJTEQgdG9vbHMKKworVGhpcyBwYXRjaCB3b3VsZCBiZSBuZWVkZWQgb24gb3RoZXIgdmVyc2lvbnMgb2YgYmludXRpbHMuIEkganVzdCBjYXJlZCBhYm91dCAyLjIwCitNYXkgYmUgdXBzdHJlYW0gaXMgYWxzbyBpbnRlcmVzdGVkIGluIHN1Y2ggYSBwYXRjaC4KKworLUtoZW0KKworSW5kZXg6IGJpbnV0aWxzLTIuMjAvYmludXRpbHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworZGlmZiAtZHVyTiBiaW51dGlscy0yLjIwLjEub3JpZy9iaW51dGlscy9NYWtlZmlsZS5hbSBiaW51dGlscy0yLjIwLjEvYmludXRpbHMvTWFrZWZpbGUuYW0KKy0tLSBiaW51dGlscy0yLjIwLjEub3JpZy9iaW51dGlscy9NYWtlZmlsZS5hbQkyMDEwLTAxLTE0IDExOjQ4OjIyLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbnV0aWxzLTIuMjAuMS9iaW51dGlscy9NYWtlZmlsZS5hbQkyMDEwLTA4LTE3IDE5OjMyOjI0LjAwMDAwMDAwMCArMDIwMAorQEAgLTI1MSwyNCArMjUxLDI0IEBACisgCS4vc3lzaW5mbyQoRVhFRVhUX0ZPUl9CVUlMRCkgLWQgPCQoc3JjZGlyKS9zeXNyb2ZmLmluZm8gPnN5c3JvZmYuaAorIAorIHN5c2luZm8kKEVYRUVYVF9GT1JfQlVJTEQpOiBzeXNpbmZvLm8gc3lzbGV4Lm8KKy0JJChDQ19GT1JfQlVJTEQpICQoQ0ZMQUdTX0ZPUl9CVUlMRCkgJChMREZMQUdTX0ZPUl9CVUlMRCkgLW8gJEAgc3lzaW5mby5vIHN5c2xleC5vCisrCUxEX0xJQlJBUllfUEFUSD0gJChDQ19GT1JfQlVJTEQpICQoQ0ZMQUdTX0ZPUl9CVUlMRCkgJChMREZMQUdTX0ZPUl9CVUlMRCkgLW8gJEAgc3lzaW5mby5vIHN5c2xleC5vCisgCisgc3lzbGV4Lm86IHN5c2xleC5jIHN5c2luZm8uaCBjb25maWcuaAorIAlpZiBbIC1yIHN5c2xleC5jIF07IHRoZW4gXAorLQkgICQoQ0NfRk9SX0JVSUxEKSAtYyAtSS4gJChBTV9DRkxBR1MpICQoQ0ZMQUdTX0ZPUl9CVUlMRCkgJChOT19XRVJST1IpIHN5c2xleC5jIDsgXAorKwkgIExEX0xJQlJBUllfUEFUSD0gJChDQ19GT1JfQlVJTEQpIC1jIC1JLiAkKEFNX0NGTEFHUykgJChDRkxBR1NfRk9SX0JVSUxEKSAkKE5PX1dFUlJPUikgc3lzbGV4LmMgOyBcCisgCWVsc2UgXAorLQkgICQoQ0NfRk9SX0JVSUxEKSAtYyAtSS4gLUkkKHNyY2RpcikgJChBTV9DRkxBR1MpICQoQ0ZMQUdTX0ZPUl9CVUlMRCkgJChOT19XRVJST1IpICQoc3JjZGlyKS9zeXNsZXguYyA7XAorKwkgIExEX0xJQlJBUllfUEFUSD0gJChDQ19GT1JfQlVJTEQpIC1jIC1JLiAtSSQoc3JjZGlyKSAkKEFNX0NGTEFHUykgJChDRkxBR1NfRk9SX0JVSUxEKSAkKE5PX1dFUlJPUikgJChzcmNkaXIpL3N5c2xleC5jIDtcCisgCWZpCisgCisgc3lzaW5mby5vOiBzeXNpbmZvLmMKKyAJaWYgWyAtciBzeXNpbmZvLmMgXTsgdGhlbiBcCistCSAgJChDQ19GT1JfQlVJTEQpIC1jIC1JLiAkKEFNX0NGTEFHUykgJChDRkxBR1NfRk9SX0JVSUxEKSAkKE5PX1dFUlJPUikgc3lzaW5mby5jIDsgXAorKwkgIExEX0xJQlJBUllfUEFUSD0gJChDQ19GT1JfQlVJTEQpIC1jIC1JLiAkKEFNX0NGTEFHUykgJChDRkxBR1NfRk9SX0JVSUxEKSAkKE5PX1dFUlJPUikgc3lzaW5mby5jIDsgXAorIAllbHNlIFwKKy0JICAkKENDX0ZPUl9CVUlMRCkgLWMgLUkuICQoQU1fQ0ZMQUdTKSAkKENGTEFHU19GT1JfQlVJTEQpICQoTk9fV0VSUk9SKSAkKHNyY2Rpcikvc3lzaW5mby5jIDsgXAorKwkgIExEX0xJQlJBUllfUEFUSD0gJChDQ19GT1JfQlVJTEQpIC1jIC1JLiAkKEFNX0NGTEFHUykgJChDRkxBR1NfRk9SX0JVSUxEKSAkKE5PX1dFUlJPUikgJChzcmNkaXIpL3N5c2luZm8uYyA7IFwKKyAJZmkKKyAKKyBiaW4yYyQoRVhFRVhUX0ZPUl9CVUlMRCk6CistCSQoQ0NfRk9SX0JVSUxEKSAtbyAkQCAkKEFNX0NQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1NfRk9SX0JVSUxEKSAkKExERkxBR1NfRk9SX0JVSUxEKSAkKHNyY2RpcikvYmluMmMuYyAkKHNyY2RpcikvdmVyc2lvbi5jCisrCUxEX0xJQlJBUllfUEFUSD0gJChDQ19GT1JfQlVJTEQpIC1vICRAICQoQU1fQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHU19GT1JfQlVJTEQpICQoTERGTEFHU19GT1JfQlVJTEQpICQoc3JjZGlyKS9iaW4yYy5jICQoc3JjZGlyKS92ZXJzaW9uLmMKKyAKKyBlbWJlZHNwdTogZW1iZWRzcHUuc2gKKyAJc2VkICJzQF5wcm9ncmFtX3RyYW5zZm9ybV9uYW1lPUBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSlAIiA8ICQ8ID4gJEAKK2RpZmYgLWR1ck4gYmludXRpbHMtMi4yMC4xLm9yaWcvYmludXRpbHMvTWFrZWZpbGUuaW4gYmludXRpbHMtMi4yMC4xL2JpbnV0aWxzL01ha2VmaWxlLmluCistLS0gYmludXRpbHMtMi4yMC4xLm9yaWcvYmludXRpbHMvTWFrZWZpbGUuaW4JMjAxMC0wMy0wMyAxNDo1OTo0Ni4wMDAwMDAwMDAgKzAxMDAKKysrKyBiaW51dGlscy0yLjIwLjEvYmludXRpbHMvTWFrZWZpbGUuaW4JMjAxMC0wOC0xNyAxOTozMjoyNC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMTkzLDI0ICsxMTkzLDI0IEBACisgCS4vc3lzaW5mbyQoRVhFRVhUX0ZPUl9CVUlMRCkgLWQgPCQoc3JjZGlyKS9zeXNyb2ZmLmluZm8gPnN5c3JvZmYuaAorIAorIHN5c2luZm8kKEVYRUVYVF9GT1JfQlVJTEQpOiBzeXNpbmZvLm8gc3lzbGV4Lm8KKy0JJChDQ19GT1JfQlVJTEQpICQoQ0ZMQUdTX0ZPUl9CVUlMRCkgJChMREZMQUdTX0ZPUl9CVUlMRCkgLW8gJEAgc3lzaW5mby5vIHN5c2xleC5vCisrCUxEX0xJQlJBUllfUEFUSD0gJChDQ19GT1JfQlVJTEQpICQoQ0ZMQUdTX0ZPUl9CVUlMRCkgJChMREZMQUdTX0ZPUl9CVUlMRCkgLW8gJEAgc3lzaW5mby5vIHN5c2xleC5vCisgCisgc3lzbGV4Lm86IHN5c2xleC5jIHN5c2luZm8uaCBjb25maWcuaAorIAlpZiBbIC1yIHN5c2xleC5jIF07IHRoZW4gXAorLQkgICQoQ0NfRk9SX0JVSUxEKSAtYyAtSS4gJChBTV9DRkxBR1MpICQoQ0ZMQUdTX0ZPUl9CVUlMRCkgJChOT19XRVJST1IpIHN5c2xleC5jIDsgXAorKwkgIExEX0xJQlJBUllfUEFUSD0gJChDQ19GT1JfQlVJTEQpIC1jIC1JLiAkKEFNX0NGTEFHUykgJChDRkxBR1NfRk9SX0JVSUxEKSAkKE5PX1dFUlJPUikgc3lzbGV4LmMgOyBcCisgCWVsc2UgXAorLQkgICQoQ0NfRk9SX0JVSUxEKSAtYyAtSS4gLUkkKHNyY2RpcikgJChBTV9DRkxBR1MpICQoQ0ZMQUdTX0ZPUl9CVUlMRCkgJChOT19XRVJST1IpICQoc3JjZGlyKS9zeXNsZXguYyA7XAorKwkgIExEX0xJQlJBUllfUEFUSD0gJChDQ19GT1JfQlVJTEQpIC1jIC1JLiAtSSQoc3JjZGlyKSAkKEFNX0NGTEFHUykgJChDRkxBR1NfRk9SX0JVSUxEKSAkKE5PX1dFUlJPUikgJChzcmNkaXIpL3N5c2xleC5jIDtcCisgCWZpCisgCisgc3lzaW5mby5vOiBzeXNpbmZvLmMKKyAJaWYgWyAtciBzeXNpbmZvLmMgXTsgdGhlbiBcCistCSAgJChDQ19GT1JfQlVJTEQpIC1jIC1JLiAkKEFNX0NGTEFHUykgJChDRkxBR1NfRk9SX0JVSUxEKSAkKE5PX1dFUlJPUikgc3lzaW5mby5jIDsgXAorKwkgIExEX0xJQlJBUllfUEFUSD0gJChDQ19GT1JfQlVJTEQpIC1jIC1JLiAkKEFNX0NGTEFHUykgJChDRkxBR1NfRk9SX0JVSUxEKSAkKE5PX1dFUlJPUikgc3lzaW5mby5jIDsgXAorIAllbHNlIFwKKy0JICAkKENDX0ZPUl9CVUlMRCkgLWMgLUkuICQoQU1fQ0ZMQUdTKSAkKENGTEFHU19GT1JfQlVJTEQpICQoTk9fV0VSUk9SKSAkKHNyY2Rpcikvc3lzaW5mby5jIDsgXAorKwkgIExEX0xJQlJBUllfUEFUSD0gJChDQ19GT1JfQlVJTEQpIC1jIC1JLiAkKEFNX0NGTEFHUykgJChDRkxBR1NfRk9SX0JVSUxEKSAkKE5PX1dFUlJPUikgJChzcmNkaXIpL3N5c2luZm8uYyA7IFwKKyAJZmkKKyAKKyBiaW4yYyQoRVhFRVhUX0ZPUl9CVUlMRCk6CistCSQoQ0NfRk9SX0JVSUxEKSAtbyAkQCAkKEFNX0NQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1NfRk9SX0JVSUxEKSAkKExERkxBR1NfRk9SX0JVSUxEKSAkKHNyY2RpcikvYmluMmMuYyAkKHNyY2RpcikvdmVyc2lvbi5jCisrCUxEX0xJQlJBUllfUEFUSD0gJChDQ19GT1JfQlVJTEQpIC1vICRAICQoQU1fQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHU19GT1JfQlVJTEQpICQoTERGTEFHU19GT1JfQlVJTEQpICQoc3JjZGlyKS9iaW4yYy5jICQoc3JjZGlyKS92ZXJzaW9uLmMKKyAKKyBlbWJlZHNwdTogZW1iZWRzcHUuc2gKKyAJc2VkICJzQF5wcm9ncmFtX3RyYW5zZm9ybV9uYW1lPUBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSlAIiA8ICQ8ID4gJEAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjIwLjFhLzI5MC1sZC1zdHViLWNyYXNoLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMjAuMWEvMjkwLWxkLXN0dWItY3Jhc2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQwMjMxYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjIwLjFhLzI5MC1sZC1zdHViLWNyYXNoLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK2RpZmYgLXAgLWMgLXUgLXIxLjE5NiBlbGYzMi1hcm0uYworCitkaWZmIC1kdXJOIGJpbnV0aWxzLTIuMjAuMS5vcmlnL2JmZC9lbGYzMi1hcm0uYyBiaW51dGlscy0yLjIwLjEvYmZkL2VsZjMyLWFybS5jCistLS0gYmludXRpbHMtMi4yMC4xLm9yaWcvYmZkL2VsZjMyLWFybS5jCTIwMTAtMDItMjIgMDk6MDY6NDguMDAwMDAwMDAwICswMTAwCisrKysgYmludXRpbHMtMi4yMC4xL2JmZC9lbGYzMi1hcm0uYwkyMDEwLTA4LTE3IDE5OjMyOjI1LjAwMDAwMDAwMCArMDIwMAorQEAgLTMxOTQsMTEgKzMxOTQsMTUgQEAKKyAKKyAJICAvKiBXZSBoYXZlIGFuIGV4dHJhIDItYnl0ZXMgcmVhY2ggYmVjYXVzZSBvZgorIAkgICAgIHRoZSBtb2RlIGNoYW5nZSAoYml0IDI0IChIKSBvZiBCTFggZW5jb2RpbmcpLiAgKi8KKysJICAvKiBBIHN0dWIgaXMgbmVlZGVkIG9ubHkgaWYgdGhpcyBjYWxsIGlzIG5vdCB0aHJvdWdodCBhIFBMVAorKwkgICAgIGVudHJ5LCBiZWNhdXNlIFBMVCBzdHVicyBoYW5kbGUgbW9kZSBzd2l0Y2hpbmcKKysJICAgICBhbHJlYWR5LiAgKi8KKyAJICBpZiAoYnJhbmNoX29mZnNldCA+IChBUk1fTUFYX0ZXRF9CUkFOQ0hfT0ZGU0VUICsgMikKKyAJICAgICAgfHwgKGJyYW5jaF9vZmZzZXQgPCBBUk1fTUFYX0JXRF9CUkFOQ0hfT0ZGU0VUKQorLQkgICAgICB8fCAoKHJfdHlwZSA9PSBSX0FSTV9DQUxMKSAmJiAhZ2xvYmFscy0+dXNlX2JseCkKKy0JICAgICAgfHwgKHJfdHlwZSA9PSBSX0FSTV9KVU1QMjQpCistCSAgICAgIHx8IChyX3R5cGUgPT0gUl9BUk1fUExUMzIpKQorKwkgICAgICB8fCAoICgoKHJfdHlwZSA9PSBSX0FSTV9DQUxMKSAmJiAhZ2xvYmFscy0+dXNlX2JseCkKKysJCSAgICB8fCAocl90eXBlID09IFJfQVJNX0pVTVAyNCkKKysJCSAgICB8fCAocl90eXBlID09IFJfQVJNX1BMVDMyKSkKKysJCSAgICYmICF1c2VfcGx0KSkKKyAJICAgIHsKKyAJICAgICAgc3R1Yl90eXBlID0gKGluZm8tPnNoYXJlZCB8IGdsb2JhbHMtPnBpY192ZW5lZXIpCisgCQkvKiBQSUMgc3R1YnMuICAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMjAuMWEvMzAwLW1pcHM2NC1kZWZhdWx0ZW11bC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjIwLjFhLzMwMC1taXBzNjQtZGVmYXVsdGVtdWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE4YzRmZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjIwLjFhLzMwMC1taXBzNjQtZGVmYXVsdGVtdWwucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorCisKK2RpZmYgLWR1ck4gYmludXRpbHMtMi4yMC4xLm9yaWcvbGQvY29uZmlndXJlLnRndCBiaW51dGlscy0yLjIwLjEvbGQvY29uZmlndXJlLnRndAorLS0tIGJpbnV0aWxzLTIuMjAuMS5vcmlnL2xkL2NvbmZpZ3VyZS50Z3QJMjAwOS0wOC0wNiAxOTozODowMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBiaW51dGlscy0yLjIwLjEvbGQvY29uZmlndXJlLnRndAkyMDEwLTA4LTE3IDE5OjMyOjI2LjAwMDAwMDAwMCArMDIwMAorQEAgLTQwMCwxMSArNDAwLDExIEBACisgbWlwcyotKi12eHdvcmtzKikJdGFyZ19lbXVsPWVsZjMyZWJtaXB2eHdvcmtzCisgCQkgICAgICAgIHRhcmdfZXh0cmFfZW11bHM9ImVsZjMyZWxtaXB2eHdvcmtzIiA7OworIG1pcHMqLSotd2luZGlzcykJdGFyZ19lbXVsPWVsZjMybWlwc3dpbmRpc3MgOzsKKy1taXBzNjQqZWwtKi1saW51eC0qKQl0YXJnX2VtdWw9ZWxmMzJsdHNtaXBuMzIKKy0JCQl0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmJ0c21pcG4zMiBlbGYzMmx0c21pcCBlbGYzMmJ0c21pcCBlbGY2NGx0c21pcCBlbGY2NGJ0c21pcCIKKyttaXBzNjQqZWwtKi1saW51eC0qKQl0YXJnX2VtdWw9ZWxmNjRsdHNtaXAKKysJCQl0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmx0c21pcG4zMiBlbGYzMmJ0c21pcG4zMiBlbGYzMmx0c21pcCBlbGYzMmJ0c21pcCBlbGY2NGJ0c21pcCIKKyAJCQl0YXJnX2V4dHJhX2xpYnBhdGg9JHRhcmdfZXh0cmFfZW11bHMgOzsKKy1taXBzNjQqLSotbGludXgtKikJdGFyZ19lbXVsPWVsZjMyYnRzbWlwbjMyCistCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJsdHNtaXBuMzIgZWxmMzJidHNtaXAgZWxmMzJsdHNtaXAgZWxmNjRidHNtaXAgZWxmNjRsdHNtaXAiCisrbWlwczY0Ki0qLWxpbnV4LSopCXRhcmdfZW11bD1lbGY2NGJ0c21pcAorKwkJCXRhcmdfZXh0cmFfZW11bHM9ImVsZjMyYnRzbWlwbjMyIGVsZjMybHRzbWlwbjMyIGVsZjMyYnRzbWlwIGVsZjMybHRzbWlwIGVsZjY0bHRzbWlwIgorIAkJCXRhcmdfZXh0cmFfbGlicGF0aD0kdGFyZ19leHRyYV9lbXVscyA7OworIG1pcHMqZWwtKi1saW51eC0qKQl0YXJnX2VtdWw9ZWxmMzJsdHNtaXAKKyAJCQl0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmJ0c21pcCBlbGYzMmx0c21pcG4zMiBlbGY2NGx0c21pcCBlbGYzMmJ0c21pcG4zMiBlbGY2NGJ0c21pcCIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjIxLjFhLzExMC1hcm0tZWFiaS1jb25mLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMjEuMWEvMTEwLWFybS1lYWJpLWNvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJiNDkxZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjIxLjFhLzExMC1hcm0tZWFiaS1jb25mLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK2RpZmYgLWR1ck4gYmludXRpbHMtMi4yMS4xLm9yaWcvY29uZmlndXJlIGJpbnV0aWxzLTIuMjEuMS9jb25maWd1cmUKKy0tLSBiaW51dGlscy0yLjIxLjEub3JpZy9jb25maWd1cmUJMjAxMS0wNi0yNyAwOTozOTowMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBiaW51dGlscy0yLjIxLjEvY29uZmlndXJlCTIwMTEtMDktMTIgMTM6Mzk6MDYuMjkyMjUxMjkzICswMjAwCitAQCAtMzE4MCw3ICszMTgwLDcgQEAKKyAgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzIHRhcmdldC1saWJmZmkgdGFyZ2V0LXF0aHJlYWRzIgorICAgICBsaWJnbG9zc19kaXI9YXJtCisgICAgIDs7CistICBhcm0qLSotbGludXgtZ251ZWFiaSkKKysgIGFybSotKi1saW51eC0qZ251ZWFiaSkKKyAgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzIHRhcmdldC1xdGhyZWFkcyIKKyAgICAgY2FzZSAke3dpdGhfbmV3bGlifSBpbgorICAgICAgIG5vKSBub2NvbmZpZ2RpcnM9IiRub2NvbmZpZ2RpcnMgdGFyZ2V0LW5ld2xpYiB0YXJnZXQtbGliZ2xvc3MiCitkaWZmIC1kdXJOIGJpbnV0aWxzLTIuMjEuMS5vcmlnL2NvbmZpZ3VyZS5hYyBiaW51dGlscy0yLjIxLjEvY29uZmlndXJlLmFjCistLS0gYmludXRpbHMtMi4yMS4xLm9yaWcvY29uZmlndXJlLmFjCTIwMTEtMDYtMjcgMTE6MDg6NTMuMDAwMDAwMDAwICswMjAwCisrKysgYmludXRpbHMtMi4yMS4xL2NvbmZpZ3VyZS5hYwkyMDExLTA5LTEyIDEzOjM5OjA2LjMwODkxNzg5NSArMDIwMAorQEAgLTY1Miw3ICs2NTIsNyBAQAorICAgICBub2NvbmZpZ2RpcnM9IiRub2NvbmZpZ2RpcnMgdGFyZ2V0LWxpYmZmaSB0YXJnZXQtcXRocmVhZHMiCisgICAgIGxpYmdsb3NzX2Rpcj1hcm0KKyAgICAgOzsKKy0gIGFybSotKi1saW51eC1nbnVlYWJpKQorKyAgYXJtKi0qLWxpbnV4LSpnbnVlYWJpKQorICAgICBub2NvbmZpZ2RpcnM9IiRub2NvbmZpZ2RpcnMgdGFyZ2V0LXF0aHJlYWRzIgorICAgICBjYXNlICR7d2l0aF9uZXdsaWJ9IGluCisgICAgICAgbm8pIG5vY29uZmlnZGlycz0iJG5vY29uZmlnZGlycyB0YXJnZXQtbmV3bGliIHRhcmdldC1saWJnbG9zcyIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjIxLjFhLzEyMC1zaC1jb25mLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMjEuMWEvMTIwLXNoLWNvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlkMTJlYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjIxLjFhLzEyMC1zaC1jb25mLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK2RpZmYgLWR1ck4gYmludXRpbHMtMi4yMS4xLm9yaWcvY29uZmlndXJlIGJpbnV0aWxzLTIuMjEuMS9jb25maWd1cmUKKy0tLSBiaW51dGlscy0yLjIxLjEub3JpZy9jb25maWd1cmUJMjAxMS0wOS0xMiAxMzozOTowNi4yOTIyNTEyOTMgKzAyMDAKKysrKyBiaW51dGlscy0yLjIxLjEvY29uZmlndXJlCTIwMTEtMDktMTIgMTM6Mzk6MDcuMTM1NTgxMzgxICswMjAwCitAQCAtMzE0OCw3ICszMTQ4LDcgQEAKKyAgIGFtMzNfMi4wLSotbGludXgqKQorICAgICBub2NvbmZpZ2RpcnM9IiRub2NvbmZpZ2RpcnMgJHtsaWJnY2p9IHRhcmdldC1uZXdsaWIgdGFyZ2V0LWxpYmdsb3NzIgorICAgICA7OworLSAgc2gtKi1saW51eCopCisrICBzaCotKi1saW51eCopCisgICAgIG5vY29uZmlnZGlycz0iJG5vY29uZmlnZGlycyAke2xpYmdjan0gdGFyZ2V0LW5ld2xpYiB0YXJnZXQtbGliZ2xvc3MiCisgICAgIDs7CisgICBzaCotKi1wZXxtaXBzKi0qLXBlfCphcm0td2luY2UtcGUpCitAQCAtMzQ4Nyw3ICszNDg3LDcgQEAKKyAgIHJvbXAtKi0qKQorICAgICBub2NvbmZpZ2RpcnM9IiRub2NvbmZpZ2RpcnMgYmZkIGJpbnV0aWxzIGxkIGdhcyBvcGNvZGVzIHRhcmdldC1saWJnbG9zcyAke2xpYmdjan0iCisgICAgIDs7CistICBzaC0qLSogfCBzaDY0LSotKikKKysgIHNoKi0qLSogfCBzaDY0LSotKikKKyAgICAgY2FzZSAiJHtob3N0fSIgaW4KKyAgICAgICBpWzM0NTY3ODldODYtKi12c3RhKSA7OyAjIGRvbid0IGFkZCBncHJvZiBiYWNrIGluCisgICAgICAgaVszNDU2Nzg5XTg2LSotZ28zMiopIDs7ICMgZG9uJ3QgYWRkIGdwcm9mIGJhY2sgaW4KK2RpZmYgLWR1ck4gYmludXRpbHMtMi4yMS4xLm9yaWcvY29uZmlndXJlLmFjIGJpbnV0aWxzLTIuMjEuMS9jb25maWd1cmUuYWMKKy0tLSBiaW51dGlscy0yLjIxLjEub3JpZy9jb25maWd1cmUuYWMJMjAxMS0wOS0xMiAxMzozOTowNi4zMDg5MTc4OTUgKzAyMDAKKysrKyBiaW51dGlscy0yLjIxLjEvY29uZmlndXJlLmFjCTIwMTEtMDktMTIgMTM6Mzk6MDcuMTQ1NTgxMzQyICswMjAwCitAQCAtNjIwLDcgKzYyMCw3IEBACisgICBhbTMzXzIuMC0qLWxpbnV4KikKKyAgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzICR7bGliZ2NqfSB0YXJnZXQtbmV3bGliIHRhcmdldC1saWJnbG9zcyIKKyAgICAgOzsKKy0gIHNoLSotbGludXgqKQorKyAgc2gqLSotbGludXgqKQorICAgICBub2NvbmZpZ2RpcnM9IiRub2NvbmZpZ2RpcnMgJHtsaWJnY2p9IHRhcmdldC1uZXdsaWIgdGFyZ2V0LWxpYmdsb3NzIgorICAgICA7OyAgICAKKyAgIHNoKi0qLXBlfG1pcHMqLSotcGV8KmFybS13aW5jZS1wZSkKK0BAIC05NTksNyArOTU5LDcgQEAKKyAgIHJvbXAtKi0qKQorICAgICBub2NvbmZpZ2RpcnM9IiRub2NvbmZpZ2RpcnMgYmZkIGJpbnV0aWxzIGxkIGdhcyBvcGNvZGVzIHRhcmdldC1saWJnbG9zcyAke2xpYmdjan0iCisgICAgIDs7CistICBzaC0qLSogfCBzaDY0LSotKikKKysgIHNoKi0qLSogfCBzaDY0LSotKikKKyAgICAgY2FzZSAiJHtob3N0fSIgaW4KKyAgICAgICBpW1szNDU2Nzg5XV04Ni0qLXZzdGEpIDs7ICMgZG9uJ3QgYWRkIGdwcm9mIGJhY2sgaW4KKyAgICAgICBpW1szNDU2Nzg5XV04Ni0qLWdvMzIqKSA7OyAjIGRvbid0IGFkZCBncHJvZiBiYWNrIGluCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4yMS4xYS8zMDAtMDAxX2xkX21ha2VmaWxlX3BhdGNoLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMjEuMWEvMzAwLTAwMV9sZF9tYWtlZmlsZV9wYXRjaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWMwYTNmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2JpbnV0aWxzLzIuMjEuMWEvMzAwLTAwMV9sZF9tYWtlZmlsZV9wYXRjaC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitkaWZmIC1kdXJOIGJpbnV0aWxzLTIuMjEuMS5vcmlnL2xkL01ha2VmaWxlLmFtIGJpbnV0aWxzLTIuMjEuMS9sZC9NYWtlZmlsZS5hbQorLS0tIGJpbnV0aWxzLTIuMjEuMS5vcmlnL2xkL01ha2VmaWxlLmFtCTIwMTEtMDMtMTYgMDk6Mzc6MzAuMDAwMDAwMDAwICswMTAwCisrKysgYmludXRpbHMtMi4yMS4xL2xkL01ha2VmaWxlLmFtCTIwMTEtMDktMTIgMTM6Mzk6MDcuOTYyMjQ0ODY2ICswMjAwCitAQCAtMzcsNyArMzcsNyBAQAorICMgV2UgcHV0IHRoZSBzY3JpcHRzIGluIHRoZSBkaXJlY3RvcnkgJChzY3JpcHRkaXIpL2xkc2NyaXB0cy4KKyAjIFdlIGNhbid0IHB1dCB0aGUgc2NyaXB0cyBpbiAkKGRhdGFkaXIpIGJlY2F1c2UgdGhlIFNFQVJDSF9ESVIKKyAjIGRpcmVjdGl2ZXMgbmVlZCB0byBiZSBkaWZmZXJlbnQgZm9yIG5hdGl2ZSBhbmQgY3Jvc3MgbGlua2Vycy4KKy1zY3JpcHRkaXIgPSAkKHRvb2xkaXIpL2xpYgorK3NjcmlwdGRpciA9ICQobGliZGlyKQorIAorIEVNVUwgPSBARU1VTEAKKyBFTVVMQVRJT05fT0ZJTEVTID0gQEVNVUxBVElPTl9PRklMRVNACitkaWZmIC1kdXJOIGJpbnV0aWxzLTIuMjEuMS5vcmlnL2xkL01ha2VmaWxlLmluIGJpbnV0aWxzLTIuMjEuMS9sZC9NYWtlZmlsZS5pbgorLS0tIGJpbnV0aWxzLTIuMjEuMS5vcmlnL2xkL01ha2VmaWxlLmluCTIwMTEtMDMtMTYgMDk6Mzc6MzAuMDAwMDAwMDAwICswMTAwCisrKysgYmludXRpbHMtMi4yMS4xL2xkL01ha2VmaWxlLmluCTIwMTEtMDktMTIgMTM6Mzk6MDcuOTYyMjQ0ODY2ICswMjAwCitAQCAtMzY1LDcgKzM2NSw3IEBACisgIyBXZSBwdXQgdGhlIHNjcmlwdHMgaW4gdGhlIGRpcmVjdG9yeSAkKHNjcmlwdGRpcikvbGRzY3JpcHRzLgorICMgV2UgY2FuJ3QgcHV0IHRoZSBzY3JpcHRzIGluICQoZGF0YWRpcikgYmVjYXVzZSB0aGUgU0VBUkNIX0RJUgorICMgZGlyZWN0aXZlcyBuZWVkIHRvIGJlIGRpZmZlcmVudCBmb3IgbmF0aXZlIGFuZCBjcm9zcyBsaW5rZXJzLgorLXNjcmlwdGRpciA9ICQodG9vbGRpcikvbGliCisrc2NyaXB0ZGlyID0gJChsaWJkaXIpCisgQkFTRURJUiA9ICQoc3JjZGlyKS8uLgorIEJGRERJUiA9ICQoQkFTRURJUikvYmZkCisgSU5DRElSID0gJChCQVNFRElSKS9pbmNsdWRlCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4yMS4xYS8zMDAtMDEyX2NoZWNrX2xkcnVucGF0aF9sZW5ndGgucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvYmludXRpbHMvMi4yMS4xYS8zMDAtMDEyX2NoZWNrX2xkcnVucGF0aF9sZW5ndGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM1MzkzYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9iaW51dGlscy8yLjIxLjFhLzMwMC0wMTJfY2hlY2tfbGRydW5wYXRoX2xlbmd0aC5wYXRjaApAQCAtMCwwICsxLDIxIEBACitkaWZmIC1kdXJOIGJpbnV0aWxzLTIuMjEuMS5vcmlnL2xkL2VtdWx0ZW1wbC9lbGYzMi5lbSBiaW51dGlscy0yLjIxLjEvbGQvZW11bHRlbXBsL2VsZjMyLmVtCistLS0gYmludXRpbHMtMi4yMS4xLm9yaWcvbGQvZW11bHRlbXBsL2VsZjMyLmVtCTIwMTEtMDYtMjcgMDk6Mzk6MTQuMDAwMDAwMDAwICswMjAwCisrKysgYmludXRpbHMtMi4yMS4xL2xkL2VtdWx0ZW1wbC9lbGYzMi5lbQkyMDExLTA5LTEyIDEzOjM5OjA4LjgwODkwODI3NCArMDIwMAorQEAgLTEyNzIsNiArMTI3Miw4IEBACisgCSAgICAgICYmIGNvbW1hbmRfbGluZS5ycGF0aCA9PSBOVUxMKQorIAkgICAgeworIAkgICAgICBsaWJfcGF0aCA9IChjb25zdCBjaGFyICopIGdldGVudiAoIkxEX1JVTl9QQVRIIik7CisrCSAgICAgIGlmICgobGliX3BhdGgpICYmIChzdHJsZW4gKGxpYl9wYXRoKSA9PSAwKSkKKysJICAgICAgCWxpYl9wYXRoID0gTlVMTDsKKyAJICAgICAgaWYgKGdsZCR7RU1VTEFUSU9OX05BTUV9X3NlYXJjaF9uZWVkZWQgKGxpYl9wYXRoLCAmbiwKKyAJCQkJCQkgICAgICBmb3JjZSkpCisgCQlicmVhazsKK0BAIC0xNDk5LDYgKzE1MDEsOCBAQAorICAgcnBhdGggPSBjb21tYW5kX2xpbmUucnBhdGg7CisgICBpZiAocnBhdGggPT0gTlVMTCkKKyAgICAgcnBhdGggPSAoY29uc3QgY2hhciAqKSBnZXRlbnYgKCJMRF9SVU5fUEFUSCIpOworKyAgaWYgKChycGF0aCkgJiYgKHN0cmxlbiAocnBhdGgpID09IDApKQorKyAgCXJwYXRoID0gTlVMTDsKKyAKKyAgIGZvciAoYWJmZCA9IGxpbmtfaW5mby5pbnB1dF9iZmRzOyBhYmZkOyBhYmZkID0gYWJmZC0+bGlua19uZXh0KQorICAgICBpZiAoYmZkX2dldF9mbGF2b3VyIChhYmZkKSA9PSBiZmRfdGFyZ2V0X2VsZl9mbGF2b3VyKQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2N5Z3dpbi8xLjUuMTUtMS8xMDAtY3Jvc3NidWlsZC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9jeWd3aW4vMS41LjE1LTEvMTAwLWNyb3NzYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMxMjQwMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9jeWd3aW4vMS41LjE1LTEvMTAwLWNyb3NzYnVpbGQucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorTWVzc2FnZS1JRDogPDQyNjkxNzNGLjcwMjA3MDVAemVlMi5jb20+CitEYXRlOiBGcmksIDIyIEFwciAyMDA1IDE2OjI0OjQ3ICswMTAwCitGcm9tOiBTdGV2ZSBQYXBhY2hhcmFsYW1ib3VzIDxzdGV2ZXBAemVlMi5jb20+CitUbzogIlJvYmVydCBQLiBKLiBEYXkiIDxycGpkYXlAbWluZHNwcmluZy5jb20+CitDQzogY3Jvc3NnY2MgbGlzdCA8Y3Jvc3NnY2NAc291cmNlcy5yZWRoYXQuY29tPgorU3ViamVjdDogUmU6IGN5Z3dpbiBzb3VyY2UgZGlyZWN0b3J5IGhhcyBtb3ZlZAorSW4tUmVwbHktVG86IDxQaW5lLkxOWC40LjYxLjA1MDQxODE3NDYwNTAuMTE3OTRAbG9jYWxob3N0LmxvY2FsZG9tYWluPgorCitIaSBSb2JlcnQsCisKK0kndmUgYXR0YWNoZWQgdHdvIHBhdGNoZXM6CisKKzEvICBGb3IgY3Jvc3N0b29sLTAuMzEgd2hpY2ggY2hhbmdlcyB0aGUgQ1lHV0lOX1VSTCB0byBvbmUgd2hpY2ggaGFzIHRoZQorY3lnd2luIHNvdXJjZSBhcmNoaXZlcy4gIFRoZSB2ZXJzaW9uIG9mIGN5Z3dpbiB0aGF0IGlzIHVzZWQgdG8gYnVpbGQgdGhlCitjcm9zcyB0b29sY2hhaW4gaGFzIGJlZW4gY2hhbmdlZCB0byBjeWd3aW4tMS41LjE1LTEtc3JjLnRhci5iejIgc2luY2UKK21vc3Qgb2YgdGhlIG1pcnJvciBzaXRlcyBkb24ndCBzZWVtIHRvIGhhdmUgdGhlIG9yaWdpbmFsIGFyY2hpdmUgdXNlZC4KK1tjcmVhdGVkIGdjYy0zLjMuMi1jeWd3aW4tMS41LjE1LTEuZGF0IC0gZGFua10KKworCisyLyBUaGUgbGF0ZXIgY3lnd2luIHNvdXJjZSBhcmNoaXZlIGZhaWxzIHRvIGNyb3NzIGJ1aWxkIHdpdGggdGhlIGVycm9yOgorL29wdC9jcm9zc3Rvb2wvaTY4Ni1wYy1jeWd3aW4vZ2NjLTMuMy4yLWN5Z3dpbi0xLjUuMTUtMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi9iaW4vbGQ6CitjYW5ub3QgZmluZCAtbHVzZXIzMgorCit1bmxlc3MgdGhlIHNlY29uZCBwYXRjaCBpcyBhcHBsaWVkLAorCisKK2RpZmYgLXVOciBjeWd3aW4tMS41LjE1LTEub3JpZy93aW5zdXAvbWluZ3cvTWFrZWZpbGUuaW4gY3lnd2luLTEuNS4xNS0xL3dpbnN1cC9taW5ndy9NYWtlZmlsZS5pbgorLS0tIGN5Z3dpbi0xLjUuMTUtMS5vcmlnL3dpbnN1cC9taW5ndy9NYWtlZmlsZS5pbgkyMDA1LTAyLTI4IDIyOjUxOjAyLjAwMDAwMDAwMCArMDAwMAorKysrIGN5Z3dpbi0xLjUuMTUtMS93aW5zdXAvbWluZ3cvTWFrZWZpbGUuaW4JMjAwNS0wNC0yMiAxNToyOToxOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC03MSw3ICs3MSw3IEBACisgbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpIEBNS0lOU1RBTExESVJTQAorIAorIENDIDo9IEBDQ0AKKy1vdmVycmlkZSBDQyA6PSAke2ZpbHRlci1vdXQgLUwlIC1CJSwke3NoZWxsIGVjaG8gJChDQykgfCBzZWQgLWUgJ3MlXCgtaXN5c3RlbVx8LWl3aXRocHJlZml4YmVmb3JlXCkgICpbXiBdKlwoIFx8JCRcKSUgJWcnfX0KKytvdmVycmlkZSBDQyA6PSAke2ZpbHRlci1vdXQgLUIlLCR7c2hlbGwgZWNobyAkKENDKSB8IHNlZCAtZSAncyVcKC1pc3lzdGVtXHwtaXdpdGhwcmVmaXhiZWZvcmVcKSAgKlteIF0qXCggXHwkJFwpJSAlZyd9fQorICMgRklYTUU6IFdoaWNoIGlzIGl0LCBDQyBvciBDQ19GT1JfVEFSR0VUPworIENDX0ZPUl9UQVJHRVQgPSAkKENDKQorIEFTX0ZPUl9UQVJHRVQgPSAkKEFTKQorCisKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9kbWFsbG9jLzUuNS4yLzEwMC11c2UteHRvb2xzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2RtYWxsb2MvNS41LjIvMTAwLXVzZS14dG9vbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgwOTdmYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9kbWFsbG9jLzUuNS4yLzEwMC11c2UteHRvb2xzLnBhdGNoCkBAIC0wLDAgKzEsNTggQEAKK1RoaXMgcGF0Y2ggbWFrZXMgY29uZmlndXJlIHVzZSB0aGUgY3Jvc3MgbGQgYW5kIGFyIHJhdGhlciB0aGFuIHRoZSBuYXRpdmUgdG9vbHMuCisKK0l0IHdhcyBidWlsZCB1cCBieSBZYW5uIEUuIE1PUklOIDx5YW5uLm1vcmluLjE5OThAYW5jaWVucy5lbmliLmZyPiBmcm9tIHNvbWUKK2JpdHMgZ2F0aGVyZWQgZnJvbSBidWlsZHJvb3QsIHdoaWNoIGlzIExHUEwgdjIuMQorTGljZW5zZSBmb3IgZG1hbGxvYyBpczoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yCisgKiBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlCisgKiBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwKKyAqIGNvcGllcywgYW5kIHRoYXQgdGhlIG5hbWUgb2YgR3JheSBXYXRzb24gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcKKyAqIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZG9jdW1lbnQgb3Igc29mdHdhcmUKKyAqIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqCisgKiBHcmF5IFdhdHNvbiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoZQorICogc29mdHdhcmUgZGVzY3JpYmVkIGhlcmVpbiBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKworSSBwZXJzb25uYWx5IGJlbGlldmUgdGhhdCB0aGUgcmVzdWx0aW5nIGNvZGUgc2hvdWxkIHRoZXJlZm9yZSBiZQorTEdQTCB2Mi4xLCBidXQgZG9uJ3QgYmVsaWV2ZSBtZSwgYXNrIHlvdXIgbGF3eWVycyEKKworZGlmZiAtZHVyIGRtYWxsb2MtNS41LjIub3JpZy9jb25maWd1cmUgZG1hbGxvYy01LjUuMi9jb25maWd1cmUKKy0tLSBkbWFsbG9jLTUuNS4yLm9yaWcvY29uZmlndXJlCTIwMDctMDUtMTQgMTk6MjY6MTQuMDAwMDAwMDAwICswMjAwCisrKysgZG1hbGxvYy01LjUuMi9jb25maWd1cmUJMjAwNy0wNS0xOCAxMTozODoyNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC00NDE4LDE0ICs0NDE4LDE0IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorIAorIAkjIHNvIG5vdyB3ZSB0cnkgdG8gY3JlYXRlIGFuIGFyY2hpdmUgZnJvbSB0aGUgY29tcGlsZWQgLm8gZmlsZQorLQkoYXIgY3IgY29uZnRlc3QuYSBjb25mdGVzdC5vKSAyPiY1CisrCSgke0FSfSBjciBjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8pIDI+JjUKKyAJIyBzZWUgd2hpY2ggc2hhcmVkLWxpYnJhcnkgbGQgY29tbWFuZHMgd29yaworIAkjCisgCSMgRGFyd2luL01hYyBPUyBYIC0gVGVycnkgVGVhZ3VlCisgCSMgdXNlcm5hbWUgdGVycnlfdGVhZ3VlIGF0IGRvbWFpbiB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQKKyAJYWNfY3Zfc2hhcmVkX2xpYl9saW5rX29ianM9bm8KKyAJaWYgdGVzdCBgdW5hbWVgID0gIkRhcndpbiI7IHRoZW4KKy0gICAgICAgICAgaWYgKGxkIC1keWxpYiAtbyBjb25mdGVzdC5zby50IC1sYyBjb25mdGVzdC5hKSAyPiY1OyB0aGVuCisrICAgICAgICAgIGlmICgke0xEfSAtZHlsaWIgLW8gY29uZnRlc3Quc28udCAtbGMgY29uZnRlc3QuYSkgMj4mNTsgdGhlbgorICAgICAgICAgICAgICMgQnkgY29udmVudGlvbiBvbiBzb21lIHBsYXRmb3JtcworICAgICAgICAgICAgICMgbGliTExMLnNvLCBsaWJMTEwuWC5zbyBhcmUgc3ltbGlua3MgdG8gbGliTExMLlguWS5aLnNvCisgICAgICAgICAgICAgIyB3aGVyZSBYLlkuWiBpcyB2ZXJzaW9uICMgKG1ham9yLm1pbm9yLmluY3JlbWVudCkgb2YgdGhlIGxpYnJhcnkKK0BAIC00NDQzLDEyICs0NDQzLDEyIEBACisgICAgICAgICAgICAgYWNfY3Zfc2hhcmVkX2xpbmtfYXJncz0nIyBDb3VsZCBub3QgY29uZmlndXJlIHNobGliIGxpbmtpbmcnCisgICAgICAgICAgICAgZW5hYmxlX3NobGliPW5vCisgICAgICAgICAgIGZpCistICAgICAgIGVsaWYgKGxkIC1zaGFyZWQgLS13aG9sZS1hcmNoaXZlIC1zb25hbWUgY29uZnRlc3Quc28gLW8gY29uZnRlc3Quc28udCBjb25mdGVzdC5hKSAyPiY1OyB0aGVuCistCQlhY19jdl9zaGFyZWRfbGlua19hcmdzPSdsZCAtc2hhcmVkIC0td2hvbGUtYXJjaGl2ZSAtc29uYW1lICRAIC1vICRALnQnCistCWVsaWYgKGxkIC1zaGFyZWQgLW8gY29uZnRlc3Quc28udCAtYWxsIC1zb25hbWUgY29uZnRlc3Quc28udCAtbm9uZSAtbGMgLWFsbCBjb25mdGVzdC5hKSAyPiY1OyB0aGVuCistCQlhY19jdl9zaGFyZWRfbGlua19hcmdzPSdsZCAtc2hhcmVkIC1vICRALnQgLWFsbCAtc29uYW1lICRAIC1ub25lIC1sYyAtYWxsJworLQllbGlmIChsZCAtRyAtbyBjb25mdGVzdC5zby50IGNvbmZ0ZXN0LmEpIDI+JjU7IHRoZW4KKy0JCWFjX2N2X3NoYXJlZF9saW5rX2FyZ3M9J2xkIC1HIC1vICRALnQnCisrICAgICAgIGVsaWYgKCR7TER9IC1zaGFyZWQgLS13aG9sZS1hcmNoaXZlIC1zb25hbWUgY29uZnRlc3Quc28gLW8gY29uZnRlc3Quc28udCBjb25mdGVzdC5hKSAyPiY1OyB0aGVuCisrCQlhY19jdl9zaGFyZWRfbGlua19hcmdzPSIke0xEfSInIC1zaGFyZWQgLS13aG9sZS1hcmNoaXZlIC1zb25hbWUgJEAgLW8gJEAudCcKKysJZWxpZiAoJHtMRH0gLXNoYXJlZCAtbyBjb25mdGVzdC5zby50IC1hbGwgLXNvbmFtZSBjb25mdGVzdC5zby50IC1ub25lIC1sYyAtYWxsIGNvbmZ0ZXN0LmEpIDI+JjU7IHRoZW4KKysJCWFjX2N2X3NoYXJlZF9saW5rX2FyZ3M9IiR7TER9IicgLXNoYXJlZCAtbyAkQC50IC1hbGwgLXNvbmFtZSAkQCAtbm9uZSAtbGMgLWFsbCcKKysJZWxpZiAoJHtMRH0gLUcgLW8gY29uZnRlc3Quc28udCBjb25mdGVzdC5hKSAyPiY1OyB0aGVuCisrCQlhY19jdl9zaGFyZWRfbGlua19hcmdzPSIke0xEfSInIC1HIC1vICRALnQnCisgCWVsc2UKKyAJCSMgb2ggd2VsbCwgdG9zcyBhbiBlcnJvcgorIAkJYWNfY3Zfc2hhcmVkX2xpbmtfYXJncz0nIyBDb3VsZCBub3QgY29uZmlndXJlIHNobGliIGxpbmtpbmcnCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZG1hbGxvYy81LjUuMi8xMTAtYmxvY2tfc2l6ZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9kbWFsbG9jLzUuNS4yLzExMC1ibG9ja19zaXplLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZDljNWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZG1hbGxvYy81LjUuMi8xMTAtYmxvY2tfc2l6ZS5wYXRjaApAQCAtMCwwICsxLDMyIEBACitUaGlzIHBhdGNoIHNldHMgdGhlIHBhZ2Ugc2l6ZSB0byBhIGRlZmF1bHQgMTIsIHRoYXQgaXMgYSA0S2lCIGJsb2NrIHNpemUuCitUZXN0aW5nIGZvciB0aGUgY29ycmVjdCBibG9jay1zaXplIGlzIGltcG9zc2libGUgd2hlbiBjcm9zcy1jb21waWxpbmcuCisKK0l0IHdhcyBidWlsZCB1cCBieSBZYW5uIEUuIE1PUklOIDx5YW5uLm1vcmluLjE5OThAYW5jaWVucy5lbmliLmZyPiBmcm9tIHNvbWUKK2JpdHMgZ2F0aGVyZWQgZnJvbSBidWlsZHJvb3QsIHdoaWNoIGlzIExHUEwgdjIuMQorTGljZW5zZSBmb3IgZG1hbGxvYyBpczoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yCisgKiBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlCisgKiBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwKKyAqIGNvcGllcywgYW5kIHRoYXQgdGhlIG5hbWUgb2YgR3JheSBXYXRzb24gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcKKyAqIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZG9jdW1lbnQgb3Igc29mdHdhcmUKKyAqIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqCisgKiBHcmF5IFdhdHNvbiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoZQorICogc29mdHdhcmUgZGVzY3JpYmVkIGhlcmVpbiBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKworSSBwZXJzb25uYWx5IGJlbGlldmUgdGhhdCB0aGUgcmVzdWx0aW5nIGNvZGUgc2hvdWxkIHRoZXJlZm9yZSBiZQorTEdQTCB2Mi4xLCBidXQgZG9uJ3QgYmVsaWV2ZSBtZSwgYXNrIHlvdXIgbGF3eWVycyEKKworZGlmZiAtZHVyIGRtYWxsb2MtNS41LjIub3JpZy9jb25maWd1cmUgZG1hbGxvYy01LjUuMi9jb25maWd1cmUKKy0tLSBkbWFsbG9jLTUuNS4yLm9yaWcvY29uZmlndXJlCTIwMDctMDUtMTQgMTk6MjY6MTQuMDAwMDAwMDAwICswMjAwCisrKysgZG1hbGxvYy01LjUuMi9jb25maWd1cmUJMjAwNy0wNS0xOCAxMTozODoyNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC01MzA2LDcgKzUzMDYsNyBAQAorIAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBiYXNpYy1ibG9jayBzaXplIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nIGJhc2ljLWJsb2NrIHNpemUuLi4gJEVDSE9fQyIgPiY2CistYWNfY3ZfcGFnZV9zaXplPTAKKythY19jdl9wYWdlX3NpemU9MTIKKyBpZiB0ZXN0ICRhY19jdl9wYWdlX3NpemUgPSAwOyB0aGVuCisgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBydW4gdGVzdCBwcm9ncmFtIHdoaWxlIGNyb3NzIGNvbXBpbGluZwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2RtYWxsb2MvNS41LjIvMTIwLWcrK19jaGVjay5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9kbWFsbG9jLzUuNS4yLzEyMC1nKytfY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThmNzZmNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9kbWFsbG9jLzUuNS4yLzEyMC1nKytfY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorQ29ycmVjdGx5IGNoZWNrIGZvciBnKysgZXhpc3RlbmNlLgorCitDb3B5cmlnaHQgMjAwNyBZYW5uIEUuIE1PUklOIDx5YW5uLm1vcmluLjE5OThAYW5jaWVucy5lbmliLmZyPgorTGljZW5zZWQgdG8geW91IGFzIGRtYWxsb2MtNS41LjIgaXMuCisKK2RpZmYgLWR1ciBkbWFsbG9jLTUuNS4yLm9yaWcvY29uZmlndXJlIGRtYWxsb2MtNS41LjIvY29uZmlndXJlCistLS0gZG1hbGxvYy01LjUuMi5vcmlnL2NvbmZpZ3VyZQkyMDA3LTA1LTE4IDExOjQwOjMxLjAwMDAwMDAwMCArMDIwMAorKysrIGRtYWxsb2MtNS41LjIvY29uZmlndXJlCTIwMDctMDUtMTggMTE6NDI6MDIuMDAwMDAwMDAwICswMjAwCitAQCAtMjY0Myw3ICsyNjQzLDcgQEAKKyAKKyAKKyAjIHNlZSBpZiB3ZSBhY3R1YWxseSBoYXZlIGEgQ1hYIHByb2dyYW0KKy1pZiB0ZXN0ICIkYWNfY3ZfcHJvZ19DWFgiID0gIiIgLW8gISAteCAiJGFjX2N2X3Byb2dfQ1hYIjsgdGhlbgorK2lmIHRlc3QgIiRhY19jdl9wcm9nX0NYWCIgPSAiIiAtbyAhIC14IGB3aGljaCAiJGFjX2N2X3Byb2dfQ1hYImA7IHRoZW4KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogY291bGQgbm90IGZpbmQgQysrIGNvbXBpbGVyICRhY19jdl9wcm9nX0NYWCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjb3VsZCBub3QgZmluZCBDKysgY29tcGlsZXIgJGFjX2N2X3Byb2dfQ1hYIiA+JjI7fQorICAgICBlbmFibGVfY3h4PW5vCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZG1hbGxvYy81LjUuMi8xMzAtbWlwcy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9kbWFsbG9jLzUuNS4yLzEzMC1taXBzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZjBlNDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZG1hbGxvYy81LjUuMi8xMzAtbWlwcy5wYXRjaApAQCAtMCwwICsxLDY0IEBACitQYXRjaCB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBNSVBTIGNhc2UuCisKK0l0IHdhcyBidWlsZCB1cCBieSBZYW5uIEUuIE1PUklOIDx5YW5uLm1vcmluLjE5OThAYW5jaWVucy5lbmliLmZyPiBmcm9tIHNvbWUKK2JpdHMgZ2F0aGVyZWQgZnJvbSBidWlsZHJvb3QsIHdoaWNoIGlzIExHUEwgdjIuMQorTGljZW5zZSBmb3IgZG1hbGxvYyBpczoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yCisgKiBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlCisgKiBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwKKyAqIGNvcGllcywgYW5kIHRoYXQgdGhlIG5hbWUgb2YgR3JheSBXYXRzb24gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcKKyAqIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZG9jdW1lbnQgb3Igc29mdHdhcmUKKyAqIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqCisgKiBHcmF5IFdhdHNvbiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoZQorICogc29mdHdhcmUgZGVzY3JpYmVkIGhlcmVpbiBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKworSSBwZXJzb25uYWx5IGJlbGlldmUgdGhhdCB0aGUgcmVzdWx0aW5nIGNvZGUgc2hvdWxkIHRoZXJlZm9yZSBiZQorTEdQTCB2Mi4xLCBidXQgZG9uJ3QgYmVsaWV2ZSBtZSwgYXNrIHlvdXIgbGF3eWVycyEKKworZGlmZiAtZHVyIGRtYWxsb2MtNS41LjIub3JpZy9jb25maWd1cmUgZG1hbGxvYy01LjUuMi9jb25maWd1cmUKKy0tLSBkbWFsbG9jLTUuNS4yLm9yaWcvY29uZmlndXJlCTIwMDctMDUtMTggMTI6MTU6MzkuMDAwMDAwMDAwICswMjAwCisrKysgZG1hbGxvYy01LjUuMi9jb25maWd1cmUJMjAwNy0wNS0xOCAxMjoxNTo0OC4wMDAwMDAwMDAgKzAyMDAKK0BAIC03MTA3LDcgKzcxMDcsNyBAQAorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgcmV0dXJuLmggbWFjcm9zIHdvcmsuLi4gJEVDSE9fQyIgPiY2CisgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorLSNkZWZpbmUgUkVUVVJOX01BQ1JPU19XT1JLIDAKKysjZGVmaW5lIFJFVFVSTl9NQUNST1NfV09SSyAxCisgX0FDRU9GCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKyBlY2hvICIke0VDSE9fVH1ubyIgPiY2CitkaWZmIC1kdXIgZG1hbGxvYy01LjUuMi5vcmlnL3JldHVybi5oIGRtYWxsb2MtNS41LjIvcmV0dXJuLmgKKy0tLSBkbWFsbG9jLTUuNS4yLm9yaWcvcmV0dXJuLmgJMjAwNy0wNS0xNCAxOToyNjoxNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBkbWFsbG9jLTUuNS4yL3JldHVybi5oCTIwMDctMDUtMTggMTI6MTU6NDguMDAwMDAwMDAwICswMjAwCitAQCAtMTA2LDI2ICsxMDYsMTYgQEAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKKyAvKgorLSAqIEZvciBERUMgTWlwcyBtYWNoaW5lcyBydW5uaW5nIFVsdHJpeAorKyAqIEZvciBNaXBzIG1hY2hpbmVzIHJ1bm5pbmcgTGludXgKKyAgKi8KKyAjaWYgX19taXBzCisgCisgLyoKKy0gKiBJIGhhdmUgbm8gaWRlYSBob3cgdG8gZ2V0IGlubGluZSBhc3NlbWJseSB3aXRoIHRoZSBkZWZhdWx0IGNjLgorLSAqIEFueW9uZSBrbm93IGhvdz8KKy0gKi8KKy0KKy0jaWYgMAorLQorLS8qCisgICogTk9URTogd2UgYXNzdW1lIGhlcmUgdGhhdCBmaWxlIGlzIGdsb2JhbC4KKyAgKgorLSAqICQzMSBpcyB0aGUgZnJhbWUgcG9pbnRlci4gICQyIGxvb2tzIHRvIGJlIHRoZSByZXR1cm4gYWRkcmVzcyBidXQgbWF5YmUKKy0gKiBub3QgY29uc2lzdGVudGx5LgorKyAqICQzMSBpcyB0aGUgcmV0dXJuIGFkZHJlc3MuCisgICovCistI2RlZmluZSBHRVRfUkVUX0FERFIoZmlsZSkJYXNtKCJzdyAkMiwgZmlsZSIpCistCistI2VuZGlmCisrI2RlZmluZSBHRVRfUkVUX0FERFIoZmlsZSkJYXNtKCJzdyAkMzEsICUwIiA6ICI9bSIgKGZpbGUpKQorIAorICNlbmRpZiAvKiBfX21pcHMgKi8KKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9kbWFsbG9jLzUuNS4yLzE0MC1zaGFyZWRfbGlicmFyeS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9kbWFsbG9jLzUuNS4yLzE0MC1zaGFyZWRfbGlicmFyeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2YyYmIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2RtYWxsb2MvNS41LjIvMTQwLXNoYXJlZF9saWJyYXJ5LnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK1RoaXMgcGF0Y2ggbWFrZXMgYnVpbGRpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5IHBvc3NpYmxlLgorCitDb3B5cmlnaHQgMjAwNyBZYW5uIEUuIE1PUklOIDx5YW5uLm1vcmluLjE5OThAYW5jaWVucy5lbmliLmZyPgorTGljZW5zZWQgdG8geW91IGFzIGRtYWxsb2MtNS41LjIgaXMuCisKK2RpZmYgLWR1ciBkbWFsbG9jLTUuNS4yLm9yaWcvTWFrZWZpbGUuaW4gZG1hbGxvYy01LjUuMi9NYWtlZmlsZS5pbgorLS0tIGRtYWxsb2MtNS41LjIub3JpZy9NYWtlZmlsZS5pbgkyMDA3LTA1LTE0IDE5OjI2OjE0LjAwMDAwMDAwMCArMDIwMAorKysrIGRtYWxsb2MtNS41LjIvTWFrZWZpbGUuaW4JMjAwNy0wNS0xOCAxNTo1NDowNC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNTcsNyArMjU3LDcgQEAKKyAjIHZpYTogaHR0cDovLzI1Ni5jb20vZ3JheS9lbWFpbC5odG1sCisgJChMSUJfU0wpIDogJChMSUJSQVJZKQorIAlybSAtZiAkQCAkQC50CistCUBzaGxpbmthcmdzQCAkKExJQlJBUlkpICQoT0JKUykgJChOT1JNQUxfT0JKUykKKysJQHNobGlua2FyZ3NAICQoTElCUkFSWSkKKyAJbXYgJEAudCAkQAorIAorICQoTElCUkFSWSkgOiAkKE9CSlMpICQoTk9STUFMX09CSlMpCitAQCAtMjcwLDcgKzI3MCw3IEBACisgCisgJChMSUJfVEhfU0wpIDogJChMSUJfVEgpCisgCXJtIC1mICRAICRALnQKKy0JQHNobGlua2FyZ3NAICQoTElCX1RIKSAkKE9CSlMpICQoVEhSRUFEX09CSlMpCisrCUBzaGxpbmthcmdzQCAkKExJQl9USCkKKyAJbXYgJEAudCAkQAorIAorICQoTElCX0NYWCkgOiAkKE9CSlMpICQoTk9STUFMX09CSlMpICQoQ1hYX09CSlMpCitAQCAtMjc5LDcgKzI3OSw3IEBACisgCisgJChMSUJfQ1hYX1NMKSA6ICQoTElCX0NYWCkKKyAJcm0gLWYgJEAgJEAudAorLQlAc2hsaW5rYXJnc0AgJChMSUJfQ1hYKSAkKE9CSlMpICQoTk9STUFMX09CSlMpICQoQ1hYX09CSlMpCisrCUBzaGxpbmthcmdzQCAkKExJQl9DWFgpCisgCW12ICRALnQgJEAKKyAKKyAkKExJQl9USF9DWFgpIDogJChPQkpTKSAkKFRIUkVBRF9PQkpTKSAkKENYWF9PQkpTKQorQEAgLTI4OCw3ICsyODgsNyBAQAorIAorICQoTElCX1RIX0NYWF9TTCkgOiAkKExJQl9USF9DWFgpCisgCXJtIC1mICRAICRALnQKKy0JQHNobGlua2FyZ3NAICQoTElCX1RIX0NYWCkgJChPQkpTKSAkKFRIUkVBRF9PQkpTKSAkKENYWF9PQkpTKQorKwlAc2hsaW5rYXJnc0AgJChMSUJfVEhfQ1hYKQorIAltdiAkQC50ICRACisgCisgdGhyZWFkc3NsIDogJChMSUJfVEhfU0wpCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZG1hbGxvYy81LjUuMi8xNTAtdXNlX0RFU1RESVIucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZG1hbGxvYy81LjUuMi8xNTAtdXNlX0RFU1RESVIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcyZTNhNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9kbWFsbG9jLzUuNS4yLzE1MC11c2VfREVTVERJUi5wYXRjaApAQCAtMCwwICsxLDEwNSBAQAorTWFrZSBpbnN0YWxsIHJ1bGVzIHVzZSBERVNURElSLgorU3BsaXQgaW5zdGFsbGF0aW9uIG9mIHRoZSB1dGlsaXRpdHkgZnJvbSB0aGUgZ2xvYmFsIGluc3RhbGwuCisKK0NvcHlyaWdodCAyMDA3IFlhbm4gRS4gTU9SSU4gPHlhbm4ubW9yaW4uMTk5OEBhbmNpZW5zLmVuaWIuZnI+CitMaWNlbnNlZCB0byB5b3UgYXMgZG1hbGxvYy01LjUuMiBpcy4KKworZGlmZiAtZHVyIGRtYWxsb2MtNS41LjIub3JpZy9NYWtlZmlsZS5pbiBkbWFsbG9jLTUuNS4yL01ha2VmaWxlLmluCistLS0gZG1hbGxvYy01LjUuMi5vcmlnL01ha2VmaWxlLmluCTIwMDctMDUtMTggMTY6MDM6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZG1hbGxvYy01LjUuMi9NYWtlZmlsZS5pbgkyMDA3LTA1LTE4IDE2OjIyOjU5LjAwMDAwMDAwMCArMDIwMAorQEAgLTE3NCw2NiArMTc0LDY3IEBACisgIwlybSAtZiBjb25maWd1cmUKKyAKKyBpbnN0YWxsZGlycyA6CistCSQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoaW5jbHVkZWRpcikgJChsaWJkaXIpICQoYmluZGlyKQorKwkkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkKERFU1RESVIpLyQoaW5jbHVkZWRpcikgJChERVNURElSKS8kKGxpYmRpcikgJChERVNURElSKS8kKGJpbmRpcikKKyAKKyBpbnN0YWxsaW5jcyA6ICQoSEZMUykKKy0JJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChpbmNsdWRlZGlyKQorLQkkKElOU1RBTExfREFUQSkgJChIRkxTKSAkKGluY2x1ZGVkaXIpCisrCSQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoREVTVERJUikvJChpbmNsdWRlZGlyKQorKwkkKElOU1RBTExfREFUQSkgJChIRkxTKSAkKERFU1RESVIpLyQoaW5jbHVkZWRpcikKKyAKKyBpbnN0YWxsdGhzbCA6ICQoTElCX1RIX1NMKQorLQkkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkKGxpYmRpcikKKy0JJChJTlNUQUxMX1BST0dSQU0pICQoTElCX1RIX1NMKSAkKGxpYmRpcikKKysJJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNURElSKS8kKGxpYmRpcikKKysJJChJTlNUQUxMX1BST0dSQU0pICQoTElCX1RIX1NMKSAkKERFU1RESVIpLyQobGliZGlyKQorIAorIGluc3RhbGx0aCA6ICQoSU5TVEFMTF9USFJFQURTKQorLQkkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkKGxpYmRpcikKKy0JJChJTlNUQUxMX1BST0dSQU0pICQoTElCX1RIKSAkKGxpYmRpcikKKysJJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNURElSKS8kKGxpYmRpcikKKysJJChJTlNUQUxMX1BST0dSQU0pICQoTElCX1RIKSAkKERFU1RESVIpLyQobGliZGlyKQorIEBDWFhfT0ZGQAlAZWNobyAiRW50ZXIgJ21ha2UgaW5zdGFsbHRoY3h4JyB0byBpbnN0YWxsIHRoZSB0aHJlYWRlZCBDKysgbGlicmFyeSIKKyBAU0xfT0ZGQAlAZWNobyAiRW50ZXIgJ21ha2UgaW5zdGFsbHRoc2wnIHRvIGluc3RhbGwgdGhlIHRocmVhZGVkIHNoYXJlZC1saWJyYXJ5IgorIAorIGluc3RhbGx0aGN4eHNsIDogJChMSUJfVEhfQ1hYX1NMKQorLQkkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkKHNobGliZGlyKQorLQkkKElOU1RBTExfUFJPR1JBTSkgJChMSUJfVEhfQ1hYX1NMKSAkKHNobGliZGlyKQorKwkkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkKERFU1RESVIpLyQoc2hsaWJkaXIpCisrCSQoSU5TVEFMTF9QUk9HUkFNKSAkKExJQl9USF9DWFhfU0wpICQoREVTVERJUikvJChzaGxpYmRpcikKKyAKKyBpbnN0YWxsdGhjeHggOiAkKElOU1RBTExfVEhfQ1hYKQorLQkkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkKGxpYmRpcikKKy0JJChJTlNUQUxMX1BST0dSQU0pICQoTElCX1RIX0NYWCkgJChsaWJkaXIpCisrCSQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoREVTVERJUikvJChsaWJkaXIpCisrCSQoSU5TVEFMTF9QUk9HUkFNKSAkKExJQl9USF9DWFgpICQoREVTVERJUikvJChsaWJkaXIpCisgQFNMX09GRkAJQGVjaG8gIkVudGVyICdtYWtlIGluc3RhbGx0aGN4eHNsJyB0byBpbnN0YWxsIHRoZSB0aHJlYWRlZCBDKysgc2hhcmVkLWxpYnJhcnkiCisgCisgaW5zdGFsbGN4eHNsIDogJChMSUJfQ1hYX1NMKQorLQkkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkKGxpYmRpcikKKy0JJChJTlNUQUxMX1BST0dSQU0pICQoTElCX0NYWF9TTCkgJChsaWJkaXIpCisrCSQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoREVTVERJUikvJChsaWJkaXIpCisrCSQoSU5TVEFMTF9QUk9HUkFNKSAkKExJQl9DWFhfU0wpICQoREVTVERJUikvJChsaWJkaXIpCisgCisgaW5zdGFsbGN4eCA6ICQoSU5TVEFMTF9DWFgpCistCSQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQobGliZGlyKQorLQkkKElOU1RBTExfUFJPR1JBTSkgJChMSUJfQ1hYKSAkKGxpYmRpcikKKysJJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNURElSKS8kKGxpYmRpcikKKysJJChJTlNUQUxMX1BST0dSQU0pICQoTElCX0NYWCkgJChERVNURElSKS8kKGxpYmRpcikKKyBAVEhfT0ZGQAlAZWNobyAiRW50ZXIgJ21ha2UgaW5zdGFsbHRoY3h4JyB0byBpbnN0YWxsIHRoZSB0aHJlYWRlZCBDKysgbGlicmFyeSIKKyBAU0xfT0ZGQAlAZWNobyAiRW50ZXIgJ21ha2UgaW5zdGFsbGN4eHNsJyB0byBpbnN0YWxsIHRoZSBDKysgc2hhcmVkLWxpYnJhcnkiCisgCisgaW5zdGFsbHNsIDogJChMSUJfU0wpCistCSQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoc2hsaWJkaXIpCistCSQoSU5TVEFMTF9QUk9HUkFNKSAkKExJQl9TTCkgJChzaGxpYmRpcikKKysJJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNURElSKS8kKHNobGliZGlyKQorKwkkKElOU1RBTExfUFJPR1JBTSkgJChMSUJfU0wpICQoREVTVERJUikvJChzaGxpYmRpcikKKyBAQ1hYX09GRkAJQGVjaG8gIkVudGVyICdtYWtlIGluc3RhbGxjeHhzbCcgdG8gaW5zdGFsbCB0aGUgQysrIHNoYXJlZC1saWJyYXJ5IgorIEBUSF9PRkZACUBlY2hvICJFbnRlciAnbWFrZSBpbnN0YWxsdGhzbCcgdG8gaW5zdGFsbCB0aHJlYWQgc2hhcmVkLWxpYnJhcnkiCisgCisgaW5zdGFsbGxpYiA6ICQoSU5TVEFMTF9MSUIpCistCSQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQobGliZGlyKQorLQkkKElOU1RBTExfUFJPR1JBTSkgJChMSUJSQVJZKSAkKGxpYmRpcikKKy0JQFJBTkxJQkAgJChsaWJkaXIpLyQoTElCUkFSWSkKKysJJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNURElSKS8kKGxpYmRpcikKKysJJChJTlNUQUxMX1BST0dSQU0pICQoTElCUkFSWSkgJChERVNURElSKS8kKGxpYmRpcikKKysJQFJBTkxJQkAgJChERVNURElSKS8kKGxpYmRpcikvJChMSUJSQVJZKQorIEBTTF9PRkZACUBlY2hvICJFbnRlciAnbWFrZSBpbnN0YWxsc2wnIHRvIGluc3RhbGwgJChMSUJfU0wpIGluICQoc2hsaWJkaXIpIgorIEBDWFhfT0ZGQAlAZWNobyAiRW50ZXIgJ21ha2UgaW5zdGFsbGN4eCcgdG8gaW5zdGFsbCB0aGUgQysrIGxpYnJhcnkiCisgQFRIX09GRkAJQGVjaG8gIkVudGVyICdtYWtlIGluc3RhbGx0aCcgdG8gaW5zdGFsbCB0aHJlYWQgbGlicmFyeSIKKyAKKyBpbnN0YWxsZG9jcyA6ICQoc3JjZGlyKS9kb2NzLyQoSFRNTEZJTEUpICQoc3JjZGlyKS9kb2NzLyQoVEVYSUZJTEUpIFwKKyAJCSQoc3JjZGlyKS9kb2NzLyQoUERGRklMRSkKKy0JJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChkb2NkaXIpCistCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZG9jcy8kKEhUTUxGSUxFKSAkKGRvY2RpcikKKy0JJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9kb2NzLyQoVEVYSUZJTEUpICQoZG9jZGlyKQorLQkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2RvY3MvJChQREZGSUxFKSAkKGRvY2RpcikKKysJJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNURElSKS8kKGRvY2RpcikKKysJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9kb2NzLyQoSFRNTEZJTEUpICQoREVTVERJUikvJChkb2NkaXIpCisrCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZG9jcy8kKFRFWElGSUxFKSAkKERFU1RESVIpLyQoZG9jZGlyKQorKwkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2RvY3MvJChQREZGSUxFKSAkKERFU1RESVIpLyQoZG9jZGlyKQorIAorLWluc3RhbGwgOiBpbnN0YWxsaW5jcyBpbnN0YWxsbGliICQoVVRJTCkKKy0JJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChiaW5kaXIpCistCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFVUSUwpICQoYmluZGlyKQorLQlAZWNobyAiRW50ZXIgJ21ha2UgaW5zdGFsbGRvY3MnIHRvIGluc3RhbGwgJChET0NGSUxFUykgaW4gJChkb2NkaXIpIgorK2luc3RhbGx1dGlsIDogJChVVElMKQorKwkkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkKERFU1RESVIpLyQoYmluZGlyKQorKwkkKElOU1RBTExfUFJPR1JBTSkgJChVVElMKSAkKERFU1RESVIpLyQoYmluZGlyKQorKworK2luc3RhbGwgOiBpbnN0YWxsaW5jcyBpbnN0YWxsbGliIGluc3RhbGx1dGlsIGluc3RhbGxkb2NzCisgCisgZG1hbGxvYy5oLjIgOiAkKHNyY2RpcikvY29uZmlndXJlCisgCSQoU0hFTEwpICQoc3JjZGlyKS9jb25maWd1cmUKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9kbWFsbG9jLzUuNS4yLzE2MC1zdHJkdXBfbWFjcm8ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZG1hbGxvYy81LjUuMi8xNjAtc3RyZHVwX21hY3JvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NzRkMTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZG1hbGxvYy81LjUuMi8xNjAtc3RyZHVwX21hY3JvLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKKy0tLSBkbWFsbG9jLTUuNS4yLm9yaWcvY29uZmlndXJlCTIwMDgtMDYtMTcgMTM6MTA6MDkuMDAwMDAwMDAwICswMjAwCisrKysgZG1hbGxvYy01LjUuMi9jb25maWd1cmUJMjAwOC0wNi0xNyAxMzoxMToyNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC00NjkxLDggKzQ2OTEsMzUgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc3RyZHVwIG1hY3JvIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nIHN0cmR1cCBtYWNyby4uLiAkRUNIT19DIiA+JjYKKyBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorLSAgYWNfY3Zfc3RyZHVwX21hY3JvPW5vCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKysjaWYgSEFWRV9TVERMSUJfSAorKyMgIGluY2x1ZGUgPHN0cmluZy5oPgorKyNlbmRpZgorKworKyNpZm5kZWYgc3RyZHVwCisrICAgICAgIGNob2tlIG1lCisrI2VuZGlmCisgCisrbWFpbigpIHsgZXhpdCgwKTsgfQorKworK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqCisraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorKyAgYWNfY3Zfc3RyZHVwX21hY3JvPXllcworK2Vsc2UKKysgIGFjX2N2X3N0cmR1cF9tYWNybz1ubworK2ZpCisrICAKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBjb25mZGVmcy5oLiAgKi8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9kdW1hLzJfNV8xLzEwMC1jcm9zcy1jb21waWxlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2R1bWEvMl81XzEvMTAwLWNyb3NzLWNvbXBpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdkYzk4YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9kdW1hLzJfNV8xLzEwMC1jcm9zcy1jb21waWxlLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK2RpZmYgLWR1ciBkdW1hXzJfNV8xL01ha2VmaWxlIGR1bWFfMl81XzEub3JpZy9NYWtlZmlsZQorLS0tIGR1bWFfMl81XzEvTWFrZWZpbGUJMjAwNi0wNi0xOCAwNjowMjoxMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBkdW1hXzJfNV8xLm9yaWcvTWFrZWZpbGUJMjAwNy0wNy0xMSAxNzo0OTo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC05OCwxMCArOTgsNiBAQAorICAgTElCUz0tbHB0aHJlYWQKKyBlbmRpZgorIAorLQorLUNDPWdjYworLUNYWD1nKysKKy1BUj1hcgorIElOU1RBTEw9aW5zdGFsbAorIAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQEAgLTE2OSw3ICsxNjUsNyBAQAorIAorIGNyZWF0ZWNvbmY6IGNyZWF0ZWNvbmYubworIAktIHJtIC1mIGNyZWF0ZWNvbmYKKy0JJChDQykgJChDRkxBR1MpICQoRFVNQV9PUFRJT05TKSBjcmVhdGVjb25mLm8gLW8gY3JlYXRlY29uZgorKwkkKEhPU1RDQykgJChIT1NUQ0ZMQUdTKSAkKERVTUFfT1BUSU9OUykgY3JlYXRlY29uZi5vIC1vIGNyZWF0ZWNvbmYKKyAKKyB0c3RoZWFwOiBsaWJkdW1hLmEgdHN0aGVhcC5vCisgCS0gcm0gLWYgdHN0aGVhcAorQEAgLTIxMSw3ICsyMDcsNyBAQAorICMgZGVmaW5lIHJ1bGVzIGhvdyB0byBidWlsZCBvYmplY3RzIGZvciBjcmVhdGVjb25mCisgIworIGNyZWF0ZWNvbmYubzoKKy0JJChDQykgJChDRkxBR1MpICQoRFVNQV9PUFRJT05TKSAtYyBjcmVhdGVjb25mLmMgLW8gJEAKKysJJChIT1NUQ0MpICQoSE9TVENGTEFHUykgJChEVU1BX09QVElPTlMpIC1jIGNyZWF0ZWNvbmYuYyAtbyAkQAorIAorIAorICMKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9kdW1hLzJfNV8xLzExMC1zZXBhcmF0ZV9jcHAucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZHVtYS8yXzVfMS8xMTAtc2VwYXJhdGVfY3BwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMjg3MzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZHVtYS8yXzVfMS8xMTAtc2VwYXJhdGVfY3BwLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK2RpZmYgLWR1ciBkdW1hXzJfNV8xLm9yaWcvTWFrZWZpbGUgZHVtYV8yXzVfMS9NYWtlZmlsZQorLS0tIGR1bWFfMl81XzEub3JpZy9NYWtlZmlsZQkyMDA3LTA3LTExIDE3OjQ5OjQzLjAwMDAwMDAwMCArMDIwMAorKysrIGR1bWFfMl81XzEvTWFrZWZpbGUJMjAwNy0wNy0xMSAxNzo1MDo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMTUsOSArMTE1LDE0IEBACisgCWR1bWF0ZXN0LmMgdHN0aGVhcC5jIGR1bWF0ZXN0cHAuY3BwIHRlc3RvcGVyYXRvcnMuY3BwIFwKKyAJY3JlYXRlY29uZi5jCisgCistT0JKRUNUUyA9IGR1bWFwcC5vIGR1bWEubyBzZW1faW5jLm8gcHJpbnQubworK09CSkVDVFMgPSBkdW1hLm8gc2VtX2luYy5vIHByaW50Lm8KKytTT19PQkpFQ1RTID0gZHVtYV9zby5vIHNlbV9pbmNfc28ubyBwcmludF9zby5vCisrCisraWZlcSAoJChEVU1BX0NQUCksMSkKKytPQkpFQ1RTICs9IGR1bWFwcC5vCisrU09fT0JKRUNUUyArPSBkdW1hcHBfc28ubworK2VuZGlmCisgCistU09fT0JKRUNUUyA9IGR1bWFwcF9zby5vIGR1bWFfc28ubyBzZW1faW5jX3NvLm8gcHJpbnRfc28ubworIAorIGFsbDoJbGliZHVtYS5hICQoRFVNQVNPKSB0c3RoZWFwIGR1bWF0ZXN0IGR1bWF0ZXN0cHAgdGVzdG9wZXJhdG9ycyB0c3RoZWFwX3NvIGR1bWF0ZXN0cHBfc28KKyAJQCBlY2hvICJUZXN0aW5nIERVTUEuIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2R1bWEvMl81XzEyLzEwMC1jcm9zcy1jb21waWxlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2R1bWEvMl81XzEyLzEwMC1jcm9zcy1jb21waWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MDFjMGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZHVtYS8yXzVfMTIvMTAwLWNyb3NzLWNvbXBpbGUucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorZGlmZiAtZHVyTiBkdW1hXzJfNV8xMi5vcmlnL01ha2VmaWxlIGR1bWFfMl81XzEyL01ha2VmaWxlCistLS0gZHVtYV8yXzVfMTIub3JpZy9NYWtlZmlsZQkyMDA3LTA4LTE3IDA5OjM0OjI1LjAwMDAwMDAwMCArMDIwMAorKysrIGR1bWFfMl81XzEyL01ha2VmaWxlCTIwMDctMDktMDcgMjE6NTA6MDQuMDAwMDAwMDAwICswMjAwCitAQCAtOTMsOSArOTMsNiBAQAorICMgYWxzbyBkZWZpbmUgJ1dJTjMyJworCisgIyBzb21lIGRlZmF1bHRzOgorLUNDPWdjYworLUNYWD1nKysKKy1BUj1hcgorIElOU1RBTEw9aW5zdGFsbAorIFJNPXJtCisgUk1GT1JDRT1ybSAtZgorQEAgLTI5OSw3ICsyOTYsNyBAQAorCisgY3JlYXRlY29uZiQoRVhFUE9TVEZJWCk6IGNyZWF0ZWNvbmYubworIAktICQoUk1GT1JDRSkgY3JlYXRlY29uZiQoRVhFUE9TVEZJWCkKKy0JJChDQykgJChDRkxBR1MpICQoRFVNQV9PUFRJT05TKSBjcmVhdGVjb25mLm8gLW8gY3JlYXRlY29uZiQoRVhFUE9TVEZJWCkKKysJJChIT1NUQ0MpICQoSE9TVENGTEFHUykgJChEVU1BX09QVElPTlMpIGNyZWF0ZWNvbmYubyAtbyBjcmVhdGVjb25mJChFWEVQT1NURklYKQorCisgdHN0aGVhcCQoRVhFUE9TVEZJWCk6IGxpYmR1bWEuYSB0c3RoZWFwLm8KKyAJLSAkKFJNRk9SQ0UpIHRzdGhlYXAkKEVYRVBPU1RGSVgpCitAQCAtMzYwLDcgKzM1Nyw3IEBACisgIyBkZWZpbmUgcnVsZXMgaG93IHRvIGJ1aWxkIG9iamVjdHMgZm9yIGNyZWF0ZWNvbmYKKyAjCisgY3JlYXRlY29uZi5vOgorLQkkKENDKSAkKENGTEFHUykgJChEVU1BX09QVElPTlMpIC1jIGNyZWF0ZWNvbmYuYyAtbyAkQAorKwkkKEhPU1RDQykgJChIT1NUQ0ZMQUdTKSAkKERVTUFfT1BUSU9OUykgLWMgY3JlYXRlY29uZi5jIC1vICRACisKKworICMKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9kdW1hLzJfNV8xMi8xMTAtc2VwYXJhdGVfY3BwLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2R1bWEvMl81XzEyLzExMC1zZXBhcmF0ZV9jcHAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYyZDM3NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9kdW1hLzJfNV8xMi8xMTAtc2VwYXJhdGVfY3BwLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK2RpZmYgLWR1ck4gZHVtYV8yXzVfMTIub3JpZy9NYWtlZmlsZSBkdW1hXzJfNV8xMi9NYWtlZmlsZQorLS0tIGR1bWFfMl81XzEyLm9yaWcvTWFrZWZpbGUJMjAwNy0wOS0wNyAyMTo1Nzo0NS4wMDAwMDAwMDAgKzAyMDAKKysrKyBkdW1hXzJfNV8xMi9NYWtlZmlsZQkyMDA3LTA5LTA3IDIxOjU4OjM1LjAwMDAwMDAwMCArMDIwMAorQEAgLTIzMSw5ICsyMzEsMTMgQEAKKyAJZHVtYXRlc3QuYyB0c3RoZWFwLmMgdGhyZWFkLXRlc3QuYyB0ZXN0bXQuYyBkdW1hdGVzdHBwLmNwcCB0ZXN0b3BlcmF0b3JzLmNwcCBcCisgCWNyZWF0ZWNvbmYuYworCistT0JKRUNUUyA9IGR1bWFwcC5vIGR1bWEubyBzZW1faW5jLm8gcHJpbnQubworK09CSkVDVFMgPSBkdW1hLm8gc2VtX2luYy5vIHByaW50Lm8KKytTT19PQkpFQ1RTID0gZHVtYV9zby5vIHNlbV9pbmNfc28ubyBwcmludF9zby5vCisKKy1TT19PQkpFQ1RTID0gZHVtYXBwX3NvLm8gZHVtYV9zby5vIHNlbV9pbmNfc28ubyBwcmludF9zby5vCisraWZlcSAoJChEVU1BX0NQUCksMSkKKytPQkpFQ1RTICs9IGR1bWFwcC5vCisrU09fT0JKRUNUUyArPSBkdW1hcHBfc28ubworK2VuZGlmCisKKyBhbGw6CWxpYmR1bWEuYSB0c3RoZWFwJChFWEVQT1NURklYKSBkdW1hdGVzdCQoRVhFUE9TVEZJWCkgdGhyZWFkLXRlc3QkKEVYRVBPU1RGSVgpIHRlc3RtdCQoRVhFUE9TVEZJWCkgZHVtYXRlc3RwcCQoRVhFUE9TVEZJWCkgdGVzdG9wZXJhdG9ycyQoRVhFUE9TVEZJWCkgJChEVU1BX0RZTl9ERVBTKQorIAlAICQoRUNIT0xGKQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2R1bWEvMl81XzE0LzEwMC1jcm9zcy1jb21waWxlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2R1bWEvMl81XzE0LzEwMC1jcm9zcy1jb21waWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYjA3MzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZHVtYS8yXzVfMTQvMTAwLWNyb3NzLWNvbXBpbGUucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorZGlmZiAtZHVyTiBkdW1hXzJfNV8xNC5vcmlnL01ha2VmaWxlIGR1bWFfMl81XzE0L01ha2VmaWxlCistLS0gZHVtYV8yXzVfMTQub3JpZy9NYWtlZmlsZQkyMDA4LTAzLTEzIDAwOjU0OjEwLjAwMDAwMDAwMCArMDEwMAorKysrIGR1bWFfMl81XzE0L01ha2VmaWxlCTIwMDgtMDYtMTcgMTA6Mjg6NDUuMDAwMDAwMDAwICswMjAwCitAQCAtOTMsMTAgKzkzLDYgQEAKKyAjIGFsc28gZGVmaW5lICdXSU4zMicKKyAKKyAjIHNvbWUgZGVmYXVsdHM6CistQ0M9Z2NjCistQ1hYPWcrKworLUFSPWFyCistUkFOTElCPXJhbmxpYgorIElOU1RBTEw9aW5zdGFsbAorIFJNPXJtCisgUk1GT1JDRT1ybSAtZgorQEAgLTMxNyw3ICszMTMsNyBAQAorIAorIGNyZWF0ZWNvbmYkKEVYRVBPU1RGSVgpOiBjcmVhdGVjb25mLm8KKyAJLSAkKFJNRk9SQ0UpIGNyZWF0ZWNvbmYkKEVYRVBPU1RGSVgpCistCSQoQ0MpICQoQ0ZMQUdTKSAkKERVTUFfT1BUSU9OUykgY3JlYXRlY29uZi5vIC1vIGNyZWF0ZWNvbmYkKEVYRVBPU1RGSVgpCisrCSQoSE9TVENDKSAkKEhPU1RDRkxBR1MpICQoRFVNQV9PUFRJT05TKSBjcmVhdGVjb25mLm8gLW8gY3JlYXRlY29uZiQoRVhFUE9TVEZJWCkKKyAKKyB0c3RoZWFwJChFWEVQT1NURklYKTogbGliZHVtYS5hIHRzdGhlYXAubworIAktICQoUk1GT1JDRSkgdHN0aGVhcCQoRVhFUE9TVEZJWCkKK0BAIC0zNzgsNyArMzc0LDcgQEAKKyAjIGRlZmluZSBydWxlcyBob3cgdG8gYnVpbGQgb2JqZWN0cyBmb3IgY3JlYXRlY29uZgorICMKKyBjcmVhdGVjb25mLm86CistCSQoQ0MpICQoQ0ZMQUdTKSAkKERVTUFfT1BUSU9OUykgLWMgY3JlYXRlY29uZi5jIC1vICRACisrCSQoSE9TVENDKSAkKEhPU1RDRkxBR1MpICQoRFVNQV9PUFRJT05TKSAtYyBjcmVhdGVjb25mLmMgLW8gJEAKKyAKKyAKKyAjCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZHVtYS8yXzVfMTQvMTEwLXNlcGFyYXRlX2NwcC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9kdW1hLzJfNV8xNC8xMTAtc2VwYXJhdGVfY3BwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMjg3YzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZHVtYS8yXzVfMTQvMTEwLXNlcGFyYXRlX2NwcC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitkaWZmIC1kdXJOIGR1bWFfMl81XzE0Lm9yaWcvTWFrZWZpbGUgZHVtYV8yXzVfMTQvTWFrZWZpbGUKKy0tLSBkdW1hXzJfNV8xNC5vcmlnL01ha2VmaWxlCTIwMDgtMDYtMTcgMTA6MzA6NDAuMDAwMDAwMDAwICswMjAwCisrKysgZHVtYV8yXzVfMTQvTWFrZWZpbGUJMjAwOC0wNi0xNyAxMDozMDoxNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMjgsOSArMjI4LDEzIEBACisgCWR1bWF0ZXN0LmMgdHN0aGVhcC5jIHRocmVhZC10ZXN0LmMgdGVzdG10LmMgZHVtYXRlc3RwcC5jcHAgdGVzdG9wZXJhdG9ycy5jcHAgXAorIAljcmVhdGVjb25mLmMKKyAKKy1PQkpFQ1RTID0gZHVtYXBwLm8gZHVtYS5vIHNlbV9pbmMubyBwcmludC5vCisrT0JKRUNUUyA9IGR1bWEubyBzZW1faW5jLm8gcHJpbnQubworK1NPX09CSkVDVFMgPSBkdW1hX3NvLm8gc2VtX2luY19zby5vIHByaW50X3NvLm8KKyAKKy1TT19PQkpFQ1RTID0gZHVtYXBwX3NvLm8gZHVtYV9zby5vIHNlbV9pbmNfc28ubyBwcmludF9zby5vCisraWZlcSAoJChEVU1BX0NQUCksMSkKKytPQkpFQ1RTICs9IGR1bWFwcC5vCisrU09fT0JKRUNUUyArPSBkdW1hcHBfc28ubworK2VuZGlmCisgCisgYWxsOglsaWJkdW1hLmEgdHN0aGVhcCQoRVhFUE9TVEZJWCkgZHVtYXRlc3QkKEVYRVBPU1RGSVgpIHRocmVhZC10ZXN0JChFWEVQT1NURklYKSB0ZXN0bXQkKEVYRVBPU1RGSVgpIGR1bWF0ZXN0cHAkKEVYRVBPU1RGSVgpIHRlc3RvcGVyYXRvcnMkKEVYRVBPU1RGSVgpICQoRFVNQV9EWU5fREVQUykKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9kdW1hLzJfNV8xNS8xMDAtY3Jvc3MtY29tcGlsZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9kdW1hLzJfNV8xNS8xMDAtY3Jvc3MtY29tcGlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzk1MTYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2R1bWEvMl81XzE1LzEwMC1jcm9zcy1jb21waWxlLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK2RpZmYgLWR1ck4gZHVtYV8yXzVfMTUub3JpZy9HTlVtYWtlZmlsZSBkdW1hXzJfNV8xNS9HTlVtYWtlZmlsZQorLS0tIGR1bWFfMl81XzE1Lm9yaWcvR05VbWFrZWZpbGUJMjAwOC0wOC0wMyAyMToyMjozOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBkdW1hXzJfNV8xNS9HTlVtYWtlZmlsZQkyMDA5LTA2LTE5IDE1OjMyOjIzLjAwMDAwMDAwMCArMDIwMAorQEAgLTkzLDEwICs5Myw2IEBACisgIyBhbHNvIGRlZmluZSAnV0lOMzInCisgCisgIyBzb21lIGRlZmF1bHRzOgorLUNDPWdjYworLUNYWD1nKysKKy1BUj1hcgorLVJBTkxJQj1yYW5saWIKKyBJTlNUQUxMPWluc3RhbGwKKyBSTT1ybQorIFJNRk9SQ0U9cm0gLWYKK0BAIC00NzEsNyArNDY3LDcgQEAKKyAKKyBjcmVhdGVjb25mJChFWEVQT1NURklYKTogY3JlYXRlY29uZi5vCisgCS0gJChSTUZPUkNFKSBjcmVhdGVjb25mJChFWEVQT1NURklYKQorLQkkKENDKSAkKENGTEFHUykgJChEVU1BX09QVElPTlMpIGNyZWF0ZWNvbmYubyAtbyBjcmVhdGVjb25mJChFWEVQT1NURklYKQorKwkkKEhPU1RDQykgJChIT1NUQ0ZMQUdTKSAkKERVTUFfT1BUSU9OUykgY3JlYXRlY29uZi5vIC1vIGNyZWF0ZWNvbmYkKEVYRVBPU1RGSVgpCisgCisgdHN0aGVhcCQoRVhFUE9TVEZJWCk6IGxpYmR1bWEuYSB0c3RoZWFwLm8KKyAJLSAkKFJNRk9SQ0UpIHRzdGhlYXAkKEVYRVBPU1RGSVgpCitAQCAtNTMyLDcgKzUyOCw3IEBACisgIyBkZWZpbmUgcnVsZXMgaG93IHRvIGJ1aWxkIG9iamVjdHMgZm9yIGNyZWF0ZWNvbmYKKyAjCisgY3JlYXRlY29uZi5vOgorLQkkKENDKSAkKENGTEFHUykgJChEVU1BX09QVElPTlMpIC1jIGNyZWF0ZWNvbmYuYyAtbyAkQAorKwkkKEhPU1RDQykgJChIT1NUQ0ZMQUdTKSAkKERVTUFfT1BUSU9OUykgLWMgY3JlYXRlY29uZi5jIC1vICRACisgCisgCisgIwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2R1bWEvMl81XzE1LzExMC1zZXBhcmF0ZV9jcHAucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZHVtYS8yXzVfMTUvMTEwLXNlcGFyYXRlX2NwcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmJjY2M3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2R1bWEvMl81XzE1LzExMC1zZXBhcmF0ZV9jcHAucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorZGlmZiAtZHVyTiBkdW1hXzJfNV8xNS5vcmlnL0dOVW1ha2VmaWxlIGR1bWFfMl81XzE1L0dOVW1ha2VmaWxlCistLS0gZHVtYV8yXzVfMTUub3JpZy9HTlVtYWtlZmlsZQkyMDA5LTA2LTE5IDE2OjQxOjUzLjAwMDAwMDAwMCArMDIwMAorKysrIGR1bWFfMl81XzE1L0dOVW1ha2VmaWxlCTIwMDktMDYtMTkgMTY6NDM6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtMjg5LDkgKzI4OSwxMyBAQAorIAlkdW1hdGVzdC5jIHRzdGhlYXAuYyB0aHJlYWQtdGVzdC5jIHRlc3RtdC5jIGR1bWF0ZXN0cHAuY3BwIHRlc3RvcGVyYXRvcnMuY3BwIFwKKyAJY3JlYXRlY29uZi5jCisgCistT0JKRUNUUz1kdW1hcHAubyBkdW1hLm8gc2VtX2luYy5vIHByaW50Lm8KKytPQkpFQ1RTID0gZHVtYS5vIHNlbV9pbmMubyBwcmludC5vCisrU09fT0JKRUNUUyA9IGR1bWFfc28ubyBzZW1faW5jX3NvLm8gcHJpbnRfc28ubworIAorLVNPX09CSkVDVFM9ZHVtYXBwX3NvLm8gZHVtYV9zby5vIHNlbV9pbmNfc28ubyBwcmludF9zby5vCisraWZlcSAoJChEVU1BX0NQUCksMSkKKytPQkpFQ1RTICs9IGR1bWFwcC5vCisrU09fT0JKRUNUUyArPSBkdW1hcHBfc28ubworK2VuZGlmCisgCisgIyBNYWtlIGFsbCB0aGUgdG9wLWxldmVsIHRhcmdldHMgdGhlIG1ha2VmaWxlIGtub3dzIGFib3V0LgorIGFsbDoJbGliZHVtYS5hIHRzdGhlYXAkKEVYRVBPU1RGSVgpIGR1bWF0ZXN0JChFWEVQT1NURklYKSB0aHJlYWQtdGVzdCQoRVhFUE9TVEZJWCkgdGVzdG10JChFWEVQT1NURklYKSBkdW1hdGVzdHBwJChFWEVQT1NURklYKSB0ZXN0b3BlcmF0b3JzJChFWEVQT1NURklYKSAkKERVTUFfRFlOX0RFUFMpCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZHVtYS8yXzVfOC8xMDAtY3Jvc3MtY29tcGlsZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9kdW1hLzJfNV84LzEwMC1jcm9zcy1jb21waWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjOTZjOWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZHVtYS8yXzVfOC8xMDAtY3Jvc3MtY29tcGlsZS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitkaWZmIC1kdXJOIGR1bWFfMl81Xzgub3JpZy9NYWtlZmlsZSBkdW1hXzJfNV84L01ha2VmaWxlCistLS0gZHVtYV8yXzVfOC5vcmlnL01ha2VmaWxlCTIwMDctMDgtMTcgMDk6MzQ6MjUuMDAwMDAwMDAwICswMjAwCisrKysgZHVtYV8yXzVfOC9NYWtlZmlsZQkyMDA3LTA5LTA3IDIxOjUwOjA0LjAwMDAwMDAwMCArMDIwMAorQEAgLTkzLDkgKzkzLDYgQEAKKyAjIGFsc28gZGVmaW5lICdXSU4zMicKKyAKKyAjIHNvbWUgZGVmYXVsdHM6CistQ0M9Z2NjCistQ1hYPWcrKworLUFSPWFyCisgSU5TVEFMTD1pbnN0YWxsCisgUk09cm0KKyBSTUZPUkNFPXJtIC1mCitAQCAtMjgxLDcgKzI3OCw3IEBACisgCisgY3JlYXRlY29uZiQoRVhFUE9TVEZJWCk6IGNyZWF0ZWNvbmYubworIAktICQoUk1GT1JDRSkgY3JlYXRlY29uZiQoRVhFUE9TVEZJWCkKKy0JJChDQykgJChDRkxBR1MpICQoRFVNQV9PUFRJT05TKSBjcmVhdGVjb25mLm8gLW8gY3JlYXRlY29uZiQoRVhFUE9TVEZJWCkKKysJJChIT1NUQ0MpICQoSE9TVENGTEFHUykgJChEVU1BX09QVElPTlMpIGNyZWF0ZWNvbmYubyAtbyBjcmVhdGVjb25mJChFWEVQT1NURklYKQorIAorIHRzdGhlYXAkKEVYRVBPU1RGSVgpOiBsaWJkdW1hLmEgdHN0aGVhcC5vCisgCS0gJChSTUZPUkNFKSB0c3RoZWFwJChFWEVQT1NURklYKQorQEAgLTMzOCw3ICszMzUsNyBAQAorICMgZGVmaW5lIHJ1bGVzIGhvdyB0byBidWlsZCBvYmplY3RzIGZvciBjcmVhdGVjb25mCisgIworIGNyZWF0ZWNvbmYubzoKKy0JJChDQykgJChDRkxBR1MpICQoRFVNQV9PUFRJT05TKSAtYyBjcmVhdGVjb25mLmMgLW8gJEAKKysJJChIT1NUQ0MpICQoSE9TVENGTEFHUykgJChEVU1BX09QVElPTlMpIC1jIGNyZWF0ZWNvbmYuYyAtbyAkQAorIAorIAorICMKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9kdW1hLzJfNV84LzExMC1zZXBhcmF0ZV9jcHAucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZHVtYS8yXzVfOC8xMTAtc2VwYXJhdGVfY3BwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YWE2YzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZHVtYS8yXzVfOC8xMTAtc2VwYXJhdGVfY3BwLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK2RpZmYgLWR1ck4gZHVtYV8yXzVfOC5vcmlnL01ha2VmaWxlIGR1bWFfMl81XzgvTWFrZWZpbGUKKy0tLSBkdW1hXzJfNV84Lm9yaWcvTWFrZWZpbGUJMjAwNy0wOS0wNyAyMTo1Nzo0NS4wMDAwMDAwMDAgKzAyMDAKKysrKyBkdW1hXzJfNV84L01ha2VmaWxlCTIwMDctMDktMDcgMjE6NTg6MzUuMDAwMDAwMDAwICswMjAwCitAQCAtMjE2LDkgKzIxNiwxMyBAQAorIAlkdW1hdGVzdC5jIHRzdGhlYXAuYyB0ZXN0bXQuYyBkdW1hdGVzdHBwLmNwcCB0ZXN0b3BlcmF0b3JzLmNwcCBcCisgCWNyZWF0ZWNvbmYuYworIAorLU9CSkVDVFMgPSBkdW1hcHAubyBkdW1hLm8gc2VtX2luYy5vIHByaW50Lm8KKytPQkpFQ1RTID0gZHVtYS5vIHNlbV9pbmMubyBwcmludC5vCisrU09fT0JKRUNUUyA9IGR1bWFfc28ubyBzZW1faW5jX3NvLm8gcHJpbnRfc28ubworIAorLVNPX09CSkVDVFMgPSBkdW1hcHBfc28ubyBkdW1hX3NvLm8gc2VtX2luY19zby5vIHByaW50X3NvLm8KKytpZmVxICgkKERVTUFfQ1BQKSwxKQorK09CSkVDVFMgKz0gZHVtYXBwLm8KKytTT19PQkpFQ1RTICs9IGR1bWFwcF9zby5vCisrZW5kaWYKKyAKKyBhbGw6CWxpYmR1bWEuYSB0c3RoZWFwJChFWEVQT1NURklYKSBkdW1hdGVzdCQoRVhFUE9TVEZJWCkgdGVzdG10JChFWEVQT1NURklYKSBkdW1hdGVzdHBwJChFWEVQT1NURklYKSB0ZXN0b3BlcmF0b3JzJChFWEVQT1NURklYKSAkKERVTUFfRFlOX0RFUFMpCisgCUAgJChFQ0hPTEYpCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZWdsaWJjLzJfMTAvMTAwLXBvd2VycGMtOHh4LUNQVTE1LWVycmF0YS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9lZ2xpYmMvMl8xMC8xMDAtcG93ZXJwYy04eHgtQ1BVMTUtZXJyYXRhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZTFiYjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZWdsaWJjLzJfMTAvMTAwLXBvd2VycGMtOHh4LUNQVTE1LWVycmF0YS5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitkaWZmIC1ydSBlZ2xpYmMtMl85X29yaWcvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9tZW1zZXQuUyBlZ2xpYmMtMl85L3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvbWVtc2V0LlMKKy0tLSBlZ2xpYmMtMl85X29yaWcvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9tZW1zZXQuUwkyMDA3LTA0LTEzIDA4OjM1OjQ1LjAwMDAwMDAwMCAtMDcwMAorKysrIGVnbGliYy0yXzkvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9tZW1zZXQuUwkyMDA5LTA1LTA2IDE2OjUyOjA0LjAwMDAwMDAwMCAtMDcwMAorQEAgLTExMiwxMSArMTEyLDEzIEBACisgCWNscnJ3aS4JckFMSUdOLCByTEVOLCA1CisgCW10Y3JmCTB4MDEsIHJMRU4JLyogNDB0aCBpbnN0cnVjdGlvbiBmcm9tIC5hbGlnbiAqLworIAorKyNpZm5kZWYgQlJPS0VOX1BQQ184eHhfQ1BVMTUKKyAvKiBDaGVjayBpZiB3ZSBjYW4gdXNlIHRoZSBzcGVjaWFsIGNhc2UgZm9yIGNsZWFyaW5nIG1lbW9yeSB1c2luZyBkY2J6LgorICAgIFRoaXMgcmVxdWlyZXMgdGhhdCB3ZSBrbm93IHRoZSBjb3JyZWN0IGNhY2hlIGxpbmUgc2l6ZSBmb3IgdGhpcworICAgIHByb2Nlc3Nvci4gIEdldHRpbmcgdGhlIF9fY2FjaGVfbGluZV9zaXplIG1heSByZXF1aXJlIGVzdGFibGlzaGluZyBHT1QKKyAgICBhZGRyZXNzYWJpbGl0eSwgc28gYnJhbmNoIG91dCBvZiBsaW5lIHRvIHNldCB0aGlzIHVwLiAgKi8KKyAJYmVxCWNyMSwgTChjaGVja2xpbmVzaXplKQorKyNlbmRpZgorIAorIC8qIFN0b3JlIGJsb2NrcyBvZiAzMi1ieXRlcyAoMjU2LWJpdHMpIHN0YXJ0aW5nIG9uIGEgMzItYnl0ZSBib3VuZGFyeS4KKyAgICBDYW4ndCBhc3N1bWUgdGhhdCByQ0hSIGlzIHplcm8gb3IgdGhhdCB0aGUgY2FjaGUgbGluZSBzaXplIGlzIGVpdGhlcgorQEAgLTE1OCw2ICsxNjAsNyBAQAorIAlhZGQJck1FTVAsIHJNRU1QLCByQUxJR04KKyAJYglMKG1lZGl1bV90YWlsMikJLyogNzJuZCBpbnN0cnVjdGlvbiBmcm9tIC5hbGlnbiAqLworIAorKyNpZm5kZWYgQlJPS0VOX1BQQ184eHhfQ1BVMTUKKyAJLmFsaWduCTUKKyAJbm9wCisgLyogQ2xlYXIgY2FjaGUgbGluZXMgb2YgbWVtb3J5IGluIDEyOC1ieXRlIGNodW5rcy4KK0BAIC0xOTEsNiArMTk0LDcgQEAKKyAJYmRueglMKHpsb29wKQorIAliZXFscgljcjUKKyAJYglMKG1lZGl1bV90YWlsMikKKysjZW5kaWYgLyogISBCUk9LRU5fUFBDXzh4eF9DUFUxNSAqLworIAorIAkuYWxpZ24JNQorIEwoc21hbGwpOgorQEAgLTI0OCw2ICsyNTIsNyBAQAorIAlzdHcJckNIUiwgLTgock1FTVApCisgCWJscgorIAorKyNpZm5kZWYgQlJPS0VOX1BQQ184eHhfQ1BVMTUKKyBMKGNoZWNrbGluZXNpemUpOgorICNpZmRlZiBTSEFSRUQKKyAJbWZscglyVE1QCitAQCAtMzI5LDYgKzMzNCw3IEBACisgTChoYW5kbGV0YWlsMzIpOgorIAljbHJyd2kuCXJBTElHTiwgckxFTiwgNQorIAliCUwobm9uZGNieikKKysjZW5kaWYgLyogISBCUk9LRU5fUFBDXzh4eF9DUFUxNSAqLworIAorIEVORCAoQlBfU1lNIChtZW1zZXQpKQorIGxpYmNfaGlkZGVuX2J1aWx0aW5fZGVmIChtZW1zZXQpCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZWdsaWJjLzJfOC8xMDAtcG93ZXJwYy1wcml2YXRlX2Z1dGV4LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2VnbGliYy8yXzgvMTAwLXBvd2VycGMtcHJpdmF0ZV9mdXRleC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDE2NTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2VnbGliYy8yXzgvMTAwLXBvd2VycGMtcHJpdmF0ZV9mdXRleC5wYXRjaApAQCAtMCwwICsxLDE1IEBACisyMDA4LTA0LTI4ICBIaXJva2kgS2FtaW5hZ2EgIDxrYW1pbmFnYUBzbS5zb255LmNvLmpwPgorCisJW0JaIDY3NDBdCisJbnB0bC9zeXNkZXBzL3Bvd2VycGMvdGNiLW9mZnNldHMuc3ltIChQUklWQVRFX0ZVVEVYX09GRlNFVCk6CisJR3VhcmQgc3ltIGRlZmluaXRpb24gd2l0aCAjaWZuZGVmIF9fQVNTVU1FX1BSSVZBVEVfRlVURVguCisKKy0tLSBhL25wdGwvc3lzZGVwcy9wb3dlcnBjL3RjYi1vZmZzZXRzLnN5bQorKysrIGIvbnB0bC9zeXNkZXBzL3Bvd2VycGMvdGNiLW9mZnNldHMuc3ltCitAQCAtMTUsNCArMTUsNiBAQAorIFBJRAkJCQl0aHJlYWRfb2Zmc2V0b2YgKHBpZCkKKyBUSUQJCQkJdGhyZWFkX29mZnNldG9mICh0aWQpCisgUE9JTlRFUl9HVUFSRAkJCShvZmZzZXRvZiAodGNiaGVhZF90LCBwb2ludGVyX2d1YXJkKSAtIFRMU19UQ0JfT0ZGU0VUIC0gc2l6ZW9mICh0Y2JoZWFkX3QpKQorKyNpZm5kZWYgX19BU1NVTUVfUFJJVkFURV9GVVRFWAorIFBSSVZBVEVfRlVURVhfT0ZGU0VUCQl0aHJlYWRfb2Zmc2V0b2YgKGhlYWRlci5wcml2YXRlX2Z1dGV4KQorKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2VnbGliYy8yXzkvMTAwLXBvd2VycGMtOHh4LUNQVTE1LWVycmF0YS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9lZ2xpYmMvMl85LzEwMC1wb3dlcnBjLTh4eC1DUFUxNS1lcnJhdGEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZlMWJiMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9lZ2xpYmMvMl85LzEwMC1wb3dlcnBjLTh4eC1DUFUxNS1lcnJhdGEucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorZGlmZiAtcnUgZWdsaWJjLTJfOV9vcmlnL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvbWVtc2V0LlMgZWdsaWJjLTJfOS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL21lbXNldC5TCistLS0gZWdsaWJjLTJfOV9vcmlnL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvbWVtc2V0LlMJMjAwNy0wNC0xMyAwODozNTo0NS4wMDAwMDAwMDAgLTA3MDAKKysrKyBlZ2xpYmMtMl85L3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvbWVtc2V0LlMJMjAwOS0wNS0wNiAxNjo1MjowNC4wMDAwMDAwMDAgLTA3MDAKK0BAIC0xMTIsMTEgKzExMiwxMyBAQAorIAljbHJyd2kuCXJBTElHTiwgckxFTiwgNQorIAltdGNyZgkweDAxLCByTEVOCS8qIDQwdGggaW5zdHJ1Y3Rpb24gZnJvbSAuYWxpZ24gKi8KKyAKKysjaWZuZGVmIEJST0tFTl9QUENfOHh4X0NQVTE1CisgLyogQ2hlY2sgaWYgd2UgY2FuIHVzZSB0aGUgc3BlY2lhbCBjYXNlIGZvciBjbGVhcmluZyBtZW1vcnkgdXNpbmcgZGNiei4KKyAgICBUaGlzIHJlcXVpcmVzIHRoYXQgd2Uga25vdyB0aGUgY29ycmVjdCBjYWNoZSBsaW5lIHNpemUgZm9yIHRoaXMKKyAgICBwcm9jZXNzb3IuICBHZXR0aW5nIHRoZSBfX2NhY2hlX2xpbmVfc2l6ZSBtYXkgcmVxdWlyZSBlc3RhYmxpc2hpbmcgR09UCisgICAgYWRkcmVzc2FiaWxpdHksIHNvIGJyYW5jaCBvdXQgb2YgbGluZSB0byBzZXQgdGhpcyB1cC4gICovCisgCWJlcQljcjEsIEwoY2hlY2tsaW5lc2l6ZSkKKysjZW5kaWYKKyAKKyAvKiBTdG9yZSBibG9ja3Mgb2YgMzItYnl0ZXMgKDI1Ni1iaXRzKSBzdGFydGluZyBvbiBhIDMyLWJ5dGUgYm91bmRhcnkuCisgICAgQ2FuJ3QgYXNzdW1lIHRoYXQgckNIUiBpcyB6ZXJvIG9yIHRoYXQgdGhlIGNhY2hlIGxpbmUgc2l6ZSBpcyBlaXRoZXIKK0BAIC0xNTgsNiArMTYwLDcgQEAKKyAJYWRkCXJNRU1QLCByTUVNUCwgckFMSUdOCisgCWIJTChtZWRpdW1fdGFpbDIpCS8qIDcybmQgaW5zdHJ1Y3Rpb24gZnJvbSAuYWxpZ24gKi8KKyAKKysjaWZuZGVmIEJST0tFTl9QUENfOHh4X0NQVTE1CisgCS5hbGlnbgk1CisgCW5vcAorIC8qIENsZWFyIGNhY2hlIGxpbmVzIG9mIG1lbW9yeSBpbiAxMjgtYnl0ZSBjaHVua3MuCitAQCAtMTkxLDYgKzE5NCw3IEBACisgCWJkbnoJTCh6bG9vcCkKKyAJYmVxbHIJY3I1CisgCWIJTChtZWRpdW1fdGFpbDIpCisrI2VuZGlmIC8qICEgQlJPS0VOX1BQQ184eHhfQ1BVMTUgKi8KKyAKKyAJLmFsaWduCTUKKyBMKHNtYWxsKToKK0BAIC0yNDgsNiArMjUyLDcgQEAKKyAJc3R3CXJDSFIsIC04KHJNRU1QKQorIAlibHIKKyAKKysjaWZuZGVmIEJST0tFTl9QUENfOHh4X0NQVTE1CisgTChjaGVja2xpbmVzaXplKToKKyAjaWZkZWYgU0hBUkVECisgCW1mbHIJclRNUAorQEAgLTMyOSw2ICszMzQsNyBAQAorIEwoaGFuZGxldGFpbDMyKToKKyAJY2xycndpLglyQUxJR04sIHJMRU4sIDUKKyAJYglMKG5vbmRjYnopCisrI2VuZGlmIC8qICEgQlJPS0VOX1BQQ184eHhfQ1BVMTUgKi8KKyAKKyBFTkQgKEJQX1NZTSAobWVtc2V0KSkKKyBsaWJjX2hpZGRlbl9idWlsdGluX2RlZiAobWVtc2V0KQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy8zLjQuNi8xMDAtdWNsaWJjLWNvbmYucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzMuNC42LzEwMC11Y2xpYmMtY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWFmYzE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy8zLjQuNi8xMDAtdWNsaWJjLWNvbmYucGF0Y2gKQEAgLTAsMCArMSw0OTIgQEAKK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvYm9laG0tZ2MvY29uZmlndXJlIGdjYy0zLjQuNi9ib2VobS1nYy9jb25maWd1cmUKKy0tLSBnY2MtMy40LjYub3JpZy9ib2VobS1nYy9jb25maWd1cmUJMjAwNi0wMy0wNiAwNDo1NTo0OS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtMy40LjYvYm9laG0tZ2MvY29uZmlndXJlCTIwMDctMDgtMTUgMjI6NDk6NDcuMDAwMDAwMDAwICswMjAwCitAQCAtMTk0Nyw2ICsxOTQ3LDExIEBACisgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvbGliL2xpYmMuc28qIC9saWIvbGliYy0qLnNvYAorICAgOzsKKyAKKytsaW51eC11Y2xpYmMqKQorKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKysgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC9saWIvbGlidUNsaWJjLSouc29gCisrICA7OworKworIG5ldGJzZCopCisgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXC5dK1wuc29cLlswLTldK1wuWzAtOV0rJCcKK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvYm9laG0tZ2MvbHRjb25maWcgZ2NjLTMuNC42L2JvZWhtLWdjL2x0Y29uZmlnCistLS0gZ2NjLTMuNC42Lm9yaWcvYm9laG0tZ2MvbHRjb25maWcJMjAwMi0xMS0yMCAxNjo1OTowNy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtMy40LjYvYm9laG0tZ2MvbHRjb25maWcJMjAwNy0wOC0xNSAyMjo0OTo0Ny4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xOTgxLDYgKzE5ODEsMjMgQEAKKyAgIGZpCisgICA7OworIAorK2xpbnV4LXVjbGliYyopCisrICB2ZXJzaW9uX3R5cGU9bGludXgKKysgIG5lZWRfbGliX3ByZWZpeD1ubworKyAgbmVlZF92ZXJzaW9uPW5vCisrICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyRtYWpvciAkbGlibmFtZS5zbycKKysgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyRtYWpvcicKKysgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCisrICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisrICBkZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtMTV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiApJworKyAgZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorKyAgZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL2xpYi9saWJ1Q2xpYmMtKi5zb2AKKysKKysgICMgQXNzdW1lIHVzaW5nIHRoZSB1Q2xpYmMgZHluYW1pYyBsaW5rZXIuCisrICBkeW5hbWljX2xpbmtlcj0idUNsaWJjIGxkLnNvIgorKyAgOzsKKysKKyBuZXRic2QqKQorICAgdmVyc2lvbl90eXBlPXN1bm9zCisgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmggZ2NjLTMuNC42L2djYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmgKKy0tLSBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCTIwMDMtMDktMjcgMDY6NDg6MzAuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTMuNC42L2djYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmgJMjAwNy0wOC0xNSAyMjo0OTo0Ny4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNyw3ICsyNywxMSBAQAorICNkZWZpbmUgU1VCVEFSR0VUX0VYVFJBX1NQRUNTIFwKKyB7ICJlbGZfZHluYW1pY19saW5rZXIiLCBFTEZfRFlOQU1JQ19MSU5LRVIgfSwKKyAKKysjaWZkZWYgVVNFX1VDTElCQworKyNkZWZpbmUgRUxGX0RZTkFNSUNfTElOS0VSCSIvbGliL2xkLXVDbGliYy5zby4wIgorKyNlbHNlCisgI2RlZmluZSBFTEZfRFlOQU1JQ19MSU5LRVIJIi9saWIvbGQtbGludXguc28uMiIKKysjZW5kaWYKKyAKKyAjZGVmaW5lIExJTktfU1BFQyAiLW0gZWxmNjRhbHBoYSAle0cqfSAle3JlbGF4Oi1yZWxheH0JCVwKKyAgICV7Tyo6LU8zfSAleyFPKjotTzF9CQkJCQkJXAorZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCBnY2MtMy40LjYvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKKy0tLSBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDA0LTAxLTMxIDA3OjE4OjQwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy0zLjQuNi9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDA3LTA4LTE1IDIyOjQ5OjQ3LjAwMDAwMDAwMCArMDIwMAorQEAgLTgwLDYgKzgwLDExIEBACisgI2RlZmluZSBFTkRGSUxFX1NQRUMgXAorICAgIiV7IXNoYXJlZDpjcnRlbmQubyVzfSAle3NoYXJlZDpjcnRlbmRTLm8lc30gY3J0bi5vJXMiCisgCisrI2lmZGVmIFVTRV9VQ0xJQkMKKysjZGVmaW5lIEVMRl9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKysjZWxzZQorKyNkZWZpbmUgRUxGX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2VuZGlmCisgI3VuZGVmICBMSU5LX1NQRUMKKyAjZGVmaW5lIExJTktfU1BFQyAiJXtoKn0gJXt2ZXJzaW9uOi12fSBcCisgICAgJXtifSAle1dsLCo6JSp9IFwKK0BAIC04Nyw3ICs5Miw3IEBACisgICAgJXtzaGFyZWQ6LXNoYXJlZH0gXAorICAgICV7c3ltYm9saWM6LUJzeW1ib2xpY30gXAorICAgICV7cmR5bmFtaWM6LWV4cG9ydC1keW5hbWljfSBcCistICAgJXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyIC9saWIvbGQtbGludXguc28uMn0gXAorKyAgICV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAiIEVMRl9EWU5BTUlDX0xJTktFUiAifSBcCisgICAgLVggXAorICAgICV7bWJpZy1lbmRpYW46LUVCfSIgXAorICAgIFNVQlRBUkdFVF9FWFRSQV9MSU5LX1NQRUMKK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9jcmlzL2xpbnV4LmggZ2NjLTMuNC42L2djYy9jb25maWcvY3Jpcy9saW51eC5oCistLS0gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9jcmlzL2xpbnV4LmgJMjAwMy0xMS0yOSAwNDowODoxMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtMy40LjYvZ2NjL2NvbmZpZy9jcmlzL2xpbnV4LmgJMjAwNy0wOC0xNSAyMjo0OTo0Ny4wMDAwMDAwMDAgKzAyMDAKK0BAIC03OSw2ICs3OSwyNSBAQAorICN1bmRlZiBDUklTX0RFRkFVTFRfQ1BVX1ZFUlNJT04KKyAjZGVmaW5lIENSSVNfREVGQVVMVF9DUFVfVkVSU0lPTiBDUklTX0NQVV9ORworIAorKyNpZmRlZiBVU0VfVUNMSUJDCisrCisrI3VuZGVmIENSSVNfU1VCVEFSR0VUX1ZFUlNJT04KKysjZGVmaW5lIENSSVNfU1VCVEFSR0VUX1ZFUlNJT04gIiAtIGNyaXMtYXhpcy1saW51eC11Y2xpYmMiCisrCisrI3VuZGVmIENSSVNfTElOS19TVUJUQVJHRVRfU1BFQworKyNkZWZpbmUgQ1JJU19MSU5LX1NVQlRBUkdFVF9TUEVDIFwKKysgIi1tY3Jpc2xpbnV4XAorKyAgLXJwYXRoLWxpbmsgaW5jbHVkZS9hc20vLi4vLi4lc1wKKysgICV7c2hhcmVkfSAle3N0YXRpY31cCisrICAle3N5bWJvbGljOi1CZHluYW1pY30gJXtzaGxpYjotQmR5bmFtaWN9ICV7c3RhdGljOi1Cc3RhdGljfVwKKysgICV7IXNoYXJlZDogXAorKyAgICAleyFzdGF0aWM6IFwKKysgICAgICAle3JkeW5hbWljOi1leHBvcnQtZHluYW1pY30gXAorKyAgICAgICV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAvbGliL2xkLXVDbGliYy5zby4wfX19IFwKKysgICV7IXI6JXtPMnxPMzogLS1nYy1zZWN0aW9uc319IgorKworKyNlbHNlICAvKiBVU0VfVUNMSUJDICovCisrCisgI3VuZGVmIENSSVNfU1VCVEFSR0VUX1ZFUlNJT04KKyAjZGVmaW5lIENSSVNfU1VCVEFSR0VUX1ZFUlNJT04gIiAtIGNyaXMtYXhpcy1saW51eC1nbnUiCisgCitAQCAtOTMsNiArMTEyLDggQEAKKyAgICV7IXNoYXJlZDoleyFzdGF0aWM6JXtyZHluYW1pYzotZXhwb3J0LWR5bmFtaWN9fX1cCisgICAleyFyOiV7TzJ8TzM6IC0tZ2Mtc2VjdGlvbnN9fSIKKyAKKysjZW5kaWYgIC8qIFVTRV9VQ0xJQkMgKi8KKysKKyAKKyAvKiBOb2RlOiBSdW4tdGltZSBUYXJnZXQgKi8KKyAKK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaCBnY2MtMy40LjYvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAorLS0tIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgJMjAwMy0xMS0yOSAwNDowODoxMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtMy40LjYvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAkyMDA3LTA4LTE1IDIyOjQ5OjQ3LjAwMDAwMDAwMCArMDIwMAorQEAgLTU0LDE0ICs1NCwyMSBAQAorICAgIFdoZW4gdGhlIC1zaGFyZWQgbGluayBvcHRpb24gaXMgdXNlZCBhIGZpbmFsIGxpbmsgaXMgbm90IGJlaW5nCisgICAgZG9uZS4gICovCisgCisrI2lmZGVmIFVTRV9VQ0xJQkMKKysjZGVmaW5lIEVMRjMyX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgRUxGNjRfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQ2NC11Q2xpYmMuc28uMCIKKysjZWxzZQorKyNkZWZpbmUgRUxGMzJfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEVMRjY0X0RZTkFNSUNfTElOS0VSICIvbGliNjQvbGQtbGludXgteDg2LTY0LnNvLjIiCisrI2VuZGlmCisgI3VuZGVmCUxJTktfU1BFQworICNkZWZpbmUgTElOS19TUEVDICIleyFtMzI6LW0gZWxmX3g4Nl82NH0gJXttMzI6LW0gZWxmX2kzODZ9IFwKKyAgICV7c2hhcmVkOi1zaGFyZWR9IFwKKyAgICV7IXNoYXJlZDogXAorICAgICAleyFzdGF0aWM6IFwKKyAgICAgICAle3JkeW5hbWljOi1leHBvcnQtZHluYW1pY30gXAorLSAgICAgICV7bTMyOiV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAvbGliL2xkLWxpbnV4LnNvLjJ9fSBcCistICAgICAgJXshbTMyOiV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAvbGliNjQvbGQtbGludXgteDg2LTY0LnNvLjJ9fX0gXAorKyAgICAgICV7bTMyOiV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAiIEVMRjMyX0RZTkFNSUNfTElOS0VSICJ9fSBcCisrICAgICAgJXshbTMyOiV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAiIEVMRjY0X0RZTkFNSUNfTElOS0VSICJ9fX0gXAorICAgICAle3N0YXRpYzotc3RhdGljfX0iCisgCisgI2RlZmluZSBNVUxUSUxJQl9ERUZBVUxUUyB7ICJtNjQiIH0KK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmggZ2NjLTMuNC42L2djYy9jb25maWcvaTM4Ni9saW51eC5oCistLS0gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgJMjAwMy0xMS0yOSAwNDowODoxMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtMy40LjYvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgJMjAwNy0wOC0xNSAyMjo0OTo0Ny4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMTAsMjIgKzExMCwyMSBAQAorIAorICN1bmRlZglMSU5LX1NQRUMKKyAjaWZkZWYgVVNFX0dOVUxJQkNfMQorLSNkZWZpbmUgTElOS19TUEVDICItbSBlbGZfaTM4NiAle3NoYXJlZDotc2hhcmVkfSBcCistICAleyFzaGFyZWQ6IFwKKy0gICAgJXshaWJjczogXAorLSAgICAgICV7IXN0YXRpYzogXAorLQkle3JkeW5hbWljOi1leHBvcnQtZHluYW1pY30gXAorLQkleyFkeW5hbWljLWxpbmtlcjotZHluYW1pYy1saW5rZXIgL2xpYi9sZC1saW51eC5zby4xfX0gXAorLQkle3N0YXRpYzotc3RhdGljfX19IgorKyNkZWZpbmUgRUxGX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjEiCisgI2Vsc2UKKysjaWZkZWYgVVNFX1VDTElCQworKyNkZWZpbmUgRUxGX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLXVDbGliYy5zby4wIgorKyNlbHNlCisrI2RlZmluZSBFTEZfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZW5kaWYKKysjZW5kaWYKKyAjZGVmaW5lIExJTktfU1BFQyAiLW0gZWxmX2kzODYgJXtzaGFyZWQ6LXNoYXJlZH0gXAorICAgJXshc2hhcmVkOiBcCisgICAgICV7IWliY3M6IFwKKyAgICAgICAleyFzdGF0aWM6IFwKKyAJJXtyZHluYW1pYzotZXhwb3J0LWR5bmFtaWN9IFwKKy0JJXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyIC9saWIvbGQtbGludXguc28uMn19IFwKKysJJXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyICIgRUxGX0RZTkFNSUNfTElOS0VSICJ9fSBcCisgCSV7c3RhdGljOi1zdGF0aWN9fX0iCistI2VuZGlmCisgCisgLyogQSBDIHN0YXRlbWVudCAoc2FucyBzZW1pY29sb24pIHRvIG91dHB1dCB0byB0aGUgc3RkaW8gc3RyZWFtCisgICAgRklMRSB0aGUgYXNzZW1ibGVyIGRlZmluaXRpb24gb2YgdW5pbml0aWFsaXplZCBnbG9iYWwgREVDTCBuYW1lZAorZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL2lhNjQvbGludXguaCBnY2MtMy40LjYvZ2NjL2NvbmZpZy9pYTY0L2xpbnV4LmgKKy0tLSBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL2lhNjQvbGludXguaAkyMDA0LTAyLTA3IDA4OjU2OjE3LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy0zLjQuNi9nY2MvY29uZmlnL2lhNjQvbGludXguaAkyMDA3LTA4LTE1IDIyOjQ5OjQ3LjAwMDAwMDAwMCArMDIwMAorQEAgLTM3LDEzICszNywxOCBAQAorIC8qIERlZmluZSB0aGlzIGZvciBzaGFyZWQgbGlicmFyeSBzdXBwb3J0IGJlY2F1c2UgaXQgaXNuJ3QgaW4gdGhlIG1haW4KKyAgICBsaW51eC5oIGZpbGUuICAqLworIAorKyNpZmRlZiBVU0VfVUNMSUJDCisrI2RlZmluZSBFTEZfRFlOQU1JQ19MSU5LRVIJIi9saWIvbGQtdUNsaWJjLnNvLjAiCisrI2Vsc2UKKysjZGVmaW5lIEVMRl9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC1pYTY0LnNvLjIiCisrI2VuZGlmCisgI3VuZGVmIExJTktfU1BFQworICNkZWZpbmUgTElOS19TUEVDICJcCisgICAle3NoYXJlZDotc2hhcmVkfSBcCisgICAleyFzaGFyZWQ6IFwKKyAgICAgJXshc3RhdGljOiBcCisgICAgICAgJXtyZHluYW1pYzotZXhwb3J0LWR5bmFtaWN9IFwKKy0gICAgICAleyFkeW5hbWljLWxpbmtlcjotZHluYW1pYy1saW5rZXIgL2xpYi9sZC1saW51eC1pYTY0LnNvLjJ9fSBcCisrICAgICAgJXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyICIgRUxGX0RZTkFNSUNfTElOS0VSICJ9fSBcCisgICAgICAgJXtzdGF0aWM6LXN0YXRpY319IgorIAorIAorZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL202OGsvbGludXguaCBnY2MtMy40LjYvZ2NjL2NvbmZpZy9tNjhrL2xpbnV4LmgKKy0tLSBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL202OGsvbGludXguaAkyMDAzLTExLTI5IDA0OjA4OjEzLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy0zLjQuNi9nY2MvY29uZmlnL202OGsvbGludXguaAkyMDA3LTA4LTE1IDIyOjQ5OjQ3LjAwMDAwMDAwMCArMDIwMAorQEAgLTEzMSwxMiArMTMxLDE3IEBACisgCisgLyogSWYgRUxGIGlzIHRoZSBkZWZhdWx0IGZvcm1hdCwgd2Ugc2hvdWxkIG5vdCB1c2UgL2xpYi9lbGYuICAqLworIAorKyNpZmRlZiBVU0VfVUNMSUJDCisrI2RlZmluZSBFTEZfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCisrI2Vsc2UKKysjZGVmaW5lIEVMRl9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC5zby4xIgorKyNlbmRpZgorICN1bmRlZglMSU5LX1NQRUMKKyAjZGVmaW5lIExJTktfU1BFQyAiLW0gbTY4a2VsZiAle3NoYXJlZH0gXAorICAgJXshc2hhcmVkOiBcCisgICAgICV7IXN0YXRpYzogXAorICAgICAgICV7cmR5bmFtaWM6LWV4cG9ydC1keW5hbWljfSBcCistICAgICAgJXshZHluYW1pYy1saW5rZXIqOi1keW5hbWljLWxpbmtlciAvbGliL2xkLnNvLjF9fSBcCisrICAgICAgJXshZHluYW1pYy1saW5rZXIqOi1keW5hbWljLWxpbmtlciAiIEVMRl9EWU5BTUlDX0xJTktFUiAifX0gXAorICAgICAle3N0YXRpY319IgorIAorIC8qIEZvciBjb21wYXRpYmlsaXR5IHdpdGggbGludXgvYS5vdXQgKi8KK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmggZ2NjLTMuNC42L2djYy9jb25maWcvbWlwcy9saW51eC5oCistLS0gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgJMjAwNC0wNi0xNiAwMzo0MjoyNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtMy40LjYvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgJMjAwNy0wOC0xNSAyMjo0OTo0Ny4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMDksNiArMTA5LDExIEBACisgCisgLyogQm9ycm93ZWQgZnJvbSBzcGFyYy9saW51eC5oICovCisgI3VuZGVmIExJTktfU1BFQworKyNpZmRlZiBVU0VfVUNMSUJDCisrI2RlZmluZSBFTEZfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCisrI2Vsc2UKKysjZGVmaW5lIEVMRl9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC5zby4xIgorKyNlbmRpZgorICNkZWZpbmUgTElOS19TUEVDIFwKKyAgIiUoZW5kaWFuX3NwZWMpIFwKKyAgICV7c2hhcmVkOi1zaGFyZWR9IFwKK0BAIC0xMTYsNyArMTIxLDcgQEAKKyAgICAgJXshaWJjczogXAorICAgICAgICV7IXN0YXRpYzogXAorICAgICAgICAgJXtyZHluYW1pYzotZXhwb3J0LWR5bmFtaWN9IFwKKy0gICAgICAgICV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAvbGliL2xkLnNvLjF9fSBcCisrICAgICAgICAleyFkeW5hbWljLWxpbmtlcjotZHluYW1pYy1saW5rZXIgIiBFTEZfRFlOQU1JQ19MSU5LRVIgIn19IFwKKyAgICAgICAgICV7c3RhdGljOi1zdGF0aWN9fX0iCisgCisgI3VuZGVmIFNVQlRBUkdFVF9BU01fU1BFQworZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL3BhL3BhLWxpbnV4LmggZ2NjLTMuNC42L2djYy9jb25maWcvcGEvcGEtbGludXguaAorLS0tIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvcGEvcGEtbGludXguaAkyMDAzLTExLTI5IDA0OjA4OjEzLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy0zLjQuNi9nY2MvY29uZmlnL3BhL3BhLWxpbnV4LmgJMjAwNy0wOC0xNSAyMjo0OTo0Ny4wMDAwMDAwMDAgKzAyMDAKK0BAIC03NywxMyArNzcsMTggQEAKKyAvKiBEZWZpbmUgdGhpcyBmb3Igc2hhcmVkIGxpYnJhcnkgc3VwcG9ydCBiZWNhdXNlIGl0IGlzbid0IGluIHRoZSBtYWluCisgICAgbGludXguaCBmaWxlLiAgKi8KKyAKKysjaWZkZWYgVVNFX1VDTElCQworKyNkZWZpbmUgRUxGX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLXVDbGliYy5zby4wIgorKyNlbHNlCisrI2RlZmluZSBFTEZfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQuc28uMSIKKysjZW5kaWYKKyAjdW5kZWYgTElOS19TUEVDCisgI2RlZmluZSBMSU5LX1NQRUMgIlwKKyAgICV7c2hhcmVkOi1zaGFyZWR9IFwKKyAgICV7IXNoYXJlZDogXAorICAgICAleyFzdGF0aWM6IFwKKyAgICAgICAle3JkeW5hbWljOi1leHBvcnQtZHluYW1pY30gXAorLSAgICAgICV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAvbGliL2xkLnNvLjF9fSBcCisrICAgICAgJXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyICIgRUxGX0RZTkFNSUNfTElOS0VSICJ9fSBcCisgICAgICAgJXtzdGF0aWM6LXN0YXRpY319IgorIAorIC8qIGdsaWJjJ3MgcHJvZmlsaW5nIGZ1bmN0aW9ucyBkb24ndCBuZWVkIGdjYyB0byBhbGxvY2F0ZSBjb3VudGVycy4gICovCitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvcnM2MDAwL2xpbnV4LmggZ2NjLTMuNC42L2djYy9jb25maWcvcnM2MDAwL2xpbnV4LmgKKy0tLSBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9saW51eC5oCTIwMDUtMDMtMTcgMTE6NDE6MTguMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTMuNC42L2djYy9jb25maWcvcnM2MDAwL2xpbnV4LmgJMjAwNy0wOC0xNSAyMjo0OTo0Ny4wMDAwMDAwMDAgKzAyMDAKK0BAIC02OSw3ICs2OSwxMSBAQAorICNkZWZpbmUgTElOS19TVEFSVF9ERUZBVUxUX1NQRUMgIiUobGlua19zdGFydF9saW51eCkiCisgCisgI3VuZGVmCUxJTktfT1NfREVGQVVMVF9TUEVDCisrI2lmZGVmIFVTRV9VQ0xJQkMKKysjZGVmaW5lIExJTktfT1NfREVGQVVMVF9TUEVDICIlKGxpbmtfb3NfbGludXhfdWNsaWJjKSIKKysjZWxzZQorICNkZWZpbmUgTElOS19PU19ERUZBVUxUX1NQRUMgIiUobGlua19vc19saW51eCkiCisrI2VuZGlmCisgCisgI2RlZmluZSBMSU5LX0dDQ19DX1NFUVVFTkNFX1NQRUMgXAorICAgIiV7c3RhdGljOi0tc3RhcnQtZ3JvdXB9ICVHICVMICV7c3RhdGljOi0tZW5kLWdyb3VwfSV7IXN0YXRpYzolR30iCitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvcnM2MDAwL3N5c3Y0LmggZ2NjLTMuNC42L2djYy9jb25maWcvcnM2MDAwL3N5c3Y0LmgKKy0tLSBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9zeXN2NC5oCTIwMDUtMTAtMzAgMDA6MzU6MzcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTMuNC42L2djYy9jb25maWcvcnM2MDAwL3N5c3Y0LmgJMjAwNy0wOC0xNSAyMjo0OTo0Ny4wMDAwMDAwMDAgKzAyMDAKK0BAIC05NDksNiArOTQ5LDcgQEAKKyAgIG1jYWxsLWxpbnV4ICA6ICUobGlua19vc19saW51eCkgICAgICAgOyBcCisgICBtY2FsbC1nbnUgICAgOiAlKGxpbmtfb3NfZ251KSAgICAgICAgIDsgXAorICAgbWNhbGwtbmV0YnNkIDogJShsaW5rX29zX25ldGJzZCkgICAgICA7IFwKKysgIG1jYWxsLWxpbnV4LXVjbGliYyA6ICUobGlua19vc19saW51eF91Y2xpYmMpOyBcCisgICBtY2FsbC1vcGVuYnNkOiAlKGxpbmtfb3Nfb3BlbmJzZCkgICAgIDsgXAorICAgICAgICAgICAgICAgIDogJShsaW5rX29zX2RlZmF1bHQpICAgICB9IgorIAorQEAgLTExMjcsNiArMTEyOCwxMCBAQAorICAgJXtyZHluYW1pYzotZXhwb3J0LWR5bmFtaWN9IFwKKyAgICV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAvbGliL2xkLnNvLjF9fX0iCisgCisrI2RlZmluZSBMSU5LX09TX0xJTlVYX1VDTElCQ19TUEVDICItbSBlbGYzMnBwY2xpbnV4ICV7IXNoYXJlZDogJXshc3RhdGljOiBcCisrICAle3JkeW5hbWljOi1leHBvcnQtZHluYW1pY30gXAorKyAgJXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyIC9saWIvbGQtdUNsaWJjLnNvLjB9fX0iCisrCisgI2lmIGRlZmluZWQoSEFWRV9MRF9FSF9GUkFNRV9IRFIpCisgIyBkZWZpbmUgTElOS19FSF9TUEVDICIleyFzdGF0aWM6LS1laC1mcmFtZS1oZHJ9ICIKKyAjZW5kaWYKK0BAIC0xMjkzLDYgKzEyOTgsNyBAQAorICAgeyAibGlua19vc19zaW0iLAkJTElOS19PU19TSU1fU1BFQyB9LAkJCVwKKyAgIHsgImxpbmtfb3NfZnJlZWJzZCIsCQlMSU5LX09TX0ZSRUVCU0RfU1BFQyB9LAkJCVwKKyAgIHsgImxpbmtfb3NfbGludXgiLAkJTElOS19PU19MSU5VWF9TUEVDIH0sCQkJXAorKyAgeyAibGlua19vc19saW51eF91Y2xpYmMiLAlMSU5LX09TX0xJTlVYX1VDTElCQ19TUEVDIH0sCQlcCisgICB7ICJsaW5rX29zX2dudSIsCQlMSU5LX09TX0dOVV9TUEVDIH0sCQkJXAorICAgeyAibGlua19vc19uZXRic2QiLAkJTElOS19PU19ORVRCU0RfU1BFQyB9LAkJCVwKKyAgIHsgImxpbmtfb3Nfb3BlbmJzZCIsCQlMSU5LX09TX09QRU5CU0RfU1BFQyB9LAkJCVwKK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9zMzkwL2xpbnV4LmggZ2NjLTMuNC42L2djYy9jb25maWcvczM5MC9saW51eC5oCistLS0gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9zMzkwL2xpbnV4LmgJMjAwMy0xMS0yOSAwNDowODoxMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtMy40LjYvZ2NjL2NvbmZpZy9zMzkwL2xpbnV4LmgJMjAwNy0wOC0xNSAyMjo0OTo0Ny4wMDAwMDAwMDAgKzAyMDAKK0BAIC03Nyw2ICs3NywxMyBAQAorICNkZWZpbmUgTVVMVElMSUJfREVGQVVMVFMgeyAibTMxIiB9CisgI2VuZGlmCisgCisrI2lmZGVmIFVTRV9VQ0xJQkMKKysjZGVmaW5lIEVMRjMxX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgRUxGNjRfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQ2NC11Q2xpYmMuc28uMCIKKysjZWxzZQorKyNkZWZpbmUgRUxGMzFfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQuc28uMSIKKysjZGVmaW5lIEVMRjY0X0RZTkFNSUNfTElOS0VSICIvbGliL2xkNjQuc28uMSIKKysjZW5kaWYKKyAjdW5kZWYgIExJTktfU1BFQworICNkZWZpbmUgTElOS19TUEVDIFwKKyAgICIle20zMTotbSBlbGZfczM5MH0le202NDotbSBlbGY2NF9zMzkwfSBcCitAQCAtODYsOCArOTMsOCBAQAorICAgICAgICV7IXN0YXRpYzogXAorIAkle3JkeW5hbWljOi1leHBvcnQtZHluYW1pY30gXAorIAkleyFkeW5hbWljLWxpbmtlcjogXAorLSAgICAgICAgICAle20zMTotZHluYW1pYy1saW5rZXIgL2xpYi9sZC5zby4xfSBcCistICAgICAgICAgICV7bTY0Oi1keW5hbWljLWxpbmtlciAvbGliL2xkNjQuc28uMX19fX0iCisrICAgICAgICAgICV7bTMxOi1keW5hbWljLWxpbmtlciAiIEVMRjMxX0RZTkFNSUNfTElOS0VSICJ9IFwKKysgICAgICAgICAgJXttNjQ6LWR5bmFtaWMtbGlua2VyICIgRUxGNjRfRFlOQU1JQ19MSU5LRVIgIn19fX0iCisgCisgCisgI2RlZmluZSBUQVJHRVRfQVNNX0ZJTEVfRU5EIGZpbGVfZW5kX2luZGljYXRlX2V4ZWNfc3RhY2sKK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9zaC9saW51eC5oIGdjYy0zLjQuNi9nY2MvY29uZmlnL3NoL2xpbnV4LmgKKy0tLSBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL3NoL2xpbnV4LmgJMjAwNC0wMS0xMiAwMzoyOToxMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtMy40LjYvZ2NjL2NvbmZpZy9zaC9saW51eC5oCTIwMDctMDgtMTUgMjI6NDk6NDcuMDAwMDAwMDAwICswMjAwCitAQCAtNzMsMTEgKzczLDE2IEBACisgI3VuZGVmIFNVQlRBUkdFVF9MSU5LX0VNVUxfU1VGRklYCisgI2RlZmluZSBTVUJUQVJHRVRfTElOS19FTVVMX1NVRkZJWCAiX2xpbnV4IgorICN1bmRlZiBTVUJUQVJHRVRfTElOS19TUEVDCisrI2lmZGVmIFVTRV9VQ0xJQkMKKysjZGVmaW5lIEVMRl9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKysjZWxzZQorKyNkZWZpbmUgRUxGX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2VuZGlmCisgI2RlZmluZSBTVUJUQVJHRVRfTElOS19TUEVDIFwKKyAgICIle3NoYXJlZDotc2hhcmVkfSBcCisgICAgJXshc3RhdGljOiBcCisgICAgICAle3JkeW5hbWljOi1leHBvcnQtZHluYW1pY30gXAorLSAgICAgJXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyIC9saWIvbGQtbGludXguc28uMn19IFwKKysgICAgICV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAiIEVMRl9EWU5BTUlDX0xJTktFUiAifX0gXAorICAgICV7c3RhdGljOi1zdGF0aWN9IgorIAorICN1bmRlZiBMSUJfU1BFQworZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaCBnY2MtMy40LjYvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmgKKy0tLSBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaAkyMDA0LTA2LTA2IDA1OjU1OjE3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy0zLjQuNi9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaAkyMDA3LTA4LTE1IDIyOjQ5OjQ3LjAwMDAwMDAwMCArMDIwMAorQEAgLTE2NywxMiArMTY3LDE3IEBACisgICB7ICJsaW5rX2FyY2hfZGVmYXVsdCIsIExJTktfQVJDSF9ERUZBVUxUX1NQRUMgfSwJICBcCisgICB7ICJsaW5rX2FyY2giLAkgTElOS19BUkNIX1NQRUMgfSwKKyAgICAgCisrI2lmZGVmIFVTRV9VQ0xJQkMKKysjZGVmaW5lIEVMRl9EWU5BTUlDX0xJTktFUgkiL2xpYi9sZC11Q2xpYmMuc28uMCIKKysjZWxzZQorKyNkZWZpbmUgRUxGX0RZTkFNSUNfTElOS0VSICAiL2xpYi9sZC1saW51eC5zby4yIgorKyNlbmRpZgorICNkZWZpbmUgTElOS19BUkNIMzJfU1BFQyAiLW0gZWxmMzJfc3BhcmMgLVkgUCwvdXNyL2xpYiAle3NoYXJlZDotc2hhcmVkfSBcCisgICAleyFzaGFyZWQ6IFwKKyAgICAgJXshaWJjczogXAorICAgICAgICV7IXN0YXRpYzogXAorICAgICAgICAgJXtyZHluYW1pYzotZXhwb3J0LWR5bmFtaWN9IFwKKy0gICAgICAgICV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAvbGliL2xkLWxpbnV4LnNvLjJ9fSBcCisrICAgICAgICAleyFkeW5hbWljLWxpbmtlcjotZHluYW1pYy1saW5rZXIgIiBFTEZfRFlOQU1JQ19MSU5LRVIgIn19IFwKKyAgICAgICAgICV7c3RhdGljOi1zdGF0aWN9fX0gXAorICIKKyAKK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oIGdjYy0zLjQuNi9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgKKy0tLSBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgJMjAwNC0wNi0wNiAwNTo1NToxNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtMy40LjYvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oCTIwMDctMDgtMTUgMjI6NDk6NDcuMDAwMDAwMDAwICswMjAwCitAQCAtMTYyLDEzICsxNjIsMTggQEAKKyAgICAgICAgICV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAvbGliL2xkLWxpbnV4LnNvLjF9fSBcCisgICAgICAgICAle3N0YXRpYzotc3RhdGljfX19IgorICNlbHNlCisrI2lmZGVmIFVTRV9VQ0xJQkMKKysjZGVmaW5lIEVMRl9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKysjZWxzZQorKyNkZWZpbmUgRUxGX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2VuZGlmCisgI2RlZmluZSBMSU5LX1NQRUMgIi1tIGVsZjMyX3NwYXJjIC1ZIFAsL3Vzci9saWIgJXtzaGFyZWQ6LXNoYXJlZH0gXAorICAgJXshbW5vLXJlbGF4OiV7IXI6LXJlbGF4fX0gXAorICAgJXshc2hhcmVkOiBcCisgICAgICV7IWliY3M6IFwKKyAgICAgICAleyFzdGF0aWM6IFwKKyAgICAgICAgICV7cmR5bmFtaWM6LWV4cG9ydC1keW5hbWljfSBcCistICAgICAgICAleyFkeW5hbWljLWxpbmtlcjotZHluYW1pYy1saW5rZXIgL2xpYi9sZC1saW51eC5zby4yfX0gXAorKyAgICAgICAgJXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyICIgRUxGX0RZTkFNSUNfTElOS0VSICJ9fSBcCisgICAgICAgICAle3N0YXRpYzotc3RhdGljfX19IgorICNlbmRpZgorIAorZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL3QtbGludXgtdWNsaWJjIGdjYy0zLjQuNi9nY2MvY29uZmlnL3QtbGludXgtdWNsaWJjCistLS0gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy90LWxpbnV4LXVjbGliYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy0zLjQuNi9nY2MvY29uZmlnL3QtbGludXgtdWNsaWJjCTIwMDctMDgtMTUgMjI6NDk6NDcuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDUgQEAKKysjIFJlbW92ZSBnbGliYyBzcGVjaWZpYyBmaWxlcyBhZGRlZCBpbiB0LWxpbnV4CisrU0hMSUJfTUFQRklMRVMgOj0gJChmaWx0ZXItb3V0ICQoc3JjZGlyKS9jb25maWcvbGliZ2NjLWdsaWJjLnZlciwgJChTSExJQl9NQVBGSUxFUykpCisrCisrIyBVc2UgdW53aW5kLWR3Mi1mZGUgaW5zdGVhZCBvZiB1bndpbmQtZHcyLWZkZS1nbGliYworK0xJQjJBRERFSCA6PSAkKHN1YnN0IHVud2luZC1kdzItZmRlLWdsaWJjLmMsdW53aW5kLWR3Mi1mZGUuYywkKExJQjJBRERFSCkpCitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcuZ2NjIGdjYy0zLjQuNi9nY2MvY29uZmlnLmdjYworLS0tIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcuZ2NjCTIwMDUtMDctMTkgMjM6MDg6NDguMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTMuNC42L2djYy9jb25maWcuZ2NjCTIwMDctMDgtMTUgMjI6NDk6NDcuMDAwMDAwMDAwICswMjAwCitAQCAtMjMyMiw2ICsyMzIyLDEyIEBACisgCTs7CisgZXNhYworIAorKyMgUmF0aGVyIHRoYW4gaG9vayBpbnRvIGVhY2ggdGFyZ2V0LCBqdXN0IGRvIGl0IGFmdGVyIGFsbCB0aGUgbGludXgKKysjIHRhcmdldHMgaGF2ZSBiZWVuIHByb2Nlc3NlZAorK2Nhc2UgJHt0YXJnZXR9IGluCisrKi1saW51eC11Y2xpYmMqKSB0bV9kZWZpbmVzPSIke3RtX2RlZmluZXN9IFVTRV9VQ0xJQkMiIDsgdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSB0LWxpbnV4LXVjbGliYyIKKytlc2FjCisrCisgIyBTdXBwb3J0IGZvciAtLXdpdGgtY3B1IGFuZCByZWxhdGVkIG9wdGlvbnMgKGFuZCBhIGZldyB1bnJlbGF0ZWQgb3B0aW9ucywKKyAjIHRvbykuCisgY2FzZSAke3dpdGhfY3B1fSBpbgorZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9saWJ0b29sLm00IGdjYy0zLjQuNi9saWJ0b29sLm00CistLS0gZ2NjLTMuNC42Lm9yaWcvbGlidG9vbC5tNAkyMDA0LTA1LTE4IDExOjA5OjE0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy0zLjQuNi9saWJ0b29sLm00CTIwMDctMDgtMTUgMjI6NDk6NDcuMDAwMDAwMDAwICswMjAwCitAQCAtNjg5LDYgKzY4OSwxMSBAQAorICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL2xpYi9saWJjLnNvKiAvbGliL2xpYmMtKi5zb2AKKyAgIDs7CisgCisrbGludXgtdWNsaWJjKikKKysgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisrICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvbGliL2xpYnVDbGliYy0qLnNvYAorKyAgOzsKKysKKyBuZXRic2QqKQorICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICAgW2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9cLl0rXC5zb1wuWzAtOV0rXC5bMC05XSskJ10KK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvbHRjb25maWcgZ2NjLTMuNC42L2x0Y29uZmlnCistLS0gZ2NjLTMuNC42Lm9yaWcvbHRjb25maWcJMjAwNC0wMy0wNSAyMjowNTo0MS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtMy40LjYvbHRjb25maWcJMjAwNy0wOC0xNSAyMjo0OTo0Ny4wMDAwMDAwMDAgKzAyMDAKK0BAIC02MDIsNiArNjAyLDcgQEAKKyAKKyAjIFRyYW5zZm9ybSBsaW51eCogdG8gKi0qLWxpbnV4LWdudSosIHRvIHN1cHBvcnQgb2xkIGNvbmZpZ3VyZSBzY3JpcHRzLgorIGNhc2UgJGhvc3Rfb3MgaW4KKytsaW51eC11Y2xpYmMqKSA7OworIGxpbnV4LWdudSopIDs7CisgbGludXgqKSBob3N0PWBlY2hvICRob3N0IHwgc2VkICdzL15cKC4qLS4qLWxpbnV4XClcKC4qXCkkL1wxLWdudVwyLydgCisgZXNhYworQEAgLTEyNjIsNiArMTI2MywyNCBAQAorICAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKKyAgIDs7CisgCisrbGludXgtdWNsaWJjKikKKysgIHZlcnNpb25fdHlwZT1saW51eAorKyAgbmVlZF9saWJfcHJlZml4PW5vCisrICBuZWVkX3ZlcnNpb249bm8KKysgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJG1ham9yICRsaWJuYW1lLnNvJworKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJG1ham9yJworKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKKysgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisrICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKysgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisrICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgorKyAgIyBOb3RlOiBjb3BpZWQgZnJvbSBsaW51eC1nbnUsIGFuZCBtYXkgbm90IGJlIGFwcHJvcHJpYXRlLgorKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworKyAgIyBBc3N1bWUgdXNpbmcgdGhlIHVDbGliYyBkeW5hbWljIGxpbmtlci4KKysgIGR5bmFtaWNfbGlua2VyPSJ1Q2xpYmMgbGQuc28iCisrICA7OworKworIG5ldGJzZCopCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIG5lZWRfdmVyc2lvbj1ubworZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9udWxsIGdjYy0zLjQuNi9udWxsCistLS0gZ2NjLTMuNC42Lm9yaWcvbnVsbAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy0zLjQuNi9udWxsCTIwMDctMDgtMTUgMjI6NDk6NDcuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxIEBACisrfi9kZXYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvMy40LjYvMTEwLXVjbGliYy1sb2NhbGUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzMuNC42LzExMC11Y2xpYmMtbG9jYWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NGZjZjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzMuNC42LzExMC11Y2xpYmMtbG9jYWxlLnBhdGNoCkBAIC0wLDAgKzEsMzI1NSBAQAorZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00IGdjYy0zLjQuNi9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CistLS0gZ2NjLTMuNC42Lm9yaWcvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAkyMDA0LTEwLTI4IDIzOjUyOjQxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy0zLjQuNi9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CTIwMDctMDgtMTUgMjI6NTE6MDEuMDAwMDAwMDAwICswMjAwCitAQCAtMTAxNSw3ICsxMDE1LDcgQEAKKyAgIEFDX01TR19DSEVDS0lORyhbZm9yIEMgbG9jYWxlIHRvIHVzZV0pCisgICBHTElCQ1hYX0VOQUJMRShjbG9jYWxlLGF1dG8sW0A8OkA9TU9ERUxAOj5AXSwKKyAgICAgW3VzZSBNT0RFTCBmb3IgdGFyZ2V0IGxvY2FsZSBwYWNrYWdlXSwKKy0gICAgW3Blcm1pdCBnZW5lcmljfGdudXxpZWVlXzEwMDMuMS0yMDAxfHllc3xub3xhdXRvXSkKKysgICAgW3Blcm1pdCBnZW5lcmljfGdudXxpZWVlXzEwMDMuMS0yMDAxfHVjbGliY3x5ZXN8bm98YXV0b10pCisgICAKKyAgICMgSWYgdGhleSBkaWRuJ3QgdXNlIHRoaXMgb3B0aW9uIHN3aXRjaCwgb3IgaWYgdGhleSBzcGVjaWZpZWQgLS1lbmFibGUKKyAgICMgd2l0aCBubyBzcGVjaWZpYyBtb2RlbCwgd2UnbGwgaGF2ZSB0byBsb29rIGZvciBvbmUuICBJZiB0aGV5CitAQCAtMTAzMSw2ICsxMDMxLDkgQEAKKyAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCisgICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgorICAgICBjYXNlIHgke3RhcmdldF9vc30gaW4KKysgICAgICB4Ki11Y2xpYmMqKQorKyAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz11Y2xpYmMKKysgICAgICAgIDs7CisgICAgICAgeGxpbnV4KiB8IHhnbnUqIHwgeGtmcmVlYnNkKi1nbnUgfCB4a25ldGJzZCotZ251KQorICAgICAgICAgQUNfRUdSRVBfQ1BQKFtfR0xJQkNYWF9va10sIFsKKyAgICAgICAgICNpbmNsdWRlIDxmZWF0dXJlcy5oPgorQEAgLTExNTcsNiArMTE2MCw0MSBAQAorICAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy90aW1lX21lbWJlcnMuY2MKKyAgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgICAgICAgOzsKKysgICAgdWNsaWJjKQorKyAgICAgIEFDX01TR19SRVNVTFQodWNsaWJjKQorKworKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKKysgICAgICAjIGxhbmd1YWdlcy4KKysgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAorKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKKysKKysgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgorKyAgICAgIEFDX0NIRUNLX1BST0coY2hlY2tfbXNnZm10LCBtc2dmbXQsIHllcywgbm8pCisrICAgICAgaWYgdGVzdCB4IiRjaGVja19tc2dmbXQiID0geCJ5ZXMiICYmIHRlc3QgeCIkZW5hYmxlX25scyIgPSB4InllcyI7IHRoZW4KKysgICAgICAgIFVTRV9OTFM9eWVzCisrICAgICAgZmkKKysgICAgICAjIEV4cG9ydCB0aGUgYnVpbGQgb2JqZWN0cy4KKysgICAgICBmb3IgbGluZyBpbiAkQUxMX0xJTkdVQVM7IGRvIFwKKysgICAgICAgIGdsaWJjeHhfTU9GSUxFUz0iJGdsaWJjeHhfTU9GSUxFUyAkbGluZy5tbyI7IFwKKysgICAgICAgIGdsaWJjeHhfUE9GSUxFUz0iJGdsaWJjeHhfUE9GSUxFUyAkbGluZy5wbyI7IFwKKysgICAgICBkb25lCisrICAgICAgQUNfU1VCU1QoZ2xpYmN4eF9NT0ZJTEVTKQorKyAgICAgIEFDX1NVQlNUKGdsaWJjeHhfUE9GSUxFUykKKysKKysgICAgICBDTE9DQUxFX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysgICAgICBDQ09ERUNWVF9IPWNvbmZpZy9sb2NhbGUvaWVlZV8xMDAzLjEtMjAwMS9jb2RlY3Z0X3NwZWNpYWxpemF0aW9ucy5oCisrICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisrICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisrICAgICAgQ0NUWVBFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKyAgICAgIDs7CisgICBlc2FjCisgCisgICAjIFRoaXMgaXMgd2hlcmUgdGhlIHRlc3RzdWl0ZSBsb29rcyBmb3IgbG9jYWxlIGNhdGFsb2dzLCB1c2luZyB0aGUKK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvbGlic3RkYysrLXYzL2FjbG9jYWwubTQgZ2NjLTMuNC42L2xpYnN0ZGMrKy12My9hY2xvY2FsLm00CistLS0gZ2NjLTMuNC42Lm9yaWcvbGlic3RkYysrLXYzL2FjbG9jYWwubTQJMjAwNC0xMC0yOCAyMzo1Mjo0MS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtMy40LjYvbGlic3RkYysrLXYzL2FjbG9jYWwubTQJMjAwNy0wOC0xNSAyMjo1MTowMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMDQ0LDYgKzEwNDQsOSBAQAorICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgeCR7dGFyZ2V0X29zfSBpbgorKyAgICAgIHgqLXVjbGliYyopCisrCWVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCisrCTs7CisgICAgICAgeGxpbnV4KiB8IHhnbnUqIHwgeGtmcmVlYnNkKi1nbnUgfCB4a25ldGJzZCotZ251KQorICAgICAgICAgQUNfRUdSRVBfQ1BQKFtfR0xJQkNYWF9va10sIFsKKyAgICAgICAgICNpbmNsdWRlIDxmZWF0dXJlcy5oPgorQEAgLTExNzAsNiArMTE3Myw0MSBAQAorICAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy90aW1lX21lbWJlcnMuY2MKKyAgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgICAgICAgOzsKKysgICAgdWNsaWJjKQorKyAgICAgIEFDX01TR19SRVNVTFQodWNsaWJjKQorKworKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKKysgICAgICAjIGxhbmd1YWdlcy4KKysgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAorKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKKysKKysgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgorKyAgICAgIEFDX0NIRUNLX1BST0coY2hlY2tfbXNnZm10LCBtc2dmbXQsIHllcywgbm8pCisrICAgICAgaWYgdGVzdCB4IiRjaGVja19tc2dmbXQiID0geCJ5ZXMiICYmIHRlc3QgeCIkZW5hYmxlX25scyIgPSB4InllcyI7IHRoZW4KKysgICAgICAgIFVTRV9OTFM9eWVzCisrICAgICAgZmkKKysgICAgICAjIEV4cG9ydCB0aGUgYnVpbGQgb2JqZWN0cy4KKysgICAgICBmb3IgbGluZyBpbiAkQUxMX0xJTkdVQVM7IGRvIFwKKysgICAgICAgIGdsaWJjeHhfTU9GSUxFUz0iJGdsaWJjeHhfTU9GSUxFUyAkbGluZy5tbyI7IFwKKysgICAgICAgIGdsaWJjeHhfUE9GSUxFUz0iJGdsaWJjeHhfUE9GSUxFUyAkbGluZy5wbyI7IFwKKysgICAgICBkb25lCisrICAgICAgQUNfU1VCU1QoZ2xpYmN4eF9NT0ZJTEVTKQorKyAgICAgIEFDX1NVQlNUKGdsaWJjeHhfUE9GSUxFUykKKysKKysgICAgICBDTE9DQUxFX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysgICAgICBDQ09ERUNWVF9IPWNvbmZpZy9sb2NhbGUvaWVlZV8xMDAzLjEtMjAwMS9jb2RlY3Z0X3NwZWNpYWxpemF0aW9ucy5oCisrICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisrICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisrICAgICAgQ0NUWVBFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKyAgICAgIDs7CisgICBlc2FjCisgCisgICAjIFRoaXMgaXMgd2hlcmUgdGhlIHRlc3RzdWl0ZSBsb29rcyBmb3IgbG9jYWxlIGNhdGFsb2dzLCB1c2luZyB0aGUKK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGdjYy0zLjQuNi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKy0tLSBnY2MtMy40LjYub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtMy40LjYvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCTIwMDctMDgtMTUgMjI6NTE6MDEuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDE2MCBAQAorKy8vIFdyYXBwZXIgZm9yIHVuZGVybHlpbmcgQy1sYW5ndWFnZSBsb2NhbGl6YXRpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi44ICBTdGFuZGFyZCBsb2NhbGUgY2F0ZWdvcmllcy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGNlcnJubz4gIC8vIEZvciBlcnJubworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KKysjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fc3RydG9sX2woUywgRSwgQiwgTCkgICAgICBzdHJ0b2woKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG91bF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b3VsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvbGxfbChTLCBFLCBCLCBMKSAgICAgc3RydG9sbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b3VsbF9sKFMsIEUsIEIsIEwpICAgIHN0cnRvdWxsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorKyNkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKysjZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorKyN3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CisrI2RlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorKyNkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQgCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZmxvYXQmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCAKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19mOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19kOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGxvbmcgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2xkOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHZvaWQKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgCisrCQkJCSAgICBfX2NfbG9jYWxlIF9fb2xkKQorKyAgeworKyAgICBfX2Nsb2MgPSBfX25ld2xvY2FsZSgxIDw8IExDX0FMTCwgX19zLCBfX29sZCk7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgaWYgKCFfX2Nsb2MpCisrICAgICAgeworKwkvLyBUaGlzIG5hbWVkIGxvY2FsZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIE9TLgorKwlfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUgIgorKwkJCSAgICAgICJuYW1lIG5vdCB2YWxpZCIpKTsKKysgICAgICB9CisrI2VuZGlmCisrICB9CisrICAKKysgIHZvaWQKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorKyAgeworKyAgICBpZiAoX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorKyAgICAgIF9fZnJlZWxvY2FsZShfX2Nsb2MpOyAKKysgIH0KKysKKysgIF9fY19sb2NhbGUKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKysgIHsgcmV0dXJuIF9fZHVwbG9jYWxlKF9fY2xvYyk7IH0KKyt9IC8vIG5hbWVzcGFjZSBzdGQKKysKKytuYW1lc3BhY2UgX19nbnVfY3h4CisreworKyAgY29uc3QgY2hhciogY29uc3QgY2F0ZWdvcnlfbmFtZXNbNiArIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTXSA9CisrICAgIHsKKysgICAgICAiTENfQ1RZUEUiLCAKKysgICAgICAiTENfTlVNRVJJQyIsCisrICAgICAgIkxDX1RJTUUiLCAKKysgICAgICAiTENfQ09MTEFURSIsIAorKyAgICAgICJMQ19NT05FVEFSWSIsCisrICAgICAgIkxDX01FU1NBR0VTIiwgCisrI2lmIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTICE9IDAKKysgICAgICAiTENfUEFQRVIiLCAKKysgICAgICAiTENfTkFNRSIsIAorKyAgICAgICJMQ19BRERSRVNTIiwKKysgICAgICAiTENfVEVMRVBIT05FIiwgCisrICAgICAgIkxDX01FQVNVUkVNRU5UIiwgCisrICAgICAgIkxDX0lERU5USUZJQ0FUSU9OIiAKKysjZW5kaWYKKysgICAgfTsKKyt9CisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIGNvbnN0IGNoYXIqIGNvbnN0KiBjb25zdCBsb2NhbGU6Ol9TX2NhdGVnb3JpZXMgPSBfX2dudV9jeHg6OmNhdGVnb3J5X25hbWVzOworK30gIC8vIG5hbWVzcGFjZSBzdGQKK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggZ2NjLTMuNC42L2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCistLS0gZ2NjLTMuNC42Lm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtMy40LjYvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgJMjAwNy0wOC0xNSAyMjo1MTowMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTE1IEBACisrLy8gV3JhcHBlciBmb3IgdW5kZXJseWluZyBDLWxhbmd1YWdlIGxvY2FsaXphdGlvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjggIFN0YW5kYXJkIGxvY2FsZSBjYXRlZ29yaWVzLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaWZuZGVmIF9DX0xPQ0FMRV9ICisrI2RlZmluZSBfQ19MT0NBTEVfSCAxCisrCisrI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorKworKyNpbmNsdWRlIDxjc3RyaW5nPiAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c3RybGVuCisrI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzbnByaW50ZiBvciBzdGQ6OnNwcmludGYKKysjaW5jbHVkZSA8Y2xvY2FsZT4KKysjaW5jbHVkZSA8bGFuZ2luZm8uaD4JCS8vIEZvciBjb2RlY3Z0CisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrI2luY2x1ZGUgPGljb252Lmg+CQkvLyBGb3IgY29kZWN2dCB1c2luZyBpY29udiwgaWNvbnZfdAorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyNpbmNsdWRlIDxsaWJpbnRsLmg+IAkJLy8gRm9yIG1lc3NhZ2VzCisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgd2hhdCBpcyBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgZm9yCisrI2VuZGlmCisrI2RlZmluZSBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgMQorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBjYXRlZ29yaWVzCisrI2VuZGlmCisrLy8gI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyA2CisrI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwCisrIAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrbmFtZXNwYWNlIF9fZ251X2N4eAorK3sKKysgIGV4dGVybiAiQyIgX190eXBlb2YodXNlbG9jYWxlKSBfX3VzZWxvY2FsZTsKKyt9CisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgdHlwZWRlZiBfX2xvY2FsZV90CQlfX2NfbG9jYWxlOworKyNlbHNlCisrICB0eXBlZGVmIGludCoJCQlfX2NfbG9jYWxlOworKyNlbmRpZgorKworKyAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgX1R2IHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgorKyAgLy8gc3RyaW5nLiAgSWYgc25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworKyAgLy8gdGhlIHVuc2FmZSBzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKysgIC8vIGJlIGF2b2lkZWQuCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CisrICAgIGludAorKyAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LCBjb25zdCBpbnQgX19zaXplLCBjb25zdCBjaGFyKiBfX2ZtdCwKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX3ByZWMpCisrICAgIHsKKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjKQorKyAgICB7CisrIyBpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBjaGFyKiBfX29sZCA9IHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX29sZCkgKyAxXTsKKysgICAgICBzdGQ6OnN0cmNweShfX3NhdiwgX19vbGQpOworKyAgICAgIHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgIkMiKTsKKysjIGVuZGlmCisrI2VuZGlmCisrCisrICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjpzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19wcmVjLCBfX3YpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7CisrI2VsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisrI2VuZGlmCisrICAgICAgcmV0dXJuIF9fcmV0OworKyAgICB9CisrfQorKworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggZ2NjLTMuNC42L2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorLS0tIGdjYy0zLjQuNi5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy0zLjQuNi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgJMjAwNy0wOC0xNSAyMjo1MTowMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNTkgQEAKKysvLyBQcm90b3R5cGVzIGZvciBHTElCQyB0aHJlYWQgbG9jYWxlIF9fLXByZWZpeGVkIGZ1bmN0aW9ucyAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLyBXcml0dGVuIGJ5IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGNsb2NhbGU+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgY2xlYW4gdGhpcyB1cAorKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKytleHRlcm4gIkMiIF9fdHlwZW9mKGlzd2N0eXBlX2wpIF9faXN3Y3R5cGVfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKG5sX2xhbmdpbmZvX2wpIF9fbmxfbGFuZ2luZm9fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cmNvbGxfbCkgX19zdHJjb2xsX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJmdGltZV9sKSBfX3N0cmZ0aW1lX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2RfbCkgX19zdHJ0b2RfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvZl9sKSBfX3N0cnRvZl9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9sZF9sKSBfX3N0cnRvbGRfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnhmcm1fbCkgX19zdHJ4ZnJtX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih0b3dsb3dlcl9sKSBfX3Rvd2xvd2VyX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih0b3d1cHBlcl9sKSBfX3Rvd3VwcGVyX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3Njb2xsX2wpIF9fd2NzY29sbF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzZnRpbWVfbCkgX193Y3NmdGltZV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzeGZybV9sKSBfX3djc3hmcm1fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjdHlwZV9sKSBfX3djdHlwZV9sOworK2V4dGVybiAiQyIgX190eXBlb2YobmV3bG9jYWxlKSBfX25ld2xvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKGZyZWVsb2NhbGUpIF9fZnJlZWxvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKGR1cGxvY2FsZSkgX19kdXBsb2NhbGU7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworKworKyNlbmRpZiAvLyBHTElCQyAyLjMgYW5kIGxhdGVyCitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MgZ2NjLTMuNC42L2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKy0tLSBnY2MtMy40LjYub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTMuNC42L2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MJMjAwNy0wOC0xNSAyMjo1MTowMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMzA2IEBACisrLy8gc3RkOjpjb2RlY3Z0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi4xLjUgLSBUZW1wbGF0ZSBjbGFzcyBjb2RlY3Z0CisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIFNwZWNpYWxpemF0aW9ucy4KKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sIAorKwkgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCisrCSBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAorKwkgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CisrICB7CisrICAgIHJlc3VsdCBfX3JldCA9IG9rOworKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysKKysgICAgLy8gd2NzbnJ0b21icyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKysgICAgLy8gaW4gY2FzZSB3ZSBmYWxsIGJhY2sgdG8gd2NydG9tYiBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogd2NzbnJ0b21icyBpcyBhIEdOVSBleHRlbnNpb24KKysgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9fZnJvbSwgX190b19uZXh0ID0gX190bzsKKysJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAorKwkgJiYgX19yZXQgPT0gb2s7KQorKyAgICAgIHsKKysJY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQgPSB3bWVtY2hyKF9fZnJvbV9uZXh0LCBMJ1wwJywKKysJCQkJCQkgICAgICBfX2Zyb21fZW5kIC0gX19mcm9tX25leHQpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7CisrCisrCV9fZnJvbSA9IF9fZnJvbV9uZXh0OworKwljb25zdCBzaXplX3QgX19jb252ID0gd2NzbnJ0b21icyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKKysJCQkJCSBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCisrCQkJCQkgX190b19lbmQgLSBfX3RvX25leHQsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gd2NydG9tYi4KKysJICAgIGZvciAoOyBfX2Zyb20gPCBfX2Zyb21fbmV4dDsgKytfX2Zyb20pCisrCSAgICAgIF9fdG9fbmV4dCArPSB3Y3J0b21iKF9fdG9fbmV4dCwgKl9fZnJvbSwgJl9fdG1wX3N0YXRlKTsKKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJICAgIF9fcmV0ID0gZXJyb3I7CisrCSAgfQorKwllbHNlIGlmIChfX2Zyb21fbmV4dCAmJiBfX2Zyb21fbmV4dCA8IF9fZnJvbV9jaHVua19lbmQpCisrCSAgeworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgIH0KKysKKysJaWYgKF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3JldCA9PSBvaykKKysJICB7CisrCSAgICBleHRlcm5fdHlwZSBfX2J1ZltNQl9MRU5fTUFYXTsKKysJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKKysJICAgIGNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3J0b21iKF9fYnVmLCAqX19mcm9tX25leHQsICZfX3RtcF9zdGF0ZSk7CisrCSAgICBpZiAoX19jb252ID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihfX3RvX2VuZCAtIF9fdG9fbmV4dCkpCisrCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICAgIGVsc2UKKysJICAgICAgeworKwkJbWVtY3B5KF9fdG9fbmV4dCwgX19idWYsIF9fY29udik7CisrCQlfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCQlfX3RvX25leHQgKz0gX19jb252OworKwkJKytfX2Zyb21fbmV4dDsKKysJICAgICAgfQorKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7IAorKyAgfQorKyAgCisrICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sIAorKwljb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKysJaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKKysJaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CisrICB7CisrICAgIHJlc3VsdCBfX3JldCA9IG9rOworKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysKKysgICAgLy8gbWJzbnJ0b3djcyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKysgICAgLy8gaW4gY2FzZSB3ZSBzdG9yZSBhIEwnXDAnIGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiBtYnNucnRvd2NzIGlzIGEgR05VIGV4dGVuc2lvbgorKyAgICBmb3IgKF9fZnJvbV9uZXh0ID0gX19mcm9tLCBfX3RvX25leHQgPSBfX3RvOworKwkgX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fdG9fbmV4dCA8IF9fdG9fZW5kCisrCSAmJiBfX3JldCA9PSBvazspCisrICAgICAgeworKwljb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZDsKKysJX19mcm9tX2NodW5rX2VuZCA9IHN0YXRpY19jYXN0PGNvbnN0IGV4dGVybl90eXBlKj4obWVtY2hyKF9fZnJvbV9uZXh0LCAnXDAnLAorKwkJCQkJCQkJICBfX2Zyb21fZW5kCisrCQkJCQkJCQkgIC0gX19mcm9tX25leHQpKTsKKysJaWYgKCFfX2Zyb21fY2h1bmtfZW5kKQorKwkgIF9fZnJvbV9jaHVua19lbmQgPSBfX2Zyb21fZW5kOworKworKwlfX2Zyb20gPSBfX2Zyb21fbmV4dDsKKysJc2l6ZV90IF9fY29udiA9IG1ic25ydG93Y3MoX190b19uZXh0LCAmX19mcm9tX25leHQsCisrCQkJCSAgIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb21fbmV4dCwKKysJCQkJICAgX190b19lbmQgLSBfX3RvX25leHQsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gbWJydG93Yy4KKysJICAgIGZvciAoOzsgKytfX3RvX25leHQsIF9fZnJvbSArPSBfX2NvbnYpCisrCSAgICAgIHsKKysJCV9fY29udiA9IG1icnRvd2MoX190b19uZXh0LCBfX2Zyb20sIF9fZnJvbV9lbmQgLSBfX2Zyb20sCisrCQkJCSAmX190bXBfc3RhdGUpOworKwkJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKQorKwkJICAgIHx8IF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSkKKysJCSAgYnJlYWs7CisrCSAgICAgIH0KKysJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tOworKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOwkgICAgCisrCSAgICBfX3JldCA9IGVycm9yOworKwkgIH0KKysJZWxzZSBpZiAoX19mcm9tX25leHQgJiYgX19mcm9tX25leHQgPCBfX2Zyb21fY2h1bmtfZW5kKQorKwkgIHsKKysJICAgIC8vIEl0IGlzIHVuY2xlYXIgd2hhdCB0byByZXR1cm4gaW4gdGhpcyBjYXNlIChzZWUgRFIgMzgyKS4gCisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tX2NodW5rX2VuZDsKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgfQorKworKwlpZiAoX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fcmV0ID09IG9rKQorKwkgIHsKKysJICAgIGlmIChfX3RvX25leHQgPCBfX3RvX2VuZCkKKysJICAgICAgeworKwkJLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MKKysJCV9fdG1wX3N0YXRlID0gX19zdGF0ZTsJCQorKwkJKytfX2Zyb21fbmV4dDsKKysJCSpfX3RvX25leHQrKyA9IEwnXDAnOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OyAKKysgIH0KKysKKysgIGludCAKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkKKysgIHsKKysgICAgLy8gWFhYIFRoaXMgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGF0IHRoZSBlbmNvZGluZyBpcworKyAgICAvLyBzdGF0ZWxlc3MgYW5kIGlzIGVpdGhlciBzaW5nbGUtYnl0ZSBvciB2YXJpYWJsZS13aWR0aC4KKysgICAgaW50IF9fcmV0ID0gMDsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrICAgIGlmIChNQl9DVVJfTUFYID09IDEpCisrICAgICAgX19yZXQgPSAxOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfSAgCisrCisrICBpbnQgCisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrICAgIC8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzLgorKyAgICBpbnQgX19yZXQgPSBNQl9DVVJfTUFYOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKyAgCisrICBpbnQgCisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fbGVuZ3RoKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCisrCSAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QKKysgIHsKKysgICAgaW50IF9fcmV0ID0gMDsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIG1ic25ydG93Y3MgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2UgYWR2YW5jZSBwYXN0IGl0IGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiBtYnNucnRvd2NzIGlzIGEgR05VIGV4dGVuc2lvbgorKyAgCisrICAgIC8vIEEgZHVtbXkgaW50ZXJuYWwgYnVmZmVyIGlzIG5lZWRlZCBpbiBvcmRlciBmb3IgbWJzbnJ0b2N3cyB0byBjb25zaWRlcgorKyAgICAvLyBpdHMgZm91cnRoIHBhcmFtZXRlciAoaXQgd291bGRuJ3Qgd2l0aCBOVUxMIGFzIGZpcnN0IHBhcmFtZXRlcikuCisrICAgIHdjaGFyX3QqIF9fdG8gPSBzdGF0aWNfY2FzdDx3Y2hhcl90Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2Yod2NoYXJfdCkgCisrCQkJCQkJCSAgICogX19tYXgpKTsKKysgICAgd2hpbGUgKF9fZnJvbSA8IF9fZW5kICYmIF9fbWF4KQorKyAgICAgIHsKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQ7CisrCV9fZnJvbV9jaHVua19lbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KG1lbWNocihfX2Zyb20sICdcMCcsCisrCQkJCQkJCQkgIF9fZW5kCisrCQkJCQkJCQkgIC0gX19mcm9tKSk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19lbmQ7CisrCisrCWNvbnN0IGV4dGVybl90eXBlKiBfX3RtcF9mcm9tID0gX19mcm9tOworKwlzaXplX3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvLCAmX19mcm9tLAorKwkJCQkgICBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tLAorKwkJCQkgICBfX21heCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyBtYnJ0b3djLgorKwkgICAgZm9yIChfX2Zyb20gPSBfX3RtcF9mcm9tOzsgX19mcm9tICs9IF9fY29udikKKysJICAgICAgeworKwkJX19jb252ID0gbWJydG93YyhOVUxMLCBfX2Zyb20sIF9fZW5kIC0gX19mcm9tLAorKwkJCQkgJl9fdG1wX3N0YXRlKTsKKysJCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkKKysJCSAgICB8fCBfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpCisrCQkgIGJyZWFrOworKwkgICAgICB9CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCSAgICBfX3JldCArPSBfX2Zyb20gLSBfX3RtcF9mcm9tOworKwkgICAgYnJlYWs7CisrCSAgfQorKwlpZiAoIV9fZnJvbSkKKysJICBfX2Zyb20gPSBfX2Zyb21fY2h1bmtfZW5kOworKwkKKysJX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKKysJX19tYXggLT0gX19jb252OworKworKwlpZiAoX19mcm9tIDwgX19lbmQgJiYgX19tYXgpCisrCSAgeworKwkgICAgLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MKKysJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKKysJICAgICsrX19mcm9tOworKwkgICAgKytfX3JldDsKKysJICAgIC0tX19tYXg7CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsgCisrICB9CisrI2VuZGlmCisrfQorZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjIGdjYy0zLjQuNi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCistLS0gZ2NjLTMuNC42Lm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy0zLjQuNi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCTIwMDctMDgtMTUgMjI6NTE6MDEuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDgwIEBACisrLy8gc3RkOjpjb2xsYXRlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi40LjEuMiAgY29sbGF0ZSB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKKysjZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKysjZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCisrI2RlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIFRoZXNlIGFyZSBiYXNpY2FsbHkgZXh0ZW5zaW9ucyB0byBjaGFyX3RyYWl0cywgYW5kIHBlcmhhcHMgc2hvdWxkCisrICAvLyBiZSBwdXQgdGhlcmUgaW5zdGVhZCBvZiBoZXJlLgorKyAgdGVtcGxhdGU8PgorKyAgICBpbnQgCisrICAgIGNvbGxhdGU8Y2hhcj46Ol9NX2NvbXBhcmUoY29uc3QgY2hhciogX19vbmUsIGNvbnN0IGNoYXIqIF9fdHdvKSBjb25zdAorKyAgICB7IAorKyAgICAgIGludCBfX2NtcCA9IF9fc3RyY29sbF9sKF9fb25lLCBfX3R3bywgX01fY19sb2NhbGVfY29sbGF0ZSk7CisrICAgICAgcmV0dXJuIChfX2NtcCA+PiAoOCAqIHNpemVvZiAoaW50KSAtIDIpKSB8IChfX2NtcCAhPSAwKTsKKysgICAgfQorKyAgCisrICB0ZW1wbGF0ZTw+CisrICAgIHNpemVfdAorKyAgICBjb2xsYXRlPGNoYXI+OjpfTV90cmFuc2Zvcm0oY2hhciogX190bywgY29uc3QgY2hhciogX19mcm9tLCAKKysJCQkJc2l6ZV90IF9fbikgY29uc3QgCisrICAgIHsgcmV0dXJuIF9fc3RyeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICBpbnQgCisrICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX2NvbXBhcmUoY29uc3Qgd2NoYXJfdCogX19vbmUsIAorKwkJCQkgY29uc3Qgd2NoYXJfdCogX190d28pIGNvbnN0CisrICAgIHsKKysgICAgICBpbnQgX19jbXAgPSBfX3djc2NvbGxfbChfX29uZSwgX190d28sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOworKyAgICAgIHJldHVybiAoX19jbXAgPj4gKDggKiBzaXplb2YgKGludCkgLSAyKSkgfCAoX19jbXAgIT0gMCk7CisrICAgIH0KKysgIAorKyAgdGVtcGxhdGU8PgorKyAgICBzaXplX3QKKysgICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fdHJhbnNmb3JtKHdjaGFyX3QqIF9fdG8sIGNvbnN0IHdjaGFyX3QqIF9fZnJvbSwKKysJCQkJICAgc2l6ZV90IF9fbikgY29uc3QKKysgICAgeyByZXR1cm4gX193Y3N4ZnJtX2woX190bywgX19mcm9tLCBfX24sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOyB9CisrI2VuZGlmCisrfQorZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBnY2MtMy40LjYvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKy0tLSBnY2MtMy40LjYub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy0zLjQuNi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYwkyMDA3LTA4LTE1IDIyOjUxOjAxLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwzMDAgQEAKKysvLyBzdGQ6OmN0eXBlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi4xLjEuMiAgY3R5cGUgdmlydHVhbCBmdW5jdGlvbnMuCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNkZWZpbmUgX0xJQkMKKysjaW5jbHVkZSA8bG9jYWxlPgorKyN1bmRlZiBfTElCQworKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgd2N0eXBlKChTKSkKKysjZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgIHRvd3VwcGVyKChDKSkKKysjZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgIHRvd2xvd2VyKChDKSkKKysjZGVmaW5lIF9faXN3Y3R5cGVfbChDLCBNLCBMKSAgICAgIGlzd2N0eXBlKChDKSwgKE0pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBOQjogVGhlIG90aGVyIGN0eXBlPGNoYXI+IHNwZWNpYWxpemF0aW9ucyBhcmUgaW4gc3JjL2xvY2FsZS5jYyBhbmQKKysgIC8vIHZhcmlvdXMgL2NvbmZpZy9vcy8qIGZpbGVzLgorKyAgdGVtcGxhdGU8PgorKyAgICBjdHlwZV9ieW5hbWU8Y2hhcj46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCisrICAgIDogY3R5cGU8Y2hhcj4oMCwgZmFsc2UsIF9fcmVmcykgCisrICAgIHsgCQkKKysgICAgICBpZiAoc3RkOjpzdHJjbXAoX19zLCAiQyIpICE9IDAgJiYgc3RkOjpzdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorKwl7CisrCSAgdGhpcy0+X1NfZGVzdHJveV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZSk7CisrCSAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLCBfX3MpOyAKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIHRoaXMtPl9NX3RvdXBwZXIgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b3VwcGVyOworKwkgIHRoaXMtPl9NX3RvbG93ZXIgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b2xvd2VyOworKwkgIHRoaXMtPl9NX3RhYmxlID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfYjsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UICAKKysgIGN0eXBlPHdjaGFyX3Q+OjpfX3dtYXNrX3R5cGUKKysgIGN0eXBlPHdjaGFyX3Q+OjpfTV9jb252ZXJ0X3RvX3dtYXNrKGNvbnN0IG1hc2sgX19tKSBjb25zdAorKyAgeworKyAgICBfX3dtYXNrX3R5cGUgX19yZXQ7CisrICAgIHN3aXRjaCAoX19tKQorKyAgICAgIHsKKysgICAgICBjYXNlIHNwYWNlOgorKwlfX3JldCA9IF9fd2N0eXBlX2woInNwYWNlIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHByaW50OgorKwlfX3JldCA9IF9fd2N0eXBlX2woInByaW50IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGNudHJsOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImNudHJsIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHVwcGVyOgorKwlfX3JldCA9IF9fd2N0eXBlX2woInVwcGVyIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGxvd2VyOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImxvd2VyIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGFscGhhOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImFscGhhIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGRpZ2l0OgorKwlfX3JldCA9IF9fd2N0eXBlX2woImRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHB1bmN0OgorKwlfX3JldCA9IF9fd2N0eXBlX2woInB1bmN0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHhkaWdpdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJ4ZGlnaXQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgYWxudW06CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiYWxudW0iLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgZ3JhcGg6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiZ3JhcGgiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGRlZmF1bHQ6CisrCV9fcmV0ID0gMDsKKysgICAgICB9CisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysgIAorKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvdXBwZXIod2NoYXJfdCBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfX3Rvd3VwcGVyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKyAgICAgICAgKl9fbG8gPSBfX3Rvd3VwcGVyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgICAgICsrX19sbzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKyAgCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9fdG93bG93ZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQorKyAgCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvbG93ZXIod2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKyAgICAgIHsKKysgICAgICAgICpfX2xvID0gX190b3dsb3dlcl9sKCpfX2xvLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrICAgICAgICArK19fbG87CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIGJvb2wKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX2lzKG1hc2sgX19tLCB3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgCisrICAgIC8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrICAgIC8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKyAgICBib29sIF9fcmV0ID0gZmFsc2U7CisrICAgIGNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7IAorKyAgICBmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrICAgICAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0KKysJICAmJiBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJeworKwkgIF9fcmV0ID0gdHJ1ZTsKKysJICBicmVhazsKKysJfQorKyAgICByZXR1cm4gX19yZXQ7ICAgIAorKyAgfQorKyAgCisrICBjb25zdCB3Y2hhcl90KiAKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX2lzKGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdAorKyAgeworKyAgICBmb3IgKDsgX19sbyA8IF9faGk7ICsrX192ZWMsICsrX19sbykKKysgICAgICB7CisrCS8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrCS8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKwljb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOyAKKysJbWFzayBfX20gPSAwOworKwlmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrCSAgaWYgKF9faXN3Y3R5cGVfbCgqX19sbywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCisrCSAgICBfX20gfD0gX01fYml0W19fYml0Y3VyXTsKKysJKl9fdmVjID0gX19tOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrICAKKysgIGNvbnN0IHdjaGFyX3QqIAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpICYmICF0aGlzLT5kb19pcyhfX20sICpfX2xvKSkKKysgICAgICArK19fbG87CisrICAgIHJldHVybiBfX2xvOworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpICYmIHRoaXMtPmRvX2lzKF9fbSwgKl9fbG8pICE9IDApCisrICAgICAgKytfX2xvOworKyAgICByZXR1cm4gX19sbzsKKysgIH0KKysKKysgIHdjaGFyX3QKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKV07IH0KKysKKysgIGNvbnN0IGNoYXIqIAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgd2NoYXJfdCogX19kZXN0KSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKwkqX19kZXN0ID0gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG8pXTsKKysJKytfX2xvOworKwkrK19fZGVzdDsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgY2hhcgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fbmFycm93KHdjaGFyX3QgX193YywgY2hhciBfX2RmYXVsdCkgY29uc3QKKysgIHsKKysgICAgaWYgKF9fd2MgPj0gMCAmJiBfX3djIDwgMTI4ICYmIF9NX25hcnJvd19vaykKKysgICAgICByZXR1cm4gX01fbmFycm93W19fd2NdOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIGNvbnN0IGludCBfX2MgPSB3Y3RvYihfX3djKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7IAorKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX25hcnJvdyhjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpLCBjaGFyIF9fZGZhdWx0LCAKKysJICAgIGNoYXIqIF9fZGVzdCkgY29uc3QKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOworKyNlbmRpZgorKyAgICBpZiAoX01fbmFycm93X29rKQorKyAgICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysJeworKwkgIGlmICgqX19sbyA+PSAwICYmICpfX2xvIDwgMTI4KQorKwkgICAgKl9fZGVzdCA9IF9NX25hcnJvd1sqX19sb107CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBjb25zdCBpbnQgX19jID0gd2N0b2IoKl9fbG8pOworKwkgICAgICAqX19kZXN0ID0gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKwkgICAgfQorKwkgICsrX19sbzsKKysJICArK19fZGVzdDsKKysJfQorKyAgICBlbHNlCisrICAgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKwl7CisrCSAgY29uc3QgaW50IF9fYyA9IHdjdG9iKCpfX2xvKTsKKysJICAqX19kZXN0ID0gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKwkgICsrX19sbzsKKysJICArK19fZGVzdDsKKysJfQorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICB2b2lkCisrICBjdHlwZTx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9jdHlwZSgpCisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgd2ludF90IF9faTsKKysgICAgZm9yIChfX2kgPSAwOyBfX2kgPCAxMjg7ICsrX19pKQorKyAgICAgIHsKKysJY29uc3QgaW50IF9fYyA9IHdjdG9iKF9faSk7CisrCWlmIChfX2MgPT0gRU9GKQorKwkgIGJyZWFrOworKwllbHNlCisrCSAgX01fbmFycm93W19faV0gPSBzdGF0aWNfY2FzdDxjaGFyPihfX2MpOworKyAgICAgIH0KKysgICAgaWYgKF9faSA9PSAxMjgpCisrICAgICAgX01fbmFycm93X29rID0gdHJ1ZTsKKysgICAgZWxzZQorKyAgICAgIF9NX25hcnJvd19vayA9IGZhbHNlOworKyAgICBmb3IgKHNpemVfdCBfX2ogPSAwOworKwkgX19qIDwgc2l6ZW9mKF9NX3dpZGVuKSAvIHNpemVvZih3aW50X3QpOyArK19faikKKysgICAgICBfTV93aWRlbltfX2pdID0gYnRvd2MoX19qKTsKKysKKysgICAgZm9yIChzaXplX3QgX19rID0gMDsgX19rIDw9IDExOyArK19faykKKysgICAgICB7IAorKwlfTV9iaXRbX19rXSA9IHN0YXRpY19jYXN0PG1hc2s+KF9JU2JpdChfX2spKTsKKysJX01fd21hc2tbX19rXSA9IF9NX2NvbnZlcnRfdG9fd21hc2soX01fYml0W19fa10pOworKyAgICAgIH0KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICB9CisrI2VuZGlmIC8vICBfR0xJQkNYWF9VU0VfV0NIQVJfVAorK30KK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgZ2NjLTMuNC42L2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCistLS0gZ2NjLTMuNC42Lm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtMy40LjYvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MJMjAwNy0wOC0xNSAyMjo1MTowMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTAwIEBACisrLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IGdldHRleHQgc3R1ZmYKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKytleHRlcm4gIkMiIGNoYXIgKl9fZGNnZXR0ZXh0KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCQkJICAgICBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KTsKKysjdW5kZWYgZ2V0dGV4dAorKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgX19kY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorKyNlbHNlCisrI3VuZGVmIGdldHRleHQKKysjZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gU3BlY2lhbGl6YXRpb25zLgorKyAgdGVtcGxhdGU8PgorKyAgICBzdHJpbmcKKysgICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KGdldHRleHQoX19kZmF1bHQuY19zdHIoKSkpOworKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysgICAgICByZXR1cm4gc3RyaW5nKF9fbXNnKTsKKysjZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbHNlCisrICAgICAgY29uc3QgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9fZGZhdWx0LmNfc3RyKCkpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbmRpZgorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHdzdHJpbmcKKysgICAgbWVzc2FnZXM8d2NoYXJfdD46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgd3N0cmluZyYgX19kZmF1bHQpIGNvbnN0CisrICAgIHsKKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV9tZXNzYWdlcyk7CisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZWxzZQorKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZW5kaWYKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBnY2MtMy40LjYvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorLS0tIGdjYy0zLjQuNi5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtMy40LjYvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAkyMDA3LTA4LTE1IDIyOjUxOjAxLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxMTggQEAKKysvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworK2V4dGVybiAiQyIgY2hhciAqX190ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOworK2V4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUpOworKyNlbHNlCisrI3VuZGVmIF9fdGV4dGRvbWFpbgorKyN1bmRlZiBfX2JpbmR0ZXh0ZG9tYWluCisrI2RlZmluZSBfX3RleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgX19iaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKysjZW5kaWYKKysKKysgIC8vIE5vbi12aXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhzaXplX3QgX19yZWZzKQorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19nZXRfY19sb2NhbGUoKSksIAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfU19nZXRfY19uYW1lKCkpCisrICAgICB7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsIAorKwkJCQlzaXplX3QgX19yZWZzKSAKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKSksCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKF9fcykKKysgICAgIHsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX190bXA7CisrICAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cgCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsIAorKwkJCSAgIGNvbnN0IGNoYXIqIF9fZGlyKSBjb25zdAorKyAgICB7IAorKyAgICAgIF9fYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKysgICAgICByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsgCisrICAgIH0KKysKKysgIC8vIFZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6fm1lc3NhZ2VzKCkKKysgICAgeyAKKysgICAgICBpZiAoX01fbmFtZV9tZXNzYWdlcyAhPSBfU19nZXRfY19uYW1lKCkpCisrCWRlbGV0ZSBbXSBfTV9uYW1lX21lc3NhZ2VzOworKyAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOyAKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nIAorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCAKKysJCQkgICAgICBjb25zdCBsb2NhbGUmKSBjb25zdAorKyAgICB7IAorKyAgICAgIC8vIE5vIGVycm9yIGNoZWNraW5nIGlzIGRvbmUsIGFzc3VtZSB0aGUgY2F0YWxvZyBleGlzdHMgYW5kIGNhbgorKyAgICAgIC8vIGJlIHVzZWQuCisrICAgICAgX190ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB2b2lkICAgIAorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRhbG9nKSBjb25zdCAKKysgICAgeyB9CisrCisrICAgLy8gbWVzc2FnZXNfYnluYW1lCisrICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXNfYnluYW1lPF9DaGFyVD46Om1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCisrICAgICA6IG1lc3NhZ2VzPF9DaGFyVD4oX19yZWZzKSAKKysgICAgIHsgCisrICAgICAgIGlmICh0aGlzLT5fTV9uYW1lX21lc3NhZ2VzICE9IGxvY2FsZTo6ZmFjZXQ6Ol9TX2dldF9jX25hbWUoKSkKKysJIGRlbGV0ZSBbXSB0aGlzLT5fTV9uYW1lX21lc3NhZ2VzOworKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKysgICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgIHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysKKysgICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKKysJIHsKKysJICAgdGhpcy0+X1NfZGVzdHJveV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrCSAgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsgCisrCSB9CisrICAgICB9CitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGdjYy0zLjQuNi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworLS0tIGdjYy0zLjQuNi5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTMuNC42L2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCTIwMDctMDgtMTUgMjI6NTE6MDEuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDY5OCBAQAorKy8vIHN0ZDo6bW9uZXlwdW5jdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNi4zLjIgIG1vbmV5cHVuY3QgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgb3B0aW1pemUgdGhpcyBmb3IgdWNsaWJjCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIENvbnN0cnVjdCBhbmQgcmV0dXJuIHZhbGlkIHBhdHRlcm4gY29uc2lzdGluZyBvZiBzb21lIGNvbWJpbmF0aW9uIG9mOgorKyAgLy8gc3BhY2Ugbm9uZSBzeW1ib2wgc2lnbiB2YWx1ZQorKyAgbW9uZXlfYmFzZTo6cGF0dGVybgorKyAgbW9uZXlfYmFzZTo6X1NfY29uc3RydWN0X3BhdHRlcm4oY2hhciBfX3ByZWNlZGVzLCBjaGFyIF9fc3BhY2UsIGNoYXIgX19wb3NuKQorKyAgeyAKKysgICAgcGF0dGVybiBfX3JldDsKKysKKysgICAgLy8gVGhpcyBpbnNhbmVseSBjb21wbGljYXRlZCByb3V0aW5lIGF0dGVtcHRzIHRvIGNvbnN0cnVjdCBhIHZhbGlkCisrICAgIC8vIHBhdHRlcm4gZm9yIHVzZSB3aXRoIG1vbnllcHVuY3QuIEEgY291cGxlIG9mIGludmFyaWFudHM6CisrCisrICAgIC8vIGlmIChfX3ByZWNlZGVzKSBzeW1ib2wgLT4gdmFsdWUKKysgICAgLy8gZWxzZSB2YWx1ZSAtPiBzeW1ib2wKKysgICAgCisrICAgIC8vIGlmIChfX3NwYWNlKSBzcGFjZQorKyAgICAvLyBlbHNlIG5vbmUKKysKKysgICAgLy8gbm9uZSA9PSBuZXZlciBmaXJzdAorKyAgICAvLyBzcGFjZSBuZXZlciBmaXJzdCBvciBsYXN0CisrCisrICAgIC8vIEFueSBlbGVnYW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGFyZSB3ZWxjb21lLgorKyAgICBzd2l0Y2ggKF9fcG9zbikKKysgICAgICB7CisrICAgICAgY2FzZSAwOgorKyAgICAgIGNhc2UgMToKKysJLy8gMSBUaGUgc2lnbiBwcmVjZWRlcyB0aGUgdmFsdWUgYW5kIHN5bWJvbC4KKysJX19yZXQuZmllbGRbMF0gPSBzaWduOworKwlpZiAoX19zcGFjZSkKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24uCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24gYW5kIGVuZHMgd2l0aCBub25lLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgMjoKKysJLy8gMiBUaGUgc2lnbiBmb2xsb3dzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgorKwlpZiAoX19zcGFjZSkKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIGVpdGhlciBlbmRzIHdpdGggc2lnbi4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkgICAgX19yZXQuZmllbGRbM10gPSBzaWduOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gZW5kcyB3aXRoIHNpZ24gdGhlbiBub25lLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgMzoKKysJLy8gMyBUaGUgc2lnbiBpbW1lZGlhdGVseSBwcmVjZWRlcyB0aGUgc3ltYm9sLgorKwlpZiAoX19wcmVjZWRlcykKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHNpZ247CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsJICAgIAorKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CQkKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwlicmVhazsKKysgICAgICBjYXNlIDQ6CisrCS8vIDQgVGhlIHNpZ24gaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgc3ltYm9sLgorKwlpZiAoX19wcmVjZWRlcykKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc2lnbjsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IHNpZ247CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsyXSA9IHNpZ247CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWJyZWFrOworKyAgICAgIGRlZmF1bHQ6CisrCTsKKysgICAgICB9CisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCAKKysJCQkJCQkgICAgIGNvbnN0IGNoYXIqKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCB0cnVlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULCAKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX1RIT1VTQU5EU19TRVAsIAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIGlmICghX19ucG9zbikKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCAKKysJCQkJCQkJX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgLy8gX0ludGwgPT0gdHJ1ZQorKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfRlJBQ19ESUdJVFMsIAorKwkJCQkJCSAgICAgIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLCAKKysJCQkJCQkJX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwgCisrCQkJCQkJCV9fbnBvc24pOworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgCisrCQkJCQkJICAgICAgY29uc3QgY2hhciopCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPGNoYXIsIGZhbHNlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULCAKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX1RIT1VTQU5EU19TRVAsIAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgaWYgKCFfX25wb3NuKQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIoKSI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sCisrCQkJCQkJCV9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgIC8vIF9JbnRsID09IGZhbHNlCisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX25sX2xhbmdpbmZvX2woX19DVVJSRU5DWV9TWU1CT0wsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0ZSQUNfRElHSVRTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwgCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLCAKKysJCQkJCQkJX19ucG9zbik7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrICB0ZW1wbGF0ZTw+IAorKyAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+IAorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJCQkJCQkJY29uc3QgY2hhciopCisrI2Vsc2UKKysJCQkJCQkJY29uc3QgY2hhciogX19uYW1lKQorKyNlbmRpZgorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTx3Y2hhcl90LCB0cnVlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KKysJICB1bnNpZ25lZCBjaGFyIHVjOworKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICB7CisrCSAgICAgIHVjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7CisrCSAgICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBidG93Yyh1Yyk7CisrCSAgICB9CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxzZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKysJICB1bmlvbiBfX3NfYW5kX3cgeyBjb25zdCBjaGFyICpfX3M7IHVuc2lnbmVkIGludCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fdS5fX3cpOworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fdS5fX3cpOworKyNlbmRpZgorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKworKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7CisrCisrCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOworKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKKysJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgdHJ5CisrCSAgICB7CisrCSAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOworKwkgICAgICBzaXplX3QgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysJICAgICAgCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOworKwkgICAgICBpZiAoIV9fbnBvc24pCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7CisrCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorKwkJeyAKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX25zID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfbnMsICZfX2NuZWdzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX193Y3NfbnM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysJICAgICAgCisrCSAgICAgIC8vIF9JbnRsID09IHRydWUuCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgICAgfQorKwkgIGNhdGNoICguLi4pCisrCSAgICB7CisrCSAgICAgIGRlbGV0ZSBfTV9kYXRhOworKwkgICAgICBfTV9kYXRhID0gMDsKKysJICAgICAgZGVsZXRlIF9fd2NzX3BzOworKwkgICAgICBkZWxldGUgX193Y3NfbnM7CSAgICAgIAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJICAgIH0gCisrCSAgCisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9GUkFDX0RJR0lUUywgCisrCQkJCQkJICAgICAgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsIAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLCAKKysJCQkJCQkJX19ucG9zbik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgIHZvaWQKKysgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJCQkJCQkgICAgICAgY29uc3QgY2hhciopCisrI2Vsc2UKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19uYW1lKQorKyNlbmRpZgorKyAgeworKyAgICBpZiAoIV9NX2RhdGEpCisrICAgICAgX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgZmFsc2U+OworKworKyAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKyAgICAgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgdW5zaWduZWQgY2hhciB1YzsKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgeworKwkgICAgICB1YyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV0pOworKwkgICAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gYnRvd2ModWMpOworKwkgICAgfQorKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisrI2Vsc2UKKysJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKysJICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcy4uLiBzaG91bGQgYmUgbW9uZXRhcnkKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfXworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVsc2UKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbmRpZgorKyNlbHNlCisrCSAgdW5pb24gX19zX2FuZF93IHsgY29uc3QgY2hhciAqX19zOyB1bnNpZ25lZCBpbnQgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBzdGF0aWNfY2FzdDx3Y2hhcl90PihfX3UuX193KTsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBzdGF0aWNfY2FzdDx3Y2hhcl90PihfX3UuX193KTsKKysjZW5kaWYKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCisrCSAgY29uc3QgY2hhciogX19jcG9zc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jbmVnc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jY3VyciA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKKysKKysJICB3Y2hhcl90KiBfX3djc19wcyA9IDA7CisrCSAgd2NoYXJfdCogX193Y3NfbnMgPSAwOworKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIHRyeQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOworKyAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuOworKyAgICAgICAgICAgICAgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisrICAgICAgICAgICAgICBpZiAoX19sZW4pCisrICAgICAgICAgICAgICAgIHsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCSAgICAgIAorKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NuZWdzaWduKTsKKysJICAgICAgaWYgKCFfX25wb3NuKQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiKCkiOworKwkgICAgICBlbHNlIGlmIChfX2xlbikKKysJCXsgCisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19ucyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX25zLCAmX19jbmVnc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fd2NzX25zOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgICAgICAvLyBfSW50bCA9PSB0cnVlLgorKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsKKysJICAgICAgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgd2NoYXJfdCogX193Y3MgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djcywgJl9fY2N1cnIsIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX193Y3M7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgICB9CisrICAgICAgICAgIGNhdGNoICguLi4pCisrCSAgICB7CisrCSAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICAgICAgICAgICAgX01fZGF0YSA9IDA7CisrCSAgICAgIGRlbGV0ZSBfX3djc19wczsKKysJICAgICAgZGVsZXRlIF9fd2NzX25zOwkgICAgICAKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAgICAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwkgICAgfQorKworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19GUkFDX0RJR0lUUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsIAorKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwgCisrCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbnBvc24pOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46On5tb25leXB1bmN0KCkKKysgICAgeworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUKKysgICAgICAgICAgJiYgd2NzY21wKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24sIEwiKCkiKSAhPSAwKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sOworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+IAorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZQorKyAgICAgICAgICAmJiB3Y3NjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgTCIoKSIpICE9IDApCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fY3Vycl9zeW1ib2w7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgIH0KKysjZW5kaWYKKyt9CitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgZ2NjLTMuNC42L2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKy0tLSBnY2MtMy40LjYub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTMuNC42L2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MJMjAwNy0wOC0xNSAyMjo1MTowMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTgzIEBACisrLy8gc3RkOjpudW1wdW5jdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMy4xLjIgIG51bXB1bmN0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNkZWZpbmUgX0xJQkMKKysjaW5jbHVkZSA8bG9jYWxlPgorKyN1bmRlZiBfTElCQworKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorKyNlbmRpZgorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICB0ZW1wbGF0ZTw+IAorKyAgICB2b2lkCisrICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8Y2hhcj47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKysKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19udW1fYmFzZTo6X1Nfb2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19vdXRbX19pXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX291dFtfX2ldOworKworKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKERFQ0lNQUxfUE9JTlQsIAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woVEhPVVNBTkRTX1NFUCwgCisrCQkJCQkJCV9fY2xvYykpOworKworKwkgIC8vIENoZWNrIGZvciBOVUxMLCB3aGljaCBpbXBsaWVzIG5vIGdyb3VwaW5nLgorKwkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09ICdcMCcpCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKEdST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwl9CisrCisrICAgICAgLy8gTkI6IFRoZXJlIGlzIG5vIHdheSB0byBleHRhY3QgdGhpcyBpbmZvIGZyb20gcG9zaXggbG9jYWxlcy4KKysgICAgICAvLyBfTV90cnVlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChZRVNTVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWUgPSAidHJ1ZSI7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV90cnVlbmFtZSk7CisrICAgICAgLy8gX01fZmFsc2VuYW1lID0gX19ubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZSA9ICJmYWxzZSI7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZmFsc2VuYW1lKTsKKysgICAgfQorKyAKKysgIHRlbXBsYXRlPD4gCisrICAgIG51bXB1bmN0PGNoYXI+Ojp+bnVtcHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrICAgCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+IAorKyAgICB2b2lkCisrICAgIG51bXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8d2NoYXJfdD47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKysKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfU19nZXRfY19sb2NhbGUoKSk7CisrI2VuZGlmCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgdW5zaWduZWQgY2hhciB1YzsKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKKysJICAgIHsKKysJICAgICAgdWMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX251bV9iYXNlOjpfU19hdG9tc19vdXRbX19pXSk7CisrCSAgICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0gYnRvd2ModWMpOworKwkgICAgfQorKworKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQorKwkgICAgeworKwkgICAgICB1YyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal0pOworKwkgICAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0gYnRvd2ModWMpOworKwkgICAgfQorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbHNlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorKwkgIHVuaW9uIF9fc19hbmRfdyB7IGNvbnN0IGNoYXIgKl9fczsgdW5zaWduZWQgaW50IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBzdGF0aWNfY2FzdDx3Y2hhcl90PihfX3UuX193KTsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fdS5fX3cpOworKyNlbmRpZgorKworKwkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09IEwnXDAnKQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChHUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJfQorKworKyAgICAgIC8vIE5COiBUaGVyZSBpcyBubyB3YXkgdG8gZXh0YWN0IHRoaXMgaW5mbyBmcm9tIHBvc2l4IGxvY2FsZXMuCisrICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woWUVTU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lID0gTCJ0cnVlIjsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZV9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX3RydWVuYW1lKTsKKysgICAgICAvLyBfTV9mYWxzZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woTk9TVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lID0gTCJmYWxzZSI7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fZmFsc2VuYW1lKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgbnVtcHVuY3Q8d2NoYXJfdD46On5udW1wdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysgI2VuZGlmCisrfQorZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGdjYy0zLjQuNi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCistLS0gZ2NjLTMuNC42Lm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy0zLjQuNi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCTIwMDctMDgtMTUgMjI6NTE6MDEuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDM1NiBAQAorKy8vIHN0ZDo6dGltZV9nZXQsIHN0ZDo6dGltZV9wdXQgaW1wbGVtZW50YXRpb24sIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEuMiAtIHRpbWVfZ2V0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6CisrICAgIF9NX3B1dChjaGFyKiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3QgY2hhciogX19mb3JtYXQsIAorKwkgICBjb25zdCB0bSogX190bSkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX19zdHJmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorKwkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysjZWxzZQorKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RyZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKysgICAgICBpZiAoX19sZW4gPT0gMCkKKysJX19zWzBdID0gJ1wwJzsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8Y2hhcj47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSAiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9ICIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSAiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9ICIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gIiI7CisrCSAgX01fZGF0YS0+X01fYW0gPSAiQU0iOworKwkgIF9NX2RhdGEtPl9NX3BtID0gIlBNIjsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSAiIjsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSAiU3VuZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gIk1vbmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9ICJUdWVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gIldlZG5lc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9ICJUaHVyc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9ICJGcmlkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSAiU2F0dXJkYXkiOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSAiU3VuIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9ICJNb24iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gIlR1ZSI7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSAiV2VkIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9ICJUaHUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gIkZyaSI7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSAiU2F0IjsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSAiSmFudWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9ICJGZWJydWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9ICJNYXJjaCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9ICJBcHJpbCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9ICJNYXkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSAiSnVuZSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9ICJKdWx5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gIkF1Z3VzdCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9ICJTZXB0ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSAiT2N0b2JlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9ICJOb3ZlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9ICJEZWNlbWJlciI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gIkphbiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSAiRmViIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9ICJNYXIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gIkFwciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSAiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9ICJKdW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gIkp1bCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSAiQXVnIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9ICJTZXAiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gIk9jdCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSAiTm92IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9ICJEZWMiOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsgCisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChUX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbSA9IF9fbmxfbGFuZ2luZm9fbChBTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG0gPSBfX25sX2xhbmdpbmZvX2woUE1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChUX0ZNVF9BTVBNLCBfX2Nsb2MpOworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX01fZGF0YS0+X01fZGF5MSA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gX19ubF9sYW5naW5mb19sKERBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBfX25sX2xhbmdpbmZvX2woREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gX19ubF9sYW5naW5mb19sKERBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBfX25sX2xhbmdpbmZvX2woREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NyA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNywgX19jbG9jKTsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gX19ubF9sYW5naW5mb19sKEFCREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzcsIF9fY2xvYyk7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gX19ubF9sYW5naW5mb19sKE1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBfX25sX2xhbmdpbmZvX2woTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IF9fbmxfbGFuZ2luZm9fbChNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gX19ubF9sYW5naW5mb19sKE1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBfX25sX2xhbmdpbmZvX2woTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IF9fbmxfbGFuZ2luZm9fbChNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gX19ubF9sYW5naW5mb19sKE1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSBfX25sX2xhbmdpbmZvX2woTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9IF9fbmxfbGFuZ2luZm9fbChNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gX19ubF9sYW5naW5mb19sKE1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gX19ubF9sYW5naW5mb19sKE1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gX19ubF9sYW5naW5mb19sKE1PTl8xMiwgX19jbG9jKTsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMTIsIF9fY2xvYyk7CisrCX0KKysgICAgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjoKKysgICAgX01fcHV0KHdjaGFyX3QqIF9fcywgc2l6ZV90IF9fbWF4bGVuLCBjb25zdCB3Y2hhcl90KiBfX2Zvcm1hdCwgCisrCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorKwkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysjZWxzZQorKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gd2NzZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKysgICAgICBpZiAoX19sZW4gPT0gMCkKKysJX19zWzBdID0gTCdcMCc7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPHdjaGFyX3Q+OworKworKyN3YXJuaW5nIHdpZGUgdGltZSBzdHVmZgorKy8vICAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOworKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gTCIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gTCIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2FtID0gTCJBTSI7CisrCSAgX01fZGF0YS0+X01fcG0gPSBMIlBNIjsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBMIiI7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gTCJTdW5kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBMIk1vbmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IEwiVHVlc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9IEwiV2VkbmVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gTCJUaHVyc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IEwiRnJpZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gTCJTYXR1cmRheSI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IEwiU3VuIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IEwiTW9uIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IEwiVHVlIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IEwiV2VkIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IEwiVGh1IjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IEwiRnJpIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IEwiU2F0IjsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBMIkphbnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBMIkZlYnJ1YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gTCJNYXJjaCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IEwiQXByaWwiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBMIk1heSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IEwiSnVuZSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IEwiSnVseSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IEwiQXVndXN0IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gTCJTZXB0ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBMIk9jdG9iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBMIk5vdmVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gTCJEZWNlbWJlciI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gTCJKYW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gTCJGZWIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gTCJNYXIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gTCJBcHIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gTCJNYXkiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gTCJKdW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gTCJKdWwiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gTCJBdWciOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gTCJTZXAiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gTCJPY3QiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gTCJOb3YiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gTCJEZWMiOworKwl9CisrI2lmIDAKKysgICAgICBlbHNlCisrCXsKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOyAKKysKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8d2NoYXJfdCo+KF9fbmxfbGFuZ2luZm9fbChfTkxfV0RfRk1ULCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSByZWludGVycHJldF9jYXN0PHdjaGFyX3QqPihfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfRF9GTVQsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gcmVpbnRlcnByZXRfY2FzdDx3Y2hhcl90Kj4oX19ubF9sYW5naW5mb19sKF9OTF9XVF9GTVQsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8d2NoYXJfdCo+KF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9UX0ZNVCwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8d2NoYXJfdCo+KF9fbmxfbGFuZ2luZm9fbChfTkxfV0RfVF9GTVQsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gcmVpbnRlcnByZXRfY2FzdDx3Y2hhcl90Kj4oX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX0RfVF9GTVQsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX2FtID0gcmVpbnRlcnByZXRfY2FzdDx3Y2hhcl90Kj4oX19ubF9sYW5naW5mb19sKF9OTF9XQU1fU1RSLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8d2NoYXJfdCo+KF9fbmxfbGFuZ2luZm9fbChfTkxfV1BNX1NUUiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gcmVpbnRlcnByZXRfY2FzdDx3Y2hhcl90Kj4oX19ubF9sYW5naW5mb19sKF9OTF9XVF9GTVRfQU1QTSwgX19jbG9jKSk7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gcmVpbnRlcnByZXRfY2FzdDx3Y2hhcl90Kj4oX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzEsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSByZWludGVycHJldF9jYXN0PHdjaGFyX3QqPihfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IHJlaW50ZXJwcmV0X2Nhc3Q8d2NoYXJfdCo+KF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8zLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gcmVpbnRlcnByZXRfY2FzdDx3Y2hhcl90Kj4oX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzQsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSByZWludGVycHJldF9jYXN0PHdjaGFyX3QqPihfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IHJlaW50ZXJwcmV0X2Nhc3Q8d2NoYXJfdCo+KF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV82LCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gcmVpbnRlcnByZXRfY2FzdDx3Y2hhcl90Kj4oX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzcsIF9fY2xvYykpOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSByZWludGVycHJldF9jYXN0PHdjaGFyX3QqPihfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8xLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IHJlaW50ZXJwcmV0X2Nhc3Q8d2NoYXJfdCo+KF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzIsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gcmVpbnRlcnByZXRfY2FzdDx3Y2hhcl90Kj4oX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMywgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSByZWludGVycHJldF9jYXN0PHdjaGFyX3QqPihfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV80LCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IHJlaW50ZXJwcmV0X2Nhc3Q8d2NoYXJfdCo+KF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzUsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gcmVpbnRlcnByZXRfY2FzdDx3Y2hhcl90Kj4oX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSByZWludGVycHJldF9jYXN0PHdjaGFyX3QqPihfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV83LCBfX2Nsb2MpKTsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSByZWludGVycHJldF9jYXN0PHdjaGFyX3QqPihfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IHJlaW50ZXJwcmV0X2Nhc3Q8d2NoYXJfdCo+KF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8yLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gcmVpbnRlcnByZXRfY2FzdDx3Y2hhcl90Kj4oX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzMsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSByZWludGVycHJldF9jYXN0PHdjaGFyX3QqPihfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNCwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IHJlaW50ZXJwcmV0X2Nhc3Q8d2NoYXJfdCo+KF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl81LCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gcmVpbnRlcnByZXRfY2FzdDx3Y2hhcl90Kj4oX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzYsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSByZWludGVycHJldF9jYXN0PHdjaGFyX3QqPihfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNywgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IHJlaW50ZXJwcmV0X2Nhc3Q8d2NoYXJfdCo+KF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl84LCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gcmVpbnRlcnByZXRfY2FzdDx3Y2hhcl90Kj4oX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzksIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSByZWludGVycHJldF9jYXN0PHdjaGFyX3QqPihfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTAsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSByZWludGVycHJldF9jYXN0PHdjaGFyX3QqPihfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTEsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSByZWludGVycHJldF9jYXN0PHdjaGFyX3QqPihfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTIsIF9fY2xvYykpOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IHJlaW50ZXJwcmV0X2Nhc3Q8d2NoYXJfdCo+KF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gcmVpbnRlcnByZXRfY2FzdDx3Y2hhcl90Kj4oX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSByZWludGVycHJldF9jYXN0PHdjaGFyX3QqPihfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8zLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IHJlaW50ZXJwcmV0X2Nhc3Q8d2NoYXJfdCo+KF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzQsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gcmVpbnRlcnByZXRfY2FzdDx3Y2hhcl90Kj4oX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSByZWludGVycHJldF9jYXN0PHdjaGFyX3QqPihfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl82LCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IHJlaW50ZXJwcmV0X2Nhc3Q8d2NoYXJfdCo+KF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzcsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gcmVpbnRlcnByZXRfY2FzdDx3Y2hhcl90Kj4oX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fOCwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSByZWludGVycHJldF9jYXN0PHdjaGFyX3QqPihfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl85LCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IHJlaW50ZXJwcmV0X2Nhc3Q8d2NoYXJfdCo+KF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEwLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IHJlaW50ZXJwcmV0X2Nhc3Q8d2NoYXJfdCo+KF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzExLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IHJlaW50ZXJwcmV0X2Nhc3Q8d2NoYXJfdCo+KF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEyLCBfX2Nsb2MpKTsKKysJfQorKyNlbmRpZiAvLyAwCisrICAgIH0KKysjZW5kaWYKKyt9CitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCBnY2MtMy40LjYvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCistLS0gZ2NjLTMuNC42Lm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTMuNC42L2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAkyMDA3LTA4LTE1IDIyOjUxOjAxLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw2OCBAQAorKy8vIHN0ZDo6dGltZV9nZXQsIHN0ZDo6dGltZV9wdXQgaW1wbGVtZW50YXRpb24sIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEuMiAtIHRpbWVfZ2V0IGZ1bmN0aW9ucworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4zLjIgLSB0aW1lX3B1dCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KHNpemVfdCBfX3JlZnMpIAorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwgCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY2FjaGVfdHlwZSogX19jYWNoZSwgc2l6ZV90IF9fcmVmcykgCisrICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShfX2NhY2hlKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLCAKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJICAgICBzaXplX3QgX19yZWZzKSAKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksIAorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChfX3MpCisrICAgIHsgCisrICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKKysgICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOyAKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+Ojp+X190aW1lcHVuY3QoKQorKyAgICB7IAorKyAgICAgIGlmIChfTV9uYW1lX3RpbWVwdW5jdCAhPSBfU19nZXRfY19uYW1lKCkpCisrCWRlbGV0ZSBbXSBfTV9uYW1lX3RpbWVwdW5jdDsKKysgICAgICBkZWxldGUgX01fZGF0YTsgCisrICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV90aW1lcHVuY3QpOyAKKysgICAgfQorZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9saWJzdGRjKystdjMvY29uZmlnL29zL3VjbGliYy9jdHlwZV9iYXNlLmggZ2NjLTMuNC42L2xpYnN0ZGMrKy12My9jb25maWcvb3MvdWNsaWJjL2N0eXBlX2Jhc2UuaAorLS0tIGdjYy0zLjQuNi5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvb3MvdWNsaWJjL2N0eXBlX2Jhc2UuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy0zLjQuNi9saWJzdGRjKystdjMvY29uZmlnL29zL3VjbGliYy9jdHlwZV9iYXNlLmgJMjAwNy0wOC0xNSAyMjo1MTowMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNTggQEAKKysvLyBMb2NhbGUgc3VwcG9ydCAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMiwgMjAwMworKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMSAgTG9jYWxlcworKy8vCisrICAKKysvLyBJbmZvcm1hdGlvbiBhcyBnbGVhbmVkIGZyb20gL3Vzci9pbmNsdWRlL2N0eXBlLmgKKysgIAorKyAgc3RydWN0IGN0eXBlX2Jhc2UKKysgIHsKKysgICAgLy8gTm90ZTogSW4gdUNsaWJjLCB0aGUgZm9sbG93aW5nIHR3byB0eXBlcyBkZXBlbmQgb24gY29uZmlndXJhdGlvbi4KKysgCisrICAgIC8vIE5vbi1zdGFuZGFyZCB0eXBlZGVmcy4KKysgICAgdHlwZWRlZiBjb25zdCBfX2N0eXBlX3RvdXBsb3dfdCogX190b190eXBlOworKworKyAgICAvLyBOQjogT2Zmc2V0cyBpbnRvIGN0eXBlPGNoYXI+OjpfTV90YWJsZSBmb3JjZSBhIHBhcnRpY3VsYXIgc2l6ZQorKyAgICAvLyBvbiB0aGUgbWFzayB0eXBlLiBCZWNhdXNlIG9mIHRoaXMsIHdlIGRvbid0IHVzZSBhbiBlbnVtLgorKyAgICB0eXBlZGVmIF9fY3R5cGVfbWFza190CW1hc2s7ICAgCisrICAgIHN0YXRpYyBjb25zdCBtYXNrIHVwcGVyICAgIAk9IF9JU3VwcGVyOworKyAgICBzdGF0aWMgY29uc3QgbWFzayBsb3dlciAJPSBfSVNsb3dlcjsKKysgICAgc3RhdGljIGNvbnN0IG1hc2sgYWxwaGEgCT0gX0lTYWxwaGE7CisrICAgIHN0YXRpYyBjb25zdCBtYXNrIGRpZ2l0IAk9IF9JU2RpZ2l0OworKyAgICBzdGF0aWMgY29uc3QgbWFzayB4ZGlnaXQgCT0gX0lTeGRpZ2l0OworKyAgICBzdGF0aWMgY29uc3QgbWFzayBzcGFjZSAJPSBfSVNzcGFjZTsKKysgICAgc3RhdGljIGNvbnN0IG1hc2sgcHJpbnQgCT0gX0lTcHJpbnQ7CisrICAgIHN0YXRpYyBjb25zdCBtYXNrIGdyYXBoIAk9IF9JU2FscGhhIHwgX0lTZGlnaXQgfCBfSVNwdW5jdDsKKysgICAgc3RhdGljIGNvbnN0IG1hc2sgY250cmwgCT0gX0lTY250cmw7CisrICAgIHN0YXRpYyBjb25zdCBtYXNrIHB1bmN0IAk9IF9JU3B1bmN0OworKyAgICBzdGF0aWMgY29uc3QgbWFzayBhbG51bSAJPSBfSVNhbHBoYSB8IF9JU2RpZ2l0OworKyAgfTsKK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9vcy91Y2xpYmMvY3R5cGVfaW5saW5lLmggZ2NjLTMuNC42L2xpYnN0ZGMrKy12My9jb25maWcvb3MvdWNsaWJjL2N0eXBlX2lubGluZS5oCistLS0gZ2NjLTMuNC42Lm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9vcy91Y2xpYmMvY3R5cGVfaW5saW5lLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtMy40LjYvbGlic3RkYysrLXYzL2NvbmZpZy9vcy91Y2xpYmMvY3R5cGVfaW5saW5lLmgJMjAwNy0wOC0xNSAyMjo1MTowMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNjkgQEAKKysvLyBMb2NhbGUgc3VwcG9ydCAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjEgIExvY2FsZXMKKysvLworKyAgCisrLy8gY3R5cGUgYml0cyB0byBiZSBpbmxpbmVkIGdvIGhlcmUuIE5vbi1pbmxpbmFibGUgKGllIHZpcnR1YWwgZG9fKikKKysvLyBmdW5jdGlvbnMgZ28gaW4gY3R5cGUuY2MKKysgIAorKyAgYm9vbAorKyAgY3R5cGU8Y2hhcj46OgorKyAgaXMobWFzayBfX20sIGNoYXIgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKV0gJiBfX207IH0KKysKKysgIGNvbnN0IGNoYXIqCisrICBjdHlwZTxjaGFyPjo6CisrICBpcyhjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoLCBtYXNrKiBfX3ZlYykgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG93IDwgX19oaWdoKQorKyAgICAgICpfX3ZlYysrID0gX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KyspXTsKKysgICAgcmV0dXJuIF9faGlnaDsKKysgIH0KKysKKysgIGNvbnN0IGNoYXIqCisrICBjdHlwZTxjaGFyPjo6CisrICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2ggCisrCSAgICYmICEoX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KV0gJiBfX20pKQorKyAgICAgICsrX19sb3c7CisrICAgIHJldHVybiBfX2xvdzsKKysgIH0KKysKKysgIGNvbnN0IGNoYXIqCisrICBjdHlwZTxjaGFyPjo6CisrICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG93IDwgX19oaWdoIAorKwkgICAmJiAoX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KV0gJiBfX20pICE9IDApCisrICAgICAgKytfX2xvdzsKKysgICAgcmV0dXJuIF9fbG93OworKyAgfQorZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9saWJzdGRjKystdjMvY29uZmlnL29zL3VjbGliYy9jdHlwZV9ub25pbmxpbmUuaCBnY2MtMy40LjYvbGlic3RkYysrLXYzL2NvbmZpZy9vcy91Y2xpYmMvY3R5cGVfbm9uaW5saW5lLmgKKy0tLSBnY2MtMy40LjYub3JpZy9saWJzdGRjKystdjMvY29uZmlnL29zL3VjbGliYy9jdHlwZV9ub25pbmxpbmUuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy0zLjQuNi9saWJzdGRjKystdjMvY29uZmlnL29zL3VjbGliYy9jdHlwZV9ub25pbmxpbmUuaAkyMDA3LTA4LTE1IDIyOjUxOjAxLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw5MiBAQAorKy8vIExvY2FsZSBzdXBwb3J0IC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDA0CisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4xICBMb2NhbGVzCisrLy8KKysgIAorKy8vIEluZm9ybWF0aW9uIGFzIGdsZWFuZWQgZnJvbSAvdXNyL2luY2x1ZGUvY3R5cGUuaAorKworKyAgY29uc3QgY3R5cGVfYmFzZTo6bWFzayoKKysgIGN0eXBlPGNoYXI+OjpjbGFzc2ljX3RhYmxlKCkgdGhyb3coKQorKyAgeyByZXR1cm4gX19DX2N0eXBlX2I7IH0KKysKKysgIGN0eXBlPGNoYXI+OjpjdHlwZShfX2NfbG9jYWxlLCBjb25zdCBtYXNrKiBfX3RhYmxlLCBib29sIF9fZGVsLCAKKysJCSAgICAgc2l6ZV90IF9fcmVmcykgCisrICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX2N0eXBlKF9TX2dldF9jX2xvY2FsZSgpKSwgCisrICBfTV9kZWwoX190YWJsZSAhPSAwICYmIF9fZGVsKSwgX01fd2lkZW5fb2soMCksIF9NX25hcnJvd19vaygwKQorKyAgeworKyAgICBfTV90b3VwcGVyID0gX19DX2N0eXBlX3RvdXBwZXI7CisrICAgIF9NX3RvbG93ZXIgPSBfX0NfY3R5cGVfdG9sb3dlcjsKKysgICAgX01fdGFibGUgPSBfX3RhYmxlID8gX190YWJsZSA6IF9fQ19jdHlwZV9iOworKyAgICBtZW1zZXQoX01fd2lkZW4sIDAsIHNpemVvZihfTV93aWRlbikpOworKyAgICBtZW1zZXQoX01fbmFycm93LCAwLCBzaXplb2YoX01fbmFycm93KSk7CisrICB9CisrCisrICBjdHlwZTxjaGFyPjo6Y3R5cGUoY29uc3QgbWFzayogX190YWJsZSwgYm9vbCBfX2RlbCwgc2l6ZV90IF9fcmVmcykKKysgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfY3R5cGUoX1NfZ2V0X2NfbG9jYWxlKCkpLCAKKysgIF9NX2RlbChfX3RhYmxlICE9IDAgJiYgX19kZWwpLCBfTV93aWRlbl9vaygwKSwgX01fbmFycm93X29rKDApCisrICB7CisrICAgIF9NX3RvdXBwZXIgPSBfX0NfY3R5cGVfdG91cHBlcjsKKysgICAgX01fdG9sb3dlciA9IF9fQ19jdHlwZV90b2xvd2VyOworKyAgICBfTV90YWJsZSA9IF9fdGFibGUgPyBfX3RhYmxlIDogX19DX2N0eXBlX2I7CisrICAgIG1lbXNldChfTV93aWRlbiwgMCwgc2l6ZW9mKF9NX3dpZGVuKSk7CisrICAgIG1lbXNldChfTV9uYXJyb3csIDAsIHNpemVvZihfTV9uYXJyb3cpKTsKKysgIH0KKysKKysgIGNoYXIKKysgIGN0eXBlPGNoYXI+Ojpkb190b3VwcGVyKGNoYXIgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX01fdG91cHBlcltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpXTsgfQorKworKyAgY29uc3QgY2hhcioKKysgIGN0eXBlPGNoYXI+Ojpkb190b3VwcGVyKGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCkKKysgICAgICB7CisrCSpfX2xvdyA9IF9NX3RvdXBwZXJbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KV07CisrCSsrX19sb3c7CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaWdoOworKyAgfQorKworKyAgY2hhcgorKyAgY3R5cGU8Y2hhcj46OmRvX3RvbG93ZXIoY2hhciBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfTV90b2xvd2VyW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldOyB9CisrCisrICBjb25zdCBjaGFyKiAKKysgIGN0eXBlPGNoYXI+Ojpkb190b2xvd2VyKGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCkKKysgICAgICB7CisrCSpfX2xvdyA9IF9NX3RvbG93ZXJbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KV07CisrCSsrX19sb3c7CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaWdoOworKyAgfQorZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9saWJzdGRjKystdjMvY29uZmlnL29zL3VjbGliYy9vc19kZWZpbmVzLmggZ2NjLTMuNC42L2xpYnN0ZGMrKy12My9jb25maWcvb3MvdWNsaWJjL29zX2RlZmluZXMuaAorLS0tIGdjYy0zLjQuNi5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvb3MvdWNsaWJjL29zX2RlZmluZXMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy0zLjQuNi9saWJzdGRjKystdjMvY29uZmlnL29zL3VjbGliYy9vc19kZWZpbmVzLmgJMjAwNy0wOC0xNSAyMjo1MTowMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNDQgQEAKKysvLyBTcGVjaWZpYyBkZWZpbml0aW9ucyBmb3IgR05VL0xpbnV4ICAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysjaWZuZGVmIF9HTElCQ1hYX09TX0RFRklORVMKKysjZGVmaW5lIF9HTElCQ1hYX09TX0RFRklORVMgMQorKworKy8vIFN5c3RlbS1zcGVjaWZpYyAjZGVmaW5lLCB0eXBlZGVmcywgY29ycmVjdGlvbnMsIGV0YywgZ28gaGVyZS4gIFRoaXMKKysvLyBmaWxlIHdpbGwgY29tZSBiZWZvcmUgYWxsIG90aGVycy4KKysKKysvLyBUaGlzIGtlZXBzIGlzYW51bSwgZXQgYWwgZnJvbSBiZWluZyBwcm9wYWdhdGVkIGFzIG1hY3Jvcy4KKysjZGVmaW5lIF9fTk9fQ1RZUEUgMQorKworKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKworKy8vIFdlIG11c3Qgbm90IHNlZSB0aGUgb3B0aW1pemVkIHN0cmluZyBmdW5jdGlvbnMgR05VIGxpYmMgZGVmaW5lcy4KKysjZGVmaW5lIF9fTk9fU1RSSU5HX0lOTElORVMKKysKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBnY2MtMy40LjYvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorLS0tIGdjYy0zLjQuNi5vcmlnL2xpYnN0ZGMrKy12My9jb25maWd1cmUJMjAwNS0wMi0wMSAwNzozMToyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtMy40LjYvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQkyMDA3LTA4LTE1IDIyOjUxOjAxLjAwMDAwMDAwMCArMDIwMAorQEAgLTQwMTIsNiArNDAxMiwxMSBAQAorICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL2xpYi9saWJjLnNvKiAvbGliL2xpYmMtKi5zb2AKKyAgIDs7CisgCisrbGludXgtdWNsaWJjKikKKysgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisrICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvbGliL2xpYnVDbGliYy0qLnNvYAorKyAgOzsKKysKKyBuZXRic2QqKQorICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL1wuXStcLnNvXC5bMC05XStcLlswLTldKyQnCitAQCAtNTY3OSw3ICs1Njg0LDcgQEAKKyAgIGVuYWJsZXZhbD0iJGVuYWJsZV9jbG9jYWxlIgorIAorICAgICAgIGNhc2UgIiRlbmFibGV2YWwiIGluCistICAgICAgIGdlbmVyaWN8Z251fGllZWVfMTAwMy4xLTIwMDF8eWVzfG5vfGF1dG8pIDs7CisrICAgICAgIGdlbmVyaWN8Z251fGllZWVfMTAwMy4xLTIwMDF8dWNsaWJjfHllc3xub3xhdXRvKSA7OworICAgICAgICAqKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBVbmtub3duIGFyZ3VtZW50IHRvIGVuYWJsZS9kaXNhYmxlIGNsb2NhbGUiID4mNQorIGVjaG8gIiRhc19tZTogZXJyb3I6IFVua25vd24gYXJndW1lbnQgdG8gZW5hYmxlL2Rpc2FibGUgY2xvY2FsZSIgPiYyO30KKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKK0BAIC01NzA0LDYgKzU3MDksOSBAQAorICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgeCR7dGFyZ2V0X29zfSBpbgorKyAgICAgIHhsaW51eC11Y2xpYmMqKQorKwllbmFibGVfY2xvY2FsZV9mbGFnPXVjbGliYworKwk7OworICAgICAgIHhsaW51eCogfCB4Z251KiB8IHhrZnJlZWJzZCotZ251IHwgeGtuZXRic2QqLWdudSkKKyAgICAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGNvbmZkZWZzLmguICAqLworQEAgLTU5MTYsNiArNTkyNCw3NyBAQAorICAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy90aW1lX21lbWJlcnMuY2MKKyAgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgICAgICAgOzsKKysgICAgdWNsaWJjKQorKyAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHVjbGliYyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9dWNsaWJjIiA+JjYKKysKKysgICAgICAjIERlY2xhcmUgaW50ZW50aW9uIHRvIHVzZSBnZXR0ZXh0LCBhbmQgYWRkIHN1cHBvcnQgZm9yIHNwZWNpZmljCisrICAgICAgIyBsYW5ndWFnZXMuCisrICAgICAgIyBGb3Igc29tZSByZWFzb24sIEFMTF9MSU5HVUFTIGhhcyB0byBiZSBiZWZvcmUgQU0tR05VLUdFVFRFWFQKKysgICAgICBBTExfTElOR1VBUz0iZGUgZnIiCisrCisrICAgICAgIyBEb24ndCBjYWxsIEFNLUdOVS1HRVRURVhUIGhlcmUuIEluc3RlYWQsIGFzc3VtZSBnbGliYy4KKysgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm1zZ2ZtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IG1zZ2ZtdDsgYWNfd29yZD0kMgorK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jaGVja19tc2dmbXQrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGNoZWNrX21zZ2ZtdCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10PSIkY2hlY2tfbXNnZm10IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9InllcyIKKysgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKytkb25lCisrCisrICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQiICYmIGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10PSJubyIKKytmaQorK2ZpCisrY2hlY2tfbXNnZm10PSRhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdAorK2lmIHRlc3QgLW4gIiRjaGVja19tc2dmbXQiOyB0aGVuCisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkY2hlY2tfbXNnZm10IiA+JjUKKytlY2hvICIke0VDSE9fVH0kY2hlY2tfbXNnZm10IiA+JjYKKytlbHNlCisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorK2ZpCisrCisrICAgICAgaWYgdGVzdCB4IiRjaGVja19tc2dmbXQiID0geCJ5ZXMiICYmIHRlc3QgeCIkZW5hYmxlX25scyIgPSB4InllcyI7IHRoZW4KKysgICAgICAgIFVTRV9OTFM9eWVzCisrICAgICAgZmkKKysgICAgICAjIEV4cG9ydCB0aGUgYnVpbGQgb2JqZWN0cy4KKysgICAgICBmb3IgbGluZyBpbiAkQUxMX0xJTkdVQVM7IGRvIFwKKysgICAgICAgIGdsaWJjeHhfTU9GSUxFUz0iJGdsaWJjeHhfTU9GSUxFUyAkbGluZy5tbyI7IFwKKysgICAgICAgIGdsaWJjeHhfUE9GSUxFUz0iJGdsaWJjeHhfUE9GSUxFUyAkbGluZy5wbyI7IFwKKysgICAgICBkb25lCisrCisrCisrCisrICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysgICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrICAgICAgQ0NPREVDVlRfSD1jb25maWcvbG9jYWxlL2llZWVfMTAwMy4xLTIwMDEvY29kZWN2dF9zcGVjaWFsaXphdGlvbnMuaAorKyAgICAgIENDT0RFQ1ZUX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworKyAgICAgIENDT0xMQVRFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworKyAgICAgIENDVFlQRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrICAgICAgQ01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrICAgICAgQ01FU1NBR0VTX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKysgICAgICBDTU9ORVlfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKyAgICAgIENOVU1FUklDX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKyAgICAgIENUSU1FX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysgICAgICA7OworICAgZXNhYworIAorICAgIyBUaGlzIGlzIHdoZXJlIHRoZSB0ZXN0c3VpdGUgbG9va3MgZm9yIGxvY2FsZSBjYXRhbG9ncywgdXNpbmcgdGhlCitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2xpYnN0ZGMrKy12My9jb25maWd1cmUuaG9zdCBnY2MtMy40LjYvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5ob3N0CistLS0gZ2NjLTMuNC42Lm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5ob3N0CTIwMDQtMTAtMDUgMTg6MzI6NDkuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTMuNC42L2xpYnN0ZGMrKy12My9jb25maWd1cmUuaG9zdAkyMDA3LTA4LTE1IDIyOjUxOjAxLjAwMDAwMDAwMCArMDIwMAorQEAgLTIxNyw2ICsyMTcsMTIgQEAKKyAgICAgOzsKKyBlc2FjCisgCisrIyBPdmVycmlkZSBmb3IgdUNsaWJjIHNpbmNlIGxpbnV4LXVjbGliYyBnZXRzIG1pc2hhbmRsZWQgYWJvdmUuCisrY2FzZSAiJHtob3N0X29zfSIgaW4KKysgICotdWNsaWJjKikKKysgICAgb3NfaW5jbHVkZV9kaXI9Im9zL3VjbGliYyIKKysgICAgOzsKKytlc2FjCisgCisgIyBTZXQgYW55IE9TLWRlcGVuZGVudCBhbmQgQ1BVLWRlcGVuZGVudCBiaXRzLgorICMgVEhJUyBUQUJMRSBJUyBTT1JURUQuICBLRUVQIElUIFRIQVQgV0FZLgorZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9saWJzdGRjKystdjMvY3Jvc3Njb25maWcubTQgZ2NjLTMuNC42L2xpYnN0ZGMrKy12My9jcm9zc2NvbmZpZy5tNAorLS0tIGdjYy0zLjQuNi5vcmlnL2xpYnN0ZGMrKy12My9jcm9zc2NvbmZpZy5tNAkyMDA1LTAyLTAxIDA3OjMxOjIzLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy0zLjQuNi9saWJzdGRjKystdjMvY3Jvc3Njb25maWcubTQJMjAwNy0wOC0xNSAyMjo1MTowMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMzgsNiArMTM4LDk5IEBACisgCTs7CisgICAgIGVzYWMKKyAgICAgOzsKKysgICotdWNsaWJjKikKKysjIFRlbXBvcmFyeSBoYWNrIHVudGlsIHdlIGltcGxlbWVudCB0aGUgZmxvYXQgdmVyc2lvbnMgb2YgdGhlIGxpYm0gZnVuY3MKKysgICAgQUNfQ0hFQ0tfSEVBREVSUyhbbmFuLmggaWVlZWZwLmggZW5kaWFuLmggc3lzL2lzYV9kZWZzLmggXAorKyAgICAgIG1hY2hpbmUvZW5kaWFuLmggbWFjaGluZS9wYXJhbS5oIHN5cy9tYWNoaW5lLmggc3lzL3R5cGVzLmggXAorKyAgICAgIGZwLmggZmxvYXQuaCBlbmRpYW4uaCBpbnR0eXBlcy5oIGxvY2FsZS5oIGZsb2F0Lmggc3RkaW50LmhdKQorKyAgICBTRUNUSU9OX0ZMQUdTPSctZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucycKKysgICAgQUNfU1VCU1QoU0VDVElPTl9GTEFHUykKKysgICAgR0xJQkNYWF9DSEVDS19MSU5LRVJfRkVBVFVSRVMKKysgICAgR0xJQkNYWF9DSEVDS19DT01QTEVYX01BVEhfU1VQUE9SVAorKyAgICBHTElCQ1hYX0NIRUNLX1dDSEFSX1RfU1VQUE9SVAorKworKyAgICAjIEZvciBMRlMuCisrICAgIEFDX0RFRklORShIQVZFX0lOVDY0X1QpCisrICAgIGNhc2UgIiR0YXJnZXQiIGluCisrICAgICAgKi11Y2xpbnV4KikKKysgICAgICAgICMgRG9uJ3QgZW5hYmxlIExGUyB3aXRoIHVDbGludXgKKysgICAgICAgIDs7CisrICAgICAgKikKKysgICAgICAgIEFDX0RFRklORShfR0xJQkNYWF9VU0VfTEZTKQorKyAgICBlc2FjCisrCisrICAgICMgRm9yIHNob3dtYW55Y19oZWxwZXIoKS4KKysgICAgQUNfQ0hFQ0tfSEVBREVSUyhzeXMvaW9jdGwuaCBzeXMvZmlsaW8uaCkKKysgICAgR0xJQkNYWF9DSEVDS19QT0xMCisrICAgIEdMSUJDWFhfQ0hFQ0tfU19JU1JFR19PUl9TX0lGUkVHCisrCisrICAgICMgRm9yIHhzcHV0bl8yKCkuCisrICAgIEFDX0NIRUNLX0hFQURFUlMoc3lzL3Vpby5oKQorKyAgICBHTElCQ1hYX0NIRUNLX1dSSVRFVgorKworKyMgICAgIEFDX0RFRklORShIQVZFX0FDT1NGKQorKyMgICAgIEFDX0RFRklORShIQVZFX0FTSU5GKQorKyMgICAgIEFDX0RFRklORShIQVZFX0FUQU5GKQorKyMgICAgIEFDX0RFRklORShIQVZFX0FUQU4yRikKKysgICAgQUNfREVGSU5FKEhBVkVfQ0VJTEYpCisrICAgIEFDX0RFRklORShIQVZFX0NPUFlTSUdOKQorKyMgICAgIEFDX0RFRklORShIQVZFX0NPUFlTSUdORikKKysjICAgICBBQ19ERUZJTkUoSEFWRV9DT1NGKQorKyMgICAgIEFDX0RFRklORShIQVZFX0NPU0hGKQorKyMgICAgIEFDX0RFRklORShIQVZFX0VYUEYpCisrIyAgICAgQUNfREVGSU5FKEhBVkVfRkFCU0YpCisrICAgIEFDX0RFRklORShIQVZFX0ZJTklURSkKKysgICAgQUNfREVGSU5FKEhBVkVfRklOSVRFRikKKysgICAgQUNfREVGSU5FKEhBVkVfRkxPT1JGKQorKyMgICAgIEFDX0RFRklORShIQVZFX0ZNT0RGKQorKyMgICAgIEFDX0RFRklORShIQVZFX0ZSRVhQRikKKysgICAgQUNfREVGSU5FKEhBVkVfSFlQT1QpCisrIyAgICAgQUNfREVGSU5FKEhBVkVfSFlQT1RGKQorKyAgICBBQ19ERUZJTkUoSEFWRV9JU0lORikKKysgICAgQUNfREVGSU5FKEhBVkVfSVNJTkZGKQorKyAgICBBQ19ERUZJTkUoSEFWRV9JU05BTikKKysgICAgQUNfREVGSU5FKEhBVkVfSVNOQU5GKQorKyMgICAgIEFDX0RFRklORShIQVZFX0xPR0YpCisrIyAgICAgQUNfREVGSU5FKEhBVkVfTE9HMTBGKQorKyMgICAgIEFDX0RFRklORShIQVZFX01PREZGKQorKyMgICAgIEFDX0RFRklORShIQVZFX1NJTkYpCisrIyAgICAgQUNfREVGSU5FKEhBVkVfU0lOSEYpCisrIyAgICAgQUNfREVGSU5FKEhBVkVfU0lOQ09TKQorKyMgICAgIEFDX0RFRklORShIQVZFX1NJTkNPU0YpCisrICAgIEFDX0RFRklORShIQVZFX1NRUlRGKQorKyMgICAgIEFDX0RFRklORShIQVZFX1RBTkYpCisrIyAgICAgQUNfREVGSU5FKEhBVkVfVEFOSEYpCisrICAgIGlmIHRlc3QgeCJsb25nX2RvdWJsZV9tYXRoX29uX3RoaXNfY3B1IiA9IHgieWVzIjsgdGhlbgorKyAgICAgIEFDX01TR19FUlJPUihbbG9uZ19kb3VibGVfbWF0aF9vbl90aGlzX2NwdSBpcyB5ZXMhXSkKKysjICAgICAgIEFDX0RFRklORShIQVZFX0FDT1NMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfQVNJTkwpCisrIyAgICAgICBBQ19ERUZJTkUoSEFWRV9BVEFOTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX0FUQU4yTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX0NFSUxMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfQ09QWVNJR05MKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfQ09TTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX0NPU0hMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfRVhQTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX0ZBQlNMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfRklOSVRFTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX0ZMT09STCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX0ZNT0RMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfRlJFWFBMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfSFlQT1RMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfSVNJTkZMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfSVNOQU5MKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfTE9HTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX0xPRzEwTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX01PREZMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfUE9XTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX1NJTkwpCisrIyAgICAgICBBQ19ERUZJTkUoSEFWRV9TSU5ITCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX1NJTkNPU0wpCisrIyAgICAgICBBQ19ERUZJTkUoSEFWRV9TUVJUTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX1RBTkwpCisrIyAgICAgICBBQ19ERUZJTkUoSEFWRV9UQU5ITCkKKysgICAgZmkKKysgICAgOzsKKyAgICotbGludXgqIHwgKi11Y2xpbnV4KiB8ICotZ251KiB8ICota2ZyZWVic2QqLWdudSB8ICota25ldGJzZCotZ251KQorICAgICBBQ19DSEVDS19IRUFERVJTKFtuYW4uaCBpZWVlZnAuaCBlbmRpYW4uaCBzeXMvaXNhX2RlZnMuaCBcCisgICAgICAgbWFjaGluZS9lbmRpYW4uaCBtYWNoaW5lL3BhcmFtLmggc3lzL21hY2hpbmUuaCBzeXMvdHlwZXMuaCBcCitAQCAtMTUyLDcgKzI0NSw3IEBACisgICAgIEFDX0RFRklORShIQVZFX0lOVDY0X1QpCisgICAgIGNhc2UgIiR0YXJnZXQiIGluCisgICAgICAgKi11Y2xpbnV4KikKKy0gICAgICAgICMgRG9uJ3QgZW5hYmxlIExGUyB3aXRoIHVDbGliYworKyAgICAgICAgIyBEb24ndCBlbmFibGUgTEZTIHdpdGggdUNsaW51eAorICAgICAgICAgOzsKKyAgICAgICAqKQorICAgICAgICAgQUNfREVGSU5FKF9HTElCQ1hYX1VTRV9MRlMpCitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oIGdjYy0zLjQuNi9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaAorLS0tIGdjYy0zLjQuNi5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCTIwMDMtMTItMDkgMDQ6NTE6NDYuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTMuNC42L2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCTIwMDctMDgtMTUgMjI6NTE6MDEuMDAwMDAwMDAwICswMjAwCitAQCAtMTAxLDcgKzEwMSw5IEBACisgdXNpbmcgc3RkOjp3bWVtY3B5OworIHVzaW5nIHN0ZDo6d21lbW1vdmU7CisgdXNpbmcgc3RkOjp3bWVtc2V0OworKyNpZiBfR0xJQkNYWF9IQVZFX1dDU0ZUSU1FCisgdXNpbmcgc3RkOjp3Y3NmdGltZTsKKysjZW5kaWYKKyAKKyAjaWYgX0dMSUJDWFhfVVNFX0M5OQorIHVzaW5nIHN0ZDo6d2NzdG9sZDsKK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvc3RkX2N3Y2hhci5oIGdjYy0zLjQuNi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9zdGRfY3djaGFyLmgKKy0tLSBnY2MtMy40LjYub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9zdGRfY3djaGFyLmgJMjAwNC0wNy0yMCAxMDo1MjoxMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtMy40LjYvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvc3RkX2N3Y2hhci5oCTIwMDctMDgtMTUgMjI6NTE6MDEuMDAwMDAwMDAwICswMjAwCitAQCAtMTc5LDcgKzE3OSw5IEBACisgICB1c2luZyA6Ondjc2NvbGw7CisgICB1c2luZyA6Ondjc2NweTsKKyAgIHVzaW5nIDo6d2NzY3NwbjsKKysjaWYgX0dMSUJDWFhfSEFWRV9XQ1NGVElNRQorICAgdXNpbmcgOjp3Y3NmdGltZTsKKysjZW5kaWYKKyAgIHVzaW5nIDo6d2NzbGVuOworICAgdXNpbmcgOjp3Y3NuY2F0OworICAgdXNpbmcgOjp3Y3NuY21wOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy8zLjQuNi8xMjAtbGlic3RkYysrLXBpYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvMy40LjYvMTIwLWxpYnN0ZGMrKy1waWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI1NWE0NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvMy40LjYvMTIwLWxpYnN0ZGMrKy1waWMucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmFtIGdjYy0zLjQuNi9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmFtCistLS0gZ2NjLTMuNC42Lm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQkyMDA0LTA0LTE2IDIxOjA4OjM1LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy0zLjQuNi9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmFtCTIwMDctMDgtMTUgMjI6NTI6MjMuMDAwMDAwMDAwICswMjAwCitAQCAtMjEwLDYgKzIxMCwxMCBAQAorIAkgICQoT1BUX0xERkxBR1MpICQoU0VDVElPTl9MREZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKExERkxBR1MpIC1vICRACisgCisgCisraW5zdGFsbC1leGVjLWxvY2FsOgorKwkkKEFSKSBjcnUgbGlic3RkYysrX3BpYy5hIC5saWJzLyoubyAkKHRvcF9idWlsZGRpcikvbGlic3VwYysrLyoubworKwkkKElOU1RBTExfREFUQSkgbGlic3RkYysrX3BpYy5hICQoREVTVERJUikkKHRvb2xleGVjbGliZGlyKQorKworICMgQWRkZWQgYml0cyB0byBidWlsZCBkZWJ1ZyBsaWJyYXJ5LgorIGlmIEdMSUJDWFhfQlVJTERfREVCVUcKKyBhbGwtbG9jYWw6IGJ1aWxkX2RlYnVnCitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuaW4gZ2NjLTMuNC42L2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuaW4KKy0tLSBnY2MtMy40LjYub3JpZy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCTIwMDQtMDQtMTYgMjE6MDg6MzUuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTMuNC42L2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuaW4JMjAwNy0wOC0xNSAyMjo1MjoyMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC01OTIsNyArNTkyLDcgQEAKKyAKKyBpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtZGF0YS1sb2NhbAorIAorLWluc3RhbGwtZXhlYy1hbTogaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTCisraW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLXRvb2xleGVjbGliTFRMSUJSQVJJRVMgaW5zdGFsbC1leGVjLWxvY2FsCisgCisgaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKyAKK0BAIC02MjUsNiArNjI1LDcgQEAKKyAJZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIFwKKyAJaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZGF0YS1sb2NhbCBcCisgCWluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBcCisrCWluc3RhbGwtZXhlYy1sb2NhbCBcCisgCWluc3RhbGwtbWFuIGluc3RhbGwtc3RyaXAgaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTIFwKKyAJaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKyAJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAorQEAgLTcwOSw2ICs3MTAsMTEgQEAKKyBpbnN0YWxsX2RlYnVnOgorIAkoY2QgJHtkZWJ1Z2Rpcn0gJiYgJChNQUtFKSBcCisgCXRvb2xleGVjbGliZGlyPSQoZ2xpYmN4eF90b29sZXhlY2xpYmRpcikvZGVidWcgaW5zdGFsbCkKKysKKytpbnN0YWxsLWV4ZWMtbG9jYWw6CisrCSQoQVIpIGNydSBsaWJzdGRjKytfcGljLmEgLmxpYnMvKi5vICQodG9wX2J1aWxkZGlyKS9saWJzdXBjKysvKi5vCisrCSQoSU5TVEFMTF9EQVRBKSBsaWJzdGRjKytfcGljLmEgJChERVNURElSKSQodG9vbGV4ZWNsaWJkaXIpCisrCisgIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyAjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKyAuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzMuNC42LzEzMC1pbmRleF9tYWNyby5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvMy40LjYvMTMwLWluZGV4X21hY3JvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNGQ1N2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzMuNC42LzEzMC1pbmRleF9tYWNyby5wYXRjaApAQCAtMCwwICsxLDI2IEBACitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlIGdjYy0zLjQuNi9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQorLS0tIGdjYy0zLjQuNi5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCTIwMDUtMDEtMTYgMjM6MDg6NDMuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTMuNC42L2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCTIwMDctMDgtMTUgMjI6NTM6MzcuMDAwMDAwMDAwICswMjAwCitAQCAtNTgsNiArNTgsOSBAQAorICNpbmNsdWRlIDxiaXRzL2FsbG9jYXRvci5oPgorICNpbmNsdWRlIDxleHQvaGFzaF9mdW4uaD4KKyAKKysvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCisrI3VuZGVmIGluZGV4CisrCisgIyBpZmRlZiBfX0dDCisgIyAgIGRlZmluZSBfX0dDX0NPTlNUIGNvbnN0CisgIyBlbHNlCitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oIGdjYy0zLjQuNi9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAorLS0tIGdjYy0zLjQuNi5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCTIwMDQtMDktMDggMTU6MzY6MDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTMuNC42L2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCTIwMDctMDgtMTUgMjI6NTM6MzcuMDAwMDAwMDAwICswMjAwCitAQCAtNTMsNiArNTMsOSBAQAorICNpbmNsdWRlIDxleHQvbWVtb3J5PiAvLyBGb3IgdW5pbml0aWFsaXplZF9jb3B5X24KKyAjaW5jbHVkZSA8ZXh0L251bWVyaWM+IC8vIEZvciBwb3dlcgorIAorKy8qIGNvcGUgdy8gaW5kZXggZGVmaW5lZCBhcyBtYWNybywgU3VTdjMgcHJvcG9zYWwgKi8KKysjdW5kZWYgaW5kZXgKKysKKyBuYW1lc3BhY2UgX19nbnVfY3h4CisgeworICAgdXNpbmcgc3RkOjpzaXplX3Q7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzMuNC42LzE0MC1hcm0tbGRtLXBlZXBob2xlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy8zLjQuNi8xNDAtYXJtLWxkbS1wZWVwaG9sZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWEwYWM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy8zLjQuNi8xNDAtYXJtLWxkbS1wZWVwaG9sZS5wYXRjaApAQCAtMCwwICsxLDY4IEBACitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvYXJtL2FybS5jIGdjYy0zLjQuNi9nY2MvY29uZmlnL2FybS9hcm0uYworLS0tIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvYXJtL2FybS5jCTIwMDUtMTAtMDEgMTU6MzE6MzguMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTMuNC42L2djYy9jb25maWcvYXJtL2FybS5jCTIwMDctMDgtMTUgMjI6NTQ6NTkuMDAwMDAwMDAwICswMjAwCitAQCAtNDg1Nyw2ICs0ODU3LDExIEBACisgICAgICAgKmxvYWRfb2Zmc2V0ID0gdW5zb3J0ZWRfb2Zmc2V0c1tvcmRlclswXV07CisgICAgIH0KKyAKKysgIC8qIEZvciBYU2NhbGUgYSB0d28td29yZCBMRE0gaXMgYSBwZXJmb3JtYW5jZSBsb3NzLCBzbyBvbmx5IGRvIHRoaXMgaWYKKysgICAgIHNpemUgaXMgbW9yZSBpbXBvcnRhbnQuICBTZWUgY29tbWVudHMgaW4gYXJtX2dlbl9sb2FkX211bHRpcGxlLiAgKi8KKysgIGlmIChub3BzID09IDIgJiYgYXJtX3R1bmVfeHNjYWxlICYmICFvcHRpbWl6ZV9zaXplKQorKyAgICByZXR1cm4gMDsKKysKKyAgIGlmICh1bnNvcnRlZF9vZmZzZXRzW29yZGVyWzBdXSA9PSAwKQorICAgICByZXR1cm4gMTsgLyogbGRtaWEgKi8KKyAKK0BAIC01MDgzLDYgKzUwODgsMTEgQEAKKyAgICAgICAqbG9hZF9vZmZzZXQgPSB1bnNvcnRlZF9vZmZzZXRzW29yZGVyWzBdXTsKKyAgICAgfQorIAorKyAgLyogRm9yIFhTY2FsZSBhIHR3by13b3JkIExETSBpcyBhIHBlcmZvcm1hbmNlIGxvc3MsIHNvIG9ubHkgZG8gdGhpcyBpZgorKyAgICAgc2l6ZSBpcyBtb3JlIGltcG9ydGFudC4gIFNlZSBjb21tZW50cyBpbiBhcm1fZ2VuX2xvYWRfbXVsdGlwbGUuICAqLworKyAgaWYgKG5vcHMgPT0gMiAmJiBhcm1fdHVuZV94c2NhbGUgJiYgIW9wdGltaXplX3NpemUpCisrICAgIHJldHVybiAwOworKworICAgaWYgKHVuc29ydGVkX29mZnNldHNbb3JkZXJbMF1dID09IDApCisgICAgIHJldHVybiAxOyAvKiBzdG1pYSAqLworIAorZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL2FybS9hcm0ubWQgZ2NjLTMuNC42L2djYy9jb25maWcvYXJtL2FybS5tZAorLS0tIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvYXJtL2FybS5tZAkyMDA1LTEwLTAxIDE1OjMxOjM4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy0zLjQuNi9nY2MvY29uZmlnL2FybS9hcm0ubWQJMjAwNy0wOC0xNSAyMjo1NDo1OS4wMDAwMDAwMDAgKzAyMDAKK0BAIC04ODExLDEzICs4ODExLDE2IEBACisgICAgKHNldF9hdHRyICJsZW5ndGgiICI0LDgsOCIpXQorICkKKyAKKys7IFRyeSB0byBjb252ZXJ0IExEUitMRFIrYXJpdGggaW50byBbYWRkK11MRE0rYXJpdGgKKys7IE9uIFhTY2FsZSwgTERNIGlzIGFsd2F5cyBzbG93ZXIgdGhhbiB0d28gTERScywgc28gb25seSBkbyB0aGlzIGlmCisrOyBvcHRpbWlzaW5nIGZvciBzaXplLgorIChkZWZpbmVfaW5zbiAiKmFyaXRoX2FkamFjZW50bWVtIgorICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAic19yZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorIAkobWF0Y2hfb3BlcmF0b3I6U0kgMSAic2hpZnRhYmxlX29wZXJhdG9yIgorIAkgWyhtYXRjaF9vcGVyYW5kOlNJIDIgIm1lbW9yeV9vcGVyYW5kIiAibSIpCisgCSAgKG1hdGNoX29wZXJhbmQ6U0kgMyAibWVtb3J5X29wZXJhbmQiICJtIildKSkKKyAgICAoY2xvYmJlciAobWF0Y2hfc2NyYXRjaDpTSSA0ICI9ciIpKV0KKy0gICJUQVJHRVRfQVJNICYmIGFkamFjZW50X21lbV9sb2NhdGlvbnMgKG9wZXJhbmRzWzJdLCBvcGVyYW5kc1szXSkiCisrICAiVEFSR0VUX0FSTSAmJiAoIWFybV90dW5lX3hzY2FsZSB8fCBvcHRpbWl6ZV9zaXplKSAmJiBhZGphY2VudF9tZW1fbG9jYXRpb25zIChvcGVyYW5kc1syXSwgb3BlcmFuZHNbM10pIgorICAgIioKKyAgIHsKKyAgICAgcnR4IGxkbVszXTsKK0BAIC04ODUyLDYgKzg4NTUsOCBAQAorICAgICAgIH0KKyAgICBpZiAodmFsMSAmJiB2YWwyKQorICAgICAgIHsKKysJLyogVGhpcyB3b3VsZCBiZSBhIGxvc3Mgb24gYSBIYXJ2YXJkIGNvcmUsIGJ1dCBhZGphY2VudF9tZW1fbG9jYXRpb25zKCkKKysJICAgd2lsbCBwcmV2ZW50IGl0IGZyb20gaGFwcGVuaW5nLiAgKi8KKyAJcnR4IG9wc1szXTsKKyAJbGRtWzBdID0gb3BzWzBdID0gb3BlcmFuZHNbNF07CisgCW9wc1sxXSA9IFhFWFAgKFhFWFAgKG9wZXJhbmRzWzJdLCAwKSwgMCk7CitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2djYy9nZW5wZWVwLmMgZ2NjLTMuNC42L2djYy9nZW5wZWVwLmMKKy0tLSBnY2MtMy40LjYub3JpZy9nY2MvZ2VucGVlcC5jCTIwMDMtMDctMDUgMDc6Mjc6MjIuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTMuNC42L2djYy9nZW5wZWVwLmMJMjAwNy0wOC0xNSAyMjo1NDo1OS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zODEsNiArMzgxLDcgQEAKKyAgIHByaW50ZiAoIiNpbmNsdWRlIFwicmVjb2cuaFwiXG4iKTsKKyAgIHByaW50ZiAoIiNpbmNsdWRlIFwiZXhjZXB0LmhcIlxuXG4iKTsKKyAgIHByaW50ZiAoIiNpbmNsdWRlIFwiZnVuY3Rpb24uaFwiXG5cbiIpOworKyAgcHJpbnRmICgiI2luY2x1ZGUgXCJmbGFncy5oXCJcblxuIik7CisgCisgICBwcmludGYgKCIjaWZkZWYgSEFWRV9wZWVwaG9sZVxuIik7CisgICBwcmludGYgKCJleHRlcm4gcnR4IHBlZXBfb3BlcmFuZFtdO1xuXG4iKTsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvMy40LjYvMTUwLWFybS1sZG0ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzMuNC42LzE1MC1hcm0tbGRtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZWE0OTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzMuNC42LzE1MC1hcm0tbGRtLnBhdGNoCkBAIC0wLDAgKzEsMTIwIEBACitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvYXJtL2FybS5jIGdjYy0zLjQuNi9nY2MvY29uZmlnL2FybS9hcm0uYworLS0tIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvYXJtL2FybS5jCTIwMDctMDgtMTUgMjI6NTY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTMuNC42L2djYy9jb25maWcvYXJtL2FybS5jCTIwMDctMDgtMTUgMjI6NTY6MjAuMDAwMDAwMDAwICswMjAwCitAQCAtODUyNCw2ICs4NTI0LDI2IEBACisgICByZXR1cm5fdXNlZF90aGlzX2Z1bmN0aW9uID0gMDsgIAorIH0KKyAKKysvKiBSZXR1cm4gdGhlIG51bWJlciAoY291bnRpbmcgZnJvbSAwKSBvZgorKyAgIHRoZSBsZWFzdCBzaWduaWZpY2FudCBzZXQgYml0IGluIE1BU0suICAqLworKworKyNpZmRlZiBfX0dOVUNfXworK2lubGluZQorKyNlbmRpZgorK3N0YXRpYyBpbnQKKytudW1iZXJfb2ZfZmlyc3RfYml0X3NldCAobWFzaykKKysgICAgIGludCBtYXNrOworK3sKKysgIGludCBiaXQ7CisrCisrICBmb3IgKGJpdCA9IDA7CisrICAgICAgIChtYXNrICYgKDEgPDwgYml0KSkgPT0gMDsKKysgICAgICAgKytiaXQpCisrICAgIGNvbnRpbnVlOworKworKyAgcmV0dXJuIGJpdDsKKyt9CisrCisgY29uc3QgY2hhciAqCisgYXJtX291dHB1dF9lcGlsb2d1ZSAocnR4IHNpYmxpbmcpCisgeworQEAgLTg3NTcsMjcgKzg3NzcsNDcgQEAKKyAJICBzYXZlZF9yZWdzX21hc2sgfD0gICAoMSA8PCBQQ19SRUdOVU0pOworIAl9CisgCistICAgICAgLyogTG9hZCB0aGUgcmVnaXN0ZXJzIG9mZiB0aGUgc3RhY2suICBJZiB3ZSBvbmx5IGhhdmUgb25lIHJlZ2lzdGVyCistCSB0byBsb2FkIHVzZSB0aGUgTERSIGluc3RydWN0aW9uIC0gaXQgaXMgZmFzdGVyLiAgKi8KKy0gICAgICBpZiAoc2F2ZWRfcmVnc19tYXNrID09ICgxIDw8IExSX1JFR05VTSkpCistCXsKKy0JICAvKiBUaGUgZXhjZXB0aW9uIGhhbmRsZXIgaWdub3JlcyB0aGUgTFIsIHNvIHdlIGRvCistCSAgICAgbm90IHJlYWxseSBuZWVkIHRvIGxvYWQgaXQgb2ZmIHRoZSBzdGFjay4gICovCistCSAgaWYgKGVoX29mcykKKy0JICAgIGFzbV9mcHJpbnRmIChmLCAiXHRhZGRcdCVyLCAlciwgIzRcbiIsIFNQX1JFR05VTSwgU1BfUkVHTlVNKTsKKy0JICBlbHNlCistCSAgICBhc21fZnByaW50ZiAoZiwgIlx0bGRyXHQlciwgWyVyXSwgIzRcbiIsIExSX1JFR05VTSwgU1BfUkVHTlVNKTsKKy0JfQorLSAgICAgIGVsc2UgaWYgKHNhdmVkX3JlZ3NfbWFzaykKKysgICAgICBpZiAoc2F2ZWRfcmVnc19tYXNrKQorIAl7CistCSAgaWYgKHNhdmVkX3JlZ3NfbWFzayAmICgxIDw8IFNQX1JFR05VTSkpCistCSAgICAvKiBOb3RlIC0gd3JpdGUgYmFjayB0byB0aGUgc3RhY2sgcmVnaXN0ZXIgaXMgbm90IGVuYWJsZWQKKy0JICAgICAgIChpZSAibGRtZmQgc3AhLi4uIikuICBXZSBrbm93IHRoYXQgdGhlIHN0YWNrIHBvaW50ZXIgaXMKKy0JICAgICAgIGluIHRoZSBsaXN0IG9mIHJlZ2lzdGVycyBhbmQgaWYgd2UgYWRkIHdyaXRlYmFjayB0aGUKKy0JICAgICAgIGluc3RydWN0aW9uIGJlY29tZXMgVU5QUkVESUNUQUJMRS4gICovCistCSAgICBwcmludF9tdWx0aV9yZWcgKGYsICJsZG1mZFx0JXIiLCBTUF9SRUdOVU0sIHNhdmVkX3JlZ3NfbWFzayk7CisrCSAgLyogTG9hZCB0aGUgcmVnaXN0ZXJzIG9mZiB0aGUgc3RhY2suICBJZiB3ZSBvbmx5IGhhdmUgb25lIHJlZ2lzdGVyCisrCSAgICAgdG8gbG9hZCB1c2UgdGhlIExEUiBpbnN0cnVjdGlvbiAtIGl0IGlzIGZhc3Rlci4gICovCisrCSAgaWYgKGJpdF9jb3VudCAoc2F2ZWRfcmVnc19tYXNrKSA9PSAxKQorKwkgICAgeworKwkgICAgICBpbnQgcmVnID0gbnVtYmVyX29mX2ZpcnN0X2JpdF9zZXQgKHNhdmVkX3JlZ3NfbWFzayk7CisrCisrCSAgICAgIHN3aXRjaCAocmVnKQorKwkJeworKwkJY2FzZSBTUF9SRUdOVU06CisrCQkgIC8qIE11c3RuJ3QgdXNlIGJhc2Ugd3JpdGViYWNrIHdoZW4gbG9hZGluZyBTUC4gICovCisrCQkgIGFzbV9mcHJpbnRmIChmLCAiXHRsZHJcdCVyLCBbJXJdXG4iLCBTUF9SRUdOVU0sIFNQX1JFR05VTSk7CisrCQkgIGJyZWFrOworKwkJICAKKysJCWNhc2UgTFJfUkVHTlVNOgorKwkJICBpZiAoZWhfb2ZzKQorKwkJICAgIHsKKysJCSAgICAgIC8qIFRoZSBleGNlcHRpb24gaGFuZGxlciBpZ25vcmVzIHRoZSBMUiwgc28gd2UgZG8KKysJCQkgbm90IHJlYWxseSBuZWVkIHRvIGxvYWQgaXQgb2ZmIHRoZSBzdGFjay4gICovCisrCQkgICAgICBhc21fZnByaW50ZiAoZiwgIlx0YWRkXHQlciwgJXIsICM0XG4iLCBTUF9SRUdOVU0sIFNQX1JFR05VTSk7CisrCQkgICAgICBicmVhazsKKysJCSAgICB9CisrCQkgIC8qIGVsc2UgZmFsbCB0aHJvdWdoICovCisrCQkgIAorKwkJZGVmYXVsdDoKKysJCSAgYXNtX2ZwcmludGYgKGYsICJcdGxkclx0JXIsIFslcl0sICM0XG4iLCByZWcsIFNQX1JFR05VTSk7CisrCQkgIGJyZWFrOworKwkJfQorKwkgICAgfQorIAkgIGVsc2UKKy0JICAgIHByaW50X211bHRpX3JlZyAoZiwgImxkbWZkXHQlciEiLCBTUF9SRUdOVU0sIHNhdmVkX3JlZ3NfbWFzayk7CisrCSAgICB7CisrCSAgICAgIGlmIChzYXZlZF9yZWdzX21hc2sgJiAoMSA8PCBTUF9SRUdOVU0pKQorKwkJLyogTm90ZSAtIHdyaXRlIGJhY2sgdG8gdGhlIHN0YWNrIHJlZ2lzdGVyIGlzIG5vdCBlbmFibGVkCisrCQkgICAoaWUgImxkbWZkIHNwIS4uLiIpLiAgV2Uga25vdyB0aGF0IHRoZSBzdGFjayBwb2ludGVyIGlzCisrCQkgICBpbiB0aGUgbGlzdCBvZiByZWdpc3RlcnMgYW5kIGlmIHdlIGFkZCB3cml0ZWJhY2sgdGhlCisrCQkgICBpbnN0cnVjdGlvbiBiZWNvbWVzIFVOUFJFRElDVEFCTEUuICAqLworKwkJcHJpbnRfbXVsdGlfcmVnIChmLCAibGRtZmRcdCVyIiwgU1BfUkVHTlVNLCBzYXZlZF9yZWdzX21hc2spOworKwkgICAgICBlbHNlCisrCQlwcmludF9tdWx0aV9yZWcgKGYsICJsZG1mZFx0JXIhIiwgU1BfUkVHTlVNLCBzYXZlZF9yZWdzX21hc2spOworKwkgICAgfQorIAl9CisgCisgICAgICAgaWYgKGN1cnJlbnRfZnVuY3Rpb25fcHJldGVuZF9hcmdzX3NpemUpCitAQCAtMTE0MDUsMjIgKzExNDQ1LDYgQEAKKyAgICAgfQorIH0KKyAKKy0vKiBSZXR1cm4gdGhlIG51bWJlciAoY291bnRpbmcgZnJvbSAwKSBvZgorLSAgIHRoZSBsZWFzdCBzaWduaWZpY2FudCBzZXQgYml0IGluIE1BU0suICAqLworLQorLWlubGluZSBzdGF0aWMgaW50CistbnVtYmVyX29mX2ZpcnN0X2JpdF9zZXQgKGludCBtYXNrKQorLXsKKy0gIGludCBiaXQ7CistCistICBmb3IgKGJpdCA9IDA7CistICAgICAgIChtYXNrICYgKDEgPDwgYml0KSkgPT0gMDsKKy0gICAgICAgKytiaXQpCistICAgIGNvbnRpbnVlOworLQorLSAgcmV0dXJuIGJpdDsKKy19CistCisgLyogR2VuZXJhdGUgY29kZSB0byByZXR1cm4gZnJvbSBhIHRodW1iIGZ1bmN0aW9uLgorICAgIElmICdyZWdfY29udGFpbmluZ19yZXR1cm5fYWRkcicgaXMgLTEsIHRoZW4gdGhlIHJldHVybiBhZGRyZXNzIGlzCisgICAgYWN0dWFsbHkgb24gdGhlIHN0YWNrLCBhdCB0aGUgc3RhY2sgcG9pbnRlci4gICovCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzMuNC42LzE2MC1hcm0tbGRtLXBlZXBob2xlMi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvMy40LjYvMTYwLWFybS1sZG0tcGVlcGhvbGUyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NWM1MTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzMuNC42LzE2MC1hcm0tbGRtLXBlZXBob2xlMi5wYXRjaApAQCAtMCwwICsxLDMyIEBACitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvYXJtL2FybS5jIGdjYy0zLjQuNi9nY2MvY29uZmlnL2FybS9hcm0uYworLS0tIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvYXJtL2FybS5jCTIwMDctMDgtMTUgMjI6NTc6NTEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTMuNC42L2djYy9jb25maWcvYXJtL2FybS5jCTIwMDctMDgtMTUgMjI6NTc6NTEuMDAwMDAwMDAwICswMjAwCitAQCAtNDU3Miw2ICs0NTcyLDEwIEBACisgaW50CisgYWRqYWNlbnRfbWVtX2xvY2F0aW9ucyAocnR4IGEsIHJ0eCBiKQorIHsKKysgIC8qIFdlIGRvbid0IGd1YXJhbnRlZSB0byBwcmVzZXJ2ZSB0aGUgb3JkZXIgb2YgdGhlc2UgbWVtb3J5IHJlZnMuICAqLworKyAgaWYgKHZvbGF0aWxlX3JlZnNfcCAoYSkgfHwgdm9sYXRpbGVfcmVmc19wIChiKSkKKysgICAgcmV0dXJuIDA7CisrCisgICBpZiAoKEdFVF9DT0RFIChYRVhQIChhLCAwKSkgPT0gUkVHCisgICAgICAgIHx8IChHRVRfQ09ERSAoWEVYUCAoYSwgMCkpID09IFBMVVMKKyAJICAgJiYgR0VUX0NPREUgKFhFWFAgKFhFWFAgKGEsIDApLCAxKSkgPT0gQ09OU1RfSU5UKSkKK0BAIC00NjExLDYgKzQ2MTUsMTcgQEAKKyAJcmV0dXJuIDA7CisgCisgICAgICAgdmFsX2RpZmYgPSB2YWwxIC0gdmFsMDsKKysKKysgICAgICBpZiAoYXJtX2xkX3NjaGVkKQorKwl7CisrCSAgLyogSWYgdGhlIHRhcmdldCBoYXMgbG9hZCBkZWxheSBzbG90cywgdGhlbiB0aGVyZSdzIG5vIGJlbmVmaXQKKysJICAgICB0byB1c2luZyBhbiBsZG0gaW5zdHJ1Y3Rpb24gdW5sZXNzIHRoZSBvZmZzZXQgaXMgemVybyBhbmQKKysJICAgICB3ZSBhcmUgb3B0aW1pemluZyBmb3Igc2l6ZS4gICovCisrCSAgcmV0dXJuIChvcHRpbWl6ZV9zaXplICYmIChSRUdOTyAocmVnMCkgPT0gUkVHTk8gKHJlZzEpKQorKwkJICAmJiAodmFsMCA9PSAwIHx8IHZhbDEgPT0gMCB8fCB2YWwwID09IDQgfHwgdmFsMSA9PSA0KQorKwkJICAmJiAodmFsX2RpZmYgPT0gNCB8fCB2YWxfZGlmZiA9PSAtNCkpOworKwl9CisrCisgICAgICAgcmV0dXJuICgoUkVHTk8gKHJlZzApID09IFJFR05PIChyZWcxKSkKKyAJICAgICAgJiYgKHZhbF9kaWZmID09IDQgfHwgdmFsX2RpZmYgPT0gLTQpKTsKKyAgICAgfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy8zLjQuNi8xNzAtc2RrLWxpYnN0ZGMrKy1pbmNsdWRlcy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvMy40LjYvMTcwLXNkay1saWJzdGRjKystaW5jbHVkZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU5OWI1OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvMy40LjYvMTcwLXNkay1saWJzdGRjKystaW5jbHVkZXMucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9saWJzdGRjKystdjMvZnJhZ21lbnQuYW0gZ2NjLTMuNC42L2xpYnN0ZGMrKy12My9mcmFnbWVudC5hbQorLS0tIGdjYy0zLjQuNi5vcmlnL2xpYnN0ZGMrKy12My9mcmFnbWVudC5hbQkyMDAzLTA4LTI3IDAyOjM4OjI4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy0zLjQuNi9saWJzdGRjKystdjMvZnJhZ21lbnQuYW0JMjAwNy0wOC0xNSAyMjo1OTowOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xOCw3ICsxOCw3IEBACisgCSQoV0FSTl9GTEFHUykgJChXRVJST1IpIC1mZGlhZ25vc3RpY3Mtc2hvdy1sb2NhdGlvbj1vbmNlCisgCisgIyAtSS8tRCBmbGFncyB0byBwYXNzIHdoZW4gY29tcGlsaW5nLgorLUFNX0NQUEZMQUdTID0gJChHTElCQ1hYX0lOQ0xVREVTKQorK0FNX0NQUEZMQUdTID0gJChHTElCQ1hYX0lOQ0xVREVTKSAtSSQodG9wbGV2ZWxfc3JjZGlyKS9pbmNsdWRlCisgCisgCisgCitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2xpYnN0ZGMrKy12My9saWJtYXRoL01ha2VmaWxlLmFtIGdjYy0zLjQuNi9saWJzdGRjKystdjMvbGlibWF0aC9NYWtlZmlsZS5hbQorLS0tIGdjYy0zLjQuNi5vcmlnL2xpYnN0ZGMrKy12My9saWJtYXRoL01ha2VmaWxlLmFtCTIwMDMtMDgtMjcgMjM6Mjk6NDMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTMuNC42L2xpYnN0ZGMrKy12My9saWJtYXRoL01ha2VmaWxlLmFtCTIwMDctMDgtMTUgMjI6NTk6MDkuMDAwMDAwMDAwICswMjAwCitAQCAtMzIsNyArMzIsNyBAQAorIAorIGxpYm1hdGhfbGFfU09VUkNFUyA9IHN0dWJzLmMKKyAKKy1BTV9DUFBGTEFHUyA9ICQoQ0FOQURJQU5fSU5DTFVERVMpCisrQU1fQ1BQRkxBR1MgPSAkKENBTkFESUFOX0lOQ0xVREVTKSAtSSQodG9wbGV2ZWxfc3JjZGlyKS9pbmNsdWRlCisgCisgIyBPbmx5IGNvbXBpbGluZyAiQyIgc291cmNlcyBpbiB0aGlzIGRpcmVjdG9yeS4KKyBMSUJUT09MID0gQExJQlRPT0xAIC0tdGFnIENDCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzMuNC42LzE4MC1wcjE1MDY4LWZpeC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvMy40LjYvMTgwLXByMTUwNjgtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwOGYzNWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzMuNC42LzE4MC1wcjE1MDY4LWZpeC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2djYy9mbG93LmMgZ2NjLTMuNC42L2djYy9mbG93LmMKKy0tLSBnY2MtMy40LjYub3JpZy9nY2MvZmxvdy5jCTIwMDUtMDktMDEgMjI6NTE6MDkuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTMuNC42L2djYy9mbG93LmMJMjAwNy0wOC0xNSAyMzowMDozMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xODg0LDYgKzE4ODQsNyBAQAorIAkgIHJ0eCBzZXRfc3JjID0gU0VUX1NSQyAocGNfc2V0IChCQl9FTkQgKGJiKSkpOworIAkgIHJ0eCBjb25kX3RydWUgPSBYRVhQIChzZXRfc3JjLCAwKTsKKyAJICBydHggcmVnID0gWEVYUCAoY29uZF90cnVlLCAwKTsKKysgCSAgZW51bSBydHhfY29kZSBpbnZfY29uZDsKKyAKKyAJICBpZiAoR0VUX0NPREUgKHJlZykgPT0gU1VCUkVHKQorIAkgICAgcmVnID0gU1VCUkVHX1JFRyAocmVnKTsKK0BAIC0xODkyLDExICsxODkzLDEzIEBACisgCSAgICAgaW4gdGhlIGZvcm0gb2YgYSBjb21wYXJpc29uIG9mIGEgcmVnaXN0ZXIgYWdhaW5zdCB6ZXJvLiAgCisgCSAgICAgSWYgdGhlIGNvbmRpdGlvbiBpcyBtb3JlIGNvbXBsZXggdGhhbiB0aGF0LCB0aGVuIGl0IGlzIHNhZmUKKyAJICAgICBub3QgdG8gcmVjb3JkIGFueSBpbmZvcm1hdGlvbi4gICovCistCSAgaWYgKEdFVF9DT0RFIChyZWcpID09IFJFRworKyAJICBpbnZfY29uZCA9IHJldmVyc2VkX2NvbXBhcmlzb25fY29kZSAoY29uZF90cnVlLCBCQl9FTkQgKGJiKSk7CisrIAkgIGlmIChpbnZfY29uZCAhPSBVTktOT1dOCisrCSAgICAgICYmIEdFVF9DT0RFIChyZWcpID09IFJFRworIAkgICAgICAmJiBYRVhQIChjb25kX3RydWUsIDEpID09IGNvbnN0MF9ydHgpCisgCSAgICB7CisgCSAgICAgIHJ0eCBjb25kX2ZhbHNlCistCQk9IGdlbl9ydHhfZm10X2VlIChyZXZlcnNlX2NvbmRpdGlvbiAoR0VUX0NPREUgKGNvbmRfdHJ1ZSkpLAorKwkJPSBnZW5fcnR4X2ZtdF9lZSAoaW52X2NvbmQsCisgCQkJCSAgR0VUX01PREUgKGNvbmRfdHJ1ZSksIFhFWFAgKGNvbmRfdHJ1ZSwgMCksCisgCQkJCSAgWEVYUCAoY29uZF90cnVlLCAxKSk7CisgCSAgICAgIGlmIChHRVRfQ09ERSAoWEVYUCAoc2V0X3NyYywgMSkpID09IFBDKQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy8zLjQuNi8xOTAtYWxsX3NoLXByMTY2NjUtZml4LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy8zLjQuNi8xOTAtYWxsX3NoLXByMTY2NjUtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyOTdmY2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzMuNC42LzE5MC1hbGxfc2gtcHIxNjY2NS1maXgucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL3NoL3NoLmMgZ2NjLTMuNC42L2djYy9jb25maWcvc2gvc2guYworLS0tIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvc2gvc2guYwkyMDA0LTA5LTAzIDA4OjUxOjMwLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy0zLjQuNi9nY2MvY29uZmlnL3NoL3NoLmMJMjAwNy0wOC0xNSAyMzowMTo0OC4wMDAwMDAwMDAgKzAyMDAKK0BAIC05MTA3LDYgKzkxMDcsMTUgQEAKKyAgICAgfQorICAgdGhpcyA9IEZVTkNUSU9OX0FSRyAoY3VtLCBQbW9kZSwgcHRyX3R5cGVfbm9kZSwgMSk7CisgCisrICAvKiBJbiBQSUMgY2FzZSwgd2Ugc2V0IFBJQyByZWdpc3RlciB0byBjb21wdXRlIHRoZSB0YXJnZXQgYWRkcmVzcy4gIFdlCisrICAgICBjYW4gdXNlIGEgc2NyYXRjaCByZWdpc3RlciB0byBzYXZlIGFuZCByZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZSAgCisrICAgICBleGNlcHQgZm9yIFNIY29tcGFjdC4gIEZvciBTSGNvbXBhY3QsIHVzZSBzdGFjay4gICovCisrICBpZiAoZmxhZ19waWMgJiYgVEFSR0VUX1NIQ09NUEFDVCkKKysgICAgeworKyAgICAgIHB1c2ggKFBJQ19PRkZTRVRfVEFCTEVfUkVHTlVNKTsKKysgICAgICBlbWl0X2luc24gKGdlbl9HT1RhZGRyMnBpY3JlZyAoKSk7CisrICAgIH0KKysKKyAgIC8qIEZvciBTSGNvbXBhY3QsIHdlIG9ubHkgaGF2ZSByMCBmb3IgYSBzY3JhdGNoIHJlZ2lzdGVyOiByMSBpcyB0aGUKKyAgICAgIHN0YXRpYyBjaGFpbiBwb2ludGVyIChldmVuIGlmIHlvdSBjYW4ndCBoYXZlIG5lc3RlZCB2aXJ0dWFsIGZ1bmN0aW9ucworICAgICAgcmlnaHQgbm93LCBzb21lb25lIG1pZ2h0IGltcGxlbWVudCB0aGVtIHNvbWV0aW1lKSwgYW5kIHRoZSByZXN0IG9mIHRoZQorQEAgLTkxODksOCArOTE5OCwyNCBAQAorICAgICAgIGFzc2VtYmxlX2V4dGVybmFsIChmdW5jdGlvbik7CisgICAgICAgVFJFRV9VU0VEIChmdW5jdGlvbikgPSAxOworICAgICB9CisrICAvKiBXZSBjYW4gdXNlIHNjcmF0Y2gxIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHZhbHVlIG9mCisrICAgICBQSUMgcmVnaXN0ZXIgZXhjZXB0IGZvciBTSGNvbXBhY3QuICAqLworKyAgaWYgKGZsYWdfcGljICYmICEgVEFSR0VUX1NIQ09NUEFDVCkKKysgICAgeworKyAgICAgIGVtaXRfbW92ZV9pbnNuIChzY3JhdGNoMSwKKysJCSAgICAgIGdlbl9ydHhfUkVHIChQbW9kZSwgUElDX09GRlNFVF9UQUJMRV9SRUdOVU0pKTsKKysgICAgICBlbWl0X2luc24gKGdlbl9HT1RhZGRyMnBpY3JlZyAoKSk7CisrICAgIH0KKyAgIGZ1bmV4cCA9IFhFWFAgKERFQ0xfUlRMIChmdW5jdGlvbiksIDApOworICAgZW1pdF9tb3ZlX2luc24gKHNjcmF0Y2gyLCBmdW5leHApOworKyAgaWYgKGZsYWdfcGljKQorKyAgICB7CisrICAgICAgaWYgKCEgVEFSR0VUX1NIQ09NUEFDVCkKKysJZW1pdF9tb3ZlX2luc24gKGdlbl9ydHhfUkVHIChQbW9kZSwgUElDX09GRlNFVF9UQUJMRV9SRUdOVU0pLAorKwkJCXNjcmF0Y2gxKTsKKysgICAgICBlbHNlCisrCXBvcCAoUElDX09GRlNFVF9UQUJMRV9SRUdOVU0pOworKyAgICB9CisgICBmdW5leHAgPSBnZW5fcnR4X01FTSAoRlVOQ1RJT05fTU9ERSwgc2NyYXRjaDIpOworICAgc2liY2FsbCA9IGVtaXRfY2FsbF9pbnNuIChnZW5fc2liY2FsbCAoZnVuZXhwLCBjb25zdDBfcnR4LCBOVUxMX1JUWCkpOworICAgU0lCTElOR19DQUxMX1AgKHNpYmNhbGwpID0gMTsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvMy40LjYvMjAwLWFsbF9zaC1uby1yZW9yZGVyLWJsb2Nrcy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvMy40LjYvMjAwLWFsbF9zaC1uby1yZW9yZGVyLWJsb2Nrcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWQxNDI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy8zLjQuNi8yMDAtYWxsX3NoLW5vLXJlb3JkZXItYmxvY2tzLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9zaC9zaC5oIGdjYy0zLjQuNi9nY2MvY29uZmlnL3NoL3NoLmgKKy0tLSBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL3NoL3NoLmgJMjAwNi0wMS0xMiAwMjoyMDozMi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtMy40LjYvZ2NjL2NvbmZpZy9zaC9zaC5oCTIwMDctMDgtMTUgMjM6MDM6MDkuMDAwMDAwMDAwICswMjAwCitAQCAtNDIyLDYgKzQyMiwxMCBAQAorIGRvIHsJCQkJCQkJCQlcCisgICBpZiAoTEVWRUwpCQkJCQkJCQlcCisgICAgIGZsYWdfb21pdF9mcmFtZV9wb2ludGVyID0gLTE7CQkJCQlcCisrICBpZiAoTEVWRUwgPD0gMikJCQkJCQkJXAorKyAgICB7CQkJCQkJCQkJXAorKyAgICAgIGZsYWdfcmVvcmRlcl9ibG9ja3MgPSAwOwkJCQkJCVwKKysgICAgfQkJCQkJCQkJCVwKKyAgIGlmIChTSVpFKQkJCQkJCQkJXAorICAgICB0YXJnZXRfZmxhZ3MgfD0gU1BBQ0VfQklUOwkJCQkJCVwKKyAgIGlmIChUQVJHRVRfU0hNRURJQSAmJiBMRVZFTCA+IDEpCQkJCQlcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzMuNC42LzIxMC1hbGxfc2gtcHIyMDYxNy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvMy40LjYvMjEwLWFsbF9zaC1wcjIwNjE3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZDBkOTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzMuNC42LzIxMC1hbGxfc2gtcHIyMDYxNy5wYXRjaApAQCAtMCwwICsxLDI0IEBACitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvc2gvbGliMWZ1bmNzLmFzbSBnY2MtMy40LjYvZ2NjL2NvbmZpZy9zaC9saWIxZnVuY3MuYXNtCistLS0gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9zaC9saWIxZnVuY3MuYXNtCTIwMDMtMDgtMTIgMDM6MjU6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTMuNC42L2djYy9jb25maWcvc2gvbGliMWZ1bmNzLmFzbQkyMDA3LTA4LTE1IDIzOjA0OjI2LjAwMDAwMDAwMCArMDIwMAorQEAgLTM3LDkgKzM3LDE5IEBACisgICAgRUxGIGxvY2FsIGxhYmVsIHByZWZpeGVzIGJ5IEoib3JuIFJlbm5lY2tlCisgICAgYW15bGFhckBjeWdudXMuY29tICAqLworIAorKyNkZWZpbmUgQUxJQVMoWCxZKQkuZ2xvYmFsIEdMT0JBTChYKTsgLnNldCBHTE9CQUwoWCksR0xPQkFMKFkpCisrCisgI2lmZGVmIF9fRUxGX18KKyAjZGVmaW5lIExPQ0FMKFgpCS5MXyMjWAorLSNkZWZpbmUgRlVOQyhYKQkJLnR5cGUgWCxAZnVuY3Rpb24KKysKKysjaWYgMSAvKiA/Pz8gVGhlIGV4cG9ydCBsaXN0IG1lY2hhbmlzbSBpcyBicm9rZW4sIGV2ZXJ5dGhpbmcgdGhhdCBpcyBub3QKKysJIGhpZGRlbiBpcyBleHBvcnRlZC4gICovCisrI3VuZGVmIEZVTkMKKysjZGVmaW5lIEZVTkMoWCkJCS50eXBlIFgsQGZ1bmN0aW9uOyAuaGlkZGVuIFgKKysjdW5kZWYgQUxJQVMKKysjZGVmaW5lIEFMSUFTKFgsWSkJLmdsb2JhbCBHTE9CQUwoWCk7IC5zZXQgR0xPQkFMKFgpLEdMT0JBTChZKTsgLmhpZGRlbiBHTE9CQUwoWCkKKysjZW5kaWYKKysKKyAjZGVmaW5lIEVOREZVTkMwKFgpCS5MZmVfIyNYOiAuc2l6ZSBYLC5MZmVfIyNYLVgKKyAjZGVmaW5lIEVOREZVTkMoWCkJRU5ERlVOQzAoWCkKKyAjZWxzZQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy8zLjQuNi8yMjAtYXJtLWJpZ2VuZGlhbi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvMy40LjYvMjIwLWFybS1iaWdlbmRpYW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIyNzYzNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvMy40LjYvMjIwLWFybS1iaWdlbmRpYW4ucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAorZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCBnY2MtMy40LjYvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKKy0tLSBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDA3LTA4LTE1IDIyOjUxOjAxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy0zLjQuNi9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDA3LTA4LTE1IDIzOjA1OjQyLjAwMDAwMDAwMCArMDIwMAorQEAgLTMwLDE3ICszMCwzNCBAQAorIC8qIERvIG5vdCBhc3N1bWUgYW55dGhpbmcgYWJvdXQgaGVhZGVyIGZpbGVzLiAgKi8KKyAjZGVmaW5lIE5PX0lNUExJQ0lUX0VYVEVSTl9DCisgCisrLyoKKysgKiAnY29uZmlnLmdjYycgZGVmaW5lcyBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUIGFzIDEgZm9yIGFybSpiLSoKKysgKiAoYmlnIGVuZGlhbikgY29uZmlndXJhdGlvbnMuCisrICovCisrI2lmIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQKKysjZGVmaW5lIFRBUkdFVF9FTkRJQU5fREVGQVVMVCBBUk1fRkxBR19CSUdfRU5ECisrI2RlZmluZSBUQVJHRVRfRU5ESUFOX09QVElPTiAibWJpZy1lbmRpYW4iCisrI2RlZmluZSBUQVJHRVRfTElOS0VSX0VNVUxBVElPTiAiYXJtZWxmYl9saW51eCIKKysjZWxzZQorKyNkZWZpbmUgVEFSR0VUX0VORElBTl9ERUZBVUxUIDAKKysjZGVmaW5lIFRBUkdFVF9FTkRJQU5fT1BUSU9OICJtbGl0dGxlLWVuZGlhbiIKKysjZGVmaW5lIFRBUkdFVF9MSU5LRVJfRU1VTEFUSU9OICJhcm1lbGZfbGludXgiCisrI2VuZGlmCisrCisgLyogRGVmYXVsdCBpcyB0byB1c2UgQVBDUy0zMiBtb2RlLiAgKi8KKyAjdW5kZWYgIFRBUkdFVF9ERUZBVUxUCistI2RlZmluZSBUQVJHRVRfREVGQVVMVCAoQVJNX0ZMQUdfQVBDU18zMiB8IEFSTV9GTEFHX01NVV9UUkFQUykKKysjZGVmaW5lIFRBUkdFVF9ERUZBVUxUIFwKKysJCSggQVJNX0ZMQUdfQVBDU18zMiB8IFwKKysJCSAgQVJNX0ZMQUdfTU1VX1RSQVBTIHwgXAorKwkJICBUQVJHRVRfRU5ESUFOX0RFRkFVTFQgKQorIAorICNkZWZpbmUgU1VCVEFSR0VUX0NQVV9ERUZBVUxUIFRBUkdFVF9DUFVfYXJtNgorIAorLSNkZWZpbmUgU1VCVEFSR0VUX0VYVFJBX0xJTktfU1BFQyAiIC1tIGFybWVsZl9saW51eCAtcCIKKysjZGVmaW5lIFNVQlRBUkdFVF9FWFRSQV9MSU5LX1NQRUMgIiAtbSAiIFRBUkdFVF9MSU5LRVJfRU1VTEFUSU9OICIgLXAiCisgCisgI3VuZGVmICBNVUxUSUxJQl9ERUZBVUxUUworICNkZWZpbmUgTVVMVElMSUJfREVGQVVMVFMgXAorLQl7ICJtYXJtIiwgIm1saXR0bGUtZW5kaWFuIiwgIm1oYXJkLWZsb2F0IiwgIm1hcGNzLTMyIiwgIm1uby10aHVtYi1pbnRlcndvcmsiIH0KKysJeyAibWFybSIsIFRBUkdFVF9FTkRJQU5fT1BUSU9OLCAibWhhcmQtZmxvYXQiLCAibWFwY3MtMzIiLCAibW5vLXRodW1iLWludGVyd29yayIgfQorIAorICNkZWZpbmUgQ1BQX0FQQ1NfUENfREVGQVVMVF9TUEVDICItRF9fQVBDU18zMl9fIgorIAorQEAgLTk0LDcgKzExMSw3IEBACisgICAgJXtyZHluYW1pYzotZXhwb3J0LWR5bmFtaWN9IFwKKyAgICAleyFkeW5hbWljLWxpbmtlcjotZHluYW1pYy1saW5rZXIgIiBFTEZfRFlOQU1JQ19MSU5LRVIgIn0gXAorICAgIC1YIFwKKy0gICAle21iaWctZW5kaWFuOi1FQn0iIFwKKysgICAle21iaWctZW5kaWFuOi1FQn0gJXttbGl0dGxlLWVuZGlhbjotRUx9IiBcCisgICAgU1VCVEFSR0VUX0VYVFJBX0xJTktfU1BFQworIAorICNkZWZpbmUgVEFSR0VUX09TX0NQUF9CVUlMVElOUygpIExJTlVYX1RBUkdFVF9PU19DUFBfQlVJTFRJTlMoKQorZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnLmdjYyBnY2MtMy40LjYvZ2NjL2NvbmZpZy5nY2MKKy0tLSBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnLmdjYwkyMDA3LTA4LTE1IDIyOjUxOjAxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy0zLjQuNi9nY2MvY29uZmlnLmdjYwkyMDA3LTA4LTE1IDIzOjA1OjQyLjAwMDAwMDAwMCArMDIwMAorQEAgLTY3OCw2ICs2NzgsMTEgQEAKKyAJOzsKKyBhcm0qLSotbGludXgqKQkJCSMgQVJNIEdOVS9MaW51eCB3aXRoIEVMRgorIAl0bV9maWxlPSJkYnhlbGYuaCBlbGZvcy5oIGxpbnV4LmggYXJtL2VsZi5oICBhcm0vbGludXgtZ2FzLmggYXJtL2xpbnV4LWVsZi5oIGFybS9hb3V0LmggYXJtL2FybS5oIgorKwljYXNlICR0YXJnZXQgaW4KKysJYXJtKmItKikKKysJCXRtX2RlZmluZXM9IlRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQ9MSAkdG1fZGVmaW5lcyIKKysJCTs7CisrCWVzYWMKKyAJdG1ha2VfZmlsZT0idC1zbGliZ2NjLWVsZi12ZXIgdC1saW51eCBhcm0vdC1saW51eCIKKyAJZXh0cmFfcGFydHM9ImNydGJlZ2luLm8gY3J0YmVnaW5TLm8gY3J0ZW5kLm8gY3J0ZW5kUy5vIgorIAlnbnVfbGQ9eWVzCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzMuNC42LzIzMC1wb3dlcnBjLWxpYmNfc3RhY2tfZW5kLXVjbGliYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvMy40LjYvMjMwLXBvd2VycGMtbGliY19zdGFja19lbmQtdWNsaWJjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MTk3NGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzMuNC42LzIzMC1wb3dlcnBjLWxpYmNfc3RhY2tfZW5kLXVjbGliYy5wYXRjaApAQCAtMCwwICsxLDE2IEBACitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvcnM2MDAwL2xpbnV4LXVud2luZC5oIGdjYy0zLjQuNi9nY2MvY29uZmlnL3JzNjAwMC9saW51eC11bndpbmQuaAorLS0tIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvcnM2MDAwL2xpbnV4LXVud2luZC5oCTIwMDUtMDMtMTcgMTE6NDE6MTguMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTMuNC42L2djYy9jb25maWcvcnM2MDAwL2xpbnV4LXVud2luZC5oCTIwMDctMDgtMTUgMjM6MDc6MDAuMDAwMDAwMDAwICswMjAwCitAQCAtMzIsNiArMzIsNyBAQAorICAgIHRoZXNlIHN0cnVjdHMgZWxzZXdoZXJlOyAgTWFueSBmaWVsZHMgYXJlIG1pc3NpbmcsIHBhcnRpY3VsYXJseQorICAgIGZyb20gdGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlcy4gICovCisgCisrI2lmbmRlZiBpbmhpYml0X2xpYmMKKyBzdHJ1Y3QgZ2NjX3ZyZWdzCisgeworICAgX19hdHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplICgxNikpKSBpbnQgdnJbMzJdOworQEAgLTMyMCwzICszMjEsNCBAQAorIAkJCQkJCQkJCVwKKyAgICAgZ290byBTVUNDRVNTOwkJCQkJCQlcCisgICB9IHdoaWxlICgwKQorKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy8zLjQuNi8yNDAtbWlwcy14Z290LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy8zLjQuNi8yNDAtbWlwcy14Z290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOTQ2NzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzMuNC42LzI0MC1taXBzLXhnb3QucGF0Y2gKQEAgLTAsMCArMSw3IEBACitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvbWlwcy90LWxpbnV4IGdjYy0zLjQuNi9nY2MvY29uZmlnL21pcHMvdC1saW51eAorLS0tIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvbWlwcy90LWxpbnV4CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTMuNC42L2djYy9jb25maWcvbWlwcy90LWxpbnV4CTIwMDctMDgtMTUgMjM6MDg6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDMgQEAKKysjIENvbXBpbGUgY3J0YmVnaW4vZW5kIHdpdGggeGdvdCBzbyBpdCB3b3JrcyBmb3IgYm90aAorKyMgbm9ybWFsIGFuZCBsYXJnZSBHT1RzLgorK0NSVFNUVUZGX1RfQ0ZMQUdTID0gLW14Z290CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzMuNC42LzI1MC1uaW9zMi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvMy40LjYvMjUwLW5pb3MyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMGNjMTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzMuNC42LzI1MC1uaW9zMi5wYXRjaApAQCAtMCwwICsxLDEwMjMxIEBACitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2djYy9jb21iaW5lLmMgZ2NjLTMuNC42L2djYy9jb21iaW5lLmMKKy0tLSBnY2MtMy40LjYub3JpZy9nY2MvY29tYmluZS5jCTIwMDUtMDgtMDggMjA6NDE6MDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTMuNC42L2djYy9jb21iaW5lLmMJMjAwNy0wOC0xNSAyMzowOTozNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC00MzgxLDYgKzQzODEsMTQgQEAKKyAJCQkJCSBtb2RlKTsKKyAJICAgIH0KKyAKKysjaWZuZGVmIF9fbmlvczJfXworKy8qIFRoaXMgc2NyZXdzIHVwIE5pb3MgSUkgaW4gdGhpcyB0ZXN0IGNhc2U6CisrCisraWYgKHggJiAxKQorKyAgcmV0dXJuIDI7CisrZWxzZQorKyAgcmV0dXJuIDM7CisrKi8KKyAJICBlbHNlIGlmIChTVE9SRV9GTEFHX1ZBTFVFID09IDEKKyAJCSAgICYmIG5ld19jb2RlID09IEVRICYmIEdFVF9NT0RFX0NMQVNTIChtb2RlKSA9PSBNT0RFX0lOVAorIAkJICAgJiYgb3AxID09IGNvbnN0MF9ydHgKK0BAIC00MzkyLDYgKzQ0MDAsNyBAQAorIAkJCQkgZ2VuX2xvd3BhcnRfZm9yX2NvbWJpbmUgKG1vZGUsIG9wMCksCisgCQkJCSBjb25zdDFfcnR4KTsKKyAJICAgIH0KKysjZW5kaWYKKyAKKyAJICBlbHNlIGlmIChTVE9SRV9GTEFHX1ZBTFVFID09IDEKKyAJCSAgICYmIG5ld19jb2RlID09IEVRICYmIEdFVF9NT0RFX0NMQVNTIChtb2RlKSA9PSBNT0RFX0lOVAorZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL25pb3MyL2NydGkuYXNtIGdjYy0zLjQuNi9nY2MvY29uZmlnL25pb3MyL2NydGkuYXNtCistLS0gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9uaW9zMi9jcnRpLmFzbQkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy0zLjQuNi9nY2MvY29uZmlnL25pb3MyL2NydGkuYXNtCTIwMDctMDgtMTUgMjM6MDk6MzYuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDg4IEBACisrLyoKKysgIENvcHlyaWdodCAoQykgMjAwMyAKKysgYnkgSm9uYWggR3JhaGFtIChqZ3JhaGFtQGFsdGVyYS5jb20pCisrCisrVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyt1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKytGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisrbGF0ZXIgdmVyc2lvbi4KKysKKytJbiBhZGRpdGlvbiB0byB0aGUgcGVybWlzc2lvbnMgaW4gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB0aGUKKytGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMgeW91IHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGxpbmsgdGhlCisrY29tcGlsZWQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgd2l0aCBvdGhlciBwcm9ncmFtcywgYW5kIHRvIGRpc3RyaWJ1dGUKKyt0aG9zZSBwcm9ncmFtcyB3aXRob3V0IGFueSByZXN0cmljdGlvbiBjb21pbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMKKytmaWxlLiAgKFRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHJlc3RyaWN0aW9ucyBkbyBhcHBseSBpbiBvdGhlcgorK3Jlc3BlY3RzOyBmb3IgZXhhbXBsZSwgdGhleSBjb3ZlciBtb2RpZmljYXRpb24gb2YgdGhlIGZpbGUsIGFuZAorK2Rpc3RyaWJ1dGlvbiB3aGVuIG5vdCBsaW5rZWQgaW50byBhbm90aGVyIHByb2dyYW0uKQorKworK1RoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKytXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKytHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKythbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCisrdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorK0Jvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKworKyAgIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIGlmIHlvdSBsaW5rIHRoaXMgbGlicmFyeSB3aXRoIGZpbGVzCisrICAgY29tcGlsZWQgd2l0aCBHQ0MgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzIGRvZXMgbm90IGNhdXNlCisrICAgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKyAgIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIgaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkKKysgICB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKworK1RoaXMgZmlsZSBqdXN0IG1ha2UgYSBzdGFjayBmcmFtZSBmb3IgdGhlIGNvbnRlbnRzIG9mIHRoZSAuZmluaSBhbmQKKysuaW5pdCBzZWN0aW9ucy4gIFVzZXJzIG1heSBwdXQgYW55IGRlc2lyZWQgaW5zdHJ1Y3Rpb25zIGluIHRob3NlCisrc2VjdGlvbnMuCisrCisrCisrV2hpbGUgdGVjaG5pY2FsbHkgYW55IGNvZGUgY2FuIGJlIHB1dCBpbiB0aGUgaW5pdCBhbmQgZmluaSBzZWN0aW9ucworK21vc3Qgc3R1ZmYgd2lsbCBub3Qgd29yayBvdGhlciB0aGFuIHN0dWZmIHdoaWNoIG9iZXlzIHRoZSBjYWxsIGZyYW1lCisrYW5kIEFCSS4gQWxsIHRoZSBjYWxsLXByZXNlcnZlZCByZWdpc3RlcnMgYXJlIHNhdmVkLCB0aGUgY2FsbCBjbG9iYmVyZWQKKytyZWdpc3RlcnMgc2hvdWxkIGhhdmUgYmVlbiBzYXZlZCBieSB0aGUgY29kZSBjYWxsaW5nIGluaXQgYW5kIGZpbmkuCisrCisrU2VlIGNydHN0dWZmLmMgZm9yIGFuIGV4YW1wbGUgb2YgY29kZSB0aGF0IGluc2VydHMgaXRzZWxmIGluIHRoZSAKKytpbml0IGFuZCBmaW5pIHNlY3Rpb25zLiAKKysKKytTZWUgY3J0MC5zIGZvciB0aGUgY29kZSB0aGF0IGNhbGxzIGluaXQgYW5kIGZpbmkuCisrKi8KKysKKysJLmZpbGUJImNydGkuYXNtIgorKworKwkuc2VjdGlvbgkiLmluaXQiCisrCS5hbGlnbiAyCisrCS5nbG9iYWwJX2luaXQKKytfaW5pdDoKKysJYWRkaQlzcCwgc3AsIC00OAorKwlzdHcJcmEsIDQ0KHNwKQorKwlzdHcJcjIzLCA0MChzcCkKKysJc3R3CXIyMiwgMzYoc3ApCisrCXN0dwlyMjEsIDMyKHNwKQorKwlzdHcJcjIwLCAyOChzcCkKKysJc3R3CXIxOSwgMjQoc3ApCisrCXN0dwlyMTgsIDIwKHNwKQorKwlzdHcJcjE3LCAxNihzcCkKKysJc3R3CXIxNiwgMTIoc3ApCisrCXN0dwlmcCwgOChzcCkKKysJbW92CWZwLCBzcAorKwkKKysJCisrCS5zZWN0aW9uCSIuZmluaSIKKysJLmFsaWduCTIKKysJLmdsb2JhbAlfZmluaQorK19maW5pOgorKwlhZGRpCXNwLCBzcCwgLTQ4CisrCXN0dwlyYSwgNDQoc3ApCisrCXN0dwlyMjMsIDQwKHNwKQorKwlzdHcJcjIyLCAzNihzcCkKKysJc3R3CXIyMSwgMzIoc3ApCisrCXN0dwlyMjAsIDI4KHNwKQorKwlzdHcJcjE5LCAyNChzcCkKKysJc3R3CXIxOCwgMjAoc3ApCisrCXN0dwlyMTcsIDE2KHNwKQorKwlzdHcJcjE2LCAxMihzcCkKKysJc3R3CWZwLCA4KHNwKQorKwltb3YJZnAsIHNwCisrCQorKworZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL25pb3MyL2NydG4uYXNtIGdjYy0zLjQuNi9nY2MvY29uZmlnL25pb3MyL2NydG4uYXNtCistLS0gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9uaW9zMi9jcnRuLmFzbQkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy0zLjQuNi9nY2MvY29uZmlnL25pb3MyL2NydG4uYXNtCTIwMDctMDgtMTUgMjM6MDk6MzYuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDcwIEBACisrLyoKKysgIENvcHlyaWdodCAoQykgMjAwMyAKKysgYnkgSm9uYWggR3JhaGFtIChqZ3JhaGFtQGFsdGVyYS5jb20pCisrCisrVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyt1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKytGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisrbGF0ZXIgdmVyc2lvbi4KKysKKytJbiBhZGRpdGlvbiB0byB0aGUgcGVybWlzc2lvbnMgaW4gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB0aGUKKytGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMgeW91IHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGxpbmsgdGhlCisrY29tcGlsZWQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgd2l0aCBvdGhlciBwcm9ncmFtcywgYW5kIHRvIGRpc3RyaWJ1dGUKKyt0aG9zZSBwcm9ncmFtcyB3aXRob3V0IGFueSByZXN0cmljdGlvbiBjb21pbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMKKytmaWxlLiAgKFRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHJlc3RyaWN0aW9ucyBkbyBhcHBseSBpbiBvdGhlcgorK3Jlc3BlY3RzOyBmb3IgZXhhbXBsZSwgdGhleSBjb3ZlciBtb2RpZmljYXRpb24gb2YgdGhlIGZpbGUsIGFuZAorK2Rpc3RyaWJ1dGlvbiB3aGVuIG5vdCBsaW5rZWQgaW50byBhbm90aGVyIHByb2dyYW0uKQorKworK1RoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKytXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKytHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKythbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCisrdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorK0Jvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKworKyAgIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIGlmIHlvdSBsaW5rIHRoaXMgbGlicmFyeSB3aXRoIGZpbGVzCisrICAgY29tcGlsZWQgd2l0aCBHQ0MgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzIGRvZXMgbm90IGNhdXNlCisrICAgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKyAgIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIgaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkKKysgICB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKworK1RoaXMgZmlsZSBqdXN0IG1ha2VzIHN1cmUgdGhhdCB0aGUgLmZpbmkgYW5kIC5pbml0IHNlY3Rpb25zIGRvIGluCisrZmFjdCByZXR1cm4uICBVc2VycyBtYXkgcHV0IGFueSBkZXNpcmVkIGluc3RydWN0aW9ucyBpbiB0aG9zZSBzZWN0aW9ucy4KKytUaGlzIGZpbGUgaXMgdGhlIGxhc3QgdGhpbmcgbGlua2VkIGludG8gYW55IGV4ZWN1dGFibGUuCisrKi8JCisrCS5maWxlCSJjcnRuLmFzbSIKKysKKysKKysKKysJLnNlY3Rpb24JIi5pbml0IgorKwlsZHcJcmEsIDQ0KHNwKQorKwlsZHcJcjIzLCA0MChzcCkKKysJbGR3CXIyMiwgMzYoc3ApCisrCWxkdwlyMjEsIDMyKHNwKQorKwlsZHcJcjIwLCAyOChzcCkKKysJbGR3CXIxOSwgMjQoc3ApCisrCWxkdwlyMTgsIDIwKHNwKQorKwlsZHcJcjE3LCAxNihzcCkKKysJbGR3CXIxNiwgMTIoc3ApCisrCWxkdwlmcCwgOChzcCkKKysJYWRkaQlzcCwgc3AsIC00OAorKwlyZXQKKysJCisrCS5zZWN0aW9uCSIuZmluaSIKKysJbGR3CXJhLCA0NChzcCkKKysJbGR3CXIyMywgNDAoc3ApCisrCWxkdwlyMjIsIDM2KHNwKQorKwlsZHcJcjIxLCAzMihzcCkKKysJbGR3CXIyMCwgMjgoc3ApCisrCWxkdwlyMTksIDI0KHNwKQorKwlsZHcJcjE4LCAyMChzcCkKKysJbGR3CXIxNywgMTYoc3ApCisrCWxkdwlyMTYsIDEyKHNwKQorKwlsZHcJZnAsIDgoc3ApCisrCWFkZGkJc3AsIHNwLCAtNDgKKysJcmV0CisrCQorZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL25pb3MyL2xpYjItZGl2bW9kLmMgZ2NjLTMuNC42L2djYy9jb25maWcvbmlvczIvbGliMi1kaXZtb2QuYworLS0tIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvbmlvczIvbGliMi1kaXZtb2QuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy0zLjQuNi9nY2MvY29uZmlnL25pb3MyL2xpYjItZGl2bW9kLmMJMjAwNy0wOC0xNSAyMzowOTozNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTI2IEBACisrCisrLyogV2UgaW5jbHVkZSBhdXRvLWhvc3QuaCBoZXJlIHRvIGdldCBIQVZFX0dBU19ISURERU4uICBUaGlzIGlzCisrICAgc3VwcG9zZWRseSB2YWxpZCBldmVuIHRob3VnaCB0aGlzIGlzIGEgInRhcmdldCIgZmlsZS4gICovCisrI2luY2x1ZGUgImF1dG8taG9zdC5oIgorKworKworKyNpbmNsdWRlICJ0Y29uZmlnLmgiCisrI2luY2x1ZGUgInRzeXN0ZW0uaCIKKysjaW5jbHVkZSAiY29yZXR5cGVzLmgiCisrI2luY2x1ZGUgInRtLmgiCisrCisrCisrLyogRG9uJ3QgdXNlIGBmYW5jeV9hYm9ydCcgaGVyZSBldmVuIGlmIGNvbmZpZy5oIHNheXMgdG8gdXNlIGl0LiAgKi8KKysjaWZkZWYgYWJvcnQKKysjdW5kZWYgYWJvcnQKKysjZW5kaWYKKysKKysKKysjaWZkZWYgSEFWRV9HQVNfSElEREVOCisrI2RlZmluZSBBVFRSSUJVVEVfSElEREVOICBfX2F0dHJpYnV0ZV9fICgoX192aXNpYmlsaXR5X18gKCJoaWRkZW4iKSkpCisrI2Vsc2UKKysjZGVmaW5lIEFUVFJJQlVURV9ISURERU4KKysjZW5kaWYKKysKKysjaW5jbHVkZSAibGliZ2NjMi5oIgorKworK2V4dGVybiBTSXR5cGUgX19tb2RzaTMgKFNJdHlwZSwgU0l0eXBlKTsKKytleHRlcm4gU0l0eXBlIF9fZGl2c2kzIChTSXR5cGUsIFNJdHlwZSk7CisrZXh0ZXJuIFNJdHlwZSBfX3Vtb2RzaTMgKFNJdHlwZSwgU0l0eXBlKTsKKytleHRlcm4gU0l0eXBlIF9fdWRpdnNpMyAoU0l0eXBlLCBTSXR5cGUpOworKworK3N0YXRpYyBVU0l0eXBlIHVkaXZtb2RzaTQoVVNJdHlwZSwgVVNJdHlwZSwgd29yZF90eXBlKTsKKysKKysvKiAxNi1iaXQgU0kgZGl2aWRlIGFuZCBtb2R1bG8gYXMgdXNlZCBpbiBOSU9TICovCisrCisrCisrc3RhdGljIFVTSXR5cGUKKyt1ZGl2bW9kc2k0KFVTSXR5cGUgbnVtLCBVU0l0eXBlIGRlbiwgd29yZF90eXBlIG1vZHdhbnRlZCkKKyt7CisrICBVU0l0eXBlIGJpdCA9IDE7CisrICBVU0l0eXBlIHJlcyA9IDA7CisrCisrICB3aGlsZSAoZGVuIDwgbnVtICYmIGJpdCAmJiAhKGRlbiAmICgxTDw8MzEpKSkKKysgICAgeworKyAgICAgIGRlbiA8PD0xOworKyAgICAgIGJpdCA8PD0xOworKyAgICB9CisrICB3aGlsZSAoYml0KQorKyAgICB7CisrICAgICAgaWYgKG51bSA+PSBkZW4pCisrCXsKKysJICBudW0gLT0gZGVuOworKwkgIHJlcyB8PSBiaXQ7CisrCX0KKysgICAgICBiaXQgPj49MTsKKysgICAgICBkZW4gPj49MTsKKysgICAgfQorKyAgaWYgKG1vZHdhbnRlZCkgcmV0dXJuIG51bTsKKysgIHJldHVybiByZXM7CisrfQorKworKworK1NJdHlwZQorK19fZGl2c2kzIChTSXR5cGUgYSwgU0l0eXBlIGIpCisreworKyAgd29yZF90eXBlIG5lZyA9IDA7CisrICBTSXR5cGUgcmVzOworKworKyAgaWYgKGEgPCAwKQorKyAgICB7CisrICAgICAgYSA9IC1hOworKyAgICAgIG5lZyA9ICFuZWc7CisrICAgIH0KKysKKysgIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIGIgPSAtYjsKKysgICAgICBuZWcgPSAhbmVnOworKyAgICB9CisrCisrICByZXMgPSB1ZGl2bW9kc2k0IChhLCBiLCAwKTsKKysKKysgIGlmIChuZWcpCisrICAgIHJlcyA9IC1yZXM7CisrCisrICByZXR1cm4gcmVzOworK30KKysKKysKKytTSXR5cGUKKytfX21vZHNpMyAoU0l0eXBlIGEsIFNJdHlwZSBiKQorK3sKKysgIHdvcmRfdHlwZSBuZWcgPSAwOworKyAgU0l0eXBlIHJlczsKKysKKysgIGlmIChhIDwgMCkKKysgICAgeworKyAgICAgIGEgPSAtYTsKKysgICAgICBuZWcgPSAxOworKyAgICB9CisrCisrICBpZiAoYiA8IDApCisrICAgIGIgPSAtYjsKKysKKysgIHJlcyA9IHVkaXZtb2RzaTQgKGEsIGIsIDEpOworKworKyAgaWYgKG5lZykKKysgICAgcmVzID0gLXJlczsKKysKKysgIHJldHVybiByZXM7CisrfQorKworKworK1NJdHlwZQorK19fdWRpdnNpMyAoU0l0eXBlIGEsIFNJdHlwZSBiKQorK3sKKysgIHJldHVybiB1ZGl2bW9kc2k0IChhLCBiLCAwKTsKKyt9CisrCisrCisrU0l0eXBlCisrX191bW9kc2kzIChTSXR5cGUgYSwgU0l0eXBlIGIpCisreworKyAgcmV0dXJuIHVkaXZtb2RzaTQgKGEsIGIsIDEpOworK30KKysKK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9uaW9zMi9saWIyLWRpdm1vZC1oaS5jIGdjYy0zLjQuNi9nY2MvY29uZmlnL25pb3MyL2xpYjItZGl2bW9kLWhpLmMKKy0tLSBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL25pb3MyL2xpYjItZGl2bW9kLWhpLmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtMy40LjYvZ2NjL2NvbmZpZy9uaW9zMi9saWIyLWRpdm1vZC1oaS5jCTIwMDctMDgtMTUgMjM6MDk6MzYuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDEyMyBAQAorKworKy8qIFdlIGluY2x1ZGUgYXV0by1ob3N0LmggaGVyZSB0byBnZXQgSEFWRV9HQVNfSElEREVOLiAgVGhpcyBpcworKyAgIHN1cHBvc2VkbHkgdmFsaWQgZXZlbiB0aG91Z2ggdGhpcyBpcyBhICJ0YXJnZXQiIGZpbGUuICAqLworKyNpbmNsdWRlICJhdXRvLWhvc3QuaCIKKysKKysKKysjaW5jbHVkZSAidGNvbmZpZy5oIgorKyNpbmNsdWRlICJ0c3lzdGVtLmgiCisrI2luY2x1ZGUgImNvcmV0eXBlcy5oIgorKyNpbmNsdWRlICJ0bS5oIgorKworKworKy8qIERvbid0IHVzZSBgZmFuY3lfYWJvcnQnIGhlcmUgZXZlbiBpZiBjb25maWcuaCBzYXlzIHRvIHVzZSBpdC4gICovCisrI2lmZGVmIGFib3J0CisrI3VuZGVmIGFib3J0CisrI2VuZGlmCisrCisrCisrI2lmZGVmIEhBVkVfR0FTX0hJRERFTgorKyNkZWZpbmUgQVRUUklCVVRFX0hJRERFTiAgX19hdHRyaWJ1dGVfXyAoKF9fdmlzaWJpbGl0eV9fICgiaGlkZGVuIikpKQorKyNlbHNlCisrI2RlZmluZSBBVFRSSUJVVEVfSElEREVOCisrI2VuZGlmCisrCisrI2luY2x1ZGUgImxpYmdjYzIuaCIKKysKKytleHRlcm4gSEl0eXBlIF9fbW9kaGkzIChISXR5cGUsIEhJdHlwZSk7CisrZXh0ZXJuIEhJdHlwZSBfX2RpdmhpMyAoSEl0eXBlLCBISXR5cGUpOworK2V4dGVybiBISXR5cGUgX191bW9kaGkzIChISXR5cGUsIEhJdHlwZSk7CisrZXh0ZXJuIEhJdHlwZSBfX3VkaXZoaTMgKEhJdHlwZSwgSEl0eXBlKTsKKysKKytzdGF0aWMgVUhJdHlwZSB1ZGl2bW9kaGk0KFVISXR5cGUsIFVISXR5cGUsIHdvcmRfdHlwZSk7CisrCisrc3RhdGljIFVISXR5cGUKKyt1ZGl2bW9kaGk0KFVISXR5cGUgbnVtLCBVSEl0eXBlIGRlbiwgd29yZF90eXBlIG1vZHdhbnRlZCkKKyt7CisrICBVSEl0eXBlIGJpdCA9IDE7CisrICBVSEl0eXBlIHJlcyA9IDA7CisrCisrICB3aGlsZSAoZGVuIDwgbnVtICYmIGJpdCAmJiAhKGRlbiAmICgxTDw8MTUpKSkKKysgICAgeworKyAgICAgIGRlbiA8PD0xOworKyAgICAgIGJpdCA8PD0xOworKyAgICB9CisrICB3aGlsZSAoYml0KQorKyAgICB7CisrICAgICAgaWYgKG51bSA+PSBkZW4pCisrCXsKKysJICBudW0gLT0gZGVuOworKwkgIHJlcyB8PSBiaXQ7CisrCX0KKysgICAgICBiaXQgPj49MTsKKysgICAgICBkZW4gPj49MTsKKysgICAgfQorKyAgaWYgKG1vZHdhbnRlZCkgcmV0dXJuIG51bTsKKysgIHJldHVybiByZXM7CisrfQorKworKworK0hJdHlwZQorK19fZGl2aGkzIChISXR5cGUgYSwgSEl0eXBlIGIpCisreworKyAgd29yZF90eXBlIG5lZyA9IDA7CisrICBISXR5cGUgcmVzOworKworKyAgaWYgKGEgPCAwKQorKyAgICB7CisrICAgICAgYSA9IC1hOworKyAgICAgIG5lZyA9ICFuZWc7CisrICAgIH0KKysKKysgIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIGIgPSAtYjsKKysgICAgICBuZWcgPSAhbmVnOworKyAgICB9CisrCisrICByZXMgPSB1ZGl2bW9kaGk0IChhLCBiLCAwKTsKKysKKysgIGlmIChuZWcpCisrICAgIHJlcyA9IC1yZXM7CisrCisrICByZXR1cm4gcmVzOworK30KKysKKysKKytISXR5cGUKKytfX21vZGhpMyAoSEl0eXBlIGEsIEhJdHlwZSBiKQorK3sKKysgIHdvcmRfdHlwZSBuZWcgPSAwOworKyAgSEl0eXBlIHJlczsKKysKKysgIGlmIChhIDwgMCkKKysgICAgeworKyAgICAgIGEgPSAtYTsKKysgICAgICBuZWcgPSAxOworKyAgICB9CisrCisrICBpZiAoYiA8IDApCisrICAgIGIgPSAtYjsKKysKKysgIHJlcyA9IHVkaXZtb2RoaTQgKGEsIGIsIDEpOworKworKyAgaWYgKG5lZykKKysgICAgcmVzID0gLXJlczsKKysKKysgIHJldHVybiByZXM7CisrfQorKworKworK0hJdHlwZQorK19fdWRpdmhpMyAoSEl0eXBlIGEsIEhJdHlwZSBiKQorK3sKKysgIHJldHVybiB1ZGl2bW9kaGk0IChhLCBiLCAwKTsKKyt9CisrCisrCisrSEl0eXBlCisrX191bW9kaGkzIChISXR5cGUgYSwgSEl0eXBlIGIpCisreworKyAgcmV0dXJuIHVkaXZtb2RoaTQgKGEsIGIsIDEpOworK30KKysKK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9uaW9zMi9saWIyLWRpdnRhYmxlLmMgZ2NjLTMuNC42L2djYy9jb25maWcvbmlvczIvbGliMi1kaXZ0YWJsZS5jCistLS0gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9uaW9zMi9saWIyLWRpdnRhYmxlLmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtMy40LjYvZ2NjL2NvbmZpZy9uaW9zMi9saWIyLWRpdnRhYmxlLmMJMjAwNy0wOC0xNSAyMzowOTozNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNDYgQEAKKysKKysvKiBXZSBpbmNsdWRlIGF1dG8taG9zdC5oIGhlcmUgdG8gZ2V0IEhBVkVfR0FTX0hJRERFTi4gIFRoaXMgaXMKKysgICBzdXBwb3NlZGx5IHZhbGlkIGV2ZW4gdGhvdWdoIHRoaXMgaXMgYSAidGFyZ2V0IiBmaWxlLiAgKi8KKysjaW5jbHVkZSAiYXV0by1ob3N0LmgiCisrCisrCisrI2luY2x1ZGUgInRjb25maWcuaCIKKysjaW5jbHVkZSAidHN5c3RlbS5oIgorKyNpbmNsdWRlICJjb3JldHlwZXMuaCIKKysjaW5jbHVkZSAidG0uaCIKKysKKysKKysvKiBEb24ndCB1c2UgYGZhbmN5X2Fib3J0JyBoZXJlIGV2ZW4gaWYgY29uZmlnLmggc2F5cyB0byB1c2UgaXQuICAqLworKyNpZmRlZiBhYm9ydAorKyN1bmRlZiBhYm9ydAorKyNlbmRpZgorKworKworKyNpZmRlZiBIQVZFX0dBU19ISURERU4KKysjZGVmaW5lIEFUVFJJQlVURV9ISURERU4gIF9fYXR0cmlidXRlX18gKChfX3Zpc2liaWxpdHlfXyAoImhpZGRlbiIpKSkKKysjZWxzZQorKyNkZWZpbmUgQVRUUklCVVRFX0hJRERFTgorKyNlbmRpZgorKworKyNpbmNsdWRlICJsaWJnY2MyLmgiCisrCisrVVFJdHlwZSBfX2RpdnNpM190YWJsZVtdID0KKyt7CisrICAwLCAwLzEsIDAvMiwgMC8zLCAwLzQsIDAvNSwgMC82LCAwLzcsIDAvOCwgMC85LCAwLzEwLCAwLzExLCAwLzEyLCAwLzEzLCAwLzE0LCAwLzE1LAorKyAgMCwgMS8xLCAxLzIsIDEvMywgMS80LCAxLzUsIDEvNiwgMS83LCAxLzgsIDEvOSwgMS8xMCwgMS8xMSwgMS8xMiwgMS8xMywgMS8xNCwgMS8xNSwKKysgIDAsIDIvMSwgMi8yLCAyLzMsIDIvNCwgMi81LCAyLzYsIDIvNywgMi84LCAyLzksIDIvMTAsIDIvMTEsIDIvMTIsIDIvMTMsIDIvMTQsIDIvMTUsCisrICAwLCAzLzEsIDMvMiwgMy8zLCAzLzQsIDMvNSwgMy82LCAzLzcsIDMvOCwgMy85LCAzLzEwLCAzLzExLCAzLzEyLCAzLzEzLCAzLzE0LCAzLzE1LAorKyAgMCwgNC8xLCA0LzIsIDQvMywgNC80LCA0LzUsIDQvNiwgNC83LCA0LzgsIDQvOSwgNC8xMCwgNC8xMSwgNC8xMiwgNC8xMywgNC8xNCwgNC8xNSwKKysgIDAsIDUvMSwgNS8yLCA1LzMsIDUvNCwgNS81LCA1LzYsIDUvNywgNS84LCA1LzksIDUvMTAsIDUvMTEsIDUvMTIsIDUvMTMsIDUvMTQsIDUvMTUsCisrICAwLCA2LzEsIDYvMiwgNi8zLCA2LzQsIDYvNSwgNi82LCA2LzcsIDYvOCwgNi85LCA2LzEwLCA2LzExLCA2LzEyLCA2LzEzLCA2LzE0LCA2LzE1LAorKyAgMCwgNy8xLCA3LzIsIDcvMywgNy80LCA3LzUsIDcvNiwgNy83LCA3LzgsIDcvOSwgNy8xMCwgNy8xMSwgNy8xMiwgNy8xMywgNy8xNCwgNy8xNSwKKysgIDAsIDgvMSwgOC8yLCA4LzMsIDgvNCwgOC81LCA4LzYsIDgvNywgOC84LCA4LzksIDgvMTAsIDgvMTEsIDgvMTIsIDgvMTMsIDgvMTQsIDgvMTUsCisrICAwLCA5LzEsIDkvMiwgOS8zLCA5LzQsIDkvNSwgOS82LCA5LzcsIDkvOCwgOS85LCA5LzEwLCA5LzExLCA5LzEyLCA5LzEzLCA5LzE0LCA5LzE1LAorKyAgMCwgMTAvMSwgMTAvMiwgMTAvMywgMTAvNCwgMTAvNSwgMTAvNiwgMTAvNywgMTAvOCwgMTAvOSwgMTAvMTAsIDEwLzExLCAxMC8xMiwgMTAvMTMsIDEwLzE0LCAxMC8xNSwKKysgIDAsIDExLzEsIDExLzIsIDExLzMsIDExLzQsIDExLzUsIDExLzYsIDExLzcsIDExLzgsIDExLzksIDExLzEwLCAxMS8xMSwgMTEvMTIsIDExLzEzLCAxMS8xNCwgMTEvMTUsCisrICAwLCAxMi8xLCAxMi8yLCAxMi8zLCAxMi80LCAxMi81LCAxMi82LCAxMi83LCAxMi84LCAxMi85LCAxMi8xMCwgMTIvMTEsIDEyLzEyLCAxMi8xMywgMTIvMTQsIDEyLzE1LAorKyAgMCwgMTMvMSwgMTMvMiwgMTMvMywgMTMvNCwgMTMvNSwgMTMvNiwgMTMvNywgMTMvOCwgMTMvOSwgMTMvMTAsIDEzLzExLCAxMy8xMiwgMTMvMTMsIDEzLzE0LCAxMy8xNSwKKysgIDAsIDE0LzEsIDE0LzIsIDE0LzMsIDE0LzQsIDE0LzUsIDE0LzYsIDE0LzcsIDE0LzgsIDE0LzksIDE0LzEwLCAxNC8xMSwgMTQvMTIsIDE0LzEzLCAxNC8xNCwgMTQvMTUsCisrICAwLCAxNS8xLCAxNS8yLCAxNS8zLCAxNS80LCAxNS81LCAxNS82LCAxNS83LCAxNS84LCAxNS85LCAxNS8xMCwgMTUvMTEsIDE1LzEyLCAxNS8xMywgMTUvMTQsIDE1LzE1LAorK307CisrCitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvbmlvczIvbGliMi1tdWwuYyBnY2MtMy40LjYvZ2NjL2NvbmZpZy9uaW9zMi9saWIyLW11bC5jCistLS0gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9uaW9zMi9saWIyLW11bC5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTMuNC42L2djYy9jb25maWcvbmlvczIvbGliMi1tdWwuYwkyMDA3LTA4LTE1IDIzOjA5OjM2LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxMDMgQEAKKysvKiB3aGlsZSB3ZSBhcmUgZGVidWdnaW5nIChpZSBjb21waWxlIG91dHNpZGUgb2YgZ2NjIGJ1aWxkKSAKKysgICBkaXNhYmxlIGdjYyBzcGVjaWZpYyBoZWFkZXJzICovCisrI2lmbmRlZiBERUJVR19NVUxTSTMKKysKKysKKysvKiBXZSBpbmNsdWRlIGF1dG8taG9zdC5oIGhlcmUgdG8gZ2V0IEhBVkVfR0FTX0hJRERFTi4gIFRoaXMgaXMKKysgICBzdXBwb3NlZGx5IHZhbGlkIGV2ZW4gdGhvdWdoIHRoaXMgaXMgYSAidGFyZ2V0IiBmaWxlLiAgKi8KKysjaW5jbHVkZSAiYXV0by1ob3N0LmgiCisrCisrCisrI2luY2x1ZGUgInRjb25maWcuaCIKKysjaW5jbHVkZSAidHN5c3RlbS5oIgorKyNpbmNsdWRlICJjb3JldHlwZXMuaCIKKysjaW5jbHVkZSAidG0uaCIKKysKKysKKysvKiBEb24ndCB1c2UgYGZhbmN5X2Fib3J0JyBoZXJlIGV2ZW4gaWYgY29uZmlnLmggc2F5cyB0byB1c2UgaXQuICAqLworKyNpZmRlZiBhYm9ydAorKyN1bmRlZiBhYm9ydAorKyNlbmRpZgorKworKworKyNpZmRlZiBIQVZFX0dBU19ISURERU4KKysjZGVmaW5lIEFUVFJJQlVURV9ISURERU4gIF9fYXR0cmlidXRlX18gKChfX3Zpc2liaWxpdHlfXyAoImhpZGRlbiIpKSkKKysjZWxzZQorKyNkZWZpbmUgQVRUUklCVVRFX0hJRERFTgorKyNlbmRpZgorKworKyNpbmNsdWRlICJsaWJnY2MyLmgiCisrCisrI2Vsc2UKKysjZGVmaW5lIFNJdHlwZSBpbnQKKysjZGVmaW5lIFVTSXR5cGUgdW5zaWduZWQgaW50CisrI2VuZGlmCisrCisrCisrZXh0ZXJuIFNJdHlwZSBfX211bHNpMyAoU0l0eXBlLCBTSXR5cGUpOworKworK1NJdHlwZQorK19fbXVsc2kzIChTSXR5cGUgYSwgU0l0eXBlIGIpCisreworKyAgU0l0eXBlIHJlcyA9IDA7CisrICBVU0l0eXBlIGNudCA9IGE7CisrICAKKysgIHdoaWxlIChjbnQpCisrICAgIHsKKysgICAgICBpZiAoY250ICYgMSkKKysgICAgICAgIHsKKysJICByZXMgKz0gYjsJICAKKysJfQorKyAgICAgIGIgPDw9IDE7CisrICAgICAgY250ID4+PSAxOworKyAgICB9CisrICAgIAorKyAgcmV0dXJuIHJlczsKKyt9CisrLyoKKytUT0RPOiBDaG9vc2UgYmVzdCBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbi4KKysKKytTSXR5cGUKKytfX2RpdnNpMyAoU0l0eXBlIGEsIFNJdHlwZSBiKQorK3sKKysgIFNJdHlwZSByZXMgPSAwOworKyAgVVNJdHlwZSBjbnQgPSAwOworKyAgCisrICB3aGlsZSAoY250IDwgMzIpCisrICAgIHsKKysgICAgICBpZiAoYSAmICgxTCA8PCBjbnQpKQorKyAgICAgICAgeworKwkgIHJlcyArPSBiOwkgIAorKwl9CisrICAgICAgYiA8PD0gMTsKKysgICAgICBjbnQrKzsKKysgICAgfQorKyAgICAKKysgIHJldHVybiByZXM7CisrfQorKyovCisrCisrCisrI2lmZGVmIERFQlVHX01VTFNJMworKworK2ludAorK21haW4gKCkKKyt7CisrICBpbnQgaSwgajsKKysgIGludCBlcnJvciA9IDA7CisrICAKKysgIGZvciAoaSA9IC0xMDAwOyBpIDwgMTAwMDsgaSsrKQorKyAgICBmb3IgKGogPSAtMTAwMDsgaiA8IDEwMDA7IGorKykKKysgICAgICB7CisrCWludCBleHBlY3QgPSBpICogajsKKysJaW50IGFjdHVhbCA9IEFfX2RpdnNpMyAoaSwgaik7CisrCWlmIChleHBlY3QgIT0gYWN0dWFsKQorKwkgIHsKKysJICAgIHByaW50ZiAoImVycm9yOiAlZCAqICVkID0gJWQgbm90ICVkXG4iLCBpLCBqLCBleHBlY3QsIGFjdHVhbCk7CisrCSAgICBlcnJvciA9IDE7CisrCSAgfQorKyAgICAgIH0KKysKKysgIHJldHVybiBlcnJvcjsKKyt9CisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvbmlvczIvbmlvczIuYyBnY2MtMy40LjYvZ2NjL2NvbmZpZy9uaW9zMi9uaW9zMi5jCistLS0gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9uaW9zMi9uaW9zMi5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTMuNC42L2djYy9jb25maWcvbmlvczIvbmlvczIuYwkyMDA3LTA4LTE1IDIzOjA5OjM2LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwyODUzIEBACisrLyogU3Vicm91dGluZXMgZm9yIGFzc2VtYmxlciBjb2RlIG91dHB1dCBmb3IgQWx0ZXJhIE5JT1MgMkcgTklPUzIgdmVyc2lvbi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDMgQWx0ZXJhCisrICAgQ29udHJpYnV0ZWQgYnkgSm9uYWggR3JhaGFtIChqZ3JhaGFtQGFsdGVyYS5jb20pLgorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBDQy4KKysKKytHTlUgQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorK2FueSBsYXRlciB2ZXJzaW9uLgorKworK0dOVSBDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKythbG9uZyB3aXRoIEdOVSBDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCisrdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorK0Jvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSAiY29uZmlnLmgiCisrI2luY2x1ZGUgInN5c3RlbS5oIgorKyNpbmNsdWRlICJjb3JldHlwZXMuaCIKKysjaW5jbHVkZSAidG0uaCIKKysjaW5jbHVkZSAicnRsLmgiCisrI2luY2x1ZGUgInRyZWUuaCIKKysjaW5jbHVkZSAidG1fcC5oIgorKyNpbmNsdWRlICJyZWdzLmgiCisrI2luY2x1ZGUgImhhcmQtcmVnLXNldC5oIgorKyNpbmNsdWRlICJyZWFsLmgiCisrI2luY2x1ZGUgImluc24tY29uZmlnLmgiCisrI2luY2x1ZGUgImNvbmRpdGlvbnMuaCIKKysjaW5jbHVkZSAib3V0cHV0LmgiCisrI2luY2x1ZGUgImluc24tYXR0ci5oIgorKyNpbmNsdWRlICJmbGFncy5oIgorKyNpbmNsdWRlICJyZWNvZy5oIgorKyNpbmNsdWRlICJleHByLmgiCisrI2luY2x1ZGUgInRvcGxldi5oIgorKyNpbmNsdWRlICJiYXNpYy1ibG9jay5oIgorKyNpbmNsdWRlICJmdW5jdGlvbi5oIgorKyNpbmNsdWRlICJnZ2MuaCIKKysjaW5jbHVkZSAicmVsb2FkLmgiCisrI2luY2x1ZGUgImRlYnVnLmgiCisrI2luY2x1ZGUgIm9wdGFicy5oIgorKyNpbmNsdWRlICJ0YXJnZXQuaCIKKysjaW5jbHVkZSAidGFyZ2V0LWRlZi5oIgorKworKy8qIGxvY2FsIHByb3RvdHlwZXMgKi8KKytzdGF0aWMgYm9vbCBuaW9zMl9ydHhfY29zdHMgKHJ0eCwgaW50LCBpbnQsIGludCAqKTsKKysKKytzdGF0aWMgdm9pZCBuaW9zMl9hc21fZnVuY3Rpb25fcHJvbG9ndWUgKEZJTEUgKiwgSE9TVF9XSURFX0lOVCk7Cisrc3RhdGljIGludCBuaW9zMl91c2VfZGZhX3BpcGVsaW5lX2ludGVyZmFjZSAodm9pZCk7Cisrc3RhdGljIGludCBuaW9zMl9pc3N1ZV9yYXRlICh2b2lkKTsKKytzdGF0aWMgc3RydWN0IG1hY2hpbmVfZnVuY3Rpb24gKm5pb3MyX2luaXRfbWFjaGluZV9zdGF0dXMgKHZvaWQpOworK3N0YXRpYyBib29sIG5pb3MyX2luX3NtYWxsX2RhdGFfcCAodHJlZSk7Cisrc3RhdGljIHJ0eCBzYXZlX3JlZyAoaW50LCBIT1NUX1dJREVfSU5ULCBydHgpOworK3N0YXRpYyBydHggcmVzdG9yZV9yZWcgKGludCwgSE9TVF9XSURFX0lOVCk7Cisrc3RhdGljIHVuc2lnbmVkIGludCBuaW9zMl9zZWN0aW9uX3R5cGVfZmxhZ3MgKHRyZWUsIGNvbnN0IGNoYXIgKiwgaW50KTsKKytzdGF0aWMgdm9pZCBuaW9zMl9pbml0X2J1aWx0aW5zICh2b2lkKTsKKytzdGF0aWMgcnR4IG5pb3MyX2V4cGFuZF9idWlsdGluICh0cmVlLCBydHgsIHJ0eCwgZW51bSBtYWNoaW5lX21vZGUsIGludCk7Cisrc3RhdGljIGJvb2wgbmlvczJfZnVuY3Rpb25fb2tfZm9yX3NpYmNhbGwgKHRyZWUsIHRyZWUpOworK3N0YXRpYyB2b2lkIG5pb3MyX2VuY29kZV9zZWN0aW9uX2luZm8gKHRyZWUsIHJ0eCwgaW50KTsKKysKKysvKiBJbml0aWFsaXplIHRoZSBHQ0MgdGFyZ2V0IHN0cnVjdHVyZS4gICovCisrI3VuZGVmIFRBUkdFVF9BU01fRlVOQ1RJT05fUFJPTE9HVUUKKysjZGVmaW5lIFRBUkdFVF9BU01fRlVOQ1RJT05fUFJPTE9HVUUgbmlvczJfYXNtX2Z1bmN0aW9uX3Byb2xvZ3VlCisrCisrI3VuZGVmIFRBUkdFVF9TQ0hFRF9VU0VfREZBX1BJUEVMSU5FX0lOVEVSRkFDRQorKyNkZWZpbmUgVEFSR0VUX1NDSEVEX1VTRV9ERkFfUElQRUxJTkVfSU5URVJGQUNFIFwKKysgbmlvczJfdXNlX2RmYV9waXBlbGluZV9pbnRlcmZhY2UKKysjdW5kZWYgVEFSR0VUX1NDSEVEX0lTU1VFX1JBVEUKKysjZGVmaW5lIFRBUkdFVF9TQ0hFRF9JU1NVRV9SQVRFIG5pb3MyX2lzc3VlX3JhdGUKKysjdW5kZWYgVEFSR0VUX0lOX1NNQUxMX0RBVEFfUAorKyNkZWZpbmUgVEFSR0VUX0lOX1NNQUxMX0RBVEFfUCBuaW9zMl9pbl9zbWFsbF9kYXRhX3AKKysjdW5kZWYgIFRBUkdFVF9FTkNPREVfU0VDVElPTl9JTkZPCisrI2RlZmluZSBUQVJHRVRfRU5DT0RFX1NFQ1RJT05fSU5GTyBuaW9zMl9lbmNvZGVfc2VjdGlvbl9pbmZvCisrI3VuZGVmICBUQVJHRVRfU0VDVElPTl9UWVBFX0ZMQUdTCisrI2RlZmluZSBUQVJHRVRfU0VDVElPTl9UWVBFX0ZMQUdTICBuaW9zMl9zZWN0aW9uX3R5cGVfZmxhZ3MKKysKKysjdW5kZWYgVEFSR0VUX0lOSVRfQlVJTFRJTlMKKysjZGVmaW5lIFRBUkdFVF9JTklUX0JVSUxUSU5TIG5pb3MyX2luaXRfYnVpbHRpbnMKKysjdW5kZWYgVEFSR0VUX0VYUEFORF9CVUlMVElOCisrI2RlZmluZSBUQVJHRVRfRVhQQU5EX0JVSUxUSU4gbmlvczJfZXhwYW5kX2J1aWx0aW4KKysKKysjdW5kZWYgVEFSR0VUX0ZVTkNUSU9OX09LX0ZPUl9TSUJDQUxMCisrI2RlZmluZSBUQVJHRVRfRlVOQ1RJT05fT0tfRk9SX1NJQkNBTEwgbmlvczJfZnVuY3Rpb25fb2tfZm9yX3NpYmNhbGwKKysKKysjdW5kZWYgVEFSR0VUX1JUWF9DT1NUUworKyNkZWZpbmUgVEFSR0VUX1JUWF9DT1NUUyBuaW9zMl9ydHhfY29zdHMKKysKKysKKytzdHJ1Y3QgZ2NjX3RhcmdldCB0YXJnZXRtID0gVEFSR0VUX0lOSVRJQUxJWkVSOworKwwKKysKKysKKysvKiBUaHJlc2hvbGQgZm9yIGRhdGEgYmVpbmcgcHV0IGludG8gdGhlIHNtYWxsIGRhdGEvYnNzIGFyZWEsIGluc3RlYWQKKysgICBvZiB0aGUgbm9ybWFsIGRhdGEgYXJlYSAocmVmZXJlbmNlcyB0byB0aGUgc21hbGwgZGF0YS9ic3MgYXJlYSB0YWtlCisrICAgMSBpbnN0cnVjdGlvbiwgYW5kIHVzZSB0aGUgZ2xvYmFsIHBvaW50ZXIsIHJlZmVyZW5jZXMgdG8gdGhlIG5vcm1hbAorKyAgIGRhdGEgYXJlYSB0YWtlcyAyIGluc3RydWN0aW9ucykuICAqLworK3Vuc2lnbmVkIEhPU1RfV0lERV9JTlQgbmlvczJfc2VjdGlvbl90aHJlc2hvbGQgPSBOSU9TMl9ERUZBVUxUX0dWQUxVRTsKKysKKysKKysvKiBTdHJ1Y3R1cmUgdG8gYmUgZmlsbGVkIGluIGJ5IGNvbXB1dGVfZnJhbWVfc2l6ZSB3aXRoIHJlZ2lzdGVyCisrICAgc2F2ZSBtYXNrcywgYW5kIG9mZnNldHMgZm9yIHRoZSBjdXJyZW50IGZ1bmN0aW9uLiAgKi8KKysKKytzdHJ1Y3QgbmlvczJfZnJhbWVfaW5mbworK0dUWSAoKCkpCisreworKyAgbG9uZyB0b3RhbF9zaXplOwkJLyogIyBieXRlcyB0aGF0IHRoZSBlbnRpcmUgZnJhbWUgdGFrZXMgdXAgKi8KKysgIGxvbmcgdmFyX3NpemU7CQkvKiAjIGJ5dGVzIHRoYXQgdmFyaWFibGVzIHRha2UgdXAgKi8KKysgIGxvbmcgYXJnc19zaXplOwkJLyogIyBieXRlcyB0aGF0IG91dGdvaW5nIGFyZ3VtZW50cyB0YWtlIHVwICovCisrICBpbnQgc2F2ZV9yZWdfc2l6ZTsJCS8qICMgYnl0ZXMgbmVlZGVkIHRvIHN0b3JlIGdwIHJlZ3MgKi8KKysgIGludCBzYXZlX3JlZ19yb3VuZGVkOwkJLyogIyBieXRlcyBuZWVkZWQgdG8gc3RvcmUgZ3AgcmVncyAqLworKyAgbG9uZyBzYXZlX3JlZ3Nfb2Zmc2V0OwkvKiBvZmZzZXQgZnJvbSBuZXcgc3AgdG8gc3RvcmUgZ3AgcmVnaXN0ZXJzICovCisrICBpbnQgaW5pdGlhbGl6ZWQ7CQkvKiAhPSAwIGlmIGZyYW1lIHNpemUgYWxyZWFkeSBjYWxjdWxhdGVkICovCisrICBpbnQgbnVtX3JlZ3M7CQkJLyogbnVtYmVyIG9mIGdwIHJlZ2lzdGVycyBzYXZlZCAqLworK307CisrCisrc3RydWN0IG1hY2hpbmVfZnVuY3Rpb24KKytHVFkgKCgpKQorK3sKKysKKysgIC8qIEN1cnJlbnQgZnJhbWUgaW5mb3JtYXRpb24sIGNhbGN1bGF0ZWQgYnkgY29tcHV0ZV9mcmFtZV9zaXplLiAgKi8KKysgIHN0cnVjdCBuaW9zMl9mcmFtZV9pbmZvIGZyYW1lOworK307CisrDAorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysgKiBTZWN0aW9uIGVuY29kaW5ncworKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrDAorKworKworKworKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysgKiBTdGFjayBMYXlvdXQgYW5kIENhbGxpbmcgQ29udmVudGlvbnMKKysgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworKworKyNkZWZpbmUgVE9PX0JJR19PRkZTRVQoWCkgKChYKSA+ICgoMSA8PCAxNSkgLSAxKSkKKysjZGVmaW5lIFRFTVBfUkVHX05VTSA4CisrCisrc3RhdGljIHZvaWQKKytuaW9zMl9hc21fZnVuY3Rpb25fcHJvbG9ndWUgKEZJTEUgKmZpbGUsIEhPU1RfV0lERV9JTlQgc2l6ZSBBVFRSSUJVVEVfVU5VU0VEKQorK3sKKysgIGlmIChmbGFnX3ZlcmJvc2VfYXNtIHx8IGZsYWdfZGVidWdfYXNtKQorKyAgICB7CisrICAgICAgY29tcHV0ZV9mcmFtZV9zaXplICgpOworKyAgICAgIGR1bXBfZnJhbWVfc2l6ZSAoZmlsZSk7CisrICAgIH0KKyt9CisrCisrc3RhdGljIHJ0eAorK3NhdmVfcmVnIChpbnQgcmVnbm8sIEhPU1RfV0lERV9JTlQgb2Zmc2V0LCBydHggY2ZhX3N0b3JlX3JlZykKKyt7CisrICBydHggaW5zbiwgc3RhY2tfc2xvdDsKKysKKysgIHN0YWNrX3Nsb3QgPSBnZW5fcnR4X1BMVVMgKFNJbW9kZSwKKysJCQkgICAgIGNmYV9zdG9yZV9yZWcsCisrCQkJICAgICBHRU5fSU5UIChvZmZzZXQpKTsKKysKKysgIGluc24gPSBlbWl0X2luc24gKGdlbl9ydHhfU0VUIChTSW1vZGUsCisrCQkJCSBnZW5fcnR4X01FTSAoU0ltb2RlLCBzdGFja19zbG90KSwKKysJCQkJIGdlbl9ydHhfUkVHIChTSW1vZGUsIHJlZ25vKSkpOworKworKyAgUlRYX0ZSQU1FX1JFTEFURURfUCAoaW5zbikgPSAxOworKworKyAgcmV0dXJuIGluc247CisrfQorKworK3N0YXRpYyBydHgKKytyZXN0b3JlX3JlZyAoaW50IHJlZ25vLCBIT1NUX1dJREVfSU5UIG9mZnNldCkKKyt7CisrICBydHggaW5zbiwgc3RhY2tfc2xvdDsKKysKKysgIGlmIChUT09fQklHX09GRlNFVCAob2Zmc2V0KSkKKysgICAgeworKyAgICAgIHN0YWNrX3Nsb3QgPSBnZW5fcnR4X1JFRyAoU0ltb2RlLCBURU1QX1JFR19OVU0pOworKyAgICAgIGluc24gPSBlbWl0X2luc24gKGdlbl9ydHhfU0VUIChTSW1vZGUsCisrCQkJCSAgICAgc3RhY2tfc2xvdCwKKysJCQkJICAgICBHRU5fSU5UIChvZmZzZXQpKSk7CisrCisrICAgICAgaW5zbiA9IGVtaXRfaW5zbiAoZ2VuX3J0eF9TRVQgKFNJbW9kZSwKKysJCQkJICAgICBzdGFja19zbG90LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5fcnR4X1BMVVMgKFNJbW9kZSwKKysJCQkJICAgICAgICAgICAgICAgICAgIHN0YWNrX3Nsb3QsCisrCQkJCSAgICAgICAgICAgICAgICAgICBzdGFja19wb2ludGVyX3J0eCkpKTsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgc3RhY2tfc2xvdCA9IGdlbl9ydHhfUExVUyAoU0ltb2RlLAorKwkJCSAgICAgICAgIHN0YWNrX3BvaW50ZXJfcnR4LAorKwkJCQkgR0VOX0lOVCAob2Zmc2V0KSk7CisrICAgIH0KKysKKysgIHN0YWNrX3Nsb3QgPSBnZW5fcnR4X01FTSAoU0ltb2RlLCBzdGFja19zbG90KTsKKysKKysgIGluc24gPSBlbWl0X21vdmVfaW5zbiAoZ2VuX3J0eF9SRUcgKFNJbW9kZSwgcmVnbm8pLCBzdGFja19zbG90KTsKKysKKysgIHJldHVybiBpbnNuOworK30KKysKKysKKysvKiBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIHBhdGhzIGZvciBwcm9sb2d1ZSBleHBhbnNpb24sCisrLSB0aGUgZmlyc3QgaXMgaWYgdGhlIHRvdGFsIGZyYW1lIHNpemUgaXMgPCAyXjE1LTEuIEluIHRoYXQKKytjYXNlIGFsbCB0aGUgaW1tZWRpYXRlcyB3aWxsIGZpdCBpbnRvIHRoZSAxNi1iaXQgaW1tZWRpYXRlCisrZmllbGRzLgorKy0gdGhlIHNlY29uZCBpcyB3aGVuIHRoZSBmcmFtZSBzaXplIGlzIHRvbyBiaWcsIGluIHRoYXQKKytjYXNlIGFuIGFkZGl0aW9uYWwgdGVtcG9yYXJ5IHJlZ2lzdGVyIGlzIHVzZWQsIGZpcnN0IAorK2FzIGEgY2ZhX3RlbXAgdG8gb2Zmc2V0IHRoZSBzcCwgc2Vjb25kIGFzIHRoZSBjZmFfc3RvcmUKKytyZWdpc3Rlci4KKysKKytTZWUgdGhlIGNvbW1lbnQgYWJvdmUgZHdhcmYyb3V0X2ZyYW1lX2RlYnVnX2V4cHIgaW4gCisrZHdhcmYyb3V0LmMgZm9yIG1vcmUgZXhwbGFuYXRpb24gb2YgdGhlICJydWxlcy4iCisrCisrCisrQ2FzZSAxOgorK1J1bGUgIyAgRXhhbXBsZSBJbnNuICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3QKKysyICAJYWRkaQlzcCwgc3AsIC10b3RhbF9mcmFtZV9zaXplICBjZmEucmVnPXNwLCBjZmEub2Zmc2V0PXRvdGFsX2ZyYW1lX3NpemUKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZhX3N0b3JlLnJlZz1zcCwgY2ZhX3N0b3JlLm9mZnNldD10b3RhbF9mcmFtZV9zaXplCisrMTIgIAlzdHcJcmEsIG9mZnNldChzcCkJCSAgIAorKzEyICAJc3R3CXIxNiwgb2Zmc2V0KHNwKQorKzEgIAltb3YJZnAsIHNwCisrICAKKytDYXNlIDI6IAorK1J1bGUgIyAgRXhhbXBsZSBJbnNuICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3QKKys2IAltb3ZpCXI4LCB0b3RhbF9mcmFtZV9zaXplICAgICAgIGNmYV90ZW1wLnJlZz1yOCwgY2ZhX3RlbXAub2Zmc2V0PXRvdGFsX2ZyYW1lX3NpemUKKysyICAJc3ViCXNwLCBzcCwgcjggICAgICAgICAgICAgICAgIGNmYS5yZWc9c3AsIGNmYS5vZmZzZXQ9dG90YWxfZnJhbWVfc2l6ZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmFfc3RvcmUucmVnPXNwLCBjZmFfc3RvcmUub2Zmc2V0PXRvdGFsX2ZyYW1lX3NpemUKKys1ICAgCWFkZAlyOCwgcjgsIHNwICAgICAgICAgICAgICAgICBjZmFfc3RvcmUucmVnPXI4LCBjZmFfc3RvcmUub2Zmc2V0PTAKKysxMiAgCXN0dwlyYSwgb2Zmc2V0KHI4KQorKzEyICAJc3R3CXIxNiwgb2Zmc2V0KHI4KQorKzEgIAltb3YJZnAsIHNwCisrCisrKi8KKysKKyt2b2lkCisrZXhwYW5kX3Byb2xvZ3VlICgpCisreworKyAgaW50IGk7CisrICBIT1NUX1dJREVfSU5UIHRvdGFsX2ZyYW1lX3NpemU7CisrICBpbnQgY2ZhX3N0b3JlX29mZnNldDsKKysgIHJ0eCBpbnNuOworKyAgcnR4IGNmYV9zdG9yZV9yZWcgPSAwOworKworKyAgdG90YWxfZnJhbWVfc2l6ZSA9IGNvbXB1dGVfZnJhbWVfc2l6ZSAoKTsKKysKKysgIGlmICh0b3RhbF9mcmFtZV9zaXplKQorKyAgICB7CisrCisrICAgICAgaWYgKFRPT19CSUdfT0ZGU0VUICh0b3RhbF9mcmFtZV9zaXplKSkgCisrCXsKKysJICAgIC8qIGNmYV90ZW1wIGFuZCBjZmFfc3RvcmVfcmVnIGFyZSB0aGUgc2FtZSByZWdpc3RlciwKKysJICAgICAgIGNmYV9zdG9yZV9yZWcgb3ZlcndyaXRlcyBjZmFfdGVtcCAqLworKwkgICAgY2ZhX3N0b3JlX3JlZyA9IGdlbl9ydHhfUkVHIChTSW1vZGUsIFRFTVBfUkVHX05VTSk7CisrCSAgICBpbnNuID0gZW1pdF9pbnNuIChnZW5fcnR4X1NFVCAoU0ltb2RlLAorKwkJCQkJICAgY2ZhX3N0b3JlX3JlZywKKysJCQkJCSAgIEdFTl9JTlQgKHRvdGFsX2ZyYW1lX3NpemUpKSk7CisrCisrCSAgICBSVFhfRlJBTUVfUkVMQVRFRF9QIChpbnNuKSA9IDE7CisrCisrCisrCSAgICBpbnNuID0gZ2VuX3J0eF9TRVQgKFNJbW9kZSwKKysJCQkJc3RhY2tfcG9pbnRlcl9ydHgsCisrCQkJCWdlbl9ydHhfTUlOVVMgKFNJbW9kZSwKKysJCQkJCSAgICAgICBzdGFja19wb2ludGVyX3J0eCwKKysJCQkJCSAgICAgICBjZmFfc3RvcmVfcmVnKSk7CisrCisrCSAgICBpbnNuID0gZW1pdF9pbnNuIChpbnNuKTsKKysJICAgIFJUWF9GUkFNRV9SRUxBVEVEX1AgKGluc24pID0gMTsKKysKKysKKysJICAgIC8qIGlmIHRoZXJlIGFyZSBubyByZWdpc3RlcnMgdG8gc2F2ZSwgSSBkb24ndCBuZWVkIHRvCisrCSAgICAgICBjcmVhdGUgYSBjZmFfc3RvcmUgKi8KKysJICAgIGlmIChjZnVuLT5tYWNoaW5lLT5mcmFtZS5zYXZlX3JlZ19zaXplKSAKKysJICAgICAgeworKwkJaW5zbiA9IGdlbl9ydHhfU0VUIChTSW1vZGUsCisrCQkJCSAgICBjZmFfc3RvcmVfcmVnLAorKwkJCQkgICAgZ2VuX3J0eF9QTFVTIChTSW1vZGUsCisrCQkJCQkJICBjZmFfc3RvcmVfcmVnLAorKwkJCQkJCSAgc3RhY2tfcG9pbnRlcl9ydHgpKTsKKysKKysJCWluc24gPSBlbWl0X2luc24gKGluc24pOworKwkJUlRYX0ZSQU1FX1JFTEFURURfUCAoaW5zbikgPSAxOworKwkgICAgICB9CisrCisrCSAgICBjZmFfc3RvcmVfb2Zmc2V0IAorKwkgICAgICA9IHRvdGFsX2ZyYW1lX3NpemUgCisrCQktIChjZnVuLT5tYWNoaW5lLT5mcmFtZS5zYXZlX3JlZ3Nfb2Zmc2V0CisrCQkgICArIGNmdW4tPm1hY2hpbmUtPmZyYW1lLnNhdmVfcmVnX3JvdW5kZWQpOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgICBpbnNuID0gZ2VuX3J0eF9TRVQgKFNJbW9kZSwKKysJCQkJc3RhY2tfcG9pbnRlcl9ydHgsCisrCQkJCWdlbl9ydHhfUExVUyAoU0ltb2RlLAorKwkJCQkJICAgICAgc3RhY2tfcG9pbnRlcl9ydHgsCisrCQkJCQkgICAgICBHRU5fSU5UICgtdG90YWxfZnJhbWVfc2l6ZSkpKTsKKysJICAgIGluc24gPSBlbWl0X2luc24gKGluc24pOworKwkgICAgUlRYX0ZSQU1FX1JFTEFURURfUCAoaW5zbikgPSAxOworKworKwkgICAgY2ZhX3N0b3JlX3JlZyA9IHN0YWNrX3BvaW50ZXJfcnR4OworKwkgICAgY2ZhX3N0b3JlX29mZnNldCAKKysJICAgICAgPSBjZnVuLT5tYWNoaW5lLT5mcmFtZS5zYXZlX3JlZ3Nfb2Zmc2V0CisrCQkrIGNmdW4tPm1hY2hpbmUtPmZyYW1lLnNhdmVfcmVnX3JvdW5kZWQ7CisrCX0KKysgICAgfQorKworKyAgaWYgKE1VU1RfU0FWRV9SRUdJU1RFUiAoUkFfUkVHTk8pKQorKyAgICB7CisrICAgICAgY2ZhX3N0b3JlX29mZnNldCAtPSA0OworKyAgICAgIHNhdmVfcmVnIChSQV9SRUdOTywgY2ZhX3N0b3JlX29mZnNldCwgY2ZhX3N0b3JlX3JlZyk7CisrICAgIH0KKysgIGlmIChNVVNUX1NBVkVfUkVHSVNURVIgKEZQX1JFR05PKSkKKysgICAgeworKyAgICAgIGNmYV9zdG9yZV9vZmZzZXQgLT0gNDsKKysgICAgICBzYXZlX3JlZyAoRlBfUkVHTk8sIGNmYV9zdG9yZV9vZmZzZXQsIGNmYV9zdG9yZV9yZWcpOworKyAgICB9CisrCisrICBmb3IgKGkgPSAwOyBpIDwgRklSU1RfUFNFVURPX1JFR0lTVEVSOyBpKyspCisrICAgIHsKKysgICAgICBpZiAoTVVTVF9TQVZFX1JFR0lTVEVSIChpKSAmJiBpICE9IEZQX1JFR05PICYmIGkgIT0gUkFfUkVHTk8pCisrCXsKKysJICBjZmFfc3RvcmVfb2Zmc2V0IC09IDQ7CisrCSAgc2F2ZV9yZWcgKGksIGNmYV9zdG9yZV9vZmZzZXQsIGNmYV9zdG9yZV9yZWcpOworKwl9CisrICAgIH0KKysKKysgIGlmIChmcmFtZV9wb2ludGVyX25lZWRlZCkKKysgICAgeworKyAgICAgIGluc24gPSBlbWl0X2luc24gKGdlbl9ydHhfU0VUIChTSW1vZGUsCisrCQkJCSAgICAgZ2VuX3J0eF9SRUcgKFNJbW9kZSwgRlBfUkVHTk8pLAorKwkJCQkgICAgIGdlbl9ydHhfUkVHIChTSW1vZGUsIFNQX1JFR05PKSkpOworKworKyAgICAgIFJUWF9GUkFNRV9SRUxBVEVEX1AgKGluc24pID0gMTsKKysgICAgfQorKworKyAgLyogSWYgd2UgYXJlIHByb2ZpbGluZywgbWFrZSBzdXJlIG5vIGluc3RydWN0aW9ucyBhcmUgc2NoZWR1bGVkIGJlZm9yZQorKyAgICAgdGhlIGNhbGwgdG8gbWNvdW50LiAgKi8KKysgIGlmIChjdXJyZW50X2Z1bmN0aW9uX3Byb2ZpbGUpCisrICAgIGVtaXRfaW5zbiAoZ2VuX2Jsb2NrYWdlICgpKTsKKyt9CisrCisrdm9pZAorK2V4cGFuZF9lcGlsb2d1ZSAoYm9vbCBzaWJjYWxsX3ApCisreworKyAgcnR4IGluc247CisrICBpbnQgaTsKKysgIEhPU1RfV0lERV9JTlQgdG90YWxfZnJhbWVfc2l6ZTsKKysgIGludCByZWdpc3Rlcl9zdG9yZV9vZmZzZXQ7CisrCisrICB0b3RhbF9mcmFtZV9zaXplID0gY29tcHV0ZV9mcmFtZV9zaXplICgpOworKworKyAgaWYgKCFzaWJjYWxsX3AgJiYgbmlvczJfY2FuX3VzZV9yZXR1cm5faW5zbiAoKSkKKysgICAgeworKyAgICAgIGluc24gPSBlbWl0X2p1bXBfaW5zbiAoZ2VuX3JldHVybiAoKSk7CisrICAgICAgcmV0dXJuOworKyAgICB9CisrCisrICBlbWl0X2luc24gKGdlbl9ibG9ja2FnZSAoKSk7CisrCisrICByZWdpc3Rlcl9zdG9yZV9vZmZzZXQgPQorKyAgICBjZnVuLT5tYWNoaW5lLT5mcmFtZS5zYXZlX3JlZ3Nfb2Zmc2V0ICsKKysgICAgY2Z1bi0+bWFjaGluZS0+ZnJhbWUuc2F2ZV9yZWdfcm91bmRlZDsKKysKKysgIGlmIChNVVNUX1NBVkVfUkVHSVNURVIgKFJBX1JFR05PKSkKKysgICAgeworKyAgICAgIHJlZ2lzdGVyX3N0b3JlX29mZnNldCAtPSA0OworKyAgICAgIHJlc3RvcmVfcmVnIChSQV9SRUdOTywgcmVnaXN0ZXJfc3RvcmVfb2Zmc2V0KTsKKysgICAgfQorKworKyAgaWYgKE1VU1RfU0FWRV9SRUdJU1RFUiAoRlBfUkVHTk8pKQorKyAgICB7CisrICAgICAgcmVnaXN0ZXJfc3RvcmVfb2Zmc2V0IC09IDQ7CisrICAgICAgcmVzdG9yZV9yZWcgKEZQX1JFR05PLCByZWdpc3Rlcl9zdG9yZV9vZmZzZXQpOworKyAgICB9CisrCisrICBmb3IgKGkgPSAwOyBpIDwgRklSU1RfUFNFVURPX1JFR0lTVEVSOyBpKyspCisrICAgIHsKKysgICAgICBpZiAoTVVTVF9TQVZFX1JFR0lTVEVSIChpKSAmJiBpICE9IEZQX1JFR05PICYmIGkgIT0gUkFfUkVHTk8pCisrCXsKKysJICByZWdpc3Rlcl9zdG9yZV9vZmZzZXQgLT0gNDsKKysJICByZXN0b3JlX3JlZyAoaSwgcmVnaXN0ZXJfc3RvcmVfb2Zmc2V0KTsKKysJfQorKyAgICB9CisrCisrICBpZiAodG90YWxfZnJhbWVfc2l6ZSkKKysgICAgeworKyAgICAgIHJ0eCBzcF9hZGp1c3Q7CisrCisrICAgICAgaWYgKFRPT19CSUdfT0ZGU0VUICh0b3RhbF9mcmFtZV9zaXplKSkKKysgICAgICAgIHsKKysJICBzcF9hZGp1c3QgPSBnZW5fcnR4X1JFRyAoU0ltb2RlLCBURU1QX1JFR19OVU0pOworKwkgIGluc24gPSBlbWl0X2luc24gKGdlbl9ydHhfU0VUIChTSW1vZGUsCisrCQkJCQkgc3BfYWRqdXN0LAorKwkJCQkJIEdFTl9JTlQgKHRvdGFsX2ZyYW1lX3NpemUpKSk7CisrCisrICAgICAgCX0KKysgICAgICBlbHNlCisrICAgICAgICB7CisrCSAgc3BfYWRqdXN0ID0gR0VOX0lOVCAodG90YWxfZnJhbWVfc2l6ZSk7CisrCX0KKysKKysgICAgICBpbnNuID0gZ2VuX3J0eF9TRVQgKFNJbW9kZSwKKysJCQkgIHN0YWNrX3BvaW50ZXJfcnR4LAorKwkJCSAgZ2VuX3J0eF9QTFVTIChTSW1vZGUsCisrCQkJCQlzdGFja19wb2ludGVyX3J0eCwKKysJCQkJCXNwX2FkanVzdCkpOworKyAgICAgIGluc24gPSBlbWl0X2luc24gKGluc24pOworKyAgICB9CisrCisrCisrICBpZiAoIXNpYmNhbGxfcCkKKysgICAgeworKyAgICAgIGluc24gPSBlbWl0X2p1bXBfaW5zbiAoZ2VuX3JldHVybl9mcm9tX2VwaWxvZ3VlIChnZW5fcnR4IChSRUcsIFBtb2RlLAorKwkJCQkJCQkJUkFfUkVHTk8pKSk7CisrICAgIH0KKyt9CisrCisrCisrYm9vbAorK25pb3MyX2Z1bmN0aW9uX29rX2Zvcl9zaWJjYWxsICh0cmVlIGEgQVRUUklCVVRFX1VOVVNFRCwgdHJlZSBiIEFUVFJJQlVURV9VTlVTRUQpCisreworKyAgcmV0dXJuIHRydWU7CisrfQorKworKworKworKwwKKysKKysvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqCisrICogUHJvZmlsaW5nCisrICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKysKKyt2b2lkCisrZnVuY3Rpb25fcHJvZmlsZXIgKEZJTEUgKmZpbGUsIGludCBsYWJlbG5vKQorK3sKKysgIGZwcmludGYgKGZpbGUsICJcdCVzIG1jb3VudCBiZWdpbiwgbGFiZWw6IC5MUCVkXG4iLCAKKysgICAgICAgICAgIEFTTV9DT01NRU5UX1NUQVJULCBsYWJlbG5vKTsKKysgIGZwcmludGYgKGZpbGUsICJcdG5leHRwY1x0cjhcbiIpOworKyAgZnByaW50ZiAoZmlsZSwgIlx0bW92XHRyOSwgcmFcbiIpOworKyAgZnByaW50ZiAoZmlsZSwgIlx0bW92aGlcdHIxMCwgJSVoaWFkaiguTFAlZClcbiIsIGxhYmVsbm8pOworKyAgZnByaW50ZiAoZmlsZSwgIlx0YWRkaVx0cjEwLCByMTAsICUlbG8oLkxQJWQpXG4iLCBsYWJlbG5vKTsKKysgIGZwcmludGYgKGZpbGUsICJcdGNhbGxcdG1jb3VudFxuIik7CisrICBmcHJpbnRmIChmaWxlLCAiXHRtb3ZcdHJhLCByOVxuIik7CisrICBmcHJpbnRmIChmaWxlLCAiXHQlcyBtY291bnQgZW5kXG4iLCBBU01fQ09NTUVOVF9TVEFSVCk7CisrfQorKworKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysgKiBTdGFjayBMYXlvdXQKKysgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworKworK3ZvaWQKKytkdW1wX2ZyYW1lX3NpemUgKEZJTEUgKmZpbGUpCisreworKyAgZnByaW50ZiAoZmlsZSwgIlx0JXMgQ3VycmVudCBGcmFtZSBJbmZvXG4iLCBBU01fQ09NTUVOVF9TVEFSVCk7CisrCisrICBmcHJpbnRmIChmaWxlLCAiXHQlcyB0b3RhbF9zaXplID0gJWxkXG4iLCBBU01fQ09NTUVOVF9TVEFSVCwKKysJICAgY2Z1bi0+bWFjaGluZS0+ZnJhbWUudG90YWxfc2l6ZSk7CisrICBmcHJpbnRmIChmaWxlLCAiXHQlcyB2YXJfc2l6ZSA9ICVsZFxuIiwgQVNNX0NPTU1FTlRfU1RBUlQsCisrCSAgIGNmdW4tPm1hY2hpbmUtPmZyYW1lLnZhcl9zaXplKTsKKysgIGZwcmludGYgKGZpbGUsICJcdCVzIGFyZ3Nfc2l6ZSA9ICVsZFxuIiwgQVNNX0NPTU1FTlRfU1RBUlQsCisrCSAgIGNmdW4tPm1hY2hpbmUtPmZyYW1lLmFyZ3Nfc2l6ZSk7CisrICBmcHJpbnRmIChmaWxlLCAiXHQlcyBzYXZlX3JlZ19zaXplID0gJWRcbiIsIEFTTV9DT01NRU5UX1NUQVJULAorKwkgICBjZnVuLT5tYWNoaW5lLT5mcmFtZS5zYXZlX3JlZ19zaXplKTsKKysgIGZwcmludGYgKGZpbGUsICJcdCVzIHNhdmVfcmVnX3JvdW5kZWQgPSAlZFxuIiwgQVNNX0NPTU1FTlRfU1RBUlQsCisrCSAgIGNmdW4tPm1hY2hpbmUtPmZyYW1lLnNhdmVfcmVnX3JvdW5kZWQpOworKyAgZnByaW50ZiAoZmlsZSwgIlx0JXMgaW5pdGlhbGl6ZWQgPSAlZFxuIiwgQVNNX0NPTU1FTlRfU1RBUlQsCisrCSAgIGNmdW4tPm1hY2hpbmUtPmZyYW1lLmluaXRpYWxpemVkKTsKKysgIGZwcmludGYgKGZpbGUsICJcdCVzIG51bV9yZWdzID0gJWRcbiIsIEFTTV9DT01NRU5UX1NUQVJULAorKwkgICBjZnVuLT5tYWNoaW5lLT5mcmFtZS5udW1fcmVncyk7CisrICBmcHJpbnRmIChmaWxlLCAiXHQlcyBzYXZlX3JlZ3Nfb2Zmc2V0ID0gJWxkXG4iLCBBU01fQ09NTUVOVF9TVEFSVCwKKysJICAgY2Z1bi0+bWFjaGluZS0+ZnJhbWUuc2F2ZV9yZWdzX29mZnNldCk7CisrICBmcHJpbnRmIChmaWxlLCAiXHQlcyBjdXJyZW50X2Z1bmN0aW9uX2lzX2xlYWYgPSAlZFxuIiwgQVNNX0NPTU1FTlRfU1RBUlQsCisrCSAgIGN1cnJlbnRfZnVuY3Rpb25faXNfbGVhZik7CisrICBmcHJpbnRmIChmaWxlLCAiXHQlcyBmcmFtZV9wb2ludGVyX25lZWRlZCA9ICVkXG4iLCBBU01fQ09NTUVOVF9TVEFSVCwKKysJICAgZnJhbWVfcG9pbnRlcl9uZWVkZWQpOworKyAgZnByaW50ZiAoZmlsZSwgIlx0JXMgcHJldGVuZF9hcmdzX3NpemUgPSAlZFxuIiwgQVNNX0NPTU1FTlRfU1RBUlQsCisrCSAgIGN1cnJlbnRfZnVuY3Rpb25fcHJldGVuZF9hcmdzX3NpemUpOworKworK30KKysKKysKKysvKiBSZXR1cm4gdGhlIGJ5dGVzIG5lZWRlZCB0byBjb21wdXRlIHRoZSBmcmFtZSBwb2ludGVyIGZyb20gdGhlIGN1cnJlbnQKKysgICBzdGFjayBwb2ludGVyLgorKyovCisrCisrSE9TVF9XSURFX0lOVAorK2NvbXB1dGVfZnJhbWVfc2l6ZSAoKQorK3sKKysgIHVuc2lnbmVkIGludCByZWdubzsKKysgIEhPU1RfV0lERV9JTlQgdmFyX3NpemU7CS8qICMgb2YgdmFyLiBieXRlcyBhbGxvY2F0ZWQgKi8KKysgIEhPU1RfV0lERV9JTlQgdG90YWxfc2l6ZTsJLyogIyBieXRlcyB0aGF0IHRoZSBlbnRpcmUgZnJhbWUgdGFrZXMgdXAgKi8KKysgIEhPU1RfV0lERV9JTlQgc2F2ZV9yZWdfc2l6ZTsJLyogIyBieXRlcyBuZWVkZWQgdG8gc3RvcmUgY2FsbGVlIHNhdmUgcmVncyAqLworKyAgSE9TVF9XSURFX0lOVCBzYXZlX3JlZ19yb3VuZGVkOwkKKysgICAgLyogIyBieXRlcyBuZWVkZWQgdG8gc3RvcmUgY2FsbGVlIHNhdmUgcmVncyAocm91bmRlZCkgKi8KKysgIEhPU1RfV0lERV9JTlQgb3V0X2FyZ3Nfc2l6ZTsJLyogIyBieXRlcyBuZWVkZWQgZm9yIG91dGdvaW5nIGFyZ3MgKi8KKysKKysgIHNhdmVfcmVnX3NpemUgPSAwOworKyAgdmFyX3NpemUgPSBTVEFDS19BTElHTiAoZ2V0X2ZyYW1lX3NpemUgKCkpOworKyAgb3V0X2FyZ3Nfc2l6ZSA9IFNUQUNLX0FMSUdOIChjdXJyZW50X2Z1bmN0aW9uX291dGdvaW5nX2FyZ3Nfc2l6ZSk7CisrCisrICB0b3RhbF9zaXplID0gdmFyX3NpemUgKyBvdXRfYXJnc19zaXplOworKworKyAgLyogQ2FsY3VsYXRlIHNwYWNlIG5lZWRlZCBmb3IgZ3AgcmVnaXN0ZXJzLiAgKi8KKysgIGZvciAocmVnbm8gPSAwOyByZWdubyA8PSBGSVJTVF9QU0VVRE9fUkVHSVNURVI7IHJlZ25vKyspCisrICAgIHsKKysgICAgICBpZiAoTVVTVF9TQVZFX1JFR0lTVEVSIChyZWdubykpCisrCXsKKysJICBzYXZlX3JlZ19zaXplICs9IDQ7CisrCX0KKysgICAgfQorKworKyAgc2F2ZV9yZWdfcm91bmRlZCA9IFNUQUNLX0FMSUdOIChzYXZlX3JlZ19zaXplKTsKKysgIHRvdGFsX3NpemUgKz0gc2F2ZV9yZWdfcm91bmRlZDsKKysKKysgIHRvdGFsX3NpemUgKz0gU1RBQ0tfQUxJR04gKGN1cnJlbnRfZnVuY3Rpb25fcHJldGVuZF9hcmdzX3NpemUpOworKworKyAgLyogU2F2ZSBvdGhlciBjb21wdXRlZCBpbmZvcm1hdGlvbi4gICovCisrICBjZnVuLT5tYWNoaW5lLT5mcmFtZS50b3RhbF9zaXplID0gdG90YWxfc2l6ZTsKKysgIGNmdW4tPm1hY2hpbmUtPmZyYW1lLnZhcl9zaXplID0gdmFyX3NpemU7CisrICBjZnVuLT5tYWNoaW5lLT5mcmFtZS5hcmdzX3NpemUgPSBjdXJyZW50X2Z1bmN0aW9uX291dGdvaW5nX2FyZ3Nfc2l6ZTsKKysgIGNmdW4tPm1hY2hpbmUtPmZyYW1lLnNhdmVfcmVnX3NpemUgPSBzYXZlX3JlZ19zaXplOworKyAgY2Z1bi0+bWFjaGluZS0+ZnJhbWUuc2F2ZV9yZWdfcm91bmRlZCA9IHNhdmVfcmVnX3JvdW5kZWQ7CisrICBjZnVuLT5tYWNoaW5lLT5mcmFtZS5pbml0aWFsaXplZCA9IHJlbG9hZF9jb21wbGV0ZWQ7CisrICBjZnVuLT5tYWNoaW5lLT5mcmFtZS5udW1fcmVncyA9IHNhdmVfcmVnX3NpemUgLyBVTklUU19QRVJfV09SRDsKKysKKysgIGNmdW4tPm1hY2hpbmUtPmZyYW1lLnNhdmVfcmVnc19vZmZzZXQKKysgICAgPSBzYXZlX3JlZ19yb3VuZGVkID8gY3VycmVudF9mdW5jdGlvbl9vdXRnb2luZ19hcmdzX3NpemUgKyB2YXJfc2l6ZSA6IDA7CisrCisrICByZXR1cm4gdG90YWxfc2l6ZTsKKyt9CisrCisrCisraW50CisrbmlvczJfaW5pdGlhbF9lbGltaW5hdGlvbl9vZmZzZXQgKGludCBmcm9tLCBpbnQgdG8gQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICBpbnQgb2Zmc2V0OworKworKyAgLyogU2V0IE9GRlNFVCB0byB0aGUgb2Zmc2V0IGZyb20gdGhlIHN0YWNrIHBvaW50ZXIuICAqLworKyAgc3dpdGNoIChmcm9tKQorKyAgICB7CisrICAgIGNhc2UgRlJBTUVfUE9JTlRFUl9SRUdOVU06CisrICAgICAgb2Zmc2V0ID0gMDsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSBBUkdfUE9JTlRFUl9SRUdOVU06CisrICAgICAgY29tcHV0ZV9mcmFtZV9zaXplICgpOworKyAgICAgIG9mZnNldCA9IGNmdW4tPm1hY2hpbmUtPmZyYW1lLnRvdGFsX3NpemU7CisrICAgICAgb2Zmc2V0IC09IGN1cnJlbnRfZnVuY3Rpb25fcHJldGVuZF9hcmdzX3NpemU7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgUkVUVVJOX0FERFJFU1NfUE9JTlRFUl9SRUdOVU06CisrICAgICAgY29tcHV0ZV9mcmFtZV9zaXplICgpOworKyAgICAgIC8qIHNpbmNlIHRoZSByZXR1cm4gYWRkcmVzcyBpcyBhbHdheXMgdGhlIGZpcnN0IG9mIHRoZQorKyAgICAgICAgIHNhdmVkIHJlZ2lzdGVycywgcmV0dXJuIHRoZSBvZmZzZXQgdG8gdGhlIGJlZ2lubmluZworKyAgICAgICAgIG9mIHRoZSBzYXZlZCByZWdpc3RlcnMgYmxvY2sgKi8KKysgICAgICBvZmZzZXQgPSBjZnVuLT5tYWNoaW5lLT5mcmFtZS5zYXZlX3JlZ3Nfb2Zmc2V0OworKyAgICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIGFib3J0ICgpOworKyAgICB9CisrCisrICByZXR1cm4gb2Zmc2V0OworK30KKysKKysvKiBSZXR1cm4gbm9uemVybyBpZiB0aGlzIGZ1bmN0aW9uIGlzIGtub3duIHRvIGhhdmUgYSBudWxsIGVwaWxvZ3VlLgorKyAgIFRoaXMgYWxsb3dzIHRoZSBvcHRpbWl6ZXIgdG8gb21pdCBqdW1wcyB0byBqdW1wcyBpZiBubyBzdGFjaworKyAgIHdhcyBjcmVhdGVkLiAgKi8KKytpbnQKKytuaW9zMl9jYW5fdXNlX3JldHVybl9pbnNuICgpCisreworKyAgaWYgKCFyZWxvYWRfY29tcGxldGVkKQorKyAgICByZXR1cm4gMDsKKysKKysgIGlmIChyZWdzX2V2ZXJfbGl2ZVtSQV9SRUdOT10gfHwgY3VycmVudF9mdW5jdGlvbl9wcm9maWxlKQorKyAgICByZXR1cm4gMDsKKysKKysgIGlmIChjZnVuLT5tYWNoaW5lLT5mcmFtZS5pbml0aWFsaXplZCkKKysgICAgcmV0dXJuIGNmdW4tPm1hY2hpbmUtPmZyYW1lLnRvdGFsX3NpemUgPT0gMDsKKysKKysgIHJldHVybiBjb21wdXRlX2ZyYW1lX3NpemUgKCkgPT0gMDsKKyt9CisrCisrCisrCisrDAorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysgKgorKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrY29uc3QgY2hhciAqbmlvczJfc3lzX25vc3lzX3N0cmluZzsgICAgLyogZm9yIC1tc3lzPW5vc3lzICovCisrY29uc3QgY2hhciAqbmlvczJfc3lzX2xpYl9zdHJpbmc7ICAgIC8qIGZvciAtbXN5cy1saWI9ICovCisrY29uc3QgY2hhciAqbmlvczJfc3lzX2NydDBfc3RyaW5nOyAgICAvKiBmb3IgLW1zeXMtY3J0MD0gKi8KKysKKyt2b2lkCisrb3ZlcnJpZGVfb3B0aW9ucyAoKQorK3sKKysgIC8qIEZ1bmN0aW9uIHRvIGFsbG9jYXRlIG1hY2hpbmUtZGVwZW5kZW50IGZ1bmN0aW9uIHN0YXR1cy4gICovCisrICBpbml0X21hY2hpbmVfc3RhdHVzID0gJm5pb3MyX2luaXRfbWFjaGluZV9zdGF0dXM7CisrCisrICBuaW9zMl9zZWN0aW9uX3RocmVzaG9sZCAKKysgICAgPSBnX3N3aXRjaF9zZXQgPyBnX3N3aXRjaF92YWx1ZSA6IE5JT1MyX0RFRkFVTFRfR1ZBTFVFOworKworKyAgaWYgKG5pb3MyX3N5c19ub3N5c19zdHJpbmcgJiYgKm5pb3MyX3N5c19ub3N5c19zdHJpbmcpCisrICAgIHsKKysgICAgICBlcnJvciAoImludmFsaWQgb3B0aW9uICctbXN5cz1ub3N5cyVzJyIsIG5pb3MyX3N5c19ub3N5c19zdHJpbmcpOworKyAgICB9CisrCisrICAvKiBJZiB3ZSBkb24ndCBoYXZlIG11bCwgd2UgZG9uJ3QgaGF2ZSBtdWx4IGVpdGhlciEgKi8KKysgIGlmICghVEFSR0VUX0hBU19NVUwgJiYgVEFSR0VUX0hBU19NVUxYKSAKKysgICAgeworKyAgICAgIHRhcmdldF9mbGFncyAmPSB+SEFTX01VTFhfRkxBRzsKKysgICAgfQorKworK30KKysKKyt2b2lkCisrb3B0aW1pemF0aW9uX29wdGlvbnMgKGludCBsZXZlbCwgaW50IHNpemUpCisreworKyAgaWYgKGxldmVsIHx8IHNpemUpCisrICAgIHsKKysgICAgICB0YXJnZXRfZmxhZ3MgfD0gSU5MSU5FX01FTUNQWV9GTEFHOworKyAgICB9CisrCisrICBpZiAobGV2ZWwgPj0gMyAmJiAhc2l6ZSkKKysgICAgeworKyAgICAgIHRhcmdldF9mbGFncyB8PSBGQVNUX1NXX0RJVl9GTEFHOworKyAgICB9CisrfQorKworKy8qIEFsbG9jYXRlIGEgY2h1bmsgb2YgbWVtb3J5IGZvciBwZXItZnVuY3Rpb24gbWFjaGluZS1kZXBlbmRlbnQgZGF0YS4gICovCisrc3RhdGljIHN0cnVjdCBtYWNoaW5lX2Z1bmN0aW9uICoKKytuaW9zMl9pbml0X21hY2hpbmVfc3RhdHVzICgpCisreworKyAgcmV0dXJuICgoc3RydWN0IG1hY2hpbmVfZnVuY3Rpb24gKikKKysJICBnZ2NfYWxsb2NfY2xlYXJlZCAoc2l6ZW9mIChzdHJ1Y3QgbWFjaGluZV9mdW5jdGlvbikpKTsKKyt9CisrCisrDAorKworKy8qKioqKioqKioqKioqKioqKgorKyAqIERlc2NyaWJpbmcgUmVsYXRpdmUgQ29zdHMgb2YgT3BlcmF0aW9ucworKyAqKioqKioqKioqKioqKioqKi8KKysKKysvKiBDb21wdXRlIGEgKHBhcnRpYWwpIGNvc3QgZm9yIHJ0eCBYLiAgUmV0dXJuIHRydWUgaWYgdGhlIGNvbXBsZXRlCisrICAgY29zdCBoYXMgYmVlbiBjb21wdXRlZCwgYW5kIGZhbHNlIGlmIHN1YmV4cHJlc3Npb25zIHNob3VsZCBiZQorKyAgIHNjYW5uZWQuICBJbiBlaXRoZXIgY2FzZSwgKlRPVEFMIGNvbnRhaW5zIHRoZSBjb3N0IHJlc3VsdC4gICovCisrCisrCisrCisrc3RhdGljIGJvb2wKKytuaW9zMl9ydHhfY29zdHMgKHJ0eCB4LCBpbnQgY29kZSwgaW50IG91dGVyX2NvZGUgQVRUUklCVVRFX1VOVVNFRCwgaW50ICp0b3RhbCkKKyt7CisrICBzd2l0Y2ggKGNvZGUpCisrICAgIHsKKysgICAgICBjYXNlIENPTlNUX0lOVDoKKysJaWYgKElOVFZBTCAoeCkgPT0gMCkKKysJICB7CisrCSAgICAqdG90YWwgPSBDT1NUU19OX0lOU05TICgwKTsKKysJICAgIHJldHVybiB0cnVlOworKwkgIH0KKysJZWxzZSBpZiAoU01BTExfSU5UIChJTlRWQUwgKHgpKQorKwkJfHwgU01BTExfSU5UX1VOU0lHTkVEIChJTlRWQUwgKHgpKQorKwkJfHwgVVBQRVIxNl9JTlQgKElOVFZBTCAoeCkpKQorKwkgIHsKKysJICAgICp0b3RhbCA9IENPU1RTX05fSU5TTlMgKDIpOworKwkgICAgcmV0dXJuIHRydWU7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgKnRvdGFsID0gQ09TVFNfTl9JTlNOUyAoNCk7CisrCSAgICByZXR1cm4gdHJ1ZTsKKysJICB9CisrCisrICAgICAgY2FzZSBMQUJFTF9SRUY6CisrICAgICAgY2FzZSBTWU1CT0xfUkVGOgorKwkvKiA/Pz8gZ3AgcmVsYXRpdmUgc3R1ZmYgd2lsbCBmaXQgaW4gaGVyZSAqLworKwkvKiBmYWxsIHRocm91Z2ggKi8KKysgICAgICBjYXNlIENPTlNUOgorKyAgICAgIGNhc2UgQ09OU1RfRE9VQkxFOgorKwl7CisrCSAgKnRvdGFsID0gQ09TVFNfTl9JTlNOUyAoNCk7CisrCSAgcmV0dXJuIHRydWU7CisrCX0KKysKKysgICAgICBjYXNlIE1VTFQ6CisrCXsKKysJICAqdG90YWwgPSBDT1NUU19OX0lOU05TICgxKTsKKysJICByZXR1cm4gZmFsc2U7CisrCX0KKysgICAgICBjYXNlIFNJR05fRVhURU5EOgorKwl7CisrCSAgKnRvdGFsID0gQ09TVFNfTl9JTlNOUyAoMyk7CisrCSAgcmV0dXJuIGZhbHNlOworKwl9CisrICAgICAgY2FzZSBaRVJPX0VYVEVORDoKKysJeworKwkgICp0b3RhbCA9IENPU1RTX05fSU5TTlMgKDEpOworKwkgIHJldHVybiBmYWxzZTsKKysJfQorKworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorK30KKysKKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisrICogSU5TVFJVQ1RJT04gU1VQUE9SVAorKyAqCisrICogVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdpdGhpbiB0aGUgTWFjaGluZSBEZXNjcmlwdGlvbiB0bworKyAqIGhhbmRsZSBjb21tb24gb3IgY29tcGxpY2F0ZWQgb3V0cHV0IGFuZCBleHBhbnNpb25zIGZyb20KKysgKiBpbnN0cnVjdGlvbnMuCisrICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytpbnQKKytuaW9zMl9lbWl0X21vdmVfc2VxdWVuY2UgKHJ0eCAqb3BlcmFuZHMsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUpCisreworKyAgcnR4IHRvID0gb3BlcmFuZHNbMF07CisrICBydHggZnJvbSA9IG9wZXJhbmRzWzFdOworKworKyAgaWYgKCFyZWdpc3Rlcl9vcGVyYW5kICh0bywgbW9kZSkgJiYgIXJlZ19vcl8wX29wZXJhbmQgKGZyb20sIG1vZGUpKQorKyAgICB7CisrICAgICAgaWYgKG5vX25ld19wc2V1ZG9zKQorKwlpbnRlcm5hbF9lcnJvciAoIlRyeWluZyB0byBmb3JjZV9yZWcgbm9fbmV3X3BzZXVkb3MgPT0gMSIpOworKyAgICAgIGZyb20gPSBjb3B5X3RvX21vZGVfcmVnIChtb2RlLCBmcm9tKTsKKysgICAgfQorKworKyAgb3BlcmFuZHNbMF0gPSB0bzsKKysgIG9wZXJhbmRzWzFdID0gZnJvbTsKKysgIHJldHVybiAwOworK30KKysKKysvKiBEaXZpZGUgU3VwcG9ydCAqLworKworKy8qCisrICBJZiAtTzMgaXMgdXNlZCwgd2Ugd2FudCB0byBvdXRwdXQgYSB0YWJsZSBsb29rdXAgZm9yCisrICBkaXZpZGVzIGJldHdlZW4gc21hbGwgbnVtYmVycyAoYm90aCBudW0gYW5kIGRlbiA+PSAwCisrICBhbmQgPCAweDEwKS4gVGhlIG92ZXJoZWFkIG9mIHRoaXMgbWV0aG9kIGluIHRoZSB3b3JzZQorKyAgY2FzZSBpcyA0MCBieXRlcyBpbiB0aGUgdGV4dCBzZWN0aW9uICgxMCBpbnNucykgYW5kCisrICAyNTYgYnl0ZXMgaW4gdGhlIGRhdGEgc2VjdGlvbi4gQWRkaXRpb25hbCBkaXZpZGVzIGRvCisrICBub3QgaW5jdXIgYWRkaXRpb25hbCBwZW5hbHRpZXMgaW4gdGhlIGRhdGEgc2VjdGlvbi4KKysKKysgIENvZGUgc3BlZWQgaXMgaW1wcm92ZWQgZm9yIHNtYWxsIGRpdmlkZXMgYnkgYWJvdXQgNXgKKysgIHdoZW4gdXNpbmcgdGhpcyBtZXRob2QgaW4gdGhlIHdvcnNlIGNhc2UgKH45IGN5Y2xlcworKyAgdnMgfjQ1KS4gQW5kIGluIHRoZSB3b3JzZSBjYXNlIGRpdmlkZXMgbm90IHdpdGhpbiB0aGUKKysgIHRhYmxlIGFyZSBwZW5hbGl6ZWQgYnkgYWJvdXQgMTAlICh+NSBjeWNsZXMgdnMgfjQ1KS4KKysgIEhvd2V2ZXIgaW4gdGhlIHR5cGljYWwgY2FzZSB0aGUgcGVuYWx0eSBpcyBub3QgYXMgYmFkCisrICBiZWNhdXNlIGRvaW5nIHRoZSBsb25nIGRpdmlkZSBpbiBvbmx5IDQ1IGN5Y2xlcyBpcworKyAgcXVpdGUgb3B0aW1pc3RpYy4KKysKKysgID8/PyBJdCB3b3VsZCBiZSBuaWNlIHRvIGhhdmUgc29tZSBiZW5jaG1hcmtzIG90aGVyCisrICB0aGFuIERocnlzdG9uZSB0byBiYWNrIHRoaXMgdXAuCisrCisrICBUaGlzIGJpdCBvZiBleHBhbnNpb24gaXMgdG8gY3JlYXRlIHRoaXMgaW5zdHJ1Y3Rpb24KKysgIHNlcXVlbmNlIGFzIHJ0bC4KKysJb3IJJDgsICQ0LCAkNQorKwlzbGxpCSQ5LCAkNCwgNAorKwljbXBnZXVpCSQzLCAkOCwgMTYKKysJYmVxCSQzLCAkMCwgLkwzCisrCW9yCSQxMCwgJDksICQ1CisrCWFkZAkkMTIsICQxMSwgZGl2aWRlX3RhYmxlCisrCWxkYnUJJDIsIDAoJDEyKQorKwlicgkuTDEKKysuTDM6CisrCWNhbGwJc2xvd19kaXYKKysuTDE6CisrIwljb250aW51ZSBoZXJlIHdpdGggcmVzdWx0IGluICQyCisrCisrICA/Pz8gSWRlYWxseSBJIHdvdWxkIGxpa2UgdGhlIGVtaXQgbGliY2FsbCBibG9jayB0byBjb250YWluCisrICBhbGwgb2YgdGhpcyBjb2RlLCBidXQgSSBkb24ndCBrbm93IGhvdyB0byBkbyB0aGF0LiBXaGF0IGl0CisrICBtZWFucyBpcyB0aGF0IGlmIHRoZSBkaXZpZGUgY2FuIGJlIGVsaW1pbmF0ZWQsIGl0IG1heSBub3QKKysgIGNvbXBsZXRlbHkgZGlzYXBwZWFyLgorKworKyAgPz8/IFRoZSBfX2RpdnNpM190YWJsZSBsYWJlbCBzaG91bGQgaWRlYWxseSBiZSBtb3ZlZCBvdXQKKysgIG9mIHRoaXMgYmxvY2sgYW5kIGludG8gYSBnbG9iYWwuIElmIGl0IGlzIHBsYWNlZCBpbnRvIHRoZQorKyAgc2RhdGEgc2VjdGlvbiB3ZSBjYW4gc2F2ZSBldmVuIG1vcmUgY3ljbGVzIGJ5IGRvaW5nIHRoaW5ncworKyAgZ3AgcmVsYXRpdmUuCisrKi8KKytpbnQKKytuaW9zMl9lbWl0X2V4cGVuc2l2ZV9kaXYgKHJ0eCAqb3BlcmFuZHMsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUpCisreworKyAgcnR4IG9yX3Jlc3VsdCwgc2hpZnRfbGVmdF9yZXN1bHQ7CisrICBydHggbG9va3VwX3ZhbHVlOworKyAgcnR4IGxhYjEsIGxhYjM7CisrICBydHggaW5zbnM7CisrICBydHggbGliZnVuYzsKKysgIHJ0eCBmaW5hbF9yZXN1bHQ7CisrICBydHggdG1wOworKworKyAgLyogaXQgbWF5IGxvb2sgYSBsaXR0bGUgZ2VuZXJpYywgYnV0IG9ubHkgU0ltb2RlCisrICAgICBpcyBzdXBwb3J0ZWQgZm9yIG5vdyAqLworKyAgaWYgKG1vZGUgIT0gU0ltb2RlKQorKyAgICBhYm9ydCAoKTsKKysKKysgIGxpYmZ1bmMgPSBzZGl2X29wdGFiLT5oYW5kbGVyc1soaW50KSBTSW1vZGVdLmxpYmZ1bmM7CisrCisrCisrCisrICBsYWIxID0gZ2VuX2xhYmVsX3J0eCAoKTsKKysgIGxhYjMgPSBnZW5fbGFiZWxfcnR4ICgpOworKworKyAgb3JfcmVzdWx0ID0gZXhwYW5kX3NpbXBsZV9iaW5vcCAoU0ltb2RlLCBJT1IsCisrCQkJCSAgIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSwKKysJCQkJICAgMCwgMCwgT1BUQUJfTElCX1dJREVOKTsKKysKKysgIGVtaXRfY21wX2FuZF9qdW1wX2luc25zIChvcl9yZXN1bHQsIEdFTl9JTlQgKDE1KSwgR1RVLCAwLAorKwkJCSAgIEdFVF9NT0RFIChvcl9yZXN1bHQpLCAwLCBsYWIzKTsKKysgIEpVTVBfTEFCRUwgKGdldF9sYXN0X2luc24gKCkpID0gbGFiMzsKKysKKysgIHNoaWZ0X2xlZnRfcmVzdWx0ID0gZXhwYW5kX3NpbXBsZV9iaW5vcCAoU0ltb2RlLCBBU0hJRlQsCisrCQkJCQkgICBvcGVyYW5kc1sxXSwgR0VOX0lOVCAoNCksCisrCQkJCQkgICAwLCAwLCBPUFRBQl9MSUJfV0lERU4pOworKworKyAgbG9va3VwX3ZhbHVlID0gZXhwYW5kX3NpbXBsZV9iaW5vcCAoU0ltb2RlLCBJT1IsCisrCQkJCSAgICAgIHNoaWZ0X2xlZnRfcmVzdWx0LCBvcGVyYW5kc1syXSwKKysJCQkJICAgICAgMCwgMCwgT1BUQUJfTElCX1dJREVOKTsKKysKKysgIGNvbnZlcnRfbW92ZSAob3BlcmFuZHNbMF0sCisrCQlnZW5fcnR4IChNRU0sIFFJbW9kZSwKKysJCQkgZ2VuX3J0eCAoUExVUywgU0ltb2RlLAorKwkJCQkgIGxvb2t1cF92YWx1ZSwKKysJCQkJICBnZW5fcnR4X1NZTUJPTF9SRUYgKFNJbW9kZSwgIl9fZGl2c2kzX3RhYmxlIikpKSwKKysJCTEpOworKworKworKyAgdG1wID0gZW1pdF9qdW1wX2luc24gKGdlbl9qdW1wIChsYWIxKSk7CisrICBKVU1QX0xBQkVMICh0bXApID0gbGFiMTsKKysgIGVtaXRfYmFycmllciAoKTsKKysKKysgIGVtaXRfbGFiZWwgKGxhYjMpOworKyAgTEFCRUxfTlVTRVMgKGxhYjMpID0gMTsKKysKKysgIHN0YXJ0X3NlcXVlbmNlICgpOworKyAgZmluYWxfcmVzdWx0ID0gZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWUgKGxpYmZ1bmMsIE5VTExfUlRYLAorKwkJCQkJICBMQ1RfQ09OU1QsIFNJbW9kZSwgMiwKKysJCQkJCSAgb3BlcmFuZHNbMV0sIFNJbW9kZSwKKysJCQkJCSAgb3BlcmFuZHNbMl0sIFNJbW9kZSk7CisrCisrCisrICBpbnNucyA9IGdldF9pbnNucyAoKTsKKysgIGVuZF9zZXF1ZW5jZSAoKTsKKysgIGVtaXRfbGliY2FsbF9ibG9jayAoaW5zbnMsIG9wZXJhbmRzWzBdLCBmaW5hbF9yZXN1bHQsCisrCQkgICAgICBnZW5fcnR4IChESVYsIFNJbW9kZSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKSk7CisrCisrICBlbWl0X2xhYmVsIChsYWIxKTsKKysgIExBQkVMX05VU0VTIChsYWIxKSA9IDE7CisrICByZXR1cm4gMTsKKyt9CisrCisrLyogQnJhbmNoZXMvQ29tcGFyZXMgKi8KKysKKysvKiB0aGUgd2F5IG9mIGhhbmRsaW5nIGJyYW5jaGVzL2NvbXBhcmVzCisrICAgaW4gZ2NjIGlzIGhlYXZpbHkgYm9ycm93ZWQgZnJvbSBNSVBTICovCisrCisrZW51bSBpbnRlcm5hbF90ZXN0CisreworKyAgSVRFU1RfRVEsCisrICBJVEVTVF9ORSwKKysgIElURVNUX0dULAorKyAgSVRFU1RfR0UsCisrICBJVEVTVF9MVCwKKysgIElURVNUX0xFLAorKyAgSVRFU1RfR1RVLAorKyAgSVRFU1RfR0VVLAorKyAgSVRFU1RfTFRVLAorKyAgSVRFU1RfTEVVLAorKyAgSVRFU1RfTUFYCisrfTsKKysKKytzdGF0aWMgZW51bSBpbnRlcm5hbF90ZXN0IG1hcF90ZXN0X3RvX2ludGVybmFsX3Rlc3QgKGVudW0gcnR4X2NvZGUpOworKworKy8qIENhY2hlZCBvcGVyYW5kcywgYW5kIG9wZXJhdG9yIHRvIGNvbXBhcmUgZm9yIHVzZSBpbiBzZXQvYnJhbmNoL3RyYXAKKysgICBvbiBjb25kaXRpb24gY29kZXMuICAqLworK3J0eCBicmFuY2hfY21wWzJdOworK2VudW0gY21wX3R5cGUgYnJhbmNoX3R5cGU7CisrCisrLyogTWFrZSBub3JtYWwgcnR4X2NvZGUgaW50byBzb21ldGhpbmcgd2UgY2FuIGluZGV4IGZyb20gYW4gYXJyYXkgKi8KKysKKytzdGF0aWMgZW51bSBpbnRlcm5hbF90ZXN0CisrbWFwX3Rlc3RfdG9faW50ZXJuYWxfdGVzdCAoZW51bSBydHhfY29kZSB0ZXN0X2NvZGUpCisreworKyAgZW51bSBpbnRlcm5hbF90ZXN0IHRlc3QgPSBJVEVTVF9NQVg7CisrCisrICBzd2l0Y2ggKHRlc3RfY29kZSkKKysgICAgeworKyAgICBjYXNlIEVROgorKyAgICAgIHRlc3QgPSBJVEVTVF9FUTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBORToKKysgICAgICB0ZXN0ID0gSVRFU1RfTkU7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgR1Q6CisrICAgICAgdGVzdCA9IElURVNUX0dUOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEdFOgorKyAgICAgIHRlc3QgPSBJVEVTVF9HRTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBMVDoKKysgICAgICB0ZXN0ID0gSVRFU1RfTFQ7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgTEU6CisrICAgICAgdGVzdCA9IElURVNUX0xFOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEdUVToKKysgICAgICB0ZXN0ID0gSVRFU1RfR1RVOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEdFVToKKysgICAgICB0ZXN0ID0gSVRFU1RfR0VVOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIExUVToKKysgICAgICB0ZXN0ID0gSVRFU1RfTFRVOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIExFVToKKysgICAgICB0ZXN0ID0gSVRFU1RfTEVVOworKyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIGJyZWFrOworKyAgICB9CisrCisrICByZXR1cm4gdGVzdDsKKyt9CisrCisrLyogR2VuZXJhdGUgdGhlIGNvZGUgdG8gY29tcGFyZSAoYW5kIHBvc3NpYmx5IGJyYW5jaCkgdHdvIGludGVnZXIgdmFsdWVzCisrICAgVEVTVF9DT0RFIGlzIHRoZSBjb21wYXJpc29uIGNvZGUgd2UgYXJlIHRyeWluZyB0byBlbXVsYXRlIAorKyAgICAgKG9yIGltcGxlbWVudCBkaXJlY3RseSkKKysgICBSRVNVTFQgaXMgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiwgCisrICAgICBvciBudWxsIHRvIGVtaXQgYSBicmFuY2gKKysgICBDTVAwIENNUDEgYXJlIHRoZSB0d28gY29tcGFyaXNvbiBvcGVyYW5kcworKyAgIERFU1RJTkFUSU9OIGlzIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgYnJhbmNoLCBvciBudWxsIHRvIG9ubHkgY29tcGFyZQorKyAgICovCisrCisrdm9pZAorK2dlbl9pbnRfcmVsYXRpb25hbCAoZW51bSBydHhfY29kZSB0ZXN0X2NvZGUsIC8qIHJlbGF0aW9uYWwgdGVzdCAoRVEsIGV0YykgKi8KKysJCSAgICBydHggcmVzdWx0LAkJLyogcmVzdWx0IHRvIHN0b3JlIGNvbXAuIG9yIDAgaWYgYnJhbmNoICovCisrCQkgICAgcnR4IGNtcDAsCQkvKiBmaXJzdCBvcGVyYW5kIHRvIGNvbXBhcmUgKi8KKysJCSAgICBydHggY21wMSwJCS8qIHNlY29uZCBvcGVyYW5kIHRvIGNvbXBhcmUgKi8KKysJCSAgICBydHggZGVzdGluYXRpb24pCS8qIGRlc3RpbmF0aW9uIG9mIHRoZSBicmFuY2gsIG9yIDAgaWYgY29tcGFyZSAqLworK3sKKysgIHN0cnVjdCBjbXBfaW5mbworKyAgeworKyAgICAvKiBmb3IgcmVnaXN0ZXIgKG9yIDApIGNvbXBhcmVzICovCisrICAgIGVudW0gcnR4X2NvZGUgdGVzdF9jb2RlX3JlZzsJLyogY29kZSB0byB1c2UgaW4gaW5zdHJ1Y3Rpb24gKExUIHZzLiBMVFUpICovCisrICAgIGludCByZXZlcnNlX3JlZ3M7CQkvKiByZXZlcnNlIHJlZ2lzdGVycyBpbiB0ZXN0ICovCisrCisrICAgIC8qIGZvciBpbW1lZGlhdGUgY29tcGFyZXMgKi8KKysgICAgZW51bSBydHhfY29kZSB0ZXN0X2NvZGVfY29uc3Q7CQorKyAgICAgICAgIC8qIGNvZGUgdG8gdXNlIGluIGluc3RydWN0aW9uIChMVCB2cy4gTFRVKSAqLworKyAgICBpbnQgY29uc3RfbG93OwkJLyogbG93IGJvdW5kIG9mIGNvbnN0YW50IHdlIGNhbiBhY2NlcHQgKi8KKysgICAgaW50IGNvbnN0X2hpZ2g7CQkvKiBoaWdoIGJvdW5kIG9mIGNvbnN0YW50IHdlIGNhbiBhY2NlcHQgKi8KKysgICAgaW50IGNvbnN0X2FkZDsJCS8qIGNvbnN0YW50IHRvIGFkZCAqLworKworKyAgICAvKiBnZW5lcmljIGluZm8gKi8KKysgICAgaW50IHVuc2lnbmVkcDsJCS8qICE9IDAgZm9yIHVuc2lnbmVkIGNvbXBhcmlzb25zLiAgKi8KKysgIH07CisrCisrICBzdGF0aWMgY29uc3Qgc3RydWN0IGNtcF9pbmZvIGluZm9bKGludCkgSVRFU1RfTUFYXSA9IHsKKysKKysgICAge0VRLCAwLCBFUSwgLTMyNzY4LCAzMjc2NywgMCwgMH0sIC8qIEVRICAqLworKyAgICB7TkUsIDAsIE5FLCAtMzI3NjgsIDMyNzY3LCAwLCAwfSwgLyogTkUgICovCisrCisrICAgIHtMVCwgMSwgR0UsIC0zMjc2OSwgMzI3NjYsIDEsIDB9LCAvKiBHVCAgKi8KKysgICAge0dFLCAwLCBHRSwgLTMyNzY4LCAzMjc2NywgMCwgMH0sIC8qIEdFICAqLworKyAgICB7TFQsIDAsIExULCAtMzI3NjgsIDMyNzY3LCAwLCAwfSwgLyogTFQgICovCisrICAgIHtHRSwgMSwgTFQsIC0zMjc2OSwgMzI3NjYsIDEsIDB9LCAvKiBMRSAgKi8KKysKKysgICAge0xUVSwgMSwgR0VVLCAwLCA2NTUzNCwgMSwgMH0sIC8qIEdUVSAqLworKyAgICB7R0VVLCAwLCBHRVUsIDAsIDY1NTM1LCAwLCAwfSwgLyogR0VVICovCisrICAgIHtMVFUsIDAsIExUVSwgMCwgNjU1MzUsIDAsIDB9LCAvKiBMVFUgKi8KKysgICAge0dFVSwgMSwgTFRVLCAwLCA2NTUzNCwgMSwgMH0sIC8qIExFVSAqLworKyAgfTsKKysKKysgIGVudW0gaW50ZXJuYWxfdGVzdCB0ZXN0OworKyAgZW51bSBtYWNoaW5lX21vZGUgbW9kZTsKKysgIGNvbnN0IHN0cnVjdCBjbXBfaW5mbyAqcF9pbmZvOworKyAgaW50IGJyYW5jaF9wOworKworKworKworKworKyAgdGVzdCA9IG1hcF90ZXN0X3RvX2ludGVybmFsX3Rlc3QgKHRlc3RfY29kZSk7CisrICBpZiAodGVzdCA9PSBJVEVTVF9NQVgpCisrICAgIGFib3J0ICgpOworKworKyAgcF9pbmZvID0gJmluZm9bKGludCkgdGVzdF07CisrCisrICBtb2RlID0gR0VUX01PREUgKGNtcDApOworKyAgaWYgKG1vZGUgPT0gVk9JRG1vZGUpCisrICAgIG1vZGUgPSBHRVRfTU9ERSAoY21wMSk7CisrCisrICBicmFuY2hfcCA9IChkZXN0aW5hdGlvbiAhPSAwKTsKKysKKysgIC8qIFdlIGNhbid0LCB1bmRlciBhbnkgY2lyY3Vtc3RhbmNlcywgaGF2ZSBjb25zdF9pbnRzIGluIGNtcDAKKysgICAgID8/PyBBY3R1YWxseSB3ZSBjb3VsZCBoYXZlIGNvbnN0MCAqLworKyAgaWYgKEdFVF9DT0RFIChjbXAwKSA9PSBDT05TVF9JTlQpCisrICAgIGNtcDAgPSBmb3JjZV9yZWcgKG1vZGUsIGNtcDApOworKworKyAgLyogaWYgdGhlIGNvbXBhcmlzb24gaXMgYWdhaW5zdCBhbiBpbnQgbm90IGluIGxlZ2FsIHJhbmdlCisrICAgICBtb3ZlIGl0IGludG8gYSByZWdpc3RlciAqLworKyAgaWYgKEdFVF9DT0RFIChjbXAxKSA9PSBDT05TVF9JTlQpCisrICAgIHsKKysgICAgICBIT1NUX1dJREVfSU5UIHZhbHVlID0gSU5UVkFMIChjbXAxKTsKKysKKysgICAgICBpZiAodmFsdWUgPCBwX2luZm8tPmNvbnN0X2xvdyB8fCB2YWx1ZSA+IHBfaW5mby0+Y29uc3RfaGlnaCkKKysJY21wMSA9IGZvcmNlX3JlZyAobW9kZSwgY21wMSk7CisrICAgIH0KKysKKysgIC8qIENvbXBhcmlzb24gdG8gY29uc3RhbnRzLCBtYXkgaW52b2x2ZSBhZGRpbmcgMSB0byBjaGFuZ2UgYSBHVCBpbnRvIEdFLgorKyAgICAgQ29tcGFyaXNvbiBiZXR3ZWVuIHR3byByZWdpc3RlcnMsIG1heSBpbnZvbHZlIHN3aXRjaGluZyBvcGVyYW5kcy4gICovCisrICBpZiAoR0VUX0NPREUgKGNtcDEpID09IENPTlNUX0lOVCkKKysgICAgeworKyAgICAgIGlmIChwX2luZm8tPmNvbnN0X2FkZCAhPSAwKQorKwl7CisrCSAgSE9TVF9XSURFX0lOVCBuZXcgPSBJTlRWQUwgKGNtcDEpICsgcF9pbmZvLT5jb25zdF9hZGQ7CisrCisrCSAgLyogSWYgbW9kaWZpY2F0aW9uIG9mIGNtcDEgY2F1c2VkIG92ZXJmbG93LAorKwkgICAgIHdlIHdvdWxkIGdldCB0aGUgd3JvbmcgYW5zd2VyIGlmIHdlIGZvbGxvdyB0aGUgdXN1YWwgcGF0aDsKKysJICAgICB0aHVzLCB4ID4gMHhmZmZmZmZmZlUgd291bGQgdHVybiBpbnRvIHggPiAwVS4gICovCisrCSAgaWYgKChwX2luZm8tPnVuc2lnbmVkcAorKwkgICAgICAgPyAodW5zaWduZWQgSE9TVF9XSURFX0lOVCkgbmV3ID4KKysJICAgICAgICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKSBJTlRWQUwgKGNtcDEpCisrCSAgICAgICA6IG5ldyA+IElOVFZBTCAoY21wMSkpICE9IChwX2luZm8tPmNvbnN0X2FkZCA+IDApKQorKwkgICAgeworKwkgICAgICAvKiA/Pz8gVGhpcyBjYXNlIGNhbiBuZXZlciBoYXBwZW4gd2l0aCB0aGUgY3VycmVudCBudW1iZXJzLAorKwkgICAgICAgICBidXQgSSBhbSBwYXJhbm9pZCBhbmQgd291bGQgcmF0aGVyIGFuIGFib3J0IHRoYW4KKysJICAgICAgICAgYSBidWcgSSB3aWxsIG5ldmVyIGZpbmQgKi8KKysJICAgICAgYWJvcnQgKCk7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgY21wMSA9IEdFTl9JTlQgKG5ldyk7CisrCX0KKysgICAgfQorKworKyAgZWxzZSBpZiAocF9pbmZvLT5yZXZlcnNlX3JlZ3MpCisrICAgIHsKKysgICAgICBydHggdGVtcCA9IGNtcDA7CisrICAgICAgY21wMCA9IGNtcDE7CisrICAgICAgY21wMSA9IHRlbXA7CisrICAgIH0KKysKKysKKysKKysgIGlmIChicmFuY2hfcCkKKysgICAgeworKyAgICAgIGlmIChyZWdpc3Rlcl9vcGVyYW5kIChjbXAwLCBtb2RlKSAmJiByZWdpc3Rlcl9vcGVyYW5kIChjbXAxLCBtb2RlKSkKKysJeworKwkgIHJ0eCBpbnNuOworKwkgIHJ0eCBjb25kID0gZ2VuX3J0eCAocF9pbmZvLT50ZXN0X2NvZGVfcmVnLCBtb2RlLCBjbXAwLCBjbXAxKTsKKysJICBydHggbGFiZWwgPSBnZW5fcnR4X0xBQkVMX1JFRiAoVk9JRG1vZGUsIGRlc3RpbmF0aW9uKTsKKysKKysJICBpbnNuID0gZ2VuX3J0eF9TRVQgKFZPSURtb2RlLCBwY19ydHgsCisrCQkJICAgICAgZ2VuX3J0eF9JRl9USEVOX0VMU0UgKFZPSURtb2RlLAorKwkJCQkJCSAgICBjb25kLCBsYWJlbCwgcGNfcnR4KSk7CisrCSAgZW1pdF9qdW1wX2luc24gKGluc24pOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgcnR4IGNvbmQsIGxhYmVsOworKworKwkgIHJlc3VsdCA9IGdlbl9yZWdfcnR4IChtb2RlKTsKKysKKysJICBlbWl0X21vdmVfaW5zbiAocmVzdWx0LAorKwkJCSAgZ2VuX3J0eCAocF9pbmZvLT50ZXN0X2NvZGVfY29uc3QsIG1vZGUsIGNtcDAsCisrCQkJCSAgIGNtcDEpKTsKKysKKysJICBjb25kID0gZ2VuX3J0eCAoTkUsIG1vZGUsIHJlc3VsdCwgY29uc3QwX3J0eCk7CisrCSAgbGFiZWwgPSBnZW5fcnR4X0xBQkVMX1JFRiAoVk9JRG1vZGUsIGRlc3RpbmF0aW9uKTsKKysKKysJICBlbWl0X2p1bXBfaW5zbiAoZ2VuX3J0eF9TRVQgKFZPSURtb2RlLCBwY19ydHgsCisrCQkJCSAgICAgICBnZW5fcnR4X0lGX1RIRU5fRUxTRSAoVk9JRG1vZGUsCisrCQkJCQkJCSAgICAgY29uZCwKKysJCQkJCQkJICAgICBsYWJlbCwgcGNfcnR4KSkpOworKwl9CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGlmIChyZWdpc3Rlcl9vcGVyYW5kIChjbXAwLCBtb2RlKSAmJiByZWdpc3Rlcl9vcGVyYW5kIChjbXAxLCBtb2RlKSkKKysJeworKwkgIGVtaXRfbW92ZV9pbnNuIChyZXN1bHQsCisrCQkJICBnZW5fcnR4IChwX2luZm8tPnRlc3RfY29kZV9yZWcsIG1vZGUsIGNtcDAsIGNtcDEpKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGVtaXRfbW92ZV9pbnNuIChyZXN1bHQsCisrCQkJICBnZW5fcnR4IChwX2luZm8tPnRlc3RfY29kZV9jb25zdCwgbW9kZSwgY21wMCwKKysJCQkJICAgY21wMSkpOworKwl9CisrICAgIH0KKysKKyt9CisrCisrCisrLyogPz8/IEZvciBub3cgY29uZGl0aW9uYWwgbW92ZXMgYXJlIG9ubHkgc3VwcG9ydGVkCisrICAgd2hlbiB0aGUgbW9kZSBvZiB0aGUgb3BlcmFuZHMgYmVpbmcgY29tcGFyZWQgYXJlCisrICAgdGhlIHNhbWUgYXMgdGhlIG9uZXMgYmVpbmcgbW92ZWQgKi8KKysKKyt2b2lkCisrZ2VuX2NvbmRpdGlvbmFsX21vdmUgKHJ0eCAqb3BlcmFuZHMsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUpCisreworKyAgcnR4IGluc24sIGNvbmQ7CisrICBydHggY21wX3JlZyA9IGdlbl9yZWdfcnR4IChtb2RlKTsKKysgIGVudW0gcnR4X2NvZGUgY21wX2NvZGUgPSBHRVRfQ09ERSAob3BlcmFuZHNbMV0pOworKyAgZW51bSBydHhfY29kZSBtb3ZlX2NvZGUgPSBFUTsKKysKKysgIC8qIGVtaXQgYSBjb21wYXJpc29uIGlmIGl0IGlzIG5vdCAic2ltcGxlIi4KKysgICAgIFNpbXBsZSBjb21wYXJpc29ucyBhcmUgWCBlcSAwIGFuZCBYIG5lIDAgKi8KKysgIGlmICgoY21wX2NvZGUgPT0gRVEgfHwgY21wX2NvZGUgPT0gTkUpICYmIGJyYW5jaF9jbXBbMV0gPT0gY29uc3QwX3J0eCkKKysgICAgeworKyAgICAgIGNtcF9yZWcgPSBicmFuY2hfY21wWzBdOworKyAgICAgIG1vdmVfY29kZSA9IGNtcF9jb2RlOworKyAgICB9CisrICBlbHNlIGlmICgoY21wX2NvZGUgPT0gRVEgfHwgY21wX2NvZGUgPT0gTkUpICYmIGJyYW5jaF9jbXBbMF0gPT0gY29uc3QwX3J0eCkKKysgICAgeworKyAgICAgIGNtcF9yZWcgPSBicmFuY2hfY21wWzFdOworKyAgICAgIG1vdmVfY29kZSA9IGNtcF9jb2RlID09IEVRID8gTkUgOiBFUTsKKysgICAgfQorKyAgZWxzZQorKyAgICBnZW5faW50X3JlbGF0aW9uYWwgKGNtcF9jb2RlLCBjbXBfcmVnLCBicmFuY2hfY21wWzBdLCBicmFuY2hfY21wWzFdLAorKwkJCU5VTExfUlRYKTsKKysKKysgIGNvbmQgPSBnZW5fcnR4IChtb3ZlX2NvZGUsIFZPSURtb2RlLCBjbXBfcmVnLCBDT05TVDBfUlRYIChtb2RlKSk7CisrICBpbnNuID0gZ2VuX3J0eF9TRVQgKG1vZGUsIG9wZXJhbmRzWzBdLAorKwkJICAgICAgZ2VuX3J0eF9JRl9USEVOX0VMU0UgKG1vZGUsCisrCQkJCQkgICAgY29uZCwgb3BlcmFuZHNbMl0sIG9wZXJhbmRzWzNdKSk7CisrICBlbWl0X2luc24gKGluc24pOworK30KKysKKysvKioqKioqKioqKioqKioqKioqKgorKyAqIEFkZHJlc3NpbmcgTW9kZXMKKysgKioqKioqKioqKioqKioqKioqKi8KKysKKytpbnQKKytuaW9zMl9sZWdpdGltYXRlX2FkZHJlc3MgKHJ0eCBvcGVyYW5kLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlIEFUVFJJQlVURV9VTlVTRUQsIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0cmljdCkKKyt7CisrICBpbnQgcmV0X3ZhbCA9IDA7CisrCisrICBzd2l0Y2ggKEdFVF9DT0RFIChvcGVyYW5kKSkKKysgICAgeworKyAgICAgIC8qIGRpcmVjdC4gICovCisrICAgIGNhc2UgU1lNQk9MX1JFRjoKKysgICAgICBpZiAoU1lNQk9MX1JFRl9JTl9OSU9TMl9TTUFMTF9EQVRBX1AgKG9wZXJhbmQpKQorKyAgICAgICAgeworKyAgICAgICAgICByZXRfdmFsID0gMTsKKysgICAgICAgICAgYnJlYWs7CisrCX0KKysgICAgICAvKiBlbHNlLCBmYWxsIHRocm91Z2ggKi8KKysgICAgY2FzZSBMQUJFTF9SRUY6CisrICAgIGNhc2UgQ09OU1RfSU5UOgorKyAgICBjYXNlIENPTlNUOgorKyAgICBjYXNlIENPTlNUX0RPVUJMRToKKysgICAgICAvKiA/Pz8gSW4gaGVyZSBJIG5lZWQgdG8gYWRkIGdwIGFkZHJlc3NpbmcgKi8KKysgICAgICByZXRfdmFsID0gMDsKKysKKysgICAgICBicmVhazsKKysKKysgICAgICAvKiBSZWdpc3RlciBpbmRpcmVjdC4gICovCisrICAgIGNhc2UgUkVHOgorKyAgICAgIHJldF92YWwgPSBSRUdfT0tfRk9SX0JBU0VfUDIgKG9wZXJhbmQsIHN0cmljdCk7CisrICAgICAgYnJlYWs7CisrCisrICAgICAgLyogUmVnaXN0ZXIgaW5kaXJlY3Qgd2l0aCBkaXNwbGFjZW1lbnQgKi8KKysgICAgY2FzZSBQTFVTOgorKyAgICAgIHsKKysJcnR4IG9wMCA9IFhFWFAgKG9wZXJhbmQsIDApOworKwlydHggb3AxID0gWEVYUCAob3BlcmFuZCwgMSk7CisrCisrCWlmIChSRUdfUCAob3AwKSAmJiBSRUdfUCAob3AxKSkKKysJICByZXRfdmFsID0gMDsKKysJZWxzZSBpZiAoUkVHX1AgKG9wMCkgJiYgQ09OU1RBTlRfUCAob3AxKSkKKysJICByZXRfdmFsID0gUkVHX09LX0ZPUl9CQVNFX1AyIChvcDAsIHN0cmljdCkKKysJICAgICYmIFNNQUxMX0lOVCAoSU5UVkFMIChvcDEpKTsKKysJZWxzZSBpZiAoUkVHX1AgKG9wMSkgJiYgQ09OU1RBTlRfUCAob3AwKSkKKysJICByZXRfdmFsID0gUkVHX09LX0ZPUl9CQVNFX1AyIChvcDEsIHN0cmljdCkKKysJICAgICYmIFNNQUxMX0lOVCAoSU5UVkFMIChvcDApKTsKKysJZWxzZQorKwkgIHJldF92YWwgPSAwOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysKKysgICAgZGVmYXVsdDoKKysgICAgICByZXRfdmFsID0gMDsKKysgICAgICBicmVhazsKKysgICAgfQorKworKyAgcmV0dXJuIHJldF92YWw7CisrfQorKworKy8qIFJldHVybiB0cnVlIGlmIEVYUCBzaG91bGQgYmUgcGxhY2VkIGluIHRoZSBzbWFsbCBkYXRhIHNlY3Rpb24uICAqLworKworK3N0YXRpYyBib29sCisrbmlvczJfaW5fc21hbGxfZGF0YV9wICh0cmVlIGV4cCkKKyt7CisrICAvKiBXZSB3YW50IHRvIG1lcmdlIHN0cmluZ3MsIHNvIHdlIG5ldmVyIGNvbnNpZGVyIHRoZW0gc21hbGwgZGF0YS4gICovCisrICBpZiAoVFJFRV9DT0RFIChleHApID09IFNUUklOR19DU1QpCisrICAgIHJldHVybiBmYWxzZTsKKysKKysgIGlmIChUUkVFX0NPREUgKGV4cCkgPT0gVkFSX0RFQ0wgJiYgREVDTF9TRUNUSU9OX05BTUUgKGV4cCkpCisrICAgIHsKKysgICAgICBjb25zdCBjaGFyICpzZWN0aW9uID0gVFJFRV9TVFJJTkdfUE9JTlRFUiAoREVDTF9TRUNUSU9OX05BTUUgKGV4cCkpOworKyAgICAgIC8qID8/PyB0aGVzZSBzdHJpbmcgbmFtZXMgbmVlZCBtb3ZpbmcgaW50byAKKysgICAgICAgICBhbiBhcnJheSBpbiBzb21lIGhlYWRlciBmaWxlICovCisrICAgICAgaWYgKG5pb3MyX3NlY3Rpb25fdGhyZXNob2xkID4gMAorKyAgICAgICAgICAmJiAoc3RyY21wIChzZWN0aW9uLCAiLnNic3MiKSA9PSAwCisrCSAgICAgIHx8IHN0cm5jbXAgKHNlY3Rpb24sICIuc2Jzcy4iLCA2KSA9PSAwCisrCSAgICAgIHx8IHN0cmNtcCAoc2VjdGlvbiwgIi5zZGF0YSIpID09IDAKKysJICAgICAgfHwgc3RybmNtcCAoc2VjdGlvbiwgIi5zZGF0YS4iLCA3KSA9PSAwKSkKKysJcmV0dXJuIHRydWU7CisrICAgIH0KKysgIGVsc2UgaWYgKFRSRUVfQ09ERSAoZXhwKSA9PSBWQVJfREVDTCkKKysgICAgeworKyAgICAgIEhPU1RfV0lERV9JTlQgc2l6ZSA9IGludF9zaXplX2luX2J5dGVzIChUUkVFX1RZUEUgKGV4cCkpOworKworKyAgICAgIC8qIElmIHRoaXMgaXMgYW4gaW5jb21wbGV0ZSB0eXBlIHdpdGggc2l6ZSAwLCB0aGVuIHdlIGNhbid0IHB1dCBpdAorKyAgICAgICAgIGluIHNkYXRhIGJlY2F1c2UgaXQgbWlnaHQgYmUgdG9vIGJpZyB3aGVuIGNvbXBsZXRlZC4gICovCisrICAgICAgaWYgKHNpemUgPiAwICYmIHNpemUgPD0gbmlvczJfc2VjdGlvbl90aHJlc2hvbGQpCisrCXJldHVybiB0cnVlOworKyAgICB9CisrCisrICByZXR1cm4gZmFsc2U7CisrfQorKworK3N0YXRpYyB2b2lkCisrbmlvczJfZW5jb2RlX3NlY3Rpb25faW5mbyAodHJlZSBkZWNsLCBydHggcnRsLCBpbnQgZmlyc3QpCisreworKworKyAgcnR4IHN5bWJvbDsKKysgIGludCBmbGFnczsKKysKKysgIGRlZmF1bHRfZW5jb2RlX3NlY3Rpb25faW5mbyAoZGVjbCwgcnRsLCBmaXJzdCk7CisrICAKKysgIC8qIENhcmVmdWwgbm90IHRvIHByb2QgZ2xvYmFsIHJlZ2lzdGVyIHZhcmlhYmxlcy4gICovCisrICBpZiAoR0VUX0NPREUgKHJ0bCkgIT0gTUVNKQorKyAgICByZXR1cm47CisrICBzeW1ib2wgPSBYRVhQIChydGwsIDApOworKyAgaWYgKEdFVF9DT0RFIChzeW1ib2wpICE9IFNZTUJPTF9SRUYpCisrICAgIHJldHVybjsKKysKKysgIGZsYWdzID0gU1lNQk9MX1JFRl9GTEFHUyAoc3ltYm9sKTsKKysgICAgCisrICAvKiBXZSBkb24ndCB3YW50IHdlYWsgdmFyaWFibGVzIHRvIGJlIGFkZHJlc3NlZCB3aXRoIGdwIGluIGNhc2UgdGhleSBlbmQgdXAgd2l0aAorKyAgICAgdmFsdWUgMCB3aGljaCBpcyBub3Qgd2l0aGluIDJeMTUgb2YgJGdwICovCisrICBpZiAoREVDTF9QIChkZWNsKSAmJiBERUNMX1dFQUsgKGRlY2wpKQorKyAgICBmbGFncyB8PSBTWU1CT0xfRkxBR19XRUFLX0RFQ0w7CisrCisrICBTWU1CT0xfUkVGX0ZMQUdTIChzeW1ib2wpID0gZmxhZ3M7CisrfQorKworKworK3N0YXRpYyB1bnNpZ25lZCBpbnQKKytuaW9zMl9zZWN0aW9uX3R5cGVfZmxhZ3MgKHRyZWUgZGVjbCwgY29uc3QgY2hhciAqbmFtZSwgaW50IHJlbG9jKQorK3sKKysgIHVuc2lnbmVkIGludCBmbGFnczsKKysKKysgIGZsYWdzID0gZGVmYXVsdF9zZWN0aW9uX3R5cGVfZmxhZ3MgKGRlY2wsIG5hbWUsIHJlbG9jKTsKKysKKysgIC8qID8/PyB0aGVzZSBzdHJpbmcgbmFtZXMgbmVlZCBtb3ZpbmcgaW50byBhbiBhcnJheSBpbiBzb21lIGhlYWRlciBmaWxlICovCisrICBpZiAoc3RyY21wIChuYW1lLCAiLnNic3MiKSA9PSAwCisrICAgICAgfHwgc3RybmNtcCAobmFtZSwgIi5zYnNzLiIsIDYpID09IDAKKysgICAgICB8fCBzdHJjbXAgKG5hbWUsICIuc2RhdGEiKSA9PSAwCisrICAgICAgfHwgc3RybmNtcCAobmFtZSwgIi5zZGF0YS4iLCA3KSA9PSAwKQorKyAgICBmbGFncyB8PSBTRUNUSU9OX1NNQUxMOworKworKyAgcmV0dXJuIGZsYWdzOworK30KKysKKysKKysKKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysgKiBEZWZpbmluZyB0aGUgT3V0cHV0IEFzc2VtYmxlciBMYW5ndWFnZQorKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysvKiAtLS0tLS0tLS0tLS0tLSAqCisrICogT3V0cHV0IG9mIERhdGEKKysgKiAtLS0tLS0tLS0tLS0tLSAqLworKworKworKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKKysgKiBPdXRwdXQgb2YgQXNzZW1ibGVyIEluc3RydWN0aW9ucworKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisrCisrCisrLyogcHJpbnQgdGhlIG9wZXJhbmQgT1AgdG8gZmlsZSBzdHJlYW0KKysgICBGSUxFIG1vZGlmaWVkIGJ5IExFVFRFUi4gTEVUVEVSCisrICAgY2FuIGJlIG9uZSBvZjoKKysgICAgIGk6IHByaW50ICJpIiBpZiBPUCBpcyBhbiBpbW1lZGlhdGUsIGV4Y2VwdCAwCisrICAgICBvOiBwcmludCAiaW8iIGlmIE9QIGlzIHZvbGF0aWxlCisrCisrICAgICB6OiBmb3IgY29uc3QwX3J0eCBwcmludCAkMCBpbnN0ZWFkIG9mIDAKKysgICAgIEg6IGZvciAlaGlhZGoKKysgICAgIEw6IGZvciAlbG8KKysgICAgIFU6IGZvciB1cHBlciBoYWxmIG9mIDMyIGJpdCB2YWx1ZQorKyAqLworKworK3ZvaWQKKytuaW9zMl9wcmludF9vcGVyYW5kIChGSUxFICpmaWxlLCBydHggb3AsIGludCBsZXR0ZXIpCisreworKworKyAgc3dpdGNoIChsZXR0ZXIpCisrICAgIHsKKysgICAgY2FzZSAnaSc6CisrICAgICAgaWYgKENPTlNUQU5UX1AgKG9wKSAmJiAob3AgIT0gY29uc3QwX3J0eCkpCisrCWZwcmludGYgKGZpbGUsICJpIik7CisrICAgICAgcmV0dXJuOworKworKyAgICBjYXNlICdvJzoKKysgICAgICBpZiAoR0VUX0NPREUgKG9wKSA9PSBNRU0KKysgICAgICAgICAgJiYgKChNRU1fVk9MQVRJTEVfUCAob3ApICYmICFUQVJHRVRfQ0FDSEVfVk9MQVRJTEUpCisrICAgICAgICAgICAgICB8fCBUQVJHRVRfQllQQVNTX0NBQ0hFKSkKKysJZnByaW50ZiAoZmlsZSwgImlvIik7CisrICAgICAgcmV0dXJuOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIGJyZWFrOworKyAgICB9CisrCisrICBpZiAoY29tcGFyaXNvbl9vcGVyYXRvciAob3AsIFZPSURtb2RlKSkKKysgICAgeworKyAgICAgIGlmIChsZXR0ZXIgPT0gMCkKKysJeworKwkgIGZwcmludGYgKGZpbGUsICIlcyIsIEdFVF9SVFhfTkFNRSAoR0VUX0NPREUgKG9wKSkpOworKwkgIHJldHVybjsKKysJfQorKyAgICB9CisrCisrCisrICBzd2l0Y2ggKEdFVF9DT0RFIChvcCkpCisrICAgIHsKKysgICAgY2FzZSBSRUc6CisrICAgICAgaWYgKGxldHRlciA9PSAwIHx8IGxldHRlciA9PSAneicpCisrCXsKKysJICBmcHJpbnRmIChmaWxlLCAiJXMiLCByZWdfbmFtZXNbUkVHTk8gKG9wKV0pOworKwkgIHJldHVybjsKKysJfQorKworKyAgICBjYXNlIENPTlNUX0lOVDoKKysgICAgICBpZiAoSU5UVkFMIChvcCkgPT0gMCAmJiBsZXR0ZXIgPT0gJ3onKQorKwl7CisrCSAgZnByaW50ZiAoZmlsZSwgInplcm8iKTsKKysJICByZXR1cm47CisrCX0KKysgICAgICBlbHNlIGlmIChsZXR0ZXIgPT0gJ1UnKQorKwl7CisrCSAgSE9TVF9XSURFX0lOVCB2YWwgPSBJTlRWQUwgKG9wKTsKKysJICBydHggbmV3X29wOworKwkgIHZhbCA9ICh2YWwgLyA2NTUzNikgJiAweEZGRkY7CisrCSAgbmV3X29wID0gR0VOX0lOVCAodmFsKTsKKysJICBvdXRwdXRfYWRkcl9jb25zdCAoZmlsZSwgbmV3X29wKTsKKysJICByZXR1cm47CisrCX0KKysKKysgICAgICAvKiBlbHNlLCBmYWxsIHRocm91Z2ggKi8KKysgICAgY2FzZSBDT05TVDoKKysgICAgY2FzZSBMQUJFTF9SRUY6CisrICAgIGNhc2UgU1lNQk9MX1JFRjoKKysgICAgY2FzZSBDT05TVF9ET1VCTEU6CisrICAgICAgaWYgKGxldHRlciA9PSAwIHx8IGxldHRlciA9PSAneicpCisrCXsKKysJICBvdXRwdXRfYWRkcl9jb25zdCAoZmlsZSwgb3ApOworKwkgIHJldHVybjsKKysJfQorKyAgICAgIGVsc2UgaWYgKGxldHRlciA9PSAnSCcpCisrCXsKKysJICBmcHJpbnRmIChmaWxlLCAiJSVoaWFkaigiKTsKKysJICBvdXRwdXRfYWRkcl9jb25zdCAoZmlsZSwgb3ApOworKwkgIGZwcmludGYgKGZpbGUsICIpIik7CisrCSAgcmV0dXJuOworKwl9CisrICAgICAgZWxzZSBpZiAobGV0dGVyID09ICdMJykKKysJeworKwkgIGZwcmludGYgKGZpbGUsICIlJWxvKCIpOworKwkgIG91dHB1dF9hZGRyX2NvbnN0IChmaWxlLCBvcCk7CisrCSAgZnByaW50ZiAoZmlsZSwgIikiKTsKKysJICByZXR1cm47CisrCX0KKysKKysKKysgICAgY2FzZSBTVUJSRUc6CisrICAgIGNhc2UgTUVNOgorKyAgICAgIGlmIChsZXR0ZXIgPT0gMCkKKysJeworKwkgIG91dHB1dF9hZGRyZXNzIChvcCk7CisrCSAgcmV0dXJuOworKwl9CisrCisrICAgIGNhc2UgQ09ERV9MQUJFTDoKKysgICAgICBpZiAobGV0dGVyID09IDApCisrCXsKKysJICBvdXRwdXRfYWRkcl9jb25zdCAoZmlsZSwgb3ApOworKwkgIHJldHVybjsKKysJfQorKworKyAgICBkZWZhdWx0OgorKyAgICAgIGJyZWFrOworKyAgICB9CisrCisrICBmcHJpbnRmIChzdGRlcnIsICJNaXNzaW5nIHdheSB0byBwcmludCAoJWMpICIsIGxldHRlcik7CisrICBkZWJ1Z19ydHggKG9wKTsKKysgIGFib3J0ICgpOworK30KKysKKytzdGF0aWMgaW50IGdwcmVsX2NvbnN0YW50IChydHgpOworKworK3N0YXRpYyBpbnQKKytncHJlbF9jb25zdGFudCAocnR4IG9wKQorK3sKKysgIGlmIChHRVRfQ09ERSAob3ApID09IFNZTUJPTF9SRUYKKysgICAgICAmJiBTWU1CT0xfUkVGX0lOX05JT1MyX1NNQUxMX0RBVEFfUCAob3ApKQorKyAgICB7CisrICAgICAgcmV0dXJuIDE7CisrICAgIH0KKysgIGVsc2UgaWYgKEdFVF9DT0RFIChvcCkgPT0gQ09OU1QKKysgICAgICAgICAgICYmIEdFVF9DT0RFIChYRVhQIChvcCwgMCkpID09IFBMVVMpCisrICAgIHsKKysgICAgICByZXR1cm4gZ3ByZWxfY29uc3RhbnQgKFhFWFAgKFhFWFAgKG9wLCAwKSwgMCkpOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorK30KKysKKyt2b2lkCisrbmlvczJfcHJpbnRfb3BlcmFuZF9hZGRyZXNzIChGSUxFICpmaWxlLCBydHggb3ApCisreworKyAgc3dpdGNoIChHRVRfQ09ERSAob3ApKQorKyAgICB7CisrICAgIGNhc2UgQ09OU1Q6CisrICAgIGNhc2UgQ09OU1RfSU5UOgorKyAgICBjYXNlIExBQkVMX1JFRjoKKysgICAgY2FzZSBDT05TVF9ET1VCTEU6CisrICAgIGNhc2UgU1lNQk9MX1JFRjoKKysgICAgICBpZiAoZ3ByZWxfY29uc3RhbnQgKG9wKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZnByaW50ZiAoZmlsZSwgIiUlZ3ByZWwoIik7CisrICAgICAgICAgIG91dHB1dF9hZGRyX2NvbnN0IChmaWxlLCBvcCk7CisrICAgICAgICAgIGZwcmludGYgKGZpbGUsICIpKCVzKSIsIHJlZ19uYW1lc1tHUF9SRUdOT10pOworKyAgICAgICAgICByZXR1cm47CisrICAgICAgICB9CisrCisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgUExVUzoKKysgICAgICB7CisrCXJ0eCBvcDAgPSBYRVhQIChvcCwgMCk7CisrCXJ0eCBvcDEgPSBYRVhQIChvcCwgMSk7CisrCisrCWlmIChSRUdfUCAob3AwKSAmJiBDT05TVEFOVF9QIChvcDEpKQorKwkgIHsKKysJICAgIG91dHB1dF9hZGRyX2NvbnN0IChmaWxlLCBvcDEpOworKwkgICAgZnByaW50ZiAoZmlsZSwgIiglcykiLCByZWdfbmFtZXNbUkVHTk8gKG9wMCldKTsKKysJICAgIHJldHVybjsKKysJICB9CisrCWVsc2UgaWYgKFJFR19QIChvcDEpICYmIENPTlNUQU5UX1AgKG9wMCkpCisrCSAgeworKwkgICAgb3V0cHV0X2FkZHJfY29uc3QgKGZpbGUsIG9wMCk7CisrCSAgICBmcHJpbnRmIChmaWxlLCAiKCVzKSIsIHJlZ19uYW1lc1tSRUdOTyAob3AxKV0pOworKwkgICAgcmV0dXJuOworKwkgIH0KKysgICAgICB9CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgUkVHOgorKyAgICAgIGZwcmludGYgKGZpbGUsICIwKCVzKSIsIHJlZ19uYW1lc1tSRUdOTyAob3ApXSk7CisrICAgICAgcmV0dXJuOworKworKyAgICBjYXNlIE1FTToKKysgICAgICB7CisrCXJ0eCBiYXNlID0gWEVYUCAob3AsIDApOworKwlQUklOVF9PUEVSQU5EX0FERFJFU1MgKGZpbGUsIGJhc2UpOworKwlyZXR1cm47CisrICAgICAgfQorKyAgICBkZWZhdWx0OgorKyAgICAgIGJyZWFrOworKyAgICB9CisrCisrICBmcHJpbnRmIChzdGRlcnIsICJNaXNzaW5nIHdheSB0byBwcmludCBhZGRyZXNzXG4iKTsKKysgIGRlYnVnX3J0eCAob3ApOworKyAgYWJvcnQgKCk7CisrfQorKwwKKysKKysKKysKKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKyAqIFByZWRpY2F0ZXMKKysgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytpbnQKKythcml0aF9vcGVyYW5kIChydHggb3AsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUpCisreworKyAgaWYgKEdFVF9DT0RFIChvcCkgPT0gQ09OU1RfSU5UICYmIFNNQUxMX0lOVCAoSU5UVkFMIChvcCkpKQorKyAgICByZXR1cm4gMTsKKysKKysgIHJldHVybiByZWdpc3Rlcl9vcGVyYW5kIChvcCwgbW9kZSk7CisrfQorKworK2ludAorK3Vuc19hcml0aF9vcGVyYW5kIChydHggb3AsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUpCisreworKyAgaWYgKEdFVF9DT0RFIChvcCkgPT0gQ09OU1RfSU5UICYmIFNNQUxMX0lOVF9VTlNJR05FRCAoSU5UVkFMIChvcCkpKQorKyAgICByZXR1cm4gMTsKKysKKysgIHJldHVybiByZWdpc3Rlcl9vcGVyYW5kIChvcCwgbW9kZSk7CisrfQorKworK2ludAorK2xvZ2ljYWxfb3BlcmFuZCAocnR4IG9wLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlKQorK3sKKysgIGlmIChHRVRfQ09ERSAob3ApID09IENPTlNUX0lOVAorKyAgICAgICYmIChTTUFMTF9JTlRfVU5TSUdORUQgKElOVFZBTCAob3ApKSB8fCBVUFBFUjE2X0lOVCAoSU5UVkFMIChvcCkpKSkKKysgICAgcmV0dXJuIDE7CisrCisrICByZXR1cm4gcmVnaXN0ZXJfb3BlcmFuZCAob3AsIG1vZGUpOworK30KKysKKytpbnQKKytzaGlmdF9vcGVyYW5kIChydHggb3AsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUpCisreworKyAgaWYgKEdFVF9DT0RFIChvcCkgPT0gQ09OU1RfSU5UICYmIFNISUZUX0lOVCAoSU5UVkFMIChvcCkpKQorKyAgICByZXR1cm4gMTsKKysKKysgIHJldHVybiByZWdpc3Rlcl9vcGVyYW5kIChvcCwgbW9kZSk7CisrfQorKworK2ludAorK3Jkd3JjdGxfb3BlcmFuZCAocnR4IG9wLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlIEFUVFJJQlVURV9VTlVTRUQpCisreworKyAgcmV0dXJuIEdFVF9DT0RFIChvcCkgPT0gQ09OU1RfSU5UICYmIFJEV1JDVExfSU5UIChJTlRWQUwgKG9wKSk7CisrfQorKworKy8qIFJldHVybiB0cnV0aCB2YWx1ZSBvZiB3aGV0aGVyIE9QIGlzIGEgcmVnaXN0ZXIgb3IgdGhlIGNvbnN0YW50IDAuICovCisrCisraW50CisrcmVnX29yXzBfb3BlcmFuZCAocnR4IG9wLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlKQorK3sKKysgIHN3aXRjaCAoR0VUX0NPREUgKG9wKSkKKysgICAgeworKyAgICBjYXNlIENPTlNUX0lOVDoKKysgICAgICByZXR1cm4gSU5UVkFMIChvcCkgPT0gMDsKKysKKysgICAgY2FzZSBDT05TVF9ET1VCTEU6CisrICAgICAgcmV0dXJuIG9wID09IENPTlNUMF9SVFggKG1vZGUpOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIGJyZWFrOworKyAgICB9CisrCisrICByZXR1cm4gcmVnaXN0ZXJfb3BlcmFuZCAob3AsIG1vZGUpOworK30KKysKKysKKytpbnQKKytlcXVhbGl0eV9vcCAocnR4IG9wLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlKQorK3sKKysgIGlmIChtb2RlICE9IEdFVF9NT0RFIChvcCkpCisrICAgIHJldHVybiAwOworKworKyAgcmV0dXJuIEdFVF9DT0RFIChvcCkgPT0gRVEgfHwgR0VUX0NPREUgKG9wKSA9PSBORTsKKyt9CisrCisraW50CisrY3VzdG9tX2luc25fb3Bjb2RlIChydHggb3AsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUgQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICByZXR1cm4gR0VUX0NPREUgKG9wKSA9PSBDT05TVF9JTlQgJiYgQ1VTVE9NX0lOU05fT1BDT0RFIChJTlRWQUwgKG9wKSk7CisrfQorKworKworKwwKKysKKysKKysKKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysqKgorKyoqIGluc3RydWN0aW9uIHNjaGVkdWxlcgorKyoqCisrKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrc3RhdGljIGludAorK25pb3MyX3VzZV9kZmFfcGlwZWxpbmVfaW50ZXJmYWNlICgpCisreworKyAgcmV0dXJuIDE7CisrfQorKworKworK3N0YXRpYyBpbnQKKytuaW9zMl9pc3N1ZV9yYXRlICgpCisreworKyNpZmRlZiBNQVhfREZBX0lTU1VFX1JBVEUKKysgIHJldHVybiBNQVhfREZBX0lTU1VFX1JBVEU7CisrI2Vsc2UKKysgIHJldHVybiAxOworKyNlbmRpZgorK30KKysKKysKKytjb25zdCBjaGFyICoKKythc21fb3V0cHV0X29wY29kZSAoRklMRSAqZmlsZSBBVFRSSUJVVEVfVU5VU0VELCAKKysgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHRyIEFUVFJJQlVURV9VTlVTRUQpCisreworKyAgY29uc3QgY2hhciAqcDsKKysKKysgIHAgPSBwdHI7CisrICByZXR1cm4gcHRyOworK30KKysMCisrCisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisrKioKKysqKiBmdW5jdGlvbiBhcmd1bWVudHMKKysqKgorKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK3ZvaWQKKytpbml0X2N1bXVsYXRpdmVfYXJncyAoQ1VNVUxBVElWRV9BUkdTICpjdW0sIAorKyAgICAgICAgICAgICAgICAgICAgICB0cmVlIGZudHlwZSBBVFRSSUJVVEVfVU5VU0VELCAKKysgICAgICAgICAgICAgICAgICAgICAgcnR4IGxpYm5hbWUgQVRUUklCVVRFX1VOVVNFRCwgCisrICAgICAgICAgICAgICAgICAgICAgIHRyZWUgZm5kZWNsIEFUVFJJQlVURV9VTlVTRUQsIAorKyAgICAgICAgICAgICAgICAgICAgICBpbnQgbl9uYW1lZF9hcmdzIEFUVFJJQlVURV9VTlVTRUQpCisreworKyAgY3VtLT5yZWdzX3VzZWQgPSAwOworK30KKysKKysKKysvKiBVcGRhdGUgdGhlIGRhdGEgaW4gQ1VNIHRvIGFkdmFuY2Ugb3ZlciBhbiBhcmd1bWVudAorKyAgIG9mIG1vZGUgTU9ERSBhbmQgZGF0YSB0eXBlIFRZUEUuCisrICAgKFRZUEUgaXMgbnVsbCBmb3IgbGliY2FsbHMgd2hlcmUgdGhhdCBpbmZvcm1hdGlvbiBtYXkgbm90IGJlIGF2YWlsYWJsZS4pICAqLworKworK3ZvaWQKKytmdW5jdGlvbl9hcmdfYWR2YW5jZSAoQ1VNVUxBVElWRV9BUkdTICpjdW0sIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIAorKyAgICAgICAgICAgICAgICAgICAgICB0cmVlIHR5cGUgQVRUUklCVVRFX1VOVVNFRCwgaW50IG5hbWVkIEFUVFJJQlVURV9VTlVTRUQpCisreworKyAgSE9TVF9XSURFX0lOVCBwYXJhbV9zaXplOworKworKyAgaWYgKG1vZGUgPT0gQkxLbW9kZSkKKysgICAgeworKyAgICAgIHBhcmFtX3NpemUgPSBpbnRfc2l6ZV9pbl9ieXRlcyAodHlwZSk7CisrICAgICAgaWYgKHBhcmFtX3NpemUgPCAwKQorKwlpbnRlcm5hbF9lcnJvcgorKwkgICgiRG8gbm90IGtub3cgaG93IHRvIGhhbmRsZSBsYXJnZSBzdHJ1Y3RzIG9yIHZhcmlhYmxlIGxlbmd0aCB0eXBlcyIpOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBwYXJhbV9zaXplID0gR0VUX01PREVfU0laRSAobW9kZSk7CisrICAgIH0KKysKKysgIC8qIGNvbnZlcnQgdG8gd29yZHMgKHJvdW5kIHVwKSAqLworKyAgcGFyYW1fc2l6ZSA9ICgzICsgcGFyYW1fc2l6ZSkgLyA0OworKworKyAgaWYgKGN1bS0+cmVnc191c2VkICsgcGFyYW1fc2l6ZSA+IE5VTV9BUkdfUkVHUykKKysgICAgeworKyAgICAgIGN1bS0+cmVnc191c2VkID0gTlVNX0FSR19SRUdTOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBjdW0tPnJlZ3NfdXNlZCArPSBwYXJhbV9zaXplOworKyAgICB9CisrCisrICByZXR1cm47CisrfQorKworKy8qIERlZmluZSB3aGVyZSB0byBwdXQgdGhlIGFyZ3VtZW50cyB0byBhIGZ1bmN0aW9uLiAgVmFsdWUgaXMgemVybyB0bworKyAgIHB1c2ggdGhlIGFyZ3VtZW50IG9uIHRoZSBzdGFjaywgb3IgYSBoYXJkIHJlZ2lzdGVyIGluIHdoaWNoIHRvCisrICAgc3RvcmUgdGhlIGFyZ3VtZW50LgorKworKyAgIE1PREUgaXMgdGhlIGFyZ3VtZW50J3MgbWFjaGluZSBtb2RlLgorKyAgIFRZUEUgaXMgdGhlIGRhdGEgdHlwZSBvZiB0aGUgYXJndW1lbnQgKGFzIGEgdHJlZSkuCisrICAgVGhpcyBpcyBudWxsIGZvciBsaWJjYWxscyB3aGVyZSB0aGF0IGluZm9ybWF0aW9uIG1heQorKyAgIG5vdCBiZSBhdmFpbGFibGUuCisrICAgQ1VNIGlzIGEgdmFyaWFibGUgb2YgdHlwZSBDVU1VTEFUSVZFX0FSR1Mgd2hpY2ggZ2l2ZXMgaW5mbyBhYm91dAorKyAgIHRoZSBwcmVjZWRpbmcgYXJncyBhbmQgYWJvdXQgdGhlIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZC4KKysgICBOQU1FRCBpcyBub256ZXJvIGlmIHRoaXMgYXJndW1lbnQgaXMgYSBuYW1lZCBwYXJhbWV0ZXIKKysgICAob3RoZXJ3aXNlIGl0IGlzIGFuIGV4dHJhIHBhcmFtZXRlciBtYXRjaGluZyBhbiBlbGxpcHNpcykuICAqLworK3J0eAorK2Z1bmN0aW9uX2FyZyAoY29uc3QgQ1VNVUxBVElWRV9BUkdTICpjdW0sIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIAorKyAgICAgICAgICAgICAgdHJlZSB0eXBlIEFUVFJJQlVURV9VTlVTRUQsIGludCBuYW1lZCBBVFRSSUJVVEVfVU5VU0VEKQorK3sKKysgIHJ0eCByZXR1cm5fcnR4ID0gTlVMTF9SVFg7CisrCisrICBpZiAoY3VtLT5yZWdzX3VzZWQgPCBOVU1fQVJHX1JFR1MpCisrICAgIHsKKysgICAgICByZXR1cm5fcnR4ID0gZ2VuX3J0eF9SRUcgKG1vZGUsIEZJUlNUX0FSR19SRUdOTyArIGN1bS0+cmVnc191c2VkKTsKKysgICAgfQorKworKyAgcmV0dXJuIHJldHVybl9ydHg7CisrfQorKworK2ludAorK2Z1bmN0aW9uX2FyZ19wYXJ0aWFsX25yZWdzIChjb25zdCBDVU1VTEFUSVZFX0FSR1MgKmN1bSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgdHJlZSB0eXBlLCAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5hbWVkIEFUVFJJQlVURV9VTlVTRUQpCisreworKyAgSE9TVF9XSURFX0lOVCBwYXJhbV9zaXplOworKworKyAgaWYgKG1vZGUgPT0gQkxLbW9kZSkKKysgICAgeworKyAgICAgIHBhcmFtX3NpemUgPSBpbnRfc2l6ZV9pbl9ieXRlcyAodHlwZSk7CisrICAgICAgaWYgKHBhcmFtX3NpemUgPCAwKQorKwlpbnRlcm5hbF9lcnJvcgorKwkgICgiRG8gbm90IGtub3cgaG93IHRvIGhhbmRsZSBsYXJnZSBzdHJ1Y3RzIG9yIHZhcmlhYmxlIGxlbmd0aCB0eXBlcyIpOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBwYXJhbV9zaXplID0gR0VUX01PREVfU0laRSAobW9kZSk7CisrICAgIH0KKysKKysgIC8qIGNvbnZlcnQgdG8gd29yZHMgKHJvdW5kIHVwKSAqLworKyAgcGFyYW1fc2l6ZSA9ICgzICsgcGFyYW1fc2l6ZSkgLyA0OworKworKyAgaWYgKGN1bS0+cmVnc191c2VkIDwgTlVNX0FSR19SRUdTCisrICAgICAgJiYgY3VtLT5yZWdzX3VzZWQgKyBwYXJhbV9zaXplID4gTlVNX0FSR19SRUdTKQorKyAgICB7CisrICAgICAgcmV0dXJuIE5VTV9BUkdfUkVHUyAtIGN1bS0+cmVnc191c2VkOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorK30KKysKKysKKytpbnQKKytuaW9zMl9yZXR1cm5faW5fbWVtb3J5ICh0cmVlIHR5cGUpCisreworKyAgaW50IHJlcyA9ICgoaW50X3NpemVfaW5fYnl0ZXMgKHR5cGUpID4gKDIgKiBVTklUU19QRVJfV09SRCkpCisrICAJICAgICB8fCAoaW50X3NpemVfaW5fYnl0ZXMgKHR5cGUpID09IC0xKSk7CisrCisrICByZXR1cm4gcmVzOworK30KKysKKysvKiA/Pz8gSXQgbWF5IGJlIHBvc3NpYmxlIHRvIGVsaW1pbmF0ZSB0aGUgY29weWJhY2sgYW5kIGltcGxlbWVudAorKyAgICAgICBteSBvd24gdmFfYXJnIHR5cGUsIGJ1dCB0aGF0IGlzIG1vcmUgd29yayBmb3Igbm93LiAqLworK2ludAorK25pb3MyX3NldHVwX2luY29taW5nX3ZhcmFyZ3MgKGNvbnN0IENVTVVMQVRJVkVfQVJHUyAqY3VtLCAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCB0cmVlIHR5cGUsIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBub19ydGwpCisreworKyAgQ1VNVUxBVElWRV9BUkdTIGxvY2FsX2N1bTsKKysgIGludCByZWdzX3RvX3B1c2g7CisrCisrICBsb2NhbF9jdW0gPSAqY3VtOworKyAgRlVOQ1RJT05fQVJHX0FEVkFOQ0UgKGxvY2FsX2N1bSwgbW9kZSwgdHlwZSwgMSk7CisrCisrICByZWdzX3RvX3B1c2ggPSBOVU1fQVJHX1JFR1MgLSBsb2NhbF9jdW0ucmVnc191c2VkOworKworKyAgaWYgKCFub19ydGwpCisrICAgIHsKKysgICAgICBpZiAocmVnc190b19wdXNoID4gMCkKKysJeworKwkgIHJ0eCBwdHIsIG1lbTsKKysKKysJICBwdHIgPSB2aXJ0dWFsX2luY29taW5nX2FyZ3NfcnR4OworKwkgIG1lbSA9IGdlbl9ydHhfTUVNIChCTEttb2RlLCBwdHIpOworKworKwkgIC8qIHZhX2FyZyBpcyBhbiBhcnJheSBhY2Nlc3MgaW4gdGhpcyBjYXNlLCB3aGljaCBjYXVzZXMKKysJICAgICBpdCB0byBnZXQgTUVNX0lOX1NUUlVDVF9QIHNldC4gIFdlIG11c3Qgc2V0IGl0IGhlcmUKKysJICAgICBzbyB0aGF0IHRoZSBpbnNuIHNjaGVkdWxlciB3b24ndCBhc3N1bWUgdGhhdCB0aGVzZQorKwkgICAgIHN0b3JlcyBjYW4ndCBwb3NzaWJseSBvdmVybGFwIHdpdGggdGhlIHZhX2FyZyBsb2Fkcy4gICovCisrCSAgTUVNX1NFVF9JTl9TVFJVQ1RfUCAobWVtLCAxKTsKKysKKysJICBlbWl0X2luc24gKGdlbl9ibG9ja2FnZSAoKSk7CisrCSAgbW92ZV9ibG9ja19mcm9tX3JlZyAobG9jYWxfY3VtLnJlZ3NfdXNlZCArIEZJUlNUX0FSR19SRUdOTywgbWVtLAorKwkJCSAgICAgICByZWdzX3RvX3B1c2gpOworKwkgIGVtaXRfaW5zbiAoZ2VuX2Jsb2NrYWdlICgpKTsKKysJfQorKyAgICB9CisrCisrICByZXR1cm4gcmVnc190b19wdXNoICogVU5JVFNfUEVSX1dPUkQ7CisrCisrfQorKworKworKwwKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysqKgorKyoqIGJ1aWx0aW5zCisrKioKKysqKiBUaGlzIG1ldGhvZCBmb3IgaGFuZGxpbmcgYnVpbHRpbnMgaXMgZnJvbSBDU1Agd2hlcmUgX21hbnlfIG1vcmUgdHlwZXMgb2YKKysqKiBleHBhbmRlcnMgaGF2ZSBhbHJlYWR5IGJlZW4gd3JpdHRlbi4gQ2hlY2sgdGhlcmUgZmlyc3QgYmVmb3JlIHdyaXRpbmcKKysqKiBuZXcgb25lcy4KKysqKgorKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK2VudW0gbmlvczJfYnVpbHRpbnMKKyt7CisrICBOSU9TMl9CVUlMVElOX0xEQklPLAorKyAgTklPUzJfQlVJTFRJTl9MREJVSU8sCisrICBOSU9TMl9CVUlMVElOX0xESElPLAorKyAgTklPUzJfQlVJTFRJTl9MREhVSU8sCisrICBOSU9TMl9CVUlMVElOX0xEV0lPLAorKyAgTklPUzJfQlVJTFRJTl9TVEJJTywKKysgIE5JT1MyX0JVSUxUSU5fU1RISU8sCisrICBOSU9TMl9CVUlMVElOX1NUV0lPLAorKyAgTklPUzJfQlVJTFRJTl9TWU5DLAorKyAgTklPUzJfQlVJTFRJTl9SRENUTCwKKysgIE5JT1MyX0JVSUxUSU5fV1JDVEwsCisrCisrICBOSU9TMl9CVUlMVElOX0NVU1RPTV9OLAorKyAgTklPUzJfQlVJTFRJTl9DVVNUT01fTkksCisrICBOSU9TMl9CVUlMVElOX0NVU1RPTV9ORiwKKysgIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX05QLAorKyAgTklPUzJfQlVJTFRJTl9DVVNUT01fTklJLAorKyAgTklPUzJfQlVJTFRJTl9DVVNUT01fTklGLAorKyAgTklPUzJfQlVJTFRJTl9DVVNUT01fTklQLAorKyAgTklPUzJfQlVJTFRJTl9DVVNUT01fTkZJLAorKyAgTklPUzJfQlVJTFRJTl9DVVNUT01fTkZGLAorKyAgTklPUzJfQlVJTFRJTl9DVVNUT01fTkZQLAorKyAgTklPUzJfQlVJTFRJTl9DVVNUT01fTlBJLAorKyAgTklPUzJfQlVJTFRJTl9DVVNUT01fTlBGLAorKyAgTklPUzJfQlVJTFRJTl9DVVNUT01fTlBQLAorKyAgTklPUzJfQlVJTFRJTl9DVVNUT01fSU4sCisrICBOSU9TMl9CVUlMVElOX0NVU1RPTV9JTkksCisrICBOSU9TMl9CVUlMVElOX0NVU1RPTV9JTkYsCisrICBOSU9TMl9CVUlMVElOX0NVU1RPTV9JTlAsCisrICBOSU9TMl9CVUlMVElOX0NVU1RPTV9JTklJLAorKyAgTklPUzJfQlVJTFRJTl9DVVNUT01fSU5JRiwKKysgIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX0lOSVAsCisrICBOSU9TMl9CVUlMVElOX0NVU1RPTV9JTkZJLAorKyAgTklPUzJfQlVJTFRJTl9DVVNUT01fSU5GRiwKKysgIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX0lORlAsCisrICBOSU9TMl9CVUlMVElOX0NVU1RPTV9JTlBJLAorKyAgTklPUzJfQlVJTFRJTl9DVVNUT01fSU5QRiwKKysgIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX0lOUFAsCisrICBOSU9TMl9CVUlMVElOX0NVU1RPTV9GTiwKKysgIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX0ZOSSwKKysgIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX0ZORiwKKysgIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX0ZOUCwKKysgIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX0ZOSUksCisrICBOSU9TMl9CVUlMVElOX0NVU1RPTV9GTklGLAorKyAgTklPUzJfQlVJTFRJTl9DVVNUT01fRk5JUCwKKysgIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX0ZORkksCisrICBOSU9TMl9CVUlMVElOX0NVU1RPTV9GTkZGLAorKyAgTklPUzJfQlVJTFRJTl9DVVNUT01fRk5GUCwKKysgIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX0ZOUEksCisrICBOSU9TMl9CVUlMVElOX0NVU1RPTV9GTlBGLAorKyAgTklPUzJfQlVJTFRJTl9DVVNUT01fRk5QUCwKKysgIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX1BOLAorKyAgTklPUzJfQlVJTFRJTl9DVVNUT01fUE5JLAorKyAgTklPUzJfQlVJTFRJTl9DVVNUT01fUE5GLAorKyAgTklPUzJfQlVJTFRJTl9DVVNUT01fUE5QLAorKyAgTklPUzJfQlVJTFRJTl9DVVNUT01fUE5JSSwKKysgIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX1BOSUYsCisrICBOSU9TMl9CVUlMVElOX0NVU1RPTV9QTklQLAorKyAgTklPUzJfQlVJTFRJTl9DVVNUT01fUE5GSSwKKysgIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX1BORkYsCisrICBOSU9TMl9CVUlMVElOX0NVU1RPTV9QTkZQLAorKyAgTklPUzJfQlVJTFRJTl9DVVNUT01fUE5QSSwKKysgIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX1BOUEYsCisrICBOSU9TMl9CVUlMVElOX0NVU1RPTV9QTlBQLAorKworKworKyAgTElNX05JT1MyX0JVSUxUSU5TCisrfTsKKysKKytzdHJ1Y3QgYnVpbHRpbl9kZXNjcmlwdGlvbgorK3sKKysgICAgY29uc3QgZW51bSBpbnNuX2NvZGUgaWNvZGU7CisrICAgIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWU7CisrICAgIGNvbnN0IGVudW0gbmlvczJfYnVpbHRpbnMgY29kZTsKKysgICAgY29uc3QgdHJlZSAqdHlwZTsKKysgICAgcnR4ICgqIGV4cGFuZGVyKSBQQVJBTVMgKChjb25zdCBzdHJ1Y3QgYnVpbHRpbl9kZXNjcmlwdGlvbiAqLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWUsIHJ0eCwgcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgaW50KSk7CisrfTsKKysKKytzdGF0aWMgcnR4IG5pb3MyX2V4cGFuZF9TVFhJTyAoY29uc3Qgc3RydWN0IGJ1aWx0aW5fZGVzY3JpcHRpb24gKiwgCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWUsIHJ0eCwgcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgaW50KTsKKytzdGF0aWMgcnR4IG5pb3MyX2V4cGFuZF9MRFhJTyAoY29uc3Qgc3RydWN0IGJ1aWx0aW5fZGVzY3JpcHRpb24gKiwgCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWUsIHJ0eCwgcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgaW50KTsKKytzdGF0aWMgcnR4IG5pb3MyX2V4cGFuZF9zeW5jIChjb25zdCBzdHJ1Y3QgYnVpbHRpbl9kZXNjcmlwdGlvbiAqLCAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVlLCBydHgsIHJ0eCwgZW51bSBtYWNoaW5lX21vZGUsIGludCk7Cisrc3RhdGljIHJ0eCBuaW9zMl9leHBhbmRfcmRjdGwgKGNvbnN0IHN0cnVjdCBidWlsdGluX2Rlc2NyaXB0aW9uICosIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVlLCBydHgsIHJ0eCwgZW51bSBtYWNoaW5lX21vZGUsIGludCk7Cisrc3RhdGljIHJ0eCBuaW9zMl9leHBhbmRfd3JjdGwgKGNvbnN0IHN0cnVjdCBidWlsdGluX2Rlc2NyaXB0aW9uICosIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVlLCBydHgsIHJ0eCwgZW51bSBtYWNoaW5lX21vZGUsIGludCk7CisrCisrc3RhdGljIHJ0eCBuaW9zMl9leHBhbmRfY3VzdG9tX24gKGNvbnN0IHN0cnVjdCBidWlsdGluX2Rlc2NyaXB0aW9uICosIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVlLCBydHgsIHJ0eCwgZW51bSBtYWNoaW5lX21vZGUsIGludCk7Cisrc3RhdGljIHJ0eCBuaW9zMl9leHBhbmRfY3VzdG9tX1huIChjb25zdCBzdHJ1Y3QgYnVpbHRpbl9kZXNjcmlwdGlvbiAqLCAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWUsIHJ0eCwgcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgaW50KTsKKytzdGF0aWMgcnR4IG5pb3MyX2V4cGFuZF9jdXN0b21fblggKGNvbnN0IHN0cnVjdCBidWlsdGluX2Rlc2NyaXB0aW9uICosIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZSwgcnR4LCBydHgsIGVudW0gbWFjaGluZV9tb2RlLCBpbnQpOworK3N0YXRpYyBydHggbmlvczJfZXhwYW5kX2N1c3RvbV9YblggKGNvbnN0IHN0cnVjdCBidWlsdGluX2Rlc2NyaXB0aW9uICosIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWUsIHJ0eCwgcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgaW50KTsKKytzdGF0aWMgcnR4IG5pb3MyX2V4cGFuZF9jdXN0b21fblhYIChjb25zdCBzdHJ1Y3QgYnVpbHRpbl9kZXNjcmlwdGlvbiAqLCAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVlLCBydHgsIHJ0eCwgZW51bSBtYWNoaW5lX21vZGUsIGludCk7Cisrc3RhdGljIHJ0eCBuaW9zMl9leHBhbmRfY3VzdG9tX1huWFggKGNvbnN0IHN0cnVjdCBidWlsdGluX2Rlc2NyaXB0aW9uICosIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVlLCBydHgsIHJ0eCwgZW51bSBtYWNoaW5lX21vZGUsIGludCk7CisrCisrc3RhdGljIHRyZWUgZW5kbGluazsKKysKKysvKiBpbnQgZm4gKHZvbGF0aWxlIGNvbnN0IHZvaWQgKikKKysgKi8KKytzdGF0aWMgdHJlZSBpbnRfZnR5cGVfdm9sYXRpbGVfY29uc3Rfdm9pZF9wOworKworKy8qIGludCBmbiAoaW50KQorKyAqLworK3N0YXRpYyB0cmVlIGludF9mdHlwZV9pbnQ7CisrCisrLyogdm9pZCBmbiAoaW50LCBpbnQpCisrICovCisrc3RhdGljIHRyZWUgdm9pZF9mdHlwZV9pbnRfaW50OworKworKy8qIHZvaWQgZm4gKHZvbGF0aWxlIHZvaWQgKiwgaW50KQorKyAqLworK3N0YXRpYyB0cmVlIHZvaWRfZnR5cGVfdm9sYXRpbGVfdm9pZF9wX2ludDsKKysKKysvKiB2b2lkIGZuICh2b2lkKQorKyAqLworK3N0YXRpYyB0cmVlIHZvaWRfZnR5cGVfdm9pZDsKKysKKytzdGF0aWMgdHJlZSBjdXN0b21fbjsKKytzdGF0aWMgdHJlZSBjdXN0b21fbmk7Cisrc3RhdGljIHRyZWUgY3VzdG9tX25mOworK3N0YXRpYyB0cmVlIGN1c3RvbV9ucDsKKytzdGF0aWMgdHJlZSBjdXN0b21fbmlpOworK3N0YXRpYyB0cmVlIGN1c3RvbV9uaWY7Cisrc3RhdGljIHRyZWUgY3VzdG9tX25pcDsKKytzdGF0aWMgdHJlZSBjdXN0b21fbmZpOworK3N0YXRpYyB0cmVlIGN1c3RvbV9uZmY7Cisrc3RhdGljIHRyZWUgY3VzdG9tX25mcDsKKytzdGF0aWMgdHJlZSBjdXN0b21fbnBpOworK3N0YXRpYyB0cmVlIGN1c3RvbV9ucGY7Cisrc3RhdGljIHRyZWUgY3VzdG9tX25wcDsKKytzdGF0aWMgdHJlZSBjdXN0b21faW47Cisrc3RhdGljIHRyZWUgY3VzdG9tX2luaTsKKytzdGF0aWMgdHJlZSBjdXN0b21faW5mOworK3N0YXRpYyB0cmVlIGN1c3RvbV9pbnA7Cisrc3RhdGljIHRyZWUgY3VzdG9tX2luaWk7Cisrc3RhdGljIHRyZWUgY3VzdG9tX2luaWY7Cisrc3RhdGljIHRyZWUgY3VzdG9tX2luaXA7Cisrc3RhdGljIHRyZWUgY3VzdG9tX2luZmk7Cisrc3RhdGljIHRyZWUgY3VzdG9tX2luZmY7Cisrc3RhdGljIHRyZWUgY3VzdG9tX2luZnA7Cisrc3RhdGljIHRyZWUgY3VzdG9tX2lucGk7Cisrc3RhdGljIHRyZWUgY3VzdG9tX2lucGY7Cisrc3RhdGljIHRyZWUgY3VzdG9tX2lucHA7Cisrc3RhdGljIHRyZWUgY3VzdG9tX2ZuOworK3N0YXRpYyB0cmVlIGN1c3RvbV9mbmk7Cisrc3RhdGljIHRyZWUgY3VzdG9tX2ZuZjsKKytzdGF0aWMgdHJlZSBjdXN0b21fZm5wOworK3N0YXRpYyB0cmVlIGN1c3RvbV9mbmlpOworK3N0YXRpYyB0cmVlIGN1c3RvbV9mbmlmOworK3N0YXRpYyB0cmVlIGN1c3RvbV9mbmlwOworK3N0YXRpYyB0cmVlIGN1c3RvbV9mbmZpOworK3N0YXRpYyB0cmVlIGN1c3RvbV9mbmZmOworK3N0YXRpYyB0cmVlIGN1c3RvbV9mbmZwOworK3N0YXRpYyB0cmVlIGN1c3RvbV9mbnBpOworK3N0YXRpYyB0cmVlIGN1c3RvbV9mbnBmOworK3N0YXRpYyB0cmVlIGN1c3RvbV9mbnBwOworK3N0YXRpYyB0cmVlIGN1c3RvbV9wbjsKKytzdGF0aWMgdHJlZSBjdXN0b21fcG5pOworK3N0YXRpYyB0cmVlIGN1c3RvbV9wbmY7Cisrc3RhdGljIHRyZWUgY3VzdG9tX3BucDsKKytzdGF0aWMgdHJlZSBjdXN0b21fcG5paTsKKytzdGF0aWMgdHJlZSBjdXN0b21fcG5pZjsKKytzdGF0aWMgdHJlZSBjdXN0b21fcG5pcDsKKytzdGF0aWMgdHJlZSBjdXN0b21fcG5maTsKKytzdGF0aWMgdHJlZSBjdXN0b21fcG5mZjsKKytzdGF0aWMgdHJlZSBjdXN0b21fcG5mcDsKKytzdGF0aWMgdHJlZSBjdXN0b21fcG5waTsKKytzdGF0aWMgdHJlZSBjdXN0b21fcG5wZjsKKytzdGF0aWMgdHJlZSBjdXN0b21fcG5wcDsKKysKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGJ1aWx0aW5fZGVzY3JpcHRpb24gYmRlc2NbXSA9IHsKKysgICAge0NPREVfRk9SX2xkYmlvLCAiX19idWlsdGluX2xkYmlvIiwgTklPUzJfQlVJTFRJTl9MREJJTywgJmludF9mdHlwZV92b2xhdGlsZV9jb25zdF92b2lkX3AsIG5pb3MyX2V4cGFuZF9MRFhJT30sCisrICAgIHtDT0RFX0ZPUl9sZGJ1aW8sICJfX2J1aWx0aW5fbGRidWlvIiwgTklPUzJfQlVJTFRJTl9MREJVSU8sICZpbnRfZnR5cGVfdm9sYXRpbGVfY29uc3Rfdm9pZF9wLCBuaW9zMl9leHBhbmRfTERYSU99LAorKyAgICB7Q09ERV9GT1JfbGRoaW8sICJfX2J1aWx0aW5fbGRoaW8iLCBOSU9TMl9CVUlMVElOX0xESElPLCAmaW50X2Z0eXBlX3ZvbGF0aWxlX2NvbnN0X3ZvaWRfcCwgbmlvczJfZXhwYW5kX0xEWElPfSwKKysgICAge0NPREVfRk9SX2xkaHVpbywgIl9fYnVpbHRpbl9sZGh1aW8iLCBOSU9TMl9CVUlMVElOX0xESFVJTywgJmludF9mdHlwZV92b2xhdGlsZV9jb25zdF92b2lkX3AsIG5pb3MyX2V4cGFuZF9MRFhJT30sCisrICAgIHtDT0RFX0ZPUl9sZHdpbywgIl9fYnVpbHRpbl9sZHdpbyIsIE5JT1MyX0JVSUxUSU5fTERXSU8sICZpbnRfZnR5cGVfdm9sYXRpbGVfY29uc3Rfdm9pZF9wLCBuaW9zMl9leHBhbmRfTERYSU99LAorKworKyAgICB7Q09ERV9GT1Jfc3RiaW8sICJfX2J1aWx0aW5fc3RiaW8iLCBOSU9TMl9CVUlMVElOX1NUQklPLCAmdm9pZF9mdHlwZV92b2xhdGlsZV92b2lkX3BfaW50LCBuaW9zMl9leHBhbmRfU1RYSU99LAorKyAgICB7Q09ERV9GT1Jfc3RoaW8sICJfX2J1aWx0aW5fc3RoaW8iLCBOSU9TMl9CVUlMVElOX1NUSElPLCAmdm9pZF9mdHlwZV92b2xhdGlsZV92b2lkX3BfaW50LCBuaW9zMl9leHBhbmRfU1RYSU99LAorKyAgICB7Q09ERV9GT1Jfc3R3aW8sICJfX2J1aWx0aW5fc3R3aW8iLCBOSU9TMl9CVUlMVElOX1NUV0lPLCAmdm9pZF9mdHlwZV92b2xhdGlsZV92b2lkX3BfaW50LCBuaW9zMl9leHBhbmRfU1RYSU99LAorKworKyAgICB7Q09ERV9GT1Jfc3luYywgIl9fYnVpbHRpbl9zeW5jIiwgTklPUzJfQlVJTFRJTl9TWU5DLCAmdm9pZF9mdHlwZV92b2lkLCBuaW9zMl9leHBhbmRfc3luY30sCisrICAgIHtDT0RFX0ZPUl9yZGN0bCwgIl9fYnVpbHRpbl9yZGN0bCIsIE5JT1MyX0JVSUxUSU5fUkRDVEwsICZpbnRfZnR5cGVfaW50LCBuaW9zMl9leHBhbmRfcmRjdGx9LAorKyAgICB7Q09ERV9GT1Jfd3JjdGwsICJfX2J1aWx0aW5fd3JjdGwiLCBOSU9TMl9CVUlMVElOX1dSQ1RMLCAmdm9pZF9mdHlwZV9pbnRfaW50LCBuaW9zMl9leHBhbmRfd3JjdGx9LAorKworKyAgICB7Q09ERV9GT1JfY3VzdG9tX24sICJfX2J1aWx0aW5fY3VzdG9tX24iLCBOSU9TMl9CVUlMVElOX0NVU1RPTV9OLCAmY3VzdG9tX24sIG5pb3MyX2V4cGFuZF9jdXN0b21fbn0sCisrICAgIHtDT0RFX0ZPUl9jdXN0b21fbmksICJfX2J1aWx0aW5fY3VzdG9tX25pIiwgTklPUzJfQlVJTFRJTl9DVVNUT01fTkksICZjdXN0b21fbmksIG5pb3MyX2V4cGFuZF9jdXN0b21fblh9LAorKyAgICB7Q09ERV9GT1JfY3VzdG9tX25mLCAiX19idWlsdGluX2N1c3RvbV9uZiIsIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX05GLCAmY3VzdG9tX25mLCBuaW9zMl9leHBhbmRfY3VzdG9tX25YfSwKKysgICAge0NPREVfRk9SX2N1c3RvbV9ucCwgIl9fYnVpbHRpbl9jdXN0b21fbnAiLCBOSU9TMl9CVUlMVElOX0NVU1RPTV9OUCwgJmN1c3RvbV9ucCwgbmlvczJfZXhwYW5kX2N1c3RvbV9uWH0sCisrICAgIHtDT0RFX0ZPUl9jdXN0b21fbmlpLCAiX19idWlsdGluX2N1c3RvbV9uaWkiLCBOSU9TMl9CVUlMVElOX0NVU1RPTV9OSUksICZjdXN0b21fbmlpLCBuaW9zMl9leHBhbmRfY3VzdG9tX25YWH0sCisrICAgIHtDT0RFX0ZPUl9jdXN0b21fbmlmLCAiX19idWlsdGluX2N1c3RvbV9uaWYiLCBOSU9TMl9CVUlMVElOX0NVU1RPTV9OSUYsICZjdXN0b21fbmlmLCBuaW9zMl9leHBhbmRfY3VzdG9tX25YWH0sCisrICAgIHtDT0RFX0ZPUl9jdXN0b21fbmlwLCAiX19idWlsdGluX2N1c3RvbV9uaXAiLCBOSU9TMl9CVUlMVElOX0NVU1RPTV9OSVAsICZjdXN0b21fbmlwLCBuaW9zMl9leHBhbmRfY3VzdG9tX25YWH0sCisrICAgIHtDT0RFX0ZPUl9jdXN0b21fbmZpLCAiX19idWlsdGluX2N1c3RvbV9uZmkiLCBOSU9TMl9CVUlMVElOX0NVU1RPTV9ORkksICZjdXN0b21fbmZpLCBuaW9zMl9leHBhbmRfY3VzdG9tX25YWH0sCisrICAgIHtDT0RFX0ZPUl9jdXN0b21fbmZmLCAiX19idWlsdGluX2N1c3RvbV9uZmYiLCBOSU9TMl9CVUlMVElOX0NVU1RPTV9ORkYsICZjdXN0b21fbmZmLCBuaW9zMl9leHBhbmRfY3VzdG9tX25YWH0sCisrICAgIHtDT0RFX0ZPUl9jdXN0b21fbmZwLCAiX19idWlsdGluX2N1c3RvbV9uZnAiLCBOSU9TMl9CVUlMVElOX0NVU1RPTV9ORlAsICZjdXN0b21fbmZwLCBuaW9zMl9leHBhbmRfY3VzdG9tX25YWH0sCisrICAgIHtDT0RFX0ZPUl9jdXN0b21fbnBpLCAiX19idWlsdGluX2N1c3RvbV9ucGkiLCBOSU9TMl9CVUlMVElOX0NVU1RPTV9OUEksICZjdXN0b21fbnBpLCBuaW9zMl9leHBhbmRfY3VzdG9tX25YWH0sCisrICAgIHtDT0RFX0ZPUl9jdXN0b21fbnBmLCAiX19idWlsdGluX2N1c3RvbV9ucGYiLCBOSU9TMl9CVUlMVElOX0NVU1RPTV9OUEYsICZjdXN0b21fbnBmLCBuaW9zMl9leHBhbmRfY3VzdG9tX25YWH0sCisrICAgIHtDT0RFX0ZPUl9jdXN0b21fbnBwLCAiX19idWlsdGluX2N1c3RvbV9ucHAiLCBOSU9TMl9CVUlMVElOX0NVU1RPTV9OUFAsICZjdXN0b21fbnBwLCBuaW9zMl9leHBhbmRfY3VzdG9tX25YWH0sCisrICAgIHtDT0RFX0ZPUl9jdXN0b21faW4sICJfX2J1aWx0aW5fY3VzdG9tX2luIiwgTklPUzJfQlVJTFRJTl9DVVNUT01fSU4sICZjdXN0b21faW4sIG5pb3MyX2V4cGFuZF9jdXN0b21fWG59LAorKyAgICB7Q09ERV9GT1JfY3VzdG9tX2luaSwgIl9fYnVpbHRpbl9jdXN0b21faW5pIiwgTklPUzJfQlVJTFRJTl9DVVNUT01fSU5JLCAmY3VzdG9tX2luaSwgbmlvczJfZXhwYW5kX2N1c3RvbV9Yblh9LAorKyAgICB7Q09ERV9GT1JfY3VzdG9tX2luZiwgIl9fYnVpbHRpbl9jdXN0b21faW5mIiwgTklPUzJfQlVJTFRJTl9DVVNUT01fSU5GLCAmY3VzdG9tX2luZiwgbmlvczJfZXhwYW5kX2N1c3RvbV9Yblh9LAorKyAgICB7Q09ERV9GT1JfY3VzdG9tX2lucCwgIl9fYnVpbHRpbl9jdXN0b21faW5wIiwgTklPUzJfQlVJTFRJTl9DVVNUT01fSU5QLCAmY3VzdG9tX2lucCwgbmlvczJfZXhwYW5kX2N1c3RvbV9Yblh9LAorKyAgICB7Q09ERV9GT1JfY3VzdG9tX2luaWksICJfX2J1aWx0aW5fY3VzdG9tX2luaWkiLCBOSU9TMl9CVUlMVElOX0NVU1RPTV9JTklJLCAmY3VzdG9tX2luaWksIG5pb3MyX2V4cGFuZF9jdXN0b21fWG5YWH0sCisrICAgIHtDT0RFX0ZPUl9jdXN0b21faW5pZiwgIl9fYnVpbHRpbl9jdXN0b21faW5pZiIsIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX0lOSUYsICZjdXN0b21faW5pZiwgbmlvczJfZXhwYW5kX2N1c3RvbV9YblhYfSwKKysgICAge0NPREVfRk9SX2N1c3RvbV9pbmlwLCAiX19idWlsdGluX2N1c3RvbV9pbmlwIiwgTklPUzJfQlVJTFRJTl9DVVNUT01fSU5JUCwgJmN1c3RvbV9pbmlwLCBuaW9zMl9leHBhbmRfY3VzdG9tX1huWFh9LAorKyAgICB7Q09ERV9GT1JfY3VzdG9tX2luZmksICJfX2J1aWx0aW5fY3VzdG9tX2luZmkiLCBOSU9TMl9CVUlMVElOX0NVU1RPTV9JTkZJLCAmY3VzdG9tX2luZmksIG5pb3MyX2V4cGFuZF9jdXN0b21fWG5YWH0sCisrICAgIHtDT0RFX0ZPUl9jdXN0b21faW5mZiwgIl9fYnVpbHRpbl9jdXN0b21faW5mZiIsIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX0lORkYsICZjdXN0b21faW5mZiwgbmlvczJfZXhwYW5kX2N1c3RvbV9YblhYfSwKKysgICAge0NPREVfRk9SX2N1c3RvbV9pbmZwLCAiX19idWlsdGluX2N1c3RvbV9pbmZwIiwgTklPUzJfQlVJTFRJTl9DVVNUT01fSU5GUCwgJmN1c3RvbV9pbmZwLCBuaW9zMl9leHBhbmRfY3VzdG9tX1huWFh9LAorKyAgICB7Q09ERV9GT1JfY3VzdG9tX2lucGksICJfX2J1aWx0aW5fY3VzdG9tX2lucGkiLCBOSU9TMl9CVUlMVElOX0NVU1RPTV9JTlBJLCAmY3VzdG9tX2lucGksIG5pb3MyX2V4cGFuZF9jdXN0b21fWG5YWH0sCisrICAgIHtDT0RFX0ZPUl9jdXN0b21faW5wZiwgIl9fYnVpbHRpbl9jdXN0b21faW5wZiIsIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX0lOUEYsICZjdXN0b21faW5wZiwgbmlvczJfZXhwYW5kX2N1c3RvbV9YblhYfSwKKysgICAge0NPREVfRk9SX2N1c3RvbV9pbnBwLCAiX19idWlsdGluX2N1c3RvbV9pbnBwIiwgTklPUzJfQlVJTFRJTl9DVVNUT01fSU5QUCwgJmN1c3RvbV9pbnBwLCBuaW9zMl9leHBhbmRfY3VzdG9tX1huWFh9LAorKyAgICB7Q09ERV9GT1JfY3VzdG9tX2ZuLCAiX19idWlsdGluX2N1c3RvbV9mbiIsIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX0ZOLCAmY3VzdG9tX2ZuLCBuaW9zMl9leHBhbmRfY3VzdG9tX1hufSwKKysgICAge0NPREVfRk9SX2N1c3RvbV9mbmksICJfX2J1aWx0aW5fY3VzdG9tX2ZuaSIsIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX0ZOSSwgJmN1c3RvbV9mbmksIG5pb3MyX2V4cGFuZF9jdXN0b21fWG5YfSwKKysgICAge0NPREVfRk9SX2N1c3RvbV9mbmYsICJfX2J1aWx0aW5fY3VzdG9tX2ZuZiIsIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX0ZORiwgJmN1c3RvbV9mbmYsIG5pb3MyX2V4cGFuZF9jdXN0b21fWG5YfSwKKysgICAge0NPREVfRk9SX2N1c3RvbV9mbnAsICJfX2J1aWx0aW5fY3VzdG9tX2ZucCIsIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX0ZOUCwgJmN1c3RvbV9mbnAsIG5pb3MyX2V4cGFuZF9jdXN0b21fWG5YfSwKKysgICAge0NPREVfRk9SX2N1c3RvbV9mbmlpLCAiX19idWlsdGluX2N1c3RvbV9mbmlpIiwgTklPUzJfQlVJTFRJTl9DVVNUT01fRk5JSSwgJmN1c3RvbV9mbmlpLCBuaW9zMl9leHBhbmRfY3VzdG9tX1huWFh9LAorKyAgICB7Q09ERV9GT1JfY3VzdG9tX2ZuaWYsICJfX2J1aWx0aW5fY3VzdG9tX2ZuaWYiLCBOSU9TMl9CVUlMVElOX0NVU1RPTV9GTklGLCAmY3VzdG9tX2ZuaWYsIG5pb3MyX2V4cGFuZF9jdXN0b21fWG5YWH0sCisrICAgIHtDT0RFX0ZPUl9jdXN0b21fZm5pcCwgIl9fYnVpbHRpbl9jdXN0b21fZm5pcCIsIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX0ZOSVAsICZjdXN0b21fZm5pcCwgbmlvczJfZXhwYW5kX2N1c3RvbV9YblhYfSwKKysgICAge0NPREVfRk9SX2N1c3RvbV9mbmZpLCAiX19idWlsdGluX2N1c3RvbV9mbmZpIiwgTklPUzJfQlVJTFRJTl9DVVNUT01fRk5GSSwgJmN1c3RvbV9mbmZpLCBuaW9zMl9leHBhbmRfY3VzdG9tX1huWFh9LAorKyAgICB7Q09ERV9GT1JfY3VzdG9tX2ZuZmYsICJfX2J1aWx0aW5fY3VzdG9tX2ZuZmYiLCBOSU9TMl9CVUlMVElOX0NVU1RPTV9GTkZGLCAmY3VzdG9tX2ZuZmYsIG5pb3MyX2V4cGFuZF9jdXN0b21fWG5YWH0sCisrICAgIHtDT0RFX0ZPUl9jdXN0b21fZm5mcCwgIl9fYnVpbHRpbl9jdXN0b21fZm5mcCIsIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX0ZORlAsICZjdXN0b21fZm5mcCwgbmlvczJfZXhwYW5kX2N1c3RvbV9YblhYfSwKKysgICAge0NPREVfRk9SX2N1c3RvbV9mbnBpLCAiX19idWlsdGluX2N1c3RvbV9mbnBpIiwgTklPUzJfQlVJTFRJTl9DVVNUT01fRk5QSSwgJmN1c3RvbV9mbnBpLCBuaW9zMl9leHBhbmRfY3VzdG9tX1huWFh9LAorKyAgICB7Q09ERV9GT1JfY3VzdG9tX2ZucGYsICJfX2J1aWx0aW5fY3VzdG9tX2ZucGYiLCBOSU9TMl9CVUlMVElOX0NVU1RPTV9GTlBGLCAmY3VzdG9tX2ZucGYsIG5pb3MyX2V4cGFuZF9jdXN0b21fWG5YWH0sCisrICAgIHtDT0RFX0ZPUl9jdXN0b21fZm5wcCwgIl9fYnVpbHRpbl9jdXN0b21fZm5wcCIsIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX0ZOUFAsICZjdXN0b21fZm5wcCwgbmlvczJfZXhwYW5kX2N1c3RvbV9YblhYfSwKKysgICAge0NPREVfRk9SX2N1c3RvbV9wbiwgIl9fYnVpbHRpbl9jdXN0b21fcG4iLCBOSU9TMl9CVUlMVElOX0NVU1RPTV9QTiwgJmN1c3RvbV9wbiwgbmlvczJfZXhwYW5kX2N1c3RvbV9Ybn0sCisrICAgIHtDT0RFX0ZPUl9jdXN0b21fcG5pLCAiX19idWlsdGluX2N1c3RvbV9wbmkiLCBOSU9TMl9CVUlMVElOX0NVU1RPTV9QTkksICZjdXN0b21fcG5pLCBuaW9zMl9leHBhbmRfY3VzdG9tX1huWH0sCisrICAgIHtDT0RFX0ZPUl9jdXN0b21fcG5mLCAiX19idWlsdGluX2N1c3RvbV9wbmYiLCBOSU9TMl9CVUlMVElOX0NVU1RPTV9QTkYsICZjdXN0b21fcG5mLCBuaW9zMl9leHBhbmRfY3VzdG9tX1huWH0sCisrICAgIHtDT0RFX0ZPUl9jdXN0b21fcG5wLCAiX19idWlsdGluX2N1c3RvbV9wbnAiLCBOSU9TMl9CVUlMVElOX0NVU1RPTV9QTlAsICZjdXN0b21fcG5wLCBuaW9zMl9leHBhbmRfY3VzdG9tX1huWH0sCisrICAgIHtDT0RFX0ZPUl9jdXN0b21fcG5paSwgIl9fYnVpbHRpbl9jdXN0b21fcG5paSIsIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX1BOSUksICZjdXN0b21fcG5paSwgbmlvczJfZXhwYW5kX2N1c3RvbV9YblhYfSwKKysgICAge0NPREVfRk9SX2N1c3RvbV9wbmlmLCAiX19idWlsdGluX2N1c3RvbV9wbmlmIiwgTklPUzJfQlVJTFRJTl9DVVNUT01fUE5JRiwgJmN1c3RvbV9wbmlmLCBuaW9zMl9leHBhbmRfY3VzdG9tX1huWFh9LAorKyAgICB7Q09ERV9GT1JfY3VzdG9tX3BuaXAsICJfX2J1aWx0aW5fY3VzdG9tX3BuaXAiLCBOSU9TMl9CVUlMVElOX0NVU1RPTV9QTklQLCAmY3VzdG9tX3BuaXAsIG5pb3MyX2V4cGFuZF9jdXN0b21fWG5YWH0sCisrICAgIHtDT0RFX0ZPUl9jdXN0b21fcG5maSwgIl9fYnVpbHRpbl9jdXN0b21fcG5maSIsIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX1BORkksICZjdXN0b21fcG5maSwgbmlvczJfZXhwYW5kX2N1c3RvbV9YblhYfSwKKysgICAge0NPREVfRk9SX2N1c3RvbV9wbmZmLCAiX19idWlsdGluX2N1c3RvbV9wbmZmIiwgTklPUzJfQlVJTFRJTl9DVVNUT01fUE5GRiwgJmN1c3RvbV9wbmZmLCBuaW9zMl9leHBhbmRfY3VzdG9tX1huWFh9LAorKyAgICB7Q09ERV9GT1JfY3VzdG9tX3BuZnAsICJfX2J1aWx0aW5fY3VzdG9tX3BuZnAiLCBOSU9TMl9CVUlMVElOX0NVU1RPTV9QTkZQLCAmY3VzdG9tX3BuZnAsIG5pb3MyX2V4cGFuZF9jdXN0b21fWG5YWH0sCisrICAgIHtDT0RFX0ZPUl9jdXN0b21fcG5waSwgIl9fYnVpbHRpbl9jdXN0b21fcG5waSIsIE5JT1MyX0JVSUxUSU5fQ1VTVE9NX1BOUEksICZjdXN0b21fcG5waSwgbmlvczJfZXhwYW5kX2N1c3RvbV9YblhYfSwKKysgICAge0NPREVfRk9SX2N1c3RvbV9wbnBmLCAiX19idWlsdGluX2N1c3RvbV9wbnBmIiwgTklPUzJfQlVJTFRJTl9DVVNUT01fUE5QRiwgJmN1c3RvbV9wbnBmLCBuaW9zMl9leHBhbmRfY3VzdG9tX1huWFh9LAorKyAgICB7Q09ERV9GT1JfY3VzdG9tX3BucHAsICJfX2J1aWx0aW5fY3VzdG9tX3BucHAiLCBOSU9TMl9CVUlMVElOX0NVU1RPTV9QTlBQLCAmY3VzdG9tX3BucHAsIG5pb3MyX2V4cGFuZF9jdXN0b21fWG5YWH0sCisrCisrCisrICAgIHswLCAwLCAwLCAwLCAwfSwKKyt9OworKworKy8qIFRoaXMgZG9lcyBub3QgaGF2ZSBhIGNsb3NpbmcgYnJhY2tldCBvbiBwdXJwb3NlIChzZWUgdXNlKSAqLworKyNkZWZpbmUgZGVmX3BhcmFtKFRZUEUpIFwKKysgIHRyZWVfY29ucyAoTlVMTF9UUkVFLCBUWVBFLAorKworK3N0YXRpYyB2b2lkCisrbmlvczJfaW5pdF9idWlsdGlucyAoKQorK3sKKysgIGNvbnN0IHN0cnVjdCBidWlsdGluX2Rlc2NyaXB0aW9uICpkOworKworKworKyAgZW5kbGluayA9IHZvaWRfbGlzdF9ub2RlOworKworKyAgLyogU3BlY2lhbCBpbmRlbnRpbmcgaGVyZSBiZWNhdXNlIG9uZSBvZiB0aGUgYnJhY2tldHMgaXMgaW4gZGVmX3BhcmFtICovCisrICAvKiAqSU5ERU5ULU9GRiogKi8KKysKKysgIC8qIGludCBmbiAodm9sYXRpbGUgY29uc3Qgdm9pZCAqKQorKyAgICovCisrICBpbnRfZnR5cGVfdm9sYXRpbGVfY29uc3Rfdm9pZF9wCisrICAgID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAoaW50ZWdlcl90eXBlX25vZGUsCisrCQkJICAgZGVmX3BhcmFtIChidWlsZF9xdWFsaWZpZWRfdHlwZSAocHRyX3R5cGVfbm9kZSwKKysJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUWVBFX1FVQUxfQ09OU1QgfCBUWVBFX1FVQUxfVk9MQVRJTEUpKQorKwkJCSAgIGVuZGxpbmspKTsKKysKKysKKysgIC8qIHZvaWQgZm4gKHZvbGF0aWxlIHZvaWQgKiwgaW50KQorKyAgICovCisrICB2b2lkX2Z0eXBlX3ZvbGF0aWxlX3ZvaWRfcF9pbnQKKysgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlICh2b2lkX3R5cGVfbm9kZSwKKysJCQkgICBkZWZfcGFyYW0gKGJ1aWxkX3F1YWxpZmllZF90eXBlIChwdHJfdHlwZV9ub2RlLAorKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRZUEVfUVVBTF9WT0xBVElMRSkpCisrCQkJICAgZGVmX3BhcmFtIChpbnRlZ2VyX3R5cGVfbm9kZSkKKysJCQkgICBlbmRsaW5rKSkpOworKworKyAgLyogdm9pZCBmbiAodm9pZCkKKysgICAqLworKyAgdm9pZF9mdHlwZV92b2lkCisrICAgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlICh2b2lkX3R5cGVfbm9kZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZGxpbmspOworKworKyAgLyogaW50IGZuIChpbnQpCisrICAgKi8KKysgIGludF9mdHlwZV9pbnQKKysgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKGludGVnZXJfdHlwZV9ub2RlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmX3BhcmFtIChpbnRlZ2VyX3R5cGVfbm9kZSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZGxpbmspKTsKKysKKysgIC8qIHZvaWQgZm4gKGludCwgaW50KQorKyAgICovCisrICB2b2lkX2Z0eXBlX2ludF9pbnQKKysgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKHZvaWRfdHlwZV9ub2RlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmX3BhcmFtIChpbnRlZ2VyX3R5cGVfbm9kZSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZl9wYXJhbSAoaW50ZWdlcl90eXBlX25vZGUpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRsaW5rKSkpOworKworKworKyNkZWZpbmUgQ1VTVE9NX05VTSBkZWZfcGFyYW0gKGludGVnZXJfdHlwZV9ub2RlKQorKworKyAgY3VzdG9tX24KKysgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKHZvaWRfdHlwZV9ub2RlLAorKyAgCQkJICAgICBDVVNUT01fTlVNCisrICAJCQkgICAgIGVuZGxpbmspKTsKKysgIGN1c3RvbV9uaQorKyAgICAgID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAodm9pZF90eXBlX25vZGUsCisrICAJCQkgICAgIENVU1RPTV9OVU0KKysgIAkJCSAgICAgZGVmX3BhcmFtIChpbnRlZ2VyX3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZW5kbGluaykpKTsKKysgIGN1c3RvbV9uZgorKyAgICAgID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAodm9pZF90eXBlX25vZGUsCisrICAJCQkgICAgIENVU1RPTV9OVU0KKysgIAkJCSAgICAgZGVmX3BhcmFtIChmbG9hdF90eXBlX25vZGUpCisrICAJCQkgICAgIGVuZGxpbmspKSk7CisrICBjdXN0b21fbnAKKysgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKHZvaWRfdHlwZV9ub2RlLAorKyAgCQkJICAgICBDVVNUT01fTlVNCisrICAJCQkgICAgIGRlZl9wYXJhbSAocHRyX3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZW5kbGluaykpKTsKKysgIGN1c3RvbV9uaWkKKysgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKHZvaWRfdHlwZV9ub2RlLAorKyAgCQkJICAgICBDVVNUT01fTlVNCisrICAJCQkgICAgIGRlZl9wYXJhbSAoaW50ZWdlcl90eXBlX25vZGUpCisrICAJCQkgICAgIGRlZl9wYXJhbSAoaW50ZWdlcl90eXBlX25vZGUpCisrICAJCQkgICAgIGVuZGxpbmspKSkpOworKyAgY3VzdG9tX25pZgorKyAgICAgID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAodm9pZF90eXBlX25vZGUsCisrICAJCQkgICAgIENVU1RPTV9OVU0KKysgIAkJCSAgICAgZGVmX3BhcmFtIChpbnRlZ2VyX3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZGVmX3BhcmFtIChmbG9hdF90eXBlX25vZGUpCisrICAJCQkgICAgIGVuZGxpbmspKSkpOworKyAgY3VzdG9tX25pcAorKyAgICAgID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAodm9pZF90eXBlX25vZGUsCisrICAJCQkgICAgIENVU1RPTV9OVU0KKysgIAkJCSAgICAgZGVmX3BhcmFtIChpbnRlZ2VyX3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZGVmX3BhcmFtIChwdHJfdHlwZV9ub2RlKQorKyAgCQkJICAgICBlbmRsaW5rKSkpKTsKKysgIGN1c3RvbV9uZmkKKysgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKHZvaWRfdHlwZV9ub2RlLAorKyAgCQkJICAgICBDVVNUT01fTlVNCisrICAJCQkgICAgIGRlZl9wYXJhbSAoZmxvYXRfdHlwZV9ub2RlKQorKyAgCQkJICAgICBkZWZfcGFyYW0gKGludGVnZXJfdHlwZV9ub2RlKQorKyAgCQkJICAgICBlbmRsaW5rKSkpKTsKKysgIGN1c3RvbV9uZmYKKysgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKHZvaWRfdHlwZV9ub2RlLAorKyAgCQkJICAgICBDVVNUT01fTlVNCisrICAJCQkgICAgIGRlZl9wYXJhbSAoZmxvYXRfdHlwZV9ub2RlKQorKyAgCQkJICAgICBkZWZfcGFyYW0gKGZsb2F0X3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZW5kbGluaykpKSk7CisrICBjdXN0b21fbmZwCisrICAgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlICh2b2lkX3R5cGVfbm9kZSwKKysgIAkJCSAgICAgQ1VTVE9NX05VTQorKyAgCQkJICAgICBkZWZfcGFyYW0gKGZsb2F0X3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZGVmX3BhcmFtIChwdHJfdHlwZV9ub2RlKQorKyAgCQkJICAgICBlbmRsaW5rKSkpKTsKKysgIGN1c3RvbV9ucGkKKysgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKHZvaWRfdHlwZV9ub2RlLAorKyAgCQkJICAgICBDVVNUT01fTlVNCisrICAJCQkgICAgIGRlZl9wYXJhbSAocHRyX3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZGVmX3BhcmFtIChpbnRlZ2VyX3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZW5kbGluaykpKSk7CisrICBjdXN0b21fbnBmCisrICAgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlICh2b2lkX3R5cGVfbm9kZSwKKysgIAkJCSAgICAgQ1VTVE9NX05VTQorKyAgCQkJICAgICBkZWZfcGFyYW0gKHB0cl90eXBlX25vZGUpCisrICAJCQkgICAgIGRlZl9wYXJhbSAoZmxvYXRfdHlwZV9ub2RlKQorKyAgCQkJICAgICBlbmRsaW5rKSkpKTsKKysgIGN1c3RvbV9ucHAKKysgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKHZvaWRfdHlwZV9ub2RlLAorKyAgCQkJICAgICBDVVNUT01fTlVNCisrICAJCQkgICAgIGRlZl9wYXJhbSAocHRyX3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZGVmX3BhcmFtIChwdHJfdHlwZV9ub2RlKQorKyAgCQkJICAgICBlbmRsaW5rKSkpKTsKKysKKysgIGN1c3RvbV9pbgorKyAgICAgID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAoaW50ZWdlcl90eXBlX25vZGUsCisrICAJCQkgICAgIENVU1RPTV9OVU0KKysgIAkJCSAgICAgZW5kbGluaykpOworKyAgY3VzdG9tX2luaQorKyAgICAgID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAoaW50ZWdlcl90eXBlX25vZGUsCisrICAJCQkgICAgIENVU1RPTV9OVU0KKysgIAkJCSAgICAgZGVmX3BhcmFtIChpbnRlZ2VyX3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZW5kbGluaykpKTsKKysgIGN1c3RvbV9pbmYKKysgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKGludGVnZXJfdHlwZV9ub2RlLAorKyAgCQkJICAgICBDVVNUT01fTlVNCisrICAJCQkgICAgIGRlZl9wYXJhbSAoZmxvYXRfdHlwZV9ub2RlKQorKyAgCQkJICAgICBlbmRsaW5rKSkpOworKyAgY3VzdG9tX2lucAorKyAgICAgID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAoaW50ZWdlcl90eXBlX25vZGUsCisrICAJCQkgICAgIENVU1RPTV9OVU0KKysgIAkJCSAgICAgZGVmX3BhcmFtIChwdHJfdHlwZV9ub2RlKQorKyAgCQkJICAgICBlbmRsaW5rKSkpOworKyAgY3VzdG9tX2luaWkKKysgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKGludGVnZXJfdHlwZV9ub2RlLAorKyAgCQkJICAgICBDVVNUT01fTlVNCisrICAJCQkgICAgIGRlZl9wYXJhbSAoaW50ZWdlcl90eXBlX25vZGUpCisrICAJCQkgICAgIGRlZl9wYXJhbSAoaW50ZWdlcl90eXBlX25vZGUpCisrICAJCQkgICAgIGVuZGxpbmspKSkpOworKyAgY3VzdG9tX2luaWYKKysgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKGludGVnZXJfdHlwZV9ub2RlLAorKyAgCQkJICAgICBDVVNUT01fTlVNCisrICAJCQkgICAgIGRlZl9wYXJhbSAoaW50ZWdlcl90eXBlX25vZGUpCisrICAJCQkgICAgIGRlZl9wYXJhbSAoZmxvYXRfdHlwZV9ub2RlKQorKyAgCQkJICAgICBlbmRsaW5rKSkpKTsKKysgIGN1c3RvbV9pbmlwCisrICAgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlIChpbnRlZ2VyX3R5cGVfbm9kZSwKKysgIAkJCSAgICAgQ1VTVE9NX05VTQorKyAgCQkJICAgICBkZWZfcGFyYW0gKGludGVnZXJfdHlwZV9ub2RlKQorKyAgCQkJICAgICBkZWZfcGFyYW0gKHB0cl90eXBlX25vZGUpCisrICAJCQkgICAgIGVuZGxpbmspKSkpOworKyAgY3VzdG9tX2luZmkKKysgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKGludGVnZXJfdHlwZV9ub2RlLAorKyAgCQkJICAgICBDVVNUT01fTlVNCisrICAJCQkgICAgIGRlZl9wYXJhbSAoZmxvYXRfdHlwZV9ub2RlKQorKyAgCQkJICAgICBkZWZfcGFyYW0gKGludGVnZXJfdHlwZV9ub2RlKQorKyAgCQkJICAgICBlbmRsaW5rKSkpKTsKKysgIGN1c3RvbV9pbmZmCisrICAgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlIChpbnRlZ2VyX3R5cGVfbm9kZSwKKysgIAkJCSAgICAgQ1VTVE9NX05VTQorKyAgCQkJICAgICBkZWZfcGFyYW0gKGZsb2F0X3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZGVmX3BhcmFtIChmbG9hdF90eXBlX25vZGUpCisrICAJCQkgICAgIGVuZGxpbmspKSkpOworKyAgY3VzdG9tX2luZnAKKysgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKGludGVnZXJfdHlwZV9ub2RlLAorKyAgCQkJICAgICBDVVNUT01fTlVNCisrICAJCQkgICAgIGRlZl9wYXJhbSAoZmxvYXRfdHlwZV9ub2RlKQorKyAgCQkJICAgICBkZWZfcGFyYW0gKHB0cl90eXBlX25vZGUpCisrICAJCQkgICAgIGVuZGxpbmspKSkpOworKyAgY3VzdG9tX2lucGkKKysgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKGludGVnZXJfdHlwZV9ub2RlLAorKyAgCQkJICAgICBDVVNUT01fTlVNCisrICAJCQkgICAgIGRlZl9wYXJhbSAocHRyX3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZGVmX3BhcmFtIChpbnRlZ2VyX3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZW5kbGluaykpKSk7CisrICBjdXN0b21faW5wZgorKyAgICAgID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAoaW50ZWdlcl90eXBlX25vZGUsCisrICAJCQkgICAgIENVU1RPTV9OVU0KKysgIAkJCSAgICAgZGVmX3BhcmFtIChwdHJfdHlwZV9ub2RlKQorKyAgCQkJICAgICBkZWZfcGFyYW0gKGZsb2F0X3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZW5kbGluaykpKSk7CisrICBjdXN0b21faW5wcAorKyAgICAgID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAoaW50ZWdlcl90eXBlX25vZGUsCisrICAJCQkgICAgIENVU1RPTV9OVU0KKysgIAkJCSAgICAgZGVmX3BhcmFtIChwdHJfdHlwZV9ub2RlKQorKyAgCQkJICAgICBkZWZfcGFyYW0gKHB0cl90eXBlX25vZGUpCisrICAJCQkgICAgIGVuZGxpbmspKSkpOworKworKyAgY3VzdG9tX2ZuCisrICAgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlIChmbG9hdF90eXBlX25vZGUsCisrICAJCQkgICAgIENVU1RPTV9OVU0KKysgIAkJCSAgICAgZW5kbGluaykpOworKyAgY3VzdG9tX2ZuaQorKyAgICAgID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAoZmxvYXRfdHlwZV9ub2RlLAorKyAgCQkJICAgICBDVVNUT01fTlVNCisrICAJCQkgICAgIGRlZl9wYXJhbSAoaW50ZWdlcl90eXBlX25vZGUpCisrICAJCQkgICAgIGVuZGxpbmspKSk7CisrICBjdXN0b21fZm5mCisrICAgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlIChmbG9hdF90eXBlX25vZGUsCisrICAJCQkgICAgIENVU1RPTV9OVU0KKysgIAkJCSAgICAgZGVmX3BhcmFtIChmbG9hdF90eXBlX25vZGUpCisrICAJCQkgICAgIGVuZGxpbmspKSk7CisrICBjdXN0b21fZm5wCisrICAgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlIChmbG9hdF90eXBlX25vZGUsCisrICAJCQkgICAgIENVU1RPTV9OVU0KKysgIAkJCSAgICAgZGVmX3BhcmFtIChwdHJfdHlwZV9ub2RlKQorKyAgCQkJICAgICBlbmRsaW5rKSkpOworKyAgY3VzdG9tX2ZuaWkKKysgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKGZsb2F0X3R5cGVfbm9kZSwKKysgIAkJCSAgICAgQ1VTVE9NX05VTQorKyAgCQkJICAgICBkZWZfcGFyYW0gKGludGVnZXJfdHlwZV9ub2RlKQorKyAgCQkJICAgICBkZWZfcGFyYW0gKGludGVnZXJfdHlwZV9ub2RlKQorKyAgCQkJICAgICBlbmRsaW5rKSkpKTsKKysgIGN1c3RvbV9mbmlmCisrICAgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlIChmbG9hdF90eXBlX25vZGUsCisrICAJCQkgICAgIENVU1RPTV9OVU0KKysgIAkJCSAgICAgZGVmX3BhcmFtIChpbnRlZ2VyX3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZGVmX3BhcmFtIChmbG9hdF90eXBlX25vZGUpCisrICAJCQkgICAgIGVuZGxpbmspKSkpOworKyAgY3VzdG9tX2ZuaXAKKysgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKGZsb2F0X3R5cGVfbm9kZSwKKysgIAkJCSAgICAgQ1VTVE9NX05VTQorKyAgCQkJICAgICBkZWZfcGFyYW0gKGludGVnZXJfdHlwZV9ub2RlKQorKyAgCQkJICAgICBkZWZfcGFyYW0gKHB0cl90eXBlX25vZGUpCisrICAJCQkgICAgIGVuZGxpbmspKSkpOworKyAgY3VzdG9tX2ZuZmkKKysgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKGZsb2F0X3R5cGVfbm9kZSwKKysgIAkJCSAgICAgQ1VTVE9NX05VTQorKyAgCQkJICAgICBkZWZfcGFyYW0gKGZsb2F0X3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZGVmX3BhcmFtIChpbnRlZ2VyX3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZW5kbGluaykpKSk7CisrICBjdXN0b21fZm5mZgorKyAgICAgID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAoZmxvYXRfdHlwZV9ub2RlLAorKyAgCQkJICAgICBDVVNUT01fTlVNCisrICAJCQkgICAgIGRlZl9wYXJhbSAoZmxvYXRfdHlwZV9ub2RlKQorKyAgCQkJICAgICBkZWZfcGFyYW0gKGZsb2F0X3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZW5kbGluaykpKSk7CisrICBjdXN0b21fZm5mcAorKyAgICAgID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAoZmxvYXRfdHlwZV9ub2RlLAorKyAgCQkJICAgICBDVVNUT01fTlVNCisrICAJCQkgICAgIGRlZl9wYXJhbSAoZmxvYXRfdHlwZV9ub2RlKQorKyAgCQkJICAgICBkZWZfcGFyYW0gKHB0cl90eXBlX25vZGUpCisrICAJCQkgICAgIGVuZGxpbmspKSkpOworKyAgY3VzdG9tX2ZucGkKKysgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKGZsb2F0X3R5cGVfbm9kZSwKKysgIAkJCSAgICAgQ1VTVE9NX05VTQorKyAgCQkJICAgICBkZWZfcGFyYW0gKHB0cl90eXBlX25vZGUpCisrICAJCQkgICAgIGRlZl9wYXJhbSAoaW50ZWdlcl90eXBlX25vZGUpCisrICAJCQkgICAgIGVuZGxpbmspKSkpOworKyAgY3VzdG9tX2ZucGYKKysgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKGZsb2F0X3R5cGVfbm9kZSwKKysgIAkJCSAgICAgQ1VTVE9NX05VTQorKyAgCQkJICAgICBkZWZfcGFyYW0gKHB0cl90eXBlX25vZGUpCisrICAJCQkgICAgIGRlZl9wYXJhbSAoZmxvYXRfdHlwZV9ub2RlKQorKyAgCQkJICAgICBlbmRsaW5rKSkpKTsKKysgIGN1c3RvbV9mbnBwCisrICAgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlIChmbG9hdF90eXBlX25vZGUsCisrICAJCQkgICAgIENVU1RPTV9OVU0KKysgIAkJCSAgICAgZGVmX3BhcmFtIChwdHJfdHlwZV9ub2RlKQorKyAgCQkJICAgICBkZWZfcGFyYW0gKHB0cl90eXBlX25vZGUpCisrICAJCQkgICAgIGVuZGxpbmspKSkpOworKworKworKyAgY3VzdG9tX3BuCisrICAgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlIChwdHJfdHlwZV9ub2RlLAorKyAgCQkJICAgICBDVVNUT01fTlVNCisrICAJCQkgICAgIGVuZGxpbmspKTsKKysgIGN1c3RvbV9wbmkKKysgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKHB0cl90eXBlX25vZGUsCisrICAJCQkgICAgIENVU1RPTV9OVU0KKysgIAkJCSAgICAgZGVmX3BhcmFtIChpbnRlZ2VyX3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZW5kbGluaykpKTsKKysgIGN1c3RvbV9wbmYKKysgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKHB0cl90eXBlX25vZGUsCisrICAJCQkgICAgIENVU1RPTV9OVU0KKysgIAkJCSAgICAgZGVmX3BhcmFtIChmbG9hdF90eXBlX25vZGUpCisrICAJCQkgICAgIGVuZGxpbmspKSk7CisrICBjdXN0b21fcG5wCisrICAgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlIChwdHJfdHlwZV9ub2RlLAorKyAgCQkJICAgICBDVVNUT01fTlVNCisrICAJCQkgICAgIGRlZl9wYXJhbSAocHRyX3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZW5kbGluaykpKTsKKysgIGN1c3RvbV9wbmlpCisrICAgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlIChwdHJfdHlwZV9ub2RlLAorKyAgCQkJICAgICBDVVNUT01fTlVNCisrICAJCQkgICAgIGRlZl9wYXJhbSAoaW50ZWdlcl90eXBlX25vZGUpCisrICAJCQkgICAgIGRlZl9wYXJhbSAoaW50ZWdlcl90eXBlX25vZGUpCisrICAJCQkgICAgIGVuZGxpbmspKSkpOworKyAgY3VzdG9tX3BuaWYKKysgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKHB0cl90eXBlX25vZGUsCisrICAJCQkgICAgIENVU1RPTV9OVU0KKysgIAkJCSAgICAgZGVmX3BhcmFtIChpbnRlZ2VyX3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZGVmX3BhcmFtIChmbG9hdF90eXBlX25vZGUpCisrICAJCQkgICAgIGVuZGxpbmspKSkpOworKyAgY3VzdG9tX3BuaXAKKysgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKHB0cl90eXBlX25vZGUsCisrICAJCQkgICAgIENVU1RPTV9OVU0KKysgIAkJCSAgICAgZGVmX3BhcmFtIChpbnRlZ2VyX3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZGVmX3BhcmFtIChwdHJfdHlwZV9ub2RlKQorKyAgCQkJICAgICBlbmRsaW5rKSkpKTsKKysgIGN1c3RvbV9wbmZpCisrICAgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlIChwdHJfdHlwZV9ub2RlLAorKyAgCQkJICAgICBDVVNUT01fTlVNCisrICAJCQkgICAgIGRlZl9wYXJhbSAoZmxvYXRfdHlwZV9ub2RlKQorKyAgCQkJICAgICBkZWZfcGFyYW0gKGludGVnZXJfdHlwZV9ub2RlKQorKyAgCQkJICAgICBlbmRsaW5rKSkpKTsKKysgIGN1c3RvbV9wbmZmCisrICAgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlIChwdHJfdHlwZV9ub2RlLAorKyAgCQkJICAgICBDVVNUT01fTlVNCisrICAJCQkgICAgIGRlZl9wYXJhbSAoZmxvYXRfdHlwZV9ub2RlKQorKyAgCQkJICAgICBkZWZfcGFyYW0gKGZsb2F0X3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZW5kbGluaykpKSk7CisrICBjdXN0b21fcG5mcAorKyAgICAgID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAocHRyX3R5cGVfbm9kZSwKKysgIAkJCSAgICAgQ1VTVE9NX05VTQorKyAgCQkJICAgICBkZWZfcGFyYW0gKGZsb2F0X3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZGVmX3BhcmFtIChwdHJfdHlwZV9ub2RlKQorKyAgCQkJICAgICBlbmRsaW5rKSkpKTsKKysgIGN1c3RvbV9wbnBpCisrICAgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlIChwdHJfdHlwZV9ub2RlLAorKyAgCQkJICAgICBDVVNUT01fTlVNCisrICAJCQkgICAgIGRlZl9wYXJhbSAocHRyX3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZGVmX3BhcmFtIChpbnRlZ2VyX3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZW5kbGluaykpKSk7CisrICBjdXN0b21fcG5wZgorKyAgICAgID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAocHRyX3R5cGVfbm9kZSwKKysgIAkJCSAgICAgQ1VTVE9NX05VTQorKyAgCQkJICAgICBkZWZfcGFyYW0gKHB0cl90eXBlX25vZGUpCisrICAJCQkgICAgIGRlZl9wYXJhbSAoZmxvYXRfdHlwZV9ub2RlKQorKyAgCQkJICAgICBlbmRsaW5rKSkpKTsKKysgIGN1c3RvbV9wbnBwCisrICAgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlIChwdHJfdHlwZV9ub2RlLAorKyAgCQkJICAgICBDVVNUT01fTlVNCisrICAJCQkgICAgIGRlZl9wYXJhbSAocHRyX3R5cGVfbm9kZSkKKysgIAkJCSAgICAgZGVmX3BhcmFtIChwdHJfdHlwZV9ub2RlKQorKyAgCQkJICAgICBlbmRsaW5rKSkpKTsKKysKKysKKysKKysgIC8qICpJTkRFTlQtT04qICovCisrCisrCisrICBmb3IgKGQgPSBiZGVzYzsgZC0+bmFtZTsgZCsrKQorKyAgICB7CisrICAgICAgYnVpbHRpbl9mdW5jdGlvbiAoZC0+bmFtZSwgKmQtPnR5cGUsIGQtPmNvZGUsCisrCQkJQlVJTFRfSU5fTUQsIE5VTEwsIE5VTEwpOworKyAgICB9CisrfQorKworKy8qIEV4cGFuZCBhbiBleHByZXNzaW9uIEVYUCB0aGF0IGNhbGxzIGEgYnVpbHQtaW4gZnVuY3Rpb24sCisrICAgd2l0aCByZXN1bHQgZ29pbmcgdG8gVEFSR0VUIGlmIHRoYXQncyBjb252ZW5pZW50CisrICAgKGFuZCBpbiBtb2RlIE1PREUgaWYgdGhhdCdzIGNvbnZlbmllbnQpLgorKyAgIFNVQlRBUkdFVCBtYXkgYmUgdXNlZCBhcyB0aGUgdGFyZ2V0IGZvciBjb21wdXRpbmcgb25lIG9mIEVYUCdzIG9wZXJhbmRzLgorKyAgIElHTk9SRSBpcyBub256ZXJvIGlmIHRoZSB2YWx1ZSBpcyB0byBiZSBpZ25vcmVkLiAgKi8KKysKKytzdGF0aWMgcnR4CisrbmlvczJfZXhwYW5kX2J1aWx0aW4gKHRyZWUgZXhwLCBydHggdGFyZ2V0LCBydHggc3VidGFyZ2V0LCAKKysgICAgICAgICAgICAgICAgICAgICAgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgaW50IGlnbm9yZSkKKyt7CisrICBjb25zdCBzdHJ1Y3QgYnVpbHRpbl9kZXNjcmlwdGlvbiAqZDsKKysgIHRyZWUgZm5kZWNsID0gVFJFRV9PUEVSQU5EIChUUkVFX09QRVJBTkQgKGV4cCwgMCksIDApOworKyAgdW5zaWduZWQgaW50IGZjb2RlID0gREVDTF9GVU5DVElPTl9DT0RFIChmbmRlY2wpOworKworKyAgZm9yIChkID0gYmRlc2M7IGQtPm5hbWU7IGQrKykKKysgICAgaWYgKGQtPmNvZGUgPT0gZmNvZGUpCisrICAgICAgcmV0dXJuIChkLT5leHBhbmRlcikgKGQsIGV4cCwgdGFyZ2V0LCBzdWJ0YXJnZXQsIG1vZGUsIGlnbm9yZSk7CisrCisrICAvKiB3ZSBzaG91bGQgaGF2ZSBzZWVuIG9uZSBvZiB0aGUgZnVuY3RpbnMgd2UgcmVnaXN0ZXJlZCAqLworKyAgYWJvcnQgKCk7CisrfQorKworK3N0YXRpYyBydHggbmlvczJfY3JlYXRlX3RhcmdldCAoY29uc3Qgc3RydWN0IGJ1aWx0aW5fZGVzY3JpcHRpb24gKiwgcnR4KTsKKysKKysKKytzdGF0aWMgcnR4CisrbmlvczJfY3JlYXRlX3RhcmdldCAoY29uc3Qgc3RydWN0IGJ1aWx0aW5fZGVzY3JpcHRpb24gKmQsIHJ0eCB0YXJnZXQpCisreworKyAgaWYgKCF0YXJnZXQKKysgICAgICB8fCAhKCppbnNuX2RhdGFbZC0+aWNvZGVdLm9wZXJhbmRbMF0ucHJlZGljYXRlKSAodGFyZ2V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNuX2RhdGFbZC0+aWNvZGVdLm9wZXJhbmRbMF0ubW9kZSkpCisrICAgIHsKKysgICAgICB0YXJnZXQgPSBnZW5fcmVnX3J0eCAoaW5zbl9kYXRhW2QtPmljb2RlXS5vcGVyYW5kWzBdLm1vZGUpOworKyAgICB9CisrCisrICByZXR1cm4gdGFyZ2V0OworK30KKysKKysKKytzdGF0aWMgcnR4IG5pb3MyX2V4dHJhY3Rfb3Bjb2RlIChjb25zdCBzdHJ1Y3QgYnVpbHRpbl9kZXNjcmlwdGlvbiAqLCBpbnQsIHRyZWUpOworK3N0YXRpYyBydHggbmlvczJfZXh0cmFjdF9vcGVyYW5kIChjb25zdCBzdHJ1Y3QgYnVpbHRpbl9kZXNjcmlwdGlvbiAqLCBpbnQsIGludCwgdHJlZSk7CisrCisrc3RhdGljIHJ0eAorK25pb3MyX2V4dHJhY3Rfb3Bjb2RlIChjb25zdCBzdHJ1Y3QgYnVpbHRpbl9kZXNjcmlwdGlvbiAqZCwgaW50IG9wLCB0cmVlIGFyZ2xpc3QpCisreworKyAgZW51bSBtYWNoaW5lX21vZGUgbW9kZSA9IGluc25fZGF0YVtkLT5pY29kZV0ub3BlcmFuZFtvcF0ubW9kZTsKKysgIHRyZWUgYXJnID0gVFJFRV9WQUxVRSAoYXJnbGlzdCk7CisrICBydHggb3Bjb2RlID0gZXhwYW5kX2V4cHIgKGFyZywgTlVMTF9SVFgsIG1vZGUsIDApOworKyAgb3Bjb2RlID0gcHJvdGVjdF9mcm9tX3F1ZXVlIChvcGNvZGUsIDApOworKworKyAgaWYgKCEoKmluc25fZGF0YVtkLT5pY29kZV0ub3BlcmFuZFtvcF0ucHJlZGljYXRlKSAob3Bjb2RlLCBtb2RlKSkKKysgICAgZXJyb3IgKCJDdXN0b20gaW5zdHJ1Y3Rpb24gb3Bjb2RlIG11c3QgYmUgY29tcGlsZSB0aW1lIGNvbnN0YW50IGluIHRoZSByYW5nZSAwLTI1NSBmb3IgJXMiLCBkLT5uYW1lKTsKKysKKysgIHJldHVybiBvcGNvZGU7CisrfQorKworK3N0YXRpYyBydHgKKytuaW9zMl9leHRyYWN0X29wZXJhbmQgKGNvbnN0IHN0cnVjdCBidWlsdGluX2Rlc2NyaXB0aW9uICpkLCBpbnQgb3AsIGludCBhcmdudW0sIHRyZWUgYXJnbGlzdCkKKyt7CisrICBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlID0gaW5zbl9kYXRhW2QtPmljb2RlXS5vcGVyYW5kW29wXS5tb2RlOworKyAgdHJlZSBhcmcgPSBUUkVFX1ZBTFVFIChhcmdsaXN0KTsKKysgIHJ0eCBvcGVyYW5kID0gZXhwYW5kX2V4cHIgKGFyZywgTlVMTF9SVFgsIG1vZGUsIDApOworKyAgb3BlcmFuZCA9IHByb3RlY3RfZnJvbV9xdWV1ZSAob3BlcmFuZCwgMCk7CisrCisrICBpZiAoISgqaW5zbl9kYXRhW2QtPmljb2RlXS5vcGVyYW5kW29wXS5wcmVkaWNhdGUpIChvcGVyYW5kLCBtb2RlKSkKKysgICAgb3BlcmFuZCA9IGNvcHlfdG9fbW9kZV9yZWcgKG1vZGUsIG9wZXJhbmQpOworKworKyAgLyogPz8/IEJldHRlciBlcnJvcnMgd291bGQgYmUgbmljZSAqLworKyAgaWYgKCEoKmluc25fZGF0YVtkLT5pY29kZV0ub3BlcmFuZFtvcF0ucHJlZGljYXRlKSAob3BlcmFuZCwgbW9kZSkpCisrICAgIGVycm9yICgiSW52YWxpZCBhcmd1bWVudCAlZCB0byAlcyIsIGFyZ251bSwgZC0+bmFtZSk7CisrCisrICByZXR1cm4gb3BlcmFuZDsKKyt9CisrCisrCisrc3RhdGljIHJ0eAorK25pb3MyX2V4cGFuZF9jdXN0b21fbiAoY29uc3Qgc3RydWN0IGJ1aWx0aW5fZGVzY3JpcHRpb24gKmQsIHRyZWUgZXhwLCAKKysgICAgICAgICAgICAgICAgICAgICAgIHJ0eCB0YXJnZXQgQVRUUklCVVRFX1VOVVNFRCwgcnR4IHN1YnRhcmdldCBBVFRSSUJVVEVfVU5VU0VELCAKKysgICAgICAgICAgICAgICAgICAgICAgIGVudW0gbWFjaGluZV9tb2RlIG1vZGUgQVRUUklCVVRFX1VOVVNFRCwgaW50IGlnbm9yZSBBVFRSSUJVVEVfVU5VU0VEKQorK3sKKysgIHRyZWUgYXJnbGlzdCA9IFRSRUVfT1BFUkFORCAoZXhwLCAxKTsKKysgIHJ0eCBwYXQ7CisrICBydHggb3Bjb2RlOworKworKyAgLyogY3VzdG9tX24gc2hvdWxkIGhhdmUgZXhhY3RseSBvbmUgb3BlcmFuZCAqLworKyAgaWYgKGluc25fZGF0YVtkLT5pY29kZV0ubl9vcGVyYW5kcyAhPSAxKQorKyAgICBhYm9ydCAoKTsKKysKKysgIG9wY29kZSA9IG5pb3MyX2V4dHJhY3Rfb3Bjb2RlIChkLCAwLCBhcmdsaXN0KTsKKysKKysgIHBhdCA9IEdFTl9GQ04gKGQtPmljb2RlKSAob3Bjb2RlKTsKKysgIGlmICghcGF0KQorKyAgICByZXR1cm4gMDsKKysgIGVtaXRfaW5zbiAocGF0KTsKKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgcnR4CisrbmlvczJfZXhwYW5kX2N1c3RvbV9YbiAoY29uc3Qgc3RydWN0IGJ1aWx0aW5fZGVzY3JpcHRpb24gKmQsIHRyZWUgZXhwLCAKKysgICAgICAgICAgICAgICAgICAgICAgICBydHggdGFyZ2V0LCBydHggc3VidGFyZ2V0IEFUVFJJQlVURV9VTlVTRUQsIAorKyAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gbWFjaGluZV9tb2RlIG1vZGUgQVRUUklCVVRFX1VOVVNFRCwgCisrICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlnbm9yZSBBVFRSSUJVVEVfVU5VU0VEKQorK3sKKysgIHRyZWUgYXJnbGlzdCA9IFRSRUVfT1BFUkFORCAoZXhwLCAxKTsKKysgIHJ0eCBwYXQ7CisrICBydHggb3Bjb2RlOworKworKyAgLyogY3VzdG9tX1huIHNob3VsZCBoYXZlIGV4YWN0bHkgdHdvIG9wZXJhbmRzICovCisrICBpZiAoaW5zbl9kYXRhW2QtPmljb2RlXS5uX29wZXJhbmRzICE9IDIpCisrICAgIGFib3J0ICgpOworKworKyAgdGFyZ2V0ID0gbmlvczJfY3JlYXRlX3RhcmdldCAoZCwgdGFyZ2V0KTsKKysgIG9wY29kZSA9IG5pb3MyX2V4dHJhY3Rfb3Bjb2RlIChkLCAxLCBhcmdsaXN0KTsKKysKKysgIHBhdCA9IEdFTl9GQ04gKGQtPmljb2RlKSAodGFyZ2V0LCBvcGNvZGUpOworKyAgaWYgKCFwYXQpCisrICAgIHJldHVybiAwOworKyAgZW1pdF9pbnNuIChwYXQpOworKyAgcmV0dXJuIHRhcmdldDsKKyt9CisrCisrc3RhdGljIHJ0eAorK25pb3MyX2V4cGFuZF9jdXN0b21fblggKGNvbnN0IHN0cnVjdCBidWlsdGluX2Rlc2NyaXB0aW9uICpkLCB0cmVlIGV4cCwgCisrICAgICAgICAgICAgICAgICAgICAgICAgcnR4IHRhcmdldCBBVFRSSUJVVEVfVU5VU0VELCBydHggc3VidGFyZ2V0IEFUVFJJQlVURV9VTlVTRUQsIAorKyAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gbWFjaGluZV9tb2RlIG1vZGUgQVRUUklCVVRFX1VOVVNFRCwgaW50IGlnbm9yZSBBVFRSSUJVVEVfVU5VU0VEKQorK3sKKysgIHRyZWUgYXJnbGlzdCA9IFRSRUVfT1BFUkFORCAoZXhwLCAxKTsKKysgIHJ0eCBwYXQ7CisrICBydHggb3Bjb2RlOworKyAgcnR4IG9wZXJhbmRzWzFdOworKyAgaW50IGk7CisrCisrCisrICAvKiBjdXN0b21fblggc2hvdWxkIGhhdmUgZXhhY3RseSB0d28gb3BlcmFuZHMgKi8KKysgIGlmIChpbnNuX2RhdGFbZC0+aWNvZGVdLm5fb3BlcmFuZHMgIT0gMikKKysgICAgYWJvcnQgKCk7CisrCisrICBvcGNvZGUgPSBuaW9zMl9leHRyYWN0X29wY29kZSAoZCwgMCwgYXJnbGlzdCk7CisrICBmb3IgKGkgPSAwOyBpIDwgMTsgaSsrKQorKyAgICB7CisrICAgICAgYXJnbGlzdCA9IFRSRUVfQ0hBSU4gKGFyZ2xpc3QpOworKyAgICAgIG9wZXJhbmRzW2ldID0gbmlvczJfZXh0cmFjdF9vcGVyYW5kIChkLCBpICsgMSwgaSArIDEsIGFyZ2xpc3QpOworKyAgICB9CisrCisrICBwYXQgPSBHRU5fRkNOIChkLT5pY29kZSkgKG9wY29kZSwgb3BlcmFuZHNbMF0pOworKyAgaWYgKCFwYXQpCisrICAgIHJldHVybiAwOworKyAgZW1pdF9pbnNuIChwYXQpOworKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBydHgKKytuaW9zMl9leHBhbmRfY3VzdG9tX1huWCAoY29uc3Qgc3RydWN0IGJ1aWx0aW5fZGVzY3JpcHRpb24gKmQsIHRyZWUgZXhwLCBydHggdGFyZ2V0LCAKKysgICAgICAgICAgICAgICAgICAgICAgICAgcnR4IHN1YnRhcmdldCBBVFRSSUJVVEVfVU5VU0VELCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlIEFUVFJJQlVURV9VTlVTRUQsIAorKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWdub3JlIEFUVFJJQlVURV9VTlVTRUQpCisreworKyAgdHJlZSBhcmdsaXN0ID0gVFJFRV9PUEVSQU5EIChleHAsIDEpOworKyAgcnR4IHBhdDsKKysgIHJ0eCBvcGNvZGU7CisrICBydHggb3BlcmFuZHNbMV07CisrICBpbnQgaTsKKysKKysgIC8qIGN1c3RvbV9YbiBzaG91bGQgaGF2ZSBleGFjdGx5IHRocmVlIG9wZXJhbmRzICovCisrICBpZiAoaW5zbl9kYXRhW2QtPmljb2RlXS5uX29wZXJhbmRzICE9IDMpCisrICAgIGFib3J0ICgpOworKworKyAgdGFyZ2V0ID0gbmlvczJfY3JlYXRlX3RhcmdldCAoZCwgdGFyZ2V0KTsKKysgIG9wY29kZSA9IG5pb3MyX2V4dHJhY3Rfb3Bjb2RlIChkLCAxLCBhcmdsaXN0KTsKKysKKysgIGZvciAoaSA9IDA7IGkgPCAxOyBpKyspCisrICAgIHsKKysgICAgICBhcmdsaXN0ID0gVFJFRV9DSEFJTiAoYXJnbGlzdCk7CisrICAgICAgb3BlcmFuZHNbaV0gPSBuaW9zMl9leHRyYWN0X29wZXJhbmQgKGQsIGkgKyAyLCBpICsgMSwgYXJnbGlzdCk7CisrICAgIH0KKysKKysgIHBhdCA9IEdFTl9GQ04gKGQtPmljb2RlKSAodGFyZ2V0LCBvcGNvZGUsIG9wZXJhbmRzWzBdKTsKKysKKysgIGlmICghcGF0KQorKyAgICByZXR1cm4gMDsKKysgIGVtaXRfaW5zbiAocGF0KTsKKysgIHJldHVybiB0YXJnZXQ7CisrfQorKworK3N0YXRpYyBydHgKKytuaW9zMl9leHBhbmRfY3VzdG9tX25YWCAoY29uc3Qgc3RydWN0IGJ1aWx0aW5fZGVzY3JpcHRpb24gKmQsIHRyZWUgZXhwLCBydHggdGFyZ2V0IEFUVFJJQlVURV9VTlVTRUQsIAorKyAgICAgICAgICAgICAgICAgICAgICAgICBydHggc3VidGFyZ2V0IEFUVFJJQlVURV9VTlVTRUQsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUgQVRUUklCVVRFX1VOVVNFRCwgCisrICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpZ25vcmUgQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICB0cmVlIGFyZ2xpc3QgPSBUUkVFX09QRVJBTkQgKGV4cCwgMSk7CisrICBydHggcGF0OworKyAgcnR4IG9wY29kZTsKKysgIHJ0eCBvcGVyYW5kc1syXTsKKysgIGludCBpOworKworKworKyAgLyogY3VzdG9tX25YIHNob3VsZCBoYXZlIGV4YWN0bHkgdGhyZWUgb3BlcmFuZHMgKi8KKysgIGlmIChpbnNuX2RhdGFbZC0+aWNvZGVdLm5fb3BlcmFuZHMgIT0gMykKKysgICAgYWJvcnQgKCk7CisrCisrICBvcGNvZGUgPSBuaW9zMl9leHRyYWN0X29wY29kZSAoZCwgMCwgYXJnbGlzdCk7CisrICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorKyAgICB7CisrICAgICAgYXJnbGlzdCA9IFRSRUVfQ0hBSU4gKGFyZ2xpc3QpOworKyAgICAgIG9wZXJhbmRzW2ldID0gbmlvczJfZXh0cmFjdF9vcGVyYW5kIChkLCBpICsgMSwgaSArIDEsIGFyZ2xpc3QpOworKyAgICB9CisrCisrICBwYXQgPSBHRU5fRkNOIChkLT5pY29kZSkgKG9wY29kZSwgb3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdKTsKKysgIGlmICghcGF0KQorKyAgICByZXR1cm4gMDsKKysgIGVtaXRfaW5zbiAocGF0KTsKKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgcnR4CisrbmlvczJfZXhwYW5kX2N1c3RvbV9YblhYIChjb25zdCBzdHJ1Y3QgYnVpbHRpbl9kZXNjcmlwdGlvbiAqZCwgdHJlZSBleHAsIHJ0eCB0YXJnZXQsIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgcnR4IHN1YnRhcmdldCBBVFRSSUJVVEVfVU5VU0VELCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlIEFUVFJJQlVURV9VTlVTRUQsIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlnbm9yZSBBVFRSSUJVVEVfVU5VU0VEKQorK3sKKysgIHRyZWUgYXJnbGlzdCA9IFRSRUVfT1BFUkFORCAoZXhwLCAxKTsKKysgIHJ0eCBwYXQ7CisrICBydHggb3Bjb2RlOworKyAgcnR4IG9wZXJhbmRzWzJdOworKyAgaW50IGk7CisrCisrCisrICAvKiBjdXN0b21fWG5YIHNob3VsZCBoYXZlIGV4YWN0bHkgZm91ciBvcGVyYW5kcyAqLworKyAgaWYgKGluc25fZGF0YVtkLT5pY29kZV0ubl9vcGVyYW5kcyAhPSA0KQorKyAgICBhYm9ydCAoKTsKKysKKysgIHRhcmdldCA9IG5pb3MyX2NyZWF0ZV90YXJnZXQgKGQsIHRhcmdldCk7CisrICBvcGNvZGUgPSBuaW9zMl9leHRyYWN0X29wY29kZSAoZCwgMSwgYXJnbGlzdCk7CisrICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorKyAgICB7CisrICAgICAgYXJnbGlzdCA9IFRSRUVfQ0hBSU4gKGFyZ2xpc3QpOworKyAgICAgIG9wZXJhbmRzW2ldID0gbmlvczJfZXh0cmFjdF9vcGVyYW5kIChkLCBpICsgMiwgaSArIDEsIGFyZ2xpc3QpOworKyAgICB9CisrCisrICBwYXQgPSBHRU5fRkNOIChkLT5pY29kZSkgKHRhcmdldCwgb3Bjb2RlLCBvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0pOworKworKyAgaWYgKCFwYXQpCisrICAgIHJldHVybiAwOworKyAgZW1pdF9pbnNuIChwYXQpOworKyAgcmV0dXJuIHRhcmdldDsKKyt9CisrCisrCisrCisrc3RhdGljIHJ0eAorK25pb3MyX2V4cGFuZF9TVFhJTyAoY29uc3Qgc3RydWN0IGJ1aWx0aW5fZGVzY3JpcHRpb24gKmQsIHRyZWUgZXhwLCBydHggdGFyZ2V0IEFUVFJJQlVURV9VTlVTRUQsIAorKyAgICAgICAgICAgICAgICAgICAgcnR4IHN1YnRhcmdldCBBVFRSSUJVVEVfVU5VU0VELCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlIEFUVFJJQlVURV9VTlVTRUQsIAorKyAgICAgICAgICAgICAgICAgICAgaW50IGlnbm9yZSBBVFRSSUJVVEVfVU5VU0VEKQorK3sKKysgIHRyZWUgYXJnbGlzdCA9IFRSRUVfT1BFUkFORCAoZXhwLCAxKTsKKysgIHJ0eCBwYXQ7CisrICBydHggc3RvcmVfZGVzdCwgc3RvcmVfdmFsOworKyAgZW51bSBpbnNuX2NvZGUgaWNvZGUgPSBkLT5pY29kZTsKKysKKysgIC8qIHN0b3JlcyBzaG91bGQgaGF2ZSBleGFjdGx5IHR3byBvcGVyYW5kcyAqLworKyAgaWYgKGluc25fZGF0YVtpY29kZV0ubl9vcGVyYW5kcyAhPSAyKQorKyAgICBhYm9ydCAoKTsKKysKKysgIC8qIHByb2Nlc3MgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBzdG9yZSAqLworKyAgeworKyAgICBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlID0gaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzBdLm1vZGU7CisrICAgIHRyZWUgYXJnID0gVFJFRV9WQUxVRSAoYXJnbGlzdCk7CisrICAgIHN0b3JlX2Rlc3QgPSBleHBhbmRfZXhwciAoYXJnLCBOVUxMX1JUWCwgVk9JRG1vZGUsIDApOworKyAgICBzdG9yZV9kZXN0ID0gcHJvdGVjdF9mcm9tX3F1ZXVlIChzdG9yZV9kZXN0LCAwKTsKKysKKysgICAgc3RvcmVfZGVzdCA9IGdlbl9ydHhfTUVNIChtb2RlLCBjb3B5X3RvX21vZGVfcmVnIChQbW9kZSwgc3RvcmVfZGVzdCkpOworKworKyAgICAvKiA/Pz8gQmV0dGVyIGVycm9ycyB3b3VsZCBiZSBuaWNlICovCisrICAgIGlmICghKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMF0ucHJlZGljYXRlKSAoc3RvcmVfZGVzdCwgbW9kZSkpCisrICAgICAgZXJyb3IgKCJJbnZhbGlkIGFyZ3VtZW50IDEgdG8gJXMiLCBkLT5uYW1lKTsKKysgIH0KKysKKysKKysgIC8qIHByb2Nlc3MgdGhlIHZhbHVlIHRvIHN0b3JlICovCisrICB7CisrICAgIGVudW0gbWFjaGluZV9tb2RlIG1vZGUgPSBpbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMV0ubW9kZTsKKysgICAgdHJlZSBhcmcgPSBUUkVFX1ZBTFVFIChUUkVFX0NIQUlOIChhcmdsaXN0KSk7CisrICAgIHN0b3JlX3ZhbCA9IGV4cGFuZF9leHByIChhcmcsIE5VTExfUlRYLCBtb2RlLCAwKTsKKysgICAgc3RvcmVfdmFsID0gcHJvdGVjdF9mcm9tX3F1ZXVlIChzdG9yZV92YWwsIDApOworKworKyAgICBpZiAoISgqaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzFdLnByZWRpY2F0ZSkgKHN0b3JlX3ZhbCwgbW9kZSkpCisrICAgICAgc3RvcmVfdmFsID0gY29weV90b19tb2RlX3JlZyAobW9kZSwgc3RvcmVfdmFsKTsKKysKKysgICAgLyogPz8/IEJldHRlciBlcnJvcnMgd291bGQgYmUgbmljZSAqLworKyAgICBpZiAoISgqaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzFdLnByZWRpY2F0ZSkgKHN0b3JlX3ZhbCwgbW9kZSkpCisrICAgICAgZXJyb3IgKCJJbnZhbGlkIGFyZ3VtZW50IDIgdG8gJXMiLCBkLT5uYW1lKTsKKysgIH0KKysKKysgIHBhdCA9IEdFTl9GQ04gKGQtPmljb2RlKSAoc3RvcmVfZGVzdCwgc3RvcmVfdmFsKTsKKysgIGlmICghcGF0KQorKyAgICByZXR1cm4gMDsKKysgIGVtaXRfaW5zbiAocGF0KTsKKysgIHJldHVybiAwOworK30KKysKKysKKytzdGF0aWMgcnR4CisrbmlvczJfZXhwYW5kX0xEWElPIChjb25zdCBzdHJ1Y3QgYnVpbHRpbl9kZXNjcmlwdGlvbiAqIGQsIHRyZWUgZXhwLCBydHggdGFyZ2V0LCAKKysgICAgICAgICAgICAgICAgICAgIHJ0eCBzdWJ0YXJnZXQgQVRUUklCVVRFX1VOVVNFRCwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSBBVFRSSUJVVEVfVU5VU0VELCAKKysgICAgICAgICAgICAgICAgICAgIGludCBpZ25vcmUgQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICB0cmVlIGFyZ2xpc3QgPSBUUkVFX09QRVJBTkQgKGV4cCwgMSk7CisrICBydHggcGF0OworKyAgcnR4IGxkX3NyYzsKKysgIGVudW0gaW5zbl9jb2RlIGljb2RlID0gZC0+aWNvZGU7CisrCisrICAvKiBsb2FkcyBzaG91bGQgaGF2ZSBleGFjdGx5IHR3byBvcGVyYW5kcyAqLworKyAgaWYgKGluc25fZGF0YVtpY29kZV0ubl9vcGVyYW5kcyAhPSAyKQorKyAgICBhYm9ydCAoKTsKKysKKysgIHRhcmdldCA9IG5pb3MyX2NyZWF0ZV90YXJnZXQgKGQsIHRhcmdldCk7CisrCisrICB7CisrICAgIGVudW0gbWFjaGluZV9tb2RlIG1vZGUgPSBpbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMV0ubW9kZTsKKysgICAgdHJlZSBhcmcgPSBUUkVFX1ZBTFVFIChhcmdsaXN0KTsKKysgICAgbGRfc3JjID0gZXhwYW5kX2V4cHIgKGFyZywgTlVMTF9SVFgsIFZPSURtb2RlLCAwKTsKKysgICAgbGRfc3JjID0gcHJvdGVjdF9mcm9tX3F1ZXVlIChsZF9zcmMsIDApOworKworKyAgICBsZF9zcmMgPSBnZW5fcnR4X01FTSAobW9kZSwgY29weV90b19tb2RlX3JlZyAoUG1vZGUsIGxkX3NyYykpOworKworKyAgICAvKiA/Pz8gQmV0dGVyIGVycm9ycyB3b3VsZCBiZSBuaWNlICovCisrICAgIGlmICghKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMV0ucHJlZGljYXRlKSAobGRfc3JjLCBtb2RlKSkKKysgICAgICB7CisrICAgICAgICBlcnJvciAoIkludmFsaWQgYXJndW1lbnQgMSB0byAlcyIsIGQtPm5hbWUpOworKyAgICAgIH0KKysgIH0KKysKKysgIHBhdCA9IEdFTl9GQ04gKGQtPmljb2RlKSAodGFyZ2V0LCBsZF9zcmMpOworKyAgaWYgKCFwYXQpCisrICAgIHJldHVybiAwOworKyAgZW1pdF9pbnNuIChwYXQpOworKyAgcmV0dXJuIHRhcmdldDsKKyt9CisrCisrCisrc3RhdGljIHJ0eAorK25pb3MyX2V4cGFuZF9zeW5jIChjb25zdCBzdHJ1Y3QgYnVpbHRpbl9kZXNjcmlwdGlvbiAqIGQgQVRUUklCVVRFX1VOVVNFRCwgCisrICAgICAgICAgICAgICAgICAgIHRyZWUgZXhwIEFUVFJJQlVURV9VTlVTRUQsIHJ0eCB0YXJnZXQgQVRUUklCVVRFX1VOVVNFRCwgCisrICAgICAgICAgICAgICAgICAgIHJ0eCBzdWJ0YXJnZXQgQVRUUklCVVRFX1VOVVNFRCwgCisrICAgICAgICAgICAgICAgICAgIGVudW0gbWFjaGluZV9tb2RlIG1vZGUgQVRUUklCVVRFX1VOVVNFRCwgCisrICAgICAgICAgICAgICAgICAgIGludCBpZ25vcmUgQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICBlbWl0X2luc24gKGdlbl9zeW5jICgpKTsKKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgcnR4CisrbmlvczJfZXhwYW5kX3JkY3RsIChjb25zdCBzdHJ1Y3QgYnVpbHRpbl9kZXNjcmlwdGlvbiAqIGQgQVRUUklCVVRFX1VOVVNFRCwgCisrICAgICAgICAgICAgICAgICAgIHRyZWUgZXhwIEFUVFJJQlVURV9VTlVTRUQsIHJ0eCB0YXJnZXQgQVRUUklCVVRFX1VOVVNFRCwgCisrICAgICAgICAgICAgICAgICAgIHJ0eCBzdWJ0YXJnZXQgQVRUUklCVVRFX1VOVVNFRCwgCisrICAgICAgICAgICAgICAgICAgIGVudW0gbWFjaGluZV9tb2RlIG1vZGUgQVRUUklCVVRFX1VOVVNFRCwgCisrICAgICAgICAgICAgICAgICAgIGludCBpZ25vcmUgQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICB0cmVlIGFyZ2xpc3QgPSBUUkVFX09QRVJBTkQgKGV4cCwgMSk7CisrICBydHggcGF0OworKyAgcnR4IHJkY3RsX3JlZzsKKysgIGVudW0gaW5zbl9jb2RlIGljb2RlID0gZC0+aWNvZGU7CisrCisrICAvKiByZGN0bCBzaG91bGQgaGF2ZSBleGFjdGx5IHR3byBvcGVyYW5kcyAqLworKyAgaWYgKGluc25fZGF0YVtpY29kZV0ubl9vcGVyYW5kcyAhPSAyKQorKyAgICBhYm9ydCAoKTsKKysKKysgIHRhcmdldCA9IG5pb3MyX2NyZWF0ZV90YXJnZXQgKGQsIHRhcmdldCk7CisrCisrICB7CisrICAgIGVudW0gbWFjaGluZV9tb2RlIG1vZGUgPSBpbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMV0ubW9kZTsKKysgICAgdHJlZSBhcmcgPSBUUkVFX1ZBTFVFIChhcmdsaXN0KTsKKysgICAgcmRjdGxfcmVnID0gZXhwYW5kX2V4cHIgKGFyZywgTlVMTF9SVFgsIFZPSURtb2RlLCAwKTsKKysgICAgcmRjdGxfcmVnID0gcHJvdGVjdF9mcm9tX3F1ZXVlIChyZGN0bF9yZWcsIDApOworKworKyAgICBpZiAoISgqaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzFdLnByZWRpY2F0ZSkgKHJkY3RsX3JlZywgbW9kZSkpCisrICAgICAgeworKyAgICAgICAgZXJyb3IgKCJDb250cm9sIHJlZ2lzdGVyIG51bWJlciBtdXN0IGJlIGluIHJhbmdlIDAtMzEgZm9yICVzIiwgZC0+bmFtZSk7CisrICAgICAgfQorKyAgfQorKworKyAgcGF0ID0gR0VOX0ZDTiAoZC0+aWNvZGUpICh0YXJnZXQsIHJkY3RsX3JlZyk7CisrICBpZiAoIXBhdCkKKysgICAgcmV0dXJuIDA7CisrICBlbWl0X2luc24gKHBhdCk7CisrICByZXR1cm4gdGFyZ2V0OworK30KKysKKytzdGF0aWMgcnR4CisrbmlvczJfZXhwYW5kX3dyY3RsIChjb25zdCBzdHJ1Y3QgYnVpbHRpbl9kZXNjcmlwdGlvbiAqIGQgQVRUUklCVVRFX1VOVVNFRCwgCisrICAgICAgICAgICAgICAgICAgIHRyZWUgZXhwIEFUVFJJQlVURV9VTlVTRUQsIHJ0eCB0YXJnZXQgQVRUUklCVVRFX1VOVVNFRCwgCisrICAgICAgICAgICAgICAgICAgIHJ0eCBzdWJ0YXJnZXQgQVRUUklCVVRFX1VOVVNFRCwgCisrICAgICAgICAgICAgICAgICAgIGVudW0gbWFjaGluZV9tb2RlIG1vZGUgQVRUUklCVVRFX1VOVVNFRCwgCisrICAgICAgICAgICAgICAgICAgIGludCBpZ25vcmUgQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICB0cmVlIGFyZ2xpc3QgPSBUUkVFX09QRVJBTkQgKGV4cCwgMSk7CisrICBydHggcGF0OworKyAgcnR4IHdyY3RsX3JlZywgc3RvcmVfdmFsOworKyAgZW51bSBpbnNuX2NvZGUgaWNvZGUgPSBkLT5pY29kZTsKKysKKysgIC8qIHN0b3JlcyBzaG91bGQgaGF2ZSBleGFjdGx5IHR3byBvcGVyYW5kcyAqLworKyAgaWYgKGluc25fZGF0YVtpY29kZV0ubl9vcGVyYW5kcyAhPSAyKQorKyAgICBhYm9ydCAoKTsKKysKKysgIC8qIHByb2Nlc3MgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBzdG9yZSAqLworKyAgeworKyAgICBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlID0gaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzBdLm1vZGU7CisrICAgIHRyZWUgYXJnID0gVFJFRV9WQUxVRSAoYXJnbGlzdCk7CisrICAgIHdyY3RsX3JlZyA9IGV4cGFuZF9leHByIChhcmcsIE5VTExfUlRYLCBWT0lEbW9kZSwgMCk7CisrICAgIHdyY3RsX3JlZyA9IHByb3RlY3RfZnJvbV9xdWV1ZSAod3JjdGxfcmVnLCAwKTsKKysKKysgICAgaWYgKCEoKmluc25fZGF0YVtpY29kZV0ub3BlcmFuZFswXS5wcmVkaWNhdGUpICh3cmN0bF9yZWcsIG1vZGUpKQorKyAgICAgIGVycm9yICgiQ29udHJvbCByZWdpc3RlciBudW1iZXIgbXVzdCBiZSBpbiByYW5nZSAwLTMxIGZvciAlcyIsIGQtPm5hbWUpOworKyAgfQorKworKworKyAgLyogcHJvY2VzcyB0aGUgdmFsdWUgdG8gc3RvcmUgKi8KKysgIHsKKysgICAgZW51bSBtYWNoaW5lX21vZGUgbW9kZSA9IGluc25fZGF0YVtpY29kZV0ub3BlcmFuZFsxXS5tb2RlOworKyAgICB0cmVlIGFyZyA9IFRSRUVfVkFMVUUgKFRSRUVfQ0hBSU4gKGFyZ2xpc3QpKTsKKysgICAgc3RvcmVfdmFsID0gZXhwYW5kX2V4cHIgKGFyZywgTlVMTF9SVFgsIG1vZGUsIDApOworKyAgICBzdG9yZV92YWwgPSBwcm90ZWN0X2Zyb21fcXVldWUgKHN0b3JlX3ZhbCwgMCk7CisrCisrICAgIGlmICghKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMV0ucHJlZGljYXRlKSAoc3RvcmVfdmFsLCBtb2RlKSkKKysgICAgICBzdG9yZV92YWwgPSBjb3B5X3RvX21vZGVfcmVnIChtb2RlLCBzdG9yZV92YWwpOworKworKyAgICAvKiA/Pz8gQmV0dGVyIGVycm9ycyB3b3VsZCBiZSBuaWNlICovCisrICAgIGlmICghKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMV0ucHJlZGljYXRlKSAoc3RvcmVfdmFsLCBtb2RlKSkKKysgICAgICBlcnJvciAoIkludmFsaWQgYXJndW1lbnQgMiB0byAlcyIsIGQtPm5hbWUpOworKyAgfQorKworKyAgcGF0ID0gR0VOX0ZDTiAoZC0+aWNvZGUpICh3cmN0bF9yZWcsIHN0b3JlX3ZhbCk7CisrICBpZiAoIXBhdCkKKysgICAgcmV0dXJuIDA7CisrICBlbWl0X2luc24gKHBhdCk7CisrICByZXR1cm4gMDsKKyt9CisrCisrCisrI2luY2x1ZGUgImd0LW5pb3MyLmgiCisrCitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvbmlvczIvbmlvczItZHAtYml0LmMgZ2NjLTMuNC42L2djYy9jb25maWcvbmlvczIvbmlvczItZHAtYml0LmMKKy0tLSBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL25pb3MyL25pb3MyLWRwLWJpdC5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTMuNC42L2djYy9jb25maWcvbmlvczIvbmlvczItZHAtYml0LmMJMjAwNy0wOC0xNSAyMzowOTozNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTY1MiBAQAorKworKy8qIFRoaXMgaXMgYSBzb2Z0d2FyZSBmbG9hdGluZyBwb2ludCBsaWJyYXJ5IHdoaWNoIGNhbiBiZSB1c2VkCisrICAgZm9yIHRhcmdldHMgd2l0aG91dCBoYXJkd2FyZSBmbG9hdGluZyBwb2ludC4gCisrICAgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0CisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyt1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKytGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisrbGF0ZXIgdmVyc2lvbi4KKysKKytJbiBhZGRpdGlvbiB0byB0aGUgcGVybWlzc2lvbnMgaW4gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB0aGUKKytGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMgeW91IHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGxpbmsgdGhlCisrY29tcGlsZWQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgd2l0aCBvdGhlciBwcm9ncmFtcywgYW5kIHRvIGRpc3RyaWJ1dGUKKyt0aG9zZSBwcm9ncmFtcyB3aXRob3V0IGFueSByZXN0cmljdGlvbiBjb21pbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMKKytmaWxlLiAgKFRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHJlc3RyaWN0aW9ucyBkbyBhcHBseSBpbiBvdGhlcgorK3Jlc3BlY3RzOyBmb3IgZXhhbXBsZSwgdGhleSBjb3ZlciBtb2RpZmljYXRpb24gb2YgdGhlIGZpbGUsIGFuZAorK2Rpc3RyaWJ1dGlvbiB3aGVuIG5vdCBsaW5rZWQgaW50byBhbm90aGVyIHByb2dyYW0uKQorKworK1RoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKytXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKytHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKythbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCisrdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorK0Jvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysKKysvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpZiB5b3UgbGluayB0aGlzIGxpYnJhcnkgd2l0aCBvdGhlciBmaWxlcywKKysgICBzb21lIG9mIHdoaWNoIGFyZSBjb21waWxlZCB3aXRoIEdDQywgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLAorKyAgIHRoaXMgbGlicmFyeSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlCisrICAgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrICAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlciBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeQorKyAgIHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICAqLworKworKy8qIFRoaXMgaW1wbGVtZW50cyBJRUVFIDc1NCBmb3JtYXQgYXJpdGhtZXRpYywgYnV0IGRvZXMgbm90IHByb3ZpZGUgYQorKyAgIG1lY2hhbmlzbSBmb3Igc2V0dGluZyB0aGUgcm91bmRpbmcgbW9kZSwgb3IgZm9yIGdlbmVyYXRpbmcgb3IgaGFuZGxpbmcKKysgICBleGNlcHRpb25zLgorKworKyAgIFRoZSBvcmlnaW5hbCBjb2RlIGJ5IFN0ZXZlIENoYW1iZXJsYWluLCBoYWNrZWQgYnkgTWFyayBFaWNoaW4gYW5kIEppbQorKyAgIFdpbHNvbiwgYWxsIG9mIEN5Z251cyBTdXBwb3J0LiAgKi8KKysKKysvKiBUaGUgaW50ZW5kZWQgd2F5IHRvIHVzZSB0aGlzIGZpbGUgaXMgdG8gbWFrZSB0d28gY29waWVzLCBhZGQgYCNkZWZpbmUgRkxPQVQnCisrICAgdG8gb25lIGNvcHksIHRoZW4gY29tcGlsZSBib3RoIGNvcGllcyBhbmQgYWRkIHRoZW0gdG8gbGliZ2NjLmEuICAqLworKworKyNpbmNsdWRlICJ0Y29uZmlnLmgiCisrI2luY2x1ZGUgImNvcmV0eXBlcy5oIgorKyNpbmNsdWRlICJ0bS5oIgorKyNpbmNsdWRlICJjb25maWcvZnAtYml0LmgiCisrCisrLyogVGhlIGZvbGxvd2luZyBtYWNyb3MgY2FuIGJlIGRlZmluZWQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGlzIGZpbGU6CisrICAgRkxPQVQ6IEltcGxlbWVudCBhIGBmbG9hdCcsIGFrYSBTRm1vZGUsIGZwIGxpYnJhcnkuICBJZiB0aGlzIGlzIG5vdAorKyAgICAgZGVmaW5lZCwgdGhlbiB0aGlzIGZpbGUgaW1wbGVtZW50cyBhIGBkb3VibGUnLCBha2EgREZtb2RlLCBmcCBsaWJyYXJ5LgorKyAgIEZMT0FUX09OTFk6IFVzZWQgd2l0aCBGTE9BVCwgdG8gaW1wbGVtZW50IGEgYGZsb2F0JyBvbmx5IGxpYnJhcnksIGkuZS4KKysgICAgIGRvbid0IGluY2x1ZGUgZmxvYXQtPmRvdWJsZSBjb252ZXJzaW9uIHdoaWNoIHJlcXVpcmVzIHRoZSBkb3VibGUgbGlicmFyeS4KKysgICAgIFRoaXMgaXMgdXNlZnVsIG9ubHkgZm9yIG1hY2hpbmVzIHdoaWNoIGNhbid0IHN1cHBvcnQgZG91YmxlcywgZS5nLiBzb21lCisrICAgICA4LWJpdCBwcm9jZXNzb3JzLgorKyAgIENNUHR5cGU6IFNwZWNpZnkgdGhlIHR5cGUgdGhhdCBmbG9hdGluZyBwb2ludCBjb21wYXJlcyBzaG91bGQgcmV0dXJuLgorKyAgICAgVGhpcyBkZWZhdWx0cyB0byBTSXR5cGUsIGFrYSBpbnQuCisrICAgVVNfU09GVFdBUkVfR09GQVNUOiBUaGlzIG1ha2VzIGFsbCBlbnRyeSBwb2ludHMgdXNlIHRoZSBzYW1lIG5hbWVzIGFzIHRoZQorKyAgICAgVVMgU29mdHdhcmUgZ29GYXN0IGxpYnJhcnkuCisrICAgX0RFQlVHX0JJVEZMT0FUOiBUaGlzIG1ha2VzIGRlYnVnZ2luZyB0aGUgY29kZSBhIGxpdHRsZSBlYXNpZXIsIGJ5IGFkZGluZworKyAgICAgdHdvIGludGVnZXJzIHRvIHRoZSBGTE9fdW5pb25fdHlwZS4KKysgICBOT19ERU5PUk1BTFM6IERpc2FibGUgaGFuZGxpbmcgb2YgZGVub3JtYWxzLgorKyAgIE5PX05BTlM6IERpc2FibGUgbmFuIGFuZCBpbmZpbml0eSBoYW5kbGluZworKyAgIFNNQUxMX01BQ0hJTkU6IFVzZWZ1bCB3aGVuIG9wZXJhdGlvbnMgb24gUUlzIGFuZCBISXMgYXJlIGZhc3RlcgorKyAgICAgdGhhbiBvbiBhbiBTSSAqLworKworKy8qIFdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IGV4dGVuZGVkIGZsb2F0cyAobG9uZyBkb3VibGVzKSBvbiBtYWNoaW5lcworKyAgIHdpdGhvdXQgaGFyZHdhcmUgdG8gZGVhbCB3aXRoIHRoZW0uCisrCisrICAgVGhlc2Ugc3R1YnMgYXJlIGp1c3QgdG8ga2VlcCB0aGUgbGlua2VyIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgdW5yZXNvbHZlZAorKyAgIHJlZmVyZW5jZXMgd2hpY2ggY2FuIGJlIHB1bGxlZCBpbiBmcm9tIGxpYmlvICYgbGlic3RkYysrLCBldmVuIGlmIHRoZQorKyAgIHVzZXIgaXNuJ3QgdXNpbmcgbG9uZyBkb3VibGVzLiAgSG93ZXZlciwgdGhleSBtYXkgZ2VuZXJhdGUgYW4gdW5yZXNvbHZlZAorKyAgIGV4dGVybmFsIHRvIGFib3J0IGlmIGFib3J0IGlzIG5vdCB1c2VkIGJ5IHRoZSBmdW5jdGlvbiwgYW5kIHRoZSBzdHVicworKyAgIGFyZSByZWZlcmVuY2VkIGZyb20gd2l0aGluIGxpYmMsIHNpbmNlIGxpYmdjYyBnb2VzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlCisrICAgc3lzdGVtIGxpYnJhcnkuICAqLworKworKyNpZmRlZiBERUNMQVJFX0xJQlJBUllfUkVOQU1FUworKyAgREVDTEFSRV9MSUJSQVJZX1JFTkFNRVMKKysjZW5kaWYKKysKKysjaWZkZWYgRVhURU5ERURfRkxPQVRfU1RVQlMKKytleHRlcm4gdm9pZCBhYm9ydCAodm9pZCk7Cisrdm9pZCBfX2V4dGVuZHNmeGYyICh2b2lkKSB7IGFib3J0KCk7IH0KKyt2b2lkIF9fZXh0ZW5kZGZ4ZjIgKHZvaWQpIHsgYWJvcnQoKTsgfQorK3ZvaWQgX190cnVuY3hmZGYyICh2b2lkKSB7IGFib3J0KCk7IH0KKyt2b2lkIF9fdHJ1bmN4ZnNmMiAodm9pZCkgeyBhYm9ydCgpOyB9Cisrdm9pZCBfX2ZpeHhmc2kgKHZvaWQpIHsgYWJvcnQoKTsgfQorK3ZvaWQgX19mbG9hdHNpeGYgKHZvaWQpIHsgYWJvcnQoKTsgfQorK3ZvaWQgX19hZGR4ZjMgKHZvaWQpIHsgYWJvcnQoKTsgfQorK3ZvaWQgX19zdWJ4ZjMgKHZvaWQpIHsgYWJvcnQoKTsgfQorK3ZvaWQgX19tdWx4ZjMgKHZvaWQpIHsgYWJvcnQoKTsgfQorK3ZvaWQgX19kaXZ4ZjMgKHZvaWQpIHsgYWJvcnQoKTsgfQorK3ZvaWQgX19uZWd4ZjIgKHZvaWQpIHsgYWJvcnQoKTsgfQorK3ZvaWQgX19lcXhmMiAodm9pZCkgeyBhYm9ydCgpOyB9Cisrdm9pZCBfX25leGYyICh2b2lkKSB7IGFib3J0KCk7IH0KKyt2b2lkIF9fZ3R4ZjIgKHZvaWQpIHsgYWJvcnQoKTsgfQorK3ZvaWQgX19nZXhmMiAodm9pZCkgeyBhYm9ydCgpOyB9Cisrdm9pZCBfX2xleGYyICh2b2lkKSB7IGFib3J0KCk7IH0KKyt2b2lkIF9fbHR4ZjIgKHZvaWQpIHsgYWJvcnQoKTsgfQorKworK3ZvaWQgX19leHRlbmRzZnRmMiAodm9pZCkgeyBhYm9ydCgpOyB9Cisrdm9pZCBfX2V4dGVuZGRmdGYyICh2b2lkKSB7IGFib3J0KCk7IH0KKyt2b2lkIF9fdHJ1bmN0ZmRmMiAodm9pZCkgeyBhYm9ydCgpOyB9Cisrdm9pZCBfX3RydW5jdGZzZjIgKHZvaWQpIHsgYWJvcnQoKTsgfQorK3ZvaWQgX19maXh0ZnNpICh2b2lkKSB7IGFib3J0KCk7IH0KKyt2b2lkIF9fZmxvYXRzaXRmICh2b2lkKSB7IGFib3J0KCk7IH0KKyt2b2lkIF9fYWRkdGYzICh2b2lkKSB7IGFib3J0KCk7IH0KKyt2b2lkIF9fc3VidGYzICh2b2lkKSB7IGFib3J0KCk7IH0KKyt2b2lkIF9fbXVsdGYzICh2b2lkKSB7IGFib3J0KCk7IH0KKyt2b2lkIF9fZGl2dGYzICh2b2lkKSB7IGFib3J0KCk7IH0KKyt2b2lkIF9fbmVndGYyICh2b2lkKSB7IGFib3J0KCk7IH0KKyt2b2lkIF9fZXF0ZjIgKHZvaWQpIHsgYWJvcnQoKTsgfQorK3ZvaWQgX19uZXRmMiAodm9pZCkgeyBhYm9ydCgpOyB9Cisrdm9pZCBfX2d0dGYyICh2b2lkKSB7IGFib3J0KCk7IH0KKyt2b2lkIF9fZ2V0ZjIgKHZvaWQpIHsgYWJvcnQoKTsgfQorK3ZvaWQgX19sZXRmMiAodm9pZCkgeyBhYm9ydCgpOyB9Cisrdm9pZCBfX2x0dGYyICh2b2lkKSB7IGFib3J0KCk7IH0KKysjZWxzZQkvKiAhRVhURU5ERURfRkxPQVRfU1RVQlMsIHJlc3Qgb2YgZmlsZSAqLworKworKy8qIElFRUUgInNwZWNpYWwiIG51bWJlciBwcmVkaWNhdGVzICovCisrCisrI2lmZGVmIE5PX05BTlMKKysKKysjZGVmaW5lIG5hbigpIDAKKysjZGVmaW5lIGlzbmFuKHgpIDAKKysjZGVmaW5lIGlzaW5mKHgpIDAKKysjZWxzZQorKworKyNpZiAgIGRlZmluZWQgTF90aGVuYW5fc2YKKytjb25zdCBmcF9udW1iZXJfdHlwZSBfX3RoZW5hbl9zZiA9IHsgQ0xBU1NfU05BTiwgMCwgMCwgeyhmcmFjdHlwZSkgMH0gfTsKKysjZWxpZiBkZWZpbmVkIExfdGhlbmFuX2RmCisrY29uc3QgZnBfbnVtYmVyX3R5cGUgX190aGVuYW5fZGYgPSB7IENMQVNTX1NOQU4sIDAsIDAsIHsoZnJhY3R5cGUpIDB9IH07CisrI2VsaWYgZGVmaW5lZCBMX3RoZW5hbl90ZgorK2NvbnN0IGZwX251bWJlcl90eXBlIF9fdGhlbmFuX3RmID0geyBDTEFTU19TTkFOLCAwLCAwLCB7KGZyYWN0eXBlKSAwfSB9OworKyNlbGlmIGRlZmluZWQgVEZMT0FUCisrZXh0ZXJuIGNvbnN0IGZwX251bWJlcl90eXBlIF9fdGhlbmFuX3RmOworKyNlbGlmIGRlZmluZWQgRkxPQVQKKytleHRlcm4gY29uc3QgZnBfbnVtYmVyX3R5cGUgX190aGVuYW5fc2Y7CisrI2Vsc2UKKytleHRlcm4gY29uc3QgZnBfbnVtYmVyX3R5cGUgX190aGVuYW5fZGY7CisrI2VuZGlmCisrCisrSU5MSU5FCisrc3RhdGljIGZwX251bWJlcl90eXBlICoKKytuYW4gKHZvaWQpCisreworKyAgLyogRGlzY2FyZCB0aGUgY29uc3QgcXVhbGlmaWVyLi4uICAqLworKyNpZmRlZiBURkxPQVQKKysgIHJldHVybiAoZnBfbnVtYmVyX3R5cGUgKikgKCYgX190aGVuYW5fdGYpOworKyNlbGlmIGRlZmluZWQgRkxPQVQgIAorKyAgcmV0dXJuIChmcF9udW1iZXJfdHlwZSAqKSAoJiBfX3RoZW5hbl9zZik7CisrI2Vsc2UKKysgIHJldHVybiAoZnBfbnVtYmVyX3R5cGUgKikgKCYgX190aGVuYW5fZGYpOworKyNlbmRpZgorK30KKysKKytJTkxJTkUKKytzdGF0aWMgaW50CisraXNuYW4gKCBmcF9udW1iZXJfdHlwZSAqICB4KQorK3sKKysgIHJldHVybiB4LT5jbGFzcyA9PSBDTEFTU19TTkFOIHx8IHgtPmNsYXNzID09IENMQVNTX1FOQU47CisrfQorKworK0lOTElORQorK3N0YXRpYyBpbnQKKytpc2luZiAoIGZwX251bWJlcl90eXBlICogIHgpCisreworKyAgcmV0dXJuIHgtPmNsYXNzID09IENMQVNTX0lORklOSVRZOworK30KKysKKysjZW5kaWYgLyogTk9fTkFOUyAqLworKworK0lOTElORQorK3N0YXRpYyBpbnQKKytpc3plcm8gKCBmcF9udW1iZXJfdHlwZSAqICB4KQorK3sKKysgIHJldHVybiB4LT5jbGFzcyA9PSBDTEFTU19aRVJPOworK30KKysKKytJTkxJTkUgCisrc3RhdGljIHZvaWQKKytmbGlwX3NpZ24gKCBmcF9udW1iZXJfdHlwZSAqICB4KQorK3sKKysgIHgtPnNpZ24gPSAheC0+c2lnbjsKKyt9CisrCisrZXh0ZXJuIEZMT190eXBlIHBhY2tfZCAoIGZwX251bWJlcl90eXBlICogKTsKKysKKysjaWYgZGVmaW5lZChMX3BhY2tfZGYpIHx8IGRlZmluZWQoTF9wYWNrX3NmKSB8fCBkZWZpbmVkKExfcGFja190ZikKKytGTE9fdHlwZQorK3BhY2tfZCAoIGZwX251bWJlcl90eXBlICogIHNyYykKKyt7CisrICBGTE9fdW5pb25fdHlwZSBkc3Q7CisrICBmcmFjdHlwZSBmcmFjdGlvbiA9IHNyYy0+ZnJhY3Rpb24ubGw7CS8qIHdhc24ndCB1bnNpZ25lZCBiZWZvcmU/ICovCisrICBpbnQgc2lnbiA9IHNyYy0+c2lnbjsKKysgIGludCBleHAgPSAwOworKworKyAgaWYgKExBUkdFU1RfRVhQT05FTlRfSVNfTk9STUFMIChGUkFDX05CSVRTKSAmJiAoaXNuYW4gKHNyYykgfHwgaXNpbmYgKHNyYykpKQorKyAgICB7CisrICAgICAgLyogV2UgY2FuJ3QgcmVwcmVzZW50IHRoZXNlIHZhbHVlcyBhY2N1cmF0ZWx5LiAgQnkgdXNpbmcgdGhlCisrCSBsYXJnZXN0IHBvc3NpYmxlIG1hZ25pdHVkZSwgd2UgZ3VhcmFudGVlIHRoYXQgdGhlIGNvbnZlcnNpb24KKysJIG9mIGluZmluaXR5IGlzIGF0IGxlYXN0IGFzIGJpZyBhcyBhbnkgZmluaXRlIG51bWJlci4gICovCisrICAgICAgZXhwID0gRVhQTUFYOworKyAgICAgIGZyYWN0aW9uID0gKChmcmFjdHlwZSkgMSA8PCBGUkFDQklUUykgLSAxOworKyAgICB9CisrICBlbHNlIGlmIChpc25hbiAoc3JjKSkKKysgICAgeworKyAgICAgIGV4cCA9IEVYUE1BWDsKKysgICAgICBpZiAoc3JjLT5jbGFzcyA9PSBDTEFTU19RTkFOIHx8IDEpCisrCXsKKysjaWZkZWYgUVVJRVRfTkFOX05FR0FURUQKKysJICBmcmFjdGlvbiB8PSBRVUlFVF9OQU4gLSAxOworKyNlbHNlCisrCSAgZnJhY3Rpb24gfD0gUVVJRVRfTkFOOworKyNlbmRpZgorKwl9CisrICAgIH0KKysgIGVsc2UgaWYgKGlzaW5mIChzcmMpKQorKyAgICB7CisrICAgICAgZXhwID0gRVhQTUFYOworKyAgICAgIGZyYWN0aW9uID0gMDsKKysgICAgfQorKyAgZWxzZSBpZiAoaXN6ZXJvIChzcmMpKQorKyAgICB7CisrICAgICAgZXhwID0gMDsKKysgICAgICBmcmFjdGlvbiA9IDA7CisrICAgIH0KKysgIGVsc2UgaWYgKGZyYWN0aW9uID09IDApCisrICAgIHsKKysgICAgICBleHAgPSAwOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBpZiAoc3JjLT5ub3JtYWxfZXhwIDwgTk9STUFMX0VYUE1JTikKKysJeworKyNpZmRlZiBOT19ERU5PUk1BTFMKKysJICAvKiBHbyBzdHJhaWdodCB0byBhIHplcm8gcmVwcmVzZW50YXRpb24gaWYgZGVub3JtYWxzIGFyZSBub3QKKysgCSAgICAgc3VwcG9ydGVkLiAgVGhlIGRlbm9ybWFsIGhhbmRsaW5nIHdvdWxkIGJlIGhhcm1sZXNzIGJ1dAorKyAJICAgICBpc24ndCB1bm5lY2Vzc2FyeS4gICovCisrCSAgZXhwID0gMDsKKysJICBmcmFjdGlvbiA9IDA7CisrI2Vsc2UgLyogTk9fREVOT1JNQUxTICovCisrCSAgLyogVGhpcyBudW1iZXIncyBleHBvbmVudCBpcyB0b28gbG93IHRvIGZpdCBpbnRvIHRoZSBiaXRzCisrCSAgICAgYXZhaWxhYmxlIGluIHRoZSBudW1iZXIsIHNvIHdlJ2xsIHN0b3JlIDAgaW4gdGhlIGV4cG9uZW50IGFuZAorKwkgICAgIHNoaWZ0IHRoZSBmcmFjdGlvbiB0byB0aGUgcmlnaHQgdG8gbWFrZSB1cCBmb3IgaXQuICAqLworKworKwkgIGludCBzaGlmdCA9IE5PUk1BTF9FWFBNSU4gLSBzcmMtPm5vcm1hbF9leHA7CisrCisrCSAgZXhwID0gMDsKKysKKysJICBpZiAoc2hpZnQgPiBGUkFDX05CSVRTIC0gTkdBUkRTKQorKwkgICAgeworKwkgICAgICAvKiBObyBwb2ludCBzaGlmdGluZywgc2luY2UgaXQncyBtb3JlIHRoYXQgNjQgb3V0LiAgKi8KKysJICAgICAgZnJhY3Rpb24gPSAwOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgaW50IGxvd2JpdCA9IChmcmFjdGlvbiAmICgoKGZyYWN0eXBlKTEgPDwgc2hpZnQpIC0gMSkpID8gMSA6IDA7CisrCSAgICAgIGZyYWN0aW9uID0gKGZyYWN0aW9uID4+IHNoaWZ0KSB8IGxvd2JpdDsKKysJICAgIH0KKysJICBpZiAoKGZyYWN0aW9uICYgR0FSRE1BU0spID09IEdBUkRNU0IpCisrCSAgICB7CisrCSAgICAgIGlmICgoZnJhY3Rpb24gJiAoMSA8PCBOR0FSRFMpKSkKKysJCWZyYWN0aW9uICs9IEdBUkRST1VORCArIDE7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICAvKiBBZGQgdG8gdGhlIGd1YXJkcyB0byByb3VuZCB1cC4gICovCisrCSAgICAgIGZyYWN0aW9uICs9IEdBUkRST1VORDsKKysJICAgIH0KKysJICAvKiBQZXJoYXBzIHRoZSByb3VuZGluZyBtZWFucyB3ZSBub3cgbmVlZCB0byBjaGFuZ2UgdGhlCisrICAgICAgICAgICAgIGV4cG9uZW50LCBiZWNhdXNlIHRoZSBmcmFjdGlvbiBpcyBubyBsb25nZXIgZGVub3JtYWwuICAqLworKwkgIGlmIChmcmFjdGlvbiA+PSBJTVBMSUNJVF8xKQorKwkgICAgeworKwkgICAgICBleHAgKz0gMTsKKysJICAgIH0KKysJICBmcmFjdGlvbiA+Pj0gTkdBUkRTOworKyNlbmRpZiAvKiBOT19ERU5PUk1BTFMgKi8KKysJfQorKyAgICAgIGVsc2UgaWYgKCFMQVJHRVNUX0VYUE9ORU5UX0lTX05PUk1BTCAoRlJBQ19OQklUUykKKysJICAgICAgICYmIHNyYy0+bm9ybWFsX2V4cCA+IEVYUEJJQVMpCisrCXsKKysJICBleHAgPSBFWFBNQVg7CisrCSAgZnJhY3Rpb24gPSAwOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgZXhwID0gc3JjLT5ub3JtYWxfZXhwICsgRVhQQklBUzsKKysJICBpZiAoIVJPVU5EX1RPV0FSRFNfWkVSTykKKysJICAgIHsKKysJICAgICAgLyogSUYgdGhlIGdhcmQgYml0cyBhcmUgdGhlIGFsbCB6ZXJvLCBidXQgdGhlIGZpcnN0LCB0aGVuIHdlJ3JlCisrCQkgaGFsZiB3YXkgYmV0d2VlbiB0d28gbnVtYmVycywgY2hvb3NlIHRoZSBvbmUgd2hpY2ggbWFrZXMgdGhlCisrCQkgbHNiIG9mIHRoZSBhbnN3ZXIgMC4gICovCisrCSAgICAgIGlmICgoZnJhY3Rpb24gJiBHQVJETUFTSykgPT0gR0FSRE1TQikKKysJCXsKKysJCSAgaWYgKGZyYWN0aW9uICYgKDEgPDwgTkdBUkRTKSkKKysJCSAgICBmcmFjdGlvbiArPSBHQVJEUk9VTkQgKyAxOworKwkJfQorKwkgICAgICBlbHNlCisrCQl7CisrCQkgIC8qIEFkZCBhIG9uZSB0byB0aGUgZ3VhcmRzIHRvIHJvdW5kIHVwICovCisrCQkgIGZyYWN0aW9uICs9IEdBUkRST1VORDsKKysJCX0KKysJICAgICAgaWYgKGZyYWN0aW9uID49IElNUExJQ0lUXzIpCisrCQl7CisrCQkgIGZyYWN0aW9uID4+PSAxOworKwkJICBleHAgKz0gMTsKKysJCX0KKysJICAgIH0KKysJICBmcmFjdGlvbiA+Pj0gTkdBUkRTOworKworKwkgIGlmIChMQVJHRVNUX0VYUE9ORU5UX0lTX05PUk1BTCAoRlJBQ19OQklUUykgJiYgZXhwID4gRVhQTUFYKQorKwkgICAgeworKwkgICAgICAvKiBTYXR1cmF0ZSBvbiBvdmVyZmxvdy4gICovCisrCSAgICAgIGV4cCA9IEVYUE1BWDsKKysJICAgICAgZnJhY3Rpb24gPSAoKGZyYWN0eXBlKSAxIDw8IEZSQUNCSVRTKSAtIDE7CisrCSAgICB9CisrCX0KKysgICAgfQorKworKyAgLyogV2UgcHJldmlvdXNseSB1c2VkIGJpdGZpZWxkcyB0byBzdG9yZSB0aGUgbnVtYmVyLCBidXQgdGhpcyBkb2Vzbid0CisrICAgICBoYW5kbGUgbGl0dGxlL2JpZyBlbmRpYW4gc3lzdGVtcyBjb252ZW5pZW50bHksIHNvIHVzZSBzaGlmdHMgYW5kCisrICAgICBtYXNrcyAqLworKyNpZmRlZiBGTE9BVF9CSVRfT1JERVJfTUlTTUFUQ0gKKysgIGRzdC5iaXRzLmZyYWN0aW9uID0gZnJhY3Rpb247CisrICBkc3QuYml0cy5leHAgPSBleHA7CisrICBkc3QuYml0cy5zaWduID0gc2lnbjsKKysjZWxzZQorKyMgaWYgZGVmaW5lZCBURkxPQVQgJiYgZGVmaW5lZCBIQUxGRlJBQ0JJVFMKKysgeworKyAgIGhhbGZmcmFjdHlwZSBoaWdoLCBsb3csIHVuaXR5OworKyAgIGludCBsb3dzaWduLCBsb3dleHA7CisrCisrICAgdW5pdHkgPSAoaGFsZmZyYWN0eXBlKSAxIDw8IEhBTEZGUkFDQklUUzsKKysKKysgICAvKiBTZXQgSElHSCB0byB0aGUgaGlnaCBkb3VibGUncyBzaWduaWZpY2FuZCwgbWFza2luZyBvdXQgdGhlIGltcGxpY2l0IDEuCisrICAgICAgU2V0IExPVyB0byB0aGUgbG93IGRvdWJsZSdzIGZ1bGwgc2lnbmlmaWNhbmQuICAqLworKyAgIGhpZ2ggPSAoZnJhY3Rpb24gPj4gKEZSQUNCSVRTIC0gSEFMRkZSQUNCSVRTKSkgJiAodW5pdHkgLSAxKTsKKysgICBsb3cgPSBmcmFjdGlvbiAmICh1bml0eSAqIDIgLSAxKTsKKysKKysgICAvKiBHZXQgdGhlIGluaXRpYWwgc2lnbiBhbmQgZXhwb25lbnQgb2YgdGhlIGxvdyBkb3VibGUuICAqLworKyAgIGxvd2V4cCA9IGV4cCAtIEhBTEZGUkFDQklUUyAtIDE7CisrICAgbG93c2lnbiA9IHNpZ247CisrCisrICAgLyogSElHSCBzaG91bGQgYmUgcm91bmRlZCBsaWtlIGEgbm9ybWFsIGRvdWJsZSwgbWFraW5nIHxMT1d8IDw9CisrICAgICAgMC41IFVMUCBvZiBISUdILiAgQXNzdW1lIHJvdW5kLXRvLW5lYXJlc3QuICAqLworKyAgIGlmIChleHAgPCBFWFBNQVgpCisrICAgICBpZiAobG93ID4gdW5pdHkgfHwgKGxvdyA9PSB1bml0eSAmJiAoaGlnaCAmIDEpID09IDEpKQorKyAgICAgICB7CisrCSAvKiBSb3VuZCBISUdIIHVwIGFuZCBhZGp1c3QgTE9XIHRvIG1hdGNoLiAgKi8KKysJIGhpZ2grKzsKKysJIGlmIChoaWdoID09IHVuaXR5KQorKwkgICB7CisrCSAgICAgLyogTWF5IG1ha2UgaXQgaW5maW5pdGUsIGJ1dCB0aGF0J3MgT0suICAqLworKwkgICAgIGhpZ2ggPSAwOworKwkgICAgIGV4cCsrOworKwkgICB9CisrCSBsb3cgPSB1bml0eSAqIDIgLSBsb3c7CisrCSBsb3dzaWduIF49IDE7CisrICAgICAgIH0KKysKKysgICBoaWdoIHw9IChoYWxmZnJhY3R5cGUpIGV4cCA8PCBIQUxGRlJBQ0JJVFM7CisrICAgaGlnaCB8PSAoaGFsZmZyYWN0eXBlKSBzaWduIDw8IChIQUxGRlJBQ0JJVFMgKyBFWFBCSVRTKTsKKysKKysgICBpZiAoZXhwID09IEVYUE1BWCB8fCBleHAgPT0gMCB8fCBsb3cgPT0gMCkKKysgICAgIGxvdyA9IDA7CisrICAgZWxzZQorKyAgICAgeworKyAgICAgICB3aGlsZSAobG93ZXhwID4gMCAmJiBsb3cgPCB1bml0eSkKKysJIHsKKysJICAgbG93IDw8PSAxOworKwkgICBsb3dleHAtLTsKKysJIH0KKysKKysgICAgICAgaWYgKGxvd2V4cCA8PSAwKQorKwkgeworKwkgICBoYWxmZnJhY3R5cGUgcm91bmRtc2IsIHJvdW5kOworKwkgICBpbnQgc2hpZnQ7CisrCisrCSAgIHNoaWZ0ID0gMSAtIGxvd2V4cDsKKysJICAgcm91bmRtc2IgPSAoMSA8PCAoc2hpZnQgLSAxKSk7CisrCSAgIHJvdW5kID0gbG93ICYgKChyb3VuZG1zYiA8PCAxKSAtIDEpOworKworKwkgICBsb3cgPj49IHNoaWZ0OworKwkgICBsb3dleHAgPSAwOworKworKwkgICBpZiAocm91bmQgPiByb3VuZG1zYiB8fCAocm91bmQgPT0gcm91bmRtc2IgJiYgKGxvdyAmIDEpID09IDEpKQorKwkgICAgIHsKKysJICAgICAgIGxvdysrOworKwkgICAgICAgaWYgKGxvdyA9PSB1bml0eSkKKysJCSAvKiBMT1cgcm91bmRzIHVwIHRvIHRoZSBzbWFsbGVzdCBub3JtYWwgbnVtYmVyLiAgKi8KKysJCSBsb3dleHArKzsKKysJICAgICB9CisrCSB9CisrCisrICAgICAgIGxvdyAmPSB1bml0eSAtIDE7CisrICAgICAgIGxvdyB8PSAoaGFsZmZyYWN0eXBlKSBsb3dleHAgPDwgSEFMRkZSQUNCSVRTOworKyAgICAgICBsb3cgfD0gKGhhbGZmcmFjdHlwZSkgbG93c2lnbiA8PCAoSEFMRkZSQUNCSVRTICsgRVhQQklUUyk7CisrICAgICB9CisrICAgZHN0LnZhbHVlX3JhdyA9ICgoZnJhY3R5cGUpIGhpZ2ggPDwgSEFMRlNISUZUKSB8IGxvdzsKKysgfQorKyMgZWxzZQorKyAgZHN0LnZhbHVlX3JhdyA9IGZyYWN0aW9uICYgKCgoKGZyYWN0eXBlKTEpIDw8IEZSQUNCSVRTKSAtIChmcmFjdHlwZSkxKTsKKysgIGRzdC52YWx1ZV9yYXcgfD0gKChmcmFjdHlwZSkgKGV4cCAmICgoMSA8PCBFWFBCSVRTKSAtIDEpKSkgPDwgRlJBQ0JJVFM7CisrICBkc3QudmFsdWVfcmF3IHw9ICgoZnJhY3R5cGUpIChzaWduICYgMSkpIDw8IChGUkFDQklUUyB8IEVYUEJJVFMpOworKyMgZW5kaWYKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZChGTE9BVF9XT1JEX09SREVSX01JU01BVENIKSAmJiAhZGVmaW5lZChGTE9BVCkKKysjaWZkZWYgVEZMT0FUCisrICB7CisrICAgIHFydHJmcmFjdHlwZSB0bXAxID0gZHN0LndvcmRzWzBdOworKyAgICBxcnRyZnJhY3R5cGUgdG1wMiA9IGRzdC53b3Jkc1sxXTsKKysgICAgZHN0LndvcmRzWzBdID0gZHN0LndvcmRzWzNdOworKyAgICBkc3Qud29yZHNbMV0gPSBkc3Qud29yZHNbMl07CisrICAgIGRzdC53b3Jkc1syXSA9IHRtcDI7CisrICAgIGRzdC53b3Jkc1szXSA9IHRtcDE7CisrICB9CisrI2Vsc2UKKysgIHsKKysgICAgaGFsZmZyYWN0eXBlIHRtcCA9IGRzdC53b3Jkc1swXTsKKysgICAgZHN0LndvcmRzWzBdID0gZHN0LndvcmRzWzFdOworKyAgICBkc3Qud29yZHNbMV0gPSB0bXA7CisrICB9CisrI2VuZGlmCisrI2VuZGlmCisrCisrICByZXR1cm4gZHN0LnZhbHVlOworK30KKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZChMX3VucGFja19kZikgfHwgZGVmaW5lZChMX3VucGFja19zZikgfHwgZGVmaW5lZChMX3VucGFja190ZikKKyt2b2lkCisrdW5wYWNrX2QgKEZMT191bmlvbl90eXBlICogc3JjLCBmcF9udW1iZXJfdHlwZSAqIGRzdCkKKyt7CisrICAvKiBXZSBwcmV2aW91c2x5IHVzZWQgYml0ZmllbGRzIHRvIHN0b3JlIHRoZSBudW1iZXIsIGJ1dCB0aGlzIGRvZXNuJ3QKKysgICAgIGhhbmRsZSBsaXR0bGUvYmlnIGVuZGlhbiBzeXN0ZW1zIGNvbnZlbmllbnRseSwgc28gdXNlIHNoaWZ0cyBhbmQKKysgICAgIG1hc2tzICovCisrICBmcmFjdHlwZSBmcmFjdGlvbjsKKysgIGludCBleHA7CisrICBpbnQgc2lnbjsKKysKKysjaWYgZGVmaW5lZChGTE9BVF9XT1JEX09SREVSX01JU01BVENIKSAmJiAhZGVmaW5lZChGTE9BVCkKKysgIEZMT191bmlvbl90eXBlIHN3YXBwZWQ7CisrCisrI2lmZGVmIFRGTE9BVAorKyAgc3dhcHBlZC53b3Jkc1swXSA9IHNyYy0+d29yZHNbM107CisrICBzd2FwcGVkLndvcmRzWzFdID0gc3JjLT53b3Jkc1syXTsKKysgIHN3YXBwZWQud29yZHNbMl0gPSBzcmMtPndvcmRzWzFdOworKyAgc3dhcHBlZC53b3Jkc1szXSA9IHNyYy0+d29yZHNbMF07CisrI2Vsc2UKKysgIHN3YXBwZWQud29yZHNbMF0gPSBzcmMtPndvcmRzWzFdOworKyAgc3dhcHBlZC53b3Jkc1sxXSA9IHNyYy0+d29yZHNbMF07CisrI2VuZGlmCisrICBzcmMgPSAmc3dhcHBlZDsKKysjZW5kaWYKKysgIAorKyNpZmRlZiBGTE9BVF9CSVRfT1JERVJfTUlTTUFUQ0gKKysgIGZyYWN0aW9uID0gc3JjLT5iaXRzLmZyYWN0aW9uOworKyAgZXhwID0gc3JjLT5iaXRzLmV4cDsKKysgIHNpZ24gPSBzcmMtPmJpdHMuc2lnbjsKKysjZWxzZQorKyMgaWYgZGVmaW5lZCBURkxPQVQgJiYgZGVmaW5lZCBIQUxGRlJBQ0JJVFMKKysgeworKyAgIGhhbGZmcmFjdHlwZSBoaWdoLCBsb3c7CisrICAgCisrICAgaGlnaCA9IHNyYy0+dmFsdWVfcmF3ID4+IEhBTEZTSElGVDsKKysgICBsb3cgPSBzcmMtPnZhbHVlX3JhdyAmICgoKGZyYWN0eXBlKTEgPDwgSEFMRlNISUZUKSAtIDEpOworKworKyAgIGZyYWN0aW9uID0gaGlnaCAmICgoKChmcmFjdHlwZSkxKSA8PCBIQUxGRlJBQ0JJVFMpIC0gMSk7CisrICAgZnJhY3Rpb24gPDw9IEZSQUNCSVRTIC0gSEFMRkZSQUNCSVRTOworKyAgIGV4cCA9ICgoaW50KShoaWdoID4+IEhBTEZGUkFDQklUUykpICYgKCgxIDw8IEVYUEJJVFMpIC0gMSk7CisrICAgc2lnbiA9ICgoaW50KShoaWdoID4+ICgoKEhBTEZGUkFDQklUUyArIEVYUEJJVFMpKSkpKSAmIDE7CisrCisrICAgaWYgKGV4cCAhPSBFWFBNQVggJiYgZXhwICE9IDAgJiYgbG93ICE9IDApCisrICAgICB7CisrICAgICAgIGludCBsb3dleHAgPSAoKGludCkobG93ID4+IEhBTEZGUkFDQklUUykpICYgKCgxIDw8IEVYUEJJVFMpIC0gMSk7CisrICAgICAgIGludCBsb3dzaWduID0gKChpbnQpKGxvdyA+PiAoKChIQUxGRlJBQ0JJVFMgKyBFWFBCSVRTKSkpKSkgJiAxOworKyAgICAgICBpbnQgc2hpZnQ7CisrICAgICAgIGZyYWN0eXBlIHhsb3c7CisrCisrICAgICAgIHhsb3cgPSBsb3cgJiAoKCgoZnJhY3R5cGUpMSkgPDwgSEFMRkZSQUNCSVRTKSAtIDEpOworKyAgICAgICBpZiAobG93ZXhwKQorKwkgeGxvdyB8PSAoKChoYWxmZnJhY3R5cGUpMSkgPDwgSEFMRkZSQUNCSVRTKTsKKysgICAgICAgZWxzZQorKwkgbG93ZXhwID0gMTsKKysgICAgICAgc2hpZnQgPSAoRlJBQ0JJVFMgLSBIQUxGRlJBQ0JJVFMpIC0gKGV4cCAtIGxvd2V4cCk7CisrICAgICAgIGlmIChzaGlmdCA+IDApCisrCSB4bG93IDw8PSBzaGlmdDsKKysgICAgICAgZWxzZSBpZiAoc2hpZnQgPCAwKQorKwkgeGxvdyA+Pj0gLXNoaWZ0OworKyAgICAgICBpZiAoc2lnbiA9PSBsb3dzaWduKQorKwkgZnJhY3Rpb24gKz0geGxvdzsKKysgICAgICAgZWxzZSBpZiAoZnJhY3Rpb24gPj0geGxvdykKKysJIGZyYWN0aW9uIC09IHhsb3c7CisrICAgICAgIGVsc2UKKysJIHsKKysJICAgLyogVGhlIGhpZ2ggcGFydCBpcyBhIHBvd2VyIG9mIHR3byBidXQgdGhlIGZ1bGwgbnVtYmVyIGlzIGxvd2VyLgorKwkgICAgICBUaGlzIGNvZGUgd2lsbCBsZWF2ZSB0aGUgaW1wbGljaXQgMSBpbiBGUkFDVElPTiwgYnV0IHdlJ2QKKysJICAgICAgaGF2ZSBhZGRlZCB0aGF0IGJlbG93IGFueXdheS4gICovCisrCSAgIGZyYWN0aW9uID0gKCgoZnJhY3R5cGUpIDEgPDwgRlJBQ0JJVFMpIC0geGxvdykgPDwgMTsKKysJICAgZXhwLS07CisrCSB9CisrICAgICB9CisrIH0KKysjIGVsc2UKKysgIGZyYWN0aW9uID0gc3JjLT52YWx1ZV9yYXcgJiAoKCgoZnJhY3R5cGUpMSkgPDwgRlJBQ0JJVFMpIC0gMSk7CisrICBleHAgPSAoKGludCkoc3JjLT52YWx1ZV9yYXcgPj4gRlJBQ0JJVFMpKSAmICgoMSA8PCBFWFBCSVRTKSAtIDEpOworKyAgc2lnbiA9ICgoaW50KShzcmMtPnZhbHVlX3JhdyA+PiAoRlJBQ0JJVFMgKyBFWFBCSVRTKSkpICYgMTsKKysjIGVuZGlmCisrI2VuZGlmCisrCisrICBkc3QtPnNpZ24gPSBzaWduOworKyAgaWYgKGV4cCA9PSAwKQorKyAgICB7CisrICAgICAgLyogSG1tLiAgTG9va3MgbGlrZSAwICovCisrICAgICAgaWYgKGZyYWN0aW9uID09IDAKKysjaWZkZWYgTk9fREVOT1JNQUxTCisrCSAgfHwgMQorKyNlbmRpZgorKwkgICkKKysJeworKwkgIC8qIHRhc3RlcyBsaWtlIHplcm8gKi8KKysJICBkc3QtPmNsYXNzID0gQ0xBU1NfWkVSTzsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8qIFplcm8gZXhwb25lbnQgd2l0aCBub256ZXJvIGZyYWN0aW9uIC0gaXQncyBkZW5vcm1hbGl6ZWQsCisrCSAgICAgc28gdGhlcmUgaXNuJ3QgYSBsZWFkaW5nIGltcGxpY2l0IG9uZSAtIHdlJ2xsIHNoaWZ0IGl0IHNvCisrCSAgICAgaXQgZ2V0cyBvbmUuICAqLworKwkgIGRzdC0+bm9ybWFsX2V4cCA9IGV4cCAtIEVYUEJJQVMgKyAxOworKwkgIGZyYWN0aW9uIDw8PSBOR0FSRFM7CisrCisrCSAgZHN0LT5jbGFzcyA9IENMQVNTX05VTUJFUjsKKysjaWYgMQorKwkgIHdoaWxlIChmcmFjdGlvbiA8IElNUExJQ0lUXzEpCisrCSAgICB7CisrCSAgICAgIGZyYWN0aW9uIDw8PSAxOworKwkgICAgICBkc3QtPm5vcm1hbF9leHAtLTsKKysJICAgIH0KKysjZW5kaWYKKysJICBkc3QtPmZyYWN0aW9uLmxsID0gZnJhY3Rpb247CisrCX0KKysgICAgfQorKyAgZWxzZSBpZiAoIUxBUkdFU1RfRVhQT05FTlRfSVNfTk9STUFMIChGUkFDX05CSVRTKSAmJiBleHAgPT0gRVhQTUFYKQorKyAgICB7CisrICAgICAgLyogSHVnZSBleHBvbmVudCovCisrICAgICAgaWYgKGZyYWN0aW9uID09IDApCisrCXsKKysJICAvKiBBdHRhY2hlZCB0byBhIHplcm8gZnJhY3Rpb24gLSBtZWFucyBpbmZpbml0eSAqLworKwkgIGRzdC0+Y2xhc3MgPSBDTEFTU19JTkZJTklUWTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8qIE5vbnplcm8gZnJhY3Rpb24sIG1lYW5zIG5hbiAqLworKyNpZmRlZiBRVUlFVF9OQU5fTkVHQVRFRAorKwkgIGlmICgoZnJhY3Rpb24gJiBRVUlFVF9OQU4pID09IDApCisrI2Vsc2UKKysJICBpZiAoZnJhY3Rpb24gJiBRVUlFVF9OQU4pCisrI2VuZGlmCisrCSAgICB7CisrCSAgICAgIGRzdC0+Y2xhc3MgPSBDTEFTU19RTkFOOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgZHN0LT5jbGFzcyA9IENMQVNTX1NOQU47CisrCSAgICB9CisrCSAgLyogS2VlcCB0aGUgZnJhY3Rpb24gcGFydCBhcyB0aGUgbmFuIG51bWJlciAqLworKwkgIGRzdC0+ZnJhY3Rpb24ubGwgPSBmcmFjdGlvbjsKKysJfQorKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICAvKiBOb3RoaW5nIHN0cmFuZ2UgYWJvdXQgdGhpcyBudW1iZXIgKi8KKysgICAgICBkc3QtPm5vcm1hbF9leHAgPSBleHAgLSBFWFBCSUFTOworKyAgICAgIGRzdC0+Y2xhc3MgPSBDTEFTU19OVU1CRVI7CisrICAgICAgZHN0LT5mcmFjdGlvbi5sbCA9IChmcmFjdGlvbiA8PCBOR0FSRFMpIHwgSU1QTElDSVRfMTsKKysgICAgfQorK30KKysjZW5kaWYgLyogTF91bnBhY2tfZGYgfHwgTF91bnBhY2tfc2YgKi8KKysKKysjaWYgZGVmaW5lZChMX2FkZHN1Yl9zZikgfHwgZGVmaW5lZChMX2FkZHN1Yl9kZikgfHwgZGVmaW5lZChMX2FkZHN1Yl90ZikKKytzdGF0aWMgZnBfbnVtYmVyX3R5cGUgKgorK19mcGFkZF9wYXJ0cyAoZnBfbnVtYmVyX3R5cGUgKiBhLAorKwkgICAgICBmcF9udW1iZXJfdHlwZSAqIGIsCisrCSAgICAgIGZwX251bWJlcl90eXBlICogdG1wKQorK3sKKysgIGludGZyYWMgdGZyYWN0aW9uOworKworKyAgLyogUHV0IGNvbW1vbmx5IHVzZWQgZmllbGRzIGluIGxvY2FsIHZhcmlhYmxlcy4gICovCisrICBpbnQgYV9ub3JtYWxfZXhwOworKyAgaW50IGJfbm9ybWFsX2V4cDsKKysgIGZyYWN0eXBlIGFfZnJhY3Rpb247CisrICBmcmFjdHlwZSBiX2ZyYWN0aW9uOworKworKyAgaWYgKGlzbmFuIChhKSkKKysgICAgeworKyAgICAgIHJldHVybiBhOworKyAgICB9CisrICBpZiAoaXNuYW4gKGIpKQorKyAgICB7CisrICAgICAgcmV0dXJuIGI7CisrICAgIH0KKysgIGlmIChpc2luZiAoYSkpCisrICAgIHsKKysgICAgICAvKiBBZGRpbmcgaW5maW5pdGllcyB3aXRoIG9wcG9zaXRlIHNpZ25zIHlpZWxkcyBhIE5hTi4gICovCisrICAgICAgaWYgKGlzaW5mIChiKSAmJiBhLT5zaWduICE9IGItPnNpZ24pCisrCXJldHVybiBuYW4gKCk7CisrICAgICAgcmV0dXJuIGE7CisrICAgIH0KKysgIGlmIChpc2luZiAoYikpCisrICAgIHsKKysgICAgICByZXR1cm4gYjsKKysgICAgfQorKyAgaWYgKGlzemVybyAoYikpCisrICAgIHsKKysgICAgICBpZiAoaXN6ZXJvIChhKSkKKysJeworKwkgICp0bXAgPSAqYTsKKysJICB0bXAtPnNpZ24gPSBhLT5zaWduICYgYi0+c2lnbjsKKysJICByZXR1cm4gdG1wOworKwl9CisrICAgICAgcmV0dXJuIGE7CisrICAgIH0KKysgIGlmIChpc3plcm8gKGEpKQorKyAgICB7CisrICAgICAgcmV0dXJuIGI7CisrICAgIH0KKysKKysgIC8qIEdvdCB0d28gbnVtYmVycy4gc2hpZnQgdGhlIHNtYWxsZXIgYW5kIGluY3JlbWVudCB0aGUgZXhwb25lbnQgdGlsbAorKyAgICAgdGhleSdyZSB0aGUgc2FtZSAqLworKyAgeworKyAgICBpbnQgZGlmZjsKKysKKysgICAgYV9ub3JtYWxfZXhwID0gYS0+bm9ybWFsX2V4cDsKKysgICAgYl9ub3JtYWxfZXhwID0gYi0+bm9ybWFsX2V4cDsKKysgICAgYV9mcmFjdGlvbiA9IGEtPmZyYWN0aW9uLmxsOworKyAgICBiX2ZyYWN0aW9uID0gYi0+ZnJhY3Rpb24ubGw7CisrCisrICAgIGRpZmYgPSBhX25vcm1hbF9leHAgLSBiX25vcm1hbF9leHA7CisrCisrICAgIGlmIChkaWZmIDwgMCkKKysgICAgICBkaWZmID0gLWRpZmY7CisrICAgIGlmIChkaWZmIDwgRlJBQ19OQklUUykKKysgICAgICB7CisrCS8qID8/PyBUaGlzIGRvZXMgc2hpZnRzIG9uZSBiaXQgYXQgYSB0aW1lLiAgT3B0aW1pemUuICAqLworKwl3aGlsZSAoYV9ub3JtYWxfZXhwID4gYl9ub3JtYWxfZXhwKQorKwkgIHsKKysJICAgIGJfbm9ybWFsX2V4cCsrOworKwkgICAgTFNISUZUIChiX2ZyYWN0aW9uKTsKKysJICB9CisrCXdoaWxlIChiX25vcm1hbF9leHAgPiBhX25vcm1hbF9leHApCisrCSAgeworKwkgICAgYV9ub3JtYWxfZXhwKys7CisrCSAgICBMU0hJRlQgKGFfZnJhY3Rpb24pOworKwkgIH0KKysgICAgICB9CisrICAgIGVsc2UKKysgICAgICB7CisrCS8qIFNvbWV0aGluZ3MncyB1cC4uIGNob29zZSB0aGUgYmlnZ2VzdCAqLworKwlpZiAoYV9ub3JtYWxfZXhwID4gYl9ub3JtYWxfZXhwKQorKwkgIHsKKysJICAgIGJfbm9ybWFsX2V4cCA9IGFfbm9ybWFsX2V4cDsKKysJICAgIGJfZnJhY3Rpb24gPSAwOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIGFfbm9ybWFsX2V4cCA9IGJfbm9ybWFsX2V4cDsKKysJICAgIGFfZnJhY3Rpb24gPSAwOworKwkgIH0KKysgICAgICB9CisrICB9CisrCisrICBpZiAoYS0+c2lnbiAhPSBiLT5zaWduKQorKyAgICB7CisrICAgICAgaWYgKGEtPnNpZ24pCisrCXsKKysJICB0ZnJhY3Rpb24gPSAtYV9mcmFjdGlvbiArIGJfZnJhY3Rpb247CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICB0ZnJhY3Rpb24gPSBhX2ZyYWN0aW9uIC0gYl9mcmFjdGlvbjsKKysJfQorKyAgICAgIGlmICh0ZnJhY3Rpb24gPj0gMCkKKysJeworKwkgIHRtcC0+c2lnbiA9IDA7CisrCSAgdG1wLT5ub3JtYWxfZXhwID0gYV9ub3JtYWxfZXhwOworKwkgIHRtcC0+ZnJhY3Rpb24ubGwgPSB0ZnJhY3Rpb247CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICB0bXAtPnNpZ24gPSAxOworKwkgIHRtcC0+bm9ybWFsX2V4cCA9IGFfbm9ybWFsX2V4cDsKKysJICB0bXAtPmZyYWN0aW9uLmxsID0gLXRmcmFjdGlvbjsKKysJfQorKyAgICAgIC8qIGFuZCByZW5vcm1hbGl6ZSBpdCAqLworKworKyAgICAgIHdoaWxlICh0bXAtPmZyYWN0aW9uLmxsIDwgSU1QTElDSVRfMSAmJiB0bXAtPmZyYWN0aW9uLmxsKQorKwl7CisrCSAgdG1wLT5mcmFjdGlvbi5sbCA8PD0gMTsKKysJICB0bXAtPm5vcm1hbF9leHAtLTsKKysJfQorKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICB0bXAtPnNpZ24gPSBhLT5zaWduOworKyAgICAgIHRtcC0+bm9ybWFsX2V4cCA9IGFfbm9ybWFsX2V4cDsKKysgICAgICB0bXAtPmZyYWN0aW9uLmxsID0gYV9mcmFjdGlvbiArIGJfZnJhY3Rpb247CisrICAgIH0KKysgIHRtcC0+Y2xhc3MgPSBDTEFTU19OVU1CRVI7CisrICAvKiBOb3cgdGhlIGZyYWN0aW9uIGlzIGFkZGVkLCB3ZSBoYXZlIHRvIHNoaWZ0IGRvd24gdG8gcmVub3JtYWxpemUgdGhlCisrICAgICBudW1iZXIgKi8KKysKKysgIGlmICh0bXAtPmZyYWN0aW9uLmxsID49IElNUExJQ0lUXzIpCisrICAgIHsKKysgICAgICBMU0hJRlQgKHRtcC0+ZnJhY3Rpb24ubGwpOworKyAgICAgIHRtcC0+bm9ybWFsX2V4cCsrOworKyAgICB9CisrICByZXR1cm4gdG1wOworKworK30KKysKKytGTE9fdHlwZQorK2FkZCAoRkxPX3R5cGUgYXJnX2EsIEZMT190eXBlIGFyZ19iKQorK3sKKysgIGZwX251bWJlcl90eXBlIGE7CisrICBmcF9udW1iZXJfdHlwZSBiOworKyAgZnBfbnVtYmVyX3R5cGUgdG1wOworKyAgZnBfbnVtYmVyX3R5cGUgKnJlczsKKysgIEZMT191bmlvbl90eXBlIGF1LCBidTsKKysKKysgIGF1LnZhbHVlID0gYXJnX2E7CisrICBidS52YWx1ZSA9IGFyZ19iOworKworKyAgdW5wYWNrX2QgKCZhdSwgJmEpOworKyAgdW5wYWNrX2QgKCZidSwgJmIpOworKworKyAgcmVzID0gX2ZwYWRkX3BhcnRzICgmYSwgJmIsICZ0bXApOworKworKyAgcmV0dXJuIHBhY2tfZCAocmVzKTsKKyt9CisrCisrRkxPX3R5cGUKKytzdWIgKEZMT190eXBlIGFyZ19hLCBGTE9fdHlwZSBhcmdfYikKKyt7CisrICBmcF9udW1iZXJfdHlwZSBhOworKyAgZnBfbnVtYmVyX3R5cGUgYjsKKysgIGZwX251bWJlcl90eXBlIHRtcDsKKysgIGZwX251bWJlcl90eXBlICpyZXM7CisrICBGTE9fdW5pb25fdHlwZSBhdSwgYnU7CisrCisrICBhdS52YWx1ZSA9IGFyZ19hOworKyAgYnUudmFsdWUgPSBhcmdfYjsKKysKKysgIHVucGFja19kICgmYXUsICZhKTsKKysgIHVucGFja19kICgmYnUsICZiKTsKKysKKysgIGIuc2lnbiBePSAxOworKworKyAgcmVzID0gX2ZwYWRkX3BhcnRzICgmYSwgJmIsICZ0bXApOworKworKyAgcmV0dXJuIHBhY2tfZCAocmVzKTsKKyt9CisrI2VuZGlmIC8qIExfYWRkc3ViX3NmIHx8IExfYWRkc3ViX2RmICovCisrCisrI2lmIGRlZmluZWQoTF9tdWxfc2YpIHx8IGRlZmluZWQoTF9tdWxfZGYpIHx8IGRlZmluZWQoTF9tdWxfdGYpCisrc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKSBmcF9udW1iZXJfdHlwZSAqCisrX2ZwbXVsX3BhcnRzICggZnBfbnVtYmVyX3R5cGUgKiAgYSwKKysJICAgICAgIGZwX251bWJlcl90eXBlICogIGIsCisrCSAgICAgICBmcF9udW1iZXJfdHlwZSAqIHRtcCkKKyt7CisrICBmcmFjdHlwZSBsb3cgPSAwOworKyAgZnJhY3R5cGUgaGlnaCA9IDA7CisrCisrICBpZiAoaXNuYW4gKGEpKQorKyAgICB7CisrICAgICAgYS0+c2lnbiA9IGEtPnNpZ24gIT0gYi0+c2lnbjsKKysgICAgICByZXR1cm4gYTsKKysgICAgfQorKyAgaWYgKGlzbmFuIChiKSkKKysgICAgeworKyAgICAgIGItPnNpZ24gPSBhLT5zaWduICE9IGItPnNpZ247CisrICAgICAgcmV0dXJuIGI7CisrICAgIH0KKysgIGlmIChpc2luZiAoYSkpCisrICAgIHsKKysgICAgICBpZiAoaXN6ZXJvIChiKSkKKysJcmV0dXJuIG5hbiAoKTsKKysgICAgICBhLT5zaWduID0gYS0+c2lnbiAhPSBiLT5zaWduOworKyAgICAgIHJldHVybiBhOworKyAgICB9CisrICBpZiAoaXNpbmYgKGIpKQorKyAgICB7CisrICAgICAgaWYgKGlzemVybyAoYSkpCisrCXsKKysJICByZXR1cm4gbmFuICgpOworKwl9CisrICAgICAgYi0+c2lnbiA9IGEtPnNpZ24gIT0gYi0+c2lnbjsKKysgICAgICByZXR1cm4gYjsKKysgICAgfQorKyAgaWYgKGlzemVybyAoYSkpCisrICAgIHsKKysgICAgICBhLT5zaWduID0gYS0+c2lnbiAhPSBiLT5zaWduOworKyAgICAgIHJldHVybiBhOworKyAgICB9CisrICBpZiAoaXN6ZXJvIChiKSkKKysgICAgeworKyAgICAgIGItPnNpZ24gPSBhLT5zaWduICE9IGItPnNpZ247CisrICAgICAgcmV0dXJuIGI7CisrICAgIH0KKysKKysgIC8qIENhbGN1bGF0ZSB0aGUgbWFudGlzc2EgYnkgbXVsdGlwbHlpbmcgYm90aCBudW1iZXJzIHRvIGdldCBhCisrICAgICB0d2ljZS1hcy13aWRlIG51bWJlci4gICovCisrICB7CisrI2lmIGRlZmluZWQoTk9fRElfTU9ERSkgfHwgZGVmaW5lZChURkxPQVQpCisrICAgIHsKKysgICAgICBmcmFjdHlwZSB4ID0gYS0+ZnJhY3Rpb24ubGw7CisrICAgICAgZnJhY3R5cGUgeWxvdyA9IGItPmZyYWN0aW9uLmxsOworKyAgICAgIGZyYWN0eXBlIHloaWdoID0gMDsKKysgICAgICBpbnQgYml0OworKworKyAgICAgIC8qID8/PyBUaGlzIGRvZXMgbXVsdGlwbGllcyBvbmUgYml0IGF0IGEgdGltZS4gIE9wdGltaXplLiAgKi8KKysgICAgICBmb3IgKGJpdCA9IDA7IGJpdCA8IEZSQUNfTkJJVFM7IGJpdCsrKQorKwl7CisrCSAgaW50IGNhcnJ5OworKworKwkgIGlmICh4ICYgMSkKKysJICAgIHsKKysJICAgICAgY2FycnkgPSAobG93ICs9IHlsb3cpIDwgeWxvdzsKKysJICAgICAgaGlnaCArPSB5aGlnaCArIGNhcnJ5OworKwkgICAgfQorKwkgIHloaWdoIDw8PSAxOworKwkgIGlmICh5bG93ICYgRlJBQ0hJR0gpCisrCSAgICB7CisrCSAgICAgIHloaWdoIHw9IDE7CisrCSAgICB9CisrCSAgeWxvdyA8PD0gMTsKKysJICB4ID4+PSAxOworKwl9CisrICAgIH0KKysjZWxpZiBkZWZpbmVkKEZMT0FUKSAKKysgICAgLyogTXVsdGlwbHlpbmcgdHdvIFVTSXMgdG8gZ2V0IGEgVURJLCB3ZSdyZSBzYWZlLiAgKi8KKysgICAgeworKyAgICAgIFVESXR5cGUgYW5zd2VyID0gKFVESXR5cGUpYS0+ZnJhY3Rpb24ubGwgKiAoVURJdHlwZSliLT5mcmFjdGlvbi5sbDsKKysgICAgICAKKysgICAgICBoaWdoID0gYW5zd2VyID4+IEJJVFNfUEVSX1NJOworKyAgICAgIGxvdyA9IGFuc3dlcjsKKysgICAgfQorKyNlbHNlCisrICAgIC8qIGZyYWN0eXBlIGlzIERJbW9kZSwgYnV0IHdlIG5lZWQgdGhlIHJlc3VsdCB0byBiZSB0d2ljZSBhcyB3aWRlLgorKyAgICAgICBBc3N1bWluZyBhIHdpZGVuaW5nIG11bHRpcGx5IGZyb20gREltb2RlIHRvIFRJbW9kZSBpcyBub3QKKysgICAgICAgYXZhaWxhYmxlLCBidWlsZCBvbmUgYnkgaGFuZC4gICovCisrICAgIHsKKysgICAgICBVU0l0eXBlIG5sID0gYS0+ZnJhY3Rpb24ubGw7CisrICAgICAgVVNJdHlwZSBuaCA9IGEtPmZyYWN0aW9uLmxsID4+IEJJVFNfUEVSX1NJOworKyAgICAgIFVTSXR5cGUgbWwgPSBiLT5mcmFjdGlvbi5sbDsKKysgICAgICBVU0l0eXBlIG1oID0gYi0+ZnJhY3Rpb24ubGwgPj4gQklUU19QRVJfU0k7CisrICAgICAgVURJdHlwZSBwcF9sbCA9IChVREl0eXBlKSBtbCAqIG5sOworKyAgICAgIFVESXR5cGUgcHBfaGwgPSAoVURJdHlwZSkgbWggKiBubDsKKysgICAgICBVREl0eXBlIHBwX2xoID0gKFVESXR5cGUpIG1sICogbmg7CisrICAgICAgVURJdHlwZSBwcF9oaCA9IChVREl0eXBlKSBtaCAqIG5oOworKyAgICAgIFVESXR5cGUgcmVzMiA9IDA7CisrICAgICAgVURJdHlwZSByZXMwID0gMDsKKysgICAgICBVREl0eXBlIHBzX2hoX18gPSBwcF9obCArIHBwX2xoOworKyAgICAgIGlmIChwc19oaF9fIDwgcHBfaGwpCisrCXJlczIgKz0gKFVESXR5cGUpMSA8PCBCSVRTX1BFUl9TSTsKKysgICAgICBwcF9obCA9IChVREl0eXBlKShVU0l0eXBlKXBzX2hoX18gPDwgQklUU19QRVJfU0k7CisrICAgICAgcmVzMCA9IHBwX2xsICsgcHBfaGw7CisrICAgICAgaWYgKHJlczAgPCBwcF9sbCkKKysJcmVzMisrOworKyAgICAgIHJlczIgKz0gKHBzX2hoX18gPj4gQklUU19QRVJfU0kpICsgcHBfaGg7CisrICAgICAgaGlnaCA9IHJlczI7CisrICAgICAgbG93ID0gcmVzMDsKKysgICAgfQorKyNlbmRpZgorKyAgfQorKworKyAgdG1wLT5ub3JtYWxfZXhwID0gYS0+bm9ybWFsX2V4cCArIGItPm5vcm1hbF9leHAKKysgICAgKyBGUkFDX05CSVRTIC0gKEZSQUNCSVRTICsgTkdBUkRTKTsKKysgIHRtcC0+c2lnbiA9IGEtPnNpZ24gIT0gYi0+c2lnbjsKKysgIHdoaWxlIChoaWdoID49IElNUExJQ0lUXzIpCisrICAgIHsKKysgICAgICB0bXAtPm5vcm1hbF9leHArKzsKKysgICAgICBpZiAoaGlnaCAmIDEpCisrCXsKKysJICBsb3cgPj49IDE7CisrCSAgbG93IHw9IEZSQUNISUdIOworKwl9CisrICAgICAgaGlnaCA+Pj0gMTsKKysgICAgfQorKyAgd2hpbGUgKGhpZ2ggPCBJTVBMSUNJVF8xKQorKyAgICB7CisrICAgICAgdG1wLT5ub3JtYWxfZXhwLS07CisrCisrICAgICAgaGlnaCA8PD0gMTsKKysgICAgICBpZiAobG93ICYgRlJBQ0hJR0gpCisrCWhpZ2ggfD0gMTsKKysgICAgICBsb3cgPDw9IDE7CisrICAgIH0KKysgIC8qIHJvdW5kaW5nIGlzIHRyaWNreS4gaWYgd2Ugb25seSByb3VuZCBpZiBpdCB3b24ndCBtYWtlIHVzIHJvdW5kIGxhdGVyLiAgKi8KKysjaWYgMAorKyAgaWYgKGxvdyAmIEZSQUNISUdIMikKKysgICAgeworKyAgICAgIGlmICgoKGhpZ2ggJiBHQVJETUFTSykgIT0gR0FSRE1TQikKKysJICAmJiAoKChoaWdoICsgMSkgJiBHQVJETUFTSykgPT0gR0FSRE1TQikpCisrCXsKKysJICAvKiBkb24ndCByb3VuZCwgaXQgZ2V0cyBkb25lIGFnYWluIGxhdGVyLiAgKi8KKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGhpZ2grKzsKKysJfQorKyAgICB9CisrI2VuZGlmCisrICBpZiAoIVJPVU5EX1RPV0FSRFNfWkVSTyAmJiAoaGlnaCAmIEdBUkRNQVNLKSA9PSBHQVJETVNCKQorKyAgICB7CisrICAgICAgaWYgKGhpZ2ggJiAoMSA8PCBOR0FSRFMpKQorKwl7CisrCSAgLyogaGFsZiB3YXksIHNvIHJvdW5kIHRvIGV2ZW4gKi8KKysJICBoaWdoICs9IEdBUkRST1VORCArIDE7CisrCX0KKysgICAgICBlbHNlIGlmIChsb3cpCisrCXsKKysJICAvKiBidXQgd2UgcmVhbGx5IHdlcmVuJ3QgaGFsZiB3YXkgKi8KKysJICBoaWdoICs9IEdBUkRST1VORCArIDE7CisrCX0KKysgICAgfQorKyAgdG1wLT5mcmFjdGlvbi5sbCA9IGhpZ2g7CisrICB0bXAtPmNsYXNzID0gQ0xBU1NfTlVNQkVSOworKyAgcmV0dXJuIHRtcDsKKyt9CisrCisrRkxPX3R5cGUKKyttdWx0aXBseSAoRkxPX3R5cGUgYXJnX2EsIEZMT190eXBlIGFyZ19iKQorK3sKKysgIGZwX251bWJlcl90eXBlIGE7CisrICBmcF9udW1iZXJfdHlwZSBiOworKyAgZnBfbnVtYmVyX3R5cGUgdG1wOworKyAgZnBfbnVtYmVyX3R5cGUgKnJlczsKKysgIEZMT191bmlvbl90eXBlIGF1LCBidTsKKysKKysgIGF1LnZhbHVlID0gYXJnX2E7CisrICBidS52YWx1ZSA9IGFyZ19iOworKworKyAgdW5wYWNrX2QgKCZhdSwgJmEpOworKyAgdW5wYWNrX2QgKCZidSwgJmIpOworKworKyAgcmVzID0gX2ZwbXVsX3BhcnRzICgmYSwgJmIsICZ0bXApOworKworKyAgcmV0dXJuIHBhY2tfZCAocmVzKTsKKyt9CisrI2VuZGlmIC8qIExfbXVsX3NmIHx8IExfbXVsX2RmICovCisrCisrI2lmIGRlZmluZWQoTF9kaXZfc2YpIHx8IGRlZmluZWQoTF9kaXZfZGYpIHx8IGRlZmluZWQoTF9kaXZfdGYpCisrc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKSBmcF9udW1iZXJfdHlwZSAqCisrX2ZwZGl2X3BhcnRzIChmcF9udW1iZXJfdHlwZSAqIGEsCisrCSAgICAgIGZwX251bWJlcl90eXBlICogYikKKyt7CisrICBmcmFjdHlwZSBiaXQ7CisrICBmcmFjdHlwZSBudW1lcmF0b3I7CisrICBmcmFjdHlwZSBkZW5vbWluYXRvcjsKKysgIGZyYWN0eXBlIHF1b3RpZW50OworKworKyAgaWYgKGlzbmFuIChhKSkKKysgICAgeworKyAgICAgIHJldHVybiBhOworKyAgICB9CisrICBpZiAoaXNuYW4gKGIpKQorKyAgICB7CisrICAgICAgcmV0dXJuIGI7CisrICAgIH0KKysKKysgIGEtPnNpZ24gPSBhLT5zaWduIF4gYi0+c2lnbjsKKysKKysgIGlmIChpc2luZiAoYSkgfHwgaXN6ZXJvIChhKSkKKysgICAgeworKyAgICAgIGlmIChhLT5jbGFzcyA9PSBiLT5jbGFzcykKKysJcmV0dXJuIG5hbiAoKTsKKysgICAgICByZXR1cm4gYTsKKysgICAgfQorKworKyAgaWYgKGlzaW5mIChiKSkKKysgICAgeworKyAgICAgIGEtPmZyYWN0aW9uLmxsID0gMDsKKysgICAgICBhLT5ub3JtYWxfZXhwID0gMDsKKysgICAgICByZXR1cm4gYTsKKysgICAgfQorKyAgaWYgKGlzemVybyAoYikpCisrICAgIHsKKysgICAgICBhLT5jbGFzcyA9IENMQVNTX0lORklOSVRZOworKyAgICAgIHJldHVybiBhOworKyAgICB9CisrCisrICAvKiBDYWxjdWxhdGUgdGhlIG1hbnRpc3NhIGJ5IG11bHRpcGx5aW5nIGJvdGggNjRiaXQgbnVtYmVycyB0byBnZXQgYQorKyAgICAgMTI4IGJpdCBudW1iZXIgKi8KKysgIHsKKysgICAgLyogcXVvdGllbnQgPQorKyAgICAgICAoIG51bWVyYXRvciAvIGRlbm9taW5hdG9yKSAqIDJeKG51bWVyYXRvciBleHBvbmVudCAtICBkZW5vbWluYXRvciBleHBvbmVudCkKKysgICAgICovCisrCisrICAgIGEtPm5vcm1hbF9leHAgPSBhLT5ub3JtYWxfZXhwIC0gYi0+bm9ybWFsX2V4cDsKKysgICAgbnVtZXJhdG9yID0gYS0+ZnJhY3Rpb24ubGw7CisrICAgIGRlbm9taW5hdG9yID0gYi0+ZnJhY3Rpb24ubGw7CisrCisrICAgIGlmIChudW1lcmF0b3IgPCBkZW5vbWluYXRvcikKKysgICAgICB7CisrCS8qIEZyYWN0aW9uIHdpbGwgYmUgbGVzcyB0aGFuIDEuMCAqLworKwludW1lcmF0b3IgKj0gMjsKKysJYS0+bm9ybWFsX2V4cC0tOworKyAgICAgIH0KKysgICAgYml0ID0gSU1QTElDSVRfMTsKKysgICAgcXVvdGllbnQgPSAwOworKyAgICAvKiA/Pz8gRG9lcyBkaXZpZGUgb25lIGJpdCBhdCBhIHRpbWUuICBPcHRpbWl6ZS4gICovCisrICAgIHdoaWxlIChiaXQpCisrICAgICAgeworKwlpZiAobnVtZXJhdG9yID49IGRlbm9taW5hdG9yKQorKwkgIHsKKysJICAgIHF1b3RpZW50IHw9IGJpdDsKKysJICAgIG51bWVyYXRvciAtPSBkZW5vbWluYXRvcjsKKysJICB9CisrCWJpdCA+Pj0gMTsKKysJbnVtZXJhdG9yICo9IDI7CisrICAgICAgfQorKworKyAgICBpZiAoIVJPVU5EX1RPV0FSRFNfWkVSTyAmJiAocXVvdGllbnQgJiBHQVJETUFTSykgPT0gR0FSRE1TQikKKysgICAgICB7CisrCWlmIChxdW90aWVudCAmICgxIDw8IE5HQVJEUykpCisrCSAgeworKwkgICAgLyogaGFsZiB3YXksIHNvIHJvdW5kIHRvIGV2ZW4gKi8KKysJICAgIHF1b3RpZW50ICs9IEdBUkRST1VORCArIDE7CisrCSAgfQorKwllbHNlIGlmIChudW1lcmF0b3IpCisrCSAgeworKwkgICAgLyogYnV0IHdlIHJlYWxseSB3ZXJlbid0IGhhbGYgd2F5LCBtb3JlIGJpdHMgZXhpc3QgKi8KKysJICAgIHF1b3RpZW50ICs9IEdBUkRST1VORCArIDE7CisrCSAgfQorKyAgICAgIH0KKysKKysgICAgYS0+ZnJhY3Rpb24ubGwgPSBxdW90aWVudDsKKysgICAgcmV0dXJuIChhKTsKKysgIH0KKyt9CisrCisrRkxPX3R5cGUKKytkaXZpZGUgKEZMT190eXBlIGFyZ19hLCBGTE9fdHlwZSBhcmdfYikKKyt7CisrICBmcF9udW1iZXJfdHlwZSBhOworKyAgZnBfbnVtYmVyX3R5cGUgYjsKKysgIGZwX251bWJlcl90eXBlICpyZXM7CisrICBGTE9fdW5pb25fdHlwZSBhdSwgYnU7CisrCisrICBhdS52YWx1ZSA9IGFyZ19hOworKyAgYnUudmFsdWUgPSBhcmdfYjsKKysKKysgIHVucGFja19kICgmYXUsICZhKTsKKysgIHVucGFja19kICgmYnUsICZiKTsKKysKKysgIHJlcyA9IF9mcGRpdl9wYXJ0cyAoJmEsICZiKTsKKysKKysgIHJldHVybiBwYWNrX2QgKHJlcyk7CisrfQorKyNlbmRpZiAvKiBMX2Rpdl9zZiB8fCBMX2Rpdl9kZiAqLworKworKyNpZiBkZWZpbmVkKExfZnBjbXBfcGFydHNfc2YpIHx8IGRlZmluZWQoTF9mcGNtcF9wYXJ0c19kZikgXAorKyAgICB8fCBkZWZpbmVkKExfZnBjbXBfcGFydHNfdGYpCisrLyogYWNjb3JkaW5nIHRvIHRoZSBkZW1vLCBmcGNtcCByZXR1cm5zIGEgY29tcGFyaXNvbiB3aXRoIDAuLi4gdGh1cworKyAgIGE8YiAtPiAtMQorKyAgIGE9PWIgLT4gMAorKyAgIGE+YiAtPiArMQorKyAqLworKworK2ludAorK19fZnBjbXBfcGFydHMgKGZwX251bWJlcl90eXBlICogYSwgZnBfbnVtYmVyX3R5cGUgKiBiKQorK3sKKysjaWYgMAorKyAgLyogZWl0aGVyIG5hbiAtPiB1bm9yZGVyZWQuIE11c3QgYmUgY2hlY2tlZCBvdXRzaWRlIG9mIHRoaXMgcm91dGluZS4gICovCisrICBpZiAoaXNuYW4gKGEpICYmIGlzbmFuIChiKSkKKysgICAgeworKyAgICAgIHJldHVybiAxOwkJCS8qIHN0aWxsIHVub3JkZXJlZCEgKi8KKysgICAgfQorKyNlbmRpZgorKworKyAgaWYgKGlzbmFuIChhKSB8fCBpc25hbiAoYikpCisrICAgIHsKKysgICAgICByZXR1cm4gMTsJCQkvKiBob3cgdG8gaW5kaWNhdGUgdW5vcmRlcmVkIGNvbXBhcmU/ICovCisrICAgIH0KKysgIGlmIChpc2luZiAoYSkgJiYgaXNpbmYgKGIpKQorKyAgICB7CisrICAgICAgLyogK2luZiA+IC1pbmYsIGJ1dCAraW5mICE9ICtpbmYgKi8KKysgICAgICAvKiBiICAgIFxhfCAraW5mKDApfCAtaW5mKDEpCisrICAgICAgIF9fX19fX1wrLS0tLS0tLS0rLS0tLS0tLS0KKysgICAgICAgK2luZigwKXwgYT09YigwKXwgYTxiKC0xKQorKyAgICAgICAtLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tCisrICAgICAgIC1pbmYoMSl8IGE+YigxKSB8IGE9PWIoMCkKKysgICAgICAgLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLQorKyAgICAgICBTbyBzaW5jZSB1bm9yZGVyZWQgbXVzdCBiZSBub256ZXJvLCBqdXN0IGxpbmUgdXAgdGhlIGNvbHVtbnMuLi4KKysgICAgICAgKi8KKysgICAgICByZXR1cm4gYi0+c2lnbiAtIGEtPnNpZ247CisrICAgIH0KKysgIC8qIGJ1dCBub3QgYm90aC4uLiAgKi8KKysgIGlmIChpc2luZiAoYSkpCisrICAgIHsKKysgICAgICByZXR1cm4gYS0+c2lnbiA/IC0xIDogMTsKKysgICAgfQorKyAgaWYgKGlzaW5mIChiKSkKKysgICAgeworKyAgICAgIHJldHVybiBiLT5zaWduID8gMSA6IC0xOworKyAgICB9CisrICBpZiAoaXN6ZXJvIChhKSAmJiBpc3plcm8gKGIpKQorKyAgICB7CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysgIGlmIChpc3plcm8gKGEpKQorKyAgICB7CisrICAgICAgcmV0dXJuIGItPnNpZ24gPyAxIDogLTE7CisrICAgIH0KKysgIGlmIChpc3plcm8gKGIpKQorKyAgICB7CisrICAgICAgcmV0dXJuIGEtPnNpZ24gPyAtMSA6IDE7CisrICAgIH0KKysgIC8qIG5vdyBib3RoIGFyZSAibm9ybWFsIi4gICovCisrICBpZiAoYS0+c2lnbiAhPSBiLT5zaWduKQorKyAgICB7CisrICAgICAgLyogb3Bwb3NpdGUgc2lnbnMgKi8KKysgICAgICByZXR1cm4gYS0+c2lnbiA/IC0xIDogMTsKKysgICAgfQorKyAgLyogc2FtZSBzaWduOyBleHBvbmVudHM/ICovCisrICBpZiAoYS0+bm9ybWFsX2V4cCA+IGItPm5vcm1hbF9leHApCisrICAgIHsKKysgICAgICByZXR1cm4gYS0+c2lnbiA/IC0xIDogMTsKKysgICAgfQorKyAgaWYgKGEtPm5vcm1hbF9leHAgPCBiLT5ub3JtYWxfZXhwKQorKyAgICB7CisrICAgICAgcmV0dXJuIGEtPnNpZ24gPyAxIDogLTE7CisrICAgIH0KKysgIC8qIHNhbWUgZXhwb25lbnRzOyBjaGVjayBzaXplLiAgKi8KKysgIGlmIChhLT5mcmFjdGlvbi5sbCA+IGItPmZyYWN0aW9uLmxsKQorKyAgICB7CisrICAgICAgcmV0dXJuIGEtPnNpZ24gPyAtMSA6IDE7CisrICAgIH0KKysgIGlmIChhLT5mcmFjdGlvbi5sbCA8IGItPmZyYWN0aW9uLmxsKQorKyAgICB7CisrICAgICAgcmV0dXJuIGEtPnNpZ24gPyAxIDogLTE7CisrICAgIH0KKysgIC8qIGFmdGVyIGFsbCB0aGF0LCB0aGV5J3JlIGVxdWFsLiAgKi8KKysgIHJldHVybiAwOworK30KKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZChMX2NvbXBhcmVfc2YpIHx8IGRlZmluZWQoTF9jb21wYXJlX2RmKSB8fCBkZWZpbmVkKExfY29tcG9hcmVfdGYpCisrQ01QdHlwZQorK2NvbXBhcmUgKEZMT190eXBlIGFyZ19hLCBGTE9fdHlwZSBhcmdfYikKKyt7CisrICBmcF9udW1iZXJfdHlwZSBhOworKyAgZnBfbnVtYmVyX3R5cGUgYjsKKysgIEZMT191bmlvbl90eXBlIGF1LCBidTsKKysKKysgIGF1LnZhbHVlID0gYXJnX2E7CisrICBidS52YWx1ZSA9IGFyZ19iOworKworKyAgdW5wYWNrX2QgKCZhdSwgJmEpOworKyAgdW5wYWNrX2QgKCZidSwgJmIpOworKworKyAgcmV0dXJuIF9fZnBjbXBfcGFydHMgKCZhLCAmYik7CisrfQorKyNlbmRpZiAvKiBMX2NvbXBhcmVfc2YgfHwgTF9jb21wYXJlX2RmICovCisrCisrI2lmbmRlZiBVU19TT0ZUV0FSRV9HT0ZBU1QKKysKKysvKiBUaGVzZSBzaG91bGQgYmUgb3B0aW1pemVkIGZvciB0aGVpciBzcGVjaWZpYyB0YXNrcyBzb21lZGF5LiAgKi8KKysKKysjaWYgZGVmaW5lZChMX2VxX3NmKSB8fCBkZWZpbmVkKExfZXFfZGYpIHx8IGRlZmluZWQoTF9lcV90ZikKKytDTVB0eXBlCisrX2VxX2YyIChGTE9fdHlwZSBhcmdfYSwgRkxPX3R5cGUgYXJnX2IpCisreworKyAgZnBfbnVtYmVyX3R5cGUgYTsKKysgIGZwX251bWJlcl90eXBlIGI7CisrICBGTE9fdW5pb25fdHlwZSBhdSwgYnU7CisrCisrICBhdS52YWx1ZSA9IGFyZ19hOworKyAgYnUudmFsdWUgPSBhcmdfYjsKKysKKysgIHVucGFja19kICgmYXUsICZhKTsKKysgIHVucGFja19kICgmYnUsICZiKTsKKysKKysgIGlmIChpc25hbiAoJmEpIHx8IGlzbmFuICgmYikpCisrICAgIHJldHVybiAxOwkJCS8qIGZhbHNlLCB0cnV0aCA9PSAwICovCisrCisrICByZXR1cm4gX19mcGNtcF9wYXJ0cyAoJmEsICZiKSA7CisrfQorKyNlbmRpZiAvKiBMX2VxX3NmIHx8IExfZXFfZGYgKi8KKysKKysjaWYgZGVmaW5lZChMX25lX3NmKSB8fCBkZWZpbmVkKExfbmVfZGYpIHx8IGRlZmluZWQoTF9uZV90ZikKKytDTVB0eXBlCisrX25lX2YyIChGTE9fdHlwZSBhcmdfYSwgRkxPX3R5cGUgYXJnX2IpCisreworKyAgZnBfbnVtYmVyX3R5cGUgYTsKKysgIGZwX251bWJlcl90eXBlIGI7CisrICBGTE9fdW5pb25fdHlwZSBhdSwgYnU7CisrCisrICBhdS52YWx1ZSA9IGFyZ19hOworKyAgYnUudmFsdWUgPSBhcmdfYjsKKysKKysgIHVucGFja19kICgmYXUsICZhKTsKKysgIHVucGFja19kICgmYnUsICZiKTsKKysKKysgIGlmIChpc25hbiAoJmEpIHx8IGlzbmFuICgmYikpCisrICAgIHJldHVybiAxOwkJCS8qIHRydWUsIHRydXRoICE9IDAgKi8KKysKKysgIHJldHVybiAgX19mcGNtcF9wYXJ0cyAoJmEsICZiKSA7CisrfQorKyNlbmRpZiAvKiBMX25lX3NmIHx8IExfbmVfZGYgKi8KKysKKysjaWYgZGVmaW5lZChMX2d0X3NmKSB8fCBkZWZpbmVkKExfZ3RfZGYpIHx8IGRlZmluZWQoTF9ndF90ZikKKytDTVB0eXBlCisrX2d0X2YyIChGTE9fdHlwZSBhcmdfYSwgRkxPX3R5cGUgYXJnX2IpCisreworKyAgZnBfbnVtYmVyX3R5cGUgYTsKKysgIGZwX251bWJlcl90eXBlIGI7CisrICBGTE9fdW5pb25fdHlwZSBhdSwgYnU7CisrCisrICBhdS52YWx1ZSA9IGFyZ19hOworKyAgYnUudmFsdWUgPSBhcmdfYjsKKysKKysgIHVucGFja19kICgmYXUsICZhKTsKKysgIHVucGFja19kICgmYnUsICZiKTsKKysKKysgIGlmIChpc25hbiAoJmEpIHx8IGlzbmFuICgmYikpCisrICAgIHJldHVybiAtMTsJCQkvKiBmYWxzZSwgdHJ1dGggPiAwICovCisrCisrICByZXR1cm4gX19mcGNtcF9wYXJ0cyAoJmEsICZiKTsKKyt9CisrI2VuZGlmIC8qIExfZ3Rfc2YgfHwgTF9ndF9kZiAqLworKworKyNpZiBkZWZpbmVkKExfZ2Vfc2YpIHx8IGRlZmluZWQoTF9nZV9kZikgfHwgZGVmaW5lZChMX2dlX3RmKQorK0NNUHR5cGUKKytfZ2VfZjIgKEZMT190eXBlIGFyZ19hLCBGTE9fdHlwZSBhcmdfYikKKyt7CisrICBmcF9udW1iZXJfdHlwZSBhOworKyAgZnBfbnVtYmVyX3R5cGUgYjsKKysgIEZMT191bmlvbl90eXBlIGF1LCBidTsKKysKKysgIGF1LnZhbHVlID0gYXJnX2E7CisrICBidS52YWx1ZSA9IGFyZ19iOworKworKyAgdW5wYWNrX2QgKCZhdSwgJmEpOworKyAgdW5wYWNrX2QgKCZidSwgJmIpOworKworKyAgaWYgKGlzbmFuICgmYSkgfHwgaXNuYW4gKCZiKSkKKysgICAgcmV0dXJuIC0xOwkJCS8qIGZhbHNlLCB0cnV0aCA+PSAwICovCisrICByZXR1cm4gX19mcGNtcF9wYXJ0cyAoJmEsICZiKSA7CisrfQorKyNlbmRpZiAvKiBMX2dlX3NmIHx8IExfZ2VfZGYgKi8KKysKKysjaWYgZGVmaW5lZChMX2x0X3NmKSB8fCBkZWZpbmVkKExfbHRfZGYpIHx8IGRlZmluZWQoTF9sdF90ZikKKytDTVB0eXBlCisrX2x0X2YyIChGTE9fdHlwZSBhcmdfYSwgRkxPX3R5cGUgYXJnX2IpCisreworKyAgZnBfbnVtYmVyX3R5cGUgYTsKKysgIGZwX251bWJlcl90eXBlIGI7CisrICBGTE9fdW5pb25fdHlwZSBhdSwgYnU7CisrCisrICBhdS52YWx1ZSA9IGFyZ19hOworKyAgYnUudmFsdWUgPSBhcmdfYjsKKysKKysgIHVucGFja19kICgmYXUsICZhKTsKKysgIHVucGFja19kICgmYnUsICZiKTsKKysKKysgIGlmIChpc25hbiAoJmEpIHx8IGlzbmFuICgmYikpCisrICAgIHJldHVybiAxOwkJCS8qIGZhbHNlLCB0cnV0aCA8IDAgKi8KKysKKysgIHJldHVybiBfX2ZwY21wX3BhcnRzICgmYSwgJmIpOworK30KKysjZW5kaWYgLyogTF9sdF9zZiB8fCBMX2x0X2RmICovCisrCisrI2lmIGRlZmluZWQoTF9sZV9zZikgfHwgZGVmaW5lZChMX2xlX2RmKSB8fCBkZWZpbmVkKExfbGVfdGYpCisrQ01QdHlwZQorK19sZV9mMiAoRkxPX3R5cGUgYXJnX2EsIEZMT190eXBlIGFyZ19iKQorK3sKKysgIGZwX251bWJlcl90eXBlIGE7CisrICBmcF9udW1iZXJfdHlwZSBiOworKyAgRkxPX3VuaW9uX3R5cGUgYXUsIGJ1OworKworKyAgYXUudmFsdWUgPSBhcmdfYTsKKysgIGJ1LnZhbHVlID0gYXJnX2I7CisrCisrICB1bnBhY2tfZCAoJmF1LCAmYSk7CisrICB1bnBhY2tfZCAoJmJ1LCAmYik7CisrCisrICBpZiAoaXNuYW4gKCZhKSB8fCBpc25hbiAoJmIpKQorKyAgICByZXR1cm4gMTsJCQkvKiBmYWxzZSwgdHJ1dGggPD0gMCAqLworKworKyAgcmV0dXJuIF9fZnBjbXBfcGFydHMgKCZhLCAmYikgOworK30KKysjZW5kaWYgLyogTF9sZV9zZiB8fCBMX2xlX2RmICovCisrCisrI2VuZGlmIC8qICEgVVNfU09GVFdBUkVfR09GQVNUICovCisrCisrI2lmIGRlZmluZWQoTF91bm9yZF9zZikgfHwgZGVmaW5lZChMX3Vub3JkX2RmKSB8fCBkZWZpbmVkKExfdW5vcmRfdGYpCisrQ01QdHlwZQorK191bm9yZF9mMiAoRkxPX3R5cGUgYXJnX2EsIEZMT190eXBlIGFyZ19iKQorK3sKKysgIGZwX251bWJlcl90eXBlIGE7CisrICBmcF9udW1iZXJfdHlwZSBiOworKyAgRkxPX3VuaW9uX3R5cGUgYXUsIGJ1OworKworKyAgYXUudmFsdWUgPSBhcmdfYTsKKysgIGJ1LnZhbHVlID0gYXJnX2I7CisrCisrICB1bnBhY2tfZCAoJmF1LCAmYSk7CisrICB1bnBhY2tfZCAoJmJ1LCAmYik7CisrCisrICByZXR1cm4gKGlzbmFuICgmYSkgfHwgaXNuYW4gKCZiKSk7CisrfQorKyNlbmRpZiAvKiBMX3Vub3JkX3NmIHx8IExfdW5vcmRfZGYgKi8KKysKKysjaWYgZGVmaW5lZChMX3NpX3RvX3NmKSB8fCBkZWZpbmVkKExfc2lfdG9fZGYpIHx8IGRlZmluZWQoTF9zaV90b190ZikKKytGTE9fdHlwZQorK3NpX3RvX2Zsb2F0IChTSXR5cGUgYXJnX2EpCisreworKyAgZnBfbnVtYmVyX3R5cGUgaW47CisrCisrICBpbi5jbGFzcyA9IENMQVNTX05VTUJFUjsKKysgIGluLnNpZ24gPSBhcmdfYSA8IDA7CisrICBpZiAoIWFyZ19hKQorKyAgICB7CisrICAgICAgaW4uY2xhc3MgPSBDTEFTU19aRVJPOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBpbi5ub3JtYWxfZXhwID0gRlJBQ0JJVFMgKyBOR0FSRFM7CisrICAgICAgaWYgKGluLnNpZ24pIAorKwl7CisrCSAgLyogU3BlY2lhbCBjYXNlIGZvciBtaW5pbnQsIHNpbmNlIHRoZXJlIGlzIG5vICt2ZSBpbnRlZ2VyCisrCSAgICAgcmVwcmVzZW50YXRpb24gZm9yIGl0ICovCisrCSAgaWYgKGFyZ19hID09ICgtIE1BWF9TSV9JTlQgLSAxKSkKKysJICAgIHsKKysJICAgICAgcmV0dXJuIChGTE9fdHlwZSkoLSBNQVhfU0lfSU5UIC0gMSk7CisrCSAgICB9CisrCSAgaW4uZnJhY3Rpb24ubGwgPSAoLWFyZ19hKTsKKysJfQorKyAgICAgIGVsc2UKKysJaW4uZnJhY3Rpb24ubGwgPSBhcmdfYTsKKysKKysgICAgICB3aGlsZSAoaW4uZnJhY3Rpb24ubGwgPCAoKGZyYWN0eXBlKTEgPDwgKEZSQUNCSVRTICsgTkdBUkRTKSkpCisrCXsKKysJICBpbi5mcmFjdGlvbi5sbCA8PD0gMTsKKysJICBpbi5ub3JtYWxfZXhwIC09IDE7CisrCX0KKysgICAgfQorKyAgcmV0dXJuIHBhY2tfZCAoJmluKTsKKyt9CisrI2VuZGlmIC8qIExfc2lfdG9fc2YgfHwgTF9zaV90b19kZiAqLworKworKyNpZiBkZWZpbmVkKExfdXNpX3RvX3NmKSB8fCBkZWZpbmVkKExfdXNpX3RvX2RmKSB8fCBkZWZpbmVkKExfdXNpX3RvX3RmKQorK0ZMT190eXBlCisrdXNpX3RvX2Zsb2F0IChVU0l0eXBlIGFyZ19hKQorK3sKKysgIGZwX251bWJlcl90eXBlIGluOworKworKyAgaW4uc2lnbiA9IDA7CisrICBpZiAoIWFyZ19hKQorKyAgICB7CisrICAgICAgaW4uY2xhc3MgPSBDTEFTU19aRVJPOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBpbi5jbGFzcyA9IENMQVNTX05VTUJFUjsKKysgICAgICBpbi5ub3JtYWxfZXhwID0gRlJBQ0JJVFMgKyBOR0FSRFM7CisrICAgICAgaW4uZnJhY3Rpb24ubGwgPSBhcmdfYTsKKysKKysgICAgICB3aGlsZSAoaW4uZnJhY3Rpb24ubGwgPiAoKGZyYWN0eXBlKTEgPDwgKEZSQUNCSVRTICsgTkdBUkRTKSkpCisrICAgICAgICB7CisrICAgICAgICAgIGluLmZyYWN0aW9uLmxsID4+PSAxOworKyAgICAgICAgICBpbi5ub3JtYWxfZXhwICs9IDE7CisrICAgICAgICB9CisrICAgICAgd2hpbGUgKGluLmZyYWN0aW9uLmxsIDwgKChmcmFjdHlwZSkxIDw8IChGUkFDQklUUyArIE5HQVJEUykpKQorKwl7CisrCSAgaW4uZnJhY3Rpb24ubGwgPDw9IDE7CisrCSAgaW4ubm9ybWFsX2V4cCAtPSAxOworKwl9CisrICAgIH0KKysgIHJldHVybiBwYWNrX2QgKCZpbik7CisrfQorKyNlbmRpZgorKworKyNpZiBkZWZpbmVkKExfc2ZfdG9fc2kpIHx8IGRlZmluZWQoTF9kZl90b19zaSkgfHwgZGVmaW5lZChMX3RmX3RvX3NpKQorK1NJdHlwZQorK2Zsb2F0X3RvX3NpIChGTE9fdHlwZSBhcmdfYSkKKyt7CisrICBmcF9udW1iZXJfdHlwZSBhOworKyAgU0l0eXBlIHRtcDsKKysgIEZMT191bmlvbl90eXBlIGF1OworKworKyAgYXUudmFsdWUgPSBhcmdfYTsKKysgIHVucGFja19kICgmYXUsICZhKTsKKysKKysgIGlmIChpc3plcm8gKCZhKSkKKysgICAgcmV0dXJuIDA7CisrICBpZiAoaXNuYW4gKCZhKSkKKysgICAgcmV0dXJuIDA7CisrICAvKiBnZXQgcmVhc29uYWJsZSBNQVhfU0lfSU5ULi4uICAqLworKyAgaWYgKGlzaW5mICgmYSkpCisrICAgIHJldHVybiBhLnNpZ24gPyAoLU1BWF9TSV9JTlQpLTEgOiBNQVhfU0lfSU5UOworKyAgLyogaXQgaXMgYSBudW1iZXIsIGJ1dCBhIHNtYWxsIG9uZSAqLworKyAgaWYgKGEubm9ybWFsX2V4cCA8IDApCisrICAgIHJldHVybiAwOworKyAgaWYgKGEubm9ybWFsX2V4cCA+IEJJVFNfUEVSX1NJIC0gMikKKysgICAgcmV0dXJuIGEuc2lnbiA/ICgtTUFYX1NJX0lOVCktMSA6IE1BWF9TSV9JTlQ7CisrICB0bXAgPSBhLmZyYWN0aW9uLmxsID4+ICgoRlJBQ0JJVFMgKyBOR0FSRFMpIC0gYS5ub3JtYWxfZXhwKTsKKysgIHJldHVybiBhLnNpZ24gPyAoLXRtcCkgOiAodG1wKTsKKyt9CisrI2VuZGlmIC8qIExfc2ZfdG9fc2kgfHwgTF9kZl90b19zaSAqLworKworKyNpZiBkZWZpbmVkKExfc2ZfdG9fdXNpKSB8fCBkZWZpbmVkKExfZGZfdG9fdXNpKSB8fCBkZWZpbmVkKExfdGZfdG9fdXNpKQorKyNpZiBkZWZpbmVkIFVTX1NPRlRXQVJFX0dPRkFTVCB8fCBkZWZpbmVkKExfdGZfdG9fdXNpKQorKy8qIFdoaWxlIGxpYmdjYzIuYyBkZWZpbmVzIGl0cyBvd24gX19maXh1bnNzZnNpIGFuZCBfX2ZpeHVuc2Rmc2kgcm91dGluZXMsCisrICAgd2UgYWxzbyBkZWZpbmUgdGhlbSBmb3IgR09GQVNUIGJlY2F1c2UgdGhlIG9uZXMgaW4gbGliZ2NjMi5jIGhhdmUgdGhlCisrICAgd3JvbmcgbmFtZXMgYW5kIEknZCByYXRoZXIgZGVmaW5lIHRoZXNlIGhlcmUgYW5kIGtlZXAgR09GQVNUIENZRy1MT0MncworKyAgIG91dCBvZiBsaWJnY2MyLmMuICBXZSBjYW4ndCBkZWZpbmUgdGhlc2UgaGVyZSBpZiBub3QgR09GQVNUIGJlY2F1c2UgdGhlbgorKyAgIHRoZXJlJ2QgYmUgZHVwbGljYXRlIGNvcGllcy4gICovCisrCisrVVNJdHlwZQorK2Zsb2F0X3RvX3VzaSAoRkxPX3R5cGUgYXJnX2EpCisreworKyAgZnBfbnVtYmVyX3R5cGUgYTsKKysgIEZMT191bmlvbl90eXBlIGF1OworKworKyAgYXUudmFsdWUgPSBhcmdfYTsKKysgIHVucGFja19kICgmYXUsICZhKTsKKysKKysgIGlmIChpc3plcm8gKCZhKSkKKysgICAgcmV0dXJuIDA7CisrICBpZiAoaXNuYW4gKCZhKSkKKysgICAgcmV0dXJuIDA7CisrICAvKiBpdCBpcyBhIG5lZ2F0aXZlIG51bWJlciAqLworKyAgaWYgKGEuc2lnbikKKysgICAgcmV0dXJuIDA7CisrICAvKiBnZXQgcmVhc29uYWJsZSBNQVhfVVNJX0lOVC4uLiAgKi8KKysgIGlmIChpc2luZiAoJmEpKQorKyAgICByZXR1cm4gTUFYX1VTSV9JTlQ7CisrICAvKiBpdCBpcyBhIG51bWJlciwgYnV0IGEgc21hbGwgb25lICovCisrICBpZiAoYS5ub3JtYWxfZXhwIDwgMCkKKysgICAgcmV0dXJuIDA7CisrICBpZiAoYS5ub3JtYWxfZXhwID4gQklUU19QRVJfU0kgLSAxKQorKyAgICByZXR1cm4gTUFYX1VTSV9JTlQ7CisrICBlbHNlIGlmIChhLm5vcm1hbF9leHAgPiAoRlJBQ0JJVFMgKyBOR0FSRFMpKQorKyAgICByZXR1cm4gYS5mcmFjdGlvbi5sbCA8PCAoYS5ub3JtYWxfZXhwIC0gKEZSQUNCSVRTICsgTkdBUkRTKSk7CisrICBlbHNlCisrICAgIHJldHVybiBhLmZyYWN0aW9uLmxsID4+ICgoRlJBQ0JJVFMgKyBOR0FSRFMpIC0gYS5ub3JtYWxfZXhwKTsKKyt9CisrI2VuZGlmIC8qIFVTX1NPRlRXQVJFX0dPRkFTVCAqLworKyNlbmRpZiAvKiBMX3NmX3RvX3VzaSB8fCBMX2RmX3RvX3VzaSAqLworKworKyNpZiBkZWZpbmVkKExfbmVnYXRlX3NmKSB8fCBkZWZpbmVkKExfbmVnYXRlX2RmKSB8fCBkZWZpbmVkKExfbmVnYXRlX3RmKQorK0ZMT190eXBlCisrbmVnYXRlIChGTE9fdHlwZSBhcmdfYSkKKyt7CisrICBmcF9udW1iZXJfdHlwZSBhOworKyAgRkxPX3VuaW9uX3R5cGUgYXU7CisrCisrICBhdS52YWx1ZSA9IGFyZ19hOworKyAgdW5wYWNrX2QgKCZhdSwgJmEpOworKworKyAgZmxpcF9zaWduICgmYSk7CisrICByZXR1cm4gcGFja19kICgmYSk7CisrfQorKyNlbmRpZiAvKiBMX25lZ2F0ZV9zZiB8fCBMX25lZ2F0ZV9kZiAqLworKworKyNpZmRlZiBGTE9BVAorKworKyNpZiBkZWZpbmVkKExfbWFrZV9zZikKKytTRnR5cGUKKytfX21ha2VfZnAoZnBfY2xhc3NfdHlwZSBjbGFzcywKKysJICAgICB1bnNpZ25lZCBpbnQgc2lnbiwKKysJICAgICBpbnQgZXhwLCAKKysJICAgICBVU0l0eXBlIGZyYWMpCisreworKyAgZnBfbnVtYmVyX3R5cGUgaW47CisrCisrICBpbi5jbGFzcyA9IGNsYXNzOworKyAgaW4uc2lnbiA9IHNpZ247CisrICBpbi5ub3JtYWxfZXhwID0gZXhwOworKyAgaW4uZnJhY3Rpb24ubGwgPSBmcmFjOworKyAgcmV0dXJuIHBhY2tfZCAoJmluKTsKKyt9CisrI2VuZGlmIC8qIExfbWFrZV9zZiAqLworKworKyNpZm5kZWYgRkxPQVRfT05MWQorKworKy8qIFRoaXMgZW5hYmxlcyBvbmUgdG8gYnVpbGQgYW4gZnAgbGlicmFyeSB0aGF0IHN1cHBvcnRzIGZsb2F0IGJ1dCBub3QgZG91YmxlLgorKyAgIE90aGVyd2lzZSwgd2Ugd291bGQgZ2V0IGFuIHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gX19tYWtlX2RwLgorKyAgIFRoaXMgaXMgbmVlZGVkIGZvciBzb21lIDgtYml0IHBvcnRzIHRoYXQgY2FuJ3QgaGFuZGxlIHdlbGwgdmFsdWVzIHRoYXQKKysgICBhcmUgOC1ieXRlcyBpbiBzaXplLCBzbyB3ZSBqdXN0IGRvbid0IHN1cHBvcnQgZG91YmxlIGZvciB0aGVtIGF0IGFsbC4gICovCisrCisrI2lmIGRlZmluZWQoTF9zZl90b19kZikKKytERnR5cGUKKytzZl90b19kZiAoU0Z0eXBlIGFyZ19hKQorK3sKKysgIGZwX251bWJlcl90eXBlIGluOworKyAgRkxPX3VuaW9uX3R5cGUgYXU7CisrCisrICBhdS52YWx1ZSA9IGFyZ19hOworKyAgdW5wYWNrX2QgKCZhdSwgJmluKTsKKysKKysgIHJldHVybiBfX21ha2VfZHAgKGluLmNsYXNzLCBpbi5zaWduLCBpbi5ub3JtYWxfZXhwLAorKwkJICAgICgoVURJdHlwZSkgaW4uZnJhY3Rpb24ubGwpIDw8IEZfRF9CSVRPRkYpOworK30KKysjZW5kaWYgLyogTF9zZl90b19kZiAqLworKworKyNpZiBkZWZpbmVkKExfc2ZfdG9fdGYpICYmIGRlZmluZWQoVE1PREVTKQorK1RGdHlwZQorK3NmX3RvX3RmIChTRnR5cGUgYXJnX2EpCisreworKyAgZnBfbnVtYmVyX3R5cGUgaW47CisrICBGTE9fdW5pb25fdHlwZSBhdTsKKysKKysgIGF1LnZhbHVlID0gYXJnX2E7CisrICB1bnBhY2tfZCAoJmF1LCAmaW4pOworKworKyAgcmV0dXJuIF9fbWFrZV90cCAoaW4uY2xhc3MsIGluLnNpZ24sIGluLm5vcm1hbF9leHAsCisrCQkgICAgKChVVEl0eXBlKSBpbi5mcmFjdGlvbi5sbCkgPDwgRl9UX0JJVE9GRik7CisrfQorKyNlbmRpZiAvKiBMX3NmX3RvX2RmICovCisrCisrI2VuZGlmIC8qICEgRkxPQVRfT05MWSAqLworKyNlbmRpZiAvKiBGTE9BVCAqLworKworKyNpZm5kZWYgRkxPQVQKKysKKytleHRlcm4gU0Z0eXBlIF9fbWFrZV9mcCAoZnBfY2xhc3NfdHlwZSwgdW5zaWduZWQgaW50LCBpbnQsIFVTSXR5cGUpOworKworKyNpZiBkZWZpbmVkKExfbWFrZV9kZikKKytERnR5cGUKKytfX21ha2VfZHAgKGZwX2NsYXNzX3R5cGUgY2xhc3MsIHVuc2lnbmVkIGludCBzaWduLCBpbnQgZXhwLCBVREl0eXBlIGZyYWMpCisreworKyAgZnBfbnVtYmVyX3R5cGUgaW47CisrCisrICBpbi5jbGFzcyA9IGNsYXNzOworKyAgaW4uc2lnbiA9IHNpZ247CisrICBpbi5ub3JtYWxfZXhwID0gZXhwOworKyAgaW4uZnJhY3Rpb24ubGwgPSBmcmFjOworKyAgcmV0dXJuIHBhY2tfZCAoJmluKTsKKyt9CisrI2VuZGlmIC8qIExfbWFrZV9kZiAqLworKworKyNpZiBkZWZpbmVkKExfZGZfdG9fc2YpCisrU0Z0eXBlCisrZGZfdG9fc2YgKERGdHlwZSBhcmdfYSkKKyt7CisrICBmcF9udW1iZXJfdHlwZSBpbjsKKysgIFVTSXR5cGUgc2ZmcmFjOworKyAgRkxPX3VuaW9uX3R5cGUgYXU7CisrCisrICBhdS52YWx1ZSA9IGFyZ19hOworKyAgdW5wYWNrX2QgKCZhdSwgJmluKTsKKysKKysgIHNmZnJhYyA9IGluLmZyYWN0aW9uLmxsID4+IEZfRF9CSVRPRkY7CisrCisrICAvKiBXZSBzZXQgdGhlIGxvd2VzdCBndWFyZCBiaXQgaW4gU0ZGUkFDIGlmIHdlIGRpc2NhcmRlZCBhbnkgbm9uCisrICAgICB6ZXJvIGJpdHMuICAqLworKyAgaWYgKChpbi5mcmFjdGlvbi5sbCAmICgoKFVTSXR5cGUpIDEgPDwgRl9EX0JJVE9GRikgLSAxKSkgIT0gMCkKKysgICAgc2ZmcmFjIHw9IDE7CisrCisrICByZXR1cm4gX19tYWtlX2ZwIChpbi5jbGFzcywgaW4uc2lnbiwgaW4ubm9ybWFsX2V4cCwgc2ZmcmFjKTsKKyt9CisrI2VuZGlmIC8qIExfZGZfdG9fc2YgKi8KKysKKysjaWYgZGVmaW5lZChMX2RmX3RvX3RmKSAmJiBkZWZpbmVkKFRNT0RFUykgXAorKyAgICAmJiAhZGVmaW5lZChGTE9BVCkgJiYgIWRlZmluZWQoVEZMT0FUKQorK1RGdHlwZQorK2RmX3RvX3RmIChERnR5cGUgYXJnX2EpCisreworKyAgZnBfbnVtYmVyX3R5cGUgaW47CisrICBGTE9fdW5pb25fdHlwZSBhdTsKKysKKysgIGF1LnZhbHVlID0gYXJnX2E7CisrICB1bnBhY2tfZCAoJmF1LCAmaW4pOworKworKyAgcmV0dXJuIF9fbWFrZV90cCAoaW4uY2xhc3MsIGluLnNpZ24sIGluLm5vcm1hbF9leHAsCisrCQkgICAgKChVVEl0eXBlKSBpbi5mcmFjdGlvbi5sbCkgPDwgRF9UX0JJVE9GRik7CisrfQorKyNlbmRpZiAvKiBMX3NmX3RvX2RmICovCisrCisrI2lmZGVmIFRGTE9BVAorKyNpZiBkZWZpbmVkKExfbWFrZV90ZikKKytURnR5cGUKKytfX21ha2VfdHAoZnBfY2xhc3NfdHlwZSBjbGFzcywKKysJICAgICB1bnNpZ25lZCBpbnQgc2lnbiwKKysJICAgICBpbnQgZXhwLCAKKysJICAgICBVVEl0eXBlIGZyYWMpCisreworKyAgZnBfbnVtYmVyX3R5cGUgaW47CisrCisrICBpbi5jbGFzcyA9IGNsYXNzOworKyAgaW4uc2lnbiA9IHNpZ247CisrICBpbi5ub3JtYWxfZXhwID0gZXhwOworKyAgaW4uZnJhY3Rpb24ubGwgPSBmcmFjOworKyAgcmV0dXJuIHBhY2tfZCAoJmluKTsKKyt9CisrI2VuZGlmIC8qIExfbWFrZV90ZiAqLworKworKyNpZiBkZWZpbmVkKExfdGZfdG9fZGYpCisrREZ0eXBlCisrdGZfdG9fZGYgKFRGdHlwZSBhcmdfYSkKKyt7CisrICBmcF9udW1iZXJfdHlwZSBpbjsKKysgIFVESXR5cGUgc2ZmcmFjOworKyAgRkxPX3VuaW9uX3R5cGUgYXU7CisrCisrICBhdS52YWx1ZSA9IGFyZ19hOworKyAgdW5wYWNrX2QgKCZhdSwgJmluKTsKKysKKysgIHNmZnJhYyA9IGluLmZyYWN0aW9uLmxsID4+IERfVF9CSVRPRkY7CisrCisrICAvKiBXZSBzZXQgdGhlIGxvd2VzdCBndWFyZCBiaXQgaW4gU0ZGUkFDIGlmIHdlIGRpc2NhcmRlZCBhbnkgbm9uCisrICAgICB6ZXJvIGJpdHMuICAqLworKyAgaWYgKChpbi5mcmFjdGlvbi5sbCAmICgoKFVUSXR5cGUpIDEgPDwgRF9UX0JJVE9GRikgLSAxKSkgIT0gMCkKKysgICAgc2ZmcmFjIHw9IDE7CisrCisrICByZXR1cm4gX19tYWtlX2RwIChpbi5jbGFzcywgaW4uc2lnbiwgaW4ubm9ybWFsX2V4cCwgc2ZmcmFjKTsKKyt9CisrI2VuZGlmIC8qIExfdGZfdG9fZGYgKi8KKysKKysjaWYgZGVmaW5lZChMX3RmX3RvX3NmKQorK1NGdHlwZQorK3RmX3RvX3NmIChURnR5cGUgYXJnX2EpCisreworKyAgZnBfbnVtYmVyX3R5cGUgaW47CisrICBVU0l0eXBlIHNmZnJhYzsKKysgIEZMT191bmlvbl90eXBlIGF1OworKworKyAgYXUudmFsdWUgPSBhcmdfYTsKKysgIHVucGFja19kICgmYXUsICZpbik7CisrCisrICBzZmZyYWMgPSBpbi5mcmFjdGlvbi5sbCA+PiBGX1RfQklUT0ZGOworKworKyAgLyogV2Ugc2V0IHRoZSBsb3dlc3QgZ3VhcmQgYml0IGluIFNGRlJBQyBpZiB3ZSBkaXNjYXJkZWQgYW55IG5vbgorKyAgICAgemVybyBiaXRzLiAgKi8KKysgIGlmICgoaW4uZnJhY3Rpb24ubGwgJiAoKChVVEl0eXBlKSAxIDw8IEZfVF9CSVRPRkYpIC0gMSkpICE9IDApCisrICAgIHNmZnJhYyB8PSAxOworKworKyAgcmV0dXJuIF9fbWFrZV9mcCAoaW4uY2xhc3MsIGluLnNpZ24sIGluLm5vcm1hbF9leHAsIHNmZnJhYyk7CisrfQorKyNlbmRpZiAvKiBMX3RmX3RvX3NmICovCisrI2VuZGlmIC8qIFRGTE9BVCAqLworKworKyNlbmRpZiAvKiAhIEZMT0FUICovCisrI2VuZGlmIC8qICFFWFRFTkRFRF9GTE9BVF9TVFVCUyAqLworZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL25pb3MyL25pb3MyLWZwLWJpdC5jIGdjYy0zLjQuNi9nY2MvY29uZmlnL25pb3MyL25pb3MyLWZwLWJpdC5jCistLS0gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9uaW9zMi9uaW9zMi1mcC1iaXQuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy0zLjQuNi9nY2MvY29uZmlnL25pb3MyL25pb3MyLWZwLWJpdC5jCTIwMDctMDgtMTUgMjM6MDk6MzYuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDE2NTIgQEAKKysjZGVmaW5lIEZMT0FUCisrLyogVGhpcyBpcyBhIHNvZnR3YXJlIGZsb2F0aW5nIHBvaW50IGxpYnJhcnkgd2hpY2ggY2FuIGJlIHVzZWQKKysgICBmb3IgdGFyZ2V0cyB3aXRob3V0IGhhcmR3YXJlIGZsb2F0aW5nIHBvaW50LiAKKysgICBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKytUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKytsYXRlciB2ZXJzaW9uLgorKworK0luIGFkZGl0aW9uIHRvIHRoZSBwZXJtaXNzaW9ucyBpbiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHRoZQorK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcyB5b3UgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gbGluayB0aGUKKytjb21waWxlZCB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB3aXRoIG90aGVyIHByb2dyYW1zLCBhbmQgdG8gZGlzdHJpYnV0ZQorK3Rob3NlIHByb2dyYW1zIHdpdGhvdXQgYW55IHJlc3RyaWN0aW9uIGNvbWluZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcworK2ZpbGUuICAoVGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgcmVzdHJpY3Rpb25zIGRvIGFwcGx5IGluIG90aGVyCisrcmVzcGVjdHM7IGZvciBleGFtcGxlLCB0aGV5IGNvdmVyIG1vZGlmaWNhdGlvbiBvZiB0aGUgZmlsZSwgYW5kCisrZGlzdHJpYnV0aW9uIHdoZW4gbm90IGxpbmtlZCBpbnRvIGFub3RoZXIgcHJvZ3JhbS4pCisrCisrVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKytNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKytZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorK2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KKyt0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisrQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKworKy8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIGlmIHlvdSBsaW5rIHRoaXMgbGlicmFyeSB3aXRoIG90aGVyIGZpbGVzLAorKyAgIHNvbWUgb2Ygd2hpY2ggYXJlIGNvbXBpbGVkIHdpdGggR0NDLCB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsCisrICAgdGhpcyBsaWJyYXJ5IGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUKKysgICB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysgICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5CisrICAgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gICovCisrCisrLyogVGhpcyBpbXBsZW1lbnRzIElFRUUgNzU0IGZvcm1hdCBhcml0aG1ldGljLCBidXQgZG9lcyBub3QgcHJvdmlkZSBhCisrICAgbWVjaGFuaXNtIGZvciBzZXR0aW5nIHRoZSByb3VuZGluZyBtb2RlLCBvciBmb3IgZ2VuZXJhdGluZyBvciBoYW5kbGluZworKyAgIGV4Y2VwdGlvbnMuCisrCisrICAgVGhlIG9yaWdpbmFsIGNvZGUgYnkgU3RldmUgQ2hhbWJlcmxhaW4sIGhhY2tlZCBieSBNYXJrIEVpY2hpbiBhbmQgSmltCisrICAgV2lsc29uLCBhbGwgb2YgQ3lnbnVzIFN1cHBvcnQuICAqLworKworKy8qIFRoZSBpbnRlbmRlZCB3YXkgdG8gdXNlIHRoaXMgZmlsZSBpcyB0byBtYWtlIHR3byBjb3BpZXMsIGFkZCBgI2RlZmluZSBGTE9BVCcKKysgICB0byBvbmUgY29weSwgdGhlbiBjb21waWxlIGJvdGggY29waWVzIGFuZCBhZGQgdGhlbSB0byBsaWJnY2MuYS4gICovCisrCisrI2luY2x1ZGUgInRjb25maWcuaCIKKysjaW5jbHVkZSAiY29yZXR5cGVzLmgiCisrI2luY2x1ZGUgInRtLmgiCisrI2luY2x1ZGUgImNvbmZpZy9mcC1iaXQuaCIKKysKKysvKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBjYW4gYmUgZGVmaW5lZCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIHRoaXMgZmlsZToKKysgICBGTE9BVDogSW1wbGVtZW50IGEgYGZsb2F0JywgYWthIFNGbW9kZSwgZnAgbGlicmFyeS4gIElmIHRoaXMgaXMgbm90CisrICAgICBkZWZpbmVkLCB0aGVuIHRoaXMgZmlsZSBpbXBsZW1lbnRzIGEgYGRvdWJsZScsIGFrYSBERm1vZGUsIGZwIGxpYnJhcnkuCisrICAgRkxPQVRfT05MWTogVXNlZCB3aXRoIEZMT0FULCB0byBpbXBsZW1lbnQgYSBgZmxvYXQnIG9ubHkgbGlicmFyeSwgaS5lLgorKyAgICAgZG9uJ3QgaW5jbHVkZSBmbG9hdC0+ZG91YmxlIGNvbnZlcnNpb24gd2hpY2ggcmVxdWlyZXMgdGhlIGRvdWJsZSBsaWJyYXJ5LgorKyAgICAgVGhpcyBpcyB1c2VmdWwgb25seSBmb3IgbWFjaGluZXMgd2hpY2ggY2FuJ3Qgc3VwcG9ydCBkb3VibGVzLCBlLmcuIHNvbWUKKysgICAgIDgtYml0IHByb2Nlc3NvcnMuCisrICAgQ01QdHlwZTogU3BlY2lmeSB0aGUgdHlwZSB0aGF0IGZsb2F0aW5nIHBvaW50IGNvbXBhcmVzIHNob3VsZCByZXR1cm4uCisrICAgICBUaGlzIGRlZmF1bHRzIHRvIFNJdHlwZSwgYWthIGludC4KKysgICBVU19TT0ZUV0FSRV9HT0ZBU1Q6IFRoaXMgbWFrZXMgYWxsIGVudHJ5IHBvaW50cyB1c2UgdGhlIHNhbWUgbmFtZXMgYXMgdGhlCisrICAgICBVUyBTb2Z0d2FyZSBnb0Zhc3QgbGlicmFyeS4KKysgICBfREVCVUdfQklURkxPQVQ6IFRoaXMgbWFrZXMgZGVidWdnaW5nIHRoZSBjb2RlIGEgbGl0dGxlIGVhc2llciwgYnkgYWRkaW5nCisrICAgICB0d28gaW50ZWdlcnMgdG8gdGhlIEZMT191bmlvbl90eXBlLgorKyAgIE5PX0RFTk9STUFMUzogRGlzYWJsZSBoYW5kbGluZyBvZiBkZW5vcm1hbHMuCisrICAgTk9fTkFOUzogRGlzYWJsZSBuYW4gYW5kIGluZmluaXR5IGhhbmRsaW5nCisrICAgU01BTExfTUFDSElORTogVXNlZnVsIHdoZW4gb3BlcmF0aW9ucyBvbiBRSXMgYW5kIEhJcyBhcmUgZmFzdGVyCisrICAgICB0aGFuIG9uIGFuIFNJICovCisrCisrLyogV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgZXh0ZW5kZWQgZmxvYXRzIChsb25nIGRvdWJsZXMpIG9uIG1hY2hpbmVzCisrICAgd2l0aG91dCBoYXJkd2FyZSB0byBkZWFsIHdpdGggdGhlbS4KKysKKysgICBUaGVzZSBzdHVicyBhcmUganVzdCB0byBrZWVwIHRoZSBsaW5rZXIgZnJvbSBjb21wbGFpbmluZyBhYm91dCB1bnJlc29sdmVkCisrICAgcmVmZXJlbmNlcyB3aGljaCBjYW4gYmUgcHVsbGVkIGluIGZyb20gbGliaW8gJiBsaWJzdGRjKyssIGV2ZW4gaWYgdGhlCisrICAgdXNlciBpc24ndCB1c2luZyBsb25nIGRvdWJsZXMuICBIb3dldmVyLCB0aGV5IG1heSBnZW5lcmF0ZSBhbiB1bnJlc29sdmVkCisrICAgZXh0ZXJuYWwgdG8gYWJvcnQgaWYgYWJvcnQgaXMgbm90IHVzZWQgYnkgdGhlIGZ1bmN0aW9uLCBhbmQgdGhlIHN0dWJzCisrICAgYXJlIHJlZmVyZW5jZWQgZnJvbSB3aXRoaW4gbGliYywgc2luY2UgbGliZ2NjIGdvZXMgYmVmb3JlIGFuZCBhZnRlciB0aGUKKysgICBzeXN0ZW0gbGlicmFyeS4gICovCisrCisrI2lmZGVmIERFQ0xBUkVfTElCUkFSWV9SRU5BTUVTCisrICBERUNMQVJFX0xJQlJBUllfUkVOQU1FUworKyNlbmRpZgorKworKyNpZmRlZiBFWFRFTkRFRF9GTE9BVF9TVFVCUworK2V4dGVybiB2b2lkIGFib3J0ICh2b2lkKTsKKyt2b2lkIF9fZXh0ZW5kc2Z4ZjIgKHZvaWQpIHsgYWJvcnQoKTsgfQorK3ZvaWQgX19leHRlbmRkZnhmMiAodm9pZCkgeyBhYm9ydCgpOyB9Cisrdm9pZCBfX3RydW5jeGZkZjIgKHZvaWQpIHsgYWJvcnQoKTsgfQorK3ZvaWQgX190cnVuY3hmc2YyICh2b2lkKSB7IGFib3J0KCk7IH0KKyt2b2lkIF9fZml4eGZzaSAodm9pZCkgeyBhYm9ydCgpOyB9Cisrdm9pZCBfX2Zsb2F0c2l4ZiAodm9pZCkgeyBhYm9ydCgpOyB9Cisrdm9pZCBfX2FkZHhmMyAodm9pZCkgeyBhYm9ydCgpOyB9Cisrdm9pZCBfX3N1YnhmMyAodm9pZCkgeyBhYm9ydCgpOyB9Cisrdm9pZCBfX211bHhmMyAodm9pZCkgeyBhYm9ydCgpOyB9Cisrdm9pZCBfX2RpdnhmMyAodm9pZCkgeyBhYm9ydCgpOyB9Cisrdm9pZCBfX25lZ3hmMiAodm9pZCkgeyBhYm9ydCgpOyB9Cisrdm9pZCBfX2VxeGYyICh2b2lkKSB7IGFib3J0KCk7IH0KKyt2b2lkIF9fbmV4ZjIgKHZvaWQpIHsgYWJvcnQoKTsgfQorK3ZvaWQgX19ndHhmMiAodm9pZCkgeyBhYm9ydCgpOyB9Cisrdm9pZCBfX2dleGYyICh2b2lkKSB7IGFib3J0KCk7IH0KKyt2b2lkIF9fbGV4ZjIgKHZvaWQpIHsgYWJvcnQoKTsgfQorK3ZvaWQgX19sdHhmMiAodm9pZCkgeyBhYm9ydCgpOyB9CisrCisrdm9pZCBfX2V4dGVuZHNmdGYyICh2b2lkKSB7IGFib3J0KCk7IH0KKyt2b2lkIF9fZXh0ZW5kZGZ0ZjIgKHZvaWQpIHsgYWJvcnQoKTsgfQorK3ZvaWQgX190cnVuY3RmZGYyICh2b2lkKSB7IGFib3J0KCk7IH0KKyt2b2lkIF9fdHJ1bmN0ZnNmMiAodm9pZCkgeyBhYm9ydCgpOyB9Cisrdm9pZCBfX2ZpeHRmc2kgKHZvaWQpIHsgYWJvcnQoKTsgfQorK3ZvaWQgX19mbG9hdHNpdGYgKHZvaWQpIHsgYWJvcnQoKTsgfQorK3ZvaWQgX19hZGR0ZjMgKHZvaWQpIHsgYWJvcnQoKTsgfQorK3ZvaWQgX19zdWJ0ZjMgKHZvaWQpIHsgYWJvcnQoKTsgfQorK3ZvaWQgX19tdWx0ZjMgKHZvaWQpIHsgYWJvcnQoKTsgfQorK3ZvaWQgX19kaXZ0ZjMgKHZvaWQpIHsgYWJvcnQoKTsgfQorK3ZvaWQgX19uZWd0ZjIgKHZvaWQpIHsgYWJvcnQoKTsgfQorK3ZvaWQgX19lcXRmMiAodm9pZCkgeyBhYm9ydCgpOyB9Cisrdm9pZCBfX25ldGYyICh2b2lkKSB7IGFib3J0KCk7IH0KKyt2b2lkIF9fZ3R0ZjIgKHZvaWQpIHsgYWJvcnQoKTsgfQorK3ZvaWQgX19nZXRmMiAodm9pZCkgeyBhYm9ydCgpOyB9Cisrdm9pZCBfX2xldGYyICh2b2lkKSB7IGFib3J0KCk7IH0KKyt2b2lkIF9fbHR0ZjIgKHZvaWQpIHsgYWJvcnQoKTsgfQorKyNlbHNlCS8qICFFWFRFTkRFRF9GTE9BVF9TVFVCUywgcmVzdCBvZiBmaWxlICovCisrCisrLyogSUVFRSAic3BlY2lhbCIgbnVtYmVyIHByZWRpY2F0ZXMgKi8KKysKKysjaWZkZWYgTk9fTkFOUworKworKyNkZWZpbmUgbmFuKCkgMAorKyNkZWZpbmUgaXNuYW4oeCkgMAorKyNkZWZpbmUgaXNpbmYoeCkgMAorKyNlbHNlCisrCisrI2lmICAgZGVmaW5lZCBMX3RoZW5hbl9zZgorK2NvbnN0IGZwX251bWJlcl90eXBlIF9fdGhlbmFuX3NmID0geyBDTEFTU19TTkFOLCAwLCAwLCB7KGZyYWN0eXBlKSAwfSB9OworKyNlbGlmIGRlZmluZWQgTF90aGVuYW5fZGYKKytjb25zdCBmcF9udW1iZXJfdHlwZSBfX3RoZW5hbl9kZiA9IHsgQ0xBU1NfU05BTiwgMCwgMCwgeyhmcmFjdHlwZSkgMH0gfTsKKysjZWxpZiBkZWZpbmVkIExfdGhlbmFuX3RmCisrY29uc3QgZnBfbnVtYmVyX3R5cGUgX190aGVuYW5fdGYgPSB7IENMQVNTX1NOQU4sIDAsIDAsIHsoZnJhY3R5cGUpIDB9IH07CisrI2VsaWYgZGVmaW5lZCBURkxPQVQKKytleHRlcm4gY29uc3QgZnBfbnVtYmVyX3R5cGUgX190aGVuYW5fdGY7CisrI2VsaWYgZGVmaW5lZCBGTE9BVAorK2V4dGVybiBjb25zdCBmcF9udW1iZXJfdHlwZSBfX3RoZW5hbl9zZjsKKysjZWxzZQorK2V4dGVybiBjb25zdCBmcF9udW1iZXJfdHlwZSBfX3RoZW5hbl9kZjsKKysjZW5kaWYKKysKKytJTkxJTkUKKytzdGF0aWMgZnBfbnVtYmVyX3R5cGUgKgorK25hbiAodm9pZCkKKyt7CisrICAvKiBEaXNjYXJkIHRoZSBjb25zdCBxdWFsaWZpZXIuLi4gICovCisrI2lmZGVmIFRGTE9BVAorKyAgcmV0dXJuIChmcF9udW1iZXJfdHlwZSAqKSAoJiBfX3RoZW5hbl90Zik7CisrI2VsaWYgZGVmaW5lZCBGTE9BVCAgCisrICByZXR1cm4gKGZwX251bWJlcl90eXBlICopICgmIF9fdGhlbmFuX3NmKTsKKysjZWxzZQorKyAgcmV0dXJuIChmcF9udW1iZXJfdHlwZSAqKSAoJiBfX3RoZW5hbl9kZik7CisrI2VuZGlmCisrfQorKworK0lOTElORQorK3N0YXRpYyBpbnQKKytpc25hbiAoIGZwX251bWJlcl90eXBlICogIHgpCisreworKyAgcmV0dXJuIHgtPmNsYXNzID09IENMQVNTX1NOQU4gfHwgeC0+Y2xhc3MgPT0gQ0xBU1NfUU5BTjsKKyt9CisrCisrSU5MSU5FCisrc3RhdGljIGludAorK2lzaW5mICggZnBfbnVtYmVyX3R5cGUgKiAgeCkKKyt7CisrICByZXR1cm4geC0+Y2xhc3MgPT0gQ0xBU1NfSU5GSU5JVFk7CisrfQorKworKyNlbmRpZiAvKiBOT19OQU5TICovCisrCisrSU5MSU5FCisrc3RhdGljIGludAorK2lzemVybyAoIGZwX251bWJlcl90eXBlICogIHgpCisreworKyAgcmV0dXJuIHgtPmNsYXNzID09IENMQVNTX1pFUk87CisrfQorKworK0lOTElORSAKKytzdGF0aWMgdm9pZAorK2ZsaXBfc2lnbiAoIGZwX251bWJlcl90eXBlICogIHgpCisreworKyAgeC0+c2lnbiA9ICF4LT5zaWduOworK30KKysKKytleHRlcm4gRkxPX3R5cGUgcGFja19kICggZnBfbnVtYmVyX3R5cGUgKiApOworKworKyNpZiBkZWZpbmVkKExfcGFja19kZikgfHwgZGVmaW5lZChMX3BhY2tfc2YpIHx8IGRlZmluZWQoTF9wYWNrX3RmKQorK0ZMT190eXBlCisrcGFja19kICggZnBfbnVtYmVyX3R5cGUgKiAgc3JjKQorK3sKKysgIEZMT191bmlvbl90eXBlIGRzdDsKKysgIGZyYWN0eXBlIGZyYWN0aW9uID0gc3JjLT5mcmFjdGlvbi5sbDsJLyogd2Fzbid0IHVuc2lnbmVkIGJlZm9yZT8gKi8KKysgIGludCBzaWduID0gc3JjLT5zaWduOworKyAgaW50IGV4cCA9IDA7CisrCisrICBpZiAoTEFSR0VTVF9FWFBPTkVOVF9JU19OT1JNQUwgKEZSQUNfTkJJVFMpICYmIChpc25hbiAoc3JjKSB8fCBpc2luZiAoc3JjKSkpCisrICAgIHsKKysgICAgICAvKiBXZSBjYW4ndCByZXByZXNlbnQgdGhlc2UgdmFsdWVzIGFjY3VyYXRlbHkuICBCeSB1c2luZyB0aGUKKysJIGxhcmdlc3QgcG9zc2libGUgbWFnbml0dWRlLCB3ZSBndWFyYW50ZWUgdGhhdCB0aGUgY29udmVyc2lvbgorKwkgb2YgaW5maW5pdHkgaXMgYXQgbGVhc3QgYXMgYmlnIGFzIGFueSBmaW5pdGUgbnVtYmVyLiAgKi8KKysgICAgICBleHAgPSBFWFBNQVg7CisrICAgICAgZnJhY3Rpb24gPSAoKGZyYWN0eXBlKSAxIDw8IEZSQUNCSVRTKSAtIDE7CisrICAgIH0KKysgIGVsc2UgaWYgKGlzbmFuIChzcmMpKQorKyAgICB7CisrICAgICAgZXhwID0gRVhQTUFYOworKyAgICAgIGlmIChzcmMtPmNsYXNzID09IENMQVNTX1FOQU4gfHwgMSkKKysJeworKyNpZmRlZiBRVUlFVF9OQU5fTkVHQVRFRAorKwkgIGZyYWN0aW9uIHw9IFFVSUVUX05BTiAtIDE7CisrI2Vsc2UKKysJICBmcmFjdGlvbiB8PSBRVUlFVF9OQU47CisrI2VuZGlmCisrCX0KKysgICAgfQorKyAgZWxzZSBpZiAoaXNpbmYgKHNyYykpCisrICAgIHsKKysgICAgICBleHAgPSBFWFBNQVg7CisrICAgICAgZnJhY3Rpb24gPSAwOworKyAgICB9CisrICBlbHNlIGlmIChpc3plcm8gKHNyYykpCisrICAgIHsKKysgICAgICBleHAgPSAwOworKyAgICAgIGZyYWN0aW9uID0gMDsKKysgICAgfQorKyAgZWxzZSBpZiAoZnJhY3Rpb24gPT0gMCkKKysgICAgeworKyAgICAgIGV4cCA9IDA7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGlmIChzcmMtPm5vcm1hbF9leHAgPCBOT1JNQUxfRVhQTUlOKQorKwl7CisrI2lmZGVmIE5PX0RFTk9STUFMUworKwkgIC8qIEdvIHN0cmFpZ2h0IHRvIGEgemVybyByZXByZXNlbnRhdGlvbiBpZiBkZW5vcm1hbHMgYXJlIG5vdAorKyAJICAgICBzdXBwb3J0ZWQuICBUaGUgZGVub3JtYWwgaGFuZGxpbmcgd291bGQgYmUgaGFybWxlc3MgYnV0CisrIAkgICAgIGlzbid0IHVubmVjZXNzYXJ5LiAgKi8KKysJICBleHAgPSAwOworKwkgIGZyYWN0aW9uID0gMDsKKysjZWxzZSAvKiBOT19ERU5PUk1BTFMgKi8KKysJICAvKiBUaGlzIG51bWJlcidzIGV4cG9uZW50IGlzIHRvbyBsb3cgdG8gZml0IGludG8gdGhlIGJpdHMKKysJICAgICBhdmFpbGFibGUgaW4gdGhlIG51bWJlciwgc28gd2UnbGwgc3RvcmUgMCBpbiB0aGUgZXhwb25lbnQgYW5kCisrCSAgICAgc2hpZnQgdGhlIGZyYWN0aW9uIHRvIHRoZSByaWdodCB0byBtYWtlIHVwIGZvciBpdC4gICovCisrCisrCSAgaW50IHNoaWZ0ID0gTk9STUFMX0VYUE1JTiAtIHNyYy0+bm9ybWFsX2V4cDsKKysKKysJICBleHAgPSAwOworKworKwkgIGlmIChzaGlmdCA+IEZSQUNfTkJJVFMgLSBOR0FSRFMpCisrCSAgICB7CisrCSAgICAgIC8qIE5vIHBvaW50IHNoaWZ0aW5nLCBzaW5jZSBpdCdzIG1vcmUgdGhhdCA2NCBvdXQuICAqLworKwkgICAgICBmcmFjdGlvbiA9IDA7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBpbnQgbG93Yml0ID0gKGZyYWN0aW9uICYgKCgoZnJhY3R5cGUpMSA8PCBzaGlmdCkgLSAxKSkgPyAxIDogMDsKKysJICAgICAgZnJhY3Rpb24gPSAoZnJhY3Rpb24gPj4gc2hpZnQpIHwgbG93Yml0OworKwkgICAgfQorKwkgIGlmICgoZnJhY3Rpb24gJiBHQVJETUFTSykgPT0gR0FSRE1TQikKKysJICAgIHsKKysJICAgICAgaWYgKChmcmFjdGlvbiAmICgxIDw8IE5HQVJEUykpKQorKwkJZnJhY3Rpb24gKz0gR0FSRFJPVU5EICsgMTsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIC8qIEFkZCB0byB0aGUgZ3VhcmRzIHRvIHJvdW5kIHVwLiAgKi8KKysJICAgICAgZnJhY3Rpb24gKz0gR0FSRFJPVU5EOworKwkgICAgfQorKwkgIC8qIFBlcmhhcHMgdGhlIHJvdW5kaW5nIG1lYW5zIHdlIG5vdyBuZWVkIHRvIGNoYW5nZSB0aGUKKysgICAgICAgICAgICAgZXhwb25lbnQsIGJlY2F1c2UgdGhlIGZyYWN0aW9uIGlzIG5vIGxvbmdlciBkZW5vcm1hbC4gICovCisrCSAgaWYgKGZyYWN0aW9uID49IElNUExJQ0lUXzEpCisrCSAgICB7CisrCSAgICAgIGV4cCArPSAxOworKwkgICAgfQorKwkgIGZyYWN0aW9uID4+PSBOR0FSRFM7CisrI2VuZGlmIC8qIE5PX0RFTk9STUFMUyAqLworKwl9CisrICAgICAgZWxzZSBpZiAoIUxBUkdFU1RfRVhQT05FTlRfSVNfTk9STUFMIChGUkFDX05CSVRTKQorKwkgICAgICAgJiYgc3JjLT5ub3JtYWxfZXhwID4gRVhQQklBUykKKysJeworKwkgIGV4cCA9IEVYUE1BWDsKKysJICBmcmFjdGlvbiA9IDA7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICBleHAgPSBzcmMtPm5vcm1hbF9leHAgKyBFWFBCSUFTOworKwkgIGlmICghUk9VTkRfVE9XQVJEU19aRVJPKQorKwkgICAgeworKwkgICAgICAvKiBJRiB0aGUgZ2FyZCBiaXRzIGFyZSB0aGUgYWxsIHplcm8sIGJ1dCB0aGUgZmlyc3QsIHRoZW4gd2UncmUKKysJCSBoYWxmIHdheSBiZXR3ZWVuIHR3byBudW1iZXJzLCBjaG9vc2UgdGhlIG9uZSB3aGljaCBtYWtlcyB0aGUKKysJCSBsc2Igb2YgdGhlIGFuc3dlciAwLiAgKi8KKysJICAgICAgaWYgKChmcmFjdGlvbiAmIEdBUkRNQVNLKSA9PSBHQVJETVNCKQorKwkJeworKwkJICBpZiAoZnJhY3Rpb24gJiAoMSA8PCBOR0FSRFMpKQorKwkJICAgIGZyYWN0aW9uICs9IEdBUkRST1VORCArIDE7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgLyogQWRkIGEgb25lIHRvIHRoZSBndWFyZHMgdG8gcm91bmQgdXAgKi8KKysJCSAgZnJhY3Rpb24gKz0gR0FSRFJPVU5EOworKwkJfQorKwkgICAgICBpZiAoZnJhY3Rpb24gPj0gSU1QTElDSVRfMikKKysJCXsKKysJCSAgZnJhY3Rpb24gPj49IDE7CisrCQkgIGV4cCArPSAxOworKwkJfQorKwkgICAgfQorKwkgIGZyYWN0aW9uID4+PSBOR0FSRFM7CisrCisrCSAgaWYgKExBUkdFU1RfRVhQT05FTlRfSVNfTk9STUFMIChGUkFDX05CSVRTKSAmJiBleHAgPiBFWFBNQVgpCisrCSAgICB7CisrCSAgICAgIC8qIFNhdHVyYXRlIG9uIG92ZXJmbG93LiAgKi8KKysJICAgICAgZXhwID0gRVhQTUFYOworKwkgICAgICBmcmFjdGlvbiA9ICgoZnJhY3R5cGUpIDEgPDwgRlJBQ0JJVFMpIC0gMTsKKysJICAgIH0KKysJfQorKyAgICB9CisrCisrICAvKiBXZSBwcmV2aW91c2x5IHVzZWQgYml0ZmllbGRzIHRvIHN0b3JlIHRoZSBudW1iZXIsIGJ1dCB0aGlzIGRvZXNuJ3QKKysgICAgIGhhbmRsZSBsaXR0bGUvYmlnIGVuZGlhbiBzeXN0ZW1zIGNvbnZlbmllbnRseSwgc28gdXNlIHNoaWZ0cyBhbmQKKysgICAgIG1hc2tzICovCisrI2lmZGVmIEZMT0FUX0JJVF9PUkRFUl9NSVNNQVRDSAorKyAgZHN0LmJpdHMuZnJhY3Rpb24gPSBmcmFjdGlvbjsKKysgIGRzdC5iaXRzLmV4cCA9IGV4cDsKKysgIGRzdC5iaXRzLnNpZ24gPSBzaWduOworKyNlbHNlCisrIyBpZiBkZWZpbmVkIFRGTE9BVCAmJiBkZWZpbmVkIEhBTEZGUkFDQklUUworKyB7CisrICAgaGFsZmZyYWN0eXBlIGhpZ2gsIGxvdywgdW5pdHk7CisrICAgaW50IGxvd3NpZ24sIGxvd2V4cDsKKysKKysgICB1bml0eSA9IChoYWxmZnJhY3R5cGUpIDEgPDwgSEFMRkZSQUNCSVRTOworKworKyAgIC8qIFNldCBISUdIIHRvIHRoZSBoaWdoIGRvdWJsZSdzIHNpZ25pZmljYW5kLCBtYXNraW5nIG91dCB0aGUgaW1wbGljaXQgMS4KKysgICAgICBTZXQgTE9XIHRvIHRoZSBsb3cgZG91YmxlJ3MgZnVsbCBzaWduaWZpY2FuZC4gICovCisrICAgaGlnaCA9IChmcmFjdGlvbiA+PiAoRlJBQ0JJVFMgLSBIQUxGRlJBQ0JJVFMpKSAmICh1bml0eSAtIDEpOworKyAgIGxvdyA9IGZyYWN0aW9uICYgKHVuaXR5ICogMiAtIDEpOworKworKyAgIC8qIEdldCB0aGUgaW5pdGlhbCBzaWduIGFuZCBleHBvbmVudCBvZiB0aGUgbG93IGRvdWJsZS4gICovCisrICAgbG93ZXhwID0gZXhwIC0gSEFMRkZSQUNCSVRTIC0gMTsKKysgICBsb3dzaWduID0gc2lnbjsKKysKKysgICAvKiBISUdIIHNob3VsZCBiZSByb3VuZGVkIGxpa2UgYSBub3JtYWwgZG91YmxlLCBtYWtpbmcgfExPV3wgPD0KKysgICAgICAwLjUgVUxQIG9mIEhJR0guICBBc3N1bWUgcm91bmQtdG8tbmVhcmVzdC4gICovCisrICAgaWYgKGV4cCA8IEVYUE1BWCkKKysgICAgIGlmIChsb3cgPiB1bml0eSB8fCAobG93ID09IHVuaXR5ICYmIChoaWdoICYgMSkgPT0gMSkpCisrICAgICAgIHsKKysJIC8qIFJvdW5kIEhJR0ggdXAgYW5kIGFkanVzdCBMT1cgdG8gbWF0Y2guICAqLworKwkgaGlnaCsrOworKwkgaWYgKGhpZ2ggPT0gdW5pdHkpCisrCSAgIHsKKysJICAgICAvKiBNYXkgbWFrZSBpdCBpbmZpbml0ZSwgYnV0IHRoYXQncyBPSy4gICovCisrCSAgICAgaGlnaCA9IDA7CisrCSAgICAgZXhwKys7CisrCSAgIH0KKysJIGxvdyA9IHVuaXR5ICogMiAtIGxvdzsKKysJIGxvd3NpZ24gXj0gMTsKKysgICAgICAgfQorKworKyAgIGhpZ2ggfD0gKGhhbGZmcmFjdHlwZSkgZXhwIDw8IEhBTEZGUkFDQklUUzsKKysgICBoaWdoIHw9IChoYWxmZnJhY3R5cGUpIHNpZ24gPDwgKEhBTEZGUkFDQklUUyArIEVYUEJJVFMpOworKworKyAgIGlmIChleHAgPT0gRVhQTUFYIHx8IGV4cCA9PSAwIHx8IGxvdyA9PSAwKQorKyAgICAgbG93ID0gMDsKKysgICBlbHNlCisrICAgICB7CisrICAgICAgIHdoaWxlIChsb3dleHAgPiAwICYmIGxvdyA8IHVuaXR5KQorKwkgeworKwkgICBsb3cgPDw9IDE7CisrCSAgIGxvd2V4cC0tOworKwkgfQorKworKyAgICAgICBpZiAobG93ZXhwIDw9IDApCisrCSB7CisrCSAgIGhhbGZmcmFjdHlwZSByb3VuZG1zYiwgcm91bmQ7CisrCSAgIGludCBzaGlmdDsKKysKKysJICAgc2hpZnQgPSAxIC0gbG93ZXhwOworKwkgICByb3VuZG1zYiA9ICgxIDw8IChzaGlmdCAtIDEpKTsKKysJICAgcm91bmQgPSBsb3cgJiAoKHJvdW5kbXNiIDw8IDEpIC0gMSk7CisrCisrCSAgIGxvdyA+Pj0gc2hpZnQ7CisrCSAgIGxvd2V4cCA9IDA7CisrCisrCSAgIGlmIChyb3VuZCA+IHJvdW5kbXNiIHx8IChyb3VuZCA9PSByb3VuZG1zYiAmJiAobG93ICYgMSkgPT0gMSkpCisrCSAgICAgeworKwkgICAgICAgbG93Kys7CisrCSAgICAgICBpZiAobG93ID09IHVuaXR5KQorKwkJIC8qIExPVyByb3VuZHMgdXAgdG8gdGhlIHNtYWxsZXN0IG5vcm1hbCBudW1iZXIuICAqLworKwkJIGxvd2V4cCsrOworKwkgICAgIH0KKysJIH0KKysKKysgICAgICAgbG93ICY9IHVuaXR5IC0gMTsKKysgICAgICAgbG93IHw9IChoYWxmZnJhY3R5cGUpIGxvd2V4cCA8PCBIQUxGRlJBQ0JJVFM7CisrICAgICAgIGxvdyB8PSAoaGFsZmZyYWN0eXBlKSBsb3dzaWduIDw8IChIQUxGRlJBQ0JJVFMgKyBFWFBCSVRTKTsKKysgICAgIH0KKysgICBkc3QudmFsdWVfcmF3ID0gKChmcmFjdHlwZSkgaGlnaCA8PCBIQUxGU0hJRlQpIHwgbG93OworKyB9CisrIyBlbHNlCisrICBkc3QudmFsdWVfcmF3ID0gZnJhY3Rpb24gJiAoKCgoZnJhY3R5cGUpMSkgPDwgRlJBQ0JJVFMpIC0gKGZyYWN0eXBlKTEpOworKyAgZHN0LnZhbHVlX3JhdyB8PSAoKGZyYWN0eXBlKSAoZXhwICYgKCgxIDw8IEVYUEJJVFMpIC0gMSkpKSA8PCBGUkFDQklUUzsKKysgIGRzdC52YWx1ZV9yYXcgfD0gKChmcmFjdHlwZSkgKHNpZ24gJiAxKSkgPDwgKEZSQUNCSVRTIHwgRVhQQklUUyk7CisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpZiBkZWZpbmVkKEZMT0FUX1dPUkRfT1JERVJfTUlTTUFUQ0gpICYmICFkZWZpbmVkKEZMT0FUKQorKyNpZmRlZiBURkxPQVQKKysgIHsKKysgICAgcXJ0cmZyYWN0eXBlIHRtcDEgPSBkc3Qud29yZHNbMF07CisrICAgIHFydHJmcmFjdHlwZSB0bXAyID0gZHN0LndvcmRzWzFdOworKyAgICBkc3Qud29yZHNbMF0gPSBkc3Qud29yZHNbM107CisrICAgIGRzdC53b3Jkc1sxXSA9IGRzdC53b3Jkc1syXTsKKysgICAgZHN0LndvcmRzWzJdID0gdG1wMjsKKysgICAgZHN0LndvcmRzWzNdID0gdG1wMTsKKysgIH0KKysjZWxzZQorKyAgeworKyAgICBoYWxmZnJhY3R5cGUgdG1wID0gZHN0LndvcmRzWzBdOworKyAgICBkc3Qud29yZHNbMF0gPSBkc3Qud29yZHNbMV07CisrICAgIGRzdC53b3Jkc1sxXSA9IHRtcDsKKysgIH0KKysjZW5kaWYKKysjZW5kaWYKKysKKysgIHJldHVybiBkc3QudmFsdWU7CisrfQorKyNlbmRpZgorKworKyNpZiBkZWZpbmVkKExfdW5wYWNrX2RmKSB8fCBkZWZpbmVkKExfdW5wYWNrX3NmKSB8fCBkZWZpbmVkKExfdW5wYWNrX3RmKQorK3ZvaWQKKyt1bnBhY2tfZCAoRkxPX3VuaW9uX3R5cGUgKiBzcmMsIGZwX251bWJlcl90eXBlICogZHN0KQorK3sKKysgIC8qIFdlIHByZXZpb3VzbHkgdXNlZCBiaXRmaWVsZHMgdG8gc3RvcmUgdGhlIG51bWJlciwgYnV0IHRoaXMgZG9lc24ndAorKyAgICAgaGFuZGxlIGxpdHRsZS9iaWcgZW5kaWFuIHN5c3RlbXMgY29udmVuaWVudGx5LCBzbyB1c2Ugc2hpZnRzIGFuZAorKyAgICAgbWFza3MgKi8KKysgIGZyYWN0eXBlIGZyYWN0aW9uOworKyAgaW50IGV4cDsKKysgIGludCBzaWduOworKworKyNpZiBkZWZpbmVkKEZMT0FUX1dPUkRfT1JERVJfTUlTTUFUQ0gpICYmICFkZWZpbmVkKEZMT0FUKQorKyAgRkxPX3VuaW9uX3R5cGUgc3dhcHBlZDsKKysKKysjaWZkZWYgVEZMT0FUCisrICBzd2FwcGVkLndvcmRzWzBdID0gc3JjLT53b3Jkc1szXTsKKysgIHN3YXBwZWQud29yZHNbMV0gPSBzcmMtPndvcmRzWzJdOworKyAgc3dhcHBlZC53b3Jkc1syXSA9IHNyYy0+d29yZHNbMV07CisrICBzd2FwcGVkLndvcmRzWzNdID0gc3JjLT53b3Jkc1swXTsKKysjZWxzZQorKyAgc3dhcHBlZC53b3Jkc1swXSA9IHNyYy0+d29yZHNbMV07CisrICBzd2FwcGVkLndvcmRzWzFdID0gc3JjLT53b3Jkc1swXTsKKysjZW5kaWYKKysgIHNyYyA9ICZzd2FwcGVkOworKyNlbmRpZgorKyAgCisrI2lmZGVmIEZMT0FUX0JJVF9PUkRFUl9NSVNNQVRDSAorKyAgZnJhY3Rpb24gPSBzcmMtPmJpdHMuZnJhY3Rpb247CisrICBleHAgPSBzcmMtPmJpdHMuZXhwOworKyAgc2lnbiA9IHNyYy0+Yml0cy5zaWduOworKyNlbHNlCisrIyBpZiBkZWZpbmVkIFRGTE9BVCAmJiBkZWZpbmVkIEhBTEZGUkFDQklUUworKyB7CisrICAgaGFsZmZyYWN0eXBlIGhpZ2gsIGxvdzsKKysgICAKKysgICBoaWdoID0gc3JjLT52YWx1ZV9yYXcgPj4gSEFMRlNISUZUOworKyAgIGxvdyA9IHNyYy0+dmFsdWVfcmF3ICYgKCgoZnJhY3R5cGUpMSA8PCBIQUxGU0hJRlQpIC0gMSk7CisrCisrICAgZnJhY3Rpb24gPSBoaWdoICYgKCgoKGZyYWN0eXBlKTEpIDw8IEhBTEZGUkFDQklUUykgLSAxKTsKKysgICBmcmFjdGlvbiA8PD0gRlJBQ0JJVFMgLSBIQUxGRlJBQ0JJVFM7CisrICAgZXhwID0gKChpbnQpKGhpZ2ggPj4gSEFMRkZSQUNCSVRTKSkgJiAoKDEgPDwgRVhQQklUUykgLSAxKTsKKysgICBzaWduID0gKChpbnQpKGhpZ2ggPj4gKCgoSEFMRkZSQUNCSVRTICsgRVhQQklUUykpKSkpICYgMTsKKysKKysgICBpZiAoZXhwICE9IEVYUE1BWCAmJiBleHAgIT0gMCAmJiBsb3cgIT0gMCkKKysgICAgIHsKKysgICAgICAgaW50IGxvd2V4cCA9ICgoaW50KShsb3cgPj4gSEFMRkZSQUNCSVRTKSkgJiAoKDEgPDwgRVhQQklUUykgLSAxKTsKKysgICAgICAgaW50IGxvd3NpZ24gPSAoKGludCkobG93ID4+ICgoKEhBTEZGUkFDQklUUyArIEVYUEJJVFMpKSkpKSAmIDE7CisrICAgICAgIGludCBzaGlmdDsKKysgICAgICAgZnJhY3R5cGUgeGxvdzsKKysKKysgICAgICAgeGxvdyA9IGxvdyAmICgoKChmcmFjdHlwZSkxKSA8PCBIQUxGRlJBQ0JJVFMpIC0gMSk7CisrICAgICAgIGlmIChsb3dleHApCisrCSB4bG93IHw9ICgoKGhhbGZmcmFjdHlwZSkxKSA8PCBIQUxGRlJBQ0JJVFMpOworKyAgICAgICBlbHNlCisrCSBsb3dleHAgPSAxOworKyAgICAgICBzaGlmdCA9IChGUkFDQklUUyAtIEhBTEZGUkFDQklUUykgLSAoZXhwIC0gbG93ZXhwKTsKKysgICAgICAgaWYgKHNoaWZ0ID4gMCkKKysJIHhsb3cgPDw9IHNoaWZ0OworKyAgICAgICBlbHNlIGlmIChzaGlmdCA8IDApCisrCSB4bG93ID4+PSAtc2hpZnQ7CisrICAgICAgIGlmIChzaWduID09IGxvd3NpZ24pCisrCSBmcmFjdGlvbiArPSB4bG93OworKyAgICAgICBlbHNlIGlmIChmcmFjdGlvbiA+PSB4bG93KQorKwkgZnJhY3Rpb24gLT0geGxvdzsKKysgICAgICAgZWxzZQorKwkgeworKwkgICAvKiBUaGUgaGlnaCBwYXJ0IGlzIGEgcG93ZXIgb2YgdHdvIGJ1dCB0aGUgZnVsbCBudW1iZXIgaXMgbG93ZXIuCisrCSAgICAgIFRoaXMgY29kZSB3aWxsIGxlYXZlIHRoZSBpbXBsaWNpdCAxIGluIEZSQUNUSU9OLCBidXQgd2UnZAorKwkgICAgICBoYXZlIGFkZGVkIHRoYXQgYmVsb3cgYW55d2F5LiAgKi8KKysJICAgZnJhY3Rpb24gPSAoKChmcmFjdHlwZSkgMSA8PCBGUkFDQklUUykgLSB4bG93KSA8PCAxOworKwkgICBleHAtLTsKKysJIH0KKysgICAgIH0KKysgfQorKyMgZWxzZQorKyAgZnJhY3Rpb24gPSBzcmMtPnZhbHVlX3JhdyAmICgoKChmcmFjdHlwZSkxKSA8PCBGUkFDQklUUykgLSAxKTsKKysgIGV4cCA9ICgoaW50KShzcmMtPnZhbHVlX3JhdyA+PiBGUkFDQklUUykpICYgKCgxIDw8IEVYUEJJVFMpIC0gMSk7CisrICBzaWduID0gKChpbnQpKHNyYy0+dmFsdWVfcmF3ID4+IChGUkFDQklUUyArIEVYUEJJVFMpKSkgJiAxOworKyMgZW5kaWYKKysjZW5kaWYKKysKKysgIGRzdC0+c2lnbiA9IHNpZ247CisrICBpZiAoZXhwID09IDApCisrICAgIHsKKysgICAgICAvKiBIbW0uICBMb29rcyBsaWtlIDAgKi8KKysgICAgICBpZiAoZnJhY3Rpb24gPT0gMAorKyNpZmRlZiBOT19ERU5PUk1BTFMKKysJICB8fCAxCisrI2VuZGlmCisrCSAgKQorKwl7CisrCSAgLyogdGFzdGVzIGxpa2UgemVybyAqLworKwkgIGRzdC0+Y2xhc3MgPSBDTEFTU19aRVJPOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLyogWmVybyBleHBvbmVudCB3aXRoIG5vbnplcm8gZnJhY3Rpb24gLSBpdCdzIGRlbm9ybWFsaXplZCwKKysJICAgICBzbyB0aGVyZSBpc24ndCBhIGxlYWRpbmcgaW1wbGljaXQgb25lIC0gd2UnbGwgc2hpZnQgaXQgc28KKysJICAgICBpdCBnZXRzIG9uZS4gICovCisrCSAgZHN0LT5ub3JtYWxfZXhwID0gZXhwIC0gRVhQQklBUyArIDE7CisrCSAgZnJhY3Rpb24gPDw9IE5HQVJEUzsKKysKKysJICBkc3QtPmNsYXNzID0gQ0xBU1NfTlVNQkVSOworKyNpZiAxCisrCSAgd2hpbGUgKGZyYWN0aW9uIDwgSU1QTElDSVRfMSkKKysJICAgIHsKKysJICAgICAgZnJhY3Rpb24gPDw9IDE7CisrCSAgICAgIGRzdC0+bm9ybWFsX2V4cC0tOworKwkgICAgfQorKyNlbmRpZgorKwkgIGRzdC0+ZnJhY3Rpb24ubGwgPSBmcmFjdGlvbjsKKysJfQorKyAgICB9CisrICBlbHNlIGlmICghTEFSR0VTVF9FWFBPTkVOVF9JU19OT1JNQUwgKEZSQUNfTkJJVFMpICYmIGV4cCA9PSBFWFBNQVgpCisrICAgIHsKKysgICAgICAvKiBIdWdlIGV4cG9uZW50Ki8KKysgICAgICBpZiAoZnJhY3Rpb24gPT0gMCkKKysJeworKwkgIC8qIEF0dGFjaGVkIHRvIGEgemVybyBmcmFjdGlvbiAtIG1lYW5zIGluZmluaXR5ICovCisrCSAgZHN0LT5jbGFzcyA9IENMQVNTX0lORklOSVRZOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLyogTm9uemVybyBmcmFjdGlvbiwgbWVhbnMgbmFuICovCisrI2lmZGVmIFFVSUVUX05BTl9ORUdBVEVECisrCSAgaWYgKChmcmFjdGlvbiAmIFFVSUVUX05BTikgPT0gMCkKKysjZWxzZQorKwkgIGlmIChmcmFjdGlvbiAmIFFVSUVUX05BTikKKysjZW5kaWYKKysJICAgIHsKKysJICAgICAgZHN0LT5jbGFzcyA9IENMQVNTX1FOQU47CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBkc3QtPmNsYXNzID0gQ0xBU1NfU05BTjsKKysJICAgIH0KKysJICAvKiBLZWVwIHRoZSBmcmFjdGlvbiBwYXJ0IGFzIHRoZSBuYW4gbnVtYmVyICovCisrCSAgZHN0LT5mcmFjdGlvbi5sbCA9IGZyYWN0aW9uOworKwl9CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIC8qIE5vdGhpbmcgc3RyYW5nZSBhYm91dCB0aGlzIG51bWJlciAqLworKyAgICAgIGRzdC0+bm9ybWFsX2V4cCA9IGV4cCAtIEVYUEJJQVM7CisrICAgICAgZHN0LT5jbGFzcyA9IENMQVNTX05VTUJFUjsKKysgICAgICBkc3QtPmZyYWN0aW9uLmxsID0gKGZyYWN0aW9uIDw8IE5HQVJEUykgfCBJTVBMSUNJVF8xOworKyAgICB9CisrfQorKyNlbmRpZiAvKiBMX3VucGFja19kZiB8fCBMX3VucGFja19zZiAqLworKworKyNpZiBkZWZpbmVkKExfYWRkc3ViX3NmKSB8fCBkZWZpbmVkKExfYWRkc3ViX2RmKSB8fCBkZWZpbmVkKExfYWRkc3ViX3RmKQorK3N0YXRpYyBmcF9udW1iZXJfdHlwZSAqCisrX2ZwYWRkX3BhcnRzIChmcF9udW1iZXJfdHlwZSAqIGEsCisrCSAgICAgIGZwX251bWJlcl90eXBlICogYiwKKysJICAgICAgZnBfbnVtYmVyX3R5cGUgKiB0bXApCisreworKyAgaW50ZnJhYyB0ZnJhY3Rpb247CisrCisrICAvKiBQdXQgY29tbW9ubHkgdXNlZCBmaWVsZHMgaW4gbG9jYWwgdmFyaWFibGVzLiAgKi8KKysgIGludCBhX25vcm1hbF9leHA7CisrICBpbnQgYl9ub3JtYWxfZXhwOworKyAgZnJhY3R5cGUgYV9mcmFjdGlvbjsKKysgIGZyYWN0eXBlIGJfZnJhY3Rpb247CisrCisrICBpZiAoaXNuYW4gKGEpKQorKyAgICB7CisrICAgICAgcmV0dXJuIGE7CisrICAgIH0KKysgIGlmIChpc25hbiAoYikpCisrICAgIHsKKysgICAgICByZXR1cm4gYjsKKysgICAgfQorKyAgaWYgKGlzaW5mIChhKSkKKysgICAgeworKyAgICAgIC8qIEFkZGluZyBpbmZpbml0aWVzIHdpdGggb3Bwb3NpdGUgc2lnbnMgeWllbGRzIGEgTmFOLiAgKi8KKysgICAgICBpZiAoaXNpbmYgKGIpICYmIGEtPnNpZ24gIT0gYi0+c2lnbikKKysJcmV0dXJuIG5hbiAoKTsKKysgICAgICByZXR1cm4gYTsKKysgICAgfQorKyAgaWYgKGlzaW5mIChiKSkKKysgICAgeworKyAgICAgIHJldHVybiBiOworKyAgICB9CisrICBpZiAoaXN6ZXJvIChiKSkKKysgICAgeworKyAgICAgIGlmIChpc3plcm8gKGEpKQorKwl7CisrCSAgKnRtcCA9ICphOworKwkgIHRtcC0+c2lnbiA9IGEtPnNpZ24gJiBiLT5zaWduOworKwkgIHJldHVybiB0bXA7CisrCX0KKysgICAgICByZXR1cm4gYTsKKysgICAgfQorKyAgaWYgKGlzemVybyAoYSkpCisrICAgIHsKKysgICAgICByZXR1cm4gYjsKKysgICAgfQorKworKyAgLyogR290IHR3byBudW1iZXJzLiBzaGlmdCB0aGUgc21hbGxlciBhbmQgaW5jcmVtZW50IHRoZSBleHBvbmVudCB0aWxsCisrICAgICB0aGV5J3JlIHRoZSBzYW1lICovCisrICB7CisrICAgIGludCBkaWZmOworKworKyAgICBhX25vcm1hbF9leHAgPSBhLT5ub3JtYWxfZXhwOworKyAgICBiX25vcm1hbF9leHAgPSBiLT5ub3JtYWxfZXhwOworKyAgICBhX2ZyYWN0aW9uID0gYS0+ZnJhY3Rpb24ubGw7CisrICAgIGJfZnJhY3Rpb24gPSBiLT5mcmFjdGlvbi5sbDsKKysKKysgICAgZGlmZiA9IGFfbm9ybWFsX2V4cCAtIGJfbm9ybWFsX2V4cDsKKysKKysgICAgaWYgKGRpZmYgPCAwKQorKyAgICAgIGRpZmYgPSAtZGlmZjsKKysgICAgaWYgKGRpZmYgPCBGUkFDX05CSVRTKQorKyAgICAgIHsKKysJLyogPz8/IFRoaXMgZG9lcyBzaGlmdHMgb25lIGJpdCBhdCBhIHRpbWUuICBPcHRpbWl6ZS4gICovCisrCXdoaWxlIChhX25vcm1hbF9leHAgPiBiX25vcm1hbF9leHApCisrCSAgeworKwkgICAgYl9ub3JtYWxfZXhwKys7CisrCSAgICBMU0hJRlQgKGJfZnJhY3Rpb24pOworKwkgIH0KKysJd2hpbGUgKGJfbm9ybWFsX2V4cCA+IGFfbm9ybWFsX2V4cCkKKysJICB7CisrCSAgICBhX25vcm1hbF9leHArKzsKKysJICAgIExTSElGVCAoYV9mcmFjdGlvbik7CisrCSAgfQorKyAgICAgIH0KKysgICAgZWxzZQorKyAgICAgIHsKKysJLyogU29tZXRoaW5ncydzIHVwLi4gY2hvb3NlIHRoZSBiaWdnZXN0ICovCisrCWlmIChhX25vcm1hbF9leHAgPiBiX25vcm1hbF9leHApCisrCSAgeworKwkgICAgYl9ub3JtYWxfZXhwID0gYV9ub3JtYWxfZXhwOworKwkgICAgYl9mcmFjdGlvbiA9IDA7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgYV9ub3JtYWxfZXhwID0gYl9ub3JtYWxfZXhwOworKwkgICAgYV9mcmFjdGlvbiA9IDA7CisrCSAgfQorKyAgICAgIH0KKysgIH0KKysKKysgIGlmIChhLT5zaWduICE9IGItPnNpZ24pCisrICAgIHsKKysgICAgICBpZiAoYS0+c2lnbikKKysJeworKwkgIHRmcmFjdGlvbiA9IC1hX2ZyYWN0aW9uICsgYl9mcmFjdGlvbjsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIHRmcmFjdGlvbiA9IGFfZnJhY3Rpb24gLSBiX2ZyYWN0aW9uOworKwl9CisrICAgICAgaWYgKHRmcmFjdGlvbiA+PSAwKQorKwl7CisrCSAgdG1wLT5zaWduID0gMDsKKysJICB0bXAtPm5vcm1hbF9leHAgPSBhX25vcm1hbF9leHA7CisrCSAgdG1wLT5mcmFjdGlvbi5sbCA9IHRmcmFjdGlvbjsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIHRtcC0+c2lnbiA9IDE7CisrCSAgdG1wLT5ub3JtYWxfZXhwID0gYV9ub3JtYWxfZXhwOworKwkgIHRtcC0+ZnJhY3Rpb24ubGwgPSAtdGZyYWN0aW9uOworKwl9CisrICAgICAgLyogYW5kIHJlbm9ybWFsaXplIGl0ICovCisrCisrICAgICAgd2hpbGUgKHRtcC0+ZnJhY3Rpb24ubGwgPCBJTVBMSUNJVF8xICYmIHRtcC0+ZnJhY3Rpb24ubGwpCisrCXsKKysJICB0bXAtPmZyYWN0aW9uLmxsIDw8PSAxOworKwkgIHRtcC0+bm9ybWFsX2V4cC0tOworKwl9CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIHRtcC0+c2lnbiA9IGEtPnNpZ247CisrICAgICAgdG1wLT5ub3JtYWxfZXhwID0gYV9ub3JtYWxfZXhwOworKyAgICAgIHRtcC0+ZnJhY3Rpb24ubGwgPSBhX2ZyYWN0aW9uICsgYl9mcmFjdGlvbjsKKysgICAgfQorKyAgdG1wLT5jbGFzcyA9IENMQVNTX05VTUJFUjsKKysgIC8qIE5vdyB0aGUgZnJhY3Rpb24gaXMgYWRkZWQsIHdlIGhhdmUgdG8gc2hpZnQgZG93biB0byByZW5vcm1hbGl6ZSB0aGUKKysgICAgIG51bWJlciAqLworKworKyAgaWYgKHRtcC0+ZnJhY3Rpb24ubGwgPj0gSU1QTElDSVRfMikKKysgICAgeworKyAgICAgIExTSElGVCAodG1wLT5mcmFjdGlvbi5sbCk7CisrICAgICAgdG1wLT5ub3JtYWxfZXhwKys7CisrICAgIH0KKysgIHJldHVybiB0bXA7CisrCisrfQorKworK0ZMT190eXBlCisrYWRkIChGTE9fdHlwZSBhcmdfYSwgRkxPX3R5cGUgYXJnX2IpCisreworKyAgZnBfbnVtYmVyX3R5cGUgYTsKKysgIGZwX251bWJlcl90eXBlIGI7CisrICBmcF9udW1iZXJfdHlwZSB0bXA7CisrICBmcF9udW1iZXJfdHlwZSAqcmVzOworKyAgRkxPX3VuaW9uX3R5cGUgYXUsIGJ1OworKworKyAgYXUudmFsdWUgPSBhcmdfYTsKKysgIGJ1LnZhbHVlID0gYXJnX2I7CisrCisrICB1bnBhY2tfZCAoJmF1LCAmYSk7CisrICB1bnBhY2tfZCAoJmJ1LCAmYik7CisrCisrICByZXMgPSBfZnBhZGRfcGFydHMgKCZhLCAmYiwgJnRtcCk7CisrCisrICByZXR1cm4gcGFja19kIChyZXMpOworK30KKysKKytGTE9fdHlwZQorK3N1YiAoRkxPX3R5cGUgYXJnX2EsIEZMT190eXBlIGFyZ19iKQorK3sKKysgIGZwX251bWJlcl90eXBlIGE7CisrICBmcF9udW1iZXJfdHlwZSBiOworKyAgZnBfbnVtYmVyX3R5cGUgdG1wOworKyAgZnBfbnVtYmVyX3R5cGUgKnJlczsKKysgIEZMT191bmlvbl90eXBlIGF1LCBidTsKKysKKysgIGF1LnZhbHVlID0gYXJnX2E7CisrICBidS52YWx1ZSA9IGFyZ19iOworKworKyAgdW5wYWNrX2QgKCZhdSwgJmEpOworKyAgdW5wYWNrX2QgKCZidSwgJmIpOworKworKyAgYi5zaWduIF49IDE7CisrCisrICByZXMgPSBfZnBhZGRfcGFydHMgKCZhLCAmYiwgJnRtcCk7CisrCisrICByZXR1cm4gcGFja19kIChyZXMpOworK30KKysjZW5kaWYgLyogTF9hZGRzdWJfc2YgfHwgTF9hZGRzdWJfZGYgKi8KKysKKysjaWYgZGVmaW5lZChMX211bF9zZikgfHwgZGVmaW5lZChMX211bF9kZikgfHwgZGVmaW5lZChMX211bF90ZikKKytzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpIGZwX251bWJlcl90eXBlICoKKytfZnBtdWxfcGFydHMgKCBmcF9udW1iZXJfdHlwZSAqICBhLAorKwkgICAgICAgZnBfbnVtYmVyX3R5cGUgKiAgYiwKKysJICAgICAgIGZwX251bWJlcl90eXBlICogdG1wKQorK3sKKysgIGZyYWN0eXBlIGxvdyA9IDA7CisrICBmcmFjdHlwZSBoaWdoID0gMDsKKysKKysgIGlmIChpc25hbiAoYSkpCisrICAgIHsKKysgICAgICBhLT5zaWduID0gYS0+c2lnbiAhPSBiLT5zaWduOworKyAgICAgIHJldHVybiBhOworKyAgICB9CisrICBpZiAoaXNuYW4gKGIpKQorKyAgICB7CisrICAgICAgYi0+c2lnbiA9IGEtPnNpZ24gIT0gYi0+c2lnbjsKKysgICAgICByZXR1cm4gYjsKKysgICAgfQorKyAgaWYgKGlzaW5mIChhKSkKKysgICAgeworKyAgICAgIGlmIChpc3plcm8gKGIpKQorKwlyZXR1cm4gbmFuICgpOworKyAgICAgIGEtPnNpZ24gPSBhLT5zaWduICE9IGItPnNpZ247CisrICAgICAgcmV0dXJuIGE7CisrICAgIH0KKysgIGlmIChpc2luZiAoYikpCisrICAgIHsKKysgICAgICBpZiAoaXN6ZXJvIChhKSkKKysJeworKwkgIHJldHVybiBuYW4gKCk7CisrCX0KKysgICAgICBiLT5zaWduID0gYS0+c2lnbiAhPSBiLT5zaWduOworKyAgICAgIHJldHVybiBiOworKyAgICB9CisrICBpZiAoaXN6ZXJvIChhKSkKKysgICAgeworKyAgICAgIGEtPnNpZ24gPSBhLT5zaWduICE9IGItPnNpZ247CisrICAgICAgcmV0dXJuIGE7CisrICAgIH0KKysgIGlmIChpc3plcm8gKGIpKQorKyAgICB7CisrICAgICAgYi0+c2lnbiA9IGEtPnNpZ24gIT0gYi0+c2lnbjsKKysgICAgICByZXR1cm4gYjsKKysgICAgfQorKworKyAgLyogQ2FsY3VsYXRlIHRoZSBtYW50aXNzYSBieSBtdWx0aXBseWluZyBib3RoIG51bWJlcnMgdG8gZ2V0IGEKKysgICAgIHR3aWNlLWFzLXdpZGUgbnVtYmVyLiAgKi8KKysgIHsKKysjaWYgZGVmaW5lZChOT19ESV9NT0RFKSB8fCBkZWZpbmVkKFRGTE9BVCkKKysgICAgeworKyAgICAgIGZyYWN0eXBlIHggPSBhLT5mcmFjdGlvbi5sbDsKKysgICAgICBmcmFjdHlwZSB5bG93ID0gYi0+ZnJhY3Rpb24ubGw7CisrICAgICAgZnJhY3R5cGUgeWhpZ2ggPSAwOworKyAgICAgIGludCBiaXQ7CisrCisrICAgICAgLyogPz8/IFRoaXMgZG9lcyBtdWx0aXBsaWVzIG9uZSBiaXQgYXQgYSB0aW1lLiAgT3B0aW1pemUuICAqLworKyAgICAgIGZvciAoYml0ID0gMDsgYml0IDwgRlJBQ19OQklUUzsgYml0KyspCisrCXsKKysJICBpbnQgY2Fycnk7CisrCisrCSAgaWYgKHggJiAxKQorKwkgICAgeworKwkgICAgICBjYXJyeSA9IChsb3cgKz0geWxvdykgPCB5bG93OworKwkgICAgICBoaWdoICs9IHloaWdoICsgY2Fycnk7CisrCSAgICB9CisrCSAgeWhpZ2ggPDw9IDE7CisrCSAgaWYgKHlsb3cgJiBGUkFDSElHSCkKKysJICAgIHsKKysJICAgICAgeWhpZ2ggfD0gMTsKKysJICAgIH0KKysJICB5bG93IDw8PSAxOworKwkgIHggPj49IDE7CisrCX0KKysgICAgfQorKyNlbGlmIGRlZmluZWQoRkxPQVQpIAorKyAgICAvKiBNdWx0aXBseWluZyB0d28gVVNJcyB0byBnZXQgYSBVREksIHdlJ3JlIHNhZmUuICAqLworKyAgICB7CisrICAgICAgVURJdHlwZSBhbnN3ZXIgPSAoVURJdHlwZSlhLT5mcmFjdGlvbi5sbCAqIChVREl0eXBlKWItPmZyYWN0aW9uLmxsOworKyAgICAgIAorKyAgICAgIGhpZ2ggPSBhbnN3ZXIgPj4gQklUU19QRVJfU0k7CisrICAgICAgbG93ID0gYW5zd2VyOworKyAgICB9CisrI2Vsc2UKKysgICAgLyogZnJhY3R5cGUgaXMgREltb2RlLCBidXQgd2UgbmVlZCB0aGUgcmVzdWx0IHRvIGJlIHR3aWNlIGFzIHdpZGUuCisrICAgICAgIEFzc3VtaW5nIGEgd2lkZW5pbmcgbXVsdGlwbHkgZnJvbSBESW1vZGUgdG8gVEltb2RlIGlzIG5vdAorKyAgICAgICBhdmFpbGFibGUsIGJ1aWxkIG9uZSBieSBoYW5kLiAgKi8KKysgICAgeworKyAgICAgIFVTSXR5cGUgbmwgPSBhLT5mcmFjdGlvbi5sbDsKKysgICAgICBVU0l0eXBlIG5oID0gYS0+ZnJhY3Rpb24ubGwgPj4gQklUU19QRVJfU0k7CisrICAgICAgVVNJdHlwZSBtbCA9IGItPmZyYWN0aW9uLmxsOworKyAgICAgIFVTSXR5cGUgbWggPSBiLT5mcmFjdGlvbi5sbCA+PiBCSVRTX1BFUl9TSTsKKysgICAgICBVREl0eXBlIHBwX2xsID0gKFVESXR5cGUpIG1sICogbmw7CisrICAgICAgVURJdHlwZSBwcF9obCA9IChVREl0eXBlKSBtaCAqIG5sOworKyAgICAgIFVESXR5cGUgcHBfbGggPSAoVURJdHlwZSkgbWwgKiBuaDsKKysgICAgICBVREl0eXBlIHBwX2hoID0gKFVESXR5cGUpIG1oICogbmg7CisrICAgICAgVURJdHlwZSByZXMyID0gMDsKKysgICAgICBVREl0eXBlIHJlczAgPSAwOworKyAgICAgIFVESXR5cGUgcHNfaGhfXyA9IHBwX2hsICsgcHBfbGg7CisrICAgICAgaWYgKHBzX2hoX18gPCBwcF9obCkKKysJcmVzMiArPSAoVURJdHlwZSkxIDw8IEJJVFNfUEVSX1NJOworKyAgICAgIHBwX2hsID0gKFVESXR5cGUpKFVTSXR5cGUpcHNfaGhfXyA8PCBCSVRTX1BFUl9TSTsKKysgICAgICByZXMwID0gcHBfbGwgKyBwcF9obDsKKysgICAgICBpZiAocmVzMCA8IHBwX2xsKQorKwlyZXMyKys7CisrICAgICAgcmVzMiArPSAocHNfaGhfXyA+PiBCSVRTX1BFUl9TSSkgKyBwcF9oaDsKKysgICAgICBoaWdoID0gcmVzMjsKKysgICAgICBsb3cgPSByZXMwOworKyAgICB9CisrI2VuZGlmCisrICB9CisrCisrICB0bXAtPm5vcm1hbF9leHAgPSBhLT5ub3JtYWxfZXhwICsgYi0+bm9ybWFsX2V4cAorKyAgICArIEZSQUNfTkJJVFMgLSAoRlJBQ0JJVFMgKyBOR0FSRFMpOworKyAgdG1wLT5zaWduID0gYS0+c2lnbiAhPSBiLT5zaWduOworKyAgd2hpbGUgKGhpZ2ggPj0gSU1QTElDSVRfMikKKysgICAgeworKyAgICAgIHRtcC0+bm9ybWFsX2V4cCsrOworKyAgICAgIGlmIChoaWdoICYgMSkKKysJeworKwkgIGxvdyA+Pj0gMTsKKysJICBsb3cgfD0gRlJBQ0hJR0g7CisrCX0KKysgICAgICBoaWdoID4+PSAxOworKyAgICB9CisrICB3aGlsZSAoaGlnaCA8IElNUExJQ0lUXzEpCisrICAgIHsKKysgICAgICB0bXAtPm5vcm1hbF9leHAtLTsKKysKKysgICAgICBoaWdoIDw8PSAxOworKyAgICAgIGlmIChsb3cgJiBGUkFDSElHSCkKKysJaGlnaCB8PSAxOworKyAgICAgIGxvdyA8PD0gMTsKKysgICAgfQorKyAgLyogcm91bmRpbmcgaXMgdHJpY2t5LiBpZiB3ZSBvbmx5IHJvdW5kIGlmIGl0IHdvbid0IG1ha2UgdXMgcm91bmQgbGF0ZXIuICAqLworKyNpZiAwCisrICBpZiAobG93ICYgRlJBQ0hJR0gyKQorKyAgICB7CisrICAgICAgaWYgKCgoaGlnaCAmIEdBUkRNQVNLKSAhPSBHQVJETVNCKQorKwkgICYmICgoKGhpZ2ggKyAxKSAmIEdBUkRNQVNLKSA9PSBHQVJETVNCKSkKKysJeworKwkgIC8qIGRvbid0IHJvdW5kLCBpdCBnZXRzIGRvbmUgYWdhaW4gbGF0ZXIuICAqLworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgaGlnaCsrOworKwl9CisrICAgIH0KKysjZW5kaWYKKysgIGlmICghUk9VTkRfVE9XQVJEU19aRVJPICYmIChoaWdoICYgR0FSRE1BU0spID09IEdBUkRNU0IpCisrICAgIHsKKysgICAgICBpZiAoaGlnaCAmICgxIDw8IE5HQVJEUykpCisrCXsKKysJICAvKiBoYWxmIHdheSwgc28gcm91bmQgdG8gZXZlbiAqLworKwkgIGhpZ2ggKz0gR0FSRFJPVU5EICsgMTsKKysJfQorKyAgICAgIGVsc2UgaWYgKGxvdykKKysJeworKwkgIC8qIGJ1dCB3ZSByZWFsbHkgd2VyZW4ndCBoYWxmIHdheSAqLworKwkgIGhpZ2ggKz0gR0FSRFJPVU5EICsgMTsKKysJfQorKyAgICB9CisrICB0bXAtPmZyYWN0aW9uLmxsID0gaGlnaDsKKysgIHRtcC0+Y2xhc3MgPSBDTEFTU19OVU1CRVI7CisrICByZXR1cm4gdG1wOworK30KKysKKytGTE9fdHlwZQorK211bHRpcGx5IChGTE9fdHlwZSBhcmdfYSwgRkxPX3R5cGUgYXJnX2IpCisreworKyAgZnBfbnVtYmVyX3R5cGUgYTsKKysgIGZwX251bWJlcl90eXBlIGI7CisrICBmcF9udW1iZXJfdHlwZSB0bXA7CisrICBmcF9udW1iZXJfdHlwZSAqcmVzOworKyAgRkxPX3VuaW9uX3R5cGUgYXUsIGJ1OworKworKyAgYXUudmFsdWUgPSBhcmdfYTsKKysgIGJ1LnZhbHVlID0gYXJnX2I7CisrCisrICB1bnBhY2tfZCAoJmF1LCAmYSk7CisrICB1bnBhY2tfZCAoJmJ1LCAmYik7CisrCisrICByZXMgPSBfZnBtdWxfcGFydHMgKCZhLCAmYiwgJnRtcCk7CisrCisrICByZXR1cm4gcGFja19kIChyZXMpOworK30KKysjZW5kaWYgLyogTF9tdWxfc2YgfHwgTF9tdWxfZGYgKi8KKysKKysjaWYgZGVmaW5lZChMX2Rpdl9zZikgfHwgZGVmaW5lZChMX2Rpdl9kZikgfHwgZGVmaW5lZChMX2Rpdl90ZikKKytzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpIGZwX251bWJlcl90eXBlICoKKytfZnBkaXZfcGFydHMgKGZwX251bWJlcl90eXBlICogYSwKKysJICAgICAgZnBfbnVtYmVyX3R5cGUgKiBiKQorK3sKKysgIGZyYWN0eXBlIGJpdDsKKysgIGZyYWN0eXBlIG51bWVyYXRvcjsKKysgIGZyYWN0eXBlIGRlbm9taW5hdG9yOworKyAgZnJhY3R5cGUgcXVvdGllbnQ7CisrCisrICBpZiAoaXNuYW4gKGEpKQorKyAgICB7CisrICAgICAgcmV0dXJuIGE7CisrICAgIH0KKysgIGlmIChpc25hbiAoYikpCisrICAgIHsKKysgICAgICByZXR1cm4gYjsKKysgICAgfQorKworKyAgYS0+c2lnbiA9IGEtPnNpZ24gXiBiLT5zaWduOworKworKyAgaWYgKGlzaW5mIChhKSB8fCBpc3plcm8gKGEpKQorKyAgICB7CisrICAgICAgaWYgKGEtPmNsYXNzID09IGItPmNsYXNzKQorKwlyZXR1cm4gbmFuICgpOworKyAgICAgIHJldHVybiBhOworKyAgICB9CisrCisrICBpZiAoaXNpbmYgKGIpKQorKyAgICB7CisrICAgICAgYS0+ZnJhY3Rpb24ubGwgPSAwOworKyAgICAgIGEtPm5vcm1hbF9leHAgPSAwOworKyAgICAgIHJldHVybiBhOworKyAgICB9CisrICBpZiAoaXN6ZXJvIChiKSkKKysgICAgeworKyAgICAgIGEtPmNsYXNzID0gQ0xBU1NfSU5GSU5JVFk7CisrICAgICAgcmV0dXJuIGE7CisrICAgIH0KKysKKysgIC8qIENhbGN1bGF0ZSB0aGUgbWFudGlzc2EgYnkgbXVsdGlwbHlpbmcgYm90aCA2NGJpdCBudW1iZXJzIHRvIGdldCBhCisrICAgICAxMjggYml0IG51bWJlciAqLworKyAgeworKyAgICAvKiBxdW90aWVudCA9CisrICAgICAgICggbnVtZXJhdG9yIC8gZGVub21pbmF0b3IpICogMl4obnVtZXJhdG9yIGV4cG9uZW50IC0gIGRlbm9taW5hdG9yIGV4cG9uZW50KQorKyAgICAgKi8KKysKKysgICAgYS0+bm9ybWFsX2V4cCA9IGEtPm5vcm1hbF9leHAgLSBiLT5ub3JtYWxfZXhwOworKyAgICBudW1lcmF0b3IgPSBhLT5mcmFjdGlvbi5sbDsKKysgICAgZGVub21pbmF0b3IgPSBiLT5mcmFjdGlvbi5sbDsKKysKKysgICAgaWYgKG51bWVyYXRvciA8IGRlbm9taW5hdG9yKQorKyAgICAgIHsKKysJLyogRnJhY3Rpb24gd2lsbCBiZSBsZXNzIHRoYW4gMS4wICovCisrCW51bWVyYXRvciAqPSAyOworKwlhLT5ub3JtYWxfZXhwLS07CisrICAgICAgfQorKyAgICBiaXQgPSBJTVBMSUNJVF8xOworKyAgICBxdW90aWVudCA9IDA7CisrICAgIC8qID8/PyBEb2VzIGRpdmlkZSBvbmUgYml0IGF0IGEgdGltZS4gIE9wdGltaXplLiAgKi8KKysgICAgd2hpbGUgKGJpdCkKKysgICAgICB7CisrCWlmIChudW1lcmF0b3IgPj0gZGVub21pbmF0b3IpCisrCSAgeworKwkgICAgcXVvdGllbnQgfD0gYml0OworKwkgICAgbnVtZXJhdG9yIC09IGRlbm9taW5hdG9yOworKwkgIH0KKysJYml0ID4+PSAxOworKwludW1lcmF0b3IgKj0gMjsKKysgICAgICB9CisrCisrICAgIGlmICghUk9VTkRfVE9XQVJEU19aRVJPICYmIChxdW90aWVudCAmIEdBUkRNQVNLKSA9PSBHQVJETVNCKQorKyAgICAgIHsKKysJaWYgKHF1b3RpZW50ICYgKDEgPDwgTkdBUkRTKSkKKysJICB7CisrCSAgICAvKiBoYWxmIHdheSwgc28gcm91bmQgdG8gZXZlbiAqLworKwkgICAgcXVvdGllbnQgKz0gR0FSRFJPVU5EICsgMTsKKysJICB9CisrCWVsc2UgaWYgKG51bWVyYXRvcikKKysJICB7CisrCSAgICAvKiBidXQgd2UgcmVhbGx5IHdlcmVuJ3QgaGFsZiB3YXksIG1vcmUgYml0cyBleGlzdCAqLworKwkgICAgcXVvdGllbnQgKz0gR0FSRFJPVU5EICsgMTsKKysJICB9CisrICAgICAgfQorKworKyAgICBhLT5mcmFjdGlvbi5sbCA9IHF1b3RpZW50OworKyAgICByZXR1cm4gKGEpOworKyAgfQorK30KKysKKytGTE9fdHlwZQorK2RpdmlkZSAoRkxPX3R5cGUgYXJnX2EsIEZMT190eXBlIGFyZ19iKQorK3sKKysgIGZwX251bWJlcl90eXBlIGE7CisrICBmcF9udW1iZXJfdHlwZSBiOworKyAgZnBfbnVtYmVyX3R5cGUgKnJlczsKKysgIEZMT191bmlvbl90eXBlIGF1LCBidTsKKysKKysgIGF1LnZhbHVlID0gYXJnX2E7CisrICBidS52YWx1ZSA9IGFyZ19iOworKworKyAgdW5wYWNrX2QgKCZhdSwgJmEpOworKyAgdW5wYWNrX2QgKCZidSwgJmIpOworKworKyAgcmVzID0gX2ZwZGl2X3BhcnRzICgmYSwgJmIpOworKworKyAgcmV0dXJuIHBhY2tfZCAocmVzKTsKKyt9CisrI2VuZGlmIC8qIExfZGl2X3NmIHx8IExfZGl2X2RmICovCisrCisrI2lmIGRlZmluZWQoTF9mcGNtcF9wYXJ0c19zZikgfHwgZGVmaW5lZChMX2ZwY21wX3BhcnRzX2RmKSBcCisrICAgIHx8IGRlZmluZWQoTF9mcGNtcF9wYXJ0c190ZikKKysvKiBhY2NvcmRpbmcgdG8gdGhlIGRlbW8sIGZwY21wIHJldHVybnMgYSBjb21wYXJpc29uIHdpdGggMC4uLiB0aHVzCisrICAgYTxiIC0+IC0xCisrICAgYT09YiAtPiAwCisrICAgYT5iIC0+ICsxCisrICovCisrCisraW50CisrX19mcGNtcF9wYXJ0cyAoZnBfbnVtYmVyX3R5cGUgKiBhLCBmcF9udW1iZXJfdHlwZSAqIGIpCisreworKyNpZiAwCisrICAvKiBlaXRoZXIgbmFuIC0+IHVub3JkZXJlZC4gTXVzdCBiZSBjaGVja2VkIG91dHNpZGUgb2YgdGhpcyByb3V0aW5lLiAgKi8KKysgIGlmIChpc25hbiAoYSkgJiYgaXNuYW4gKGIpKQorKyAgICB7CisrICAgICAgcmV0dXJuIDE7CQkJLyogc3RpbGwgdW5vcmRlcmVkISAqLworKyAgICB9CisrI2VuZGlmCisrCisrICBpZiAoaXNuYW4gKGEpIHx8IGlzbmFuIChiKSkKKysgICAgeworKyAgICAgIHJldHVybiAxOwkJCS8qIGhvdyB0byBpbmRpY2F0ZSB1bm9yZGVyZWQgY29tcGFyZT8gKi8KKysgICAgfQorKyAgaWYgKGlzaW5mIChhKSAmJiBpc2luZiAoYikpCisrICAgIHsKKysgICAgICAvKiAraW5mID4gLWluZiwgYnV0ICtpbmYgIT0gK2luZiAqLworKyAgICAgIC8qIGIgICAgXGF8ICtpbmYoMCl8IC1pbmYoMSkKKysgICAgICAgX19fX19fXCstLS0tLS0tLSstLS0tLS0tLQorKyAgICAgICAraW5mKDApfCBhPT1iKDApfCBhPGIoLTEpCisrICAgICAgIC0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0KKysgICAgICAgLWluZigxKXwgYT5iKDEpIHwgYT09YigwKQorKyAgICAgICAtLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tCisrICAgICAgIFNvIHNpbmNlIHVub3JkZXJlZCBtdXN0IGJlIG5vbnplcm8sIGp1c3QgbGluZSB1cCB0aGUgY29sdW1ucy4uLgorKyAgICAgICAqLworKyAgICAgIHJldHVybiBiLT5zaWduIC0gYS0+c2lnbjsKKysgICAgfQorKyAgLyogYnV0IG5vdCBib3RoLi4uICAqLworKyAgaWYgKGlzaW5mIChhKSkKKysgICAgeworKyAgICAgIHJldHVybiBhLT5zaWduID8gLTEgOiAxOworKyAgICB9CisrICBpZiAoaXNpbmYgKGIpKQorKyAgICB7CisrICAgICAgcmV0dXJuIGItPnNpZ24gPyAxIDogLTE7CisrICAgIH0KKysgIGlmIChpc3plcm8gKGEpICYmIGlzemVybyAoYikpCisrICAgIHsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKyAgaWYgKGlzemVybyAoYSkpCisrICAgIHsKKysgICAgICByZXR1cm4gYi0+c2lnbiA/IDEgOiAtMTsKKysgICAgfQorKyAgaWYgKGlzemVybyAoYikpCisrICAgIHsKKysgICAgICByZXR1cm4gYS0+c2lnbiA/IC0xIDogMTsKKysgICAgfQorKyAgLyogbm93IGJvdGggYXJlICJub3JtYWwiLiAgKi8KKysgIGlmIChhLT5zaWduICE9IGItPnNpZ24pCisrICAgIHsKKysgICAgICAvKiBvcHBvc2l0ZSBzaWducyAqLworKyAgICAgIHJldHVybiBhLT5zaWduID8gLTEgOiAxOworKyAgICB9CisrICAvKiBzYW1lIHNpZ247IGV4cG9uZW50cz8gKi8KKysgIGlmIChhLT5ub3JtYWxfZXhwID4gYi0+bm9ybWFsX2V4cCkKKysgICAgeworKyAgICAgIHJldHVybiBhLT5zaWduID8gLTEgOiAxOworKyAgICB9CisrICBpZiAoYS0+bm9ybWFsX2V4cCA8IGItPm5vcm1hbF9leHApCisrICAgIHsKKysgICAgICByZXR1cm4gYS0+c2lnbiA/IDEgOiAtMTsKKysgICAgfQorKyAgLyogc2FtZSBleHBvbmVudHM7IGNoZWNrIHNpemUuICAqLworKyAgaWYgKGEtPmZyYWN0aW9uLmxsID4gYi0+ZnJhY3Rpb24ubGwpCisrICAgIHsKKysgICAgICByZXR1cm4gYS0+c2lnbiA/IC0xIDogMTsKKysgICAgfQorKyAgaWYgKGEtPmZyYWN0aW9uLmxsIDwgYi0+ZnJhY3Rpb24ubGwpCisrICAgIHsKKysgICAgICByZXR1cm4gYS0+c2lnbiA/IDEgOiAtMTsKKysgICAgfQorKyAgLyogYWZ0ZXIgYWxsIHRoYXQsIHRoZXkncmUgZXF1YWwuICAqLworKyAgcmV0dXJuIDA7CisrfQorKyNlbmRpZgorKworKyNpZiBkZWZpbmVkKExfY29tcGFyZV9zZikgfHwgZGVmaW5lZChMX2NvbXBhcmVfZGYpIHx8IGRlZmluZWQoTF9jb21wb2FyZV90ZikKKytDTVB0eXBlCisrY29tcGFyZSAoRkxPX3R5cGUgYXJnX2EsIEZMT190eXBlIGFyZ19iKQorK3sKKysgIGZwX251bWJlcl90eXBlIGE7CisrICBmcF9udW1iZXJfdHlwZSBiOworKyAgRkxPX3VuaW9uX3R5cGUgYXUsIGJ1OworKworKyAgYXUudmFsdWUgPSBhcmdfYTsKKysgIGJ1LnZhbHVlID0gYXJnX2I7CisrCisrICB1bnBhY2tfZCAoJmF1LCAmYSk7CisrICB1bnBhY2tfZCAoJmJ1LCAmYik7CisrCisrICByZXR1cm4gX19mcGNtcF9wYXJ0cyAoJmEsICZiKTsKKyt9CisrI2VuZGlmIC8qIExfY29tcGFyZV9zZiB8fCBMX2NvbXBhcmVfZGYgKi8KKysKKysjaWZuZGVmIFVTX1NPRlRXQVJFX0dPRkFTVAorKworKy8qIFRoZXNlIHNob3VsZCBiZSBvcHRpbWl6ZWQgZm9yIHRoZWlyIHNwZWNpZmljIHRhc2tzIHNvbWVkYXkuICAqLworKworKyNpZiBkZWZpbmVkKExfZXFfc2YpIHx8IGRlZmluZWQoTF9lcV9kZikgfHwgZGVmaW5lZChMX2VxX3RmKQorK0NNUHR5cGUKKytfZXFfZjIgKEZMT190eXBlIGFyZ19hLCBGTE9fdHlwZSBhcmdfYikKKyt7CisrICBmcF9udW1iZXJfdHlwZSBhOworKyAgZnBfbnVtYmVyX3R5cGUgYjsKKysgIEZMT191bmlvbl90eXBlIGF1LCBidTsKKysKKysgIGF1LnZhbHVlID0gYXJnX2E7CisrICBidS52YWx1ZSA9IGFyZ19iOworKworKyAgdW5wYWNrX2QgKCZhdSwgJmEpOworKyAgdW5wYWNrX2QgKCZidSwgJmIpOworKworKyAgaWYgKGlzbmFuICgmYSkgfHwgaXNuYW4gKCZiKSkKKysgICAgcmV0dXJuIDE7CQkJLyogZmFsc2UsIHRydXRoID09IDAgKi8KKysKKysgIHJldHVybiBfX2ZwY21wX3BhcnRzICgmYSwgJmIpIDsKKyt9CisrI2VuZGlmIC8qIExfZXFfc2YgfHwgTF9lcV9kZiAqLworKworKyNpZiBkZWZpbmVkKExfbmVfc2YpIHx8IGRlZmluZWQoTF9uZV9kZikgfHwgZGVmaW5lZChMX25lX3RmKQorK0NNUHR5cGUKKytfbmVfZjIgKEZMT190eXBlIGFyZ19hLCBGTE9fdHlwZSBhcmdfYikKKyt7CisrICBmcF9udW1iZXJfdHlwZSBhOworKyAgZnBfbnVtYmVyX3R5cGUgYjsKKysgIEZMT191bmlvbl90eXBlIGF1LCBidTsKKysKKysgIGF1LnZhbHVlID0gYXJnX2E7CisrICBidS52YWx1ZSA9IGFyZ19iOworKworKyAgdW5wYWNrX2QgKCZhdSwgJmEpOworKyAgdW5wYWNrX2QgKCZidSwgJmIpOworKworKyAgaWYgKGlzbmFuICgmYSkgfHwgaXNuYW4gKCZiKSkKKysgICAgcmV0dXJuIDE7CQkJLyogdHJ1ZSwgdHJ1dGggIT0gMCAqLworKworKyAgcmV0dXJuICBfX2ZwY21wX3BhcnRzICgmYSwgJmIpIDsKKyt9CisrI2VuZGlmIC8qIExfbmVfc2YgfHwgTF9uZV9kZiAqLworKworKyNpZiBkZWZpbmVkKExfZ3Rfc2YpIHx8IGRlZmluZWQoTF9ndF9kZikgfHwgZGVmaW5lZChMX2d0X3RmKQorK0NNUHR5cGUKKytfZ3RfZjIgKEZMT190eXBlIGFyZ19hLCBGTE9fdHlwZSBhcmdfYikKKyt7CisrICBmcF9udW1iZXJfdHlwZSBhOworKyAgZnBfbnVtYmVyX3R5cGUgYjsKKysgIEZMT191bmlvbl90eXBlIGF1LCBidTsKKysKKysgIGF1LnZhbHVlID0gYXJnX2E7CisrICBidS52YWx1ZSA9IGFyZ19iOworKworKyAgdW5wYWNrX2QgKCZhdSwgJmEpOworKyAgdW5wYWNrX2QgKCZidSwgJmIpOworKworKyAgaWYgKGlzbmFuICgmYSkgfHwgaXNuYW4gKCZiKSkKKysgICAgcmV0dXJuIC0xOwkJCS8qIGZhbHNlLCB0cnV0aCA+IDAgKi8KKysKKysgIHJldHVybiBfX2ZwY21wX3BhcnRzICgmYSwgJmIpOworK30KKysjZW5kaWYgLyogTF9ndF9zZiB8fCBMX2d0X2RmICovCisrCisrI2lmIGRlZmluZWQoTF9nZV9zZikgfHwgZGVmaW5lZChMX2dlX2RmKSB8fCBkZWZpbmVkKExfZ2VfdGYpCisrQ01QdHlwZQorK19nZV9mMiAoRkxPX3R5cGUgYXJnX2EsIEZMT190eXBlIGFyZ19iKQorK3sKKysgIGZwX251bWJlcl90eXBlIGE7CisrICBmcF9udW1iZXJfdHlwZSBiOworKyAgRkxPX3VuaW9uX3R5cGUgYXUsIGJ1OworKworKyAgYXUudmFsdWUgPSBhcmdfYTsKKysgIGJ1LnZhbHVlID0gYXJnX2I7CisrCisrICB1bnBhY2tfZCAoJmF1LCAmYSk7CisrICB1bnBhY2tfZCAoJmJ1LCAmYik7CisrCisrICBpZiAoaXNuYW4gKCZhKSB8fCBpc25hbiAoJmIpKQorKyAgICByZXR1cm4gLTE7CQkJLyogZmFsc2UsIHRydXRoID49IDAgKi8KKysgIHJldHVybiBfX2ZwY21wX3BhcnRzICgmYSwgJmIpIDsKKyt9CisrI2VuZGlmIC8qIExfZ2Vfc2YgfHwgTF9nZV9kZiAqLworKworKyNpZiBkZWZpbmVkKExfbHRfc2YpIHx8IGRlZmluZWQoTF9sdF9kZikgfHwgZGVmaW5lZChMX2x0X3RmKQorK0NNUHR5cGUKKytfbHRfZjIgKEZMT190eXBlIGFyZ19hLCBGTE9fdHlwZSBhcmdfYikKKyt7CisrICBmcF9udW1iZXJfdHlwZSBhOworKyAgZnBfbnVtYmVyX3R5cGUgYjsKKysgIEZMT191bmlvbl90eXBlIGF1LCBidTsKKysKKysgIGF1LnZhbHVlID0gYXJnX2E7CisrICBidS52YWx1ZSA9IGFyZ19iOworKworKyAgdW5wYWNrX2QgKCZhdSwgJmEpOworKyAgdW5wYWNrX2QgKCZidSwgJmIpOworKworKyAgaWYgKGlzbmFuICgmYSkgfHwgaXNuYW4gKCZiKSkKKysgICAgcmV0dXJuIDE7CQkJLyogZmFsc2UsIHRydXRoIDwgMCAqLworKworKyAgcmV0dXJuIF9fZnBjbXBfcGFydHMgKCZhLCAmYik7CisrfQorKyNlbmRpZiAvKiBMX2x0X3NmIHx8IExfbHRfZGYgKi8KKysKKysjaWYgZGVmaW5lZChMX2xlX3NmKSB8fCBkZWZpbmVkKExfbGVfZGYpIHx8IGRlZmluZWQoTF9sZV90ZikKKytDTVB0eXBlCisrX2xlX2YyIChGTE9fdHlwZSBhcmdfYSwgRkxPX3R5cGUgYXJnX2IpCisreworKyAgZnBfbnVtYmVyX3R5cGUgYTsKKysgIGZwX251bWJlcl90eXBlIGI7CisrICBGTE9fdW5pb25fdHlwZSBhdSwgYnU7CisrCisrICBhdS52YWx1ZSA9IGFyZ19hOworKyAgYnUudmFsdWUgPSBhcmdfYjsKKysKKysgIHVucGFja19kICgmYXUsICZhKTsKKysgIHVucGFja19kICgmYnUsICZiKTsKKysKKysgIGlmIChpc25hbiAoJmEpIHx8IGlzbmFuICgmYikpCisrICAgIHJldHVybiAxOwkJCS8qIGZhbHNlLCB0cnV0aCA8PSAwICovCisrCisrICByZXR1cm4gX19mcGNtcF9wYXJ0cyAoJmEsICZiKSA7CisrfQorKyNlbmRpZiAvKiBMX2xlX3NmIHx8IExfbGVfZGYgKi8KKysKKysjZW5kaWYgLyogISBVU19TT0ZUV0FSRV9HT0ZBU1QgKi8KKysKKysjaWYgZGVmaW5lZChMX3Vub3JkX3NmKSB8fCBkZWZpbmVkKExfdW5vcmRfZGYpIHx8IGRlZmluZWQoTF91bm9yZF90ZikKKytDTVB0eXBlCisrX3Vub3JkX2YyIChGTE9fdHlwZSBhcmdfYSwgRkxPX3R5cGUgYXJnX2IpCisreworKyAgZnBfbnVtYmVyX3R5cGUgYTsKKysgIGZwX251bWJlcl90eXBlIGI7CisrICBGTE9fdW5pb25fdHlwZSBhdSwgYnU7CisrCisrICBhdS52YWx1ZSA9IGFyZ19hOworKyAgYnUudmFsdWUgPSBhcmdfYjsKKysKKysgIHVucGFja19kICgmYXUsICZhKTsKKysgIHVucGFja19kICgmYnUsICZiKTsKKysKKysgIHJldHVybiAoaXNuYW4gKCZhKSB8fCBpc25hbiAoJmIpKTsKKyt9CisrI2VuZGlmIC8qIExfdW5vcmRfc2YgfHwgTF91bm9yZF9kZiAqLworKworKyNpZiBkZWZpbmVkKExfc2lfdG9fc2YpIHx8IGRlZmluZWQoTF9zaV90b19kZikgfHwgZGVmaW5lZChMX3NpX3RvX3RmKQorK0ZMT190eXBlCisrc2lfdG9fZmxvYXQgKFNJdHlwZSBhcmdfYSkKKyt7CisrICBmcF9udW1iZXJfdHlwZSBpbjsKKysKKysgIGluLmNsYXNzID0gQ0xBU1NfTlVNQkVSOworKyAgaW4uc2lnbiA9IGFyZ19hIDwgMDsKKysgIGlmICghYXJnX2EpCisrICAgIHsKKysgICAgICBpbi5jbGFzcyA9IENMQVNTX1pFUk87CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGluLm5vcm1hbF9leHAgPSBGUkFDQklUUyArIE5HQVJEUzsKKysgICAgICBpZiAoaW4uc2lnbikgCisrCXsKKysJICAvKiBTcGVjaWFsIGNhc2UgZm9yIG1pbmludCwgc2luY2UgdGhlcmUgaXMgbm8gK3ZlIGludGVnZXIKKysJICAgICByZXByZXNlbnRhdGlvbiBmb3IgaXQgKi8KKysJICBpZiAoYXJnX2EgPT0gKC0gTUFYX1NJX0lOVCAtIDEpKQorKwkgICAgeworKwkgICAgICByZXR1cm4gKEZMT190eXBlKSgtIE1BWF9TSV9JTlQgLSAxKTsKKysJICAgIH0KKysJICBpbi5mcmFjdGlvbi5sbCA9ICgtYXJnX2EpOworKwl9CisrICAgICAgZWxzZQorKwlpbi5mcmFjdGlvbi5sbCA9IGFyZ19hOworKworKyAgICAgIHdoaWxlIChpbi5mcmFjdGlvbi5sbCA8ICgoZnJhY3R5cGUpMSA8PCAoRlJBQ0JJVFMgKyBOR0FSRFMpKSkKKysJeworKwkgIGluLmZyYWN0aW9uLmxsIDw8PSAxOworKwkgIGluLm5vcm1hbF9leHAgLT0gMTsKKysJfQorKyAgICB9CisrICByZXR1cm4gcGFja19kICgmaW4pOworK30KKysjZW5kaWYgLyogTF9zaV90b19zZiB8fCBMX3NpX3RvX2RmICovCisrCisrI2lmIGRlZmluZWQoTF91c2lfdG9fc2YpIHx8IGRlZmluZWQoTF91c2lfdG9fZGYpIHx8IGRlZmluZWQoTF91c2lfdG9fdGYpCisrRkxPX3R5cGUKKyt1c2lfdG9fZmxvYXQgKFVTSXR5cGUgYXJnX2EpCisreworKyAgZnBfbnVtYmVyX3R5cGUgaW47CisrCisrICBpbi5zaWduID0gMDsKKysgIGlmICghYXJnX2EpCisrICAgIHsKKysgICAgICBpbi5jbGFzcyA9IENMQVNTX1pFUk87CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGluLmNsYXNzID0gQ0xBU1NfTlVNQkVSOworKyAgICAgIGluLm5vcm1hbF9leHAgPSBGUkFDQklUUyArIE5HQVJEUzsKKysgICAgICBpbi5mcmFjdGlvbi5sbCA9IGFyZ19hOworKworKyAgICAgIHdoaWxlIChpbi5mcmFjdGlvbi5sbCA+ICgoZnJhY3R5cGUpMSA8PCAoRlJBQ0JJVFMgKyBOR0FSRFMpKSkKKysgICAgICAgIHsKKysgICAgICAgICAgaW4uZnJhY3Rpb24ubGwgPj49IDE7CisrICAgICAgICAgIGluLm5vcm1hbF9leHAgKz0gMTsKKysgICAgICAgIH0KKysgICAgICB3aGlsZSAoaW4uZnJhY3Rpb24ubGwgPCAoKGZyYWN0eXBlKTEgPDwgKEZSQUNCSVRTICsgTkdBUkRTKSkpCisrCXsKKysJICBpbi5mcmFjdGlvbi5sbCA8PD0gMTsKKysJICBpbi5ub3JtYWxfZXhwIC09IDE7CisrCX0KKysgICAgfQorKyAgcmV0dXJuIHBhY2tfZCAoJmluKTsKKyt9CisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQoTF9zZl90b19zaSkgfHwgZGVmaW5lZChMX2RmX3RvX3NpKSB8fCBkZWZpbmVkKExfdGZfdG9fc2kpCisrU0l0eXBlCisrZmxvYXRfdG9fc2kgKEZMT190eXBlIGFyZ19hKQorK3sKKysgIGZwX251bWJlcl90eXBlIGE7CisrICBTSXR5cGUgdG1wOworKyAgRkxPX3VuaW9uX3R5cGUgYXU7CisrCisrICBhdS52YWx1ZSA9IGFyZ19hOworKyAgdW5wYWNrX2QgKCZhdSwgJmEpOworKworKyAgaWYgKGlzemVybyAoJmEpKQorKyAgICByZXR1cm4gMDsKKysgIGlmIChpc25hbiAoJmEpKQorKyAgICByZXR1cm4gMDsKKysgIC8qIGdldCByZWFzb25hYmxlIE1BWF9TSV9JTlQuLi4gICovCisrICBpZiAoaXNpbmYgKCZhKSkKKysgICAgcmV0dXJuIGEuc2lnbiA/ICgtTUFYX1NJX0lOVCktMSA6IE1BWF9TSV9JTlQ7CisrICAvKiBpdCBpcyBhIG51bWJlciwgYnV0IGEgc21hbGwgb25lICovCisrICBpZiAoYS5ub3JtYWxfZXhwIDwgMCkKKysgICAgcmV0dXJuIDA7CisrICBpZiAoYS5ub3JtYWxfZXhwID4gQklUU19QRVJfU0kgLSAyKQorKyAgICByZXR1cm4gYS5zaWduID8gKC1NQVhfU0lfSU5UKS0xIDogTUFYX1NJX0lOVDsKKysgIHRtcCA9IGEuZnJhY3Rpb24ubGwgPj4gKChGUkFDQklUUyArIE5HQVJEUykgLSBhLm5vcm1hbF9leHApOworKyAgcmV0dXJuIGEuc2lnbiA/ICgtdG1wKSA6ICh0bXApOworK30KKysjZW5kaWYgLyogTF9zZl90b19zaSB8fCBMX2RmX3RvX3NpICovCisrCisrI2lmIGRlZmluZWQoTF9zZl90b191c2kpIHx8IGRlZmluZWQoTF9kZl90b191c2kpIHx8IGRlZmluZWQoTF90Zl90b191c2kpCisrI2lmIGRlZmluZWQgVVNfU09GVFdBUkVfR09GQVNUIHx8IGRlZmluZWQoTF90Zl90b191c2kpCisrLyogV2hpbGUgbGliZ2NjMi5jIGRlZmluZXMgaXRzIG93biBfX2ZpeHVuc3Nmc2kgYW5kIF9fZml4dW5zZGZzaSByb3V0aW5lcywKKysgICB3ZSBhbHNvIGRlZmluZSB0aGVtIGZvciBHT0ZBU1QgYmVjYXVzZSB0aGUgb25lcyBpbiBsaWJnY2MyLmMgaGF2ZSB0aGUKKysgICB3cm9uZyBuYW1lcyBhbmQgSSdkIHJhdGhlciBkZWZpbmUgdGhlc2UgaGVyZSBhbmQga2VlcCBHT0ZBU1QgQ1lHLUxPQydzCisrICAgb3V0IG9mIGxpYmdjYzIuYy4gIFdlIGNhbid0IGRlZmluZSB0aGVzZSBoZXJlIGlmIG5vdCBHT0ZBU1QgYmVjYXVzZSB0aGVuCisrICAgdGhlcmUnZCBiZSBkdXBsaWNhdGUgY29waWVzLiAgKi8KKysKKytVU0l0eXBlCisrZmxvYXRfdG9fdXNpIChGTE9fdHlwZSBhcmdfYSkKKyt7CisrICBmcF9udW1iZXJfdHlwZSBhOworKyAgRkxPX3VuaW9uX3R5cGUgYXU7CisrCisrICBhdS52YWx1ZSA9IGFyZ19hOworKyAgdW5wYWNrX2QgKCZhdSwgJmEpOworKworKyAgaWYgKGlzemVybyAoJmEpKQorKyAgICByZXR1cm4gMDsKKysgIGlmIChpc25hbiAoJmEpKQorKyAgICByZXR1cm4gMDsKKysgIC8qIGl0IGlzIGEgbmVnYXRpdmUgbnVtYmVyICovCisrICBpZiAoYS5zaWduKQorKyAgICByZXR1cm4gMDsKKysgIC8qIGdldCByZWFzb25hYmxlIE1BWF9VU0lfSU5ULi4uICAqLworKyAgaWYgKGlzaW5mICgmYSkpCisrICAgIHJldHVybiBNQVhfVVNJX0lOVDsKKysgIC8qIGl0IGlzIGEgbnVtYmVyLCBidXQgYSBzbWFsbCBvbmUgKi8KKysgIGlmIChhLm5vcm1hbF9leHAgPCAwKQorKyAgICByZXR1cm4gMDsKKysgIGlmIChhLm5vcm1hbF9leHAgPiBCSVRTX1BFUl9TSSAtIDEpCisrICAgIHJldHVybiBNQVhfVVNJX0lOVDsKKysgIGVsc2UgaWYgKGEubm9ybWFsX2V4cCA+IChGUkFDQklUUyArIE5HQVJEUykpCisrICAgIHJldHVybiBhLmZyYWN0aW9uLmxsIDw8IChhLm5vcm1hbF9leHAgLSAoRlJBQ0JJVFMgKyBOR0FSRFMpKTsKKysgIGVsc2UKKysgICAgcmV0dXJuIGEuZnJhY3Rpb24ubGwgPj4gKChGUkFDQklUUyArIE5HQVJEUykgLSBhLm5vcm1hbF9leHApOworK30KKysjZW5kaWYgLyogVVNfU09GVFdBUkVfR09GQVNUICovCisrI2VuZGlmIC8qIExfc2ZfdG9fdXNpIHx8IExfZGZfdG9fdXNpICovCisrCisrI2lmIGRlZmluZWQoTF9uZWdhdGVfc2YpIHx8IGRlZmluZWQoTF9uZWdhdGVfZGYpIHx8IGRlZmluZWQoTF9uZWdhdGVfdGYpCisrRkxPX3R5cGUKKytuZWdhdGUgKEZMT190eXBlIGFyZ19hKQorK3sKKysgIGZwX251bWJlcl90eXBlIGE7CisrICBGTE9fdW5pb25fdHlwZSBhdTsKKysKKysgIGF1LnZhbHVlID0gYXJnX2E7CisrICB1bnBhY2tfZCAoJmF1LCAmYSk7CisrCisrICBmbGlwX3NpZ24gKCZhKTsKKysgIHJldHVybiBwYWNrX2QgKCZhKTsKKyt9CisrI2VuZGlmIC8qIExfbmVnYXRlX3NmIHx8IExfbmVnYXRlX2RmICovCisrCisrI2lmZGVmIEZMT0FUCisrCisrI2lmIGRlZmluZWQoTF9tYWtlX3NmKQorK1NGdHlwZQorK19fbWFrZV9mcChmcF9jbGFzc190eXBlIGNsYXNzLAorKwkgICAgIHVuc2lnbmVkIGludCBzaWduLAorKwkgICAgIGludCBleHAsIAorKwkgICAgIFVTSXR5cGUgZnJhYykKKyt7CisrICBmcF9udW1iZXJfdHlwZSBpbjsKKysKKysgIGluLmNsYXNzID0gY2xhc3M7CisrICBpbi5zaWduID0gc2lnbjsKKysgIGluLm5vcm1hbF9leHAgPSBleHA7CisrICBpbi5mcmFjdGlvbi5sbCA9IGZyYWM7CisrICByZXR1cm4gcGFja19kICgmaW4pOworK30KKysjZW5kaWYgLyogTF9tYWtlX3NmICovCisrCisrI2lmbmRlZiBGTE9BVF9PTkxZCisrCisrLyogVGhpcyBlbmFibGVzIG9uZSB0byBidWlsZCBhbiBmcCBsaWJyYXJ5IHRoYXQgc3VwcG9ydHMgZmxvYXQgYnV0IG5vdCBkb3VibGUuCisrICAgT3RoZXJ3aXNlLCB3ZSB3b3VsZCBnZXQgYW4gdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBfX21ha2VfZHAuCisrICAgVGhpcyBpcyBuZWVkZWQgZm9yIHNvbWUgOC1iaXQgcG9ydHMgdGhhdCBjYW4ndCBoYW5kbGUgd2VsbCB2YWx1ZXMgdGhhdAorKyAgIGFyZSA4LWJ5dGVzIGluIHNpemUsIHNvIHdlIGp1c3QgZG9uJ3Qgc3VwcG9ydCBkb3VibGUgZm9yIHRoZW0gYXQgYWxsLiAgKi8KKysKKysjaWYgZGVmaW5lZChMX3NmX3RvX2RmKQorK0RGdHlwZQorK3NmX3RvX2RmIChTRnR5cGUgYXJnX2EpCisreworKyAgZnBfbnVtYmVyX3R5cGUgaW47CisrICBGTE9fdW5pb25fdHlwZSBhdTsKKysKKysgIGF1LnZhbHVlID0gYXJnX2E7CisrICB1bnBhY2tfZCAoJmF1LCAmaW4pOworKworKyAgcmV0dXJuIF9fbWFrZV9kcCAoaW4uY2xhc3MsIGluLnNpZ24sIGluLm5vcm1hbF9leHAsCisrCQkgICAgKChVREl0eXBlKSBpbi5mcmFjdGlvbi5sbCkgPDwgRl9EX0JJVE9GRik7CisrfQorKyNlbmRpZiAvKiBMX3NmX3RvX2RmICovCisrCisrI2lmIGRlZmluZWQoTF9zZl90b190ZikgJiYgZGVmaW5lZChUTU9ERVMpCisrVEZ0eXBlCisrc2ZfdG9fdGYgKFNGdHlwZSBhcmdfYSkKKyt7CisrICBmcF9udW1iZXJfdHlwZSBpbjsKKysgIEZMT191bmlvbl90eXBlIGF1OworKworKyAgYXUudmFsdWUgPSBhcmdfYTsKKysgIHVucGFja19kICgmYXUsICZpbik7CisrCisrICByZXR1cm4gX19tYWtlX3RwIChpbi5jbGFzcywgaW4uc2lnbiwgaW4ubm9ybWFsX2V4cCwKKysJCSAgICAoKFVUSXR5cGUpIGluLmZyYWN0aW9uLmxsKSA8PCBGX1RfQklUT0ZGKTsKKyt9CisrI2VuZGlmIC8qIExfc2ZfdG9fZGYgKi8KKysKKysjZW5kaWYgLyogISBGTE9BVF9PTkxZICovCisrI2VuZGlmIC8qIEZMT0FUICovCisrCisrI2lmbmRlZiBGTE9BVAorKworK2V4dGVybiBTRnR5cGUgX19tYWtlX2ZwIChmcF9jbGFzc190eXBlLCB1bnNpZ25lZCBpbnQsIGludCwgVVNJdHlwZSk7CisrCisrI2lmIGRlZmluZWQoTF9tYWtlX2RmKQorK0RGdHlwZQorK19fbWFrZV9kcCAoZnBfY2xhc3NfdHlwZSBjbGFzcywgdW5zaWduZWQgaW50IHNpZ24sIGludCBleHAsIFVESXR5cGUgZnJhYykKKyt7CisrICBmcF9udW1iZXJfdHlwZSBpbjsKKysKKysgIGluLmNsYXNzID0gY2xhc3M7CisrICBpbi5zaWduID0gc2lnbjsKKysgIGluLm5vcm1hbF9leHAgPSBleHA7CisrICBpbi5mcmFjdGlvbi5sbCA9IGZyYWM7CisrICByZXR1cm4gcGFja19kICgmaW4pOworK30KKysjZW5kaWYgLyogTF9tYWtlX2RmICovCisrCisrI2lmIGRlZmluZWQoTF9kZl90b19zZikKKytTRnR5cGUKKytkZl90b19zZiAoREZ0eXBlIGFyZ19hKQorK3sKKysgIGZwX251bWJlcl90eXBlIGluOworKyAgVVNJdHlwZSBzZmZyYWM7CisrICBGTE9fdW5pb25fdHlwZSBhdTsKKysKKysgIGF1LnZhbHVlID0gYXJnX2E7CisrICB1bnBhY2tfZCAoJmF1LCAmaW4pOworKworKyAgc2ZmcmFjID0gaW4uZnJhY3Rpb24ubGwgPj4gRl9EX0JJVE9GRjsKKysKKysgIC8qIFdlIHNldCB0aGUgbG93ZXN0IGd1YXJkIGJpdCBpbiBTRkZSQUMgaWYgd2UgZGlzY2FyZGVkIGFueSBub24KKysgICAgIHplcm8gYml0cy4gICovCisrICBpZiAoKGluLmZyYWN0aW9uLmxsICYgKCgoVVNJdHlwZSkgMSA8PCBGX0RfQklUT0ZGKSAtIDEpKSAhPSAwKQorKyAgICBzZmZyYWMgfD0gMTsKKysKKysgIHJldHVybiBfX21ha2VfZnAgKGluLmNsYXNzLCBpbi5zaWduLCBpbi5ub3JtYWxfZXhwLCBzZmZyYWMpOworK30KKysjZW5kaWYgLyogTF9kZl90b19zZiAqLworKworKyNpZiBkZWZpbmVkKExfZGZfdG9fdGYpICYmIGRlZmluZWQoVE1PREVTKSBcCisrICAgICYmICFkZWZpbmVkKEZMT0FUKSAmJiAhZGVmaW5lZChURkxPQVQpCisrVEZ0eXBlCisrZGZfdG9fdGYgKERGdHlwZSBhcmdfYSkKKyt7CisrICBmcF9udW1iZXJfdHlwZSBpbjsKKysgIEZMT191bmlvbl90eXBlIGF1OworKworKyAgYXUudmFsdWUgPSBhcmdfYTsKKysgIHVucGFja19kICgmYXUsICZpbik7CisrCisrICByZXR1cm4gX19tYWtlX3RwIChpbi5jbGFzcywgaW4uc2lnbiwgaW4ubm9ybWFsX2V4cCwKKysJCSAgICAoKFVUSXR5cGUpIGluLmZyYWN0aW9uLmxsKSA8PCBEX1RfQklUT0ZGKTsKKyt9CisrI2VuZGlmIC8qIExfc2ZfdG9fZGYgKi8KKysKKysjaWZkZWYgVEZMT0FUCisrI2lmIGRlZmluZWQoTF9tYWtlX3RmKQorK1RGdHlwZQorK19fbWFrZV90cChmcF9jbGFzc190eXBlIGNsYXNzLAorKwkgICAgIHVuc2lnbmVkIGludCBzaWduLAorKwkgICAgIGludCBleHAsIAorKwkgICAgIFVUSXR5cGUgZnJhYykKKyt7CisrICBmcF9udW1iZXJfdHlwZSBpbjsKKysKKysgIGluLmNsYXNzID0gY2xhc3M7CisrICBpbi5zaWduID0gc2lnbjsKKysgIGluLm5vcm1hbF9leHAgPSBleHA7CisrICBpbi5mcmFjdGlvbi5sbCA9IGZyYWM7CisrICByZXR1cm4gcGFja19kICgmaW4pOworK30KKysjZW5kaWYgLyogTF9tYWtlX3RmICovCisrCisrI2lmIGRlZmluZWQoTF90Zl90b19kZikKKytERnR5cGUKKyt0Zl90b19kZiAoVEZ0eXBlIGFyZ19hKQorK3sKKysgIGZwX251bWJlcl90eXBlIGluOworKyAgVURJdHlwZSBzZmZyYWM7CisrICBGTE9fdW5pb25fdHlwZSBhdTsKKysKKysgIGF1LnZhbHVlID0gYXJnX2E7CisrICB1bnBhY2tfZCAoJmF1LCAmaW4pOworKworKyAgc2ZmcmFjID0gaW4uZnJhY3Rpb24ubGwgPj4gRF9UX0JJVE9GRjsKKysKKysgIC8qIFdlIHNldCB0aGUgbG93ZXN0IGd1YXJkIGJpdCBpbiBTRkZSQUMgaWYgd2UgZGlzY2FyZGVkIGFueSBub24KKysgICAgIHplcm8gYml0cy4gICovCisrICBpZiAoKGluLmZyYWN0aW9uLmxsICYgKCgoVVRJdHlwZSkgMSA8PCBEX1RfQklUT0ZGKSAtIDEpKSAhPSAwKQorKyAgICBzZmZyYWMgfD0gMTsKKysKKysgIHJldHVybiBfX21ha2VfZHAgKGluLmNsYXNzLCBpbi5zaWduLCBpbi5ub3JtYWxfZXhwLCBzZmZyYWMpOworK30KKysjZW5kaWYgLyogTF90Zl90b19kZiAqLworKworKyNpZiBkZWZpbmVkKExfdGZfdG9fc2YpCisrU0Z0eXBlCisrdGZfdG9fc2YgKFRGdHlwZSBhcmdfYSkKKyt7CisrICBmcF9udW1iZXJfdHlwZSBpbjsKKysgIFVTSXR5cGUgc2ZmcmFjOworKyAgRkxPX3VuaW9uX3R5cGUgYXU7CisrCisrICBhdS52YWx1ZSA9IGFyZ19hOworKyAgdW5wYWNrX2QgKCZhdSwgJmluKTsKKysKKysgIHNmZnJhYyA9IGluLmZyYWN0aW9uLmxsID4+IEZfVF9CSVRPRkY7CisrCisrICAvKiBXZSBzZXQgdGhlIGxvd2VzdCBndWFyZCBiaXQgaW4gU0ZGUkFDIGlmIHdlIGRpc2NhcmRlZCBhbnkgbm9uCisrICAgICB6ZXJvIGJpdHMuICAqLworKyAgaWYgKChpbi5mcmFjdGlvbi5sbCAmICgoKFVUSXR5cGUpIDEgPDwgRl9UX0JJVE9GRikgLSAxKSkgIT0gMCkKKysgICAgc2ZmcmFjIHw9IDE7CisrCisrICByZXR1cm4gX19tYWtlX2ZwIChpbi5jbGFzcywgaW4uc2lnbiwgaW4ubm9ybWFsX2V4cCwgc2ZmcmFjKTsKKyt9CisrI2VuZGlmIC8qIExfdGZfdG9fc2YgKi8KKysjZW5kaWYgLyogVEZMT0FUICovCisrCisrI2VuZGlmIC8qICEgRkxPQVQgKi8KKysjZW5kaWYgLyogIUVYVEVOREVEX0ZMT0FUX1NUVUJTICovCitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvbmlvczIvbmlvczIuaCBnY2MtMy40LjYvZ2NjL2NvbmZpZy9uaW9zMi9uaW9zMi5oCistLS0gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9uaW9zMi9uaW9zMi5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTMuNC42L2djYy9jb25maWcvbmlvczIvbmlvczIuaAkyMDA3LTA4LTE1IDIzOjA5OjM2LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw4MjQgQEAKKysvKiBEZWZpbml0aW9ucyBvZiB0YXJnZXQgbWFjaGluZSBmb3IgQWx0ZXJhIE5JT1MgMkcgTklPUzIgdmVyc2lvbi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDMgQWx0ZXJhIAorKyAgIENvbnRyaWJ1dGVkIGJ5IEpvbmFoIEdyYWhhbSAoamdyYWhhbUBhbHRlcmEuY29tKS4KKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgQ0MuCisrCisrR05VIENDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKytpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKythbnkgbGF0ZXIgdmVyc2lvbi4KKysKKytHTlUgQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKytidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKytHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrYWxvbmcgd2l0aCBHTlUgQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bworK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKytCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrCisrCisrCisrI2RlZmluZSBUQVJHRVRfQ1BVX0NQUF9CVUlMVElOUygpCQlcCisrICBkbwkJCQkJCVwKKysgICAgewkJCQkJCVwKKysgICAgICBidWlsdGluX2RlZmluZV9zdGQgKCJOSU9TMiIpOwkJXAorKyAgICAgIGJ1aWx0aW5fZGVmaW5lX3N0ZCAoIm5pb3MyIik7CQlcCisrICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfR05VX1NPVVJDRSIpOwkJXAorKyAgICB9CQkJCQkJXAorKyAgd2hpbGUgKDApCisrI2RlZmluZSBUQVJHRVRfVkVSU0lPTiBmcHJpbnRmIChzdGRlcnIsICIgKEFsdGVyYSBOaW9zIElJKSIpCisrCisrCisrCisrCisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKyAqIFJ1bi10aW1lIFRhcmdldCBTcGVjaWZpY2F0aW9uCisrICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysjZGVmaW5lIEhBU19ESVZfRkxBRyAweDAwMDEKKysjZGVmaW5lIEhBU19NVUxfRkxBRyAweDAwMDIKKysjZGVmaW5lIEhBU19NVUxYX0ZMQUcgMHgwMDA0CisrI2RlZmluZSBGQVNUX1NXX0RJVl9GTEFHIDB4MDAwOAorKyNkZWZpbmUgSU5MSU5FX01FTUNQWV9GTEFHIDB4MDAwMTAKKysjZGVmaW5lIENBQ0hFX1ZPTEFUSUxFX0ZMQUcgMHgwMDIwCisrI2RlZmluZSBCWVBBU1NfQ0FDSEVfRkxBRyAweDAwNDAKKysKKytleHRlcm4gaW50IHRhcmdldF9mbGFnczsKKysjZGVmaW5lIFRBUkdFVF9IQVNfRElWICh0YXJnZXRfZmxhZ3MgJiBIQVNfRElWX0ZMQUcpCisrI2RlZmluZSBUQVJHRVRfSEFTX01VTCAodGFyZ2V0X2ZsYWdzICYgSEFTX01VTF9GTEFHKQorKyNkZWZpbmUgVEFSR0VUX0hBU19NVUxYICh0YXJnZXRfZmxhZ3MgJiBIQVNfTVVMWF9GTEFHKQorKyNkZWZpbmUgVEFSR0VUX0ZBU1RfU1dfRElWICh0YXJnZXRfZmxhZ3MgJiBGQVNUX1NXX0RJVl9GTEFHKQorKyNkZWZpbmUgVEFSR0VUX0lOTElORV9NRU1DUFkgKHRhcmdldF9mbGFncyAmIElOTElORV9NRU1DUFlfRkxBRykKKysjZGVmaW5lIFRBUkdFVF9DQUNIRV9WT0xBVElMRSAodGFyZ2V0X2ZsYWdzICYgQ0FDSEVfVk9MQVRJTEVfRkxBRykKKysjZGVmaW5lIFRBUkdFVF9CWVBBU1NfQ0FDSEUgKHRhcmdldF9mbGFncyAmIEJZUEFTU19DQUNIRV9GTEFHKQorKworKyNkZWZpbmUgVEFSR0VUX1NXSVRDSEVTCQkJCQlcCisrewkJCQkJCQlcCisrICAgIHsgImh3LWRpdiIsIEhBU19ESVZfRkxBRywJCQkJXAorKyAgICAgIE5fKCJFbmFibGUgRElWLCBESVZVIikgfSwJCQkJXAorKyAgICB7ICJuby1ody1kaXYiLCAtSEFTX0RJVl9GTEFHLAkJCVwKKysgICAgICBOXygiRGlzYWJsZSBESVYsIERJVlUgKGRlZmF1bHQpIikgfSwJCVwKKysgICAgeyAiaHctbXVsIiwgSEFTX01VTF9GTEFHLAkJCQlcCisrICAgICAgTl8oIkVuYWJsZSBNVUwgaW5zdHJ1Y3Rpb25zIChkZWZhdWx0KSIpIH0sCQkJCVwKKysgICAgeyAiaHctbXVseCIsIEhBU19NVUxYX0ZMQUcsCQkJCVwKKysgICAgICBOXygiRW5hYmxlIE1VTFggaW5zdHJ1Y3Rpb25zLCBhc3N1bWUgZmFzdCBzaGlmdGVyIikgfSwJCQkJXAorKyAgICB7ICJuby1ody1tdWwiLCAtSEFTX01VTF9GTEFHLAkJCVwKKysgICAgICBOXygiRGlzYWJsZSBNVUwgaW5zdHJ1Y3Rpb25zIikgfSwJCVwKKysgICAgeyAibm8taHctbXVseCIsIC1IQVNfTVVMWF9GTEFHLAkJCVwKKysgICAgICBOXygiRGlzYWJsZSBNVUxYIGluc3RydWN0aW9ucywgYXNzdW1lIHNsb3cgc2hpZnRlciAoZGVmYXVsdCBhbmQgaW1wbGllZCBieSAtbW5vLWh3LW11bCkiKSB9LAkJXAorKyAgICB7ICJmYXN0LXN3LWRpdiIsIEZBU1RfU1dfRElWX0ZMQUcsCQkJCVwKKysgICAgICBOXygiVXNlIHRhYmxlIGJhc2VkIGZhc3QgZGl2aWRlIChkZWZhdWx0IGF0IC1PMykiKSB9LAkJCQlcCisrICAgIHsgIm5vLWZhc3Qtc3ctZGl2IiwgLUZBU1RfU1dfRElWX0ZMQUcsCQkJXAorKyAgICAgIE5fKCJEb24ndCB1c2UgdGFibGUgYmFzZWQgZmFzdCBkaXZpZGUgZXZlciIpIH0sCQlcCisrICAgIHsgImlubGluZS1tZW1jcHkiLCBJTkxJTkVfTUVNQ1BZX0ZMQUcsCQkJCVwKKysgICAgICBOXygiSW5saW5lIHNtYWxsIG1lbWNweSAoZGVmYXVsdCB3aGVuIG9wdGltaXppbmcpIikgfSwJCQkJXAorKyAgICB7ICJuby1pbmxpbmUtbWVtY3B5IiwgLUlOTElORV9NRU1DUFlfRkxBRywJCQlcCisrICAgICAgTl8oIkRvbid0IElubGluZSBzbWFsbCBtZW1jcHkiKSB9LAkJXAorKyAgICB7ICJjYWNoZS12b2xhdGlsZSIsIENBQ0hFX1ZPTEFUSUxFX0ZMQUcsCQkJCVwKKysgICAgICBOXygiVm9sYXRpbGUgYWNjZXNzZXMgdXNlIG5vbi1pbyB2YXJpYW50cyBvZiBpbnN0cnVjdGlvbnMgKGRlZmF1bHQpIikgfSwJCQkJXAorKyAgICB7ICJuby1jYWNoZS12b2xhdGlsZSIsIC1DQUNIRV9WT0xBVElMRV9GTEFHLAkJCVwKKysgICAgICBOXygiVm9sYXRpbGUgYWNjZXNzZXMgdXNlIGlvIHZhcmlhbnRzIG9mIGluc3RydWN0aW9ucyIpIH0sCQlcCisrICAgIHsgImJ5cGFzcy1jYWNoZSIsIEJZUEFTU19DQUNIRV9GTEFHLAkJCQlcCisrICAgICAgTl8oIkFsbCBsZC9zdCBpbnN0cnVjdGlucyB1c2UgaW8gdmFyaWFudHMiKSB9LAkJCQlcCisrICAgIHsgIm5vLWJ5cGFzcy1jYWNoZSIsIC1CWVBBU1NfQ0FDSEVfRkxBRywJCQlcCisrICAgICAgTl8oIkFsbCBsZC9zdCBpbnN0cnVjdGlucyBkbyBub3QgdXNlIGlvIHZhcmlhbnRzIChkZWZhdWx0KSIpIH0sCQlcCisrICAgIHsgInNtYWxsYyIsIDAsCQkJXAorKyAgICAgIE5fKCJMaW5rIHdpdGggYSBsaW1pdGVkIHZlcnNpb24gb2YgdGhlIEMgbGlicmFyeSIpIH0sCQlcCisrICAgIHsgImN0b3JzLWluLWluaXQiLCAwLAkJCVwKKysgICAgICAiIiAvKiB1bmRvY3VtZW50ZWQ6IE5fKCJMaW5rIHdpdGggc3RhdGljIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMgaW4gaW5pdCIpICovIH0sCQlcCisrICAgIHsgIiIsIFRBUkdFVF9ERUZBVUxULCAwIH0JCQkJXAorK30KKysKKysKKytleHRlcm4gY29uc3QgY2hhciAqbmlvczJfc3lzX25vc3lzX3N0cmluZzsgICAgLyogZm9yIC1tc3lzPW5vc3lzICovCisrZXh0ZXJuIGNvbnN0IGNoYXIgKm5pb3MyX3N5c19saWJfc3RyaW5nOyAgICAvKiBmb3IgLW1zeXMtbGliPSAqLworK2V4dGVybiBjb25zdCBjaGFyICpuaW9zMl9zeXNfY3J0MF9zdHJpbmc7ICAgIC8qIGZvciAtbXN5cy1jcnQwPSAqLworKworKyNkZWZpbmUgVEFSR0VUX09QVElPTlMJCQkJCVwKKyt7CQkJCQkJCVwKKysgIHsgInN5cz1ub3N5cyIsICAgICZuaW9zMl9zeXNfbm9zeXNfc3RyaW5nLAkJXAorKyAgICAgIE5fKCJVc2Ugc3R1YiB2ZXJzaW9ucyBvZiBPUyBsaWJyYXJ5IGNhbGxzIChkZWZhdWx0KSIpLCAwfSwJXAorKyAgeyAic3lzLWxpYj0iLCAgICAmbmlvczJfc3lzX2xpYl9zdHJpbmcsCQlcCisrICAgICAgTl8oIk5hbWUgb2YgU3lzdGVtIExpYnJhcnkgdG8gbGluayBhZ2FpbnN0LiAoQ29udmVydGVkIHRvIGEgLWwgb3B0aW9uKSIpLCAwfSwJXAorKyAgeyAic3lzLWNydDA9IiwgICAgJm5pb3MyX3N5c19jcnQwX3N0cmluZywJCVwKKysgICAgICBOXygiTmFtZSBvZiB0aGUgc3RhcnRmaWxlLiAoZGVmYXVsdCBpcyBhIGNydDAgZm9yIHRoZSBJU1Mgb25seSkiKSwgMH0sCVwKKyt9CisrCisrCisrLyogRGVmYXVsdCB0YXJnZXRfZmxhZ3MgaWYgbm8gc3dpdGNoZXMgc3BlY2lmaWVkLiAgKi8KKysjaWZuZGVmIFRBUkdFVF9ERUZBVUxUCisrIyBkZWZpbmUgVEFSR0VUX0RFRkFVTFQgKEhBU19NVUxfRkxBRyB8IENBQ0hFX1ZPTEFUSUxFX0ZMQUcpCisrI2VuZGlmCisrCisrLyogU3dpdGNoICBSZWNvZ25pdGlvbiBieSBnY2MuYy4gIEFkZCAtRyB4eCBzdXBwb3J0ICovCisrI3VuZGVmICBTV0lUQ0hfVEFLRVNfQVJHCisrI2RlZmluZSBTV0lUQ0hfVEFLRVNfQVJHKENIQVIpCQkJCQkJXAorKyAgKERFRkFVTFRfU1dJVENIX1RBS0VTX0FSRyAoQ0hBUikgfHwgKENIQVIpID09ICdHJykKKysKKysjZGVmaW5lIE9WRVJSSURFX09QVElPTlMgb3ZlcnJpZGVfb3B0aW9ucyAoKQorKyNkZWZpbmUgT1BUSU1JWkFUSU9OX09QVElPTlMoTEVWRUwsIFNJWkUpIG9wdGltaXphdGlvbl9vcHRpb25zIChMRVZFTCwgU0laRSkKKysjZGVmaW5lIENBTl9ERUJVR19XSVRIT1VUX0ZQCisrIAorKyNkZWZpbmUgQ0MxX1NQRUMgIlwKKysle0cqfSIKKysKKysjdW5kZWYgTElCX1NQRUMKKysjZGVmaW5lIExJQl9TUEVDIFwKKysiLS1zdGFydC1ncm91cCAle21zbWFsbGM6IC1sc21hbGxjfSAleyFtc21hbGxjOiAtbGN9IC1sZ2NjIFwKKysgJXttc3lzLWxpYj0qOiAtbCUqfSBcCisrICV7IW1zeXMtbGliPSo6IC1sYyB9IFwKKysgLS1lbmQtZ3JvdXAgXAorKyAle21zeXMtbGliPTogJWVZb3UgbmVlZCBhIGxpYnJhcnkgbmFtZSBmb3IgLW1zeXMtbGliPX0gXAorKyIKKysKKysKKysjdW5kZWYgU1RBUlRGSUxFX1NQRUMgCisrI2RlZmluZSBTVEFSVEZJTEVfU1BFQyAgXAorKyIle21zeXMtY3J0MD0qOiAlKn0gJXshbXN5cy1jcnQwPSo6IGNydDElTyVzfSBcCisrICV7bXN5cy1jcnQwPTogJWVZb3UgbmVlZCBhIEMgc3RhcnR1cCBmaWxlIGZvciAtbXN5cy1jcnQwPX0gXAorKyAle21jdG9ycy1pbi1pbml0OiBjcnRpJU8lcyBjcnRiZWdpbiVPJXN9IFwKKysiCisrCisrI3VuZGVmIEVOREZJTEVfU1BFQyAKKysjZGVmaW5lIEVOREZJTEVfU1BFQyBcCisrICIle21jdG9ycy1pbi1pbml0OiBjcnRlbmQlTyVzIGNydG4lTyVzfSIKKysKKysKKysvKioqKioqKioqKioqKioqKioqKioqKioKKysgKiBTdG9yYWdlIExheW91dAorKyAqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysjZGVmaW5lIERFRkFVTFRfU0lHTkVEX0NIQVIgMQorKyNkZWZpbmUgQklUU19CSUdfRU5ESUFOIDAKKysjZGVmaW5lIEJZVEVTX0JJR19FTkRJQU4gMAorKyNkZWZpbmUgV09SRFNfQklHX0VORElBTiAwCisrI2RlZmluZSBCSVRTX1BFUl9VTklUIDgKKysjZGVmaW5lIEJJVFNfUEVSX1dPUkQgMzIKKysjZGVmaW5lIFVOSVRTX1BFUl9XT1JEIDQKKysjZGVmaW5lIFBPSU5URVJfU0laRSAzMgorKyNkZWZpbmUgQklHR0VTVF9BTElHTk1FTlQgMzIKKysjZGVmaW5lIFNUUklDVF9BTElHTk1FTlQgMQorKyNkZWZpbmUgRlVOQ1RJT05fQk9VTkRBUlkgMzIKKysjZGVmaW5lIFBBUk1fQk9VTkRBUlkgMzIKKysjZGVmaW5lIFNUQUNLX0JPVU5EQVJZIDMyCisrI2RlZmluZSBQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlkgMzIKKysjZGVmaW5lIE1BWF9GSVhFRF9NT0RFX1NJWkUgNjQKKysKKysjZGVmaW5lIENPTlNUQU5UX0FMSUdOTUVOVChFWFAsIEFMSUdOKQkJCQlcCisrICAoKFRSRUVfQ09ERSAoRVhQKSA9PSBTVFJJTkdfQ1NUKSAJCQkJXAorKyAgICYmIChBTElHTikgPCBCSVRTX1BFUl9XT1JEID8gQklUU19QRVJfV09SRCA6IChBTElHTikpCisrCisrCisrLyoqKioqKioqKioqKioqKioqKioqKioKKysgKiBMYXlvdXQgb2YgU291cmNlIExhbmd1YWdlIERhdGEgVHlwZXMKKysgKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysjZGVmaW5lIElOVF9UWVBFX1NJWkUgMzIKKysjZGVmaW5lIFNIT1JUX1RZUEVfU0laRSAxNgorKyNkZWZpbmUgTE9OR19UWVBFX1NJWkUgMzIKKysjZGVmaW5lIExPTkdfTE9OR19UWVBFX1NJWkUgNjQKKysjZGVmaW5lIEZMT0FUX1RZUEVfU0laRSAzMgorKyNkZWZpbmUgRE9VQkxFX1RZUEVfU0laRSA2NAorKyNkZWZpbmUgTE9OR19ET1VCTEVfVFlQRV9TSVpFIERPVUJMRV9UWVBFX1NJWkUKKysKKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKgorKyAqIENvbmRpdGlvbiBDb2RlIFN0YXR1cworKyAqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrLyogY29tcGFyaXNvbiB0eXBlICovCisrLyogPz8/IGN1cnJlbnRseSBvbmx5IENNUF9TSSBpcyB1c2VkICovCisrZW51bSBjbXBfdHlwZSB7CisrICBDTVBfU0ksCQkJCS8qIGNvbXBhcmUgZm91ciBieXRlIGludGVnZXJzICovCisrICBDTVBfREksCQkJCS8qIGNvbXBhcmUgZWlnaHQgYnl0ZSBpbnRlZ2VycyAqLworKyAgQ01QX1NGLAkJCQkvKiBjb21wYXJlIHNpbmdsZSBwcmVjaXNpb24gZmxvYXRzICovCisrICBDTVBfREYsCQkJCS8qIGNvbXBhcmUgZG91YmxlIHByZWNpc2lvbiBmbG9hdHMgKi8KKysgIENNUF9NQVgJCQkJLyogbWF4IGNvbXBhcmlzb24gdHlwZSAqLworK307CisrCisrZXh0ZXJuIEdUWSgoKSkgcnR4IGJyYW5jaF9jbXBbMl07CS8qIG9wZXJhbmRzIGZvciBjb21wYXJlICovCisrZXh0ZXJuIGVudW0gY21wX3R5cGUgYnJhbmNoX3R5cGU7CS8qIHdoYXQgdHlwZSBvZiBicmFuY2ggdG8gdXNlICovCisrCisrLyoqKioqKioqKioqKioqKioqKioqKioKKysgKiBSZWdpc3RlciBVc2FnZQorKyAqKioqKioqKioqKioqKioqKioqKioqLworKworKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKgorKyAqIEJhc2ljIENoYXJhY3RlcmlzdGljcyBvZiBSZWdpc3RlcnMKKysgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisrCisrLyoKKytSZWdpc3RlciBOdW1iZXIKKysgICAgICBSZWdpc3RlciBOYW1lCisrICAgICAgICAgIEFsdGVybmF0ZSBOYW1lCisrICAgICAgICAgICAgICAgIFB1cnBvc2UKKyswICAgICByMCAgemVybyAgYWx3YXlzIHplcm8KKysxICAgICByMSAgYXQgICAgQXNzZW1ibGVyIFRlbXBvcmFyeQorKzItMyAgIHIyLXIzICAgICBSZXR1cm4gTG9jYXRpb24KKys0LTcgICByNC1yNyAgICAgUmVnaXN0ZXIgQXJndW1lbnRzCisrOC0xNSAgcjgtcjE1ICAgIENhbGxlciBTYXZlZCBSZWdpc3RlcnMKKysxNi0yMiByMTYtcjIyICAgQ2FsbGVlIFNhdmVkIFJlZ2lzdGVycworKzIzICAgIHIyMyBzYyAgICBTdGF0aWMgQ2hhaW4gKENhbGxlZSBTYXZlZCkKKysgICAgICAgICAgICAgICAgPz8/IERvZXMgJHNjIHdhbnQgdG8gYmUgY2FsbGVyIG9yIGNhbGxlZSAKKysgICAgICAgICAgICAgICAgc2F2ZWQuIElmIGNhbGxlciwgMTUsIGVsc2UgMjMuIAorKzI0ICAgIHIyNCAgICAgICBFeGNlcHRpb24gVGVtcG9yYXJ5CisrMjUgICAgcjI1ICAgICAgIEJyZWFrcG9pbnQgVGVtcG9yYXJ5CisrMjYgICAgcjI2IGdwICAgIEdsb2JhbCBQb2ludGVyCisrMjcgICAgcjI3IHNwICAgIFN0YWNrIFBvaW50ZXIKKysyOCAgICByMjggZnAgICAgRnJhbWUgUG9pbnRlcgorKzI5ICAgIHIyOSBlYSAgICBFeGNlcHRpb24gUmV0dXJuIEFkZHJlc3MKKyszMCAgICByMzAgYmEgICAgQnJlYWtwb2ludCBSZXR1cm4gQWRkcmVzcworKzMxICAgIHIzMSByYSAgICBSZXR1cm4gQWRkcmVzcworKworKzMyICAgIGN0bDAgc3RhdHVzCisrMzMgICAgY3RsMSBlc3RhdHVzIFNUQVRVUyBzYXZlZCBieSBleGNlcHRpb24gPyAJCisrMzQgICAgY3RsMiBic3RhdHVzIFNUQVRVUyBzYXZlZCBieSBicmVhayA/IAkKKyszNSAgICBjdGwzIGlwcmkgICAgSW50ZXJydXB0IFByaW9yaXR5IE1hc2sgPwkKKyszNiAgICBjdGw0IGVjYXVzZSAgRXhjZXB0aW9uIENhdXNlID8gCQorKworKzM3ICAgICAgICAgcGMgICBOb3QgYW4gYWN0dWFsIHJlZ2lzdGVyCQorKworKzM4ICAgIHJhcCAgICAgIFJldHVybiBhZGRyZXNzIHBvaW50ZXIsIHRoaXMgZG9lcyBub3QKKysgICAgICAgICAgICAgICAgICAgYWN0dWFsbHkgZXhpc3QgYW5kIHdpbGwgYmUgZWxpbWluYXRlZAorKworKzM5ICAgIGZha2VfZnAgIEZha2UgRnJhbWUgUG9pbnRlciB3aGljaCB3aWxsIGFsd2F5cyBiZSBlbGltaW5hdGVkLgorKzQwICAgIGZha2VfYXAgIEZha2UgQXJndW1lbnQgUG9pbnRlciB3aGljaCB3aWxsIGFsd2F5cyBiZSBlbGltaW5hdGVkLgorKworKzQxICAgICAgICAgICAgIEZpcnN0IFBzZXVkbyBSZWdpc3RlcgorKworKworK1RoZSBkZWZpbml0aW9ucyBmb3IgYWxsIHRoZSBoYXJkIHJlZ2lzdGVyIG51bWJlcnMKKythcmUgbG9jYXRlZCBpbiBuaW9zMi5tZC4KKysqLworKworKyNkZWZpbmUgRklSU1RfUFNFVURPX1JFR0lTVEVSIDQxCisrI2RlZmluZSBOVU1fQVJHX1JFR1MgKExBU1RfQVJHX1JFR05PIC0gRklSU1RfQVJHX1JFR05PICsgMSkKKysKKysKKysKKysvKiBhbHNvIHNlZSBDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSAqLworKyNkZWZpbmUgRklYRURfUkVHSVNURVJTCQkJICAgICBcCisrICAgIHsJCQkJCSAgICAgXAorKy8qICAgICAgICArMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAqLyAgIFwKKysvKiAgIDAgKi8gIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsICAgICBcCisrLyogIDEwICovICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAgICAgXAorKy8qICAyMCAqLyAgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMCwgMSwgICAgIFwKKysvKiAgMzAgKi8gIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsICAgICBcCisrLyogIDQwICovICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB9CisrCisrLyogY2FsbCB1c2VkIGlzIHRoZSBzYW1lIGFzIGNhbGxlciBzYXZlZAorKyAgICsgZml4ZWQgcmVncyArIGFyZ3MgKyByZXQgdmFscyAqLworKyNkZWZpbmUgQ0FMTF9VU0VEX1JFR0lTVEVSUwkJICAgICBcCisrICAgIHsgCQkJCQkgICAgIFwKKysvKiAgICAgICAgKzAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgKi8gICBcCisrLyogICAwICovICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAgICAgXAorKy8qICAxMCAqLyAgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgICAgIFwKKysvKiAgMjAgKi8gIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDAsIDEsICAgICBcCisrLyogIDMwICovICAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAgICAgXAorKy8qICA0MCAqLyAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfQorKworKyNkZWZpbmUgSEFSRF9SRUdOT19OUkVHUyhSRUdOTywgTU9ERSkgICAgICAgICAgICBcCisrICAgKChHRVRfTU9ERV9TSVpFIChNT0RFKSArIFVOSVRTX1BFUl9XT1JEIC0gMSkgIFwKKysgICAgLyBVTklUU19QRVJfV09SRCkKKysKKysvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKgorKyAqIEhvdyBWYWx1ZXMgRml0IGluIFJlZ2lzdGVycworKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworKworKyNkZWZpbmUgSEFSRF9SRUdOT19NT0RFX09LKFJFR05PLCBNT0RFKSAxCisrCisrI2RlZmluZSBNT0RFU19USUVBQkxFX1AoTU9ERTEsIE1PREUyKSAxCisrCisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioKKysgKiBSZWdpc3RlciBDbGFzc2VzCisrICoqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrZW51bSByZWdfY2xhc3MKKyt7CisrICAgIE5PX1JFR1MsCisrICAgIEFMTF9SRUdTLAorKyAgICBMSU1fUkVHX0NMQVNTRVMKKyt9OworKworKyNkZWZpbmUgTl9SRUdfQ0xBU1NFUyAoaW50KSBMSU1fUkVHX0NMQVNTRVMKKysKKysjZGVmaW5lIFJFR19DTEFTU19OQU1FUyAgIFwKKysgICAgeyJOT19SRUdTIiwgICAgICAgICAgIFwKKysgICAgICJBTExfUkVHUyJ9CisrCisrI2RlZmluZSBHRU5FUkFMX1JFR1MgQUxMX1JFR1MKKysKKysjZGVmaW5lIFJFR19DTEFTU19DT05URU5UUyAgIFwKKysvKiBOT19SRUdTICAqLyAgICAgICB7eyAwLCAwfSwgICAgIFwKKysvKiBBTExfUkVHUyAqLyAgICAgICAge34wLH4wfX0gICAgXAorKworKyNkZWZpbmUgUkVHTk9fUkVHX0NMQVNTKFJFR05PKSBBTExfUkVHUworKworKyNkZWZpbmUgQkFTRV9SRUdfQ0xBU1MgQUxMX1JFR1MKKysjZGVmaW5lIElOREVYX1JFR19DTEFTUyBBTExfUkVHUworKworKy8qIG9ubHkgb25lIHJlZyBjbGFzcywgJ3InLCBpcyBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgKi8KKysjZGVmaW5lIFJFR19DTEFTU19GUk9NX0xFVFRFUihDSEFSKSBOT19SRUdTCisrCisrI2RlZmluZSBSRUdOT19PS19GT1JfQkFTRV9QMihSRUdOTywgU1RSSUNUKSBcCisrICAgICgoU1RSSUNUKSBcCisrICAgICA/IChSRUdOTykgPCBGSVJTVF9QU0VVRE9fUkVHSVNURVIgXAorKyAgICAgOiAoUkVHTk8pIDwgRklSU1RfUFNFVURPX1JFR0lTVEVSIHx8IChyZWdfcmVudW1iZXIgJiYgcmVnX3JlbnVtYmVyW1JFR05PXSA8IEZJUlNUX1BTRVVET19SRUdJU1RFUikpCisrCisrI2RlZmluZSBSRUdOT19PS19GT1JfSU5ERVhfUDIoUkVHTk8sIFNUUklDVCkgXAorKyAgICAoUkVHTk9fT0tfRk9SX0JBU0VfUDIgKFJFR05PLCBTVFJJQ1QpKQorKworKyNkZWZpbmUgUkVHTk9fT0tfRk9SX0JBU0VfUChSRUdOTykgXAorKyAgICAoUkVHTk9fT0tfRk9SX0JBU0VfUDIgKFJFR05PLCAxKSkKKysKKysjZGVmaW5lIFJFR05PX09LX0ZPUl9JTkRFWF9QKFJFR05PKSBcCisrICAgIChSRUdOT19PS19GT1JfSU5ERVhfUDIgKFJFR05PLCAxKSkKKysKKysjZGVmaW5lIFJFR19PS19GT1JfQkFTRV9QMihYLCBTVFJJQ1QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIChTVFJJQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgPyBSRUdOT19PS19GT1JfQkFTRV9QMiAoUkVHTk8gKFgpLCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgIDogUkVHTk9fT0tfRk9SX0JBU0VfUDIgKFJFR05PIChYKSwgMSkgfHwgUkVHTk8oWCkgPj0gRklSU1RfUFNFVURPX1JFR0lTVEVSKQorKworKyNkZWZpbmUgUkVHX09LX0ZPUl9JTkRFWF9QMihYLCBTVFJJQ1QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgKFNUUklDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICA/IFJFR05PX09LX0ZPUl9JTkRFWF9QMiAoUkVHTk8gKFgpLCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgOiBSRUdOT19PS19GT1JfSU5ERVhfUDIgKFJFR05PIChYKSwgMSkgfHwgUkVHTk8oWCkgPj0gRklSU1RfUFNFVURPX1JFR0lTVEVSKQorKworKyNkZWZpbmUgQ0xBU1NfTUFYX05SRUdTKENMQVNTLCBNT0RFKSAgICAgICAgICAgICBcCisrICAgKChHRVRfTU9ERV9TSVpFIChNT0RFKSArIFVOSVRTX1BFUl9XT1JEIC0gMSkgIFwKKysgICAgLyBVTklUU19QRVJfV09SRCkKKysKKysKKysjZGVmaW5lIFNNQUxMX0lOVChYKSAoKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpICgoWCkgKyAweDgwMDApIDwgMHgxMDAwMCkKKysjZGVmaW5lIFNNQUxMX0lOVF9VTlNJR05FRChYKSAoKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpIChYKSA8IDB4MTAwMDApCisrI2RlZmluZSBVUFBFUjE2X0lOVChYKSAoKChYKSAmIDB4ZmZmZikgPT0gMCkKKysjZGVmaW5lIFNISUZUX0lOVChYKSAoKFgpID49IDAgJiYgKFgpIDw9IDMxKQorKyNkZWZpbmUgUkRXUkNUTF9JTlQoWCkgKChYKSA+PSAwICYmIChYKSA8PSAzMSkKKysjZGVmaW5lIENVU1RPTV9JTlNOX09QQ09ERShYKSAoKFgpID49IDAgJiYgKFgpIDw9IDI1NSkKKysKKysjZGVmaW5lIENPTlNUX09LX0ZPUl9MRVRURVJfUChWQUxVRSwgQykJCQlcCisrICgJCQkJCQkJXAorKyAgKEMpID09ICdJJyA/IFNNQUxMX0lOVCAoVkFMVUUpIDoJCQlcCisrICAoQykgPT0gJ0onID8gU01BTExfSU5UX1VOU0lHTkVEIChWQUxVRSkgOgkJXAorKyAgKEMpID09ICdLJyA/IFVQUEVSMTZfSU5UIChWQUxVRSkgOiAgICAgICAgIAkJXAorKyAgKEMpID09ICdMJyA/IFNISUZUX0lOVCAoVkFMVUUpIDoJCQlcCisrICAoQykgPT0gJ00nID8gKFZBTFVFKSA9PSAwIDoJCQkJXAorKyAgKEMpID09ICdOJyA/IENVU1RPTV9JTlNOX09QQ09ERSAoVkFMVUUpIDoJCVwKKysgIChDKSA9PSAnTycgPyBSRFdSQ1RMX0lOVCAoVkFMVUUpIDoJCQlcCisrICAwKQorKworKyNkZWZpbmUgQ09OU1RfRE9VQkxFX09LX0ZPUl9MRVRURVJfUChWQUxVRSwgQykgMAorKworKyNkZWZpbmUgUFJFRkVSUkVEX1JFTE9BRF9DTEFTUyhYLCBDTEFTUykgXAorKyAgICAoKENMQVNTKSA9PSBOT19SRUdTID8gR0VORVJBTF9SRUdTIDogKENMQVNTKSkKKysKKysvKiAnUycgbWF0Y2hlcyBpbW1lZGlhdGVzIHdoaWNoIGFyZSBpbiBzbWFsbCBkYXRhIAorKyAgIGFuZCB0aGVyZWZvcmUgY2FuIGJlIGFkZGVkIHRvIGdwIHRvIGNyZWF0ZSBhIAorKyAgIDMyLWJpdCB2YWx1ZS4gKi8KKysjZGVmaW5lIEVYVFJBX0NPTlNUUkFJTlQoVkFMVUUsIEMpCQlcCisrICAoKEMpID09ICdTJyAJCQkJCVwKKysgICAmJiAoR0VUX0NPREUgKFZBTFVFKSA9PSBTWU1CT0xfUkVGKSAgIAlcCisrICAgJiYgU1lNQk9MX1JFRl9JTl9OSU9TMl9TTUFMTF9EQVRBX1AgKFZBTFVFKSkKKysKKysKKysKKysKKysvKiBTYXkgdGhhdCB0aGUgZXBpbG9ndWUgdXNlcyB0aGUgcmV0dXJuIGFkZHJlc3MgcmVnaXN0ZXIuICBOb3RlIHRoYXQKKysgICBpbiB0aGUgY2FzZSBvZiBzaWJjYWxscywgdGhlIHZhbHVlcyAidXNlZCBieSB0aGUgZXBpbG9ndWUiIGFyZQorKyAgIGNvbnNpZGVyZWQgbGl2ZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGNhbGxlZCBmdW5jdGlvbi4gICovCisrI2RlZmluZSBFUElMT0dVRV9VU0VTKFJFR05PKSAoKFJFR05PKSA9PSBSQV9SRUdOTykKKysKKysKKysjZGVmaW5lIERFRkFVTFRfTUFJTl9SRVRVUk4gIGNfZXhwYW5kX3JldHVybiAoaW50ZWdlcl96ZXJvX25vZGUpCisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysgKiBUcmFtcG9saW5lcyBmb3IgTmVzdGVkIEZ1bmN0aW9ucworKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysjZGVmaW5lIFRSQU1QT0xJTkVfVEVNUExBVEUoRklMRSkgXAorKyAgICBlcnJvciAoInRyYW1wb2xpbmVzIG5vdCB5ZXQgaW1wbGVtZW50ZWQiKQorKyNkZWZpbmUgVFJBTVBPTElORV9TSVpFIDIwCisrI2RlZmluZSBJTklUSUFMSVpFX1RSQU1QT0xJTkUoVFJBTVAsIEZOQUREUiwgQ1hUKSBcCisrICAgIGVycm9yICgidHJhbXBvbGluZXMgbm90IHlldCBpbXBsZW1lbnRlZCIpCisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKgorKyAqIFN0YWNrIExheW91dCBhbmQgQ2FsbGluZyBDb252ZW50aW9ucworKyAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrLyogLS0tLS0tLS0tLS0tLS0tLS0tICoKKysgKiBCYXNpYyBTdGFjayBMYXlvdXQKKysgKiAtLS0tLS0tLS0tLS0tLS0tLS0gKi8KKysKKysvKiBUaGUgZG93bndhcmQgdmFyaWFudHMgYXJlIHVzZWQgYnkgdGhlIGNvbXBpbGVyLAorKyAgIHRoZSB1cHdhcmQgb25lcyBzZXJ2ZSBhcyBkb2N1bWVudGF0aW9uICovCisrI2RlZmluZSBTVEFDS19HUk9XU19ET1dOV0FSRAorKyNkZWZpbmUgRlJBTUVfR1JPV1NfVVBXQVJECisrI2RlZmluZSBBUkdTX0dST1dfVVBXQVJECisrCisrI2RlZmluZSBTVEFSVElOR19GUkFNRV9PRkZTRVQgY3VycmVudF9mdW5jdGlvbl9vdXRnb2luZ19hcmdzX3NpemUKKysjZGVmaW5lIEZJUlNUX1BBUk1fT0ZGU0VUKEZVTkRFQ0wpIDAKKysKKysvKiBCZWZvcmUgdGhlIHByb2xvZ3VlLCBSQSBsaXZlcyBpbiByMzEuICAqLworKyNkZWZpbmUgSU5DT01JTkdfUkVUVVJOX0FERFJfUlRYICBnZW5fcnR4X1JFRyAoVk9JRG1vZGUsIFJBX1JFR05PKQorKworKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKKysgKiBSZWdpc3RlcnMgVGhhdCBBZGRyZXNzIHRoZSBTdGFjayBGcmFtZQorKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisrCisrI2RlZmluZSBTVEFDS19QT0lOVEVSX1JFR05VTSBTUF9SRUdOTworKyNkZWZpbmUgU1RBVElDX0NIQUlOX1JFR05VTSBTQ19SRUdOTworKyNkZWZpbmUgUENfUkVHTlVNIFBDX1JFR05PCisrI2RlZmluZSBEV0FSRl9GUkFNRV9SRVRVUk5fQ09MVU1OIFJBX1JFR05PCisrCisrLyogQmFzZSByZWdpc3RlciBmb3IgYWNjZXNzIHRvIGxvY2FsIHZhcmlhYmxlcyBvZiB0aGUgZnVuY3Rpb24uICBXZQorKyAgIHByZXRlbmQgdGhhdCB0aGUgZnJhbWUgcG9pbnRlciBpcyBhIG5vbi1leGlzdGVudCBoYXJkIHJlZ2lzdGVyLCBhbmQgCisrICAgdGhlbiBlbGltaW5hdGUgaXQgdG8gSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTS4gKi8KKysjZGVmaW5lIEZSQU1FX1BPSU5URVJfUkVHTlVNIEZBS0VfRlBfUkVHTk8KKysKKysjZGVmaW5lIEhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0gRlBfUkVHTk8KKysjZGVmaW5lIFJFVFVSTl9BRERSRVNTX1BPSU5URVJfUkVHTlVNIFJBUF9SRUdOTworKy8qIHRoZSBhcmd1bW5ldCBwb2ludGVyIG5lZWRzIHRvIGFsd2F5cyBiZSBlbGltaW5hdGVkCisrICAgc28gaXQgaXMgc2V0IHRvIGEgZmFrZSBoYXJkIHJlZ2lzdGVyLiAqLworKyNkZWZpbmUgQVJHX1BPSU5URVJfUkVHTlVNIEZBS0VfQVBfUkVHTk8KKysKKysvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqCisrICogRWxpbWluYXRpbmcgRnJhbWUgUG9pbnRlciBhbmQgQXJnIFBvaW50ZXIKKysgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworKworKyNkZWZpbmUgRlJBTUVfUE9JTlRFUl9SRVFVSVJFRCAwCisrCisrI2RlZmluZSBFTElNSU5BQkxFX1JFR1MJCQkJCQkJXAorK3t7IEFSR19QT0lOVEVSX1JFR05VTSwgICBTVEFDS19QT0lOVEVSX1JFR05VTX0sCQkJCVwKKysgeyBBUkdfUE9JTlRFUl9SRUdOVU0sICAgSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTX0sCQkJXAorKyB7IFJFVFVSTl9BRERSRVNTX1BPSU5URVJfUkVHTlVNLCBTVEFDS19QT0lOVEVSX1JFR05VTX0sCQlcCisrIHsgUkVUVVJOX0FERFJFU1NfUE9JTlRFUl9SRUdOVU0sIEhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU19LAkJXAorKyB7IEZSQU1FX1BPSU5URVJfUkVHTlVNLCBTVEFDS19QT0lOVEVSX1JFR05VTX0sCQkJCVwKKysgeyBGUkFNRV9QT0lOVEVSX1JFR05VTSwgSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTX19CisrCisrI2RlZmluZSBDQU5fRUxJTUlOQVRFKEZST00sIFRPKQkxCisrCisrI2RlZmluZSBJTklUSUFMX0VMSU1JTkFUSU9OX09GRlNFVChGUk9NLCBUTywgT0ZGU0VUKSBcCisrCShPRkZTRVQpID0gbmlvczJfaW5pdGlhbF9lbGltaW5hdGlvbl9vZmZzZXQgKChGUk9NKSwgKFRPKSkKKysKKysjZGVmaW5lIE1VU1RfU0FWRV9SRUdJU1RFUihyZWdubykgXAorKyAoKHJlZ3NfZXZlcl9saXZlW3JlZ25vXSAmJiAhY2FsbF91c2VkX3JlZ3NbcmVnbm9dKQkJCVwKKysgIHx8IChyZWdubyA9PSBIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNICYmIGZyYW1lX3BvaW50ZXJfbmVlZGVkKQlcCisrICB8fCAocmVnbm8gPT0gUkFfUkVHTk8gJiYgcmVnc19ldmVyX2xpdmVbUkFfUkVHTk9dKSkKKysKKysvKiBUcmVhdCBMT0MgYXMgYSBieXRlIG9mZnNldCBmcm9tIHRoZSBzdGFjayBwb2ludGVyIGFuZCByb3VuZCBpdCB1cAorKyAgIHRvIHRoZSBuZXh0IGZ1bGx5LWFsaWduZWQgb2Zmc2V0LiAgKi8KKysjZGVmaW5lIFNUQUNLX0FMSUdOKExPQykJCQkJCQlcCisrICAoKChMT0MpICsgKChQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlkgLyA4KSAtIDEpKSAmIH4oKFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWSAvIDgpIC0gMSkpCisrCisrCisrLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKKysgKiBQYXNzaW5nIEFyZ3VtZW50cyBpbiBSZWdpc3RlcnMKKysgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKysKKysvKiBzZWUgbmlvczIuYyAqLworKyNkZWZpbmUgRlVOQ1RJT05fQVJHKENVTSwgTU9ERSwgVFlQRSwgTkFNRUQpIFwKKysgIChmdW5jdGlvbl9hcmcgKCZDVU0sIE1PREUsIFRZUEUsIE5BTUVEKSkKKysKKysjZGVmaW5lIEZVTkNUSU9OX0FSR19QQVJUSUFMX05SRUdTKENVTSwgTU9ERSwgVFlQRSwgTkFNRUQpIFwKKysgIChmdW5jdGlvbl9hcmdfcGFydGlhbF9ucmVncyAoJkNVTSwgTU9ERSwgVFlQRSwgTkFNRUQpKQorKworKyNkZWZpbmUgRlVOQ1RJT05fQVJHX1BBU1NfQllfUkVGRVJFTkNFKENVTSwgTU9ERSwgVFlQRSwgTkFNRUQpIDAKKysKKysjZGVmaW5lIEZVTkNUSU9OX0FSR19DQUxMRUVfQ09QSUVTKENVTSwgTU9ERSwgVFlQRSwgTkFNRUQpIDAKKysKKyt0eXBlZGVmIHN0cnVjdCBuaW9zMl9hcmdzCisreworKyAgICBpbnQgcmVnc191c2VkOworK30gQ1VNVUxBVElWRV9BUkdTOworKworKy8qIFRoaXMgaXMgdG8gaW5pdGlhbGl6ZSB0aGUgYWJvdmUgdW51c2VkIENVTSBkYXRhIHR5cGUgKi8KKysjZGVmaW5lIElOSVRfQ1VNVUxBVElWRV9BUkdTKENVTSwgRk5UWVBFLCBMSUJOQU1FLCBGTkRFQ0wsIE5fTkFNRURfQVJHUykgXAorKyAgICAoaW5pdF9jdW11bGF0aXZlX2FyZ3MgKCZDVU0sIEZOVFlQRSwgTElCTkFNRSwgRk5ERUNMLCBOX05BTUVEX0FSR1MpKQorKworKyNkZWZpbmUgRlVOQ1RJT05fQVJHX0FEVkFOQ0UoQ1VNLCBNT0RFLCBUWVBFLCBOQU1FRCkgXAorKyAgICAoZnVuY3Rpb25fYXJnX2FkdmFuY2UgKCZDVU0sIE1PREUsIFRZUEUsIE5BTUVEKSkKKysKKysjZGVmaW5lIEZVTkNUSU9OX0FSR19SRUdOT19QKFJFR05PKSBcCisrICAgICgoUkVHTk8pID49IEZJUlNUX0FSR19SRUdOTyAmJiAoUkVHTk8pIDw9IExBU1RfQVJHX1JFR05PKQorKworKyNkZWZpbmUgU0VUVVBfSU5DT01JTkdfVkFSQVJHUyhDVU0sTU9ERSxUWVBFLFBSRVRFTkRfU0laRSxOT19SVEwpICAgXAorKyAgewkJCQkJCQkJICAgIFwKKysgICAgaW50IHByZXRfc2l6ZSA9IG5pb3MyX3NldHVwX2luY29taW5nX3ZhcmFyZ3MgKCYoQ1VNKSwgKE1PREUpLAkgICAgXAorKwkJCQkJCShUWVBFKSwgKE5PX1JUTCkpOyAgXAorKyAgICBpZiAocHJldF9zaXplKQkJCQkJCSAgICBcCisrICAgICAgKFBSRVRFTkRfU0laRSkgPSBwcmV0X3NpemU7CQkJCSAgICBcCisrICB9CisrCisrLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKgorKyAqIEdlbmVyYXRpbmcgQ29kZSBmb3IgUHJvZmlsaW5nCisrICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKysKKysjZGVmaW5lIFBST0ZJTEVfQkVGT1JFX1BST0xPR1VFCisrCisrI2RlZmluZSBGVU5DVElPTl9QUk9GSUxFUihGSUxFLCBMQUJFTE5PKSBcCisrICBmdW5jdGlvbl9wcm9maWxlciAoKEZJTEUpLCAoTEFCRUxOTykpCisrCisrLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKKysgKiBQYXNzaW5nIEZ1bmN0aW9uIEFyZ3VtZW50cyBvbiB0aGUgU3RhY2sKKysgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKysKKysjZGVmaW5lIFBST01PVEVfUFJPVE9UWVBFUyAxCisrCisrI2RlZmluZSBQVVNIX0FSR1MgMAorKyNkZWZpbmUgQUNDVU1VTEFURV9PVVRHT0lOR19BUkdTIDEKKysKKysjZGVmaW5lIFJFVFVSTl9QT1BTX0FSR1MoRlVOREVDTCwgRlVOVFlQRSwgU1RBQ0tTSVpFKSAwCisrCisrLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKKysgKiBIb3cgU2NhbGFyIEZ1bmN0aW9uIFZhbHVlcyBBcmUgUmV0dXJuZWQKKysgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKysKKysjZGVmaW5lIEZVTkNUSU9OX1ZBTFVFKFZBTFRZUEUsIEZVTkMpIFwKKysgICAgZ2VuX3J0eChSRUcsIFRZUEVfTU9ERShWQUxUWVBFKSwgRklSU1RfUkVUVkFMX1JFR05PKQorKworKyNkZWZpbmUgTElCQ0FMTF9WQUxVRShNT0RFKSBcCisrICAgIGdlbl9ydHgoUkVHLCBNT0RFLCBGSVJTVF9SRVRWQUxfUkVHTk8pCisrCisrI2RlZmluZSBGVU5DVElPTl9WQUxVRV9SRUdOT19QKFJFR05PKSAoKFJFR05PKSA9PSBGSVJTVF9SRVRWQUxfUkVHTk8pCisrCisrLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKgorKyAqIEhvdyBMYXJnZSBWYWx1ZXMgQXJlIFJldHVybmVkCisrICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKysKKysKKysjZGVmaW5lIFJFVFVSTl9JTl9NRU1PUlkoVFlQRSkJXAorKyAgbmlvczJfcmV0dXJuX2luX21lbW9yeSAoVFlQRSkKKysKKysKKysjZGVmaW5lIFNUUlVDVF9WQUxVRSAwCisrCisrI2RlZmluZSBERUZBVUxUX1BDQ19TVFJVQ1RfUkVUVVJOIDAKKysKKysvKioqKioqKioqKioqKioqKioqKgorKyAqIEFkZHJlc3NpbmcgTW9kZXMKKysgKioqKioqKioqKioqKioqKioqKi8KKysKKysKKysjZGVmaW5lIExFR0lUSU1JWkVfQUREUkVTUyhYLCBPTERYLCBNT0RFLCBXSU4pCisrCisrI2RlZmluZSBDT05TVEFOVF9BRERSRVNTX1AoWCkgKENPTlNUQU5UX1AgKFgpKQorKworKyNkZWZpbmUgTUFYX1JFR1NfUEVSX0FERFJFU1MgMQorKworKy8qIEdvIHRvIEFERFIgaWYgWCBpcyBhIHZhbGlkIGFkZHJlc3MuICAqLworKyNpZm5kZWYgUkVHX09LX1NUUklDVAorKyNkZWZpbmUgR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKE1PREUsIFgsIEFERFIpICAgICAgICBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGlmIChuaW9zMl9sZWdpdGltYXRlX2FkZHJlc3MgKChYKSwgKE1PREUpLCAwKSkgIFwKKysgICAgICAgICAgICBnb3RvIEFERFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB9CisrI2Vsc2UKKysjZGVmaW5lIEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyhNT0RFLCBYLCBBRERSKSAgICAgICAgXAorKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBpZiAobmlvczJfbGVnaXRpbWF0ZV9hZGRyZXNzICgoWCksIChNT0RFKSwgMSkpICBcCisrICAgICAgICAgICAgZ290byBBRERSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfQorKyNlbmRpZgorKworKyNpZm5kZWYgUkVHX09LX1NUUklDVAorKyNkZWZpbmUgUkVHX09LX0ZPUl9CQVNFX1AoWCkgICBSRUdOT19PS19GT1JfQkFTRV9QMiAoUkVHTk8gKFgpLCAwKQorKyNkZWZpbmUgUkVHX09LX0ZPUl9JTkRFWF9QKFgpICBSRUdOT19PS19GT1JfSU5ERVhfUDIgKFJFR05PIChYKSwgMCkKKysjZWxzZQorKyNkZWZpbmUgUkVHX09LX0ZPUl9CQVNFX1AoWCkgICBSRUdOT19PS19GT1JfQkFTRV9QMiAoUkVHTk8gKFgpLCAxKQorKyNkZWZpbmUgUkVHX09LX0ZPUl9JTkRFWF9QKFgpICBSRUdOT19PS19GT1JfSU5ERVhfUDIgKFJFR05PIChYKSwgMSkKKysjZW5kaWYKKysKKysjZGVmaW5lIExFR0lUSU1BVEVfQ09OU1RBTlRfUChYKSAxCisrCisrLyogTmlvcyBJSSBoYXMgbm8gbW9kZSBkZXBlbmRlbnQgYWRkcmVzc2VzLiAgKi8KKysjZGVmaW5lIEdPX0lGX01PREVfREVQRU5ERU5UX0FERFJFU1MoQUREUiwgTEFCRUwpCisrCisrLyogU2V0IGlmIHRoaXMgaGFzIGEgd2VhayBkZWNsYXJhdGlvbiAgKi8KKysjZGVmaW5lIFNZTUJPTF9GTEFHX1dFQUtfREVDTAkoMSA8PCBTWU1CT0xfRkxBR19NQUNIX0RFUF9TSElGVCkKKysjZGVmaW5lIFNZTUJPTF9SRUZfV0VBS19ERUNMX1AoUlRYKSBcCisrICAoKFNZTUJPTF9SRUZfRkxBR1MgKFJUWCkgJiBTWU1CT0xfRkxBR19XRUFLX0RFQ0wpICE9IDApCisrCisrCisrLyogdHJ1ZSBpZiBhIHN5bWJvbCBpcyBib3RoIHNtYWxsIGFuZCBub3Qgd2Vhay4gSW4gdGhpcyBjYXNlLCBncAorKyAgIHJlbGF0aXZlIGFjY2VzcyBjYW4gYmUgdXNlZCAqLworKyNkZWZpbmUgU1lNQk9MX1JFRl9JTl9OSU9TMl9TTUFMTF9EQVRBX1AoUlRYKSBcCisrICAgKFNZTUJPTF9SRUZfU01BTExfUChSVFgpICYmICFTWU1CT0xfUkVGX1dFQUtfREVDTF9QKFJUWCkpCisrCisrLyoqKioqKioqKioqKioqKioqCisrICogRGVzY3JpYmluZyBSZWxhdGl2ZSBDb3N0cyBvZiBPcGVyYXRpb25zCisrICoqKioqKioqKioqKioqKioqLworKworKyNkZWZpbmUgU0xPV19CWVRFX0FDQ0VTUyAxCisrCisrLyogSXQgaXMgYXMgZ29vZCB0byBjYWxsIGEgY29uc3RhbnQgZnVuY3Rpb24gYWRkcmVzcyBhcyB0byBjYWxsIGFuIGFkZHJlc3MKKysgICBrZXB0IGluIGEgcmVnaXN0ZXIuCisrICAgPz8/IE5vdCB0cnVlIGFueW1vcmUgcmVhbGx5LiBOb3cgdGhhdCBjYWxsIGNhbm5vdCBhZGRyZXNzIGZ1bGwgcmFuZ2UKKysgICBvZiBtZW1vcnkgY2FsbHIgbWF5IG5lZWQgdG8gYmUgdXNlZCAqLworKworKyNkZWZpbmUgTk9fRlVOQ1RJT05fQ1NFCisrI2RlZmluZSBOT19SRUNVUlNJVkVfRlVOQ1RJT05fQ1NFCisrCisrCisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisrICogRGVmaW5pbmcgdGhlIE91dHB1dCBBc3NlbWJsZXIgTGFuZ3VhZ2UKKysgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKKysgKiBUaGUgT3ZlcmFsbCBGcmFtZXdvcmsgb2YgYW4gQXNzZW1ibGVyIEZpbGUKKysgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKysKKysjZGVmaW5lIEFTTV9BUFBfT04gIiNBUFBcbiIKKysjZGVmaW5lIEFTTV9BUFBfT0ZGICIjTk9fQVBQXG4iCisrCisrI2RlZmluZSBBU01fQ09NTUVOVF9TVEFSVCAiIyAiCisrCisrLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqCisrICogT3V0cHV0IGFuZCBHZW5lcmF0aW9uIG9mIExhYmVscworKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKysKKysjZGVmaW5lIEdMT0JBTF9BU01fT1AgIlx0Lmdsb2JhbFx0IgorKworKworKy8qIC0tLS0tLS0tLS0tLS0tICoKKysgKiBPdXRwdXQgb2YgRGF0YQorKyAqIC0tLS0tLS0tLS0tLS0tICovCisrCisrI2RlZmluZSBEV0FSRjJfVU5XSU5EX0lORk8gMAorKworKworKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKKysgKiBBc3NlbWJsZXIgQ29tbWFuZHMgZm9yIEFsaWdubWVudAorKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisrCisrI2RlZmluZSBBU01fT1VUUFVUX0FMSUdOKEZJTEUsIExPRykgXAorKyAgZG8geyBcCisrICAgIGZwcmludGYgKChGSUxFKSwgIiVzJWRcbiIsIEFMSUdOX0FTTV9PUCwgKExPRykpOyBcCisrICB9IHdoaWxlICgwKQorKworKworKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKKysgKiBPdXRwdXQgb2YgQXNzZW1ibGVyIEluc3RydWN0aW9ucworKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisrCisrI2RlZmluZSBSRUdJU1RFUl9OQU1FUyBcCisreyBcCisrICAgICJ6ZXJvIiwgXAorKyAgICAiYXQiLCBcCisrICAgICJyMiIsIFwKKysgICAgInIzIiwgXAorKyAgICAicjQiLCBcCisrICAgICJyNSIsIFwKKysgICAgInI2IiwgXAorKyAgICAicjciLCBcCisrICAgICJyOCIsIFwKKysgICAgInI5IiwgXAorKyAgICAicjEwIiwgXAorKyAgICAicjExIiwgXAorKyAgICAicjEyIiwgXAorKyAgICAicjEzIiwgXAorKyAgICAicjE0IiwgXAorKyAgICAicjE1IiwgXAorKyAgICAicjE2IiwgXAorKyAgICAicjE3IiwgXAorKyAgICAicjE4IiwgXAorKyAgICAicjE5IiwgXAorKyAgICAicjIwIiwgXAorKyAgICAicjIxIiwgXAorKyAgICAicjIyIiwgXAorKyAgICAicjIzIiwgXAorKyAgICAicjI0IiwgXAorKyAgICAicjI1IiwgXAorKyAgICAiZ3AiLCBcCisrICAgICJzcCIsIFwKKysgICAgImZwIiwgXAorKyAgICAidGEiLCBcCisrICAgICJiYSIsIFwKKysgICAgInJhIiwgXAorKyAgICAic3RhdHVzIiwgXAorKyAgICAiZXN0YXR1cyIsIFwKKysgICAgImJzdGF0dXMiLCBcCisrICAgICJpcHJpIiwgXAorKyAgICAiZWNhdXNlIiwgXAorKyAgICAicGMiLCBcCisrICAgICJyYXAiLCBcCisrICAgICJmYWtlX2ZwIiwgXAorKyAgICAiZmFrZV9hcCIsIFwKKyt9CisrCisrI2RlZmluZSBBU01fT1VUUFVUX09QQ09ERShTVFJFQU0sIFBUUilcCisrICAgKFBUUikgPSBhc21fb3V0cHV0X29wY29kZSAoU1RSRUFNLCBQVFIpCisrCisrI2RlZmluZSBQUklOVF9PUEVSQU5EKFNUUkVBTSwgWCwgQ09ERSkgXAorKyAgICBuaW9zMl9wcmludF9vcGVyYW5kIChTVFJFQU0sIFgsIENPREUpCisrCisrI2RlZmluZSBQUklOVF9PUEVSQU5EX0FERFJFU1MoU1RSRUFNLCBYKSBcCisrICAgIG5pb3MyX3ByaW50X29wZXJhbmRfYWRkcmVzcyAoU1RSRUFNLCBYKQorKworKyNkZWZpbmUgQVNNX09VVFBVVF9BRERSX1ZFQ19FTFQoRklMRSwgVkFMVUUpICBcCisrZG8geyBmcHV0cyAoaW50ZWdlcl9hc21fb3AgKFBPSU5URVJfU0laRSAvIEJJVFNfUEVSX1VOSVQsIFRSVUUpLCBGSUxFKTsgXAorKyAgICAgZnByaW50ZiAoRklMRSwgIi5MJXVcbiIsICh1bnNpZ25lZCkgKFZBTFVFKSk7ICAgICAgICAgICAgICAgXAorKyAgIH0gd2hpbGUgKDApCisrCisrCisrLyogLS0tLS0tLS0tLS0tICoKKysgKiBMYWJlbCBPdXRwdXQKKysgKiAtLS0tLS0tLS0tLS0gKi8KKysKKysKKysvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKKysgKiBEaXZpZGluZyB0aGUgT3V0cHV0IGludG8gU2VjdGlvbnMgKFRleHRzLCBEYXRhLCAuLi4pCisrICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworKworKy8qIE91dHB1dCBiZWZvcmUgcmVhZC1vbmx5IGRhdGEuICAqLworKyNkZWZpbmUgVEVYVF9TRUNUSU9OX0FTTV9PUCAoIlx0LnNlY3Rpb25cdC50ZXh0IikKKysKKysvKiBPdXRwdXQgYmVmb3JlIHdyaXRhYmxlIGRhdGEuICAqLworKyNkZWZpbmUgREFUQV9TRUNUSU9OX0FTTV9PUCAoIlx0LnNlY3Rpb25cdC5kYXRhIikKKysKKysKKysvKiBEZWZhdWx0IHRoZSBkZWZpbml0aW9uIG9mICJzbWFsbCBkYXRhIiB0byA4IGJ5dGVzLiAqLworKy8qID8/PyBIb3cgY29tZSBJIGNhbid0IHVzZSBIT1NUX1dJREVfSU5UIGhlcmU/ICovCisrZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbmlvczJfc2VjdGlvbl90aHJlc2hvbGQ7CisrI2RlZmluZSBOSU9TMl9ERUZBVUxUX0dWQUxVRSA4CisrCisrCisrCisrLyogVGhpcyBzYXlzIGhvdyB0byBvdXRwdXQgYXNzZW1ibGVyIGNvZGUgdG8gZGVjbGFyZSBhbgorKyAgIHVuaW5pdGlhbGl6ZWQgZXh0ZXJuYWwgbGlua2FnZSBkYXRhIG9iamVjdC4gIFVuZGVyIFNWUjQsCisrICAgdGhlIGxpbmtlciBzZWVtcyB0byB3YW50IHRoZSBhbGlnbm1lbnQgb2YgZGF0YSBvYmplY3RzCisrICAgdG8gZGVwZW5kIG9uIHRoZWlyIHR5cGVzLiAgV2UgZG8gZXhhY3RseSB0aGF0IGhlcmUuICAqLworKworKyN1bmRlZiBDT01NT05fQVNNX09QCisrI2RlZmluZSBDT01NT05fQVNNX09QCSJcdC5jb21tXHQiCisrCisrI3VuZGVmICBBU01fT1VUUFVUX0FMSUdORURfQ09NTU9OCisrI2RlZmluZSBBU01fT1VUUFVUX0FMSUdORURfQ09NTU9OKEZJTEUsIE5BTUUsIFNJWkUsIEFMSUdOKQkJXAorK2RvIAkJCQkJCQkJCVwKKyt7CQkJCQkJCQkJXAorKyAgaWYgKChTSVpFKSA8PSBuaW9zMl9zZWN0aW9uX3RocmVzaG9sZCkJCQkJXAorKyAgICB7CQkJCQkJCQkJXAorKyAgICAgIG5hbWVkX3NlY3Rpb24gKDAsICIuc2JzcyIsIDApOwkJCQkJXAorKyAgICAgICgqdGFyZ2V0bS5hc21fb3V0Lmdsb2JhbGl6ZV9sYWJlbCkgKEZJTEUsIE5BTUUpOwkJCVwKKysgICAgICBBU01fT1VUUFVUX1RZUEVfRElSRUNUSVZFIChGSUxFLCBOQU1FLCAib2JqZWN0Iik7CQkJXAorKyAgICAgIGlmICghZmxhZ19pbmhpYml0X3NpemVfZGlyZWN0aXZlKQkJCQkJXAorKwlBU01fT1VUUFVUX1NJWkVfRElSRUNUSVZFIChGSUxFLCBOQU1FLCBTSVpFKTsJCQlcCisrICAgICAgQVNNX09VVFBVVF9BTElHTiAoKEZJTEUpLCBleGFjdF9sb2cyKChBTElHTikgLyBCSVRTX1BFUl9VTklUKSk7CVwKKysgICAgICBBU01fT1VUUFVUX0xBQkVMKEZJTEUsIE5BTUUpOwkJCQkJXAorKyAgICAgIEFTTV9PVVRQVVRfU0tJUCgoRklMRSksIChTSVpFKSA/IChTSVpFKSA6IDEpOwkJCVwKKysgICAgfQkJCQkJCQkJCVwKKysgIGVsc2UJCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgZnByaW50ZiAoKEZJTEUpLCAiJXMiLCBDT01NT05fQVNNX09QKTsJCQkJXAorKyAgICAgIGFzc2VtYmxlX25hbWUgKChGSUxFKSwgKE5BTUUpKTsJCQkJCVwKKysgICAgICBmcHJpbnRmICgoRklMRSksICIsIkhPU1RfV0lERV9JTlRfUFJJTlRfVU5TSUdORUQiLCV1XG4iLCAoU0laRSksIChBTElHTikgLyBCSVRTX1BFUl9VTklUKTsJXAorKyAgICB9CQkJCQkJCQkJXAorK30JCQkJCQkJCQlcCisrd2hpbGUgKDApCisrCisrCisrLyogVGhpcyBzYXlzIGhvdyB0byBvdXRwdXQgYXNzZW1ibGVyIGNvZGUgdG8gZGVjbGFyZSBhbgorKyAgIHVuaW5pdGlhbGl6ZWQgaW50ZXJuYWwgbGlua2FnZSBkYXRhIG9iamVjdC4gIFVuZGVyIFNWUjQsCisrICAgdGhlIGxpbmtlciBzZWVtcyB0byB3YW50IHRoZSBhbGlnbm1lbnQgb2YgZGF0YSBvYmplY3RzCisrICAgdG8gZGVwZW5kIG9uIHRoZWlyIHR5cGVzLiAgV2UgZG8gZXhhY3RseSB0aGF0IGhlcmUuICAqLworKworKyN1bmRlZiAgQVNNX09VVFBVVF9BTElHTkVEX0xPQ0FMCisrI2RlZmluZSBBU01fT1VUUFVUX0FMSUdORURfTE9DQUwoRklMRSwgTkFNRSwgU0laRSwgQUxJR04pCQlcCisrZG8gewkJCQkJCQkJCVwKKysgIGlmICgoU0laRSkgPD0gbmlvczJfc2VjdGlvbl90aHJlc2hvbGQpCQkJCVwKKysgICAgbmFtZWRfc2VjdGlvbiAoMCwgIi5zYnNzIiwgMCk7CQkJCQlcCisrICBlbHNlCQkJCQkJCQkJXAorKyAgICBuYW1lZF9zZWN0aW9uICgwLCAiLmJzcyIsIDApOwkJCQkJXAorKyAgQVNNX09VVFBVVF9UWVBFX0RJUkVDVElWRSAoRklMRSwgTkFNRSwgIm9iamVjdCIpOwkJCVwKKysgIGlmICghZmxhZ19pbmhpYml0X3NpemVfZGlyZWN0aXZlKQkJCQkJXAorKyAgICBBU01fT1VUUFVUX1NJWkVfRElSRUNUSVZFIChGSUxFLCBOQU1FLCBTSVpFKTsJCQlcCisrICBBU01fT1VUUFVUX0FMSUdOICgoRklMRSksIGV4YWN0X2xvZzIoKEFMSUdOKSAvIEJJVFNfUEVSX1VOSVQpKTsJXAorKyAgQVNNX09VVFBVVF9MQUJFTChGSUxFLCBOQU1FKTsJCQkJCQlcCisrICBBU01fT1VUUFVUX1NLSVAoKEZJTEUpLCAoU0laRSkgPyAoU0laRSkgOiAxKTsJCQkJXAorK30gd2hpbGUgKDApCisrCisrCisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKgorKyAqIE1pc2NlbGxhbmVvdXMgUGFyYW1ldGVycworKyAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrI2RlZmluZSBNT1ZFX01BWCA0CisrCisrI2RlZmluZSBQbW9kZSBTSW1vZGUKKysjZGVmaW5lIEZVTkNUSU9OX01PREUgUUltb2RlCisrCisrI2RlZmluZSBDQVNFX1ZFQ1RPUl9NT0RFIFBtb2RlCisrCisrI2RlZmluZSBUUlVMWV9OT09QX1RSVU5DQVRJT04oT1VUUFJFQywgSU5QUkVDKSAxCisrCisrI2RlZmluZSBMT0FEX0VYVEVORF9PUChNT0RFKSAoWkVST19FWFRFTkQpCisrCisrI2RlZmluZSBXT1JEX1JFR0lTVEVSX09QRVJBVElPTlMKK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9uaW9zMi9uaW9zMi5tZCBnY2MtMy40LjYvZ2NjL2NvbmZpZy9uaW9zMi9uaW9zMi5tZAorLS0tIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvbmlvczIvbmlvczIubWQJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtMy40LjYvZ2NjL2NvbmZpZy9uaW9zMi9uaW9zMi5tZAkyMDA3LTA4LTE1IDIzOjA5OjM2LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwyMDc4IEBACisrOzsgTWFjaGluZSBEZXNjcmlwdGlvbiBmb3IgQWx0ZXJhIE5JT1MgMkcgTklPUzIgdmVyc2lvbi4KKys7OyAgICBDb3B5cmlnaHQgKEMpIDIwMDMgQWx0ZXJhIAorKzs7ICAgIENvbnRyaWJ1dGVkIGJ5IEpvbmFoIEdyYWhhbSAoamdyYWhhbUBhbHRlcmEuY29tKS4KKys7OyAKKys7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgQ0MuCisrOzsgCisrOzsgR05VIENDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKys7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKzs7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKys7OyBhbnkgbGF0ZXIgdmVyc2lvbi4KKys7OyAKKys7OyBHTlUgQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKys7OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKzs7IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKys7OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKzs7IAorKzs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrOzsgYWxvbmcgd2l0aCBHTlUgQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bworKzs7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKys7OyBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrCisrCisrDAorKzsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKzsqCisrOyogY29uc3RhbnRzCisrOyoKKys7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysoZGVmaW5lX2NvbnN0YW50cyBbCisrICAoR1BfUkVHTk8gMjYpCisrICAoU1BfUkVHTk8gMjcpCisrICAoRlBfUkVHTk8gMjgpCisrICAoUkFfUkVHTk8gMzEpCisrICAoUkFQX1JFR05PIDM4KQorKyAgKEZJUlNUX1JFVFZBTF9SRUdOTyAyKQorKyAgKExBU1RfUkVUVkFMX1JFR05PIDMpCisrICAoRklSU1RfQVJHX1JFR05PIDQpCisrICAoTEFTVF9BUkdfUkVHTk8gNykKKysgIChTQ19SRUdOTyAyMykKKysgIChQQ19SRUdOTyAzNykKKysgIChGQUtFX0ZQX1JFR05PIDM5KQorKyAgKEZBS0VfQVBfUkVHTk8gNDApCisrCisrCisrICAoVU5TUEVDX0JMT0NLQUdFIDApCisrICAoVU5TUEVDX0xEQklPIDEpCisrICAoVU5TUEVDX0xEQlVJTyAyKQorKyAgKFVOU1BFQ19MREhJTyAzKQorKyAgKFVOU1BFQ19MREhVSU8gNCkKKysgIChVTlNQRUNfTERXSU8gNSkKKysgIChVTlNQRUNfU1RCSU8gNikKKysgIChVTlNQRUNfU1RISU8gNykKKysgIChVTlNQRUNfU1RXSU8gOCkKKysgIChVTlNQRUNfU1lOQyA5KQorKyAgKFVOU1BFQ19XUkNUTCAxMCkKKysgIChVTlNQRUNfUkRDVEwgMTEpCisrICAKKytdKQorKworKworKwwKKys7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKys7KgorKzsqIGluc3RydWN0aW9uIHNjaGVkdWxlcgorKzsqCisrOyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisrCisrOyBObyBzY2hlZHVsZSBpbmZvIGlzIGN1cnJlbnRseSBhdmFpbGFibGUsIHVzaW5nIGFuIGFzc3VtcHRpb24gdGhhdCBubworKzsgaW5zdHJ1Y3Rpb24gY2FuIHVzZSB0aGUgcmVzdWx0cyBvZiB0aGUgcHJldmlvdXMgaW5zdHJ1Y3Rpb24gd2l0aG91dAorKzsgaW5jdXJpbmcgYSBzdGFsbC4KKysKKys7IGxlbmd0aCBvZiBhbiBpbnN0cnVjdGlvbiAoaW4gYnl0ZXMpCisrKGRlZmluZV9hdHRyICJsZW5ndGgiICIiIChjb25zdF9pbnQgNCkpCisrKGRlZmluZV9hdHRyICJ0eXBlIiAidW5rbm93bixjb21wbGV4LGNvbnRyb2wsYWx1LGNvbmRfYWx1LHN0LGxkLHNoaWZ0LG11bCxkaXYsY3VzdG9tIiAoY29uc3Rfc3RyaW5nICJjb21wbGV4IikpCisrCisrKGRlZmluZV9hc21fYXR0cmlidXRlcworKyBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgIChzZXRfYXR0ciAidHlwZSIgImNvbXBsZXgiKV0pCisrCisrKGRlZmluZV9hdXRvbWF0b24gIm5pb3MyIikKKysoYXV0b21hdGFfb3B0aW9uICJ2IikKKys7KGF1dG9tYXRhX29wdGlvbiAibm8tbWluaW1pemF0aW9uIikKKysoYXV0b21hdGFfb3B0aW9uICJuZGZhIikKKysKKys7IFRoZSBuaW9zMiBwaXBlbGluZSBpcyBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGZvciB0aGUgZmFzdCBtb2RlbC4KKys7IEV2ZXJ5IGFsdSBvcGVyYXRpb24gaXMgcGlwZWxpbmVkIHNvIHRoYXQgYW4gaW5zdHJ1Y3Rpb24gY2FuCisrOyBiZSBpc3N1ZWQgZXZlcnkgY3ljbGUuIEhvd2V2ZXIsIHRoZXJlIGFyZSBzdGlsbCBwb3RlbnRpYWwKKys7IHN0YWxscyB3aGljaCB0aGlzIGRlc2NyaXB0aW9uIHRyaWVzIHRvIGRlYWwgd2l0aC4KKysKKysoZGVmaW5lX2NwdV91bml0ICJjcHUiICJuaW9zMiIpCisrCisrKGRlZmluZV9pbnNuX3Jlc2VydmF0aW9uICJjb21wbGV4IiAxCisrICAoZXFfYXR0ciAidHlwZSIgImNvbXBsZXgiKQorKyAgImNwdSIpCisrCisrKGRlZmluZV9pbnNuX3Jlc2VydmF0aW9uICJjb250cm9sIiAxCisrICAoZXFfYXR0ciAidHlwZSIgImNvbnRyb2wiKQorKyAgImNwdSIpCisrCisrKGRlZmluZV9pbnNuX3Jlc2VydmF0aW9uICJhbHUiIDEKKysgIChlcV9hdHRyICJ0eXBlIiAiYWx1IikKKysgICJjcHUiKQorKworKyhkZWZpbmVfaW5zbl9yZXNlcnZhdGlvbiAiY29uZF9hbHUiIDEKKysgIChlcV9hdHRyICJ0eXBlIiAiY29uZF9hbHUiKQorKyAgImNwdSIpCisrCisrKGRlZmluZV9pbnNuX3Jlc2VydmF0aW9uICJzdCIgMQorKyAgKGVxX2F0dHIgInR5cGUiICJzdCIpCisrICAiY3B1IikKKysgIAorKyhkZWZpbmVfaW5zbl9yZXNlcnZhdGlvbiAiY3VzdG9tIiAxCisrICAoZXFfYXR0ciAidHlwZSIgImN1c3RvbSIpCisrICAiY3B1IikKKysKKys7IHNoaWZ0cywgbXVscyBhbmQgbGRzIGhhdmUgdGhyZWUgY3ljbGUgbGF0ZW5jeQorKyhkZWZpbmVfaW5zbl9yZXNlcnZhdGlvbiAibGQiIDMKKysgIChlcV9hdHRyICJ0eXBlIiAibGQiKQorKyAgImNwdSIpCisrCisrKGRlZmluZV9pbnNuX3Jlc2VydmF0aW9uICJzaGlmdCIgMworKyAgKGVxX2F0dHIgInR5cGUiICJzaGlmdCIpCisrICAiY3B1IikKKysKKysoZGVmaW5lX2luc25fcmVzZXJ2YXRpb24gIm11bCIgMworKyAgKGVxX2F0dHIgInR5cGUiICJtdWwiKQorKyAgImNwdSIpCisrCisrKGRlZmluZV9pbnNuX3Jlc2VydmF0aW9uICJkaXYiIDEKKysgIChlcV9hdHRyICJ0eXBlIiAiZGl2IikKKysgICJjcHUiKQorKworKwwKKys7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKys7KgorKzsqIE1PViBJbnN0cnVjdGlvbnMKKys7KgorKzsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKworKyhkZWZpbmVfZXhwYW5kICJtb3ZxaSIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlFJIDAgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiIikKKysgICAgICAgIChtYXRjaF9vcGVyYW5kOlFJIDEgImdlbmVyYWxfb3BlcmFuZCIgIiIpKV0KKysgICIiCisreworKyAgaWYgKG5pb3MyX2VtaXRfbW92ZV9zZXF1ZW5jZSAob3BlcmFuZHMsIFFJbW9kZSkpCisrICAgIERPTkU7CisrfSkKKysKKysoZGVmaW5lX2luc24gIm1vdnFpX2ludGVybmFsIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6UUkgMCAibm9uaW1tZWRpYXRlX29wZXJhbmQiICI9bSwgcixyLCByIikKKysgICAgICAgIChtYXRjaF9vcGVyYW5kOlFJIDEgImdlbmVyYWxfb3BlcmFuZCIgICAgICAgInJNLG0sck0sSSIpKV0KKysgICIocmVnaXN0ZXJfb3BlcmFuZCAob3BlcmFuZHNbMF0sIFFJbW9kZSkKKysgICAgfHwgcmVnaXN0ZXJfb3BlcmFuZCAob3BlcmFuZHNbMV0sIFFJbW9kZSkKKysgICAgfHwgKEdFVF9DT0RFIChvcGVyYW5kc1sxXSkgPT0gQ09OU1RfSU5UICYmIElOVFZBTCAob3BlcmFuZHNbMV0pID09IDApKSIKKysgICJACisrICAgIHN0YiVvMFxcdCV6MSwgJTAKKysgICAgbGRidSVvMVxcdCUwLCAlMQorKyAgICBtb3ZcXHQlMCwgJXoxCisrICAgIG1vdmlcXHQlMCwgJTEiCisrICBbKHNldF9hdHRyICJ0eXBlIiAic3QsbGQsYWx1LGFsdSIpXSkKKysKKysoZGVmaW5lX2luc24gImxkYmlvIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysJKHVuc3BlY192b2xhdGlsZTpTSSBbKGNvbnN0X2ludCAwKV0gVU5TUEVDX0xEQklPKSkKKysgICAodXNlIChtYXRjaF9vcGVyYW5kOlNJIDEgIm1lbW9yeV9vcGVyYW5kIiAibSIpKV0KKysgICIiCisrICAibGRiaW9cXHQlMCwgJTEiCisrICBbKHNldF9hdHRyICJ0eXBlIiAibGQiKV0pCisrCisrKGRlZmluZV9pbnNuICJsZGJ1aW8iCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkodW5zcGVjX3ZvbGF0aWxlOlNJIFsoY29uc3RfaW50IDApXSBVTlNQRUNfTERCVUlPKSkKKysgICAodXNlIChtYXRjaF9vcGVyYW5kOlNJIDEgIm1lbW9yeV9vcGVyYW5kIiAibSIpKV0KKysgICIiCisrICAibGRidWlvXFx0JTAsICUxIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImxkIildKQorKworKyhkZWZpbmVfaW5zbiAic3RiaW8iCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJtZW1vcnlfb3BlcmFuZCIgIj1tIikKKysJKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpKQorKyAgICh1bnNwZWNfdm9sYXRpbGU6U0kgWyhjb25zdF9pbnQgMCldIFVOU1BFQ19TVEJJTyldCisrICAiIgorKyAgInN0YmlvXFx0JXoxLCAlMCIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJzdCIpXSkKKysKKysKKysoZGVmaW5lX2V4cGFuZCAibW92aGkiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIiIpCisrICAgICAgICAobWF0Y2hfb3BlcmFuZDpISSAxICJnZW5lcmFsX29wZXJhbmQiICIiKSldCisrICAiIgorK3sKKysgIGlmIChuaW9zMl9lbWl0X21vdmVfc2VxdWVuY2UgKG9wZXJhbmRzLCBISW1vZGUpKQorKyAgICBET05FOworK30pCisrCisrKGRlZmluZV9pbnNuICJtb3ZoaV9pbnRlcm5hbCIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiPW0sIHIsciwgcixyIikKKysgICAgICAgIChtYXRjaF9vcGVyYW5kOkhJIDEgImdlbmVyYWxfb3BlcmFuZCIgICAgICAgInJNLG0sck0sSSxKIikpXQorKyAgIihyZWdpc3Rlcl9vcGVyYW5kIChvcGVyYW5kc1swXSwgSEltb2RlKQorKyAgICB8fCByZWdpc3Rlcl9vcGVyYW5kIChvcGVyYW5kc1sxXSwgSEltb2RlKQorKyAgICB8fCAoR0VUX0NPREUgKG9wZXJhbmRzWzFdKSA9PSBDT05TVF9JTlQgJiYgSU5UVkFMIChvcGVyYW5kc1sxXSkgPT0gMCkpIgorKyAgIkAKKysgICAgc3RoJW8wXFx0JXoxLCAlMAorKyAgICBsZGh1JW8xXFx0JTAsICUxCisrICAgIG1vdlxcdCUwLCAlejEKKysgICAgbW92aVxcdCUwLCAlMQorKyAgICBtb3Z1aVxcdCUwLCAlMSIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJzdCxsZCxhbHUsYWx1LGFsdSIpXSkKKysKKysoZGVmaW5lX2luc24gImxkaGlvIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysJKHVuc3BlY192b2xhdGlsZTpTSSBbKGNvbnN0X2ludCAwKV0gVU5TUEVDX0xESElPKSkKKysgICAodXNlIChtYXRjaF9vcGVyYW5kOlNJIDEgIm1lbW9yeV9vcGVyYW5kIiAibSIpKV0KKysgICIiCisrICAibGRoaW9cXHQlMCwgJTEiCisrICBbKHNldF9hdHRyICJ0eXBlIiAibGQiKV0pCisrCisrKGRlZmluZV9pbnNuICJsZGh1aW8iCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkodW5zcGVjX3ZvbGF0aWxlOlNJIFsoY29uc3RfaW50IDApXSBVTlNQRUNfTERIVUlPKSkKKysgICAodXNlIChtYXRjaF9vcGVyYW5kOlNJIDEgIm1lbW9yeV9vcGVyYW5kIiAibSIpKV0KKysgICIiCisrICAibGRodWlvXFx0JTAsICUxIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImxkIildKQorKworKyhkZWZpbmVfaW5zbiAic3RoaW8iCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJtZW1vcnlfb3BlcmFuZCIgIj1tIikKKysJKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpKQorKyAgICh1bnNwZWNfdm9sYXRpbGU6U0kgWyhjb25zdF9pbnQgMCldIFVOU1BFQ19TVEhJTyldCisrICAiIgorKyAgInN0aGlvXFx0JXoxLCAlMCIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJzdCIpXSkKKysKKysoZGVmaW5lX2V4cGFuZCAibW92c2kiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIiIpCisrICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAxICJnZW5lcmFsX29wZXJhbmQiICIiKSldCisrICAiIgorK3sKKysgIGlmIChuaW9zMl9lbWl0X21vdmVfc2VxdWVuY2UgKG9wZXJhbmRzLCBTSW1vZGUpKQorKyAgICBET05FOworK30pCisrCisrKGRlZmluZV9pbnNuICJtb3ZzaV9pbnRlcm5hbCIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiPW0sIHIsciwgcixyLHIsciIpCisrICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAxICJnZW5lcmFsX29wZXJhbmQiICAgICAgICJyTSxtLHJNLEksSixTLGkiKSldCisrICAiKHJlZ2lzdGVyX29wZXJhbmQgKG9wZXJhbmRzWzBdLCBTSW1vZGUpCisrICAgIHx8IHJlZ2lzdGVyX29wZXJhbmQgKG9wZXJhbmRzWzFdLCBTSW1vZGUpCisrICAgIHx8IChHRVRfQ09ERSAob3BlcmFuZHNbMV0pID09IENPTlNUX0lOVCAmJiBJTlRWQUwgKG9wZXJhbmRzWzFdKSA9PSAwKSkiCisrICAiQAorKyAgICBzdHclbzBcXHQlejEsICUwCisrICAgIGxkdyVvMVxcdCUwLCAlMQorKyAgICBtb3ZcXHQlMCwgJXoxCisrICAgIG1vdmlcXHQlMCwgJTEKKysgICAgbW92dWlcXHQlMCwgJTEKKysgICAgYWRkaVxcdCUwLCBncCwgJSVncHJlbCglMSkKKysgICAgbW92aGlcXHQlMCwgJUgxXDthZGRpXFx0JTAsICUwLCAlTDEiCisrICBbKHNldF9hdHRyICJ0eXBlIiAic3QsbGQsYWx1LGFsdSxhbHUsYWx1LGFsdSIpXSkKKysKKysoZGVmaW5lX2luc24gImxkd2lvIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysJKHVuc3BlY192b2xhdGlsZTpTSSBbKGNvbnN0X2ludCAwKV0gVU5TUEVDX0xEV0lPKSkKKysgICAodXNlIChtYXRjaF9vcGVyYW5kOlNJIDEgIm1lbW9yeV9vcGVyYW5kIiAibSIpKV0KKysgICIiCisrICAibGR3aW9cXHQlMCwgJTEiCisrICBbKHNldF9hdHRyICJ0eXBlIiAibGQiKV0pCisrCisrKGRlZmluZV9pbnNuICJzdHdpbyIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgIm1lbW9yeV9vcGVyYW5kIiAiPW0iKQorKwkobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIikpCisrICAgKHVuc3BlY192b2xhdGlsZTpTSSBbKGNvbnN0X2ludCAwKV0gVU5TUEVDX1NUV0lPKV0KKysgICIiCisrICAic3R3aW9cXHQlejEsICUwIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgInN0IildKQorKworKworKwwKKys7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKys7KgorKzsqIHplcm8gZXh0ZW5zaW9uCisrOyoKKys7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysKKysKKysoZGVmaW5lX2luc24gInplcm9fZXh0ZW5kaGlzaTIiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIsciIpCisrCSh6ZXJvX2V4dGVuZDpTSSAobWF0Y2hfb3BlcmFuZDpISSAxICJub25pbW1lZGlhdGVfb3BlcmFuZCIgInIsbSIpKSldCisrICAiIgorKyAgIkAKKysgICAgYW5kaVxcdCUwLCAlMSwgMHhmZmZmCisrICAgIGxkaHUlbzFcXHQlMCwgJTEiCisrICBbKHNldF9hdHRyICJ0eXBlIgkiYWx1LGxkIildKQorKworKyhkZWZpbmVfaW5zbiAiemVyb19leHRlbmRxaWhpMiIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9cixyIikKKysJKHplcm9fZXh0ZW5kOkhJIChtYXRjaF9vcGVyYW5kOlFJIDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAicixtIikpKV0KKysgICIiCisrICAiQAorKyAgICBhbmRpXFx0JTAsICUxLCAweGZmCisrICAgIGxkYnUlbzFcXHQlMCwgJTEiCisrICBbKHNldF9hdHRyICJ0eXBlIgkiYWx1LGxkIildKQorKworKyhkZWZpbmVfaW5zbiAiemVyb19leHRlbmRxaXNpMiIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9cixyIikKKysJKHplcm9fZXh0ZW5kOlNJIChtYXRjaF9vcGVyYW5kOlFJIDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAicixtIikpKV0KKysgICIiCisrICAiQAorKyAgICBhbmRpXFx0JTAsICUxLCAweGZmCisrICAgIGxkYnUlbzFcXHQlMCwgJTEiCisrICBbKHNldF9hdHRyICJ0eXBlIgkiYWx1LGxkIildKQorKworKworKwwKKys7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKys7KgorKzsqIHNpZ24gZXh0ZW5zaW9uCisrOyoKKys7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysKKysoZGVmaW5lX2V4cGFuZCAiZXh0ZW5kaGlzaTIiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysJKHNpZ25fZXh0ZW5kOlNJIChtYXRjaF9vcGVyYW5kOkhJIDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiIikpKV0KKysgICIiCisreworKyAgaWYgKG9wdGltaXplICYmIEdFVF9DT0RFIChvcGVyYW5kc1sxXSkgPT0gTUVNKQorKyAgICBvcGVyYW5kc1sxXSA9IGZvcmNlX25vdF9tZW0gKG9wZXJhbmRzWzFdKTsKKysKKysgIGlmIChHRVRfQ09ERSAob3BlcmFuZHNbMV0pICE9IE1FTSkKKysgICAgeworKyAgICAgIHJ0eCBvcDEgICA9IGdlbl9sb3dwYXJ0IChTSW1vZGUsIG9wZXJhbmRzWzFdKTsKKysgICAgICBydHggdGVtcCAgPSBnZW5fcmVnX3J0eCAoU0ltb2RlKTsKKysgICAgICBydHggc2hpZnQgPSBHRU5fSU5UICgxNik7CisrCisrICAgICAgZW1pdF9pbnNuIChnZW5fYXNobHNpMyAodGVtcCwgb3AxLCBzaGlmdCkpOworKyAgICAgIGVtaXRfaW5zbiAoZ2VuX2FzaHJzaTMgKG9wZXJhbmRzWzBdLCB0ZW1wLCBzaGlmdCkpOworKyAgICAgIERPTkU7CisrICAgIH0KKyt9KQorKworKyhkZWZpbmVfaW5zbiAiZXh0ZW5kaGlzaTJfaW50ZXJuYWwiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkoc2lnbl9leHRlbmQ6U0kgKG1hdGNoX29wZXJhbmQ6SEkgMSAibWVtb3J5X29wZXJhbmQiICJtIikpKV0KKysgICIiCisrICAibGRoJW8xXFx0JTAsICUxIgorKyAgWyhzZXRfYXR0ciAidHlwZSIJImxkIildKQorKworKyhkZWZpbmVfZXhwYW5kICJleHRlbmRxaWhpMiIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKwkoc2lnbl9leHRlbmQ6SEkgKG1hdGNoX29wZXJhbmQ6UUkgMSAibm9uaW1tZWRpYXRlX29wZXJhbmQiICIiKSkpXQorKyAgIiIKKyt7CisrICBpZiAob3B0aW1pemUgJiYgR0VUX0NPREUgKG9wZXJhbmRzWzFdKSA9PSBNRU0pCisrICAgIG9wZXJhbmRzWzFdID0gZm9yY2Vfbm90X21lbSAob3BlcmFuZHNbMV0pOworKworKyAgaWYgKEdFVF9DT0RFIChvcGVyYW5kc1sxXSkgIT0gTUVNKQorKyAgICB7CisrICAgICAgcnR4IG9wMCAgID0gZ2VuX2xvd3BhcnQgKFNJbW9kZSwgb3BlcmFuZHNbMF0pOworKyAgICAgIHJ0eCBvcDEgICA9IGdlbl9sb3dwYXJ0IChTSW1vZGUsIG9wZXJhbmRzWzFdKTsKKysgICAgICBydHggdGVtcCAgPSBnZW5fcmVnX3J0eCAoU0ltb2RlKTsKKysgICAgICBydHggc2hpZnQgPSBHRU5fSU5UICgyNCk7CisrCisrICAgICAgZW1pdF9pbnNuIChnZW5fYXNobHNpMyAodGVtcCwgb3AxLCBzaGlmdCkpOworKyAgICAgIGVtaXRfaW5zbiAoZ2VuX2FzaHJzaTMgKG9wMCwgdGVtcCwgc2hpZnQpKTsKKysgICAgICBET05FOworKyAgICB9CisrfSkKKysKKysoZGVmaW5lX2luc24gImV4dGVuZHFpaGkyX2ludGVybmFsIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysJKHNpZ25fZXh0ZW5kOkhJIChtYXRjaF9vcGVyYW5kOlFJIDEgIm1lbW9yeV9vcGVyYW5kIiAibSIpKSldCisrICAiIgorKyAgImxkYiVvMVxcdCUwLCAlMSIKKysgIFsoc2V0X2F0dHIgInR5cGUiCSJsZCIpXSkKKysKKysKKysoZGVmaW5lX2V4cGFuZCAiZXh0ZW5kcWlzaTIiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysJKHNpZ25fZXh0ZW5kOlNJIChtYXRjaF9vcGVyYW5kOlFJIDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiIikpKV0KKysgICIiCisreworKyAgaWYgKG9wdGltaXplICYmIEdFVF9DT0RFIChvcGVyYW5kc1sxXSkgPT0gTUVNKQorKyAgICBvcGVyYW5kc1sxXSA9IGZvcmNlX25vdF9tZW0gKG9wZXJhbmRzWzFdKTsKKysKKysgIGlmIChHRVRfQ09ERSAob3BlcmFuZHNbMV0pICE9IE1FTSkKKysgICAgeworKyAgICAgIHJ0eCBvcDEgICA9IGdlbl9sb3dwYXJ0IChTSW1vZGUsIG9wZXJhbmRzWzFdKTsKKysgICAgICBydHggdGVtcCAgPSBnZW5fcmVnX3J0eCAoU0ltb2RlKTsKKysgICAgICBydHggc2hpZnQgPSBHRU5fSU5UICgyNCk7CisrCisrICAgICAgZW1pdF9pbnNuIChnZW5fYXNobHNpMyAodGVtcCwgb3AxLCBzaGlmdCkpOworKyAgICAgIGVtaXRfaW5zbiAoZ2VuX2FzaHJzaTMgKG9wZXJhbmRzWzBdLCB0ZW1wLCBzaGlmdCkpOworKyAgICAgIERPTkU7CisrICAgIH0KKyt9KQorKworKyhkZWZpbmVfaW5zbiAiZXh0ZW5kcWlzaTJfaW5zbiIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisrCShzaWduX2V4dGVuZDpTSSAobWF0Y2hfb3BlcmFuZDpRSSAxICJtZW1vcnlfb3BlcmFuZCIgIm0iKSkpXQorKyAgIiIKKysgICJsZGIlbzFcXHQlMCwgJTEiCisrICBbKHNldF9hdHRyICJ0eXBlIgkibGQiKV0pCisrCisrCisrDAorKzsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKzsqCisrOyogQXJpdGhtZXRpYyBPcGVyYXRpb25zCisrOyoKKys7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysKKysoZGVmaW5lX2luc24gImFkZHNpMyIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgICAgICAgICI9cixyIikKKysgICAgICAgIChwbHVzOlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIlcixyIikKKysgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgImFyaXRoX29wZXJhbmQiICAgICAicixJIikpKV0KKysgICIiCisrICAiYWRkJWkyXFx0JTAsICUxLCAlejIiCisrICBbKHNldF9hdHRyICJ0eXBlIiAiYWx1IildKQorKworKyhkZWZpbmVfaW5zbiAic3Vic2kzIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgICAgICI9ciIpCisrICAgICAgICAobWludXM6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnX29yXzBfb3BlcmFuZCIgICJyTSIpCisrICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgICJyIikpKV0KKysgICIiCisrICAic3ViXFx0JTAsICV6MSwgJTIiCisrICBbKHNldF9hdHRyICJ0eXBlIiAiYWx1IildKQorKworKyhkZWZpbmVfaW5zbiAibXVsc2kzIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgICAgICAiPXIsciIpCisrICAgICAgICAobXVsdDpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAicixyIikKKysgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgImFyaXRoX29wZXJhbmQiICAgICAgICJyLEkiKSkpXQorKyAgIlRBUkdFVF9IQVNfTVVMIgorKyAgIm11bCVpMlxcdCUwLCAlMSwgJXoyIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgIm11bCIpXSkKKysKKysoZGVmaW5lX2V4cGFuZCAiZGl2c2kzIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgICAgICAiPXIiKQorKyAgICAgICAgKGRpdjpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAgInIiKQorKyAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAgInIiKSkpXQorKyAgIiIKKyt7CisrICBpZiAoIVRBUkdFVF9IQVNfRElWKQorKyAgICB7CisrICAgICAgaWYgKCFUQVJHRVRfRkFTVF9TV19ESVYpCisrCUZBSUw7CisrICAgICAgZWxzZQorKyAgICAgICAgeworKwkgIGlmIChuaW9zMl9lbWl0X2V4cGVuc2l2ZV9kaXYgKG9wZXJhbmRzLCBTSW1vZGUpKQorKwkgICAgRE9ORTsKKysJfQorKyAgICB9CisrfSkKKysKKysoZGVmaW5lX2luc24gImRpdnNpM19pbnNuIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgICAgICAiPXIiKQorKyAgICAgICAgKGRpdjpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAgInIiKQorKyAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAgInIiKSkpXQorKyAgIlRBUkdFVF9IQVNfRElWIgorKyAgImRpdlxcdCUwLCAlMSwgJTIiCisrICBbKHNldF9hdHRyICJ0eXBlIiAiZGl2IildKQorKworKyhkZWZpbmVfaW5zbiAidWRpdnNpMyIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgICAgICAgICAgIj1yIikKKysgICAgICAgICh1ZGl2OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICAgICAiciIpCisrICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICAgICAiciIpKSldCisrICAiVEFSR0VUX0hBU19ESVYiCisrICAiZGl2dVxcdCUwLCAlMSwgJTIiCisrICBbKHNldF9hdHRyICJ0eXBlIiAiZGl2IildKQorKworKyhkZWZpbmVfaW5zbiAic211bHNpM19oaWdocGFydCIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9ciIpCisrCSh0cnVuY2F0ZTpTSQorKwkgKGxzaGlmdHJ0OkRJCisrCSAgKG11bHQ6REkgKHNpZ25fZXh0ZW5kOkRJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICAiciIpKQorKwkJICAgKHNpZ25fZXh0ZW5kOkRJIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICAiciIpKSkKKysJICAoY29uc3RfaW50IDMyKSkpKV0KKysgICJUQVJHRVRfSEFTX01VTFgiCisrICAibXVseHNzXFx0JTAsICUxLCAlMiIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJtdWwiKV0pCisrCisrKGRlZmluZV9pbnNuICJ1bXVsc2kzX2hpZ2hwYXJ0IgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1yIikKKysJKHRydW5jYXRlOlNJCisrCSAobHNoaWZ0cnQ6REkKKysJICAobXVsdDpESSAoemVyb19leHRlbmQ6REkgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgICJyIikpCisrCQkgICAoemVyb19leHRlbmQ6REkgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgICJyIikpKQorKwkgIChjb25zdF9pbnQgMzIpKSkpXQorKyAgIlRBUkdFVF9IQVNfTVVMWCIKKysgICJtdWx4dXVcXHQlMCwgJTEsICUyIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgIm11bCIpXSkKKysKKysKKysoZGVmaW5lX2V4cGFuZCAibXVsc2lkaTMiCisrICAgIFsoc2V0IChzdWJyZWc6U0kgKG1hdGNoX29wZXJhbmQ6REkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpIDApCisrCSAgKG11bHQ6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrCQkgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikpKQorKyAgICAgKHNldCAoc3VicmVnOlNJIChtYXRjaF9kdXAgMCkgNCkKKysJICAodHJ1bmNhdGU6U0kgKGxzaGlmdHJ0OkRJIChtdWx0OkRJIChzaWduX2V4dGVuZDpESSAobWF0Y2hfZHVwIDEpKQorKwkJCQkJICAgICAoc2lnbl9leHRlbmQ6REkgKG1hdGNoX2R1cCAyKSkpCisrCQkJCSAgICAoY29uc3RfaW50IDMyKSkpKV0KKysgICJUQVJHRVRfSEFTX01VTFgiCisrICAiIikKKysKKysoZGVmaW5lX2V4cGFuZCAidW11bHNpZGkzIgorKyAgICBbKHNldCAoc3VicmVnOlNJIChtYXRjaF9vcGVyYW5kOkRJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKSAwKQorKwkgIChtdWx0OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKwkJICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpKSkKKysgICAgIChzZXQgKHN1YnJlZzpTSSAobWF0Y2hfZHVwIDApIDQpCisrCSAgKHRydW5jYXRlOlNJIChsc2hpZnRydDpESSAobXVsdDpESSAoemVyb19leHRlbmQ6REkgKG1hdGNoX2R1cCAxKSkKKysJCQkJCSAgICAgKHplcm9fZXh0ZW5kOkRJIChtYXRjaF9kdXAgMikpKQorKwkJCQkgICAgKGNvbnN0X2ludCAzMikpKSldCisrICAiVEFSR0VUX0hBU19NVUxYIgorKyAgIiIpCisrCisrCisrDAorKzsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKzsqCisrOyogTmVnYXRlIGFuZCBvbmVzIGNvbXBsZW1lbnQKKys7KgorKzsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKworKyhkZWZpbmVfaW5zbiAibmVnc2kyIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgICI9ciIpCisrCShuZWc6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpXQorKyAgIiIKKyt7CisrICBvcGVyYW5kc1syXSA9IGNvbnN0MF9ydHg7CisrICByZXR1cm4gInN1YlxcdCUwLCAlejIsICUxIjsKKyt9CisrICBbKHNldF9hdHRyICJ0eXBlIiAiYWx1IildKQorKworKyhkZWZpbmVfaW5zbiAib25lX2NtcGxzaTIiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAgICAgIj1yIikKKysJKG5vdDpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSldCisrICAiIgorK3sKKysgIG9wZXJhbmRzWzJdID0gY29uc3QwX3J0eDsKKysgIHJldHVybiAibm9yXFx0JTAsICV6MiwgJTEiOworK30KKysgIFsoc2V0X2F0dHIgInR5cGUiICJhbHUiKV0pCisrCisrCisrCisrOyBMb2dpY2FsIE9wZXJhbnRpb25zCisrCisrKGRlZmluZV9pbnNuICJhbmRzaTMiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAgICAgICI9ciwgcixyIikKKysgICAgICAgIChhbmQ6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiVyLCByLHIiKQorKyAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJsb2dpY2FsX29wZXJhbmQiICAgInJNLEosSyIpKSldCisrICAiIgorKyAgIkAKKysgICAgYW5kXFx0JTAsICUxLCAlejIKKysgICAgYW5kJWkyXFx0JTAsICUxLCAlMgorKyAgICBhbmRoJWkyXFx0JTAsICUxLCAlVTIiCisrICBbKHNldF9hdHRyICJ0eXBlIiAiYWx1IildKQorKworKyhkZWZpbmVfaW5zbiAiaW9yc2kzIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgICAgIj1yLCByLHIiKQorKyAgICAgICAgKGlvcjpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAgIiVyLCByLHIiKQorKyAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJsb2dpY2FsX29wZXJhbmQiICAgICJyTSxKLEsiKSkpXQorKyAgIiIKKysgICJACisrICAgIG9yXFx0JTAsICUxLCAlejIKKysgICAgb3IlaTJcXHQlMCwgJTEsICUyCisrICAgIG9yaCVpMlxcdCUwLCAlMSwgJVUyIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImFsdSIpXSkKKysKKysoZGVmaW5lX2luc24gIipub3JzaTMiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAgICAgICAgICAgICAgICI9ciIpCisrICAgICAgICAoYW5kOlNJIChub3Q6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgICIlciIpKQorKyAgICAgICAgICAgICAgICAobm90OlNJIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ19vcl8wX29wZXJhbmQiICAgInJNIikpKSldCisrICAiIgorKyAgIm5vclxcdCUwLCAlMSwgJXoyIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImFsdSIpXSkKKysKKysoZGVmaW5lX2luc24gInhvcnNpMyIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgICAgICAgICI9ciwgcixyIikKKysgICAgICAgICh4b3I6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgICIlciwgcixyIikKKysgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAibG9naWNhbF9vcGVyYW5kIiAgICAick0sSixLIikpKV0KKysgICIiCisrICAiQAorKyAgICB4b3JcXHQlMCwgJTEsICV6MgorKyAgICB4b3IlaTJcXHQlMCwgJTEsICUyCisrICAgIHhvcmglaTJcXHQlMCwgJTEsICVVMiIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJhbHUiKV0pCisrCisrCisrDAorKzsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKzsqCisrOyogU2hpZnRzCisrOyoKKys7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysKKysoZGVmaW5lX2luc24gImFzaGxzaTMiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAgICAgICAgIj1yLHIiKQorKwkoYXNoaWZ0OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyLHIiKQorKwkJICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAic2hpZnRfb3BlcmFuZCIgICAgInIsTCIpKSldCisrICAiIgorKyAgInNsbCVpMlxcdCUwLCAlMSwgJXoyIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgInNoaWZ0IildKQorKworKyhkZWZpbmVfaW5zbiAiYXNocnNpMyIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgICAgICAgICAgICI9cixyIikKKysJKGFzaGlmdHJ0OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyLHIiKQorKwkJICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJzaGlmdF9vcGVyYW5kIiAgICAicixMIikpKV0KKysgICIiCisrICAic3JhJWkyXFx0JTAsICUxLCAlejIiCisrICBbKHNldF9hdHRyICJ0eXBlIiAic2hpZnQiKV0pCisrCisrKGRlZmluZV9pbnNuICJsc2hyc2kzIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgICAgICAgIj1yLHIiKQorKwkobHNoaWZ0cnQ6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIsciIpCisrCQkgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgInNoaWZ0X29wZXJhbmQiICAgICJyLEwiKSkpXQorKyAgIiIKKysgICJzcmwlaTJcXHQlMCwgJTEsICV6MiIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJzaGlmdCIpXSkKKysKKysoZGVmaW5lX2luc24gInJvdGxzaTMiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAgICAgICAgIj1yLHIiKQorKwkocm90YXRlOlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyLHIiKQorKwkJICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAic2hpZnRfb3BlcmFuZCIgICAgInIsTCIpKSldCisrICAiIgorKyAgInJvbCVpMlxcdCUwLCAlMSwgJXoyIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgInNoaWZ0IildKQorKworKyhkZWZpbmVfaW5zbiAicm90cnNpMyIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgICAgICAgICAgICI9cixyIikKKysJKHJvdGF0ZXJ0OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyLHIiKQorKwkJICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAicixyIikpKV0KKysgICIiCisrICAicm9yXFx0JTAsICUxLCAlMiIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJzaGlmdCIpXSkKKysKKysoZGVmaW5lX2luc24gIipzaGlmdF9tdWxfY29uc3RhbnRzIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgICAgICAgICAgICAgICAiPXIiKQorKwkoYXNoaWZ0OlNJIChtdWx0OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICAiciIpCisrCQkgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJjb25zdF9pbnRfb3BlcmFuZCIgIkkiKSkKKysJCSAgIChtYXRjaF9vcGVyYW5kOlNJIDMgICAgICAgICAgImNvbnN0X2ludF9vcGVyYW5kIiAiSSIpKSldCisrICAiVEFSR0VUX0hBU19NVUwgJiYgU01BTExfSU5UIChJTlRWQUwgKG9wZXJhbmRzWzJdKSA8PCBJTlRWQUwgKG9wZXJhbmRzWzNdKSkiCisreworKyAgSE9TVF9XSURFX0lOVCBtdWwgPSBJTlRWQUwgKG9wZXJhbmRzWzJdKSA8PCBJTlRWQUwgKG9wZXJhbmRzWzNdKTsKKysgIHJ0eCBvcHNbM107CisrICAKKysgIG9wc1swXSA9IG9wZXJhbmRzWzBdOworKyAgb3BzWzFdID0gb3BlcmFuZHNbMV07CisrICBvcHNbMl0gPSBHRU5fSU5UIChtdWwpOworKyAgCisrICBvdXRwdXRfYXNtX2luc24gKCJtdWxpXHQlMCwgJTEsICUyIiwgb3BzKTsKKysgIHJldHVybiAiIjsKKyt9CisrICBbKHNldF9hdHRyICJ0eXBlIiAibXVsIildKQorKworKworKworKwwKKys7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKys7KgorKzsqIFByb2xvZ3VlLCBFcGlsb2d1ZSBhbmQgUmV0dXJuCisrOyoKKys7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysKKysoZGVmaW5lX2V4cGFuZCAicHJvbG9ndWUiCisrICBbKGNvbnN0X2ludCAxKV0KKysgICIiCisreworKyAgZXhwYW5kX3Byb2xvZ3VlICgpOworKyAgRE9ORTsKKyt9KQorKworKyhkZWZpbmVfZXhwYW5kICJlcGlsb2d1ZSIKKysgIFsocmV0dXJuKV0KKysgICIiCisreworKyAgZXhwYW5kX2VwaWxvZ3VlIChmYWxzZSk7CisrICBET05FOworK30pCisrCisrKGRlZmluZV9leHBhbmQgInNpYmNhbGxfZXBpbG9ndWUiCisrICBbKHJldHVybildCisrICAiIgorK3sKKysgIGV4cGFuZF9lcGlsb2d1ZSAodHJ1ZSk7CisrICBET05FOworK30pCisrCisrKGRlZmluZV9pbnNuICJyZXR1cm4iCisrICBbKHJldHVybildCisrICAicmVsb2FkX2NvbXBsZXRlZCAmJiBuaW9zMl9jYW5fdXNlX3JldHVybl9pbnNuICgpIgorKyAgInJldFxcdCIKKyspCisrCisrKGRlZmluZV9pbnNuICJyZXR1cm5fZnJvbV9lcGlsb2d1ZSIKKysgIFsodXNlIChtYXRjaF9vcGVyYW5kIDAgInBtb2RlX3JlZ2lzdGVyX29wZXJhbmQiICIiKSkKKysgICAocmV0dXJuKV0KKysgICJyZWxvYWRfY29tcGxldGVkIgorKyAgInJldFxcdCIKKyspCisrCisrOzsgQmxvY2sgYW55IGluc25zIGZyb20gYmVpbmcgbW92ZWQgYmVmb3JlIHRoaXMgcG9pbnQsIHNpbmNlIHRoZQorKzs7IHByb2ZpbGluZyBjYWxsIHRvIG1jb3VudCBjYW4gdXNlIHZhcmlvdXMgcmVnaXN0ZXJzIHRoYXQgYXJlbid0CisrOzsgc2F2ZWQgb3IgdXNlZCB0byBwYXNzIGFyZ3VtZW50cy4KKysKKysoZGVmaW5lX2luc24gImJsb2NrYWdlIgorKyAgWyh1bnNwZWNfdm9sYXRpbGUgWyhjb25zdF9pbnQgMCldIFVOU1BFQ19CTE9DS0FHRSldCisrICAiIgorKyAgIiIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJ1bmtub3duIikKKysgICAoc2V0X2F0dHIgImxlbmd0aCIgIjAiKV0pCisrCisrCisrDAorKzsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKzsqCisrOyogSnVtcHMgYW5kIENhbGxzCisrOyoKKys7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysKKysoZGVmaW5lX2luc24gImluZGlyZWN0X2p1bXAiCisrICBbKHNldCAocGMpIChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpXQorKyAgIiIKKysgICJqbXBcXHQlMCIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjb250cm9sIildKQorKworKyhkZWZpbmVfaW5zbiAianVtcCIKKysgIFsoc2V0IChwYykKKysgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMCAiIiAiIikpKV0KKysgICIiCisrICAiYnJcXHQlMCIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjb250cm9sIildKQorKworKworKyhkZWZpbmVfaW5zbiAiaW5kaXJlY3RfY2FsbCIKKysgIFsoY2FsbCAobWVtOlFJIChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpCisrICAgICAgICAgKG1hdGNoX29wZXJhbmQgMSAiIiAiIikpCisrICAgKGNsb2JiZXIgKHJlZzpTSSBSQV9SRUdOTykpXQorKyAgIiIKKysgICJjYWxsclxcdCUwIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImNvbnRyb2wiKV0pCisrCisrKGRlZmluZV9pbnNuICJpbmRpcmVjdF9jYWxsX3ZhbHVlIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQgMCAiIiAiIikKKysgICAgICAgIChjYWxsIChtZW06UUkgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkKKysgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kIDIgIiIgIiIpKSkKKysgICAoY2xvYmJlciAocmVnOlNJIFJBX1JFR05PKSldCisrICAiIgorKyAgImNhbGxyXFx0JTEiCisrKQorKworKyhkZWZpbmVfZXhwYW5kICJjYWxsIgorKyAgWyhwYXJhbGxlbCBbKGNhbGwgKG1hdGNoX29wZXJhbmQgMCAiIiAiIikKKysgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kIDEgIiIgIiIpKQorKyAgICAgICAgICAgICAgKGNsb2JiZXIgKHJlZzpTSSBSQV9SRUdOTykpXSldCisrICAiIgorKyAgIiIpCisrCisrKGRlZmluZV9leHBhbmQgImNhbGxfdmFsdWUiCisrICBbKHBhcmFsbGVsIFsoc2V0IChtYXRjaF9vcGVyYW5kIDAgIiIgIiIpCisrICAgICAgICAgICAgICAgICAgIChjYWxsIChtYXRjaF9vcGVyYW5kIDEgIiIgIiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kIDIgIiIgIiIpKSkKKysgICAgICAgICAgICAgIChjbG9iYmVyIChyZWc6U0kgUkFfUkVHTk8pKV0pXQorKyAgIiIKKysgICIiKQorKworKyhkZWZpbmVfaW5zbiAiKmNhbGwiCisrICBbKGNhbGwgKG1lbTpRSSAobWF0Y2hfb3BlcmFuZDpTSSAwICJpbW1lZGlhdGVfb3BlcmFuZCIgImkiKSkKKysgICAgICAgICAobWF0Y2hfb3BlcmFuZCAxICIiICIiKSkKKysgICAoY2xvYmJlciAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKSldCisrICAiIgorKyAgImNhbGxcXHQlMCIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjb250cm9sIildKQorKworKyhkZWZpbmVfaW5zbiAiKmNhbGxfdmFsdWUiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZCAwICIiICIiKQorKyAgICAgICAgKGNhbGwgKG1lbTpRSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJpbW1lZGlhdGVfb3BlcmFuZCIgImkiKSkKKysgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kIDIgIiIgIiIpKSkKKysgICAoY2xvYmJlciAobWF0Y2hfb3BlcmFuZDpTSSAzICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKSldCisrICAiIgorKyAgImNhbGxcXHQlMSIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjb250cm9sIildKQorKworKyhkZWZpbmVfZXhwYW5kICJzaWJjYWxsIgorKyAgWyhwYXJhbGxlbCBbKGNhbGwgKG1hdGNoX29wZXJhbmQgMCAiIiAiIikKKysJCSAgICAobWF0Y2hfb3BlcmFuZCAxICIiICIiKSkKKysJICAgICAgKHJldHVybikKKysJICAgICAgKHVzZSAobWF0Y2hfb3BlcmFuZCAyICIiICIiKSldKV0KKysgICIiCisrICB7CisrICAgIFhFWFAgKG9wZXJhbmRzWzBdLCAwKSA9IGNvcHlfdG9fbW9kZV9yZWcgKFNJbW9kZSwgWEVYUCAob3BlcmFuZHNbMF0sIDApKTsKKysKKysgICAgaWYgKG9wZXJhbmRzWzJdID09IE5VTExfUlRYKQorKyAgICAgIG9wZXJhbmRzWzJdID0gY29uc3QwX3J0eDsKKysgIH0KKyspCisrCisrKGRlZmluZV9leHBhbmQgInNpYmNhbGxfdmFsdWUiCisrICBbKHBhcmFsbGVsIFsoc2V0IChtYXRjaF9vcGVyYW5kIDAgIiIgIiIpCisrCQkgICAoY2FsbCAobWF0Y2hfb3BlcmFuZCAxICIiICIiKQorKwkJCSAobWF0Y2hfb3BlcmFuZCAyICIiICIiKSkpCisrCSAgICAgIChyZXR1cm4pCisrCSAgICAgICh1c2UgKG1hdGNoX29wZXJhbmQgMyAiIiAiIikpXSldCisrICAiIgorKyAgeworKyAgICBYRVhQIChvcGVyYW5kc1sxXSwgMCkgPSBjb3B5X3RvX21vZGVfcmVnIChTSW1vZGUsIFhFWFAgKG9wZXJhbmRzWzFdLCAwKSk7CisrCisrICAgIGlmIChvcGVyYW5kc1szXSA9PSBOVUxMX1JUWCkKKysgICAgICBvcGVyYW5kc1szXSA9IGNvbnN0MF9ydHg7CisrICB9CisrKQorKworKyhkZWZpbmVfaW5zbiAic2liY2FsbF9pbnNuIgorKyBbKGNhbGwgKG1lbTpRSSAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKQorKwkobWF0Y2hfb3BlcmFuZCAxICIiICIiKSkKKysgIChyZXR1cm4pCisrICAodXNlIChtYXRjaF9vcGVyYW5kIDIgIiIgIiIpKV0KKysgICIiCisrICAiam1wXFx0JTAiCisrKQorKworKyhkZWZpbmVfaW5zbiAic2liY2FsbF92YWx1ZV9pbnNuIgorKyBbKHNldCAobWF0Y2hfb3BlcmFuZCAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysgICAgICAgKGNhbGwgKG1lbTpRSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKQorKwkgICAgIChtYXRjaF9vcGVyYW5kIDIgIiIgIiIpKSkKKysgIChyZXR1cm4pCisrICAodXNlIChtYXRjaF9vcGVyYW5kIDMgIiIgIiIpKV0KKysgICIiCisrICAiam1wXFx0JTEiCisrKQorKworKworKworKworKyhkZWZpbmVfZXhwYW5kICJ0YWJsZWp1bXAiCisrICBbKHBhcmFsbGVsIFsoc2V0IChwYykgKG1hdGNoX29wZXJhbmQgMCAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkKKysgICAgICAgICAgICAgICh1c2UgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAxICIiICIiKSkpXSldCisrICAiIgorKyAgIiIKKyspCisrCisrKGRlZmluZV9pbnNuICIqdGFibGVqdW1wIgorKyAgWyhzZXQgKHBjKQorKwkobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKQorKyAgICh1c2UgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAxICIiICIiKSkpXQorKyAgIiIKKysgICJqbXBcXHQlMCIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjb250cm9sIildKQorKworKworKwwKKys7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKys7KgorKzsqIENvbXBhcmlzb25zCisrOyoKKys7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKys7OyBGbG93IGhlcmUgaXMgcmF0aGVyIGNvbXBsZXggKGJhc2VkIG9uIE1JUFMpOgorKzs7CisrOzsgIDEpCVRoZSBjbXB7c2ksZGksc2YsZGZ9IHJvdXRpbmUgaXMgY2FsbGVkLiAgSXQgZGVwb3NpdHMgdGhlCisrOzsJYXJndW1lbnRzIGludG8gdGhlIGJyYW5jaF9jbXAgYXJyYXksIGFuZCB0aGUgdHlwZSBpbnRvCisrOzsJYnJhbmNoX3R5cGUuICBObyBSVEwgaXMgZ2VuZXJhdGVkLgorKzs7CisrOzsgIDIpCVRoZSBhcHByb3ByaWF0ZSBicmFuY2ggZGVmaW5lX2V4cGFuZCBpcyBjYWxsZWQsIHdoaWNoIHRoZW4KKys7OwljcmVhdGVzIHRoZSBhcHByb3ByaWF0ZSBSVEwgZm9yIHRoZSBjb21wYXJpc29uIGFuZCBicmFuY2guCisrOzsJRGlmZmVyZW50IENDIG1vZGVzIGFyZSB1c2VkLCBiYXNlZCBvbiB3aGF0IHR5cGUgb2YgYnJhbmNoIGlzCisrOzsJZG9uZSwgc28gdGhhdCB3ZSBjYW4gY29uc3RyYWluIHRoaW5ncyBhcHByb3ByaWF0ZWx5LiAgVGhlcmUKKys7OwlhcmUgYXNzdW1wdGlvbnMgaW4gdGhlIHJlc3Qgb2YgR0NDIHRoYXQgYnJlYWsgaWYgd2UgZm9sZCB0aGUKKys7OwlvcGVyYW5kcyBpbnRvIHRoZSBicmFuY2hzIGZvciBpbnRlZ2VyIG9wZXJhdGlvbnMsIGFuZCB1c2UgY2MwCisrOzsJZm9yIGZsb2F0aW5nIHBvaW50LCBzbyB3ZSB1c2UgdGhlIGZwIHN0YXR1cyByZWdpc3RlciBpbnN0ZWFkLgorKzs7CUlmIG5lZWRlZCwgYW4gYXBwcm9wcmlhdGUgdGVtcG9yYXJ5IGlzIGNyZWF0ZWQgdG8gaG9sZCB0aGUKKys7OwlvZiB0aGUgaW50ZWdlciBjb21wYXJlLgorKworKyhkZWZpbmVfZXhwYW5kICJjbXBzaSIKKysgIFsoc2V0IChjYzApCisrCShjb21wYXJlOkNDIChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKwkJICAgIChtYXRjaF9vcGVyYW5kOlNJIDEgImFyaXRoX29wZXJhbmQiICIiKSkpXQorKyAgIiIKKyt7CisrICBicmFuY2hfY21wWzBdID0gb3BlcmFuZHNbMF07CisrICBicmFuY2hfY21wWzFdID0gb3BlcmFuZHNbMV07CisrICBicmFuY2hfdHlwZSA9IENNUF9TSTsKKysgIERPTkU7CisrfSkKKysKKysoZGVmaW5lX2V4cGFuZCAidHN0c2kiCisrICBbKHNldCAoY2MwKQorKwkobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikpXQorKyAgIiIKKyt7CisrICBicmFuY2hfY21wWzBdID0gb3BlcmFuZHNbMF07CisrICBicmFuY2hfY21wWzFdID0gY29uc3QwX3J0eDsKKysgIGJyYW5jaF90eXBlID0gQ01QX1NJOworKyAgRE9ORTsKKyt9KQorKworKwwKKys7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKys7KgorKzsqIHNldHRpbmcgYSByZWdpc3RlciBmcm9tIGEgY29tcGFyaXNvbgorKzsqCisrOyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisrCisrKGRlZmluZV9leHBhbmQgInNlcSIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisrCShlcTpTSSAobWF0Y2hfZHVwIDEpCisrCSAgICAgICAobWF0Y2hfZHVwIDIpKSldCisrICAiIgorK3sKKysgIGlmIChicmFuY2hfdHlwZSAhPSBDTVBfU0kpCisrICAgIEZBSUw7CisrCisrICAvKiBzZXQgdXAgb3BlcmFuZHMgZnJvbSBjb21wYXJlLiAgKi8KKysgIG9wZXJhbmRzWzFdID0gYnJhbmNoX2NtcFswXTsKKysgIG9wZXJhbmRzWzJdID0gYnJhbmNoX2NtcFsxXTsKKysKKysgIGdlbl9pbnRfcmVsYXRpb25hbCAoRVEsIG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0sIE5VTExfUlRYKTsKKysgIERPTkU7CisrfSkKKysKKysKKysoZGVmaW5lX2luc24gIipzZXEiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAgICAgIj1yIikKKysJKGVxOlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ19vcl8wX29wZXJhbmQiICIlck0iKQorKwkgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAiYXJpdGhfb3BlcmFuZCIgICAgICJySSIpKSldCisrICAiIgorKyAgImNtcGVxJWkyXFx0JTAsICV6MSwgJXoyIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImFsdSIpXSkKKysKKysKKysoZGVmaW5lX2V4cGFuZCAic25lIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysJKG5lOlNJIChtYXRjaF9kdXAgMSkKKysJICAgICAgIChtYXRjaF9kdXAgMikpKV0KKysgICIiCisreworKyAgaWYgKGJyYW5jaF90eXBlICE9IENNUF9TSSkKKysgICAgRkFJTDsKKysKKysgIC8qIHNldCB1cCBvcGVyYW5kcyBmcm9tIGNvbXBhcmUuICAqLworKyAgb3BlcmFuZHNbMV0gPSBicmFuY2hfY21wWzBdOworKyAgb3BlcmFuZHNbMl0gPSBicmFuY2hfY21wWzFdOworKworKyAgZ2VuX2ludF9yZWxhdGlvbmFsIChORSwgb3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSwgTlVMTF9SVFgpOworKyAgRE9ORTsKKyt9KQorKworKworKyhkZWZpbmVfaW5zbiAiKnNuZSIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgICAgICAiPXIiKQorKwkobmU6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnX29yXzBfb3BlcmFuZCIgIiVyTSIpCisrCSAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJhcml0aF9vcGVyYW5kIiAgICAgInJJIikpKV0KKysgICIiCisrICAiY21wbmUlaTJcXHQlMCwgJXoxLCAlejIiCisrICBbKHNldF9hdHRyICJ0eXBlIiAiYWx1IildKQorKworKworKyhkZWZpbmVfZXhwYW5kICJzZ3QiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkoZ3Q6U0kgKG1hdGNoX2R1cCAxKQorKwkgICAgICAgKG1hdGNoX2R1cCAyKSkpXQorKyAgIiIKKyt7CisrICBpZiAoYnJhbmNoX3R5cGUgIT0gQ01QX1NJKQorKyAgICBGQUlMOworKworKyAgLyogc2V0IHVwIG9wZXJhbmRzIGZyb20gY29tcGFyZS4gICovCisrICBvcGVyYW5kc1sxXSA9IGJyYW5jaF9jbXBbMF07CisrICBvcGVyYW5kc1syXSA9IGJyYW5jaF9jbXBbMV07CisrCisrICBnZW5faW50X3JlbGF0aW9uYWwgKEdULCBvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdLCBOVUxMX1JUWCk7CisrICBET05FOworK30pCisrCisrCisrKGRlZmluZV9pbnNuICIqc2d0IgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgICI9ciIpCisrCShndDpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdfb3JfMF9vcGVyYW5kIiAgInJNIikKKysJICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ19vcl8wX29wZXJhbmQiICAick0iKSkpXQorKyAgIiIKKysgICJjbXBsdFxcdCUwLCAlejIsICV6MSIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJhbHUiKV0pCisrCisrCisrKGRlZmluZV9leHBhbmQgInNnZSIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisrCShnZTpTSSAobWF0Y2hfZHVwIDEpCisrCSAgICAgICAobWF0Y2hfZHVwIDIpKSldCisrICAiIgorK3sKKysgIGlmIChicmFuY2hfdHlwZSAhPSBDTVBfU0kpCisrICAgIEZBSUw7CisrCisrICAvKiBzZXQgdXAgb3BlcmFuZHMgZnJvbSBjb21wYXJlLiAgKi8KKysgIG9wZXJhbmRzWzFdID0gYnJhbmNoX2NtcFswXTsKKysgIG9wZXJhbmRzWzJdID0gYnJhbmNoX2NtcFsxXTsKKysKKysgIGdlbl9pbnRfcmVsYXRpb25hbCAoR0UsIG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0sIE5VTExfUlRYKTsKKysgIERPTkU7CisrfSkKKysKKysKKysoZGVmaW5lX2luc24gIipzZ2UiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAgICAgIj1yIikKKysJKGdlOlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ19vcl8wX29wZXJhbmQiICAick0iKQorKwkgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAiYXJpdGhfb3BlcmFuZCIgICAgICJySSIpKSldCisrICAiIgorKyAgImNtcGdlJWkyXFx0JTAsICV6MSwgJXoyIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImFsdSIpXSkKKysKKysoZGVmaW5lX2V4cGFuZCAic2xlIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysJKGxlOlNJIChtYXRjaF9kdXAgMSkKKysJICAgICAgIChtYXRjaF9kdXAgMikpKV0KKysgICIiCisreworKyAgaWYgKGJyYW5jaF90eXBlICE9IENNUF9TSSkKKysgICAgRkFJTDsKKysKKysgIC8qIHNldCB1cCBvcGVyYW5kcyBmcm9tIGNvbXBhcmUuICAqLworKyAgb3BlcmFuZHNbMV0gPSBicmFuY2hfY21wWzBdOworKyAgb3BlcmFuZHNbMl0gPSBicmFuY2hfY21wWzFdOworKworKyAgZ2VuX2ludF9yZWxhdGlvbmFsIChMRSwgb3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSwgTlVMTF9SVFgpOworKyAgRE9ORTsKKyt9KQorKworKworKyhkZWZpbmVfaW5zbiAiKnNsZSIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgICAgICAiPXIiKQorKwkobGU6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnX29yXzBfb3BlcmFuZCIgICJyTSIpCisrCSAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdfb3JfMF9vcGVyYW5kIiAgInJNIikpKV0KKysgICIiCisrICAiY21wZ2VcXHQlMCwgJXoyLCAlejEiCisrICBbKHNldF9hdHRyICJ0eXBlIiAiYWx1IildKQorKworKworKyhkZWZpbmVfZXhwYW5kICJzbHQiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkobHQ6U0kgKG1hdGNoX2R1cCAxKQorKwkgICAgICAgKG1hdGNoX2R1cCAyKSkpXQorKyAgIiIKKyt7CisrICBpZiAoYnJhbmNoX3R5cGUgIT0gQ01QX1NJKQorKyAgICBGQUlMOworKworKyAgLyogc2V0IHVwIG9wZXJhbmRzIGZyb20gY29tcGFyZS4gICovCisrICBvcGVyYW5kc1sxXSA9IGJyYW5jaF9jbXBbMF07CisrICBvcGVyYW5kc1syXSA9IGJyYW5jaF9jbXBbMV07CisrCisrICBnZW5faW50X3JlbGF0aW9uYWwgKExULCBvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdLCBOVUxMX1JUWCk7CisrICBET05FOworK30pCisrCisrCisrKGRlZmluZV9pbnNuICIqc2x0IgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgICI9ciIpCisrCShsdDpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdfb3JfMF9vcGVyYW5kIiAgInJNIikKKysJICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgImFyaXRoX29wZXJhbmQiICAgICAickkiKSkpXQorKyAgIiIKKysgICJjbXBsdCVpMlxcdCUwLCAlejEsICV6MiIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJhbHUiKV0pCisrCisrCisrKGRlZmluZV9leHBhbmQgInNndHUiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkoZ3R1OlNJIChtYXRjaF9kdXAgMSkKKysJICAgICAgICAobWF0Y2hfZHVwIDIpKSldCisrICAiIgorK3sKKysgIGlmIChicmFuY2hfdHlwZSAhPSBDTVBfU0kpCisrICAgIEZBSUw7CisrCisrICAvKiBzZXQgdXAgb3BlcmFuZHMgZnJvbSBjb21wYXJlLiAgKi8KKysgIG9wZXJhbmRzWzFdID0gYnJhbmNoX2NtcFswXTsKKysgIG9wZXJhbmRzWzJdID0gYnJhbmNoX2NtcFsxXTsKKysKKysgIGdlbl9pbnRfcmVsYXRpb25hbCAoR1RVLCBvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdLCBOVUxMX1JUWCk7CisrICBET05FOworK30pCisrCisrCisrKGRlZmluZV9pbnNuICIqc2d0dSIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgICAgICAiPXIiKQorKwkoZ3R1OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ19vcl8wX29wZXJhbmQiICAick0iKQorKwkgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ19vcl8wX29wZXJhbmQiICAick0iKSkpXQorKyAgIiIKKysgICJjbXBsdHVcXHQlMCwgJXoyLCAlejEiCisrICBbKHNldF9hdHRyICJ0eXBlIiAiYWx1IildKQorKworKworKyhkZWZpbmVfZXhwYW5kICJzZ2V1IgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysJKGdldTpTSSAobWF0Y2hfZHVwIDEpCisrCSAgICAgICAgKG1hdGNoX2R1cCAyKSkpXQorKyAgIiIKKyt7CisrICBpZiAoYnJhbmNoX3R5cGUgIT0gQ01QX1NJKQorKyAgICBGQUlMOworKworKyAgLyogc2V0IHVwIG9wZXJhbmRzIGZyb20gY29tcGFyZS4gICovCisrICBvcGVyYW5kc1sxXSA9IGJyYW5jaF9jbXBbMF07CisrICBvcGVyYW5kc1syXSA9IGJyYW5jaF9jbXBbMV07CisrCisrICBnZW5faW50X3JlbGF0aW9uYWwgKEdFVSwgb3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSwgTlVMTF9SVFgpOworKyAgRE9ORTsKKyt9KQorKworKworKyhkZWZpbmVfaW5zbiAiKnNnZXUiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAgICAgIj1yIikKKysJKGdldTpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdfb3JfMF9vcGVyYW5kIiAgInJNIikKKysJICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJ1bnNfYXJpdGhfb3BlcmFuZCIgICAgICJySiIpKSldCisrICAiIgorKyAgImNtcGdldSVpMlxcdCUwLCAlejEsICV6MiIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJhbHUiKV0pCisrCisrKGRlZmluZV9leHBhbmQgInNsZXUiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkobGV1OlNJIChtYXRjaF9kdXAgMSkKKysJICAgICAgICAobWF0Y2hfZHVwIDIpKSldCisrICAiIgorK3sKKysgIGlmIChicmFuY2hfdHlwZSAhPSBDTVBfU0kpCisrICAgIEZBSUw7CisrCisrICAvKiBzZXQgdXAgb3BlcmFuZHMgZnJvbSBjb21wYXJlLiAgKi8KKysgIG9wZXJhbmRzWzFdID0gYnJhbmNoX2NtcFswXTsKKysgIG9wZXJhbmRzWzJdID0gYnJhbmNoX2NtcFsxXTsKKysKKysgIGdlbl9pbnRfcmVsYXRpb25hbCAoTEVVLCBvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdLCBOVUxMX1JUWCk7CisrICBET05FOworK30pCisrCisrCisrKGRlZmluZV9pbnNuICIqc2xldSIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgICAgICAiPXIiKQorKwkobGV1OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ19vcl8wX29wZXJhbmQiICAick0iKQorKwkgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ19vcl8wX29wZXJhbmQiICAick0iKSkpXQorKyAgIiIKKysgICJjbXBnZXVcXHQlMCwgJXoyLCAlejEiCisrICBbKHNldF9hdHRyICJ0eXBlIiAiYWx1IildKQorKworKworKyhkZWZpbmVfZXhwYW5kICJzbHR1IgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysJKGx0dTpTSSAobWF0Y2hfZHVwIDEpCisrCSAgICAgICAgKG1hdGNoX2R1cCAyKSkpXQorKyAgIiIKKyt7CisrICBpZiAoYnJhbmNoX3R5cGUgIT0gQ01QX1NJKQorKyAgICBGQUlMOworKworKyAgLyogc2V0IHVwIG9wZXJhbmRzIGZyb20gY29tcGFyZS4gICovCisrICBvcGVyYW5kc1sxXSA9IGJyYW5jaF9jbXBbMF07CisrICBvcGVyYW5kc1syXSA9IGJyYW5jaF9jbXBbMV07CisrCisrICBnZW5faW50X3JlbGF0aW9uYWwgKExUVSwgb3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSwgTlVMTF9SVFgpOworKyAgRE9ORTsKKyt9KQorKworKworKyhkZWZpbmVfaW5zbiAiKnNsdHUiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAgICAgIj1yIikKKysJKGx0dTpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdfb3JfMF9vcGVyYW5kIiAgInJNIikKKysJICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJ1bnNfYXJpdGhfb3BlcmFuZCIgICAgICJySiIpKSldCisrICAiIgorKyAgImNtcGx0dSVpMlxcdCUwLCAlejEsICV6MiIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJhbHUiKV0pCisrCisrCisrCisrDAorKzsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKzsqCisrOyogYnJhbmNoZXMKKys7KgorKzsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKworKyhkZWZpbmVfaW5zbiAiKmNicmFuY2giCisrICBbKHNldCAocGMpCisrCShpZl90aGVuX2Vsc2UKKysgICAgICAgICAobWF0Y2hfb3BlcmF0b3I6U0kgMCAiY29tcGFyaXNvbl9vcGVyYXRvciIKKysJCQkgICAgWyhtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ19vcl8wX29wZXJhbmQiICJyTSIpCisrCQkJICAgICAobWF0Y2hfb3BlcmFuZDpTSSAzICJyZWdfb3JfMF9vcGVyYW5kIiAick0iKV0pCisrICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDEgIiIgIiIpKQorKyAgICAgICAgKHBjKSkpXQorKyAgIiIKKysgICJiJTBcXHQlejIsICV6MywgJWwxIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImNvbnRyb2wiKV0pCisrCisrCisrKGRlZmluZV9leHBhbmQgImJlcSIKKysgIFsoc2V0IChwYykKKysJKGlmX3RoZW5fZWxzZSAoZXE6Q0MgKGNjMCkKKysJCQkgICAgIChjb25zdF9pbnQgMCkpCisrCQkgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDAgIiIgIiIpKQorKwkJICAgICAgKHBjKSkpXQorKyAgIiIKKyt7CisrICBnZW5faW50X3JlbGF0aW9uYWwgKEVRLCBOVUxMX1JUWCwgYnJhbmNoX2NtcFswXSwgYnJhbmNoX2NtcFsxXSwgb3BlcmFuZHNbMF0pOworKyAgRE9ORTsKKyt9KQorKworKworKyhkZWZpbmVfZXhwYW5kICJibmUiCisrICBbKHNldCAocGMpCisrCShpZl90aGVuX2Vsc2UgKG5lOkNDIChjYzApCisrCQkJICAgICAoY29uc3RfaW50IDApKQorKwkJICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAwICIiICIiKSkKKysJCSAgICAgIChwYykpKV0KKysgICIiCisreworKyAgZ2VuX2ludF9yZWxhdGlvbmFsIChORSwgTlVMTF9SVFgsIGJyYW5jaF9jbXBbMF0sIGJyYW5jaF9jbXBbMV0sIG9wZXJhbmRzWzBdKTsKKysgIERPTkU7CisrfSkKKysKKysKKysoZGVmaW5lX2V4cGFuZCAiYmd0IgorKyAgWyhzZXQgKHBjKQorKwkoaWZfdGhlbl9lbHNlIChndDpDQyAoY2MwKQorKwkJCSAgICAgKGNvbnN0X2ludCAwKSkKKysJCSAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMCAiIiAiIikpCisrCQkgICAgICAocGMpKSldCisrICAiIgorK3sKKysgIGdlbl9pbnRfcmVsYXRpb25hbCAoR1QsIE5VTExfUlRYLCBicmFuY2hfY21wWzBdLCBicmFuY2hfY21wWzFdLCBvcGVyYW5kc1swXSk7CisrICBET05FOworK30pCisrCisrKGRlZmluZV9leHBhbmQgImJnZSIKKysgIFsoc2V0IChwYykKKysJKGlmX3RoZW5fZWxzZSAoZ2U6Q0MgKGNjMCkKKysJCQkgICAgIChjb25zdF9pbnQgMCkpCisrCQkgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDAgIiIgIiIpKQorKwkJICAgICAgKHBjKSkpXQorKyAgIiIKKyt7CisrICBnZW5faW50X3JlbGF0aW9uYWwgKEdFLCBOVUxMX1JUWCwgYnJhbmNoX2NtcFswXSwgYnJhbmNoX2NtcFsxXSwgb3BlcmFuZHNbMF0pOworKyAgRE9ORTsKKyt9KQorKworKyhkZWZpbmVfZXhwYW5kICJibGUiCisrICBbKHNldCAocGMpCisrCShpZl90aGVuX2Vsc2UgKGxlOkNDIChjYzApCisrCQkJICAgICAoY29uc3RfaW50IDApKQorKwkJICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAwICIiICIiKSkKKysJCSAgICAgIChwYykpKV0KKysgICIiCisreworKyAgZ2VuX2ludF9yZWxhdGlvbmFsIChMRSwgTlVMTF9SVFgsIGJyYW5jaF9jbXBbMF0sIGJyYW5jaF9jbXBbMV0sIG9wZXJhbmRzWzBdKTsKKysgIERPTkU7CisrfSkKKysKKysoZGVmaW5lX2V4cGFuZCAiYmx0IgorKyAgWyhzZXQgKHBjKQorKwkoaWZfdGhlbl9lbHNlIChsdDpDQyAoY2MwKQorKwkJCSAgICAgKGNvbnN0X2ludCAwKSkKKysJCSAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMCAiIiAiIikpCisrCQkgICAgICAocGMpKSldCisrICAiIgorK3sKKysgIGdlbl9pbnRfcmVsYXRpb25hbCAoTFQsIE5VTExfUlRYLCBicmFuY2hfY21wWzBdLCBicmFuY2hfY21wWzFdLCBvcGVyYW5kc1swXSk7CisrICBET05FOworK30pCisrCisrCisrKGRlZmluZV9leHBhbmQgImJndHUiCisrICBbKHNldCAocGMpCisrCShpZl90aGVuX2Vsc2UgKGd0dTpDQyAoY2MwKQorKwkJIAkgICAgICAoY29uc3RfaW50IDApKQorKwkJICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAwICIiICIiKSkKKysJCSAgICAgIChwYykpKV0KKysgICIiCisreworKyAgZ2VuX2ludF9yZWxhdGlvbmFsIChHVFUsIE5VTExfUlRYLCBicmFuY2hfY21wWzBdLCBicmFuY2hfY21wWzFdLCBvcGVyYW5kc1swXSk7CisrICBET05FOworK30pCisrCisrKGRlZmluZV9leHBhbmQgImJnZXUiCisrICBbKHNldCAocGMpCisrCShpZl90aGVuX2Vsc2UgKGdldTpDQyAoY2MwKQorKwkJCSAgICAgIChjb25zdF9pbnQgMCkpCisrCQkgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDAgIiIgIiIpKQorKwkJICAgICAgKHBjKSkpXQorKyAgIiIKKyt7CisrICBnZW5faW50X3JlbGF0aW9uYWwgKEdFVSwgTlVMTF9SVFgsIGJyYW5jaF9jbXBbMF0sIGJyYW5jaF9jbXBbMV0sIG9wZXJhbmRzWzBdKTsKKysgIERPTkU7CisrfSkKKysKKysoZGVmaW5lX2V4cGFuZCAiYmxldSIKKysgIFsoc2V0IChwYykKKysJKGlmX3RoZW5fZWxzZSAobGV1OkNDIChjYzApCisrCQkJICAgICAgKGNvbnN0X2ludCAwKSkKKysJCSAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMCAiIiAiIikpCisrCQkgICAgICAocGMpKSldCisrICAiIgorK3sKKysgIGdlbl9pbnRfcmVsYXRpb25hbCAoTEVVLCBOVUxMX1JUWCwgYnJhbmNoX2NtcFswXSwgYnJhbmNoX2NtcFsxXSwgb3BlcmFuZHNbMF0pOworKyAgRE9ORTsKKyt9KQorKworKyhkZWZpbmVfZXhwYW5kICJibHR1IgorKyAgWyhzZXQgKHBjKQorKwkoaWZfdGhlbl9lbHNlIChsdHU6Q0MgKGNjMCkKKysJCQkgICAgICAoY29uc3RfaW50IDApKQorKwkJICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAwICIiICIiKSkKKysJCSAgICAgIChwYykpKV0KKysgICIiCisreworKyAgZ2VuX2ludF9yZWxhdGlvbmFsIChMVFUsIE5VTExfUlRYLCBicmFuY2hfY21wWzBdLCBicmFuY2hfY21wWzFdLCBvcGVyYW5kc1swXSk7CisrICBET05FOworK30pCisrCisrDAorKzsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKzsqCisrOyogU3RyaW5nIGFuZCBCbG9jayBPcGVyYXRpb25zCisrOyoKKys7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysKKys7ID8/PyBUaGlzIGlzIGFsbCByZWFsbHkgYSBoYWNrIHRvIGdldCBEaHJ5c3RvbmUgdG8gd29yayBhcyBmYXN0IGFzIHBvc3NpYmxlCisrOyAgICAgdGhpbmdzIHRvIGJlIGZpeGVkOgorKzsgICAgICAgICogbGV0IHRoZSBjb21waWxlciBjb3JlIGhhbmRsZSBhbGwgb2YgdGhpcywgZm9yIHRoYXQgdG8gd29yayB0aGUgZXh0cmEKKys7ICAgICAgICAgIGFsaWFzaW5nIG5lZWRzIHRvIGJlIGFkZHJlc3NlZC4KKys7ICAgICAgICAqIHdlIHVzZSB0aHJlZSB0ZW1wb3JhcnkgcmVnaXN0ZXJzIGZvciBsb2FkaW5nIGFuZCBzdG9yaW5nIHRvIGVuc3VyZSBubworKzsgICAgICAgICAgbGQgdXNlIHN0YWxscywgdGhpcyBpcyBleGNlc3NpdmUsIGJlY2F1c2UgYWZ0ZXIgdGhlIGZpcnN0IGxkL3N0IG9ubHkKKys7ICAgICAgICAgIHR3byBhcmUgbmVlZGVkLiBPbmx5IHR3byB3b3VsZCBiZSBuZWVkZWQgYWxsIHRoZSB3YXkgdGhyb3VnaCBpZiAKKys7ICAgICAgICAgIHdlIGNvdWxkIHNjaGVkdWxlIHdpdGggb3RoZXIgY29kZS4gQ29uc2lkZXI6CisrOyAgICAgICAgICAgMSAgbGQgJDEsIDAoJHNyYykKKys7ICAgICAgICAgICAyICBsZCAkMiwgNCgkc3JjKQorKzsgICAgICAgICAgIDMgIGxkICQzLCA4KCRzcmMpCisrOyAgICAgICAgICAgNCAgc3QgJDEsIDAoJGRlc3QpCisrOyAgICAgICAgICAgNSAgbGQgJDEsIDEyKCRzcmMpCisrOyAgICAgICAgICAgNiAgc3QgJDIsIDQoJHNyYykKKys7ICAgICAgICAgICA3ICBldGMuCisrOyAgICAgICAgICBUaGUgZmlyc3Qgc3RvcmUgaGFzIHRvIHdhaXQgdW50aWwgNC4gSWYgaXQgZG9lcyBub3QgdGhlcmUgd2lsbCBiZSBvbmUKKys7ICAgICAgICAgIGN5Y2xlIG9mIHN0YWxsaW5nLiBIb3dldmVyLCBpZiBhbnkgb3RoZXIgaW5zdHJ1Y3Rpb24gY291bGQgYmUgcGxhY2VkCisrOyAgICAgICAgICBiZXR3ZWVuIDEgYW5kIDQsICQzIHdvdWxkIG5vdCBiZSBuZWVkZWQuCisrOyAgICAgICAgKiBJbiBzbWFsbCB3ZSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGV2ZXIgZG8gdGhpcyBvdXJzZWxmIGJlY2F1c2UgdGhlcmUKKys7ICAgICAgICAgIGlzIG5vIGxkIHVzZSBzdGFsbC4KKysKKysoZGVmaW5lX2V4cGFuZCAibW92c3Ryc2kiCisrICBbKHBhcmFsbGVsIFsoc2V0IChtYXRjaF9vcGVyYW5kOkJMSyAwICJnZW5lcmFsX29wZXJhbmQiICAiIikKKysJCSAgIChtYXRjaF9vcGVyYW5kOkJMSyAxICJnZW5lcmFsX29wZXJhbmQiICAiIikpCisrCSAgICAgICh1c2UgKG1hdGNoX29wZXJhbmQ6U0kgMiAiY29uc3RfaW50X29wZXJhbmQiICIiKSkKKysJICAgICAgKHVzZSAobWF0Y2hfb3BlcmFuZDpTSSAzICJjb25zdF9pbnRfb3BlcmFuZCIgIiIpKQorKwkgICAgICAoY2xvYmJlciAobWF0Y2hfc2NyYXRjaDpTSSA0ICAgICAgICAgICAgICAgICI9JnIiKSkKKysJICAgICAgKGNsb2JiZXIgKG1hdGNoX3NjcmF0Y2g6U0kgNSAgICAgICAgICAgICAgICAiPSZyIikpCisrCSAgICAgIChjbG9iYmVyIChtYXRjaF9zY3JhdGNoOlNJIDYgICAgICAgICAgICAgICAgIj0mciIpKV0pXQorKyAgIlRBUkdFVF9JTkxJTkVfTUVNQ1BZIgorK3sKKysgIHJ0eCBsZF9hZGRyX3JlZywgc3RfYWRkcl9yZWc7CisrCisrICAvKiBJZiB0aGUgcHJlZGljYXRlIGZvciBvcDIgZmFpbHMgaW4gZXhwci5jOmVtaXRfYmxvY2tfbW92ZV92aWFfbW92c3RyIAorKyAgICAgaXQgdHJ5cyB0byBjb3B5IHRvIGEgcmVnaXN0ZXIsIGJ1dCBkb2VzIG5vdCByZS10cnkgdGhlIHByZWRpY2F0ZS4KKysgICAgID8/PyBJbnRlYWQgb2YgZml4aW5nIGV4cHIuYywgSSBmaXggaXQgaGVyZS4gKi8KKysgIGlmICghY29uc3RfaW50X29wZXJhbmQgKG9wZXJhbmRzWzJdLCBTSW1vZGUpKQorKyAgICBGQUlMOworKworKyAgLyogPz8/IHRoZXJlIGFyZSBzb21lIG1hZ2ljIG51bWJlcnMgd2hpY2ggbmVlZCB0byBiZSBzb3J0ZWQgb3V0IGhlcmUuCisrICAgICAgICAgdGhlIGJhc2lzIGZvciB0aGVtIGlzIG5vdCBpbmNyZWFzaW5nIGNvZGUgc2l6ZSBodWdlbHkgb3IgZ29pbmcKKysgICAgICAgICBvdXQgb2YgcmFuZ2Ugb2Ygb2Zmc2V0IGFkZHJlc3NpbmcgKi8KKysgIGlmIChJTlRWQUwgKG9wZXJhbmRzWzNdKSA8IDQpCisrICAgIEZBSUw7CisrICBpZiAoIW9wdGltaXplCisrICAgICAgfHwgKG9wdGltaXplX3NpemUgJiYgSU5UVkFMIChvcGVyYW5kc1syXSkgPiAxMikKKysgICAgICB8fCAob3B0aW1pemUgPCAzICYmIElOVFZBTCAob3BlcmFuZHNbMl0pID4gMTAwKQorKyAgICAgIHx8IElOVFZBTCAob3BlcmFuZHNbMl0pID4gMjAwKQorKyAgICBGQUlMOworKworKyAgc3RfYWRkcl9yZWcKKysgICAgPSByZXBsYWNlX2VxdWl2X2FkZHJlc3MgKG9wZXJhbmRzWzBdLAorKwkJCSAgICAgY29weV90b19tb2RlX3JlZyAoUG1vZGUsIFhFWFAgKG9wZXJhbmRzWzBdLCAwKSkpOworKyAgbGRfYWRkcl9yZWcKKysgICAgPSByZXBsYWNlX2VxdWl2X2FkZHJlc3MgKG9wZXJhbmRzWzFdLAorKwkJCSAgICAgY29weV90b19tb2RlX3JlZyAoUG1vZGUsIFhFWFAgKG9wZXJhbmRzWzFdLCAwKSkpOworKyAgZW1pdF9pbnNuIChnZW5fbW92c3Ryc2lfaW50ZXJuYWwgKHN0X2FkZHJfcmVnLCBsZF9hZGRyX3JlZywKKysJCQkJICAgIG9wZXJhbmRzWzJdLCBvcGVyYW5kc1szXSkpOworKworKyAgRE9ORTsKKyt9KQorKworKworKyhkZWZpbmVfaW5zbiAibW92c3Ryc2lfaW50ZXJuYWwiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpCTEsgMCAibWVtb3J5X29wZXJhbmQiICAgIj1vIikKKysJKG1hdGNoX29wZXJhbmQ6QkxLIDEgIm1lbW9yeV9vcGVyYW5kIiAgICAibyIpKQorKyAgICh1c2UgKG1hdGNoX29wZXJhbmQ6U0kgMiAiY29uc3RfaW50X29wZXJhbmQiICAiaSIpKQorKyAgICh1c2UgKG1hdGNoX29wZXJhbmQ6U0kgMyAiY29uc3RfaW50X29wZXJhbmQiICAiaSIpKQorKyAgIChjbG9iYmVyIChtYXRjaF9zY3JhdGNoOlNJIDQgICAgICAgICAgICAgICAgIj0mciIpKQorKyAgIChjbG9iYmVyIChtYXRjaF9zY3JhdGNoOlNJIDUgICAgICAgICAgICAgICAgIj0mciIpKQorKyAgIChjbG9iYmVyIChtYXRjaF9zY3JhdGNoOlNJIDYgICAgICAgICAgICAgICAgIj0mciIpKV0KKysgICJUQVJHRVRfSU5MSU5FX01FTUNQWSIKKyt7CisrICBpbnQgbGRfb2Zmc2V0ID0gSU5UVkFMIChvcGVyYW5kc1syXSk7CisrICBpbnQgbGRfbGVuID0gSU5UVkFMIChvcGVyYW5kc1syXSk7CisrICBpbnQgbGRfcmVnID0gMDsKKysgIHJ0eCBsZF9hZGRyX3JlZyA9IFhFWFAgKG9wZXJhbmRzWzFdLCAwKTsKKysgIGludCBzdF9vZmZzZXQgPSBJTlRWQUwgKG9wZXJhbmRzWzJdKTsKKysgIGludCBzdF9sZW4gPSBJTlRWQUwgKG9wZXJhbmRzWzJdKTsKKysgIGludCBzdF9yZWcgPSAwOworKyAgcnR4IHN0X2FkZHJfcmVnID0gWEVYUCAob3BlcmFuZHNbMF0sIDApOworKyAgaW50IGRlbGF5X2NvdW50ID0gMDsKKysgIAorKyAgLyogb3BzWzBdIGlzIHRoZSBhZGRyZXNzIHVzZWQgYnkgdGhlIGluc24KKysgICAgIG9wc1sxXSBpcyB0aGUgcmVnaXN0ZXIgYmVpbmcgbG9hZGVkIG9yIHN0b3JlZCAqLworKyAgcnR4IG9wc1syXTsKKysgIAorKyAgaWYgKElOVFZBTCAob3BlcmFuZHNbM10pIDwgNCkKKysgICAgYWJvcnQgKCk7CisrICAKKysgIHdoaWxlIChsZF9vZmZzZXQgPj0gNCkKKysgICAgeworKyAgICAgIC8qIGlmIHRoZSBsb2FkIHVzZSBkZWxheSBoYXMgYmVlbiBtZXQsIEkgY2FuIHN0YXJ0CisrICAgICAgICAgc3RvcmluZyAqLworKyAgICAgIGlmIChkZWxheV9jb3VudCA+PSAzKQorKyAgICAgICAgeworKwkgIG9wc1swXSA9IGdlbl9ydHggKE1FTSwgU0ltb2RlLCAKKysJCQkgICAgcGx1c19jb25zdGFudCAoc3RfYWRkcl9yZWcsIHN0X2xlbiAtIHN0X29mZnNldCkpOworKwkgIG9wc1sxXSA9IG9wZXJhbmRzW3N0X3JlZyArIDRdOwkJCSAKKysJICBvdXRwdXRfYXNtX2luc24gKCJzdHdcdCUxLCAlMCIsIG9wcyk7CisrCSAgCisrCSAgc3RfcmVnID0gKHN0X3JlZyArIDEpICUgMzsKKysJICBzdF9vZmZzZXQgLT0gNDsKKysgICAgICAgIH0KKysgICAgCisrICAgICAgb3BzWzBdID0gZ2VuX3J0eCAoTUVNLCBTSW1vZGUsIAorKwkJCXBsdXNfY29uc3RhbnQgKGxkX2FkZHJfcmVnLCBsZF9sZW4gLSBsZF9vZmZzZXQpKTsKKysgICAgICBvcHNbMV0gPSBvcGVyYW5kc1tsZF9yZWcgKyA0XTsJCQkgCisrICAgICAgb3V0cHV0X2FzbV9pbnNuICgibGR3XHQlMSwgJTAiLCBvcHMpOworKyAgICAgIAorKyAgICAgIGxkX3JlZyA9IChsZF9yZWcgKyAxKSAlIDM7CisrICAgICAgbGRfb2Zmc2V0IC09IDQ7CisrICAgICAgZGVsYXlfY291bnQrKzsKKysgICAgfQorKyAgCisrICBpZiAobGRfb2Zmc2V0ID49IDIpCisrICAgIHsKKysgICAgICAvKiBpZiB0aGUgbG9hZCB1c2UgZGVsYXkgaGFzIGJlZW4gbWV0LCBJIGNhbiBzdGFydAorKyAgICAgICAgIHN0b3JpbmcgKi8KKysgICAgICBpZiAoZGVsYXlfY291bnQgPj0gMykKKysgICAgICAgIHsKKysJICBvcHNbMF0gPSBnZW5fcnR4IChNRU0sIFNJbW9kZSwgCisrCQkJICAgIHBsdXNfY29uc3RhbnQgKHN0X2FkZHJfcmVnLCBzdF9sZW4gLSBzdF9vZmZzZXQpKTsKKysJICBvcHNbMV0gPSBvcGVyYW5kc1tzdF9yZWcgKyA0XTsJCQkgCisrCSAgb3V0cHV0X2FzbV9pbnNuICgic3R3XHQlMSwgJTAiLCBvcHMpOworKwkgIAorKwkgIHN0X3JlZyA9IChzdF9yZWcgKyAxKSAlIDM7CisrCSAgc3Rfb2Zmc2V0IC09IDQ7CisrICAgICAgICB9CisrICAgIAorKyAgICAgIG9wc1swXSA9IGdlbl9ydHggKE1FTSwgSEltb2RlLCAKKysJCQlwbHVzX2NvbnN0YW50IChsZF9hZGRyX3JlZywgbGRfbGVuIC0gbGRfb2Zmc2V0KSk7CisrICAgICAgb3BzWzFdID0gb3BlcmFuZHNbbGRfcmVnICsgNF07CQkJIAorKyAgICAgIG91dHB1dF9hc21faW5zbiAoImxkaFx0JTEsICUwIiwgb3BzKTsKKysgICAgICAKKysgICAgICBsZF9yZWcgPSAobGRfcmVnICsgMSkgJSAzOworKyAgICAgIGxkX29mZnNldCAtPSAyOworKyAgICAgIGRlbGF5X2NvdW50Kys7CisrICAgIH0KKysgIAorKyAgaWYgKGxkX29mZnNldCA+PSAxKQorKyAgICB7CisrICAgICAgLyogaWYgdGhlIGxvYWQgdXNlIGRlbGF5IGhhcyBiZWVuIG1ldCwgSSBjYW4gc3RhcnQKKysgICAgICAgICBzdG9yaW5nICovCisrICAgICAgaWYgKGRlbGF5X2NvdW50ID49IDMpCisrICAgICAgICB7CisrCSAgb3BzWzBdID0gZ2VuX3J0eCAoTUVNLCBTSW1vZGUsIAorKwkJCSAgICBwbHVzX2NvbnN0YW50IChzdF9hZGRyX3JlZywgc3RfbGVuIC0gc3Rfb2Zmc2V0KSk7CisrCSAgb3BzWzFdID0gb3BlcmFuZHNbc3RfcmVnICsgNF07CQkJIAorKwkgIG91dHB1dF9hc21faW5zbiAoInN0d1x0JTEsICUwIiwgb3BzKTsKKysJICAKKysJICBzdF9yZWcgPSAoc3RfcmVnICsgMSkgJSAzOworKwkgIHN0X29mZnNldCAtPSA0OworKyAgICAgICAgfQorKyAgICAKKysgICAgICBvcHNbMF0gPSBnZW5fcnR4IChNRU0sIFFJbW9kZSwgCisrCQkJcGx1c19jb25zdGFudCAobGRfYWRkcl9yZWcsIGxkX2xlbiAtIGxkX29mZnNldCkpOworKyAgICAgIG9wc1sxXSA9IG9wZXJhbmRzW2xkX3JlZyArIDRdOwkJCSAKKysgICAgICBvdXRwdXRfYXNtX2luc24gKCJsZGJcdCUxLCAlMCIsIG9wcyk7CisrICAgICAgCisrICAgICAgbGRfcmVnID0gKGxkX3JlZyArIDEpICUgMzsKKysgICAgICBsZF9vZmZzZXQgLT0gMTsKKysgICAgICBkZWxheV9jb3VudCsrOworKyAgICB9CisrCisrICAgIHdoaWxlIChzdF9vZmZzZXQgPj0gNCkKKysgICAgICB7CisrCW9wc1swXSA9IGdlbl9ydHggKE1FTSwgU0ltb2RlLCAKKysJCQkgIHBsdXNfY29uc3RhbnQgKHN0X2FkZHJfcmVnLCBzdF9sZW4gLSBzdF9vZmZzZXQpKTsKKysJb3BzWzFdID0gb3BlcmFuZHNbc3RfcmVnICsgNF07CQkJIAorKwlvdXRwdXRfYXNtX2luc24gKCJzdHdcdCUxLCAlMCIsIG9wcyk7CisrCisrCXN0X3JlZyA9IChzdF9yZWcgKyAxKSAlIDM7CisrCXN0X29mZnNldCAtPSA0OworKyAgICAgIH0KKysgIAorKyAgICB3aGlsZSAoc3Rfb2Zmc2V0ID49IDIpCisrICAgICAgeworKwlvcHNbMF0gPSBnZW5fcnR4IChNRU0sIEhJbW9kZSwgCisrCQkJICBwbHVzX2NvbnN0YW50IChzdF9hZGRyX3JlZywgc3RfbGVuIC0gc3Rfb2Zmc2V0KSk7CisrCW9wc1sxXSA9IG9wZXJhbmRzW3N0X3JlZyArIDRdOwkJCSAKKysJb3V0cHV0X2FzbV9pbnNuICgic3RoXHQlMSwgJTAiLCBvcHMpOworKworKwlzdF9yZWcgPSAoc3RfcmVnICsgMSkgJSAzOworKwlzdF9vZmZzZXQgLT0gMjsKKysgICAgICB9CisrICAKKysgICAgd2hpbGUgKHN0X29mZnNldCA+PSAxKQorKyAgICAgIHsKKysJb3BzWzBdID0gZ2VuX3J0eCAoTUVNLCBRSW1vZGUsIAorKwkJCSAgcGx1c19jb25zdGFudCAoc3RfYWRkcl9yZWcsIHN0X2xlbiAtIHN0X29mZnNldCkpOworKwlvcHNbMV0gPSBvcGVyYW5kc1tzdF9yZWcgKyA0XTsJCQkgCisrCW91dHB1dF9hc21faW5zbiAoInN0Ylx0JTEsICUwIiwgb3BzKTsKKysKKysJc3RfcmVnID0gKHN0X3JlZyArIDEpICUgMzsKKysJc3Rfb2Zmc2V0IC09IDE7CisrICAgICAgfQorKyAgCisrICByZXR1cm4gIiI7CisrfQorKzsgPz8/IGxlbmd0aHMgYXJlIG5vdCBiZWluZyB1c2VkIHlldCwgYnV0IEkgd2lsbCBwcm9iYWJseSBmb3JnZXQKKys7IHRvIHVwZGF0ZSB0aGlzIG9uY2UgSSBhbSB1c2luZyBsZW5ndGhzLCBzbyBzZXQgaXQgdG8gc29tZXRoaW5nCisrOyBkZWZpbmV0ZWx5IGJpZyBlbm91Z2ggdG8gY292ZXIgaXQuIDQwMCBhbGxvd3MgZm9yIDIwMCBieXRlcworKzsgb2YgbW90aW9uLgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNDAwIildKQorKworKworKwwKKys7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKys7KgorKzsqIEN1c3RvbSBpbnN0cnVjdGlvbnMKKys7KgorKzsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKworKyhkZWZpbmVfY29uc3RhbnRzIFsKKysgIChDVVNUT01fTiAxMDApCisrICAoQ1VTVE9NX05JIDEwMSkKKysgIChDVVNUT01fTkYgMTAyKQorKyAgKENVU1RPTV9OUCAxMDMpCisrICAoQ1VTVE9NX05JSSAxMDQpCisrICAoQ1VTVE9NX05JRiAxMDUpCisrICAoQ1VTVE9NX05JUCAxMDYpCisrICAoQ1VTVE9NX05GSSAxMDcpCisrICAoQ1VTVE9NX05GRiAxMDgpCisrICAoQ1VTVE9NX05GUCAxMDkpCisrICAoQ1VTVE9NX05QSSAxMTApCisrICAoQ1VTVE9NX05QRiAxMTEpCisrICAoQ1VTVE9NX05QUCAxMTIpCisrICAoQ1VTVE9NX0lOIDExMykKKysgIChDVVNUT01fSU5JIDExNCkKKysgIChDVVNUT01fSU5GIDExNSkKKysgIChDVVNUT01fSU5QIDExNikKKysgIChDVVNUT01fSU5JSSAxMTcpCisrICAoQ1VTVE9NX0lOSUYgMTE4KQorKyAgKENVU1RPTV9JTklQIDExOSkKKysgIChDVVNUT01fSU5GSSAxMjApCisrICAoQ1VTVE9NX0lORkYgMTIxKQorKyAgKENVU1RPTV9JTkZQIDEyMikKKysgIChDVVNUT01fSU5QSSAxMjMpCisrICAoQ1VTVE9NX0lOUEYgMTI0KQorKyAgKENVU1RPTV9JTlBQIDEyNSkKKysgIChDVVNUT01fRk4gMTI2KQorKyAgKENVU1RPTV9GTkkgMTI3KQorKyAgKENVU1RPTV9GTkYgMTI4KQorKyAgKENVU1RPTV9GTlAgMTI5KQorKyAgKENVU1RPTV9GTklJIDEzMCkKKysgIChDVVNUT01fRk5JRiAxMzEpCisrICAoQ1VTVE9NX0ZOSVAgMTMyKQorKyAgKENVU1RPTV9GTkZJIDEzMykKKysgIChDVVNUT01fRk5GRiAxMzQpCisrICAoQ1VTVE9NX0ZORlAgMTM1KQorKyAgKENVU1RPTV9GTlBJIDEzNikKKysgIChDVVNUT01fRk5QRiAxMzcpCisrICAoQ1VTVE9NX0ZOUFAgMTM4KQorKyAgKENVU1RPTV9QTiAxMzkpCisrICAoQ1VTVE9NX1BOSSAxNDApCisrICAoQ1VTVE9NX1BORiAxNDEpCisrICAoQ1VTVE9NX1BOUCAxNDIpCisrICAoQ1VTVE9NX1BOSUkgMTQzKQorKyAgKENVU1RPTV9QTklGIDE0NCkKKysgIChDVVNUT01fUE5JUCAxNDUpCisrICAoQ1VTVE9NX1BORkkgMTQ2KQorKyAgKENVU1RPTV9QTkZGIDE0NykKKysgIChDVVNUT01fUE5GUCAxNDgpCisrICAoQ1VTVE9NX1BOUEkgMTQ5KQorKyAgKENVU1RPTV9QTlBGIDE1MCkKKysgIChDVVNUT01fUE5QUCAxNTEpCisrXSkKKysKKysKKysoZGVmaW5lX2luc24gImN1c3RvbV9uIgorKyAgWyh1bnNwZWNfdm9sYXRpbGUgWyhtYXRjaF9vcGVyYW5kOlNJIDAgImN1c3RvbV9pbnNuX29wY29kZSIgIk4iKV0gQ1VTVE9NX04pXQorKyAgIiIKKysgICJjdXN0b21cXHQlMCwgemVybywgemVybywgemVybyIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjdXN0b20iKV0pCisrCisrKGRlZmluZV9pbnNuICJjdXN0b21fbmkiCisrICBbKHVuc3BlY192b2xhdGlsZSBbKG1hdGNoX29wZXJhbmQ6U0kgMCAiY3VzdG9tX2luc25fb3Bjb2RlIiAiTiIpCisrICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpXSBDVVNUT01fTkkpXQorKyAgIiIKKysgICJjdXN0b21cXHQlMCwgemVybywgJTEsIHplcm8iCisrICBbKHNldF9hdHRyICJ0eXBlIiAiY3VzdG9tIildKQorKworKyhkZWZpbmVfaW5zbiAiY3VzdG9tX25mIgorKyAgWyh1bnNwZWNfdm9sYXRpbGUgWyhtYXRjaF9vcGVyYW5kOlNJIDAgImN1c3RvbV9pbnNuX29wY29kZSIgIk4iKQorKyAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNGIDEgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKV0gQ1VTVE9NX05GKV0KKysgICIiCisrICAiY3VzdG9tXFx0JTAsIHplcm8sICUxLCB6ZXJvIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImN1c3RvbSIpXSkKKysKKysoZGVmaW5lX2luc24gImN1c3RvbV9ucCIKKysgIFsodW5zcGVjX3ZvbGF0aWxlIFsobWF0Y2hfb3BlcmFuZDpTSSAwICJjdXN0b21faW5zbl9vcGNvZGUiICJOIikKKysgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIildIENVU1RPTV9OUCldCisrICAiIgorKyAgImN1c3RvbVxcdCUwLCB6ZXJvLCAlMSwgemVybyIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjdXN0b20iKV0pCisrCisrKGRlZmluZV9pbnNuICJjdXN0b21fbmlpIgorKyAgWyh1bnNwZWNfdm9sYXRpbGUgWyhtYXRjaF9vcGVyYW5kOlNJIDAgImN1c3RvbV9pbnNuX29wY29kZSIgIk4iKQorKyAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKQorKyAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKV0gQ1VTVE9NX05JSSldCisrICAiIgorKyAgImN1c3RvbVxcdCUwLCB6ZXJvLCAlMSwgJTIiCisrICBbKHNldF9hdHRyICJ0eXBlIiAiY3VzdG9tIildKQorKworKyhkZWZpbmVfaW5zbiAiY3VzdG9tX25pZiIKKysgIFsodW5zcGVjX3ZvbGF0aWxlIFsobWF0Y2hfb3BlcmFuZDpTSSAwICJjdXN0b21faW5zbl9vcGNvZGUiICJOIikKKysgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIikKKysgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTRiAyICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIildIENVU1RPTV9OSUYpXQorKyAgIiIKKysgICJjdXN0b21cXHQlMCwgemVybywgJTEsICUyIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImN1c3RvbSIpXSkKKysKKysoZGVmaW5lX2luc24gImN1c3RvbV9uaXAiCisrICBbKHVuc3BlY192b2xhdGlsZSBbKG1hdGNoX29wZXJhbmQ6U0kgMCAiY3VzdG9tX2luc25fb3Bjb2RlIiAiTiIpCisrICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpCisrICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpXSBDVVNUT01fTklQKV0KKysgICIiCisrICAiY3VzdG9tXFx0JTAsIHplcm8sICUxLCAlMiIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjdXN0b20iKV0pCisrCisrKGRlZmluZV9pbnNuICJjdXN0b21fbmZpIgorKyAgWyh1bnNwZWNfdm9sYXRpbGUgWyhtYXRjaF9vcGVyYW5kOlNJIDAgImN1c3RvbV9pbnNuX29wY29kZSIgIk4iKQorKyAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNGIDEgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKQorKyAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKV0gQ1VTVE9NX05GSSldCisrICAiIgorKyAgImN1c3RvbVxcdCUwLCB6ZXJvLCAlMSwgJTIiCisrICBbKHNldF9hdHRyICJ0eXBlIiAiY3VzdG9tIildKQorKworKyhkZWZpbmVfaW5zbiAiY3VzdG9tX25mZiIKKysgIFsodW5zcGVjX3ZvbGF0aWxlIFsobWF0Y2hfb3BlcmFuZDpTSSAwICJjdXN0b21faW5zbl9vcGNvZGUiICJOIikKKysgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTRiAxICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIikKKysgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTRiAyICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIildIENVU1RPTV9ORkYpXQorKyAgIiIKKysgICJjdXN0b21cXHQlMCwgemVybywgJTEsICUyIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImN1c3RvbSIpXSkKKysKKysoZGVmaW5lX2luc24gImN1c3RvbV9uZnAiCisrICBbKHVuc3BlY192b2xhdGlsZSBbKG1hdGNoX29wZXJhbmQ6U0kgMCAiY3VzdG9tX2luc25fb3Bjb2RlIiAiTiIpCisrICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0YgMSAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpCisrICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpXSBDVVNUT01fTkZQKV0KKysgICIiCisrICAiY3VzdG9tXFx0JTAsIHplcm8sICUxLCAlMiIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjdXN0b20iKV0pCisrCisrKGRlZmluZV9pbnNuICJjdXN0b21fbnBpIgorKyAgWyh1bnNwZWNfdm9sYXRpbGUgWyhtYXRjaF9vcGVyYW5kOlNJIDAgImN1c3RvbV9pbnNuX29wY29kZSIgIk4iKQorKyAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKQorKyAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKV0gQ1VTVE9NX05QSSldCisrICAiIgorKyAgImN1c3RvbVxcdCUwLCB6ZXJvLCAlMSwgJTIiCisrICBbKHNldF9hdHRyICJ0eXBlIiAiY3VzdG9tIildKQorKworKyhkZWZpbmVfaW5zbiAiY3VzdG9tX25wZiIKKysgIFsodW5zcGVjX3ZvbGF0aWxlIFsobWF0Y2hfb3BlcmFuZDpTSSAwICJjdXN0b21faW5zbl9vcGNvZGUiICJOIikKKysgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIikKKysgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTRiAyICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIildIENVU1RPTV9OUEYpXQorKyAgIiIKKysgICJjdXN0b21cXHQlMCwgemVybywgJTEsICUyIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImN1c3RvbSIpXSkKKysKKysoZGVmaW5lX2luc24gImN1c3RvbV9ucHAiCisrICBbKHVuc3BlY192b2xhdGlsZSBbKG1hdGNoX29wZXJhbmQ6U0kgMCAiY3VzdG9tX2luc25fb3Bjb2RlIiAiTiIpCisrICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpCisrICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpXSBDVVNUT01fTlBQKV0KKysgICIiCisrICAiY3VzdG9tXFx0JTAsIHplcm8sICUxLCAlMiIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjdXN0b20iKV0pCisrCisrCisrCisrKGRlZmluZV9pbnNuICJjdXN0b21faW4iCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICI9ciIpCisrICAgICAgICAodW5zcGVjX3ZvbGF0aWxlOlNJIFsobWF0Y2hfb3BlcmFuZDpTSSAxICJjdXN0b21faW5zbl9vcGNvZGUiICJOIildIENVU1RPTV9JTikpXQorKyAgIiIKKysgICJjdXN0b21cXHQlMSwgJTAsIHplcm8sIHplcm8iCisrICBbKHNldF9hdHRyICJ0eXBlIiAiY3VzdG9tIildKQorKworKyhkZWZpbmVfaW5zbiAiY3VzdG9tX2luaSIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgIj1yIikKKysgICAgICAgICh1bnNwZWNfdm9sYXRpbGU6U0kgWyhtYXRjaF9vcGVyYW5kOlNJIDEgImN1c3RvbV9pbnNuX29wY29kZSIgIk4iKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpXSBDVVNUT01fSU5JKSldCisrICAiIgorKyAgImN1c3RvbVxcdCUxLCAlMCwgJTIsIHplcm8iCisrICBbKHNldF9hdHRyICJ0eXBlIiAiY3VzdG9tIildKQorKworKyhkZWZpbmVfaW5zbiAiY3VzdG9tX2luZiIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgIj1yIikKKysgICAgICAgICh1bnNwZWNfdm9sYXRpbGU6U0kgWyhtYXRjaF9vcGVyYW5kOlNJIDEgImN1c3RvbV9pbnNuX29wY29kZSIgIk4iKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0YgMiAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpXSBDVVNUT01fSU5GKSldCisrICAiIgorKyAgImN1c3RvbVxcdCUxLCAlMCwgJTIsIHplcm8iCisrICBbKHNldF9hdHRyICJ0eXBlIiAiY3VzdG9tIildKQorKworKyhkZWZpbmVfaW5zbiAiY3VzdG9tX2lucCIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgIj1yIikKKysgICAgICAgICh1bnNwZWNfdm9sYXRpbGU6U0kgWyhtYXRjaF9vcGVyYW5kOlNJIDEgImN1c3RvbV9pbnNuX29wY29kZSIgIk4iKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpXSBDVVNUT01fSU5QKSldCisrICAiIgorKyAgImN1c3RvbVxcdCUxLCAlMCwgJTIsIHplcm8iCisrICBbKHNldF9hdHRyICJ0eXBlIiAiY3VzdG9tIildKQorKworKyhkZWZpbmVfaW5zbiAiY3VzdG9tX2luaWkiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICI9ciIpCisrICAgICAgICAodW5zcGVjX3ZvbGF0aWxlOlNJIFsobWF0Y2hfb3BlcmFuZDpTSSAxICJjdXN0b21faW5zbl9vcGNvZGUiICJOIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpXSBDVVNUT01fSU5JSSkpXQorKyAgIiIKKysgICJjdXN0b21cXHQlMSwgJTAsICUyLCAlMyIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjdXN0b20iKV0pCisrCisrKGRlZmluZV9pbnNuICJjdXN0b21faW5pZiIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgIj1yIikKKysgICAgICAgICh1bnNwZWNfdm9sYXRpbGU6U0kgWyhtYXRjaF9vcGVyYW5kOlNJIDEgImN1c3RvbV9pbnNuX29wY29kZSIgIk4iKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTRiAzICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIildIENVU1RPTV9JTklGKSldCisrICAiIgorKyAgImN1c3RvbVxcdCUxLCAlMCwgJTIsICUzIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImN1c3RvbSIpXSkKKysKKysoZGVmaW5lX2luc24gImN1c3RvbV9pbmlwIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAiPXIiKQorKyAgICAgICAgKHVuc3BlY192b2xhdGlsZTpTSSBbKG1hdGNoX29wZXJhbmQ6U0kgMSAiY3VzdG9tX2luc25fb3Bjb2RlIiAiTiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDMgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKV0gQ1VTVE9NX0lOSVApKV0KKysgICIiCisrICAiY3VzdG9tXFx0JTEsICUwLCAlMiwgJTMiCisrICBbKHNldF9hdHRyICJ0eXBlIiAiY3VzdG9tIildKQorKworKyhkZWZpbmVfaW5zbiAiY3VzdG9tX2luZmkiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICI9ciIpCisrICAgICAgICAodW5zcGVjX3ZvbGF0aWxlOlNJIFsobWF0Y2hfb3BlcmFuZDpTSSAxICJjdXN0b21faW5zbl9vcGNvZGUiICJOIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNGIDIgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpXSBDVVNUT01fSU5GSSkpXQorKyAgIiIKKysgICJjdXN0b21cXHQlMSwgJTAsICUyLCAlMyIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjdXN0b20iKV0pCisrCisrKGRlZmluZV9pbnNuICJjdXN0b21faW5mZiIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgIj1yIikKKysgICAgICAgICh1bnNwZWNfdm9sYXRpbGU6U0kgWyhtYXRjaF9vcGVyYW5kOlNJIDEgImN1c3RvbV9pbnNuX29wY29kZSIgIk4iKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0YgMiAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTRiAzICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIildIENVU1RPTV9JTkZGKSldCisrICAiIgorKyAgImN1c3RvbVxcdCUxLCAlMCwgJTIsICUzIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImN1c3RvbSIpXSkKKysKKysoZGVmaW5lX2luc24gImN1c3RvbV9pbmZwIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAiPXIiKQorKyAgICAgICAgKHVuc3BlY192b2xhdGlsZTpTSSBbKG1hdGNoX29wZXJhbmQ6U0kgMSAiY3VzdG9tX2luc25fb3Bjb2RlIiAiTiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTRiAyICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDMgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKV0gQ1VTVE9NX0lORlApKV0KKysgICIiCisrICAiY3VzdG9tXFx0JTEsICUwLCAlMiwgJTMiCisrICBbKHNldF9hdHRyICJ0eXBlIiAiY3VzdG9tIildKQorKworKyhkZWZpbmVfaW5zbiAiY3VzdG9tX2lucGkiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICI9ciIpCisrICAgICAgICAodW5zcGVjX3ZvbGF0aWxlOlNJIFsobWF0Y2hfb3BlcmFuZDpTSSAxICJjdXN0b21faW5zbl9vcGNvZGUiICJOIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpXSBDVVNUT01fSU5QSSkpXQorKyAgIiIKKysgICJjdXN0b21cXHQlMSwgJTAsICUyLCAlMyIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjdXN0b20iKV0pCisrCisrKGRlZmluZV9pbnNuICJjdXN0b21faW5wZiIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgIj1yIikKKysgICAgICAgICh1bnNwZWNfdm9sYXRpbGU6U0kgWyhtYXRjaF9vcGVyYW5kOlNJIDEgImN1c3RvbV9pbnNuX29wY29kZSIgIk4iKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTRiAzICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIildIENVU1RPTV9JTlBGKSldCisrICAiIgorKyAgImN1c3RvbVxcdCUxLCAlMCwgJTIsICUzIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImN1c3RvbSIpXSkKKysKKysoZGVmaW5lX2luc24gImN1c3RvbV9pbnBwIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAiPXIiKQorKyAgICAgICAgKHVuc3BlY192b2xhdGlsZTpTSSBbKG1hdGNoX29wZXJhbmQ6U0kgMSAiY3VzdG9tX2luc25fb3Bjb2RlIiAiTiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDMgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKV0gQ1VTVE9NX0lOUFApKV0KKysgICIiCisrICAiY3VzdG9tXFx0JTEsICUwLCAlMiwgJTMiCisrICBbKHNldF9hdHRyICJ0eXBlIiAiY3VzdG9tIildKQorKworKworKworKworKworKyhkZWZpbmVfaW5zbiAiY3VzdG9tX2ZuIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0YgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAiPXIiKQorKyAgICAgICAgKHVuc3BlY192b2xhdGlsZTpTRiBbKG1hdGNoX29wZXJhbmQ6U0kgMSAiY3VzdG9tX2luc25fb3Bjb2RlIiAiTiIpXSBDVVNUT01fRk4pKV0KKysgICIiCisrICAiY3VzdG9tXFx0JTEsICUwLCB6ZXJvLCB6ZXJvIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImN1c3RvbSIpXSkKKysKKysoZGVmaW5lX2luc24gImN1c3RvbV9mbmkiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTRiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICI9ciIpCisrICAgICAgICAodW5zcGVjX3ZvbGF0aWxlOlNGIFsobWF0Y2hfb3BlcmFuZDpTSSAxICJjdXN0b21faW5zbl9vcGNvZGUiICJOIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKV0gQ1VTVE9NX0ZOSSkpXQorKyAgIiIKKysgICJjdXN0b21cXHQlMSwgJTAsICUyLCB6ZXJvIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImN1c3RvbSIpXSkKKysKKysoZGVmaW5lX2luc24gImN1c3RvbV9mbmYiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTRiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICI9ciIpCisrICAgICAgICAodW5zcGVjX3ZvbGF0aWxlOlNGIFsobWF0Y2hfb3BlcmFuZDpTSSAxICJjdXN0b21faW5zbl9vcGNvZGUiICJOIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNGIDIgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKV0gQ1VTVE9NX0ZORikpXQorKyAgIiIKKysgICJjdXN0b21cXHQlMSwgJTAsICUyLCB6ZXJvIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImN1c3RvbSIpXSkKKysKKysoZGVmaW5lX2luc24gImN1c3RvbV9mbnAiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTRiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICI9ciIpCisrICAgICAgICAodW5zcGVjX3ZvbGF0aWxlOlNGIFsobWF0Y2hfb3BlcmFuZDpTSSAxICJjdXN0b21faW5zbl9vcGNvZGUiICJOIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKV0gQ1VTVE9NX0ZOUCkpXQorKyAgIiIKKysgICJjdXN0b21cXHQlMSwgJTAsICUyLCB6ZXJvIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImN1c3RvbSIpXSkKKysKKysoZGVmaW5lX2luc24gImN1c3RvbV9mbmlpIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0YgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAiPXIiKQorKyAgICAgICAgKHVuc3BlY192b2xhdGlsZTpTRiBbKG1hdGNoX29wZXJhbmQ6U0kgMSAiY3VzdG9tX2luc25fb3Bjb2RlIiAiTiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDMgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKV0gQ1VTVE9NX0ZOSUkpKV0KKysgICIiCisrICAiY3VzdG9tXFx0JTEsICUwLCAlMiwgJTMiCisrICBbKHNldF9hdHRyICJ0eXBlIiAiY3VzdG9tIildKQorKworKyhkZWZpbmVfaW5zbiAiY3VzdG9tX2ZuaWYiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTRiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICI9ciIpCisrICAgICAgICAodW5zcGVjX3ZvbGF0aWxlOlNGIFsobWF0Y2hfb3BlcmFuZDpTSSAxICJjdXN0b21faW5zbl9vcGNvZGUiICJOIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0YgMyAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpXSBDVVNUT01fRk5JRikpXQorKyAgIiIKKysgICJjdXN0b21cXHQlMSwgJTAsICUyLCAlMyIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjdXN0b20iKV0pCisrCisrKGRlZmluZV9pbnNuICJjdXN0b21fZm5pcCIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNGIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgIj1yIikKKysgICAgICAgICh1bnNwZWNfdm9sYXRpbGU6U0YgWyhtYXRjaF9vcGVyYW5kOlNJIDEgImN1c3RvbV9pbnNuX29wY29kZSIgIk4iKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAzICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIildIENVU1RPTV9GTklQKSldCisrICAiIgorKyAgImN1c3RvbVxcdCUxLCAlMCwgJTIsICUzIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImN1c3RvbSIpXSkKKysKKysoZGVmaW5lX2luc24gImN1c3RvbV9mbmZpIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0YgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAiPXIiKQorKyAgICAgICAgKHVuc3BlY192b2xhdGlsZTpTRiBbKG1hdGNoX29wZXJhbmQ6U0kgMSAiY3VzdG9tX2luc25fb3Bjb2RlIiAiTiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTRiAyICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDMgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKV0gQ1VTVE9NX0ZORkkpKV0KKysgICIiCisrICAiY3VzdG9tXFx0JTEsICUwLCAlMiwgJTMiCisrICBbKHNldF9hdHRyICJ0eXBlIiAiY3VzdG9tIildKQorKworKyhkZWZpbmVfaW5zbiAiY3VzdG9tX2ZuZmYiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTRiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICI9ciIpCisrICAgICAgICAodW5zcGVjX3ZvbGF0aWxlOlNGIFsobWF0Y2hfb3BlcmFuZDpTSSAxICJjdXN0b21faW5zbl9vcGNvZGUiICJOIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNGIDIgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0YgMyAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpXSBDVVNUT01fRk5GRikpXQorKyAgIiIKKysgICJjdXN0b21cXHQlMSwgJTAsICUyLCAlMyIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjdXN0b20iKV0pCisrCisrKGRlZmluZV9pbnNuICJjdXN0b21fZm5mcCIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNGIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgIj1yIikKKysgICAgICAgICh1bnNwZWNfdm9sYXRpbGU6U0YgWyhtYXRjaF9vcGVyYW5kOlNJIDEgImN1c3RvbV9pbnNuX29wY29kZSIgIk4iKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0YgMiAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAzICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIildIENVU1RPTV9GTkZQKSldCisrICAiIgorKyAgImN1c3RvbVxcdCUxLCAlMCwgJTIsICUzIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImN1c3RvbSIpXSkKKysKKysoZGVmaW5lX2luc24gImN1c3RvbV9mbnBpIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0YgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAiPXIiKQorKyAgICAgICAgKHVuc3BlY192b2xhdGlsZTpTRiBbKG1hdGNoX29wZXJhbmQ6U0kgMSAiY3VzdG9tX2luc25fb3Bjb2RlIiAiTiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDMgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKV0gQ1VTVE9NX0ZOUEkpKV0KKysgICIiCisrICAiY3VzdG9tXFx0JTEsICUwLCAlMiwgJTMiCisrICBbKHNldF9hdHRyICJ0eXBlIiAiY3VzdG9tIildKQorKworKyhkZWZpbmVfaW5zbiAiY3VzdG9tX2ZucGYiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTRiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICI9ciIpCisrICAgICAgICAodW5zcGVjX3ZvbGF0aWxlOlNGIFsobWF0Y2hfb3BlcmFuZDpTSSAxICJjdXN0b21faW5zbl9vcGNvZGUiICJOIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0YgMyAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpXSBDVVNUT01fRk5QRikpXQorKyAgIiIKKysgICJjdXN0b21cXHQlMSwgJTAsICUyLCAlMyIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjdXN0b20iKV0pCisrCisrKGRlZmluZV9pbnNuICJjdXN0b21fZm5wcCIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNGIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgIj1yIikKKysgICAgICAgICh1bnNwZWNfdm9sYXRpbGU6U0YgWyhtYXRjaF9vcGVyYW5kOlNJIDEgImN1c3RvbV9pbnNuX29wY29kZSIgIk4iKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAzICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIildIENVU1RPTV9GTlBQKSldCisrICAiIgorKyAgImN1c3RvbVxcdCUxLCAlMCwgJTIsICUzIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImN1c3RvbSIpXSkKKysKKysKKysKKysoZGVmaW5lX2luc24gImN1c3RvbV9wbiIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgIj1yIikKKysgICAgICAgICh1bnNwZWNfdm9sYXRpbGU6U0kgWyhtYXRjaF9vcGVyYW5kOlNJIDEgImN1c3RvbV9pbnNuX29wY29kZSIgIk4iKV0gQ1VTVE9NX1BOKSldCisrICAiIgorKyAgImN1c3RvbVxcdCUxLCAlMCwgemVybywgemVybyIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjdXN0b20iKV0pCisrCisrKGRlZmluZV9pbnNuICJjdXN0b21fcG5pIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAiPXIiKQorKyAgICAgICAgKHVuc3BlY192b2xhdGlsZTpTSSBbKG1hdGNoX29wZXJhbmQ6U0kgMSAiY3VzdG9tX2luc25fb3Bjb2RlIiAiTiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIildIENVU1RPTV9QTkkpKV0KKysgICIiCisrICAiY3VzdG9tXFx0JTEsICUwLCAlMiwgemVybyIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjdXN0b20iKV0pCisrCisrKGRlZmluZV9pbnNuICJjdXN0b21fcG5mIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAiPXIiKQorKyAgICAgICAgKHVuc3BlY192b2xhdGlsZTpTSSBbKG1hdGNoX29wZXJhbmQ6U0kgMSAiY3VzdG9tX2luc25fb3Bjb2RlIiAiTiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTRiAyICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIildIENVU1RPTV9QTkYpKV0KKysgICIiCisrICAiY3VzdG9tXFx0JTEsICUwLCAlMiwgemVybyIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjdXN0b20iKV0pCisrCisrKGRlZmluZV9pbnNuICJjdXN0b21fcG5wIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAiPXIiKQorKyAgICAgICAgKHVuc3BlY192b2xhdGlsZTpTSSBbKG1hdGNoX29wZXJhbmQ6U0kgMSAiY3VzdG9tX2luc25fb3Bjb2RlIiAiTiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIildIENVU1RPTV9QTlApKV0KKysgICIiCisrICAiY3VzdG9tXFx0JTEsICUwLCAlMiwgemVybyIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjdXN0b20iKV0pCisrCisrKGRlZmluZV9pbnNuICJjdXN0b21fcG5paSIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgIj1yIikKKysgICAgICAgICh1bnNwZWNfdm9sYXRpbGU6U0kgWyhtYXRjaF9vcGVyYW5kOlNJIDEgImN1c3RvbV9pbnNuX29wY29kZSIgIk4iKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAzICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIildIENVU1RPTV9QTklJKSldCisrICAiIgorKyAgImN1c3RvbVxcdCUxLCAlMCwgJTIsICUzIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImN1c3RvbSIpXSkKKysKKysoZGVmaW5lX2luc24gImN1c3RvbV9wbmlmIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAiPXIiKQorKyAgICAgICAgKHVuc3BlY192b2xhdGlsZTpTSSBbKG1hdGNoX29wZXJhbmQ6U0kgMSAiY3VzdG9tX2luc25fb3Bjb2RlIiAiTiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNGIDMgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKV0gQ1VTVE9NX1BOSUYpKV0KKysgICIiCisrICAiY3VzdG9tXFx0JTEsICUwLCAlMiwgJTMiCisrICBbKHNldF9hdHRyICJ0eXBlIiAiY3VzdG9tIildKQorKworKyhkZWZpbmVfaW5zbiAiY3VzdG9tX3BuaXAiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICI9ciIpCisrICAgICAgICAodW5zcGVjX3ZvbGF0aWxlOlNJIFsobWF0Y2hfb3BlcmFuZDpTSSAxICJjdXN0b21faW5zbl9vcGNvZGUiICJOIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpXSBDVVNUT01fUE5JUCkpXQorKyAgIiIKKysgICJjdXN0b21cXHQlMSwgJTAsICUyLCAlMyIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjdXN0b20iKV0pCisrCisrKGRlZmluZV9pbnNuICJjdXN0b21fcG5maSIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgIj1yIikKKysgICAgICAgICh1bnNwZWNfdm9sYXRpbGU6U0kgWyhtYXRjaF9vcGVyYW5kOlNJIDEgImN1c3RvbV9pbnNuX29wY29kZSIgIk4iKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0YgMiAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAzICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIildIENVU1RPTV9QTkZJKSldCisrICAiIgorKyAgImN1c3RvbVxcdCUxLCAlMCwgJTIsICUzIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImN1c3RvbSIpXSkKKysKKysoZGVmaW5lX2luc24gImN1c3RvbV9wbmZmIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAiPXIiKQorKyAgICAgICAgKHVuc3BlY192b2xhdGlsZTpTSSBbKG1hdGNoX29wZXJhbmQ6U0kgMSAiY3VzdG9tX2luc25fb3Bjb2RlIiAiTiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTRiAyICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNGIDMgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKV0gQ1VTVE9NX1BORkYpKV0KKysgICIiCisrICAiY3VzdG9tXFx0JTEsICUwLCAlMiwgJTMiCisrICBbKHNldF9hdHRyICJ0eXBlIiAiY3VzdG9tIildKQorKworKyhkZWZpbmVfaW5zbiAiY3VzdG9tX3BuZnAiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICI9ciIpCisrICAgICAgICAodW5zcGVjX3ZvbGF0aWxlOlNJIFsobWF0Y2hfb3BlcmFuZDpTSSAxICJjdXN0b21faW5zbl9vcGNvZGUiICJOIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNGIDIgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpXSBDVVNUT01fUE5GUCkpXQorKyAgIiIKKysgICJjdXN0b21cXHQlMSwgJTAsICUyLCAlMyIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjdXN0b20iKV0pCisrCisrKGRlZmluZV9pbnNuICJjdXN0b21fcG5waSIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgIj1yIikKKysgICAgICAgICh1bnNwZWNfdm9sYXRpbGU6U0kgWyhtYXRjaF9vcGVyYW5kOlNJIDEgImN1c3RvbV9pbnNuX29wY29kZSIgIk4iKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAzICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIildIENVU1RPTV9QTlBJKSldCisrICAiIgorKyAgImN1c3RvbVxcdCUxLCAlMCwgJTIsICUzIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImN1c3RvbSIpXSkKKysKKysoZGVmaW5lX2luc24gImN1c3RvbV9wbnBmIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAiPXIiKQorKyAgICAgICAgKHVuc3BlY192b2xhdGlsZTpTSSBbKG1hdGNoX29wZXJhbmQ6U0kgMSAiY3VzdG9tX2luc25fb3Bjb2RlIiAiTiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAgICJyIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNGIDMgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKV0gQ1VTVE9NX1BOUEYpKV0KKysgICIiCisrICAiY3VzdG9tXFx0JTEsICUwLCAlMiwgJTMiCisrICBbKHNldF9hdHRyICJ0eXBlIiAiY3VzdG9tIildKQorKworKyhkZWZpbmVfaW5zbiAiY3VzdG9tX3BucHAiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICI9ciIpCisrICAgICAgICAodW5zcGVjX3ZvbGF0aWxlOlNJIFsobWF0Y2hfb3BlcmFuZDpTSSAxICJjdXN0b21faW5zbl9vcGNvZGUiICJOIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICAgInIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpXSBDVVNUT01fUE5QUCkpXQorKyAgIiIKKysgICJjdXN0b21cXHQlMSwgJTAsICUyLCAlMyIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjdXN0b20iKV0pCisrCisrCisrCisrCisrCisrDAorKzsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKzsqCisrOyogTWlzYworKzsqCisrOyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisrCisrKGRlZmluZV9pbnNuICJub3AiCisrICBbKGNvbnN0X2ludCAwKV0KKysgICIiCisrICAibm9wXFx0IgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImFsdSIpXSkKKysKKysoZGVmaW5lX2luc24gInN5bmMiCisrICBbKHVuc3BlY192b2xhdGlsZSBbKGNvbnN0X2ludCAwKV0gVU5TUEVDX1NZTkMpXQorKyAgIiIKKysgICJzeW5jXFx0IgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImNvbnRyb2wiKV0pCisrCisrCisrKGRlZmluZV9pbnNuICJyZGN0bCIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisrCSh1bnNwZWNfdm9sYXRpbGU6U0kgWyhtYXRjaF9vcGVyYW5kOlNJIDEgInJkd3JjdGxfb3BlcmFuZCIgIk8iKV0gVU5TUEVDX1JEQ1RMKSldCisrICAiIgorKyAgInJkY3RsXFx0JTAsIGN0bCUxIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImNvbnRyb2wiKV0pCisrCisrKGRlZmluZV9pbnNuICJ3cmN0bCIKKysgIFsodW5zcGVjX3ZvbGF0aWxlOlNJIFsobWF0Y2hfb3BlcmFuZDpTSSAwICJyZHdyY3RsX29wZXJhbmQiICAiTyIpCisrICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKV0gVU5TUEVDX1dSQ1RMKV0KKysgICIiCisrICAid3JjdGxcXHRjdGwlMCwgJTEiCisrICBbKHNldF9hdHRyICJ0eXBlIiAiY29udHJvbCIpXSkKKysKKysKKysMCisrOyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisrOyoKKys7KiBQZWVwaG9sZXMKKys7KgorKzsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKworKworZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL25pb3MyL25pb3MyLXByb3Rvcy5oIGdjYy0zLjQuNi9nY2MvY29uZmlnL25pb3MyL25pb3MyLXByb3Rvcy5oCistLS0gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9uaW9zMi9uaW9zMi1wcm90b3MuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy0zLjQuNi9nY2MvY29uZmlnL25pb3MyL25pb3MyLXByb3Rvcy5oCTIwMDctMDgtMTUgMjM6MDk6MzYuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDcwIEBACisrLyogU3Vicm91dGluZXMgZm9yIGFzc2VtYmxlciBjb2RlIG91dHB1dCBmb3IgQWx0ZXJhIE5JT1MgMkcgTklPUzIgdmVyc2lvbi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDMgQWx0ZXJhIAorKyAgIENvbnRyaWJ1dGVkIGJ5IEpvbmFoIEdyYWhhbSAoamdyYWhhbUBhbHRlcmEuY29tKS4KKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgQ0MuCisrCisrR05VIENDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKytpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKythbnkgbGF0ZXIgdmVyc2lvbi4KKysKKytHTlUgQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKytidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKytHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrYWxvbmcgd2l0aCBHTlUgQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bworK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKytCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrCisrZXh0ZXJuIHZvaWQgZHVtcF9mcmFtZV9zaXplIChGSUxFICopOworK2V4dGVybiBIT1NUX1dJREVfSU5UIGNvbXB1dGVfZnJhbWVfc2l6ZSAodm9pZCk7CisrZXh0ZXJuIGludCBuaW9zMl9pbml0aWFsX2VsaW1pbmF0aW9uX29mZnNldCAoaW50LCBpbnQpOworK2V4dGVybiB2b2lkIG92ZXJyaWRlX29wdGlvbnMgKHZvaWQpOworK2V4dGVybiB2b2lkIG9wdGltaXphdGlvbl9vcHRpb25zIChpbnQsIGludCk7CisrZXh0ZXJuIGludCBuaW9zMl9jYW5fdXNlX3JldHVybl9pbnNuICh2b2lkKTsKKytleHRlcm4gdm9pZCBleHBhbmRfcHJvbG9ndWUgKHZvaWQpOworK2V4dGVybiB2b2lkIGV4cGFuZF9lcGlsb2d1ZSAoYm9vbCk7CisrZXh0ZXJuIHZvaWQgZnVuY3Rpb25fcHJvZmlsZXIgKEZJTEUgKiwgaW50KTsKKysKKysKKysjaWZkZWYgUlRYX0NPREUKKytleHRlcm4gaW50IG5pb3MyX2xlZ2l0aW1hdGVfYWRkcmVzcyAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgaW50KTsKKytleHRlcm4gdm9pZCBuaW9zMl9wcmludF9vcGVyYW5kIChGSUxFICosIHJ0eCwgaW50KTsKKytleHRlcm4gdm9pZCBuaW9zMl9wcmludF9vcGVyYW5kX2FkZHJlc3MgKEZJTEUgKiwgcnR4KTsKKysKKytleHRlcm4gaW50IG5pb3MyX2VtaXRfbW92ZV9zZXF1ZW5jZSAocnR4ICosIGVudW0gbWFjaGluZV9tb2RlKTsKKytleHRlcm4gaW50IG5pb3MyX2VtaXRfZXhwZW5zaXZlX2RpdiAocnR4ICosIGVudW0gbWFjaGluZV9tb2RlKTsKKysKKytleHRlcm4gdm9pZCBnZW5faW50X3JlbGF0aW9uYWwgKGVudW0gcnR4X2NvZGUsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CisrZXh0ZXJuIHZvaWQgZ2VuX2NvbmRpdGlvbmFsX21vdmUgKHJ0eCAqLCBlbnVtIG1hY2hpbmVfbW9kZSk7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKmFzbV9vdXRwdXRfb3Bjb2RlIChGSUxFICosIGNvbnN0IGNoYXIgKik7CisrCisrLyogcHJlZGljYXRlcyAqLworK2V4dGVybiBpbnQgYXJpdGhfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CisrZXh0ZXJuIGludCB1bnNfYXJpdGhfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CisrZXh0ZXJuIGludCBsb2dpY2FsX29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworK2V4dGVybiBpbnQgc2hpZnRfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CisrZXh0ZXJuIGludCByZWdfb3JfMF9vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKKytleHRlcm4gaW50IGVxdWFsaXR5X29wIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKKytleHRlcm4gaW50IGN1c3RvbV9pbnNuX29wY29kZSAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CisrZXh0ZXJuIGludCByZHdyY3RsX29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworKworKyMgaWZkZWYgSEFWRV9NQUNISU5FX01PREVTCisrIyAgaWYgZGVmaW5lZCBUUkVFX0NPREUKKytleHRlcm4gdm9pZCBmdW5jdGlvbl9hcmdfYWR2YW5jZSAoQ1VNVUxBVElWRV9BUkdTICosIGVudW0gbWFjaGluZV9tb2RlLCB0cmVlLCBpbnQpOworK2V4dGVybiBydHggZnVuY3Rpb25fYXJnIChjb25zdCBDVU1VTEFUSVZFX0FSR1MgKiwgZW51bSBtYWNoaW5lX21vZGUsIHRyZWUsIGludCk7CisrZXh0ZXJuIGludCBmdW5jdGlvbl9hcmdfcGFydGlhbF9ucmVncyAoY29uc3QgQ1VNVUxBVElWRV9BUkdTICosIGVudW0gbWFjaGluZV9tb2RlLCB0cmVlLCBpbnQpOworK2V4dGVybiB2b2lkIGluaXRfY3VtdWxhdGl2ZV9hcmdzIChDVU1VTEFUSVZFX0FSR1MgKiwgdHJlZSwgcnR4LCB0cmVlLCBpbnQpOworK2V4dGVybiBpbnQgbmlvczJfc2V0dXBfaW5jb21pbmdfdmFyYXJncyAoY29uc3QgQ1VNVUxBVElWRV9BUkdTICosIGVudW0gbWFjaGluZV9tb2RlLCB0cmVlLCBpbnQpOworKworKyMgIGVuZGlmIC8qIFRSRUVfQ09ERSAqLworKyMgZW5kaWYJLyogSEFWRV9NQUNISU5FX01PREVTICovCisrI2VuZGlmCisrCisrI2lmZGVmIFRSRUVfQ09ERQorK2V4dGVybiBpbnQgbmlvczJfcmV0dXJuX2luX21lbW9yeSAodHJlZSk7CisrCisrI2VuZGlmIC8qIFRSRUVfQ09ERSAqLworZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL25pb3MyL3QtbmlvczIgZ2NjLTMuNC42L2djYy9jb25maWcvbmlvczIvdC1uaW9zMgorLS0tIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvbmlvczIvdC1uaW9zMgkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy0zLjQuNi9nY2MvY29uZmlnL25pb3MyL3QtbmlvczIJMjAwNy0wOC0xNSAyMzowOTozNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTIzIEBACisrIyMKKysjIyBDb21waWxlciBmbGFncyB0byB1c2Ugd2hlbiBjb21waWxpbmcgbGliZ2NjMi5jLgorKyMjCisrIyMgTElCMkZVTkNTX0VYVFJBCisrIyMgQSBsaXN0IG9mIHNvdXJjZSBmaWxlIG5hbWVzIHRvIGJlIGNvbXBpbGVkIG9yIGFzc2VtYmxlZCBhbmQgaW5zZXJ0ZWQgaW50byBsaWJnY2MuYS4KKysKKytMSUIyRlVOQ1NfRVhUUkE9JChzcmNkaXIpL2NvbmZpZy9uaW9zMi9saWIyLWRpdm1vZC5jIFwKKysgICQoc3JjZGlyKS9jb25maWcvbmlvczIvbGliMi1kaXZtb2QtaGkuYyBcCisrICAkKHNyY2RpcikvY29uZmlnL25pb3MyL2xpYjItZGl2dGFibGUuYyBcCisrICAkKHNyY2RpcikvY29uZmlnL25pb3MyL2xpYjItbXVsLmMKKysKKysjIworKyMjIEZsb2F0aW5nIFBvaW50IEVtdWxhdGlvbgorKyMjIFRvIGhhdmUgR0NDIGluY2x1ZGUgc29mdHdhcmUgZmxvYXRpbmcgcG9pbnQgbGlicmFyaWVzIGluIGxpYmdjYy5hIGRlZmluZSBGUEJJVAorKyMjIGFuZCBEUEJJVCBhbG9uZyB3aXRoIGEgZmV3IHJ1bGVzIGFzIGZvbGxvd3M6CisrIyMKKysjIyAjIFdlIHdhbnQgZmluZSBncmFpbmVkIGxpYnJhcmllcywgc28gdXNlIHRoZSBuZXcgY29kZQorKyMjICMgdG8gYnVpbGQgdGhlIGZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbiBsaWJyYXJpZXMuCisrRlBCSVQ9JChzcmNkaXIpL2NvbmZpZy9uaW9zMi9uaW9zMi1mcC1iaXQuYworK0RQQklUPSQoc3JjZGlyKS9jb25maWcvbmlvczIvbmlvczItZHAtYml0LmMKKysKKytUQVJHRVRfTElCR0NDMl9DRkxBR1MgPSAtTzIKKysKKysjIEZMT0FUX09OTFkgLSBubyBkb3VibGVzCisrIyBTTUFMTF9NQUNISU5FIC0gUUkvSEkgaXMgZmFzdGVyIHRoYW4gU0kKKysjICAgICBBY3R1YWxseSBTTUFMTF9NQUNISU5FIHVzZXMgY2hhcnMgYW5kIHNob3J0cyBpbnN0ZWFkIG9mIGludHMKKysjICAgICBzaW5jZSBpbnRzICgxNi1iaXQgb25lcyBhcyB0aGV5IGFyZSB0b2RheSkgYXJlIGF0IGxlYXN0IGFzIGZhc3QKKysjICAgICBhcyBjaGFycyBhbmQgc2hvcnRzLCBkb24ndCBkZWZpbmUgU01BTExfTUFDSElORQorKyMgQ01QdHlwZSAtIHR5cGUgcmV0dXJuZWQgYnkgRlAgY29tcGFyZSwgaS5lLiBJTlQgKGhhcmQgY29kZWQgaW4gZnAtYml0IC0gc2VlIGNvZGUgKQorKworKyQoRlBCSVQpOiAkKHNyY2RpcikvY29uZmlnL2ZwLWJpdC5jIE1ha2VmaWxlCisrCWVjaG8gJyNkZWZpbmUgRkxPQVQnICAgICAgICAgID4gICR7RlBCSVR9CisrCWNhdCAkKHNyY2RpcikvY29uZmlnL2ZwLWJpdC5jID4+ICR7RlBCSVR9CisrCisrJChEUEJJVCk6ICQoc3JjZGlyKS9jb25maWcvZnAtYml0LmMgTWFrZWZpbGUKKysJZWNobyAnJyAgICAgICAgICA+ICAke0RQQklUfQorKwljYXQgJChzcmNkaXIpL2NvbmZpZy9mcC1iaXQuYyA+PiAke0RQQklUfQorKworK0VYVFJBX01VTFRJTElCX1BBUlRTID0gY3J0YmVnaW4ubyBjcnRlbmQubyBjcnRpLm8gY3J0bi5vIAorKworKyMgQXNzZW1ibGUgc3RhcnR1cCBmaWxlcy4gCisrJChUKWNydGkubzogJChzcmNkaXIpL2NvbmZpZy9uaW9zMi9jcnRpLmFzbSAkKEdDQ19QQVNTRVMpIAorKwkkKEdDQ19GT1JfVEFSR0VUKSAkKEdDQ19DRkxBR1MpICQoTVVMVElMSUJfQ0ZMQUdTKSAkKElOQ0xVREVTKSBcCisrCS1jIC1vICQoVCljcnRpLm8gLXggYXNzZW1ibGVyLXdpdGgtY3BwICQoc3JjZGlyKS9jb25maWcvbmlvczIvY3J0aS5hc20gCisrCisrJChUKWNydG4ubzogJChzcmNkaXIpL2NvbmZpZy9uaW9zMi9jcnRuLmFzbSAkKEdDQ19QQVNTRVMpIAorKwkkKEdDQ19GT1JfVEFSR0VUKSAkKEdDQ19DRkxBR1MpICQoTVVMVElMSUJfQ0ZMQUdTKSAkKElOQ0xVREVTKSBcCisrCS1jIC1vICQoVCljcnRuLm8gLXggYXNzZW1ibGVyLXdpdGgtY3BwICQoc3JjZGlyKS9jb25maWcvbmlvczIvY3J0bi5hc20gCisrCisrCisrIyMgWW91IG1heSBuZWVkIHRvIHByb3ZpZGUgYWRkaXRpb25hbCAjZGVmaW5lcyBhdCB0aGUgYmVnaW5uaW5nIG9mCisrIyMgZnAtYml0LmMgYW5kIGRwLWJpdC5jIHRvIGNvbnRyb2wgdGFyZ2V0IGVuZGlhbm5lc3MgYW5kIG90aGVyIG9wdGlvbnMKKysjIworKyMjIENSVFNUVUZGX1RfQ0ZMQUdTCisrIyMgU3BlY2lhbCBmbGFncyB1c2VkIHdoZW4gY29tcGlsaW5nIGNydHN0dWZmLmMuICBTZWUgSW5pdGlhbGl6YXRpb24uCisrIyMKKysjIyBDUlRTVFVGRl9UX0NGTEFHU19TCisrIyMgU3BlY2lhbCBmbGFncyB1c2VkIHdoZW4gY29tcGlsaW5nIGNydHN0dWZmLmMgZm9yIHNoYXJlZCBsaW5raW5nLiAgVXNlZAorKyMjIGlmIHlvdSB1c2UgY3J0YmVnaW5TLm8gYW5kIGNydGVuZFMubyBpbiBFWFRSQS1QQVJUUy4gU2VlIEluaXRpYWxpemF0aW9uLgorKyMjCisrIyMgTVVMVElMSUJfT1BUSU9OUworKyMjIEZvciBzb21lIHRhcmdldHMsIGludm9raW5nIEdDQyBpbiBkaWZmZXJlbnQgd2F5cyBwcm9kdWNlcyBvYmplY3RzIHRoYXQKKysjIyBjYW4gbm90IGJlIGxpbmtlZCB0b2dldGhlci4gIEZvciBleGFtcGxlLCBmb3Igc29tZSB0YXJnZXRzIEdDQyBwcm9kdWNlcworKyMjIGJvdGggYmlnIGFuZCBsaXR0bGUgZW5kaWFuIGNvZGUuICBGb3IgdGhlc2UgdGFyZ2V0cywgeW91IG11c3QgYXJyYW5nZQorKyMjIGZvciBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBsaWJnY2MuYSB0byBiZSBjb21waWxlZCwgb25lIGZvciBlYWNoIHNldCBvZgorKyMjIGluY29tcGF0aWJsZSBvcHRpb25zLiAgV2hlbiBHQ0MgaW52b2tlcyB0aGUgbGlua2VyLCBpdCBhcnJhbmdlcyB0byBsaW5rCisrIyMgaW4gdGhlIHJpZ2h0IHZlcnNpb24gb2YgbGliZ2NjLmEsIGJhc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgb3B0aW9ucworKyMjIHVzZWQuCisrIyMgVGhlIE1VTFRJTElCX09QVElPTlMgbWFjcm8gbGlzdHMgdGhlIHNldCBvZiBvcHRpb25zIGZvciB3aGljaCBzcGVjaWFsCisrIyMgdmVyc2lvbnMgb2YgbGliZ2NjLmEgbXVzdCBiZSBidWlsdC4gIFdyaXRlIG9wdGlvbnMgdGhhdCBhcmUgbXV0dWFsbHkKKysjIyBpbmNvbXBhdGlibGUgc2lkZSBieSBzaWRlLCBzZXBhcmF0ZWQgYnkgYSBzbGFzaC4gIFdyaXRlIG9wdGlvbnMgdGhhdCBtYXkKKysjIyBiZSB1c2VkIHRvZ2V0aGVyIHNlcGFyYXRlZCBieSBhIHNwYWNlLiAgVGhlIGJ1aWxkIHByb2NlZHVyZSB3aWxsIGJ1aWxkCisrIyMgYWxsIGNvbWJpbmF0aW9ucyBvZiBjb21wYXRpYmxlIG9wdGlvbnMuCisrIyMKKysjIyBGb3IgZXhhbXBsZSwgaWYgeW91IHNldCBNVUxUSUxJQl9PUFRJT05TIHRvIG02ODAwMC9tNjgwMjAgbXNvZnQtZmxvYXQsCisrIyMgTWFrZWZpbGUgd2lsbCBidWlsZCBzcGVjaWFsIHZlcnNpb25zIG9mIGxpYmdjYy5hIHVzaW5nIHRoZSBmb2xsb3dpbmcKKysjIyBzZXRzIG9mIG9wdGlvbnM6IC1tNjgwMDAsIC1tNjgwMjAsIC1tc29mdC1mbG9hdCwgLW02ODAwMCAtbXNvZnQtZmxvYXQsCisrIyMgYW5kIC1tNjgwMjAgLW1zb2Z0LWZsb2F0LgorKworK01VTFRJTElCX09QVElPTlMgPSBtbm8taHctbXVsIG1ody1tdWx4CisrCisrIyMgTVVMVElMSUJfRElSTkFNRVMKKysjIyBJZiBNVUxUSUxJQl9PUFRJT05TIGlzIHVzZWQsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgbmFtZXMKKysjIyB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGhvbGQgdGhlIHZhcmlvdXMgbGlicmFyaWVzLiAgV3JpdGUgb25lIGVsZW1lbnQgaW4KKysjIyBNVUxUSUxJQl9ESVJOQU1FUyBmb3IgZWFjaCBlbGVtZW50IGluIE1VTFRJTElCX09QVElPTlMuIElmCisrIyMgTVVMVElMSUJfRElSTkFNRVMgaXMgbm90IHVzZWQsIHRoZSBkZWZhdWx0IHZhbHVlIHdpbGwgYmUKKysjIyBNVUxUSUxJQl9PUFRJT05TLCB3aXRoIGFsbCBzbGFzaGVzIHRyZWF0ZWQgYXMgc3BhY2VzLgorKyMjIEZvciBleGFtcGxlLCBpZiBNVUxUSUxJQl9PUFRJT05TIGlzIHNldCB0byBtNjgwMDAvbTY4MDIwIG1zb2Z0LWZsb2F0LAorKyMjIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUgb2YgTVVMVElMSUJfRElSTkFNRVMgaXMgbTY4MDAwIG02ODAyMAorKyMjIG1zb2Z0LWZsb2F0LiAgWW91IG1heSBzcGVjaWZ5IGEgZGlmZmVyZW50IHZhbHVlIGlmIHlvdSBkZXNpcmUgYQorKyMjIGRpZmZlcmVudCBzZXQgb2YgZGlyZWN0b3J5IG5hbWVzLgorKworKyMgTVVMVElMSUJfRElSTkFNRVMgPQorKworKyMjIE1VTFRJTElCX01BVENIRVMKKysjIyBTb21ldGltZXMgdGhlIHNhbWUgb3B0aW9uIG1heSBiZSB3cml0dGVuIGluIHR3byBkaWZmZXJlbnQgd2F5cy4gIElmIGFuCisrIyMgb3B0aW9uIGlzIGxpc3RlZCBpbiBNVUxUSUxJQl9PUFRJT05TLCBHQ0MgbmVlZHMgdG8ga25vdyBhYm91dCBhbnkKKysjIyBzeW5vbnltcy4gIEluIHRoYXQgY2FzZSwgc2V0IE1VTFRJTElCX01BVENIRVMgdG8gYSBsaXN0IG9mIGl0ZW1zIG9mIHRoZQorKyMjIGZvcm0gb3B0aW9uPW9wdGlvbiB0byBkZXNjcmliZSBhbGwgcmVsZXZhbnQgc3lub255bXMuICBGb3IgZXhhbXBsZSwKKysjIyBtNjgwMDA9bWM2ODAwMCBtNjgwMjA9bWM2ODAyMC4KKysjIworKyMjIE1VTFRJTElCX0VYQ0VQVElPTlMKKysjIyBTb21ldGltZXMgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgc2V0cyBvZiBNVUxUSUxJQl9PUFRJT05TIGJlaW5nCisrIyMgc3BlY2lmaWVkLCB0aGVyZSBhcmUgY29tYmluYXRpb25zIHRoYXQgc2hvdWxkIG5vdCBiZSBidWlsdC4gIEluIHRoYXQKKysjIyBjYXNlLCBzZXQgTVVMVElMSUJfRVhDRVBUSU9OUyB0byBiZSBhbGwgb2YgdGhlIHN3aXRjaCBleGNlcHRpb25zIGluCisrIyMgc2hlbGwgY2FzZSBzeW50YXggdGhhdCBzaG91bGQgbm90IGJlIGJ1aWx0LgorKyMjIEZvciBleGFtcGxlLCBpbiB0aGUgUG93ZXJQQyBlbWJlZGRlZCBBQkkgc3VwcG9ydCwgaXQgaXMgbm90IGRlc2lyYWJsZSB0bworKyMjIGJ1aWxkIGxpYnJhcmllcyBjb21waWxlZCB3aXRoIHRoZSAtbWNhbGwtYWl4IG9wdGlvbiBhbmQgZWl0aGVyIG9mIHRoZQorKyMjIC1mbGVhZGluZy11bmRlcnNjb3JlIG9yIC1tbGl0dGxlIG9wdGlvbnMgYXQgdGhlIHNhbWUgdGltZS4gIFRoZXJlZm9yZQorKyMjIE1VTFRJTElCX0VYQ0VQVElPTlMgaXMgc2V0IHRvCisrIyMKKysjIyAqbWNhbGwtYWl4LypmbGVhZGluZy11bmRlcnNjb3JlKiAqbWxpdHRsZS8qbWNhbGwtYWl4KgorKyMjCisrCisrTVVMVElMSUJfRVhDRVBUSU9OUyA9ICptbm8taHctbXVsLyptaHctbXVseCoKKysKKysjIworKyMjIE1VTFRJTElCX0VYVFJBX09QVFMgU29tZXRpbWVzIGl0IGlzIGRlc2lyYWJsZSB0aGF0IHdoZW4gYnVpbGRpbmcKKysjIyBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBsaWJnY2MuYSBjZXJ0YWluIG9wdGlvbnMgc2hvdWxkIGFsd2F5cyBiZSBwYXNzZWQgb24KKysjIyB0byB0aGUgY29tcGlsZXIuICBJbiB0aGF0IGNhc2UsIHNldCBNVUxUSUxJQl9FWFRSQV9PUFRTIHRvIGJlIHRoZSBsaXN0CisrIyMgb2Ygb3B0aW9ucyB0byBiZSB1c2VkIGZvciBhbGwgYnVpbGRzLgorKyMjCisrCitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcuZ2NjIGdjYy0zLjQuNi9nY2MvY29uZmlnLmdjYworLS0tIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcuZ2NjCTIwMDctMDgtMTUgMjM6MDc6MDAuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTMuNC42L2djYy9jb25maWcuZ2NjCTIwMDctMDgtMTUgMjM6MDk6MzYuMDAwMDAwMDAwICswMjAwCitAQCAtMTM0Miw2ICsxMzQyLDEwIEBACisgCQl0aHJlYWRfZmlsZT0ncG9zaXgnCisgCWZpCisgCTs7CisrIyBKQkcKKytuaW9zMi0qLSogfCBuaW9zMi0qLSopCisrCXRtX2ZpbGU9ImVsZm9zLmggJHt0bV9maWxlfSIKKysJOzsKKyAjIG02OGhjMTEgYW5kIG02OGhjMTIgc2hhcmUgdGhlIHNhbWUgbWFjaGluZSBkZXNjcmlwdGlvbi4KKyBtNjhoYzExLSotKnxtNjgxMS0qLSopCisgCXRtX2ZpbGU9ImRieGVsZi5oIGVsZm9zLmggbTY4aGMxMS9tNjhoYzExLmgiCitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2djYy9jc2UuYyBnY2MtMy40LjYvZ2NjL2NzZS5jCistLS0gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NzZS5jCTIwMDUtMTItMzEgMDE6Mzk6NDIuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTMuNC42L2djYy9jc2UuYwkyMDA3LTA4LTE1IDIzOjA5OjM2LjAwMDAwMDAwMCArMDIwMAorQEAgLTMxMzQsNiArMzEzNCwxMCBAQAorICNpZmRlZiBGTE9BVF9TVE9SRV9GTEFHX1ZBTFVFCisgCSAgUkVBTF9WQUxVRV9UWVBFIGZzZnY7CisgI2VuZGlmCisrI2lmZGVmIF9fbmlvczJfXworKwkgIGlmIChwLT5pc19jb25zdCkKKysJICAgIGJyZWFrOworKyNlbmRpZgorIAorIAkgIC8qIElmIHRoZSBlbnRyeSBpc24ndCB2YWxpZCwgc2tpcCBpdC4gICovCisgCSAgaWYgKCEgZXhwX2VxdWl2X3AgKHAtPmV4cCwgcC0+ZXhwLCAxLCAwKSkKK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvZ2NjL2RvYy9leHRlbmQudGV4aSBnY2MtMy40LjYvZ2NjL2RvYy9leHRlbmQudGV4aQorLS0tIGdjYy0zLjQuNi5vcmlnL2djYy9kb2MvZXh0ZW5kLnRleGkJMjAwNS0wMi0yNiAyMzoxNzoyNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtMy40LjYvZ2NjL2RvYy9leHRlbmQudGV4aQkyMDA3LTA4LTE1IDIzOjA5OjM2LjAwMDAwMDAwMCArMDIwMAorQEAgLTU2MzgsMTIgKzU2MzgsMTE4IEBACisgaW5zdHJ1Y3Rpb25zLCBidXQgYWxsb3cgdGhlIGNvbXBpbGVyIHRvIHNjaGVkdWxlIHRob3NlIGNhbGxzLgorIAorIEBtZW51CisrKiBBbHRlcmEgTmlvcyBJSSBCdWlsdC1pbiBGdW5jdGlvbnM6OgorICogQWxwaGEgQnVpbHQtaW4gRnVuY3Rpb25zOjoKKyAqIEFSTSBCdWlsdC1pbiBGdW5jdGlvbnM6OgorICogWDg2IEJ1aWx0LWluIEZ1bmN0aW9uczo6CisgKiBQb3dlclBDIEFsdGlWZWMgQnVpbHQtaW4gRnVuY3Rpb25zOjoKKyBAZW5kIG1lbnUKKyAKKytAbm9kZSBBbHRlcmEgTmlvcyBJSSBCdWlsdC1pbiBGdW5jdGlvbnMKKytAc3Vic2VjdGlvbiBBbHRlcmEgTmlvcyBJSSBCdWlsdC1pbiBGdW5jdGlvbnMKKysKKytUaGVzZSBidWlsdC1pbiBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIEFsdGVyYSBOaW9zIElJCisrZmFtaWx5IG9mIHByb2Nlc3NvcnMuCisrCisrVGhlIGZvbGxvd2luZyBidWlsdC1pbiBmdW5jdGlvbnMgYXJlIGFsd2F5cyBhdmFpbGFibGUuICBUaGV5CisrYWxsIGdlbmVyYXRlIHRoZSBtYWNoaW5lIGluc3RydWN0aW9uIHRoYXQgaXMgcGFydCBvZiB0aGUgbmFtZS4KKysKKytAZXhhbXBsZQorK2ludCBfX2J1aWx0aW5fbGRiaW8gKHZvbGF0aWxlIGNvbnN0IHZvaWQgKikKKytpbnQgX19idWlsdGluX2xkYnVpbyAodm9sYXRpbGUgY29uc3Qgdm9pZCAqKQorK2ludCBfX2J1aWx0aW5fbGRoaW8gKHZvbGF0aWxlIGNvbnN0IHZvaWQgKikKKytpbnQgX19idWlsdGluX2xkaHVpbyAodm9sYXRpbGUgY29uc3Qgdm9pZCAqKQorK2ludCBfX2J1aWx0aW5fbGR3aW8gKHZvbGF0aWxlIGNvbnN0IHZvaWQgKikKKyt2b2lkIF9fYnVpbHRpbl9zdGJpbyAodm9sYXRpbGUgdm9pZCAqLCBpbnQpCisrdm9pZCBfX2J1aWx0aW5fc3RoaW8gKHZvbGF0aWxlIHZvaWQgKiwgaW50KQorK3ZvaWQgX19idWlsdGluX3N0d2lvICh2b2xhdGlsZSB2b2lkICosIGludCkKKyt2b2lkIF9fYnVpbHRpbl9zeW5jICh2b2lkKQorK2ludCBfX2J1aWx0aW5fcmRjdGwgKGludCkgCisrdm9pZCBfX2J1aWx0aW5fd3JjdGwgKGludCwgaW50KQorK0BlbmQgZXhhbXBsZQorKworK1RoZSBmb2xsb3dpbmcgYnVpbHQtaW4gZnVuY3Rpb25zIGFyZSBhbHdheXMgYXZhaWxhYmxlLiAgVGhleQorK2FsbCBnZW5lcmF0ZSBhIE5pb3MgSUkgQ3VzdG9tIEluc3RydWN0aW9uLiBUaGUgbmFtZSBvZiB0aGUgCisrZnVuY3Rpb24gcmVwcmVzZW50cyB0aGUgdHlwZXMgdGhhdCB0aGUgZnVuY3Rpb24gdGFrZXMgYW5kIAorK3JldHVybnMuIFRoZSBsZXR0ZXIgYmVmb3JlIHRoZSBAY29kZXtufSBpcyB0aGUgcmV0dXJuIHR5cGUKKytvciB2b2lkIGlmIGFic2VudC4gVGhlIEBjb2Rle259IHJlcHJlc250cyB0aGUgZmlyc3QgcGFyYW1ldGVyCisrdG8gYWxsIHRoZSBjdXN0b20gaW5zdHJ1Y3Rpb25zLCB0aGUgY3VzdG9tIGluc3RydWN0aW9uIG51bWJlci4KKytUaGUgdHdvIGxldHRlcnMgYWZ0ZXIgdGhlIEBjb2Rle259IHJlcHJlc2VudCB0aGUgdXAgdG8gdHdvIAorK3BhcmFtZXRlcnMgdG8gdGhlIGZ1bmN0aW9uLgorKworK1RoZSBsZXR0ZXJzIHJlcHJzZW50IHRoZSBmb2xsb3dpbmcgZGF0YSB0eXBlczoKKytAdGFibGUgQGNvZGUKKytAaXRlbSA8bm8gbGV0dGVyPgorK0Bjb2Rle3ZvaWR9IGZvciByZXR1cm4gdHlwZSBhbmQgbm8gcGFyYW1ldGVyIGZvciBwYXJhbWV0ZXIgdHlwZXMuCisrCisrQGl0ZW0gaQorK0Bjb2Rle2ludH0gZm9yIHJldHVybiB0eXBlIGFuZCBwYXJhbWV0ZXIgdHlwZQorKworK0BpdGVtIGYKKytAY29kZXtmbG9hdH0gZm9yIHJldHVybiB0eXBlIGFuZCBwYXJhbWV0ZXIgdHlwZQorKworK0BpdGVtIHAKKytAY29kZXt2b2lkICp9IGZvciByZXR1cm4gdHlwZSBhbmQgcGFyYW1ldGVyIHR5cGUKKysKKytAZW5kIHRhYmxlCisrCisrQW5kIHRoZSBmdW5jdGlvbiBuYW1lcyBhcmU6CisrQGV4YW1wbGUKKyt2b2lkIF9fYnVpbHRpbl9jdXN0b21fbiAodm9pZCkKKyt2b2lkIF9fYnVpbHRpbl9jdXN0b21fbmkgKGludCkKKyt2b2lkIF9fYnVpbHRpbl9jdXN0b21fbmYgKGZsb2F0KQorK3ZvaWQgX19idWlsdGluX2N1c3RvbV9ucCAodm9pZCAqKQorK3ZvaWQgX19idWlsdGluX2N1c3RvbV9uaWkgKGludCwgaW50KQorK3ZvaWQgX19idWlsdGluX2N1c3RvbV9uaWYgKGludCwgZmxvYXQpCisrdm9pZCBfX2J1aWx0aW5fY3VzdG9tX25pcCAoaW50LCB2b2lkICopCisrdm9pZCBfX2J1aWx0aW5fY3VzdG9tX25maSAoZmxvYXQsIGludCkKKyt2b2lkIF9fYnVpbHRpbl9jdXN0b21fbmZmIChmbG9hdCwgZmxvYXQpCisrdm9pZCBfX2J1aWx0aW5fY3VzdG9tX25mcCAoZmxvYXQsIHZvaWQgKikKKyt2b2lkIF9fYnVpbHRpbl9jdXN0b21fbnBpICh2b2lkICosIGludCkKKyt2b2lkIF9fYnVpbHRpbl9jdXN0b21fbnBmICh2b2lkICosIGZsb2F0KQorK3ZvaWQgX19idWlsdGluX2N1c3RvbV9ucHAgKHZvaWQgKiwgdm9pZCAqKQorK2ludCBfX2J1aWx0aW5fY3VzdG9tX2luICh2b2lkKQorK2ludCBfX2J1aWx0aW5fY3VzdG9tX2luaSAoaW50KQorK2ludCBfX2J1aWx0aW5fY3VzdG9tX2luZiAoZmxvYXQpCisraW50IF9fYnVpbHRpbl9jdXN0b21faW5wICh2b2lkICopCisraW50IF9fYnVpbHRpbl9jdXN0b21faW5paSAoaW50LCBpbnQpCisraW50IF9fYnVpbHRpbl9jdXN0b21faW5pZiAoaW50LCBmbG9hdCkKKytpbnQgX19idWlsdGluX2N1c3RvbV9pbmlwIChpbnQsIHZvaWQgKikKKytpbnQgX19idWlsdGluX2N1c3RvbV9pbmZpIChmbG9hdCwgaW50KQorK2ludCBfX2J1aWx0aW5fY3VzdG9tX2luZmYgKGZsb2F0LCBmbG9hdCkKKytpbnQgX19idWlsdGluX2N1c3RvbV9pbmZwIChmbG9hdCwgdm9pZCAqKQorK2ludCBfX2J1aWx0aW5fY3VzdG9tX2lucGkgKHZvaWQgKiwgaW50KQorK2ludCBfX2J1aWx0aW5fY3VzdG9tX2lucGYgKHZvaWQgKiwgZmxvYXQpCisraW50IF9fYnVpbHRpbl9jdXN0b21faW5wcCAodm9pZCAqLCB2b2lkICopCisrZmxvYXQgX19idWlsdGluX2N1c3RvbV9mbiAodm9pZCkKKytmbG9hdCBfX2J1aWx0aW5fY3VzdG9tX2ZuaSAoaW50KQorK2Zsb2F0IF9fYnVpbHRpbl9jdXN0b21fZm5mIChmbG9hdCkKKytmbG9hdCBfX2J1aWx0aW5fY3VzdG9tX2ZucCAodm9pZCAqKQorK2Zsb2F0IF9fYnVpbHRpbl9jdXN0b21fZm5paSAoaW50LCBpbnQpCisrZmxvYXQgX19idWlsdGluX2N1c3RvbV9mbmlmIChpbnQsIGZsb2F0KQorK2Zsb2F0IF9fYnVpbHRpbl9jdXN0b21fZm5pcCAoaW50LCB2b2lkICopCisrZmxvYXQgX19idWlsdGluX2N1c3RvbV9mbmZpIChmbG9hdCwgaW50KQorK2Zsb2F0IF9fYnVpbHRpbl9jdXN0b21fZm5mZiAoZmxvYXQsIGZsb2F0KQorK2Zsb2F0IF9fYnVpbHRpbl9jdXN0b21fZm5mcCAoZmxvYXQsIHZvaWQgKikKKytmbG9hdCBfX2J1aWx0aW5fY3VzdG9tX2ZucGkgKHZvaWQgKiwgaW50KQorK2Zsb2F0IF9fYnVpbHRpbl9jdXN0b21fZm5wZiAodm9pZCAqLCBmbG9hdCkKKytmbG9hdCBfX2J1aWx0aW5fY3VzdG9tX2ZucHAgKHZvaWQgKiwgdm9pZCAqKQorK3ZvaWQgKiBfX2J1aWx0aW5fY3VzdG9tX3BuICh2b2lkKQorK3ZvaWQgKiBfX2J1aWx0aW5fY3VzdG9tX3BuaSAoaW50KQorK3ZvaWQgKiBfX2J1aWx0aW5fY3VzdG9tX3BuZiAoZmxvYXQpCisrdm9pZCAqIF9fYnVpbHRpbl9jdXN0b21fcG5wICh2b2lkICopCisrdm9pZCAqIF9fYnVpbHRpbl9jdXN0b21fcG5paSAoaW50LCBpbnQpCisrdm9pZCAqIF9fYnVpbHRpbl9jdXN0b21fcG5pZiAoaW50LCBmbG9hdCkKKyt2b2lkICogX19idWlsdGluX2N1c3RvbV9wbmlwIChpbnQsIHZvaWQgKikKKyt2b2lkICogX19idWlsdGluX2N1c3RvbV9wbmZpIChmbG9hdCwgaW50KQorK3ZvaWQgKiBfX2J1aWx0aW5fY3VzdG9tX3BuZmYgKGZsb2F0LCBmbG9hdCkKKyt2b2lkICogX19idWlsdGluX2N1c3RvbV9wbmZwIChmbG9hdCwgdm9pZCAqKQorK3ZvaWQgKiBfX2J1aWx0aW5fY3VzdG9tX3BucGkgKHZvaWQgKiwgaW50KQorK3ZvaWQgKiBfX2J1aWx0aW5fY3VzdG9tX3BucGYgKHZvaWQgKiwgZmxvYXQpCisrdm9pZCAqIF9fYnVpbHRpbl9jdXN0b21fcG5wcCAodm9pZCAqLCB2b2lkICopCisrQGVuZCBleGFtcGxlCisrCisrCisgQG5vZGUgQWxwaGEgQnVpbHQtaW4gRnVuY3Rpb25zCisgQHN1YnNlY3Rpb24gQWxwaGEgQnVpbHQtaW4gRnVuY3Rpb25zCisgCitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2djYy9kb2MvaW52b2tlLnRleGkgZ2NjLTMuNC42L2djYy9kb2MvaW52b2tlLnRleGkKKy0tLSBnY2MtMy40LjYub3JpZy9nY2MvZG9jL2ludm9rZS50ZXhpCTIwMDUtMTAtMDggMDI6MjI6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTMuNC42L2djYy9kb2MvaW52b2tlLnRleGkJMjAwNy0wOC0xNSAyMzowOTozNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMzcsNiArMzM3LDE0IEBACisgQGl0ZW0gTWFjaGluZSBEZXBlbmRlbnQgT3B0aW9ucworIEB4cmVme1N1Ym1vZGVsIE9wdGlvbnMsLEhhcmR3YXJlIE1vZGVscyBhbmQgQ29uZmlndXJhdGlvbnN9LgorIAorK0BlbXBoe0FsdGVyYSBOaW9zIElJIE9wdGlvbnN9CisrQGdjY29wdGxpc3R7LW1zbWFsbGMgLW1uby1ieXBhc3MtY2FjaGUgLW1ieXBhc3MtY2FjaGUgQGdvbAorKy1tbm8tY2FjaGUtdm9sYXRpbGUgLW1jYWNoZS12b2xhdGlsZSAtbW5vLWlubGluZS1tZW1jcHkgQGdvbCAKKystbWlubGluZS1tZW1jcHkgLW1uby1mYXN0LXN3LWRpdiAtbWZhc3Qtc3ctZGl2IEBnb2wKKystbWh3LW11bCAtbW5vLWh3LW11bCAtbWh3LW11bHggLW1uby1ody1tdWx4IEBnb2wKKystbW5vLWh3LWRpdiAtbWh3LWRpdiBAZ29sCisrLW1zeXMtY3J0MD0gLW1zeXMtbGliPSAtbXN5cz1ub3N5cyB9CisrCisgQGVtcGh7TTY4MHgwIE9wdGlvbnN9CisgQGdjY29wdGxpc3R7LW02ODAwMCAgLW02ODAyMCAgLW02ODAyMC00MCAgLW02ODAyMC02MCAgLW02ODAzMCAgLW02ODA0MCBAZ29sCisgLW02ODA2MCAgLW1jcHUzMiAgLW01MjAwICAtbTY4ODgxICAtbWJpdGZpZWxkICAtbWM2ODAwMCAgLW1jNjgwMjAgICBAZ29sCitAQCAtNTgzOSw2ICs1ODQ3LDcgQEAKKyB0aGF0IG1hY3JvLCB3aGljaCBlbmFibGVzIHlvdSB0byBjaGFuZ2UgdGhlIGRlZmF1bHRzLgorIAorIEBtZW51CisrKiBBbHRlcmEgTmlvcyBJSSBPcHRpb25zOjoKKyAqIE02ODB4MCBPcHRpb25zOjoKKyAqIE02OGhjMXggT3B0aW9uczo6CisgKiBWQVggT3B0aW9uczo6CitAQCAtNTg3NCw2ICs1ODgzLDEwMyBAQAorICogRlJWIE9wdGlvbnM6OgorIEBlbmQgbWVudQorIAorKworK0Bub2RlIEFsdGVyYSBOaW9zIElJIE9wdGlvbnMKKytAc3Vic2VjdGlvbiBBbHRlcmEgTmlvcyBJSSBPcHRpb25zCisrQGNpbmRleCBBbHRlcmEgTmlvcyBJSSBvcHRpb25zCisrCisrVGhlc2UgYXJlIHRoZSBAc2FtcHstbX0gb3B0aW9ucyBkZWZpbmVkIGZvciB0aGUgQWx0ZXJhIE5pb3MgSUkgCisrcHJvY2Vzc29yLgorKworK0B0YWJsZSBAZ2NjdGFib3B0CisrCisrQGl0ZW0gLW1zbWFsbGMKKytAb3BpbmRleCBtc21hbGxjCisrCisrTGluayB3aXRoIGEgbGltaXRlZCB2ZXJzaW9uIG9mIHRoZSBDIGxpYnJhcnksIC1sc21hbGxjLiBGb3IgbW9yZSAKKytpbmZvcm1hdGlvbiBzZWUgdGhlIEMgTGlicmFyeSBEb2N1bWVudGF0aW9uLgorKworKworK0BpdGVtIC1tYnlwYXNzLWNhY2hlCisrQGl0ZW14IC1tbm8tYnlwYXNzLWNhY2hlCisrQG9waW5kZXggbW5vLWJ5cGFzcy1jYWNoZQorK0BvcGluZGV4IG1ieXBhc3MtY2FjaGUKKysKKytGb3JjZSBhbGwgbG9hZCBhbmQgc3RvcmUgaW5zdHJ1Y3Rpb25zIHRvIGFsd2F5cyBieXBhc3MgY2FjaGUgYnkgCisrdXNpbmcgaW8gdmFyaWFudHMgb2YgdGhlIGluc3RydWN0aW9ucy4gVGhlIGRlZmF1bHQgaXMgdG8gbm90CisrYnlwYXNzIHRoZSBjYWNoZS4KKysKKytAaXRlbSAtbW5vLWNhY2hlLXZvbGF0aWxlIAorK0BpdGVteCAtbWNhY2hlLXZvbGF0aWxlICAgICAgIAorK0BvcGluZGV4IG1jYWNoZS12b2xhdGlsZSAKKytAb3BpbmRleCBtbm8tY2FjaGUtdm9sYXRpbGUKKysKKytWb2xhdGlsZSBtZW1vcnkgYWNjZXNzIGJ5cGFzcyB0aGUgY2FjaGUgdXNpbmcgdGhlIGlvIHZhcmlhbnRzIG9mIAorK3RoZSBsZCBhbmQgc3QgaW5zdHJ1Y3Rpb25zLiBUaGUgZGVmYXVsdCBpcyB0byBjYWNoZSB2b2xhdGlsZSAKKythY2Nlc3Nlcy4gCisrCisrLW1uby1jYWNoZS12b2xhdGlsZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIGRlbGV0ZWQgaW4gYSAKKytmdXR1cmUgR0NDIHJlbGVhc2UuCisrCisrCisrQGl0ZW0gLW1uby1pbmxpbmUtbWVtY3B5CisrQGl0ZW14IC1taW5saW5lLW1lbWNweQorK0BvcGluZGV4IG1uby1pbmxpbmUtbWVtY3B5IAorK0BvcGluZGV4IG1pbmxpbmUtbWVtY3B5CisrCisrRG8gbm90IGlubGluZSBtZW1jcHkuIFRoZSBkZWZhdWx0IGlzIHRvIGlubGluZSB3aGVuIC1PIGlzIG9uLgorKworKworK0BpdGVtIC1tbm8tZmFzdC1zdy1kaXYKKytAaXRlbXggLW1mYXN0LXN3LWRpdgorK0BvcGluZGV4IG1uby1mYXN0LXN3LWRpdgorK0BvcGluZGV4IG1mYXN0LXN3LWRpdgorKworK0RvIG5vIHVzZSB0YWJsZSBiYXNlZCBmYXN0IGRpdmlkZSBmb3Igc21hbGwgbnVtYmVycy4gVGhlIGRlZmF1bHQgCisraXMgdG8gdXNlIHRoZSBmYXN0IGRpdmlkZSBhdCAtTzMgYW5kIGFib3ZlLgorKworKworK0BpdGVtIC1tbm8taHctbXVsCisrQGl0ZW14IC1taHctbXVsCisrQGl0ZW14IC1tbm8taHctbXVseAorK0BpdGVteCAtbWh3LW11bHgKKytAaXRlbXggLW1uby1ody1kaXYKKytAaXRlbXggLW1ody1kaXYKKytAb3BpbmRleCBtbm8taHctbXVsCisrQG9waW5kZXggbWh3LW11bAorK0BvcGluZGV4IG1uby1ody1tdWx4CisrQG9waW5kZXggbWh3LW11bHgKKytAb3BpbmRleCBtbm8taHctZGl2CisrQG9waW5kZXggbWh3LWRpdgorKworK0VuYWJsZSBvciBkaXNhYmxlIGVtaXR0aW5nIEBjb2Rle211bH0sIEBjb2Rle211bHh9IGFuZCBAY29kZXtkaXZ9IGZhbWlseSBvZiAKKytpbnN0cnVjdGlvbnMgYnkgdGhlIGNvbXBpbGVyLiBUaGUgZGVmYXVsdCBpcyB0byBlbWl0IEBjb2Rle211bH0KKythbmQgbm90IGVtaXQgQGNvZGV7ZGl2fSBhbmQgQGNvZGV7bXVseH0uCisrCisrVGhlIGRpZmZlcmVudCBjb21iaW5hdGlvbnMgb2YgQGNvZGV7bXVsfSBhbmQgQGNvZGV7bXVseH0gaW5zdHJ1Y3Rpb25zIAorK2dlbmVyYXRlIGEgZGlmZmVyZW50IG11bHRpbGliIG9wdGlvbnMuIAorKworKworK0BpdGVtIC1tc3lzLWNydDA9QHZhcntzdGFydGZpbGV9CisrQG9waW5kZXggbXN5cy1jcnQwCisrCisrQHZhcntzdGFydGZpbGV9IGlzIHRoZSBmaWxlIG5hbWUgIG9mIHRoZSBzdGFydGZpbGUgKGNydDApIHRvIHVzZSAKKyt3aGVuIGxpbmtpbmcuIFRoZSBkZWZhdWx0IGlzIGNydDAubyB0aGF0IGNvbWVzIHdpdGggbGliZ2xvc3MKKythbmQgaXMgb25seSBzdWl0YWJsZSBmb3IgdXNlIHdpdGggdGhlIGluc3RydWN0aW9uIHNldAorK3NpbXVsYXRvci4KKysKKytAaXRlbSAtbXN5cy1saWI9QHZhcntzeXN0ZW1saWJ9CisrQGl0ZW14IC1tc3lzLWxpYj1ub3N5cworK0BvcGluZGV4IG1zeXMtbGliCisrCisrQHZhcntzeXN0ZW1saWJ9IGlzIHRoZSBsaWJyYXJ5IG5hbWUgb2YgdGhlIGxpYnJhcnkgd2hpY2ggcHJvdmlkZXMKKyt0aGUgc3lzdGVtIGNhbGxzIHJlcXVpcmVkIGJ5IHRoZSBDIGxpYnJhcnksIGUuZy4gQGNvZGV7cmVhZH0sIEBjb2Rle3dyaXRlfQorK2V0Yy4gVGhlIGRlZmF1bHQgaXMgdG8gdXNlIG5vc3lzLCB0aGlzIGxpYnJhcnkgcHJvdmlkZXMKKytzdHViIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgY2FsbHMgYW5kIGlzIHBhcnQgb2YgbGliZ2xvc3MuCisrCisrQGVuZCB0YWJsZQorKworKworIEBub2RlIE02ODB4MCBPcHRpb25zCisgQHN1YnNlY3Rpb24gTTY4MHgwIE9wdGlvbnMKKyBAY2luZGV4IE02ODB4MCBvcHRpb25zCitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2djYy9kb2MvbWQudGV4aSBnY2MtMy40LjYvZ2NjL2RvYy9tZC50ZXhpCistLS0gZ2NjLTMuNC42Lm9yaWcvZ2NjL2RvYy9tZC50ZXhpCTIwMDQtMTEtMTMgMjM6MzE6NDIuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTMuNC42L2djYy9kb2MvbWQudGV4aQkyMDA3LTA4LTE1IDIzOjA5OjM2LjAwMDAwMDAwMCArMDIwMAorQEAgLTEzMzcsNiArMTMzNyw0OSBAQAorIGF2YWlsYWJsZSBvbiBzb21lIHBhcnRpY3VsYXIgbWFjaGluZXMuCisgCisgQHRhYmxlIEBlbXBoCisrCisrQGl0ZW0gQWx0ZXJhIE5pb3MgSUkgZmFtaWx5LS0tQGZpbGV7bmlvczIuaH0KKytAdGFibGUgQGNvZGUKKysKKytAaXRlbSBJCisrSW50ZWdlciB0aGF0IGlzIHZhbGlkIGFzIGFuIGltbWVkaWF0ZSBvcGVyYW5kIGluIGFuCisraW5zdHJ1Y3Rpb24gdGFraW5nIGEgc2lnbmVkIDE2LWJpdCBudW1iZXIuIFJhbmdlCisrQG1pbnVze30zMjc2OCB0byAzMjc2Ny4KKysKKytAaXRlbSBKCisrSW50ZWdlciB0aGF0IGlzIHZhbGlkIGFzIGFuIGltbWVkaWF0ZSBvcGVyYW5kIGluIGFuCisraW5zdHJ1Y3Rpb24gdGFraW5nIGFuIHVuc2lnbmVkIDE2LWJpdCBudW1iZXIuIFJhbmdlCisrMCB0byA2NTUzNS4KKysKKytAaXRlbSBLCisrSW50ZWdlciB0aGF0IGlzIHZhbGlkIGFzIGFuIGltbWVkaWF0ZSBvcGVyYW5kIGluIGFuCisraW5zdHJ1Y3Rpb24gdGFraW5nIG9ubHkgdGhlIHVwcGVyIDE2LWJpdHMgb2YgYQorKzMyLWJpdCBudW1iZXIuIFJhbmdlIDMyLWJpdCBudW1iZXJzIHdpdGggdGhlIGxvd2VyCisrMTYtYml0cyBiZWluZyAwLgorKworK0BpdGVtIEwKKytJbnRlZ2VyIHRoYXQgaXMgdmFsaWQgYXMgYW4gaW1tZWRpYXRlIG9wZXJhbmQgZm9yIGEgCisrc2hpZnQgaW5zdHJ1Y3Rpb24uIFJhbmdlIDAgdG8gMzEuCisrCisrCisrQGl0ZW0gTQorK0ludGVnZXIgdGhhdCBpcyB2YWxpZCBhcyBhbiBpbW1lZGlhdGUgb3BlcmFuZCBmb3IKKytvbmx5IHRoZSB2YWx1ZSAwLiBDYW4gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoCisrdGhlIGZvcm1hdCBtb2RpZmllciBAY29kZXt6fSB0byB1c2UgQGNvZGV7cjB9CisraW5zdGVhZCBvZiBAY29kZXswfSBpbiB0aGUgYXNzZW1ibHkgb3V0cHV0LgorKworK0BpdGVtIE4KKytJbnRlZ2VyIHRoYXQgaXMgdmFsaWQgYXMgYW4gaW1tZWRpYXRlIG9wZXJhbmQgZm9yCisrYSBjdXN0b20gaW5zdHJ1Y3Rpb24gb3Bjb2RlLiBSYW5nZSAwIHRvIDI1NS4KKysKKytAaXRlbSBTCisrTWF0Y2hlcyBpbW1lZGlhdGVzIHdoaWNoIGFyZSBhZGRyZXNzZXMgaW4gdGhlIHNtYWxsCisrZGF0YSBzZWN0aW9uIGFuZCB0aGVyZWZvcmUgY2FuIGJlIGFkZGVkIHRvIEBjb2Rle2dwfQorK2FzIGEgMTYtYml0IGltbWVkaWF0ZSB0byByZS1jcmVhdGUgdGhlaXIgMzItYml0IHZhbHVlLgorKworK0BlbmQgdGFibGUKKysKKysKKyBAaXRlbSBBUk0gZmFtaWx5LS0tQGZpbGV7YXJtLmh9CisgQHRhYmxlIEBjb2RlCisgQGl0ZW0gZgorZGlmZiAtZHVyTiBnY2MtMy40LjYub3JpZy9nY2MvTWFrZWZpbGUuaW4gZ2NjLTMuNC42L2djYy9NYWtlZmlsZS5pbgorLS0tIGdjYy0zLjQuNi5vcmlnL2djYy9NYWtlZmlsZS5pbgkyMDA1LTAyLTI0IDEwOjI2OjU5LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy0zLjQuNi9nY2MvTWFrZWZpbGUuaW4JMjAwNy0wOC0xNSAyMzowOTozNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMDk0LDcgKzMwOTQsNyBAQAorIAkgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvUkVBRE1FLWZpeGluYyBcCisgCSAgICAkKERFU1RESVIpJChpdG9vbHNkYXRhZGlyKS9pbmNsdWRlL1JFQURNRSA7IFwKKyAJICAkKElOU1RBTExfU0NSSVBUKSBmaXhpbmMuc2ggJChERVNURElSKSQoaXRvb2xzZGlyKS9maXhpbmMuc2ggOyBcCistCSAgJChJTlNUQUxMX1BST0dSQU0pIGZpeGluYy9maXhpbmNsICQoREVTVERJUikkKGl0b29sc2RpcikvZml4aW5jbCA7IFwKKysJICAkKElOU1RBTExfUFJPR1JBTSkgZml4aW5jL2ZpeGluY2wkKGJ1aWxkX2V4ZWV4dCkgJChERVNURElSKSQoaXRvb2xzZGlyKS9maXhpbmNsJChidWlsZF9leGVleHQpIDsgXAorIAkgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZ3N5c2xpbWl0cy5oIFwKKyAJICAgICQoREVTVERJUikkKGl0b29sc2RhdGFkaXIpL2dzeXNsaW1pdHMuaCA7IFwKKyAJZWxzZSA6OyBmaQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy8zLjQuNi8yNjAtYXJtLXNvZnRmbG9hdC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvMy40LjYvMjYwLWFybS1zb2Z0ZmxvYXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBlZjYxNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvMy40LjYvMjYwLWFybS1zb2Z0ZmxvYXQucGF0Y2gKQEAgLTAsMCArMSwxNjEgQEAKK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9hcm0vY29mZi5oIGdjYy0zLjQuNi9nY2MvY29uZmlnL2FybS9jb2ZmLmgKKy0tLSBnY2MtMy40LjYub3JpZy9nY2MvY29uZmlnL2FybS9jb2ZmLmgJMjAwNC0wMi0yNCAxNToyNToyMi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtMy40LjYvZ2NjL2NvbmZpZy9hcm0vY29mZi5oCTIwMDctMDgtMTUgMjM6MTA6NTQuMDAwMDAwMDAwICswMjAwCitAQCAtMzEsMTEgKzMxLDE2IEBACisgI2RlZmluZSBUQVJHRVRfVkVSU0lPTiBmcHV0cyAoIiAoQVJNL2NvZmYpIiwgc3RkZXJyKQorIAorICN1bmRlZiAgVEFSR0VUX0RFRkFVTFQKKy0jZGVmaW5lIFRBUkdFVF9ERUZBVUxUIChBUk1fRkxBR19TT0ZUX0ZMT0FUIHwgQVJNX0ZMQUdfQVBDU18zMiB8IEFSTV9GTEFHX0FQQ1NfRlJBTUUgfCBBUk1fRkxBR19NTVVfVFJBUFMpCisrI2RlZmluZSBUQVJHRVRfREVGQVVMVAkJXAorKwkoIEFSTV9GTEFHX1NPRlRfRkxPQVQJXAorKwl8IEFSTV9GTEFHX1ZGUAkJXAorKwl8IEFSTV9GTEFHX0FQQ1NfMzIJXAorKwl8IEFSTV9GTEFHX0FQQ1NfRlJBTUUJXAorKwl8IEFSTV9GTEFHX01NVV9UUkFQUyApCisgCisgI2lmbmRlZiBNVUxUSUxJQl9ERUZBVUxUUworICNkZWZpbmUgTVVMVElMSUJfREVGQVVMVFMgXAorLSAgeyAibWFybSIsICJtbGl0dGxlLWVuZGlhbiIsICJtc29mdC1mbG9hdCIsICJtYXBjcy0zMiIsICJtbm8tdGh1bWItaW50ZXJ3b3JrIiB9CisrICB7ICJtYXJtIiwgIm1saXR0bGUtZW5kaWFuIiwgIm1hcGNzLTMyIiwgIm1uby10aHVtYi1pbnRlcndvcmsiIH0KKyAjZW5kaWYKKyAMCisgLyogVGhpcyBpcyBDT0ZGLCBidXQgcHJlZmVyIHN0YWJzLiAgKi8KK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9hcm0vZWxmLmggZ2NjLTMuNC42L2djYy9jb25maWcvYXJtL2VsZi5oCistLS0gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9hcm0vZWxmLmgJMjAwNC0wMi0yNCAxNToyNToyMi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtMy40LjYvZ2NjL2NvbmZpZy9hcm0vZWxmLmgJMjAwNy0wOC0xNSAyMzoxMDo1NC4wMDAwMDAwMDAgKzAyMDAKK0BAIC00Niw3ICs0Niw5IEBACisgCisgI2lmbmRlZiBTVUJUQVJHRVRfQVNNX0ZMT0FUX1NQRUMKKyAjZGVmaW5lIFNVQlRBUkdFVF9BU01fRkxPQVRfU1BFQyAiXAorLSV7bWFwY3MtZmxvYXQ6LW1mbG9hdH0gJXttc29mdC1mbG9hdDotbWZwdT1zb2Z0ZnBhfSIKKysle21hcGNzLWZsb2F0Oi1tZmxvYXR9IFwKKysle21oYXJkLWZsb2F0Oi1tZnB1PWZwYX0gXAorKyV7IW1oYXJkLWZsb2F0OiAle21zb2Z0LWZsb2F0Oi1tZnB1PXNvZnRmcGF9ICV7IW1zb2Z0LWZsb2F0Oi1tZnB1PXNvZnR2ZnB9fSIKKyAjZW5kaWYKKyAKKyAjaWZuZGVmIEFTTV9TUEVDCitAQCAtMTA2LDEyICsxMDgsMTcgQEAKKyAjZW5kaWYKKyAKKyAjaWZuZGVmIFRBUkdFVF9ERUZBVUxUCistI2RlZmluZSBUQVJHRVRfREVGQVVMVCAoQVJNX0ZMQUdfU09GVF9GTE9BVCB8IEFSTV9GTEFHX0FQQ1NfMzIgfCBBUk1fRkxBR19BUENTX0ZSQU1FIHwgQVJNX0ZMQUdfTU1VX1RSQVBTKQorKyNkZWZpbmUgVEFSR0VUX0RFRkFVTFQJCVwKKysJKCBBUk1fRkxBR19TT0ZUX0ZMT0FUCVwKKysJfCBBUk1fRkxBR19WRlAJCVwKKysJfCBBUk1fRkxBR19BUENTXzMyCVwKKysJfCBBUk1fRkxBR19BUENTX0ZSQU1FCVwKKysJfCBBUk1fRkxBR19NTVVfVFJBUFMgKQorICNlbmRpZgorIAorICNpZm5kZWYgTVVMVElMSUJfREVGQVVMVFMKKyAjZGVmaW5lIE1VTFRJTElCX0RFRkFVTFRTIFwKKy0gIHsgIm1hcm0iLCAibWxpdHRsZS1lbmRpYW4iLCAibXNvZnQtZmxvYXQiLCAibWFwY3MtMzIiLCAibW5vLXRodW1iLWludGVyd29yayIsICJmbm8tbGVhZGluZy11bmRlcnNjb3JlIiB9CisrICB7ICJtYXJtIiwgIm1saXR0bGUtZW5kaWFuIiwgIm1hcGNzLTMyIiwgIm1uby10aHVtYi1pbnRlcndvcmsiLCAiZm5vLWxlYWRpbmctdW5kZXJzY29yZSIgfQorICNlbmRpZgorIAwKKyAjZGVmaW5lIFRBUkdFVF9BU01fRklMRV9TVEFSVF9BUFBfT0ZGIHRydWUKK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmggZ2NjLTMuNC42L2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCistLS0gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgJMjAwNy0wOC0xNSAyMzowNzowMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtMy40LjYvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgJMjAwNy0wOC0xNSAyMzoxMDo1NC4wMDAwMDAwMDAgKzAyMDAKK0BAIC00NCwxMiArNDQsMjYgQEAKKyAjZGVmaW5lIFRBUkdFVF9MSU5LRVJfRU1VTEFUSU9OICJhcm1lbGZfbGludXgiCisgI2VuZGlmCisgCistLyogRGVmYXVsdCBpcyB0byB1c2UgQVBDUy0zMiBtb2RlLiAgKi8KKysvKgorKyAqIERlZmF1bHQgaXMgdG8gdXNlIEFQQ1MtMzIgbW9kZSB3aXRoIHNvZnQtdmZwLgorKyAqIFRoZSBvbGQgTGludXggZGVmYXVsdCBmb3IgZmxvYXRzIGNhbiBiZSBhY2hpZXZlZCB3aXRoIC1taGFyZC1mbG9hdAorKyAqIG9yIHdpdGggdGhlIGNvbmZpZ3VyZSAtLXdpdGgtZmxvYXQ9aGFyZCBvcHRpb24uCisrICogSWYgLW1zb2Z0LWZsb2F0IG9yIC0td2l0aC1mbG9hdD1zb2Z0IGlzIHVzZWQgdGhlbiBzb2Z0d2FyZSBmbG9hdCAKKysgKiBzdXBwb3J0IHdpbGwgYmUgdXNlZCBqdXN0IGxpa2UgdGhlIGRlZmF1bHQgYnV0IHdpdGggdGhlIGxlZ2FjeQorKyAqIGJpZyBlbmRpYW4gd29yZCBvcmRlcmluZyBmb3IgZG91YmxlIGZsb2F0IHJlcHJlc2VudGF0aW9uIGluc3RlYWQuCisrICovCisgI3VuZGVmICBUQVJHRVRfREVGQVVMVAorLSNkZWZpbmUgVEFSR0VUX0RFRkFVTFQgXAorLQkJKCBBUk1fRkxBR19BUENTXzMyIHwgXAorLQkJICBBUk1fRkxBR19NTVVfVFJBUFMgfCBcCistCQkgIFRBUkdFVF9FTkRJQU5fREVGQVVMVCApCisrI2RlZmluZSBUQVJHRVRfREVGQVVMVAkJXAorKwkoIEFSTV9GTEFHX0FQQ1NfMzIJXAorKwl8IEFSTV9GTEFHX1NPRlRfRkxPQVQJXAorKwl8IFRBUkdFVF9FTkRJQU5fREVGQVVMVAlcCisrCXwgQVJNX0ZMQUdfVkZQCQlcCisrCXwgQVJNX0ZMQUdfTU1VX1RSQVBTICkKKysKKysjdW5kZWYgIFNVQlRBUkdFVF9FWFRSQV9BU01fU1BFQworKyNkZWZpbmUgU1VCVEFSR0VUX0VYVFJBX0FTTV9TUEVDICJcCisrJXttaGFyZC1mbG9hdDotbWZwdT1mcGF9IFwKKysleyFtaGFyZC1mbG9hdDogJXttc29mdC1mbG9hdDotbWZwdT1zb2Z0ZnBhfSAleyFtc29mdC1mbG9hdDotbWZwdT1zb2Z0dmZwfX0iCisgCisgI2RlZmluZSBTVUJUQVJHRVRfQ1BVX0RFRkFVTFQgVEFSR0VUX0NQVV9hcm02CisgCitAQCAtNTcsNyArNzEsNyBAQAorIAorICN1bmRlZiAgTVVMVElMSUJfREVGQVVMVFMKKyAjZGVmaW5lIE1VTFRJTElCX0RFRkFVTFRTIFwKKy0JeyAibWFybSIsIFRBUkdFVF9FTkRJQU5fT1BUSU9OLCAibWhhcmQtZmxvYXQiLCAibWFwY3MtMzIiLCAibW5vLXRodW1iLWludGVyd29yayIgfQorKwl7ICJtYXJtIiwgVEFSR0VUX0VORElBTl9PUFRJT04sICJtYXBjcy0zMiIsICJtbm8tdGh1bWItaW50ZXJ3b3JrIiB9CisgCisgI2RlZmluZSBDUFBfQVBDU19QQ19ERUZBVUxUX1NQRUMgIi1EX19BUENTXzMyX18iCisgCitAQCAtNzIsNyArODYsNyBAQAorICAgICV7c2hhcmVkOi1sY30gXAorICAgICV7IXNoYXJlZDole3Byb2ZpbGU6LWxjX3B9JXshcHJvZmlsZTotbGN9fSIKKyAKKy0jZGVmaW5lIExJQkdDQ19TUEVDICIle21zb2Z0LWZsb2F0Oi1sZmxvYXR9IC1sZ2NjIgorKyNkZWZpbmUgTElCR0NDX1NQRUMgIi1sZ2NjIgorIAorIC8qIFByb3ZpZGUgYSBTVEFSVEZJTEVfU1BFQyBhcHByb3ByaWF0ZSBmb3IgR05VL0xpbnV4LiAgSGVyZSB3ZSBhZGQKKyAgICB0aGUgR05VL0xpbnV4IG1hZ2ljYWwgY3J0YmVnaW4ubyBmaWxlIChzZWUgY3J0c3R1ZmYuYykgd2hpY2gKK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9hcm0vdC1saW51eCBnY2MtMy40LjYvZ2NjL2NvbmZpZy9hcm0vdC1saW51eAorLS0tIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvYXJtL3QtbGludXgJMjAwMy0wOS0yMCAyMzowOTowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtMy40LjYvZ2NjL2NvbmZpZy9hcm0vdC1saW51eAkyMDA3LTA4LTE1IDIzOjEwOjU0LjAwMDAwMDAwMCArMDIwMAorQEAgLTQsNyArNCwxMCBAQAorIExJQkdDQzJfREVCVUdfQ0ZMQUdTID0gLWcwCisgCisgTElCMUFTTVNSQyA9IGFybS9saWIxZnVuY3MuYXNtCistTElCMUFTTUZVTkNTID0gX3VkaXZzaTMgX2RpdnNpMyBfdW1vZHNpMyBfbW9kc2kzIF9kdm1kX2xueAorK0xJQjFBU01GVU5DUyA9IF91ZGl2c2kzIF9kaXZzaTMgX3Vtb2RzaTMgX21vZHNpMyBfZHZtZF9sbnggXAorKwlfbmVnZGYyIF9hZGRzdWJkZjMgX211bGRpdmRmMyBfY21wZGYyIF91bm9yZGRmMiBfZml4ZGZzaSBfZml4dW5zZGZzaSBcCisrCV90cnVuY2Rmc2YyIF9uZWdzZjIgX2FkZHN1YnNmMyBfbXVsZGl2c2YzIF9jbXBzZjIgX3Vub3Jkc2YyIFwKKysJX2ZpeHNmc2kgX2ZpeHVuc3Nmc2kKKyAKKyAjIE1VTFRJTElCX09QVElPTlMgPSBtaGFyZC1mbG9hdC9tc29mdC1mbG9hdAorICMgTVVMVElMSUJfRElSTkFNRVMgPSBoYXJkLWZsb2F0IHNvZnQtZmxvYXQKK2RpZmYgLWR1ck4gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9hcm0vdW5rbm93bi1lbGYuaCBnY2MtMy40LjYvZ2NjL2NvbmZpZy9hcm0vdW5rbm93bi1lbGYuaAorLS0tIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvYXJtL3Vua25vd24tZWxmLmgJMjAwNC0wMi0yNCAxNToyNToyMi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtMy40LjYvZ2NjL2NvbmZpZy9hcm0vdW5rbm93bi1lbGYuaAkyMDA3LTA4LTE1IDIzOjEwOjU0LjAwMDAwMDAwMCArMDIwMAorQEAgLTMwLDcgKzMwLDEyIEBACisgCisgLyogRGVmYXVsdCB0byB1c2luZyBBUENTLTMyIGFuZCBzb2Z0d2FyZSBmbG9hdGluZyBwb2ludC4gICovCisgI2lmbmRlZiBUQVJHRVRfREVGQVVMVAorLSNkZWZpbmUgVEFSR0VUX0RFRkFVTFQJKEFSTV9GTEFHX1NPRlRfRkxPQVQgfCBBUk1fRkxBR19BUENTXzMyIHwgQVJNX0ZMQUdfQVBDU19GUkFNRSB8IEFSTV9GTEFHX01NVV9UUkFQUykKKysjZGVmaW5lIFRBUkdFVF9ERUZBVUxUCQlcCisrCSggQVJNX0ZMQUdfU09GVF9GTE9BVAlcCisrCXwgQVJNX0ZMQUdfVkZQCQlcCisrCXwgQVJNX0ZMQUdfQVBDU18zMglcCisrCXwgQVJNX0ZMQUdfQVBDU19GUkFNRQlcCisrCXwgQVJNX0ZMQUdfTU1VX1RSQVBTICkKKyAjZW5kaWYKKyAKKyAvKiBOb3cgd2UgZGVmaW5lIHRoZSBzdHJpbmdzIHVzZWQgdG8gYnVpbGQgdGhlIHNwZWMgZmlsZS4gICovCitkaWZmIC1kdXJOIGdjYy0zLjQuNi5vcmlnL2djYy9jb25maWcvYXJtL3hzY2FsZS1lbGYuaCBnY2MtMy40LjYvZ2NjL2NvbmZpZy9hcm0veHNjYWxlLWVsZi5oCistLS0gZ2NjLTMuNC42Lm9yaWcvZ2NjL2NvbmZpZy9hcm0veHNjYWxlLWVsZi5oCTIwMDMtMDctMDIgMDE6MjY6NDMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTMuNC42L2djYy9jb25maWcvYXJtL3hzY2FsZS1lbGYuaAkyMDA3LTA4LTE1IDIzOjEwOjU0LjAwMDAwMDAwMCArMDIwMAorQEAgLTQ5LDExICs0OSwxMiBAQAorIAkJICAgICBlbmRpYW4sIHJlZ2FyZGxlc3Mgb2YgdGhlIGVuZGlhbi1uZXNzIG9mIHRoZSBtZW1vcnkKKyAJCSAgICAgc3lzdGVtLiAgKi8KKyAJCSAgICAgCistI2RlZmluZSBTVUJUQVJHRVRfRVhUUkFfQVNNX1NQRUMgIiV7IW1jcHU9KjotbWNwdT14c2NhbGV9IFwKKy0gICV7bWhhcmQtZmxvYXQ6LW1mcHU9ZnBhfSBcCistICAleyFtaGFyZC1mbG9hdDogJXttc29mdC1mbG9hdDotbWZwdT1zb2Z0ZnBhOzotbWZwdT1zb2Z0dmZwfX0iCisrI2RlZmluZSBTVUJUQVJHRVRfRVhUUkFfQVNNX1NQRUMgIlwKKysleyFtY3B1PSo6LW1jcHU9eHNjYWxlfSBcCisrJXttaGFyZC1mbG9hdDotbWZwdT1mcGF9IFwKKysleyFtaGFyZC1mbG9hdDogJXttc29mdC1mbG9hdDotbWZwdT1zb2Z0ZnBhfSAleyFtc29mdC1mbG9hdDotbWZwdT1zb2Z0dmZwfX0iCisgCisgI2lmbmRlZiBNVUxUSUxJQl9ERUZBVUxUUworICNkZWZpbmUgTVVMVElMSUJfREVGQVVMVFMgXAorLSAgeyAibWxpdHRsZS1lbmRpYW4iLCAibW5vLXRodW1iLWludGVyd29yayIsICJtYXJtIiwgIm1zb2Z0LWZsb2F0IiB9CisrICB7ICJtbGl0dGxlLWVuZGlhbiIsICJtbm8tdGh1bWItaW50ZXJ3b3JrIiwgIm1hcm0iIH0KKyAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4wLjQvMTAwLXVjbGliYy1jb25mLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjAuNC8xMDAtdWNsaWJjLWNvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JlN2QwOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4wLjQvMTAwLXVjbGliYy1jb25mLnBhdGNoCkBAIC0wLDAgKzEsNTUzIEBACistLS0gZ2NjLTQuMC4yL2djYy9jb25maWcvdC1saW51eC11Y2xpYmMKKysrKyBnY2MtNC4wLjIvZ2NjL2NvbmZpZy90LWxpbnV4LXVjbGliYworQEAgLTAsMCArMSw1IEBACisrIyBSZW1vdmUgZ2xpYmMgc3BlY2lmaWMgZmlsZXMgYWRkZWQgaW4gdC1saW51eAorK1NITElCX01BUEZJTEVTIDo9ICQoZmlsdGVyLW91dCAkKHNyY2RpcikvY29uZmlnL2xpYmdjYy1nbGliYy52ZXIsICQoU0hMSUJfTUFQRklMRVMpKQorKworKyMgVXNlIHVud2luZC1kdzItZmRlIGluc3RlYWQgb2YgdW53aW5kLWR3Mi1mZGUtZ2xpYmMKKytMSUIyQURERUggOj0gJChzdWJzdCB1bndpbmQtZHcyLWZkZS1nbGliYy5jLHVud2luZC1kdzItZmRlLmMsJChMSUIyQURERUgpKQorLS0tIGdjYy00LjAuMi9nY2MvY29uZmlnLmdjYworKysrIGdjYy00LjAuMi9nY2MvY29uZmlnLmdjYworQEAgLTE3NzgsNyArMTc3OCw3IEBACisgCTs7Cisgc2gtKi1lbGYqIHwgc2hbMTIzNDZsXSotKi1lbGYqIHwgc2gqLSota2FvcyogfCBcCisgc2gtKi1zeW1iaWFuZWxmKiB8IHNoWzEyMzQ2bF0qLSotc3ltYmlhbmVsZiogfCBcCistICBzaC0qLWxpbnV4KiB8IHNoWzM0NmxiZV0qLSotbGludXgqIHwgXAorKyAgc2gqLSotbGludXgqIHwgc2hbMzQ2bGJlXSotKi1saW51eCogfCBcCisgICBzaC0qLW5ldGJzZGVsZiogfCBzaGwqLSotbmV0YnNkZWxmKiB8IHNoNS0qLW5ldGJzZCogfCBzaDVsKi0qLW5ldGJzZCogfCBcCisgICAgc2g2NC0qLW5ldGJzZCogfCBzaDY0bCotKi1uZXRic2QqKQorIAl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IHNoL3Qtc2ggc2gvdC1lbGYiCitAQCAtMjIzNCwxMCArMjIzNCwxNiBAQAorICopCisgCWVjaG8gIioqKiBDb25maWd1cmF0aW9uICR7dGFyZ2V0fSBub3Qgc3VwcG9ydGVkIiAxPiYyCisgCWV4aXQgMQorIAk7OworIGVzYWMKKysKKysjIFJhdGhlciB0aGFuIGhvb2sgaW50byBlYWNoIHRhcmdldCwganVzdCBkbyBpdCBhZnRlciBhbGwgdGhlIGxpbnV4CisrIyB0YXJnZXRzIGhhdmUgYmVlbiBwcm9jZXNzZWQKKytjYXNlICR7dGFyZ2V0fSBpbgorKyotbGludXgtdWNsaWJjKikgdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBVU0VfVUNMSUJDIiA7IHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gdC1saW51eC11Y2xpYmMiCisrZXNhYworIAorIGNhc2UgJHt0YXJnZXR9IGluCisgaVszNDU2N104Ni0qLWxpbnV4KmFvdXQqIHwgaVszNDU2N104Ni0qLWxpbnV4KmxpYmMxKQorIAl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IGkzODYvdC1nbW1fbWFsbG9jIgorIAk7OworLS0tIGdjYy00LjAuMi9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCisrKysgZ2NjLTQuMC4yL2djYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmgKK0BAIC0yNyw3ICsyNywxMSBAQAorICNkZWZpbmUgU1VCVEFSR0VUX0VYVFJBX1NQRUNTIFwKKyB7ICJlbGZfZHluYW1pY19saW5rZXIiLCBFTEZfRFlOQU1JQ19MSU5LRVIgfSwKKyAKKysjaWZkZWYgVVNFX1VDTElCQworKyNkZWZpbmUgRUxGX0RZTkFNSUNfTElOS0VSCSIvbGliL2xkLXVDbGliYy5zby4wIgorKyNlbHNlCisgI2RlZmluZSBFTEZfRFlOQU1JQ19MSU5LRVIJIi9saWIvbGQtbGludXguc28uMiIKKysjZW5kaWYKKyAKKyAjZGVmaW5lIExJTktfU1BFQyAiLW0gZWxmNjRhbHBoYSAle0cqfSAle3JlbGF4Oi1yZWxheH0JCVwKKyAgICV7Tyo6LU8zfSAleyFPKjotTzF9CQkJCQkJXAorLS0tIGdjYy00LjAuMi9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorKysrIGdjYy00LjAuMi9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorQEAgLTgxLDE0ICs4MSwxOSBAQAorICNkZWZpbmUgRU5ERklMRV9TUEVDIFwKKyAgICIleyFzaGFyZWQ6Y3J0ZW5kLm8lc30gJXtzaGFyZWQ6Y3J0ZW5kUy5vJXN9IGNydG4ubyVzIgorIAorKyNpZmRlZiBVU0VfVUNMSUJDCisrI2RlZmluZSBFTEZfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCisrI2Vsc2UKKysjZGVmaW5lIEVMRl9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNlbmRpZgorICN1bmRlZiAgTElOS19TUEVDCisgI2RlZmluZSBMSU5LX1NQRUMgIiV7aCp9ICV7dmVyc2lvbjotdn0gXAorICAgICV7Yn0gJXtXbCwqOiUqfSBcCisgICAgJXtzdGF0aWM6LUJzdGF0aWN9IFwKKyAgICAle3NoYXJlZDotc2hhcmVkfSBcCisgICAgJXtzeW1ib2xpYzotQnN5bWJvbGljfSBcCisgICAgJXtyZHluYW1pYzotZXhwb3J0LWR5bmFtaWN9IFwKKy0gICAleyFkeW5hbWljLWxpbmtlcjotZHluYW1pYy1saW5rZXIgL2xpYi9sZC1saW51eC5zby4yfSBcCisrICAgJXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyICIgRUxGX0RZTkFNSUNfTElOS0VSICJ9IFwKKyAgICAtWCBcCisgICAgJXttYmlnLWVuZGlhbjotRUJ9IiBcCisgICAgU1VCVEFSR0VUX0VYVFJBX0xJTktfU1BFQworLS0tIGdjYy00LjAuMi9nY2MvY29uZmlnL2NyaXMvbGludXguaAorKysrIGdjYy00LjAuMi9nY2MvY29uZmlnL2NyaXMvbGludXguaAorQEAgLTc5LDYgKzc5LDI1IEBACisgI3VuZGVmIENSSVNfREVGQVVMVF9DUFVfVkVSU0lPTgorICNkZWZpbmUgQ1JJU19ERUZBVUxUX0NQVV9WRVJTSU9OIENSSVNfQ1BVX05HCisgCisrI2lmZGVmIFVTRV9VQ0xJQkMKKysKKysjdW5kZWYgQ1JJU19TVUJUQVJHRVRfVkVSU0lPTgorKyNkZWZpbmUgQ1JJU19TVUJUQVJHRVRfVkVSU0lPTiAiIC0gY3Jpcy1heGlzLWxpbnV4LXVjbGliYyIKKysKKysjdW5kZWYgQ1JJU19MSU5LX1NVQlRBUkdFVF9TUEVDCisrI2RlZmluZSBDUklTX0xJTktfU1VCVEFSR0VUX1NQRUMgXAorKyAiLW1jcmlzbGludXhcCisrICAtcnBhdGgtbGluayBpbmNsdWRlL2FzbS8uLi8uLiVzXAorKyAgJXtzaGFyZWR9ICV7c3RhdGljfVwKKysgICV7c3ltYm9saWM6LUJkeW5hbWljfSAle3NobGliOi1CZHluYW1pY30gJXtzdGF0aWM6LUJzdGF0aWN9XAorKyAgJXshc2hhcmVkOiBcCisrICAgICV7IXN0YXRpYzogXAorKyAgICAgICV7cmR5bmFtaWM6LWV4cG9ydC1keW5hbWljfSBcCisrICAgICAgJXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyIC9saWIvbGQtdUNsaWJjLnNvLjB9fX0gXAorKyAgJXshcjole08yfE8zOiAtLWdjLXNlY3Rpb25zfX0iCisrCisrI2Vsc2UgIC8qIFVTRV9VQ0xJQkMgKi8KKysKKyAjdW5kZWYgQ1JJU19TVUJUQVJHRVRfVkVSU0lPTgorICNkZWZpbmUgQ1JJU19TVUJUQVJHRVRfVkVSU0lPTiAiIC0gY3Jpcy1heGlzLWxpbnV4LWdudSIKKyAKK0BAIC05Myw2ICsxMTIsOCBAQAorICAgJXshc2hhcmVkOiV7IXN0YXRpYzole3JkeW5hbWljOi1leHBvcnQtZHluYW1pY319fVwKKyAgICV7IXI6JXtPMnxPMzogLS1nYy1zZWN0aW9uc319IgorIAorKyNlbmRpZiAgLyogVVNFX1VDTElCQyAqLworKworIAorIC8qIE5vZGU6IFJ1bi10aW1lIFRhcmdldCAqLworIAorLS0tIGdjYy00LjAuMi9nY2MvY29uZmlnL2kzODYvbGludXguaAorKysrIGdjYy00LjAuMi9nY2MvY29uZmlnL2kzODYvbGludXguaAorQEAgLTEwNyw2ICsxMDcsMTEgQEAKKyAjZGVmaW5lIExJTktfRU1VTEFUSU9OICJlbGZfaTM4NiIKKyAjZGVmaW5lIERZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisgCisrI2lmZGVmIFVTRV9VQ0xJQkMKKysjdW5kZWYgRFlOQU1JQ19MSU5LRVIKKysjZGVmaW5lIERZTkFNSUNfTElOS0VSICIvbGliL2xkLXVDbGliYy5zby4wIgorKyNlbmRpZgorKworICN1bmRlZiAgU1VCVEFSR0VUX0VYVFJBX1NQRUNTCisgI2RlZmluZSBTVUJUQVJHRVRfRVhUUkFfU1BFQ1MgXAorICAgeyAibGlua19lbXVsYXRpb24iLCBMSU5LX0VNVUxBVElPTiB9LFwKKy0tLSBnY2MtNC4wLjIvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAorKysrIGdjYy00LjAuMi9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCitAQCAtNTQsMTQgKzU0LDIxIEBACisgICAgV2hlbiB0aGUgLXNoYXJlZCBsaW5rIG9wdGlvbiBpcyB1c2VkIGEgZmluYWwgbGluayBpcyBub3QgYmVpbmcKKyAgICBkb25lLiAgKi8KKyAKKysjaWZkZWYgVVNFX1VDTElCQworKyNkZWZpbmUgRUxGMzJfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBFTEY2NF9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZDY0LXVDbGliYy5zby4wIgorKyNlbHNlCisrI2RlZmluZSBFTEYzMl9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgRUxGNjRfRFlOQU1JQ19MSU5LRVIgIi9saWI2NC9sZC1saW51eC14ODYtNjQuc28uMiIKKysjZW5kaWYKKyAjdW5kZWYJTElOS19TUEVDCisgI2RlZmluZSBMSU5LX1NQRUMgIiV7IW0zMjotbSBlbGZfeDg2XzY0fSAle20zMjotbSBlbGZfaTM4Nn0gXAorICAgJXtzaGFyZWQ6LXNoYXJlZH0gXAorICAgJXshc2hhcmVkOiBcCisgICAgICV7IXN0YXRpYzogXAorICAgICAgICV7cmR5bmFtaWM6LWV4cG9ydC1keW5hbWljfSBcCistICAgICAgJXttMzI6JXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyIC9saWIvbGQtbGludXguc28uMn19IFwKKy0gICAgICAleyFtMzI6JXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyIC9saWI2NC9sZC1saW51eC14ODYtNjQuc28uMn19fSBcCisrICAgICAgJXttMzI6JXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyICIgRUxGMzJfRFlOQU1JQ19MSU5LRVIgIn19IFwKKysgICAgICAleyFtMzI6JXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyICIgRUxGNjRfRFlOQU1JQ19MSU5LRVIgIn19fSBcCisgICAgICV7c3RhdGljOi1zdGF0aWN9fSIKKyAKKyAjZGVmaW5lIE1VTFRJTElCX0RFRkFVTFRTIHsgIm02NCIgfQorLS0tIGdjYy00LjAuMi9nY2MvY29uZmlnL2lhNjQvbGludXguaAorKysrIGdjYy00LjAuMi9nY2MvY29uZmlnL2lhNjQvbGludXguaAorQEAgLTM3LDEzICszNywxOCBAQAorIC8qIERlZmluZSB0aGlzIGZvciBzaGFyZWQgbGlicmFyeSBzdXBwb3J0IGJlY2F1c2UgaXQgaXNuJ3QgaW4gdGhlIG1haW4KKyAgICBsaW51eC5oIGZpbGUuICAqLworIAorKyNpZmRlZiBVU0VfVUNMSUJDCisrI2RlZmluZSBFTEZfRFlOQU1JQ19MSU5LRVIJIi9saWIvbGQtdUNsaWJjLnNvLjAiCisrI2Vsc2UKKysjZGVmaW5lIEVMRl9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC1pYTY0LnNvLjIiCisrI2VuZGlmCisgI3VuZGVmIExJTktfU1BFQworICNkZWZpbmUgTElOS19TUEVDICJcCisgICAle3NoYXJlZDotc2hhcmVkfSBcCisgICAleyFzaGFyZWQ6IFwKKyAgICAgJXshc3RhdGljOiBcCisgICAgICAgJXtyZHluYW1pYzotZXhwb3J0LWR5bmFtaWN9IFwKKy0gICAgICAleyFkeW5hbWljLWxpbmtlcjotZHluYW1pYy1saW5rZXIgL2xpYi9sZC1saW51eC1pYTY0LnNvLjJ9fSBcCisrICAgICAgJXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyICIgRUxGX0RZTkFNSUNfTElOS0VSICJ9fSBcCisgICAgICAgJXtzdGF0aWM6LXN0YXRpY319IgorIAorIAorLS0tIGdjYy00LjAuMi9nY2MvY29uZmlnL202OGsvbGludXguaAorKysrIGdjYy00LjAuMi9nY2MvY29uZmlnL202OGsvbGludXguaAorQEAgLTEyNywxMiArMTI3LDE3IEBACisgCisgLyogSWYgRUxGIGlzIHRoZSBkZWZhdWx0IGZvcm1hdCwgd2Ugc2hvdWxkIG5vdCB1c2UgL2xpYi9lbGYuICAqLworIAorKyNpZmRlZiBVU0VfVUNMSUJDCisrI2RlZmluZSBFTEZfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCisrI2Vsc2UKKysjZGVmaW5lIEVMRl9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC5zby4xIgorKyNlbmRpZgorICN1bmRlZglMSU5LX1NQRUMKKyAjZGVmaW5lIExJTktfU1BFQyAiLW0gbTY4a2VsZiAle3NoYXJlZH0gXAorICAgJXshc2hhcmVkOiBcCisgICAgICV7IXN0YXRpYzogXAorICAgICAgICV7cmR5bmFtaWM6LWV4cG9ydC1keW5hbWljfSBcCistICAgICAgJXshZHluYW1pYy1saW5rZXIqOi1keW5hbWljLWxpbmtlciAvbGliL2xkLnNvLjF9fSBcCisrICAgICAgJXshZHluYW1pYy1saW5rZXIqOi1keW5hbWljLWxpbmtlciAiIEVMRl9EWU5BTUlDX0xJTktFUiAifX0gXAorICAgICAle3N0YXRpY319IgorIAorIC8qIEZvciBjb21wYXRpYmlsaXR5IHdpdGggbGludXgvYS5vdXQgKi8KKy0tLSBnY2MtNC4wLjIvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgKKysrKyBnY2MtNC4wLjIvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgKK0BAIC0xMDgsMTQgKzEwOCwxOSBAQAorIAorIC8qIEJvcnJvd2VkIGZyb20gc3BhcmMvbGludXguaCAqLworICN1bmRlZiBMSU5LX1NQRUMKKysjaWZkZWYgVVNFX1VDTElCQworKyNkZWZpbmUgRUxGX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLXVDbGliYy5zby4wIgorKyNlbHNlCisrI2RlZmluZSBFTEZfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQuc28uMSIKKysjZW5kaWYKKyAjZGVmaW5lIExJTktfU1BFQyBcCisgICIlKGVuZGlhbl9zcGVjKSBcCisgICAle3NoYXJlZDotc2hhcmVkfSBcCisgICAleyFzaGFyZWQ6IFwKKyAgICAgJXshaWJjczogXAorICAgICAgICV7IXN0YXRpYzogXAorICAgICAgICAgJXtyZHluYW1pYzotZXhwb3J0LWR5bmFtaWN9IFwKKy0gICAgICAgICV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAvbGliL2xkLnNvLjF9fSBcCisrICAgICAgICAleyFkeW5hbWljLWxpbmtlcjotZHluYW1pYy1saW5rZXIgIiBFTEZfRFlOQU1JQ19MSU5LRVIgIn19IFwKKyAgICAgICAgICV7c3RhdGljOi1zdGF0aWN9fX0iCisgCisgI3VuZGVmIFNVQlRBUkdFVF9BU01fU1BFQworLS0tIGdjYy00LjAuMi9nY2MvY29uZmlnL3BhL3BhLWxpbnV4LmgKKysrKyBnY2MtNC4wLjIvZ2NjL2NvbmZpZy9wYS9wYS1saW51eC5oCitAQCAtODIsMTMgKzgyLDE4IEBACisgLyogRGVmaW5lIHRoaXMgZm9yIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQgYmVjYXVzZSBpdCBpc24ndCBpbiB0aGUgbWFpbgorICAgIGxpbnV4LmggZmlsZS4gICovCisgCisrI2lmZGVmIFVTRV9VQ0xJQkMKKysjZGVmaW5lIEVMRl9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKysjZWxzZQorKyNkZWZpbmUgRUxGX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLnNvLjEiCisrI2VuZGlmCisgI3VuZGVmIExJTktfU1BFQworICNkZWZpbmUgTElOS19TUEVDICJcCisgICAle3NoYXJlZDotc2hhcmVkfSBcCisgICAleyFzaGFyZWQ6IFwKKyAgICAgJXshc3RhdGljOiBcCisgICAgICAgJXtyZHluYW1pYzotZXhwb3J0LWR5bmFtaWN9IFwKKy0gICAgICAleyFkeW5hbWljLWxpbmtlcjotZHluYW1pYy1saW5rZXIgL2xpYi9sZC5zby4xfX0gXAorKyAgICAgICV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAiIEVMRl9EWU5BTUlDX0xJTktFUiAifX0gXAorICAgICAgICV7c3RhdGljOi1zdGF0aWN9fSIKKyAKKyAvKiBnbGliYydzIHByb2ZpbGluZyBmdW5jdGlvbnMgZG9uJ3QgbmVlZCBnY2MgdG8gYWxsb2NhdGUgY291bnRlcnMuICAqLworLS0tIGdjYy00LjAuMi9nY2MvY29uZmlnL3JzNjAwMC9saW51eC5oCisrKysgZ2NjLTQuMC4yL2djYy9jb25maWcvcnM2MDAwL2xpbnV4LmgKK0BAIC02OSw3ICs2OSwxMSBAQAorICNkZWZpbmUgTElOS19TVEFSVF9ERUZBVUxUX1NQRUMgIiUobGlua19zdGFydF9saW51eCkiCisgCisgI3VuZGVmCUxJTktfT1NfREVGQVVMVF9TUEVDCisrI2lmZGVmIFVTRV9VQ0xJQkMKKysjZGVmaW5lIExJTktfT1NfREVGQVVMVF9TUEVDICIlKGxpbmtfb3NfbGludXhfdWNsaWJjKSIKKysjZWxzZQorICNkZWZpbmUgTElOS19PU19ERUZBVUxUX1NQRUMgIiUobGlua19vc19saW51eCkiCisrI2VuZGlmCisgCisgI2RlZmluZSBMSU5LX0dDQ19DX1NFUVVFTkNFX1NQRUMgXAorICAgIiV7c3RhdGljOi0tc3RhcnQtZ3JvdXB9ICVHICVMICV7c3RhdGljOi0tZW5kLWdyb3VwfSV7IXN0YXRpYzolR30iCistLS0gZ2NjLTQuMC4yL2djYy9jb25maWcvcnM2MDAwL3N5c3Y0LmgKKysrKyBnY2MtNC4wLjIvZ2NjL2NvbmZpZy9yczYwMDAvc3lzdjQuaAorQEAgLTk0OSw2ICs5NDksNyBAQAorICAgbWNhbGwtbGludXggIDogJShsaW5rX29zX2xpbnV4KSAgICAgICA7IFwKKyAgIG1jYWxsLWdudSAgICA6ICUobGlua19vc19nbnUpICAgICAgICAgOyBcCisgICBtY2FsbC1uZXRic2QgOiAlKGxpbmtfb3NfbmV0YnNkKSAgICAgIDsgXAorKyAgbWNhbGwtbGludXgtdWNsaWJjIDogJShsaW5rX29zX2xpbnV4X3VjbGliYyk7IFwKKyAgIG1jYWxsLW9wZW5ic2Q6ICUobGlua19vc19vcGVuYnNkKSAgICAgOyBcCisgICAgICAgICAgICAgICAgOiAlKGxpbmtfb3NfZGVmYXVsdCkgICAgIH0iCisgCitAQCAtMTEyNyw2ICsxMTI4LDEwIEBACisgICAle3JkeW5hbWljOi1leHBvcnQtZHluYW1pY30gXAorICAgJXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyIC9saWIvbGQuc28uMX19fSIKKyAKKysjZGVmaW5lIExJTktfT1NfTElOVVhfVUNMSUJDX1NQRUMgIi1tIGVsZjMycHBjbGludXggJXshc2hhcmVkOiAleyFzdGF0aWM6IFwKKysgICV7cmR5bmFtaWM6LWV4cG9ydC1keW5hbWljfSBcCisrICAleyFkeW5hbWljLWxpbmtlcjotZHluYW1pYy1saW5rZXIgL2xpYi9sZC11Q2xpYmMuc28uMH19fSIKKysKKyAjaWYgZGVmaW5lZChIQVZFX0xEX0VIX0ZSQU1FX0hEUikKKyAjIGRlZmluZSBMSU5LX0VIX1NQRUMgIiV7IXN0YXRpYzotLWVoLWZyYW1lLWhkcn0gIgorICNlbmRpZgorQEAgLTEyOTMsNiArMTI5OCw3IEBACisgICB7ICJsaW5rX29zX3NpbSIsCQlMSU5LX09TX1NJTV9TUEVDIH0sCQkJXAorICAgeyAibGlua19vc19mcmVlYnNkIiwJCUxJTktfT1NfRlJFRUJTRF9TUEVDIH0sCQkJXAorICAgeyAibGlua19vc19saW51eCIsCQlMSU5LX09TX0xJTlVYX1NQRUMgfSwJCQlcCisrICB7ICJsaW5rX29zX2xpbnV4X3VjbGliYyIsCUxJTktfT1NfTElOVVhfVUNMSUJDX1NQRUMgfSwJCVwKKyAgIHsgImxpbmtfb3NfZ251IiwJCUxJTktfT1NfR05VX1NQRUMgfSwJCQlcCisgICB7ICJsaW5rX29zX25ldGJzZCIsCQlMSU5LX09TX05FVEJTRF9TUEVDIH0sCQkJXAorICAgeyAibGlua19vc19vcGVuYnNkIiwJCUxJTktfT1NfT1BFTkJTRF9TUEVDIH0sCQkJXAorLS0tIGdjYy00LjAuMi9nY2MvY29uZmlnL3MzOTAvbGludXguaAorKysrIGdjYy00LjAuMi9nY2MvY29uZmlnL3MzOTAvbGludXguaAorQEAgLTc3LDYgKzc3LDEzIEBACisgI2RlZmluZSBNVUxUSUxJQl9ERUZBVUxUUyB7ICJtMzEiIH0KKyAjZW5kaWYKKyAKKysjaWZkZWYgVVNFX1VDTElCQworKyNkZWZpbmUgRUxGMzFfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBFTEY2NF9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZDY0LXVDbGliYy5zby4wIgorKyNlbHNlCisrI2RlZmluZSBFTEYzMV9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC5zby4xIgorKyNkZWZpbmUgRUxGNjRfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQ2NC5zby4xIgorKyNlbmRpZgorICN1bmRlZiAgTElOS19TUEVDCisgI2RlZmluZSBMSU5LX1NQRUMgXAorICAgIiV7bTMxOi1tIGVsZl9zMzkwfSV7bTY0Oi1tIGVsZjY0X3MzOTB9IFwKK0BAIC04Niw4ICs5Myw4IEBACisgICAgICAgJXshc3RhdGljOiBcCisgCSV7cmR5bmFtaWM6LWV4cG9ydC1keW5hbWljfSBcCisgCSV7IWR5bmFtaWMtbGlua2VyOiBcCistICAgICAgICAgICV7bTMxOi1keW5hbWljLWxpbmtlciAvbGliL2xkLnNvLjF9IFwKKy0gICAgICAgICAgJXttNjQ6LWR5bmFtaWMtbGlua2VyIC9saWIvbGQ2NC5zby4xfX19fSIKKysgICAgICAgICAgJXttMzE6LWR5bmFtaWMtbGlua2VyICIgRUxGMzFfRFlOQU1JQ19MSU5LRVIgIn0gXAorKyAgICAgICAgICAle202NDotZHluYW1pYy1saW5rZXIgIiBFTEY2NF9EWU5BTUlDX0xJTktFUiAifX19fSIKKyAKKyAKKyAjZGVmaW5lIFRBUkdFVF9BU01fRklMRV9FTkQgZmlsZV9lbmRfaW5kaWNhdGVfZXhlY19zdGFjaworLS0tIGdjYy00LjAuMi9nY2MvY29uZmlnL3NoL2xpbnV4LmgKKysrKyBnY2MtNC4wLjIvZ2NjL2NvbmZpZy9zaC9saW51eC5oCitAQCAtNjcsMTEgKzY3LDE2IEBACisgI3VuZGVmIFNVQlRBUkdFVF9MSU5LX0VNVUxfU1VGRklYCisgI2RlZmluZSBTVUJUQVJHRVRfTElOS19FTVVMX1NVRkZJWCAiX2xpbnV4IgorICN1bmRlZiBTVUJUQVJHRVRfTElOS19TUEVDCisrI2lmZGVmIFVTRV9VQ0xJQkMKKysjZGVmaW5lIEVMRl9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKysjZWxzZQorKyNkZWZpbmUgRUxGX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2VuZGlmCisgI2RlZmluZSBTVUJUQVJHRVRfTElOS19TUEVDIFwKKyAgICIle3NoYXJlZDotc2hhcmVkfSBcCisgICAgJXshc3RhdGljOiBcCisgICAgICAle3JkeW5hbWljOi1leHBvcnQtZHluYW1pY30gXAorLSAgICAgJXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyIC9saWIvbGQtbGludXguc28uMn19IFwKKysgICAgICV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAiIEVMRl9EWU5BTUlDX0xJTktFUiAifX0gXAorICAgICV7c3RhdGljOi1zdGF0aWN9IgorIAorICN1bmRlZiBMSUJfU1BFQworLS0tIGdjYy00LjAuMi9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgKKysrKyBnY2MtNC4wLjIvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oCitAQCAtMTMwLDE0ICsxMzAsMTkgQEAKKyAKKyAvKiBJZiBFTEYgaXMgdGhlIGRlZmF1bHQgZm9ybWF0LCB3ZSBzaG91bGQgbm90IHVzZSAvbGliL2VsZi4gICovCisgCisrI2lmZGVmIFVTRV9VQ0xJQkMKKysjZGVmaW5lIEVMRl9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKysjZWxzZQorKyNkZWZpbmUgRUxGX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2VuZGlmCisgI3VuZGVmICBMSU5LX1NQRUMKKyAjZGVmaW5lIExJTktfU1BFQyAiLW0gZWxmMzJfc3BhcmMgLVkgUCwvdXNyL2xpYiAle3NoYXJlZDotc2hhcmVkfSBcCisgICAleyFtbm8tcmVsYXg6JXshcjotcmVsYXh9fSBcCisgICAleyFzaGFyZWQ6IFwKKyAgICAgJXshaWJjczogXAorICAgICAgICV7IXN0YXRpYzogXAorICAgICAgICAgJXtyZHluYW1pYzotZXhwb3J0LWR5bmFtaWN9IFwKKy0gICAgICAgICV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAvbGliL2xkLWxpbnV4LnNvLjJ9fSBcCisrICAgICAgICAleyFkeW5hbWljLWxpbmtlcjotZHluYW1pYy1saW5rZXIgIiBFTEZfRFlOQU1JQ19MSU5LRVIgIn19IFwKKyAgICAgICAgICV7c3RhdGljOi1zdGF0aWN9fX0iCisgCisgLyogVGhlIHN1biBidW5kbGVkIGFzc2VtYmxlciBkb2Vzbid0IGFjY2VwdCAtWWQsIChhbmQgbmVpdGhlciBkb2VzIGdhcykuCistLS0gZ2NjLTQuMC4yL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCisrKysgZ2NjLTQuMC4yL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCitAQCAtMTY3LDEyICsxNjYsMTcgQEAKKyAgIHsgImxpbmtfYXJjaF9kZWZhdWx0IiwgTElOS19BUkNIX0RFRkFVTFRfU1BFQyB9LAkgIFwKKyAgIHsgImxpbmtfYXJjaCIsCSBMSU5LX0FSQ0hfU1BFQyB9LAorICAgICAKKysjaWZkZWYgVVNFX1VDTElCQworKyNkZWZpbmUgRUxGX0RZTkFNSUNfTElOS0VSCSIvbGliL2xkLXVDbGliYy5zby4wIgorKyNlbHNlCisrI2RlZmluZSBFTEZfRFlOQU1JQ19MSU5LRVIgICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2VuZGlmCisgI2RlZmluZSBMSU5LX0FSQ0gzMl9TUEVDICItbSBlbGYzMl9zcGFyYyAtWSBQLC91c3IvbGliICV7c2hhcmVkOi1zaGFyZWR9IFwKKyAgICV7IXNoYXJlZDogXAorICAgICAleyFpYmNzOiBcCisgICAgICAgJXshc3RhdGljOiBcCisgICAgICAgICAle3JkeW5hbWljOi1leHBvcnQtZHluYW1pY30gXAorLSAgICAgICAgJXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyIC9saWIvbGQtbGludXguc28uMn19IFwKKysgICAgICAgICV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAiIEVMRl9EWU5BTUlDX0xJTktFUiAifX0gXAorICAgICAgICAgJXtzdGF0aWM6LXN0YXRpY319fSBcCisgIgorIAorLS0tIGdjYy00LjAuMi9saWJ0b29sLm00CisrKysgZ2NjLTQuMC4yL2xpYnRvb2wubTQKK0BAIC02ODIsNiArNjgyLDExIEBACisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKKytsaW51eC11Y2xpYmMqKQorKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKysgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC9saWIvbGlidUNsaWJjLSouc29gCisrICA7OworKworIG5ldGJzZCogfCBrbmV0YnNkKi1nbnUpCisgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICBbbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL1wuXStcLnNvXC5bMC05XStcLlswLTldKyQnXQorLS0tIGdjYy00LjAuMi9sdGNvbmZpZworKysrIGdjYy00LjAuMi9sdGNvbmZpZworQEAgLTYwMyw2ICs2MDMsNyBAQAorIAorICMgVHJhbnNmb3JtIGxpbnV4KiB0byAqLSotbGludXgtZ251KiwgdG8gc3VwcG9ydCBvbGQgY29uZmlndXJlIHNjcmlwdHMuCisgY2FzZSAkaG9zdF9vcyBpbgorK2xpbnV4LXVjbGliYyopIDs7CisgbGludXgtZ251KikgOzsKKyBsaW51eCopIGhvc3Q9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoLiotLiotbGludXhcKVwoLipcKSQvXDEtZ251XDIvJ2AKKyBlc2FjCitAQCAtMTI3NCw2ICsxMjc1LDIzIEBACisgICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJworICAgOzsKKyAKKytsaW51eC11Y2xpYmMqKQorKyAgdmVyc2lvbl90eXBlPWxpbnV4CisrICBuZWVkX2xpYl9wcmVmaXg9bm8KKysgIG5lZWRfdmVyc2lvbj1ubworKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5zbyR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kbWFqb3IgJGxpYm5hbWUuc28nCisrICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kbWFqb3InCisrICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJworKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKysgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworKyAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCisrICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKysgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCisrICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisrICAjIEFzc3VtZSB1c2luZyB0aGUgdUNsaWJjIGR5bmFtaWMgbGlua2VyLgorKyAgZHluYW1pY19saW5rZXI9InVDbGliYyBsZC5zbyIKKysgIDs7CisrCisgbmV0YnNkKikKKyAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgbmVlZF92ZXJzaW9uPW5vCistLS0gZ2NjLTQuMC4yL2xpYmZmaS9jb25maWd1cmUKKysrKyBnY2MtNC4wLjIvbGliZmZpL2NvbmZpZ3VyZQorQEAgLTM0NTcsNiArMzQ1NywxMSBAQAorICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgIDs7CisgCisrbGludXgtdWNsaWJjKikKKysgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisrICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvbGliL2xpYnVDbGliYy0qLnNvYAorKyAgOzsKKysKKyBuZXRic2QqIHwga25ldGJzZCotZ251KQorICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL1wuXStcLnNvXC5bMC05XStcLlswLTldKyQnCistLS0gZ2NjLTQuMC4yL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQorKysrIGdjYy00LjAuMi9saWJnZm9ydHJhbi9jb25maWd1cmUKK0BAIC0zNjgxLDYgKzM2ODEsMTEgQEAKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorK2xpbnV4LXVjbGliYyopCisrICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL2xpYi9saWJ1Q2xpYmMtKi5zb2AKKysgIDs7CisrCisgbmV0YnNkKiB8IGtuZXRic2QqLWdudSkKKyAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9cLl0rXC5zb1wuWzAtOV0rXC5bMC05XSskJworLS0tIGdjYy00LjAuMi9saWJqYXZhL2NvbmZpZ3VyZQorKysrIGdjYy00LjAuMi9saWJqYXZhL2NvbmZpZ3VyZQorQEAgLTQzNTEsNiArNDM1MSwxMSBAQAorICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgIDs7CisgCisrbGludXgtdWNsaWJjKikKKysgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisrICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvbGliL2xpYnVDbGliYy0qLnNvYAorKyAgOzsKKysKKyBuZXRic2QqIHwga25ldGJzZCotZ251KQorICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL1wuXStcLnNvXC5bMC05XStcLlswLTldKyQnCistLS0gZ2NjLTQuMC4yL2xpYm11ZGZsYXAvY29uZmlndXJlCisrKysgZ2NjLTQuMC4yL2xpYm11ZGZsYXAvY29uZmlndXJlCitAQCAtNTM4MCw2ICs1MzgwLDExIEBACisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKKytsaW51eC11Y2xpYmMqKQorKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKysgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC9saWIvbGlidUNsaWJjLSouc29gCisrICA7OworKworIG5ldGJzZCogfCBrbmV0YnNkKi1nbnUpCisgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXC5dK1wuc29cLlswLTldK1wuWzAtOV0rJCcKKy0tLSBnY2MtNC4wLjIvbGlib2JqYy9jb25maWd1cmUKKysrKyBnY2MtNC4wLjIvbGlib2JqYy9jb25maWd1cmUKK0BAIC0zMjgzLDYgKzMyODMsMTEgQEAKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorK2xpbnV4LXVjbGliYyopCisrICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL2xpYi9saWJ1Q2xpYmMtKi5zb2AKKysgIDs7CisrCisgbmV0YnNkKiB8IGtuZXRic2QqLWdudSkKKyAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9cLl0rXC5zb1wuWzAtOV0rXC5bMC05XSskJworLS0tIGdjYy00LjAuMi9ib2VobS1nYy9jb25maWd1cmUKKysrKyBnY2MtNC4wLjIvYm9laG0tZ2MvY29uZmlndXJlCitAQCAtNDMyMCw2ICs0MzIwLDExIEBACisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKKytsaW51eC11Y2xpYmMqKQorKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKysgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC9saWIvbGlidUNsaWJjLSouc29gCisrICA7OworKworIG5ldGJzZCogfCBrbmV0YnNkKi1nbnUpCisgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXC5dK1wuc29cLlswLTldK1wuWzAtOV0rJCcKKy0tLSBnY2MtNC4wLjIvY29uZmlndXJlCisrKysgZ2NjLTQuMC4yL2NvbmZpZ3VyZQorQEAgLTExNDEsNyArMTE0MSw3IEBACisgICAgIDs7CisgIiIpCisgICAgIGNhc2UgIiR7dGFyZ2V0fSIgaW4KKy0gICAgKi0qLWxpbnV4Ki1nbnUgfCAqLSotZ251KiB8ICotKi1rKmJzZCotZ251KQorKyAgICAqLSotbGludXgqLWdudSB8ICotKi1nbnUqIHwgKi0qLWsqYnNkKi1nbnUgfCAqLSotbGludXgtdWNsaWJjKikKKyAgICAgICAgICMgRW5hYmxlIGxpYm11ZGZsYXAgYnkgZGVmYXVsdCBpbiBHTlUgYW5kIGZyaWVuZHMuCisgCTs7CisgICAgICotKi1mcmVlYnNkKikKKy0tLSBnY2MtNC4wLjIvY29uZmlndXJlLmluCisrKysgZ2NjLTQuMC4yL2NvbmZpZ3VyZS5pbgorQEAgLTM1MCw3ICszNTAsNyBAQAorICAgICA7OworICIiKQorICAgICBjYXNlICIke3RhcmdldH0iIGluCistICAgICotKi1saW51eCotZ251IHwgKi0qLWdudSogfCAqLSotaypic2QqLWdudSkKKysgICAgKi0qLWxpbnV4Ki1nbnUgfCAqLSotZ251KiB8ICotKi1rKmJzZCotZ251IHwgKi0qLWxpbnV4LXVjbGliYyopCisgICAgICAgICAjIEVuYWJsZSBsaWJtdWRmbGFwIGJ5IGRlZmF1bHQgaW4gR05VIGFuZCBmcmllbmRzLgorIAk7OworICAgICAqLSotZnJlZWJzZCopCistLS0gZ2NjLTQuMC4yL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAorKysrIGdjYy00LjAuMi9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKK0BAIC0xMDUsNiArMTA1LDEwIEBACisgIHRoZW4KKyAgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCisgICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQorK2VsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCAtYSAkSF9SRUFMX1RBUkdFVCA9IGk2ODYtcGMtbGludXgtdWNsaWJjIF0KKysgdGhlbgorKyAgbWFrZSBhbGwtZ2RiIGFsbC1kZWphZ251IGFsbC1sZCB8fCBleGl0IDEKKysgIG1ha2UgaW5zdGFsbC1nZGIgaW5zdGFsbC1kZWphZ251IGluc3RhbGwtbGQgfHwgZXhpdCAxCisgZWxpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIF0gOyB0aGVuCisgICBtYWtlIGJvb3RzdHJhcCB8fCBleGl0IDEKKyAgIG1ha2UgaW5zdGFsbCB8fCBleGl0IDEKKy0tLSBnY2MtNC4wLjIvemxpYi9jb25maWd1cmUKKysrKyBnY2MtNC4wLjIvemxpYi9jb25maWd1cmUKK0BAIC0zNDI2LDYgKzM0MjYsMTEgQEAKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorK2xpbnV4LXVjbGliYyopCisrICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL2xpYi9saWJ1Q2xpYmMtKi5zb2AKKysgIDs7CisrCisgbmV0YnNkKiB8IGtuZXRic2QqLWdudSkKKyAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9cLl0rXC5zb1wuWzAtOV0rXC5bMC05XSskJwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjAuNC8xMTAtdWNsaWJjLWxvY2FsZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4wLjQvMTEwLXVjbGliYy1sb2NhbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM0Y2Y5NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4wLjQvMTEwLXVjbGliYy1sb2NhbGUucGF0Y2gKQEAgLTAsMCArMSwzMjM3IEBACitkaWZmIC11ck4gZ2NjLTQuMC4wLTEwMC9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00IGdjYy00LjAuMC9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CistLS0gZ2NjLTQuMC4wLTEwMC9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CTIwMDUtMDQtMzAgMTM6MDY6NTMuMDAwMDAwMDAwIC0wNTAwCisrKysgZ2NjLTQuMC4wL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQJMjAwNS0wNC0yOCAyMDoxOTowMS4wMDAwMDAwMDAgLTA1MDAKK0BAIC0xMTA0LDcgKzExMDQsNyBAQAorICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgQyBsb2NhbGUgdG8gdXNlXSkKKyAgIEdMSUJDWFhfRU5BQkxFKGNsb2NhbGUsYXV0byxbQDw6QD1NT0RFTEA6PkBdLAorICAgICBbdXNlIE1PREVMIGZvciB0YXJnZXQgbG9jYWxlIHBhY2thZ2VdLAorLSAgICBbcGVybWl0IGdlbmVyaWN8Z251fGllZWVfMTAwMy4xLTIwMDF8eWVzfG5vfGF1dG9dKQorKyAgICBbcGVybWl0IGdlbmVyaWN8Z251fGllZWVfMTAwMy4xLTIwMDF8dWNsaWJjfHllc3xub3xhdXRvXSkKKyAgIAorICAgIyBJZiB0aGV5IGRpZG4ndCB1c2UgdGhpcyBvcHRpb24gc3dpdGNoLCBvciBpZiB0aGV5IHNwZWNpZmllZCAtLWVuYWJsZQorICAgIyB3aXRoIG5vIHNwZWNpZmljIG1vZGVsLCB3ZSdsbCBoYXZlIHRvIGxvb2sgZm9yIG9uZS4gIElmIHRoZXkKK0BAIC0xMTIwLDYgKzExMjAsOSBAQAorICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCisrICAgICAgKi11Y2xpYmMqKQorKyAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz11Y2xpYmMKKysgICAgICAgIDs7CisgICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCisgICAgICAgICBBQ19FR1JFUF9DUFAoW19HTElCQ1hYX29rXSwgWworICAgICAgICAgI2luY2x1ZGUgPGZlYXR1cmVzLmg+CitAQCAtMTI2Myw2ICsxMjY2LDQwIEBACisgICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5jYworICAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvYysrbG9jYWxlX2ludGVybmFsLmgKKyAgICAgICA7OworKyAgICB1Y2xpYmMpCisrICAgICAgQUNfTVNHX1JFU1VMVCh1Y2xpYmMpCisrCisrICAgICAgIyBEZWNsYXJlIGludGVudGlvbiB0byB1c2UgZ2V0dGV4dCwgYW5kIGFkZCBzdXBwb3J0IGZvciBzcGVjaWZpYworKyAgICAgICMgbGFuZ3VhZ2VzLgorKyAgICAgICMgRm9yIHNvbWUgcmVhc29uLCBBTExfTElOR1VBUyBoYXMgdG8gYmUgYmVmb3JlIEFNLUdOVS1HRVRURVhUCisrICAgICAgQUxMX0xJTkdVQVM9ImRlIGZyIgorKworKyAgICAgICMgRG9uJ3QgY2FsbCBBTS1HTlUtR0VUVEVYVCBoZXJlLiBJbnN0ZWFkLCBhc3N1bWUgZ2xpYmMuCisrICAgICAgQUNfQ0hFQ0tfUFJPRyhjaGVja19tc2dmbXQsIG1zZ2ZtdCwgeWVzLCBubykKKysgICAgICBpZiB0ZXN0IHgiJGNoZWNrX21zZ2ZtdCIgPSB4InllcyIgJiYgdGVzdCB4IiRlbmFibGVfbmxzIiA9IHgieWVzIjsgdGhlbgorKyAgICAgICAgVVNFX05MUz15ZXMKKysgICAgICBmaQorKyAgICAgICMgRXhwb3J0IHRoZSBidWlsZCBvYmplY3RzLgorKyAgICAgIGZvciBsaW5nIGluICRBTExfTElOR1VBUzsgZG8gXAorKyAgICAgICAgZ2xpYmN4eF9NT0ZJTEVTPSIkZ2xpYmN4eF9NT0ZJTEVTICRsaW5nLm1vIjsgXAorKyAgICAgICAgZ2xpYmN4eF9QT0ZJTEVTPSIkZ2xpYmN4eF9QT0ZJTEVTICRsaW5nLnBvIjsgXAorKyAgICAgIGRvbmUKKysgICAgICBBQ19TVUJTVChnbGliY3h4X01PRklMRVMpCisrICAgICAgQUNfU1VCU1QoZ2xpYmN4eF9QT0ZJTEVTKQorKworKyAgICAgIENMT0NBTEVfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrICAgICAgQ0xPQ0FMRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKyAgICAgIENDT0RFQ1ZUX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworKyAgICAgIENDT0xMQVRFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworKyAgICAgIENDVFlQRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrICAgICAgQ01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrICAgICAgQ01FU1NBR0VTX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKysgICAgICBDTU9ORVlfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKyAgICAgIENOVU1FUklDX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKyAgICAgIENUSU1FX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysgICAgICA7OworICAgZXNhYworIAorICAgIyBUaGlzIGlzIHdoZXJlIHRoZSB0ZXN0c3VpdGUgbG9va3MgZm9yIGxvY2FsZSBjYXRhbG9ncywgdXNpbmcgdGhlCitkaWZmIC11ck4gZ2NjLTQuMC4wLTEwMC9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggZ2NjLTQuMC4wL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorLS0tIGdjYy00LjAuMC0xMDAvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCTE5NjktMTItMzEgMTg6MDA6MDAuMDAwMDAwMDAwIC0wNjAwCisrKysgZ2NjLTQuMC4wL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAkyMDA1LTA0LTI4IDAxOjEzOjE1LjAwMDAwMDAwMCAtMDUwMAorQEAgLTAsMCArMSw1OSBAQAorKy8vIFByb3RvdHlwZXMgZm9yIEdMSUJDIHRocmVhZCBsb2NhbGUgX18tcHJlZml4ZWQgZnVuY3Rpb25zIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vIFdyaXR0ZW4gYnkgSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8Y2xvY2FsZT4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBjbGVhbiB0aGlzIHVwCisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorK2V4dGVybiAiQyIgX190eXBlb2YoaXN3Y3R5cGVfbCkgX19pc3djdHlwZV9sOworK2V4dGVybiAiQyIgX190eXBlb2YobmxfbGFuZ2luZm9fbCkgX19ubF9sYW5naW5mb19sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RyY29sbF9sKSBfX3N0cmNvbGxfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cmZ0aW1lX2wpIF9fc3RyZnRpbWVfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvZF9sKSBfX3N0cnRvZF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9mX2wpIF9fc3RydG9mX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2xkX2wpIF9fc3RydG9sZF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RyeGZybV9sKSBfX3N0cnhmcm1fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHRvd2xvd2VyX2wpIF9fdG93bG93ZXJfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHRvd3VwcGVyX2wpIF9fdG93dXBwZXJfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc2NvbGxfbCkgX193Y3Njb2xsX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3NmdGltZV9sKSBfX3djc2Z0aW1lX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3N4ZnJtX2wpIF9fd2NzeGZybV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2N0eXBlX2wpIF9fd2N0eXBlX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihuZXdsb2NhbGUpIF9fbmV3bG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YoZnJlZWxvY2FsZSkgX19mcmVlbG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YoZHVwbG9jYWxlKSBfX2R1cGxvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisrCisrI2VuZGlmIC8vIEdMSUJDIDIuMyBhbmQgbGF0ZXIKK2RpZmYgLXVyTiBnY2MtNC4wLjAtMTAwL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBnY2MtNC4wLjAvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCistLS0gZ2NjLTQuMC4wLTEwMC9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MJMTk2OS0xMi0zMSAxODowMDowMC4wMDAwMDAwMDAgLTA2MDAKKysrKyBnY2MtNC4wLjAvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCTIwMDUtMDQtMjggMDE6MTM6MTUuMDAwMDAwMDAwIC0wNTAwCitAQCAtMCwwICsxLDE2MCBAQAorKy8vIFdyYXBwZXIgZm9yIHVuZGVybHlpbmcgQy1sYW5ndWFnZSBsb2NhbGl6YXRpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi44ICBTdGFuZGFyZCBsb2NhbGUgY2F0ZWdvcmllcy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGNlcnJubz4gIC8vIEZvciBlcnJubworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KKysjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fc3RydG9sX2woUywgRSwgQiwgTCkgICAgICBzdHJ0b2woKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG91bF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b3VsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvbGxfbChTLCBFLCBCLCBMKSAgICAgc3RydG9sbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b3VsbF9sKFMsIEUsIEIsIEwpICAgIHN0cnRvdWxsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorKyNkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKysjZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorKyN3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CisrI2RlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorKyNkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQgCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZmxvYXQmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCAKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19mOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19kOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGxvbmcgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2xkOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHZvaWQKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgCisrCQkJCSAgICBfX2NfbG9jYWxlIF9fb2xkKQorKyAgeworKyAgICBfX2Nsb2MgPSBfX25ld2xvY2FsZSgxIDw8IExDX0FMTCwgX19zLCBfX29sZCk7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgaWYgKCFfX2Nsb2MpCisrICAgICAgeworKwkvLyBUaGlzIG5hbWVkIGxvY2FsZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIE9TLgorKwlfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUgIgorKwkJCSAgICAgICJuYW1lIG5vdCB2YWxpZCIpKTsKKysgICAgICB9CisrI2VuZGlmCisrICB9CisrICAKKysgIHZvaWQKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorKyAgeworKyAgICBpZiAoX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorKyAgICAgIF9fZnJlZWxvY2FsZShfX2Nsb2MpOyAKKysgIH0KKysKKysgIF9fY19sb2NhbGUKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKysgIHsgcmV0dXJuIF9fZHVwbG9jYWxlKF9fY2xvYyk7IH0KKyt9IC8vIG5hbWVzcGFjZSBzdGQKKysKKytuYW1lc3BhY2UgX19nbnVfY3h4CisreworKyAgY29uc3QgY2hhciogY29uc3QgY2F0ZWdvcnlfbmFtZXNbNiArIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTXSA9CisrICAgIHsKKysgICAgICAiTENfQ1RZUEUiLCAKKysgICAgICAiTENfTlVNRVJJQyIsCisrICAgICAgIkxDX1RJTUUiLCAKKysgICAgICAiTENfQ09MTEFURSIsIAorKyAgICAgICJMQ19NT05FVEFSWSIsCisrICAgICAgIkxDX01FU1NBR0VTIiwgCisrI2lmIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTICE9IDAKKysgICAgICAiTENfUEFQRVIiLCAKKysgICAgICAiTENfTkFNRSIsIAorKyAgICAgICJMQ19BRERSRVNTIiwKKysgICAgICAiTENfVEVMRVBIT05FIiwgCisrICAgICAgIkxDX01FQVNVUkVNRU5UIiwgCisrICAgICAgIkxDX0lERU5USUZJQ0FUSU9OIiAKKysjZW5kaWYKKysgICAgfTsKKyt9CisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIGNvbnN0IGNoYXIqIGNvbnN0KiBjb25zdCBsb2NhbGU6Ol9TX2NhdGVnb3JpZXMgPSBfX2dudV9jeHg6OmNhdGVnb3J5X25hbWVzOworK30gIC8vIG5hbWVzcGFjZSBzdGQKK2RpZmYgLXVyTiBnY2MtNC4wLjAtMTAwL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGdjYy00LjAuMC9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorLS0tIGdjYy00LjAuMC0xMDAvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgJMTk2OS0xMi0zMSAxODowMDowMC4wMDAwMDAwMDAgLTA2MDAKKysrKyBnY2MtNC4wLjAvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgJMjAwNS0wNC0yOCAwMToxMzoxNS4wMDAwMDAwMDAgLTA1MDAKK0BAIC0wLDAgKzEsMTE1IEBACisrLy8gV3JhcHBlciBmb3IgdW5kZXJseWluZyBDLWxhbmd1YWdlIGxvY2FsaXphdGlvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjggIFN0YW5kYXJkIGxvY2FsZSBjYXRlZ29yaWVzLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaWZuZGVmIF9DX0xPQ0FMRV9ICisrI2RlZmluZSBfQ19MT0NBTEVfSCAxCisrCisrI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorKworKyNpbmNsdWRlIDxjc3RyaW5nPiAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c3RybGVuCisrI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzbnByaW50ZiBvciBzdGQ6OnNwcmludGYKKysjaW5jbHVkZSA8Y2xvY2FsZT4KKysjaW5jbHVkZSA8bGFuZ2luZm8uaD4JCS8vIEZvciBjb2RlY3Z0CisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrI2luY2x1ZGUgPGljb252Lmg+CQkvLyBGb3IgY29kZWN2dCB1c2luZyBpY29udiwgaWNvbnZfdAorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyNpbmNsdWRlIDxsaWJpbnRsLmg+IAkJLy8gRm9yIG1lc3NhZ2VzCisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgd2hhdCBpcyBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgZm9yCisrI2VuZGlmCisrI2RlZmluZSBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgMQorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBjYXRlZ29yaWVzCisrI2VuZGlmCisrLy8gI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyA2CisrI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwCisrIAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrbmFtZXNwYWNlIF9fZ251X2N4eAorK3sKKysgIGV4dGVybiAiQyIgX190eXBlb2YodXNlbG9jYWxlKSBfX3VzZWxvY2FsZTsKKyt9CisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgdHlwZWRlZiBfX2xvY2FsZV90CQlfX2NfbG9jYWxlOworKyNlbHNlCisrICB0eXBlZGVmIGludCoJCQlfX2NfbG9jYWxlOworKyNlbmRpZgorKworKyAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgX1R2IHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgorKyAgLy8gc3RyaW5nLiAgSWYgc25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworKyAgLy8gdGhlIHVuc2FmZSBzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKysgIC8vIGJlIGF2b2lkZWQuCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CisrICAgIGludAorKyAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LCBjb25zdCBpbnQgX19zaXplLCBjb25zdCBjaGFyKiBfX2ZtdCwKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX3ByZWMpCisrICAgIHsKKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjKQorKyAgICB7CisrIyBpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBjaGFyKiBfX29sZCA9IHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX29sZCkgKyAxXTsKKysgICAgICBzdGQ6OnN0cmNweShfX3NhdiwgX19vbGQpOworKyAgICAgIHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgIkMiKTsKKysjIGVuZGlmCisrI2VuZGlmCisrCisrICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjpzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19wcmVjLCBfX3YpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7CisrI2VsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisrI2VuZGlmCisrICAgICAgcmV0dXJuIF9fcmV0OworKyAgICB9CisrfQorKworKyNlbmRpZgorZGlmZiAtdXJOIGdjYy00LjAuMC0xMDAvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYyBnY2MtNC4wLjAvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworLS0tIGdjYy00LjAuMC0xMDAvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYwkxOTY5LTEyLTMxIDE4OjAwOjAwLjAwMDAwMDAwMCAtMDYwMAorKysrIGdjYy00LjAuMC9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCTIwMDUtMDQtMjggMDE6MTM6MTUuMDAwMDAwMDAwIC0wNTAwCitAQCAtMCwwICsxLDMwNiBAQAorKy8vIHN0ZDo6Y29kZWN2dCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS41IC0gVGVtcGxhdGUgY2xhc3MgY29kZWN2dAorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBTcGVjaWFsaXphdGlvbnMuCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLCAKKysJIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorKwkgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKKysJIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAorKyAgeworKyAgICByZXN1bHQgX19yZXQgPSBvazsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIHdjc25ydG9tYnMgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2UgZmFsbCBiYWNrIHRvIHdjcnRvbWIgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KKysgICAgLy8gTkI6IHdjc25ydG9tYnMgaXMgYSBHTlUgZXh0ZW5zaW9uCisrICAgIGZvciAoX19mcm9tX25leHQgPSBfX2Zyb20sIF9fdG9fbmV4dCA9IF9fdG87CisrCSBfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX190b19uZXh0IDwgX190b19lbmQKKysJICYmIF9fcmV0ID09IG9rOykKKysgICAgICB7CisrCWNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kID0gd21lbWNocihfX2Zyb21fbmV4dCwgTCdcMCcsCisrCQkJCQkJICAgICAgX19mcm9tX2VuZCAtIF9fZnJvbV9uZXh0KTsKKysJaWYgKCFfX2Zyb21fY2h1bmtfZW5kKQorKwkgIF9fZnJvbV9jaHVua19lbmQgPSBfX2Zyb21fZW5kOworKworKwlfX2Zyb20gPSBfX2Zyb21fbmV4dDsKKysJY29uc3Qgc2l6ZV90IF9fY29udiA9IHdjc25ydG9tYnMoX190b19uZXh0LCAmX19mcm9tX25leHQsCisrCQkJCQkgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbV9uZXh0LAorKwkJCQkJIF9fdG9fZW5kIC0gX190b19uZXh0LCAmX19zdGF0ZSk7CisrCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisrCSAgeworKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKKysJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKysJICAgIC8vIHdjcnRvbWIuCisrCSAgICBmb3IgKDsgX19mcm9tIDwgX19mcm9tX25leHQ7ICsrX19mcm9tKQorKwkgICAgICBfX3RvX25leHQgKz0gd2NydG9tYihfX3RvX25leHQsICpfX2Zyb20sICZfX3RtcF9zdGF0ZSk7CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCSAgICBfX3JldCA9IGVycm9yOworKwkgIH0KKysJZWxzZSBpZiAoX19mcm9tX25leHQgJiYgX19mcm9tX25leHQgPCBfX2Zyb21fY2h1bmtfZW5kKQorKwkgIHsKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb21fY2h1bmtfZW5kOworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICB9CisrCisrCWlmIChfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX19yZXQgPT0gb2spCisrCSAgeworKwkgICAgZXh0ZXJuX3R5cGUgX19idWZbTUJfTEVOX01BWF07CisrCSAgICBfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7CisrCSAgICBjb25zdCBzaXplX3QgX19jb252ID0gd2NydG9tYihfX2J1ZiwgKl9fZnJvbV9uZXh0LCAmX190bXBfc3RhdGUpOworKwkgICAgaWYgKF9fY29udiA+IHN0YXRpY19jYXN0PHNpemVfdD4oX190b19lbmQgLSBfX3RvX25leHQpKQorKwkgICAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCW1lbWNweShfX3RvX25leHQsIF9fYnVmLCBfX2NvbnYpOworKwkJX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkJX190b19uZXh0ICs9IF9fY29udjsKKysJCSsrX19mcm9tX25leHQ7CisrCSAgICAgIH0KKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OyAKKysgIH0KKysgIAorKyAgY29kZWN2dF9iYXNlOjpyZXN1bHQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLCAKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCisrCWludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCisrCWludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAorKyAgeworKyAgICByZXN1bHQgX19yZXQgPSBvazsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIG1ic25ydG93Y3MgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2Ugc3RvcmUgYSBMJ1wwJyBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KKysgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9fZnJvbSwgX190b19uZXh0ID0gX190bzsKKysJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAorKwkgJiYgX19yZXQgPT0gb2s7KQorKyAgICAgIHsKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQ7CisrCV9fZnJvbV9jaHVua19lbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KG1lbWNocihfX2Zyb21fbmV4dCwgJ1wwJywKKysJCQkJCQkJCSAgX19mcm9tX2VuZAorKwkJCQkJCQkJICAtIF9fZnJvbV9uZXh0KSk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKKysKKysJX19mcm9tID0gX19mcm9tX25leHQ7CisrCXNpemVfdCBfX2NvbnYgPSBtYnNucnRvd2NzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LAorKwkJCQkgICBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCisrCQkJCSAgIF9fdG9fZW5kIC0gX190b19uZXh0LCAmX19zdGF0ZSk7CisrCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisrCSAgeworKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKKysJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKysJICAgIC8vIG1icnRvd2MuCisrCSAgICBmb3IgKDs7ICsrX190b19uZXh0LCBfX2Zyb20gKz0gX19jb252KQorKwkgICAgICB7CisrCQlfX2NvbnYgPSBtYnJ0b3djKF9fdG9fbmV4dCwgX19mcm9tLCBfX2Zyb21fZW5kIC0gX19mcm9tLAorKwkJCQkgJl9fdG1wX3N0YXRlKTsKKysJCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkKKysJCSAgICB8fCBfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpCisrCQkgIGJyZWFrOworKwkgICAgICB9CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbTsKKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsJICAgIAorKwkgICAgX19yZXQgPSBlcnJvcjsKKysJICB9CisrCWVsc2UgaWYgKF9fZnJvbV9uZXh0ICYmIF9fZnJvbV9uZXh0IDwgX19mcm9tX2NodW5rX2VuZCkKKysJICB7CisrCSAgICAvLyBJdCBpcyB1bmNsZWFyIHdoYXQgdG8gcmV0dXJuIGluIHRoaXMgY2FzZSAoc2VlIERSIDM4MikuIAorKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgIH0KKysKKysJaWYgKF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3JldCA9PSBvaykKKysJICB7CisrCSAgICBpZiAoX190b19uZXh0IDwgX190b19lbmQpCisrCSAgICAgIHsKKysJCS8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzCisrCQlfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7CQkKKysJCSsrX19mcm9tX25leHQ7CisrCQkqX190b19uZXh0KysgPSBMJ1wwJzsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsgCisrICB9CisrCisrICBpbnQgCisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCisrICB7CisrICAgIC8vIFhYWCBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCB0aGUgZW5jb2RpbmcgaXMKKysgICAgLy8gc3RhdGVsZXNzIGFuZCBpcyBlaXRoZXIgc2luZ2xlLWJ5dGUgb3IgdmFyaWFibGUtd2lkdGguCisrICAgIGludCBfX3JldCA9IDA7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKyAgICBpZiAoTUJfQ1VSX01BWCA9PSAxKQorKyAgICAgIF9fcmV0ID0gMTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX3JldDsKKysgIH0gIAorKworKyAgaW50IAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKyAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncy4KKysgICAgaW50IF9fcmV0ID0gTUJfQ1VSX01BWDsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysgIAorKyAgaW50IAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2xlbmd0aChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAorKwkgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0CisrICB7CisrICAgIGludCBfX3JldCA9IDA7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIGFkdmFuY2UgcGFzdCBpdCBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KKysgIAorKyAgICAvLyBBIGR1bW15IGludGVybmFsIGJ1ZmZlciBpcyBuZWVkZWQgaW4gb3JkZXIgZm9yIG1ic25ydG9jd3MgdG8gY29uc2lkZXIKKysgICAgLy8gaXRzIGZvdXJ0aCBwYXJhbWV0ZXIgKGl0IHdvdWxkbid0IHdpdGggTlVMTCBhcyBmaXJzdCBwYXJhbWV0ZXIpLgorKyAgICB3Y2hhcl90KiBfX3RvID0gc3RhdGljX2Nhc3Q8d2NoYXJfdCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKHdjaGFyX3QpIAorKwkJCQkJCQkgICAqIF9fbWF4KSk7CisrICAgIHdoaWxlIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKKysgICAgICB7CisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOworKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tLCAnXDAnLAorKwkJCQkJCQkJICBfX2VuZAorKwkJCQkJCQkJICAtIF9fZnJvbSkpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZW5kOworKworKwljb25zdCBleHRlcm5fdHlwZSogX190bXBfZnJvbSA9IF9fZnJvbTsKKysJc2l6ZV90IF9fY29udiA9IG1ic25ydG93Y3MoX190bywgJl9fZnJvbSwKKysJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbSwKKysJCQkJICAgX19tYXgsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gbWJydG93Yy4KKysJICAgIGZvciAoX19mcm9tID0gX190bXBfZnJvbTs7IF9fZnJvbSArPSBfX2NvbnYpCisrCSAgICAgIHsKKysJCV9fY29udiA9IG1icnRvd2MoTlVMTCwgX19mcm9tLCBfX2VuZCAtIF9fZnJvbSwKKysJCQkJICZfX3RtcF9zdGF0ZSk7CisrCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCisrCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQorKwkJICBicmVhazsKKysJICAgICAgfQorKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKKysJICAgIGJyZWFrOworKwkgIH0KKysJaWYgKCFfX2Zyb20pCisrCSAgX19mcm9tID0gX19mcm9tX2NodW5rX2VuZDsKKysJCisrCV9fcmV0ICs9IF9fZnJvbSAtIF9fdG1wX2Zyb207CisrCV9fbWF4IC09IF9fY29udjsKKysKKysJaWYgKF9fZnJvbSA8IF9fZW5kICYmIF9fbWF4KQorKwkgIHsKKysJICAgIC8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzCisrCSAgICBfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7CisrCSAgICArK19fZnJvbTsKKysJICAgICsrX19yZXQ7CisrCSAgICAtLV9fbWF4OworKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7IAorKyAgfQorKyNlbmRpZgorK30KK2RpZmYgLXVyTiBnY2MtNC4wLjAtMTAwL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgZ2NjLTQuMC4wL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKy0tLSBnY2MtNC4wLjAtMTAwL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MJMTk2OS0xMi0zMSAxODowMDowMC4wMDAwMDAwMDAgLTA2MDAKKysrKyBnY2MtNC4wLjAvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYwkyMDA1LTA0LTI4IDAxOjEzOjE1LjAwMDAwMDAwMCAtMDUwMAorQEAgLTAsMCArMSw4MCBAQAorKy8vIHN0ZDo6Y29sbGF0ZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNC4xLjIgIGNvbGxhdGUgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fc3RyY29sbF9sKFMxLCBTMiwgTCkgICAgICBzdHJjb2xsKChTMSksIChTMikpCisrI2RlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCisrI2RlZmluZSBfX3djc2NvbGxfbChTMSwgUzIsIEwpICAgICAgd2NzY29sbCgoUzEpLCAoUzIpKQorKyNkZWZpbmUgX193Y3N4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHdjc3hmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBUaGVzZSBhcmUgYmFzaWNhbGx5IGV4dGVuc2lvbnMgdG8gY2hhcl90cmFpdHMsIGFuZCBwZXJoYXBzIHNob3VsZAorKyAgLy8gYmUgcHV0IHRoZXJlIGluc3RlYWQgb2YgaGVyZS4KKysgIHRlbXBsYXRlPD4KKysgICAgaW50IAorKyAgICBjb2xsYXRlPGNoYXI+OjpfTV9jb21wYXJlKGNvbnN0IGNoYXIqIF9fb25lLCBjb25zdCBjaGFyKiBfX3R3bykgY29uc3QKKysgICAgeyAKKysgICAgICBpbnQgX19jbXAgPSBfX3N0cmNvbGxfbChfX29uZSwgX190d28sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOworKyAgICAgIHJldHVybiAoX19jbXAgPj4gKDggKiBzaXplb2YgKGludCkgLSAyKSkgfCAoX19jbXAgIT0gMCk7CisrICAgIH0KKysgIAorKyAgdGVtcGxhdGU8PgorKyAgICBzaXplX3QKKysgICAgY29sbGF0ZTxjaGFyPjo6X01fdHJhbnNmb3JtKGNoYXIqIF9fdG8sIGNvbnN0IGNoYXIqIF9fZnJvbSwgCisrCQkJCXNpemVfdCBfX24pIGNvbnN0IAorKyAgICB7IHJldHVybiBfX3N0cnhmcm1fbChfX3RvLCBfX2Zyb20sIF9fbiwgX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgaW50IAorKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV9jb21wYXJlKGNvbnN0IHdjaGFyX3QqIF9fb25lLCAKKysJCQkJIGNvbnN0IHdjaGFyX3QqIF9fdHdvKSBjb25zdAorKyAgICB7CisrICAgICAgaW50IF9fY21wID0gX193Y3Njb2xsX2woX19vbmUsIF9fdHdvLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsKKysgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDApOworKyAgICB9CisrICAKKysgIHRlbXBsYXRlPD4KKysgICAgc2l6ZV90CisrICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX3RyYW5zZm9ybSh3Y2hhcl90KiBfX3RvLCBjb25zdCB3Y2hhcl90KiBfX2Zyb20sCisrCQkJCSAgIHNpemVfdCBfX24pIGNvbnN0CisrICAgIHsgcmV0dXJuIF9fd2NzeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQorKyNlbmRpZgorK30KK2RpZmYgLXVyTiBnY2MtNC4wLjAtMTAwL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGdjYy00LjAuMC9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworLS0tIGdjYy00LjAuMC0xMDAvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MJMTk2OS0xMi0zMSAxODowMDowMC4wMDAwMDAwMDAgLTA2MDAKKysrKyBnY2MtNC4wLjAvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MJMjAwNS0wNC0yOCAwMToxMzoxNS4wMDAwMDAwMDAgLTA1MDAKK0BAIC0wLDAgKzEsMzAwIEBACisrLy8gc3RkOjpjdHlwZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS4xLjIgIGN0eXBlIHZpcnR1YWwgZnVuY3Rpb25zLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgIHdjdHlwZSgoUykpCisrI2RlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICB0b3d1cHBlcigoQykpCisrI2RlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICB0b3dsb3dlcigoQykpCisrI2RlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICBpc3djdHlwZSgoQyksIChNKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCisrICAvLyB2YXJpb3VzIC9jb25maWcvb3MvKiBmaWxlcy4KKysgIHRlbXBsYXRlPD4KKysgICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorKyAgICA6IGN0eXBlPGNoYXI+KDAsIGZhbHNlLCBfX3JlZnMpIAorKyAgICB7IAkJCisrICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKKysJeworKwkgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY3R5cGUpOworKwkgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZSwgX19zKTsgCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICB0aGlzLT5fTV90b3VwcGVyID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfdG91cHBlcjsKKysJICB0aGlzLT5fTV90b2xvd2VyID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfdG9sb3dlcjsKKysJICB0aGlzLT5fTV90YWJsZSA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX2I7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVCAgCisrICBjdHlwZTx3Y2hhcl90Pjo6X193bWFza190eXBlCisrICBjdHlwZTx3Y2hhcl90Pjo6X01fY29udmVydF90b193bWFzayhjb25zdCBtYXNrIF9fbSkgY29uc3QKKysgIHsKKysgICAgX193bWFza190eXBlIF9fcmV0OworKyAgICBzd2l0Y2ggKF9fbSkKKysgICAgICB7CisrICAgICAgY2FzZSBzcGFjZToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJzcGFjZSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBwcmludDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJwcmludCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBjbnRybDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJjbnRybCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSB1cHBlcjoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJ1cHBlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBsb3dlcjoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJsb3dlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBhbHBoYToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJhbHBoYSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBkaWdpdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJkaWdpdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBwdW5jdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJwdW5jdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSB4ZGlnaXQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgieGRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGFsbnVtOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImFsbnVtIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGdyYXBoOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImdyYXBoIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBkZWZhdWx0OgorKwlfX3JldCA9IF9fd21hc2tfdHlwZSgpOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKyAgCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9fdG93dXBwZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b3VwcGVyKHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrICAgICAgICAqX19sbyA9IF9fdG93dXBwZXJfbCgqX19sbywgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICAgICAgKytfX2xvOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrICAKKysgIHdjaGFyX3QKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b2xvd2VyKHdjaGFyX3QgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX190b3dsb3dlcl9sKF9fYywgX01fY19sb2NhbGVfY3R5cGUpOyB9CisrICAKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKyAgICAgICAgKl9fbG8gPSBfX3Rvd2xvd2VyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgICAgICsrX19sbzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgYm9vbAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9faXMobWFzayBfX20sIHdjaGFyX3QgX19jKSBjb25zdAorKyAgeyAKKysgICAgLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysgICAgLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKKysgICAgY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsgCisrICAgIGZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysgICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQorKwkgICYmIF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwl7CisrCSAgX19yZXQgPSB0cnVlOworKwkgIGJyZWFrOworKwl9CisrICAgIHJldHVybiBfX3JldDsgICAgCisrICB9CisrICAKKysgIGNvbnN0IHdjaGFyX3QqIAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9faXMoY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgbWFzayogX192ZWMpIGNvbnN0CisrICB7CisrICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytfX3ZlYywgKytfX2xvKQorKyAgICAgIHsKKysJLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysJLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7IAorKwltYXNrIF9fbSA9IDA7CisrCWZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysJICBpZiAoX19pc3djdHlwZV9sKCpfX2xvLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJICAgIF9fbSB8PSBfTV9iaXRbX19iaXRjdXJdOworKwkqX192ZWMgPSBfX207CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysgIAorKyAgY29uc3Qgd2NoYXJfdCogCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkgJiYgIXRoaXMtPmRvX2lzKF9fbSwgKl9fbG8pKQorKyAgICAgICsrX19sbzsKKysgICAgcmV0dXJuIF9fbG87CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkgJiYgdGhpcy0+ZG9faXMoX19tLCAqX19sbykgIT0gMCkKKysgICAgICArK19fbG87CisrICAgIHJldHVybiBfX2xvOworKyAgfQorKworKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fd2lkZW4oY2hhciBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfTV93aWRlbltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpXTsgfQorKworKyAgY29uc3QgY2hhciogCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCB3Y2hhcl90KiBfX2Rlc3QpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrCSpfX2Rlc3QgPSBfTV93aWRlbltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sbyldOworKwkrK19fbG87CisrCSsrX19kZXN0OworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBjaGFyCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19uYXJyb3cod2NoYXJfdCBfX3djLCBjaGFyIF9fZGZhdWx0KSBjb25zdAorKyAgeworKyAgICBpZiAoX193YyA+PSAwICYmIF9fd2MgPCAxMjggJiYgX01fbmFycm93X29rKQorKyAgICAgIHJldHVybiBfTV9uYXJyb3dbX193Y107CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgY29uc3QgaW50IF9fYyA9IHdjdG9iKF9fd2MpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsgCisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fbmFycm93KGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIGNoYXIgX19kZmF1bHQsIAorKwkgICAgY2hhciogX19kZXN0KSBjb25zdAorKyAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIGlmIChfTV9uYXJyb3dfb2spCisrICAgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKwl7CisrCSAgaWYgKCpfX2xvID49IDAgJiYgKl9fbG8gPCAxMjgpCisrCSAgICAqX19kZXN0ID0gX01fbmFycm93WypfX2xvXTsKKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIGNvbnN0IGludCBfX2MgPSB3Y3RvYigqX19sbyk7CisrCSAgICAgICpfX2Rlc3QgPSAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7CisrCSAgICB9CisrCSAgKytfX2xvOworKwkgICsrX19kZXN0OworKwl9CisrICAgIGVsc2UKKysgICAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrCXsKKysJICBjb25zdCBpbnQgX19jID0gd2N0b2IoKl9fbG8pOworKwkgICpfX2Rlc3QgPSAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7CisrCSAgKytfX2xvOworKwkgICsrX19kZXN0OworKwl9CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIHZvaWQKKysgIGN0eXBlPHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX2N0eXBlKCkKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOworKyNlbmRpZgorKyAgICB3aW50X3QgX19pOworKyAgICBmb3IgKF9faSA9IDA7IF9faSA8IDEyODsgKytfX2kpCisrICAgICAgeworKwljb25zdCBpbnQgX19jID0gd2N0b2IoX19pKTsKKysJaWYgKF9fYyA9PSBFT0YpCisrCSAgYnJlYWs7CisrCWVsc2UKKysJICBfTV9uYXJyb3dbX19pXSA9IHN0YXRpY19jYXN0PGNoYXI+KF9fYyk7CisrICAgICAgfQorKyAgICBpZiAoX19pID09IDEyOCkKKysgICAgICBfTV9uYXJyb3dfb2sgPSB0cnVlOworKyAgICBlbHNlCisrICAgICAgX01fbmFycm93X29rID0gZmFsc2U7CisrICAgIGZvciAoc2l6ZV90IF9faiA9IDA7CisrCSBfX2ogPCBzaXplb2YoX01fd2lkZW4pIC8gc2l6ZW9mKHdpbnRfdCk7ICsrX19qKQorKyAgICAgIF9NX3dpZGVuW19fal0gPSBidG93YyhfX2opOworKworKyAgICBmb3IgKHNpemVfdCBfX2sgPSAwOyBfX2sgPD0gMTE7ICsrX19rKQorKyAgICAgIHsgCisrCV9NX2JpdFtfX2tdID0gc3RhdGljX2Nhc3Q8bWFzaz4oX0lTYml0KF9faykpOworKwlfTV93bWFza1tfX2tdID0gX01fY29udmVydF90b193bWFzayhfTV9iaXRbX19rXSk7CisrICAgICAgfQorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgIH0KKysjZW5kaWYgLy8gIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrfQorZGlmZiAtdXJOIGdjYy00LjAuMC0xMDAvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgZ2NjLTQuMC4wL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCistLS0gZ2NjLTQuMC4wLTEwMC9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYwkxOTY5LTEyLTMxIDE4OjAwOjAwLjAwMDAwMDAwMCAtMDYwMAorKysrIGdjYy00LjAuMC9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYwkyMDA1LTA0LTI4IDAxOjEzOjE1LjAwMDAwMDAwMCAtMDUwMAorQEAgLTAsMCArMSwxMDAgQEAKKysvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggZ2V0dGV4dCBzdHVmZgorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworK2V4dGVybiAiQyIgY2hhciAqX19kY2dldHRleHQoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCQkgICAgIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpOworKyN1bmRlZiBnZXR0ZXh0CisrI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBfX2RjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrI2Vsc2UKKysjdW5kZWYgZ2V0dGV4dAorKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBTcGVjaWFsaXphdGlvbnMuCisrICB0ZW1wbGF0ZTw+CisrICAgIHN0cmluZworKyAgICBtZXNzYWdlczxjaGFyPjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCBzdHJpbmcmIF9fZGZhdWx0KSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKSk7CisrICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfbWVzc2FnZXMpOworKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2Vsc2UKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2VuZGlmCisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgd3N0cmluZworKyAgICBtZXNzYWdlczx3Y2hhcl90Pjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCB3c3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKKysgICAgeworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKKysgICAgICBjaGFyKiBfX21zZyA9IGdldHRleHQoX01fY29udmVydF90b19jaGFyKF9fZGZhdWx0KSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbHNlCisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbmRpZgorKyAgICB9CisrI2VuZGlmCisrfQorZGlmZiAtdXJOIGdjYy00LjAuMC0xMDAvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBnY2MtNC4wLjAvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorLS0tIGdjYy00LjAuMC0xMDAvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAkxOTY5LTEyLTMxIDE4OjAwOjAwLjAwMDAwMDAwMCAtMDYwMAorKysrIGdjYy00LjAuMC9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCTIwMDUtMDQtMjggMDE6MTM6MTUuMDAwMDAwMDAwIC0wNTAwCitAQCAtMCwwICsxLDExOCBAQAorKy8vIHN0ZDo6bWVzc2FnZXMgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjcuMS4yICBtZXNzYWdlcyBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHByb3RvdHlwZXMgZm9yICp0ZXh0ZG9tYWluIGZ1bmNzCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrZXh0ZXJuICJDIiBjaGFyICpfX3RleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSk7CisrZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCQkJCSAgY29uc3QgY2hhciAqZGlybmFtZSk7CisrI2Vsc2UKKysjdW5kZWYgX190ZXh0ZG9tYWluCisrI3VuZGVmIF9fYmluZHRleHRkb21haW4KKysjZGVmaW5lIF9fdGV4dGRvbWFpbihEKSAgICAgICAgICAgKCh2b2lkKTApCisrI2RlZmluZSBfX2JpbmR0ZXh0ZG9tYWluKEQsUCkgICAgICgodm9pZCkwKQorKyNlbmRpZgorKworKyAgLy8gTm9uLXZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKHNpemVfdCBfX3JlZnMpCisrICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2dldF9jX2xvY2FsZSgpKSwgCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKF9TX2dldF9jX25hbWUoKSkKKysgICAgIHsgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgCisrCQkJCXNpemVfdCBfX3JlZnMpIAorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpKSwKKysgICAgIF9NX25hbWVfbWVzc2FnZXMoX19zKQorKyAgICAgeworKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKysgICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysgICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZyAKKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywgCisrCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CisrICAgIHsgCisrICAgICAgX19iaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworKyAgICAgIHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOyAKKysgICAgfQorKworKyAgLy8gVmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojp+bWVzc2FnZXMoKQorKyAgICB7IAorKyAgICAgIGlmIChfTV9uYW1lX21lc3NhZ2VzICE9IF9TX2dldF9jX25hbWUoKSkKKysJZGVsZXRlIFtdIF9NX25hbWVfbWVzc2FnZXM7CisrICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7IAorKyAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cgCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIAorKwkJCSAgICAgIGNvbnN0IGxvY2FsZSYpIGNvbnN0CisrICAgIHsgCisrICAgICAgLy8gTm8gZXJyb3IgY2hlY2tpbmcgaXMgZG9uZSwgYXNzdW1lIHRoZSBjYXRhbG9nIGV4aXN0cyBhbmQgY2FuCisrICAgICAgLy8gYmUgdXNlZC4KKysgICAgICBfX3RleHRkb21haW4oX19zLmNfc3RyKCkpOworKyAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHZvaWQgICAgCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2Nsb3NlKGNhdGFsb2cpIGNvbnN0IAorKyAgICB7IH0KKysKKysgICAvLyBtZXNzYWdlc19ieW5hbWUKKysgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlc19ieW5hbWU8X0NoYXJUPjo6bWVzc2FnZXNfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKysgICAgIDogbWVzc2FnZXM8X0NoYXJUPihfX3JlZnMpIAorKyAgICAgeyAKKysgICAgICAgaWYgKHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgIT0gbG9jYWxlOjpmYWNldDo6X1NfZ2V0X2NfbmFtZSgpKQorKwkgZGVsZXRlIFtdIHRoaXMtPl9NX25hbWVfbWVzc2FnZXM7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgdGhpcy0+X01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKworKyAgICAgICBpZiAoc3RkOjpzdHJjbXAoX19zLCAiQyIpICE9IDAgJiYgc3RkOjpzdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorKwkgeworKwkgICB0aGlzLT5fU19kZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysJICAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3MpOyAKKysJIH0KKysgICAgIH0KK2RpZmYgLXVyTiBnY2MtNC4wLjAtMTAwL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGdjYy00LjAuMC9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworLS0tIGdjYy00LjAuMC0xMDAvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MJMTk2OS0xMi0zMSAxODowMDowMC4wMDAwMDAwMDAgLTA2MDAKKysrKyBnY2MtNC4wLjAvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MJMjAwNS0wNC0yOCAwMToyMzowMi4wMDAwMDAwMDAgLTA1MDAKK0BAIC0wLDAgKzEsNjkyIEBACisrLy8gc3RkOjptb25leXB1bmN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi42LjMuMiAgbW9uZXlwdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBvcHRpbWl6ZSB0aGlzIGZvciB1Y2xpYmMKKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6CisrICAvLyBzcGFjZSBub25lIHN5bWJvbCBzaWduIHZhbHVlCisrICBtb25leV9iYXNlOjpwYXR0ZXJuCisrICBtb25leV9iYXNlOjpfU19jb25zdHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VkZXMsIGNoYXIgX19zcGFjZSwgY2hhciBfX3Bvc24pCisrICB7IAorKyAgICBwYXR0ZXJuIF9fcmV0OworKworKyAgICAvLyBUaGlzIGluc2FuZWx5IGNvbXBsaWNhdGVkIHJvdXRpbmUgYXR0ZW1wdHMgdG8gY29uc3RydWN0IGEgdmFsaWQKKysgICAgLy8gcGF0dGVybiBmb3IgdXNlIHdpdGggbW9ueWVwdW5jdC4gQSBjb3VwbGUgb2YgaW52YXJpYW50czoKKysKKysgICAgLy8gaWYgKF9fcHJlY2VkZXMpIHN5bWJvbCAtPiB2YWx1ZQorKyAgICAvLyBlbHNlIHZhbHVlIC0+IHN5bWJvbAorKyAgICAKKysgICAgLy8gaWYgKF9fc3BhY2UpIHNwYWNlCisrICAgIC8vIGVsc2Ugbm9uZQorKworKyAgICAvLyBub25lID09IG5ldmVyIGZpcnN0CisrICAgIC8vIHNwYWNlIG5ldmVyIGZpcnN0IG9yIGxhc3QKKysKKysgICAgLy8gQW55IGVsZWdhbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgYXJlIHdlbGNvbWUuCisrICAgIHN3aXRjaCAoX19wb3NuKQorKyAgICAgIHsKKysgICAgICBjYXNlIDA6CisrICAgICAgY2FzZSAxOgorKwkvLyAxIFRoZSBzaWduIHByZWNlZGVzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgorKwlfX3JldC5maWVsZFswXSA9IHNpZ247CisrCWlmIChfX3NwYWNlKQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbi4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbiBhbmQgZW5kcyB3aXRoIG5vbmUuCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOworKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSAyOgorKwkvLyAyIFRoZSBzaWduIGZvbGxvd3MgdGhlIHZhbHVlIGFuZCBzeW1ib2wuCisrCWlmIChfX3NwYWNlKQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gZWl0aGVyIGVuZHMgd2l0aCBzaWduLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCSAgICBfX3JldC5maWVsZFszXSA9IHNpZ247CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBlbmRzIHdpdGggc2lnbiB0aGVuIG5vbmUuCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOworKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSAzOgorKwkvLyAzIFRoZSBzaWduIGltbWVkaWF0ZWx5IHByZWNlZGVzIHRoZSBzeW1ib2wuCisrCWlmIChfX3ByZWNlZGVzKQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gc2lnbjsKKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOwkgICAgCisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsJCQorKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkJX19yZXQuZmllbGRbM10gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzaWduOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgNDoKKysJLy8gNCBUaGUgc2lnbiBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBzeW1ib2wuCisrCWlmIChfX3ByZWNlZGVzKQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkgICAgX19yZXQuZmllbGRbMV0gPSBzaWduOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gc2lnbjsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysJX19yZXQgPSBwYXR0ZXJuKCk7CisrICAgICAgfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICB0ZW1wbGF0ZTw+IAorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgCisrCQkJCQkJICAgICBjb25zdCBjaGFyKikKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8Y2hhciwgdHJ1ZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fREVDSU1BTF9QT0lOVCwgCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9USE9VU0FORFNfU0VQLCAKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBpZiAoIV9fbnBvc24pCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwgCisrCQkJCQkJCV9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgIC8vIF9JbnRsID09IHRydWUKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fbmxfbGFuZ2luZm9fbChfX0lOVF9DVVJSX1NZTUJPTCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX0ZSQUNfRElHSVRTLCAKKysJCQkJCQkgICAgICBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwgCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsIAorKwkJCQkJCQlfX25wb3NuKTsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+IAorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIAorKwkJCQkJCSAgICAgIGNvbnN0IGNoYXIqKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCBmYWxzZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fREVDSU1BTF9QT0lOVCwgCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9USE9VU0FORFNfU0VQLCAKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIGlmICghX19ucG9zbikKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLAorKwkJCQkJCQlfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAvLyBfSW50bCA9PSBmYWxzZQorKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fQ1VSUkVOQ1lfU1lNQk9MLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19GUkFDX0RJR0lUUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsIAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwgCisrCQkJCQkJCV9fbnBvc24pOworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46On5tb25leXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PiAKKysgICAgdm9pZAorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCQkJCQkJCWNvbnN0IGNoYXIqKQorKyNlbHNlCisrCQkJCQkJCWNvbnN0IGNoYXIqIF9fbmFtZSkKKysjZW5kaWYKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgdHJ1ZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCisrCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG1vbmV0YXJ5CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbHNlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKworKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7CisrCisrCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOworKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKKysJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgdHJ5CisrCSAgICB7CisrCSAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOworKwkgICAgICBzaXplX3QgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysJICAgICAgCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOworKwkgICAgICBpZiAoIV9fbnBvc24pCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7CisrCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorKwkJeyAKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX25zID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfbnMsICZfX2NuZWdzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX193Y3NfbnM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysJICAgICAgCisrCSAgICAgIC8vIF9JbnRsID09IHRydWUuCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgICAgfQorKwkgIGNhdGNoICguLi4pCisrCSAgICB7CisrCSAgICAgIGRlbGV0ZSBfTV9kYXRhOworKwkgICAgICBfTV9kYXRhID0gMDsKKysJICAgICAgZGVsZXRlIF9fd2NzX3BzOworKwkgICAgICBkZWxldGUgX193Y3NfbnM7CSAgICAgIAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJICAgIH0gCisrCSAgCisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9GUkFDX0RJR0lUUywgCisrCQkJCQkJICAgICAgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsIAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLCAKKysJCQkJCQkJX19ucG9zbik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgIHZvaWQKKysgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJCQkJCQkgICAgICAgY29uc3QgY2hhciopCisrI2Vsc2UKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19uYW1lKQorKyNlbmRpZgorKyAgeworKyAgICBpZiAoIV9NX2RhdGEpCisrICAgICAgX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgZmFsc2U+OworKworKyAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKyAgICAgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCisrCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG1vbmV0YXJ5CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbHNlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorKyAgICAgICAgICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCisrCSAgY29uc3QgY2hhciogX19jcG9zc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jbmVnc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jY3VyciA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKKysKKysJICB3Y2hhcl90KiBfX3djc19wcyA9IDA7CisrCSAgd2NoYXJfdCogX193Y3NfbnMgPSAwOworKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIHRyeQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOworKyAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuOworKyAgICAgICAgICAgICAgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisrICAgICAgICAgICAgICBpZiAoX19sZW4pCisrICAgICAgICAgICAgICAgIHsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCSAgICAgIAorKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NuZWdzaWduKTsKKysJICAgICAgaWYgKCFfX25wb3NuKQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiKCkiOworKwkgICAgICBlbHNlIGlmIChfX2xlbikKKysJCXsgCisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19ucyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX25zLCAmX19jbmVnc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fd2NzX25zOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgICAgICAvLyBfSW50bCA9PSB0cnVlLgorKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsKKysJICAgICAgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgd2NoYXJfdCogX193Y3MgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djcywgJl9fY2N1cnIsIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX193Y3M7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgICB9CisrICAgICAgICAgIGNhdGNoICguLi4pCisrCSAgICB7CisrCSAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICAgICAgICAgICAgX01fZGF0YSA9IDA7CisrCSAgICAgIGRlbGV0ZSBfX3djc19wczsKKysJICAgICAgZGVsZXRlIF9fd2NzX25zOwkgICAgICAKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAgICAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwkgICAgfQorKworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19GUkFDX0RJR0lUUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsIAorKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwgCisrCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbnBvc24pOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46On5tb25leXB1bmN0KCkKKysgICAgeworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUKKysgICAgICAgICAgJiYgd2NzY21wKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24sIEwiKCkiKSAhPSAwKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sOworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+IAorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZQorKyAgICAgICAgICAmJiB3Y3NjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgTCIoKSIpICE9IDApCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fY3Vycl9zeW1ib2w7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgIH0KKysjZW5kaWYKKyt9CitkaWZmIC11ck4gZ2NjLTQuMC4wLTEwMC9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGdjYy00LjAuMC9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCistLS0gZ2NjLTQuMC4wLTEwMC9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCTE5NjktMTItMzEgMTg6MDA6MDAuMDAwMDAwMDAwIC0wNjAwCisrKysgZ2NjLTQuMC4wL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MJMjAwNS0wNC0yOCAwMToyMDoyMC4wMDAwMDAwMDAgLTA1MDAKK0BAIC0wLDAgKzEsMTczIEBACisrLy8gc3RkOjpudW1wdW5jdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMy4xLjIgIG51bXB1bmN0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNkZWZpbmUgX0xJQkMKKysjaW5jbHVkZSA8bG9jYWxlPgorKyN1bmRlZiBfTElCQworKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorKyNlbmRpZgorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICB0ZW1wbGF0ZTw+IAorKyAgICB2b2lkCisrICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8Y2hhcj47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKysKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19udW1fYmFzZTo6X1Nfb2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19vdXRbX19pXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX291dFtfX2ldOworKworKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKERFQ0lNQUxfUE9JTlQsIAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woVEhPVVNBTkRTX1NFUCwgCisrCQkJCQkJCV9fY2xvYykpOworKworKwkgIC8vIENoZWNrIGZvciBOVUxMLCB3aGljaCBpbXBsaWVzIG5vIGdyb3VwaW5nLgorKwkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09ICdcMCcpCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKEdST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwl9CisrCisrICAgICAgLy8gTkI6IFRoZXJlIGlzIG5vIHdheSB0byBleHRhY3QgdGhpcyBpbmZvIGZyb20gcG9zaXggbG9jYWxlcy4KKysgICAgICAvLyBfTV90cnVlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChZRVNTVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWUgPSAidHJ1ZSI7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7CisrICAgICAgLy8gX01fZmFsc2VuYW1lID0gX19ubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZSA9ICJmYWxzZSI7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lX3NpemUgPSA1OworKyAgICB9CisrIAorKyAgdGVtcGxhdGU8PiAKKysgICAgbnVtcHVuY3Q8Y2hhcj46On5udW1wdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysgICAKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4gCisrICAgIHZvaWQKKysgICAgbnVtcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19udW1wdW5jdF9jYWNoZTx3Y2hhcl90PjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOworKworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbnVtX2Jhc2U6Ol9TX29lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfb3V0W19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90PihfX251bV9iYXNlOjpfU19hdG9tc19vdXRbX19pXSk7CisrCisrCSAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19udW1fYmFzZTo6X1NfaWVuZDsgKytfX2opCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oX19udW1fYmFzZTo6X1NfYXRvbXNfaW5bX19qXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgLy8gTkI6IEluIHRoZSBHTlUgbW9kZWwgd2NoYXJfdCBpcyBhbHdheXMgMzIgYml0IHdpZGUuCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfXworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVsc2UKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbmRpZgorKyNlbHNlCisrCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorKworKwkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09IEwnXDAnKQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChHUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJfQorKworKyAgICAgIC8vIE5COiBUaGVyZSBpcyBubyB3YXkgdG8gZXh0YWN0IHRoaXMgaW5mbyBmcm9tIHBvc2l4IGxvY2FsZXMuCisrICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woWUVTU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lID0gTCJ0cnVlIjsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZV9zaXplID0gNDsKKysgICAgICAvLyBfTV9mYWxzZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woTk9TVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lID0gTCJmYWxzZSI7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lX3NpemUgPSA1OworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+IAorKyAgICBudW1wdW5jdDx3Y2hhcl90Pjo6fm51bXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKyAjZW5kaWYKKyt9CitkaWZmIC11ck4gZ2NjLTQuMC4wLTEwMC9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGdjYy00LjAuMC9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCistLS0gZ2NjLTQuMC4wLTEwMC9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCTE5NjktMTItMzEgMTg6MDA6MDAuMDAwMDAwMDAwIC0wNjAwCisrKysgZ2NjLTQuMC4wL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MJMjAwNS0wNC0yOCAwMToxMzoxNS4wMDAwMDAwMDAgLTA1MDAKK0BAIC0wLDAgKzEsNDA2IEBACisrLy8gc3RkOjp0aW1lX2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQgdmlydHVhbCBmdW5jdGlvbnMKKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PGNoYXI+OjoKKysgICAgX01fcHV0KGNoYXIqIF9fcywgc2l6ZV90IF9fbWF4bGVuLCBjb25zdCBjaGFyKiBfX2Zvcm1hdCwgCisrCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3N0cmZ0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisrCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyNlbHNlCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdHJmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKyAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorKyAgICAgIGlmIChfX2xlbiA9PSAwKQorKwlfX3NbMF0gPSAnXDAnOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+IAorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX3RpbWVwdW5jdF9jYWNoZTxjaGFyPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19nZXRfY19sb2NhbGUoKTsKKysKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9ICIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9ICIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fdGltZV9lcmFfZm9ybWF0ID0gIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gIiI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9hbSA9ICJBTSI7CisrCSAgX01fZGF0YS0+X01fcG0gPSAiUE0iOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9ICIiOworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX01fZGF0YS0+X01fZGF5MSA9ICJTdW5kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSAiTW9uZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gIlR1ZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSAiV2VkbmVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gIlRodXJzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gIkZyaWRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NyA9ICJTYXR1cmRheSI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9ICJTdW4iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gIk1vbiI7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSAiVHVlIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9ICJXZWQiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gIlRodSI7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSAiRnJpIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9ICJTYXQiOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9ICJKYW51YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gIkZlYnJ1YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gIk1hcmNoIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gIkFwcmlsIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gIk1heSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9ICJKdW5lIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gIkp1bHkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSAiQXVndXN0IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gIlNlcHRlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9ICJPY3RvYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gIk5vdmVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gIkRlY2VtYmVyIjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSAiSmFuIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9ICJGZWIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gIk1hciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSAiQXByIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9ICJNYXkiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gIkp1biI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSAiSnVsIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9ICJBdWciOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gIlNlcCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSAiT2N0IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9ICJOb3YiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gIkRlYyI7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOyAKKysKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChEX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKFRfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChEX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX1RfRk1ULAorKwkJCQkJCQkgICAgIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW0gPSBfX25sX2xhbmdpbmZvX2woQU1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3BtID0gX19ubF9sYW5naW5mb19sKFBNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woVF9GTVRfQU1QTSwgX19jbG9jKTsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBfX25sX2xhbmdpbmZvX2woREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gX19ubF9sYW5naW5mb19sKERBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBfX25sX2xhbmdpbmZvX2woREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gX19ubF9sYW5naW5mb19sKERBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBfX25sX2xhbmdpbmZvX2woREFZXzcsIF9fY2xvYyk7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gX19ubF9sYW5naW5mb19sKEFCREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV83LCBfX2Nsb2MpOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IF9fbmxfbGFuZ2luZm9fbChNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gX19ubF9sYW5naW5mb19sKE1PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX25sX2xhbmdpbmZvX2woTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IF9fbmxfbGFuZ2luZm9fbChNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gX19ubF9sYW5naW5mb19sKE1PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBfX25sX2xhbmdpbmZvX2woTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IF9fbmxfbGFuZ2luZm9fbChNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gX19ubF9sYW5naW5mb19sKE1PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBfX25sX2xhbmdpbmZvX2woTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTIsIF9fY2xvYyk7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBfX25sX2xhbmdpbmZvX2woQUJNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEyLCBfX2Nsb2MpOworKwl9CisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6CisrICAgIF9NX3B1dCh3Y2hhcl90KiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3Qgd2NoYXJfdCogX19mb3JtYXQsIAorKwkgICBjb25zdCB0bSogX190bSkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKysJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrI2Vsc2UKKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHdjc2Z0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisrICAgICAgaWYgKF9fbGVuID09IDApCisrCV9fc1swXSA9IEwnXDAnOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+IAorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX3RpbWVwdW5jdF9jYWNoZTx3Y2hhcl90PjsKKysKKysjd2FybmluZyB3aWRlIHRpbWUgc3R1ZmYKKysvLyAgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19nZXRfY19sb2NhbGUoKTsKKysKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IEwiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9IEwiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gTCIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fdGltZV9lcmFfZm9ybWF0ID0gTCIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9hbSA9IEwiQU0iOworKwkgIF9NX2RhdGEtPl9NX3BtID0gTCJQTSI7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gTCIiOworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX01fZGF0YS0+X01fZGF5MSA9IEwiU3VuZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gTCJNb25kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBMIlR1ZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBMIldlZG5lc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IEwiVGh1cnNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBMIkZyaWRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NyA9IEwiU2F0dXJkYXkiOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBMIlN1biI7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSBMIk1vbiI7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBMIlR1ZSI7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBMIldlZCI7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSBMIlRodSI7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBMIkZyaSI7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBMIlNhdCI7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gTCJKYW51YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gTCJGZWJydWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IEwiTWFyY2giOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBMIkFwcmlsIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gTCJNYXkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBMIkp1bmUiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBMIkp1bHkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSBMIkF1Z3VzdCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9IEwiU2VwdGVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gTCJPY3RvYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gTCJOb3ZlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IEwiRGVjZW1iZXIiOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IEwiSmFuIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IEwiRmViIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9IEwiTWFyIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IEwiQXByIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9IEwiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9IEwiSnVuIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IEwiSnVsIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9IEwiQXVnIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9IEwiU2VwIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IEwiT2N0IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IEwiTm92IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IEwiRGVjIjsKKysJfQorKyNpZiAwCisrICAgICAgZWxzZQorKwl7CisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsgCisrCisrCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgKl9fdzsgfSBfX3U7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9EX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQU1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XUE1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3BtID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XVF9GTVRfQU1QTSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBfX3UuX193OworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBfX3UuX193OworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBfX3UuX193OworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IF9fdS5fX3c7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBfX3UuX193OworKwl9CisrI2VuZGlmIC8vIDAKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLXVyTiBnY2MtNC4wLjAtMTAwL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCBnY2MtNC4wLjAvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCistLS0gZ2NjLTQuMC4wLTEwMC9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgJMTk2OS0xMi0zMSAxODowMDowMC4wMDAwMDAwMDAgLTA2MDAKKysrKyBnY2MtNC4wLjAvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCTIwMDQtMDUtMjIgMTg6NDY6MzEuMDAwMDAwMDAwIC0wNTAwCitAQCAtMCwwICsxLDY4IEBACisrLy8gc3RkOjp0aW1lX2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQgZnVuY3Rpb25zCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcykgCisrICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLCAKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jYWNoZV90eXBlKiBfX2NhY2hlLCBzaXplX3QgX19yZWZzKSAKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKF9fY2FjaGUpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksIAorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChfU19nZXRfY19uYW1lKCkpCisrICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorKwkJCQkgICAgIHNpemVfdCBfX3JlZnMpIAorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwgCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9fcykKKysgICAgeyAKKysgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKysgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICBfTV9uYW1lX3RpbWVwdW5jdCA9IF9fdG1wOworKyAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7IAorKyAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46On5fX3RpbWVwdW5jdCgpCisrICAgIHsgCisrICAgICAgaWYgKF9NX25hbWVfdGltZXB1bmN0ICE9IF9TX2dldF9jX25hbWUoKSkKKysJZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOyAKKysgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7IAorKyAgICB9CitkaWZmIC11ck4gZ2NjLTQuMC4wLTEwMC9saWJzdGRjKystdjMvY29uZmlnL29zL3VjbGliYy9jdHlwZV9iYXNlLmggZ2NjLTQuMC4wL2xpYnN0ZGMrKy12My9jb25maWcvb3MvdWNsaWJjL2N0eXBlX2Jhc2UuaAorLS0tIGdjYy00LjAuMC0xMDAvbGlic3RkYysrLXYzL2NvbmZpZy9vcy91Y2xpYmMvY3R5cGVfYmFzZS5oCTE5NjktMTItMzEgMTg6MDA6MDAuMDAwMDAwMDAwIC0wNjAwCisrKysgZ2NjLTQuMC4wL2xpYnN0ZGMrKy12My9jb25maWcvb3MvdWNsaWJjL2N0eXBlX2Jhc2UuaAkyMDA1LTA0LTI4IDAxOjEwOjI3LjAwMDAwMDAwMCAtMDUwMAorQEAgLTAsMCArMSw2NCBAQAorKy8vIExvY2FsZSBzdXBwb3J0IC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAyLCAyMDAzLCAyMDA0CisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4xICBMb2NhbGVzCisrLy8KKysgIAorKy8qKiBAZmlsZSBjdHlwZV9iYXNlLmgKKysgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorKyAqICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKysgKi8KKysKKysvLyBJbmZvcm1hdGlvbiBhcyBnbGVhbmVkIGZyb20gL3Vzci9pbmNsdWRlL2N0eXBlLmgKKysgIAorKyAgLy8vIEBicmllZiAgQmFzZSBjbGFzcyBmb3IgY3R5cGUuCisrICBzdHJ1Y3QgY3R5cGVfYmFzZQorKyAgeworKyAgICAvLyBOb3RlOiBJbiB1Q2xpYmMsIHRoZSBmb2xsb3dpbmcgdHdvIHR5cGVzIGRlcGVuZCBvbiBjb25maWd1cmF0aW9uLgorKyAKKysgICAgLy8gTm9uLXN0YW5kYXJkIHR5cGVkZWZzLgorKyAgICB0eXBlZGVmIGNvbnN0IF9fY3R5cGVfdG91cGxvd190KiBfX3RvX3R5cGU7CisrCisrICAgIC8vIE5COiBPZmZzZXRzIGludG8gY3R5cGU8Y2hhcj46Ol9NX3RhYmxlIGZvcmNlIGEgcGFydGljdWxhciBzaXplCisrICAgIC8vIG9uIHRoZSBtYXNrIHR5cGUuIEJlY2F1c2Ugb2YgdGhpcywgd2UgZG9uJ3QgdXNlIGFuIGVudW0uCisrICAgIHR5cGVkZWYgX19jdHlwZV9tYXNrX3QJbWFzazsgICAKKysgICAgc3RhdGljIGNvbnN0IG1hc2sgdXBwZXIgICAgCT0gX0lTdXBwZXI7CisrICAgIHN0YXRpYyBjb25zdCBtYXNrIGxvd2VyIAk9IF9JU2xvd2VyOworKyAgICBzdGF0aWMgY29uc3QgbWFzayBhbHBoYSAJPSBfSVNhbHBoYTsKKysgICAgc3RhdGljIGNvbnN0IG1hc2sgZGlnaXQgCT0gX0lTZGlnaXQ7CisrICAgIHN0YXRpYyBjb25zdCBtYXNrIHhkaWdpdCAJPSBfSVN4ZGlnaXQ7CisrICAgIHN0YXRpYyBjb25zdCBtYXNrIHNwYWNlIAk9IF9JU3NwYWNlOworKyAgICBzdGF0aWMgY29uc3QgbWFzayBwcmludCAJPSBfSVNwcmludDsKKysgICAgc3RhdGljIGNvbnN0IG1hc2sgZ3JhcGggCT0gX0lTYWxwaGEgfCBfSVNkaWdpdCB8IF9JU3B1bmN0OworKyAgICBzdGF0aWMgY29uc3QgbWFzayBjbnRybCAJPSBfSVNjbnRybDsKKysgICAgc3RhdGljIGNvbnN0IG1hc2sgcHVuY3QgCT0gX0lTcHVuY3Q7CisrICAgIHN0YXRpYyBjb25zdCBtYXNrIGFsbnVtIAk9IF9JU2FscGhhIHwgX0lTZGlnaXQ7CisrICB9OworZGlmZiAtdXJOIGdjYy00LjAuMC0xMDAvbGlic3RkYysrLXYzL2NvbmZpZy9vcy91Y2xpYmMvY3R5cGVfaW5saW5lLmggZ2NjLTQuMC4wL2xpYnN0ZGMrKy12My9jb25maWcvb3MvdWNsaWJjL2N0eXBlX2lubGluZS5oCistLS0gZ2NjLTQuMC4wLTEwMC9saWJzdGRjKystdjMvY29uZmlnL29zL3VjbGliYy9jdHlwZV9pbmxpbmUuaAkxOTY5LTEyLTMxIDE4OjAwOjAwLjAwMDAwMDAwMCAtMDYwMAorKysrIGdjYy00LjAuMC9saWJzdGRjKystdjMvY29uZmlnL29zL3VjbGliYy9jdHlwZV9pbmxpbmUuaAkyMDAyLTA2LTI0IDAwOjQ5OjE5LjAwMDAwMDAwMCAtMDUwMAorQEAgLTAsMCArMSw2OSBAQAorKy8vIExvY2FsZSBzdXBwb3J0IC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMSAgTG9jYWxlcworKy8vCisrICAKKysvLyBjdHlwZSBiaXRzIHRvIGJlIGlubGluZWQgZ28gaGVyZS4gTm9uLWlubGluYWJsZSAoaWUgdmlydHVhbCBkb18qKQorKy8vIGZ1bmN0aW9ucyBnbyBpbiBjdHlwZS5jYworKyAgCisrICBib29sCisrICBjdHlwZTxjaGFyPjo6CisrICBpcyhtYXNrIF9fbSwgY2hhciBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpXSAmIF9fbTsgfQorKworKyAgY29uc3QgY2hhcioKKysgIGN0eXBlPGNoYXI+OjoKKysgIGlzKGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gsIG1hc2sqIF9fdmVjKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gpCisrICAgICAgKl9fdmVjKysgPSBfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3crKyldOworKyAgICByZXR1cm4gX19oaWdoOworKyAgfQorKworKyAgY29uc3QgY2hhcioKKysgIGN0eXBlPGNoYXI+OjoKKysgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCAKKysJICAgJiYgIShfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3cpXSAmIF9fbSkpCisrICAgICAgKytfX2xvdzsKKysgICAgcmV0dXJuIF9fbG93OworKyAgfQorKworKyAgY29uc3QgY2hhcioKKysgIGN0eXBlPGNoYXI+OjoKKysgIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2ggCisrCSAgICYmIChfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3cpXSAmIF9fbSkgIT0gMCkKKysgICAgICArK19fbG93OworKyAgICByZXR1cm4gX19sb3c7CisrICB9CitkaWZmIC11ck4gZ2NjLTQuMC4wLTEwMC9saWJzdGRjKystdjMvY29uZmlnL29zL3VjbGliYy9jdHlwZV9ub25pbmxpbmUuaCBnY2MtNC4wLjAvbGlic3RkYysrLXYzL2NvbmZpZy9vcy91Y2xpYmMvY3R5cGVfbm9uaW5saW5lLmgKKy0tLSBnY2MtNC4wLjAtMTAwL2xpYnN0ZGMrKy12My9jb25maWcvb3MvdWNsaWJjL2N0eXBlX25vbmlubGluZS5oCTE5NjktMTItMzEgMTg6MDA6MDAuMDAwMDAwMDAwIC0wNjAwCisrKysgZ2NjLTQuMC4wL2xpYnN0ZGMrKy12My9jb25maWcvb3MvdWNsaWJjL2N0eXBlX25vbmlubGluZS5oCTIwMDUtMDQtMjggMDE6MTA6MjcuMDAwMDAwMDAwIC0wNTAwCitAQCAtMCwwICsxLDkyIEBACisrLy8gTG9jYWxlIHN1cHBvcnQgLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDQKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjEgIExvY2FsZXMKKysvLworKyAgCisrLy8gSW5mb3JtYXRpb24gYXMgZ2xlYW5lZCBmcm9tIC91c3IvaW5jbHVkZS9jdHlwZS5oCisrCisrICBjb25zdCBjdHlwZV9iYXNlOjptYXNrKgorKyAgY3R5cGU8Y2hhcj46OmNsYXNzaWNfdGFibGUoKSB0aHJvdygpCisrICB7IHJldHVybiBfX0NfY3R5cGVfYjsgfQorKworKyAgY3R5cGU8Y2hhcj46OmN0eXBlKF9fY19sb2NhbGUsIGNvbnN0IG1hc2sqIF9fdGFibGUsIGJvb2wgX19kZWwsIAorKwkJICAgICBzaXplX3QgX19yZWZzKSAKKysgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfY3R5cGUoX1NfZ2V0X2NfbG9jYWxlKCkpLCAKKysgIF9NX2RlbChfX3RhYmxlICE9IDAgJiYgX19kZWwpLCBfTV93aWRlbl9vaygwKSwgX01fbmFycm93X29rKDApCisrICB7CisrICAgIF9NX3RvdXBwZXIgPSBfX0NfY3R5cGVfdG91cHBlcjsKKysgICAgX01fdG9sb3dlciA9IF9fQ19jdHlwZV90b2xvd2VyOworKyAgICBfTV90YWJsZSA9IF9fdGFibGUgPyBfX3RhYmxlIDogX19DX2N0eXBlX2I7CisrICAgIG1lbXNldChfTV93aWRlbiwgMCwgc2l6ZW9mKF9NX3dpZGVuKSk7CisrICAgIG1lbXNldChfTV9uYXJyb3csIDAsIHNpemVvZihfTV9uYXJyb3cpKTsKKysgIH0KKysKKysgIGN0eXBlPGNoYXI+OjpjdHlwZShjb25zdCBtYXNrKiBfX3RhYmxlLCBib29sIF9fZGVsLCBzaXplX3QgX19yZWZzKQorKyAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9jdHlwZShfU19nZXRfY19sb2NhbGUoKSksIAorKyAgX01fZGVsKF9fdGFibGUgIT0gMCAmJiBfX2RlbCksIF9NX3dpZGVuX29rKDApLCBfTV9uYXJyb3dfb2soMCkKKysgIHsKKysgICAgX01fdG91cHBlciA9IF9fQ19jdHlwZV90b3VwcGVyOworKyAgICBfTV90b2xvd2VyID0gX19DX2N0eXBlX3RvbG93ZXI7CisrICAgIF9NX3RhYmxlID0gX190YWJsZSA/IF9fdGFibGUgOiBfX0NfY3R5cGVfYjsKKysgICAgbWVtc2V0KF9NX3dpZGVuLCAwLCBzaXplb2YoX01fd2lkZW4pKTsKKysgICAgbWVtc2V0KF9NX25hcnJvdywgMCwgc2l6ZW9mKF9NX25hcnJvdykpOworKyAgfQorKworKyAgY2hhcgorKyAgY3R5cGU8Y2hhcj46OmRvX3RvdXBwZXIoY2hhciBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfTV90b3VwcGVyW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldOyB9CisrCisrICBjb25zdCBjaGFyKgorKyAgY3R5cGU8Y2hhcj46OmRvX3RvdXBwZXIoY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG93IDwgX19oaWdoKQorKyAgICAgIHsKKysJKl9fbG93ID0gX01fdG91cHBlcltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3cpXTsKKysJKytfX2xvdzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpZ2g7CisrICB9CisrCisrICBjaGFyCisrICBjdHlwZTxjaGFyPjo6ZG9fdG9sb3dlcihjaGFyIF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9NX3RvbG93ZXJbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKV07IH0KKysKKysgIGNvbnN0IGNoYXIqIAorKyAgY3R5cGU8Y2hhcj46OmRvX3RvbG93ZXIoY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG93IDwgX19oaWdoKQorKyAgICAgIHsKKysJKl9fbG93ID0gX01fdG9sb3dlcltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3cpXTsKKysJKytfX2xvdzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpZ2g7CisrICB9CitkaWZmIC11ck4gZ2NjLTQuMC4wLTEwMC9saWJzdGRjKystdjMvY29uZmlnL29zL3VjbGliYy9vc19kZWZpbmVzLmggZ2NjLTQuMC4wL2xpYnN0ZGMrKy12My9jb25maWcvb3MvdWNsaWJjL29zX2RlZmluZXMuaAorLS0tIGdjYy00LjAuMC0xMDAvbGlic3RkYysrLXYzL2NvbmZpZy9vcy91Y2xpYmMvb3NfZGVmaW5lcy5oCTE5NjktMTItMzEgMTg6MDA6MDAuMDAwMDAwMDAwIC0wNjAwCisrKysgZ2NjLTQuMC4wL2xpYnN0ZGMrKy12My9jb25maWcvb3MvdWNsaWJjL29zX2RlZmluZXMuaAkyMDA1LTA0LTI4IDAxOjEwOjI3LjAwMDAwMDAwMCAtMDUwMAorQEAgLTAsMCArMSw0NCBAQAorKy8vIFNwZWNpZmljIGRlZmluaXRpb25zIGZvciBHTlUvTGludXggIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKyNpZm5kZWYgX0dMSUJDWFhfT1NfREVGSU5FUworKyNkZWZpbmUgX0dMSUJDWFhfT1NfREVGSU5FUyAxCisrCisrLy8gU3lzdGVtLXNwZWNpZmljICNkZWZpbmUsIHR5cGVkZWZzLCBjb3JyZWN0aW9ucywgZXRjLCBnbyBoZXJlLiAgVGhpcworKy8vIGZpbGUgd2lsbCBjb21lIGJlZm9yZSBhbGwgb3RoZXJzLgorKworKy8vIFRoaXMga2VlcHMgaXNhbnVtLCBldCBhbCBmcm9tIGJlaW5nIHByb3BhZ2F0ZWQgYXMgbWFjcm9zLgorKyNkZWZpbmUgX19OT19DVFlQRSAxCisrCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrCisrLy8gV2UgbXVzdCBub3Qgc2VlIHRoZSBvcHRpbWl6ZWQgc3RyaW5nIGZ1bmN0aW9ucyBHTlUgbGliYyBkZWZpbmVzLgorKyNkZWZpbmUgX19OT19TVFJJTkdfSU5MSU5FUworKworKyNlbmRpZgorZGlmZiAtdXJOIGdjYy00LjAuMC0xMDAvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBnY2MtNC4wLjAvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorLS0tIGdjYy00LjAuMC0xMDAvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQkyMDA1LTA0LTMwIDEzOjA2OjUzLjY4MzA1NTIzMiAtMDUwMAorKysrIGdjYy00LjAuMC9saWJzdGRjKystdjMvY29uZmlndXJlCTIwMDUtMDQtMzAgMTI6MjQ6MjQuMDAwMDAwMDAwIC0wNTAwCitAQCAtMzk5OCw2ICszOTk4LDExIEBACisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKKytsaW51eC11Y2xpYmMqKQorKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKysgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC9saWIvbGlidUNsaWJjLSouc29gCisrICA7OworKworIG5ldGJzZCogfCBrbmV0YnNkKi1nbnUpCisgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXC5dK1wuc29cLlswLTldK1wuWzAtOV0rJCcKK0BAIC01NjcyLDcgKzU2NzcsNyBAQAorICAgZW5hYmxldmFsPSIkZW5hYmxlX2Nsb2NhbGUiCisgCisgICAgICAgY2FzZSAiJGVuYWJsZXZhbCIgaW4KKy0gICAgICAgZ2VuZXJpY3xnbnV8aWVlZV8xMDAzLjEtMjAwMXx5ZXN8bm98YXV0bykgOzsKKysgICAgICAgZ2VuZXJpY3xnbnV8aWVlZV8xMDAzLjEtMjAwMXx1Y2xpYmN8eWVzfG5vfGF1dG8pIDs7CisgICAgICAgICopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFVua25vd24gYXJndW1lbnQgdG8gZW5hYmxlL2Rpc2FibGUgY2xvY2FsZSIgPiY1CisgZWNobyAiJGFzX21lOiBlcnJvcjogVW5rbm93biBhcmd1bWVudCB0byBlbmFibGUvZGlzYWJsZSBjbG9jYWxlIiA+JjI7fQorICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworQEAgLTU2OTcsNiArNTcwMiw5IEBACisgICAjIERlZmF1bHQgdG8gImdlbmVyaWMiLgorICAgaWYgdGVzdCAkZW5hYmxlX2Nsb2NhbGVfZmxhZyA9IGF1dG87IHRoZW4KKyAgICAgY2FzZSAke3RhcmdldF9vc30gaW4KKysgICAgICBsaW51eC11Y2xpYmMqKQorKwllbmFibGVfY2xvY2FsZV9mbGFnPXVjbGliYworKwk7OworICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQorICAgICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogY29uZmRlZnMuaC4gICovCitAQCAtNTkyNyw2ICs1OTM1LDc2IEBACisgICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5jYworICAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvYysrbG9jYWxlX2ludGVybmFsLmgKKyAgICAgICA7OworKyAgICB1Y2xpYmMpCisrICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdWNsaWJjIiA+JjUKKytlY2hvICIke0VDSE9fVH11Y2xpYmMiID4mNgorKworKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKKysgICAgICAjIGxhbmd1YWdlcy4KKysgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAorKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKKysKKysgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgorKyAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXNnZm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgbXNnZm10OyBhY193b3JkPSQyCisrZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCtzZXR9IiA9IHNldDsgdGhlbgorKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9IiRjaGVja19tc2dmbXQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgICBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0ieWVzIgorKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorK2RvbmUKKysKKysgIHRlc3QgLXogIiRhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCIgJiYgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9Im5vIgorK2ZpCisrZmkKKytjaGVja19tc2dmbXQ9JGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10CisraWYgdGVzdCAtbiAiJGNoZWNrX21zZ2ZtdCI7IHRoZW4KKysgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRjaGVja19tc2dmbXQiID4mNQorK2VjaG8gIiR7RUNIT19UfSRjaGVja19tc2dmbXQiID4mNgorK2Vsc2UKKysgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2CisrZmkKKysKKysgICAgICBpZiB0ZXN0IHgiJGNoZWNrX21zZ2ZtdCIgPSB4InllcyIgJiYgdGVzdCB4IiRlbmFibGVfbmxzIiA9IHgieWVzIjsgdGhlbgorKyAgICAgICAgVVNFX05MUz15ZXMKKysgICAgICBmaQorKyAgICAgICMgRXhwb3J0IHRoZSBidWlsZCBvYmplY3RzLgorKyAgICAgIGZvciBsaW5nIGluICRBTExfTElOR1VBUzsgZG8gXAorKyAgICAgICAgZ2xpYmN4eF9NT0ZJTEVTPSIkZ2xpYmN4eF9NT0ZJTEVTICRsaW5nLm1vIjsgXAorKyAgICAgICAgZ2xpYmN4eF9QT0ZJTEVTPSIkZ2xpYmN4eF9QT0ZJTEVTICRsaW5nLnBvIjsgXAorKyAgICAgIGRvbmUKKysKKysKKysKKysgICAgICBDTE9DQUxFX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysgICAgICBDQ09ERUNWVF9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKysgICAgICBDQ09MTEFURV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysgICAgICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKyAgICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysgICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrICAgICAgOzsKKyAgIGVzYWMKKyAKKyAgICMgVGhpcyBpcyB3aGVyZSB0aGUgdGVzdHN1aXRlIGxvb2tzIGZvciBsb2NhbGUgY2F0YWxvZ3MsIHVzaW5nIHRoZQorZGlmZiAtdXJOIGdjYy00LjAuMC0xMDAvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5ob3N0IGdjYy00LjAuMC9saWJzdGRjKystdjMvY29uZmlndXJlLmhvc3QKKy0tLSBnY2MtNC4wLjAtMTAwL2xpYnN0ZGMrKy12My9jb25maWd1cmUuaG9zdAkyMDA1LTA0LTMwIDEzOjA2OjUzLjY4ODA1NDQ3MiAtMDUwMAorKysrIGdjYy00LjAuMC9saWJzdGRjKystdjMvY29uZmlndXJlLmhvc3QJMjAwNS0wNC0yOCAyMDoyMDozMi4wMDAwMDAwMDAgLTA1MDAKK0BAIC0yNDksNiArMjQ5LDEyIEBACisgICAgIDs7CisgZXNhYworIAorKyMgT3ZlcnJpZGUgZm9yIHVDbGliYyBzaW5jZSBsaW51eC11Y2xpYmMgZ2V0cyBtaXNoYW5kbGVkIGFib3ZlLgorK2Nhc2UgIiR7aG9zdF9vc30iIGluCisrICAqLXVjbGliYyopCisrICAgIG9zX2luY2x1ZGVfZGlyPSJvcy91Y2xpYmMiCisrICAgIDs7CisrZXNhYworIAorICMgU2V0IGFueSBPUy1kZXBlbmRlbnQgYW5kIENQVS1kZXBlbmRlbnQgYml0cy4KKyAjIFRISVMgVEFCTEUgSVMgU09SVEVELiAgS0VFUCBJVCBUSEFUIFdBWS4KK2RpZmYgLXVyTiBnY2MtNC4wLjAtMTAwL2xpYnN0ZGMrKy12My9jcm9zc2NvbmZpZy5tNCBnY2MtNC4wLjAvbGlic3RkYysrLXYzL2Nyb3NzY29uZmlnLm00CistLS0gZ2NjLTQuMC4wLTEwMC9saWJzdGRjKystdjMvY3Jvc3Njb25maWcubTQJMjAwNS0wNC0zMCAxMzowNjo1My42ODkwNTQzMjAgLTA1MDAKKysrKyBnY2MtNC4wLjAvbGlic3RkYysrLXYzL2Nyb3NzY29uZmlnLm00CTIwMDUtMDQtMjggMjA6Mjc6MTUuMDAwMDAwMDAwIC0wNTAwCitAQCAtMTQyLDYgKzE0Miw5OCBAQAorIAk7OworICAgICBlc2FjCisgICAgIDs7CisrICAqLXVjbGliYyopCisrIyBUZW1wb3JhcnkgaGFjayB1bnRpbCB3ZSBpbXBsZW1lbnQgdGhlIGZsb2F0IHZlcnNpb25zIG9mIHRoZSBsaWJtIGZ1bmNzCisrICAgIEFDX0NIRUNLX0hFQURFUlMoW25hbi5oIGllZWVmcC5oIGVuZGlhbi5oIHN5cy9pc2FfZGVmcy5oIFwKKysgICAgICBtYWNoaW5lL2VuZGlhbi5oIG1hY2hpbmUvcGFyYW0uaCBzeXMvbWFjaGluZS5oIHN5cy90eXBlcy5oIFwKKysgICAgICBmcC5oIGZsb2F0LmggZW5kaWFuLmggaW50dHlwZXMuaCBsb2NhbGUuaCBmbG9hdC5oIHN0ZGludC5oXSkKKysgICAgU0VDVElPTl9GTEFHUz0nLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMnCisrICAgIEFDX1NVQlNUKFNFQ1RJT05fRkxBR1MpCisrICAgIEdMSUJDWFhfQ0hFQ0tfTElOS0VSX0ZFQVRVUkVTCisrICAgIEdMSUJDWFhfQ0hFQ0tfQ09NUExFWF9NQVRIX1NVUFBPUlQKKysgICAgR0xJQkNYWF9DSEVDS19XQ0hBUl9UX1NVUFBPUlQKKysKKysgICAgIyBGb3IgTEZTLgorKyAgICBBQ19ERUZJTkUoSEFWRV9JTlQ2NF9UKQorKyAgICBjYXNlICIkdGFyZ2V0IiBpbgorKyAgICAgICotdWNsaW51eCopCisrICAgICAgICAjIERvbid0IGVuYWJsZSBMRlMgd2l0aCB1Q2xpbnV4CisrICAgICAgICA7OworKyAgICAgICopCisrICAgICAgICBBQ19ERUZJTkUoX0dMSUJDWFhfVVNFX0xGUykKKysgICAgZXNhYworKworKyAgICAjIEZvciBzaG93bWFueWNfaGVscGVyKCkuCisrICAgIEFDX0NIRUNLX0hFQURFUlMoc3lzL2lvY3RsLmggc3lzL2ZpbGlvLmgpCisrICAgIEdMSUJDWFhfQ0hFQ0tfUE9MTAorKyAgICBHTElCQ1hYX0NIRUNLX1NfSVNSRUdfT1JfU19JRlJFRworKworKyAgICAjIEZvciB4c3B1dG5fMigpLgorKyAgICBBQ19DSEVDS19IRUFERVJTKHN5cy91aW8uaCkKKysgICAgR0xJQkNYWF9DSEVDS19XUklURVYKKysKKysjICAgICBBQ19ERUZJTkUoSEFWRV9BQ09TRikKKysjICAgICBBQ19ERUZJTkUoSEFWRV9BU0lORikKKysjICAgICBBQ19ERUZJTkUoSEFWRV9BVEFORikKKysjICAgICBBQ19ERUZJTkUoSEFWRV9BVEFOMkYpCisrICAgIEFDX0RFRklORShIQVZFX0NFSUxGKQorKyAgICBBQ19ERUZJTkUoSEFWRV9DT1BZU0lHTikKKysjICAgICBBQ19ERUZJTkUoSEFWRV9DT1BZU0lHTkYpCisrIyAgICAgQUNfREVGSU5FKEhBVkVfQ09TRikKKysjICAgICBBQ19ERUZJTkUoSEFWRV9DT1NIRikKKysjICAgICBBQ19ERUZJTkUoSEFWRV9FWFBGKQorKyMgICAgIEFDX0RFRklORShIQVZFX0ZBQlNGKQorKyAgICBBQ19ERUZJTkUoSEFWRV9GSU5JVEUpCisrICAgIEFDX0RFRklORShIQVZFX0ZJTklURUYpCisrICAgIEFDX0RFRklORShIQVZFX0ZMT09SRikKKysjICAgICBBQ19ERUZJTkUoSEFWRV9GTU9ERikKKysjICAgICBBQ19ERUZJTkUoSEFWRV9GUkVYUEYpCisrICAgIEFDX0RFRklORShIQVZFX0hZUE9UKQorKyMgICAgIEFDX0RFRklORShIQVZFX0hZUE9URikKKysgICAgQUNfREVGSU5FKEhBVkVfSVNJTkYpCisrICAgIEFDX0RFRklORShIQVZFX0lTSU5GRikKKysgICAgQUNfREVGSU5FKEhBVkVfSVNOQU4pCisrICAgIEFDX0RFRklORShIQVZFX0lTTkFORikKKysjICAgICBBQ19ERUZJTkUoSEFWRV9MT0dGKQorKyMgICAgIEFDX0RFRklORShIQVZFX0xPRzEwRikKKysjICAgICBBQ19ERUZJTkUoSEFWRV9NT0RGRikKKysjICAgICBBQ19ERUZJTkUoSEFWRV9TSU5GKQorKyMgICAgIEFDX0RFRklORShIQVZFX1NJTkhGKQorKyMgICAgIEFDX0RFRklORShIQVZFX1NJTkNPUykKKysjICAgICBBQ19ERUZJTkUoSEFWRV9TSU5DT1NGKQorKyAgICBBQ19ERUZJTkUoSEFWRV9TUVJURikKKysjICAgICBBQ19ERUZJTkUoSEFWRV9UQU5GKQorKyMgICAgIEFDX0RFRklORShIQVZFX1RBTkhGKQorKyAgICBpZiB0ZXN0IHgibG9uZ19kb3VibGVfbWF0aF9vbl90aGlzX2NwdSIgPSB4InllcyI7IHRoZW4KKysjICAgICAgIEFDX0RFRklORShIQVZFX0FDT1NMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfQVNJTkwpCisrIyAgICAgICBBQ19ERUZJTkUoSEFWRV9BVEFOTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX0FUQU4yTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX0NFSUxMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfQ09QWVNJR05MKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfQ09TTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX0NPU0hMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfRVhQTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX0ZBQlNMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfRklOSVRFTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX0ZMT09STCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX0ZNT0RMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfRlJFWFBMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfSFlQT1RMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfSVNJTkZMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfSVNOQU5MKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfTE9HTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX0xPRzEwTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX01PREZMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfUE9XTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX1NJTkwpCisrIyAgICAgICBBQ19ERUZJTkUoSEFWRV9TSU5ITCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX1NJTkNPU0wpCisrIyAgICAgICBBQ19ERUZJTkUoSEFWRV9TUVJUTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX1RBTkwpCisrIyAgICAgICBBQ19ERUZJTkUoSEFWRV9UQU5ITCkKKysgICAgZmkKKysgICAgOzsKKyAgICotbGludXgqIHwgKi11Y2xpbnV4KiB8ICotZ251KiB8ICota2ZyZWVic2QqLWdudSB8ICota25ldGJzZCotZ251KQorICAgICBBQ19DSEVDS19IRUFERVJTKFtuYW4uaCBpZWVlZnAuaCBlbmRpYW4uaCBzeXMvaXNhX2RlZnMuaCBcCisgICAgICAgbWFjaGluZS9lbmRpYW4uaCBtYWNoaW5lL3BhcmFtLmggc3lzL21hY2hpbmUuaCBzeXMvdHlwZXMuaCBcCitAQCAtMTU2LDcgKzI0OCw3IEBACisgICAgIEFDX0RFRklORShIQVZFX0lOVDY0X1QpCisgICAgIGNhc2UgIiR0YXJnZXQiIGluCisgICAgICAgKi11Y2xpbnV4KikKKy0gICAgICAgICMgRG9uJ3QgZW5hYmxlIExGUyB3aXRoIHVDbGliYworKyAgICAgICAgIyBEb24ndCBlbmFibGUgTEZTIHdpdGggdUNsaW51eAorICAgICAgICAgOzsKKyAgICAgICAqKQorICAgICAgICAgQUNfREVGSU5FKF9HTElCQ1hYX1VTRV9MRlMpCitkaWZmIC11ck4gZ2NjLTQuMC4wLTEwMC9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaCBnY2MtNC4wLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKKy0tLSBnY2MtNC4wLjAtMTAwL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCTIwMDUtMDQtMzAgMTM6MDY6NTMuNjkwMDU0MTY4IC0wNTAwCisrKysgZ2NjLTQuMC4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCTIwMDUtMDQtMjggMjA6MTU6NTYuMDAwMDAwMDAwIC0wNTAwCitAQCAtMTAxLDcgKzEwMSw5IEBACisgdXNpbmcgc3RkOjp3bWVtY3B5OworIHVzaW5nIHN0ZDo6d21lbW1vdmU7CisgdXNpbmcgc3RkOjp3bWVtc2V0OworKyNpZiBfR0xJQkNYWF9IQVZFX1dDU0ZUSU1FCisgdXNpbmcgc3RkOjp3Y3NmdGltZTsKKysjZW5kaWYKKyAKKyAjaWYgX0dMSUJDWFhfVVNFX0M5OQorIHVzaW5nIHN0ZDo6d2NzdG9sZDsKK2RpZmYgLXVyTiBnY2MtNC4wLjAtMTAwL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL3N0ZF9jd2NoYXIuaCBnY2MtNC4wLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvc3RkX2N3Y2hhci5oCistLS0gZ2NjLTQuMC4wLTEwMC9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9zdGRfY3djaGFyLmgJMjAwNS0wNC0zMCAxMzowNjo1My42OTEwNTQwMTYgLTA1MDAKKysrKyBnY2MtNC4wLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvc3RkX2N3Y2hhci5oCTIwMDUtMDQtMjggMjA6MTU6NTYuMDAwMDAwMDAwIC0wNTAwCitAQCAtMTc5LDcgKzE3OSw5IEBACisgICB1c2luZyA6Ondjc2NvbGw7CisgICB1c2luZyA6Ondjc2NweTsKKyAgIHVzaW5nIDo6d2NzY3NwbjsKKysjaWYgX0dMSUJDWFhfSEFWRV9XQ1NGVElNRQorICAgdXNpbmcgOjp3Y3NmdGltZTsKKysjZW5kaWYKKyAgIHVzaW5nIDo6d2NzbGVuOworICAgdXNpbmcgOjp3Y3NuY2F0OworICAgdXNpbmcgOjp3Y3NuY21wOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjAuNC8xMjAtbGlic3RkYysrLXBpYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4wLjQvMTIwLWxpYnN0ZGMrKy1waWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlkNmU3MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4wLjQvMTIwLWxpYnN0ZGMrKy1waWMucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorLS0tIGdjYy00LjAuMC9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmFtCisrKysgZ2NjLTQuMC4wL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuYW0KK0BAIC0yMTQsNiArMjE0LDEwIEBACisgCSAgJChPUFRfTERGTEFHUykgJChTRUNUSU9OX0xERkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoTERGTEFHUykgLW8gJEAKKyAKKyAKKytpbnN0YWxsLWV4ZWMtbG9jYWw6CisrCSQoQVIpIGNydSBsaWJzdGRjKytfcGljLmEgKi5vICQodG9wX2J1aWxkZGlyKS9saWJzdXBjKysvKi5vCisrCSQoSU5TVEFMTF9EQVRBKSBsaWJzdGRjKytfcGljLmEgJChERVNURElSKSQodG9vbGV4ZWNsaWJkaXIpCisrCisgIyBBZGRlZCBiaXRzIHRvIGJ1aWxkIGRlYnVnIGxpYnJhcnkuCisgaWYgR0xJQkNYWF9CVUlMRF9ERUJVRworIGFsbC1sb2NhbDogYnVpbGRfZGVidWcKKy0tLSBnY2MtNC4wLjAvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgorKysrIGdjYy00LjAuMC9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCitAQCAtNjI1LDcgKzYyNSw3IEBACisgCisgaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWRhdGEtbG9jYWwKKyAKKy1pbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUworK2luc3RhbGwtZXhlYy1hbTogaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTIGluc3RhbGwtZXhlYy1sb2NhbAorIAorIGluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisgCitAQCAtNjY0LDcgKzY2NCw3IEBACisgCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKyAJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorIAl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWluZm8tYW0gXAorLQl1bmluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUworKwl1bmluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUyBpbnN0YWxsLWV4ZWMtbG9jYWwKKyAKKyBAR0xJQkNYWF9CVUlMRF9WRVJTSU9ORURfU0hMSUJfVFJVRUBsaWJzdGRjKystc3ltYm9sLnZlcjogICR7Z2xpYmN4eF9zcmNkaXJ9LyQoU1lNVkVSX01BUCkKKyBAR0xJQkNYWF9CVUlMRF9WRVJTSU9ORURfU0hMSUJfVFJVRUAJY3AgJHtnbGliY3h4X3NyY2Rpcn0vJChTWU1WRVJfTUFQKSAuL2xpYnN0ZGMrKy1zeW1ib2wudmVyCitAQCAtNzQzLDYgKzc0MywxMSBAQAorIGluc3RhbGxfZGVidWc6CisgCShjZCAke2RlYnVnZGlyfSAmJiAkKE1BS0UpIFwKKyAJdG9vbGV4ZWNsaWJkaXI9JChnbGliY3h4X3Rvb2xleGVjbGliZGlyKS9kZWJ1ZyBpbnN0YWxsKQorKworK2luc3RhbGwtZXhlYy1sb2NhbDoKKysJJChBUikgY3J1IGxpYnN0ZGMrK19waWMuYSAqLm8gJCh0b3BfYnVpbGRkaXIpL2xpYnN1cGMrKy8qLm8KKysJJChJTlNUQUxMX0RBVEEpIGxpYnN0ZGMrK19waWMuYSAkKERFU1RESVIpJCh0b29sZXhlY2xpYmRpcikKKysKKyAjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorICMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorIC5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4wLjQvMTMwLW1pc3NpbmctZXhlY2luZm9faC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4wLjQvMTMwLW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTIwOTJmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjAuNC8xMzAtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKKy0tLSBnY2MtNC4wLjAvYm9laG0tZ2MvaW5jbHVkZS9nYy5oLW9yaWcJMjAwNS0wNC0yOCAyMjoyODo1Ny4wMDAwMDAwMDAgLTA1MDAKKysrKyBnY2MtNC4wLjAvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCTIwMDUtMDQtMjggMjI6MzA6MzguMDAwMDAwMDAwIC0wNTAwCitAQCAtNTAwLDcgKzUwMCw3IEBACisgI2lmZGVmIF9fbGludXhfXworICMgaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyAjIGlmIChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMSB8fCBfX0dMSUJDX18gPiAyKSBcCistICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykKKysgICAgICYmICFkZWZpbmVkKF9faWE2NF9fKSAmJiAhZGVmaW5lZChfX1VDTElCQ19fKQorICMgICBpZm5kZWYgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQorICMgICAgIGRlZmluZSBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgIGVuZGlmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMC40LzE0MC1jOTktc25wcmludGYucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMC40LzE0MC1jOTktc25wcmludGYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZiMjJkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4wLjQvMTQwLWM5OS1zbnByaW50Zi5wYXRjaApAQCAtMCwwICsxLDExIEBACistLS0gZ2NjLTQuMC4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL3N0ZF9jc3RkaW8uaC1vcmlnCTIwMDUtMDQtMjkgMDA6MDg6NDEuMDAwMDAwMDAwIC0wNTAwCisrKysgZ2NjLTQuMC4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL3N0ZF9jc3RkaW8uaAkyMDA1LTA0LTI5IDAwOjA4OjQ1LjAwMDAwMDAwMCAtMDUwMAorQEAgLTE0Miw3ICsxNDIsNyBAQAorICAgdXNpbmcgOjp2c3ByaW50ZjsKKyB9CisgCistI2lmIF9HTElCQ1hYX1VTRV9DOTkKKysjaWYgX0dMSUJDWFhfVVNFX0M5OSB8fCBkZWZpbmVkKF9fVUNMSUJDX18pCisgCisgI3VuZGVmIHNucHJpbnRmCisgI3VuZGVmIHZmc2NhbmYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4wLjQvMTUwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4wLjQvMTUwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2NjODBkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjAuNC8xNTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKKy0tLSBnY2MtNC4wLjAvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS1vbGQJMjAwNS0wNC0zMCAyMjowNDo0OC4wNjE2MDM5MTIgLTA1MDAKKysrKyBnY2MtNC4wLjAvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQkyMDA1LTA0LTMwIDIyOjA2OjEzLjY3ODU4ODE1MiAtMDUwMAorQEAgLTcxOTQsNiArNzE5NCw5IEBACisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaW5jbHVkZSA8Y29tcGxleC5oPgorKyNpZmRlZiBfX1VDTElCQ19fCisrI2Vycm9yIHVnbHkgaGFjayB0byBtYWtlIHN1cmUgY29uZmlndXJlIHRlc3QgZmFpbHMgaGVyZSBmb3IgY3Jvc3MgdW50aWwgdUNsaWJjIHN1cHBvcnRzIHRoZSBjb21wbGV4IGZ1bmNzCisrI2VuZGlmCisgaW50CisgbWFpbiAoKQorIHsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4wLjQvMTYwLWluZGV4X21hY3JvLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjAuNC8xNjAtaW5kZXhfbWFjcm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZhYzExMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4wLjQvMTYwLWluZGV4X21hY3JvLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKKy0tLSBnY2MtNC4xLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUubXBzCTIwMDYtMDMtMjQgMDE6NDk6NTEgKzAxMDAKKysrKyBnY2MtNC4xLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUJMjAwNi0wMy0yNCAwMTo0OTozNyArMDEwMAorQEAgLTU5LDYgKzU5LDkgQEAKKyAjaW5jbHVkZSA8Yml0cy9hbGxvY2F0b3IuaD4KKyAjaW5jbHVkZSA8ZXh0L2hhc2hfZnVuLmg+CisgCisrLyogY29wZSB3LyBpbmRleCBkZWZpbmVkIGFzIG1hY3JvLCBTdVN2MyBwcm9wb3NhbCAqLworKyN1bmRlZiBpbmRleAorKworICMgaWZkZWYgX19HQworICMgICBkZWZpbmUgX19HQ19DT05TVCBjb25zdAorICMgZWxzZQorLS0tIGdjYy00LjEuMC9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaC5tcHMJMjAwNi0wMy0yNCAwMTo1MDowNCArMDEwMAorKysrIGdjYy00LjEuMC9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAkyMDA2LTAzLTI0IDAxOjUwOjI4ICswMTAwCitAQCAtNTMsNiArNTMsOSBAQAorICNpbmNsdWRlIDxleHQvbWVtb3J5PiAvLyBGb3IgdW5pbml0aWFsaXplZF9jb3B5X24KKyAjaW5jbHVkZSA8ZXh0L251bWVyaWM+IC8vIEZvciBwb3dlcgorIAorKy8qIGNvcGUgdy8gaW5kZXggZGVmaW5lZCBhcyBtYWNybywgU3VTdjMgcHJvcG9zYWwgKi8KKysjdW5kZWYgaW5kZXgKKysKKyBuYW1lc3BhY2UgX19nbnVfY3h4CisgeworICAgdXNpbmcgc3RkOjpzaXplX3Q7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMC40LzE3MC1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4wLjQvMTcwLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NGIxZjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMC40LzE3MC1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitJbmRleDogZ2NjLTQuMi9saWJtdWRmbGFwL21mLWhvb2tzMi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuMi9saWJtdWRmbGFwL21mLWhvb2tzMi5jCShyZXZpc2lvbiAxMTk4MzQpCisrKysgZ2NjLTQuMi9saWJtdWRmbGFwL21mLWhvb2tzMi5jCSh3b3JraW5nIGNvcHkpCitAQCAtNDI3LDcgKzQyNyw3IEBACisgeworICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQocywgbiwgX19NRl9DSEVDS19XUklURSwgImJ6ZXJvIHJlZ2lvbiIpOworLSAgYnplcm8gKHMsIG4pOworKyAgbWVtc2V0IChzLCAwLCBuKTsKKyB9CisgCisgCitAQCAtNDM3LDcgKzQzNyw3IEBACisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzcmMsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjb3B5IHNyYyIpOworICAgTUZfVkFMSURBVEVfRVhURU5UKGRlc3QsIG4sIF9fTUZfQ0hFQ0tfV1JJVEUsICJiY29weSBkZXN0Iik7CistICBiY29weSAoc3JjLCBkZXN0LCBuKTsKKysgIG1lbW1vdmUgKGRlc3QsIHNyYywgbik7CisgfQorIAorIAorQEAgLTQ0Nyw3ICs0NDcsNyBAQAorICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQoczEsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjbXAgMXN0IGFyZyIpOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMyLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY21wIDJuZCBhcmciKTsKKy0gIHJldHVybiBiY21wIChzMSwgczIsIG4pOworKyAgcmV0dXJuIG4gPT0gMCA/IDAgOiBtZW1jbXAgKHMxLCBzMiwgbik7CisgfQorIAorIAorQEAgLTQ1Niw3ICs0NTYsNyBAQAorICAgc2l6ZV90IG4gPSBzdHJsZW4gKHMpOworICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQocywgQ0xBTVBBREQobiwgMSksIF9fTUZfQ0hFQ0tfUkVBRCwgImluZGV4IHJlZ2lvbiIpOworLSAgcmV0dXJuIGluZGV4IChzLCBjKTsKKysgIHJldHVybiBzdHJjaHIgKHMsIGMpOworIH0KKyAKKyAKK0BAIC00NjUsNyArNDY1LDcgQEAKKyAgIHNpemVfdCBuID0gc3RybGVuIChzKTsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIENMQU1QQUREKG4sIDEpLCBfX01GX0NIRUNLX1JFQUQsICJyaW5kZXggcmVnaW9uIik7CistICByZXR1cm4gcmluZGV4IChzLCBjKTsKKysgIHJldHVybiBzdHJyY2hyIChzLCBjKTsKKyB9CisgCisgLyogWFhYOiAgc3RwY3B5LCBtZW1jY3B5ICovCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMC40LzE4MC1zZGstbGlic3RkYysrLWluY2x1ZGVzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjAuNC8xODAtc2RrLWxpYnN0ZGMrKy1pbmNsdWRlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzY3NmFlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjAuNC8xODAtc2RrLWxpYnN0ZGMrKy1pbmNsdWRlcy5wYXRjaApAQCAtMCwwICsxLDIyIEBACitkaWZmIC11ck4gZ2NjLTQuMC4wLTEwMC9saWJzdGRjKystdjMvZnJhZ21lbnQuYW0gZ2NjLTQuMC4wL2xpYnN0ZGMrKy12My9mcmFnbWVudC5hbQorLS0tIGdjYy00LjAuMC0xMDAvbGlic3RkYysrLXYzL2ZyYWdtZW50LmFtCTIwMDQtMTAtMjUgMTU6MzI6NDAuMDAwMDAwMDAwIC0wNTAwCisrKysgZ2NjLTQuMC4wL2xpYnN0ZGMrKy12My9mcmFnbWVudC5hbQkyMDA1LTA0LTI4IDIxOjQ4OjQzLjAwMDAwMDAwMCAtMDUwMAorQEAgLTE4LDUgKzE4LDUgQEAKKyAJJChXQVJOX0ZMQUdTKSAkKFdFUlJPUikgLWZkaWFnbm9zdGljcy1zaG93LWxvY2F0aW9uPW9uY2UKKyAKKyAjIC1JLy1EIGZsYWdzIHRvIHBhc3Mgd2hlbiBjb21waWxpbmcuCistQU1fQ1BQRkxBR1MgPSAkKEdMSUJDWFhfSU5DTFVERVMpCisrQU1fQ1BQRkxBR1MgPSAkKEdMSUJDWFhfSU5DTFVERVMpIC1JJCh0b3BsZXZlbF9zcmNkaXIpL2luY2x1ZGUKKyAKK2RpZmYgLXVyTiBnY2MtNC4wLjAtMTAwL2xpYnN0ZGMrKy12My9saWJtYXRoL01ha2VmaWxlLmFtIGdjYy00LjAuMC9saWJzdGRjKystdjMvbGlibWF0aC9NYWtlZmlsZS5hbQorLS0tIGdjYy00LjAuMC0xMDAvbGlic3RkYysrLXYzL2xpYm1hdGgvTWFrZWZpbGUuYW0JMjAwMy0wOC0yNyAxNjoyOTo0Mi4wMDAwMDAwMDAgLTA1MDAKKysrKyBnY2MtNC4wLjAvbGlic3RkYysrLXYzL2xpYm1hdGgvTWFrZWZpbGUuYW0JMjAwNS0wNC0yOCAyMTo0ODo0My4wMDAwMDAwMDAgLTA1MDAKK0BAIC0zMiw3ICszMiw3IEBACisgCisgbGlibWF0aF9sYV9TT1VSQ0VTID0gc3R1YnMuYworIAorLUFNX0NQUEZMQUdTID0gJChDQU5BRElBTl9JTkNMVURFUykKKytBTV9DUFBGTEFHUyA9ICQoQ0FOQURJQU5fSU5DTFVERVMpIC1JJCh0b3BsZXZlbF9zcmNkaXIpL2luY2x1ZGUKKyAKKyAjIE9ubHkgY29tcGlsaW5nICJDIiBzb3VyY2VzIGluIHRoaXMgZGlyZWN0b3J5LgorIExJQlRPT0wgPSBATElCVE9PTEAgLS10YWcgQ0MKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4wLjQvMTkwLWFybS1iaWdlbmRpYW4ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMC40LzE5MC1hcm0tYmlnZW5kaWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMmM5YmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMC40LzE5MC1hcm0tYmlnZW5kaWFuLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK2RpZmYgLWR1ciBnY2MtNC4wLjQub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCBnY2MtNC4wLjQvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKKy0tLSBnY2MtNC4wLjQub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDA3LTAyLTAyIDE5OjI0OjUwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjAuNC9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDA3LTAyLTAyIDE5OjI2OjEyLjAwMDAwMDAwMCArMDEwMAorQEAgLTMxLDE5ICszMSwzMyBAQAorIC8qIERvIG5vdCBhc3N1bWUgYW55dGhpbmcgYWJvdXQgaGVhZGVyIGZpbGVzLiAgKi8KKyAjZGVmaW5lIE5PX0lNUExJQ0lUX0VYVEVSTl9DCisgCisrLyoKKysgKiAnY29uZmlnLmdjYycgZGVmaW5lcyBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUIGFzIDEgZm9yIGFybSpiLSoKKysgKiAoYmlnIGVuZGlhbikgY29uZmlndXJhdGlvbnMuCisrICovCisrI2lmIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQKKysjZGVmaW5lIFRBUkdFVF9FTkRJQU5fREVGQVVMVCBBUk1fRkxBR19CSUdfRU5ECisrI2RlZmluZSBUQVJHRVRfRU5ESUFOX09QVElPTiAibWJpZy1lbmRpYW4iCisrI2RlZmluZSBUQVJHRVRfTElOS0VSX0VNVUxBVElPTiAiYXJtZWxmYl9saW51eCIKKysjZWxzZQorKyNkZWZpbmUgVEFSR0VUX0VORElBTl9ERUZBVUxUIDAKKysjZGVmaW5lIFRBUkdFVF9FTkRJQU5fT1BUSU9OICJtbGl0dGxlLWVuZGlhbiIKKysjZGVmaW5lIFRBUkdFVF9MSU5LRVJfRU1VTEFUSU9OICJhcm1lbGZfbGludXgiCisrI2VuZGlmCisrCisgI3VuZGVmICBUQVJHRVRfREVGQVVMVF9GTE9BVF9BQkkKKyAjZGVmaW5lIFRBUkdFVF9ERUZBVUxUX0ZMT0FUX0FCSSBBUk1fRkxPQVRfQUJJX0hBUkQKKyAKKyAjdW5kZWYgIFRBUkdFVF9ERUZBVUxUCistI2RlZmluZSBUQVJHRVRfREVGQVVMVCAoMCkKKysjZGVmaW5lIFRBUkdFVF9ERUZBVUxUIChUQVJHRVRfRU5ESUFOX0RFRkFVTFQpCisgCisgI2RlZmluZSBTVUJUQVJHRVRfQ1BVX0RFRkFVTFQgVEFSR0VUX0NQVV9hcm02CisgCistI2RlZmluZSBTVUJUQVJHRVRfRVhUUkFfTElOS19TUEVDICIgLW0gYXJtZWxmX2xpbnV4IC1wIgorKyNkZWZpbmUgU1VCVEFSR0VUX0VYVFJBX0xJTktfU1BFQyAiIC1tICIgVEFSR0VUX0xJTktFUl9FTVVMQVRJT04gIiAtcCIKKyAKKyAjdW5kZWYgIE1VTFRJTElCX0RFRkFVTFRTCisgI2RlZmluZSBNVUxUSUxJQl9ERUZBVUxUUyBcCistCXsgIm1hcm0iLCAibWxpdHRsZS1lbmRpYW4iLCAibWhhcmQtZmxvYXQiLCAibW5vLXRodW1iLWludGVyd29yayIgfQorKwl7ICJtYXJtIiwgVEFSR0VUX0VORElBTl9PUFRJT04sICJtaGFyZC1mbG9hdCIsICJtbm8tdGh1bWItaW50ZXJ3b3JrIiB9CisgCisgLyogVGhlIEdOVSBDKysgc3RhbmRhcmQgbGlicmFyeSByZXF1aXJlcyB0aGF0IHRoZXNlIG1hY3JvcyBiZSBkZWZpbmVkLiAgKi8KKyAjdW5kZWYgQ1BMVVNQTFVTX0NQUF9TUEVDCitAQCAtOTUsNyArMTA5LDcgQEAKKyAgICAle3JkeW5hbWljOi1leHBvcnQtZHluYW1pY30gXAorICAgICV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAiIEVMRl9EWU5BTUlDX0xJTktFUiAifSBcCisgICAgLVggXAorLSAgICV7bWJpZy1lbmRpYW46LUVCfSIgXAorKyAgICV7bWJpZy1lbmRpYW46LUVCfSAle21saXR0bGUtZW5kaWFuOi1FTH0iIFwKKyAgICBTVUJUQVJHRVRfRVhUUkFfTElOS19TUEVDCisgCisgI2RlZmluZSBUQVJHRVRfT1NfQ1BQX0JVSUxUSU5TKCkJCVwKK09ubHkgaW4gZ2NjLTQuMC40L2djYy9jb25maWcvYXJtOiBsaW51eC1lbGYuaC5vcmlnCitkaWZmIC1kdXIgZ2NjLTQuMC40Lm9yaWcvZ2NjL2NvbmZpZy5nY2MgZ2NjLTQuMC40L2djYy9jb25maWcuZ2NjCistLS0gZ2NjLTQuMC40Lm9yaWcvZ2NjL2NvbmZpZy5nY2MJMjAwNy0wMi0wMiAxOToyNDo1MC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4wLjQvZ2NjL2NvbmZpZy5nY2MJMjAwNy0wMi0wMiAxOToyNjoxMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC02NzIsNiArNjcyLDExIEBACisgCTs7CisgYXJtKi0qLWxpbnV4KikJCQkjIEFSTSBHTlUvTGludXggd2l0aCBFTEYKKyAJdG1fZmlsZT0iZGJ4ZWxmLmggZWxmb3MuaCBsaW51eC5oIGFybS9lbGYuaCAgYXJtL2xpbnV4LWdhcy5oIGFybS9saW51eC1lbGYuaCBhcm0vYW91dC5oIGFybS9hcm0uaCIKKysJY2FzZSAkdGFyZ2V0IGluCisrCWFybSpiLSopCisrCQl0bV9kZWZpbmVzPSJUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUPTEgJHRtX2RlZmluZXMiCisrCQk7OworKwllc2FjCisgCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gYXJtL3QtYXJtIGFybS90LWxpbnV4IgorIAlleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBjcnRiZWdpblMubyBjcnRlbmQubyBjcnRlbmRTLm8iCisgCWdudV9sZD15ZXMKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4wLjQvMjAwLWFybS1zb2Z0ZmxvYXQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMC40LzIwMC1hcm0tc29mdGZsb2F0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NjVhOGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMC40LzIwMC1hcm0tc29mdGZsb2F0LnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK0VuYWJsZSBidWlsZGluZyBhIHB1cmUgc29mdC1mbG9hdCBjb21waWxlciB3aXRob3V0IHRoZSBuZWVkIGZvciBhIHNvZnR3YXJlCitmbG9hdGluZyBwb2ludCBsaWJyYXJ5LgorCitkaWZmIC1kdXIgZ2NjLTQuMC40Lm9yaWcvZ2NjL2NvbmZpZy5nY2MgZ2NjLTQuMC40L2djYy9jb25maWcuZ2NjCistLS0gZ2NjLTQuMC40Lm9yaWcvZ2NjL2NvbmZpZy5nY2MJMjAwNy0wMi0wMiAxOToxMjoyOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4wLjQvZ2NjL2NvbmZpZy5nY2MJMjAwNy0wMi0wMiAxOToxMjowNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC02NzcsNyArNjc3LDcgQEAKKyAJCXRtX2RlZmluZXM9IlRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQ9MSAkdG1fZGVmaW5lcyIKKyAJCTs7CisgCWVzYWMKKy0JdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSBhcm0vdC1hcm0gYXJtL3QtbGludXgiCisrCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gYXJtL3QtYXJtIGFybS90LWxpbnV4IGFybS90LWFybS1lbGYiCisgCWV4dHJhX3BhcnRzPSJjcnRiZWdpbi5vIGNydGJlZ2luUy5vIGNydGVuZC5vIGNydGVuZFMubyIKKyAJZ251X2xkPXllcworIAk7OwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjEuMi8xMDAtdWNsaWJjLWNvbmYucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMS4yLzEwMC11Y2xpYmMtY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzNkN2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjEuMi8xMDAtdWNsaWJjLWNvbmYucGF0Y2gKQEAgLTAsMCArMSw1NDQgQEAKKy0tLSBnY2MtNC4xLjIub3JpZy9nY2MvY29uZmlnL3QtbGludXgtdWNsaWJjCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMS4yL2djYy9jb25maWcvdC1saW51eC11Y2xpYmMJMjAwNy0wMy0wNCAyMzoyNTowNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsNSBAQAorKyMgUmVtb3ZlIGdsaWJjIHNwZWNpZmljIGZpbGVzIGFkZGVkIGluIHQtbGludXgKKytTSExJQl9NQVBGSUxFUyA6PSAkKGZpbHRlci1vdXQgJChzcmNkaXIpL2NvbmZpZy9saWJnY2MtZ2xpYmMudmVyLCAkKFNITElCX01BUEZJTEVTKSkKKysKKysjIFVzZSB1bndpbmQtZHcyLWZkZSBpbnN0ZWFkIG9mIHVud2luZC1kdzItZmRlLWdsaWJjCisrTElCMkFEREVIIDo9ICQoc3Vic3QgdW53aW5kLWR3Mi1mZGUtZ2xpYmMuYyx1bndpbmQtZHcyLWZkZS5jLCQoTElCMkFEREVIKSkKKy0tLSBnY2MtNC4xLjIub3JpZy9nY2MvY29uZmlnLmdjYwkyMDA2LTEwLTE2IDAxOjEyOjIzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjEuMi9nY2MvY29uZmlnLmdjYwkyMDA3LTAzLTA0IDIzOjI1OjA3LjAwMDAwMDAwMCArMDEwMAorQEAgLTE4ODQsNyArMTg4NCw3IEBACisgCTs7Cisgc2gtKi1lbGYqIHwgc2hbMTIzNDZsXSotKi1lbGYqIHwgc2gqLSota2FvcyogfCBcCisgc2gtKi1zeW1iaWFuZWxmKiB8IHNoWzEyMzQ2bF0qLSotc3ltYmlhbmVsZiogfCBcCistICBzaC0qLWxpbnV4KiB8IHNoWzM0NmxiZV0qLSotbGludXgqIHwgXAorKyAgc2gqLSotbGludXgqIHwgc2hbMzQ2bGJlXSotKi1saW51eCogfCBcCisgICBzaC0qLW5ldGJzZGVsZiogfCBzaGwqLSotbmV0YnNkZWxmKiB8IHNoNS0qLW5ldGJzZCogfCBzaDVsKi0qLW5ldGJzZCogfCBcCisgICAgc2g2NC0qLW5ldGJzZCogfCBzaDY0bCotKi1uZXRic2QqKQorIAl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IHNoL3Qtc2ggc2gvdC1lbGYiCitAQCAtMjMzOCw2ICsyMzM4LDEyIEBACisgCTs7CisgZXNhYworIAorKyMgUmF0aGVyIHRoYW4gaG9vayBpbnRvIGVhY2ggdGFyZ2V0LCBqdXN0IGRvIGl0IGFmdGVyIGFsbCB0aGUgbGludXgKKysjIHRhcmdldHMgaGF2ZSBiZWVuIHByb2Nlc3NlZAorK2Nhc2UgJHt0YXJnZXR9IGluCisrKi1saW51eC11Y2xpYmMqKSB0bV9kZWZpbmVzPSIke3RtX2RlZmluZXN9IFVTRV9VQ0xJQkMiIDsgdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSB0LWxpbnV4LXVjbGliYyIKKytlc2FjCisrCisgY2FzZSAke3RhcmdldH0gaW4KKyBpWzM0NTY3XTg2LSotbGludXgqYW91dCogfCBpWzM0NTY3XTg2LSotbGludXgqbGliYzEpCisgCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gaTM4Ni90LWdtbV9tYWxsb2MiCistLS0gZ2NjLTQuMS4yLm9yaWcvYm9laG0tZ2MvY29uZmlndXJlCTIwMDctMDItMTQgMDY6MTc6MjIuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMS4yL2JvZWhtLWdjL2NvbmZpZ3VyZQkyMDA3LTAzLTA0IDIzOjI1OjA3LjAwMDAwMDAwMCArMDEwMAorQEAgLTQzMjAsNiArNDMyMCwxMSBAQAorICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgIDs7CisgCisrbGludXgtdWNsaWJjKikKKysgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisrICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvbGliL2xpYnVDbGliYy0qLnNvYAorKyAgOzsKKysKKyBuZXRic2QqIHwga25ldGJzZCotZ251KQorICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL1wuXStcLnNvXC5bMC05XStcLlswLTldKyQnCistLS0gZ2NjLTQuMS4yLm9yaWcvY29uZmlndXJlCTIwMDYtMTEtMjEgMTg6NDg6MzYuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMS4yL2NvbmZpZ3VyZQkyMDA3LTAzLTA0IDIzOjI1OjA3LjAwMDAwMDAwMCArMDEwMAorQEAgLTExMzMsNyArMTEzMyw3IEBACisgICAgIDs7CisgIiIpCisgICAgIGNhc2UgIiR7dGFyZ2V0fSIgaW4KKy0gICAgKi0qLWxpbnV4Ki1nbnUgfCAqLSotZ251KiB8ICotKi1rKmJzZCotZ251KQorKyAgICAqLSotbGludXgqLWdudSB8ICotKi1nbnUqIHwgKi0qLWsqYnNkKi1nbnUgfCAqLSotbGludXgtdWNsaWJjKikKKyAgICAgICAgICMgRW5hYmxlIGxpYm11ZGZsYXAgYnkgZGVmYXVsdCBpbiBHTlUgYW5kIGZyaWVuZHMuCisgCTs7CisgICAgICotKi1mcmVlYnNkKikKKy0tLSBnY2MtNC4xLjIub3JpZy9jb25maWd1cmUuaW4JMjAwNi0xMS0yMSAxODo0ODozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4xLjIvY29uZmlndXJlLmluCTIwMDctMDMtMDQgMjM6MjU6MDcuMDAwMDAwMDAwICswMTAwCitAQCAtMzQxLDcgKzM0MSw3IEBACisgICAgIDs7CisgIiIpCisgICAgIGNhc2UgIiR7dGFyZ2V0fSIgaW4KKy0gICAgKi0qLWxpbnV4Ki1nbnUgfCAqLSotZ251KiB8ICotKi1rKmJzZCotZ251KQorKyAgICAqLSotbGludXgqLWdudSB8ICotKi1nbnUqIHwgKi0qLWsqYnNkKi1nbnUgfCAqLSotbGludXgtdWNsaWJjKikKKyAgICAgICAgICMgRW5hYmxlIGxpYm11ZGZsYXAgYnkgZGVmYXVsdCBpbiBHTlUgYW5kIGZyaWVuZHMuCisgCTs7CisgICAgICotKi1mcmVlYnNkKikKKy0tLSBnY2MtNC4xLjIub3JpZy9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gJMjAwNS0wOC0xNSAwMjo0MTozMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4xLjIvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCTIwMDctMDMtMDQgMjM6MjU6MDcuMDAwMDAwMDAwICswMTAwCitAQCAtMTA1LDYgKzEwNSwxMCBAQAorICB0aGVuCisgICBtYWtlIGFsbC1nZGIgYWxsLWRlamFnbnUgYWxsLWxkIHx8IGV4aXQgMQorICAgbWFrZSBpbnN0YWxsLWdkYiBpbnN0YWxsLWRlamFnbnUgaW5zdGFsbC1sZCB8fCBleGl0IDEKKytlbGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgLWEgJEhfUkVBTF9UQVJHRVQgPSBpNjg2LXBjLWxpbnV4LXVjbGliYyBdCisrIHRoZW4KKysgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCisrICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQorIGVsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCBdIDsgdGhlbgorICAgbWFrZSBib290c3RyYXAgfHwgZXhpdCAxCisgICBtYWtlIGluc3RhbGwgfHwgZXhpdCAxCistLS0gZ2NjLTQuMS4yLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAkyMDA1LTA2LTI1IDAzOjIyOjQxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjEuMi9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCTIwMDctMDMtMDQgMjM6MjU6MDcuMDAwMDAwMDAwICswMTAwCitAQCAtMjcsNyArMjcsMTEgQEAKKyAjZGVmaW5lIFNVQlRBUkdFVF9FWFRSQV9TUEVDUyBcCisgeyAiZWxmX2R5bmFtaWNfbGlua2VyIiwgRUxGX0RZTkFNSUNfTElOS0VSIH0sCisgCisrI2lmIGRlZmluZWQgVVNFX1VDTElCQworKyNkZWZpbmUgRUxGX0RZTkFNSUNfTElOS0VSCSIvbGliL2xkLXVDbGliYy5zby4wIgorKyNlbHNlCisgI2RlZmluZSBFTEZfRFlOQU1JQ19MSU5LRVIJIi9saWIvbGQtbGludXguc28uMiIKKysjZW5kaWYKKyAKKyAjZGVmaW5lIExJTktfU1BFQyAiLW0gZWxmNjRhbHBoYSAle0cqfSAle3JlbGF4Oi1yZWxheH0JCVwKKyAgICV7Tyo6LU8zfSAleyFPKjotTzF9CQkJCQkJXAorLS0tIGdjYy00LjEuMi5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMDUtMTAtMTAgMDM6MDQ6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMS4yL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMDctMDMtMDQgMjM6MjU6MDcuMDAwMDAwMDAwICswMTAwCitAQCAtNTEsNyArNTEsMTEgQEAKKyAKKyAjZGVmaW5lIExJQkdDQ19TUEVDICIle21zb2Z0LWZsb2F0Oi1sZmxvYXR9ICV7bWZsb2F0LWFiaT1zb2Z0KjotbGZsb2F0fSAtbGdjYyIKKyAKKysjaWZkZWYgVVNFX1VDTElCQworKyNkZWZpbmUgTElOVVhfVEFSR0VUX0lOVEVSUFJFVEVSICIvbGliL2xkLXVDbGliYy5zby4wIgorKyNlbHNlCisgI2RlZmluZSBMSU5VWF9UQVJHRVRfSU5URVJQUkVURVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZW5kaWYKKyAKKyAjZGVmaW5lIExJTlVYX1RBUkdFVF9MSU5LX1NQRUMgICIle2gqfSAle3ZlcnNpb246LXZ9IFwKKyAgICAle2J9IFwKKy0tLSBnY2MtNC4xLjIub3JpZy9nY2MvY29uZmlnL2NyaXMvbGludXguaAkyMDA1LTA2LTI1IDAzOjIyOjQxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjEuMi9nY2MvY29uZmlnL2NyaXMvbGludXguaAkyMDA3LTAzLTA0IDIzOjI1OjA3LjAwMDAwMDAwMCArMDEwMAorQEAgLTczLDYgKzczLDI1IEBACisgI3VuZGVmIENSSVNfREVGQVVMVF9DUFVfVkVSU0lPTgorICNkZWZpbmUgQ1JJU19ERUZBVUxUX0NQVV9WRVJTSU9OIENSSVNfQ1BVX05HCisgCisrI2lmZGVmIFVTRV9VQ0xJQkMKKysKKysjdW5kZWYgQ1JJU19TVUJUQVJHRVRfVkVSU0lPTgorKyNkZWZpbmUgQ1JJU19TVUJUQVJHRVRfVkVSU0lPTiAiIC0gY3Jpcy1heGlzLWxpbnV4LXVjbGliYyIKKysKKysjdW5kZWYgQ1JJU19MSU5LX1NVQlRBUkdFVF9TUEVDCisrI2RlZmluZSBDUklTX0xJTktfU1VCVEFSR0VUX1NQRUMgXAorKyAiLW1jcmlzbGludXhcCisrICAtcnBhdGgtbGluayBpbmNsdWRlL2FzbS8uLi8uLiVzXAorKyAgJXtzaGFyZWR9ICV7c3RhdGljfVwKKysgICV7c3ltYm9saWM6LUJkeW5hbWljfSAle3NobGliOi1CZHluYW1pY30gJXtzdGF0aWM6LUJzdGF0aWN9XAorKyAgJXshc2hhcmVkOiBcCisrICAgICV7IXN0YXRpYzogXAorKyAgICAgICV7cmR5bmFtaWM6LWV4cG9ydC1keW5hbWljfSBcCisrICAgICAgJXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyIC9saWIvbGQtdUNsaWJjLnNvLjB9fX0gXAorKyAgJXshcjole08yfE8zOiAtLWdjLXNlY3Rpb25zfX0iCisrCisrI2Vsc2UgIC8qIFVTRV9VQ0xJQkMgKi8KKysKKyAjdW5kZWYgQ1JJU19TVUJUQVJHRVRfVkVSU0lPTgorICNkZWZpbmUgQ1JJU19TVUJUQVJHRVRfVkVSU0lPTiAiIC0gY3Jpcy1heGlzLWxpbnV4LWdudSIKKyAKK0BAIC04Nyw2ICsxMDYsOCBAQAorICAgJXshc2hhcmVkOiV7IXN0YXRpYzole3JkeW5hbWljOi1leHBvcnQtZHluYW1pY319fVwKKyAgICV7IXI6JXtPMnxPMzogLS1nYy1zZWN0aW9uc319IgorIAorKyNlbmRpZiAgLyogVVNFX1VDTElCQyAqLworKworIAorIC8qIE5vZGU6IFJ1bi10aW1lIFRhcmdldCAqLworIAorLS0tIGdjYy00LjEuMi5vcmlnL2djYy9jb25maWcvaTM4Ni9saW51eC5oCTIwMDUtMDgtMTAgMTk6NTM6MDEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMS4yL2djYy9jb25maWcvaTM4Ni9saW51eC5oCTIwMDctMDMtMDQgMjM6MjU6MDcuMDAwMDAwMDAwICswMTAwCitAQCAtMTA3LDYgKzEwNywxMSBAQAorICNkZWZpbmUgTElOS19FTVVMQVRJT04gImVsZl9pMzg2IgorICNkZWZpbmUgRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKyAKKysjaWYgZGVmaW5lZCBVU0VfVUNMSUJDCisrI3VuZGVmIERZTkFNSUNfTElOS0VSCisrI2RlZmluZSBEWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKysjZW5kaWYKKysKKyAjdW5kZWYgIFNVQlRBUkdFVF9FWFRSQV9TUEVDUworICNkZWZpbmUgU1VCVEFSR0VUX0VYVFJBX1NQRUNTIFwKKyAgIHsgImxpbmtfZW11bGF0aW9uIiwgTElOS19FTVVMQVRJT04gfSxcCistLS0gZ2NjLTQuMS4yLm9yaWcvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAkyMDA1LTA4LTEwIDE5OjUzOjAxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjEuMi9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCTIwMDctMDMtMDQgMjM6MjU6MDcuMDAwMDAwMDAwICswMTAwCitAQCAtNTQsMTQgKzU0LDIxIEBACisgICAgV2hlbiB0aGUgLXNoYXJlZCBsaW5rIG9wdGlvbiBpcyB1c2VkIGEgZmluYWwgbGluayBpcyBub3QgYmVpbmcKKyAgICBkb25lLiAgKi8KKyAKKysjaWZkZWYgVVNFX1VDTElCQworKyNkZWZpbmUgRUxGMzJfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBFTEY2NF9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZDY0LXVDbGliYy5zby4wIgorKyNlbHNlCisrI2RlZmluZSBFTEYzMl9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgRUxGNjRfRFlOQU1JQ19MSU5LRVIgIi9saWI2NC9sZC1saW51eC14ODYtNjQuc28uMiIKKysjZW5kaWYKKyAjdW5kZWYJTElOS19TUEVDCisgI2RlZmluZSBMSU5LX1NQRUMgIiV7IW0zMjotbSBlbGZfeDg2XzY0fSAle20zMjotbSBlbGZfaTM4Nn0gXAorICAgJXtzaGFyZWQ6LXNoYXJlZH0gXAorICAgJXshc2hhcmVkOiBcCisgICAgICV7IXN0YXRpYzogXAorICAgICAgICV7cmR5bmFtaWM6LWV4cG9ydC1keW5hbWljfSBcCistICAgICAgJXttMzI6JXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyIC9saWIvbGQtbGludXguc28uMn19IFwKKy0gICAgICAleyFtMzI6JXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyIC9saWI2NC9sZC1saW51eC14ODYtNjQuc28uMn19fSBcCisrICAgICAgJXttMzI6JXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyICIgRUxGMzJfRFlOQU1JQ19MSU5LRVIgIn19IFwKKysgICAgICAleyFtMzI6JXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyICIgRUxGNjRfRFlOQU1JQ19MSU5LRVIgIn19fSBcCisgICAgICV7c3RhdGljOi1zdGF0aWN9fSIKKyAKKyAvKiBTaW1pbGFyIHRvIHN0YW5kYXJkIExpbnV4LCBidXQgYWRkaW5nIC1mZmFzdC1tYXRoIHN1cHBvcnQuICAqLworLS0tIGdjYy00LjEuMi5vcmlnL2djYy9jb25maWcvaWE2NC9saW51eC5oCTIwMDYtMTItMTIgMTY6MjQ6MDcuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMS4yL2djYy9jb25maWcvaWE2NC9saW51eC5oCTIwMDctMDMtMDQgMjM6MjU6MDcuMDAwMDAwMDAwICswMTAwCitAQCAtMzcsMTMgKzM3LDE4IEBACisgLyogRGVmaW5lIHRoaXMgZm9yIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQgYmVjYXVzZSBpdCBpc24ndCBpbiB0aGUgbWFpbgorICAgIGxpbnV4LmggZmlsZS4gICovCisgCisrI2lmZGVmIFVTRV9VQ0xJQkMKKysjZGVmaW5lIEVMRl9EWU5BTUlDX0xJTktFUgkiL2xpYi9sZC11Q2xpYmMuc28uMCIKKysjZWxzZQorKyNkZWZpbmUgRUxGX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LWlhNjQuc28uMiIKKysjZW5kaWYKKyAjdW5kZWYgTElOS19TUEVDCisgI2RlZmluZSBMSU5LX1NQRUMgIlwKKyAgICV7c2hhcmVkOi1zaGFyZWR9IFwKKyAgICV7IXNoYXJlZDogXAorICAgICAleyFzdGF0aWM6IFwKKyAgICAgICAle3JkeW5hbWljOi1leHBvcnQtZHluYW1pY30gXAorLSAgICAgICV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAvbGliL2xkLWxpbnV4LWlhNjQuc28uMn19IFwKKysgICAgICAleyFkeW5hbWljLWxpbmtlcjotZHluYW1pYy1saW5rZXIgIiBFTEZfRFlOQU1JQ19MSU5LRVIgIn19IFwKKyAgICAgICAle3N0YXRpYzotc3RhdGljfX0iCisgCisgI2RlZmluZSBDUFBfU1BFQyAiJXtwb3NpeDotRF9QT1NJWF9TT1VSQ0V9ICV7cHRocmVhZDotRF9SRUVOVFJBTlR9IgorLS0tIGdjYy00LjEuMi5vcmlnL2djYy9jb25maWcvbTY4ay9saW51eC5oCTIwMDUtMDYtMjUgMDM6MjI6NDEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMS4yL2djYy9jb25maWcvbTY4ay9saW51eC5oCTIwMDctMDMtMDQgMjM6MjU6MDcuMDAwMDAwMDAwICswMTAwCitAQCAtMTIzLDEyICsxMjMsMTcgQEAKKyAKKyAvKiBJZiBFTEYgaXMgdGhlIGRlZmF1bHQgZm9ybWF0LCB3ZSBzaG91bGQgbm90IHVzZSAvbGliL2VsZi4gICovCisgCisrI2lmZGVmIFVTRV9VQ0xJQkMKKysjZGVmaW5lIEVMRl9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKysjZWxzZQorKyNkZWZpbmUgRUxGX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLnNvLjEiCisrI2VuZGlmCisgI3VuZGVmCUxJTktfU1BFQworICNkZWZpbmUgTElOS19TUEVDICItbSBtNjhrZWxmICV7c2hhcmVkfSBcCisgICAleyFzaGFyZWQ6IFwKKyAgICAgJXshc3RhdGljOiBcCisgICAgICAgJXtyZHluYW1pYzotZXhwb3J0LWR5bmFtaWN9IFwKKy0gICAgICAleyFkeW5hbWljLWxpbmtlcio6LWR5bmFtaWMtbGlua2VyIC9saWIvbGQuc28uMX19IFwKKysgICAgICAleyFkeW5hbWljLWxpbmtlcio6LWR5bmFtaWMtbGlua2VyICIgRUxGX0RZTkFNSUNfTElOS0VSICJ9fSBcCisgICAgICV7c3RhdGljfX0iCisgCisgLyogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBsaW51eC9hLm91dCAqLworLS0tIGdjYy00LjEuMi5vcmlnL2djYy9jb25maWcvbWlwcy9saW51eC5oCTIwMDYtMTItMTcgMTQ6NTc6MzEuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMS4yL2djYy9jb25maWcvbWlwcy9saW51eC5oCTIwMDctMDMtMDQgMjM6MjU6MDcuMDAwMDAwMDAwICswMTAwCitAQCAtMTA1LDYgKzEwNSwxMSBAQAorIAorIC8qIEJvcnJvd2VkIGZyb20gc3BhcmMvbGludXguaCAqLworICN1bmRlZiBMSU5LX1NQRUMKKysjaWZkZWYgVVNFX1VDTElCQworKyNkZWZpbmUgRUxGX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLXVDbGliYy5zby4wIgorKyNlbHNlCisrI2RlZmluZSBFTEZfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQuc28uMSIKKysjZW5kaWYKKyAjZGVmaW5lIExJTktfU1BFQyBcCisgICIlKGVuZGlhbl9zcGVjKSBcCisgICAle3NoYXJlZDotc2hhcmVkfSBcCitAQCAtMTEyLDcgKzExNyw3IEBACisgICAgICV7IWliY3M6IFwKKyAgICAgICAleyFzdGF0aWM6IFwKKyAgICAgICAgICV7cmR5bmFtaWM6LWV4cG9ydC1keW5hbWljfSBcCistICAgICAgICAleyFkeW5hbWljLWxpbmtlcjotZHluYW1pYy1saW5rZXIgL2xpYi9sZC5zby4xfX0gXAorKyAgICAgICAgJXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyICIgRUxGX0RZTkFNSUNfTElOS0VSICJ9fSBcCisgICAgICAgICAle3N0YXRpYzotc3RhdGljfX19IgorIAorICN1bmRlZiBTVUJUQVJHRVRfQVNNX1NQRUMKKy0tLSBnY2MtNC4xLjIub3JpZy9nY2MvY29uZmlnL3BhL3BhLWxpbnV4LmgJMjAwNy0wMS0xMiAwMzoyMzozOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4xLjIvZ2NjL2NvbmZpZy9wYS9wYS1saW51eC5oCTIwMDctMDMtMDQgMjM6MjU6MDcuMDAwMDAwMDAwICswMTAwCitAQCAtNDksMTMgKzQ5LDE4IEBACisgLyogRGVmaW5lIHRoaXMgZm9yIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQgYmVjYXVzZSBpdCBpc24ndCBpbiB0aGUgbWFpbgorICAgIGxpbnV4LmggZmlsZS4gICovCisgCisrI2lmZGVmIFVTRV9VQ0xJQkMKKysjZGVmaW5lIEVMRl9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKysjZWxzZQorKyNkZWZpbmUgRUxGX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLnNvLjEiCisrI2VuZGlmCisgI3VuZGVmIExJTktfU1BFQworICNkZWZpbmUgTElOS19TUEVDICJcCisgICAle3NoYXJlZDotc2hhcmVkfSBcCisgICAleyFzaGFyZWQ6IFwKKyAgICAgJXshc3RhdGljOiBcCisgICAgICAgJXtyZHluYW1pYzotZXhwb3J0LWR5bmFtaWN9IFwKKy0gICAgICAleyFkeW5hbWljLWxpbmtlcjotZHluYW1pYy1saW5rZXIgL2xpYi9sZC5zby4xfX0gXAorKyAgICAgICV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAiIEVMRl9EWU5BTUlDX0xJTktFUiAifX0gXAorICAgICAgICV7c3RhdGljOi1zdGF0aWN9fSIKKyAKKyAvKiBnbGliYydzIHByb2ZpbGluZyBmdW5jdGlvbnMgZG9uJ3QgbmVlZCBnY2MgdG8gYWxsb2NhdGUgY291bnRlcnMuICAqLworLS0tIGdjYy00LjEuMi5vcmlnL2djYy9jb25maWcvcnM2MDAwL2xpbnV4LmgJMjAwNi0wMi0xMCAyMTo1ODozMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4xLjIvZ2NjL2NvbmZpZy9yczYwMDAvbGludXguaAkyMDA3LTAzLTA0IDIzOjI1OjA3LjAwMDAwMDAwMCArMDEwMAorQEAgLTcyLDcgKzcyLDExIEBACisgI2RlZmluZSBMSU5LX1NUQVJUX0RFRkFVTFRfU1BFQyAiJShsaW5rX3N0YXJ0X2xpbnV4KSIKKyAKKyAjdW5kZWYJTElOS19PU19ERUZBVUxUX1NQRUMKKysjaWZkZWYgVVNFX1VDTElCQworKyNkZWZpbmUgTElOS19PU19ERUZBVUxUX1NQRUMgIiUobGlua19vc19saW51eF91Y2xpYmMpIgorKyNlbHNlCisgI2RlZmluZSBMSU5LX09TX0RFRkFVTFRfU1BFQyAiJShsaW5rX29zX2xpbnV4KSIKKysjZW5kaWYKKyAKKyAjZGVmaW5lIExJTktfR0NDX0NfU0VRVUVOQ0VfU1BFQyBcCisgICAiJXtzdGF0aWM6LS1zdGFydC1ncm91cH0gJUcgJUwgJXtzdGF0aWM6LS1lbmQtZ3JvdXB9JXshc3RhdGljOiVHfSIKKy0tLSBnY2MtNC4xLjIub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9zeXN2NC5oCTIwMDYtMDItMTAgMjE6NTg6MzMuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMS4yL2djYy9jb25maWcvcnM2MDAwL3N5c3Y0LmgJMjAwNy0wMy0wNCAyMzoyNTowOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC04NjYsNiArODY2LDcgQEAKKyAgIG1jYWxsLWxpbnV4ICA6ICUobGlua19vc19saW51eCkgICAgICAgOyBcCisgICBtY2FsbC1nbnUgICAgOiAlKGxpbmtfb3NfZ251KSAgICAgICAgIDsgXAorICAgbWNhbGwtbmV0YnNkIDogJShsaW5rX29zX25ldGJzZCkgICAgICA7IFwKKysgIG1jYWxsLWxpbnV4LXVjbGliYyA6ICUobGlua19vc19saW51eF91Y2xpYmMpOyBcCisgICBtY2FsbC1vcGVuYnNkOiAlKGxpbmtfb3Nfb3BlbmJzZCkgICAgIDsgXAorICAgICAgICAgICAgICAgIDogJShsaW5rX29zX2RlZmF1bHQpICAgICB9IgorIAorQEAgLTEwNDMsNiArMTA0NCwxMCBAQAorICAgJXtyZHluYW1pYzotZXhwb3J0LWR5bmFtaWN9IFwKKyAgICV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAvbGliL2xkLnNvLjF9fX0iCisgCisrI2RlZmluZSBMSU5LX09TX0xJTlVYX1VDTElCQ19TUEVDICItbSBlbGYzMnBwY2xpbnV4ICV7IXNoYXJlZDogJXshc3RhdGljOiBcCisrICAle3JkeW5hbWljOi1leHBvcnQtZHluYW1pY30gXAorKyAgJXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyIC9saWIvbGQtdUNsaWJjLnNvLjB9fX0iCisrCisgI2lmIGRlZmluZWQoSEFWRV9MRF9FSF9GUkFNRV9IRFIpCisgIyBkZWZpbmUgTElOS19FSF9TUEVDICIleyFzdGF0aWM6LS1laC1mcmFtZS1oZHJ9ICIKKyAjZW5kaWYKK0BAIC0xMjA5LDYgKzEyMTQsNyBAQAorICAgeyAibGlua19vc19zaW0iLAkJTElOS19PU19TSU1fU1BFQyB9LAkJCVwKKyAgIHsgImxpbmtfb3NfZnJlZWJzZCIsCQlMSU5LX09TX0ZSRUVCU0RfU1BFQyB9LAkJCVwKKyAgIHsgImxpbmtfb3NfbGludXgiLAkJTElOS19PU19MSU5VWF9TUEVDIH0sCQkJXAorKyAgeyAibGlua19vc19saW51eF91Y2xpYmMiLAlMSU5LX09TX0xJTlVYX1VDTElCQ19TUEVDIH0sCQlcCisgICB7ICJsaW5rX29zX2dudSIsCQlMSU5LX09TX0dOVV9TUEVDIH0sCQkJXAorICAgeyAibGlua19vc19uZXRic2QiLAkJTElOS19PU19ORVRCU0RfU1BFQyB9LAkJCVwKKyAgIHsgImxpbmtfb3Nfb3BlbmJzZCIsCQlMSU5LX09TX09QRU5CU0RfU1BFQyB9LAkJCVwKKy0tLSBnY2MtNC4xLjIub3JpZy9nY2MvY29uZmlnL3MzOTAvbGludXguaAkyMDA2LTEyLTEyIDE2OjI0OjA3LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjEuMi9nY2MvY29uZmlnL3MzOTAvbGludXguaAkyMDA3LTAzLTA0IDIzOjI1OjA4LjAwMDAwMDAwMCArMDEwMAorQEAgLTc3LDYgKzc3LDEzIEBACisgI2RlZmluZSBNVUxUSUxJQl9ERUZBVUxUUyB7ICJtMzEiIH0KKyAjZW5kaWYKKyAKKysjaWZkZWYgVVNFX1VDTElCQworKyNkZWZpbmUgRUxGMzFfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBFTEY2NF9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZDY0LXVDbGliYy5zby4wIgorKyNlbHNlCisrI2RlZmluZSBFTEYzMV9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC5zby4xIgorKyNkZWZpbmUgRUxGNjRfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQ2NC5zby4xIgorKyNlbmRpZgorICN1bmRlZiAgTElOS19TUEVDCisgI2RlZmluZSBMSU5LX1NQRUMgXAorICAgIiV7bTMxOi1tIGVsZl9zMzkwfSV7bTY0Oi1tIGVsZjY0X3MzOTB9IFwKK0BAIC04Niw4ICs5Myw4IEBACisgICAgICAgJXshc3RhdGljOiBcCisgCSV7cmR5bmFtaWM6LWV4cG9ydC1keW5hbWljfSBcCisgCSV7IWR5bmFtaWMtbGlua2VyOiBcCistICAgICAgICAgICV7bTMxOi1keW5hbWljLWxpbmtlciAvbGliL2xkLnNvLjF9IFwKKy0gICAgICAgICAgJXttNjQ6LWR5bmFtaWMtbGlua2VyIC9saWIvbGQ2NC5zby4xfX19fSIKKysgICAgICAgICAgJXttMzE6LWR5bmFtaWMtbGlua2VyICIgRUxGMzFfRFlOQU1JQ19MSU5LRVIgIn0gXAorKyAgICAgICAgICAle202NDotZHluYW1pYy1saW5rZXIgIiBFTEY2NF9EWU5BTUlDX0xJTktFUiAifX19fSIKKyAKKyAjZGVmaW5lIENQUF9TUEVDICIle3Bvc2l4Oi1EX1BPU0lYX1NPVVJDRX0gJXtwdGhyZWFkOi1EX1JFRU5UUkFOVH0iCisgCistLS0gZ2NjLTQuMS4yLm9yaWcvZ2NjL2NvbmZpZy9zaC9saW51eC5oCTIwMDUtMDYtMjUgMDM6MjI6NDEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMS4yL2djYy9jb25maWcvc2gvbGludXguaAkyMDA3LTAzLTA0IDIzOjI1OjA4LjAwMDAwMDAwMCArMDEwMAorQEAgLTU2LDEyICs1NiwyMSBAQAorICN1bmRlZiBTVUJUQVJHRVRfTElOS19FTVVMX1NVRkZJWAorICNkZWZpbmUgU1VCVEFSR0VUX0xJTktfRU1VTF9TVUZGSVggIl9saW51eCIKKyAjdW5kZWYgU1VCVEFSR0VUX0xJTktfU1BFQworKyNpZmRlZiBVU0VfVUNMSUJDCisrI2RlZmluZSBTVUJUQVJHRVRfTElOS19TUEVDIFwKKysgICIle3NoYXJlZDotc2hhcmVkfSBcCisrICAgJXshc3RhdGljOiBcCisrICAgICAle3JkeW5hbWljOi1leHBvcnQtZHluYW1pY30gXAorKyAgICAgJXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyIC9saWIvbGQtdUNsaWJjLnNvLjB9fSBcCisrICAgJXtzdGF0aWM6LXN0YXRpY30iCisrI2Vsc2UKKyAjZGVmaW5lIFNVQlRBUkdFVF9MSU5LX1NQRUMgXAorICAgIiV7c2hhcmVkOi1zaGFyZWR9IFwKKyAgICAleyFzdGF0aWM6IFwKKyAgICAgICV7cmR5bmFtaWM6LWV4cG9ydC1keW5hbWljfSBcCisgICAgICAleyFkeW5hbWljLWxpbmtlcjotZHluYW1pYy1saW5rZXIgL2xpYi9sZC1saW51eC5zby4yfX0gXAorICAgICV7c3RhdGljOi1zdGF0aWN9IgorKyNlbmRpZgorIAorIC8qIE91dHB1dCBhc3NlbWJsZXIgY29kZSB0byBTVFJFQU0gdG8gY2FsbCB0aGUgcHJvZmlsZXIuICAqLworIAorLS0tIGdjYy00LjEuMi5vcmlnL2djYy9jb25maWcvc3BhcmMvbGludXguaAkyMDA2LTAyLTExIDA5OjM4OjUxLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjEuMi9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgJMjAwNy0wMy0wNCAyMzoyNTowOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMjUsNiArMTI1LDExIEBACisgCisgLyogSWYgRUxGIGlzIHRoZSBkZWZhdWx0IGZvcm1hdCwgd2Ugc2hvdWxkIG5vdCB1c2UgL2xpYi9lbGYuICAqLworIAorKyNpZmRlZiBVU0VfVUNMSUJDCisrI2RlZmluZSBFTEZfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCisrI2Vsc2UKKysjZGVmaW5lIEVMRl9EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNlbmRpZgorICN1bmRlZiAgTElOS19TUEVDCisgI2RlZmluZSBMSU5LX1NQRUMgIi1tIGVsZjMyX3NwYXJjIC1ZIFAsL3Vzci9saWIgJXtzaGFyZWQ6LXNoYXJlZH0gXAorICAgJXshbW5vLXJlbGF4OiV7IXI6LXJlbGF4fX0gXAorQEAgLTEzMiw3ICsxMzcsNyBAQAorICAgICAleyFpYmNzOiBcCisgICAgICAgJXshc3RhdGljOiBcCisgICAgICAgICAle3JkeW5hbWljOi1leHBvcnQtZHluYW1pY30gXAorLSAgICAgICAgJXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyIC9saWIvbGQtbGludXguc28uMn19IFwKKysgICAgICAgICV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAiIEVMRl9EWU5BTUlDX0xJTktFUiAifX0gXAorICAgICAgICAgJXtzdGF0aWM6LXN0YXRpY319fSIKKyAKKyAvKiBUaGUgc3VuIGJ1bmRsZWQgYXNzZW1ibGVyIGRvZXNuJ3QgYWNjZXB0IC1ZZCwgKGFuZCBuZWl0aGVyIGRvZXMgZ2FzKS4KKy0tLSBnY2MtNC4xLjIub3JpZy9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaAkyMDA2LTAyLTExIDA5OjM4OjUxLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjEuMi9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaAkyMDA3LTAzLTA0IDIzOjI1OjA4LjAwMDAwMDAwMCArMDEwMAorQEAgLTE2MiwxMiArMTYyLDE3IEBACisgICB7ICJsaW5rX2FyY2hfZGVmYXVsdCIsIExJTktfQVJDSF9ERUZBVUxUX1NQRUMgfSwJICBcCisgICB7ICJsaW5rX2FyY2giLAkgTElOS19BUkNIX1NQRUMgfSwKKyAgICAgCisrI2lmZGVmIFVTRV9VQ0xJQkMKKysjZGVmaW5lIEVMRl9EWU5BTUlDX0xJTktFUgkiL2xpYi9sZC11Q2xpYmMuc28uMCIKKysjZWxzZQorKyNkZWZpbmUgRUxGX0RZTkFNSUNfTElOS0VSICAiL2xpYi9sZC1saW51eC5zby4yIgorKyNlbmRpZgorICNkZWZpbmUgTElOS19BUkNIMzJfU1BFQyAiLW0gZWxmMzJfc3BhcmMgLVkgUCwvdXNyL2xpYiAle3NoYXJlZDotc2hhcmVkfSBcCisgICAleyFzaGFyZWQ6IFwKKyAgICAgJXshaWJjczogXAorICAgICAgICV7IXN0YXRpYzogXAorICAgICAgICAgJXtyZHluYW1pYzotZXhwb3J0LWR5bmFtaWN9IFwKKy0gICAgICAgICV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAvbGliL2xkLWxpbnV4LnNvLjJ9fSBcCisrICAgICAgICAleyFkeW5hbWljLWxpbmtlcjotZHluYW1pYy1saW5rZXIgIiBFTEZfRFlOQU1JQ19MSU5LRVIgIn19IFwKKyAgICAgICAgICV7c3RhdGljOi1zdGF0aWN9fX0gXAorICIKKyAKKy0tLSBnY2MtNC4xLjIub3JpZy9saWJmZmkvY29uZmlndXJlCTIwMDctMDItMTQgMDY6MTc6MjIuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMS4yL2xpYmZmaS9jb25maWd1cmUJMjAwNy0wMy0wNCAyMzoyNTowOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zNDU3LDYgKzM0NTcsMTEgQEAKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorK2xpbnV4LXVjbGliYyopCisrICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL2xpYi9saWJ1Q2xpYmMtKi5zb2AKKysgIDs7CisrCisgbmV0YnNkKiB8IGtuZXRic2QqLWdudSkKKyAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9cLl0rXC5zb1wuWzAtOV0rXC5bMC05XSskJworLS0tIGdjYy00LjEuMi5vcmlnL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQkyMDA2LTEyLTA2IDExOjU1OjM3LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjEuMi9saWJnZm9ydHJhbi9jb25maWd1cmUJMjAwNy0wMy0wNCAyMzoyNTowOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zNjk5LDYgKzM2OTksMTEgQEAKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorK2xpbnV4LXVjbGliYyopCisrICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL2xpYi9saWJ1Q2xpYmMtKi5zb2AKKysgIDs7CisrCisgbmV0YnNkKiB8IGtuZXRic2QqLWdudSkKKyAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9cLl0rXC5zb1wuWzAtOV0rXC5bMC05XSskJworLS0tIGdjYy00LjEuMi5vcmlnL2xpYmphdmEvY29uZmlndXJlCTIwMDctMDItMTQgMDY6MTc6MjIuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMS4yL2xpYmphdmEvY29uZmlndXJlCTIwMDctMDMtMDQgMjM6MjU6MDguMDAwMDAwMDAwICswMTAwCitAQCAtNTEzNyw2ICs1MTM3LDExIEBACisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKKytsaW51eC11Y2xpYmMqKQorKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKysgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC9saWIvbGlidUNsaWJjLSouc29gCisrICA7OworKworIG5ldGJzZCogfCBrbmV0YnNkKi1nbnUpCisgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXC5dK1wuc29cLlswLTldK1wuWzAtOV0rJCcKKy0tLSBnY2MtNC4xLjIub3JpZy9saWJtdWRmbGFwL2NvbmZpZ3VyZQkyMDA1LTEwLTA1IDAxOjU0OjM4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjEuMi9saWJtdWRmbGFwL2NvbmZpZ3VyZQkyMDA3LTAzLTA0IDIzOjI1OjA4LjAwMDAwMDAwMCArMDEwMAorQEAgLTUzODIsNiArNTM4MiwxMSBAQAorICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgIDs7CisgCisrbGludXgtdWNsaWJjKikKKysgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisrICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvbGliL2xpYnVDbGliYy0qLnNvYAorKyAgOzsKKysKKyBuZXRic2QqIHwga25ldGJzZCotZ251KQorICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL1wuXStcLnNvXC5bMC05XStcLlswLTldKyQnCistLS0gZ2NjLTQuMS4yLm9yaWcvbGlib2JqYy9jb25maWd1cmUJMjAwNy0wMi0xNCAwNjoxNzoyMi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4xLjIvbGlib2JqYy9jb25maWd1cmUJMjAwNy0wMy0wNCAyMzoyNTowOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zMzEyLDYgKzMzMTIsMTEgQEAKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorK2xpbnV4LXVjbGliYyopCisrICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL2xpYi9saWJ1Q2xpYmMtKi5zb2AKKysgIDs7CisrCisgbmV0YnNkKiB8IGtuZXRic2QqLWdudSkKKyAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9cLl0rXC5zb1wuWzAtOV0rXC5bMC05XSskJworLS0tIGdjYy00LjEuMi5vcmlnL2xpYnRvb2wubTQJMjAwNS0wNy0xNiAwNDozMDo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4xLjIvbGlidG9vbC5tNAkyMDA3LTAzLTA0IDIzOjI1OjA4LjAwMDAwMDAwMCArMDEwMAorQEAgLTc0Myw2ICs3NDMsMTEgQEAKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorK2xpbnV4LXVjbGliYyopCisrICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL2xpYi9saWJ1Q2xpYmMtKi5zb2AKKysgIDs7CisrCisgbmV0YnNkKiB8IGtuZXRic2QqLWdudSkKKyAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgIFtsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXC5dK1wuc29cLlswLTldK1wuWzAtOV0rJCddCistLS0gZ2NjLTQuMS4yLm9yaWcvbHRjb25maWcJMjAwNi0wNy0wNCAyMjozMDozNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4xLjIvbHRjb25maWcJMjAwNy0wMy0wNCAyMzoyNTowOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC02MDMsNiArNjAzLDcgQEAKKyAKKyAjIFRyYW5zZm9ybSBsaW51eCogdG8gKi0qLWxpbnV4LWdudSosIHRvIHN1cHBvcnQgb2xkIGNvbmZpZ3VyZSBzY3JpcHRzLgorIGNhc2UgJGhvc3Rfb3MgaW4KKytsaW51eC11Y2xpYmMqKSA7OworIGxpbnV4LWdudSopIDs7CisgbGludXgqKSBob3N0PWBlY2hvICRob3N0IHwgc2VkICdzL15cKC4qLS4qLWxpbnV4XClcKC4qXCkkL1wxLWdudVwyLydgCisgZXNhYworQEAgLTEyNzQsNiArMTI3NSwyMyBAQAorICAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKKyAgIDs7CisgCisrbGludXgtdWNsaWJjKikKKysgIHZlcnNpb25fdHlwZT1saW51eAorKyAgbmVlZF9saWJfcHJlZml4PW5vCisrICBuZWVkX3ZlcnNpb249bm8KKysgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uc28kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJG1ham9yICRsaWJuYW1lLnNvJworKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LnNvJG1ham9yJworKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKKysgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisrICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKysgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisrICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgorKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworKyAgIyBBc3N1bWUgdXNpbmcgdGhlIHVDbGliYyBkeW5hbWljIGxpbmtlci4KKysgIGR5bmFtaWNfbGlua2VyPSJ1Q2xpYmMgbGQuc28iCisrICA7OworKworIG5ldGJzZCopCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIG5lZWRfdmVyc2lvbj1ubworLS0tIGdjYy00LjEuMi5vcmlnL3psaWIvY29uZmlndXJlCTIwMDUtMDktMTIgMTk6MDI6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMS4yL3psaWIvY29uZmlndXJlCTIwMDctMDMtMDQgMjM6MjU6MDguMDAwMDAwMDAwICswMTAwCitAQCAtMzQyNiw2ICszNDI2LDExIEBACisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKKytsaW51eC11Y2xpYmMqKQorKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKysgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC9saWIvbGlidUNsaWJjLSouc29gCisrICA7OworKworIG5ldGJzZCogfCBrbmV0YnNkKi1nbnUpCisgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXC5dK1wuc29cLlswLTldK1wuWzAtOV0rJCcKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4xLjIvMTEwLWFybS1lYWJpLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjEuMi8xMTAtYXJtLWVhYmkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE3YTM2ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4xLjIvMTEwLWFybS1lYWJpLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKKy0tLSBnY2MtNC4xLjIub3JpZy9nY2MvY29uZmlnLmdjYwkyMDA3LTAzLTA0IDIzOjI1OjM3LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjEuMi9nY2MvY29uZmlnLmdjYwkyMDA3LTAzLTA0IDIzOjI1OjQ1LjAwMDAwMDAwMCArMDEwMAorQEAgLTY3NCw3ICs2NzQsNyBAQAorIAl0bV9maWxlPSJkYnhlbGYuaCBlbGZvcy5oIGxpbnV4LmggYXJtL2VsZi5oIGFybS9saW51eC1nYXMuaCBhcm0vbGludXgtZWxmLmgiIAorIAl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IHQtbGludXggYXJtL3QtYXJtIgorIAljYXNlICR7dGFyZ2V0fSBpbgorLQlhcm0qLSotbGludXgtZ251ZWFiaSkKKysJYXJtKi0qLWxpbnV4LWdudWVhYmkgfCBhcm0qLSotbGludXgtdWNsaWJjZ251ZWFiaSkKKyAJICAgIHRtX2ZpbGU9IiR0bV9maWxlIGFybS9icGFiaS5oIGFybS9saW51eC1lYWJpLmgiCisgCSAgICB0bWFrZV9maWxlPSIkdG1ha2VfZmlsZSBhcm0vdC1hcm0tZWxmIGFybS90LWJwYWJpIGFybS90LWxpbnV4LWVhYmkiCisgICAJICAgICMgVGhlIEJQQUJJIGxvbmcgbG9uZyBkaXZtb2QgZnVuY3Rpb25zIHJldHVybiBhIDEyOC1iaXQgdmFsdWUgaW4gCistLS0gZ2NjLTQuMS4yLm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCTIwMDUtMTEtMTUgMTU6MzI6MTMuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMS4yL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAkyMDA3LTAzLTA0IDIzOjI1OjQ1LjAwMDAwMDAwMCArMDEwMAorQEAgLTUzLDcgKzUzLDExIEBACisgLyogVXNlIGxkLWxpbnV4LnNvLjMgc28gdGhhdCBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHJ1biAiY2xhc3NpYyIKKyAgICBHTlUvTGludXggYmluYXJpZXMgb24gYW4gRUFCSSBzeXN0ZW0uICAqLworICN1bmRlZiBMSU5VWF9UQVJHRVRfSU5URVJQUkVURVIKKysjaWZkZWYgVVNFX1VDTElCQworKyNkZWZpbmUgTElOVVhfVEFSR0VUX0lOVEVSUFJFVEVSICIvbGliL2xkLXVDbGliYy5zby4wIgorKyNlbHNlCisgI2RlZmluZSBMSU5VWF9UQVJHRVRfSU5URVJQUkVURVIgIi9saWIvbGQtbGludXguc28uMyIKKysjZW5kaWYKKyAKKyAvKiBBdCB0aGlzIHBvaW50LCBicGFiaS5oIHdpbGwgaGF2ZSBjbG9iYmVyZWQgTElOS19TUEVDLiAgV2Ugd2FudCB0bworICAgIHVzZSB0aGUgR05VL0xpbnV4IHZlcnNpb24sIG5vdCB0aGUgZ2VuZXJpYyBCUEFCSSB2ZXJzaW9uLiAgKi8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4xLjIvMTIwLXVjbGliYy1sb2NhbGUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMS4yLzEyMC11Y2xpYmMtbG9jYWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNWExODMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMS4yLzEyMC11Y2xpYmMtbG9jYWxlLnBhdGNoCkBAIC0wLDAgKzEsMzIzOSBAQAorLS0tIGdjYy00LjEuMi5vcmlnL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQJMjAwNy0wMS0yOSAxMTo1MTowMS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4xLjIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAkyMDA3LTAzLTA0IDIzOjMxOjU3LjAwMDAwMDAwMCArMDEwMAorQEAgLTEwMDMsNyArMTAwMyw3IEBACisgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBDIGxvY2FsZSB0byB1c2VdKQorICAgR0xJQkNYWF9FTkFCTEUoY2xvY2FsZSxhdXRvLFtAPDpAPU1PREVMQDo+QF0sCisgICAgIFt1c2UgTU9ERUwgZm9yIHRhcmdldCBsb2NhbGUgcGFja2FnZV0sCistICAgIFtwZXJtaXQgZ2VuZXJpY3xnbnV8aWVlZV8xMDAzLjEtMjAwMXx5ZXN8bm98YXV0b10pCisrICAgIFtwZXJtaXQgZ2VuZXJpY3xnbnV8aWVlZV8xMDAzLjEtMjAwMXx1Y2xpYmN8eWVzfG5vfGF1dG9dKQorICAgCisgICAjIElmIHRoZXkgZGlkbid0IHVzZSB0aGlzIG9wdGlvbiBzd2l0Y2gsIG9yIGlmIHRoZXkgc3BlY2lmaWVkIC0tZW5hYmxlCisgICAjIHdpdGggbm8gc3BlY2lmaWMgbW9kZWwsIHdlJ2xsIGhhdmUgdG8gbG9vayBmb3Igb25lLiAgSWYgdGhleQorQEAgLTEwMTksNiArMTAxOSw5IEBACisgICAjIERlZmF1bHQgdG8gImdlbmVyaWMiLgorICAgaWYgdGVzdCAkZW5hYmxlX2Nsb2NhbGVfZmxhZyA9IGF1dG87IHRoZW4KKyAgICAgY2FzZSAke3RhcmdldF9vc30gaW4KKysgICAgICAqLXVjbGliYyopCisrICAgICAgICBlbmFibGVfY2xvY2FsZV9mbGFnPXVjbGliYworKyAgICAgICAgOzsKKyAgICAgICBsaW51eCogfCBnbnUqIHwga2ZyZWVic2QqLWdudSB8IGtuZXRic2QqLWdudSkKKyAgICAgICAgIEFDX0VHUkVQX0NQUChbX0dMSUJDWFhfb2tdLCBbCisgICAgICAgICAjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KK0BAIC0xMTYyLDYgKzExNjUsNDAgQEAKKyAgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjCisgICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorICAgICAgIDs7CisrICAgIHVjbGliYykKKysgICAgICBBQ19NU0dfUkVTVUxUKHVjbGliYykKKysKKysgICAgICAjIERlY2xhcmUgaW50ZW50aW9uIHRvIHVzZSBnZXR0ZXh0LCBhbmQgYWRkIHN1cHBvcnQgZm9yIHNwZWNpZmljCisrICAgICAgIyBsYW5ndWFnZXMuCisrICAgICAgIyBGb3Igc29tZSByZWFzb24sIEFMTF9MSU5HVUFTIGhhcyB0byBiZSBiZWZvcmUgQU0tR05VLUdFVFRFWFQKKysgICAgICBBTExfTElOR1VBUz0iZGUgZnIiCisrCisrICAgICAgIyBEb24ndCBjYWxsIEFNLUdOVS1HRVRURVhUIGhlcmUuIEluc3RlYWQsIGFzc3VtZSBnbGliYy4KKysgICAgICBBQ19DSEVDS19QUk9HKGNoZWNrX21zZ2ZtdCwgbXNnZm10LCB5ZXMsIG5vKQorKyAgICAgIGlmIHRlc3QgeCIkY2hlY2tfbXNnZm10IiA9IHgieWVzIiAmJiB0ZXN0IHgiJGVuYWJsZV9ubHMiID0geCJ5ZXMiOyB0aGVuCisrICAgICAgICBVU0VfTkxTPXllcworKyAgICAgIGZpCisrICAgICAgIyBFeHBvcnQgdGhlIGJ1aWxkIG9iamVjdHMuCisrICAgICAgZm9yIGxpbmcgaW4gJEFMTF9MSU5HVUFTOyBkbyBcCisrICAgICAgICBnbGliY3h4X01PRklMRVM9IiRnbGliY3h4X01PRklMRVMgJGxpbmcubW8iOyBcCisrICAgICAgICBnbGliY3h4X1BPRklMRVM9IiRnbGliY3h4X1BPRklMRVMgJGxpbmcucG8iOyBcCisrICAgICAgZG9uZQorKyAgICAgIEFDX1NVQlNUKGdsaWJjeHhfTU9GSUxFUykKKysgICAgICBBQ19TVUJTVChnbGliY3h4X1BPRklMRVMpCisrCisrICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysgICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisrICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisrICAgICAgQ0NUWVBFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKyAgICAgIDs7CisgICBlc2FjCisgCisgICAjIFRoaXMgaXMgd2hlcmUgdGhlIHRlc3RzdWl0ZSBsb29rcyBmb3IgbG9jYWxlIGNhdGFsb2dzLCB1c2luZyB0aGUKKy0tLSBnY2MtNC4xLjIub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4xLjIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCTIwMDctMDMtMDQgMjM6MzE6NTcuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDYzIEBACisrLy8gUHJvdG90eXBlcyBmb3IgR0xJQkMgdGhyZWFkIGxvY2FsZSBfXy1wcmVmaXhlZCBmdW5jdGlvbnMgLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vIFdyaXR0ZW4gYnkgSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKysjaW5jbHVkZSA8Y2xvY2FsZT4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBjbGVhbiB0aGlzIHVwCisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorK2V4dGVybiAiQyIgX190eXBlb2YobmxfbGFuZ2luZm9fbCkgX19ubF9sYW5naW5mb19sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RyY29sbF9sKSBfX3N0cmNvbGxfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cmZ0aW1lX2wpIF9fc3RyZnRpbWVfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvZF9sKSBfX3N0cnRvZF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9mX2wpIF9fc3RydG9mX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2xkX2wpIF9fc3RydG9sZF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RyeGZybV9sKSBfX3N0cnhmcm1fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKG5ld2xvY2FsZSkgX19uZXdsb2NhbGU7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihmcmVlbG9jYWxlKSBfX2ZyZWVsb2NhbGU7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihkdXBsb2NhbGUpIF9fZHVwbG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YodXNlbG9jYWxlKSBfX3VzZWxvY2FsZTsKKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKytleHRlcm4gIkMiIF9fdHlwZW9mKGlzd2N0eXBlX2wpIF9faXN3Y3R5cGVfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHRvd2xvd2VyX2wpIF9fdG93bG93ZXJfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHRvd3VwcGVyX2wpIF9fdG93dXBwZXJfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc2NvbGxfbCkgX193Y3Njb2xsX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3NmdGltZV9sKSBfX3djc2Z0aW1lX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3N4ZnJtX2wpIF9fd2NzeGZybV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2N0eXBlX2wpIF9fd2N0eXBlX2w7CisrI2VuZGlmIAorKworKyNlbmRpZiAvLyBHTElCQyAyLjMgYW5kIGxhdGVyCistLS0gZ2NjLTQuMS4yLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMS4yL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwkyMDA3LTAzLTA0IDIzOjMxOjU3LjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwxNTIgQEAKKysvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1IAorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjggIFN0YW5kYXJkIGxvY2FsZSBjYXRlZ29yaWVzLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8Y2Vycm5vPiAgLy8gRm9yIGVycm5vCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8c3RkZXhjZXB0PgorKyNpbmNsdWRlIDxsYW5naW5mby5oPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19zdHJ0b2xfbChTLCBFLCBCLCBMKSAgICAgIHN0cnRvbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b3VsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvdWwoKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG9sbF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b2xsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvdWxsX2woUywgRSwgQiwgTCkgICAgc3RydG91bGwoKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG9mX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2YoKFMpLCAoRSkpCisrI2RlZmluZSBfX3N0cnRvZF9sKFMsIEUsIEwpICAgICAgICAgc3RydG9kKChTKSwgKEUpKQorKyNkZWZpbmUgX19zdHJ0b2xkX2woUywgRSwgTCkgICAgICAgIHN0cnRvbGQoKFMpLCAoRSkpCisrI3dhcm5pbmcgc2hvdWxkIGR1bW15IF9fbmV3bG9jYWxlIGNoZWNrIGZvciBDfFBPU0lYID8KKysjZGVmaW5lIF9fbmV3bG9jYWxlKGEsIGIsIGMpICAgICAgICBOVUxMCisrI2RlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCisrI2RlZmluZSBfX2R1cGxvY2FsZShhKSAgICAgICAgICAgICAgX19jX2xvY2FsZSgpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZCAKKyt7CisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBmbG9hdCYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCV9fdiA9IF9fZjsKKysgICAgICBlbHNlCisrCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCAKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19kOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGxvbmcgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCV9fdiA9IF9fbGQ7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysgICAgfQorKworKyAgdm9pZAorKyAgbG9jYWxlOjpmYWNldDo6X1NfY3JlYXRlX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYywgY29uc3QgY2hhciogX19zLCAKKysJCQkJICAgIF9fY19sb2NhbGUgX19vbGQpCisrICB7CisrICAgIF9fY2xvYyA9IF9fbmV3bG9jYWxlKDEgPDwgTENfQUxMLCBfX3MsIF9fb2xkKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBpZiAoIV9fY2xvYykKKysgICAgICB7CisrCS8vIFRoaXMgbmFtZWQgbG9jYWxlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgT1MuCisrCV9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oImxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZSAiCisrCQkJICAgICAgIm5hbWUgbm90IHZhbGlkIikpOworKyAgICAgIH0KKysjZW5kaWYKKysgIH0KKysgIAorKyAgdm9pZAorKyAgbG9jYWxlOjpmYWNldDo6X1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICB7CisrICAgIGlmIChfX2Nsb2MgJiYgX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorKyAgICAgIF9fZnJlZWxvY2FsZShfX2Nsb2MpOyAKKysgIH0KKysKKysgIF9fY19sb2NhbGUKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKysgIHsgcmV0dXJuIF9fZHVwbG9jYWxlKF9fY2xvYyk7IH0KKyt9IC8vIG5hbWVzcGFjZSBzdGQKKysKKytuYW1lc3BhY2UgX19nbnVfY3h4CisreworKyAgY29uc3QgY2hhciogY29uc3QgY2F0ZWdvcnlfbmFtZXNbNiArIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTXSA9CisrICAgIHsKKysgICAgICAiTENfQ1RZUEUiLCAKKysgICAgICAiTENfTlVNRVJJQyIsCisrICAgICAgIkxDX1RJTUUiLCAKKysgICAgICAiTENfQ09MTEFURSIsIAorKyAgICAgICJMQ19NT05FVEFSWSIsCisrICAgICAgIkxDX01FU1NBR0VTIiwgCisrI2lmIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTICE9IDAKKysgICAgICAiTENfUEFQRVIiLCAKKysgICAgICAiTENfTkFNRSIsIAorKyAgICAgICJMQ19BRERSRVNTIiwKKysgICAgICAiTENfVEVMRVBIT05FIiwgCisrICAgICAgIkxDX01FQVNVUkVNRU5UIiwgCisrICAgICAgIkxDX0lERU5USUZJQ0FUSU9OIiAKKysjZW5kaWYKKysgICAgfTsKKyt9CisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIGNvbnN0IGNoYXIqIGNvbnN0KiBjb25zdCBsb2NhbGU6Ol9TX2NhdGVnb3JpZXMgPSBfX2dudV9jeHg6OmNhdGVnb3J5X25hbWVzOworK30gIC8vIG5hbWVzcGFjZSBzdGQKKy0tLSBnY2MtNC4xLjIub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjEuMi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAkyMDA3LTAzLTA0IDIzOjMxOjU3LjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwxMTcgQEAKKysvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjggIFN0YW5kYXJkIGxvY2FsZSBjYXRlZ29yaWVzLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaWZuZGVmIF9DX0xPQ0FMRV9ICisrI2RlZmluZSBfQ19MT0NBTEVfSCAxCisrCisrI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorKworKyNpbmNsdWRlIDxjc3RyaW5nPiAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c3RybGVuCisrI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzbnByaW50ZiBvciBzdGQ6OnNwcmludGYKKysjaW5jbHVkZSA8Y2xvY2FsZT4KKysjaW5jbHVkZSA8bGFuZ2luZm8uaD4JCS8vIEZvciBjb2RlY3Z0CisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrI2luY2x1ZGUgPGljb252Lmg+CQkvLyBGb3IgY29kZWN2dCB1c2luZyBpY29udiwgaWNvbnZfdAorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyNpbmNsdWRlIDxsaWJpbnRsLmg+IAkJLy8gRm9yIG1lc3NhZ2VzCisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgd2hhdCBpcyBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgZm9yCisrI2VuZGlmCisrI2RlZmluZSBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgMQorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBjYXRlZ29yaWVzCisrI2VuZGlmCisrLy8gI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyA2CisrI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwCisrIAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrbmFtZXNwYWNlIF9fZ251X2N4eAorK3sKKysgIGV4dGVybiAiQyIgX190eXBlb2YodXNlbG9jYWxlKSBfX3VzZWxvY2FsZTsKKyt9CisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgdHlwZWRlZiBfX2xvY2FsZV90CQlfX2NfbG9jYWxlOworKyNlbHNlCisrICB0eXBlZGVmIGludCoJCQlfX2NfbG9jYWxlOworKyNlbmRpZgorKworKyAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgX1R2IHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgorKyAgLy8gc3RyaW5nLiAgSWYgc25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworKyAgLy8gdGhlIHVuc2FmZSBzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKysgIC8vIGJlIGF2b2lkZWQuCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CisrICAgIGludAorKyAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LCAKKysJCSAgICAgY29uc3QgaW50IF9fc2l6ZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpLAorKwkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX3ByZWMpCisrICAgIHsKKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjKQorKyAgICB7CisrIyBpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBjaGFyKiBfX29sZCA9IHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX29sZCkgKyAxXTsKKysgICAgICBzdGQ6OnN0cmNweShfX3NhdiwgX19vbGQpOworKyAgICAgIHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgIkMiKTsKKysjIGVuZGlmCisrI2VuZGlmCisrCisrICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjpzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19wcmVjLCBfX3YpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7CisrI2VsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisrI2VuZGlmCisrICAgICAgcmV0dXJuIF9fcmV0OworKyAgICB9CisrfQorKworKyNlbmRpZgorLS0tIGdjYy00LjEuMi5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4xLjIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYwkyMDA3LTAzLTA0IDIzOjMxOjU3LjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwzMDYgQEAKKysvLyBzdGQ6OmNvZGVjdnQgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi4xLjUgLSBUZW1wbGF0ZSBjbGFzcyBjb2RlY3Z0CisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIFNwZWNpYWxpemF0aW9ucy4KKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sIAorKwkgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCisrCSBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAorKwkgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CisrICB7CisrICAgIHJlc3VsdCBfX3JldCA9IG9rOworKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysKKysgICAgLy8gd2NzbnJ0b21icyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKysgICAgLy8gaW4gY2FzZSB3ZSBmYWxsIGJhY2sgdG8gd2NydG9tYiBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogd2NzbnJ0b21icyBpcyBhIEdOVSBleHRlbnNpb24KKysgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9fZnJvbSwgX190b19uZXh0ID0gX190bzsKKysJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAorKwkgJiYgX19yZXQgPT0gb2s7KQorKyAgICAgIHsKKysJY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQgPSB3bWVtY2hyKF9fZnJvbV9uZXh0LCBMJ1wwJywKKysJCQkJCQkgICAgICBfX2Zyb21fZW5kIC0gX19mcm9tX25leHQpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7CisrCisrCV9fZnJvbSA9IF9fZnJvbV9uZXh0OworKwljb25zdCBzaXplX3QgX19jb252ID0gd2NzbnJ0b21icyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKKysJCQkJCSBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCisrCQkJCQkgX190b19lbmQgLSBfX3RvX25leHQsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gd2NydG9tYi4KKysJICAgIGZvciAoOyBfX2Zyb20gPCBfX2Zyb21fbmV4dDsgKytfX2Zyb20pCisrCSAgICAgIF9fdG9fbmV4dCArPSB3Y3J0b21iKF9fdG9fbmV4dCwgKl9fZnJvbSwgJl9fdG1wX3N0YXRlKTsKKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJICAgIF9fcmV0ID0gZXJyb3I7CisrCSAgfQorKwllbHNlIGlmIChfX2Zyb21fbmV4dCAmJiBfX2Zyb21fbmV4dCA8IF9fZnJvbV9jaHVua19lbmQpCisrCSAgeworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgIH0KKysKKysJaWYgKF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3JldCA9PSBvaykKKysJICB7CisrCSAgICBleHRlcm5fdHlwZSBfX2J1ZltNQl9MRU5fTUFYXTsKKysJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKKysJICAgIGNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3J0b21iKF9fYnVmLCAqX19mcm9tX25leHQsICZfX3RtcF9zdGF0ZSk7CisrCSAgICBpZiAoX19jb252ID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihfX3RvX2VuZCAtIF9fdG9fbmV4dCkpCisrCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICAgIGVsc2UKKysJICAgICAgeworKwkJbWVtY3B5KF9fdG9fbmV4dCwgX19idWYsIF9fY29udik7CisrCQlfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCQlfX3RvX25leHQgKz0gX19jb252OworKwkJKytfX2Zyb21fbmV4dDsKKysJICAgICAgfQorKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7IAorKyAgfQorKyAgCisrICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sIAorKwljb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKysJaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKKysJaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CisrICB7CisrICAgIHJlc3VsdCBfX3JldCA9IG9rOworKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysKKysgICAgLy8gbWJzbnJ0b3djcyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKysgICAgLy8gaW4gY2FzZSB3ZSBzdG9yZSBhIEwnXDAnIGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiBtYnNucnRvd2NzIGlzIGEgR05VIGV4dGVuc2lvbgorKyAgICBmb3IgKF9fZnJvbV9uZXh0ID0gX19mcm9tLCBfX3RvX25leHQgPSBfX3RvOworKwkgX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fdG9fbmV4dCA8IF9fdG9fZW5kCisrCSAmJiBfX3JldCA9PSBvazspCisrICAgICAgeworKwljb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZDsKKysJX19mcm9tX2NodW5rX2VuZCA9IHN0YXRpY19jYXN0PGNvbnN0IGV4dGVybl90eXBlKj4obWVtY2hyKF9fZnJvbV9uZXh0LCAnXDAnLAorKwkJCQkJCQkJICBfX2Zyb21fZW5kCisrCQkJCQkJCQkgIC0gX19mcm9tX25leHQpKTsKKysJaWYgKCFfX2Zyb21fY2h1bmtfZW5kKQorKwkgIF9fZnJvbV9jaHVua19lbmQgPSBfX2Zyb21fZW5kOworKworKwlfX2Zyb20gPSBfX2Zyb21fbmV4dDsKKysJc2l6ZV90IF9fY29udiA9IG1ic25ydG93Y3MoX190b19uZXh0LCAmX19mcm9tX25leHQsCisrCQkJCSAgIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb21fbmV4dCwKKysJCQkJICAgX190b19lbmQgLSBfX3RvX25leHQsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gbWJydG93Yy4KKysJICAgIGZvciAoOzsgKytfX3RvX25leHQsIF9fZnJvbSArPSBfX2NvbnYpCisrCSAgICAgIHsKKysJCV9fY29udiA9IG1icnRvd2MoX190b19uZXh0LCBfX2Zyb20sIF9fZnJvbV9lbmQgLSBfX2Zyb20sCisrCQkJCSAmX190bXBfc3RhdGUpOworKwkJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKQorKwkJICAgIHx8IF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSkKKysJCSAgYnJlYWs7CisrCSAgICAgIH0KKysJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tOworKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOwkgICAgCisrCSAgICBfX3JldCA9IGVycm9yOworKwkgIH0KKysJZWxzZSBpZiAoX19mcm9tX25leHQgJiYgX19mcm9tX25leHQgPCBfX2Zyb21fY2h1bmtfZW5kKQorKwkgIHsKKysJICAgIC8vIEl0IGlzIHVuY2xlYXIgd2hhdCB0byByZXR1cm4gaW4gdGhpcyBjYXNlIChzZWUgRFIgMzgyKS4gCisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tX2NodW5rX2VuZDsKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgfQorKworKwlpZiAoX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fcmV0ID09IG9rKQorKwkgIHsKKysJICAgIGlmIChfX3RvX25leHQgPCBfX3RvX2VuZCkKKysJICAgICAgeworKwkJLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MKKysJCV9fdG1wX3N0YXRlID0gX19zdGF0ZTsJCQorKwkJKytfX2Zyb21fbmV4dDsKKysJCSpfX3RvX25leHQrKyA9IEwnXDAnOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OyAKKysgIH0KKysKKysgIGludCAKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkKKysgIHsKKysgICAgLy8gWFhYIFRoaXMgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGF0IHRoZSBlbmNvZGluZyBpcworKyAgICAvLyBzdGF0ZWxlc3MgYW5kIGlzIGVpdGhlciBzaW5nbGUtYnl0ZSBvciB2YXJpYWJsZS13aWR0aC4KKysgICAgaW50IF9fcmV0ID0gMDsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrICAgIGlmIChNQl9DVVJfTUFYID09IDEpCisrICAgICAgX19yZXQgPSAxOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfSAgCisrCisrICBpbnQgCisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrICAgIC8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzLgorKyAgICBpbnQgX19yZXQgPSBNQl9DVVJfTUFYOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKyAgCisrICBpbnQgCisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fbGVuZ3RoKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCisrCSAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QKKysgIHsKKysgICAgaW50IF9fcmV0ID0gMDsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIG1ic25ydG93Y3MgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2UgYWR2YW5jZSBwYXN0IGl0IGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiBtYnNucnRvd2NzIGlzIGEgR05VIGV4dGVuc2lvbgorKyAgCisrICAgIC8vIEEgZHVtbXkgaW50ZXJuYWwgYnVmZmVyIGlzIG5lZWRlZCBpbiBvcmRlciBmb3IgbWJzbnJ0b2N3cyB0byBjb25zaWRlcgorKyAgICAvLyBpdHMgZm91cnRoIHBhcmFtZXRlciAoaXQgd291bGRuJ3Qgd2l0aCBOVUxMIGFzIGZpcnN0IHBhcmFtZXRlcikuCisrICAgIHdjaGFyX3QqIF9fdG8gPSBzdGF0aWNfY2FzdDx3Y2hhcl90Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2Yod2NoYXJfdCkgCisrCQkJCQkJCSAgICogX19tYXgpKTsKKysgICAgd2hpbGUgKF9fZnJvbSA8IF9fZW5kICYmIF9fbWF4KQorKyAgICAgIHsKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQ7CisrCV9fZnJvbV9jaHVua19lbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KG1lbWNocihfX2Zyb20sICdcMCcsCisrCQkJCQkJCQkgIF9fZW5kCisrCQkJCQkJCQkgIC0gX19mcm9tKSk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19lbmQ7CisrCisrCWNvbnN0IGV4dGVybl90eXBlKiBfX3RtcF9mcm9tID0gX19mcm9tOworKwlzaXplX3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvLCAmX19mcm9tLAorKwkJCQkgICBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tLAorKwkJCQkgICBfX21heCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyBtYnJ0b3djLgorKwkgICAgZm9yIChfX2Zyb20gPSBfX3RtcF9mcm9tOzsgX19mcm9tICs9IF9fY29udikKKysJICAgICAgeworKwkJX19jb252ID0gbWJydG93YyhOVUxMLCBfX2Zyb20sIF9fZW5kIC0gX19mcm9tLAorKwkJCQkgJl9fdG1wX3N0YXRlKTsKKysJCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkKKysJCSAgICB8fCBfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpCisrCQkgIGJyZWFrOworKwkgICAgICB9CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCSAgICBfX3JldCArPSBfX2Zyb20gLSBfX3RtcF9mcm9tOworKwkgICAgYnJlYWs7CisrCSAgfQorKwlpZiAoIV9fZnJvbSkKKysJICBfX2Zyb20gPSBfX2Zyb21fY2h1bmtfZW5kOworKwkKKysJX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKKysJX19tYXggLT0gX19jb252OworKworKwlpZiAoX19mcm9tIDwgX19lbmQgJiYgX19tYXgpCisrCSAgeworKwkgICAgLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MKKysJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKKysJICAgICsrX19mcm9tOworKwkgICAgKytfX3JldDsKKysJICAgIC0tX19tYXg7CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsgCisrICB9CisrI2VuZGlmCisrfQorLS0tIGdjYy00LjEuMi5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4xLjIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYwkyMDA3LTAzLTA0IDIzOjMxOjU3LjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSw4MCBAQAorKy8vIHN0ZDo6Y29sbGF0ZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjQuMS4yICBjb2xsYXRlIHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorKyNkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyNkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKysjZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gVGhlc2UgYXJlIGJhc2ljYWxseSBleHRlbnNpb25zIHRvIGNoYXJfdHJhaXRzLCBhbmQgcGVyaGFwcyBzaG91bGQKKysgIC8vIGJlIHB1dCB0aGVyZSBpbnN0ZWFkIG9mIGhlcmUuCisrICB0ZW1wbGF0ZTw+CisrICAgIGludCAKKysgICAgY29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiBfX29uZSwgY29uc3QgY2hhciogX190d28pIGNvbnN0CisrICAgIHsgCisrICAgICAgaW50IF9fY21wID0gX19zdHJjb2xsX2woX19vbmUsIF9fdHdvLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsKKysgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDApOworKyAgICB9CisrICAKKysgIHRlbXBsYXRlPD4KKysgICAgc2l6ZV90CisrICAgIGNvbGxhdGU8Y2hhcj46Ol9NX3RyYW5zZm9ybShjaGFyKiBfX3RvLCBjb25zdCBjaGFyKiBfX2Zyb20sIAorKwkJCQlzaXplX3QgX19uKSBjb25zdCAKKysgICAgeyByZXR1cm4gX19zdHJ4ZnJtX2woX190bywgX19mcm9tLCBfX24sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIGludCAKKysgICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fY29tcGFyZShjb25zdCB3Y2hhcl90KiBfX29uZSwgCisrCQkJCSBjb25zdCB3Y2hhcl90KiBfX3R3bykgY29uc3QKKysgICAgeworKyAgICAgIGludCBfX2NtcCA9IF9fd2NzY29sbF9sKF9fb25lLCBfX3R3bywgX01fY19sb2NhbGVfY29sbGF0ZSk7CisrICAgICAgcmV0dXJuIChfX2NtcCA+PiAoOCAqIHNpemVvZiAoaW50KSAtIDIpKSB8IChfX2NtcCAhPSAwKTsKKysgICAgfQorKyAgCisrICB0ZW1wbGF0ZTw+CisrICAgIHNpemVfdAorKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV90cmFuc2Zvcm0od2NoYXJfdCogX190bywgY29uc3Qgd2NoYXJfdCogX19mcm9tLAorKwkJCQkgICBzaXplX3QgX19uKSBjb25zdAorKyAgICB7IHJldHVybiBfX3djc3hmcm1fbChfX3RvLCBfX2Zyb20sIF9fbiwgX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KKysjZW5kaWYKKyt9CistLS0gZ2NjLTQuMS4yLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4xLjIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MJMjAwNy0wMy0wNCAyMzozMTo1Ny4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMzE0IEBACisrLy8gc3RkOjpjdHlwZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuMS4yICBjdHlwZSB2aXJ0dWFsIGZ1bmN0aW9ucy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICB3Y3R5cGUoKFMpKQorKyNkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgdG93dXBwZXIoKEMpKQorKyNkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgdG93bG93ZXIoKEMpKQorKyNkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAorKyAgLy8gdmFyaW91cyAvY29uZmlnL29zLyogZmlsZXMuCisrICB0ZW1wbGF0ZTw+CisrICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKysgICAgOiBjdHlwZTxjaGFyPigwLCBmYWxzZSwgX19yZWZzKSAKKysgICAgeyAJCQorKyAgICAgIGlmIChzdGQ6OnN0cmNtcChfX3MsICJDIikgIT0gMCAmJiBzdGQ6OnN0cmNtcChfX3MsICJQT1NJWCIpICE9IDApCisrCXsKKysJICB0aGlzLT5fU19kZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlKTsKKysJICB0aGlzLT5fU19jcmVhdGVfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY3R5cGUsIF9fcyk7IAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgdGhpcy0+X01fdG91cHBlciA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX3RvdXBwZXI7CisrCSAgdGhpcy0+X01fdG9sb3dlciA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX3RvbG93ZXI7CisrCSAgdGhpcy0+X01fdGFibGUgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV9iOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QgIAorKyAgY3R5cGU8d2NoYXJfdD46Ol9fd21hc2tfdHlwZQorKyAgY3R5cGU8d2NoYXJfdD46Ol9NX2NvbnZlcnRfdG9fd21hc2soY29uc3QgbWFzayBfX20pIGNvbnN0CisrICB7CisrICAgIF9fd21hc2tfdHlwZSBfX3JldDsKKysgICAgc3dpdGNoIChfX20pCisrICAgICAgeworKyAgICAgIGNhc2Ugc3BhY2U6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgic3BhY2UiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgcHJpbnQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgicHJpbnQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgY250cmw6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiY250cmwiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgdXBwZXI6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgidXBwZXIiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgbG93ZXI6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgibG93ZXIiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgYWxwaGE6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiYWxwaGEiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgZGlnaXQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiZGlnaXQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgcHVuY3Q6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgicHVuY3QiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgeGRpZ2l0OgorKwlfX3JldCA9IF9fd2N0eXBlX2woInhkaWdpdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBhbG51bToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJhbG51bSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBncmFwaDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJncmFwaCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysJX19yZXQgPSBfX3dtYXNrX3R5cGUoKTsKKysgICAgICB9CisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysgIAorKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvdXBwZXIod2NoYXJfdCBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfX3Rvd3VwcGVyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKyAgICAgICAgKl9fbG8gPSBfX3Rvd3VwcGVyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgICAgICsrX19sbzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKyAgCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9fdG93bG93ZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQorKyAgCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvbG93ZXIod2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKyAgICAgIHsKKysgICAgICAgICpfX2xvID0gX190b3dsb3dlcl9sKCpfX2xvLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrICAgICAgICArK19fbG87CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIGJvb2wKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX2lzKG1hc2sgX19tLCB3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgCisrICAgIC8vIFRoZSBjYXNlIG9mIF9fbSA9PSBjdHlwZV9iYXNlOjpzcGFjZSBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50LAorKyAgICAvLyBkdWUgdG8gaXRzIHVzZSBpbiBtYW55IGlzdHJlYW0gZnVuY3Rpb25zLiAgVGhlcmVmb3JlIHdlIGRlYWwgd2l0aAorKyAgICAvLyBpdCBmaXJzdCwgZXhwbG9pdGluZyB0aGUga25vd2xlZGdlIHRoYXQgb24gR05VIHN5c3RlbXMgX01fYml0WzVdCisrICAgIC8vIGlzIHRoZSBtYXNrIGNvcnJlc3BvbmRpbmcgdG8gY3R5cGVfYmFzZTo6c3BhY2UuICBOQjogYW4gZW5jb2RpbmcKKysgICAgLy8gY2hhbmdlIHdvdWxkIG5vdCBhZmZlY3QgY29ycmVjdG5lc3MhCisrICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKKysgICAgaWYgKF9fbSA9PSBfTV9iaXRbNV0pCisrICAgICAgX19yZXQgPSBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1s1XSwgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICBlbHNlCisrICAgICAgeworKwkvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKwkvLyBsaWJyYXJ5IGZvciBibGFuay4KKysJY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKysJZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorKwkgIGlmIChfX20gJiBfTV9iaXRbX19iaXRjdXJdKQorKwkgICAgeworKwkgICAgICBpZiAoX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCisrCQl7CisrCQkgIF9fcmV0ID0gdHJ1ZTsKKysJCSAgYnJlYWs7CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKF9fbSA9PSBfTV9iaXRbX19iaXRjdXJdKQorKwkJYnJlYWs7CisrCSAgICB9CisrICAgICAgfQorKyAgICByZXR1cm4gX19yZXQ7ICAgIAorKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCogCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19pcyhjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3QKKysgIHsKKysgICAgZm9yICg7IF9fbG8gPCBfX2hpOyArK19fdmVjLCArK19fbG8pCisrICAgICAgeworKwkvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKwkvLyBsaWJyYXJ5IGZvciBibGFuay4KKysJY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsgCisrCW1hc2sgX19tID0gMDsKKysJZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorKwkgIGlmIChfX2lzd2N0eXBlX2woKl9fbG8sIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwkgICAgX19tIHw9IF9NX2JpdFtfX2JpdGN1cl07CisrCSpfX3ZlYyA9IF9fbTsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKyAgCisrICBjb25zdCB3Y2hhcl90KiAKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSAmJiAhdGhpcy0+ZG9faXMoX19tLCAqX19sbykpCisrICAgICAgKytfX2xvOworKyAgICByZXR1cm4gX19sbzsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSAmJiB0aGlzLT5kb19pcyhfX20sICpfX2xvKSAhPSAwKQorKyAgICAgICsrX19sbzsKKysgICAgcmV0dXJuIF9fbG87CisrICB9CisrCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb193aWRlbihjaGFyIF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9NX3dpZGVuW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldOyB9CisrCisrICBjb25zdCBjaGFyKiAKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIHdjaGFyX3QqIF9fZGVzdCkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKyAgICAgIHsKKysJKl9fZGVzdCA9IF9NX3dpZGVuW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpfX2xvKV07CisrCSsrX19sbzsKKysJKytfX2Rlc3Q7CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIGNoYXIKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX25hcnJvdyh3Y2hhcl90IF9fd2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0CisrICB7CisrICAgIGlmIChfX3djID49IDAgJiYgX193YyA8IDEyOCAmJiBfTV9uYXJyb3dfb2spCisrICAgICAgcmV0dXJuIF9NX25hcnJvd1tfX3djXTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOworKyNlbmRpZgorKyAgICBjb25zdCBpbnQgX19jID0gd2N0b2IoX193Yyk7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyAKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19uYXJyb3coY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgY2hhciBfX2RmYXVsdCwgCisrCSAgICBjaGFyKiBfX2Rlc3QpIGNvbnN0CisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgaWYgKF9NX25hcnJvd19vaykKKysgICAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrCXsKKysJICBpZiAoKl9fbG8gPj0gMCAmJiAqX19sbyA8IDEyOCkKKysJICAgICpfX2Rlc3QgPSBfTV9uYXJyb3dbKl9fbG9dOworKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgY29uc3QgaW50IF9fYyA9IHdjdG9iKCpfX2xvKTsKKysJICAgICAgKl9fZGVzdCA9IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysJICAgIH0KKysJICArK19fbG87CisrCSAgKytfX2Rlc3Q7CisrCX0KKysgICAgZWxzZQorKyAgICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysJeworKwkgIGNvbnN0IGludCBfX2MgPSB3Y3RvYigqX19sbyk7CisrCSAgKl9fZGVzdCA9IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysJICArK19fbG87CisrCSAgKytfX2Rlc3Q7CisrCX0KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgdm9pZAorKyAgY3R5cGU8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfY3R5cGUoKQorKyAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIHdpbnRfdCBfX2k7CisrICAgIGZvciAoX19pID0gMDsgX19pIDwgMTI4OyArK19faSkKKysgICAgICB7CisrCWNvbnN0IGludCBfX2MgPSB3Y3RvYihfX2kpOworKwlpZiAoX19jID09IEVPRikKKysJICBicmVhazsKKysJZWxzZQorKwkgIF9NX25hcnJvd1tfX2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKTsKKysgICAgICB9CisrICAgIGlmIChfX2kgPT0gMTI4KQorKyAgICAgIF9NX25hcnJvd19vayA9IHRydWU7CisrICAgIGVsc2UKKysgICAgICBfTV9uYXJyb3dfb2sgPSBmYWxzZTsKKysgICAgZm9yIChzaXplX3QgX19qID0gMDsKKysJIF9faiA8IHNpemVvZihfTV93aWRlbikgLyBzaXplb2Yod2ludF90KTsgKytfX2opCisrICAgICAgX01fd2lkZW5bX19qXSA9IGJ0b3djKF9faik7CisrCisrICAgIGZvciAoc2l6ZV90IF9fayA9IDA7IF9fayA8PSAxMTsgKytfX2spCisrICAgICAgeyAKKysJX01fYml0W19fa10gPSBzdGF0aWNfY2FzdDxtYXNrPihfSVNiaXQoX19rKSk7CisrCV9NX3dtYXNrW19fa10gPSBfTV9jb252ZXJ0X3RvX3dtYXNrKF9NX2JpdFtfX2tdKTsKKysgICAgICB9CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgfQorKyNlbmRpZiAvLyAgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyt9CistLS0gZ2NjLTQuMS4yLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4xLjIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MJMjAwNy0wMy0wNCAyMzozMTo1Ny4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMTAwIEBACisrLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjcuMS4yICBtZXNzYWdlcyB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBnZXR0ZXh0IHN0dWZmCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrZXh0ZXJuICJDIiBjaGFyICpfX2RjZ2V0dGV4dChjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkJCSAgICAgY29uc3QgY2hhciAqbXNnaWQsIGludCBjYXRlZ29yeSk7CisrI3VuZGVmIGdldHRleHQKKysjZGVmaW5lIGdldHRleHQobXNnaWQpIF9fZGNnZXR0ZXh0KE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKysjZWxzZQorKyN1bmRlZiBnZXR0ZXh0CisrI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSAobXNnaWQpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIFNwZWNpYWxpemF0aW9ucy4KKysgIHRlbXBsYXRlPD4KKysgICAgc3RyaW5nCisrICAgIG1lc3NhZ2VzPGNoYXI+Ojpkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHN0cmluZyYgX19kZmF1bHQpIGNvbnN0CisrICAgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrICAgICAgY29uc3QgY2hhciogX19tc2cgPSBjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihnZXR0ZXh0KF9fZGZhdWx0LmNfc3RyKCkpKTsKKysgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2VsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV9tZXNzYWdlcyk7CisrICAgICAgY29uc3QgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9fZGZhdWx0LmNfc3RyKCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysgICAgICByZXR1cm4gc3RyaW5nKF9fbXNnKTsKKysjZWxzZQorKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKTsKKysgICAgICByZXR1cm4gc3RyaW5nKF9fbXNnKTsKKysjZW5kaWYKKysgICAgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB3c3RyaW5nCisrICAgIG1lc3NhZ2VzPHdjaGFyX3Q+Ojpkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHdzdHJpbmcmIF9fZGZhdWx0KSBjb25zdAorKyAgICB7CisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysgICAgICBjaGFyKiBfX21zZyA9IGdldHRleHQoX01fY29udmVydF90b19jaGFyKF9fZGZhdWx0KSk7CisrICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfbWVzc2FnZXMpOworKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKKysjIGVsc2UKKysgICAgICBjaGFyKiBfX21zZyA9IGdldHRleHQoX01fY29udmVydF90b19jaGFyKF9fZGZhdWx0KSk7CisrICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKKysjIGVuZGlmCisrICAgIH0KKysjZW5kaWYKKyt9CistLS0gZ2NjLTQuMS4yLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjEuMi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCTIwMDctMDMtMDQgMjM6MzE6NTcuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDEyMSBAQAorKy8vIHN0ZDo6bWVzc2FnZXMgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworK2V4dGVybiAiQyIgY2hhciAqX190ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOworK2V4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUpOworKyNlbHNlCisrI3VuZGVmIF9fdGV4dGRvbWFpbgorKyN1bmRlZiBfX2JpbmR0ZXh0ZG9tYWluCisrI2RlZmluZSBfX3RleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgX19iaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKysjZW5kaWYKKysKKysgIC8vIE5vbi12aXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhzaXplX3QgX19yZWZzKQorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19nZXRfY19sb2NhbGUoKSksIAorKyAgICAgICBfTV9uYW1lX21lc3NhZ2VzKF9TX2dldF9jX25hbWUoKSkKKysgICAgIHsgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgCisrCQkJCXNpemVfdCBfX3JlZnMpIAorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhOVUxMKSwgX01fbmFtZV9tZXNzYWdlcyhOVUxMKQorKyAgICAgeworKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdGQ6OnN0cmxlbihfX3MpICsgMTsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07CisrICAgICAgIHN0ZDo6bWVtY3B5KF9fdG1wLCBfX3MsIF9fbGVuKTsKKysgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKworKyAgICAgICAvLyBMYXN0IHRvIGF2b2lkIGxlYWtpbmcgbWVtb3J5IGlmIG5ldyB0aHJvd3MuCisrICAgICAgIF9NX2NfbG9jYWxlX21lc3NhZ2VzID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKKysgICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZyAKKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywgCisrCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CisrICAgIHsgCisrICAgICAgX19iaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworKyAgICAgIHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOyAKKysgICAgfQorKworKyAgLy8gVmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojp+bWVzc2FnZXMoKQorKyAgICB7IAorKyAgICAgIGlmIChfTV9uYW1lX21lc3NhZ2VzICE9IF9TX2dldF9jX25hbWUoKSkKKysJZGVsZXRlIFtdIF9NX25hbWVfbWVzc2FnZXM7CisrICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7IAorKyAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cgCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIAorKwkJCSAgICAgIGNvbnN0IGxvY2FsZSYpIGNvbnN0CisrICAgIHsgCisrICAgICAgLy8gTm8gZXJyb3IgY2hlY2tpbmcgaXMgZG9uZSwgYXNzdW1lIHRoZSBjYXRhbG9nIGV4aXN0cyBhbmQgY2FuCisrICAgICAgLy8gYmUgdXNlZC4KKysgICAgICBfX3RleHRkb21haW4oX19zLmNfc3RyKCkpOworKyAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHZvaWQgICAgCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2Nsb3NlKGNhdGFsb2cpIGNvbnN0IAorKyAgICB7IH0KKysKKysgICAvLyBtZXNzYWdlc19ieW5hbWUKKysgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlc19ieW5hbWU8X0NoYXJUPjo6bWVzc2FnZXNfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKysgICAgIDogbWVzc2FnZXM8X0NoYXJUPihfX3JlZnMpIAorKyAgICAgeyAKKysgICAgICAgaWYgKHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgIT0gbG9jYWxlOjpmYWNldDo6X1NfZ2V0X2NfbmFtZSgpKQorKwkgZGVsZXRlIFtdIHRoaXMtPl9NX25hbWVfbWVzc2FnZXM7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgdGhpcy0+X01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKworKyAgICAgICBpZiAoc3RkOjpzdHJjbXAoX19zLCAiQyIpICE9IDAgJiYgc3RkOjpzdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorKwkgeworKwkgICB0aGlzLT5fU19kZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysJICAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3MpOyAKKysJIH0KKysgICAgIH0KKy0tLSBnY2MtNC4xLjIub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjEuMi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYwkyMDA3LTAzLTA0IDIzOjMxOjU3LjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSw2OTIgQEAKKysvLyBzdGQ6Om1vbmV5cHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi42LjMuMiAgbW9uZXlwdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBvcHRpbWl6ZSB0aGlzIGZvciB1Y2xpYmMKKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6CisrICAvLyBzcGFjZSBub25lIHN5bWJvbCBzaWduIHZhbHVlCisrICBtb25leV9iYXNlOjpwYXR0ZXJuCisrICBtb25leV9iYXNlOjpfU19jb25zdHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VkZXMsIGNoYXIgX19zcGFjZSwgY2hhciBfX3Bvc24pCisrICB7IAorKyAgICBwYXR0ZXJuIF9fcmV0OworKworKyAgICAvLyBUaGlzIGluc2FuZWx5IGNvbXBsaWNhdGVkIHJvdXRpbmUgYXR0ZW1wdHMgdG8gY29uc3RydWN0IGEgdmFsaWQKKysgICAgLy8gcGF0dGVybiBmb3IgdXNlIHdpdGggbW9ueWVwdW5jdC4gQSBjb3VwbGUgb2YgaW52YXJpYW50czoKKysKKysgICAgLy8gaWYgKF9fcHJlY2VkZXMpIHN5bWJvbCAtPiB2YWx1ZQorKyAgICAvLyBlbHNlIHZhbHVlIC0+IHN5bWJvbAorKyAgICAKKysgICAgLy8gaWYgKF9fc3BhY2UpIHNwYWNlCisrICAgIC8vIGVsc2Ugbm9uZQorKworKyAgICAvLyBub25lID09IG5ldmVyIGZpcnN0CisrICAgIC8vIHNwYWNlIG5ldmVyIGZpcnN0IG9yIGxhc3QKKysKKysgICAgLy8gQW55IGVsZWdhbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgYXJlIHdlbGNvbWUuCisrICAgIHN3aXRjaCAoX19wb3NuKQorKyAgICAgIHsKKysgICAgICBjYXNlIDA6CisrICAgICAgY2FzZSAxOgorKwkvLyAxIFRoZSBzaWduIHByZWNlZGVzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgorKwlfX3JldC5maWVsZFswXSA9IHNpZ247CisrCWlmIChfX3NwYWNlKQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbi4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbiBhbmQgZW5kcyB3aXRoIG5vbmUuCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOworKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSAyOgorKwkvLyAyIFRoZSBzaWduIGZvbGxvd3MgdGhlIHZhbHVlIGFuZCBzeW1ib2wuCisrCWlmIChfX3NwYWNlKQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gZWl0aGVyIGVuZHMgd2l0aCBzaWduLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCSAgICBfX3JldC5maWVsZFszXSA9IHNpZ247CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBlbmRzIHdpdGggc2lnbiB0aGVuIG5vbmUuCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOworKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSAzOgorKwkvLyAzIFRoZSBzaWduIGltbWVkaWF0ZWx5IHByZWNlZGVzIHRoZSBzeW1ib2wuCisrCWlmIChfX3ByZWNlZGVzKQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gc2lnbjsKKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOwkgICAgCisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsJCQorKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkJX19yZXQuZmllbGRbM10gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzaWduOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgNDoKKysJLy8gNCBUaGUgc2lnbiBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBzeW1ib2wuCisrCWlmIChfX3ByZWNlZGVzKQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkgICAgX19yZXQuZmllbGRbMV0gPSBzaWduOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gc2lnbjsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysJX19yZXQgPSBwYXR0ZXJuKCk7CisrICAgICAgfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICB0ZW1wbGF0ZTw+IAorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgCisrCQkJCQkJICAgICBjb25zdCBjaGFyKikKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8Y2hhciwgdHJ1ZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fREVDSU1BTF9QT0lOVCwgCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9USE9VU0FORFNfU0VQLCAKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBpZiAoIV9fbnBvc24pCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwgCisrCQkJCQkJCV9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgIC8vIF9JbnRsID09IHRydWUKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fbmxfbGFuZ2luZm9fbChfX0lOVF9DVVJSX1NZTUJPTCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX0ZSQUNfRElHSVRTLCAKKysJCQkJCQkgICAgICBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwgCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsIAorKwkJCQkJCQlfX25wb3NuKTsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+IAorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIAorKwkJCQkJCSAgICAgIGNvbnN0IGNoYXIqKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCBmYWxzZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fREVDSU1BTF9QT0lOVCwgCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9USE9VU0FORFNfU0VQLCAKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIGlmICghX19ucG9zbikKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLAorKwkJCQkJCQlfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAvLyBfSW50bCA9PSBmYWxzZQorKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fQ1VSUkVOQ1lfU1lNQk9MLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19GUkFDX0RJR0lUUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsIAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwgCisrCQkJCQkJCV9fbnBvc24pOworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46On5tb25leXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PiAKKysgICAgdm9pZAorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCQkJCQkJCWNvbnN0IGNoYXIqKQorKyNlbHNlCisrCQkJCQkJCWNvbnN0IGNoYXIqIF9fbmFtZSkKKysjZW5kaWYKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgdHJ1ZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCisrCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG1vbmV0YXJ5CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKworKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7CisrCisrCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOworKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKKysJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgdHJ5CisrCSAgICB7CisrCSAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOworKwkgICAgICBzaXplX3QgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysJICAgICAgCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOworKwkgICAgICBpZiAoIV9fbnBvc24pCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7CisrCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorKwkJeyAKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX25zID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfbnMsICZfX2NuZWdzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX193Y3NfbnM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysJICAgICAgCisrCSAgICAgIC8vIF9JbnRsID09IHRydWUuCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgICAgfQorKwkgIGNhdGNoICguLi4pCisrCSAgICB7CisrCSAgICAgIGRlbGV0ZSBfTV9kYXRhOworKwkgICAgICBfTV9kYXRhID0gMDsKKysJICAgICAgZGVsZXRlIF9fd2NzX3BzOworKwkgICAgICBkZWxldGUgX193Y3NfbnM7CSAgICAgIAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJICAgIH0gCisrCSAgCisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9GUkFDX0RJR0lUUywgCisrCQkJCQkJICAgICAgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsIAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLCAKKysJCQkJCQkJX19ucG9zbik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgIHZvaWQKKysgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJCQkJCQkgICAgICAgY29uc3QgY2hhciopCisrI2Vsc2UKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19uYW1lKQorKyNlbmRpZgorKyAgeworKyAgICBpZiAoIV9NX2RhdGEpCisrICAgICAgX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgZmFsc2U+OworKworKyAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKyAgICAgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCisrCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG1vbmV0YXJ5CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorKyAgICAgICAgICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCisrCSAgY29uc3QgY2hhciogX19jcG9zc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jbmVnc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jY3VyciA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKKysKKysJICB3Y2hhcl90KiBfX3djc19wcyA9IDA7CisrCSAgd2NoYXJfdCogX193Y3NfbnMgPSAwOworKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIHRyeQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOworKyAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuOworKyAgICAgICAgICAgICAgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisrICAgICAgICAgICAgICBpZiAoX19sZW4pCisrICAgICAgICAgICAgICAgIHsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCSAgICAgIAorKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NuZWdzaWduKTsKKysJICAgICAgaWYgKCFfX25wb3NuKQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiKCkiOworKwkgICAgICBlbHNlIGlmIChfX2xlbikKKysJCXsgCisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19ucyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX25zLCAmX19jbmVnc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fd2NzX25zOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgICAgICAvLyBfSW50bCA9PSB0cnVlLgorKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsKKysJICAgICAgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgd2NoYXJfdCogX193Y3MgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djcywgJl9fY2N1cnIsIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX193Y3M7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgICB9CisrICAgICAgICAgIGNhdGNoICguLi4pCisrCSAgICB7CisrCSAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICAgICAgICAgICAgX01fZGF0YSA9IDA7CisrCSAgICAgIGRlbGV0ZSBfX3djc19wczsKKysJICAgICAgZGVsZXRlIF9fd2NzX25zOwkgICAgICAKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAgICAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwkgICAgfQorKworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19GUkFDX0RJR0lUUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsIAorKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwgCisrCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbnBvc24pOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46On5tb25leXB1bmN0KCkKKysgICAgeworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUKKysgICAgICAgICAgJiYgd2NzY21wKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24sIEwiKCkiKSAhPSAwKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sOworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+IAorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZQorKyAgICAgICAgICAmJiB3Y3NjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgTCIoKSIpICE9IDApCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fY3Vycl9zeW1ib2w7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgIH0KKysjZW5kaWYKKyt9CistLS0gZ2NjLTQuMS4yLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjEuMi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCTIwMDctMDMtMDQgMjM6MzE6NTcuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDE3MyBAQAorKy8vIHN0ZDo6bnVtcHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi4zLjEuMiAgbnVtcHVuY3QgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIHRlbXBsYXRlPD4gCisrICAgIHZvaWQKKysgICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19udW1wdW5jdF9jYWNoZTxjaGFyPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOworKworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0gX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV07CisrCisrCSAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19udW1fYmFzZTo6X1NfaWVuZDsgKytfX2opCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0gX19udW1fYmFzZTo6X1NfYXRvbXNfaW5bX19qXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woREVDSU1BTF9QT0lOVCwgCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChUSE9VU0FORFNfU0VQLCAKKysJCQkJCQkJX19jbG9jKSk7CisrCisrCSAgLy8gQ2hlY2sgZm9yIE5VTEwsIHdoaWNoIGltcGxpZXMgbm8gZ3JvdXBpbmcuCisrCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gJ1wwJykKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCX0KKysKKysgICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFjdCB0aGlzIGluZm8gZnJvbSBwb3NpeCBsb2NhbGVzLgorKyAgICAgIC8vIF9NX3RydWVuYW1lID0gX19ubF9sYW5naW5mb19sKFlFU1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZSA9ICJ0cnVlIjsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZV9zaXplID0gNDsKKysgICAgICAvLyBfTV9mYWxzZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woTk9TVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lID0gImZhbHNlIjsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWVfc2l6ZSA9IDU7CisrICAgIH0KKysgCisrICB0ZW1wbGF0ZTw+IAorKyAgICBudW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKyAgIAorKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PiAKKysgICAgdm9pZAorKyAgICBudW1wdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX251bXB1bmN0X2NhY2hlPHdjaGFyX3Q+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7CisrCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19udW1fYmFzZTo6X1Nfb2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19vdXRbX19pXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fbnVtX2Jhc2U6Ol9TX2F0b21zX291dFtfX2ldKTsKKysKKysJICBmb3IgKHNpemVfdCBfX2ogPSAwOyBfX2ogPCBfX251bV9iYXNlOjpfU19pZW5kOyArK19faikKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX2luW19fal0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90PihfX251bV9iYXNlOjpfU19hdG9tc19pbltfX2pdKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICAvLyBOQjogSW4gdGhlIEdOVSBtb2RlbCB3Y2hhcl90IGlzIGFsd2F5cyAzMiBiaXQgd2lkZS4KKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKysJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrI2VuZGlmCisrCisrCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gTCdcMCcpCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKEdST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwl9CisrCisrICAgICAgLy8gTkI6IFRoZXJlIGlzIG5vIHdheSB0byBleHRhY3QgdGhpcyBpbmZvIGZyb20gcG9zaXggbG9jYWxlcy4KKysgICAgICAvLyBfTV90cnVlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChZRVNTVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWUgPSBMInRydWUiOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lX3NpemUgPSA0OworKyAgICAgIC8vIF9NX2ZhbHNlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChOT1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWUgPSBMImZhbHNlIjsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWVfc2l6ZSA9IDU7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIG51bXB1bmN0PHdjaGFyX3Q+Ojp+bnVtcHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrICNlbmRpZgorK30KKy0tLSBnY2MtNC4xLjIub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMS4yL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MJMjAwNy0wMy0wNCAyMzozMTo1Ny4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsNDA2IEBACisrLy8gc3RkOjp0aW1lX2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEuMiAtIHRpbWVfZ2V0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6CisrICAgIF9NX3B1dChjaGFyKiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3QgY2hhciogX19mb3JtYXQsIAorKwkgICBjb25zdCB0bSogX190bSkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX19zdHJmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorKwkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysjZWxzZQorKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RyZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKysgICAgICBpZiAoX19sZW4gPT0gMCkKKysJX19zWzBdID0gJ1wwJzsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8Y2hhcj47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSAiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9ICIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSAiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9ICIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gIiI7CisrCSAgX01fZGF0YS0+X01fYW0gPSAiQU0iOworKwkgIF9NX2RhdGEtPl9NX3BtID0gIlBNIjsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSAiIjsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSAiU3VuZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gIk1vbmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9ICJUdWVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gIldlZG5lc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9ICJUaHVyc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9ICJGcmlkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSAiU2F0dXJkYXkiOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSAiU3VuIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9ICJNb24iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gIlR1ZSI7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSAiV2VkIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9ICJUaHUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gIkZyaSI7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSAiU2F0IjsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSAiSmFudWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9ICJGZWJydWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9ICJNYXJjaCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9ICJBcHJpbCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9ICJNYXkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSAiSnVuZSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9ICJKdWx5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gIkF1Z3VzdCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9ICJTZXB0ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSAiT2N0b2JlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9ICJOb3ZlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9ICJEZWNlbWJlciI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gIkphbiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSAiRmViIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9ICJNYXIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gIkFwciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSAiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9ICJKdW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gIkp1bCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSAiQXVnIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9ICJTZXAiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gIk9jdCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSAiTm92IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9ICJEZWMiOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsgCisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChUX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfRF9UX0ZNVCwKKysJCQkJCQkJICAgICBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtID0gX19ubF9sYW5naW5mb19sKEFNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wbSA9IF9fbmxfbGFuZ2luZm9fbChQTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKFRfRk1UX0FNUE0sIF9fY2xvYyk7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gX19ubF9sYW5naW5mb19sKERBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBfX25sX2xhbmdpbmZvX2woREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gX19ubF9sYW5naW5mb19sKERBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBfX25sX2xhbmdpbmZvX2woREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gX19ubF9sYW5naW5mb19sKERBWV83LCBfX2Nsb2MpOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gX19ubF9sYW5naW5mb19sKEFCREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNywgX19jbG9jKTsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fbmxfbGFuZ2luZm9fbChNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gX19ubF9sYW5naW5mb19sKE1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBfX25sX2xhbmdpbmZvX2woTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fbmxfbGFuZ2luZm9fbChNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gX19ubF9sYW5naW5mb19sKE1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX25sX2xhbmdpbmZvX2woTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fbmxfbGFuZ2luZm9fbChNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gX19ubF9sYW5naW5mb19sKE1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEyLCBfX2Nsb2MpOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMiwgX19jbG9jKTsKKysJfQorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46OgorKyAgICBfTV9wdXQod2NoYXJfdCogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IHdjaGFyX3QqIF9fZm9ybWF0LCAKKysJICAgY29uc3QgdG0qIF9fdG0pIGNvbnN0CisrICAgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwgX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisrCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyNlbHNlCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSB3Y3NmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKyAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorKyAgICAgIGlmIChfX2xlbiA9PSAwKQorKwlfX3NbMF0gPSBMJ1wwJzsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8d2NoYXJfdD47CisrCisrI3dhcm5pbmcgd2lkZSB0aW1lIHN0dWZmCisrLy8gICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IEwiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IEwiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fYW0gPSBMIkFNIjsKKysJICBfTV9kYXRhLT5fTV9wbSA9IEwiUE0iOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IEwiIjsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBMIlN1bmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IEwiTW9uZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gTCJUdWVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gTCJXZWRuZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBMIlRodXJzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gTCJGcmlkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBMIlNhdHVyZGF5IjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gTCJTdW4iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gTCJNb24iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gTCJUdWUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gTCJXZWQiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gTCJUaHUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gTCJGcmkiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gTCJTYXQiOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IEwiSmFudWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IEwiRmVicnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBMIk1hcmNoIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gTCJBcHJpbCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IEwiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gTCJKdW5lIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gTCJKdWx5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gTCJBdWd1c3QiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBMIlNlcHRlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IEwiT2N0b2JlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IEwiTm92ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBMIkRlY2VtYmVyIjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBMIkphbiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBMIkZlYiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBMIk1hciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBMIkFwciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBMIk1heSI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBMIkp1biI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBMIkp1bCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBMIkF1ZyI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBMIlNlcCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBMIk9jdCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBMIk5vdiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBMIkRlYyI7CisrCX0KKysjaWYgMAorKyAgICAgIGVsc2UKKysJeworKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7IAorKworKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90ICpfX3c7IH0gX191OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9EX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dUX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1BNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wbSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1RfRk1UX0FNUE0sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX191Ll9fdzsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gX191Ll9fdzsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX191Ll9fdzsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEyLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX3UuX193OworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEyLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX191Ll9fdzsKKysJfQorKyNlbmRpZiAvLyAwCisrICAgIH0KKysjZW5kaWYKKyt9CistLS0gZ2NjLTQuMS4yLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMS4yL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAkyMDA3LTAzLTA0IDIzOjMxOjU3LjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSw3NiBAQAorKy8vIHN0ZDo6dGltZV9nZXQsIHN0ZDo6dGltZV9wdXQgaW1wbGVtZW50YXRpb24sIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4xLjIgLSB0aW1lX2dldCBmdW5jdGlvbnMKKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzKSAKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksIAorKyAgICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY2FjaGVfdHlwZSogX19jYWNoZSwgc2l6ZV90IF9fcmVmcykgCisrICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShfX2NhY2hlKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLCAKKysgICAgICBfTV9uYW1lX3RpbWVwdW5jdChfU19nZXRfY19uYW1lKCkpCisrICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorKwkJCQkgICAgIHNpemVfdCBfX3JlZnMpIAorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwgCisrICAgICAgX01fbmFtZV90aW1lcHVuY3QoTlVMTCkKKysgICAgeyAKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdGQ6OnN0cmxlbihfX3MpICsgMTsKKysgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsKKysgICAgICBzdGQ6Om1lbWNweShfX3RtcCwgX19zLCBfX2xlbik7CisrICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKKysKKysgICAgICB0cnkKKysJeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOyB9CisrICAgICAgY2F0Y2goLi4uKQorKwl7CisrCSAgZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OworKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6fl9fdGltZXB1bmN0KCkKKysgICAgeyAKKysgICAgICBpZiAoX01fbmFtZV90aW1lcHVuY3QgIT0gX1NfZ2V0X2NfbmFtZSgpKQorKwlkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7IAorKyAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfdGltZXB1bmN0KTsgCisrICAgIH0KKy0tLSBnY2MtNC4xLjIub3JpZy9saWJzdGRjKystdjMvY29uZmlnL29zL3VjbGliYy9jdHlwZV9iYXNlLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4xLjIvbGlic3RkYysrLXYzL2NvbmZpZy9vcy91Y2xpYmMvY3R5cGVfYmFzZS5oCTIwMDctMDMtMDQgMjM6MzE6NTcuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDY0IEBACisrLy8gTG9jYWxlIHN1cHBvcnQgLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDIsIDIwMDMsIDIwMDQKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjEgIExvY2FsZXMKKysvLworKyAgCisrLyoqIEBmaWxlIGN0eXBlX2Jhc2UuaAorKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisrICogIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgorKyAqLworKworKy8vIEluZm9ybWF0aW9uIGFzIGdsZWFuZWQgZnJvbSAvdXNyL2luY2x1ZGUvY3R5cGUuaAorKyAgCisrICAvLy8gQGJyaWVmICBCYXNlIGNsYXNzIGZvciBjdHlwZS4KKysgIHN0cnVjdCBjdHlwZV9iYXNlCisrICB7CisrICAgIC8vIE5vdGU6IEluIHVDbGliYywgdGhlIGZvbGxvd2luZyB0d28gdHlwZXMgZGVwZW5kIG9uIGNvbmZpZ3VyYXRpb24uCisrIAorKyAgICAvLyBOb24tc3RhbmRhcmQgdHlwZWRlZnMuCisrICAgIHR5cGVkZWYgY29uc3QgX19jdHlwZV90b3VwbG93X3QqIF9fdG9fdHlwZTsKKysKKysgICAgLy8gTkI6IE9mZnNldHMgaW50byBjdHlwZTxjaGFyPjo6X01fdGFibGUgZm9yY2UgYSBwYXJ0aWN1bGFyIHNpemUKKysgICAgLy8gb24gdGhlIG1hc2sgdHlwZS4gQmVjYXVzZSBvZiB0aGlzLCB3ZSBkb24ndCB1c2UgYW4gZW51bS4KKysgICAgdHlwZWRlZiBfX2N0eXBlX21hc2tfdAltYXNrOyAgIAorKyAgICBzdGF0aWMgY29uc3QgbWFzayB1cHBlciAgICAJPSBfSVN1cHBlcjsKKysgICAgc3RhdGljIGNvbnN0IG1hc2sgbG93ZXIgCT0gX0lTbG93ZXI7CisrICAgIHN0YXRpYyBjb25zdCBtYXNrIGFscGhhIAk9IF9JU2FscGhhOworKyAgICBzdGF0aWMgY29uc3QgbWFzayBkaWdpdCAJPSBfSVNkaWdpdDsKKysgICAgc3RhdGljIGNvbnN0IG1hc2sgeGRpZ2l0IAk9IF9JU3hkaWdpdDsKKysgICAgc3RhdGljIGNvbnN0IG1hc2sgc3BhY2UgCT0gX0lTc3BhY2U7CisrICAgIHN0YXRpYyBjb25zdCBtYXNrIHByaW50IAk9IF9JU3ByaW50OworKyAgICBzdGF0aWMgY29uc3QgbWFzayBncmFwaCAJPSBfSVNhbHBoYSB8IF9JU2RpZ2l0IHwgX0lTcHVuY3Q7CisrICAgIHN0YXRpYyBjb25zdCBtYXNrIGNudHJsIAk9IF9JU2NudHJsOworKyAgICBzdGF0aWMgY29uc3QgbWFzayBwdW5jdCAJPSBfSVNwdW5jdDsKKysgICAgc3RhdGljIGNvbnN0IG1hc2sgYWxudW0gCT0gX0lTYWxwaGEgfCBfSVNkaWdpdDsKKysgIH07CistLS0gZ2NjLTQuMS4yLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9vcy91Y2xpYmMvY3R5cGVfaW5saW5lLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4xLjIvbGlic3RkYysrLXYzL2NvbmZpZy9vcy91Y2xpYmMvY3R5cGVfaW5saW5lLmgJMjAwNy0wMy0wNCAyMzozMTo1Ny4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsNjkgQEAKKysvLyBMb2NhbGUgc3VwcG9ydCAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjEgIExvY2FsZXMKKysvLworKyAgCisrLy8gY3R5cGUgYml0cyB0byBiZSBpbmxpbmVkIGdvIGhlcmUuIE5vbi1pbmxpbmFibGUgKGllIHZpcnR1YWwgZG9fKikKKysvLyBmdW5jdGlvbnMgZ28gaW4gY3R5cGUuY2MKKysgIAorKyAgYm9vbAorKyAgY3R5cGU8Y2hhcj46OgorKyAgaXMobWFzayBfX20sIGNoYXIgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKV0gJiBfX207IH0KKysKKysgIGNvbnN0IGNoYXIqCisrICBjdHlwZTxjaGFyPjo6CisrICBpcyhjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoLCBtYXNrKiBfX3ZlYykgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG93IDwgX19oaWdoKQorKyAgICAgICpfX3ZlYysrID0gX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KyspXTsKKysgICAgcmV0dXJuIF9faGlnaDsKKysgIH0KKysKKysgIGNvbnN0IGNoYXIqCisrICBjdHlwZTxjaGFyPjo6CisrICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2ggCisrCSAgICYmICEoX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KV0gJiBfX20pKQorKyAgICAgICsrX19sb3c7CisrICAgIHJldHVybiBfX2xvdzsKKysgIH0KKysKKysgIGNvbnN0IGNoYXIqCisrICBjdHlwZTxjaGFyPjo6CisrICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG93IDwgX19oaWdoIAorKwkgICAmJiAoX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KV0gJiBfX20pICE9IDApCisrICAgICAgKytfX2xvdzsKKysgICAgcmV0dXJuIF9fbG93OworKyAgfQorLS0tIGdjYy00LjEuMi5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvb3MvdWNsaWJjL2N0eXBlX25vbmlubGluZS5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMS4yL2xpYnN0ZGMrKy12My9jb25maWcvb3MvdWNsaWJjL2N0eXBlX25vbmlubGluZS5oCTIwMDctMDMtMDQgMjM6MzE6NTcuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDkyIEBACisrLy8gTG9jYWxlIHN1cHBvcnQgLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDQKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjEgIExvY2FsZXMKKysvLworKyAgCisrLy8gSW5mb3JtYXRpb24gYXMgZ2xlYW5lZCBmcm9tIC91c3IvaW5jbHVkZS9jdHlwZS5oCisrCisrICBjb25zdCBjdHlwZV9iYXNlOjptYXNrKgorKyAgY3R5cGU8Y2hhcj46OmNsYXNzaWNfdGFibGUoKSB0aHJvdygpCisrICB7IHJldHVybiBfX0NfY3R5cGVfYjsgfQorKworKyAgY3R5cGU8Y2hhcj46OmN0eXBlKF9fY19sb2NhbGUsIGNvbnN0IG1hc2sqIF9fdGFibGUsIGJvb2wgX19kZWwsIAorKwkJICAgICBzaXplX3QgX19yZWZzKSAKKysgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfY3R5cGUoX1NfZ2V0X2NfbG9jYWxlKCkpLCAKKysgIF9NX2RlbChfX3RhYmxlICE9IDAgJiYgX19kZWwpLCBfTV93aWRlbl9vaygwKSwgX01fbmFycm93X29rKDApCisrICB7CisrICAgIF9NX3RvdXBwZXIgPSBfX0NfY3R5cGVfdG91cHBlcjsKKysgICAgX01fdG9sb3dlciA9IF9fQ19jdHlwZV90b2xvd2VyOworKyAgICBfTV90YWJsZSA9IF9fdGFibGUgPyBfX3RhYmxlIDogX19DX2N0eXBlX2I7CisrICAgIG1lbXNldChfTV93aWRlbiwgMCwgc2l6ZW9mKF9NX3dpZGVuKSk7CisrICAgIG1lbXNldChfTV9uYXJyb3csIDAsIHNpemVvZihfTV9uYXJyb3cpKTsKKysgIH0KKysKKysgIGN0eXBlPGNoYXI+OjpjdHlwZShjb25zdCBtYXNrKiBfX3RhYmxlLCBib29sIF9fZGVsLCBzaXplX3QgX19yZWZzKQorKyAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9jdHlwZShfU19nZXRfY19sb2NhbGUoKSksIAorKyAgX01fZGVsKF9fdGFibGUgIT0gMCAmJiBfX2RlbCksIF9NX3dpZGVuX29rKDApLCBfTV9uYXJyb3dfb2soMCkKKysgIHsKKysgICAgX01fdG91cHBlciA9IF9fQ19jdHlwZV90b3VwcGVyOworKyAgICBfTV90b2xvd2VyID0gX19DX2N0eXBlX3RvbG93ZXI7CisrICAgIF9NX3RhYmxlID0gX190YWJsZSA/IF9fdGFibGUgOiBfX0NfY3R5cGVfYjsKKysgICAgbWVtc2V0KF9NX3dpZGVuLCAwLCBzaXplb2YoX01fd2lkZW4pKTsKKysgICAgbWVtc2V0KF9NX25hcnJvdywgMCwgc2l6ZW9mKF9NX25hcnJvdykpOworKyAgfQorKworKyAgY2hhcgorKyAgY3R5cGU8Y2hhcj46OmRvX3RvdXBwZXIoY2hhciBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfTV90b3VwcGVyW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldOyB9CisrCisrICBjb25zdCBjaGFyKgorKyAgY3R5cGU8Y2hhcj46OmRvX3RvdXBwZXIoY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG93IDwgX19oaWdoKQorKyAgICAgIHsKKysJKl9fbG93ID0gX01fdG91cHBlcltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3cpXTsKKysJKytfX2xvdzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpZ2g7CisrICB9CisrCisrICBjaGFyCisrICBjdHlwZTxjaGFyPjo6ZG9fdG9sb3dlcihjaGFyIF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9NX3RvbG93ZXJbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKV07IH0KKysKKysgIGNvbnN0IGNoYXIqIAorKyAgY3R5cGU8Y2hhcj46OmRvX3RvbG93ZXIoY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG93IDwgX19oaWdoKQorKyAgICAgIHsKKysJKl9fbG93ID0gX01fdG9sb3dlcltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3cpXTsKKysJKytfX2xvdzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpZ2g7CisrICB9CistLS0gZ2NjLTQuMS4yLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9vcy91Y2xpYmMvb3NfZGVmaW5lcy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMS4yL2xpYnN0ZGMrKy12My9jb25maWcvb3MvdWNsaWJjL29zX2RlZmluZXMuaAkyMDA3LTAzLTA0IDIzOjMxOjU3LjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSw0NCBAQAorKy8vIFNwZWNpZmljIGRlZmluaXRpb25zIGZvciBHTlUvTGludXggIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKyNpZm5kZWYgX0dMSUJDWFhfT1NfREVGSU5FUworKyNkZWZpbmUgX0dMSUJDWFhfT1NfREVGSU5FUyAxCisrCisrLy8gU3lzdGVtLXNwZWNpZmljICNkZWZpbmUsIHR5cGVkZWZzLCBjb3JyZWN0aW9ucywgZXRjLCBnbyBoZXJlLiAgVGhpcworKy8vIGZpbGUgd2lsbCBjb21lIGJlZm9yZSBhbGwgb3RoZXJzLgorKworKy8vIFRoaXMga2VlcHMgaXNhbnVtLCBldCBhbCBmcm9tIGJlaW5nIHByb3BhZ2F0ZWQgYXMgbWFjcm9zLgorKyNkZWZpbmUgX19OT19DVFlQRSAxCisrCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrCisrLy8gV2UgbXVzdCBub3Qgc2VlIHRoZSBvcHRpbWl6ZWQgc3RyaW5nIGZ1bmN0aW9ucyBHTlUgbGliYyBkZWZpbmVzLgorKyNkZWZpbmUgX19OT19TVFJJTkdfSU5MSU5FUworKworKyNlbmRpZgorLS0tIGdjYy00LjEuMi5vcmlnL2xpYnN0ZGMrKy12My9jb25maWd1cmUJMjAwNy0wMS0yOSAxMTo1MTowMS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4xLjIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQkyMDA3LTAzLTA0IDIzOjMxOjU3LjAwMDAwMDAwMCArMDEwMAorQEAgLTQwMDUsNiArNDAwNSwxMSBAQAorICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgIDs7CisgCisrbGludXgtdWNsaWJjKikKKysgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisrICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvbGliL2xpYnVDbGliYy0qLnNvYAorKyAgOzsKKysKKyBuZXRic2QqIHwga25ldGJzZCotZ251KQorICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL1wuXStcLnNvXC5bMC05XStcLlswLTldKyQnCitAQCAtNTc0MCw3ICs1NzQ1LDcgQEAKKyAgIGVuYWJsZXZhbD0iJGVuYWJsZV9jbG9jYWxlIgorIAorICAgICAgIGNhc2UgIiRlbmFibGV2YWwiIGluCistICAgICAgIGdlbmVyaWN8Z251fGllZWVfMTAwMy4xLTIwMDF8eWVzfG5vfGF1dG8pIDs7CisrICAgICAgIGdlbmVyaWN8Z251fGllZWVfMTAwMy4xLTIwMDF8dWNsaWJjfHllc3xub3xhdXRvKSA7OworICAgICAgICAqKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBVbmtub3duIGFyZ3VtZW50IHRvIGVuYWJsZS9kaXNhYmxlIGNsb2NhbGUiID4mNQorIGVjaG8gIiRhc19tZTogZXJyb3I6IFVua25vd24gYXJndW1lbnQgdG8gZW5hYmxlL2Rpc2FibGUgY2xvY2FsZSIgPiYyO30KKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKK0BAIC01NzY1LDYgKzU3NzAsOSBAQAorICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCisrICAgICAgbGludXgtdWNsaWJjKikKKysgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCisrCTs7CisgICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCisgICAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBjb25mZGVmcy5oLiAgKi8KK0BAIC01OTk1LDYgKzYwMDMsNzYgQEAKKyAgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjCisgICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorICAgICAgIDs7CisrICAgIHVjbGliYykKKysgICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1Y2xpYmMiID4mNQorK2VjaG8gIiR7RUNIT19UfXVjbGliYyIgPiY2CisrCisrICAgICAgIyBEZWNsYXJlIGludGVudGlvbiB0byB1c2UgZ2V0dGV4dCwgYW5kIGFkZCBzdXBwb3J0IGZvciBzcGVjaWZpYworKyAgICAgICMgbGFuZ3VhZ2VzLgorKyAgICAgICMgRm9yIHNvbWUgcmVhc29uLCBBTExfTElOR1VBUyBoYXMgdG8gYmUgYmVmb3JlIEFNLUdOVS1HRVRURVhUCisrICAgICAgQUxMX0xJTkdVQVM9ImRlIGZyIgorKworKyAgICAgICMgRG9uJ3QgY2FsbCBBTS1HTlUtR0VUVEVYVCBoZXJlLiBJbnN0ZWFkLCBhc3N1bWUgZ2xpYmMuCisrICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtc2dmbXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtc2dmbXQ7IGFjX3dvcmQ9JDIKKytlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2hlY2tfbXNnZm10K3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRjaGVja19tc2dmbXQiOyB0aGVuCisrICBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0iJGNoZWNrX21zZ2ZtdCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICAgIGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10PSJ5ZXMiCisrICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrZG9uZQorKworKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10IiAmJiBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0ibm8iCisrZmkKKytmaQorK2NoZWNrX21zZ2ZtdD0kYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQKKytpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgorKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGNoZWNrX21zZ2ZtdCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGNoZWNrX21zZ2ZtdCIgPiY2CisrZWxzZQorKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKKytmaQorKworKyAgICAgIGlmIHRlc3QgeCIkY2hlY2tfbXNnZm10IiA9IHgieWVzIiAmJiB0ZXN0IHgiJGVuYWJsZV9ubHMiID0geCJ5ZXMiOyB0aGVuCisrICAgICAgICBVU0VfTkxTPXllcworKyAgICAgIGZpCisrICAgICAgIyBFeHBvcnQgdGhlIGJ1aWxkIG9iamVjdHMuCisrICAgICAgZm9yIGxpbmcgaW4gJEFMTF9MSU5HVUFTOyBkbyBcCisrICAgICAgICBnbGliY3h4X01PRklMRVM9IiRnbGliY3h4X01PRklMRVMgJGxpbmcubW8iOyBcCisrICAgICAgICBnbGliY3h4X1BPRklMRVM9IiRnbGliY3h4X1BPRklMRVMgJGxpbmcucG8iOyBcCisrICAgICAgZG9uZQorKworKworKworKyAgICAgIENMT0NBTEVfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrICAgICAgQ0xPQ0FMRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKyAgICAgIENDT0RFQ1ZUX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworKyAgICAgIENDT0xMQVRFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworKyAgICAgIENDVFlQRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrICAgICAgQ01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrICAgICAgQ01FU1NBR0VTX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKysgICAgICBDTU9ORVlfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKyAgICAgIENOVU1FUklDX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKyAgICAgIENUSU1FX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysgICAgICA7OworICAgZXNhYworIAorICAgIyBUaGlzIGlzIHdoZXJlIHRoZSB0ZXN0c3VpdGUgbG9va3MgZm9yIGxvY2FsZSBjYXRhbG9ncywgdXNpbmcgdGhlCistLS0gZ2NjLTQuMS4yLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5ob3N0CTIwMDctMDEtMjggMjE6MTI6NDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMS4yL2xpYnN0ZGMrKy12My9jb25maWd1cmUuaG9zdAkyMDA3LTAzLTA0IDIzOjMxOjU3LjAwMDAwMDAwMCArMDEwMAorQEAgLTI3MCw2ICsyNzAsMTIgQEAKKyAgICAgOzsKKyBlc2FjCisgCisrIyBPdmVycmlkZSBmb3IgdUNsaWJjIHNpbmNlIGxpbnV4LXVjbGliYyBnZXRzIG1pc2hhbmRsZWQgYWJvdmUuCisrY2FzZSAiJHtob3N0X29zfSIgaW4KKysgICotdWNsaWJjKikKKysgICAgb3NfaW5jbHVkZV9kaXI9Im9zL3VjbGliYyIKKysgICAgOzsKKytlc2FjCisgCisgIyBTZXQgYW55IE9TLWRlcGVuZGVudCBhbmQgQ1BVLWRlcGVuZGVudCBiaXRzLgorICMgVEhJUyBUQUJMRSBJUyBTT1JURUQuICBLRUVQIElUIFRIQVQgV0FZLgorLS0tIGdjYy00LjEuMi5vcmlnL2xpYnN0ZGMrKy12My9jcm9zc2NvbmZpZy5tNAkyMDA2LTEyLTEyIDE1OjE4OjM2LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjEuMi9saWJzdGRjKystdjMvY3Jvc3Njb25maWcubTQJMjAwNy0wMy0wNCAyMzozMTo1Ny4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNDMsNiArMTQzLDk5IEBACisgCTs7CisgICAgIGVzYWMKKyAgICAgOzsKKysgICotdWNsaWJjKikKKysjIFRlbXBvcmFyeSBoYWNrIHVudGlsIHdlIGltcGxlbWVudCB0aGUgZmxvYXQgdmVyc2lvbnMgb2YgdGhlIGxpYm0gZnVuY3MKKysgICAgQUNfQ0hFQ0tfSEVBREVSUyhbbmFuLmggaWVlZWZwLmggZW5kaWFuLmggc3lzL2lzYV9kZWZzLmggXAorKyAgICAgIG1hY2hpbmUvZW5kaWFuLmggbWFjaGluZS9wYXJhbS5oIHN5cy9tYWNoaW5lLmggc3lzL3R5cGVzLmggXAorKyAgICAgIGZwLmggZmxvYXQuaCBlbmRpYW4uaCBpbnR0eXBlcy5oIGxvY2FsZS5oIGZsb2F0Lmggc3RkaW50LmhdKQorKyAgICBTRUNUSU9OX0ZMQUdTPSctZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucycKKysgICAgQUNfU1VCU1QoU0VDVElPTl9GTEFHUykKKysgICAgR0xJQkNYWF9DSEVDS19MSU5LRVJfRkVBVFVSRVMKKysgICAgR0xJQkNYWF9DSEVDS19DT01QTEVYX01BVEhfU1VQUE9SVAorKyAgICBHTElCQ1hYX0NIRUNLX1dDSEFSX1RfU1VQUE9SVAorKworKyAgICAjIEZvciBMRlMuCisrICAgIEFDX0RFRklORShIQVZFX0lOVDY0X1QpCisrICAgIGNhc2UgIiR0YXJnZXQiIGluCisrICAgICAgKi11Y2xpbnV4KikKKysgICAgICAgICMgRG9uJ3QgZW5hYmxlIExGUyB3aXRoIHVDbGludXgKKysgICAgICAgIDs7CisrICAgICAgKikKKysgICAgICAgIEFDX0RFRklORShfR0xJQkNYWF9VU0VfTEZTKQorKyAgICBlc2FjCisrCisrICAgICMgRm9yIHNob3dtYW55Y19oZWxwZXIoKS4KKysgICAgQUNfQ0hFQ0tfSEVBREVSUyhzeXMvaW9jdGwuaCBzeXMvZmlsaW8uaCkKKysgICAgR0xJQkNYWF9DSEVDS19QT0xMCisrICAgIEdMSUJDWFhfQ0hFQ0tfU19JU1JFR19PUl9TX0lGUkVHCisrCisrICAgICMgRm9yIHhzcHV0bl8yKCkuCisrICAgIEFDX0NIRUNLX0hFQURFUlMoc3lzL3Vpby5oKQorKyAgICBHTElCQ1hYX0NIRUNLX1dSSVRFVgorKworKyMgICAgIEFDX0RFRklORShIQVZFX0FDT1NGKQorKyMgICAgIEFDX0RFRklORShIQVZFX0FTSU5GKQorKyMgICAgIEFDX0RFRklORShIQVZFX0FUQU5GKQorKyMgICAgIEFDX0RFRklORShIQVZFX0FUQU4yRikKKysgICAgQUNfREVGSU5FKEhBVkVfQ0VJTEYpCisrICAgIEFDX0RFRklORShIQVZFX0NPUFlTSUdOKQorKyMgICAgIEFDX0RFRklORShIQVZFX0NPUFlTSUdORikKKysjICAgICBBQ19ERUZJTkUoSEFWRV9DT1NGKQorKyMgICAgIEFDX0RFRklORShIQVZFX0NPU0hGKQorKyMgICAgIEFDX0RFRklORShIQVZFX0VYUEYpCisrIyAgICAgQUNfREVGSU5FKEhBVkVfRkFCU0YpCisrICAgIEFDX0RFRklORShIQVZFX0ZJTklURSkKKysgICAgQUNfREVGSU5FKEhBVkVfRklOSVRFRikKKysgICAgQUNfREVGSU5FKEhBVkVfRkxPT1JGKQorKyMgICAgIEFDX0RFRklORShIQVZFX0ZNT0RGKQorKyMgICAgIEFDX0RFRklORShIQVZFX0ZSRVhQRikKKysgICAgQUNfREVGSU5FKEhBVkVfSFlQT1QpCisrIyAgICAgQUNfREVGSU5FKEhBVkVfSFlQT1RGKQorKyAgICBBQ19ERUZJTkUoSEFWRV9JU0lORikKKysgICAgQUNfREVGSU5FKEhBVkVfSVNJTkZGKQorKyAgICBBQ19ERUZJTkUoSEFWRV9JU05BTikKKysgICAgQUNfREVGSU5FKEhBVkVfSVNOQU5GKQorKyMgICAgIEFDX0RFRklORShIQVZFX0xPR0YpCisrIyAgICAgQUNfREVGSU5FKEhBVkVfTE9HMTBGKQorKyMgICAgIEFDX0RFRklORShIQVZFX01PREZGKQorKyMgICAgIEFDX0RFRklORShIQVZFX1NJTkYpCisrIyAgICAgQUNfREVGSU5FKEhBVkVfU0lOSEYpCisrIyAgICAgQUNfREVGSU5FKEhBVkVfU0lOQ09TKQorKyMgICAgIEFDX0RFRklORShIQVZFX1NJTkNPU0YpCisrICAgIEFDX0RFRklORShIQVZFX1NRUlRGKQorKyMgICAgIEFDX0RFRklORShIQVZFX1RBTkYpCisrIyAgICAgQUNfREVGSU5FKEhBVkVfVEFOSEYpCisrICAgIGlmIHRlc3QgeCJsb25nX2RvdWJsZV9tYXRoX29uX3RoaXNfY3B1IiA9IHgieWVzIjsgdGhlbgorKyAgICAgIEFDX01TR19FUlJPUihbbG9uZ19kb3VibGVfbWF0aF9vbl90aGlzX2NwdSBpcyB5ZXMhXSkKKysjICAgICAgIEFDX0RFRklORShIQVZFX0FDT1NMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfQVNJTkwpCisrIyAgICAgICBBQ19ERUZJTkUoSEFWRV9BVEFOTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX0FUQU4yTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX0NFSUxMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfQ09QWVNJR05MKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfQ09TTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX0NPU0hMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfRVhQTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX0ZBQlNMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfRklOSVRFTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX0ZMT09STCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX0ZNT0RMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfRlJFWFBMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfSFlQT1RMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfSVNJTkZMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfSVNOQU5MKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfTE9HTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX0xPRzEwTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX01PREZMKQorKyMgICAgICAgQUNfREVGSU5FKEhBVkVfUE9XTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX1NJTkwpCisrIyAgICAgICBBQ19ERUZJTkUoSEFWRV9TSU5ITCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX1NJTkNPU0wpCisrIyAgICAgICBBQ19ERUZJTkUoSEFWRV9TUVJUTCkKKysjICAgICAgIEFDX0RFRklORShIQVZFX1RBTkwpCisrIyAgICAgICBBQ19ERUZJTkUoSEFWRV9UQU5ITCkKKysgICAgZmkKKysgICAgOzsKKyAgICotbGludXgqIHwgKi11Y2xpbnV4KiB8ICotZ251KiB8ICota2ZyZWVic2QqLWdudSB8ICota25ldGJzZCotZ251KQorICAgICBBQ19DSEVDS19IRUFERVJTKFtuYW4uaCBpZWVlZnAuaCBlbmRpYW4uaCBzeXMvaXNhX2RlZnMuaCBcCisgICAgICAgbWFjaGluZS9lbmRpYW4uaCBtYWNoaW5lL3BhcmFtLmggc3lzL21hY2hpbmUuaCBzeXMvdHlwZXMuaCBcCitAQCAtMTU3LDcgKzI1MCw3IEBACisgICAgIEFDX0RFRklORShIQVZFX0lOVDY0X1QpCisgICAgIGNhc2UgIiR0YXJnZXQiIGluCisgICAgICAgKi11Y2xpbnV4KikKKy0gICAgICAgICMgRG9uJ3QgZW5hYmxlIExGUyB3aXRoIHVDbGliYworKyAgICAgICAgIyBEb24ndCBlbmFibGUgTEZTIHdpdGggdUNsaW51eAorICAgICAgICAgOzsKKyAgICAgICAqKQorICAgICAgICAgQUNfREVGSU5FKF9HTElCQ1hYX1VTRV9MRlMpCistLS0gZ2NjLTQuMS4yLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgJMjAwNS0wOC0xNyAwNDoyODo0NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4xLjIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgJMjAwNy0wMy0wNCAyMzozMTo1Ny4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMDEsNyArMTAxLDkgQEAKKyB1c2luZyBzdGQ6OndtZW1jcHk7CisgdXNpbmcgc3RkOjp3bWVtbW92ZTsKKyB1c2luZyBzdGQ6OndtZW1zZXQ7CisrI2lmIF9HTElCQ1hYX0hBVkVfV0NTRlRJTUUKKyB1c2luZyBzdGQ6Ondjc2Z0aW1lOworKyNlbmRpZgorIAorICNpZiBfR0xJQkNYWF9VU0VfQzk5CisgdXNpbmcgc3RkOjp3Y3N0b2xkOworLS0tIGdjYy00LjEuMi5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL3N0ZF9jd2NoYXIuaAkyMDA1LTEwLTMwIDIzOjIxOjUwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjEuMi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9zdGRfY3djaGFyLmgJMjAwNy0wMy0wNCAyMzozMTo1Ny4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xODAsNyArMTgwLDkgQEAKKyAgIHVzaW5nIDo6d2NzY29sbDsKKyAgIHVzaW5nIDo6d2NzY3B5OworICAgdXNpbmcgOjp3Y3Njc3BuOworKyNpZiBfR0xJQkNYWF9IQVZFX1dDU0ZUSU1FCisgICB1c2luZyA6Ondjc2Z0aW1lOworKyNlbmRpZgorICAgdXNpbmcgOjp3Y3NsZW47CisgICB1c2luZyA6Ondjc25jYXQ7CisgICB1c2luZyA6Ondjc25jbXA7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMS4yLzEzMC1saWJzdGRjKystcGljLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjEuMi8xMzAtbGlic3RkYysrLXBpYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmJlOGE2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjEuMi8xMzAtbGlic3RkYysrLXBpYy5wYXRjaApAQCAtMCwwICsxLDQ4IEBACistLS0gZ2NjLTQuMS4yLm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQkyMDA2LTAxLTEwIDA1OjAxOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjEuMi9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmFtCTIwMDctMDMtMDQgMjM6MzI6NDAuMDAwMDAwMDAwICswMTAwCitAQCAtMjM0LDYgKzIzNCwxMiBAQAorIAkgICQoT1BUX0xERkxBR1MpICQoU0VDVElPTl9MREZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKExERkxBR1MpIC1vICRACisgCisgCisraW5zdGFsbC1leGVjLWxvY2FsOgorK2lmZXEgKCQoZW5hYmxlX3NoYXJlZCkseWVzKQorKwkkKEFSKSBjcnUgbGlic3RkYysrX3BpYy5hIC5saWJzLyoubyAkKHRvcF9idWlsZGRpcikvbGlic3VwYysrLyoubworKwkkKElOU1RBTExfREFUQSkgbGlic3RkYysrX3BpYy5hICQoREVTVERJUikkKHRvb2xleGVjbGliZGlyKQorK2VuZGlmCisrCisgIyBBZGRlZCBiaXRzIHRvIGJ1aWxkIGRlYnVnIGxpYnJhcnkuCisgaWYgR0xJQkNYWF9CVUlMRF9ERUJVRworIGFsbC1sb2NhbDogYnVpbGRfZGVidWcKKy0tLSBnY2MtNC4xLjIub3JpZy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCTIwMDYtMDEtMTAgMTg6MTQ6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMS4yL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuaW4JMjAwNy0wMy0wNCAyMzozMjo0MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC02MjcsNyArNjI3LDcgQEAKKyAKKyBpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtZGF0YS1sb2NhbAorIAorLWluc3RhbGwtZXhlYy1hbTogaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTCisraW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLXRvb2xleGVjbGliTFRMSUJSQVJJRVMgaW5zdGFsbC1leGVjLWxvY2FsCisgCisgaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKyAKK0BAIC02NjAsNiArNjYwLDcgQEAKKyAJZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAorIAlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKKyAJaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZGF0YS1sb2NhbCBpbnN0YWxsLWV4ZWMgXAorKwlpbnN0YWxsLWV4ZWMtbG9jYWwgXAorIAlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisgCWluc3RhbGwtc3RyaXAgaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTIGluc3RhbGxjaGVjayBcCisgCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKK0BAIC03NjAsNiArNzYxLDEzIEBACisgaW5zdGFsbF9kZWJ1ZzoKKyAJKGNkICR7ZGVidWdkaXJ9ICYmICQoTUFLRSkgXAorIAl0b29sZXhlY2xpYmRpcj0kKGdsaWJjeHhfdG9vbGV4ZWNsaWJkaXIpL2RlYnVnIGluc3RhbGwpCisrCisraW5zdGFsbC1leGVjLWxvY2FsOgorK2lmZXEgKCQoZW5hYmxlX3NoYXJlZCkseWVzKQorKwkkKEFSKSBjcnUgbGlic3RkYysrX3BpYy5hICoubyAkKHRvcF9idWlsZGRpcikvbGlic3VwYysrLyoubworKwkkKElOU1RBTExfREFUQSkgbGlic3RkYysrX3BpYy5hICQoREVTVERJUikkKHRvb2xleGVjbGliZGlyKQorK2VuZGlmCisrCisgIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyAjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKyAuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMS4yLzE0MC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMS4yLzE0MC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiZmRkYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4xLjIvMTQwLW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApAQCAtMCwwICsxLDExIEBACistLS0gZ2NjLTQuMS4yLm9yaWcvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCTIwMDUtMDEtMDIgMDQ6MzU6NTcuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMS4yL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAkyMDA3LTAzLTA0IDIzOjMzOjA3LjAwMDAwMDAwMCArMDEwMAorQEAgLTUwMCw3ICs1MDAsNyBAQAorICNpZmRlZiBfX2xpbnV4X18KKyAjIGluY2x1ZGUgPGZlYXR1cmVzLmg+CisgIyBpZiAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEgfHwgX19HTElCQ19fID4gMikgXAorLSAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pCisrICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykgJiYgIWRlZmluZWQoX19VQ0xJQkNfXykKKyAjICAgaWZuZGVmIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgICBkZWZpbmUgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQorICMgICBlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjEuMi8xNTAtYzk5LXNucHJpbnRmLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjEuMi8xNTAtYzk5LXNucHJpbnRmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NWNkMTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMS4yLzE1MC1jOTktc25wcmludGYucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorLS0tIGdjYy00LjEuMi5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL3N0ZF9jc3RkaW8uaAkyMDA1LTEwLTMwIDIzOjIxOjUwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjEuMi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9zdGRfY3N0ZGlvLmgJMjAwNy0wMy0wNCAyMzozMzoyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNDMsNyArMTQzLDcgQEAKKyAgIHVzaW5nIDo6dnNwcmludGY7CisgfQorIAorLSNpZiBfR0xJQkNYWF9VU0VfQzk5CisrI2lmIF9HTElCQ1hYX1VTRV9DOTkgfHwgZGVmaW5lZChfX1VDTElCQ19fKQorIAorICN1bmRlZiBzbnByaW50ZgorICN1bmRlZiB2ZnNjYW5mCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMS4yLzE2MC1jOTktY29tcGxleC11Z2x5LWhhY2sucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMS4yLzE2MC1jOTktY29tcGxleC11Z2x5LWhhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA5YzQ1NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4xLjIvMTYwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaApAQCAtMCwwICsxLDEyIEBACistLS0gZ2NjLTQuMS4yLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQkyMDA3LTAzLTA0IDIzOjMyOjMxLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjEuMi9saWJzdGRjKystdjMvY29uZmlndXJlCTIwMDctMDMtMDQgMjM6MzM6NTQuMDAwMDAwMDAwICswMTAwCitAQCAtNzMyNCw2ICs3MzI0LDkgQEAKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpbmNsdWRlIDxjb21wbGV4Lmg+CisrI2lmZGVmIF9fVUNMSUJDX18KKysjZXJyb3IgdWdseSBoYWNrIHRvIG1ha2Ugc3VyZSBjb25maWd1cmUgdGVzdCBmYWlscyBoZXJlIGZvciBjcm9zcyB1bnRpbCB1Q2xpYmMgc3VwcG9ydHMgdGhlIGNvbXBsZXggZnVuY3MKKysjZW5kaWYKKyBpbnQKKyBtYWluICgpCisgewpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjEuMi8xNzAtaW5kZXhfbWFjcm8ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMS4yLzE3MC1pbmRleF9tYWNyby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTkwYjA3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjEuMi8xNzAtaW5kZXhfbWFjcm8ucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorLS0tIGdjYy00LjEuMi5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCTIwMDUtMDgtMTcgMDQ6Mjg6NDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMS4yL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCTIwMDctMDMtMDQgMjM6MzQ6MDguMDAwMDAwMDAwICswMTAwCitAQCAtNTcsNiArNTcsOSBAQAorICNpbmNsdWRlIDxiaXRzL2FsbG9jYXRvci5oPgorICNpbmNsdWRlIDxleHQvaGFzaF9mdW4uaD4KKyAKKysvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCisrI3VuZGVmIGluZGV4CisrCisgIyBpZmRlZiBfX0dDCisgIyAgIGRlZmluZSBfX0dDX0NPTlNUIGNvbnN0CisgIyBlbHNlCistLS0gZ2NjLTQuMS4yLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgJMjAwNS0wOC0xNyAwNDoyODo0NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4xLjIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgJMjAwNy0wMy0wNCAyMzozNDowOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC01Myw2ICs1Myw5IEBACisgI2luY2x1ZGUgPGV4dC9tZW1vcnk+IC8vIEZvciB1bmluaXRpYWxpemVkX2NvcHlfbgorICNpbmNsdWRlIDxleHQvbnVtZXJpYz4gLy8gRm9yIHBvd2VyCisgCisrLyogY29wZSB3LyBpbmRleCBkZWZpbmVkIGFzIG1hY3JvLCBTdVN2MyBwcm9wb3NhbCAqLworKyN1bmRlZiBpbmRleAorKworIG5hbWVzcGFjZSBfX2dudV9jeHgKKyB7CisgICB1c2luZyBzdGQ6OnNpemVfdDsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4xLjIvMTgwLWxpYmJhY2tlbmRfZGVwX2djb3YtaW92LmgucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMS4yLzE4MC1saWJiYWNrZW5kX2RlcF9nY292LWlvdi5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNDQ0OWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMS4yLzE4MC1saWJiYWNrZW5kX2RlcF9nY292LWlvdi5oLnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKKy0tLSBnY2MtNC4xLjIub3JpZy9nY2MvTWFrZWZpbGUuaW4JMjAwNi0xMS0wMSAxNTo0MDo0NC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4xLjIvZ2NjL01ha2VmaWxlLmluCTIwMDctMDMtMDQgMjM6MzQ6MzIuMDAwMDAwMDAwICswMTAwCitAQCAtMjUyMiw3ICsyNTIyLDcgQEAKKyAjIEZJWE1FOiB3cml0aW5nIHByb3BlciBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgaXMgYSAqTE9UKiBvZiB3b3JrLgorIGxpYmJhY2tlbmQubyA6ICQoT0JKUy1jb21tb246Lm89LmMpICQob3V0X2ZpbGUpIFwKKyAgIGluc24tY29uZmlnLmggaW5zbi1mbGFncy5oIGluc24tY29kZXMuaCBpbnNuLWNvbnN0YW50cy5oIFwKKy0gIGluc24tYXR0ci5oICAkKERBVEVTVEFNUCkgJChCQVNFVkVSKSAkKERFVlBIQVNFKQorKyAgaW5zbi1hdHRyLmggICQoREFURVNUQU1QKSAkKEJBU0VWRVIpICQoREVWUEhBU0UpIGdjb3YtaW92LmgKKyAJJChDQykgJChBTExfQ0ZMQUdTKSAkKEFMTF9DUFBGTEFHUykgXAorIAkgIC1EVEFSR0VUX05BTUU9XCIkKHRhcmdldF9ub25jYW5vbmljYWwpXCIgXAorIAkgIC1ETE9DQUxFRElSPVwiJChsb2NhbGVkaXIpXCIgXApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjEuMi8xOTAtc2gtcHIyNDgzNi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4xLjIvMTkwLXNoLXByMjQ4MzYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkzMjhhNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4xLjIvMTkwLXNoLXByMjQ4MzYucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorLS0tIGdjYy00LjEuMi5vcmlnL2djYy9jb25maWd1cmUuYWMJMjAwNi0xMS0xMyAyMzowOTo1NS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4xLjIvZ2NjL2NvbmZpZ3VyZS5hYwkyMDA3LTAzLTA0IDIzOjM0OjUzLjAwMDAwMDAwMCArMDEwMAorQEAgLTI0MzUsNyArMjQzNSw3IEBACisgCXRsc19maXJzdF9taW5vcj0xNAorIAl0bHNfYXNfb3B0PSItbTY0IC1BZXNhbWUgLS1mYXRhbC13YXJuaW5ncyIKKyAJOzsKKy0gIHNoLSotKiB8IHNoWzM0XS0qLSopCisrICBzaC0qLSogfCBzaFszNF0qLSotKikKKyAgICAgY29uZnRlc3Rfcz0nCisgCS5zZWN0aW9uICIudGRhdGEiLCJhd1QiLEBwcm9nYml0cworIGZvbzoJLmxvbmcJMjUKKy0tLSBnY2MtNC4xLjIub3JpZy9nY2MvY29uZmlndXJlCTIwMDYtMTEtMTMgMjM6MDk6NTUuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMS4yL2djYy9jb25maWd1cmUJMjAwNy0wMy0wNCAyMzozNDo1My4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNDc2Miw3ICsxNDc2Miw3IEBACisgCXRsc19maXJzdF9taW5vcj0xNAorIAl0bHNfYXNfb3B0PSItbTY0IC1BZXNhbWUgLS1mYXRhbC13YXJuaW5ncyIKKyAJOzsKKy0gIHNoLSotKiB8IHNoWzM0XS0qLSopCisrICBzaC0qLSogfCBzaFszNF0qLSotKikKKyAgICAgY29uZnRlc3Rfcz0nCisgCS5zZWN0aW9uICIudGRhdGEiLCJhd1QiLEBwcm9nYml0cworIGZvbzoJLmxvbmcJMjUKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4xLjIvMjAwLWFybS1iaWdlbmRpYW4ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMS4yLzIwMC1hcm0tYmlnZW5kaWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YjgzZWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMS4yLzIwMC1hcm0tYmlnZW5kaWFuLnBhdGNoCkBAIC0wLDAgKzEsMTE0IEBACistLS0gZ2NjLTQuMS4yLm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgJMjAwNy0wMy0wNCAyMzoyNTozNy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4xLjIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgJMjAwNy0wMy0wNCAyMzozNTowOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yOCwxOSArMjgsMzMgQEAKKyAjdW5kZWYgIFRBUkdFVF9WRVJTSU9OCisgI2RlZmluZSBUQVJHRVRfVkVSU0lPTiAgZnB1dHMgKCIgKEFSTSBHTlUvTGludXggd2l0aCBFTEYpIiwgc3RkZXJyKTsKKyAKKysvKgorKyAqICdjb25maWcuZ2NjJyBkZWZpbmVzIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQgYXMgMSBmb3IgYXJtKmItKgorKyAqIChiaWcgZW5kaWFuKSBjb25maWd1cmF0aW9ucy4KKysgKi8KKysjaWYgVEFSR0VUX0JJR19FTkRJQU5fREVGQVVMVAorKyNkZWZpbmUgVEFSR0VUX0VORElBTl9ERUZBVUxUIE1BU0tfQklHX0VORAorKyNkZWZpbmUgVEFSR0VUX0VORElBTl9PUFRJT04gIm1iaWctZW5kaWFuIgorKyNkZWZpbmUgVEFSR0VUX0xJTktFUl9FTVVMQVRJT04gImFybWVsZmJfbGludXgiCisrI2Vsc2UKKysjZGVmaW5lIFRBUkdFVF9FTkRJQU5fREVGQVVMVCAwCisrI2RlZmluZSBUQVJHRVRfRU5ESUFOX09QVElPTiAibWxpdHRsZS1lbmRpYW4iCisrI2RlZmluZSBUQVJHRVRfTElOS0VSX0VNVUxBVElPTiAiYXJtZWxmX2xpbnV4IgorKyNlbmRpZgorKworICN1bmRlZiAgVEFSR0VUX0RFRkFVTFRfRkxPQVRfQUJJCisgI2RlZmluZSBUQVJHRVRfREVGQVVMVF9GTE9BVF9BQkkgQVJNX0ZMT0FUX0FCSV9IQVJECisgCisgI3VuZGVmICBUQVJHRVRfREVGQVVMVAorLSNkZWZpbmUgVEFSR0VUX0RFRkFVTFQgKDApCisrI2RlZmluZSBUQVJHRVRfREVGQVVMVCAoVEFSR0VUX0VORElBTl9ERUZBVUxUKQorIAorICNkZWZpbmUgU1VCVEFSR0VUX0NQVV9ERUZBVUxUIFRBUkdFVF9DUFVfYXJtNgorIAorLSNkZWZpbmUgU1VCVEFSR0VUX0VYVFJBX0xJTktfU1BFQyAiIC1tIGFybWVsZl9saW51eCAtcCIKKysjZGVmaW5lIFNVQlRBUkdFVF9FWFRSQV9MSU5LX1NQRUMgIiAtbSAiIFRBUkdFVF9MSU5LRVJfRU1VTEFUSU9OICIgLXAiCisgCisgI3VuZGVmICBNVUxUSUxJQl9ERUZBVUxUUworICNkZWZpbmUgTVVMVElMSUJfREVGQVVMVFMgXAorLQl7ICJtYXJtIiwgIm1saXR0bGUtZW5kaWFuIiwgIm1oYXJkLWZsb2F0IiwgIm1uby10aHVtYi1pbnRlcndvcmsiIH0KKysJeyAibWFybSIsIFRBUkdFVF9FTkRJQU5fT1BUSU9OLCAibWhhcmQtZmxvYXQiLCAibW5vLXRodW1iLWludGVyd29yayIgfQorIAorIC8qIE5vdyB3ZSBkZWZpbmUgdGhlIHN0cmluZ3MgdXNlZCB0byBidWlsZCB0aGUgc3BlYyBmaWxlLiAgKi8KKyAjdW5kZWYgIExJQl9TUEVDCitAQCAtNjUsNyArNzksNyBAQAorICAgICV7cmR5bmFtaWM6LWV4cG9ydC1keW5hbWljfSBcCisgICAgJXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyICIgTElOVVhfVEFSR0VUX0lOVEVSUFJFVEVSICJ9IFwKKyAgICAtWCBcCistICAgJXttYmlnLWVuZGlhbjotRUJ9IiBcCisrICAgJXttYmlnLWVuZGlhbjotRUJ9ICV7bWxpdHRsZS1lbmRpYW46LUVMfSIgXAorICAgIFNVQlRBUkdFVF9FWFRSQV9MSU5LX1NQRUMKKyAKKyAjdW5kZWYgIExJTktfU1BFQworLS0tIGdjYy00LjEuMi5vcmlnL2djYy9jb25maWcuZ2NjCTIwMDctMDMtMDQgMjM6MzE6NDguMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMS4yL2djYy9jb25maWcuZ2NjCTIwMDctMDMtMDQgMjM6MzU6MDkuMDAwMDAwMDAwICswMTAwCitAQCAtNjcyLDYgKzY3MiwxMSBAQAorIAk7OworIGFybSotKi1saW51eCopCQkJIyBBUk0gR05VL0xpbnV4IHdpdGggRUxGCisgCXRtX2ZpbGU9ImRieGVsZi5oIGVsZm9zLmggbGludXguaCBhcm0vZWxmLmggYXJtL2xpbnV4LWdhcy5oIGFybS9saW51eC1lbGYuaCIgCisrCWNhc2UgJHRhcmdldCBpbgorKwlhcm0qYi0qKQorKwkJdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUPTEiCisrCQk7OworKwllc2FjCisgCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gdC1saW51eCBhcm0vdC1hcm0iCisgCWNhc2UgJHt0YXJnZXR9IGluCisgCWFybSotKi1saW51eC1nbnVlYWJpIHwgYXJtKi0qLWxpbnV4LXVjbGliY2dudWVhYmkpCistLS0gZ2NjLTQuMS4yLm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCTIwMDctMDMtMDQgMjM6MzE6NDguMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMS4yL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAkyMDA3LTAzLTA0IDIzOjM1OjA5LjAwMDAwMDAwMCArMDEwMAorQEAgLTIwLDYgKzIwLDE3IEBACisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgCisrLyoKKysgKiAnY29uZmlnLmdjYycgZGVmaW5lcyBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUIGFzIDEgZm9yIGFybSpiLSoKKysgKiAoYmlnIGVuZGlhbikgY29uZmlndXJhdGlvbnMuCisrICovCisrI3VuZGVmIFRBUkdFVF9MSU5LRVJfRU1VTEFUSU9OCisrI2lmIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQKKysjZGVmaW5lIFRBUkdFVF9MSU5LRVJfRU1VTEFUSU9OICJhcm1lbGZiX2xpbnV4X2VhYmkiCisrI2Vsc2UKKysjZGVmaW5lIFRBUkdFVF9MSU5LRVJfRU1VTEFUSU9OICJhcm1lbGZfbGludXhfZWFiaSIKKysjZW5kaWYKKysKKyAvKiBPbiBFQUJJIEdOVS9MaW51eCwgd2Ugd2FudCBib3RoIHRoZSBCUEFCSSBidWlsdGlucyBhbmQgdGhlCisgICAgR05VL0xpbnV4IGJ1aWx0aW5zLiAgKi8KKyAjdW5kZWYgVEFSR0VUX09TX0NQUF9CVUlMVElOUworQEAgLTQ4LDcgKzU5LDcgQEAKKyAjZGVmaW5lIFNVQlRBUkdFVF9DUFVfREVGQVVMVCBUQVJHRVRfQ1BVX2FybTEwdGRtaQorIAorICN1bmRlZiBTVUJUQVJHRVRfRVhUUkFfTElOS19TUEVDCistI2RlZmluZSBTVUJUQVJHRVRfRVhUUkFfTElOS19TUEVDICIgLW0gYXJtZWxmX2xpbnV4X2VhYmkiCisrI2RlZmluZSBTVUJUQVJHRVRfRVhUUkFfTElOS19TUEVDICIgLW0gIiBUQVJHRVRfTElOS0VSX0VNVUxBVElPTgorIAorIC8qIFVzZSBsZC1saW51eC5zby4zIHNvIHRoYXQgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBydW4gImNsYXNzaWMiCisgICAgR05VL0xpbnV4IGJpbmFyaWVzIG9uIGFuIEVBQkkgc3lzdGVtLiAgKi8KKy0tLSBnY2MtNC4xLjIub3JpZy9nY2MvY29uZmlnL2FybS9icGFiaS5oCTIwMDUtMTItMTMgMDI6MzU6MzcuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMS4yL2djYy9jb25maWcvYXJtL2JwYWJpLmgJMjAwNy0wMy0wNCAyMzozNTowOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zMyw5ICszMywxOSBAQAorICN1bmRlZiBGUFVUWVBFX0RFRkFVTFQKKyAjZGVmaW5lIEZQVVRZUEVfREVGQVVMVCBGUFVUWVBFX1ZGUAorIAorKy8qCisrICogJ2NvbmZpZy5nY2MnIGRlZmluZXMgVEFSR0VUX0JJR19FTkRJQU5fREVGQVVMVCBhcyAxIGZvciBhcm0qYi0qCisrICogKGJpZyBlbmRpYW4pIGNvbmZpZ3VyYXRpb25zLgorKyAqLworKyNpZiBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUCisrI2RlZmluZSBUQVJHRVRfRU5ESUFOX0RFRkFVTFQgTUFTS19CSUdfRU5ECisrI2Vsc2UKKysjZGVmaW5lIFRBUkdFVF9FTkRJQU5fREVGQVVMVCAwCisrI2VuZGlmCisrCisgLyogRUFCSSB0YXJnZXRzIHNob3VsZCBlbmFibGUgaW50ZXJ3b3JraW5nIGJ5IGRlZmF1bHQuICAqLworICN1bmRlZiBUQVJHRVRfREVGQVVMVAorLSNkZWZpbmUgVEFSR0VUX0RFRkFVTFQgTUFTS19JTlRFUldPUksKKysjZGVmaW5lIFRBUkdFVF9ERUZBVUxUIChNQVNLX0lOVEVSV09SSyB8IFRBUkdFVF9FTkRJQU5fREVGQVVMVCkKKyAKKyAvKiBUaGUgQVJNIEJQQUJJIGZ1bmN0aW9ucyByZXR1cm4gYSBib29sZWFuOyB0aGV5IHVzZSBubyBzcGVjaWFsCisgICAgY2FsbGluZyBjb252ZW50aW9uLiAgKi8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4xLjIvMjEwLXNvZnRmbG9hdC1maXgucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMS4yLzIxMC1zb2Z0ZmxvYXQtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NGM5YTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMS4yLzIxMC1zb2Z0ZmxvYXQtZml4LnBhdGNoCkBAIC0wLDAgKzEsNTggQEAKK1RoaXMgcGF0Y2ggKEMpIDIwMDcgWWFubiBFLiBNT1JJTgorTGljZW5zZWQgdW5kZXIgR1BMIHYyLgorCitGaXJzdCBodW5rIG9mIHRoaXMgcGF0Y2ggc29sdmVzIGNvbXBpbGluZyB1Q2xpYmMtMC45LjI4eywuMX0gOgorCittYWtlWzFdOiBFbnRlcmluZyBkaXJlY3RvcnkgYC9ob21lL3ltb3Jpbi94LXRvb2xzL2J1aWxkL2FybWViLXVua25vd24tbGludXgtdWNsaWJjL2djYy00LjEuMS11Q2xpYmMtMC45LjI4LjEvYnVpbGQtbGliYycKKyAgTEQgbGlidUNsaWJjLTAuOS4yOS5zbworbGliYy9saWJjX3NvLmEoZGlmZnRpbWUub3MpOiBJbiBmdW5jdGlvbiBgZGlmZnRpbWUnOgorZGlmZnRpbWUuYzooLnRleHQrMHg4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19mbG9hdHNpZGYnCitkaWZmdGltZS5jOigudGV4dCsweDJjKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19zdWJkZjMnCitsaWJjL2xpYmNfc28uYShfZnBtYXh0b3N0ci5vcyk6IEluIGZ1bmN0aW9uIGBfZnBtYXh0b3N0cic6CitfZnBtYXh0b3N0ci5jOigudGV4dCsweGQ0KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19uZWRmMicKK19mcG1heHRvc3RyLmM6KC50ZXh0KzB4ZjgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX2VxZGYyJworX2ZwbWF4dG9zdHIuYzooLnRleHQrMHgxMTQpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX2RpdmRmMycKK19mcG1heHRvc3RyLmM6KC50ZXh0KzB4MTIwKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19sdGRmMicKK19mcG1heHRvc3RyLmM6KC50ZXh0KzB4MWM0KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19tdWxkZjMnCitfZnBtYXh0b3N0ci5jOigudGV4dCsweDM4OCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fZ2VkZjInCitfZnBtYXh0b3N0ci5jOigudGV4dCsweDQzMCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fYWRkZGYzJworbGliYy9saWJjX3NvLmEoX19wc2ZzX2RvX251bWVyaWMub3MpOiBJbiBmdW5jdGlvbiBgX19wc2ZzX2RvX251bWVyaWMnOgorX19wc2ZzX2RvX251bWVyaWMuYzooLnRleHQrMHg1MjApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX3RydW5jZGZzZjInCitsaWJjL2xpYmNfc28uYShzdHJ0b2Yub3MpOiBJbiBmdW5jdGlvbiBgc3RydG9mJzoKK3N0cnRvZi5jOigudGV4dCsweDFjKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19leHRlbmRzZmRmMicKKy9ob21lL3ltb3Jpbi94LXRvb2xzL2J1aWxkL2FybWViLXVua25vd24tbGludXgtdWNsaWJjL2djYy00LjEuMS11Q2xpYmMtMC45LjI4LjEvY2NfY29yZV9wcmVmaXgvbGliL2djYy9hcm0tbGludXgtdWNsaWJjLzQuMS4xL2xpYmdjYy5hKF9maXh1bnNkZnNpLm8pOgorSW4gZnVuY3Rpb24gYF9fZml4dW5zZGZzaSc6CitsaWJnY2MyLmM6KC50ZXh0KzB4MzQpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX2ZpeGRmc2knCittYWtlWzJdOiAqKiogW2xpYi9saWJjLnNvXSBFcnJvciAxCittYWtlWzFdOiAqKiogW2xpYi9saWJjLnNvLjBdIEVycm9yIDIKK21ha2VbMV06IExlYXZpbmcgZGlyZWN0b3J5IGAvaG9tZS95bW9yaW4veC10b29scy9idWlsZC9hcm1lYi11bmtub3duLWxpbnV4LXVjbGliYy9nY2MtNC4xLjEtdUNsaWJjLTAuOS4yOC4xL2J1aWxkLWxpYmMnCittYWtlOiAqKiogWy9ob21lL3ltb3Jpbi94LXRvb2xzL2J1aWxkL2FybWViLXVua25vd24tbGludXgtdWNsaWJjL2djYy00LjEuMS11Q2xpYmMtMC45LjI4LjEvYnVpbGQtbGliYy9saWIvbGliYy5hXQorRXJyb3IgMgorCitUaGUgc2Vjb25kIGh1bmsgZml4ZXMgYnVpbGRpbmcgZmluYWwgZ2NjIGJlY2F1c2Ugc29mdC1mbG9hdCBpbXBsaWVzIHVzaW5nIC1sZmxvYXQgKHdoaWNoIHdlIGRvbid0IGhhdmUpLgorCisKK2RpZmYgLWR1ciBnY2MtNC4xLjEubm8tc29mdGZsb2F0LWZpeC9nY2MvY29uZmlnLmdjYyBnY2MtNC4xLjEvZ2NjL2NvbmZpZy5nY2MKKy0tLSBnY2MtNC4xLjEubm8tc29mdGZsb2F0LWZpeC9nY2MvY29uZmlnLmdjYwkyMDA3LTAyLTAxIDIxOjU3OjE3LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjEuMS9nY2MvY29uZmlnLmdjYwkyMDA3LTAyLTAxIDIyOjExOjA2LjAwMDAwMDAwMCArMDEwMAorQEAgLTY5MCw3ICs2OTAsNyBAQAorIAkgICAgZGVmYXVsdF91c2VfY3hhX2F0ZXhpdD15ZXMKKyAJICAgIDs7CisgCSopCistCSAgICB0bWFrZV9maWxlPSIkdG1ha2VfZmlsZSBhcm0vdC1saW51eCIKKysJICAgIHRtYWtlX2ZpbGU9IiR0bWFrZV9maWxlIGFybS90LWxpbnV4IGFybS90LWFybS1lbGYiCisgCSAgICA7OworIAllc2FjCisgCXRtX2ZpbGU9IiR0bV9maWxlIGFybS9hb3V0LmggYXJtL2FybS5oIgorZGlmZiAtZHVyIGdjYy00LjEuMS4tbGZsb2F0L2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oIGdjYy00LjEuMS9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorLS0tIGdjYy00LjEuMS4tbGZsb2F0L2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMDctMDItMDEgMjE6NTc6MTcuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMS4xL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMDctMDItMDEgMjM6MDA6NDIuMDAwMDAwMDAwICswMTAwCitAQCAtNjMsNyArNjMsNyBAQAorICAgICV7c2hhcmVkOi1sY30gXAorICAgICV7IXNoYXJlZDole3Byb2ZpbGU6LWxjX3B9JXshcHJvZmlsZTotbGN9fSIKKyAKKy0jZGVmaW5lIExJQkdDQ19TUEVDICIle21zb2Z0LWZsb2F0Oi1sZmxvYXR9ICV7bWZsb2F0LWFiaT1zb2Z0KjotbGZsb2F0fSAtbGdjYyIKKysjZGVmaW5lIExJQkdDQ19TUEVDICItbGdjYyIKKyAKKyAjaWZkZWYgVVNFX1VDTElCQworICNkZWZpbmUgTElOVVhfVEFSR0VUX0lOVEVSUFJFVEVSICIvbGliL2xkLXVDbGliYy5zby4wIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMC8xMDAtdWNsaWJjLWNvbmYucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4wLzEwMC11Y2xpYmMtY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjQzZmY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMC8xMDAtdWNsaWJjLWNvbmYucGF0Y2gKQEAgLTAsMCArMSwyMDAgQEAKKy0tLSBnY2MvbGliZ29tcC9jb25maWd1cmUKKysrKyBnY2MvbGliZ29tcC9jb25maWd1cmUKK0BAIC0zNzcxLDcgKzM3NzEsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKKy0tLSBnY2MvZ2NjL2NvbmZpZy9jcmlzL2xpbnV4LmgKKysrKyBnY2MvZ2NjL2NvbmZpZy9jcmlzL2xpbnV4LmgKK0BAIC03NCw3ICs3NCwxMSBAQAorICNkZWZpbmUgQ1JJU19ERUZBVUxUX0NQVV9WRVJTSU9OIENSSVNfQ1BVX05HCisgCisgI3VuZGVmIENSSVNfU1VCVEFSR0VUX1ZFUlNJT04KKy0jZGVmaW5lIENSSVNfU1VCVEFSR0VUX1ZFUlNJT04gIiAtIGNyaXMtYXhpcy1saW51eC1nbnUiCisrI2lmIFVDTElCQ19ERUZBVUxUCisrIyBkZWZpbmUgQ1JJU19TVUJUQVJHRVRfVkVSU0lPTiAiIC0gY3Jpcy1heGlzLWxpbnV4LXVjbGliYyIKKysjZWxzZQorKyMgZGVmaW5lIENSSVNfU1VCVEFSR0VUX1ZFUlNJT04gIiAtIGNyaXMtYXhpcy1saW51eC1nbnUiCisrI2VuZGlmCisgCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC5zby4xIgorIAorLS0tIGdjYy9saWJzdGRjKystdjMvY29uZmlndXJlCisrKysgZ2NjL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK0BAIC00Mjc2LDcgKzQyNzYsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKKy0tLSBnY2MvemxpYi9jb25maWd1cmUKKysrKyBnY2MvemxpYi9jb25maWd1cmUKK0BAIC0zNDIyLDcgKzM0MjIsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKKy0tLSBnY2MvbGlib2JqYy9jb25maWd1cmUKKysrKyBnY2MvbGlib2JqYy9jb25maWd1cmUKK0BAIC0zMzA5LDcgKzMzMDksNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKKy0tLSBnY2MvbGliZ2ZvcnRyYW4vY29uZmlndXJlCisrKysgZ2NjL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQorQEAgLTM2OTUsNyArMzY5NSw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorLS0tIGdjYy9saWJtdWRmbGFwL2NvbmZpZ3VyZQorKysrIGdjYy9saWJtdWRmbGFwL2NvbmZpZ3VyZQorQEAgLTUzNzgsNyArNTM3OCw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorLS0tIGdjYy9ib2VobS1nYy9jb25maWd1cmUKKysrKyBnY2MvYm9laG0tZ2MvY29uZmlndXJlCitAQCAtNDMxNiw3ICs0MzE2LDcgQEAKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgqKQorICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgIDs7CisgCistLS0gZ2NjL2xpYmZmaS9jb25maWd1cmUKKysrKyBnY2MvbGliZmZpL2NvbmZpZ3VyZQorQEAgLTM0NTMsNyArMzQ1Myw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorLS0tIGdjYy9saWJzc3AvY29uZmlndXJlCisrKysgZ2NjL2xpYnNzcC9jb25maWd1cmUKK0BAIC00NDA5LDcgKzQ0MDksNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKKy0tLSBnY2MvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCisrKysgZ2NjL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAorQEAgLTEwNSw2ICsxMDUsMTAgQEAKKyAgdGhlbgorICAgbWFrZSBhbGwtZ2RiIGFsbC1kZWphZ251IGFsbC1sZCB8fCBleGl0IDEKKyAgIG1ha2UgaW5zdGFsbC1nZGIgaW5zdGFsbC1kZWphZ251IGluc3RhbGwtbGQgfHwgZXhpdCAxCisrZWxpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIC1hICRIX1JFQUxfVEFSR0VUID0gaTY4Ni1wYy1saW51eC11Y2xpYmMgXQorKyB0aGVuCisrICBtYWtlIGFsbC1nZGIgYWxsLWRlamFnbnUgYWxsLWxkIHx8IGV4aXQgMQorKyAgbWFrZSBpbnN0YWxsLWdkYiBpbnN0YWxsLWRlamFnbnUgaW5zdGFsbC1sZCB8fCBleGl0IDEKKyBlbGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgXSA7IHRoZW4KKyAgIG1ha2UgYm9vdHN0cmFwIHx8IGV4aXQgMQorICAgbWFrZSBpbnN0YWxsIHx8IGV4aXQgMQorLS0tIGdjYy9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZworKysrIGdjYy9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZworQEAgLTYwMyw3ICs2MDMsNyBAQAorIAorICMgVHJhbnNmb3JtIGxpbnV4KiB0byAqLSotbGludXgtZ251KiwgdG8gc3VwcG9ydCBvbGQgY29uZmlndXJlIHNjcmlwdHMuCisgY2FzZSAkaG9zdF9vcyBpbgorLWxpbnV4LWdudSopIDs7CisrbGludXgtZ251KnxsaW51eC11Y2xpYmMqKSA7OworIGxpbnV4KikgaG9zdD1gZWNobyAkaG9zdCB8IHNlZCAncy9eXCguKi0uKi1saW51eFwpXCguKlwpJC9cMS1nbnVcMi8nYAorIGVzYWMKKyAKK0BAIC0xMjUxLDcgKzEyNTEsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgbmVlZF92ZXJzaW9uPW5vCistLS0gZ2NjL2xpYmphdmEvY2xhc3NwYXRoL2NvbmZpZ3VyZQorKysrIGdjYy9saWJqYXZhL2NsYXNzcGF0aC9jb25maWd1cmUKK0BAIC00NjY1LDcgKzQ2NjUsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKKy0tLSBnY2MvbGliamF2YS9jb25maWd1cmUKKysrKyBnY2MvbGliamF2YS9jb25maWd1cmUKK0BAIC01MjEyLDcgKzUyMTIsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKKy0tLSBnY2MvbGlidG9vbC5tNAorKysrIGdjYy9saWJ0b29sLm00CitAQCAtNzM5LDcgKzczOSw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorLS0tIGdjYy9sdGNvbmZpZworKysrIGdjYy9sdGNvbmZpZworQEAgLTYwMyw3ICs2MDMsNyBAQAorIAorICMgVHJhbnNmb3JtIGxpbnV4KiB0byAqLSotbGludXgtZ251KiwgdG8gc3VwcG9ydCBvbGQgY29uZmlndXJlIHNjcmlwdHMuCisgY2FzZSAkaG9zdF9vcyBpbgorLWxpbnV4LWdudSopIDs7CisrbGludXgtZ251KnxsaW51eC11Y2xpYmMqKSA7OworIGxpbnV4KikgaG9zdD1gZWNobyAkaG9zdCB8IHNlZCAncy9eXCguKi0uKi1saW51eFwpXCguKlwpJC9cMS1nbnVcMi8nYAorIGVzYWMKKyAKK0BAIC0xMjUxLDcgKzEyNTEsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgbmVlZF92ZXJzaW9uPW5vCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4wLzExMC11Y2xpYmMtY29uZi1ub3Vwc3RyZWFtLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMC8xMTAtdWNsaWJjLWNvbmYtbm91cHN0cmVhbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWM5YmJlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMC8xMTAtdWNsaWJjLWNvbmYtbm91cHN0cmVhbS5wYXRjaApAQCAtMCwwICsxLDExIEBACistLS0gZ2NjL2djYy9jb25maWcuZ2NjLnVjbGliYzEwMC1zaH4JMjAwNi0wMy0wNiAyMDo0Njo1NiArMDEwMAorKysrIGdjYy9nY2MvY29uZmlnLmdjYwkyMDA2LTAzLTEwIDE1OjAyOjQxICswMTAwCitAQCAtMTkwNSw3ICsxOTA1LDcgQEAKKyAJOzsKKyBzaC0qLWVsZiogfCBzaFsxMjM0NmxdKi0qLWVsZiogfCBzaCotKi1rYW9zKiB8IFwKKyBzaC0qLXN5bWJpYW5lbGYqIHwgc2hbMTIzNDZsXSotKi1zeW1iaWFuZWxmKiB8IFwKKy0gIHNoLSotbGludXgqIHwgc2hbMzQ2bGJlXSotKi1saW51eCogfCBcCisrICBzaCotKi1saW51eCogfCBzaFszNDZsYmVdKi0qLWxpbnV4KiB8IFwKKyAgIHNoLSotbmV0YnNkZWxmKiB8IHNobCotKi1uZXRic2RlbGYqIHwgc2g1LSotbmV0YnNkKiB8IHNoNWwqLSotbmV0YnNkKiB8IFwKKyAgICBzaDY0LSotbmV0YnNkKiB8IHNoNjRsKi0qLW5ldGJzZCopCisgCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gc2gvdC1zaCBzaC90LWVsZiIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjAvMTIwLXVjbGliYy1sb2NhbGUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4wLzEyMC11Y2xpYmMtbG9jYWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MzNkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4wLzEyMC11Y2xpYmMtbG9jYWxlLnBhdGNoCkBAIC0wLDAgKzEsMjc5MCBAQAorLS0tIGdjYy9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CisrKysgZ2NjL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKK0BAIC0xMzY5LDcgKzEzNjksNyBAQAorICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgQyBsb2NhbGUgdG8gdXNlXSkKKyAgIEdMSUJDWFhfRU5BQkxFKGNsb2NhbGUsYXV0byxbQDw6QD1NT0RFTEA6PkBdLAorICAgICBbdXNlIE1PREVMIGZvciB0YXJnZXQgbG9jYWxlIHBhY2thZ2VdLAorLSAgICBbcGVybWl0IGdlbmVyaWN8Z251fGllZWVfMTAwMy4xLTIwMDF8eWVzfG5vfGF1dG9dKQorKyAgICBbcGVybWl0IGdlbmVyaWN8Z251fGllZWVfMTAwMy4xLTIwMDF8dWNsaWJjfHllc3xub3xhdXRvXSkKKyAgIAorICAgIyBJZiB0aGV5IGRpZG4ndCB1c2UgdGhpcyBvcHRpb24gc3dpdGNoLCBvciBpZiB0aGV5IHNwZWNpZmllZCAtLWVuYWJsZQorICAgIyB3aXRoIG5vIHNwZWNpZmljIG1vZGVsLCB3ZSdsbCBoYXZlIHRvIGxvb2sgZm9yIG9uZS4gIElmIHRoZXkKK0BAIC0xMzg1LDYgKzEzODUsOSBAQAorICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCisrICAgICAgKi11Y2xpYmMqKQorKyAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz11Y2xpYmMKKysgICAgICAgIDs7CisgICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCisgICAgICAgICBBQ19FR1JFUF9DUFAoW19HTElCQ1hYX29rXSwgWworICAgICAgICAgI2luY2x1ZGUgPGZlYXR1cmVzLmg+CitAQCAtMTUyOCw2ICsxNTMxLDQwIEBACisgICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5jYworICAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvYysrbG9jYWxlX2ludGVybmFsLmgKKyAgICAgICA7OworKyAgICB1Y2xpYmMpCisrICAgICAgQUNfTVNHX1JFU1VMVCh1Y2xpYmMpCisrCisrICAgICAgIyBEZWNsYXJlIGludGVudGlvbiB0byB1c2UgZ2V0dGV4dCwgYW5kIGFkZCBzdXBwb3J0IGZvciBzcGVjaWZpYworKyAgICAgICMgbGFuZ3VhZ2VzLgorKyAgICAgICMgRm9yIHNvbWUgcmVhc29uLCBBTExfTElOR1VBUyBoYXMgdG8gYmUgYmVmb3JlIEFNLUdOVS1HRVRURVhUCisrICAgICAgQUxMX0xJTkdVQVM9ImRlIGZyIgorKworKyAgICAgICMgRG9uJ3QgY2FsbCBBTS1HTlUtR0VUVEVYVCBoZXJlLiBJbnN0ZWFkLCBhc3N1bWUgZ2xpYmMuCisrICAgICAgQUNfQ0hFQ0tfUFJPRyhjaGVja19tc2dmbXQsIG1zZ2ZtdCwgeWVzLCBubykKKysgICAgICBpZiB0ZXN0IHgiJGNoZWNrX21zZ2ZtdCIgPSB4InllcyIgJiYgdGVzdCB4IiRlbmFibGVfbmxzIiA9IHgieWVzIjsgdGhlbgorKyAgICAgICAgVVNFX05MUz15ZXMKKysgICAgICBmaQorKyAgICAgICMgRXhwb3J0IHRoZSBidWlsZCBvYmplY3RzLgorKyAgICAgIGZvciBsaW5nIGluICRBTExfTElOR1VBUzsgZG8gXAorKyAgICAgICAgZ2xpYmN4eF9NT0ZJTEVTPSIkZ2xpYmN4eF9NT0ZJTEVTICRsaW5nLm1vIjsgXAorKyAgICAgICAgZ2xpYmN4eF9QT0ZJTEVTPSIkZ2xpYmN4eF9QT0ZJTEVTICRsaW5nLnBvIjsgXAorKyAgICAgIGRvbmUKKysgICAgICBBQ19TVUJTVChnbGliY3h4X01PRklMRVMpCisrICAgICAgQUNfU1VCU1QoZ2xpYmN4eF9QT0ZJTEVTKQorKworKyAgICAgIENMT0NBTEVfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrICAgICAgQ0xPQ0FMRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKyAgICAgIENDT0RFQ1ZUX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworKyAgICAgIENDT0xMQVRFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworKyAgICAgIENDVFlQRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrICAgICAgQ01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrICAgICAgQ01FU1NBR0VTX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKysgICAgICBDTU9ORVlfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKyAgICAgIENOVU1FUklDX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKyAgICAgIENUSU1FX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysgICAgICA7OworICAgZXNhYworIAorICAgIyBUaGlzIGlzIHdoZXJlIHRoZSB0ZXN0c3VpdGUgbG9va3MgZm9yIGxvY2FsZSBjYXRhbG9ncywgdXNpbmcgdGhlCistLS0gZ2NjL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKysrIGdjYy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK0BAIC0wLDAgKzEsNjMgQEAKKysvLyBQcm90b3R5cGVzIGZvciBHTElCQyB0aHJlYWQgbG9jYWxlIF9fLXByZWZpeGVkIGZ1bmN0aW9ucyAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLyBXcml0dGVuIGJ5IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisrI2luY2x1ZGUgPGNsb2NhbGU+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgY2xlYW4gdGhpcyB1cAorKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKytleHRlcm4gIkMiIF9fdHlwZW9mKG5sX2xhbmdpbmZvX2wpIF9fbmxfbGFuZ2luZm9fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cmNvbGxfbCkgX19zdHJjb2xsX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJmdGltZV9sKSBfX3N0cmZ0aW1lX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2RfbCkgX19zdHJ0b2RfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvZl9sKSBfX3N0cnRvZl9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9sZF9sKSBfX3N0cnRvbGRfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnhmcm1fbCkgX19zdHJ4ZnJtX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihuZXdsb2NhbGUpIF9fbmV3bG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YoZnJlZWxvY2FsZSkgX19mcmVlbG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YoZHVwbG9jYWxlKSBfX2R1cGxvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrZXh0ZXJuICJDIiBfX3R5cGVvZihpc3djdHlwZV9sKSBfX2lzd2N0eXBlX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih0b3dsb3dlcl9sKSBfX3Rvd2xvd2VyX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih0b3d1cHBlcl9sKSBfX3Rvd3VwcGVyX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3Njb2xsX2wpIF9fd2NzY29sbF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzZnRpbWVfbCkgX193Y3NmdGltZV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzeGZybV9sKSBfX3djc3hmcm1fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjdHlwZV9sKSBfX3djdHlwZV9sOworKyNlbmRpZiAKKysKKysjZW5kaWYgLy8gR0xJQkMgMi4zIGFuZCBsYXRlcgorLS0tIGdjYy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysrKyBnY2MvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitAQCAtMCwwICsxLDE2MCBAQAorKy8vIFdyYXBwZXIgZm9yIHVuZGVybHlpbmcgQy1sYW5ndWFnZSBsb2NhbGl6YXRpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi44ICBTdGFuZGFyZCBsb2NhbGUgY2F0ZWdvcmllcy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGNlcnJubz4gIC8vIEZvciBlcnJubworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KKysjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fc3RydG9sX2woUywgRSwgQiwgTCkgICAgICBzdHJ0b2woKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG91bF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b3VsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvbGxfbChTLCBFLCBCLCBMKSAgICAgc3RydG9sbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b3VsbF9sKFMsIEUsIEIsIEwpICAgIHN0cnRvdWxsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorKyNkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKysjZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorKyN3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CisrI2RlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorKyNkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQgCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZmxvYXQmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCAKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19mOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19kOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGxvbmcgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2xkOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHZvaWQKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgCisrCQkJCSAgICBfX2NfbG9jYWxlIF9fb2xkKQorKyAgeworKyAgICBfX2Nsb2MgPSBfX25ld2xvY2FsZSgxIDw8IExDX0FMTCwgX19zLCBfX29sZCk7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgaWYgKCFfX2Nsb2MpCisrICAgICAgeworKwkvLyBUaGlzIG5hbWVkIGxvY2FsZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIE9TLgorKwlfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUgIgorKwkJCSAgICAgICJuYW1lIG5vdCB2YWxpZCIpKTsKKysgICAgICB9CisrI2VuZGlmCisrICB9CisrICAKKysgIHZvaWQKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorKyAgeworKyAgICBpZiAoX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorKyAgICAgIF9fZnJlZWxvY2FsZShfX2Nsb2MpOyAKKysgIH0KKysKKysgIF9fY19sb2NhbGUKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKysgIHsgcmV0dXJuIF9fZHVwbG9jYWxlKF9fY2xvYyk7IH0KKyt9IC8vIG5hbWVzcGFjZSBzdGQKKysKKytuYW1lc3BhY2UgX19nbnVfY3h4CisreworKyAgY29uc3QgY2hhciogY29uc3QgY2F0ZWdvcnlfbmFtZXNbNiArIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTXSA9CisrICAgIHsKKysgICAgICAiTENfQ1RZUEUiLCAKKysgICAgICAiTENfTlVNRVJJQyIsCisrICAgICAgIkxDX1RJTUUiLCAKKysgICAgICAiTENfQ09MTEFURSIsIAorKyAgICAgICJMQ19NT05FVEFSWSIsCisrICAgICAgIkxDX01FU1NBR0VTIiwgCisrI2lmIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTICE9IDAKKysgICAgICAiTENfUEFQRVIiLCAKKysgICAgICAiTENfTkFNRSIsIAorKyAgICAgICJMQ19BRERSRVNTIiwKKysgICAgICAiTENfVEVMRVBIT05FIiwgCisrICAgICAgIkxDX01FQVNVUkVNRU5UIiwgCisrICAgICAgIkxDX0lERU5USUZJQ0FUSU9OIiAKKysjZW5kaWYKKysgICAgfTsKKyt9CisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIGNvbnN0IGNoYXIqIGNvbnN0KiBjb25zdCBsb2NhbGU6Ol9TX2NhdGVnb3JpZXMgPSBfX2dudV9jeHg6OmNhdGVnb3J5X25hbWVzOworK30gIC8vIG5hbWVzcGFjZSBzdGQKKy0tLSBnY2MvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysrKyBnY2MvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK0BAIC0wLDAgKzEsMTE3IEBACisrLy8gV3JhcHBlciBmb3IgdW5kZXJseWluZyBDLWxhbmd1YWdlIGxvY2FsaXphdGlvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjggIFN0YW5kYXJkIGxvY2FsZSBjYXRlZ29yaWVzLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaWZuZGVmIF9DX0xPQ0FMRV9ICisrI2RlZmluZSBfQ19MT0NBTEVfSCAxCisrCisrI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorKworKyNpbmNsdWRlIDxjc3RyaW5nPiAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c3RybGVuCisrI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzbnByaW50ZiBvciBzdGQ6OnNwcmludGYKKysjaW5jbHVkZSA8Y2xvY2FsZT4KKysjaW5jbHVkZSA8bGFuZ2luZm8uaD4JCS8vIEZvciBjb2RlY3Z0CisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrI2luY2x1ZGUgPGljb252Lmg+CQkvLyBGb3IgY29kZWN2dCB1c2luZyBpY29udiwgaWNvbnZfdAorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyNpbmNsdWRlIDxsaWJpbnRsLmg+IAkJLy8gRm9yIG1lc3NhZ2VzCisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgd2hhdCBpcyBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgZm9yCisrI2VuZGlmCisrI2RlZmluZSBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgMQorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBjYXRlZ29yaWVzCisrI2VuZGlmCisrLy8gI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyA2CisrI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwCisrIAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrbmFtZXNwYWNlIF9fZ251X2N4eAorK3sKKysgIGV4dGVybiAiQyIgX190eXBlb2YodXNlbG9jYWxlKSBfX3VzZWxvY2FsZTsKKyt9CisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgdHlwZWRlZiBfX2xvY2FsZV90CQlfX2NfbG9jYWxlOworKyNlbHNlCisrICB0eXBlZGVmIGludCoJCQlfX2NfbG9jYWxlOworKyNlbmRpZgorKworKyAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgX1R2IHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgorKyAgLy8gc3RyaW5nLiAgSWYgc25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworKyAgLy8gdGhlIHVuc2FmZSBzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKysgIC8vIGJlIGF2b2lkZWQuCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CisrICAgIGludAorKyAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LCAKKysJCSAgICAgY29uc3QgaW50IF9fc2l6ZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpLAorKwkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysJCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19wcmVjKQorKyAgICB7CisrICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYykKKysgICAgeworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19vbGQpICsgMV07CisrICAgICAgc3RkOjpzdHJjcHkoX19zYXYsIF9fb2xkKTsKKysgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsICJDIik7CisrIyBlbmRpZgorKyNlbmRpZgorKworKyAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysgICAgICBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKysjZW5kaWYKKysgICAgICByZXR1cm4gX19yZXQ7CisrICAgIH0KKyt9CisrCisrI2VuZGlmCistLS0gZ2NjL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKysrKyBnY2MvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworQEAgLTAsMCArMSwzMDYgQEAKKysvLyBzdGQ6OmNvZGVjdnQgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuNSAtIFRlbXBsYXRlIGNsYXNzIGNvZGVjdnQKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gU3BlY2lhbGl6YXRpb25zLgorKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgY29kZWN2dF9iYXNlOjpyZXN1bHQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwgCisrCSBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKysJIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCisrCSBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKKysgIHsKKysgICAgcmVzdWx0IF9fcmV0ID0gb2s7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyB3Y3NucnRvbWJzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIGZhbGwgYmFjayB0byB3Y3J0b21iIGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiB3Y3NucnRvbWJzIGlzIGEgR05VIGV4dGVuc2lvbgorKyAgICBmb3IgKF9fZnJvbV9uZXh0ID0gX19mcm9tLCBfX3RvX25leHQgPSBfX3RvOworKwkgX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fdG9fbmV4dCA8IF9fdG9fZW5kCisrCSAmJiBfX3JldCA9PSBvazspCisrICAgICAgeworKwljb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZCA9IHdtZW1jaHIoX19mcm9tX25leHQsIEwnXDAnLAorKwkJCQkJCSAgICAgIF9fZnJvbV9lbmQgLSBfX2Zyb21fbmV4dCk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKKysKKysJX19mcm9tID0gX19mcm9tX25leHQ7CisrCWNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3NucnRvbWJzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LAorKwkJCQkJIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb21fbmV4dCwKKysJCQkJCSBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyB3Y3J0b21iLgorKwkgICAgZm9yICg7IF9fZnJvbSA8IF9fZnJvbV9uZXh0OyArK19fZnJvbSkKKysJICAgICAgX190b19uZXh0ICs9IHdjcnRvbWIoX190b19uZXh0LCAqX19mcm9tLCAmX190bXBfc3RhdGUpOworKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgPSBlcnJvcjsKKysJICB9CisrCWVsc2UgaWYgKF9fZnJvbV9uZXh0ICYmIF9fZnJvbV9uZXh0IDwgX19mcm9tX2NodW5rX2VuZCkKKysJICB7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tX2NodW5rX2VuZDsKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgfQorKworKwlpZiAoX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fcmV0ID09IG9rKQorKwkgIHsKKysJICAgIGV4dGVybl90eXBlIF9fYnVmW01CX0xFTl9NQVhdOworKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkgICAgY29uc3Qgc2l6ZV90IF9fY29udiA9IHdjcnRvbWIoX19idWYsICpfX2Zyb21fbmV4dCwgJl9fdG1wX3N0YXRlKTsKKysJICAgIGlmIChfX2NvbnYgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fdG9fZW5kIC0gX190b19uZXh0KSkKKysJICAgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgICAgZWxzZQorKwkgICAgICB7CisrCQltZW1jcHkoX190b19uZXh0LCBfX2J1ZiwgX19jb252KTsKKysJCV9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJCV9fdG9fbmV4dCArPSBfX2NvbnY7CisrCQkrK19fZnJvbV9uZXh0OworKwkgICAgICB9CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsgCisrICB9CisrICAKKysgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwgCisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorKwlpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAorKwlpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKKysgIHsKKysgICAgcmVzdWx0IF9fcmV0ID0gb2s7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIHN0b3JlIGEgTCdcMCcgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KKysgICAgLy8gTkI6IG1ic25ydG93Y3MgaXMgYSBHTlUgZXh0ZW5zaW9uCisrICAgIGZvciAoX19mcm9tX25leHQgPSBfX2Zyb20sIF9fdG9fbmV4dCA9IF9fdG87CisrCSBfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX190b19uZXh0IDwgX190b19lbmQKKysJICYmIF9fcmV0ID09IG9rOykKKysgICAgICB7CisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOworKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tX25leHQsICdcMCcsCisrCQkJCQkJCQkgIF9fZnJvbV9lbmQKKysJCQkJCQkJCSAgLSBfX2Zyb21fbmV4dCkpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7CisrCisrCV9fZnJvbSA9IF9fZnJvbV9uZXh0OworKwlzaXplX3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKKysJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbV9uZXh0LAorKwkJCQkgICBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyBtYnJ0b3djLgorKwkgICAgZm9yICg7OyArK19fdG9fbmV4dCwgX19mcm9tICs9IF9fY29udikKKysJICAgICAgeworKwkJX19jb252ID0gbWJydG93YyhfX3RvX25leHQsIF9fZnJvbSwgX19mcm9tX2VuZCAtIF9fZnJvbSwKKysJCQkJICZfX3RtcF9zdGF0ZSk7CisrCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCisrCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQorKwkJICBicmVhazsKKysJICAgICAgfQorKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb207CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CSAgICAKKysJICAgIF9fcmV0ID0gZXJyb3I7CisrCSAgfQorKwllbHNlIGlmIChfX2Zyb21fbmV4dCAmJiBfX2Zyb21fbmV4dCA8IF9fZnJvbV9jaHVua19lbmQpCisrCSAgeworKwkgICAgLy8gSXQgaXMgdW5jbGVhciB3aGF0IHRvIHJldHVybiBpbiB0aGlzIGNhc2UgKHNlZSBEUiAzODIpLiAKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb21fY2h1bmtfZW5kOworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICB9CisrCisrCWlmIChfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX19yZXQgPT0gb2spCisrCSAgeworKwkgICAgaWYgKF9fdG9fbmV4dCA8IF9fdG9fZW5kKQorKwkgICAgICB7CisrCQkvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncworKwkJX190bXBfc3RhdGUgPSBfX3N0YXRlOwkJCisrCQkrK19fZnJvbV9uZXh0OworKwkJKl9fdG9fbmV4dCsrID0gTCdcMCc7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7IAorKyAgfQorKworKyAgaW50IAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKQorKyAgeworKyAgICAvLyBYWFggVGhpcyBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGVuY29kaW5nIGlzCisrICAgIC8vIHN0YXRlbGVzcyBhbmQgaXMgZWl0aGVyIHNpbmdsZS1ieXRlIG9yIHZhcmlhYmxlLXdpZHRoLgorKyAgICBpbnQgX19yZXQgPSAwOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysgICAgaWYgKE1CX0NVUl9NQVggPT0gMSkKKysgICAgICBfX3JldCA9IDE7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gX19yZXQ7CisrICB9ICAKKysKKysgIGludCAKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKQorKyAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysgICAgLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MuCisrICAgIGludCBfX3JldCA9IE1CX0NVUl9NQVg7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrICAKKysgIGludCAKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19sZW5ndGgoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKKysJICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdAorKyAgeworKyAgICBpbnQgX19yZXQgPSAwOworKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysKKysgICAgLy8gbWJzbnJ0b3djcyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKysgICAgLy8gaW4gY2FzZSB3ZSBhZHZhbmNlIHBhc3QgaXQgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KKysgICAgLy8gTkI6IG1ic25ydG93Y3MgaXMgYSBHTlUgZXh0ZW5zaW9uCisrICAKKysgICAgLy8gQSBkdW1teSBpbnRlcm5hbCBidWZmZXIgaXMgbmVlZGVkIGluIG9yZGVyIGZvciBtYnNucnRvY3dzIHRvIGNvbnNpZGVyCisrICAgIC8vIGl0cyBmb3VydGggcGFyYW1ldGVyIChpdCB3b3VsZG4ndCB3aXRoIE5VTEwgYXMgZmlyc3QgcGFyYW1ldGVyKS4KKysgICAgd2NoYXJfdCogX190byA9IHN0YXRpY19jYXN0PHdjaGFyX3QqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZih3Y2hhcl90KSAKKysJCQkJCQkJICAgKiBfX21heCkpOworKyAgICB3aGlsZSAoX19mcm9tIDwgX19lbmQgJiYgX19tYXgpCisrICAgICAgeworKwljb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZDsKKysJX19mcm9tX2NodW5rX2VuZCA9IHN0YXRpY19jYXN0PGNvbnN0IGV4dGVybl90eXBlKj4obWVtY2hyKF9fZnJvbSwgJ1wwJywKKysJCQkJCQkJCSAgX19lbmQKKysJCQkJCQkJCSAgLSBfX2Zyb20pKTsKKysJaWYgKCFfX2Zyb21fY2h1bmtfZW5kKQorKwkgIF9fZnJvbV9jaHVua19lbmQgPSBfX2VuZDsKKysKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fdG1wX2Zyb20gPSBfX2Zyb207CisrCXNpemVfdCBfX2NvbnYgPSBtYnNucnRvd2NzKF9fdG8sICZfX2Zyb20sCisrCQkJCSAgIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb20sCisrCQkJCSAgIF9fbWF4LCAmX19zdGF0ZSk7CisrCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisrCSAgeworKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKKysJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKysJICAgIC8vIG1icnRvd2MuCisrCSAgICBmb3IgKF9fZnJvbSA9IF9fdG1wX2Zyb207OyBfX2Zyb20gKz0gX19jb252KQorKwkgICAgICB7CisrCQlfX2NvbnYgPSBtYnJ0b3djKE5VTEwsIF9fZnJvbSwgX19lbmQgLSBfX2Zyb20sCisrCQkJCSAmX190bXBfc3RhdGUpOworKwkJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKQorKwkJICAgIHx8IF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSkKKysJCSAgYnJlYWs7CisrCSAgICAgIH0KKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJICAgIF9fcmV0ICs9IF9fZnJvbSAtIF9fdG1wX2Zyb207CisrCSAgICBicmVhazsKKysJICB9CisrCWlmICghX19mcm9tKQorKwkgIF9fZnJvbSA9IF9fZnJvbV9jaHVua19lbmQ7CisrCQorKwlfX3JldCArPSBfX2Zyb20gLSBfX3RtcF9mcm9tOworKwlfX21heCAtPSBfX2NvbnY7CisrCisrCWlmIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKKysJICB7CisrCSAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncworKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkgICAgKytfX2Zyb207CisrCSAgICArK19fcmV0OworKwkgICAgLS1fX21heDsKKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OyAKKysgIH0KKysjZW5kaWYKKyt9CistLS0gZ2NjL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysrKyBnY2MvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworQEAgLTAsMCArMSw4MCBAQAorKy8vIHN0ZDo6Y29sbGF0ZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNC4xLjIgIGNvbGxhdGUgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fc3RyY29sbF9sKFMxLCBTMiwgTCkgICAgICBzdHJjb2xsKChTMSksIChTMikpCisrI2RlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCisrI2RlZmluZSBfX3djc2NvbGxfbChTMSwgUzIsIEwpICAgICAgd2NzY29sbCgoUzEpLCAoUzIpKQorKyNkZWZpbmUgX193Y3N4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHdjc3hmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBUaGVzZSBhcmUgYmFzaWNhbGx5IGV4dGVuc2lvbnMgdG8gY2hhcl90cmFpdHMsIGFuZCBwZXJoYXBzIHNob3VsZAorKyAgLy8gYmUgcHV0IHRoZXJlIGluc3RlYWQgb2YgaGVyZS4KKysgIHRlbXBsYXRlPD4KKysgICAgaW50IAorKyAgICBjb2xsYXRlPGNoYXI+OjpfTV9jb21wYXJlKGNvbnN0IGNoYXIqIF9fb25lLCBjb25zdCBjaGFyKiBfX3R3bykgY29uc3QKKysgICAgeyAKKysgICAgICBpbnQgX19jbXAgPSBfX3N0cmNvbGxfbChfX29uZSwgX190d28sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOworKyAgICAgIHJldHVybiAoX19jbXAgPj4gKDggKiBzaXplb2YgKGludCkgLSAyKSkgfCAoX19jbXAgIT0gMCk7CisrICAgIH0KKysgIAorKyAgdGVtcGxhdGU8PgorKyAgICBzaXplX3QKKysgICAgY29sbGF0ZTxjaGFyPjo6X01fdHJhbnNmb3JtKGNoYXIqIF9fdG8sIGNvbnN0IGNoYXIqIF9fZnJvbSwgCisrCQkJCXNpemVfdCBfX24pIGNvbnN0IAorKyAgICB7IHJldHVybiBfX3N0cnhmcm1fbChfX3RvLCBfX2Zyb20sIF9fbiwgX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgaW50IAorKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV9jb21wYXJlKGNvbnN0IHdjaGFyX3QqIF9fb25lLCAKKysJCQkJIGNvbnN0IHdjaGFyX3QqIF9fdHdvKSBjb25zdAorKyAgICB7CisrICAgICAgaW50IF9fY21wID0gX193Y3Njb2xsX2woX19vbmUsIF9fdHdvLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsKKysgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDApOworKyAgICB9CisrICAKKysgIHRlbXBsYXRlPD4KKysgICAgc2l6ZV90CisrICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX3RyYW5zZm9ybSh3Y2hhcl90KiBfX3RvLCBjb25zdCB3Y2hhcl90KiBfX2Zyb20sCisrCQkJCSAgIHNpemVfdCBfX24pIGNvbnN0CisrICAgIHsgcmV0dXJuIF9fd2NzeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQorKyNlbmRpZgorK30KKy0tLSBnY2MvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysrKyBnY2MvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMzAwIEBACisrLy8gc3RkOjpjdHlwZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS4xLjIgIGN0eXBlIHZpcnR1YWwgZnVuY3Rpb25zLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgIHdjdHlwZSgoUykpCisrI2RlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICB0b3d1cHBlcigoQykpCisrI2RlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICB0b3dsb3dlcigoQykpCisrI2RlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICBpc3djdHlwZSgoQyksIChNKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCisrICAvLyB2YXJpb3VzIC9jb25maWcvb3MvKiBmaWxlcy4KKysgIHRlbXBsYXRlPD4KKysgICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorKyAgICA6IGN0eXBlPGNoYXI+KDAsIGZhbHNlLCBfX3JlZnMpIAorKyAgICB7IAkJCisrICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKKysJeworKwkgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY3R5cGUpOworKwkgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZSwgX19zKTsgCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICB0aGlzLT5fTV90b3VwcGVyID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfdG91cHBlcjsKKysJICB0aGlzLT5fTV90b2xvd2VyID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfdG9sb3dlcjsKKysJICB0aGlzLT5fTV90YWJsZSA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX2I7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVCAgCisrICBjdHlwZTx3Y2hhcl90Pjo6X193bWFza190eXBlCisrICBjdHlwZTx3Y2hhcl90Pjo6X01fY29udmVydF90b193bWFzayhjb25zdCBtYXNrIF9fbSkgY29uc3QKKysgIHsKKysgICAgX193bWFza190eXBlIF9fcmV0OworKyAgICBzd2l0Y2ggKF9fbSkKKysgICAgICB7CisrICAgICAgY2FzZSBzcGFjZToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJzcGFjZSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBwcmludDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJwcmludCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBjbnRybDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJjbnRybCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSB1cHBlcjoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJ1cHBlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBsb3dlcjoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJsb3dlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBhbHBoYToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJhbHBoYSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBkaWdpdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJkaWdpdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBwdW5jdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJwdW5jdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSB4ZGlnaXQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgieGRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGFsbnVtOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImFsbnVtIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGdyYXBoOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImdyYXBoIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBkZWZhdWx0OgorKwlfX3JldCA9IF9fd21hc2tfdHlwZSgpOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKyAgCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9fdG93dXBwZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b3VwcGVyKHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrICAgICAgICAqX19sbyA9IF9fdG93dXBwZXJfbCgqX19sbywgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICAgICAgKytfX2xvOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrICAKKysgIHdjaGFyX3QKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b2xvd2VyKHdjaGFyX3QgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX190b3dsb3dlcl9sKF9fYywgX01fY19sb2NhbGVfY3R5cGUpOyB9CisrICAKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKyAgICAgICAgKl9fbG8gPSBfX3Rvd2xvd2VyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgICAgICsrX19sbzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgYm9vbAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9faXMobWFzayBfX20sIHdjaGFyX3QgX19jKSBjb25zdAorKyAgeyAKKysgICAgLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysgICAgLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKKysgICAgY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsgCisrICAgIGZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysgICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQorKwkgICYmIF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwl7CisrCSAgX19yZXQgPSB0cnVlOworKwkgIGJyZWFrOworKwl9CisrICAgIHJldHVybiBfX3JldDsgICAgCisrICB9CisrICAKKysgIGNvbnN0IHdjaGFyX3QqIAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9faXMoY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgbWFzayogX192ZWMpIGNvbnN0CisrICB7CisrICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytfX3ZlYywgKytfX2xvKQorKyAgICAgIHsKKysJLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysJLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7IAorKwltYXNrIF9fbSA9IDA7CisrCWZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysJICBpZiAoX19pc3djdHlwZV9sKCpfX2xvLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJICAgIF9fbSB8PSBfTV9iaXRbX19iaXRjdXJdOworKwkqX192ZWMgPSBfX207CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysgIAorKyAgY29uc3Qgd2NoYXJfdCogCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkgJiYgIXRoaXMtPmRvX2lzKF9fbSwgKl9fbG8pKQorKyAgICAgICsrX19sbzsKKysgICAgcmV0dXJuIF9fbG87CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkgJiYgdGhpcy0+ZG9faXMoX19tLCAqX19sbykgIT0gMCkKKysgICAgICArK19fbG87CisrICAgIHJldHVybiBfX2xvOworKyAgfQorKworKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fd2lkZW4oY2hhciBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfTV93aWRlbltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpXTsgfQorKworKyAgY29uc3QgY2hhciogCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCB3Y2hhcl90KiBfX2Rlc3QpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrCSpfX2Rlc3QgPSBfTV93aWRlbltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sbyldOworKwkrK19fbG87CisrCSsrX19kZXN0OworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBjaGFyCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19uYXJyb3cod2NoYXJfdCBfX3djLCBjaGFyIF9fZGZhdWx0KSBjb25zdAorKyAgeworKyAgICBpZiAoX193YyA+PSAwICYmIF9fd2MgPCAxMjggJiYgX01fbmFycm93X29rKQorKyAgICAgIHJldHVybiBfTV9uYXJyb3dbX193Y107CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgY29uc3QgaW50IF9fYyA9IHdjdG9iKF9fd2MpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsgCisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fbmFycm93KGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIGNoYXIgX19kZmF1bHQsIAorKwkgICAgY2hhciogX19kZXN0KSBjb25zdAorKyAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIGlmIChfTV9uYXJyb3dfb2spCisrICAgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKwl7CisrCSAgaWYgKCpfX2xvID49IDAgJiYgKl9fbG8gPCAxMjgpCisrCSAgICAqX19kZXN0ID0gX01fbmFycm93WypfX2xvXTsKKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIGNvbnN0IGludCBfX2MgPSB3Y3RvYigqX19sbyk7CisrCSAgICAgICpfX2Rlc3QgPSAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7CisrCSAgICB9CisrCSAgKytfX2xvOworKwkgICsrX19kZXN0OworKwl9CisrICAgIGVsc2UKKysgICAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrCXsKKysJICBjb25zdCBpbnQgX19jID0gd2N0b2IoKl9fbG8pOworKwkgICpfX2Rlc3QgPSAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7CisrCSAgKytfX2xvOworKwkgICsrX19kZXN0OworKwl9CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIHZvaWQKKysgIGN0eXBlPHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX2N0eXBlKCkKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOworKyNlbmRpZgorKyAgICB3aW50X3QgX19pOworKyAgICBmb3IgKF9faSA9IDA7IF9faSA8IDEyODsgKytfX2kpCisrICAgICAgeworKwljb25zdCBpbnQgX19jID0gd2N0b2IoX19pKTsKKysJaWYgKF9fYyA9PSBFT0YpCisrCSAgYnJlYWs7CisrCWVsc2UKKysJICBfTV9uYXJyb3dbX19pXSA9IHN0YXRpY19jYXN0PGNoYXI+KF9fYyk7CisrICAgICAgfQorKyAgICBpZiAoX19pID09IDEyOCkKKysgICAgICBfTV9uYXJyb3dfb2sgPSB0cnVlOworKyAgICBlbHNlCisrICAgICAgX01fbmFycm93X29rID0gZmFsc2U7CisrICAgIGZvciAoc2l6ZV90IF9faiA9IDA7CisrCSBfX2ogPCBzaXplb2YoX01fd2lkZW4pIC8gc2l6ZW9mKHdpbnRfdCk7ICsrX19qKQorKyAgICAgIF9NX3dpZGVuW19fal0gPSBidG93YyhfX2opOworKworKyAgICBmb3IgKHNpemVfdCBfX2sgPSAwOyBfX2sgPD0gMTE7ICsrX19rKQorKyAgICAgIHsgCisrCV9NX2JpdFtfX2tdID0gc3RhdGljX2Nhc3Q8bWFzaz4oX0lTYml0KF9faykpOworKwlfTV93bWFza1tfX2tdID0gX01fY29udmVydF90b193bWFzayhfTV9iaXRbX19rXSk7CisrICAgICAgfQorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgIH0KKysjZW5kaWYgLy8gIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrfQorLS0tIGdjYy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKysrIGdjYy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworQEAgLTAsMCArMSwxMDAgQEAKKysvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggZ2V0dGV4dCBzdHVmZgorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworK2V4dGVybiAiQyIgY2hhciAqX19kY2dldHRleHQoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCQkgICAgIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpOworKyN1bmRlZiBnZXR0ZXh0CisrI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBfX2RjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrI2Vsc2UKKysjdW5kZWYgZ2V0dGV4dAorKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBTcGVjaWFsaXphdGlvbnMuCisrICB0ZW1wbGF0ZTw+CisrICAgIHN0cmluZworKyAgICBtZXNzYWdlczxjaGFyPjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCBzdHJpbmcmIF9fZGZhdWx0KSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKSk7CisrICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfbWVzc2FnZXMpOworKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2Vsc2UKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2VuZGlmCisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgd3N0cmluZworKyAgICBtZXNzYWdlczx3Y2hhcl90Pjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCB3c3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKKysgICAgeworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKKysgICAgICBjaGFyKiBfX21zZyA9IGdldHRleHQoX01fY29udmVydF90b19jaGFyKF9fZGZhdWx0KSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbHNlCisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbmRpZgorKyAgICB9CisrI2VuZGlmCisrfQorLS0tIGdjYy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrKysgZ2NjL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK0BAIC0wLDAgKzEsMTE4IEBACisrLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKytleHRlcm4gIkMiIGNoYXIgKl9fdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKKytleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCQkJICBjb25zdCBjaGFyICpkaXJuYW1lKTsKKysjZWxzZQorKyN1bmRlZiBfX3RleHRkb21haW4KKysjdW5kZWYgX19iaW5kdGV4dGRvbWFpbgorKyNkZWZpbmUgX190ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIF9fYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisrI2VuZGlmCisrCisrICAvLyBOb24tdmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoc2l6ZV90IF9fcmVmcykKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfZ2V0X2NfbG9jYWxlKCkpLCAKKysgICAgIF9NX25hbWVfbWVzc2FnZXMoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICAgeyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLCAKKysJCQkJc2l6ZV90IF9fcmVmcykgCisrICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYykpLAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfX3MpCisrICAgICB7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKyAgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nIAorKyAgICBtZXNzYWdlczxfQ2hhclQ+OjpvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jLCAKKysJCQkgICBjb25zdCBjaGFyKiBfX2RpcikgY29uc3QKKysgICAgeyAKKysgICAgICBfX2JpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CisrICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7IAorKyAgICB9CisrCisrICAvLyBWaXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIG1lc3NhZ2VzPF9DaGFyVD46On5tZXNzYWdlcygpCisrICAgIHsgCisrICAgICAgaWYgKF9NX25hbWVfbWVzc2FnZXMgIT0gX1NfZ2V0X2NfbmFtZSgpKQorKwlkZWxldGUgW10gX01fbmFtZV9tZXNzYWdlczsKKysgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsgCisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZyAKKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgCisrCQkJICAgICAgY29uc3QgbG9jYWxlJikgY29uc3QKKysgICAgeyAKKysgICAgICAvLyBObyBlcnJvciBjaGVja2luZyBpcyBkb25lLCBhc3N1bWUgdGhlIGNhdGFsb2cgZXhpc3RzIGFuZCBjYW4KKysgICAgICAvLyBiZSB1c2VkLgorKyAgICAgIF9fdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdm9pZCAgICAKKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fY2xvc2UoY2F0YWxvZykgY29uc3QgCisrICAgIHsgfQorKworKyAgIC8vIG1lc3NhZ2VzX2J5bmFtZQorKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzX2J5bmFtZTxfQ2hhclQ+OjptZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorKyAgICAgOiBtZXNzYWdlczxfQ2hhclQ+KF9fcmVmcykgCisrICAgICB7IAorKyAgICAgICBpZiAodGhpcy0+X01fbmFtZV9tZXNzYWdlcyAhPSBsb2NhbGU6OmZhY2V0OjpfU19nZXRfY19uYW1lKCkpCisrCSBkZWxldGUgW10gdGhpcy0+X01fbmFtZV9tZXNzYWdlczsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICB0aGlzLT5fTV9uYW1lX21lc3NhZ2VzID0gX190bXA7CisrCisrICAgICAgIGlmIChzdGQ6OnN0cmNtcChfX3MsICJDIikgIT0gMCAmJiBzdGQ6OnN0cmNtcChfX3MsICJQT1NJWCIpICE9IDApCisrCSB7CisrCSAgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfbWVzc2FnZXMpOworKwkgICB0aGlzLT5fU19jcmVhdGVfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfbWVzc2FnZXMsIF9fcyk7IAorKwkgfQorKyAgICAgfQorLS0tIGdjYy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKysrIGdjYy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTAsMCArMSw2OTIgQEAKKysvLyBzdGQ6Om1vbmV5cHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjYuMy4yICBtb25leXB1bmN0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNkZWZpbmUgX0xJQkMKKysjaW5jbHVkZSA8bG9jYWxlPgorKyN1bmRlZiBfTElCQworKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIG9wdGltaXplIHRoaXMgZm9yIHVjbGliYworKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorKyNlbmRpZgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBDb25zdHJ1Y3QgYW5kIHJldHVybiB2YWxpZCBwYXR0ZXJuIGNvbnNpc3Rpbmcgb2Ygc29tZSBjb21iaW5hdGlvbiBvZjoKKysgIC8vIHNwYWNlIG5vbmUgc3ltYm9sIHNpZ24gdmFsdWUKKysgIG1vbmV5X2Jhc2U6OnBhdHRlcm4KKysgIG1vbmV5X2Jhc2U6Ol9TX2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWRlcywgY2hhciBfX3NwYWNlLCBjaGFyIF9fcG9zbikKKysgIHsgCisrICAgIHBhdHRlcm4gX19yZXQ7CisrCisrICAgIC8vIFRoaXMgaW5zYW5lbHkgY29tcGxpY2F0ZWQgcm91dGluZSBhdHRlbXB0cyB0byBjb25zdHJ1Y3QgYSB2YWxpZAorKyAgICAvLyBwYXR0ZXJuIGZvciB1c2Ugd2l0aCBtb255ZXB1bmN0LiBBIGNvdXBsZSBvZiBpbnZhcmlhbnRzOgorKworKyAgICAvLyBpZiAoX19wcmVjZWRlcykgc3ltYm9sIC0+IHZhbHVlCisrICAgIC8vIGVsc2UgdmFsdWUgLT4gc3ltYm9sCisrICAgIAorKyAgICAvLyBpZiAoX19zcGFjZSkgc3BhY2UKKysgICAgLy8gZWxzZSBub25lCisrCisrICAgIC8vIG5vbmUgPT0gbmV2ZXIgZmlyc3QKKysgICAgLy8gc3BhY2UgbmV2ZXIgZmlyc3Qgb3IgbGFzdAorKworKyAgICAvLyBBbnkgZWxlZ2FudCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBhcmUgd2VsY29tZS4KKysgICAgc3dpdGNoIChfX3Bvc24pCisrICAgICAgeworKyAgICAgIGNhc2UgMDoKKysgICAgICBjYXNlIDE6CisrCS8vIDEgVGhlIHNpZ24gcHJlY2VkZXMgdGhlIHZhbHVlIGFuZCBzeW1ib2wuCisrCV9fcmV0LmZpZWxkWzBdID0gc2lnbjsKKysJaWYgKF9fc3BhY2UpCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBzdGFydHMgd2l0aCBzaWduLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbM10gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBzdGFydHMgd2l0aCBzaWduIGFuZCBlbmRzIHdpdGggbm9uZS4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgfQorKwlicmVhazsKKysgICAgICBjYXNlIDI6CisrCS8vIDIgVGhlIHNpZ24gZm9sbG93cyB0aGUgdmFsdWUgYW5kIHN5bWJvbC4KKysJaWYgKF9fc3BhY2UpCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBlaXRoZXIgZW5kcyB3aXRoIHNpZ24uCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMV0gPSBzcGFjZTsKKysJICAgIF9fcmV0LmZpZWxkWzNdID0gc2lnbjsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIGVuZHMgd2l0aCBzaWduIHRoZW4gbm9uZS4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsyXSA9IHNpZ247CisrCSAgICBfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgfQorKwlicmVhazsKKysgICAgICBjYXNlIDM6CisrCS8vIDMgVGhlIHNpZ24gaW1tZWRpYXRlbHkgcHJlY2VkZXMgdGhlIHN5bWJvbC4KKysJaWYgKF9fcHJlY2VkZXMpCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSBzaWduOworKwkgICAgX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CSAgICAKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOwkJCisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFsyXSA9IHNpZ247CisrCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNpZ247CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSA0OgorKwkvLyA0IFRoZSBzaWduIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIHN5bWJvbC4KKysJaWYgKF9fcHJlY2VkZXMpCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHNpZ247CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbM10gPSBzaWduOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwlicmVhazsKKysgICAgICBkZWZhdWx0OgorKwk7CisrICAgICAgfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICB0ZW1wbGF0ZTw+IAorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgCisrCQkJCQkJICAgICBjb25zdCBjaGFyKikKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8Y2hhciwgdHJ1ZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fREVDSU1BTF9QT0lOVCwgCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9USE9VU0FORFNfU0VQLCAKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBpZiAoIV9fbnBvc24pCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwgCisrCQkJCQkJCV9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgIC8vIF9JbnRsID09IHRydWUKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fbmxfbGFuZ2luZm9fbChfX0lOVF9DVVJSX1NZTUJPTCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX0ZSQUNfRElHSVRTLCAKKysJCQkJCQkgICAgICBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwgCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsIAorKwkJCQkJCQlfX25wb3NuKTsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+IAorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIAorKwkJCQkJCSAgICAgIGNvbnN0IGNoYXIqKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCBmYWxzZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fREVDSU1BTF9QT0lOVCwgCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9USE9VU0FORFNfU0VQLCAKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIGlmICghX19ucG9zbikKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLAorKwkJCQkJCQlfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAvLyBfSW50bCA9PSBmYWxzZQorKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fQ1VSUkVOQ1lfU1lNQk9MLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19GUkFDX0RJR0lUUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsIAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwgCisrCQkJCQkJCV9fbnBvc24pOworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46On5tb25leXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PiAKKysgICAgdm9pZAorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCQkJCQkJCWNvbnN0IGNoYXIqKQorKyNlbHNlCisrCQkJCQkJCWNvbnN0IGNoYXIqIF9fbmFtZSkKKysjZW5kaWYKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgdHJ1ZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCisrCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG1vbmV0YXJ5CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbHNlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKworKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7CisrCisrCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOworKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKKysJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgdHJ5CisrCSAgICB7CisrCSAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOworKwkgICAgICBzaXplX3QgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysJICAgICAgCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOworKwkgICAgICBpZiAoIV9fbnBvc24pCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7CisrCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorKwkJeyAKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX25zID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfbnMsICZfX2NuZWdzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX193Y3NfbnM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysJICAgICAgCisrCSAgICAgIC8vIF9JbnRsID09IHRydWUuCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgICAgfQorKwkgIGNhdGNoICguLi4pCisrCSAgICB7CisrCSAgICAgIGRlbGV0ZSBfTV9kYXRhOworKwkgICAgICBfTV9kYXRhID0gMDsKKysJICAgICAgZGVsZXRlIF9fd2NzX3BzOworKwkgICAgICBkZWxldGUgX193Y3NfbnM7CSAgICAgIAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJICAgIH0gCisrCSAgCisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9GUkFDX0RJR0lUUywgCisrCQkJCQkJICAgICAgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsIAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLCAKKysJCQkJCQkJX19ucG9zbik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgIHZvaWQKKysgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJCQkJCQkgICAgICAgY29uc3QgY2hhciopCisrI2Vsc2UKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19uYW1lKQorKyNlbmRpZgorKyAgeworKyAgICBpZiAoIV9NX2RhdGEpCisrICAgICAgX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgZmFsc2U+OworKworKyAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKyAgICAgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCisrCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG1vbmV0YXJ5CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbHNlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorKyAgICAgICAgICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCisrCSAgY29uc3QgY2hhciogX19jcG9zc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jbmVnc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jY3VyciA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKKysKKysJICB3Y2hhcl90KiBfX3djc19wcyA9IDA7CisrCSAgd2NoYXJfdCogX193Y3NfbnMgPSAwOworKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIHRyeQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOworKyAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuOworKyAgICAgICAgICAgICAgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisrICAgICAgICAgICAgICBpZiAoX19sZW4pCisrICAgICAgICAgICAgICAgIHsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCSAgICAgIAorKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NuZWdzaWduKTsKKysJICAgICAgaWYgKCFfX25wb3NuKQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiKCkiOworKwkgICAgICBlbHNlIGlmIChfX2xlbikKKysJCXsgCisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19ucyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX25zLCAmX19jbmVnc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fd2NzX25zOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgICAgICAvLyBfSW50bCA9PSB0cnVlLgorKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsKKysJICAgICAgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgd2NoYXJfdCogX193Y3MgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djcywgJl9fY2N1cnIsIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX193Y3M7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgICB9CisrICAgICAgICAgIGNhdGNoICguLi4pCisrCSAgICB7CisrCSAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICAgICAgICAgICAgX01fZGF0YSA9IDA7CisrCSAgICAgIGRlbGV0ZSBfX3djc19wczsKKysJICAgICAgZGVsZXRlIF9fd2NzX25zOwkgICAgICAKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAgICAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwkgICAgfQorKworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19GUkFDX0RJR0lUUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsIAorKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwgCisrCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbnBvc24pOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46On5tb25leXB1bmN0KCkKKysgICAgeworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUKKysgICAgICAgICAgJiYgd2NzY21wKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24sIEwiKCkiKSAhPSAwKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sOworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+IAorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZQorKyAgICAgICAgICAmJiB3Y3NjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgTCIoKSIpICE9IDApCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fY3Vycl9zeW1ib2w7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgIH0KKysjZW5kaWYKKyt9CistLS0gZ2NjL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysrKyBnY2MvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworQEAgLTAsMCArMSwxNjAgQEAKKysvLyBzdGQ6Om51bXB1bmN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi4zLjEuMiAgbnVtcHVuY3QgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIHRlbXBsYXRlPD4gCisrICAgIHZvaWQKKysgICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19udW1wdW5jdF9jYWNoZTxjaGFyPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOworKworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0gX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV07CisrCisrCSAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19udW1fYmFzZTo6X1NfaWVuZDsgKytfX2opCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0gX19udW1fYmFzZTo6X1NfYXRvbXNfaW5bX19qXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woREVDSU1BTF9QT0lOVCwgCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChUSE9VU0FORFNfU0VQLCAKKysJCQkJCQkJX19jbG9jKSk7CisrCisrCSAgLy8gQ2hlY2sgZm9yIE5VTEwsIHdoaWNoIGltcGxpZXMgbm8gZ3JvdXBpbmcuCisrCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gJ1wwJykKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCX0KKysKKysgICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFjdCB0aGlzIGluZm8gZnJvbSBwb3NpeCBsb2NhbGVzLgorKyAgICAgIC8vIF9NX3RydWVuYW1lID0gX19ubF9sYW5naW5mb19sKFlFU1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZSA9ICJ0cnVlIjsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZV9zaXplID0gNDsKKysgICAgICAvLyBfTV9mYWxzZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woTk9TVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lID0gImZhbHNlIjsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWVfc2l6ZSA9IDU7CisrICAgIH0KKysgCisrICB0ZW1wbGF0ZTw+IAorKyAgICBudW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKyAgIAorKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PiAKKysgICAgdm9pZAorKyAgICBudW1wdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX251bXB1bmN0X2NhY2hlPHdjaGFyX3Q+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7CisrCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19udW1fYmFzZTo6X1Nfb2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19vdXRbX19pXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fbnVtX2Jhc2U6Ol9TX2F0b21zX291dFtfX2ldKTsKKysKKysJICBmb3IgKHNpemVfdCBfX2ogPSAwOyBfX2ogPCBfX251bV9iYXNlOjpfU19pZW5kOyArK19faikKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX2luW19fal0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90PihfX251bV9iYXNlOjpfU19hdG9tc19pbltfX2pdKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICAvLyBOQjogSW4gdGhlIEdOVSBtb2RlbCB3Y2hhcl90IGlzIGFsd2F5cyAzMiBiaXQgd2lkZS4KKysJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrCisrCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gTCdcMCcpCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKEdST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwl9CisrCisrICAgICAgLy8gTkI6IFRoZXJlIGlzIG5vIHdheSB0byBleHRhY3QgdGhpcyBpbmZvIGZyb20gcG9zaXggbG9jYWxlcy4KKysgICAgICAvLyBfTV90cnVlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChZRVNTVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWUgPSBMInRydWUiOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lX3NpemUgPSA0OworKyAgICAgIC8vIF9NX2ZhbHNlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChOT1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWUgPSBMImZhbHNlIjsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWVfc2l6ZSA9IDU7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIG51bXB1bmN0PHdjaGFyX3Q+Ojp+bnVtcHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrICNlbmRpZgorK30KKy0tLSBnY2MvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKysrIGdjYy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDQwNiBAQAorKy8vIHN0ZDo6dGltZV9nZXQsIHN0ZDo6dGltZV9wdXQgaW1wbGVtZW50YXRpb24sIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEuMiAtIHRpbWVfZ2V0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6CisrICAgIF9NX3B1dChjaGFyKiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3QgY2hhciogX19mb3JtYXQsIAorKwkgICBjb25zdCB0bSogX190bSkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX19zdHJmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorKwkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysjZWxzZQorKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RyZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKysgICAgICBpZiAoX19sZW4gPT0gMCkKKysJX19zWzBdID0gJ1wwJzsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8Y2hhcj47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSAiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9ICIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSAiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9ICIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gIiI7CisrCSAgX01fZGF0YS0+X01fYW0gPSAiQU0iOworKwkgIF9NX2RhdGEtPl9NX3BtID0gIlBNIjsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSAiIjsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSAiU3VuZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gIk1vbmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9ICJUdWVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gIldlZG5lc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9ICJUaHVyc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9ICJGcmlkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSAiU2F0dXJkYXkiOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSAiU3VuIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9ICJNb24iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gIlR1ZSI7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSAiV2VkIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9ICJUaHUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gIkZyaSI7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSAiU2F0IjsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSAiSmFudWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9ICJGZWJydWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9ICJNYXJjaCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9ICJBcHJpbCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9ICJNYXkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSAiSnVuZSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9ICJKdWx5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gIkF1Z3VzdCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9ICJTZXB0ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSAiT2N0b2JlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9ICJOb3ZlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9ICJEZWNlbWJlciI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gIkphbiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSAiRmViIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9ICJNYXIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gIkFwciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSAiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9ICJKdW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gIkp1bCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSAiQXVnIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9ICJTZXAiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gIk9jdCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSAiTm92IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9ICJEZWMiOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsgCisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChUX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfRF9UX0ZNVCwKKysJCQkJCQkJICAgICBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtID0gX19ubF9sYW5naW5mb19sKEFNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wbSA9IF9fbmxfbGFuZ2luZm9fbChQTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKFRfRk1UX0FNUE0sIF9fY2xvYyk7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gX19ubF9sYW5naW5mb19sKERBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBfX25sX2xhbmdpbmZvX2woREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gX19ubF9sYW5naW5mb19sKERBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBfX25sX2xhbmdpbmZvX2woREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gX19ubF9sYW5naW5mb19sKERBWV83LCBfX2Nsb2MpOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gX19ubF9sYW5naW5mb19sKEFCREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNywgX19jbG9jKTsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fbmxfbGFuZ2luZm9fbChNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gX19ubF9sYW5naW5mb19sKE1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBfX25sX2xhbmdpbmZvX2woTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fbmxfbGFuZ2luZm9fbChNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gX19ubF9sYW5naW5mb19sKE1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX25sX2xhbmdpbmZvX2woTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fbmxfbGFuZ2luZm9fbChNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gX19ubF9sYW5naW5mb19sKE1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEyLCBfX2Nsb2MpOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMiwgX19jbG9jKTsKKysJfQorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46OgorKyAgICBfTV9wdXQod2NoYXJfdCogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IHdjaGFyX3QqIF9fZm9ybWF0LCAKKysJICAgY29uc3QgdG0qIF9fdG0pIGNvbnN0CisrICAgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwgX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisrCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyNlbHNlCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSB3Y3NmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKyAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorKyAgICAgIGlmIChfX2xlbiA9PSAwKQorKwlfX3NbMF0gPSBMJ1wwJzsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8d2NoYXJfdD47CisrCisrI3dhcm5pbmcgd2lkZSB0aW1lIHN0dWZmCisrLy8gICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IEwiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IEwiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fYW0gPSBMIkFNIjsKKysJICBfTV9kYXRhLT5fTV9wbSA9IEwiUE0iOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IEwiIjsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBMIlN1bmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IEwiTW9uZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gTCJUdWVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gTCJXZWRuZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBMIlRodXJzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gTCJGcmlkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBMIlNhdHVyZGF5IjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gTCJTdW4iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gTCJNb24iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gTCJUdWUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gTCJXZWQiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gTCJUaHUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gTCJGcmkiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gTCJTYXQiOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IEwiSmFudWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IEwiRmVicnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBMIk1hcmNoIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gTCJBcHJpbCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IEwiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gTCJKdW5lIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gTCJKdWx5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gTCJBdWd1c3QiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBMIlNlcHRlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IEwiT2N0b2JlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IEwiTm92ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBMIkRlY2VtYmVyIjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBMIkphbiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBMIkZlYiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBMIk1hciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBMIkFwciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBMIk1heSI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBMIkp1biI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBMIkp1bCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBMIkF1ZyI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBMIlNlcCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBMIk9jdCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBMIk5vdiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBMIkRlYyI7CisrCX0KKysjaWYgMAorKyAgICAgIGVsc2UKKysJeworKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7IAorKworKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90ICpfX3c7IH0gX191OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9EX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dUX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1BNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wbSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1RfRk1UX0FNUE0sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX191Ll9fdzsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gX191Ll9fdzsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX191Ll9fdzsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEyLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX3UuX193OworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEyLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX191Ll9fdzsKKysJfQorKyNlbmRpZiAvLyAwCisrICAgIH0KKysjZW5kaWYKKyt9CistLS0gZ2NjL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKysrIGdjYy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK0BAIC0wLDAgKzEsNjggQEAKKysvLyBzdGQ6OnRpbWVfZ2V0LCBzdGQ6OnRpbWVfcHV0IGltcGxlbWVudGF0aW9uLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4xLjIgLSB0aW1lX2dldCBmdW5jdGlvbnMKKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzKSAKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksIAorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChfU19nZXRfY19uYW1lKCkpCisrICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NhY2hlX3R5cGUqIF9fY2FjaGUsIHNpemVfdCBfX3JlZnMpIAorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoX19jYWNoZSksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwgCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCSAgICAgc2l6ZV90IF9fcmVmcykgCisrICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLCAKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX19zKQorKyAgICB7IAorKyAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX190bXA7CisrICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsgCisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6fl9fdGltZXB1bmN0KCkKKysgICAgeyAKKysgICAgICBpZiAoX01fbmFtZV90aW1lcHVuY3QgIT0gX1NfZ2V0X2NfbmFtZSgpKQorKwlkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7IAorKyAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfdGltZXB1bmN0KTsgCisrICAgIH0KKy0tLSBnY2MvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorKysrIGdjYy9saWJzdGRjKystdjMvY29uZmlndXJlCitAQCAtNTc2NCw3ICs1NzY0LDcgQEAKKyAgIGVuYWJsZXZhbD0iJGVuYWJsZV9jbG9jYWxlIgorIAorICAgICAgIGNhc2UgIiRlbmFibGV2YWwiIGluCistICAgICAgIGdlbmVyaWN8Z251fGllZWVfMTAwMy4xLTIwMDF8eWVzfG5vfGF1dG8pIDs7CisrICAgICAgIGdlbmVyaWN8Z251fGllZWVfMTAwMy4xLTIwMDF8dWNsaWJjfHllc3xub3xhdXRvKSA7OworICAgICAgICAqKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBVbmtub3duIGFyZ3VtZW50IHRvIGVuYWJsZS9kaXNhYmxlIGNsb2NhbGUiID4mNQorIGVjaG8gIiRhc19tZTogZXJyb3I6IFVua25vd24gYXJndW1lbnQgdG8gZW5hYmxlL2Rpc2FibGUgY2xvY2FsZSIgPiYyO30KKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKK0BAIC01Nzg5LDYgKzU3ODksOSBAQAorICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCisrICAgICAgbGludXgtdWNsaWJjKikKKysgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCisrCTs7CisgICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCisgICAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBjb25mZGVmcy5oLiAgKi8KK0BAIC02MDE5LDYgKzYwMjIsNzYgQEAKKyAgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjCisgICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorICAgICAgIDs7CisrICAgIHVjbGliYykKKysgICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1Y2xpYmMiID4mNQorK2VjaG8gIiR7RUNIT19UfXVjbGliYyIgPiY2CisrCisrICAgICAgIyBEZWNsYXJlIGludGVudGlvbiB0byB1c2UgZ2V0dGV4dCwgYW5kIGFkZCBzdXBwb3J0IGZvciBzcGVjaWZpYworKyAgICAgICMgbGFuZ3VhZ2VzLgorKyAgICAgICMgRm9yIHNvbWUgcmVhc29uLCBBTExfTElOR1VBUyBoYXMgdG8gYmUgYmVmb3JlIEFNLUdOVS1HRVRURVhUCisrICAgICAgQUxMX0xJTkdVQVM9ImRlIGZyIgorKworKyAgICAgICMgRG9uJ3QgY2FsbCBBTS1HTlUtR0VUVEVYVCBoZXJlLiBJbnN0ZWFkLCBhc3N1bWUgZ2xpYmMuCisrICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtc2dmbXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtc2dmbXQ7IGFjX3dvcmQ9JDIKKytlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2hlY2tfbXNnZm10K3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRjaGVja19tc2dmbXQiOyB0aGVuCisrICBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0iJGNoZWNrX21zZ2ZtdCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICAgIGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10PSJ5ZXMiCisrICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrZG9uZQorKworKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10IiAmJiBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0ibm8iCisrZmkKKytmaQorK2NoZWNrX21zZ2ZtdD0kYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQKKytpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgorKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGNoZWNrX21zZ2ZtdCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGNoZWNrX21zZ2ZtdCIgPiY2CisrZWxzZQorKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKKytmaQorKworKyAgICAgIGlmIHRlc3QgeCIkY2hlY2tfbXNnZm10IiA9IHgieWVzIiAmJiB0ZXN0IHgiJGVuYWJsZV9ubHMiID0geCJ5ZXMiOyB0aGVuCisrICAgICAgICBVU0VfTkxTPXllcworKyAgICAgIGZpCisrICAgICAgIyBFeHBvcnQgdGhlIGJ1aWxkIG9iamVjdHMuCisrICAgICAgZm9yIGxpbmcgaW4gJEFMTF9MSU5HVUFTOyBkbyBcCisrICAgICAgICBnbGliY3h4X01PRklMRVM9IiRnbGliY3h4X01PRklMRVMgJGxpbmcubW8iOyBcCisrICAgICAgICBnbGliY3h4X1BPRklMRVM9IiRnbGliY3h4X1BPRklMRVMgJGxpbmcucG8iOyBcCisrICAgICAgZG9uZQorKworKworKworKyAgICAgIENMT0NBTEVfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrICAgICAgQ0xPQ0FMRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKyAgICAgIENDT0RFQ1ZUX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworKyAgICAgIENDT0xMQVRFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworKyAgICAgIENDVFlQRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrICAgICAgQ01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrICAgICAgQ01FU1NBR0VTX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKysgICAgICBDTU9ORVlfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKyAgICAgIENOVU1FUklDX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKyAgICAgIENUSU1FX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysgICAgICA7OworICAgZXNhYworIAorICAgIyBUaGlzIGlzIHdoZXJlIHRoZSB0ZXN0c3VpdGUgbG9va3MgZm9yIGxvY2FsZSBjYXRhbG9ncywgdXNpbmcgdGhlCistLS0gZ2NjL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCisrKysgZ2NjL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCitAQCAtMTAxLDcgKzEwMSw5IEBACisgdXNpbmcgc3RkOjp3bWVtY3B5OworIHVzaW5nIHN0ZDo6d21lbW1vdmU7CisgdXNpbmcgc3RkOjp3bWVtc2V0OworKyNpZiBfR0xJQkNYWF9IQVZFX1dDU0ZUSU1FCisgdXNpbmcgc3RkOjp3Y3NmdGltZTsKKysjZW5kaWYKKyAKKyAjaWYgX0dMSUJDWFhfVVNFX0M5OQorIHVzaW5nIHN0ZDo6d2NzdG9sZDsKKy0tLSBnY2MvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvc3RkX2N3Y2hhci5oCisrKysgZ2NjL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL3N0ZF9jd2NoYXIuaAorQEAgLTE4Miw3ICsxODIsOSBAQAorICAgdXNpbmcgOjp3Y3Njb2xsOworICAgdXNpbmcgOjp3Y3NjcHk7CisgICB1c2luZyA6Ondjc2NzcG47CisrI2lmIF9HTElCQ1hYX0hBVkVfV0NTRlRJTUUKKyAgIHVzaW5nIDo6d2NzZnRpbWU7CisrI2VuZGlmCisgICB1c2luZyA6Ondjc2xlbjsKKyAgIHVzaW5nIDo6d2NzbmNhdDsKKyAgIHVzaW5nIDo6d2NzbmNtcDsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjAvMTMwLXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4wLzEzMC11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYTQ3MDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4wLzEzMC11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCkBAIC0wLDAgKzEsMjEzIEBACistLS0gZ2NjL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaC51Y2xpYmMyMDBub19feH4JMjAwNi0wMy0xMCAxNTowNjoxNyArMDEwMAorKysrIGdjYy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgJMjAwNi0wMy0xMCAxNTozMjozNyArMDEwMAorQEAgLTYwLDQgKzYwLDQ5IEBACisgZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3R5cGVfbCkgX193Y3R5cGVfbDsKKyAjZW5kaWYgCisgCisrIyBkZWZpbmUgX19ubF9sYW5naW5mb19sIG5sX2xhbmdpbmZvX2wKKysjIGRlZmluZSBfX3N0cmNvbGxfbCBzdHJjb2xsX2wKKysjIGRlZmluZSBfX3N0cmZ0aW1lX2wgc3RyZnRpbWVfbAorKyMgZGVmaW5lIF9fc3RydG9kX2wgc3RydG9kX2wKKysjIGRlZmluZSBfX3N0cnRvZl9sIHN0cnRvZl9sCisrIyBkZWZpbmUgX19zdHJ0b2xkX2wgc3RydG9sZF9sCisrIyBkZWZpbmUgX19zdHJ4ZnJtX2wgc3RyeGZybV9sCisrIyBkZWZpbmUgX19uZXdsb2NhbGUgbmV3bG9jYWxlCisrIyBkZWZpbmUgX19mcmVlbG9jYWxlIGZyZWVsb2NhbGUKKysjIGRlZmluZSBfX2R1cGxvY2FsZSBkdXBsb2NhbGUKKysjIGRlZmluZSBfX3VzZWxvY2FsZSB1c2Vsb2NhbGUKKysKKysjIGlmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrIyAgZGVmaW5lIF9faXN3Y3R5cGVfbCBpc3djdHlwZV9sCisrIyAgZGVmaW5lIF9fdG93bG93ZXJfbCB0b3dsb3dlcl9sCisrIyAgZGVmaW5lIF9fdG93dXBwZXJfbCB0b3d1cHBlcl9sCisrIyAgZGVmaW5lIF9fd2NzY29sbF9sIHdjc2NvbGxfbAorKyMgIGRlZmluZSBfX3djc2Z0aW1lX2wgd2NzZnRpbWVfbAorKyMgIGRlZmluZSBfX3djc3hmcm1fbCB3Y3N4ZnJtX2wKKysjICBkZWZpbmUgX193Y3R5cGVfbCB3Y3R5cGVfbAorKyMgZW5kaWYKKysKKysjZWxzZQorKyMgZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICBubF9sYW5naW5mbygoTikpCisrIyBkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKKysjIGRlZmluZSBfX3N0cnRvZF9sKFMsIEUsIEwpICAgICAgICAgc3RydG9kKChTKSwgKEUpKQorKyMgZGVmaW5lIF9fc3RydG9mX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2YoKFMpLCAoRSkpCisrIyBkZWZpbmUgX19zdHJ0b2xkX2woUywgRSwgTCkgICAgICAgIHN0cnRvbGQoKFMpLCAoRSkpCisrIyBkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyMgd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworKyMgZGVmaW5lIF9fbmV3bG9jYWxlKGEsIGIsIGMpICAgICAgICBOVUxMCisrIyBkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorKyMgZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKysvLyMgZGVmaW5lIF9fdXNlbG9jYWxlID8KKysvLworKyMgaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysjICBkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgIGlzd2N0eXBlKChDKSwgKE0pKQorKyMgIGRlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICAgdG93bG93ZXIoKEMpKQorKyMgIGRlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICAgdG93dXBwZXIoKEMpKQorKyMgIGRlZmluZSBfX3djc2NvbGxfbChTMSwgUzIsIEwpICAgICAgd2NzY29sbCgoUzEpLCAoUzIpKQorKy8vIyAgZGVmaW5lIF9fd2NzZnRpbWVfbChTLCBNLCBGLCBULCBMKSAgd2NzZnRpbWUoKFMpLCAoTSksIChGKSwgKFQpKSAKKysjICBkZWZpbmUgX193Y3N4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHdjc3hmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyMgIGRlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICAgd2N0eXBlKChTKSkKKysjIGVuZGlmCisrCisgI2VuZGlmIC8vIEdMSUJDIDIuMyBhbmQgbGF0ZXIKKy0tLSBnY2MvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjLnVjbGliYzIwMG5vX194fgkyMDA2LTAzLTEwIDE1OjA2OjE3ICswMTAwCisrKysgZ2NjL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwkyMDA2LTAzLTEwIDE1OjMyOjM3ICswMTAwCitAQCAtMzksMjAgKzM5LDYgQEAKKyAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fc3RydG9sX2woUywgRSwgQiwgTCkgICAgICBzdHJ0b2woKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG91bF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b3VsKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvbGxfbChTLCBFLCBCLCBMKSAgICAgc3RydG9sbCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b3VsbF9sKFMsIEUsIEIsIEwpICAgIHN0cnRvdWxsKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorLSNkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKy0jZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorLSN3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CistI2RlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorLSNkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorLSNkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQgCisgeworICAgdGVtcGxhdGU8PgorLS0tIGdjYy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjLnVjbGliYzIwMG5vX194fgkyMDA2LTAzLTEwIDE1OjA2OjE3ICswMTAwCisrKysgZ2NjL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MJMjAwNi0wMy0xMCAxNTozMjozNyArMDEwMAorQEAgLTM2LDEzICszNiw2IEBACisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fc3RyY29sbF9sKFMxLCBTMiwgTCkgICAgICBzdHJjb2xsKChTMSksIChTMikpCistI2RlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCistI2RlZmluZSBfX3djc2NvbGxfbChTMSwgUzIsIEwpICAgICAgd2NzY29sbCgoUzEpLCAoUzIpKQorLSNkZWZpbmUgX193Y3N4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHdjc3hmcm0oKFMxKSwgKFMyKSwgKE4pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBUaGVzZSBhcmUgYmFzaWNhbGx5IGV4dGVuc2lvbnMgdG8gY2hhcl90cmFpdHMsIGFuZCBwZXJoYXBzIHNob3VsZAorLS0tIGdjYy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYy51Y2xpYmMyMDBub19feH4JMjAwNi0wMy0xMCAxNTowNjoxNyArMDEwMAorKysrIGdjYy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYwkyMDA2LTAzLTEwIDE1OjMyOjM3ICswMTAwCitAQCAtNDMsMTAgKzQzLDYgQEAKKyAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKyAjZW5kaWYKKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6CistLS0gZ2NjL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MudWNsaWJjMjAwbm9fX3h+CTIwMDYtMDMtMTAgMTU6MDY6MTcgKzAxMDAKKysrKyBnY2MvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwkyMDA2LTAzLTEwIDE1OjMyOjM3ICswMTAwCitAQCAtNDEsOSArNDEsNiBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKKyB7CistLS0gZ2NjL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MudWNsaWJjMjAwbm9fX3h+CTIwMDYtMDMtMTAgMTU6MDY6MTcgKzAxMDAKKysrKyBnY2MvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYwkyMDA2LTAzLTEwIDE1OjMyOjM3ICswMTAwCitAQCAtNDAsOSArNDAsNiBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKKyB7CistLS0gZ2NjL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjLnVjbGliYzIwMG5vX194fgkyMDA2LTAzLTEwIDE1OjA2OjE3ICswMTAwCisrKysgZ2NjL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCTIwMDYtMDMtMTAgMTU6MzI6MzcgKzAxMDAKK0BAIC0zOCwxMyArMzgsNiBAQAorICN1bmRlZiBfTElCQworICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgd2N0eXBlKChTKSkKKy0jZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgIHRvd3VwcGVyKChDKSkKKy0jZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgIHRvd2xvd2VyKChDKSkKKy0jZGVmaW5lIF9faXN3Y3R5cGVfbChDLCBNLCBMKSAgICAgIGlzd2N0eXBlKChDKSwgKE0pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBOQjogVGhlIG90aGVyIGN0eXBlPGNoYXI+IHNwZWNpYWxpemF0aW9ucyBhcmUgaW4gc3JjL2xvY2FsZS5jYyBhbmQKKy0tLSBnY2MvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MudWNsaWJjMjAwbm9fX3h+CTIwMDYtMDMtMTAgMTU6MDY6MTcgKzAxMDAKKysrKyBnY2MvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MJMjAwNi0wMy0xMCAxNTozMjozNyArMDEwMAorQEAgLTM5LDEzICszOSwxMCBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCBnZXR0ZXh0IHN0dWZmCisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCistZXh0ZXJuICJDIiBjaGFyICpfX2RjZ2V0dGV4dChjb25zdCBjaGFyICpkb21haW5uYW1lLAorLQkJCSAgICAgY29uc3QgY2hhciAqbXNnaWQsIGludCBjYXRlZ29yeSk7CisgI3VuZGVmIGdldHRleHQKKy0jZGVmaW5lIGdldHRleHQobXNnaWQpIF9fZGNnZXR0ZXh0KE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKysjZGVmaW5lIGdldHRleHQobXNnaWQpIGRjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisgI2Vsc2UKKy0jdW5kZWYgZ2V0dGV4dAorICNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQorICNlbmRpZgorIAorLS0tIGdjYy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oLnVjbGliYzIwMG5vX194fgkyMDA2LTAzLTEwIDE1OjA2OjE3ICswMTAwCisrKysgZ2NjL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgJMjAwNi0wMy0xMCAxNTozMjozNyArMDEwMAorQEAgLTM2LDE1ICszNiwxMSBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLWV4dGVybiAiQyIgY2hhciAqX190ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOworLWV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorLQkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUpOworLSNlbHNlCistI3VuZGVmIF9fdGV4dGRvbWFpbgorLSN1bmRlZiBfX2JpbmR0ZXh0ZG9tYWluCistI2RlZmluZSBfX3RleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorLSNkZWZpbmUgX19iaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI3VuZGVmIHRleHRkb21haW4KKysjdW5kZWYgYmluZHRleHRkb21haW4KKysjZGVmaW5lIHRleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisgI2VuZGlmCisgCisgICAvLyBOb24tdmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorQEAgLTcwLDcgKzY2LDcgQEAKKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywgCisgCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CisgICAgIHsgCistICAgICAgX19iaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworKyAgICAgIGJpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CisgICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7IAorICAgICB9CisgCitAQCAtOTAsNyArODYsNyBAQAorICAgICB7IAorICAgICAgIC8vIE5vIGVycm9yIGNoZWNraW5nIGlzIGRvbmUsIGFzc3VtZSB0aGUgY2F0YWxvZyBleGlzdHMgYW5kIGNhbgorICAgICAgIC8vIGJlIHVzZWQuCistICAgICAgX190ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKysgICAgICB0ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKyAgICAgICByZXR1cm4gMDsKKyAgICAgfQorIAorLS0tIGdjYy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaC51Y2xpYmMyMDBub19feH4JMjAwNi0wMy0xMCAxNTowNjoxNyArMDEwMAorKysrIGdjYy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAkyMDA2LTAzLTEwIDE1OjMyOjM3ICswMTAwCitAQCAtNjgsNiArNjgsNyBAQAorIHsKKyAgIGV4dGVybiAiQyIgX190eXBlb2YodXNlbG9jYWxlKSBfX3VzZWxvY2FsZTsKKyB9CisrI2RlZmluZSBfX3VzZWxvY2FsZSB1c2Vsb2NhbGUKKyAjZW5kaWYKKyAKKyBuYW1lc3BhY2Ugc3RkCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4wLzE0MC11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjAvMTQwLXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MGFiMzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4wLzE0MC11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaApAQCAtMCwwICsxLDQ4IEBACistLS0gZ2NjL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjLnVjbGliYzIwMF93Y2hhcn4JMjAwNi0wMy0xMCAxNTozMjozNyArMDEwMAorKysrIGdjYy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYwkyMDA2LTAzLTEwIDE1OjM3OjI3ICswMTAwCitAQCAtNDAxLDcgKzQwMSw3IEBACisgIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworLSMgZWxzZQorKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKyAjIGVuZGlmCitAQCAtNTU2LDcgKzU1Niw3IEBACisgIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworLSMgZWxzZQorKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKyAjIGVuZGlmCistLS0gZ2NjL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MudWNsaWJjMjAwX3djaGFyfgkyMDA2LTAzLTEwIDE1OjMyOjM3ICswMTAwCisrKysgZ2NjL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MJMjAwNi0wMy0xMCAxNTozNzoyNyArMDEwMAorQEAgLTEyNywxMiArMTI3LDI1IEBACisgCXsKKyAJICAvLyBOYW1lZCBsb2NhbGUuCisgCSAgLy8gTkI6IEluIHRoZSBHTlUgbW9kZWwgd2NoYXJfdCBpcyBhbHdheXMgMzIgYml0IHdpZGUuCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG51bWVyaWMKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfXworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbmRpZgorKyNlbHNlCisgCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKyAJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisgCisgCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorIAorIAkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09IEwnXDAnKQorIAkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjAvMTUwLXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMC8xNTAtdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZiMjg0NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjAvMTUwLXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoCkBAIC0wLDAgKzEsMzQ3IEBACistLS0gZ2NjL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYy51Y2xpYmMyMDBfdXBkYXRlfgkyMDA2LTAzLTEwIDE1OjMyOjM3ICswMTAwCisrKysgZ2NjL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwkyMDA2LTAzLTEwIDE1OjM5OjE0ICswMTAwCitAQCAtNDYsMTYgKzQ3LDEzIEBACisgICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZmxvYXQmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCAKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CistICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorLQkgICAgX192ID0gX19mOworLQkgIGVsc2UKKy0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworLQl9CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCV9fdiA9IF9fZjsKKysgICAgICBlbHNlCisrCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICB9CisgCisgICB0ZW1wbGF0ZTw+CitAQCAtNjMsMTYgKzYxLDEzIEBACisgICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgCisgCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICAgIHsKKy0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKy0JeworLQkgIGNoYXIqIF9fc2FuaXR5OworLQkgIGVycm5vID0gMDsKKy0JICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKy0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCistCSAgICBfX3YgPSBfX2Q7CistCSAgZWxzZQorLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CistCX0KKysgICAgICBjaGFyKiBfX3Nhbml0eTsKKysgICAgICBlcnJubyA9IDA7CisrICAgICAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCV9fdiA9IF9fZDsKKysgICAgICBlbHNlCisrCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICB9CisgCisgICB0ZW1wbGF0ZTw+CitAQCAtODAsMTYgKzc1LDEzIEBACisgICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgbG9uZyBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorICAgICB7CistICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCistCXsKKy0JICBjaGFyKiBfX3Nhbml0eTsKKy0JICBlcnJubyA9IDA7CistCSAgbG9uZyBkb3VibGUgX19sZCA9IF9fc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fbGQ7CistCSAgZWxzZQorLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CistCX0KKysgICAgICBjaGFyKiBfX3Nhbml0eTsKKysgICAgICBlcnJubyA9IDA7CisrICAgICAgbG9uZyBkb3VibGUgX19sZCA9IF9fc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwlfX3YgPSBfX2xkOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgIH0KKyAKKyAgIHZvaWQKK0BAIC0xMTAsNyArMTAyLDcgQEAKKyAgIHZvaWQKKyAgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorICAgeworLSAgICBpZiAoX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorKyAgICBpZiAoX19jbG9jICYmIF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKKyAgICAgICBfX2ZyZWVsb2NhbGUoX19jbG9jKTsgCisgICB9CisgCistLS0gZ2NjL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjLnVjbGliYzIwMF91cGRhdGV+CTIwMDYtMDMtMTAgMTU6MzI6MzcgKzAxMDAKKysrKyBnY2MvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MJMjAwNi0wMy0xMCAxNTozOToxNCArMDEwMAorQEAgLTMzLDkgKzMzLDE0IEBACisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyAKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgI2RlZmluZSBfTElCQworICNpbmNsdWRlIDxsb2NhbGU+CisgI3VuZGVmIF9MSUJDCisrI2Vsc2UKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNlbmRpZgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorIG5hbWVzcGFjZSBzdGQKK0BAIC0xMzgsMjAgKzE0MywzNCBAQAorICAgY3R5cGU8d2NoYXJfdD46OgorICAgZG9faXMobWFzayBfX20sIHdjaGFyX3QgX19jKSBjb25zdAorICAgeyAKKy0gICAgLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKy0gICAgLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrICAgIC8vIFRoZSBjYXNlIG9mIF9fbSA9PSBjdHlwZV9iYXNlOjpzcGFjZSBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50LAorKyAgICAvLyBkdWUgdG8gaXRzIHVzZSBpbiBtYW55IGlzdHJlYW0gZnVuY3Rpb25zLiAgVGhlcmVmb3JlIHdlIGRlYWwgd2l0aAorKyAgICAvLyBpdCBmaXJzdCwgZXhwbG9pdGluZyB0aGUga25vd2xlZGdlIHRoYXQgb24gR05VIHN5c3RlbXMgX01fYml0WzVdCisrICAgIC8vIGlzIHRoZSBtYXNrIGNvcnJlc3BvbmRpbmcgdG8gY3R5cGVfYmFzZTo6c3BhY2UuICBOQjogYW4gZW5jb2RpbmcKKysgICAgLy8gY2hhbmdlIHdvdWxkIG5vdCBhZmZlY3QgY29ycmVjdG5lc3MhCisgICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKKy0gICAgY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsgCistICAgIGZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKy0gICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQorLQkgICYmIF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorLQl7CistCSAgX19yZXQgPSB0cnVlOworLQkgIGJyZWFrOworLQl9CisrICAgIGlmIChfX20gPT0gX01fYml0WzVdKQorKyAgICAgIF9fcmV0ID0gX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbNV0sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgZWxzZQorKyAgICAgIHsKKysJLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysJLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CisrCWZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysJICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXSkKKysJICAgIHsKKysJICAgICAgaWYgKF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwkJeworKwkJICBfX3JldCA9IHRydWU7CisrCQkgIGJyZWFrOworKwkJfQorKwkgICAgICBlbHNlIGlmIChfX20gPT0gX01fYml0W19fYml0Y3VyXSkKKysJCWJyZWFrOworKwkgICAgfQorKyAgICAgIH0KKyAgICAgcmV0dXJuIF9fcmV0OyAgICAKKyAgIH0KKy0gIAorKworICAgY29uc3Qgd2NoYXJfdCogCisgICBjdHlwZTx3Y2hhcl90Pjo6CisgICBkb19pcyhjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3QKKy0tLSBnY2MvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaC51Y2xpYmMyMDBfdXBkYXRlfgkyMDA2LTAzLTEwIDE1OjMyOjM3ICswMTAwCisrKysgZ2NjL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgJMjAwNi0wMy0xMCAxNTozOToxNCArMDEwMAorQEAgLTQ3LDE4ICs0NywyMSBAQAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoc2l6ZV90IF9fcmVmcykKKyAgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfZ2V0X2NfbG9jYWxlKCkpLCAKKy0gICAgIF9NX25hbWVfbWVzc2FnZXMoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICAgICBfTV9uYW1lX21lc3NhZ2VzKF9TX2dldF9jX25hbWUoKSkKKyAgICAgIHsgfQorIAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgCisgCQkJCXNpemVfdCBfX3JlZnMpIAorLSAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpKSwKKy0gICAgIF9NX25hbWVfbWVzc2FnZXMoX19zKQorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhOVUxMKSwgX01fbmFtZV9tZXNzYWdlcyhOVUxMKQorICAgICAgeworLSAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKy0gICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0ZDo6c3RybGVuKF9fcykgKyAxOworKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsKKysgICAgICAgc3RkOjptZW1jcHkoX190bXAsIF9fcywgX19sZW4pOworICAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX190bXA7CisrCisrICAgICAgIC8vIExhc3QgdG8gYXZvaWQgbGVha2luZyBtZW1vcnkgaWYgbmV3IHRocm93cy4KKysgICAgICAgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOworICAgICAgfQorIAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorLS0tIGdjYy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYy51Y2xpYmMyMDBfdXBkYXRlfgkyMDA2LTAzLTEwIDE1OjM3OjI3ICswMTAwCisrKysgZ2NjL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCTIwMDYtMDMtMTAgMTU6Mzk6MTQgKzAxMDAKK0BAIC0zMyw5ICszMywxNCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KK0BAIC0yMDYsNyArMjExLDcgQEAKKyAJICB9CisgCWJyZWFrOworICAgICAgIGRlZmF1bHQ6CistCTsKKysJX19yZXQgPSBwYXR0ZXJuKCk7CisgICAgICAgfQorICAgICByZXR1cm4gX19yZXQ7CisgICB9CistLS0gZ2NjL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MudWNsaWJjMjAwX3VwZGF0ZX4JMjAwNi0wMy0xMCAxNTozNzoyNyArMDEwMAorKysrIGdjYy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCTIwMDYtMDMtMTAgMTU6Mzk6MTQgKzAxMDAKK0BAIC0zMyw5ICszMywxNCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKy0tLSBnY2MvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oLnVjbGliYzIwMF91cGRhdGV+CTIwMDYtMDMtMTAgMTU6MDY6MTcgKzAxMDAKKysrKyBnY2MvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCTIwMDYtMDMtMTAgMTU6Mzk6MTQgKzAxMDAKK0BAIC0zNywyNSArMzcsMzMgQEAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcykgCisgICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLCAKKy0gICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKyAgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisgCisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY2FjaGVfdHlwZSogX19jYWNoZSwgc2l6ZV90IF9fcmVmcykgCisgICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShfX2NhY2hlKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLCAKKy0gICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKyAgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisgCisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisgCQkJCSAgICAgc2l6ZV90IF9fcmVmcykgCisgICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLCAKKy0gICAgX01fbmFtZV90aW1lcHVuY3QoX19zKQorKyAgICAgIF9NX25hbWVfdGltZXB1bmN0KE5VTEwpCisgICAgIHsgCistICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CistICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RkOjpzdHJsZW4oX19zKSArIDE7CisrICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07CisrICAgICAgc3RkOjptZW1jcHkoX190bXAsIF9fcywgX19sZW4pOworICAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX190bXA7CistICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsgCisrCisrICAgICAgdHJ5CisrCXsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsgfQorKyAgICAgIGNhdGNoKC4uLikKKysJeworKwkgIGRlbGV0ZSBbXSBfTV9uYW1lX3RpbWVwdW5jdDsKKysJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJfQorICAgICB9CisgCisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CistLS0gZ2NjLTQuMi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaC5vbGQJMjAwNi0wOS0yOCAxMTozOTowMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCTIwMDYtMDktMjggMTI6MTA6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtMzksMjEgKzM5LDIzIEBACisgI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorIAorICNpbmNsdWRlIDxjc3RyaW5nPiAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c3RybGVuCistI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzbnByaW50ZiBvciBzdGQ6OnNwcmludGYKKysjaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnZzbnByaW50ZiBvciBzdGQ6OnZzcHJpbnRmCisgI2luY2x1ZGUgPGNsb2NhbGU+CisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CQkvLyBGb3IgY29kZWN2dAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCB0aGlzCisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyNpZmRlZiBfR0xJQkNYWF9VU0VfSUNPTlYKKyAjaW5jbHVkZSA8aWNvbnYuaD4JCS8vIEZvciBjb2RlY3Z0IHVzaW5nIGljb252LCBpY29udl90CisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCistI2luY2x1ZGUgPGxpYmludGwuaD4gCQkvLyBGb3IgbWVzc2FnZXMKKysjaWZkZWYgSEFWRV9MSUJJTlRMX0gKKysjaW5jbHVkZSA8bGliaW50bC5oPgkJLy8gRm9yIG1lc3NhZ2VzCisgI2VuZGlmCisrI2luY2x1ZGUgPGNzdGRhcmc+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgd2hhdCBpcyBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgZm9yCisrLy8gcHNtOiB1c2VkIGluIG9zL2dudS1saW51eC9jdHlwZV9ub25pbmxpbmUuaAorICNlbmRpZgorICNkZWZpbmUgX0dMSUJDWFhfQ19MT0NBTEVfR05VIDEKKyAKK0BAIC02Miw3ICs2NCw3IEBACisgI2VuZGlmCisgLy8gI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyA2CisgI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwCistIAorKworICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgbmFtZXNwYWNlIF9fZ251X2N4eAorIHsKK0BAIC03OSwyMiArODEsMjQgQEAKKyAgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7CisgI2VuZGlmCisgCistICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBfVHYgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCistICAvLyBzdHJpbmcuICBJZiBzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCistICAvLyB0aGUgdW5zYWZlIHNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAorKyAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgZG91YmxlIHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgorKyAgLy8gc3RyaW5nLiAgSWYgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKysgIC8vIHRoZSB1bnNhZmUgdnNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAorICAgLy8gYmUgYXZvaWRlZC4KKy0gIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KKy0gICAgaW50CistICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsIAorLQkJICAgICBjb25zdCBpbnQgX19zaXplIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSksCistCQkgICAgIGNvbnN0IGNoYXIqIF9fZm10LAorLSNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworLQkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX3ByZWMpCisrICAgIGlubGluZSBpbnQKKysgICAgX19jb252ZXJ0X2Zyb21fdihjb25zdCBfX2NfbG9jYWxlJgorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysJCQkJCV9fY2xvYyBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCisrI2VuZGlmCisrCQkgICAgICwKKysJCSAgICAgY2hhciogX19vdXQsCisrCQkgICAgIGNvbnN0IGludCBfX3NpemUsCisrCQkgICAgIGNvbnN0IGNoYXIqIF9fZm10LCAuLi4pCisgICAgIHsKKysgICAgICB2YV9saXN0IF9fYXJnczsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKyAgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX2Nsb2MpOworICNlbHNlCistCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjKQorLSAgICB7CisgIyBpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAgICAgICBjaGFyKiBfX29sZCA9IHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisgICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX29sZCkgKyAxXTsKK0BAIC0xMDMsNyArMTA3LDkgQEAKKyAjIGVuZGlmCisgI2VuZGlmCisgCistICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjpzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19wcmVjLCBfX3YpOworKyAgICAgIHZhX3N0YXJ0KF9fYXJncywgX19mbXQpOworKyAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6dnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX2FyZ3MpOworKyAgICAgIHZhX2VuZChfX2FyZ3MpOworIAorICNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworICAgICAgIF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19vbGQpOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMC8xNjAtbGlic3RkYysrLXBpYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjAvMTYwLWxpYnN0ZGMrKy1waWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYwYmNiMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjAvMTYwLWxpYnN0ZGMrKy1waWMucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorIyBEUDogQnVpbGQgYW5kIGluc3RhbGwgbGlic3RkYysrX3BpYy5hIGxpYnJhcnkuCisKKy0tLSBnY2MvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQorKysrIGdjYy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmFtCitAQCAtMjE0LDYgKzIxNCwxMiBAQAorIAkgICQoT1BUX0xERkxBR1MpICQoU0VDVElPTl9MREZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKExERkxBR1MpIC1vICRACisgCisgCisraW5zdGFsbC1leGVjLWxvY2FsOgorK2lmZXEgKCQoZW5hYmxlX3NoYXJlZCkseWVzKQorKwkkKEFSKSBjcnUgbGlic3RkYysrX3BpYy5hIC5saWJzLyoubyAkKHRvcF9idWlsZGRpcikvbGlic3VwYysrLyoubworKwkkKElOU1RBTExfREFUQSkgbGlic3RkYysrX3BpYy5hICQoREVTVERJUikkKHRvb2xleGVjbGliZGlyKQorK2VuZGlmCisrCisgIyBBZGRlZCBiaXRzIHRvIGJ1aWxkIGRlYnVnIGxpYnJhcnkuCisgaWYgR0xJQkNYWF9CVUlMRF9ERUJVRworIGFsbC1sb2NhbDogYnVpbGRfZGVidWcKKy0tLSBnY2MvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgorKysrIGdjYy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCitAQCAtNjI3LDcgKzYyNyw3IEBACisgCisgaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWRhdGEtbG9jYWwKKyAKKy1pbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUworK2luc3RhbGwtZXhlYy1hbTogaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTIGluc3RhbGwtZXhlYy1sb2NhbAorIAorIGluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisgCitAQCAtNjYwLDYgKzY2MCw3IEBACisgCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKKyAJaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCisgCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWRhdGEtbG9jYWwgaW5zdGFsbC1leGVjIFwKKysJaW5zdGFsbC1leGVjLWxvY2FsIFwKKyAJaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorIAlpbnN0YWxsLXN0cmlwIGluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUyBpbnN0YWxsY2hlY2sgXAorIAlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCitAQCAtNzQzLDYgKzc0MywxMyBAQAorIGluc3RhbGxfZGVidWc6CisgCShjZCAke2RlYnVnZGlyfSAmJiAkKE1BS0UpIFwKKyAJdG9vbGV4ZWNsaWJkaXI9JChnbGliY3h4X3Rvb2xleGVjbGliZGlyKS9kZWJ1ZyBpbnN0YWxsKQorKworK2luc3RhbGwtZXhlYy1sb2NhbDoKKytpZmVxICgkKGVuYWJsZV9zaGFyZWQpLHllcykKKysJJChBUikgY3J1IGxpYnN0ZGMrK19waWMuYSAqLm8gJCh0b3BfYnVpbGRkaXIpL2xpYnN1cGMrKy8qLm8KKysJJChJTlNUQUxMX0RBVEEpIGxpYnN0ZGMrK19waWMuYSAkKERFU1RESVIpJCh0b29sZXhlY2xpYmRpcikKKytlbmRpZgorKworICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisgIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisgLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMC8xNzAtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMC8xNzAtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMjA5MmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4wLzE3MC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorLS0tIGdjYy00LjAuMC9ib2VobS1nYy9pbmNsdWRlL2djLmgtb3JpZwkyMDA1LTA0LTI4IDIyOjI4OjU3LjAwMDAwMDAwMCAtMDUwMAorKysrIGdjYy00LjAuMC9ib2VobS1nYy9pbmNsdWRlL2djLmgJMjAwNS0wNC0yOCAyMjozMDozOC4wMDAwMDAwMDAgLTA1MDAKK0BAIC01MDAsNyArNTAwLDcgQEAKKyAjaWZkZWYgX19saW51eF9fCisgIyBpbmNsdWRlIDxmZWF0dXJlcy5oPgorICMgaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxIHx8IF9fR0xJQkNfXyA+IDIpIFwKKy0gICAgICYmICFkZWZpbmVkKF9faWE2NF9fKQorKyAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pICYmICFkZWZpbmVkKF9fVUNMSUJDX18pCisgIyAgIGlmbmRlZiBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgICAgZGVmaW5lIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjAvMTgwLWM5OS1zbnByaW50Zi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjAvMTgwLWM5OS1zbnByaW50Zi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzdhNmI1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMC8xODAtYzk5LXNucHJpbnRmLnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKKy0tLSBnY2MtNC4yLjAub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9zdGRfY3N0ZGlvLmgJMjAwNi0xMi0wNyAxMDozMzo1MS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvc3RkX2NzdGRpby5oCTIwMDctMDUtMjAgMDE6MDU6MzguMDAwMDAwMDAwICswMjAwCitAQCAtMTQ0LDcgKzE0NCw3IEBACisgCisgX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorIAorLSNpZiBfR0xJQkNYWF9VU0VfQzk5CisrI2lmIF9HTElCQ1hYX1VTRV9DOTkgfHwgZGVmaW5lZChfX1VDTElCQ19fKQorIAorICN1bmRlZiBzbnByaW50ZgorICN1bmRlZiB2ZnNjYW5mCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4wLzE5MC1jOTktY29tcGxleC11Z2x5LWhhY2sucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4wLzE5MC1jOTktY29tcGxleC11Z2x5LWhhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNjYzgwZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjAvMTkwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaApAQCAtMCwwICsxLDEyIEBACistLS0gZ2NjLTQuMC4wL2xpYnN0ZGMrKy12My9jb25maWd1cmUtb2xkCTIwMDUtMDQtMzAgMjI6MDQ6NDguMDYxNjAzOTEyIC0wNTAwCisrKysgZ2NjLTQuMC4wL2xpYnN0ZGMrKy12My9jb25maWd1cmUJMjAwNS0wNC0zMCAyMjowNjoxMy42Nzg1ODgxNTIgLTA1MDAKK0BAIC03MTk0LDYgKzcxOTQsOSBAQAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgI2luY2x1ZGUgPGNvbXBsZXguaD4KKysjaWZkZWYgX19VQ0xJQkNfXworKyNlcnJvciB1Z2x5IGhhY2sgdG8gbWFrZSBzdXJlIGNvbmZpZ3VyZSB0ZXN0IGZhaWxzIGhlcmUgZm9yIGNyb3NzIHVudGlsIHVDbGliYyBzdXBwb3J0cyB0aGUgY29tcGxleCBmdW5jcworKyNlbmRpZgorIGludAorIG1haW4gKCkKKyB7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4wLzIwMC1pbmRleF9tYWNyby5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjAvMjAwLWluZGV4X21hY3JvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZTQ3NjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4wLzIwMC1pbmRleF9tYWNyby5wYXRjaApAQCAtMCwwICsxLDI0IEBACistLS0gZ2NjLTQuMS4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlLm1wcwkyMDA2LTAzLTI0IDAxOjQ5OjUxICswMTAwCisrKysgZ2NjLTQuMS4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCTIwMDYtMDMtMjQgMDE6NDk6MzcgKzAxMDAKK0BAIC01OSw2ICs1OSw5IEBACisgI2luY2x1ZGUgPGJpdHMvYWxsb2NhdG9yLmg+CisgI2luY2x1ZGUgPGV4dC9oYXNoX2Z1bi5oPgorIAorKy8qIGNvcGUgdy8gaW5kZXggZGVmaW5lZCBhcyBtYWNybywgU3VTdjMgcHJvcG9zYWwgKi8KKysjdW5kZWYgaW5kZXgKKysKKyAjIGlmZGVmIF9fR0MKKyAjICAgZGVmaW5lIF9fR0NfQ09OU1QgY29uc3QKKyAjIGVsc2UKKy0tLSBnY2MtNC4xLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgubXBzCTIwMDYtMDMtMjQgMDE6NTA6MDQgKzAxMDAKKysrKyBnY2MtNC4xLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgJMjAwNi0wMy0yNCAwMTo1MDoyOCArMDEwMAorQEAgLTUzLDYgKzUzLDkgQEAKKyAjaW5jbHVkZSA8ZXh0L21lbW9yeT4gLy8gRm9yIHVuaW5pdGlhbGl6ZWRfY29weV9uCisgI2luY2x1ZGUgPGV4dC9udW1lcmljPiAvLyBGb3IgcG93ZXIKKyAKKysvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCisrI3VuZGVmIGluZGV4CisrCisgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKworICAgdXNpbmcgc3RkOjpzaXplX3Q7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4wLzIxMC1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjAvMjEwLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NGIxZjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4wLzIxMC1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitJbmRleDogZ2NjLTQuMi9saWJtdWRmbGFwL21mLWhvb2tzMi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuMi9saWJtdWRmbGFwL21mLWhvb2tzMi5jCShyZXZpc2lvbiAxMTk4MzQpCisrKysgZ2NjLTQuMi9saWJtdWRmbGFwL21mLWhvb2tzMi5jCSh3b3JraW5nIGNvcHkpCitAQCAtNDI3LDcgKzQyNyw3IEBACisgeworICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQocywgbiwgX19NRl9DSEVDS19XUklURSwgImJ6ZXJvIHJlZ2lvbiIpOworLSAgYnplcm8gKHMsIG4pOworKyAgbWVtc2V0IChzLCAwLCBuKTsKKyB9CisgCisgCitAQCAtNDM3LDcgKzQzNyw3IEBACisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzcmMsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjb3B5IHNyYyIpOworICAgTUZfVkFMSURBVEVfRVhURU5UKGRlc3QsIG4sIF9fTUZfQ0hFQ0tfV1JJVEUsICJiY29weSBkZXN0Iik7CistICBiY29weSAoc3JjLCBkZXN0LCBuKTsKKysgIG1lbW1vdmUgKGRlc3QsIHNyYywgbik7CisgfQorIAorIAorQEAgLTQ0Nyw3ICs0NDcsNyBAQAorICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQoczEsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjbXAgMXN0IGFyZyIpOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMyLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY21wIDJuZCBhcmciKTsKKy0gIHJldHVybiBiY21wIChzMSwgczIsIG4pOworKyAgcmV0dXJuIG4gPT0gMCA/IDAgOiBtZW1jbXAgKHMxLCBzMiwgbik7CisgfQorIAorIAorQEAgLTQ1Niw3ICs0NTYsNyBAQAorICAgc2l6ZV90IG4gPSBzdHJsZW4gKHMpOworICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQocywgQ0xBTVBBREQobiwgMSksIF9fTUZfQ0hFQ0tfUkVBRCwgImluZGV4IHJlZ2lvbiIpOworLSAgcmV0dXJuIGluZGV4IChzLCBjKTsKKysgIHJldHVybiBzdHJjaHIgKHMsIGMpOworIH0KKyAKKyAKK0BAIC00NjUsNyArNDY1LDcgQEAKKyAgIHNpemVfdCBuID0gc3RybGVuIChzKTsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIENMQU1QQUREKG4sIDEpLCBfX01GX0NIRUNLX1JFQUQsICJyaW5kZXggcmVnaW9uIik7CistICByZXR1cm4gcmluZGV4IChzLCBjKTsKKysgIHJldHVybiBzdHJyY2hyIChzLCBjKTsKKyB9CisgCisgLyogWFhYOiAgc3RwY3B5LCBtZW1jY3B5ICovCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4wLzIyMC1saWJzdGRjKystbmFtZXNwYWNlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMC8yMjAtbGlic3RkYysrLW5hbWVzcGFjZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTU4N2NhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMC8yMjAtbGlic3RkYysrLW5hbWVzcGFjZS5wYXRjaApAQCAtMCwwICsxLDM2IEBACitkaWZmIC1ydXAgZ2NjLTQuMi5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggZ2NjLTQuMi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCistLS0gZ2NjLTQuMi5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgJMjAwNi0xMi0yMiAxMzowNjo1Ni4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgJMjAwNi0xMi0yMiAxNToyMzo0MS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zMiw3ICszMiw4IEBACisgLy8KKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorLQorK25hbWVzcGFjZSBzdGQKKyt7CisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IHByb3RvdHlwZXMgZm9yICp0ZXh0ZG9tYWluIGZ1bmNzCisgI2VuZGlmCitAQCAtMTE1LDMgKzExNiw0IEBACisgCSAgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsgCisgCSB9CisgICAgICB9CisrfQorZGlmZiAtcnVwIGdjYy00LjIub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggZ2NjLTQuMi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKy0tLSBnY2MtNC4yLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCTIwMDYtMTItMjIgMTM6MDY6NTYuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgJMjAwNi0xMi0yMiAxNToyMDozMS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zMyw3ICszMyw4IEBACisgLy8KKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorLQorK25hbWVzcGFjZSBzdGQKKyt7CisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KHNpemVfdCBfX3JlZnMpIAorICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwgCitAQCAtNzQsMyArNzUsNCBAQAorICAgICAgIGRlbGV0ZSBfTV9kYXRhOyAKKyAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7IAorICAgICB9CisrfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMC8yMzAtbGliYmFja2VuZF9kZXBfZ2Nvdi1pb3YuaC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjAvMjMwLWxpYmJhY2tlbmRfZGVwX2djb3YtaW92LmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJmMTE1YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjAvMjMwLWxpYmJhY2tlbmRfZGVwX2djb3YtaW92LmgucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorSW5kZXg6IGdjYy00LjIvZ2NjL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuMi9nY2MvTWFrZWZpbGUuaW4JKHJldmlzaW9uIDEyMTc1OCkKKysrKyBnY2MtNC4yL2djYy9NYWtlZmlsZS5pbgkod29ya2luZyBjb3B5KQorQEAgLTI2NTgsNyArMjY1OCw3IEBAIG1pcHMtdGR1bXAubyA6IG1pcHMtdGR1bXAuYyAkKENPTkZJR19IKSAKKyAjIEZJWE1FOiB3cml0aW5nIHByb3BlciBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgaXMgYSAqTE9UKiBvZiB3b3JrLgorIGxpYmJhY2tlbmQubyA6ICQoT0JKUy1jb21tb246Lm89LmMpICQob3V0X2ZpbGUpIFwKKyAgIGluc24tY29uZmlnLmggaW5zbi1mbGFncy5oIGluc24tY29kZXMuaCBpbnNuLWNvbnN0YW50cy5oIFwKKy0gIGluc24tYXR0ci5oICAkKERBVEVTVEFNUCkgJChCQVNFVkVSKSAkKERFVlBIQVNFKQorKyAgaW5zbi1hdHRyLmggICQoREFURVNUQU1QKSAkKEJBU0VWRVIpICQoREVWUEhBU0UpIGdjb3YtaW92LmgKKyAJJChDQykgJChBTExfQ0ZMQUdTKSAkKEFMTF9DUFBGTEFHUykgXAorIAkgIC1EVEFSR0VUX05BTUU9XCIkKHRhcmdldF9ub25jYW5vbmljYWwpXCIgXAorIAkgIC1ETE9DQUxFRElSPVwiJChsb2NhbGVkaXIpXCIgXApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMC8yNDAtYXJtLWJpZ2VuZGlhbi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjAvMjQwLWFybS1iaWdlbmRpYW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdjNjA5MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjAvMjQwLWFybS1iaWdlbmRpYW4ucGF0Y2gKQEAgLTAsMCArMSw2NyBAQAorQnkgTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAd2FudHN0b2ZseS5vcmc+CitBZGRzIHN1cHBvcnQgZm9yIGFybSpiLWxpbnV4KiBiaWctZW5kaWFuIEFSTSB0YXJnZXRzCisKK1NlZSBodHRwOi8vZ2NjLmdudS5vcmcvUFIxNjM1MAorCistLS0gZ2NjLTQuMi4wL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCisrKysgZ2NjLTQuMi4wL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCitAQCAtMjgsMTkgKzI4LDMzIEBACisgI3VuZGVmICBUQVJHRVRfVkVSU0lPTgorICNkZWZpbmUgVEFSR0VUX1ZFUlNJT04gIGZwdXRzICgiIChBUk0gR05VL0xpbnV4IHdpdGggRUxGKSIsIHN0ZGVycik7CisgCisrLyoKKysgKiAnY29uZmlnLmdjYycgZGVmaW5lcyBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUIGFzIDEgZm9yIGFybSpiLSoKKysgKiAoYmlnIGVuZGlhbikgY29uZmlndXJhdGlvbnMuCisrICovCisrI2lmIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQKKysjZGVmaW5lIFRBUkdFVF9FTkRJQU5fREVGQVVMVCBNQVNLX0JJR19FTkQKKysjZGVmaW5lIFRBUkdFVF9FTkRJQU5fT1BUSU9OICJtYmlnLWVuZGlhbiIKKysjZGVmaW5lIFRBUkdFVF9MSU5LRVJfRU1VTEFUSU9OICJhcm1lbGZiX2xpbnV4IgorKyNlbHNlCisrI2RlZmluZSBUQVJHRVRfRU5ESUFOX0RFRkFVTFQgMAorKyNkZWZpbmUgVEFSR0VUX0VORElBTl9PUFRJT04gIm1saXR0bGUtZW5kaWFuIgorKyNkZWZpbmUgVEFSR0VUX0xJTktFUl9FTVVMQVRJT04gImFybWVsZl9saW51eCIKKysjZW5kaWYKKysKKyAjdW5kZWYgIFRBUkdFVF9ERUZBVUxUX0ZMT0FUX0FCSQorICNkZWZpbmUgVEFSR0VUX0RFRkFVTFRfRkxPQVRfQUJJIEFSTV9GTE9BVF9BQklfSEFSRAorIAorICN1bmRlZiAgVEFSR0VUX0RFRkFVTFQKKy0jZGVmaW5lIFRBUkdFVF9ERUZBVUxUICgwKQorKyNkZWZpbmUgVEFSR0VUX0RFRkFVTFQgKFRBUkdFVF9FTkRJQU5fREVGQVVMVCkKKyAKKyAjZGVmaW5lIFNVQlRBUkdFVF9DUFVfREVGQVVMVCBUQVJHRVRfQ1BVX2FybTYKKyAKKy0jZGVmaW5lIFNVQlRBUkdFVF9FWFRSQV9MSU5LX1NQRUMgIiAtbSBhcm1lbGZfbGludXggLXAiCisrI2RlZmluZSBTVUJUQVJHRVRfRVhUUkFfTElOS19TUEVDICIgLW0gIiBUQVJHRVRfTElOS0VSX0VNVUxBVElPTiAiIC1wIgorIAorICN1bmRlZiAgTVVMVElMSUJfREVGQVVMVFMKKyAjZGVmaW5lIE1VTFRJTElCX0RFRkFVTFRTIFwKKy0JeyAibWFybSIsICJtbGl0dGxlLWVuZGlhbiIsICJtaGFyZC1mbG9hdCIsICJtbm8tdGh1bWItaW50ZXJ3b3JrIiB9CisrCXsgIm1hcm0iLCBUQVJHRVRfRU5ESUFOX09QVElPTiwgIm1oYXJkLWZsb2F0IiwgIm1uby10aHVtYi1pbnRlcndvcmsiIH0KKyAKKyAvKiBOb3cgd2UgZGVmaW5lIHRoZSBzdHJpbmdzIHVzZWQgdG8gYnVpbGQgdGhlIHNwZWMgZmlsZS4gICovCisgI3VuZGVmICBMSUJfU1BFQworQEAgLTYxLDcgKzc1LDcgQEAKKyAgICAle3JkeW5hbWljOi1leHBvcnQtZHluYW1pY30gXAorICAgICV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAiIExJTlVYX0RZTkFNSUNfTElOS0VSICJ9IFwKKyAgICAtWCBcCistICAgJXttYmlnLWVuZGlhbjotRUJ9IiBcCisrICAgJXttYmlnLWVuZGlhbjotRUJ9ICV7bWxpdHRsZS1lbmRpYW46LUVMfSIgXAorICAgIFNVQlRBUkdFVF9FWFRSQV9MSU5LX1NQRUMKKyAKKyAjdW5kZWYgIExJTktfU1BFQworLS0tIGdjYy00LjIuMC9nY2MvY29uZmlnLmdjYy5vcmlnCTIwMDYtMDktMjIgMTQ6NTM6NDEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4wL2djYy9jb25maWcuZ2NjCTIwMDYtMDktMjUgMTA6NDU6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtNjk2LDYgKzY5NiwxMSBAQAorIAl0bV9maWxlPSJkYnhlbGYuaCBlbGZvcy5oIGxpbnV4LmggYXJtL2VsZi5oIGFybS9saW51eC1nYXMuaCBhcm0vbGludXgtZWxmLmgiCisgCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gdC1saW51eCBhcm0vdC1hcm0iCisgCWNhc2UgJHt0YXJnZXR9IGluCisrCWFybSpiLSopCisrCQl0bV9kZWZpbmVzPSIke3RtX2RlZmluZXN9IFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQ9MSIKKysJCTs7CisrCWVzYWMKKysJY2FzZSAke3RhcmdldH0gaW4KKyAJYXJtKi0qLWxpbnV4LSplYWJpKQorIAkgICAgdG1fZmlsZT0iJHRtX2ZpbGUgYXJtL2JwYWJpLmggYXJtL2xpbnV4LWVhYmkuaCIKKyAJICAgIHRtYWtlX2ZpbGU9IiR0bWFrZV9maWxlIGFybS90LWFybS1lbGYgYXJtL3QtYnBhYmkgYXJtL3QtbGludXgtZWFiaSIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjAvMjUwLXNvZnRmbG9hdC1maXgucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4wLzI1MC1zb2Z0ZmxvYXQtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MTc4NTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4wLzI1MC1zb2Z0ZmxvYXQtZml4LnBhdGNoCkBAIC0wLDAgKzEsNTggQEAKK1RoaXMgcGF0Y2ggKEMpIDIwMDcgWWFubiBFLiBNT1JJTgorTGljZW5zZWQgdW5kZXIgR1BMIHYyLgorCitGaXJzdCBodW5rIG9mIHRoaXMgcGF0Y2ggc29sdmVzIGNvbXBpbGluZyB1Q2xpYmM6CisKK21ha2VbMV06IEVudGVyaW5nIGRpcmVjdG9yeSBgL2hvbWUveW1vcmluL3gtdG9vbHMvYnVpbGQvYXJtZWItdW5rbm93bi1saW51eC11Y2xpYmMvZ2NjLTQuMS4xLXVDbGliYy0wLjkuMjguMS9idWlsZC1saWJjJworICBMRCBsaWJ1Q2xpYmMtMC45LjI5LnNvCitsaWJjL2xpYmNfc28uYShkaWZmdGltZS5vcyk6IEluIGZ1bmN0aW9uIGBkaWZmdGltZSc6CitkaWZmdGltZS5jOigudGV4dCsweDgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX2Zsb2F0c2lkZicKK2RpZmZ0aW1lLmM6KC50ZXh0KzB4MmMpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX3N1YmRmMycKK2xpYmMvbGliY19zby5hKF9mcG1heHRvc3RyLm9zKTogSW4gZnVuY3Rpb24gYF9mcG1heHRvc3RyJzoKK19mcG1heHRvc3RyLmM6KC50ZXh0KzB4ZDQpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX25lZGYyJworX2ZwbWF4dG9zdHIuYzooLnRleHQrMHhmOCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fZXFkZjInCitfZnBtYXh0b3N0ci5jOigudGV4dCsweDExNCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fZGl2ZGYzJworX2ZwbWF4dG9zdHIuYzooLnRleHQrMHgxMjApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX2x0ZGYyJworX2ZwbWF4dG9zdHIuYzooLnRleHQrMHgxYzQpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX211bGRmMycKK19mcG1heHRvc3RyLmM6KC50ZXh0KzB4Mzg4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19nZWRmMicKK19mcG1heHRvc3RyLmM6KC50ZXh0KzB4NDMwKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19hZGRkZjMnCitsaWJjL2xpYmNfc28uYShfX3BzZnNfZG9fbnVtZXJpYy5vcyk6IEluIGZ1bmN0aW9uIGBfX3BzZnNfZG9fbnVtZXJpYyc6CitfX3BzZnNfZG9fbnVtZXJpYy5jOigudGV4dCsweDUyMCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fdHJ1bmNkZnNmMicKK2xpYmMvbGliY19zby5hKHN0cnRvZi5vcyk6IEluIGZ1bmN0aW9uIGBzdHJ0b2YnOgorc3RydG9mLmM6KC50ZXh0KzB4MWMpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX2V4dGVuZHNmZGYyJworL2hvbWUveW1vcmluL3gtdG9vbHMvYnVpbGQvYXJtZWItdW5rbm93bi1saW51eC11Y2xpYmMvZ2NjLTQuMS4xLXVDbGliYy0wLjkuMjguMS9jY19jb3JlX3ByZWZpeC9saWIvZ2NjL2FybS1saW51eC11Y2xpYmMvNC4xLjEvbGliZ2NjLmEoX2ZpeHVuc2Rmc2kubyk6CitJbiBmdW5jdGlvbiBgX19maXh1bnNkZnNpJzoKK2xpYmdjYzIuYzooLnRleHQrMHgzNCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fZml4ZGZzaScKK21ha2VbMl06ICoqKiBbbGliL2xpYmMuc29dIEVycm9yIDEKK21ha2VbMV06ICoqKiBbbGliL2xpYmMuc28uMF0gRXJyb3IgMgorbWFrZVsxXTogTGVhdmluZyBkaXJlY3RvcnkgYC9ob21lL3ltb3Jpbi94LXRvb2xzL2J1aWxkL2FybWViLXVua25vd24tbGludXgtdWNsaWJjL2djYy00LjEuMS11Q2xpYmMtMC45LjI4LjEvYnVpbGQtbGliYycKK21ha2U6ICoqKiBbL2hvbWUveW1vcmluL3gtdG9vbHMvYnVpbGQvYXJtZWItdW5rbm93bi1saW51eC11Y2xpYmMvZ2NjLTQuMS4xLXVDbGliYy0wLjkuMjguMS9idWlsZC1saWJjL2xpYi9saWJjLmFdCitFcnJvciAyCisKK1RoZSBzZWNvbmQgaHVuayBmaXhlcyBidWlsZGluZyBmaW5hbCBnY2MgYmVjYXVzZSBzb2Z0LWZsb2F0IGltcGxpZXMgdXNpbmcgLWxmbG9hdCAod2hpY2ggd2UgZG9uJ3QgaGF2ZSkuCisKKworZGlmZiAtZHVyIGdjYy00LjIuMC5vcmlnL2djYy9jb25maWcuZ2NjIGdjYy00LjIuMC9nY2MvY29uZmlnLmdjYworLS0tIGdjYy00LjIuMC5vcmlnL2djYy9jb25maWcuZ2NjCTIwMDctMDctMTUgMTE6MjQ6MTguMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4wL2djYy9jb25maWcuZ2NjCTIwMDctMDctMTUgMTE6MjY6MDIuMDAwMDAwMDAwICswMjAwCitAQCAtNzIxLDcgKzcyMSw3IEBACisgCSAgICBkZWZhdWx0X3VzZV9jeGFfYXRleGl0PXllcworIAkgICAgOzsKKyAJKikKKy0JICAgIHRtYWtlX2ZpbGU9IiR0bWFrZV9maWxlIGFybS90LWxpbnV4IgorKwkgICAgdG1ha2VfZmlsZT0iJHRtYWtlX2ZpbGUgYXJtL3QtbGludXggYXJtL3QtYXJtLWVsZiIKKyAJICAgIDs7CisgCWVzYWMKKyAJdG1fZmlsZT0iJHRtX2ZpbGUgYXJtL2FvdXQuaCBhcm0vYXJtLmgiCitkaWZmIC1kdXIgZ2NjLTQuMi4wLm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmggZ2NjLTQuMi4wL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCistLS0gZ2NjLTQuMi4wLm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgJMjAwNy0wNy0xNSAxMToyNDoxOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjAvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgJMjAwNy0wNy0xNSAxMToyNjowMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC02Myw3ICs2Myw3IEBACisgICAgJXtzaGFyZWQ6LWxjfSBcCisgICAgJXshc2hhcmVkOiV7cHJvZmlsZTotbGNfcH0leyFwcm9maWxlOi1sY319IgorIAorLSNkZWZpbmUgTElCR0NDX1NQRUMgIiV7bXNvZnQtZmxvYXQ6LWxmbG9hdH0gJXttZmxvYXQtYWJpPXNvZnQqOi1sZmxvYXR9IC1sZ2NjIgorKyNkZWZpbmUgTElCR0NDX1NQRUMgIi1sZ2NjIgorIAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjAvMjYwLWZsYXR0ZW4tc3dpdGNoLXN0bXQtMDAucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4wLzI2MC1mbGF0dGVuLXN3aXRjaC1zdG10LTAwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYWMzN2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4wLzI2MC1mbGF0dGVuLXN3aXRjaC1zdG10LTAwLnBhdGNoCkBAIC0wLDAgKzEsMTUzIEBACitIaSwKKworVGhlIGF0dGFjaGVkIHBhdGNoIG1ha2VzIHN1cmUgdGhhdCB3ZSBjcmVhdGUgc21hbGxlciBvYmplY3QgY29kZSBmb3IKK3NpbXBsZSBzd2l0Y2ggc3RhdGVtZW50cy4gV2UganVzdCBtYWtlIHN1cmUgdG8gZmxhdHRlbiB0aGUgc3dpdGNoCitzdGF0ZW1lbnQgaW50byBhbiBpZi1lbHNlIGNoYWluLCBiYXNpY2FsbHkuCisKK1RoaXMgZml4ZXMgYSBzaXplLXJlZ3Jlc3Npb24gYXMgY29tcGFyZWQgdG8gZ2NjLTMuNCwgYXMgY2FuIGJlIHNlZW4KK2JlbG93LgorCisyMDA3LTA0LTE1ICBCZXJuaGFyZCBGaXNjaGVyICA8Li4+CisKKwkqIHN0bXQuYyAoZXhwYW5kX2Nhc2UpOiBEbyBub3QgY3JlYXRlIGEgY29tcGxleCBiaW5hcnkgdHJlZSB3aGVuCisJb3B0aW1pemluZyBmb3Igc2l6ZSBidXQgcmF0aGVyIHVzZSB0aGUgc2ltcGxlIG9yZGVyZWQgbGlzdC4KKwkoZW1pdF9jYXNlX25vZGVzKTogZG8gbm90IGVtaXQganVtcHMgdG8gdGhlIGRlZmF1bHRfbGFiZWwgd2hlbgorCW9wdGltaXppbmcgZm9yIHNpemUuCisKK05vdCByZWd0ZXN0ZWQgc28gZmFyLgorQ29tbWVudHM/CisKK0F0dGFjaGVkIGlzIHRoZSB0ZXN0IHN3aXRjaC5jIG1lbnRpb25lZCBiZWxvdy4KKworJCBmb3IgaSBpbiAyLjk1IDMuMyAzLjQgNC4wIDQuMSA0LjIub3JpZy1IRUFEIDQuMy5vcmlnLUhFQUQgNC4zLUhFQUQ7ZG8KK2djYy0kaSAgLURDSEFJTiAtT3MgLW8gc3dpdGNoLUNIQUlOLSRpLm8gLWMgc3dpdGNoLmMgO2RvbmUKKyQgZm9yIGkgaW4gMi45NSAzLjMgMy40IDQuMCA0LjEgNC4yLm9yaWctSEVBRCA0LjMub3JpZy1IRUFEIDQuMy1IRUFEO2RvCitnY2MtJGkgIC1VQ0hBSU4gLU9zIC1vIHN3aXRjaC0kaS5vIC1jIHN3aXRjaC5jIDtkb25lCisKKyQgc2l6ZSBzd2l0Y2gtKi5vCisgICB0ZXh0CSAgIGRhdGEJICAgIGJzcwkgICAgZGVjCSAgICBoZXgJZmlsZW5hbWUKKyAgICAxNjkJICAgICAgMAkgICAgICAwCSAgICAxNjkJICAgICBhOQlzd2l0Y2gtMi45NS5vCisgICAgMTE1CSAgICAgIDAJICAgICAgMAkgICAgMTE1CSAgICAgNzMJc3dpdGNoLTMuMy5vCisgICAgMTAzCSAgICAgIDAJICAgICAgMAkgICAgMTAzCSAgICAgNjcJc3dpdGNoLTMuNC5vCisgICAgMTI0CSAgICAgIDAJICAgICAgMAkgICAgMTI0CSAgICAgN2MJc3dpdGNoLTQuMC5vCisgICAgMTI0CSAgICAgIDAJICAgICAgMAkgICAgMTI0CSAgICAgN2MJc3dpdGNoLTQuMS5vCisgICAgMTI0CSAgICAgIDAJICAgICAgMAkgICAgMTI0CSAgICAgN2MJc3dpdGNoLTQuMi5vcmlnLUhFQUQubworICAgICA5NQkgICAgICAwCSAgICAgIDAJICAgICA5NQkgICAgIDVmCXN3aXRjaC00LjMtSEVBRC5vCisgICAgMTI0CSAgICAgIDAJICAgICAgMAkgICAgMTI0CSAgICAgN2MJc3dpdGNoLTQuMy5vcmlnLUhFQUQubworICAgIDE2NgkgICAgICAwCSAgICAgIDAJICAgIDE2NgkgICAgIGE2CXN3aXRjaC1DSEFJTi0yLjk1Lm8KKyAgICAxMTEJICAgICAgMAkgICAgICAwCSAgICAxMTEJICAgICA2Zglzd2l0Y2gtQ0hBSU4tMy4zLm8KKyAgICAgOTUJICAgICAgMAkgICAgICAwCSAgICAgOTUJICAgICA1Zglzd2l0Y2gtQ0hBSU4tMy40Lm8KKyAgICAgOTUJICAgICAgMAkgICAgICAwCSAgICAgOTUJICAgICA1Zglzd2l0Y2gtQ0hBSU4tNC4wLm8KKyAgICAgOTUJICAgICAgMAkgICAgICAwCSAgICAgOTUJICAgICA1Zglzd2l0Y2gtQ0hBSU4tNC4xLm8KKyAgICAgOTUJICAgICAgMAkgICAgICAwCSAgICAgOTUJICAgICA1Zglzd2l0Y2gtQ0hBSU4tNC4yLm9yaWctSEVBRC5vCisgICAgIDk1CSAgICAgIDAJICAgICAgMAkgICAgIDk1CSAgICAgNWYJc3dpdGNoLUNIQUlOLTQuMy1IRUFELm8KKyAgICAgOTUJICAgICAgMAkgICAgICAwCSAgICAgOTUJICAgICA1Zglzd2l0Y2gtQ0hBSU4tNC4zLm9yaWctSEVBRC5vCisKKworQ29udGVudC1UeXBlOiB0ZXh0L3gtZGlmZjsgY2hhcnNldD11cy1hc2NpaQorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9ImdjYy00LjMuZ2NjLWZsYXR0ZW4tc3dpdGNoLXN0bXQuMDAuZGlmZiIKKworSW5kZXg6IGdjYy00LjIuMC9nY2Mvc3RtdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuMi4wLm9yaWcvZ2NjL3N0bXQuYwkocmV2aXNpb24gMTIzODQzKQorKysrIGdjYy00LjIuMC9nY2Mvc3RtdC5jCSh3b3JraW5nIGNvcHkpCitAQCAtMjUxNyw3ICsyNTE3LDExIEBAIGV4cGFuZF9jYXNlICh0cmVlIGV4cCkKKyAJICB1c2VfY29zdF90YWJsZQorIAkgICAgPSAoVFJFRV9DT0RFIChvcmlnX3R5cGUpICE9IEVOVU1FUkFMX1RZUEUKKyAJICAgICAgICYmIGVzdGltYXRlX2Nhc2VfY29zdHMgKGNhc2VfbGlzdCkpOworLQkgIGJhbGFuY2VfY2FzZV9ub2RlcyAoJmNhc2VfbGlzdCwgTlVMTCk7CisrCSAgLyogV2hlbiBvcHRpbWl6aW5nIGZvciBzaXplLCB3ZSB3YW50IGEgc3RyYWlnaHQgbGlzdCB0byBhdm9pZAorKwkgICAgIGp1bXBzIGFzIG11Y2ggYXMgcG9zc2libGUuIFRoaXMgYmFzaWNhbGx5IGNyZWF0ZXMgYW4gaWYtZWxzZQorKwkgICAgIGNoYWluLiAgKi8KKysJICBpZiAoIW9wdGltaXplX3NpemUpCisrCSAgICBiYWxhbmNlX2Nhc2Vfbm9kZXMgKCZjYXNlX2xpc3QsIE5VTEwpOworIAkgIGVtaXRfY2FzZV9ub2RlcyAoaW5kZXgsIGNhc2VfbGlzdCwgZGVmYXVsdF9sYWJlbCwgaW5kZXhfdHlwZSk7CisgCSAgZW1pdF9qdW1wIChkZWZhdWx0X2xhYmVsKTsKKyAJfQorQEAgLTMwNzUsNiArMzA3OSw3IEBAIGVtaXRfY2FzZV9ub2RlcyAocnR4IGluZGV4LCBjYXNlX25vZGVfcHQKKyAJICAgIHsKKyAJICAgICAgaWYgKCFub2RlX2hhc19sb3dfYm91bmQgKG5vZGUsIGluZGV4X3R5cGUpKQorIAkJeworKwkJICBpZiAoIW9wdGltaXplX3NpemUpIC8qIGRvbid0IGpsIHRvIHRoZSAuZGVmYXVsdF9sYWJlbC4gKi8KKyAJCSAgZW1pdF9jbXBfYW5kX2p1bXBfaW5zbnMgKGluZGV4LAorIAkJCQkJICAgY29udmVydF9tb2RlcworIAkJCQkJICAgKG1vZGUsIGltb2RlLAorCisKK0NvbnRlbnQtVHlwZTogdGV4dC94LWNzcmM7IGNoYXJzZXQ9dXMtYXNjaWkKK0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSJzd2l0Y2guYyIKKworaW50Citjb21tdXRhdGl2ZV90cmVlX2NvZGUgKGludCBjb2RlKQoreworI2RlZmluZSBDQVNFKHZhbCwgcmV0KSBjYXNlIHZhbDovKiBfX2FzbV9fKCIjIHZhbD0iI3ZhbCAiLHJldD0iI3JldCk7Ki8gcmV0dXJuIHJldDsKKyNpZm5kZWYgQ0hBSU4KKyAgc3dpdGNoIChjb2RlKQorICAgIHsKKyMgaWYgMQorICBDQVNFKDEsMykKKyAgQ0FTRSgzLDIpCisgIENBU0UoNSw4KQorICBDQVNFKDcsMSkKKyAgQ0FTRSgzMyw0KQorICBDQVNFKDQ0LDkpCisgIENBU0UoNTUsMTApCisgIENBU0UoNjYsLTEpCisgIENBU0UoNzcsOTkpCisgIENBU0UoNjY2LDApCisjIGVsc2UKKyAgICBjYXNlIDE6CisgICAgICByZXR1cm4gMzsKKyAgICBjYXNlIDM6CisgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIDU6CisgICAgICByZXR1cm4gODsKKyAgICBjYXNlIDc6CisgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIDMzOgorICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSA0NDoKKyAgICAgIHJldHVybiA5OworICAgIGNhc2UgNTU6CisgICAgICByZXR1cm4gMTA7CisgICAgY2FzZSA2NjoKKyAgICAgIHJldHVybiAtMTsKKyAgICBjYXNlIDc3OgorICAgICAgcmV0dXJuIDk5OworICAgIGNhc2UgNjY2OgorICAgICAgcmV0dXJuIDA7CisjIGVuZGlmCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0KKyAgcmV0dXJuIDQ3MTE7CisKKyNlbHNlCisgICBpZiAoY29kZSA9PSAxKQorCXJldHVybiAzOworICBlbHNlIGlmIChjb2RlID09IDMpCisJcmV0dXJuIDI7CisgIGVsc2UgaWYgKGNvZGUgPT0gNSkKKwlyZXR1cm4gODsKKyAgZWxzZSBpZiAoY29kZSA9PSA3KQorCXJldHVybiAxOworICBlbHNlIGlmIChjb2RlID09IDMzKQorCXJldHVybiA0OworICBlbHNlIGlmIChjb2RlID09IDQ0KQorCXJldHVybiA5OworICBlbHNlIGlmIChjb2RlID09IDU1KQorCXJldHVybiAxMDsKKyAgZWxzZSBpZiAoY29kZSA9PSA2NikKKwlyZXR1cm4gLTE7CisgIGVsc2UgaWYgKGNvZGUgPT0gNzcpCisJcmV0dXJuIDk5OworICBlbHNlIGlmIChjb2RlID09IDY2NikKKwlyZXR1cm4gMDsKKyAgZWxzZQorCXJldHVybiA0NzExOworI2VuZGlmCit9CisKKworLS1BaGhsTGJvTGRrdWdXVTRTLS0KKwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMC8yNzAtc29mdC1mbG9hdC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjAvMjcwLXNvZnQtZmxvYXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI4N2JmYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjAvMjcwLXNvZnQtZmxvYXQucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorZGlmZiAtdU5wciBnY2MtNC4yLjFfb3JpZy9nY2MvY29uZmlnL3JzNjAwMC9kYXJ3aW4tbGRvdWJsZS5jIGdjYy00LjIuMS9nY2MvY29uZmlnL3JzNjAwMC9kYXJ3aW4tbGRvdWJsZS5jCistLS0gZ2NjLTQuMi4xX29yaWcvZ2NjL2NvbmZpZy9yczYwMDAvZGFyd2luLWxkb3VibGUuYwkyMDA3LTAzLTA1IDExOjU0OjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGdjYy00LjIuMS9nY2MvY29uZmlnL3JzNjAwMC9kYXJ3aW4tbGRvdWJsZS5jCTIwMDgtMDEtMzEgMTc6NTE6MjQuMDAwMDAwMDAwIC0wNTAwCitAQCAtNzAsNiArNzAsOCBAQCBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsCisgICAgYnV0IEdDQyBjdXJyZW50bHkgZ2VuZXJhdGVzIHBvb3IgY29kZSB3aGVuIGEgdW5pb24gaXMgdXNlZCB0byB0dXJuCisgICAgYSBsb25nIGRvdWJsZSBpbnRvIGEgcGFpciBvZiBkb3VibGVzLiAgKi8KKyAKKysjaWYgZGVmaW5lZCAoX1NPRlRfRkxPQVQpICYmIGRlZmluZWQgKF9fTE9OR19ET1VCTEVfMTI4X18pCisrCisgbG9uZyBkb3VibGUgX19nY2NfcWFkZCAoZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKTsKKyBsb25nIGRvdWJsZSBfX2djY19xc3ViIChkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpOworIGxvbmcgZG91YmxlIF9fZ2NjX3FtdWwgKGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSk7CitAQCAtMjE5LDggKzIyMSw2IEBAIF9fZ2NjX3FkaXYgKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMKKyAgIHJldHVybiB6LmxkdmFsOworIH0KKyAKKy0jaWYgZGVmaW5lZCAoX1NPRlRfRkxPQVQpICYmIGRlZmluZWQgKF9fTE9OR19ET1VCTEVfMTI4X18pCistCisgbG9uZyBkb3VibGUgX19nY2NfcW5lZyAoZG91YmxlLCBkb3VibGUpOworIGludCBfX2djY19xZXEgKGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSk7CisgaW50IF9fZ2NjX3FuZSAoZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKTsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjAvMjgwLWFscGhhLXNpZ25hbF9oLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMC8yODAtYWxwaGEtc2lnbmFsX2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdlMTc5NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjAvMjgwLWFscGhhLXNpZ25hbF9oLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKKy0tLSBnY2MtNC4yLjEtc3RvY2svZ2NjL2NvbmZpZy9hbHBoYS9saW51eC11bndpbmQuaAkyMDA1LTA2LTI0IDIwOjIyOjQxLjAwMDAwMDAwMCAtMDUwMAorKysrIGdjYy00LjIuMS9nY2MvY29uZmlnL2FscGhhL2xpbnV4LXVud2luZC5oCTIwMDctMDktMDEgMjA6MjE6MzQuMDAwMDAwMDAwIC0wNTAwCitAQCAtMjksNiArMjksOSBAQCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgLyogRG8gY29kZSByZWFkaW5nIHRvIGlkZW50aWZ5IGEgc2lnbmFsIGZyYW1lLCBhbmQgc2V0IHRoZSBmcmFtZQorICAgIHN0YXRlIGRhdGEgYXBwcm9wcmlhdGVseS4gIFNlZSB1bndpbmQtZHcyLmMgZm9yIHRoZSBzdHJ1Y3RzLiAgKi8KKyAKKysvKiBEb24ndCB1c2UgdGhpcyBpZiBpbmhpYml0X2xpYmMgaXMgc2V0CisrICAgVGhlIGJ1aWxkIGZvciB0aGlzIHRhcmdldCB3aWxsIGZhaWwgdHJ5aW5nIHRvIGluY2x1ZGUgbWlzc2luZyBoZWFkZXJzICovCisrI2lmbmRlZiBpbmhpYml0X2xpYmMKKyAjaW5jbHVkZSA8c2lnbmFsLmg+CisgI2luY2x1ZGUgPHN5cy91Y29udGV4dC5oPgorIAorQEAgLTgwLDMgKzgzLDQgQEAgYWxwaGFfZmFsbGJhY2tfZnJhbWVfc3RhdGUgKHN0cnVjdCBfVW53aQorICAgZnMtPnJldGFkZHJfY29sdW1uID0gNjQ7CisgICByZXR1cm4gX1VSQ19OT19SRUFTT047CisgfQorKyNlbmRpZiAvKiBpbmhpYml0X2xpYmMgKi8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjAvMjkwLXNoLXdpdGhvdXQtaGVhZGVycy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjAvMjkwLXNoLXdpdGhvdXQtaGVhZGVycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2RkYjY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMC8yOTAtc2gtd2l0aG91dC1oZWFkZXJzLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK09uIDIwMDgxMDExLCBLaGVtIFJBSiB3cml0ZXM6CisgWW91IGhhdmUgdG8gYmFyIGdjYyB0cnlpbmcgdG8gYnVpbGQgdW53aW5kaW5nIGF0IHN0YWdlIDEuIFRyeSB0aGUKKyBhdHRhY2hlZCBwYXRjaCBhbmQgc2VlIGlmIGl0IGhlbHBzLgorCisgZ2NjL2NvbmZpZy9zaC9saW51eC11bndpbmQuaCB8ICAgIDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitJbmRleDogZ2NjLTRfMi1icmFuY2gvZ2NjL2NvbmZpZy9zaC9saW51eC11bndpbmQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00XzItYnJhbmNoLm9yaWcvZ2NjL2NvbmZpZy9zaC9saW51eC11bndpbmQuaAkyMDA4LTA3LTAxIDE3OjI0OjQwLjAwMDAwMDAwMCAtMDcwMAorKysrIGdjYy00XzItYnJhbmNoL2djYy9jb25maWcvc2gvbGludXgtdW53aW5kLmgJMjAwOC0wNy0wMSAxNzoyNTo0Ny4wMDAwMDAwMDAgLTA3MDAKK0BAIC0yNiw2ICsyNiw4IEBAIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ08KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAKKysjaWZuZGVmIGluaGliaXRfbGliYworKworIC8qIERvIGNvZGUgcmVhZGluZyB0byBpZGVudGlmeSBhIHNpZ25hbCBmcmFtZSwgYW5kIHNldCB0aGUgZnJhbWUKKyAgICBzdGF0ZSBkYXRhIGFwcHJvcHJpYXRlbHkuICBTZWUgdW53aW5kLWR3Mi5jIGZvciB0aGUgc3RydWN0cy4gICovCisgCitAQCAtMjUxLDMgKzI1Myw0IEBAIHNoX2ZhbGxiYWNrX2ZyYW1lX3N0YXRlIChzdHJ1Y3QgX1Vud2luZF8KKyAgIHJldHVybiBfVVJDX05PX1JFQVNPTjsKKyB9CisgI2VuZGlmIC8qIGRlZmluZWQgKF9fU0g1X18pICovCisrI2VuZGlmIC8qIGlmbmRlZiBpbmhpYml0X2xpYmMgKi8KKwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMC8zMDAtbGliZ2NjX2VoLmEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4wLzMwMC1saWJnY2NfZWguYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDlkYjNhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMC8zMDAtbGliZ2NjX2VoLmEucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorVmFtcGlyaXNlZCBmcm9tOgorICBodHRwOi8vbGFuZGxleS5uZXQvaGcvYWJvcmlnaW5hbC9maWxlLzdlMDc0N2E2NjVhYi9zb3VyY2VzL3BhdGNoZXMvZ2NjLWNvcmUtbGliZ2NjZWgucGF0Y2gKKworZGlmZiAtZHVyTiBnY2MtNC4yLjIub3JpZy9nY2MvbWtsaWJnY2MuaW4gZ2NjLTQuMi4yL2djYy9ta2xpYmdjYy5pbgorLS0tIGdjYy00LjIuMi5vcmlnL2djYy9ta2xpYmdjYy5pbgkyMDA2LTA3LTA0IDIyOjIwOjAxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMi9nY2MvbWtsaWJnY2MuaW4JMjAxMS0wOC0zMSAxNjoyNDowMy42NzQ2OTAwMTYgKzAyMDAKK0BAIC0yMjMsOCArMjIzLDggQEAKKyAgIGlmIFsgIiRMSUJVTldJTkQiIF07IHRoZW4KKyAgICAgbGlidW53aW5kX2E9JGRpci9saWJ1bndpbmQuYQorICAgZmkKKysgIGxpYmdjY19laF9hPSRkaXIvbGliZ2NjX2VoLmEKKyAgIGlmIFsgIiRTSExJQl9MSU5LIiBdOyB0aGVuCistICAgIGxpYmdjY19laF9hPSRkaXIvbGliZ2NjX2VoLmEKKyAgICAgbGliZ2NjX3Nfc289JGRpci9saWJnY2NfcyR7U0hMSUJfRVhUfQorICAgICBpZiBbICIkTElCVU5XSU5EIiBdOyB0aGVuCisgICAgICAgbGlidW53aW5kX3NvPSRkaXIvbGlidW53aW5kJHtTSExJQl9FWFR9CitAQCAtODg5LDExICs4ODksMTEgQEAKKyAgIGVjaG8gJwljaG1vZCA2NDQnICAke2xkaXJ9L2xpYmdjb3YuYQorICAgZWNobyAnCSQoUkFOTElCX0ZPUl9UQVJHRVQpJyAke2xkaXJ9L2xpYmdjb3YuYQorIAorLSAgaWYgWyAiJFNITElCX0xJTksiIF07IHRoZW4KKy0gICAgZWNobyAnCSQoSU5TVEFMTF9EQVRBKScgJHtkaXJ9L2xpYmdjY19laC5hICR7bGRpcn0vCistICAgIGVjaG8gJwljaG1vZCA2NDQnICAke2xkaXJ9L2xpYmdjY19laC5hCistICAgIGVjaG8gJwkkKFJBTkxJQl9GT1JfVEFSR0VUKScgJHtsZGlyfS9saWJnY2NfZWguYQorKyAgZWNobyAnCSQoSU5TVEFMTF9EQVRBKScgJHtkaXJ9L2xpYmdjY19laC5hICR7bGRpcn0vCisrICBlY2hvICcJY2htb2QgNjQ0JyAgJHtsZGlyfS9saWJnY2NfZWguYQorKyAgZWNobyAnCSQoUkFOTElCX0ZPUl9UQVJHRVQpJyAke2xkaXJ9L2xpYmdjY19laC5hCisgCisrICBpZiBbICIkU0hMSUJfTElOSyIgXTsgdGhlbgorICAgICBzaGxpYl9zbGliZGlyX3F1YWw9CisgICAgIG9zX211bHRpbGliX2Rpcj1gJEdDQ19GT1JfVEFSR0VUICRmbGFncyAtLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeWAKKyAgICAgaWYgWyAiJG9zX211bHRpbGliX2RpciIgIT0gLiBdOyB0aGVuCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4xLzEwMC11Y2xpYmMtY29uZi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMTAwLXVjbGliYy1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNjFkYWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4xLzEwMC11Y2xpYmMtY29uZi5wYXRjaApAQCAtMCwwICsxLDIxNiBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9ib2VobS1nYy9jb25maWd1cmUgZ2NjLTQuMi4xL2JvZWhtLWdjL2NvbmZpZ3VyZQorLS0tIGdjYy00LjIuMS5vcmlnL2JvZWhtLWdjL2NvbmZpZ3VyZQkyMDA3LTA3LTE5IDE2OjMzOjU2LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9ib2VobS1nYy9jb25maWd1cmUJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC00MzIzLDcgKzQzMjMsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoIGdjYy00LjIuMS9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKKy0tLSBnY2MtNC4yLjEub3JpZy9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gJMjAwNS0wOC0xNSAwMjo0MTozMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCTIwMDctMDgtMDMgMjA6Mjk6MjIuMDAwMDAwMDAwICswMjAwCitAQCAtMTA1LDYgKzEwNSwxMCBAQAorICB0aGVuCisgICBtYWtlIGFsbC1nZGIgYWxsLWRlamFnbnUgYWxsLWxkIHx8IGV4aXQgMQorICAgbWFrZSBpbnN0YWxsLWdkYiBpbnN0YWxsLWRlamFnbnUgaW5zdGFsbC1sZCB8fCBleGl0IDEKKytlbGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgLWEgJEhfUkVBTF9UQVJHRVQgPSBpNjg2LXBjLWxpbnV4LXVjbGliYyBdCisrIHRoZW4KKysgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCisrICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQorIGVsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCBdIDsgdGhlbgorICAgbWFrZSBib290c3RyYXAgfHwgZXhpdCAxCisgICBtYWtlIGluc3RhbGwgfHwgZXhpdCAxCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2djYy9jb25maWcvY3Jpcy9saW51eC5oIGdjYy00LjIuMS9nY2MvY29uZmlnL2NyaXMvbGludXguaAorLS0tIGdjYy00LjIuMS5vcmlnL2djYy9jb25maWcvY3Jpcy9saW51eC5oCTIwMDYtMDItMTggMTI6MTI6NTEuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMi4xL2djYy9jb25maWcvY3Jpcy9saW51eC5oCTIwMDctMDgtMDMgMjA6Mjk6MjIuMDAwMDAwMDAwICswMjAwCitAQCAtNzQsNyArNzQsMTEgQEAKKyAjZGVmaW5lIENSSVNfREVGQVVMVF9DUFVfVkVSU0lPTiBDUklTX0NQVV9ORworIAorICN1bmRlZiBDUklTX1NVQlRBUkdFVF9WRVJTSU9OCistI2RlZmluZSBDUklTX1NVQlRBUkdFVF9WRVJTSU9OICIgLSBjcmlzLWF4aXMtbGludXgtZ251IgorKyNpZiBVQ0xJQkNfREVGQVVMVAorKyMgZGVmaW5lIENSSVNfU1VCVEFSR0VUX1ZFUlNJT04gIiAtIGNyaXMtYXhpcy1saW51eC11Y2xpYmMiCisrI2Vsc2UKKysjIGRlZmluZSBDUklTX1NVQlRBUkdFVF9WRVJTSU9OICIgLSBjcmlzLWF4aXMtbGludXgtZ251IgorKyNlbmRpZgorIAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQuc28uMSIKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGliZmZpL2NvbmZpZ3VyZSBnY2MtNC4yLjEvbGliZmZpL2NvbmZpZ3VyZQorLS0tIGdjYy00LjIuMS5vcmlnL2xpYmZmaS9jb25maWd1cmUJMjAwNy0wNy0xOSAxNjozMzo1Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGliZmZpL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjI5OjIyLjAwMDAwMDAwMCArMDIwMAorQEAgLTM0NjAsNyArMzQ2MCw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJnZm9ydHJhbi9jb25maWd1cmUgZ2NjLTQuMi4xL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQorLS0tIGdjYy00LjIuMS5vcmlnL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQkyMDA3LTA3LTE5IDE2OjMzOjU2LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJnZm9ydHJhbi9jb25maWd1cmUJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zNzIxLDcgKzM3MjEsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGliZ29tcC9jb25maWd1cmUgZ2NjLTQuMi4xL2xpYmdvbXAvY29uZmlndXJlCistLS0gZ2NjLTQuMi4xLm9yaWcvbGliZ29tcC9jb25maWd1cmUJMjAwNy0wNy0xOSAxNjozMzo1Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGliZ29tcC9jb25maWd1cmUJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zODkzLDcgKzM4OTMsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGliamF2YS9jbGFzc3BhdGgvY29uZmlndXJlIGdjYy00LjIuMS9saWJqYXZhL2NsYXNzcGF0aC9jb25maWd1cmUKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJqYXZhL2NsYXNzcGF0aC9jb25maWd1cmUJMjAwNy0wMS0xNyAxOToxMDoyNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbGliamF2YS9jbGFzc3BhdGgvY29uZmlndXJlCTIwMDctMDgtMDMgMjA6Mjk6MjIuMDAwMDAwMDAwICswMjAwCitAQCAtNTMwNyw3ICs1MzA3LDcgQEAKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgqKQorICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgIDs7CisgCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnIGdjYy00LjIuMS9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZworLS0tIGdjYy00LjIuMS5vcmlnL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCTIwMDYtMDgtMDcgMjI6Mzc6NTAuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCTIwMDctMDgtMDMgMjA6Mjk6MjIuMDAwMDAwMDAwICswMjAwCitAQCAtNjAzLDcgKzYwMyw3IEBACisgCisgIyBUcmFuc2Zvcm0gbGludXgqIHRvICotKi1saW51eC1nbnUqLCB0byBzdXBwb3J0IG9sZCBjb25maWd1cmUgc2NyaXB0cy4KKyBjYXNlICRob3N0X29zIGluCistbGludXgtZ251KikgOzsKKytsaW51eC1nbnUqfGxpbnV4LXVjbGliYyopIDs7CisgbGludXgqKSBob3N0PWBlY2hvICRob3N0IHwgc2VkICdzL15cKC4qLS4qLWxpbnV4XClcKC4qXCkkL1wxLWdudVwyLydgCisgZXNhYworIAorQEAgLTEyNTEsNyArMTI1MSw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIHZlcnNpb25fdHlwZT1saW51eAorICAgbmVlZF9saWJfcHJlZml4PW5vCisgICBuZWVkX3ZlcnNpb249bm8KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGliamF2YS9jb25maWd1cmUgZ2NjLTQuMi4xL2xpYmphdmEvY29uZmlndXJlCistLS0gZ2NjLTQuMi4xLm9yaWcvbGliamF2YS9jb25maWd1cmUJMjAwNy0wNy0xOSAxNjozMzo1Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGliamF2YS9jb25maWd1cmUJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC01NDI0LDcgKzU0MjQsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlibXVkZmxhcC9jb25maWd1cmUgZ2NjLTQuMi4xL2xpYm11ZGZsYXAvY29uZmlndXJlCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlibXVkZmxhcC9jb25maWd1cmUJMjAwNi0xMi0wNCAxMjoxMzowNy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbGlibXVkZmxhcC9jb25maWd1cmUJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC01Mzk0LDcgKzUzOTQsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlib2JqYy9jb25maWd1cmUgZ2NjLTQuMi4xL2xpYm9iamMvY29uZmlndXJlCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlib2JqYy9jb25maWd1cmUJMjAwNi0xMC0xNSAwOTo0Mjo1Ny4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlib2JqYy9jb25maWd1cmUJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMzE0LDcgKzMzMTQsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3NwL2NvbmZpZ3VyZSBnY2MtNC4yLjEvbGlic3NwL2NvbmZpZ3VyZQorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnNzcC9jb25maWd1cmUJMjAwNi0xMC0xNSAwOTo0Mjo1Ny4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3NwL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjI5OjIyLjAwMDAwMDAwMCArMDIwMAorQEAgLTQ0ODAsNyArNDQ4MCw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlndXJlIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlndXJlCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQkyMDA3LTA2LTI5IDAxOjAyOjA1LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlndXJlCTIwMDctMDgtMDMgMjA6Mjk6MjIuMDAwMDAwMDAwICswMjAwCitAQCAtNDI4Myw3ICs0MjgzLDcgQEAKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgqKQorICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgIDs7CisgCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnRvb2wubTQgZ2NjLTQuMi4xL2xpYnRvb2wubTQKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJ0b29sLm00CTIwMDUtMDctMTYgMDQ6MzA6NTMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnRvb2wubTQJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC03MzksNyArNzM5LDcgQEAKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgqKQorICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgIDs7CisgCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2x0Y29uZmlnIGdjYy00LjIuMS9sdGNvbmZpZworLS0tIGdjYy00LjIuMS5vcmlnL2x0Y29uZmlnCTIwMDctMDItMTQgMTg6MDg6MzUuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMi4xL2x0Y29uZmlnCTIwMDctMDgtMDMgMjA6Mjk6MjIuMDAwMDAwMDAwICswMjAwCitAQCAtNjAzLDcgKzYwMyw3IEBACisgCisgIyBUcmFuc2Zvcm0gbGludXgqIHRvICotKi1saW51eC1nbnUqLCB0byBzdXBwb3J0IG9sZCBjb25maWd1cmUgc2NyaXB0cy4KKyBjYXNlICRob3N0X29zIGluCistbGludXgtZ251KikgOzsKKytsaW51eC1nbnUqfGxpbnV4LXVjbGliYyopIDs7CisgbGludXgqKSBob3N0PWBlY2hvICRob3N0IHwgc2VkICdzL15cKC4qLS4qLWxpbnV4XClcKC4qXCkkL1wxLWdudVwyLydgCisgZXNhYworIAorQEAgLTEyNTEsNyArMTI1MSw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIHZlcnNpb25fdHlwZT1saW51eAorICAgbmVlZF9saWJfcHJlZml4PW5vCisgICBuZWVkX3ZlcnNpb249bm8KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvemxpYi9jb25maWd1cmUgZ2NjLTQuMi4xL3psaWIvY29uZmlndXJlCistLS0gZ2NjLTQuMi4xLm9yaWcvemxpYi9jb25maWd1cmUJMjAwNy0wMS0xNyAxOToxMDoyNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvemxpYi9jb25maWd1cmUJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zNDI5LDcgKzM0MjksNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMTEwLXVjbGliYy1jb25mLW5vdXBzdHJlYW0ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4xLzExMC11Y2xpYmMtY29uZi1ub3Vwc3RyZWFtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMjM5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4xLzExMC11Y2xpYmMtY29uZi1ub3Vwc3RyZWFtLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvZ2NjL2NvbmZpZy5nY2MgZ2NjLTQuMi4xL2djYy9jb25maWcuZ2NjCistLS0gZ2NjLTQuMi4xLm9yaWcvZ2NjL2NvbmZpZy5nY2MJMjAwNy0wMi0wMyAwNjoyNToyMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvZ2NjL2NvbmZpZy5nY2MJMjAwNy0wOC0wMyAyMDoyOTo1Mi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xOTY0LDcgKzE5NjQsNyBAQAorICAgICAgICAgOzsKKyBzaC0qLWVsZiogfCBzaFsxMjM0NmxdKi0qLWVsZiogfCBzaCotKi1rYW9zKiB8IFwKKyBzaC0qLXN5bWJpYW5lbGYqIHwgc2hbMTIzNDZsXSotKi1zeW1iaWFuZWxmKiB8IFwKKy0gIHNoLSotbGludXgqIHwgc2hbMzQ2bGJlXSotKi1saW51eCogfCBcCisrICBzaCotKi1saW51eCogfCBzaFszNDZsYmVdKi0qLWxpbnV4KiB8IFwKKyAgIHNoLSotbmV0YnNkZWxmKiB8IHNobCotKi1uZXRic2RlbGYqIHwgc2g1LSotbmV0YnNkKiB8IHNoNWwqLSotbmV0YnNkKiB8IFwKKyAgICBzaDY0LSotbmV0YnNkKiB8IHNoNjRsKi0qLW5ldGJzZCopCisgCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gc2gvdC1zaCBzaC90LWVsZiIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMTIwLXVjbGliYy1sb2NhbGUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4xLzEyMC11Y2xpYmMtbG9jYWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5OGM1MDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4xLzEyMC11Y2xpYmMtbG9jYWxlLnBhdGNoCkBAIC0wLDAgKzEsMjgwNiBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00IGdjYy00LjIuMS9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAkyMDA3LTA2LTI5IDAxOjAyOjA1LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMTMzNCw3ICsxMzM0LDcgQEAKKyBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKKyAgIEdMSUJDWFhfRU5BQkxFKGNsb2NhbGUsYXV0byxbQDw6QD1NT0RFTEA6PkBdLAorICAgICBbdXNlIE1PREVMIGZvciB0YXJnZXQgbG9jYWxlIHBhY2thZ2VdLAorLSAgICBbcGVybWl0IGdlbmVyaWN8Z251fGllZWVfMTAwMy4xLTIwMDF8eWVzfG5vfGF1dG9dKQorKyAgICBbcGVybWl0IGdlbmVyaWN8Z251fGllZWVfMTAwMy4xLTIwMDF8dWNsaWJjfHllc3xub3xhdXRvXSkKKyAKKyAgICMgRGVhbCB3aXRoIGdldHRleHQgaXNzdWVzLiAgRGVmYXVsdCB0byBub3QgdXNpbmcgaXQgKD1ubykgdW50aWwgd2UgZGV0ZWN0CisgICAjIHN1cHBvcnQgZm9yIGl0IGxhdGVyLiAgTGV0IHRoZSB1c2VyIHR1cm4gaXQgb2ZmIHZpYSAtLWUvZCwgYnV0IGxldCB0aGF0CitAQCAtMTM1NSw2ICsxMzU1LDkgQEAKKyAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCisgICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgorICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgorKyAgICAgICotdWNsaWJjKikKKysgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCisrICAgICAgICA7OworICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQorICAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz1nbnUJCisgICAgICAgICA7OworQEAgLTE1MjYsNiArMTUyOSw0MCBAQAorICAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy90aW1lX21lbWJlcnMuY2MKKyAgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgICAgICAgOzsKKysgICAgdWNsaWJjKQorKyAgICAgIEFDX01TR19SRVNVTFQodWNsaWJjKQorKworKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKKysgICAgICAjIGxhbmd1YWdlcy4KKysgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAorKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKKysKKysgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgorKyAgICAgIEFDX0NIRUNLX1BST0coY2hlY2tfbXNnZm10LCBtc2dmbXQsIHllcywgbm8pCisrICAgICAgaWYgdGVzdCB4IiRjaGVja19tc2dmbXQiID0geCJ5ZXMiICYmIHRlc3QgeCIkZW5hYmxlX25scyIgPSB4InllcyI7IHRoZW4KKysgICAgICAgIFVTRV9OTFM9eWVzCisrICAgICAgZmkKKysgICAgICAjIEV4cG9ydCB0aGUgYnVpbGQgb2JqZWN0cy4KKysgICAgICBmb3IgbGluZyBpbiAkQUxMX0xJTkdVQVM7IGRvIFwKKysgICAgICAgIGdsaWJjeHhfTU9GSUxFUz0iJGdsaWJjeHhfTU9GSUxFUyAkbGluZy5tbyI7IFwKKysgICAgICAgIGdsaWJjeHhfUE9GSUxFUz0iJGdsaWJjeHhfUE9GSUxFUyAkbGluZy5wbyI7IFwKKysgICAgICBkb25lCisrICAgICAgQUNfU1VCU1QoZ2xpYmN4eF9NT0ZJTEVTKQorKyAgICAgIEFDX1NVQlNUKGdsaWJjeHhfUE9GSUxFUykKKysKKysgICAgICBDTE9DQUxFX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysgICAgICBDQ09ERUNWVF9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKysgICAgICBDQ09MTEFURV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysgICAgICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKyAgICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysgICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrICAgICAgOzsKKyAgIGVzYWMKKyAKKyAgICMgVGhpcyBpcyB3aGVyZSB0aGUgdGVzdHN1aXRlIGxvb2tzIGZvciBsb2NhbGUgY2F0YWxvZ3MsIHVzaW5nIHRoZQorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTYwIEBACisrLy8gV3JhcHBlciBmb3IgdW5kZXJseWluZyBDLWxhbmd1YWdlIGxvY2FsaXphdGlvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjggIFN0YW5kYXJkIGxvY2FsZSBjYXRlZ29yaWVzLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8Y2Vycm5vPiAgLy8gRm9yIGVycm5vCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8c3RkZXhjZXB0PgorKyNpbmNsdWRlIDxsYW5naW5mby5oPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19zdHJ0b2xfbChTLCBFLCBCLCBMKSAgICAgIHN0cnRvbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b3VsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvdWwoKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG9sbF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b2xsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvdWxsX2woUywgRSwgQiwgTCkgICAgc3RydG91bGwoKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG9mX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2YoKFMpLCAoRSkpCisrI2RlZmluZSBfX3N0cnRvZF9sKFMsIEUsIEwpICAgICAgICAgc3RydG9kKChTKSwgKEUpKQorKyNkZWZpbmUgX19zdHJ0b2xkX2woUywgRSwgTCkgICAgICAgIHN0cnRvbGQoKFMpLCAoRSkpCisrI3dhcm5pbmcgc2hvdWxkIGR1bW15IF9fbmV3bG9jYWxlIGNoZWNrIGZvciBDfFBPU0lYID8KKysjZGVmaW5lIF9fbmV3bG9jYWxlKGEsIGIsIGMpICAgICAgICBOVUxMCisrI2RlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCisrI2RlZmluZSBfX2R1cGxvY2FsZShhKSAgICAgICAgICAgICAgX19jX2xvY2FsZSgpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZCAKKyt7CisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBmbG9hdCYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2Y7CisrCSAgZWxzZQorKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2Q7CisrCSAgZWxzZQorKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgbG9uZyBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgbG9uZyBkb3VibGUgX19sZCA9IF9fc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fbGQ7CisrCSAgZWxzZQorKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisrCX0KKysgICAgfQorKworKyAgdm9pZAorKyAgbG9jYWxlOjpmYWNldDo6X1NfY3JlYXRlX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYywgY29uc3QgY2hhciogX19zLCAKKysJCQkJICAgIF9fY19sb2NhbGUgX19vbGQpCisrICB7CisrICAgIF9fY2xvYyA9IF9fbmV3bG9jYWxlKDEgPDwgTENfQUxMLCBfX3MsIF9fb2xkKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBpZiAoIV9fY2xvYykKKysgICAgICB7CisrCS8vIFRoaXMgbmFtZWQgbG9jYWxlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgT1MuCisrCV9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oImxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZSAiCisrCQkJICAgICAgIm5hbWUgbm90IHZhbGlkIikpOworKyAgICAgIH0KKysjZW5kaWYKKysgIH0KKysgIAorKyAgdm9pZAorKyAgbG9jYWxlOjpmYWNldDo6X1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICB7CisrICAgIGlmIChfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCisrICAgICAgX19mcmVlbG9jYWxlKF9fY2xvYyk7IAorKyAgfQorKworKyAgX19jX2xvY2FsZQorKyAgbG9jYWxlOjpmYWNldDo6X1NfY2xvbmVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorKyAgeyByZXR1cm4gX19kdXBsb2NhbGUoX19jbG9jKTsgfQorK30gLy8gbmFtZXNwYWNlIHN0ZAorKworK25hbWVzcGFjZSBfX2dudV9jeHgKKyt7CisrICBjb25zdCBjaGFyKiBjb25zdCBjYXRlZ29yeV9uYW1lc1s2ICsgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVNdID0KKysgICAgeworKyAgICAgICJMQ19DVFlQRSIsIAorKyAgICAgICJMQ19OVU1FUklDIiwKKysgICAgICAiTENfVElNRSIsIAorKyAgICAgICJMQ19DT0xMQVRFIiwgCisrICAgICAgIkxDX01PTkVUQVJZIiwKKysgICAgICAiTENfTUVTU0FHRVMiLCAKKysjaWYgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgIT0gMAorKyAgICAgICJMQ19QQVBFUiIsIAorKyAgICAgICJMQ19OQU1FIiwgCisrICAgICAgIkxDX0FERFJFU1MiLAorKyAgICAgICJMQ19URUxFUEhPTkUiLCAKKysgICAgICAiTENfTUVBU1VSRU1FTlQiLCAKKysgICAgICAiTENfSURFTlRJRklDQVRJT04iIAorKyNlbmRpZgorKyAgICB9OworK30KKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7CisrfSAgLy8gbmFtZXNwYWNlIHN0ZAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxMTcgQEAKKysvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpZm5kZWYgX0NfTE9DQUxFX0gKKysjZGVmaW5lIF9DX0xPQ0FMRV9IIDEKKysKKysjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisrCisrI2luY2x1ZGUgPGNzdHJpbmc+ICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzdHJsZW4KKysjaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnNucHJpbnRmIG9yIHN0ZDo6c3ByaW50ZgorKyNpbmNsdWRlIDxjbG9jYWxlPgorKyNpbmNsdWRlIDxsYW5naW5mby5oPgkJLy8gRm9yIGNvZGVjdnQKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysjaW5jbHVkZSA8aWNvbnYuaD4JCS8vIEZvciBjb2RlY3Z0IHVzaW5nIGljb252LCBpY29udl90CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI2luY2x1ZGUgPGxpYmludGwuaD4gCQkvLyBGb3IgbWVzc2FnZXMKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB3aGF0IGlzIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSBmb3IKKysjZW5kaWYKKysjZGVmaW5lIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSAxCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IGNhdGVnb3JpZXMKKysjZW5kaWYKKysvLyAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDYKKysjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDAKKysgCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKytuYW1lc3BhY2UgX19nbnVfY3h4CisreworKyAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworK30KKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICB0eXBlZGVmIF9fbG9jYWxlX3QJCV9fY19sb2NhbGU7CisrI2Vsc2UKKysgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7CisrI2VuZGlmCisrCisrICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBfVHYgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCisrICAvLyBzdHJpbmcuICBJZiBzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCisrICAvLyB0aGUgdW5zYWZlIHNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAorKyAgLy8gYmUgYXZvaWRlZC4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KKysgICAgaW50CisrICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsIAorKwkJICAgICBjb25zdCBpbnQgX19zaXplIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSksCisrCQkgICAgIGNvbnN0IGNoYXIqIF9fZm10LAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKwkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX3ByZWMpCisrICAgIHsKKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjKQorKyAgICB7CisrIyBpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBjaGFyKiBfX29sZCA9IHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX29sZCkgKyAxXTsKKysgICAgICBzdGQ6OnN0cmNweShfX3NhdiwgX19vbGQpOworKyAgICAgIHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgIkMiKTsKKysjIGVuZGlmCisrI2VuZGlmCisrCisrICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjpzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19wcmVjLCBfX3YpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKyAgICAgIF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19vbGQpOworKyNlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrICAgICAgZGVsZXRlIFtdIF9fc2F2OworKyNlbmRpZgorKyAgICAgIHJldHVybiBfX3JldDsKKysgICAgfQorK30KKysKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDYzIEBACisrLy8gUHJvdG90eXBlcyBmb3IgR0xJQkMgdGhyZWFkIGxvY2FsZSBfXy1wcmVmaXhlZCBmdW5jdGlvbnMgLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8gV3JpdHRlbiBieSBKYWt1YiBKZWxpbmVrIDxqYWt1YkByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorKyNpbmNsdWRlIDxjbG9jYWxlPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGNsZWFuIHRoaXMgdXAKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisrZXh0ZXJuICJDIiBfX3R5cGVvZihubF9sYW5naW5mb19sKSBfX25sX2xhbmdpbmZvX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJjb2xsX2wpIF9fc3RyY29sbF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RyZnRpbWVfbCkgX19zdHJmdGltZV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9kX2wpIF9fc3RydG9kX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2ZfbCkgX19zdHJ0b2ZfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvbGRfbCkgX19zdHJ0b2xkX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ4ZnJtX2wpIF9fc3RyeGZybV9sOworK2V4dGVybiAiQyIgX190eXBlb2YobmV3bG9jYWxlKSBfX25ld2xvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKGZyZWVsb2NhbGUpIF9fZnJlZWxvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKGR1cGxvY2FsZSkgX19kdXBsb2NhbGU7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorK2V4dGVybiAiQyIgX190eXBlb2YoaXN3Y3R5cGVfbCkgX19pc3djdHlwZV9sOworK2V4dGVybiAiQyIgX190eXBlb2YodG93bG93ZXJfbCkgX190b3dsb3dlcl9sOworK2V4dGVybiAiQyIgX190eXBlb2YodG93dXBwZXJfbCkgX190b3d1cHBlcl9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzY29sbF9sKSBfX3djc2NvbGxfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc2Z0aW1lX2wpIF9fd2NzZnRpbWVfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc3hmcm1fbCkgX193Y3N4ZnJtX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3R5cGVfbCkgX193Y3R5cGVfbDsKKysjZW5kaWYgCisrCisrI2VuZGlmIC8vIEdMSUJDIDIuMyBhbmQgbGF0ZXIKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwzMDYgQEAKKysvLyBzdGQ6OmNvZGVjdnQgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuNSAtIFRlbXBsYXRlIGNsYXNzIGNvZGVjdnQKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gU3BlY2lhbGl6YXRpb25zLgorKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgY29kZWN2dF9iYXNlOjpyZXN1bHQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwgCisrCSBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKysJIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCisrCSBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKKysgIHsKKysgICAgcmVzdWx0IF9fcmV0ID0gb2s7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyB3Y3NucnRvbWJzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIGZhbGwgYmFjayB0byB3Y3J0b21iIGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiB3Y3NucnRvbWJzIGlzIGEgR05VIGV4dGVuc2lvbgorKyAgICBmb3IgKF9fZnJvbV9uZXh0ID0gX19mcm9tLCBfX3RvX25leHQgPSBfX3RvOworKwkgX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fdG9fbmV4dCA8IF9fdG9fZW5kCisrCSAmJiBfX3JldCA9PSBvazspCisrICAgICAgeworKwljb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZCA9IHdtZW1jaHIoX19mcm9tX25leHQsIEwnXDAnLAorKwkJCQkJCSAgICAgIF9fZnJvbV9lbmQgLSBfX2Zyb21fbmV4dCk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKKysKKysJX19mcm9tID0gX19mcm9tX25leHQ7CisrCWNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3NucnRvbWJzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LAorKwkJCQkJIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb21fbmV4dCwKKysJCQkJCSBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyB3Y3J0b21iLgorKwkgICAgZm9yICg7IF9fZnJvbSA8IF9fZnJvbV9uZXh0OyArK19fZnJvbSkKKysJICAgICAgX190b19uZXh0ICs9IHdjcnRvbWIoX190b19uZXh0LCAqX19mcm9tLCAmX190bXBfc3RhdGUpOworKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgPSBlcnJvcjsKKysJICB9CisrCWVsc2UgaWYgKF9fZnJvbV9uZXh0ICYmIF9fZnJvbV9uZXh0IDwgX19mcm9tX2NodW5rX2VuZCkKKysJICB7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tX2NodW5rX2VuZDsKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgfQorKworKwlpZiAoX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fcmV0ID09IG9rKQorKwkgIHsKKysJICAgIGV4dGVybl90eXBlIF9fYnVmW01CX0xFTl9NQVhdOworKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkgICAgY29uc3Qgc2l6ZV90IF9fY29udiA9IHdjcnRvbWIoX19idWYsICpfX2Zyb21fbmV4dCwgJl9fdG1wX3N0YXRlKTsKKysJICAgIGlmIChfX2NvbnYgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fdG9fZW5kIC0gX190b19uZXh0KSkKKysJICAgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgICAgZWxzZQorKwkgICAgICB7CisrCQltZW1jcHkoX190b19uZXh0LCBfX2J1ZiwgX19jb252KTsKKysJCV9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJCV9fdG9fbmV4dCArPSBfX2NvbnY7CisrCQkrK19fZnJvbV9uZXh0OworKwkgICAgICB9CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsgCisrICB9CisrICAKKysgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwgCisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorKwlpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAorKwlpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKKysgIHsKKysgICAgcmVzdWx0IF9fcmV0ID0gb2s7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIHN0b3JlIGEgTCdcMCcgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KKysgICAgLy8gTkI6IG1ic25ydG93Y3MgaXMgYSBHTlUgZXh0ZW5zaW9uCisrICAgIGZvciAoX19mcm9tX25leHQgPSBfX2Zyb20sIF9fdG9fbmV4dCA9IF9fdG87CisrCSBfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX190b19uZXh0IDwgX190b19lbmQKKysJICYmIF9fcmV0ID09IG9rOykKKysgICAgICB7CisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOworKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tX25leHQsICdcMCcsCisrCQkJCQkJCQkgIF9fZnJvbV9lbmQKKysJCQkJCQkJCSAgLSBfX2Zyb21fbmV4dCkpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7CisrCisrCV9fZnJvbSA9IF9fZnJvbV9uZXh0OworKwlzaXplX3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKKysJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbV9uZXh0LAorKwkJCQkgICBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyBtYnJ0b3djLgorKwkgICAgZm9yICg7OyArK19fdG9fbmV4dCwgX19mcm9tICs9IF9fY29udikKKysJICAgICAgeworKwkJX19jb252ID0gbWJydG93YyhfX3RvX25leHQsIF9fZnJvbSwgX19mcm9tX2VuZCAtIF9fZnJvbSwKKysJCQkJICZfX3RtcF9zdGF0ZSk7CisrCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCisrCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQorKwkJICBicmVhazsKKysJICAgICAgfQorKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb207CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CSAgICAKKysJICAgIF9fcmV0ID0gZXJyb3I7CisrCSAgfQorKwllbHNlIGlmIChfX2Zyb21fbmV4dCAmJiBfX2Zyb21fbmV4dCA8IF9fZnJvbV9jaHVua19lbmQpCisrCSAgeworKwkgICAgLy8gSXQgaXMgdW5jbGVhciB3aGF0IHRvIHJldHVybiBpbiB0aGlzIGNhc2UgKHNlZSBEUiAzODIpLiAKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb21fY2h1bmtfZW5kOworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICB9CisrCisrCWlmIChfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX19yZXQgPT0gb2spCisrCSAgeworKwkgICAgaWYgKF9fdG9fbmV4dCA8IF9fdG9fZW5kKQorKwkgICAgICB7CisrCQkvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncworKwkJX190bXBfc3RhdGUgPSBfX3N0YXRlOwkJCisrCQkrK19fZnJvbV9uZXh0OworKwkJKl9fdG9fbmV4dCsrID0gTCdcMCc7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7IAorKyAgfQorKworKyAgaW50IAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKQorKyAgeworKyAgICAvLyBYWFggVGhpcyBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGVuY29kaW5nIGlzCisrICAgIC8vIHN0YXRlbGVzcyBhbmQgaXMgZWl0aGVyIHNpbmdsZS1ieXRlIG9yIHZhcmlhYmxlLXdpZHRoLgorKyAgICBpbnQgX19yZXQgPSAwOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysgICAgaWYgKE1CX0NVUl9NQVggPT0gMSkKKysgICAgICBfX3JldCA9IDE7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gX19yZXQ7CisrICB9ICAKKysKKysgIGludCAKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKQorKyAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysgICAgLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MuCisrICAgIGludCBfX3JldCA9IE1CX0NVUl9NQVg7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrICAKKysgIGludCAKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19sZW5ndGgoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKKysJICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdAorKyAgeworKyAgICBpbnQgX19yZXQgPSAwOworKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysKKysgICAgLy8gbWJzbnJ0b3djcyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKysgICAgLy8gaW4gY2FzZSB3ZSBhZHZhbmNlIHBhc3QgaXQgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KKysgICAgLy8gTkI6IG1ic25ydG93Y3MgaXMgYSBHTlUgZXh0ZW5zaW9uCisrICAKKysgICAgLy8gQSBkdW1teSBpbnRlcm5hbCBidWZmZXIgaXMgbmVlZGVkIGluIG9yZGVyIGZvciBtYnNucnRvY3dzIHRvIGNvbnNpZGVyCisrICAgIC8vIGl0cyBmb3VydGggcGFyYW1ldGVyIChpdCB3b3VsZG4ndCB3aXRoIE5VTEwgYXMgZmlyc3QgcGFyYW1ldGVyKS4KKysgICAgd2NoYXJfdCogX190byA9IHN0YXRpY19jYXN0PHdjaGFyX3QqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZih3Y2hhcl90KSAKKysJCQkJCQkJICAgKiBfX21heCkpOworKyAgICB3aGlsZSAoX19mcm9tIDwgX19lbmQgJiYgX19tYXgpCisrICAgICAgeworKwljb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZDsKKysJX19mcm9tX2NodW5rX2VuZCA9IHN0YXRpY19jYXN0PGNvbnN0IGV4dGVybl90eXBlKj4obWVtY2hyKF9fZnJvbSwgJ1wwJywKKysJCQkJCQkJCSAgX19lbmQKKysJCQkJCQkJCSAgLSBfX2Zyb20pKTsKKysJaWYgKCFfX2Zyb21fY2h1bmtfZW5kKQorKwkgIF9fZnJvbV9jaHVua19lbmQgPSBfX2VuZDsKKysKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fdG1wX2Zyb20gPSBfX2Zyb207CisrCXNpemVfdCBfX2NvbnYgPSBtYnNucnRvd2NzKF9fdG8sICZfX2Zyb20sCisrCQkJCSAgIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb20sCisrCQkJCSAgIF9fbWF4LCAmX19zdGF0ZSk7CisrCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisrCSAgeworKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKKysJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKysJICAgIC8vIG1icnRvd2MuCisrCSAgICBmb3IgKF9fZnJvbSA9IF9fdG1wX2Zyb207OyBfX2Zyb20gKz0gX19jb252KQorKwkgICAgICB7CisrCQlfX2NvbnYgPSBtYnJ0b3djKE5VTEwsIF9fZnJvbSwgX19lbmQgLSBfX2Zyb20sCisrCQkJCSAmX190bXBfc3RhdGUpOworKwkJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKQorKwkJICAgIHx8IF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSkKKysJCSAgYnJlYWs7CisrCSAgICAgIH0KKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJICAgIF9fcmV0ICs9IF9fZnJvbSAtIF9fdG1wX2Zyb207CisrCSAgICBicmVhazsKKysJICB9CisrCWlmICghX19mcm9tKQorKwkgIF9fZnJvbSA9IF9fZnJvbV9jaHVua19lbmQ7CisrCQorKwlfX3JldCArPSBfX2Zyb20gLSBfX3RtcF9mcm9tOworKwlfX21heCAtPSBfX2NvbnY7CisrCisrCWlmIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKKysJICB7CisrCSAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncworKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkgICAgKytfX2Zyb207CisrCSAgICArK19fcmV0OworKwkgICAgLS1fX21heDsKKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OyAKKysgIH0KKysjZW5kaWYKKyt9CitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsODAgQEAKKysvLyBzdGQ6OmNvbGxhdGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjQuMS4yICBjb2xsYXRlIHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorKyNkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyNkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKysjZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gVGhlc2UgYXJlIGJhc2ljYWxseSBleHRlbnNpb25zIHRvIGNoYXJfdHJhaXRzLCBhbmQgcGVyaGFwcyBzaG91bGQKKysgIC8vIGJlIHB1dCB0aGVyZSBpbnN0ZWFkIG9mIGhlcmUuCisrICB0ZW1wbGF0ZTw+CisrICAgIGludCAKKysgICAgY29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiBfX29uZSwgY29uc3QgY2hhciogX190d28pIGNvbnN0CisrICAgIHsgCisrICAgICAgaW50IF9fY21wID0gX19zdHJjb2xsX2woX19vbmUsIF9fdHdvLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsKKysgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDApOworKyAgICB9CisrICAKKysgIHRlbXBsYXRlPD4KKysgICAgc2l6ZV90CisrICAgIGNvbGxhdGU8Y2hhcj46Ol9NX3RyYW5zZm9ybShjaGFyKiBfX3RvLCBjb25zdCBjaGFyKiBfX2Zyb20sIAorKwkJCQlzaXplX3QgX19uKSBjb25zdCAKKysgICAgeyByZXR1cm4gX19zdHJ4ZnJtX2woX190bywgX19mcm9tLCBfX24sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIGludCAKKysgICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fY29tcGFyZShjb25zdCB3Y2hhcl90KiBfX29uZSwgCisrCQkJCSBjb25zdCB3Y2hhcl90KiBfX3R3bykgY29uc3QKKysgICAgeworKyAgICAgIGludCBfX2NtcCA9IF9fd2NzY29sbF9sKF9fb25lLCBfX3R3bywgX01fY19sb2NhbGVfY29sbGF0ZSk7CisrICAgICAgcmV0dXJuIChfX2NtcCA+PiAoOCAqIHNpemVvZiAoaW50KSAtIDIpKSB8IChfX2NtcCAhPSAwKTsKKysgICAgfQorKyAgCisrICB0ZW1wbGF0ZTw+CisrICAgIHNpemVfdAorKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV90cmFuc2Zvcm0od2NoYXJfdCogX190bywgY29uc3Qgd2NoYXJfdCogX19mcm9tLAorKwkJCQkgICBzaXplX3QgX19uKSBjb25zdAorKyAgICB7IHJldHVybiBfX3djc3hmcm1fbChfX3RvLCBfX2Zyb20sIF9fbiwgX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KKysjZW5kaWYKKyt9CitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDMwMCBAQAorKy8vIHN0ZDo6Y3R5cGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuMS4yICBjdHlwZSB2aXJ0dWFsIGZ1bmN0aW9ucy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICB3Y3R5cGUoKFMpKQorKyNkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgdG93dXBwZXIoKEMpKQorKyNkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgdG93bG93ZXIoKEMpKQorKyNkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAorKyAgLy8gdmFyaW91cyAvY29uZmlnL29zLyogZmlsZXMuCisrICB0ZW1wbGF0ZTw+CisrICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKysgICAgOiBjdHlwZTxjaGFyPigwLCBmYWxzZSwgX19yZWZzKSAKKysgICAgeyAJCQorKyAgICAgIGlmIChzdGQ6OnN0cmNtcChfX3MsICJDIikgIT0gMCAmJiBzdGQ6OnN0cmNtcChfX3MsICJQT1NJWCIpICE9IDApCisrCXsKKysJICB0aGlzLT5fU19kZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlKTsKKysJICB0aGlzLT5fU19jcmVhdGVfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY3R5cGUsIF9fcyk7IAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgdGhpcy0+X01fdG91cHBlciA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX3RvdXBwZXI7CisrCSAgdGhpcy0+X01fdG9sb3dlciA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX3RvbG93ZXI7CisrCSAgdGhpcy0+X01fdGFibGUgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV9iOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QgIAorKyAgY3R5cGU8d2NoYXJfdD46Ol9fd21hc2tfdHlwZQorKyAgY3R5cGU8d2NoYXJfdD46Ol9NX2NvbnZlcnRfdG9fd21hc2soY29uc3QgbWFzayBfX20pIGNvbnN0CisrICB7CisrICAgIF9fd21hc2tfdHlwZSBfX3JldDsKKysgICAgc3dpdGNoIChfX20pCisrICAgICAgeworKyAgICAgIGNhc2Ugc3BhY2U6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgic3BhY2UiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgcHJpbnQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgicHJpbnQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgY250cmw6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiY250cmwiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgdXBwZXI6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgidXBwZXIiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgbG93ZXI6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgibG93ZXIiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgYWxwaGE6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiYWxwaGEiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgZGlnaXQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiZGlnaXQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgcHVuY3Q6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgicHVuY3QiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgeGRpZ2l0OgorKwlfX3JldCA9IF9fd2N0eXBlX2woInhkaWdpdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBhbG51bToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJhbG51bSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBncmFwaDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJncmFwaCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysJX19yZXQgPSBfX3dtYXNrX3R5cGUoKTsKKysgICAgICB9CisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysgIAorKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvdXBwZXIod2NoYXJfdCBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfX3Rvd3VwcGVyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKyAgICAgICAgKl9fbG8gPSBfX3Rvd3VwcGVyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgICAgICsrX19sbzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKyAgCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9fdG93bG93ZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQorKyAgCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvbG93ZXIod2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKyAgICAgIHsKKysgICAgICAgICpfX2xvID0gX190b3dsb3dlcl9sKCpfX2xvLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrICAgICAgICArK19fbG87CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIGJvb2wKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX2lzKG1hc2sgX19tLCB3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgCisrICAgIC8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrICAgIC8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKyAgICBib29sIF9fcmV0ID0gZmFsc2U7CisrICAgIGNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7IAorKyAgICBmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrICAgICAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0KKysJICAmJiBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJeworKwkgIF9fcmV0ID0gdHJ1ZTsKKysJICBicmVhazsKKysJfQorKyAgICByZXR1cm4gX19yZXQ7ICAgIAorKyAgfQorKyAgCisrICBjb25zdCB3Y2hhcl90KiAKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX2lzKGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdAorKyAgeworKyAgICBmb3IgKDsgX19sbyA8IF9faGk7ICsrX192ZWMsICsrX19sbykKKysgICAgICB7CisrCS8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrCS8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKwljb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOyAKKysJbWFzayBfX20gPSAwOworKwlmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrCSAgaWYgKF9faXN3Y3R5cGVfbCgqX19sbywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCisrCSAgICBfX20gfD0gX01fYml0W19fYml0Y3VyXTsKKysJKl9fdmVjID0gX19tOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrICAKKysgIGNvbnN0IHdjaGFyX3QqIAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpICYmICF0aGlzLT5kb19pcyhfX20sICpfX2xvKSkKKysgICAgICArK19fbG87CisrICAgIHJldHVybiBfX2xvOworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpICYmIHRoaXMtPmRvX2lzKF9fbSwgKl9fbG8pICE9IDApCisrICAgICAgKytfX2xvOworKyAgICByZXR1cm4gX19sbzsKKysgIH0KKysKKysgIHdjaGFyX3QKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKV07IH0KKysKKysgIGNvbnN0IGNoYXIqIAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgd2NoYXJfdCogX19kZXN0KSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKwkqX19kZXN0ID0gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG8pXTsKKysJKytfX2xvOworKwkrK19fZGVzdDsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgY2hhcgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fbmFycm93KHdjaGFyX3QgX193YywgY2hhciBfX2RmYXVsdCkgY29uc3QKKysgIHsKKysgICAgaWYgKF9fd2MgPj0gMCAmJiBfX3djIDwgMTI4ICYmIF9NX25hcnJvd19vaykKKysgICAgICByZXR1cm4gX01fbmFycm93W19fd2NdOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIGNvbnN0IGludCBfX2MgPSB3Y3RvYihfX3djKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7IAorKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX25hcnJvdyhjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpLCBjaGFyIF9fZGZhdWx0LCAKKysJICAgIGNoYXIqIF9fZGVzdCkgY29uc3QKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOworKyNlbmRpZgorKyAgICBpZiAoX01fbmFycm93X29rKQorKyAgICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysJeworKwkgIGlmICgqX19sbyA+PSAwICYmICpfX2xvIDwgMTI4KQorKwkgICAgKl9fZGVzdCA9IF9NX25hcnJvd1sqX19sb107CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBjb25zdCBpbnQgX19jID0gd2N0b2IoKl9fbG8pOworKwkgICAgICAqX19kZXN0ID0gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKwkgICAgfQorKwkgICsrX19sbzsKKysJICArK19fZGVzdDsKKysJfQorKyAgICBlbHNlCisrICAgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKwl7CisrCSAgY29uc3QgaW50IF9fYyA9IHdjdG9iKCpfX2xvKTsKKysJICAqX19kZXN0ID0gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKwkgICsrX19sbzsKKysJICArK19fZGVzdDsKKysJfQorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICB2b2lkCisrICBjdHlwZTx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9jdHlwZSgpCisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgd2ludF90IF9faTsKKysgICAgZm9yIChfX2kgPSAwOyBfX2kgPCAxMjg7ICsrX19pKQorKyAgICAgIHsKKysJY29uc3QgaW50IF9fYyA9IHdjdG9iKF9faSk7CisrCWlmIChfX2MgPT0gRU9GKQorKwkgIGJyZWFrOworKwllbHNlCisrCSAgX01fbmFycm93W19faV0gPSBzdGF0aWNfY2FzdDxjaGFyPihfX2MpOworKyAgICAgIH0KKysgICAgaWYgKF9faSA9PSAxMjgpCisrICAgICAgX01fbmFycm93X29rID0gdHJ1ZTsKKysgICAgZWxzZQorKyAgICAgIF9NX25hcnJvd19vayA9IGZhbHNlOworKyAgICBmb3IgKHNpemVfdCBfX2ogPSAwOworKwkgX19qIDwgc2l6ZW9mKF9NX3dpZGVuKSAvIHNpemVvZih3aW50X3QpOyArK19faikKKysgICAgICBfTV93aWRlbltfX2pdID0gYnRvd2MoX19qKTsKKysKKysgICAgZm9yIChzaXplX3QgX19rID0gMDsgX19rIDw9IDExOyArK19faykKKysgICAgICB7IAorKwlfTV9iaXRbX19rXSA9IHN0YXRpY19jYXN0PG1hc2s+KF9JU2JpdChfX2spKTsKKysJX01fd21hc2tbX19rXSA9IF9NX2NvbnZlcnRfdG9fd21hc2soX01fYml0W19fa10pOworKyAgICAgIH0KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICB9CisrI2VuZGlmIC8vICBfR0xJQkNYWF9VU0VfV0NIQVJfVAorK30KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTAwIEBACisrLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IGdldHRleHQgc3R1ZmYKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKytleHRlcm4gIkMiIGNoYXIgKl9fZGNnZXR0ZXh0KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCQkJICAgICBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KTsKKysjdW5kZWYgZ2V0dGV4dAorKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgX19kY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorKyNlbHNlCisrI3VuZGVmIGdldHRleHQKKysjZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gU3BlY2lhbGl6YXRpb25zLgorKyAgdGVtcGxhdGU8PgorKyAgICBzdHJpbmcKKysgICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KGdldHRleHQoX19kZmF1bHQuY19zdHIoKSkpOworKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysgICAgICByZXR1cm4gc3RyaW5nKF9fbXNnKTsKKysjZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbHNlCisrICAgICAgY29uc3QgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9fZGZhdWx0LmNfc3RyKCkpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbmRpZgorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHdzdHJpbmcKKysgICAgbWVzc2FnZXM8d2NoYXJfdD46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgd3N0cmluZyYgX19kZmF1bHQpIGNvbnN0CisrICAgIHsKKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV9tZXNzYWdlcyk7CisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZWxzZQorKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZW5kaWYKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxMTggQEAKKysvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworK2V4dGVybiAiQyIgY2hhciAqX190ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOworK2V4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUpOworKyNlbHNlCisrI3VuZGVmIF9fdGV4dGRvbWFpbgorKyN1bmRlZiBfX2JpbmR0ZXh0ZG9tYWluCisrI2RlZmluZSBfX3RleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgX19iaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKysjZW5kaWYKKysKKysgIC8vIE5vbi12aXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhzaXplX3QgX19yZWZzKQorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19nZXRfY19sb2NhbGUoKSksIAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfU19nZXRfY19uYW1lKCkpCisrICAgICB7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsIAorKwkJCQlzaXplX3QgX19yZWZzKSAKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKSksCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKF9fcykKKysgICAgIHsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX190bXA7CisrICAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cgCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsIAorKwkJCSAgIGNvbnN0IGNoYXIqIF9fZGlyKSBjb25zdAorKyAgICB7IAorKyAgICAgIF9fYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKysgICAgICByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsgCisrICAgIH0KKysKKysgIC8vIFZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6fm1lc3NhZ2VzKCkKKysgICAgeyAKKysgICAgICBpZiAoX01fbmFtZV9tZXNzYWdlcyAhPSBfU19nZXRfY19uYW1lKCkpCisrCWRlbGV0ZSBbXSBfTV9uYW1lX21lc3NhZ2VzOworKyAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOyAKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nIAorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCAKKysJCQkgICAgICBjb25zdCBsb2NhbGUmKSBjb25zdAorKyAgICB7IAorKyAgICAgIC8vIE5vIGVycm9yIGNoZWNraW5nIGlzIGRvbmUsIGFzc3VtZSB0aGUgY2F0YWxvZyBleGlzdHMgYW5kIGNhbgorKyAgICAgIC8vIGJlIHVzZWQuCisrICAgICAgX190ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB2b2lkICAgIAorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRhbG9nKSBjb25zdCAKKysgICAgeyB9CisrCisrICAgLy8gbWVzc2FnZXNfYnluYW1lCisrICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXNfYnluYW1lPF9DaGFyVD46Om1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCisrICAgICA6IG1lc3NhZ2VzPF9DaGFyVD4oX19yZWZzKSAKKysgICAgIHsgCisrICAgICAgIGlmICh0aGlzLT5fTV9uYW1lX21lc3NhZ2VzICE9IGxvY2FsZTo6ZmFjZXQ6Ol9TX2dldF9jX25hbWUoKSkKKysJIGRlbGV0ZSBbXSB0aGlzLT5fTV9uYW1lX21lc3NhZ2VzOworKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKysgICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgIHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysKKysgICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKKysJIHsKKysJICAgdGhpcy0+X1NfZGVzdHJveV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrCSAgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsgCisrCSB9CisrICAgICB9CitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDY5MiBAQAorKy8vIHN0ZDo6bW9uZXlwdW5jdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNi4zLjIgIG1vbmV5cHVuY3QgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgb3B0aW1pemUgdGhpcyBmb3IgdWNsaWJjCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIENvbnN0cnVjdCBhbmQgcmV0dXJuIHZhbGlkIHBhdHRlcm4gY29uc2lzdGluZyBvZiBzb21lIGNvbWJpbmF0aW9uIG9mOgorKyAgLy8gc3BhY2Ugbm9uZSBzeW1ib2wgc2lnbiB2YWx1ZQorKyAgbW9uZXlfYmFzZTo6cGF0dGVybgorKyAgbW9uZXlfYmFzZTo6X1NfY29uc3RydWN0X3BhdHRlcm4oY2hhciBfX3ByZWNlZGVzLCBjaGFyIF9fc3BhY2UsIGNoYXIgX19wb3NuKQorKyAgeyAKKysgICAgcGF0dGVybiBfX3JldDsKKysKKysgICAgLy8gVGhpcyBpbnNhbmVseSBjb21wbGljYXRlZCByb3V0aW5lIGF0dGVtcHRzIHRvIGNvbnN0cnVjdCBhIHZhbGlkCisrICAgIC8vIHBhdHRlcm4gZm9yIHVzZSB3aXRoIG1vbnllcHVuY3QuIEEgY291cGxlIG9mIGludmFyaWFudHM6CisrCisrICAgIC8vIGlmIChfX3ByZWNlZGVzKSBzeW1ib2wgLT4gdmFsdWUKKysgICAgLy8gZWxzZSB2YWx1ZSAtPiBzeW1ib2wKKysgICAgCisrICAgIC8vIGlmIChfX3NwYWNlKSBzcGFjZQorKyAgICAvLyBlbHNlIG5vbmUKKysKKysgICAgLy8gbm9uZSA9PSBuZXZlciBmaXJzdAorKyAgICAvLyBzcGFjZSBuZXZlciBmaXJzdCBvciBsYXN0CisrCisrICAgIC8vIEFueSBlbGVnYW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGFyZSB3ZWxjb21lLgorKyAgICBzd2l0Y2ggKF9fcG9zbikKKysgICAgICB7CisrICAgICAgY2FzZSAwOgorKyAgICAgIGNhc2UgMToKKysJLy8gMSBUaGUgc2lnbiBwcmVjZWRlcyB0aGUgdmFsdWUgYW5kIHN5bWJvbC4KKysJX19yZXQuZmllbGRbMF0gPSBzaWduOworKwlpZiAoX19zcGFjZSkKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24uCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24gYW5kIGVuZHMgd2l0aCBub25lLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgMjoKKysJLy8gMiBUaGUgc2lnbiBmb2xsb3dzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgorKwlpZiAoX19zcGFjZSkKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIGVpdGhlciBlbmRzIHdpdGggc2lnbi4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkgICAgX19yZXQuZmllbGRbM10gPSBzaWduOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gZW5kcyB3aXRoIHNpZ24gdGhlbiBub25lLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgMzoKKysJLy8gMyBUaGUgc2lnbiBpbW1lZGlhdGVseSBwcmVjZWRlcyB0aGUgc3ltYm9sLgorKwlpZiAoX19wcmVjZWRlcykKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHNpZ247CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsJICAgIAorKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CQkKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwlicmVhazsKKysgICAgICBjYXNlIDQ6CisrCS8vIDQgVGhlIHNpZ24gaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgc3ltYm9sLgorKwlpZiAoX19wcmVjZWRlcykKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc2lnbjsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IHNpZ247CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsyXSA9IHNpZ247CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWJyZWFrOworKyAgICAgIGRlZmF1bHQ6CisrCTsKKysgICAgICB9CisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCAKKysJCQkJCQkgICAgIGNvbnN0IGNoYXIqKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCB0cnVlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULCAKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX1RIT1VTQU5EU19TRVAsIAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIGlmICghX19ucG9zbikKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCAKKysJCQkJCQkJX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgLy8gX0ludGwgPT0gdHJ1ZQorKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfRlJBQ19ESUdJVFMsIAorKwkJCQkJCSAgICAgIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLCAKKysJCQkJCQkJX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwgCisrCQkJCQkJCV9fbnBvc24pOworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgCisrCQkJCQkJICAgICAgY29uc3QgY2hhciopCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPGNoYXIsIGZhbHNlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULCAKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX1RIT1VTQU5EU19TRVAsIAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgaWYgKCFfX25wb3NuKQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIoKSI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sCisrCQkJCQkJCV9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgIC8vIF9JbnRsID09IGZhbHNlCisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX25sX2xhbmdpbmZvX2woX19DVVJSRU5DWV9TWU1CT0wsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0ZSQUNfRElHSVRTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwgCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLCAKKysJCQkJCQkJX19ucG9zbik7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrICB0ZW1wbGF0ZTw+IAorKyAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+IAorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJCQkJCQkJY29uc3QgY2hhciopCisrI2Vsc2UKKysJCQkJCQkJY29uc3QgY2hhciogX19uYW1lKQorKyNlbmRpZgorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTx3Y2hhcl90LCB0cnVlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV0pOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisrI2Vsc2UKKysJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKysJICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcy4uLiBzaG91bGQgYmUgbW9uZXRhcnkKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfXworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVsc2UKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbmRpZgorKyNlbHNlCisrCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrI2VuZGlmCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCisrCSAgY29uc3QgY2hhciogX19jcG9zc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jbmVnc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jY3VyciA9IF9fbmxfbGFuZ2luZm9fbChfX0lOVF9DVVJSX1NZTUJPTCwgX19jbG9jKTsKKysKKysJICB3Y2hhcl90KiBfX3djc19wcyA9IDA7CisrCSAgd2NoYXJfdCogX193Y3NfbnMgPSAwOworKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICB0cnkKKysJICAgIHsKKysJICAgICAgbWJzdGF0ZV90IF9fc3RhdGU7CisrCSAgICAgIHNpemVfdCBfX2xlbiA9IHN0cmxlbihfX2Nwb3NzaWduKTsKKysJICAgICAgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfcHMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19wcywgJl9fY3Bvc3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX3djc19wczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICAgICAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKwkgICAgICAKKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jbmVnc2lnbik7CisrCSAgICAgIGlmICghX19ucG9zbikKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIigpIjsKKysJICAgICAgZWxzZSBpZiAoX19sZW4pCisrCQl7IAorKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICAgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKwkgICAgICAKKysJICAgICAgLy8gX0ludGwgPT0gdHJ1ZS4KKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jY3Vycik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIHdjaGFyX3QqIF9fd2NzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3MsICZfX2NjdXJyLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fd2NzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICAgICAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgICB9CisrCSAgY2F0Y2ggKC4uLikKKysJICAgIHsKKysJICAgICAgZGVsZXRlIF9NX2RhdGE7CisrCSAgICAgIF9NX2RhdGEgPSAwOworKwkgICAgICBkZWxldGUgX193Y3NfcHM7CisrCSAgICAgIGRlbGV0ZSBfX3djc19uczsJICAgICAgCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwkgICAgfSAKKysJICAKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX0ZSQUNfRElHSVRTLCAKKysJCQkJCQkgICAgICBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwgCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsIAorKwkJCQkJCQlfX25wb3NuKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+IAorKyAgdm9pZAorKyAgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkJCQkJCSAgICAgICBjb25zdCBjaGFyKikKKysjZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX25hbWUpCisrI2VuZGlmCisrICB7CisrICAgIGlmICghX01fZGF0YSkKKysgICAgICBfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTx3Y2hhcl90LCBmYWxzZT47CisrCisrICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrICAgICAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV0pOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisrI2Vsc2UKKysJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKysJICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcy4uLiBzaG91bGQgYmUgbW9uZXRhcnkKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfXworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVsc2UKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbmRpZgorKyNlbHNlCisrICAgICAgICAgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKyAgICAgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysKKysJICBjb25zdCBjaGFyKiBfX2Nwb3NzaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NuZWdzaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NjdXJyID0gX19ubF9sYW5naW5mb19sKF9fQ1VSUkVOQ1lfU1lNQk9MLCBfX2Nsb2MpOworKworKwkgIHdjaGFyX3QqIF9fd2NzX3BzID0gMDsKKysJICB3Y2hhcl90KiBfX3djc19ucyA9IDA7CisrCSAgY29uc3QgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgdHJ5CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgbWJzdGF0ZV90IF9fc3RhdGU7CisrICAgICAgICAgICAgICBzaXplX3QgX19sZW47CisrICAgICAgICAgICAgICBfX2xlbiA9IHN0cmxlbihfX2Nwb3NzaWduKTsKKysgICAgICAgICAgICAgIGlmIChfX2xlbikKKysgICAgICAgICAgICAgICAgeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfcHMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19wcywgJl9fY3Bvc3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX3djc19wczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysJICAgICAgCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOworKwkgICAgICBpZiAoIV9fbnBvc24pCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7CisrCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorKwkJeyAKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX25zID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfbnMsICZfX2NuZWdzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX193Y3NfbnM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgICAgIC8vIF9JbnRsID09IHRydWUuCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICAgIH0KKysgICAgICAgICAgY2F0Y2ggKC4uLikKKysJICAgIHsKKysJICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgICAgICAgICAgICBfTV9kYXRhID0gMDsKKysJICAgICAgZGVsZXRlIF9fd2NzX3BzOworKwkgICAgICBkZWxldGUgX193Y3NfbnM7CSAgICAgIAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKyAgICAgICAgICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisrCSAgICB9CisrCisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0ZSQUNfRElHSVRTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwgCisrCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLCAKKysJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ucG9zbik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZQorKyAgICAgICAgICAmJiB3Y3NjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgTCIoKSIpICE9IDApCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fY3Vycl9zeW1ib2w7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCisrICAgICAgICAgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsKKysgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxNjAgQEAKKysvLyBzdGQ6Om51bXB1bmN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi4zLjEuMiAgbnVtcHVuY3QgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIHRlbXBsYXRlPD4gCisrICAgIHZvaWQKKysgICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19udW1wdW5jdF9jYWNoZTxjaGFyPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOworKworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0gX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV07CisrCisrCSAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19udW1fYmFzZTo6X1NfaWVuZDsgKytfX2opCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0gX19udW1fYmFzZTo6X1NfYXRvbXNfaW5bX19qXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woREVDSU1BTF9QT0lOVCwgCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChUSE9VU0FORFNfU0VQLCAKKysJCQkJCQkJX19jbG9jKSk7CisrCisrCSAgLy8gQ2hlY2sgZm9yIE5VTEwsIHdoaWNoIGltcGxpZXMgbm8gZ3JvdXBpbmcuCisrCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gJ1wwJykKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCX0KKysKKysgICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFjdCB0aGlzIGluZm8gZnJvbSBwb3NpeCBsb2NhbGVzLgorKyAgICAgIC8vIF9NX3RydWVuYW1lID0gX19ubF9sYW5naW5mb19sKFlFU1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZSA9ICJ0cnVlIjsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZV9zaXplID0gNDsKKysgICAgICAvLyBfTV9mYWxzZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woTk9TVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lID0gImZhbHNlIjsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWVfc2l6ZSA9IDU7CisrICAgIH0KKysgCisrICB0ZW1wbGF0ZTw+IAorKyAgICBudW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKyAgIAorKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PiAKKysgICAgdm9pZAorKyAgICBudW1wdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX251bXB1bmN0X2NhY2hlPHdjaGFyX3Q+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7CisrCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19udW1fYmFzZTo6X1Nfb2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19vdXRbX19pXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fbnVtX2Jhc2U6Ol9TX2F0b21zX291dFtfX2ldKTsKKysKKysJICBmb3IgKHNpemVfdCBfX2ogPSAwOyBfX2ogPCBfX251bV9iYXNlOjpfU19pZW5kOyArK19faikKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX2luW19fal0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90PihfX251bV9iYXNlOjpfU19hdG9tc19pbltfX2pdKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICAvLyBOQjogSW4gdGhlIEdOVSBtb2RlbCB3Y2hhcl90IGlzIGFsd2F5cyAzMiBiaXQgd2lkZS4KKysJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrCisrCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gTCdcMCcpCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKEdST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwl9CisrCisrICAgICAgLy8gTkI6IFRoZXJlIGlzIG5vIHdheSB0byBleHRhY3QgdGhpcyBpbmZvIGZyb20gcG9zaXggbG9jYWxlcy4KKysgICAgICAvLyBfTV90cnVlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChZRVNTVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWUgPSBMInRydWUiOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lX3NpemUgPSA0OworKyAgICAgIC8vIF9NX2ZhbHNlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChOT1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWUgPSBMImZhbHNlIjsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWVfc2l6ZSA9IDU7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIG51bXB1bmN0PHdjaGFyX3Q+Ojp+bnVtcHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrICNlbmRpZgorK30KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw0MDYgQEAKKysvLyBzdGQ6OnRpbWVfZ2V0LCBzdGQ6OnRpbWVfcHV0IGltcGxlbWVudGF0aW9uLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4xLjIgLSB0aW1lX2dldCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4zLjIgLSB0aW1lX3B1dCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorKyNlbmRpZgorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8Y2hhcj46OgorKyAgICBfTV9wdXQoY2hhciogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IGNoYXIqIF9fZm9ybWF0LCAKKysJICAgY29uc3QgdG0qIF9fdG0pIGNvbnN0CisrICAgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fc3RyZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKysJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrI2Vsc2UKKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0cmZ0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisrICAgICAgaWYgKF9fbGVuID09IDApCisrCV9fc1swXSA9ICdcMCc7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPGNoYXI+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOworKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSAiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSAiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2FtID0gIkFNIjsKKysJICBfTV9kYXRhLT5fTV9wbSA9ICJQTSI7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gIiI7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gIlN1bmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9ICJNb25kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSAiVHVlc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9ICJXZWRuZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSAiVGh1cnNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSAiRnJpZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gIlNhdHVyZGF5IjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gIlN1biI7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSAiTW9uIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9ICJUdWUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gIldlZCI7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSAiVGh1IjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9ICJGcmkiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gIlNhdCI7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gIkphbnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSAiRmVicnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSAiTWFyY2giOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSAiQXByaWwiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSAiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gIkp1bmUiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSAiSnVseSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9ICJBdWd1c3QiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSAiU2VwdGVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gIk9jdG9iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSAiTm92ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSAiRGVjZW1iZXIiOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9ICJKYW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gIkZlYiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSAiTWFyIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9ICJBcHIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gIk1heSI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSAiSnVuIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9ICJKdWwiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gIkF1ZyI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSAiU2VwIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9ICJPY3QiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gIk5vdiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSAiRGVjIjsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7IAorKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKERfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGltZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKERfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX0RfVF9GTVQsCisrCQkJCQkJCSAgICAgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbSA9IF9fbmxfbGFuZ2luZm9fbChBTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG0gPSBfX25sX2xhbmdpbmZvX2woUE1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChUX0ZNVF9BTVBNLCBfX2Nsb2MpOworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX01fZGF0YS0+X01fZGF5MSA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gX19ubF9sYW5naW5mb19sKERBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBfX25sX2xhbmdpbmZvX2woREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gX19ubF9sYW5naW5mb19sKERBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBfX25sX2xhbmdpbmZvX2woREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NyA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNywgX19jbG9jKTsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gX19ubF9sYW5naW5mb19sKEFCREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzcsIF9fY2xvYyk7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gX19ubF9sYW5naW5mb19sKE1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBfX25sX2xhbmdpbmZvX2woTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IF9fbmxfbGFuZ2luZm9fbChNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gX19ubF9sYW5naW5mb19sKE1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBfX25sX2xhbmdpbmZvX2woTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IF9fbmxfbGFuZ2luZm9fbChNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gX19ubF9sYW5naW5mb19sKE1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSBfX25sX2xhbmdpbmZvX2woTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9IF9fbmxfbGFuZ2luZm9fbChNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gX19ubF9sYW5naW5mb19sKE1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gX19ubF9sYW5naW5mb19sKE1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gX19ubF9sYW5naW5mb19sKE1PTl8xMiwgX19jbG9jKTsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMTIsIF9fY2xvYyk7CisrCX0KKysgICAgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjoKKysgICAgX01fcHV0KHdjaGFyX3QqIF9fcywgc2l6ZV90IF9fbWF4bGVuLCBjb25zdCB3Y2hhcl90KiBfX2Zvcm1hdCwgCisrCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorKwkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysjZWxzZQorKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gd2NzZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKysgICAgICBpZiAoX19sZW4gPT0gMCkKKysJX19zWzBdID0gTCdcMCc7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPHdjaGFyX3Q+OworKworKyN3YXJuaW5nIHdpZGUgdGltZSBzdHVmZgorKy8vICAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOworKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gTCIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gTCIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2FtID0gTCJBTSI7CisrCSAgX01fZGF0YS0+X01fcG0gPSBMIlBNIjsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBMIiI7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gTCJTdW5kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBMIk1vbmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IEwiVHVlc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9IEwiV2VkbmVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gTCJUaHVyc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IEwiRnJpZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gTCJTYXR1cmRheSI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IEwiU3VuIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IEwiTW9uIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IEwiVHVlIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IEwiV2VkIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IEwiVGh1IjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IEwiRnJpIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IEwiU2F0IjsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBMIkphbnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBMIkZlYnJ1YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gTCJNYXJjaCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IEwiQXByaWwiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBMIk1heSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IEwiSnVuZSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IEwiSnVseSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IEwiQXVndXN0IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gTCJTZXB0ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBMIk9jdG9iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBMIk5vdmVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gTCJEZWNlbWJlciI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gTCJKYW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gTCJGZWIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gTCJNYXIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gTCJBcHIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gTCJNYXkiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gTCJKdW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gTCJKdWwiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gTCJBdWciOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gTCJTZXAiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gTCJPY3QiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gTCJOb3YiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gTCJEZWMiOworKwl9CisrI2lmIDAKKysgICAgICBlbHNlCisrCXsKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOyAKKysKKysJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCAqX193OyB9IF9fdTsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGltZV9lcmFfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX0RfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW0gPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dQTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG0gPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dUX0ZNVF9BTVBNLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IF9fdS5fX3c7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NyA9IF9fdS5fX3c7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IF9fdS5fX3c7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gX191Ll9fdzsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IF9fdS5fX3c7CisrCX0KKysjZW5kaWYgLy8gMAorKyAgICB9CisrI2VuZGlmCisrfQorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNjggQEAKKysvLyBzdGQ6OnRpbWVfZ2V0LCBzdGQ6OnRpbWVfcHV0IGltcGxlbWVudGF0aW9uLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4xLjIgLSB0aW1lX2dldCBmdW5jdGlvbnMKKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzKSAKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksIAorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChfU19nZXRfY19uYW1lKCkpCisrICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NhY2hlX3R5cGUqIF9fY2FjaGUsIHNpemVfdCBfX3JlZnMpIAorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoX19jYWNoZSksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwgCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCSAgICAgc2l6ZV90IF9fcmVmcykgCisrICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLCAKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX19zKQorKyAgICB7IAorKyAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX190bXA7CisrICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsgCisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6fl9fdGltZXB1bmN0KCkKKysgICAgeyAKKysgICAgICBpZiAoX01fbmFtZV90aW1lcHVuY3QgIT0gX1NfZ2V0X2NfbmFtZSgpKQorKwlkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7IAorKyAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfdGltZXB1bmN0KTsgCisrICAgIH0KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWd1cmUJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTU3NjksNyArNTc2OSw3IEBACisgICBlbmFibGV2YWw9IiRlbmFibGVfY2xvY2FsZSIKKyAKKyAgICAgICBjYXNlICIkZW5hYmxldmFsIiBpbgorLSAgICAgICBnZW5lcmljfGdudXxpZWVlXzEwMDMuMS0yMDAxfHllc3xub3xhdXRvKSA7OworKyAgICAgICBnZW5lcmljfGdudXxpZWVlXzEwMDMuMS0yMDAxfHVjbGliY3x5ZXN8bm98YXV0bykgOzsKKyAgICAgICAgKikgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogVW5rbm93biBhcmd1bWVudCB0byBlbmFibGUvZGlzYWJsZSBjbG9jYWxlIiA+JjUKKyBlY2hvICIkYXNfbWU6IGVycm9yOiBVbmtub3duIGFyZ3VtZW50IHRvIGVuYWJsZS9kaXNhYmxlIGNsb2NhbGUiID4mMjt9CisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CitAQCAtNTgwMiw2ICs1ODAyLDkgQEAKKyAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCisgICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgorICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgorKyAgICAgIGxpbnV4LXVjbGliYyopCisrICAgICAgICBlbmFibGVfY2xvY2FsZV9mbGFnPXVjbGliYworKwk7OworICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQorICAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz1nbnUKKyAgICAgICAgIDs7CitAQCAtNjE5MCw2ICs2MTkzLDc2IEBACisgICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5jYworICAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvYysrbG9jYWxlX2ludGVybmFsLmgKKyAgICAgICA7OworKyAgICB1Y2xpYmMpCisrICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdWNsaWJjIiA+JjUKKytlY2hvICIke0VDSE9fVH11Y2xpYmMiID4mNgorKworKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKKysgICAgICAjIGxhbmd1YWdlcy4KKysgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAorKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKKysKKysgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgorKyAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXNnZm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgbXNnZm10OyBhY193b3JkPSQyCisrZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCtzZXR9IiA9IHNldDsgdGhlbgorKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9IiRjaGVja19tc2dmbXQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgICBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0ieWVzIgorKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorK2RvbmUKKysKKysgIHRlc3QgLXogIiRhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCIgJiYgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9Im5vIgorK2ZpCisrZmkKKytjaGVja19tc2dmbXQ9JGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10CisraWYgdGVzdCAtbiAiJGNoZWNrX21zZ2ZtdCI7IHRoZW4KKysgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRjaGVja19tc2dmbXQiID4mNQorK2VjaG8gIiR7RUNIT19UfSRjaGVja19tc2dmbXQiID4mNgorK2Vsc2UKKysgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2CisrZmkKKysKKysgICAgICBpZiB0ZXN0IHgiJGNoZWNrX21zZ2ZtdCIgPSB4InllcyIgJiYgdGVzdCB4IiRlbmFibGVfbmxzIiA9IHgieWVzIjsgdGhlbgorKyAgICAgICAgVVNFX05MUz15ZXMKKysgICAgICBmaQorKyAgICAgICMgRXhwb3J0IHRoZSBidWlsZCBvYmplY3RzLgorKyAgICAgIGZvciBsaW5nIGluICRBTExfTElOR1VBUzsgZG8gXAorKyAgICAgICAgZ2xpYmN4eF9NT0ZJTEVTPSIkZ2xpYmN4eF9NT0ZJTEVTICRsaW5nLm1vIjsgXAorKyAgICAgICAgZ2xpYmN4eF9QT0ZJTEVTPSIkZ2xpYmN4eF9QT0ZJTEVTICRsaW5nLnBvIjsgXAorKyAgICAgIGRvbmUKKysKKysKKysKKysgICAgICBDTE9DQUxFX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysgICAgICBDQ09ERUNWVF9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKysgICAgICBDQ09MTEFURV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysgICAgICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKyAgICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysgICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrICAgICAgOzsKKyAgIGVzYWMKKyAKKyAgICMgVGhpcyBpcyB3aGVyZSB0aGUgdGVzdHN1aXRlIGxvb2tzIGZvciBsb2NhbGUgY2F0YWxvZ3MsIHVzaW5nIHRoZQorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaCBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaAkyMDA1LTA4LTE3IDA0OjI4OjQ0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaAkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTEwMSw3ICsxMDEsOSBAQAorIHVzaW5nIHN0ZDo6d21lbWNweTsKKyB1c2luZyBzdGQ6OndtZW1tb3ZlOworIHVzaW5nIHN0ZDo6d21lbXNldDsKKysjaWYgX0dMSUJDWFhfSEFWRV9XQ1NGVElNRQorIHVzaW5nIHN0ZDo6d2NzZnRpbWU7CisrI2VuZGlmCisgCisgI2lmIF9HTElCQ1hYX1VTRV9DOTkKKyB1c2luZyBzdGQ6Ondjc3RvbGQ7CitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL3N0ZF9jd2NoYXIuaCBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvc3RkX2N3Y2hhci5oCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvc3RkX2N3Y2hhci5oCTIwMDYtMTItMDcgMTA6MzM6NTEuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL3N0ZF9jd2NoYXIuaAkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTE4Miw3ICsxODIsOSBAQAorICAgdXNpbmcgOjp3Y3Njb2xsOworICAgdXNpbmcgOjp3Y3NjcHk7CisgICB1c2luZyA6Ondjc2NzcG47CisrI2lmIF9HTElCQ1hYX0hBVkVfV0NTRlRJTUUKKyAgIHVzaW5nIDo6d2NzZnRpbWU7CisrI2VuZGlmCisgICB1c2luZyA6Ondjc2xlbjsKKyAgIHVzaW5nIDo6d2NzbmNhdDsKKyAgIHVzaW5nIDo6d2NzbmNtcDsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMTMwLXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4xLzEzMC11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4OGRjMjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4xLzEzMC11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCkBAIC0wLDAgKzEsMjIzIEBACitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwkyMDA3LTA4LTAzIDIwOjMwOjUzLjAwMDAwMDAwMCArMDIwMAorQEAgLTM5LDIwICszOSw2IEBACisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX3N0cnRvbF9sKFMsIEUsIEIsIEwpICAgICAgc3RydG9sKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvdWxfbChTLCBFLCBCLCBMKSAgICAgc3RydG91bCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b2xsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvbGwoKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG91bGxfbChTLCBFLCBCLCBMKSAgICBzdHJ0b3VsbCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKy0jZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCistI2RlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKy0jd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworLSNkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKy0jZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKy0jZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkIAorIHsKKyAgIHRlbXBsYXRlPD4KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgJMjAwNy0wOC0wMyAyMDozMDo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC02OCw2ICs2OCw3IEBACisgeworICAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworIH0KKysjZGVmaW5lIF9fdXNlbG9jYWxlIHVzZWxvY2FsZQorICNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCTIwMDctMDgtMDMgMjA6MzA6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtNjAsNCArNjAsNDkgQEAKKyBleHRlcm4gIkMiIF9fdHlwZW9mKHdjdHlwZV9sKSBfX3djdHlwZV9sOworICNlbmRpZiAKKyAKKysjIGRlZmluZSBfX25sX2xhbmdpbmZvX2wgbmxfbGFuZ2luZm9fbAorKyMgZGVmaW5lIF9fc3RyY29sbF9sIHN0cmNvbGxfbAorKyMgZGVmaW5lIF9fc3RyZnRpbWVfbCBzdHJmdGltZV9sCisrIyBkZWZpbmUgX19zdHJ0b2RfbCBzdHJ0b2RfbAorKyMgZGVmaW5lIF9fc3RydG9mX2wgc3RydG9mX2wKKysjIGRlZmluZSBfX3N0cnRvbGRfbCBzdHJ0b2xkX2wKKysjIGRlZmluZSBfX3N0cnhmcm1fbCBzdHJ4ZnJtX2wKKysjIGRlZmluZSBfX25ld2xvY2FsZSBuZXdsb2NhbGUKKysjIGRlZmluZSBfX2ZyZWVsb2NhbGUgZnJlZWxvY2FsZQorKyMgZGVmaW5lIF9fZHVwbG9jYWxlIGR1cGxvY2FsZQorKyMgZGVmaW5lIF9fdXNlbG9jYWxlIHVzZWxvY2FsZQorKworKyMgaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysjICBkZWZpbmUgX19pc3djdHlwZV9sIGlzd2N0eXBlX2wKKysjICBkZWZpbmUgX190b3dsb3dlcl9sIHRvd2xvd2VyX2wKKysjICBkZWZpbmUgX190b3d1cHBlcl9sIHRvd3VwcGVyX2wKKysjICBkZWZpbmUgX193Y3Njb2xsX2wgd2NzY29sbF9sCisrIyAgZGVmaW5lIF9fd2NzZnRpbWVfbCB3Y3NmdGltZV9sCisrIyAgZGVmaW5lIF9fd2NzeGZybV9sIHdjc3hmcm1fbAorKyMgIGRlZmluZSBfX3djdHlwZV9sIHdjdHlwZV9sCisrIyBlbmRpZgorKworKyNlbHNlCisrIyBkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjIGRlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorKyMgZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCisrIyBkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCisrIyB3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CisrIyBkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKysjIGRlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCisrIyBkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorKy8vIyBkZWZpbmUgX191c2Vsb2NhbGUgPworKy8vCisrIyBpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyMgIGRlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCisrIyAgZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgICB0b3dsb3dlcigoQykpCisrIyAgZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgICB0b3d1cHBlcigoQykpCisrIyAgZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCisrLy8jICBkZWZpbmUgX193Y3NmdGltZV9sKFMsIE0sIEYsIFQsIEwpICB3Y3NmdGltZSgoUyksIChNKSwgKEYpLCAoVCkpIAorKyMgIGRlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCisrIyAgZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgICB3Y3R5cGUoKFMpKQorKyMgZW5kaWYKKysKKyAjZW5kaWYgLy8gR0xJQkMgMi4zIGFuZCBsYXRlcgorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtMzYsMTMgKzM2LDYgQEAKKyAjaW5jbHVkZSA8bG9jYWxlPgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKKy0jZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKy0jZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCistI2RlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIC8vIFRoZXNlIGFyZSBiYXNpY2FsbHkgZXh0ZW5zaW9ucyB0byBjaGFyX3RyYWl0cywgYW5kIHBlcmhhcHMgc2hvdWxkCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtMzgsMTMgKzM4LDYgQEAKKyAjdW5kZWYgX0xJQkMKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgIHdjdHlwZSgoUykpCistI2RlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICB0b3d1cHBlcigoQykpCistI2RlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICB0b3dsb3dlcigoQykpCistI2RlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICBpc3djdHlwZSgoQyksIChNKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtMzksMTMgKzM5LDEwIEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IGdldHRleHQgc3R1ZmYKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKy1leHRlcm4gIkMiIGNoYXIgKl9fZGNnZXR0ZXh0KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCistCQkJICAgICBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KTsKKyAjdW5kZWYgZ2V0dGV4dAorLSNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgX19kY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgZGNnZXR0ZXh0KE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKyAjZWxzZQorLSN1bmRlZiBnZXR0ZXh0CisgI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSAobXNnaWQpCisgI2VuZGlmCisgCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgJMjAwNy0wOC0wMyAyMDozMDo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zNiwxNSArMzYsMTEgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKy1leHRlcm4gIkMiIGNoYXIgKl9fdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKKy1leHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKy0JCQkJICBjb25zdCBjaGFyICpkaXJuYW1lKTsKKy0jZWxzZQorLSN1bmRlZiBfX3RleHRkb21haW4KKy0jdW5kZWYgX19iaW5kdGV4dGRvbWFpbgorLSNkZWZpbmUgX190ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKKy0jZGVmaW5lIF9fYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyN1bmRlZiB0ZXh0ZG9tYWluCisrI3VuZGVmIGJpbmR0ZXh0ZG9tYWluCisrI2RlZmluZSB0ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIGJpbmR0ZXh0ZG9tYWluKEQsUCkgICAgICgodm9pZCkwKQorICNlbmRpZgorIAorICAgLy8gTm9uLXZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KK0BAIC03MCw3ICs2Niw3IEBACisgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsIAorIAkJCSAgIGNvbnN0IGNoYXIqIF9fZGlyKSBjb25zdAorICAgICB7IAorLSAgICAgIF9fYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKysgICAgICBiaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworICAgICAgIHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOyAKKyAgICAgfQorIAorQEAgLTkwLDcgKzg2LDcgQEAKKyAgICAgeyAKKyAgICAgICAvLyBObyBlcnJvciBjaGVja2luZyBpcyBkb25lLCBhc3N1bWUgdGhlIGNhdGFsb2cgZXhpc3RzIGFuZCBjYW4KKyAgICAgICAvLyBiZSB1c2VkLgorLSAgICAgIF9fdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisrICAgICAgdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC00MywxMCArNDMsNiBAQAorICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBDb25zdHJ1Y3QgYW5kIHJldHVybiB2YWxpZCBwYXR0ZXJuIGNvbnNpc3Rpbmcgb2Ygc29tZSBjb21iaW5hdGlvbiBvZjoKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMwOjUzLjAwMDAwMDAwMCArMDIwMAorQEAgLTQxLDkgKzQxLDYgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKyAjZW5kaWYKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKy0jZW5kaWYKKyAKKyBuYW1lc3BhY2Ugc3RkCisgeworZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtNDAsOSArNDAsNiBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKKyB7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4xLzE0MC11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMTQwLXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3N2JiNTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4xLzE0MC11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaApAQCAtMCwwICsxLDUwIEBACitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6NTMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzE6MjQuMDAwMDAwMDAwICswMjAwCitAQCAtNDAxLDcgKzQwMSw3IEBACisgIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworLSMgZWxzZQorKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKyAjIGVuZGlmCitAQCAtNTU2LDcgKzU1Niw3IEBACisgIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworLSMgZWxzZQorKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKyAjIGVuZGlmCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6NTMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMToyNC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMjcsMTIgKzEyNywyNSBAQAorIAl7CisgCSAgLy8gTmFtZWQgbG9jYWxlLgorIAkgIC8vIE5COiBJbiB0aGUgR05VIG1vZGVsIHdjaGFyX3QgaXMgYWx3YXlzIDMyIGJpdCB3aWRlLgorKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBudW1lcmljCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorIAkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisgCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworIAorIAkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKyAKKyAJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKKyAJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4xLzE1MC11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMTUwLXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNGY0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4xLzE1MC11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaApAQCAtMCwwICsxLDM1NCBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwkyMDA3LTA4LTAzIDIwOjMwOjUzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MJMjAwNy0wOC0wMyAyMDozMTo1NC4wMDAwMDAwMDAgKzAyMDAKK0BAIC00NiwxNiArNDYsMTMgQEAKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBmbG9hdCYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIAorIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorICAgICB7CistICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCistCXsKKy0JICBjaGFyKiBfX3Nhbml0eTsKKy0JICBlcnJubyA9IDA7CistCSAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKy0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCistCSAgICBfX3YgPSBfX2Y7CistCSAgZWxzZQorLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CistCX0KKysgICAgICBjaGFyKiBfX3Nhbml0eTsKKysgICAgICBlcnJubyA9IDA7CisrICAgICAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19mOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPD4KK0BAIC02MywxNiArNjAsMTMgQEAKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCAKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fZDsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19kOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPD4KK0BAIC04MCwxNiArNzQsMTMgQEAKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBsb25nIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisgCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICAgIHsKKy0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKy0JeworLQkgIGNoYXIqIF9fc2FuaXR5OworLQkgIGVycm5vID0gMDsKKy0JICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CistICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorLQkgICAgX192ID0gX19sZDsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCV9fdiA9IF9fbGQ7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdm9pZAorQEAgLTExMCw3ICsxMDEsNyBAQAorICAgdm9pZAorICAgbG9jYWxlOjpmYWNldDo6X1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICB7CistICAgIGlmIChfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCisrICAgIGlmIChfX2Nsb2MgJiYgX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorICAgICAgIF9fZnJlZWxvY2FsZShfX2Nsb2MpOyAKKyAgIH0KKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgJMjAwNy0wOC0wMyAyMDozMDo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgJMjAwNy0wOC0wMyAyMDozMTo1NC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zOSwyMSArMzksMjMgQEAKKyAjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisgCisgI2luY2x1ZGUgPGNzdHJpbmc+ICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzdHJsZW4KKy0jaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnNucHJpbnRmIG9yIHN0ZDo6c3ByaW50ZgorKyNpbmNsdWRlIDxjc3RkaW8+ICAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6dnNucHJpbnRmIG9yIHN0ZDo6dnNwcmludGYKKyAjaW5jbHVkZSA8Y2xvY2FsZT4KKyAjaW5jbHVkZSA8bGFuZ2luZm8uaD4JCS8vIEZvciBjb2RlY3Z0CisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IHRoaXMKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9JQ09OVgorICNpbmNsdWRlIDxpY29udi5oPgkJLy8gRm9yIGNvZGVjdnQgdXNpbmcgaWNvbnYsIGljb252X3QKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKy0jaW5jbHVkZSA8bGliaW50bC5oPiAJCS8vIEZvciBtZXNzYWdlcworKyNpZmRlZiBIQVZFX0xJQklOVExfSAorKyNpbmNsdWRlIDxsaWJpbnRsLmg+CQkvLyBGb3IgbWVzc2FnZXMKKyAjZW5kaWYKKysjaW5jbHVkZSA8Y3N0ZGFyZz4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyB3aGF0IGlzIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSBmb3IKKysvLyBwc206IHVzZWQgaW4gb3MvZ251LWxpbnV4L2N0eXBlX25vbmlubGluZS5oCisgI2VuZGlmCisgI2RlZmluZSBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgMQorIAorQEAgLTYyLDcgKzY0LDcgQEAKKyAjZW5kaWYKKyAvLyAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDYKKyAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDAKKy0gCisrCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyBuYW1lc3BhY2UgX19nbnVfY3h4CisgeworQEAgLTc5LDIyICs4MSwyNCBAQAorICAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKyAjZW5kaWYKKyAKKy0gIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIF9UdiB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKy0gIC8vIHN0cmluZy4gIElmIHNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKy0gIC8vIHRoZSB1bnNhZmUgc3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisrICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBkb3VibGUgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCisrICAvLyBzdHJpbmcuICBJZiB2c25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworKyAgLy8gdGhlIHVuc2FmZSB2c3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisgICAvLyBiZSBhdm9pZGVkLgorLSAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgorLSAgICBpbnQKKy0gICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwgCistCQkgICAgIGNvbnN0IGludCBfX3NpemUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKKy0JCSAgICAgY29uc3QgY2hhciogX19mbXQsCistI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCistCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fcHJlYykKKysgICAgaW5saW5lIGludAorKyAgICBfX2NvbnZlcnRfZnJvbV92KGNvbnN0IF9fY19sb2NhbGUmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKwkJCQkJX19jbG9jIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKKysjZW5kaWYKKysJCSAgICAgLAorKwkJICAgICBjaGFyKiBfX291dCwKKysJCSAgICAgY29uc3QgaW50IF9fc2l6ZSwKKysJCSAgICAgY29uc3QgY2hhciogX19mbXQsIC4uLikKKyAgICAgeworKyAgICAgIHZhX2xpc3QgX19hcmdzOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworICAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fY2xvYyk7CisgI2Vsc2UKKy0JCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMpCistICAgIHsKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICAgICAgIGNoYXIqIF9fb2xkID0gc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKyAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fb2xkKSArIDFdOworQEAgLTEwMyw3ICsxMDcsOSBAQAorICMgZW5kaWYKKyAjZW5kaWYKKyAKKy0gICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7CisrICAgICAgdmFfc3RhcnQoX19hcmdzLCBfX2ZtdCk7CisrICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjp2c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fYXJncyk7CisrICAgICAgdmFfZW5kKF9fYXJncyk7CisgCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisgICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7CitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6NTMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzE6NTQuMDAwMDAwMDAwICswMjAwCitAQCAtMzMsOSArMzMsMTQgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCisgbmFtZXNwYWNlIHN0ZAorQEAgLTEzOCwyMCArMTQzLDM0IEBACisgICBjdHlwZTx3Y2hhcl90Pjo6CisgICBkb19pcyhtYXNrIF9fbSwgd2NoYXJfdCBfX2MpIGNvbnN0CisgICB7IAorLSAgICAvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorLSAgICAvLyBsaWJyYXJ5IGZvciBibGFuay4KKysgICAgLy8gVGhlIGNhc2Ugb2YgX19tID09IGN0eXBlX2Jhc2U6OnNwYWNlIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQsCisrICAgIC8vIGR1ZSB0byBpdHMgdXNlIGluIG1hbnkgaXN0cmVhbSBmdW5jdGlvbnMuICBUaGVyZWZvcmUgd2UgZGVhbCB3aXRoCisrICAgIC8vIGl0IGZpcnN0LCBleHBsb2l0aW5nIHRoZSBrbm93bGVkZ2UgdGhhdCBvbiBHTlUgc3lzdGVtcyBfTV9iaXRbNV0KKysgICAgLy8gaXMgdGhlIG1hc2sgY29ycmVzcG9uZGluZyB0byBjdHlwZV9iYXNlOjpzcGFjZS4gIE5COiBhbiBlbmNvZGluZworKyAgICAvLyBjaGFuZ2Ugd291bGQgbm90IGFmZmVjdCBjb3JyZWN0bmVzcyEKKyAgICAgYm9vbCBfX3JldCA9IGZhbHNlOworLSAgICBjb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOyAKKy0gICAgZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorLSAgICAgIGlmIChfX20gJiBfTV9iaXRbX19iaXRjdXJdCistCSAgJiYgX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCistCXsKKy0JICBfX3JldCA9IHRydWU7CistCSAgYnJlYWs7CistCX0KKysgICAgaWYgKF9fbSA9PSBfTV9iaXRbNV0pCisrICAgICAgX19yZXQgPSBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1s1XSwgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICBlbHNlCisrICAgICAgeworKwkvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKwkvLyBsaWJyYXJ5IGZvciBibGFuay4KKysJY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKysJZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorKwkgIGlmIChfX20gJiBfTV9iaXRbX19iaXRjdXJdKQorKwkgICAgeworKwkgICAgICBpZiAoX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCisrCQl7CisrCQkgIF9fcmV0ID0gdHJ1ZTsKKysJCSAgYnJlYWs7CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKF9fbSA9PSBfTV9iaXRbX19iaXRjdXJdKQorKwkJYnJlYWs7CisrCSAgICB9CisrICAgICAgfQorICAgICByZXR1cm4gX19yZXQ7ICAgIAorICAgfQorLSAgCisrCisgICBjb25zdCB3Y2hhcl90KiAKKyAgIGN0eXBlPHdjaGFyX3Q+OjoKKyAgIGRvX2lzKGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAkyMDA3LTA4LTAzIDIwOjMwOjUzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCTIwMDctMDgtMDMgMjA6MzE6NTQuMDAwMDAwMDAwICswMjAwCitAQCAtNDcsMTggKzQ3LDIxIEBACisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhzaXplX3QgX19yZWZzKQorICAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19nZXRfY19sb2NhbGUoKSksIAorLSAgICAgX01fbmFtZV9tZXNzYWdlcyhfU19nZXRfY19uYW1lKCkpCisrICAgICAgIF9NX25hbWVfbWVzc2FnZXMoX1NfZ2V0X2NfbmFtZSgpKQorICAgICAgeyB9CisgCisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLCAKKyAJCQkJc2l6ZV90IF9fcmVmcykgCistICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYykpLAorLSAgICAgX01fbmFtZV9tZXNzYWdlcyhfX3MpCisrICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKE5VTEwpLCBfTV9uYW1lX21lc3NhZ2VzKE5VTEwpCisgICAgICB7CistICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworLSAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RkOjpzdHJsZW4oX19zKSArIDE7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbX19sZW5dOworKyAgICAgICBzdGQ6Om1lbWNweShfX3RtcCwgX19zLCBfX2xlbik7CisgICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysKKysgICAgICAgLy8gTGFzdCB0byBhdm9pZCBsZWFraW5nIG1lbW9yeSBpZiBuZXcgdGhyb3dzLgorKyAgICAgICBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CisgICAgICB9CisgCisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzE6MjQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzE6NTQuMDAwMDAwMDAwICswMjAwCitAQCAtMzMsOSArMzMsMTQgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitAQCAtMjA2LDcgKzIxMSw3IEBACisgCSAgfQorIAlicmVhazsKKyAgICAgICBkZWZhdWx0OgorLQk7CisrCV9fcmV0ID0gcGF0dGVybigpOworICAgICAgIH0KKyAgICAgcmV0dXJuIF9fcmV0OworICAgfQorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMxOjI0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzE6NTQuMDAwMDAwMDAwICswMjAwCitAQCAtMzMsOSArMzMsMTQgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAkyMDA3LTA4LTAzIDIwOjMxOjU0LjAwMDAwMDAwMCArMDIwMAorQEAgLTM3LDI1ICszNywzMyBAQAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzKSAKKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksIAorLSAgICBfTV9uYW1lX3RpbWVwdW5jdChfU19nZXRfY19uYW1lKCkpCisrICAgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorICAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jYWNoZV90eXBlKiBfX2NhY2hlLCBzaXplX3QgX19yZWZzKSAKKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKF9fY2FjaGUpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksIAorLSAgICBfTV9uYW1lX3RpbWVwdW5jdChfU19nZXRfY19uYW1lKCkpCisrICAgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorICAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKyAJCQkJICAgICBzaXplX3QgX19yZWZzKSAKKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksIAorLSAgICBfTV9uYW1lX3RpbWVwdW5jdChfX3MpCisrICAgICAgX01fbmFtZV90aW1lcHVuY3QoTlVMTCkKKyAgICAgeyAKKy0gICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKy0gICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdGQ6OnN0cmxlbihfX3MpICsgMTsKKysgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsKKysgICAgICBzdGQ6Om1lbWNweShfX3RtcCwgX19zLCBfX2xlbik7CisgICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKKy0gICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOyAKKysKKysgICAgICB0cnkKKysJeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOyB9CisrICAgICAgY2F0Y2goLi4uKQorKwl7CisrCSAgZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OworKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwl9CisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMTYwLWxpYnN0ZGMrKy1waWMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4xLzE2MC1saWJzdGRjKystcGljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNDRkNGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4xLzE2MC1saWJzdGRjKystcGljLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbSBnY2MtNC4yLjEvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuYW0JMjAwNi0wNy0yOCAwNjo1NzozNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQkyMDA3LTA4LTAzIDIwOjMyOjI3LjAwMDAwMDAwMCArMDIwMAorQEAgLTI1Nyw2ICsyNTcsMTIgQEAKKyAJICAkKE9QVF9MREZMQUdTKSAkKFNFQ1RJT05fTERGTEFHUykgJChBTV9DWFhGTEFHUykgJChMVExERkxBR1MpIC1vICRACisgCisgCisraW5zdGFsbC1leGVjLWxvY2FsOgorK2lmZXEgKCQoZW5hYmxlX3NoYXJlZCkseWVzKQorKwkkKEFSKSBjcnUgbGlic3RkYysrX3BpYy5hIC5saWJzLyoubyAkKHRvcF9idWlsZGRpcikvbGlic3VwYysrLyoubworKwkkKElOU1RBTExfREFUQSkgbGlic3RkYysrX3BpYy5hICQoREVTVERJUikkKHRvb2xleGVjbGliZGlyKQorK2VuZGlmCisrCisgIyBBZGRlZCBiaXRzIHRvIGJ1aWxkIGRlYnVnIGxpYnJhcnkuCisgaWYgR0xJQkNYWF9CVUlMRF9ERUJVRworIGFsbC1sb2NhbDogYnVpbGRfZGVidWcKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbiBnY2MtNC4yLjEvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuaW4JMjAwNi0xMC0xNiAyMTowODoyMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgkyMDA3LTA4LTAzIDIwOjMyOjI3LjAwMDAwMDAwMCArMDIwMAorQEAgLTY1Nyw3ICs2NTcsNyBAQAorIAorIGluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1kYXRhLWxvY2FsCisgCistaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLXRvb2xleGVjbGliTFRMSUJSQVJJRVMKKytpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUyBpbnN0YWxsLWV4ZWMtbG9jYWwKKyAKKyBpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorIAorQEAgLTY5MCw2ICs2OTAsNyBAQAorIAlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCisgCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAorIAlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kYXRhLWxvY2FsIGluc3RhbGwtZXhlYyBcCisrCWluc3RhbGwtZXhlYy1sb2NhbCBcCisgCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKyAJaW5zdGFsbC1zdHJpcCBpbnN0YWxsLXRvb2xleGVjbGliTFRMSUJSQVJJRVMgaW5zdGFsbGNoZWNrIFwKKyAJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorQEAgLTc5OSw2ICs4MDAsMTMgQEAKKyBpbnN0YWxsX2RlYnVnOgorIAkoY2QgJHtkZWJ1Z2Rpcn0gJiYgJChNQUtFKSBcCisgCXRvb2xleGVjbGliZGlyPSQoZ2xpYmN4eF90b29sZXhlY2xpYmRpcikvZGVidWcgaW5zdGFsbCkKKysKKytpbnN0YWxsLWV4ZWMtbG9jYWw6CisraWZlcSAoJChlbmFibGVfc2hhcmVkKSx5ZXMpCisrCSQoQVIpIGNydSBsaWJzdGRjKytfcGljLmEgKi5vICQodG9wX2J1aWxkZGlyKS9saWJzdXBjKysvKi5vCisrCSQoSU5TVEFMTF9EQVRBKSBsaWJzdGRjKytfcGljLmEgJChERVNURElSKSQodG9vbGV4ZWNsaWJkaXIpCisrZW5kaWYKKysKKyAjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorICMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorIC5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMTcwLW1pc3NpbmctZXhlY2luZm9faC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMTcwLW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjY3ODk5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMS8xNzAtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvYm9laG0tZ2MvaW5jbHVkZS9nYy5oIGdjYy00LjIuMS9ib2VobS1nYy9pbmNsdWRlL2djLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9ib2VobS1nYy9pbmNsdWRlL2djLmgJMjAwNi0wOS0xOCAyMDo0NTowOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCTIwMDctMDgtMDMgMjA6MzM6MDAuMDAwMDAwMDAwICswMjAwCitAQCAtNTAyLDcgKzUwMiw3IEBACisgI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykKKyAjIGluY2x1ZGUgPGZlYXR1cmVzLmg+CisgIyBpZiAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEgfHwgX19HTElCQ19fID4gMikgXAorLSAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pCisrICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykgJiYgIWRlZmluZWQoX19VQ0xJQkNfXykKKyAjICAgaWZuZGVmIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgICBkZWZpbmUgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQorICMgICBlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMS8xODAtYzk5LXNucHJpbnRmLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMS8xODAtYzk5LXNucHJpbnRmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYjBjMzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4xLzE4MC1jOTktc25wcmludGYucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9zdGRfY3N0ZGlvLmggZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL3N0ZF9jc3RkaW8uaAorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL3N0ZF9jc3RkaW8uaAkyMDA2LTEyLTA3IDEwOjMzOjUxLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9zdGRfY3N0ZGlvLmgJMjAwNy0wOC0wMyAyMDozMzoyNC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNDQsNyArMTQ0LDcgQEAKKyAKKyBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisgCistI2lmIF9HTElCQ1hYX1VTRV9DOTkKKysjaWYgX0dMSUJDWFhfVVNFX0M5OSB8fCBkZWZpbmVkKF9fVUNMSUJDX18pCisgCisgI3VuZGVmIHNucHJpbnRmCisgI3VuZGVmIHZmc2NhbmYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMTkwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMTkwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTZkNzFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMS8xOTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWd1cmUJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjMzOjU2LjAwMDAwMDAwMCArMDIwMAorQEAgLTc1MTQsNiArNzUxNCw5IEBACisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaW5jbHVkZSA8Y29tcGxleC5oPgorKyNpZmRlZiBfX1VDTElCQ19fCisrI2Vycm9yIHVnbHkgaGFjayB0byBtYWtlIHN1cmUgY29uZmlndXJlIHRlc3QgZmFpbHMgaGVyZSBmb3IgY3Jvc3MgdW50aWwgdUNsaWJjIHN1cHBvcnRzIHRoZSBjb21wbGV4IGZ1bmNzCisrI2VuZGlmCisgaW50CisgbWFpbiAoKQorIHsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMjAwLWluZGV4X21hY3JvLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMS8yMDAtaW5kZXhfbWFjcm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU1NmI1ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMjAwLWluZGV4X21hY3JvLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUJMjAwNi0xMC0xNyAxMzo1NjoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUJMjAwNy0wOC0wMyAyMDozNDoyMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC01OCw2ICs1OCw5IEBACisgI2luY2x1ZGUgPGJpdHMvYWxsb2NhdG9yLmg+CisgI2luY2x1ZGUgPGV4dC9oYXNoX2Z1bi5oPgorIAorKy8qIGNvcGUgdy8gaW5kZXggZGVmaW5lZCBhcyBtYWNybywgU3VTdjMgcHJvcG9zYWwgKi8KKysjdW5kZWYgaW5kZXgKKysKKyAjIGlmZGVmIF9fR0MKKyAjICAgZGVmaW5lIF9fR0NfQ09OU1QgY29uc3QKKyAjIGVsc2UKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmggZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgJMjAwNi0xMC0xNyAxMzo1NjoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgJMjAwNy0wOC0wMyAyMDozNDoyMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC01NCw2ICs1NCw5IEBACisgI2luY2x1ZGUgPGV4dC9tZW1vcnk+IC8vIEZvciB1bmluaXRpYWxpemVkX2NvcHlfbgorICNpbmNsdWRlIDxleHQvbnVtZXJpYz4gLy8gRm9yIHBvd2VyCisgCisrLyogY29wZSB3LyBpbmRleCBkZWZpbmVkIGFzIG1hY3JvLCBTdVN2MyBwcm9wb3NhbCAqLworKyN1bmRlZiBpbmRleAorKworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisgCisgICB1c2luZyBzdGQ6OnNpemVfdDsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMjEwLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMS8yMTAtbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZlODcwNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMjEwLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlibXVkZmxhcC9tZi1ob29rczIuYyBnY2MtNC4yLjEvbGlibXVkZmxhcC9tZi1ob29rczIuYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMJMjAwNS0wOS0yMyAyMzo1ODozOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlibXVkZmxhcC9tZi1ob29rczIuYwkyMDA3LTA4LTAzIDIwOjM1OjA5LjAwMDAwMDAwMCArMDIwMAorQEAgLTQyNyw3ICs0MjcsNyBAQAorIHsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIG4sIF9fTUZfQ0hFQ0tfV1JJVEUsICJiemVybyByZWdpb24iKTsKKy0gIGJ6ZXJvIChzLCBuKTsKKysgIG1lbXNldCAocywgMCwgbik7CisgfQorIAorIAorQEAgLTQzNyw3ICs0MzcsNyBAQAorICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQoc3JjLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY29weSBzcmMiKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChkZXN0LCBuLCBfX01GX0NIRUNLX1dSSVRFLCAiYmNvcHkgZGVzdCIpOworLSAgYmNvcHkgKHNyYywgZGVzdCwgbik7CisrICBtZW1tb3ZlIChkZXN0LCBzcmMsIG4pOworIH0KKyAKKyAKK0BAIC00NDcsNyArNDQ3LDcgQEAKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMxLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY21wIDFzdCBhcmciKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzMiwgbiwgX19NRl9DSEVDS19SRUFELCAiYmNtcCAybmQgYXJnIik7CistICByZXR1cm4gYmNtcCAoczEsIHMyLCBuKTsKKysgIHJldHVybiBuID09IDAgPyAwIDogbWVtY21wIChzMSwgczIsIG4pOworIH0KKyAKKyAKK0BAIC00NTYsNyArNDU2LDcgQEAKKyAgIHNpemVfdCBuID0gc3RybGVuIChzKTsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIENMQU1QQUREKG4sIDEpLCBfX01GX0NIRUNLX1JFQUQsICJpbmRleCByZWdpb24iKTsKKy0gIHJldHVybiBpbmRleCAocywgYyk7CisrICByZXR1cm4gc3RyY2hyIChzLCBjKTsKKyB9CisgCisgCitAQCAtNDY1LDcgKzQ2NSw3IEBACisgICBzaXplX3QgbiA9IHN0cmxlbiAocyk7CisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzLCBDTEFNUEFERChuLCAxKSwgX19NRl9DSEVDS19SRUFELCAicmluZGV4IHJlZ2lvbiIpOworLSAgcmV0dXJuIHJpbmRleCAocywgYyk7CisrICByZXR1cm4gc3RycmNociAocywgYyk7CisgfQorIAorIC8qIFhYWDogIHN0cGNweSwgbWVtY2NweSAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMS8yMjAtbGlic3RkYysrLW5hbWVzcGFjZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMjIwLWxpYnN0ZGMrKy1uYW1lc3BhY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA5ZThmMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMjIwLWxpYnN0ZGMrKy1uYW1lc3BhY2UucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAkyMDA3LTA4LTAzIDIwOjMxOjU0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCTIwMDctMDgtMDMgMjA6MzU6NDAuMDAwMDAwMDAwICswMjAwCitAQCAtMzIsNyArMzIsOCBAQAorIC8vCisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKy0KKytuYW1lc3BhY2Ugc3RkCisreworICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworICNlbmRpZgorQEAgLTExNSwzICsxMTYsNCBAQAorIAkgICB0aGlzLT5fU19jcmVhdGVfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfbWVzc2FnZXMsIF9fcyk7IAorIAkgfQorICAgICAgfQorK30KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgJMjAwNy0wOC0wMyAyMDozMTo1NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCTIwMDctMDgtMDMgMjA6MzU6NDAuMDAwMDAwMDAwICswMjAwCitAQCAtMzMsNyArMzMsOCBAQAorIC8vCisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKy0KKytuYW1lc3BhY2Ugc3RkCisreworICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzKSAKKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksIAorQEAgLTc0LDMgKzc1LDQgQEAKKyAgICAgICBkZWxldGUgX01fZGF0YTsgCisgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV90aW1lcHVuY3QpOyAKKyAgICAgfQorK30KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMjMwLWxpYmJhY2tlbmRfZGVwX2djb3YtaW92LmgucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4xLzIzMC1saWJiYWNrZW5kX2RlcF9nY292LWlvdi5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNzU0YmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4xLzIzMC1saWJiYWNrZW5kX2RlcF9nY292LWlvdi5oLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvZ2NjL01ha2VmaWxlLmluIGdjYy00LjIuMS9nY2MvTWFrZWZpbGUuaW4KKy0tLSBnY2MtNC4yLjEub3JpZy9nY2MvTWFrZWZpbGUuaW4JMjAwNy0wNS0zMSAxNzozNzozOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvZ2NjL01ha2VmaWxlLmluCTIwMDctMDgtMDMgMjA6MzY6MTQuMDAwMDAwMDAwICswMjAwCitAQCAtMjY2MCw3ICsyNjYwLDcgQEAKKyAjIEZJWE1FOiB3cml0aW5nIHByb3BlciBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgaXMgYSAqTE9UKiBvZiB3b3JrLgorIGxpYmJhY2tlbmQubyA6ICQoT0JKUy1jb21tb246Lm89LmMpICQob3V0X2ZpbGUpIFwKKyAgIGluc24tY29uZmlnLmggaW5zbi1mbGFncy5oIGluc24tY29kZXMuaCBpbnNuLWNvbnN0YW50cy5oIFwKKy0gIGluc24tYXR0ci5oICAkKERBVEVTVEFNUCkgJChCQVNFVkVSKSAkKERFVlBIQVNFKQorKyAgaW5zbi1hdHRyLmggICQoREFURVNUQU1QKSAkKEJBU0VWRVIpICQoREVWUEhBU0UpIGdjb3YtaW92LmgKKyAJJChDQykgJChBTExfQ0ZMQUdTKSAkKEFMTF9DUFBGTEFHUykgXAorIAkgIC1EVEFSR0VUX05BTUU9XCIkKHRhcmdldF9ub25jYW5vbmljYWwpXCIgXAorIAkgIC1ETE9DQUxFRElSPVwiJChsb2NhbGVkaXIpXCIgXApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMS8yNDAtYXJtLWJpZ2VuZGlhbi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMjQwLWFybS1iaWdlbmRpYW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFiZWNjZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMjQwLWFybS1iaWdlbmRpYW4ucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCBnY2MtNC4yLjEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDA2LTAyLTE3IDAwOjI5OjEwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDA3LTA4LTAzIDIwOjM2OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTI4LDE5ICsyOCwzMyBAQAorICN1bmRlZiAgVEFSR0VUX1ZFUlNJT04KKyAjZGVmaW5lIFRBUkdFVF9WRVJTSU9OICBmcHV0cyAoIiAoQVJNIEdOVS9MaW51eCB3aXRoIEVMRikiLCBzdGRlcnIpOworIAorKy8qCisrICogJ2NvbmZpZy5nY2MnIGRlZmluZXMgVEFSR0VUX0JJR19FTkRJQU5fREVGQVVMVCBhcyAxIGZvciBhcm0qYi0qCisrICogKGJpZyBlbmRpYW4pIGNvbmZpZ3VyYXRpb25zLgorKyAqLworKyNpZiBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUCisrI2RlZmluZSBUQVJHRVRfRU5ESUFOX0RFRkFVTFQgTUFTS19CSUdfRU5ECisrI2RlZmluZSBUQVJHRVRfRU5ESUFOX09QVElPTiAibWJpZy1lbmRpYW4iCisrI2RlZmluZSBUQVJHRVRfTElOS0VSX0VNVUxBVElPTiAiYXJtZWxmYl9saW51eCIKKysjZWxzZQorKyNkZWZpbmUgVEFSR0VUX0VORElBTl9ERUZBVUxUIDAKKysjZGVmaW5lIFRBUkdFVF9FTkRJQU5fT1BUSU9OICJtbGl0dGxlLWVuZGlhbiIKKysjZGVmaW5lIFRBUkdFVF9MSU5LRVJfRU1VTEFUSU9OICJhcm1lbGZfbGludXgiCisrI2VuZGlmCisrCisgI3VuZGVmICBUQVJHRVRfREVGQVVMVF9GTE9BVF9BQkkKKyAjZGVmaW5lIFRBUkdFVF9ERUZBVUxUX0ZMT0FUX0FCSSBBUk1fRkxPQVRfQUJJX0hBUkQKKyAKKyAjdW5kZWYgIFRBUkdFVF9ERUZBVUxUCistI2RlZmluZSBUQVJHRVRfREVGQVVMVCAoMCkKKysjZGVmaW5lIFRBUkdFVF9ERUZBVUxUIChUQVJHRVRfRU5ESUFOX0RFRkFVTFQpCisgCisgI2RlZmluZSBTVUJUQVJHRVRfQ1BVX0RFRkFVTFQgVEFSR0VUX0NQVV9hcm02CisgCistI2RlZmluZSBTVUJUQVJHRVRfRVhUUkFfTElOS19TUEVDICIgLW0gYXJtZWxmX2xpbnV4IC1wIgorKyNkZWZpbmUgU1VCVEFSR0VUX0VYVFJBX0xJTktfU1BFQyAiIC1tICIgVEFSR0VUX0xJTktFUl9FTVVMQVRJT04gIiAtcCIKKyAKKyAjdW5kZWYgIE1VTFRJTElCX0RFRkFVTFRTCisgI2RlZmluZSBNVUxUSUxJQl9ERUZBVUxUUyBcCistCXsgIm1hcm0iLCAibWxpdHRsZS1lbmRpYW4iLCAibWhhcmQtZmxvYXQiLCAibW5vLXRodW1iLWludGVyd29yayIgfQorKwl7ICJtYXJtIiwgVEFSR0VUX0VORElBTl9PUFRJT04sICJtaGFyZC1mbG9hdCIsICJtbm8tdGh1bWItaW50ZXJ3b3JrIiB9CisgCisgLyogTm93IHdlIGRlZmluZSB0aGUgc3RyaW5ncyB1c2VkIHRvIGJ1aWxkIHRoZSBzcGVjIGZpbGUuICAqLworICN1bmRlZiAgTElCX1NQRUMKK0BAIC02MSw3ICs3NSw3IEBACisgICAgJXtyZHluYW1pYzotZXhwb3J0LWR5bmFtaWN9IFwKKyAgICAleyFkeW5hbWljLWxpbmtlcjotZHluYW1pYy1saW5rZXIgIiBMSU5VWF9EWU5BTUlDX0xJTktFUiAifSBcCisgICAgLVggXAorLSAgICV7bWJpZy1lbmRpYW46LUVCfSIgXAorKyAgICV7bWJpZy1lbmRpYW46LUVCfSAle21saXR0bGUtZW5kaWFuOi1FTH0iIFwKKyAgICBTVUJUQVJHRVRfRVhUUkFfTElOS19TUEVDCisgCisgI3VuZGVmICBMSU5LX1NQRUMKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvZ2NjL2NvbmZpZy5nY2MgZ2NjLTQuMi4xL2djYy9jb25maWcuZ2NjCistLS0gZ2NjLTQuMi4xLm9yaWcvZ2NjL2NvbmZpZy5nY2MJMjAwNy0wOC0wMyAyMDoyOTo1Mi4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvZ2NjL2NvbmZpZy5nY2MJMjAwNy0wOC0wMyAyMDozNjo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC03MDUsNiArNzA1LDExIEBACisgCXRtX2ZpbGU9ImRieGVsZi5oIGVsZm9zLmggbGludXguaCBhcm0vZWxmLmggYXJtL2xpbnV4LWdhcy5oIGFybS9saW51eC1lbGYuaCIKKyAJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSB0LWxpbnV4IGFybS90LWFybSIKKyAJY2FzZSAke3RhcmdldH0gaW4KKysJYXJtKmItKikKKysJCXRtX2RlZmluZXM9IiR7dG1fZGVmaW5lc30gVEFSR0VUX0JJR19FTkRJQU5fREVGQVVMVD0xIgorKwkJOzsKKysJZXNhYworKwljYXNlICR7dGFyZ2V0fSBpbgorIAlhcm0qLSotbGludXgtKmVhYmkpCisgCSAgICB0bV9maWxlPSIkdG1fZmlsZSBhcm0vYnBhYmkuaCBhcm0vbGludXgtZWFiaS5oIgorIAkgICAgdG1ha2VfZmlsZT0iJHRtYWtlX2ZpbGUgYXJtL3QtYXJtLWVsZiBhcm0vdC1icGFiaSBhcm0vdC1saW51eC1lYWJpIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMS8yNTAtc29mdGZsb2F0LWZpeC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMjUwLXNvZnRmbG9hdC1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUxNzg1NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMjUwLXNvZnRmbG9hdC1maXgucGF0Y2gKQEAgLTAsMCArMSw1OCBAQAorVGhpcyBwYXRjaCAoQykgMjAwNyBZYW5uIEUuIE1PUklOCitMaWNlbnNlZCB1bmRlciBHUEwgdjIuCisKK0ZpcnN0IGh1bmsgb2YgdGhpcyBwYXRjaCBzb2x2ZXMgY29tcGlsaW5nIHVDbGliYzoKKworbWFrZVsxXTogRW50ZXJpbmcgZGlyZWN0b3J5IGAvaG9tZS95bW9yaW4veC10b29scy9idWlsZC9hcm1lYi11bmtub3duLWxpbnV4LXVjbGliYy9nY2MtNC4xLjEtdUNsaWJjLTAuOS4yOC4xL2J1aWxkLWxpYmMnCisgIExEIGxpYnVDbGliYy0wLjkuMjkuc28KK2xpYmMvbGliY19zby5hKGRpZmZ0aW1lLm9zKTogSW4gZnVuY3Rpb24gYGRpZmZ0aW1lJzoKK2RpZmZ0aW1lLmM6KC50ZXh0KzB4OCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fZmxvYXRzaWRmJworZGlmZnRpbWUuYzooLnRleHQrMHgyYyk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fc3ViZGYzJworbGliYy9saWJjX3NvLmEoX2ZwbWF4dG9zdHIub3MpOiBJbiBmdW5jdGlvbiBgX2ZwbWF4dG9zdHInOgorX2ZwbWF4dG9zdHIuYzooLnRleHQrMHhkNCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fbmVkZjInCitfZnBtYXh0b3N0ci5jOigudGV4dCsweGY4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19lcWRmMicKK19mcG1heHRvc3RyLmM6KC50ZXh0KzB4MTE0KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19kaXZkZjMnCitfZnBtYXh0b3N0ci5jOigudGV4dCsweDEyMCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fbHRkZjInCitfZnBtYXh0b3N0ci5jOigudGV4dCsweDFjNCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fbXVsZGYzJworX2ZwbWF4dG9zdHIuYzooLnRleHQrMHgzODgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX2dlZGYyJworX2ZwbWF4dG9zdHIuYzooLnRleHQrMHg0MzApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX2FkZGRmMycKK2xpYmMvbGliY19zby5hKF9fcHNmc19kb19udW1lcmljLm9zKTogSW4gZnVuY3Rpb24gYF9fcHNmc19kb19udW1lcmljJzoKK19fcHNmc19kb19udW1lcmljLmM6KC50ZXh0KzB4NTIwKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX190cnVuY2Rmc2YyJworbGliYy9saWJjX3NvLmEoc3RydG9mLm9zKTogSW4gZnVuY3Rpb24gYHN0cnRvZic6CitzdHJ0b2YuYzooLnRleHQrMHgxYyk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fZXh0ZW5kc2ZkZjInCisvaG9tZS95bW9yaW4veC10b29scy9idWlsZC9hcm1lYi11bmtub3duLWxpbnV4LXVjbGliYy9nY2MtNC4xLjEtdUNsaWJjLTAuOS4yOC4xL2NjX2NvcmVfcHJlZml4L2xpYi9nY2MvYXJtLWxpbnV4LXVjbGliYy80LjEuMS9saWJnY2MuYShfZml4dW5zZGZzaS5vKToKK0luIGZ1bmN0aW9uIGBfX2ZpeHVuc2Rmc2knOgorbGliZ2NjMi5jOigudGV4dCsweDM0KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19maXhkZnNpJworbWFrZVsyXTogKioqIFtsaWIvbGliYy5zb10gRXJyb3IgMQorbWFrZVsxXTogKioqIFtsaWIvbGliYy5zby4wXSBFcnJvciAyCittYWtlWzFdOiBMZWF2aW5nIGRpcmVjdG9yeSBgL2hvbWUveW1vcmluL3gtdG9vbHMvYnVpbGQvYXJtZWItdW5rbm93bi1saW51eC11Y2xpYmMvZ2NjLTQuMS4xLXVDbGliYy0wLjkuMjguMS9idWlsZC1saWJjJworbWFrZTogKioqIFsvaG9tZS95bW9yaW4veC10b29scy9idWlsZC9hcm1lYi11bmtub3duLWxpbnV4LXVjbGliYy9nY2MtNC4xLjEtdUNsaWJjLTAuOS4yOC4xL2J1aWxkLWxpYmMvbGliL2xpYmMuYV0KK0Vycm9yIDIKKworVGhlIHNlY29uZCBodW5rIGZpeGVzIGJ1aWxkaW5nIGZpbmFsIGdjYyBiZWNhdXNlIHNvZnQtZmxvYXQgaW1wbGllcyB1c2luZyAtbGZsb2F0ICh3aGljaCB3ZSBkb24ndCBoYXZlKS4KKworCitkaWZmIC1kdXIgZ2NjLTQuMi4wLm9yaWcvZ2NjL2NvbmZpZy5nY2MgZ2NjLTQuMi4wL2djYy9jb25maWcuZ2NjCistLS0gZ2NjLTQuMi4wLm9yaWcvZ2NjL2NvbmZpZy5nY2MJMjAwNy0wNy0xNSAxMToyNDoxOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjAvZ2NjL2NvbmZpZy5nY2MJMjAwNy0wNy0xNSAxMToyNjowMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC03MjEsNyArNzIxLDcgQEAKKyAJICAgIGRlZmF1bHRfdXNlX2N4YV9hdGV4aXQ9eWVzCisgCSAgICA7OworIAkqKQorLQkgICAgdG1ha2VfZmlsZT0iJHRtYWtlX2ZpbGUgYXJtL3QtbGludXgiCisrCSAgICB0bWFrZV9maWxlPSIkdG1ha2VfZmlsZSBhcm0vdC1saW51eCBhcm0vdC1hcm0tZWxmIgorIAkgICAgOzsKKyAJZXNhYworIAl0bV9maWxlPSIkdG1fZmlsZSBhcm0vYW91dC5oIGFybS9hcm0uaCIKK2RpZmYgLWR1ciBnY2MtNC4yLjAub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCBnY2MtNC4yLjAvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKKy0tLSBnY2MtNC4yLjAub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDA3LTA3LTE1IDExOjI0OjE4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMC9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDA3LTA3LTE1IDExOjI2OjAyLjAwMDAwMDAwMCArMDIwMAorQEAgLTYzLDcgKzYzLDcgQEAKKyAgICAle3NoYXJlZDotbGN9IFwKKyAgICAleyFzaGFyZWQ6JXtwcm9maWxlOi1sY19wfSV7IXByb2ZpbGU6LWxjfX0iCisgCistI2RlZmluZSBMSUJHQ0NfU1BFQyAiJXttc29mdC1mbG9hdDotbGZsb2F0fSAle21mbG9hdC1hYmk9c29mdCo6LWxmbG9hdH0gLWxnY2MiCisrI2RlZmluZSBMSUJHQ0NfU1BFQyAiLWxnY2MiCisgCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMS8yNjAtZmxhdHRlbi1zd2l0Y2gtc3RtdC0wMC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMjYwLWZsYXR0ZW4tc3dpdGNoLXN0bXQtMDAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM0MGM1NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMjYwLWZsYXR0ZW4tc3dpdGNoLXN0bXQtMDAucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9nY2Mvc3RtdC5jIGdjYy00LjIuMS9nY2Mvc3RtdC5jCistLS0gZ2NjLTQuMi4xLm9yaWcvZ2NjL3N0bXQuYwkyMDA3LTA3LTE5IDA1OjI1OjMyLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9nY2Mvc3RtdC5jCTIwMDctMDgtMDMgMjA6Mzc6MTkuMDAwMDAwMDAwICswMjAwCitAQCAtMjUxMiw3ICsyNTEyLDExIEBACisgCSAgdXNlX2Nvc3RfdGFibGUKKyAJICAgID0gKFRSRUVfQ09ERSAob3JpZ190eXBlKSAhPSBFTlVNRVJBTF9UWVBFCisgCSAgICAgICAmJiBlc3RpbWF0ZV9jYXNlX2Nvc3RzIChjYXNlX2xpc3QpKTsKKy0JICBiYWxhbmNlX2Nhc2Vfbm9kZXMgKCZjYXNlX2xpc3QsIE5VTEwpOworKwkgIC8qIFdoZW4gb3B0aW1pemluZyBmb3Igc2l6ZSwgd2Ugd2FudCBhIHN0cmFpZ2h0IGxpc3QgdG8gYXZvaWQKKysJICAgICBqdW1wcyBhcyBtdWNoIGFzIHBvc3NpYmxlLiBUaGlzIGJhc2ljYWxseSBjcmVhdGVzIGFuIGlmLWVsc2UKKysJICAgICBjaGFpbi4gICovCisrCSAgaWYgKCFvcHRpbWl6ZV9zaXplKQorKwkgICAgYmFsYW5jZV9jYXNlX25vZGVzICgmY2FzZV9saXN0LCBOVUxMKTsKKyAJICBlbWl0X2Nhc2Vfbm9kZXMgKGluZGV4LCBjYXNlX2xpc3QsIGRlZmF1bHRfbGFiZWwsIGluZGV4X3R5cGUpOworIAkgIGVtaXRfanVtcCAoZGVmYXVsdF9sYWJlbCk7CisgCX0KK0BAIC0zMDcwLDYgKzMwNzQsNyBAQAorIAkgICAgeworIAkgICAgICBpZiAoIW5vZGVfaGFzX2xvd19ib3VuZCAobm9kZSwgaW5kZXhfdHlwZSkpCisgCQl7CisrCQkgIGlmICghb3B0aW1pemVfc2l6ZSkgLyogZG9uJ3QgamwgdG8gdGhlIC5kZWZhdWx0X2xhYmVsLiAqLworIAkJICBlbWl0X2NtcF9hbmRfanVtcF9pbnNucyAoaW5kZXgsCisgCQkJCQkgICBjb252ZXJ0X21vZGVzCisgCQkJCQkgICAobW9kZSwgaW1vZGUsCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4xLzI3MC1zb2Z0LWZsb2F0LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMS8yNzAtc29mdC1mbG9hdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mjg3YmZhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMS8yNzAtc29mdC1mbG9hdC5wYXRjaApAQCAtMCwwICsxLDIxIEBACitkaWZmIC11TnByIGdjYy00LjIuMV9vcmlnL2djYy9jb25maWcvcnM2MDAwL2Rhcndpbi1sZG91YmxlLmMgZ2NjLTQuMi4xL2djYy9jb25maWcvcnM2MDAwL2Rhcndpbi1sZG91YmxlLmMKKy0tLSBnY2MtNC4yLjFfb3JpZy9nY2MvY29uZmlnL3JzNjAwMC9kYXJ3aW4tbGRvdWJsZS5jCTIwMDctMDMtMDUgMTE6NTQ6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgZ2NjLTQuMi4xL2djYy9jb25maWcvcnM2MDAwL2Rhcndpbi1sZG91YmxlLmMJMjAwOC0wMS0zMSAxNzo1MToyNC4wMDAwMDAwMDAgLTA1MDAKK0BAIC03MCw2ICs3MCw4IEBAIFNvZnR3YXJlIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwKKyAgICBidXQgR0NDIGN1cnJlbnRseSBnZW5lcmF0ZXMgcG9vciBjb2RlIHdoZW4gYSB1bmlvbiBpcyB1c2VkIHRvIHR1cm4KKyAgICBhIGxvbmcgZG91YmxlIGludG8gYSBwYWlyIG9mIGRvdWJsZXMuICAqLworIAorKyNpZiBkZWZpbmVkIChfU09GVF9GTE9BVCkgJiYgZGVmaW5lZCAoX19MT05HX0RPVUJMRV8xMjhfXykKKysKKyBsb25nIGRvdWJsZSBfX2djY19xYWRkIChkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpOworIGxvbmcgZG91YmxlIF9fZ2NjX3FzdWIgKGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSk7CisgbG9uZyBkb3VibGUgX19nY2NfcW11bCAoZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKTsKK0BAIC0yMTksOCArMjIxLDYgQEAgX19nY2NfcWRpdiAoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYworICAgcmV0dXJuIHoubGR2YWw7CisgfQorIAorLSNpZiBkZWZpbmVkIChfU09GVF9GTE9BVCkgJiYgZGVmaW5lZCAoX19MT05HX0RPVUJMRV8xMjhfXykKKy0KKyBsb25nIGRvdWJsZSBfX2djY19xbmVnIChkb3VibGUsIGRvdWJsZSk7CisgaW50IF9fZ2NjX3FlcSAoZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKTsKKyBpbnQgX19nY2NfcW5lIChkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMS8yODAtYWxwaGEtc2lnbmFsX2gucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4xLzI4MC1hbHBoYS1zaWduYWxfaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2UxNzk2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMS8yODAtYWxwaGEtc2lnbmFsX2gucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorLS0tIGdjYy00LjIuMS1zdG9jay9nY2MvY29uZmlnL2FscGhhL2xpbnV4LXVud2luZC5oCTIwMDUtMDYtMjQgMjA6MjI6NDEuMDAwMDAwMDAwIC0wNTAwCisrKysgZ2NjLTQuMi4xL2djYy9jb25maWcvYWxwaGEvbGludXgtdW53aW5kLmgJMjAwNy0wOS0wMSAyMDoyMTozNC4wMDAwMDAwMDAgLTA1MDAKK0BAIC0yOSw2ICsyOSw5IEBAIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAvKiBEbyBjb2RlIHJlYWRpbmcgdG8gaWRlbnRpZnkgYSBzaWduYWwgZnJhbWUsIGFuZCBzZXQgdGhlIGZyYW1lCisgICAgc3RhdGUgZGF0YSBhcHByb3ByaWF0ZWx5LiAgU2VlIHVud2luZC1kdzIuYyBmb3IgdGhlIHN0cnVjdHMuICAqLworIAorKy8qIERvbid0IHVzZSB0aGlzIGlmIGluaGliaXRfbGliYyBpcyBzZXQKKysgICBUaGUgYnVpbGQgZm9yIHRoaXMgdGFyZ2V0IHdpbGwgZmFpbCB0cnlpbmcgdG8gaW5jbHVkZSBtaXNzaW5nIGhlYWRlcnMgKi8KKysjaWZuZGVmIGluaGliaXRfbGliYworICNpbmNsdWRlIDxzaWduYWwuaD4KKyAjaW5jbHVkZSA8c3lzL3Vjb250ZXh0Lmg+CisgCitAQCAtODAsMyArODMsNCBAQCBhbHBoYV9mYWxsYmFja19mcmFtZV9zdGF0ZSAoc3RydWN0IF9VbndpCisgICBmcy0+cmV0YWRkcl9jb2x1bW4gPSA2NDsKKyAgIHJldHVybiBfVVJDX05PX1JFQVNPTjsKKyB9CisrI2VuZGlmIC8qIGluaGliaXRfbGliYyAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMS8yOTAtc2gtd2l0aG91dC1oZWFkZXJzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMS8yOTAtc2gtd2l0aG91dC1oZWFkZXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZGRiNjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4xLzI5MC1zaC13aXRob3V0LWhlYWRlcnMucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorT24gMjAwODEwMTEsIEtoZW0gUkFKIHdyaXRlczoKKyBZb3UgaGF2ZSB0byBiYXIgZ2NjIHRyeWluZyB0byBidWlsZCB1bndpbmRpbmcgYXQgc3RhZ2UgMS4gVHJ5IHRoZQorIGF0dGFjaGVkIHBhdGNoIGFuZCBzZWUgaWYgaXQgaGVscHMuCisKKyBnY2MvY29uZmlnL3NoL2xpbnV4LXVud2luZC5oIHwgICAgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK0luZGV4OiBnY2MtNF8yLWJyYW5jaC9nY2MvY29uZmlnL3NoL2xpbnV4LXVud2luZC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTRfMi1icmFuY2gub3JpZy9nY2MvY29uZmlnL3NoL2xpbnV4LXVud2luZC5oCTIwMDgtMDctMDEgMTc6MjQ6NDAuMDAwMDAwMDAwIC0wNzAwCisrKysgZ2NjLTRfMi1icmFuY2gvZ2NjL2NvbmZpZy9zaC9saW51eC11bndpbmQuaAkyMDA4LTA3LTAxIDE3OjI1OjQ3LjAwMDAwMDAwMCAtMDcwMAorQEAgLTI2LDYgKzI2LDggQEAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDTworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworIAorKyNpZm5kZWYgaW5oaWJpdF9saWJjCisrCisgLyogRG8gY29kZSByZWFkaW5nIHRvIGlkZW50aWZ5IGEgc2lnbmFsIGZyYW1lLCBhbmQgc2V0IHRoZSBmcmFtZQorICAgIHN0YXRlIGRhdGEgYXBwcm9wcmlhdGVseS4gIFNlZSB1bndpbmQtZHcyLmMgZm9yIHRoZSBzdHJ1Y3RzLiAgKi8KKyAKK0BAIC0yNTEsMyArMjUzLDQgQEAgc2hfZmFsbGJhY2tfZnJhbWVfc3RhdGUgKHN0cnVjdCBfVW53aW5kXworICAgcmV0dXJuIF9VUkNfTk9fUkVBU09OOworIH0KKyAjZW5kaWYgLyogZGVmaW5lZCAoX19TSDVfXykgKi8KKysjZW5kaWYgLyogaWZuZGVmIGluaGliaXRfbGliYyAqLworCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4xLzMwMC1saWJzdGRjKystbm9zdGRsaWItbGlua2luZy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMzAwLWxpYnN0ZGMrKy1ub3N0ZGxpYi1saW5raW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NThmMWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4xLzMwMC1saWJzdGRjKystbm9zdGRsaWItbGlua2luZy5wYXRjaApAQCAtMCwwICsxLDIxIEBACitPbiAyMDA5MDQwMSwgVGVkIEpvcmRhbiB3cml0ZXM6CisgVGhlIGdlbmVyYXRlZCBsaWJ0b29sIGZvciBidWlsZGluZyBsaWJzdGRjKysgYWRkcyB0aGUgLW5vc3RkbGliIG9wdGlvbiB0byB0aGUKKyBnKysgY29tbWFuZCBmb3IgbGlua2luZyBidXQgZG9lc24ndCBhZGQgLWxnY2MuICBUaGlzIGNhdXNlcyBhICJoaWRkZW4gc3ltYm9sIgorIGVycm9yIHdoZW4gbGlua2luZyBhZ2FpbnN0IHRoZSBsaWJzdGRjKysgc2hhcmVkIG9iamVjdC4gIFRoaXMgcGF0Y2ggYWRkcyBnY2MKKyB0byB0aGUgbGlzdCBvZiBsaWJyYXJpZXMgbGlua2VkIGFnYWluc3Qgd2hlbiBsaW5raW5nIGxpYnN0ZGMrKy4KKworSW5kZXg6IGdjYy00LjIuMS9sdGNmLWN4eC5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjIuMS5vcmlnL2x0Y2YtY3h4LnNoCTIwMDUtMDctMTUgMjE6MzA6NTMuMDAwMDAwMDAwIC0wNTAwCisrKysgZ2NjLTQuMi4xL2x0Y2YtY3h4LnNoCTIwMDktMDQtMDIgMDk6MzA6MzQuMDAwMDAwMDAwIC0wNTAwCitAQCAtNzgsOCArNzgsOCBAQAorICAgIyB0byBiZSB0aGUgc2FtZS4KKyAKKyAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKy0gICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1sZ2NjICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLWxnY2MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAKKyAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4xLzMxMC1saWJnY2NfZWguYS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjEvMzEwLWxpYmdjY19laC5hLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwOWRiM2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4xLzMxMC1saWJnY2NfZWguYS5wYXRjaApAQCAtMCwwICsxLDMyIEBACitWYW1waXJpc2VkIGZyb206CisgIGh0dHA6Ly9sYW5kbGV5Lm5ldC9oZy9hYm9yaWdpbmFsL2ZpbGUvN2UwNzQ3YTY2NWFiL3NvdXJjZXMvcGF0Y2hlcy9nY2MtY29yZS1saWJnY2NlaC5wYXRjaAorCitkaWZmIC1kdXJOIGdjYy00LjIuMi5vcmlnL2djYy9ta2xpYmdjYy5pbiBnY2MtNC4yLjIvZ2NjL21rbGliZ2NjLmluCistLS0gZ2NjLTQuMi4yLm9yaWcvZ2NjL21rbGliZ2NjLmluCTIwMDYtMDctMDQgMjI6MjA6MDEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4yL2djYy9ta2xpYmdjYy5pbgkyMDExLTA4LTMxIDE2OjI0OjAzLjY3NDY5MDAxNiArMDIwMAorQEAgLTIyMyw4ICsyMjMsOCBAQAorICAgaWYgWyAiJExJQlVOV0lORCIgXTsgdGhlbgorICAgICBsaWJ1bndpbmRfYT0kZGlyL2xpYnVud2luZC5hCisgICBmaQorKyAgbGliZ2NjX2VoX2E9JGRpci9saWJnY2NfZWguYQorICAgaWYgWyAiJFNITElCX0xJTksiIF07IHRoZW4KKy0gICAgbGliZ2NjX2VoX2E9JGRpci9saWJnY2NfZWguYQorICAgICBsaWJnY2Nfc19zbz0kZGlyL2xpYmdjY19zJHtTSExJQl9FWFR9CisgICAgIGlmIFsgIiRMSUJVTldJTkQiIF07IHRoZW4KKyAgICAgICBsaWJ1bndpbmRfc289JGRpci9saWJ1bndpbmQke1NITElCX0VYVH0KK0BAIC04ODksMTEgKzg4OSwxMSBAQAorICAgZWNobyAnCWNobW9kIDY0NCcgICR7bGRpcn0vbGliZ2Nvdi5hCisgICBlY2hvICcJJChSQU5MSUJfRk9SX1RBUkdFVCknICR7bGRpcn0vbGliZ2Nvdi5hCisgCistICBpZiBbICIkU0hMSUJfTElOSyIgXTsgdGhlbgorLSAgICBlY2hvICcJJChJTlNUQUxMX0RBVEEpJyAke2Rpcn0vbGliZ2NjX2VoLmEgJHtsZGlyfS8KKy0gICAgZWNobyAnCWNobW9kIDY0NCcgICR7bGRpcn0vbGliZ2NjX2VoLmEKKy0gICAgZWNobyAnCSQoUkFOTElCX0ZPUl9UQVJHRVQpJyAke2xkaXJ9L2xpYmdjY19laC5hCisrICBlY2hvICcJJChJTlNUQUxMX0RBVEEpJyAke2Rpcn0vbGliZ2NjX2VoLmEgJHtsZGlyfS8KKysgIGVjaG8gJwljaG1vZCA2NDQnICAke2xkaXJ9L2xpYmdjY19laC5hCisrICBlY2hvICcJJChSQU5MSUJfRk9SX1RBUkdFVCknICR7bGRpcn0vbGliZ2NjX2VoLmEKKyAKKysgIGlmIFsgIiRTSExJQl9MSU5LIiBdOyB0aGVuCisgICAgIHNobGliX3NsaWJkaXJfcXVhbD0KKyAgICAgb3NfbXVsdGlsaWJfZGlyPWAkR0NDX0ZPUl9UQVJHRVQgJGZsYWdzIC0tcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5YAorICAgICBpZiBbICIkb3NfbXVsdGlsaWJfZGlyIiAhPSAuIF07IHRoZW4KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjIvMTAwLXVjbGliYy1jb25mLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMi8xMDAtdWNsaWJjLWNvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI2MWRhZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjIvMTAwLXVjbGliYy1jb25mLnBhdGNoCkBAIC0wLDAgKzEsMjE2IEBACitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2JvZWhtLWdjL2NvbmZpZ3VyZSBnY2MtNC4yLjEvYm9laG0tZ2MvY29uZmlndXJlCistLS0gZ2NjLTQuMi4xLm9yaWcvYm9laG0tZ2MvY29uZmlndXJlCTIwMDctMDctMTkgMTY6MzM6NTYuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2JvZWhtLWdjL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjI5OjIyLjAwMDAwMDAwMCArMDIwMAorQEAgLTQzMjMsNyArNDMyMyw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2ggZ2NjLTQuMi4xL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAorLS0tIGdjYy00LjIuMS5vcmlnL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAkyMDA1LTA4LTE1IDAyOjQxOjMxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMDUsNiArMTA1LDEwIEBACisgIHRoZW4KKyAgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCisgICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQorK2VsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCAtYSAkSF9SRUFMX1RBUkdFVCA9IGk2ODYtcGMtbGludXgtdWNsaWJjIF0KKysgdGhlbgorKyAgbWFrZSBhbGwtZ2RiIGFsbC1kZWphZ251IGFsbC1sZCB8fCBleGl0IDEKKysgIG1ha2UgaW5zdGFsbC1nZGIgaW5zdGFsbC1kZWphZ251IGluc3RhbGwtbGQgfHwgZXhpdCAxCisgZWxpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIF0gOyB0aGVuCisgICBtYWtlIGJvb3RzdHJhcCB8fCBleGl0IDEKKyAgIG1ha2UgaW5zdGFsbCB8fCBleGl0IDEKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvZ2NjL2NvbmZpZy9jcmlzL2xpbnV4LmggZ2NjLTQuMi4xL2djYy9jb25maWcvY3Jpcy9saW51eC5oCistLS0gZ2NjLTQuMi4xLm9yaWcvZ2NjL2NvbmZpZy9jcmlzL2xpbnV4LmgJMjAwNi0wMi0xOCAxMjoxMjo1MS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvZ2NjL2NvbmZpZy9jcmlzL2xpbnV4LmgJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC03NCw3ICs3NCwxMSBAQAorICNkZWZpbmUgQ1JJU19ERUZBVUxUX0NQVV9WRVJTSU9OIENSSVNfQ1BVX05HCisgCisgI3VuZGVmIENSSVNfU1VCVEFSR0VUX1ZFUlNJT04KKy0jZGVmaW5lIENSSVNfU1VCVEFSR0VUX1ZFUlNJT04gIiAtIGNyaXMtYXhpcy1saW51eC1nbnUiCisrI2lmIFVDTElCQ19ERUZBVUxUCisrIyBkZWZpbmUgQ1JJU19TVUJUQVJHRVRfVkVSU0lPTiAiIC0gY3Jpcy1heGlzLWxpbnV4LXVjbGliYyIKKysjZWxzZQorKyMgZGVmaW5lIENSSVNfU1VCVEFSR0VUX1ZFUlNJT04gIiAtIGNyaXMtYXhpcy1saW51eC1nbnUiCisrI2VuZGlmCisgCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC5zby4xIgorIAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJmZmkvY29uZmlndXJlIGdjYy00LjIuMS9saWJmZmkvY29uZmlndXJlCistLS0gZ2NjLTQuMi4xLm9yaWcvbGliZmZpL2NvbmZpZ3VyZQkyMDA3LTA3LTE5IDE2OjMzOjU2LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJmZmkvY29uZmlndXJlCTIwMDctMDgtMDMgMjA6Mjk6MjIuMDAwMDAwMDAwICswMjAwCitAQCAtMzQ2MCw3ICszNDYwLDcgQEAKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgqKQorICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgIDs7CisgCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZSBnY2MtNC4yLjEvbGliZ2ZvcnRyYW4vY29uZmlndXJlCistLS0gZ2NjLTQuMi4xLm9yaWcvbGliZ2ZvcnRyYW4vY29uZmlndXJlCTIwMDctMDctMTkgMTY6MzM6NTYuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjI5OjIyLjAwMDAwMDAwMCArMDIwMAorQEAgLTM3MjEsNyArMzcyMSw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJnb21wL2NvbmZpZ3VyZSBnY2MtNC4yLjEvbGliZ29tcC9jb25maWd1cmUKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJnb21wL2NvbmZpZ3VyZQkyMDA3LTA3LTE5IDE2OjMzOjU2LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJnb21wL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjI5OjIyLjAwMDAwMDAwMCArMDIwMAorQEAgLTM4OTMsNyArMzg5Myw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJqYXZhL2NsYXNzcGF0aC9jb25maWd1cmUgZ2NjLTQuMi4xL2xpYmphdmEvY2xhc3NwYXRoL2NvbmZpZ3VyZQorLS0tIGdjYy00LjIuMS5vcmlnL2xpYmphdmEvY2xhc3NwYXRoL2NvbmZpZ3VyZQkyMDA3LTAxLTE3IDE5OjEwOjI2LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9saWJqYXZhL2NsYXNzcGF0aC9jb25maWd1cmUJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC01MzA3LDcgKzUzMDcsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcgZ2NjLTQuMi4xL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCistLS0gZ2NjLTQuMi4xLm9yaWcvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcJMjAwNi0wOC0wNyAyMjozNzo1MC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC02MDMsNyArNjAzLDcgQEAKKyAKKyAjIFRyYW5zZm9ybSBsaW51eCogdG8gKi0qLWxpbnV4LWdudSosIHRvIHN1cHBvcnQgb2xkIGNvbmZpZ3VyZSBzY3JpcHRzLgorIGNhc2UgJGhvc3Rfb3MgaW4KKy1saW51eC1nbnUqKSA7OworK2xpbnV4LWdudSp8bGludXgtdWNsaWJjKikgOzsKKyBsaW51eCopIGhvc3Q9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoLiotLiotbGludXhcKVwoLipcKSQvXDEtZ251XDIvJ2AKKyBlc2FjCisgCitAQCAtMTI1MSw3ICsxMjUxLDcgQEAKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgqKQorICAgdmVyc2lvbl90eXBlPWxpbnV4CisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIG5lZWRfdmVyc2lvbj1ubworZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJqYXZhL2NvbmZpZ3VyZSBnY2MtNC4yLjEvbGliamF2YS9jb25maWd1cmUKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJqYXZhL2NvbmZpZ3VyZQkyMDA3LTA3LTE5IDE2OjMzOjU2LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJqYXZhL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjI5OjIyLjAwMDAwMDAwMCArMDIwMAorQEAgLTU0MjQsNyArNTQyNCw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJtdWRmbGFwL2NvbmZpZ3VyZSBnY2MtNC4yLjEvbGlibXVkZmxhcC9jb25maWd1cmUKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJtdWRmbGFwL2NvbmZpZ3VyZQkyMDA2LTEyLTA0IDEyOjEzOjA3LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9saWJtdWRmbGFwL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjI5OjIyLjAwMDAwMDAwMCArMDIwMAorQEAgLTUzOTQsNyArNTM5NCw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJvYmpjL2NvbmZpZ3VyZSBnY2MtNC4yLjEvbGlib2JqYy9jb25maWd1cmUKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJvYmpjL2NvbmZpZ3VyZQkyMDA2LTEwLTE1IDA5OjQyOjU3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJvYmpjL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjI5OjIyLjAwMDAwMDAwMCArMDIwMAorQEAgLTMzMTQsNyArMzMxNCw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzc3AvY29uZmlndXJlIGdjYy00LjIuMS9saWJzc3AvY29uZmlndXJlCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3NwL2NvbmZpZ3VyZQkyMDA2LTEwLTE1IDA5OjQyOjU3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzc3AvY29uZmlndXJlCTIwMDctMDgtMDMgMjA6Mjk6MjIuMDAwMDAwMDAwICswMjAwCitAQCAtNDQ4MCw3ICs0NDgwLDcgQEAKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgqKQorICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgIDs7CisgCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWd1cmUgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWd1cmUKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlndXJlCTIwMDctMDYtMjkgMDE6MDI6MDUuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWd1cmUJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC00MjgzLDcgKzQyODMsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlidG9vbC5tNCBnY2MtNC4yLjEvbGlidG9vbC5tNAorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnRvb2wubTQJMjAwNS0wNy0xNiAwNDozMDo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlidG9vbC5tNAkyMDA3LTA4LTAzIDIwOjI5OjIyLjAwMDAwMDAwMCArMDIwMAorQEAgLTczOSw3ICs3MzksNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbHRjb25maWcgZ2NjLTQuMi4xL2x0Y29uZmlnCistLS0gZ2NjLTQuMi4xLm9yaWcvbHRjb25maWcJMjAwNy0wMi0xNCAxODowODozNS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbHRjb25maWcJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC02MDMsNyArNjAzLDcgQEAKKyAKKyAjIFRyYW5zZm9ybSBsaW51eCogdG8gKi0qLWxpbnV4LWdudSosIHRvIHN1cHBvcnQgb2xkIGNvbmZpZ3VyZSBzY3JpcHRzLgorIGNhc2UgJGhvc3Rfb3MgaW4KKy1saW51eC1nbnUqKSA7OworK2xpbnV4LWdudSp8bGludXgtdWNsaWJjKikgOzsKKyBsaW51eCopIGhvc3Q9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoLiotLiotbGludXhcKVwoLipcKSQvXDEtZ251XDIvJ2AKKyBlc2FjCisgCitAQCAtMTI1MSw3ICsxMjUxLDcgQEAKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgqKQorICAgdmVyc2lvbl90eXBlPWxpbnV4CisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIG5lZWRfdmVyc2lvbj1ubworZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy96bGliL2NvbmZpZ3VyZSBnY2MtNC4yLjEvemxpYi9jb25maWd1cmUKKy0tLSBnY2MtNC4yLjEub3JpZy96bGliL2NvbmZpZ3VyZQkyMDA3LTAxLTE3IDE5OjEwOjI2LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS96bGliL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjI5OjIyLjAwMDAwMDAwMCArMDIwMAorQEAgLTM0MjksNyArMzQyOSw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMi8xMTAtdWNsaWJjLWNvbmYtbm91cHN0cmVhbS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjIvMTEwLXVjbGliYy1jb25mLW5vdXBzdHJlYW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMyMzlkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjIvMTEwLXVjbGliYy1jb25mLW5vdXBzdHJlYW0ucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9nY2MvY29uZmlnLmdjYyBnY2MtNC4yLjEvZ2NjL2NvbmZpZy5nY2MKKy0tLSBnY2MtNC4yLjEub3JpZy9nY2MvY29uZmlnLmdjYwkyMDA3LTAyLTAzIDA2OjI1OjIwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9nY2MvY29uZmlnLmdjYwkyMDA3LTA4LTAzIDIwOjI5OjUyLjAwMDAwMDAwMCArMDIwMAorQEAgLTE5NjQsNyArMTk2NCw3IEBACisgICAgICAgICA7OworIHNoLSotZWxmKiB8IHNoWzEyMzQ2bF0qLSotZWxmKiB8IHNoKi0qLWthb3MqIHwgXAorIHNoLSotc3ltYmlhbmVsZiogfCBzaFsxMjM0NmxdKi0qLXN5bWJpYW5lbGYqIHwgXAorLSAgc2gtKi1saW51eCogfCBzaFszNDZsYmVdKi0qLWxpbnV4KiB8IFwKKysgIHNoKi0qLWxpbnV4KiB8IHNoWzM0NmxiZV0qLSotbGludXgqIHwgXAorICAgc2gtKi1uZXRic2RlbGYqIHwgc2hsKi0qLW5ldGJzZGVsZiogfCBzaDUtKi1uZXRic2QqIHwgc2g1bCotKi1uZXRic2QqIHwgXAorICAgIHNoNjQtKi1uZXRic2QqIHwgc2g2NGwqLSotbmV0YnNkKikKKyAJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSBzaC90LXNoIHNoL3QtZWxmIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMi8xMjAtdWNsaWJjLWxvY2FsZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjIvMTIwLXVjbGliYy1sb2NhbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk4YzUwNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjIvMTIwLXVjbGliYy1sb2NhbGUucGF0Y2gKQEAgLTAsMCArMSwyODA2IEBACitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CTIwMDctMDYtMjkgMDE6MDI6MDUuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMzM0LDcgKzEzMzQsNyBAQAorIEFDX0RFRlVOKFtHTElCQ1hYX0VOQUJMRV9DTE9DQUxFXSwgWworICAgR0xJQkNYWF9FTkFCTEUoY2xvY2FsZSxhdXRvLFtAPDpAPU1PREVMQDo+QF0sCisgICAgIFt1c2UgTU9ERUwgZm9yIHRhcmdldCBsb2NhbGUgcGFja2FnZV0sCistICAgIFtwZXJtaXQgZ2VuZXJpY3xnbnV8aWVlZV8xMDAzLjEtMjAwMXx5ZXN8bm98YXV0b10pCisrICAgIFtwZXJtaXQgZ2VuZXJpY3xnbnV8aWVlZV8xMDAzLjEtMjAwMXx1Y2xpYmN8eWVzfG5vfGF1dG9dKQorIAorICAgIyBEZWFsIHdpdGggZ2V0dGV4dCBpc3N1ZXMuICBEZWZhdWx0IHRvIG5vdCB1c2luZyBpdCAoPW5vKSB1bnRpbCB3ZSBkZXRlY3QKKyAgICMgc3VwcG9ydCBmb3IgaXQgbGF0ZXIuICBMZXQgdGhlIHVzZXIgdHVybiBpdCBvZmYgdmlhIC0tZS9kLCBidXQgbGV0IHRoYXQKK0BAIC0xMzU1LDYgKzEzNTUsOSBAQAorICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCisrICAgICAgKi11Y2xpYmMqKQorKyAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz11Y2xpYmMKKysgICAgICAgIDs7CisgICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCisgICAgICAgICBlbmFibGVfY2xvY2FsZV9mbGFnPWdudQkKKyAgICAgICAgIDs7CitAQCAtMTUyNiw2ICsxNTI5LDQwIEBACisgICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5jYworICAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvYysrbG9jYWxlX2ludGVybmFsLmgKKyAgICAgICA7OworKyAgICB1Y2xpYmMpCisrICAgICAgQUNfTVNHX1JFU1VMVCh1Y2xpYmMpCisrCisrICAgICAgIyBEZWNsYXJlIGludGVudGlvbiB0byB1c2UgZ2V0dGV4dCwgYW5kIGFkZCBzdXBwb3J0IGZvciBzcGVjaWZpYworKyAgICAgICMgbGFuZ3VhZ2VzLgorKyAgICAgICMgRm9yIHNvbWUgcmVhc29uLCBBTExfTElOR1VBUyBoYXMgdG8gYmUgYmVmb3JlIEFNLUdOVS1HRVRURVhUCisrICAgICAgQUxMX0xJTkdVQVM9ImRlIGZyIgorKworKyAgICAgICMgRG9uJ3QgY2FsbCBBTS1HTlUtR0VUVEVYVCBoZXJlLiBJbnN0ZWFkLCBhc3N1bWUgZ2xpYmMuCisrICAgICAgQUNfQ0hFQ0tfUFJPRyhjaGVja19tc2dmbXQsIG1zZ2ZtdCwgeWVzLCBubykKKysgICAgICBpZiB0ZXN0IHgiJGNoZWNrX21zZ2ZtdCIgPSB4InllcyIgJiYgdGVzdCB4IiRlbmFibGVfbmxzIiA9IHgieWVzIjsgdGhlbgorKyAgICAgICAgVVNFX05MUz15ZXMKKysgICAgICBmaQorKyAgICAgICMgRXhwb3J0IHRoZSBidWlsZCBvYmplY3RzLgorKyAgICAgIGZvciBsaW5nIGluICRBTExfTElOR1VBUzsgZG8gXAorKyAgICAgICAgZ2xpYmN4eF9NT0ZJTEVTPSIkZ2xpYmN4eF9NT0ZJTEVTICRsaW5nLm1vIjsgXAorKyAgICAgICAgZ2xpYmN4eF9QT0ZJTEVTPSIkZ2xpYmN4eF9QT0ZJTEVTICRsaW5nLnBvIjsgXAorKyAgICAgIGRvbmUKKysgICAgICBBQ19TVUJTVChnbGliY3h4X01PRklMRVMpCisrICAgICAgQUNfU1VCU1QoZ2xpYmN4eF9QT0ZJTEVTKQorKworKyAgICAgIENMT0NBTEVfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrICAgICAgQ0xPQ0FMRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKyAgICAgIENDT0RFQ1ZUX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworKyAgICAgIENDT0xMQVRFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworKyAgICAgIENDVFlQRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrICAgICAgQ01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrICAgICAgQ01FU1NBR0VTX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKysgICAgICBDTU9ORVlfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKyAgICAgIENOVU1FUklDX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKyAgICAgIENUSU1FX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysgICAgICA7OworICAgZXNhYworIAorICAgIyBUaGlzIGlzIHdoZXJlIHRoZSB0ZXN0c3VpdGUgbG9va3MgZm9yIGxvY2FsZSBjYXRhbG9ncywgdXNpbmcgdGhlCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxNjAgQEAKKysvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxjZXJybm8+ICAvLyBGb3IgZXJybm8KKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxzdGRleGNlcHQ+CisrI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3N0cnRvbF9sKFMsIEUsIEIsIEwpICAgICAgc3RydG9sKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvdWxfbChTLCBFLCBCLCBMKSAgICAgc3RydG91bCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b2xsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvbGwoKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG91bGxfbChTLCBFLCBCLCBMKSAgICBzdHJ0b3VsbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKysjZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCisrI2RlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKysjd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworKyNkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKysjZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkIAorK3sKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGZsb2F0JiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fZjsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCAKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fZDsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBsb25nIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19sZDsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB2b2lkCisrICBsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsIAorKwkJCQkgICAgX19jX2xvY2FsZSBfX29sZCkKKysgIHsKKysgICAgX19jbG9jID0gX19uZXdsb2NhbGUoMSA8PCBMQ19BTEwsIF9fcywgX19vbGQpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIGlmICghX19jbG9jKQorKyAgICAgIHsKKysJLy8gVGhpcyBuYW1lZCBsb2NhbGUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgdW5kZXJseWluZyBPUy4KKysJX190aHJvd19ydW50aW1lX2Vycm9yKF9fTigibG9jYWxlOjpmYWNldDo6X1NfY3JlYXRlX2NfbG9jYWxlICIKKysJCQkgICAgICAibmFtZSBub3QgdmFsaWQiKSk7CisrICAgICAgfQorKyNlbmRpZgorKyAgfQorKyAgCisrICB2b2lkCisrICBsb2NhbGU6OmZhY2V0OjpfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKysgIHsKKysgICAgaWYgKF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKKysgICAgICBfX2ZyZWVsb2NhbGUoX19jbG9jKTsgCisrICB9CisrCisrICBfX2NfbG9jYWxlCisrICBsb2NhbGU6OmZhY2V0OjpfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICB7IHJldHVybiBfX2R1cGxvY2FsZShfX2Nsb2MpOyB9CisrfSAvLyBuYW1lc3BhY2Ugc3RkCisrCisrbmFtZXNwYWNlIF9fZ251X2N4eAorK3sKKysgIGNvbnN0IGNoYXIqIGNvbnN0IGNhdGVnb3J5X25hbWVzWzYgKyBfR0xJQkNYWF9OVU1fQ0FURUdPUklFU10gPQorKyAgICB7CisrICAgICAgIkxDX0NUWVBFIiwgCisrICAgICAgIkxDX05VTUVSSUMiLAorKyAgICAgICJMQ19USU1FIiwgCisrICAgICAgIkxDX0NPTExBVEUiLCAKKysgICAgICAiTENfTU9ORVRBUlkiLAorKyAgICAgICJMQ19NRVNTQUdFUyIsIAorKyNpZiBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAhPSAwCisrICAgICAgIkxDX1BBUEVSIiwgCisrICAgICAgIkxDX05BTUUiLCAKKysgICAgICAiTENfQUREUkVTUyIsCisrICAgICAgIkxDX1RFTEVQSE9ORSIsIAorKyAgICAgICJMQ19NRUFTVVJFTUVOVCIsIAorKyAgICAgICJMQ19JREVOVElGSUNBVElPTiIgCisrI2VuZGlmCisrICAgIH07CisrfQorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICBjb25zdCBjaGFyKiBjb25zdCogY29uc3QgbG9jYWxlOjpfU19jYXRlZ29yaWVzID0gX19nbnVfY3h4OjpjYXRlZ29yeV9uYW1lczsKKyt9ICAvLyBuYW1lc3BhY2Ugc3RkCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDExNyBAQAorKy8vIFdyYXBwZXIgZm9yIHVuZGVybHlpbmcgQy1sYW5ndWFnZSBsb2NhbGl6YXRpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi44ICBTdGFuZGFyZCBsb2NhbGUgY2F0ZWdvcmllcy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2lmbmRlZiBfQ19MT0NBTEVfSAorKyNkZWZpbmUgX0NfTE9DQUxFX0ggMQorKworKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKysKKysjaW5jbHVkZSA8Y3N0cmluZz4gICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnN0cmxlbgorKyNpbmNsdWRlIDxjc3RkaW8+ICAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c25wcmludGYgb3Igc3RkOjpzcHJpbnRmCisrI2luY2x1ZGUgPGNsb2NhbGU+CisrI2luY2x1ZGUgPGxhbmdpbmZvLmg+CQkvLyBGb3IgY29kZWN2dAorKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyNpbmNsdWRlIDxpY29udi5oPgkJLy8gRm9yIGNvZGVjdnQgdXNpbmcgaWNvbnYsIGljb252X3QKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKysjaW5jbHVkZSA8bGliaW50bC5oPiAJCS8vIEZvciBtZXNzYWdlcworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIHdoYXQgaXMgX0dMSUJDWFhfQ19MT0NBTEVfR05VIGZvcgorKyNlbmRpZgorKyNkZWZpbmUgX0dMSUJDWFhfQ19MT0NBTEVfR05VIDEKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggY2F0ZWdvcmllcworKyNlbmRpZgorKy8vICNkZWZpbmUgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgNgorKyNkZWZpbmUgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgMAorKyAKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworK25hbWVzcGFjZSBfX2dudV9jeHgKKyt7CisrICBleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisrfQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgIHR5cGVkZWYgX19sb2NhbGVfdAkJX19jX2xvY2FsZTsKKysjZWxzZQorKyAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKysjZW5kaWYKKysKKysgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIF9UdiB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKysgIC8vIHN0cmluZy4gIElmIHNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKysgIC8vIHRoZSB1bnNhZmUgc3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisrICAvLyBiZSBhdm9pZGVkLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgorKyAgICBpbnQKKysgICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwgCisrCQkgICAgIGNvbnN0IGludCBfX3NpemUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKKysJCSAgICAgY29uc3QgY2hhciogX19mbXQsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fcHJlYykKKysgICAgeworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fY2xvYyk7CisrI2Vsc2UKKysJCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMpCisrICAgIHsKKysjIGlmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fb2xkKSArIDFdOworKyAgICAgIHN0ZDo6c3RyY3B5KF9fc2F2LCBfX29sZCk7CisrICAgICAgc3RkOjpzZXRsb2NhbGUoTENfQUxMLCAiQyIpOworKyMgZW5kaWYKKysjZW5kaWYKKysKKysgICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7CisrI2VsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisrI2VuZGlmCisrICAgICAgcmV0dXJuIF9fcmV0OworKyAgICB9CisrfQorKworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNjMgQEAKKysvLyBQcm90b3R5cGVzIGZvciBHTElCQyB0aHJlYWQgbG9jYWxlIF9fLXByZWZpeGVkIGZ1bmN0aW9ucyAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLyBXcml0dGVuIGJ5IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisrI2luY2x1ZGUgPGNsb2NhbGU+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgY2xlYW4gdGhpcyB1cAorKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKytleHRlcm4gIkMiIF9fdHlwZW9mKG5sX2xhbmdpbmZvX2wpIF9fbmxfbGFuZ2luZm9fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cmNvbGxfbCkgX19zdHJjb2xsX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJmdGltZV9sKSBfX3N0cmZ0aW1lX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2RfbCkgX19zdHJ0b2RfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvZl9sKSBfX3N0cnRvZl9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9sZF9sKSBfX3N0cnRvbGRfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnhmcm1fbCkgX19zdHJ4ZnJtX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihuZXdsb2NhbGUpIF9fbmV3bG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YoZnJlZWxvY2FsZSkgX19mcmVlbG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YoZHVwbG9jYWxlKSBfX2R1cGxvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrZXh0ZXJuICJDIiBfX3R5cGVvZihpc3djdHlwZV9sKSBfX2lzd2N0eXBlX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih0b3dsb3dlcl9sKSBfX3Rvd2xvd2VyX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih0b3d1cHBlcl9sKSBfX3Rvd3VwcGVyX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3Njb2xsX2wpIF9fd2NzY29sbF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzZnRpbWVfbCkgX193Y3NmdGltZV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzeGZybV9sKSBfX3djc3hmcm1fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjdHlwZV9sKSBfX3djdHlwZV9sOworKyNlbmRpZiAKKysKKysjZW5kaWYgLy8gR0xJQkMgMi4zIGFuZCBsYXRlcgorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDMwNiBAQAorKy8vIHN0ZDo6Y29kZWN2dCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS41IC0gVGVtcGxhdGUgY2xhc3MgY29kZWN2dAorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBTcGVjaWFsaXphdGlvbnMuCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLCAKKysJIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorKwkgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKKysJIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAorKyAgeworKyAgICByZXN1bHQgX19yZXQgPSBvazsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIHdjc25ydG9tYnMgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2UgZmFsbCBiYWNrIHRvIHdjcnRvbWIgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KKysgICAgLy8gTkI6IHdjc25ydG9tYnMgaXMgYSBHTlUgZXh0ZW5zaW9uCisrICAgIGZvciAoX19mcm9tX25leHQgPSBfX2Zyb20sIF9fdG9fbmV4dCA9IF9fdG87CisrCSBfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX190b19uZXh0IDwgX190b19lbmQKKysJICYmIF9fcmV0ID09IG9rOykKKysgICAgICB7CisrCWNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kID0gd21lbWNocihfX2Zyb21fbmV4dCwgTCdcMCcsCisrCQkJCQkJICAgICAgX19mcm9tX2VuZCAtIF9fZnJvbV9uZXh0KTsKKysJaWYgKCFfX2Zyb21fY2h1bmtfZW5kKQorKwkgIF9fZnJvbV9jaHVua19lbmQgPSBfX2Zyb21fZW5kOworKworKwlfX2Zyb20gPSBfX2Zyb21fbmV4dDsKKysJY29uc3Qgc2l6ZV90IF9fY29udiA9IHdjc25ydG9tYnMoX190b19uZXh0LCAmX19mcm9tX25leHQsCisrCQkJCQkgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbV9uZXh0LAorKwkJCQkJIF9fdG9fZW5kIC0gX190b19uZXh0LCAmX19zdGF0ZSk7CisrCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisrCSAgeworKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKKysJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKysJICAgIC8vIHdjcnRvbWIuCisrCSAgICBmb3IgKDsgX19mcm9tIDwgX19mcm9tX25leHQ7ICsrX19mcm9tKQorKwkgICAgICBfX3RvX25leHQgKz0gd2NydG9tYihfX3RvX25leHQsICpfX2Zyb20sICZfX3RtcF9zdGF0ZSk7CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCSAgICBfX3JldCA9IGVycm9yOworKwkgIH0KKysJZWxzZSBpZiAoX19mcm9tX25leHQgJiYgX19mcm9tX25leHQgPCBfX2Zyb21fY2h1bmtfZW5kKQorKwkgIHsKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb21fY2h1bmtfZW5kOworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICB9CisrCisrCWlmIChfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX19yZXQgPT0gb2spCisrCSAgeworKwkgICAgZXh0ZXJuX3R5cGUgX19idWZbTUJfTEVOX01BWF07CisrCSAgICBfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7CisrCSAgICBjb25zdCBzaXplX3QgX19jb252ID0gd2NydG9tYihfX2J1ZiwgKl9fZnJvbV9uZXh0LCAmX190bXBfc3RhdGUpOworKwkgICAgaWYgKF9fY29udiA+IHN0YXRpY19jYXN0PHNpemVfdD4oX190b19lbmQgLSBfX3RvX25leHQpKQorKwkgICAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCW1lbWNweShfX3RvX25leHQsIF9fYnVmLCBfX2NvbnYpOworKwkJX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkJX190b19uZXh0ICs9IF9fY29udjsKKysJCSsrX19mcm9tX25leHQ7CisrCSAgICAgIH0KKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OyAKKysgIH0KKysgIAorKyAgY29kZWN2dF9iYXNlOjpyZXN1bHQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLCAKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCisrCWludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCisrCWludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAorKyAgeworKyAgICByZXN1bHQgX19yZXQgPSBvazsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIG1ic25ydG93Y3MgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2Ugc3RvcmUgYSBMJ1wwJyBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KKysgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9fZnJvbSwgX190b19uZXh0ID0gX190bzsKKysJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAorKwkgJiYgX19yZXQgPT0gb2s7KQorKyAgICAgIHsKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQ7CisrCV9fZnJvbV9jaHVua19lbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KG1lbWNocihfX2Zyb21fbmV4dCwgJ1wwJywKKysJCQkJCQkJCSAgX19mcm9tX2VuZAorKwkJCQkJCQkJICAtIF9fZnJvbV9uZXh0KSk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKKysKKysJX19mcm9tID0gX19mcm9tX25leHQ7CisrCXNpemVfdCBfX2NvbnYgPSBtYnNucnRvd2NzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LAorKwkJCQkgICBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCisrCQkJCSAgIF9fdG9fZW5kIC0gX190b19uZXh0LCAmX19zdGF0ZSk7CisrCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisrCSAgeworKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKKysJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKysJICAgIC8vIG1icnRvd2MuCisrCSAgICBmb3IgKDs7ICsrX190b19uZXh0LCBfX2Zyb20gKz0gX19jb252KQorKwkgICAgICB7CisrCQlfX2NvbnYgPSBtYnJ0b3djKF9fdG9fbmV4dCwgX19mcm9tLCBfX2Zyb21fZW5kIC0gX19mcm9tLAorKwkJCQkgJl9fdG1wX3N0YXRlKTsKKysJCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkKKysJCSAgICB8fCBfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpCisrCQkgIGJyZWFrOworKwkgICAgICB9CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbTsKKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsJICAgIAorKwkgICAgX19yZXQgPSBlcnJvcjsKKysJICB9CisrCWVsc2UgaWYgKF9fZnJvbV9uZXh0ICYmIF9fZnJvbV9uZXh0IDwgX19mcm9tX2NodW5rX2VuZCkKKysJICB7CisrCSAgICAvLyBJdCBpcyB1bmNsZWFyIHdoYXQgdG8gcmV0dXJuIGluIHRoaXMgY2FzZSAoc2VlIERSIDM4MikuIAorKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgIH0KKysKKysJaWYgKF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3JldCA9PSBvaykKKysJICB7CisrCSAgICBpZiAoX190b19uZXh0IDwgX190b19lbmQpCisrCSAgICAgIHsKKysJCS8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzCisrCQlfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7CQkKKysJCSsrX19mcm9tX25leHQ7CisrCQkqX190b19uZXh0KysgPSBMJ1wwJzsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsgCisrICB9CisrCisrICBpbnQgCisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCisrICB7CisrICAgIC8vIFhYWCBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCB0aGUgZW5jb2RpbmcgaXMKKysgICAgLy8gc3RhdGVsZXNzIGFuZCBpcyBlaXRoZXIgc2luZ2xlLWJ5dGUgb3IgdmFyaWFibGUtd2lkdGguCisrICAgIGludCBfX3JldCA9IDA7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKyAgICBpZiAoTUJfQ1VSX01BWCA9PSAxKQorKyAgICAgIF9fcmV0ID0gMTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX3JldDsKKysgIH0gIAorKworKyAgaW50IAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKyAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncy4KKysgICAgaW50IF9fcmV0ID0gTUJfQ1VSX01BWDsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysgIAorKyAgaW50IAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2xlbmd0aChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAorKwkgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0CisrICB7CisrICAgIGludCBfX3JldCA9IDA7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIGFkdmFuY2UgcGFzdCBpdCBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KKysgIAorKyAgICAvLyBBIGR1bW15IGludGVybmFsIGJ1ZmZlciBpcyBuZWVkZWQgaW4gb3JkZXIgZm9yIG1ic25ydG9jd3MgdG8gY29uc2lkZXIKKysgICAgLy8gaXRzIGZvdXJ0aCBwYXJhbWV0ZXIgKGl0IHdvdWxkbid0IHdpdGggTlVMTCBhcyBmaXJzdCBwYXJhbWV0ZXIpLgorKyAgICB3Y2hhcl90KiBfX3RvID0gc3RhdGljX2Nhc3Q8d2NoYXJfdCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKHdjaGFyX3QpIAorKwkJCQkJCQkgICAqIF9fbWF4KSk7CisrICAgIHdoaWxlIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKKysgICAgICB7CisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOworKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tLCAnXDAnLAorKwkJCQkJCQkJICBfX2VuZAorKwkJCQkJCQkJICAtIF9fZnJvbSkpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZW5kOworKworKwljb25zdCBleHRlcm5fdHlwZSogX190bXBfZnJvbSA9IF9fZnJvbTsKKysJc2l6ZV90IF9fY29udiA9IG1ic25ydG93Y3MoX190bywgJl9fZnJvbSwKKysJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbSwKKysJCQkJICAgX19tYXgsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gbWJydG93Yy4KKysJICAgIGZvciAoX19mcm9tID0gX190bXBfZnJvbTs7IF9fZnJvbSArPSBfX2NvbnYpCisrCSAgICAgIHsKKysJCV9fY29udiA9IG1icnRvd2MoTlVMTCwgX19mcm9tLCBfX2VuZCAtIF9fZnJvbSwKKysJCQkJICZfX3RtcF9zdGF0ZSk7CisrCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCisrCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQorKwkJICBicmVhazsKKysJICAgICAgfQorKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKKysJICAgIGJyZWFrOworKwkgIH0KKysJaWYgKCFfX2Zyb20pCisrCSAgX19mcm9tID0gX19mcm9tX2NodW5rX2VuZDsKKysJCisrCV9fcmV0ICs9IF9fZnJvbSAtIF9fdG1wX2Zyb207CisrCV9fbWF4IC09IF9fY29udjsKKysKKysJaWYgKF9fZnJvbSA8IF9fZW5kICYmIF9fbWF4KQorKwkgIHsKKysJICAgIC8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzCisrCSAgICBfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7CisrCSAgICArK19fZnJvbTsKKysJICAgICsrX19yZXQ7CisrCSAgICAtLV9fbWF4OworKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7IAorKyAgfQorKyNlbmRpZgorK30KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw4MCBAQAorKy8vIHN0ZDo6Y29sbGF0ZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNC4xLjIgIGNvbGxhdGUgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fc3RyY29sbF9sKFMxLCBTMiwgTCkgICAgICBzdHJjb2xsKChTMSksIChTMikpCisrI2RlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCisrI2RlZmluZSBfX3djc2NvbGxfbChTMSwgUzIsIEwpICAgICAgd2NzY29sbCgoUzEpLCAoUzIpKQorKyNkZWZpbmUgX193Y3N4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHdjc3hmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBUaGVzZSBhcmUgYmFzaWNhbGx5IGV4dGVuc2lvbnMgdG8gY2hhcl90cmFpdHMsIGFuZCBwZXJoYXBzIHNob3VsZAorKyAgLy8gYmUgcHV0IHRoZXJlIGluc3RlYWQgb2YgaGVyZS4KKysgIHRlbXBsYXRlPD4KKysgICAgaW50IAorKyAgICBjb2xsYXRlPGNoYXI+OjpfTV9jb21wYXJlKGNvbnN0IGNoYXIqIF9fb25lLCBjb25zdCBjaGFyKiBfX3R3bykgY29uc3QKKysgICAgeyAKKysgICAgICBpbnQgX19jbXAgPSBfX3N0cmNvbGxfbChfX29uZSwgX190d28sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOworKyAgICAgIHJldHVybiAoX19jbXAgPj4gKDggKiBzaXplb2YgKGludCkgLSAyKSkgfCAoX19jbXAgIT0gMCk7CisrICAgIH0KKysgIAorKyAgdGVtcGxhdGU8PgorKyAgICBzaXplX3QKKysgICAgY29sbGF0ZTxjaGFyPjo6X01fdHJhbnNmb3JtKGNoYXIqIF9fdG8sIGNvbnN0IGNoYXIqIF9fZnJvbSwgCisrCQkJCXNpemVfdCBfX24pIGNvbnN0IAorKyAgICB7IHJldHVybiBfX3N0cnhmcm1fbChfX3RvLCBfX2Zyb20sIF9fbiwgX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgaW50IAorKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV9jb21wYXJlKGNvbnN0IHdjaGFyX3QqIF9fb25lLCAKKysJCQkJIGNvbnN0IHdjaGFyX3QqIF9fdHdvKSBjb25zdAorKyAgICB7CisrICAgICAgaW50IF9fY21wID0gX193Y3Njb2xsX2woX19vbmUsIF9fdHdvLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsKKysgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDApOworKyAgICB9CisrICAKKysgIHRlbXBsYXRlPD4KKysgICAgc2l6ZV90CisrICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX3RyYW5zZm9ybSh3Y2hhcl90KiBfX3RvLCBjb25zdCB3Y2hhcl90KiBfX2Zyb20sCisrCQkJCSAgIHNpemVfdCBfX24pIGNvbnN0CisrICAgIHsgcmV0dXJuIF9fd2NzeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQorKyNlbmRpZgorK30KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMzAwIEBACisrLy8gc3RkOjpjdHlwZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS4xLjIgIGN0eXBlIHZpcnR1YWwgZnVuY3Rpb25zLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgIHdjdHlwZSgoUykpCisrI2RlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICB0b3d1cHBlcigoQykpCisrI2RlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICB0b3dsb3dlcigoQykpCisrI2RlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICBpc3djdHlwZSgoQyksIChNKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCisrICAvLyB2YXJpb3VzIC9jb25maWcvb3MvKiBmaWxlcy4KKysgIHRlbXBsYXRlPD4KKysgICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorKyAgICA6IGN0eXBlPGNoYXI+KDAsIGZhbHNlLCBfX3JlZnMpIAorKyAgICB7IAkJCisrICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKKysJeworKwkgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY3R5cGUpOworKwkgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZSwgX19zKTsgCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICB0aGlzLT5fTV90b3VwcGVyID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfdG91cHBlcjsKKysJICB0aGlzLT5fTV90b2xvd2VyID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfdG9sb3dlcjsKKysJICB0aGlzLT5fTV90YWJsZSA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX2I7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVCAgCisrICBjdHlwZTx3Y2hhcl90Pjo6X193bWFza190eXBlCisrICBjdHlwZTx3Y2hhcl90Pjo6X01fY29udmVydF90b193bWFzayhjb25zdCBtYXNrIF9fbSkgY29uc3QKKysgIHsKKysgICAgX193bWFza190eXBlIF9fcmV0OworKyAgICBzd2l0Y2ggKF9fbSkKKysgICAgICB7CisrICAgICAgY2FzZSBzcGFjZToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJzcGFjZSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBwcmludDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJwcmludCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBjbnRybDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJjbnRybCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSB1cHBlcjoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJ1cHBlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBsb3dlcjoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJsb3dlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBhbHBoYToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJhbHBoYSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBkaWdpdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJkaWdpdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBwdW5jdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJwdW5jdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSB4ZGlnaXQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgieGRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGFsbnVtOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImFsbnVtIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGdyYXBoOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImdyYXBoIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBkZWZhdWx0OgorKwlfX3JldCA9IF9fd21hc2tfdHlwZSgpOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKyAgCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9fdG93dXBwZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b3VwcGVyKHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrICAgICAgICAqX19sbyA9IF9fdG93dXBwZXJfbCgqX19sbywgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICAgICAgKytfX2xvOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrICAKKysgIHdjaGFyX3QKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b2xvd2VyKHdjaGFyX3QgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX190b3dsb3dlcl9sKF9fYywgX01fY19sb2NhbGVfY3R5cGUpOyB9CisrICAKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKyAgICAgICAgKl9fbG8gPSBfX3Rvd2xvd2VyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgICAgICsrX19sbzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgYm9vbAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9faXMobWFzayBfX20sIHdjaGFyX3QgX19jKSBjb25zdAorKyAgeyAKKysgICAgLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysgICAgLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKKysgICAgY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsgCisrICAgIGZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysgICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQorKwkgICYmIF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwl7CisrCSAgX19yZXQgPSB0cnVlOworKwkgIGJyZWFrOworKwl9CisrICAgIHJldHVybiBfX3JldDsgICAgCisrICB9CisrICAKKysgIGNvbnN0IHdjaGFyX3QqIAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9faXMoY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgbWFzayogX192ZWMpIGNvbnN0CisrICB7CisrICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytfX3ZlYywgKytfX2xvKQorKyAgICAgIHsKKysJLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysJLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7IAorKwltYXNrIF9fbSA9IDA7CisrCWZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysJICBpZiAoX19pc3djdHlwZV9sKCpfX2xvLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJICAgIF9fbSB8PSBfTV9iaXRbX19iaXRjdXJdOworKwkqX192ZWMgPSBfX207CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysgIAorKyAgY29uc3Qgd2NoYXJfdCogCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkgJiYgIXRoaXMtPmRvX2lzKF9fbSwgKl9fbG8pKQorKyAgICAgICsrX19sbzsKKysgICAgcmV0dXJuIF9fbG87CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkgJiYgdGhpcy0+ZG9faXMoX19tLCAqX19sbykgIT0gMCkKKysgICAgICArK19fbG87CisrICAgIHJldHVybiBfX2xvOworKyAgfQorKworKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fd2lkZW4oY2hhciBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfTV93aWRlbltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpXTsgfQorKworKyAgY29uc3QgY2hhciogCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCB3Y2hhcl90KiBfX2Rlc3QpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrCSpfX2Rlc3QgPSBfTV93aWRlbltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sbyldOworKwkrK19fbG87CisrCSsrX19kZXN0OworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBjaGFyCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19uYXJyb3cod2NoYXJfdCBfX3djLCBjaGFyIF9fZGZhdWx0KSBjb25zdAorKyAgeworKyAgICBpZiAoX193YyA+PSAwICYmIF9fd2MgPCAxMjggJiYgX01fbmFycm93X29rKQorKyAgICAgIHJldHVybiBfTV9uYXJyb3dbX193Y107CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgY29uc3QgaW50IF9fYyA9IHdjdG9iKF9fd2MpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsgCisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fbmFycm93KGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIGNoYXIgX19kZmF1bHQsIAorKwkgICAgY2hhciogX19kZXN0KSBjb25zdAorKyAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIGlmIChfTV9uYXJyb3dfb2spCisrICAgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKwl7CisrCSAgaWYgKCpfX2xvID49IDAgJiYgKl9fbG8gPCAxMjgpCisrCSAgICAqX19kZXN0ID0gX01fbmFycm93WypfX2xvXTsKKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIGNvbnN0IGludCBfX2MgPSB3Y3RvYigqX19sbyk7CisrCSAgICAgICpfX2Rlc3QgPSAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7CisrCSAgICB9CisrCSAgKytfX2xvOworKwkgICsrX19kZXN0OworKwl9CisrICAgIGVsc2UKKysgICAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrCXsKKysJICBjb25zdCBpbnQgX19jID0gd2N0b2IoKl9fbG8pOworKwkgICpfX2Rlc3QgPSAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7CisrCSAgKytfX2xvOworKwkgICsrX19kZXN0OworKwl9CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIHZvaWQKKysgIGN0eXBlPHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX2N0eXBlKCkKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOworKyNlbmRpZgorKyAgICB3aW50X3QgX19pOworKyAgICBmb3IgKF9faSA9IDA7IF9faSA8IDEyODsgKytfX2kpCisrICAgICAgeworKwljb25zdCBpbnQgX19jID0gd2N0b2IoX19pKTsKKysJaWYgKF9fYyA9PSBFT0YpCisrCSAgYnJlYWs7CisrCWVsc2UKKysJICBfTV9uYXJyb3dbX19pXSA9IHN0YXRpY19jYXN0PGNoYXI+KF9fYyk7CisrICAgICAgfQorKyAgICBpZiAoX19pID09IDEyOCkKKysgICAgICBfTV9uYXJyb3dfb2sgPSB0cnVlOworKyAgICBlbHNlCisrICAgICAgX01fbmFycm93X29rID0gZmFsc2U7CisrICAgIGZvciAoc2l6ZV90IF9faiA9IDA7CisrCSBfX2ogPCBzaXplb2YoX01fd2lkZW4pIC8gc2l6ZW9mKHdpbnRfdCk7ICsrX19qKQorKyAgICAgIF9NX3dpZGVuW19fal0gPSBidG93YyhfX2opOworKworKyAgICBmb3IgKHNpemVfdCBfX2sgPSAwOyBfX2sgPD0gMTE7ICsrX19rKQorKyAgICAgIHsgCisrCV9NX2JpdFtfX2tdID0gc3RhdGljX2Nhc3Q8bWFzaz4oX0lTYml0KF9faykpOworKwlfTV93bWFza1tfX2tdID0gX01fY29udmVydF90b193bWFzayhfTV9iaXRbX19rXSk7CisrICAgICAgfQorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgIH0KKysjZW5kaWYgLy8gIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrfQorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxMDAgQEAKKysvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggZ2V0dGV4dCBzdHVmZgorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworK2V4dGVybiAiQyIgY2hhciAqX19kY2dldHRleHQoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCQkgICAgIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpOworKyN1bmRlZiBnZXR0ZXh0CisrI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBfX2RjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrI2Vsc2UKKysjdW5kZWYgZ2V0dGV4dAorKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBTcGVjaWFsaXphdGlvbnMuCisrICB0ZW1wbGF0ZTw+CisrICAgIHN0cmluZworKyAgICBtZXNzYWdlczxjaGFyPjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCBzdHJpbmcmIF9fZGZhdWx0KSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKSk7CisrICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfbWVzc2FnZXMpOworKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2Vsc2UKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2VuZGlmCisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgd3N0cmluZworKyAgICBtZXNzYWdlczx3Y2hhcl90Pjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCB3c3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKKysgICAgeworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKKysgICAgICBjaGFyKiBfX21zZyA9IGdldHRleHQoX01fY29udmVydF90b19jaGFyKF9fZGZhdWx0KSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbHNlCisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbmRpZgorKyAgICB9CisrI2VuZGlmCisrfQorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDExOCBAQAorKy8vIHN0ZDo6bWVzc2FnZXMgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjcuMS4yICBtZXNzYWdlcyBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHByb3RvdHlwZXMgZm9yICp0ZXh0ZG9tYWluIGZ1bmNzCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrZXh0ZXJuICJDIiBjaGFyICpfX3RleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSk7CisrZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCQkJCSAgY29uc3QgY2hhciAqZGlybmFtZSk7CisrI2Vsc2UKKysjdW5kZWYgX190ZXh0ZG9tYWluCisrI3VuZGVmIF9fYmluZHRleHRkb21haW4KKysjZGVmaW5lIF9fdGV4dGRvbWFpbihEKSAgICAgICAgICAgKCh2b2lkKTApCisrI2RlZmluZSBfX2JpbmR0ZXh0ZG9tYWluKEQsUCkgICAgICgodm9pZCkwKQorKyNlbmRpZgorKworKyAgLy8gTm9uLXZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKHNpemVfdCBfX3JlZnMpCisrICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2dldF9jX2xvY2FsZSgpKSwgCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKF9TX2dldF9jX25hbWUoKSkKKysgICAgIHsgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgCisrCQkJCXNpemVfdCBfX3JlZnMpIAorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpKSwKKysgICAgIF9NX25hbWVfbWVzc2FnZXMoX19zKQorKyAgICAgeworKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKysgICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysgICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZyAKKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywgCisrCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CisrICAgIHsgCisrICAgICAgX19iaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworKyAgICAgIHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOyAKKysgICAgfQorKworKyAgLy8gVmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojp+bWVzc2FnZXMoKQorKyAgICB7IAorKyAgICAgIGlmIChfTV9uYW1lX21lc3NhZ2VzICE9IF9TX2dldF9jX25hbWUoKSkKKysJZGVsZXRlIFtdIF9NX25hbWVfbWVzc2FnZXM7CisrICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7IAorKyAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cgCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIAorKwkJCSAgICAgIGNvbnN0IGxvY2FsZSYpIGNvbnN0CisrICAgIHsgCisrICAgICAgLy8gTm8gZXJyb3IgY2hlY2tpbmcgaXMgZG9uZSwgYXNzdW1lIHRoZSBjYXRhbG9nIGV4aXN0cyBhbmQgY2FuCisrICAgICAgLy8gYmUgdXNlZC4KKysgICAgICBfX3RleHRkb21haW4oX19zLmNfc3RyKCkpOworKyAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHZvaWQgICAgCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2Nsb3NlKGNhdGFsb2cpIGNvbnN0IAorKyAgICB7IH0KKysKKysgICAvLyBtZXNzYWdlc19ieW5hbWUKKysgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlc19ieW5hbWU8X0NoYXJUPjo6bWVzc2FnZXNfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKysgICAgIDogbWVzc2FnZXM8X0NoYXJUPihfX3JlZnMpIAorKyAgICAgeyAKKysgICAgICAgaWYgKHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgIT0gbG9jYWxlOjpmYWNldDo6X1NfZ2V0X2NfbmFtZSgpKQorKwkgZGVsZXRlIFtdIHRoaXMtPl9NX25hbWVfbWVzc2FnZXM7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgdGhpcy0+X01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKworKyAgICAgICBpZiAoc3RkOjpzdHJjbXAoX19zLCAiQyIpICE9IDAgJiYgc3RkOjpzdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorKwkgeworKwkgICB0aGlzLT5fU19kZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysJICAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3MpOyAKKysJIH0KKysgICAgIH0KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNjkyIEBACisrLy8gc3RkOjptb25leXB1bmN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi42LjMuMiAgbW9uZXlwdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBvcHRpbWl6ZSB0aGlzIGZvciB1Y2xpYmMKKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6CisrICAvLyBzcGFjZSBub25lIHN5bWJvbCBzaWduIHZhbHVlCisrICBtb25leV9iYXNlOjpwYXR0ZXJuCisrICBtb25leV9iYXNlOjpfU19jb25zdHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VkZXMsIGNoYXIgX19zcGFjZSwgY2hhciBfX3Bvc24pCisrICB7IAorKyAgICBwYXR0ZXJuIF9fcmV0OworKworKyAgICAvLyBUaGlzIGluc2FuZWx5IGNvbXBsaWNhdGVkIHJvdXRpbmUgYXR0ZW1wdHMgdG8gY29uc3RydWN0IGEgdmFsaWQKKysgICAgLy8gcGF0dGVybiBmb3IgdXNlIHdpdGggbW9ueWVwdW5jdC4gQSBjb3VwbGUgb2YgaW52YXJpYW50czoKKysKKysgICAgLy8gaWYgKF9fcHJlY2VkZXMpIHN5bWJvbCAtPiB2YWx1ZQorKyAgICAvLyBlbHNlIHZhbHVlIC0+IHN5bWJvbAorKyAgICAKKysgICAgLy8gaWYgKF9fc3BhY2UpIHNwYWNlCisrICAgIC8vIGVsc2Ugbm9uZQorKworKyAgICAvLyBub25lID09IG5ldmVyIGZpcnN0CisrICAgIC8vIHNwYWNlIG5ldmVyIGZpcnN0IG9yIGxhc3QKKysKKysgICAgLy8gQW55IGVsZWdhbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgYXJlIHdlbGNvbWUuCisrICAgIHN3aXRjaCAoX19wb3NuKQorKyAgICAgIHsKKysgICAgICBjYXNlIDA6CisrICAgICAgY2FzZSAxOgorKwkvLyAxIFRoZSBzaWduIHByZWNlZGVzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgorKwlfX3JldC5maWVsZFswXSA9IHNpZ247CisrCWlmIChfX3NwYWNlKQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbi4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbiBhbmQgZW5kcyB3aXRoIG5vbmUuCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOworKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSAyOgorKwkvLyAyIFRoZSBzaWduIGZvbGxvd3MgdGhlIHZhbHVlIGFuZCBzeW1ib2wuCisrCWlmIChfX3NwYWNlKQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gZWl0aGVyIGVuZHMgd2l0aCBzaWduLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCSAgICBfX3JldC5maWVsZFszXSA9IHNpZ247CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBlbmRzIHdpdGggc2lnbiB0aGVuIG5vbmUuCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOworKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSAzOgorKwkvLyAzIFRoZSBzaWduIGltbWVkaWF0ZWx5IHByZWNlZGVzIHRoZSBzeW1ib2wuCisrCWlmIChfX3ByZWNlZGVzKQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gc2lnbjsKKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOwkgICAgCisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsJCQorKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkJX19yZXQuZmllbGRbM10gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzaWduOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgNDoKKysJLy8gNCBUaGUgc2lnbiBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBzeW1ib2wuCisrCWlmIChfX3ByZWNlZGVzKQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkgICAgX19yZXQuZmllbGRbMV0gPSBzaWduOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gc2lnbjsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysJOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgdm9pZAorKyAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIAorKwkJCQkJCSAgICAgY29uc3QgY2hhciopCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPGNoYXIsIHRydWU+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9IG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX0RFQ0lNQUxfUE9JTlQsIAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fVEhPVVNBTkRTX1NFUCwgCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgaWYgKCFfX25wb3NuKQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIoKSI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sIAorKwkJCQkJCQlfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAvLyBfSW50bCA9PSB0cnVlCisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX25sX2xhbmdpbmZvX2woX19JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9GUkFDX0RJR0lUUywgCisrCQkJCQkJICAgICAgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsIAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLCAKKysJCQkJCQkJX19ucG9zbik7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgdm9pZAorKyAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCAKKysJCQkJCQkgICAgICBjb25zdCBjaGFyKikKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8Y2hhciwgZmFsc2U+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9IG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX0RFQ0lNQUxfUE9JTlQsIAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fVEhPVVNBTkRTX1NFUCwgCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBpZiAoIV9fbnBvc24pCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwKKysJCQkJCQkJX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgLy8gX0ludGwgPT0gZmFsc2UKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLCAKKysJCQkJCQkJX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsIAorKwkJCQkJCQlfX25wb3NuKTsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+IAorKyAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4gCisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCAKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkJCQkJCQljb25zdCBjaGFyKikKKysjZWxzZQorKwkJCQkJCQljb25zdCBjaGFyKiBfX25hbWUpCisrI2VuZGlmCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIHRydWU+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxzZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKysJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysKKysJICBjb25zdCBjaGFyKiBfX2Nwb3NzaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NuZWdzaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NjdXJyID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOworKworKwkgIHdjaGFyX3QqIF9fd2NzX3BzID0gMDsKKysJICB3Y2hhcl90KiBfX3djc19ucyA9IDA7CisrCSAgY29uc3QgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIHRyeQorKwkgICAgeworKwkgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKysJICAgICAgc2l6ZV90IF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCSAgICAgIAorKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NuZWdzaWduKTsKKysJICAgICAgaWYgKCFfX25wb3NuKQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiKCkiOworKwkgICAgICBlbHNlIGlmIChfX2xlbikKKysJCXsgCisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19ucyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX25zLCAmX19jbmVnc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fd2NzX25zOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCSAgICAgIAorKwkgICAgICAvLyBfSW50bCA9PSB0cnVlLgorKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsKKysJICAgICAgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgd2NoYXJfdCogX193Y3MgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djcywgJl9fY2N1cnIsIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX193Y3M7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICAgIH0KKysJICBjYXRjaCAoLi4uKQorKwkgICAgeworKwkgICAgICBkZWxldGUgX01fZGF0YTsKKysJICAgICAgX01fZGF0YSA9IDA7CisrCSAgICAgIGRlbGV0ZSBfX3djc19wczsKKysJICAgICAgZGVsZXRlIF9fd2NzX25zOwkgICAgICAKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisrCSAgICB9IAorKwkgIAorKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfRlJBQ19ESUdJVFMsIAorKwkJCQkJCSAgICAgIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLCAKKysJCQkJCQkJX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwgCisrCQkJCQkJCV9fbnBvc24pOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICB2b2lkCisrICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCQkJCQkJICAgICAgIGNvbnN0IGNoYXIqKQorKyNlbHNlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fbmFtZSkKKysjZW5kaWYKKysgIHsKKysgICAgaWYgKCFfTV9kYXRhKQorKyAgICAgIF9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIGZhbHNlPjsKKysKKysgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxzZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKysgICAgICAgICAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrI2VuZGlmCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrICAgICAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKworKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19DVVJSRU5DWV9TWU1CT0wsIF9fY2xvYyk7CisrCisrCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOworKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKKysJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICB0cnkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKysgICAgICAgICAgICAgIHNpemVfdCBfX2xlbjsKKysgICAgICAgICAgICAgIF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOworKyAgICAgICAgICAgICAgaWYgKF9fbGVuKQorKyAgICAgICAgICAgICAgICB7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKwkgICAgICAKKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jbmVnc2lnbik7CisrCSAgICAgIGlmICghX19ucG9zbikKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIigpIjsKKysJICAgICAgZWxzZSBpZiAoX19sZW4pCisrCQl7IAorKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAgICAgLy8gX0ludGwgPT0gdHJ1ZS4KKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jY3Vycik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIHdjaGFyX3QqIF9fd2NzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3MsICZfX2NjdXJyLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fd2NzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgICAgfQorKyAgICAgICAgICBjYXRjaCAoLi4uKQorKwkgICAgeworKwkgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgICAgICAgICAgIF9NX2RhdGEgPSAwOworKwkgICAgICBkZWxldGUgX193Y3NfcHM7CisrCSAgICAgIGRlbGV0ZSBfX3djc19uczsJICAgICAgCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJICAgIH0KKysKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLCAKKysJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsIAorKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25wb3NuKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+IAorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCisrICAgICAgICAgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsKKysgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT46On5tb25leXB1bmN0KCkKKysgICAgeworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUKKysgICAgICAgICAgJiYgd2NzY21wKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24sIEwiKCkiKSAhPSAwKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sOworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICB9CisrI2VuZGlmCisrfQorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDE2MCBAQAorKy8vIHN0ZDo6bnVtcHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjMuMS4yICBudW1wdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PiAKKysgICAgdm9pZAorKyAgICBudW1wdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX251bXB1bmN0X2NhY2hlPGNoYXI+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7CisrCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworKworKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbnVtX2Jhc2U6Ol9TX29lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfb3V0W19faV0gPSBfX251bV9iYXNlOjpfU19hdG9tc19vdXRbX19pXTsKKysKKysJICBmb3IgKHNpemVfdCBfX2ogPSAwOyBfX2ogPCBfX251bV9iYXNlOjpfU19pZW5kOyArK19faikKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX2luW19fal0gPSBfX251bV9iYXNlOjpfU19hdG9tc19pbltfX2pdOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChERUNJTUFMX1BPSU5ULCAKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKFRIT1VTQU5EU19TRVAsIAorKwkJCQkJCQlfX2Nsb2MpKTsKKysKKysJICAvLyBDaGVjayBmb3IgTlVMTCwgd2hpY2ggaW1wbGllcyBubyBncm91cGluZy4KKysJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSAnXDAnKQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChHUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJfQorKworKyAgICAgIC8vIE5COiBUaGVyZSBpcyBubyB3YXkgdG8gZXh0YWN0IHRoaXMgaW5mbyBmcm9tIHBvc2l4IGxvY2FsZXMuCisrICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woWUVTU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lID0gInRydWUiOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lX3NpemUgPSA0OworKyAgICAgIC8vIF9NX2ZhbHNlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChOT1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWUgPSAiZmFsc2UiOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKKysgICAgfQorKyAKKysgIHRlbXBsYXRlPD4gCisrICAgIG51bXB1bmN0PGNoYXI+Ojp+bnVtcHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrICAgCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+IAorKyAgICB2b2lkCisrICAgIG51bXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8d2NoYXJfdD47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKysKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysKKysJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV0pOworKworKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal0pOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIC8vIE5COiBJbiB0aGUgR05VIG1vZGVsIHdjaGFyX3QgaXMgYWx3YXlzIDMyIGJpdCB3aWRlLgorKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysKKysJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCX0KKysKKysgICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFjdCB0aGlzIGluZm8gZnJvbSBwb3NpeCBsb2NhbGVzLgorKyAgICAgIC8vIF9NX3RydWVuYW1lID0gX19ubF9sYW5naW5mb19sKFlFU1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZSA9IEwidHJ1ZSI7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7CisrICAgICAgLy8gX01fZmFsc2VuYW1lID0gX19ubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZSA9IEwiZmFsc2UiOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgbnVtcHVuY3Q8d2NoYXJfdD46On5udW1wdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysgI2VuZGlmCisrfQorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDQwNiBAQAorKy8vIHN0ZDo6dGltZV9nZXQsIHN0ZDo6dGltZV9wdXQgaW1wbGVtZW50YXRpb24sIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEuMiAtIHRpbWVfZ2V0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6CisrICAgIF9NX3B1dChjaGFyKiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3QgY2hhciogX19mb3JtYXQsIAorKwkgICBjb25zdCB0bSogX190bSkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX19zdHJmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorKwkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysjZWxzZQorKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RyZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKysgICAgICBpZiAoX19sZW4gPT0gMCkKKysJX19zWzBdID0gJ1wwJzsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8Y2hhcj47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSAiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9ICIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSAiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9ICIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gIiI7CisrCSAgX01fZGF0YS0+X01fYW0gPSAiQU0iOworKwkgIF9NX2RhdGEtPl9NX3BtID0gIlBNIjsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSAiIjsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSAiU3VuZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gIk1vbmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9ICJUdWVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gIldlZG5lc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9ICJUaHVyc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9ICJGcmlkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSAiU2F0dXJkYXkiOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSAiU3VuIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9ICJNb24iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gIlR1ZSI7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSAiV2VkIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9ICJUaHUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gIkZyaSI7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSAiU2F0IjsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSAiSmFudWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9ICJGZWJydWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9ICJNYXJjaCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9ICJBcHJpbCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9ICJNYXkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSAiSnVuZSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9ICJKdWx5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gIkF1Z3VzdCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9ICJTZXB0ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSAiT2N0b2JlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9ICJOb3ZlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9ICJEZWNlbWJlciI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gIkphbiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSAiRmViIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9ICJNYXIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gIkFwciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSAiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9ICJKdW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gIkp1bCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSAiQXVnIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9ICJTZXAiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gIk9jdCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSAiTm92IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9ICJEZWMiOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsgCisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChUX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfRF9UX0ZNVCwKKysJCQkJCQkJICAgICBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtID0gX19ubF9sYW5naW5mb19sKEFNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wbSA9IF9fbmxfbGFuZ2luZm9fbChQTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKFRfRk1UX0FNUE0sIF9fY2xvYyk7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gX19ubF9sYW5naW5mb19sKERBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBfX25sX2xhbmdpbmZvX2woREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gX19ubF9sYW5naW5mb19sKERBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBfX25sX2xhbmdpbmZvX2woREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gX19ubF9sYW5naW5mb19sKERBWV83LCBfX2Nsb2MpOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gX19ubF9sYW5naW5mb19sKEFCREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNywgX19jbG9jKTsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fbmxfbGFuZ2luZm9fbChNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gX19ubF9sYW5naW5mb19sKE1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBfX25sX2xhbmdpbmZvX2woTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fbmxfbGFuZ2luZm9fbChNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gX19ubF9sYW5naW5mb19sKE1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX25sX2xhbmdpbmZvX2woTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fbmxfbGFuZ2luZm9fbChNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gX19ubF9sYW5naW5mb19sKE1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEyLCBfX2Nsb2MpOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMiwgX19jbG9jKTsKKysJfQorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46OgorKyAgICBfTV9wdXQod2NoYXJfdCogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IHdjaGFyX3QqIF9fZm9ybWF0LCAKKysJICAgY29uc3QgdG0qIF9fdG0pIGNvbnN0CisrICAgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwgX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisrCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyNlbHNlCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSB3Y3NmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKyAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorKyAgICAgIGlmIChfX2xlbiA9PSAwKQorKwlfX3NbMF0gPSBMJ1wwJzsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8d2NoYXJfdD47CisrCisrI3dhcm5pbmcgd2lkZSB0aW1lIHN0dWZmCisrLy8gICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IEwiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IEwiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fYW0gPSBMIkFNIjsKKysJICBfTV9kYXRhLT5fTV9wbSA9IEwiUE0iOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IEwiIjsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBMIlN1bmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IEwiTW9uZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gTCJUdWVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gTCJXZWRuZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBMIlRodXJzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gTCJGcmlkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBMIlNhdHVyZGF5IjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gTCJTdW4iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gTCJNb24iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gTCJUdWUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gTCJXZWQiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gTCJUaHUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gTCJGcmkiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gTCJTYXQiOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IEwiSmFudWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IEwiRmVicnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBMIk1hcmNoIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gTCJBcHJpbCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IEwiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gTCJKdW5lIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gTCJKdWx5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gTCJBdWd1c3QiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBMIlNlcHRlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IEwiT2N0b2JlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IEwiTm92ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBMIkRlY2VtYmVyIjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBMIkphbiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBMIkZlYiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBMIk1hciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBMIkFwciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBMIk1heSI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBMIkp1biI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBMIkp1bCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBMIkF1ZyI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBMIlNlcCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBMIk9jdCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBMIk5vdiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBMIkRlYyI7CisrCX0KKysjaWYgMAorKyAgICAgIGVsc2UKKysJeworKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7IAorKworKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90ICpfX3c7IH0gX191OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9EX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dUX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1BNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wbSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1RfRk1UX0FNUE0sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX191Ll9fdzsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gX191Ll9fdzsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX191Ll9fdzsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEyLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX3UuX193OworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEyLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX191Ll9fdzsKKysJfQorKyNlbmRpZiAvLyAwCisrICAgIH0KKysjZW5kaWYKKyt9CitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw2OCBAQAorKy8vIHN0ZDo6dGltZV9nZXQsIHN0ZDo6dGltZV9wdXQgaW1wbGVtZW50YXRpb24sIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEuMiAtIHRpbWVfZ2V0IGZ1bmN0aW9ucworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4zLjIgLSB0aW1lX3B1dCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KHNpemVfdCBfX3JlZnMpIAorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwgCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY2FjaGVfdHlwZSogX19jYWNoZSwgc2l6ZV90IF9fcmVmcykgCisrICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShfX2NhY2hlKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLCAKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJICAgICBzaXplX3QgX19yZWZzKSAKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksIAorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChfX3MpCisrICAgIHsgCisrICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKKysgICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOyAKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+Ojp+X190aW1lcHVuY3QoKQorKyAgICB7IAorKyAgICAgIGlmIChfTV9uYW1lX3RpbWVwdW5jdCAhPSBfU19nZXRfY19uYW1lKCkpCisrCWRlbGV0ZSBbXSBfTV9uYW1lX3RpbWVwdW5jdDsKKysgICAgICBkZWxldGUgX01fZGF0YTsgCisrICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV90aW1lcHVuY3QpOyAKKysgICAgfQorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlndXJlIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlndXJlCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjI5OjIyLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlndXJlCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtNTc2OSw3ICs1NzY5LDcgQEAKKyAgIGVuYWJsZXZhbD0iJGVuYWJsZV9jbG9jYWxlIgorIAorICAgICAgIGNhc2UgIiRlbmFibGV2YWwiIGluCistICAgICAgIGdlbmVyaWN8Z251fGllZWVfMTAwMy4xLTIwMDF8eWVzfG5vfGF1dG8pIDs7CisrICAgICAgIGdlbmVyaWN8Z251fGllZWVfMTAwMy4xLTIwMDF8dWNsaWJjfHllc3xub3xhdXRvKSA7OworICAgICAgICAqKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBVbmtub3duIGFyZ3VtZW50IHRvIGVuYWJsZS9kaXNhYmxlIGNsb2NhbGUiID4mNQorIGVjaG8gIiRhc19tZTogZXJyb3I6IFVua25vd24gYXJndW1lbnQgdG8gZW5hYmxlL2Rpc2FibGUgY2xvY2FsZSIgPiYyO30KKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKK0BAIC01ODAyLDYgKzU4MDIsOSBAQAorICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCisrICAgICAgbGludXgtdWNsaWJjKikKKysgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCisrCTs7CisgICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCisgICAgICAgICBlbmFibGVfY2xvY2FsZV9mbGFnPWdudQorICAgICAgICAgOzsKK0BAIC02MTkwLDYgKzYxOTMsNzYgQEAKKyAgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjCisgICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorICAgICAgIDs7CisrICAgIHVjbGliYykKKysgICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1Y2xpYmMiID4mNQorK2VjaG8gIiR7RUNIT19UfXVjbGliYyIgPiY2CisrCisrICAgICAgIyBEZWNsYXJlIGludGVudGlvbiB0byB1c2UgZ2V0dGV4dCwgYW5kIGFkZCBzdXBwb3J0IGZvciBzcGVjaWZpYworKyAgICAgICMgbGFuZ3VhZ2VzLgorKyAgICAgICMgRm9yIHNvbWUgcmVhc29uLCBBTExfTElOR1VBUyBoYXMgdG8gYmUgYmVmb3JlIEFNLUdOVS1HRVRURVhUCisrICAgICAgQUxMX0xJTkdVQVM9ImRlIGZyIgorKworKyAgICAgICMgRG9uJ3QgY2FsbCBBTS1HTlUtR0VUVEVYVCBoZXJlLiBJbnN0ZWFkLCBhc3N1bWUgZ2xpYmMuCisrICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtc2dmbXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtc2dmbXQ7IGFjX3dvcmQ9JDIKKytlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2hlY2tfbXNnZm10K3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRjaGVja19tc2dmbXQiOyB0aGVuCisrICBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0iJGNoZWNrX21zZ2ZtdCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICAgIGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10PSJ5ZXMiCisrICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrZG9uZQorKworKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10IiAmJiBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0ibm8iCisrZmkKKytmaQorK2NoZWNrX21zZ2ZtdD0kYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQKKytpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgorKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGNoZWNrX21zZ2ZtdCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGNoZWNrX21zZ2ZtdCIgPiY2CisrZWxzZQorKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKKytmaQorKworKyAgICAgIGlmIHRlc3QgeCIkY2hlY2tfbXNnZm10IiA9IHgieWVzIiAmJiB0ZXN0IHgiJGVuYWJsZV9ubHMiID0geCJ5ZXMiOyB0aGVuCisrICAgICAgICBVU0VfTkxTPXllcworKyAgICAgIGZpCisrICAgICAgIyBFeHBvcnQgdGhlIGJ1aWxkIG9iamVjdHMuCisrICAgICAgZm9yIGxpbmcgaW4gJEFMTF9MSU5HVUFTOyBkbyBcCisrICAgICAgICBnbGliY3h4X01PRklMRVM9IiRnbGliY3h4X01PRklMRVMgJGxpbmcubW8iOyBcCisrICAgICAgICBnbGliY3h4X1BPRklMRVM9IiRnbGliY3h4X1BPRklMRVMgJGxpbmcucG8iOyBcCisrICAgICAgZG9uZQorKworKworKworKyAgICAgIENMT0NBTEVfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrICAgICAgQ0xPQ0FMRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKyAgICAgIENDT0RFQ1ZUX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworKyAgICAgIENDT0xMQVRFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworKyAgICAgIENDVFlQRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrICAgICAgQ01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrICAgICAgQ01FU1NBR0VTX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKysgICAgICBDTU9ORVlfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKyAgICAgIENOVU1FUklDX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKyAgICAgIENUSU1FX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysgICAgICA7OworICAgZXNhYworIAorICAgIyBUaGlzIGlzIHdoZXJlIHRoZSB0ZXN0c3VpdGUgbG9va3MgZm9yIGxvY2FsZSBjYXRhbG9ncywgdXNpbmcgdGhlCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oIGdjYy00LjIuMS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaAorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCTIwMDUtMDgtMTcgMDQ6Mjg6NDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMTAxLDcgKzEwMSw5IEBACisgdXNpbmcgc3RkOjp3bWVtY3B5OworIHVzaW5nIHN0ZDo6d21lbW1vdmU7CisgdXNpbmcgc3RkOjp3bWVtc2V0OworKyNpZiBfR0xJQkNYWF9IQVZFX1dDU0ZUSU1FCisgdXNpbmcgc3RkOjp3Y3NmdGltZTsKKysjZW5kaWYKKyAKKyAjaWYgX0dMSUJDWFhfVVNFX0M5OQorIHVzaW5nIHN0ZDo6d2NzdG9sZDsKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvc3RkX2N3Y2hhci5oIGdjYy00LjIuMS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9zdGRfY3djaGFyLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9zdGRfY3djaGFyLmgJMjAwNi0xMi0wNyAxMDozMzo1MS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvc3RkX2N3Y2hhci5oCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMTgyLDcgKzE4Miw5IEBACisgICB1c2luZyA6Ondjc2NvbGw7CisgICB1c2luZyA6Ondjc2NweTsKKyAgIHVzaW5nIDo6d2NzY3NwbjsKKysjaWYgX0dMSUJDWFhfSEFWRV9XQ1NGVElNRQorICAgdXNpbmcgOjp3Y3NmdGltZTsKKysjZW5kaWYKKyAgIHVzaW5nIDo6d2NzbGVuOworICAgdXNpbmcgOjp3Y3NuY2F0OworICAgdXNpbmcgOjp3Y3NuY21wOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMi8xMzAtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjIvMTMwLXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg4ZGMyMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjIvMTMwLXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2gKQEAgLTAsMCArMSwyMjMgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCTIwMDctMDgtMDMgMjA6MzA6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtMzksMjAgKzM5LDYgQEAKKyAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fc3RydG9sX2woUywgRSwgQiwgTCkgICAgICBzdHJ0b2woKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG91bF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b3VsKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvbGxfbChTLCBFLCBCLCBMKSAgICAgc3RydG9sbCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b3VsbF9sKFMsIEUsIEIsIEwpICAgIHN0cnRvdWxsKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorLSNkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKy0jZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorLSN3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CistI2RlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorLSNkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorLSNkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQgCisgeworICAgdGVtcGxhdGU8PgorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAkyMDA3LTA4LTAzIDIwOjMwOjUzLjAwMDAwMDAwMCArMDIwMAorQEAgLTY4LDYgKzY4LDcgQEAKKyB7CisgICBleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisgfQorKyNkZWZpbmUgX191c2Vsb2NhbGUgdXNlbG9jYWxlCisgI2VuZGlmCisgCisgbmFtZXNwYWNlIHN0ZAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgJMjAwNy0wOC0wMyAyMDozMDo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC02MCw0ICs2MCw0OSBAQAorIGV4dGVybiAiQyIgX190eXBlb2Yod2N0eXBlX2wpIF9fd2N0eXBlX2w7CisgI2VuZGlmIAorIAorKyMgZGVmaW5lIF9fbmxfbGFuZ2luZm9fbCBubF9sYW5naW5mb19sCisrIyBkZWZpbmUgX19zdHJjb2xsX2wgc3RyY29sbF9sCisrIyBkZWZpbmUgX19zdHJmdGltZV9sIHN0cmZ0aW1lX2wKKysjIGRlZmluZSBfX3N0cnRvZF9sIHN0cnRvZF9sCisrIyBkZWZpbmUgX19zdHJ0b2ZfbCBzdHJ0b2ZfbAorKyMgZGVmaW5lIF9fc3RydG9sZF9sIHN0cnRvbGRfbAorKyMgZGVmaW5lIF9fc3RyeGZybV9sIHN0cnhmcm1fbAorKyMgZGVmaW5lIF9fbmV3bG9jYWxlIG5ld2xvY2FsZQorKyMgZGVmaW5lIF9fZnJlZWxvY2FsZSBmcmVlbG9jYWxlCisrIyBkZWZpbmUgX19kdXBsb2NhbGUgZHVwbG9jYWxlCisrIyBkZWZpbmUgX191c2Vsb2NhbGUgdXNlbG9jYWxlCisrCisrIyBpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyMgIGRlZmluZSBfX2lzd2N0eXBlX2wgaXN3Y3R5cGVfbAorKyMgIGRlZmluZSBfX3Rvd2xvd2VyX2wgdG93bG93ZXJfbAorKyMgIGRlZmluZSBfX3Rvd3VwcGVyX2wgdG93dXBwZXJfbAorKyMgIGRlZmluZSBfX3djc2NvbGxfbCB3Y3Njb2xsX2wKKysjICBkZWZpbmUgX193Y3NmdGltZV9sIHdjc2Z0aW1lX2wKKysjICBkZWZpbmUgX193Y3N4ZnJtX2wgd2NzeGZybV9sCisrIyAgZGVmaW5lIF9fd2N0eXBlX2wgd2N0eXBlX2wKKysjIGVuZGlmCisrCisrI2Vsc2UKKysjIGRlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyMgZGVmaW5lIF9fc3RyY29sbF9sKFMxLCBTMiwgTCkgICAgICBzdHJjb2xsKChTMSksIChTMikpCisrIyBkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorKyMgZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorKyMgZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKysjIHdhcm5pbmcgc2hvdWxkIGR1bW15IF9fbmV3bG9jYWxlIGNoZWNrIGZvciBDfFBPU0lYID8KKysjIGRlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorKyMgZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKysjIGRlZmluZSBfX2R1cGxvY2FsZShhKSAgICAgICAgICAgICAgX19jX2xvY2FsZSgpCisrLy8jIGRlZmluZSBfX3VzZWxvY2FsZSA/CisrLy8KKysjIGlmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrIyAgZGVmaW5lIF9faXN3Y3R5cGVfbChDLCBNLCBMKSAgICAgICBpc3djdHlwZSgoQyksIChNKSkKKysjICBkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgIHRvd2xvd2VyKChDKSkKKysjICBkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgIHRvd3VwcGVyKChDKSkKKysjICBkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKysvLyMgIGRlZmluZSBfX3djc2Z0aW1lX2woUywgTSwgRiwgVCwgTCkgIHdjc2Z0aW1lKChTKSwgKE0pLCAoRiksIChUKSkgCisrIyAgZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKysjICBkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgIHdjdHlwZSgoUykpCisrIyBlbmRpZgorKworICNlbmRpZiAvLyBHTElCQyAyLjMgYW5kIGxhdGVyCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zNiwxMyArMzYsNiBAQAorICNpbmNsdWRlIDxsb2NhbGU+CisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorLSNkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorLSNkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKy0jZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gVGhlc2UgYXJlIGJhc2ljYWxseSBleHRlbnNpb25zIHRvIGNoYXJfdHJhaXRzLCBhbmQgcGVyaGFwcyBzaG91bGQKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zOCwxMyArMzgsNiBAQAorICN1bmRlZiBfTElCQworICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgd2N0eXBlKChTKSkKKy0jZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgIHRvd3VwcGVyKChDKSkKKy0jZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgIHRvd2xvd2VyKChDKSkKKy0jZGVmaW5lIF9faXN3Y3R5cGVfbChDLCBNLCBMKSAgICAgIGlzd2N0eXBlKChDKSwgKE0pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBOQjogVGhlIG90aGVyIGN0eXBlPGNoYXI+IHNwZWNpYWxpemF0aW9ucyBhcmUgaW4gc3JjL2xvY2FsZS5jYyBhbmQKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zOSwxMyArMzksMTAgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggZ2V0dGV4dCBzdHVmZgorICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLWV4dGVybiAiQyIgY2hhciAqX19kY2dldHRleHQoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKy0JCQkgICAgIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpOworICN1bmRlZiBnZXR0ZXh0CistI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBfX2RjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBkY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorICNlbHNlCistI3VuZGVmIGdldHRleHQKKyAjZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKyAjZW5kaWYKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAkyMDA3LTA4LTAzIDIwOjMwOjUzLjAwMDAwMDAwMCArMDIwMAorQEAgLTM2LDE1ICszNiwxMSBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLWV4dGVybiAiQyIgY2hhciAqX190ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOworLWV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorLQkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUpOworLSNlbHNlCistI3VuZGVmIF9fdGV4dGRvbWFpbgorLSN1bmRlZiBfX2JpbmR0ZXh0ZG9tYWluCistI2RlZmluZSBfX3RleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorLSNkZWZpbmUgX19iaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI3VuZGVmIHRleHRkb21haW4KKysjdW5kZWYgYmluZHRleHRkb21haW4KKysjZGVmaW5lIHRleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisgI2VuZGlmCisgCisgICAvLyBOb24tdmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorQEAgLTcwLDcgKzY2LDcgQEAKKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywgCisgCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CisgICAgIHsgCistICAgICAgX19iaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworKyAgICAgIGJpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CisgICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7IAorICAgICB9CisgCitAQCAtOTAsNyArODYsNyBAQAorICAgICB7IAorICAgICAgIC8vIE5vIGVycm9yIGNoZWNraW5nIGlzIGRvbmUsIGFzc3VtZSB0aGUgY2F0YWxvZyBleGlzdHMgYW5kIGNhbgorICAgICAgIC8vIGJlIHVzZWQuCistICAgICAgX190ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKysgICAgICB0ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKyAgICAgICByZXR1cm4gMDsKKyAgICAgfQorIAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMwOjUzLjAwMDAwMDAwMCArMDIwMAorQEAgLTQzLDEwICs0Myw2IEBACisgI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisgI2VuZGlmCisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIC8vIENvbnN0cnVjdCBhbmQgcmV0dXJuIHZhbGlkIHBhdHRlcm4gY29uc2lzdGluZyBvZiBzb21lIGNvbWJpbmF0aW9uIG9mOgorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtNDEsOSArNDEsNiBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKKyB7CitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC00MCw5ICs0MCw2IEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisgI2VuZGlmCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCistI2VuZGlmCisgCisgbmFtZXNwYWNlIHN0ZAorIHsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjIvMTQwLXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMi8xNDAtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc3YmI1NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjIvMTQwLXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMToyNC4wMDAwMDAwMDAgKzAyMDAKK0BAIC00MDEsNyArNDAxLDcgQEAKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CistIyBlbHNlCisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworICMgZW5kaWYKK0BAIC01NTYsNyArNTU2LDcgQEAKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CistIyBlbHNlCisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworICMgZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMxOjI0LjAwMDAwMDAwMCArMDIwMAorQEAgLTEyNywxMiArMTI3LDI1IEBACisgCXsKKyAJICAvLyBOYW1lZCBsb2NhbGUuCisgCSAgLy8gTkI6IEluIHRoZSBHTlUgbW9kZWwgd2NoYXJfdCBpcyBhbHdheXMgMzIgYml0IHdpZGUuCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG51bWVyaWMKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfXworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbmRpZgorKyNlbHNlCisgCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKyAJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisgCisgCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorIAorIAkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09IEwnXDAnKQorIAkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjIvMTUwLXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMi8xNTAtdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM0ZjRlNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjIvMTUwLXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoCkBAIC0wLDAgKzEsMzU0IEBACitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCTIwMDctMDgtMDMgMjA6MzA6NTMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwkyMDA3LTA4LTAzIDIwOjMxOjU0LjAwMDAwMDAwMCArMDIwMAorQEAgLTQ2LDE2ICs0NiwxMyBAQAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGZsb2F0JiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgCisgCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICAgIHsKKy0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKy0JeworLQkgIGNoYXIqIF9fc2FuaXR5OworLQkgIGVycm5vID0gMDsKKy0JICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fZjsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwlfX3YgPSBfX2Y7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdGVtcGxhdGU8PgorQEAgLTYzLDE2ICs2MCwxMyBAQAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIAorIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorICAgICB7CistICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCistCXsKKy0JICBjaGFyKiBfX3Nhbml0eTsKKy0JICBlcnJubyA9IDA7CistCSAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CistICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorLQkgICAgX192ID0gX19kOworLQkgIGVsc2UKKy0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworLQl9CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwlfX3YgPSBfX2Q7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdGVtcGxhdGU8PgorQEAgLTgwLDE2ICs3NCwxMyBAQAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGxvbmcgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKy0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCistCSAgICBfX3YgPSBfX2xkOworLQkgIGVsc2UKKy0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworLQl9CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19sZDsKKysgICAgICBlbHNlCisrCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICB9CisgCisgICB2b2lkCitAQCAtMTEwLDcgKzEwMSw3IEBACisgICB2b2lkCisgICBsb2NhbGU6OmZhY2V0OjpfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKyAgIHsKKy0gICAgaWYgKF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKKysgICAgaWYgKF9fY2xvYyAmJiBfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCisgICAgICAgX19mcmVlbG9jYWxlKF9fY2xvYyk7IAorICAgfQorIAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAkyMDA3LTA4LTAzIDIwOjMwOjUzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAkyMDA3LTA4LTAzIDIwOjMxOjU0LjAwMDAwMDAwMCArMDIwMAorQEAgLTM5LDIxICszOSwyMyBAQAorICNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKyAKKyAjaW5jbHVkZSA8Y3N0cmluZz4gICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnN0cmxlbgorLSNpbmNsdWRlIDxjc3RkaW8+ICAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c25wcmludGYgb3Igc3RkOjpzcHJpbnRmCisrI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjp2c25wcmludGYgb3Igc3RkOjp2c3ByaW50ZgorICNpbmNsdWRlIDxjbG9jYWxlPgorICNpbmNsdWRlIDxsYW5naW5mby5oPgkJLy8gRm9yIGNvZGVjdnQKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggdGhpcworICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysjaWZkZWYgX0dMSUJDWFhfVVNFX0lDT05WCisgI2luY2x1ZGUgPGljb252Lmg+CQkvLyBGb3IgY29kZWN2dCB1c2luZyBpY29udiwgaWNvbnZfdAorICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLSNpbmNsdWRlIDxsaWJpbnRsLmg+IAkJLy8gRm9yIG1lc3NhZ2VzCisrI2lmZGVmIEhBVkVfTElCSU5UTF9ICisrI2luY2x1ZGUgPGxpYmludGwuaD4JCS8vIEZvciBtZXNzYWdlcworICNlbmRpZgorKyNpbmNsdWRlIDxjc3RkYXJnPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHdoYXQgaXMgX0dMSUJDWFhfQ19MT0NBTEVfR05VIGZvcgorKy8vIHBzbTogdXNlZCBpbiBvcy9nbnUtbGludXgvY3R5cGVfbm9uaW5saW5lLmgKKyAjZW5kaWYKKyAjZGVmaW5lIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSAxCisgCitAQCAtNjIsNyArNjQsNyBAQAorICNlbmRpZgorIC8vICNkZWZpbmUgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgNgorICNkZWZpbmUgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgMAorLSAKKysKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIG5hbWVzcGFjZSBfX2dudV9jeHgKKyB7CitAQCAtNzksMjIgKzgxLDI0IEBACisgICB0eXBlZGVmIGludCoJCQlfX2NfbG9jYWxlOworICNlbmRpZgorIAorLSAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgX1R2IHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgorLSAgLy8gc3RyaW5nLiAgSWYgc25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworLSAgLy8gdGhlIHVuc2FmZSBzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKysgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIGRvdWJsZSB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKysgIC8vIHN0cmluZy4gIElmIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCisrICAvLyB0aGUgdW5zYWZlIHZzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKyAgIC8vIGJlIGF2b2lkZWQuCistICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CistICAgIGludAorLSAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LCAKKy0JCSAgICAgY29uc3QgaW50IF9fc2l6ZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpLAorLQkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKy0JCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19wcmVjKQorKyAgICBpbmxpbmUgaW50CisrICAgIF9fY29udmVydF9mcm9tX3YoY29uc3QgX19jX2xvY2FsZSYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrCQkJCQlfX2Nsb2MgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQorKyNlbmRpZgorKwkJICAgICAsCisrCQkgICAgIGNoYXIqIF9fb3V0LAorKwkJICAgICBjb25zdCBpbnQgX19zaXplLAorKwkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwgLi4uKQorICAgICB7CisrICAgICAgdmFfbGlzdCBfX2FyZ3M7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisgICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19jbG9jKTsKKyAjZWxzZQorLQkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYykKKy0gICAgeworICMgaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgICAgICAgY2hhciogX19vbGQgPSBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworICAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19vbGQpICsgMV07CitAQCAtMTAzLDcgKzEwNyw5IEBACisgIyBlbmRpZgorICNlbmRpZgorIAorLSAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKKysgICAgICB2YV9zdGFydChfX2FyZ3MsIF9fZm10KTsKKysgICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnZzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19hcmdzKTsKKysgICAgICB2YV9lbmQoX19hcmdzKTsKKyAKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKyAgICAgICBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fb2xkKTsKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMTo1NC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMyw5ICszMywxNCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKyBuYW1lc3BhY2Ugc3RkCitAQCAtMTM4LDIwICsxNDMsMzQgQEAKKyAgIGN0eXBlPHdjaGFyX3Q+OjoKKyAgIGRvX2lzKG1hc2sgX19tLCB3Y2hhcl90IF9fYykgY29uc3QKKyAgIHsgCistICAgIC8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCistICAgIC8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKyAgICAvLyBUaGUgY2FzZSBvZiBfX20gPT0gY3R5cGVfYmFzZTo6c3BhY2UgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCwKKysgICAgLy8gZHVlIHRvIGl0cyB1c2UgaW4gbWFueSBpc3RyZWFtIGZ1bmN0aW9ucy4gIFRoZXJlZm9yZSB3ZSBkZWFsIHdpdGgKKysgICAgLy8gaXQgZmlyc3QsIGV4cGxvaXRpbmcgdGhlIGtub3dsZWRnZSB0aGF0IG9uIEdOVSBzeXN0ZW1zIF9NX2JpdFs1XQorKyAgICAvLyBpcyB0aGUgbWFzayBjb3JyZXNwb25kaW5nIHRvIGN0eXBlX2Jhc2U6OnNwYWNlLiAgTkI6IGFuIGVuY29kaW5nCisrICAgIC8vIGNoYW5nZSB3b3VsZCBub3QgYWZmZWN0IGNvcnJlY3RuZXNzIQorICAgICBib29sIF9fcmV0ID0gZmFsc2U7CistICAgIGNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7IAorLSAgICBmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCistICAgICAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0KKy0JICAmJiBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKy0JeworLQkgIF9fcmV0ID0gdHJ1ZTsKKy0JICBicmVhazsKKy0JfQorKyAgICBpZiAoX19tID09IF9NX2JpdFs1XSkKKysgICAgICBfX3JldCA9IF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrWzVdLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrICAgIGVsc2UKKysgICAgICB7CisrCS8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrCS8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKwljb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworKwlmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrCSAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0pCisrCSAgICB7CisrCSAgICAgIGlmIChfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJCXsKKysJCSAgX19yZXQgPSB0cnVlOworKwkJICBicmVhazsKKysJCX0KKysJICAgICAgZWxzZSBpZiAoX19tID09IF9NX2JpdFtfX2JpdGN1cl0pCisrCQlicmVhazsKKysJICAgIH0KKysgICAgICB9CisgICAgIHJldHVybiBfX3JldDsgICAgCisgICB9CistICAKKysKKyAgIGNvbnN0IHdjaGFyX3QqIAorICAgY3R5cGU8d2NoYXJfdD46OgorICAgZG9faXMoY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgbWFzayogX192ZWMpIGNvbnN0CitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCTIwMDctMDgtMDMgMjA6MzA6NTMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgJMjAwNy0wOC0wMyAyMDozMTo1NC4wMDAwMDAwMDAgKzAyMDAKK0BAIC00NywxOCArNDcsMjEgQEAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKHNpemVfdCBfX3JlZnMpCisgICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2dldF9jX2xvY2FsZSgpKSwgCistICAgICBfTV9uYW1lX21lc3NhZ2VzKF9TX2dldF9jX25hbWUoKSkKKysgICAgICAgX01fbmFtZV9tZXNzYWdlcyhfU19nZXRfY19uYW1lKCkpCisgICAgICB7IH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsIAorIAkJCQlzaXplX3QgX19yZWZzKSAKKy0gICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKSksCistICAgICBfTV9uYW1lX21lc3NhZ2VzKF9fcykKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoTlVMTCksIF9NX25hbWVfbWVzc2FnZXMoTlVMTCkKKyAgICAgIHsKKy0gICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CistICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdGQ6OnN0cmxlbihfX3MpICsgMTsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07CisrICAgICAgIHN0ZDo6bWVtY3B5KF9fdG1wLCBfX3MsIF9fbGVuKTsKKyAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKworKyAgICAgICAvLyBMYXN0IHRvIGF2b2lkIGxlYWtpbmcgbWVtb3J5IGlmIG5ldyB0aHJvd3MuCisrICAgICAgIF9NX2NfbG9jYWxlX21lc3NhZ2VzID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKKyAgICAgIH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMToyNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMTo1NC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMyw5ICszMywxNCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KK0BAIC0yMDYsNyArMjExLDcgQEAKKyAJICB9CisgCWJyZWFrOworICAgICAgIGRlZmF1bHQ6CistCTsKKysJX19yZXQgPSBwYXR0ZXJuKCk7CisgICAgICAgfQorICAgICByZXR1cm4gX19yZXQ7CisgICB9CitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzE6MjQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMTo1NC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMyw5ICszMywxNCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCTIwMDctMDgtMDMgMjA6MzE6NTQuMDAwMDAwMDAwICswMjAwCitAQCAtMzcsMjUgKzM3LDMzIEBACisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KHNpemVfdCBfX3JlZnMpIAorICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwgCistICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgICBfTV9uYW1lX3RpbWVwdW5jdChfU19nZXRfY19uYW1lKCkpCisgICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsgfQorIAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NhY2hlX3R5cGUqIF9fY2FjaGUsIHNpemVfdCBfX3JlZnMpIAorICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoX19jYWNoZSksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwgCistICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgICBfTV9uYW1lX3RpbWVwdW5jdChfU19nZXRfY19uYW1lKCkpCisgICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsgfQorIAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorIAkJCQkgICAgIHNpemVfdCBfX3JlZnMpIAorICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwgCistICAgIF9NX25hbWVfdGltZXB1bmN0KF9fcykKKysgICAgICBfTV9uYW1lX3RpbWVwdW5jdChOVUxMKQorICAgICB7IAorLSAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworLSAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0ZDo6c3RybGVuKF9fcykgKyAxOworKyAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbX19sZW5dOworKyAgICAgIHN0ZDo6bWVtY3B5KF9fdG1wLCBfX3MsIF9fbGVuKTsKKyAgICAgICBfTV9uYW1lX3RpbWVwdW5jdCA9IF9fdG1wOworLSAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7IAorKworKyAgICAgIHRyeQorKwl7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7IH0KKysgICAgICBjYXRjaCguLi4pCisrCXsKKysJICBkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CisrCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisrCX0KKyAgICAgfQorIAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMi8xNjAtbGlic3RkYysrLXBpYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjIvMTYwLWxpYnN0ZGMrKy1waWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI0NGQ0YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjIvMTYwLWxpYnN0ZGMrKy1waWMucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmFtIGdjYy00LjIuMS9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmFtCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQkyMDA2LTA3LTI4IDA2OjU3OjM0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmFtCTIwMDctMDgtMDMgMjA6MzI6MjcuMDAwMDAwMDAwICswMjAwCitAQCAtMjU3LDYgKzI1NywxMiBAQAorIAkgICQoT1BUX0xERkxBR1MpICQoU0VDVElPTl9MREZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKExUTERGTEFHUykgLW8gJEAKKyAKKyAKKytpbnN0YWxsLWV4ZWMtbG9jYWw6CisraWZlcSAoJChlbmFibGVfc2hhcmVkKSx5ZXMpCisrCSQoQVIpIGNydSBsaWJzdGRjKytfcGljLmEgLmxpYnMvKi5vICQodG9wX2J1aWxkZGlyKS9saWJzdXBjKysvKi5vCisrCSQoSU5TVEFMTF9EQVRBKSBsaWJzdGRjKytfcGljLmEgJChERVNURElSKSQodG9vbGV4ZWNsaWJkaXIpCisrZW5kaWYKKysKKyAjIEFkZGVkIGJpdHMgdG8gYnVpbGQgZGVidWcgbGlicmFyeS4KKyBpZiBHTElCQ1hYX0JVSUxEX0RFQlVHCisgYWxsLWxvY2FsOiBidWlsZF9kZWJ1ZworZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluIGdjYy00LjIuMS9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgkyMDA2LTEwLTE2IDIxOjA4OjIyLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCTIwMDctMDgtMDMgMjA6MzI6MjcuMDAwMDAwMDAwICswMjAwCitAQCAtNjU3LDcgKzY1Nyw3IEBACisgCisgaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWRhdGEtbG9jYWwKKyAKKy1pbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUworK2luc3RhbGwtZXhlYy1hbTogaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTIGluc3RhbGwtZXhlYy1sb2NhbAorIAorIGluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisgCitAQCAtNjkwLDYgKzY5MCw3IEBACisgCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKKyAJaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCisgCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWRhdGEtbG9jYWwgaW5zdGFsbC1leGVjIFwKKysJaW5zdGFsbC1leGVjLWxvY2FsIFwKKyAJaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorIAlpbnN0YWxsLXN0cmlwIGluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUyBpbnN0YWxsY2hlY2sgXAorIAlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCitAQCAtNzk5LDYgKzgwMCwxMyBAQAorIGluc3RhbGxfZGVidWc6CisgCShjZCAke2RlYnVnZGlyfSAmJiAkKE1BS0UpIFwKKyAJdG9vbGV4ZWNsaWJkaXI9JChnbGliY3h4X3Rvb2xleGVjbGliZGlyKS9kZWJ1ZyBpbnN0YWxsKQorKworK2luc3RhbGwtZXhlYy1sb2NhbDoKKytpZmVxICgkKGVuYWJsZV9zaGFyZWQpLHllcykKKysJJChBUikgY3J1IGxpYnN0ZGMrK19waWMuYSAqLm8gJCh0b3BfYnVpbGRkaXIpL2xpYnN1cGMrKy8qLm8KKysJJChJTlNUQUxMX0RBVEEpIGxpYnN0ZGMrK19waWMuYSAkKERFU1RESVIpJCh0b29sZXhlY2xpYmRpcikKKytlbmRpZgorKworICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisgIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisgLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMi8xNzAtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMi8xNzAtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNjc4OTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4yLzE3MC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9ib2VobS1nYy9pbmNsdWRlL2djLmggZ2NjLTQuMi4xL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAorLS0tIGdjYy00LjIuMS5vcmlnL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAkyMDA2LTA5LTE4IDIwOjQ1OjA4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9ib2VobS1nYy9pbmNsdWRlL2djLmgJMjAwNy0wOC0wMyAyMDozMzowMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC01MDIsNyArNTAyLDcgQEAKKyAjaWYgZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoX19HTElCQ19fKQorICMgaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyAjIGlmIChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMSB8fCBfX0dMSUJDX18gPiAyKSBcCistICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykKKysgICAgICYmICFkZWZpbmVkKF9faWE2NF9fKSAmJiAhZGVmaW5lZChfX1VDTElCQ19fKQorICMgICBpZm5kZWYgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQorICMgICAgIGRlZmluZSBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgIGVuZGlmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4yLzE4MC1jOTktc25wcmludGYucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4yLzE4MC1jOTktc25wcmludGYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRiMGMzNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjIvMTgwLWM5OS1zbnByaW50Zi5wYXRjaApAQCAtMCwwICsxLDEyIEBACitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL3N0ZF9jc3RkaW8uaCBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvc3RkX2NzdGRpby5oCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvc3RkX2NzdGRpby5oCTIwMDYtMTItMDcgMTA6MzM6NTEuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL3N0ZF9jc3RkaW8uaAkyMDA3LTA4LTAzIDIwOjMzOjI0LjAwMDAwMDAwMCArMDIwMAorQEAgLTE0NCw3ICsxNDQsNyBAQAorIAorIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKyAKKy0jaWYgX0dMSUJDWFhfVVNFX0M5OQorKyNpZiBfR0xJQkNYWF9VU0VfQzk5IHx8IGRlZmluZWQoX19VQ0xJQkNfXykKKyAKKyAjdW5kZWYgc25wcmludGYKKyAjdW5kZWYgdmZzY2FuZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMi8xOTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMi8xOTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNmQ3MWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4yLzE5MC1jOTktY29tcGxleC11Z2x5LWhhY2sucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlndXJlIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlndXJlCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlndXJlCTIwMDctMDgtMDMgMjA6MzM6NTYuMDAwMDAwMDAwICswMjAwCitAQCAtNzUxNCw2ICs3NTE0LDkgQEAKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpbmNsdWRlIDxjb21wbGV4Lmg+CisrI2lmZGVmIF9fVUNMSUJDX18KKysjZXJyb3IgdWdseSBoYWNrIHRvIG1ha2Ugc3VyZSBjb25maWd1cmUgdGVzdCBmYWlscyBoZXJlIGZvciBjcm9zcyB1bnRpbCB1Q2xpYmMgc3VwcG9ydHMgdGhlIGNvbXBsZXggZnVuY3MKKysjZW5kaWYKKyBpbnQKKyBtYWluICgpCisgewpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMi8yMDAtaW5kZXhfbWFjcm8ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4yLzIwMC1pbmRleF9tYWNyby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTU2YjVkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMi8yMDAtaW5kZXhfbWFjcm8ucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZSBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQkyMDA2LTEwLTE3IDEzOjU2OjIxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQkyMDA3LTA4LTAzIDIwOjM0OjIzLjAwMDAwMDAwMCArMDIwMAorQEAgLTU4LDYgKzU4LDkgQEAKKyAjaW5jbHVkZSA8Yml0cy9hbGxvY2F0b3IuaD4KKyAjaW5jbHVkZSA8ZXh0L2hhc2hfZnVuLmg+CisgCisrLyogY29wZSB3LyBpbmRleCBkZWZpbmVkIGFzIG1hY3JvLCBTdVN2MyBwcm9wb3NhbCAqLworKyN1bmRlZiBpbmRleAorKworICMgaWZkZWYgX19HQworICMgICBkZWZpbmUgX19HQ19DT05TVCBjb25zdAorICMgZWxzZQorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaCBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAkyMDA2LTEwLTE3IDEzOjU2OjIxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAkyMDA3LTA4LTAzIDIwOjM0OjIzLjAwMDAwMDAwMCArMDIwMAorQEAgLTU0LDYgKzU0LDkgQEAKKyAjaW5jbHVkZSA8ZXh0L21lbW9yeT4gLy8gRm9yIHVuaW5pdGlhbGl6ZWRfY29weV9uCisgI2luY2x1ZGUgPGV4dC9udW1lcmljPiAvLyBGb3IgcG93ZXIKKyAKKysvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCisrI3VuZGVmIGluZGV4CisrCisgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKyAKKyAgIHVzaW5nIHN0ZDo6c2l6ZV90OwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMi8yMTAtbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4yLzIxMC1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmU4NzA0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMi8yMTAtbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJtdWRmbGFwL21mLWhvb2tzMi5jIGdjYy00LjIuMS9saWJtdWRmbGFwL21mLWhvb2tzMi5jCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlibXVkZmxhcC9tZi1ob29rczIuYwkyMDA1LTA5LTIzIDIzOjU4OjM5LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJtdWRmbGFwL21mLWhvb2tzMi5jCTIwMDctMDgtMDMgMjA6MzU6MDkuMDAwMDAwMDAwICswMjAwCitAQCAtNDI3LDcgKzQyNyw3IEBACisgeworICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQocywgbiwgX19NRl9DSEVDS19XUklURSwgImJ6ZXJvIHJlZ2lvbiIpOworLSAgYnplcm8gKHMsIG4pOworKyAgbWVtc2V0IChzLCAwLCBuKTsKKyB9CisgCisgCitAQCAtNDM3LDcgKzQzNyw3IEBACisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzcmMsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjb3B5IHNyYyIpOworICAgTUZfVkFMSURBVEVfRVhURU5UKGRlc3QsIG4sIF9fTUZfQ0hFQ0tfV1JJVEUsICJiY29weSBkZXN0Iik7CistICBiY29weSAoc3JjLCBkZXN0LCBuKTsKKysgIG1lbW1vdmUgKGRlc3QsIHNyYywgbik7CisgfQorIAorIAorQEAgLTQ0Nyw3ICs0NDcsNyBAQAorICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQoczEsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjbXAgMXN0IGFyZyIpOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMyLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY21wIDJuZCBhcmciKTsKKy0gIHJldHVybiBiY21wIChzMSwgczIsIG4pOworKyAgcmV0dXJuIG4gPT0gMCA/IDAgOiBtZW1jbXAgKHMxLCBzMiwgbik7CisgfQorIAorIAorQEAgLTQ1Niw3ICs0NTYsNyBAQAorICAgc2l6ZV90IG4gPSBzdHJsZW4gKHMpOworICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQocywgQ0xBTVBBREQobiwgMSksIF9fTUZfQ0hFQ0tfUkVBRCwgImluZGV4IHJlZ2lvbiIpOworLSAgcmV0dXJuIGluZGV4IChzLCBjKTsKKysgIHJldHVybiBzdHJjaHIgKHMsIGMpOworIH0KKyAKKyAKK0BAIC00NjUsNyArNDY1LDcgQEAKKyAgIHNpemVfdCBuID0gc3RybGVuIChzKTsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIENMQU1QQUREKG4sIDEpLCBfX01GX0NIRUNLX1JFQUQsICJyaW5kZXggcmVnaW9uIik7CistICByZXR1cm4gcmluZGV4IChzLCBjKTsKKysgIHJldHVybiBzdHJyY2hyIChzLCBjKTsKKyB9CisgCisgLyogWFhYOiAgc3RwY3B5LCBtZW1jY3B5ICovCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4yLzIyMC1saWJzdGRjKystbmFtZXNwYWNlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMi8yMjAtbGlic3RkYysrLW5hbWVzcGFjZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDllOGYyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMi8yMjAtbGlic3RkYysrLW5hbWVzcGFjZS5wYXRjaApAQCAtMCwwICsxLDM2IEBACitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCTIwMDctMDgtMDMgMjA6MzE6NTQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgJMjAwNy0wOC0wMyAyMDozNTo0MC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMiw3ICszMiw4IEBACisgLy8KKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorLQorK25hbWVzcGFjZSBzdGQKKyt7CisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IHByb3RvdHlwZXMgZm9yICp0ZXh0ZG9tYWluIGZ1bmNzCisgI2VuZGlmCitAQCAtMTE1LDMgKzExNiw0IEBACisgCSAgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsgCisgCSB9CisgICAgICB9CisrfQorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAkyMDA3LTA4LTAzIDIwOjMxOjU0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgJMjAwNy0wOC0wMyAyMDozNTo0MC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMyw3ICszMyw4IEBACisgLy8KKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorLQorK25hbWVzcGFjZSBzdGQKKyt7CisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KHNpemVfdCBfX3JlZnMpIAorICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwgCitAQCAtNzQsMyArNzUsNCBAQAorICAgICAgIGRlbGV0ZSBfTV9kYXRhOyAKKyAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7IAorICAgICB9CisrfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMi8yMzAtbGliYmFja2VuZF9kZXBfZ2Nvdi1pb3YuaC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjIvMjMwLWxpYmJhY2tlbmRfZGVwX2djb3YtaW92LmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI3NTRiZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjIvMjMwLWxpYmJhY2tlbmRfZGVwX2djb3YtaW92LmgucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9nY2MvTWFrZWZpbGUuaW4gZ2NjLTQuMi4xL2djYy9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjIuMS5vcmlnL2djYy9NYWtlZmlsZS5pbgkyMDA3LTA1LTMxIDE3OjM3OjM4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9nY2MvTWFrZWZpbGUuaW4JMjAwNy0wOC0wMyAyMDozNjoxNC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNjYwLDcgKzI2NjAsNyBAQAorICMgRklYTUU6IHdyaXRpbmcgcHJvcGVyIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBpcyBhICpMT1QqIG9mIHdvcmsuCisgbGliYmFja2VuZC5vIDogJChPQkpTLWNvbW1vbjoubz0uYykgJChvdXRfZmlsZSkgXAorICAgaW5zbi1jb25maWcuaCBpbnNuLWZsYWdzLmggaW5zbi1jb2Rlcy5oIGluc24tY29uc3RhbnRzLmggXAorLSAgaW5zbi1hdHRyLmggICQoREFURVNUQU1QKSAkKEJBU0VWRVIpICQoREVWUEhBU0UpCisrICBpbnNuLWF0dHIuaCAgJChEQVRFU1RBTVApICQoQkFTRVZFUikgJChERVZQSEFTRSkgZ2Nvdi1pb3YuaAorIAkkKENDKSAkKEFMTF9DRkxBR1MpICQoQUxMX0NQUEZMQUdTKSBcCisgCSAgLURUQVJHRVRfTkFNRT1cIiQodGFyZ2V0X25vbmNhbm9uaWNhbClcIiBcCisgCSAgLURMT0NBTEVESVI9XCIkKGxvY2FsZWRpcilcIiBcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4yLzI0MC1hcm0tYmlnZW5kaWFuLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMi8yNDAtYXJtLWJpZ2VuZGlhbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWJlY2NkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMi8yNDAtYXJtLWJpZ2VuZGlhbi5wYXRjaApAQCAtMCwwICsxLDY0IEBACitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oIGdjYy00LjIuMS9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorLS0tIGdjYy00LjIuMS5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMDYtMDItMTcgMDA6Mjk6MTAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMi4xL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMDctMDgtMDMgMjA6MzY6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtMjgsMTkgKzI4LDMzIEBACisgI3VuZGVmICBUQVJHRVRfVkVSU0lPTgorICNkZWZpbmUgVEFSR0VUX1ZFUlNJT04gIGZwdXRzICgiIChBUk0gR05VL0xpbnV4IHdpdGggRUxGKSIsIHN0ZGVycik7CisgCisrLyoKKysgKiAnY29uZmlnLmdjYycgZGVmaW5lcyBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUIGFzIDEgZm9yIGFybSpiLSoKKysgKiAoYmlnIGVuZGlhbikgY29uZmlndXJhdGlvbnMuCisrICovCisrI2lmIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQKKysjZGVmaW5lIFRBUkdFVF9FTkRJQU5fREVGQVVMVCBNQVNLX0JJR19FTkQKKysjZGVmaW5lIFRBUkdFVF9FTkRJQU5fT1BUSU9OICJtYmlnLWVuZGlhbiIKKysjZGVmaW5lIFRBUkdFVF9MSU5LRVJfRU1VTEFUSU9OICJhcm1lbGZiX2xpbnV4IgorKyNlbHNlCisrI2RlZmluZSBUQVJHRVRfRU5ESUFOX0RFRkFVTFQgMAorKyNkZWZpbmUgVEFSR0VUX0VORElBTl9PUFRJT04gIm1saXR0bGUtZW5kaWFuIgorKyNkZWZpbmUgVEFSR0VUX0xJTktFUl9FTVVMQVRJT04gImFybWVsZl9saW51eCIKKysjZW5kaWYKKysKKyAjdW5kZWYgIFRBUkdFVF9ERUZBVUxUX0ZMT0FUX0FCSQorICNkZWZpbmUgVEFSR0VUX0RFRkFVTFRfRkxPQVRfQUJJIEFSTV9GTE9BVF9BQklfSEFSRAorIAorICN1bmRlZiAgVEFSR0VUX0RFRkFVTFQKKy0jZGVmaW5lIFRBUkdFVF9ERUZBVUxUICgwKQorKyNkZWZpbmUgVEFSR0VUX0RFRkFVTFQgKFRBUkdFVF9FTkRJQU5fREVGQVVMVCkKKyAKKyAjZGVmaW5lIFNVQlRBUkdFVF9DUFVfREVGQVVMVCBUQVJHRVRfQ1BVX2FybTYKKyAKKy0jZGVmaW5lIFNVQlRBUkdFVF9FWFRSQV9MSU5LX1NQRUMgIiAtbSBhcm1lbGZfbGludXggLXAiCisrI2RlZmluZSBTVUJUQVJHRVRfRVhUUkFfTElOS19TUEVDICIgLW0gIiBUQVJHRVRfTElOS0VSX0VNVUxBVElPTiAiIC1wIgorIAorICN1bmRlZiAgTVVMVElMSUJfREVGQVVMVFMKKyAjZGVmaW5lIE1VTFRJTElCX0RFRkFVTFRTIFwKKy0JeyAibWFybSIsICJtbGl0dGxlLWVuZGlhbiIsICJtaGFyZC1mbG9hdCIsICJtbm8tdGh1bWItaW50ZXJ3b3JrIiB9CisrCXsgIm1hcm0iLCBUQVJHRVRfRU5ESUFOX09QVElPTiwgIm1oYXJkLWZsb2F0IiwgIm1uby10aHVtYi1pbnRlcndvcmsiIH0KKyAKKyAvKiBOb3cgd2UgZGVmaW5lIHRoZSBzdHJpbmdzIHVzZWQgdG8gYnVpbGQgdGhlIHNwZWMgZmlsZS4gICovCisgI3VuZGVmICBMSUJfU1BFQworQEAgLTYxLDcgKzc1LDcgQEAKKyAgICAle3JkeW5hbWljOi1leHBvcnQtZHluYW1pY30gXAorICAgICV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAiIExJTlVYX0RZTkFNSUNfTElOS0VSICJ9IFwKKyAgICAtWCBcCistICAgJXttYmlnLWVuZGlhbjotRUJ9IiBcCisrICAgJXttYmlnLWVuZGlhbjotRUJ9ICV7bWxpdHRsZS1lbmRpYW46LUVMfSIgXAorICAgIFNVQlRBUkdFVF9FWFRSQV9MSU5LX1NQRUMKKyAKKyAjdW5kZWYgIExJTktfU1BFQworZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9nY2MvY29uZmlnLmdjYyBnY2MtNC4yLjEvZ2NjL2NvbmZpZy5nY2MKKy0tLSBnY2MtNC4yLjEub3JpZy9nY2MvY29uZmlnLmdjYwkyMDA3LTA4LTAzIDIwOjI5OjUyLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9nY2MvY29uZmlnLmdjYwkyMDA3LTA4LTAzIDIwOjM2OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTcwNSw2ICs3MDUsMTEgQEAKKyAJdG1fZmlsZT0iZGJ4ZWxmLmggZWxmb3MuaCBsaW51eC5oIGFybS9lbGYuaCBhcm0vbGludXgtZ2FzLmggYXJtL2xpbnV4LWVsZi5oIgorIAl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IHQtbGludXggYXJtL3QtYXJtIgorIAljYXNlICR7dGFyZ2V0fSBpbgorKwlhcm0qYi0qKQorKwkJdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUPTEiCisrCQk7OworKwllc2FjCisrCWNhc2UgJHt0YXJnZXR9IGluCisgCWFybSotKi1saW51eC0qZWFiaSkKKyAJICAgIHRtX2ZpbGU9IiR0bV9maWxlIGFybS9icGFiaS5oIGFybS9saW51eC1lYWJpLmgiCisgCSAgICB0bWFrZV9maWxlPSIkdG1ha2VfZmlsZSBhcm0vdC1hcm0tZWxmIGFybS90LWJwYWJpIGFybS90LWxpbnV4LWVhYmkiCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4yLzI1MC1zb2Z0ZmxvYXQtZml4LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMi8yNTAtc29mdGZsb2F0LWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTE3ODU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMi8yNTAtc29mdGZsb2F0LWZpeC5wYXRjaApAQCAtMCwwICsxLDU4IEBACitUaGlzIHBhdGNoIChDKSAyMDA3IFlhbm4gRS4gTU9SSU4KK0xpY2Vuc2VkIHVuZGVyIEdQTCB2Mi4KKworRmlyc3QgaHVuayBvZiB0aGlzIHBhdGNoIHNvbHZlcyBjb21waWxpbmcgdUNsaWJjOgorCittYWtlWzFdOiBFbnRlcmluZyBkaXJlY3RvcnkgYC9ob21lL3ltb3Jpbi94LXRvb2xzL2J1aWxkL2FybWViLXVua25vd24tbGludXgtdWNsaWJjL2djYy00LjEuMS11Q2xpYmMtMC45LjI4LjEvYnVpbGQtbGliYycKKyAgTEQgbGlidUNsaWJjLTAuOS4yOS5zbworbGliYy9saWJjX3NvLmEoZGlmZnRpbWUub3MpOiBJbiBmdW5jdGlvbiBgZGlmZnRpbWUnOgorZGlmZnRpbWUuYzooLnRleHQrMHg4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19mbG9hdHNpZGYnCitkaWZmdGltZS5jOigudGV4dCsweDJjKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19zdWJkZjMnCitsaWJjL2xpYmNfc28uYShfZnBtYXh0b3N0ci5vcyk6IEluIGZ1bmN0aW9uIGBfZnBtYXh0b3N0cic6CitfZnBtYXh0b3N0ci5jOigudGV4dCsweGQ0KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19uZWRmMicKK19mcG1heHRvc3RyLmM6KC50ZXh0KzB4ZjgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX2VxZGYyJworX2ZwbWF4dG9zdHIuYzooLnRleHQrMHgxMTQpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX2RpdmRmMycKK19mcG1heHRvc3RyLmM6KC50ZXh0KzB4MTIwKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19sdGRmMicKK19mcG1heHRvc3RyLmM6KC50ZXh0KzB4MWM0KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19tdWxkZjMnCitfZnBtYXh0b3N0ci5jOigudGV4dCsweDM4OCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fZ2VkZjInCitfZnBtYXh0b3N0ci5jOigudGV4dCsweDQzMCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fYWRkZGYzJworbGliYy9saWJjX3NvLmEoX19wc2ZzX2RvX251bWVyaWMub3MpOiBJbiBmdW5jdGlvbiBgX19wc2ZzX2RvX251bWVyaWMnOgorX19wc2ZzX2RvX251bWVyaWMuYzooLnRleHQrMHg1MjApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX3RydW5jZGZzZjInCitsaWJjL2xpYmNfc28uYShzdHJ0b2Yub3MpOiBJbiBmdW5jdGlvbiBgc3RydG9mJzoKK3N0cnRvZi5jOigudGV4dCsweDFjKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19leHRlbmRzZmRmMicKKy9ob21lL3ltb3Jpbi94LXRvb2xzL2J1aWxkL2FybWViLXVua25vd24tbGludXgtdWNsaWJjL2djYy00LjEuMS11Q2xpYmMtMC45LjI4LjEvY2NfY29yZV9wcmVmaXgvbGliL2djYy9hcm0tbGludXgtdWNsaWJjLzQuMS4xL2xpYmdjYy5hKF9maXh1bnNkZnNpLm8pOgorSW4gZnVuY3Rpb24gYF9fZml4dW5zZGZzaSc6CitsaWJnY2MyLmM6KC50ZXh0KzB4MzQpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX2ZpeGRmc2knCittYWtlWzJdOiAqKiogW2xpYi9saWJjLnNvXSBFcnJvciAxCittYWtlWzFdOiAqKiogW2xpYi9saWJjLnNvLjBdIEVycm9yIDIKK21ha2VbMV06IExlYXZpbmcgZGlyZWN0b3J5IGAvaG9tZS95bW9yaW4veC10b29scy9idWlsZC9hcm1lYi11bmtub3duLWxpbnV4LXVjbGliYy9nY2MtNC4xLjEtdUNsaWJjLTAuOS4yOC4xL2J1aWxkLWxpYmMnCittYWtlOiAqKiogWy9ob21lL3ltb3Jpbi94LXRvb2xzL2J1aWxkL2FybWViLXVua25vd24tbGludXgtdWNsaWJjL2djYy00LjEuMS11Q2xpYmMtMC45LjI4LjEvYnVpbGQtbGliYy9saWIvbGliYy5hXQorRXJyb3IgMgorCitUaGUgc2Vjb25kIGh1bmsgZml4ZXMgYnVpbGRpbmcgZmluYWwgZ2NjIGJlY2F1c2Ugc29mdC1mbG9hdCBpbXBsaWVzIHVzaW5nIC1sZmxvYXQgKHdoaWNoIHdlIGRvbid0IGhhdmUpLgorCisKK2RpZmYgLWR1ciBnY2MtNC4yLjAub3JpZy9nY2MvY29uZmlnLmdjYyBnY2MtNC4yLjAvZ2NjL2NvbmZpZy5nY2MKKy0tLSBnY2MtNC4yLjAub3JpZy9nY2MvY29uZmlnLmdjYwkyMDA3LTA3LTE1IDExOjI0OjE4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMC9nY2MvY29uZmlnLmdjYwkyMDA3LTA3LTE1IDExOjI2OjAyLjAwMDAwMDAwMCArMDIwMAorQEAgLTcyMSw3ICs3MjEsNyBAQAorIAkgICAgZGVmYXVsdF91c2VfY3hhX2F0ZXhpdD15ZXMKKyAJICAgIDs7CisgCSopCistCSAgICB0bWFrZV9maWxlPSIkdG1ha2VfZmlsZSBhcm0vdC1saW51eCIKKysJICAgIHRtYWtlX2ZpbGU9IiR0bWFrZV9maWxlIGFybS90LWxpbnV4IGFybS90LWFybS1lbGYiCisgCSAgICA7OworIAllc2FjCisgCXRtX2ZpbGU9IiR0bV9maWxlIGFybS9hb3V0LmggYXJtL2FybS5oIgorZGlmZiAtZHVyIGdjYy00LjIuMC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oIGdjYy00LjIuMC9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorLS0tIGdjYy00LjIuMC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMDctMDctMTUgMTE6MjQ6MTguMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4wL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMDctMDctMTUgMTE6MjY6MDIuMDAwMDAwMDAwICswMjAwCitAQCAtNjMsNyArNjMsNyBAQAorICAgICV7c2hhcmVkOi1sY30gXAorICAgICV7IXNoYXJlZDole3Byb2ZpbGU6LWxjX3B9JXshcHJvZmlsZTotbGN9fSIKKyAKKy0jZGVmaW5lIExJQkdDQ19TUEVDICIle21zb2Z0LWZsb2F0Oi1sZmxvYXR9ICV7bWZsb2F0LWFiaT1zb2Z0KjotbGZsb2F0fSAtbGdjYyIKKysjZGVmaW5lIExJQkdDQ19TUEVDICItbGdjYyIKKyAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4yLzI2MC1mbGF0dGVuLXN3aXRjaC1zdG10LTAwLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMi8yNjAtZmxhdHRlbi1zd2l0Y2gtc3RtdC0wMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzQwYzU3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMi8yNjAtZmxhdHRlbi1zd2l0Y2gtc3RtdC0wMC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2djYy9zdG10LmMgZ2NjLTQuMi4xL2djYy9zdG10LmMKKy0tLSBnY2MtNC4yLjEub3JpZy9nY2Mvc3RtdC5jCTIwMDctMDctMTkgMDU6MjU6MzIuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2djYy9zdG10LmMJMjAwNy0wOC0wMyAyMDozNzoxOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNTEyLDcgKzI1MTIsMTEgQEAKKyAJICB1c2VfY29zdF90YWJsZQorIAkgICAgPSAoVFJFRV9DT0RFIChvcmlnX3R5cGUpICE9IEVOVU1FUkFMX1RZUEUKKyAJICAgICAgICYmIGVzdGltYXRlX2Nhc2VfY29zdHMgKGNhc2VfbGlzdCkpOworLQkgIGJhbGFuY2VfY2FzZV9ub2RlcyAoJmNhc2VfbGlzdCwgTlVMTCk7CisrCSAgLyogV2hlbiBvcHRpbWl6aW5nIGZvciBzaXplLCB3ZSB3YW50IGEgc3RyYWlnaHQgbGlzdCB0byBhdm9pZAorKwkgICAgIGp1bXBzIGFzIG11Y2ggYXMgcG9zc2libGUuIFRoaXMgYmFzaWNhbGx5IGNyZWF0ZXMgYW4gaWYtZWxzZQorKwkgICAgIGNoYWluLiAgKi8KKysJICBpZiAoIW9wdGltaXplX3NpemUpCisrCSAgICBiYWxhbmNlX2Nhc2Vfbm9kZXMgKCZjYXNlX2xpc3QsIE5VTEwpOworIAkgIGVtaXRfY2FzZV9ub2RlcyAoaW5kZXgsIGNhc2VfbGlzdCwgZGVmYXVsdF9sYWJlbCwgaW5kZXhfdHlwZSk7CisgCSAgZW1pdF9qdW1wIChkZWZhdWx0X2xhYmVsKTsKKyAJfQorQEAgLTMwNzAsNiArMzA3NCw3IEBACisgCSAgICB7CisgCSAgICAgIGlmICghbm9kZV9oYXNfbG93X2JvdW5kIChub2RlLCBpbmRleF90eXBlKSkKKyAJCXsKKysJCSAgaWYgKCFvcHRpbWl6ZV9zaXplKSAvKiBkb24ndCBqbCB0byB0aGUgLmRlZmF1bHRfbGFiZWwuICovCisgCQkgIGVtaXRfY21wX2FuZF9qdW1wX2luc25zIChpbmRleCwKKyAJCQkJCSAgIGNvbnZlcnRfbW9kZXMKKyAJCQkJCSAgIChtb2RlLCBpbW9kZSwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjIvMjcwLXNvZnQtZmxvYXQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4yLzI3MC1zb2Z0LWZsb2F0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyODdiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4yLzI3MC1zb2Z0LWZsb2F0LnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK2RpZmYgLXVOcHIgZ2NjLTQuMi4xX29yaWcvZ2NjL2NvbmZpZy9yczYwMDAvZGFyd2luLWxkb3VibGUuYyBnY2MtNC4yLjEvZ2NjL2NvbmZpZy9yczYwMDAvZGFyd2luLWxkb3VibGUuYworLS0tIGdjYy00LjIuMV9vcmlnL2djYy9jb25maWcvcnM2MDAwL2Rhcndpbi1sZG91YmxlLmMJMjAwNy0wMy0wNSAxMTo1NDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBnY2MtNC4yLjEvZ2NjL2NvbmZpZy9yczYwMDAvZGFyd2luLWxkb3VibGUuYwkyMDA4LTAxLTMxIDE3OjUxOjI0LjAwMDAwMDAwMCAtMDUwMAorQEAgLTcwLDYgKzcwLDggQEAgU29mdHdhcmUgRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LAorICAgIGJ1dCBHQ0MgY3VycmVudGx5IGdlbmVyYXRlcyBwb29yIGNvZGUgd2hlbiBhIHVuaW9uIGlzIHVzZWQgdG8gdHVybgorICAgIGEgbG9uZyBkb3VibGUgaW50byBhIHBhaXIgb2YgZG91Ymxlcy4gICovCisgCisrI2lmIGRlZmluZWQgKF9TT0ZUX0ZMT0FUKSAmJiBkZWZpbmVkIChfX0xPTkdfRE9VQkxFXzEyOF9fKQorKworIGxvbmcgZG91YmxlIF9fZ2NjX3FhZGQgKGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSk7CisgbG9uZyBkb3VibGUgX19nY2NfcXN1YiAoZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKTsKKyBsb25nIGRvdWJsZSBfX2djY19xbXVsIChkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpOworQEAgLTIxOSw4ICsyMjEsNiBAQCBfX2djY19xZGl2IChkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjCisgICByZXR1cm4gei5sZHZhbDsKKyB9CisgCistI2lmIGRlZmluZWQgKF9TT0ZUX0ZMT0FUKSAmJiBkZWZpbmVkIChfX0xPTkdfRE9VQkxFXzEyOF9fKQorLQorIGxvbmcgZG91YmxlIF9fZ2NjX3FuZWcgKGRvdWJsZSwgZG91YmxlKTsKKyBpbnQgX19nY2NfcWVxIChkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpOworIGludCBfX2djY19xbmUgKGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSk7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4yLzI4MC1hbHBoYS1zaWduYWxfaC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjIvMjgwLWFscGhhLXNpZ25hbF9oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZTE3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4yLzI4MC1hbHBoYS1zaWduYWxfaC5wYXRjaApAQCAtMCwwICsxLDE3IEBACistLS0gZ2NjLTQuMi4xLXN0b2NrL2djYy9jb25maWcvYWxwaGEvbGludXgtdW53aW5kLmgJMjAwNS0wNi0yNCAyMDoyMjo0MS4wMDAwMDAwMDAgLTA1MDAKKysrKyBnY2MtNC4yLjEvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC11bndpbmQuaAkyMDA3LTA5LTAxIDIwOjIxOjM0LjAwMDAwMDAwMCAtMDUwMAorQEAgLTI5LDYgKzI5LDkgQEAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworIC8qIERvIGNvZGUgcmVhZGluZyB0byBpZGVudGlmeSBhIHNpZ25hbCBmcmFtZSwgYW5kIHNldCB0aGUgZnJhbWUKKyAgICBzdGF0ZSBkYXRhIGFwcHJvcHJpYXRlbHkuICBTZWUgdW53aW5kLWR3Mi5jIGZvciB0aGUgc3RydWN0cy4gICovCisgCisrLyogRG9uJ3QgdXNlIHRoaXMgaWYgaW5oaWJpdF9saWJjIGlzIHNldAorKyAgIFRoZSBidWlsZCBmb3IgdGhpcyB0YXJnZXQgd2lsbCBmYWlsIHRyeWluZyB0byBpbmNsdWRlIG1pc3NpbmcgaGVhZGVycyAqLworKyNpZm5kZWYgaW5oaWJpdF9saWJjCisgI2luY2x1ZGUgPHNpZ25hbC5oPgorICNpbmNsdWRlIDxzeXMvdWNvbnRleHQuaD4KKyAKK0BAIC04MCwzICs4Myw0IEBAIGFscGhhX2ZhbGxiYWNrX2ZyYW1lX3N0YXRlIChzdHJ1Y3QgX1Vud2kKKyAgIGZzLT5yZXRhZGRyX2NvbHVtbiA9IDY0OworICAgcmV0dXJuIF9VUkNfTk9fUkVBU09OOworIH0KKysjZW5kaWYgLyogaW5oaWJpdF9saWJjICovCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4yLzI5MC1zaC13aXRob3V0LWhlYWRlcnMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4yLzI5MC1zaC13aXRob3V0LWhlYWRlcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdkZGI2NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjIvMjkwLXNoLXdpdGhvdXQtaGVhZGVycy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitPbiAyMDA4MTAxMSwgS2hlbSBSQUogd3JpdGVzOgorIFlvdSBoYXZlIHRvIGJhciBnY2MgdHJ5aW5nIHRvIGJ1aWxkIHVud2luZGluZyBhdCBzdGFnZSAxLiBUcnkgdGhlCisgYXR0YWNoZWQgcGF0Y2ggYW5kIHNlZSBpZiBpdCBoZWxwcy4KKworIGdjYy9jb25maWcvc2gvbGludXgtdW53aW5kLmggfCAgICAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworSW5kZXg6IGdjYy00XzItYnJhbmNoL2djYy9jb25maWcvc2gvbGludXgtdW53aW5kLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNF8yLWJyYW5jaC5vcmlnL2djYy9jb25maWcvc2gvbGludXgtdW53aW5kLmgJMjAwOC0wNy0wMSAxNzoyNDo0MC4wMDAwMDAwMDAgLTA3MDAKKysrKyBnY2MtNF8yLWJyYW5jaC9nY2MvY29uZmlnL3NoL2xpbnV4LXVud2luZC5oCTIwMDgtMDctMDEgMTc6MjU6NDcuMDAwMDAwMDAwIC0wNzAwCitAQCAtMjYsNiArMjYsOCBAQCBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgCisrI2lmbmRlZiBpbmhpYml0X2xpYmMKKysKKyAvKiBEbyBjb2RlIHJlYWRpbmcgdG8gaWRlbnRpZnkgYSBzaWduYWwgZnJhbWUsIGFuZCBzZXQgdGhlIGZyYW1lCisgICAgc3RhdGUgZGF0YSBhcHByb3ByaWF0ZWx5LiAgU2VlIHVud2luZC1kdzIuYyBmb3IgdGhlIHN0cnVjdHMuICAqLworIAorQEAgLTI1MSwzICsyNTMsNCBAQCBzaF9mYWxsYmFja19mcmFtZV9zdGF0ZSAoc3RydWN0IF9VbndpbmRfCisgICByZXR1cm4gX1VSQ19OT19SRUFTT047CisgfQorICNlbmRpZiAvKiBkZWZpbmVkIChfX1NINV9fKSAqLworKyNlbmRpZiAvKiBpZm5kZWYgaW5oaWJpdF9saWJjICovCisKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjIvMzAwLWF2cjMyLWF0bWVsLXYxLjEuMy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjIvMzAwLWF2cjMyLWF0bWVsLXYxLjEuMy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzQwYTA1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMi8zMDAtYXZyMzItYXRtZWwtdjEuMS4zLnBhdGNoCkBAIC0wLDAgKzEsMjI2MjAgQEAKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtNTAzLDYgKzUwMyw5IEBAIGNhc2UgIiR7dGFyZ2V0fSIgaW4KKyAgIGFybS0qLXJpc2NpeCopCisgICAgIG5vY29uZmlnZGlycz0iJG5vY29uZmlnZGlycyBsZCB0YXJnZXQtbGliZ2xvc3MgJHtsaWJnY2p9IgorICAgICA7OworKyAgYXZyMzItKi0qKQorKyAgICBub2NvbmZpZ2RpcnM9IiRub2NvbmZpZ2RpcnMgdGFyZ2V0LWxpYmliZXJ0eSB0YXJnZXQtbGlibXVkZmxhcCB0YXJnZXQtbGliZmZpICR7bGliZ2NqfSIKKysgICAgOzsKKyAgIGF2ci0qLSopCisgICAgIG5vY29uZmlnZGlycz0iJG5vY29uZmlnZGlycyB0YXJnZXQtbGliaWJlcnR5IHRhcmdldC1saWJzdGRjKystdjMgJHtsaWJnY2p9IgorICAgICA7OworLS0tIGEvZ2NjL2J1aWx0aW5zLmMKKysrKyBiL2djYy9idWlsdGlucy5jCitAQCAtOTIyMyw3ICs5MjIzLDcgQEAgdmFsaWRhdGVfYXJnbGlzdCAodHJlZSBhcmdsaXN0LCAuLi4pCisgCisgICBkbworICAgICB7CistICAgICAgY29kZSA9IHZhX2FyZyAoYXAsIGVudW0gdHJlZV9jb2RlKTsKKysgICAgICBjb2RlID0gdmFfYXJnIChhcCwgaW50KTsKKyAgICAgICBzd2l0Y2ggKGNvZGUpCisgCXsKKyAJY2FzZSAwOgorLS0tIGEvZ2NjL2NhbGxzLmMKKysrKyBiL2djYy9jYWxscy5jCitAQCAtMzQ0Nyw3ICszNDQ3LDcgQEAgZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWVfMSAoaW50IHJldHZhbCwgcgorICAgZm9yICg7IGNvdW50IDwgbmFyZ3M7IGNvdW50KyspCisgICAgIHsKKyAgICAgICBydHggdmFsID0gdmFfYXJnIChwLCBydHgpOworLSAgICAgIGVudW0gbWFjaGluZV9tb2RlIG1vZGUgPSB2YV9hcmcgKHAsIGVudW0gbWFjaGluZV9tb2RlKTsKKysgICAgICBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlID0gdmFfYXJnIChwLCBpbnQpOworIAorICAgICAgIC8qIFdlIGNhbm5vdCBjb252ZXJ0IHRoZSBhcmcgdmFsdWUgdG8gdGhlIG1vZGUgdGhlIGxpYnJhcnkgd2FudHMgaGVyZTsKKyAJIG11c3QgZG8gaXQgZWFybGllciB3aGVyZSB3ZSBrbm93IHRoZSBzaWduZWRuZXNzIG9mIHRoZSBhcmcuICAqLworLS0tIGEvZ2NjL2MtaW5jcGF0aC5jCisrKysgYi9nY2MvYy1pbmNwYXRoLmMKK0BAIC0zNDcsNiArMzQ3LDE4IEBAIGFkZF9wYXRoIChjaGFyICpwYXRoLCBpbnQgY2hhaW4sIGludCBjeHgKKyAgIGNoYXIqIGM7CisgICBmb3IgKGMgPSBwYXRoOyAqYzsgYysrKQorICAgICBpZiAoKmMgPT0gJ1xcJykgKmMgPSAnLyc7CisrICAvKiBSZW1vdmUgdW5uZWNlc3NhcnkgdHJhaWxpbmcgc2xhc2hlcy4gIE9uIHNvbWUgdmVyc2lvbnMgb2YgTVMKKysgICAgIFdpbmRvd3MsIHRyYWlsaW5nICBfZm9yd2FyZF8gc2xhc2hlcyBjYXVzZSBubyBwcm9ibGVtcyBmb3Igc3RhdCgpLgorKyAgICAgT24gbmV3ZXIgdmVyc2lvbnMsIHN0YXQoKSBkb2VzIG5vdCByZWNvZ25pc2UgYSBkaXJlY3RvcnkgdGhhdCBlbmRzCisrICAgICBpbiBhICdcXCcgb3IgJy8nLCB1bmxlc3MgaXQgaXMgYSBkcml2ZSByb290IGRpciwgc3VjaCBhcyAiYzovIiwKKysgICAgIHdoZXJlIGl0IGlzIG9ibGlnYXRvcnkuICAqLworKyAgaW50IHBhdGhsZW4gPSBzdHJsZW4gKHBhdGgpOworKyAgY2hhciogZW5kID0gcGF0aCArIHBhdGhsZW4gLSAxOworKyAgLyogUHJlc2VydmUgdGhlIGxlYWQgJy8nIG9yIGxlYWQgImM6LyIuICAqLworKyAgY2hhciogc3RhcnQgPSBwYXRoICsgKHBhdGhsZW4gPiAyICYmIHBhdGhbMV0gPT0gJzonID8gMyA6IDEpOworKworKyAgZm9yICg7IGVuZCA+IHN0YXJ0ICYmIElTX0RJUl9TRVBBUkFUT1IgKCplbmQpOyBlbmQtLSkKKysgICAgKmVuZCA9IDA7CisgI2VuZGlmCisgCisgICBwID0gWE5FVyAoY3BwX2Rpcik7CistLS0gL2Rldi9udWxsCisrKysgYi9nY2MvY29uZmlnL2F2cjMyL2F2cjMyLmMKK0BAIC0wLDAgKzEsNzkxNSBAQAorKy8qCisrICAgVGFyZ2V0IGhvb2tzIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGZvciBBVlIzMi4KKysgICBDb3B5cmlnaHQgMjAwMy0yMDA2IEF0bWVsIENvcnBvcmF0aW9uLgorKworKyAgIFdyaXR0ZW4gYnkgUm9ubnkgUGVkZXJzZW4sIEF0bWVsIE5vcndheSwgPHJwZWRlcnNlbkBhdG1lbC5jb20+CisrICAgSW5pdGlhbCBwb3J0aW5nIGJ5IEFuZGVycyDvv71kbGFuZC4KKysKKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAqLworKworKyNpbmNsdWRlICJjb25maWcuaCIKKysjaW5jbHVkZSAic3lzdGVtLmgiCisrI2luY2x1ZGUgImNvcmV0eXBlcy5oIgorKyNpbmNsdWRlICJ0bS5oIgorKyNpbmNsdWRlICJydGwuaCIKKysjaW5jbHVkZSAidHJlZS5oIgorKyNpbmNsdWRlICJvYnN0YWNrLmgiCisrI2luY2x1ZGUgInJlZ3MuaCIKKysjaW5jbHVkZSAiaGFyZC1yZWctc2V0LmgiCisrI2luY2x1ZGUgInJlYWwuaCIKKysjaW5jbHVkZSAiaW5zbi1jb25maWcuaCIKKysjaW5jbHVkZSAiY29uZGl0aW9ucy5oIgorKyNpbmNsdWRlICJvdXRwdXQuaCIKKysjaW5jbHVkZSAiaW5zbi1hdHRyLmgiCisrI2luY2x1ZGUgImZsYWdzLmgiCisrI2luY2x1ZGUgInJlbG9hZC5oIgorKyNpbmNsdWRlICJmdW5jdGlvbi5oIgorKyNpbmNsdWRlICJleHByLmgiCisrI2luY2x1ZGUgIm9wdGFicy5oIgorKyNpbmNsdWRlICJ0b3BsZXYuaCIKKysjaW5jbHVkZSAicmVjb2cuaCIKKysjaW5jbHVkZSAiZ2djLmgiCisrI2luY2x1ZGUgImV4Y2VwdC5oIgorKyNpbmNsdWRlICJjLXByYWdtYS5oIgorKyNpbmNsdWRlICJpbnRlZ3JhdGUuaCIKKysjaW5jbHVkZSAidG1fcC5oIgorKyNpbmNsdWRlICJsYW5naG9va3MuaCIKKysKKysjaW5jbHVkZSAidGFyZ2V0LmgiCisrI2luY2x1ZGUgInRhcmdldC1kZWYuaCIKKysKKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysKKysvKiBGb3J3YXJkIGRlZmluaXRpb25zIG9mIHR5cGVzLiAgKi8KKyt0eXBlZGVmIHN0cnVjdCBtaW5pcG9vbF9ub2RlIE1ub2RlOworK3R5cGVkZWYgc3RydWN0IG1pbmlwb29sX2ZpeHVwIE1maXg7CisrCisrLyogT2JzdGFjayBmb3IgbWluaXBvb2wgY29uc3RhbnQgaGFuZGxpbmcuICAqLworK3N0YXRpYyBzdHJ1Y3Qgb2JzdGFjayBtaW5pcG9vbF9vYnN0YWNrOworK3N0YXRpYyBjaGFyICptaW5pcG9vbF9zdGFydG9iajsKKytzdGF0aWMgcnR4IG1pbmlwb29sX3ZlY3Rvcl9sYWJlbDsKKysKKysvKiBUcnVlIGlmIHdlIGFyZSBjdXJyZW50bHkgYnVpbGRpbmcgYSBjb25zdGFudCB0YWJsZS4gICovCisraW50IG1ha2luZ19jb25zdF90YWJsZTsKKysKKysvKiBTb21lIGZvcndhcmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zICovCisrc3RhdGljIHVuc2lnbmVkIGxvbmcgYXZyMzJfaXNyX3ZhbHVlICh0cmVlKTsKKytzdGF0aWMgdW5zaWduZWQgbG9uZyBhdnIzMl9jb21wdXRlX2Z1bmNfdHlwZSAodm9pZCk7Cisrc3RhdGljIHRyZWUgYXZyMzJfaGFuZGxlX2lzcl9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOworK3N0YXRpYyB0cmVlIGF2cjMyX2hhbmRsZV9hY2FsbF9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOworK3N0YXRpYyB0cmVlIGF2cjMyX2hhbmRsZV9mbmRlY2xfYXR0cmlidXRlICh0cmVlICogbm9kZSwgdHJlZSBuYW1lLCB0cmVlIGFyZ3MsCisrCQkJCQkgICBpbnQgZmxhZ3MsIGJvb2wgKiBub19hZGRfYXR0cnMpOworK3N0YXRpYyB2b2lkIGF2cjMyX3Jlb3JnICh2b2lkKTsKKytib29sIGF2cjMyX3JldHVybl9pbl9tc2IgKHRyZWUgdHlwZSk7CisrYm9vbCBhdnIzMl92ZWN0b3JfbW9kZV9zdXBwb3J0ZWQgKGVudW0gbWFjaGluZV9tb2RlIG1vZGUpOworK3N0YXRpYyB2b2lkIGF2cjMyX2luaXRfbGliZnVuY3MgKHZvaWQpOworKworKworK3N0YXRpYyB2b2lkCisrYXZyMzJfYWRkX2djX3Jvb3RzICh2b2lkKQorK3sKKysgIGdjY19vYnN0YWNrX2luaXQgKCZtaW5pcG9vbF9vYnN0YWNrKTsKKysgIG1pbmlwb29sX3N0YXJ0b2JqID0gKGNoYXIgKikgb2JzdGFja19hbGxvYyAoJm1pbmlwb29sX29ic3RhY2ssIDApOworK30KKysKKysKKysvKiBMaXN0IG9mIGFsbCBrbm93biBBVlIzMiBwYXJ0cyAgKi8KKytzdGF0aWMgY29uc3Qgc3RydWN0IHBhcnRfdHlwZV9zIGF2cjMyX3BhcnRfdHlwZXNbXSA9IHsKKysgIC8qIG5hbWUsIHBhcnRfdHlwZSwgYXJjaGl0ZWN0dXJlIHR5cGUsIG1hY3JvICovCisrICB7Im5vbmUiLCBQQVJUX1RZUEVfQVZSMzJfTk9ORSwgQVJDSF9UWVBFX0FWUjMyX0FQLCAiX19BVlIzMl9fIn0sCisrICB7ImFwNzAwMCIsIFBBUlRfVFlQRV9BVlIzMl9BUDcwMDAsIEFSQ0hfVFlQRV9BVlIzMl9BUCwgIl9fQVZSMzJfQVA3MDAwX18ifSwKKysgIHsiYXA3MDAxIiwgUEFSVF9UWVBFX0FWUjMyX0FQNzAwMSwgQVJDSF9UWVBFX0FWUjMyX0FQLCAiX19BVlIzMl9BUDcwMDFfXyJ9LAorKyAgeyJhcDcwMDIiLCBQQVJUX1RZUEVfQVZSMzJfQVA3MDAyLCBBUkNIX1RZUEVfQVZSMzJfQVAsICJfX0FWUjMyX0FQNzAwMl9fIn0sCisrICB7ImFwNzIwMCIsIFBBUlRfVFlQRV9BVlIzMl9BUDcyMDAsIEFSQ0hfVFlQRV9BVlIzMl9BUCwgIl9fQVZSMzJfQVA3MjAwX18ifSwKKysgIHsidWMzYTAxMjgiLCBQQVJUX1RZUEVfQVZSMzJfVUMzQTAxMjgsIEFSQ0hfVFlQRV9BVlIzMl9VQ1IyLAorKyAgICJfX0FWUjMyX1VDM0EwMTI4X18ifSwKKysgIHsidWMzYTAyNTYiLCBQQVJUX1RZUEVfQVZSMzJfVUMzQTAyNTYsIEFSQ0hfVFlQRV9BVlIzMl9VQ1IyLAorKyAgICJfX0FWUjMyX1VDM0EwMjU2X18ifSwKKysgIHsidWMzYTA1MTIiLCBQQVJUX1RZUEVfQVZSMzJfVUMzQTA1MTIsIEFSQ0hfVFlQRV9BVlIzMl9VQ1IyLAorKyAgICJfX0FWUjMyX1VDM0EwNTEyX18ifSwKKysgIHsidWMzYTA1MTJlcyIsIFBBUlRfVFlQRV9BVlIzMl9VQzNBMDUxMkVTLCBBUkNIX1RZUEVfQVZSMzJfVUNSMSwKKysgICAgIl9fQVZSMzJfVUMzQTA1MTJFU19fIn0sCisrICB7InVjM2ExMTI4IiwgUEFSVF9UWVBFX0FWUjMyX1VDM0ExMTI4LCBBUkNIX1RZUEVfQVZSMzJfVUNSMiwKKysgICAiX19BVlIzMl9VQzNBMTEyOF9fIn0sCisrICB7InVjM2ExMjU2IiwgUEFSVF9UWVBFX0FWUjMyX1VDM0ExMjU2LCBBUkNIX1RZUEVfQVZSMzJfVUNSMiwKKysgICAiX19BVlIzMl9VQzNBMTI1Nl9fIn0sCisrICB7InVjM2ExNTEyIiwgUEFSVF9UWVBFX0FWUjMyX1VDM0ExNTEyLCBBUkNIX1RZUEVfQVZSMzJfVUNSMiwKKysgICAiX19BVlIzMl9VQzNBMTUxMl9fIn0sCisrICB7InVjM2ExNTEyZXMiLCBQQVJUX1RZUEVfQVZSMzJfVUMzQTE1MTJFUywgQVJDSF9UWVBFX0FWUjMyX1VDUjEsCisrICAgIl9fQVZSMzJfVUMzQTE1MTJFU19fIn0sCisrICAgeyJ1YzNhM3JldmQiLCBQQVJUX1RZUEVfQVZSMzJfVUMzQTNSRVZELCBBUkNIX1RZUEVfQVZSMzJfVUNSMk5PTVVMLAorKyAgICAiX19BVlIzMl9VQzNBMzI1NlNfXyJ9LAorKyAgeyJ1YzNhMzY0IiwgUEFSVF9UWVBFX0FWUjMyX1VDM0EzNjQsIEFSQ0hfVFlQRV9BVlIzMl9VQ1IyLAorKyAgICJfX0FWUjMyX1VDM0EzNjRfXyJ9LAorKyAgeyJ1YzNhMzY0cyIsIFBBUlRfVFlQRV9BVlIzMl9VQzNBMzY0UywgQVJDSF9UWVBFX0FWUjMyX1VDUjIsCisrICAgIl9fQVZSMzJfVUMzQTM2NFNfXyJ9LAorKyAgeyJ1YzNhMzEyOCIsIFBBUlRfVFlQRV9BVlIzMl9VQzNBMzEyOCwgQVJDSF9UWVBFX0FWUjMyX1VDUjIsCisrICAgIl9fQVZSMzJfVUMzQTMxMjhfXyJ9LAorKyAgeyJ1YzNhMzEyOHMiLCBQQVJUX1RZUEVfQVZSMzJfVUMzQTMxMjhTLCBBUkNIX1RZUEVfQVZSMzJfVUNSMiwKKysgICAiX19BVlIzMl9VQzNBMzEyOFNfXyJ9LAorKyAgeyJ1YzNhMzI1NiIsIFBBUlRfVFlQRV9BVlIzMl9VQzNBMzI1NiwgQVJDSF9UWVBFX0FWUjMyX1VDUjIsCisrICAgIl9fQVZSMzJfVUMzQTMyNTZfXyJ9LAorKyAgeyJ1YzNhMzI1NnMiLCBQQVJUX1RZUEVfQVZSMzJfVUMzQTMyNTZTLCBBUkNIX1RZUEVfQVZSMzJfVUNSMiwKKysgICAiX19BVlIzMl9VQzNBMzI1NlNfXyJ9LAorKyAgeyJ1YzNiMDY0IiwgUEFSVF9UWVBFX0FWUjMyX1VDM0IwNjQsIEFSQ0hfVFlQRV9BVlIzMl9VQ1IxLAorKyAgICJfX0FWUjMyX1VDM0IwNjRfXyJ9LAorKyAgeyJ1YzNiMDEyOCIsIFBBUlRfVFlQRV9BVlIzMl9VQzNCMDEyOCwgQVJDSF9UWVBFX0FWUjMyX1VDUjEsCisrICAgIl9fQVZSMzJfVUMzQjAxMjhfXyJ9LAorKyAgeyJ1YzNiMDI1NiIsIFBBUlRfVFlQRV9BVlIzMl9VQzNCMDI1NiwgQVJDSF9UWVBFX0FWUjMyX1VDUjEsCisrICAgIl9fQVZSMzJfVUMzQjAyNTZfXyJ9LAorKyAgeyJ1YzNiMDI1NmVzIiwgUEFSVF9UWVBFX0FWUjMyX1VDM0IwMjU2RVMsIEFSQ0hfVFlQRV9BVlIzMl9VQ1IxLAorKyAgICJfX0FWUjMyX1VDM0IwMjU2RVNfXyJ9LAorKyAgeyJ1YzNiMTY0IiwgUEFSVF9UWVBFX0FWUjMyX1VDM0IxNjQsIEFSQ0hfVFlQRV9BVlIzMl9VQ1IxLAorKyAgICJfX0FWUjMyX1VDM0IxNjRfXyJ9LAorKyAgeyJ1YzNiMTEyOCIsIFBBUlRfVFlQRV9BVlIzMl9VQzNCMTEyOCwgQVJDSF9UWVBFX0FWUjMyX1VDUjEsCisrICAgIl9fQVZSMzJfVUMzQjExMjhfXyJ9LAorKyAgeyJ1YzNiMTI1NiIsIFBBUlRfVFlQRV9BVlIzMl9VQzNCMTI1NiwgQVJDSF9UWVBFX0FWUjMyX1VDUjEsCisrICAgIl9fQVZSMzJfVUMzQjEyNTZfXyJ9LAorKyAgeyJ1YzNiMTI1NmVzIiwgUEFSVF9UWVBFX0FWUjMyX1VDM0IxMjU2RVMsIEFSQ0hfVFlQRV9BVlIzMl9VQ1IxLAorKyAgICJfX0FWUjMyX1VDM0IxMjU2RVNfXyJ9LAorKyAge05VTEwsIDAsIDAsIE5VTEx9CisrfTsKKysKKysvKiBMaXN0IG9mIGFsbCBrbm93biBBVlIzMiBhcmNoaXRlY3R1cmVzICAqLworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJjaF90eXBlX3MgYXZyMzJfYXJjaF90eXBlc1tdID0geworKyAgLyogbmFtZSwgYXJjaGl0ZWN0dXJlIHR5cGUsIG1pY3JvYXJjaGl0ZWN0dXJlIHR5cGUsIGZlYXR1cmUgZmxhZ3MsIG1hY3JvICovCisrICB7ImFwIiwgQVJDSF9UWVBFX0FWUjMyX0FQLCBVQVJDSF9UWVBFX0FWUjMyQiwKKysgICAoRkxBR19BVlIzMl9IQVNfRFNQCisrICAgIHwgRkxBR19BVlIzMl9IQVNfU0lNRAorKyAgICB8IEZMQUdfQVZSMzJfSEFTX1VOQUxJR05FRF9XT1JECisrICAgIHwgRkxBR19BVlIzMl9IQVNfQlJBTkNIX1BSRUQgfCBGTEFHX0FWUjMyX0hBU19SRVRVUk5fU1RBQ0sKKysgICAgfCBGTEFHX0FWUjMyX0hBU19DQUNIRVMpLAorKyAgICJfX0FWUjMyX0FQX18ifSwKKysgIHsidWNyMSIsIEFSQ0hfVFlQRV9BVlIzMl9VQ1IxLCBVQVJDSF9UWVBFX0FWUjMyQSwKKysgICAoRkxBR19BVlIzMl9IQVNfRFNQIHwgRkxBR19BVlIzMl9IQVNfUk1XKSwKKysgICAiX19BVlIzMl9VQ19fPTEifSwKKysgIHsidWNyMiIsIEFSQ0hfVFlQRV9BVlIzMl9VQ1IyLCBVQVJDSF9UWVBFX0FWUjMyQSwKKysgICAoRkxBR19BVlIzMl9IQVNfRFNQIHwgRkxBR19BVlIzMl9IQVNfUk1XCisrICAgIHwgRkxBR19BVlIzMl9IQVNfVjJfSU5TTlMpLAorKyAgICJfX0FWUjMyX1VDX189MiJ9LAorKyAgeyJ1Y3Iybm9tdWwiLCBBUkNIX1RZUEVfQVZSMzJfVUNSMk5PTVVMLCBVQVJDSF9UWVBFX0FWUjMyQSwKKysgICAoRkxBR19BVlIzMl9IQVNfRFNQIHwgRkxBR19BVlIzMl9IQVNfUk1XCisrICAgIHwgRkxBR19BVlIzMl9IQVNfVjJfSU5TTlMgfCBGTEFHX0FWUjMyX0hBU19OT19NVUxfSU5TTlMpLAorKyAgICJfX0FWUjMyX1VDX189MyJ9LAorKyAge05VTEwsIDAsIDAsIDAsIE5VTEx9CisrfTsKKysKKysvKiBEZWZhdWx0IGFyY2ggbmFtZSAqLworK2NvbnN0IGNoYXIgKmF2cjMyX2FyY2hfbmFtZSA9ICJub25lIjsKKytjb25zdCBjaGFyICphdnIzMl9wYXJ0X25hbWUgPSAibm9uZSI7CisrCisrY29uc3Qgc3RydWN0IHBhcnRfdHlwZV9zICphdnIzMl9wYXJ0OworK2NvbnN0IHN0cnVjdCBhcmNoX3R5cGVfcyAqYXZyMzJfYXJjaDsKKysKKysKKysvKiBTZXQgZGVmYXVsdCB0YXJnZXRfZmxhZ3MuICovCisrI3VuZGVmIFRBUkdFVF9ERUZBVUxUX1RBUkdFVF9GTEFHUworKyNkZWZpbmUgVEFSR0VUX0RFRkFVTFRfVEFSR0VUX0ZMQUdTIFwKKysgIChNQVNLX0hBU19BU01fQUREUl9QU0VVRE9TIHwgTUFTS19NRF9SRU9SR19PUFRJTUlaQVRJT04gfCBNQVNLX0NPTkRfRVhFQ19CRUZPUkVfUkVMT0FEKQorKworK3ZvaWQKKythdnIzMl9vcHRpbWl6YXRpb25fb3B0aW9ucyAoaW50IGxldmVsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSl7CisrICBpZiAoQVZSMzJfQUxXQVlTX1BJQykKKysgICAgZmxhZ19waWMgPSAxOworKworKyAgLyogRW5hYmxlIHNlY3Rpb24gYW5jaG9ycyBpZiBvcHRpbWl6YXRpb24gaXMgZW5hYmxlZC4gKi8KKysgIGlmIChsZXZlbCA+IDAgfHwgc2l6ZSkKKysgICAgZmxhZ19zZWN0aW9uX2FuY2hvcnMgPSAxOworK30KKysKKysvKiBPdmVycmlkZSBjb21tYW5kIGxpbmUgb3B0aW9ucyAqLworK3ZvaWQKKythdnIzMl9vdmVycmlkZV9vcHRpb25zICh2b2lkKQorK3sKKysgIGNvbnN0IHN0cnVjdCBwYXJ0X3R5cGVfcyAqcGFydDsKKysgIGNvbnN0IHN0cnVjdCBhcmNoX3R5cGVfcyAqYXJjaDsKKysKKysgIC8qQWRkIGJhY2t3YXJkIGNvbXBhYmlsaXR5Ki8KKysgIGlmIChzdHJjbXAgKCJ1YyIsIGF2cjMyX2FyY2hfbmFtZSk9PSAwKQorKyAgICB7CisrICAgICAgZnByaW50ZiAoc3RkZXJyLCAiV2FybmluZzogRGVwcmVjYXRlZCBhcmNoIGAlcycgc3BlY2lmaWVkLiAiCisrICAgICAgICAgICAgICAgICAgICAgICAiUGxlYXNlIHVzZSAnLW1hcmNoPXVjcjEnIGluc3RlYWQuICIKKysgICAgICAgICAgICAgICAgICAgICAgICJDb252ZXJ0aW5nIHRvIGFyY2ggJ3VjcjEnXG4iLAorKyAgICAgICAgICAgICAgIGF2cjMyX2FyY2hfbmFtZSk7CisrICAgICAgYXZyMzJfYXJjaF9uYW1lPSJ1Y3IxIjsKKysgICAgfQorKworKyAgLyogQ2hlY2sgaWYgYXJjaCB0eXBlIGlzIHNldC4gKi8KKysgIGZvciAoYXJjaCA9IGF2cjMyX2FyY2hfdHlwZXM7IGFyY2gtPm5hbWU7IGFyY2grKykKKysgICAgeworKyAgICAgIGlmIChzdHJjbXAgKGFyY2gtPm5hbWUsIGF2cjMyX2FyY2hfbmFtZSkgPT0gMCkKKysgICAgICAgIGJyZWFrOworKyAgICB9CisrICBhdnIzMl9hcmNoID0gYXJjaDsKKysKKysgIGlmICghYXJjaC0+bmFtZSAmJiBzdHJjbXAoIm5vbmUiLCBhdnIzMl9hcmNoX25hbWUpICE9IDApCisrICAgIHsKKysgICAgICBmcHJpbnRmIChzdGRlcnIsICJVbmtub3duIGFyY2ggYCVzJyBzcGVjaWZpZWRcbiIKKysgICAgICAgICAgICAgICAgICAgICAgICJLbm93biBhcmNoIG5hbWVzOlxuIgorKyAgICAgICAgICAgICAgICAgICAgICAgIlx0dWMgKGRlcHJlY2F0ZWQpXG4iLAorKyAgICAgICAgICAgICAgIGF2cjMyX2FyY2hfbmFtZSk7CisrICAgICAgZm9yIChhcmNoID0gYXZyMzJfYXJjaF90eXBlczsgYXJjaC0+bmFtZTsgYXJjaCsrKQorKyAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXHQlc1xuIiwgYXJjaC0+bmFtZSk7CisrICAgICAgYXZyMzJfYXJjaCA9ICZhdnIzMl9hcmNoX3R5cGVzW0FSQ0hfVFlQRV9BVlIzMl9BUF07CisrICAgIH0KKysKKysgIC8qIENoZWNrIGlmIHBhcnQgdHlwZSBpcyBzZXQuICovCisrICBmb3IgKHBhcnQgPSBhdnIzMl9wYXJ0X3R5cGVzOyBwYXJ0LT5uYW1lOyBwYXJ0KyspCisrICAgIGlmIChzdHJjbXAgKHBhcnQtPm5hbWUsIGF2cjMyX3BhcnRfbmFtZSkgPT0gMCkKKysgICAgICBicmVhazsKKysKKysgIGF2cjMyX3BhcnQgPSBwYXJ0OworKyAgaWYgKCFwYXJ0LT5uYW1lKQorKyAgICB7CisrICAgICAgZnByaW50ZiAoc3RkZXJyLCAiVW5rbm93biBwYXJ0IGAlcycgc3BlY2lmaWVkXG5Lbm93biBwYXJ0IG5hbWVzOlxuIiwKKysgICAgICAgICAgICAgICBhdnIzMl9wYXJ0X25hbWUpOworKyAgICAgIGZvciAocGFydCA9IGF2cjMyX3BhcnRfdHlwZXM7IHBhcnQtPm5hbWU7IHBhcnQrKykKKysgICAgICAgIHsKKysgICAgICAgICAgaWYgKHN0cmNtcCgibm9uZSIsIHBhcnQtPm5hbWUpICE9IDApCisrICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXHQlc1xuIiwgcGFydC0+bmFtZSk7CisrICAgICAgICB9CisrICAgICAgLyogU2V0IGRlZmF1bHQgdG8gTk9ORSovCisrICAgICAgYXZyMzJfcGFydCA9ICZhdnIzMl9wYXJ0X3R5cGVzW1BBUlRfVFlQRV9BVlIzMl9OT05FXTsKKysgICAgfQorKworKyAgLyogTkIhIG9wdGlvbiAtbWFyY2g9IG92ZXJyaWRlcyBvcHRpb24gLW1wYXJ0CisrICAgKiBpZiBib3RoIGFyZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUgKi8KKysgIGlmICghYXJjaC0+bmFtZSkKKysgICAgYXZyMzJfYXJjaCA9ICZhdnIzMl9hcmNoX3R5cGVzW2F2cjMyX3BhcnQtPmFyY2hfdHlwZV07CisrCisrICAvKiBJZiBvcHRpbWl6YXRpb24gbGV2ZWwgaXMgdHdvIG9yIGdyZWF0ZXIsIHRoZW4gYWxpZ24gc3RhcnQgb2YgbG9vcHMgdG8gYQorKyAgICAgd29yZCBib3VuZGFyeSBzaW5jZSB0aGlzIHdpbGwgYWxsb3cgZm9sZGluZyB0aGUgZmlyc3QgaW5zbiBvZiB0aGUgbG9vcC4KKysgICAgIERvIHRoaXMgb25seSBmb3IgdGFyZ2V0cyBzdXBwb3J0aW5nIGJyYW5jaCBwcmVkaWN0aW9uLiAqLworKyAgaWYgKG9wdGltaXplID49IDIgJiYgVEFSR0VUX0JSQU5DSF9QUkVEKQorKyAgICBhbGlnbl9sb29wcyA9IDI7CisrCisrCisrICAvKiBFbmFibGUgZmFzdC1mbG9hdCBsaWJyYXJ5IGlmIHVuc2FmZSBtYXRoIG9wdGltaXphdGlvbnMKKysgICAgIGFyZSB1c2VkLiAqLworKyAgaWYgKGZsYWdfdW5zYWZlX21hdGhfb3B0aW1pemF0aW9ucykKKysgICAgdGFyZ2V0X2ZsYWdzIHw9IE1BU0tfRkFTVF9GTE9BVDsKKysKKysgIC8qIENoZWNrIGlmIHdlIHNob3VsZCBzZXQgYXZyMzJfaW1tX2luX2NvbnN0X3Bvb2wKKysgICAgIGJhc2VkIG9uIGlmIGNhY2hlcyBhcmUgcHJlc2VudCBvciBub3QuICovCisrICBpZiAoIGF2cjMyX2ltbV9pbl9jb25zdF9wb29sID09IC0xICkKKysgICAgeworKyAgICAgIGlmICggVEFSR0VUX0NBQ0hFUyApCisrICAgICAgICBhdnIzMl9pbW1faW5fY29uc3RfcG9vbCA9IDE7CisrICAgICAgZWxzZQorKyAgICAgICAgYXZyMzJfaW1tX2luX2NvbnN0X3Bvb2wgPSAwOworKyAgICB9CisrCisrICBpZiAoVEFSR0VUX05PX1BJQykKKysgICAgZmxhZ19waWMgPSAwOworKworKyAgYXZyMzJfYWRkX2djX3Jvb3RzICgpOworK30KKysKKysKKysvKgorK0lmIGRlZmluZWQsIGEgZnVuY3Rpb24gdGhhdCBvdXRwdXRzIHRoZSBhc3NlbWJsZXIgY29kZSBmb3IgZW50cnkgdG8gYQorK2Z1bmN0aW9uLiAgVGhlIHByb2xvZ3VlIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBzdGFjayBmcmFtZSwKKytpbml0aWFsaXppbmcgdGhlIGZyYW1lIHBvaW50ZXIgcmVnaXN0ZXIsIHNhdmluZyByZWdpc3RlcnMgdGhhdCBtdXN0IGJlCisrc2F2ZWQsIGFuZCBhbGxvY2F0aW5nIHNpemUgYWRkaXRpb25hbCBieXRlcyBvZiBzdG9yYWdlIGZvciB0aGUKKytsb2NhbCB2YXJpYWJsZXMuICBzaXplIGlzIGFuIGludGVnZXIuICBmaWxlIGlzIGEgc3RkaW8KKytzdHJlYW0gdG8gd2hpY2ggdGhlIGFzc2VtYmxlciBjb2RlIHNob3VsZCBiZSBvdXRwdXQuCisrCisrVGhlIGxhYmVsIGZvciB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbiBuZWVkIG5vdCBiZSBvdXRwdXQgYnkgdGhpcworK21hY3JvLiAgVGhhdCBoYXMgYWxyZWFkeSBiZWVuIGRvbmUgd2hlbiB0aGUgbWFjcm8gaXMgcnVuLgorKworK1RvIGRldGVybWluZSB3aGljaCByZWdpc3RlcnMgdG8gc2F2ZSwgdGhlIG1hY3JvIGNhbiByZWZlciB0byB0aGUgYXJyYXkKKytyZWdzX2V2ZXJfbGl2ZTogZWxlbWVudCByIGlzIG5vbnplcm8gaWYgaGFyZCByZWdpc3RlcgorK3IgaXMgdXNlZCBhbnl3aGVyZSB3aXRoaW4gdGhlIGZ1bmN0aW9uLiAgVGhpcyBpbXBsaWVzIHRoZSBmdW5jdGlvbgorK3Byb2xvZ3VlIHNob3VsZCBzYXZlIHJlZ2lzdGVyIHIsIHByb3ZpZGVkIGl0IGlzIG5vdCBvbmUgb2YgdGhlCisrY2FsbC11c2VkIHJlZ2lzdGVycy4gIChUQVJHRVRfQVNNX0ZVTkNUSU9OX0VQSUxPR1VFIG11c3QgbGlrZXdpc2UgdXNlCisrcmVnc19ldmVyX2xpdmUuKQorKworK09uIG1hY2hpbmVzIHRoYXQgaGF2ZSBgYHJlZ2lzdGVyIHdpbmRvd3MnJywgdGhlIGZ1bmN0aW9uIGVudHJ5IGNvZGUgZG9lcworK25vdCBzYXZlIG9uIHRoZSBzdGFjayB0aGUgcmVnaXN0ZXJzIHRoYXQgYXJlIGluIHRoZSB3aW5kb3dzLCBldmVuIGlmCisrdGhleSBhcmUgc3VwcG9zZWQgdG8gYmUgcHJlc2VydmVkIGJ5IGZ1bmN0aW9uIGNhbGxzOyBpbnN0ZWFkIGl0IHRha2VzCisrYXBwcm9wcmlhdGUgc3RlcHMgdG8gYGBwdXNoJycgdGhlIHJlZ2lzdGVyIHN0YWNrLCBpZiBhbnkgbm9uLWNhbGwtdXNlZAorK3JlZ2lzdGVycyBhcmUgdXNlZCBpbiB0aGUgZnVuY3Rpb24uCisrCisrT24gbWFjaGluZXMgd2hlcmUgZnVuY3Rpb25zIG1heSBvciBtYXkgbm90IGhhdmUgZnJhbWUtcG9pbnRlcnMsIHRoZQorK2Z1bmN0aW9uIGVudHJ5IGNvZGUgbXVzdCB2YXJ5IGFjY29yZGluZ2x5OyBpdCBtdXN0IHNldCB1cCB0aGUgZnJhbWUKKytwb2ludGVyIGlmIG9uZSBpcyB3YW50ZWQsIGFuZCBub3Qgb3RoZXJ3aXNlLiAgVG8gZGV0ZXJtaW5lIHdoZXRoZXIgYQorK2ZyYW1lIHBvaW50ZXIgaXMgaW4gd2FudGVkLCB0aGUgbWFjcm8gY2FuIHJlZmVyIHRvIHRoZSB2YXJpYWJsZQorK2ZyYW1lX3BvaW50ZXJfbmVlZGVkLiAgVGhlIHZhcmlhYmxlJ3MgdmFsdWUgd2lsbCBiZSAxIGF0IHJ1bgorK3RpbWUgaW4gYSBmdW5jdGlvbiB0aGF0IG5lZWRzIGEgZnJhbWUgcG9pbnRlci4gIChzZWUgRWxpbWluYXRpb24pLgorKworK1RoZSBmdW5jdGlvbiBlbnRyeSBjb2RlIGlzIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIGFueSBzdGFjayBzcGFjZQorK3JlcXVpcmVkIGZvciB0aGUgZnVuY3Rpb24uICBUaGlzIHN0YWNrIHNwYWNlIGNvbnNpc3RzIG9mIHRoZSByZWdpb25zCisrbGlzdGVkIGJlbG93LiAgSW4gbW9zdCBjYXNlcywgdGhlc2UgcmVnaW9ucyBhcmUgYWxsb2NhdGVkIGluIHRoZQorK29yZGVyIGxpc3RlZCwgd2l0aCB0aGUgbGFzdCBsaXN0ZWQgcmVnaW9uIGNsb3Nlc3QgdG8gdGhlIHRvcCBvZiB0aGUKKytzdGFjayAodGhlIGxvd2VzdCBhZGRyZXNzIGlmIFNUQUNLX0dST1dTX0RPV05XQVJEIGlzIGRlZmluZWQsIGFuZAorK3RoZSBoaWdoZXN0IGFkZHJlc3MgaWYgaXQgaXMgbm90IGRlZmluZWQpLiAgWW91IGNhbiB1c2UgYSBkaWZmZXJlbnQgb3JkZXIKKytmb3IgYSBtYWNoaW5lIGlmIGRvaW5nIHNvIGlzIG1vcmUgY29udmVuaWVudCBvciByZXF1aXJlZCBmb3IKKytjb21wYXRpYmlsaXR5IHJlYXNvbnMuICBFeGNlcHQgaW4gY2FzZXMgd2hlcmUgcmVxdWlyZWQgYnkgc3RhbmRhcmQKKytvciBieSBhIGRlYnVnZ2VyLCB0aGVyZSBpcyBubyByZWFzb24gd2h5IHRoZSBzdGFjayBsYXlvdXQgdXNlZCBieSBHQ0MKKytuZWVkIGFncmVlIHdpdGggdGhhdCB1c2VkIGJ5IG90aGVyIGNvbXBpbGVycyBmb3IgYSBtYWNoaW5lLgorKyovCisrCisrI3VuZGVmIFRBUkdFVF9BU01fRlVOQ1RJT05fUFJPTE9HVUUKKysjZGVmaW5lIFRBUkdFVF9BU01fRlVOQ1RJT05fUFJPTE9HVUUgYXZyMzJfdGFyZ2V0X2FzbV9mdW5jdGlvbl9wcm9sb2d1ZQorKworKworKyN1bmRlZiBUQVJHRVRfREVGQVVMVF9TSE9SVF9FTlVNUworKyNkZWZpbmUgVEFSR0VUX0RFRkFVTFRfU0hPUlRfRU5VTVMgaG9va19ib29sX3ZvaWRfZmFsc2UKKysKKysjdW5kZWYgVEFSR0VUX1BST01PVEVfRlVOQ1RJT05fQVJHUworKyNkZWZpbmUgVEFSR0VUX1BST01PVEVfRlVOQ1RJT05fQVJHUyBob29rX2Jvb2xfdHJlZV90cnVlCisrCisrI3VuZGVmIFRBUkdFVF9QUk9NT1RFX0ZVTkNUSU9OX1JFVFVSTgorKyNkZWZpbmUgVEFSR0VUX1BST01PVEVfRlVOQ1RJT05fUkVUVVJOIGhvb2tfYm9vbF90cmVlX3RydWUKKysKKysjdW5kZWYgVEFSR0VUX1BST01PVEVfUFJPVE9UWVBFUworKyNkZWZpbmUgVEFSR0VUX1BST01PVEVfUFJPVE9UWVBFUyBob29rX2Jvb2xfdHJlZV90cnVlCisrCisrI3VuZGVmIFRBUkdFVF9NVVNUX1BBU1NfSU5fU1RBQ0sKKysjZGVmaW5lIFRBUkdFVF9NVVNUX1BBU1NfSU5fU1RBQ0sgYXZyMzJfbXVzdF9wYXNzX2luX3N0YWNrCisrCisrI3VuZGVmIFRBUkdFVF9QQVNTX0JZX1JFRkVSRU5DRQorKyNkZWZpbmUgVEFSR0VUX1BBU1NfQllfUkVGRVJFTkNFIGF2cjMyX3Bhc3NfYnlfcmVmZXJlbmNlCisrCisrI3VuZGVmIFRBUkdFVF9TVFJJQ1RfQVJHVU1FTlRfTkFNSU5HCisrI2RlZmluZSBUQVJHRVRfU1RSSUNUX0FSR1VNRU5UX05BTUlORyBhdnIzMl9zdHJpY3RfYXJndW1lbnRfbmFtaW5nCisrCisrI3VuZGVmIFRBUkdFVF9WRUNUT1JfTU9ERV9TVVBQT1JURURfUAorKyNkZWZpbmUgVEFSR0VUX1ZFQ1RPUl9NT0RFX1NVUFBPUlRFRF9QIGF2cjMyX3ZlY3Rvcl9tb2RlX3N1cHBvcnRlZAorKworKyN1bmRlZiBUQVJHRVRfUkVUVVJOX0lOX01FTU9SWQorKyNkZWZpbmUgVEFSR0VUX1JFVFVSTl9JTl9NRU1PUlkgYXZyMzJfcmV0dXJuX2luX21lbW9yeQorKworKyN1bmRlZiBUQVJHRVRfUkVUVVJOX0lOX01TQgorKyNkZWZpbmUgVEFSR0VUX1JFVFVSTl9JTl9NU0IgYXZyMzJfcmV0dXJuX2luX21zYgorKworKyN1bmRlZiBUQVJHRVRfRU5DT0RFX1NFQ1RJT05fSU5GTworKyNkZWZpbmUgVEFSR0VUX0VOQ09ERV9TRUNUSU9OX0lORk8gYXZyMzJfZW5jb2RlX3NlY3Rpb25faW5mbworKworKyN1bmRlZiBUQVJHRVRfQVJHX1BBUlRJQUxfQllURVMKKysjZGVmaW5lIFRBUkdFVF9BUkdfUEFSVElBTF9CWVRFUyBhdnIzMl9hcmdfcGFydGlhbF9ieXRlcworKworKyN1bmRlZiBUQVJHRVRfU1RSSVBfTkFNRV9FTkNPRElORworKyNkZWZpbmUgVEFSR0VUX1NUUklQX05BTUVfRU5DT0RJTkcgYXZyMzJfc3RyaXBfbmFtZV9lbmNvZGluZworKworKyNkZWZpbmUgc3RyZXEoc3RyaW5nMSwgc3RyaW5nMikgKHN0cmNtcCAoc3RyaW5nMSwgc3RyaW5nMikgPT0gMCkKKysKKysjdW5kZWYgIFRBUkdFVF9OQVJST1dfVk9MQVRJTEVfQklURklFTEQKKysjZGVmaW5lIFRBUkdFVF9OQVJST1dfVk9MQVRJTEVfQklURklFTEQgaG9va19ib29sX3ZvaWRfZmFsc2UKKysKKysjdW5kZWYgIFRBUkdFVF9BVFRSSUJVVEVfVEFCTEUKKysjZGVmaW5lIFRBUkdFVF9BVFRSSUJVVEVfVEFCTEUgYXZyMzJfYXR0cmlidXRlX3RhYmxlCisrCisrI3VuZGVmICBUQVJHRVRfQ09NUF9UWVBFX0FUVFJJQlVURVMKKysjZGVmaW5lIFRBUkdFVF9DT01QX1RZUEVfQVRUUklCVVRFUyBhdnIzMl9jb21wX3R5cGVfYXR0cmlidXRlcworKworKworKyN1bmRlZiAgVEFSR0VUX1JUWF9DT1NUUworKyNkZWZpbmUgVEFSR0VUX1JUWF9DT1NUUyBhdnIzMl9ydHhfY29zdHMKKysKKysjdW5kZWYgIFRBUkdFVF9DQU5OT1RfRk9SQ0VfQ09OU1RfTUVNCisrI2RlZmluZSAgVEFSR0VUX0NBTk5PVF9GT1JDRV9DT05TVF9NRU0gYXZyMzJfY2Fubm90X2ZvcmNlX2NvbnN0X21lbQorKworKyN1bmRlZiAgVEFSR0VUX0FTTV9JTlRFR0VSCisrI2RlZmluZSBUQVJHRVRfQVNNX0lOVEVHRVIgYXZyMzJfYXNzZW1ibGVfaW50ZWdlcgorKworKyN1bmRlZiAgVEFSR0VUX0ZVTkNUSU9OX1ZBTFVFCisrI2RlZmluZSBUQVJHRVRfRlVOQ1RJT05fVkFMVUUgYXZyMzJfZnVuY3Rpb25fdmFsdWUKKysKKysjdW5kZWYgIFRBUkdFVF9NSU5fQU5DSE9SX09GRlNFVAorKyNkZWZpbmUgVEFSR0VUX01JTl9BTkNIT1JfT0ZGU0VUICgwKQorKworKyN1bmRlZiAgVEFSR0VUX01BWF9BTkNIT1JfT0ZGU0VUCisrI2RlZmluZSBUQVJHRVRfTUFYX0FOQ0hPUl9PRkZTRVQgKCgxIDw8IDE1KSAtIDEpCisrCisrI3VuZGVmIFRBUkdFVF9TRUNPTkRBUllfUkVMT0FECisrI2RlZmluZSBUQVJHRVRfU0VDT05EQVJZX1JFTE9BRCBhdnIzMl9zZWNvbmRhcnlfcmVsb2FkCisrCisrZW51bSByZWdfY2xhc3MKKythdnIzMl9zZWNvbmRhcnlfcmVsb2FkIChib29sIGluX3AsIHJ0eCB4LCBlbnVtIHJlZ19jbGFzcyBjbGFzcyBBVFRSSUJVVEVfVU5VU0VELAorKyAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIHNlY29uZGFyeV9yZWxvYWRfaW5mbyAqc3JpKQorK3sKKysKKysgIGlmICggYXZyMzJfcm13X21lbW9yeV9vcGVyYW5kICh4LCBtb2RlKSApCisrICAgIHsKKysgICAgICBpZiAoIWluX3ApCisrICAgICAgICBzcmktPmljb2RlID0gQ09ERV9GT1JfcmVsb2FkX291dF9ybXdfbWVtb3J5X29wZXJhbmQ7CisrICAgICAgZWxzZQorKyAgICAgICAgc3JpLT5pY29kZSA9IENPREVfRk9SX3JlbG9hZF9pbl9ybXdfbWVtb3J5X29wZXJhbmQ7CisrICAgIH0KKysgIHJldHVybiBOT19SRUdTOworKworK30KKysKKysvKgorKyAqIFN3aXRjaGVzIHRvIHRoZSBhcHByb3ByaWF0ZSBzZWN0aW9uIGZvciBvdXRwdXQgb2YgY29uc3RhbnQgcG9vbAorKyAqIGVudHJ5IHggaW4gbW9kZS4gWW91IGNhbiBhc3N1bWUgdGhhdCB4IGlzIHNvbWUga2luZCBvZiBjb25zdGFudCBpbgorKyAqIFJUTC4gVGhlIGFyZ3VtZW50IG1vZGUgaXMgcmVkdW5kYW50IGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBhCisrICogY29uc3RfaW50IHJ0eC4gU2VsZWN0IHRoZSBzZWN0aW9uIGJ5IGNhbGxpbmcgcmVhZG9ubHlfZGF0YV8gc2VjdGlvbgorKyAqIG9yIG9uZSBvZiB0aGUgYWx0ZXJuYXRpdmVzIGZvciBvdGhlciBzZWN0aW9ucy4gYWxpZ24gaXMgdGhlCisrICogY29uc3RhbnQgYWxpZ25tZW50IGluIGJpdHMuCisrICoKKysgKiBUaGUgZGVmYXVsdCB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gdGFrZXMgY2FyZSBvZiBwdXR0aW5nIHN5bWJvbGljCisrICogY29uc3RhbnRzIGluIGZsYWdfIHBpYyBtb2RlIGluIGRhdGFfc2VjdGlvbiBhbmQgZXZlcnl0aGluZyBlbHNlIGluCisrICogcmVhZG9ubHlfZGF0YV9zZWN0aW9uLgorKyAqLworKy8vI3VuZGVmIFRBUkdFVF9BU01fU0VMRUNUX1JUWF9TRUNUSU9OCisrLy8jZGVmaW5lIFRBUkdFVF9BU01fU0VMRUNUX1JUWF9TRUNUSU9OIGF2cjMyX3NlbGVjdF9ydHhfc2VjdGlvbgorKworKworKy8qCisrICogSWYgbm9uLW51bGwsIHRoaXMgaG9vayBwZXJmb3JtcyBhIHRhcmdldC1zcGVjaWZpYyBwYXNzIG92ZXIgdGhlCisrICogaW5zdHJ1Y3Rpb24gc3RyZWFtLiBUaGUgY29tcGlsZXIgd2lsbCBydW4gaXQgYXQgYWxsIG9wdGltaXphdGlvbgorKyAqIGxldmVscywganVzdCBiZWZvcmUgdGhlIHBvaW50IGF0IHdoaWNoIGl0IG5vcm1hbGx5IGRvZXMKKysgKiBkZWxheWVkLWJyYW5jaCBzY2hlZHVsaW5nLgorKyAqCisrICogVGhlIGV4YWN0IHB1cnBvc2Ugb2YgdGhlIGhvb2sgdmFyaWVzIGZyb20gdGFyZ2V0IHRvIHRhcmdldC4gU29tZQorKyAqIHVzZSBpdCB0byBkbyB0cmFuc2Zvcm1hdGlvbnMgdGhhdCBhcmUgbmVjZXNzYXJ5IGZvciBjb3JyZWN0bmVzcywKKysgKiBzdWNoIGFzIGxheWluZyBvdXQgaW4tZnVuY3Rpb24gY29uc3RhbnQgcG9vbHMgb3IgYXZvaWRpbmcgaGFyZHdhcmUKKysgKiBoYXphcmRzLiBPdGhlcnMgdXNlIGl0IGFzIGFuIG9wcG9ydHVuaXR5IHRvIGRvIHNvbWUKKysgKiBtYWNoaW5lLWRlcGVuZGVudCBvcHRpbWl6YXRpb25zLgorKyAqCisrICogWW91IG5lZWQgbm90IGltcGxlbWVudCB0aGUgaG9vayBpZiBpdCBoYXMgbm90aGluZyB0byBkby4gVGhlCisrICogZGVmYXVsdCBkZWZpbml0aW9uIGlzIG51bGwuCisrICovCisrI3VuZGVmIFRBUkdFVF9NQUNISU5FX0RFUEVOREVOVF9SRU9SRworKyNkZWZpbmUgVEFSR0VUX01BQ0hJTkVfREVQRU5ERU5UX1JFT1JHIGF2cjMyX3Jlb3JnCisrCisrLyogVGFyZ2V0IGhvb2sgZm9yIGFzc2VtYmxpbmcgaW50ZWdlciBvYmplY3RzLgorKyAgIE5lZWQgdG8gaGFuZGxlIGludGVnZXIgdmVjdG9ycyAqLworK3N0YXRpYyBib29sCisrYXZyMzJfYXNzZW1ibGVfaW50ZWdlciAocnR4IHgsIHVuc2lnbmVkIGludCBzaXplLCBpbnQgYWxpZ25lZF9wKQorK3sKKysgIGlmIChhdnIzMl92ZWN0b3JfbW9kZV9zdXBwb3J0ZWQgKEdFVF9NT0RFICh4KSkpCisrICAgIHsKKysgICAgICBpbnQgaSwgdW5pdHM7CisrCisrICAgICAgaWYgKEdFVF9DT0RFICh4KSAhPSBDT05TVF9WRUNUT1IpCisrCWFib3J0ICgpOworKworKyAgICAgIHVuaXRzID0gQ09OU1RfVkVDVE9SX05VTklUUyAoeCk7CisrCisrICAgICAgc3dpdGNoIChHRVRfTU9ERSAoeCkpCisrCXsKKysJY2FzZSBWMkhJbW9kZToKKysJICBzaXplID0gMjsKKysJICBicmVhazsKKysJY2FzZSBWNFFJbW9kZToKKysJICBzaXplID0gMTsKKysJICBicmVhazsKKysJZGVmYXVsdDoKKysJICBhYm9ydCAoKTsKKysJfQorKworKyAgICAgIGZvciAoaSA9IDA7IGkgPCB1bml0czsgaSsrKQorKwl7CisrCSAgcnR4IGVsdDsKKysKKysJICBlbHQgPSBDT05TVF9WRUNUT1JfRUxUICh4LCBpKTsKKysJICBhc3NlbWJsZV9pbnRlZ2VyIChlbHQsIHNpemUsIGkgPT0gMCA/IDMyIDogc2l6ZSAqIEJJVFNfUEVSX1VOSVQsIDEpOworKwl9CisrCisrICAgICAgcmV0dXJuIHRydWU7CisrICAgIH0KKysKKysgIHJldHVybiBkZWZhdWx0X2Fzc2VtYmxlX2ludGVnZXIgKHgsIHNpemUsIGFsaWduZWRfcCk7CisrfQorKworKy8qCisrICogVGhpcyB0YXJnZXQgaG9vayBkZXNjcmliZXMgdGhlIHJlbGF0aXZlIGNvc3RzIG9mIFJUTCBleHByZXNzaW9ucy4KKysgKgorKyAqIFRoZSBjb3N0IG1heSBkZXBlbmQgb24gdGhlIHByZWNpc2UgZm9ybSBvZiB0aGUgZXhwcmVzc2lvbiwgd2hpY2ggaXMKKysgKiBhdmFpbGFibGUgZm9yIGV4YW1pbmF0aW9uIGluIHgsIGFuZCB0aGUgcnR4IGNvZGUgb2YgdGhlIGV4cHJlc3Npb24KKysgKiBpbiB3aGljaCBpdCBpcyBjb250YWluZWQsIGZvdW5kIGluIG91dGVyX2NvZGUuIGNvZGUgaXMgdGhlCisrICogZXhwcmVzc2lvbiBjb2RlLS1yZWR1bmRhbnQsIHNpbmNlIGl0IGNhbiBiZSBvYnRhaW5lZCB3aXRoIEdFVF9DT0RFCisrICogKHgpLgorKyAqCisrICogSW4gaW1wbGVtZW50aW5nIHRoaXMgaG9vaywgeW91IGNhbiB1c2UgdGhlIGNvbnN0cnVjdCBDT1NUU19OX0lOU05TCisrICogKG4pIHRvIHNwZWNpZnkgYSBjb3N0IGVxdWFsIHRvIG4gZmFzdCBpbnN0cnVjdGlvbnMuCisrICoKKysgKiBPbiBlbnRyeSB0byB0aGUgaG9vaywgKnRvdGFsIGNvbnRhaW5zIGEgZGVmYXVsdCBlc3RpbWF0ZSBmb3IgdGhlCisrICogY29zdCBvZiB0aGUgZXhwcmVzc2lvbi4gVGhlIGhvb2sgc2hvdWxkIG1vZGlmeSB0aGlzIHZhbHVlIGFzCisrICogbmVjZXNzYXJ5LiBUcmFkaXRpb25hbGx5LCB0aGUgZGVmYXVsdCBjb3N0cyBhcmUgQ09TVFNfTl9JTlNOUyAoNSkKKysgKiBmb3IgbXVsdGlwbGljYXRpb25zLCBDT1NUU19OX0lOU05TICg3KSBmb3IgZGl2aXNpb24gYW5kIG1vZHVsdXMKKysgKiBvcGVyYXRpb25zLCBhbmQgQ09TVFNfTl9JTlNOUyAoMSkgZm9yIGFsbCBvdGhlciBvcGVyYXRpb25zLgorKyAqCisrICogV2hlbiBvcHRpbWl6aW5nIGZvciBjb2RlIHNpemUsIGkuZS4gd2hlbiBvcHRpbWl6ZV9zaXplIGlzIG5vbi16ZXJvLAorKyAqIHRoaXMgdGFyZ2V0IGhvb2sgc2hvdWxkIGJlIHVzZWQgdG8gZXN0aW1hdGUgdGhlIHJlbGF0aXZlIHNpemUgY29zdAorKyAqIG9mIGFuIGV4cHJlc3Npb24sIGFnYWluIHJlbGF0aXZlIHRvIENPU1RTX05fSU5TTlMuCisrICoKKysgKiBUaGUgaG9vayByZXR1cm5zIHRydWUgd2hlbiBhbGwgc3ViZXhwcmVzc2lvbnMgb2YgeCBoYXZlIGJlZW4KKysgKiBwcm9jZXNzZWQsIGFuZCBmYWxzZSB3aGVuIHJ0eF9jb3N0IHNob3VsZCByZWN1cnNlLgorKyAqLworKworKy8qIFdvcmtlciByb3V0aW5lIGZvciBhdnIzMl9ydHhfY29zdHMuICAqLworK3N0YXRpYyBpbmxpbmUgaW50CisrYXZyMzJfcnR4X2Nvc3RzXzEgKHJ0eCB4LCBlbnVtIHJ0eF9jb2RlIGNvZGUgQVRUUklCVVRFX1VOVVNFRCwKKysJCSAgIGVudW0gcnR4X2NvZGUgb3V0ZXIgQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlID0gR0VUX01PREUgKHgpOworKworKyAgc3dpdGNoIChHRVRfQ09ERSAoeCkpCisrICAgIHsKKysgICAgY2FzZSBNRU06CisrICAgICAgLyogVXNpbmcgcHJlIGRlY3JlbWVudCAvIHBvc3QgaW5jcmVtZW50IG1lbW9yeSBvcGVyYXRpb25zIG9uIHRoZQorKyAgICAgICAgIGF2cjMyX3VjIGFyY2hpdGVjdHVyZSBtZWFucyB0aGF0IHR3byB3cml0ZWJhY2tzIG11c3QgYmUgcGVyZm9ybWVkCisrICAgICAgICAgYW5kIGhlbmNlIHR3byBjeWNsZXMgYXJlIG5lZWRlZC4gKi8KKysgICAgICBpZiAoIW9wdGltaXplX3NpemUKKysJICAmJiBHRVRfTU9ERV9TSVpFIChtb2RlKSA8PSAyICogVU5JVFNfUEVSX1dPUkQKKysJICAmJiBUQVJHRVRfQVJDSF9VQworKwkgICYmIChHRVRfQ09ERSAoWEVYUCAoeCwgMCkpID09IFBSRV9ERUMKKysJICAgICAgfHwgR0VUX0NPREUgKFhFWFAgKHgsIDApKSA9PSBQT1NUX0lOQykpCisrCXJldHVybiBDT1NUU19OX0lOU05TICg1KTsKKysKKysgICAgICAvKiBNZW1vcnkgY29zdHMgcXVpdGUgYSBsb3QgZm9yIHRoZSBmaXJzdCB3b3JkLCBidXQgc3Vic2VxdWVudCB3b3JkcworKyAgICAgICAgIGxvYWQgYXQgdGhlIGVxdWl2YWxlbnQgb2YgYSBzaW5nbGUgaW5zbiBlYWNoLiAgKi8KKysgICAgICBpZiAoR0VUX01PREVfU0laRSAobW9kZSkgPiBVTklUU19QRVJfV09SRCkKKysJcmV0dXJuIENPU1RTX05fSU5TTlMgKDMgKyAoR0VUX01PREVfU0laRSAobW9kZSkgLyBVTklUU19QRVJfV09SRCkpOworKworKyAgICAgIHJldHVybiBDT1NUU19OX0lOU05TICg0KTsKKysgICAgY2FzZSBTWU1CT0xfUkVGOgorKyAgICBjYXNlIENPTlNUOgorKyAgICAgIC8qIFRoZXNlIGFyZSB2YWxpZCBmb3IgdGhlIHBzZXVkbyBpbnNuczogbGRhLncgYW5kIGNhbGwgd2hpY2ggb3BlcmF0ZXMKKysgICAgICAgICBvbiBkaXJlY3QgYWRkcmVzc2VzLiBXZSBhc3N1bWUgdGhhdCB0aGUgY29zdCBvZiBhIGxkYS53IGlzIHRoZSBzYW1lCisrICAgICAgICAgYXMgdGhlIGNvc3Qgb2YgYSBsZC53IGluc24uICovCisrICAgICAgcmV0dXJuIChvdXRlciA9PSBTRVQpID8gQ09TVFNfTl9JTlNOUyAoNCkgOiBDT1NUU19OX0lOU05TICgxKTsKKysgICAgY2FzZSBESVY6CisrICAgIGNhc2UgTU9EOgorKyAgICBjYXNlIFVESVY6CisrICAgIGNhc2UgVU1PRDoKKysgICAgICByZXR1cm4gb3B0aW1pemVfc2l6ZSA/IENPU1RTX05fSU5TTlMgKDEpIDogQ09TVFNfTl9JTlNOUyAoMTYpOworKworKyAgICBjYXNlIFJPVEFURToKKysgICAgY2FzZSBST1RBVEVSVDoKKysgICAgICBpZiAobW9kZSA9PSBUSW1vZGUpCisrCXJldHVybiBDT1NUU19OX0lOU05TICgxMDApOworKworKyAgICAgIGlmIChtb2RlID09IERJbW9kZSkKKysJcmV0dXJuIENPU1RTX05fSU5TTlMgKDEwKTsKKysgICAgICByZXR1cm4gQ09TVFNfTl9JTlNOUyAoNCk7CisrICAgIGNhc2UgQVNISUZUOgorKyAgICBjYXNlIExTSElGVFJUOgorKyAgICBjYXNlIEFTSElGVFJUOgorKyAgICBjYXNlIE5PVDoKKysgICAgICBpZiAobW9kZSA9PSBUSW1vZGUpCisrCXJldHVybiBDT1NUU19OX0lOU05TICgxMCk7CisrCisrICAgICAgaWYgKG1vZGUgPT0gREltb2RlKQorKwlyZXR1cm4gQ09TVFNfTl9JTlNOUyAoNCk7CisrICAgICAgcmV0dXJuIENPU1RTX05fSU5TTlMgKDEpOworKyAgICBjYXNlIFBMVVM6CisrICAgIGNhc2UgTUlOVVM6CisrICAgIGNhc2UgTkVHOgorKyAgICBjYXNlIENPTVBBUkU6CisrICAgIGNhc2UgQUJTOgorKyAgICAgIGlmIChHRVRfTU9ERV9DTEFTUyAobW9kZSkgPT0gTU9ERV9GTE9BVCkKKysJcmV0dXJuIENPU1RTX05fSU5TTlMgKDEwMCk7CisrCisrICAgICAgaWYgKG1vZGUgPT0gVEltb2RlKQorKwlyZXR1cm4gQ09TVFNfTl9JTlNOUyAoNTApOworKworKyAgICAgIGlmIChtb2RlID09IERJbW9kZSkKKysJcmV0dXJuIENPU1RTX05fSU5TTlMgKDIpOworKyAgICAgIHJldHVybiBDT1NUU19OX0lOU05TICgxKTsKKysKKysgICAgY2FzZSBNVUxUOgorKyAgICAgIHsKKysJaWYgKEdFVF9NT0RFX0NMQVNTIChtb2RlKSA9PSBNT0RFX0ZMT0FUKQorKwkgIHJldHVybiBDT1NUU19OX0lOU05TICgzMDApOworKworKwlpZiAobW9kZSA9PSBUSW1vZGUpCisrCSAgcmV0dXJuIENPU1RTX05fSU5TTlMgKDE2KTsKKysKKysJaWYgKG1vZGUgPT0gREltb2RlKQorKwkgIHJldHVybiBDT1NUU19OX0lOU05TICg0KTsKKysKKysJaWYgKG1vZGUgPT0gSEltb2RlKQorKwkgIHJldHVybiBDT1NUU19OX0lOU05TICgyKTsKKysKKysJcmV0dXJuIENPU1RTX05fSU5TTlMgKDMpOworKyAgICAgIH0KKysgICAgY2FzZSBJRl9USEVOX0VMU0U6CisrICAgICAgaWYgKEdFVF9DT0RFIChYRVhQICh4LCAxKSkgPT0gUEMgfHwgR0VUX0NPREUgKFhFWFAgKHgsIDIpKSA9PSBQQykKKysJcmV0dXJuIENPU1RTX05fSU5TTlMgKDQpOworKyAgICAgIHJldHVybiBDT1NUU19OX0lOU05TICgxKTsKKysgICAgY2FzZSBTSUdOX0VYVEVORDoKKysgICAgY2FzZSBaRVJPX0VYVEVORDoKKysgICAgICAvKiBTaWduL1plcm8gZXh0ZW5zaW9ucyBvZiByZWdpc3RlcnMgY29zdCBxdWl0ZSBtdWNoIHNpbmNlIHRoZXNlCisrICAgICAgICAgaW5zdHJjdXRpb25zIG9ubHkgdGFrZSBvbmUgcmVnaXN0ZXIgb3BlcmFuZCB3aGljaCBtZWFucyB0aGF0IGdjYworKyAgICAgICAgIG9mdGVuIG11c3QgaW5zZXJ0IHNvbWUgbW92ZSBpbnN0cmN1dGlvbnMgKi8KKysgICAgICBpZiAobW9kZSA9PSBRSW1vZGUgfHwgbW9kZSA9PSBISW1vZGUpCisrCXJldHVybiAoQ09TVFNfTl9JTlNOUyAoR0VUX0NPREUgKFhFWFAgKHgsIDApKSA9PSBNRU0gPyAwIDogMSkpOworKyAgICAgIHJldHVybiBDT1NUU19OX0lOU05TICg0KTsKKysgICAgY2FzZSBVTlNQRUM6CisrICAgICAgLyogZGl2bW9kIG9wZXJhdGlvbnMgKi8KKysgICAgICBpZiAoWElOVCAoeCwgMSkgPT0gVU5TUEVDX1VESVZNT0RTSTRfSU5URVJOQUwKKysJICB8fCBYSU5UICh4LCAxKSA9PSBVTlNQRUNfRElWTU9EU0k0X0lOVEVSTkFMKQorKwl7CisrCSAgcmV0dXJuIG9wdGltaXplX3NpemUgPyBDT1NUU19OX0lOU05TICgxKSA6IENPU1RTX05fSU5TTlMgKDE2KTsKKysJfQorKyAgICAgIC8qIEZhbGx0aHJvdWdoICovCisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIENPU1RTX05fSU5TTlMgKDEpOworKyAgICB9CisrfQorKworK3N0YXRpYyBib29sCisrYXZyMzJfcnR4X2Nvc3RzIChydHggeCwgaW50IGNvZGUsIGludCBvdXRlcl9jb2RlLCBpbnQgKnRvdGFsKQorK3sKKysgICp0b3RhbCA9IGF2cjMyX3J0eF9jb3N0c18xICh4LCBjb2RlLCBvdXRlcl9jb2RlKTsKKysgIHJldHVybiB0cnVlOworK30KKysKKysKKytib29sCisrYXZyMzJfY2Fubm90X2ZvcmNlX2NvbnN0X21lbSAocnR4IHggQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICAvKiBEbyBub3Qgd2FudCBzeW1ib2xzIGluIHRoZSBjb25zdGFudCBwb29sIHdoZW4gY29tcGlsaW5nIHBpYyBvciBpZiB1c2luZworKyAgICAgYWRkcmVzcyBwc2V1ZG8gaW5zdHJ1Y3Rpb25zLiAqLworKyAgcmV0dXJuICgoZmxhZ19waWMgfHwgVEFSR0VUX0hBU19BU01fQUREUl9QU0VVRE9TKQorKwkgICYmIGF2cjMyX2ZpbmRfc3ltYm9sICh4KSAhPSBOVUxMX1JUWCk7CisrfQorKworKworKy8qIFRhYmxlIG9mIG1hY2hpbmUgYXR0cmlidXRlcy4gICovCisrY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9zcGVjIGF2cjMyX2F0dHJpYnV0ZV90YWJsZVtdID0geworKyAgLyogeyBuYW1lLCBtaW5fbGVuLCBtYXhfbGVuLCBkZWNsX3JlcSwgdHlwZV9yZXEsIGZuX3R5cGVfcmVxLCBoYW5kbGVyIH0gKi8KKysgIC8qIEludGVycnVwdCBTZXJ2aWNlIFJvdXRpbmVzIGhhdmUgc3BlY2lhbCBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUKKysgICAgIHJlcXVpcmVtZW50cy4gICovCisrICB7ImlzciIsIDAsIDEsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGF2cjMyX2hhbmRsZV9pc3JfYXR0cmlidXRlfSwKKysgIHsiaW50ZXJydXB0IiwgMCwgMSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgYXZyMzJfaGFuZGxlX2lzcl9hdHRyaWJ1dGV9LAorKyAgeyJhY2FsbCIsIDAsIDEsIGZhbHNlLCB0cnVlLCB0cnVlLCBhdnIzMl9oYW5kbGVfYWNhbGxfYXR0cmlidXRlfSwKKysgIHsibmFrZWQiLCAwLCAwLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGF2cjMyX2hhbmRsZV9mbmRlY2xfYXR0cmlidXRlfSwKKysgIHsicm13X2FkZHJlc3NhYmxlIiwgMCwgMCwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBOVUxMfSwKKysgIHtOVUxMLCAwLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBOVUxMfQorK307CisrCisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBjb25zdCBjaGFyICpjb25zdCBhcmc7CisrICBjb25zdCB1bnNpZ25lZCBsb25nIHJldHVybl92YWx1ZTsKKyt9CisraXNyX2F0dHJpYnV0ZV9hcmc7CisrCisrc3RhdGljIGNvbnN0IGlzcl9hdHRyaWJ1dGVfYXJnIGlzcl9hdHRyaWJ1dGVfYXJnc1tdID0geworKyAgeyJGVUxMIiwgQVZSMzJfRlRfSVNSX0ZVTEx9LAorKyAgeyJmdWxsIiwgQVZSMzJfRlRfSVNSX0ZVTEx9LAorKyAgeyJIQUxGIiwgQVZSMzJfRlRfSVNSX0hBTEZ9LAorKyAgeyJoYWxmIiwgQVZSMzJfRlRfSVNSX0hBTEZ9LAorKyAgeyJOT05FIiwgQVZSMzJfRlRfSVNSX05PTkV9LAorKyAgeyJub25lIiwgQVZSMzJfRlRfSVNSX05PTkV9LAorKyAgeyJVTkRFRiIsIEFWUjMyX0ZUX0lTUl9OT05FfSwKKysgIHsidW5kZWYiLCBBVlIzMl9GVF9JU1JfTk9ORX0sCisrICB7IlNXSSIsIEFWUjMyX0ZUX0lTUl9OT05FfSwKKysgIHsic3dpIiwgQVZSMzJfRlRfSVNSX05PTkV9LAorKyAge05VTEwsIEFWUjMyX0ZUX0lTUl9OT05FfQorK307CisrCisrLyogUmV0dXJucyB0aGUgKGludGVycnVwdCkgZnVuY3Rpb24gdHlwZSBvZiB0aGUgY3VycmVudAorKyAgIGZ1bmN0aW9uLCBvciBBVlIzMl9GVF9VTktOT1dOIGlmIHRoZSB0eXBlIGNhbm5vdCBiZSBkZXRlcm1pbmVkLiAgKi8KKysKKytzdGF0aWMgdW5zaWduZWQgbG9uZworK2F2cjMyX2lzcl92YWx1ZSAodHJlZSBhcmd1bWVudCkKKyt7CisrICBjb25zdCBpc3JfYXR0cmlidXRlX2FyZyAqcHRyOworKyAgY29uc3QgY2hhciAqYXJnOworKworKyAgLyogTm8gYXJndW1lbnQgLSBkZWZhdWx0IHRvIElTUl9OT05FLiAgKi8KKysgIGlmIChhcmd1bWVudCA9PSBOVUxMX1RSRUUpCisrICAgIHJldHVybiBBVlIzMl9GVF9JU1JfTk9ORTsKKysKKysgIC8qIEdldCB0aGUgdmFsdWUgb2YgdGhlIGFyZ3VtZW50LiAgKi8KKysgIGlmIChUUkVFX1ZBTFVFIChhcmd1bWVudCkgPT0gTlVMTF9UUkVFCisrICAgICAgfHwgVFJFRV9DT0RFIChUUkVFX1ZBTFVFIChhcmd1bWVudCkpICE9IFNUUklOR19DU1QpCisrICAgIHJldHVybiBBVlIzMl9GVF9VTktOT1dOOworKworKyAgYXJnID0gVFJFRV9TVFJJTkdfUE9JTlRFUiAoVFJFRV9WQUxVRSAoYXJndW1lbnQpKTsKKysKKysgIC8qIENoZWNrIGl0IGFnYWluc3QgdGhlIGxpc3Qgb2Yga25vd24gYXJndW1lbnRzLiAgKi8KKysgIGZvciAocHRyID0gaXNyX2F0dHJpYnV0ZV9hcmdzOyBwdHItPmFyZyAhPSBOVUxMOyBwdHIrKykKKysgICAgaWYgKHN0cmVxIChhcmcsIHB0ci0+YXJnKSkKKysgICAgICByZXR1cm4gcHRyLT5yZXR1cm5fdmFsdWU7CisrCisrICAvKiBBbiB1bnJlY29nbml6ZWQgaW50ZXJydXB0IHR5cGUuICAqLworKyAgcmV0dXJuIEFWUjMyX0ZUX1VOS05PV047CisrfQorKworKworKworKy8qCisrVGhlc2UgaG9va3Mgc3BlY2lmeSBhc3NlbWJseSBkaXJlY3RpdmVzIGZvciBjcmVhdGluZyBjZXJ0YWluIGtpbmRzCisrb2YgaW50ZWdlciBvYmplY3QuICBUaGUgVEFSR0VUX0FTTV9CWVRFX09QIGRpcmVjdGl2ZSBjcmVhdGVzIGEKKytieXRlLXNpemVkIG9iamVjdCwgdGhlIFRBUkdFVF9BU01fQUxJR05FRF9ISV9PUCBvbmUgY3JlYXRlcyBhbgorK2FsaWduZWQgdHdvLWJ5dGUgb2JqZWN0LCBhbmQgc28gb24uICBBbnkgb2YgdGhlIGhvb2tzIG1heSBiZQorK05VTEwsIGluZGljYXRpbmcgdGhhdCBubyBzdWl0YWJsZSBkaXJlY3RpdmUgaXMgYXZhaWxhYmxlLgorKworK1RoZSBjb21waWxlciB3aWxsIHByaW50IHRoZXNlIHN0cmluZ3MgYXQgdGhlIHN0YXJ0IG9mIGEgbmV3IGxpbmUsCisrZm9sbG93ZWQgaW1tZWRpYXRlbHkgYnkgdGhlIG9iamVjdCdzIGluaXRpYWwgdmFsdWUuICBJbiBtb3N0IGNhc2VzLAorK3RoZSBzdHJpbmcgc2hvdWxkIGNvbnRhaW4gYSB0YWIsIGEgcHNldWRvLW9wLCBhbmQgdGhlbiBhbm90aGVyIHRhYi4KKysqLworKyN1bmRlZiAgVEFSR0VUX0FTTV9CWVRFX09QCisrI2RlZmluZSBUQVJHRVRfQVNNX0JZVEVfT1AgIlx0LmJ5dGVcdCIKKysjdW5kZWYgIFRBUkdFVF9BU01fQUxJR05FRF9ISV9PUAorKyNkZWZpbmUgVEFSR0VUX0FTTV9BTElHTkVEX0hJX09QICJcdC5hbGlnbiAxXG5cdC5zaG9ydFx0IgorKyN1bmRlZiAgVEFSR0VUX0FTTV9BTElHTkVEX1NJX09QCisrI2RlZmluZSBUQVJHRVRfQVNNX0FMSUdORURfU0lfT1AgIlx0LmFsaWduIDJcblx0LmludFx0IgorKyN1bmRlZiAgVEFSR0VUX0FTTV9BTElHTkVEX0RJX09QCisrI2RlZmluZSBUQVJHRVRfQVNNX0FMSUdORURfRElfT1AgTlVMTAorKyN1bmRlZiAgVEFSR0VUX0FTTV9BTElHTkVEX1RJX09QCisrI2RlZmluZSBUQVJHRVRfQVNNX0FMSUdORURfVElfT1AgTlVMTAorKyN1bmRlZiAgVEFSR0VUX0FTTV9VTkFMSUdORURfSElfT1AKKysjZGVmaW5lIFRBUkdFVF9BU01fVU5BTElHTkVEX0hJX09QICJcdC5zaG9ydFx0IgorKyN1bmRlZiAgVEFSR0VUX0FTTV9VTkFMSUdORURfU0lfT1AKKysjZGVmaW5lIFRBUkdFVF9BU01fVU5BTElHTkVEX1NJX09QICJcdC5pbnRcdCIKKysjdW5kZWYgIFRBUkdFVF9BU01fVU5BTElHTkVEX0RJX09QCisrI2RlZmluZSBUQVJHRVRfQVNNX1VOQUxJR05FRF9ESV9PUCBOVUxMCisrI3VuZGVmICBUQVJHRVRfQVNNX1VOQUxJR05FRF9USV9PUAorKyNkZWZpbmUgVEFSR0VUX0FTTV9VTkFMSUdORURfVElfT1AgTlVMTAorKworKyN1bmRlZiBUQVJHRVRfQVNNX09VVFBVVF9NSV9USFVOSworKyNkZWZpbmUgVEFSR0VUX0FTTV9PVVRQVVRfTUlfVEhVTksgYXZyMzJfb3V0cHV0X21pX3RodW5rCisrCisrI3VuZGVmIFRBUkdFVF9BU01fQ0FOX09VVFBVVF9NSV9USFVOSworKyNkZWZpbmUgVEFSR0VUX0FTTV9DQU5fT1VUUFVUX01JX1RIVU5LIGhvb2tfYm9vbF90cmVlX2h3aV9od2lfdHJlZV90cnVlCisrCisrc3RhdGljIHZvaWQKKythdnIzMl9vdXRwdXRfbWlfdGh1bmsgKEZJTEUgKiBmaWxlLAorKyAgICB0cmVlIHRodW5rIEFUVFJJQlVURV9VTlVTRUQsCisrICAgIEhPU1RfV0lERV9JTlQgZGVsdGEsCisrICAgIEhPU1RfV0lERV9JTlQgdmNhbGxfb2Zmc2V0LCB0cmVlIGZ1bmN0aW9uKQorKyAgeworKyAgICBpbnQgbWlfZGVsdGEgPSBkZWx0YTsKKysgICAgaW50IHRoaXNfcmVnbm8gPQorKyAgICAgIChhZ2dyZWdhdGVfdmFsdWVfcCAoVFJFRV9UWVBFIChUUkVFX1RZUEUgKGZ1bmN0aW9uKSksIGZ1bmN0aW9uKSA/CisrICAgICAgIElOVEVSTkFMX1JFR05VTSAoMTEpIDogSU5URVJOQUxfUkVHTlVNICgxMikpOworKworKworKyAgICBpZiAoIWF2cjMyX2NvbnN0X29rX2Zvcl9jb25zdHJhaW50X3AgKG1pX2RlbHRhLCAnSScsICJJczIxIikKKysgICAgICAgIHx8IHZjYWxsX29mZnNldCkKKysgICAgICB7CisrICAgICAgICBmcHV0cyAoIlx0cHVzaG1cdGxyXG4iLCBmaWxlKTsKKysgICAgICB9CisrCisrCisrICAgIGlmIChtaV9kZWx0YSAhPSAwKQorKyAgICAgIHsKKysgICAgICAgIGlmIChhdnIzMl9jb25zdF9va19mb3JfY29uc3RyYWludF9wIChtaV9kZWx0YSwgJ0knLCAiSXMyMSIpKQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgZnByaW50ZiAoZmlsZSwgIlx0c3ViXHQlcywgJWRcbiIsIHJlZ19uYW1lc1t0aGlzX3JlZ25vXSwgLW1pX2RlbHRhKTsKKysgICAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgLyogSW1tZWRpYXRlIGlzIGxhcmdlciB0aGFuIGsyMSB3ZSBtdXN0IG1ha2UgdXMgYSB0ZW1wIHJlZ2lzdGVyIGJ5CisrCSAgICAgcHVzaGluZyBhIHJlZ2lzdGVyIHRvIHRoZSBzdGFjay4gKi8KKysgICAgICAgICAgICBmcHJpbnRmIChmaWxlLCAiXHRtb3ZcdGxyLCBsbyglZClcbiIsIG1pX2RlbHRhKTsKKysgICAgICAgICAgICBmcHJpbnRmIChmaWxlLCAiXHRvcmhcdGxyLCBoaSglZClcbiIsIG1pX2RlbHRhKTsKKysgICAgICAgICAgICBmcHJpbnRmIChmaWxlLCAiXHRhZGRcdCVzLCBsclxuIiwgcmVnX25hbWVzW3RoaXNfcmVnbm9dKTsKKysgICAgICAgICAgfQorKyAgICAgIH0KKysKKysKKysgICAgaWYgKHZjYWxsX29mZnNldCAhPSAwKQorKyAgICAgIHsKKysgICAgICAgIGZwcmludGYgKGZpbGUsICJcdGxkLndcdGxyLCAlc1swXVxuIiwgcmVnX25hbWVzW3RoaXNfcmVnbm9dKTsKKysgICAgICAgIGZwcmludGYgKGZpbGUsICJcdGxkLndcdGxyLCBsclslaV1cbiIsIChpbnQpIHZjYWxsX29mZnNldCk7CisrICAgICAgICBmcHJpbnRmIChmaWxlLCAiXHRhZGRcdCVzLCBsclxuIiwgcmVnX25hbWVzW3RoaXNfcmVnbm9dKTsKKysgICAgICB9CisrCisrCisrICAgIGlmICghYXZyMzJfY29uc3Rfb2tfZm9yX2NvbnN0cmFpbnRfcCAobWlfZGVsdGEsICdJJywgIklzMjEiKQorKyAgICAgICAgfHwgdmNhbGxfb2Zmc2V0KQorKyAgICAgIHsKKysgICAgICAgIGZwdXRzICgiXHRwb3BtXHRsclxuIiwgZmlsZSk7CisrICAgICAgfQorKworKyAgICAvKiBKdW1wIHRvIHRoZSBmdW5jdGlvbi4gV2UgYXNzdW1lIHRoYXQgd2UgY2FuIHVzZSBhbiByam1wIHNpbmNlIHRoZQorKyAgICAgICBmdW5jdGlvbiB0byBqdW1wIHRvIGlzIGxvY2FsIGFuZCBwcm9iYWJseSBub3QgdG9vIGZhciBhd2F5IGZyb20KKysgICAgICAgdGhlIHRodW5rLiBJZiB0aGlzIGFzc3VtcHRpb24gcHJvdmVzIHRvIGJlIHdyb25nIHdlIGNvdWxkIGltcGxlbWVudAorKyAgICAgICB0aGlzIGp1bXAgYnkgY2FsY3VsYXRpbmcgdGhlIG9mZnNldCBiZXR3ZWVuIHRoZSBqdW1wIHNvdXJjZSBhbmQgZGVzdGluYXRpb24KKysgICAgICAgYW5kIHB1dCB0aGlzIGluIHRoZSBjb25zdGFudCBwb29sIGFuZCB0aGVuIHBlcmZvcm0gYW4gYWRkIHRvIHBjLgorKyAgICAgICBUaGlzIHdvdWxkIGFsc28gYmUgbGVnaXRpbWF0ZSBQSUMgY29kZS4gQnV0IGZvciBub3cgd2UgaG9wZSB0aGF0IGFuIHJqbXAKKysgICAgICAgd2lsbCBiZSBzdWZmaWNpZW50Li4uCisrICAgICovCisrICAgIGZwdXRzICgiXHRyam1wXHQiLCBmaWxlKTsKKysgICAgYXNzZW1ibGVfbmFtZSAoZmlsZSwgWFNUUiAoWEVYUCAoREVDTF9SVEwgKGZ1bmN0aW9uKSwgMCksIDApKTsKKysgICAgZnB1dGMgKCdcbicsIGZpbGUpOworKyAgfQorKworKworKy8qIEltcGxlbWVudHMgdGFyZ2V0IGhvb2sgdmVjdG9yX21vZGVfc3VwcG9ydGVkLiAgKi8KKytib29sCisrYXZyMzJfdmVjdG9yX21vZGVfc3VwcG9ydGVkIChlbnVtIG1hY2hpbmVfbW9kZSBtb2RlKQorK3sKKysgIGlmICgobW9kZSA9PSBWMkhJbW9kZSkgfHwgKG1vZGUgPT0gVjRRSW1vZGUpKQorKyAgICByZXR1cm4gdHJ1ZTsKKysKKysgIHJldHVybiBmYWxzZTsKKyt9CisrCisrCisrI3VuZGVmIFRBUkdFVF9JTklUX0xJQkZVTkNTCisrI2RlZmluZSBUQVJHRVRfSU5JVF9MSUJGVU5DUyBhdnIzMl9pbml0X2xpYmZ1bmNzCisrCisrI3VuZGVmICBUQVJHRVRfSU5JVF9CVUlMVElOUworKyNkZWZpbmUgVEFSR0VUX0lOSVRfQlVJTFRJTlMgYXZyMzJfaW5pdF9idWlsdGlucworKworKyN1bmRlZiAgVEFSR0VUX0VYUEFORF9CVUlMVElOCisrI2RlZmluZSBUQVJHRVRfRVhQQU5EX0JVSUxUSU4gYXZyMzJfZXhwYW5kX2J1aWx0aW4KKysKKyt0cmVlIGludF9mdHlwZV9pbnQsIGludF9mdHlwZV92b2lkLCBzaG9ydF9mdHlwZV9zaG9ydCwgdm9pZF9mdHlwZV9pbnRfaW50LAorKyAgdm9pZF9mdHlwZV9wdHJfaW50OworK3RyZWUgdm9pZF9mdHlwZV9pbnQsIHZvaWRfZnR5cGVfdm9pZCwgaW50X2Z0eXBlX3B0cl9pbnQ7CisrdHJlZSBzaG9ydF9mdHlwZV9zaG9ydCwgaW50X2Z0eXBlX2ludF9zaG9ydCwgaW50X2Z0eXBlX3Nob3J0X3Nob3J0LAorKyAgc2hvcnRfZnR5cGVfc2hvcnRfc2hvcnQ7CisrdHJlZSBpbnRfZnR5cGVfaW50X2ludCwgbG9uZ2xvbmdfZnR5cGVfaW50X3Nob3J0LCBsb25nbG9uZ19mdHlwZV9zaG9ydF9zaG9ydDsKKyt0cmVlIHZvaWRfZnR5cGVfaW50X2ludF9pbnRfaW50X2ludCwgdm9pZF9mdHlwZV9pbnRfaW50X2ludDsKKyt0cmVlIGxvbmdsb25nX2Z0eXBlX2ludF9pbnQsIHZvaWRfZnR5cGVfaW50X2ludF9sb25nbG9uZzsKKyt0cmVlIGludF9mdHlwZV9pbnRfaW50X2ludCwgbG9uZ2xvbmdfZnR5cGVfbG9uZ2xvbmdfaW50X3Nob3J0OworK3RyZWUgbG9uZ2xvbmdfZnR5cGVfbG9uZ2xvbmdfc2hvcnRfc2hvcnQsIGludF9mdHlwZV9pbnRfc2hvcnRfc2hvcnQ7CisrCisrI2RlZmluZSBkZWZfYnVpbHRpbihOQU1FLCBUWVBFLCBDT0RFKQkJCQkJXAorKyAgbGFuZ19ob29rcy5idWlsdGluX2Z1bmN0aW9uICgoTkFNRSksIChUWVBFKSwgKENPREUpLAkJCVwKKysJCSAgCSAgICAgICBCVUlMVF9JTl9NRCwgTlVMTCwgTlVMTF9UUkVFKQorKworKyNkZWZpbmUgZGVmX21idWlsdGluKE1BU0ssIE5BTUUsIFRZUEUsIENPREUpCQkJCVwKKysgIGRvCQkJCQkJCQkJXAorKyAgICB7CQkJCQkJCQkJXAorKyAgICAgIGlmICgoTUFTSykpCQkJCQkJCVwKKysJbGFuZ19ob29rcy5idWlsdGluX2Z1bmN0aW9uICgoTkFNRSksIChUWVBFKSwgKENPREUpLAkJXAorKwkJCQkgICAgIEJVSUxUX0lOX01ELCBOVUxMLCBOVUxMX1RSRUUpOwlcCisrICAgIH0JCQkJCQkJCQlcCisrICB3aGlsZSAoMCkKKysKKytzdHJ1Y3QgYnVpbHRpbl9kZXNjcmlwdGlvbgorK3sKKysgIGNvbnN0IHVuc2lnbmVkIGludCBtYXNrOworKyAgY29uc3QgZW51bSBpbnNuX2NvZGUgaWNvZGU7CisrICBjb25zdCBjaGFyICpjb25zdCBuYW1lOworKyAgY29uc3QgaW50IGNvZGU7CisrICBjb25zdCBlbnVtIHJ0eF9jb2RlIGNvbXBhcmlzb247CisrICBjb25zdCB1bnNpZ25lZCBpbnQgZmxhZzsKKysgIGNvbnN0IHRyZWUgKmZ0eXBlOworK307CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBidWlsdGluX2Rlc2NyaXB0aW9uIGJkZXNjXzJhcmdbXSA9IHsKKysjZGVmaW5lIERTUF9CVUlMVElOKGNvZGUsIGJ1aWx0aW4sIGZ0eXBlKSBcCisrICB7IDEsIENPREVfRk9SXyMjY29kZSwgIl9fYnVpbHRpbl8iICNjb2RlICwgXAorKyAgICBBVlIzMl9CVUlMVElOXyMjYnVpbHRpbiwgMCwgMCwgZnR5cGUgfQorKworKyAgRFNQX0JVSUxUSU4gKG11bHNhdGhoX2gsIE1VTFNBVEhIX0gsICZzaG9ydF9mdHlwZV9zaG9ydF9zaG9ydCksCisrICBEU1BfQlVJTFRJTiAobXVsc2F0aGhfdywgTVVMU0FUSEhfVywgJmludF9mdHlwZV9zaG9ydF9zaG9ydCksCisrICBEU1BfQlVJTFRJTiAobXVsc2F0cm5kaGhfaCwgTVVMU0FUUk5ESEhfSCwgJnNob3J0X2Z0eXBlX3Nob3J0X3Nob3J0KSwKKysgIERTUF9CVUlMVElOIChtdWxzYXRybmR3aF93LCBNVUxTQVRSTkRXSF9XLCAmaW50X2Z0eXBlX2ludF9zaG9ydCksCisrICBEU1BfQlVJTFRJTiAobXVsc2F0d2hfdywgTVVMU0FUV0hfVywgJmludF9mdHlwZV9pbnRfc2hvcnQpLAorKyAgRFNQX0JVSUxUSU4gKHNhdGFkZF9oLCBTQVRBRERfSCwgJnNob3J0X2Z0eXBlX3Nob3J0X3Nob3J0KSwKKysgIERTUF9CVUlMVElOIChzYXRzdWJfaCwgU0FUU1VCX0gsICZzaG9ydF9mdHlwZV9zaG9ydF9zaG9ydCksCisrICBEU1BfQlVJTFRJTiAoc2F0YWRkX3csIFNBVEFERF9XLCAmaW50X2Z0eXBlX2ludF9pbnQpLAorKyAgRFNQX0JVSUxUSU4gKHNhdHN1Yl93LCBTQVRTVUJfVywgJmludF9mdHlwZV9pbnRfaW50KSwKKysgIERTUF9CVUlMVElOIChtdWx3aF9kLCBNVUxXSF9ELCAmbG9uZ2xvbmdfZnR5cGVfaW50X3Nob3J0KSwKKysgIERTUF9CVUlMVElOIChtdWxud2hfZCwgTVVMTldIX0QsICZsb25nbG9uZ19mdHlwZV9pbnRfc2hvcnQpCisrfTsKKysKKysKKyt2b2lkCisrYXZyMzJfaW5pdF9idWlsdGlucyAodm9pZCkKKyt7CisrICB1bnNpZ25lZCBpbnQgaTsKKysgIGNvbnN0IHN0cnVjdCBidWlsdGluX2Rlc2NyaXB0aW9uICpkOworKyAgdHJlZSBlbmRsaW5rID0gdm9pZF9saXN0X25vZGU7CisrICB0cmVlIGludF9lbmRsaW5rID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIGludGVnZXJfdHlwZV9ub2RlLCBlbmRsaW5rKTsKKysgIHRyZWUgbG9uZ2xvbmdfZW5kbGluayA9CisrICAgIHRyZWVfY29ucyAoTlVMTF9UUkVFLCBsb25nX2xvbmdfaW50ZWdlcl90eXBlX25vZGUsIGVuZGxpbmspOworKyAgdHJlZSBzaG9ydF9lbmRsaW5rID0KKysgICAgdHJlZV9jb25zIChOVUxMX1RSRUUsIHNob3J0X2ludGVnZXJfdHlwZV9ub2RlLCBlbmRsaW5rKTsKKysgIHRyZWUgdm9pZF9lbmRsaW5rID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIHZvaWRfdHlwZV9ub2RlLCBlbmRsaW5rKTsKKysKKysgIC8qIGludCBmdW5jIChpbnQpICovCisrICBpbnRfZnR5cGVfaW50ID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAoaW50ZWdlcl90eXBlX25vZGUsIGludF9lbmRsaW5rKTsKKysKKysgIC8qIHNob3J0IGZ1bmMgKHNob3J0KSAqLworKyAgc2hvcnRfZnR5cGVfc2hvcnQKKysgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlIChzaG9ydF9pbnRlZ2VyX3R5cGVfbm9kZSwgc2hvcnRfZW5kbGluayk7CisrCisrICAvKiBzaG9ydCBmdW5jIChzaG9ydCwgc2hvcnQpICovCisrICBzaG9ydF9mdHlwZV9zaG9ydF9zaG9ydAorKyAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKHNob3J0X2ludGVnZXJfdHlwZV9ub2RlLAorKwkJCSAgIHRyZWVfY29ucyAoTlVMTF9UUkVFLCBzaG9ydF9pbnRlZ2VyX3R5cGVfbm9kZSwKKysJCQkJICAgICAgc2hvcnRfZW5kbGluaykpOworKworKyAgLyogbG9uZyBsb25nIGZ1bmMgKGxvbmcgbG9uZywgc2hvcnQsIHNob3J0KSAqLworKyAgbG9uZ2xvbmdfZnR5cGVfbG9uZ2xvbmdfc2hvcnRfc2hvcnQKKysgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlIChsb25nX2xvbmdfaW50ZWdlcl90eXBlX25vZGUsCisrCQkJICAgdHJlZV9jb25zIChOVUxMX1RSRUUsIGxvbmdfbG9uZ19pbnRlZ2VyX3R5cGVfbm9kZSwKKysJCQkJICAgICAgdHJlZV9jb25zIChOVUxMX1RSRUUsCisrCQkJCQkJIHNob3J0X2ludGVnZXJfdHlwZV9ub2RlLAorKwkJCQkJCSBzaG9ydF9lbmRsaW5rKSkpOworKworKyAgLyogbG9uZyBsb25nIGZ1bmMgKHNob3J0LCBzaG9ydCkgKi8KKysgIGxvbmdsb25nX2Z0eXBlX3Nob3J0X3Nob3J0CisrICAgID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAobG9uZ19sb25nX2ludGVnZXJfdHlwZV9ub2RlLAorKwkJCSAgIHRyZWVfY29ucyAoTlVMTF9UUkVFLCBzaG9ydF9pbnRlZ2VyX3R5cGVfbm9kZSwKKysJCQkJICAgICAgc2hvcnRfZW5kbGluaykpOworKworKyAgLyogaW50IGZ1bmMgKGludCwgaW50KSAqLworKyAgaW50X2Z0eXBlX2ludF9pbnQKKysgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlIChpbnRlZ2VyX3R5cGVfbm9kZSwKKysJCQkgICB0cmVlX2NvbnMgKE5VTExfVFJFRSwgaW50ZWdlcl90eXBlX25vZGUsCisrCQkJCSAgICAgIGludF9lbmRsaW5rKSk7CisrCisrICAvKiBsb25nIGxvbmcgZnVuYyAoaW50LCBpbnQpICovCisrICBsb25nbG9uZ19mdHlwZV9pbnRfaW50CisrICAgID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAobG9uZ19sb25nX2ludGVnZXJfdHlwZV9ub2RlLAorKwkJCSAgIHRyZWVfY29ucyAoTlVMTF9UUkVFLCBpbnRlZ2VyX3R5cGVfbm9kZSwKKysJCQkJICAgICAgaW50X2VuZGxpbmspKTsKKysKKysgIC8qIGxvbmcgbG9uZyBpbnQgZnVuYyAobG9uZyBsb25nLCBpbnQsIHNob3J0KSAqLworKyAgbG9uZ2xvbmdfZnR5cGVfbG9uZ2xvbmdfaW50X3Nob3J0CisrICAgID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAobG9uZ19sb25nX2ludGVnZXJfdHlwZV9ub2RlLAorKwkJCSAgIHRyZWVfY29ucyAoTlVMTF9UUkVFLCBsb25nX2xvbmdfaW50ZWdlcl90eXBlX25vZGUsCisrCQkJCSAgICAgIHRyZWVfY29ucyAoTlVMTF9UUkVFLCBpbnRlZ2VyX3R5cGVfbm9kZSwKKysJCQkJCQkgc2hvcnRfZW5kbGluaykpKTsKKysKKysgIC8qIGxvbmcgbG9uZyBpbnQgZnVuYyAoaW50LCBzaG9ydCkgKi8KKysgIGxvbmdsb25nX2Z0eXBlX2ludF9zaG9ydAorKyAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKGxvbmdfbG9uZ19pbnRlZ2VyX3R5cGVfbm9kZSwKKysJCQkgICB0cmVlX2NvbnMgKE5VTExfVFJFRSwgaW50ZWdlcl90eXBlX25vZGUsCisrCQkJCSAgICAgIHNob3J0X2VuZGxpbmspKTsKKysKKysgIC8qIGludCBmdW5jIChpbnQsIHNob3J0LCBzaG9ydCkgKi8KKysgIGludF9mdHlwZV9pbnRfc2hvcnRfc2hvcnQKKysgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlIChpbnRlZ2VyX3R5cGVfbm9kZSwKKysJCQkgICB0cmVlX2NvbnMgKE5VTExfVFJFRSwgaW50ZWdlcl90eXBlX25vZGUsCisrCQkJCSAgICAgIHRyZWVfY29ucyAoTlVMTF9UUkVFLAorKwkJCQkJCSBzaG9ydF9pbnRlZ2VyX3R5cGVfbm9kZSwKKysJCQkJCQkgc2hvcnRfZW5kbGluaykpKTsKKysKKysgIC8qIGludCBmdW5jIChzaG9ydCwgc2hvcnQpICovCisrICBpbnRfZnR5cGVfc2hvcnRfc2hvcnQKKysgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlIChpbnRlZ2VyX3R5cGVfbm9kZSwKKysJCQkgICB0cmVlX2NvbnMgKE5VTExfVFJFRSwgc2hvcnRfaW50ZWdlcl90eXBlX25vZGUsCisrCQkJCSAgICAgIHNob3J0X2VuZGxpbmspKTsKKysKKysgIC8qIGludCBmdW5jIChpbnQsIHNob3J0KSAqLworKyAgaW50X2Z0eXBlX2ludF9zaG9ydAorKyAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKGludGVnZXJfdHlwZV9ub2RlLAorKwkJCSAgIHRyZWVfY29ucyAoTlVMTF9UUkVFLCBpbnRlZ2VyX3R5cGVfbm9kZSwKKysJCQkJICAgICAgc2hvcnRfZW5kbGluaykpOworKworKyAgLyogdm9pZCBmdW5jIChpbnQsIGludCkgKi8KKysgIHZvaWRfZnR5cGVfaW50X2ludAorKyAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKHZvaWRfdHlwZV9ub2RlLAorKwkJCSAgIHRyZWVfY29ucyAoTlVMTF9UUkVFLCBpbnRlZ2VyX3R5cGVfbm9kZSwKKysJCQkJICAgICAgaW50X2VuZGxpbmspKTsKKysKKysgIC8qIHZvaWQgZnVuYyAoaW50LCBpbnQsIGludCkgKi8KKysgIHZvaWRfZnR5cGVfaW50X2ludF9pbnQKKysgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlICh2b2lkX3R5cGVfbm9kZSwKKysJCQkgICB0cmVlX2NvbnMgKE5VTExfVFJFRSwgaW50ZWdlcl90eXBlX25vZGUsCisrCQkJCSAgICAgIHRyZWVfY29ucyAoTlVMTF9UUkVFLCBpbnRlZ2VyX3R5cGVfbm9kZSwKKysJCQkJCQkgaW50X2VuZGxpbmspKSk7CisrCisrICAvKiB2b2lkIGZ1bmMgKGludCwgaW50LCBsb25nIGxvbmcpICovCisrICB2b2lkX2Z0eXBlX2ludF9pbnRfbG9uZ2xvbmcKKysgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlICh2b2lkX3R5cGVfbm9kZSwKKysJCQkgICB0cmVlX2NvbnMgKE5VTExfVFJFRSwgaW50ZWdlcl90eXBlX25vZGUsCisrCQkJCSAgICAgIHRyZWVfY29ucyAoTlVMTF9UUkVFLCBpbnRlZ2VyX3R5cGVfbm9kZSwKKysJCQkJCQkgbG9uZ2xvbmdfZW5kbGluaykpKTsKKysKKysgIC8qIHZvaWQgZnVuYyAoaW50LCBpbnQsIGludCwgaW50LCBpbnQpICovCisrICB2b2lkX2Z0eXBlX2ludF9pbnRfaW50X2ludF9pbnQKKysgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlICh2b2lkX3R5cGVfbm9kZSwKKysJCQkgICB0cmVlX2NvbnMgKE5VTExfVFJFRSwgaW50ZWdlcl90eXBlX25vZGUsCisrCQkJCSAgICAgIHRyZWVfY29ucyAoTlVMTF9UUkVFLCBpbnRlZ2VyX3R5cGVfbm9kZSwKKysJCQkJCQkgdHJlZV9jb25zIChOVUxMX1RSRUUsCisrCQkJCQkJCSAgICBpbnRlZ2VyX3R5cGVfbm9kZSwKKysJCQkJCQkJICAgIHRyZWVfY29ucworKwkJCQkJCQkgICAgKE5VTExfVFJFRSwKKysJCQkJCQkJICAgICBpbnRlZ2VyX3R5cGVfbm9kZSwKKysJCQkJCQkJICAgICBpbnRfZW5kbGluaykpKSkpOworKworKyAgLyogdm9pZCBmdW5jICh2b2lkICosIGludCkgKi8KKysgIHZvaWRfZnR5cGVfcHRyX2ludAorKyAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKHZvaWRfdHlwZV9ub2RlLAorKwkJCSAgIHRyZWVfY29ucyAoTlVMTF9UUkVFLCBwdHJfdHlwZV9ub2RlLCBpbnRfZW5kbGluaykpOworKworKyAgLyogdm9pZCBmdW5jIChpbnQpICovCisrICB2b2lkX2Z0eXBlX2ludCA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKHZvaWRfdHlwZV9ub2RlLCBpbnRfZW5kbGluayk7CisrCisrICAvKiB2b2lkIGZ1bmMgKHZvaWQpICovCisrICB2b2lkX2Z0eXBlX3ZvaWQgPSBidWlsZF9mdW5jdGlvbl90eXBlICh2b2lkX3R5cGVfbm9kZSwgdm9pZF9lbmRsaW5rKTsKKysKKysgIC8qIGludCBmdW5jICh2b2lkKSAqLworKyAgaW50X2Z0eXBlX3ZvaWQgPSBidWlsZF9mdW5jdGlvbl90eXBlIChpbnRlZ2VyX3R5cGVfbm9kZSwgdm9pZF9lbmRsaW5rKTsKKysKKysgIC8qIGludCBmdW5jICh2b2lkICosIGludCkgKi8KKysgIGludF9mdHlwZV9wdHJfaW50CisrICAgID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAoaW50ZWdlcl90eXBlX25vZGUsCisrCQkJICAgdHJlZV9jb25zIChOVUxMX1RSRUUsIHB0cl90eXBlX25vZGUsIGludF9lbmRsaW5rKSk7CisrCisrICAvKiBpbnQgZnVuYyAoaW50LCBpbnQsIGludCkgKi8KKysgIGludF9mdHlwZV9pbnRfaW50X2ludAorKyAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKGludGVnZXJfdHlwZV9ub2RlLAorKwkJCSAgIHRyZWVfY29ucyAoTlVMTF9UUkVFLCBpbnRlZ2VyX3R5cGVfbm9kZSwKKysJCQkJICAgICAgdHJlZV9jb25zIChOVUxMX1RSRUUsIGludGVnZXJfdHlwZV9ub2RlLAorKwkJCQkJCSBpbnRfZW5kbGluaykpKTsKKysKKysgIC8qIEluaXRpYWxpemUgYXZyMzIgYnVpbHRpbnMuICAqLworKyAgZGVmX2J1aWx0aW4gKCJfX2J1aWx0aW5fbWZzciIsIGludF9mdHlwZV9pbnQsIEFWUjMyX0JVSUxUSU5fTUZTUik7CisrICBkZWZfYnVpbHRpbiAoIl9fYnVpbHRpbl9tdHNyIiwgdm9pZF9mdHlwZV9pbnRfaW50LCBBVlIzMl9CVUlMVElOX01UU1IpOworKyAgZGVmX2J1aWx0aW4gKCJfX2J1aWx0aW5fbWZkciIsIGludF9mdHlwZV9pbnQsIEFWUjMyX0JVSUxUSU5fTUZEUik7CisrICBkZWZfYnVpbHRpbiAoIl9fYnVpbHRpbl9tdGRyIiwgdm9pZF9mdHlwZV9pbnRfaW50LCBBVlIzMl9CVUlMVElOX01URFIpOworKyAgZGVmX2J1aWx0aW4gKCJfX2J1aWx0aW5fY2FjaGUiLCB2b2lkX2Z0eXBlX3B0cl9pbnQsIEFWUjMyX0JVSUxUSU5fQ0FDSEUpOworKyAgZGVmX2J1aWx0aW4gKCJfX2J1aWx0aW5fc3luYyIsIHZvaWRfZnR5cGVfaW50LCBBVlIzMl9CVUlMVElOX1NZTkMpOworKyAgZGVmX2J1aWx0aW4gKCJfX2J1aWx0aW5fc3NyZiIsIHZvaWRfZnR5cGVfaW50LCBBVlIzMl9CVUlMVElOX1NTUkYpOworKyAgZGVmX2J1aWx0aW4gKCJfX2J1aWx0aW5fY3NyZiIsIHZvaWRfZnR5cGVfaW50LCBBVlIzMl9CVUlMVElOX0NTUkYpOworKyAgZGVmX2J1aWx0aW4gKCJfX2J1aWx0aW5fdGxiciIsIHZvaWRfZnR5cGVfdm9pZCwgQVZSMzJfQlVJTFRJTl9UTEJSKTsKKysgIGRlZl9idWlsdGluICgiX19idWlsdGluX3RsYnMiLCB2b2lkX2Z0eXBlX3ZvaWQsIEFWUjMyX0JVSUxUSU5fVExCUyk7CisrICBkZWZfYnVpbHRpbiAoIl9fYnVpbHRpbl90bGJ3Iiwgdm9pZF9mdHlwZV92b2lkLCBBVlIzMl9CVUlMVElOX1RMQlcpOworKyAgZGVmX2J1aWx0aW4gKCJfX2J1aWx0aW5fYnJlYWtwb2ludCIsIHZvaWRfZnR5cGVfdm9pZCwKKysJICAgICAgIEFWUjMyX0JVSUxUSU5fQlJFQUtQT0lOVCk7CisrICBkZWZfYnVpbHRpbiAoIl9fYnVpbHRpbl94Y2hnIiwgaW50X2Z0eXBlX3B0cl9pbnQsIEFWUjMyX0JVSUxUSU5fWENIRyk7CisrICBkZWZfYnVpbHRpbiAoIl9fYnVpbHRpbl9sZHhpIiwgaW50X2Z0eXBlX3B0cl9pbnQsIEFWUjMyX0JVSUxUSU5fTERYSSk7CisrICBkZWZfYnVpbHRpbiAoIl9fYnVpbHRpbl9ic3dhcF8xNiIsIHNob3J0X2Z0eXBlX3Nob3J0LAorKwkgICAgICAgQVZSMzJfQlVJTFRJTl9CU1dBUDE2KTsKKysgIGRlZl9idWlsdGluICgiX19idWlsdGluX2Jzd2FwXzMyIiwgaW50X2Z0eXBlX2ludCwgQVZSMzJfQlVJTFRJTl9CU1dBUDMyKTsKKysgIGRlZl9idWlsdGluICgiX19idWlsdGluX2NvcCIsIHZvaWRfZnR5cGVfaW50X2ludF9pbnRfaW50X2ludCwKKysJICAgICAgIEFWUjMyX0JVSUxUSU5fQ09QKTsKKysgIGRlZl9idWlsdGluICgiX19idWlsdGluX212Y3JfdyIsIGludF9mdHlwZV9pbnRfaW50LCBBVlIzMl9CVUlMVElOX01WQ1JfVyk7CisrICBkZWZfYnVpbHRpbiAoIl9fYnVpbHRpbl9tdnJjX3ciLCB2b2lkX2Z0eXBlX2ludF9pbnRfaW50LAorKwkgICAgICAgQVZSMzJfQlVJTFRJTl9NVlJDX1cpOworKyAgZGVmX2J1aWx0aW4gKCJfX2J1aWx0aW5fbXZjcl9kIiwgbG9uZ2xvbmdfZnR5cGVfaW50X2ludCwKKysJICAgICAgIEFWUjMyX0JVSUxUSU5fTVZDUl9EKTsKKysgIGRlZl9idWlsdGluICgiX19idWlsdGluX212cmNfZCIsIHZvaWRfZnR5cGVfaW50X2ludF9sb25nbG9uZywKKysJICAgICAgIEFWUjMyX0JVSUxUSU5fTVZSQ19EKTsKKysgIGRlZl9idWlsdGluICgiX19idWlsdGluX3NhdHMiLCBpbnRfZnR5cGVfaW50X2ludF9pbnQsIEFWUjMyX0JVSUxUSU5fU0FUUyk7CisrICBkZWZfYnVpbHRpbiAoIl9fYnVpbHRpbl9zYXR1IiwgaW50X2Z0eXBlX2ludF9pbnRfaW50LCBBVlIzMl9CVUlMVElOX1NBVFUpOworKyAgZGVmX2J1aWx0aW4gKCJfX2J1aWx0aW5fc2F0cm5kcyIsIGludF9mdHlwZV9pbnRfaW50X2ludCwKKysJICAgICAgIEFWUjMyX0JVSUxUSU5fU0FUUk5EUyk7CisrICBkZWZfYnVpbHRpbiAoIl9fYnVpbHRpbl9zYXRybmR1IiwgaW50X2Z0eXBlX2ludF9pbnRfaW50LAorKwkgICAgICAgQVZSMzJfQlVJTFRJTl9TQVRSTkRVKTsKKysgIGRlZl9idWlsdGluICgiX19idWlsdGluX211c2ZyIiwgdm9pZF9mdHlwZV9pbnQsIEFWUjMyX0JVSUxUSU5fTVVTRlIpOworKyAgZGVmX2J1aWx0aW4gKCJfX2J1aWx0aW5fbXVzdHIiLCBpbnRfZnR5cGVfdm9pZCwgQVZSMzJfQlVJTFRJTl9NVVNUUik7CisrICBkZWZfYnVpbHRpbiAoIl9fYnVpbHRpbl9tYWNzYXRoaF93IiwgaW50X2Z0eXBlX2ludF9zaG9ydF9zaG9ydCwKKysJICAgICAgIEFWUjMyX0JVSUxUSU5fTUFDU0FUSEhfVyk7CisrICBkZWZfYnVpbHRpbiAoIl9fYnVpbHRpbl9tYWN3aF9kIiwgbG9uZ2xvbmdfZnR5cGVfbG9uZ2xvbmdfaW50X3Nob3J0LAorKwkgICAgICAgQVZSMzJfQlVJTFRJTl9NQUNXSF9EKTsKKysgIGRlZl9idWlsdGluICgiX19idWlsdGluX21hY2hoX2QiLCBsb25nbG9uZ19mdHlwZV9sb25nbG9uZ19zaG9ydF9zaG9ydCwKKysJICAgICAgIEFWUjMyX0JVSUxUSU5fTUFDSEhfRCk7CisrICBkZWZfYnVpbHRpbiAoIl9fYnVpbHRpbl9tZW1zIiwgdm9pZF9mdHlwZV9wdHJfaW50LCBBVlIzMl9CVUlMVElOX01FTVMpOworKyAgZGVmX2J1aWx0aW4gKCJfX2J1aWx0aW5fbWVtdCIsIHZvaWRfZnR5cGVfcHRyX2ludCwgQVZSMzJfQlVJTFRJTl9NRU1UKTsKKysgIGRlZl9idWlsdGluICgiX19idWlsdGluX21lbWMiLCB2b2lkX2Z0eXBlX3B0cl9pbnQsIEFWUjMyX0JVSUxUSU5fTUVNQyk7CisrCisrICAvKiBBZGQgYWxsIGJ1aWx0aW5zIHRoYXQgYXJlIG1vcmUgb3IgbGVzcyBzaW1wbGUgb3BlcmF0aW9ucyBvbiB0d28KKysgICAgIG9wZXJhbmRzLiAgKi8KKysgIGZvciAoaSA9IDAsIGQgPSBiZGVzY18yYXJnOyBpIDwgQVJSQVlfU0laRSAoYmRlc2NfMmFyZyk7IGkrKywgZCsrKQorKyAgICB7CisrICAgICAgLyogVXNlIG9uZSBvZiB0aGUgb3BlcmFuZHM7IHRoZSB0YXJnZXQgY2FuIGhhdmUgYSBkaWZmZXJlbnQgbW9kZSBmb3IKKysgICAgICAgICBtYXNrLWdlbmVyYXRpbmcgY29tcGFyZXMuICAqLworKworKyAgICAgIGlmIChkLT5uYW1lID09IDApCisrCWNvbnRpbnVlOworKworKyAgICAgIGRlZl9tYnVpbHRpbiAoZC0+bWFzaywgZC0+bmFtZSwgKihkLT5mdHlwZSksIGQtPmNvZGUpOworKyAgICB9CisrfQorKworKworKy8qIFN1YnJvdXRpbmUgb2YgYXZyMzJfZXhwYW5kX2J1aWx0aW4gdG8gdGFrZSBjYXJlIG9mIGJpbm9wIGluc25zLiAgKi8KKysKKytzdGF0aWMgcnR4CisrYXZyMzJfZXhwYW5kX2Jpbm9wX2J1aWx0aW4gKGVudW0gaW5zbl9jb2RlIGljb2RlLCB0cmVlIGFyZ2xpc3QsIHJ0eCB0YXJnZXQpCisreworKyAgcnR4IHBhdDsKKysgIHRyZWUgYXJnMCA9IFRSRUVfVkFMVUUgKGFyZ2xpc3QpOworKyAgdHJlZSBhcmcxID0gVFJFRV9WQUxVRSAoVFJFRV9DSEFJTiAoYXJnbGlzdCkpOworKyAgcnR4IG9wMCA9IGV4cGFuZF9leHByIChhcmcwLCBOVUxMX1JUWCwgVk9JRG1vZGUsIDApOworKyAgcnR4IG9wMSA9IGV4cGFuZF9leHByIChhcmcxLCBOVUxMX1JUWCwgVk9JRG1vZGUsIDApOworKyAgZW51bSBtYWNoaW5lX21vZGUgdG1vZGUgPSBpbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMF0ubW9kZTsKKysgIGVudW0gbWFjaGluZV9tb2RlIG1vZGUwID0gaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzFdLm1vZGU7CisrICBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlMSA9IGluc25fZGF0YVtpY29kZV0ub3BlcmFuZFsyXS5tb2RlOworKworKyAgaWYgKCF0YXJnZXQKKysgICAgICB8fCBHRVRfTU9ERSAodGFyZ2V0KSAhPSB0bW9kZQorKyAgICAgIHx8ICEoKmluc25fZGF0YVtpY29kZV0ub3BlcmFuZFswXS5wcmVkaWNhdGUpICh0YXJnZXQsIHRtb2RlKSkKKysgICAgdGFyZ2V0ID0gZ2VuX3JlZ19ydHggKHRtb2RlKTsKKysKKysgIC8qIEluIGNhc2UgdGhlIGluc24gd2FudHMgaW5wdXQgb3BlcmFuZHMgaW4gbW9kZXMgZGlmZmVyZW50IGZyb20gdGhlCisrICAgICByZXN1bHQsIGFib3J0LiAgKi8KKysgIGlmICghKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMV0ucHJlZGljYXRlKSAob3AwLCBtb2RlMCkpCisrICAgIHsKKysgICAgICAvKiBJZiBvcDAgaXMgYWxyZWFkeSBhIHJlZyB3ZSBtdXN0IGNhc3QgaXQgdG8gdGhlIGNvcnJlY3QgbW9kZS4gKi8KKysgICAgICBpZiAoUkVHX1AgKG9wMCkpCisrCW9wMCA9IGNvbnZlcnRfdG9fbW9kZSAobW9kZTAsIG9wMCwgMSk7CisrICAgICAgZWxzZQorKwlvcDAgPSBjb3B5X3RvX21vZGVfcmVnIChtb2RlMCwgb3AwKTsKKysgICAgfQorKyAgaWYgKCEoKmluc25fZGF0YVtpY29kZV0ub3BlcmFuZFsyXS5wcmVkaWNhdGUpIChvcDEsIG1vZGUxKSkKKysgICAgeworKyAgICAgIC8qIElmIG9wMSBpcyBhbHJlYWR5IGEgcmVnIHdlIG11c3QgY2FzdCBpdCB0byB0aGUgY29ycmVjdCBtb2RlLiAqLworKyAgICAgIGlmIChSRUdfUCAob3AxKSkKKysJb3AxID0gY29udmVydF90b19tb2RlIChtb2RlMSwgb3AxLCAxKTsKKysgICAgICBlbHNlCisrCW9wMSA9IGNvcHlfdG9fbW9kZV9yZWcgKG1vZGUxLCBvcDEpOworKyAgICB9CisrICBwYXQgPSBHRU5fRkNOIChpY29kZSkgKHRhcmdldCwgb3AwLCBvcDEpOworKyAgaWYgKCFwYXQpCisrICAgIHJldHVybiAwOworKyAgZW1pdF9pbnNuIChwYXQpOworKyAgcmV0dXJuIHRhcmdldDsKKyt9CisrCisrLyogRXhwYW5kIGFuIGV4cHJlc3Npb24gRVhQIHRoYXQgY2FsbHMgYSBidWlsdC1pbiBmdW5jdGlvbiwKKysgICB3aXRoIHJlc3VsdCBnb2luZyB0byBUQVJHRVQgaWYgdGhhdCdzIGNvbnZlbmllbnQKKysgICAoYW5kIGluIG1vZGUgTU9ERSBpZiB0aGF0J3MgY29udmVuaWVudCkuCisrICAgU1VCVEFSR0VUIG1heSBiZSB1c2VkIGFzIHRoZSB0YXJnZXQgZm9yIGNvbXB1dGluZyBvbmUgb2YgRVhQJ3Mgb3BlcmFuZHMuCisrICAgSUdOT1JFIGlzIG5vbnplcm8gaWYgdGhlIHZhbHVlIGlzIHRvIGJlIGlnbm9yZWQuICAqLworKworK3J0eAorK2F2cjMyX2V4cGFuZF9idWlsdGluICh0cmVlIGV4cCwKKysJCSAgICAgIHJ0eCB0YXJnZXQsCisrCQkgICAgICBydHggc3VidGFyZ2V0IEFUVFJJQlVURV9VTlVTRUQsCisrCQkgICAgICBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlIEFUVFJJQlVURV9VTlVTRUQsCisrCQkgICAgICBpbnQgaWdub3JlIEFUVFJJQlVURV9VTlVTRUQpCisreworKyAgY29uc3Qgc3RydWN0IGJ1aWx0aW5fZGVzY3JpcHRpb24gKmQ7CisrICB1bnNpZ25lZCBpbnQgaTsKKysgIGVudW0gaW5zbl9jb2RlIGljb2RlID0gMDsKKysgIHRyZWUgZm5kZWNsID0gVFJFRV9PUEVSQU5EIChUUkVFX09QRVJBTkQgKGV4cCwgMCksIDApOworKyAgdHJlZSBhcmdsaXN0ID0gVFJFRV9PUEVSQU5EIChleHAsIDEpOworKyAgdHJlZSBhcmcwLCBhcmcxLCBhcmcyOworKyAgcnR4IG9wMCwgb3AxLCBvcDIsIHBhdDsKKysgIGVudW0gbWFjaGluZV9tb2RlIHRtb2RlLCBtb2RlMCwgbW9kZTE7CisrICBlbnVtIG1hY2hpbmVfbW9kZSBhcmcwX21vZGU7CisrICBpbnQgZmNvZGUgPSBERUNMX0ZVTkNUSU9OX0NPREUgKGZuZGVjbCk7CisrCisrICBzd2l0Y2ggKGZjb2RlKQorKyAgICB7CisrICAgIGRlZmF1bHQ6CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgQVZSMzJfQlVJTFRJTl9TQVRTOgorKyAgICBjYXNlIEFWUjMyX0JVSUxUSU5fU0FUVToKKysgICAgY2FzZSBBVlIzMl9CVUlMVElOX1NBVFJORFM6CisrICAgIGNhc2UgQVZSMzJfQlVJTFRJTl9TQVRSTkRVOgorKyAgICAgIHsKKysJY29uc3QgY2hhciAqZm5hbWU7CisrCXN3aXRjaCAoZmNvZGUpCisrCSAgeworKwkgIGRlZmF1bHQ6CisrCSAgY2FzZSBBVlIzMl9CVUlMVElOX1NBVFM6CisrCSAgICBpY29kZSA9IENPREVfRk9SX3NhdHM7CisrCSAgICBmbmFtZSA9ICJzYXRzIjsKKysJICAgIGJyZWFrOworKwkgIGNhc2UgQVZSMzJfQlVJTFRJTl9TQVRVOgorKwkgICAgaWNvZGUgPSBDT0RFX0ZPUl9zYXR1OworKwkgICAgZm5hbWUgPSAic2F0dSI7CisrCSAgICBicmVhazsKKysJICBjYXNlIEFWUjMyX0JVSUxUSU5fU0FUUk5EUzoKKysJICAgIGljb2RlID0gQ09ERV9GT1Jfc2F0cm5kczsKKysJICAgIGZuYW1lID0gInNhdHJuZHMiOworKwkgICAgYnJlYWs7CisrCSAgY2FzZSBBVlIzMl9CVUlMVElOX1NBVFJORFU6CisrCSAgICBpY29kZSA9IENPREVfRk9SX3NhdHJuZHU7CisrCSAgICBmbmFtZSA9ICJzYXRybmR1IjsKKysJICAgIGJyZWFrOworKwkgIH0KKysKKysJYXJnMCA9IFRSRUVfVkFMVUUgKGFyZ2xpc3QpOworKwlhcmcxID0gVFJFRV9WQUxVRSAoVFJFRV9DSEFJTiAoYXJnbGlzdCkpOworKwlhcmcyID0gVFJFRV9WQUxVRSAoVFJFRV9DSEFJTiAoVFJFRV9DSEFJTiAoYXJnbGlzdCkpKTsKKysJb3AwID0gZXhwYW5kX2V4cHIgKGFyZzAsIE5VTExfUlRYLCBWT0lEbW9kZSwgMCk7CisrCW9wMSA9IGV4cGFuZF9leHByIChhcmcxLCBOVUxMX1JUWCwgVk9JRG1vZGUsIDApOworKwlvcDIgPSBleHBhbmRfZXhwciAoYXJnMiwgTlVMTF9SVFgsIFZPSURtb2RlLCAwKTsKKysKKysJdG1vZGUgPSBpbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMF0ubW9kZTsKKysKKysKKysJaWYgKHRhcmdldCA9PSAwCisrCSAgICB8fCBHRVRfTU9ERSAodGFyZ2V0KSAhPSB0bW9kZQorKwkgICAgfHwgISgqaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzBdLnByZWRpY2F0ZSkgKHRhcmdldCwgdG1vZGUpKQorKwkgIHRhcmdldCA9IGdlbl9yZWdfcnR4ICh0bW9kZSk7CisrCisrCisrCWlmICghKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMF0ucHJlZGljYXRlKSAob3AwLCBHRVRfTU9ERSAob3AwKSkpCisrCSAgeworKwkgICAgb3AwID0gY29weV90b19tb2RlX3JlZyAoaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzBdLm1vZGUsIG9wMCk7CisrCSAgfQorKworKwlpZiAoISgqaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzFdLnByZWRpY2F0ZSkgKG9wMSwgU0ltb2RlKSkKKysJICB7CisrCSAgICBlcnJvciAoIlBhcmFtZXRlciAyIHRvIF9fYnVpbHRpbl8lcyBzaG91bGQgYmUgYSBjb25zdGFudCBudW1iZXIuIiwKKysJCSAgIGZuYW1lKTsKKysJICAgIHJldHVybiBOVUxMX1JUWDsKKysJICB9CisrCisrCWlmICghKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMV0ucHJlZGljYXRlKSAob3AyLCBTSW1vZGUpKQorKwkgIHsKKysJICAgIGVycm9yICgiUGFyYW1ldGVyIDMgdG8gX19idWlsdGluXyVzIHNob3VsZCBiZSBhIGNvbnN0YW50IG51bWJlci4iLAorKwkJICAgZm5hbWUpOworKwkgICAgcmV0dXJuIE5VTExfUlRYOworKwkgIH0KKysKKysJZW1pdF9tb3ZlX2luc24gKHRhcmdldCwgb3AwKTsKKysJcGF0ID0gR0VOX0ZDTiAoaWNvZGUpICh0YXJnZXQsIG9wMSwgb3AyKTsKKysJaWYgKCFwYXQpCisrCSAgcmV0dXJuIDA7CisrCWVtaXRfaW5zbiAocGF0KTsKKysKKysJcmV0dXJuIHRhcmdldDsKKysgICAgICB9CisrICAgIGNhc2UgQVZSMzJfQlVJTFRJTl9NVVNUUjoKKysgICAgICBpY29kZSA9IENPREVfRk9SX211c3RyOworKyAgICAgIHRtb2RlID0gaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzBdLm1vZGU7CisrCisrICAgICAgaWYgKHRhcmdldCA9PSAwCisrCSAgfHwgR0VUX01PREUgKHRhcmdldCkgIT0gdG1vZGUKKysJICB8fCAhKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMF0ucHJlZGljYXRlKSAodGFyZ2V0LCB0bW9kZSkpCisrCXRhcmdldCA9IGdlbl9yZWdfcnR4ICh0bW9kZSk7CisrICAgICAgcGF0ID0gR0VOX0ZDTiAoaWNvZGUpICh0YXJnZXQpOworKyAgICAgIGlmICghcGF0KQorKwlyZXR1cm4gMDsKKysgICAgICBlbWl0X2luc24gKHBhdCk7CisrICAgICAgcmV0dXJuIHRhcmdldDsKKysKKysgICAgY2FzZSBBVlIzMl9CVUlMVElOX01GU1I6CisrICAgICAgaWNvZGUgPSBDT0RFX0ZPUl9tZnNyOworKyAgICAgIGFyZzAgPSBUUkVFX1ZBTFVFIChhcmdsaXN0KTsKKysgICAgICBvcDAgPSBleHBhbmRfZXhwciAoYXJnMCwgTlVMTF9SVFgsIFZPSURtb2RlLCAwKTsKKysgICAgICB0bW9kZSA9IGluc25fZGF0YVtpY29kZV0ub3BlcmFuZFswXS5tb2RlOworKyAgICAgIG1vZGUwID0gaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzFdLm1vZGU7CisrCisrICAgICAgaWYgKCEoKmluc25fZGF0YVtpY29kZV0ub3BlcmFuZFsxXS5wcmVkaWNhdGUpIChvcDAsIG1vZGUwKSkKKysJeworKwkgIGVycm9yICgiUGFyYW1ldGVyIDEgdG8gX19idWlsdGluX21mc3IgbXVzdCBiZSBhIGNvbnN0YW50IG51bWJlciIpOworKwl9CisrCisrICAgICAgaWYgKHRhcmdldCA9PSAwCisrCSAgfHwgR0VUX01PREUgKHRhcmdldCkgIT0gdG1vZGUKKysJICB8fCAhKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMF0ucHJlZGljYXRlKSAodGFyZ2V0LCB0bW9kZSkpCisrCXRhcmdldCA9IGdlbl9yZWdfcnR4ICh0bW9kZSk7CisrICAgICAgcGF0ID0gR0VOX0ZDTiAoaWNvZGUpICh0YXJnZXQsIG9wMCk7CisrICAgICAgaWYgKCFwYXQpCisrCXJldHVybiAwOworKyAgICAgIGVtaXRfaW5zbiAocGF0KTsKKysgICAgICByZXR1cm4gdGFyZ2V0OworKyAgICBjYXNlIEFWUjMyX0JVSUxUSU5fTVRTUjoKKysgICAgICBpY29kZSA9IENPREVfRk9SX210c3I7CisrICAgICAgYXJnMCA9IFRSRUVfVkFMVUUgKGFyZ2xpc3QpOworKyAgICAgIGFyZzEgPSBUUkVFX1ZBTFVFIChUUkVFX0NIQUlOIChhcmdsaXN0KSk7CisrICAgICAgb3AwID0gZXhwYW5kX2V4cHIgKGFyZzAsIE5VTExfUlRYLCBWT0lEbW9kZSwgMCk7CisrICAgICAgb3AxID0gZXhwYW5kX2V4cHIgKGFyZzEsIE5VTExfUlRYLCBWT0lEbW9kZSwgMCk7CisrICAgICAgbW9kZTAgPSBpbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMF0ubW9kZTsKKysgICAgICBtb2RlMSA9IGluc25fZGF0YVtpY29kZV0ub3BlcmFuZFsxXS5tb2RlOworKworKyAgICAgIGlmICghKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMF0ucHJlZGljYXRlKSAob3AwLCBtb2RlMCkpCisrCXsKKysJICBlcnJvciAoIlBhcmFtZXRlciAxIHRvIF9fYnVpbHRpbl9tdHNyIG11c3QgYmUgYSBjb25zdGFudCBudW1iZXIiKTsKKysJICByZXR1cm4gZ2VuX3JlZ19ydHggKG1vZGUwKTsKKysJfQorKyAgICAgIGlmICghKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMV0ucHJlZGljYXRlKSAob3AxLCBtb2RlMSkpCisrCW9wMSA9IGNvcHlfdG9fbW9kZV9yZWcgKG1vZGUxLCBvcDEpOworKyAgICAgIHBhdCA9IEdFTl9GQ04gKGljb2RlKSAob3AwLCBvcDEpOworKyAgICAgIGlmICghcGF0KQorKwlyZXR1cm4gMDsKKysgICAgICBlbWl0X2luc24gKHBhdCk7CisrICAgICAgcmV0dXJuIE5VTExfUlRYOworKyAgICBjYXNlIEFWUjMyX0JVSUxUSU5fTUZEUjoKKysgICAgICBpY29kZSA9IENPREVfRk9SX21mZHI7CisrICAgICAgYXJnMCA9IFRSRUVfVkFMVUUgKGFyZ2xpc3QpOworKyAgICAgIG9wMCA9IGV4cGFuZF9leHByIChhcmcwLCBOVUxMX1JUWCwgVk9JRG1vZGUsIDApOworKyAgICAgIHRtb2RlID0gaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzBdLm1vZGU7CisrICAgICAgbW9kZTAgPSBpbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMV0ubW9kZTsKKysKKysgICAgICBpZiAoISgqaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzFdLnByZWRpY2F0ZSkgKG9wMCwgbW9kZTApKQorKwl7CisrCSAgZXJyb3IgKCJQYXJhbWV0ZXIgMSB0byBfX2J1aWx0aW5fbWZkciBtdXN0IGJlIGEgY29uc3RhbnQgbnVtYmVyIik7CisrCX0KKysKKysgICAgICBpZiAodGFyZ2V0ID09IDAKKysJICB8fCBHRVRfTU9ERSAodGFyZ2V0KSAhPSB0bW9kZQorKwkgIHx8ICEoKmluc25fZGF0YVtpY29kZV0ub3BlcmFuZFswXS5wcmVkaWNhdGUpICh0YXJnZXQsIHRtb2RlKSkKKysJdGFyZ2V0ID0gZ2VuX3JlZ19ydHggKHRtb2RlKTsKKysgICAgICBwYXQgPSBHRU5fRkNOIChpY29kZSkgKHRhcmdldCwgb3AwKTsKKysgICAgICBpZiAoIXBhdCkKKysJcmV0dXJuIDA7CisrICAgICAgZW1pdF9pbnNuIChwYXQpOworKyAgICAgIHJldHVybiB0YXJnZXQ7CisrICAgIGNhc2UgQVZSMzJfQlVJTFRJTl9NVERSOgorKyAgICAgIGljb2RlID0gQ09ERV9GT1JfbXRkcjsKKysgICAgICBhcmcwID0gVFJFRV9WQUxVRSAoYXJnbGlzdCk7CisrICAgICAgYXJnMSA9IFRSRUVfVkFMVUUgKFRSRUVfQ0hBSU4gKGFyZ2xpc3QpKTsKKysgICAgICBvcDAgPSBleHBhbmRfZXhwciAoYXJnMCwgTlVMTF9SVFgsIFZPSURtb2RlLCAwKTsKKysgICAgICBvcDEgPSBleHBhbmRfZXhwciAoYXJnMSwgTlVMTF9SVFgsIFZPSURtb2RlLCAwKTsKKysgICAgICBtb2RlMCA9IGluc25fZGF0YVtpY29kZV0ub3BlcmFuZFswXS5tb2RlOworKyAgICAgIG1vZGUxID0gaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzFdLm1vZGU7CisrCisrICAgICAgaWYgKCEoKmluc25fZGF0YVtpY29kZV0ub3BlcmFuZFswXS5wcmVkaWNhdGUpIChvcDAsIG1vZGUwKSkKKysJeworKwkgIGVycm9yICgiUGFyYW1ldGVyIDEgdG8gX19idWlsdGluX210ZHIgbXVzdCBiZSBhIGNvbnN0YW50IG51bWJlciIpOworKwkgIHJldHVybiBnZW5fcmVnX3J0eCAobW9kZTApOworKwl9CisrICAgICAgaWYgKCEoKmluc25fZGF0YVtpY29kZV0ub3BlcmFuZFsxXS5wcmVkaWNhdGUpIChvcDEsIG1vZGUxKSkKKysJb3AxID0gY29weV90b19tb2RlX3JlZyAobW9kZTEsIG9wMSk7CisrICAgICAgcGF0ID0gR0VOX0ZDTiAoaWNvZGUpIChvcDAsIG9wMSk7CisrICAgICAgaWYgKCFwYXQpCisrCXJldHVybiAwOworKyAgICAgIGVtaXRfaW5zbiAocGF0KTsKKysgICAgICByZXR1cm4gTlVMTF9SVFg7CisrICAgIGNhc2UgQVZSMzJfQlVJTFRJTl9DQUNIRToKKysgICAgICBpY29kZSA9IENPREVfRk9SX2NhY2hlOworKyAgICAgIGFyZzAgPSBUUkVFX1ZBTFVFIChhcmdsaXN0KTsKKysgICAgICBhcmcxID0gVFJFRV9WQUxVRSAoVFJFRV9DSEFJTiAoYXJnbGlzdCkpOworKyAgICAgIG9wMCA9IGV4cGFuZF9leHByIChhcmcwLCBOVUxMX1JUWCwgVk9JRG1vZGUsIDApOworKyAgICAgIG9wMSA9IGV4cGFuZF9leHByIChhcmcxLCBOVUxMX1JUWCwgVk9JRG1vZGUsIDApOworKyAgICAgIG1vZGUwID0gaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzBdLm1vZGU7CisrICAgICAgbW9kZTEgPSBpbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMV0ubW9kZTsKKysKKysgICAgICBpZiAoISgqaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzFdLnByZWRpY2F0ZSkgKG9wMSwgbW9kZTEpKQorKwl7CisrCSAgZXJyb3IgKCJQYXJhbWV0ZXIgMiB0byBfX2J1aWx0aW5fY2FjaGUgbXVzdCBiZSBhIGNvbnN0YW50IG51bWJlciIpOworKwkgIHJldHVybiBnZW5fcmVnX3J0eCAobW9kZTEpOworKwl9CisrCisrICAgICAgaWYgKCEoKmluc25fZGF0YVtpY29kZV0ub3BlcmFuZFswXS5wcmVkaWNhdGUpIChvcDAsIG1vZGUwKSkKKysJb3AwID0gY29weV90b19tb2RlX3JlZyAobW9kZTAsIG9wMCk7CisrCisrICAgICAgcGF0ID0gR0VOX0ZDTiAoaWNvZGUpIChvcDAsIG9wMSk7CisrICAgICAgaWYgKCFwYXQpCisrCXJldHVybiAwOworKyAgICAgIGVtaXRfaW5zbiAocGF0KTsKKysgICAgICByZXR1cm4gTlVMTF9SVFg7CisrICAgIGNhc2UgQVZSMzJfQlVJTFRJTl9TWU5DOgorKyAgICBjYXNlIEFWUjMyX0JVSUxUSU5fTVVTRlI6CisrICAgIGNhc2UgQVZSMzJfQlVJTFRJTl9TU1JGOgorKyAgICBjYXNlIEFWUjMyX0JVSUxUSU5fQ1NSRjoKKysgICAgICB7CisrCWNvbnN0IGNoYXIgKmZuYW1lOworKwlzd2l0Y2ggKGZjb2RlKQorKwkgIHsKKysJICBkZWZhdWx0OgorKwkgIGNhc2UgQVZSMzJfQlVJTFRJTl9TWU5DOgorKwkgICAgaWNvZGUgPSBDT0RFX0ZPUl9zeW5jOworKwkgICAgZm5hbWUgPSAic3luYyI7CisrCSAgICBicmVhazsKKysJICBjYXNlIEFWUjMyX0JVSUxUSU5fTVVTRlI6CisrCSAgICBpY29kZSA9IENPREVfRk9SX211c2ZyOworKwkgICAgZm5hbWUgPSAibXVzZnIiOworKwkgICAgYnJlYWs7CisrCSAgY2FzZSBBVlIzMl9CVUlMVElOX1NTUkY6CisrCSAgICBpY29kZSA9IENPREVfRk9SX3NzcmY7CisrCSAgICBmbmFtZSA9ICJzc3JmIjsKKysJICAgIGJyZWFrOworKwkgIGNhc2UgQVZSMzJfQlVJTFRJTl9DU1JGOgorKwkgICAgaWNvZGUgPSBDT0RFX0ZPUl9jc3JmOworKwkgICAgZm5hbWUgPSAiY3NyZiI7CisrCSAgICBicmVhazsKKysJICB9CisrCisrCWFyZzAgPSBUUkVFX1ZBTFVFIChhcmdsaXN0KTsKKysJb3AwID0gZXhwYW5kX2V4cHIgKGFyZzAsIE5VTExfUlRYLCBWT0lEbW9kZSwgMCk7CisrCW1vZGUwID0gaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzBdLm1vZGU7CisrCisrCWlmICghKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMF0ucHJlZGljYXRlKSAob3AwLCBtb2RlMCkpCisrCSAgeworKwkgICAgaWYgKGljb2RlID09IENPREVfRk9SX211c2ZyKQorKwkgICAgICBvcDAgPSBjb3B5X3RvX21vZGVfcmVnIChtb2RlMCwgb3AwKTsKKysJICAgIGVsc2UKKysJICAgICAgeworKwkJZXJyb3IgKCJQYXJhbWV0ZXIgdG8gX19idWlsdGluXyVzIGlzIGlsbGVnYWwuIiwgZm5hbWUpOworKwkJcmV0dXJuIGdlbl9yZWdfcnR4IChtb2RlMCk7CisrCSAgICAgIH0KKysJICB9CisrCXBhdCA9IEdFTl9GQ04gKGljb2RlKSAob3AwKTsKKysJaWYgKCFwYXQpCisrCSAgcmV0dXJuIDA7CisrCWVtaXRfaW5zbiAocGF0KTsKKysJcmV0dXJuIE5VTExfUlRYOworKyAgICAgIH0KKysgICAgY2FzZSBBVlIzMl9CVUlMVElOX1RMQlI6CisrICAgICAgaWNvZGUgPSBDT0RFX0ZPUl90bGJyOworKyAgICAgIHBhdCA9IEdFTl9GQ04gKGljb2RlKSAoTlVMTF9SVFgpOworKyAgICAgIGlmICghcGF0KQorKwlyZXR1cm4gMDsKKysgICAgICBlbWl0X2luc24gKHBhdCk7CisrICAgICAgcmV0dXJuIE5VTExfUlRYOworKyAgICBjYXNlIEFWUjMyX0JVSUxUSU5fVExCUzoKKysgICAgICBpY29kZSA9IENPREVfRk9SX3RsYnM7CisrICAgICAgcGF0ID0gR0VOX0ZDTiAoaWNvZGUpIChOVUxMX1JUWCk7CisrICAgICAgaWYgKCFwYXQpCisrCXJldHVybiAwOworKyAgICAgIGVtaXRfaW5zbiAocGF0KTsKKysgICAgICByZXR1cm4gTlVMTF9SVFg7CisrICAgIGNhc2UgQVZSMzJfQlVJTFRJTl9UTEJXOgorKyAgICAgIGljb2RlID0gQ09ERV9GT1JfdGxidzsKKysgICAgICBwYXQgPSBHRU5fRkNOIChpY29kZSkgKE5VTExfUlRYKTsKKysgICAgICBpZiAoIXBhdCkKKysJcmV0dXJuIDA7CisrICAgICAgZW1pdF9pbnNuIChwYXQpOworKyAgICAgIHJldHVybiBOVUxMX1JUWDsKKysgICAgY2FzZSBBVlIzMl9CVUlMVElOX0JSRUFLUE9JTlQ6CisrICAgICAgaWNvZGUgPSBDT0RFX0ZPUl9icmVha3BvaW50OworKyAgICAgIHBhdCA9IEdFTl9GQ04gKGljb2RlKSAoTlVMTF9SVFgpOworKyAgICAgIGlmICghcGF0KQorKwlyZXR1cm4gMDsKKysgICAgICBlbWl0X2luc24gKHBhdCk7CisrICAgICAgcmV0dXJuIE5VTExfUlRYOworKyAgICBjYXNlIEFWUjMyX0JVSUxUSU5fWENIRzoKKysgICAgICBpY29kZSA9IENPREVfRk9SX3N5bmNfbG9ja190ZXN0X2FuZF9zZXRzaTsKKysgICAgICBhcmcwID0gVFJFRV9WQUxVRSAoYXJnbGlzdCk7CisrICAgICAgYXJnMSA9IFRSRUVfVkFMVUUgKFRSRUVfQ0hBSU4gKGFyZ2xpc3QpKTsKKysgICAgICBvcDAgPSBleHBhbmRfZXhwciAoYXJnMCwgTlVMTF9SVFgsIFZPSURtb2RlLCAwKTsKKysgICAgICBvcDEgPSBleHBhbmRfZXhwciAoYXJnMSwgTlVMTF9SVFgsIFZPSURtb2RlLCAwKTsKKysgICAgICB0bW9kZSA9IGluc25fZGF0YVtpY29kZV0ub3BlcmFuZFswXS5tb2RlOworKyAgICAgIG1vZGUwID0gaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzFdLm1vZGU7CisrICAgICAgbW9kZTEgPSBpbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMl0ubW9kZTsKKysKKysgICAgICBpZiAoISgqaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzJdLnByZWRpY2F0ZSkgKG9wMSwgbW9kZTEpKQorKwl7CisrCSAgb3AxID0gY29weV90b19tb2RlX3JlZyAobW9kZTEsIG9wMSk7CisrCX0KKysKKysgICAgICBvcDAgPSBmb3JjZV9yZWcgKEdFVF9NT0RFIChvcDApLCBvcDApOworKyAgICAgIG9wMCA9IGdlbl9ydHhfTUVNIChHRVRfTU9ERSAob3AwKSwgb3AwKTsKKysgICAgICBpZiAoISgqaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzFdLnByZWRpY2F0ZSkgKG9wMCwgbW9kZTApKQorKwl7CisrCSAgZXJyb3IKKysJICAgICgiUGFyYW1ldGVyIDEgdG8gX19idWlsdGluX3hjaGcgbXVzdCBiZSBhIHBvaW50ZXIgdG8gYW4gaW50ZWdlci4iKTsKKysJfQorKworKyAgICAgIGlmICh0YXJnZXQgPT0gMAorKwkgIHx8IEdFVF9NT0RFICh0YXJnZXQpICE9IHRtb2RlCisrCSAgfHwgISgqaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzBdLnByZWRpY2F0ZSkgKHRhcmdldCwgdG1vZGUpKQorKwl0YXJnZXQgPSBnZW5fcmVnX3J0eCAodG1vZGUpOworKyAgICAgIHBhdCA9IEdFTl9GQ04gKGljb2RlKSAodGFyZ2V0LCBvcDAsIG9wMSk7CisrICAgICAgaWYgKCFwYXQpCisrCXJldHVybiAwOworKyAgICAgIGVtaXRfaW5zbiAocGF0KTsKKysgICAgICByZXR1cm4gdGFyZ2V0OworKyAgICBjYXNlIEFWUjMyX0JVSUxUSU5fTERYSToKKysgICAgICBpY29kZSA9IENPREVfRk9SX2xkeGk7CisrICAgICAgYXJnMCA9IFRSRUVfVkFMVUUgKGFyZ2xpc3QpOworKyAgICAgIGFyZzEgPSBUUkVFX1ZBTFVFIChUUkVFX0NIQUlOIChhcmdsaXN0KSk7CisrICAgICAgYXJnMiA9IFRSRUVfVkFMVUUgKFRSRUVfQ0hBSU4gKFRSRUVfQ0hBSU4gKGFyZ2xpc3QpKSk7CisrICAgICAgb3AwID0gZXhwYW5kX2V4cHIgKGFyZzAsIE5VTExfUlRYLCBWT0lEbW9kZSwgMCk7CisrICAgICAgb3AxID0gZXhwYW5kX2V4cHIgKGFyZzEsIE5VTExfUlRYLCBWT0lEbW9kZSwgMCk7CisrICAgICAgb3AyID0gZXhwYW5kX2V4cHIgKGFyZzIsIE5VTExfUlRYLCBWT0lEbW9kZSwgMCk7CisrICAgICAgdG1vZGUgPSBpbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMF0ubW9kZTsKKysgICAgICBtb2RlMCA9IGluc25fZGF0YVtpY29kZV0ub3BlcmFuZFsxXS5tb2RlOworKyAgICAgIG1vZGUxID0gaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzJdLm1vZGU7CisrCisrICAgICAgaWYgKCEoKmluc25fZGF0YVtpY29kZV0ub3BlcmFuZFsxXS5wcmVkaWNhdGUpIChvcDAsIG1vZGUwKSkKKysJeworKwkgIG9wMCA9IGNvcHlfdG9fbW9kZV9yZWcgKG1vZGUwLCBvcDApOworKwl9CisrCisrICAgICAgaWYgKCEoKmluc25fZGF0YVtpY29kZV0ub3BlcmFuZFsyXS5wcmVkaWNhdGUpIChvcDEsIG1vZGUxKSkKKysJeworKwkgIG9wMSA9IGNvcHlfdG9fbW9kZV9yZWcgKG1vZGUxLCBvcDEpOworKwl9CisrCisrICAgICAgaWYgKCEoKmluc25fZGF0YVtpY29kZV0ub3BlcmFuZFszXS5wcmVkaWNhdGUpIChvcDIsIFNJbW9kZSkpCisrCXsKKysJICBlcnJvcgorKwkgICAgKCJQYXJhbWV0ZXIgMyB0byBfX2J1aWx0aW5fbGR4aSBtdXN0IGJlIGEgdmFsaWQgZXh0cmFjdCBzaGlmdCBvcGVyYW5kOiAoMHw4fDE2fDI0KSIpOworKwkgIHJldHVybiBnZW5fcmVnX3J0eCAobW9kZTApOworKwl9CisrCisrICAgICAgaWYgKHRhcmdldCA9PSAwCisrCSAgfHwgR0VUX01PREUgKHRhcmdldCkgIT0gdG1vZGUKKysJICB8fCAhKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMF0ucHJlZGljYXRlKSAodGFyZ2V0LCB0bW9kZSkpCisrCXRhcmdldCA9IGdlbl9yZWdfcnR4ICh0bW9kZSk7CisrICAgICAgcGF0ID0gR0VOX0ZDTiAoaWNvZGUpICh0YXJnZXQsIG9wMCwgb3AxLCBvcDIpOworKyAgICAgIGlmICghcGF0KQorKwlyZXR1cm4gMDsKKysgICAgICBlbWl0X2luc24gKHBhdCk7CisrICAgICAgcmV0dXJuIHRhcmdldDsKKysgICAgY2FzZSBBVlIzMl9CVUlMVElOX0JTV0FQMTY6CisrICAgICAgeworKwlpY29kZSA9IENPREVfRk9SX2Jzd2FwXzE2OworKwlhcmcwID0gVFJFRV9WQUxVRSAoYXJnbGlzdCk7CisrCWFyZzBfbW9kZSA9IFRZUEVfTU9ERSAoVFJFRV9UWVBFIChhcmcwKSk7CisrCW1vZGUwID0gaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzFdLm1vZGU7CisrCWlmIChhcmcwX21vZGUgIT0gbW9kZTApCisrCSAgYXJnMCA9IGJ1aWxkMSAoTk9QX0VYUFIsCisrCQkJICgqbGFuZ19ob29rcy50eXBlcy50eXBlX2Zvcl9tb2RlKSAobW9kZTAsIDApLCBhcmcwKTsKKysKKysJb3AwID0gZXhwYW5kX2V4cHIgKGFyZzAsIE5VTExfUlRYLCBISW1vZGUsIDApOworKwl0bW9kZSA9IGluc25fZGF0YVtpY29kZV0ub3BlcmFuZFswXS5tb2RlOworKworKworKwlpZiAoISgqaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzFdLnByZWRpY2F0ZSkgKG9wMCwgbW9kZTApKQorKwkgIHsKKysgICAgICAgICAgICBpZiAoIENPTlNUX0lOVF9QIChvcDApICkKKysgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgSE9TVF9XSURFX0lOVCB2YWwgPSAoICgoSU5UVkFMIChvcDApJjB4MDBmZikgPDwgOCkgfAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJTlRWQUwgKG9wMCkmMHhmZjAwKSA+PiA4KSApOworKyAgICAgICAgICAgICAgICAvKiBTaWduIGV4dGVuZCAxNi1iaXQgdmFsdWUgdG8gaG9zdCB3aWRlIGludCAqLworKyAgICAgICAgICAgICAgICB2YWwgPDw9IChIT1NUX0JJVFNfUEVSX1dJREVfSU5UIC0gMTYpOworKyAgICAgICAgICAgICAgICB2YWwgPj49IChIT1NUX0JJVFNfUEVSX1dJREVfSU5UIC0gMTYpOworKyAgICAgICAgICAgICAgICBvcDAgPSBHRU5fSU5UKHZhbCk7CisrICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gMAorKyAgICAgICAgICAgICAgICAgICAgfHwgR0VUX01PREUgKHRhcmdldCkgIT0gdG1vZGUKKysgICAgICAgICAgICAgICAgICAgIHx8ICEoKmluc25fZGF0YVtpY29kZV0ub3BlcmFuZFswXS5wcmVkaWNhdGUpICh0YXJnZXQsIHRtb2RlKSkKKysgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBnZW5fcmVnX3J0eCAodG1vZGUpOworKyAgICAgICAgICAgICAgICBlbWl0X21vdmVfaW5zbih0YXJnZXQsIG9wMCk7CisrICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7CisrICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgb3AwID0gY29weV90b19tb2RlX3JlZyAobW9kZTAsIG9wMCk7CisrCSAgfQorKworKwlpZiAodGFyZ2V0ID09IDAKKysJICAgIHx8IEdFVF9NT0RFICh0YXJnZXQpICE9IHRtb2RlCisrCSAgICB8fCAhKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMF0ucHJlZGljYXRlKSAodGFyZ2V0LCB0bW9kZSkpCisrCSAgeworKwkgICAgdGFyZ2V0ID0gZ2VuX3JlZ19ydHggKHRtb2RlKTsKKysJICB9CisrCisrCisrCXBhdCA9IEdFTl9GQ04gKGljb2RlKSAodGFyZ2V0LCBvcDApOworKwlpZiAoIXBhdCkKKysJICByZXR1cm4gMDsKKysJZW1pdF9pbnNuIChwYXQpOworKworKwlyZXR1cm4gdGFyZ2V0OworKyAgICAgIH0KKysgICAgY2FzZSBBVlIzMl9CVUlMVElOX0JTV0FQMzI6CisrICAgICAgeworKwlpY29kZSA9IENPREVfRk9SX2Jzd2FwXzMyOworKwlhcmcwID0gVFJFRV9WQUxVRSAoYXJnbGlzdCk7CisrCW9wMCA9IGV4cGFuZF9leHByIChhcmcwLCBOVUxMX1JUWCwgVk9JRG1vZGUsIDApOworKwl0bW9kZSA9IGluc25fZGF0YVtpY29kZV0ub3BlcmFuZFswXS5tb2RlOworKwltb2RlMCA9IGluc25fZGF0YVtpY29kZV0ub3BlcmFuZFsxXS5tb2RlOworKworKwlpZiAoISgqaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzFdLnByZWRpY2F0ZSkgKG9wMCwgbW9kZTApKQorKwkgIHsKKysgICAgICAgICAgICBpZiAoIENPTlNUX0lOVF9QIChvcDApICkKKysgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgSE9TVF9XSURFX0lOVCB2YWwgPSAoICgoSU5UVkFMIChvcDApJjB4MDAwMDAwZmYpIDw8IDI0KSB8CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElOVFZBTCAob3AwKSYweDAwMDBmZjAwKSA8PCA4KSB8CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElOVFZBTCAob3AwKSYweDAwZmYwMDAwKSA+PiA4KSB8CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElOVFZBTCAob3AwKSYweGZmMDAwMDAwKSA+PiAyNCkgKTsKKysgICAgICAgICAgICAgICAgLyogU2lnbiBleHRlbmQgMzItYml0IHZhbHVlIHRvIGhvc3Qgd2lkZSBpbnQgKi8KKysgICAgICAgICAgICAgICAgdmFsIDw8PSAoSE9TVF9CSVRTX1BFUl9XSURFX0lOVCAtIDMyKTsKKysgICAgICAgICAgICAgICAgdmFsID4+PSAoSE9TVF9CSVRTX1BFUl9XSURFX0lOVCAtIDMyKTsKKysgICAgICAgICAgICAgICAgb3AwID0gR0VOX0lOVCh2YWwpOworKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IDAKKysgICAgICAgICAgICAgICAgICAgIHx8IEdFVF9NT0RFICh0YXJnZXQpICE9IHRtb2RlCisrICAgICAgICAgICAgICAgICAgICB8fCAhKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMF0ucHJlZGljYXRlKSAodGFyZ2V0LCB0bW9kZSkpCisrICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gZ2VuX3JlZ19ydHggKHRtb2RlKTsKKysgICAgICAgICAgICAgICAgZW1pdF9tb3ZlX2luc24odGFyZ2V0LCBvcDApOworKyAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0OworKyAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgIG9wMCA9IGNvcHlfdG9fbW9kZV9yZWcgKG1vZGUwLCBvcDApOworKwkgIH0KKysKKysJaWYgKHRhcmdldCA9PSAwCisrCSAgICB8fCBHRVRfTU9ERSAodGFyZ2V0KSAhPSB0bW9kZQorKwkgICAgfHwgISgqaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzBdLnByZWRpY2F0ZSkgKHRhcmdldCwgdG1vZGUpKQorKwkgIHRhcmdldCA9IGdlbl9yZWdfcnR4ICh0bW9kZSk7CisrCisrCisrCXBhdCA9IEdFTl9GQ04gKGljb2RlKSAodGFyZ2V0LCBvcDApOworKwlpZiAoIXBhdCkKKysJICByZXR1cm4gMDsKKysJZW1pdF9pbnNuIChwYXQpOworKworKwlyZXR1cm4gdGFyZ2V0OworKyAgICAgIH0KKysgICAgY2FzZSBBVlIzMl9CVUlMVElOX01WQ1JfVzoKKysgICAgY2FzZSBBVlIzMl9CVUlMVElOX01WQ1JfRDoKKysgICAgICB7CisrCWFyZzAgPSBUUkVFX1ZBTFVFIChhcmdsaXN0KTsKKysJYXJnMSA9IFRSRUVfVkFMVUUgKFRSRUVfQ0hBSU4gKGFyZ2xpc3QpKTsKKysJb3AwID0gZXhwYW5kX2V4cHIgKGFyZzAsIE5VTExfUlRYLCBWT0lEbW9kZSwgMCk7CisrCW9wMSA9IGV4cGFuZF9leHByIChhcmcxLCBOVUxMX1JUWCwgVk9JRG1vZGUsIDApOworKworKwlpZiAoZmNvZGUgPT0gQVZSMzJfQlVJTFRJTl9NVkNSX1cpCisrCSAgaWNvZGUgPSBDT0RFX0ZPUl9tdmNyc2k7CisrCWVsc2UKKysJICBpY29kZSA9IENPREVfRk9SX212Y3JkaTsKKysKKysJdG1vZGUgPSBpbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMF0ubW9kZTsKKysKKysJaWYgKHRhcmdldCA9PSAwCisrCSAgICB8fCBHRVRfTU9ERSAodGFyZ2V0KSAhPSB0bW9kZQorKwkgICAgfHwgISgqaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzBdLnByZWRpY2F0ZSkgKHRhcmdldCwgdG1vZGUpKQorKwkgIHRhcmdldCA9IGdlbl9yZWdfcnR4ICh0bW9kZSk7CisrCisrCWlmICghKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMV0ucHJlZGljYXRlKSAob3AwLCBTSW1vZGUpKQorKwkgIHsKKysJICAgIGVycm9yCisrCSAgICAgICgiUGFyYW1ldGVyIDEgdG8gX19idWlsdGluX2NvcCBpcyBub3QgYSB2YWxpZCBjb3Byb2Nlc3NvciBudW1iZXIuIik7CisrCSAgICBlcnJvciAoIk51bWJlciBzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCA3LiIpOworKwkgICAgcmV0dXJuIE5VTExfUlRYOworKwkgIH0KKysKKysJaWYgKCEoKmluc25fZGF0YVtpY29kZV0ub3BlcmFuZFsyXS5wcmVkaWNhdGUpIChvcDEsIFNJbW9kZSkpCisrCSAgeworKwkgICAgZXJyb3IKKysJICAgICAgKCJQYXJhbWV0ZXIgMiB0byBfX2J1aWx0aW5fY29wIGlzIG5vdCBhIHZhbGlkIGNvcHJvY2Vzc29yIHJlZ2lzdGVyIG51bWJlci4iKTsKKysJICAgIGVycm9yICgiTnVtYmVyIHNob3VsZCBiZSBiZXR3ZWVuIDAgYW5kIDE1LiIpOworKwkgICAgcmV0dXJuIE5VTExfUlRYOworKwkgIH0KKysKKysJcGF0ID0gR0VOX0ZDTiAoaWNvZGUpICh0YXJnZXQsIG9wMCwgb3AxKTsKKysJaWYgKCFwYXQpCisrCSAgcmV0dXJuIDA7CisrCWVtaXRfaW5zbiAocGF0KTsKKysKKysJcmV0dXJuIHRhcmdldDsKKysgICAgICB9CisrICAgIGNhc2UgQVZSMzJfQlVJTFRJTl9NQUNTQVRISF9XOgorKyAgICBjYXNlIEFWUjMyX0JVSUxUSU5fTUFDV0hfRDoKKysgICAgY2FzZSBBVlIzMl9CVUlMVElOX01BQ0hIX0Q6CisrICAgICAgeworKwlhcmcwID0gVFJFRV9WQUxVRSAoYXJnbGlzdCk7CisrCWFyZzEgPSBUUkVFX1ZBTFVFIChUUkVFX0NIQUlOIChhcmdsaXN0KSk7CisrCWFyZzIgPSBUUkVFX1ZBTFVFIChUUkVFX0NIQUlOIChUUkVFX0NIQUlOIChhcmdsaXN0KSkpOworKwlvcDAgPSBleHBhbmRfZXhwciAoYXJnMCwgTlVMTF9SVFgsIFZPSURtb2RlLCAwKTsKKysJb3AxID0gZXhwYW5kX2V4cHIgKGFyZzEsIE5VTExfUlRYLCBWT0lEbW9kZSwgMCk7CisrCW9wMiA9IGV4cGFuZF9leHByIChhcmcyLCBOVUxMX1JUWCwgVk9JRG1vZGUsIDApOworKworKwlpY29kZSA9ICgoZmNvZGUgPT0gQVZSMzJfQlVJTFRJTl9NQUNTQVRISF9XKSA/IENPREVfRk9SX21hY3NhdGhoX3cgOgorKwkJIChmY29kZSA9PSBBVlIzMl9CVUlMVElOX01BQ1dIX0QpID8gQ09ERV9GT1JfbWFjd2hfZCA6CisrCQkgQ09ERV9GT1JfbWFjaGhfZCk7CisrCisrCXRtb2RlID0gaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzBdLm1vZGU7CisrCW1vZGUwID0gaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzFdLm1vZGU7CisrCW1vZGUxID0gaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzJdLm1vZGU7CisrCisrCisrCWlmICghdGFyZ2V0CisrCSAgICB8fCBHRVRfTU9ERSAodGFyZ2V0KSAhPSB0bW9kZQorKwkgICAgfHwgISgqaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzBdLnByZWRpY2F0ZSkgKHRhcmdldCwgdG1vZGUpKQorKwkgIHRhcmdldCA9IGdlbl9yZWdfcnR4ICh0bW9kZSk7CisrCisrCWlmICghKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMF0ucHJlZGljYXRlKSAob3AwLCB0bW9kZSkpCisrCSAgeworKwkgICAgLyogSWYgb3AwIGlzIGFscmVhZHkgYSByZWcgd2UgbXVzdCBjYXN0IGl0IHRvIHRoZSBjb3JyZWN0IG1vZGUuICovCisrCSAgICBpZiAoUkVHX1AgKG9wMCkpCisrCSAgICAgIG9wMCA9IGNvbnZlcnRfdG9fbW9kZSAodG1vZGUsIG9wMCwgMSk7CisrCSAgICBlbHNlCisrCSAgICAgIG9wMCA9IGNvcHlfdG9fbW9kZV9yZWcgKHRtb2RlLCBvcDApOworKwkgIH0KKysKKysJaWYgKCEoKmluc25fZGF0YVtpY29kZV0ub3BlcmFuZFsxXS5wcmVkaWNhdGUpIChvcDEsIG1vZGUwKSkKKysJICB7CisrCSAgICAvKiBJZiBvcDEgaXMgYWxyZWFkeSBhIHJlZyB3ZSBtdXN0IGNhc3QgaXQgdG8gdGhlIGNvcnJlY3QgbW9kZS4gKi8KKysJICAgIGlmIChSRUdfUCAob3AxKSkKKysJICAgICAgb3AxID0gY29udmVydF90b19tb2RlIChtb2RlMCwgb3AxLCAxKTsKKysJICAgIGVsc2UKKysJICAgICAgb3AxID0gY29weV90b19tb2RlX3JlZyAobW9kZTAsIG9wMSk7CisrCSAgfQorKworKwlpZiAoISgqaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzJdLnByZWRpY2F0ZSkgKG9wMiwgbW9kZTEpKQorKwkgIHsKKysJICAgIC8qIElmIG9wMSBpcyBhbHJlYWR5IGEgcmVnIHdlIG11c3QgY2FzdCBpdCB0byB0aGUgY29ycmVjdCBtb2RlLiAqLworKwkgICAgaWYgKFJFR19QIChvcDIpKQorKwkgICAgICBvcDIgPSBjb252ZXJ0X3RvX21vZGUgKG1vZGUxLCBvcDIsIDEpOworKwkgICAgZWxzZQorKwkgICAgICBvcDIgPSBjb3B5X3RvX21vZGVfcmVnIChtb2RlMSwgb3AyKTsKKysJICB9CisrCisrCWVtaXRfbW92ZV9pbnNuICh0YXJnZXQsIG9wMCk7CisrCisrCXBhdCA9IEdFTl9GQ04gKGljb2RlKSAodGFyZ2V0LCBvcDEsIG9wMik7CisrCWlmICghcGF0KQorKwkgIHJldHVybiAwOworKwllbWl0X2luc24gKHBhdCk7CisrCXJldHVybiB0YXJnZXQ7CisrICAgICAgfQorKyAgICBjYXNlIEFWUjMyX0JVSUxUSU5fTVZSQ19XOgorKyAgICBjYXNlIEFWUjMyX0JVSUxUSU5fTVZSQ19EOgorKyAgICAgIHsKKysJYXJnMCA9IFRSRUVfVkFMVUUgKGFyZ2xpc3QpOworKwlhcmcxID0gVFJFRV9WQUxVRSAoVFJFRV9DSEFJTiAoYXJnbGlzdCkpOworKwlhcmcyID0gVFJFRV9WQUxVRSAoVFJFRV9DSEFJTiAoVFJFRV9DSEFJTiAoYXJnbGlzdCkpKTsKKysJb3AwID0gZXhwYW5kX2V4cHIgKGFyZzAsIE5VTExfUlRYLCBWT0lEbW9kZSwgMCk7CisrCW9wMSA9IGV4cGFuZF9leHByIChhcmcxLCBOVUxMX1JUWCwgVk9JRG1vZGUsIDApOworKwlvcDIgPSBleHBhbmRfZXhwciAoYXJnMiwgTlVMTF9SVFgsIFZPSURtb2RlLCAwKTsKKysKKysJaWYgKGZjb2RlID09IEFWUjMyX0JVSUxUSU5fTVZSQ19XKQorKwkgIGljb2RlID0gQ09ERV9GT1JfbXZyY3NpOworKwllbHNlCisrCSAgaWNvZGUgPSBDT0RFX0ZPUl9tdnJjZGk7CisrCisrCWlmICghKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMF0ucHJlZGljYXRlKSAob3AwLCBTSW1vZGUpKQorKwkgIHsKKysJICAgIGVycm9yICgiUGFyYW1ldGVyIDEgaXMgbm90IGEgdmFsaWQgY29wcm9jZXNzb3IgbnVtYmVyLiIpOworKwkgICAgZXJyb3IgKCJOdW1iZXIgc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgNy4iKTsKKysJICAgIHJldHVybiBOVUxMX1JUWDsKKysJICB9CisrCisrCWlmICghKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMV0ucHJlZGljYXRlKSAob3AxLCBTSW1vZGUpKQorKwkgIHsKKysJICAgIGVycm9yICgiUGFyYW1ldGVyIDIgaXMgbm90IGEgdmFsaWQgY29wcm9jZXNzb3IgcmVnaXN0ZXIgbnVtYmVyLiIpOworKwkgICAgZXJyb3IgKCJOdW1iZXIgc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgMTUuIik7CisrCSAgICByZXR1cm4gTlVMTF9SVFg7CisrCSAgfQorKworKwlpZiAoR0VUX0NPREUgKG9wMikgPT0gQ09OU1RfSU5UCisrCSAgICB8fCBHRVRfQ09ERSAob3AyKSA9PSBDT05TVAorKwkgICAgfHwgR0VUX0NPREUgKG9wMikgPT0gU1lNQk9MX1JFRiB8fCBHRVRfQ09ERSAob3AyKSA9PSBMQUJFTF9SRUYpCisrCSAgeworKwkgICAgb3AyID0gZm9yY2VfY29uc3RfbWVtIChpbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMl0ubW9kZSwgb3AyKTsKKysJICB9CisrCisrCWlmICghKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMl0ucHJlZGljYXRlKSAob3AyLCBHRVRfTU9ERSAob3AyKSkpCisrCSAgb3AyID0gY29weV90b19tb2RlX3JlZyAoaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzJdLm1vZGUsIG9wMik7CisrCisrCisrCXBhdCA9IEdFTl9GQ04gKGljb2RlKSAob3AwLCBvcDEsIG9wMik7CisrCWlmICghcGF0KQorKwkgIHJldHVybiAwOworKwllbWl0X2luc24gKHBhdCk7CisrCisrCXJldHVybiBOVUxMX1JUWDsKKysgICAgICB9CisrICAgIGNhc2UgQVZSMzJfQlVJTFRJTl9DT1A6CisrICAgICAgeworKwlydHggb3AzLCBvcDQ7CisrCXRyZWUgYXJnMywgYXJnNDsKKysJaWNvZGUgPSBDT0RFX0ZPUl9jb3A7CisrCWFyZzAgPSBUUkVFX1ZBTFVFIChhcmdsaXN0KTsKKysJYXJnMSA9IFRSRUVfVkFMVUUgKFRSRUVfQ0hBSU4gKGFyZ2xpc3QpKTsKKysJYXJnMiA9IFRSRUVfVkFMVUUgKFRSRUVfQ0hBSU4gKFRSRUVfQ0hBSU4gKGFyZ2xpc3QpKSk7CisrCWFyZzMgPSBUUkVFX1ZBTFVFIChUUkVFX0NIQUlOIChUUkVFX0NIQUlOIChUUkVFX0NIQUlOIChhcmdsaXN0KSkpKTsKKysJYXJnNCA9CisrCSAgVFJFRV9WQUxVRSAoVFJFRV9DSEFJTgorKwkJICAgICAgKFRSRUVfQ0hBSU4gKFRSRUVfQ0hBSU4gKFRSRUVfQ0hBSU4gKGFyZ2xpc3QpKSkpKTsKKysJb3AwID0gZXhwYW5kX2V4cHIgKGFyZzAsIE5VTExfUlRYLCBWT0lEbW9kZSwgMCk7CisrCW9wMSA9IGV4cGFuZF9leHByIChhcmcxLCBOVUxMX1JUWCwgVk9JRG1vZGUsIDApOworKwlvcDIgPSBleHBhbmRfZXhwciAoYXJnMiwgTlVMTF9SVFgsIFZPSURtb2RlLCAwKTsKKysJb3AzID0gZXhwYW5kX2V4cHIgKGFyZzMsIE5VTExfUlRYLCBWT0lEbW9kZSwgMCk7CisrCW9wNCA9IGV4cGFuZF9leHByIChhcmc0LCBOVUxMX1JUWCwgVk9JRG1vZGUsIDApOworKworKwlpZiAoISgqaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzBdLnByZWRpY2F0ZSkgKG9wMCwgU0ltb2RlKSkKKysJICB7CisrCSAgICBlcnJvcgorKwkgICAgICAoIlBhcmFtZXRlciAxIHRvIF9fYnVpbHRpbl9jb3AgaXMgbm90IGEgdmFsaWQgY29wcm9jZXNzb3IgbnVtYmVyLiIpOworKwkgICAgZXJyb3IgKCJOdW1iZXIgc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgNy4iKTsKKysJICAgIHJldHVybiBOVUxMX1JUWDsKKysJICB9CisrCisrCWlmICghKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMV0ucHJlZGljYXRlKSAob3AxLCBTSW1vZGUpKQorKwkgIHsKKysJICAgIGVycm9yCisrCSAgICAgICgiUGFyYW1ldGVyIDIgdG8gX19idWlsdGluX2NvcCBpcyBub3QgYSB2YWxpZCBjb3Byb2Nlc3NvciByZWdpc3RlciBudW1iZXIuIik7CisrCSAgICBlcnJvciAoIk51bWJlciBzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAxNS4iKTsKKysJICAgIHJldHVybiBOVUxMX1JUWDsKKysJICB9CisrCisrCWlmICghKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMl0ucHJlZGljYXRlKSAob3AyLCBTSW1vZGUpKQorKwkgIHsKKysJICAgIGVycm9yCisrCSAgICAgICgiUGFyYW1ldGVyIDMgdG8gX19idWlsdGluX2NvcCBpcyBub3QgYSB2YWxpZCBjb3Byb2Nlc3NvciByZWdpc3RlciBudW1iZXIuIik7CisrCSAgICBlcnJvciAoIk51bWJlciBzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAxNS4iKTsKKysJICAgIHJldHVybiBOVUxMX1JUWDsKKysJICB9CisrCisrCWlmICghKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbM10ucHJlZGljYXRlKSAob3AzLCBTSW1vZGUpKQorKwkgIHsKKysJICAgIGVycm9yCisrCSAgICAgICgiUGFyYW1ldGVyIDQgdG8gX19idWlsdGluX2NvcCBpcyBub3QgYSB2YWxpZCBjb3Byb2Nlc3NvciByZWdpc3RlciBudW1iZXIuIik7CisrCSAgICBlcnJvciAoIk51bWJlciBzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAxNS4iKTsKKysJICAgIHJldHVybiBOVUxMX1JUWDsKKysJICB9CisrCisrCWlmICghKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbNF0ucHJlZGljYXRlKSAob3A0LCBTSW1vZGUpKQorKwkgIHsKKysJICAgIGVycm9yCisrCSAgICAgICgiUGFyYW1ldGVyIDUgdG8gX19idWlsdGluX2NvcCBpcyBub3QgYSB2YWxpZCBjb3Byb2Nlc3NvciBvcGVyYXRpb24uIik7CisrCSAgICBlcnJvciAoIk51bWJlciBzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAxMjcuIik7CisrCSAgICByZXR1cm4gTlVMTF9SVFg7CisrCSAgfQorKworKwlwYXQgPSBHRU5fRkNOIChpY29kZSkgKG9wMCwgb3AxLCBvcDIsIG9wMywgb3A0KTsKKysJaWYgKCFwYXQpCisrCSAgcmV0dXJuIDA7CisrCWVtaXRfaW5zbiAocGF0KTsKKysKKysJcmV0dXJuIHRhcmdldDsKKysgICAgICB9CisrICAgIGNhc2UgQVZSMzJfQlVJTFRJTl9NRU1TOgorKyAgICBjYXNlIEFWUjMyX0JVSUxUSU5fTUVNQzoKKysgICAgY2FzZSBBVlIzMl9CVUlMVElOX01FTVQ6CisrICAgICAgeworKyAgICAgICAgaWYgKCFUQVJHRVRfUk1XKQorKyAgICAgICAgICBlcnJvciAoIlRyeWluZyB0byB1c2UgX19idWlsdGluX21lbShzL2MvdCkgd2hlbiB0YXJnZXQgZG9lcyBub3Qgc3VwcG9ydCBSTVcgaW5zbnMuIik7CisrCisrICAgICAgICBzd2l0Y2ggKGZjb2RlKSB7CisrICAgICAgICBjYXNlIEFWUjMyX0JVSUxUSU5fTUVNUzoKKysgICAgICAgICAgaWNvZGUgPSBDT0RFX0ZPUl9pb3JzaTM7CisrICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBBVlIzMl9CVUlMVElOX01FTUM6CisrICAgICAgICAgIGljb2RlID0gQ09ERV9GT1JfYW5kc2kzOworKyAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgQVZSMzJfQlVJTFRJTl9NRU1UOgorKyAgICAgICAgICBpY29kZSA9IENPREVfRk9SX3hvcnNpMzsKKysgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrCisrICAgICAgICBhcmcwID0gVFJFRV9WQUxVRSAoYXJnbGlzdCk7CisrICAgICAgICBhcmcxID0gVFJFRV9WQUxVRSAoVFJFRV9DSEFJTiAoYXJnbGlzdCkpOworKyAgICAgICAgb3AwID0gZXhwYW5kX2V4cHIgKGFyZzAsIE5VTExfUlRYLCBWT0lEbW9kZSwgMCk7CisrICAgICAgICBpZiAoIEdFVF9DT0RFIChvcDApID09IFNZTUJPTF9SRUYgKQorKyAgICAgICAgICAvLyBUaGlzIHN5bWJvbCBtdXN0IGJlIFJNVyBhZGRyZXNzYWJsZQorKyAgICAgICAgICBTWU1CT0xfUkVGX0ZMQUdTIChvcDApIHw9ICgxIDw8IFNZTUJPTF9GTEFHX1JNV19BRERSX1NISUZUKTsKKysgICAgICAgIG9wMCA9IGdlbl9ydHhfTUVNKFNJbW9kZSwgb3AwKTsKKysgICAgICAgIG9wMSA9IGV4cGFuZF9leHByIChhcmcxLCBOVUxMX1JUWCwgVk9JRG1vZGUsIDApOworKyAgICAgICAgbW9kZTAgPSBpbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMV0ubW9kZTsKKysKKysKKysgICAgICAgIGlmICghKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMV0ucHJlZGljYXRlKSAob3AwLCBtb2RlMCkpCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBlcnJvciAoIlBhcmFtZXRlciAxIHRvIF9fYnVpbHRpbl9tZW0ocy9jL3QpIG11c3QgYmUgYSBLczE1PDwyIGFkZHJlc3Mgb3IgYSBybXcgYWRkcmVzc2FibGUgc3ltYm9sLiIpOworKyAgICAgICAgICB9CisrCisrICAgICAgICBpZiAoICFDT05TVF9JTlRfUCAob3AxKQorKyAgICAgICAgICAgICB8fCBJTlRWQUwgKG9wMSkgPiAzMQorKyAgICAgICAgICAgICB8fCBJTlRWQUwgKG9wMSkgPCAwICkKKysgICAgICAgICAgZXJyb3IgKCJQYXJhbWV0ZXIgMiB0byBfX2J1aWx0aW5fbWVtKHMvYy90KSBtdXN0IGJlIGEgY29uc3RhbnQgYmV0d2VlbiAwIGFuZCAzMS4iKTsKKysKKysgICAgICAgIGlmICggZmNvZGUgPT0gQVZSMzJfQlVJTFRJTl9NRU1DICkKKysgICAgICAgICAgb3AxID0gR0VOX0lOVCgofigxIDw8IElOVFZBTChvcDEpKSkmMHhmZmZmZmZmZik7CisrICAgICAgICBlbHNlCisrICAgICAgICAgIG9wMSA9IEdFTl9JTlQoKDEgPDwgSU5UVkFMKG9wMSkpJjB4ZmZmZmZmZmYpOworKyAgICAgICAgcGF0ID0gR0VOX0ZDTiAoaWNvZGUpIChvcDAsIG9wMCwgb3AxKTsKKysgICAgICAgIGlmICghcGF0KQorKyAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIGVtaXRfaW5zbiAocGF0KTsKKysgICAgICAgIHJldHVybiBvcDA7CisrICAgICAgfQorKworKyAgICB9CisrCisrICBmb3IgKGkgPSAwLCBkID0gYmRlc2NfMmFyZzsgaSA8IEFSUkFZX1NJWkUgKGJkZXNjXzJhcmcpOyBpKyssIGQrKykKKysgICAgaWYgKGQtPmNvZGUgPT0gZmNvZGUpCisrICAgICAgcmV0dXJuIGF2cjMyX2V4cGFuZF9iaW5vcF9idWlsdGluIChkLT5pY29kZSwgYXJnbGlzdCwgdGFyZ2V0KTsKKysKKysKKysgIC8qIEBAQCBTaG91bGQgcmVhbGx5IGRvIHNvbWV0aGluZyBzZW5zaWJsZSBoZXJlLiAgKi8KKysgIHJldHVybiBOVUxMX1JUWDsKKyt9CisrCisrCisrLyogSGFuZGxlIGFuICJpbnRlcnJ1cHQiIG9yICJpc3IiIGF0dHJpYnV0ZTsKKysgICBhcmd1bWVudHMgYXMgaW4gc3RydWN0IGF0dHJpYnV0ZV9zcGVjLmhhbmRsZXIuICAqLworKworK3N0YXRpYyB0cmVlCisrYXZyMzJfaGFuZGxlX2lzcl9hdHRyaWJ1dGUgKHRyZWUgKiBub2RlLCB0cmVlIG5hbWUsIHRyZWUgYXJncywKKysJCQkgICAgaW50IGZsYWdzLCBib29sICogbm9fYWRkX2F0dHJzKQorK3sKKysgIGlmIChERUNMX1AgKCpub2RlKSkKKysgICAgeworKyAgICAgIGlmIChUUkVFX0NPREUgKCpub2RlKSAhPSBGVU5DVElPTl9ERUNMKQorKwl7CisrCSAgd2FybmluZyAoT1BUX1dhdHRyaWJ1dGVzLCJgJXMnIGF0dHJpYnV0ZSBvbmx5IGFwcGxpZXMgdG8gZnVuY3Rpb25zIiwKKysJCSAgIElERU5USUZJRVJfUE9JTlRFUiAobmFtZSkpOworKwkgICpub19hZGRfYXR0cnMgPSB0cnVlOworKwl9CisrICAgICAgLyogRklYTUU6IHRoZSBhcmd1bWVudCBpZiBhbnkgaXMgY2hlY2tlZCBmb3IgdHlwZSBhdHRyaWJ1dGVzOyBzaG91bGQgaXQKKysgICAgICAgICBiZSBjaGVja2VkIGZvciBkZWNsIG9uZXM/ICovCisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGlmIChUUkVFX0NPREUgKCpub2RlKSA9PSBGVU5DVElPTl9UWVBFCisrCSAgfHwgVFJFRV9DT0RFICgqbm9kZSkgPT0gTUVUSE9EX1RZUEUpCisrCXsKKysJICBpZiAoYXZyMzJfaXNyX3ZhbHVlIChhcmdzKSA9PSBBVlIzMl9GVF9VTktOT1dOKQorKwkgICAgeworKwkgICAgICB3YXJuaW5nIChPUFRfV2F0dHJpYnV0ZXMsImAlcycgYXR0cmlidXRlIGlnbm9yZWQiLCBJREVOVElGSUVSX1BPSU5URVIgKG5hbWUpKTsKKysJICAgICAgKm5vX2FkZF9hdHRycyA9IHRydWU7CisrCSAgICB9CisrCX0KKysgICAgICBlbHNlIGlmIChUUkVFX0NPREUgKCpub2RlKSA9PSBQT0lOVEVSX1RZUEUKKysJICAgICAgICYmIChUUkVFX0NPREUgKFRSRUVfVFlQRSAoKm5vZGUpKSA9PSBGVU5DVElPTl9UWVBFCisrCQkgICB8fCBUUkVFX0NPREUgKFRSRUVfVFlQRSAoKm5vZGUpKSA9PSBNRVRIT0RfVFlQRSkKKysJICAgICAgICYmIGF2cjMyX2lzcl92YWx1ZSAoYXJncykgIT0gQVZSMzJfRlRfVU5LTk9XTikKKysJeworKwkgICpub2RlID0gYnVpbGRfdmFyaWFudF90eXBlX2NvcHkgKCpub2RlKTsKKysJICBUUkVFX1RZUEUgKCpub2RlKSA9IGJ1aWxkX3R5cGVfYXR0cmlidXRlX3ZhcmlhbnQKKysJICAgIChUUkVFX1RZUEUgKCpub2RlKSwKKysJICAgICB0cmVlX2NvbnMgKG5hbWUsIGFyZ3MsIFRZUEVfQVRUUklCVVRFUyAoVFJFRV9UWVBFICgqbm9kZSkpKSk7CisrCSAgKm5vX2FkZF9hdHRycyA9IHRydWU7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvKiBQb3NzaWJseSBwYXNzIHRoaXMgYXR0cmlidXRlIG9uIGZyb20gdGhlIHR5cGUgdG8gYSBkZWNsLiAgKi8KKysJICBpZiAoZmxhZ3MgJiAoKGludCkgQVRUUl9GTEFHX0RFQ0xfTkVYVAorKwkJICAgICAgIHwgKGludCkgQVRUUl9GTEFHX0ZVTkNUSU9OX05FWFQKKysJCSAgICAgICB8IChpbnQpIEFUVFJfRkxBR19BUlJBWV9ORVhUKSkKKysJICAgIHsKKysJICAgICAgKm5vX2FkZF9hdHRycyA9IHRydWU7CisrCSAgICAgIHJldHVybiB0cmVlX2NvbnMgKG5hbWUsIGFyZ3MsIE5VTExfVFJFRSk7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICB3YXJuaW5nIChPUFRfV2F0dHJpYnV0ZXMsImAlcycgYXR0cmlidXRlIGlnbm9yZWQiLCBJREVOVElGSUVSX1BPSU5URVIgKG5hbWUpKTsKKysJICAgIH0KKysJfQorKyAgICB9CisrCisrICByZXR1cm4gTlVMTF9UUkVFOworK30KKysKKysvKiBIYW5kbGUgYW4gYXR0cmlidXRlIHJlcXVpcmluZyBhIEZVTkNUSU9OX0RFQ0w7CisrICAgYXJndW1lbnRzIGFzIGluIHN0cnVjdCBhdHRyaWJ1dGVfc3BlYy5oYW5kbGVyLiAgKi8KKytzdGF0aWMgdHJlZQorK2F2cjMyX2hhbmRsZV9mbmRlY2xfYXR0cmlidXRlICh0cmVlICogbm9kZSwgdHJlZSBuYW1lLAorKwkJCSAgICAgICB0cmVlIGFyZ3MgQVRUUklCVVRFX1VOVVNFRCwKKysJCQkgICAgICAgaW50IGZsYWdzIEFUVFJJQlVURV9VTlVTRUQsCisrCQkJICAgICAgIGJvb2wgKiBub19hZGRfYXR0cnMpCisreworKyAgaWYgKFRSRUVfQ09ERSAoKm5vZGUpICE9IEZVTkNUSU9OX0RFQ0wpCisrICAgIHsKKysgICAgICB3YXJuaW5nIChPUFRfV2F0dHJpYnV0ZXMsIiVxcyBhdHRyaWJ1dGUgb25seSBhcHBsaWVzIHRvIGZ1bmN0aW9ucyIsCisrCSAgICAgICBJREVOVElGSUVSX1BPSU5URVIgKG5hbWUpKTsKKysgICAgICAqbm9fYWRkX2F0dHJzID0gdHJ1ZTsKKysgICAgfQorKworKyAgcmV0dXJuIE5VTExfVFJFRTsKKyt9CisrCisrCisrLyogSGFuZGxlIGFuIGFjYWxsIGF0dHJpYnV0ZTsKKysgICBhcmd1bWVudHMgYXMgaW4gc3RydWN0IGF0dHJpYnV0ZV9zcGVjLmhhbmRsZXIuICAqLworKworK3N0YXRpYyB0cmVlCisrYXZyMzJfaGFuZGxlX2FjYWxsX2F0dHJpYnV0ZSAodHJlZSAqIG5vZGUsIHRyZWUgbmFtZSwKKysJCQkgICAgICB0cmVlIGFyZ3MgQVRUUklCVVRFX1VOVVNFRCwKKysJCQkgICAgICBpbnQgZmxhZ3MgQVRUUklCVVRFX1VOVVNFRCwgYm9vbCAqIG5vX2FkZF9hdHRycykKKyt7CisrICBpZiAoVFJFRV9DT0RFICgqbm9kZSkgPT0gRlVOQ1RJT05fVFlQRSB8fCBUUkVFX0NPREUgKCpub2RlKSA9PSBNRVRIT0RfVFlQRSkKKysgICAgeworKyAgICAgIHdhcm5pbmcgKE9QVF9XYXR0cmlidXRlcywiYCVzJyBhdHRyaWJ1dGUgbm90IHlldCBzdXBwb3J0ZWQuLi4iLAorKwkgICAgICAgSURFTlRJRklFUl9QT0lOVEVSIChuYW1lKSk7CisrICAgICAgKm5vX2FkZF9hdHRycyA9IHRydWU7CisrICAgICAgcmV0dXJuIE5VTExfVFJFRTsKKysgICAgfQorKworKyAgd2FybmluZyAoT1BUX1dhdHRyaWJ1dGVzLCJgJXMnIGF0dHJpYnV0ZSBvbmx5IGFwcGxpZXMgdG8gZnVuY3Rpb25zIiwKKysJICAgSURFTlRJRklFUl9QT0lOVEVSIChuYW1lKSk7CisrICAqbm9fYWRkX2F0dHJzID0gdHJ1ZTsKKysgIHJldHVybiBOVUxMX1RSRUU7CisrfQorKworKworKy8qIFJldHVybiAwIGlmIHRoZSBhdHRyaWJ1dGVzIGZvciB0d28gdHlwZXMgYXJlIGluY29tcGF0aWJsZSwgMSBpZiB0aGV5CisrICAgYXJlIGNvbXBhdGlibGUsIGFuZCAyIGlmIHRoZXkgYXJlIG5lYXJseSBjb21wYXRpYmxlICh3aGljaCBjYXVzZXMgYQorKyAgIHdhcm5pbmcgdG8gYmUgZ2VuZXJhdGVkKS4gICovCisrCisrc3RhdGljIGludAorK2F2cjMyX2NvbXBfdHlwZV9hdHRyaWJ1dGVzICh0cmVlIHR5cGUxLCB0cmVlIHR5cGUyKQorK3sKKysgIGludCBhY2FsbDEsIGFjYWxsMiwgaXNyMSwgaXNyMiwgbmFrZWQxLCBuYWtlZDI7CisrCisrICAvKiBDaGVjayBmb3IgbWlzbWF0Y2ggb2Ygbm9uLWRlZmF1bHQgY2FsbGluZyBjb252ZW50aW9uLiAgKi8KKysgIGlmIChUUkVFX0NPREUgKHR5cGUxKSAhPSBGVU5DVElPTl9UWVBFKQorKyAgICByZXR1cm4gMTsKKysKKysgIC8qIENoZWNrIGZvciBtaXNtYXRjaGVkIGNhbGwgYXR0cmlidXRlcy4gICovCisrICBhY2FsbDEgPSBsb29rdXBfYXR0cmlidXRlICgiYWNhbGwiLCBUWVBFX0FUVFJJQlVURVMgKHR5cGUxKSkgIT0gTlVMTDsKKysgIGFjYWxsMiA9IGxvb2t1cF9hdHRyaWJ1dGUgKCJhY2FsbCIsIFRZUEVfQVRUUklCVVRFUyAodHlwZTIpKSAhPSBOVUxMOworKyAgbmFrZWQxID0gbG9va3VwX2F0dHJpYnV0ZSAoIm5ha2VkIiwgVFlQRV9BVFRSSUJVVEVTICh0eXBlMSkpICE9IE5VTEw7CisrICBuYWtlZDIgPSBsb29rdXBfYXR0cmlidXRlICgibmFrZWQiLCBUWVBFX0FUVFJJQlVURVMgKHR5cGUyKSkgIT0gTlVMTDsKKysgIGlzcjEgPSBsb29rdXBfYXR0cmlidXRlICgiaXNyIiwgVFlQRV9BVFRSSUJVVEVTICh0eXBlMSkpICE9IE5VTEw7CisrICBpZiAoIWlzcjEpCisrICAgIGlzcjEgPSBsb29rdXBfYXR0cmlidXRlICgiaW50ZXJydXB0IiwgVFlQRV9BVFRSSUJVVEVTICh0eXBlMSkpICE9IE5VTEw7CisrCisrICBpc3IyID0gbG9va3VwX2F0dHJpYnV0ZSAoImlzciIsIFRZUEVfQVRUUklCVVRFUyAodHlwZTIpKSAhPSBOVUxMOworKyAgaWYgKCFpc3IyKQorKyAgICBpc3IyID0gbG9va3VwX2F0dHJpYnV0ZSAoImludGVycnVwdCIsIFRZUEVfQVRUUklCVVRFUyAodHlwZTIpKSAhPSBOVUxMOworKworKyAgaWYgKChhY2FsbDEgJiYgaXNyMikKKysgICAgICB8fCAoYWNhbGwyICYmIGlzcjEpIHx8IChuYWtlZDEgJiYgaXNyMikgfHwgKG5ha2VkMiAmJiBpc3IxKSkKKysgICAgcmV0dXJuIDA7CisrCisrICByZXR1cm4gMTsKKyt9CisrCisrCisrLyogQ29tcHV0ZXMgdGhlIHR5cGUgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24uICAqLworKworK3N0YXRpYyB1bnNpZ25lZCBsb25nCisrYXZyMzJfY29tcHV0ZV9mdW5jX3R5cGUgKHZvaWQpCisreworKyAgdW5zaWduZWQgbG9uZyB0eXBlID0gQVZSMzJfRlRfVU5LTk9XTjsKKysgIHRyZWUgYTsKKysgIHRyZWUgYXR0cjsKKysKKysgIGlmIChUUkVFX0NPREUgKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCkgIT0gRlVOQ1RJT05fREVDTCkKKysgICAgYWJvcnQgKCk7CisrCisrICAvKiBEZWNpZGUgaWYgdGhlIGN1cnJlbnQgZnVuY3Rpb24gaXMgdm9sYXRpbGUuICBTdWNoIGZ1bmN0aW9ucyBuZXZlcgorKyAgICAgcmV0dXJuLCBhbmQgbWFueSBtZW1vcnkgY3ljbGVzIGNhbiBiZSBzYXZlZCBieSBub3Qgc3RvcmluZyByZWdpc3RlcgorKyAgICAgdmFsdWVzIHRoYXQgd2lsbCBuZXZlciBiZSBuZWVkZWQgYWdhaW4uICBUaGlzIG9wdGltaXphdGlvbiB3YXMgYWRkZWQgdG8KKysgICAgIHNwZWVkIHVwIGNvbnRleHQgc3dpdGNoaW5nIGluIGEga2VybmVsIGFwcGxpY2F0aW9uLiAgKi8KKysgIGlmIChvcHRpbWl6ZSA+IDAKKysgICAgICAmJiBUUkVFX05PVEhST1cgKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCkKKysgICAgICAmJiBUUkVFX1RISVNfVk9MQVRJTEUgKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCkpCisrICAgIHR5cGUgfD0gQVZSMzJfRlRfVk9MQVRJTEU7CisrCisrICBpZiAoY2Z1bi0+c3RhdGljX2NoYWluX2RlY2wgIT0gTlVMTCkKKysgICAgdHlwZSB8PSBBVlIzMl9GVF9ORVNURUQ7CisrCisrICBhdHRyID0gREVDTF9BVFRSSUJVVEVTIChjdXJyZW50X2Z1bmN0aW9uX2RlY2wpOworKworKyAgYSA9IGxvb2t1cF9hdHRyaWJ1dGUgKCJpc3IiLCBhdHRyKTsKKysgIGlmIChhID09IE5VTExfVFJFRSkKKysgICAgYSA9IGxvb2t1cF9hdHRyaWJ1dGUgKCJpbnRlcnJ1cHQiLCBhdHRyKTsKKysKKysgIGlmIChhID09IE5VTExfVFJFRSkKKysgICAgdHlwZSB8PSBBVlIzMl9GVF9OT1JNQUw7CisrICBlbHNlCisrICAgIHR5cGUgfD0gYXZyMzJfaXNyX3ZhbHVlIChUUkVFX1ZBTFVFIChhKSk7CisrCisrCisrICBhID0gbG9va3VwX2F0dHJpYnV0ZSAoImFjYWxsIiwgYXR0cik7CisrICBpZiAoYSAhPSBOVUxMX1RSRUUpCisrICAgIHR5cGUgfD0gQVZSMzJfRlRfQUNBTEw7CisrCisrICBhID0gbG9va3VwX2F0dHJpYnV0ZSAoIm5ha2VkIiwgYXR0cik7CisrICBpZiAoYSAhPSBOVUxMX1RSRUUpCisrICAgIHR5cGUgfD0gQVZSMzJfRlRfTkFLRUQ7CisrCisrICByZXR1cm4gdHlwZTsKKyt9CisrCisrLyogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi4gICovCisrCisrc3RhdGljIHVuc2lnbmVkIGxvbmcKKythdnIzMl9jdXJyZW50X2Z1bmNfdHlwZSAodm9pZCkKKyt7CisrICBpZiAoQVZSMzJfRlVOQ19UWVBFIChjZnVuLT5tYWNoaW5lLT5mdW5jX3R5cGUpID09IEFWUjMyX0ZUX1VOS05PV04pCisrICAgIGNmdW4tPm1hY2hpbmUtPmZ1bmNfdHlwZSA9IGF2cjMyX2NvbXB1dGVfZnVuY190eXBlICgpOworKworKyAgcmV0dXJuIGNmdW4tPm1hY2hpbmUtPmZ1bmNfdHlwZTsKKyt9CisrCisrLyoKKysgICBUaGlzIHRhcmdldCBob29rIHNob3VsZCByZXR1cm4gdHJ1ZSBpZiB3ZSBzaG91bGQgbm90IHBhc3MgdHlwZSBzb2xlbHkKKysgICBpbiByZWdpc3RlcnMuIFRoZSBmaWxlIGV4cHIuaCBkZWZpbmVzIGEgZGVmaW5pdGlvbiB0aGF0IGlzIHVzdWFsbHkgYXBwcm9wcmlhdGUsCisrICAgcmVmZXIgdG8gZXhwci5oIGZvciBhZGRpdGlvbmFsIGRvY3VtZW50YXRpb24uCisrKi8KKytib29sCisrYXZyMzJfbXVzdF9wYXNzX2luX3N0YWNrIChlbnVtIG1hY2hpbmVfbW9kZSBtb2RlIEFUVFJJQlVURV9VTlVTRUQsIHRyZWUgdHlwZSkKKyt7CisrICBpZiAodHlwZSAmJiBBR0dSRUdBVEVfVFlQRV9QICh0eXBlKQorKyAgICAgIC8qIElmIHRoZSBhbGlnbm1lbnQgaXMgbGVzcyB0aGFuIHRoZSBzaXplIHRoZW4gcGFzcyBpbiB0aGUgc3RydWN0IG9uCisrICAgICAgICAgdGhlIHN0YWNrLiAqLworKyAgICAgICYmICgodW5zaWduZWQgaW50KSBUWVBFX0FMSUdOX1VOSVQgKHR5cGUpIDwKKysJICAodW5zaWduZWQgaW50KSBpbnRfc2l6ZV9pbl9ieXRlcyAodHlwZSkpCisrICAgICAgLyogSWYgd2Ugc3VwcG9ydCB1bmFsaWduZWQgd29yZCBhY2Nlc3NlcyB0aGVuIHN0cnVjdHMgb2Ygc2l6ZSA0IGFuZCA4CisrICAgICAgICAgY2FuIGhhdmUgYW55IGFsaWdubWVudCBhbmQgc3RpbGwgYmUgcGFzc2VkIGluIHJlZ2lzdGVycy4gKi8KKysgICAgICAmJiAhKFRBUkdFVF9VTkFMSUdORURfV09SRAorKwkgICAmJiAoaW50X3NpemVfaW5fYnl0ZXMgKHR5cGUpID09IDQKKysJICAgICAgIHx8IGludF9zaXplX2luX2J5dGVzICh0eXBlKSA9PSA4KSkKKysgICAgICAvKiBEb3VibGUgd29yZCBzdHJ1Y3RzIG5lZWQgb25seSBhIHdvcmQgYWxpZ25tZW50LiAqLworKyAgICAgICYmICEoaW50X3NpemVfaW5fYnl0ZXMgKHR5cGUpID09IDggJiYgVFlQRV9BTElHTl9VTklUICh0eXBlKSA+PSA0KSkKKysgICAgcmV0dXJuIHRydWU7CisrCisrICBpZiAodHlwZSAmJiBBR0dSRUdBVEVfVFlQRV9QICh0eXBlKQorKyAgICAgIC8qIFN0cnVjdHMgb2Ygc2l6ZSAzLDUsNiw3IGFyZSBhbHdheXMgcGFzc2VkIGluIHJlZ2lzdGVycy4gKi8KKysgICAgICAmJiAoaW50X3NpemVfaW5fYnl0ZXMgKHR5cGUpID09IDMKKysJICB8fCBpbnRfc2l6ZV9pbl9ieXRlcyAodHlwZSkgPT0gNQorKwkgIHx8IGludF9zaXplX2luX2J5dGVzICh0eXBlKSA9PSA2IHx8IGludF9zaXplX2luX2J5dGVzICh0eXBlKSA9PSA3KSkKKysgICAgcmV0dXJuIHRydWU7CisrCisrCisrICByZXR1cm4gKHR5cGUgJiYgVFJFRV9BRERSRVNTQUJMRSAodHlwZSkpOworK30KKysKKysKKytib29sCisrYXZyMzJfc3RyaWN0X2FyZ3VtZW50X25hbWluZyAoQ1VNVUxBVElWRV9BUkdTICogY2EgQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrLyoKKysgICBUaGlzIHRhcmdldCBob29rIHNob3VsZCByZXR1cm4gdHJ1ZSBpZiBhbiBhcmd1bWVudCBhdCB0aGUgcG9zaXRpb24gaW5kaWNhdGVkCisrICAgYnkgY3VtIHNob3VsZCBiZSBwYXNzZWQgYnkgcmVmZXJlbmNlLiBUaGlzIHByZWRpY2F0ZSBpcyBxdWVyaWVkIGFmdGVyIHRhcmdldAorKyAgIGluZGVwZW5kZW50IHJlYXNvbnMgZm9yIGJlaW5nIHBhc3NlZCBieSByZWZlcmVuY2UsIHN1Y2ggYXMgVFJFRV9BRERSRVNTQUJMRSAodHlwZSkuCisrCisrICAgSWYgdGhlIGhvb2sgcmV0dXJucyB0cnVlLCBhIGNvcHkgb2YgdGhhdCBhcmd1bWVudCBpcyBtYWRlIGluIG1lbW9yeSBhbmQgYQorKyAgIHBvaW50ZXIgdG8gdGhlIGFyZ3VtZW50IGlzIHBhc3NlZCBpbnN0ZWFkIG9mIHRoZSBhcmd1bWVudCBpdHNlbGYuIFRoZSBwb2ludGVyCisrICAgaXMgcGFzc2VkIGluIHdoYXRldmVyIHdheSBpcyBhcHByb3ByaWF0ZSBmb3IgcGFzc2luZyBhIHBvaW50ZXIgdG8gdGhhdCB0eXBlLgorKyovCisrYm9vbAorK2F2cjMyX3Bhc3NfYnlfcmVmZXJlbmNlIChDVU1VTEFUSVZFX0FSR1MgKiBjdW0gQVRUUklCVVRFX1VOVVNFRCwKKysJCQkgZW51bSBtYWNoaW5lX21vZGUgbW9kZSBBVFRSSUJVVEVfVU5VU0VELAorKwkJCSB0cmVlIHR5cGUsIGJvb2wgbmFtZWQgQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICByZXR1cm4gKHR5cGUgJiYgKFRSRUVfQ09ERSAoVFlQRV9TSVpFICh0eXBlKSkgIT0gSU5URUdFUl9DU1QpKTsKKyt9CisrCisrc3RhdGljIGludAorK2F2cjMyX2FyZ19wYXJ0aWFsX2J5dGVzIChDVU1VTEFUSVZFX0FSR1MgKiBwY3VtIEFUVFJJQlVURV9VTlVTRUQsCisrCQkJIGVudW0gbWFjaGluZV9tb2RlIG1vZGUgQVRUUklCVVRFX1VOVVNFRCwKKysJCQkgdHJlZSB0eXBlIEFUVFJJQlVURV9VTlVTRUQsCisrCQkJIGJvb2wgbmFtZWQgQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrCisrc3RydWN0IGdjY190YXJnZXQgdGFyZ2V0bSA9IFRBUkdFVF9JTklUSUFMSVpFUjsKKysKKysvKgorKyAgVGFibGUgdXNlZCB0byBjb252ZXJ0IGZyb20gcmVnaXN0ZXIgbnVtYmVyIGluIHRoZSBhc3NlbWJsZXIgaW5zdHJ1Y3Rpb25zIGFuZAorKyAgdGhlIHJlZ2lzdGVyIG51bWJlcnMgdXNlZCBpbiBnY2MuCisrKi8KKytjb25zdCBpbnQgYXZyMzJfZnVuY3Rpb25fYXJnX3JlZ2xpc3RbXSA9IHsKKysgIElOVEVSTkFMX1JFR05VTSAoMTIpLAorKyAgSU5URVJOQUxfUkVHTlVNICgxMSksCisrICBJTlRFUk5BTF9SRUdOVU0gKDEwKSwKKysgIElOVEVSTkFMX1JFR05VTSAoOSksCisrICBJTlRFUk5BTF9SRUdOVU0gKDgpCisrfTsKKysKKytydHggYXZyMzJfY29tcGFyZV9vcDAgPSBOVUxMX1JUWDsKKytydHggYXZyMzJfY29tcGFyZV9vcDEgPSBOVUxMX1JUWDsKKytydHggYXZyMzJfY29tcGFyZV9vcGVyYXRvciA9IE5VTExfUlRYOworK3J0eCBhdnIzMl9hY2NfY2FjaGUgPSBOVUxMX1JUWDsKKysKKysvKgorKyAgUmV0dXJucyBub256ZXJvIGlmIGl0IGlzIGFsbG93ZWQgdG8gc3RvcmUgYSB2YWx1ZSBvZiBtb2RlIG1vZGUgaW4gaGFyZAorKyAgcmVnaXN0ZXIgbnVtYmVyIHJlZ25vLgorKyovCisraW50CisrYXZyMzJfaGFyZF9yZWdub19tb2RlX29rIChpbnQgcmVnbnIsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUpCisreworKyAgLyogV2UgYWxsb3cgb25seSBmbG9hdCBtb2RlcyBpbiB0aGUgZnAtcmVnaXN0ZXJzICovCisrICBpZiAocmVnbnIgPj0gRklSU1RfRlBfUkVHTlVNCisrICAgICAgJiYgcmVnbnIgPD0gTEFTVF9GUF9SRUdOVU0gJiYgR0VUX01PREVfQ0xBU1MgKG1vZGUpICE9IE1PREVfRkxPQVQpCisrICAgIHsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgc3dpdGNoIChtb2RlKQorKyAgICB7CisrICAgIGNhc2UgREltb2RlOgkJLyogbG9uZyBsb25nICovCisrICAgIGNhc2UgREZtb2RlOgkJLyogZG91YmxlICovCisrICAgIGNhc2UgU0Ntb2RlOgkJLyogX19jb21wbGV4X18gZmxvYXQgKi8KKysgICAgY2FzZSBDU0ltb2RlOgkJLyogX19jb21wbGV4X18gaW50ICovCisrICAgICAgaWYgKHJlZ25yIDwgNCkKKysJewkJCS8qIGxvbmcgbG9uZyBpbnQgbm90IHN1cHBvcnRlZCBpbiByMTIsIHNwLCBscgorKwkJCQkgICBvciBwYy4gKi8KKysJICByZXR1cm4gMDsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGlmIChyZWduciAlIDIpCS8qIGxvbmcgbG9uZyBpbnQgaGFzIHRvIGJlIHJlZmVyZWQgaW4gZXZlbgorKwkJCQkgICByZWdpc3RlcnMuICovCisrCSAgICByZXR1cm4gMDsKKysJICBlbHNlCisrCSAgICByZXR1cm4gMTsKKysJfQorKyAgICBjYXNlIENESW1vZGU6CQkvKiBfX2NvbXBsZXhfXyBsb25nIGxvbmcgKi8KKysgICAgY2FzZSBEQ21vZGU6CQkvKiBfX2NvbXBsZXhfXyBkb3VibGUgKi8KKysgICAgY2FzZSBUSW1vZGU6CQkvKiAxNiBieXRlcyAqLworKyAgICAgIGlmIChyZWduciA8IDcpCisrCXJldHVybiAwOworKyAgICAgIGVsc2UgaWYgKHJlZ25yICUgMikKKysJcmV0dXJuIDA7CisrICAgICAgZWxzZQorKwlyZXR1cm4gMTsKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gMTsKKysgICAgfQorK30KKysKKysKKytpbnQKKythdnIzMl9ybmRfb3BlcmFuZHMgKHJ0eCBhZGQsIHJ0eCBzaGlmdCkKKyt7CisrICBpZiAoR0VUX0NPREUgKHNoaWZ0KSA9PSBDT05TVF9JTlQgJiYKKysgICAgICBHRVRfQ09ERSAoYWRkKSA9PSBDT05TVF9JTlQgJiYgSU5UVkFMIChzaGlmdCkgPiAwKQorKyAgICB7CisrICAgICAgaWYgKCgxIDw8IChJTlRWQUwgKHNoaWZ0KSAtIDEpKSA9PSBJTlRWQUwgKGFkZCkpCisrCXJldHVybiBUUlVFOworKyAgICB9CisrCisrICByZXR1cm4gRkFMU0U7CisrfQorKworKworKworK2ludAorK2F2cjMyX2NvbnN0X29rX2Zvcl9jb25zdHJhaW50X3AgKEhPU1RfV0lERV9JTlQgdmFsdWUsIGNoYXIgYywgY29uc3QgY2hhciAqc3RyKQorK3sKKysgIHN3aXRjaCAoYykKKysgICAgeworKyAgICBjYXNlICdLJzoKKysgICAgY2FzZSAnSSc6CisrICAgICAgeworKwlIT1NUX1dJREVfSU5UIG1pbl92YWx1ZSA9IDAsIG1heF92YWx1ZSA9IDA7CisrCWNoYXIgc2l6ZV9zdHJbM107CisrCWludCBjb25zdF9zaXplOworKworKwlzaXplX3N0clswXSA9IHN0clsyXTsKKysJc2l6ZV9zdHJbMV0gPSBzdHJbM107CisrCXNpemVfc3RyWzJdID0gJ1wwJzsKKysJY29uc3Rfc2l6ZSA9IGF0b2kgKHNpemVfc3RyKTsKKysKKysJaWYgKHRvdXBwZXIgKHN0clsxXSkgPT0gJ1UnKQorKwkgIHsKKysJICAgIG1pbl92YWx1ZSA9IDA7CisrCSAgICBtYXhfdmFsdWUgPSAoMSA8PCBjb25zdF9zaXplKSAtIDE7CisrCSAgfQorKwllbHNlIGlmICh0b3VwcGVyIChzdHJbMV0pID09ICdTJykKKysJICB7CisrCSAgICBtaW5fdmFsdWUgPSAtKDEgPDwgKGNvbnN0X3NpemUgLSAxKSk7CisrCSAgICBtYXhfdmFsdWUgPSAoMSA8PCAoY29uc3Rfc2l6ZSAtIDEpKSAtIDE7CisrCSAgfQorKworKwlpZiAoYyA9PSAnSScpCisrCSAgeworKwkgICAgdmFsdWUgPSAtdmFsdWU7CisrCSAgfQorKworKwlpZiAodmFsdWUgPj0gbWluX3ZhbHVlICYmIHZhbHVlIDw9IG1heF92YWx1ZSkKKysJICB7CisrCSAgICByZXR1cm4gMTsKKysJICB9CisrCWJyZWFrOworKyAgICAgIH0KKysgICAgY2FzZSAnTSc6CisrICAgICAgcmV0dXJuIGF2cjMyX21hc2tfdXBwZXJfYml0c19vcGVyYW5kIChHRU5fSU5UICh2YWx1ZSksIFZPSURtb2RlKTsKKysgICAgY2FzZSAnSic6CisrICAgICAgcmV0dXJuIGF2cjMyX2hpMTZfaW1tZWRpYXRlX29wZXJhbmQgKEdFTl9JTlQgKHZhbHVlKSwgVk9JRG1vZGUpOworKyAgICBjYXNlICdPJzoKKysgICAgICByZXR1cm4gb25lX2JpdF9zZXRfb3BlcmFuZCAoR0VOX0lOVCAodmFsdWUpLCBWT0lEbW9kZSk7CisrICAgIGNhc2UgJ04nOgorKyAgICAgIHJldHVybiBvbmVfYml0X2NsZWFyZWRfb3BlcmFuZCAoR0VOX0lOVCAodmFsdWUpLCBWT0lEbW9kZSk7CisrICAgIGNhc2UgJ0wnOgorKyAgICAgIC8qIFRoZSBsb3dlciAxNi1iaXRzIGFyZSBzZXQuICovCisrICAgICAgcmV0dXJuICgodmFsdWUgJiAweGZmZmYpID09IDB4ZmZmZikgOworKyAgICB9CisrCisrICByZXR1cm4gMDsKKyt9CisrCisrCisrLypDb21wdXRlIG1hc2sgb2Ygd2hpY2ggZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzIG5lZWRzIHNhdmluZyB1cG9uCisrICBlbnRyeSB0byB0aGlzIGZ1bmN0aW9uKi8KKytzdGF0aWMgdW5zaWduZWQgbG9uZworK2F2cjMyX2NvbXB1dGVfc2F2ZV9mcF9yZWdfbWFzayAodm9pZCkKKyt7CisrICB1bnNpZ25lZCBsb25nIGZ1bmNfdHlwZSA9IGF2cjMyX2N1cnJlbnRfZnVuY190eXBlICgpOworKyAgdW5zaWduZWQgaW50IHNhdmVfcmVnX21hc2sgPSAwOworKyAgdW5zaWduZWQgaW50IHJlZzsKKysgIHVuc2lnbmVkIGludCBtYXhfcmVnID0gNzsKKysgIGludCBzYXZlX2FsbF9jYWxsX3VzZWRfcmVncyA9IEZBTFNFOworKworKyAgLyogVGhpcyBvbmx5IGFwcGxpZXMgZm9yIGhhcmR3YXJlIGZsb2F0aW5nLXBvaW50IGltcGxlbWVudGF0aW9uLiAqLworKyAgaWYgKCFUQVJHRVRfSEFSRF9GTE9BVCkKKysgICAgcmV0dXJuIDA7CisrCisrICBpZiAoSVNfSU5URVJSVVBUIChmdW5jX3R5cGUpKQorKyAgICB7CisrCisrICAgICAgLyogSW50ZXJydXB0IGZ1bmN0aW9ucyBtdXN0IG5vdCBjb3JydXB0IGFueSByZWdpc3RlcnMsIGV2ZW4gY2FsbAorKyAgICAgICAgIGNsb2JiZXJlZCBvbmVzLiAgSWYgdGhpcyBpcyBhIGxlYWYgZnVuY3Rpb24gd2UgY2FuIGp1c3QgZXhhbWluZSB0aGUKKysgICAgICAgICByZWdpc3RlcnMgdXNlZCBieSB0aGUgUlRMLCBidXQgb3RoZXJ3aXNlIHdlIGhhdmUgdG8gYXNzdW1lIHRoYXQKKysgICAgICAgICB3aGF0ZXZlciBmdW5jdGlvbiBpcyBjYWxsZWQgbWlnaHQgY2xvYmJlciBhbnl0aGluZywgYW5kIHNvIHdlIGhhdmUKKysgICAgICAgICB0byBzYXZlIGFsbCB0aGUgY2FsbC1jbG9iYmVyZWQgcmVnaXN0ZXJzIGFzIHdlbGwuICAqLworKyAgICAgIG1heF9yZWcgPSAxMzsKKysgICAgICBzYXZlX2FsbF9jYWxsX3VzZWRfcmVncyA9ICFjdXJyZW50X2Z1bmN0aW9uX2lzX2xlYWY7CisrICAgIH0KKysKKysgIC8qIEFsbCB1c2VkIHJlZ2lzdGVycyB1c2VkIG11c3QgYmUgc2F2ZWQgKi8KKysgIGZvciAocmVnID0gMDsgcmVnIDw9IG1heF9yZWc7IHJlZysrKQorKyAgICBpZiAocmVnc19ldmVyX2xpdmVbSU5URVJOQUxfRlBfUkVHTlVNIChyZWcpXQorKwl8fCAoc2F2ZV9hbGxfY2FsbF91c2VkX3JlZ3MKKysJICAgICYmIGNhbGxfdXNlZF9yZWdzW0lOVEVSTkFMX0ZQX1JFR05VTSAocmVnKV0pKQorKyAgICAgIHNhdmVfcmVnX21hc2sgfD0gKDEgPDwgcmVnKTsKKysKKysgIHJldHVybiBzYXZlX3JlZ19tYXNrOworK30KKysKKysvKkNvbXB1dGUgbWFzayBvZiByZWdpc3RlcnMgd2hpY2ggbmVlZHMgc2F2aW5nIHVwb24gZnVuY3Rpb24gZW50cnkgKi8KKytzdGF0aWMgdW5zaWduZWQgbG9uZworK2F2cjMyX2NvbXB1dGVfc2F2ZV9yZWdfbWFzayAoaW50IHB1c2gpCisreworKyAgdW5zaWduZWQgbG9uZyBmdW5jX3R5cGU7CisrICB1bnNpZ25lZCBpbnQgc2F2ZV9yZWdfbWFzayA9IDA7CisrICB1bnNpZ25lZCBpbnQgcmVnOworKworKyAgZnVuY190eXBlID0gYXZyMzJfY3VycmVudF9mdW5jX3R5cGUgKCk7CisrCisrICBpZiAoSVNfSU5URVJSVVBUIChmdW5jX3R5cGUpKQorKyAgICB7CisrICAgICAgdW5zaWduZWQgaW50IG1heF9yZWcgPSAxMjsKKysKKysKKysgICAgICAvKiBHZXQgdGhlIGJhbmtpbmcgc2NoZW1lIGZvciB0aGUgaW50ZXJydXB0ICovCisrICAgICAgc3dpdGNoIChmdW5jX3R5cGUpCisrCXsKKysJY2FzZSBBVlIzMl9GVF9JU1JfRlVMTDoKKysJICBtYXhfcmVnID0gMDsKKysJICBicmVhazsKKysJY2FzZSBBVlIzMl9GVF9JU1JfSEFMRjoKKysJICBtYXhfcmVnID0gNzsKKysJICBicmVhazsKKysJY2FzZSBBVlIzMl9GVF9JU1JfTk9ORToKKysJICBtYXhfcmVnID0gMTI7CisrCSAgYnJlYWs7CisrCX0KKysKKysgICAgICAvKiBJbnRlcnJ1cHQgZnVuY3Rpb25zIG11c3Qgbm90IGNvcnJ1cHQgYW55IHJlZ2lzdGVycywgZXZlbiBjYWxsCisrICAgICAgICAgY2xvYmJlcmVkIG9uZXMuICBJZiB0aGlzIGlzIGEgbGVhZiBmdW5jdGlvbiB3ZSBjYW4ganVzdCBleGFtaW5lIHRoZQorKyAgICAgICAgIHJlZ2lzdGVycyB1c2VkIGJ5IHRoZSBSVEwsIGJ1dCBvdGhlcndpc2Ugd2UgaGF2ZSB0byBhc3N1bWUgdGhhdAorKyAgICAgICAgIHdoYXRldmVyIGZ1bmN0aW9uIGlzIGNhbGxlZCBtaWdodCBjbG9iYmVyIGFueXRoaW5nLCBhbmQgc28gd2UgaGF2ZQorKyAgICAgICAgIHRvIHNhdmUgYWxsIHRoZSBjYWxsLWNsb2JiZXJlZCByZWdpc3RlcnMgYXMgd2VsbC4gICovCisrCisrICAgICAgLyogTmVlZCBub3QgcHVzaCB0aGUgcmVnaXN0ZXJzIHI4LXIxMiBmb3IgQVZSMzJBIGFyY2hpdGVjdHVyZXMsIGFzIHRoaXMKKysgICAgICAgICBpcyBhdXRvbWF0aWFsbHkgZG9uZSBpbiBoYXJkd2FyZS4gV2UgYWxzbyBkbyBub3QgaGF2ZSBhbnkgc2hhZG93CisrICAgICAgICAgcmVnaXN0ZXJzLiAqLworKyAgICAgIGlmIChUQVJHRVRfVUFSQ0hfQVZSMzJBKQorKwl7CisrCSAgbWF4X3JlZyA9IDc7CisrCSAgZnVuY190eXBlID0gQVZSMzJfRlRfSVNSX05PTkU7CisrCX0KKysKKysgICAgICAvKiBBbGwgcmVnaXN0ZXJzIHdoaWNoIGFyZSB1c2VkIGFuZCBpcyBub3Qgc2hhZG93ZWQgbXVzdCBiZSBzYXZlZCAqLworKyAgICAgIGZvciAocmVnID0gMDsgcmVnIDw9IG1heF9yZWc7IHJlZysrKQorKwlpZiAocmVnc19ldmVyX2xpdmVbSU5URVJOQUxfUkVHTlVNIChyZWcpXQorKwkgICAgfHwgKCFjdXJyZW50X2Z1bmN0aW9uX2lzX2xlYWYKKysJCSYmIGNhbGxfdXNlZF9yZWdzW0lOVEVSTkFMX1JFR05VTSAocmVnKV0pKQorKwkgIHNhdmVfcmVnX21hc2sgfD0gKDEgPDwgcmVnKTsKKysKKysgICAgICAvKiBDaGVjayBMUiAqLworKyAgICAgIGlmICgocmVnc19ldmVyX2xpdmVbTFJfUkVHTlVNXQorKwkgICB8fCAhY3VycmVudF9mdW5jdGlvbl9pc19sZWFmIHx8IGZyYW1lX3BvaW50ZXJfbmVlZGVkKQorKwkgIC8qIE9ubHkgbm9uLXNoYWRvd2VkIHJlZ2lzdGVyIG1vZGVscyAqLworKwkgICYmIChmdW5jX3R5cGUgPT0gQVZSMzJfRlRfSVNSX05PTkUpKQorKwlzYXZlX3JlZ19tYXNrIHw9ICgxIDw8IEFTTV9SRUdOVU0gKExSX1JFR05VTSkpOworKworKyAgICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBHT1QgcmVnaXN0ZXIgaXMgcHVzaGVkLiAqLworKyAgICAgIGlmIChtYXhfcmVnID49IEFTTV9SRUdOVU0gKFBJQ19PRkZTRVRfVEFCTEVfUkVHTlVNKQorKwkgICYmIGN1cnJlbnRfZnVuY3Rpb25fdXNlc19waWNfb2Zmc2V0X3RhYmxlKQorKwlzYXZlX3JlZ19tYXNrIHw9ICgxIDw8IEFTTV9SRUdOVU0gKFBJQ19PRkZTRVRfVEFCTEVfUkVHTlVNKSk7CisrCisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGludCB1c2VfcHVzaG0gPSBvcHRpbWl6ZV9zaXplOworKworKyAgICAgIC8qIEluIHRoZSBub3JtYWwgY2FzZSB3ZSBvbmx5IG5lZWQgdG8gc2F2ZSB0aG9zZSByZWdpc3RlcnMgd2hpY2ggYXJlCisrICAgICAgICAgY2FsbCBzYXZlZCBhbmQgd2hpY2ggYXJlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbi4gICovCisrICAgICAgZm9yIChyZWcgPSAwOyByZWcgPD0gNzsgcmVnKyspCisrCWlmIChyZWdzX2V2ZXJfbGl2ZVtJTlRFUk5BTF9SRUdOVU0gKHJlZyldCisrCSAgICAmJiAhY2FsbF91c2VkX3JlZ3NbSU5URVJOQUxfUkVHTlVNIChyZWcpXSkKKysJICBzYXZlX3JlZ19tYXNrIHw9ICgxIDw8IHJlZyk7CisrCisrICAgICAgLyogTWFrZSBzdXJlIHRoYXQgdGhlIEdPVCByZWdpc3RlciBpcyBwdXNoZWQuICovCisrICAgICAgaWYgKGN1cnJlbnRfZnVuY3Rpb25fdXNlc19waWNfb2Zmc2V0X3RhYmxlKQorKwlzYXZlX3JlZ19tYXNrIHw9ICgxIDw8IEFTTV9SRUdOVU0gKFBJQ19PRkZTRVRfVEFCTEVfUkVHTlVNKSk7CisrCisrCisrICAgICAgLyogSWYgd2Ugb3B0aW1pemUgZm9yIHNpemUgYW5kIGRvIG5vdCBoYXZlIGFub255bW91cyBhcmd1bWVudHM6IHVzZQorKyAgICAgICAgIHBvcG0vcHVzaG0gYWx3YXlzICovCisrICAgICAgaWYgKHVzZV9wdXNobSkKKysJeworKwkgIGlmICgoc2F2ZV9yZWdfbWFzayAmICgxIDw8IDApKQorKwkgICAgICB8fCAoc2F2ZV9yZWdfbWFzayAmICgxIDw8IDEpKQorKwkgICAgICB8fCAoc2F2ZV9yZWdfbWFzayAmICgxIDw8IDIpKSB8fCAoc2F2ZV9yZWdfbWFzayAmICgxIDw8IDMpKSkKKysJICAgIHNhdmVfcmVnX21hc2sgfD0gMHhmOworKworKwkgIGlmICgoc2F2ZV9yZWdfbWFzayAmICgxIDw8IDQpKQorKwkgICAgICB8fCAoc2F2ZV9yZWdfbWFzayAmICgxIDw8IDUpKQorKwkgICAgICB8fCAoc2F2ZV9yZWdfbWFzayAmICgxIDw8IDYpKSB8fCAoc2F2ZV9yZWdfbWFzayAmICgxIDw8IDcpKSkKKysJICAgIHNhdmVfcmVnX21hc2sgfD0gMHhmMDsKKysKKysJICBpZiAoKHNhdmVfcmVnX21hc2sgJiAoMSA8PCA4KSkgfHwgKHNhdmVfcmVnX21hc2sgJiAoMSA8PCA5KSkpCisrCSAgICBzYXZlX3JlZ19tYXNrIHw9IDB4MzAwOworKwl9CisrCisrCisrICAgICAgLyogQ2hlY2sgTFIgKi8KKysgICAgICBpZiAoKHJlZ3NfZXZlcl9saXZlW0xSX1JFR05VTV0KKysJICAgfHwgIWN1cnJlbnRfZnVuY3Rpb25faXNfbGVhZgorKwkgICB8fCAob3B0aW1pemVfc2l6ZQorKwkgICAgICAgJiYgc2F2ZV9yZWdfbWFzaworKwkgICAgICAgJiYgIWN1cnJlbnRfZnVuY3Rpb25fY2FsbHNfZWhfcmV0dXJuKSB8fCBmcmFtZV9wb2ludGVyX25lZWRlZCkpCisrCXsKKysJICBpZiAocHVzaAorKwkgICAgICAvKiBOZXZlciBwb3AgTFIgaW50byBQQyBmb3IgZnVuY3Rpb25zIHdoaWNoCisrCSAgICAgICAgIGNhbGxzIF9fYnVpbHRpbl9laF9yZXR1cm4sIHNpbmNlIHdlIG5lZWQgdG8KKysJICAgICAgICAgZml4IHRoZSBTUCBhZnRlciB0aGUgcmVzdG9yaW5nIG9mIHRoZSByZWdpc3RlcnMKKysJICAgICAgICAgYW5kIGJlZm9yZSByZXR1cm5pbmcuICovCisrCSAgICAgIHx8IGN1cnJlbnRfZnVuY3Rpb25fY2FsbHNfZWhfcmV0dXJuKQorKwkgICAgeworKwkgICAgICAvKiBQdXNoL1BvcCBMUiAqLworKwkgICAgICBzYXZlX3JlZ19tYXNrIHw9ICgxIDw8IEFTTV9SRUdOVU0gKExSX1JFR05VTSkpOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgLyogUG9wIFBDICovCisrCSAgICAgIHNhdmVfcmVnX21hc2sgfD0gKDEgPDwgQVNNX1JFR05VTSAoUENfUkVHTlVNKSk7CisrCSAgICB9CisrCX0KKysgICAgfQorKworKworKyAgLyogU2F2ZSByZWdpc3RlcnMgc28gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGNhbiBtb2RpZnkgdGhlbS4gICovCisrICBpZiAoY3VycmVudF9mdW5jdGlvbl9jYWxsc19laF9yZXR1cm4pCisrICAgIHsKKysgICAgICB1bnNpZ25lZCBpbnQgaTsKKysKKysgICAgICBmb3IgKGkgPSAwOzsgaSsrKQorKwl7CisrCSAgcmVnID0gRUhfUkVUVVJOX0RBVEFfUkVHTk8gKGkpOworKwkgIGlmIChyZWcgPT0gSU5WQUxJRF9SRUdOVU0pCisrCSAgICBicmVhazsKKysJICBzYXZlX3JlZ19tYXNrIHw9IDEgPDwgQVNNX1JFR05VTSAocmVnKTsKKysJfQorKyAgICB9CisrCisrICByZXR1cm4gc2F2ZV9yZWdfbWFzazsKKyt9CisrCisrLypDb21wdXRlIHRvdGFsIHNpemUgaW4gYnl0ZXMgb2YgYWxsIHNhdmVkIHJlZ2lzdGVycyAgKi8KKytzdGF0aWMgaW50CisrYXZyMzJfZ2V0X3JlZ19tYXNrX3NpemUgKGludCByZWdfbWFzaykKKyt7CisrICBpbnQgcmVnLCBzaXplOworKyAgc2l6ZSA9IDA7CisrCisrICBmb3IgKHJlZyA9IDA7IHJlZyA8PSAxNTsgcmVnKyspCisrICAgIGlmIChyZWdfbWFzayAmICgxIDw8IHJlZykpCisrICAgICAgc2l6ZSArPSA0OworKworKyAgcmV0dXJuIHNpemU7CisrfQorKworKy8qR2V0IGEgcmVnaXN0ZXIgZnJvbSBvbmUgb2YgdGhlIHJlZ2lzdGVycyB3aGljaCBhcmUgc2F2ZWQgb250byB0aGUgc3RhY2sKKysgIHVwb24gZnVuY3Rpb24gZW50cnkgKi8KKysKKytzdGF0aWMgaW50CisrYXZyMzJfZ2V0X3NhdmVkX3JlZyAoaW50IHNhdmVfcmVnX21hc2spCisreworKyAgdW5zaWduZWQgaW50IHJlZzsKKysKKysgIC8qIEZpbmQgdGhlIGZpcnN0IHJlZ2lzdGVyIHdoaWNoIGlzIHNhdmVkIGluIHRoZSBzYXZlZF9yZWdfbWFzayAqLworKyAgZm9yIChyZWcgPSAwOyByZWcgPD0gMTU7IHJlZysrKQorKyAgICBpZiAoc2F2ZV9yZWdfbWFzayAmICgxIDw8IHJlZykpCisrICAgICAgcmV0dXJuIHJlZzsKKysKKysgIHJldHVybiAtMTsKKyt9CisrCisrLyogUmV0dXJuIDEgaWYgaXQgaXMgcG9zc2libGUgdG8gcmV0dXJuIHVzaW5nIGEgc2luZ2xlIGluc3RydWN0aW9uLiAgKi8KKytpbnQKKythdnIzMl91c2VfcmV0dXJuX2luc24gKGludCBpc2NvbmQpCisreworKyAgdW5zaWduZWQgaW50IGZ1bmNfdHlwZSA9IGF2cjMyX2N1cnJlbnRfZnVuY190eXBlICgpOworKyAgdW5zaWduZWQgbG9uZyBzYXZlZF9pbnRfcmVnczsKKysgIHVuc2lnbmVkIGxvbmcgc2F2ZWRfZnBfcmVnczsKKysKKysgIC8qIE5ldmVyIHVzZSBhIHJldHVybiBpbnN0cnVjdGlvbiBiZWZvcmUgcmVsb2FkIGhhcyBydW4uICAqLworKyAgaWYgKCFyZWxvYWRfY29tcGxldGVkKQorKyAgICByZXR1cm4gMDsKKysKKysgIC8qIE11c3QgYWRqdXN0IHRoZSBzdGFjayBmb3IgdmFyYXJnIGZ1bmN0aW9ucy4gKi8KKysgIGlmIChjdXJyZW50X2Z1bmN0aW9uX2FyZ3NfaW5mby51c2VzX2Fub255bW91c19hcmdzKQorKyAgICByZXR1cm4gMDsKKysKKysgIC8qIElmIHRoZXJlIGEgc3RhY2sgYWRqc3RtZW50LiAgKi8KKysgIGlmIChnZXRfZnJhbWVfc2l6ZSAoKSkKKysgICAgcmV0dXJuIDA7CisrCisrICBzYXZlZF9pbnRfcmVncyA9IGF2cjMyX2NvbXB1dGVfc2F2ZV9yZWdfbWFzayAoVFJVRSk7CisrICBzYXZlZF9mcF9yZWdzID0gYXZyMzJfY29tcHV0ZV9zYXZlX2ZwX3JlZ19tYXNrICgpOworKworKyAgLyogRnVuY3Rpb25zIHdoaWNoIGhhdmUgc2F2ZWQgZnAtcmVncyBvbiB0aGUgc3RhY2sgY2FuIG5vdCBiZSBwZXJmb3JtZWQgaW4KKysgICAgIG9uZSBpbnN0cnVjdGlvbiAqLworKyAgaWYgKHNhdmVkX2ZwX3JlZ3MpCisrICAgIHJldHVybiAwOworKworKyAgLyogQ29uZGl0aW9uYWwgcmV0dXJucyBjYW4gbm90IGJlIHBlcmZvcm1lZCBpbiBvbmUgaW5zdHJ1Y3Rpb24gaWYgd2UgbmVlZAorKyAgICAgdG8gcmVzdG9yZSByZWdpc3RlcnMgZnJvbSB0aGUgc3RhY2sgKi8KKysgIGlmIChpc2NvbmQgJiYgc2F2ZWRfaW50X3JlZ3MpCisrICAgIHJldHVybiAwOworKworKyAgLyogQ29uZGl0aW9uYWwgcmV0dXJuIGNhbiBub3QgYmUgdXNlZCBmb3IgaW50ZXJydXB0IGhhbmRsZXJzLiAqLworKyAgaWYgKGlzY29uZCAmJiBJU19JTlRFUlJVUFQgKGZ1bmNfdHlwZSkpCisrICAgIHJldHVybiAwOworKworKyAgLyogRm9yIGludGVycnVwdCBoYW5kbGVycyB3aGljaCBuZWVkcyB0byBwb3AgcmVnaXN0ZXJzICovCisrICBpZiAoc2F2ZWRfaW50X3JlZ3MgJiYgSVNfSU5URVJSVVBUIChmdW5jX3R5cGUpKQorKyAgICByZXR1cm4gMDsKKysKKysKKysgIC8qIElmIHRoZXJlIGFyZSBzYXZlZCByZWdpc3RlcnMgYnV0IHRoZSBMUiBpc24ndCBzYXZlZCwgdGhlbiB3ZSBuZWVkIHR3bworKyAgICAgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgcmV0dXJuLiAgKi8KKysgIGlmIChzYXZlZF9pbnRfcmVncyAmJiAhKHNhdmVkX2ludF9yZWdzICYgKDEgPDwgQVNNX1JFR05VTSAoTFJfUkVHTlVNKSkpKQorKyAgICByZXR1cm4gMDsKKysKKysKKysgIHJldHVybiAxOworK30KKysKKysKKysvKkdlbmVyYXRlIHNvbWUgZnVuY3Rpb24gcHJvbG9ndWUgaW5mbyBpbiB0aGUgYXNzZW1ibHkgZmlsZSovCisrCisrdm9pZAorK2F2cjMyX3RhcmdldF9hc21fZnVuY3Rpb25fcHJvbG9ndWUgKEZJTEUgKiBmLCBIT1NUX1dJREVfSU5UIGZyYW1lX3NpemUpCisreworKyAgaWYgKElTX05BS0VEIChhdnIzMl9jdXJyZW50X2Z1bmNfdHlwZSAoKSkpCisrICAgIGZwcmludGYgKGYsCisrCSAgICAgIlx0IyBGdW5jdGlvbiBpcyBuYWtlZDogUHJvbG9ndWUgYW5kIGVwaWxvZ3VlIHByb3ZpZGVkIGJ5IHByb2dyYW1tZXJcbiIpOworKworKyAgaWYgKElTX0lOVEVSUlVQVCAoYXZyMzJfY3VycmVudF9mdW5jX3R5cGUgKCkpKQorKyAgICB7CisrICAgICAgc3dpdGNoIChhdnIzMl9jdXJyZW50X2Z1bmNfdHlwZSAoKSkKKysJeworKwljYXNlIEFWUjMyX0ZUX0lTUl9GVUxMOgorKwkgIGZwcmludGYgKGYsCisrCQkgICAiXHQjIEludGVycnVwdCBGdW5jdGlvbjogRnVsbHkgc2hhZG93ZWQgcmVnaXN0ZXIgZmlsZVxuIik7CisrCSAgYnJlYWs7CisrCWNhc2UgQVZSMzJfRlRfSVNSX0hBTEY6CisrCSAgZnByaW50ZiAoZiwKKysJCSAgICJcdCMgSW50ZXJydXB0IEZ1bmN0aW9uOiBIYWxmIHNoYWRvd2VkIHJlZ2lzdGVyIGZpbGVcbiIpOworKwkgIGJyZWFrOworKwlkZWZhdWx0OgorKwljYXNlIEFWUjMyX0ZUX0lTUl9OT05FOgorKwkgIGZwcmludGYgKGYsICJcdCMgSW50ZXJydXB0IEZ1bmN0aW9uOiBObyBzaGFkb3dlZCByZWdpc3RlciBmaWxlXG4iKTsKKysJICBicmVhazsKKysJfQorKyAgICB9CisrCisrCisrICBmcHJpbnRmIChmLCAiXHQjIGFyZ3MgPSAlaSwgZnJhbWUgPSAlbGksIHByZXRlbmQgPSAlaVxuIiwKKysJICAgY3VycmVudF9mdW5jdGlvbl9hcmdzX3NpemUsIGZyYW1lX3NpemUsCisrCSAgIGN1cnJlbnRfZnVuY3Rpb25fcHJldGVuZF9hcmdzX3NpemUpOworKworKyAgZnByaW50ZiAoZiwgIlx0IyBmcmFtZV9uZWVkZWQgPSAlaSwgbGVhZl9mdW5jdGlvbiA9ICVpXG4iLAorKwkgICBmcmFtZV9wb2ludGVyX25lZWRlZCwgY3VycmVudF9mdW5jdGlvbl9pc19sZWFmKTsKKysKKysgIGZwcmludGYgKGYsICJcdCMgdXNlc19hbm9ueW1vdXNfYXJncyA9ICVpXG4iLAorKwkgICBjdXJyZW50X2Z1bmN0aW9uX2FyZ3NfaW5mby51c2VzX2Fub255bW91c19hcmdzKTsKKysgIGlmIChjdXJyZW50X2Z1bmN0aW9uX2NhbGxzX2VoX3JldHVybikKKysgICAgZnByaW50ZiAoZiwgIlx0IyBDYWxscyBfX2J1aWx0aW5fZWhfcmV0dXJuLlxuIik7CisrCisrfQorKworKworKy8qIEdlbmVyYXRlIGFuZCBlbWl0IGFuIGluc24gdGhhdCB3ZSB3aWxsIHJlY29nbml6ZSBhcyBhIHB1c2htIG9yIHN0bS4KKysgICBVbmZvcnR1bmF0ZWx5LCBzaW5jZSB0aGlzIGluc24gZG9lcyBub3QgcmVmbGVjdCB2ZXJ5IHdlbGwgdGhlIGFjdHVhbAorKyAgIHNlbWFudGljcyBvZiB0aGUgb3BlcmF0aW9uLCB3ZSBuZWVkIHRvIGFubm90YXRlIHRoZSBpbnNuIGZvciB0aGUgYmVuZWZpdAorKyAgIG9mIERXQVJGMiBmcmFtZSB1bndpbmQgaW5mb3JtYXRpb24uICAqLworKworK2ludCBhdnIzMl9jb252ZXJ0X3RvX3JlZ2xpc3QxNiAoaW50IHJlZ2xpc3Q4X3ZlY3QpOworKworK3N0YXRpYyBydHgKKytlbWl0X211bHRpX3JlZ19wdXNoIChpbnQgcmVnbGlzdCwgaW50IHVzZVBVU0hNKQorK3sKKysgIHJ0eCBpbnNuOworKyAgcnR4IGR3YXJmOworKyAgcnR4IHRtcDsKKysgIHJ0eCByZWc7CisrICBpbnQgaTsKKysgIGludCBucl9yZWdzOworKyAgaW50IGluZGV4ID0gMDsKKysKKysgIGlmICh1c2VQVVNITSkKKysgICAgeworKyAgICAgIGluc24gPSBlbWl0X2luc24gKGdlbl9wdXNobSAoZ2VuX3J0eF9DT05TVF9JTlQgKFNJbW9kZSwgcmVnbGlzdCkpKTsKKysgICAgICByZWdsaXN0ID0gYXZyMzJfY29udmVydF90b19yZWdsaXN0MTYgKHJlZ2xpc3QpOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBpbnNuID0gZW1pdF9pbnNuIChnZW5fc3RtIChzdGFja19wb2ludGVyX3J0eCwKKysJCQkJIGdlbl9ydHhfQ09OU1RfSU5UIChTSW1vZGUsIHJlZ2xpc3QpLAorKwkJCQkgZ2VuX3J0eF9DT05TVF9JTlQgKFNJbW9kZSwgMSkpKTsKKysgICAgfQorKworKyAgbnJfcmVncyA9IGF2cjMyX2dldF9yZWdfbWFza19zaXplIChyZWdsaXN0KSAvIDQ7CisrICBkd2FyZiA9IGdlbl9ydHhfU0VRVUVOQ0UgKFZPSURtb2RlLCBydHZlY19hbGxvYyAobnJfcmVncyArIDEpKTsKKysKKysgIGZvciAoaSA9IDE1OyBpID49IDA7IGktLSkKKysgICAgeworKyAgICAgIGlmIChyZWdsaXN0ICYgKDEgPDwgaSkpCisrCXsKKysJICByZWcgPSBnZW5fcnR4X1JFRyAoU0ltb2RlLCBJTlRFUk5BTF9SRUdOVU0gKGkpKTsKKysJICB0bXAgPSBnZW5fcnR4X1NFVCAoVk9JRG1vZGUsCisrCQkJICAgICBnZW5fcnR4X01FTSAoU0ltb2RlLAorKwkJCQkJICBwbHVzX2NvbnN0YW50IChzdGFja19wb2ludGVyX3J0eCwKKysJCQkJCQkJIDQgKiBpbmRleCkpLCByZWcpOworKwkgIFJUWF9GUkFNRV9SRUxBVEVEX1AgKHRtcCkgPSAxOworKwkgIFhWRUNFWFAgKGR3YXJmLCAwLCAxICsgaW5kZXgrKykgPSB0bXA7CisrCX0KKysgICAgfQorKworKyAgdG1wID0gZ2VuX3J0eF9TRVQgKFNJbW9kZSwKKysJCSAgICAgc3RhY2tfcG9pbnRlcl9ydHgsCisrCQkgICAgIGdlbl9ydHhfUExVUyAoU0ltb2RlLAorKwkJCQkgICBzdGFja19wb2ludGVyX3J0eCwKKysJCQkJICAgR0VOX0lOVCAoLTQgKiBucl9yZWdzKSkpOworKyAgUlRYX0ZSQU1FX1JFTEFURURfUCAodG1wKSA9IDE7CisrICBYVkVDRVhQIChkd2FyZiwgMCwgMCkgPSB0bXA7CisrICBSRUdfTk9URVMgKGluc24pID0gZ2VuX3J0eF9FWFBSX0xJU1QgKFJFR19GUkFNRV9SRUxBVEVEX0VYUFIsIGR3YXJmLAorKwkJCQkJUkVHX05PVEVTIChpbnNuKSk7CisrICByZXR1cm4gaW5zbjsKKyt9CisrCisrCisrc3RhdGljIHJ0eAorK2VtaXRfbXVsdGlfZnBfcmVnX3B1c2ggKGludCByZWdsaXN0KQorK3sKKysgIHJ0eCBpbnNuOworKyAgcnR4IGR3YXJmOworKyAgcnR4IHRtcDsKKysgIHJ0eCByZWc7CisrICBpbnQgaTsKKysgIGludCBucl9yZWdzOworKyAgaW50IGluZGV4ID0gMDsKKysKKysgIGluc24gPSBlbWl0X2luc24gKGdlbl9zdG1fZnAgKHN0YWNrX3BvaW50ZXJfcnR4LAorKwkJCQlnZW5fcnR4X0NPTlNUX0lOVCAoU0ltb2RlLCByZWdsaXN0KSwKKysJCQkJZ2VuX3J0eF9DT05TVF9JTlQgKFNJbW9kZSwgMSkpKTsKKysKKysgIG5yX3JlZ3MgPSBhdnIzMl9nZXRfcmVnX21hc2tfc2l6ZSAocmVnbGlzdCkgLyA0OworKyAgZHdhcmYgPSBnZW5fcnR4X1NFUVVFTkNFIChWT0lEbW9kZSwgcnR2ZWNfYWxsb2MgKG5yX3JlZ3MgKyAxKSk7CisrCisrICBmb3IgKGkgPSAxNTsgaSA+PSAwOyBpLS0pCisrICAgIHsKKysgICAgICBpZiAocmVnbGlzdCAmICgxIDw8IGkpKQorKwl7CisrCSAgcmVnID0gZ2VuX3J0eF9SRUcgKFNJbW9kZSwgSU5URVJOQUxfRlBfUkVHTlVNIChpKSk7CisrCSAgdG1wID0gZ2VuX3J0eF9TRVQgKFZPSURtb2RlLAorKwkJCSAgICAgZ2VuX3J0eF9NRU0gKFNJbW9kZSwKKysJCQkJCSAgcGx1c19jb25zdGFudCAoc3RhY2tfcG9pbnRlcl9ydHgsCisrCQkJCQkJCSA0ICogaW5kZXgpKSwgcmVnKTsKKysJICBSVFhfRlJBTUVfUkVMQVRFRF9QICh0bXApID0gMTsKKysJICBYVkVDRVhQIChkd2FyZiwgMCwgMSArIGluZGV4KyspID0gdG1wOworKwl9CisrICAgIH0KKysKKysgIHRtcCA9IGdlbl9ydHhfU0VUIChTSW1vZGUsCisrCQkgICAgIHN0YWNrX3BvaW50ZXJfcnR4LAorKwkJICAgICBnZW5fcnR4X1BMVVMgKFNJbW9kZSwKKysJCQkJICAgc3RhY2tfcG9pbnRlcl9ydHgsCisrCQkJCSAgIEdFTl9JTlQgKC00ICogbnJfcmVncykpKTsKKysgIFJUWF9GUkFNRV9SRUxBVEVEX1AgKHRtcCkgPSAxOworKyAgWFZFQ0VYUCAoZHdhcmYsIDAsIDApID0gdG1wOworKyAgUkVHX05PVEVTIChpbnNuKSA9IGdlbl9ydHhfRVhQUl9MSVNUIChSRUdfRlJBTUVfUkVMQVRFRF9FWFBSLCBkd2FyZiwKKysJCQkJCVJFR19OT1RFUyAoaW5zbikpOworKyAgcmV0dXJuIGluc247CisrfQorKworK3J0eAorK2F2cjMyX2dlbl9sb2FkX211bHRpcGxlIChydHggKiByZWdzLCBpbnQgY291bnQsIHJ0eCBmcm9tLAorKwkJCSBpbnQgd3JpdGVfYmFjaywgaW50IGluX3N0cnVjdF9wLCBpbnQgc2NhbGFyX3ApCisreworKworKyAgcnR4IHJlc3VsdDsKKysgIGludCBpID0gMCwgajsKKysKKysgIHJlc3VsdCA9CisrICAgIGdlbl9ydHhfUEFSQUxMRUwgKFZPSURtb2RlLCBydHZlY19hbGxvYyAoY291bnQgKyAod3JpdGVfYmFjayA/IDEgOiAwKSkpOworKworKyAgaWYgKHdyaXRlX2JhY2spCisrICAgIHsKKysgICAgICBYVkVDRVhQIChyZXN1bHQsIDAsIDApCisrCT0gZ2VuX3J0eF9TRVQgKEdFVF9NT0RFIChmcm9tKSwgZnJvbSwKKysJCSAgICAgICBwbHVzX2NvbnN0YW50IChmcm9tLCBjb3VudCAqIDQpKTsKKysgICAgICBpID0gMTsKKysgICAgICBjb3VudCsrOworKyAgICB9CisrCisrCisrICBmb3IgKGogPSAwOyBpIDwgY291bnQ7IGkrKywgaisrKQorKyAgICB7CisrICAgICAgcnR4IHVuc3BlYzsKKysgICAgICBydHggbWVtID0gZ2VuX3J0eF9NRU0gKFNJbW9kZSwgcGx1c19jb25zdGFudCAoZnJvbSwgaiAqIDQpKTsKKysgICAgICBNRU1fSU5fU1RSVUNUX1AgKG1lbSkgPSBpbl9zdHJ1Y3RfcDsKKysgICAgICBNRU1fU0NBTEFSX1AgKG1lbSkgPSBzY2FsYXJfcDsKKysgICAgICB1bnNwZWMgPSBnZW5fcnR4X1VOU1BFQyAoVk9JRG1vZGUsIGdlbl9ydHZlYyAoMSwgbWVtKSwgVU5TUEVDX0xETSk7CisrICAgICAgWFZFQ0VYUCAocmVzdWx0LCAwLCBpKSA9IGdlbl9ydHhfU0VUIChWT0lEbW9kZSwgcmVnc1tqXSwgdW5zcGVjKTsKKysgICAgfQorKworKyAgcmV0dXJuIHJlc3VsdDsKKyt9CisrCisrCisrcnR4CisrYXZyMzJfZ2VuX3N0b3JlX211bHRpcGxlIChydHggKiByZWdzLCBpbnQgY291bnQsIHJ0eCB0bywKKysJCQkgIGludCBpbl9zdHJ1Y3RfcCwgaW50IHNjYWxhcl9wKQorK3sKKysgIHJ0eCByZXN1bHQ7CisrICBpbnQgaSA9IDAsIGo7CisrCisrICByZXN1bHQgPSBnZW5fcnR4X1BBUkFMTEVMIChWT0lEbW9kZSwgcnR2ZWNfYWxsb2MgKGNvdW50KSk7CisrCisrICBmb3IgKGogPSAwOyBpIDwgY291bnQ7IGkrKywgaisrKQorKyAgICB7CisrICAgICAgcnR4IG1lbSA9IGdlbl9ydHhfTUVNIChTSW1vZGUsIHBsdXNfY29uc3RhbnQgKHRvLCBqICogNCkpOworKyAgICAgIE1FTV9JTl9TVFJVQ1RfUCAobWVtKSA9IGluX3N0cnVjdF9wOworKyAgICAgIE1FTV9TQ0FMQVJfUCAobWVtKSA9IHNjYWxhcl9wOworKyAgICAgIFhWRUNFWFAgKHJlc3VsdCwgMCwgaSkKKysJPSBnZW5fcnR4X1NFVCAoVk9JRG1vZGUsIG1lbSwKKysJCSAgICAgICBnZW5fcnR4X1VOU1BFQyAoVk9JRG1vZGUsCisrCQkJCSAgICAgICBnZW5fcnR2ZWMgKDEsIHJlZ3Nbal0pLAorKwkJCQkgICAgICAgVU5TUEVDX1NUT1JFX01VTFRJUExFKSk7CisrICAgIH0KKysKKysgIHJldHVybiByZXN1bHQ7CisrfQorKworKworKy8qIE1vdmUgYSBibG9jayBvZiBtZW1vcnkgaWYgaXQgaXMgd29yZCBhbGlnbmVkIG9yIHdlIHN1cHBvcnQgdW5hbGlnbmVkCisrICAgd29yZCBtZW1vcnkgYWNjZXNzZXMuIFRoZSBzaXplIG11c3QgYmUgbWF4aW11bSA2NCBieXRlcy4gKi8KKysKKytpbnQKKythdnIzMl9nZW5fbW92bWVtc2kgKHJ0eCAqIG9wZXJhbmRzKQorK3sKKysgIEhPU1RfV0lERV9JTlQgYnl0ZXNfdG9fZ287CisrICBydHggc3JjLCBkc3Q7CisrICBydHggc3Rfc3JjLCBzdF9kc3Q7CisrICBpbnQgc3JjX29mZnNldCA9IDAsIGRzdF9vZmZzZXQgPSAwOworKyAgaW50IGJsb2NrX3NpemU7CisrICBpbnQgZHN0X2luX3N0cnVjdF9wLCBzcmNfaW5fc3RydWN0X3A7CisrICBpbnQgZHN0X3NjYWxhcl9wLCBzcmNfc2NhbGFyX3A7CisrICBpbnQgdW5hbGlnbmVkOworKworKyAgaWYgKEdFVF9DT0RFIChvcGVyYW5kc1syXSkgIT0gQ09OU1RfSU5UCisrICAgICAgfHwgR0VUX0NPREUgKG9wZXJhbmRzWzNdKSAhPSBDT05TVF9JTlQKKysgICAgICB8fCBJTlRWQUwgKG9wZXJhbmRzWzJdKSA+IDY0CisrICAgICAgfHwgKChJTlRWQUwgKG9wZXJhbmRzWzNdKSAmIDMpICYmICFUQVJHRVRfVU5BTElHTkVEX1dPUkQpKQorKyAgICByZXR1cm4gMDsKKysKKysgIHVuYWxpZ25lZCA9IChJTlRWQUwgKG9wZXJhbmRzWzNdKSAmIDMpICE9IDA7CisrCisrICBibG9ja19zaXplID0gNDsKKysKKysgIHN0X2RzdCA9IFhFWFAgKG9wZXJhbmRzWzBdLCAwKTsKKysgIHN0X3NyYyA9IFhFWFAgKG9wZXJhbmRzWzFdLCAwKTsKKysKKysgIGRzdF9pbl9zdHJ1Y3RfcCA9IE1FTV9JTl9TVFJVQ1RfUCAob3BlcmFuZHNbMF0pOworKyAgZHN0X3NjYWxhcl9wID0gTUVNX1NDQUxBUl9QIChvcGVyYW5kc1swXSk7CisrICBzcmNfaW5fc3RydWN0X3AgPSBNRU1fSU5fU1RSVUNUX1AgKG9wZXJhbmRzWzFdKTsKKysgIHNyY19zY2FsYXJfcCA9IE1FTV9TQ0FMQVJfUCAob3BlcmFuZHNbMV0pOworKworKyAgZHN0ID0gY29weV90b19tb2RlX3JlZyAoU0ltb2RlLCBzdF9kc3QpOworKyAgc3JjID0gY29weV90b19tb2RlX3JlZyAoU0ltb2RlLCBzdF9zcmMpOworKworKyAgYnl0ZXNfdG9fZ28gPSBJTlRWQUwgKG9wZXJhbmRzWzJdKTsKKysKKysgIHdoaWxlIChieXRlc190b19nbykKKysgICAgeworKyAgICAgIGVudW0gbWFjaGluZV9tb2RlIG1vdmVfbW9kZTsKKysgICAgICAvKiAoU2VlbXMgdG8gYmUgYSBwcm9ibGVtIHdpdGggcmVsb2FkcyBmb3IgdGhlIG1vdnRpIHBhdHRlcm4gc28gdGhpcyBpcworKyAgICAgICAgIGRpc2FibGVkIHVudGlsIHRoYXQgcHJvYmxlbSBpcyByZXNvbHZlZCkKKysgICAgICAgICBVUERBVEU6IFByb2JsZW0gc2VlbXMgdG8gYmUgc29sdmVkIG5vdy4uLi4gKi8KKysgICAgICBpZiAoYnl0ZXNfdG9fZ28gPj0gR0VUX01PREVfU0laRSAoVEltb2RlKSAmJiAhdW5hbGlnbmVkCisrCSAgLyogRG8gbm90IGVtaXQgbGRtL3N0bSBmb3IgVUMzIGFzIGxkLmQvc3QuZCBpcyBtb3JlIG9wdGltYWwuICovCisrCSAgJiYgIVRBUkdFVF9BUkNIX1VDKQorKwltb3ZlX21vZGUgPSBUSW1vZGU7CisrICAgICAgZWxzZSBpZiAoKGJ5dGVzX3RvX2dvID49IEdFVF9NT0RFX1NJWkUgKERJbW9kZSkpICYmICF1bmFsaWduZWQpCisrCW1vdmVfbW9kZSA9IERJbW9kZTsKKysgICAgICBlbHNlIGlmIChieXRlc190b19nbyA+PSBHRVRfTU9ERV9TSVpFIChTSW1vZGUpKQorKwltb3ZlX21vZGUgPSBTSW1vZGU7CisrICAgICAgZWxzZQorKwltb3ZlX21vZGUgPSBRSW1vZGU7CisrCisrICAgICAgeworKyAgICAgICAgcnR4IHNyY19tZW07CisrCXJ0eCBkc3RfbWVtID0gZ2VuX3J0eF9NRU0gKG1vdmVfbW9kZSwKKysJCQkJICAgZ2VuX3J0eF9QTFVTIChTSW1vZGUsIGRzdCwKKysJCQkJCQkgR0VOX0lOVCAoZHN0X29mZnNldCkpKTsKKysgICAgICAgIGRzdF9vZmZzZXQgKz0gR0VUX01PREVfU0laRSAobW92ZV9tb2RlKTsKKysgICAgICAgIGlmICggMCAvKiBUaGlzIGNhdXNlcyBhbiBlcnJvciBpbiBHQ0MuIFRoaW5rIHRoZXJlIGlzCisrICAgICAgICAgICAgICAgICAgc29tZXRoaW5nIHdyb25nIGluIHRoZSBnY3NlIHBhc3Mgd2hpY2ggY2F1c2VzIFJFUV9FUVVJViBub3RlcworKyAgICAgICAgICAgICAgICAgIHRvIGJlIHdyb25nIHNvIGRpc2FibGluZyBpdCBmb3Igbm93LiAqLworKyAgICAgICAgICAgICAmJiBtb3ZlX21vZGUgPT0gVEltb2RlCisrICAgICAgICAgICAgICYmIElOVFZBTCAob3BlcmFuZHNbMl0pID4gR0VUX01PREVfU0laRSAoVEltb2RlKSApCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBzcmNfbWVtID0gZ2VuX3J0eF9NRU0gKG1vdmVfbW9kZSwKKysJCQkJICAgZ2VuX3J0eF9QT1NUX0lOQyAoU0ltb2RlLCBzcmMpKTsKKysgICAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgc3JjX21lbSA9IGdlbl9ydHhfTUVNIChtb3ZlX21vZGUsCisrCQkJCSAgIGdlbl9ydHhfUExVUyAoU0ltb2RlLCBzcmMsCisrCQkJCQkJIEdFTl9JTlQgKHNyY19vZmZzZXQpKSk7CisrICAgICAgICAgICAgc3JjX29mZnNldCArPSBHRVRfTU9ERV9TSVpFIChtb3ZlX21vZGUpOworKyAgICAgICAgICB9CisrCisrCWJ5dGVzX3RvX2dvIC09IEdFVF9NT0RFX1NJWkUgKG1vdmVfbW9kZSk7CisrCisrCU1FTV9JTl9TVFJVQ1RfUCAoZHN0X21lbSkgPSBkc3RfaW5fc3RydWN0X3A7CisrCU1FTV9TQ0FMQVJfUCAoZHN0X21lbSkgPSBkc3Rfc2NhbGFyX3A7CisrCisrCU1FTV9JTl9TVFJVQ1RfUCAoc3JjX21lbSkgPSBzcmNfaW5fc3RydWN0X3A7CisrCU1FTV9TQ0FMQVJfUCAoc3JjX21lbSkgPSBzcmNfc2NhbGFyX3A7CisrCWVtaXRfbW92ZV9pbnNuIChkc3RfbWVtLCBzcmNfbWVtKTsKKysKKysgICAgICB9CisrICAgIH0KKysKKysgIHJldHVybiAxOworK30KKysKKysKKysKKysvKkV4cGFuZCB0aGUgcHJvbG9ndWUgaW5zdHJ1Y3Rpb24qLworK3ZvaWQKKythdnIzMl9leHBhbmRfcHJvbG9ndWUgKHZvaWQpCisreworKyAgcnR4IGluc24sIGR3YXJmOworKyAgdW5zaWduZWQgbG9uZyBzYXZlZF9yZWdfbWFzaywgc2F2ZWRfZnBfcmVnX21hc2s7CisrICBpbnQgcmVnbGlzdDggPSAwOworKworKyAgLyogTmFrZWQgZnVuY3Rpb25zIGRvZXMgbm90IGhhdmUgYSBwcm9sb2d1ZSAqLworKyAgaWYgKElTX05BS0VEIChhdnIzMl9jdXJyZW50X2Z1bmNfdHlwZSAoKSkpCisrICAgIHJldHVybjsKKysKKysgIHNhdmVkX3JlZ19tYXNrID0gYXZyMzJfY29tcHV0ZV9zYXZlX3JlZ19tYXNrIChUUlVFKTsKKysKKysgIGlmIChzYXZlZF9yZWdfbWFzaykKKysgICAgeworKyAgICAgIC8qIE11c3QgcHVzaCB1c2VkIHJlZ2lzdGVycyAqLworKworKyAgICAgIC8qIFNob3VsZCB3ZSB1c2UgUE9QTSBvciBMRE0/ICovCisrICAgICAgaW50IHVzZVBVU0hNID0gVFJVRTsKKysgICAgICByZWdsaXN0OCA9IDA7CisrICAgICAgaWYgKCgoc2F2ZWRfcmVnX21hc2sgJiAoMSA8PCAwKSkgfHwKKysJICAgKHNhdmVkX3JlZ19tYXNrICYgKDEgPDwgMSkpIHx8CisrCSAgIChzYXZlZF9yZWdfbWFzayAmICgxIDw8IDIpKSB8fCAoc2F2ZWRfcmVnX21hc2sgJiAoMSA8PCAzKSkpKQorKwl7CisrCSAgLyogT25lIG9mIFIwLVIzIHNob3VsZCBhdCBsZWFzdCBiZSBwdXNoZWQgKi8KKysJICBpZiAoKChzYXZlZF9yZWdfbWFzayAmICgxIDw8IDApKSAmJgorKwkgICAgICAgKHNhdmVkX3JlZ19tYXNrICYgKDEgPDwgMSkpICYmCisrCSAgICAgICAoc2F2ZWRfcmVnX21hc2sgJiAoMSA8PCAyKSkgJiYgKHNhdmVkX3JlZ19tYXNrICYgKDEgPDwgMykpKSkKKysJICAgIHsKKysJICAgICAgLyogQWxsIHNob3VsZCBiZSBwdXNoZWQgKi8KKysJICAgICAgcmVnbGlzdDggfD0gMHgwMTsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIHVzZVBVU0hNID0gRkFMU0U7CisrCSAgICB9CisrCX0KKysKKysgICAgICBpZiAoKChzYXZlZF9yZWdfbWFzayAmICgxIDw8IDQpKSB8fAorKwkgICAoc2F2ZWRfcmVnX21hc2sgJiAoMSA8PCA1KSkgfHwKKysJICAgKHNhdmVkX3JlZ19tYXNrICYgKDEgPDwgNikpIHx8IChzYXZlZF9yZWdfbWFzayAmICgxIDw8IDcpKSkpCisrCXsKKysJICAvKiBPbmUgb2YgUjQtUjcgc2hvdWxkIGF0IGxlYXN0IGJlIHB1c2hlZCAqLworKwkgIGlmICgoKHNhdmVkX3JlZ19tYXNrICYgKDEgPDwgNCkpICYmCisrCSAgICAgICAoc2F2ZWRfcmVnX21hc2sgJiAoMSA8PCA1KSkgJiYKKysJICAgICAgIChzYXZlZF9yZWdfbWFzayAmICgxIDw8IDYpKSAmJiAoc2F2ZWRfcmVnX21hc2sgJiAoMSA8PCA3KSkpKQorKwkgICAgeworKwkgICAgICBpZiAodXNlUFVTSE0pCisrCQkvKiBBbGwgc2hvdWxkIGJlIHB1c2hlZCAqLworKwkJcmVnbGlzdDggfD0gMHgwMjsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIHVzZVBVU0hNID0gRkFMU0U7CisrCSAgICB9CisrCX0KKysKKysgICAgICBpZiAoKChzYXZlZF9yZWdfbWFzayAmICgxIDw8IDgpKSB8fCAoc2F2ZWRfcmVnX21hc2sgJiAoMSA8PCA5KSkpKQorKwl7CisrCSAgLyogT25lIG9mIFI4LVI5IHNob3VsZCBhdCBsZWFzdCBiZSBwdXNoZWQgKi8KKysJICBpZiAoKChzYXZlZF9yZWdfbWFzayAmICgxIDw8IDgpKSAmJiAoc2F2ZWRfcmVnX21hc2sgJiAoMSA8PCA5KSkpKQorKwkgICAgeworKwkgICAgICBpZiAodXNlUFVTSE0pCisrCQkvKiBBbGwgc2hvdWxkIGJlIHB1c2hlZCAqLworKwkJcmVnbGlzdDggfD0gMHgwNDsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIHVzZVBVU0hNID0gRkFMU0U7CisrCSAgICB9CisrCX0KKysKKysgICAgICBpZiAoc2F2ZWRfcmVnX21hc2sgJiAoMSA8PCAxMCkpCisrCXJlZ2xpc3Q4IHw9IDB4MDg7CisrCisrICAgICAgaWYgKHNhdmVkX3JlZ19tYXNrICYgKDEgPDwgMTEpKQorKwlyZWdsaXN0OCB8PSAweDEwOworKworKyAgICAgIGlmIChzYXZlZF9yZWdfbWFzayAmICgxIDw8IDEyKSkKKysJcmVnbGlzdDggfD0gMHgyMDsKKysKKysgICAgICBpZiAoc2F2ZWRfcmVnX21hc2sgJiAoMSA8PCBBU01fUkVHTlVNIChMUl9SRUdOVU0pKSkKKysJeworKwkgIC8qIFB1c2ggTFIgKi8KKysJICByZWdsaXN0OCB8PSAweDQwOworKwl9CisrCisrICAgICAgaWYgKHVzZVBVU0hNKQorKwl7CisrCSAgaW5zbiA9IGVtaXRfbXVsdGlfcmVnX3B1c2ggKHJlZ2xpc3Q4LCBUUlVFKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGluc24gPSBlbWl0X211bHRpX3JlZ19wdXNoIChzYXZlZF9yZWdfbWFzaywgRkFMU0UpOworKwl9CisrICAgICAgUlRYX0ZSQU1FX1JFTEFURURfUCAoaW5zbikgPSAxOworKworKyAgICAgIC8qIFByZXZlbnQgdGhpcyBpbnN0cnVjdGlvbiBmcm9tIGJlaW5nIHNjaGVkdWxlZCBhZnRlciBhbnkgb3RoZXIKKysgICAgICAgICBpbnN0cnVjdGlvbnMuICAqLworKyAgICAgIGVtaXRfaW5zbiAoZ2VuX2Jsb2NrYWdlICgpKTsKKysgICAgfQorKworKyAgc2F2ZWRfZnBfcmVnX21hc2sgPSBhdnIzMl9jb21wdXRlX3NhdmVfZnBfcmVnX21hc2sgKCk7CisrICBpZiAoc2F2ZWRfZnBfcmVnX21hc2spCisrICAgIHsKKysgICAgICBpbnNuID0gZW1pdF9tdWx0aV9mcF9yZWdfcHVzaCAoc2F2ZWRfZnBfcmVnX21hc2spOworKyAgICAgIFJUWF9GUkFNRV9SRUxBVEVEX1AgKGluc24pID0gMTsKKysKKysgICAgICAvKiBQcmV2ZW50IHRoaXMgaW5zdHJ1Y3Rpb24gZnJvbSBiZWluZyBzY2hlZHVsZWQgYWZ0ZXIgYW55IG90aGVyCisrICAgICAgICAgaW5zdHJ1Y3Rpb25zLiAgKi8KKysgICAgICBlbWl0X2luc24gKGdlbl9ibG9ja2FnZSAoKSk7CisrICAgIH0KKysKKysgIC8qIFNldCBmcmFtZSBwb2ludGVyICovCisrICBpZiAoZnJhbWVfcG9pbnRlcl9uZWVkZWQpCisrICAgIHsKKysgICAgICBpbnNuID0gZW1pdF9tb3ZlX2luc24gKGZyYW1lX3BvaW50ZXJfcnR4LCBzdGFja19wb2ludGVyX3J0eCk7CisrICAgICAgUlRYX0ZSQU1FX1JFTEFURURfUCAoaW5zbikgPSAxOworKyAgICB9CisrCisrICBpZiAoZ2V0X2ZyYW1lX3NpemUgKCkgPiAwKQorKyAgICB7CisrICAgICAgaWYgKGF2cjMyX2NvbnN0X29rX2Zvcl9jb25zdHJhaW50X3AgKGdldF9mcmFtZV9zaXplICgpLCAnSycsICJLczIxIikpCisrCXsKKysJICBpbnNuID0gZW1pdF9pbnNuIChnZW5fcnR4X1NFVCAoU0ltb2RlLAorKwkJCQkJIHN0YWNrX3BvaW50ZXJfcnR4LAorKwkJCQkJIGdlbl9ydHhfUExVUyAoU0ltb2RlLAorKwkJCQkJCSAgICAgICBzdGFja19wb2ludGVyX3J0eCwKKysJCQkJCQkgICAgICAgZ2VuX3J0eF9DT05TVF9JTlQKKysJCQkJCQkgICAgICAgKFNJbW9kZSwKKysJCQkJCQkJLWdldF9mcmFtZV9zaXplCisrCQkJCQkJCSgpKSkpKTsKKysJICBSVFhfRlJBTUVfUkVMQVRFRF9QIChpbnNuKSA9IDE7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvKiBJbW1lZGlhdGUgaXMgbGFyZ2VyIHRoYW4gazIxIFdlIG11c3QgZWl0aGVyIGNoZWNrIGlmIHdlIGNhbiB1c2UKKysJICAgICBvbmUgb2YgdGhlIHB1c2hlZCByZWVnaXN0ZXJzIGFzIHRlbXBvcmFyeSBzdG9yYWdlIG9yIHdlIG11c3QKKysJICAgICBtYWtlIHVzIGEgdGVtcCByZWdpc3RlciBieSBwdXNoaW5nIGEgcmVnaXN0ZXIgdG8gdGhlIHN0YWNrLiAqLworKwkgIHJ0eCB0ZW1wX3JlZywgY29uc3RfcG9vbF9lbnRyeSwgaW5zbjsKKysJICBpZiAoc2F2ZWRfcmVnX21hc2spCisrCSAgICB7CisrCSAgICAgIHRlbXBfcmVnID0KKysJCWdlbl9ydHhfUkVHIChTSW1vZGUsCisrCQkJICAgICBJTlRFUk5BTF9SRUdOVU0gKGF2cjMyX2dldF9zYXZlZF9yZWcKKysJCQkJCSAgICAgIChzYXZlZF9yZWdfbWFzaykpKTsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIHRlbXBfcmVnID0gZ2VuX3J0eF9SRUcgKFNJbW9kZSwgSU5URVJOQUxfUkVHTlVNICg3KSk7CisrCSAgICAgIGVtaXRfbW92ZV9pbnNuIChnZW5fcnR4X01FTQorKwkJCSAgICAgIChTSW1vZGUsCisrCQkJICAgICAgIGdlbl9ydHhfUFJFX0RFQyAoU0ltb2RlLCBzdGFja19wb2ludGVyX3J0eCkpLAorKwkJCSAgICAgIHRlbXBfcmVnKTsKKysJICAgIH0KKysKKysJICBjb25zdF9wb29sX2VudHJ5ID0KKysJICAgIGZvcmNlX2NvbnN0X21lbSAoU0ltb2RlLAorKwkJCSAgICAgZ2VuX3J0eF9DT05TVF9JTlQgKFNJbW9kZSwgZ2V0X2ZyYW1lX3NpemUgKCkpKTsKKysJICBlbWl0X21vdmVfaW5zbiAodGVtcF9yZWcsIGNvbnN0X3Bvb2xfZW50cnkpOworKworKwkgIGluc24gPSBlbWl0X2luc24gKGdlbl9ydHhfU0VUIChTSW1vZGUsCisrCQkJCQkgc3RhY2tfcG9pbnRlcl9ydHgsCisrCQkJCQkgZ2VuX3J0eF9NSU5VUyAoU0ltb2RlLAorKwkJCQkJCQlzdGFja19wb2ludGVyX3J0eCwKKysJCQkJCQkJdGVtcF9yZWcpKSk7CisrCisrCSAgZHdhcmYgPSBnZW5fcnR4X1NFVCAoVk9JRG1vZGUsIHN0YWNrX3BvaW50ZXJfcnR4LAorKwkJCSAgICAgICBnZW5fcnR4X1BMVVMgKFNJbW9kZSwgc3RhY2tfcG9pbnRlcl9ydHgsCisrCQkJCQkgICAgIEdFTl9JTlQgKC1nZXRfZnJhbWVfc2l6ZSAoKSkpKTsKKysJICBSRUdfTk9URVMgKGluc24pID0gZ2VuX3J0eF9FWFBSX0xJU1QgKFJFR19GUkFNRV9SRUxBVEVEX0VYUFIsCisrCQkJCQkJZHdhcmYsIFJFR19OT1RFUyAoaW5zbikpOworKwkgIFJUWF9GUkFNRV9SRUxBVEVEX1AgKGluc24pID0gMTsKKysKKysJICBpZiAoIXNhdmVkX3JlZ19tYXNrKQorKwkgICAgeworKwkgICAgICBpbnNuID0KKysJCWVtaXRfbW92ZV9pbnNuICh0ZW1wX3JlZywKKysJCQkJZ2VuX3J0eF9NRU0gKFNJbW9kZSwKKysJCQkJCSAgICAgZ2VuX3J0eF9QT1NUX0lOQyAoU0ltb2RlLAorKwkJCQkJCQkgICAgICAgZ2VuX3J0eF9SRUcKKysJCQkJCQkJICAgICAgIChTSW1vZGUsCisrCQkJCQkJCQkxMykpKSk7CisrCSAgICB9CisrCisrCSAgLyogTWFyayB0aGUgdGVtcCByZWdpc3RlciBhcyBkZWFkICovCisrCSAgUkVHX05PVEVTIChpbnNuKSA9IGdlbl9ydHhfRVhQUl9MSVNUIChSRUdfREVBRCwgdGVtcF9yZWcsCisrCQkJCQkJUkVHX05PVEVTIChpbnNuKSk7CisrCisrCisrCX0KKysKKysgICAgICAvKiBQcmV2ZW50IHRoZSB0aGUgc3RhY2sgYWRqdXN0bWVudCB0byBiZSBzY2hlZHVsZWQgYWZ0ZXIgYW55CisrICAgICAgICAgaW5zdHJ1Y3Rpb25zIHVzaW5nIHRoZSBmcmFtZSBwb2ludGVyLiAgKi8KKysgICAgICBlbWl0X2luc24gKGdlbl9ibG9ja2FnZSAoKSk7CisrICAgIH0KKysKKysgIC8qIExvYWQgR09UICovCisrICBpZiAoZmxhZ19waWMpCisrICAgIHsKKysgICAgICBhdnIzMl9sb2FkX3BpY19yZWdpc3RlciAoKTsKKysKKysgICAgICAvKiBnY2MgZG9lcyBub3Qga25vdyB0aGF0IGxvYWQgb3IgY2FsbCBpbnN0cnVjdGlvbnMgbWlnaHQgdXNlIHRoZSBwaWMKKysgICAgICAgICByZWdpc3RlciBzbyBpdCBtaWdodCBzY2hlZHVsZSB0aGVzZSBpbnN0cnVjdGlvbnMgYmVmb3JlIHRoZSBsb2FkaW5nCisrICAgICAgICAgb2YgdGhlIHBpYyByZWdpc3Rlci4gVG8gYXZvaWQgdGhpcyBlbWl0IGEgYmFycmllciBmb3Igbm93LiBUT0RPIQorKyAgICAgICAgIEZpbmQgb3V0IGEgYmV0dGVyIHdheSB0byBsZXQgZ2NjIGtub3cgd2hpY2ggaW5zdHJ1Y3Rpb25zIG1pZ2h0IHVzZQorKyAgICAgICAgIHRoZSBwaWMgcmVnaXN0ZXIuICovCisrICAgICAgZW1pdF9pbnNuIChnZW5fYmxvY2thZ2UgKCkpOworKyAgICB9CisrICByZXR1cm47CisrfQorKworK3ZvaWQKKythdnIzMl9zZXRfcmV0dXJuX2FkZHJlc3MgKHJ0eCBzb3VyY2UsIHJ0eCBzY3JhdGNoKQorK3sKKysgIHJ0eCBhZGRyOworKyAgdW5zaWduZWQgbG9uZyBzYXZlZF9yZWdzOworKworKyAgc2F2ZWRfcmVncyA9IGF2cjMyX2NvbXB1dGVfc2F2ZV9yZWdfbWFzayAoVFJVRSk7CisrCisrICBpZiAoIShzYXZlZF9yZWdzICYgKDEgPDwgQVNNX1JFR05VTSAoTFJfUkVHTlVNKSkpKQorKyAgICBlbWl0X21vdmVfaW5zbiAoZ2VuX3J0eF9SRUcgKFBtb2RlLCBMUl9SRUdOVU0pLCBzb3VyY2UpOworKyAgZWxzZQorKyAgICB7CisrICAgICAgaWYgKGZyYW1lX3BvaW50ZXJfbmVlZGVkKQorKwlhZGRyID0gZ2VuX3J0eF9SRUcgKFBtb2RlLCBGUkFNRV9QT0lOVEVSX1JFR05VTSk7CisrICAgICAgZWxzZQorKwlpZiAoYXZyMzJfY29uc3Rfb2tfZm9yX2NvbnN0cmFpbnRfcCAoZ2V0X2ZyYW1lX3NpemUgKCksICdLJywgIktzMTYiKSkKKysJeworKwkgIGFkZHIgPSBwbHVzX2NvbnN0YW50IChzdGFja19wb2ludGVyX3J0eCwgZ2V0X2ZyYW1lX3NpemUgKCkpOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgZW1pdF9pbnNuIChnZW5fbW92c2kgKHNjcmF0Y2gsIEdFTl9JTlQgKGdldF9mcmFtZV9zaXplICgpKSkpOworKwkgIGFkZHIgPSBzY3JhdGNoOworKwl9CisrICAgICAgZW1pdF9tb3ZlX2luc24gKGdlbl9ydHhfTUVNIChQbW9kZSwgYWRkciksIHNvdXJjZSk7CisrICAgIH0KKyt9CisrCisrCisrCisrLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgSU5TTi4gIExFTkdUSCBpcyB0aGUgaW5pdGlhbCBsZW5ndGggY29tcHV0ZWQgYnkKKysgICBhdHRyaWJ1dGVzIGluIHRoZSBtYWNoaW5lLWRlc2NyaXB0aW9uIGZpbGUuICAqLworKworK2ludAorK2F2cjMyX2FkanVzdF9pbnNuX2xlbmd0aCAocnR4IGluc24gQVRUUklCVVRFX1VOVVNFRCwKKysJCQkgIGludCBsZW5ndGggQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICByZXR1cm4gbGVuZ3RoOworK30KKysKKyt2b2lkCisrYXZyMzJfb3V0cHV0X3JldHVybl9pbnN0cnVjdGlvbiAoaW50IHNpbmdsZV9yZXRfaW5zdCBBVFRSSUJVVEVfVU5VU0VELAorKwkJCQkgaW50IGlzY29uZCBBVFRSSUJVVEVfVU5VU0VELAorKwkJCQkgcnR4IGNvbmQgQVRUUklCVVRFX1VOVVNFRCwgcnR4IHIxMl9pbW0pCisreworKworKyAgdW5zaWduZWQgbG9uZyBzYXZlZF9yZWdfbWFzaywgc2F2ZWRfZnBfcmVnX21hc2s7CisrICBpbnQgaW5zZXJ0X3JldCA9IFRSVUU7CisrICBpbnQgcmVnbGlzdDggPSAwOworKyAgaW50IHN0YWNrX2FkanVzdG1lbnQgPSBnZXRfZnJhbWVfc2l6ZSAoKTsKKysgIHVuc2lnbmVkIGludCBmdW5jX3R5cGUgPSBhdnIzMl9jdXJyZW50X2Z1bmNfdHlwZSAoKTsKKysgIEZJTEUgKmYgPSBhc21fb3V0X2ZpbGU7CisrCisrICAvKiBOYWtlZCBmdW5jdGlvbnMgZG9lcyBub3QgaGF2ZSBhbiBlcGlsb2d1ZSAqLworKyAgaWYgKElTX05BS0VEIChmdW5jX3R5cGUpKQorKyAgICByZXR1cm47CisrCisrICBzYXZlZF9mcF9yZWdfbWFzayA9IGF2cjMyX2NvbXB1dGVfc2F2ZV9mcF9yZWdfbWFzayAoKTsKKysKKysgIHNhdmVkX3JlZ19tYXNrID0gYXZyMzJfY29tcHV0ZV9zYXZlX3JlZ19tYXNrIChGQUxTRSk7CisrCisrICAvKiBSZXNldCBmcmFtZSBwb2ludGVyICovCisrICBpZiAoc3RhY2tfYWRqdXN0bWVudCA+IDApCisrICAgIHsKKysgICAgICBpZiAoYXZyMzJfY29uc3Rfb2tfZm9yX2NvbnN0cmFpbnRfcCAoc3RhY2tfYWRqdXN0bWVudCwgJ0knLCAiSXMyMSIpKQorKwl7CisrCSAgZnByaW50ZiAoZiwgIlx0c3ViXHRzcCwgJWkgIyBSZXNldCBGcmFtZSBQb2ludGVyXG4iLAorKwkJICAgLXN0YWNrX2FkanVzdG1lbnQpOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLyogVE9ETyEgSXMgaXQgc2FmZSB0byB1c2UgcjggYXMgc2NyYXRjaD8/ICovCisrCSAgZnByaW50ZiAoZiwgIlx0bW92XHRyOCwgbG8oJWkpICMgUmVzZXQgRnJhbWUgUG9pbnRlclxuIiwKKysJCSAgIC1zdGFja19hZGp1c3RtZW50KTsKKysJICBmcHJpbnRmIChmLCAiXHRvcmhcdHI4LCBoaSglaSkgIyBSZXNldCBGcmFtZSBQb2ludGVyXG4iLAorKwkJICAgLXN0YWNrX2FkanVzdG1lbnQpOworKwkgIGZwcmludGYgKGYsICJcdGFkZFx0c3AsIHI4ICAjIFJlc2V0IEZyYW1lIFBvaW50ZXJcbiIpOworKwl9CisrICAgIH0KKysKKysgIGlmIChzYXZlZF9mcF9yZWdfbWFzaykKKysgICAgeworKyAgICAgIGNoYXIgcmVnbGlzdFs2NF07CQkvKiA2NCBieXRlcyBzaG91bGQgYmUgZW5vdWdoLi4uICovCisrICAgICAgYXZyMzJfbWFrZV9mcF9yZWdsaXN0X3cgKHNhdmVkX2ZwX3JlZ19tYXNrLCAoY2hhciAqKSByZWdsaXN0KTsKKysgICAgICBmcHJpbnRmIChmLCAiXHRsZGNtLndcdGNwMCwgc3ArKywgJXNcbiIsIHJlZ2xpc3QpOworKyAgICAgIGlmIChzYXZlZF9mcF9yZWdfbWFzayAmIH4weGZmKQorKwl7CisrCSAgc2F2ZWRfZnBfcmVnX21hc2sgJj0gfjB4ZmY7CisrCSAgYXZyMzJfbWFrZV9mcF9yZWdsaXN0X2QgKHNhdmVkX2ZwX3JlZ19tYXNrLCAoY2hhciAqKSByZWdsaXN0KTsKKysJICBmcHJpbnRmIChmLCAiXHRsZGNtLmRcdGNwMCwgc3ArKywgJXNcbiIsIHJlZ2xpc3QpOworKwl9CisrICAgIH0KKysKKysgIGlmIChzYXZlZF9yZWdfbWFzaykKKysgICAgeworKyAgICAgIC8qIE11c3QgcG9wIHVzZWQgcmVnaXN0ZXJzICovCisrCisrICAgICAgLyogU2hvdWxkIHdlIHVzZSBQT1BNIG9yIExETT8gKi8KKysgICAgICBpbnQgdXNlUE9QTSA9IFRSVUU7CisrICAgICAgaWYgKCgoc2F2ZWRfcmVnX21hc2sgJiAoMSA8PCAwKSkgfHwKKysJICAgKHNhdmVkX3JlZ19tYXNrICYgKDEgPDwgMSkpIHx8CisrCSAgIChzYXZlZF9yZWdfbWFzayAmICgxIDw8IDIpKSB8fCAoc2F2ZWRfcmVnX21hc2sgJiAoMSA8PCAzKSkpKQorKwl7CisrCSAgLyogT25lIG9mIFIwLVIzIHNob3VsZCBhdCBsZWFzdCBiZSBwb3BwZWQgKi8KKysJICBpZiAoKChzYXZlZF9yZWdfbWFzayAmICgxIDw8IDApKSAmJgorKwkgICAgICAgKHNhdmVkX3JlZ19tYXNrICYgKDEgPDwgMSkpICYmCisrCSAgICAgICAoc2F2ZWRfcmVnX21hc2sgJiAoMSA8PCAyKSkgJiYgKHNhdmVkX3JlZ19tYXNrICYgKDEgPDwgMykpKSkKKysJICAgIHsKKysJICAgICAgLyogQWxsIHNob3VsZCBiZSBwb3BwZWQgKi8KKysJICAgICAgcmVnbGlzdDggfD0gMHgwMTsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIHVzZVBPUE0gPSBGQUxTRTsKKysJICAgIH0KKysJfQorKworKyAgICAgIGlmICgoKHNhdmVkX3JlZ19tYXNrICYgKDEgPDwgNCkpIHx8CisrCSAgIChzYXZlZF9yZWdfbWFzayAmICgxIDw8IDUpKSB8fAorKwkgICAoc2F2ZWRfcmVnX21hc2sgJiAoMSA8PCA2KSkgfHwgKHNhdmVkX3JlZ19tYXNrICYgKDEgPDwgNykpKSkKKysJeworKwkgIC8qIE9uZSBvZiBSMC1SMyBzaG91bGQgYXQgbGVhc3QgYmUgcG9wcGVkICovCisrCSAgaWYgKCgoc2F2ZWRfcmVnX21hc2sgJiAoMSA8PCA0KSkgJiYKKysJICAgICAgIChzYXZlZF9yZWdfbWFzayAmICgxIDw8IDUpKSAmJgorKwkgICAgICAgKHNhdmVkX3JlZ19tYXNrICYgKDEgPDwgNikpICYmIChzYXZlZF9yZWdfbWFzayAmICgxIDw8IDcpKSkpCisrCSAgICB7CisrCSAgICAgIGlmICh1c2VQT1BNKQorKwkJLyogQWxsIHNob3VsZCBiZSBwb3BwZWQgKi8KKysJCXJlZ2xpc3Q4IHw9IDB4MDI7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICB1c2VQT1BNID0gRkFMU0U7CisrCSAgICB9CisrCX0KKysKKysgICAgICBpZiAoKChzYXZlZF9yZWdfbWFzayAmICgxIDw8IDgpKSB8fCAoc2F2ZWRfcmVnX21hc2sgJiAoMSA8PCA5KSkpKQorKwl7CisrCSAgLyogT25lIG9mIFI4LVI5IHNob3VsZCBhdCBsZWFzdCBiZSBwdXNoZWQgKi8KKysJICBpZiAoKChzYXZlZF9yZWdfbWFzayAmICgxIDw8IDgpKSAmJiAoc2F2ZWRfcmVnX21hc2sgJiAoMSA8PCA5KSkpKQorKwkgICAgeworKwkgICAgICBpZiAodXNlUE9QTSkKKysJCS8qIEFsbCBzaG91bGQgYmUgcHVzaGVkICovCisrCQlyZWdsaXN0OCB8PSAweDA0OworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgdXNlUE9QTSA9IEZBTFNFOworKwkgICAgfQorKwl9CisrCisrICAgICAgaWYgKHNhdmVkX3JlZ19tYXNrICYgKDEgPDwgMTApKQorKwlyZWdsaXN0OCB8PSAweDA4OworKworKyAgICAgIGlmIChzYXZlZF9yZWdfbWFzayAmICgxIDw8IDExKSkKKysJcmVnbGlzdDggfD0gMHgxMDsKKysKKysgICAgICBpZiAoc2F2ZWRfcmVnX21hc2sgJiAoMSA8PCAxMikpCisrCXJlZ2xpc3Q4IHw9IDB4MjA7CisrCisrICAgICAgaWYgKHNhdmVkX3JlZ19tYXNrICYgKDEgPDwgQVNNX1JFR05VTSAoTFJfUkVHTlVNKSkpCisrCS8qIFBvcCBMUiAqLworKwlyZWdsaXN0OCB8PSAweDQwOworKworKyAgICAgIGlmIChzYXZlZF9yZWdfbWFzayAmICgxIDw8IEFTTV9SRUdOVU0gKFBDX1JFR05VTSkpKQorKwkvKiBQb3AgTFIgaW50byBQQy4gKi8KKysJcmVnbGlzdDggfD0gMHg4MDsKKysKKysgICAgICBpZiAodXNlUE9QTSkKKysJeworKwkgIGNoYXIgcmVnbGlzdFs2NF07CS8qIDY0IGJ5dGVzIHNob3VsZCBiZSBlbm91Z2guLi4gKi8KKysJICBhdnIzMl9tYWtlX3JlZ2xpc3Q4IChyZWdsaXN0OCwgKGNoYXIgKikgcmVnbGlzdCk7CisrCisrCSAgaWYgKHJlZ2xpc3Q4ICYgMHg4MCkKKysJICAgIC8qIFRoaXMgaW5zdHJ1Y3Rpb24gaXMgYWxzbyBhIHJldHVybiAqLworKwkgICAgaW5zZXJ0X3JldCA9IEZBTFNFOworKworKwkgIGlmIChyMTJfaW1tICYmICFpbnNlcnRfcmV0KQorKwkgICAgZnByaW50ZiAoZiwgIlx0cG9wbVx0JXMsIHIxMj0lbGlcbiIsIHJlZ2xpc3QsIElOVFZBTCAocjEyX2ltbSkpOworKwkgIGVsc2UKKysJICAgIGZwcmludGYgKGYsICJcdHBvcG1cdCVzXG4iLCByZWdsaXN0KTsKKysKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGNoYXIgcmVnbGlzdFs2NF07CS8qIDY0IGJ5dGVzIHNob3VsZCBiZSBlbm91Z2guLi4gKi8KKysJICBhdnIzMl9tYWtlX3JlZ2xpc3QxNiAoc2F2ZWRfcmVnX21hc2ssIChjaGFyICopIHJlZ2xpc3QpOworKwkgIGlmIChzYXZlZF9yZWdfbWFzayAmICgxIDw8IEFTTV9SRUdOVU0gKFBDX1JFR05VTSkpKQorKwkgICAgLyogVGhpcyBpbnN0cnVjdGlvbiBpcyBhbHNvIGEgcmV0dXJuICovCisrCSAgICBpbnNlcnRfcmV0ID0gRkFMU0U7CisrCisrCSAgaWYgKHIxMl9pbW0gJiYgIWluc2VydF9yZXQpCisrCSAgICBmcHJpbnRmIChmLCAiXHRsZG1cdHNwKyssICVzLCByMTI9JWxpXG4iLCByZWdsaXN0LAorKwkJICAgICBJTlRWQUwgKHIxMl9pbW0pKTsKKysJICBlbHNlCisrCSAgICBmcHJpbnRmIChmLCAiXHRsZG1cdHNwKyssICVzXG4iLCByZWdsaXN0KTsKKysKKysJfQorKworKyAgICB9CisrCisrICAvKiBTdGFjayBhZGp1c3RtZW50IGZvciBleGNlcHRpb24gaGFuZGxlci4gICovCisrICBpZiAoY3VycmVudF9mdW5jdGlvbl9jYWxsc19laF9yZXR1cm4pCisrICAgIGZwcmludGYgKGYsICJcdGFkZFx0c3AsIHIlZFxuIiwgQVNNX1JFR05VTSAoRUhfUkVUVVJOX1NUQUNLQURKX1JFR05PKSk7CisrCisrCisrICBpZiAoSVNfSU5URVJSVVBUIChmdW5jX3R5cGUpKQorKyAgICB7CisrICAgICAgZnByaW50ZiAoZiwgIlx0cmV0ZVxuIik7CisrICAgIH0KKysgIGVsc2UgaWYgKGluc2VydF9yZXQpCisrICAgIHsKKysgICAgICBpZiAocjEyX2ltbSkKKysJZnByaW50ZiAoZiwgIlx0cmV0YWxcdCVsaVxuIiwgSU5UVkFMIChyMTJfaW1tKSk7CisrICAgICAgZWxzZQorKwlmcHJpbnRmIChmLCAiXHRyZXRhbFx0cjEyXG4iKTsKKysgICAgfQorK30KKysKKysvKiBGdW5jdGlvbiBmb3IgY29udmVydGluZyBhIGZwLXJlZ2lzdGVyIG1hc2sgdG8gYQorKyAgIHJlZ2xpc3RDUEQ4IHJlZ2lzdGVyIGxpc3Qgc3RyaW5nLiAqLworK3ZvaWQKKythdnIzMl9tYWtlX2ZwX3JlZ2xpc3RfZCAoaW50IHJlZ2xpc3RfbWFzaywgY2hhciAqcmVnbGlzdF9zdHJpbmcpCisreworKyAgaW50IGk7CisrCisrICAvKiBNYWtlIHN1cmUgcmVnbGlzdF9zdHJpbmcgaXMgZW1wdHkgKi8KKysgIHJlZ2xpc3Rfc3RyaW5nWzBdID0gJ1wwJzsKKysKKysgIGZvciAoaSA9IDA7IGkgPCBOVU1fRlBfUkVHUzsgaSArPSAyKQorKyAgICB7CisrICAgICAgaWYgKHJlZ2xpc3RfbWFzayAmICgxIDw8IGkpKQorKwl7CisrCSAgc3RybGVuIChyZWdsaXN0X3N0cmluZykgPworKwkgICAgc3ByaW50ZiAocmVnbGlzdF9zdHJpbmcsICIlcywgJXMtJXMiLCByZWdsaXN0X3N0cmluZywKKysJCSAgICAgcmVnX25hbWVzW0lOVEVSTkFMX0ZQX1JFR05VTSAoaSldLAorKwkJICAgICByZWdfbmFtZXNbSU5URVJOQUxfRlBfUkVHTlVNIChpICsgMSldKSA6CisrCSAgICBzcHJpbnRmIChyZWdsaXN0X3N0cmluZywgIiVzLSVzIiwKKysJCSAgICAgcmVnX25hbWVzW0lOVEVSTkFMX0ZQX1JFR05VTSAoaSldLAorKwkJICAgICByZWdfbmFtZXNbSU5URVJOQUxfRlBfUkVHTlVNIChpICsgMSldKTsKKysJfQorKyAgICB9CisrfQorKworKy8qIEZ1bmN0aW9uIGZvciBjb252ZXJ0aW5nIGEgZnAtcmVnaXN0ZXIgbWFzayB0byBhCisrICAgcmVnbGlzdENQOCByZWdpc3RlciBsaXN0IHN0cmluZy4gKi8KKyt2b2lkCisrYXZyMzJfbWFrZV9mcF9yZWdsaXN0X3cgKGludCByZWdsaXN0X21hc2ssIGNoYXIgKnJlZ2xpc3Rfc3RyaW5nKQorK3sKKysgIGludCBpOworKworKyAgLyogTWFrZSBzdXJlIHJlZ2xpc3Rfc3RyaW5nIGlzIGVtcHR5ICovCisrICByZWdsaXN0X3N0cmluZ1swXSA9ICdcMCc7CisrCisrICBmb3IgKGkgPSAwOyBpIDwgTlVNX0ZQX1JFR1M7ICsraSkKKysgICAgeworKyAgICAgIGlmIChyZWdsaXN0X21hc2sgJiAoMSA8PCBpKSkKKysJeworKwkgIHN0cmxlbiAocmVnbGlzdF9zdHJpbmcpID8KKysJICAgIHNwcmludGYgKHJlZ2xpc3Rfc3RyaW5nLCAiJXMsICVzIiwgcmVnbGlzdF9zdHJpbmcsCisrCQkgICAgIHJlZ19uYW1lc1tJTlRFUk5BTF9GUF9SRUdOVU0gKGkpXSkgOgorKwkgICAgc3ByaW50ZiAocmVnbGlzdF9zdHJpbmcsICIlcyIsIHJlZ19uYW1lc1tJTlRFUk5BTF9GUF9SRUdOVU0gKGkpXSk7CisrCX0KKysgICAgfQorK30KKysKKyt2b2lkCisrYXZyMzJfbWFrZV9yZWdsaXN0MTYgKGludCByZWdsaXN0MTZfdmVjdCwgY2hhciAqcmVnbGlzdDE2X3N0cmluZykKKyt7CisrICBpbnQgaTsKKysKKysgIC8qIE1ha2Ugc3VyZSByZWdsaXN0MTZfc3RyaW5nIGlzIGVtcHR5ICovCisrICByZWdsaXN0MTZfc3RyaW5nWzBdID0gJ1wwJzsKKysKKysgIGZvciAoaSA9IDA7IGkgPCAxNjsgKytpKQorKyAgICB7CisrICAgICAgaWYgKHJlZ2xpc3QxNl92ZWN0ICYgKDEgPDwgaSkpCisrCXsKKysJICBzdHJsZW4gKHJlZ2xpc3QxNl9zdHJpbmcpID8KKysJICAgIHNwcmludGYgKHJlZ2xpc3QxNl9zdHJpbmcsICIlcywgJXMiLCByZWdsaXN0MTZfc3RyaW5nLAorKwkJICAgICByZWdfbmFtZXNbSU5URVJOQUxfUkVHTlVNIChpKV0pIDoKKysJICAgIHNwcmludGYgKHJlZ2xpc3QxNl9zdHJpbmcsICIlcyIsIHJlZ19uYW1lc1tJTlRFUk5BTF9SRUdOVU0gKGkpXSk7CisrCX0KKysgICAgfQorK30KKysKKytpbnQKKythdnIzMl9jb252ZXJ0X3RvX3JlZ2xpc3QxNiAoaW50IHJlZ2xpc3Q4X3ZlY3QpCisreworKyAgaW50IHJlZ2xpc3QxNl92ZWN0ID0gMDsKKysgIGlmIChyZWdsaXN0OF92ZWN0ICYgMHgxKQorKyAgICByZWdsaXN0MTZfdmVjdCB8PSAweEY7CisrICBpZiAocmVnbGlzdDhfdmVjdCAmIDB4MikKKysgICAgcmVnbGlzdDE2X3ZlY3QgfD0gMHhGMDsKKysgIGlmIChyZWdsaXN0OF92ZWN0ICYgMHg0KQorKyAgICByZWdsaXN0MTZfdmVjdCB8PSAweDMwMDsKKysgIGlmIChyZWdsaXN0OF92ZWN0ICYgMHg4KQorKyAgICByZWdsaXN0MTZfdmVjdCB8PSAweDQwMDsKKysgIGlmIChyZWdsaXN0OF92ZWN0ICYgMHgxMCkKKysgICAgcmVnbGlzdDE2X3ZlY3QgfD0gMHg4MDA7CisrICBpZiAocmVnbGlzdDhfdmVjdCAmIDB4MjApCisrICAgIHJlZ2xpc3QxNl92ZWN0IHw9IDB4MTAwMDsKKysgIGlmIChyZWdsaXN0OF92ZWN0ICYgMHg0MCkKKysgICAgcmVnbGlzdDE2X3ZlY3QgfD0gMHg0MDAwOworKyAgaWYgKHJlZ2xpc3Q4X3ZlY3QgJiAweDgwKQorKyAgICByZWdsaXN0MTZfdmVjdCB8PSAweDgwMDA7CisrCisrICByZXR1cm4gcmVnbGlzdDE2X3ZlY3Q7CisrfQorKworK3ZvaWQKKythdnIzMl9tYWtlX3JlZ2xpc3Q4IChpbnQgcmVnbGlzdDhfdmVjdCwgY2hhciAqcmVnbGlzdDhfc3RyaW5nKQorK3sKKysgIC8qIE1ha2Ugc3VyZSByZWdsaXN0OF9zdHJpbmcgaXMgZW1wdHkgKi8KKysgIHJlZ2xpc3Q4X3N0cmluZ1swXSA9ICdcMCc7CisrCisrICBpZiAocmVnbGlzdDhfdmVjdCAmIDB4MSkKKysgICAgc3ByaW50ZiAocmVnbGlzdDhfc3RyaW5nLCAicjAtcjMiKTsKKysgIGlmIChyZWdsaXN0OF92ZWN0ICYgMHgyKQorKyAgICBzdHJsZW4gKHJlZ2xpc3Q4X3N0cmluZykgPyBzcHJpbnRmIChyZWdsaXN0OF9zdHJpbmcsICIlcywgcjQtcjciLAorKwkJCQkJcmVnbGlzdDhfc3RyaW5nKSA6CisrICAgICAgc3ByaW50ZiAocmVnbGlzdDhfc3RyaW5nLCAicjQtcjciKTsKKysgIGlmIChyZWdsaXN0OF92ZWN0ICYgMHg0KQorKyAgICBzdHJsZW4gKHJlZ2xpc3Q4X3N0cmluZykgPyBzcHJpbnRmIChyZWdsaXN0OF9zdHJpbmcsICIlcywgcjgtcjkiLAorKwkJCQkJcmVnbGlzdDhfc3RyaW5nKSA6CisrICAgICAgc3ByaW50ZiAocmVnbGlzdDhfc3RyaW5nLCAicjgtcjkiKTsKKysgIGlmIChyZWdsaXN0OF92ZWN0ICYgMHg4KQorKyAgICBzdHJsZW4gKHJlZ2xpc3Q4X3N0cmluZykgPyBzcHJpbnRmIChyZWdsaXN0OF9zdHJpbmcsICIlcywgcjEwIiwKKysJCQkJCXJlZ2xpc3Q4X3N0cmluZykgOgorKyAgICAgIHNwcmludGYgKHJlZ2xpc3Q4X3N0cmluZywgInIxMCIpOworKyAgaWYgKHJlZ2xpc3Q4X3ZlY3QgJiAweDEwKQorKyAgICBzdHJsZW4gKHJlZ2xpc3Q4X3N0cmluZykgPyBzcHJpbnRmIChyZWdsaXN0OF9zdHJpbmcsICIlcywgcjExIiwKKysJCQkJCXJlZ2xpc3Q4X3N0cmluZykgOgorKyAgICAgIHNwcmludGYgKHJlZ2xpc3Q4X3N0cmluZywgInIxMSIpOworKyAgaWYgKHJlZ2xpc3Q4X3ZlY3QgJiAweDIwKQorKyAgICBzdHJsZW4gKHJlZ2xpc3Q4X3N0cmluZykgPyBzcHJpbnRmIChyZWdsaXN0OF9zdHJpbmcsICIlcywgcjEyIiwKKysJCQkJCXJlZ2xpc3Q4X3N0cmluZykgOgorKyAgICAgIHNwcmludGYgKHJlZ2xpc3Q4X3N0cmluZywgInIxMiIpOworKyAgaWYgKHJlZ2xpc3Q4X3ZlY3QgJiAweDQwKQorKyAgICBzdHJsZW4gKHJlZ2xpc3Q4X3N0cmluZykgPyBzcHJpbnRmIChyZWdsaXN0OF9zdHJpbmcsICIlcywgbHIiLAorKwkJCQkJcmVnbGlzdDhfc3RyaW5nKSA6CisrICAgICAgc3ByaW50ZiAocmVnbGlzdDhfc3RyaW5nLCAibHIiKTsKKysgIGlmIChyZWdsaXN0OF92ZWN0ICYgMHg4MCkKKysgICAgc3RybGVuIChyZWdsaXN0OF9zdHJpbmcpID8gc3ByaW50ZiAocmVnbGlzdDhfc3RyaW5nLCAiJXMsIHBjIiwKKysJCQkJCXJlZ2xpc3Q4X3N0cmluZykgOgorKyAgICAgIHNwcmludGYgKHJlZ2xpc3Q4X3N0cmluZywgInBjIik7CisrfQorKworK2ludAorK2F2cjMyX2VoX3JldHVybl9kYXRhX3JlZ25vIChpbnQgbikKKyt7CisrICBpZiAobiA+PSAwICYmIG4gPD0gMykKKysgICAgcmV0dXJuIDggKyBuOworKyAgZWxzZQorKyAgICByZXR1cm4gSU5WQUxJRF9SRUdOVU07CisrfQorKworKy8qIENvbXB1dGUgdGhlIGRpc3RhbmNlIGZyb20gcmVnaXN0ZXIgRlJPTSB0byByZWdpc3RlciBUTy4KKysgICBUaGVzZSBjYW4gYmUgdGhlIGFyZyBwb2ludGVyLCB0aGUgZnJhbWUgcG9pbnRlciBvcgorKyAgIHRoZSBzdGFjayBwb2ludGVyLgorKyAgIFR5cGljYWwgc3RhY2sgbGF5b3V0IGxvb2tzIGxpa2UgdGhpczoKKysKKysgICAgICAgb2xkIHN0YWNrIHBvaW50ZXIgLT4gfCAgICB8CisrCQkJICAgICAtLS0tCisrCQkJICAgIHwgICAgfCBcCisrCQkJICAgIHwgICAgfCAgIHNhdmVkIGFyZ3VtZW50cyBmb3IKKysJCQkgICAgfCAgICB8ICAgdmFyYXJnIGZ1bmN0aW9ucworKyBhcmdfcG9pbnRlcgktPgkgICAgfCAgICB8IC8KKysJCQkgICAgICAtLQorKwkJCSAgICB8ICAgIHwgXAorKwkJCSAgICB8ICAgIHwgICBjYWxsIHNhdmVkCisrCQkJICAgIHwgICAgfCAgIHJlZ2lzdGVycworKwkJCSAgICB8ICAgIHwgLworKyAgZnJhbWUgcHRyCSAtPgktLQorKwkJCSAgICB8ICAgIHwgXAorKwkJCSAgICB8ICAgIHwgICBsb2NhbAorKwkJCSAgICB8ICAgIHwgICB2YXJpYWJsZXMKKysgIHN0YWNrIHB0ciAtLT4JICAgICB8ICAgIHwgLworKwkJCSAgICAgIC0tCisrCQkJICAgIHwgICAgfCBcCisrCQkJICAgIHwgICAgfCAgIG91dGdvaW5nCisrCQkJICAgIHwgICAgfCAgIGFyZ3VtZW50cworKwkJCSAgICB8ICAgIHwgLworKwkJCSAgICAgIC0tCisrCisrICBGb3IgYSBnaXZlbiBmdW5jaXRvbiBzb21lIG9yIGFsbCBvZiB0aGVzZSBzdGFjayBjb21wb21uZW50cworKyAgbWF5IG5vdCBiZSBuZWVkZWQsIGdpdmluZyByaXNlIHRvIHRoZSBwb3NzaWJpbGl0eSBvZgorKyAgZWxpbWluYXRpbmcgc29tZSBvZiB0aGUgcmVnaXN0ZXJzLgorKworKyAgVGhlIHZhbHVlcyByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QgcmVmbGVjdCB0aGUgYmVoYXZpb3VyCisrICBvZiBhdnIzMl9leHBhbmRfcHJvbG9ndWUoKSBhbmQgYXZyMzJfY29tcHV0ZV9zYXZlX3JlZ19tYXNrKCkuCisrCisrICBUaGUgc2lnbiBvZiB0aGUgbnVtYmVyIHJldHVybmVkIHJlZmxlY3RzIHRoZSBkaXJlY3Rpb24gb2Ygc3RhY2sKKysgIGdyb3d0aCwgc28gdGhlIHZhbHVlcyBhcmUgcG9zaXRpdmUgZm9yIGFsbCBlbGltaW5hdGlvbnMgZXhjZXB0CisrICBmcm9tIHRoZSBzb2Z0IGZyYW1lIHBvaW50ZXIgdG8gdGhlIGhhcmQgZnJhbWUgcG9pbnRlci4gICovCisrCisrCisraW50CisrYXZyMzJfaW5pdGlhbF9lbGltaW5hdGlvbl9vZmZzZXQgKGludCBmcm9tLCBpbnQgdG8pCisreworKyAgaW50IGk7CisrICBpbnQgY2FsbF9zYXZlZF9yZWdzID0gMDsKKysgIHVuc2lnbmVkIGxvbmcgc2F2ZWRfcmVnX21hc2ssIHNhdmVkX2ZwX3JlZ19tYXNrOworKyAgdW5zaWduZWQgaW50IGxvY2FsX3ZhcnMgPSBnZXRfZnJhbWVfc2l6ZSAoKTsKKysKKysgIHNhdmVkX3JlZ19tYXNrID0gYXZyMzJfY29tcHV0ZV9zYXZlX3JlZ19tYXNrIChUUlVFKTsKKysgIHNhdmVkX2ZwX3JlZ19tYXNrID0gYXZyMzJfY29tcHV0ZV9zYXZlX2ZwX3JlZ19tYXNrICgpOworKworKyAgZm9yIChpID0gMDsgaSA8IDE2OyArK2kpCisrICAgIHsKKysgICAgICBpZiAoc2F2ZWRfcmVnX21hc2sgJiAoMSA8PCBpKSkKKysJY2FsbF9zYXZlZF9yZWdzICs9IDQ7CisrICAgIH0KKysKKysgIGZvciAoaSA9IDA7IGkgPCBOVU1fRlBfUkVHUzsgKytpKQorKyAgICB7CisrICAgICAgaWYgKHNhdmVkX2ZwX3JlZ19tYXNrICYgKDEgPDwgaSkpCisrCWNhbGxfc2F2ZWRfcmVncyArPSA0OworKyAgICB9CisrCisrICBzd2l0Y2ggKGZyb20pCisrICAgIHsKKysgICAgY2FzZSBBUkdfUE9JTlRFUl9SRUdOVU06CisrICAgICAgc3dpdGNoICh0bykKKysJeworKwljYXNlIFNUQUNLX1BPSU5URVJfUkVHTlVNOgorKwkgIHJldHVybiBjYWxsX3NhdmVkX3JlZ3MgKyBsb2NhbF92YXJzOworKwljYXNlIEZSQU1FX1BPSU5URVJfUkVHTlVNOgorKwkgIHJldHVybiBjYWxsX3NhdmVkX3JlZ3M7CisrCWRlZmF1bHQ6CisrCSAgYWJvcnQgKCk7CisrCX0KKysgICAgY2FzZSBGUkFNRV9QT0lOVEVSX1JFR05VTToKKysgICAgICBzd2l0Y2ggKHRvKQorKwl7CisrCWNhc2UgU1RBQ0tfUE9JTlRFUl9SRUdOVU06CisrCSAgcmV0dXJuIGxvY2FsX3ZhcnM7CisrCWRlZmF1bHQ6CisrCSAgYWJvcnQgKCk7CisrCX0KKysgICAgZGVmYXVsdDoKKysgICAgICBhYm9ydCAoKTsKKysgICAgfQorK30KKysKKysKKysvKgorKyAgUmV0dXJucyBhIHJ0eCB1c2VkIHdoZW4gcGFzc2luZyB0aGUgbmV4dCBhcmd1bWVudCB0byBhIGZ1bmN0aW9uLgorKyAgYXZyMzJfaW5pdF9jdW11bGF0aXZlX2FyZ3MoKSBhbmQgYXZyMzJfZnVuY3Rpb25fYXJnX2FkdmFuY2UoKSBzZXRzIHdpdGNoCisrICByZWdpc3RlciB0byB1c2UuCisrKi8KKytydHgKKythdnIzMl9mdW5jdGlvbl9hcmcgKENVTVVMQVRJVkVfQVJHUyAqIGN1bSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKysJCSAgICB0cmVlIHR5cGUsIGludCBuYW1lZCkKKyt7CisrICBpbnQgaW5kZXggPSAtMTsKKysKKysgIEhPU1RfV0lERV9JTlQgYXJnX3NpemUsIGFyZ19yc2l6ZTsKKysgIGlmICh0eXBlKQorKyAgICB7CisrICAgICAgYXJnX3NpemUgPSBpbnRfc2l6ZV9pbl9ieXRlcyAodHlwZSk7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGFyZ19zaXplID0gR0VUX01PREVfU0laRSAobW9kZSk7CisrICAgIH0KKysgIGFyZ19yc2l6ZSA9IFBVU0hfUk9VTkRJTkcgKGFyZ19zaXplKTsKKysKKysgIC8qCisrICAgICBUaGUgbGFzdCB0aW1lIHRoaXMgbWFjcm8gaXMgY2FsbGVkLCBpdCBpcyBjYWxsZWQgd2l0aCBtb2RlID09IFZPSURtb2RlLAorKyAgICAgYW5kIGl0cyByZXN1bHQgaXMgcGFzc2VkIHRvIHRoZSBjYWxsIG9yIGNhbGxfdmFsdWUgcGF0dGVybiBhcyBvcGVyYW5kcyAyCisrICAgICBhbmQgMyByZXNwZWN0aXZlbHkuICovCisrICBpZiAobW9kZSA9PSBWT0lEbW9kZSkKKysgICAgeworKyAgICAgIHJldHVybiBnZW5fcnR4X0NPTlNUX0lOVCAoU0ltb2RlLCAyMik7CS8qIFRvRG86IGZpeG1lLiAqLworKyAgICB9CisrCisrICBpZiAoKCp0YXJnZXRtLmNhbGxzLm11c3RfcGFzc19pbl9zdGFjaykgKG1vZGUsIHR5cGUpIHx8ICFuYW1lZCkKKysgICAgeworKyAgICAgIHJldHVybiBOVUxMX1JUWDsKKysgICAgfQorKworKyAgaWYgKGFyZ19yc2l6ZSA9PSA4KQorKyAgICB7CisrICAgICAgLyogdXNlIHIxMTpyMTAgb3Igcjk6cjguICovCisrICAgICAgaWYgKCEoR0VUX1VTRURfSU5ERVggKGN1bSwgMSkgfHwgR0VUX1VTRURfSU5ERVggKGN1bSwgMikpKQorKwlpbmRleCA9IDE7CisrICAgICAgZWxzZSBpZiAoIShHRVRfVVNFRF9JTkRFWCAoY3VtLCAzKSB8fCBHRVRfVVNFRF9JTkRFWCAoY3VtLCA0KSkpCisrCWluZGV4ID0gMzsKKysgICAgICBlbHNlCisrCWluZGV4ID0gLTE7CisrICAgIH0KKysgIGVsc2UgaWYgKGFyZ19yc2l6ZSA9PSA0KQorKyAgICB7CQkJCS8qIFVzZSBmaXJzdCBhdmFpbGFibGUgcmVnaXN0ZXIgKi8KKysgICAgICBpbmRleCA9IDA7CisrICAgICAgd2hpbGUgKGluZGV4IDw9IExBU1RfQ1VNX1JFR19JTkRFWCAmJiBHRVRfVVNFRF9JTkRFWCAoY3VtLCBpbmRleCkpCisrCWluZGV4Kys7CisrICAgICAgaWYgKGluZGV4ID4gTEFTVF9DVU1fUkVHX0lOREVYKQorKwlpbmRleCA9IC0xOworKyAgICB9CisrCisrICBTRVRfUkVHX0lOREVYIChjdW0sIGluZGV4KTsKKysKKysgIGlmIChHRVRfUkVHX0lOREVYIChjdW0pID49IDApCisrICAgIHJldHVybiBnZW5fcnR4X1JFRyAobW9kZSwKKysJCQlhdnIzMl9mdW5jdGlvbl9hcmdfcmVnbGlzdFtHRVRfUkVHX0lOREVYIChjdW0pXSk7CisrCisrICByZXR1cm4gTlVMTF9SVFg7CisrfQorKworKy8qCisrICBTZXQgdGhlIHJlZ2lzdGVyIHVzZWQgZm9yIHBhc3NpbmcgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGEgZnVuY3Rpb24uCisrKi8KKyt2b2lkCisrYXZyMzJfaW5pdF9jdW11bGF0aXZlX2FyZ3MgKENVTVVMQVRJVkVfQVJHUyAqIGN1bSwgCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWUgZm50eXBlIEFUVFJJQlVURV9VTlVTRUQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0eCBsaWJuYW1lIEFUVFJJQlVURV9VTlVTRUQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWUgZm5kZWNsIEFUVFJJQlVURV9VTlVTRUQpCisrICB7CisrICAgIC8qIFNldCBhbGwgcmVnaXN0ZXJzIGFzIHVudXNlZC4gKi8KKysgICAgU0VUX0lOREVYRVNfVU5VU0VEIChjdW0pOworKworKyAgICAvKiBSZXNldCB1c2VzX2Fub255bW91c19hcmdzICovCisrICAgIGN1bS0+dXNlc19hbm9ueW1vdXNfYXJncyA9IDA7CisrCisrICAgIC8qIFJlc2V0IHNpemUgb2Ygc3RhY2sgcHVzaGVkIGFyZ3VtZW50cyAqLworKyAgICBjdW0tPnN0YWNrX3B1c2hlZF9hcmdzX3NpemUgPSAwOworKyAgfQorKworKy8qCisrICBTZXQgcmVnaXN0ZXIgdXNlZCBmb3IgcGFzc2luZyB0aGUgbmV4dCBhcmd1bWVudCB0byBhIGZ1bmN0aW9uLiBPbmx5IHRoZQorKyAgU2NyYXRjaCBSZWdpc3RlcnMgYXJlIHVzZWQuCisrCisrCQludW1iZXIgIG5hbWUKKysJCSAgIDE1ICAgcjE1ICBQQworKwkJICAgMTQgICByMTQgIExSCisrCQkgICAxMyAgIHIxMyBfU1BfX19fX19fX18KKysgICAgIEZJUlNUX0NVTV9SRUcgMTIgICByMTIgX3x8XworKwkJICAgMTAgICByMTEgIHx8CisrCQkgICAxMSAgIHIxMCBffHxfICBTY3JhdGNoIFJlZ2lzdGVycworKwkJICAgIDggICByOSAgIHx8CisrICBMQVNUX1NDUkFUQ0hfUkVHICA5ICAgcjggIF9cL19fX19fX19fXworKwkJICAgIDYgICByNyAgIC9cCisrCQkgICAgNyAgIHI2ICAgfHwKKysJCSAgICA0ICAgcjUgICB8fAorKwkJICAgIDUgICByNCAgIHx8CisrCQkgICAgMiAgIHIzICAgfHwKKysJCSAgICAzICAgcjIgICB8fAorKwkJICAgIDAgICByMSAgIHx8CisrCQkgICAgMSAgIHIwICBffHxfX19fX19fX18KKysKKysqLworK3ZvaWQKKythdnIzMl9mdW5jdGlvbl9hcmdfYWR2YW5jZSAoQ1VNVUxBVElWRV9BUkdTICogY3VtLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorKwkJCSAgICB0cmVlIHR5cGUsIGludCBuYW1lZCBBVFRSSUJVVEVfVU5VU0VEKQorK3sKKysgIEhPU1RfV0lERV9JTlQgYXJnX3NpemUsIGFyZ19yc2l6ZTsKKysKKysgIGlmICh0eXBlKQorKyAgICB7CisrICAgICAgYXJnX3NpemUgPSBpbnRfc2l6ZV9pbl9ieXRlcyAodHlwZSk7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGFyZ19zaXplID0gR0VUX01PREVfU0laRSAobW9kZSk7CisrICAgIH0KKysgIGFyZ19yc2l6ZSA9IFBVU0hfUk9VTkRJTkcgKGFyZ19zaXplKTsKKysKKysgIC8qIEl0IHRoZSBhcmd1bWVudCBoYWQgdG8gYmUgcGFzc2VkIGluIHN0YWNrLCBubyByZWdpc3RlciBpcyB1c2VkLiAqLworKyAgaWYgKCgqdGFyZ2V0bS5jYWxscy5tdXN0X3Bhc3NfaW5fc3RhY2spIChtb2RlLCB0eXBlKSkKKysgICAgeworKyAgICAgIGN1bS0+c3RhY2tfcHVzaGVkX2FyZ3Nfc2l6ZSArPSBQVVNIX1JPVU5ESU5HIChpbnRfc2l6ZV9pbl9ieXRlcyAodHlwZSkpOworKyAgICAgIHJldHVybjsKKysgICAgfQorKworKyAgLyogTWFyayB0aGUgdXNlZCByZWdpc3RlcnMgYXMgInVzZWQiLiAqLworKyAgaWYgKEdFVF9SRUdfSU5ERVggKGN1bSkgPj0gMCkKKysgICAgeworKyAgICAgIFNFVF9VU0VEX0lOREVYIChjdW0sIEdFVF9SRUdfSU5ERVggKGN1bSkpOworKyAgICAgIGlmIChhcmdfcnNpemUgPT0gOCkKKysJeworKwkgIFNFVF9VU0VEX0lOREVYIChjdW0sIChHRVRfUkVHX0lOREVYIChjdW0pICsgMSkpOworKwl9CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIC8qIEhhZCB0byB1c2Ugc3RhY2sgKi8KKysgICAgICBjdW0tPnN0YWNrX3B1c2hlZF9hcmdzX3NpemUgKz0gYXJnX3JzaXplOworKyAgICB9CisrfQorKworKy8qCisrICBEZWZpbmVzIHdpdGNoIGRpcmVjdGlvbiB0byBnbyB0byBmaW5kIHRoZSBuZXh0IHJlZ2lzdGVyIHRvIHVzZSBpZiB0aGUKKysgIGFyZ3VtZW50IGlzIGxhcmdlciB0aGVuIG9uZSByZWdpc3RlciBvciBmb3IgYXJndW1lbnRzIHNob3J0ZXIgdGhhbiBhbgorKyAgaW50IHdoaWNoIGlzIG5vdCBwcm9tb3RlZCwgc3VjaCBhcyB0aGUgbGFzdCBwYXJ0IG9mIHN0cnVjdHVyZXMgd2l0aAorKyAgc2l6ZSBub3QgYSBtdWx0aXBsZSBvZiA0LiAqLworK2VudW0gZGlyZWN0aW9uCisrYXZyMzJfZnVuY3Rpb25fYXJnX3BhZGRpbmcgKGVudW0gbWFjaGluZV9tb2RlIG1vZGUgQVRUUklCVVRFX1VOVVNFRCwKKysJCQkgICAgdHJlZSB0eXBlKQorK3sKKysgIC8qIFBhZCB1cHdhcmQgZm9yIGFsbCBhZ2dyZWdhdGVzIGV4Y2VwdCBieXRlIGFuZCBoYWxmd29yZCBzaXplZCBhZ2dyZWdhdGVzCisrICAgICB3aGljaCBjYW4gYmUgcGFzc2VkIGluIHJlZ2lzdGVycy4gKi8KKysgIGlmICh0eXBlCisrICAgICAgJiYgQUdHUkVHQVRFX1RZUEVfUCAodHlwZSkKKysgICAgICAmJiAoaW50X3NpemVfaW5fYnl0ZXMgKHR5cGUpICE9IDEpCisrICAgICAgJiYgISgoaW50X3NpemVfaW5fYnl0ZXMgKHR5cGUpID09IDIpCisrCSAgICYmIFRZUEVfQUxJR05fVU5JVCAodHlwZSkgPj0gMikKKysgICAgICAmJiAoaW50X3NpemVfaW5fYnl0ZXMgKHR5cGUpICYgMHgzKSkKKysgICAgeworKyAgICAgIHJldHVybiB1cHdhcmQ7CisrICAgIH0KKysKKysgIHJldHVybiBkb3dud2FyZDsKKyt9CisrCisrLyoKKysgIFJldHVybiBhIHJ0eCB1c2VkIGZvciB0aGUgcmV0dXJuIHZhbHVlIGZyb20gYSBmdW5jdGlvbiBjYWxsLgorKyovCisrcnR4CisrYXZyMzJfZnVuY3Rpb25fdmFsdWUgKHRyZWUgdHlwZSwgdHJlZSBmdW5jLCBib29sIG91dGdvaW5nIEFUVFJJQlVURV9VTlVTRUQpCisreworKyAgaWYgKGF2cjMyX3JldHVybl9pbl9tZW1vcnkgKHR5cGUsIGZ1bmMpKQorKyAgICByZXR1cm4gTlVMTF9SVFg7CisrCisrICBpZiAoaW50X3NpemVfaW5fYnl0ZXMgKHR5cGUpIDw9IDQpCisrICAgIGlmIChhdnIzMl9yZXR1cm5faW5fbXNiICh0eXBlKSkKKysgICAgICAvKiBBZ2dyZWdhdGVzIG9mIHNpemUgbGVzcyB0aGFuIGEgd29yZCB3aGljaCBkb2VzIGFsaWduIHRoZSBkYXRhIGluIHRoZQorKyAgICAgICAgIE1TQiBtdXN0IHVzZSBTSW1vZGUgZm9yIHIxMi4gKi8KKysgICAgICByZXR1cm4gZ2VuX3J0eF9SRUcgKFNJbW9kZSwgUkVUX1JFR0lTVEVSKTsKKysgICAgZWxzZQorKyAgICAgIHJldHVybiBnZW5fcnR4X1JFRyAoVFlQRV9NT0RFICh0eXBlKSwgUkVUX1JFR0lTVEVSKTsKKysgIGVsc2UgaWYgKGludF9zaXplX2luX2J5dGVzICh0eXBlKSA8PSA4KQorKyAgICByZXR1cm4gZ2VuX3J0eF9SRUcgKFRZUEVfTU9ERSAodHlwZSksIElOVEVSTkFMX1JFR05VTSAoMTEpKTsKKysKKysgIHJldHVybiBOVUxMX1JUWDsKKyt9CisrCisrLyoKKysgIFJldHVybiBhIHJ0eCB1c2VkIGZvciB0aGUgcmV0dXJuIHZhbHVlIGZyb20gYSBsaWJyYXJ5IGZ1bmN0aW9uIGNhbGwuCisrKi8KKytydHgKKythdnIzMl9saWJjYWxsX3ZhbHVlIChlbnVtIG1hY2hpbmVfbW9kZSBtb2RlKQorK3sKKysKKysgIGlmIChHRVRfTU9ERV9TSVpFIChtb2RlKSA8PSA0KQorKyAgICByZXR1cm4gZ2VuX3J0eF9SRUcgKG1vZGUsIFJFVF9SRUdJU1RFUik7CisrICBlbHNlIGlmIChHRVRfTU9ERV9TSVpFIChtb2RlKSA8PSA4KQorKyAgICByZXR1cm4gZ2VuX3J0eF9SRUcgKG1vZGUsIElOVEVSTkFMX1JFR05VTSAoMTEpKTsKKysgIGVsc2UKKysgICAgcmV0dXJuIE5VTExfUlRYOworK30KKysKKysvKiBSZXR1cm4gVFJVRSBpZiBYIHJlZmVyZW5jZXMgYSBTWU1CT0xfUkVGLiAgKi8KKytpbnQKKytzeW1ib2xfbWVudGlvbmVkX3AgKHJ0eCB4KQorK3sKKysgIGNvbnN0IGNoYXIgKmZtdDsKKysgIGludCBpOworKworKyAgaWYgKEdFVF9DT0RFICh4KSA9PSBTWU1CT0xfUkVGKQorKyAgICByZXR1cm4gMTsKKysKKysgIGZtdCA9IEdFVF9SVFhfRk9STUFUIChHRVRfQ09ERSAoeCkpOworKworKyAgZm9yIChpID0gR0VUX1JUWF9MRU5HVEggKEdFVF9DT0RFICh4KSkgLSAxOyBpID49IDA7IGktLSkKKysgICAgeworKyAgICAgIGlmIChmbXRbaV0gPT0gJ0UnKQorKwl7CisrCSAgaW50IGo7CisrCisrCSAgZm9yIChqID0gWFZFQ0xFTiAoeCwgaSkgLSAxOyBqID49IDA7IGotLSkKKysJICAgIGlmIChzeW1ib2xfbWVudGlvbmVkX3AgKFhWRUNFWFAgKHgsIGksIGopKSkKKysJICAgICAgcmV0dXJuIDE7CisrCX0KKysgICAgICBlbHNlIGlmIChmbXRbaV0gPT0gJ2UnICYmIHN5bWJvbF9tZW50aW9uZWRfcCAoWEVYUCAoeCwgaSkpKQorKwlyZXR1cm4gMTsKKysgICAgfQorKworKyAgcmV0dXJuIDA7CisrfQorKworKy8qIFJldHVybiBUUlVFIGlmIFggcmVmZXJlbmNlcyBhIExBQkVMX1JFRi4gICovCisraW50CisrbGFiZWxfbWVudGlvbmVkX3AgKHJ0eCB4KQorK3sKKysgIGNvbnN0IGNoYXIgKmZtdDsKKysgIGludCBpOworKworKyAgaWYgKEdFVF9DT0RFICh4KSA9PSBMQUJFTF9SRUYpCisrICAgIHJldHVybiAxOworKworKyAgZm10ID0gR0VUX1JUWF9GT1JNQVQgKEdFVF9DT0RFICh4KSk7CisrICBmb3IgKGkgPSBHRVRfUlRYX0xFTkdUSCAoR0VUX0NPREUgKHgpKSAtIDE7IGkgPj0gMDsgaS0tKQorKyAgICB7CisrICAgICAgaWYgKGZtdFtpXSA9PSAnRScpCisrCXsKKysJICBpbnQgajsKKysKKysJICBmb3IgKGogPSBYVkVDTEVOICh4LCBpKSAtIDE7IGogPj0gMDsgai0tKQorKwkgICAgaWYgKGxhYmVsX21lbnRpb25lZF9wIChYVkVDRVhQICh4LCBpLCBqKSkpCisrCSAgICAgIHJldHVybiAxOworKwl9CisrICAgICAgZWxzZSBpZiAoZm10W2ldID09ICdlJyAmJiBsYWJlbF9tZW50aW9uZWRfcCAoWEVYUCAoeCwgaSkpKQorKwlyZXR1cm4gMTsKKysgICAgfQorKworKyAgcmV0dXJuIDA7CisrfQorKworKy8qIFJldHVybiBUUlVFIGlmIFggY29udGFpbnMgYSBNRU0gZXhwcmVzc2lvbi4gICovCisraW50CisrbWVtX21lbnRpb25lZF9wIChydHggeCkKKyt7CisrICBjb25zdCBjaGFyICpmbXQ7CisrICBpbnQgaTsKKysKKysgIGlmIChNRU1fUCAoeCkpCisrICAgIHJldHVybiAxOworKworKyAgZm10ID0gR0VUX1JUWF9GT1JNQVQgKEdFVF9DT0RFICh4KSk7CisrICBmb3IgKGkgPSBHRVRfUlRYX0xFTkdUSCAoR0VUX0NPREUgKHgpKSAtIDE7IGkgPj0gMDsgaS0tKQorKyAgICB7CisrICAgICAgaWYgKGZtdFtpXSA9PSAnRScpCisrCXsKKysJICBpbnQgajsKKysKKysJICBmb3IgKGogPSBYVkVDTEVOICh4LCBpKSAtIDE7IGogPj0gMDsgai0tKQorKwkgICAgaWYgKG1lbV9tZW50aW9uZWRfcCAoWFZFQ0VYUCAoeCwgaSwgaikpKQorKwkgICAgICByZXR1cm4gMTsKKysJfQorKyAgICAgIGVsc2UgaWYgKGZtdFtpXSA9PSAnZScgJiYgbWVtX21lbnRpb25lZF9wIChYRVhQICh4LCBpKSkpCisrCXJldHVybiAxOworKyAgICB9CisrCisrICByZXR1cm4gMDsKKyt9CisrCisraW50CisrYXZyMzJfbGVnaXRpbWF0ZV9waWNfb3BlcmFuZF9wIChydHggeCkKKyt7CisrCisrICAvKiBXZSBjYW4ndCBoYXZlIGNvbnN0LCB0aGlzIG11c3QgYmUgYnJva2VuIGRvd24gdG8gYSBzeW1ib2wuICovCisrICBpZiAoR0VUX0NPREUgKHgpID09IENPTlNUKQorKyAgICByZXR1cm4gRkFMU0U7CisrCisrICAvKiBDYW4ndCBhY2Nlc3Mgc3ltYm9scyBvciBsYWJlbHMgdmlhIHRoZSBjb25zdGFudCBwb29sIGVpdGhlciAqLworKyAgaWYgKChHRVRfQ09ERSAoeCkgPT0gU1lNQk9MX1JFRgorKyAgICAgICAmJiBDT05TVEFOVF9QT09MX0FERFJFU1NfUCAoeCkKKysgICAgICAgJiYgKHN5bWJvbF9tZW50aW9uZWRfcCAoZ2V0X3Bvb2xfY29uc3RhbnQgKHgpKQorKwkgICB8fCBsYWJlbF9tZW50aW9uZWRfcCAoZ2V0X3Bvb2xfY29uc3RhbnQgKHgpKSkpKQorKyAgICByZXR1cm4gRkFMU0U7CisrCisrICByZXR1cm4gVFJVRTsKKyt9CisrCisrCisrcnR4CisrbGVnaXRpbWl6ZV9waWNfYWRkcmVzcyAocnR4IG9yaWcsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUgQVRUUklCVVRFX1VOVVNFRCwKKysJCQlydHggcmVnKQorK3sKKysKKysgIGlmIChHRVRfQ09ERSAob3JpZykgPT0gU1lNQk9MX1JFRiB8fCBHRVRfQ09ERSAob3JpZykgPT0gTEFCRUxfUkVGKQorKyAgICB7CisrICAgICAgaW50IHN1YnJlZ3MgPSAwOworKworKyAgICAgIGlmIChyZWcgPT0gMCkKKysJeworKwkgIGlmIChub19uZXdfcHNldWRvcykKKysJICAgIGFib3J0ICgpOworKwkgIGVsc2UKKysJICAgIHJlZyA9IGdlbl9yZWdfcnR4IChQbW9kZSk7CisrCisrCSAgc3VicmVncyA9IDE7CisrCX0KKysKKysgICAgICBlbWl0X21vdmVfaW5zbiAocmVnLCBvcmlnKTsKKysKKysgICAgICAvKiBPbmx5IHNldCBjdXJyZW50IGZ1bmN0aW9uIGFzIHVzaW5nIHBpYyBvZmZzZXQgdGFibGUgaWYgZmxhZ19waWMgaXMKKysgICAgICAgICBzZXQuIFRoaXMgaXMgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzIGFsc28gdXNlZCBpZgorKyAgICAgICAgIFRBUkdFVF9IQVNfQVNNX0FERFJfUFNFVURPUyBpcyBzZXQuICovCisrICAgICAgaWYgKGZsYWdfcGljKQorKwljdXJyZW50X2Z1bmN0aW9uX3VzZXNfcGljX29mZnNldF90YWJsZSA9IDE7CisrCisrICAgICAgLyogUHV0IGEgUkVHX0VRVUFMIG5vdGUgb24gdGhpcyBpbnNuLCBzbyB0aGF0IGl0IGNhbiBiZSBvcHRpbWl6ZWQgYnkKKysgICAgICAgICBsb29wLiAgKi8KKysgICAgICByZXR1cm4gcmVnOworKyAgICB9CisrICBlbHNlIGlmIChHRVRfQ09ERSAob3JpZykgPT0gQ09OU1QpCisrICAgIHsKKysgICAgICBydHggYmFzZSwgb2Zmc2V0OworKworKyAgICAgIGlmIChmbGFnX3BpYworKwkgICYmIEdFVF9DT0RFIChYRVhQIChvcmlnLCAwKSkgPT0gUExVUworKwkgICYmIFhFWFAgKFhFWFAgKG9yaWcsIDApLCAwKSA9PSBwaWNfb2Zmc2V0X3RhYmxlX3J0eCkKKysJcmV0dXJuIG9yaWc7CisrCisrICAgICAgaWYgKHJlZyA9PSAwKQorKwl7CisrCSAgaWYgKG5vX25ld19wc2V1ZG9zKQorKwkgICAgYWJvcnQgKCk7CisrCSAgZWxzZQorKwkgICAgcmVnID0gZ2VuX3JlZ19ydHggKFBtb2RlKTsKKysJfQorKworKyAgICAgIGlmIChHRVRfQ09ERSAoWEVYUCAob3JpZywgMCkpID09IFBMVVMpCisrCXsKKysJICBiYXNlID0KKysJICAgIGxlZ2l0aW1pemVfcGljX2FkZHJlc3MgKFhFWFAgKFhFWFAgKG9yaWcsIDApLCAwKSwgUG1vZGUsIHJlZyk7CisrCSAgb2Zmc2V0ID0KKysJICAgIGxlZ2l0aW1pemVfcGljX2FkZHJlc3MgKFhFWFAgKFhFWFAgKG9yaWcsIDApLCAxKSwgUG1vZGUsCisrCQkJCSAgICBiYXNlID09IHJlZyA/IDAgOiByZWcpOworKwl9CisrICAgICAgZWxzZQorKwlhYm9ydCAoKTsKKysKKysgICAgICBpZiAoR0VUX0NPREUgKG9mZnNldCkgPT0gQ09OU1RfSU5UKQorKwl7CisrCSAgLyogVGhlIGJhc2UgcmVnaXN0ZXIgZG9lc24ndCByZWFsbHkgbWF0dGVyLCB3ZSBvbmx5IHdhbnQgdG8gdGVzdAorKwkgICAgIHRoZSBpbmRleCBmb3IgdGhlIGFwcHJvcHJpYXRlIG1vZGUuICAqLworKwkgIGlmICghYXZyMzJfY29uc3Rfb2tfZm9yX2NvbnN0cmFpbnRfcCAoSU5UVkFMIChvZmZzZXQpLCAnSScsICJJczIxIikpCisrCSAgICB7CisrCSAgICAgIGlmICghbm9fbmV3X3BzZXVkb3MpCisrCQlvZmZzZXQgPSBmb3JjZV9yZWcgKFBtb2RlLCBvZmZzZXQpOworKwkgICAgICBlbHNlCisrCQlhYm9ydCAoKTsKKysJICAgIH0KKysKKysJICBpZiAoR0VUX0NPREUgKG9mZnNldCkgPT0gQ09OU1RfSU5UKQorKwkgICAgcmV0dXJuIHBsdXNfY29uc3RhbnQgKGJhc2UsIElOVFZBTCAob2Zmc2V0KSk7CisrCX0KKysKKysgICAgICByZXR1cm4gZ2VuX3J0eF9QTFVTIChQbW9kZSwgYmFzZSwgb2Zmc2V0KTsKKysgICAgfQorKworKyAgcmV0dXJuIG9yaWc7CisrfQorKworKy8qIEdlbmVyYXRlIGNvZGUgdG8gbG9hZCB0aGUgUElDIHJlZ2lzdGVyLiAgKi8KKyt2b2lkCisrYXZyMzJfbG9hZF9waWNfcmVnaXN0ZXIgKHZvaWQpCisreworKyAgcnR4IGwxLCBwaWNfdG1wOworKyAgcnR4IGdsb2JhbF9vZmZzZXRfdGFibGU7CisrCisrICBpZiAoKGN1cnJlbnRfZnVuY3Rpb25fdXNlc19waWNfb2Zmc2V0X3RhYmxlID09IDApIHx8IFRBUkdFVF9OT19JTklUX0dPVCkKKysgICAgcmV0dXJuOworKworKyAgaWYgKCFmbGFnX3BpYykKKysgICAgYWJvcnQgKCk7CisrCisrICBsMSA9IGdlbl9sYWJlbF9ydHggKCk7CisrCisrICBnbG9iYWxfb2Zmc2V0X3RhYmxlID0gZ2VuX3J0eF9TWU1CT0xfUkVGIChQbW9kZSwgIl9HTE9CQUxfT0ZGU0VUX1RBQkxFXyIpOworKyAgcGljX3RtcCA9CisrICAgIGdlbl9ydHhfQ09OU1QgKFBtb2RlLAorKwkJICAgZ2VuX3J0eF9NSU5VUyAoU0ltb2RlLCBnZW5fcnR4X0xBQkVMX1JFRiAoUG1vZGUsIGwxKSwKKysJCQkJICBnbG9iYWxfb2Zmc2V0X3RhYmxlKSk7CisrICBlbWl0X2luc24gKGdlbl9waWNfbG9hZF9hZGRyCisrCSAgICAgKHBpY19vZmZzZXRfdGFibGVfcnR4LCBmb3JjZV9jb25zdF9tZW0gKFNJbW9kZSwgcGljX3RtcCkpKTsKKysgIGVtaXRfaW5zbiAoZ2VuX3BpY19jb21wdXRlX2dvdF9mcm9tX3BjIChwaWNfb2Zmc2V0X3RhYmxlX3J0eCwgbDEpKTsKKysKKysgIC8qIE5lZWQgdG8gZW1pdCB0aGlzIHdoZXRoZXIgb3Igbm90IHdlIG9iZXkgcmVnZGVjbHMsIHNpbmNlIHNldGptcC9sb25nam1wCisrICAgICBjYW4gY2F1c2UgbGlmZSBpbmZvIHRvIHNjcmV3IHVwLiAgKi8KKysgIGVtaXRfaW5zbiAoZ2VuX3J0eF9VU0UgKFZPSURtb2RlLCBwaWNfb2Zmc2V0X3RhYmxlX3J0eCkpOworK30KKysKKysKKysKKysvKiBUaGlzIGhvb2sgc2hvdWxkIHJldHVybiB0cnVlIGlmIHZhbHVlcyBvZiB0eXBlIHR5cGUgYXJlIHJldHVybmVkIGF0IHRoZSBtb3N0CisrICAgc2lnbmlmaWNhbnQgZW5kIG9mIGEgcmVnaXN0ZXIgKGluIG90aGVyIHdvcmRzLCBpZiB0aGV5IGFyZSBwYWRkZWQgYXQgdGhlCisrICAgbGVhc3Qgc2lnbmlmaWNhbnQgZW5kKS4gWW91IGNhbiBhc3N1bWUgdGhhdCB0eXBlIGlzIHJldHVybmVkIGluIGEgcmVnaXN0ZXI7CisrICAgdGhlIGNhbGxlciBpcyByZXF1aXJlZCB0byBjaGVjayB0aGlzLiAgTm90ZSB0aGF0IHRoZSByZWdpc3RlciBwcm92aWRlZCBieQorKyAgIEZVTkNUSU9OX1ZBTFVFIG11c3QgYmUgYWJsZSB0byBob2xkIHRoZSBjb21wbGV0ZSByZXR1cm4gdmFsdWUuIEZvciBleGFtcGxlLAorKyAgIGlmIGEgMS0sIDItIG9yIDMtYnl0ZSBzdHJ1Y3R1cmUgaXMgcmV0dXJuZWQgYXQgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgZW5kIG9mIGEKKysgICA0LWJ5dGUgcmVnaXN0ZXIsIEZVTkNUSU9OX1ZBTFVFIHNob3VsZCBwcm92aWRlIGFuIFNJbW9kZSBydHguICovCisrYm9vbAorK2F2cjMyX3JldHVybl9pbl9tc2IgKHRyZWUgdHlwZSBBVFRSSUJVVEVfVU5VU0VEKQorK3sKKysgIC8qIGlmICggQUdHUkVHQVRFX1RZUEVfUCAodHlwZSkgKSBpZiAoKGludF9zaXplX2luX2J5dGVzKHR5cGUpID09IDEpIHx8CisrICAgICAoKGludF9zaXplX2luX2J5dGVzKHR5cGUpID09IDIpICYmIFRZUEVfQUxJR05fVU5JVCh0eXBlKSA+PSAyKSkgcmV0dXJuCisrICAgICBmYWxzZTsgZWxzZSByZXR1cm4gdHJ1ZTsgKi8KKysKKysgIHJldHVybiBmYWxzZTsKKyt9CisrCisrCisrLyoKKysgIFJldHVybnMgb25lIGlmIGEgY2VydGFpbiBmdW5jdGlvbiB2YWx1ZSBpcyBnb2luZyB0byBiZSByZXR1cm5lZCBpbiBtZW1vcnkKKysgIGFuZCB6ZXJvIGlmIGl0IGlzIGdvaW5nIHRvIGJlIHJldHVybmVkIGluIGEgcmVnaXN0ZXIuCisrCisrICBCTEttb2RlIGFuZCBhbGwgb3RoZXIgbW9kZXMgdGhhdCBpcyBsYXJnZXIgdGhhbiA2NCBiaXRzIGFyZSByZXR1cm5lZCBpbgorKyAgbWVtb3J5LgorKyovCisrYm9vbAorK2F2cjMyX3JldHVybl9pbl9tZW1vcnkgKHRyZWUgdHlwZSwgdHJlZSBmbnR5cGUgQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICBpZiAoVFlQRV9NT0RFICh0eXBlKSA9PSBWT0lEbW9kZSkKKysgICAgcmV0dXJuIGZhbHNlOworKworKyAgaWYgKGludF9zaXplX2luX2J5dGVzICh0eXBlKSA+ICgyICogVU5JVFNfUEVSX1dPUkQpCisrICAgICAgfHwgaW50X3NpemVfaW5fYnl0ZXMgKHR5cGUpID09IC0xKQorKyAgICB7CisrICAgICAgcmV0dXJuIHRydWU7CisrICAgIH0KKysKKysgIC8qIElmIHdlIGhhdmUgYW4gYWdncmVnYXRlIHRoZW4gdXNlIHRoZSBzYW1lIG1lY2hhbmlzbSBhcyB3aGVuIGNoZWNraW5nIGlmCisrICAgICBpdCBzaG91bGQgYmUgcGFzc2VkIG9uIHRoZSBzdGFjay4gKi8KKysgIGlmICh0eXBlCisrICAgICAgJiYgQUdHUkVHQVRFX1RZUEVfUCAodHlwZSkKKysgICAgICAmJiAoKnRhcmdldG0uY2FsbHMubXVzdF9wYXNzX2luX3N0YWNrKSAoVFlQRV9NT0RFICh0eXBlKSwgdHlwZSkpCisrICAgIHJldHVybiB0cnVlOworKworKyAgcmV0dXJuIGZhbHNlOworK30KKysKKysKKysvKiBPdXRwdXQgdGhlIGNvbnN0YW50IHBhcnQgb2YgdGhlIHRyYW1wb2xpbmUuCisrICAgbGRkcGMgICAgcjAsIHBjWzB4ODplXSA7IGxvYWQgc3RhdGljIGNoYWluIHJlZ2lzdGVyCisrICAgbGRkcGMgICAgcGMsIHBjWzB4ODplXSA7IGp1bXAgdG8gc3VicnV0aW5lCisrICAgLmxvbmcgICAgMAkJIDsgQWRkcmVzcyB0byBzdGF0aWMgY2hhaW4sCisrCQkJIDsgZmlsbGVkIGluIGJ5IGF2cjMyX2luaXRpYWxpemVfdHJhbXBvbGluZSgpCisrICAgLmxvbmcgICAgMAkJIDsgQWRkcmVzcyB0byBzdWJydXRpbmUsCisrCQkJIDsgZmlsbGVkIGluIGJ5IGF2cjMyX2luaXRpYWxpemVfdHJhbXBvbGluZSgpCisrKi8KKyt2b2lkCisrYXZyMzJfdHJhbXBvbGluZV90ZW1wbGF0ZSAoRklMRSAqIGZpbGUpCisreworKyAgZnByaW50ZiAoZmlsZSwgIlx0bGRkcGMgICAgcjAsIHBjWzhdXG4iKTsKKysgIGZwcmludGYgKGZpbGUsICJcdGxkZHBjICAgIHBjLCBwY1s4XVxuIik7CisrICAvKiBtYWtlIHJvb20gZm9yIHRoZSBhZGRyZXNzIG9mIHRoZSBzdGF0aWMgY2hhaW4uICovCisrICBmcHJpbnRmIChmaWxlLCAiXHQubG9uZ1x0MFxuIik7CisrICAvKiBtYWtlIHJvb20gZm9yIHRoZSBhZGRyZXNzIHRvIHRoZSBzdWJydXRpbmUuICovCisrICBmcHJpbnRmIChmaWxlLCAiXHQubG9uZ1x0MFxuIik7CisrfQorKworKworKy8qCisrICBJbml0aWFsaXplIHRoZSB2YXJpYWJsZSBwYXJ0cyBvZiBhIHRyYW1wb2xpbmUuCisrKi8KKyt2b2lkCisrYXZyMzJfaW5pdGlhbGl6ZV90cmFtcG9saW5lIChydHggYWRkciwgcnR4IGZuYWRkciwgcnR4IHN0YXRpY19jaGFpbikKKyt7CisrICAvKiBTdG9yZSB0aGUgYWRkcmVzcyB0byB0aGUgc3RhdGljIGNoYWluLiAqLworKyAgZW1pdF9tb3ZlX2luc24gKGdlbl9ydHhfTUVNCisrCQkgIChTSW1vZGUsIHBsdXNfY29uc3RhbnQgKGFkZHIsIFRSQU1QT0xJTkVfU0laRSAtIDQpKSwKKysJCSAgc3RhdGljX2NoYWluKTsKKysKKysgIC8qIFN0b3JlIHRoZSBhZGRyZXNzIHRvIHRoZSBmdW5jdGlvbi4gKi8KKysgIGVtaXRfbW92ZV9pbnNuIChnZW5fcnR4X01FTSAoU0ltb2RlLCBwbHVzX2NvbnN0YW50IChhZGRyLCBUUkFNUE9MSU5FX1NJWkUpKSwKKysJCSAgZm5hZGRyKTsKKysKKysgIGVtaXRfaW5zbiAoZ2VuX2NhY2hlIChnZW5fcnR4X1JFRyAoU0ltb2RlLCAxMyksCisrCQkJZ2VuX3J0eF9DT05TVF9JTlQgKFNJbW9kZSwKKysJCQkJCSAgIEFWUjMyX0NBQ0hFX0lOVkFMSURBVEVfSUNBQ0hFKSkpOworK30KKysKKysvKiBSZXR1cm4gbm9uemVybyBpZiBYIGlzIHZhbGlkIGFzIGFuIGFkZHJlc3NpbmcgcmVnaXN0ZXIuICAqLworK2ludAorK2F2cjMyX2FkZHJlc3NfcmVnaXN0ZXJfcnR4X3AgKHJ0eCB4LCBpbnQgc3RyaWN0X3ApCisreworKyAgaW50IHJlZ25vOworKworKyAgaWYgKCFyZWdpc3Rlcl9vcGVyYW5kKHgsIEdFVF9NT0RFKHgpKSkKKysgICAgcmV0dXJuIDA7CisrCisrICAvKiBJZiBzdHJpY3Qgd2UgcmVxdWlyZSB0aGUgcmVnaXN0ZXIgdG8gYmUgYSBoYXJkIHJlZ2lzdGVyLiAqLworKyAgaWYgKHN0cmljdF9wCisrICAgICAgJiYgIVJFR19QKHgpKQorKyAgICByZXR1cm4gMDsKKysKKysgIHJlZ25vID0gUkVHTk8gKHgpOworKworKyAgaWYgKHN0cmljdF9wKQorKyAgICByZXR1cm4gUkVHTk9fT0tfRk9SX0JBU0VfUCAocmVnbm8pOworKworKyAgcmV0dXJuIChyZWdubyA8PSBMQVNUX1JFR05VTSB8fCByZWdubyA+PSBGSVJTVF9QU0VVRE9fUkVHSVNURVIpOworK30KKysKKysvKiBSZXR1cm4gbm9uemVybyBpZiBJTkRFWCBpcyB2YWxpZCBmb3IgYW4gYWRkcmVzcyBpbmRleCBvcGVyYW5kLiAgKi8KKytpbnQKKythdnIzMl9sZWdpdGltYXRlX2luZGV4X3AgKGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIHJ0eCBpbmRleCwgaW50IHN0cmljdF9wKQorK3sKKysgIGVudW0gcnR4X2NvZGUgY29kZSA9IEdFVF9DT0RFIChpbmRleCk7CisrCisrICBpZiAoR0VUX01PREVfU0laRSAobW9kZSkgPiA4KQorKyAgICByZXR1cm4gMDsKKysKKysgIC8qIFN0YW5kYXJkIGNvcHJvY2Vzc29yIGFkZHJlc3NpbmcgbW9kZXMuICAqLworKyAgaWYgKGNvZGUgPT0gQ09OU1RfSU5UKQorKyAgICB7CisrICAgICAgaWYgKFRBUkdFVF9IQVJEX0ZMT0FUICYmIEdFVF9NT0RFX0NMQVNTIChtb2RlKSA9PSBNT0RFX0ZMT0FUKQorKwkvKiBDb3Byb2Nlc3NvciBtZW0gaW5zbnMgaGFzIGEgc21hbGxlciByZWFjaCB0aGFuIG9yZGluYXJ5IG1lbSBpbnNucyAqLworKwlyZXR1cm4gQ09OU1RfT0tfRk9SX0NPTlNUUkFJTlRfUCAoSU5UVkFMIChpbmRleCksICdLJywgIkt1MTQiKTsKKysgICAgICBlbHNlCisrCXJldHVybiBDT05TVF9PS19GT1JfQ09OU1RSQUlOVF9QIChJTlRWQUwgKGluZGV4KSwgJ0snLCAiS3MxNiIpOworKyAgICB9CisrCisrICBpZiAoYXZyMzJfYWRkcmVzc19yZWdpc3Rlcl9ydHhfcCAoaW5kZXgsIHN0cmljdF9wKSkKKysgICAgcmV0dXJuIDE7CisrCisrICBpZiAoY29kZSA9PSBNVUxUKQorKyAgICB7CisrICAgICAgcnR4IHhpb3AwID0gWEVYUCAoaW5kZXgsIDApOworKyAgICAgIHJ0eCB4aW9wMSA9IFhFWFAgKGluZGV4LCAxKTsKKysgICAgICByZXR1cm4gKChhdnIzMl9hZGRyZXNzX3JlZ2lzdGVyX3J0eF9wICh4aW9wMCwgc3RyaWN0X3ApCisrCSAgICAgICAmJiBwb3dlcl9vZl90d29fb3BlcmFuZCAoeGlvcDEsIFNJbW9kZSkKKysJICAgICAgICYmIChJTlRWQUwgKHhpb3AxKSA8PSA4KSkKKysJICAgICAgfHwgKGF2cjMyX2FkZHJlc3NfcmVnaXN0ZXJfcnR4X3AgKHhpb3AxLCBzdHJpY3RfcCkKKysJCSAgJiYgcG93ZXJfb2ZfdHdvX29wZXJhbmQgKHhpb3AwLCBTSW1vZGUpCisrCQkgICYmIChJTlRWQUwgKHhpb3AwKSA8PSA4KSkpOworKyAgICB9CisrICBlbHNlIGlmIChjb2RlID09IEFTSElGVCkKKysgICAgeworKyAgICAgIHJ0eCBvcCA9IFhFWFAgKGluZGV4LCAxKTsKKysKKysgICAgICByZXR1cm4gKGF2cjMyX2FkZHJlc3NfcmVnaXN0ZXJfcnR4X3AgKFhFWFAgKGluZGV4LCAwKSwgc3RyaWN0X3ApCisrCSAgICAgICYmIEdFVF9DT0RFIChvcCkgPT0gQ09OU1RfSU5UCisrCSAgICAgICYmIElOVFZBTCAob3ApID4gMCAmJiBJTlRWQUwgKG9wKSA8PSAzKTsKKysgICAgfQorKworKyAgcmV0dXJuIDA7CisrfQorKworKy8qCisrICBVc2VkIGluIHRoZSBHT19JRl9MRUdJVElNQVRFX0FERFJFU1MgbWFjcm8uIFJldHVybnMgYSBub256ZXJvIHZhbHVlIGlmCisrICB0aGUgUlRYIHggaXMgYSBsZWdpdGltYXRlIG1lbW9yeSBhZGRyZXNzLgorKworKyAgUmV0dXJucyBOT19SRUdTIGlmIHRoZSBhZGRyZXNzIGlzIG5vdCBsZWdhdGltZSwgR0VORVJBTF9SRUdTIG9yIEFMTF9SRUdTCisrICBpZiBpdCBpcy4KKysqLworKworKy8qIEZvcndhcmQgZGVjbGFyYXRpb24qLworK2ludCBpc19taW5pcG9vbF9sYWJlbCAocnR4IGxhYmVsKTsKKysKKytpbnQKKythdnIzMl9sZWdpdGltYXRlX2FkZHJlc3MgKGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIHJ0eCB4LCBpbnQgc3RyaWN0KQorK3sKKysKKysgIHN3aXRjaCAoR0VUX0NPREUgKHgpKQorKyAgICB7CisrICAgIGNhc2UgUkVHOgorKyAgICAgIHJldHVybiBhdnIzMl9hZGRyZXNzX3JlZ2lzdGVyX3J0eF9wICh4LCBzdHJpY3QpOworKyAgICBjYXNlIENPTlNUX0lOVDoKKysgICAgICByZXR1cm4gKChtb2RlPT1TSW1vZGUpCisrICAgICAgICAgICAgICAmJiBDT05TVF9PS19GT1JfQ09OU1RSQUlOVF9QKElOVFZBTCh4KSwgJ0snLCAiS3MxNyIpKTsKKysgICAgY2FzZSBDT05TVDoKKysgICAgICB7CisrCXJ0eCBsYWJlbCA9IGF2cjMyX2ZpbmRfc3ltYm9sICh4KTsKKysJaWYgKGxhYmVsCisrCSAgICAmJgorKwkgICAgKChDT05TVEFOVF9QT09MX0FERFJFU1NfUCAobGFiZWwpCisrCSAgICAgICYmICEoZmxhZ19waWMKKysJCSAgICYmIChzeW1ib2xfbWVudGlvbmVkX3AgKGdldF9wb29sX2NvbnN0YW50IChsYWJlbCkpCisrCQkgICAgICAgfHwgbGFiZWxfbWVudGlvbmVkX3AgKGdldF9wb29sX2NvbnN0YW50IChsYWJlbCkpKSkpCisrCSAgICAgLyogVE9ETyEgQ2FuIHRoaXMgZXZlciBoYXBwZW4/Pz8gKi8KKysJICAgICB8fCAoKEdFVF9DT0RFIChsYWJlbCkgPT0gTEFCRUxfUkVGKQorKwkJICYmIEdFVF9DT0RFIChYRVhQIChsYWJlbCwgMCkpID09IENPREVfTEFCRUwKKysJCSAmJiBpc19taW5pcG9vbF9sYWJlbCAoWEVYUCAobGFiZWwsIDApKSkKKysgICAgICAgICAgICAgLyp8fCAoKEdFVF9DT0RFIChsYWJlbCkgPT0gU1lNQk9MX1JFRikKKysgICAgICAgICAgICAgICAgICYmIG1vZGUgPT0gU0ltb2RlCisrICAgICAgICAgICAgICAgICAmJiBTWU1CT0xfUkVGX1JNV19BRERSKGxhYmVsKSkqLykpCisrCSAgeworKwkgICAgcmV0dXJuIFRSVUU7CisrCSAgfQorKyAgICAgIH0KKysgICAgICBicmVhazsKKysgICAgY2FzZSBMQUJFTF9SRUY6CisrICAgICAgaWYgKEdFVF9DT0RFIChYRVhQICh4LCAwKSkgPT0gQ09ERV9MQUJFTAorKwkgICYmIGlzX21pbmlwb29sX2xhYmVsIChYRVhQICh4LCAwKSkpCisrCXsKKysJICByZXR1cm4gVFJVRTsKKysJfQorKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFNZTUJPTF9SRUY6CisrICAgICAgeworKwlpZiAoQ09OU1RBTlRfUE9PTF9BRERSRVNTX1AgKHgpCisrCSAgICAmJiAhKGZsYWdfcGljCisrCQkgJiYgKHN5bWJvbF9tZW50aW9uZWRfcCAoZ2V0X3Bvb2xfY29uc3RhbnQgKHgpKQorKwkJICAgICB8fCBsYWJlbF9tZW50aW9uZWRfcCAoZ2V0X3Bvb2xfY29uc3RhbnQgKHgpKSkpKQorKwkgIHJldHVybiBUUlVFOworKwllbHNlIGlmIChTWU1CT0xfUkVGX1JDQUxMX0ZVTkNUSU9OX1AgKHgpCisrICAgICAgICAgICAgICAgICB8fCAobW9kZSA9PSBTSW1vZGUKKysgICAgICAgICAgICAgICAgICAgICAmJiBTWU1CT0xfUkVGX1JNV19BRERSICh4KSkpCisrCSAgcmV0dXJuIFRSVUU7CisrCWJyZWFrOworKyAgICAgIH0KKysgICAgY2FzZSBQUkVfREVDOgkJLyogKHByZV9kZWMgKC4uLikpICovCisrICAgIGNhc2UgUE9TVF9JTkM6CQkvKiAocG9zdF9pbmMgKC4uLikpICovCisrICAgICAgcmV0dXJuIGF2cjMyX2FkZHJlc3NfcmVnaXN0ZXJfcnR4X3AgKFhFWFAgKHgsIDApLCBzdHJpY3QpOworKyAgICBjYXNlIFBMVVM6CQkJLyogKHBsdXMgKC4uLikgKC4uLikpICovCisrICAgICAgeworKwlydHggeG9wMCA9IFhFWFAgKHgsIDApOworKwlydHggeG9wMSA9IFhFWFAgKHgsIDEpOworKworKwlyZXR1cm4gKChhdnIzMl9hZGRyZXNzX3JlZ2lzdGVyX3J0eF9wICh4b3AwLCBzdHJpY3QpCisrCQkgJiYgYXZyMzJfbGVnaXRpbWF0ZV9pbmRleF9wIChtb2RlLCB4b3AxLCBzdHJpY3QpKQorKwkJfHwgKGF2cjMyX2FkZHJlc3NfcmVnaXN0ZXJfcnR4X3AgKHhvcDEsIHN0cmljdCkKKysJCSAgICAmJiBhdnIzMl9sZWdpdGltYXRlX2luZGV4X3AgKG1vZGUsIHhvcDAsIHN0cmljdCkpKTsKKysgICAgICB9CisrICAgIGRlZmF1bHQ6CisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgIHJldHVybiBGQUxTRTsKKyt9CisrCisrCisraW50CisrYXZyMzJfY29uc3Rfb2tfZm9yX21vdmUgKEhPU1RfV0lERV9JTlQgYykKKyt7CisrICBpZiAoIFRBUkdFVF9WMl9JTlNOUyApCisrICAgIHJldHVybiAoIGF2cjMyX2NvbnN0X29rX2Zvcl9jb25zdHJhaW50X3AgKGMsICdLJywgIktzMjEiKQorKyAgICAgICAgICAgICAvKiBtb3ZoIGluc3RydWN0aW9uICovCisrICAgICAgICAgICAgIHx8IGF2cjMyX2hpMTZfaW1tZWRpYXRlX29wZXJhbmQgKEdFTl9JTlQoYyksIFZPSURtb2RlKSApOworKyAgZWxzZQorKyAgICByZXR1cm4gYXZyMzJfY29uc3Rfb2tfZm9yX2NvbnN0cmFpbnRfcCAoYywgJ0snLCAiS3MyMSIpOworK30KKysKKytpbnQKKythdnIzMl9jb25zdF9kb3VibGVfaW1tZWRpYXRlIChydHggdmFsdWUpCisreworKyAgSE9TVF9XSURFX0lOVCBoaSwgbG87CisrCisrICBpZiAoR0VUX0NPREUgKHZhbHVlKSAhPSBDT05TVF9ET1VCTEUpCisrICAgIHJldHVybiBGQUxTRTsKKysKKysgIGlmIChTQ0FMQVJfRkxPQVRfTU9ERV9QIChHRVRfTU9ERSAodmFsdWUpKSkKKysgICAgeworKyAgICAgIEhPU1RfV0lERV9JTlQgdGFyZ2V0X2Zsb2F0WzJdOworKyAgICAgIGhpID0gbG8gPSAwOworKyAgICAgIHJlYWxfdG9fdGFyZ2V0ICh0YXJnZXRfZmxvYXQsIENPTlNUX0RPVUJMRV9SRUFMX1ZBTFVFICh2YWx1ZSksCisrCQkgICAgICBHRVRfTU9ERSAodmFsdWUpKTsKKysgICAgICBsbyA9IHRhcmdldF9mbG9hdFswXTsKKysgICAgICBoaSA9IHRhcmdldF9mbG9hdFsxXTsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgaGkgPSBDT05TVF9ET1VCTEVfSElHSCAodmFsdWUpOworKyAgICAgIGxvID0gQ09OU1RfRE9VQkxFX0xPVyAodmFsdWUpOworKyAgICB9CisrCisrICBpZiAoYXZyMzJfY29uc3Rfb2tfZm9yX2NvbnN0cmFpbnRfcCAobG8sICdLJywgIktzMjEiKQorKyAgICAgICYmIChHRVRfTU9ERSAodmFsdWUpID09IFNGbW9kZQorKwkgIHx8IGF2cjMyX2NvbnN0X29rX2Zvcl9jb25zdHJhaW50X3AgKGhpLCAnSycsICJLczIxIikpKQorKyAgICB7CisrICAgICAgcmV0dXJuIFRSVUU7CisrICAgIH0KKysKKysgIHJldHVybiBGQUxTRTsKKyt9CisrCisrCisraW50CisrYXZyMzJfbGVnaXRpbWF0ZV9jb25zdGFudF9wIChydHggeCkKKyt7CisrICBzd2l0Y2ggKEdFVF9DT0RFICh4KSkKKysgICAgeworKyAgICBjYXNlIENPTlNUX0lOVDoKKysgICAgICAvKiBDaGVjayBpZiB3ZSBzaG91bGQgcHV0IGxhcmdlIGltbWVkaWF0ZSBpbnRvIGNvbnN0YW50IHBvb2wKKysgICAgICAgb3IgbG9hZCB0aGVtIGRpcmVjdGx5IHdpdGggbW92L29yaC4qLworKyAgICAgIGlmICghYXZyMzJfaW1tX2luX2NvbnN0X3Bvb2wpCisrCXJldHVybiAxOworKworKyAgICAgIHJldHVybiBhdnIzMl9jb25zdF9va19mb3JfbW92ZSAoSU5UVkFMICh4KSk7CisrICAgIGNhc2UgQ09OU1RfRE9VQkxFOgorKyAgICAgIC8qIENoZWNrIGlmIHdlIHNob3VsZCBwdXQgbGFyZ2UgaW1tZWRpYXRlIGludG8gY29uc3RhbnQgcG9vbAorKyAgICAgICAgIG9yIGxvYWQgdGhlbSBkaXJlY3RseSB3aXRoIG1vdi9vcmguKi8KKysgICAgICBpZiAoIWF2cjMyX2ltbV9pbl9jb25zdF9wb29sKQorKwlyZXR1cm4gMTsKKysKKysgICAgICBpZiAoR0VUX01PREUgKHgpID09IFNGbW9kZQorKwkgIHx8IEdFVF9NT0RFICh4KSA9PSBERm1vZGUgfHwgR0VUX01PREUgKHgpID09IERJbW9kZSkKKysJcmV0dXJuIGF2cjMyX2NvbnN0X2RvdWJsZV9pbW1lZGlhdGUgKHgpOworKyAgICAgIGVsc2UKKysJcmV0dXJuIDA7CisrICAgIGNhc2UgTEFCRUxfUkVGOgorKyAgICBjYXNlIFNZTUJPTF9SRUY6CisrICAgICAgcmV0dXJuIGF2cjMyX2ZpbmRfc3ltYm9sICh4KSAmJiAoZmxhZ19waWMgfHwgVEFSR0VUX0hBU19BU01fQUREUl9QU0VVRE9TKTsKKysgICAgY2FzZSBDT05TVDoKKysgICAgY2FzZSBISUdIOgorKyAgICBjYXNlIENPTlNUX1ZFQ1RPUjoKKysgICAgICByZXR1cm4gMDsKKysgICAgZGVmYXVsdDoKKysgICAgICBwcmludGYgKCIlcygpOlxuIiwgX19GVU5DVElPTl9fKTsKKysgICAgICBkZWJ1Z19ydHggKHgpOworKyAgICAgIHJldHVybiAxOworKyAgICB9CisrfQorKworKworKy8qIFN0cmlwIGFueSBzcGVjaWFsIGVuY29kaW5nIGZyb20gbGFiZWxzICovCisrY29uc3QgY2hhciAqCisrYXZyMzJfc3RyaXBfbmFtZV9lbmNvZGluZyAoY29uc3QgY2hhciAqbmFtZSkKKyt7CisrICBjb25zdCBjaGFyICpzdHJpcHBlZCA9IG5hbWU7CisrCisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIHN3aXRjaCAoc3RyaXBwZWRbMF0pCisrCXsKKysJY2FzZSAnIyc6CisrCSAgc3RyaXBwZWQgPSBzdHJjaHIgKG5hbWUgKyAxLCAnIycpICsgMTsKKysJICBicmVhazsKKysJY2FzZSAnKic6CisrCSAgc3RyaXBwZWQgPSAmc3RyaXBwZWRbMV07CisrCSAgYnJlYWs7CisrCWRlZmF1bHQ6CisrCSAgcmV0dXJuIHN0cmlwcGVkOworKwl9CisrICAgIH0KKyt9CisrCisrCisrCisrLyogRG8gYW55dGhpbmcgbmVlZGVkIGJlZm9yZSBSVEwgaXMgZW1pdHRlZCBmb3IgZWFjaCBmdW5jdGlvbi4gICovCisrc3RhdGljIHN0cnVjdCBtYWNoaW5lX2Z1bmN0aW9uICoKKythdnIzMl9pbml0X21hY2hpbmVfc3RhdHVzICh2b2lkKQorK3sKKysgIHN0cnVjdCBtYWNoaW5lX2Z1bmN0aW9uICptYWNoaW5lOworKyAgbWFjaGluZSA9CisrICAgIChtYWNoaW5lX2Z1bmN0aW9uICopIGdnY19hbGxvY19jbGVhcmVkIChzaXplb2YgKG1hY2hpbmVfZnVuY3Rpb24pKTsKKysKKysjaWYgQVZSMzJfRlRfVU5LTk9XTiAhPSAwCisrICBtYWNoaW5lLT5mdW5jX3R5cGUgPSBBVlIzMl9GVF9VTktOT1dOOworKyNlbmRpZgorKworKyAgbWFjaGluZS0+bWluaXBvb2xfbGFiZWxfaGVhZCA9IDA7CisrICBtYWNoaW5lLT5taW5pcG9vbF9sYWJlbF90YWlsID0gMDsKKysgIG1hY2hpbmUtPmlmY3Z0X2FmdGVyX3JlbG9hZCA9IDA7CisrICByZXR1cm4gbWFjaGluZTsKKyt9CisrCisrdm9pZAorK2F2cjMyX2luaXRfZXhwYW5kZXJzICh2b2lkKQorK3sKKysgIC8qIEFycmFuZ2UgdG8gaW5pdGlhbGl6ZSBhbmQgbWFyayB0aGUgbWFjaGluZSBwZXItZnVuY3Rpb24gc3RhdHVzLiAgKi8KKysgIGluaXRfbWFjaGluZV9zdGF0dXMgPSBhdnIzMl9pbml0X21hY2hpbmVfc3RhdHVzOworK30KKysKKysKKysvKiBSZXR1cm4gYW4gUlRYIGluZGljYXRpbmcgd2hlcmUgdGhlIHJldHVybiBhZGRyZXNzIHRvIHRoZQorKyAgIGNhbGxpbmcgZnVuY3Rpb24gY2FuIGJlIGZvdW5kLiAgKi8KKysKKytydHgKKythdnIzMl9yZXR1cm5fYWRkciAoaW50IGNvdW50LCBydHggZnJhbWUgQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICBpZiAoY291bnQgIT0gMCkKKysgICAgcmV0dXJuIE5VTExfUlRYOworKworKyAgcmV0dXJuIGdldF9oYXJkX3JlZ19pbml0aWFsX3ZhbCAoUG1vZGUsIExSX1JFR05VTSk7CisrfQorKworKworK3ZvaWQKKythdnIzMl9lbmNvZGVfc2VjdGlvbl9pbmZvICh0cmVlIGRlY2wsIHJ0eCBydGwsIGludCBmaXJzdCkKKyt7CisrICBkZWZhdWx0X2VuY29kZV9zZWN0aW9uX2luZm8oZGVjbCwgcnRsLCBmaXJzdCk7CisrCisrICBpZiAoIFRSRUVfQ09ERSAoZGVjbCkgPT0gVkFSX0RFQ0wKKysgICAgICAgJiYgKEdFVF9DT0RFIChYRVhQIChydGwsIDApKSA9PSBTWU1CT0xfUkVGKQorKyAgICAgICAmJiAobG9va3VwX2F0dHJpYnV0ZSAoInJtd19hZGRyZXNzYWJsZSIsIERFQ0xfQVRUUklCVVRFUyAoZGVjbCkpCisrICAgICAgICAgICB8fCBUQVJHRVRfUk1XX0FERFJFU1NBQkxFX0RBVEEpICl7CisrICAgIGlmICggIVRBUkdFVF9STVcgfHwgZmxhZ19waWMgKQorKyAgICAgIHJldHVybjsKKysgICAgU1lNQk9MX1JFRl9GTEFHUyAoWEVYUCAocnRsLCAwKSkgfD0gKDEgPDwgU1lNQk9MX0ZMQUdfUk1XX0FERFJfU0hJRlQpOworKyAgfQorK30KKysKKyt2b2lkCisrYXZyMzJfYXNtX291dHB1dF9sYWJlbCAoRklMRSAqIHN0cmVhbSwgY29uc3QgY2hhciAqbmFtZSkKKyt7CisrICBuYW1lID0gYXZyMzJfc3RyaXBfbmFtZV9lbmNvZGluZyAobmFtZSk7CisrCisrICAvKiBQcmludCB0aGUgbGFiZWwuICovCisrICBhc3NlbWJsZV9uYW1lIChzdHJlYW0sIG5hbWUpOworKyAgZnByaW50ZiAoc3RyZWFtLCAiOlxuIik7CisrfQorKworKworKworK3ZvaWQKKythdnIzMl9hc21fd2Vha2VuX2xhYmVsIChGSUxFICogc3RyZWFtLCBjb25zdCBjaGFyICpuYW1lKQorK3sKKysgIGZwcmludGYgKHN0cmVhbSwgIlx0LndlYWsgIik7CisrICBhc3NlbWJsZV9uYW1lIChzdHJlYW0sIG5hbWUpOworKyAgZnByaW50ZiAoc3RyZWFtLCAiXG4iKTsKKyt9CisrCisrLyoKKysgIENoZWNrcyBpZiBhIGxhYmVscmVmIGlzIGVxdWFsIHRvIGEgcmVzZXJ2ZWQgd29yZCBpbiB0aGUgYXNzZW1ibGVyLiBJZiBpdCBpcywKKysgIGluc2VydCBhICdfJyBiZWZvcmUgdGhlIGxhYmVsIG5hbWUuCisrKi8KKyt2b2lkCisrYXZyMzJfYXNtX291dHB1dF9sYWJlbHJlZiAoRklMRSAqIHN0cmVhbSwgY29uc3QgY2hhciAqbmFtZSkKKyt7CisrICBpbnQgdmVyYmF0aW0gPSBGQUxTRTsKKysgIGNvbnN0IGNoYXIgKnN0cmlwcGVkID0gbmFtZTsKKysgIGludCBzdHJpcF9maW5pc2hlZCA9IEZBTFNFOworKworKyAgd2hpbGUgKCFzdHJpcF9maW5pc2hlZCkKKysgICAgeworKyAgICAgIHN3aXRjaCAoc3RyaXBwZWRbMF0pCisrCXsKKysJY2FzZSAnIyc6CisrCSAgc3RyaXBwZWQgPSBzdHJjaHIgKG5hbWUgKyAxLCAnIycpICsgMTsKKysJICBicmVhazsKKysJY2FzZSAnKic6CisrCSAgc3RyaXBwZWQgPSAmc3RyaXBwZWRbMV07CisrCSAgdmVyYmF0aW0gPSBUUlVFOworKwkgIGJyZWFrOworKwlkZWZhdWx0OgorKwkgIHN0cmlwX2ZpbmlzaGVkID0gVFJVRTsKKysJICBicmVhazsKKysJfQorKyAgICB9CisrCisrICBpZiAodmVyYmF0aW0pCisrICAgIGZwdXRzIChzdHJpcHBlZCwgc3RyZWFtKTsKKysgIGVsc2UKKysgICAgYXNtX2ZwcmludGYgKHN0cmVhbSwgIiVVJXMiLCBzdHJpcHBlZCk7CisrfQorKworKworKworKy8qCisrICAgQ2hlY2sgaWYgdGhlIGNvbXBhcmlzb24gaW4gY29tcGFyZV9leHAgaXMgcmVkdW5kYW50CisrICAgZm9yIHRoZSBjb25kaXRpb24gZ2l2ZW4gaW4gbmV4dF9jb25kIGdpdmVuIHRoYXQgdGhlCisrICAgbmVlZGVkIGZsYWdzIGFyZSBhbHJlYWR5IHNldCBieSBhbiBlYXJsaWVyIGluc3RydWN0aW9uLgorKyAgIFVzZXMgY2NfcHJldl9zdGF0dXMgdG8gY2hlY2sgdGhpcy4KKysKKysgICBSZXR1cm5zIE5VTExfUlRYIGlmIHRoZSBjb21wYXJlIGlzIG5vdCByZWR1bmRhbnQKKysgICBvciB0aGUgbmV3IGNvbmRpdGlvbiB0byB1c2UgaW4gdGhlIGNvbmRpdGlvbmFsCisrICAgaW5zdHJ1Y3Rpb24gaWYgdGhlIGNvbXBhcmUgaXMgcmVkdW5kYW50LgorKyovCisrc3RhdGljIHJ0eAorK2lzX2NvbXBhcmVfcmVkdW5kYW50IChydHggY29tcGFyZV9leHAsIHJ0eCBuZXh0X2NvbmQpCisreworKyAgaW50IHpfZmxhZ192YWxpZCA9IEZBTFNFOworKyAgaW50IG5fZmxhZ192YWxpZCA9IEZBTFNFOworKyAgcnR4IG5ld19jb25kOworKworKyAgaWYgKEdFVF9DT0RFIChjb21wYXJlX2V4cCkgIT0gQ09NUEFSRQorKyAgICAgICYmIEdFVF9DT0RFIChjb21wYXJlX2V4cCkgIT0gQU5EKQorKyAgICByZXR1cm4gTlVMTF9SVFg7CisrCisrCisrICBpZiAocnR4X2VxdWFsX3AgKGNjX3ByZXZfc3RhdHVzLm1kZXAudmFsdWUsIGNvbXBhcmVfZXhwKSkKKysgICAgeworKyAgICAgIC8qIGNjMCBhbHJlYWR5IGNvbnRhaW5zIHRoZSBjb3JyZWN0IGNvbXBhcmlzb24gLT4gZGVsZXRlIGNtcCBpbnNuICovCisrICAgICAgcmV0dXJuIG5leHRfY29uZDsKKysgICAgfQorKworKyAgaWYgKEdFVF9NT0RFIChjb21wYXJlX2V4cCkgIT0gU0ltb2RlKQorKyAgICByZXR1cm4gTlVMTF9SVFg7CisrCisrICBzd2l0Y2ggKGNjX3ByZXZfc3RhdHVzLm1kZXAuZmxhZ3MpCisrICAgIHsKKysgICAgY2FzZSBDQ19TRVRfVk5DWjoKKysgICAgY2FzZSBDQ19TRVRfTkNaOgorKyAgICAgIG5fZmxhZ192YWxpZCA9IFRSVUU7CisrICAgIGNhc2UgQ0NfU0VUX0NaOgorKyAgICBjYXNlIENDX1NFVF9aOgorKyAgICAgIHpfZmxhZ192YWxpZCA9IFRSVUU7CisrICAgIH0KKysKKysgIGlmIChjY19wcmV2X3N0YXR1cy5tZGVwLnZhbHVlCisrICAgICAgJiYgR0VUX0NPREUgKGNvbXBhcmVfZXhwKSA9PSBDT01QQVJFCisrICAgICAgJiYgUkVHX1AgKFhFWFAgKGNvbXBhcmVfZXhwLCAwKSkKKysgICAgICAmJiBSRUdOTyAoWEVYUCAoY29tcGFyZV9leHAsIDApKSA9PSBSRUdOTyAoY2NfcHJldl9zdGF0dXMubWRlcC52YWx1ZSkKKysgICAgICAmJiBHRVRfQ09ERSAoWEVYUCAoY29tcGFyZV9leHAsIDEpKSA9PSBDT05TVF9JTlQKKysgICAgICAmJiBuZXh0X2NvbmQgIT0gTlVMTF9SVFgpCisrICAgIHsKKysgICAgICBpZiAoSU5UVkFMIChYRVhQIChjb21wYXJlX2V4cCwgMSkpID09IDAKKysJICAmJiB6X2ZsYWdfdmFsaWQKKysJICAmJiAoR0VUX0NPREUgKG5leHRfY29uZCkgPT0gRVEgfHwgR0VUX0NPREUgKG5leHRfY29uZCkgPT0gTkUpKQorKwkvKiBXZSBjYW4gc2tpcCBjb21wYXJpc29uIFogZmxhZyBpcyBhbHJlYWR5IHJlZmxlY3Rpbmcgb3BzWzBdICovCisrCXJldHVybiBuZXh0X2NvbmQ7CisrICAgICAgZWxzZSBpZiAobl9mbGFnX3ZhbGlkCisrCSAgICAgICAmJiAoKElOVFZBTCAoWEVYUCAoY29tcGFyZV9leHAsIDEpKSA9PSAwCisrCQkgICAgJiYgKEdFVF9DT0RFIChuZXh0X2NvbmQpID09IEdFCisrCQkJfHwgR0VUX0NPREUgKG5leHRfY29uZCkgPT0gTFQpKQorKwkJICAgfHwgKElOVFZBTCAoWEVYUCAoY29tcGFyZV9leHAsIDEpKSA9PSAtMQorKwkJICAgICAgICYmIChHRVRfQ09ERSAobmV4dF9jb25kKSA9PSBHVAorKwkJCSAgIHx8IEdFVF9DT0RFIChuZXh0X2NvbmQpID09IExFKSkpKQorKwl7CisrCSAgLyogV2UgY2FuIHNraXAgY29tcGFyaXNvbiBOIGZsYWcgaXMgYWxyZWFkeSByZWZsZWN0aW5nIG9wc1swXSwKKysJICAgICB3aGljaCBtZWFucyB0aGF0IHdlIGNhbiB1c2UgdGhlIG1pL3BsIGNvbmRpdGlvbnMgdG8gY2hlY2sgaWYKKysJICAgICBvcHNbMF0gaXMgR0Ugb3IgTFQgMC4gKi8KKysJICBpZiAoKEdFVF9DT0RFIChuZXh0X2NvbmQpID09IEdFKSB8fCAoR0VUX0NPREUgKG5leHRfY29uZCkgPT0gR1QpKQorKwkgICAgbmV3X2NvbmQgPQorKwkgICAgICBnZW5fcnR4X1VOU1BFQyAoR0VUX01PREUgKG5leHRfY29uZCksIGdlbl9ydHZlYyAoMiwgY2MwX3J0eCwgY29uc3QwX3J0eCksCisrCQkJICAgICAgVU5TUEVDX0NPTkRfUEwpOworKwkgIGVsc2UKKysJICAgIG5ld19jb25kID0KKysJICAgICAgZ2VuX3J0eF9VTlNQRUMgKEdFVF9NT0RFIChuZXh0X2NvbmQpLCBnZW5fcnR2ZWMgKDIsIGNjMF9ydHgsIGNvbnN0MF9ydHgpLAorKwkJCSAgICAgIFVOU1BFQ19DT05EX01JKTsKKysJICByZXR1cm4gbmV3X2NvbmQ7CisrCX0KKysgICAgfQorKyAgcmV0dXJuIE5VTExfUlRYOworK30KKysKKysvKiBVcGRhdGVzIGNjX3N0YXR1cy4gICovCisrdm9pZAorK2F2cjMyX25vdGljZV91cGRhdGVfY2MgKHJ0eCBleHAsIHJ0eCBpbnNuKQorK3sKKysgIGVudW0gYXR0cl9jYyBhdHRyX2NjID0gZ2V0X2F0dHJfY2MgKGluc24pOworKyAgCisrICBpZiAoIGF0dHJfY2MgPT0gQ0NfU0VUX1pfSUZfTk9UX1YyICkKKysgICAgaWYgKFRBUkdFVF9WMl9JTlNOUykKKysgICAgICBhdHRyX2NjID0gQ0NfTk9ORTsKKysgICAgZWxzZQorKyAgICAgIGF0dHJfY2MgPSBDQ19TRVRfWjsKKysgIAorKyAgc3dpdGNoIChhdHRyX2NjKQorKyAgICB7CisrICAgIGNhc2UgQ0NfQ0FMTF9TRVQ6CisrICAgICAgQ0NfU1RBVFVTX0lOSVQ7CisrICAgICAgRlBDQ19TVEFUVVNfSU5JVDsKKysgICAgICAvKiBDaGVjayBpZiB0aGUgZnVuY3Rpb24gY2FsbCByZXR1cm5zIGEgdmFsdWUgaW4gcjEyICovCisrICAgICAgaWYgKFJFR19QIChyZWNvZ19kYXRhLm9wZXJhbmRbMF0pCisrCSAgJiYgUkVHTk8gKHJlY29nX2RhdGEub3BlcmFuZFswXSkgPT0gUkVUVkFMX1JFR05VTSkKKysJeworKwkgIGNjX3N0YXR1cy5mbGFncyA9IDA7CisrCSAgY2Nfc3RhdHVzLm1kZXAudmFsdWUgPQorKwkgICAgZ2VuX3J0eF9DT01QQVJFIChTSW1vZGUsIHJlY29nX2RhdGEub3BlcmFuZFswXSwgY29uc3QwX3J0eCk7CisrCSAgY2Nfc3RhdHVzLm1kZXAuZmxhZ3MgPSBDQ19TRVRfVk5DWjsKKysgICAgICAgICAgY2Nfc3RhdHVzLm1kZXAuY29uZF9leGVjX2NtcF9jbG9iYmVyZWQgPSAwOworKworKwl9CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQ0NfQ09NUEFSRToKKysgICAgICB7CisrICAgICAgICAvKiBDaGVjayB0aGF0IGNvbXBhcmUgd2lsbCBub3QgYmUgb3B0aW1pemVkIGF3YXkgaWYgc28gbm90aGluZyBzaG91bGQKKysgICAgICAgICAgIGJlIGRvbmUgKi8KKysgICAgICAgIHJ0eCBjb21wYXJlX2V4cCA9IFNFVF9TUkMgKGV4cCk7CisrICAgICAgICAvKiBDaGVjayBpZiB3ZSBoYXZlIGEgdHN0IGV4cHJlc3Npb24uIElmIHNvIGNvbnZlcnQgaXQgdG8gYQorKyAgICAgICAgICAgY29tcGFyZSB3aXRoIDAuICovCisrICAgICAgICBpZiAoIFJFR19QIChTRVRfU1JDIChleHApKSApCisrICAgICAgICAgIGNvbXBhcmVfZXhwID0gZ2VuX3J0eF9DT01QQVJFIChHRVRfTU9ERSAoU0VUX1NSQyAoZXhwKSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfU1JDIChleHApLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QwX3J0eCk7CisrCisrICAgICAgICBpZiAoaXNfY29tcGFyZV9yZWR1bmRhbnQgKGNvbXBhcmVfZXhwLCBnZXRfbmV4dF9pbnNuX2NvbmQgKGluc24pKSA9PQorKyAgICAgICAgICAgIE5VTExfUlRYKQorKyAgICAgICAgICB7CisrCisrICAgICAgICAgICAgLyogUmVzZXQgdGhlIG5vbnN0YW5kYXJkIGZsYWcgKi8KKysgICAgICAgICAgICBDQ19TVEFUVVNfSU5JVDsKKysgICAgICAgICAgICBjY19zdGF0dXMuZmxhZ3MgPSAwOworKyAgICAgICAgICAgIGNjX3N0YXR1cy5tZGVwLnZhbHVlID0gY29tcGFyZV9leHA7CisrICAgICAgICAgICAgY2Nfc3RhdHVzLm1kZXAuZmxhZ3MgPSBDQ19TRVRfVk5DWjsKKysgICAgICAgICAgICBjY19zdGF0dXMubWRlcC5jb25kX2V4ZWNfY21wX2Nsb2JiZXJlZCA9IDA7CisrICAgICAgICAgfQorKyAgICAgIH0KKysgICAgICBicmVhazsKKysgICAgY2FzZSBDQ19DTVBfQ09ORF9JTlNOOgorKyAgICAgIHsKKysJLyogQ29uZGl0aW9uYWwgaW5zbiB0aGF0IGVtaXQgdGhlIGNvbXBhcmUgaXRzZWxmLiAqLworKyAgICAgICAgcnR4IGNtcDsKKysgICAgICAgIHJ0eCBjbXBfb3AwLCBjbXBfb3AxOworKyAgICAgICAgcnR4IGNvbmQ7CisrICAgICAgICBydHggZGVzdDsKKysgICAgICAgIHJ0eCBuZXh0X2luc24gPSBuZXh0X25vbm5vdGVfaW5zbiAoaW5zbik7CisrCisrICAgICAgICBpZiAoIEdFVF9DT0RFIChleHApID09IENPTkRfRVhFQyApCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBjbXBfb3AwID0gWEVYUCAoQ09ORF9FWEVDX1RFU1QgKGV4cCksIDApOworKyAgICAgICAgICAgIGNtcF9vcDEgPSBYRVhQIChDT05EX0VYRUNfVEVTVCAoZXhwKSwgMSk7CisrICAgICAgICAgICAgY29uZCA9IENPTkRfRVhFQ19URVNUIChleHApOworKyAgICAgICAgICAgIGRlc3QgPSBTRVRfREVTVCAoQ09ORF9FWEVDX0NPREUgKGV4cCkpOworKyAgICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICAgIHsKKysgICAgICAgICAgICAvKiBJZiB0aGVuIGVsc2UgY29uZGl0aW9uYWwuIGNvbXBhcmUgb3BlcmFuZHMgYXJlIGluIG9wZXJhbmRzCisrICAgICAgICAgICAgICAgNCBhbmQgNS4gKi8KKysgICAgICAgICAgICBjbXBfb3AwID0gcmVjb2dfZGF0YS5vcGVyYW5kWzRdOworKyAgICAgICAgICAgIGNtcF9vcDEgPSByZWNvZ19kYXRhLm9wZXJhbmRbNV07CisrICAgICAgICAgICAgY29uZCA9IHJlY29nX2RhdGEub3BlcmFuZFsxXTsKKysgICAgICAgICAgICBkZXN0ID0gU0VUX0RFU1QgKGV4cCk7CisrICAgICAgICAgIH0KKysKKysgICAgICAgIGlmICggR0VUX0NPREUgKGNtcF9vcDApID09IEFORCApCisrICAgICAgICAgIGNtcCA9IGNtcF9vcDA7CisrICAgICAgICBlbHNlCisrICAgICAgICAgIGNtcCA9IGdlbl9ydHhfQ09NUEFSRSAoR0VUX01PREUgKGNtcF9vcDApLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtcF9vcDAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21wX29wMSk7CisrCisrICAgICAgICAvKiBDaGVjayBpZiB0aGUgY29uZGl0aW9uYWwgaW5zbnMgdXBkYXRlcyBhIHJlZ2lzdGVyIHByZXNlbnQKKysgICAgICAgICAgIGluIHRoZSBjb21wYXJpc29uLCBpZiBzbyB0aGVuIHdlIG11c3QgcmVzZXQgdGhlIGNjX3N0YXR1cy4gKi8KKysgICAgICAgIGlmIChSRUdfUCAoZGVzdCkKKysgICAgICAgICAgICAmJiAocmVnX21lbnRpb25lZF9wIChkZXN0LCBjbXBfb3AwKQorKyAgICAgICAgICAgICAgICB8fCByZWdfbWVudGlvbmVkX3AgKGRlc3QsIGNtcF9vcDEpKQorKyAgICAgICAgICAgICYmIEdFVF9DT0RFIChleHApICE9IENPTkRfRVhFQyApCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBDQ19TVEFUVVNfSU5JVDsKKysgICAgICAgICAgfQorKwllbHNlIGlmIChpc19jb21wYXJlX3JlZHVuZGFudCAoY21wLCBjb25kKSA9PSBOVUxMX1JUWCkKKysJICB7CisrCSAgICAvKiBSZXNldCB0aGUgbm9uc3RhbmRhcmQgZmxhZyAqLworKwkgICAgQ0NfU1RBVFVTX0lOSVQ7CisrICAgICAgICAgICAgaWYgKCBHRVRfQ09ERSAoY21wX29wMCkgPT0gQU5EICkKKysgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgY2Nfc3RhdHVzLmZsYWdzID0gQ0NfSU5WRVJURUQ7CisrICAgICAgICAgICAgICAgIGNjX3N0YXR1cy5tZGVwLmZsYWdzID0gQ0NfU0VUX1o7CisrICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBjY19zdGF0dXMuZmxhZ3MgPSAwOworKyAgICAgICAgICAgICAgICBjY19zdGF0dXMubWRlcC5mbGFncyA9IENDX1NFVF9WTkNaOworKyAgICAgICAgICAgICAgfQorKwkgICAgY2Nfc3RhdHVzLm1kZXAudmFsdWUgPSBjbXA7CisrICAgICAgICAgICAgY2Nfc3RhdHVzLm1kZXAuY29uZF9leGVjX2NtcF9jbG9iYmVyZWQgPSAwOworKwkgIH0KKysKKysKKysgICAgICAgIC8qIENoZWNrIGlmIHdlIGhhdmUgYSBDT05EX0VYRUMgaW5zbiB3aGljaCB1cGRhdGVzIG9uZQorKyAgICAgICAgICAgb2YgdGhlIHJlZ2lzdGVycyBpbiB0aGUgY29tcGFyZSBzdGF0dXMuICovCisrICAgICAgICBpZiAoUkVHX1AgKGRlc3QpCisrICAgICAgICAgICAgJiYgKHJlZ19tZW50aW9uZWRfcCAoZGVzdCwgY21wX29wMCkKKysgICAgICAgICAgICAgICAgfHwgcmVnX21lbnRpb25lZF9wIChkZXN0LCBjbXBfb3AxKSkKKysgICAgICAgICAgICAmJiBHRVRfQ09ERSAoZXhwKSA9PSBDT05EX0VYRUMgKQorKyAgICAgICAgICBjY19zdGF0dXMubWRlcC5jb25kX2V4ZWNfY21wX2Nsb2JiZXJlZCA9IDE7CisrICAgICAgICAKKysgICAgICAgIGlmICggY2Nfc3RhdHVzLm1kZXAuY29uZF9leGVjX2NtcF9jbG9iYmVyZWQgCisrICAgICAgICAgICAgICYmIEdFVF9DT0RFIChleHApID09IENPTkRfRVhFQworKyAgICAgICAgICAgICAmJiBuZXh0X2luc24gIT0gTlVMTAorKyAgICAgICAgICAgICAmJiBJTlNOX1AgKG5leHRfaW5zbikKKysgICAgICAgICAgICAgJiYgIShHRVRfQ09ERSAoUEFUVEVSTiAobmV4dF9pbnNuKSkgPT0gQ09ORF9FWEVDCisrICAgICAgICAgICAgICAgICAgJiYgcnR4X2VxdWFsX3AgKFhFWFAgKENPTkRfRVhFQ19URVNUIChQQVRURVJOIChuZXh0X2luc24pKSwgMCksIGNtcF9vcDApCisrICAgICAgICAgICAgICAgICAgJiYgcnR4X2VxdWFsX3AgKFhFWFAgKENPTkRfRVhFQ19URVNUIChQQVRURVJOIChuZXh0X2luc24pKSwgMSksIGNtcF9vcDEpCisrICAgICAgICAgICAgICAgICAgJiYgKEdFVF9DT0RFIChDT05EX0VYRUNfVEVTVCAoUEFUVEVSTiAobmV4dF9pbnNuKSkpID09IEdFVF9DT0RFIChjb25kKQorKyAgICAgICAgICAgICAgICAgICAgICB8fCBHRVRfQ09ERSAoQ09ORF9FWEVDX1RFU1QgKFBBVFRFUk4gKG5leHRfaW5zbikpKSA9PSByZXZlcnNlX2NvbmRpdGlvbiAoR0VUX0NPREUgKGNvbmQpKSkpICkKKysgICAgICAgICAgeworKyAgICAgICAgICAgIC8qIFdlIGhhdmUgYSBzZXF1ZW5jZSBvZiBjb25kaXRpb25hbCBpbnNucyB3aGVyZSB0aGUgY29tcGFyZSBzdGF0dXMgaGFzIGJlZW4gY2xvYmJlcmVkCisrICAgICAgICAgICAgICAgc2luY2UgdGhlIGNvbXBhcmUgbm8gbG9uZ2VyIHJlZmxlY3RzIHRoZSBjb250ZW50IG9mIHRoZSB2YWx1ZXMgdG8gY29tcGFyZS4gKi8KKysgICAgICAgICAgICBDQ19TVEFUVVNfSU5JVDsKKysgICAgICAgICAgICBjY19zdGF0dXMubWRlcC5jb25kX2V4ZWNfY21wX2Nsb2JiZXJlZCA9IDE7CisrICAgICAgICAgIH0KKysgICAgICAgIAorKyAgICAgIH0KKysgICAgICBicmVhazsKKysgICAgY2FzZSBDQ19GUENPTVBBUkU6CisrICAgICAgLyogQ2hlY2sgdGhhdCBmbG9hdGluZy1wb2ludCBjb21wYXJlIHdpbGwgbm90IGJlIG9wdGltaXplZCBhd2F5IGlmIHNvCisrICAgICAgICAgbm90aGluZyBzaG91bGQgYmUgZG9uZSAqLworKyAgICAgIGlmICghcnR4X2VxdWFsX3AgKGNjX3ByZXZfc3RhdHVzLm1kZXAuZnB2YWx1ZSwgU0VUX1NSQyAoZXhwKSkpCisrCXsKKysJICAvKiBjYzAgYWxyZWFkeSBjb250YWlucyB0aGUgY29ycmVjdCBjb21wYXJpc29uIC0+IGRlbGV0ZSBjbXAgaW5zbiAqLworKwkgIC8qIFJlc2V0IHRoZSBub25zdGFuZGFyZCBmbGFnICovCisrCSAgY2Nfc3RhdHVzLm1kZXAuZnB2YWx1ZSA9IFNFVF9TUkMgKGV4cCk7CisrCSAgY2Nfc3RhdHVzLm1kZXAuZnBmbGFncyA9IENDX1NFVF9DWjsKKysJfQorKyAgICAgIGJyZWFrOworKyAgICBjYXNlIENDX0ZST01fRlBDQzoKKysgICAgICAvKiBGbGFncyBhcmUgdXBkYXRlZCB3aXRoIGZsYWdzIGZyb20gRmxvYXRpbmctcG9pbnQgY29wcm9jZXNzb3IsIHNldAorKyAgICAgICAgIENDX05PVF9TSUdORUQgZmxhZyBzaW5jZSB0aGUgZmxhZ3MgYXJlIHNldCBzbyB0aGF0IHVuc2lnbmVkCisrICAgICAgICAgY29uZGlkaW9uIGNvZGVzIGNhbiBiZSB1c2VkIGRpcmVjdGx5LiAqLworKyAgICAgIENDX1NUQVRVU19JTklUOworKyAgICAgIGNjX3N0YXR1cy5mbGFncyA9IENDX05PVF9TSUdORUQ7CisrICAgICAgY2Nfc3RhdHVzLm1kZXAudmFsdWUgPSBjY19zdGF0dXMubWRlcC5mcHZhbHVlOworKyAgICAgIGNjX3N0YXR1cy5tZGVwLmZsYWdzID0gY2Nfc3RhdHVzLm1kZXAuZnBmbGFnczsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBDQ19CTEQ6CisrICAgICAgLyogQml0IGxvYWQgaXMga2luZCBvZiBsaWtlIGFuIGludmVydGVkIHRlc3RzaSwgYmVjYXVzZSB0aGUgWiBmbGFnIGlzCisrICAgICAgICAgaW52ZXJ0ZWQgKi8KKysgICAgICBDQ19TVEFUVVNfSU5JVDsKKysgICAgICBjY19zdGF0dXMuZmxhZ3MgPSBDQ19JTlZFUlRFRDsKKysgICAgICBjY19zdGF0dXMubWRlcC52YWx1ZSA9IFNFVF9TUkMgKGV4cCk7CisrICAgICAgY2Nfc3RhdHVzLm1kZXAuZmxhZ3MgPSBDQ19TRVRfWjsKKysgICAgICBjY19zdGF0dXMubWRlcC5jb25kX2V4ZWNfY21wX2Nsb2JiZXJlZCA9IDA7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQ0NfTk9ORToKKysgICAgICAvKiBJbnNuIGRvZXMgbm90IGFmZmVjdCBDQyBhdCBhbGwuIENoZWNrIGlmIHRoZSBpbnN0cnVjdGlvbiB1cGRhdGVzCisrICAgICAgICAgc29tZSBvZiB0aGUgcmVnaXN0ZXIgY3VycmVudGx5IHJlZmxlY3RlZCBpbiBjYzAgKi8KKysKKysgICAgICBpZiAoKEdFVF9DT0RFIChleHApID09IFNFVCkKKysJICAmJiAoY2Nfc3RhdHVzLnZhbHVlMSB8fCBjY19zdGF0dXMudmFsdWUyIHx8IGNjX3N0YXR1cy5tZGVwLnZhbHVlKQorKwkgICYmIChyZWdfbWVudGlvbmVkX3AgKFNFVF9ERVNUIChleHApLCBjY19zdGF0dXMudmFsdWUxKQorKwkgICAgICB8fCByZWdfbWVudGlvbmVkX3AgKFNFVF9ERVNUIChleHApLCBjY19zdGF0dXMudmFsdWUyKQorKwkgICAgICB8fCByZWdfbWVudGlvbmVkX3AgKFNFVF9ERVNUIChleHApLCBjY19zdGF0dXMubWRlcC52YWx1ZSkpKQorKwl7CisrCSAgQ0NfU1RBVFVTX0lOSVQ7CisrCX0KKysKKysgICAgICAvKiBJZiB0aGlzIGlzIGEgcGFyYWxsZWwgd2UgbXVzdCBzdGVwIHRocm91Z2ggZWFjaCBvZiB0aGUgcGFyYWxsZWwKKysgICAgICAgICBleHByZXNzaW9ucyAqLworKyAgICAgIGlmIChHRVRfQ09ERSAoZXhwKSA9PSBQQVJBTExFTCkKKysJeworKwkgIGludCBpOworKwkgIGZvciAoaSA9IDA7IGkgPCBYVkVDTEVOIChleHAsIDApOyArK2kpCisrCSAgICB7CisrCSAgICAgIHJ0eCB2ZWNfZXhwID0gWFZFQ0VYUCAoZXhwLCAwLCBpKTsKKysJICAgICAgaWYgKChHRVRfQ09ERSAodmVjX2V4cCkgPT0gU0VUKQorKwkJICAmJiAoY2Nfc3RhdHVzLnZhbHVlMSB8fCBjY19zdGF0dXMudmFsdWUyCisrCQkgICAgICB8fCBjY19zdGF0dXMubWRlcC52YWx1ZSkKKysJCSAgJiYgKHJlZ19tZW50aW9uZWRfcCAoU0VUX0RFU1QgKHZlY19leHApLCBjY19zdGF0dXMudmFsdWUxKQorKwkJICAgICAgfHwgcmVnX21lbnRpb25lZF9wIChTRVRfREVTVCAodmVjX2V4cCksCisrCQkJCQkgIGNjX3N0YXR1cy52YWx1ZTIpCisrCQkgICAgICB8fCByZWdfbWVudGlvbmVkX3AgKFNFVF9ERVNUICh2ZWNfZXhwKSwKKysJCQkJCSAgY2Nfc3RhdHVzLm1kZXAudmFsdWUpKSkKKysJCXsKKysJCSAgQ0NfU1RBVFVTX0lOSVQ7CisrCQl9CisrCSAgICB9CisrCX0KKysKKysgICAgICAvKiBDaGVjayBpZiB3ZSBoYXZlIG1lbW9yeSBvcGFydGlvbnMgd2l0aCBwb3N0X2luYyBvciBwcmVfZGVjIG9uIHRoZQorKyAgICAgICAgIHJlZ2lzdGVyIGN1cnJlbnRseSByZWZsZWN0ZWQgaW4gY2MwICovCisrICAgICAgaWYgKEdFVF9DT0RFIChleHApID09IFNFVAorKwkgICYmIEdFVF9DT0RFIChTRVRfU1JDIChleHApKSA9PSBNRU0KKysJICAmJiAoR0VUX0NPREUgKFhFWFAgKFNFVF9TUkMgKGV4cCksIDApKSA9PSBQT1NUX0lOQworKwkgICAgICB8fCBHRVRfQ09ERSAoWEVYUCAoU0VUX1NSQyAoZXhwKSwgMCkpID09IFBSRV9ERUMpCisrCSAgJiYKKysJICAocmVnX21lbnRpb25lZF9wCisrCSAgIChYRVhQIChYRVhQIChTRVRfU1JDIChleHApLCAwKSwgMCksIGNjX3N0YXR1cy52YWx1ZTEpCisrCSAgIHx8IHJlZ19tZW50aW9uZWRfcCAoWEVYUCAoWEVYUCAoU0VUX1NSQyAoZXhwKSwgMCksIDApLAorKwkJCSAgICAgICBjY19zdGF0dXMudmFsdWUyKQorKwkgICB8fCByZWdfbWVudGlvbmVkX3AgKFhFWFAgKFhFWFAgKFNFVF9TUkMgKGV4cCksIDApLCAwKSwKKysJCQkgICAgICAgY2Nfc3RhdHVzLm1kZXAudmFsdWUpKSkKKysJQ0NfU1RBVFVTX0lOSVQ7CisrCisrICAgICAgaWYgKEdFVF9DT0RFIChleHApID09IFNFVAorKwkgICYmIEdFVF9DT0RFIChTRVRfREVTVCAoZXhwKSkgPT0gTUVNCisrCSAgJiYgKEdFVF9DT0RFIChYRVhQIChTRVRfREVTVCAoZXhwKSwgMCkpID09IFBPU1RfSU5DCisrCSAgICAgIHx8IEdFVF9DT0RFIChYRVhQIChTRVRfREVTVCAoZXhwKSwgMCkpID09IFBSRV9ERUMpCisrCSAgJiYKKysJICAocmVnX21lbnRpb25lZF9wCisrCSAgIChYRVhQIChYRVhQIChTRVRfREVTVCAoZXhwKSwgMCksIDApLCBjY19zdGF0dXMudmFsdWUxKQorKwkgICB8fCByZWdfbWVudGlvbmVkX3AgKFhFWFAgKFhFWFAgKFNFVF9ERVNUIChleHApLCAwKSwgMCksCisrCQkJICAgICAgIGNjX3N0YXR1cy52YWx1ZTIpCisrCSAgIHx8IHJlZ19tZW50aW9uZWRfcCAoWEVYUCAoWEVYUCAoU0VUX0RFU1QgKGV4cCksIDApLCAwKSwKKysJCQkgICAgICAgY2Nfc3RhdHVzLm1kZXAudmFsdWUpKSkKKysJQ0NfU1RBVFVTX0lOSVQ7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgQ0NfU0VUX1ZOQ1o6CisrICAgICAgQ0NfU1RBVFVTX0lOSVQ7CisrICAgICAgY2Nfc3RhdHVzLm1kZXAudmFsdWUgPSByZWNvZ19kYXRhLm9wZXJhbmRbMF07CisrICAgICAgY2Nfc3RhdHVzLm1kZXAuZmxhZ3MgPSBDQ19TRVRfVk5DWjsKKysgICAgICBjY19zdGF0dXMubWRlcC5jb25kX2V4ZWNfY21wX2Nsb2JiZXJlZCA9IDA7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgQ0NfU0VUX05DWjoKKysgICAgICBDQ19TVEFUVVNfSU5JVDsKKysgICAgICBjY19zdGF0dXMubWRlcC52YWx1ZSA9IHJlY29nX2RhdGEub3BlcmFuZFswXTsKKysgICAgICBjY19zdGF0dXMubWRlcC5mbGFncyA9IENDX1NFVF9OQ1o7CisrICAgICAgY2Nfc3RhdHVzLm1kZXAuY29uZF9leGVjX2NtcF9jbG9iYmVyZWQgPSAwOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIENDX1NFVF9DWjoKKysgICAgICBDQ19TVEFUVVNfSU5JVDsKKysgICAgICBjY19zdGF0dXMubWRlcC52YWx1ZSA9IHJlY29nX2RhdGEub3BlcmFuZFswXTsKKysgICAgICBjY19zdGF0dXMubWRlcC5mbGFncyA9IENDX1NFVF9DWjsKKysgICAgICBjY19zdGF0dXMubWRlcC5jb25kX2V4ZWNfY21wX2Nsb2JiZXJlZCA9IDA7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgQ0NfU0VUX1o6CisrICAgICAgQ0NfU1RBVFVTX0lOSVQ7CisrICAgICAgY2Nfc3RhdHVzLm1kZXAudmFsdWUgPSByZWNvZ19kYXRhLm9wZXJhbmRbMF07CisrICAgICAgY2Nfc3RhdHVzLm1kZXAuZmxhZ3MgPSBDQ19TRVRfWjsKKysgICAgICBjY19zdGF0dXMubWRlcC5jb25kX2V4ZWNfY21wX2Nsb2JiZXJlZCA9IDA7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgQ0NfQ0xPQkJFUjoKKysgICAgICBDQ19TVEFUVVNfSU5JVDsKKysgICAgICBicmVhazsKKysKKysgICAgZGVmYXVsdDoKKysgICAgICBDQ19TVEFUVVNfSU5JVDsKKysgICAgfQorK30KKysKKysKKysvKgorKyAgT3V0cHV0cyB0byBzdGRpbyBzdHJlYW0gc3RyZWFtIHRoZSBhc3NlbWJsZXIgc3ludGF4IGZvciBhbiBpbnN0cnVjdGlvbgorKyAgb3BlcmFuZCB4LiB4IGlzIGFuIFJUTCBleHByZXNzaW9uLgorKyovCisrdm9pZAorK2F2cjMyX3ByaW50X29wZXJhbmQgKEZJTEUgKiBzdHJlYW0sIHJ0eCB4LCBpbnQgY29kZSkKKyt7CisrICBpbnQgZXJyb3IgPSAwOworKworKyAgaWYgKCBjb2RlID09ICc/JyApCisrICAgIHsKKysgICAgICAvKiBQcmVkaWNhYmxlIGluc3RydWN0aW9uLCBwcmludCBjb25kaXRpb24gY29kZSAqLworKworKyAgICAgIC8qIElmIHRoZSBpbnNuIHNob3VsZCBub3QgYmUgY29uZGl0aW9uYWwgdGhlbiBkbyBub3RoaW5nLiAqLworKyAgICAgIGlmICggY3VycmVudF9pbnNuX3ByZWRpY2F0ZSA9PSBOVUxMX1JUWCApCisrICAgICAgICByZXR1cm47CisrCisrICAgICAgLyogU2V0IHggdG8gdGhlIHByZWRpY2F0ZSB0byBmb3JjZSBwcmludGluZworKyAgICAgICAgIHRoZSBjb25kaXRpb24gbGF0ZXIgb24uICovCisrICAgICAgeCA9IGN1cnJlbnRfaW5zbl9wcmVkaWNhdGU7CisrCisrICAgICAgLyogUmV2ZXJzZSBjb25kaXRpb24gaWYgdXNlaW5nIGJsZCBpbnNuLiAqLworKyAgICAgIGlmICggR0VUX0NPREUgKFhFWFAoY3VycmVudF9pbnNuX3ByZWRpY2F0ZSwwKSkgPT0gQU5EICkKKysgICAgICAgIHggPSByZXZlcnNlZF9jb25kaXRpb24gKGN1cnJlbnRfaW5zbl9wcmVkaWNhdGUpOworKyAgICB9CisrICBlbHNlIGlmICggY29kZSA9PSAnIScgKQorKyAgICB7CisrICAgICAgLyogT3V0cHV0IGNvbXBhcmUgZm9yIGNvbmRpdGlvbmFsIGluc24gaWYgbmVlZGVkLiAqLworKyAgICAgIHJ0eCBuZXdfY29uZDsKKysgICAgICBnY2NfYXNzZXJ0ICggY3VycmVudF9pbnNuX3ByZWRpY2F0ZSAhPSBOVUxMX1JUWCApOworKyAgICAgIG5ld19jb25kID0gYXZyMzJfb3V0cHV0X2NtcChjdXJyZW50X2luc25fcHJlZGljYXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRVRfTU9ERShYRVhQKGN1cnJlbnRfaW5zbl9wcmVkaWNhdGUsMCkpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRVhQKGN1cnJlbnRfaW5zbl9wcmVkaWNhdGUsMCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFWFAoY3VycmVudF9pbnNuX3ByZWRpY2F0ZSwxKSk7CisrCisrICAgICAgLyogQ2hlY2sgaWYgdGhlIG5ldyBjb25kaXRpb24gaXMgYSBzcGVjaWFsIGF2cjMyIGNvbmRpdGlvbgorKyAgICAgICAgIHNwZWNpZmllZCB1c2luZyBVTlNQRUNzLiBJZiBzbyB3ZSBtdXN0IGhhbmRsZSBpdCBkaWZmZXJlbnRseS4gKi8KKysgICAgICBpZiAoIEdFVF9DT0RFIChuZXdfY29uZCkgPT0gVU5TUEVDICkKKysgICAgICAgIHsKKysgICAgICAgICAgY3VycmVudF9pbnNuX3ByZWRpY2F0ZSA9CisrICAgICAgICAgICAgZ2VuX3J0eF9VTlNQRUMgKENDbW9kZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuX3J0dmVjICgyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFWFAoY3VycmVudF9pbnNuX3ByZWRpY2F0ZSwwKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRVhQKGN1cnJlbnRfaW5zbl9wcmVkaWNhdGUsMSkpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYSU5UIChuZXdfY29uZCwgMSkpOworKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgUFVUX0NPREUoY3VycmVudF9pbnNuX3ByZWRpY2F0ZSwgR0VUX0NPREUobmV3X2NvbmQpKTsKKysgICAgICAgIH0KKysgICAgICByZXR1cm47CisrICAgIH0KKysKKysgIHN3aXRjaCAoR0VUX0NPREUgKHgpKQorKyAgICB7CisrICAgIGNhc2UgVU5TUEVDOgorKyAgICAgIHN3aXRjaCAoWElOVCAoeCwgMSkpCisrCXsKKysJY2FzZSBVTlNQRUNfQ09ORF9QTDoKKysJICBpZiAoY29kZSA9PSAnaScpCisrCSAgICBmcHV0cyAoIm1pIiwgc3RyZWFtKTsKKysJICBlbHNlCisrCSAgICBmcHV0cyAoInBsIiwgc3RyZWFtKTsKKysJICBicmVhazsKKysJY2FzZSBVTlNQRUNfQ09ORF9NSToKKysJICBpZiAoY29kZSA9PSAnaScpCisrCSAgICBmcHV0cyAoInBsIiwgc3RyZWFtKTsKKysJICBlbHNlCisrCSAgICBmcHV0cyAoIm1pIiwgc3RyZWFtKTsKKysJICBicmVhazsKKysJZGVmYXVsdDoKKysJICBlcnJvciA9IDE7CisrCX0KKysgICAgICBicmVhazsKKysgICAgY2FzZSBFUToKKysgICAgICBpZiAoY29kZSA9PSAnaScpCisrCWZwdXRzICgibmUiLCBzdHJlYW0pOworKyAgICAgIGVsc2UKKysJZnB1dHMgKCJlcSIsIHN0cmVhbSk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgTkU6CisrICAgICAgaWYgKGNvZGUgPT0gJ2knKQorKwlmcHV0cyAoImVxIiwgc3RyZWFtKTsKKysgICAgICBlbHNlCisrCWZwdXRzICgibmUiLCBzdHJlYW0pOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEdUOgorKyAgICAgIGlmIChjb2RlID09ICdpJykKKysJZnB1dHMgKCJsZSIsIHN0cmVhbSk7CisrICAgICAgZWxzZQorKwlmcHV0cyAoImd0Iiwgc3RyZWFtKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBHVFU6CisrICAgICAgaWYgKGNvZGUgPT0gJ2knKQorKwlmcHV0cyAoImxzIiwgc3RyZWFtKTsKKysgICAgICBlbHNlCisrCWZwdXRzICgiaGkiLCBzdHJlYW0pOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIExUOgorKyAgICAgIGlmIChjb2RlID09ICdpJykKKysJZnB1dHMgKCJnZSIsIHN0cmVhbSk7CisrICAgICAgZWxzZQorKwlmcHV0cyAoImx0Iiwgc3RyZWFtKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBMVFU6CisrICAgICAgaWYgKGNvZGUgPT0gJ2knKQorKwlmcHV0cyAoImhzIiwgc3RyZWFtKTsKKysgICAgICBlbHNlCisrCWZwdXRzICgibG8iLCBzdHJlYW0pOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEdFOgorKyAgICAgIGlmIChjb2RlID09ICdpJykKKysJZnB1dHMgKCJsdCIsIHN0cmVhbSk7CisrICAgICAgZWxzZQorKwlmcHV0cyAoImdlIiwgc3RyZWFtKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBHRVU6CisrICAgICAgaWYgKGNvZGUgPT0gJ2knKQorKwlmcHV0cyAoImxvIiwgc3RyZWFtKTsKKysgICAgICBlbHNlCisrCWZwdXRzICgiaHMiLCBzdHJlYW0pOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIExFOgorKyAgICAgIGlmIChjb2RlID09ICdpJykKKysJZnB1dHMgKCJndCIsIHN0cmVhbSk7CisrICAgICAgZWxzZQorKwlmcHV0cyAoImxlIiwgc3RyZWFtKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBMRVU6CisrICAgICAgaWYgKGNvZGUgPT0gJ2knKQorKwlmcHV0cyAoImhpIiwgc3RyZWFtKTsKKysgICAgICBlbHNlCisrCWZwdXRzICgibHMiLCBzdHJlYW0pOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIENPTlNUX0lOVDoKKysgICAgICB7CisrICAgICAgICBIT1NUX1dJREVfSU5UIHZhbHVlID0gSU5UVkFMICh4KTsKKysKKysgICAgICAgIHN3aXRjaCAoY29kZSkKKysgICAgICAgICAgeworKyAgICAgICAgICBjYXNlICdtJzoKKysgICAgICAgICAgICBpZiAoIEhPU1RfQklUU19QRVJfV0lERV9JTlQgPiBCSVRTX1BFUl9XT1JEICkKKysgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgLyogQSBjb25zdF9pbnQgY2FuIGJlIHVzZWQgdG8gcmVwcmVzZW50IERJbW9kZSBjb25zdGFudHMuICovCisrICAgICAgICAgICAgICAgIHZhbHVlID4+PSBCSVRTX1BFUl9XT1JEOworKyAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIC8qIFdlIG1pZ2h0IGdldCBhIGNvbnN0X2ludCBpbW1lZGlhdGUgZm9yIHNldHRpbmcgYSBESSByZWdpc3RlciwKKysgICAgICAgICAgICAgICB3ZSB0aGVuIG11c3QgdGhlbiByZXR1cm4gdGhlIGNvcnJlY3Qgc2lnbiBleHRlbmRlZCBESS4gVGhlIG1vc3QKKysgICAgICAgICAgICAgICBzaWduaWZpY2FudCB3b3JkIGlzIGp1c3QgYSBzaWduIGV4dGVuc2lvbi4gKi8KKysgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA8IDApCisrICAgICAgICAgICAgICB2YWx1ZSA9IC0xOworKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgIHZhbHVlID0gMDsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgY2FzZSAnaSc6CisrICAgICAgICAgICAgdmFsdWUrKzsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgY2FzZSAncCc6CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgLyogU2V0IHRvIGJpdCBwb3NpdGlvbiBvZiBmaXJzdCBiaXQgc2V0IGluIGltbWVkaWF0ZSAqLworKyAgICAgICAgICAgICAgaW50IGksIGJpdHBvcyA9IDMyOworKyAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCisrICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmICgxIDw8IGkpKQorKyAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGJpdHBvcyA9IGk7CisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICB2YWx1ZSA9IGJpdHBvczsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgIGNhc2UgJ3onOgorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIC8qIFNldCB0byBiaXQgcG9zaXRpb24gb2YgZmlyc3QgYml0IGNsZWFyZWQgaW4gaW1tZWRpYXRlICovCisrICAgICAgICAgICAgICBpbnQgaSwgYml0cG9zID0gMzI7CisrICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykKKysgICAgICAgICAgICAgICAgaWYgKCEodmFsdWUgJiAoMSA8PCBpKSkpCisrICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgYml0cG9zID0gaTsKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgIHZhbHVlID0gYml0cG9zOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgY2FzZSAncic6CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgLyogUmVnbGlzdCA4ICovCisrICAgICAgICAgICAgICBjaGFyIG9wWzUwXTsKKysgICAgICAgICAgICAgIG9wWzBdID0gJ1wwJzsKKysKKysgICAgICAgICAgICAgIGlmICh2YWx1ZSAmIDB4MDEpCisrICAgICAgICAgICAgICAgIHNwcmludGYgKG9wLCAicjAtcjMiKTsKKysgICAgICAgICAgICAgIGlmICh2YWx1ZSAmIDB4MDIpCisrICAgICAgICAgICAgICAgIHN0cmxlbiAob3ApID8gc3ByaW50ZiAob3AsICIlcywgcjQtcjciLCBvcCkgOiBzcHJpbnRmIChvcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyNC1yNyIpOworKyAgICAgICAgICAgICAgaWYgKHZhbHVlICYgMHgwNCkKKysgICAgICAgICAgICAgICAgc3RybGVuIChvcCkgPyBzcHJpbnRmIChvcCwgIiVzLCByOC1yOSIsIG9wKSA6IHNwcmludGYgKG9wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInI4LXI5Iik7CisrICAgICAgICAgICAgICBpZiAodmFsdWUgJiAweDA4KQorKyAgICAgICAgICAgICAgICBzdHJsZW4gKG9wKSA/IHNwcmludGYgKG9wLCAiJXMsIHIxMCIsIG9wKSA6IHNwcmludGYgKG9wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyMTAiKTsKKysgICAgICAgICAgICAgIGlmICh2YWx1ZSAmIDB4MTApCisrICAgICAgICAgICAgICAgIHN0cmxlbiAob3ApID8gc3ByaW50ZiAob3AsICIlcywgcjExIiwgb3ApIDogc3ByaW50ZiAob3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIxMSIpOworKyAgICAgICAgICAgICAgaWYgKHZhbHVlICYgMHgyMCkKKysgICAgICAgICAgICAgICAgc3RybGVuIChvcCkgPyBzcHJpbnRmIChvcCwgIiVzLCByMTIiLCBvcCkgOiBzcHJpbnRmIChvcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicjEyIik7CisrICAgICAgICAgICAgICBpZiAodmFsdWUgJiAweDQwKQorKyAgICAgICAgICAgICAgICBzdHJsZW4gKG9wKSA/IHNwcmludGYgKG9wLCAiJXMsIGxyIiwgb3ApIDogc3ByaW50ZiAob3AsICJsciIpOworKyAgICAgICAgICAgICAgaWYgKHZhbHVlICYgMHg4MCkKKysgICAgICAgICAgICAgICAgc3RybGVuIChvcCkgPyBzcHJpbnRmIChvcCwgIiVzLCBwYyIsIG9wKSA6IHNwcmludGYgKG9wLCAicGMiKTsKKysKKysgICAgICAgICAgICAgIGZwdXRzIChvcCwgc3RyZWFtKTsKKysgICAgICAgICAgICAgIHJldHVybjsKKysgICAgICAgICAgICB9CisrICAgICAgICAgIGNhc2UgJ3MnOgorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIC8qIFJlZ2xpc3QgMTYgKi8KKysgICAgICAgICAgICAgIGNoYXIgcmVnbGlzdDE2X3N0cmluZ1sxMDBdOworKyAgICAgICAgICAgICAgaW50IGk7CisrICAgICAgICAgICAgICByZWdsaXN0MTZfc3RyaW5nWzBdID0gJ1wwJzsKKysKKysJICAgICAgZm9yIChpID0gMDsgaSA8IDE2OyArK2kpCisrCQl7CisrCQkgIGlmICh2YWx1ZSAmICgxIDw8IGkpKQorKwkJICAgIHsKKysJCSAgICAgIHN0cmxlbiAocmVnbGlzdDE2X3N0cmluZykgPyBzcHJpbnRmIChyZWdsaXN0MTZfc3RyaW5nLAorKwkJCQkJCQkgICAiJXMsICVzIiwKKysJCQkJCQkJICAgcmVnbGlzdDE2X3N0cmluZywKKysJCQkJCQkJICAgcmVnX25hbWVzCisrCQkJCQkJCSAgIFtJTlRFUk5BTF9SRUdOVU0KKysJCQkJCQkJICAgIChpKV0pIDoKKysJCQlzcHJpbnRmIChyZWdsaXN0MTZfc3RyaW5nLCAiJXMiLAorKwkJCQkgcmVnX25hbWVzW0lOVEVSTkFMX1JFR05VTSAoaSldKTsKKysJCSAgICB9CisrCQl9CisrCSAgICAgIGZwdXRzIChyZWdsaXN0MTZfc3RyaW5nLCBzdHJlYW0pOworKwkgICAgICByZXR1cm47CisrCSAgICB9CisrCSAgY2FzZSAnQyc6CisrCSAgICB7CisrCSAgICAgIC8qIFJlZ0xpc3RDUDggKi8KKysJICAgICAgY2hhciByZWdsaXN0X3N0cmluZ1sxMDBdOworKwkgICAgICBhdnIzMl9tYWtlX2ZwX3JlZ2xpc3RfdyAodmFsdWUsIChjaGFyICopIHJlZ2xpc3Rfc3RyaW5nKTsKKysJICAgICAgZnB1dHMgKHJlZ2xpc3Rfc3RyaW5nLCBzdHJlYW0pOworKwkgICAgICByZXR1cm47CisrCSAgICB9CisrCSAgY2FzZSAnRCc6CisrCSAgICB7CisrCSAgICAgIC8qIFJlZ0xpc3RDUEQ4ICovCisrCSAgICAgIGNoYXIgcmVnbGlzdF9zdHJpbmdbMTAwXTsKKysJICAgICAgYXZyMzJfbWFrZV9mcF9yZWdsaXN0X2QgKHZhbHVlLCAoY2hhciAqKSByZWdsaXN0X3N0cmluZyk7CisrCSAgICAgIGZwdXRzIChyZWdsaXN0X3N0cmluZywgc3RyZWFtKTsKKysJICAgICAgcmV0dXJuOworKwkgICAgfQorKwkgIGNhc2UgJ2gnOgorKwkgICAgLyogUHJpbnQgaGFsZndvcmQgcGFydCBvZiB3b3JkICovCisrCSAgICBmcHV0cyAodmFsdWUgPyAiYiIgOiAidCIsIHN0cmVhbSk7CisrCSAgICByZXR1cm47CisrCSAgfQorKworKwkvKiBQcmludCBWYWx1ZSAqLworKwlmcHJpbnRmIChzdHJlYW0sICIlZCIsIHZhbHVlKTsKKysJYnJlYWs7CisrICAgICAgfQorKyAgICBjYXNlIENPTlNUX0RPVUJMRToKKysgICAgICB7CisrCUhPU1RfV0lERV9JTlQgaGksIGxvOworKwlpZiAoU0NBTEFSX0ZMT0FUX01PREVfUCAoR0VUX01PREUgKHgpKSkKKysJICB7CisrCSAgICBIT1NUX1dJREVfSU5UIHRhcmdldF9mbG9hdFsyXTsKKysJICAgIGhpID0gbG8gPSAwOworKwkgICAgcmVhbF90b190YXJnZXQgKHRhcmdldF9mbG9hdCwgQ09OU1RfRE9VQkxFX1JFQUxfVkFMVUUgKHgpLAorKwkJCSAgICBHRVRfTU9ERSAoeCkpOworKwkgICAgLyogRm9yIGRvdWJsZXMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgcGFydCBzdGFydHMgYXQgaW5kZXggMC4gKi8KKysJICAgIGlmIChHRVRfTU9ERV9TSVpFIChHRVRfTU9ERSAoeCkpID4gVU5JVFNfUEVSX1dPUkQpCisrCSAgICAgIHsKKysJCWhpID0gdGFyZ2V0X2Zsb2F0WzBdOworKwkJbG8gPSB0YXJnZXRfZmxvYXRbMV07CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJbG8gPSB0YXJnZXRfZmxvYXRbMF07CisrCSAgICAgIH0KKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBoaSA9IENPTlNUX0RPVUJMRV9ISUdIICh4KTsKKysJICAgIGxvID0gQ09OU1RfRE9VQkxFX0xPVyAoeCk7CisrCSAgfQorKworKwlpZiAoY29kZSA9PSAnbScpCisrCSAgZnByaW50ZiAoc3RyZWFtLCAiJWxkIiwgaGkpOworKwllbHNlCisrCSAgZnByaW50ZiAoc3RyZWFtLCAiJWxkIiwgbG8pOworKworKwlicmVhazsKKysgICAgICB9CisrICAgIGNhc2UgQ09OU1Q6CisrICAgICAgb3V0cHV0X2FkZHJfY29uc3QgKHN0cmVhbSwgWEVYUCAoWEVYUCAoeCwgMCksIDApKTsKKysgICAgICBmcHJpbnRmIChzdHJlYW0sICIrJWxkIiwgSU5UVkFMIChYRVhQIChYRVhQICh4LCAwKSwgMSkpKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBSRUc6CisrICAgICAgLyogU3dhcCByZWdpc3RlciBuYW1lIGlmIHRoZSByZWdpc3RlciBpcyBESW1vZGUgb3IgREZtb2RlLiAqLworKyAgICAgIGlmIChHRVRfTU9ERSAoeCkgPT0gREltb2RlIHx8IEdFVF9NT0RFICh4KSA9PSBERm1vZGUpCisrCXsKKysJICAvKiBEb3VibGUgcmVnaXN0ZXIgbXVzdCBoYXZlIGFuIGV2ZW4gbnVtYmVyZWQgYWRkcmVzcyAqLworKwkgIGdjY19hc3NlcnQgKCEoUkVHTk8gKHgpICUgMikpOworKwkgIGlmIChjb2RlID09ICdtJykKKysJICAgIGZwdXRzIChyZWdfbmFtZXNbdHJ1ZV9yZWdudW0gKHgpXSwgc3RyZWFtKTsKKysJICBlbHNlCisrCSAgICBmcHV0cyAocmVnX25hbWVzW3RydWVfcmVnbnVtICh4KSArIDFdLCBzdHJlYW0pOworKwl9CisrICAgICAgZWxzZSBpZiAoR0VUX01PREUgKHgpID09IFRJbW9kZSkKKysJeworKwkgIHN3aXRjaCAoY29kZSkKKysJICAgIHsKKysJICAgIGNhc2UgJ1QnOgorKwkgICAgICBmcHV0cyAocmVnX25hbWVzW3RydWVfcmVnbnVtICh4KV0sIHN0cmVhbSk7CisrCSAgICAgIGJyZWFrOworKwkgICAgY2FzZSAnVSc6CisrCSAgICAgIGZwdXRzIChyZWdfbmFtZXNbdHJ1ZV9yZWdudW0gKHgpICsgMV0sIHN0cmVhbSk7CisrCSAgICAgIGJyZWFrOworKwkgICAgY2FzZSAnTCc6CisrCSAgICAgIGZwdXRzIChyZWdfbmFtZXNbdHJ1ZV9yZWdudW0gKHgpICsgMl0sIHN0cmVhbSk7CisrCSAgICAgIGJyZWFrOworKwkgICAgY2FzZSAnQic6CisrCSAgICAgIGZwdXRzIChyZWdfbmFtZXNbdHJ1ZV9yZWdudW0gKHgpICsgM10sIHN0cmVhbSk7CisrCSAgICAgIGJyZWFrOworKwkgICAgZGVmYXVsdDoKKysJICAgICAgZnByaW50ZiAoc3RyZWFtLCAiJXMsICVzLCAlcywgJXMiLAorKwkJICAgICAgIHJlZ19uYW1lc1t0cnVlX3JlZ251bSAoeCkgKyAzXSwKKysJCSAgICAgICByZWdfbmFtZXNbdHJ1ZV9yZWdudW0gKHgpICsgMl0sCisrCQkgICAgICAgcmVnX25hbWVzW3RydWVfcmVnbnVtICh4KSArIDFdLAorKwkJICAgICAgIHJlZ19uYW1lc1t0cnVlX3JlZ251bSAoeCldKTsKKysJICAgICAgYnJlYWs7CisrCSAgICB9CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICBmcHV0cyAocmVnX25hbWVzW3RydWVfcmVnbnVtICh4KV0sIHN0cmVhbSk7CisrCX0KKysgICAgICBicmVhazsKKysgICAgY2FzZSBDT0RFX0xBQkVMOgorKyAgICBjYXNlIExBQkVMX1JFRjoKKysgICAgY2FzZSBTWU1CT0xfUkVGOgorKyAgICAgIG91dHB1dF9hZGRyX2NvbnN0IChzdHJlYW0sIHgpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIE1FTToKKysgICAgICBzd2l0Y2ggKEdFVF9DT0RFIChYRVhQICh4LCAwKSkpCisrCXsKKysJY2FzZSBMQUJFTF9SRUY6CisrCWNhc2UgU1lNQk9MX1JFRjoKKysJICBvdXRwdXRfYWRkcl9jb25zdCAoc3RyZWFtLCBYRVhQICh4LCAwKSk7CisrCSAgYnJlYWs7CisrCWNhc2UgTUVNOgorKwkgIHN3aXRjaCAoR0VUX0NPREUgKFhFWFAgKFhFWFAgKHgsIDApLCAwKSkpCisrCSAgICB7CisrCSAgICBjYXNlIFNZTUJPTF9SRUY6CisrCSAgICAgIG91dHB1dF9hZGRyX2NvbnN0IChzdHJlYW0sIFhFWFAgKFhFWFAgKHgsIDApLCAwKSk7CisrCSAgICAgIGJyZWFrOworKwkgICAgZGVmYXVsdDoKKysJICAgICAgZXJyb3IgPSAxOworKwkgICAgICBicmVhazsKKysJICAgIH0KKysJICBicmVhazsKKysJY2FzZSBSRUc6CisrCSAgYXZyMzJfcHJpbnRfb3BlcmFuZCAoc3RyZWFtLCBYRVhQICh4LCAwKSwgMCk7CisrCSAgaWYgKGNvZGUgIT0gJ3AnKQorKwkgICAgZnB1dHMgKCJbMF0iLCBzdHJlYW0pOworKwkgIGJyZWFrOworKwljYXNlIFBSRV9ERUM6CisrCSAgZnB1dHMgKCItLSIsIHN0cmVhbSk7CisrCSAgYXZyMzJfcHJpbnRfb3BlcmFuZCAoc3RyZWFtLCBYRVhQIChYRVhQICh4LCAwKSwgMCksIDApOworKwkgIGJyZWFrOworKwljYXNlIFBPU1RfSU5DOgorKwkgIGF2cjMyX3ByaW50X29wZXJhbmQgKHN0cmVhbSwgWEVYUCAoWEVYUCAoeCwgMCksIDApLCAwKTsKKysJICBmcHV0cyAoIisrIiwgc3RyZWFtKTsKKysJICBicmVhazsKKysJY2FzZSBQTFVTOgorKwkgIHsKKysJICAgIHJ0eCBvcDAgPSBYRVhQIChYRVhQICh4LCAwKSwgMCk7CisrCSAgICBydHggb3AxID0gWEVYUCAoWEVYUCAoeCwgMCksIDEpOworKwkgICAgcnR4IGJhc2UgPSBOVUxMX1JUWCwgb2Zmc2V0ID0gTlVMTF9SVFg7CisrCisrCSAgICBpZiAoYXZyMzJfYWRkcmVzc19yZWdpc3Rlcl9ydHhfcCAob3AwLCAxKSkKKysJICAgICAgeworKwkJYmFzZSA9IG9wMDsKKysJCW9mZnNldCA9IG9wMTsKKysJICAgICAgfQorKwkgICAgZWxzZSBpZiAoYXZyMzJfYWRkcmVzc19yZWdpc3Rlcl9ydHhfcCAob3AxLCAxKSkKKysJICAgICAgeworKwkJLyogT3BlcmFuZHMgYXJlIHN3aXRjaGVkLiAqLworKwkJYmFzZSA9IG9wMTsKKysJCW9mZnNldCA9IG9wMDsKKysJICAgICAgfQorKworKwkgICAgZ2NjX2Fzc2VydCAoYmFzZSAmJiBvZmZzZXQKKysJCQkmJiBhdnIzMl9hZGRyZXNzX3JlZ2lzdGVyX3J0eF9wIChiYXNlLCAxKQorKwkJCSYmIGF2cjMyX2xlZ2l0aW1hdGVfaW5kZXhfcCAoR0VUX01PREUgKHgpLCBvZmZzZXQsCisrCQkJCQkJICAgICAxKSk7CisrCisrCSAgICBhdnIzMl9wcmludF9vcGVyYW5kIChzdHJlYW0sIGJhc2UsIDApOworKwkgICAgZnB1dHMgKCJbIiwgc3RyZWFtKTsKKysJICAgIGF2cjMyX3ByaW50X29wZXJhbmQgKHN0cmVhbSwgb2Zmc2V0LCAwKTsKKysJICAgIGZwdXRzICgiXSIsIHN0cmVhbSk7CisrCSAgICBicmVhazsKKysJICB9CisrCWNhc2UgQ09OU1Q6CisrCSAgb3V0cHV0X2FkZHJfY29uc3QgKHN0cmVhbSwgWEVYUCAoWEVYUCAoWEVYUCAoeCwgMCksIDApLCAwKSk7CisrCSAgZnByaW50ZiAoc3RyZWFtLCAiICsgJWxkIiwKKysJCSAgIElOVFZBTCAoWEVYUCAoWEVYUCAoWEVYUCAoeCwgMCksIDApLCAxKSkpOworKwkgIGJyZWFrOworKyAgICAgICAgY2FzZSBDT05TVF9JTlQ6CisrCSAgYXZyMzJfcHJpbnRfb3BlcmFuZCAoc3RyZWFtLCBYRVhQICh4LCAwKSwgMCk7CisrICAgICAgICAgIGJyZWFrOworKwlkZWZhdWx0OgorKwkgIGVycm9yID0gMTsKKysJfQorKyAgICAgIGJyZWFrOworKyAgICBjYXNlIE1VTFQ6CisrICAgICAgeworKwlpbnQgdmFsdWUgPSBJTlRWQUwgKFhFWFAgKHgsIDEpKTsKKysKKysJLyogQ29udmVydCBpbW1lZGlhdGUgaW4gbXVsdGlwbGljYXRpb24gaW50byBhIHNoaWZ0IGltbWVkaWF0ZSAqLworKwlzd2l0Y2ggKHZhbHVlKQorKwkgIHsKKysJICBjYXNlIDI6CisrCSAgICB2YWx1ZSA9IDE7CisrCSAgICBicmVhazsKKysJICBjYXNlIDQ6CisrCSAgICB2YWx1ZSA9IDI7CisrCSAgICBicmVhazsKKysJICBjYXNlIDg6CisrCSAgICB2YWx1ZSA9IDM7CisrCSAgICBicmVhazsKKysJICBkZWZhdWx0OgorKwkgICAgdmFsdWUgPSAwOworKwkgIH0KKysJZnByaW50ZiAoc3RyZWFtLCAiJXMgPDwgJWkiLCByZWdfbmFtZXNbdHJ1ZV9yZWdudW0gKFhFWFAgKHgsIDApKV0sCisrCQkgdmFsdWUpOworKwlicmVhazsKKysgICAgICB9CisrICAgIGNhc2UgQVNISUZUOgorKyAgICAgIGlmIChHRVRfQ09ERSAoWEVYUCAoeCwgMSkpID09IENPTlNUX0lOVCkKKysJZnByaW50ZiAoc3RyZWFtLCAiJXMgPDwgJWkiLCByZWdfbmFtZXNbdHJ1ZV9yZWdudW0gKFhFWFAgKHgsIDApKV0sCisrCQkgKGludCkgSU5UVkFMIChYRVhQICh4LCAxKSkpOworKyAgICAgIGVsc2UgaWYgKFJFR19QIChYRVhQICh4LCAxKSkpCisrCWZwcmludGYgKHN0cmVhbSwgIiVzIDw8ICVzIiwgcmVnX25hbWVzW3RydWVfcmVnbnVtIChYRVhQICh4LCAwKSldLAorKwkJIHJlZ19uYW1lc1t0cnVlX3JlZ251bSAoWEVYUCAoeCwgMSkpXSk7CisrICAgICAgZWxzZQorKwl7CisrCSAgZXJyb3IgPSAxOworKwl9CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgTFNISUZUUlQ6CisrICAgICAgaWYgKEdFVF9DT0RFIChYRVhQICh4LCAxKSkgPT0gQ09OU1RfSU5UKQorKwlmcHJpbnRmIChzdHJlYW0sICIlcyA+PiAlaSIsIHJlZ19uYW1lc1t0cnVlX3JlZ251bSAoWEVYUCAoeCwgMCkpXSwKKysJCSAoaW50KSBJTlRWQUwgKFhFWFAgKHgsIDEpKSk7CisrICAgICAgZWxzZSBpZiAoUkVHX1AgKFhFWFAgKHgsIDEpKSkKKysJZnByaW50ZiAoc3RyZWFtLCAiJXMgPj4gJXMiLCByZWdfbmFtZXNbdHJ1ZV9yZWdudW0gKFhFWFAgKHgsIDApKV0sCisrCQkgcmVnX25hbWVzW3RydWVfcmVnbnVtIChYRVhQICh4LCAxKSldKTsKKysgICAgICBlbHNlCisrCXsKKysJICBlcnJvciA9IDE7CisrCX0KKysgICAgICBmcHJpbnRmIChzdHJlYW0sICI+PiIpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFBBUkFMTEVMOgorKyAgICAgIHsKKysJLyogTG9hZCBzdG9yZSBtdWx0aXBsZSAqLworKwlpbnQgaTsKKysJaW50IGNvdW50ID0gWFZFQ0xFTiAoeCwgMCk7CisrCWludCByZWdsaXN0MTYgPSAwOworKwljaGFyIHJlZ2xpc3QxNl9zdHJpbmdbMTAwXTsKKysKKysJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpCisrCSAgeworKwkgICAgcnR4IHZlY19lbG0gPSBYVkVDRVhQICh4LCAwLCBpKTsKKysJICAgIGlmIChHRVRfTU9ERSAodmVjX2VsbSkgIT0gU0VUKQorKwkgICAgICB7CisrCQlkZWJ1Z19ydHggKHZlY19lbG0pOworKwkJaW50ZXJuYWxfZXJyb3IgKCJVbmtub3duIGVsZW1lbnQgaW4gcGFyYWxsZWwgZXhwcmVzc2lvbiEiKTsKKysJICAgICAgfQorKwkgICAgaWYgKEdFVF9NT0RFIChYRVhQICh2ZWNfZWxtLCAwKSkgPT0gUkVHKQorKwkgICAgICB7CisrCQkvKiBMb2FkIG11bHRpcGxlICovCisrCQlyZWdsaXN0MTYgfD0gMSA8PCBBU01fUkVHTlVNIChSRUdOTyAoWEVYUCAodmVjX2VsbSwgMCkpKTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQkvKiBTdG9yZSBtdWx0aXBsZSAqLworKwkJcmVnbGlzdDE2IHw9IDEgPDwgQVNNX1JFR05VTSAoUkVHTk8gKFhFWFAgKHZlY19lbG0sIDEpKSk7CisrCSAgICAgIH0KKysJICB9CisrCisrCWF2cjMyX21ha2VfcmVnbGlzdDE2IChyZWdsaXN0MTYsIHJlZ2xpc3QxNl9zdHJpbmcpOworKwlmcHV0cyAocmVnbGlzdDE2X3N0cmluZywgc3RyZWFtKTsKKysKKysJYnJlYWs7CisrICAgICAgfQorKworKyAgICBjYXNlIFBMVVM6CisrICAgICAgeworKyAgICAgICAgcnR4IG9wMCA9IFhFWFAgKHgsIDApOworKyAgICAgICAgcnR4IG9wMSA9IFhFWFAgKHgsIDEpOworKyAgICAgICAgcnR4IGJhc2UgPSBOVUxMX1JUWCwgb2Zmc2V0ID0gTlVMTF9SVFg7CisrCisrICAgICAgICBpZiAoYXZyMzJfYWRkcmVzc19yZWdpc3Rlcl9ydHhfcCAob3AwLCAxKSkKKysgICAgICAgICAgeworKyAgICAgICAgICAgIGJhc2UgPSBvcDA7CisrICAgICAgICAgICAgb2Zmc2V0ID0gb3AxOworKyAgICAgICAgICB9CisrICAgICAgICBlbHNlIGlmIChhdnIzMl9hZGRyZXNzX3JlZ2lzdGVyX3J0eF9wIChvcDEsIDEpKQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgLyogT3BlcmFuZHMgYXJlIHN3aXRjaGVkLiAqLworKyAgICAgICAgICAgIGJhc2UgPSBvcDE7CisrICAgICAgICAgICAgb2Zmc2V0ID0gb3AwOworKyAgICAgICAgICB9CisrCisrICAgICAgICBnY2NfYXNzZXJ0IChiYXNlICYmIG9mZnNldAorKyAgICAgICAgICAgICAgICAgICAgJiYgYXZyMzJfYWRkcmVzc19yZWdpc3Rlcl9ydHhfcCAoYmFzZSwgMSkKKysgICAgICAgICAgICAgICAgICAgICYmIGF2cjMyX2xlZ2l0aW1hdGVfaW5kZXhfcCAoR0VUX01PREUgKHgpLCBvZmZzZXQsIDEpKTsKKysKKysgICAgICAgIGF2cjMyX3ByaW50X29wZXJhbmQgKHN0cmVhbSwgYmFzZSwgMCk7CisrICAgICAgICBmcHV0cyAoIlsiLCBzdHJlYW0pOworKyAgICAgICAgYXZyMzJfcHJpbnRfb3BlcmFuZCAoc3RyZWFtLCBvZmZzZXQsIDApOworKyAgICAgICAgZnB1dHMgKCJdIiwgc3RyZWFtKTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysKKysgICAgZGVmYXVsdDoKKysgICAgICBlcnJvciA9IDE7CisrICAgIH0KKysKKysgIGlmIChlcnJvcikKKysgICAgeworKyAgICAgIGRlYnVnX3J0eCAoeCk7CisrICAgICAgaW50ZXJuYWxfZXJyb3IgKCJJbGxlZ2FsIGV4cHJlc3Npb24gZm9yIGF2cjMyX3ByaW50X29wZXJhbmQiKTsKKysgICAgfQorK30KKysKKytydHgKKythdnIzMl9nZXRfbm90ZV9yZWdfZXF1aXYgKHJ0eCBpbnNuKQorK3sKKysgIHJ0eCBub3RlOworKworKyAgbm90ZSA9IGZpbmRfcmVnX25vdGUgKGluc24sIFJFR19FUVVJViwgTlVMTF9SVFgpOworKworKyAgaWYgKG5vdGUgIT0gTlVMTF9SVFgpCisrICAgIHJldHVybiBYRVhQIChub3RlLCAwKTsKKysgIGVsc2UKKysgICAgcmV0dXJuIE5VTExfUlRYOworK30KKysKKysvKgorKyAgT3V0cHV0cyB0byBzdGRpbyBzdHJlYW0gc3RyZWFtIHRoZSBhc3NlbWJsZXIgc3ludGF4IGZvciBhbiBpbnN0cnVjdGlvbgorKyAgb3BlcmFuZCB0aGF0IGlzIGEgbWVtb3J5IHJlZmVyZW5jZSB3aG9zZSBhZGRyZXNzIGlzIHguIHggaXMgYW4gUlRMCisrICBleHByZXNzaW9uLgorKworKyAgVG9EbzogZml4bWUuCisrKi8KKyt2b2lkCisrYXZyMzJfcHJpbnRfb3BlcmFuZF9hZGRyZXNzIChGSUxFICogc3RyZWFtLCBydHggeCkKKyt7CisrICBmcHJpbnRmIChzdHJlYW0sICIoJWQpIC8qIGFkZHJlc3MgKi8iLCBSRUdOTyAoeCkpOworK30KKysKKysvKiBSZXR1cm4gdHJ1ZSBpZiBfR0xPQkFMX09GRlNFVF9UQUJMRV8gc3ltYm9sIGlzIG1lbnRpb25lZC4gICovCisrYm9vbAorK2F2cjMyX2dvdF9tZW50aW9uZWRfcCAocnR4IGFkZHIpCisreworKyAgaWYgKEdFVF9DT0RFIChhZGRyKSA9PSBNRU0pCisrICAgIGFkZHIgPSBYRVhQIChhZGRyLCAwKTsKKysgIHdoaWxlIChHRVRfQ09ERSAoYWRkcikgPT0gQ09OU1QpCisrICAgIGFkZHIgPSBYRVhQIChhZGRyLCAwKTsKKysgIGlmIChHRVRfQ09ERSAoYWRkcikgPT0gU1lNQk9MX1JFRikKKysgICAgeworKyAgICAgIHJldHVybiBzdHJlcSAoWFNUUiAoYWRkciwgMCksICJfR0xPQkFMX09GRlNFVF9UQUJMRV8iKTsKKysgICAgfQorKyAgaWYgKEdFVF9DT0RFIChhZGRyKSA9PSBQTFVTIHx8IEdFVF9DT0RFIChhZGRyKSA9PSBNSU5VUykKKysgICAgeworKyAgICAgIGJvb2wgbDEsIGwyOworKworKyAgICAgIGwxID0gYXZyMzJfZ290X21lbnRpb25lZF9wIChYRVhQIChhZGRyLCAwKSk7CisrICAgICAgbDIgPSBhdnIzMl9nb3RfbWVudGlvbmVkX3AgKFhFWFAgKGFkZHIsIDEpKTsKKysgICAgICByZXR1cm4gbDEgfHwgbDI7CisrICAgIH0KKysgIHJldHVybiBmYWxzZTsKKyt9CisrCisrCisrLyogRmluZCB0aGUgc3ltYm9sIGluIGFuIGFkZHJlc3MgZXhwcmVzc2lvbi4gICovCisrCisrcnR4CisrYXZyMzJfZmluZF9zeW1ib2wgKHJ0eCBhZGRyKQorK3sKKysgIGlmIChHRVRfQ09ERSAoYWRkcikgPT0gTUVNKQorKyAgICBhZGRyID0gWEVYUCAoYWRkciwgMCk7CisrCisrICB3aGlsZSAoR0VUX0NPREUgKGFkZHIpID09IENPTlNUKQorKyAgICBhZGRyID0gWEVYUCAoYWRkciwgMCk7CisrCisrICBpZiAoR0VUX0NPREUgKGFkZHIpID09IFNZTUJPTF9SRUYgfHwgR0VUX0NPREUgKGFkZHIpID09IExBQkVMX1JFRikKKysgICAgcmV0dXJuIGFkZHI7CisrICBpZiAoR0VUX0NPREUgKGFkZHIpID09IFBMVVMpCisrICAgIHsKKysgICAgICBydHggbDEsIGwyOworKworKyAgICAgIGwxID0gYXZyMzJfZmluZF9zeW1ib2wgKFhFWFAgKGFkZHIsIDApKTsKKysgICAgICBsMiA9IGF2cjMyX2ZpbmRfc3ltYm9sIChYRVhQIChhZGRyLCAxKSk7CisrICAgICAgaWYgKGwxICE9IE5VTExfUlRYICYmIGwyID09IE5VTExfUlRYKQorKwlyZXR1cm4gbDE7CisrICAgICAgZWxzZSBpZiAobDEgPT0gTlVMTF9SVFggJiYgbDIgIT0gTlVMTF9SVFgpCisrCXJldHVybiBsMjsKKysgICAgfQorKworKyAgcmV0dXJuIE5VTExfUlRYOworK30KKysKKysKKysvKiBSb3V0aW5lcyBmb3IgbWFuaXB1bGF0aW9uIG9mIHRoZSBjb25zdGFudCBwb29sLiAgKi8KKysKKysvKiBBVlIzMiBpbnN0cnVjdGlvbnMgY2Fubm90IGxvYWQgYSBsYXJnZSBjb25zdGFudCBkaXJlY3RseSBpbnRvIGEKKysgICByZWdpc3RlcjsgdGhleSBoYXZlIHRvIGNvbWUgZnJvbSBhIHBjIHJlbGF0aXZlIGxvYWQuICBUaGUgY29uc3RhbnQKKysgICBtdXN0IHRoZXJlZm9yZSBiZSBwbGFjZWQgaW4gdGhlIGFkZHJlc3NhYmxlIHJhbmdlIG9mIHRoZSBwYworKyAgIHJlbGF0aXZlIGxvYWQuICBEZXBlbmRpbmcgb24gdGhlIHByZWNpc2UgcGMgcmVsYXRpdmUgbG9hZAorKyAgIGluc3RydWN0aW9uIHRoZSByYW5nZSBpcyBzb21ld2hlcmUgYmV0d2VlbiAyNTYgYnl0ZXMgYW5kIDRrLiAgVGhpcworKyAgIG1lYW5zIHRoYXQgd2Ugb2Z0ZW4gaGF2ZSB0byBkdW1wIGEgY29uc3RhbnQgaW5zaWRlIGEgZnVuY3Rpb24sIGFuZAorKyAgIGdlbmVyYXRlIGNvZGUgdG8gYnJhbmNoIGFyb3VuZCBpdC4KKysKKysgICBJdCBpcyBpbXBvcnRhbnQgdG8gbWluaW1pemUgdGhpcywgc2luY2UgdGhlIGJyYW5jaGVzIHdpbGwgc2xvdworKyAgIHRoaW5ncyBkb3duIGFuZCBtYWtlIHRoZSBjb2RlIGxhcmdlci4KKysKKysgICBOb3JtYWxseSB3ZSBjYW4gaGlkZSB0aGUgdGFibGUgYWZ0ZXIgYW4gZXhpc3RpbmcgdW5jb25kaXRpb25hbAorKyAgIGJyYW5jaCBzbyB0aGF0IHRoZXJlIGlzIG5vIGludGVycnVwdGlvbiBvZiB0aGUgZmxvdywgYnV0IGluIHRoZQorKyAgIHdvcnN0IGNhc2UgdGhlIGNvZGUgbG9va3MgbGlrZSB0aGlzOgorKworKwlsZGRwYwlybiwgTDEKKysJLi4uCisrCXJqbXAJTDIKKysJYWxpZ24KKysJTDE6CS5sb25nIHZhbHVlCisrCUwyOgorKwkuLi4KKysKKysJbGRkcGMJcm4sIEwzCisrCS4uLgorKwlyam1wCUw0CisrCWFsaWduCisrCUwzOgkubG9uZyB2YWx1ZQorKwlMNDoKKysJLi4uCisrCisrICAgV2UgZml4IHRoaXMgYnkgcGVyZm9ybWluZyBhIHNjYW4gYWZ0ZXIgc2NoZWR1bGluZywgd2hpY2ggbm90aWNlcworKyAgIHdoaWNoIGluc3RydWN0aW9ucyBuZWVkIHRvIGhhdmUgdGhlaXIgb3BlcmFuZHMgZmV0Y2hlZCBmcm9tIHRoZQorKyAgIGNvbnN0YW50IHRhYmxlIGFuZCBidWlsZHMgdGhlIHRhYmxlLgorKworKyAgIFRoZSBhbGdvcml0aG0gc3RhcnRzIGJ5IGJ1aWxkaW5nIGEgdGFibGUgb2YgYWxsIHRoZSBjb25zdGFudHMgdGhhdAorKyAgIG5lZWQgZml4aW5nIHVwIGFuZCBhbGwgdGhlIG5hdHVyYWwgYmFycmllcnMgaW4gdGhlIGZ1bmN0aW9uIChwbGFjZXMKKysgICB3aGVyZSBhIGNvbnN0YW50IHRhYmxlIGNhbiBiZSBkcm9wcGVkIHdpdGhvdXQgYnJlYWtpbmcgdGhlIGZsb3cpLgorKyAgIEZvciBlYWNoIGZpeHVwIHdlIG5vdGUgaG93IGZhciB0aGUgcGMtcmVsYXRpdmUgcmVwbGFjZW1lbnQgd2lsbCBiZQorKyAgIGFibGUgdG8gcmVhY2ggYW5kIHRoZSBvZmZzZXQgb2YgdGhlIGluc3RydWN0aW9uIGludG8gdGhlIGZ1bmN0aW9uLgorKworKyAgIEhhdmluZyBidWlsdCB0aGUgdGFibGUgd2UgdGhlbiBncm91cCB0aGUgZml4ZXMgdG9nZXRoZXIgdG8gZm9ybQorKyAgIHRhYmxlcyB0aGF0IGFyZSBhcyBsYXJnZSBhcyBwb3NzaWJsZSAoc3ViamVjdCB0byBhZGRyZXNzaW5nCisrICAgY29uc3RyYWludHMpIGFuZCBlbWl0IGVhY2ggdGFibGUgb2YgY29uc3RhbnRzIGFmdGVyIHRoZSBsYXN0CisrICAgYmFycmllciB0aGF0IGlzIHdpdGhpbiByYW5nZSBvZiBhbGwgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgZ3JvdXAuCisrICAgSWYgYSBncm91cCBkb2VzIG5vdCBjb250YWluIGEgYmFycmllciwgdGhlbiB3ZSBmb3JjaWJseSBjcmVhdGUgb25lCisrICAgYnkgaW5zZXJ0aW5nIGEganVtcCBpbnN0cnVjdGlvbiBpbnRvIHRoZSBmbG93LiAgT25jZSB0aGUgdGFibGUgaGFzCisrICAgYmVlbiBpbnNlcnRlZCwgdGhlIGluc25zIGFyZSB0aGVuIG1vZGlmaWVkIHRvIHJlZmVyZW5jZSB0aGUKKysgICByZWxldmFudCBlbnRyeSBpbiB0aGUgcG9vbC4KKysKKysgICBQb3NzaWJsZSBlbmhhbmNlbWVudHMgdG8gdGhlIGFsZ29yaXRobSAobm90IGltcGxlbWVudGVkKSBhcmU6CisrCisrICAgMSkgRm9yIHNvbWUgcHJvY2Vzc29ycyBhbmQgb2JqZWN0IGZvcm1hdHMsIHRoZXJlIG1heSBiZSBiZW5lZml0IGluCisrICAgYWxpZ25pbmcgdGhlIHBvb2xzIHRvIHRoZSBzdGFydCBvZiBjYWNoZSBsaW5lczsgdGhpcyBhbGlnbm1lbnQKKysgICB3b3VsZCBuZWVkIHRvIGJlIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGNhbGN1bGF0aW5nIGFkZHJlc3NhYmlsaXR5CisrICAgb2YgYSBwb29sLiAgKi8KKysKKysvKiBUaGVzZSB0eXBlZGVmcyBhcmUgbG9jYXRlZCBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmaWxlLCBzbyB0aGF0CisrICAgdGhleSBjYW4gYmUgdXNlZCBpbiB0aGUgcHJvdG90eXBlcyB0aGVyZS4gIFRoaXMgY29tbWVudCBpcyB0bworKyAgIHJlbWluZCByZWFkZXJzIG9mIHRoYXQgZmFjdCBzbyB0aGF0IHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlcworKyAgIGNhbiBiZSB1bmRlcnN0b29kIG1vcmUgZWFzaWx5LgorKworKyAgICAgdHlwZWRlZiBzdHJ1Y3QgbWluaXBvb2xfbm9kZSAgICBNbm9kZTsKKysgICAgIHR5cGVkZWYgc3RydWN0IG1pbmlwb29sX2ZpeHVwICAgTWZpeDsgICovCisrCisrc3RydWN0IG1pbmlwb29sX25vZGUKKyt7CisrICAvKiBEb3VibHkgbGlua2VkIGNoYWluIG9mIGVudHJpZXMuICAqLworKyAgTW5vZGUgKm5leHQ7CisrICBNbm9kZSAqcHJldjsKKysgIC8qIFRoZSBtYXhpbXVtIG9mZnNldCBpbnRvIHRoZSBjb2RlIHRoYXQgdGhpcyBlbnRyeSBjYW4gYmUgcGxhY2VkLiAgV2hpbGUKKysgICAgIHB1c2hpbmcgZml4ZXMgZm9yIGZvcndhcmQgcmVmZXJlbmNlcywgYWxsIGVudHJpZXMgYXJlIHNvcnRlZCBpbiBvcmRlciBvZgorKyAgICAgaW5jcmVhc2luZyBtYXhfYWRkcmVzcy4gICovCisrICBIT1NUX1dJREVfSU5UIG1heF9hZGRyZXNzOworKyAgLyogU2ltaWxhcmx5IGZvciBhbiBlbnRyeSBpbnNlcnRlZCBmb3IgYSBiYWNrd2FyZHMgcmVmLiAgKi8KKysgIEhPU1RfV0lERV9JTlQgbWluX2FkZHJlc3M7CisrICAvKiBUaGUgbnVtYmVyIG9mIGZpeGVzIHJlZmVyZW5jaW5nIHRoaXMgZW50cnkuICBUaGlzIGNhbiBiZWNvbWUgemVybyBpZiB3ZQorKyAgICAgInVucHVzaCIgYW4gZW50cnkuICBJbiB0aGlzIGNhc2Ugd2UgaWdub3JlIHRoZSBlbnRyeSB3aGVuIHdlIGNvbWUgdG8KKysgICAgIGVtaXQgdGhlIGNvZGUuICAqLworKyAgaW50IHJlZmNvdW50OworKyAgLyogVGhlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgbWluaXBvb2wuICAqLworKyAgSE9TVF9XSURFX0lOVCBvZmZzZXQ7CisrICAvKiBUaGUgdmFsdWUgaW4gdGFibGUuICAqLworKyAgcnR4IHZhbHVlOworKyAgLyogVGhlIG1vZGUgb2YgdmFsdWUuICAqLworKyAgZW51bSBtYWNoaW5lX21vZGUgbW9kZTsKKysgIC8qIFRoZSBzaXplIG9mIHRoZSB2YWx1ZS4gICovCisrICBpbnQgZml4X3NpemU7CisrfTsKKysKKytzdHJ1Y3QgbWluaXBvb2xfZml4dXAKKyt7CisrICBNZml4ICpuZXh0OworKyAgcnR4IGluc247CisrICBIT1NUX1dJREVfSU5UIGFkZHJlc3M7CisrICBydHggKmxvYzsKKysgIGVudW0gbWFjaGluZV9tb2RlIG1vZGU7CisrICBpbnQgZml4X3NpemU7CisrICBydHggdmFsdWU7CisrICBNbm9kZSAqbWluaXBvb2w7CisrICBIT1NUX1dJREVfSU5UIGZvcndhcmRzOworKyAgSE9TVF9XSURFX0lOVCBiYWNrd2FyZHM7CisrfTsKKysKKysKKysvKiBGaXhlcyBsZXNzIHRoYW4gYSB3b3JkIG5lZWQgcGFkZGluZyBvdXQgdG8gYSB3b3JkIGJvdW5kYXJ5LiAgKi8KKysjZGVmaW5lIE1JTklQT09MX0ZJWF9TSVpFKG1vZGUsIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgKElTX0ZPUkNFX01JTklQT09MKHZhbHVlKSA/IDAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgKEdFVF9NT0RFX1NJWkUgKChtb2RlKSkgPj0gNCA/IEdFVF9NT0RFX1NJWkUgKChtb2RlKSkgOiA0KSkKKysKKysjZGVmaW5lIElTX0ZPUkNFX01JTklQT09MKHgpICAgICAgICAgICAgICAgICAgICBcCisrICAoR0VUX0NPREUoeCkgPT0gVU5TUEVDICYmICAgICAgICAgICAgICAgICAgICAgXAorKyAgIFhJTlQoeCwgMSkgPT0gVU5TUEVDX0ZPUkNFX01JTklQT09MKQorKworK3N0YXRpYyBNbm9kZSAqbWluaXBvb2xfdmVjdG9yX2hlYWQ7Cisrc3RhdGljIE1ub2RlICptaW5pcG9vbF92ZWN0b3JfdGFpbDsKKysKKysvKiBUaGUgbGlua2VkIGxpc3Qgb2YgYWxsIG1pbmlwb29sIGZpeGVzIHJlcXVpcmVkIGZvciB0aGlzIGZ1bmN0aW9uLiAgKi8KKytNZml4ICptaW5pcG9vbF9maXhfaGVhZDsKKytNZml4ICptaW5pcG9vbF9maXhfdGFpbDsKKysvKiBUaGUgZml4IGVudHJ5IGZvciB0aGUgY3VycmVudCBtaW5pcG9vbCwgb25jZSBpdCBoYXMgYmVlbiBwbGFjZWQuICAqLworK01maXggKm1pbmlwb29sX2JhcnJpZXI7CisrCisrLyogRGV0ZXJtaW5lcyBpZiBJTlNOIGlzIHRoZSBzdGFydCBvZiBhIGp1bXAgdGFibGUuICBSZXR1cm5zIHRoZSBlbmQKKysgICBvZiB0aGUgVEFCTEUgb3IgTlVMTF9SVFguICAqLworK3N0YXRpYyBydHgKKytpc19qdW1wX3RhYmxlIChydHggaW5zbikKKyt7CisrICBydHggdGFibGU7CisrCisrICBpZiAoR0VUX0NPREUgKGluc24pID09IEpVTVBfSU5TTgorKyAgICAgICYmIEpVTVBfTEFCRUwgKGluc24pICE9IE5VTEwKKysgICAgICAmJiAoKHRhYmxlID0gbmV4dF9yZWFsX2luc24gKEpVTVBfTEFCRUwgKGluc24pKSkKKysJICA9PSBuZXh0X3JlYWxfaW5zbiAoaW5zbikpCisrICAgICAgJiYgdGFibGUgIT0gTlVMTAorKyAgICAgICYmIEdFVF9DT0RFICh0YWJsZSkgPT0gSlVNUF9JTlNOCisrICAgICAgJiYgKEdFVF9DT0RFIChQQVRURVJOICh0YWJsZSkpID09IEFERFJfVkVDCisrCSAgfHwgR0VUX0NPREUgKFBBVFRFUk4gKHRhYmxlKSkgPT0gQUREUl9ESUZGX1ZFQykpCisrICAgIHJldHVybiB0YWJsZTsKKysKKysgIHJldHVybiBOVUxMX1JUWDsKKyt9CisrCisrc3RhdGljIEhPU1RfV0lERV9JTlQKKytnZXRfanVtcF90YWJsZV9zaXplIChydHggaW5zbikKKyt7CisrICAvKiBBRERSX1ZFQ3Mgb25seSB0YWtlIHJvb20gaWYgcmVhZC1vbmx5IGRhdGEgZG9lcyBpbnRvIHRoZSB0ZXh0IHNlY3Rpb24uICAqLworKyAgaWYgKEpVTVBfVEFCTEVTX0lOX1RFWFRfU0VDVElPTgorKyNpZiAhZGVmaW5lZChSRUFET05MWV9EQVRBX1NFQ1RJT05fQVNNX09QKQorKyAgICAgIHx8IDEKKysjZW5kaWYKKysgICAgKQorKyAgICB7CisrICAgICAgcnR4IGJvZHkgPSBQQVRURVJOIChpbnNuKTsKKysgICAgICBpbnQgZWx0ID0gR0VUX0NPREUgKGJvZHkpID09IEFERFJfRElGRl9WRUMgPyAxIDogMDsKKysKKysgICAgICByZXR1cm4gR0VUX01PREVfU0laRSAoR0VUX01PREUgKGJvZHkpKSAqIFhWRUNMRU4gKGJvZHksIGVsdCk7CisrICAgIH0KKysKKysgIHJldHVybiAwOworK30KKysKKysvKiBNb3ZlIGEgbWluaXBvb2wgZml4IE1QIGZyb20gaXRzIGN1cnJlbnQgbG9jYXRpb24gdG8gYmVmb3JlIE1BWF9NUC4KKysgICBJZiBNQVhfTVAgaXMgTlVMTCwgdGhlbiBNUCBkb2Vzbid0IG5lZWQgbW92aW5nLCBidXQgdGhlIGFkZHJlc3NpbmcKKysgICBjb25zdHJhaW50cyBtYXkgbmVlZCB1cGRhdGluZy4gICovCisrc3RhdGljIE1ub2RlICoKKyttb3ZlX21pbmlwb29sX2ZpeF9mb3J3YXJkX3JlZiAoTW5vZGUgKiBtcCwgTW5vZGUgKiBtYXhfbXAsCisrCQkJICAgICAgIEhPU1RfV0lERV9JTlQgbWF4X2FkZHJlc3MpCisreworKyAgLyogVGhpcyBzaG91bGQgbmV2ZXIgYmUgdHJ1ZSBhbmQgdGhlIGNvZGUgYmVsb3cgYXNzdW1lcyB0aGVzZSBhcmUKKysgICAgIGRpZmZlcmVudC4gICovCisrICBpZiAobXAgPT0gbWF4X21wKQorKyAgICBhYm9ydCAoKTsKKysKKysgIGlmIChtYXhfbXAgPT0gTlVMTCkKKysgICAgeworKyAgICAgIGlmIChtYXhfYWRkcmVzcyA8IG1wLT5tYXhfYWRkcmVzcykKKysJbXAtPm1heF9hZGRyZXNzID0gbWF4X2FkZHJlc3M7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGlmIChtYXhfYWRkcmVzcyA+IG1heF9tcC0+bWF4X2FkZHJlc3MgLSBtcC0+Zml4X3NpemUpCisrCW1wLT5tYXhfYWRkcmVzcyA9IG1heF9tcC0+bWF4X2FkZHJlc3MgLSBtcC0+Zml4X3NpemU7CisrICAgICAgZWxzZQorKwltcC0+bWF4X2FkZHJlc3MgPSBtYXhfYWRkcmVzczsKKysKKysgICAgICAvKiBVbmxpbmsgTVAgZnJvbSBpdHMgY3VycmVudCBwb3NpdGlvbi4gIFNpbmNlIG1heF9tcCBpcyBub24tbnVsbCwKKysgICAgICAgICBtcC0+cHJldiBtdXN0IGJlIG5vbi1udWxsLiAgKi8KKysgICAgICBtcC0+cHJldi0+bmV4dCA9IG1wLT5uZXh0OworKyAgICAgIGlmIChtcC0+bmV4dCAhPSBOVUxMKQorKwltcC0+bmV4dC0+cHJldiA9IG1wLT5wcmV2OworKyAgICAgIGVsc2UKKysJbWluaXBvb2xfdmVjdG9yX3RhaWwgPSBtcC0+cHJldjsKKysKKysgICAgICAvKiBSZS1pbnNlcnQgaXQgYmVmb3JlIE1BWF9NUC4gICovCisrICAgICAgbXAtPm5leHQgPSBtYXhfbXA7CisrICAgICAgbXAtPnByZXYgPSBtYXhfbXAtPnByZXY7CisrICAgICAgbWF4X21wLT5wcmV2ID0gbXA7CisrCisrICAgICAgaWYgKG1wLT5wcmV2ICE9IE5VTEwpCisrCW1wLT5wcmV2LT5uZXh0ID0gbXA7CisrICAgICAgZWxzZQorKwltaW5pcG9vbF92ZWN0b3JfaGVhZCA9IG1wOworKyAgICB9CisrCisrICAvKiBTYXZlIHRoZSBuZXcgZW50cnkuICAqLworKyAgbWF4X21wID0gbXA7CisrCisrICAvKiBTY2FuIG92ZXIgdGhlIHByZWNlZGluZyBlbnRyaWVzIGFuZCBhZGp1c3QgdGhlaXIgYWRkcmVzc2VzIGFzIHJlcXVpcmVkLgorKyAgICovCisrICB3aGlsZSAobXAtPnByZXYgIT0gTlVMTAorKwkgJiYgbXAtPnByZXYtPm1heF9hZGRyZXNzID4gbXAtPm1heF9hZGRyZXNzIC0gbXAtPnByZXYtPmZpeF9zaXplKQorKyAgICB7CisrICAgICAgbXAtPnByZXYtPm1heF9hZGRyZXNzID0gbXAtPm1heF9hZGRyZXNzIC0gbXAtPnByZXYtPmZpeF9zaXplOworKyAgICAgIG1wID0gbXAtPnByZXY7CisrICAgIH0KKysKKysgIHJldHVybiBtYXhfbXA7CisrfQorKworKy8qIEFkZCBhIGNvbnN0YW50IHRvIHRoZSBtaW5pcG9vbCBmb3IgYSBmb3J3YXJkIHJlZmVyZW5jZS4gIFJldHVybnMgdGhlCisrICAgbm9kZSBhZGRlZCBvciBOVUxMIGlmIHRoZSBjb25zdGFudCB3aWxsIG5vdCBmaXQgaW4gdGhpcyBwb29sLiAgKi8KKytzdGF0aWMgTW5vZGUgKgorK2FkZF9taW5pcG9vbF9mb3J3YXJkX3JlZiAoTWZpeCAqIGZpeCkKKyt7CisrICAvKiBJZiBzZXQsIG1heF9tcCBpcyB0aGUgZmlyc3QgcG9vbF9lbnRyeSB0aGF0IGhhcyBhIGxvd2VyIGNvbnN0cmFpbnQgdGhhbgorKyAgICAgdGhlIG9uZSB3ZSBhcmUgdHJ5aW5nIHRvIGFkZC4gICovCisrICBNbm9kZSAqbWF4X21wID0gTlVMTDsKKysgIEhPU1RfV0lERV9JTlQgbWF4X2FkZHJlc3MgPSBmaXgtPmFkZHJlc3MgKyBmaXgtPmZvcndhcmRzOworKyAgTW5vZGUgKm1wOworKworKyAgLyogSWYgdGhpcyBmaXgncyBhZGRyZXNzIGlzIGdyZWF0ZXIgdGhhbiB0aGUgYWRkcmVzcyBvZiB0aGUgZmlyc3QgZW50cnksCisrICAgICB0aGVuIHdlIGNhbid0IHB1dCB0aGUgZml4IGluIHRoaXMgcG9vbC4gIFdlIHN1YnRyYWN0IHRoZSBzaXplIG9mIHRoZQorKyAgICAgY3VycmVudCBmaXggdG8gZW5zdXJlIHRoYXQgaWYgdGhlIHRhYmxlIGlzIGZ1bGx5IHBhY2tlZCB3ZSBzdGlsbCBoYXZlCisrICAgICBlbm91Z2ggcm9vbSB0byBpbnNlcnQgdGhpcyB2YWx1ZSBieSBzdWZmbGluZyB0aGUgb3RoZXIgZml4ZXMgZm9yd2FyZHMuICAqLworKyAgaWYgKG1pbmlwb29sX3ZlY3Rvcl9oZWFkICYmCisrICAgICAgZml4LT5hZGRyZXNzID49IG1pbmlwb29sX3ZlY3Rvcl9oZWFkLT5tYXhfYWRkcmVzcyAtIGZpeC0+Zml4X3NpemUpCisrICAgIHJldHVybiBOVUxMOworKworKyAgLyogU2NhbiB0aGUgcG9vbCB0byBzZWUgaWYgYSBjb25zdGFudCB3aXRoIHRoZSBzYW1lIHZhbHVlIGhhcyBhbHJlYWR5IGJlZW4KKysgICAgIGFkZGVkLiAgV2hpbGUgd2UgYXJlIGRvaW5nIHRoaXMsIGFsc28gbm90ZSB0aGUgbG9jYXRpb24gd2hlcmUgd2UgbXVzdAorKyAgICAgaW5zZXJ0IHRoZSBjb25zdGFudCBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuICAqLworKyAgZm9yIChtcCA9IG1pbmlwb29sX3ZlY3Rvcl9oZWFkOyBtcCAhPSBOVUxMOyBtcCA9IG1wLT5uZXh0KQorKyAgICB7CisrICAgICAgaWYgKEdFVF9DT0RFIChmaXgtPnZhbHVlKSA9PSBHRVRfQ09ERSAobXAtPnZhbHVlKQorKwkgICYmIGZpeC0+bW9kZSA9PSBtcC0+bW9kZQorKwkgICYmIChHRVRfQ09ERSAoZml4LT52YWx1ZSkgIT0gQ09ERV9MQUJFTAorKwkgICAgICB8fCAoQ09ERV9MQUJFTF9OVU1CRVIgKGZpeC0+dmFsdWUpCisrCQkgID09IENPREVfTEFCRUxfTlVNQkVSIChtcC0+dmFsdWUpKSkKKysJICAmJiBydHhfZXF1YWxfcCAoZml4LT52YWx1ZSwgbXAtPnZhbHVlKSkKKysJeworKwkgIC8qIE1vcmUgdGhhbiBvbmUgZml4IHJlZmVyZW5jZXMgdGhpcyBlbnRyeS4gICovCisrCSAgbXAtPnJlZmNvdW50Kys7CisrCSAgcmV0dXJuIG1vdmVfbWluaXBvb2xfZml4X2ZvcndhcmRfcmVmIChtcCwgbWF4X21wLCBtYXhfYWRkcmVzcyk7CisrCX0KKysKKysgICAgICAvKiBOb3RlIHRoZSBpbnNlcnRpb24gcG9pbnQgaWYgbmVjZXNzYXJ5LiAgKi8KKysgICAgICBpZiAobWF4X21wID09IE5VTEwgJiYgbXAtPm1heF9hZGRyZXNzID4gbWF4X2FkZHJlc3MpCisrCW1heF9tcCA9IG1wOworKworKyAgICB9CisrCisrICAvKiBUaGUgdmFsdWUgaXMgbm90IGN1cnJlbnRseSBpbiB0aGUgbWluaXBvb2wsIHNvIHdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3CisrICAgICBlbnRyeSBmb3IgaXQuICBJZiBNQVhfTVAgaXMgTlVMTCwgdGhlIGVudHJ5IHdpbGwgYmUgcHV0IG9uIHRoZSBlbmQgb2YKKysgICAgIHRoZSBsaXN0IHNpbmNlIHRoZSBwbGFjZW1lbnQgaXMgbGVzcyBjb25zdHJhaW5lZCB0aGFuIGFueSBleGlzdGluZworKyAgICAgZW50cnkuICBPdGhlcndpc2UsIHdlIGluc2VydCB0aGUgbmV3IGZpeCBiZWZvcmUgTUFYX01QIGFuZCwgaWYKKysgICAgIG5lY2Vzc2FyeSwgYWRqdXN0IHRoZSBjb25zdHJhaW50cyBvbiB0aGUgb3RoZXIgZW50cmllcy4gICovCisrICBtcCA9IHhtYWxsb2MgKHNpemVvZiAoKm1wKSk7CisrICBtcC0+Zml4X3NpemUgPSBmaXgtPmZpeF9zaXplOworKyAgbXAtPm1vZGUgPSBmaXgtPm1vZGU7CisrICBtcC0+dmFsdWUgPSBmaXgtPnZhbHVlOworKyAgbXAtPnJlZmNvdW50ID0gMTsKKysgIC8qIE5vdCB5ZXQgcmVxdWlyZWQgZm9yIGEgYmFja3dhcmRzIHJlZi4gICovCisrICBtcC0+bWluX2FkZHJlc3MgPSAtNjU1MzY7CisrCisrICBpZiAobWF4X21wID09IE5VTEwpCisrICAgIHsKKysgICAgICBtcC0+bWF4X2FkZHJlc3MgPSBtYXhfYWRkcmVzczsKKysgICAgICBtcC0+bmV4dCA9IE5VTEw7CisrICAgICAgbXAtPnByZXYgPSBtaW5pcG9vbF92ZWN0b3JfdGFpbDsKKysKKysgICAgICBpZiAobXAtPnByZXYgPT0gTlVMTCkKKysJeworKwkgIG1pbmlwb29sX3ZlY3Rvcl9oZWFkID0gbXA7CisrCSAgbWluaXBvb2xfdmVjdG9yX2xhYmVsID0gZ2VuX2xhYmVsX3J0eCAoKTsKKysJfQorKyAgICAgIGVsc2UKKysJbXAtPnByZXYtPm5leHQgPSBtcDsKKysKKysgICAgICBtaW5pcG9vbF92ZWN0b3JfdGFpbCA9IG1wOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBpZiAobWF4X2FkZHJlc3MgPiBtYXhfbXAtPm1heF9hZGRyZXNzIC0gbXAtPmZpeF9zaXplKQorKwltcC0+bWF4X2FkZHJlc3MgPSBtYXhfbXAtPm1heF9hZGRyZXNzIC0gbXAtPmZpeF9zaXplOworKyAgICAgIGVsc2UKKysJbXAtPm1heF9hZGRyZXNzID0gbWF4X2FkZHJlc3M7CisrCisrICAgICAgbXAtPm5leHQgPSBtYXhfbXA7CisrICAgICAgbXAtPnByZXYgPSBtYXhfbXAtPnByZXY7CisrICAgICAgbWF4X21wLT5wcmV2ID0gbXA7CisrICAgICAgaWYgKG1wLT5wcmV2ICE9IE5VTEwpCisrCW1wLT5wcmV2LT5uZXh0ID0gbXA7CisrICAgICAgZWxzZQorKwltaW5pcG9vbF92ZWN0b3JfaGVhZCA9IG1wOworKyAgICB9CisrCisrICAvKiBTYXZlIHRoZSBuZXcgZW50cnkuICAqLworKyAgbWF4X21wID0gbXA7CisrCisrICAvKiBTY2FuIG92ZXIgdGhlIHByZWNlZGluZyBlbnRyaWVzIGFuZCBhZGp1c3QgdGhlaXIgYWRkcmVzc2VzIGFzIHJlcXVpcmVkLgorKyAgICovCisrICB3aGlsZSAobXAtPnByZXYgIT0gTlVMTAorKwkgJiYgbXAtPnByZXYtPm1heF9hZGRyZXNzID4gbXAtPm1heF9hZGRyZXNzIC0gbXAtPnByZXYtPmZpeF9zaXplKQorKyAgICB7CisrICAgICAgbXAtPnByZXYtPm1heF9hZGRyZXNzID0gbXAtPm1heF9hZGRyZXNzIC0gbXAtPnByZXYtPmZpeF9zaXplOworKyAgICAgIG1wID0gbXAtPnByZXY7CisrICAgIH0KKysKKysgIHJldHVybiBtYXhfbXA7CisrfQorKworK3N0YXRpYyBNbm9kZSAqCisrbW92ZV9taW5pcG9vbF9maXhfYmFja3dhcmRfcmVmIChNbm9kZSAqIG1wLCBNbm9kZSAqIG1pbl9tcCwKKysJCQkJSE9TVF9XSURFX0lOVCBtaW5fYWRkcmVzcykKKyt7CisrICBIT1NUX1dJREVfSU5UIG9mZnNldDsKKysKKysgIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGJlIHRydWUsIGFuZCB0aGUgY29kZSBiZWxvdyBhc3N1bWVzIHRoZXNlIGFyZQorKyAgICAgZGlmZmVyZW50LiAgKi8KKysgIGlmIChtcCA9PSBtaW5fbXApCisrICAgIGFib3J0ICgpOworKworKyAgaWYgKG1pbl9tcCA9PSBOVUxMKQorKyAgICB7CisrICAgICAgaWYgKG1pbl9hZGRyZXNzID4gbXAtPm1pbl9hZGRyZXNzKQorKwltcC0+bWluX2FkZHJlc3MgPSBtaW5fYWRkcmVzczsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgLyogV2Ugd2lsbCBhZGp1c3QgdGhpcyBiZWxvdyBpZiBpdCBpcyB0b28gbG9vc2UuICAqLworKyAgICAgIG1wLT5taW5fYWRkcmVzcyA9IG1pbl9hZGRyZXNzOworKworKyAgICAgIC8qIFVubGluayBNUCBmcm9tIGl0cyBjdXJyZW50IHBvc2l0aW9uLiAgU2luY2UgbWluX21wIGlzIG5vbi1udWxsLAorKyAgICAgICAgIG1wLT5uZXh0IG11c3QgYmUgbm9uLW51bGwuICAqLworKyAgICAgIG1wLT5uZXh0LT5wcmV2ID0gbXAtPnByZXY7CisrICAgICAgaWYgKG1wLT5wcmV2ICE9IE5VTEwpCisrCW1wLT5wcmV2LT5uZXh0ID0gbXAtPm5leHQ7CisrICAgICAgZWxzZQorKwltaW5pcG9vbF92ZWN0b3JfaGVhZCA9IG1wLT5uZXh0OworKworKyAgICAgIC8qIFJlaW5zZXJ0IGl0IGFmdGVyIE1JTl9NUC4gICovCisrICAgICAgbXAtPnByZXYgPSBtaW5fbXA7CisrICAgICAgbXAtPm5leHQgPSBtaW5fbXAtPm5leHQ7CisrICAgICAgbWluX21wLT5uZXh0ID0gbXA7CisrICAgICAgaWYgKG1wLT5uZXh0ICE9IE5VTEwpCisrCW1wLT5uZXh0LT5wcmV2ID0gbXA7CisrICAgICAgZWxzZQorKwltaW5pcG9vbF92ZWN0b3JfdGFpbCA9IG1wOworKyAgICB9CisrCisrICBtaW5fbXAgPSBtcDsKKysKKysgIG9mZnNldCA9IDA7CisrICBmb3IgKG1wID0gbWluaXBvb2xfdmVjdG9yX2hlYWQ7IG1wICE9IE5VTEw7IG1wID0gbXAtPm5leHQpCisrICAgIHsKKysgICAgICBtcC0+b2Zmc2V0ID0gb2Zmc2V0OworKyAgICAgIGlmIChtcC0+cmVmY291bnQgPiAwKQorKwlvZmZzZXQgKz0gbXAtPmZpeF9zaXplOworKworKyAgICAgIGlmIChtcC0+bmV4dCAmJiBtcC0+bmV4dC0+bWluX2FkZHJlc3MgPCBtcC0+bWluX2FkZHJlc3MgKyBtcC0+Zml4X3NpemUpCisrCW1wLT5uZXh0LT5taW5fYWRkcmVzcyA9IG1wLT5taW5fYWRkcmVzcyArIG1wLT5maXhfc2l6ZTsKKysgICAgfQorKworKyAgcmV0dXJuIG1pbl9tcDsKKyt9CisrCisrLyogQWRkIGEgY29uc3RhbnQgdG8gdGhlIG1pbmlwb29sIGZvciBhIGJhY2t3YXJkIHJlZmVyZW5jZS4gIFJldHVybnMgdGhlCisrICAgbm9kZSBhZGRlZCBvciBOVUxMIGlmIHRoZSBjb25zdGFudCB3aWxsIG5vdCBmaXQgaW4gdGhpcyBwb29sLgorKworKyAgIE5vdGUgdGhhdCB0aGUgY29kZSBmb3IgaW5zZXJ0aW9uIGZvciBhIGJhY2t3YXJkcyByZWZlcmVuY2UgY2FuIGJlCisrICAgc29tZXdoYXQgY29uZnVzaW5nIGJlY2F1c2UgdGhlIGNhbGN1bGF0ZWQgb2Zmc2V0cyBmb3IgZWFjaCBmaXggZG8KKysgICBub3QgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNpemUgb2YgdGhlIHBvb2wgKHdoaWNoIGlzIHN0aWxsIHVuZGVyCisrICAgY29uc3RydWN0aW9uLiAgKi8KKytzdGF0aWMgTW5vZGUgKgorK2FkZF9taW5pcG9vbF9iYWNrd2FyZF9yZWYgKE1maXggKiBmaXgpCisreworKyAgLyogSWYgc2V0LCBtaW5fbXAgaXMgdGhlIGxhc3QgcG9vbF9lbnRyeSB0aGF0IGhhcyBhIGxvd2VyIGNvbnN0cmFpbnQgdGhhbgorKyAgICAgdGhlIG9uZSB3ZSBhcmUgdHJ5aW5nIHRvIGFkZC4gICovCisrICBNbm9kZSAqbWluX21wID0gTlVMTDsKKysgIC8qIFRoaXMgY2FuIGJlIG5lZ2F0aXZlLCBzaW5jZSBpdCBpcyBvbmx5IGEgY29uc3RyYWludC4gICovCisrICBIT1NUX1dJREVfSU5UIG1pbl9hZGRyZXNzID0gZml4LT5hZGRyZXNzIC0gZml4LT5iYWNrd2FyZHM7CisrICBNbm9kZSAqbXA7CisrCisrICAvKiBJZiB3ZSBjYW4ndCByZWFjaCB0aGUgY3VycmVudCBwb29sIGZyb20gdGhpcyBpbnNuLCBvciBpZiB3ZSBjYW4ndCBpbnNlcnQKKysgICAgIHRoaXMgZW50cnkgYXQgdGhlIGVuZCBvZiB0aGUgcG9vbCB3aXRob3V0IHB1c2hpbmcgb3RoZXIgZml4ZXMgb3V0IG9mCisrICAgICByYW5nZSwgdGhlbiB3ZSBkb24ndCB0cnkuICBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBjYW4ndCBmYWlsIGxhdGVyIG9uLiAgKi8KKysgIGlmIChtaW5fYWRkcmVzcyA+PSBtaW5pcG9vbF9iYXJyaWVyLT5hZGRyZXNzCisrICAgICAgfHwgKG1pbmlwb29sX3ZlY3Rvcl90YWlsLT5taW5fYWRkcmVzcyArIGZpeC0+Zml4X3NpemUKKysJICA+PSBtaW5pcG9vbF9iYXJyaWVyLT5hZGRyZXNzKSkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICAvKiBTY2FuIHRoZSBwb29sIHRvIHNlZSBpZiBhIGNvbnN0YW50IHdpdGggdGhlIHNhbWUgdmFsdWUgaGFzIGFscmVhZHkgYmVlbgorKyAgICAgYWRkZWQuICBXaGlsZSB3ZSBhcmUgZG9pbmcgdGhpcywgYWxzbyBub3RlIHRoZSBsb2NhdGlvbiB3aGVyZSB3ZSBtdXN0CisrICAgICBpbnNlcnQgdGhlIGNvbnN0YW50IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4gICovCisrICBmb3IgKG1wID0gbWluaXBvb2xfdmVjdG9yX3RhaWw7IG1wICE9IE5VTEw7IG1wID0gbXAtPnByZXYpCisrICAgIHsKKysgICAgICBpZiAoR0VUX0NPREUgKGZpeC0+dmFsdWUpID09IEdFVF9DT0RFIChtcC0+dmFsdWUpCisrCSAgJiYgZml4LT5tb2RlID09IG1wLT5tb2RlCisrCSAgJiYgKEdFVF9DT0RFIChmaXgtPnZhbHVlKSAhPSBDT0RFX0xBQkVMCisrCSAgICAgIHx8IChDT0RFX0xBQkVMX05VTUJFUiAoZml4LT52YWx1ZSkKKysJCSAgPT0gQ09ERV9MQUJFTF9OVU1CRVIgKG1wLT52YWx1ZSkpKQorKwkgICYmIHJ0eF9lcXVhbF9wIChmaXgtPnZhbHVlLCBtcC0+dmFsdWUpCisrCSAgLyogQ2hlY2sgdGhhdCB0aGVyZSBpcyBlbm91Z2ggc2xhY2sgdG8gbW92ZSB0aGlzIGVudHJ5IHRvIHRoZSBlbmQKKysJICAgICBvZiB0aGUgdGFibGUgKHRoaXMgaXMgY29uc2VydmF0aXZlKS4gICovCisrCSAgJiYgKG1wLT5tYXhfYWRkcmVzcworKwkgICAgICA+IChtaW5pcG9vbF9iYXJyaWVyLT5hZGRyZXNzCisrCQkgKyBtaW5pcG9vbF92ZWN0b3JfdGFpbC0+b2Zmc2V0CisrCQkgKyBtaW5pcG9vbF92ZWN0b3JfdGFpbC0+Zml4X3NpemUpKSkKKysJeworKwkgIG1wLT5yZWZjb3VudCsrOworKwkgIHJldHVybiBtb3ZlX21pbmlwb29sX2ZpeF9iYWNrd2FyZF9yZWYgKG1wLCBtaW5fbXAsIG1pbl9hZGRyZXNzKTsKKysJfQorKworKyAgICAgIGlmIChtaW5fbXAgIT0gTlVMTCkKKysJbXAtPm1pbl9hZGRyZXNzICs9IGZpeC0+Zml4X3NpemU7CisrICAgICAgZWxzZQorKwl7CisrCSAgLyogTm90ZSB0aGUgaW5zZXJ0aW9uIHBvaW50IGlmIG5lY2Vzc2FyeS4gICovCisrCSAgaWYgKG1wLT5taW5fYWRkcmVzcyA8IG1pbl9hZGRyZXNzKQorKwkgICAgeworKwkgICAgICBtaW5fbXAgPSBtcDsKKysJICAgIH0KKysJICBlbHNlIGlmIChtcC0+bWF4X2FkZHJlc3MKKysJCSAgIDwgbWluaXBvb2xfYmFycmllci0+YWRkcmVzcyArIG1wLT5vZmZzZXQgKyBmaXgtPmZpeF9zaXplKQorKwkgICAgeworKwkgICAgICAvKiBJbnNlcnRpbmcgYmVmb3JlIHRoaXMgZW50cnkgd291bGQgcHVzaCB0aGUgZml4IGJleW9uZCBpdHMKKysJICAgICAgICAgbWF4aW11bSBhZGRyZXNzICh3aGljaCBjYW4gaGFwcGVuIGlmIHdlIGhhdmUgcmUtbG9jYXRlZCBhCisrCSAgICAgICAgIGZvcndhcmRzIGZpeCk7IGZvcmNlIHRoZSBuZXcgZml4IHRvIGNvbWUgYWZ0ZXIgaXQuICAqLworKwkgICAgICBtaW5fbXAgPSBtcDsKKysJICAgICAgbWluX2FkZHJlc3MgPSBtcC0+bWluX2FkZHJlc3MgKyBmaXgtPmZpeF9zaXplOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKysgIC8qIFdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IGVudHJ5LiAgKi8KKysgIG1wID0geG1hbGxvYyAoc2l6ZW9mICgqbXApKTsKKysgIG1wLT5maXhfc2l6ZSA9IGZpeC0+Zml4X3NpemU7CisrICBtcC0+bW9kZSA9IGZpeC0+bW9kZTsKKysgIG1wLT52YWx1ZSA9IGZpeC0+dmFsdWU7CisrICBtcC0+cmVmY291bnQgPSAxOworKyAgbXAtPm1heF9hZGRyZXNzID0gbWluaXBvb2xfYmFycmllci0+YWRkcmVzcyArIDY1NTM2OworKworKyAgbXAtPm1pbl9hZGRyZXNzID0gbWluX2FkZHJlc3M7CisrCisrICBpZiAobWluX21wID09IE5VTEwpCisrICAgIHsKKysgICAgICBtcC0+cHJldiA9IE5VTEw7CisrICAgICAgbXAtPm5leHQgPSBtaW5pcG9vbF92ZWN0b3JfaGVhZDsKKysKKysgICAgICBpZiAobXAtPm5leHQgPT0gTlVMTCkKKysJeworKwkgIG1pbmlwb29sX3ZlY3Rvcl90YWlsID0gbXA7CisrCSAgbWluaXBvb2xfdmVjdG9yX2xhYmVsID0gZ2VuX2xhYmVsX3J0eCAoKTsKKysJfQorKyAgICAgIGVsc2UKKysJbXAtPm5leHQtPnByZXYgPSBtcDsKKysKKysgICAgICBtaW5pcG9vbF92ZWN0b3JfaGVhZCA9IG1wOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBtcC0+bmV4dCA9IG1pbl9tcC0+bmV4dDsKKysgICAgICBtcC0+cHJldiA9IG1pbl9tcDsKKysgICAgICBtaW5fbXAtPm5leHQgPSBtcDsKKysKKysgICAgICBpZiAobXAtPm5leHQgIT0gTlVMTCkKKysJbXAtPm5leHQtPnByZXYgPSBtcDsKKysgICAgICBlbHNlCisrCW1pbmlwb29sX3ZlY3Rvcl90YWlsID0gbXA7CisrICAgIH0KKysKKysgIC8qIFNhdmUgdGhlIG5ldyBlbnRyeS4gICovCisrICBtaW5fbXAgPSBtcDsKKysKKysgIGlmIChtcC0+cHJldikKKysgICAgbXAgPSBtcC0+cHJldjsKKysgIGVsc2UKKysgICAgbXAtPm9mZnNldCA9IDA7CisrCisrICAvKiBTY2FuIG92ZXIgdGhlIGZvbGxvd2luZyBlbnRyaWVzIGFuZCBhZGp1c3QgdGhlaXIgb2Zmc2V0cy4gICovCisrICB3aGlsZSAobXAtPm5leHQgIT0gTlVMTCkKKysgICAgeworKyAgICAgIGlmIChtcC0+bmV4dC0+bWluX2FkZHJlc3MgPCBtcC0+bWluX2FkZHJlc3MgKyBtcC0+Zml4X3NpemUpCisrCW1wLT5uZXh0LT5taW5fYWRkcmVzcyA9IG1wLT5taW5fYWRkcmVzcyArIG1wLT5maXhfc2l6ZTsKKysKKysgICAgICBpZiAobXAtPnJlZmNvdW50KQorKwltcC0+bmV4dC0+b2Zmc2V0ID0gbXAtPm9mZnNldCArIG1wLT5maXhfc2l6ZTsKKysgICAgICBlbHNlCisrCW1wLT5uZXh0LT5vZmZzZXQgPSBtcC0+b2Zmc2V0OworKworKyAgICAgIG1wID0gbXAtPm5leHQ7CisrICAgIH0KKysKKysgIHJldHVybiBtaW5fbXA7CisrfQorKworK3N0YXRpYyB2b2lkCisrYXNzaWduX21pbmlwb29sX29mZnNldHMgKE1maXggKiBiYXJyaWVyKQorK3sKKysgIEhPU1RfV0lERV9JTlQgb2Zmc2V0ID0gMDsKKysgIE1ub2RlICptcDsKKysKKysgIG1pbmlwb29sX2JhcnJpZXIgPSBiYXJyaWVyOworKworKyAgZm9yIChtcCA9IG1pbmlwb29sX3ZlY3Rvcl9oZWFkOyBtcCAhPSBOVUxMOyBtcCA9IG1wLT5uZXh0KQorKyAgICB7CisrICAgICAgbXAtPm9mZnNldCA9IG9mZnNldDsKKysKKysgICAgICBpZiAobXAtPnJlZmNvdW50ID4gMCkKKysJb2Zmc2V0ICs9IG1wLT5maXhfc2l6ZTsKKysgICAgfQorK30KKysKKysvKiBQcmludCBhIHN5bWJvbGljIGZvcm0gb2YgWCB0byB0aGUgZGVidWcgZmlsZSwgRi4gICovCisrc3RhdGljIHZvaWQKKythdnIzMl9wcmludF92YWx1ZSAoRklMRSAqIGYsIHJ0eCB4KQorK3sKKysgIHN3aXRjaCAoR0VUX0NPREUgKHgpKQorKyAgICB7CisrICAgIGNhc2UgQ09OU1RfSU5UOgorKyAgICAgIGZwcmludGYgKGYsICIweCV4IiwgKGludCkgSU5UVkFMICh4KSk7CisrICAgICAgcmV0dXJuOworKworKyAgICBjYXNlIENPTlNUX0RPVUJMRToKKysgICAgICBmcHJpbnRmIChmLCAiPDB4JWx4LDB4JWx4PiIsIChsb25nKSBYV0lOVCAoeCwgMiksIChsb25nKSBYV0lOVCAoeCwgMykpOworKyAgICAgIHJldHVybjsKKysKKysgICAgY2FzZSBDT05TVF9WRUNUT1I6CisrICAgICAgeworKwlpbnQgaTsKKysKKysJZnByaW50ZiAoZiwgIjwiKTsKKysJZm9yIChpID0gMDsgaSA8IENPTlNUX1ZFQ1RPUl9OVU5JVFMgKHgpOyBpKyspCisrCSAgeworKwkgICAgZnByaW50ZiAoZiwgIjB4JXgiLCAoaW50KSBJTlRWQUwgKENPTlNUX1ZFQ1RPUl9FTFQgKHgsIGkpKSk7CisrCSAgICBpZiAoaSA8IChDT05TVF9WRUNUT1JfTlVOSVRTICh4KSAtIDEpKQorKwkgICAgICBmcHV0YyAoJywnLCBmKTsKKysJICB9CisrCWZwcmludGYgKGYsICI+Iik7CisrICAgICAgfQorKyAgICAgIHJldHVybjsKKysKKysgICAgY2FzZSBDT05TVF9TVFJJTkc6CisrICAgICAgZnByaW50ZiAoZiwgIlwiJXNcIiIsIFhTVFIgKHgsIDApKTsKKysgICAgICByZXR1cm47CisrCisrICAgIGNhc2UgU1lNQk9MX1JFRjoKKysgICAgICBmcHJpbnRmIChmLCAiYCVzJyIsIFhTVFIgKHgsIDApKTsKKysgICAgICByZXR1cm47CisrCisrICAgIGNhc2UgTEFCRUxfUkVGOgorKyAgICAgIGZwcmludGYgKGYsICJMJWQiLCBJTlNOX1VJRCAoWEVYUCAoeCwgMCkpKTsKKysgICAgICByZXR1cm47CisrCisrICAgIGNhc2UgQ09OU1Q6CisrICAgICAgYXZyMzJfcHJpbnRfdmFsdWUgKGYsIFhFWFAgKHgsIDApKTsKKysgICAgICByZXR1cm47CisrCisrICAgIGNhc2UgUExVUzoKKysgICAgICBhdnIzMl9wcmludF92YWx1ZSAoZiwgWEVYUCAoeCwgMCkpOworKyAgICAgIGZwcmludGYgKGYsICIrIik7CisrICAgICAgYXZyMzJfcHJpbnRfdmFsdWUgKGYsIFhFWFAgKHgsIDEpKTsKKysgICAgICByZXR1cm47CisrCisrICAgIGNhc2UgUEM6CisrICAgICAgZnByaW50ZiAoZiwgInBjIik7CisrICAgICAgcmV0dXJuOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIGZwcmludGYgKGYsICI/Pz8/Iik7CisrICAgICAgcmV0dXJuOworKyAgICB9CisrfQorKworK2ludAorK2lzX21pbmlwb29sX2xhYmVsIChydHggbGFiZWwpCisreworKyAgbWluaXBvb2xfbGFiZWxzICpjdXJfbXBfbGFiZWwgPSBjZnVuLT5tYWNoaW5lLT5taW5pcG9vbF9sYWJlbF9oZWFkOworKworKyAgaWYgKEdFVF9DT0RFIChsYWJlbCkgIT0gQ09ERV9MQUJFTCkKKysgICAgcmV0dXJuIEZBTFNFOworKworKyAgd2hpbGUgKGN1cl9tcF9sYWJlbCkKKysgICAgeworKyAgICAgIGlmIChDT0RFX0xBQkVMX05VTUJFUiAobGFiZWwpCisrCSAgPT0gQ09ERV9MQUJFTF9OVU1CRVIgKGN1cl9tcF9sYWJlbC0+bGFiZWwpKQorKwlyZXR1cm4gVFJVRTsKKysgICAgICBjdXJfbXBfbGFiZWwgPSBjdXJfbXBfbGFiZWwtPm5leHQ7CisrICAgIH0KKysgIHJldHVybiBGQUxTRTsKKyt9CisrCisrc3RhdGljIHZvaWQKKytuZXdfbWluaXBvb2xfbGFiZWwgKHJ0eCBsYWJlbCkKKyt7CisrICBpZiAoIWNmdW4tPm1hY2hpbmUtPm1pbmlwb29sX2xhYmVsX2hlYWQpCisrICAgIHsKKysgICAgICBjZnVuLT5tYWNoaW5lLT5taW5pcG9vbF9sYWJlbF9oZWFkID0KKysJZ2djX2FsbG9jIChzaXplb2YgKG1pbmlwb29sX2xhYmVscykpOworKyAgICAgIGNmdW4tPm1hY2hpbmUtPm1pbmlwb29sX2xhYmVsX3RhaWwgPSBjZnVuLT5tYWNoaW5lLT5taW5pcG9vbF9sYWJlbF9oZWFkOworKyAgICAgIGNmdW4tPm1hY2hpbmUtPm1pbmlwb29sX2xhYmVsX2hlYWQtPmxhYmVsID0gbGFiZWw7CisrICAgICAgY2Z1bi0+bWFjaGluZS0+bWluaXBvb2xfbGFiZWxfaGVhZC0+bmV4dCA9IDA7CisrICAgICAgY2Z1bi0+bWFjaGluZS0+bWluaXBvb2xfbGFiZWxfaGVhZC0+cHJldiA9IDA7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGNmdW4tPm1hY2hpbmUtPm1pbmlwb29sX2xhYmVsX3RhaWwtPm5leHQgPQorKwlnZ2NfYWxsb2MgKHNpemVvZiAobWluaXBvb2xfbGFiZWxzKSk7CisrICAgICAgY2Z1bi0+bWFjaGluZS0+bWluaXBvb2xfbGFiZWxfdGFpbC0+bmV4dC0+bGFiZWwgPSBsYWJlbDsKKysgICAgICBjZnVuLT5tYWNoaW5lLT5taW5pcG9vbF9sYWJlbF90YWlsLT5uZXh0LT5uZXh0ID0gMDsKKysgICAgICBjZnVuLT5tYWNoaW5lLT5taW5pcG9vbF9sYWJlbF90YWlsLT5uZXh0LT5wcmV2ID0KKysJY2Z1bi0+bWFjaGluZS0+bWluaXBvb2xfbGFiZWxfdGFpbDsKKysgICAgICBjZnVuLT5tYWNoaW5lLT5taW5pcG9vbF9sYWJlbF90YWlsID0KKysJY2Z1bi0+bWFjaGluZS0+bWluaXBvb2xfbGFiZWxfdGFpbC0+bmV4dDsKKysgICAgfQorK30KKysKKysvKiBPdXRwdXQgdGhlIGxpdGVyYWwgdGFibGUgKi8KKytzdGF0aWMgdm9pZAorK2R1bXBfbWluaXBvb2wgKHJ0eCBzY2FuKQorK3sKKysgIE1ub2RlICptcDsKKysgIE1ub2RlICpubXA7CisrCisrICBpZiAoZHVtcF9maWxlKQorKyAgICBmcHJpbnRmIChkdW1wX2ZpbGUsCisrCSAgICAgIjs7IEVtaXR0aW5nIG1pbmlwb29sIGFmdGVyIGluc24gJXU7IGFkZHJlc3MgJWxkOyBhbGlnbiAlZCAoYnl0ZXMpXG4iLAorKwkgICAgIElOU05fVUlEIChzY2FuKSwgKHVuc2lnbmVkIGxvbmcpIG1pbmlwb29sX2JhcnJpZXItPmFkZHJlc3MsIDQpOworKworKyAgc2NhbiA9IGVtaXRfaW5zbl9hZnRlciAoZ2VuX2NvbnN0dGFibGVfc3RhcnQgKCksIHNjYW4pOworKyAgc2NhbiA9IGVtaXRfaW5zbl9hZnRlciAoZ2VuX2FsaWduXzQgKCksIHNjYW4pOworKyAgc2NhbiA9IGVtaXRfbGFiZWxfYWZ0ZXIgKG1pbmlwb29sX3ZlY3Rvcl9sYWJlbCwgc2Nhbik7CisrICBuZXdfbWluaXBvb2xfbGFiZWwgKG1pbmlwb29sX3ZlY3Rvcl9sYWJlbCk7CisrCisrICBmb3IgKG1wID0gbWluaXBvb2xfdmVjdG9yX2hlYWQ7IG1wICE9IE5VTEw7IG1wID0gbm1wKQorKyAgICB7CisrICAgICAgaWYgKG1wLT5yZWZjb3VudCA+IDApCisrCXsKKysJICBpZiAoZHVtcF9maWxlKQorKwkgICAgeworKwkgICAgICBmcHJpbnRmIChkdW1wX2ZpbGUsCisrCQkgICAgICAgIjs7ICBPZmZzZXQgJXUsIG1pbiAlbGQsIG1heCAlbGQgIiwKKysJCSAgICAgICAodW5zaWduZWQpIG1wLT5vZmZzZXQsICh1bnNpZ25lZCBsb25nKSBtcC0+bWluX2FkZHJlc3MsCisrCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpIG1wLT5tYXhfYWRkcmVzcyk7CisrCSAgICAgIGF2cjMyX3ByaW50X3ZhbHVlIChkdW1wX2ZpbGUsIG1wLT52YWx1ZSk7CisrCSAgICAgIGZwdXRjICgnXG4nLCBkdW1wX2ZpbGUpOworKwkgICAgfQorKworKwkgIHN3aXRjaCAobXAtPmZpeF9zaXplKQorKwkgICAgeworKyNpZmRlZiBIQVZFX2NvbnN0dGFibGVfNAorKwkgICAgY2FzZSA0OgorKwkgICAgICBzY2FuID0gZW1pdF9pbnNuX2FmdGVyIChnZW5fY29uc3R0YWJsZV80IChtcC0+dmFsdWUpLCBzY2FuKTsKKysJICAgICAgYnJlYWs7CisrCisrI2VuZGlmCisrI2lmZGVmIEhBVkVfY29uc3R0YWJsZV84CisrCSAgICBjYXNlIDg6CisrCSAgICAgIHNjYW4gPSBlbWl0X2luc25fYWZ0ZXIgKGdlbl9jb25zdHRhYmxlXzggKG1wLT52YWx1ZSksIHNjYW4pOworKwkgICAgICBicmVhazsKKysKKysjZW5kaWYKKysjaWZkZWYgSEFWRV9jb25zdHRhYmxlXzE2CisrICAgICAgICAgICAgY2FzZSAxNjoKKysgICAgICAgICAgICAgIHNjYW4gPSBlbWl0X2luc25fYWZ0ZXIgKGdlbl9jb25zdHRhYmxlXzE2IChtcC0+dmFsdWUpLCBzY2FuKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKyNlbmRpZgorKyAgICAgICAgICAgIGNhc2UgMDoKKysgICAgICAgICAgICAgIC8qIFRoaXMgY2FuIGhhcHBlbiBmb3IgZm9yY2UtbWluaXBvb2wgZW50cmllcyB3aGljaCBqdXN0IGFyZQorKwkgICAgICAgICB0aGVyZSB0byBmb3JjZSB0aGUgbWluaXBvb2wgdG8gYmUgZ2VuZXJhdGUuICovCisrCSAgICAgIGJyZWFrOworKwkgICAgZGVmYXVsdDoKKysJICAgICAgYWJvcnQgKCk7CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKwl9CisrCisrICAgICAgbm1wID0gbXAtPm5leHQ7CisrICAgICAgZnJlZSAobXApOworKyAgICB9CisrCisrICBtaW5pcG9vbF92ZWN0b3JfaGVhZCA9IG1pbmlwb29sX3ZlY3Rvcl90YWlsID0gTlVMTDsKKysgIHNjYW4gPSBlbWl0X2luc25fYWZ0ZXIgKGdlbl9jb25zdHRhYmxlX2VuZCAoKSwgc2Nhbik7CisrICBzY2FuID0gZW1pdF9iYXJyaWVyX2FmdGVyIChzY2FuKTsKKyt9CisrCisrLyogUmV0dXJuIHRoZSBjb3N0IG9mIGZvcmNpYmx5IGluc2VydGluZyBhIGJhcnJpZXIgYWZ0ZXIgSU5TTi4gICovCisrc3RhdGljIGludAorK2F2cjMyX2JhcnJpZXJfY29zdCAocnR4IGluc24pCisreworKyAgLyogQmFzaW5nIHRoZSBsb2NhdGlvbiBvZiB0aGUgcG9vbCBvbiB0aGUgbG9vcCBkZXB0aCBpcyBwcmVmZXJhYmxlLCBidXQgYXQKKysgICAgIHRoZSBtb21lbnQsIHRoZSBiYXNpYyBibG9jayBpbmZvcm1hdGlvbiBzZWVtcyB0byBiZSBjb3JydXB0IGJ5IHRoaXMKKysgICAgIHN0YWdlIG9mIHRoZSBjb21waWxhdGlvbi4gICovCisrICBpbnQgYmFzZV9jb3N0ID0gNTA7CisrICBydHggbmV4dCA9IG5leHRfbm9ubm90ZV9pbnNuIChpbnNuKTsKKysKKysgIGlmIChuZXh0ICE9IE5VTEwgJiYgR0VUX0NPREUgKG5leHQpID09IENPREVfTEFCRUwpCisrICAgIGJhc2VfY29zdCAtPSAyMDsKKysKKysgIHN3aXRjaCAoR0VUX0NPREUgKGluc24pKQorKyAgICB7CisrICAgIGNhc2UgQ09ERV9MQUJFTDoKKysgICAgICAvKiBJdCB3aWxsIGFsd2F5cyBiZSBiZXR0ZXIgdG8gcGxhY2UgdGhlIHRhYmxlIGJlZm9yZSB0aGUgbGFiZWwsIHJhdGhlcgorKyAgICAgICAgIHRoYW4gYWZ0ZXIgaXQuICAqLworKyAgICAgIHJldHVybiA1MDsKKysKKysgICAgY2FzZSBJTlNOOgorKyAgICBjYXNlIENBTExfSU5TTjoKKysgICAgICByZXR1cm4gYmFzZV9jb3N0OworKworKyAgICBjYXNlIEpVTVBfSU5TTjoKKysgICAgICByZXR1cm4gYmFzZV9jb3N0IC0gMTA7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIGJhc2VfY29zdCArIDEwOworKyAgICB9CisrfQorKworKy8qIEZpbmQgdGhlIGJlc3QgcGxhY2UgaW4gdGhlIGluc24gc3RyZWFtIGluIHRoZSByYW5nZQorKyAgIChGSVgtPmFkZHJlc3MsTUFYX0FERFJFU1MpIHRvIGZvcmNpYmx5IGluc2VydCBhIG1pbmlwb29sIGJhcnJpZXIuCisrICAgQ3JlYXRlIHRoZSBiYXJyaWVyIGJ5IGluc2VydGluZyBhIGp1bXAgYW5kIGFkZCBhIG5ldyBmaXggZW50cnkgZm9yCisrICAgaXQuICAqLworK3N0YXRpYyBNZml4ICoKKytjcmVhdGVfZml4X2JhcnJpZXIgKE1maXggKiBmaXgsIEhPU1RfV0lERV9JTlQgbWF4X2FkZHJlc3MpCisreworKyAgSE9TVF9XSURFX0lOVCBjb3VudCA9IDA7CisrICBydHggYmFycmllcjsKKysgIHJ0eCBmcm9tID0gZml4LT5pbnNuOworKyAgcnR4IHNlbGVjdGVkID0gZnJvbTsKKysgIGludCBzZWxlY3RlZF9jb3N0OworKyAgSE9TVF9XSURFX0lOVCBzZWxlY3RlZF9hZGRyZXNzOworKyAgTWZpeCAqbmV3X2ZpeDsKKysgIEhPU1RfV0lERV9JTlQgbWF4X2NvdW50ID0gbWF4X2FkZHJlc3MgLSBmaXgtPmFkZHJlc3M7CisrICBydHggbGFiZWwgPSBnZW5fbGFiZWxfcnR4ICgpOworKworKyAgc2VsZWN0ZWRfY29zdCA9IGF2cjMyX2JhcnJpZXJfY29zdCAoZnJvbSk7CisrICBzZWxlY3RlZF9hZGRyZXNzID0gZml4LT5hZGRyZXNzOworKworKyAgd2hpbGUgKGZyb20gJiYgY291bnQgPCBtYXhfY291bnQpCisrICAgIHsKKysgICAgICBydHggdG1wOworKyAgICAgIGludCBuZXdfY29zdDsKKysKKysgICAgICAvKiBUaGlzIGNvZGUgc2hvdWxkbid0IGhhdmUgYmVlbiBjYWxsZWQgaWYgdGhlcmUgd2FzIGEgbmF0dXJhbCBiYXJyaWVyCisrICAgICAgICAgd2l0aGluIHJhbmdlLiAgKi8KKysgICAgICBpZiAoR0VUX0NPREUgKGZyb20pID09IEJBUlJJRVIpCisrCWFib3J0ICgpOworKworKyAgICAgIC8qIENvdW50IHRoZSBsZW5ndGggb2YgdGhpcyBpbnNuLiAgKi8KKysgICAgICBjb3VudCArPSBnZXRfYXR0cl9sZW5ndGggKGZyb20pOworKworKyAgICAgIC8qIElmIHRoZXJlIGlzIGEganVtcCB0YWJsZSwgYWRkIGl0cyBsZW5ndGguICAqLworKyAgICAgIHRtcCA9IGlzX2p1bXBfdGFibGUgKGZyb20pOworKyAgICAgIGlmICh0bXAgIT0gTlVMTCkKKysJeworKwkgIGNvdW50ICs9IGdldF9qdW1wX3RhYmxlX3NpemUgKHRtcCk7CisrCisrCSAgLyogSnVtcCB0YWJsZXMgYXJlbid0IGluIGEgYmFzaWMgYmxvY2ssIHNvIGJhc2UgdGhlIGNvc3Qgb24gdGhlCisrCSAgICAgZGlzcGF0Y2ggaW5zbi4gIElmIHdlIHNlbGVjdCB0aGlzIGxvY2F0aW9uLCB3ZSB3aWxsIHN0aWxsIHB1dAorKwkgICAgIHRoZSBwb29sIGFmdGVyIHRoZSB0YWJsZS4gICovCisrCSAgbmV3X2Nvc3QgPSBhdnIzMl9iYXJyaWVyX2Nvc3QgKGZyb20pOworKworKwkgIGlmIChjb3VudCA8IG1heF9jb3VudCAmJiBuZXdfY29zdCA8PSBzZWxlY3RlZF9jb3N0KQorKwkgICAgeworKwkgICAgICBzZWxlY3RlZCA9IHRtcDsKKysJICAgICAgc2VsZWN0ZWRfY29zdCA9IG5ld19jb3N0OworKwkgICAgICBzZWxlY3RlZF9hZGRyZXNzID0gZml4LT5hZGRyZXNzICsgY291bnQ7CisrCSAgICB9CisrCisrCSAgLyogQ29udGludWUgYWZ0ZXIgdGhlIGRpc3BhdGNoIHRhYmxlLiAgKi8KKysJICBmcm9tID0gTkVYVF9JTlNOICh0bXApOworKwkgIGNvbnRpbnVlOworKwl9CisrCisrICAgICAgbmV3X2Nvc3QgPSBhdnIzMl9iYXJyaWVyX2Nvc3QgKGZyb20pOworKworKyAgICAgIGlmIChjb3VudCA8IG1heF9jb3VudCAmJiBuZXdfY29zdCA8PSBzZWxlY3RlZF9jb3N0KQorKwl7CisrCSAgc2VsZWN0ZWQgPSBmcm9tOworKwkgIHNlbGVjdGVkX2Nvc3QgPSBuZXdfY29zdDsKKysJICBzZWxlY3RlZF9hZGRyZXNzID0gZml4LT5hZGRyZXNzICsgY291bnQ7CisrCX0KKysKKysgICAgICBmcm9tID0gTkVYVF9JTlNOIChmcm9tKTsKKysgICAgfQorKworKyAgLyogQ3JlYXRlIGEgbmV3IEpVTVBfSU5TTiB0aGF0IGJyYW5jaGVzIGFyb3VuZCBhIGJhcnJpZXIuICAqLworKyAgZnJvbSA9IGVtaXRfanVtcF9pbnNuX2FmdGVyIChnZW5fanVtcCAobGFiZWwpLCBzZWxlY3RlZCk7CisrICBKVU1QX0xBQkVMIChmcm9tKSA9IGxhYmVsOworKyAgYmFycmllciA9IGVtaXRfYmFycmllcl9hZnRlciAoZnJvbSk7CisrICBlbWl0X2xhYmVsX2FmdGVyIChsYWJlbCwgYmFycmllcik7CisrCisrICAvKiBDcmVhdGUgYSBtaW5pcG9vbCBiYXJyaWVyIGVudHJ5IGZvciB0aGUgbmV3IGJhcnJpZXIuICAqLworKyAgbmV3X2ZpeCA9IChNZml4ICopIG9ic3RhY2tfYWxsb2MgKCZtaW5pcG9vbF9vYnN0YWNrLCBzaXplb2YgKCpuZXdfZml4KSk7CisrICBuZXdfZml4LT5pbnNuID0gYmFycmllcjsKKysgIG5ld19maXgtPmFkZHJlc3MgPSBzZWxlY3RlZF9hZGRyZXNzOworKyAgbmV3X2ZpeC0+bmV4dCA9IGZpeC0+bmV4dDsKKysgIGZpeC0+bmV4dCA9IG5ld19maXg7CisrCisrICByZXR1cm4gbmV3X2ZpeDsKKyt9CisrCisrLyogUmVjb3JkIHRoYXQgdGhlcmUgaXMgYSBuYXR1cmFsIGJhcnJpZXIgaW4gdGhlIGluc24gc3RyZWFtIGF0CisrICAgQUREUkVTUy4gICovCisrc3RhdGljIHZvaWQKKytwdXNoX21pbmlwb29sX2JhcnJpZXIgKHJ0eCBpbnNuLCBIT1NUX1dJREVfSU5UIGFkZHJlc3MpCisreworKyAgTWZpeCAqZml4ID0gKE1maXggKikgb2JzdGFja19hbGxvYyAoJm1pbmlwb29sX29ic3RhY2ssIHNpemVvZiAoKmZpeCkpOworKworKyAgZml4LT5pbnNuID0gaW5zbjsKKysgIGZpeC0+YWRkcmVzcyA9IGFkZHJlc3M7CisrCisrICBmaXgtPm5leHQgPSBOVUxMOworKyAgaWYgKG1pbmlwb29sX2ZpeF9oZWFkICE9IE5VTEwpCisrICAgIG1pbmlwb29sX2ZpeF90YWlsLT5uZXh0ID0gZml4OworKyAgZWxzZQorKyAgICBtaW5pcG9vbF9maXhfaGVhZCA9IGZpeDsKKysKKysgIG1pbmlwb29sX2ZpeF90YWlsID0gZml4OworK30KKysKKysvKiBSZWNvcmQgSU5TTiwgd2hpY2ggd2lsbCBuZWVkIGZpeGluZyB1cCB0byBsb2FkIGEgdmFsdWUgZnJvbSB0aGUKKysgICBtaW5pcG9vbC4gIEFERFJFU1MgaXMgdGhlIG9mZnNldCBvZiB0aGUgaW5zbiBzaW5jZSB0aGUgc3RhcnQgb2YgdGhlCisrICAgZnVuY3Rpb247IExPQyBpcyBhIHBvaW50ZXIgdG8gdGhlIHBhcnQgb2YgdGhlIGluc24gd2hpY2ggcmVxdWlyZXMKKysgICBmaXhpbmc7IFZBTFVFIGlzIHRoZSBjb25zdGFudCB0aGF0IG11c3QgYmUgbG9hZGVkLCB3aGljaCBpcyBvZiB0eXBlCisrICAgTU9ERS4gICovCisrc3RhdGljIHZvaWQKKytwdXNoX21pbmlwb29sX2ZpeCAocnR4IGluc24sIEhPU1RfV0lERV9JTlQgYWRkcmVzcywgcnR4ICogbG9jLAorKwkJICAgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgcnR4IHZhbHVlKQorK3sKKysgIE1maXggKmZpeCA9IChNZml4ICopIG9ic3RhY2tfYWxsb2MgKCZtaW5pcG9vbF9vYnN0YWNrLCBzaXplb2YgKCpmaXgpKTsKKysgIHJ0eCBib2R5ID0gUEFUVEVSTiAoaW5zbik7CisrCisrICBmaXgtPmluc24gPSBpbnNuOworKyAgZml4LT5hZGRyZXNzID0gYWRkcmVzczsKKysgIGZpeC0+bG9jID0gbG9jOworKyAgZml4LT5tb2RlID0gbW9kZTsKKysgIGZpeC0+Zml4X3NpemUgPSBNSU5JUE9PTF9GSVhfU0laRSAobW9kZSwgdmFsdWUpOworKyAgZml4LT52YWx1ZSA9IHZhbHVlOworKworKyAgaWYgKEdFVF9DT0RFIChib2R5KSA9PSBQQVJBTExFTCkKKysgICAgeworKyAgICAgIC8qIE1jYWxsIDogS3MxNiA8PCAyICovCisrICAgICAgZml4LT5mb3J3YXJkcyA9ICgoMSA8PCAxNSkgLSAxKSA8PCAyOworKyAgICAgIGZpeC0+YmFja3dhcmRzID0gKDEgPDwgMTUpIDw8IDI7CisrICAgIH0KKysgIGVsc2UgaWYgKEdFVF9DT0RFIChib2R5KSA9PSBTRVQKKysgICAgICAgICAgICYmIEdFVF9NT0RFX1NJWkUgKEdFVF9NT0RFIChTRVRfREVTVCAoYm9keSkpKSA9PSA0KQorKyAgICB7CisrICAgICAgICAvKiBXb3JkIExvYWQgKi8KKysgICAgICBpZiAoVEFSR0VUX0hBUkRfRkxPQVQKKysgICAgICAgICAgJiYgR0VUX01PREVfQ0xBU1MgKEdFVF9NT0RFIChTRVRfREVTVCAoYm9keSkpKSA9PSBNT0RFX0ZMT0FUKQorKyAgICAgICAgeworKyAgICAgICAgICAvKiBMZGMwLncgOiBLdTEyIDw8IDIgKi8KKysgICAgICAgICAgZml4LT5mb3J3YXJkcyA9ICgoMSA8PCAxMikgLSAxKSA8PCAyOworKyAgICAgICAgICBmaXgtPmJhY2t3YXJkcyA9IDA7CisrICAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICBpZiAob3B0aW1pemVfc2l6ZSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAvKiBMZGRwYyA6IEt1NyA8PCAyICovCisrICAgICAgICAgICAgICBmaXgtPmZvcndhcmRzID0gKCgxIDw8IDcpIC0gMSkgPDwgMjsKKysgICAgICAgICAgICAgIGZpeC0+YmFja3dhcmRzID0gMDsKKysgICAgICAgICAgICB9CisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAvKiBMZC53IDogS3MxNiAqLworKyAgICAgICAgICAgICAgZml4LT5mb3J3YXJkcyA9ICgoMSA8PCAxNSkgLSA0KTsKKysgICAgICAgICAgICAgIGZpeC0+YmFja3dhcmRzID0gKDEgPDwgMTUpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAoR0VUX0NPREUgKGJvZHkpID09IFNFVAorKyAgICAgICAgICAgJiYgR0VUX01PREVfU0laRSAoR0VUX01PREUgKFNFVF9ERVNUIChib2R5KSkpID09IDgpCisrICAgIHsKKysgICAgICAvKiBEb3VibGUgd29yZCBsb2FkICovCisrICAgICAgaWYgKFRBUkdFVF9IQVJEX0ZMT0FUCisrICAgICAgICAgICYmIEdFVF9NT0RFX0NMQVNTIChHRVRfTU9ERSAoU0VUX0RFU1QgKGJvZHkpKSkgPT0gTU9ERV9GTE9BVCkKKysgICAgICAgIHsKKysgICAgICAgICAgLyogTGRjMC5kIDogS3UxMiA8PCAyICovCisrICAgICAgICAgIGZpeC0+Zm9yd2FyZHMgPSAoKDEgPDwgMTIpIC0gMSkgPDwgMjsKKysgICAgICAgICAgZml4LT5iYWNrd2FyZHMgPSAwOworKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgLyogTGQuZCA6IEtzMTYgKi8KKysgICAgICAgICAgZml4LT5mb3J3YXJkcyA9ICgoMSA8PCAxNSkgLSA0KTsKKysgICAgICAgICAgZml4LT5iYWNrd2FyZHMgPSAoMSA8PCAxNSk7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKEdFVF9DT0RFIChib2R5KSA9PSBVTlNQRUNfVk9MQVRJTEUKKysgICAgICAgICAgICYmIFhJTlQgKGJvZHksIDEpID09IFZVTlNQRUNfTVZSQykKKysgICAgeworKyAgICAgIC8qIENvcHJvY2Vzc29yIGxvYWQgKi8KKysgICAgICAvKiBMZGMgOiBLdTggPDwgMiAqLworKyAgICAgIGZpeC0+Zm9yd2FyZHMgPSAoKDEgPDwgOCkgLSAxKSA8PCAyOworKyAgICAgIGZpeC0+YmFja3dhcmRzID0gMDsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgLyogQXNzdW1lIHdvcnN0IGNhc2Ugd2hpY2ggaXMgbGRkcGMgaW5zbi4gKi8KKysgICAgICBmaXgtPmZvcndhcmRzID0gKCgxIDw8IDcpIC0gMSkgPDwgMjsKKysgICAgICBmaXgtPmJhY2t3YXJkcyA9IDA7CisrICAgIH0KKysKKysgIGZpeC0+bWluaXBvb2wgPSBOVUxMOworKworKyAgLyogSWYgYW4gaW5zbiBkb2Vzbid0IGhhdmUgYSByYW5nZSBkZWZpbmVkIGZvciBpdCwgdGhlbiBpdCBpc24ndCBleHBlY3RpbmcKKysgICAgIHRvIGJlIHJld29ya2VkIGJ5IHRoaXMgY29kZS4gIEJldHRlciB0byBhYm9ydCBub3cgdGhhbiB0byBnZW5lcmF0ZSBkdWZmCisrICAgICBhc3NlbWJseSBjb2RlLiAgKi8KKysgIGlmIChmaXgtPmZvcndhcmRzID09IDAgJiYgZml4LT5iYWNrd2FyZHMgPT0gMCkKKysgICAgYWJvcnQgKCk7CisrCisrICBpZiAoZHVtcF9maWxlKQorKyAgICB7CisrICAgICAgZnByaW50ZiAoZHVtcF9maWxlLAorKwkgICAgICAgIjs7ICVzbW9kZSBmaXh1cCBmb3IgaSVkOyBhZGRyICVsdSwgcmFuZ2UgKCVsZCwlbGQpOiAiLAorKwkgICAgICAgR0VUX01PREVfTkFNRSAobW9kZSksCisrCSAgICAgICBJTlNOX1VJRCAoaW5zbiksICh1bnNpZ25lZCBsb25nKSBhZGRyZXNzLAorKwkgICAgICAgLTEgKiAobG9uZykgZml4LT5iYWNrd2FyZHMsIChsb25nKSBmaXgtPmZvcndhcmRzKTsKKysgICAgICBhdnIzMl9wcmludF92YWx1ZSAoZHVtcF9maWxlLCBmaXgtPnZhbHVlKTsKKysgICAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICJcbiIpOworKyAgICB9CisrCisrICAvKiBBZGQgaXQgdG8gdGhlIGNoYWluIG9mIGZpeGVzLiAgKi8KKysgIGZpeC0+bmV4dCA9IE5VTEw7CisrCisrICBpZiAobWluaXBvb2xfZml4X2hlYWQgIT0gTlVMTCkKKysgICAgbWluaXBvb2xfZml4X3RhaWwtPm5leHQgPSBmaXg7CisrICBlbHNlCisrICAgIG1pbmlwb29sX2ZpeF9oZWFkID0gZml4OworKworKyAgbWluaXBvb2xfZml4X3RhaWwgPSBmaXg7CisrfQorKworKy8qIFNjYW4gSU5TTiBhbmQgbm90ZSBhbnkgb2YgaXRzIG9wZXJhbmRzIHRoYXQgbmVlZCBmaXhpbmcuCisrICAgSWYgRE9fUFVTSEVTIGlzIGZhbHNlIHdlIGRvIG5vdCBhY3R1YWxseSBwdXNoIGFueSBvZiB0aGUgZml4dXBzCisrICAgbmVlZGVkLiAgVGhlIGZ1bmN0aW9uIHJldHVybnMgVFJVRSBpcyBhbnkgZml4dXBzIHdlcmUgbmVlZGVkL3B1c2hlZC4KKysgICBUaGlzIGlzIHVzZWQgYnkgYXZyMzJfbWVtb3J5X2xvYWRfcCgpIHdoaWNoIG5lZWRzIHRvIGtub3cgYWJvdXQgbG9hZHMKKysgICBvZiBjb25zdGFudHMgdGhhdCB3aWxsIGJlIGNvbnZlcnRlZCBpbnRvIG1pbmlwb29sIGxvYWRzLiAgKi8KKytzdGF0aWMgYm9vbAorK25vdGVfaW52YWxpZF9jb25zdGFudHMgKHJ0eCBpbnNuLCBIT1NUX1dJREVfSU5UIGFkZHJlc3MsIGludCBkb19wdXNoZXMpCisreworKyAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKysgIGludCBvcG5vOworKworKyAgZXh0cmFjdF9pbnNuIChpbnNuKTsKKysKKysgIGlmICghY29uc3RyYWluX29wZXJhbmRzICgxKSkKKysgICAgZmF0YWxfaW5zbl9ub3RfZm91bmQgKGluc24pOworKworKyAgaWYgKHJlY29nX2RhdGEubl9hbHRlcm5hdGl2ZXMgPT0gMCkKKysgICAgcmV0dXJuIGZhbHNlOworKworKyAgLyogRmlsbCBpbiByZWNvZ19vcF9hbHQgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29uc3RyYWludHMgb2YgdGhpcworKyAgICAgaW5zbi4gICovCisrICBwcmVwcm9jZXNzX2NvbnN0cmFpbnRzICgpOworKworKyAgZm9yIChvcG5vID0gMDsgb3BubyA8IHJlY29nX2RhdGEubl9vcGVyYW5kczsgb3BubysrKQorKyAgICB7CisrICAgICAgcnR4IG9wOworKworKyAgICAgIC8qIFRoaW5ncyB3ZSBuZWVkIHRvIGZpeCBjYW4gb25seSBvY2N1ciBpbiBpbnB1dHMuICAqLworKyAgICAgIGlmIChyZWNvZ19kYXRhLm9wZXJhbmRfdHlwZVtvcG5vXSAhPSBPUF9JTikKKysJY29udGludWU7CisrCisrICAgICAgb3AgPSByZWNvZ19kYXRhLm9wZXJhbmRbb3Bub107CisrCisrICAgICAgaWYgKGF2cjMyX2NvbnN0X3Bvb2xfcmVmX29wZXJhbmQgKG9wLCBHRVRfTU9ERSAob3ApKSkKKysJeworKwkgIGlmIChkb19wdXNoZXMpCisrCSAgICB7CisrCSAgICAgIHJ0eCBjb3AgPSBhdm9pZF9jb25zdGFudF9wb29sX3JlZmVyZW5jZSAob3ApOworKworKwkgICAgICAvKiBDYXN0aW5nIHRoZSBhZGRyZXNzIG9mIHNvbWV0aGluZyB0byBhIG1vZGUgbmFycm93ZXIgdGhhbiBhCisrCSAgICAgICAgIHdvcmQgY2FuIGNhdXNlIGF2b2lkX2NvbnN0YW50X3Bvb2xfcmVmZXJlbmNlKCkgdG8gcmV0dXJuIHRoZQorKwkgICAgICAgICBwb29sIHJlZmVyZW5jZSBpdHNlbGYuICBUaGF0J3Mgbm8gZ29vZCB0byB1cyBoZXJlLiAgTGV0cworKwkgICAgICAgICBqdXN0IGhvcGUgdGhhdCB3ZSBjYW4gdXNlIHRoZSBjb25zdGFudCBwb29sIHZhbHVlIGRpcmVjdGx5LgorKwkgICAgICAgKi8KKysJICAgICAgaWYgKG9wID09IGNvcCkKKysJCWNvcCA9IGdldF9wb29sX2NvbnN0YW50IChYRVhQIChvcCwgMCkpOworKworKwkgICAgICBwdXNoX21pbmlwb29sX2ZpeCAoaW5zbiwgYWRkcmVzcywKKysJCQkJIHJlY29nX2RhdGEub3BlcmFuZF9sb2Nbb3Bub10sCisrCQkJCSByZWNvZ19kYXRhLm9wZXJhbmRfbW9kZVtvcG5vXSwgY29wKTsKKysJICAgIH0KKysKKysJICByZXN1bHQgPSB0cnVlOworKwl9CisrICAgICAgZWxzZSBpZiAoVEFSR0VUX0hBU19BU01fQUREUl9QU0VVRE9TCisrCSAgICAgICAmJiBhdnIzMl9hZGRyZXNzX29wZXJhbmQgKG9wLCBHRVRfTU9ERSAob3ApKSkKKysJeworKwkgIC8qIEhhbmRsZSBwc2V1ZG8gaW5zdHJ1Y3Rpb25zIHVzaW5nIGEgZGlyZWN0IGFkZHJlc3MuIFRoZXNlIHBzZXVkbworKwkgICAgIGluc3RydWN0aW9ucyBtaWdodCBuZWVkIGVudHJpZXMgaW4gdGhlIGNvbnN0YW50IHBvb2wgYW5kIHdlIG11c3QKKysJICAgICB0aGVyZWZvciBjcmVhdGUgYSBjb25zdGFudCBwb29sIGZvciB0aGVtLCBpbiBjYXNlIHRoZQorKwkgICAgIGFzc2VtYmxlci9saW5rZXIgbmVlZHMgdG8gaW5zZXJ0IGVudHJpZXMuICovCisrCSAgaWYgKGRvX3B1c2hlcykKKysJICAgIHsKKysJICAgICAgLyogUHVzaCBhIGR1bW15IGNvbnN0YW50IHBvb2wgZW50cnkgc28gdGhhdCB0aGUgLmNwb29sCisrCSAgICAgICAgIGRpcmVjdGl2ZSBzaG91bGQgYmUgaW5zZXJ0ZWQgb24gdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluIHRoZQorKwkgICAgICAgICBjb2RlIGV2ZW4gaWYgdGhlcmUgYXJlIG5vIHJlYWwgY29uc3RhbnQgcG9vbCBlbnRyaWVzLiBUaGlzCisrCSAgICAgICAgIGlzIHVzZWQgYnkgdGhlIGFzc2VtYmxlciBhbmQgbGlua2VyIHRvIGtub3cgd2hlcmUgdG8gcHV0CisrCSAgICAgICAgIGdlbmVyYXRlZCBjb25zdGFudCBwb29sIGVudHJpZXMuICovCisrCSAgICAgIHB1c2hfbWluaXBvb2xfZml4IChpbnNuLCBhZGRyZXNzLAorKwkJCQkgcmVjb2dfZGF0YS5vcGVyYW5kX2xvY1tvcG5vXSwKKysJCQkJIHJlY29nX2RhdGEub3BlcmFuZF9tb2RlW29wbm9dLAorKwkJCQkgZ2VuX3J0eF9VTlNQRUMgKFZPSURtb2RlLAorKwkJCQkJCSBnZW5fcnR2ZWMgKDEsIGNvbnN0MF9ydHgpLAorKwkJCQkJCSBVTlNQRUNfRk9SQ0VfTUlOSVBPT0wpKTsKKysJICAgICAgcmVzdWx0ID0gdHJ1ZTsKKysJICAgIH0KKysJfQorKyAgICB9CisrICByZXR1cm4gcmVzdWx0OworK30KKysKKysKKytzdGF0aWMgaW50CisrYXZyMzJfaW5zbl9pc19jYXN0IChydHggaW5zbikKKyt7CisrCisrICBpZiAoTk9OSlVNUF9JTlNOX1AgKGluc24pCisrICAgICAgJiYgR0VUX0NPREUgKFBBVFRFUk4gKGluc24pKSA9PSBTRVQKKysgICAgICAmJiAoR0VUX0NPREUgKFNFVF9TUkMgKFBBVFRFUk4gKGluc24pKSkgPT0gWkVST19FWFRFTkQKKysJICB8fCBHRVRfQ09ERSAoU0VUX1NSQyAoUEFUVEVSTiAoaW5zbikpKSA9PSBTSUdOX0VYVEVORCkKKysgICAgICAmJiBSRUdfUCAoWEVYUCAoU0VUX1NSQyAoUEFUVEVSTiAoaW5zbikpLCAwKSkKKysgICAgICAmJiBSRUdfUCAoU0VUX0RFU1QgKFBBVFRFUk4gKGluc24pKSkpCisrICAgIHJldHVybiB0cnVlOworKyAgcmV0dXJuIGZhbHNlOworK30KKysKKysvKgorKyBSZXBsYWNlIGFsbCBvY2N1cmFuY2VzIG9mIHJlZyBGUk9NIHdpdGggcmVnIFRPIGluIFggKi8KKysKKytydHgKKythdnIzMl9yZXBsYWNlX3JlZyAocnR4IHgsIHJ0eCBmcm9tLCBydHggdG8pCisreworKyAgaW50IGksIGo7CisrICBjb25zdCBjaGFyICpmbXQ7CisrCisrICBnY2NfYXNzZXJ0ICggUkVHX1AgKGZyb20pICYmIFJFR19QICh0bykgKTsKKysKKysgIC8qIEFsbG93IHRoaXMgZnVuY3Rpb24gdG8gbWFrZSByZXBsYWNlbWVudHMgaW4gRVhQUl9MSVNUcy4gICovCisrICBpZiAoeCA9PSAwKQorKyAgICByZXR1cm4gMDsKKysKKysgIGlmIChydHhfZXF1YWxfcCAoeCwgZnJvbSkpCisrICAgIHJldHVybiB0bzsKKysKKysgIGlmIChHRVRfQ09ERSAoeCkgPT0gU1VCUkVHKQorKyAgICB7CisrICAgICAgcnR4IG5ldyA9IGF2cjMyX3JlcGxhY2VfcmVnIChTVUJSRUdfUkVHICh4KSwgZnJvbSwgdG8pOworKworKyAgICAgIGlmIChHRVRfQ09ERSAobmV3KSA9PSBDT05TVF9JTlQpCisrCXsKKysJICB4ID0gc2ltcGxpZnlfc3VicmVnIChHRVRfTU9ERSAoeCksIG5ldywKKysJCQkgICAgICAgR0VUX01PREUgKFNVQlJFR19SRUcgKHgpKSwKKysJCQkgICAgICAgU1VCUkVHX0JZVEUgKHgpKTsKKysJICBnY2NfYXNzZXJ0ICh4KTsKKysJfQorKyAgICAgIGVsc2UKKysJU1VCUkVHX1JFRyAoeCkgPSBuZXc7CisrCisrICAgICAgcmV0dXJuIHg7CisrICAgIH0KKysgIGVsc2UgaWYgKEdFVF9DT0RFICh4KSA9PSBaRVJPX0VYVEVORCkKKysgICAgeworKyAgICAgIHJ0eCBuZXcgPSBhdnIzMl9yZXBsYWNlX3JlZyAoWEVYUCAoeCwgMCksIGZyb20sIHRvKTsKKysKKysgICAgICBpZiAoR0VUX0NPREUgKG5ldykgPT0gQ09OU1RfSU5UKQorKwl7CisrCSAgeCA9IHNpbXBsaWZ5X3VuYXJ5X29wZXJhdGlvbiAoWkVST19FWFRFTkQsIEdFVF9NT0RFICh4KSwKKysJCQkJCW5ldywgR0VUX01PREUgKFhFWFAgKHgsIDApKSk7CisrCSAgZ2NjX2Fzc2VydCAoeCk7CisrCX0KKysgICAgICBlbHNlCisrCVhFWFAgKHgsIDApID0gbmV3OworKworKyAgICAgIHJldHVybiB4OworKyAgICB9CisrCisrICBmbXQgPSBHRVRfUlRYX0ZPUk1BVCAoR0VUX0NPREUgKHgpKTsKKysgIGZvciAoaSA9IEdFVF9SVFhfTEVOR1RIIChHRVRfQ09ERSAoeCkpIC0gMTsgaSA+PSAwOyBpLS0pCisrICAgIHsKKysgICAgICBpZiAoZm10W2ldID09ICdlJykKKysJWEVYUCAoeCwgaSkgPSBhdnIzMl9yZXBsYWNlX3JlZyAoWEVYUCAoeCwgaSksIGZyb20sIHRvKTsKKysgICAgICBlbHNlIGlmIChmbXRbaV0gPT0gJ0UnKQorKwlmb3IgKGogPSBYVkVDTEVOICh4LCBpKSAtIDE7IGogPj0gMDsgai0tKQorKwkgIFhWRUNFWFAgKHgsIGksIGopID0gYXZyMzJfcmVwbGFjZV9yZWcgKFhWRUNFWFAgKHgsIGksIGopLCBmcm9tLCB0byk7CisrICAgIH0KKysKKysgIHJldHVybiB4OworK30KKysKKysKKysvKiBGSVhNRTogVGhlIGxldmVsIG9mIG5lc3RpbmcgaW4gdGhpcyBmdW5jdGlvbiBpcyB3YXkgdG9vIGRlZXAuIEl0IG5lZWRzIHRvIGJlCisrICAgdG9ybiBhcGFydC4gICovCisrc3RhdGljIHZvaWQKKythdnIzMl9yZW9yZ19vcHRpbWl6YXRpb24gKHZvaWQpCisreworKyAgcnR4IGZpcnN0ID0gZ2V0X2ZpcnN0X25vbm5vdGVfaW5zbiAoKTsKKysgIHJ0eCBpbnNuOworKworKyAgaWYgKFRBUkdFVF9NRF9SRU9SR19PUFRJTUlaQVRJT04gJiYgKG9wdGltaXplX3NpemUgfHwgKG9wdGltaXplID4gMCkpKQorKyAgICB7CisrCisrICAgICAgLyogU2NhbiB0aHJvdWdoIGFsbCBpbnNucyBsb29raW5nIGZvciBjYXN0IG9wZXJhdGlvbnMuICovCisrICAgICAgaWYgKGR1bXBfZmlsZSkKKysJeworKwkgIGZwcmludGYgKGR1bXBfZmlsZSwgIjs7IERlbGV0aW5nIHJlZHVuZGFudCBjYXN0IG9wZXJhdGlvbnM6XG4iKTsKKysJfQorKyAgICAgIGZvciAoaW5zbiA9IGZpcnN0OyBpbnNuOyBpbnNuID0gTkVYVF9JTlNOIChpbnNuKSkKKysJeworKwkgIHJ0eCByZWcsIHNyY19yZWcsIHNjYW47CisrCSAgZW51bSBtYWNoaW5lX21vZGUgbW9kZTsKKysJICBpbnQgdW51c2VkX2Nhc3Q7CisrCSAgcnR4IGxhYmVsX3JlZjsKKysKKysJICBpZiAoYXZyMzJfaW5zbl9pc19jYXN0IChpbnNuKQorKwkgICAgICAmJiAoR0VUX01PREUgKFhFWFAgKFNFVF9TUkMgKFBBVFRFUk4gKGluc24pKSwgMCkpID09IFFJbW9kZQorKwkJICB8fCBHRVRfTU9ERSAoWEVYUCAoU0VUX1NSQyAoUEFUVEVSTiAoaW5zbikpLCAwKSkgPT0gSEltb2RlKSkKKysJICAgIHsKKysJICAgICAgbW9kZSA9IEdFVF9NT0RFIChYRVhQIChTRVRfU1JDIChQQVRURVJOIChpbnNuKSksIDApKTsKKysJICAgICAgcmVnID0gU0VUX0RFU1QgKFBBVFRFUk4gKGluc24pKTsKKysJICAgICAgc3JjX3JlZyA9IFhFWFAgKFNFVF9TUkMgKFBBVFRFUk4gKGluc24pKSwgMCk7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBjb250aW51ZTsKKysJICAgIH0KKysKKysJICB1bnVzZWRfY2FzdCA9IGZhbHNlOworKwkgIGxhYmVsX3JlZiA9IE5VTExfUlRYOworKwkgIGZvciAoc2NhbiA9IE5FWFRfSU5TTiAoaW5zbik7IHNjYW47IHNjYW4gPSBORVhUX0lOU04gKHNjYW4pKQorKwkgICAgeworKwkgICAgICAvKiBDaGVjayBpZiB3ZSBoYXZlIHJlYWNoZWQgdGhlIGRlc3RpbmF0aW9uIG9mIGEgc2ltcGxlCisrCSAgICAgICAgIGNvbmRpdGlvbmFsIGp1bXAgd2hpY2ggd2UgaGF2ZSBhbHJlYWR5IHNjYW5uZWQgcGFzdC4gSWYgc28sCisrCSAgICAgICAgIHdlIGNhbiBzYWZlbHkgY29udGludWUgc2Nhbm5pbmcuICovCisrCSAgICAgIGlmIChMQUJFTF9QIChzY2FuKSAmJiBsYWJlbF9yZWYgIT0gTlVMTF9SVFgpCisrCQl7CisrCQkgIGlmIChDT0RFX0xBQkVMX05VTUJFUiAoc2NhbikgPT0KKysJCSAgICAgIENPREVfTEFCRUxfTlVNQkVSIChYRVhQIChsYWJlbF9yZWYsIDApKSkKKysJCSAgICBsYWJlbF9yZWYgPSBOVUxMX1JUWDsKKysJCSAgZWxzZQorKwkJICAgIGJyZWFrOworKwkJfQorKworKwkgICAgICBpZiAoIUlOU05fUCAoc2NhbikpCisrCQljb250aW51ZTsKKysKKysJICAgICAgLyogRm9yIGNvbmRpdGlvbmFsIGp1bXBzIHdlIGNhbiBtYW5hZ2UgdG8ga2VlcCBvbiBzY2FubmluZyBpZgorKwkgICAgICAgICB3ZSBtZWV0IHRoZSBkZXN0aW5hdGlvbiBsYWJlbCBsYXRlciBvbiBiZWZvcmUgYW55IG5ldyBqdW1wCisrCSAgICAgICAgIGluc25zIG9jY3VyZS4gKi8KKysJICAgICAgaWYgKEdFVF9DT0RFIChzY2FuKSA9PSBKVU1QX0lOU04pCisrCQl7CisrCQkgIGlmIChhbnlfY29uZGp1bXBfcCAoc2NhbikgJiYgbGFiZWxfcmVmID09IE5VTExfUlRYKQorKwkJICAgIGxhYmVsX3JlZiA9IGNvbmRqdW1wX2xhYmVsIChzY2FuKTsKKysJCSAgZWxzZQorKwkJICAgIGJyZWFrOworKwkJfQorKworKyAgICAgICAgICAgICAgLyogQ2hlY2sgaWYgd2UgaGF2ZSBhIGNhbGwgYW5kIHRoZSByZWdpc3RlciBpcyB1c2VkIGFzIGFuIGFyZ3VtZW50LiAqLworKyAgICAgICAgICAgICAgaWYgKENBTExfUCAoc2NhbikKKysgICAgICAgICAgICAgICAgICAmJiBmaW5kX3JlZ19mdXNhZ2UgKHNjYW4sIFVTRSwgcmVnKSApCisrICAgICAgICAgICAgICAgIGJyZWFrOworKworKwkgICAgICBpZiAoIXJlZ19tZW50aW9uZWRfcCAocmVnLCBQQVRURVJOIChzY2FuKSkpCisrCQljb250aW51ZTsKKysKKysJICAgICAgLyogQ2hlY2sgaWYgY2FzdGVkIHJlZ2lzdGVyIGlzIHVzZWQgaW4gdGhpcyBpbnNuICovCisrCSAgICAgIGlmICgocmVnbm9fdXNlX2luIChSRUdOTyAocmVnKSwgUEFUVEVSTiAoc2NhbikpICE9IE5VTExfUlRYKQorKwkJICAmJiAoR0VUX01PREUgKHJlZ25vX3VzZV9pbiAoUkVHTk8gKHJlZyksIFBBVFRFUk4gKHNjYW4pKSkgPT0KKysJCSAgICAgIEdFVF9NT0RFIChyZWcpKSkKKysJCXsKKysJCSAgLyogSWYgbm90IHVzZWQgaW4gdGhlIHNvdXJjZSB0byB0aGUgc2V0IG9yIGluIGEgbWVtb3J5CisrCQkgICAgIGV4cHJlc3Npb24gaW4gdGhlIGRlc3RpYW50aW9uIHRoZW4gdGhlIHJlZ2lzdGVyIGlzIHVzZWQKKysJCSAgICAgYXMgYSBkZXN0aW5hdGlvbiBhbmQgaXMgcmVhbGx5IGRlYWQuICovCisrCQkgIGlmIChzaW5nbGVfc2V0IChzY2FuKQorKwkJICAgICAgJiYgR0VUX0NPREUgKFBBVFRFUk4gKHNjYW4pKSA9PSBTRVQKKysJCSAgICAgICYmIFJFR19QIChTRVRfREVTVCAoUEFUVEVSTiAoc2NhbikpKQorKwkJICAgICAgJiYgIXJlZ25vX3VzZV9pbiAoUkVHTk8gKHJlZyksIFNFVF9TUkMgKFBBVFRFUk4gKHNjYW4pKSkKKysJCSAgICAgICYmIGxhYmVsX3JlZiA9PSBOVUxMX1JUWCkKKysJCSAgICB7CisrCQkgICAgICB1bnVzZWRfY2FzdCA9IHRydWU7CisrCQkgICAgfQorKwkJICBicmVhazsKKysJCX0KKysKKysJICAgICAgLyogQ2hlY2sgaWYgcmVnaXN0ZXIgaXMgZGVhZCBvciBzZXQgaW4gdGhpcyBpbnNuICovCisrCSAgICAgIGlmIChkZWFkX29yX3NldF9wIChzY2FuLCByZWcpKQorKwkJeworKwkJICB1bnVzZWRfY2FzdCA9IHRydWU7CisrCQkgIGJyZWFrOworKwkJfQorKwkgICAgfQorKworKwkgIC8qIENoZWNrIGlmIHdlIGhhdmUgdW5yZXNvbHZlZCBjb25kaXRpb25hbCBqdW1wcyAqLworKwkgIGlmIChsYWJlbF9yZWYgIT0gTlVMTF9SVFgpCisrCSAgICBjb250aW51ZTsKKysKKysJICBpZiAodW51c2VkX2Nhc3QpCisrCSAgICB7CisrCSAgICAgIGlmIChSRUdOTyAocmVnKSA9PSBSRUdOTyAoWEVYUCAoU0VUX1NSQyAoUEFUVEVSTiAoaW5zbikpLCAwKSkpCisrCQl7CisrCQkgIC8qIE9uZSBvcGVyYW5kIGNhc3QsIHNhZmUgdG8gZGVsZXRlICovCisrCQkgIGlmIChkdW1wX2ZpbGUpCisrCQkgICAgeworKwkJICAgICAgZnByaW50ZiAoZHVtcF9maWxlLAorKwkJCSAgICAgICAiOzsgIElOU04gJWkgcmVtb3ZlZCwgY2FzdGVkIHJlZ2lzdGVyICVpIHZhbHVlIG5vdCB1c2VkLlxuIiwKKysJCQkgICAgICAgSU5TTl9VSUQgKGluc24pLCBSRUdOTyAocmVnKSk7CisrCQkgICAgfQorKwkJICBTRVRfSU5TTl9ERUxFVEVEIChpbnNuKTsKKysJCSAgLyogRm9yY2UgdGhlIGluc3RydWN0aW9uIHRvIGJlIHJlY29nbml6ZWQgYWdhaW4gKi8KKysJCSAgSU5TTl9DT0RFIChpbnNuKSA9IC0xOworKwkJfQorKwkgICAgICBlbHNlCisrCQl7CisrCQkgIC8qIFR3byBvcGVyYW5kIGNhc3QsIHdoaWNoIHJlYWxseSBjb3VsZCBiZSBzdWJzdGl0dXRlZCB3aXRoCisrCQkgICAgIGEgbW92ZSwgaWYgdGhlIHNvdXJjZSByZWdpc3RlciBpcyBkZWFkIGFmdGVyIHRoZSBjYXN0CisrCQkgICAgIGluc24gYW5kIHRoZW4gdGhlIGluc24gd2hpY2ggc2V0cyB0aGUgc291cmNlIHJlZ2lzdGVyCisrCQkgICAgIGNvdWxkIGluc3RlYWQgZGlyZWN0bHkgc2V0IHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBmb3IKKysJCSAgICAgdGhlIGNhc3QuIEFzIGxvbmcgYXMgdGhlcmUgYXJlIG5vIGluc25zIGluIGJldHdlZW4gd2hpY2gKKysJCSAgICAgdXNlcyB0aGUgcmVnaXN0ZXIuICovCisrCQkgIHJ0eCBsaW5rID0gTlVMTF9SVFg7CisrCQkgIHJ0eCBzZXQ7CisrCQkgIHJ0eCBzcmNfcmVnID0gWEVYUCAoU0VUX1NSQyAoUEFUVEVSTiAoaW5zbikpLCAwKTsKKysJCSAgdW51c2VkX2Nhc3QgPSBmYWxzZTsKKysKKysJCSAgaWYgKCFmaW5kX3JlZ19ub3RlIChpbnNuLCBSRUdfREVBRCwgc3JjX3JlZykpCisrCQkgICAgY29udGludWU7CisrCisrCQkgIC8qIFNlYXJjaCBmb3IgdGhlIGluc24gd2hpY2ggc2V0cyB0aGUgc291cmNlIHJlZ2lzdGVyICovCisrCQkgIGZvciAobGluayA9IExPR19MSU5LUyAoaW5zbik7IGxpbms7IGxpbmsgPSBYRVhQIChsaW5rLCAxKSkKKysJCSAgICB7CisrCQkgICAgICBpZiAoUkVHX05PVEVfS0lORCAobGluaykgIT0gMCkKKysJCQljb250aW51ZTsKKysJCSAgICAgIHNldCA9IHNpbmdsZV9zZXQgKFhFWFAgKGxpbmssIDApKTsKKysJCSAgICAgIGlmIChzZXQgJiYgcnR4X2VxdWFsX3AgKHNyY19yZWcsIFNFVF9ERVNUIChzZXQpKSkKKysJCQl7CisrCQkJICBsaW5rID0gWEVYUCAobGluaywgMCk7CisrCQkJICBicmVhazsKKysJCQl9CisrCQkgICAgfQorKworKwkJICAvKiBGb3VuZCBubyBsaW5rIG9yIGxpbmsgaXMgYSBjYWxsIGluc24gd2hlcmUgd2UgY2FuIG5vdAorKwkJICAgICBjaGFuZ2UgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyICovCisrCQkgIGlmIChsaW5rID09IE5VTExfUlRYIHx8IENBTExfUCAobGluaykpCisrCQkgICAgY29udGludWU7CisrCisrCQkgIC8qIFNjYW4gdGhyb3VnaCBhbGwgaW5zbiBiZXR3ZWVuIGxpbmsgYW5kIGluc24gKi8KKysJCSAgZm9yIChzY2FuID0gTkVYVF9JTlNOIChsaW5rKTsgc2Nhbjsgc2NhbiA9IE5FWFRfSU5TTiAoc2NhbikpCisrCQkgICAgeworKwkJICAgICAgLyogRG9uJ3QgdHJ5IHRvIHRyYWNlIGZvcndhcmQgcGFzdCBhIENPREVfTEFCRUwgaWYgd2UKKysJCSAgICAgICAgIGhhdmVuJ3Qgc2VlbiBJTlNOIHlldC4gIE9yZGluYXJpbHksIHdlIHdpbGwgb25seQorKwkJICAgICAgICAgZmluZCB0aGUgc2V0dGluZyBpbnNuIGluIExPR19MSU5LUyBpZiBpdCBpcyBpbiB0aGUKKysJCSAgICAgICAgIHNhbWUgYmFzaWMgYmxvY2suICBIb3dldmVyLCBjcm9zcy1qdW1waW5nIGNhbiBpbnNlcnQKKysJCSAgICAgICAgIGNvZGUgbGFiZWxzIGluIGJldHdlZW4gdGhlIGxvYWQgYW5kIHRoZSBjYWxsLCBhbmQKKysJCSAgICAgICAgIGNhbiByZXN1bHQgaW4gc2l0dWF0aW9ucyB3aGVyZSBhIHNpbmdsZSBjYWxsIGluc24KKysJCSAgICAgICAgIG1heSBoYXZlIHR3byB0YXJnZXRzIGRlcGVuZGluZyBvbiB3aGVyZSB3ZSBjYW1lCisrCQkgICAgICAgICBmcm9tLiAgKi8KKysKKysJCSAgICAgIGlmIChHRVRfQ09ERSAoc2NhbikgPT0gQ09ERV9MQUJFTCkKKysJCQlicmVhazsKKysKKysJCSAgICAgIGlmICghSU5TTl9QIChzY2FuKSkKKysJCQljb250aW51ZTsKKysKKysJCSAgICAgIC8qIERvbid0IHRyeSB0byB0cmFjZSBmb3J3YXJkIHBhc3QgYSBKVU1QLiAgVG8gb3B0aW1pemUKKysJCSAgICAgICAgIHNhZmVseSwgd2Ugd291bGQgaGF2ZSB0byBjaGVjayB0aGF0IGFsbCB0aGUKKysJCSAgICAgICAgIGluc3RydWN0aW9ucyBhdCB0aGUganVtcCBkZXN0aW5hdGlvbiBkaWQgbm90IHVzZSBSRUcuCisrCQkgICAgICAgKi8KKysKKysJCSAgICAgIGlmIChHRVRfQ09ERSAoc2NhbikgPT0gSlVNUF9JTlNOKQorKwkJCXsKKysJCQkgIGJyZWFrOworKwkJCX0KKysKKysJCSAgICAgIGlmICghcmVnX21lbnRpb25lZF9wIChzcmNfcmVnLCBQQVRURVJOIChzY2FuKSkpCisrCQkJY29udGludWU7CisrCisrCQkgICAgICAvKiBXZSBoYXZlIHJlYWNoZWQgdGhlIGNhc3QgaW5zbiAqLworKwkJICAgICAgaWYgKHNjYW4gPT0gaW5zbikKKysJCQl7CisrCQkJICAvKiBXZSBjYW4gcmVtb3ZlIGNhc3QgYW5kIHJlcGxhY2UgdGhlIGRlc3RpbmF0aW9uCisrCQkJICAgICByZWdpc3RlciBvZiB0aGUgbGluayBpbnNuIHdpdGggdGhlIGRlc3RpbmF0aW9uCisrCQkJICAgICBvZiB0aGUgY2FzdCAqLworKwkJCSAgaWYgKGR1bXBfZmlsZSkKKysJCQkgICAgeworKwkJCSAgICAgIGZwcmludGYgKGR1bXBfZmlsZSwKKysJCQkJICAgICAgICI7OyAgSU5TTiAlaSByZW1vdmVkLCBjYXN0ZWQgdmFsdWUgdW51c2VkLiAiCisrCQkJCSAgICAgICAiRGVzdGluYXRpb24gb2YgcmVtb3ZlZCBjYXN0IG9wZXJhdGlvbjogcmVnaXN0ZXIgJWksICBmb2xkZWQgaW50byBJTlNOICVpLlxuIiwKKysJCQkJICAgICAgIElOU05fVUlEIChpbnNuKSwgUkVHTk8gKHJlZyksCisrCQkJCSAgICAgICBJTlNOX1VJRCAobGluaykpOworKwkJCSAgICB9CisrCQkJICAvKiBVcGRhdGUgbGluayBpbnNuICovCisrCQkJICBTRVRfREVTVCAoUEFUVEVSTiAobGluaykpID0KKysJCQkgICAgZ2VuX3J0eF9SRUcgKG1vZGUsIFJFR05PIChyZWcpKTsKKysJCQkgIC8qIEZvcmNlIHRoZSBpbnN0cnVjdGlvbiB0byBiZSByZWNvZ25pemVkIGFnYWluICovCisrCQkJICBJTlNOX0NPREUgKGxpbmspID0gLTE7CisrCisrCQkJICAvKiBEZWxldGUgaW5zbiAqLworKwkJCSAgU0VUX0lOU05fREVMRVRFRCAoaW5zbik7CisrCQkJICAvKiBGb3JjZSB0aGUgaW5zdHJ1Y3Rpb24gdG8gYmUgcmVjb2duaXplZCBhZ2FpbiAqLworKwkJCSAgSU5TTl9DT0RFIChpbnNuKSA9IC0xOworKwkJCSAgYnJlYWs7CisrCQkJfQorKwkJICAgIH0KKysJCX0KKysJICAgIH0KKysJfQorKyAgICB9CisrCisrICBpZiAoVEFSR0VUX01EX1JFT1JHX09QVElNSVpBVElPTiAmJiAob3B0aW1pemVfc2l6ZSB8fCAob3B0aW1pemUgPiAwKSkpCisrICAgIHsKKysKKysgICAgICAvKiBTY2FuIHRocm91Z2ggYWxsIGluc25zIGxvb2tpbmcgZm9yIHNoaWZ0ZWQgYWRkIG9wZXJhdGlvbnMgKi8KKysgICAgICBpZiAoZHVtcF9maWxlKQorKwl7CisrCSAgZnByaW50ZiAoZHVtcF9maWxlLAorKwkJICAgIjs7IERlbGV0aW5nIHJlZHVuZGFudCBzaGlmdGVkIGFkZCBvcGVyYXRpb25zOlxuIik7CisrCX0KKysgICAgICBmb3IgKGluc24gPSBmaXJzdDsgaW5zbjsgaW5zbiA9IE5FWFRfSU5TTiAoaW5zbikpCisrCXsKKysJICBydHggcmVnLCBtZW1fZXhwciwgc2Nhbiwgb3AwLCBvcDE7CisrCSAgaW50IGFkZF9vbmx5X3VzZWRfYXNfcG9pbnRlcjsKKysKKysJICBpZiAoSU5TTl9QIChpbnNuKQorKwkgICAgICAmJiBHRVRfQ09ERSAoUEFUVEVSTiAoaW5zbikpID09IFNFVAorKwkgICAgICAmJiBHRVRfQ09ERSAoU0VUX1NSQyAoUEFUVEVSTiAoaW5zbikpKSA9PSBQTFVTCisrCSAgICAgICYmIChHRVRfQ09ERSAoWEVYUCAoU0VUX1NSQyAoUEFUVEVSTiAoaW5zbikpLCAwKSkgPT0gTVVMVAorKwkJICB8fCBHRVRfQ09ERSAoWEVYUCAoU0VUX1NSQyAoUEFUVEVSTiAoaW5zbikpLCAwKSkgPT0gQVNISUZUKQorKwkgICAgICAmJiBHRVRfQ09ERSAoWEVYUCAoWEVYUCAoU0VUX1NSQyAoUEFUVEVSTiAoaW5zbikpLCAwKSwgMSkpID09CisrCSAgICAgIENPTlNUX0lOVCAmJiBSRUdfUCAoU0VUX0RFU1QgKFBBVFRFUk4gKGluc24pKSkKKysJICAgICAgJiYgUkVHX1AgKFhFWFAgKFNFVF9TUkMgKFBBVFRFUk4gKGluc24pKSwgMSkpCisrCSAgICAgICYmIFJFR19QIChYRVhQIChYRVhQIChTRVRfU1JDIChQQVRURVJOIChpbnNuKSksIDApLCAwKSkpCisrCSAgICB7CisrCSAgICAgIHJlZyA9IFNFVF9ERVNUIChQQVRURVJOIChpbnNuKSk7CisrCSAgICAgIG1lbV9leHByID0gU0VUX1NSQyAoUEFUVEVSTiAoaW5zbikpOworKwkgICAgICBvcDAgPSBYRVhQIChYRVhQIChtZW1fZXhwciwgMCksIDApOworKwkgICAgICBvcDEgPSBYRVhQIChtZW1fZXhwciwgMSk7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBjb250aW51ZTsKKysJICAgIH0KKysKKysJICAvKiBTY2FuIGZvcndhcmQgdGhlIGNoZWNrIGlmIHRoZSByZXN1bHQgb2YgdGhlIHNoaWZ0ZWQgYWRkCisrCSAgICAgb3BlcmF0aW9uIGlzIG9ubHkgdXNlZCBhcyBhbiBhZGRyZXNzIGluIG1lbW9yeSBvcGVyYXRpb25zIGFuZAorKwkgICAgIHRoYXQgdGhlIG9wZXJhbmRzIHRvIHRoZSBzaGlmdGVkIGFkZCBhcmUgbm90IGNsb2JiZXJlZC4gKi8KKysJICBhZGRfb25seV91c2VkX2FzX3BvaW50ZXIgPSBmYWxzZTsKKysJICBmb3IgKHNjYW4gPSBORVhUX0lOU04gKGluc24pOyBzY2FuOyBzY2FuID0gTkVYVF9JTlNOIChzY2FuKSkKKysJICAgIHsKKysJICAgICAgaWYgKCFJTlNOX1AgKHNjYW4pKQorKwkJY29udGludWU7CisrCisrCSAgICAgIC8qIERvbid0IHRyeSB0byB0cmFjZSBmb3J3YXJkIHBhc3QgYSBKVU1QIG9yIENBTEwuICBUbyBvcHRpbWl6ZQorKwkgICAgICAgICBzYWZlbHksIHdlIHdvdWxkIGhhdmUgdG8gY2hlY2sgdGhhdCBhbGwgdGhlIGluc3RydWN0aW9ucyBhdAorKwkgICAgICAgICB0aGUganVtcCBkZXN0aW5hdGlvbiBkaWQgbm90IHVzZSBSRUcuICAqLworKworKwkgICAgICBpZiAoR0VUX0NPREUgKHNjYW4pID09IEpVTVBfSU5TTikKKysJCXsKKysJCSAgYnJlYWs7CisrCQl9CisrCisrCSAgICAgIC8qIElmIHVzZWQgaW4gYSBjYWxsIGluc24gdGhlbiB3ZSBjYW5ub3Qgb3B0aW1pemUgaXQgYXdheSAqLworKwkgICAgICBpZiAoQ0FMTF9QIChzY2FuKSAmJiBmaW5kX3JlZ25vX2Z1c2FnZSAoc2NhbiwgVVNFLCBSRUdOTyAocmVnKSkpCisrCQlicmVhazsKKysKKysJICAgICAgLyogSWYgYW55IG9mIHRoZSBvcGVyYW5kcyBvZiB0aGUgc2hpZnRlZCBhZGQgYXJlIGNsb2JiZXJlZCB3ZQorKwkgICAgICAgICBjYW5ub3Qgb3B0aW1pemUgdGhlIHNoaWZ0ZWQgYWRkYSBhd2F5ICovCisrCSAgICAgIGlmICgocmVnX3NldF9wIChvcDAsIHNjYW4pICYmIChSRUdOTyAob3AwKSAhPSBSRUdOTyAocmVnKSkpCisrCQkgIHx8IChyZWdfc2V0X3AgKG9wMSwgc2NhbikgJiYgKFJFR05PIChvcDEpICE9IFJFR05PIChyZWcpKSkpCisrCQlicmVhazsKKysKKysJICAgICAgaWYgKCFyZWdfbWVudGlvbmVkX3AgKHJlZywgUEFUVEVSTiAoc2NhbikpKQorKwkJY29udGludWU7CisrCisrCSAgICAgIC8qIElmIHVzZWQgYW55IG90aGVyIHBsYWNlIHRoYW4gYXMgYSBwb2ludGVyIG9yIGFzIHRoZQorKwkgICAgICAgICBkZXN0aW5hdGlvbiByZWdpc3RlciB3ZSBmYWlsZWQgKi8KKysgICAgICAgICAgICAgIGlmICghKHNpbmdsZV9zZXQgKHNjYW4pCisrICAgICAgICAgICAgICAgICAgICAmJiBHRVRfQ09ERSAoUEFUVEVSTiAoc2NhbikpID09IFNFVAorKyAgICAgICAgICAgICAgICAgICAgJiYgKChNRU1fUCAoU0VUX0RFU1QgKFBBVFRFUk4gKHNjYW4pKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgJiYgUkVHX1AgKFhFWFAgKFNFVF9ERVNUIChQQVRURVJOIChzY2FuKSksIDApKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAmJiBSRUdOTyAoWEVYUCAoU0VUX0RFU1QgKFBBVFRFUk4gKHNjYW4pKSwgMCkpID09IFJFR05PIChyZWcpKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IChNRU1fUCAoU0VUX1NSQyAoUEFUVEVSTiAoc2NhbikpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBSRUdfUCAoWEVYUCAoU0VUX1NSQyAoUEFUVEVSTiAoc2NhbikpLCAwKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgUkVHTk8gKFhFWFAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTRVRfU1JDIChQQVRURVJOIChzY2FuKSksIDApKSA9PSBSRUdOTyAocmVnKSkpKQorKyAgICAgICAgICAgICAgICAgICYmICEoR0VUX0NPREUgKFBBVFRFUk4gKHNjYW4pKSA9PSBTRVQKKysgICAgICAgICAgICAgICAgICAgICAgICYmIFJFR19QIChTRVRfREVTVCAoUEFUVEVSTiAoc2NhbikpKQorKyAgICAgICAgICAgICAgICAgICAgICAgJiYgIXJlZ25vX3VzZV9pbiAoUkVHTk8gKHJlZyksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfU1JDIChQQVRURVJOIChzY2FuKSkpKSkKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgICAvKiBXZSBjYW5ub3QgcmVwbGFjZSB0aGUgcG9pbnRlciBpbiBUSW1vZGUgaW5zbnMKKysgICAgICAgICAgICAgICAgIGFzIHRoZXNlIGhhcyBhIGRpZmZlcmVuZSBhZGRyZXNzaW5nIG1vZGUgdGhhbiB0aGUgb3RoZXIKKysgICAgICAgICAgICAgICAgIG1lbW9yeSBpbnNucy4gKi8KKysgICAgICAgICAgICAgIGlmICggR0VUX01PREUgKFNFVF9ERVNUIChQQVRURVJOIChzY2FuKSkpID09IFRJbW9kZSApCisrICAgICAgICAgICAgICAgIGJyZWFrOworKworKwkgICAgICAvKiBDaGVjayBpZiByZWdpc3RlciBpcyBkZWFkIG9yIHNldCBpbiB0aGlzIGluc24gKi8KKysJICAgICAgaWYgKGRlYWRfb3Jfc2V0X3AgKHNjYW4sIHJlZykpCisrCQl7CisrCQkgIGFkZF9vbmx5X3VzZWRfYXNfcG9pbnRlciA9IHRydWU7CisrCQkgIGJyZWFrOworKwkJfQorKwkgICAgfQorKworKwkgIGlmIChhZGRfb25seV91c2VkX2FzX3BvaW50ZXIpCisrCSAgICB7CisrCSAgICAgIC8qIExldHMgZGVsZXRlIHRoZSBhZGQgaW5zbiBhbmQgcmVwbGFjZSBhbGwgbWVtb3J5IHJlZmVyZW5jZXMKKysJICAgICAgICAgd2hpY2ggdXNlcyB0aGUgcG9pbnRlciB3aXRoIHRoZSBmdWxsIGV4cHJlc3Npb24uICovCisrCSAgICAgIGlmIChkdW1wX2ZpbGUpCisrCQl7CisrCQkgIGZwcmludGYgKGR1bXBfZmlsZSwKKysJCQkgICAiOzsgRGVsZXRpbmcgSU5TTiAlaSBzaW5jZSBhZGRyZXNzIGV4cHJlc3Npb24gY2FuIGJlIGZvbGRlZCBpbnRvIGFsbCAiCisrCQkJICAgIm1lbW9yeSByZWZlcmVuY2VzIHVzaW5nIHRoaXMgZXhwcmVzc2lvblxuIiwKKysJCQkgICBJTlNOX1VJRCAoaW5zbikpOworKwkJfQorKwkgICAgICBTRVRfSU5TTl9ERUxFVEVEIChpbnNuKTsKKysJICAgICAgLyogRm9yY2UgdGhlIGluc3RydWN0aW9uIHRvIGJlIHJlY29nbml6ZWQgYWdhaW4gKi8KKysJICAgICAgSU5TTl9DT0RFIChpbnNuKSA9IC0xOworKworKwkgICAgICBmb3IgKHNjYW4gPSBORVhUX0lOU04gKGluc24pOyBzY2FuOyBzY2FuID0gTkVYVF9JTlNOIChzY2FuKSkKKysJCXsKKysJCSAgaWYgKCFJTlNOX1AgKHNjYW4pKQorKwkJICAgIGNvbnRpbnVlOworKworKwkJICBpZiAoIXJlZ19tZW50aW9uZWRfcCAocmVnLCBQQVRURVJOIChzY2FuKSkpCisrCQkgICAgY29udGludWU7CisrCisrCQkgIC8qIElmIHVzZWQgYW55IG90aGVyIHBsYWNlIHRoYW4gYXMgYSBwb2ludGVyIG9yIGFzIHRoZQorKwkJICAgICBkZXN0aW5hdGlvbiByZWdpc3RlciB3ZSBmYWlsZWQgKi8KKysJCSAgaWYgKChzaW5nbGVfc2V0IChzY2FuKQorKwkJICAgICAgICYmIEdFVF9DT0RFIChQQVRURVJOIChzY2FuKSkgPT0gU0VUCisrCQkgICAgICAgJiYgKChNRU1fUCAoU0VUX0RFU1QgKFBBVFRFUk4gKHNjYW4pKSkKKysJCQkgICAgJiYgUkVHX1AgKFhFWFAgKFNFVF9ERVNUIChQQVRURVJOIChzY2FuKSksIDApKQorKwkJCSAgICAmJiBSRUdOTyAoWEVYUCAoU0VUX0RFU1QgKFBBVFRFUk4gKHNjYW4pKSwgMCkpID09CisrCQkJICAgIFJFR05PIChyZWcpKSB8fCAoTUVNX1AgKFNFVF9TUkMgKFBBVFRFUk4gKHNjYW4pKSkKKysJCQkJCSAgICAgJiYKKysJCQkJCSAgICAgUkVHX1AgKFhFWFAKKysJCQkJCQkgICAgKFNFVF9TUkMgKFBBVFRFUk4gKHNjYW4pKSwKKysJCQkJCQkgICAgIDApKQorKwkJCQkJICAgICAmJgorKwkJCQkJICAgICBSRUdOTyAoWEVYUAorKwkJCQkJCSAgICAoU0VUX1NSQyAoUEFUVEVSTiAoc2NhbikpLAorKwkJCQkJCSAgICAgMCkpID09IFJFR05PIChyZWcpKSkpKQorKwkJICAgIHsKKysJCSAgICAgIGlmIChkdW1wX2ZpbGUpCisrCQkJeworKwkJCSAgZnByaW50ZiAoZHVtcF9maWxlLAorKwkJCQkgICAiOzsgUmVnaXN0ZXIgJWkgcmVwbGFjZWQgYnkgaW5kZXhlZCBhZGRyZXNzIGluIElOU04gJWlcbiIsCisrCQkJCSAgIFJFR05PIChyZWcpLCBJTlNOX1VJRCAoc2NhbikpOworKwkJCX0KKysJCSAgICAgIGlmIChNRU1fUCAoU0VUX0RFU1QgKFBBVFRFUk4gKHNjYW4pKSkpCisrCQkJWEVYUCAoU0VUX0RFU1QgKFBBVFRFUk4gKHNjYW4pKSwgMCkgPSBtZW1fZXhwcjsKKysJCSAgICAgIGVsc2UKKysJCQlYRVhQIChTRVRfU1JDIChQQVRURVJOIChzY2FuKSksIDApID0gbWVtX2V4cHI7CisrCQkgICAgfQorKworKwkJICAvKiBDaGVjayBpZiByZWdpc3RlciBpcyBkZWFkIG9yIHNldCBpbiB0aGlzIGluc24gKi8KKysJCSAgaWYgKGRlYWRfb3Jfc2V0X3AgKHNjYW4sIHJlZykpCisrCQkgICAgeworKwkJICAgICAgYnJlYWs7CisrCQkgICAgfQorKworKwkJfQorKwkgICAgfQorKwl9CisrICAgIH0KKysKKysKKysgIGlmIChUQVJHRVRfTURfUkVPUkdfT1BUSU1JWkFUSU9OICYmIChvcHRpbWl6ZV9zaXplIHx8IChvcHRpbWl6ZSA+IDApKSkKKysgICAgeworKworKyAgICAgIC8qIFNjYW4gdGhyb3VnaCBhbGwgaW5zbnMgbG9va2luZyBmb3IgY29uZGl0aW9uYWwgcmVnaXN0ZXIgdG8KKysgICAgICAgICByZWdpc3RlciBtb3ZlIG9wZXJhdGlvbnMgKi8KKysgICAgICBpZiAoZHVtcF9maWxlKQorKwl7CisrCSAgZnByaW50ZiAoZHVtcF9maWxlLAorKwkJICAgIjs7IEZvbGRpbmcgcmVkdW5kYW50IGNvbmRpdGlvbmFsIG1vdmUgb3BlcmF0aW9uczpcbiIpOworKwl9CisrICAgICAgZm9yIChpbnNuID0gZmlyc3Q7IGluc247IGluc24gPSBuZXh0X25vbm5vdGVfaW5zbiAoaW5zbikpCisrCXsKKysJICBydHggc3JjX3JlZywgZHN0X3JlZywgc2NhbiwgdGVzdDsKKysKKysJICBpZiAoSU5TTl9QIChpbnNuKQorKyAgICAgICAgICAgICAgJiYgR0VUX0NPREUgKFBBVFRFUk4gKGluc24pKSA9PSBDT05EX0VYRUMKKysJICAgICAgJiYgR0VUX0NPREUgKENPTkRfRVhFQ19DT0RFIChQQVRURVJOIChpbnNuKSkpID09IFNFVAorKwkgICAgICAmJiBSRUdfUCAoU0VUX1NSQyAoQ09ORF9FWEVDX0NPREUgKFBBVFRFUk4gKGluc24pKSkpCisrCSAgICAgICYmIFJFR19QIChTRVRfREVTVCAoQ09ORF9FWEVDX0NPREUgKFBBVFRFUk4gKGluc24pKSkpCisrICAgICAgICAgICAgICAmJiBmaW5kX3JlZ19ub3RlIChpbnNuLCBSRUdfREVBRCwgU0VUX1NSQyAoQ09ORF9FWEVDX0NPREUgKFBBVFRFUk4gKGluc24pKSkpKQorKwkgICAgeworKwkgICAgICBzcmNfcmVnID0gU0VUX1NSQyAoQ09ORF9FWEVDX0NPREUgKFBBVFRFUk4gKGluc24pKSk7CisrCSAgICAgIGRzdF9yZWcgPSBTRVRfREVTVCAoQ09ORF9FWEVDX0NPREUgKFBBVFRFUk4gKGluc24pKSk7CisrICAgICAgICAgICAgICB0ZXN0ID0gQ09ORF9FWEVDX1RFU1QgKFBBVFRFUk4gKGluc24pKTsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIGNvbnRpbnVlOworKwkgICAgfQorKworKyAgICAgICAgICAvKiBTY2FuIGJhY2t3YXJkIHRocm91Z2ggdGhlIHJlc3Qgb2YgaW5zbnMgaW4gdGhpcyBpZi10aGVuIG9yIGlmLWVsc2UKKysgICAgICAgICAgICAgYmxvY2sgYW5kIGNoZWNrIGlmIHdlIGNhbiBmb2xkIHRoZSBtb3ZlIGludG8gYW5vdGhlciBvZiB0aGUgY29uZGl0aW9uYWwKKysgICAgICAgICAgICAgaW5zbnMgaW4gdGhlIHNhbWUgYmxvY2suICovCisrICAgICAgICAgIHNjYW4gPSBwcmV2X25vbm5vdGVfaW5zbiAoaW5zbik7CisrICAgICAgICAgIHdoaWxlIChJTlNOX1AgKHNjYW4pCisrICAgICAgICAgICAgICAgICAmJiBHRVRfQ09ERSAoUEFUVEVSTiAoc2NhbikpID09IENPTkRfRVhFQworKyAgICAgICAgICAgICAgICAgJiYgcnR4X2VxdWFsX3AgKENPTkRfRVhFQ19URVNUIChQQVRURVJOIChzY2FuKSksIHRlc3QpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIHJ0eCBwYXR0ZXJuID0gQ09ORF9FWEVDX0NPREUgKFBBVFRFUk4gKHNjYW4pKTsKKysgICAgICAgICAgICAgIGlmICggR0VUX0NPREUgKHBhdHRlcm4pID09IFBBUkFMTEVMICkKKysgICAgICAgICAgICAgICAgcGF0dGVybiA9IFhWRUNFWFAgKHBhdHRlcm4sIDAsIDApOworKworKyAgICAgICAgICAgICAgaWYgKCByZWdfc2V0X3AgKHNyY19yZWcsIHBhdHRlcm4pICkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgIC8qIEZvbGQgaW4gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGZvciB0aGUgY29uZC4gbW92ZQorKyAgICAgICAgICAgICAgICAgICAgIGludG8gdGhpcyBpbnNuLiAqLworKyAgICAgICAgICAgICAgICAgIFNFVF9ERVNUIChwYXR0ZXJuKSA9IGRzdF9yZWc7CisrICAgICAgICAgICAgICAgICAgaWYgKGR1bXBfZmlsZSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZiAoZHVtcF9maWxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOzsgRGVsZXRpbmcgSU5TTiAlaSBzaW5jZSB0aGlzIG9wZXJhdGlvbiBjYW4gYmUgZm9sZGVkIGludG8gSU5TTiAlaVxuIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5TTl9VSUQgKGluc24pLCBJTlNOX1VJRCAoc2NhbikpOworKyAgICAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICAgIC8qIFNjYW4gYW5kIGNoZWNrIGlmIGFueSBvZiB0aGUgaW5zbnMgaW4gYmV0d2VlbiB1c2VzIHRoZSBzcmNfcmVnLiBXZQorKyAgICAgICAgICAgICAgICAgICAgIG11c3QgdGhlbiByZXBsYWNlIGl0IHdpdGggdGhlIGRzdF9yZWcuICovCisrICAgICAgICAgICAgICAgICAgd2hpbGUgKCAoc2NhbiA9IG5leHRfbm9ubm90ZV9pbnNuIChzY2FuKSkgIT0gaW5zbiApeworKyAgICAgICAgICAgICAgICAgICAgYXZyMzJfcmVwbGFjZV9yZWcgKHNjYW4sIHNyY19yZWcsIGRzdF9yZWcpOworKyAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAvKiBEZWxldGUgdGhlIGluc24uICovCisrICAgICAgICAgICAgICAgICAgU0VUX0lOU05fREVMRVRFRCAoaW5zbik7CisrCisrICAgICAgICAgICAgICAgICAgLyogRm9yY2UgdGhlIGluc3RydWN0aW9uIHRvIGJlIHJlY29nbml6ZWQgYWdhaW4gKi8KKysgICAgICAgICAgICAgICAgICBJTlNOX0NPREUgKGluc24pID0gLTE7CisrICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgIC8qIElmIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyB1c2VkIGJ1dCBub3Qgc2V0IGluIHRoaXMgaW5zbgorKyAgICAgICAgICAgICAgICAgd2UgY2Fubm90IGZvbGQuICovCisrICAgICAgICAgICAgICBpZiAoIHJlZ19tZW50aW9uZWRfcCAoZHN0X3JlZywgcGF0dGVybikgKQorKyAgICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICAgIHNjYW4gPSBwcmV2X25vbm5vdGVfaW5zbiAoc2Nhbik7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICB9CisrCisrfQorKworKy8qIEV4cG9ydGVkIHRvIHRvcGxldi5jLgorKworKyAgIERvIGEgZmluYWwgcGFzcyBvdmVyIHRoZSBmdW5jdGlvbiwganVzdCBiZWZvcmUgZGVsYXllZCBicmFuY2gKKysgICBzY2hlZHVsaW5nLiAgKi8KKysKKytzdGF0aWMgdm9pZAorK2F2cjMyX3Jlb3JnICh2b2lkKQorK3sKKysgIHJ0eCBpbnNuOworKyAgSE9TVF9XSURFX0lOVCBhZGRyZXNzID0gMDsKKysgIE1maXggKmZpeDsKKysKKysgIG1pbmlwb29sX2ZpeF9oZWFkID0gbWluaXBvb2xfZml4X3RhaWwgPSBOVUxMOworKworKyAgLyogVGhlIGZpcnN0IGluc24gbXVzdCBhbHdheXMgYmUgYSBub3RlLCBvciB0aGUgY29kZSBiZWxvdyB3b24ndCBzY2FuIGl0CisrICAgICBwcm9wZXJseS4gICovCisrICBpbnNuID0gZ2V0X2luc25zICgpOworKyAgaWYgKEdFVF9DT0RFIChpbnNuKSAhPSBOT1RFKQorKyAgICBhYm9ydCAoKTsKKysKKysgIC8qIFNjYW4gYWxsIHRoZSBpbnNucyBhbmQgcmVjb3JkIHRoZSBvcGVyYW5kcyB0aGF0IHdpbGwgbmVlZCBmaXhpbmcuICAqLworKyAgZm9yIChpbnNuID0gbmV4dF9ub25ub3RlX2luc24gKGluc24pOyBpbnNuOyBpbnNuID0gbmV4dF9ub25ub3RlX2luc24gKGluc24pKQorKyAgICB7CisrICAgICAgaWYgKEdFVF9DT0RFIChpbnNuKSA9PSBCQVJSSUVSKQorKwlwdXNoX21pbmlwb29sX2JhcnJpZXIgKGluc24sIGFkZHJlc3MpOworKyAgICAgIGVsc2UgaWYgKElOU05fUCAoaW5zbikpCisrCXsKKysJICBydHggdGFibGU7CisrCisrCSAgbm90ZV9pbnZhbGlkX2NvbnN0YW50cyAoaW5zbiwgYWRkcmVzcywgdHJ1ZSk7CisrCSAgYWRkcmVzcyArPSBnZXRfYXR0cl9sZW5ndGggKGluc24pOworKworKwkgIC8qIElmIHRoZSBpbnNuIGlzIGEgdmVjdG9yIGp1bXAsIGFkZCB0aGUgc2l6ZSBvZiB0aGUgdGFibGUgYW5kIHNraXAKKysJICAgICB0aGUgdGFibGUuICAqLworKwkgIGlmICgodGFibGUgPSBpc19qdW1wX3RhYmxlIChpbnNuKSkgIT0gTlVMTCkKKysJICAgIHsKKysJICAgICAgYWRkcmVzcyArPSBnZXRfanVtcF90YWJsZV9zaXplICh0YWJsZSk7CisrCSAgICAgIGluc24gPSB0YWJsZTsKKysJICAgIH0KKysJfQorKyAgICB9CisrCisrICBmaXggPSBtaW5pcG9vbF9maXhfaGVhZDsKKysKKysgIC8qIE5vdyBzY2FuIHRoZSBmaXh1cHMgYW5kIHBlcmZvcm0gdGhlIHJlcXVpcmVkIGNoYW5nZXMuICAqLworKyAgd2hpbGUgKGZpeCkKKysgICAgeworKyAgICAgIE1maXggKmZ0bXA7CisrICAgICAgTWZpeCAqZmRlbDsKKysgICAgICBNZml4ICpsYXN0X2FkZGVkX2ZpeDsKKysgICAgICBNZml4ICpsYXN0X2JhcnJpZXIgPSBOVUxMOworKyAgICAgIE1maXggKnRoaXNfZml4OworKworKyAgICAgIC8qIFNraXAgYW55IGZ1cnRoZXIgYmFycmllcnMgYmVmb3JlIHRoZSBuZXh0IGZpeC4gICovCisrICAgICAgd2hpbGUgKGZpeCAmJiBHRVRfQ09ERSAoZml4LT5pbnNuKSA9PSBCQVJSSUVSKQorKwlmaXggPSBmaXgtPm5leHQ7CisrCisrICAgICAgLyogTm8gbW9yZSBmaXhlcy4gICovCisrICAgICAgaWYgKGZpeCA9PSBOVUxMKQorKwlicmVhazsKKysKKysgICAgICBsYXN0X2FkZGVkX2ZpeCA9IE5VTEw7CisrCisrICAgICAgZm9yIChmdG1wID0gZml4OyBmdG1wOyBmdG1wID0gZnRtcC0+bmV4dCkKKysJeworKwkgIGlmIChHRVRfQ09ERSAoZnRtcC0+aW5zbikgPT0gQkFSUklFUikKKysJICAgIHsKKysJICAgICAgaWYgKGZ0bXAtPmFkZHJlc3MgPj0gbWluaXBvb2xfdmVjdG9yX2hlYWQtPm1heF9hZGRyZXNzKQorKwkJYnJlYWs7CisrCisrCSAgICAgIGxhc3RfYmFycmllciA9IGZ0bXA7CisrCSAgICB9CisrCSAgZWxzZSBpZiAoKGZ0bXAtPm1pbmlwb29sID0gYWRkX21pbmlwb29sX2ZvcndhcmRfcmVmIChmdG1wKSkgPT0gTlVMTCkKKysJICAgIGJyZWFrOworKworKwkgIGxhc3RfYWRkZWRfZml4ID0gZnRtcDsJLyogS2VlcCB0cmFjayBvZiB0aGUgbGFzdCBmaXggYWRkZWQuCisrCQkJCQkgKi8KKysJfQorKworKyAgICAgIC8qIElmIHdlIGZvdW5kIGEgYmFycmllciwgZHJvcCBiYWNrIHRvIHRoYXQ7IGFueSBmaXhlcyB0aGF0IHdlIGNvdWxkCisrICAgICAgICAgaGF2ZSByZWFjaGVkIGJ1dCBjb21lIGFmdGVyIHRoZSBiYXJyaWVyIHdpbGwgbm93IGdvIGluIHRoZSBuZXh0CisrICAgICAgICAgbWluaS1wb29sLiAgKi8KKysgICAgICBpZiAobGFzdF9iYXJyaWVyICE9IE5VTEwpCisrCXsKKysJICAvKiBSZWR1Y2UgdGhlIHJlZmNvdW50IGZvciB0aG9zZSBmaXhlcyB0aGF0IHdvbid0IGdvIGludG8gdGhpcyBwb29sCisrCSAgICAgYWZ0ZXIgYWxsLiAgKi8KKysJICBmb3IgKGZkZWwgPSBsYXN0X2JhcnJpZXItPm5leHQ7CisrCSAgICAgICBmZGVsICYmIGZkZWwgIT0gZnRtcDsgZmRlbCA9IGZkZWwtPm5leHQpCisrCSAgICB7CisrCSAgICAgIGZkZWwtPm1pbmlwb29sLT5yZWZjb3VudC0tOworKwkgICAgICBmZGVsLT5taW5pcG9vbCA9IE5VTEw7CisrCSAgICB9CisrCisrCSAgZnRtcCA9IGxhc3RfYmFycmllcjsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8qIGZ0bXAgaXMgZmlyc3QgZml4IHRoYXQgd2UgY2FuJ3QgZml0IGludG8gdGhpcyBwb29sIGFuZCB0aGVyZSBubworKwkgICAgIG5hdHVyYWwgYmFycmllcnMgdGhhdCB3ZSBjb3VsZCB1c2UuICBJbnNlcnQgYSBuZXcgYmFycmllciBpbiB0aGUKKysJICAgICBjb2RlIHNvbWV3aGVyZSBiZXR3ZWVuIHRoZSBwcmV2aW91cyBmaXggYW5kIHRoaXMgb25lLCBhbmQKKysJICAgICBhcnJhbmdlIHRvIGp1bXAgYXJvdW5kIGl0LiAgKi8KKysJICBIT1NUX1dJREVfSU5UIG1heF9hZGRyZXNzOworKworKwkgIC8qIFRoZSBsYXN0IGl0ZW0gb24gdGhlIGxpc3Qgb2YgZml4ZXMgbXVzdCBiZSBhIGJhcnJpZXIsIHNvIHdlIGNhbgorKwkgICAgIG5ldmVyIHJ1biBvZmYgdGhlIGVuZCBvZiB0aGUgbGlzdCBvZiBmaXhlcyB3aXRob3V0IGxhc3RfYmFycmllcgorKwkgICAgIGJlaW5nIHNldC4gICovCisrCSAgaWYgKGZ0bXAgPT0gTlVMTCkKKysJICAgIGFib3J0ICgpOworKworKwkgIG1heF9hZGRyZXNzID0gbWluaXBvb2xfdmVjdG9yX2hlYWQtPm1heF9hZGRyZXNzOworKwkgIC8qIENoZWNrIHRoYXQgdGhlcmUgaXNuJ3QgYW5vdGhlciBmaXggdGhhdCBpcyBpbiByYW5nZSB0aGF0IHdlCisrCSAgICAgY291bGRuJ3QgZml0IGludG8gdGhpcyBwb29sIGJlY2F1c2UgdGhlIHBvb2wgd2FzIGFscmVhZHkgdG9vCisrCSAgICAgbGFyZ2U6IHdlIG5lZWQgdG8gcHV0IHRoZSBwb29sIGJlZm9yZSBzdWNoIGFuIGluc3RydWN0aW9uLiAgKi8KKysJICBpZiAoZnRtcC0+YWRkcmVzcyA8IG1heF9hZGRyZXNzKQorKwkgICAgbWF4X2FkZHJlc3MgPSBmdG1wLT5hZGRyZXNzOworKworKwkgIGxhc3RfYmFycmllciA9IGNyZWF0ZV9maXhfYmFycmllciAobGFzdF9hZGRlZF9maXgsIG1heF9hZGRyZXNzKTsKKysJfQorKworKyAgICAgIGFzc2lnbl9taW5pcG9vbF9vZmZzZXRzIChsYXN0X2JhcnJpZXIpOworKworKyAgICAgIHdoaWxlIChmdG1wKQorKwl7CisrCSAgaWYgKEdFVF9DT0RFIChmdG1wLT5pbnNuKSAhPSBCQVJSSUVSCisrCSAgICAgICYmICgoZnRtcC0+bWluaXBvb2wgPSBhZGRfbWluaXBvb2xfYmFja3dhcmRfcmVmIChmdG1wKSkKKysJCSAgPT0gTlVMTCkpCisrCSAgICBicmVhazsKKysKKysJICBmdG1wID0gZnRtcC0+bmV4dDsKKysJfQorKworKyAgICAgIC8qIFNjYW4gb3ZlciB0aGUgZml4ZXMgd2UgaGF2ZSBpZGVudGlmaWVkIGZvciB0aGlzIHBvb2wsIGZpeGluZyB0aGVtIHVwCisrICAgICAgICAgYW5kIGFkZGluZyB0aGUgY29uc3RhbnRzIHRvIHRoZSBwb29sIGl0c2VsZi4gICovCisrICAgICAgICBmb3IgKHRoaXNfZml4ID0gZml4OyB0aGlzX2ZpeCAmJiBmdG1wICE9IHRoaXNfZml4OworKyAgICAgICAgICAgICB0aGlzX2ZpeCA9IHRoaXNfZml4LT5uZXh0KQorKyAgICAgICAgICBpZiAoR0VUX0NPREUgKHRoaXNfZml4LT5pbnNuKSAhPSBCQVJSSUVSCisrICAgICAgICAgICAgICAvKiBEbyBub3RoaW5nIGZvciBlbnRyaWVzIHByZXNlbnQganVzdCB0byBmb3JjZSB0aGUgaW5zZXJ0aW9uIG9mCisrCSAgICAgICBhIG1pbmlwb29sLiAqLworKwkgICAgJiYgIUlTX0ZPUkNFX01JTklQT09MICh0aGlzX2ZpeC0+dmFsdWUpKQorKwkgIHsKKysJICAgIHJ0eCBhZGRyID0gcGx1c19jb25zdGFudCAoZ2VuX3J0eF9MQUJFTF9SRUYgKFZPSURtb2RlLAorKwkJCQkJCQkgbWluaXBvb2xfdmVjdG9yX2xhYmVsKSwKKysJCQkJICAgICAgdGhpc19maXgtPm1pbmlwb29sLT5vZmZzZXQpOworKwkgICAgKnRoaXNfZml4LT5sb2MgPSBnZW5fcnR4X01FTSAodGhpc19maXgtPm1vZGUsIGFkZHIpOworKwkgIH0KKysKKysgICAgICBkdW1wX21pbmlwb29sIChsYXN0X2JhcnJpZXItPmluc24pOworKyAgICAgIGZpeCA9IGZ0bXA7CisrICAgIH0KKysKKysgIC8qIEZyZWUgdGhlIG1pbmlwb29sIG1lbW9yeS4gICovCisrICBvYnN0YWNrX2ZyZWUgKCZtaW5pcG9vbF9vYnN0YWNrLCBtaW5pcG9vbF9zdGFydG9iaik7CisrCisrICBhdnIzMl9yZW9yZ19vcHRpbWl6YXRpb24gKCk7CisrfQorKworKworKy8qCisrIEhvb2sgZm9yIGRvaW5nIHNvbWUgZmluYWwgc2Nhbm5pbmcgb2YgaW5zdHJ1Y3Rpb25zLiBEb2VzIG5vdGhpbmcgeWV0Li4uKi8KKyt2b2lkCisrYXZyMzJfZmluYWxfcHJlc2Nhbl9pbnNuIChydHggaW5zbiBBVFRSSUJVVEVfVU5VU0VELAorKwkJCSAgcnR4ICogb3B2ZWMgQVRUUklCVVRFX1VOVVNFRCwKKysJCQkgIGludCBub3BlcmFuZHMgQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICByZXR1cm47CisrfQorKworKworKy8qIEZ1bmN0aW9uIGZvciBjaGFuZ2luZyB0aGUgY29uZGl0aW9uIG9uIHRoZSBuZXh0IGluc3RydWN0aW9uLAorKyAgIHNob3VsZCBiZSB1c2VkIHdoZW4gZW1taXRpbmcgY29tcGFyZSBpbnN0cnVjdGlvbnMgYW5kCisrICAgdGhlIGNvbmRpdGlvbiBvZiB0aGUgbmV4dCBpbnN0cnVjdGlvbiBuZWVkcyB0byBjaGFuZ2UuCisrKi8KKytpbnQKKytzZXRfbmV4dF9pbnNuX2NvbmQgKHJ0eCBjdXJfaW5zbiwgcnR4IG5ld19jb25kKQorK3sKKysgIHJ0eCBuZXh0X2luc24gPSBuZXh0X25vbm5vdGVfaW5zbiAoY3VyX2luc24pOworKyAgIGlmICgobmV4dF9pbnNuICE9IE5VTExfUlRYKQorKyAgICAgICAmJiAoSU5TTl9QIChuZXh0X2luc24pKSkKKysgICAgIHsKKysgICAgICAgaWYgKChHRVRfQ09ERSAoUEFUVEVSTiAobmV4dF9pbnNuKSkgPT0gU0VUKQorKyAgICAgICAgICAgJiYgKEdFVF9DT0RFIChTRVRfU1JDIChQQVRURVJOIChuZXh0X2luc24pKSkgPT0gSUZfVEhFTl9FTFNFKSkKKysgICAgICAgICB7CisrICAgICAgICAgICAvKiBCcmFuY2ggaW5zdHJ1Y3Rpb25zICovCisrICAgICAgICAgICBYRVhQIChTRVRfU1JDIChQQVRURVJOIChuZXh0X2luc24pKSwgMCkgPSBuZXdfY29uZDsKKysgICAgICAgICAgIC8qIEZvcmNlIHRoZSBpbnN0cnVjdGlvbiB0byBiZSByZWNvZ25pemVkIGFnYWluICovCisrICAgICAgICAgICBJTlNOX0NPREUgKG5leHRfaW5zbikgPSAtMTsKKysgICAgICAgICAgIHJldHVybiBUUlVFOworKyAgICAgICAgIH0KKysgICAgICAgZWxzZSBpZiAoKEdFVF9DT0RFIChQQVRURVJOIChuZXh0X2luc24pKSA9PSBTRVQpCisrICAgICAgICAgICAgICAgICYmIGF2cjMyX2NvbXBhcmlzb25fb3BlcmF0b3IgKFNFVF9TUkMgKFBBVFRFUk4gKG5leHRfaW5zbikpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRVRfTU9ERSAoU0VUX1NSQyAoUEFUVEVSTiAobmV4dF9pbnNuKSkpKSkKKysgICAgICAgICB7CisrICAgICAgICAgICAvKiBzY2Mgd2l0aCBubyBjb21wYXJlICovCisrICAgICAgICAgICBTRVRfU1JDIChQQVRURVJOIChuZXh0X2luc24pKSA9IG5ld19jb25kOworKyAgICAgICAgICAgLyogRm9yY2UgdGhlIGluc3RydWN0aW9uIHRvIGJlIHJlY29nbml6ZWQgYWdhaW4gKi8KKysgICAgICAgICAgIElOU05fQ09ERSAobmV4dF9pbnNuKSA9IC0xOworKyAgICAgICAgICAgcmV0dXJuIFRSVUU7CisrICAgICAgICAgfQorKyAgICAgICBlbHNlIGlmIChHRVRfQ09ERSAoUEFUVEVSTiAobmV4dF9pbnNuKSkgPT0gQ09ORF9FWEVDKQorKyAgICAgICAgIHsKKysgICAgICAgICAgIGlmICggR0VUX0NPREUgKG5ld19jb25kKSA9PSBVTlNQRUMgKQorKyAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgQ09ORF9FWEVDX1RFU1QgKFBBVFRFUk4gKG5leHRfaW5zbikpID0KKysgICAgICAgICAgICAgICAgIGdlbl9ydHhfVU5TUEVDIChDQ21vZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuX3J0dmVjICgyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVYUCAoQ09ORF9FWEVDX1RFU1QgKFBBVFRFUk4gKG5leHRfaW5zbikpLCAwKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFWFAgKENPTkRfRVhFQ19URVNUIChQQVRURVJOIChuZXh0X2luc24pKSwgMSkpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhJTlQgKG5ld19jb25kLCAxKSk7CisrICAgICAgICAgICAgIH0KKysgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgIFBVVF9DT0RFKENPTkRfRVhFQ19URVNUIChQQVRURVJOIChuZXh0X2luc24pKSwgR0VUX0NPREUobmV3X2NvbmQpKTsKKysgICAgICAgICAgICAgfQorKyAgICAgICAgIH0KKysgICAgIH0KKysKKysgIHJldHVybiBGQUxTRTsKKyt9CisrCisrLyogRnVuY3Rpb24gZm9yIG9idGFpbmluZyB0aGUgY29uZGl0aW9uIGZvciB0aGUgbmV4dCBpbnN0cnVjdGlvbgorKyAgIGFmdGVyIGN1cl9pbnNuLgorKyovCisrcnR4CisrZ2V0X25leHRfaW5zbl9jb25kIChydHggY3VyX2luc24pCisreworKyAgcnR4IG5leHRfaW5zbiA9IG5leHRfbm9ubm90ZV9pbnNuIChjdXJfaW5zbik7CisrICBydHggY29uZCA9IE5VTExfUlRYOworKyAgaWYgKG5leHRfaW5zbiAhPSBOVUxMX1JUWAorKyAgICAgICYmIElOU05fUCAobmV4dF9pbnNuKSkKKysgICAgeworKyAgICAgIGlmICgoR0VUX0NPREUgKFBBVFRFUk4gKG5leHRfaW5zbikpID09IFNFVCkKKysgICAgICAgICAgJiYgKEdFVF9DT0RFIChTRVRfU1JDIChQQVRURVJOIChuZXh0X2luc24pKSkgPT0gSUZfVEhFTl9FTFNFKSkKKysgICAgICAgIHsKKysgICAgICAgICAgLyogQnJhbmNoIGFuZCBjb25kIGlmIHRoZW4gZWxzZSBpbnN0cnVjdGlvbnMgKi8KKysgICAgICAgICAgY29uZCA9IFhFWFAgKFNFVF9TUkMgKFBBVFRFUk4gKG5leHRfaW5zbikpLCAwKTsKKysgICAgICAgIH0KKysgICAgICBlbHNlIGlmICgoR0VUX0NPREUgKFBBVFRFUk4gKG5leHRfaW5zbikpID09IFNFVCkKKysgICAgICAgICAgICAgICAmJiBhdnIzMl9jb21wYXJpc29uX29wZXJhdG9yIChTRVRfU1JDIChQQVRURVJOIChuZXh0X2luc24pKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRVRfTU9ERSAoU0VUX1NSQyAoUEFUVEVSTiAobmV4dF9pbnNuKSkpKSkKKysgICAgICAgIHsKKysgICAgICAgICAgLyogc2NjIHdpdGggbm8gY29tcGFyZSAqLworKyAgICAgICAgICBjb25kID0gU0VUX1NSQyAoUEFUVEVSTiAobmV4dF9pbnNuKSk7CisrICAgICAgICB9CisrICAgICAgZWxzZSBpZiAoR0VUX0NPREUgKFBBVFRFUk4gKG5leHRfaW5zbikpID09IENPTkRfRVhFQykKKysgICAgICAgIHsKKysgICAgICAgICAgY29uZCA9IENPTkRfRVhFQ19URVNUIChQQVRURVJOIChuZXh0X2luc24pKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgcmV0dXJuIGNvbmQ7CisrfQorKworKworK3J0eAorK2F2cjMyX291dHB1dF9jbXAgKHJ0eCBjb25kLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBydHggb3AwLCBydHggb3AxKQorK3sKKysKKysgIHJ0eCBuZXdfY29uZCA9IE5VTExfUlRYOworKyAgcnR4IG9wc1syXTsKKysgIHJ0eCBjb21wYXJlX3BhdHRlcm47CisrICBvcHNbMF0gPSBvcDA7CisrICBvcHNbMV0gPSBvcDE7CisrCisrICBpZiAoIEdFVF9DT0RFIChvcDApID09IEFORCApCisrICAgIGNvbXBhcmVfcGF0dGVybiA9IG9wMDsKKysgIGVsc2UKKysgICAgY29tcGFyZV9wYXR0ZXJuID0gZ2VuX3J0eF9DT01QQVJFIChtb2RlLCBvcDAsIG9wMSk7CisrCisrICBuZXdfY29uZCA9IGlzX2NvbXBhcmVfcmVkdW5kYW50IChjb21wYXJlX3BhdHRlcm4sIGNvbmQpOworKworKyAgaWYgKG5ld19jb25kICE9IE5VTExfUlRYKQorKyAgICByZXR1cm4gbmV3X2NvbmQ7CisrCisrICAvKiBDaGVjayBpZiB3ZSBhcmUgaW5zZXJ0aW5nIGEgYml0LWxvYWQgaW5zdGVhZCBvZiBhIGNvbXBhcmUuICovCisrICBpZiAoIEdFVF9DT0RFIChvcDApID09IEFORCApCisrICAgIHsKKysgICAgICBvcHNbMF0gPSBYRVhQIChvcDAsIDApOworKyAgICAgIG9wc1sxXSA9IFhFWFAgKG9wMCwgMSk7CisrICAgICAgb3V0cHV0X2FzbV9pbnNuICgiYmxkXHQlMCwgJXAxIiwgb3BzKTsKKysgICAgICByZXR1cm4gY29uZDsKKysgICAgfQorKworKyAgLyogSW5zZXJ0IGNvbXBhcmUgKi8KKysgIHN3aXRjaCAobW9kZSkKKysgICAgeworKyAgICBjYXNlIFFJbW9kZToKKysgICAgICBvdXRwdXRfYXNtX2luc24gKCJjcC5iXHQlMCwgJTEiLCBvcHMpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEhJbW9kZToKKysgICAgICBvdXRwdXRfYXNtX2luc24gKCJjcC5oXHQlMCwgJTEiLCBvcHMpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFNJbW9kZToKKysgICAgICBvdXRwdXRfYXNtX2luc24gKCJjcC53XHQlMCwgJTEiLCBvcHMpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIERJbW9kZToKKysgICAgICBpZiAoR0VUX0NPREUgKG9wMSkgIT0gUkVHKQorKwlvdXRwdXRfYXNtX2luc24gKCJjcC53XHQlMCwgJTFcbmNwY1x0JW0wIiwgb3BzKTsKKysgICAgICBlbHNlCisrCW91dHB1dF9hc21faW5zbiAoImNwLndcdCUwLCAlMVxuY3BjXHQlbTAsICVtMSIsIG9wcyk7CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgaW50ZXJuYWxfZXJyb3IgKCJVbmtub3duIGNvbXBhcmlzb24gbW9kZSIpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrCisrICByZXR1cm4gY29uZDsKKyt9CisrCisraW50CisrYXZyMzJfbG9hZF9tdWx0aXBsZV9vcGVyYXRpb24gKHJ0eCBvcCwKKysJCQkgICAgICAgZW51bSBtYWNoaW5lX21vZGUgbW9kZSBBVFRSSUJVVEVfVU5VU0VEKQorK3sKKysgIGludCBjb3VudCA9IFhWRUNMRU4gKG9wLCAwKTsKKysgIHVuc2lnbmVkIGludCBkZXN0X3JlZ25vOworKyAgcnR4IHNyY19hZGRyOworKyAgcnR4IGVsdDsKKysgIGludCBpID0gMSwgYmFzZSA9IDA7CisrCisrICBpZiAoY291bnQgPD0gMSB8fCBHRVRfQ09ERSAoWFZFQ0VYUCAob3AsIDAsIDApKSAhPSBTRVQpCisrICAgIHJldHVybiAwOworKworKyAgLyogQ2hlY2sgdG8gc2VlIGlmIHRoaXMgbWlnaHQgYmUgYSB3cml0ZS1iYWNrLiAgKi8KKysgIGlmIChHRVRfQ09ERSAoU0VUX1NSQyAoZWx0ID0gWFZFQ0VYUCAob3AsIDAsIDApKSkgPT0gUExVUykKKysgICAgeworKyAgICAgIGkrKzsKKysgICAgICBiYXNlID0gMTsKKysKKysgICAgICAvKiBOb3cgY2hlY2sgaXQgbW9yZSBjYXJlZnVsbHkuICAqLworKyAgICAgIGlmIChHRVRfQ09ERSAoU0VUX0RFU1QgKGVsdCkpICE9IFJFRworKwkgIHx8IEdFVF9DT0RFIChYRVhQIChTRVRfU1JDIChlbHQpLCAwKSkgIT0gUkVHCisrCSAgfHwgR0VUX0NPREUgKFhFWFAgKFNFVF9TUkMgKGVsdCksIDEpKSAhPSBDT05TVF9JTlQKKysJICB8fCBJTlRWQUwgKFhFWFAgKFNFVF9TUkMgKGVsdCksIDEpKSAhPSAoY291bnQgLSAxKSAqIDQpCisrCXJldHVybiAwOworKyAgICB9CisrCisrICAvKiBQZXJmb3JtIGEgcXVpY2sgY2hlY2sgc28gd2UgZG9uJ3QgYmxvdyB1cCBiZWxvdy4gICovCisrICBpZiAoY291bnQgPD0gMQorKyAgICAgIHx8IEdFVF9DT0RFIChYVkVDRVhQIChvcCwgMCwgaSAtIDEpKSAhPSBTRVQKKysgICAgICB8fCBHRVRfQ09ERSAoU0VUX0RFU1QgKFhWRUNFWFAgKG9wLCAwLCBpIC0gMSkpKSAhPSBSRUcKKysgICAgICB8fCBHRVRfQ09ERSAoU0VUX1NSQyAoWFZFQ0VYUCAob3AsIDAsIGkgLSAxKSkpICE9IFVOU1BFQykKKysgICAgcmV0dXJuIDA7CisrCisrICBkZXN0X3JlZ25vID0gUkVHTk8gKFNFVF9ERVNUIChYVkVDRVhQIChvcCwgMCwgaSAtIDEpKSk7CisrICBzcmNfYWRkciA9IFhFWFAgKFNFVF9TUkMgKFhWRUNFWFAgKG9wLCAwLCBpIC0gMSkpLCAwKTsKKysKKysgIGZvciAoOyBpIDwgY291bnQ7IGkrKykKKysgICAgeworKyAgICAgIGVsdCA9IFhWRUNFWFAgKG9wLCAwLCBpKTsKKysKKysgICAgICBpZiAoR0VUX0NPREUgKGVsdCkgIT0gU0VUCisrCSAgfHwgR0VUX0NPREUgKFNFVF9ERVNUIChlbHQpKSAhPSBSRUcKKysJICB8fCBHRVRfTU9ERSAoU0VUX0RFU1QgKGVsdCkpICE9IFNJbW9kZQorKwkgIHx8IEdFVF9DT0RFIChTRVRfU1JDIChlbHQpKSAhPSBVTlNQRUMpCisrCXJldHVybiAwOworKyAgICB9CisrCisrICByZXR1cm4gMTsKKyt9CisrCisraW50CisrYXZyMzJfc3RvcmVfbXVsdGlwbGVfb3BlcmF0aW9uIChydHggb3AsCisrCQkJCWVudW0gbWFjaGluZV9tb2RlIG1vZGUgQVRUUklCVVRFX1VOVVNFRCkKKyt7CisrICBpbnQgY291bnQgPSBYVkVDTEVOIChvcCwgMCk7CisrICBpbnQgc3JjX3JlZ25vOworKyAgcnR4IGRlc3RfYWRkcjsKKysgIHJ0eCBlbHQ7CisrICBpbnQgaSA9IDE7CisrCisrICBpZiAoY291bnQgPD0gMSB8fCBHRVRfQ09ERSAoWFZFQ0VYUCAob3AsIDAsIDApKSAhPSBTRVQpCisrICAgIHJldHVybiAwOworKworKyAgLyogUGVyZm9ybSBhIHF1aWNrIGNoZWNrIHNvIHdlIGRvbid0IGJsb3cgdXAgYmVsb3cuICAqLworKyAgaWYgKGNvdW50IDw9IGkKKysgICAgICB8fCBHRVRfQ09ERSAoWFZFQ0VYUCAob3AsIDAsIGkgLSAxKSkgIT0gU0VUCisrICAgICAgfHwgR0VUX0NPREUgKFNFVF9ERVNUIChYVkVDRVhQIChvcCwgMCwgaSAtIDEpKSkgIT0gTUVNCisrICAgICAgfHwgR0VUX0NPREUgKFNFVF9TUkMgKFhWRUNFWFAgKG9wLCAwLCBpIC0gMSkpKSAhPSBVTlNQRUMpCisrICAgIHJldHVybiAwOworKworKyAgc3JjX3JlZ25vID0gUkVHTk8gKFNFVF9TUkMgKFhWRUNFWFAgKG9wLCAwLCBpIC0gMSkpKTsKKysgIGRlc3RfYWRkciA9IFhFWFAgKFNFVF9ERVNUIChYVkVDRVhQIChvcCwgMCwgaSAtIDEpKSwgMCk7CisrCisrICBmb3IgKDsgaSA8IGNvdW50OyBpKyspCisrICAgIHsKKysgICAgICBlbHQgPSBYVkVDRVhQIChvcCwgMCwgaSk7CisrCisrICAgICAgaWYgKEdFVF9DT0RFIChlbHQpICE9IFNFVAorKwkgIHx8IEdFVF9DT0RFIChTRVRfREVTVCAoZWx0KSkgIT0gTUVNCisrCSAgfHwgR0VUX01PREUgKFNFVF9ERVNUIChlbHQpKSAhPSBTSW1vZGUKKysJICB8fCBHRVRfQ09ERSAoU0VUX1NSQyAoZWx0KSkgIT0gVU5TUEVDKQorKwlyZXR1cm4gMDsKKysgICAgfQorKworKyAgcmV0dXJuIDE7CisrfQorKworK2ludAorK2F2cjMyX3ZhbGlkX21hY21hY19ieXBhc3MgKHJ0eCBpbnNuX291dCwgcnR4IGluc25faW4pCisreworKyAgLyogQ2hlY2sgaWYgdGhleSB1c2UgdGhlIHNhbWUgYWNjdW11bGF0b3IgKi8KKysgIGlmIChydHhfZXF1YWxfcAorKyAgICAgIChTRVRfREVTVCAoUEFUVEVSTiAoaW5zbl9vdXQpKSwgU0VUX0RFU1QgKFBBVFRFUk4gKGluc25faW4pKSkpCisrICAgIHsKKysgICAgICByZXR1cm4gVFJVRTsKKysgICAgfQorKworKyAgcmV0dXJuIEZBTFNFOworK30KKysKKytpbnQKKythdnIzMl92YWxpZF9tdWxtYWNfYnlwYXNzIChydHggaW5zbl9vdXQsIHJ0eCBpbnNuX2luKQorK3sKKysgIC8qCisrICAgICBDaGVjayBpZiB0aGUgbXVsIGluc3RydWN0aW9uIHByb2R1Y2VzIHRoZSBhY2N1bXVsYXRvciBmb3IgdGhlIG1hYworKyAgICAgaW5zdHJ1Y3Rpb24uICovCisrICBpZiAocnR4X2VxdWFsX3AKKysgICAgICAoU0VUX0RFU1QgKFBBVFRFUk4gKGluc25fb3V0KSksIFNFVF9ERVNUIChQQVRURVJOIChpbnNuX2luKSkpKQorKyAgICB7CisrICAgICAgcmV0dXJuIFRSVUU7CisrICAgIH0KKysgIHJldHVybiBGQUxTRTsKKyt9CisrCisraW50CisrYXZyMzJfc3RvcmVfYnlwYXNzIChydHggaW5zbl9vdXQsIHJ0eCBpbnNuX2luKQorK3sKKysgIC8qIE9ubHkgdmFsaWQgYnlwYXNzIGlmIHRoZSBvdXRwdXQgcmVzdWx0IGlzIHVzZWQgYXMgYW4gc3JjIGluIHRoZSBzdG9yZQorKyAgICAgaW5zdHJ1Y3Rpb24sIE5PVCBpZiB1c2VkIGFzIGEgcG9pbnRlciBvciBiYXNlLiAqLworKyAgaWYgKHJ0eF9lcXVhbF9wCisrICAgICAgKFNFVF9ERVNUIChQQVRURVJOIChpbnNuX291dCkpLCBTRVRfU1JDIChQQVRURVJOIChpbnNuX2luKSkpKQorKyAgICB7CisrICAgICAgcmV0dXJuIFRSVUU7CisrICAgIH0KKysKKysgIHJldHVybiBGQUxTRTsKKyt9CisrCisraW50CisrYXZyMzJfbXVsX3dhd19ieXBhc3MgKHJ0eCBpbnNuX291dCwgcnR4IGluc25faW4pCisreworKyAgLyogQ2hlY2sgaWYgdGhlIHJlZ2lzdGVyIGhvbGRpbmcgdGhlIHJlc3VsdCBmcm9tIHRoZSBtdWwgaW5zdHJ1Y3Rpb24gaXMKKysgICAgIHVzZWQgYXMgYSByZXN1bHQgcmVnaXN0ZXIgaW4gdGhlIGlucHV0IGluc3RydWN0aW9uLiAqLworKyAgaWYgKHJ0eF9lcXVhbF9wCisrICAgICAgKFNFVF9ERVNUIChQQVRURVJOIChpbnNuX291dCkpLCBTRVRfREVTVCAoUEFUVEVSTiAoaW5zbl9pbikpKSkKKysgICAgeworKyAgICAgIHJldHVybiBUUlVFOworKyAgICB9CisrCisrICByZXR1cm4gRkFMU0U7CisrfQorKworK2ludAorK2F2cjMyX3ZhbGlkX2xvYWRfZG91YmxlX2J5cGFzcyAocnR4IGluc25fb3V0LCBydHggaW5zbl9pbikKKyt7CisrICAvKiBDaGVjayBpZiB0aGUgZmlyc3QgbG9hZGVkIHdvcmQgaW4gaW5zbl9vdXQgaXMgdXNlZCBpbiBpbnNuX2luLiAqLworKyAgcnR4IGRzdF9yZWc7CisrICBydHggc2Vjb25kX2xvYWRlZF9yZWc7CisrCisrICAvKiBJZiB0aGlzIGlzIGEgZG91YmxlIGFsdSBvcGVyYXRpb24gdGhlbiB0aGUgYnlwYXNzIGlzIG5vdCB2YWxpZCAqLworKyAgaWYgKChnZXRfYXR0cl90eXBlIChpbnNuX2luKSA9PSBUWVBFX0FMVQorKyAgICAgICB8fCBnZXRfYXR0cl90eXBlIChpbnNuX2luKSA9PSBUWVBFX0FMVTIpCisrICAgICAgJiYgKEdFVF9NT0RFX1NJWkUgKEdFVF9NT0RFIChTRVRfREVTVCAoUEFUVEVSTiAoaW5zbl9vdXQpKSkpID4gNCkpCisrICAgIHJldHVybiBGQUxTRTsKKysKKysgIC8qIEdldCB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaW4gdGhlIGxvYWQgKi8KKysgIGlmICghUkVHX1AgKFNFVF9ERVNUIChQQVRURVJOIChpbnNuX291dCkpKSkKKysgICAgcmV0dXJuIEZBTFNFOworKworKyAgZHN0X3JlZyA9IFNFVF9ERVNUIChQQVRURVJOIChpbnNuX291dCkpOworKyAgc2Vjb25kX2xvYWRlZF9yZWcgPSBnZW5fcnR4X1JFRyAoU0ltb2RlLCBSRUdOTyAoZHN0X3JlZykgKyAxKTsKKysKKysgIGlmICghcmVnX21lbnRpb25lZF9wIChzZWNvbmRfbG9hZGVkX3JlZywgUEFUVEVSTiAoaW5zbl9pbikpKQorKyAgICByZXR1cm4gVFJVRTsKKysKKysgIHJldHVybiBGQUxTRTsKKyt9CisrCisrCisraW50CisrYXZyMzJfdmFsaWRfbG9hZF9xdWFkX2J5cGFzcyAocnR4IGluc25fb3V0LCBydHggaW5zbl9pbikKKyt7CisrICAvKgorKyAgICAgQ2hlY2sgaWYgdGhlIHR3byBmaXJzdCBsb2FkZWQgd29yZCBpbiBpbnNuX291dCBhcmUgdXNlZCBpbiBpbnNuX2luLiAqLworKyAgcnR4IGRzdF9yZWc7CisrICBydHggdGhpcmRfbG9hZGVkX3JlZywgZm91cnRoX2xvYWRlZF9yZWc7CisrCisrICAvKiBHZXQgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGluIHRoZSBsb2FkICovCisrICBpZiAoIVJFR19QIChTRVRfREVTVCAoUEFUVEVSTiAoaW5zbl9vdXQpKSkpCisrICAgIHJldHVybiBGQUxTRTsKKysKKysgIGRzdF9yZWcgPSBTRVRfREVTVCAoUEFUVEVSTiAoaW5zbl9vdXQpKTsKKysgIHRoaXJkX2xvYWRlZF9yZWcgPSBnZW5fcnR4X1JFRyAoU0ltb2RlLCBSRUdOTyAoZHN0X3JlZykgKyAyKTsKKysgIGZvdXJ0aF9sb2FkZWRfcmVnID0gZ2VuX3J0eF9SRUcgKFNJbW9kZSwgUkVHTk8gKGRzdF9yZWcpICsgMyk7CisrCisrICBpZiAoIXJlZ19tZW50aW9uZWRfcCAodGhpcmRfbG9hZGVkX3JlZywgUEFUVEVSTiAoaW5zbl9pbikpCisrICAgICAgJiYgIXJlZ19tZW50aW9uZWRfcCAoZm91cnRoX2xvYWRlZF9yZWcsIFBBVFRFUk4gKGluc25faW4pKSkKKysgICAgeworKyAgICAgIHJldHVybiBUUlVFOworKyAgICB9CisrCisrICByZXR1cm4gRkFMU0U7CisrfQorKworKworKworK3J0eAorK2F2cjMyX2lmY3Z0X21vZGlmeV90ZXN0IChjZV9pZl9ibG9ja190ICpjZV9pbmZvLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBydHggdGVzdCApeworKyAgcnR4IGJyYW5jaF9pbnNuOworKyAgcnR4IGNtcF90ZXN0OworKyAgcnR4IGNvbXBhcmVfb3AwOworKyAgcnR4IGNvbXBhcmVfb3AxOworKworKworKyAgaWYgKCAhY2VfaW5mbworKyAgICAgICB8fCB0ZXN0ID09IE5VTExfUlRYCisrICAgICAgIHx8ICFyZWdfbWVudGlvbmVkX3AgKGNjMF9ydHgsIHRlc3QpKQorKyAgICByZXR1cm4gdGVzdDsKKysKKysgIGJyYW5jaF9pbnNuID0gQkJfRU5EIChjZV9pbmZvLT50ZXN0X2JiKTsKKysgIGNtcF90ZXN0ID0gUEFUVEVSTihwcmV2X25vbm5vdGVfaW5zbiAoYnJhbmNoX2luc24pKTsKKysKKysgIGlmIChHRVRfQ09ERShjbXBfdGVzdCkgIT0gU0VUCisrICAgICAgfHwgIUNDMF9QKFhFWFAoY21wX3Rlc3QsIDApKSApCisrICAgIHJldHVybiBjbXBfdGVzdDsKKysKKysgIGlmICggR0VUX0NPREUoU0VUX1NSQyhjbXBfdGVzdCkpID09IENPTVBBUkUgKXsKKysgICAgY29tcGFyZV9vcDAgPSBYRVhQKFNFVF9TUkMoY21wX3Rlc3QpLCAwKTsKKysgICAgY29tcGFyZV9vcDEgPSBYRVhQKFNFVF9TUkMoY21wX3Rlc3QpLCAxKTsKKysgIH0gZWxzZSB7CisrICAgIGNvbXBhcmVfb3AwID0gU0VUX1NSQyhjbXBfdGVzdCk7CisrICAgIGNvbXBhcmVfb3AxID0gY29uc3QwX3J0eDsKKysgIH0KKysKKysgIHJldHVybiBnZW5fcnR4X2ZtdF9lZSAoR0VUX0NPREUodGVzdCksIEdFVF9NT0RFIChjb21wYXJlX29wMCksCisrICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVfb3AwLCBjb21wYXJlX29wMSk7CisrfQorKworKworKworK3J0eAorK2F2cjMyX2lmY3Z0X21vZGlmeV9pbnNuIChjZV9pZl9ibG9ja190ICpjZV9pbmZvLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBydHggcGF0dGVybiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgcnR4IGluc24sCisrICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbnVtX3RydWVfY2hhbmdlcyl7CisrICBydHggdGVzdCA9IENPTkRfRVhFQ19URVNUKHBhdHRlcm4pOworKyAgcnR4IG9wID0gQ09ORF9FWEVDX0NPREUocGF0dGVybik7CisrICBydHggY21wX2luc247CisrICBydHggY29uZF9leGVjX2luc247CisrICBpbnQgaW5wdXRzX3NldF9vdXRzaWRlX2lmYmxvY2sgPSAxOworKyAgYmFzaWNfYmxvY2sgY3VycmVudF9iYiA9IEJMT0NLX0ZPUl9JTlNOIChpbnNuKTsKKysgIHJ0eCBiYl9pbnNuIDsKKysgIGVudW0gbWFjaGluZV9tb2RlIG1vZGUgPSBHRVRfTU9ERSAoWEVYUCAob3AsIDApKTsKKysKKysgIGlmIChDQzBfUChYRVhQKHRlc3QsIDApKSkKKysgICAgdGVzdCA9IGF2cjMyX2lmY3Z0X21vZGlmeV90ZXN0IChjZV9pbmZvLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QgKTsKKysKKysgIHBhdHRlcm4gPSBnZW5fcnR4X0NPTkRfRVhFQyAoVk9JRG1vZGUsIHRlc3QsIG9wKTsKKysKKysgIGlmICggIXJlbG9hZF9jb21wbGV0ZWQgKQorKyAgICB7CisrICAgICAgcnR4IHN0YXJ0OworKyAgICAgIGludCBudW1faW5zbnM7CisrICAgICAgaW50IG1heF9pbnNucyA9IE1BWF9DT05ESVRJT05BTF9FWEVDVVRFOworKworKyAgICAgIGlmICggIWNlX2luZm8gKQorKyAgICAgICAgcmV0dXJuIG9wOworKworKyAgICAgIC8qIENoZWNrIGlmIHRoZSBpbnNuIGlzIG5vdCBzdWl0YWJsZSBmb3IgY29uZGl0aW9uYWwKKysgICAgICAgICBleGVjdXRpb24uICovCisrICAgICAgc3RhcnRfc2VxdWVuY2UgKCk7CisrICAgICAgY29uZF9leGVjX2luc24gPSBlbWl0X2luc24gKHBhdHRlcm4pOworKyAgICAgIGlmICggcmVjb2dfbWVtb2l6ZWQgKGNvbmRfZXhlY19pbnNuKSA8IDAKKysgICAgICAgICAgICYmICFub19uZXdfcHNldWRvcyApCisrICAgICAgICB7CisrICAgICAgICAgIC8qIEluc24gaXMgbm90IHN1aXRhYmxlIGZvciBjb25kaXRpb25hbCBleGVjdXRpb24sIHRyeQorKyAgICAgICAgICAgICB0byBmaXggaXQgdXAgYnkgdXNpbmcgYW4gZXh0cmEgc2NyYXRjaCByZWdpc3RlciBvcgorKyAgICAgICAgICAgICBieSBwdWxsaW5nIHRoZSBvcGVyYXRpb24gb3V0c2lkZSB0aGUgaWYtdGhlbi1lbHNlCisrICAgICAgICAgICAgIGFuZCB0aGVuIGVtaXRpbmcgYSBjb25kaXRpb25hbCBtb3ZlIGluc2lkZSB0aGUgaWYtdGhlbi1lbHNlLiAqLworKyAgICAgICAgICBlbmRfc2VxdWVuY2UgKCk7CisrICAgICAgICAgIGlmICggR0VUX0NPREUgKG9wKSAhPSBTRVQKKysgICAgICAgICAgICAgICB8fCAhUkVHX1AgKFNFVF9ERVNUIChvcCkpCisrICAgICAgICAgICAgICAgfHwgR0VUX0NPREUgKFNFVF9TUkMgKG9wKSkgPT0gSUZfVEhFTl9FTFNFCisrICAgICAgICAgICAgICAgfHwgR0VUX01PREVfU0laRSAobW9kZSkgPiBVTklUU19QRVJfV09SRCApCisrICAgICAgICAgICAgcmV0dXJuIE5VTExfUlRYOworKworKyAgICAgICAgICAvKiBDaGVjayBpZiBhbnkgb2YgdGhlIGlucHV0IG9wZXJhbmRzIHRvIHRoZSBpbnNuIGlzIHNldCBpbnNpZGUgdGhlCisrICAgICAgICAgICAgIGN1cnJlbnQgYmxvY2suICovCisrICAgICAgICAgIGlmICggY3VycmVudF9iYi0+aW5kZXggPT0gY2VfaW5mby0+dGhlbl9iYi0+aW5kZXggKQorKyAgICAgICAgICAgIHN0YXJ0ID0gUFJFVl9JTlNOIChCQl9IRUFEIChjZV9pbmZvLT50aGVuX2JiKSk7CisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBzdGFydCA9IFBSRVZfSU5TTiAoQkJfSEVBRCAoY2VfaW5mby0+ZWxzZV9iYikpOworKworKworKyAgICAgICAgICBmb3IgKCBiYl9pbnNuID0gbmV4dF9ub25ub3RlX2luc24gKHN0YXJ0KTsgYmJfaW5zbiAhPSBpbnNuOyBiYl9pbnNuID0gbmV4dF9ub25ub3RlX2luc24gKGJiX2luc24pICkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBydHggc2V0ID0gc2luZ2xlX3NldCAoYmJfaW5zbik7CisrCisrICAgICAgICAgICAgICBpZiAoIHNldCAmJiByZWdfbWVudGlvbmVkX3AgKFNFVF9ERVNUIChzZXQpLCBTRVRfU1JDIChvcCkpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgaW5wdXRzX3NldF9vdXRzaWRlX2lmYmxvY2sgPSAwOworKyAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICBjbXBfaW5zbiA9IHByZXZfbm9ubm90ZV9pbnNuIChCQl9FTkQgKGNlX2luZm8tPnRlc3RfYmIpKTsKKysKKysKKysgICAgICAgICAgLyogQ2hlY2sgaWYgd2UgY2FuIGluc2VydCBtb3JlIGluc25zLiAqLworKyAgICAgICAgICBudW1faW5zbnMgPSAoIGNlX2luZm8tPm51bV90aGVuX2luc25zICsKKysgICAgICAgICAgICAgICAgICAgICAgICBjZV9pbmZvLT5udW1fZWxzZV9pbnNucyArCisrICAgICAgICAgICAgICAgICAgICAgICAgY2VfaW5mby0+bnVtX2NvbmRfY2xvYmJlcl9pbnNucyArCisrICAgICAgICAgICAgICAgICAgICAgICAgY2VfaW5mby0+bnVtX2V4dHJhX21vdmVfaW5zbnMgKTsKKysKKysgICAgICAgICAgaWYgKCBjZV9pbmZvLT5udW1fZWxzZV9pbnNucyAhPSAwICkKKysgICAgICAgICAgICBtYXhfaW5zbnMgKj0yOworKworKyAgICAgICAgICBpZiAoIG51bV9pbnNucyA+PSBtYXhfaW5zbnMgKQorKyAgICAgICAgICAgIHJldHVybiBOVUxMX1JUWDsKKysKKysgICAgICAgICAgLyogQ2hlY2sgaWYgd2UgaGF2ZSBhbiBpbnN0cnVjdGlvbiB3aGljaCBtaWdodCBiZSBjb252ZXJ0ZWQgdG8KKysgICAgICAgICAgICAgY29uZGl0aW9uYWwgZm9ybSBpZiB3ZSBnaXZlIGl0IGEgc2NyYXRjaCByZWdpc3RlciB0byBjbG9iYmVyLiAqLworKyAgICAgICAgICB7CisrICAgICAgICAgICAgcnR4IGNsb2JiZXJfaW5zbjsKKysgICAgICAgICAgICBydHggc2NyYXRjaF9yZWcgPSBnZW5fcmVnX3J0eCAobW9kZSk7CisrICAgICAgICAgICAgcnR4IG5ld19wYXR0ZXJuID0gY29weV9ydHggKHBhdHRlcm4pOworKyAgICAgICAgICAgIHJ0eCBzZXRfc3JjID0gU0VUX1NSQyAoQ09ORF9FWEVDX0NPREUgKG5ld19wYXR0ZXJuKSk7CisrCisrICAgICAgICAgICAgcnR4IGNsb2JiZXIgPSBnZW5fcnR4X0NMT0JCRVIgKG1vZGUsIHNjcmF0Y2hfcmVnKTsKKysgICAgICAgICAgICBydHggdmVjWzJdID0geyBDT05EX0VYRUNfQ09ERSAobmV3X3BhdHRlcm4pLCBjbG9iYmVyIH07CisrICAgICAgICAgICAgQ09ORF9FWEVDX0NPREUgKG5ld19wYXR0ZXJuKSA9IGdlbl9ydHhfUEFSQUxMRUwgKG1vZGUsIGdlbl9ydHZlY192ICgyLCB2ZWMpKTsKKysKKysgICAgICAgICAgICBzdGFydF9zZXF1ZW5jZSAoKTsKKysgICAgICAgICAgICBjbG9iYmVyX2luc24gPSBlbWl0X2luc24gKG5ld19wYXR0ZXJuKTsKKysKKysgICAgICAgICAgICBpZiAoIHJlY29nX21lbW9pemVkIChjbG9iYmVyX2luc24pID49IDAKKysgICAgICAgICAgICAgICAgICYmICggKCBHRVRfUlRYX0xFTkdUSCAoR0VUX0NPREUgKHNldF9zcmMpKSA9PSAyCisrICAgICAgICAgICAgICAgICAgICAgICAgJiYgQ09OU1RfSU5UX1AgKFhFWFAgKHNldF9zcmMsIDEpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICYmIGF2cjMyX2NvbnN0X29rX2Zvcl9jb25zdHJhaW50X3AgKElOVFZBTCAoWEVYUCAoc2V0X3NyYywgMSkpLCAnSycsICJLczA4IikgKQorKyAgICAgICAgICAgICAgICAgICAgICB8fCAhY2VfaW5mby0+ZWxzZV9iYgorKyAgICAgICAgICAgICAgICAgICAgICB8fCBjdXJyZW50X2JiLT5pbmRleCA9PSBjZV9pbmZvLT5lbHNlX2JiLT5pbmRleCApKQorKyAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBlbmRfc2VxdWVuY2UgKCk7CisrICAgICAgICAgICAgICAgIC8qIEZvcmNlIHRoZSBpbnNuIHRvIGJlIHJlY29nbml6ZWQgYWdhaW4uICovCisrICAgICAgICAgICAgICAgIElOU05fQ09ERSAoaW5zbikgPSAtMTsKKysKKysgICAgICAgICAgICAgICAgLyogSWYgdGhpcyBpcyB0aGUgZmlyc3QgY2hhbmdlIGluIHRoaXMgSUYtYmxvY2sgdGhlbgorKyAgICAgICAgICAgICAgICAgICBzaWduYWwgdGhhdCB3ZSBoYXZlIG1hZGUgYSBjaGFuZ2UuICovCisrICAgICAgICAgICAgICAgIGlmICggY2VfaW5mby0+bnVtX2NvbmRfY2xvYmJlcl9pbnNucyA9PSAwCisrICAgICAgICAgICAgICAgICAgICAgJiYgY2VfaW5mby0+bnVtX2V4dHJhX21vdmVfaW5zbnMgPT0gMCApCisrICAgICAgICAgICAgICAgICAgKm51bV90cnVlX2NoYW5nZXMgKz0gMTsKKysKKysgICAgICAgICAgICAgICAgY2VfaW5mby0+bnVtX2NvbmRfY2xvYmJlcl9pbnNucysrOworKworKyAgICAgICAgICAgICAgICBpZiAoZHVtcF9maWxlKQorKyAgICAgICAgICAgICAgICAgIGZwcmludGYgKGR1bXBfZmlsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG5SZXBsYWNpbmcgSU5TTiAlZCB3aXRoIGFuIGluc24gdXNpbmcgYSBzY3JhdGNoIHJlZ2lzdGVyIGZvciBsYXRlciBpZmN2dCBwYXNzZXMuLi5cbiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5TTl9VSUQgKGluc24pKTsKKysKKysgICAgICAgICAgICAgICAgcmV0dXJuIENPTkRfRVhFQ19DT0RFIChuZXdfcGF0dGVybik7CisrICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgZW5kX3NlcXVlbmNlICgpOworKyAgICAgICAgICB9CisrCisrICAgICAgICAgIGlmICggaW5wdXRzX3NldF9vdXRzaWRlX2lmYmxvY2sgKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIC8qIENoZWNrIGlmIHRoZSBpbnNuIGJlZm9yZSB0aGUgY21wIGlzIGFuIGFuZCB3aGljaCB1c2VkCisrICAgICAgICAgICAgICAgICB0b2dldGhlciB3aXRoIHRoZSBjbXAgY2FuIGJlIG9wdGltaXplZCBpbnRvIGEgYmxkLiBJZgorKyAgICAgICAgICAgICAgICAgc28gdGhlbiB3ZSBzaG91bGQgdHJ5IHRvIHB1dCB0aGUgaW5zbiBiZWZvcmUgdGhlIGFuZAorKyAgICAgICAgICAgICAgICAgc28gdGhhdCB3ZSBjYW4gY2F0Y2ggdGhlIGJsZCBwZWVwaG9sZS4gKi8KKysgICAgICAgICAgICAgIHJ0eCBzZXQ7CisrICAgICAgICAgICAgICBydHggaW5zbl9iZWZvcmVfY21wX2luc24gPSBwcmV2X25vbm5vdGVfaW5zbiAoY21wX2luc24pOworKyAgICAgICAgICAgICAgaWYgKGluc25fYmVmb3JlX2NtcF9pbnNuCisrICAgICAgICAgICAgICAgICAgJiYgKHNldCA9IHNpbmdsZV9zZXQgKGluc25fYmVmb3JlX2NtcF9pbnNuKSkKKysgICAgICAgICAgICAgICAgICAmJiBHRVRfQ09ERSAoU0VUX1NSQyAoc2V0KSkgPT0gQU5ECisrICAgICAgICAgICAgICAgICAgJiYgb25lX2JpdF9zZXRfb3BlcmFuZCAoWEVYUCAoU0VUX1NSQyAoc2V0KSwgMSksIFNJbW9kZSkKKysgICAgICAgICAgICAgICAgICAvKiBBbHNvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbnNuIGRvZXMgbm90IHNldCBhbnkKKysgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgaW5wdXQgb3BlcmFuZHMgdG8gdGhlIGluc24gd2UgYXJlIHB1bGxpbmcgb3V0LiAqLworKyAgICAgICAgICAgICAgICAgICYmICFyZWdfbWVudGlvbmVkX3AgKFNFVF9ERVNUIChzZXQpLCBTRVRfU1JDIChvcCkpICkKKysgICAgICAgICAgICAgICAgY21wX2luc24gPSBwcmV2X25vbm5vdGVfaW5zbiAoY21wX2luc24pOworKworKyAgICAgICAgICAgICAgLyogV2UgY2FuIHRyeSB0byBwdXQgdGhlIG9wZXJhdGlvbiBvdXRzaWRlIHRoZSBpZi10aGVuLWVsc2UKKysgICAgICAgICAgICAgICAgIGJsb2NrcyBhbmQgaW5zZXJ0IGEgbW92ZS4gKi8KKysgICAgICAgICAgICAgIGlmICggIWluc25faW52YWxpZF9wIChpbnNuKQorKyAgICAgICAgICAgICAgICAgICAvKiBEbyBub3QgYWxsb3cgY29uZGl0aW9uYWwgaW5zbnMgdG8gYmUgbW92ZWQgb3V0c2lkZSB0aGUKKysgICAgICAgICAgICAgICAgICAgICAgaWYtdGhlbi1lbHNlLiAqLworKyAgICAgICAgICAgICAgICAgICAmJiAhcmVnX21lbnRpb25lZF9wIChjYzBfcnR4LCBpbnNuKQorKyAgICAgICAgICAgICAgICAgICAvKiBXZSBjYW5ub3QgbW92ZSBtZW1vcnkgbG9hZHMgb3V0c2lkZSBvZiB0aGUgaWYtdGhlbi1lbHNlCisrICAgICAgICAgICAgICAgICAgICAgIHNpbmNlIHRoZSBtZW1vcnkgYWNjZXNzIHNob3VsZCBub3QgYmUgcGVyZm9tZWQgaWYgdGhlCisrICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiBpcyBub3QgbWV0LiAqLworKyAgICAgICAgICAgICAgICAgICAmJiAhbWVtX21lbnRpb25lZF9wIChTRVRfU1JDIChvcCkpICkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgIHJ0eCBzY3JhdGNoX3JlZyA9IGdlbl9yZWdfcnR4IChtb2RlKTsKKysgICAgICAgICAgICAgICAgICBydHggb3BfcGF0dGVybiA9IGNvcHlfcnR4IChvcCk7CisrICAgICAgICAgICAgICAgICAgcnR4IG5ld19pbnNuLCBzZXE7CisrICAgICAgICAgICAgICAgICAgcnR4IGxpbmssIHByZXZfbGluazsKKysgICAgICAgICAgICAgICAgICBvcCA9IGNvcHlfcnR4IChvcCk7CisrICAgICAgICAgICAgICAgICAgLyogRW1pdCB0aGUgb3BlcmF0aW9uIHRvIGEgdGVtcCByZWcgYmVmb3JlIHRoZSBjb21wYXJlLAorKyAgICAgICAgICAgICAgICAgICAgIGFuZCBlbWl0IGEgbW92ZSBpbnNpZGUgdGhlIGlmLXRoZW4tZWxzZSwgaG9waW5nIHRoYXQgdGhlCisrICAgICAgICAgICAgICAgICAgICAgd2hvbGUgaWYtdGhlbi1lbHNlIGNhbiBiZSBjb252ZXJ0ZWQgdG8gY29uZGl0aW9uYWwKKysgICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24uICovCisrICAgICAgICAgICAgICAgICAgU0VUX0RFU1QgKG9wX3BhdHRlcm4pID0gc2NyYXRjaF9yZWc7CisrICAgICAgICAgICAgICAgICAgc3RhcnRfc2VxdWVuY2UgKCk7CisrICAgICAgICAgICAgICAgICAgbmV3X2luc24gPSBlbWl0X2luc24gKG9wX3BhdHRlcm4pOworKyAgICAgICAgICAgICAgICAgIHNlcSA9IGdldF9pbnNucygpOworKyAgICAgICAgICAgICAgICAgIGVuZF9zZXF1ZW5jZSAoKTsKKysKKysgICAgICAgICAgICAgICAgICAvKiBDaGVjayBhZ2FpbiB0aGF0IHRoZSBpbnNuIGlzIHZhbGlkLiBGb3Igc29tZSBpbnNucyB0aGUgaW5zbiBtaWdodAorKyAgICAgICAgICAgICAgICAgICAgIGJlY29tZSBpbnZhbGlkIGlmIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyBjaGFuZ2VkLiBJZS4gZm9yIG11bGFjYworKyAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuICovCisrICAgICAgICAgICAgICAgICAgaWYgKCBpbnNuX2ludmFsaWRfcCAobmV3X2luc24pICkKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMX1JUWDsKKysKKysgICAgICAgICAgICAgICAgICBlbWl0X2luc25fYmVmb3JlX3NldGxvYyAoc2VxLCBjbXBfaW5zbiwgSU5TTl9MT0NBVE9SIChpbnNuKSk7CisrCisrICAgICAgICAgICAgICAgICAgaWYgKGR1bXBfZmlsZSkKKysgICAgICAgICAgICAgICAgICAgIGZwcmludGYgKGR1bXBfZmlsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbk1vdmluZyBJTlNOICVkIG91dCBvZiBJRi1ibG9jayBieSBhZGRpbmcgSU5TTiAlZC4uLlxuIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOU05fVUlEIChpbnNuKSwgSU5TTl9VSUQgKG5ld19pbnNuKSk7CisrCisrICAgICAgICAgICAgICAgICAgY2VfaW5mby0+ZXh0cmFfbW92ZV9pbnNuc1tjZV9pbmZvLT5udW1fZXh0cmFfbW92ZV9pbnNuc10gPSBpbnNuOworKyAgICAgICAgICAgICAgICAgIGNlX2luZm8tPm1vdmVkX2luc25zW2NlX2luZm8tPm51bV9leHRyYV9tb3ZlX2luc25zXSA9IG5ld19pbnNuOworKyAgICAgICAgICAgICAgICAgIFhFWFAgKG9wLCAxKSA9IHNjcmF0Y2hfcmVnOworKyAgICAgICAgICAgICAgICAgIC8qIEZvcmNlIHRoZSBpbnNuIHRvIGJlIHJlY29nbml6ZWQgYWdhaW4uICovCisrICAgICAgICAgICAgICAgICAgSU5TTl9DT0RFIChpbnNuKSA9IC0xOworKworKyAgICAgICAgICAgICAgICAgIC8qIE1vdmUgUkVHX0RFQUQgbm90ZXMgdG8gdGhlIG1vdmVkIGluc24uICovCisrICAgICAgICAgICAgICAgICAgcHJldl9saW5rID0gTlVMTF9SVFg7CisrICAgICAgICAgICAgICAgICAgZm9yIChsaW5rID0gUkVHX05PVEVTIChpbnNuKTsgbGluazsgbGluayA9IFhFWFAgKGxpbmssIDEpKQorKyAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICBpZiAoUkVHX05PVEVfS0lORCAobGluaykgPT0gUkVHX0RFQUQpCisrICAgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWRkIHRoZSBSRUdfREVBRCBub3RlIHRvIHRoZSBuZXcgaW5zbi4gKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0eCBkZWFkX3JlZyA9IFhFWFAgKGxpbmssIDApOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX05PVEVTIChuZXdfaW5zbikgPSBnZW5fcnR4X0VYUFJfTElTVCAoUkVHX0RFQUQsIGRlYWRfcmVnLCBSRUdfTk9URVMgKG5ld19pbnNuKSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1vdmUgdGhlIFJFR19ERUFEIG5vdGUgZnJvbSB0aGUgaW5zbiB3ZSBjb252ZXJ0IHRvIGEgbW92ZS4gKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcHJldl9saW5rICkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVYUCAocHJldl9saW5rLCAxKSA9IFhFWFAgKGxpbmssIDEpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfTk9URVMgKGluc24pID0gWEVYUCAobGluaywgMSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldl9saW5rID0gbGluazsKKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgLyogQWRkIGEgUkVHX0RFQUQgbm90ZSB0byBzaWduYWwgdGhhdCB0aGUgc2NyYXRjaCByZWdpc3RlciBpcyBkZWFkLiAqLworKyAgICAgICAgICAgICAgICAgIFJFR19OT1RFUyAoaW5zbikgPSBnZW5fcnR4X0VYUFJfTElTVCAoUkVHX0RFQUQsIHNjcmF0Y2hfcmVnLCBSRUdfTk9URVMgKGluc24pKTsKKysKKysgICAgICAgICAgICAgICAgICAvKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBjaGFuZ2UgaW4gdGhpcyBJRi1ibG9jayB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgc2lnbmFsIHRoYXQgd2UgaGF2ZSBtYWRlIGEgY2hhbmdlLiAqLworKyAgICAgICAgICAgICAgICAgIGlmICggY2VfaW5mby0+bnVtX2NvbmRfY2xvYmJlcl9pbnNucyA9PSAwCisrICAgICAgICAgICAgICAgICAgICAgICAmJiBjZV9pbmZvLT5udW1fZXh0cmFfbW92ZV9pbnNucyA9PSAwICkKKysgICAgICAgICAgICAgICAgICAgICpudW1fdHJ1ZV9jaGFuZ2VzICs9IDE7CisrCisrICAgICAgICAgICAgICAgICAgY2VfaW5mby0+bnVtX2V4dHJhX21vdmVfaW5zbnMrKzsKKysgICAgICAgICAgICAgICAgICByZXR1cm4gb3A7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgIC8qIFdlIGZhaWxlZCB0byBmaXh1cCB0aGUgaW5zbnMsIHNvIHRoaXMgaWYtdGhlbi1lbHNlIGNhbiBub3QgYmUgbWFkZQorKyAgICAgICAgICAgICBjb25kaXRpb25hbC4gSnVzdCByZXR1cm4gTlVMTF9SVFggc28gdGhhdCB0aGUgaWYtdGhlbi1lbHNlIGNvbnZlcnNpb24KKysgICAgICAgICAgICAgZm9yIHRoaXMgaWYtdGhlbi1lbHNlIHdpbGwgYmUgY2FuY2VsbGVkLiAqLworKyAgICAgICAgICByZXR1cm4gTlVMTF9SVFg7CisrICAgICAgICB9CisrICAgICAgZW5kX3NlcXVlbmNlICgpOworKyAgICAgIHJldHVybiBvcDsKKysgICAgfQorKworKyAgLyogU2lnbmFsIHRoYXQgd2UgaGF2ZSBzdGFydGVkIGlmIGNvbnZlcnNpb24gYWZ0ZXIgcmVsb2FkLCB3aGljaCBtZWFucworKyAgICAgdGhhdCBpdCBzaG91bGQgYmUgc2FmZSB0byBzcGxpdCBhbGwgdGhlIHByZWRpY2FibGUgY2xvYmJlciBpbnNucyB3aGljaAorKyAgICAgZGlkIG5vdCBiZWNvbWUgY29uZF9leGVjIGJhY2sgaW50byBhIHNpbXBsZXIgZm9ybSBpZiBwb3NzaWJsZS4gKi8KKysgIGNmdW4tPm1hY2hpbmUtPmlmY3Z0X2FmdGVyX3JlbG9hZCA9IDE7CisrCisrICByZXR1cm4gcGF0dGVybjsKKyt9CisrCisrCisrdm9pZAorK2F2cjMyX2lmY3Z0X21vZGlmeV9jYW5jZWwgKCBjZV9pZl9ibG9ja190ICpjZV9pbmZvLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm51bV90cnVlX2NoYW5nZXMpCisreworKyAgaW50IG47CisrCisrICBpZiAoIGNlX2luZm8tPm51bV9leHRyYV9tb3ZlX2luc25zID4gMAorKyAgICAgICAmJiBjZV9pbmZvLT5udW1fY29uZF9jbG9iYmVyX2luc25zID09IDApCisrICAgIC8qIFNpZ25hbCB0aGF0IHdlIGRpZCBub3QgZG8gYW55IGNoYW5nZXMgYWZ0ZXIgYWxsLiAqLworKyAgICAqbnVtX3RydWVfY2hhbmdlcyAtPSAxOworKworKyAgLyogUmVtb3ZlIGFueSBpbnNlcnRlZCBtb3ZlIGluc25zLiAqLworKyAgZm9yICggbiA9IDA7IG4gPCBjZV9pbmZvLT5udW1fZXh0cmFfbW92ZV9pbnNuczsgbisrICkKKysgICAgeworKyAgICAgIHJ0eCBsaW5rLCBwcmV2X2xpbms7CisrCisrICAgICAgLyogUmVtb3ZlIFJFR19ERUFEIG5vdGUgc2luY2Ugd2UgYXJlIG5vdCBuZWVkaW5nIHRoZSBzY3JhdGNoIHJlZ2lzdGVyIGFueXdheS4gKi8KKysgICAgICBwcmV2X2xpbmsgPSBOVUxMX1JUWDsKKysgICAgICBmb3IgKGxpbmsgPSBSRUdfTk9URVMgKGNlX2luZm8tPmV4dHJhX21vdmVfaW5zbnNbbl0pOyBsaW5rOyBsaW5rID0gWEVYUCAobGluaywgMSkpCisrICAgICAgICB7CisrICAgICAgICAgIGlmIChSRUdfTk9URV9LSU5EIChsaW5rKSA9PSBSRUdfREVBRCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBpZiAoIHByZXZfbGluayApCisrICAgICAgICAgICAgICAgIFhFWFAgKHByZXZfbGluaywgMSkgPSBYRVhQIChsaW5rLCAxKTsKKysgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgUkVHX05PVEVTIChjZV9pbmZvLT5leHRyYV9tb3ZlX2luc25zW25dKSA9IFhFWFAgKGxpbmssIDEpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIHByZXZfbGluayA9IGxpbms7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgIC8qIFJldmVydCBhbGwgcmVnX25vdGVzIGZvciB0aGUgbW92ZWQgaW5zbi4gKi8KKysgICAgICBmb3IgKGxpbmsgPSBSRUdfTk9URVMgKGNlX2luZm8tPm1vdmVkX2luc25zW25dKTsgbGluazsgbGluayA9IFhFWFAgKGxpbmssIDEpKQorKyAgICAgICAgeworKyAgICAgICAgICBSRUdfTk9URVMgKGNlX2luZm8tPmV4dHJhX21vdmVfaW5zbnNbbl0pID0gZ2VuX3J0eF9FWFBSX0xJU1QgKFJFR19OT1RFX0tJTkQgKGxpbmspLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFWFAgKGxpbmssIDApLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19OT1RFUyAoY2VfaW5mby0+ZXh0cmFfbW92ZV9pbnNuc1tuXSkpOworKyAgICAgICAgfQorKworKyAgICAgIC8qIFJlbW92ZSB0aGUgbW92ZWQgaW5zbi4gKi8KKysgICAgICByZW1vdmVfaW5zbiAoIGNlX2luZm8tPm1vdmVkX2luc25zW25dICk7CisrICAgIH0KKyt9CisrCisrLyogRnVuY3Rpb24gcmV0dXJuaW5nIFRSVUUgaWYgSU5TTiB3aXRoIE9QRVJBTkRTIGlzIGEgc3BsaXR0YWJsZQorKyAgIGNvbmRpdGlvbmFsIGltbWVkaWF0ZSBjbG9iYmVyIGluc24uIFdlIGFzc3VtZSB0aGF0IHRoZSBpbnNuIGlzCisrICAgYWxyZWFkeSBhIGNvbmRpdGlvbmFsIGltbWVkaWF0ZSBjbG9iYmVyIGluc25zIGFuZCBkbyBub3QgY2hlY2sKKysgICBmb3IgdGhhdC4gKi8KKytpbnQKKythdnIzMl9jb25kX2ltbV9jbG9iYmVyX3NwbGl0dGFibGUgKHJ0eCBpbnNuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnR4IG9wZXJhbmRzW10pCisreworKyAgaWYgKCAoUkVHTk8gKG9wZXJhbmRzWzBdKSAhPSBSRUdOTyAob3BlcmFuZHNbMV0pKQorKyAgICAgICAmJiAobG9naWNhbF9iaW5hcnlfb3BlcmF0b3IgKFNFVF9TUkMgKFhWRUNFWFAgKFBBVFRFUk4gKGluc24pLDAsMCkpLCBWT0lEbW9kZSkKKysgICAgICAgICAgIHx8IChHRVRfQ09ERSAoU0VUX1NSQyAoWFZFQ0VYUCAoUEFUVEVSTiAoaW5zbiksMCwwKSkpID09IFBMVVMKKysgICAgICAgICAgICAgICAmJiAhYXZyMzJfY29uc3Rfb2tfZm9yX2NvbnN0cmFpbnRfcCAoSU5UVkFMIChvcGVyYW5kc1syXSksICdJJywgIklzMTYiKSkKKysgICAgICAgICAgIHx8IChHRVRfQ09ERSAoU0VUX1NSQyAoWFZFQ0VYUCAoUEFUVEVSTiAoaW5zbiksMCwwKSkpID09IE1JTlVTCisrICAgICAgICAgICAgICAgJiYgIWF2cjMyX2NvbnN0X29rX2Zvcl9jb25zdHJhaW50X3AgKElOVFZBTCAob3BlcmFuZHNbMl0pLCAnSycsICJLczE2IikpKSApCisrICAgIHJldHVybiBGQUxTRTsKKysKKysgIHJldHVybiBUUlVFOworK30KKysKKysvKiBGdW5jdGlvbiBmb3IgZ2V0dGluZyBhbiBpbnRlZ2VyIHZhbHVlIGZyb20gYSBjb25zdF9pbnQgb3IgY29uc3RfZG91YmxlCisrICAgZXhwcmVzc2lvbiByZWdhcmRsZXNzIG9mIHRoZSBIT1NUX1dJREVfSU5UIHNpemUuIEVhY2ggdGFyZ2V0IGNwdSB3b3JkCisrICAgd2lsbCBiZSBwdXQgaW50byB0aGUgdmFsIGFycmF5IHdoZXJlIHRoZSBMU1cgd2lsbCBiZSBzdG9yZWQgYXQgdGhlIGxvd2VzdAorKyAgIGFkZHJlc3MgYW5kIHNvIGZvcnRoLiBBc3N1bWVzIHRoYXQgY29uc3RfZXhwciBpcyBlaXRoZXIgYSBjb25zdF9pbnQgb3IKKysgICBjb25zdF9kb3VibGUuIE9ubHkgdmFsaWQgZm9yIG1vZGVzIHdoaWNoIGhhdmUgc2l6ZXMgdGhhdCBhcmUgYSBtdWx0aXBsZQorKyAgIG9mIHRoZSB3b3JkIHNpemUuCisrKi8KKyt2b2lkCisrYXZyMzJfZ2V0X2ludHZhbCAoZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKysgICAgICAgICAgICAgICAgICBydHggY29uc3RfZXhwciwKKysgICAgICAgICAgICAgICAgICBIT1NUX1dJREVfSU5UICp2YWwpCisreworKyAgaW50IHdvcmRzX2luX21vZGUgPSBHRVRfTU9ERV9TSVpFIChtb2RlKS9VTklUU19QRVJfV09SRDsKKysgIGNvbnN0IGludCB3b3Jkc19pbl9jb25zdF9pbnQgPSBIT1NUX0JJVFNfUEVSX1dJREVfSU5UIC8gQklUU19QRVJfV09SRDsKKysKKysgIGlmICggR0VUX0NPREUoY29uc3RfZXhwcikgPT0gQ09OU1RfRE9VQkxFICl7CisrICAgIEhPU1RfV0lERV9JTlQgaGkgPSBDT05TVF9ET1VCTEVfSElHSChjb25zdF9leHByKTsKKysgICAgSE9TVF9XSURFX0lOVCBsbyA9IENPTlNUX0RPVUJMRV9MT1coY29uc3RfZXhwcik7CisrICAgIC8qIEV2YWx1YXRlIGhpIGFuZCBsbyB2YWx1ZXMgb2YgY29uc3RfZG91YmxlLiAqLworKyAgICBhdnIzMl9nZXRfaW50dmFsIChtb2RlX2Zvcl9zaXplIChIT1NUX0JJVFNfUEVSX1dJREVfSU5ULCBNT0RFX0lOVCwgMCksCisrICAgICAgICAgICAgICAgICAgICAgIEdFTl9JTlQgKGxvKSwKKysgICAgICAgICAgICAgICAgICAgICAgJnZhbFswXSk7CisrICAgIGF2cjMyX2dldF9pbnR2YWwgKG1vZGVfZm9yX3NpemUgKEhPU1RfQklUU19QRVJfV0lERV9JTlQsIE1PREVfSU5ULCAwKSwKKysgICAgICAgICAgICAgICAgICAgICAgR0VOX0lOVCAoaGkpLAorKyAgICAgICAgICAgICAgICAgICAgICAmdmFsW3dvcmRzX2luX2NvbnN0X2ludF0pOworKyAgfSBlbHNlIGlmICggR0VUX0NPREUoY29uc3RfZXhwcikgPT0gQ09OU1RfSU5UICl7CisrICAgIEhPU1RfV0lERV9JTlQgdmFsdWUgPSBJTlRWQUwoY29uc3RfZXhwcik7CisrICAgIGludCB3b3JkOworKyAgICBmb3IgKCB3b3JkID0gMDsgKHdvcmQgPCB3b3Jkc19pbl9tb2RlKSAmJiAod29yZCA8IHdvcmRzX2luX2NvbnN0X2ludCk7IHdvcmQrKyApeworKyAgICAgIC8qIFNoaWZ0IHdvcmQgdXAgdG8gdGhlIE1TVyBhbmQgc2hpZnQgZG93biBhZ2FpbiB0byBleHRyYWN0IHRoZQorKyAgICAgICAgIHdvcmQgYW5kIHNpZ24tZXh0ZW5kLiAqLworKyAgICAgIGludCBsc2hpZnQgPSAod29yZHNfaW5fY29uc3RfaW50IC0gd29yZCAtIDEpICogQklUU19QRVJfV09SRDsKKysgICAgICBpbnQgcnNoaWZ0ID0gKHdvcmRzX2luX2NvbnN0X2ludC0xKSAqIEJJVFNfUEVSX1dPUkQ7CisrICAgICAgdmFsW3dvcmRdID0gKHZhbHVlIDw8IGxzaGlmdCkgPj4gcnNoaWZ0OworKyAgICB9CisrCisrICAgIGZvciAoIDsgd29yZCA8IHdvcmRzX2luX21vZGU7IHdvcmQrKyApeworKyAgICAgIC8qIEp1c3QgcHV0IHRoZSBzaWduIGJpdHMgaW4gdGhlIHJlbWFpbmluZyB3b3Jkcy4gKi8KKysgICAgICB2YWxbd29yZF0gPSB2YWx1ZSA8IDAgPyAtMSA6IDA7CisrICAgIH0KKysgIH0KKyt9CisrCisrdm9pZAorK2F2cjMyX3NwbGl0X2NvbnN0X2V4cHIgKGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBtYWNoaW5lX21vZGUgbmV3X21vZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgcnR4IGV4cHIsCisrICAgICAgICAgICAgICAgICAgICAgICAgcnR4ICpzcGxpdF9leHByKQorK3sKKysgIGludCBpLCB3b3JkOworKyAgaW50IHdvcmRzX2luX2ludHZhbCA9IEdFVF9NT0RFX1NJWkUgKG1vZGUpL1VOSVRTX1BFUl9XT1JEOworKyAgaW50IHdvcmRzX2luX3NwbGl0X3ZhbHVlcyA9IEdFVF9NT0RFX1NJWkUgKG5ld19tb2RlKS9VTklUU19QRVJfV09SRDsKKysgIGNvbnN0IGludCB3b3Jkc19pbl9jb25zdF9pbnQgPSBIT1NUX0JJVFNfUEVSX1dJREVfSU5UIC8gQklUU19QRVJfV09SRDsKKysgIEhPU1RfV0lERV9JTlQgKnZhbCA9IGFsbG9jYSAod29yZHNfaW5faW50dmFsICogVU5JVFNfUEVSX1dPUkQpOworKworKyAgYXZyMzJfZ2V0X2ludHZhbCAobW9kZSwgZXhwciwgdmFsKTsKKysKKysgIGZvciAoIGk9MDsgaSA8ICh3b3Jkc19pbl9pbnR2YWwvd29yZHNfaW5fc3BsaXRfdmFsdWVzKTsgaSsrICkKKysgICAgeworKyAgICAgIEhPU1RfV0lERV9JTlQgdmFsdWVfbG8gPSAwLCB2YWx1ZV9oaSA9IDA7CisrICAgICAgZm9yICggd29yZCA9IDA7IHdvcmQgPCB3b3Jkc19pbl9zcGxpdF92YWx1ZXM7IHdvcmQrKyApCisrICAgICAgICB7CisrICAgICAgICAgIGlmICggd29yZCA+PSB3b3Jkc19pbl9jb25zdF9pbnQgKQorKyAgICAgICAgICAgIHZhbHVlX2hpIHw9ICgodmFsW2kgKiB3b3Jkc19pbl9zcGxpdF92YWx1ZXMgKyB3b3JkXSAmCisrICAgICAgICAgICAgICAgICAgICAgICAgICAoKChIT1NUX1dJREVfSU5UKTEgPDwgQklUU19QRVJfV09SRCktMSkpCisrICAgICAgICAgICAgICAgICAgICAgICAgIDw8IChCSVRTX1BFUl9XT1JEICogKHdvcmQgLSB3b3Jkc19pbl9jb25zdF9pbnQpKSk7CisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB2YWx1ZV9sbyB8PSAoKHZhbFtpICogd29yZHNfaW5fc3BsaXRfdmFsdWVzICsgd29yZF0gJgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoSE9TVF9XSURFX0lOVCkxIDw8IEJJVFNfUEVSX1dPUkQpLTEpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICA8PCAoQklUU19QRVJfV09SRCAqIHdvcmQpKTsKKysgICAgICAgIH0KKysgICAgICBzcGxpdF9leHByW2ldID0gaW1tZWRfZG91YmxlX2NvbnN0KHZhbHVlX2xvLCB2YWx1ZV9oaSwgbmV3X21vZGUpOworKyAgICB9CisrfQorKworKworKy8qIFNldCB1cCBsaWJyYXJ5IGZ1bmN0aW9ucyB0byBjb21wbHkgdG8gQVZSMzIgQUJJICAqLworKworK3N0YXRpYyB2b2lkCisrYXZyMzJfaW5pdF9saWJmdW5jcyAodm9pZCkKKyt7CisrICAvKiBDb252ZXJ0IGdjYyBydW4tdGltZSBmdW5jdGlvbiBuYW1lcyB0byBBVlIzMiBBQkkgbmFtZXMgKi8KKysKKysgIC8qIERvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYy4gKi8KKysgIHNldF9vcHRhYl9saWJmdW5jIChuZWdfb3B0YWIsIERGbW9kZSwgTlVMTCk7CisrCisrICAvKiBEb3VibGUtcHJlY2lzaW9uIGNvbXBhcmlzb25zLiAgKi8KKysgIHNldF9vcHRhYl9saWJmdW5jIChlcV9vcHRhYiwgREZtb2RlLCAiX19hdnIzMl9mNjRfY21wX2VxIik7CisrICBzZXRfb3B0YWJfbGliZnVuYyAobmVfb3B0YWIsIERGbW9kZSwgTlVMTCk7CisrICBzZXRfb3B0YWJfbGliZnVuYyAobHRfb3B0YWIsIERGbW9kZSwgIl9fYXZyMzJfZjY0X2NtcF9sdCIpOworKyAgc2V0X29wdGFiX2xpYmZ1bmMgKGxlX29wdGFiLCBERm1vZGUsIE5VTEwpOworKyAgc2V0X29wdGFiX2xpYmZ1bmMgKGdlX29wdGFiLCBERm1vZGUsICJfX2F2cjMyX2Y2NF9jbXBfZ2UiKTsKKysgIHNldF9vcHRhYl9saWJmdW5jIChndF9vcHRhYiwgREZtb2RlLCBOVUxMKTsKKysKKysgIC8qIFNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYy4gKi8KKysgIHNldF9vcHRhYl9saWJmdW5jIChzbXVsX29wdGFiLCBTRm1vZGUsICJfX2F2cjMyX2YzMl9tdWwiKTsKKysgIHNldF9vcHRhYl9saWJmdW5jIChuZWdfb3B0YWIsIFNGbW9kZSwgTlVMTCk7CisrCisrICAvKiBTaW5nbGUtcHJlY2lzaW9uIGNvbXBhcmlzb25zLiAgKi8KKysgIHNldF9vcHRhYl9saWJmdW5jIChlcV9vcHRhYiwgU0Ztb2RlLCAiX19hdnIzMl9mMzJfY21wX2VxIik7CisrICBzZXRfb3B0YWJfbGliZnVuYyAobmVfb3B0YWIsIFNGbW9kZSwgTlVMTCk7CisrICBzZXRfb3B0YWJfbGliZnVuYyAobHRfb3B0YWIsIFNGbW9kZSwgIl9fYXZyMzJfZjMyX2NtcF9sdCIpOworKyAgc2V0X29wdGFiX2xpYmZ1bmMgKGxlX29wdGFiLCBTRm1vZGUsIE5VTEwpOworKyAgc2V0X29wdGFiX2xpYmZ1bmMgKGdlX29wdGFiLCBTRm1vZGUsICJfX2F2cjMyX2YzMl9jbXBfZ2UiKTsKKysgIHNldF9vcHRhYl9saWJmdW5jIChndF9vcHRhYiwgU0Ztb2RlLCBOVUxMKTsKKysKKysgIC8qIEZsb2F0aW5nLXBvaW50IHRvIGludGVnZXIgY29udmVyc2lvbnMuICovCisrICBzZXRfY29udl9saWJmdW5jIChzZml4X29wdGFiLCBTSW1vZGUsIERGbW9kZSwgIl9fYXZyMzJfZjY0X3RvX3MzMiIpOworKyAgc2V0X2NvbnZfbGliZnVuYyAodWZpeF9vcHRhYiwgU0ltb2RlLCBERm1vZGUsICJfX2F2cjMyX2Y2NF90b191MzIiKTsKKysgIHNldF9jb252X2xpYmZ1bmMgKHNmaXhfb3B0YWIsIERJbW9kZSwgREZtb2RlLCAiX19hdnIzMl9mNjRfdG9fczY0Iik7CisrICBzZXRfY29udl9saWJmdW5jICh1Zml4X29wdGFiLCBESW1vZGUsIERGbW9kZSwgIl9fYXZyMzJfZjY0X3RvX3U2NCIpOworKyAgc2V0X2NvbnZfbGliZnVuYyAoc2ZpeF9vcHRhYiwgU0ltb2RlLCBTRm1vZGUsICJfX2F2cjMyX2YzMl90b19zMzIiKTsKKysgIHNldF9jb252X2xpYmZ1bmMgKHVmaXhfb3B0YWIsIFNJbW9kZSwgU0Ztb2RlLCAiX19hdnIzMl9mMzJfdG9fdTMyIik7CisrICBzZXRfY29udl9saWJmdW5jIChzZml4X29wdGFiLCBESW1vZGUsIFNGbW9kZSwgIl9fYXZyMzJfZjMyX3RvX3M2NCIpOworKyAgc2V0X2NvbnZfbGliZnVuYyAodWZpeF9vcHRhYiwgREltb2RlLCBTRm1vZGUsICJfX2F2cjMyX2YzMl90b191NjQiKTsKKysKKysgIC8qIENvbnZlcnNpb25zIGJldHdlZW4gZmxvYXRpbmcgdHlwZXMuICAqLworKyAgc2V0X2NvbnZfbGliZnVuYyAodHJ1bmNfb3B0YWIsIFNGbW9kZSwgREZtb2RlLCAiX19hdnIzMl9mNjRfdG9fZjMyIik7CisrICBzZXRfY29udl9saWJmdW5jIChzZXh0X29wdGFiLCBERm1vZGUsIFNGbW9kZSwgIl9fYXZyMzJfZjMyX3RvX2Y2NCIpOworKworKyAgLyogSW50ZWdlciB0byBmbG9hdGluZy1wb2ludCBjb252ZXJzaW9ucy4gIFRhYmxlIDguICAqLworKyAgc2V0X2NvbnZfbGliZnVuYyAoc2Zsb2F0X29wdGFiLCBERm1vZGUsIFNJbW9kZSwgIl9fYXZyMzJfczMyX3RvX2Y2NCIpOworKyAgc2V0X2NvbnZfbGliZnVuYyAoc2Zsb2F0X29wdGFiLCBERm1vZGUsIERJbW9kZSwgIl9fYXZyMzJfczY0X3RvX2Y2NCIpOworKyAgc2V0X2NvbnZfbGliZnVuYyAoc2Zsb2F0X29wdGFiLCBTRm1vZGUsIFNJbW9kZSwgIl9fYXZyMzJfczMyX3RvX2YzMiIpOworKyAgc2V0X2NvbnZfbGliZnVuYyAoc2Zsb2F0X29wdGFiLCBTRm1vZGUsIERJbW9kZSwgIl9fYXZyMzJfczY0X3RvX2YzMiIpOworKyAgc2V0X2NvbnZfbGliZnVuYyAodWZsb2F0X29wdGFiLCBERm1vZGUsIFNJbW9kZSwgIl9fYXZyMzJfdTMyX3RvX2Y2NCIpOworKyAgc2V0X2NvbnZfbGliZnVuYyAodWZsb2F0X29wdGFiLCBTRm1vZGUsIFNJbW9kZSwgIl9fYXZyMzJfdTMyX3RvX2YzMiIpOworKyAgLyogVE9ETzogQWRkIHRoZXNlIHRvIGdjYyBsaWJyYXJ5IGZ1bmN0aW9ucyAqLworKyAgLy9zZXRfY29udl9saWJmdW5jICh1ZmxvYXRfb3B0YWIsIERGbW9kZSwgREltb2RlLCBOVUxMKTsKKysgIC8vc2V0X2NvbnZfbGliZnVuYyAodWZsb2F0X29wdGFiLCBTRm1vZGUsIERJbW9kZSwgTlVMTCk7CisrCisrICAvKiBMb25nIGxvbmcuICBUYWJsZSA5LiAgKi8KKysgIHNldF9vcHRhYl9saWJmdW5jIChzbXVsX29wdGFiLCBESW1vZGUsICJfX2F2cjMyX211bDY0Iik7CisrICBzZXRfb3B0YWJfbGliZnVuYyAoc2Rpdl9vcHRhYiwgREltb2RlLCAiX19hdnIzMl9zZGl2NjQiKTsKKysgIHNldF9vcHRhYl9saWJmdW5jICh1ZGl2X29wdGFiLCBESW1vZGUsICJfX2F2cjMyX3VkaXY2NCIpOworKyAgc2V0X29wdGFiX2xpYmZ1bmMgKHNtb2Rfb3B0YWIsIERJbW9kZSwgIl9fYXZyMzJfc21vZDY0Iik7CisrICBzZXRfb3B0YWJfbGliZnVuYyAodW1vZF9vcHRhYiwgREltb2RlLCAiX19hdnIzMl91bW9kNjQiKTsKKysgIHNldF9vcHRhYl9saWJmdW5jIChhc2hsX29wdGFiLCBESW1vZGUsICJfX2F2cjMyX2xzbDY0Iik7CisrICBzZXRfb3B0YWJfbGliZnVuYyAobHNocl9vcHRhYiwgREltb2RlLCAiX19hdnIzMl9sc3I2NCIpOworKyAgc2V0X29wdGFiX2xpYmZ1bmMgKGFzaHJfb3B0YWIsIERJbW9kZSwgIl9fYXZyMzJfYXNyNjQiKTsKKysKKysgIC8qIEZsb2F0aW5nIHBvaW50IGxpYnJhcnkgZnVuY3Rpb25zIHdoaWNoIGhhdmUgZmFzdCB2ZXJzaW9ucy4gKi8KKysgIGlmICggVEFSR0VUX0ZBU1RfRkxPQVQgKQorKyAgICB7CisrICAgICAgc2V0X29wdGFiX2xpYmZ1bmMgKHNkaXZfb3B0YWIsIERGbW9kZSwgIl9fYXZyMzJfZjY0X2Rpdl9mYXN0Iik7CisrICAgICAgc2V0X29wdGFiX2xpYmZ1bmMgKHNtdWxfb3B0YWIsIERGbW9kZSwgIl9fYXZyMzJfZjY0X211bF9mYXN0Iik7CisrICAgICAgc2V0X29wdGFiX2xpYmZ1bmMgKGFkZF9vcHRhYiwgREZtb2RlLCAiX19hdnIzMl9mNjRfYWRkX2Zhc3QiKTsKKysgICAgICBzZXRfb3B0YWJfbGliZnVuYyAoc3ViX29wdGFiLCBERm1vZGUsICJfX2F2cjMyX2Y2NF9zdWJfZmFzdCIpOworKyAgICAgIHNldF9vcHRhYl9saWJmdW5jIChhZGRfb3B0YWIsIFNGbW9kZSwgIl9fYXZyMzJfZjMyX2FkZF9mYXN0Iik7CisrICAgICAgc2V0X29wdGFiX2xpYmZ1bmMgKHN1Yl9vcHRhYiwgU0Ztb2RlLCAiX19hdnIzMl9mMzJfc3ViX2Zhc3QiKTsKKysgICAgICBzZXRfb3B0YWJfbGliZnVuYyAoc2Rpdl9vcHRhYiwgU0Ztb2RlLCAiX19hdnIzMl9mMzJfZGl2X2Zhc3QiKTsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgc2V0X29wdGFiX2xpYmZ1bmMgKHNkaXZfb3B0YWIsIERGbW9kZSwgIl9fYXZyMzJfZjY0X2RpdiIpOworKyAgICAgIHNldF9vcHRhYl9saWJmdW5jIChzbXVsX29wdGFiLCBERm1vZGUsICJfX2F2cjMyX2Y2NF9tdWwiKTsKKysgICAgICBzZXRfb3B0YWJfbGliZnVuYyAoYWRkX29wdGFiLCBERm1vZGUsICJfX2F2cjMyX2Y2NF9hZGQiKTsKKysgICAgICBzZXRfb3B0YWJfbGliZnVuYyAoc3ViX29wdGFiLCBERm1vZGUsICJfX2F2cjMyX2Y2NF9zdWIiKTsKKysgICAgICBzZXRfb3B0YWJfbGliZnVuYyAoYWRkX29wdGFiLCBTRm1vZGUsICJfX2F2cjMyX2YzMl9hZGQiKTsKKysgICAgICBzZXRfb3B0YWJfbGliZnVuYyAoc3ViX29wdGFiLCBTRm1vZGUsICJfX2F2cjMyX2YzMl9zdWIiKTsKKysgICAgICBzZXRfb3B0YWJfbGliZnVuYyAoc2Rpdl9vcHRhYiwgU0Ztb2RlLCAiX19hdnIzMl9mMzJfZGl2Iik7CisrICAgIH0KKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9nY2MvY29uZmlnL2F2cjMyL2F2cjMyLWVsZi5oCitAQCAtMCwwICsxLDg0IEBACisrLyoKKysgICBFbGYgc3BlY2lmaWMgZGVmaW5pdGlvbnMuCisrICAgQ29weXJpZ2h0IDIwMDMtMjAwNiBBdG1lbCBDb3Jwb3JhdGlvbi4KKysKKysgICBXcml0dGVuIGJ5IFJvbm55IFBlZGVyc2VuLCBBdG1lbCBOb3J3YXksIDxycGVkZXJzZW5AYXRtZWwuY29tPgorKworKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKysgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICovCisrCisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisrICogQ29udHJvbGxpbmcgdGhlIENvbXBpbGF0b3IgRHJpdmVyLCAnZ2NjJworKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysvKiBSdW4tdGltZSBUYXJnZXQgU3BlY2lmaWNhdGlvbi4gICovCisrI3VuZGVmICBUQVJHRVRfVkVSU0lPTgorKyNkZWZpbmUgVEFSR0VUX1ZFUlNJT04gIGZwdXRzICgiIChBVlIzMiBHTlUgd2l0aCBFTEYpIiwgc3RkZXJyKTsKKysKKysvKgorK0Fub3RoZXIgQyBzdHJpbmcgY29uc3RhbnQgdXNlZCBtdWNoIGxpa2UgTElOS19TUEVDLiAgVGhlCisrZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gaXMgdGhhdCBTVEFSVEZJTEVfU1BFQyBpcyB1c2VkIGF0CisrdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSBjb21tYW5kIGdpdmVuIHRvIHRoZSBsaW5rZXIuCisrCisrSWYgdGhpcyBtYWNybyBpcyBub3QgZGVmaW5lZCwgYSBkZWZhdWx0IGlzIHByb3ZpZGVkIHRoYXQgbG9hZHMgdGhlCisrc3RhbmRhcmQgQyBzdGFydHVwIGZpbGUgZnJvbSB0aGUgdXN1YWwgcGxhY2UuICBTZWUgZ2NjLmMuCisrKi8KKysjdW5kZWYgIFNUQVJURklMRV9TUEVDCisrI2RlZmluZSBTVEFSVEZJTEVfU1BFQyAiY3J0MCVPJXMgY3J0aSVPJXMgY3J0YmVnaW4lTyVzIgorKworKyN1bmRlZiBMSU5LX1NQRUMKKysjZGVmaW5lIExJTktfU1BFQyAiJXttdXNlLW9zY2FsbDotLWRlZnN5bSBfX2RvX25vdF91c2Vfb3NjYWxsX2NvcHJvY19fPTB9ICV7bXJlbGF4fE8qOiV7bW5vLXJlbGF4fE8wfE8xOiA7Oi0tcmVsYXh9fSAle21wYXJ0PXVjM2EzcmV2ZDotbWF2cjMyZWxmX3VjM2EzMjU2czs6JXttcGFydD0qOi1tYXZyMzJlbGZfJSp9fSAle21jcHU9KjotbWF2cjMyZWxmXyUqfSIKKysKKysKKysvKgorK0Fub3RoZXIgQyBzdHJpbmcgY29uc3RhbnQgdXNlZCBtdWNoIGxpa2UgTElOS19TUEVDLiAgVGhlCisrZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gaXMgdGhhdCBFTkRGSUxFX1NQRUMgaXMgdXNlZCBhdAorK3RoZSB2ZXJ5IGVuZCBvZiB0aGUgY29tbWFuZCBnaXZlbiB0byB0aGUgbGlua2VyLgorKworK0RvIG5vdCBkZWZpbmUgdGhpcyBtYWNybyBpZiBpdCBkb2VzIG5vdCBuZWVkIHRvIGRvIGFueXRoaW5nLgorKyovCisrI3VuZGVmICBFTkRGSUxFX1NQRUMKKysjZGVmaW5lIEVOREZJTEVfU1BFQyAiY3J0ZW5kJU8lcyBjcnRuJU8lcyIKKysKKysKKysvKiBUYXJnZXQgQ1BVIGJ1aWx0aW5zLiAgKi8KKysjZGVmaW5lIFRBUkdFVF9DUFVfQ1BQX0JVSUxUSU5TKCkJCQkJXAorKyAgZG8JCQkJCQkJCVwKKysgICAgewkJCQkJCQkJXAorKyAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19hdnIzMl9fIik7CQkJCVwKKysgICAgICBidWlsdGluX2RlZmluZSAoIl9fQVZSMzJfXyIpOwkJCQlcCisrICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX0FWUjMyX0VMRl9fIik7CSAgICAgICAJICAgICAgICAJXAorKyAgICAgIGJ1aWx0aW5fZGVmaW5lIChhdnIzMl9wYXJ0LT5tYWNybyk7CQkJXAorKyAgICAgIGJ1aWx0aW5fZGVmaW5lIChhdnIzMl9hcmNoLT5tYWNybyk7CQkJXAorKyAgICAgIGlmIChhdnIzMl9hcmNoLT51YXJjaF90eXBlID09IFVBUkNIX1RZUEVfQVZSMzJBKQkJXAorKwlidWlsdGluX2RlZmluZSAoIl9fQVZSMzJfQVZSMzJBX18iKTsJCQlcCisrICAgICAgZWxzZQkJCQkJCQlcCisrCWJ1aWx0aW5fZGVmaW5lICgiX19BVlIzMl9BVlIzMkJfXyIpOwkJCVwKKysgICAgICBpZiAoVEFSR0VUX1VOQUxJR05FRF9XT1JEKQkJCQlcCisrCWJ1aWx0aW5fZGVmaW5lICgiX19BVlIzMl9IQVNfVU5BTElHTkVEX1dPUkRfXyIpOwlcCisrICAgICAgaWYgKFRBUkdFVF9TSU1EKQkJCQkJCVwKKysJYnVpbHRpbl9kZWZpbmUgKCJfX0FWUjMyX0hBU19TSU1EX18iKTsJCQlcCisrICAgICAgaWYgKFRBUkdFVF9EU1ApCQkJCQkJXAorKwlidWlsdGluX2RlZmluZSAoIl9fQVZSMzJfSEFTX0RTUF9fIik7CQkJXAorKyAgICAgIGlmIChUQVJHRVRfUk1XKQkJCQkJCVwKKysJYnVpbHRpbl9kZWZpbmUgKCJfX0FWUjMyX0hBU19STVdfXyIpOwkJCVwKKysgICAgICBpZiAoVEFSR0VUX0JSQU5DSF9QUkVEKQkJCQkJXAorKwlidWlsdGluX2RlZmluZSAoIl9fQVZSMzJfSEFTX0JSQU5DSF9QUkVEX18iKTsJCVwKKysgICAgICBpZiAoVEFSR0VUX0ZBU1RfRkxPQVQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX0FWUjMyX0ZBU1RfRkxPQVRfXyIpOyAgICAgICAgICAgICAgICBcCisrICAgIH0JCQkJCQkJCVwKKysgIHdoaWxlICgwKQorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2NjL2NvbmZpZy9hdnIzMi9hdnIzMi5oCitAQCAtMCwwICsxLDMzNDcgQEAKKysvKgorKyAgIERlZmluaXRpb25zIG9mIHRhcmdldCBtYWNoaW5lIGZvciBBVlIzMi4KKysgICBDb3B5cmlnaHQgMjAwMy0yMDA2IEF0bWVsIENvcnBvcmF0aW9uLgorKworKyAgIFdyaXR0ZW4gYnkgUm9ubnkgUGVkZXJzZW4sIEF0bWVsIE5vcndheSwgPHJwZWRlcnNlbkBhdG1lbC5jb20+CisrICAgSW5pdGlhbCBwb3J0aW5nIGJ5IEFuZGVycyDvv71kbGFuZC4KKysKKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAqLworKworKyNpZm5kZWYgR0NDX0FWUjMyX0gKKysjZGVmaW5lIEdDQ19BVlIzMl9ICisrCisrCisrI2lmbmRlZiBPQkpFQ1RfRk9STUFUX0VMRgorKyNlcnJvciBhdnIzMi5oIGluY2x1ZGVkIGJlZm9yZSBlbGZvcy5oCisrI2VuZGlmCisrCisrI2lmbmRlZiBMT0NBTF9MQUJFTF9QUkVGSVgKKysjZGVmaW5lIExPQ0FMX0xBQkVMX1BSRUZJWCAiLiIKKysjZW5kaWYKKysKKysjaWZuZGVmIFNVQlRBUkdFVF9DUFBfU1BFQworKyNkZWZpbmUgU1VCVEFSR0VUX0NQUF9TUEVDICAiLURfX0VMRl9fIgorKyNlbmRpZgorKworKworK2V4dGVybiBzdHJ1Y3QgcnR4X2RlZiAqYXZyMzJfY29tcGFyZV9vcDA7CisrZXh0ZXJuIHN0cnVjdCBydHhfZGVmICphdnIzMl9jb21wYXJlX29wMTsKKysKKysKKytleHRlcm4gc3RydWN0IHJ0eF9kZWYgKmF2cjMyX2FjY19jYWNoZTsKKysKKysvKiBjYWNoZSBpbnN0cnVjdGlvbiBvcDUgY29kZXMgKi8KKysjZGVmaW5lIEFWUjMyX0NBQ0hFX0lOVkFMSURBVEVfSUNBQ0hFIDEKKysKKysvKiBUaGVzZSBiaXRzIGRlc2NyaWJlIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgZnVuY3Rpb24gc3VwcG9ydGVkCisrICAgYnkgdGhlIEFWUjMyIGJhY2tlbmQuICBUaGV5IGFyZSBleGNsdXNpdmUuICBpZSBhIGZ1bmN0aW9uIGNhbm5vdCBiZSBib3RoIGEKKysgICBub3JtYWwgZnVuY3Rpb24gYW5kIGFuIGludGVyd29ya2VkIGZ1bmN0aW9uLCBmb3IgZXhhbXBsZS4gIEtub3dpbmcgdGhlCisrICAgdHlwZSBvZiBhIGZ1bmN0aW9uIGlzIGltcG9ydGFudCBmb3IgZGV0ZXJtaW5pbmcgaXRzIHByb2xvZ3VlIGFuZAorKyAgIGVwaWxvZ3VlIHNlcXVlbmNlcy4KKysgICBOb3RlIHZhbHVlIDcgaXMgY3VycmVudGx5IHVuYXNzaWduZWQuICBBbHNvIG5vdGUgdGhhdCB0aGUgaW50ZXJydXB0CisrICAgZnVuY3Rpb24gdHlwZXMgYWxsIGhhdmUgYml0IDIgc2V0LCBzbyB0aGF0IHRoZXkgY2FuIGJlIHRlc3RlZCBmb3IgZWFzaWx5LgorKyAgIE5vdGUgdGhhdCAwIGlzIGRlbGliZXJhdGVseSBjaG9zZW4gZm9yIEFWUjMyX0ZUX1VOS05PV04gc28gdGhhdCB3aGVuIHRoZQorKyAgIG1hY2hpbmVfZnVuY3Rpb24gc3RydWN0dXJlIGlzIGluaXRpYWxpemVkICh0byB6ZXJvKSBmdW5jX3R5cGUgd2lsbAorKyAgIGRlZmF1bHQgdG8gdW5rbm93bi4gIFRoaXMgd2lsbCBmb3JjZSB0aGUgZmlyc3QgdXNlIG9mIGF2cjMyX2N1cnJlbnRfZnVuY190eXBlCisrICAgdG8gY2FsbCBhdnIzMl9jb21wdXRlX2Z1bmNfdHlwZS4gICovCisrI2RlZmluZSBBVlIzMl9GVF9VTktOT1dOCSAwCS8qIFR5cGUgaGFzIG5vdCB5ZXQgYmVlbiBkZXRlcm1pbmVkLgorKwkJCQkJICAgKi8KKysjZGVmaW5lIEFWUjMyX0ZUX05PUk1BTAkJIDEJLyogWW91ciBub3JtYWwsIHN0cmFpZ2h0Zm9yd2FyZAorKwkJCQkJICAgZnVuY3Rpb24uICAqLworKyNkZWZpbmUgQVZSMzJfRlRfQUNBTEwJICAgICAgICAgMgkvKiBBbiBhY2FsbCBmdW5jdGlvbi4gICovCisrI2RlZmluZSBBVlIzMl9GVF9FWENFUFRJT05fSEFORExFUiAzCS8qIEEgQysrIGV4Y2VwdGlvbiBoYW5kbGVyLiAgKi8KKysjZGVmaW5lIEFWUjMyX0ZUX0lTUl9GVUxMCSA0CS8qIEEgZnVsbHkgc2hhZG93ZWQgaW50ZXJydXB0IG1vZGUuICAqLworKyNkZWZpbmUgQVZSMzJfRlRfSVNSX0hBTEYJIDUJLyogQSBoYWxmIHNoYWRvd2VkIGludGVycnVwdCBtb2RlLiAgKi8KKysjZGVmaW5lIEFWUjMyX0ZUX0lTUl9OT05FCSA2CS8qIE5vIHNoYWRvdyByZWdpc3RlcnMuICAqLworKworKyNkZWZpbmUgQVZSMzJfRlRfVFlQRV9NQVNLCSgoMSA8PCAzKSAtIDEpCisrCisrLyogSW4gYWRkaXRpb24gZnVuY3Rpb25zIGNhbiBoYXZlIHNldmVyYWwgdHlwZSBtb2RpZmllcnMsCisrICAgb3V0bGluZWQgYnkgdGhlc2UgYml0IG1hc2tzOiAgKi8KKysjZGVmaW5lIEFWUjMyX0ZUX0lOVEVSUlVQVAkoMSA8PCAyKQkvKiBOb3RlIG92ZXJsYXAgd2l0aCBGVF9JU1IKKysJCQkJCQkgICBhbmQgYWJvdmUuICAqLworKyNkZWZpbmUgQVZSMzJfRlRfTkFLRUQJCSgxIDw8IDMpCS8qIE5vIHByb2xvZ3VlIG9yIGVwaWxvZ3VlLiAgKi8KKysjZGVmaW5lIEFWUjMyX0ZUX1ZPTEFUSUxFCSgxIDw8IDQpCS8qIERvZXMgbm90IHJldHVybi4gICovCisrI2RlZmluZSBBVlIzMl9GVF9ORVNURUQJCSgxIDw8IDUpCS8qIEVtYmVkZGVkIGluc2lkZSBhbm90aGVyCisrCQkJCQkJICAgZnVuYy4gKi8KKysKKysvKiBTb21lIG1hY3JvcyB0byB0ZXN0IHRoZXNlIGZsYWdzLiAgKi8KKysjZGVmaW5lIEFWUjMyX0ZVTkNfVFlQRSh0KQkodCAmIEFWUjMyX0ZUX1RZUEVfTUFTSykKKysjZGVmaW5lIElTX0lOVEVSUlVQVCh0KQkJKHQgJiBBVlIzMl9GVF9JTlRFUlJVUFQpCisrI2RlZmluZSBJU19WT0xBVElMRSh0KSAgICAgCSh0ICYgQVZSMzJfRlRfVk9MQVRJTEUpCisrI2RlZmluZSBJU19OQUtFRCh0KSAgICAgICAgCSh0ICYgQVZSMzJfRlRfTkFLRUQpCisrI2RlZmluZSBJU19ORVNURUQodCkgICAgICAgCSh0ICYgQVZSMzJfRlRfTkVTVEVEKQorKworKyNkZWZpbmUgU1lNQk9MX0ZMQUdfUk1XX0FERFJfU0hJRlQgICAgU1lNQk9MX0ZMQUdfTUFDSF9ERVBfU0hJRlQKKysjZGVmaW5lIFNZTUJPTF9SRUZfUk1XX0FERFIoUlRYKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAoKFNZTUJPTF9SRUZfRkxBR1MgKFJUWCkgJiAoMSA8PCBTWU1CT0xfRkxBR19STVdfQUREUl9TSElGVCkpICE9IDApCisrCisrCisrdHlwZWRlZiBzdHJ1Y3QgbWluaXBvb2xfbGFiZWxzCisrR1RZICgoY2hhaW5fbmV4dCAoIiVoLm5leHQiKSwgY2hhaW5fcHJldiAoIiVoLnByZXYiKSkpCisreworKyAgcnR4IGxhYmVsOworKyAgc3RydWN0IG1pbmlwb29sX2xhYmVscyAqcHJldjsKKysgIHN0cnVjdCBtaW5pcG9vbF9sYWJlbHMgKm5leHQ7CisrfSBtaW5pcG9vbF9sYWJlbHM7CisrCisrLyogQSBDIHN0cnVjdHVyZSBmb3IgbWFjaGluZS1zcGVjaWZpYywgcGVyLWZ1bmN0aW9uIGRhdGEuCisrICAgVGhpcyBpcyBhZGRlZCB0byB0aGUgY2Z1biBzdHJ1Y3R1cmUuICAqLworKworK3R5cGVkZWYgc3RydWN0IG1hY2hpbmVfZnVuY3Rpb24KKytHVFkgKCgpKQorK3sKKysgIC8qIFJlY29yZHMgdGhlIHR5cGUgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24uICAqLworKyAgdW5zaWduZWQgbG9uZyBmdW5jX3R5cGU7CisrICAvKiBMaXN0IG9mIG1pbmlwb29sIGxhYmVscywgdXNlIGZvciBjaGVja2luZyBpZiBjb2RlIGxhYmVsIGlzIHZhbGlkIGluIGEKKysgICAgIG1lbW9yeSBleHByZXNzaW9uICovCisrICBtaW5pcG9vbF9sYWJlbHMgKm1pbmlwb29sX2xhYmVsX2hlYWQ7CisrICBtaW5pcG9vbF9sYWJlbHMgKm1pbmlwb29sX2xhYmVsX3RhaWw7CisrICBpbnQgaWZjdnRfYWZ0ZXJfcmVsb2FkOworK30gbWFjaGluZV9mdW5jdGlvbjsKKysKKysvKiBJbml0aWFsaXplIGRhdGEgdXNlZCBieSBpbnNuIGV4cGFuZGVycy4gIFRoaXMgaXMgY2FsbGVkIGZyb20gaW5zbl9lbWl0LAorKyAgIG9uY2UgZm9yIGV2ZXJ5IGZ1bmN0aW9uIGJlZm9yZSBjb2RlIGlzIGdlbmVyYXRlZC4gICovCisrI2RlZmluZSBJTklUX0VYUEFOREVSUyBhdnIzMl9pbml0X2V4cGFuZGVycyAoKQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysgKiBTUEVDUworKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysjaWZuZGVmIEFTTV9TUEVDCisrI2RlZmluZSBBU01fU1BFQyAiJXtmcGljOi0tcGljfSAle21yZWxheHxPKjole21uby1yZWxheHxPMHxPMTogOzotLWxpbmtyZWxheH19ICV7bWFyY2g9dWNyMm5vbXVsOi1tYXJjaD11Y3IyOzole21hcmNoPSo6LW1hcmNoPSUqfX0gJXttcGFydD11YzNhM3JldmQ6LW1wYXJ0PXVjM2EzMjU2czs6JXttcGFydD0qOi1tcGFydD0lKn19IgorKyNlbmRpZgorKworKyNpZm5kZWYgTVVMVElMSUJfREVGQVVMVFMKKysjZGVmaW5lIE1VTFRJTElCX0RFRkFVTFRTIHsgIm1hcmNoPWFwIiwgIiIgfQorKyNlbmRpZgorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysgKiBSdW4tdGltZSBUYXJnZXQgU3BlY2lmaWNhdGlvbgorKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysjaWZuZGVmIFRBUkdFVF9WRVJTSU9OCisrI2RlZmluZSBUQVJHRVRfVkVSU0lPTiBmcHJpbnRmKHN0ZGVyciwgIiAoQVZSMzIsIEdOVSBhc3NlbWJsZXIgc3ludGF4KSIpOworKyNlbmRpZgorKworKworKy8qIFBhcnQgdHlwZXMuIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggdGhlIG9yZGVyIG9mIGF2cjMyX3BhcnRfdHlwZXMgaW4gYXZyMzIuYyovCisrZW51bSBwYXJ0X3R5cGUKKyt7CisrICBQQVJUX1RZUEVfQVZSMzJfTk9ORSwKKysgIFBBUlRfVFlQRV9BVlIzMl9BUDcwMDAsCisrICBQQVJUX1RZUEVfQVZSMzJfQVA3MDAxLAorKyAgUEFSVF9UWVBFX0FWUjMyX0FQNzAwMiwKKysgIFBBUlRfVFlQRV9BVlIzMl9BUDcyMDAsCisrICBQQVJUX1RZUEVfQVZSMzJfVUMzQTAxMjgsCisrICBQQVJUX1RZUEVfQVZSMzJfVUMzQTAyNTYsCisrICBQQVJUX1RZUEVfQVZSMzJfVUMzQTA1MTIsCisrICBQQVJUX1RZUEVfQVZSMzJfVUMzQTA1MTJFUywKKysgIFBBUlRfVFlQRV9BVlIzMl9VQzNBMTEyOCwKKysgIFBBUlRfVFlQRV9BVlIzMl9VQzNBMTI1NiwKKysgIFBBUlRfVFlQRV9BVlIzMl9VQzNBMTUxMiwKKysgIFBBUlRfVFlQRV9BVlIzMl9VQzNBMTUxMkVTLAorKyAgUEFSVF9UWVBFX0FWUjMyX1VDM0EzUkVWRCwKKysgIFBBUlRfVFlQRV9BVlIzMl9VQzNBMzY0LAorKyAgUEFSVF9UWVBFX0FWUjMyX1VDM0EzNjRTLAorKyAgUEFSVF9UWVBFX0FWUjMyX1VDM0EzMTI4LAorKyAgUEFSVF9UWVBFX0FWUjMyX1VDM0EzMTI4UywKKysgIFBBUlRfVFlQRV9BVlIzMl9VQzNBMzI1NiwKKysgIFBBUlRfVFlQRV9BVlIzMl9VQzNBMzI1NlMsCisrICBQQVJUX1RZUEVfQVZSMzJfVUMzQjA2NCwKKysgIFBBUlRfVFlQRV9BVlIzMl9VQzNCMDEyOCwKKysgIFBBUlRfVFlQRV9BVlIzMl9VQzNCMDI1NiwKKysgIFBBUlRfVFlQRV9BVlIzMl9VQzNCMDI1NkVTLAorKyAgUEFSVF9UWVBFX0FWUjMyX1VDM0IxNjQsCisrICBQQVJUX1RZUEVfQVZSMzJfVUMzQjExMjgsCisrICBQQVJUX1RZUEVfQVZSMzJfVUMzQjEyNTYsCisrICBQQVJUX1RZUEVfQVZSMzJfVUMzQjEyNTZFUworK307CisrCisrLyogTWljcm9hcmNoaXRlY3R1cmVzLiAqLworK2VudW0gbWljcm9hcmNoaXRlY3R1cmVfdHlwZQorK3sKKysgIFVBUkNIX1RZUEVfQVZSMzJBLAorKyAgVUFSQ0hfVFlQRV9BVlIzMkIsCisrICBVQVJDSF9UWVBFX05PTkUKKyt9OworKworKy8qIEFyY2hpdGVjdHVyZXMgdHlwZXMgd2hpY2ggc3BlY2lmaWVzIHRoZSBwaXBlbGluZS4KKysgS2VlcCB0aGlzIGluIHN5bmMgd2l0aCBhdnIzMl9hcmNoX3R5cGVzIGluIGF2cjMyLmMKKysgYW5kIHRoZSBwaXBlbGluZSBhdHRyaWJ1dGUgaW4gYXZyMzIubWQgKi8KKytlbnVtIGFyY2hpdGVjdHVyZV90eXBlCisreworKyAgQVJDSF9UWVBFX0FWUjMyX0FQLAorKyAgQVJDSF9UWVBFX0FWUjMyX1VDUjEsCisrICBBUkNIX1RZUEVfQVZSMzJfVUNSMiwKKysgIEFSQ0hfVFlQRV9BVlIzMl9VQ1IyTk9NVUwsCisrICBBUkNIX1RZUEVfQVZSMzJfTk9ORQorK307CisrCisrLyogRmxhZyBzcGVjaWZ5aW5nIGlmIHRoZSBjcHUgaGFzIHN1cHBvcnQgZm9yIERTUCBpbnN0cnVjdGlvbnMuKi8KKysjZGVmaW5lIEZMQUdfQVZSMzJfSEFTX0RTUCAoMSA8PCAwKQorKy8qIEZsYWcgc3BlY2lmeWluZyBpZiB0aGUgY3B1IGhhcyBzdXBwb3J0IGZvciBSZWFkLU1vZGlmeS1Xcml0ZQorKyAgIGluc3RydWN0aW9ucy4qLworKyNkZWZpbmUgRkxBR19BVlIzMl9IQVNfUk1XICgxIDw8IDEpCisrLyogRmxhZyBzcGVjaWZ5aW5nIGlmIHRoZSBjcHUgaGFzIHN1cHBvcnQgZm9yIFNJTUQgaW5zdHJ1Y3Rpb25zLiAqLworKyNkZWZpbmUgRkxBR19BVlIzMl9IQVNfU0lNRCAoMSA8PCAyKQorKy8qIEZsYWcgc3BlY2lmeWluZyBpZiB0aGUgY3B1IGhhcyBzdXBwb3J0IGZvciB1bmFsaWduZWQgbWVtb3J5IHdvcmQgYWNjZXNzLiAqLworKyNkZWZpbmUgRkxBR19BVlIzMl9IQVNfVU5BTElHTkVEX1dPUkQgKDEgPDwgMykKKysvKiBGbGFnIHNwZWNpZnlpbmcgaWYgdGhlIGNwdSBoYXMgc3VwcG9ydCBmb3IgYnJhbmNoIHByZWRpY3Rpb24uICovCisrI2RlZmluZSBGTEFHX0FWUjMyX0hBU19CUkFOQ0hfUFJFRCAoMSA8PCA0KQorKy8qIEZsYWcgc3BlY2lmeWluZyBpZiB0aGUgY3B1IGhhcyBzdXBwb3J0IGZvciBhIHJldHVybiBzdGFjay4gKi8KKysjZGVmaW5lIEZMQUdfQVZSMzJfSEFTX1JFVFVSTl9TVEFDSyAoMSA8PCA1KQorKy8qIEZsYWcgc3BlY2lmeWluZyBpZiB0aGUgY3B1IGhhcyBjYWNoZXMuICovCisrI2RlZmluZSBGTEFHX0FWUjMyX0hBU19DQUNIRVMgKDEgPDwgNikKKysvKiBGbGFnIHNwZWNpZnlpbmcgaWYgdGhlIGNwdSBoYXMgc3VwcG9ydCBmb3IgdjIgaW5zbnMuICovCisrI2RlZmluZSBGTEFHX0FWUjMyX0hBU19WMl9JTlNOUyAoMSA8PCA3KQorKy8qIEZsYWcgc3BlY2lmeWluZyB0aGF0IHRoZSBjcHUgaGFzIGJ1Z2d5IG11bCBpbnNucy4gKi8KKysjZGVmaW5lIEZMQUdfQVZSMzJfSEFTX05PX01VTF9JTlNOUyAoMSA8PCA4KQorKworKy8qIFN0cnVjdHVyZSBmb3IgaG9sZGluZyBpbmZvcm1hdGlvbiBhYm91dCBkaWZmZXJlbnQgYXZyMzIgQ1BVcy9wYXJ0cyAqLworK3N0cnVjdCBwYXJ0X3R5cGVfcworK3sKKysgIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWU7CisrICBlbnVtIHBhcnRfdHlwZSBwYXJ0X3R5cGU7CisrICBlbnVtIGFyY2hpdGVjdHVyZV90eXBlIGFyY2hfdHlwZTsKKysgIC8qIE11c3QgbGllIG91dHNpZGUgdXNlcidzIG5hbWVzcGFjZS4gIE5VTEwgPT0gbm8gbWFjcm8uICAqLworKyAgY29uc3QgY2hhciAqY29uc3QgbWFjcm87CisrfTsKKysKKysvKiBTdHJ1Y3R1cmUgZm9yIGhvbGRpbmcgaW5mb3JtYXRpb24gYWJvdXQgZGlmZmVyZW50IGF2cjMyIHBpcGVsaW5lCisrIGFyY2hpdGVjdHVyZXMuICovCisrc3RydWN0IGFyY2hfdHlwZV9zCisreworKyAgY29uc3QgY2hhciAqY29uc3QgbmFtZTsKKysgIGVudW0gYXJjaGl0ZWN0dXJlX3R5cGUgYXJjaF90eXBlOworKyAgZW51bSBtaWNyb2FyY2hpdGVjdHVyZV90eXBlIHVhcmNoX3R5cGU7CisrICBjb25zdCB1bnNpZ25lZCBsb25nIGZlYXR1cmVfZmxhZ3M7CisrICAvKiBNdXN0IGxpZSBvdXRzaWRlIHVzZXIncyBuYW1lc3BhY2UuICBOVUxMID09IG5vIG1hY3JvLiAgKi8KKysgIGNvbnN0IGNoYXIgKmNvbnN0IG1hY3JvOworK307CisrCisrZXh0ZXJuIGNvbnN0IHN0cnVjdCBwYXJ0X3R5cGVfcyAqYXZyMzJfcGFydDsKKytleHRlcm4gY29uc3Qgc3RydWN0IGFyY2hfdHlwZV9zICphdnIzMl9hcmNoOworKworKyNkZWZpbmUgVEFSR0VUX1NJTUQgIChhdnIzMl9hcmNoLT5mZWF0dXJlX2ZsYWdzICYgRkxBR19BVlIzMl9IQVNfU0lNRCkKKysjZGVmaW5lIFRBUkdFVF9EU1AgIChhdnIzMl9hcmNoLT5mZWF0dXJlX2ZsYWdzICYgRkxBR19BVlIzMl9IQVNfRFNQKQorKyNkZWZpbmUgVEFSR0VUX1JNVyAgKGF2cjMyX2FyY2gtPmZlYXR1cmVfZmxhZ3MgJiBGTEFHX0FWUjMyX0hBU19STVcpCisrI2RlZmluZSBUQVJHRVRfVU5BTElHTkVEX1dPUkQgIChhdnIzMl9hcmNoLT5mZWF0dXJlX2ZsYWdzICYgRkxBR19BVlIzMl9IQVNfVU5BTElHTkVEX1dPUkQpCisrI2RlZmluZSBUQVJHRVRfQlJBTkNIX1BSRUQgIChhdnIzMl9hcmNoLT5mZWF0dXJlX2ZsYWdzICYgRkxBR19BVlIzMl9IQVNfQlJBTkNIX1BSRUQpCisrI2RlZmluZSBUQVJHRVRfUkVUVVJOX1NUQUNLICAoYXZyMzJfYXJjaC0+ZmVhdHVyZV9mbGFncyAmIEZMQUdfQVZSMzJfSEFTX1JFVFVSTl9TVEFDSykKKysjZGVmaW5lIFRBUkdFVF9WMl9JTlNOUyAgKGF2cjMyX2FyY2gtPmZlYXR1cmVfZmxhZ3MgJiBGTEFHX0FWUjMyX0hBU19WMl9JTlNOUykKKysjZGVmaW5lIFRBUkdFVF9DQUNIRVMgIChhdnIzMl9hcmNoLT5mZWF0dXJlX2ZsYWdzICYgRkxBR19BVlIzMl9IQVNfQ0FDSEVTKQorKyNkZWZpbmUgVEFSR0VUX05PX01VTF9JTlNOUyAgKGF2cjMyX2FyY2gtPmZlYXR1cmVfZmxhZ3MgJiBGTEFHX0FWUjMyX0hBU19OT19NVUxfSU5TTlMpCisrI2RlZmluZSBUQVJHRVRfQVJDSF9BUCAoYXZyMzJfYXJjaC0+YXJjaF90eXBlID09IEFSQ0hfVFlQRV9BVlIzMl9BUCkKKysjZGVmaW5lIFRBUkdFVF9BUkNIX1VDUjEgKGF2cjMyX2FyY2gtPmFyY2hfdHlwZSA9PSBBUkNIX1RZUEVfQVZSMzJfVUNSMSkKKysjZGVmaW5lIFRBUkdFVF9BUkNIX1VDUjIgKGF2cjMyX2FyY2gtPmFyY2hfdHlwZSA9PSBBUkNIX1RZUEVfQVZSMzJfVUNSMikKKysjZGVmaW5lIFRBUkdFVF9BUkNIX1VDIChUQVJHRVRfQVJDSF9VQ1IxIHx8IFRBUkdFVF9BUkNIX1VDUjIpCisrI2RlZmluZSBUQVJHRVRfVUFSQ0hfQVZSMzJBIChhdnIzMl9hcmNoLT51YXJjaF90eXBlID09IFVBUkNIX1RZUEVfQVZSMzJBKQorKyNkZWZpbmUgVEFSR0VUX1VBUkNIX0FWUjMyQiAoYXZyMzJfYXJjaC0+dWFyY2hfdHlwZSA9PSBVQVJDSF9UWVBFX0FWUjMyQikKKysKKysjZGVmaW5lIENBTl9ERUJVR19XSVRIT1VUX0ZQCisrCisrCisrCisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKyAqIFN0b3JhZ2UgTGF5b3V0CisrICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworKy8qCisrRGVmaW5lIHRoaXMgbWFjcm8gdG8gaGF2ZSB0aGUgdmFsdWUgMSBpZiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgaW4gYQorK2J5dGUgaGFzIHRoZSBsb3dlc3QgbnVtYmVyOyBvdGhlcndpc2UgZGVmaW5lIGl0IHRvIGhhdmUgdGhlIHZhbHVlIHplcm8uCisrVGhpcyBtZWFucyB0aGF0IGJpdC1maWVsZCBpbnN0cnVjdGlvbnMgY291bnQgZnJvbSB0aGUgbW9zdCBzaWduaWZpY2FudAorK2JpdC4gIElmIHRoZSBtYWNoaW5lIGhhcyBubyBiaXQtZmllbGQgaW5zdHJ1Y3Rpb25zLCB0aGVuIHRoaXMgbXVzdCBzdGlsbAorK2JlIGRlZmluZWQsIGJ1dCBpdCBkb2Vzbid0IG1hdHRlciB3aGljaCB2YWx1ZSBpdCBpcyBkZWZpbmVkIHRvLiAgVGhpcworK21hY3JvIG5lZWQgbm90IGJlIGEgY29uc3RhbnQuCisrCisrVGhpcyBtYWNybyBkb2VzIG5vdCBhZmZlY3QgdGhlIHdheSBzdHJ1Y3R1cmUgZmllbGRzIGFyZSBwYWNrZWQgaW50bworK2J5dGVzIG9yIHdvcmRzOyB0aGF0IGlzIGNvbnRyb2xsZWQgYnkgQllURVNfQklHX0VORElBTi4KKysqLworKyNkZWZpbmUgQklUU19CSUdfRU5ESUFOIDAKKysKKysvKgorK0RlZmluZSB0aGlzIG1hY3JvIHRvIGhhdmUgdGhlIHZhbHVlIDEgaWYgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBpbiBhCisrd29yZCBoYXMgdGhlIGxvd2VzdCBudW1iZXIuIFRoaXMgbWFjcm8gbmVlZCBub3QgYmUgYSBjb25zdGFudC4KKysqLworKy8qCisrICBEYXRhIGlzIHN0b3JlZCBpbiBhbiBiaWctZW5kaWFuIHdheS4KKysqLworKyNkZWZpbmUgQllURVNfQklHX0VORElBTiAxCisrCisrLyoKKytEZWZpbmUgdGhpcyBtYWNybyB0byBoYXZlIHRoZSB2YWx1ZSAxIGlmLCBpbiBhIG11bHRpd29yZCBvYmplY3QsIHRoZQorK21vc3Qgc2lnbmlmaWNhbnQgd29yZCBoYXMgdGhlIGxvd2VzdCBudW1iZXIuICBUaGlzIGFwcGxpZXMgdG8gYm90aAorK21lbW9yeSBsb2NhdGlvbnMgYW5kIHJlZ2lzdGVyczsgR0NDIGZ1bmRhbWVudGFsbHkgYXNzdW1lcyB0aGF0IHRoZQorK29yZGVyIG9mIHdvcmRzIGluIG1lbW9yeSBpcyB0aGUgc2FtZSBhcyB0aGUgb3JkZXIgaW4gcmVnaXN0ZXJzLiAgVGhpcworK21hY3JvIG5lZWQgbm90IGJlIGEgY29uc3RhbnQuCisrKi8KKysvKgorKyAgRGF0YSBpcyBzdG9yZWQgaW4gYW4gYmluLWVuZGlhbiB3YXkuCisrKi8KKysjZGVmaW5lIFdPUkRTX0JJR19FTkRJQU4gMQorKworKy8qCisrRGVmaW5lIHRoaXMgbWFjcm8gaWYgV09SRFNfQklHX0VORElBTiBpcyBub3QgY29uc3RhbnQuICBUaGlzIG11c3QgYmUgYQorK2NvbnN0YW50IHZhbHVlIHdpdGggdGhlIHNhbWUgbWVhbmluZyBhcyBXT1JEU19CSUdfRU5ESUFOLCB3aGljaCB3aWxsIGJlCisrdXNlZCBvbmx5IHdoZW4gY29tcGlsaW5nIGxpYmdjYzIuYy4gIFR5cGljYWxseSB0aGUgdmFsdWUgd2lsbCBiZSBzZXQKKytiYXNlZCBvbiBwcmVwcm9jZXNzb3IgZGVmaW5lcy4KKysqLworKyNkZWZpbmUgTElCR0NDMl9XT1JEU19CSUdfRU5ESUFOIFdPUkRTX0JJR19FTkRJQU4KKysKKysvKgorK0RlZmluZSB0aGlzIG1hY3JvIHRvIGhhdmUgdGhlIHZhbHVlIDEgaWYgREZtb2RlLCBYRm1vZGUgb3IKKytURm1vZGUgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyBhcmUgc3RvcmVkIGluIG1lbW9yeSB3aXRoIHRoZSB3b3JkCisrY29udGFpbmluZyB0aGUgc2lnbiBiaXQgYXQgdGhlIGxvd2VzdCBhZGRyZXNzOyBvdGhlcndpc2UgZGVmaW5lIGl0IHRvCisraGF2ZSB0aGUgdmFsdWUgMC4gIFRoaXMgbWFjcm8gbmVlZCBub3QgYmUgYSBjb25zdGFudC4KKysKKytZb3UgbmVlZCBub3QgZGVmaW5lIHRoaXMgbWFjcm8gaWYgdGhlIG9yZGVyaW5nIGlzIHRoZSBzYW1lIGFzIGZvcgorK211bHRpLXdvcmQgaW50ZWdlcnMuCisrKi8KKysvKiAjZGVmaW5lIEZMT0FUX1dPUkRTX0JJR19FTkRJQU4gMSAqLworKworKy8qCisrRGVmaW5lIHRoaXMgbWFjcm8gdG8gYmUgdGhlIG51bWJlciBvZiBiaXRzIGluIGFuIGFkZHJlc3NhYmxlIHN0b3JhZ2UKKyt1bml0IChieXRlKTsgbm9ybWFsbHkgOC4KKysqLworKyNkZWZpbmUgQklUU19QRVJfVU5JVCA4CisrCisrLyoKKytOdW1iZXIgb2YgYml0cyBpbiBhIHdvcmQ7IG5vcm1hbGx5IDMyLgorKyovCisrI2RlZmluZSBCSVRTX1BFUl9XT1JEIDMyCisrCisrLyoKKytNYXhpbXVtIG51bWJlciBvZiBiaXRzIGluIGEgd29yZC4gIElmIHRoaXMgaXMgdW5kZWZpbmVkLCB0aGUgZGVmYXVsdCBpcworK0JJVFNfUEVSX1dPUkQuICBPdGhlcndpc2UsIGl0IGlzIHRoZSBjb25zdGFudCB2YWx1ZSB0aGF0IGlzIHRoZQorK2xhcmdlc3QgdmFsdWUgdGhhdCBCSVRTX1BFUl9XT1JEIGNhbiBoYXZlIGF0IHJ1bi10aW1lLgorKyovCisrLyogTUFYX0JJVFNfUEVSX1dPUkQgbm90IGRlZmluZWQqLworKworKy8qCisrTnVtYmVyIG9mIHN0b3JhZ2UgdW5pdHMgaW4gYSB3b3JkOyBub3JtYWxseSA0LgorKyovCisrI2RlZmluZSBVTklUU19QRVJfV09SRCA0CisrCisrLyoKKytNaW5pbXVtIG51bWJlciBvZiB1bml0cyBpbiBhIHdvcmQuICBJZiB0aGlzIGlzIHVuZGVmaW5lZCwgdGhlIGRlZmF1bHQgaXMKKytVTklUU19QRVJfV09SRC4gIE90aGVyd2lzZSwgaXQgaXMgdGhlIGNvbnN0YW50IHZhbHVlIHRoYXQgaXMgdGhlCisrc21hbGxlc3QgdmFsdWUgdGhhdCBVTklUU19QRVJfV09SRCBjYW4gaGF2ZSBhdCBydW4tdGltZS4KKysqLworKy8qIE1JTl9VTklUU19QRVJfV09SRCBub3QgZGVmaW5lZCAqLworKworKy8qCisrV2lkdGggb2YgYSBwb2ludGVyLCBpbiBiaXRzLiAgWW91IG11c3Qgc3BlY2lmeSBhIHZhbHVlIG5vIHdpZGVyIHRoYW4gdGhlCisrd2lkdGggb2YgUG1vZGUuICBJZiBpdCBpcyBub3QgZXF1YWwgdG8gdGhlIHdpZHRoIG9mIFBtb2RlLAorK3lvdSBtdXN0IGRlZmluZSBQT0lOVEVSU19FWFRFTkRfVU5TSUdORUQuCisrKi8KKysjZGVmaW5lIFBPSU5URVJfU0laRSAzMgorKworKy8qCisrQSBDIGV4cHJlc3Npb24gd2hvc2UgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIHplcm8gaWYgcG9pbnRlcnMgdGhhdCBuZWVkIHRvIGJlCisrZXh0ZW5kZWQgZnJvbSBiZWluZyBQT0lOVEVSX1NJWkUgYml0cyB3aWRlIHRvIFBtb2RlIGFyZSB0bworK2JlIHplcm8tZXh0ZW5kZWQgYW5kIHplcm8gaWYgdGhleSBhcmUgdG8gYmUgc2lnbi1leHRlbmRlZC4gIElmIHRoZSB2YWx1ZQorK2lzIGxlc3MgdGhlbiB6ZXJvIHRoZW4gdGhlcmUgbXVzdCBiZSBhbiAicHRyX2V4dGVuZCIgaW5zdHJ1Y3Rpb24gdGhhdAorK2V4dGVuZHMgYSBwb2ludGVyIGZyb20gUE9JTlRFUl9TSVpFIHRvIFBtb2RlLgorKworK1lvdSBuZWVkIG5vdCBkZWZpbmUgdGhpcyBtYWNybyBpZiB0aGUgUE9JTlRFUl9TSVpFIGlzIGVxdWFsCisrdG8gdGhlIHdpZHRoIG9mIFBtb2RlLgorKyovCisrLyogI2RlZmluZSBQT0lOVEVSU19FWFRFTkRfVU5TSUdORUQgKi8KKysKKysvKgorK0EgTWFjcm8gdG8gdXBkYXRlIE0gYW5kIFVOU0lHTkVEUCB3aGVuIGFuIG9iamVjdCB3aG9zZSB0eXBlCisraXMgVFlQRSBhbmQgd2hpY2ggaGFzIHRoZSBzcGVjaWZpZWQgbW9kZSBhbmQgc2lnbmVkbmVzcyBpcyB0byBiZQorK3N0b3JlZCBpbiBhIHJlZ2lzdGVyLiAgVGhpcyBtYWNybyBpcyBvbmx5IGNhbGxlZCB3aGVuIFRZUEUgaXMgYQorK3NjYWxhciB0eXBlLgorKworK09uIG1vc3QgUklTQyBtYWNoaW5lcywgd2hpY2ggb25seSBoYXZlIG9wZXJhdGlvbnMgdGhhdCBvcGVyYXRlIG9uIGEgZnVsbAorK3JlZ2lzdGVyLCBkZWZpbmUgdGhpcyBtYWNybyB0byBzZXQgTSB0byB3b3JkX21vZGUgaWYKKytNIGlzIGFuIGludGVnZXIgbW9kZSBuYXJyb3dlciB0aGFuIEJJVFNfUEVSX1dPUkQuICBJbiBtb3N0CisrY2FzZXMsIG9ubHkgaW50ZWdlciBtb2RlcyBzaG91bGQgYmUgd2lkZW5lZCBiZWNhdXNlIHdpZGVyLXByZWNpc2lvbgorK2Zsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgYXJlIHVzdWFsbHkgbW9yZSBleHBlbnNpdmUgdGhhbiB0aGVpciBuYXJyb3dlcgorK2NvdW50ZXJwYXJ0cy4KKysKKytGb3IgbW9zdCBtYWNoaW5lcywgdGhlIG1hY3JvIGRlZmluaXRpb24gZG9lcyBub3QgY2hhbmdlIFVOU0lHTkVEUC4KKytIb3dldmVyLCBzb21lIG1hY2hpbmVzLCBoYXZlIGluc3RydWN0aW9ucyB0aGF0IHByZWZlcmVudGlhbGx5IGhhbmRsZQorK2VpdGhlciBzaWduZWQgb3IgdW5zaWduZWQgcXVhbnRpdGllcyBvZiBjZXJ0YWluIG1vZGVzLiAgRm9yIGV4YW1wbGUsIG9uCisrdGhlIERFQyBBbHBoYSwgMzItYml0IGxvYWRzIGZyb20gbWVtb3J5IGFuZCAzMi1iaXQgYWRkIGluc3RydWN0aW9ucworK3NpZ24tZXh0ZW5kIHRoZSByZXN1bHQgdG8gNjQgYml0cy4gIE9uIHN1Y2ggbWFjaGluZXMsIHNldAorK1VOU0lHTkVEUCBhY2NvcmRpbmcgdG8gd2hpY2gga2luZCBvZiBleHRlbnNpb24gaXMgbW9yZSBlZmZpY2llbnQuCisrCisrRG8gbm90IGRlZmluZSB0aGlzIG1hY3JvIGlmIGl0IHdvdWxkIG5ldmVyIG1vZGlmeSBNLgorKyovCisrI2RlZmluZSBQUk9NT1RFX01PREUoTSwgVU5TSUdORURQLCBUWVBFKQlcCisrICAgIHsJCQkJCQlcCisrICAgICAgaWYgKEdFVF9NT0RFX0NMQVNTIChNKSA9PSBNT0RFX0lOVAlcCisrCSAgJiYgR0VUX01PREVfU0laRSAoTSkgPCA0KQkJXAorKwl7CQkJCQlcCisrICAgICAgICAgIGlmIChNID09IFFJbW9kZSkgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgVU5TSUdORURQID0gMTsgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBlbHNlIGlmIChNID09IFNJbW9kZSkgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBVTlNJR05FRFAgPSAwOyAgICAgICAgICAgICAgICAgICAgICBcCisrCSAgKE0pID0gU0ltb2RlOwkJCQlcCisrCX0JCQkJCVwKKysgICAgfQorKworKyNkZWZpbmUgUFJPTU9URV9GVU5DVElPTl9NT0RFKE0sIFVOU0lHTkVEUCwgVFlQRSkgICAgICAgIFwKKysgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIGlmIChHRVRfTU9ERV9DTEFTUyAoTSkgPT0gTU9ERV9JTlQgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgJiYgR0VUX01PREVfU0laRSAoTSkgPCA0KSAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAoTSkgPSBTSW1vZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0KKysKKysvKiBEZWZpbmUgaWYgb3BlcmF0aW9ucyBiZXR3ZWVuIHJlZ2lzdGVycyBhbHdheXMgcGVyZm9ybSB0aGUgb3BlcmF0aW9uCisrICAgb24gdGhlIGZ1bGwgcmVnaXN0ZXIgZXZlbiBpZiBhIG5hcnJvd2VyIG1vZGUgaXMgc3BlY2lmaWVkLiAgKi8KKysjZGVmaW5lIFdPUkRfUkVHSVNURVJfT1BFUkFUSU9OUworKworKy8qIERlZmluZSBpZiBsb2FkaW5nIGluIE1PREUsIGFuIGludGVncmFsIG1vZGUgbmFycm93ZXIgdGhhbiBCSVRTX1BFUl9XT1JECisrICAgd2lsbCBlaXRoZXIgemVyby1leHRlbmQgb3Igc2lnbi1leHRlbmQuICBUaGUgdmFsdWUgb2YgdGhpcyBtYWNybyBzaG91bGQKKysgICBiZSB0aGUgY29kZSB0aGF0IHNheXMgd2hpY2ggb25lIG9mIHRoZSB0d28gb3BlcmF0aW9ucyBpcyBpbXBsaWNpdGx5CisrICAgZG9uZSwgVU5LTk9XTiBpZiBub3Qga25vd24uICAqLworKyNkZWZpbmUgTE9BRF9FWFRFTkRfT1AoTU9ERSkJCQkJXAorKyAgICgoKE1PREUpID09IFFJbW9kZSkgPyBaRVJPX0VYVEVORAkJCVwKKysgICA6ICgoTU9ERSkgPT0gSEltb2RlKSA/IFNJR05fRVhURU5EIDogVU5LTk9XTikKKysKKysKKysvKgorK0RlZmluZSB0aGlzIG1hY3JvIGlmIHRoZSBwcm9tb3Rpb24gZGVzY3JpYmVkIGJ5IFBST01PVEVfTU9ERQorK3Nob3VsZCBvbmx5IGJlIHBlcmZvcm1lZCBmb3Igb3V0Z29pbmcgZnVuY3Rpb24gYXJndW1lbnRzIG9yCisrZnVuY3Rpb24gcmV0dXJuIHZhbHVlcywgYXMgc3BlY2lmaWVkIGJ5IFBST01PVEVfRlVOQ1RJT05fQVJHUworK2FuZCBQUk9NT1RFX0ZVTkNUSU9OX1JFVFVSTiwgcmVzcGVjdGl2ZWx5LgorKyovCisrLyogI2RlZmluZSBQUk9NT1RFX0ZPUl9DQUxMX09OTFkgKi8KKysKKysvKgorK05vcm1hbCBhbGlnbm1lbnQgcmVxdWlyZWQgZm9yIGZ1bmN0aW9uIHBhcmFtZXRlcnMgb24gdGhlIHN0YWNrLCBpbgorK2JpdHMuICBBbGwgc3RhY2sgcGFyYW1ldGVycyByZWNlaXZlIGF0IGxlYXN0IHRoaXMgbXVjaCBhbGlnbm1lbnQKKytyZWdhcmRsZXNzIG9mIGRhdGEgdHlwZS4gIE9uIG1vc3QgbWFjaGluZXMsIHRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlCisrc2l6ZSBvZiBhbiBpbnRlZ2VyLgorKyovCisrI2RlZmluZSBQQVJNX0JPVU5EQVJZIDMyCisrCisrLyoKKytEZWZpbmUgdGhpcyBtYWNybyB0byB0aGUgbWluaW11bSBhbGlnbm1lbnQgZW5mb3JjZWQgYnkgaGFyZHdhcmUgZm9yIHRoZQorK3N0YWNrIHBvaW50ZXIgb24gdGhpcyBtYWNoaW5lLiAgVGhlIGRlZmluaXRpb24gaXMgYSBDIGV4cHJlc3Npb24gZm9yIHRoZQorK2Rlc2lyZWQgYWxpZ25tZW50IChtZWFzdXJlZCBpbiBiaXRzKS4gIFRoaXMgdmFsdWUgaXMgdXNlZCBhcyBhIGRlZmF1bHQKKytpZiBQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlkgaXMgbm90IGRlZmluZWQuICBPbiBtb3N0IG1hY2hpbmVzLAorK3RoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIFBBUk1fQk9VTkRBUlkuCisrKi8KKysjZGVmaW5lIFNUQUNLX0JPVU5EQVJZIDMyCisrCisrLyoKKytEZWZpbmUgdGhpcyBtYWNybyBpZiB5b3Ugd2lzaCB0byBwcmVzZXJ2ZSBhIGNlcnRhaW4gYWxpZ25tZW50IGZvciB0aGUKKytzdGFjayBwb2ludGVyLCBncmVhdGVyIHRoYW4gd2hhdCB0aGUgaGFyZHdhcmUgZW5mb3JjZXMuICBUaGUgZGVmaW5pdGlvbgorK2lzIGEgQyBleHByZXNzaW9uIGZvciB0aGUgZGVzaXJlZCBhbGlnbm1lbnQgKG1lYXN1cmVkIGluIGJpdHMpLiAgVGhpcworK21hY3JvIG11c3QgZXZhbHVhdGUgdG8gYSB2YWx1ZSBlcXVhbCB0byBvciBsYXJnZXIgdGhhbgorK1NUQUNLX0JPVU5EQVJZLgorKyovCisrI2RlZmluZSBQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlkgKFRBUkdFVF9GT1JDRV9ET1VCTEVfQUxJR04gPyA2NCA6IDMyICkKKysKKysvKgorK0FsaWdubWVudCByZXF1aXJlZCBmb3IgYSBmdW5jdGlvbiBlbnRyeSBwb2ludCwgaW4gYml0cy4KKysqLworKyNkZWZpbmUgRlVOQ1RJT05fQk9VTkRBUlkgMTYKKysKKysvKgorK0JpZ2dlc3QgYWxpZ25tZW50IHRoYXQgYW55IGRhdGEgdHlwZSBjYW4gcmVxdWlyZSBvbiB0aGlzIG1hY2hpbmUsIGluIGJpdHMuCisrKi8KKysjZGVmaW5lIEJJR0dFU1RfQUxJR05NRU5UICAoVEFSR0VUX0ZPUkNFX0RPVUJMRV9BTElHTiA/IDY0IDogMzIgKQorKworKy8qCisrSWYgZGVmaW5lZCwgdGhlIHNtYWxsZXN0IGFsaWdubWVudCwgaW4gYml0cywgdGhhdCBjYW4gYmUgZ2l2ZW4gdG8gYW4KKytvYmplY3QgdGhhdCBjYW4gYmUgcmVmZXJlbmNlZCBpbiBvbmUgb3BlcmF0aW9uLCB3aXRob3V0IGRpc3R1cmJpbmcgYW55CisrbmVhcmJ5IG9iamVjdC4gIE5vcm1hbGx5LCB0aGlzIGlzIEJJVFNfUEVSX1VOSVQsIGJ1dCBtYXkgYmUgbGFyZ2VyCisrb24gbWFjaGluZXMgdGhhdCBkb24ndCBoYXZlIGJ5dGUgb3IgaGFsZi13b3JkIHN0b3JlIG9wZXJhdGlvbnMuCisrKi8KKysjZGVmaW5lIE1JTklNVU1fQVRPTUlDX0FMSUdOTUVOVCBCSVRTX1BFUl9VTklUCisrCisrCisrLyoKKytBbiBpbnRlZ2VyIGV4cHJlc3Npb24gZm9yIHRoZSBzaXplIGluIGJpdHMgb2YgdGhlIGxhcmdlc3QgaW50ZWdlciBtYWNoaW5lIG1vZGUgdGhhdAorK3Nob3VsZCBhY3R1YWxseSBiZSB1c2VkLiBBbGwgaW50ZWdlciBtYWNoaW5lIG1vZGVzIG9mIHRoaXMgc2l6ZSBvciBzbWFsbGVyIGNhbiBiZQorK3VzZWQgZm9yIHN0cnVjdHVyZXMgYW5kIHVuaW9ucyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBzaXplcy4gSWYgdGhpcyBtYWNybyBpcyB1bmRlZmluZWQsCisrR0VUX01PREVfQklUU0laRSAoREltb2RlKSBpcyBhc3N1bWVkLiovCisrI2RlZmluZSBNQVhfRklYRURfTU9ERV9TSVpFICBHRVRfTU9ERV9CSVRTSVpFIChESW1vZGUpCisrCisrCisrLyoKKytJZiBkZWZpbmVkLCBhIEMgZXhwcmVzc2lvbiB0byBjb21wdXRlIHRoZSBhbGlnbm1lbnQgZ2l2ZW4gdG8gYSBjb25zdGFudAorK3RoYXQgaXMgYmVpbmcgcGxhY2VkIGluIG1lbW9yeS4gIENPTlNUQU5UIGlzIHRoZSBjb25zdGFudCBhbmQKKytCQVNJQ19BTElHTiBpcyB0aGUgYWxpZ25tZW50IHRoYXQgdGhlIG9iamVjdCB3b3VsZCBvcmRpbmFyaWx5CisraGF2ZS4gIFRoZSB2YWx1ZSBvZiB0aGlzIG1hY3JvIGlzIHVzZWQgaW5zdGVhZCBvZiB0aGF0IGFsaWdubWVudCB0bworK2FsaWduIHRoZSBvYmplY3QuCisrCisrSWYgdGhpcyBtYWNybyBpcyBub3QgZGVmaW5lZCwgdGhlbiBCQVNJQ19BTElHTiBpcyB1c2VkLgorKworK1RoZSB0eXBpY2FsIHVzZSBvZiB0aGlzIG1hY3JvIGlzIHRvIGluY3JlYXNlIGFsaWdubWVudCBmb3Igc3RyaW5nCisrY29uc3RhbnRzIHRvIGJlIHdvcmQgYWxpZ25lZCBzbyB0aGF0IHN0cmNweSBjYWxscyB0aGF0IGNvcHkKKytjb25zdGFudHMgY2FuIGJlIGRvbmUgaW5saW5lLgorKyovCisrI2RlZmluZSBDT05TVEFOVF9BTElHTk1FTlQoQ09OU1RBTlQsIEJBU0lDX0FMSUdOKSBcCisrICgoVFJFRV9DT0RFKENPTlNUQU5UKSA9PSBTVFJJTkdfQ1NUKSA/IEJJVFNfUEVSX1dPUkQgOiBCQVNJQ19BTElHTikKKysKKysvKiBUcnkgdG8gYWxpZ24gc3RyaW5nIHRvIGEgd29yZC4gKi8KKysjZGVmaW5lIERBVEFfQUxJR05NRU5UKFRZUEUsIEFMSUdOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAoeyhUUkVFX0NPREUgKFRZUEUpID09IEFSUkFZX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgJiYgVFlQRV9NT0RFIChUUkVFX1RZUEUgKFRZUEUpKSA9PSBRSW1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICYmIChBTElHTikgPCBCSVRTX1BFUl9XT1JEID8gQklUU19QRVJfV09SRCA6IChBTElHTikpO30pCisrCisrLyogVHJ5IHRvIGFsaWduIGxvY2FsIHN0b3JlIHN0cmluZ3MgdG8gYSB3b3JkLiAqLworKyNkZWZpbmUgTE9DQUxfQUxJR05NRU5UKFRZUEUsIEFMSUdOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICh7KFRSRUVfQ09ERSAoVFlQRSkgPT0gQVJSQVlfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAmJiBUWVBFX01PREUgKFRSRUVfVFlQRSAoVFlQRSkpID09IFFJbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgJiYgKEFMSUdOKSA8IEJJVFNfUEVSX1dPUkQgPyBCSVRTX1BFUl9XT1JEIDogKEFMSUdOKSk7fSkKKysKKysvKgorK0RlZmluZSB0aGlzIG1hY3JvIHRvIGJlIHRoZSB2YWx1ZSAxIGlmIGluc3RydWN0aW9ucyB3aWxsIGZhaWwgdG8gd29yaworK2lmIGdpdmVuIGRhdGEgbm90IG9uIHRoZSBub21pbmFsIGFsaWdubWVudC4gIElmIGluc3RydWN0aW9ucyB3aWxsIG1lcmVseQorK2dvIHNsb3dlciBpbiB0aGF0IGNhc2UsIGRlZmluZSB0aGlzIG1hY3JvIGFzIDAuCisrKi8KKysjZGVmaW5lIFNUUklDVF9BTElHTk1FTlQgMQorKworKy8qCisrRGVmaW5lIHRoaXMgaWYgeW91IHdpc2ggdG8gaW1pdGF0ZSB0aGUgd2F5IG1hbnkgb3RoZXIgQyBjb21waWxlcnMgaGFuZGxlCisrYWxpZ25tZW50IG9mIGJpdC1maWVsZHMgYW5kIHRoZSBzdHJ1Y3R1cmVzIHRoYXQgY29udGFpbiB0aGVtLgorKworK1RoZSBiZWhhdmlvciBpcyB0aGF0IHRoZSB0eXBlIHdyaXR0ZW4gZm9yIGEgYml0LWZpZWxkIChpbnQsCisrc2hvcnQsIG9yIG90aGVyIGludGVnZXIgdHlwZSkgaW1wb3NlcyBhbiBhbGlnbm1lbnQgZm9yIHRoZQorK2VudGlyZSBzdHJ1Y3R1cmUsIGFzIGlmIHRoZSBzdHJ1Y3R1cmUgcmVhbGx5IGRpZCBjb250YWluIGFuIG9yZGluYXJ5CisrZmllbGQgb2YgdGhhdCB0eXBlLiAgSW4gYWRkaXRpb24sIHRoZSBiaXQtZmllbGQgaXMgcGxhY2VkIHdpdGhpbiB0aGUKKytzdHJ1Y3R1cmUgc28gdGhhdCBpdCB3b3VsZCBmaXQgd2l0aGluIHN1Y2ggYSBmaWVsZCwgbm90IGNyb3NzaW5nIGEKKytib3VuZGFyeSBmb3IgaXQuCisrCisrVGh1cywgb24gbW9zdCBtYWNoaW5lcywgYSBiaXQtZmllbGQgd2hvc2UgdHlwZSBpcyB3cml0dGVuIGFzIGludAorK3dvdWxkIG5vdCBjcm9zcyBhIGZvdXItYnl0ZSBib3VuZGFyeSwgYW5kIHdvdWxkIGZvcmNlIGZvdXItYnl0ZQorK2FsaWdubWVudCBmb3IgdGhlIHdob2xlIHN0cnVjdHVyZS4gIChUaGUgYWxpZ25tZW50IHVzZWQgbWF5IG5vdCBiZSBmb3VyCisrYnl0ZXM7IGl0IGlzIGNvbnRyb2xsZWQgYnkgdGhlIG90aGVyIGFsaWdubWVudCBwYXJhbWV0ZXJzLikKKysKKytJZiB0aGUgbWFjcm8gaXMgZGVmaW5lZCwgaXRzIGRlZmluaXRpb24gc2hvdWxkIGJlIGEgQyBleHByZXNzaW9uOworK2Egbm9uemVybyB2YWx1ZSBmb3IgdGhlIGV4cHJlc3Npb24gZW5hYmxlcyB0aGlzIGJlaGF2aW9yLgorKworK05vdGUgdGhhdCBpZiB0aGlzIG1hY3JvIGlzIG5vdCBkZWZpbmVkLCBvciBpdHMgdmFsdWUgaXMgemVybywgc29tZQorK2JpdC1maWVsZHMgbWF5IGNyb3NzIG1vcmUgdGhhbiBvbmUgYWxpZ25tZW50IGJvdW5kYXJ5LiAgVGhlIGNvbXBpbGVyIGNhbgorK3N1cHBvcnQgc3VjaCByZWZlcmVuY2VzIGlmIHRoZXJlIGFyZSBpbnN2LCBleHR2LCBhbmQKKytleHR6diBpbnNucyB0aGF0IGNhbiBkaXJlY3RseSByZWZlcmVuY2UgbWVtb3J5LgorKworK1RoZSBvdGhlciBrbm93biB3YXkgb2YgbWFraW5nIGJpdC1maWVsZHMgd29yayBpcyB0byBkZWZpbmUKKytTVFJVQ1RVUkVfU0laRV9CT1VOREFSWSBhcyBsYXJnZSBhcyBCSUdHRVNUX0FMSUdOTUVOVC4KKytUaGVuIGV2ZXJ5IHN0cnVjdHVyZSBjYW4gYmUgYWNjZXNzZWQgd2l0aCBmdWxsd29yZHMuCisrCisrVW5sZXNzIHRoZSBtYWNoaW5lIGhhcyBiaXQtZmllbGQgaW5zdHJ1Y3Rpb25zIG9yIHlvdSBkZWZpbmUKKytTVFJVQ1RVUkVfU0laRV9CT1VOREFSWSB0aGF0IHdheSwgeW91IG11c3QgZGVmaW5lCisrUENDX0JJVEZJRUxEX1RZUEVfTUFUVEVSUyB0byBoYXZlIGEgbm9uemVybyB2YWx1ZS4KKysKKytJZiB5b3VyIGFpbSBpcyB0byBtYWtlIEdDQyB1c2UgdGhlIHNhbWUgY29udmVudGlvbnMgZm9yIGxheWluZyBvdXQKKytiaXQtZmllbGRzIGFzIGFyZSB1c2VkIGJ5IGFub3RoZXIgY29tcGlsZXIsIGhlcmUgaXMgaG93IHRvIGludmVzdGlnYXRlCisrd2hhdCB0aGUgb3RoZXIgY29tcGlsZXIgZG9lcy4gIENvbXBpbGUgYW5kIHJ1biB0aGlzIHByb2dyYW06CisrCisrc3RydWN0IGZvbzEKKyt7CisrICBjaGFyIHg7CisrICBjaGFyIDowOworKyAgY2hhciB5OworK307CisrCisrc3RydWN0IGZvbzIKKyt7CisrICBjaGFyIHg7CisrICBpbnQgOjA7CisrICBjaGFyIHk7CisrfTsKKysKKyttYWluICgpCisreworKyAgcHJpbnRmICgiU2l6ZSBvZiBmb28xIGlzICVkXG4iLAorKyAgICAgICAgICBzaXplb2YgKHN0cnVjdCBmb28xKSk7CisrICBwcmludGYgKCJTaXplIG9mIGZvbzIgaXMgJWRcbiIsCisrICAgICAgICAgIHNpemVvZiAoc3RydWN0IGZvbzIpKTsKKysgIGV4aXQgKDApOworK30KKysKKytJZiB0aGlzIHByaW50cyAyIGFuZCA1LCB0aGVuIHRoZSBjb21waWxlcidzIGJlaGF2aW9yIGlzIHdoYXQgeW91IHdvdWxkCisrZ2V0IGZyb20gUENDX0JJVEZJRUxEX1RZUEVfTUFUVEVSUy4KKysqLworKyNkZWZpbmUgUENDX0JJVEZJRUxEX1RZUEVfTUFUVEVSUyAxCisrCisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKyAqIExheW91dCBvZiBTb3VyY2UgTGFuZ3VhZ2UgRGF0YSBUeXBlcworKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysvKgorK0EgQyBleHByZXNzaW9uIGZvciB0aGUgc2l6ZSBpbiBiaXRzIG9mIHRoZSB0eXBlIGludCBvbiB0aGUKKyt0YXJnZXQgbWFjaGluZS4gIElmIHlvdSBkb24ndCBkZWZpbmUgdGhpcywgdGhlIGRlZmF1bHQgaXMgb25lIHdvcmQuCisrKi8KKysjZGVmaW5lIElOVF9UWVBFX1NJWkUgMzIKKysKKysvKgorK0EgQyBleHByZXNzaW9uIGZvciB0aGUgc2l6ZSBpbiBiaXRzIG9mIHRoZSB0eXBlIHNob3J0IG9uIHRoZQorK3RhcmdldCBtYWNoaW5lLiAgSWYgeW91IGRvbid0IGRlZmluZSB0aGlzLCB0aGUgZGVmYXVsdCBpcyBoYWxmIGEgd29yZC4gKElmCisrdGhpcyB3b3VsZCBiZSBsZXNzIHRoYW4gb25lIHN0b3JhZ2UgdW5pdCwgaXQgaXMgcm91bmRlZCB1cCB0byBvbmUgdW5pdC4pCisrKi8KKysjZGVmaW5lIFNIT1JUX1RZUEVfU0laRSAxNgorKworKy8qCisrQSBDIGV4cHJlc3Npb24gZm9yIHRoZSBzaXplIGluIGJpdHMgb2YgdGhlIHR5cGUgbG9uZyBvbiB0aGUKKyt0YXJnZXQgbWFjaGluZS4gIElmIHlvdSBkb24ndCBkZWZpbmUgdGhpcywgdGhlIGRlZmF1bHQgaXMgb25lIHdvcmQuCisrKi8KKysjZGVmaW5lIExPTkdfVFlQRV9TSVpFIDMyCisrCisrCisrLyoKKytBIEMgZXhwcmVzc2lvbiBmb3IgdGhlIHNpemUgaW4gYml0cyBvZiB0aGUgdHlwZSBsb25nIGxvbmcgb24gdGhlCisrdGFyZ2V0IG1hY2hpbmUuICBJZiB5b3UgZG9uJ3QgZGVmaW5lIHRoaXMsIHRoZSBkZWZhdWx0IGlzIHR3bworK3dvcmRzLiAgSWYgeW91IHdhbnQgdG8gc3VwcG9ydCBHTlUgQWRhIG9uIHlvdXIgbWFjaGluZSwgdGhlIHZhbHVlIG9mIHRoaXMKKyttYWNybyBtdXN0IGJlIGF0IGxlYXN0IDY0LgorKyovCisrI2RlZmluZSBMT05HX0xPTkdfVFlQRV9TSVpFIDY0CisrCisrLyoKKytBIEMgZXhwcmVzc2lvbiBmb3IgdGhlIHNpemUgaW4gYml0cyBvZiB0aGUgdHlwZSBjaGFyIG9uIHRoZQorK3RhcmdldCBtYWNoaW5lLiAgSWYgeW91IGRvbid0IGRlZmluZSB0aGlzLCB0aGUgZGVmYXVsdCBpcworK0JJVFNfUEVSX1VOSVQuCisrKi8KKysjZGVmaW5lIENIQVJfVFlQRV9TSVpFIDgKKysKKysKKysvKgorK0EgQyBleHByZXNzaW9uIGZvciB0aGUgc2l6ZSBpbiBiaXRzIG9mIHRoZSBDKysgdHlwZSBib29sIGFuZAorK0M5OSB0eXBlIF9Cb29sIG9uIHRoZSB0YXJnZXQgbWFjaGluZS4gIElmIHlvdSBkb24ndCBkZWZpbmUKKyt0aGlzLCBhbmQgeW91IHByb2JhYmx5IHNob3VsZG4ndCwgdGhlIGRlZmF1bHQgaXMgQ0hBUl9UWVBFX1NJWkUuCisrKi8KKysjZGVmaW5lIEJPT0xfVFlQRV9TSVpFIDgKKysKKysKKysvKgorK0FuIGV4cHJlc3Npb24gd2hvc2UgdmFsdWUgaXMgMSBvciAwLCBhY2NvcmRpbmcgdG8gd2hldGhlciB0aGUgdHlwZQorK2NoYXIgc2hvdWxkIGJlIHNpZ25lZCBvciB1bnNpZ25lZCBieSBkZWZhdWx0LiAgVGhlIHVzZXIgY2FuCisrYWx3YXlzIG92ZXJyaWRlIHRoaXMgZGVmYXVsdCB3aXRoIHRoZSBvcHRpb25zIC1mc2lnbmVkLWNoYXIKKythbmQgLWZ1bnNpZ25lZC1jaGFyLgorKyovCisrLyogV2UgYXJlIHVzaW5nIHVuc2lnbmVkIGNoYXIgKi8KKysjZGVmaW5lIERFRkFVTFRfU0lHTkVEX0NIQVIgMAorKworKworKy8qCisrQSBDIGV4cHJlc3Npb24gZm9yIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIG5hbWUgb2YgdGhlIGRhdGEgdHlwZSB0byB1c2UKKytmb3Igc2l6ZSB2YWx1ZXMuICBUaGUgdHlwZWRlZiBuYW1lIHNpemVfdCBpcyBkZWZpbmVkIHVzaW5nIHRoZQorK2NvbnRlbnRzIG9mIHRoZSBzdHJpbmcuCisrCisrVGhlIHN0cmluZyBjYW4gY29udGFpbiBtb3JlIHRoYW4gb25lIGtleXdvcmQuICBJZiBzbywgc2VwYXJhdGUgdGhlbSB3aXRoCisrc3BhY2VzLCBhbmQgd3JpdGUgZmlyc3QgYW55IGxlbmd0aCBrZXl3b3JkLCB0aGVuIHVuc2lnbmVkIGlmCisrYXBwcm9wcmlhdGUsIGFuZCBmaW5hbGx5IGludC4gIFRoZSBzdHJpbmcgbXVzdCBleGFjdGx5IG1hdGNoIG9uZQorK29mIHRoZSBkYXRhIHR5cGUgbmFtZXMgZGVmaW5lZCBpbiB0aGUgZnVuY3Rpb24KKytpbml0X2RlY2xfcHJvY2Vzc2luZyBpbiB0aGUgZmlsZSBjLWRlY2wuYy4gIFlvdSBtYXkgbm90Cisrb21pdCBpbnQgb3IgY2hhbmdlIHRoZSBvcmRlciAtIHRoYXQgd291bGQgY2F1c2UgdGhlIGNvbXBpbGVyIHRvCisrY3Jhc2ggb24gc3RhcnR1cC4KKysKKytJZiB5b3UgZG9uJ3QgZGVmaW5lIHRoaXMgbWFjcm8sIHRoZSBkZWZhdWx0IGlzICJsb25nIHVuc2lnbmVkIGludCIuCisrKi8KKysjZGVmaW5lIFNJWkVfVFlQRSAibG9uZyB1bnNpZ25lZCBpbnQiCisrCisrLyoKKytBIEMgZXhwcmVzc2lvbiBmb3IgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgbmFtZSBvZiB0aGUgZGF0YSB0eXBlIHRvIHVzZQorK2ZvciB0aGUgcmVzdWx0IG9mIHN1YnRyYWN0aW5nIHR3byBwb2ludGVycy4gIFRoZSB0eXBlZGVmIG5hbWUKKytwdHJkaWZmX3QgaXMgZGVmaW5lZCB1c2luZyB0aGUgY29udGVudHMgb2YgdGhlIHN0cmluZy4gIFNlZQorK1NJWkVfVFlQRSBhYm92ZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKysKKytJZiB5b3UgZG9uJ3QgZGVmaW5lIHRoaXMgbWFjcm8sIHRoZSBkZWZhdWx0IGlzICJsb25nIGludCIuCisrKi8KKysjZGVmaW5lIFBUUkRJRkZfVFlQRSAibG9uZyBpbnQiCisrCisrCisrLyoKKytBIEMgZXhwcmVzc2lvbiBmb3IgdGhlIHNpemUgaW4gYml0cyBvZiB0aGUgZGF0YSB0eXBlIGZvciB3aWRlCisrY2hhcmFjdGVycy4gIFRoaXMgaXMgdXNlZCBpbiBjcHAsIHdoaWNoIGNhbm5vdCBtYWtlIHVzZSBvZgorK1dDSEFSX1RZUEUuCisrKi8KKysjZGVmaW5lIFdDSEFSX1RZUEVfU0laRSAzMgorKworKworKy8qCisrQSBDIGV4cHJlc3Npb24gZm9yIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIG5hbWUgb2YgdGhlIGRhdGEgdHlwZSB0bworK3VzZSBmb3Igd2lkZSBjaGFyYWN0ZXJzIHBhc3NlZCB0byBwcmludGYgYW5kIHJldHVybmVkIGZyb20KKytnZXR3Yy4gIFRoZSB0eXBlZGVmIG5hbWUgd2ludF90IGlzIGRlZmluZWQgdXNpbmcgdGhlCisrY29udGVudHMgb2YgdGhlIHN0cmluZy4gIFNlZSBTSVpFX1RZUEUgYWJvdmUgZm9yIG1vcmUKKytpbmZvcm1hdGlvbi4KKysKKytJZiB5b3UgZG9uJ3QgZGVmaW5lIHRoaXMgbWFjcm8sIHRoZSBkZWZhdWx0IGlzICJ1bnNpZ25lZCBpbnQiLgorKyovCisrI2RlZmluZSBXSU5UX1RZUEUgInVuc2lnbmVkIGludCIKKysKKysvKgorK0EgQyBleHByZXNzaW9uIGZvciBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBuYW1lIG9mIHRoZSBkYXRhIHR5cGUgdGhhdAorK2NhbiByZXByZXNlbnQgYW55IHZhbHVlIG9mIGFueSBzdGFuZGFyZCBvciBleHRlbmRlZCBzaWduZWQgaW50ZWdlciB0eXBlLgorK1RoZSB0eXBlZGVmIG5hbWUgaW50bWF4X3QgaXMgZGVmaW5lZCB1c2luZyB0aGUgY29udGVudHMgb2YgdGhlCisrc3RyaW5nLiAgU2VlIFNJWkVfVFlQRSBhYm92ZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKysKKytJZiB5b3UgZG9uJ3QgZGVmaW5lIHRoaXMgbWFjcm8sIHRoZSBkZWZhdWx0IGlzIHRoZSBmaXJzdCBvZgorKyJpbnQiLCAibG9uZyBpbnQiLCBvciAibG9uZyBsb25nIGludCIgdGhhdCBoYXMgYXMKKyttdWNoIHByZWNpc2lvbiBhcyBsb25nIGxvbmcgaW50LgorKyovCisrI2RlZmluZSBJTlRNQVhfVFlQRSAibG9uZyBsb25nIGludCIKKysKKysvKgorK0EgQyBleHByZXNzaW9uIGZvciBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBuYW1lIG9mIHRoZSBkYXRhIHR5cGUgdGhhdAorK2NhbiByZXByZXNlbnQgYW55IHZhbHVlIG9mIGFueSBzdGFuZGFyZCBvciBleHRlbmRlZCB1bnNpZ25lZCBpbnRlZ2VyCisrdHlwZS4gIFRoZSB0eXBlZGVmIG5hbWUgdWludG1heF90IGlzIGRlZmluZWQgdXNpbmcgdGhlIGNvbnRlbnRzCisrb2YgdGhlIHN0cmluZy4gIFNlZSBTSVpFX1RZUEUgYWJvdmUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisrCisrSWYgeW91IGRvbid0IGRlZmluZSB0aGlzIG1hY3JvLCB0aGUgZGVmYXVsdCBpcyB0aGUgZmlyc3Qgb2YKKysidW5zaWduZWQgaW50IiwgImxvbmcgdW5zaWduZWQgaW50Iiwgb3IgImxvbmcgbG9uZyB1bnNpZ25lZCBpbnQiCisrdGhhdCBoYXMgYXMgbXVjaCBwcmVjaXNpb24gYXMgbG9uZyBsb25nIHVuc2lnbmVkIGludC4KKysqLworKyNkZWZpbmUgVUlOVE1BWF9UWVBFICJsb25nIGxvbmcgdW5zaWduZWQgaW50IgorKworKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysgKiBSZWdpc3RlciBVc2FnZQorKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysvKiBDb252ZXJ0IGZyb20gZ2NjIGludGVybmFsIHJlZ2lzdGVyIG51bWJlciB0byByZWdpc3RlciBudW1iZXIKKysgICB1c2VkIGluIGFzc2VtYmx5IGNvZGUgKi8KKysjZGVmaW5lIEFTTV9SRUdOVU0ocmVnKSAoTEFTVF9SRUdOVU0gLSAocmVnKSkKKysjZGVmaW5lIEFTTV9GUF9SRUdOVU0ocmVnKSAoTEFTVF9GUF9SRUdOVU0gLSAocmVnKSkKKysKKysvKiBDb252ZXJ0IGJldHdlZW4gcmVnaXN0ZXIgbnVtYmVyIHVzZWQgaW4gYXNzZW1ibHkgdG8gZ2NjCisrICAgaW50ZXJuYWwgcmVnaXN0ZXIgbnVtYmVyICAqLworKyNkZWZpbmUgSU5URVJOQUxfUkVHTlVNKHJlZykgKExBU1RfUkVHTlVNIC0gKHJlZykpCisrI2RlZmluZSBJTlRFUk5BTF9GUF9SRUdOVU0ocmVnKSAoTEFTVF9GUF9SRUdOVU0gLSAocmVnKSkKKysKKysvKiogQmFzaWMgQ2hhcmFjdGVyaXN0aWNzIG9mIFJlZ2lzdGVycyAqKi8KKysKKysvKgorK051bWJlciBvZiBoYXJkd2FyZSByZWdpc3RlcnMga25vd24gdG8gdGhlIGNvbXBpbGVyLiAgVGhleSByZWNlaXZlCisrbnVtYmVycyAwIHRocm91Z2ggRklSU1RfUFNFVURPX1JFR0lTVEVSLTE7IHRodXMsIHRoZSBmaXJzdAorK3BzZXVkbyByZWdpc3RlcidzIG51bWJlciByZWFsbHkgaXMgYXNzaWduZWQgdGhlIG51bWJlcgorK0ZJUlNUX1BTRVVET19SRUdJU1RFUi4KKysqLworKyNkZWZpbmUgRklSU1RfUFNFVURPX1JFR0lTVEVSIChMQVNUX0ZQX1JFR05VTSArIDEpCisrCisrI2RlZmluZSBGSVJTVF9SRUdOVU0gMAorKyNkZWZpbmUgTEFTVF9SRUdOVU0gMTUKKysjZGVmaW5lIE5VTV9GUF9SRUdTIDE2CisrI2RlZmluZSBGSVJTVF9GUF9SRUdOVU0gMTYKKysjZGVmaW5lIExBU1RfRlBfUkVHTlVNICgxNitOVU1fRlBfUkVHUy0xKQorKworKy8qCisrQW4gaW5pdGlhbGl6ZXIgdGhhdCBzYXlzIHdoaWNoIHJlZ2lzdGVycyBhcmUgdXNlZCBmb3IgZml4ZWQgcHVycG9zZXMKKythbGwgdGhyb3VnaG91dCB0aGUgY29tcGlsZWQgY29kZSBhbmQgYXJlIHRoZXJlZm9yZSBub3QgYXZhaWxhYmxlIGZvcgorK2dlbmVyYWwgYWxsb2NhdGlvbi4gIFRoZXNlIHdvdWxkIGluY2x1ZGUgdGhlIHN0YWNrIHBvaW50ZXIsIHRoZSBmcmFtZQorK3BvaW50ZXIgKGV4Y2VwdCBvbiBtYWNoaW5lcyB3aGVyZSB0aGF0IGNhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorK3JlZ2lzdGVyIHdoZW4gbm8gZnJhbWUgcG9pbnRlciBpcyBuZWVkZWQpLCB0aGUgcHJvZ3JhbSBjb3VudGVyIG9uCisrbWFjaGluZXMgd2hlcmUgdGhhdCBpcyBjb25zaWRlcmVkIG9uZSBvZiB0aGUgYWRkcmVzc2FibGUgcmVnaXN0ZXJzLAorK2FuZCBhbnkgb3RoZXIgbnVtYmVyZWQgcmVnaXN0ZXIgd2l0aCBhIHN0YW5kYXJkIHVzZS4KKysKKytUaGlzIGluZm9ybWF0aW9uIGlzIGV4cHJlc3NlZCBhcyBhIHNlcXVlbmNlIG9mIG51bWJlcnMsIHNlcGFyYXRlZCBieQorK2NvbW1hcyBhbmQgc3Vycm91bmRlZCBieSBicmFjZXMuICBUaGUgbnRoIG51bWJlciBpcyAxIGlmCisrcmVnaXN0ZXIgbiBpcyBmaXhlZCwgMCBvdGhlcndpc2UuCisrCisrVGhlIHRhYmxlIGluaXRpYWxpemVkIGZyb20gdGhpcyBtYWNybywgYW5kIHRoZSB0YWJsZSBpbml0aWFsaXplZCBieQorK3RoZSBmb2xsb3dpbmcgb25lLCBtYXkgYmUgb3ZlcnJpZGRlbiBhdCBydW4gdGltZSBlaXRoZXIgYXV0b21hdGljYWxseSwKKytieSB0aGUgYWN0aW9ucyBvZiB0aGUgbWFjcm8gQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UsIG9yIGJ5CisrdGhlIHVzZXIgd2l0aCB0aGUgY29tbWFuZCBvcHRpb25zIC1mZml4ZWQtW3JlZ10sCisrLWZjYWxsLXVzZWQtW3JlZ10gYW5kIC1mY2FsbC1zYXZlZC1bcmVnXS4KKysqLworKworKy8qIFRoZSBpbnRlcm5hbCBnY2MgcmVnaXN0ZXIgbnVtYmVycyBhcmUgcmV2ZXJzZWQKKysgICBjb21wYXJlZCB0byB0aGUgcmVhbCByZWdpc3RlciBudW1iZXJzIHNpbmNlCisrICAgZ2NjIGV4cGVjdHMgZGF0YSB0eXBlcyBzdG9yZWQgb3ZlciBtdWx0aXBsZQorKyAgIHJlZ2lzdGVycyBpbiB0aGUgcmVnaXN0ZXIgZmlsZSB0byBiZSBiaWcgZW5kaWFuCisrICAgaWYgdGhlIG1lbW9yeSBsYXlvdXQgaXMgYmlnIGVuZGlhbi4gQnV0IHRoaXMKKysgICBpcyBub3QgdGhlIGNhc2UgZm9yIGF2cjMyIHNvIHdlIGZha2UgYSBiaWcKKysgICBlbmRpYW4gcmVnaXN0ZXIgZmlsZS4gKi8KKysKKysjZGVmaW5lIEZJWEVEX1JFR0lTVEVSUyB7CVwKKysgIDEsIC8qIFByb2dyYW0gQ291bnRlciAqLwlcCisrICAwLCAvKiBMaW5rIFJlZ2lzdGVyICovCVwKKysgIDEsIC8qIFN0YWNrIFBvaW50ZXIgKi8JXAorKyAgMCwgLyogcjEyICovCQkJXAorKyAgMCwgLyogcjExICovCQkJXAorKyAgMCwgLyogcjEwICovCQkJXAorKyAgMCwgLyogcjkgKi8JCQlcCisrICAwLCAvKiByOCAqLwkJCVwKKysgIDAsIC8qIHI3ICovCQkJXAorKyAgMCwgLyogcjYgKi8JCQlcCisrICAwLCAvKiByNSAqLwkJCVwKKysgIDAsIC8qIHI0ICovCQkJXAorKyAgMCwgLyogcjMgKi8JCQlcCisrICAwLCAvKiByMiAqLwkJCVwKKysgIDAsIC8qIHIxICovCQkJXAorKyAgMCwgLyogcjAgKi8JCQlcCisrICAwLCAvKiBmMTUgKi8JCQlcCisrICAwLCAvKiBmMTQgKi8JCQlcCisrICAwLCAvKiBmMTMgKi8JCQlcCisrICAwLCAvKiBmMTIgKi8JCQlcCisrICAwLCAvKiBmMTEgKi8JCQlcCisrICAwLCAvKiBmMTAgKi8JCQlcCisrICAwLCAvKiBmOSAqLwkJCVwKKysgIDAsIC8qIGY4ICovCQkJXAorKyAgMCwgLyogZjcgKi8JCQlcCisrICAwLCAvKiBmNiAqLwkJCVwKKysgIDAsIC8qIGY1ICovCQkJXAorKyAgMCwgLyogZjQgKi8JCQlcCisrICAwLCAvKiBmMyAqLwkJCVwKKysgIDAsIC8qIGYyKi8JCQlcCisrICAwLCAvKiBmMSAqLwkJCVwKKysgIDAgIC8qIGYwICovCQkJXAorK30KKysKKysvKgorK0xpa2UgRklYRURfUkVHSVNURVJTIGJ1dCBoYXMgMSBmb3IgZWFjaCByZWdpc3RlciB0aGF0IGlzCisrY2xvYmJlcmVkIChpbiBnZW5lcmFsKSBieSBmdW5jdGlvbiBjYWxscyBhcyB3ZWxsIGFzIGZvciBmaXhlZAorK3JlZ2lzdGVycy4gIFRoaXMgbWFjcm8gdGhlcmVmb3JlIGlkZW50aWZpZXMgdGhlIHJlZ2lzdGVycyB0aGF0IGFyZSBub3QKKythdmFpbGFibGUgZm9yIGdlbmVyYWwgYWxsb2NhdGlvbiBvZiB2YWx1ZXMgdGhhdCBtdXN0IGxpdmUgYWNyb3NzCisrZnVuY3Rpb24gY2FsbHMuCisrCisrSWYgYSByZWdpc3RlciBoYXMgMCBpbiBDQUxMX1VTRURfUkVHSVNURVJTLCB0aGUgY29tcGlsZXIKKythdXRvbWF0aWNhbGx5IHNhdmVzIGl0IG9uIGZ1bmN0aW9uIGVudHJ5IGFuZCByZXN0b3JlcyBpdCBvbiBmdW5jdGlvbgorK2V4aXQsIGlmIHRoZSByZWdpc3RlciBpcyB1c2VkIHdpdGhpbiB0aGUgZnVuY3Rpb24uCisrKi8KKysjZGVmaW5lIENBTExfVVNFRF9SRUdJU1RFUlMgewlcCisrICAxLCAvKiBQcm9ncmFtIENvdW50ZXIgKi8JXAorKyAgMCwgLyogTGluayBSZWdpc3RlciAqLwlcCisrICAxLCAvKiBTdGFjayBQb2ludGVyICovCVwKKysgIDEsIC8qIHIxMiAqLwkJCVwKKysgIDEsIC8qIHIxMSAqLwkJCVwKKysgIDEsIC8qIHIxMCAqLwkJCVwKKysgIDEsIC8qIHI5ICovCQkJXAorKyAgMSwgLyogcjggKi8JCQlcCisrICAwLCAvKiByNyAqLwkJCVwKKysgIDAsIC8qIHI2ICovCQkJXAorKyAgMCwgLyogcjUgKi8JCQlcCisrICAwLCAvKiByNCAqLwkJCVwKKysgIDAsIC8qIHIzICovCQkJXAorKyAgMCwgLyogcjIgKi8JCQlcCisrICAwLCAvKiByMSAqLwkJCVwKKysgIDAsIC8qIHIwICovCQkJXAorKyAgMSwgLyogZjE1ICovCQkJXAorKyAgMSwgLyogZjE0ICovCQkJXAorKyAgMSwgLyogZjEzICovCQkJXAorKyAgMSwgLyogZjEyICovCQkJXAorKyAgMSwgLyogZjExICovCQkJXAorKyAgMSwgLyogZjEwICovCQkJXAorKyAgMSwgLyogZjkgKi8JCQlcCisrICAxLCAvKiBmOCAqLwkJCVwKKysgIDAsIC8qIGY3ICovCQkJXAorKyAgMCwgLyogZjYgKi8JCQlcCisrICAwLCAvKiBmNSAqLwkJCVwKKysgIDAsIC8qIGY0ICovCQkJXAorKyAgMCwgLyogZjMgKi8JCQlcCisrICAwLCAvKiBmMiovCQkJXAorKyAgMCwgLyogZjEqLwkJCVwKKysgIDAsIC8qIGYwICovCQkJXAorK30KKysKKysvKiBJbnRlcnJ1cHQgZnVuY3Rpb25zIGNhbiBvbmx5IHVzZSByZWdpc3RlcnMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbgorKyAgIHNhdmVkIGJ5IHRoZSBwcm9sb2d1ZSwgZXZlbiBpZiB0aGV5IHdvdWxkIG5vcm1hbGx5IGJlCisrICAgY2FsbC1jbG9iYmVyZWQuICAqLworKyNkZWZpbmUgSEFSRF9SRUdOT19SRU5BTUVfT0soU1JDLCBEU1QpCQkJCQlcCisrCSghIElTX0lOVEVSUlVQVCAoY2Z1bi0+bWFjaGluZS0+ZnVuY190eXBlKSB8fAkJCVwKKysJCXJlZ3NfZXZlcl9saXZlW0RTVF0pCisrCisrCisrLyoKKytaZXJvIG9yIG1vcmUgQyBzdGF0ZW1lbnRzIHRoYXQgbWF5IGNvbmRpdGlvbmFsbHkgbW9kaWZ5IGZpdmUgdmFyaWFibGVzCisrZml4ZWRfcmVncywgY2FsbF91c2VkX3JlZ3MsIGdsb2JhbF9yZWdzLAorK3JlZ19uYW1lcywgYW5kIHJlZ19jbGFzc19jb250ZW50cywgdG8gdGFrZSBpbnRvIGFjY291bnQKKythbnkgZGVwZW5kZW5jZSBvZiB0aGVzZSByZWdpc3RlciBzZXRzIG9uIHRhcmdldCBmbGFncy4gIFRoZSBmaXJzdCB0aHJlZQorK29mIHRoZXNlIGFyZSBvZiB0eXBlIGNoYXIgW10gKGludGVycHJldGVkIGFzIEJvb2xlYW4gdmVjdG9ycykuCisrZ2xvYmFsX3JlZ3MgaXMgYSBjb25zdCBjaGFyICpbXSwgYW5kCisrcmVnX2NsYXNzX2NvbnRlbnRzIGlzIGEgSEFSRF9SRUdfU0VULiAgQmVmb3JlIHRoZSBtYWNybyBpcworK2NhbGxlZCwgZml4ZWRfcmVncywgY2FsbF91c2VkX3JlZ3MsCisrcmVnX2NsYXNzX2NvbnRlbnRzLCBhbmQgcmVnX25hbWVzIGhhdmUgYmVlbiBpbml0aWFsaXplZAorK2Zyb20gRklYRURfUkVHSVNURVJTLCBDQUxMX1VTRURfUkVHSVNURVJTLAorK1JFR19DTEFTU19DT05URU5UUywgYW5kIFJFR0lTVEVSX05BTUVTLCByZXNwZWN0aXZlbHkuCisrZ2xvYmFsX3JlZ3MgaGFzIGJlZW4gY2xlYXJlZCwgYW5kIGFueSAtZmZpeGVkLVtyZWddLAorKy1mY2FsbC11c2VkLVtyZWddIGFuZCAtZmNhbGwtc2F2ZWQtW3JlZ10KKytjb21tYW5kIG9wdGlvbnMgaGF2ZSBiZWVuIGFwcGxpZWQuCisrCisrWW91IG5lZWQgbm90IGRlZmluZSB0aGlzIG1hY3JvIGlmIGl0IGhhcyBubyB3b3JrIHRvIGRvLgorKworK0lmIHRoZSB1c2FnZSBvZiBhbiBlbnRpcmUgY2xhc3Mgb2YgcmVnaXN0ZXJzIGRlcGVuZHMgb24gdGhlIHRhcmdldAorK2ZsYWdzLCB5b3UgbWF5IGluZGljYXRlIHRoaXMgdG8gR0NDIGJ5IHVzaW5nIHRoaXMgbWFjcm8gdG8gbW9kaWZ5CisrZml4ZWRfcmVncyBhbmQgY2FsbF91c2VkX3JlZ3MgdG8gMSBmb3IgZWFjaCBvZiB0aGUKKytyZWdpc3RlcnMgaW4gdGhlIGNsYXNzZXMgd2hpY2ggc2hvdWxkIG5vdCBiZSB1c2VkIGJ5IEdDQy4gIEFsc28gZGVmaW5lCisrdGhlIG1hY3JvIFJFR19DTEFTU19GUk9NX0xFVFRFUiB0byByZXR1cm4gTk9fUkVHUyBpZiBpdAorK2lzIGNhbGxlZCB3aXRoIGEgbGV0dGVyIGZvciBhIGNsYXNzIHRoYXQgc2hvdWxkbid0IGJlIHVzZWQuCisrCisrIChIb3dldmVyLCBpZiB0aGlzIGNsYXNzIGlzIG5vdCBpbmNsdWRlZCBpbiBHRU5FUkFMX1JFR1MgYW5kIGFsbAorK29mIHRoZSBpbnNuIHBhdHRlcm5zIHdob3NlIGNvbnN0cmFpbnRzIHBlcm1pdCB0aGlzIGNsYXNzIGFyZQorK2NvbnRyb2xsZWQgYnkgdGFyZ2V0IHN3aXRjaGVzLCB0aGVuIEdDQyB3aWxsIGF1dG9tYXRpY2FsbHkgYXZvaWQgdXNpbmcKKyt0aGVzZSByZWdpc3RlcnMgd2hlbiB0aGUgdGFyZ2V0IHN3aXRjaGVzIGFyZSBvcHBvc2VkIHRvIHRoZW0uKQorKyovCisrI2RlZmluZSBDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIGRvCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCVwKKysgICAgICBpbnQgcmVnbm87CQkJCQkJXAorKwkJCQkJCQkJXAorKyAgICAgIGlmIChUQVJHRVRfU09GVF9GTE9BVCkJCQkgICAgICAgICAgICAgICAgXAorKwl7CQkJCQkJCVwKKysJICBmb3IgKHJlZ25vID0gRklSU1RfRlBfUkVHTlVNOwkJCQlcCisrCSAgICAgICByZWdubyA8PSBMQVNUX0ZQX1JFR05VTTsgKytyZWdubykJICAgICAgICBcCisrCSAgICBmaXhlZF9yZWdzW3JlZ25vXSA9IGNhbGxfdXNlZF9yZWdzW3JlZ25vXSA9IDE7CVwKKysJfQkJCQkJCQlcCisrICAgICAgaWYgKGZsYWdfcGljKQkJCQkJCVwKKysJewkJCQkJCQlcCisrCSAgZml4ZWRfcmVnc1tQSUNfT0ZGU0VUX1RBQkxFX1JFR05VTV0gPSAxOwkJXAorKwkgIGNhbGxfdXNlZF9yZWdzW1BJQ19PRkZTRVRfVEFCTEVfUkVHTlVNXSA9IDE7CQlcCisrCX0JCQkJCQkJXAorKyAgICB9CQkJCQkJCQlcCisrICB3aGlsZSAoMCkKKysKKysKKysvKgorK0lmIHRoZSBwcm9ncmFtIGNvdW50ZXIgaGFzIGEgcmVnaXN0ZXIgbnVtYmVyLCBkZWZpbmUgdGhpcyBhcyB0aGF0CisrcmVnaXN0ZXIgbnVtYmVyLiAgT3RoZXJ3aXNlLCBkbyBub3QgZGVmaW5lIGl0LgorKyovCisrCisrI2RlZmluZSBMQVNUX0FWUjMyX1JFR05VTSAxNgorKworKworKy8qKiBPcmRlciBvZiBBbGxvY2F0aW9uIG9mIFJlZ2lzdGVycyAqKi8KKysKKysvKgorK0lmIGRlZmluZWQsIGFuIGluaXRpYWxpemVyIGZvciBhIHZlY3RvciBvZiBpbnRlZ2VycywgY29udGFpbmluZyB0aGUKKytudW1iZXJzIG9mIGhhcmQgcmVnaXN0ZXJzIGluIHRoZSBvcmRlciBpbiB3aGljaCBHQ0Mgc2hvdWxkIHByZWZlcgorK3RvIHVzZSB0aGVtIChmcm9tIG1vc3QgcHJlZmVycmVkIHRvIGxlYXN0KS4KKysKKytJZiB0aGlzIG1hY3JvIGlzIG5vdCBkZWZpbmVkLCByZWdpc3RlcnMgYXJlIHVzZWQgbG93ZXN0IG51bWJlcmVkIGZpcnN0CisrKGFsbCBlbHNlIGJlaW5nIGVxdWFsKS4KKysKKytPbmUgdXNlIG9mIHRoaXMgbWFjcm8gaXMgb24gbWFjaGluZXMgd2hlcmUgdGhlIGhpZ2hlc3QgbnVtYmVyZWQKKytyZWdpc3RlcnMgbXVzdCBhbHdheXMgYmUgc2F2ZWQgYW5kIHRoZSBzYXZlLW11bHRpcGxlLXJlZ2lzdGVycworK2luc3RydWN0aW9uIHN1cHBvcnRzIG9ubHkgc2VxdWVuY2VzIG9mIGNvbnNlY3V0aXZlIHJlZ2lzdGVycy4gIE9uIHN1Y2gKKyttYWNoaW5lcywgZGVmaW5lIFJFR19BTExPQ19PUkRFUiB0byBiZSBhbiBpbml0aWFsaXplciB0aGF0IGxpc3RzCisrdGhlIGhpZ2hlc3QgbnVtYmVyZWQgYWxsb2NhYmxlIHJlZ2lzdGVyIGZpcnN0LgorKyovCisrI2RlZmluZSBSRUdfQUxMT0NfT1JERVIgCVwKKyt7CQkJCVwKKysgIElOVEVSTkFMX1JFR05VTSg4KSwJCVwKKysgIElOVEVSTkFMX1JFR05VTSg5KSwJCVwKKysgIElOVEVSTkFMX1JFR05VTSgxMCksCQlcCisrICBJTlRFUk5BTF9SRUdOVU0oMTEpLAkJXAorKyAgSU5URVJOQUxfUkVHTlVNKDEyKSwJCVwKKysgIExSX1JFR05VTSwJCQlcCisrICBJTlRFUk5BTF9SRUdOVU0oNyksCQlcCisrICBJTlRFUk5BTF9SRUdOVU0oNiksCQlcCisrICBJTlRFUk5BTF9SRUdOVU0oNSksCQlcCisrICBJTlRFUk5BTF9SRUdOVU0oNCksCQlcCisrICBJTlRFUk5BTF9SRUdOVU0oMyksCQlcCisrICBJTlRFUk5BTF9SRUdOVU0oMiksCQlcCisrICBJTlRFUk5BTF9SRUdOVU0oMSksCQlcCisrICBJTlRFUk5BTF9SRUdOVU0oMCksCQlcCisrICBJTlRFUk5BTF9GUF9SRUdOVU0oMTUpLAlcCisrICBJTlRFUk5BTF9GUF9SRUdOVU0oMTQpLAlcCisrICBJTlRFUk5BTF9GUF9SRUdOVU0oMTMpLAlcCisrICBJTlRFUk5BTF9GUF9SRUdOVU0oMTIpLAlcCisrICBJTlRFUk5BTF9GUF9SRUdOVU0oMTEpLAlcCisrICBJTlRFUk5BTF9GUF9SRUdOVU0oMTApLAlcCisrICBJTlRFUk5BTF9GUF9SRUdOVU0oOSksCVwKKysgIElOVEVSTkFMX0ZQX1JFR05VTSg4KSwJXAorKyAgSU5URVJOQUxfRlBfUkVHTlVNKDcpLAlcCisrICBJTlRFUk5BTF9GUF9SRUdOVU0oNiksCVwKKysgIElOVEVSTkFMX0ZQX1JFR05VTSg1KSwJXAorKyAgSU5URVJOQUxfRlBfUkVHTlVNKDQpLAlcCisrICBJTlRFUk5BTF9GUF9SRUdOVU0oMyksCVwKKysgIElOVEVSTkFMX0ZQX1JFR05VTSgyKSwJXAorKyAgSU5URVJOQUxfRlBfUkVHTlVNKDEpLAlcCisrICBJTlRFUk5BTF9GUF9SRUdOVU0oMCksCVwKKysgIFNQX1JFR05VTSwgICAgICAgICAgIAkJXAorKyAgUENfUkVHTlVNCQkJXAorK30KKysKKysKKysvKiogSG93IFZhbHVlcyBGaXQgaW4gUmVnaXN0ZXJzICoqLworKworKy8qCisrQSBDIGV4cHJlc3Npb24gZm9yIHRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgaGFyZCByZWdpc3RlcnMsIHN0YXJ0aW5nCisrYXQgcmVnaXN0ZXIgbnVtYmVyIFJFR05PLCByZXF1aXJlZCB0byBob2xkIGEgdmFsdWUgb2YgbW9kZQorK01PREUuCisrCisrT24gYSBtYWNoaW5lIHdoZXJlIGFsbCByZWdpc3RlcnMgYXJlIGV4YWN0bHkgb25lIHdvcmQsIGEgc3VpdGFibGUKKytkZWZpbml0aW9uIG9mIHRoaXMgbWFjcm8gaXMKKysKKysjZGVmaW5lIEhBUkRfUkVHTk9fTlJFR1MoUkVHTk8sIE1PREUpICAgICAgICAgICAgXAorKyAgICgoR0VUX01PREVfU0laRSAoTU9ERSkgKyBVTklUU19QRVJfV09SRCAtIDEpICBcCisrICAgIC8gVU5JVFNfUEVSX1dPUkQpCisrKi8KKysjZGVmaW5lIEhBUkRfUkVHTk9fTlJFR1MoUkVHTk8sIE1PREUpIFwKKysgICgodW5zaWduZWQgaW50KSgoR0VUX01PREVfU0laRShNT0RFKSArIFVOSVRTX1BFUl9XT1JEIC0xICkgLyBVTklUU19QRVJfV09SRCkpCisrCisrLyoKKytBIEMgZXhwcmVzc2lvbiB0aGF0IGlzIG5vbnplcm8gaWYgaXQgaXMgcGVybWlzc2libGUgdG8gc3RvcmUgYSB2YWx1ZQorK29mIG1vZGUgTU9ERSBpbiBoYXJkIHJlZ2lzdGVyIG51bWJlciBSRUdOTyAob3IgaW4gc2V2ZXJhbAorK3JlZ2lzdGVycyBzdGFydGluZyB3aXRoIHRoYXQgb25lKS4gIEZvciBhIG1hY2hpbmUgd2hlcmUgYWxsIHJlZ2lzdGVycworK2FyZSBlcXVpdmFsZW50LCBhIHN1aXRhYmxlIGRlZmluaXRpb24gaXMKKysKKysgICNkZWZpbmUgSEFSRF9SRUdOT19NT0RFX09LKFJFR05PLCBNT0RFKSAxCisrCisrWW91IG5lZWQgbm90IGluY2x1ZGUgY29kZSB0byBjaGVjayBmb3IgdGhlIG51bWJlcnMgb2YgZml4ZWQgcmVnaXN0ZXJzLAorK2JlY2F1c2UgdGhlIGFsbG9jYXRpb24gbWVjaGFuaXNtIGNvbnNpZGVycyB0aGVtIHRvIGJlIGFsd2F5cyBvY2N1cGllZC4KKysKKytPbiBzb21lIG1hY2hpbmVzLCBkb3VibGUtcHJlY2lzaW9uIHZhbHVlcyBtdXN0IGJlIGtlcHQgaW4gZXZlbi9vZGQKKytyZWdpc3RlciBwYWlycy4gIFlvdSBjYW4gaW1wbGVtZW50IHRoYXQgYnkgZGVmaW5pbmcgdGhpcyBtYWNybyB0byByZWplY3QKKytvZGQgcmVnaXN0ZXIgbnVtYmVycyBmb3Igc3VjaCBtb2Rlcy4KKysKKytUaGUgbWluaW11bSByZXF1aXJlbWVudCBmb3IgYSBtb2RlIHRvIGJlIE9LIGluIGEgcmVnaXN0ZXIgaXMgdGhhdCB0aGUKKyttb3ZbbW9kZV0gaW5zdHJ1Y3Rpb24gcGF0dGVybiBzdXBwb3J0IG1vdmVzIGJldHdlZW4gdGhlCisrcmVnaXN0ZXIgYW5kIG90aGVyIGhhcmQgcmVnaXN0ZXIgaW4gdGhlIHNhbWUgY2xhc3MgYW5kIHRoYXQgbW92aW5nIGEKKyt2YWx1ZSBpbnRvIHRoZSByZWdpc3RlciBhbmQgYmFjayBvdXQgbm90IGFsdGVyIGl0LgorKworK1NpbmNlIHRoZSBzYW1lIGluc3RydWN0aW9uIHVzZWQgdG8gbW92ZSB3b3JkX21vZGUgd2lsbCB3b3JrIGZvcgorK2FsbCBuYXJyb3dlciBpbnRlZ2VyIG1vZGVzLCBpdCBpcyBub3QgbmVjZXNzYXJ5IG9uIGFueSBtYWNoaW5lIGZvcgorK0hBUkRfUkVHTk9fTU9ERV9PSyB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZXNlIG1vZGVzLCBwcm92aWRlZAorK3lvdSBkZWZpbmUgcGF0dGVybnMgbW92aGksIGV0Yy4sIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoaXMuICBUaGlzCisraXMgdXNlZnVsIGJlY2F1c2Ugb2YgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gSEFSRF9SRUdOT19NT0RFX09LCisrYW5kIE1PREVTX1RJRUFCTEVfUDsgaXQgaXMgdmVyeSBkZXNpcmFibGUgZm9yIGFsbCBpbnRlZ2VyIG1vZGVzCisrdG8gYmUgdGllYWJsZS4KKysKKytNYW55IG1hY2hpbmVzIGhhdmUgc3BlY2lhbCByZWdpc3RlcnMgZm9yIGZsb2F0aW5nIHBvaW50IGFyaXRobWV0aWMuCisrT2Z0ZW4gcGVvcGxlIGFzc3VtZSB0aGF0IGZsb2F0aW5nIHBvaW50IG1hY2hpbmUgbW9kZXMgYXJlIGFsbG93ZWQgb25seQorK2luIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycy4gIFRoaXMgaXMgbm90IHRydWUuICBBbnkgcmVnaXN0ZXJzIHRoYXQKKytjYW4gaG9sZCBpbnRlZ2VycyBjYW4gc2FmZWx5IGhvbGQgYSBmbG9hdGluZyBwb2ludCBtYWNoaW5lCisrbW9kZSwgd2hldGhlciBvciBub3QgZmxvYXRpbmcgYXJpdGhtZXRpYyBjYW4gYmUgZG9uZSBvbiBpdCBpbiB0aG9zZQorK3JlZ2lzdGVycy4gIEludGVnZXIgbW92ZSBpbnN0cnVjdGlvbnMgY2FuIGJlIHVzZWQgdG8gbW92ZSB0aGUgdmFsdWVzLgorKworK09uIHNvbWUgbWFjaGluZXMsIHRob3VnaCwgdGhlIGNvbnZlcnNlIGlzIHRydWU6IGZpeGVkLXBvaW50IG1hY2hpbmUKKyttb2RlcyBtYXkgbm90IGdvIGluIGZsb2F0aW5nIHJlZ2lzdGVycy4gIFRoaXMgaXMgdHJ1ZSBpZiB0aGUgZmxvYXRpbmcKKytyZWdpc3RlcnMgbm9ybWFsaXplIGFueSB2YWx1ZSBzdG9yZWQgaW4gdGhlbSwgYmVjYXVzZSBzdG9yaW5nIGEKKytub24tZmxvYXRpbmcgdmFsdWUgdGhlcmUgd291bGQgZ2FyYmxlIGl0LiAgSW4gdGhpcyBjYXNlLAorK0hBUkRfUkVHTk9fTU9ERV9PSyBzaG91bGQgcmVqZWN0IGZpeGVkLXBvaW50IG1hY2hpbmUgbW9kZXMgaW4KKytmbG9hdGluZyByZWdpc3RlcnMuICBCdXQgaWYgdGhlIGZsb2F0aW5nIHJlZ2lzdGVycyBkbyBub3QgYXV0b21hdGljYWxseQorK25vcm1hbGl6ZSwgaWYgeW91IGNhbiBzdG9yZSBhbnkgYml0IHBhdHRlcm4gaW4gb25lIGFuZCByZXRyaWV2ZSBpdAorK3VuY2hhbmdlZCB3aXRob3V0IGEgdHJhcCwgdGhlbiBhbnkgbWFjaGluZSBtb2RlIG1heSBnbyBpbiBhIGZsb2F0aW5nCisrcmVnaXN0ZXIsIHNvIHlvdSBjYW4gZGVmaW5lIHRoaXMgbWFjcm8gdG8gc2F5IHNvLgorKworK1RoZSBwcmltYXJ5IHNpZ25pZmljYW5jZSBvZiBzcGVjaWFsIGZsb2F0aW5nIHJlZ2lzdGVycyBpcyByYXRoZXIgdGhhdAorK3RoZXkgYXJlIHRoZSByZWdpc3RlcnMgYWNjZXB0YWJsZSBpbiBmbG9hdGluZyBwb2ludCBhcml0aG1ldGljCisraW5zdHJ1Y3Rpb25zLiAgSG93ZXZlciwgdGhpcyBpcyBvZiBubyBjb25jZXJuIHRvCisrSEFSRF9SRUdOT19NT0RFX09LLiAgWW91IGhhbmRsZSBpdCBieSB3cml0aW5nIHRoZSBwcm9wZXIKKytjb25zdHJhaW50cyBmb3IgdGhvc2UgaW5zdHJ1Y3Rpb25zLgorKworK09uIHNvbWUgbWFjaGluZXMsIHRoZSBmbG9hdGluZyByZWdpc3RlcnMgYXJlIGVzcGVjaWFsbHkgc2xvdyB0byBhY2Nlc3MsCisrc28gdGhhdCBpdCBpcyBiZXR0ZXIgdG8gc3RvcmUgYSB2YWx1ZSBpbiBhIHN0YWNrIGZyYW1lIHRoYW4gaW4gc3VjaCBhCisrcmVnaXN0ZXIgaWYgZmxvYXRpbmcgcG9pbnQgYXJpdGhtZXRpYyBpcyBub3QgYmVpbmcgZG9uZS4gIEFzIGxvbmcgYXMgdGhlCisrZmxvYXRpbmcgcmVnaXN0ZXJzIGFyZSBub3QgaW4gY2xhc3MgR0VORVJBTF9SRUdTLCB0aGV5IHdpbGwgbm90CisrYmUgdXNlZCB1bmxlc3Mgc29tZSBwYXR0ZXJuJ3MgY29uc3RyYWludCBhc2tzIGZvciBvbmUuCisrKi8KKysjZGVmaW5lIEhBUkRfUkVHTk9fTU9ERV9PSyhSRUdOTywgTU9ERSkgYXZyMzJfaGFyZF9yZWdub19tb2RlX29rKFJFR05PLCBNT0RFKQorKworKy8qCisrQSBDIGV4cHJlc3Npb24gdGhhdCBpcyBub256ZXJvIGlmIGEgdmFsdWUgb2YgbW9kZQorK01PREUxIGlzIGFjY2Vzc2libGUgaW4gbW9kZSBNT0RFMiB3aXRob3V0IGNvcHlpbmcuCisrCisrSWYgSEFSRF9SRUdOT19NT0RFX09LKFIsIE1PREUxKSBhbmQKKytIQVJEX1JFR05PX01PREVfT0soUiwgTU9ERTIpIGFyZSBhbHdheXMgdGhlIHNhbWUgZm9yCisrYW55IFIsIHRoZW4gTU9ERVNfVElFQUJMRV9QKE1PREUxLCBNT0RFMikKKytzaG91bGQgYmUgbm9uemVyby4gIElmIHRoZXkgZGlmZmVyIGZvciBhbnkgUiwgeW91IHNob3VsZCBkZWZpbmUKKyt0aGlzIG1hY3JvIHRvIHJldHVybiB6ZXJvIHVubGVzcyBzb21lIG90aGVyIG1lY2hhbmlzbSBlbnN1cmVzIHRoZQorK2FjY2Vzc2liaWxpdHkgb2YgdGhlIHZhbHVlIGluIGEgbmFycm93ZXIgbW9kZS4KKysKKytZb3Ugc2hvdWxkIGRlZmluZSB0aGlzIG1hY3JvIHRvIHJldHVybiBub256ZXJvIGluIGFzIG1hbnkgY2FzZXMgYXMKKytwb3NzaWJsZSBzaW5jZSBkb2luZyBzbyB3aWxsIGFsbG93IEdDQyB0byBwZXJmb3JtIGJldHRlciByZWdpc3RlcgorK2FsbG9jYXRpb24uCisrKi8KKysjZGVmaW5lIE1PREVTX1RJRUFCTEVfUChNT0RFMSwgTU9ERTIpICBcCisrICAoR0VUX01PREVfQ0xBU1MgKE1PREUxKSA9PSBHRVRfTU9ERV9DTEFTUyAoTU9ERTIpKQorKworKworKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysgKiBSZWdpc3RlciBDbGFzc2VzCisrICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworKy8qCisrQW4gZW51bWVyYWwgdHlwZSB0aGF0IG11c3QgYmUgZGVmaW5lZCB3aXRoIGFsbCB0aGUgcmVnaXN0ZXIgY2xhc3MgbmFtZXMKKythcyBlbnVtZXJhbCB2YWx1ZXMuICBOT19SRUdTIG11c3QgYmUgZmlyc3QuICBBTExfUkVHUworK211c3QgYmUgdGhlIGxhc3QgcmVnaXN0ZXIgY2xhc3MsIGZvbGxvd2VkIGJ5IG9uZSBtb3JlIGVudW1lcmFsIHZhbHVlLAorK0xJTV9SRUdfQ0xBU1NFUywgd2hpY2ggaXMgbm90IGEgcmVnaXN0ZXIgY2xhc3MgYnV0IHJhdGhlcgorK3RlbGxzIGhvdyBtYW55IGNsYXNzZXMgdGhlcmUgYXJlLgorKworK0VhY2ggcmVnaXN0ZXIgY2xhc3MgaGFzIGEgbnVtYmVyLCB3aGljaCBpcyB0aGUgdmFsdWUgb2YgY2FzdGluZworK3RoZSBjbGFzcyBuYW1lIHRvIHR5cGUgaW50LiAgVGhlIG51bWJlciBzZXJ2ZXMgYXMgYW4gaW5kZXgKKytpbiBtYW55IG9mIHRoZSB0YWJsZXMgZGVzY3JpYmVkIGJlbG93LgorKyovCisrZW51bSByZWdfY2xhc3MKKyt7CisrICBOT19SRUdTLAorKyAgR0VORVJBTF9SRUdTLAorKyAgRlBfUkVHUywKKysgIEFMTF9SRUdTLAorKyAgTElNX1JFR19DTEFTU0VTCisrfTsKKysKKysvKgorK1RoZSBudW1iZXIgb2YgZGlzdGluY3QgcmVnaXN0ZXIgY2xhc3NlcywgZGVmaW5lZCBhcyBmb2xsb3dzOgorKyAgI2RlZmluZSBOX1JFR19DTEFTU0VTIChpbnQpIExJTV9SRUdfQ0xBU1NFUworKyovCisrI2RlZmluZSBOX1JFR19DTEFTU0VTIChpbnQpTElNX1JFR19DTEFTU0VTCisrCisrLyoKKytBbiBpbml0aWFsaXplciBjb250YWluaW5nIHRoZSBuYW1lcyBvZiB0aGUgcmVnaXN0ZXIgY2xhc3NlcyBhcyBDIHN0cmluZworK2NvbnN0YW50cy4gIFRoZXNlIG5hbWVzIGFyZSB1c2VkIGluIHdyaXRpbmcgc29tZSBvZiB0aGUgZGVidWdnaW5nIGR1bXBzLgorKyovCisrI2RlZmluZSBSRUdfQ0xBU1NfTkFNRVMJCVwKKyt7CQkJCVwKKysgICJOT19SRUdTIiwJCQlcCisrICAiR0VORVJBTF9SRUdTIiwJCVwKKysgICJGTE9BVElOR19QT0lOVF9SRUdTIiwJXAorKyAgIkFMTF9SRUdTIgkJCVwKKyt9CisrCisrLyoKKytBbiBpbml0aWFsaXplciBjb250YWluaW5nIHRoZSBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXIgY2xhc3NlcywgYXMgaW50ZWdlcnMKKyt3aGljaCBhcmUgYml0IG1hc2tzLiAgVGhlIG50aCBpbnRlZ2VyIHNwZWNpZmllcyB0aGUgY29udGVudHMgb2YgY2xhc3MKKytuLiAgVGhlIHdheSB0aGUgaW50ZWdlciBtYXNrIGlzIGludGVycHJldGVkIGlzIHRoYXQKKytyZWdpc3RlciByIGlzIGluIHRoZSBjbGFzcyBpZiBtYXNrICYgKDEgPDwgcikgaXMgMS4KKysKKytXaGVuIHRoZSBtYWNoaW5lIGhhcyBtb3JlIHRoYW4gMzIgcmVnaXN0ZXJzLCBhbiBpbnRlZ2VyIGRvZXMgbm90IHN1ZmZpY2UuCisrVGhlbiB0aGUgaW50ZWdlcnMgYXJlIHJlcGxhY2VkIGJ5IHN1Yi1pbml0aWFsaXplcnMsIGJyYWNlZCBncm91cGluZ3MgY29udGFpbmluZworK3NldmVyYWwgaW50ZWdlcnMuICBFYWNoIHN1Yi1pbml0aWFsaXplciBtdXN0IGJlIHN1aXRhYmxlIGFzIGFuIGluaXRpYWxpemVyCisrZm9yIHRoZSB0eXBlIEhBUkRfUkVHX1NFVCB3aGljaCBpcyBkZWZpbmVkIGluIGhhcmQtcmVnLXNldC5oLgorK0luIHRoaXMgc2l0dWF0aW9uLCB0aGUgZmlyc3QgaW50ZWdlciBpbiBlYWNoIHN1Yi1pbml0aWFsaXplciBjb3JyZXNwb25kcyB0bworK3JlZ2lzdGVycyAwIHRocm91Z2ggMzEsIHRoZSBzZWNvbmQgaW50ZWdlciB0byByZWdpc3RlcnMgMzIgdGhyb3VnaCA2MywgYW5kCisrc28gb24uCisrKi8KKysjZGVmaW5lIFJFR19DTEFTU19DT05URU5UUyB7CQlcCisrICB7MHgwMDAwMDAwMH0sIC8qIE5PX1JFR1MgKi8JCVwKKysgIHsweDAwMDBGRkZGfSwgLyogR0VORVJBTF9SRUdTICovCVwKKysgIHsweEZGRkYwMDAwfSwgLyogRlBfUkVHUyAqLwkJXAorKyAgezB4N0ZGRkZGRkZ9LCAvKiBBTExfUkVHUyAqLwkJXAorK30KKysKKysKKysvKgorK0EgQyBleHByZXNzaW9uIHdob3NlIHZhbHVlIGlzIGEgcmVnaXN0ZXIgY2xhc3MgY29udGFpbmluZyBoYXJkIHJlZ2lzdGVyCisrUkVHTk8uICBJbiBnZW5lcmFsIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgc3VjaCBjbGFzczsgY2hvb3NlIGEgY2xhc3MKKyt3aGljaCBpcyBtaW5pbWFsLCBtZWFuaW5nIHRoYXQgbm8gc21hbGxlciBjbGFzcyBhbHNvIGNvbnRhaW5zIHRoZQorK3JlZ2lzdGVyLgorKyovCisrI2RlZmluZSBSRUdOT19SRUdfQ0xBU1MoUkVHTk8pICgoUkVHTk8gPCAxNikgPyBHRU5FUkFMX1JFR1MgOiBGUF9SRUdTKQorKworKy8qCisrQSBtYWNybyB3aG9zZSBkZWZpbml0aW9uIGlzIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyB0byB3aGljaCBhIHZhbGlkCisrYmFzZSByZWdpc3RlciBtdXN0IGJlbG9uZy4gIEEgYmFzZSByZWdpc3RlciBpcyBvbmUgdXNlZCBpbiBhbiBhZGRyZXNzCisrd2hpY2ggaXMgdGhlIHJlZ2lzdGVyIHZhbHVlIHBsdXMgYSBkaXNwbGFjZW1lbnQuCisrKi8KKysjZGVmaW5lIEJBU0VfUkVHX0NMQVNTIEdFTkVSQUxfUkVHUworKworKy8qCisrVGhpcyBpcyBhIHZhcmlhdGlvbiBvZiB0aGUgQkFTRV9SRUdfQ0xBU1MgbWFjcm8gd2hpY2ggYWxsb3dzCisrdGhlIHNlbGVjdGlvbiBvZiBhIGJhc2UgcmVnaXN0ZXIgaW4gYSBtb2RlIGRlcGVuZWRlbnQgbWFubmVyLiAgSWYKKyttb2RlIGlzIFZPSURtb2RlIHRoZW4gaXQgc2hvdWxkIHJldHVybiB0aGUgc2FtZSB2YWx1ZSBhcworK0JBU0VfUkVHX0NMQVNTLgorKyovCisrI2RlZmluZSBNT0RFX0JBU0VfUkVHX0NMQVNTKE1PREUpIEJBU0VfUkVHX0NMQVNTCisrCisrLyoKKytBIG1hY3JvIHdob3NlIGRlZmluaXRpb24gaXMgdGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRvIHdoaWNoIGEgdmFsaWQKKytpbmRleCByZWdpc3RlciBtdXN0IGJlbG9uZy4gIEFuIGluZGV4IHJlZ2lzdGVyIGlzIG9uZSB1c2VkIGluIGFuCisrYWRkcmVzcyB3aGVyZSBpdHMgdmFsdWUgaXMgZWl0aGVyIG11bHRpcGxpZWQgYnkgYSBzY2FsZSBmYWN0b3Igb3IKKythZGRlZCB0byBhbm90aGVyIHJlZ2lzdGVyIChhcyB3ZWxsIGFzIGFkZGVkIHRvIGEgZGlzcGxhY2VtZW50KS4KKysqLworKyNkZWZpbmUgSU5ERVhfUkVHX0NMQVNTIEJBU0VfUkVHX0NMQVNTCisrCisrLyoKKytBIEMgZXhwcmVzc2lvbiB3aGljaCBkZWZpbmVzIHRoZSBtYWNoaW5lLWRlcGVuZGVudCBvcGVyYW5kIGNvbnN0cmFpbnQKKytsZXR0ZXJzIGZvciByZWdpc3RlciBjbGFzc2VzLiAgSWYgQ0hBUiBpcyBzdWNoIGEgbGV0dGVyLCB0aGUKKyt2YWx1ZSBzaG91bGQgYmUgdGhlIHJlZ2lzdGVyIGNsYXNzIGNvcnJlc3BvbmRpbmcgdG8gaXQuICBPdGhlcndpc2UsCisrdGhlIHZhbHVlIHNob3VsZCBiZSBOT19SRUdTLiAgVGhlIHJlZ2lzdGVyIGxldHRlciByLAorK2NvcnJlc3BvbmRpbmcgdG8gY2xhc3MgR0VORVJBTF9SRUdTLCB3aWxsIG5vdCBiZSBwYXNzZWQKKyt0byB0aGlzIG1hY3JvOyB5b3UgZG8gbm90IG5lZWQgdG8gaGFuZGxlIGl0LgorKyovCisrI2RlZmluZSBSRUdfQ0xBU1NfRlJPTV9MRVRURVIoQ0hBUikgKChDSEFSKSA9PSAnZicgPyBGUF9SRUdTIDogTk9fUkVHUykKKysKKysKKysvKiBUaGVzZSBhc3N1bWUgdGhhdCBSRUdOTyBpcyBhIGhhcmQgb3IgcHNldWRvIHJlZyBudW1iZXIuCisrICAgVGhleSBnaXZlIG5vbnplcm8gb25seSBpZiBSRUdOTyBpcyBhIGhhcmQgcmVnIG9mIHRoZSBzdWl0YWJsZSBjbGFzcworKyAgIG9yIGEgcHNldWRvIHJlZyBjdXJyZW50bHkgYWxsb2NhdGVkIHRvIGEgc3VpdGFibGUgaGFyZCByZWcuCisrICAgU2luY2UgdGhleSB1c2UgcmVnX3JlbnVtYmVyLCB0aGV5IGFyZSBzYWZlIG9ubHkgb25jZSByZWdfcmVudW1iZXIKKysgICBoYXMgYmVlbiBhbGxvY2F0ZWQsIHdoaWNoIGhhcHBlbnMgaW4gbG9jYWwtYWxsb2MuYy4gICovCisrI2RlZmluZSBURVNUX1JFR05PKFIsIFRFU1QsIFZBTFVFKSBcCisrICAoKFIgVEVTVCBWQUxVRSkgfHwgKCh1bnNpZ25lZCkgcmVnX3JlbnVtYmVyW1JdIFRFU1QgVkFMVUUpKQorKworKy8qCisrQSBDIGV4cHJlc3Npb24gd2hpY2ggaXMgbm9uemVybyBpZiByZWdpc3RlciBudW1iZXIgbnVtIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgYSBiYXNlCisrcmVnaXN0ZXIgaW4gb3BlcmFuZCBhZGRyZXNzZXMuIEl0IG1heSBiZSBlaXRoZXIgYSBzdWl0YWJsZSBoYXJkIHJlZ2lzdGVyIG9yIGEgcHNldWRvCisrcmVnaXN0ZXIgdGhhdCBoYXMgYmVlbiBhbGxvY2F0ZWQgc3VjaCBhIGhhcmQgcmVnaXN0ZXIuCisrKi8KKysjZGVmaW5lIFJFR05PX09LX0ZPUl9CQVNFX1AoTlVNKSAgVEVTVF9SRUdOTyhOVU0sIDw9LCBMQVNUX1JFR05VTSkKKysKKysvKgorK0EgQyBleHByZXNzaW9uIHdoaWNoIGlzIG5vbnplcm8gaWYgcmVnaXN0ZXIgbnVtYmVyIE5VTSBpcworK3N1aXRhYmxlIGZvciB1c2UgYXMgYW4gaW5kZXggcmVnaXN0ZXIgaW4gb3BlcmFuZCBhZGRyZXNzZXMuICBJdCBtYXkgYmUKKytlaXRoZXIgYSBzdWl0YWJsZSBoYXJkIHJlZ2lzdGVyIG9yIGEgcHNldWRvIHJlZ2lzdGVyIHRoYXQgaGFzIGJlZW4KKythbGxvY2F0ZWQgc3VjaCBhIGhhcmQgcmVnaXN0ZXIuCisrCisrVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhbiBpbmRleCByZWdpc3RlciBhbmQgYSBiYXNlIHJlZ2lzdGVyIGlzIHRoYXQKKyt0aGUgaW5kZXggcmVnaXN0ZXIgbWF5IGJlIHNjYWxlZC4gIElmIGFuIGFkZHJlc3MgaW52b2x2ZXMgdGhlIHN1bSBvZgorK3R3byByZWdpc3RlcnMsIG5laXRoZXIgb25lIG9mIHRoZW0gc2NhbGVkLCB0aGVuIGVpdGhlciBvbmUgbWF5IGJlCisrbGFiZWxlZCB0aGUgYGBiYXNlJycgYW5kIHRoZSBvdGhlciB0aGUgYGBpbmRleCcnOyBidXQgd2hpY2hldmVyCisrbGFiZWxpbmcgaXMgdXNlZCBtdXN0IGZpdCB0aGUgbWFjaGluZSdzIGNvbnN0cmFpbnRzIG9mIHdoaWNoIHJlZ2lzdGVycworK21heSBzZXJ2ZSBpbiBlYWNoIGNhcGFjaXR5LiAgVGhlIGNvbXBpbGVyIHdpbGwgdHJ5IGJvdGggbGFiZWxpbmdzLAorK2xvb2tpbmcgZm9yIG9uZSB0aGF0IGlzIHZhbGlkLCBhbmQgd2lsbCByZWxvYWQgb25lIG9yIGJvdGggcmVnaXN0ZXJzCisrb25seSBpZiBuZWl0aGVyIGxhYmVsaW5nIHdvcmtzLgorKyovCisrI2RlZmluZSBSRUdOT19PS19GT1JfSU5ERVhfUChOVU0pIFRFU1RfUkVHTk8oTlVNLCA8PSwgTEFTVF9SRUdOVU0pCisrCisrLyoKKytBIEMgZXhwcmVzc2lvbiB0aGF0IHBsYWNlcyBhZGRpdGlvbmFsIHJlc3RyaWN0aW9ucyBvbiB0aGUgcmVnaXN0ZXIgY2xhc3MKKyt0byB1c2Ugd2hlbiBpdCBpcyBuZWNlc3NhcnkgdG8gY29weSB2YWx1ZSBYIGludG8gYSByZWdpc3RlciBpbiBjbGFzcworK0NMQVNTLiAgVGhlIHZhbHVlIGlzIGEgcmVnaXN0ZXIgY2xhc3M7IHBlcmhhcHMgQ0xBU1MsIG9yIHBlcmhhcHMKKythbm90aGVyLCBzbWFsbGVyIGNsYXNzLiAgT24gbWFueSBtYWNoaW5lcywgdGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIGlzCisrc2FmZTogI2RlZmluZSBQUkVGRVJSRURfUkVMT0FEX0NMQVNTKFgsQ0xBU1MpIENMQVNTCisrCisrU29tZXRpbWVzIHJldHVybmluZyBhIG1vcmUgcmVzdHJpY3RpdmUgY2xhc3MgbWFrZXMgYmV0dGVyIGNvZGUuICBGb3IKKytleGFtcGxlLCBvbiB0aGUgNjgwMDAsIHdoZW4gWCBpcyBhbiBpbnRlZ2VyIGNvbnN0YW50IHRoYXQgaXMgaW4gcmFuZ2UKKytmb3IgYSAnbW92ZXEnIGluc3RydWN0aW9uLCB0aGUgdmFsdWUgb2YgdGhpcyBtYWNybyBpcyBhbHdheXMKKytEQVRBX1JFR1MgYXMgbG9uZyBhcyBDTEFTUyBpbmNsdWRlcyB0aGUgZGF0YSByZWdpc3RlcnMuCisrUmVxdWlyaW5nIGEgZGF0YSByZWdpc3RlciBndWFyYW50ZWVzIHRoYXQgYSAnbW92ZXEnIHdpbGwgYmUgdXNlZC4KKysKKytJZiBYIGlzIGEgY29uc3RfZG91YmxlLCBieSByZXR1cm5pbmcgTk9fUkVHUworK3lvdSBjYW4gZm9yY2UgWCBpbnRvIGEgbWVtb3J5IGNvbnN0YW50LiAgVGhpcyBpcyB1c2VmdWwgb24KKytjZXJ0YWluIG1hY2hpbmVzIHdoZXJlIGltbWVkaWF0ZSBmbG9hdGluZyB2YWx1ZXMgY2Fubm90IGJlIGxvYWRlZCBpbnRvCisrY2VydGFpbiBraW5kcyBvZiByZWdpc3RlcnMuCisrKi8KKysjZGVmaW5lIFBSRUZFUlJFRF9SRUxPQURfQ0xBU1MoWCwgQ0xBU1MpICBDTEFTUworKworKworKworKy8qCisrQSBDIGV4cHJlc3Npb24gZm9yIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb25zZWN1dGl2ZSByZWdpc3RlcnMKKytvZiBjbGFzcyBDTEFTUyBuZWVkZWQgdG8gaG9sZCBhIHZhbHVlIG9mIG1vZGUgTU9ERS4KKysKKytUaGlzIGlzIGNsb3NlbHkgcmVsYXRlZCB0byB0aGUgbWFjcm8gSEFSRF9SRUdOT19OUkVHUy4gIEluIGZhY3QsCisrdGhlIHZhbHVlIG9mIHRoZSBtYWNybyBDTEFTU19NQVhfTlJFR1MoQ0xBU1MsIE1PREUpCisrc2hvdWxkIGJlIHRoZSBtYXhpbXVtIHZhbHVlIG9mIEhBUkRfUkVHTk9fTlJFR1MoUkVHTk8sIE1PREUpCisrZm9yIGFsbCBSRUdOTyB2YWx1ZXMgaW4gdGhlIGNsYXNzIENMQVNTLgorKworK1RoaXMgbWFjcm8gaGVscHMgY29udHJvbCB0aGUgaGFuZGxpbmcgb2YgbXVsdGlwbGUtd29yZCB2YWx1ZXMKKytpbiB0aGUgcmVsb2FkIHBhc3MuCisrKi8KKysjZGVmaW5lIENMQVNTX01BWF9OUkVHUyhDTEFTUywgTU9ERSkgLyogVG9EbzpmaXhtZSAqLyBcCisrICAodW5zaWduZWQgaW50KSgoR0VUX01PREVfU0laRShNT0RFKSArIFVOSVRTX1BFUl9XT1JEIC0gMSkgLyBVTklUU19QRVJfV09SRCkKKysKKysKKysvKgorKyAgVXNpbmcgQ09OU1RfT0tfRk9SX0NPTlNUUkFJTlRfUCBpbnN0ZWFkIG9mIENPTlNfT0tfRk9SX0xFVFRFUl9QCisrICBpbiBvcmRlciB0byBzdXBwb3J0IGNvbnN0cmFpbnRzIHdpdGggbW9yZSB0aGFuIG9uZSBsZXR0ZXIuCisrICBPbmx5IHR3byBsZXR0ZXJzIGFyZSB0aGVuIHVzZWQgZm9yIGNvbnN0YW50IGNvbnN0cmFpbnRzLAorKyAgdGhlIGxldHRlciAnSycgYW5kIHRoZSBsZXR0ZXIgJ0knLiBUaGUgY29uc3RyYWludCBzdGFydGluZyB3aXRoCisrICB0aGVzZSBsZXR0ZXJzIG11c3QgY29uc2lzdCBvZiBmb3VyIGNoYXJhY3RlcnMuIFRoZSBjaGFyYWN0ZXIgZm9sbG93aW5nCisrICAnSycgb3IgJ0knIG11c3QgYmUgZWl0aGVyICd1JyAodW5zaWduZWQpIG9yICdzJyAoc2lnbmVkKSB0byBzcGVjaWZ5CisrICBpZiB0aGUgY29uc3RhbnQgaXMgemVybyBvciBzaWduIGV4dGVuZGVkLiBUaGUgbGFzdCB0d28gY2hhcmFjdGVycyBzcGVjaWZ5CisrICB0aGUgbGVuZ3RoIGluIGJpdHMgb2YgdGhlIGNvbnN0YW50LiBUaGUgYmFzZSBjb25zdHJhaW50IGxldHRlciAnSScgbWVhbnMKKysgIHRoYXQgdGhpcyBpcyBhbiBuZWdhdGVkIGNvbnN0YW50LCBtZWFuaW5nIHRoYXQgYWN0dWFsbHkgLVZBTCBzaG91bGQgYmUKKysgIGNoZWNrZWQgdG8gbGllIHdpdGhpbmcgdGhlIHZhbGlkIHJhbmdlIGluc3RlYWQgb2YgVkFMIHdoaWNoIGlzIHVzZWQgd2hlbgorKyAgJ0snIGlzIHRoZSBiYXNlIGNvbnN0cmFpbnQgbGV0dGVyLgorKworKyovCisrCisrI2RlZmluZSBDT05TVFJBSU5UX0xFTihDLCBTVFIpCQkJCVwKKysgICggKChDKSA9PSAnSycgfHwgKEMpID09ICdJJykgPyAgNCA6CQkJXAorKyAgICAoKEMpID09ICdSJykgPyAgNSA6CQkJCQlcCisrICAgICgoQykgPT0gJ1AnKSA/IC0xIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIERFRkFVTFRfQ09OU1RSQUlOVF9MRU4oKEMpLCAoU1RSKSkgKQorKworKyNkZWZpbmUgQ09OU1RfT0tfRk9SX0NPTlNUUkFJTlRfUChWQUxVRSwgQywgU1RSKQlcCisrICBhdnIzMl9jb25zdF9va19mb3JfY29uc3RyYWludF9wKFZBTFVFLCBDLCBTVFIpCisrCisrLyoKKytBIEMgZXhwcmVzc2lvbiB0aGF0IGRlZmluZXMgdGhlIG1hY2hpbmUtZGVwZW5kZW50IG9wZXJhbmQgY29uc3RyYWludAorK2xldHRlcnMgdGhhdCBzcGVjaWZ5IHBhcnRpY3VsYXIgcmFuZ2VzIG9mIGNvbnN0X2RvdWJsZSB2YWx1ZXMgKCdHJyBvciAnSCcpLgorKworK0lmIEMgaXMgb25lIG9mIHRob3NlIGxldHRlcnMsIHRoZSBleHByZXNzaW9uIHNob3VsZCBjaGVjayB0aGF0CisrVkFMVUUsIGFuIFJUWCBvZiBjb2RlIGNvbnN0X2RvdWJsZSwgaXMgaW4gdGhlIGFwcHJvcHJpYXRlCisrcmFuZ2UgYW5kIHJldHVybiAxIGlmIHNvLCAwIG90aGVyd2lzZS4gIElmIEMgaXMgbm90IG9uZSBvZiB0aG9zZQorK2xldHRlcnMsIHRoZSB2YWx1ZSBzaG91bGQgYmUgMCByZWdhcmRsZXNzIG9mIFZBTFVFLgorKworK2NvbnN0X2RvdWJsZSBpcyB1c2VkIGZvciBhbGwgZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzIGFuZCBmb3IKKytESW1vZGUgZml4ZWQtcG9pbnQgY29uc3RhbnRzLiAgQSBnaXZlbiBsZXR0ZXIgY2FuIGFjY2VwdCBlaXRoZXIKKytvciBib3RoIGtpbmRzIG9mIHZhbHVlcy4gIEl0IGNhbiB1c2UgR0VUX01PREUgdG8gZGlzdGluZ3Vpc2gKKytiZXR3ZWVuIHRoZXNlIGtpbmRzLgorKyovCisrI2RlZmluZSBDT05TVF9ET1VCTEVfT0tfRk9SX0xFVFRFUl9QKE9QLCBDKSBcCisrICAoKEMpID09ICdHJyA/IGF2cjMyX2NvbnN0X2RvdWJsZV9pbW1lZGlhdGUoT1ApIDogMCkKKysKKysvKgorK0EgQyBleHByZXNzaW9uIHRoYXQgZGVmaW5lcyB0aGUgb3B0aW9uYWwgbWFjaGluZS1kZXBlbmRlbnQgY29uc3RyYWludAorK2xldHRlcnMgdGhhdCBjYW4gYmUgdXNlZCB0byBzZWdyZWdhdGUgc3BlY2lmaWMgdHlwZXMgb2Ygb3BlcmFuZHMsIHVzdWFsbHkKKyttZW1vcnkgcmVmZXJlbmNlcywgZm9yIHRoZSB0YXJnZXQgbWFjaGluZS4gIEFueSBsZXR0ZXIgdGhhdCBpcyBub3QKKytlbHNld2hlcmUgZGVmaW5lZCBhbmQgbm90IG1hdGNoZWQgYnkgUkVHX0NMQVNTX0ZST01fTEVUVEVSCisrbWF5IGJlIHVzZWQuICBOb3JtYWxseSB0aGlzIG1hY3JvIHdpbGwgbm90IGJlIGRlZmluZWQuCisrCisrSWYgaXQgaXMgcmVxdWlyZWQgZm9yIGEgcGFydGljdWxhciB0YXJnZXQgbWFjaGluZSwgaXQgc2hvdWxkIHJldHVybiAxCisraWYgVkFMVUUgY29ycmVzcG9uZHMgdG8gdGhlIG9wZXJhbmQgdHlwZSByZXByZXNlbnRlZCBieSB0aGUKKytjb25zdHJhaW50IGxldHRlciBDLiAgSWYgQyBpcyBub3QgZGVmaW5lZCBhcyBhbiBleHRyYQorK2NvbnN0cmFpbnQsIHRoZSB2YWx1ZSByZXR1cm5lZCBzaG91bGQgYmUgMCByZWdhcmRsZXNzIG9mIFZBTFVFLgorKworK0ZvciBleGFtcGxlLCBvbiB0aGUgUk9NUCwgbG9hZCBpbnN0cnVjdGlvbnMgY2Fubm90IGhhdmUgdGhlaXIgb3V0cHV0CisraW4gcjAgaWYgdGhlIG1lbW9yeSByZWZlcmVuY2UgY29udGFpbnMgYSBzeW1ib2xpYyBhZGRyZXNzLiAgQ29uc3RyYWludAorK2xldHRlciAnUScgaXMgZGVmaW5lZCBhcyByZXByZXNlbnRpbmcgYSBtZW1vcnkgYWRkcmVzcyB0aGF0IGRvZXMKKytub3QgY29udGFpbiBhIHN5bWJvbGljIGFkZHJlc3MuICBBbiBhbHRlcm5hdGl2ZSBpcyBzcGVjaWZpZWQgd2l0aAorK2EgJ1EnIGNvbnN0cmFpbnQgb24gdGhlIGlucHV0IGFuZCAncicgb24gdGhlIG91dHB1dC4gIFRoZSBuZXh0CisrYWx0ZXJuYXRpdmUgc3BlY2lmaWVzICdtJyBvbiB0aGUgaW5wdXQgYW5kIGEgcmVnaXN0ZXIgY2xhc3MgdGhhdAorK2RvZXMgbm90IGluY2x1ZGUgcjAgb24gdGhlIG91dHB1dC4KKysqLworKyNkZWZpbmUgRVhUUkFfQ09OU1RSQUlOVF9TVFIoT1AsIEMsIFNUUikJCQkJXAorKyAgKChDKSA9PSAnVycgPyBhdnIzMl9hZGRyZXNzX29wZXJhbmQoT1AsIEdFVF9NT0RFKE9QKSkgOgkJXAorKyAgIChDKSA9PSAnUicgPyAoYXZyMzJfaW5kaXJlY3RfcmVnaXN0ZXJfb3BlcmFuZChPUCwgR0VUX01PREUoT1ApKSB8fAlcCisrICAgICAgICAgICAgICAgICAoYXZyMzJfaW1tX2Rpc3BfbWVtb3J5X29wZXJhbmQoT1AsIEdFVF9NT0RFKE9QKSkJXAorKyAgICAgICAgICAgICAgICAgICYmIGF2cjMyX2NvbnN0X29rX2Zvcl9jb25zdHJhaW50X3AoCQkJXAorKwkJCQlJTlRWQUwoWEVYUChYRVhQKE9QLCAwKSwgMSkpLAkJXAorKwkJCQkoU1RSKVsxXSwgJihTVFIpWzFdKSkpIDoJCVwKKysgICAoQykgPT0gJ1MnID8gYXZyMzJfaW5kZXhlZF9tZW1vcnlfb3BlcmFuZChPUCwgR0VUX01PREUoT1ApKSA6CVwKKysgICAoQykgPT0gJ1QnID8gYXZyMzJfY29uc3RfcG9vbF9yZWZfb3BlcmFuZChPUCwgR0VUX01PREUoT1ApKSA6CVwKKysgICAoQykgPT0gJ1UnID8gU1lNQk9MX1JFRl9SQ0FMTF9GVU5DVElPTl9QKE9QKSA6CQkJXAorKyAgIChDKSA9PSAnWicgPyBhdnIzMl9jb3BfbWVtb3J5X29wZXJhbmQoT1AsIEdFVF9NT0RFKE9QKSkgOgkJXAorKyAgIChDKSA9PSAnUScgPyBhdnIzMl9ub25fcm13X21lbW9yeV9vcGVyYW5kKE9QLCBHRVRfTU9ERShPUCkpIDoJCVwKKysgICAoQykgPT0gJ1knID8gYXZyMzJfcm13X21lbW9yeV9vcGVyYW5kKE9QLCBHRVRfTU9ERShPUCkpIDogICAgICAgICAgICBcCisrICAgMCkKKysKKysKKysjZGVmaW5lIEVYVFJBX01FTU9SWV9DT05TVFJBSU5UKEMsIFNUUikgKCAoKEMpID09ICdSJykgfHwgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDKSA9PSAnUScpIHx8ICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQykgPT0gJ1MnKSB8fCAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEMpID09ICdZJykgfHwgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDKSA9PSAnWicpICkKKysKKysKKysvKiBSZXR1cm5zIG5vbnplcm8gaWYgb3AgaXMgYSBmdW5jdGlvbiBTWU1CT0xfUkVGIHdoaWNoCisrICAgY2FuIGJlIGNhbGxlZCB1c2luZyBhbiByY2FsbCBpbnN0cnVjdGlvbiAqLworKyNkZWZpbmUgU1lNQk9MX1JFRl9SQ0FMTF9GVU5DVElPTl9QKG9wKSAgXAorKyAgKCBHRVRfQ09ERShvcCkgPT0gU1lNQk9MX1JFRiAgICAgICAgICAgXAorKyAgICAmJiBTWU1CT0xfUkVGX0ZVTkNUSU9OX1Aob3ApICAgICAgICAgXAorKyAgICAmJiBTWU1CT0xfUkVGX0xPQ0FMX1Aob3ApICAgICAgICAgICAgXAorKyAgICAmJiAhU1lNQk9MX1JFRl9FWFRFUk5BTF9QKG9wKSAgICAgICAgXAorKyAgICAmJiAhVEFSR0VUX0hBU19BU01fQUREUl9QU0VVRE9TICkKKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisrICogU3RhY2sgTGF5b3V0IGFuZCBDYWxsaW5nIENvbnZlbnRpb25zCisrICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworKy8qKiBCYXNpYyBTdGFjayBMYXlvdXQgKiovCisrCisrLyoKKytEZWZpbmUgdGhpcyBtYWNybyBpZiBwdXNoaW5nIGEgd29yZCBvbnRvIHRoZSBzdGFjayBtb3ZlcyB0aGUgc3RhY2sKKytwb2ludGVyIHRvIGEgc21hbGxlciBhZGRyZXNzLgorKworK1doZW4gd2Ugc2F5LCBgYGRlZmluZSB0aGlzIG1hY3JvIGlmIC4uLiwnJyBpdCBtZWFucyB0aGF0IHRoZQorK2NvbXBpbGVyIGNoZWNrcyB0aGlzIG1hY3JvIG9ubHkgd2l0aCAjaWZkZWYgc28gdGhlIHByZWNpc2UKKytkZWZpbml0aW9uIHVzZWQgZG9lcyBub3QgbWF0dGVyLgorKyovCisrLyogcHVzaG0gZGVjcmVjZSBTUDogKigtLVNQKSA8LS0gUnggKi8KKysjZGVmaW5lIFNUQUNLX0dST1dTX0RPV05XQVJECisrCisrLyoKKytUaGlzIG1hY3JvIGRlZmluZXMgdGhlIG9wZXJhdGlvbiB1c2VkIHdoZW4gc29tZXRoaW5nIGlzIHB1c2hlZAorK29uIHRoZSBzdGFjay4gIEluIFJUTCwgYSBwdXNoIG9wZXJhdGlvbiB3aWxsIGJlCisrKHNldCAobWVtIChTVEFDS19QVVNIX0NPREUgKHJlZyBzcCkpKSAuLi4pCisrCisrVGhlIGNob2ljZXMgYXJlIFBSRV9ERUMsIFBPU1RfREVDLCBQUkVfSU5DLAorK2FuZCBQT1NUX0lOQy4gIFdoaWNoIG9mIHRoZXNlIGlzIGNvcnJlY3QgZGVwZW5kcyBvbgorK3RoZSBzdGFjayBkaXJlY3Rpb24gYW5kIG9uIHdoZXRoZXIgdGhlIHN0YWNrIHBvaW50ZXIgcG9pbnRzCisrdG8gdGhlIGxhc3QgaXRlbSBvbiB0aGUgc3RhY2sgb3Igd2hldGhlciBpdCBwb2ludHMgdG8gdGhlCisrc3BhY2UgZm9yIHRoZSBuZXh0IGl0ZW0gb24gdGhlIHN0YWNrLgorKworK1RoZSBkZWZhdWx0IGlzIFBSRV9ERUMgd2hlbiBTVEFDS19HUk9XU19ET1dOV0FSRCBpcworK2RlZmluZWQsIHdoaWNoIGlzIGFsbW9zdCBhbHdheXMgcmlnaHQsIGFuZCBQUkVfSU5DIG90aGVyd2lzZSwKKyt3aGljaCBpcyBvZnRlbiB3cm9uZy4KKysqLworKy8qIHB1c2htOiAqKC0tU1ApIDwtLSBSeCAqLworKyNkZWZpbmUgU1RBQ0tfUFVTSF9DT0RFIFBSRV9ERUMKKysKKysvKiBEZWZpbmUgdGhpcyB0byBub256ZXJvIGlmIHRoZSBub21pbmFsIGFkZHJlc3Mgb2YgdGhlIHN0YWNrIGZyYW1lCisrICAgaXMgYXQgdGhlIGhpZ2gtYWRkcmVzcyBlbmQgb2YgdGhlIGxvY2FsIHZhcmlhYmxlczsKKysgICB0aGF0IGlzLCBlYWNoIGFkZGl0aW9uYWwgbG9jYWwgdmFyaWFibGUgYWxsb2NhdGVkCisrICAgZ29lcyBhdCBhIG1vcmUgbmVnYXRpdmUgb2Zmc2V0IGluIHRoZSBmcmFtZS4gICovCisrI2RlZmluZSBGUkFNRV9HUk9XU19ET1dOV0FSRCAxCisrCisrCisrLyoKKytPZmZzZXQgZnJvbSB0aGUgZnJhbWUgcG9pbnRlciB0byB0aGUgZmlyc3QgbG9jYWwgdmFyaWFibGUgc2xvdCB0byBiZSBhbGxvY2F0ZWQuCisrCisrSWYgRlJBTUVfR1JPV1NfRE9XTldBUkQsIGZpbmQgdGhlIG5leHQgc2xvdCdzIG9mZnNldCBieQorK3N1YnRyYWN0aW5nIHRoZSBmaXJzdCBzbG90J3MgbGVuZ3RoIGZyb20gU1RBUlRJTkdfRlJBTUVfT0ZGU0VULgorK090aGVyd2lzZSwgaXQgaXMgZm91bmQgYnkgYWRkaW5nIHRoZSBsZW5ndGggb2YgdGhlIGZpcnN0IHNsb3QgdG8gdGhlCisrdmFsdWUgU1RBUlRJTkdfRlJBTUVfT0ZGU0VULgorKyAgKGknbSBub3Qgc3VyZSBpZiB0aGUgYWJvdmUgaXMgc3RpbGwgY29ycmVjdC4uIGhhZCB0byBjaGFuZ2UgaXQgdG8gZ2V0CisrICAgcmlkIG9mIGFuIG92ZXJmdWxsLiAgLS1tZXcgMmZlYjkzICkKKysqLworKyNkZWZpbmUgU1RBUlRJTkdfRlJBTUVfT0ZGU0VUIDAKKysKKysvKgorK09mZnNldCBmcm9tIHRoZSBzdGFjayBwb2ludGVyIHJlZ2lzdGVyIHRvIHRoZSBmaXJzdCBsb2NhdGlvbiBhdCB3aGljaAorK291dGdvaW5nIGFyZ3VtZW50cyBhcmUgcGxhY2VkLiAgSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgb2YKKyt6ZXJvIGlzIHVzZWQuICBUaGlzIGlzIHRoZSBwcm9wZXIgdmFsdWUgZm9yIG1vc3QgbWFjaGluZXMuCisrCisrSWYgQVJHU19HUk9XX0RPV05XQVJELCB0aGlzIGlzIHRoZSBvZmZzZXQgdG8gdGhlIGxvY2F0aW9uIGFib3ZlCisrdGhlIGZpcnN0IGxvY2F0aW9uIGF0IHdoaWNoIG91dGdvaW5nIGFyZ3VtZW50cyBhcmUgcGxhY2VkLgorKyovCisrI2RlZmluZSBTVEFDS19QT0lOVEVSX09GRlNFVCAwCisrCisrLyoKKytPZmZzZXQgZnJvbSB0aGUgYXJndW1lbnQgcG9pbnRlciByZWdpc3RlciB0byB0aGUgZmlyc3QgYXJndW1lbnQncworK2FkZHJlc3MuICBPbiBzb21lIG1hY2hpbmVzIGl0IG1heSBkZXBlbmQgb24gdGhlIGRhdGEgdHlwZSBvZiB0aGUKKytmdW5jdGlvbi4KKysKKytJZiBBUkdTX0dST1dfRE9XTldBUkQsIHRoaXMgaXMgdGhlIG9mZnNldCB0byB0aGUgbG9jYXRpb24gYWJvdmUKKyt0aGUgZmlyc3QgYXJndW1lbnQncyBhZGRyZXNzLgorKyovCisrI2RlZmluZSBGSVJTVF9QQVJNX09GRlNFVChGVU5ERUNMKSAwCisrCisrCisrLyoKKytBIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBSVEwgcmVwcmVzZW50aW5nIHRoZSBhZGRyZXNzIGluIGEgc3RhY2sKKytmcmFtZSB3aGVyZSB0aGUgcG9pbnRlciB0byB0aGUgY2FsbGVyJ3MgZnJhbWUgaXMgc3RvcmVkLiAgQXNzdW1lIHRoYXQKKytGUkFNRUFERFIgaXMgYW4gUlRMIGV4cHJlc3Npb24gZm9yIHRoZSBhZGRyZXNzIG9mIHRoZSBzdGFjayBmcmFtZQorK2l0c2VsZi4KKysKKytJZiB5b3UgZG9uJ3QgZGVmaW5lIHRoaXMgbWFjcm8sIHRoZSBkZWZhdWx0IGlzIHRvIHJldHVybiB0aGUgdmFsdWUKKytvZiBGUkFNRUFERFIgLSB0aGF0IGlzLCB0aGUgc3RhY2sgZnJhbWUgYWRkcmVzcyBpcyBhbHNvIHRoZQorK2FkZHJlc3Mgb2YgdGhlIHN0YWNrIHdvcmQgdGhhdCBwb2ludHMgdG8gdGhlIHByZXZpb3VzIGZyYW1lLgorKyovCisrI2RlZmluZSBEWU5BTUlDX0NIQUlOX0FERFJFU1MoRlJBTUVBRERSKSBwbHVzX2NvbnN0YW50ICgoRlJBTUVBRERSKSwgNCkKKysKKysKKysvKgorK0EgQyBleHByZXNzaW9uIHdob3NlIHZhbHVlIGlzIFJUTCByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoZSByZXR1cm4KKythZGRyZXNzIGZvciB0aGUgZnJhbWUgQ09VTlQgc3RlcHMgdXAgZnJvbSB0aGUgY3VycmVudCBmcmFtZSwgYWZ0ZXIKKyt0aGUgcHJvbG9ndWUuICBGUkFNRUFERFIgaXMgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIENPVU5UCisrZnJhbWUsIG9yIHRoZSBmcmFtZSBwb2ludGVyIG9mIHRoZSBDT1VOVCAtIDEgZnJhbWUgaWYKKytSRVRVUk5fQUREUl9JTl9QUkVWSU9VU19GUkFNRSBpcyBkZWZpbmVkLgorKworK1RoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBtdXN0IGFsd2F5cyBiZSB0aGUgY29ycmVjdCBhZGRyZXNzIHdoZW4KKytDT1VOVCBpcyB6ZXJvLCBidXQgbWF5IGJlIE5VTExfUlRYIGlmIHRoZXJlIGlzIG5vdCB3YXkgdG8KKytkZXRlcm1pbmUgdGhlIHJldHVybiBhZGRyZXNzIG9mIG90aGVyIGZyYW1lcy4KKysqLworKyNkZWZpbmUgUkVUVVJOX0FERFJfUlRYKENPVU5ULCBGUkFNRUFERFIpIGF2cjMyX3JldHVybl9hZGRyKENPVU5ULCBGUkFNRUFERFIpCisrCisrCisrLyoKKytBIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBSVEwgcmVwcmVzZW50aW5nIHRoZSBsb2NhdGlvbiBvZiB0aGUKKytpbmNvbWluZyByZXR1cm4gYWRkcmVzcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGFueSBmdW5jdGlvbiwgYmVmb3JlIHRoZQorK3Byb2xvZ3VlLiAgVGhpcyBSVEwgaXMgZWl0aGVyIGEgUkVHLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHJldHVybgorK3ZhbHVlIGlzIHNhdmVkIGluICdSRUcnLCBvciBhIE1FTSByZXByZXNlbnRpbmcgYSBsb2NhdGlvbiBpbgorK3RoZSBzdGFjay4KKysKKytZb3Ugb25seSBuZWVkIHRvIGRlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgY2FsbCBmcmFtZQorK2RlYnVnZ2luZyBpbmZvcm1hdGlvbiBsaWtlIHRoYXQgcHJvdmlkZWQgYnkgRFdBUkYgMi4KKysKKytJZiB0aGlzIFJUTCBpcyBhIFJFRywgeW91IHNob3VsZCBhbHNvIGRlZmluZQorK0RXQVJGX0ZSQU1FX1JFVFVSTl9DT0xVTU4gdG8gRFdBUkZfRlJBTUVfUkVHTlVNIChSRUdOTykuCisrKi8KKysjZGVmaW5lIElOQ09NSU5HX1JFVFVSTl9BRERSX1JUWCBnZW5fcnR4X1JFRyAoUG1vZGUsIExSX1JFR05VTSkKKysKKysKKysKKysvKgorK0EgQyBleHByZXNzaW9uIHdob3NlIHZhbHVlIGlzIGFuIGludGVnZXIgZ2l2aW5nIHRoZSBvZmZzZXQsIGluIGJ5dGVzLAorK2Zyb20gdGhlIHZhbHVlIG9mIHRoZSBzdGFjayBwb2ludGVyIHJlZ2lzdGVyIHRvIHRoZSB0b3Agb2YgdGhlIHN0YWNrCisrZnJhbWUgYXQgdGhlIGJlZ2lubmluZyBvZiBhbnkgZnVuY3Rpb24sIGJlZm9yZSB0aGUgcHJvbG9ndWUuICBUaGUgdG9wIG9mCisrdGhlIGZyYW1lIGlzIGRlZmluZWQgdG8gYmUgdGhlIHZhbHVlIG9mIHRoZSBzdGFjayBwb2ludGVyIGluIHRoZQorK3ByZXZpb3VzIGZyYW1lLCBqdXN0IGJlZm9yZSB0aGUgY2FsbCBpbnN0cnVjdGlvbi4KKysKKytZb3Ugb25seSBuZWVkIHRvIGRlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgY2FsbCBmcmFtZQorK2RlYnVnZ2luZyBpbmZvcm1hdGlvbiBsaWtlIHRoYXQgcHJvdmlkZWQgYnkgRFdBUkYgMi4KKysqLworKyNkZWZpbmUgSU5DT01JTkdfRlJBTUVfU1BfT0ZGU0VUIDAKKysKKysKKysvKiogRXhjZXB0aW9uIEhhbmRsaW5nIFN1cHBvcnQgKiovCisrCisrLyogVXNlIHNldGp1bXAvbG9uZ2p1bXAgZm9yIGV4Y2VwdGlvbiBoYW5kbGluZy4gKi8KKysjZGVmaW5lIERXQVJGMl9VTldJTkRfSU5GTyAwCisrI2RlZmluZSBNVVNUX1VTRV9TSkxKX0VYQ0VQVElPTlMgMQorKworKy8qCisrQSBDIGV4cHJlc3Npb24gd2hvc2UgdmFsdWUgaXMgdGhlIE50aCByZWdpc3RlciBudW1iZXIgdXNlZCBmb3IKKytkYXRhIGJ5IGV4Y2VwdGlvbiBoYW5kbGVycywgb3IgSU5WQUxJRF9SRUdOVU0gaWYgZmV3ZXIgdGhhbgorK04gcmVnaXN0ZXJzIGFyZSB1c2FibGUuCisrCisrVGhlIGV4Y2VwdGlvbiBoYW5kbGluZyBsaWJyYXJ5IHJvdXRpbmVzIGNvbW11bmljYXRlIHdpdGggdGhlIGV4Y2VwdGlvbgorK2hhbmRsZXJzIHZpYSBhIHNldCBvZiBhZ3JlZWQgdXBvbiByZWdpc3RlcnMuICBJZGVhbGx5IHRoZXNlIHJlZ2lzdGVycworK3Nob3VsZCBiZSBjYWxsLWNsb2JiZXJlZDsgaXQgaXMgcG9zc2libGUgdG8gdXNlIGNhbGwtc2F2ZWQgcmVnaXN0ZXJzLAorK2J1dCBtYXkgbmVnYXRpdmVseSBpbXBhY3QgY29kZSBzaXplLiAgVGhlIHRhcmdldCBtdXN0IHN1cHBvcnQgYXQgbGVhc3QKKysyIGRhdGEgcmVnaXN0ZXJzLCBidXQgc2hvdWxkIGRlZmluZSA0IGlmIHRoZXJlIGFyZSBlbm91Z2ggZnJlZSByZWdpc3RlcnMuCisrCisrWW91IG11c3QgZGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IHdhbnQgdG8gc3VwcG9ydCBjYWxsIGZyYW1lIGV4Y2VwdGlvbgorK2hhbmRsaW5nIGxpa2UgdGhhdCBwcm92aWRlZCBieSBEV0FSRiAyLgorKyovCisrLyoKKysgIFVzZSByOS1yMTEKKysqLworKyNkZWZpbmUgRUhfUkVUVVJOX0RBVEFfUkVHTk8oTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICgoTjwzKSA/IElOVEVSTkFMX1JFR05VTShOKzkpIDogSU5WQUxJRF9SRUdOVU0pCisrCisrLyoKKytBIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBSVEwgcmVwcmVzZW50aW5nIGEgbG9jYXRpb24gaW4gd2hpY2gKKyt0byBzdG9yZSBhIHN0YWNrIGFkanVzdG1lbnQgdG8gYmUgYXBwbGllZCBiZWZvcmUgZnVuY3Rpb24gcmV0dXJuLgorK1RoaXMgaXMgdXNlZCB0byB1bndpbmQgdGhlIHN0YWNrIHRvIGFuIGV4Y2VwdGlvbiBoYW5kbGVyJ3MgY2FsbCBmcmFtZS4KKytJdCB3aWxsIGJlIGFzc2lnbmVkIHplcm8gb24gY29kZSBwYXRocyB0aGF0IHJldHVybiBub3JtYWxseS4KKysKKytUeXBpY2FsbHkgdGhpcyBpcyBhIGNhbGwtY2xvYmJlcmVkIGhhcmQgcmVnaXN0ZXIgdGhhdCBpcyBvdGhlcndpc2UKKyt1bnRvdWNoZWQgYnkgdGhlIGVwaWxvZ3VlLCBidXQgY291bGQgYWxzbyBiZSBhIHN0YWNrIHNsb3QuCisrCisrWW91IG11c3QgZGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IHdhbnQgdG8gc3VwcG9ydCBjYWxsIGZyYW1lIGV4Y2VwdGlvbgorK2hhbmRsaW5nIGxpa2UgdGhhdCBwcm92aWRlZCBieSBEV0FSRiAyLgorKyovCisrLyoKKysgIFVzZSByOAorKyovCisrI2RlZmluZSBFSF9SRVRVUk5fU1RBQ0tBREpfUkVHTk8gSU5URVJOQUxfUkVHTlVNKDgpCisrI2RlZmluZSBFSF9SRVRVUk5fU1RBQ0tBREpfUlRYIGdlbl9ydHhfUkVHKFNJbW9kZSwgRUhfUkVUVVJOX1NUQUNLQURKX1JFR05PKQorKworKy8qCisrQSBDIGV4cHJlc3Npb24gd2hvc2UgdmFsdWUgaXMgUlRMIHJlcHJlc2VudGluZyBhIGxvY2F0aW9uIGluIHdoaWNoCisrdG8gc3RvcmUgdGhlIGFkZHJlc3Mgb2YgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdG8gd2hpY2ggd2Ugc2hvdWxkCisrcmV0dXJuLiAgSXQgd2lsbCBub3QgYmUgYXNzaWduZWQgb24gY29kZSBwYXRocyB0aGF0IHJldHVybiBub3JtYWxseS4KKysKKytUeXBpY2FsbHkgdGhpcyBpcyB0aGUgbG9jYXRpb24gaW4gdGhlIGNhbGwgZnJhbWUgYXQgd2hpY2ggdGhlIG5vcm1hbAorK3JldHVybiBhZGRyZXNzIGlzIHN0b3JlZC4gIEZvciB0YXJnZXRzIHRoYXQgcmV0dXJuIGJ5IHBvcHBpbmcgYW4KKythZGRyZXNzIG9mZiB0aGUgc3RhY2ssIHRoaXMgbWlnaHQgYmUgYSBtZW1vcnkgYWRkcmVzcyBqdXN0IGJlbG93CisrdGhlIHRhcmdldCBjYWxsIGZyYW1lIHJhdGhlciB0aGFuIGluc2lkZSB0aGUgY3VycmVudCBjYWxsCisrZnJhbWUuICBFSF9SRVRVUk5fU1RBQ0tBREpfUlRYIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gYXNzaWduZWQsCisrc28gaXQgbWF5IGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBsb2NhdGlvbiBvZiB0aGUgdGFyZ2V0IGNhbGwgZnJhbWUuCisrCisrU29tZSB0YXJnZXRzIGhhdmUgbW9yZSBjb21wbGV4IHJlcXVpcmVtZW50cyB0aGFuIHN0b3JpbmcgdG8gYW4KKythZGRyZXNzIGNhbGN1bGFibGUgZHVyaW5nIGluaXRpYWwgY29kZSBnZW5lcmF0aW9uLiAgSW4gdGhhdCBjYXNlCisrdGhlIGVoX3JldHVybiBpbnN0cnVjdGlvbiBwYXR0ZXJuIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCisrCisrSWYgeW91IHdhbnQgdG8gc3VwcG9ydCBjYWxsIGZyYW1lIGV4Y2VwdGlvbiBoYW5kbGluZywgeW91IG11c3QKKytkZWZpbmUgZWl0aGVyIHRoaXMgbWFjcm8gb3IgdGhlIGVoX3JldHVybiBpbnN0cnVjdGlvbiBwYXR0ZXJuLgorKyovCisrLyoKKysgIFdlIGRlZmluZSB0aGUgZWhfcmV0dXJuIGluc3RydWN0aW9uIHBhdHRlcm4sIHNvIHRoaXMgaXNuJ3QgbmVlZGVkLgorKyovCisrLyogI2RlZmluZSBFSF9SRVRVUk5fSEFORExFUl9SVFggZ2VuX3J0eF9SRUcoUG1vZGUsIFJFVF9SRUdJU1RFUikgKi8KKysKKysvKgorKyAgVGhpcyBtYWNybyBjaG9vc2VzIHRoZSBlbmNvZGluZyBvZiBwb2ludGVycyBlbWJlZGRlZCBpbiB0aGUKKysgIGV4Y2VwdGlvbiBoYW5kbGluZyBzZWN0aW9ucy4gSWYgYXQgYWxsIHBvc3NpYmxlLCB0aGlzIHNob3VsZCBiZQorKyAgZGVmaW5lZCBzdWNoIHRoYXQgdGhlIGV4Y2VwdGlvbiBoYW5kbGluZyBzZWN0aW9uIHdpbGwgbm90IHJlcXVpcmUKKysgIGR5bmFtaWMgcmVsb2NhdGlvbnMsIGFuZCBzbyBtYXkgYmUgcmVhZC1vbmx5LgorKworKyAgY29kZSBpcyAwIGZvciBkYXRhLCAxIGZvciBjb2RlIGxhYmVscywgMiBmb3IgZnVuY3Rpb24KKysgIHBvaW50ZXJzLiBnbG9iYWwgaXMgdHJ1ZSBpZiB0aGUgc3ltYm9sIG1heSBiZSBhZmZlY3RlZCBieSBkeW5hbWljCisrICByZWxvY2F0aW9ucy4gVGhlIG1hY3JvIHNob3VsZCByZXR1cm4gYSBjb21iaW5hdGlvbiBvZiB0aGUgRFdfRUhfUEVfKgorKyAgZGVmaW5lcyBhcyBmb3VuZCBpbiBkd2FyZjIuaC4KKysKKysgIElmIHRoaXMgbWFjcm8gaXMgbm90IGRlZmluZWQsIHBvaW50ZXJzIHdpbGwgbm90IGJlIGVuY29kZWQgYnV0CisrICByZXByZXNlbnRlZCBkaXJlY3RseS4KKysqLworKyNkZWZpbmUgQVNNX1BSRUZFUlJFRF9FSF9EQVRBX0ZPUk1BVChDT0RFLCBHTE9CQUwpCVwKKysgICgoZmxhZ19waWMgJiYgKEdMT0JBTCkgPyBEV19FSF9QRV9pbmRpcmVjdCA6IDApCVwKKysgICB8IChmbGFnX3BpYyA/IERXX0VIX1BFX3BjcmVsIDogRFdfRUhfUEVfYWJzcHRyKQlcCisrICAgfCBEV19FSF9QRV9zZGF0YTQpCisrCisrLyogVG9EbzogVGhlIHJlc3Qgb2YgdGhpcyBzdWJzZWN0aW9uICovCisrCisrLyoqIFNwZWNpZnlpbmcgSG93IFN0YWNrIENoZWNraW5nIGlzIERvbmUgKiovCisrLyogVG9EbzogQWxsIGluIHRoaXMgc3Vic2VjdGlvbiAqLworKworKy8qKiBSZWdpc3RlcnMgVGhhdCBBZGRyZXNzIHRoZSBTdGFjayBGcmFtZSAqKi8KKysKKysvKgorK1RoZSByZWdpc3RlciBudW1iZXIgb2YgdGhlIHN0YWNrIHBvaW50ZXIgcmVnaXN0ZXIsIHdoaWNoIG11c3QgYWxzbyBiZSBhCisrZml4ZWQgcmVnaXN0ZXIgYWNjb3JkaW5nIHRvIEZJWEVEX1JFR0lTVEVSUy4gIE9uIG1vc3QgbWFjaGluZXMsCisrdGhlIGhhcmR3YXJlIGRldGVybWluZXMgd2hpY2ggcmVnaXN0ZXIgdGhpcyBpcy4KKysqLworKy8qIFVzaW5nIHIxMyBhcyBzdGFjayBwb2ludGVyLiAqLworKyNkZWZpbmUgU1RBQ0tfUE9JTlRFUl9SRUdOVU0gSU5URVJOQUxfUkVHTlVNKDEzKQorKworKy8qCisrVGhlIHJlZ2lzdGVyIG51bWJlciBvZiB0aGUgZnJhbWUgcG9pbnRlciByZWdpc3Rlciwgd2hpY2ggaXMgdXNlZCB0bworK2FjY2VzcyBhdXRvbWF0aWMgdmFyaWFibGVzIGluIHRoZSBzdGFjayBmcmFtZS4gIE9uIHNvbWUgbWFjaGluZXMsIHRoZQorK2hhcmR3YXJlIGRldGVybWluZXMgd2hpY2ggcmVnaXN0ZXIgdGhpcyBpcy4gIE9uIG90aGVyIG1hY2hpbmVzLCB5b3UgY2FuCisrY2hvb3NlIGFueSByZWdpc3RlciB5b3Ugd2lzaCBmb3IgdGhpcyBwdXJwb3NlLgorKyovCisrLyogVXNlIHI3ICovCisrI2RlZmluZSBGUkFNRV9QT0lOVEVSX1JFR05VTSBJTlRFUk5BTF9SRUdOVU0oNykKKysKKysKKysKKysvKgorK1RoZSByZWdpc3RlciBudW1iZXIgb2YgdGhlIGFyZyBwb2ludGVyIHJlZ2lzdGVyLCB3aGljaCBpcyB1c2VkIHRvIGFjY2VzcworK3RoZSBmdW5jdGlvbidzIGFyZ3VtZW50IGxpc3QuICBPbiBzb21lIG1hY2hpbmVzLCB0aGlzIGlzIHRoZSBzYW1lIGFzIHRoZQorK2ZyYW1lIHBvaW50ZXIgcmVnaXN0ZXIuICBPbiBzb21lIG1hY2hpbmVzLCB0aGUgaGFyZHdhcmUgZGV0ZXJtaW5lcyB3aGljaAorK3JlZ2lzdGVyIHRoaXMgaXMuICBPbiBvdGhlciBtYWNoaW5lcywgeW91IGNhbiBjaG9vc2UgYW55IHJlZ2lzdGVyIHlvdQorK3dpc2ggZm9yIHRoaXMgcHVycG9zZS4gIElmIHRoaXMgaXMgbm90IHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHRoZSBmcmFtZQorK3BvaW50ZXIgcmVnaXN0ZXIsIHRoZW4geW91IG11c3QgbWFyayBpdCBhcyBhIGZpeGVkIHJlZ2lzdGVyIGFjY29yZGluZyB0bworK0ZJWEVEX1JFR0lTVEVSUywgb3IgYXJyYW5nZSB0byBiZSBhYmxlIHRvIGVsaW1pbmF0ZSBpdCAoc2VlIFNlY3Rpb24KKysxMC4xMC41IFtFbGltaW5hdGlvbl0sIHBhZ2UgMjI0KS4KKysqLworKy8qIFVzaW5nIHI1ICovCisrI2RlZmluZSBBUkdfUE9JTlRFUl9SRUdOVU0gSU5URVJOQUxfUkVHTlVNKDQpCisrCisrCisrLyoKKytSZWdpc3RlciBudW1iZXJzIHVzZWQgZm9yIHBhc3NpbmcgYSBmdW5jdGlvbidzIHN0YXRpYyBjaGFpbiBwb2ludGVyLiAgSWYKKytyZWdpc3RlciB3aW5kb3dzIGFyZSB1c2VkLCB0aGUgcmVnaXN0ZXIgbnVtYmVyIGFzIHNlZW4gYnkgdGhlIGNhbGxlZAorK2Z1bmN0aW9uIGlzIFNUQVRJQ19DSEFJTl9JTkNPTUlOR19SRUdOVU0sIHdoaWxlIHRoZSByZWdpc3RlcgorK251bWJlciBhcyBzZWVuIGJ5IHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGlzIFNUQVRJQ19DSEFJTl9SRUdOVU0uICBJZgorK3RoZXNlIHJlZ2lzdGVycyBhcmUgdGhlIHNhbWUsIFNUQVRJQ19DSEFJTl9JTkNPTUlOR19SRUdOVU0gbmVlZAorK25vdCBiZSBkZWZpbmVkLgorKworK1RoZSBzdGF0aWMgY2hhaW4gcmVnaXN0ZXIgbmVlZCBub3QgYmUgYSBmaXhlZCByZWdpc3Rlci4KKysKKytJZiB0aGUgc3RhdGljIGNoYWluIGlzIHBhc3NlZCBpbiBtZW1vcnksIHRoZXNlIG1hY3JvcyBzaG91bGQgbm90IGJlCisrZGVmaW5lZDsgaW5zdGVhZCwgdGhlIG5leHQgdHdvIG1hY3JvcyBzaG91bGQgYmUgZGVmaW5lZC4KKysqLworKy8qIFVzaW5nIHIwICovCisrI2RlZmluZSBTVEFUSUNfQ0hBSU5fUkVHTlVNIElOVEVSTkFMX1JFR05VTSgwKQorKworKworKy8qKiBFbGltaW5hdGluZyBGcmFtZSBQb2ludGVyIGFuZCBBcmcgUG9pbnRlciAqKi8KKysKKysvKgorK0EgQyBleHByZXNzaW9uIHdoaWNoIGlzIG5vbnplcm8gaWYgYSBmdW5jdGlvbiBtdXN0IGhhdmUgYW5kIHVzZSBhIGZyYW1lCisrcG9pbnRlci4gIFRoaXMgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgIGluIHRoZSByZWxvYWQgcGFzcy4gIElmIGl0cyB2YWx1ZSBpcworK25vbnplcm8gdGhlIGZ1bmN0aW9uIHdpbGwgaGF2ZSBhIGZyYW1lIHBvaW50ZXIuCisrCisrVGhlIGV4cHJlc3Npb24gY2FuIGluIHByaW5jaXBsZSBleGFtaW5lIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGFuZCBkZWNpZGUKKythY2NvcmRpbmcgdG8gdGhlIGZhY3RzLCBidXQgb24gbW9zdCBtYWNoaW5lcyB0aGUgY29uc3RhbnQgMCBvciB0aGUKKytjb25zdGFudCAxIHN1ZmZpY2VzLiAgVXNlIDAgd2hlbiB0aGUgbWFjaGluZSBhbGxvd3MgY29kZSB0byBiZSBnZW5lcmF0ZWQKKyt3aXRoIG5vIGZyYW1lIHBvaW50ZXIsIGFuZCBkb2luZyBzbyBzYXZlcyBzb21lIHRpbWUgb3Igc3BhY2UuICBVc2UgMQorK3doZW4gdGhlcmUgaXMgbm8gcG9zc2libGUgYWR2YW50YWdlIHRvIGF2b2lkaW5nIGEgZnJhbWUgcG9pbnRlci4KKysKKytJbiBjZXJ0YWluIGNhc2VzLCB0aGUgY29tcGlsZXIgZG9lcyBub3Qga25vdyBob3cgdG8gcHJvZHVjZSB2YWxpZCBjb2RlCisrd2l0aG91dCBhIGZyYW1lIHBvaW50ZXIuICBUaGUgY29tcGlsZXIgcmVjb2duaXplcyB0aG9zZSBjYXNlcyBhbmQKKythdXRvbWF0aWNhbGx5IGdpdmVzIHRoZSBmdW5jdGlvbiBhIGZyYW1lIHBvaW50ZXIgcmVnYXJkbGVzcyBvZiB3aGF0CisrRlJBTUVfUE9JTlRFUl9SRVFVSVJFRCBzYXlzLiAgWW91IGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQKKyt0aGVtLgorKworK0luIGEgZnVuY3Rpb24gdGhhdCBkb2VzIG5vdCByZXF1aXJlIGEgZnJhbWUgcG9pbnRlciwgdGhlIGZyYW1lIHBvaW50ZXIKKytyZWdpc3RlciBjYW4gYmUgYWxsb2NhdGVkIGZvciBvcmRpbmFyeSB1c2FnZSwgdW5sZXNzIHlvdSBtYXJrIGl0IGFzIGEKKytmaXhlZCByZWdpc3Rlci4gIFNlZSBGSVhFRF9SRUdJU1RFUlMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisrKi8KKysvKiBXZSBuZWVkIHRoZSBmcmFtZSBwb2ludGVyIHdoZW4gY29tcGlsaW5nIGZvciBwcm9maWxpbmcgKi8KKysjZGVmaW5lIEZSQU1FX1BPSU5URVJfUkVRVUlSRUQgKGN1cnJlbnRfZnVuY3Rpb25fcHJvZmlsZSkKKysKKysvKgorK0EgQyBzdGF0ZW1lbnQgdG8gc3RvcmUgaW4gdGhlIHZhcmlhYmxlIERFUFRIX1ZBUiB0aGUgZGlmZmVyZW5jZQorK2JldHdlZW4gdGhlIGZyYW1lIHBvaW50ZXIgYW5kIHRoZSBzdGFjayBwb2ludGVyIHZhbHVlcyBpbW1lZGlhdGVseSBhZnRlcgorK3RoZSBmdW5jdGlvbiBwcm9sb2d1ZS4gIFRoZSB2YWx1ZSB3b3VsZCBiZSBjb21wdXRlZCBmcm9tIGluZm9ybWF0aW9uCisrc3VjaCBhcyB0aGUgcmVzdWx0IG9mIGdldF9mcmFtZV9zaXplICgpIGFuZCB0aGUgdGFibGVzIG9mCisrcmVnaXN0ZXJzIHJlZ3NfZXZlcl9saXZlIGFuZCBjYWxsX3VzZWRfcmVncy4KKysKKytJZiBFTElNSU5BQkxFX1JFR1MgaXMgZGVmaW5lZCwgdGhpcyBtYWNybyB3aWxsIGJlIG5vdCBiZSB1c2VkIGFuZAorK25lZWQgbm90IGJlIGRlZmluZWQuICBPdGhlcndpc2UsIGl0IG11c3QgYmUgZGVmaW5lZCBldmVuIGlmCisrRlJBTUVfUE9JTlRFUl9SRVFVSVJFRCBpcyBkZWZpbmVkIHRvIGFsd2F5cyBiZSB0cnVlOyBpbiB0aGF0CisrY2FzZSwgeW91IG1heSBzZXQgREVQVEhfVkFSIHRvIGFueXRoaW5nLgorKyovCisrI2RlZmluZSBJTklUSUFMX0ZSQU1FX1BPSU5URVJfT0ZGU0VUKERFUFRIX1ZBUikgKChERVBUSF9WQVIpID0gZ2V0X2ZyYW1lX3NpemUoKSkKKysKKysvKgorK0lmIGRlZmluZWQsIHRoaXMgbWFjcm8gc3BlY2lmaWVzIGEgdGFibGUgb2YgcmVnaXN0ZXIgcGFpcnMgdXNlZCB0bworK2VsaW1pbmF0ZSB1bm5lZWRlZCByZWdpc3RlcnMgdGhhdCBwb2ludCBpbnRvIHRoZSBzdGFjayBmcmFtZS4gIElmIGl0IGlzIG5vdAorK2RlZmluZWQsIHRoZSBvbmx5IGVsaW1pbmF0aW9uIGF0dGVtcHRlZCBieSB0aGUgY29tcGlsZXIgaXMgdG8gcmVwbGFjZQorK3JlZmVyZW5jZXMgdG8gdGhlIGZyYW1lIHBvaW50ZXIgd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBzdGFjayBwb2ludGVyLgorKworK1RoZSBkZWZpbml0aW9uIG9mIHRoaXMgbWFjcm8gaXMgYSBsaXN0IG9mIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIGVhY2gKKytvZiB3aGljaCBzcGVjaWZpZXMgYW4gb3JpZ2luYWwgYW5kIHJlcGxhY2VtZW50IHJlZ2lzdGVyLgorKworK09uIHNvbWUgbWFjaGluZXMsIHRoZSBwb3NpdGlvbiBvZiB0aGUgYXJndW1lbnQgcG9pbnRlciBpcyBub3Qga25vd24gdW50aWwKKyt0aGUgY29tcGlsYXRpb24gaXMgY29tcGxldGVkLiAgSW4gc3VjaCBhIGNhc2UsIGEgc2VwYXJhdGUgaGFyZCByZWdpc3RlcgorK211c3QgYmUgdXNlZCBmb3IgdGhlIGFyZ3VtZW50IHBvaW50ZXIuICBUaGlzIHJlZ2lzdGVyIGNhbiBiZSBlbGltaW5hdGVkIGJ5CisrcmVwbGFjaW5nIGl0IHdpdGggZWl0aGVyIHRoZSBmcmFtZSBwb2ludGVyIG9yIHRoZSBhcmd1bWVudCBwb2ludGVyLAorK2RlcGVuZGluZyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgcG9pbnRlciBoYXMgYmVlbiBlbGltaW5hdGVkLgorKworK0luIHRoaXMgY2FzZSwgeW91IG1pZ2h0IHNwZWNpZnk6CisrICAjZGVmaW5lIEVMSU1JTkFCTEVfUkVHUyAgXAorKyAge3tBUkdfUE9JTlRFUl9SRUdOVU0sIFNUQUNLX1BPSU5URVJfUkVHTlVNfSwgXAorKyAgIHtBUkdfUE9JTlRFUl9SRUdOVU0sIEZSQU1FX1BPSU5URVJfUkVHTlVNfSwgXAorKyAgIHtGUkFNRV9QT0lOVEVSX1JFR05VTSwgU1RBQ0tfUE9JTlRFUl9SRUdOVU19fQorKworK05vdGUgdGhhdCB0aGUgZWxpbWluYXRpb24gb2YgdGhlIGFyZ3VtZW50IHBvaW50ZXIgd2l0aCB0aGUgc3RhY2sgcG9pbnRlciBpcworK3NwZWNpZmllZCBmaXJzdCBzaW5jZSB0aGF0IGlzIHRoZSBwcmVmZXJyZWQgZWxpbWluYXRpb24uCisrKi8KKysjZGVmaW5lIEVMSU1JTkFCTEVfUkVHUwkJCQkJXAorK3sJCQkJCQkJXAorKyAgeyBGUkFNRV9QT0lOVEVSX1JFR05VTSwgU1RBQ0tfUE9JTlRFUl9SRUdOVU0gfSwJXAorKyAgeyBBUkdfUE9JTlRFUl9SRUdOVU0sIFNUQUNLX1BPSU5URVJfUkVHTlVNIH0sCQlcCisrICB7IEFSR19QT0lOVEVSX1JFR05VTSwgRlJBTUVfUE9JTlRFUl9SRUdOVU0gfQkJXAorK30KKysKKysvKgorK0EgQyBleHByZXNzaW9uIHRoYXQgcmV0dXJucyBub256ZXJvIGlmIHRoZSBjb21waWxlciBpcyBhbGxvd2VkIHRvIHRyeQorK3RvIHJlcGxhY2UgcmVnaXN0ZXIgbnVtYmVyIEZST00gd2l0aCByZWdpc3RlciBudW1iZXIKKytUTy4gIFRoaXMgbWFjcm8gbmVlZCBvbmx5IGJlIGRlZmluZWQgaWYgRUxJTUlOQUJMRV9SRUdTCisraXMgZGVmaW5lZCwgYW5kIHdpbGwgdXN1YWxseSBiZSB0aGUgY29uc3RhbnQgMSwgc2luY2UgbW9zdCBvZiB0aGUgY2FzZXMKKytwcmV2ZW50aW5nIHJlZ2lzdGVyIGVsaW1pbmF0aW9uIGFyZSB0aGluZ3MgdGhhdCB0aGUgY29tcGlsZXIgYWxyZWFkeQorK2tub3dzIGFib3V0LgorKyovCisrI2RlZmluZSBDQU5fRUxJTUlOQVRFKEZST00sIFRPKSAxCisrCisrLyoKKytUaGlzIG1hY3JvIGlzIHNpbWlsYXIgdG8gSU5JVElBTF9GUkFNRV9QT0lOVEVSX09GRlNFVC4gIEl0Cisrc3BlY2lmaWVzIHRoZSBpbml0aWFsIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgc3BlY2lmaWVkIHBhaXIgb2YKKytyZWdpc3RlcnMuICBUaGlzIG1hY3JvIG11c3QgYmUgZGVmaW5lZCBpZiBFTElNSU5BQkxFX1JFR1MgaXMKKytkZWZpbmVkLgorKyovCisrI2RlZmluZSBJTklUSUFMX0VMSU1JTkFUSU9OX09GRlNFVChGUk9NLCBUTywgT0ZGU0VUKQkJXAorKyAgKChPRkZTRVQpID0gYXZyMzJfaW5pdGlhbF9lbGltaW5hdGlvbl9vZmZzZXQoRlJPTSwgVE8pKQorKworKy8qKiBQYXNzaW5nIEZ1bmN0aW9uIEFyZ3VtZW50cyBvbiB0aGUgU3RhY2sgKiovCisrCisrCisrLyoKKytBIEMgZXhwcmVzc2lvbi4gIElmIG5vbnplcm8sIHB1c2ggaW5zbnMgd2lsbCBiZSB1c2VkIHRvIHBhc3MKKytvdXRnb2luZyBhcmd1bWVudHMuCisrSWYgdGhlIHRhcmdldCBtYWNoaW5lIGRvZXMgbm90IGhhdmUgYSBwdXNoIGluc3RydWN0aW9uLCBzZXQgaXQgdG8gemVyby4KKytUaGF0IGRpcmVjdHMgR0NDIHRvIHVzZSBhbiBhbHRlcm5hdGUgc3RyYXRlZ3k6IHRvCisrYWxsb2NhdGUgdGhlIGVudGlyZSBhcmd1bWVudCBibG9jayBhbmQgdGhlbiBzdG9yZSB0aGUgYXJndW1lbnRzIGludG8KKytpdC4gIFdoZW4gUFVTSF9BUkdTIGlzIG5vbnplcm8sIFBVU0hfUk9VTkRJTkcgbXVzdCBiZSBkZWZpbmVkIHRvby4KKysqLworKyNkZWZpbmUgUFVTSF9BUkdTIDEKKysKKysKKysvKgorK0EgQyBleHByZXNzaW9uIHRoYXQgaXMgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSBwdXNoZWQgb250byB0aGUKKytzdGFjayB3aGVuIGFuIGluc3RydWN0aW9uIGF0dGVtcHRzIHRvIHB1c2ggTlBVU0hFRCBieXRlcy4KKysKKytPbiBzb21lIG1hY2hpbmVzLCB0aGUgZGVmaW5pdGlvbgorKworKyAgI2RlZmluZSBQVVNIX1JPVU5ESU5HKEJZVEVTKSAoQllURVMpCisrCisrd2lsbCBzdWZmaWNlLiAgQnV0IG9uIG90aGVyIG1hY2hpbmVzLCBpbnN0cnVjdGlvbnMgdGhhdCBhcHBlYXIKKyt0byBwdXNoIG9uZSBieXRlIGFjdHVhbGx5IHB1c2ggdHdvIGJ5dGVzIGluIGFuIGF0dGVtcHQgdG8gbWFpbnRhaW4KKythbGlnbm1lbnQuICBUaGVuIHRoZSBkZWZpbml0aW9uIHNob3VsZCBiZQorKworKyAgI2RlZmluZSBQVVNIX1JPVU5ESU5HKEJZVEVTKSAoKChCWVRFUykgKyAxKSAmIH4xKQorKyovCisrLyogUHVzaCA0IGJ5dGVzIGF0IHRoZSB0aW1lLiAqLworKyNkZWZpbmUgUFVTSF9ST1VORElORyhOUFVTSEVEKSAoKChOUFVTSEVEKSArIDMpICYgfjMpCisrCisrLyoKKytBIEMgZXhwcmVzc2lvbi4gIElmIG5vbnplcm8sIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBzcGFjZSByZXF1aXJlZCBmb3IKKytvdXRnb2luZyBhcmd1bWVudHMgd2lsbCBiZSBjb21wdXRlZCBhbmQgcGxhY2VkIGludG8gdGhlIHZhcmlhYmxlCisrY3VycmVudF9mdW5jdGlvbl9vdXRnb2luZ19hcmdzX3NpemUuICBObyBzcGFjZSB3aWxsIGJlIHB1c2hlZAorK29udG8gdGhlIHN0YWNrIGZvciBlYWNoIGNhbGw7IGluc3RlYWQsIHRoZSBmdW5jdGlvbiBwcm9sb2d1ZSBzaG91bGQKKytpbmNyZWFzZSB0aGUgc3RhY2sgZnJhbWUgc2l6ZSBieSB0aGlzIGFtb3VudC4KKysKKytTZXR0aW5nIGJvdGggUFVTSF9BUkdTIGFuZCBBQ0NVTVVMQVRFX09VVEdPSU5HX0FSR1MgaXMgbm90IHByb3Blci4KKysqLworKyNkZWZpbmUgQUNDVU1VTEFURV9PVVRHT0lOR19BUkdTIDAKKysKKysKKysKKysKKysvKgorK0EgQyBleHByZXNzaW9uIHRoYXQgc2hvdWxkIGluZGljYXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgaXRzIG93bgorK2FyZ3VtZW50cyB0aGF0IGEgZnVuY3Rpb24gcG9wcyBvbiByZXR1cm5pbmcsIG9yIDAgaWYgdGhlCisrZnVuY3Rpb24gcG9wcyBubyBhcmd1bWVudHMgYW5kIHRoZSBjYWxsZXIgbXVzdCB0aGVyZWZvcmUgcG9wIHRoZW0gYWxsCisrYWZ0ZXIgdGhlIGZ1bmN0aW9uIHJldHVybnMuCisrCisrRlVOREVDTCBpcyBhIEMgdmFyaWFibGUgd2hvc2UgdmFsdWUgaXMgYSB0cmVlIG5vZGUgdGhhdCBkZXNjcmliZXMKKyt0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24uICBOb3JtYWxseSBpdCBpcyBhIG5vZGUgb2YgdHlwZQorK0ZVTkNUSU9OX0RFQ0wgdGhhdCBkZXNjcmliZXMgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBmdW5jdGlvbi4KKytGcm9tIHRoaXMgeW91IGNhbiBvYnRhaW4gdGhlIERFQ0xfQVRUUklCVVRFUyBvZiB0aGUgZnVuY3Rpb24uCisrCisrRlVOVFlQRSBpcyBhIEMgdmFyaWFibGUgd2hvc2UgdmFsdWUgaXMgYSB0cmVlIG5vZGUgdGhhdAorK2Rlc2NyaWJlcyB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24uICBOb3JtYWxseSBpdCBpcyBhIG5vZGUgb2YgdHlwZQorK0ZVTkNUSU9OX1RZUEUgdGhhdCBkZXNjcmliZXMgdGhlIGRhdGEgdHlwZSBvZiB0aGUgZnVuY3Rpb24uCisrRnJvbSB0aGlzIGl0IGlzIHBvc3NpYmxlIHRvIG9idGFpbiB0aGUgZGF0YSB0eXBlcyBvZiB0aGUgdmFsdWUgYW5kCisrYXJndW1lbnRzIChpZiBrbm93bikuCisrCisrV2hlbiBhIGNhbGwgdG8gYSBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGJlaW5nIGNvbnNpZGVyZWQsIEZVTkRFQ0wKKyt3aWxsIGNvbnRhaW4gYW4gaWRlbnRpZmllciBub2RlIGZvciB0aGUgbGlicmFyeSBmdW5jdGlvbi4gIFRodXMsIGlmCisreW91IG5lZWQgdG8gZGlzdGluZ3Vpc2ggYW1vbmcgdmFyaW91cyBsaWJyYXJ5IGZ1bmN0aW9ucywgeW91IGNhbiBkbyBzbworK2J5IHRoZWlyIG5hbWVzLiAgTm90ZSB0aGF0IGBgbGlicmFyeSBmdW5jdGlvbicnIGluIHRoaXMgY29udGV4dCBtZWFucworK2EgZnVuY3Rpb24gdXNlZCB0byBwZXJmb3JtIGFyaXRobWV0aWMsIHdob3NlIG5hbWUgaXMga25vd24gc3BlY2lhbGx5CisraW4gdGhlIGNvbXBpbGVyIGFuZCB3YXMgbm90IG1lbnRpb25lZCBpbiB0aGUgQyBjb2RlIGJlaW5nIGNvbXBpbGVkLgorKworK1NUQUNLX1NJWkUgaXMgdGhlIG51bWJlciBvZiBieXRlcyBvZiBhcmd1bWVudHMgcGFzc2VkIG9uIHRoZQorK3N0YWNrLiAgSWYgYSB2YXJpYWJsZSBudW1iZXIgb2YgYnl0ZXMgaXMgcGFzc2VkLCBpdCBpcyB6ZXJvLCBhbmQKKythcmd1bWVudCBwb3BwaW5nIHdpbGwgYWx3YXlzIGJlIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbi4KKysKKytPbiB0aGUgVkFYLCBhbGwgZnVuY3Rpb25zIGFsd2F5cyBwb3AgdGhlaXIgYXJndW1lbnRzLCBzbyB0aGUgZGVmaW5pdGlvbgorK29mIHRoaXMgbWFjcm8gaXMgU1RBQ0tfU0laRS4gIE9uIHRoZSA2ODAwMCwgdXNpbmcgdGhlIHN0YW5kYXJkCisrY2FsbGluZyBjb252ZW50aW9uLCBubyBmdW5jdGlvbnMgcG9wIHRoZWlyIGFyZ3VtZW50cywgc28gdGhlIHZhbHVlIG9mCisrdGhlIG1hY3JvIGlzIGFsd2F5cyAwIGluIHRoaXMgY2FzZS4gIEJ1dCBhbiBhbHRlcm5hdGl2ZSBjYWxsaW5nCisrY29udmVudGlvbiBpcyBhdmFpbGFibGUgaW4gd2hpY2ggZnVuY3Rpb25zIHRoYXQgdGFrZSBhIGZpeGVkIG51bWJlciBvZgorK2FyZ3VtZW50cyBwb3AgdGhlbSBidXQgb3RoZXIgZnVuY3Rpb25zIChzdWNoIGFzIHByaW50ZikgcG9wCisrbm90aGluZyAodGhlIGNhbGxlciBwb3BzIGFsbCkuICBXaGVuIHRoaXMgY29udmVudGlvbiBpcyBpbiB1c2UsCisrRlVOVFlQRSBpcyBleGFtaW5lZCB0byBkZXRlcm1pbmUgd2hldGhlciBhIGZ1bmN0aW9uIHRha2VzIGEgZml4ZWQKKytudW1iZXIgb2YgYXJndW1lbnRzLgorKyovCisrI2RlZmluZSBSRVRVUk5fUE9QU19BUkdTKEZVTkRFQ0wsIEZVTlRZUEUsIFNUQUNLX1NJWkUpIDAKKysKKysKKysvKlJldHVybiB0cnVlIGlmIHRoaXMgZnVuY3Rpb24gY2FuIHdlIHVzZSBhIHNpbmdsZSByZXR1cm4gaW5zdHJ1Y3Rpb24qLworKyNkZWZpbmUgVVNFX1JFVFVSTl9JTlNOKElTQ09ORCkgYXZyMzJfdXNlX3JldHVybl9pbnNuKElTQ09ORCkKKysKKysvKgorK0EgQyBleHByZXNzaW9uIHRoYXQgc2hvdWxkIGluZGljYXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgYSBjYWxsIHNlcXVlbmNlCisrcG9wcyBvZmYgdGhlIHN0YWNrLiAgSXQgaXMgYWRkZWQgdG8gdGhlIHZhbHVlIG9mIFJFVFVSTl9QT1BTX0FSR1MKKyt3aGVuIGNvbXBpbGluZyBhIGZ1bmN0aW9uIGNhbGwuCisrCisrQ1VNIGlzIHRoZSB2YXJpYWJsZSBpbiB3aGljaCBhbGwgYXJndW1lbnRzIHRvIHRoZSBjYWxsZWQgZnVuY3Rpb24KKytoYXZlIGJlZW4gYWNjdW11bGF0ZWQuCisrCisrT24gY2VydGFpbiBhcmNoaXRlY3R1cmVzLCBzdWNoIGFzIHRoZSBTSDUsIGEgY2FsbCB0cmFtcG9saW5lIGlzIHVzZWQKKyt0aGF0IHBvcHMgY2VydGFpbiByZWdpc3RlcnMgb2ZmIHRoZSBzdGFjaywgZGVwZW5kaW5nIG9uIHRoZSBhcmd1bWVudHMKKyt0aGF0IGhhdmUgYmVlbiBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLiAgU2luY2UgdGhpcyBpcyBhIHByb3BlcnR5IG9mIHRoZQorK2NhbGwgc2l0ZSwgbm90IG9mIHRoZSBjYWxsZWQgZnVuY3Rpb24sIFJFVFVSTl9QT1BTX0FSR1MgaXMgbm90CisrYXBwcm9wcmlhdGUuCisrKi8KKysjZGVmaW5lIENBTExfUE9QU19BUkdTKENVTSkgMAorKworKy8qIFBhc3NpbmcgQXJndW1lbnRzIGluIFJlZ2lzdGVycyAqLworKworKy8qCisrQSBDIGV4cHJlc3Npb24gdGhhdCBjb250cm9scyB3aGV0aGVyIGEgZnVuY3Rpb24gYXJndW1lbnQgaXMgcGFzc2VkCisraW4gYSByZWdpc3RlciwgYW5kIHdoaWNoIHJlZ2lzdGVyLgorKworK1RoZSBhcmd1bWVudHMgYXJlIENVTSwgd2hpY2ggc3VtbWFyaXplcyBhbGwgdGhlIHByZXZpb3VzCisrYXJndW1lbnRzOyBNT0RFLCB0aGUgbWFjaGluZSBtb2RlIG9mIHRoZSBhcmd1bWVudDsgVFlQRSwKKyt0aGUgZGF0YSB0eXBlIG9mIHRoZSBhcmd1bWVudCBhcyBhIHRyZWUgbm9kZSBvciAwIGlmIHRoYXQgaXMgbm90IGtub3duCisrKHdoaWNoIGhhcHBlbnMgZm9yIEMgc3VwcG9ydCBsaWJyYXJ5IGZ1bmN0aW9ucyk7IGFuZCBOQU1FRCwKKyt3aGljaCBpcyAxIGZvciBhbiBvcmRpbmFyeSBhcmd1bWVudCBhbmQgMCBmb3IgbmFtZWxlc3MgYXJndW1lbnRzIHRoYXQKKytjb3JyZXNwb25kIHRvICcuLi4nIGluIHRoZSBjYWxsZWQgZnVuY3Rpb24ncyBwcm90b3R5cGUuCisrVFlQRSBjYW4gYmUgYW4gaW5jb21wbGV0ZSB0eXBlIGlmIGEgc3ludGF4IGVycm9yIGhhcyBwcmV2aW91c2x5Cisrb2NjdXJyZWQuCisrCisrVGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGlzIHVzdWFsbHkgZWl0aGVyIGEgcmVnIFJUWCBmb3IgdGhlCisraGFyZCByZWdpc3RlciBpbiB3aGljaCB0byBwYXNzIHRoZSBhcmd1bWVudCwgb3IgemVybyB0byBwYXNzIHRoZQorK2FyZ3VtZW50IG9uIHRoZSBzdGFjay4KKysKKytGb3IgbWFjaGluZXMgbGlrZSB0aGUgVkFYIGFuZCA2ODAwMCwgd2hlcmUgbm9ybWFsbHkgYWxsIGFyZ3VtZW50cyBhcmUKKytwdXNoZWQsIHplcm8gc3VmZmljZXMgYXMgYSBkZWZpbml0aW9uLgorKworK1RoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBjYW4gYWxzbyBiZSBhIHBhcmFsbGVsIFJUWC4gIFRoaXMgaXMKKyt1c2VkIHdoZW4gYW4gYXJndW1lbnQgaXMgcGFzc2VkIGluIG11bHRpcGxlIGxvY2F0aW9ucy4gIFRoZSBtb2RlIG9mIHRoZQorK29mIHRoZSBwYXJhbGxlbCBzaG91bGQgYmUgdGhlIG1vZGUgb2YgdGhlIGVudGlyZSBhcmd1bWVudC4gIFRoZQorK3BhcmFsbGVsIGhvbGRzIGFueSBudW1iZXIgb2YgZXhwcl9saXN0IHBhaXJzOyBlYWNoIG9uZQorK2Rlc2NyaWJlcyB3aGVyZSBwYXJ0IG9mIHRoZSBhcmd1bWVudCBpcyBwYXNzZWQuICBJbiBlYWNoCisrZXhwcl9saXN0IHRoZSBmaXJzdCBvcGVyYW5kIG11c3QgYmUgYSByZWcgUlRYIGZvciB0aGUgaGFyZAorK3JlZ2lzdGVyIGluIHdoaWNoIHRvIHBhc3MgdGhpcyBwYXJ0IG9mIHRoZSBhcmd1bWVudCwgYW5kIHRoZSBtb2RlIG9mIHRoZQorK3JlZ2lzdGVyIFJUWCBpbmRpY2F0ZXMgaG93IGxhcmdlIHRoaXMgcGFydCBvZiB0aGUgYXJndW1lbnQgaXMuICBUaGUKKytzZWNvbmQgb3BlcmFuZCBvZiB0aGUgZXhwcl9saXN0IGlzIGEgY29uc3RfaW50IHdoaWNoIGdpdmVzCisrdGhlIG9mZnNldCBpbiBieXRlcyBpbnRvIHRoZSBlbnRpcmUgYXJndW1lbnQgb2Ygd2hlcmUgdGhpcyBwYXJ0IHN0YXJ0cy4KKytBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRoZSBmaXJzdCBleHByX2xpc3QgaW4gdGhlIHBhcmFsbGVsCisrUlRYIG1heSBoYXZlIGEgZmlyc3Qgb3BlcmFuZCBvZiB6ZXJvLiAgVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgZW50aXJlCisrYXJndW1lbnQgaXMgYWxzbyBzdG9yZWQgb24gdGhlIHN0YWNrLgorKworK1RoZSBsYXN0IHRpbWUgdGhpcyBtYWNybyBpcyBjYWxsZWQsIGl0IGlzIGNhbGxlZCB3aXRoIE1PREUgPT0gVk9JRG1vZGUsCisrYW5kIGl0cyByZXN1bHQgaXMgcGFzc2VkIHRvIHRoZSBjYWxsIG9yIGNhbGxfdmFsdWUKKytwYXR0ZXJuIGFzIG9wZXJhbmRzIDIgYW5kIDMgcmVzcGVjdGl2ZWx5LgorKworK1RoZSB1c3VhbCB3YXkgdG8gbWFrZSB0aGUgSVNPIGxpYnJhcnkgJ3N0ZGFyZy5oJyB3b3JrIG9uIGEgbWFjaGluZQorK3doZXJlIHNvbWUgYXJndW1lbnRzIGFyZSB1c3VhbGx5IHBhc3NlZCBpbiByZWdpc3RlcnMsIGlzIHRvIGNhdXNlCisrbmFtZWxlc3MgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCBvbiB0aGUgc3RhY2sgaW5zdGVhZC4gIFRoaXMgaXMgZG9uZQorK2J5IG1ha2luZyBGVU5DVElPTl9BUkcgcmV0dXJuIDAgd2hlbmV2ZXIgTkFNRUQgaXMgMC4KKysKKytZb3UgbWF5IHVzZSB0aGUgbWFjcm8gTVVTVF9QQVNTX0lOX1NUQUNLIChNT0RFLCBUWVBFKQorK2luIHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgbWFjcm8gdG8gZGV0ZXJtaW5lIGlmIHRoaXMgYXJndW1lbnQgaXMgb2YgYQorK3R5cGUgdGhhdCBtdXN0IGJlIHBhc3NlZCBpbiB0aGUgc3RhY2suICBJZiBSRUdfUEFSTV9TVEFDS19TUEFDRQorK2lzIG5vdCBkZWZpbmVkIGFuZCBGVU5DVElPTl9BUkcgcmV0dXJucyBub256ZXJvIGZvciBzdWNoIGFuCisrYXJndW1lbnQsIHRoZSBjb21waWxlciB3aWxsIGFib3J0LiAgSWYgUkVHX1BBUk1fU1RBQ0tfU1BBQ0UgaXMKKytkZWZpbmVkLCB0aGUgYXJndW1lbnQgd2lsbCBiZSBjb21wdXRlZCBpbiB0aGUgc3RhY2sgYW5kIHRoZW4gbG9hZGVkIGludG8KKythIHJlZ2lzdGVyLiAgKi8KKysKKysjZGVmaW5lIEZVTkNUSU9OX0FSRyhDVU0sIE1PREUsIFRZUEUsIE5BTUVEKSBcCisrICBhdnIzMl9mdW5jdGlvbl9hcmcoJihDVU0pLCBNT0RFLCBUWVBFLCBOQU1FRCkKKysKKysKKysKKysKKysvKgorK0EgQyB0eXBlIGZvciBkZWNsYXJpbmcgYSB2YXJpYWJsZSB0aGF0IGlzIHVzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IG9mCisrRlVOQ1RJT05fQVJHIGFuZCBvdGhlciByZWxhdGVkIHZhbHVlcy4gIEZvciBzb21lIHRhcmdldCBtYWNoaW5lcywKKyt0aGUgdHlwZSBpbnQgc3VmZmljZXMgYW5kIGNhbiBob2xkIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YKKythcmd1bWVudCBzbyBmYXIuCisrCisrVGhlcmUgaXMgbm8gbmVlZCB0byByZWNvcmQgaW4gQ1VNVUxBVElWRV9BUkdTIGFueXRoaW5nIGFib3V0IHRoZQorK2FyZ3VtZW50cyB0aGF0IGhhdmUgYmVlbiBwYXNzZWQgb24gdGhlIHN0YWNrLiAgVGhlIGNvbXBpbGVyIGhhcyBvdGhlcgorK3ZhcmlhYmxlcyB0byBrZWVwIHRyYWNrIG9mIHRoYXQuICBGb3IgdGFyZ2V0IG1hY2hpbmVzIG9uIHdoaWNoIGFsbAorK2FyZ3VtZW50cyBhcmUgcGFzc2VkIG9uIHRoZSBzdGFjaywgdGhlcmUgaXMgbm8gbmVlZCB0byBzdG9yZSBhbnl0aGluZyBpbgorK0NVTVVMQVRJVkVfQVJHUzsgaG93ZXZlciwgdGhlIGRhdGEgc3RydWN0dXJlIG11c3QgZXhpc3QgYW5kCisrc2hvdWxkIG5vdCBiZSBlbXB0eSwgc28gdXNlIGludC4KKysqLworK3R5cGVkZWYgc3RydWN0IGF2cjMyX2FyZ3MKKyt7CisrICAvKiBJbmRleCByZXByZXNlbnRpbmcgdGhlIGFyZ3VtZW50IHJlZ2lzdGVyIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGFyZ3VtZW50CisrICAgICB3aWxsIG9jY3VweSAqLworKyAgaW50IGluZGV4OworKyAgLyogQSBtYXNrIHdpdGggYml0cyByZXByZXNlbnRpbmcgdGhlIGFyZ3VtZW50IHJlZ2lzdGVyczogaWYgYSBiaXQgaXMgc2V0CisrICAgICB0aGVuIHRoaXMgcmVnaXN0ZXIgaXMgdXNlZCBmb3IgYW4gYXJndWVtbnQgKi8KKysgIGludCB1c2VkX2luZGV4OworKyAgLyogVFJVRSBpZiB0aGlzIGZ1bmN0aW9uIGhhcyBhbm9ueW1vdXMgYXJndW1lbnRzICovCisrICBpbnQgdXNlc19hbm9ueW1vdXNfYXJnczsKKysgIC8qIFRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBuYW1lZCBhcmd1bWVudHMgcHVzaGVkIG9uIHRoZSBzdGFjayAqLworKyAgaW50IHN0YWNrX3B1c2hlZF9hcmdzX3NpemU7CisrICAvKiBTZXQgdG8gdHJ1ZSBpZiB0aGlzIGZ1bmN0aW9uIG5lZWRzIGEgUmV0dXJuIFZhbHVlIFBvaW50ZXIgKi8KKysgIGludCB1c2VfcnZwOworKworK30gQ1VNVUxBVElWRV9BUkdTOworKworKworKyNkZWZpbmUgRklSU1RfQ1VNX1JFR19JTkRFWCAwCisrI2RlZmluZSBMQVNUX0NVTV9SRUdfSU5ERVggNAorKyNkZWZpbmUgR0VUX1JFR19JTkRFWChDVU0pICgoQ1VNKS0+aW5kZXgpCisrI2RlZmluZSBTRVRfUkVHX0lOREVYKENVTSwgSU5ERVgpICgoQ1VNKS0+aW5kZXggPSAoSU5ERVgpKTsKKysjZGVmaW5lIEdFVF9VU0VEX0lOREVYKENVTSwgSU5ERVgpICgoQ1VNKS0+dXNlZF9pbmRleCAmICgxIDw8IChJTkRFWCkpKQorKyNkZWZpbmUgU0VUX1VTRURfSU5ERVgoQ1VNLCBJTkRFWCkJCVwKKysgIGRvCQkJCQkJXAorKyAgICB7CQkJCQkJXAorKyAgICAgIGlmIChJTkRFWCA+PSAwKQkJCQlcCisrICAgICAgICAoQ1VNKS0+dXNlZF9pbmRleCB8PSAoMSA8PCAoSU5ERVgpKTsJXAorKyAgICB9CQkJCQkJXAorKyAgd2hpbGUgKDApCisrI2RlZmluZSBTRVRfSU5ERVhFU19VTlVTRUQoQ1VNKSAoKENVTSktPnVzZWRfaW5kZXggPSAwKQorKworKworKy8qCisrICAgQSBDIHN0YXRlbWVudCAoc2FucyBzZW1pY29sb24pIGZvciBpbml0aWFsaXppbmcgdGhlIHZhcmlhYmxlIGN1bSBmb3IgdGhlCisrICAgc3RhdGUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJndW1lbnQgbGlzdC4gVGhlIHZhcmlhYmxlIGhhcyB0eXBlCisrICAgQ1VNVUxBVElWRV9BUkdTLiBUaGUgdmFsdWUgb2YgRk5UWVBFIGlzIHRoZSB0cmVlIG5vZGUgZm9yIHRoZSBkYXRhIHR5cGUgb2YKKysgICB0aGUgZnVuY3Rpb24gd2hpY2ggd2lsbCByZWNlaXZlIHRoZSBhcmdzLCBvciAwIGlmIHRoZSBhcmdzIGFyZSB0byBhIGNvbXBpbGVyCisrICAgc3VwcG9ydCBsaWJyYXJ5IGZ1bmN0aW9uLiBGb3IgZGlyZWN0IGNhbGxzIHRoYXQgYXJlIG5vdCBsaWJjYWxscywgRk5ERUNMCisrICAgY29udGFpbiB0aGUgZGVjbGFyYXRpb24gbm9kZSBvZiB0aGUgZnVuY3Rpb24uIEZOREVDTCBpcyBhbHNvIHNldCB3aGVuCisrICAgSU5JVF9DVU1VTEFUSVZFX0FSR1MgaXMgdXNlZCB0byBmaW5kIGFyZ3VtZW50cyBmb3IgdGhlIGZ1bmN0aW9uIGJlaW5nCisrICAgY29tcGlsZWQuICBOX05BTUVEX0FSR1MgaXMgc2V0IHRvIHRoZSBudW1iZXIgb2YgbmFtZWQgYXJndW1lbnRzLCBpbmNsdWRpbmcgYQorKyAgIHN0cnVjdHVyZSByZXR1cm4gYWRkcmVzcyBpZiBpdCBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIsIHdoZW4gbWFraW5nIGEgY2FsbC4KKysgICBXaGVuIHByb2Nlc3NpbmcgaW5jb21pbmcgYXJndW1lbnRzLCBOX05BTUVEX0FSR1MgaXMgc2V0IHRvIC0xLgorKworKyAgIFdoZW4gcHJvY2Vzc2luZyBhIGNhbGwgdG8gYSBjb21waWxlciBzdXBwb3J0IGxpYnJhcnkgZnVuY3Rpb24sIExJQk5BTUUKKysgICBpZGVudGlmaWVzIHdoaWNoIG9uZS4gIEl0IGlzIGEgc3ltYm9sX3JlZiBydHggd2hpY2ggY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlCisrICAgZnVuY3Rpb24sIGFzIGEgc3RyaW5nLiBMSUJOQU1FIGlzIDAgd2hlbiBhbiBvcmRpbmFyeSBDIGZ1bmN0aW9uIGNhbGwgaXMKKysgICBiZWluZyBwcm9jZXNzZWQuIFRodXMsIGVhY2ggdGltZSB0aGlzIG1hY3JvIGlzIGNhbGxlZCwgZWl0aGVyIExJQk5BTUUgb3IKKysgICBGTlRZUEUgaXMgbm9uemVybywgYnV0IG5ldmVyIGJvdGggb2YgdGhlbSBhdCBvbmNlLgorKyovCisrI2RlZmluZSBJTklUX0NVTVVMQVRJVkVfQVJHUyhDVU0sIEZOVFlQRSwgTElCTkFNRSwgRk5ERUNMLCBOX05BTUVEX0FSR1MpIFwKKysgIGF2cjMyX2luaXRfY3VtdWxhdGl2ZV9hcmdzKCYoQ1VNKSwgRk5UWVBFLCBMSUJOQU1FLCBGTkRFQ0wpCisrCisrCisrLyoKKytBIEMgc3RhdGVtZW50IChzYW5zIHNlbWljb2xvbikgdG8gdXBkYXRlIHRoZSBzdW1tYXJpemVyIHZhcmlhYmxlCisrQ1VNIHRvIGFkdmFuY2UgcGFzdCBhbiBhcmd1bWVudCBpbiB0aGUgYXJndW1lbnQgbGlzdC4gIFRoZQorK3ZhbHVlcyBNT0RFLCBUWVBFIGFuZCBOQU1FRCBkZXNjcmliZSB0aGF0IGFyZ3VtZW50LgorK09uY2UgdGhpcyBpcyBkb25lLCB0aGUgdmFyaWFibGUgQ1VNIGlzIHN1aXRhYmxlIGZvciBhbmFseXppbmcKKyt0aGUgZm9sbG93aW5nIGFyZ3VtZW50IHdpdGggRlVOQ1RJT05fQVJHLCBldGMuCisrCisrVGhpcyBtYWNybyBuZWVkIG5vdCBkbyBhbnl0aGluZyBpZiB0aGUgYXJndW1lbnQgaW4gcXVlc3Rpb24gd2FzIHBhc3NlZAorK29uIHRoZSBzdGFjay4gIFRoZSBjb21waWxlciBrbm93cyBob3cgdG8gdHJhY2sgdGhlIGFtb3VudCBvZiBzdGFjayBzcGFjZQorK3VzZWQgZm9yIGFyZ3VtZW50cyB3aXRob3V0IGFueSBzcGVjaWFsIGhlbHAuCisrKi8KKysjZGVmaW5lIEZVTkNUSU9OX0FSR19BRFZBTkNFKENVTSwgTU9ERSwgVFlQRSwgTkFNRUQpIFwKKysgIGF2cjMyX2Z1bmN0aW9uX2FyZ19hZHZhbmNlKCYoQ1VNKSwgTU9ERSwgVFlQRSwgTkFNRUQpCisrCisrLyoKKytJZiBkZWZpbmVkLCBhIEMgZXhwcmVzc2lvbiB3aGljaCBkZXRlcm1pbmVzIHdoZXRoZXIsIGFuZCBpbiB3aGljaCBkaXJlY3Rpb24sCisrdG8gcGFkIG91dCBhbiBhcmd1bWVudCB3aXRoIGV4dHJhIHNwYWNlLiAgVGhlIHZhbHVlIHNob3VsZCBiZSBvZiB0eXBlCisrZW51bSBkaXJlY3Rpb246IGVpdGhlciAndXB3YXJkJyB0byBwYWQgYWJvdmUgdGhlIGFyZ3VtZW50LAorKydkb3dud2FyZCcgdG8gcGFkIGJlbG93LCBvciAnbm9uZScgdG8gaW5oaWJpdCBwYWRkaW5nLgorKworK1RoZSBhbW91bnQgb2YgcGFkZGluZyBpcyBhbHdheXMganVzdCBlbm91Z2ggdG8gcmVhY2ggdGhlIG5leHQKKyttdWx0aXBsZSBvZiBGVU5DVElPTl9BUkdfQk9VTkRBUlk7IHRoaXMgbWFjcm8gZG9lcyBub3QgY29udHJvbAorK2l0LgorKworK1RoaXMgbWFjcm8gaGFzIGEgZGVmYXVsdCBkZWZpbml0aW9uIHdoaWNoIGlzIHJpZ2h0IGZvciBtb3N0IHN5c3RlbXMuCisrRm9yIGxpdHRsZS1lbmRpYW4gbWFjaGluZXMsIHRoZSBkZWZhdWx0IGlzIHRvIHBhZCB1cHdhcmQuICBGb3IKKytiaWctZW5kaWFuIG1hY2hpbmVzLCB0aGUgZGVmYXVsdCBpcyB0byBwYWQgZG93bndhcmQgZm9yIGFuIGFyZ3VtZW50IG9mCisrY29uc3RhbnQgc2l6ZSBzaG9ydGVyIHRoYW4gYW4gaW50LCBhbmQgdXB3YXJkIG90aGVyd2lzZS4KKysqLworKyNkZWZpbmUgRlVOQ1RJT05fQVJHX1BBRERJTkcoTU9ERSwgVFlQRSkgXAorKyAgYXZyMzJfZnVuY3Rpb25fYXJnX3BhZGRpbmcoTU9ERSwgVFlQRSkKKysKKysvKgorKyAgU3BlY2lmeSBwYWRkaW5nIGZvciB0aGUgbGFzdCBlbGVtZW50IG9mIGEgYmxvY2sgbW92ZSBiZXR3ZWVuIHJlZ2lzdGVycworKyAgYW5kIG1lbW9yeS4gRmlyc3QgaXMgbm9uemVybyBpZiB0aGlzIGlzIHRoZSBvbmx5IGVsZW1lbnQuIERlZmluaW5nCisrICB0aGlzIG1hY3JvIGFsbG93cyBiZXR0ZXIgY29udHJvbCBvZiByZWdpc3RlciBmdW5jdGlvbiBwYXJhbWV0ZXJzIG9uCisrICBiaWctZW5kaWFuIG1hY2hpbmVzLCB3aXRob3V0IHVzaW5nIFBBUkFMTEVMIHJ0bC4gSW4gcGFydGljdWxhciwKKysgIE1VU1RfUEFTU19JTl9TVEFDSyBuZWVkIG5vdCB0ZXN0IHBhZGRpbmcgYW5kIG1vZGUgb2YgdHlwZXMgaW4gcmVnaXN0ZXJzLAorKyAgYXMgdGhlcmUgaXMgbm8gbG9uZ2VyIGEgIndyb25nIiBwYXJ0IG9mIGEgcmVnaXN0ZXI7IEZvciBleGFtcGxlLCBhIHRocmVlCisrICBieXRlIGFnZ3JlZ2F0ZSBtYXkgYmUgcGFzc2VkIGluIHRoZSBoaWdoIHBhcnQgb2YgYSByZWdpc3RlciBpZiBzbyByZXF1aXJlZC4KKysqLworKyNkZWZpbmUgQkxPQ0tfUkVHX1BBRERJTkcoTU9ERSwgVFlQRSwgRklSU1QpIFwKKysgIGF2cjMyX2Z1bmN0aW9uX2FyZ19wYWRkaW5nKE1PREUsIFRZUEUpCisrCisrLyoKKytJZiBkZWZpbmVkLCBhIEMgZXhwcmVzc2lvbiB3aGljaCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGRlZmF1bHQKKytpbXBsZW1lbnRhdGlvbiBvZiB2YV9hcmcgd2lsbCBhdHRlbXB0IHRvIHBhZCBkb3duIGJlZm9yZSByZWFkaW5nIHRoZQorK25leHQgYXJndW1lbnQsIGlmIHRoYXQgYXJndW1lbnQgaXMgc21hbGxlciB0aGFuIGl0cyBhbGlnbmVkIHNwYWNlIGFzCisrY29udHJvbGxlZCBieSBQQVJNX0JPVU5EQVJZLiAgSWYgdGhpcyBtYWNybyBpcyBub3QgZGVmaW5lZCwgYWxsIHN1Y2gKKythcmd1bWVudHMgYXJlIHBhZGRlZCBkb3duIGlmIEJZVEVTX0JJR19FTkRJQU4gaXMgdHJ1ZS4KKysqLworKyNkZWZpbmUgUEFEX1ZBUkFSR1NfRE9XTiBcCisrICAoRlVOQ1RJT05fQVJHX1BBRERJTkcgKFRZUEVfTU9ERSAodHlwZSksIHR5cGUpID09IGRvd253YXJkKQorKworKworKy8qCisrQSBDIGV4cHJlc3Npb24gdGhhdCBpcyBub256ZXJvIGlmIFJFR05PIGlzIHRoZSBudW1iZXIgb2YgYSBoYXJkCisrcmVnaXN0ZXIgaW4gd2hpY2ggZnVuY3Rpb24gYXJndW1lbnRzIGFyZSBzb21ldGltZXMgcGFzc2VkLiAgVGhpcyBkb2VzCisrbm90IGluY2x1ZGUgaW1wbGljaXQgYXJndW1lbnRzIHN1Y2ggYXMgdGhlIHN0YXRpYyBjaGFpbiBhbmQKKyt0aGUgc3RydWN0dXJlLXZhbHVlIGFkZHJlc3MuICBPbiBtYW55IG1hY2hpbmVzLCBubyByZWdpc3RlcnMgY2FuIGJlCisrdXNlZCBmb3IgdGhpcyBwdXJwb3NlIHNpbmNlIGFsbCBmdW5jdGlvbiBhcmd1bWVudHMgYXJlIHB1c2hlZCBvbiB0aGUKKytzdGFjay4KKysqLworKy8qCisrICBVc2UgcjggLSByMTIgZm9yIGZ1bmN0aW9uIGFyZ3VtZW50cy4KKysqLworKyNkZWZpbmUgRlVOQ1RJT05fQVJHX1JFR05PX1AoUkVHTk8pIFwKKysgIChSRUdOTyA+PSAzICYmIFJFR05PIDw9IDcpCisrCisrLyogTnVtYmVyIG9mIHJlZ2lzdGVycyB1c2VkIGZvciBwYXNzaW5nIGZ1bmN0aW9uIGFyZ3VtZW50cyAqLworKyNkZWZpbmUgTlVNX0FSR19SRUdTIDUKKysKKysvKgorK0lmIGRlZmluZWQsIHRoZSBvcmRlciBpbiB3aGljaCBhcmd1bWVudHMgYXJlIGxvYWRlZCBpbnRvIHRoZWlyCisrcmVzcGVjdGl2ZSBhcmd1bWVudCByZWdpc3RlcnMgaXMgcmV2ZXJzZWQgc28gdGhhdCB0aGUgbGFzdAorK2FyZ3VtZW50IGlzIGxvYWRlZCBmaXJzdC4gIFRoaXMgbWFjcm8gb25seSBhZmZlY3RzIGFyZ3VtZW50cworK3Bhc3NlZCBpbiByZWdpc3RlcnMuCisrKi8KKysvKiAjZGVmaW5lIExPQURfQVJHU19SRVZFUlNFRCAqLworKworKy8qKiBIb3cgU2NhbGFyIEZ1bmN0aW9uIFZhbHVlcyBBcmUgUmV0dXJuZWQgKiovCisrCisrLyogQVZSMzIgaXMgdXNpbmcgcjEyIGFzIHJldHVybiByZWdpc3Rlci4gKi8KKysjZGVmaW5lIFJFVF9SRUdJU1RFUiAoMTUgLSAxMikKKysKKysKKysvKgorK0EgQyBleHByZXNzaW9uIHRvIGNyZWF0ZSBhbiBSVFggcmVwcmVzZW50aW5nIHRoZSBwbGFjZSB3aGVyZSBhIGxpYnJhcnkKKytmdW5jdGlvbiByZXR1cm5zIGEgdmFsdWUgb2YgbW9kZSBNT0RFLiAgSWYgdGhlIHByZWNpc2UgZnVuY3Rpb24KKytiZWluZyBjYWxsZWQgaXMga25vd24sIEZVTkMgaXMgYSB0cmVlIG5vZGUKKysoRlVOQ1RJT05fREVDTCkgZm9yIGl0OyBvdGhlcndpc2UsIGZ1bmMgaXMgYSBudWxsCisrcG9pbnRlci4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIGEgZGlmZmVyZW50IHZhbHVlLXJldHVybmluZworK2NvbnZlbnRpb24gZm9yIHNwZWNpZmljIGZ1bmN0aW9ucyB3aGVuIGFsbCB0aGVpciBjYWxscyBhcmUKKytrbm93bi4KKysKKytOb3RlIHRoYXQgImxpYnJhcnkgZnVuY3Rpb24iIGluIHRoaXMgY29udGV4dCBtZWFucyBhIGNvbXBpbGVyCisrc3VwcG9ydCByb3V0aW5lLCB1c2VkIHRvIHBlcmZvcm0gYXJpdGhtZXRpYywgd2hvc2UgbmFtZSBpcyBrbm93bgorK3NwZWNpYWxseSBieSB0aGUgY29tcGlsZXIgYW5kIHdhcyBub3QgbWVudGlvbmVkIGluIHRoZSBDIGNvZGUgYmVpbmcKKytjb21waWxlZC4KKysKKytUaGUgZGVmaW5pdGlvbiBvZiBMSUJSQVJZX1ZBTFVFIG5lZWQgbm90IGJlIGNvbmNlcm5lZCBhZ2dyZWdhdGUKKytkYXRhIHR5cGVzLCBiZWNhdXNlIG5vbmUgb2YgdGhlIGxpYnJhcnkgZnVuY3Rpb25zIHJldHVybnMgc3VjaCB0eXBlcy4KKysqLworKyNkZWZpbmUgTElCQ0FMTF9WQUxVRShNT0RFKSBhdnIzMl9saWJjYWxsX3ZhbHVlKE1PREUpCisrCisrLyoKKytBIEMgZXhwcmVzc2lvbiB0aGF0IGlzIG5vbnplcm8gaWYgUkVHTk8gaXMgdGhlIG51bWJlciBvZiBhIGhhcmQKKytyZWdpc3RlciBpbiB3aGljaCB0aGUgdmFsdWVzIG9mIGNhbGxlZCBmdW5jdGlvbiBtYXkgY29tZSBiYWNrLgorKworK0EgcmVnaXN0ZXIgd2hvc2UgdXNlIGZvciByZXR1cm5pbmcgdmFsdWVzIGlzIGxpbWl0ZWQgdG8gc2VydmluZyBhcyB0aGUKKytzZWNvbmQgb2YgYSBwYWlyIChmb3IgYSB2YWx1ZSBvZiB0eXBlIGRvdWJsZSwgc2F5KSBuZWVkIG5vdCBiZQorK3JlY29nbml6ZWQgYnkgdGhpcyBtYWNyby4gIFNvIGZvciBtb3N0IG1hY2hpbmVzLCB0aGlzIGRlZmluaXRpb24KKytzdWZmaWNlczoKKysgICNkZWZpbmUgRlVOQ1RJT05fVkFMVUVfUkVHTk9fUChOKSAoKE4pID09IDApCisrCisrSWYgdGhlIG1hY2hpbmUgaGFzIHJlZ2lzdGVyIHdpbmRvd3MsIHNvIHRoYXQgdGhlIGNhbGxlciBhbmQgdGhlIGNhbGxlZAorK2Z1bmN0aW9uIHVzZSBkaWZmZXJlbnQgcmVnaXN0ZXJzIGZvciB0aGUgcmV0dXJuIHZhbHVlLCB0aGlzIG1hY3JvCisrc2hvdWxkIHJlY29nbml6ZSBvbmx5IHRoZSBjYWxsZXIncyByZWdpc3RlciBudW1iZXJzLgorKyovCisrLyoKKysgIFdoZW4gcmV0dXJuaW5nIGEgdmFsdWUgb2YgbW9kZSBESW1vZGUsIHIxMTpyMTAgaXMgdXNlZCwgZWxzZSByMTIgaXMgdXNlZC4KKysqLworKyNkZWZpbmUgRlVOQ1RJT05fVkFMVUVfUkVHTk9fUChSRUdOTykgKChSRUdOTykgPT0gUkVUX1JFR0lTVEVSIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoUkVHTk8pID09IElOVEVSTkFMX1JFR05VTSgxMSkpCisrCisrCisrLyoqIEhvdyBMYXJnZSBWYWx1ZXMgQXJlIFJldHVybmVkICoqLworKworKworKy8qCisrRGVmaW5lIHRoaXMgbWFjcm8gdG8gYmUgMSBpZiBhbGwgc3RydWN0dXJlIGFuZCB1bmlvbiByZXR1cm4gdmFsdWVzIG11c3QgYmUKKytpbiBtZW1vcnkuICBTaW5jZSB0aGlzIHJlc3VsdHMgaW4gc2xvd2VyIGNvZGUsIHRoaXMgc2hvdWxkIGJlIGRlZmluZWQKKytvbmx5IGlmIG5lZWRlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGNvbXBpbGVycyBvciB3aXRoIGFuIEFCSS4KKytJZiB5b3UgZGVmaW5lIHRoaXMgbWFjcm8gdG8gYmUgMCwgdGhlbiB0aGUgY29udmVudGlvbnMgdXNlZCBmb3Igc3RydWN0dXJlCisrYW5kIHVuaW9uIHJldHVybiB2YWx1ZXMgYXJlIGRlY2lkZWQgYnkgdGhlIFJFVFVSTl9JTl9NRU1PUlkgbWFjcm8uCisrCisrSWYgbm90IGRlZmluZWQsIHRoaXMgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIDEuCisrKi8KKysjZGVmaW5lIERFRkFVTFRfUENDX1NUUlVDVF9SRVRVUk4gMAorKworKworKworKworKy8qKiBHZW5lcmF0aW5nIENvZGUgZm9yIFByb2ZpbGluZyAqKi8KKysKKysvKgorK0EgQyBzdGF0ZW1lbnQgb3IgY29tcG91bmQgc3RhdGVtZW50IHRvIG91dHB1dCB0byBGSUxFIHNvbWUKKythc3NlbWJsZXIgY29kZSB0byBjYWxsIHRoZSBwcm9maWxpbmcgc3Vicm91dGluZSBtY291bnQuCisrCisrVGhlIGRldGFpbHMgb2YgaG93IG1jb3VudCBleHBlY3RzIHRvIGJlIGNhbGxlZCBhcmUgZGV0ZXJtaW5lZCBieQorK3lvdXIgb3BlcmF0aW5nIHN5c3RlbSBlbnZpcm9ubWVudCwgbm90IGJ5IEdDQy4gIFRvIGZpZ3VyZSB0aGVtIG91dCwKKytjb21waWxlIGEgc21hbGwgcHJvZ3JhbSBmb3IgcHJvZmlsaW5nIHVzaW5nIHRoZSBzeXN0ZW0ncyBpbnN0YWxsZWQgQworK2NvbXBpbGVyIGFuZCBsb29rIGF0IHRoZSBhc3NlbWJsZXIgY29kZSB0aGF0IHJlc3VsdHMuCisrCisrT2xkZXIgaW1wbGVtZW50YXRpb25zIG9mIG1jb3VudCBleHBlY3QgdGhlIGFkZHJlc3Mgb2YgYSBjb3VudGVyCisrdmFyaWFibGUgdG8gYmUgbG9hZGVkIGludG8gc29tZSByZWdpc3Rlci4gIFRoZSBuYW1lIG9mIHRoaXMgdmFyaWFibGUgaXMKKysnTFAnIGZvbGxvd2VkIGJ5IHRoZSBudW1iZXIgTEFCRUxOTywgc28geW91IHdvdWxkIGdlbmVyYXRlCisrdGhlIG5hbWUgdXNpbmcgJ0xQJWQnIGluIGEgZnByaW50Zi4KKysqLworKy8qIFRvRG86IGZpeG1lICovCisrI2lmbmRlZiBGVU5DVElPTl9QUk9GSUxFUgorKyNkZWZpbmUgRlVOQ1RJT05fUFJPRklMRVIoRklMRSwgTEFCRUxOTykgXAorKyAgZnByaW50ZigoRklMRSksICIvKiBwcm9maWxlciAlZCAqLyIsIChMQUJFTE5PKSkKKysjZW5kaWYKKysKKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysgKiBUcmFtcG9saW5lcyBmb3IgTmVzdGVkIEZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKysgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrLyoKKytBIEMgc3RhdGVtZW50IHRvIG91dHB1dCwgb24gdGhlIHN0cmVhbSBGSUxFLCBhc3NlbWJsZXIgY29kZSBmb3IgYQorK2Jsb2NrIG9mIGRhdGEgdGhhdCBjb250YWlucyB0aGUgY29uc3RhbnQgcGFydHMgb2YgYSB0cmFtcG9saW5lLiAgVGhpcworK2NvZGUgc2hvdWxkIG5vdCBpbmNsdWRlIGEgbGFiZWwgLSB0aGUgbGFiZWwgaXMgdGFrZW4gY2FyZSBvZgorK2F1dG9tYXRpY2FsbHkuCisrCisrSWYgeW91IGRvIG5vdCBkZWZpbmUgdGhpcyBtYWNybywgaXQgbWVhbnMgbm8gdGVtcGxhdGUgaXMgbmVlZGVkCisrZm9yIHRoZSB0YXJnZXQuICBEbyBub3QgZGVmaW5lIHRoaXMgbWFjcm8gb24gc3lzdGVtcyB3aGVyZSB0aGUgYmxvY2sgbW92ZQorK2NvZGUgdG8gY29weSB0aGUgdHJhbXBvbGluZSBpbnRvIHBsYWNlIHdvdWxkIGJlIGxhcmdlciB0aGFuIHRoZSBjb2RlCisrdG8gZ2VuZXJhdGUgaXQgb24gdGhlIHNwb3QuCisrKi8KKysvKiBUb0RvOiBjb3JyZWN0PyAqLworKyNkZWZpbmUgVFJBTVBPTElORV9URU1QTEFURShGSUxFKSBhdnIzMl90cmFtcG9saW5lX3RlbXBsYXRlKEZJTEUpOworKworKworKy8qCisrQSBDIGV4cHJlc3Npb24gZm9yIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSB0cmFtcG9saW5lLCBhcyBhbiBpbnRlZ2VyLgorKyovCisrLyogVG9EbzogZml4bWUgKi8KKysjZGVmaW5lIFRSQU1QT0xJTkVfU0laRSAweDBDCisrCisrLyoKKytBbGlnbm1lbnQgcmVxdWlyZWQgZm9yIHRyYW1wb2xpbmVzLCBpbiBiaXRzLgorKworK0lmIHlvdSBkb24ndCBkZWZpbmUgdGhpcyBtYWNybywgdGhlIHZhbHVlIG9mIEJJR0dFU1RfQUxJR05NRU5UCisraXMgdXNlZCBmb3IgYWxpZ25pbmcgdHJhbXBvbGluZXMuCisrKi8KKysjZGVmaW5lIFRSQU1QT0xJTkVfQUxJR05NRU5UIDE2CisrCisrLyoKKytBIEMgc3RhdGVtZW50IHRvIGluaXRpYWxpemUgdGhlIHZhcmlhYmxlIHBhcnRzIG9mIGEgdHJhbXBvbGluZS4KKytBRERSIGlzIGFuIFJUWCBmb3IgdGhlIGFkZHJlc3Mgb2YgdGhlIHRyYW1wb2xpbmU7IEZOQUREUiBpcworK2FuIFJUWCBmb3IgdGhlIGFkZHJlc3Mgb2YgdGhlIG5lc3RlZCBmdW5jdGlvbjsgU1RBVElDX0NIQUlOIGlzIGFuCisrUlRYIGZvciB0aGUgc3RhdGljIGNoYWluIHZhbHVlIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24KKyt3aGVuIGl0IGlzIGNhbGxlZC4KKysqLworKyNkZWZpbmUgSU5JVElBTElaRV9UUkFNUE9MSU5FKEFERFIsIEZOQUREUiwgU1RBVElDX0NIQUlOKSBcCisrICBhdnIzMl9pbml0aWFsaXplX3RyYW1wb2xpbmUoQUREUiwgRk5BRERSLCBTVEFUSUNfQ0hBSU4pCisrCisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKyAqIEltcGxpY2l0IENhbGxzIHRvIExpYnJhcnkgUm91dGluZXMKKysgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrLyogVGFpbCBjYWxsaW5nLiAgKi8KKysKKysvKiBBIEMgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byB0cnVlIGlmIGl0IGlzIG9rIHRvIHBlcmZvcm0gYSBzaWJsaW5nCisrICAgY2FsbCB0byBERUNMLiAgKi8KKysjZGVmaW5lIEZVTkNUSU9OX09LX0ZPUl9TSUJDQUxMKERFQ0wpIDAKKysKKysjZGVmaW5lIE9WRVJSSURFX09QVElPTlMgIGF2cjMyX292ZXJyaWRlX29wdGlvbnMgKCkKKysKKysjZGVmaW5lIE9QVElNSVpBVElPTl9PUFRJT05TKExFVkVMLCBTSVpFKSBhdnIzMl9vcHRpbWl6YXRpb25fb3B0aW9ucyAoTEVWRUwsIFNJWkUpCisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKyAqIEFkZHJlc3NpbmcgTW9kZXMKKysgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrLyoKKytBIEMgZXhwcmVzc2lvbiB0aGF0IGlzIG5vbnplcm8gaWYgdGhlIG1hY2hpbmUgc3VwcG9ydHMgcHJlLWluY3JlbWVudCwKKytwcmUtZGVjcmVtZW50LCBwb3N0LWluY3JlbWVudCwgb3IgcG9zdC1kZWNyZW1lbnQgYWRkcmVzc2luZyByZXNwZWN0aXZlbHkuCisrKi8KKysvKgorKyAgQVZSMzIgc3VwcG9ydHMgUnArKyBhbmQgLS1ScAorKyovCisrI2RlZmluZSBIQVZFX1BSRV9JTkNSRU1FTlQgMAorKyNkZWZpbmUgSEFWRV9QUkVfREVDUkVNRU5UIDEKKysjZGVmaW5lIEhBVkVfUE9TVF9JTkNSRU1FTlQgMQorKyNkZWZpbmUgSEFWRV9QT1NUX0RFQ1JFTUVOVCAwCisrCisrLyoKKytBIEMgZXhwcmVzc2lvbiB0aGF0IGlzIG5vbnplcm8gaWYgdGhlIG1hY2hpbmUgc3VwcG9ydHMgcHJlLSBvcgorK3Bvc3QtYWRkcmVzcyBzaWRlLWVmZmVjdCBnZW5lcmF0aW9uIGludm9sdmluZyBjb25zdGFudHMgb3RoZXIgdGhhbgorK3RoZSBzaXplIG9mIHRoZSBtZW1vcnkgb3BlcmFuZC4KKysqLworKyNkZWZpbmUgSEFWRV9QUkVfTU9ESUZZX0RJU1AgMAorKyNkZWZpbmUgSEFWRV9QT1NUX01PRElGWV9ESVNQIDAKKysKKysvKgorK0EgQyBleHByZXNzaW9uIHRoYXQgaXMgbm9uemVybyBpZiB0aGUgbWFjaGluZSBzdXBwb3J0cyBwcmUtIG9yCisrcG9zdC1hZGRyZXNzIHNpZGUtZWZmZWN0IGdlbmVyYXRpb24gaW52b2x2aW5nIGEgcmVnaXN0ZXIgZGlzcGxhY2VtZW50LgorKyovCisrI2RlZmluZSBIQVZFX1BSRV9NT0RJRllfUkVHIDAKKysjZGVmaW5lIEhBVkVfUE9TVF9NT0RJRllfUkVHIDAKKysKKysvKgorK0EgQyBleHByZXNzaW9uIHRoYXQgaXMgMSBpZiB0aGUgUlRYIFggaXMgYSBjb25zdGFudCB3aGljaAorK2lzIGEgdmFsaWQgYWRkcmVzcy4gIE9uIG1vc3QgbWFjaGluZXMsIHRoaXMgY2FuIGJlIGRlZmluZWQgYXMKKytDT05TVEFOVF9QIChYKSwgYnV0IGEgZmV3IG1hY2hpbmVzIGFyZSBtb3JlIHJlc3RyaWN0aXZlCisraW4gd2hpY2ggY29uc3RhbnQgYWRkcmVzc2VzIGFyZSBzdXBwb3J0ZWQuCisrCisrQ09OU1RBTlRfUCBhY2NlcHRzIGludGVnZXItdmFsdWVzIGV4cHJlc3Npb25zIHdob3NlIHZhbHVlcyBhcmUKKytub3QgZXhwbGljaXRseSBrbm93biwgc3VjaCBhcyBzeW1ib2xfcmVmLCBsYWJlbF9yZWYsIGFuZAorK2hpZ2ggZXhwcmVzc2lvbnMgYW5kIGNvbnN0IGFyaXRobWV0aWMgZXhwcmVzc2lvbnMsIGluCisrYWRkaXRpb24gdG8gY29uc3RfaW50IGFuZCBjb25zdF9kb3VibGUgZXhwcmVzc2lvbnMuCisrKi8KKysjZGVmaW5lIENPTlNUQU5UX0FERFJFU1NfUChYKSBDT05TVEFOVF9QKFgpCisrCisrLyoKKytBIG51bWJlciwgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlZ2lzdGVycyB0aGF0IGNhbiBhcHBlYXIgaW4gYSB2YWxpZAorK21lbW9yeSBhZGRyZXNzLiAgTm90ZSB0aGF0IGl0IGlzIHVwIHRvIHlvdSB0byBzcGVjaWZ5IGEgdmFsdWUgZXF1YWwgdG8KKyt0aGUgbWF4aW11bSBudW1iZXIgdGhhdCBHT19JRl9MRUdJVElNQVRFX0FERFJFU1Mgd291bGQgZXZlcgorK2FjY2VwdC4KKysqLworKyNkZWZpbmUgTUFYX1JFR1NfUEVSX0FERFJFU1MgMgorKworKy8qCisrQSBDIGNvbXBvdW5kIHN0YXRlbWVudCB3aXRoIGEgY29uZGl0aW9uYWwgZ290byBMQUJFTDsKKytleGVjdXRlZCBpZiBYIChhbiBSVFgpIGlzIGEgbGVnaXRpbWF0ZSBtZW1vcnkgYWRkcmVzcyBvbiB0aGUKKyt0YXJnZXQgbWFjaGluZSBmb3IgYSBtZW1vcnkgb3BlcmFuZCBvZiBtb2RlIE1PREUuCisrCisrSXQgdXN1YWxseSBwYXlzIHRvIGRlZmluZSBzZXZlcmFsIHNpbXBsZXIgbWFjcm9zIHRvIHNlcnZlIGFzCisrc3Vicm91dGluZXMgZm9yIHRoaXMgb25lLiAgT3RoZXJ3aXNlIGl0IG1heSBiZSB0b28gY29tcGxpY2F0ZWQgdG8KKyt1bmRlcnN0YW5kLgorKworK1RoaXMgbWFjcm8gbXVzdCBleGlzdCBpbiB0d28gdmFyaWFudHM6IGEgc3RyaWN0IHZhcmlhbnQgYW5kIGEKKytub24tc3RyaWN0IG9uZS4gIFRoZSBzdHJpY3QgdmFyaWFudCBpcyB1c2VkIGluIHRoZSByZWxvYWQgcGFzcy4gIEl0CisrbXVzdCBiZSBkZWZpbmVkIHNvIHRoYXQgYW55IHBzZXVkby1yZWdpc3RlciB0aGF0IGhhcyBub3QgYmVlbgorK2FsbG9jYXRlZCBhIGhhcmQgcmVnaXN0ZXIgaXMgY29uc2lkZXJlZCBhIG1lbW9yeSByZWZlcmVuY2UuICBJbgorK2NvbnRleHRzIHdoZXJlIHNvbWUga2luZCBvZiByZWdpc3RlciBpcyByZXF1aXJlZCwgYSBwc2V1ZG8tcmVnaXN0ZXIKKyt3aXRoIG5vIGhhcmQgcmVnaXN0ZXIgbXVzdCBiZSByZWplY3RlZC4KKysKKytUaGUgbm9uLXN0cmljdCB2YXJpYW50IGlzIHVzZWQgaW4gb3RoZXIgcGFzc2VzLiAgSXQgbXVzdCBiZSBkZWZpbmVkIHRvCisrYWNjZXB0IGFsbCBwc2V1ZG8tcmVnaXN0ZXJzIGluIGV2ZXJ5IGNvbnRleHQgd2hlcmUgc29tZSBraW5kIG9mCisrcmVnaXN0ZXIgaXMgcmVxdWlyZWQuCisrCisrQ29tcGlsZXIgc291cmNlIGZpbGVzIHRoYXQgd2FudCB0byB1c2UgdGhlIHN0cmljdCB2YXJpYW50IG9mIHRoaXMKKyttYWNybyBkZWZpbmUgdGhlIG1hY3JvIFJFR19PS19TVFJJQ1QuICBZb3Ugc2hvdWxkIHVzZSBhbgorKyNpZmRlZiBSRUdfT0tfU1RSSUNUIGNvbmRpdGlvbmFsIHRvIGRlZmluZSB0aGUgc3RyaWN0IHZhcmlhbnQKKytpbiB0aGF0IGNhc2UgYW5kIHRoZSBub24tc3RyaWN0IHZhcmlhbnQgb3RoZXJ3aXNlLgorKworK1N1YnJvdXRpbmVzIHRvIGNoZWNrIGZvciBhY2NlcHRhYmxlIHJlZ2lzdGVycyBmb3IgdmFyaW91cyBwdXJwb3NlcyAob25lCisrZm9yIGJhc2UgcmVnaXN0ZXJzLCBvbmUgZm9yIGluZGV4IHJlZ2lzdGVycywgYW5kIHNvIG9uKSBhcmUgdHlwaWNhbGx5CisrYW1vbmcgdGhlIHN1YnJvdXRpbmVzIHVzZWQgdG8gZGVmaW5lIEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUy4KKytUaGVuIG9ubHkgdGhlc2Ugc3Vicm91dGluZSBtYWNyb3MgbmVlZCBoYXZlIHR3byB2YXJpYW50czsgdGhlIGhpZ2hlcgorK2xldmVscyBvZiBtYWNyb3MgbWF5IGJlIHRoZSBzYW1lIHdoZXRoZXIgc3RyaWN0IG9yIG5vdC4KKysKKytOb3JtYWxseSwgY29uc3RhbnQgYWRkcmVzc2VzIHdoaWNoIGFyZSB0aGUgc3VtIG9mIGEgc3ltYm9sX3JlZgorK2FuZCBhbiBpbnRlZ2VyIGFyZSBzdG9yZWQgaW5zaWRlIGEgY29uc3QgUlRYIHRvIG1hcmsgdGhlbSBhcworK2NvbnN0YW50LiAgVGhlcmVmb3JlLCB0aGVyZSBpcyBubyBuZWVkIHRvIHJlY29nbml6ZSBzdWNoIHN1bXMKKytzcGVjaWZpY2FsbHkgYXMgbGVnaXRpbWF0ZSBhZGRyZXNzZXMuICBOb3JtYWxseSB5b3Ugd291bGQgc2ltcGx5CisrcmVjb2duaXplIGFueSBjb25zdCBhcyBsZWdpdGltYXRlLgorKworK1VzdWFsbHkgUFJJTlRfT1BFUkFORF9BRERSRVNTIGlzIG5vdCBwcmVwYXJlZCB0byBoYW5kbGUgY29uc3RhbnQKKytzdW1zIHRoYXQgYXJlIG5vdCBtYXJrZWQgd2l0aCAgY29uc3QuICBJdCBhc3N1bWVzIHRoYXQgYSBuYWtlZAorK3BsdXMgaW5kaWNhdGVzIGluZGV4aW5nLiAgSWYgc28sIHRoZW4geW91IG11c3QgcmVqZWN0IHN1Y2gKKytuYWtlZCBjb25zdGFudCBzdW1zIGFzIGlsbGVnaXRpbWF0ZSBhZGRyZXNzZXMsIHNvIHRoYXQgbm9uZSBvZiB0aGVtIHdpbGwKKytiZSBnaXZlbiB0byBQUklOVF9PUEVSQU5EX0FERFJFU1MuCisrCisrT24gc29tZSBtYWNoaW5lcywgd2hldGhlciBhIHN5bWJvbGljIGFkZHJlc3MgaXMgbGVnaXRpbWF0ZSBkZXBlbmRzIG9uCisrdGhlIHNlY3Rpb24gdGhhdCB0aGUgYWRkcmVzcyByZWZlcnMgdG8uICBPbiB0aGVzZSBtYWNoaW5lcywgZGVmaW5lIHRoZQorK21hY3JvIEVOQ09ERV9TRUNUSU9OX0lORk8gdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9uIGludG8gdGhlCisrc3ltYm9sX3JlZiwgYW5kIHRoZW4gY2hlY2sgZm9yIGl0IGhlcmUuICBXaGVuIHlvdSBzZWUgYQorK2NvbnN0LCB5b3Ugd2lsbCBoYXZlIHRvIGxvb2sgaW5zaWRlIGl0IHRvIGZpbmQgdGhlCisrc3ltYm9sX3JlZiBpbiBvcmRlciB0byBkZXRlcm1pbmUgdGhlIHNlY3Rpb24uCisrCisrVGhlIGJlc3Qgd2F5IHRvIG1vZGlmeSB0aGUgbmFtZSBzdHJpbmcgaXMgYnkgYWRkaW5nIHRleHQgdG8gdGhlCisrYmVnaW5uaW5nLCB3aXRoIHN1aXRhYmxlIHB1bmN0dWF0aW9uIHRvIHByZXZlbnQgYW55IGFtYmlndWl0eS4gIEFsbG9jYXRlCisrdGhlIG5ldyBuYW1lIGluIHNhdmVhYmxlX29ic3RhY2suICBZb3Ugd2lsbCBoYXZlIHRvIG1vZGlmeQorK0FTTV9PVVRQVVRfTEFCRUxSRUYgdG8gcmVtb3ZlIGFuZCBkZWNvZGUgdGhlIGFkZGVkIHRleHQgYW5kCisrb3V0cHV0IHRoZSBuYW1lIGFjY29yZGluZ2x5LCBhbmQgZGVmaW5lIFNUUklQX05BTUVfRU5DT0RJTkcgdG8KKythY2Nlc3MgdGhlIG9yaWdpbmFsIG5hbWUgc3RyaW5nLgorKworK1lvdSBjYW4gY2hlY2sgdGhlIGluZm9ybWF0aW9uIHN0b3JlZCBoZXJlIGludG8gdGhlIHN5bWJvbF9yZWYgaW4KKyt0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIG1hY3JvcyBHT19JRl9MRUdJVElNQVRFX0FERFJFU1MgYW5kCisrUFJJTlRfT1BFUkFORF9BRERSRVNTLgorKyovCisrI2lmZGVmIFJFR19PS19TVFJJQ1QKKysjICBkZWZpbmUgR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKE1PREUsIFgsIExBQkVMKQlcCisrICBkbwkJCQkJCQlcCisrICAgIHsJCQkJCQkJXAorKyAgICAgIGlmIChhdnIzMl9sZWdpdGltYXRlX2FkZHJlc3MoTU9ERSwgWCwgMSkpCQlcCisrCWdvdG8gTEFCRUw7CQkJCQlcCisrICAgIH0JCQkJCQkJXAorKyAgd2hpbGUgKDApCisrI2Vsc2UKKysjICBkZWZpbmUgR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKE1PREUsIFgsIExBQkVMKQlcCisrICBkbwkJCQkJCQlcCisrICAgIHsJCQkJCQkJXAorKyAgICAgIGlmIChhdnIzMl9sZWdpdGltYXRlX2FkZHJlc3MoTU9ERSwgWCwgMCkpCQlcCisrCWdvdG8gTEFCRUw7CQkJCQlcCisrICAgIH0JCQkJCQkJXAorKyAgd2hpbGUgKDApCisrI2VuZGlmCisrCisrCisrCisrLyoKKytBIEMgY29tcG91bmQgc3RhdGVtZW50IHRoYXQgYXR0ZW1wdHMgdG8gcmVwbGFjZSBYIHdpdGggYSB2YWxpZAorK21lbW9yeSBhZGRyZXNzIGZvciBhbiBvcGVyYW5kIG9mIG1vZGUgTU9ERS4gIHdpbiB3aWxsIGJlIGEKKytDIHN0YXRlbWVudCBsYWJlbCBlbHNld2hlcmUgaW4gdGhlIGNvZGU7IHRoZSBtYWNybyBkZWZpbml0aW9uIG1heSB1c2UKKysKKysgIEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyAoTU9ERSwgWCwgV0lOKTsKKysKKyt0byBhdm9pZCBmdXJ0aGVyIHByb2Nlc3NpbmcgaWYgdGhlIGFkZHJlc3MgaGFzIGJlY29tZSBsZWdpdGltYXRlLgorKworK1ggd2lsbCBhbHdheXMgYmUgdGhlIHJlc3VsdCBvZiBhIGNhbGwgdG8gYnJlYWtfb3V0X21lbW9yeV9yZWZzLAorK2FuZCBPTERYIHdpbGwgYmUgdGhlIG9wZXJhbmQgdGhhdCB3YXMgZ2l2ZW4gdG8gdGhhdCBmdW5jdGlvbiB0byBwcm9kdWNlCisrWC4KKysKKytUaGUgY29kZSBnZW5lcmF0ZWQgYnkgdGhpcyBtYWNybyBzaG91bGQgbm90IGFsdGVyIHRoZSBzdWJzdHJ1Y3R1cmUgb2YKKytYLiAgSWYgaXQgdHJhbnNmb3JtcyBYIGludG8gYSBtb3JlIGxlZ2l0aW1hdGUgZm9ybSwgaXQKKytzaG91bGQgYXNzaWduIFggKHdoaWNoIHdpbGwgYWx3YXlzIGJlIGEgQyB2YXJpYWJsZSkgYSBuZXcgdmFsdWUuCisrCisrSXQgaXMgbm90IG5lY2Vzc2FyeSBmb3IgdGhpcyBtYWNybyB0byBjb21lIHVwIHdpdGggYSBsZWdpdGltYXRlCisrYWRkcmVzcy4gIFRoZSBjb21waWxlciBoYXMgc3RhbmRhcmQgd2F5cyBvZiBkb2luZyBzbyBpbiBhbGwgY2FzZXMuICBJbgorK2ZhY3QsIGl0IGlzIHNhZmUgZm9yIHRoaXMgbWFjcm8gdG8gZG8gbm90aGluZy4gIEJ1dCBvZnRlbiBhCisrbWFjaGluZS1kZXBlbmRlbnQgc3RyYXRlZ3kgY2FuIGdlbmVyYXRlIGJldHRlciBjb2RlLgorKyovCisrI2RlZmluZSBMRUdJVElNSVpFX0FERFJFU1MoWCwgT0xEWCwgTU9ERSwgV0lOKQkJCVwKKysgIGRvCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCVwKKysgICAgICBpZiAoR0VUX0NPREUoWCkgPT0gUExVUwkJCQkJXAorKwkgICYmIEdFVF9DT0RFKFhFWFAoWCwgMCkpID09IFJFRwkJCVwKKysJICAmJiBHRVRfQ09ERShYRVhQKFgsIDEpKSA9PSBDT05TVF9JTlQJCQlcCisrCSAgJiYgIUNPTlNUX09LX0ZPUl9DT05TVFJBSU5UX1AoSU5UVkFMKFhFWFAoWCwgMSkpLAlcCisrCQkJCQknSycsICJLczE2IikpCQlcCisrCXsJCQkJCQkJXAorKwkgIHJ0eCBpbmRleCA9IGZvcmNlX3JlZyhTSW1vZGUsIFhFWFAoWCwgMSkpOwkJXAorKwkgIFggPSBnZW5fcnR4X1BMVVMoIFNJbW9kZSwgWEVYUChYLCAwKSwgaW5kZXgpOwkJXAorKwl9CQkJCQkJCVwKKysgICAgICBHT19JRl9MRUdJVElNQVRFX0FERFJFU1MoTU9ERSwgWCwgV0lOKTsJCQlcCisrICAgIH0JCQkJCQkJCVwKKysgIHdoaWxlKDApCisrCisrCisrLyoKKytBIEMgc3RhdGVtZW50IG9yIGNvbXBvdW5kIHN0YXRlbWVudCB3aXRoIGEgY29uZGl0aW9uYWwKKytnb3RvIExBQkVMOyBleGVjdXRlZCBpZiBtZW1vcnkgYWRkcmVzcyBYIChhbiBSVFgpIGNhbiBoYXZlCisrZGlmZmVyZW50IG1lYW5pbmdzIGRlcGVuZGluZyBvbiB0aGUgbWFjaGluZSBtb2RlIG9mIHRoZSBtZW1vcnkKKytyZWZlcmVuY2UgaXQgaXMgdXNlZCBmb3Igb3IgaWYgdGhlIGFkZHJlc3MgaXMgdmFsaWQgZm9yIHNvbWUgbW9kZXMKKytidXQgbm90IG90aGVycy4KKysKKytBdXRvaW5jcmVtZW50IGFuZCBhdXRvZGVjcmVtZW50IGFkZHJlc3NlcyB0eXBpY2FsbHkgaGF2ZSBtb2RlLWRlcGVuZGVudAorK2VmZmVjdHMgYmVjYXVzZSB0aGUgYW1vdW50IG9mIHRoZSBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGlzIHRoZSBzaXplCisrb2YgdGhlIG9wZXJhbmQgYmVpbmcgYWRkcmVzc2VkLiAgU29tZSBtYWNoaW5lcyBoYXZlIG90aGVyIG1vZGUtZGVwZW5kZW50CisrYWRkcmVzc2VzLiAgTWFueSBSSVNDIG1hY2hpbmVzIGhhdmUgbm8gbW9kZS1kZXBlbmRlbnQgYWRkcmVzc2VzLgorKworK1lvdSBtYXkgYXNzdW1lIHRoYXQgQUREUiBpcyBhIHZhbGlkIGFkZHJlc3MgZm9yIHRoZSBtYWNoaW5lLgorKyovCisrI2RlZmluZSBHT19JRl9NT0RFX0RFUEVOREVOVF9BRERSRVNTKEFERFIsIExBQkVMKQlcCisrICBkbwkJCQkJCQlcCisrICAgIHsJCQkJCQkJXAorKyAgICAgIGlmIChHRVRfQ09ERSAoQUREUikgPT0gUE9TVF9JTkMJCQlcCisrCSAgfHwgR0VUX0NPREUgKEFERFIpID09IFBSRV9ERUMpCQlcCisrCWdvdG8gTEFCRUw7CQkJCQlcCisrICAgIH0JCQkJCQkJXAorKyAgd2hpbGUgKDApCisrCisrLyoKKytBIEMgZXhwcmVzc2lvbiB0aGF0IGlzIG5vbnplcm8gaWYgWCBpcyBhIGxlZ2l0aW1hdGUgY29uc3RhbnQgZm9yCisrYW4gaW1tZWRpYXRlIG9wZXJhbmQgb24gdGhlIHRhcmdldCBtYWNoaW5lLiAgWW91IGNhbiBhc3N1bWUgdGhhdAorK1ggc2F0aXNmaWVzIENPTlNUQU5UX1AsIHNvIHlvdSBuZWVkIG5vdCBjaGVjayB0aGlzLiAgSW4gZmFjdCwKKysnMScgaXMgYSBzdWl0YWJsZSBkZWZpbml0aW9uIGZvciB0aGlzIG1hY3JvIG9uIG1hY2hpbmVzIHdoZXJlCisrYW55dGhpbmcgQ09OU1RBTlRfUCBpcyB2YWxpZC4KKysqLworKyNkZWZpbmUgTEVHSVRJTUFURV9DT05TVEFOVF9QKFgpIGF2cjMyX2xlZ2l0aW1hdGVfY29uc3RhbnRfcChYKQorKworKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysgKiBDb25kaXRpb24gQ29kZSBTdGF0dXMKKysgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrLyoKKytDIGNvZGUgZm9yIGEgZGF0YSB0eXBlIHdoaWNoIGlzIHVzZWQgZm9yIGRlY2xhcmluZyB0aGUgbWRlcAorK2NvbXBvbmVudCBvZiBjY19zdGF0dXMuICBJdCBkZWZhdWx0cyB0byBpbnQuCisrCisrVGhpcyBtYWNybyBpcyBub3QgdXNlZCBvbiBtYWNoaW5lcyB0aGF0IGRvIG5vdCB1c2UgY2MwLgorKyovCisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBpbnQgZmxhZ3M7CisrICBydHggdmFsdWU7CisrICBpbnQgZnBmbGFnczsKKysgIHJ0eCBmcHZhbHVlOworKyAgaW50IGNvbmRfZXhlY19jbXBfY2xvYmJlcmVkOworK30gYXZyMzJfc3RhdHVzX3JlZzsKKysKKysKKysjZGVmaW5lIENDX1NUQVRVU19NREVQIGF2cjMyX3N0YXR1c19yZWcKKysKKysvKgorK0EgQyBleHByZXNzaW9uIHRvIGluaXRpYWxpemUgdGhlIG1kZXAgZmllbGQgdG8gImVtcHR5Ii4KKytUaGUgZGVmYXVsdCBkZWZpbml0aW9uIGRvZXMgbm90aGluZywgc2luY2UgbW9zdCBtYWNoaW5lcyBkb24ndCB1c2UKKyt0aGUgZmllbGQgYW55d2F5LiAgSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBmaWVsZCwgeW91IHNob3VsZCBwcm9iYWJseQorK2RlZmluZSB0aGlzIG1hY3JvIHRvIGluaXRpYWxpemUgaXQuCisrCisrVGhpcyBtYWNybyBpcyBub3QgdXNlZCBvbiBtYWNoaW5lcyB0aGF0IGRvIG5vdCB1c2UgY2MwLgorKyovCisrCisrI2RlZmluZSBDQ19TVEFUVVNfTURFUF9JTklUICBcCisrICAgKGNjX3N0YXR1cy5tZGVwLmZsYWdzID0gQ0NfTk9ORSAsIGNjX3N0YXR1cy5tZGVwLmNvbmRfZXhlY19jbXBfY2xvYmJlcmVkID0gMCwgY2Nfc3RhdHVzLm1kZXAudmFsdWUgPSAwKQorKworKyNkZWZpbmUgRlBDQ19TVEFUVVNfSU5JVCBcCisrICAgKGNjX3N0YXR1cy5tZGVwLmZwZmxhZ3MgPSBDQ19OT05FICwgY2Nfc3RhdHVzLm1kZXAuZnB2YWx1ZSA9IDApCisrCisrLyoKKytBIEMgY29tcG91bmQgc3RhdGVtZW50IHRvIHNldCB0aGUgY29tcG9uZW50cyBvZiBjY19zdGF0dXMKKythcHByb3ByaWF0ZWx5IGZvciBhbiBpbnNuIElOU04gd2hvc2UgYm9keSBpcyBFWFAuICBJdCBpcworK3RoaXMgbWFjcm8ncyByZXNwb25zaWJpbGl0eSB0byByZWNvZ25pemUgaW5zbnMgdGhhdCBzZXQgdGhlIGNvbmRpdGlvbgorK2NvZGUgYXMgYSBieXByb2R1Y3Qgb2Ygb3RoZXIgYWN0aXZpdHkgYXMgd2VsbCBhcyB0aG9zZSB0aGF0IGV4cGxpY2l0bHkKKytzZXQgKGNjMCkuCisrCisrVGhpcyBtYWNybyBpcyBub3QgdXNlZCBvbiBtYWNoaW5lcyB0aGF0IGRvIG5vdCB1c2UgY2MwLgorKworK0lmIHRoZXJlIGFyZSBpbnNucyB0aGF0IGRvIG5vdCBzZXQgdGhlIGNvbmRpdGlvbiBjb2RlIGJ1dCBkbyBhbHRlcgorK290aGVyIG1hY2hpbmUgcmVnaXN0ZXJzLCB0aGlzIG1hY3JvIG11c3QgY2hlY2sgdG8gc2VlIHdoZXRoZXIgdGhleQorK2ludmFsaWRhdGUgdGhlIGV4cHJlc3Npb25zIHRoYXQgdGhlIGNvbmRpdGlvbiBjb2RlIGlzIHJlY29yZGVkIGFzCisrcmVmbGVjdGluZy4gIEZvciBleGFtcGxlLCBvbiB0aGUgNjgwMDAsIGluc25zIHRoYXQgc3RvcmUgaW4gYWRkcmVzcworK3JlZ2lzdGVycyBkbyBub3Qgc2V0IHRoZSBjb25kaXRpb24gY29kZSwgd2hpY2ggbWVhbnMgdGhhdCB1c3VhbGx5CisrTk9USUNFX1VQREFURV9DQyBjYW4gbGVhdmUgY2Nfc3RhdHVzIHVuYWx0ZXJlZCBmb3Igc3VjaAorK2luc25zLiAgQnV0IHN1cHBvc2UgdGhhdCB0aGUgcHJldmlvdXMgaW5zbiBzZXQgdGhlIGNvbmRpdGlvbiBjb2RlCisrYmFzZWQgb24gbG9jYXRpb24gJ2E0QEAoMTAyKScgYW5kIHRoZSBjdXJyZW50IGluc24gc3RvcmVzIGEgbmV3CisrdmFsdWUgaW4gJ2E0Jy4gIEFsdGhvdWdoIHRoZSBjb25kaXRpb24gY29kZSBpcyBub3QgY2hhbmdlZCBieQorK3RoaXMsIGl0IHdpbGwgbm8gbG9uZ2VyIGJlIHRydWUgdGhhdCBpdCByZWZsZWN0cyB0aGUgY29udGVudHMgb2YKKysnYTRAQCgxMDIpJy4gIFRoZXJlZm9yZSwgTk9USUNFX1VQREFURV9DQyBtdXN0IGFsdGVyCisrY2Nfc3RhdHVzIGluIHRoaXMgY2FzZSB0byBzYXkgdGhhdCBub3RoaW5nIGlzIGtub3duIGFib3V0IHRoZQorK2NvbmRpdGlvbiBjb2RlIHZhbHVlLgorKworK1RoZSBkZWZpbml0aW9uIG9mIE5PVElDRV9VUERBVEVfQ0MgbXVzdCBiZSBwcmVwYXJlZCB0byBkZWFsCisrd2l0aCB0aGUgcmVzdWx0cyBvZiBwZWVwaG9sZSBvcHRpbWl6YXRpb246IGluc25zIHdob3NlIHBhdHRlcm5zIGFyZQorK3BhcmFsbGVsIFJUWHMgY29udGFpbmluZyB2YXJpb3VzIHJlZywgbWVtIG9yCisrY29uc3RhbnRzIHdoaWNoIGFyZSBqdXN0IHRoZSBvcGVyYW5kcy4gIFRoZSBSVEwgc3RydWN0dXJlIG9mIHRoZXNlCisraW5zbnMgaXMgbm90IHN1ZmZpY2llbnQgdG8gaW5kaWNhdGUgd2hhdCB0aGUgaW5zbnMgYWN0dWFsbHkgZG8uICBXaGF0CisrTk9USUNFX1VQREFURV9DQyBzaG91bGQgZG8gd2hlbiBpdCBzZWVzIG9uZSBpcyBqdXN0IHRvIHJ1bgorK0NDX1NUQVRVU19JTklULgorKworK0EgcG9zc2libGUgZGVmaW5pdGlvbiBvZiBOT1RJQ0VfVVBEQVRFX0NDIGlzIHRvIGNhbGwgYSBmdW5jdGlvbgorK3RoYXQgbG9va3MgYXQgYW4gYXR0cmlidXRlIChzZWUgSW5zbiBBdHRyaWJ1dGVzKSBuYW1lZCwgZm9yIGV4YW1wbGUsCisrJ2NjJy4gIFRoaXMgYXZvaWRzIGhhdmluZyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBwYXR0ZXJucyBpbgorK3R3byBwbGFjZXMsIHRoZSAnbWQnIGZpbGUgYW5kIGluIE5PVElDRV9VUERBVEVfQ0MuCisrKi8KKysKKysjZGVmaW5lIE5PVElDRV9VUERBVEVfQ0MoRVhQLCBJTlNOKSBhdnIzMl9ub3RpY2VfdXBkYXRlX2NjKEVYUCwgSU5TTikKKysKKysKKysKKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisrICogRGVzY3JpYmluZyBSZWxhdGl2ZSBDb3N0cyBvZiBPcGVyYXRpb25zCisrICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworKworKworKy8qCisrQSBDIGV4cHJlc3Npb24gZm9yIHRoZSBjb3N0IG9mIG1vdmluZyBkYXRhIG9mIG1vZGUgTU9ERSBmcm9tIGEKKytyZWdpc3RlciBpbiBjbGFzcyBGUk9NIHRvIG9uZSBpbiBjbGFzcyBUTy4gIFRoZSBjbGFzc2VzIGFyZQorK2V4cHJlc3NlZCB1c2luZyB0aGUgZW51bWVyYXRpb24gdmFsdWVzIHN1Y2ggYXMgR0VORVJBTF9SRUdTLiAgQQorK3ZhbHVlIG9mIDIgaXMgdGhlIGRlZmF1bHQ7IG90aGVyIHZhbHVlcyBhcmUgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8KKyt0aGF0LgorKworK0l0IGlzIG5vdCByZXF1aXJlZCB0aGF0IHRoZSBjb3N0IGFsd2F5cyBlcXVhbCAyIHdoZW4gRlJPTSBpcyB0aGUKKytzYW1lIGFzIFRPOyBvbiBzb21lIG1hY2hpbmVzIGl0IGlzIGV4cGVuc2l2ZSB0byBtb3ZlIGJldHdlZW4KKytyZWdpc3RlcnMgaWYgdGhleSBhcmUgbm90IGdlbmVyYWwgcmVnaXN0ZXJzLgorKworK0lmIHJlbG9hZCBzZWVzIGFuIGluc24gY29uc2lzdGluZyBvZiBhIHNpbmdsZSBzZXQgYmV0d2VlbiB0d28KKytoYXJkIHJlZ2lzdGVycywgYW5kIGlmIFJFR0lTVEVSX01PVkVfQ09TVCBhcHBsaWVkIHRvIHRoZWlyCisrY2xhc3NlcyByZXR1cm5zIGEgdmFsdWUgb2YgMiwgcmVsb2FkIGRvZXMgbm90IGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZQorK2NvbnN0cmFpbnRzIG9mIHRoZSBpbnNuIGFyZSBtZXQuICBTZXR0aW5nIGEgY29zdCBvZiBvdGhlciB0aGFuIDIgd2lsbAorK2FsbG93IHJlbG9hZCB0byB2ZXJpZnkgdGhhdCB0aGUgY29uc3RyYWludHMgYXJlIG1ldC4gIFlvdSBzaG91bGQgZG8gdGhpcworK2lmIHRoZSBtb3ZtIHBhdHRlcm4ncyBjb25zdHJhaW50cyBkbyBub3QgYWxsb3cgc3VjaCBjb3B5aW5nLgorKyovCisrI2RlZmluZSBSRUdJU1RFUl9NT1ZFX0NPU1QoTU9ERSwgRlJPTSwgVE8pIFwKKysgICgoR0VUX01PREVfU0laRShNT0RFKSA8PSA0KSA/IDI6ICAgICAgICAgXAorKyAgIChHRVRfTU9ERV9TSVpFKE1PREUpIDw9IDgpID8gMzogICAgICAgICBcCisrICAgNCkKKysKKysvKgorK0EgQyBleHByZXNzaW9uIGZvciB0aGUgY29zdCBvZiBtb3ZpbmcgZGF0YSBvZiBtb2RlIE1PREUgYmV0d2VlbiBhCisrcmVnaXN0ZXIgb2YgY2xhc3MgQ0xBU1MgYW5kIG1lbW9yeTsgSU4gaXMgemVybyBpZiB0aGUgdmFsdWUKKytpcyB0byBiZSB3cml0dGVuIHRvIG1lbW9yeSwgbm9uemVybyBpZiBpdCBpcyB0byBiZSByZWFkIGluLiAgVGhpcyBjb3N0CisraXMgcmVsYXRpdmUgdG8gdGhvc2UgaW4gUkVHSVNURVJfTU9WRV9DT1NULiAgSWYgbW92aW5nIGJldHdlZW4KKytyZWdpc3RlcnMgYW5kIG1lbW9yeSBpcyBtb3JlIGV4cGVuc2l2ZSB0aGFuIGJldHdlZW4gdHdvIHJlZ2lzdGVycywgeW91Cisrc2hvdWxkIGRlZmluZSB0aGlzIG1hY3JvIHRvIGV4cHJlc3MgdGhlIHJlbGF0aXZlIGNvc3QuCisrCisrSWYgeW91IGRvIG5vdCBkZWZpbmUgdGhpcyBtYWNybywgR0NDIHVzZXMgYSBkZWZhdWx0IGNvc3Qgb2YgNCBwbHVzCisrdGhlIGNvc3Qgb2YgY29weWluZyB2aWEgYSBzZWNvbmRhcnkgcmVsb2FkIHJlZ2lzdGVyLCBpZiBvbmUgaXMKKytuZWVkZWQuICBJZiB5b3VyIG1hY2hpbmUgcmVxdWlyZXMgYSBzZWNvbmRhcnkgcmVsb2FkIHJlZ2lzdGVyIHRvIGNvcHkKKytiZXR3ZWVuIG1lbW9yeSBhbmQgYSByZWdpc3RlciBvZiBDTEFTUyBidXQgdGhlIHJlbG9hZCBtZWNoYW5pc20gaXMKKyttb3JlIGNvbXBsZXggdGhhbiBjb3B5aW5nIHZpYSBhbiBpbnRlcm1lZGlhdGUsIGRlZmluZSB0aGlzIG1hY3JvIHRvCisrcmVmbGVjdCB0aGUgYWN0dWFsIGNvc3Qgb2YgdGhlIG1vdmUuCisrCisrR0NDIGRlZmluZXMgdGhlIGZ1bmN0aW9uIG1lbW9yeV9tb3ZlX3NlY29uZGFyeV9jb3N0IGlmCisrc2Vjb25kYXJ5IHJlbG9hZHMgYXJlIG5lZWRlZC4gIEl0IGNvbXB1dGVzIHRoZSBjb3N0cyBkdWUgdG8gY29weWluZyB2aWEKKythIHNlY29uZGFyeSByZWdpc3Rlci4gIElmIHlvdXIgbWFjaGluZSBjb3BpZXMgZnJvbSBtZW1vcnkgdXNpbmcgYQorK3NlY29uZGFyeSByZWdpc3RlciBpbiB0aGUgY29udmVudGlvbmFsIHdheSBidXQgdGhlIGRlZmF1bHQgYmFzZSB2YWx1ZSBvZgorKzQgaXMgbm90IGNvcnJlY3QgZm9yIHlvdXIgbWFjaGluZSwgZGVmaW5lIHRoaXMgbWFjcm8gdG8gYWRkIHNvbWUgb3RoZXIKKyt2YWx1ZSB0byB0aGUgcmVzdWx0IG9mIHRoYXQgZnVuY3Rpb24uICBUaGUgYXJndW1lbnRzIHRvIHRoYXQgZnVuY3Rpb24KKythcmUgdGhlIHNhbWUgYXMgdG8gdGhpcyBtYWNyby4KKysqLworKy8qCisrICBNZW1vcnkgbW92ZXMgYXJlIGNvc3RseQorKyovCisrI2RlZmluZSBNRU1PUllfTU9WRV9DT1NUKE1PREUsIENMQVNTLCBJTikgICAgICAgICAgICBcCisrICAoKChJTikgPyAoKEdFVF9NT0RFX1NJWkUoTU9ERSkgPCA0KSA/IDQgOiAgICAgICAgICBcCisrICAgICAgICAgICAgKEdFVF9NT0RFX1NJWkUoTU9ERSkgPiA4KSA/IDYgOiAgICAgICAgICBcCisrICAgICAgICAgICAgMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIDogKChHRVRfTU9ERV9TSVpFKE1PREUpID4gOCkgPyA2IDogMykpKQorKworKy8qCisrQSBDIGV4cHJlc3Npb24gZm9yIHRoZSBjb3N0IG9mIGEgYnJhbmNoIGluc3RydWN0aW9uLiAgQSB2YWx1ZSBvZiAxIGlzCisrdGhlIGRlZmF1bHQ7IG90aGVyIHZhbHVlcyBhcmUgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gdGhhdC4KKysqLworKyAgLyogVHJ5IHRvIHVzZSBjb25kaXRpb25hbHMgYXMgbXVjaCBhcyBwb3NzaWJsZSAqLworKyNkZWZpbmUgQlJBTkNIX0NPU1QgKFRBUkdFVF9CUkFOQ0hfUFJFRCA/IDMgOiA0KQorKworKy8qQSBDIGV4cHJlc3Npb24gZm9yIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgdG8gZXhlY3V0ZSB2aWEgY29uZGl0aW9uYWwKKysgIGV4ZWN1dGlvbiBpbnN0cnVjdGlvbnMgaW5zdGVhZCBvZiBhIGJyYW5jaC4gQSB2YWx1ZSBvZiBCUkFOQ0hfQ09TVCsxIGlzIHRoZSBkZWZhdWx0CisrICBpZiB0aGUgbWFjaGluZSBkb2VzIG5vdCB1c2UgY2MwLCBhbmQgMSBpZiBpdCBkb2VzIHVzZSBjYzAuKi8KKysjZGVmaW5lIE1BWF9DT05ESVRJT05BTF9FWEVDVVRFIDQKKysKKysvKgorK0RlZmluZSB0aGlzIG1hY3JvIGFzIGEgQyBleHByZXNzaW9uIHdoaWNoIGlzIG5vbnplcm8gaWYgYWNjZXNzaW5nIGxlc3MKKyt0aGFuIGEgd29yZCBvZiBtZW1vcnkgKGkuZS46IGEgY2hhciBvciBhIHNob3J0KSBpcyBubworK2Zhc3RlciB0aGFuIGFjY2Vzc2luZyBhIHdvcmQgb2YgbWVtb3J5LCBpLmUuLCBpZiBzdWNoIGFjY2VzcworK3JlcXVpcmUgbW9yZSB0aGFuIG9uZSBpbnN0cnVjdGlvbiBvciBpZiB0aGVyZSBpcyBubyBkaWZmZXJlbmNlIGluIGNvc3QKKytiZXR3ZWVuIGJ5dGUgYW5kIChhbGlnbmVkKSB3b3JkIGxvYWRzLgorKworK1doZW4gdGhpcyBtYWNybyBpcyBub3QgZGVmaW5lZCwgdGhlIGNvbXBpbGVyIHdpbGwgYWNjZXNzIGEgZmllbGQgYnkKKytmaW5kaW5nIHRoZSBzbWFsbGVzdCBjb250YWluaW5nIG9iamVjdDsgd2hlbiBpdCBpcyBkZWZpbmVkLCBhIGZ1bGx3b3JkCisrbG9hZCB3aWxsIGJlIHVzZWQgaWYgYWxpZ25tZW50IHBlcm1pdHMuICBVbmxlc3MgYnl0ZXMgYWNjZXNzZXMgYXJlCisrZmFzdGVyIHRoYW4gd29yZCBhY2Nlc3NlcywgdXNpbmcgd29yZCBhY2Nlc3NlcyBpcyBwcmVmZXJhYmxlIHNpbmNlIGl0CisrbWF5IGVsaW1pbmF0ZSBzdWJzZXF1ZW50IG1lbW9yeSBhY2Nlc3MgaWYgc3Vic2VxdWVudCBhY2Nlc3NlcyBvY2N1ciB0bworK290aGVyIGZpZWxkcyBpbiB0aGUgc2FtZSB3b3JkIG9mIHRoZSBzdHJ1Y3R1cmUsIGJ1dCB0byBkaWZmZXJlbnQgYnl0ZXMuCisrKi8KKysjZGVmaW5lIFNMT1dfQllURV9BQ0NFU1MgMQorKworKworKy8qCisrRGVmaW5lIHRoaXMgbWFjcm8gaWYgaXQgaXMgYXMgZ29vZCBvciBiZXR0ZXIgdG8gY2FsbCBhIGNvbnN0YW50CisrZnVuY3Rpb24gYWRkcmVzcyB0aGFuIHRvIGNhbGwgYW4gYWRkcmVzcyBrZXB0IGluIGEgcmVnaXN0ZXIuCisrKi8KKysjZGVmaW5lIE5PX0ZVTkNUSU9OX0NTRQorKworKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysgKiBBZGp1c3RpbmcgdGhlIEluc3RydWN0aW9uIFNjaGVkdWxlcgorKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysgKiBEaXZpZGluZyB0aGUgT3V0cHV0IGludG8gU2VjdGlvbnMgKFRleHRzLCBEYXRhLCAuLi4pICAgICAgICAgICAgICAgICAgICAgICoKKysgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrLyoKKytBIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBhIHN0cmluZywgaW5jbHVkaW5nIHNwYWNpbmcsIGNvbnRhaW5pbmcgdGhlCisrYXNzZW1ibGVyIG9wZXJhdGlvbiB0aGF0IHNob3VsZCBwcmVjZWRlIGluc3RydWN0aW9ucyBhbmQgcmVhZC1vbmx5IGRhdGEuCisrTm9ybWFsbHkgIlx0LnRleHQiIGlzIHJpZ2h0LgorKyovCisrI2RlZmluZSBURVhUX1NFQ1RJT05fQVNNX09QICJcdC50ZXh0IgorKy8qCisrQSBDIHN0YXRlbWVudCB0aGF0IHN3aXRjaGVzIHRvIHRoZSBkZWZhdWx0IHNlY3Rpb24gY29udGFpbmluZyBpbnN0cnVjdGlvbnMuCisrTm9ybWFsbHkgdGhpcyBpcyBub3QgbmVlZGVkLCBhcyBzaW1wbHkgZGVmaW5pbmcgVEVYVF9TRUNUSU9OX0FTTV9PUAorK2lzIGVub3VnaC4gIFRoZSBNSVBTIHBvcnQgdXNlcyB0aGlzIHRvIHNvcnQgYWxsIGZ1bmN0aW9ucyBhZnRlciBhbGwgZGF0YQorK2RlY2xhcmF0aW9ucy4KKysqLworKy8qICNkZWZpbmUgVEVYVF9TRUNUSU9OICovCisrCisrLyoKKytBIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBhIHN0cmluZywgaW5jbHVkaW5nIHNwYWNpbmcsIGNvbnRhaW5pbmcgdGhlCisrYXNzZW1ibGVyIG9wZXJhdGlvbiB0byBpZGVudGlmeSB0aGUgZm9sbG93aW5nIGRhdGEgYXMgd3JpdGFibGUgaW5pdGlhbGl6ZWQKKytkYXRhLiAgTm9ybWFsbHkgIlx0LmRhdGEiIGlzIHJpZ2h0LgorKyovCisrI2RlZmluZSBEQVRBX1NFQ1RJT05fQVNNX09QICJcdC5kYXRhIgorKworKy8qCisrSWYgZGVmaW5lZCwgYSBDIGV4cHJlc3Npb24gd2hvc2UgdmFsdWUgaXMgYSBzdHJpbmcsIGluY2x1ZGluZyBzcGFjaW5nLAorK2NvbnRhaW5pbmcgdGhlIGFzc2VtYmxlciBvcGVyYXRpb24gdG8gaWRlbnRpZnkgdGhlIGZvbGxvd2luZyBkYXRhIGFzCisrc2hhcmVkIGRhdGEuICBJZiBub3QgZGVmaW5lZCwgREFUQV9TRUNUSU9OX0FTTV9PUCB3aWxsIGJlIHVzZWQuCisrKi8KKysKKysvKgorK0EgQyBleHByZXNzaW9uIHdob3NlIHZhbHVlIGlzIGEgc3RyaW5nLCBpbmNsdWRpbmcgc3BhY2luZywgY29udGFpbmluZworK3RoZSBhc3NlbWJsZXIgb3BlcmF0aW9uIHRvIGlkZW50aWZ5IHRoZSBmb2xsb3dpbmcgZGF0YSBhcyByZWFkLW9ubHkKKytpbml0aWFsaXplZCBkYXRhLgorKyovCisrI3VuZGVmIFJFQURPTkxZX0RBVEFfU0VDVElPTl9BU01fT1AKKysjZGVmaW5lIFJFQURPTkxZX0RBVEFfU0VDVElPTl9BU01fT1AgXAorKyAgKChUQVJHRVRfVVNFX1JPREFUQV9TRUNUSU9OKSA/ICBcCisrICAgIlx0LnNlY3Rpb25cdC5yb2RhdGEiIDogICAgICAgICAgICAgICAgXAorKyAgIFRFWFRfU0VDVElPTl9BU01fT1AgKQorKworKworKy8qCisrSWYgZGVmaW5lZCwgYSBDIGV4cHJlc3Npb24gd2hvc2UgdmFsdWUgaXMgYSBzdHJpbmcsIGluY2x1ZGluZyBzcGFjaW5nLAorK2NvbnRhaW5pbmcgdGhlIGFzc2VtYmxlciBvcGVyYXRpb24gdG8gaWRlbnRpZnkgdGhlIGZvbGxvd2luZyBkYXRhIGFzCisrdW5pbml0aWFsaXplZCBnbG9iYWwgZGF0YS4gIElmIG5vdCBkZWZpbmVkLCBhbmQgbmVpdGhlcgorK0FTTV9PVVRQVVRfQlNTIG5vciBBU01fT1VUUFVUX0FMSUdORURfQlNTIGFyZSBkZWZpbmVkLAorK3VuaW5pdGlhbGl6ZWQgZ2xvYmFsIGRhdGEgd2lsbCBiZSBvdXRwdXQgaW4gdGhlIGRhdGEgc2VjdGlvbiBpZgorKy1mbm8tY29tbW9uIGlzIHBhc3NlZCwgb3RoZXJ3aXNlIEFTTV9PVVRQVVRfQ09NTU9OIHdpbGwgYmUKKyt1c2VkLgorKyovCisrI2RlZmluZSBCU1NfU0VDVElPTl9BU01fT1AJIlx0LnNlY3Rpb25cdC5ic3MiCisrCisrLyoKKytJZiBkZWZpbmVkLCBhIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBhIHN0cmluZywgaW5jbHVkaW5nIHNwYWNpbmcsCisrY29udGFpbmluZyB0aGUgYXNzZW1ibGVyIG9wZXJhdGlvbiB0byBpZGVudGlmeSB0aGUgZm9sbG93aW5nIGRhdGEgYXMKKyt1bmluaXRpYWxpemVkIGdsb2JhbCBzaGFyZWQgZGF0YS4gIElmIG5vdCBkZWZpbmVkLCBhbmQKKytCU1NfU0VDVElPTl9BU01fT1AgaXMsIHRoZSBsYXR0ZXIgd2lsbCBiZSB1c2VkLgorKyovCisrLyojZGVmaW5lIFNIQVJFRF9CU1NfU0VDVElPTl9BU01fT1AgIlx0cnNlZ1x0c2hhcmVkX2Jic19zZWN0aW9uOmRhdGE6bm9yb290KDApXG4iKi8KKysvKgorK0lmIGRlZmluZWQsIGEgQyBleHByZXNzaW9uIHdob3NlIHZhbHVlIGlzIGEgc3RyaW5nLCBpbmNsdWRpbmcgc3BhY2luZywKKytjb250YWluaW5nIHRoZSBhc3NlbWJsZXIgb3BlcmF0aW9uIHRvIGlkZW50aWZ5IHRoZSBmb2xsb3dpbmcgZGF0YSBhcworK2luaXRpYWxpemF0aW9uIGNvZGUuICBJZiBub3QgZGVmaW5lZCwgR0NDIHdpbGwgYXNzdW1lIHN1Y2ggYSBzZWN0aW9uIGRvZXMKKytub3QgZXhpc3QuCisrKi8KKysjdW5kZWYgIElOSVRfU0VDVElPTl9BU01fT1AKKysjZGVmaW5lIElOSVRfU0VDVElPTl9BU01fT1AgIlx0LnNlY3Rpb25cdC5pbml0IgorKworKy8qCisrSWYgZGVmaW5lZCwgYSBDIGV4cHJlc3Npb24gd2hvc2UgdmFsdWUgaXMgYSBzdHJpbmcsIGluY2x1ZGluZyBzcGFjaW5nLAorK2NvbnRhaW5pbmcgdGhlIGFzc2VtYmxlciBvcGVyYXRpb24gdG8gaWRlbnRpZnkgdGhlIGZvbGxvd2luZyBkYXRhIGFzCisrZmluYWxpemF0aW9uIGNvZGUuICBJZiBub3QgZGVmaW5lZCwgR0NDIHdpbGwgYXNzdW1lIHN1Y2ggYSBzZWN0aW9uIGRvZXMKKytub3QgZXhpc3QuCisrKi8KKysjdW5kZWYgIEZJTklfU0VDVElPTl9BU01fT1AKKysjZGVmaW5lIEZJTklfU0VDVElPTl9BU01fT1AgIlx0LnNlY3Rpb25cdC5maW5pIgorKworKy8qCisrSWYgZGVmaW5lZCwgYW4gQVNNIHN0YXRlbWVudCB0aGF0IHN3aXRjaGVzIHRvIGEgZGlmZmVyZW50IHNlY3Rpb24KKyt2aWEgU0VDVElPTl9PUCwgY2FsbHMgRlVOQ1RJT04sIGFuZCBzd2l0Y2hlcyBiYWNrIHRvCisrdGhlIHRleHQgc2VjdGlvbi4gIFRoaXMgaXMgdXNlZCBpbiBjcnRzdHVmZi5jIGlmCisrSU5JVF9TRUNUSU9OX0FTTV9PUCBvciBGSU5JX1NFQ1RJT05fQVNNX09QIHRvIGNhbGxzCisrdG8gaW5pdGlhbGl6YXRpb24gYW5kIGZpbmFsaXphdGlvbiBmdW5jdGlvbnMgZnJvbSB0aGUgaW5pdCBhbmQgZmluaQorK3NlY3Rpb25zLiAgQnkgZGVmYXVsdCwgdGhpcyBtYWNybyB1c2VzIGEgc2ltcGxlIGZ1bmN0aW9uIGNhbGwuICBTb21lCisrcG9ydHMgbmVlZCBoYW5kLWNyYWZ0ZWQgYXNzZW1ibHkgY29kZSB0byBhdm9pZCBkZXBlbmRlbmNpZXMgb24KKytyZWdpc3RlcnMgaW5pdGlhbGl6ZWQgaW4gdGhlIGZ1bmN0aW9uIHByb2xvZ3VlIG9yIHRvIGVuc3VyZSB0aGF0CisrY29uc3RhbnQgcG9vbHMgZG9uJ3QgZW5kIHVwIHRvbyBmYXIgd2F5IGluIHRoZSB0ZXh0IHNlY3Rpb24uCisrKi8KKysjZGVmaW5lIENSVF9DQUxMX1NUQVRJQ19GVU5DVElPTihTRUNUSU9OX09QLCBGVU5DKSAgICAgIFwKKysgICBhc20gKCBTRUNUSU9OX09QICJcbiIgXAorKyAgICAgICAgICJtY2FsbCAgIHI2WyIgVVNFUl9MQUJFTF9QUkVGSVggI0ZVTkMgIkBnb3RdXG4iIFwKKysgICAgICAgICBURVhUX1NFQ1RJT05fQVNNX09QKTsKKysKKysKKysvKgorK0RlZmluZSB0aGlzIG1hY3JvIHRvIGJlIGFuIGV4cHJlc3Npb24gd2l0aCBhIG5vbnplcm8gdmFsdWUgaWYganVtcAorK3RhYmxlcyAoZm9yIHRhYmxlanVtcCBpbnNucykgc2hvdWxkIGJlIG91dHB1dCBpbiB0aGUgdGV4dAorK3NlY3Rpb24sIGFsb25nIHdpdGggdGhlIGFzc2VtYmxlciBpbnN0cnVjdGlvbnMuICBPdGhlcndpc2UsIHRoZQorK3JlYWRvbmx5IGRhdGEgc2VjdGlvbiBpcyB1c2VkLgorKworK1RoaXMgbWFjcm8gaXMgaXJyZWxldmFudCBpZiB0aGVyZSBpcyBubyBzZXBhcmF0ZSByZWFkb25seSBkYXRhIHNlY3Rpb24uCisrKi8KKysvKiBQdXQganVtcCB0YWJsZXMgaW4gdGV4dCBzZWN0aW9uIGlmIHdlIGhhdmUgY2FjaGVzLiBPdGhlcndpc2UgYXNzdW1lIHRoYXQKKysgICBsb2FkaW5nIGRhdGEgZnJvbSBjb2RlIG1lbW9yeSBpcyBzbG93LiAqLworKyNkZWZpbmUgSlVNUF9UQUJMRVNfSU5fVEVYVF9TRUNUSU9OICAgIFwKKysgICAgKFRBUkdFVF9DQUNIRVMgPyAxIDogMCkKKysKKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisrICogUG9zaXRpb24gSW5kZXBlbmRlbnQgQ29kZSAoUElDKQorKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysjaWZuZGVmIEFWUjMyX0FMV0FZU19QSUMKKysjZGVmaW5lIEFWUjMyX0FMV0FZU19QSUMgMAorKyNlbmRpZgorKworKy8qIEdPVCBpcyBzZXQgdG8gcjYgKi8KKysjZGVmaW5lIFBJQ19PRkZTRVRfVEFCTEVfUkVHTlVNIElOVEVSTkFMX1JFR05VTSg2KQorKworKy8qCisrQSBDIGV4cHJlc3Npb24gdGhhdCBpcyBub256ZXJvIGlmIFggaXMgYSBsZWdpdGltYXRlIGltbWVkaWF0ZQorK29wZXJhbmQgb24gdGhlIHRhcmdldCBtYWNoaW5lIHdoZW4gZ2VuZXJhdGluZyBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlLgorK1lvdSBjYW4gYXNzdW1lIHRoYXQgWCBzYXRpc2ZpZXMgQ09OU1RBTlRfUCwgc28geW91IG5lZWQgbm90CisrY2hlY2sgdGhpcy4gIFlvdSBjYW4gYWxzbyBhc3N1bWUgZmxhZ19waWMgaXMgdHJ1ZSwgc28geW91IG5lZWQgbm90CisrY2hlY2sgaXQgZWl0aGVyLiAgWW91IG5lZWQgbm90IGRlZmluZSB0aGlzIG1hY3JvIGlmIGFsbCBjb25zdGFudHMKKysoaW5jbHVkaW5nIFNZTUJPTF9SRUYpIGNhbiBiZSBpbW1lZGlhdGUgb3BlcmFuZHMgd2hlbiBnZW5lcmF0aW5nCisrcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZS4KKysqLworKy8qIFdlIGNhbid0IGRpcmVjdGx5IGFjY2VzcyBhbnl0aGluZyB0aGF0IGNvbnRhaW5zIGEgc3ltYm9sLAorKyAgIG5vciBjYW4gd2UgaW5kaXJlY3QgdmlhIHRoZSBjb25zdGFudCBwb29sLiAgKi8KKysjZGVmaW5lIExFR0lUSU1BVEVfUElDX09QRVJBTkRfUChYKSBhdnIzMl9sZWdpdGltYXRlX3BpY19vcGVyYW5kX3AoWCkKKysKKysKKysvKiBXZSBuZWVkIHRvIGtub3cgd2hlbiB3ZSBhcmUgbWFraW5nIGEgY29uc3RhbnQgcG9vbDsgdGhpcyBkZXRlcm1pbmVzCisrICAgd2hldGhlciBkYXRhIG5lZWRzIHRvIGJlIGluIHRoZSBHT1Qgb3IgY2FuIGJlIHJlZmVyZW5jZWQgdmlhIGEgR09UCisrICAgb2Zmc2V0LiAgKi8KKytleHRlcm4gaW50IG1ha2luZ19jb25zdF90YWJsZTsKKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisrICogRGVmaW5pbmcgdGhlIE91dHB1dCBBc3NlbWJsZXIgTGFuZ3VhZ2UKKysgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrCisrLyoKKytBIEMgc3RyaW5nIGNvbnN0YW50IGRlc2NyaWJpbmcgaG93IHRvIGJlZ2luIGEgY29tbWVudCBpbiB0aGUgdGFyZ2V0CisrYXNzZW1ibGVyIGxhbmd1YWdlLiAgVGhlIGNvbXBpbGVyIGFzc3VtZXMgdGhhdCB0aGUgY29tbWVudCB3aWxsIGVuZCBhdAorK3RoZSBlbmQgb2YgdGhlIGxpbmUuCisrKi8KKysjZGVmaW5lIEFTTV9DT01NRU5UX1NUQVJUICIjICIKKysKKysvKgorK0EgQyBzdHJpbmcgY29uc3RhbnQgZm9yIHRleHQgdG8gYmUgb3V0cHV0IGJlZm9yZSBlYWNoIGFzbQorK3N0YXRlbWVudCBvciBncm91cCBvZiBjb25zZWN1dGl2ZSBvbmVzLiAgTm9ybWFsbHkgdGhpcyBpcworKyIjQVBQIiwgd2hpY2ggaXMgYSBjb21tZW50IHRoYXQgaGFzIG5vIGVmZmVjdCBvbiBtb3N0CisrYXNzZW1ibGVycyBidXQgdGVsbHMgdGhlIEdOVSBhc3NlbWJsZXIgdGhhdCBpdCBtdXN0IGNoZWNrIHRoZSBsaW5lcworK3RoYXQgZm9sbG93IGZvciBhbGwgdmFsaWQgYXNzZW1ibGVyIGNvbnN0cnVjdHMuCisrKi8KKysjdW5kZWYgQVNNX0FQUF9PTgorKyNkZWZpbmUgQVNNX0FQUF9PTiAiI0FQUFxuIgorKworKy8qCisrQSBDIHN0cmluZyBjb25zdGFudCBmb3IgdGV4dCB0byBiZSBvdXRwdXQgYWZ0ZXIgZWFjaCBhc20KKytzdGF0ZW1lbnQgb3IgZ3JvdXAgb2YgY29uc2VjdXRpdmUgb25lcy4gIE5vcm1hbGx5IHRoaXMgaXMKKysiI05PX0FQUCIsIHdoaWNoIHRlbGxzIHRoZSBHTlUgYXNzZW1ibGVyIHRvIHJlc3VtZSBtYWtpbmcgdGhlCisrdGltZS1zYXZpbmcgYXNzdW1wdGlvbnMgdGhhdCBhcmUgdmFsaWQgZm9yIG9yZGluYXJ5IGNvbXBpbGVyIG91dHB1dC4KKysqLworKyN1bmRlZiBBU01fQVBQX09GRgorKyNkZWZpbmUgQVNNX0FQUF9PRkYgIiNOT19BUFBcbiIKKysKKysKKysKKysjZGVmaW5lIEZJTEVfQVNNX09QIAkJIlx0LmZpbGVcbiIKKysjZGVmaW5lIElERU5UX0FTTV9PUCAJCSJcdC5pZGVudFx0IgorKyNkZWZpbmUgU0VUX0FTTV9PUAkJIlx0LnNldFx0IgorKworKworKy8qCisrICogT3V0cHV0IGFzc2VtYmx5IGRpcmVjdGl2ZXMgdG8gc3dpdGNoIHRvIHNlY3Rpb24gbmFtZS4gVGhlIHNlY3Rpb24KKysgKiBzaG91bGQgaGF2ZSBhdHRyaWJ1dGVzIGFzIHNwZWNpZmllZCBieSBmbGFncywgd2hpY2ggaXMgYSBiaXQgbWFzaworKyAqIG9mIHRoZSBTRUNUSU9OXyogZmxhZ3MgZGVmaW5lZCBpbiAnb3V0cHV0LmgnLiBJZiBhbGlnbiBpcyBub256ZXJvLAorKyAqIGl0IGNvbnRhaW5zIGFuIGFsaWdubWVudCBpbiBieXRlcyB0byBiZSB1c2VkIGZvciB0aGUgc2VjdGlvbiwKKysgKiBvdGhlcndpc2Ugc29tZSB0YXJnZXQgZGVmYXVsdCBzaG91bGQgYmUgdXNlZC4gT25seSB0YXJnZXRzIHRoYXQKKysgKiBtdXN0IHNwZWNpZnkgYW4gYWxpZ25tZW50IHdpdGhpbiB0aGUgc2VjdGlvbiBkaXJlY3RpdmUgbmVlZCBwYXkKKysgKiBhdHRlbnRpb24gdG8gYWxpZ24gLS0gd2Ugd2lsbCBzdGlsbCB1c2UgQVNNX09VVFBVVF9BTElHTi4KKysgKgorKyAqIE5PVEU6IFRoaXMgb25lIG11c3Qgbm90IGJlIG1vdmVkIHRvIGF2cjMyLmMKKysgKi8KKysjdW5kZWYgVEFSR0VUX0FTTV9OQU1FRF9TRUNUSU9OCisrI2RlZmluZSBUQVJHRVRfQVNNX05BTUVEX1NFQ1RJT04gZGVmYXVsdF9lbGZfYXNtX25hbWVkX3NlY3Rpb24KKysKKysKKysvKgorK1lvdSBtYXkgZGVmaW5lIHRoaXMgbWFjcm8gYXMgYSBDIGV4cHJlc3Npb24uICBZb3Ugc2hvdWxkIGRlZmluZSB0aGUKKytleHByZXNzaW9uIHRvIGhhdmUgYSBub256ZXJvIHZhbHVlIGlmIEdDQyBzaG91bGQgb3V0cHV0IHRoZSBjb25zdGFudAorK3Bvb2wgZm9yIGEgZnVuY3Rpb24gYmVmb3JlIHRoZSBjb2RlIGZvciB0aGUgZnVuY3Rpb24sIG9yIGEgemVybyB2YWx1ZSBpZgorK0dDQyBzaG91bGQgb3V0cHV0IHRoZSBjb25zdGFudCBwb29sIGFmdGVyIHRoZSBmdW5jdGlvbi4gIElmIHlvdSBkbworK25vdCBkZWZpbmUgdGhpcyBtYWNybywgdGhlIHVzdWFsIGNhc2UsIEdDQyB3aWxsIG91dHB1dCB0aGUgY29uc3RhbnQKKytwb29sIGJlZm9yZSB0aGUgZnVuY3Rpb24uCisrKi8KKysjZGVmaW5lIENPTlNUQU5UX1BPT0xfQkVGT1JFX0ZVTkNUSU9OIDAKKysKKysKKysvKgorK0RlZmluZSB0aGlzIG1hY3JvIGFzIGEgQyBleHByZXNzaW9uIHdoaWNoIGlzIG5vbnplcm8gaWYgdGhlIGNvbnN0YW50CisrRVhQLCBvZiB0eXBlIHRyZWUsIHNob3VsZCBiZSBvdXRwdXQgYWZ0ZXIgdGhlIGNvZGUgZm9yIGEKKytmdW5jdGlvbi4gIFRoZSBjb21waWxlciB3aWxsIG5vcm1hbGx5IG91dHB1dCBhbGwgY29uc3RhbnRzIGJlZm9yZSB0aGUKKytmdW5jdGlvbjsgeW91IG5lZWQgbm90IGRlZmluZSB0aGlzIG1hY3JvIGlmIHRoaXMgaXMgT0suCisrKi8KKysjZGVmaW5lIENPTlNUQU5UX0FGVEVSX0ZVTkNUSU9OX1AoRVhQKSAxCisrCisrCisrLyoKKytEZWZpbmUgdGhpcyBtYWNybyBhcyBhIEMgZXhwcmVzc2lvbiB3aGljaCBpcyBub256ZXJvIGlmIEMgaXMKKyt1c2VkIGFzIGEgbG9naWNhbCBsaW5lIHNlcGFyYXRvciBieSB0aGUgYXNzZW1ibGVyLgorKworK0lmIHlvdSBkbyBub3QgZGVmaW5lIHRoaXMgbWFjcm8sIHRoZSBkZWZhdWx0IGlzIHRoYXQgb25seQorK3RoZSBjaGFyYWN0ZXIgJzsnIGlzIHRyZWF0ZWQgYXMgYSBsb2dpY2FsIGxpbmUgc2VwYXJhdG9yLgorKyovCisrI2RlZmluZSBJU19BU01fTE9HSUNBTF9MSU5FX1NFUEFSQVRPUihDKSAoKEMpID09ICdcbicpCisrCisrCisrLyoqIE91dHB1dCBvZiBVbmluaXRpYWxpemVkIFZhcmlhYmxlcyAqKi8KKysKKysvKgorK0EgQyBzdGF0ZW1lbnQgKHNhbnMgc2VtaWNvbG9uKSB0byBvdXRwdXQgdG8gdGhlIHN0ZGlvIHN0cmVhbQorK1NUUkVBTSB0aGUgYXNzZW1ibGVyIGRlZmluaXRpb24gb2YgYSBjb21tb24tbGFiZWwgbmFtZWQKKytOQU1FIHdob3NlIHNpemUgaXMgU0laRSBieXRlcy4gIFRoZSB2YXJpYWJsZSBST1VOREVECisraXMgdGhlIHNpemUgcm91bmRlZCB1cCB0byB3aGF0ZXZlciBhbGlnbm1lbnQgdGhlIGNhbGxlciB3YW50cy4KKysKKytVc2UgdGhlIGV4cHJlc3Npb24gYXNzZW1ibGVfbmFtZShTVFJFQU0sIE5BTUUpIHRvCisrb3V0cHV0IHRoZSBuYW1lIGl0c2VsZjsgYmVmb3JlIGFuZCBhZnRlciB0aGF0LCBvdXRwdXQgdGhlIGFkZGl0aW9uYWwKKythc3NlbWJsZXIgc3ludGF4IGZvciBkZWZpbmluZyB0aGUgbmFtZSwgYW5kIGEgbmV3bGluZS4KKysKKytUaGlzIG1hY3JvIGNvbnRyb2xzIGhvdyB0aGUgYXNzZW1ibGVyIGRlZmluaXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQKKytjb21tb24gZ2xvYmFsIHZhcmlhYmxlcyBhcmUgb3V0cHV0LgorKyovCisrLyoKKysjZGVmaW5lIEFTTV9PVVRQVVRfQ09NTU9OKFNUUkVBTSwgTkFNRSwgU0laRSwgUk9VTkRFRCkgXAorKyAgYXZyMzJfYXNtX291dHB1dF9jb21tb24oU1RSRUFNLCBOQU1FLCBTSVpFLCBST1VOREVEKQorKyovCisrCisrI2RlZmluZSBBU01fT1VUUFVUX0NPTU1PTihGSUxFLCBOQU1FLCBTSVpFLCBST1VOREVEKQlcCisrICBkbwkJCQkJCQlcCisrICAgIHsJCQkJCQkJXAorKyAgICAgIGZwdXRzICgiXHQuY29tbSAiLCAoRklMRSkpOwkJCVwKKysgICAgICBhc3NlbWJsZV9uYW1lICgoRklMRSksIChOQU1FKSk7CQkJXAorKyAgICAgIGZwcmludGYgKChGSUxFKSwgIiwlZFxuIiwgKFNJWkUpKTsJCVwKKysgICAgfQkJCQkJCQlcCisrICB3aGlsZSAoMCkKKysKKysvKgorKyAqIExpa2UgQVNNX09VVFBVVF9CU1MgZXhjZXB0IHRha2VzIHRoZSByZXF1aXJlZCBhbGlnbm1lbnQgYXMgYQorKyAqIHNlcGFyYXRlLCBleHBsaWNpdCBhcmd1bWVudC4gIElmIHlvdSBkZWZpbmUgdGhpcyBtYWNybywgaXQgaXMgdXNlZAorKyAqIGluIHBsYWNlIG9mIEFTTV9PVVRQVVRfQlNTLCBhbmQgZ2l2ZXMgeW91IG1vcmUgZmxleGliaWxpdHkgaW4KKysgKiBoYW5kbGluZyB0aGUgcmVxdWlyZWQgYWxpZ25tZW50IG9mIHRoZSB2YXJpYWJsZS4gIFRoZSBhbGlnbm1lbnQgaXMKKysgKiBzcGVjaWZpZWQgYXMgdGhlIG51bWJlciBvZiBiaXRzLgorKyAqCisrICogVHJ5IHRvIHVzZSBmdW5jdGlvbiBhc21fb3V0cHV0X2FsaWduZWRfYnNzIGRlZmluZWQgaW4gZmlsZSB2YXJhc20uYworKyAqIHdoZW4gZGVmaW5pbmcgdGhpcyBtYWNyby4KKysgKi8KKysjZGVmaW5lIEFTTV9PVVRQVVRfQUxJR05FRF9CU1MoU1RSRUFNLCBERUNMLCBOQU1FLCBTSVpFLCBBTElHTk1FTlQpIFwKKysgIGFzbV9vdXRwdXRfYWxpZ25lZF9ic3MgKFNUUkVBTSwgREVDTCwgTkFNRSwgU0laRSwgQUxJR05NRU5UKQorKworKy8qCisrQSBDIHN0YXRlbWVudCAoc2FucyBzZW1pY29sb24pIHRvIG91dHB1dCB0byB0aGUgc3RkaW8gc3RyZWFtCisrU1RSRUFNIHRoZSBhc3NlbWJsZXIgZGVmaW5pdGlvbiBvZiBhIGxvY2FsLWNvbW1vbi1sYWJlbCBuYW1lZAorK05BTUUgd2hvc2Ugc2l6ZSBpcyBTSVpFIGJ5dGVzLiAgVGhlIHZhcmlhYmxlIFJPVU5ERUQKKytpcyB0aGUgc2l6ZSByb3VuZGVkIHVwIHRvIHdoYXRldmVyIGFsaWdubWVudCB0aGUgY2FsbGVyIHdhbnRzLgorKworK1VzZSB0aGUgZXhwcmVzc2lvbiBhc3NlbWJsZV9uYW1lKFNUUkVBTSwgTkFNRSkgdG8KKytvdXRwdXQgdGhlIG5hbWUgaXRzZWxmOyBiZWZvcmUgYW5kIGFmdGVyIHRoYXQsIG91dHB1dCB0aGUgYWRkaXRpb25hbAorK2Fzc2VtYmxlciBzeW50YXggZm9yIGRlZmluaW5nIHRoZSBuYW1lLCBhbmQgYSBuZXdsaW5lLgorKworK1RoaXMgbWFjcm8gY29udHJvbHMgaG93IHRoZSBhc3NlbWJsZXIgZGVmaW5pdGlvbnMgb2YgdW5pbml0aWFsaXplZAorK3N0YXRpYyB2YXJpYWJsZXMgYXJlIG91dHB1dC4KKysqLworKyNkZWZpbmUgQVNNX09VVFBVVF9MT0NBTChGSUxFLCBOQU1FLCBTSVpFLCBST1VOREVEKQlcCisrICBkbwkJCQkJCQlcCisrICAgIHsJCQkJCQkJXAorKyAgICAgIGZwdXRzICgiXHQubGNvbW0gIiwgKEZJTEUpKTsJCQlcCisrICAgICAgYXNzZW1ibGVfbmFtZSAoKEZJTEUpLCAoTkFNRSkpOwkJCVwKKysgICAgICBmcHJpbnRmICgoRklMRSksICIsJWQsICVkXG4iLCAoU0laRSksIDIpOwkJXAorKyAgICB9CQkJCQkJCVwKKysgIHdoaWxlICgwKQorKworKworKy8qCisrQSBDIHN0YXRlbWVudCAoc2FucyBzZW1pY29sb24pIHRvIG91dHB1dCB0byB0aGUgc3RkaW8gc3RyZWFtCisrU1RSRUFNIHRoZSBhc3NlbWJsZXIgZGVmaW5pdGlvbiBvZiBhIGxhYmVsIG5hbWVkIE5BTUUuCisrVXNlIHRoZSBleHByZXNzaW9uIGFzc2VtYmxlX25hbWUoU1RSRUFNLCBOQU1FKSB0bworK291dHB1dCB0aGUgbmFtZSBpdHNlbGY7IGJlZm9yZSBhbmQgYWZ0ZXIgdGhhdCwgb3V0cHV0IHRoZSBhZGRpdGlvbmFsCisrYXNzZW1ibGVyIHN5bnRheCBmb3IgZGVmaW5pbmcgdGhlIG5hbWUsIGFuZCBhIG5ld2xpbmUuCisrKi8KKysjZGVmaW5lIEFTTV9PVVRQVVRfTEFCRUwoU1RSRUFNLCBOQU1FKSBhdnIzMl9hc21fb3V0cHV0X2xhYmVsKFNUUkVBTSwgTkFNRSkKKysKKysvKiBBIEMgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGFwcHJvcHJpYXRlIGFzc2VtYmxlciBkaXJlY3RpdmUgdG8KKysgKiBzcGVjaWZ5IHRoZSBzaXplIG9mIGEgc3ltYm9sLCB3aXRob3V0IGFueSBhcmd1bWVudHMuIE9uIHN5c3RlbXMKKysgKiB0aGF0IHVzZSBFTEYsIHRoZSBkZWZhdWx0IChpbiAnY29uZmlnL2VsZm9zLmgnKSBpcyAnIlx0LnNpemVcdCInOworKyAqIG9uIG90aGVyIHN5c3RlbXMsIHRoZSBkZWZhdWx0IGlzIG5vdCB0byBkZWZpbmUgdGhpcyBtYWNyby4KKysgKgorKyAqIERlZmluZSB0aGlzIG1hY3JvIG9ubHkgaWYgaXQgaXMgY29ycmVjdCB0byB1c2UgdGhlIGRlZmF1bHQKKysgKiBkZWZpbml0aW9ucyBvZiBBU01fIE9VVFBVVF9TSVpFX0RJUkVDVElWRSBhbmQKKysgKiBBU01fT1VUUFVUX01FQVNVUkVEX1NJWkUgZm9yIHlvdXIgc3lzdGVtLiBJZiB5b3UgbmVlZCB5b3VyIG93bgorKyAqIGN1c3RvbSBkZWZpbml0aW9ucyBvZiB0aG9zZSBtYWNyb3MsIG9yIGlmIHlvdSBkbyBub3QgbmVlZCBleHBsaWNpdAorKyAqIHN5bWJvbCBzaXplcyBhdCBhbGwsIGRvIG5vdCBkZWZpbmUgdGhpcyBtYWNyby4KKysgKi8KKysjZGVmaW5lIFNJWkVfQVNNX09QICJcdC5zaXplXHQiCisrCisrCisrLyoKKytBIEMgc3RhdGVtZW50IChzYW5zIHNlbWljb2xvbikgdG8gb3V0cHV0IHRvIHRoZSBzdGRpbyBzdHJlYW0KKytTVFJFQU0gc29tZSBjb21tYW5kcyB0aGF0IHdpbGwgbWFrZSB0aGUgbGFiZWwgTkFNRSBnbG9iYWw7CisrdGhhdCBpcywgYXZhaWxhYmxlIGZvciByZWZlcmVuY2UgZnJvbSBvdGhlciBmaWxlcy4gIFVzZSB0aGUgZXhwcmVzc2lvbgorK2Fzc2VtYmxlX25hbWUoU1RSRUFNLCBOQU1FKSB0byBvdXRwdXQgdGhlIG5hbWUKKytpdHNlbGY7IGJlZm9yZSBhbmQgYWZ0ZXIgdGhhdCwgb3V0cHV0IHRoZSBhZGRpdGlvbmFsIGFzc2VtYmxlciBzeW50YXgKKytmb3IgbWFraW5nIHRoYXQgbmFtZSBnbG9iYWwsIGFuZCBhIG5ld2xpbmUuCisrKi8KKysjZGVmaW5lIEdMT0JBTF9BU01fT1AgIlx0Lmdsb2JsXHQiCisrCisrCisrCisrLyoKKytBIEMgZXhwcmVzc2lvbiB3aGljaCBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiB0aGUgdGFyZ2V0IHN1cHBvcnRzIHdlYWsgc3ltYm9scy4KKysKKytJZiB5b3UgZG9uJ3QgZGVmaW5lIHRoaXMgbWFjcm8sIGRlZmF1bHRzLmggcHJvdmlkZXMgYSBkZWZhdWx0CisrZGVmaW5pdGlvbi4gIElmIGVpdGhlciBBU01fV0VBS0VOX0xBQkVMIG9yIEFTTV9XRUFLRU5fREVDTAorK2lzIGRlZmluZWQsIHRoZSBkZWZhdWx0IGRlZmluaXRpb24gaXMgJzEnOyBvdGhlcndpc2UsIGl0IGlzCisrJzAnLiAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IHdhbnQgdG8gY29udHJvbCB3ZWFrIHN5bWJvbCBzdXBwb3J0Cisrd2l0aCBhIGNvbXBpbGVyIGZsYWcgc3VjaCBhcyAtbWVsZi4KKysqLworKyNkZWZpbmUgU1VQUE9SVFNfV0VBSyAxCisrCisrLyoKKytBIEMgc3RhdGVtZW50IChzYW5zIHNlbWljb2xvbikgdG8gb3V0cHV0IHRvIHRoZSBzdGRpbyBzdHJlYW0KKytTVFJFQU0gYSByZWZlcmVuY2UgaW4gYXNzZW1ibGVyIHN5bnRheCB0byBhIGxhYmVsIG5hbWVkCisrTkFNRS4gIFRoaXMgc2hvdWxkIGFkZCAnXycgdG8gdGhlIGZyb250IG9mIHRoZSBuYW1lLCBpZiB0aGF0CisraXMgY3VzdG9tYXJ5IG9uIHlvdXIgb3BlcmF0aW5nIHN5c3RlbSwgYXMgaXQgaXMgaW4gbW9zdCBCZXJrZWxleSBVbml4Cisrc3lzdGVtcy4gIFRoaXMgbWFjcm8gaXMgdXNlZCBpbiBhc3NlbWJsZV9uYW1lLgorKyovCisrI2RlZmluZSBBU01fT1VUUFVUX0xBQkVMUkVGKFNUUkVBTSwgTkFNRSkgXAorKyAgYXZyMzJfYXNtX291dHB1dF9sYWJlbHJlZihTVFJFQU0sIE5BTUUpCisrCisrCisrCisrLyoKKytBIEMgZXhwcmVzc2lvbiB0byBhc3NpZ24gdG8gT1VUVkFSICh3aGljaCBpcyBhIHZhcmlhYmxlIG9mIHR5cGUKKytjaGFyICopIGEgbmV3bHkgYWxsb2NhdGVkIHN0cmluZyBtYWRlIGZyb20gdGhlIHN0cmluZworK05BTUUgYW5kIHRoZSBudW1iZXIgTlVNQkVSLCB3aXRoIHNvbWUgc3VpdGFibGUgcHVuY3R1YXRpb24KKythZGRlZC4gIFVzZSBhbGxvY2EgdG8gZ2V0IHNwYWNlIGZvciB0aGUgc3RyaW5nLgorKworK1RoZSBzdHJpbmcgd2lsbCBiZSB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIEFTTV9PVVRQVVRfTEFCRUxSRUYgdG8KKytwcm9kdWNlIGFuIGFzc2VtYmxlciBsYWJlbCBmb3IgYW4gaW50ZXJuYWwgc3RhdGljIHZhcmlhYmxlIHdob3NlIG5hbWUgaXMKKytOQU1FLiAgVGhlcmVmb3JlLCB0aGUgc3RyaW5nIG11c3QgYmUgc3VjaCBhcyB0byByZXN1bHQgaW4gdmFsaWQKKythc3NlbWJsZXIgY29kZS4gIFRoZSBhcmd1bWVudCBOVU1CRVIgaXMgZGlmZmVyZW50IGVhY2ggdGltZSB0aGlzCisrbWFjcm8gaXMgZXhlY3V0ZWQ7IGl0IHByZXZlbnRzIGNvbmZsaWN0cyBiZXR3ZWVuIHNpbWlsYXJseS1uYW1lZAorK2ludGVybmFsIHN0YXRpYyB2YXJpYWJsZXMgaW4gZGlmZmVyZW50IHNjb3Blcy4KKysKKytJZGVhbGx5IHRoaXMgc3RyaW5nIHNob3VsZCBub3QgYmUgYSB2YWxpZCBDIGlkZW50aWZpZXIsIHRvIHByZXZlbnQgYW55CisrY29uZmxpY3Qgd2l0aCB0aGUgdXNlcidzIG93biBzeW1ib2xzLiAgTW9zdCBhc3NlbWJsZXJzIGFsbG93IHBlcmlvZHMKKytvciBwZXJjZW50IHNpZ25zIGluIGFzc2VtYmxlciBzeW1ib2xzOyBwdXR0aW5nIGF0IGxlYXN0IG9uZSBvZiB0aGVzZQorK2JldHdlZW4gdGhlIG5hbWUgYW5kIHRoZSBudW1iZXIgd2lsbCBzdWZmaWNlLgorKyovCisrI2RlZmluZSBBU01fRk9STUFUX1BSSVZBVEVfTkFNRShPVVRWQVIsIE5BTUUsIE5VTUJFUikJCVwKKysgIGRvCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCVwKKysgICAgICAoT1VUVkFSKSA9IChjaGFyICopIGFsbG9jYSAoc3RybGVuICgoTkFNRSkpICsgMTApOwlcCisrICAgICAgc3ByaW50ZiAoKE9VVFZBUiksICIlcy4lZCIsIChOQU1FKSwgKE5VTUJFUikpOwkJXAorKyAgICB9CQkJCQkJCQlcCisrICB3aGlsZSAoMCkKKysKKysKKysvKiogTWFjcm9zIENvbnRyb2xsaW5nIEluaXRpYWxpemF0aW9uIFJvdXRpbmVzICoqLworKworKworKy8qCisrSWYgZGVmaW5lZCwgbWFpbiB3aWxsIG5vdCBjYWxsIF9fbWFpbiBhcyBkZXNjcmliZWQgYWJvdmUuCisrVGhpcyBtYWNybyBzaG91bGQgYmUgZGVmaW5lZCBmb3Igc3lzdGVtcyB0aGF0IGNvbnRyb2wgc3RhcnQtdXAgY29kZQorK29uIGEgc3ltYm9sLWJ5LXN5bWJvbCBiYXNpcywgc3VjaCBhcyBPU0YvMSwgYW5kIHNob3VsZCBub3QKKytiZSBkZWZpbmVkIGV4cGxpY2l0bHkgZm9yIHN5c3RlbXMgdGhhdCBzdXBwb3J0IElOSVRfU0VDVElPTl9BU01fT1AuCisrKi8KKysvKgorKyAgX19tYWluIGlzIG5vdCBkZWZpbmVkIHdoZW4gZGVidWdnaW5nLgorKyovCisrI2RlZmluZSBIQVNfSU5JVF9TRUNUSU9OCisrCisrCisrLyoqIE91dHB1dCBvZiBBc3NlbWJsZXIgSW5zdHJ1Y3Rpb25zICoqLworKworKy8qCisrQSBDIGluaXRpYWxpemVyIGNvbnRhaW5pbmcgdGhlIGFzc2VtYmxlcidzIG5hbWVzIGZvciB0aGUgbWFjaGluZQorK3JlZ2lzdGVycywgZWFjaCBvbmUgYXMgYSBDIHN0cmluZyBjb25zdGFudC4gIFRoaXMgaXMgd2hhdCB0cmFuc2xhdGVzCisrcmVnaXN0ZXIgbnVtYmVycyBpbiB0aGUgY29tcGlsZXIgaW50byBhc3NlbWJsZXIgbGFuZ3VhZ2UuCisrKi8KKysKKysjZGVmaW5lIFJFR0lTVEVSX05BTUVTCVwKKyt7CQkJXAorKyAgInBjIiwgICJsciIsCQlcCisrICAic3AiLCAgInIxMiIsCQlcCisrICAicjExIiwgInIxMCIsCQlcCisrICAicjkiLCAgInI4IiwJCVwKKysgICJyNyIsICAicjYiLAkJXAorKyAgInI1IiwgICJyNCIsCQlcCisrICAicjMiLCAgInIyIiwJCVwKKysgICJyMSIsICAicjAiLAkJXAorKyAgImYxNSIsImYxNCIsCQlcCisrICAiZjEzIiwiZjEyIiwJCVwKKysgICJmMTEiLCJmMTAiLAkJXAorKyAgImY5IiwgImY4IiwJCVwKKysgICJmNyIsICJmNiIsCQlcCisrICAiZjUiLCAiZjQiLAkJXAorKyAgImYzIiwgImYyIiwJCVwKKysgICJmMSIsICJmMCIJCVwKKyt9CisrCisrLyoKKytBIEMgY29tcG91bmQgc3RhdGVtZW50IHRvIG91dHB1dCB0byBzdGRpbyBzdHJlYW0gU1RSRUFNIHRoZQorK2Fzc2VtYmxlciBzeW50YXggZm9yIGFuIGluc3RydWN0aW9uIG9wZXJhbmQgWC4gIFggaXMgYW4KKytSVEwgZXhwcmVzc2lvbi4KKysKKytDT0RFIGlzIGEgdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvZiBzZXZlcmFsIHdheXMKKytvZiBwcmludGluZyB0aGUgb3BlcmFuZC4gIEl0IGlzIHVzZWQgd2hlbiBpZGVudGljYWwgb3BlcmFuZHMgbXVzdCBiZQorK3ByaW50ZWQgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LiAgQ09ERSBjb21lcyBmcm9tCisrdGhlICclJyBzcGVjaWZpY2F0aW9uIHRoYXQgd2FzIHVzZWQgdG8gcmVxdWVzdCBwcmludGluZyBvZiB0aGUKKytvcGVyYW5kLiAgSWYgdGhlIHNwZWNpZmljYXRpb24gd2FzIGp1c3QgJyVkaWdpdCcgdGhlbgorK0NPREUgaXMgMDsgaWYgdGhlIHNwZWNpZmljYXRpb24gd2FzICclbHRyIGRpZ2l0JworK3RoZW4gQ09ERSBpcyB0aGUgQVNDSUkgY29kZSBmb3IgbHRyLgorKworK0lmIFggaXMgYSByZWdpc3RlciwgdGhpcyBtYWNybyBzaG91bGQgcHJpbnQgdGhlIHJlZ2lzdGVyJ3MgbmFtZS4KKytUaGUgbmFtZXMgY2FuIGJlIGZvdW5kIGluIGFuIGFycmF5IHJlZ19uYW1lcyB3aG9zZSB0eXBlIGlzCisrY2hhciAqW10uICByZWdfbmFtZXMgaXMgaW5pdGlhbGl6ZWQgZnJvbSBSRUdJU1RFUl9OQU1FUy4KKysKKytXaGVuIHRoZSBtYWNoaW5lIGRlc2NyaXB0aW9uIGhhcyBhIHNwZWNpZmljYXRpb24gJyVwdW5jdCcKKysoYSAnJScgZm9sbG93ZWQgYnkgYSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXIpLCB0aGlzIG1hY3JvIGlzIGNhbGxlZAorK3dpdGggYSBudWxsIHBvaW50ZXIgZm9yIFggYW5kIHRoZSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXIgZm9yCisrQ09ERS4KKysqLworKyNkZWZpbmUgUFJJTlRfT1BFUkFORChTVFJFQU0sIFgsIENPREUpIGF2cjMyX3ByaW50X29wZXJhbmQoU1RSRUFNLCBYLCBDT0RFKQorKworKy8qIEEgQyBzdGF0ZW1lbnQgdG8gYmUgZXhlY3V0ZWQganVzdCBwcmlvciB0byB0aGUgb3V0cHV0IG9mCisrICAgYXNzZW1ibGVyIGNvZGUgZm9yIElOU04sIHRvIG1vZGlmeSB0aGUgZXh0cmFjdGVkIG9wZXJhbmRzIHNvCisrICAgdGhleSB3aWxsIGJlIG91dHB1dCBkaWZmZXJlbnRseS4KKysKKysgICBIZXJlIHRoZSBhcmd1bWVudCBPUFZFQyBpcyB0aGUgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG9wZXJhbmRzCisrICAgZXh0cmFjdGVkIGZyb20gSU5TTiwgYW5kIE5PUEVSQU5EUyBpcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9mCisrICAgdGhlIHZlY3RvciB3aGljaCBjb250YWluIG1lYW5pbmdmdWwgZGF0YSBmb3IgdGhpcyBpbnNuLgorKyAgIFRoZSBjb250ZW50cyBvZiB0aGlzIHZlY3RvciBhcmUgd2hhdCB3aWxsIGJlIHVzZWQgdG8gY29udmVydCB0aGUgaW5zbgorKyAgIHRlbXBsYXRlIGludG8gYXNzZW1ibGVyIGNvZGUsIHNvIHlvdSBjYW4gY2hhbmdlIHRoZSBhc3NlbWJsZXIgb3V0cHV0CisrICAgYnkgY2hhbmdpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSB2ZWN0b3IuICAqLworKyNkZWZpbmUgRklOQUxfUFJFU0NBTl9JTlNOKElOU04sIE9QVkVDLCBOT1BFUkFORFMpIFwKKysgIGF2cjMyX2ZpbmFsX3ByZXNjYW5faW5zbiAoKElOU04pLCAoT1BWRUMpLCAoTk9QRVJBTkRTKSkKKysKKysvKgorK0EgQyBleHByZXNzaW9uIHdoaWNoIGV2YWx1YXRlcyB0byB0cnVlIGlmIENPREUgaXMgYSB2YWxpZAorK3B1bmN0dWF0aW9uIGNoYXJhY3RlciBmb3IgdXNlIGluIHRoZSBQUklOVF9PUEVSQU5EIG1hY3JvLiAgSWYKKytQUklOVF9PUEVSQU5EX1BVTkNUX1ZBTElEX1AgaXMgbm90IGRlZmluZWQsIGl0IG1lYW5zIHRoYXQgbm8KKytwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzIChleGNlcHQgZm9yIHRoZSBzdGFuZGFyZCBvbmUsICclJykgYXJlIHVzZWQKKytpbiB0aGlzIHdheS4KKysqLworKyNkZWZpbmUgUFJJTlRfT1BFUkFORF9QVU5DVF9WQUxJRF9QKENPREUpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAoKChDT0RFKSA9PSAnPycpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICB8fCAoKENPREUpID09ICchJykpCisrCisrLyoKKytBIEMgY29tcG91bmQgc3RhdGVtZW50IHRvIG91dHB1dCB0byBzdGRpbyBzdHJlYW0gU1RSRUFNIHRoZQorK2Fzc2VtYmxlciBzeW50YXggZm9yIGFuIGluc3RydWN0aW9uIG9wZXJhbmQgdGhhdCBpcyBhIG1lbW9yeSByZWZlcmVuY2UKKyt3aG9zZSBhZGRyZXNzIGlzIFguICBYIGlzIGFuIFJUTCBleHByZXNzaW9uLgorKworK09uIHNvbWUgbWFjaGluZXMsIHRoZSBzeW50YXggZm9yIGEgc3ltYm9saWMgYWRkcmVzcyBkZXBlbmRzIG9uIHRoZQorK3NlY3Rpb24gdGhhdCB0aGUgYWRkcmVzcyByZWZlcnMgdG8uICBPbiB0aGVzZSBtYWNoaW5lcywgZGVmaW5lIHRoZSBtYWNybworK0VOQ09ERV9TRUNUSU9OX0lORk8gdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9uIGludG8gdGhlCisrc3ltYm9sX3JlZiwgYW5kIHRoZW4gY2hlY2sgZm9yIGl0IGhlcmUuICAoc2VlIEFzc2VtYmxlciBGb3JtYXQuKQorKyovCisrI2RlZmluZSBQUklOVF9PUEVSQU5EX0FERFJFU1MoU1RSRUFNLCBYKSBhdnIzMl9wcmludF9vcGVyYW5kX2FkZHJlc3MoU1RSRUFNLCBYKQorKworKworKy8qKiBPdXRwdXQgb2YgRGlzcGF0Y2ggVGFibGVzICoqLworKworKy8qCisrICogQSBDIHN0YXRlbWVudCB0byBvdXRwdXQgdG8gdGhlIHN0ZGlvIHN0cmVhbSBzdHJlYW0gYW4gYXNzZW1ibGVyCisrICogcHNldWRvLWluc3RydWN0aW9uIHRvIGdlbmVyYXRlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3bworKyAqIGxhYmVscy4gdmFsdWUgYW5kIHJlbCBhcmUgdGhlIG51bWJlcnMgb2YgdHdvIGludGVybmFsIGxhYmVscy4gVGhlCisrICogZGVmaW5pdGlvbnMgb2YgdGhlc2UgbGFiZWxzIGFyZSBvdXRwdXQgdXNpbmcKKysgKiAoKnRhcmdldG0uYXNtX291dC5pbnRlcm5hbF9sYWJlbCksIGFuZCB0aGV5IG11c3QgYmUgcHJpbnRlZCBpbiB0aGUKKysgKiBzYW1lIHdheSBoZXJlLiBGb3IgZXhhbXBsZSwKKysgKgorKyAqICAgICAgICAgZnByaW50ZiAoc3RyZWFtLCAiXHQud29yZCBMJWQtTCVkXG4iLAorKyAqICAgICAgICAgICAgICAgICAgdmFsdWUsIHJlbCkKKysgKgorKyAqIFlvdSBtdXN0IHByb3ZpZGUgdGhpcyBtYWNybyBvbiBtYWNoaW5lcyB3aGVyZSB0aGUgYWRkcmVzc2VzIGluIGEKKysgKiBkaXNwYXRjaCB0YWJsZSBhcmUgcmVsYXRpdmUgdG8gdGhlIHRhYmxlJ3Mgb3duIGFkZHJlc3MuIElmIGRlZmluZWQsCisrICogR0NDIHdpbGwgYWxzbyB1c2UgdGhpcyBtYWNybyBvbiBhbGwgbWFjaGluZXMgd2hlbiBwcm9kdWNpbmcKKysgKiBQSUMuIGJvZHkgaXMgdGhlIGJvZHkgb2YgdGhlIEFERFJfRElGRl9WRUM7IGl0IGlzIHByb3ZpZGVkIHNvIHRoYXQKKysgKiB0aGUgbW9kZSBhbmQgZmxhZ3MgY2FuIGJlIHJlYWQuCisrICovCisrI2RlZmluZSBBU01fT1VUUFVUX0FERFJfRElGRl9FTFQoU1RSRUFNLCBCT0RZLCBWQUxVRSwgUkVMKQkgICAgXAorKyAgICBmcHJpbnRmKFNUUkVBTSwgIlx0YnJhbFx0JXNMJWRcbiIsIExPQ0FMX0xBQkVMX1BSRUZJWCwgVkFMVUUpCisrCisrLyoKKytUaGlzIG1hY3JvIHNob3VsZCBiZSBwcm92aWRlZCBvbiBtYWNoaW5lcyB3aGVyZSB0aGUgYWRkcmVzc2VzCisraW4gYSBkaXNwYXRjaCB0YWJsZSBhcmUgYWJzb2x1dGUuCisrCisrVGhlIGRlZmluaXRpb24gc2hvdWxkIGJlIGEgQyBzdGF0ZW1lbnQgdG8gb3V0cHV0IHRvIHRoZSBzdGRpbyBzdHJlYW0KKytTVFJFQU0gYW4gYXNzZW1ibGVyIHBzZXVkby1pbnN0cnVjdGlvbiB0byBnZW5lcmF0ZSBhIHJlZmVyZW5jZSB0bworK2EgbGFiZWwuICBWQUxVRSBpcyB0aGUgbnVtYmVyIG9mIGFuIGludGVybmFsIGxhYmVsIHdob3NlCisrZGVmaW5pdGlvbiBpcyBvdXRwdXQgdXNpbmcgQVNNX09VVFBVVF9JTlRFUk5BTF9MQUJFTC4KKytGb3IgZXhhbXBsZSwKKysKKytmcHJpbnRmKFNUUkVBTSwgIlx0LndvcmQgTCVkXG4iLCBWQUxVRSkKKysqLworKworKyNkZWZpbmUgQVNNX09VVFBVVF9BRERSX1ZFQ19FTFQoU1RSRUFNLCBWQUxVRSkgIFwKKysgIGZwcmludGYoU1RSRUFNLCAiXHQubG9uZyAlc0wlZFxuIiwgTE9DQUxfTEFCRUxfUFJFRklYLCBWQUxVRSkKKysKKysvKiogQXNzZW1ibGVyIENvbW1hbmRzIGZvciBFeGNlcHRpb24gUmVnaW9ucyAqLworKworKy8qIFRvRG86IEFsbCBvZiB0aGlzIHN1YnNlY3Rpb24gKi8KKysKKysvKiogQXNzZW1ibGVyIENvbW1hbmRzIGZvciBBbGlnbm1lbnQgKi8KKysKKysKKysvKgorK0EgQyBzdGF0ZW1lbnQgdG8gb3V0cHV0IHRvIHRoZSBzdGRpbyBzdHJlYW0gU1RSRUFNIGFuIGFzc2VtYmxlcgorK2NvbW1hbmQgdG8gYWR2YW5jZSB0aGUgbG9jYXRpb24gY291bnRlciB0byBhIG11bHRpcGxlIG9mIDIgdG8gdGhlCisrUE9XRVIgYnl0ZXMuICBQT1dFUiB3aWxsIGJlIGEgQyBleHByZXNzaW9uIG9mIHR5cGUgaW50LgorKyovCisrI2RlZmluZSBBU01fT1VUUFVUX0FMSUdOKFNUUkVBTSwgUE9XRVIpCQkJXAorKyAgZG8JCQkJCQkJXAorKyAgICB7CQkJCQkJCVwKKysgICAgICBpZiAoKFBPV0VSKSAhPSAwKQkJCQkJXAorKwlmcHJpbnRmKFNUUkVBTSwgIlx0LmFsaWduXHQlZFxuIiwgUE9XRVIpOwlcCisrICAgIH0JCQkJCQkJXAorKyAgd2hpbGUgKDApCisrCisrLyoKKytMaWtlIEFTTV9PVVRQVVRfQUxJR04sIGV4Y2VwdCB0aGF0IHRoZSBcbm9wIiBpbnN0cnVjdGlvbiBpcyB1c2VkIGZvciBwYWRkaW5nLCBpZgorK25lY2Vzc2FyeS4KKysqLworKyNkZWZpbmUgQVNNX09VVFBVVF9BTElHTl9XSVRIX05PUChTVFJFQU0sIFBPV0VSKSBcCisrIGZwcmludGYoU1RSRUFNLCAiXHQuYmFsaWdud1x0JWQsIDB4ZDcwM1xuIiwgKDEgPDwgUE9XRVIpKQorKworKworKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysgKiBDb250cm9sbGluZyBEZWJ1Z2dpbmcgSW5mb3JtYXRpb24gRm9ybWF0CisrICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworKy8qIEhvdyB0byByZW51bWJlciByZWdpc3RlcnMgZm9yIGRieCBhbmQgZ2RiLiAgKi8KKysjZGVmaW5lIERCWF9SRUdJU1RFUl9OVU1CRVIoUkVHTk8pIEFTTV9SRUdOVU0gKFJFR05PKQorKworKy8qIFRoZSBEV0FSRiAyIENGQSBjb2x1bW4gd2hpY2ggdHJhY2tzIHRoZSByZXR1cm4gYWRkcmVzcy4gICovCisrI2RlZmluZSBEV0FSRl9GUkFNRV9SRVRVUk5fQ09MVU1OIERXQVJGX0ZSQU1FX1JFR05VTShMUl9SRUdOVU0pCisrCisrLyoKKytEZWZpbmUgdGhpcyBtYWNybyBpZiBHQ0Mgc2hvdWxkIHByb2R1Y2UgZHdhcmYgdmVyc2lvbiAyIGZvcm1hdAorK2RlYnVnZ2luZyBvdXRwdXQgaW4gcmVzcG9uc2UgdG8gdGhlIC1nIG9wdGlvbi4KKysKKytUbyBzdXBwb3J0IG9wdGlvbmFsIGNhbGwgZnJhbWUgZGVidWdnaW5nIGluZm9ybWF0aW9uLCB5b3UgbXVzdCBhbHNvCisrZGVmaW5lIElOQ09NSU5HX1JFVFVSTl9BRERSX1JUWCBhbmQgZWl0aGVyIHNldAorK1JUWF9GUkFNRV9SRUxBVEVEX1Agb24gdGhlIHByb2xvZ3VlIGluc25zIGlmIHlvdSB1c2UgUlRMIGZvciB0aGUKKytwcm9sb2d1ZSwgb3IgY2FsbCBkd2FyZjJvdXRfZGVmX2NmYSBhbmQgZHdhcmYyb3V0X3JlZ19zYXZlCisrYXMgYXBwcm9wcmlhdGUgZnJvbSBUQVJHRVRfQVNNX0ZVTkNUSU9OX1BST0xPR1VFIGlmIHlvdSBkb24ndC4KKysqLworKyNkZWZpbmUgRFdBUkYyX0RFQlVHR0lOR19JTkZPIDEKKysKKysKKysjZGVmaW5lIERXQVJGMl9BU01fTElORV9ERUJVR19JTkZPIDEKKysjZGVmaW5lIERXQVJGMl9GUkFNRV9JTkZPIDEKKysKKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisrICogTWlzY2VsbGFuZW91cyBQYXJhbWV0ZXJzCisrICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworKy8qIFRvRG86IGEgbG90ICovCisrCisrLyoKKytBbiBhbGlhcyBmb3IgYSBtYWNoaW5lIG1vZGUgbmFtZS4gIFRoaXMgaXMgdGhlIG1hY2hpbmUgbW9kZSB0aGF0CisrZWxlbWVudHMgb2YgYSBqdW1wLXRhYmxlIHNob3VsZCBoYXZlLgorKyovCisrI2RlZmluZSBDQVNFX1ZFQ1RPUl9NT0RFIFNJbW9kZQorKworKy8qCisrRGVmaW5lIHRoaXMgbWFjcm8gdG8gYmUgYSBDIGV4cHJlc3Npb24gdG8gaW5kaWNhdGUgd2hlbiBqdW1wLXRhYmxlcworK3Nob3VsZCBjb250YWluIHJlbGF0aXZlIGFkZHJlc3Nlcy4gIElmIGp1bXAtdGFibGVzIG5ldmVyIGNvbnRhaW4KKytyZWxhdGl2ZSBhZGRyZXNzZXMsIHRoZW4geW91IG5lZWQgbm90IGRlZmluZSB0aGlzIG1hY3JvLgorKyovCisrI2RlZmluZSBDQVNFX1ZFQ1RPUl9QQ19SRUxBVElWRSAwCisrCisrLyogSW5jcmVhc2UgdGhlIHRocmVzaG9sZCBmb3IgdXNpbmcgdGFibGUganVtcHMgb24gdGhlIFVDIGFyY2guICovCisrI2RlZmluZSBDQVNFX1ZBTFVFU19USFJFU0hPTEQgIChUQVJHRVRfQlJBTkNIX1BSRUQgPyA0IDogNykKKysKKysvKgorK1RoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGF0IGEgc2luZ2xlIGluc3RydWN0aW9uIGNhbiBtb3ZlIHF1aWNrbHkKKytiZXR3ZWVuIG1lbW9yeSBhbmQgcmVnaXN0ZXJzIG9yIGJldHdlZW4gdHdvIG1lbW9yeSBsb2NhdGlvbnMuCisrKi8KKysjZGVmaW5lIE1PVkVfTUFYICgyKlVOSVRTX1BFUl9XT1JEKQorKworKworKy8qIEEgQyBleHByZXNzaW9uIHRoYXQgaXMgbm9uemVybyBpZiBvbiB0aGlzIG1hY2hpbmUgdGhlIG51bWJlciBvZiBiaXRzIGFjdHVhbGx5IHVzZWQKKysgICBmb3IgdGhlIGNvdW50IG9mIGEgc2hpZnQgb3BlcmF0aW9uIGlzIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgYml0cyBuZWVkZWQgdG8gcmVwcmVzZW50CisrICAgdGhlIHNpemUgb2YgdGhlIG9iamVjdCBiZWluZyBzaGlmdGVkLiBXaGVuIHRoaXMgbWFjcm8gaXMgbm9uemVybywgdGhlIGNvbXBpbGVyIHdpbGwKKysgICBhc3N1bWUgdGhhdCBpdCBpcyBzYWZlIHRvIG9taXQgYSBzaWduLWV4dGVuZCwgemVyby1leHRlbmQsIGFuZCBjZXJ0YWluIGJpdHdpc2UgJ2FuZCcKKysgICBpbnN0cnVjdGlvbnMgdGhhdCB0cnVuY2F0ZXMgdGhlIGNvdW50IG9mIGEgc2hpZnQgb3BlcmF0aW9uLiBPbiBtYWNoaW5lcyB0aGF0IGhhdmUKKysgICBpbnN0cnVjdGlvbnMgdGhhdCBhY3Qgb24gYml0LWZpZWxkcyBhdCB2YXJpYWJsZSBwb3NpdGlvbnMsIHdoaWNoIG1heSBpbmNsdWRlICdiaXQgdGVzdCcKKysgICAzNzggR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykgSW50ZXJuYWxzCisrICAgaW5zdHJ1Y3Rpb25zLCBhIG5vbnplcm8gU0hJRlRfQ09VTlRfVFJVTkNBVEVEIGFsc28gZW5hYmxlcyBkZWxldGlvbiBvZiB0cnVuY2F0aW9ucworKyAgIG9mIHRoZSB2YWx1ZXMgdGhhdCBzZXJ2ZSBhcyBhcmd1bWVudHMgdG8gYml0LWZpZWxkIGluc3RydWN0aW9ucy4KKysgICBJZiBib3RoIHR5cGVzIG9mIGluc3RydWN0aW9ucyB0cnVuY2F0ZSB0aGUgY291bnQgKGZvciBzaGlmdHMpIGFuZCBwb3NpdGlvbiAoZm9yIGJpdC1maWVsZAorKyAgIG9wZXJhdGlvbnMpLCBvciBpZiBubyB2YXJpYWJsZS1wb3NpdGlvbiBiaXQtZmllbGQgaW5zdHJ1Y3Rpb25zIGV4aXN0LCB5b3Ugc2hvdWxkIGRlZmluZQorKyAgIHRoaXMgbWFjcm8uCisrICAgSG93ZXZlciwgb24gc29tZSBtYWNoaW5lcywgc3VjaCBhcyB0aGUgODAzODYgYW5kIHRoZSA2ODB4MCwgdHJ1bmNhdGlvbiBvbmx5IGFwcGxpZXMKKysgICB0byBzaGlmdCBvcGVyYXRpb25zIGFuZCBub3QgdGhlIChyZWFsIG9yIHByZXRlbmRlZCkgYml0LWZpZWxkIG9wZXJhdGlvbnMuIERlZmluZSBTSElGVF8KKysgICBDT1VOVF9UUlVOQ0FURUQgdG8gYmUgemVybyBvbiBzdWNoIG1hY2hpbmVzLiBJbnN0ZWFkLCBhZGQgcGF0dGVybnMgdG8gdGhlICdtZCcgZmlsZQorKyAgIHRoYXQgaW5jbHVkZSB0aGUgaW1wbGllZCB0cnVuY2F0aW9uIG9mIHRoZSBzaGlmdCBpbnN0cnVjdGlvbnMuCisrICAgWW91IG5lZWQgbm90IGRlDG5lIHRoaXMgbWFjcm8gaWYgaXQgd291bGQgYWx3YXlzIGhhdmUgdGhlIHZhbHVlIG9mIHplcm8uICovCisrI2RlZmluZSBTSElGVF9DT1VOVF9UUlVOQ0FURUQgMQorKworKy8qCisrQSBDIGV4cHJlc3Npb24gd2hpY2ggaXMgbm9uemVybyBpZiBvbiB0aGlzIG1hY2hpbmUgaXQgaXMgc2FmZSB0bworK2NvbnZlcnQgYW4gaW50ZWdlciBvZiBJTlBSRUMgYml0cyB0byBvbmUgb2YgT1VUUFJFQworK2JpdHMgKHdoZXJlIE9VVFBSRUMgaXMgc21hbGxlciB0aGFuIElOUFJFQykgYnkgbWVyZWx5Cisrb3BlcmF0aW5nIG9uIGl0IGFzIGlmIGl0IGhhZCBvbmx5IE9VVFBSRUMgYml0cy4KKysKKytPbiBtYW55IG1hY2hpbmVzLCB0aGlzIGV4cHJlc3Npb24gY2FuIGJlIDEuCisrCisrV2hlbiBUUlVMWV9OT09QX1RSVU5DQVRJT04gcmV0dXJucyAxIGZvciBhIHBhaXIgb2Ygc2l6ZXMgZm9yCisrbW9kZXMgZm9yIHdoaWNoIE1PREVTX1RJRUFCTEVfUCBpcyAwLCBzdWJvcHRpbWFsIGNvZGUgY2FuIHJlc3VsdC4KKytJZiB0aGlzIGlzIHRoZSBjYXNlLCBtYWtpbmcgVFJVTFlfTk9PUF9UUlVOQ0FUSU9OIHJldHVybiAwIGluCisrc3VjaCBjYXNlcyBtYXkgaW1wcm92ZSB0aGluZ3MuCisrKi8KKysjZGVmaW5lIFRSVUxZX05PT1BfVFJVTkNBVElPTihPVVRQUkVDLCBJTlBSRUMpIDEKKysKKysvKgorK0FuIGFsaWFzIGZvciB0aGUgbWFjaGluZSBtb2RlIGZvciBwb2ludGVycy4gIE9uIG1vc3QgbWFjaGluZXMsIGRlZmluZQorK3RoaXMgdG8gYmUgdGhlIGludGVnZXIgbW9kZSBjb3JyZXNwb25kaW5nIHRvIHRoZSB3aWR0aCBvZiBhIGhhcmR3YXJlCisrcG9pbnRlcjsgU0ltb2RlIG9uIDMyLWJpdCBtYWNoaW5lIG9yIERJbW9kZSBvbiA2NC1iaXQgbWFjaGluZXMuCisrT24gc29tZSBtYWNoaW5lcyB5b3UgbXVzdCBkZWZpbmUgdGhpcyB0byBiZSBvbmUgb2YgdGhlIHBhcnRpYWwgaW50ZWdlcgorK21vZGVzLCBzdWNoIGFzIFBTSW1vZGUuCisrCisrVGhlIHdpZHRoIG9mIFBtb2RlIG11c3QgYmUgYXQgbGVhc3QgYXMgbGFyZ2UgYXMgdGhlIHZhbHVlIG9mCisrUE9JTlRFUl9TSVpFLiAgSWYgaXQgaXMgbm90IGVxdWFsLCB5b3UgbXVzdCBkZWZpbmUgdGhlIG1hY3JvCisrUE9JTlRFUlNfRVhURU5EX1VOU0lHTkVEIHRvIHNwZWNpZnkgaG93IHBvaW50ZXJzIGFyZSBleHRlbmRlZAorK3RvIFBtb2RlLgorKyovCisrI2RlZmluZSBQbW9kZSBTSW1vZGUKKysKKysvKgorK0FuIGFsaWFzIGZvciB0aGUgbWFjaGluZSBtb2RlIHVzZWQgZm9yIG1lbW9yeSByZWZlcmVuY2VzIHRvIGZ1bmN0aW9ucworK2JlaW5nIGNhbGxlZCwgaW4gY2FsbCBSVEwgZXhwcmVzc2lvbnMuICBPbiBtb3N0IG1hY2hpbmVzIHRoaXMKKytzaG91bGQgYmUgUUltb2RlLgorKyovCisrI2RlZmluZSBGVU5DVElPTl9NT0RFIFNJbW9kZQorKworKworKyNkZWZpbmUgUkVHX1NfUCh4KSBcCisrIChSRUdfUCAoeCkgfHwgKEdFVF9DT0RFICh4KSA9PSBTVUJSRUcgJiYgUkVHX1AgKFhFWFAgKHgsIDApKSkpCisrCisrCisrLyogSWYgZGVmaW5lZCwgbW9kaWZpZXMgdGhlIGxlbmd0aCBhc3NpZ25lZCB0byBpbnN0cnVjdGlvbiBJTlNOIGFzIGEKKysgICBmdW5jdGlvbiBvZiB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBpcyB1c2VkLiAgTEVOR1RIIGlzIGFuIGx2YWx1ZQorKyAgIHRoYXQgY29udGFpbnMgdGhlIGluaXRpYWxseSBjb21wdXRlZCBsZW5ndGggb2YgdGhlIGluc24gYW5kIHNob3VsZAorKyAgIGJlIHVwZGF0ZWQgd2l0aCB0aGUgY29ycmVjdCBsZW5ndGggb2YgdGhlIGluc24uICAqLworKyNkZWZpbmUgQURKVVNUX0lOU05fTEVOR1RIKElOU04sIExFTkdUSCkgXAorKyAgKChMRU5HVEgpID0gYXZyMzJfYWRqdXN0X2luc25fbGVuZ3RoICgoSU5TTiksIChMRU5HVEgpKSkKKysKKysKKysjZGVmaW5lIENMWl9ERUZJTkVEX1ZBTFVFX0FUX1pFUk8obW9kZSwgdmFsdWUpIFwKKysgICh2YWx1ZSA9IDMyLCAobW9kZSA9PSBTSW1vZGUpKQorKworKyNkZWZpbmUgQ1RaX0RFRklORURfVkFMVUVfQVRfWkVSTyhtb2RlLCB2YWx1ZSkgXAorKyAgKHZhbHVlID0gMzIsIChtb2RlID09IFNJbW9kZSkpCisrCisrI2RlZmluZSBVTklUU19QRVJfU0lNRF9XT1JEIFVOSVRTX1BFUl9XT1JECisrCisrI2RlZmluZSBTVE9SRV9GTEFHX1ZBTFVFIDEKKysKKysKKysvKiBJRi1jb252ZXJzaW9uIG1hY3Jvcy4gKi8KKysjZGVmaW5lIElGQ1ZUX01PRElGWV9JTlNOKCBDRV9JTkZPLCBQQVRURVJOLCBJTlNOICkgICAgICAgICAgICAgICAgICAgICBcCisrICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAoUEFUVEVSTikgPSBhdnIzMl9pZmN2dF9tb2RpZnlfaW5zbiAoQ0VfSU5GTywgUEFUVEVSTiwgSU5TTiwgJm51bV90cnVlX2NoYW5nZXMpOyBcCisrICB9CisrCisrI2RlZmluZSBJRkNWVF9FWFRSQV9GSUVMRFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBpbnQgbnVtX2NvbmRfY2xvYmJlcl9pbnNuczsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBpbnQgbnVtX2V4dHJhX21vdmVfaW5zbnM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBydHggZXh0cmFfbW92ZV9pbnNuc1tNQVhfQ09ORElUSU9OQUxfRVhFQ1VURV07ICAgICAgICBcCisrICBydHggbW92ZWRfaW5zbnNbTUFYX0NPTkRJVElPTkFMX0VYRUNVVEVdOworKworKyNkZWZpbmUgSUZDVlRfSU5JVF9FWFRSQV9GSUVMRFMoIENFX0lORk8gKSAgICAgICBcCisrICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgKENFX0lORk8pLT5udW1fY29uZF9jbG9iYmVyX2luc25zID0gMDsgICAgICAgXAorKyAgICAoQ0VfSU5GTyktPm51bV9leHRyYV9tb3ZlX2luc25zID0gMDsgICAgICAgICBcCisrICB9CisrCisrCisrI2RlZmluZSBJRkNWVF9NT0RJRllfQ0FOQ0VMKCBDRV9JTkZPICkgIGF2cjMyX2lmY3Z0X21vZGlmeV9jYW5jZWwgKENFX0lORk8sICZudW1fdHJ1ZV9jaGFuZ2VzKQorKworKyNkZWZpbmUgSUZDVlRfQUxMT1dfTU9ESUZZX1RFU1RfSU5fSU5TTiAxCisrI2RlZmluZSBJRkNWVF9DT05EX0VYRUNfQkVGT1JFX1JFTE9BRCAoVEFSR0VUX0NPTkRfRVhFQ19CRUZPUkVfUkVMT0FEKQorKworK2VudW0gYXZyMzJfYnVpbHRpbnMKKyt7CisrICBBVlIzMl9CVUlMVElOX01UU1IsCisrICBBVlIzMl9CVUlMVElOX01GU1IsCisrICBBVlIzMl9CVUlMVElOX01URFIsCisrICBBVlIzMl9CVUlMVElOX01GRFIsCisrICBBVlIzMl9CVUlMVElOX0NBQ0hFLAorKyAgQVZSMzJfQlVJTFRJTl9TWU5DLAorKyAgQVZSMzJfQlVJTFRJTl9TU1JGLAorKyAgQVZSMzJfQlVJTFRJTl9DU1JGLAorKyAgQVZSMzJfQlVJTFRJTl9UTEJSLAorKyAgQVZSMzJfQlVJTFRJTl9UTEJTLAorKyAgQVZSMzJfQlVJTFRJTl9UTEJXLAorKyAgQVZSMzJfQlVJTFRJTl9CUkVBS1BPSU5ULAorKyAgQVZSMzJfQlVJTFRJTl9YQ0hHLAorKyAgQVZSMzJfQlVJTFRJTl9MRFhJLAorKyAgQVZSMzJfQlVJTFRJTl9CU1dBUDE2LAorKyAgQVZSMzJfQlVJTFRJTl9CU1dBUDMyLAorKyAgQVZSMzJfQlVJTFRJTl9DT1AsCisrICBBVlIzMl9CVUlMVElOX01WQ1JfVywKKysgIEFWUjMyX0JVSUxUSU5fTVZSQ19XLAorKyAgQVZSMzJfQlVJTFRJTl9NVkNSX0QsCisrICBBVlIzMl9CVUlMVElOX01WUkNfRCwKKysgIEFWUjMyX0JVSUxUSU5fTVVMU0FUSEhfSCwKKysgIEFWUjMyX0JVSUxUSU5fTVVMU0FUSEhfVywKKysgIEFWUjMyX0JVSUxUSU5fTVVMU0FUUk5ESEhfSCwKKysgIEFWUjMyX0JVSUxUSU5fTVVMU0FUUk5EV0hfVywKKysgIEFWUjMyX0JVSUxUSU5fTVVMU0FUV0hfVywKKysgIEFWUjMyX0JVSUxUSU5fTUFDU0FUSEhfVywKKysgIEFWUjMyX0JVSUxUSU5fU0FUQUREX0gsCisrICBBVlIzMl9CVUlMVElOX1NBVFNVQl9ILAorKyAgQVZSMzJfQlVJTFRJTl9TQVRBRERfVywKKysgIEFWUjMyX0JVSUxUSU5fU0FUU1VCX1csCisrICBBVlIzMl9CVUlMVElOX01VTFdIX0QsCisrICBBVlIzMl9CVUlMVElOX01VTE5XSF9ELAorKyAgQVZSMzJfQlVJTFRJTl9NQUNXSF9ELAorKyAgQVZSMzJfQlVJTFRJTl9NQUNISF9ELAorKyAgQVZSMzJfQlVJTFRJTl9NVVNGUiwKKysgIEFWUjMyX0JVSUxUSU5fTVVTVFIsCisrICBBVlIzMl9CVUlMVElOX1NBVFMsCisrICBBVlIzMl9CVUlMVElOX1NBVFUsCisrICBBVlIzMl9CVUlMVElOX1NBVFJORFMsCisrICBBVlIzMl9CVUlMVElOX1NBVFJORFUsCisrICBBVlIzMl9CVUlMVElOX01FTVMsCisrICBBVlIzMl9CVUlMVElOX01FTUMsCisrICBBVlIzMl9CVUlMVElOX01FTVQKKyt9OworKworKworKyNkZWZpbmUgRkxPQVRfTElCX0NPTVBBUkVfUkVUVVJOU19CT09MKE1PREUsIENPTVBBUklTT04pIFwKKysgICgoTU9ERSA9PSBTRm1vZGUpIHx8IChNT0RFID09IERGbW9kZSkpCisrCisrI2RlZmluZSBSRU5BTUVfTElCUkFSWV9TRVQgIi5zZXQiCisrCisrLyogTWFrZSBBQklfTkFNRSBhbiBhbGlhcyBmb3IgX19HQ0NfTkFNRS4gICovCisrI2RlZmluZSBSRU5BTUVfTElCUkFSWShHQ0NfTkFNRSwgQUJJX05BTUUpCQlcCisrICBfX2FzbV9fICgiLmdsb2JsXHRfX2F2cjMyXyIgI0FCSV9OQU1FICJcbiIJCVwKKysJICAgIi5zZXRcdF9fYXZyMzJfIiAjQUJJX05BTUUgCVwKKysJICAgICAiLCBfXyIgI0dDQ19OQU1FICJcbiIpOworKworKy8qIEdpdmUgbGliZ2NjIGZ1bmN0aW9ucyBhdnIzMiBBQkkgbmFtZS4gICovCisrI2lmZGVmIExfbXVsZGkzCisrI2RlZmluZSBERUNMQVJFX0xJQlJBUllfUkVOQU1FUyBSRU5BTUVfTElCUkFSWSAobXVsZGkzLCBtdWw2NCkKKysjZW5kaWYKKysjaWZkZWYgTF9kaXZkaTMKKysjZGVmaW5lIERFQ0xBUkVfTElCUkFSWV9SRU5BTUVTIFJFTkFNRV9MSUJSQVJZIChkaXZkaTMsIHNkaXY2NCkKKysjZW5kaWYKKysjaWZkZWYgTF91ZGl2ZGkzCisrI2RlZmluZSBERUNMQVJFX0xJQlJBUllfUkVOQU1FUyBSRU5BTUVfTElCUkFSWSAodWRpdmRpMywgdWRpdjY0KQorKyNlbmRpZgorKyNpZmRlZiBMX21vZGRpMworKyNkZWZpbmUgREVDTEFSRV9MSUJSQVJZX1JFTkFNRVMgUkVOQU1FX0xJQlJBUlkgKG1vZGRpMywgc21vZDY0KQorKyNlbmRpZgorKyNpZmRlZiBMX3Vtb2RkaTMKKysjZGVmaW5lIERFQ0xBUkVfTElCUkFSWV9SRU5BTUVTIFJFTkFNRV9MSUJSQVJZICh1bW9kZGkzLCB1bW9kNjQpCisrI2VuZGlmCisrI2lmZGVmIExfYXNobGRpMworKyNkZWZpbmUgREVDTEFSRV9MSUJSQVJZX1JFTkFNRVMgUkVOQU1FX0xJQlJBUlkgKGFzaGxkaTMsIGxzbDY0KQorKyNlbmRpZgorKyNpZmRlZiBMX2xzaHJkaTMKKysjZGVmaW5lIERFQ0xBUkVfTElCUkFSWV9SRU5BTUVTIFJFTkFNRV9MSUJSQVJZIChsc2hyZGkzLCBsc3I2NCkKKysjZW5kaWYKKysjaWZkZWYgTF9hc2hyZGkzCisrI2RlZmluZSBERUNMQVJFX0xJQlJBUllfUkVOQU1FUyBSRU5BTUVfTElCUkFSWSAoYXNocmRpMywgYXNyNjQpCisrI2VuZGlmCisrCisrI2lmZGVmIExfZml4c2ZkaQorKyNkZWZpbmUgREVDTEFSRV9MSUJSQVJZX1JFTkFNRVMgUkVOQU1FX0xJQlJBUlkgKGZpeHNmZGksIGYzMl90b19zNjQpCisrI2VuZGlmCisrI2lmZGVmIExfZml4dW5zc2ZkaQorKyNkZWZpbmUgREVDTEFSRV9MSUJSQVJZX1JFTkFNRVMgUkVOQU1FX0xJQlJBUlkgKGZpeHVuc3NmZGksIGYzMl90b191NjQpCisrI2VuZGlmCisrI2lmZGVmIExfZmxvYXRkaWRmCisrI2RlZmluZSBERUNMQVJFX0xJQlJBUllfUkVOQU1FUyBSRU5BTUVfTElCUkFSWSAoZmxvYXRkaWRmLCBzNjRfdG9fZjY0KQorKyNlbmRpZgorKyNpZmRlZiBMX2Zsb2F0ZGlzZgorKyNkZWZpbmUgREVDTEFSRV9MSUJSQVJZX1JFTkFNRVMgUkVOQU1FX0xJQlJBUlkgKGZsb2F0ZGlzZiwgczY0X3RvX2YzMikKKysjZW5kaWYKKysKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL2djYy9jb25maWcvYXZyMzIvYXZyMzIubWQKK0BAIC0wLDAgKzEsNDg5MyBAQAorKzs7ICAgQVZSMzIgbWFjaGluZSBkZXNjcmlwdGlvbiBmaWxlLgorKzs7ICAgQ29weXJpZ2h0IDIwMDMtMjAwNiBBdG1lbCBDb3Jwb3JhdGlvbi4KKys7OworKzs7ICAgV3JpdHRlbiBieSBSb25ueSBQZWRlcnNlbiwgQXRtZWwgTm9yd2F5LCA8cnBlZGVyc2VuQGF0bWVsLmNvbT4KKys7OworKzs7ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorKzs7CisrOzsgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKzs7ICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKys7OyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrOzsgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKzs7CisrOzsgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKys7OyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrOzsgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrOzsgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKzs7CisrOzsgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKzs7ICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKys7OyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisrCisrOzsgLSotIE1vZGU6IFNjaGVtZSAtKi0KKysKKysoZGVmaW5lX2F0dHIgInR5cGUiICJhbHUsYWx1MixhbHVfc2F0LG11bGhoLG11bHdoLG11bHd3X3csbXVsd3dfZCxkaXYsbWFjaGhfdyxtYWN3d193LG1hY3d3X2QsYnJhbmNoLGNhbGwsbG9hZCxsb2FkX3JtLHN0b3JlLGxvYWQyLGxvYWQ0LHN0b3JlMixzdG9yZTQsZm11bCxmY21wcyxmY21wZCxmY2FzdCxmbXYsZm12Y3B1LGZsZGQsZnN0ZCxmbGRzLGZzdHMsZnN0bSIKKysgIChjb25zdF9zdHJpbmcgImFsdSIpKQorKworKworKyhkZWZpbmVfYXR0ciAiY2MiICJub25lLHNldF92bmN6LHNldF9uY3osc2V0X2N6LHNldF96LHNldF96X2lmX25vdF92MixibGQsY29tcGFyZSxjbXBfY29uZF9pbnNuLGNsb2JiZXIsY2FsbF9zZXQsZnBjb21wYXJlLGZyb21fZnBjYyIKKysgIChjb25zdF9zdHJpbmcgIm5vbmUiKSkKKysKKysKKys7IE5CISBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIGVudW0gYXJjaGl0ZWN0dXJlX3R5cGUgaW4gYXZyMzIuaAorKyhkZWZpbmVfYXR0ciAicGlwZWxpbmUiICJhcCx1Y3IxLHVjcjIsdWNyMm5vbXVsIgorKyAgKGNvbnN0IChzeW1ib2xfcmVmICJhdnIzMl9hcmNoLT5hcmNoX3R5cGUiKSkpCisrCisrOyBJbnNuIGxlbmd0aCBpbiBieXRlcworKyhkZWZpbmVfYXR0ciAibGVuZ3RoIiAiIgorKyAgKGNvbnN0X2ludCA0KSkKKysKKys7IFNpZ25hbCBpZiBhbiBpbnNuIGlzIHByZWRpY2FibGUgYW5kIGhlbmNlIGNhbiBiZSBjb25kaXRpb25hbGx5IGV4ZWN1dGVkLgorKyhkZWZpbmVfYXR0ciAicHJlZGljYWJsZSIgIm5vLHllcyIgKGNvbnN0X3N0cmluZyAibm8iKSkKKysKKys7OyBVc2VzIG9mIFVOU1BFQyBpbiB0aGlzIGZpbGU6CisrKGRlZmluZV9jb25zdGFudHMKKysgIFsoVU5TUEVDX1BVU0hNICAgICAgICAgICAgICAgIDApCisrICAgKFVOU1BFQ19QT1BNICAgICAgICAgICAgICAgICAxKQorKyAgIChVTlNQRUNfVURJVk1PRFNJNF9JTlRFUk5BTAkyKQorKyAgIChVTlNQRUNfRElWTU9EU0k0X0lOVEVSTkFMICAgMykKKysgICAoVU5TUEVDX1NUTSAgICAgICAgICAgICAgICAgIDQpCisrICAgKFVOU1BFQ19MRE0gICAgICAgICAgICAgICAgICA1KQorKyAgIChVTlNQRUNfTU9WU0lDQyAgICAgICAgICAgICAgNikKKysgICAoVU5TUEVDX0FERFNJQ0MgICAgICAgICAgICAgIDcpCisrICAgKFVOU1BFQ19DT05EX01JICAgICAgICAgICAgICA4KQorKyAgIChVTlNQRUNfQ09ORF9QTCAgICAgICAgICAgICAgOSkKKysgICAoVU5TUEVDX1BJQ19TWU0gICAgICAgICAgICAgIDEwKQorKyAgIChVTlNQRUNfUElDX0JBU0UgICAgICAgICAgICAgMTEpCisrICAgKFVOU1BFQ19TVE9SRV9NVUxUSVBMRSAgICAgICAxMikKKysgICAoVU5TUEVDX1NUTUZQICAgICAgICAgICAgICAgIDEzKQorKyAgIChVTlNQRUNfRlBDQ19UT19SRUcgICAgICAgICAgMTQpCisrICAgKFVOU1BFQ19SRUdfVE9fQ0MgICAgICAgICAgICAxNSkKKysgICAoVU5TUEVDX0ZPUkNFX01JTklQT09MICAgICAgIDE2KQorKyAgIChVTlNQRUNfU0FUUyAgICAgICAgICAgICAgICAgMTcpCisrICAgKFVOU1BFQ19TQVRVICAgICAgICAgICAgICAgICAxOCkKKysgICAoVU5TUEVDX1NBVFJORFMgICAgICAgICAgICAgIDE5KQorKyAgIChVTlNQRUNfU0FUUk5EVSAgICAgICAgICAgICAgMjApCisrICBdKQorKworKyhkZWZpbmVfY29uc3RhbnRzCisrICBbKFZVTlNQRUNfRVBJTE9HVUUgICAgICAgICAgICAgICAgICAwKQorKyAgIChWVU5TUEVDX0NBQ0hFICAgICAgICAgICAgICAgICAgICAgMSkKKysgICAoVlVOU1BFQ19NVFNSICAgICAgICAgICAgICAgICAgICAgIDIpCisrICAgKFZVTlNQRUNfTUZTUiAgICAgICAgICAgICAgICAgICAgICAzKQorKyAgIChWVU5TUEVDX0JMT0NLQUdFICAgICAgICAgICAgICAgICAgNCkKKysgICAoVlVOU1BFQ19TWU5DICAgICAgICAgICAgICAgICAgICAgIDUpCisrICAgKFZVTlNQRUNfVExCUiAgICAgICAgICAgICAgICAgICAgICA2KQorKyAgIChWVU5TUEVDX1RMQlcgICAgICAgICAgICAgICAgICAgICAgNykKKysgICAoVlVOU1BFQ19UTEJTICAgICAgICAgICAgICAgICAgICAgIDgpCisrICAgKFZVTlNQRUNfQlJFQUtQT0lOVCAgICAgICAgICAgICAgICA5KQorKyAgIChWVU5TUEVDX01URFIgICAgICAgICAgICAgICAgICAgICAgMTApCisrICAgKFZVTlNQRUNfTUZEUiAgICAgICAgICAgICAgICAgICAgICAxMSkKKysgICAoVlVOU1BFQ19NVkNSICAgICAgICAgICAgICAgICAgICAgIDEyKQorKyAgIChWVU5TUEVDX01WUkMgICAgICAgICAgICAgICAgICAgICAgMTMpCisrICAgKFZVTlNQRUNfQ09QICAgICAgICAgICAgICAgICAgICAgICAxNCkKKysgICAoVlVOU1BFQ19BTElHTiAgICAgICAgICAgICAgICAgICAgIDE1KQorKyAgIChWVU5TUEVDX1BPT0xfU1RBUlQgICAgICAgICAgICAgICAgMTYpCisrICAgKFZVTlNQRUNfUE9PTF9FTkQgICAgICAgICAgICAgICAgICAxNykKKysgICAoVlVOU1BFQ19QT09MXzQgICAgICAgICAgICAgICAgICAgIDE4KQorKyAgIChWVU5TUEVDX1BPT0xfOCAgICAgICAgICAgICAgICAgICAgMTkpCisrICAgKFZVTlNQRUNfUE9PTF8xNiAgICAgICAgICAgICAgICAgICAyMCkKKysgICAoVlVOU1BFQ19NVVNGUiAgICAgICAgICAgICAgICAgICAgIDIxKQorKyAgIChWVU5TUEVDX01VU1RSICAgICAgICAgICAgICAgICAgICAgMjIpCisrICAgKFZVTlNQRUNfU1lOQ19DTVBYQ0hHICAgICAgICAgICAgICAyMykKKysgICAoVlVOU1BFQ19TWU5DX1NFVF9MT0NLX0FORF9MT0FEICAgIDI0KQorKyAgIChWVU5TUEVDX1NZTkNfU1RPUkVfSUZfTE9DSyAgICAgICAgMjUpCisrICAgKFZVTlNQRUNfRUhfUkVUVVJOICAgICAgICAgICAgICAgICAyNikKKysgICAoVlVOU1BFQ19GUlMgICAgICAgICAgICAgICAgICAgICAgIDI3KQorKyAgIChWVU5TUEVDX0NTUkYgICAgICAgICAgICAgICAgICAgICAgMjgpCisrICAgKFZVTlNQRUNfU1NSRiAgICAgICAgICAgICAgICAgICAgICAyOSkKKysgICBdKQorKworKyhkZWZpbmVfY29uc3RhbnRzCisrICBbCisrICAgOzsgUjcgPSAxNS03ID0gOAorKyAgIChGUF9SRUdOVU0gICA4KQorKyAgIDs7IFJldHVybiBSZWdpc3RlciA9IFIxMiA9IDE1IC0gMTIgPSAzCisrICAgKFJFVFZBTF9SRUdOVU0gICAzKQorKyAgIDs7IFNQID0gUjEzID0gMTUgLSAxMyA9IDIKKysgICAoU1BfUkVHTlVNICAgMikKKysgICA7OyBMUiA9IFIxNCA9IDE1IC0gMTQgPSAxCisrICAgKExSX1JFR05VTSAgIDEpCisrICAgOzsgUEMgPSBSMTUgPSAxNSAtIDE1ID0gMAorKyAgIChQQ19SRUdOVU0gICAwKQorKyAgIDs7IEZQU1IgPSBHRU5FUkFMX1JFR1MgKyAxID0gMTcKKysgICAoRlBDQ19SRUdOVU0gMTcpCisrICAgXSkKKysKKysKKysKKysKKys7OyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKzs7IE1hY3JvcworKzs7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisrCisrOzsgSW50ZWdlciBNb2RlcyBmb3IgYmFzaWMgYWx1IGluc25zCisrKGRlZmluZV9tb2RlX21hY3JvIElOVE0gW1NJIEhJIFFJXSkKKysoZGVmaW5lX21vZGVfYXR0ciAgYWx1X2NjX2F0dHIgWyhTSSAic2V0X3ZuY3oiKSAoSEkgImNsb2JiZXIiKSAoUUkgImNsb2JiZXIiKV0pCisrCisrOzsgTW92ZSB3b3JkIG1vZGVzCisrKGRlZmluZV9tb2RlX21hY3JvIE1PVk0gW1NJIFYySEkgVjRRSV0pCisrCisrOzsgRm9yIG1vdi9hZGRjYyBpbnNucworKyhkZWZpbmVfbW9kZV9tYWNybyBBRERDQyBbU0kgSEkgUUldKQorKyhkZWZpbmVfbW9kZV9tYWNybyBNT1ZDQyBbU0YgU0kgSEkgUUldKQorKyhkZWZpbmVfbW9kZV9tYWNybyBDTVAgW0RJIFNJIEhJIFFJXSkKKysoZGVmaW5lX21vZGVfYXR0ciAgc3RvcmVfcG9zdGZpeCBbKFNGICIudyIpIChTSSAiLnciKSAoSEkgIi5oIikgKFFJICIuYiIpXSkKKysoZGVmaW5lX21vZGVfYXR0ciAgbG9hZF9wb3N0Zml4IFsoU0YgIi53IikgKFNJICIudyIpIChISSAiLnNoIikgKFFJICIudWIiKV0pCisrKGRlZmluZV9tb2RlX2F0dHIgIGxvYWRfcG9zdGZpeF9zIFsoU0kgIi53IikgKEhJICIuc2giKSAoUUkgIi5zYiIpXSkKKysoZGVmaW5lX21vZGVfYXR0ciAgbG9hZF9wb3N0Zml4X3UgWyhTSSAiLnciKSAoSEkgIi51aCIpIChRSSAiLnViIildKQorKyhkZWZpbmVfbW9kZV9hdHRyICBwcmVkX21lbV9jb25zdHJhaW50IFsoU0YgIlJLdTExIikgKFNJICJSS3UxMSIpIChISSAiUkt1MTAiKSAoUUkgIlJLdTA5IildKQorKyhkZWZpbmVfbW9kZV9hdHRyICBjbXBfY29uc3RyYWludCBbKERJICJyS3UyMCIpIChTSSAicktzMjEiKSAoSEkgInIiKSAoUUkgInIiKV0pCisrKGRlZmluZV9tb2RlX2F0dHIgIGNtcF9wcmVkaWNhdGUgWyhESSAicmVnaXN0ZXJfaW1tZWRpYXRlX29wZXJhbmQiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0kgInJlZ2lzdGVyX2NvbnN0X2ludF9vcGVyYW5kIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEhJICJyZWdpc3Rlcl9vcGVyYW5kIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFFJICJyZWdpc3Rlcl9vcGVyYW5kIildKQorKyhkZWZpbmVfbW9kZV9hdHRyICBjbXBfbGVuZ3RoIFsoREkgIjYiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0kgIjQiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSEkgIjQiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUUkgIjQiKV0pCisrCisrOzsgRm9yIGFsbCBjb25kaXRpb25hbCBpbnNucworKyhkZWZpbmVfY29kZV9tYWNybyBhbnlfY29uZCBbZXEgbmUgZ3QgZ2UgbHQgbGUgZ3R1IGdldSBsdHUgbGV1XSkKKysoZGVmaW5lX2NvZGVfYXR0ciBjb25kIFsoZXEgImVxIikgKG5lICJuZSIpIChndCAiZ3QiKSAoZ2UgImdlIikgKGx0ICJsdCIpIChsZSAibGUiKQorKyAgICAgICAgICAgICAgICAgICAgICAgIChndHUgImhpIikgKGdldSAiaHMiKSAobHR1ICJsbyIpIChsZXUgImxzIildKQorKyhkZWZpbmVfY29kZV9hdHRyIGludmNvbmQgWyhlcSAibmUiKSAobmUgImVxIikgKGd0ICJsZSIpIChnZSAibHQiKSAobHQgImdlIikgKGxlICJndCIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgKGd0dSAibHMiKSAoZ2V1ICJsbyIpIChsdHUgImhzIikgKGxldSAiaGkiKV0pCisrCisrOzsgRm9yIGxvZ2ljYWwgb3BlcmF0aW9ucworKyhkZWZpbmVfY29kZV9tYWNybyBsb2dpY2FsIFthbmQgaW9yIHhvcl0pCisrKGRlZmluZV9jb2RlX2F0dHIgbG9naWNhbF9pbnNuIFsoYW5kICJhbmQiKSAoaW9yICJvciIpICh4b3IgImVvciIpXSkKKysKKys7OyBQcmVkaWNhYmxlIG9wZXJhdGlvbnMgd2l0aCB0aHJlZSByZWdpc3RlciBvcGVyYW5kcyAKKysoZGVmaW5lX2NvZGVfbWFjcm8gcHJlZGljYWJsZV9vcDMgW2FuZCBpb3IgeG9yIHBsdXMgbWludXNdKQorKyhkZWZpbmVfY29kZV9hdHRyIHByZWRpY2FibGVfaW5zbjMgWyhhbmQgImFuZCIpIChpb3IgIm9yIikgKHhvciAiZW9yIikgKHBsdXMgImFkZCIpIChtaW51cyAic3ViIildKQorKyhkZWZpbmVfY29kZV9hdHRyIHByZWRpY2FibGVfY29tbXV0YXRpdmUzIFsoYW5kICIlIikgKGlvciAiJSIpICh4b3IgIiUiKSAocGx1cyAiJSIpIChtaW51cyAiIildKQorKworKzs7IExvYWQgdGhlIHByZWRpY2F0ZXMKKysoaW5jbHVkZSAicHJlZGljYXRlcy5tZCIpCisrCisrCisrOzsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKys7OyBBdXRvbWF0b24gcGlwZWxpbmUgZGVzY3JpcHRpb24gZm9yIGF2cjMyCisrOzsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysKKysoZGVmaW5lX2F1dG9tYXRvbiAiYXZyMzJfYXAiKQorKworKworKyhkZWZpbmVfY3B1X3VuaXQgImlzIiAiYXZyMzJfYXAiKQorKyhkZWZpbmVfY3B1X3VuaXQgImExLG0xLGRhIiAiYXZyMzJfYXAiKQorKyhkZWZpbmVfY3B1X3VuaXQgImEyLG0yLGQiICJhdnIzMl9hcCIpCisrCisrOztBbHUgaW5zdHJ1Y3Rpb25zCisrKGRlZmluZV9pbnNuX3Jlc2VydmF0aW9uICJhbHVfb3AiIDEKKysgIChhbmQgKGVxX2F0dHIgInBpcGVsaW5lIiAiYXAiKQorKyAgICAgICAoZXFfYXR0ciAidHlwZSIgImFsdSIpKQorKyAgImlzLGExLGEyIikKKysKKysoZGVmaW5lX2luc25fcmVzZXJ2YXRpb24gImFsdTJfb3AiIDIKKysgIChhbmQgKGVxX2F0dHIgInBpcGVsaW5lIiAiYXAiKQorKyAgICAgICAoZXFfYXR0ciAidHlwZSIgImFsdTIiKSkKKysgICJpcyxpcythMSxhMSthMixhMiIpCisrCisrKGRlZmluZV9pbnNuX3Jlc2VydmF0aW9uICJhbHVfc2F0X29wIiAyCisrICAoYW5kIChlcV9hdHRyICJwaXBlbGluZSIgImFwIikKKysgICAgICAgKGVxX2F0dHIgInR5cGUiICJhbHVfc2F0IikpCisrICAiaXMsYTEsYTIiKQorKworKworKzs7TXVsIGluc3RydWN0aW9ucworKyhkZWZpbmVfaW5zbl9yZXNlcnZhdGlvbiAibXVsaGhfb3AiIDIKKysgIChhbmQgKGVxX2F0dHIgInBpcGVsaW5lIiAiYXAiKQorKyAgICAgICAoZXFfYXR0ciAidHlwZSIgIm11bGhoLG11bHdoIikpCisrICAiaXMsbTEsbTIiKQorKworKyhkZWZpbmVfaW5zbl9yZXNlcnZhdGlvbiAibXVsd3dfd19vcCIgMworKyAgKGFuZCAoZXFfYXR0ciAicGlwZWxpbmUiICJhcCIpCisrICAgICAgIChlcV9hdHRyICJ0eXBlIiAibXVsd3dfdyIpKQorKyAgImlzLG0xLG0xK20yLG0yIikKKysKKysoZGVmaW5lX2luc25fcmVzZXJ2YXRpb24gIm11bHd3X2Rfb3AiIDUKKysgIChhbmQgKGVxX2F0dHIgInBpcGVsaW5lIiAiYXAiKQorKyAgICAgICAoZXFfYXR0ciAidHlwZSIgIm11bHd3X2QiKSkKKysgICJpcyxtMSxtMSttMixtMSttMixtMixtMiIpCisrCisrKGRlZmluZV9pbnNuX3Jlc2VydmF0aW9uICJkaXZfb3AiIDMzCisrICAoYW5kIChlcV9hdHRyICJwaXBlbGluZSIgImFwIikKKysgICAgICAgKGVxX2F0dHIgInR5cGUiICJkaXYiKSkKKysgICJpcyxtMSxtMSozMSArIG0yKjMxLG0yIikKKysKKysoZGVmaW5lX2luc25fcmVzZXJ2YXRpb24gIm1hY2hoX3dfb3AiIDMKKysgIChhbmQgKGVxX2F0dHIgInBpcGVsaW5lIiAiYXAiKQorKyAgICAgICAoZXFfYXR0ciAidHlwZSIgIm1hY2hoX3ciKSkKKysgICJpcyoyLG0xLG0yIikKKysKKysKKysoZGVmaW5lX2luc25fcmVzZXJ2YXRpb24gIm1hY3d3X3dfb3AiIDQKKysgIChhbmQgKGVxX2F0dHIgInBpcGVsaW5lIiAiYXAiKQorKyAgICAgICAoZXFfYXR0ciAidHlwZSIgIm1hY3d3X3ciKSkKKysgICJpcyoyLG0xLG0xLG0yIikKKysKKysKKysoZGVmaW5lX2luc25fcmVzZXJ2YXRpb24gIm1hY3d3X2Rfb3AiIDYKKysgIChhbmQgKGVxX2F0dHIgInBpcGVsaW5lIiAiYXAiKQorKyAgICAgICAoZXFfYXR0ciAidHlwZSIgIm1hY3d3X2QiKSkKKysgICJpcyoyLG0xLG0xK20yLG0xK20yLG0yIikKKysKKys7O0J5cGFzc2VzIGZvciBNYWMgaW5zdHJ1Y3Rpb25zLCBiZWNhdXNlIG9mIGFjY3VtdWxhdG9yIGNhY2hlLgorKzs7U2V0IGxhdGVuY3kgYXMgbG93IGFzIHBvc3NpYmxlIGluIG9yZGVyIHRvIGxldCB0aGUgY29tcGlsZXIgbGV0CisrOzttdWwgLT4gbWFjIGFuZCBtYWMgLT4gbWFjIGNvbWJpbmF0aW9ucyB3aGljaCB1c2UgdGhlIHNhbWUKKys7O2FjY3VtdWxhdG9yIGNhY2hlIGJlIHBsYWNlZCBjbG9zZSB0b2dldGhlciB0byBhdm9pZCBhbnkKKys7O2luc3RydWN0aW9ucyB3aGljaCBjYW4gcnVpbiB0aGUgYWNjdW11bGF0b3IgY2FjaGUgY29tZSBpbmJldHdlZW4uCisrKGRlZmluZV9ieXBhc3MgNCAibWFjaGhfd19vcCIgImFsdV9vcCxhbHUyX29wLGFsdV9zYXRfb3AsbG9hZF9vcCIgImF2cjMyX211bF93YXdfYnlwYXNzIikKKysoZGVmaW5lX2J5cGFzcyA1ICJtYWN3d193X29wIiAiYWx1X29wLGFsdTJfb3AsYWx1X3NhdF9vcCxsb2FkX29wIiAiYXZyMzJfbXVsX3dhd19ieXBhc3MiKQorKyhkZWZpbmVfYnlwYXNzIDcgIm1hY3d3X2Rfb3AiICJhbHVfb3AsYWx1Ml9vcCxhbHVfc2F0X29wLGxvYWRfb3AiICJhdnIzMl9tdWxfd2F3X2J5cGFzcyIpCisrCisrKGRlZmluZV9ieXBhc3MgMyAibXVsaGhfb3AiICJhbHVfb3AsYWx1Ml9vcCxhbHVfc2F0X29wLGxvYWRfb3AiICJhdnIzMl9tdWxfd2F3X2J5cGFzcyIpCisrKGRlZmluZV9ieXBhc3MgNCAibXVsd3dfd19vcCIgImFsdV9vcCxhbHUyX29wLGFsdV9zYXRfb3AsbG9hZF9vcCIgImF2cjMyX211bF93YXdfYnlwYXNzIikKKysoZGVmaW5lX2J5cGFzcyA2ICJtdWx3d19kX29wIiAiYWx1X29wLGFsdTJfb3AsYWx1X3NhdF9vcCxsb2FkX29wIiAiYXZyMzJfbXVsX3dhd19ieXBhc3MiKQorKworKworKzs7QnlwYXNzZXMgZm9yIGFsbCBtdWwvbWFjIGluc3RydWN0aW9ucyBmb2xsb3dlZCBieSBhbiBpbnN0cnVjdGlvbgorKzs7d2hpY2ggcmVhZHMgdGhlIG91dHB1dCBBTkQgd3JpdGVzIHRoZSByZXN1bHQgdG8gdGhlIHNhbWUgcmVnaXN0ZXIuCisrOztUaGlzIHdpbGwgZ2VuZXJhdGUgYW4gV3JpdGUgQWZ0ZXIgV3JpdGUgaGF6YXJkIHdoaWNoIGdpdmVzIGFuCisrOztleHRyYSBjeWNsZSBiZWZvcmUgdGhlIHJlc3VsdCBpcyByZWFkeS4KKysoZGVmaW5lX2J5cGFzcyAwICJtYWNoaF93X29wIiAibWFjaGhfd19vcCIgImF2cjMyX3ZhbGlkX21hY21hY19ieXBhc3MiKQorKyhkZWZpbmVfYnlwYXNzIDAgIm1hY3d3X3dfb3AiICJtYWN3d193X29wIiAiYXZyMzJfdmFsaWRfbWFjbWFjX2J5cGFzcyIpCisrKGRlZmluZV9ieXBhc3MgMCAibWFjd3dfZF9vcCIgIm1hY3d3X2Rfb3AiICJhdnIzMl92YWxpZF9tYWNtYWNfYnlwYXNzIikKKysKKysoZGVmaW5lX2J5cGFzcyAwICJtdWxoaF9vcCIgIm1hY2hoX3dfb3AiICJhdnIzMl92YWxpZF9tdWxtYWNfYnlwYXNzIikKKysoZGVmaW5lX2J5cGFzcyAwICJtdWx3d193X29wIiAibWFjd3dfd19vcCIgImF2cjMyX3ZhbGlkX211bG1hY19ieXBhc3MiKQorKyhkZWZpbmVfYnlwYXNzIDAgIm11bHd3X2Rfb3AiICJtYWN3d19kX29wIiAiYXZyMzJfdmFsaWRfbXVsbWFjX2J5cGFzcyIpCisrCisrOztCcmFuY2ggYW5kIGNhbGwgaW5zdHJ1Y3Rpb25zCisrOztXZSBhc3N1bWUgdGhhdCBhbGwgYnJhbmNoZXMgYW5kIHJjYWxscyBhcmUgcHJlZGljdGVkIGNvcnJlY3RseSA6LSkKKys7O3doaWxlIGNhbGxzIHVzZSBhIGxvdCBvZiBjeWNsZXMuCisrKGRlZmluZV9pbnNuX3Jlc2VydmF0aW9uICJicmFuY2hfb3AiIDAKKysgIChhbmQgKGVxX2F0dHIgInBpcGVsaW5lIiAiYXAiKQorKyAgICAgICAoZXFfYXR0ciAidHlwZSIgImJyYW5jaCIpKQorKyAgIm5vdGhpbmciKQorKworKyhkZWZpbmVfaW5zbl9yZXNlcnZhdGlvbiAiY2FsbF9vcCIgMTAKKysgIChhbmQgKGVxX2F0dHIgInBpcGVsaW5lIiAiYXAiKQorKyAgICAgICAoZXFfYXR0ciAidHlwZSIgImNhbGwiKSkKKysgICJub3RoaW5nIikKKysKKysKKys7O0xvYWQgc3RvcmUgaW5zdHJ1Y3Rpb25zCisrKGRlZmluZV9pbnNuX3Jlc2VydmF0aW9uICJsb2FkX29wIiAyCisrICAoYW5kIChlcV9hdHRyICJwaXBlbGluZSIgImFwIikKKysgICAgICAgKGVxX2F0dHIgInR5cGUiICJsb2FkIikpCisrICAiaXMsZGEsZCIpCisrCisrKGRlZmluZV9pbnNuX3Jlc2VydmF0aW9uICJsb2FkX3JtX29wIiAzCisrICAoYW5kIChlcV9hdHRyICJwaXBlbGluZSIgImFwIikKKysgICAgICAgKGVxX2F0dHIgInR5cGUiICJsb2FkX3JtIikpCisrICAiaXMsZGEsZCIpCisrCisrCisrKGRlZmluZV9pbnNuX3Jlc2VydmF0aW9uICJzdG9yZV9vcCIgMAorKyAgKGFuZCAoZXFfYXR0ciAicGlwZWxpbmUiICJhcCIpCisrICAgICAgIChlcV9hdHRyICJ0eXBlIiAic3RvcmUiKSkKKysgICJpcyxkYSxkIikKKysKKysKKysoZGVmaW5lX2luc25fcmVzZXJ2YXRpb24gImxvYWRfZG91YmxlX29wIiAzCisrICAoYW5kIChlcV9hdHRyICJwaXBlbGluZSIgImFwIikKKysgICAgICAgKGVxX2F0dHIgInR5cGUiICJsb2FkMiIpKQorKyAgImlzLGRhLGRhK2QsZCIpCisrCisrKGRlZmluZV9pbnNuX3Jlc2VydmF0aW9uICJsb2FkX3F1YWRfb3AiIDQKKysgIChhbmQgKGVxX2F0dHIgInBpcGVsaW5lIiAiYXAiKQorKyAgICAgICAoZXFfYXR0ciAidHlwZSIgImxvYWQ0IikpCisrICAiaXMsZGEsZGErZCxkYStkLGQiKQorKworKyhkZWZpbmVfaW5zbl9yZXNlcnZhdGlvbiAic3RvcmVfZG91YmxlX29wIiAwCisrICAoYW5kIChlcV9hdHRyICJwaXBlbGluZSIgImFwIikKKysgICAgICAgKGVxX2F0dHIgInR5cGUiICJzdG9yZTIiKSkKKysgICJpcyxkYSxkYStkLGQiKQorKworKworKyhkZWZpbmVfaW5zbl9yZXNlcnZhdGlvbiAic3RvcmVfcXVhZF9vcCIgMAorKyAgKGFuZCAoZXFfYXR0ciAicGlwZWxpbmUiICJhcCIpCisrICAgICAgIChlcV9hdHRyICJ0eXBlIiAic3RvcmU0IikpCisrICAiaXMsZGEsZGErZCxkYStkLGQiKQorKworKzs7Rm9yIHN0b3JlIHRoZSBvcGVyYW5kIHRvIHdyaXRlIHRvIG1lbW9yeSBpcyByZWFkIGluIGQgYW5kCisrOzt0aGUgcmVhbCBsYXRlbmN5IGJldHdlZW4gYW55IGluc3RydWN0aW9uIGFuZCBhIHN0b3JlIGlzIHRoZXJlZm9yZQorKzs7b25lIGxlc3MgdGhhbiBmb3IgdGhlIGluc3RydWN0aW9ucyB3aGljaCByZWFkcyB0aGUgb3BlcmFuZHMgaW4gdGhlIGZpcnN0CisrOztleGNlY3V0aW9uIHN0YWdlCisrKGRlZmluZV9ieXBhc3MgMiAibG9hZF9kb3VibGVfb3AiICJzdG9yZV9kb3VibGVfb3AiICJhdnIzMl9zdG9yZV9ieXBhc3MiKQorKyhkZWZpbmVfYnlwYXNzIDMgImxvYWRfcXVhZF9vcCIgInN0b3JlX3F1YWRfb3AiICJhdnIzMl9zdG9yZV9ieXBhc3MiKQorKyhkZWZpbmVfYnlwYXNzIDEgImxvYWRfb3AiICJzdG9yZV9vcCIgImF2cjMyX3N0b3JlX2J5cGFzcyIpCisrKGRlZmluZV9ieXBhc3MgMiAibG9hZF9ybV9vcCIgInN0b3JlX29wIiAiYXZyMzJfc3RvcmVfYnlwYXNzIikKKysoZGVmaW5lX2J5cGFzcyAxICJhbHVfc2F0X29wIiAic3RvcmVfb3AiICJhdnIzMl9zdG9yZV9ieXBhc3MiKQorKyhkZWZpbmVfYnlwYXNzIDEgImFsdTJfb3AiICJzdG9yZV9vcCIgImF2cjMyX3N0b3JlX2J5cGFzcyIpCisrKGRlZmluZV9ieXBhc3MgMSAibXVsaGhfb3AiICJzdG9yZV9vcCIgImF2cjMyX3N0b3JlX2J5cGFzcyIpCisrKGRlZmluZV9ieXBhc3MgMiAibXVsd3dfd19vcCIgInN0b3JlX29wIiAiYXZyMzJfc3RvcmVfYnlwYXNzIikKKysoZGVmaW5lX2J5cGFzcyA0ICJtdWx3d19kX29wIiAic3RvcmVfb3AiICJhdnIzMl9zdG9yZV9ieXBhc3MiICkKKysoZGVmaW5lX2J5cGFzcyAyICJtYWNoaF93X29wIiAic3RvcmVfb3AiICJhdnIzMl9zdG9yZV9ieXBhc3MiKQorKyhkZWZpbmVfYnlwYXNzIDMgIm1hY3d3X3dfb3AiICJzdG9yZV9vcCIgImF2cjMyX3N0b3JlX2J5cGFzcyIpCisrKGRlZmluZV9ieXBhc3MgNSAibWFjd3dfZF9vcCIgInN0b3JlX29wIiAiYXZyMzJfc3RvcmVfYnlwYXNzIikKKysKKysKKys7IEJ5cGFzcyBmb3IgbG9hZCBkb3VibGUgb3BlcmF0aW9uLiBJZiBvbmx5IHRoZSBmaXJzdCBsb2FkZWQgd29yZCBpcyBuZWVkZWQKKys7IHRoZW4gdGhlIGxhdGVuY3kgaXMgMgorKyhkZWZpbmVfYnlwYXNzIDIgImxvYWRfZG91YmxlX29wIgorKyAgICAgICAgICAgICAgICAgImxvYWRfb3AsbG9hZF9ybV9vcCxhbHVfc2F0X29wLCBhbHUyX29wLCBhbHVfb3AsIG11bGhoX29wLCBtdWx3d193X29wLAorKyAgICAgICAgICAgICAgICAgIG11bHd3X2Rfb3AsIG1hY2hoX3dfb3AsIG1hY3d3X3dfb3AsIG1hY3d3X2Rfb3AiCisrICAgICAgICAgICAgICAgICAiYXZyMzJfdmFsaWRfbG9hZF9kb3VibGVfYnlwYXNzIikKKysKKys7IEJ5cGFzcyBmb3IgbG9hZCBxdWFkIG9wZXJhdGlvbi4gSWYgb25seSB0aGUgZmlyc3Qgb3Igc2Vjb25kIGxvYWRlZCB3b3JkIGlzIG5lZWRlZAorKzsgd2Ugc2V0IHRoZSBsYXRlbmN5IHRvIDIKKysoZGVmaW5lX2J5cGFzcyAyICJsb2FkX3F1YWRfb3AiCisrICAgICAgICAgICAgICAgICAibG9hZF9vcCxsb2FkX3JtX29wLGFsdV9zYXRfb3AsIGFsdTJfb3AsIGFsdV9vcCwgbXVsaGhfb3AsIG11bHd3X3dfb3AsCisrICAgICAgICAgICAgICAgICAgbXVsd3dfZF9vcCwgbWFjaGhfd19vcCwgbWFjd3dfd19vcCwgbWFjd3dfZF9vcCIKKysgICAgICAgICAgICAgICAgICJhdnIzMl92YWxpZF9sb2FkX3F1YWRfYnlwYXNzIikKKysKKysKKys7OyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKzs7IEVuZCBvZiBBdXRvbWF0b24gcGlwZWxpbmUgZGVzY3JpcHRpb24gZm9yIGF2cjMyCisrOzsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysKKysoZGVmaW5lX2NvbmRfZXhlYworKyAgWyhtYXRjaF9vcGVyYXRvciAwICJhdnIzMl9jb21wYXJpc29uX29wZXJhdG9yIgorKyAgICBbKG1hdGNoX29wZXJhbmQ6Q01QIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikgICAgICAgICAKKysgICAgIChtYXRjaF9vcGVyYW5kOkNNUCAyICI8Q01QOmNtcF9wcmVkaWNhdGU+IiAiPENNUDpjbXBfY29uc3RyYWludD4iKV0pXQorKyAgIlRBUkdFVF9WMl9JTlNOUyIgCisrICAiJSEiCisrKQorKworKyhkZWZpbmVfY29uZF9leGVjCisrICBbKG1hdGNoX29wZXJhdG9yIDAgImF2cjMyX2NvbXBhcmlzb25fb3BlcmF0b3IiCisrICAgICBbKGFuZDpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpICAgICAgICAgCisrICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJvbmVfYml0X3NldF9vcGVyYW5kIiAiaSIpKQorKyAgICAgIChjb25zdF9pbnQgMCldKV0KKysgICJUQVJHRVRfVjJfSU5TTlMiIAorKyAgIiUhIgorKyAgKQorKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBtb3ZlCisrOzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworKworKzs7PT0gY2hhciAtIDggYml0cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysoZGVmaW5lX2V4cGFuZCAibW92cWkiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpRSSAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIiIpCisrCShtYXRjaF9vcGVyYW5kOlFJIDEgImdlbmVyYWxfb3BlcmFuZCIgIiIpKV0KKysgICIiCisrICB7CisrICAgaWYgKCAhbm9fbmV3X3BzZXVkb3MgKXsKKysgICAgIGlmIChHRVRfQ09ERSAob3BlcmFuZHNbMV0pID09IE1FTSAmJiBvcHRpbWl6ZSl7CisrICAgICAgICAgcnR4IHJlZyA9IGdlbl9yZWdfcnR4IChTSW1vZGUpOworKworKyAgICAgICAgIGVtaXRfaW5zbiAoZ2VuX3plcm9fZXh0ZW5kcWlzaTIgKHJlZywgb3BlcmFuZHNbMV0pKTsKKysgICAgICAgICBvcGVyYW5kc1sxXSA9IGdlbl9sb3dwYXJ0IChRSW1vZGUsIHJlZyk7CisrICAgICB9CisrCisrICAgICAvKiBPbmUgb2YgdGhlIG9wcyBoYXMgdG8gYmUgaW4gYSByZWdpc3Rlci4gICovCisrICAgICBpZiAoR0VUX0NPREUgKG9wZXJhbmRzWzBdKSA9PSBNRU0pCisrICAgICAgIG9wZXJhbmRzWzFdID0gZm9yY2VfcmVnIChRSW1vZGUsIG9wZXJhbmRzWzFdKTsKKysgICB9CisrCisrICB9KQorKworKyhkZWZpbmVfaW5zbiAiKm1vdnFpX2ludGVybmFsIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6UUkgMCAibm9uaW1tZWRpYXRlX29wZXJhbmQiICI9cixyLG0sciIpCisrCShtYXRjaF9vcGVyYW5kOlFJIDEgImdlbmVyYWxfb3BlcmFuZCIgICJyS3MwOCxtLHIsaSIpKV0KKysgICJyZWdpc3Rlcl9vcGVyYW5kIChvcGVyYW5kc1swXSwgUUltb2RlKQorKyAgIHx8IHJlZ2lzdGVyX29wZXJhbmQgKG9wZXJhbmRzWzFdLCBRSW1vZGUpIgorKyAgIkAKKysgICBtb3ZcdCUwLCAlMQorKyAgIGxkLnViXHQlMCwgJTEKKysgICBzdC5iXHQlMCwgJTEKKysgICBtb3ZcdCUwLCAlMSIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsNCw0LDQiKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImFsdSxsb2FkX3JtLHN0b3JlLGFsdSIpXSkKKysKKysKKysKKys7Oz09IHNob3J0IC0gMTYgYml0cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrKGRlZmluZV9leHBhbmQgIm1vdmhpIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SEkgMCAibm9uaW1tZWRpYXRlX29wZXJhbmQiICIiKQorKwkobWF0Y2hfb3BlcmFuZDpISSAxICJnZW5lcmFsX29wZXJhbmQiICIiKSldCisrICAiIgorKyAgeworKyAgIGlmICggIW5vX25ld19wc2V1ZG9zICl7CisrICAgICBpZiAoR0VUX0NPREUgKG9wZXJhbmRzWzFdKSA9PSBNRU0gJiYgb3B0aW1pemUpeworKyAgICAgICAgIHJ0eCByZWcgPSBnZW5fcmVnX3J0eCAoU0ltb2RlKTsKKysKKysgICAgICAgICBlbWl0X2luc24gKGdlbl9leHRlbmRoaXNpMiAocmVnLCBvcGVyYW5kc1sxXSkpOworKyAgICAgICAgIG9wZXJhbmRzWzFdID0gZ2VuX2xvd3BhcnQgKEhJbW9kZSwgcmVnKTsKKysgICAgIH0KKysKKysgICAgIC8qIE9uZSBvZiB0aGUgb3BzIGhhcyB0byBiZSBpbiBhIHJlZ2lzdGVyLiAgKi8KKysgICAgIGlmIChHRVRfQ09ERSAob3BlcmFuZHNbMF0pID09IE1FTSkKKysgICAgICAgb3BlcmFuZHNbMV0gPSBmb3JjZV9yZWcgKEhJbW9kZSwgb3BlcmFuZHNbMV0pOworKyAgIH0KKysKKysgIH0pCisrCisrCisrKGRlZmluZV9pbnNuICIqbW92aGlfaW50ZXJuYWwiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIj1yLHIsbSxyIikKKysJKG1hdGNoX29wZXJhbmQ6SEkgMSAiZ2VuZXJhbF9vcGVyYW5kIiAgInJLczA4LG0scixpIikpXQorKyAgInJlZ2lzdGVyX29wZXJhbmQgKG9wZXJhbmRzWzBdLCBISW1vZGUpCisrICAgfHwgcmVnaXN0ZXJfb3BlcmFuZCAob3BlcmFuZHNbMV0sIEhJbW9kZSkiCisrICAiQAorKyAgIG1vdlx0JTAsICUxCisrICAgbGQuc2hcdCUwLCAlMQorKyAgIHN0LmhcdCUwLCAlMQorKyAgIG1vdlx0JTAsICUxIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiw0LDQsNCIpCisrICAgKHNldF9hdHRyICJ0eXBlIiAiYWx1LGxvYWRfcm0sc3RvcmUsYWx1IildKQorKworKworKzs7PT0gaW50IC0gMzIgYml0cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysKKysoZGVmaW5lX2V4cGFuZCAibW92bWlzYWxpZ25zaSIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiIikKKysJKG1hdGNoX29wZXJhbmQ6U0kgMSAibm9uaW1tZWRpYXRlX29wZXJhbmQiICIiKSldCisrICAiVEFSR0VUX1VOQUxJR05FRF9XT1JEIgorKyAgeworKyAgfQorKykKKysKKysKKysoZGVmaW5lX2V4cGFuZCAibW92PG1vZGU+IgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6TU9WTSAwICJhdnIzMl9ub25fcm13X25vbmltbWVkaWF0ZV9vcGVyYW5kIiAiIikKKysJKG1hdGNoX29wZXJhbmQ6TU9WTSAxICJhdnIzMl9ub25fcm13X2dlbmVyYWxfb3BlcmFuZCIgIiIpKV0KKysgICIiCisrICB7CisrCisrICAgIC8qIE9uZSBvZiB0aGUgb3BzIGhhcyB0byBiZSBpbiBhIHJlZ2lzdGVyLiAgKi8KKysgICAgaWYgKEdFVF9DT0RFIChvcGVyYW5kc1swXSkgPT0gTUVNKQorKyAgICAgIG9wZXJhbmRzWzFdID0gZm9yY2VfcmVnICg8TU9ERT5tb2RlLCBvcGVyYW5kc1sxXSk7CisrCisrCisrICAgIC8qIENoZWNrIGZvciBvdXQgb2YgcmFuZ2UgaW1tZWRpYXRlIGNvbnN0YW50cyBhcyB0aGVzZSBtYXkKKysgICAgICAgb2NjdXIgZHVyaW5nIHJlbG9hZGluZywgc2luY2UgaXQgc2VlbXMgbGlrZSByZWxvYWQgZG9lcworKyAgICAgICBub3QgY2hlY2sgaWYgdGhlIGltbWVkaWF0ZSBpcyBsZWdpdGltYXRlLiBEb24ndCBrbm93IGlmCisrICAgICAgIHRoaXMgaXMgYSBidWc/ICovCisrICAgIGlmICggcmVsb2FkX2luX3Byb2dyZXNzCisrICAgICAgICAgJiYgYXZyMzJfaW1tX2luX2NvbnN0X3Bvb2wKKysgICAgICAgICAmJiBHRVRfQ09ERShvcGVyYW5kc1sxXSkgPT0gQ09OU1RfSU5UCisrICAgICAgICAgJiYgIWF2cjMyX2NvbnN0X29rX2Zvcl9jb25zdHJhaW50X3AoSU5UVkFMKG9wZXJhbmRzWzFdKSwgJ0snLCAiS3MyMSIpICl7CisrICAgICAgICBvcGVyYW5kc1sxXSA9IGZvcmNlX2NvbnN0X21lbShTSW1vZGUsIG9wZXJhbmRzWzFdKTsKKysgICAgfQorKworKyAgICAvKiBDaGVjayBmb3IgUk1XIG1lbW9yeSBvcGVyYW5kcy4gVGhleSBhcmUgbm90IGFsbG93ZWQgZm9yIG1vdiBvcGVyYXRpb25zCisrICAgICAgIG9ubHkgdGhlIGF0b21pYyBtZW1jL3MvdCBvcGVyYXRpb25zICovCisrICAgIGlmICggIXJlbG9hZF9pbl9wcm9ncmVzcworKyAgICAgICAgICYmIGF2cjMyX3Jtd19tZW1vcnlfb3BlcmFuZCAob3BlcmFuZHNbMF0sIDxNT0RFPm1vZGUpICl7CisrICAgICAgIG9wZXJhbmRzWzBdID0gY29weV9ydHggKG9wZXJhbmRzWzBdKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKyAgICAgICBYRVhQKG9wZXJhbmRzWzBdLCAwKSA9IGZvcmNlX3JlZyAoPE1PREU+bW9kZSwgWEVYUChvcGVyYW5kc1swXSwgMCkpOworKyAgICB9CisrCisrICAgIGlmICggIXJlbG9hZF9pbl9wcm9ncmVzcworKyAgICAgICAgICYmIGF2cjMyX3Jtd19tZW1vcnlfb3BlcmFuZCAob3BlcmFuZHNbMV0sIDxNT0RFPm1vZGUpICl7CisrICAgICAgIG9wZXJhbmRzWzFdID0gY29weV9ydHggKG9wZXJhbmRzWzFdKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKyAgICAgICBYRVhQKG9wZXJhbmRzWzFdLCAwKSA9IGZvcmNlX3JlZyAoPE1PREU+bW9kZSwgWEVYUChvcGVyYW5kc1sxXSwgMCkpOworKyAgICB9CisrCisrICAgIGlmICggKGZsYWdfcGljIHx8IFRBUkdFVF9IQVNfQVNNX0FERFJfUFNFVURPUykKKysgICAgICAgICAmJiAhYXZyMzJfbGVnaXRpbWF0ZV9waWNfb3BlcmFuZF9wKG9wZXJhbmRzWzFdKSApCisrICAgICAgb3BlcmFuZHNbMV0gPSBsZWdpdGltaXplX3BpY19hZGRyZXNzIChvcGVyYW5kc1sxXSwgPE1PREU+bW9kZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChub19uZXdfcHNldWRvcyA/IG9wZXJhbmRzWzBdIDogMCkpOworKyAgICBlbHNlIGlmICggZmxhZ19waWMgJiYgYXZyMzJfYWRkcmVzc19vcGVyYW5kKG9wZXJhbmRzWzFdLCBHRVRfTU9ERShvcGVyYW5kc1sxXSkpICkKKysgICAgICAvKiBJZiB3ZSBoYXZlIGFuIGFkZHJlc3Mgb3BlcmFuZCB0aGVuIHRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgcGljIHJlZ2lzdGVyLiAqLworKyAgICAgIGN1cnJlbnRfZnVuY3Rpb25fdXNlc19waWNfb2Zmc2V0X3RhYmxlID0gMTsKKysgIH0pCisrCisrCisrCisrKGRlZmluZV9pbnNuICJtb3Y8bW9kZT5faW50ZXJuYWwiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpNT1ZNIDAgImF2cjMyX25vbl9ybXdfbm9uaW1tZWRpYXRlX29wZXJhbmQiICI9ciwgICByLCAgIHIscixyLFEsciIpCisrCShtYXRjaF9vcGVyYW5kOk1PVk0gMSAiYXZyMzJfbm9uX3Jtd19nZW5lcmFsX29wZXJhbmQiICAgICAgInJLczA4LEtzMjEsSixuLFEscixXIikpXQorKyAgIihyZWdpc3Rlcl9vcGVyYW5kIChvcGVyYW5kc1swXSwgPE1PREU+bW9kZSkKKysgICAgfHwgcmVnaXN0ZXJfb3BlcmFuZCAob3BlcmFuZHNbMV0sIDxNT0RFPm1vZGUpKQorKyAgICYmICFhdnIzMl9ybXdfbWVtb3J5X29wZXJhbmQgKG9wZXJhbmRzWzBdLCA8TU9ERT5tb2RlKSAKKysgICAmJiAhYXZyMzJfcm13X21lbW9yeV9vcGVyYW5kIChvcGVyYW5kc1sxXSwgPE1PREU+bW9kZSkiCisrICB7CisrICAgIHN3aXRjaCAod2hpY2hfYWx0ZXJuYXRpdmUpIHsKKysgICAgICBjYXNlIDA6CisrICAgICAgY2FzZSAxOiByZXR1cm4gIm1vdlx0JTAsICUxIjsKKysgICAgICBjYXNlIDI6CisrICAgICAgICBpZiAoIFRBUkdFVF9WMl9JTlNOUyApCisrICAgICAgICAgICByZXR1cm4gIm1vdmhcdCUwLCBoaSglMSkiOworKyAgICAgICAgLyogRmFsbHRocm91Z2ggKi8KKysgICAgICBjYXNlIDM6IHJldHVybiAibW92XHQlMCwgbG8oJTEpXDtvcmhcdCUwLGhpKCUxKSI7CisrICAgICAgY2FzZSA0OgorKyAgICAgICAgaWYgKCAoUkVHX1AoWEVYUChvcGVyYW5kc1sxXSwgMCkpCisrICAgICAgICAgICAgICAmJiBSRUdOTyhYRVhQKG9wZXJhbmRzWzFdLCAwKSkgPT0gU1BfUkVHTlVNKQorKyAgICAgICAgICAgICB8fCAoR0VUX0NPREUoWEVYUChvcGVyYW5kc1sxXSwgMCkpID09IFBMVVMKKysgICAgICAgICAgICAgICAgICYmIFJFR05PKFhFWFAoWEVYUChvcGVyYW5kc1sxXSwgMCksIDApKSA9PSBTUF9SRUdOVU0KKysJICAgICAgICAgJiYgR0VUX0NPREUoWEVYUChYRVhQKG9wZXJhbmRzWzFdLCAwKSwgMSkpID09IENPTlNUX0lOVAorKwkgICAgICAgICAmJiBJTlRWQUwoWEVYUChYRVhQKG9wZXJhbmRzWzFdLCAwKSwgMSkpICUgNCA9PSAwCisrCSAgICAgICAgICYmIElOVFZBTChYRVhQKFhFWFAob3BlcmFuZHNbMV0sIDApLCAxKSkgPD0gMHgxRkMpICkKKysgICAgICAgICAgcmV0dXJuICJsZGRzcFx0JTAsICUxIjsKKysJZWxzZSBpZiAoIGF2cjMyX2NvbnN0X3Bvb2xfcmVmX29wZXJhbmQob3BlcmFuZHNbMV0sIEdFVF9NT0RFKG9wZXJhbmRzWzFdKSkgKQorKyAgICAgICAgICByZXR1cm4gImxkZHBjXHQlMCwgJTEiOworKyAgICAgICAgZWxzZQorKyAgICAgICAgICByZXR1cm4gImxkLndcdCUwLCAlMSI7CisrICAgICAgY2FzZSA1OgorKyAgICAgICAgaWYgKCAoUkVHX1AoWEVYUChvcGVyYW5kc1swXSwgMCkpCisrICAgICAgICAgICAgICAmJiBSRUdOTyhYRVhQKG9wZXJhbmRzWzBdLCAwKSkgPT0gU1BfUkVHTlVNKQorKyAgICAgICAgICAgICB8fCAoR0VUX0NPREUoWEVYUChvcGVyYW5kc1swXSwgMCkpID09IFBMVVMKKysgICAgICAgICAgICAgICAgICYmIFJFR05PKFhFWFAoWEVYUChvcGVyYW5kc1swXSwgMCksIDApKSA9PSBTUF9SRUdOVU0KKysJICAgICAgICAgJiYgR0VUX0NPREUoWEVYUChYRVhQKG9wZXJhbmRzWzBdLCAwKSwgMSkpID09IENPTlNUX0lOVAorKwkgICAgICAgICAmJiBJTlRWQUwoWEVYUChYRVhQKG9wZXJhbmRzWzBdLCAwKSwgMSkpICUgNCA9PSAwCisrCSAgICAgICAgICYmIElOVFZBTChYRVhQKFhFWFAob3BlcmFuZHNbMF0sIDApLCAxKSkgPD0gMHgxRkMpICkKKysgICAgICAgICAgcmV0dXJuICJzdGRzcFx0JTAsICUxIjsKKysJZWxzZQorKyAgICAgICAgICByZXR1cm4gInN0LndcdCUwLCAlMSI7CisrICAgICAgY2FzZSA2OgorKyAgICAgICAgaWYgKCBUQVJHRVRfSEFTX0FTTV9BRERSX1BTRVVET1MgKQorKyAgICAgICAgICByZXR1cm4gImxkYS53XHQlMCwgJTEiOworKyAgICAgICAgZWxzZQorKyAgICAgICAgICByZXR1cm4gImxkLndcdCUwLCByNlslMUBnb3RdIjsKKysgICAgICBkZWZhdWx0OgorKwlhYm9ydCgpOworKyAgICB9CisrICB9CisrICAKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsNCw0LDgsNCw0LDgiKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImFsdSxhbHUsYWx1LGFsdTIsbG9hZCxzdG9yZSxsb2FkIikKKysgICAoc2V0X2F0dHIgImNjIiAibm9uZSxub25lLHNldF96X2lmX25vdF92MixzZXRfeixub25lLG5vbmUsY2xvYmJlciIpXSkKKysKKysKKysoZGVmaW5lX2V4cGFuZCAicmVsb2FkX291dF9ybXdfbWVtb3J5X29wZXJhbmQiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKyAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMCAiYWRkcmVzc19vcGVyYW5kIiAiIikpCisrICAgKHNldCAobWVtOlNJIChtYXRjaF9kdXAgMikpCisrICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikpXQorKyAgIiIKKysgIHsKKysgICBvcGVyYW5kc1swXSA9IFhFWFAob3BlcmFuZHNbMF0sIDApOworKyAgfQorKykKKysKKysoZGVmaW5lX2V4cGFuZCAicmVsb2FkX2luX3Jtd19tZW1vcnlfb3BlcmFuZCIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisrICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAxICJhZGRyZXNzX29wZXJhbmQiICIiKSkKKysgICAoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKyAgICAgICAgKG1lbTpTSSAobWF0Y2hfZHVwIDIpKSldCisrICAiIgorKyAgeworKyAgIG9wZXJhbmRzWzFdID0gWEVYUChvcGVyYW5kc1sxXSwgMCk7CisrICB9CisrKQorKworKworKzs7IFRoZXNlIGluc3RydWN0aW9ucyBhcmUgZm9yIGxvYWRpbmcgY29uc3RhbnRzIHdoaWNoIGNhbm5vdCBiZSBsb2FkZWQKKys7OyBkaXJlY3RseSBmcm9tIHRoZSBjb25zdGFudCBwb29sIGJlY2F1c2UgdGhlIG9mZnNldCBpcyB0b28gbGFyZ2UKKys7OyBoaWdoIGFuZCBsb19zdW0gYXJlIHVzZWQgZXZlbiB0b3VnaCBmb3Igb3VyIGNhc2UgaXQgc2hvdWxkIGJlCisrOzsgbG93IGFuZCBoaWdoIHN1bSA6LSkKKysoZGVmaW5lX2luc24gIm1vdl9zeW1ib2xfbG8iCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkoaGlnaDpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJpbW1lZGlhdGVfb3BlcmFuZCIgImkiICkpKV0KKysgICIiCisrICAibW92XHQlMCwgbG8oJTEpIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImFsdSIpCisrICAgKHNldF9hdHRyICJsZW5ndGgiICI0IildCisrKQorKworKyhkZWZpbmVfaW5zbiAiYWRkX3N5bWJvbF9oaSIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisrCShsb19zdW06U0kgKG1hdGNoX2R1cCAwKQorKyAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAxICJpbW1lZGlhdGVfb3BlcmFuZCIgImkiICkpKV0KKysgICIiCisrICAib3JoXHQlMCwgaGkoJTEpIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImFsdSIpCisrICAgKHNldF9hdHRyICJsZW5ndGgiICI0IildCisrKQorKworKworKworKzs7IFdoZW4gZ2VuZXJhdGluZyBwaWMsIHdlIG5lZWQgdG8gbG9hZCB0aGUgc3ltYm9sIG9mZnNldCBpbnRvIGEgcmVnaXN0ZXIuCisrOzsgU28gdGhhdCB0aGUgb3B0aW1pemVyIGRvZXMgbm90IGNvbmZ1c2UgdGhpcyB3aXRoIGEgbm9ybWFsIHN5bWJvbCBsb2FkCisrOzsgd2UgdXNlIGFuIHVuc3BlYy4gIFRoZSBvZmZzZXQgd2lsbCBiZSBsb2FkZWQgZnJvbSBhIGNvbnN0YW50IHBvb2wgZW50cnksCisrOzsgc2luY2UgdGhhdCBpcyB0aGUgb25seSB0eXBlIG9mIHJlbG9jYXRpb24gd2UgY2FuIHVzZS4KKysoZGVmaW5lX2luc24gInBpY19sb2FkX2FkZHIiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkodW5zcGVjOlNJIFsobWF0Y2hfb3BlcmFuZDpTSSAxICIiICIiKV0gVU5TUEVDX1BJQ19TWU0pKV0KKysgICJmbGFnX3BpYyAmJiBDT05TVEFOVF9QT09MX0FERFJFU1NfUChYRVhQKG9wZXJhbmRzWzFdLCAwKSkiCisrICAibGRkcGNcdCUwLCAlMSIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJsb2FkIikKKysgICAoc2V0X2F0dHIgImxlbmd0aCIgIjQiKV0KKyspCisrCisrKGRlZmluZV9pbnNuICJwaWNfY29tcHV0ZV9nb3RfZnJvbV9wYyIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIrciIpCisrCSh1bnNwZWM6U0kgWyhtaW51czpTSSAocGMpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX2R1cCAwKSldIFVOU1BFQ19QSUNfQkFTRSkpCisrICAgKHVzZSAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDEgIiIgIiIpKSldCisrICAiZmxhZ19waWMiCisrICB7CisrICAgKCp0YXJnZXRtLmFzbV9vdXQuaW50ZXJuYWxfbGFiZWwpIChhc21fb3V0X2ZpbGUsICJMIiwKKysJIAkJICAgICBDT0RFX0xBQkVMX05VTUJFUiAob3BlcmFuZHNbMV0pKTsKKysgICByZXR1cm4gXCJyc3ViXHQlMCwgcGNcIjsKKysgIH0KKysgIFsoc2V0X2F0dHIgImNjIiAiY2xvYmJlciIpCisrICAgKHNldF9hdHRyICJsZW5ndGgiICIyIildCisrKQorKworKzs7PT0gbG9uZyBsb25nIGludCAtIDY0IGJpdHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysKKysoZGVmaW5lX2V4cGFuZCAibW92ZGkiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIiIpCisrCShtYXRjaF9vcGVyYW5kOkRJIDEgImdlbmVyYWxfb3BlcmFuZCIgIiIpKV0KKysgICIiCisrICB7CisrCisrICAgIC8qIE9uZSBvZiB0aGUgb3BzIGhhcyB0byBiZSBpbiBhIHJlZ2lzdGVyLiAgKi8KKysgICAgaWYgKEdFVF9DT0RFIChvcGVyYW5kc1swXSkgIT0gUkVHKQorKyAgICAgIG9wZXJhbmRzWzFdID0gZm9yY2VfcmVnIChESW1vZGUsIG9wZXJhbmRzWzFdKTsKKysKKysgIH0pCisrCisrCisrKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKm1vdmRpX2ludGVybmFsIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REkgMCAibm9uaW1tZWRpYXRlX29wZXJhbmQiICAgICAiPXIsciwgICByLCAgIHIscixyLG0iKQorKwkobWF0Y2hfb3BlcmFuZDpESSAxICJnZW5lcmFsX29wZXJhbmQiICAgICAgICAgICJyLCBLczA4LEtzMjEsRyxuLG0sciIpKV0KKysgICJyZWdpc3Rlcl9vcGVyYW5kIChvcGVyYW5kc1swXSwgREltb2RlKQorKyAgIHx8IHJlZ2lzdGVyX29wZXJhbmQgKG9wZXJhbmRzWzFdLCBESW1vZGUpIgorKyAgeworKyAgICBzd2l0Y2ggKHdoaWNoX2FsdGVybmF0aXZlICl7CisrICAgIGNhc2UgMDoKKysgICAgY2FzZSAxOgorKyAgICBjYXNlIDI6CisrICAgIGNhc2UgMzoKKysgICAgY2FzZSA0OgorKyAgICAgICAgcmV0dXJuICIjIjsKKysgICAgY2FzZSA1OgorKyAgICAgIGlmICggYXZyMzJfY29uc3RfcG9vbF9yZWZfb3BlcmFuZChvcGVyYW5kc1sxXSwgR0VUX01PREUob3BlcmFuZHNbMV0pKSkKKysgICAgICAgIHJldHVybiAibGQuZFx0JTAsIHBjWyUxIC0gLl0iOworKyAgICAgIGVsc2UKKysgICAgICAgIHJldHVybiAibGQuZFx0JTAsICUxIjsKKysgICAgY2FzZSA2OgorKyAgICAgIHJldHVybiAic3QuZFx0JTAsICUxIjsKKysgICAgZGVmYXVsdDoKKysgICAgICBhYm9ydCgpOworKyAgICB9CisrICB9CisrOzsgTGV0cyBzcGxpdCBhbGwgcmVnLT5yZWcgb3IgaW1tLT5yZWcgdHJhbnNmZXJzIGludG8gdHdvIFNJbW9kZSB0cmFuc2ZlcnMgCisrICAicmVsb2FkX2NvbXBsZXRlZCAmJgorKyAgIChSRUdfUCAob3BlcmFuZHNbMF0pICYmCisrICAgKFJFR19QIChvcGVyYW5kc1sxXSkgCisrICAgIHx8IEdFVF9DT0RFIChvcGVyYW5kc1sxXSkgPT0gQ09OU1RfSU5UCisrICAgIHx8IEdFVF9DT0RFIChvcGVyYW5kc1sxXSkgPT0gQ09OU1RfRE9VQkxFKSkiCisrICBbKHNldCAobWF0Y2hfZHVwIDApIChtYXRjaF9kdXAgMSkpCisrICAgKHNldCAobWF0Y2hfZHVwIDIpIChtYXRjaF9kdXAgMykpXQorKyAgeworKyAgICBvcGVyYW5kc1syXSA9IGdlbl9oaWdocGFydCAoU0ltb2RlLCBvcGVyYW5kc1swXSk7CisrICAgIG9wZXJhbmRzWzBdID0gZ2VuX2xvd3BhcnQgKFNJbW9kZSwgb3BlcmFuZHNbMF0pOworKyAgICBpZiAoIFJFR19QKG9wZXJhbmRzWzFdKSApeworKyAgICAgIG9wZXJhbmRzWzNdID0gZ2VuX2hpZ2hwYXJ0KFNJbW9kZSwgb3BlcmFuZHNbMV0pOworKyAgICAgIG9wZXJhbmRzWzFdID0gZ2VuX2xvd3BhcnQoU0ltb2RlLCBvcGVyYW5kc1sxXSk7CisrICAgIH0gZWxzZSBpZiAoIEdFVF9DT0RFKG9wZXJhbmRzWzFdKSA9PSBDT05TVF9ET1VCTEUgCisrICAgICAgICAgICAgICAgIHx8IEdFVF9DT0RFKG9wZXJhbmRzWzFdKSA9PSBDT05TVF9JTlQgKXsKKysgICAgICBydHggc3BsaXRfY29uc3RbMl07CisrICAgICAgYXZyMzJfc3BsaXRfY29uc3RfZXhwciAoREltb2RlLCBTSW1vZGUsIG9wZXJhbmRzWzFdLCBzcGxpdF9jb25zdCk7CisrICAgICAgb3BlcmFuZHNbM10gPSBzcGxpdF9jb25zdFsxXTsKKysgICAgICBvcGVyYW5kc1sxXSA9IHNwbGl0X2NvbnN0WzBdOworKyAgICB9IGVsc2UgeworKyAgICAgIGludGVybmFsX2Vycm9yKCJJbGxlZ2FsIG9wZXJhbmRbMV0gZm9yIG1vdmRpIHNwbGl0ISIpOworKyAgICB9CisrICB9CisrCisrICBbKHNldF9hdHRyICJsZW5ndGgiICIqLCosKiwqLCosNCw0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICIqLCosKiwqLCosbG9hZDIsc3RvcmUyIikKKysgICAoc2V0X2F0dHIgImNjIiAiKiwqLCosKiwqLG5vbmUsbm9uZSIpXSkKKysKKysKKys7Oz09IDEyOCBiaXRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrKGRlZmluZV9leHBhbmQgIm1vdnRpIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VEkgMCAibm9uaW1tZWRpYXRlX29wZXJhbmQiICIiKQorKwkobWF0Y2hfb3BlcmFuZDpUSSAxICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIiIpKV0KKysgICJUQVJHRVRfQVJDSF9BUCIgICAgCisrICB7ICAgICAKKysgICAgICAgIAorKyAgICAvKiBPbmUgb2YgdGhlIG9wcyBoYXMgdG8gYmUgaW4gYSByZWdpc3Rlci4gICovCisrICAgIGlmIChHRVRfQ09ERSAob3BlcmFuZHNbMF0pICE9IFJFRykKKysgICAgICBvcGVyYW5kc1sxXSA9IGZvcmNlX3JlZyAoVEltb2RlLCBvcGVyYW5kc1sxXSk7CisrCisrICAgIC8qIFdlIG11c3QgZml4IGFueSBwcmVfZGVjIGZvciBsb2FkcyBhbmQgcG9zdF9pbmMgc3RvcmVzICovCisrICAgIGlmICggR0VUX0NPREUgKG9wZXJhbmRzWzBdKSA9PSBNRU0KKysgICAgICAgICAmJiBHRVRfQ09ERSAoWEVYUChvcGVyYW5kc1swXSwwKSkgPT0gUE9TVF9JTkMgKXsKKysgICAgICAgZW1pdF9tb3ZlX2luc24oZ2VuX3J0eF9NRU0oVEltb2RlLCBYRVhQKFhFWFAob3BlcmFuZHNbMF0sMCksMCkpLCBvcGVyYW5kc1sxXSk7CisrICAgICAgIGVtaXRfaW5zbihnZW5fYWRkc2kzKFhFWFAoWEVYUChvcGVyYW5kc1swXSwwKSwwKSwgWEVYUChYRVhQKG9wZXJhbmRzWzBdLDApLDApLCBHRU5fSU5UKEdFVF9NT0RFX1NJWkUoVEltb2RlKSkpKTsKKysgICAgICAgRE9ORTsKKysgICAgfQorKworKyAgICBpZiAoIEdFVF9DT0RFIChvcGVyYW5kc1sxXSkgPT0gTUVNCisrICAgICAgICAgJiYgR0VUX0NPREUgKFhFWFAob3BlcmFuZHNbMV0sMCkpID09IFBSRV9ERUMgKXsKKysgICAgICAgZW1pdF9pbnNuKGdlbl9hZGRzaTMoWEVYUChYRVhQKG9wZXJhbmRzWzFdLDApLDApLCBYRVhQKFhFWFAob3BlcmFuZHNbMV0sMCksMCksIEdFTl9JTlQoLUdFVF9NT0RFX1NJWkUoVEltb2RlKSkpKTsKKysgICAgICAgZW1pdF9tb3ZlX2luc24ob3BlcmFuZHNbMF0sIGdlbl9ydHhfTUVNKFRJbW9kZSwgWEVYUChYRVhQKG9wZXJhbmRzWzFdLDApLDApKSk7CisrICAgICAgIERPTkU7CisrICAgIH0KKysgIH0pCisrCisrCisrKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKm1vdnRpX2ludGVybmFsIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VEkgMCAiYXZyMzJfbW92dGlfZHN0X29wZXJhbmQiICAiPXIsJnIsICAgIHIsICAgIDxSS3UwMCxyLHIiKQorKwkobWF0Y2hfb3BlcmFuZDpUSSAxICJhdnIzMl9tb3Z0aV9zcmNfb3BlcmFuZCIgICIgcixSS3UwMD4sUkt1MDAsciwgICAgIG4sVCIpKV0KKysgICIocmVnaXN0ZXJfb3BlcmFuZCAob3BlcmFuZHNbMF0sIFRJbW9kZSkKKysgICAgfHwgcmVnaXN0ZXJfb3BlcmFuZCAob3BlcmFuZHNbMV0sIFRJbW9kZSkpIgorKyAgeworKyAgICBzd2l0Y2ggKHdoaWNoX2FsdGVybmF0aXZlICl7CisrICAgIGNhc2UgMDoKKysgICAgY2FzZSAyOgorKyAgICBjYXNlIDQ6CisrICAgICAgICByZXR1cm4gIiMiOworKyAgICBjYXNlIDE6CisrICAgICAgICByZXR1cm4gImxkbVx0JXAxLCAlMCI7CisrICAgIGNhc2UgMzoKKysgICAgICAgIHJldHVybiAic3RtXHQlcDAsICUxIjsKKysgICAgY2FzZSA1OgorKyAgICAgICAgcmV0dXJuICJsZC5kXHQlVTAsIHBjWyUxIC0gLl1cO2xkLmRcdCVCMCwgcGNbJTEgLSAuICsgOF0iOworKyAgICB9CisrICB9CisrCisrICAicmVsb2FkX2NvbXBsZXRlZCAmJgorKyAgIChSRUdfUCAob3BlcmFuZHNbMF0pICYmCisrICAgKFJFR19QIChvcGVyYW5kc1sxXSkgCisrICAgIC8qIElmIHRoaXMgaXMgYSBsb2FkIGZyb20gdGhlIGNvbnN0YW50IHBvb2wgd2Ugc3BsaXQgaXQgaW50bworKyAgICAgICB0d28gZG91YmxlIGxvYWRzLiAqLworKyAgICB8fCAoR0VUX0NPREUgKG9wZXJhbmRzWzFdKSA9PSBNRU0KKysgICAgICAgICYmIEdFVF9DT0RFIChYRVhQIChvcGVyYW5kc1sxXSwgMCkpID09IFNZTUJPTF9SRUYKKysgICAgICAgICYmIENPTlNUQU5UX1BPT0xfQUREUkVTU19QIChYRVhQIChvcGVyYW5kc1sxXSwgMCkpKSAgICAgICAgICAgICAgIAorKyAgICAvKiBJZiB0aGlzIGlzIGEgbG9hZCB3aGVyZSB0aGUgcG9pbnRlciByZWdpc3RlciBpcyBhIHBhcnQKKysgICAgICAgb2YgdGhlIHJlZ2lzdGVyIGxpc3QsIHdlIG11c3Qgc3BsaXQgaXQgaW50byB0d28gZG91YmxlCisrICAgICAgIGxvYWRzIGluIG9yZGVyIGZvciBpdCB0byBiZSBleGNlcHRpb24gc2FmZS4gKi8KKysgICAgfHwgKEdFVF9DT0RFIChvcGVyYW5kc1sxXSkgPT0gTUVNCisrICAgICAgICAmJiByZWdpc3Rlcl9vcGVyYW5kIChYRVhQIChvcGVyYW5kc1sxXSwgMCksIFNJbW9kZSkKKysgICAgICAgICYmIHJlZ19vdmVybGFwX21lbnRpb25lZF9wIChvcGVyYW5kc1swXSwgWEVYUCAob3BlcmFuZHNbMV0sIDApKSkgICAgICAgICAgICAgICAKKysgICAgfHwgR0VUX0NPREUgKG9wZXJhbmRzWzFdKSA9PSBDT05TVF9JTlQKKysgICAgfHwgR0VUX0NPREUgKG9wZXJhbmRzWzFdKSA9PSBDT05TVF9ET1VCTEUpKSIKKysgIFsoc2V0IChtYXRjaF9kdXAgMCkgKG1hdGNoX2R1cCAxKSkKKysgICAoc2V0IChtYXRjaF9kdXAgMikgKG1hdGNoX2R1cCAzKSldCisrICB7CisrICAgIG9wZXJhbmRzWzJdID0gc2ltcGxpZnlfZ2VuX3N1YnJlZyAoIERJbW9kZSwgb3BlcmFuZHNbMF0sIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW1vZGUsIDAgKTsKKysgICAgb3BlcmFuZHNbMF0gPSBzaW1wbGlmeV9nZW5fc3VicmVnICggREltb2RlLCBvcGVyYW5kc1swXSwgCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbW9kZSwgOCApOworKyAgICBpZiAoIFJFR19QKG9wZXJhbmRzWzFdKSApeworKyAgICAgIG9wZXJhbmRzWzNdID0gc2ltcGxpZnlfZ2VuX3N1YnJlZyAoIERJbW9kZSwgb3BlcmFuZHNbMV0sIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbW9kZSwgMCApOworKyAgICAgIG9wZXJhbmRzWzFdID0gc2ltcGxpZnlfZ2VuX3N1YnJlZyAoIERJbW9kZSwgb3BlcmFuZHNbMV0sIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbW9kZSwgOCApOworKyAgICB9IGVsc2UgaWYgKCBHRVRfQ09ERShvcGVyYW5kc1sxXSkgPT0gQ09OU1RfRE9VQkxFIAorKyAgICAgICAgICAgICAgICB8fCBHRVRfQ09ERShvcGVyYW5kc1sxXSkgPT0gQ09OU1RfSU5UICl7CisrICAgICAgcnR4IHNwbGl0X2NvbnN0WzJdOworKyAgICAgIGF2cjMyX3NwbGl0X2NvbnN0X2V4cHIgKFRJbW9kZSwgREltb2RlLCBvcGVyYW5kc1sxXSwgc3BsaXRfY29uc3QpOworKyAgICAgIG9wZXJhbmRzWzNdID0gc3BsaXRfY29uc3RbMV07CisrICAgICAgb3BlcmFuZHNbMV0gPSBzcGxpdF9jb25zdFswXTsKKysgICAgfSBlbHNlIGlmIChhdnIzMl9jb25zdF9wb29sX3JlZl9vcGVyYW5kIChvcGVyYW5kc1sxXSwgR0VUX01PREUob3BlcmFuZHNbMV0pKSl7CisrICAgICAgcnR4IHNwbGl0X2NvbnN0WzJdOworKyAgICAgIHJ0eCBjb3AgPSBhdm9pZF9jb25zdGFudF9wb29sX3JlZmVyZW5jZSAob3BlcmFuZHNbMV0pOworKyAgICAgIGlmIChvcGVyYW5kc1sxXSA9PSBjb3ApCisrICAgICAgICBjb3AgPSBnZXRfcG9vbF9jb25zdGFudCAoWEVYUCAob3BlcmFuZHNbMV0sIDApKTsKKysgICAgICBhdnIzMl9zcGxpdF9jb25zdF9leHByIChUSW1vZGUsIERJbW9kZSwgY29wLCBzcGxpdF9jb25zdCk7CisrICAgICAgb3BlcmFuZHNbM10gPSBmb3JjZV9jb25zdF9tZW0gKERJbW9kZSwgc3BsaXRfY29uc3RbMV0pOyAKKysgICAgICBvcGVyYW5kc1sxXSA9IGZvcmNlX2NvbnN0X21lbSAoREltb2RlLCBzcGxpdF9jb25zdFswXSk7IAorKyAgIH0gZWxzZSB7CisrICAgICAgcnR4IHB0cl9yZWcgPSBYRVhQIChvcGVyYW5kc1sxXSwgMCk7CisrICAgICAgb3BlcmFuZHNbMV0gPSBnZW5fcnR4X01FTSAoREltb2RlLCAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5fcnR4X1BMVVMgKCBTSW1vZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyX3JlZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRU5fSU5UICg4KSApKTsKKysgICAgICBvcGVyYW5kc1szXSA9IGdlbl9ydHhfTUVNIChESW1vZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyX3JlZyk7CisrICAgICAgICAgICAgICAKKysgICAgICAvKiBDaGVjayBpZiB0aGUgZmlyc3QgbG9hZCB3aWxsIGNsb2JiZXIgdGhlIHBvaW50ZXIuCisrICAgICAgICAgSWYgc28sIHdlIG11c3Qgc3dpdGNoIHRoZSBvcmRlciBvZiB0aGUgb3BlcmF0aW9ucy4gKi8KKysgICAgICBpZiAoIHJlZ19vdmVybGFwX21lbnRpb25lZF9wIChvcGVyYW5kc1swXSwgcHRyX3JlZykgKQorKyAgICAgICAgeworKyAgICAgICAgICAvKiBXZSBuZWVkIHRvIHN3aXRjaCB0aGUgb3JkZXIgb2YgdGhlIG9wZXJhdGlvbnMKKysgICAgICAgICAgICAgc28gdGhhdCB0aGUgcG9pbnRlciByZWdpc3RlciBkb2VzIG5vdCBnZXQgY2xvYmJlcmVkCisrICAgICAgICAgICAgIGFmdGVyIHRoZSBmaXJzdCBkb3VibGUgd29yZCBsb2FkLiAqLworKyAgICAgICAgICBydHggdG1wOworKyAgICAgICAgICB0bXAgPSBvcGVyYW5kc1swXTsKKysgICAgICAgICAgb3BlcmFuZHNbMF0gPSBvcGVyYW5kc1syXTsKKysgICAgICAgICAgb3BlcmFuZHNbMl0gPSB0bXA7CisrICAgICAgICAgIHRtcCA9IG9wZXJhbmRzWzFdOworKyAgICAgICAgICBvcGVyYW5kc1sxXSA9IG9wZXJhbmRzWzNdOworKyAgICAgICAgICBvcGVyYW5kc1szXSA9IHRtcDsKKysgICAgICAgIH0KKysKKysKKysgICB9CisrICB9CisrICBbKHNldF9hdHRyICJsZW5ndGgiICIqLCosNCw0LCosOCIpCisrICAgKHNldF9hdHRyICJ0eXBlIiAiKiwqLGxvYWQ0LHN0b3JlNCwqLGxvYWQ0IildKQorKworKworKzs7PT0gZmxvYXQgLSAzMiBiaXRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysoZGVmaW5lX2V4cGFuZCAibW92c2YiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTRiAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIiIpCisrCShtYXRjaF9vcGVyYW5kOlNGIDEgImdlbmVyYWxfb3BlcmFuZCIgIiIpKV0KKysgICIiCisrICB7CisrCisrCisrICAgIC8qIE9uZSBvZiB0aGUgb3BzIGhhcyB0byBiZSBpbiBhIHJlZ2lzdGVyLiAgKi8KKysgICAgaWYgKEdFVF9DT0RFIChvcGVyYW5kc1swXSkgIT0gUkVHKQorKyAgICAgIG9wZXJhbmRzWzFdID0gZm9yY2VfcmVnIChTRm1vZGUsIG9wZXJhbmRzWzFdKTsKKysKKysgIH0pCisrCisrKGRlZmluZV9pbnNuICIqbW92c2ZfaW50ZXJuYWwiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTRiAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIgICAgICI9cixyLHIscixtIikKKysJKG1hdGNoX29wZXJhbmQ6U0YgMSAiZ2VuZXJhbF9vcGVyYW5kIiAgICAgICAgICAiciwgRyxGLG0sciIpKV0KKysgICIocmVnaXN0ZXJfb3BlcmFuZCAob3BlcmFuZHNbMF0sIFNGbW9kZSkKKysgICAgfHwgcmVnaXN0ZXJfb3BlcmFuZCAob3BlcmFuZHNbMV0sIFNGbW9kZSkpIgorKyAgeworKyAgICBzd2l0Y2ggKHdoaWNoX2FsdGVybmF0aXZlKSB7CisrICAgICAgY2FzZSAwOgorKyAgICAgIGNhc2UgMTogcmV0dXJuICJtb3ZcdCUwLCAlMSI7CisrICAgICAgY2FzZSAyOiAKKysgICAgICAgeworKyAgICAgICAgSE9TVF9XSURFX0lOVCB0YXJnZXRfZmxvYXRbMl07CisrICAgICAgICByZWFsX3RvX3RhcmdldCAodGFyZ2V0X2Zsb2F0LCBDT05TVF9ET1VCTEVfUkVBTF9WQUxVRSAob3BlcmFuZHNbMV0pLCBTRm1vZGUpOworKyAgICAgICAgaWYgKCBUQVJHRVRfVjJfSU5TTlMgCisrICAgICAgICAgICAgICYmIGF2cjMyX2hpMTZfaW1tZWRpYXRlX29wZXJhbmQgKEdFTl9JTlQgKHRhcmdldF9mbG9hdFswXSksIFZPSURtb2RlKSApCisrICAgICAgICAgICByZXR1cm4gIm1vdmhcdCUwLCBoaSglMSkiOworKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgcmV0dXJuICJtb3ZcdCUwLCBsbyglMSlcO29yaFx0JTAsIGhpKCUxKSI7CisrICAgICAgIH0KKysgICAgICBjYXNlIDM6CisrICAgICAgICBpZiAoIChSRUdfUChYRVhQKG9wZXJhbmRzWzFdLCAwKSkKKysgICAgICAgICAgICAgICYmIFJFR05PKFhFWFAob3BlcmFuZHNbMV0sIDApKSA9PSBTUF9SRUdOVU0pCisrICAgICAgICAgICAgIHx8IChHRVRfQ09ERShYRVhQKG9wZXJhbmRzWzFdLCAwKSkgPT0gUExVUworKyAgICAgICAgICAgICAgICAgJiYgUkVHTk8oWEVYUChYRVhQKG9wZXJhbmRzWzFdLCAwKSwgMCkpID09IFNQX1JFR05VTQorKwkgICAgICAgICAmJiBHRVRfQ09ERShYRVhQKFhFWFAob3BlcmFuZHNbMV0sIDApLCAxKSkgPT0gQ09OU1RfSU5UCisrCSAgICAgICAgICYmIElOVFZBTChYRVhQKFhFWFAob3BlcmFuZHNbMV0sIDApLCAxKSkgJSA0ID09IDAKKysJICAgICAgICAgJiYgSU5UVkFMKFhFWFAoWEVYUChvcGVyYW5kc1sxXSwgMCksIDEpKSA8PSAweDFGQykgKQorKyAgICAgICAgICByZXR1cm4gImxkZHNwXHQlMCwgJTEiOworKyAgICAgICAgICBlbHNlIGlmICggYXZyMzJfY29uc3RfcG9vbF9yZWZfb3BlcmFuZChvcGVyYW5kc1sxXSwgR0VUX01PREUob3BlcmFuZHNbMV0pKSApCisrICAgICAgICAgIHJldHVybiAibGRkcGNcdCUwLCAlMSI7CisrICAgICAgICBlbHNlCisrICAgICAgICAgIHJldHVybiAibGQud1x0JTAsICUxIjsKKysgICAgICBjYXNlIDQ6CisrICAgICAgICBpZiAoIChSRUdfUChYRVhQKG9wZXJhbmRzWzBdLCAwKSkKKysgICAgICAgICAgICAgICYmIFJFR05PKFhFWFAob3BlcmFuZHNbMF0sIDApKSA9PSBTUF9SRUdOVU0pCisrICAgICAgICAgICAgIHx8IChHRVRfQ09ERShYRVhQKG9wZXJhbmRzWzBdLCAwKSkgPT0gUExVUworKyAgICAgICAgICAgICAgICAgJiYgUkVHTk8oWEVYUChYRVhQKG9wZXJhbmRzWzBdLCAwKSwgMCkpID09IFNQX1JFR05VTQorKwkgICAgICAgICAmJiBHRVRfQ09ERShYRVhQKFhFWFAob3BlcmFuZHNbMF0sIDApLCAxKSkgPT0gQ09OU1RfSU5UCisrCSAgICAgICAgICYmIElOVFZBTChYRVhQKFhFWFAob3BlcmFuZHNbMF0sIDApLCAxKSkgJSA0ID09IDAKKysJICAgICAgICAgJiYgSU5UVkFMKFhFWFAoWEVYUChvcGVyYW5kc1swXSwgMCksIDEpKSA8PSAweDFGQykgKQorKyAgICAgICAgICByZXR1cm4gInN0ZHNwXHQlMCwgJTEiOworKwllbHNlCisrICAgICAgICAgIHJldHVybiAic3Qud1x0JTAsICUxIjsKKysgICAgICBkZWZhdWx0OgorKwlhYm9ydCgpOworKyAgICB9CisrICB9CisrCisrICBbKHNldF9hdHRyICJsZW5ndGgiICIyLDQsOCw0LDQiKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImFsdSxhbHUsYWx1Mixsb2FkLHN0b3JlIikKKysgICAoc2V0X2F0dHIgImNjIiAibm9uZSxub25lLGNsb2JiZXIsbm9uZSxub25lIildKQorKworKworKworKzs7PT0gZG91YmxlIC0gNjQgYml0cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysoZGVmaW5lX2V4cGFuZCAibW92ZGYiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpERiAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIiIpCisrCShtYXRjaF9vcGVyYW5kOkRGIDEgImdlbmVyYWxfb3BlcmFuZCIgIiIpKV0KKysgICIiCisrICB7CisrICAgIC8qIE9uZSBvZiB0aGUgb3BzIGhhcyB0byBiZSBpbiBhIHJlZ2lzdGVyLiAgKi8KKysgICAgaWYgKEdFVF9DT0RFIChvcGVyYW5kc1swXSkgIT0gUkVHKXsKKysgICAgICBvcGVyYW5kc1sxXSA9IGZvcmNlX3JlZyAoREZtb2RlLCBvcGVyYW5kc1sxXSk7CisrICAgIH0KKysgIH0pCisrCisrCisrKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKm1vdmRmX2ludGVybmFsIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REYgMCAibm9uaW1tZWRpYXRlX29wZXJhbmQiICAgICAiPXIscixyLHIsbSIpCisrCShtYXRjaF9vcGVyYW5kOkRGIDEgImdlbmVyYWxfb3BlcmFuZCIgICAgICAgICAgIiByLEcsRixtLHIiKSldCisrICAiVEFSR0VUX1NPRlRfRkxPQVQKKysgICAmJiAocmVnaXN0ZXJfb3BlcmFuZCAob3BlcmFuZHNbMF0sIERGbW9kZSkKKysgICAgICAgfHwgcmVnaXN0ZXJfb3BlcmFuZCAob3BlcmFuZHNbMV0sIERGbW9kZSkpIgorKyAgeworKyAgICBzd2l0Y2ggKHdoaWNoX2FsdGVybmF0aXZlICl7CisrICAgIGNhc2UgMDoKKysgICAgY2FzZSAxOgorKyAgICBjYXNlIDI6IAorKyAgICAgICAgcmV0dXJuICIjIjsKKysgICAgY2FzZSAzOgorKyAgICAgIGlmICggYXZyMzJfY29uc3RfcG9vbF9yZWZfb3BlcmFuZChvcGVyYW5kc1sxXSwgR0VUX01PREUob3BlcmFuZHNbMV0pKSkKKysgICAgICAgIHJldHVybiAibGQuZFx0JTAsIHBjWyUxIC0gLl0iOworKyAgICAgIGVsc2UKKysgICAgICAgIHJldHVybiAibGQuZFx0JTAsICUxIjsKKysgICAgY2FzZSA0OgorKyAgICAgIHJldHVybiAic3QuZFx0JTAsICUxIjsKKysgICAgZGVmYXVsdDoKKysgICAgICBhYm9ydCgpOworKyAgICB9CisrICB9CisrICAiVEFSR0VUX1NPRlRfRkxPQVQKKysgICAmJiByZWxvYWRfY29tcGxldGVkCisrICAgJiYgKFJFR19QIChvcGVyYW5kc1swXSkgCisrICAgICAgICAmJiAoUkVHX1AgKG9wZXJhbmRzWzFdKQorKyAgICAgICAgICAgIHx8IEdFVF9DT0RFIChvcGVyYW5kc1sxXSkgPT0gQ09OU1RfRE9VQkxFKSkiCisrICBbKHNldCAobWF0Y2hfZHVwIDApIChtYXRjaF9kdXAgMSkpCisrICAgKHNldCAobWF0Y2hfZHVwIDIpIChtYXRjaF9kdXAgMykpXQorKyAgIgorKyAgIHsKKysgICAgb3BlcmFuZHNbMl0gPSBnZW5faGlnaHBhcnQgKFNJbW9kZSwgb3BlcmFuZHNbMF0pOworKyAgICBvcGVyYW5kc1swXSA9IGdlbl9sb3dwYXJ0IChTSW1vZGUsIG9wZXJhbmRzWzBdKTsKKysgICAgb3BlcmFuZHNbM10gPSBnZW5faGlnaHBhcnQoU0ltb2RlLCBvcGVyYW5kc1sxXSk7CisrICAgIG9wZXJhbmRzWzFdID0gZ2VuX2xvd3BhcnQoU0ltb2RlLCBvcGVyYW5kc1sxXSk7CisrICAgfQorKyAgIgorKworKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiKiwqLCosNCw0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICIqLCosKixsb2FkMixzdG9yZTIiKQorKyAgIChzZXRfYXR0ciAiY2MiICIqLCosKixub25lLG5vbmUiKV0pCisrCisrCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKzs7IENvbmRpdGlvbmFsIE1vdmVzCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyhkZWZpbmVfaW5zbiAibGQ8bW9kZT5fcHJlZGljYWJsZSIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOk1PVkNDIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisrCShtYXRjaF9vcGVyYW5kOk1PVkNDIDEgImF2cjMyX25vbl9ybXdfbWVtb3J5X29wZXJhbmQiICI8TU9WQ0M6cHJlZF9tZW1fY29uc3RyYWludD4iKSldCisrICAiVEFSR0VUX1YyX0lOU05TIgorKyAgImxkPE1PVkNDOmxvYWRfcG9zdGZpeD4lP1x0JTAsICUxIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJjYyIgImNtcF9jb25kX2luc24iKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImxvYWQiKQorKyAgIChzZXRfYXR0ciAicHJlZGljYWJsZSIgInllcyIpXQorKykKKysKKysKKysoZGVmaW5lX2luc24gInN0PG1vZGU+X3ByZWRpY2FibGUiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpNT1ZDQyAwICJhdnIzMl9ub25fcm13X21lbW9yeV9vcGVyYW5kIiAiPTxNT1ZDQzpwcmVkX21lbV9jb25zdHJhaW50PiIpCisrCShtYXRjaF9vcGVyYW5kOk1PVkNDIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpXQorKyAgIlRBUkdFVF9WMl9JTlNOUyIKKysgICJzdDxNT1ZDQzpzdG9yZV9wb3N0Zml4PiU/XHQlMCwgJTEiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgImNjIiAiY21wX2NvbmRfaW5zbiIpCisrICAgKHNldF9hdHRyICJ0eXBlIiAic3RvcmUiKQorKyAgIChzZXRfYXR0ciAicHJlZGljYWJsZSIgInllcyIpXQorKykKKysKKysoZGVmaW5lX2luc24gIm1vdjxtb2RlPl9wcmVkaWNhYmxlIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6TU9WQ0MgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysJKG1hdGNoX29wZXJhbmQ6TU9WQ0MgMSAiYXZyMzJfY29uZF9yZWdpc3Rlcl9pbW1lZGlhdGVfb3BlcmFuZCIgInJLczA4IikpXQorKyAgIiIKKysgICJtb3YlP1x0JTAsICUxIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJjYyIgImNtcF9jb25kX2luc24iKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImFsdSIpCisrICAgKHNldF9hdHRyICJwcmVkaWNhYmxlIiAieWVzIildCisrKQorKworKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBNb3ZlIGNodW5rcyBvZiBtZW1vcnkKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrCisrKGRlZmluZV9leHBhbmQgIm1vdm1lbXNpIgorKyAgWyhtYXRjaF9vcGVyYW5kOkJMSyAwICJnZW5lcmFsX29wZXJhbmQiICIiKQorKyAgIChtYXRjaF9vcGVyYW5kOkJMSyAxICJnZW5lcmFsX29wZXJhbmQiICIiKQorKyAgIChtYXRjaF9vcGVyYW5kOlNJIDIgImNvbnN0X2ludF9vcGVyYW5kIiAiIikKKysgICAobWF0Y2hfb3BlcmFuZDpTSSAzICJjb25zdF9pbnRfb3BlcmFuZCIgIiIpXQorKyAgIiIKKysgICIKKysgICBpZiAoYXZyMzJfZ2VuX21vdm1lbXNpIChvcGVyYW5kcykpCisrICAgICBET05FOworKyAgIEZBSUw7CisrICAiCisrICApCisrCisrCisrCisrCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKzs7IEJpdCBmaWVsZCBpbnN0cnVjdGlvbnMKKys7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrOzsgSW5zdHJ1Y3Rpb25zIHRvIGluc2VydCBvciBleHRyYWN0IGJpdC1maWVsZHMKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrCisrKGRlZmluZV9pbnNuICJpbnN2IgorKyAgWyAoc2V0ICh6ZXJvX2V4dHJhY3Q6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIityIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDEgImltbWVkaWF0ZV9vcGVyYW5kIiAiS3UwNSIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJpbW1lZGlhdGVfb3BlcmFuZCIgIkt1MDUiKSkKKysgICAgICAgICAobWF0Y2hfb3BlcmFuZCAzICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKV0KKysgICIiCisrICAiYmZpbnNcdCUwLCAlMywgJTIsICUxIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImFsdSIpCisrICAgKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgImNjIiAic2V0X25jeiIpXSkKKysKKysKKysKKysoZGVmaW5lX2V4cGFuZCAiZXh0diIKKysgIFsgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysgICAgICAgICAoc2lnbl9leHRyYWN0OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAiaW1tZWRpYXRlX29wZXJhbmQiICIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMyAiaW1tZWRpYXRlX29wZXJhbmQiICIiKSkpXQorKyAgIiIKKysgIHsKKysgICBpZiAoIElOVFZBTChvcGVyYW5kc1syXSkgPj0gMzIgKQorKyAgICAgIEZBSUw7CisrICB9CisrKQorKworKyhkZWZpbmVfZXhwYW5kICJleHR6diIKKysgIFsgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysgICAgICAgICAoemVyb19leHRyYWN0OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAiaW1tZWRpYXRlX29wZXJhbmQiICIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMyAiaW1tZWRpYXRlX29wZXJhbmQiICIiKSkpXQorKyAgIiIKKysgIHsKKysgICBpZiAoIElOVFZBTChvcGVyYW5kc1syXSkgPj0gMzIgKQorKyAgICAgIEZBSUw7CisrICB9CisrKQorKworKyhkZWZpbmVfaW5zbiAiZXh0dl9pbnRlcm5hbCIKKysgIFsgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKyAgICAgICAgIChzaWduX2V4dHJhY3Q6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAiaW1tZWRpYXRlX29wZXJhbmQiICJLdTA1IikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDMgImltbWVkaWF0ZV9vcGVyYW5kIiAiS3UwNSIpKSldCisrICAiSU5UVkFMKG9wZXJhbmRzWzJdKSA8IDMyIgorKyAgImJmZXh0c1x0JTAsICUxLCAlMywgJTIiCisrICBbKHNldF9hdHRyICJ0eXBlIiAiYWx1IikKKysgICAoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAiY2MiICJzZXRfbmN6IildKQorKworKworKyhkZWZpbmVfaW5zbiAiZXh0enZfaW50ZXJuYWwiCisrICBbIChzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysgICAgICAgICAoemVyb19leHRyYWN0OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgImltbWVkaWF0ZV9vcGVyYW5kIiAiS3UwNSIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAzICJpbW1lZGlhdGVfb3BlcmFuZCIgIkt1MDUiKSkpXQorKyAgIklOVFZBTChvcGVyYW5kc1syXSkgPCAzMiIKKysgICJiZmV4dHVcdCUwLCAlMSwgJTMsICUyIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImFsdSIpCisrICAgKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgImNjIiAic2V0X25jeiIpXSkKKysKKysKKysKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrOzsgU29tZSBwZWVwaG9sZXMgZm9yIGF2b2lkaW5nIHVubmVjZXNzYXJ5IGNhc3QgaW5zdHJ1Y3Rpb25zCisrOzsgZm9sbG93ZWQgYnkgYmZpbnMuCisrOzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworKyhkZWZpbmVfcGVlcGhvbGUyCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysgICAgICAgICh6ZXJvX2V4dGVuZDpTSSAobWF0Y2hfb3BlcmFuZDpRSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikpKQorKyAgIChzZXQgKHplcm9fZXh0cmFjdDpTSSAobWF0Y2hfb3BlcmFuZCAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMyAiaW1tZWRpYXRlX29wZXJhbmQiICIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSA0ICJpbW1lZGlhdGVfb3BlcmFuZCIgIiIpKQorKyAgICAgICAgKG1hdGNoX2R1cCAwKSldCisrICAiKChwZWVwMl9yZWdfZGVhZF9wKDIsIG9wZXJhbmRzWzBdKSAmJgorKyAgICAoSU5UVkFMKG9wZXJhbmRzWzNdKSA8PSA4KSkpIgorKyAgWyhzZXQgKHplcm9fZXh0cmFjdDpTSSAobWF0Y2hfZHVwIDIpCisrICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9kdXAgMykKKysgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX2R1cCA0KSkKKysgICAgICAgIChtYXRjaF9kdXAgMSkpXQorKyAgKQorKworKyhkZWZpbmVfcGVlcGhvbGUyCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysgICAgICAgICh6ZXJvX2V4dGVuZDpTSSAobWF0Y2hfb3BlcmFuZDpISSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikpKQorKyAgIChzZXQgKHplcm9fZXh0cmFjdDpTSSAobWF0Y2hfb3BlcmFuZCAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMyAiaW1tZWRpYXRlX29wZXJhbmQiICIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSA0ICJpbW1lZGlhdGVfb3BlcmFuZCIgIiIpKQorKyAgICAgICAgKG1hdGNoX2R1cCAwKSldCisrICAiKChwZWVwMl9yZWdfZGVhZF9wKDIsIG9wZXJhbmRzWzBdKSAmJgorKyAgICAoSU5UVkFMKG9wZXJhbmRzWzNdKSA8PSAxNikpKSIKKysgIFsoc2V0ICh6ZXJvX2V4dHJhY3Q6U0kgKG1hdGNoX2R1cCAyKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfZHVwIDMpCisrICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9kdXAgNCkpCisrICAgICAgICAobWF0Y2hfZHVwIDEpKV0KKysgICkKKysKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrOzsgcHVzaCBieXRlcworKzs7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKys7OyBJbXBsZW1lbnRzIHRoZSBwdXNoIGluc3RydWN0aW9uCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyhkZWZpbmVfaW5zbiAicHVzaG0iCisrICBbKHNldCAobWVtOkJMSyAocHJlX2RlYzpCTEsgKHJlZzpTSSBTUF9SRUdOVU0pKSkKKysgICAgICAgICh1bnNwZWM6QkxLIFsobWF0Y2hfb3BlcmFuZCAwICJjb25zdF9pbnRfb3BlcmFuZCIgIiIpXQorKyAgICAgICAgICAgICAgICAgICAgVU5TUEVDX1BVU0hNKSldCisrICAiIgorKyAgeworKyAgICBpZiAoSU5UVkFMKG9wZXJhbmRzWzBdKSkgeworKyAgICAgIHJldHVybiAicHVzaG1cdCVyMCI7CisrICAgIH0gZWxzZSB7CisrICAgICAgcmV0dXJuICIiOworKyAgICB9CisrICB9CisrICBbKHNldF9hdHRyICJ0eXBlIiAic3RvcmUiKQorKyAgIChzZXRfYXR0ciAibGVuZ3RoIiAiMiIpCisrICAgKHNldF9hdHRyICJjYyIgIm5vbmUiKV0pCisrCisrKGRlZmluZV9pbnNuICJzdG0iCisrICBbKHVuc3BlYyBbKG1hdGNoX29wZXJhbmQgMCAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQorKyAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kIDEgImNvbnN0X2ludF9vcGVyYW5kIiAiIikKKysgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZCAyICJjb25zdF9pbnRfb3BlcmFuZCIgIiIpXQorKwkgICBVTlNQRUNfU1RNKV0KKysgICIiCisrICB7CisrICAgIGlmIChJTlRWQUwob3BlcmFuZHNbMV0pKSB7CisrICAgICAgaWYgKElOVFZBTChvcGVyYW5kc1syXSkgIT0gMCkKKysgICAgICAgICByZXR1cm4gInN0bVx0LS0lMCwgJXMxIjsKKysgICAgICBlbHNlCisrICAgICAgICAgcmV0dXJuICJzdG1cdCUwLCAlczEiOworKyAgICB9IGVsc2UgeworKyAgICAgIHJldHVybiAiIjsKKysgICAgfQorKyAgfQorKyAgWyhzZXRfYXR0ciAidHlwZSIgInN0b3JlIikKKysgICAoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAiY2MiICJub25lIildKQorKworKworKworKyhkZWZpbmVfaW5zbiAicG9wbSIKKysgIFsodW5zcGVjIFsobWF0Y2hfb3BlcmFuZCAwICJjb25zdF9pbnRfb3BlcmFuZCIgIiIpXQorKwkgICBVTlNQRUNfUE9QTSldCisrICAiIgorKyAgeworKyAgICBpZiAoSU5UVkFMKG9wZXJhbmRzWzBdKSkgeworKyAgICAgIHJldHVybiAicG9wbSAgICVyMCI7CisrICAgIH0gZWxzZSB7CisrICAgICAgcmV0dXJuICIiOworKyAgICB9CisrICB9CisrICBbKHNldF9hdHRyICJ0eXBlIiAibG9hZCIpCisrICAgKHNldF9hdHRyICJsZW5ndGgiICIyIildKQorKworKworKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBhZGQKKys7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrOzsgQWRkcyByZWcxIHdpdGggcmVnMiBhbmQgcHV0cyB0aGUgcmVzdWx0IGluIHJlZzAuCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyhkZWZpbmVfaW5zbiAiYWRkPG1vZGU+MyIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOklOVE0gMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yLHIscixyLHIiKQorKwkocGx1czpJTlRNIChtYXRjaF9vcGVyYW5kOklOVE0gMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUwLHIsMCxyLDAiKQorKyAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpJTlRNIDIgImF2cjMyX2FkZF9vcGVyYW5kIiAicixyLElzMDgsSXMxNixJczIxIikpKV0KKysgICIiCisrICAiQAorKyAgIGFkZCAgICAgJTAsICUyCisrICAgYWRkICAgICAlMCwgJTEsICUyCisrICAgc3ViICAgICAlMCwgJW4yCisrICAgc3ViICAgICAlMCwgJTEsICVuMgorKyAgIHN1YiAgICAgJTAsICVuMiIKKysKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsNCwyLDQsNCIpCisrICAgKHNldF9hdHRyICJjYyIgIjxJTlRNOmFsdV9jY19hdHRyPiIpXSkKKysKKysoZGVmaW5lX2luc24gImFkZDxtb2RlPjNfbHNsIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SU5UTSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkocGx1czpJTlRNIChhc2hpZnQ6SU5UTSAobWF0Y2hfb3BlcmFuZDpJTlRNIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOklOVE0gMyAiYXZyMzJfYWRkX3NoaWZ0X2ltbWVkaWF0ZV9vcGVyYW5kIiAiS3UwMiIpKQorKyAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpJTlRNIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKV0KKysgICIiCisrICAiYWRkICAgICAlMCwgJTIsICUxIDw8ICUzIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJjYyIgIjxJTlRNOmFsdV9jY19hdHRyPiIpXSkKKysKKysoZGVmaW5lX2luc24gImFkZDxtb2RlPjNfbHNsMiIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOklOVE0gMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysJKHBsdXM6SU5UTSAobWF0Y2hfb3BlcmFuZDpJTlRNIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikKKysgICAgICAgICAgICAgICAgICAgKGFzaGlmdDpJTlRNIChtYXRjaF9vcGVyYW5kOklOVE0gMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6SU5UTSAzICJhdnIzMl9hZGRfc2hpZnRfaW1tZWRpYXRlX29wZXJhbmQiICJLdTAyIikpKSldCisrICAiIgorKyAgImFkZCAgICAgJTAsICUxLCAlMiA8PCAlMyIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAiY2MiICI8SU5UTTphbHVfY2NfYXR0cj4iKV0pCisrCisrCisrKGRlZmluZV9pbnNuICJhZGQ8bW9kZT4zX211bCIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOklOVE0gMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysJKHBsdXM6SU5UTSAobXVsdDpJTlRNIChtYXRjaF9vcGVyYW5kOklOVE0gMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOklOVE0gMyAiaW1tZWRpYXRlX29wZXJhbmQiICJLdTA0IiApKQorKyAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpJTlRNIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKV0KKysgICIoSU5UVkFMKG9wZXJhbmRzWzNdKSA9PSAwKSB8fCAoSU5UVkFMKG9wZXJhbmRzWzNdKSA9PSAyKSB8fAorKyAgIChJTlRWQUwob3BlcmFuZHNbM10pID09IDQpIHx8IChJTlRWQUwob3BlcmFuZHNbM10pID09IDgpIgorKyAgImFkZCAgICAgJTAsICUyLCAlMSA8PCAlcDMiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgImNjIiAiPElOVE06YWx1X2NjX2F0dHI+IildKQorKworKyhkZWZpbmVfaW5zbiAiYWRkPG1vZGU+M19tdWwyIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SU5UTSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkocGx1czpJTlRNIChtYXRjaF9vcGVyYW5kOklOVE0gMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQorKyAgICAgICAgICAgICAgICAgICAobXVsdDpJTlRNIChtYXRjaF9vcGVyYW5kOklOVE0gMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOklOVE0gMyAiaW1tZWRpYXRlX29wZXJhbmQiICJLdTA0IiApKSkpXQorKyAgIihJTlRWQUwob3BlcmFuZHNbM10pID09IDApIHx8IChJTlRWQUwob3BlcmFuZHNbM10pID09IDIpIHx8CisrICAgKElOVFZBTChvcGVyYW5kc1szXSkgPT0gNCkgfHwgKElOVFZBTChvcGVyYW5kc1szXSkgPT0gOCkiCisrICAiYWRkICAgICAlMCwgJTEsICUyIDw8ICVwMyIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAiY2MiICI8SU5UTTphbHVfY2NfYXR0cj4iKV0pCisrCisrCisrKGRlZmluZV9wZWVwaG9sZTIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKyAgICAgICAgKGFzaGlmdDpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAiaW1tZWRpYXRlX29wZXJhbmQiICIiKSkpCisrICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAzICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysJKHBsdXM6U0kgKG1hdGNoX2R1cCAwKQorKyAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgNCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpKSldCisrICAiKHBlZXAyX3JlZ19kZWFkX3AoMiwgb3BlcmFuZHNbMF0pICYmCisrICAgIChJTlRWQUwob3BlcmFuZHNbMl0pIDwgNCAmJiBJTlRWQUwob3BlcmFuZHNbMl0pID4gMCkpIgorKyAgWyhzZXQgKG1hdGNoX2R1cCAzKQorKwkocGx1czpTSSAoYXNoaWZ0OlNJIChtYXRjaF9kdXAgMSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX2R1cCAyKSkKKysgICAgICAgICAgICAgICAgIChtYXRjaF9kdXAgNCkpKV0KKysgICkKKysKKysoZGVmaW5lX3BlZXBob2xlMgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrICAgICAgICAoYXNoaWZ0OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKyAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJpbW1lZGlhdGVfb3BlcmFuZCIgIiIpKSkKKysgICAoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDMgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKwkocGx1czpTSSAobWF0Y2hfb3BlcmFuZDpTSSA0ICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysgICAgICAgICAgICAgICAgIChtYXRjaF9kdXAgMCkpKV0KKysgICIocGVlcDJfcmVnX2RlYWRfcCgyLCBvcGVyYW5kc1swXSkgJiYKKysgICAgKElOVFZBTChvcGVyYW5kc1syXSkgPCA0ICYmIElOVFZBTChvcGVyYW5kc1syXSkgPiAwKSkiCisrICBbKHNldCAobWF0Y2hfZHVwIDMpCisrCShwbHVzOlNJIChhc2hpZnQ6U0kgKG1hdGNoX2R1cCAxKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfZHVwIDIpKQorKyAgICAgICAgICAgICAgICAgKG1hdGNoX2R1cCA0KSkpXQorKyAgKQorKworKyhkZWZpbmVfaW5zbiAiYWRkZGkzIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yLHIiKQorKwkocGx1czpESSAobWF0Y2hfb3BlcmFuZDpESSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiJTAsciIpCisrCQkgKG1hdGNoX29wZXJhbmQ6REkgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIsciIpKSldCisrICAiIgorKyAgIkAKKysgICBhZGQgICAgICUwLCAlMlw7YWRjICAgICVtMCwgJW0wLCAlbTIKKysgICBhZGQgICAgICUwLCAlMSwgJTJcO2FkYyAgICAlbTAsICVtMSwgJW0yIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNiw4IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJhbHUyIikKKysgICAoc2V0X2F0dHIgImNjIiAic2V0X3ZuY3oiKV0pCisrCisrCisrKGRlZmluZV9pbnNuICJhZGQ8bW9kZT5faW1tX3ByZWRpY2FibGUiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpJTlRNIDAgInJlZ2lzdGVyX29wZXJhbmQiICIrciIpCisrCShwbHVzOklOVE0gKG1hdGNoX2R1cCAwKQorKyAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpJTlRNIDEgImF2cjMyX2NvbmRfaW1tZWRpYXRlX29wZXJhbmQiICIlSXMwOCIpKSldCisrICAiIgorKyAgInN1YiU/XHQlMCwgLSUxIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJjYyIgImNtcF9jb25kX2luc24iKQorKyAgIChzZXRfYXR0ciAicHJlZGljYWJsZSIgInllcyIpXQorKykKKysKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrOzsgc3VidHJhY3QKKys7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrOzsgU3VidHJhY3QgcmVnMiBvciBpbW1lZGlhdGUgdmFsdWUgZnJvbSByZWcwIGFuZCBwdXRzIHRoZSByZXN1bHQgaW4gcmVnMC4KKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrCisrKGRlZmluZV9pbnNuICJzdWI8bW9kZT4zIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SU5UTSAwICJnZW5lcmFsX29wZXJhbmQiICI9cixyLHIscixyLHIsciIpCisrCShtaW51czpJTlRNIChtYXRjaF9vcGVyYW5kOklOVE0gMSAibm9ubWVtb3J5X29wZXJhbmQiICIwLHIsMCxyLDAscixLczA4IikKKysJCSAgKG1hdGNoX29wZXJhbmQ6SU5UTSAyICJub25tZW1vcnlfb3BlcmFuZCIgInIscixLczA4LEtzMTYsS3MyMSwwLHIiKSkpXQorKyAgIiIKKysgICJACisrICAgc3ViICAgICAlMCwgJTIKKysgICBzdWIgICAgICUwLCAlMSwgJTIKKysgICBzdWIgICAgICUwLCAlMgorKyAgIHN1YiAgICAgJTAsICUxLCAlMgorKyAgIHN1YiAgICAgJTAsICUyCisrICAgcnN1YiAgICAlMCwgJTEKKysgICByc3ViICAgICUwLCAlMiwgJTEiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICIyLDQsMiw0LDQsMiw0IikKKysgICAoc2V0X2F0dHIgImNjIiAiPElOVE06YWx1X2NjX2F0dHI+IildKQorKworKyhkZWZpbmVfaW5zbiAiKnN1Yjxtb2RlPjNfbXVsIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SU5UTSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkobWludXM6SU5UTSAobWF0Y2hfb3BlcmFuZDpJTlRNIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikKKysgICAgICAgICAgICAgICAgICAgIChtdWx0OklOVE0gKG1hdGNoX29wZXJhbmQ6SU5UTSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDMgImltbWVkaWF0ZV9vcGVyYW5kIiAiS3UwNCIgKSkpKV0KKysgICIoSU5UVkFMKG9wZXJhbmRzWzNdKSA9PSAwKSB8fCAoSU5UVkFMKG9wZXJhbmRzWzNdKSA9PSAyKSB8fAorKyAgIChJTlRWQUwob3BlcmFuZHNbM10pID09IDQpIHx8IChJTlRWQUwob3BlcmFuZHNbM10pID09IDgpIgorKyAgInN1YiAgICAgJTAsICUxLCAlMiA8PCAlcDMiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgImNjIiAiPElOVE06YWx1X2NjX2F0dHI+IildKQorKworKyhkZWZpbmVfaW5zbiAiKnN1Yjxtb2RlPjNfbHNsIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SU5UTSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkobWludXM6SU5UTSAgKG1hdGNoX29wZXJhbmQ6SU5UTSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCisrICAgICAgICAgICAgICAgICAgICAgKGFzaGlmdDpJTlRNIChtYXRjaF9vcGVyYW5kOklOVE0gMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAzICJhdnIzMl9hZGRfc2hpZnRfaW1tZWRpYXRlX29wZXJhbmQiICJLdTAyIikpKSldCisrICAiIgorKyAgInN1YiAgICAgJTAsICUxLCAlMiA8PCAlMyIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAiY2MiICI8SU5UTTphbHVfY2NfYXR0cj4iKV0pCisrCisrCisrKGRlZmluZV9pbnNuICJzdWJkaTMiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIsciIpCisrCShtaW51czpESSAobWF0Y2hfb3BlcmFuZDpESSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiJTAsciIpCisrCQkgKG1hdGNoX29wZXJhbmQ6REkgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIsciIpKSldCisrICAiIgorKyAgIkAKKysgICBzdWIgICAgICUwLCAlMlw7c2JjICAgICVtMCwgJW0wLCAlbTIKKysgICBzdWIgICAgICUwLCAlMSwgJTJcO3NiYyAgICAlbTAsICVtMSwgJW0yIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNiw4IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJhbHUyIikKKysgICAoc2V0X2F0dHIgImNjIiAic2V0X3ZuY3oiKV0pCisrCisrCisrKGRlZmluZV9pbnNuICJzdWI8bW9kZT5faW1tX3ByZWRpY2FibGUiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpJTlRNIDAgInJlZ2lzdGVyX29wZXJhbmQiICIrciIpCisrCShtaW51czpJTlRNIChtYXRjaF9kdXAgMCkKKysgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOklOVE0gMSAiYXZyMzJfY29uZF9pbW1lZGlhdGVfb3BlcmFuZCIgIktzMDgiKSkpXQorKyAgIiIKKysgICJzdWIlP1x0JTAsICUxIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJjYyIgImNtcF9jb25kX2luc24iKQorKyAgIChzZXRfYXR0ciAicHJlZGljYWJsZSIgInllcyIpXSkKKysKKysoZGVmaW5lX2luc24gInJzdWI8bW9kZT5faW1tX3ByZWRpY2FibGUiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpJTlRNIDAgInJlZ2lzdGVyX29wZXJhbmQiICIrciIpCisrCShtaW51czpJTlRNIChtYXRjaF9vcGVyYW5kOklOVE0gMSAiYXZyMzJfY29uZF9pbW1lZGlhdGVfb3BlcmFuZCIgICJLczA4IikKKysgICAgICAgICAgICAgICAgICAgIChtYXRjaF9kdXAgMCkpKV0KKysgICIiCisrICAicnN1YiU/XHQlMCwgJTEiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgImNjIiAiY21wX2NvbmRfaW5zbiIpCisrICAgKHNldF9hdHRyICJwcmVkaWNhYmxlIiAieWVzIildKQorKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBtdWx0aXBseQorKzs7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKys7OyBNdWx0aXBseSBvcDEgYW5kIG9wMiBhbmQgcHV0IHRoZSB2YWx1ZSBpbiBvcDAuCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKworKworKyhkZWZpbmVfaW5zbiAibXVscWkzIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6UUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgICAiPXIscixyIikKKysJKG11bHQ6UUkgKG1hdGNoX29wZXJhbmQ6UUkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUwLHIsciIpCisrCQkgKG1hdGNoX29wZXJhbmQ6UUkgMiAiYXZyMzJfbXVsX29wZXJhbmQiICJyLHIsS3MwOCIpKSldCisrICAiIVRBUkdFVF9OT19NVUxfSU5TTlMiCisrICB7CisrICAgc3dpdGNoICh3aGljaF9hbHRlcm5hdGl2ZSl7CisrICAgIGNhc2UgMDoKKysgICAgICByZXR1cm4gIm11bCAgICAgJTAsICUyIjsKKysgICAgY2FzZSAxOgorKyAgICAgIHJldHVybiAibXVsICAgICAlMCwgJTEsICUyIjsKKysgICAgY2FzZSAyOgorKyAgICAgIHJldHVybiAibXVsICAgICAlMCwgJTEsICUyIjsKKysgICAgZGVmYXVsdDoKKysgICAgICBnY2NfdW5yZWFjaGFibGUoKTsKKysgICB9CisrICB9CisrICBbKHNldF9hdHRyICJ0eXBlIiAibXVsd3dfdyxtdWx3d193LG11bHdoIikKKysgICAoc2V0X2F0dHIgImxlbmd0aCIgIjIsNCw0IikKKysgICAoc2V0X2F0dHIgImNjIiAibm9uZSIpXSkKKysKKysoZGVmaW5lX2luc24gIm11bHNpMyIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgICAgICAgIj1yLHIsciIpCisrCShtdWx0OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIlMCxyLHIiKQorKwkJIChtYXRjaF9vcGVyYW5kOlNJIDIgImF2cjMyX211bF9vcGVyYW5kIiAicixyLEtzMDgiKSkpXQorKyAgIiFUQVJHRVRfTk9fTVVMX0lOU05TIgorKyAgeworKyAgIHN3aXRjaCAod2hpY2hfYWx0ZXJuYXRpdmUpeworKyAgICBjYXNlIDA6CisrICAgICAgcmV0dXJuICJtdWwgICAgICUwLCAlMiI7CisrICAgIGNhc2UgMToKKysgICAgICByZXR1cm4gIm11bCAgICAgJTAsICUxLCAlMiI7CisrICAgIGNhc2UgMjoKKysgICAgICByZXR1cm4gIm11bCAgICAgJTAsICUxLCAlMiI7CisrICAgIGRlZmF1bHQ6CisrICAgICAgZ2NjX3VucmVhY2hhYmxlKCk7CisrICAgfQorKyAgfQorKyAgWyhzZXRfYXR0ciAidHlwZSIgIm11bHd3X3csbXVsd3dfdyxtdWx3aCIpCisrICAgKHNldF9hdHRyICJsZW5ndGgiICIyLDQsNCIpCisrICAgKHNldF9hdHRyICJjYyIgIm5vbmUiKV0pCisrCisrCisrKGRlZmluZV9pbnNuICJtdWxoaXNpMyIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisrCShtdWx0OlNJCisrCSAoc2lnbl9leHRlbmQ6U0kgKG1hdGNoX29wZXJhbmQ6SEkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiVyIikpCisrCSAoc2lnbl9leHRlbmQ6U0kgKG1hdGNoX29wZXJhbmQ6SEkgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpKV0KKysgICIhVEFSR0VUX05PX01VTF9JTlNOUyAmJiBUQVJHRVRfRFNQIgorKyAgIm11bGhoLncgJTAsICUxOmIsICUyOmIiCisrICBbKHNldF9hdHRyICJ0eXBlIiAibXVsaGgiKQorKyAgIChzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJjYyIgIm5vbmUiKV0pCisrCisrKGRlZmluZV9wZWVwaG9sZTIKKysgIFsobWF0Y2hfc2NyYXRjaDpESSA2ICJyIikKKysgICAoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKwkobXVsdDpTSQorKwkgKHNpZ25fZXh0ZW5kOlNJIChtYXRjaF9vcGVyYW5kOkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIiKSkKKysgICAgICAgICAoc2lnbl9leHRlbmQ6U0kgKG1hdGNoX29wZXJhbmQ6SEkgMiAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpKSkpCisrICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAzICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysgICAgICAgIChhc2hpZnRydDpTSSAobWF0Y2hfZHVwIDApCisrICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAxNikpKV0KKysgICIhVEFSR0VUX05PX01VTF9JTlNOUyAmJiBUQVJHRVRfRFNQCisrICAgJiYgKHBlZXAyX3JlZ19kZWFkX3AoMSwgb3BlcmFuZHNbMF0pIHx8IChSRUdOTyhvcGVyYW5kc1swXSkgPT0gUkVHTk8ob3BlcmFuZHNbM10pKSkiCisrICBbKHNldCAobWF0Y2hfZHVwIDQpIChzaWduX2V4dGVuZDpTSSAobWF0Y2hfZHVwIDEpKSkKKysgICAoc2V0IChtYXRjaF9kdXAgNikKKysgICAgICAgIChhc2hpZnQ6REkgKG11bHQ6REkgKHNpZ25fZXh0ZW5kOkRJIChtYXRjaF9kdXAgNCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaWduX2V4dGVuZDpESSAobWF0Y2hfZHVwIDIpKSkKKysgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAxNikpKQorKyAgIChzZXQgKG1hdGNoX2R1cCAzKSAobWF0Y2hfZHVwIDUpKV0KKysKKysgICJ7CisrICAgICBvcGVyYW5kc1s0XSA9IGdlbl9ydHhfUkVHKFNJbW9kZSwgUkVHTk8ob3BlcmFuZHNbMV0pKTsKKysgICAgIG9wZXJhbmRzWzVdID0gZ2VuX2hpZ2hwYXJ0IChTSW1vZGUsIG9wZXJhbmRzWzRdKTsKKysgICB9IgorKyAgKQorKworKyhkZWZpbmVfaW5zbiAibXVsbmhpc2kzIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysgICAgICAgIChtdWx0OlNJCisrICAgICAgICAgKHNpZ25fZXh0ZW5kOlNJIChuZWc6SEkgKG1hdGNoX29wZXJhbmQ6SEkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpCisrICAgICAgICAgKHNpZ25fZXh0ZW5kOlNJIChtYXRjaF9vcGVyYW5kOkhJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKSldCisrICAiIVRBUkdFVF9OT19NVUxfSU5TTlMgJiYgVEFSR0VUX0RTUCIKKysgICJtdWxuaGgudyAlMCwgJTE6YiwgJTI6YiIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJtdWxoaCIpCisrICAgKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgImNjIiAibm9uZSIpXSkKKysKKysoZGVmaW5lX2luc24gIm1hY2hpc2kzIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIityIikKKysJKHBsdXM6U0kgKG11bHQ6U0kKKysgICAgICAgICAgICAgICAgICAoc2lnbl9leHRlbmQ6U0kgKG1hdGNoX29wZXJhbmQ6SEkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiVyIikpCisrICAgICAgICAgICAgICAgICAgKHNpZ25fZXh0ZW5kOlNJIChtYXRjaF9vcGVyYW5kOkhJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKQorKyAgICAgICAgICAgICAgICAgKG1hdGNoX2R1cCAwKSkpXQorKyAgIiFUQVJHRVRfTk9fTVVMX0lOU05TICYmIFRBUkdFVF9EU1AiCisrICAibWFjaGgudyAlMCwgJTE6YiwgJTI6YiIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJtYWNoaF93IikKKysgICAoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAiY2MiICJub25lIildKQorKworKworKworKyhkZWZpbmVfaW5zbiAibXVsc2lkaTMiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkobXVsdDpESQorKwkgKHNpZ25fZXh0ZW5kOkRJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIlciIpKQorKwkgKHNpZ25fZXh0ZW5kOkRJIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKSldCisrICAiIVRBUkdFVF9OT19NVUxfSU5TTlMiCisrICAibXVscy5kICAlMCwgJTEsICUyIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgIm11bHd3X2QiKQorKyAgIChzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJjYyIgIm5vbmUiKV0pCisrCisrKGRlZmluZV9pbnNuICJ1bXVsc2lkaTMiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkobXVsdDpESQorKwkgKHplcm9fZXh0ZW5kOkRJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIlciIpKQorKwkgKHplcm9fZXh0ZW5kOkRJIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKSldCisrICAiIVRBUkdFVF9OT19NVUxfSU5TTlMiCisrICAibXVsdS5kICAlMCwgJTEsICUyIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgIm11bHd3X2QiKQorKyAgIChzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJjYyIgIm5vbmUiKV0pCisrCisrKGRlZmluZV9pbnNuICIqbXVsYWNjc2kzIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIityIikKKysJKHBsdXM6U0kgKG11bHQ6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiVyIikKKysJCQkgIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpCisrCQkgKG1hdGNoX2R1cCAwKSkpXQorKyAgIiFUQVJHRVRfTk9fTVVMX0lOU05TIgorKyAgIm1hYyAgICAgJTAsICUxLCAlMiIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJtYWN3d193IikKKysgICAoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAiY2MiICJub25lIildKQorKworKyhkZWZpbmVfaW5zbiAiKm11bGFjY3NpZGkzIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIityIikKKysJKHBsdXM6REkgKG11bHQ6REkKKysJCSAgKHNpZ25fZXh0ZW5kOkRJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIlciIpKQorKwkJICAoc2lnbl9leHRlbmQ6REkgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpCisrCQkgKG1hdGNoX2R1cCAwKSkpXQorKyAgIiFUQVJHRVRfTk9fTVVMX0lOU05TIgorKyAgIm1hY3MuZCAgJTAsICUxLCAlMiIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJtYWN3d19kIikKKysgICAoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAiY2MiICJub25lIildKQorKworKyhkZWZpbmVfaW5zbiAiKnVtdWxhY2NzaWRpMyIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkRJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIrciIpCisrCShwbHVzOkRJIChtdWx0OkRJCisrCQkgICh6ZXJvX2V4dGVuZDpESSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiJXIiKSkKKysJCSAgKHplcm9fZXh0ZW5kOkRJIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKQorKwkJIChtYXRjaF9kdXAgMCkpKV0KKysgICIhVEFSR0VUX05PX01VTF9JTlNOUyIKKysgICJtYWN1LmQgICUwLCAlMSwgJTIiCisrICBbKHNldF9hdHRyICJ0eXBlIiAibWFjd3dfZCIpCisrICAgKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgImNjIiAibm9uZSIpXSkKKysKKysKKysKKys7OyBUcnkgdG8gYXZvaWQgV3JpdGUtQWZ0ZXItV3JpdGUgaGF6YXJkcyBmb3IgbXVsIG9wZXJhdGlvbnMKKys7OyBpZiBpdCBjYW4gYmUgZG9uZQorKyhkZWZpbmVfcGVlcGhvbGUyCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysJKG11bHQ6U0kKKysJIChzaWduX2V4dGVuZDpTSSAobWF0Y2hfb3BlcmFuZCAxICJnZW5lcmFsX29wZXJhbmQiICIiKSkKKysgICAgICAgICAoc2lnbl9leHRlbmQ6U0kgKG1hdGNoX29wZXJhbmQgMiAiZ2VuZXJhbF9vcGVyYW5kIiAiIikpKSkKKysgICAoc2V0IChtYXRjaF9kdXAgMCkKKysJKG1hdGNoX29wZXJhdG9yOlNJIDMgImFsdV9vcGVyYXRvciIgWyhtYXRjaF9kdXAgMCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZCA0ICJnZW5lcmFsX29wZXJhbmQiICIiKV0pKV0KKysgICJwZWVwMl9yZWdfZGVhZF9wKDEsIG9wZXJhbmRzWzJdKSIKKysgIFsoc2V0IChtYXRjaF9kdXAgNSkKKysgICAgICAgIChtdWx0OlNJCisrICAgICAgICAgKHNpZ25fZXh0ZW5kOlNJIChtYXRjaF9kdXAgMSkpCisrICAgICAgICAgKHNpZ25fZXh0ZW5kOlNJIChtYXRjaF9kdXAgMikpKSkKKysgICAoc2V0IChtYXRjaF9kdXAgMCkKKysJKG1hdGNoX29wX2R1cCAzIFsobWF0Y2hfZHVwIDUpCisrICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9kdXAgNCldKSldCisrICAie29wZXJhbmRzWzVdID0gZ2VuX3J0eF9SRUcoU0ltb2RlLCBSRUdOTyhvcGVyYW5kc1syXSkpO30iCisrICApCisrCisrCisrCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKzs7IERTUCBpbnN0cnVjdGlvbnMKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrKGRlZmluZV9pbnNuICJtdWxzYXRoaF9oIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysgICAgICAgIChzc190cnVuY2F0ZTpISSAoYXNoaWZ0cnQ6U0kgKG11bHQ6U0kgKHNpZ25fZXh0ZW5kOlNJIChtYXRjaF9vcGVyYW5kOkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIlciIpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2lnbl9leHRlbmQ6U0kgKG1hdGNoX29wZXJhbmQ6SEkgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMTUpKSkpXQorKyAgIiFUQVJHRVRfTk9fTVVMX0lOU05TICYmIFRBUkdFVF9EU1AiCisrICAibXVsc2F0aGguaFx0JTAsICUxOmIsICUyOmIiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgImNjIiAibm9uZSIpCisrICAgKHNldF9hdHRyICJ0eXBlIiAibXVsaGgiKV0pCisrCisrKGRlZmluZV9pbnNuICJtdWxzYXRybmRoaF9oIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysgICAgICAgIChzc190cnVuY2F0ZTpISSAoYXNoaWZ0cnQ6U0kKKysgICAgICAgICAgICAgICAgICAgICAgICAgKHBsdXM6U0kgKG11bHQ6U0kgKHNpZ25fZXh0ZW5kOlNJIChtYXRjaF9vcGVyYW5kOkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIlciIpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2lnbl9leHRlbmQ6U0kgKG1hdGNoX29wZXJhbmQ6SEkgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMTA3Mzc0MTgyNCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMTUpKSkpXQorKyAgIiFUQVJHRVRfTk9fTVVMX0lOU05TICYmIFRBUkdFVF9EU1AiCisrICAibXVsc2F0cm5kaGguaFx0JTAsICUxOmIsICUyOmIiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgImNjIiAibm9uZSIpCisrICAgKHNldF9hdHRyICJ0eXBlIiAibXVsaGgiKV0pCisrCisrKGRlZmluZV9pbnNuICJtdWxzYXRoaF93IgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysgICAgICAgIChzc190cnVuY2F0ZTpTSSAoYXNoaWZ0OkRJIChtdWx0OkRJIChzaWduX2V4dGVuZDpESSAobWF0Y2hfb3BlcmFuZDpISSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiJXIiKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaWduX2V4dGVuZDpESSAobWF0Y2hfb3BlcmFuZDpISSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMSkpKSldCisrICAiIVRBUkdFVF9OT19NVUxfSU5TTlMgJiYgVEFSR0VUX0RTUCIKKysgICJtdWxzYXRoaC53XHQlMCwgJTE6YiwgJTI6YiIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAiY2MiICJub25lIikKKysgICAoc2V0X2F0dHIgInR5cGUiICJtdWxoaCIpXSkKKysKKysoZGVmaW5lX2luc24gIm11bHNhdHdoX3ciCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKyAgICAgICAgKHNzX3RydW5jYXRlOlNJIChhc2hpZnRydDpESSAobXVsdDpESSAoc2lnbl9leHRlbmQ6REkgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpZ25fZXh0ZW5kOkRJIChtYXRjaF9vcGVyYW5kOkhJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDE1KSkpKV0KKysgICIhVEFSR0VUX05PX01VTF9JTlNOUyAmJiBUQVJHRVRfRFNQIgorKyAgIm11bHNhdHdoLndcdCUwLCAlMSwgJTI6YiIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAiY2MiICJub25lIikKKysgICAoc2V0X2F0dHIgInR5cGUiICJtdWx3aCIpXSkKKysKKysoZGVmaW5lX2luc24gIm11bHNhdHJuZHdoX3ciCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKyAgICAgICAgKHNzX3RydW5jYXRlOlNJIChhc2hpZnRydDpESSAocGx1czpESSAobXVsdDpESSAoc2lnbl9leHRlbmQ6REkgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpZ25fZXh0ZW5kOkRJIChtYXRjaF9vcGVyYW5kOkhJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDEwNzM3NDE4MjQpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDE1KSkpKV0KKysgICIhVEFSR0VUX05PX01VTF9JTlNOUyAmJiBUQVJHRVRfRFNQIgorKyAgIm11bHNhdHJuZHdoLndcdCUwLCAlMSwgJTI6YiIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAiY2MiICJub25lIikKKysgICAoc2V0X2F0dHIgInR5cGUiICJtdWx3aCIpXSkKKysKKysoZGVmaW5lX2luc24gIm1hY3NhdGhoX3ciCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiK3IiKQorKyAgICAgICAgKHBsdXM6U0kgKG1hdGNoX2R1cCAwKQorKyAgICAgICAgICAgICAgICAgKHNzX3RydW5jYXRlOlNJIChhc2hpZnQ6REkgKG11bHQ6REkgKHNpZ25fZXh0ZW5kOkRJIChtYXRjaF9vcGVyYW5kOkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIlciIpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpZ25fZXh0ZW5kOkRJIChtYXRjaF9vcGVyYW5kOkhJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAxKSkpKSldCisrICAiIVRBUkdFVF9OT19NVUxfSU5TTlMgJiYgVEFSR0VUX0RTUCIKKysgICJtYWNzYXRoaC53XHQlMCwgJTE6YiwgJTI6YiIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAiY2MiICJub25lIikKKysgICAoc2V0X2F0dHIgInR5cGUiICJtdWxoaCIpXSkKKysKKysKKysoZGVmaW5lX2luc24gIm11bHdoX2QiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKyAgICAgICAgKGFzaGlmdDpESSAobXVsdDpESSAoc2lnbl9leHRlbmQ6REkgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpZ25fZXh0ZW5kOkRJIChtYXRjaF9vcGVyYW5kOkhJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKQorKyAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDE2KSkpXQorKyAgIiFUQVJHRVRfTk9fTVVMX0lOU05TICYmIFRBUkdFVF9EU1AiCisrICAibXVsd2guZFx0JTAsICUxLCAlMjpiIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJjYyIgIm5vbmUiKQorKyAgIChzZXRfYXR0ciAidHlwZSIgIm11bHdoIildKQorKworKworKyhkZWZpbmVfaW5zbiAibXVsbndoX2QiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKyAgICAgICAgKGFzaGlmdDpESSAobXVsdDpESSAobm90OkRJIChzaWduX2V4dGVuZDpESSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpZ25fZXh0ZW5kOkRJIChtYXRjaF9vcGVyYW5kOkhJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKQorKyAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDE2KSkpXQorKyAgIiFUQVJHRVRfTk9fTVVMX0lOU05TICYmIFRBUkdFVF9EU1AiCisrICAibXVsbndoLmRcdCUwLCAlMSwgJTI6YiIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAiY2MiICJub25lIikKKysgICAoc2V0X2F0dHIgInR5cGUiICJtdWx3aCIpXSkKKysKKysoZGVmaW5lX2luc24gIm1hY3doX2QiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiK3IiKQorKyAgICAgICAgKHBsdXM6REkgKG1hdGNoX2R1cCAwKQorKyAgICAgICAgICAgICAgICAgKGFzaGlmdDpESSAobXVsdDpESSAoc2lnbl9leHRlbmQ6REkgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiVyIikpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaWduX2V4dGVuZDpESSAobWF0Y2hfb3BlcmFuZDpISSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAxNikpKSldCisrICAiIVRBUkdFVF9OT19NVUxfSU5TTlMgJiYgVEFSR0VUX0RTUCIKKysgICJtYWN3aC5kXHQlMCwgJTEsICUyOmIiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgImNjIiAibm9uZSIpCisrICAgKHNldF9hdHRyICJ0eXBlIiAibXVsd2giKV0pCisrCisrKGRlZmluZV9pbnNuICJtYWNoaF9kIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIityIikKKysgICAgICAgIChwbHVzOkRJIChtYXRjaF9kdXAgMCkKKysgICAgICAgICAgICAgICAgIChtdWx0OkRJIChzaWduX2V4dGVuZDpESSAobWF0Y2hfb3BlcmFuZDpISSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiJXIiKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChzaWduX2V4dGVuZDpESSAobWF0Y2hfb3BlcmFuZDpISSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSkpKV0KKysgICIhVEFSR0VUX05PX01VTF9JTlNOUyAmJiBUQVJHRVRfRFNQIgorKyAgIm1hY2hoLmRcdCUwLCAlMTpiLCAlMjpiIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJjYyIgIm5vbmUiKQorKyAgIChzZXRfYXR0ciAidHlwZSIgIm11bHdoIildKQorKworKyhkZWZpbmVfaW5zbiAic2F0YWRkX3ciCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKyAgICAgICAgKHNzX3BsdXM6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQorKyAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpXQorKyAgIlRBUkdFVF9EU1AiCisrICAic2F0YWRkLndcdCUwLCAlMSwgJTIiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgImNjIiAibm9uZSIpCisrICAgKHNldF9hdHRyICJ0eXBlIiAiYWx1X3NhdCIpXSkKKysKKysoZGVmaW5lX2luc24gInNhdHN1Yl93IgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysgICAgICAgIChzc19taW51czpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCisrICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpXQorKyAgIlRBUkdFVF9EU1AiCisrICAic2F0c3ViLndcdCUwLCAlMSwgJTIiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgImNjIiAibm9uZSIpCisrICAgKHNldF9hdHRyICJ0eXBlIiAiYWx1X3NhdCIpXSkKKysKKysoZGVmaW5lX2luc24gInNhdGFkZF9oIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysgICAgICAgIChzc19wbHVzOkhJIChtYXRjaF9vcGVyYW5kOkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikKKysgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkhJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKV0KKysgICJUQVJHRVRfRFNQIgorKyAgInNhdGFkZC5oXHQlMCwgJTEsICUyIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJjYyIgIm5vbmUiKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImFsdV9zYXQiKV0pCisrCisrKGRlZmluZV9pbnNuICJzYXRzdWJfaCIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisrICAgICAgICAoc3NfbWludXM6SEkgKG1hdGNoX29wZXJhbmQ6SEkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQorKyAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkhJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKV0KKysgICJUQVJHRVRfRFNQIgorKyAgInNhdHN1Yi5oXHQlMCwgJTEsICUyIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJjYyIgIm5vbmUiKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImFsdV9zYXQiKV0pCisrCisrCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKzs7IHNtaW4KKys7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrOzsgU2V0IHJlZzAgdG8gdGhlIHNtYWxsZXN0IHZhbHVlIG9mIHJlZzEgYW5kIHJlZzIuIEl0IGlzIHVzZWQgZm9yIHNpZ25lZAorKzs7IHZhbHVlcyBpbiB0aGUgcmVnaXN0ZXJzLgorKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysoZGVmaW5lX2luc24gInNtaW5zaTMiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkoc21pbjpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCisrCQkgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpXQorKyAgIiIKKysgICJtaW4gICAgICUwLCAlMSwgJTIiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgImNjIiAibm9uZSIpXSkKKysKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrOzsgc21heAorKzs7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKys7OyBTZXQgcmVnMCB0byB0aGUgbGFyZ2VzdCB2YWx1ZSBvZiByZWcxIGFuZCByZWcyLiBJdCBpcyB1c2VkIGZvciBzaWduZWQKKys7OyB2YWx1ZXMgaW4gdGhlIHJlZ2lzdGVycy4KKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrKGRlZmluZV9pbnNuICJzbWF4c2kzIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysJKHNtYXg6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQorKwkJIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKV0KKysgICIiCisrICAibWF4ICAgICAlMCwgJTEsICUyIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJjYyIgIm5vbmUiKV0pCisrCisrCisrCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKzs7IExvZ2ljYWwgb3BlcmF0aW9ucworKzs7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKKysKKys7OyBTcGxpdCB1cCBzaW1wbGUgREltb2RlIGxvZ2ljYWwgb3BlcmF0aW9ucy4gIFNpbXBseSBwZXJmb3JtIHRoZSBsb2dpY2FsCisrOzsgb3BlcmF0aW9uIG9uIHRoZSB1cHBlciBhbmQgbG93ZXIgaGFsdmVzIG9mIHRoZSByZWdpc3RlcnMuCisrKGRlZmluZV9zcGxpdAorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrCShtYXRjaF9vcGVyYXRvcjpESSA2ICJsb2dpY2FsX2JpbmFyeV9vcGVyYXRvciIKKysJICBbKG1hdGNoX29wZXJhbmQ6REkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrCSAgIChtYXRjaF9vcGVyYW5kOkRJIDIgInJlZ2lzdGVyX29wZXJhbmQiICIiKV0pKV0KKysgICJyZWxvYWRfY29tcGxldGVkIgorKyAgWyhzZXQgKG1hdGNoX2R1cCAwKSAobWF0Y2hfb3BfZHVwOlNJIDYgWyhtYXRjaF9kdXAgMSkgKG1hdGNoX2R1cCAyKV0pKQorKyAgIChzZXQgKG1hdGNoX2R1cCAzKSAobWF0Y2hfb3BfZHVwOlNJIDYgWyhtYXRjaF9kdXAgNCkgKG1hdGNoX2R1cCA1KV0pKV0KKysgICIKKysgIHsKKysgICAgb3BlcmFuZHNbM10gPSBnZW5faGlnaHBhcnQgKFNJbW9kZSwgb3BlcmFuZHNbMF0pOworKyAgICBvcGVyYW5kc1swXSA9IGdlbl9sb3dwYXJ0IChTSW1vZGUsIG9wZXJhbmRzWzBdKTsKKysgICAgb3BlcmFuZHNbNF0gPSBnZW5faGlnaHBhcnQgKFNJbW9kZSwgb3BlcmFuZHNbMV0pOworKyAgICBvcGVyYW5kc1sxXSA9IGdlbl9sb3dwYXJ0IChTSW1vZGUsIG9wZXJhbmRzWzFdKTsKKysgICAgb3BlcmFuZHNbNV0gPSBnZW5faGlnaHBhcnQgKFNJbW9kZSwgb3BlcmFuZHNbMl0pOworKyAgICBvcGVyYW5kc1syXSA9IGdlbl9sb3dwYXJ0IChTSW1vZGUsIG9wZXJhbmRzWzJdKTsKKysgIH0iCisrKQorKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBMb2dpY2FsIG9wZXJhdGlvbnMgd2l0aCBzaGlmdGVkIG9wZXJhbmQKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrKGRlZmluZV9pbnNuICI8Y29kZT5zaV9sc2hpZnQiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKyAgICAgICAgKGxvZ2ljYWw6U0kgKG1hdGNoX29wZXJhdG9yOlNJIDQgImxvZ2ljYWxfc2hpZnRfb3BlcmF0b3IiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMyAiaW1tZWRpYXRlX29wZXJhbmQiICJLdTA1IildKQorKyAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpXQorKyAgIiIKKysgIHsKKysgICBpZiAoIEdFVF9DT0RFKG9wZXJhbmRzWzRdKSA9PSBBU0hJRlQgKQorKyAgICAgIHJldHVybiAiPGxvZ2ljYWxfaW5zbj5cdCUwLCAlMSwgJTIgPDwgJTMiOworKyAgIGVsc2UKKysgICAgICByZXR1cm4gIjxsb2dpY2FsX2luc24+XHQlMCwgJTEsICUyID4+ICUzIjsKKysgICAgICB9CisrCisrICBbKHNldF9hdHRyICJjYyIgInNldF96IildCisrKQorKworKworKzs7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisrOzsgUGVlcGhvbGVzIGZvciBkZXRlY3RpbmcgbG9naWNhbCBvcGVyYW50aW9ucworKzs7IHdpdGggc2hpZnRlZCBvcGVyYW5kcworKzs7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisrCisrKGRlZmluZV9wZWVwaG9sZQorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrICAgICAgICAobWF0Y2hfb3BlcmF0b3I6U0kgNSAibG9naWNhbF9zaGlmdF9vcGVyYXRvciIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgImltbWVkaWF0ZV9vcGVyYW5kIiAiIildKSkKKysgICAoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKyAgICAgICAgKGxvZ2ljYWw6U0kgKG1hdGNoX29wZXJhbmQ6U0kgNCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrICAgICAgICAgICAgICAgICAgICAobWF0Y2hfZHVwIDMpKSldCisrICAiKGRlYWRfb3Jfc2V0X3AoaW5zbiwgb3BlcmFuZHNbM10pKSB8fCAoUkVHTk8ob3BlcmFuZHNbM10pID09IFJFR05PKG9wZXJhbmRzWzBdKSkiCisrICB7CisrICAgaWYgKCBHRVRfQ09ERShvcGVyYW5kc1s1XSkgPT0gQVNISUZUICkKKysgICAgICByZXR1cm4gIjxsb2dpY2FsX2luc24+XHQlMCwgJTQsICUxIDw8ICUyIjsKKysgICBlbHNlCisrICAgICAgcmV0dXJuICI8bG9naWNhbF9pbnNuPlx0JTAsICU0LCAlMSA+PiAlMiI7CisrICB9CisrICBbKHNldF9hdHRyICJjYyIgInNldF96IildCisrICApCisrCisrKGRlZmluZV9wZWVwaG9sZQorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrICAgICAgICAobWF0Y2hfb3BlcmF0b3I6U0kgNSAibG9naWNhbF9zaGlmdF9vcGVyYXRvciIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgImltbWVkaWF0ZV9vcGVyYW5kIiAiIildKSkKKysgICAoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKyAgICAgICAgKGxvZ2ljYWw6U0kgKG1hdGNoX2R1cCAzKQorKyAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgNCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpKSldCisrICAiKGRlYWRfb3Jfc2V0X3AoaW5zbiwgb3BlcmFuZHNbM10pKSB8fCAoUkVHTk8ob3BlcmFuZHNbM10pID09IFJFR05PKG9wZXJhbmRzWzBdKSkiCisrICB7CisrICAgaWYgKCBHRVRfQ09ERShvcGVyYW5kc1s1XSkgPT0gQVNISUZUICkKKysgICAgICByZXR1cm4gIjxsb2dpY2FsX2luc24+XHQlMCwgJTQsICUxIDw8ICUyIjsKKysgICBlbHNlCisrICAgICAgcmV0dXJuICI8bG9naWNhbF9pbnNuPlx0JTAsICU0LCAlMSA+PiAlMiI7CisrICB9CisrICBbKHNldF9hdHRyICJjYyIgInNldF96IildCisrICApCisrCisrCisrKGRlZmluZV9wZWVwaG9sZTIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKyAgICAgICAgKG1hdGNoX29wZXJhdG9yOlNJIDUgImxvZ2ljYWxfc2hpZnRfb3BlcmF0b3IiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJpbW1lZGlhdGVfb3BlcmFuZCIgIiIpXSkpCisrICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAzICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysgICAgICAgIChsb2dpY2FsOlNJIChtYXRjaF9vcGVyYW5kOlNJIDQgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKyAgICAgICAgICAgICAgICAgICAgKG1hdGNoX2R1cCAwKSkpXQorKyAgIihwZWVwMl9yZWdfZGVhZF9wKDIsIG9wZXJhbmRzWzBdKSkgfHwgKFJFR05PKG9wZXJhbmRzWzNdKSA9PSBSRUdOTyhvcGVyYW5kc1swXSkpIgorKworKyAgWyhzZXQgKG1hdGNoX2R1cCAzKQorKyAgICAgICAgKGxvZ2ljYWw6U0kgIChtYXRjaF9vcF9kdXA6U0kgNSBbKG1hdGNoX2R1cCAxKSAobWF0Y2hfZHVwIDIpXSkKKysgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfZHVwIDQpKSldCisrCisrICAiIgorKykKKysKKysoZGVmaW5lX3BlZXBob2xlMgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrICAgICAgICAobWF0Y2hfb3BlcmF0b3I6U0kgNSAibG9naWNhbF9zaGlmdF9vcGVyYXRvciIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgImltbWVkaWF0ZV9vcGVyYW5kIiAiIildKSkKKysgICAoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDMgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKyAgICAgICAgKGxvZ2ljYWw6U0kgKG1hdGNoX2R1cCAwKQorKyAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgNCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpKSldCisrICAiKHBlZXAyX3JlZ19kZWFkX3AoMiwgb3BlcmFuZHNbMF0pKSB8fCAoUkVHTk8ob3BlcmFuZHNbM10pID09IFJFR05PKG9wZXJhbmRzWzBdKSkiCisrCisrICBbKHNldCAobWF0Y2hfZHVwIDMpCisrICAgICAgICAobG9naWNhbDpTSSAobWF0Y2hfb3BfZHVwOlNJIDUgWyhtYXRjaF9kdXAgMSkgKG1hdGNoX2R1cCAyKV0pCisrICAgICAgICAgICAgICAgICAgICAobWF0Y2hfZHVwIDQpKSldCisrCisrICAiIgorKykKKysKKysKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrOzsgYW5kCisrOzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKzs7IFN0b3JlIHRoZSByZXN1bHQgYWZ0ZXIgYSBiaXR3aXNlIGxvZ2ljYWwtYW5kIGJldHdlZW4gcmVnMCBhbmQgcmVnMiBpbiByZWcwLgorKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysKKysoZGVmaW5lX2luc24gImFuZG5zaSIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIrciIpCisrICAgICAgICAoYW5kOlNJIChtYXRjaF9kdXAgMCkKKysgICAgICAgICAgICAgICAgKG5vdDpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSkpXQorKyAgIiIKKysgICJhbmRuICAgICUwLCAlMSIKKysgIFsoc2V0X2F0dHIgImNjIiAic2V0X3oiKQorKyAgIChzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKykKKysKKysKKysoZGVmaW5lX2luc24gImFuZHNpMyIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgImF2cjMyX3Jtd19tZW1vcnlfb3JfcmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgICAgIj1ZLHIscixyLCAgIHIsICAgcixyLHIscixyIikKKysJKGFuZDpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJhdnIzMl9ybXdfbWVtb3J5X29yX3JlZ2lzdGVyX29wZXJhbmQiICAiJTAsciwwLDAsICAgMCwgICAwLDAsMCwwLHIiICkKKysJCShtYXRjaF9vcGVyYW5kOlNJIDIgIm5vbm1lbW9yeV9vcGVyYW5kIiAgICAgICAgICAgICAgICAgICAgICIgTixNLE4sS3UxNixLczE3LEosTCxyLGksciIpKSldCisrICAiIgorKyAgIkAKKysgICBtZW1jXHQlMCwgJXoyCisrICAgYmZleHR1XHQlMCwgJTEsIDAsICV6MgorKyAgIGNiclx0JTAsICV6MgorKyAgIGFuZGxcdCUwLCAlMiwgQ09ICisrICAgYW5kbFx0JTAsIGxvKCUyKQorKyAgIGFuZGhcdCUwLCBoaSglMiksIENPSAorKyAgIGFuZGhcdCUwLCBoaSglMikKKysgICBhbmRcdCUwLCAlMgorKyAgIGFuZGhcdCUwLCBoaSglMilcO2FuZGxcdCUwLCBsbyglMikKKysgICBhbmRcdCUwLCAlMSwgJTIiCisrICAKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQsNCwyLDQsNCw0LDQsMiw4LDQiKQorKyAgIChzZXRfYXR0ciAiY2MiICJub25lLHNldF96LHNldF96LHNldF96LHNldF96LHNldF96LHNldF96LHNldF96LHNldF96LHNldF96IildKQorKworKyhkZWZpbmVfaW5zbiAiYW5kZGkzIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj0mciwmciIpCisrCShhbmQ6REkgKG1hdGNoX29wZXJhbmQ6REkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUwLHIiKQorKyAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpESSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAicixyIikpKV0KKysgICIiCisrICAiIyIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjgiKQorKyAgIChzZXRfYXR0ciAiY2MiICJjbG9iYmVyIildCisrKQorKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBvcgorKzs7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKys7OyBTdG9yZSB0aGUgcmVzdWx0IGFmdGVyIGEgYml0d2lzZSBpbmNsdXNpdmUtb3IgYmV0d2VlbiByZWcwIGFuZCByZWcyIGluIHJlZzAuCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKworKyhkZWZpbmVfaW5zbiAiaW9yc2kzIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAiYXZyMzJfcm13X21lbW9yeV9vcl9yZWdpc3Rlcl9vcGVyYW5kIiAgICAgICAgICAiPVkscixyLCAgIHIscixyLHIiKQorKwkoaW9yOlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgImF2cjMyX3Jtd19tZW1vcnlfb3JfcmVnaXN0ZXJfb3BlcmFuZCIgICIlMCwwLDAsICAgMCwwLDAsciIgKQorKwkJKG1hdGNoX29wZXJhbmQ6U0kgMiAibm9ubWVtb3J5X29wZXJhbmQiICAgICAgICAgICAgICAgICAgICAgIiBPLE8sS3UxNixKLHIsaSxyIikpKV0KKysgICIiCisrICAiQAorKyAgIG1lbXNcdCUwLCAlcDIKKysgICBzYnJcdCUwLCAlcDIKKysgICBvcmxcdCUwLCAlMgorKyAgIG9yaFx0JTAsIGhpKCUyKQorKyAgIG9yXHQlMCwgJTIKKysgICBvcmhcdCUwLCBoaSglMilcO29ybFx0JTAsIGxvKCUyKQorKyAgIG9yXHQlMCwgJTEsICUyIgorKworKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCwyLDQsNCwyLDgsNCIpCisrICAgKHNldF9hdHRyICJjYyIgIm5vbmUsc2V0X3osc2V0X3osc2V0X3osc2V0X3osc2V0X3osc2V0X3oiKV0pCisrCisrCisrKGRlZmluZV9pbnNuICJpb3JkaTMiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPSZyLCZyIikKKysJKGlvcjpESSAobWF0Y2hfb3BlcmFuZDpESSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiJTAsciIpCisrICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkRJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyLHIiKSkpXQorKyAgIiIKKysgICIjIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiOCIpCisrICAgKHNldF9hdHRyICJjYyIgImNsb2JiZXIiKV0KKyspCisrCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKzs7IHhvciBieXRlcworKzs7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKys7OyBTdG9yZSB0aGUgcmVzdWx0IGFmdGVyIGEgYml0d2lzZSBleGNsdXNpdmUtb3IgYmV0d2VlbiByZWcwIGFuZCByZWcyIGluIHJlZzAuCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKworKyhkZWZpbmVfaW5zbiAieG9yc2kzIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAiYXZyMzJfcm13X21lbW9yeV9vcl9yZWdpc3Rlcl9vcGVyYW5kIiAgICAgICAgICAiPVksciwgICByLHIscixyIikKKysJKHhvcjpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJhdnIzMl9ybXdfbWVtb3J5X29yX3JlZ2lzdGVyX29wZXJhbmQiICAiJTAsMCwgICAwLDAsMCxyIiApCisrCQkobWF0Y2hfb3BlcmFuZDpTSSAyICJub25tZW1vcnlfb3BlcmFuZCIgICAgICAgICAgICAgICAgICAgICAiIE8sS3UxNixKLHIsaSxyIikpKV0KKysgICIiCisrICAiQAorKyAgIG1lbXRcdCUwLCAlcDIKKysgICBlb3JsXHQlMCwgJTIKKysgICBlb3JoXHQlMCwgaGkoJTIpCisrICAgZW9yXHQlMCwgJTIKKysgICBlb3JoXHQlMCwgaGkoJTIpXDtlb3JsXHQlMCwgbG8oJTIpCisrICAgZW9yXHQlMCwgJTEsICUyIgorKyAgCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0LDQsNCwyLDgsNCIpCisrICAgKHNldF9hdHRyICJjYyIgIm5vbmUsc2V0X3osc2V0X3osc2V0X3osc2V0X3osc2V0X3oiKV0pCisrCisrCisrKGRlZmluZV9pbnNuICJ4b3JkaTMiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPSZyLCZyIikKKysJKHhvcjpESSAobWF0Y2hfb3BlcmFuZDpESSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiJTAsciIpCisrICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkRJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyLHIiKSkpXQorKyAgIiIKKysgICIjIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiOCIpCisrICAgKHNldF9hdHRyICJjYyIgImNsb2JiZXIiKV0KKyspCisrCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKzs7IFRocmVlIG9wZXJhbmQgcHJlZGljYWJsZSBpbnNucworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysKKysoZGVmaW5lX2luc24gIjxwcmVkaWNhYmxlX2luc24zPjxtb2RlPl9wcmVkaWNhYmxlIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SU5UTSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkocHJlZGljYWJsZV9vcDM6SU5UTSAobWF0Y2hfb3BlcmFuZDpJTlRNIDEgInJlZ2lzdGVyX29wZXJhbmQiICI8cHJlZGljYWJsZV9jb21tdXRhdGl2ZTM+ciIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpJTlRNIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKV0KKysgICJUQVJHRVRfVjJfSU5TTlMiCisrICAiPHByZWRpY2FibGVfaW5zbjM+JT9cdCUwLCAlMSwgJTIiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgImNjIiAiY21wX2NvbmRfaW5zbiIpCisrICAgKHNldF9hdHRyICJwcmVkaWNhYmxlIiAieWVzIildCisrKQorKworKyhkZWZpbmVfaW5zbl9hbmRfc3BsaXQgIjxwcmVkaWNhYmxlX2luc24zPjxtb2RlPl9pbW1fY2xvYmJlcl9wcmVkaWNhYmxlIgorKyAgWyhwYXJhbGxlbCAKKysgICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SU5UTSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKyAgICAgICAgICAocHJlZGljYWJsZV9vcDM6SU5UTSAobWF0Y2hfb3BlcmFuZDpJTlRNIDEgInJlZ2lzdGVyX29wZXJhbmQiICI8cHJlZGljYWJsZV9jb21tdXRhdGl2ZTM+ciIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOklOVE0gMiAiYXZyMzJfbW92X2ltbWVkaWF0ZV9vcGVyYW5kIiAiSktzMjEiKSkpCisrICAgICAoY2xvYmJlciAobWF0Y2hfb3BlcmFuZDpJTlRNIDMgInJlZ2lzdGVyX29wZXJhbmQiICI9JnIiKSldKV0KKysgICJUQVJHRVRfVjJfSU5TTlMiCisrICB7CisrICAgaWYgKCBjdXJyZW50X2luc25fcHJlZGljYXRlICE9IE5VTExfUlRYICkgCisrICAgICAgeworKyAgICAgICBpZiAoIGF2cjMyX2NvbnN0X29rX2Zvcl9jb25zdHJhaW50X3AgKElOVFZBTCAob3BlcmFuZHNbMl0pLCAnSycsICJLczA4IikgKQorKyAgICAgICAgICByZXR1cm4gIiUhIG1vdiU/XHQlMywgJTJcOzxwcmVkaWNhYmxlX2luc24zPiU/XHQlMCwgJTEsICUzIjsKKysgICAgICAgZWxzZSBpZiAoIGF2cjMyX2NvbnN0X29rX2Zvcl9jb25zdHJhaW50X3AgKElOVFZBTCAob3BlcmFuZHNbMl0pLCAnSycsICJLczIxIikgKQorKyAgICAgICAgICByZXR1cm4gIiUhIG1vdlx0JTMsICUyXDs8cHJlZGljYWJsZV9pbnNuMz4lP1x0JTAsICUxLCAlMyI7CisrICAgICAgIGVsc2UKKysgICAgICAgICAgcmV0dXJuICIlISBtb3ZoXHQlMywgaGkoJTIpXDs8cHJlZGljYWJsZV9pbnNuMz4lP1x0JTAsICUxLCAlMyI7CisrICAgICAgIH0KKysgICBlbHNlCisrICAgICAgeworKyAgICAgICBpZiAoICFhdnIzMl9jb25kX2ltbV9jbG9iYmVyX3NwbGl0dGFibGUgKGluc24sIG9wZXJhbmRzKSApCisrICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgaWYgKCBhdnIzMl9jb25zdF9va19mb3JfY29uc3RyYWludF9wIChJTlRWQUwgKG9wZXJhbmRzWzJdKSwgJ0snLCAiS3MwOCIpICkKKysgICAgICAgICAgICAgICAgICAgcmV0dXJuICJtb3YlP1x0JTMsICUyXDs8cHJlZGljYWJsZV9pbnNuMz4lP1x0JTAsICUxLCAlMyI7CisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKCBhdnIzMl9jb25zdF9va19mb3JfY29uc3RyYWludF9wIChJTlRWQUwgKG9wZXJhbmRzWzJdKSwgJ0snLCAiS3MyMSIpICkKKysgICAgICAgICAgICAgICAgICAgcmV0dXJuICJtb3ZcdCUzLCAlMlw7PHByZWRpY2FibGVfaW5zbjM+JT9cdCUwLCAlMSwgJTMiOworKyAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgIHJldHVybiAibW92aFx0JTMsIGhpKCUyKVw7PHByZWRpY2FibGVfaW5zbjM+JT9cdCUwLCAlMSwgJTMiOworKyAgICAgICAgICB9CisrICAgICAgIHJldHVybiAiIyI7CisrICAgICAgfQorKyAgICAgIAorKyAgfQorKyAgOzsgSWYgd2UgZmluZCBvdXQgdGhhdCB3ZSBjb3VsZCBub3QgYWN0dWFsbHkgZG8gaWYtY29udmVyc2lvbiBvbiB0aGUgYmxvY2sKKysgIDs7IGNvbnRhaW5pbmcgdGhpcyBpbnNuIHdlIGNvbnZlcnQgaXQgYmFjayB0byBub3JtYWwgaW1tZWRpYXRlIGZvcm1hdAorKyAgOzsgdG8gYXZvaWQgb3V0cHV0aW5nIGEgcmVkdW5kYW50IG1vdmUgaW5zbgorKyAgOzsgRG8gbm90IHNwbGl0IHVudGlsIGFmdGVyIHdlIGhhdmUgY2hlY2tlZCBpZiB3ZSBjYW4gbWFrZSB0aGUgaW5zbiAKKysgIDs7IGNvbmRpdGlvbmFsLgorKyAgIihHRVRfQ09ERSAoUEFUVEVSTiAoaW5zbikpICE9IENPTkRfRVhFQworKyAgICAmJiBjZnVuLT5tYWNoaW5lLT5pZmN2dF9hZnRlcl9yZWxvYWQKKysgICAgJiYgYXZyMzJfY29uZF9pbW1fY2xvYmJlcl9zcGxpdHRhYmxlIChpbnNuLCBvcGVyYW5kcykpIgorKyAgWyhzZXQgKG1hdGNoX2R1cCAwKQorKyAgICAgICAgKHByZWRpY2FibGVfb3AzOklOVE0gKG1hdGNoX2R1cCAxKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX2R1cCAyKSkpXQorKyAgIiIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjgiKQorKyAgIChzZXRfYXR0ciAiY2MiICJjbXBfY29uZF9pbnNuIikKKysgICAoc2V0X2F0dHIgInByZWRpY2FibGUiICJ5ZXMiKV0KKysgICkKKysKKysKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrOzsgWmVybyBleHRlbmQgcHJlZGljYWJsZSBpbnNucworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysoZGVmaW5lX2luc25fYW5kX3NwbGl0ICJ6ZXJvX2V4dGVuZGhpc2lfY2xvYmJlcl9wcmVkaWNhYmxlIgorKyAgWyhwYXJhbGxlbCAKKysgICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysgICAgICAgICAgKHplcm9fZXh0ZW5kOlNJIChtYXRjaF9vcGVyYW5kOkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKQorKyAgICAgKGNsb2JiZXIgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgIj0mciIpKV0pXQorKyAgIlRBUkdFVF9WMl9JTlNOUyIKKysgIHsKKysgICBpZiAoIGN1cnJlbnRfaW5zbl9wcmVkaWNhdGUgIT0gTlVMTF9SVFggKSAKKysgICAgICB7CisrICAgICAgICAgcmV0dXJuICIlISBtb3ZcdCUyLCAweGZmZmZcO2FuZCU/XHQlMCwgJTEsICUyIjsKKysgICAgICAgfQorKyAgIGVsc2UKKysgICAgICB7CisrICAgICAgIHJldHVybiAiIyI7CisrICAgICAgfQorKyAgICAgIAorKyAgfQorKyAgOzsgSWYgd2UgZmluZCBvdXQgdGhhdCB3ZSBjb3VsZCBub3QgYWN0dWFsbHkgZG8gaWYtY29udmVyc2lvbiBvbiB0aGUgYmxvY2sKKysgIDs7IGNvbnRhaW5pbmcgdGhpcyBpbnNuIHdlIGNvbnZlcnQgaXQgYmFjayB0byBub3JtYWwgaW1tZWRpYXRlIGZvcm1hdAorKyAgOzsgdG8gYXZvaWQgb3V0cHV0aW5nIGEgcmVkdW5kYW50IG1vdmUgaW5zbgorKyAgOzsgRG8gbm90IHNwbGl0IHVudGlsIGFmdGVyIHdlIGhhdmUgY2hlY2tlZCBpZiB3ZSBjYW4gbWFrZSB0aGUgaW5zbiAKKysgIDs7IGNvbmRpdGlvbmFsLgorKyAgIihHRVRfQ09ERSAoUEFUVEVSTiAoaW5zbikpICE9IENPTkRfRVhFQworKyAgICAmJiBjZnVuLT5tYWNoaW5lLT5pZmN2dF9hZnRlcl9yZWxvYWQpIgorKyAgWyhzZXQgKG1hdGNoX2R1cCAwKQorKyAgICAgICAgKHplcm9fZXh0ZW5kOlNJIChtYXRjaF9kdXAgMSkpKV0KKysgICIiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI4IikKKysgICAoc2V0X2F0dHIgImNjIiAiY21wX2NvbmRfaW5zbiIpCisrICAgKHNldF9hdHRyICJwcmVkaWNhYmxlIiAieWVzIildCisrICApCisrCisrKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiemVyb19leHRlbmRxaXNpX2Nsb2JiZXJfcHJlZGljYWJsZSIKKysgIFsocGFyYWxsZWwgCisrICAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisrICAgICAgICAgICh6ZXJvX2V4dGVuZDpTSSAobWF0Y2hfb3BlcmFuZDpRSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSkKKysgICAgIChjbG9iYmVyIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICI9JnIiKSldKV0KKysgICJUQVJHRVRfVjJfSU5TTlMiCisrICB7CisrICAgaWYgKCBjdXJyZW50X2luc25fcHJlZGljYXRlICE9IE5VTExfUlRYICkgCisrICAgICAgeworKyAgICAgICAgIHJldHVybiAiJSEgbW92XHQlMiwgMHhmZlw7YW5kJT9cdCUwLCAlMSwgJTIiOworKyAgICAgICB9CisrICAgZWxzZQorKyAgICAgIHsKKysgICAgICAgcmV0dXJuICIjIjsKKysgICAgICB9CisrICAgICAgCisrICB9CisrICA7OyBJZiB3ZSBmaW5kIG91dCB0aGF0IHdlIGNvdWxkIG5vdCBhY3R1YWxseSBkbyBpZi1jb252ZXJzaW9uIG9uIHRoZSBibG9jaworKyAgOzsgY29udGFpbmluZyB0aGlzIGluc24gd2UgY29udmVydCBpdCBiYWNrIHRvIG5vcm1hbCBpbW1lZGlhdGUgZm9ybWF0CisrICA7OyB0byBhdm9pZCBvdXRwdXRpbmcgYSByZWR1bmRhbnQgbW92ZSBpbnNuCisrICA7OyBEbyBub3Qgc3BsaXQgdW50aWwgYWZ0ZXIgd2UgaGF2ZSBjaGVja2VkIGlmIHdlIGNhbiBtYWtlIHRoZSBpbnNuIAorKyAgOzsgY29uZGl0aW9uYWwuCisrICAiKEdFVF9DT0RFIChQQVRURVJOIChpbnNuKSkgIT0gQ09ORF9FWEVDCisrICAgICYmIGNmdW4tPm1hY2hpbmUtPmlmY3Z0X2FmdGVyX3JlbG9hZCkiCisrICBbKHNldCAobWF0Y2hfZHVwIDApCisrICAgICAgICAoemVyb19leHRlbmQ6U0kgKG1hdGNoX2R1cCAxKSkpXQorKyAgIiIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjgiKQorKyAgIChzZXRfYXR0ciAiY2MiICJjbXBfY29uZF9pbnNuIikKKysgICAoc2V0X2F0dHIgInByZWRpY2FibGUiICJ5ZXMiKV0KKysgICkKKysKKysoZGVmaW5lX2luc25fYW5kX3NwbGl0ICJ6ZXJvX2V4dGVuZHFpaGlfY2xvYmJlcl9wcmVkaWNhYmxlIgorKyAgWyhwYXJhbGxlbCAKKysgICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysgICAgICAgICAgKHplcm9fZXh0ZW5kOkhJIChtYXRjaF9vcGVyYW5kOlFJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKQorKyAgICAgKGNsb2JiZXIgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgIj0mciIpKV0pXQorKyAgIlRBUkdFVF9WMl9JTlNOUyIKKysgIHsKKysgICBpZiAoIGN1cnJlbnRfaW5zbl9wcmVkaWNhdGUgIT0gTlVMTF9SVFggKSAKKysgICAgICB7CisrICAgICAgICAgcmV0dXJuICIlISBtb3ZcdCUyLCAweGZmXDthbmQlP1x0JTAsICUxLCAlMiI7CisrICAgICAgIH0KKysgICBlbHNlCisrICAgICAgeworKyAgICAgICByZXR1cm4gIiMiOworKyAgICAgIH0KKysgICAgICAKKysgIH0KKysgIDs7IElmIHdlIGZpbmQgb3V0IHRoYXQgd2UgY291bGQgbm90IGFjdHVhbGx5IGRvIGlmLWNvbnZlcnNpb24gb24gdGhlIGJsb2NrCisrICA7OyBjb250YWluaW5nIHRoaXMgaW5zbiB3ZSBjb252ZXJ0IGl0IGJhY2sgdG8gbm9ybWFsIGltbWVkaWF0ZSBmb3JtYXQKKysgIDs7IHRvIGF2b2lkIG91dHB1dGluZyBhIHJlZHVuZGFudCBtb3ZlIGluc24KKysgIDs7IERvIG5vdCBzcGxpdCB1bnRpbCBhZnRlciB3ZSBoYXZlIGNoZWNrZWQgaWYgd2UgY2FuIG1ha2UgdGhlIGluc24gCisrICA7OyBjb25kaXRpb25hbC4KKysgICIoR0VUX0NPREUgKFBBVFRFUk4gKGluc24pKSAhPSBDT05EX0VYRUMKKysgICAgJiYgY2Z1bi0+bWFjaGluZS0+aWZjdnRfYWZ0ZXJfcmVsb2FkKSIKKysgIFsoc2V0IChtYXRjaF9kdXAgMCkKKysgICAgICAgICh6ZXJvX2V4dGVuZDpISSAobWF0Y2hfZHVwIDEpKSldCisrICAiIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiOCIpCisrICAgKHNldF9hdHRyICJjYyIgImNtcF9jb25kX2luc24iKQorKyAgIChzZXRfYXR0ciAicHJlZGljYWJsZSIgInllcyIpXQorKyAgKQorKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBkaXZtb2QKKys7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrOzsgU2lnbmVkIGRpdmlzaW9uIHRoYXQgcHJvZHVjZXMgYm90aCBhIHF1b3RpZW50IGFuZCBhIHJlbWFpbmRlci4KKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrKGRlZmluZV9leHBhbmQgImRpdm1vZHNpNCIKKysgIFsocGFyYWxsZWwgWworKyAgICAgKHBhcmFsbGVsIFsKKysgICAgICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkgICAgKGRpdjpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCisrCQkgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpCisrICAgICAgIChzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysJICAgIChtb2Q6U0kgKG1hdGNoX2R1cCAxKQorKwkJICAgIChtYXRjaF9kdXAgMikpKV0pCisrICAgICAodXNlIChtYXRjaF9kdXAgNCkpXSldCisrICAiIgorKyAgeworKyAgICBpZiAoISBub19uZXdfcHNldWRvcykgeworKyAgICAgIG9wZXJhbmRzWzRdID0gZ2VuX3JlZ19ydHggKERJbW9kZSk7CisrCisrICAgICAgZW1pdF9pbnNuKGdlbl9kaXZtb2RzaTRfaW50ZXJuYWwob3BlcmFuZHNbNF0sb3BlcmFuZHNbMV0sb3BlcmFuZHNbMl0pKTsKKysgICAgICBlbWl0X21vdmVfaW5zbihvcGVyYW5kc1swXSwgZ2VuX3J0eF9TVUJSRUcoIFNJbW9kZSwgb3BlcmFuZHNbNF0sIDQpKTsKKysgICAgICBlbWl0X21vdmVfaW5zbihvcGVyYW5kc1szXSwgZ2VuX3J0eF9TVUJSRUcoIFNJbW9kZSwgb3BlcmFuZHNbNF0sIDApKTsKKysKKysgICAgICBET05FOworKyAgICB9IGVsc2UgeworKyAgICAgIEZBSUw7CisrICAgIH0KKysKKysgIH0pCisrCisrCisrKGRlZmluZV9pbnNuICJkaXZtb2RzaTRfaW50ZXJuYWwiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkodW5zcGVjOkRJIFsobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCisrCQkgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKV0KKysJCSAgIFVOU1BFQ19ESVZNT0RTSTRfSU5URVJOQUwpKV0KKysgICIiCisrICAiZGl2cyAgICAlMCwgJTEsICUyIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImRpdiIpCisrICAgKHNldF9hdHRyICJjYyIgIm5vbmUiKV0pCisrCisrCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKzs7IHVkaXZtb2QKKys7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrOzsgVW5zaWduZWQgZGl2aXNpb24gdGhhdCBwcm9kdWNlcyBib3RoIGEgcXVvdGllbnQgYW5kIGEgcmVtYWluZGVyLgorKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysoZGVmaW5lX2V4cGFuZCAidWRpdm1vZHNpNCIKKysgWyhwYXJhbGxlbCBbCisrICAgIChwYXJhbGxlbCBbCisrICAgICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkgICAodWRpdjpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCisrCQkgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpCisrICAgICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAzICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkgICAodW1vZDpTSSAobWF0Y2hfZHVwIDEpCisrCQkgICAgKG1hdGNoX2R1cCAyKSkpXSkKKysgICAgKHVzZSAobWF0Y2hfZHVwIDQpKV0pXQorKyAgIiIKKysgIHsKKysgICAgaWYgKCEgbm9fbmV3X3BzZXVkb3MpIHsKKysgICAgICBvcGVyYW5kc1s0XSA9IGdlbl9yZWdfcnR4IChESW1vZGUpOworKworKyAgICAgIGVtaXRfaW5zbihnZW5fdWRpdm1vZHNpNF9pbnRlcm5hbChvcGVyYW5kc1s0XSxvcGVyYW5kc1sxXSxvcGVyYW5kc1syXSkpOworKyAgICAgIGVtaXRfbW92ZV9pbnNuKG9wZXJhbmRzWzBdLCBnZW5fcnR4X1NVQlJFRyggU0ltb2RlLCBvcGVyYW5kc1s0XSwgNCkpOworKyAgICAgIGVtaXRfbW92ZV9pbnNuKG9wZXJhbmRzWzNdLCBnZW5fcnR4X1NVQlJFRyggU0ltb2RlLCBvcGVyYW5kc1s0XSwgMCkpOworKworKyAgICAgIERPTkU7CisrICAgIH0gZWxzZSB7CisrICAgICAgRkFJTDsKKysgICAgfQorKyAgfSkKKysKKysoZGVmaW5lX2luc24gInVkaXZtb2RzaTRfaW50ZXJuYWwiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkodW5zcGVjOkRJIFsobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCisrCQkgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKV0KKysJCSAgIFVOU1BFQ19VRElWTU9EU0k0X0lOVEVSTkFMKSldCisrICAiIgorKyAgImRpdnUgICAgJTAsICUxLCAlMiIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJkaXYiKQorKyAgIChzZXRfYXR0ciAiY2MiICJub25lIildKQorKworKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBBcml0aG1ldGljLXNoaWZ0IGxlZnQKKys7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrOzsgQXJpdGhtZXRpYy1zaGlmdCByZWcwIGxlZnQgYnkgcmVnMiBvciBpbW1lZGlhdGUgdmFsdWUuCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKworKyhkZWZpbmVfaW5zbiAiYXNobHNpMyIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgICAgICAgICAiPXIscixyIikKKysJKGFzaGlmdDpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciwwLHIiKQorKwkJICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAibm9ubWVtb3J5X29wZXJhbmQiICJyLEt1MDUsS3UwNSIpKSldCisrICAiIgorKyAgIkAKKysgICBsc2wgICAgICUwLCAlMSwgJTIKKysgICBsc2wgICAgICUwLCAlMgorKyAgIGxzbCAgICAgJTAsICUxLCAlMiIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQsMiw0IikKKysgICAoc2V0X2F0dHIgImNjIiAic2V0X25jeiIpXSkKKysKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrOzsgQXJpdGhtZXRpYy1zaGlmdCByaWdodAorKzs7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKys7OyBBcml0aG1ldGljLXNoaWZ0IHJlZzAgcmlnaHQgYnkgYW4gaW1tZWRpYXRlIHZhbHVlLgorKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysKKysoZGVmaW5lX2luc24gImFzaHJzaTMiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAgICAgICAgICAiPXIscixyIikKKysJKGFzaGlmdHJ0OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyLDAsciIpCisrCQkgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgIm5vbm1lbW9yeV9vcGVyYW5kIiAicixLdTA1LEt1MDUiKSkpXQorKyAgIiIKKysgICJACisrICAgYXNyICAgICAlMCwgJTEsICUyCisrICAgYXNyICAgICAlMCwgJTIKKysgICBhc3IgICAgICUwLCAlMSwgJTIiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0LDIsNCIpCisrICAgKHNldF9hdHRyICJjYyIgInNldF9uY3oiKV0pCisrCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKzs7IExvZ2ljYWwgc2hpZnQgcmlnaHQKKys7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrOzsgTG9naWNhbCBzaGlmdCByZWcwIHJpZ2h0IGJ5IGFuIGltbWVkaWF0ZSB2YWx1ZS4KKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrCisrKGRlZmluZV9pbnNuICJsc2hyc2kzIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yLHIsciIpCisrCShsc2hpZnRydDpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciwwLHIiKQorKwkJICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJub25tZW1vcnlfb3BlcmFuZCIgInIsS3UwNSxLdTA1IikpKV0KKysgICIiCisrICAiQAorKyAgIGxzciAgICAgJTAsICUxLCAlMgorKyAgIGxzciAgICAgJTAsICUyCisrICAgbHNyICAgICAlMCwgJTEsICUyIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCwyLDQiKQorKyAgIChzZXRfYXR0ciAiY2MiICJzZXRfbmN6IildKQorKworKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBuZWcKKys7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrOzsgTmVnYXRlIG9wZXJhbmQgMSBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiBvcGVyYW5kIDAuCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyhkZWZpbmVfaW5zbiAibmVnc2kyIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yLHIiKQorKwkobmVnOlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIwLHIiKSkpXQorKyAgIiIKKysgICJACisrICAgbmVnXHQlMAorKyAgIHJzdWJcdCUwLCAlMSwgMCIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsNCIpCisrICAgKHNldF9hdHRyICJjYyIgInNldF92bmN6IildKQorKworKyhkZWZpbmVfaW5zbiAibmVnc2kyX3ByZWRpY2FibGUiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiK3IiKQorKwkobmVnOlNJIChtYXRjaF9kdXAgMCkpKV0KKysgICJUQVJHRVRfVjJfSU5TTlMiCisrICAicnN1YiU/XHQlMCwgMCIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAiY2MiICJjbXBfY29uZF9pbnNuIikKKysgICAoc2V0X2F0dHIgInByZWRpY2FibGUiICJ5ZXMiKV0pCisrCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKzs7IGFicworKzs7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKys7OyBTdG9yZSB0aGUgYWJzb2x1dGUgdmFsdWUgb2Ygb3BlcmFuZCAxIGludG8gb3BlcmFuZCAwLgorKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysoZGVmaW5lX2luc24gImFic3NpMiIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisrCShhYnM6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAiKSkpXQorKyAgIiIKKysgICJhYnNcdCUwIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpCisrICAgKHNldF9hdHRyICJjYyIgInNldF96IildKQorKworKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBvbmVfY21wbAorKzs7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKys7OyBTdG9yZSB0aGUgYml0d2lzZS1jb21wbGVtZW50IG9mIG9wZXJhbmQgMSBpbnRvIG9wZXJhbmQgMC4KKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrCisrKGRlZmluZV9pbnNuICJvbmVfY21wbHNpMiIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9cixyIikKKysJKG5vdDpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCxyIikpKV0KKysgICIiCisrICAiQAorKyAgIGNvbVx0JTAKKysgICByc3ViXHQlMCwgJTEsIC0xIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiw0IikKKysgICAoc2V0X2F0dHIgImNjIiAic2V0X3oiKV0pCisrCisrCisrKGRlZmluZV9pbnNuICJvbmVfY21wbHNpMl9wcmVkaWNhYmxlIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIityIikKKysJKG5vdDpTSSAobWF0Y2hfZHVwIDApKSldCisrICAiVEFSR0VUX1YyX0lOU05TIgorKyAgInJzdWIlP1x0JTAsIC0xIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJjYyIgImNtcF9jb25kX2luc24iKQorKyAgIChzZXRfYXR0ciAicHJlZGljYWJsZSIgInllcyIpXSkKKysKKysKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrOzsgQml0IGxvYWQKKys7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrOzsgTG9hZCBhIGJpdCBpbnRvIFogYW5kIEMgZmxhZ3MKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrKGRlZmluZV9pbnNuICJibGRzaSIKKysgIFsoc2V0IChjYzApCisrICAgICAgICAoYW5kOlNJIChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICJyIikKKysgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMSAib25lX2JpdF9zZXRfb3BlcmFuZCIgImkiKSkpXQorKyAgIiIKKysgICJibGRcdCUwLCAlcDEiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgImNjIiAiYmxkIildCisrICApCisrCisrCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKzs7IENvbXBhcmUKKys7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrOzsgQ29tcGFyZSByZWcwIHdpdGggcmVnMSBvciBhbiBpbW1lZGlhdGUgdmFsdWUuCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKworKyhkZWZpbmVfZXhwYW5kICJjbXA8bW9kZT4iCisrICBbKHNldCAoY2MwKQorKwkoY29tcGFyZTpDTVAKKysJIChtYXRjaF9vcGVyYW5kOkNNUCAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysJIChtYXRjaF9vcGVyYW5kOkNNUCAxICI8Q01QOmNtcF9wcmVkaWNhdGU+IiAgIiIpKSldCisrICAiIgorKyAgInsKKysgICBhdnIzMl9jb21wYXJlX29wMCA9IG9wZXJhbmRzWzBdOworKyAgIGF2cjMyX2NvbXBhcmVfb3AxID0gb3BlcmFuZHNbMV07CisrICB9IgorKykKKysKKysoZGVmaW5lX2luc24gImNtcDxtb2RlPl9pbnRlcm5hbCIKKysgIFsoc2V0IChjYzApCisrICAgICAgICAoY29tcGFyZTpDTVAKKysgICAgICAgICAobWF0Y2hfb3BlcmFuZDpDTVAgMCAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQorKyAgICAgICAgIChtYXRjaF9vcGVyYW5kOkNNUCAxICI8Q01QOmNtcF9wcmVkaWNhdGU+IiAiPENNUDpjbXBfY29uc3RyYWludD4iKSkpXQorKyAgIiIKKysgIHsKKysgICBzZXRfbmV4dF9pbnNuX2NvbmQoaW5zbiwKKysgICAgICAgICAgICAgICAgICAgICAgYXZyMzJfb3V0cHV0X2NtcChnZXRfbmV4dF9pbnNuX2NvbmQoaW5zbiksIEdFVF9NT0RFIChvcGVyYW5kc1swXSksIG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSkpOworKyAgIHJldHVybiAiIjsKKysgIH0KKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAiY2MiICJjb21wYXJlIildKQorKworKworKzs7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrOzsgVGVzdCBpZiB6ZXJvCisrOzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKzs7IENvbXBhcmUgcmVnIGFnYWluc3QgemVybyBhbmQgc2V0IHRoZSBjb25kaXRpb24gY29kZXMuCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKworKworKyhkZWZpbmVfZXhwYW5kICJ0c3RzaSIKKysgIFsoc2V0IChjYzApCisrCShtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKSldCisrICAiIgorKyAgeworKyAgIGF2cjMyX2NvbXBhcmVfb3AwID0gb3BlcmFuZHNbMF07CisrICAgYXZyMzJfY29tcGFyZV9vcDEgPSBjb25zdDBfcnR4OworKyAgfQorKykKKysKKysoZGVmaW5lX2luc24gInRzdHNpX2ludGVybmFsIgorKyAgWyhzZXQgKGNjMCkKKysJKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSldCisrICAiIgorKyAgeworKyAgIHNldF9uZXh0X2luc25fY29uZChpbnNuLAorKyAgICAgYXZyMzJfb3V0cHV0X2NtcChnZXRfbmV4dF9pbnNuX2NvbmQoaW5zbiksIFNJbW9kZSwgb3BlcmFuZHNbMF0sIGNvbnN0MF9ydHgpKTsKKysKKysgICByZXR1cm4gIiI7CisrICB9CisrICBbKHNldF9hdHRyICJsZW5ndGgiICIyIikKKysgICAoc2V0X2F0dHIgImNjIiAiY29tcGFyZSIpXSkKKysKKysKKysoZGVmaW5lX2V4cGFuZCAidHN0ZGkiCisrICBbKHNldCAoY2MwKQorKwkobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikpXQorKyAgIiIKKysgIHsKKysgICBhdnIzMl9jb21wYXJlX29wMCA9IG9wZXJhbmRzWzBdOworKyAgIGF2cjMyX2NvbXBhcmVfb3AxID0gY29uc3QwX3J0eDsKKysgIH0KKyspCisrCisrKGRlZmluZV9pbnNuICJ0c3RkaV9pbnRlcm5hbCIKKysgIFsoc2V0IChjYzApCisrCShtYXRjaF9vcGVyYW5kOkRJIDAgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpXQorKyAgIiIKKysgIHsKKysgICBzZXRfbmV4dF9pbnNuX2NvbmQoaW5zbiwKKysgICAgIGF2cjMyX291dHB1dF9jbXAoZ2V0X25leHRfaW5zbl9jb25kKGluc24pLCBESW1vZGUsIG9wZXJhbmRzWzBdLCBjb25zdDBfcnR4KSk7CisrICAgcmV0dXJuICIiOworKyAgfQorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJ0eXBlIiAiYWx1MiIpCisrICAgKHNldF9hdHRyICJjYyIgImNvbXBhcmUiKV0pCisrCisrCisrCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKzs7IENvbnZlcnQgb3BlcmFuZHMKKys7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrOzsKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrKGRlZmluZV9pbnNuICJ0cnVuY2Rpc2kyIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAiZ2VuZXJhbF9vcGVyYW5kIiAiIikKKysJKHRydW5jYXRlOlNJIChtYXRjaF9vcGVyYW5kOkRJIDEgImdlbmVyYWxfb3BlcmFuZCIgIiIpKSldCisrICAiIgorKyAgInRydW5jZGlzaTIiKQorKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBFeHRlbmQKKys7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrOzsKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrCisrCisrKGRlZmluZV9pbnNuICJleHRlbmRoaXNpMiIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9cixyLHIsciIpCisrCShzaWduX2V4dGVuZDpTSSAobWF0Y2hfb3BlcmFuZDpISSAxICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIjAsciw8Ukt1MDA+LG0iKSkpXQorKyAgIiIKKysgIHsKKysgICBzd2l0Y2ggKCB3aGljaF9hbHRlcm5hdGl2ZSApeworKyAgICAgY2FzZSAwOgorKyAgICAgICByZXR1cm4gICAgImNhc3RzLmhcdCUwIjsKKysgICAgIGNhc2UgMToKKysgICAgICAgcmV0dXJuICAgICJiZmV4dHNcdCUwLCAlMSwgMCwgMTYiOworKyAgICAgY2FzZSAyOgorKyAgICAgY2FzZSAzOgorKyAgICAgICByZXR1cm4gICAgImxkLnNoXHQlMCwgJTEiOworKyAgICAgZGVmYXVsdDoKKysgICAgICAgYWJvcnQoKTsKKysgICB9CisrICB9CisrICBbKHNldF9hdHRyICJsZW5ndGgiICIyLDQsMiw0IikKKysgICAoc2V0X2F0dHIgImNjIiAic2V0X25jeixzZXRfbmN6LG5vbmUsbm9uZSIpCisrICAgKHNldF9hdHRyICJ0eXBlIiAiYWx1LGFsdSxsb2FkX3JtLGxvYWRfcm0iKV0pCisrCisrKGRlZmluZV9pbnNuICJleHRlbmRxaXNpMiIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9cixyLHIsciIpCisrCShzaWduX2V4dGVuZDpTSSAobWF0Y2hfb3BlcmFuZDpRSSAxICJleHRlbmRxaV9vcGVyYW5kIiAiMCxyLFJLdTAwLG0iKSkpXQorKyAgIiIKKysgIHsKKysgICBzd2l0Y2ggKCB3aGljaF9hbHRlcm5hdGl2ZSApeworKyAgICAgY2FzZSAwOgorKyAgICAgICByZXR1cm4gICAgImNhc3RzLmJcdCUwIjsKKysgICAgIGNhc2UgMToKKysgICAgICAgcmV0dXJuICAgICJiZmV4dHNcdCUwLCAlMSwgMCwgOCI7CisrICAgICBjYXNlIDI6CisrICAgICBjYXNlIDM6CisrICAgICAgIHJldHVybiAgICAibGQuc2JcdCUwLCAlMSI7CisrICAgICBkZWZhdWx0OgorKyAgICAgICBhYm9ydCgpOworKyAgIH0KKysgIH0KKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsNCwyLDQiKQorKyAgIChzZXRfYXR0ciAiY2MiICJzZXRfbmN6LHNldF9uY3osbm9uZSxub25lIikKKysgICAoc2V0X2F0dHIgInR5cGUiICJhbHUsYWx1LGxvYWRfcm0sbG9hZF9ybSIpXSkKKysKKysoZGVmaW5lX2luc24gImV4dGVuZHFpaGkyIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yLHIscixyIikKKysJKHNpZ25fZXh0ZW5kOkhJIChtYXRjaF9vcGVyYW5kOlFJIDEgImV4dGVuZHFpX29wZXJhbmQiICIwLHIsUkt1MDAsbSIpKSldCisrICAiIgorKyAgeworKyAgIHN3aXRjaCAoIHdoaWNoX2FsdGVybmF0aXZlICl7CisrICAgICBjYXNlIDA6CisrICAgICAgIHJldHVybiAgICAiY2FzdHMuYlx0JTAiOworKyAgICAgY2FzZSAxOgorKyAgICAgICByZXR1cm4gICAgImJmZXh0c1x0JTAsICUxLCAwLCA4IjsKKysgICAgIGNhc2UgMjoKKysgICAgIGNhc2UgMzoKKysgICAgICAgcmV0dXJuICAgICJsZC5zYlx0JTAsICUxIjsKKysgICAgIGRlZmF1bHQ6CisrICAgICAgIGFib3J0KCk7CisrICAgfQorKyAgfQorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiw0LDIsNCIpCisrICAgKHNldF9hdHRyICJjYyIgInNldF9uY3osc2V0X25jeixub25lLG5vbmUiKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImFsdSxhbHUsbG9hZF9ybSxsb2FkX3JtIildKQorKworKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBaZXJvLWV4dGVuZAorKzs7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKys7OworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysKKysoZGVmaW5lX2luc24gInplcm9fZXh0ZW5kaGlzaTIiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIscixyLHIiKQorKwkoemVyb19leHRlbmQ6U0kgKG1hdGNoX29wZXJhbmQ6SEkgMSAibm9uaW1tZWRpYXRlX29wZXJhbmQiICIwLHIsPFJLdTAwPixtIikpKV0KKysgICIiCisrICB7CisrICAgc3dpdGNoICggd2hpY2hfYWx0ZXJuYXRpdmUgKXsKKysgICAgIGNhc2UgMDoKKysgICAgICAgcmV0dXJuICAgICJjYXN0dS5oXHQlMCI7CisrICAgICBjYXNlIDE6CisrICAgICAgIHJldHVybiAgICAiYmZleHR1XHQlMCwgJTEsIDAsIDE2IjsKKysgICAgIGNhc2UgMjoKKysgICAgIGNhc2UgMzoKKysgICAgICAgcmV0dXJuICAgICJsZC51aFx0JTAsICUxIjsKKysgICAgIGRlZmF1bHQ6CisrICAgICAgIGFib3J0KCk7CisrICAgfQorKyAgfQorKworKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiw0LDIsNCIpCisrICAgKHNldF9hdHRyICJjYyIgInNldF9uY3osc2V0X25jeixub25lLG5vbmUiKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImFsdSxhbHUsbG9hZF9ybSxsb2FkX3JtIildKQorKworKyhkZWZpbmVfaW5zbiAiemVyb19leHRlbmRxaXNpMiIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9cixyLHIsciIpCisrCSh6ZXJvX2V4dGVuZDpTSSAobWF0Y2hfb3BlcmFuZDpRSSAxICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIjAsciw8Ukt1MDA+LG0iKSkpXQorKyAgIiIKKysgIHsKKysgICBzd2l0Y2ggKCB3aGljaF9hbHRlcm5hdGl2ZSApeworKyAgICAgY2FzZSAwOgorKyAgICAgICByZXR1cm4gICAgImNhc3R1LmJcdCUwIjsKKysgICAgIGNhc2UgMToKKysgICAgICAgcmV0dXJuICAgICJiZmV4dHVcdCUwLCAlMSwgMCwgOCI7CisrICAgICBjYXNlIDI6CisrICAgICBjYXNlIDM6CisrICAgICAgIHJldHVybiAgICAibGQudWJcdCUwLCAlMSI7CisrICAgICBkZWZhdWx0OgorKyAgICAgICBhYm9ydCgpOworKyAgIH0KKysgIH0KKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsNCwyLDQiKQorKyAgIChzZXRfYXR0ciAiY2MiICJzZXRfbmN6LCBzZXRfbmN6LCBub25lLCBub25lIikKKysgICAoc2V0X2F0dHIgInR5cGUiICJhbHUsIGFsdSwgbG9hZF9ybSwgbG9hZF9ybSIpXSkKKysKKysoZGVmaW5lX2luc24gInplcm9fZXh0ZW5kcWloaTIiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIscixyLHIiKQorKwkoemVyb19leHRlbmQ6SEkgKG1hdGNoX29wZXJhbmQ6UUkgMSAibm9uaW1tZWRpYXRlX29wZXJhbmQiICIwLHIsPFJLdTAwPixtIikpKV0KKysgICIiCisrICB7CisrICAgc3dpdGNoICggd2hpY2hfYWx0ZXJuYXRpdmUgKXsKKysgICAgIGNhc2UgMDoKKysgICAgICAgcmV0dXJuICAgICJjYXN0dS5iXHQlMCI7CisrICAgICBjYXNlIDE6CisrICAgICAgIHJldHVybiAgICAiYmZleHR1XHQlMCwgJTEsIDAsIDgiOworKyAgICAgY2FzZSAyOgorKyAgICAgY2FzZSAzOgorKyAgICAgICByZXR1cm4gICAgImxkLnViXHQlMCwgJTEiOworKyAgICAgZGVmYXVsdDoKKysgICAgICAgYWJvcnQoKTsKKysgICB9CisrICB9CisrICBbKHNldF9hdHRyICJsZW5ndGgiICIyLDQsMiw0IikKKysgICAoc2V0X2F0dHIgImNjIiAic2V0X25jeiwgc2V0X25jeiwgbm9uZSwgbm9uZSIpCisrICAgKHNldF9hdHRyICJ0eXBlIiAiYWx1LCBhbHUsIGxvYWRfcm0sIGxvYWRfcm0iKV0pCisrCisrCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKzs7IENvbmRpdGlvbmFsIGxvYWQgYW5kIGV4dGVuZCBpbnNucworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysoZGVmaW5lX2luc24gImxkc2k8bW9kZT5fcHJlZGljYWJsZV9zZSIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisrICAgICAgICAoc2lnbl9leHRlbmQ6U0kgCisrICAgICAgICAgKG1hdGNoX29wZXJhbmQ6SU5UTSAxICJtZW1vcnlfb3BlcmFuZCIgIjxJTlRNOnByZWRfbWVtX2NvbnN0cmFpbnQ+IikpKV0KKysgICJUQVJHRVRfVjJfSU5TTlMiCisrICAibGQ8SU5UTTpsb2FkX3Bvc3RmaXhfcz4lP1x0JTAsICUxIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJjYyIgImNtcF9jb25kX2luc24iKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImxvYWQiKQorKyAgIChzZXRfYXR0ciAicHJlZGljYWJsZSIgInllcyIpXQorKykKKysKKysoZGVmaW5lX2luc24gImxkc2k8bW9kZT5fcHJlZGljYWJsZV96ZSIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisrICAgICAgICAoemVyb19leHRlbmQ6U0kgCisrICAgICAgICAgKG1hdGNoX29wZXJhbmQ6SU5UTSAxICJtZW1vcnlfb3BlcmFuZCIgIjxJTlRNOnByZWRfbWVtX2NvbnN0cmFpbnQ+IikpKV0KKysgICJUQVJHRVRfVjJfSU5TTlMiCisrICAibGQ8SU5UTTpsb2FkX3Bvc3RmaXhfdT4lP1x0JTAsICUxIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJjYyIgImNtcF9jb25kX2luc24iKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImxvYWQiKQorKyAgIChzZXRfYXR0ciAicHJlZGljYWJsZSIgInllcyIpXQorKykKKysKKysoZGVmaW5lX2luc24gImxkaGlfcHJlZGljYWJsZV96ZSIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisrICAgICAgICAoemVyb19leHRlbmQ6SEkgCisrICAgICAgICAgKG1hdGNoX29wZXJhbmQ6UUkgMSAibWVtb3J5X29wZXJhbmQiICJSS3MxMCIpKSldCisrICAiVEFSR0VUX1YyX0lOU05TIgorKyAgImxkLnViJT9cdCUwLCAlMSIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAiY2MiICJjbXBfY29uZF9pbnNuIikKKysgICAoc2V0X2F0dHIgInR5cGUiICJsb2FkIikKKysgICAoc2V0X2F0dHIgInByZWRpY2FibGUiICJ5ZXMiKV0KKyspCisrCisrKGRlZmluZV9pbnNuICJsZGhpX3ByZWRpY2FibGVfc2UiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKyAgICAgICAgKHNpZ25fZXh0ZW5kOkhJIAorKyAgICAgICAgIChtYXRjaF9vcGVyYW5kOlFJIDEgIm1lbW9yeV9vcGVyYW5kIiAiUktzMTAiKSkpXQorKyAgIlRBUkdFVF9WMl9JTlNOUyIKKysgICJsZC5zYiU/XHQlMCwgJTEiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgImNjIiAiY21wX2NvbmRfaW5zbiIpCisrICAgKHNldF9hdHRyICJ0eXBlIiAibG9hZCIpCisrICAgKHNldF9hdHRyICJwcmVkaWNhYmxlIiAieWVzIildCisrKQorKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBDb25kaXRpb25hbCBzZXQgcmVnaXN0ZXIKKys7OyBzcntjb25kNH0gIHJkCisrOzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworKzs7QmVjYXVzZSBvZiB0aGUgc2FtZSBpc3N1ZSBhcyB3aXRoIGNvbmRpdGlvbmFsIG1vdmVzIGFuZCBhZGRzIHdlIG11c3QKKys7O25vdCBzZXBhcmF0ZSB0aGUgY29tcGFyZSBpbnN0cmN1dGlvbiBmcm9tIHRoZSBzY2MgaW5zdHJ1Y3Rpb24gYXMKKys7O3RoZXkgbWlnaHQgYmUgc2hlZHVsZWQgImJhZGx5Ii4KKysKKysoZGVmaW5lX2luc24gInM8Y29kZT4iCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkoYW55X2NvbmQ6U0kgKGNjMCkKKysgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApKSldCisrICAiIgorKyAgInNyPGNvbmQ+XHQlMCIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKQorKyAgIChzZXRfYXR0ciAiY2MiICJub25lIildKQorKworKyhkZWZpbmVfaW5zbiAic21pIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysJKHVuc3BlYzpTSSBbKGNjMCkKKysgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCldIFVOU1BFQ19DT05EX01JKSldCisrICAiIgorKyAgInNybWlcdCUwIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpCisrICAgKHNldF9hdHRyICJjYyIgIm5vbmUiKV0pCisrCisrKGRlZmluZV9pbnNuICJzcGwiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkodW5zcGVjOlNJIFsoY2MwKQorKyAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAwKV0gVU5TUEVDX0NPTkRfUEwpKV0KKysgICIiCisrICAic3JwbFx0JTAiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICIyIikKKysgICAoc2V0X2F0dHIgImNjIiAibm9uZSIpXSkKKysKKysKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrOzsgQ29uZGl0aW9uYWwgYnJhbmNoCisrOzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKzs7IEJyYW5jaCB0byBsYWJlbCBpZiB0aGUgc3BlY2lmaWVkIGNvbmRpdGlvbiBjb2RlcyBhcmUgc2V0LgorKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7IGJyYW5jaCBpZiBuZWdhdGl2ZQorKyhkZWZpbmVfaW5zbiAiYm1pIgorKyAgWyhzZXQgKHBjKQorKwkoaWZfdGhlbl9lbHNlICh1bnNwZWM6Q0MgWyhjYzApIChjb25zdF9pbnQgMCldIFVOU1BFQ19DT05EX01JKQorKwkJICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAwICIiICIiKSkKKysJCSAgICAgIChwYykpKV0KKysgICIiCisrICAiYnJtaSAgICAlMCIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJicmFuY2giKQorKyAgIChzZXQgKGF0dHIgImxlbmd0aCIpCisrCShjb25kIFsoYW5kIChsZSAobWludXMgKG1hdGNoX2R1cCAwKSAocGMpKSAoY29uc3RfaW50IDI1NCkpCisrCQkgICAgKGxlIChtaW51cyAocGMpIChtYXRjaF9kdXAgMCkpIChjb25zdF9pbnQgMjU2KSkpCisrCSAgICAgICAoY29uc3RfaW50IDIpXSA7IHVzZSBjb21wYWN0IGJyYW5jaAorKyAgICAgICAgICAgICAgKGNvbnN0X2ludCA0KSkpIDsgdXNlIGV4dGVuZGVkIGJyYW5jaAorKyAgIChzZXRfYXR0ciAiY2MiICJub25lIildKQorKworKyhkZWZpbmVfaW5zbiAiKmJtaS1yZXZlcnNlIgorKyAgWyhzZXQgKHBjKQorKwkoaWZfdGhlbl9lbHNlICh1bnNwZWM6Q0MgWyhjYzApIChjb25zdF9pbnQgMCldIFVOU1BFQ19DT05EX01JKQorKwkJICAgICAgKHBjKQorKwkJICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAwICIiICIiKSkpKV0KKysgICIiCisrICAiYnJwbCAgICAlMCIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJicmFuY2giKQorKyAgIChzZXQgKGF0dHIgImxlbmd0aCIpCisrCShjb25kIFsoYW5kIChsZSAobWludXMgKG1hdGNoX2R1cCAwKSAocGMpKSAoY29uc3RfaW50IDI1NCkpCisrCQkgICAgKGxlIChtaW51cyAocGMpIChtYXRjaF9kdXAgMCkpIChjb25zdF9pbnQgMjU2KSkpCisrCSAgICAgICAoY29uc3RfaW50IDIpXSA7IHVzZSBjb21wYWN0IGJyYW5jaAorKyAgICAgICAgICAgICAgKGNvbnN0X2ludCA0KSkpIDsgdXNlIGV4dGVuZGVkIGJyYW5jaAorKyAgIChzZXRfYXR0ciAiY2MiICJub25lIildKQorKworKzsgYnJhbmNoIGlmIHBvc2l0aXZlCisrKGRlZmluZV9pbnNuICJicGwiCisrICBbKHNldCAocGMpCisrCShpZl90aGVuX2Vsc2UgKHVuc3BlYzpDQyBbKGNjMCkgKGNvbnN0X2ludCAwKV0gVU5TUEVDX0NPTkRfUEwpCisrCQkgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDAgIiIgIiIpKQorKwkJICAgICAgKHBjKSkpXQorKyAgIiIKKysgICJicnBsICAgICUwIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImJyYW5jaCIpCisrICAgKHNldCAoYXR0ciAibGVuZ3RoIikKKysJKGNvbmQgWyhhbmQgKGxlIChtaW51cyAobWF0Y2hfZHVwIDApIChwYykpIChjb25zdF9pbnQgMjU0KSkKKysJCSAgICAobGUgKG1pbnVzIChwYykgKG1hdGNoX2R1cCAwKSkgKGNvbnN0X2ludCAyNTYpKSkKKysJICAgICAgIChjb25zdF9pbnQgMildIDsgdXNlIGNvbXBhY3QgYnJhbmNoCisrICAgICAgICAgICAgICAoY29uc3RfaW50IDQpKSkgOyB1c2UgZXh0ZW5kZWQgYnJhbmNoCisrICAgKHNldF9hdHRyICJjYyIgIm5vbmUiKV0pCisrCisrKGRlZmluZV9pbnNuICIqYnBsLXJldmVyc2UiCisrICBbKHNldCAocGMpCisrCShpZl90aGVuX2Vsc2UgKHVuc3BlYzpDQyBbKGNjMCkgKGNvbnN0X2ludCAwKV0gVU5TUEVDX0NPTkRfUEwpCisrCQkgICAgICAocGMpCisrCQkgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDAgIiIgIiIpKSkpXQorKyAgIiIKKysgICJicm1pICAgICUwIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImJyYW5jaCIpCisrICAgKHNldCAoYXR0ciAibGVuZ3RoIikKKysJKGNvbmQgWyhhbmQgKGxlIChtaW51cyAobWF0Y2hfZHVwIDApIChwYykpIChjb25zdF9pbnQgMjU0KSkKKysJCSAgICAobGUgKG1pbnVzIChwYykgKG1hdGNoX2R1cCAwKSkgKGNvbnN0X2ludCAyNTYpKSkKKysJICAgICAgIChjb25zdF9pbnQgMildIDsgdXNlIGNvbXBhY3QgYnJhbmNoCisrICAgICAgICAgICAgICAoY29uc3RfaW50IDQpKSkgOyB1c2UgZXh0ZW5kZWQgYnJhbmNoCisrICAgKHNldF9hdHRyICJjYyIgIm5vbmUiKV0pCisrCisrOyBicmFuY2ggaWYgZXF1YWwKKysoZGVmaW5lX2luc24gImI8Y29kZT4iCisrICBbKHNldCAocGMpCisrCShpZl90aGVuX2Vsc2UgKGFueV9jb25kOkNDIChjYzApCisrCQkJICAoY29uc3RfaW50IDApKQorKwkJICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAwICIiICIiKSkKKysJCSAgICAgIChwYykpKV0KKysgICIiCisrICAiYnI8Y29uZD4gICAgJTAgIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImJyYW5jaCIpCisrICAgKHNldCAoYXR0ciAibGVuZ3RoIikKKysJKGNvbmQgWyhhbmQgKGxlIChtaW51cyAobWF0Y2hfZHVwIDApIChwYykpIChjb25zdF9pbnQgMjU0KSkKKysJCSAgICAobGUgKG1pbnVzIChwYykgKG1hdGNoX2R1cCAwKSkgKGNvbnN0X2ludCAyNTYpKSkKKysJICAgICAgIChjb25zdF9pbnQgMildIDsgdXNlIGNvbXBhY3QgYnJhbmNoCisrICAgICAgICAgICAgICAoY29uc3RfaW50IDQpKSkgOyB1c2UgZXh0ZW5kZWQgYnJhbmNoCisrICAgKHNldF9hdHRyICJjYyIgIm5vbmUiKV0pCisrCisrCisrKGRlZmluZV9pbnNuICIqYjxjb2RlPi1yZXZlcnNlIgorKyAgWyhzZXQgKHBjKQorKwkoaWZfdGhlbl9lbHNlIChhbnlfY29uZDpDQyAoY2MwKQorKwkJCSAgKGNvbnN0X2ludCAwKSkKKysJCSAgICAgIChwYykKKysJCSAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMCAiIiAiIikpKSldCisrICAiIgorKyAgImJyPGludmNvbmQ+ICAgICUwICIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJicmFuY2giKQorKyAgIChzZXQgKGF0dHIgImxlbmd0aCIpCisrCShjb25kIFsoYW5kIChsZSAobWludXMgKG1hdGNoX2R1cCAwKSAocGMpKSAoY29uc3RfaW50IDI1NCkpCisrCQkgICAgKGxlIChtaW51cyAocGMpIChtYXRjaF9kdXAgMCkpIChjb25zdF9pbnQgMjU2KSkpCisrCSAgICAgICAoY29uc3RfaW50IDIpXSA7IHVzZSBjb21wYWN0IGJyYW5jaAorKyAgICAgICAgICAgICAgKGNvbnN0X2ludCA0KSkpIDsgdXNlIGV4dGVuZGVkIGJyYW5jaAorKyAgIChzZXRfYXR0ciAiY2MiICJub25lIildKQorKworKworKworKzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKzsgQ29uZGl0aW9uYWwgQWRkL1N1YnRyYWN0CisrOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrOyBzdWJ7Y29uZDR9ICBSZCwgaW1tCisrOz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrCisrCisrKGRlZmluZV9leHBhbmQgImFkZDxtb2RlPmNjIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6QUREQ0MgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrICAgICAgICAoaWZfdGhlbl9lbHNlOkFERENDIChtYXRjaF9vcGVyYXRvciAxICJhdnIzMl9jb21wYXJpc29uX29wZXJhdG9yIiAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobWF0Y2hfZHVwIDQpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX2R1cCA1KV0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkFERENDIDIgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGx1czpBRERDQyAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9kdXAgMikKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkFERENDIDMgIiIgIiIpKSkpXQorKyAgIiIKKysgIHsKKysgICBpZiAoICEoR0VUX0NPREUgKG9wZXJhbmRzWzNdKSA9PSBDT05TVF9JTlQKKysgICAgICAgICAgfHwgKFRBUkdFVF9WMl9JTlNOUyAmJiBSRUdfUChvcGVyYW5kc1szXSkpKSApeworKyAgICAgIEZBSUw7CisrICAgfQorKworKyAgIC8qIERlbGV0ZSBjb21wYXJlIGluc3RydWN0aW9uIGFzIGl0IGlzIG1lcmdlZCBpbnRvIHRoaXMgaW5zdHJ1Y3Rpb24gKi8KKysgICByZW1vdmVfaW5zbiAoZ2V0X2xhc3RfaW5zbl9hbnl3aGVyZSAoKSk7CisrCisrICAgb3BlcmFuZHNbNF0gPSBhdnIzMl9jb21wYXJlX29wMDsKKysgICBvcGVyYW5kc1s1XSA9IGF2cjMyX2NvbXBhcmVfb3AxOworKyAgIAorKyAgIGlmICggVEFSR0VUX1YyX0lOU05TIAorKyAgICAgICAgJiYgUkVHX1Aob3BlcmFuZHNbM10pIAorKyAgICAgICAgJiYgUkVHTk8ob3BlcmFuZHNbMF0pICE9IFJFR05PKG9wZXJhbmRzWzJdKSApeworKyAgICAgICBlbWl0X21vdmVfaW5zbiAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzJdKTsKKysgICAgICAgb3BlcmFuZHNbMl0gPSBvcGVyYW5kc1swXTsKKysgICB9CisrICB9CisrICApCisrCisrKGRlZmluZV9pbnNuICJhZGQ8QUREQ0M6bW9kZT5jY19jbXA8Q01QOm1vZGU+X3JlZyIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkFERENDIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisrICAgICAgICAoaWZfdGhlbl9lbHNlOkFERENDIChtYXRjaF9vcGVyYXRvciAxICJhdnIzMl9jb21wYXJpc29uX29wZXJhdG9yIiAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobWF0Y2hfb3BlcmFuZDpDTVAgNCAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkNNUCA1ICI8Q01QOmNtcF9wcmVkaWNhdGU+IiAiPENNUDpjbXBfY29uc3RyYWludD4iKV0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9kdXAgMCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBsdXM6QUREQ0MgCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpBRERDQyAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpBRERDQyAzICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSkpXQorKyAgIlRBUkdFVF9WMl9JTlNOUyIKKysgIHsKKysgICBvcGVyYW5kc1sxXSA9IGF2cjMyX291dHB1dF9jbXAob3BlcmFuZHNbMV0sIEdFVF9NT0RFKG9wZXJhbmRzWzRdKSwgb3BlcmFuZHNbNF0sIG9wZXJhbmRzWzVdKTsKKysgICByZXR1cm4gImFkZCVpMVx0JTAsICUyLCAlMyI7CisrICB9CisrICBbKHNldF9hdHRyICJsZW5ndGgiICI4IikKKysgICAoc2V0X2F0dHIgImNjIiAiY21wX2NvbmRfaW5zbiIpXSkKKysKKysoZGVmaW5lX2luc24gImFkZDxBRERDQzptb2RlPmNjX2NtcDxDTVA6bW9kZT4iCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpBRERDQyAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKyAgICAgICAgKGlmX3RoZW5fZWxzZTpBRERDQyAobWF0Y2hfb3BlcmF0b3IgMSAiYXZyMzJfY29tcGFyaXNvbl9vcGVyYXRvciIgCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG1hdGNoX29wZXJhbmQ6Q01QIDQgInJlZ2lzdGVyX29wZXJhbmQiICJyIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpDTVAgNSAiPENNUDpjbXBfcHJlZGljYXRlPiIgIjxDTVA6Y21wX2NvbnN0cmFpbnQ+IildKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpBRERDQyAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwbHVzOkFERENDIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX2R1cCAyKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6QUREQ0MgMyAiYXZyMzJfY29uZF9pbW1lZGlhdGVfb3BlcmFuZCIgIklzMDgiKSkpKV0KKysgICIiCisrICB7CisrICAgb3BlcmFuZHNbMV0gPSBhdnIzMl9vdXRwdXRfY21wKG9wZXJhbmRzWzFdLCBHRVRfTU9ERShvcGVyYW5kc1s0XSksIG9wZXJhbmRzWzRdLCBvcGVyYW5kc1s1XSk7CisrICAgcmV0dXJuICJzdWIlaTFcdCUwLCAtJTMiOworKyAgfQorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiOCIpCisrICAgKHNldF9hdHRyICJjYyIgImNtcF9jb25kX2luc24iKV0pCisrCisrOz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrOyBDb25kaXRpb25hbCBNb3ZlCisrOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrOyBtb3Z7Y29uZDR9ICBSZCwgKFJzL2ltbSkKKys7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysoZGVmaW5lX2V4cGFuZCAibW92PG1vZGU+Y2MiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpNT1ZDQyAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysgICAgICAgIChpZl90aGVuX2Vsc2U6TU9WQ0MgKG1hdGNoX29wZXJhdG9yIDEgImF2cjMyX2NvbXBhcmlzb25fb3BlcmF0b3IiIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhtYXRjaF9kdXAgNCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfZHVwIDUpXSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6TU9WQ0MgMiAiYXZyMzJfY29uZF9yZWdpc3Rlcl9pbW1lZGlhdGVfb3BlcmFuZCIgIiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOk1PVkNDIDMgImF2cjMyX2NvbmRfcmVnaXN0ZXJfaW1tZWRpYXRlX29wZXJhbmQiICIiKSkpXQorKyAgIiIKKysgIHsKKysgICAvKiBEZWxldGUgY29tcGFyZSBpbnN0cnVjdGlvbiBhcyBpdCBpcyBtZXJnZWQgaW50byB0aGlzIGluc3RydWN0aW9uICovCisrICAgcmVtb3ZlX2luc24gKGdldF9sYXN0X2luc25fYW55d2hlcmUgKCkpOworKworKyAgIG9wZXJhbmRzWzRdID0gYXZyMzJfY29tcGFyZV9vcDA7CisrICAgb3BlcmFuZHNbNV0gPSBhdnIzMl9jb21wYXJlX29wMTsKKysgIH0KKysgICkKKysKKysKKysoZGVmaW5lX2luc24gIm1vdjxNT1ZDQzptb2RlPmNjX2NtcDxDTVA6bW9kZT4iCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpNT1ZDQyAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIscixyIikKKysgICAgICAgIChpZl90aGVuX2Vsc2U6TU9WQ0MgKG1hdGNoX29wZXJhdG9yIDEgImF2cjMyX2NvbXBhcmlzb25fb3BlcmF0b3IiIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhtYXRjaF9vcGVyYW5kOkNNUCA0ICJyZWdpc3Rlcl9vcGVyYW5kIiAicixyLHIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkNNUCA1ICI8Q01QOmNtcF9wcmVkaWNhdGU+IiAiPENNUDpjbXBfY29uc3RyYWludD4sPENNUDpjbXBfY29uc3RyYWludD4sPENNUDpjbXBfY29uc3RyYWludD4iKV0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOk1PVkNDIDIgImF2cjMyX2NvbmRfcmVnaXN0ZXJfaW1tZWRpYXRlX29wZXJhbmQiICIwLCByS3MwOCxyS3MwOCIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOk1PVkNDIDMgImF2cjMyX2NvbmRfcmVnaXN0ZXJfaW1tZWRpYXRlX29wZXJhbmQiICJyS3MwOCwwLHJLczA4IikpKV0KKysgICIiCisrICB7CisrICAgb3BlcmFuZHNbMV0gPSBhdnIzMl9vdXRwdXRfY21wKG9wZXJhbmRzWzFdLCBHRVRfTU9ERShvcGVyYW5kc1s0XSksIG9wZXJhbmRzWzRdLCBvcGVyYW5kc1s1XSk7CisrICAgICAgICAgICAKKysgICBzd2l0Y2goIHdoaWNoX2FsdGVybmF0aXZlICl7CisrICAgIGNhc2UgMDoKKysgICAgICByZXR1cm4gIm1vdiVpMSAgICAlMCwgJTMiOworKyAgICBjYXNlIDE6CisrICAgICAgcmV0dXJuICJtb3YlMSAgICAlMCwgJTIiOworKyAgICBjYXNlIDI6CisrICAgICAgcmV0dXJuICJtb3YlMSAgICAlMCwgJTJcO21vdiVpMSAgICAlMCwgJTMiOworKyAgICBkZWZhdWx0OgorKyAgICAgIGFib3J0KCk7CisrICAgIH0KKysKKysgIH0KKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjgsOCwxMiIpCisrICAgKHNldF9hdHRyICJjYyIgImNtcF9jb25kX2luc24iKV0pCisrCisrICAKKysKKysKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrOzsganVtcAorKzs7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKys7OyBKdW1wIGluc2lkZSBhIGZ1bmN0aW9uOyBhbiB1bmNvbmRpdGlvbmFsIGJyYW5jaCB0byBhIGxhYmVsLgorKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysoZGVmaW5lX2luc24gImp1bXAiCisrICBbKHNldCAocGMpCisrCShsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMCAiIiAiIikpKV0KKysgICIiCisrICB7CisrICAgIGlmIChnZXRfYXR0cl9sZW5ndGgoaW5zbikgPiA0KQorKyAgICAgIHJldHVybiAiQ2FuJ3QganVtcCB0aGlzIGZhciI7CisrICAgIHJldHVybiAoZ2V0X2F0dHJfbGVuZ3RoKGluc24pID09IDIgPworKwkgICAgInJqbXAgICAgJTAiIDogImJyYWwgICAgJTAiKTsKKysgIH0KKysgIFsoc2V0X2F0dHIgInR5cGUiICJicmFuY2giKQorKyAgIChzZXQgKGF0dHIgImxlbmd0aCIpCisrCShjb25kIFsoYW5kIChsZSAobWludXMgKG1hdGNoX2R1cCAwKSAocGMpKSAoY29uc3RfaW50IDEwMjIpKQorKwkJICAgIChsZSAobWludXMgKHBjKSAobWF0Y2hfZHVwIDApKSAoY29uc3RfaW50IDEwMjQpKSkKKysJICAgICAgIChjb25zdF9pbnQgMikgOyB1c2UgcmptcAorKwkgICAgICAgKGxlIChtYXRjaF9kdXAgMCkgKGNvbnN0X2ludCAxMDQ4NTc1KSkKKysJICAgICAgIChjb25zdF9pbnQgNCldIDsgdXNlIGJyYWwKKysJICAgICAgKGNvbnN0X2ludCA4KSkpIDsgZG8gc29tZXRoaW5nIGVsc2UKKysgICAoc2V0X2F0dHIgImNjIiAibm9uZSIpXSkKKysKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrOzsgY2FsbAorKzs7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKys7OyBTdWJyb3V0aW5lIGNhbGwgaW5zdHJ1Y3Rpb24gcmV0dXJuaW5nIG5vIHZhbHVlLgorKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysoZGVmaW5lX2luc24gImNhbGxfaW50ZXJuYWwiCisrICBbKHBhcmFsbGVsIFsoY2FsbCAobWVtOlNJIChtYXRjaF9vcGVyYW5kOlNJIDAgImF2cjMyX2NhbGxfb3BlcmFuZCIgInIsVSxULFciKSkKKysgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kIDEgIiIgIiIpKQorKyAgICAgICAgICAgICAgKGNsb2JiZXIgKHJlZzpTSSBMUl9SRUdOVU0pKV0pXQorKyAgIiIKKysgIHsKKysgICBzd2l0Y2ggKHdoaWNoX2FsdGVybmF0aXZlKXsKKysgICAgY2FzZSAwOgorKyAgICAgIHJldHVybiAiaWNhbGxcdCUwIjsKKysgICAgY2FzZSAxOgorKyAgICAgIHJldHVybiAicmNhbGxcdCUwIjsKKysgICAgY2FzZSAyOgorKyAgICAgIHJldHVybiAibWNhbGxcdCUwIjsKKysgICAgY2FzZSAzOgorKyAgICAgIGlmICggVEFSR0VUX0hBU19BU01fQUREUl9QU0VVRE9TICkKKysgICAgICAgIHJldHVybiAiY2FsbFx0JTAiOworKyAgICAgIGVsc2UKKysgICAgICAgIHJldHVybiAibWNhbGxcdHI2WyUwQGdvdF0iOworKyAgICBkZWZhdWx0OgorKyAgICAgIGFib3J0KCk7CisrICAgfQorKyAgfQorKyAgWyhzZXRfYXR0ciAidHlwZSIgImNhbGwiKQorKyAgIChzZXRfYXR0ciAibGVuZ3RoIiAiMiw0LDQsMTAiKQorKyAgIChzZXRfYXR0ciAiY2MiICJjbG9iYmVyIildKQorKworKworKyhkZWZpbmVfZXhwYW5kICJjYWxsIgorKyAgWyhwYXJhbGxlbCBbKGNhbGwgKG1hdGNoX29wZXJhbmQ6U0kgMCAiIiAiIikKKysgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kIDEgIiIgIiIpKQorKyAgICAgICAgICAgICAgKGNsb2JiZXIgKHJlZzpTSSBMUl9SRUdOVU0pKV0pXQorKyAgIiIKKysgIHsKKysgICBydHggY2FsbF9hZGRyZXNzOworKyAgIGlmICggR0VUX0NPREUob3BlcmFuZHNbMF0pICE9IE1FTSApCisrICAgICAgRkFJTDsKKysKKysgICBjYWxsX2FkZHJlc3MgPSBYRVhQKG9wZXJhbmRzWzBdLCAwKTsKKysKKysgICAvKiBJZiBhc3NlbWJsZXIgc3VwcG9ydHMgY2FsbCBwc2V1ZG8gaW5zbiBhbmQgdGhlIGNhbGwKKysgICAgICBhZGRyZXNzIGlzIGEgc3ltYm9sIHRoZW4gbm90aGluZyBzcGVjaWFsIG5lZWRzIHRvIGJlIGRvbmUuICovCisrICAgaWYgKCBUQVJHRVRfSEFTX0FTTV9BRERSX1BTRVVET1MKKysgICAgICAgICYmIChHRVRfQ09ERShjYWxsX2FkZHJlc3MpID09IFNZTUJPTF9SRUYpICl7CisrICAgICAgLyogV2UgbXVzdCBob3dldmVyIG1hcmsgdGhlIGZ1bmN0aW9uIGFzIHVzaW5nIHRoZSBHT1QgaWYKKysgICAgICAgICBmbGFnX3BpYyBpcyBzZXQsIHNpbmNlIHRoZSBjYWxsIGluc24gbWlnaHQgdHVybiBpbnRvCisrICAgICAgICAgYSBtY2FsbCB1c2luZyB0aGUgR09UIHB0ciByZWdpc3Rlci4gKi8KKysgICAgICBpZiAoIGZsYWdfcGljICl7CisrICAgICAgICAgY3VycmVudF9mdW5jdGlvbl91c2VzX3BpY19vZmZzZXRfdGFibGUgPSAxOworKyAgICAgICAgIGVtaXRfY2FsbF9pbnNuKGdlbl9jYWxsX2ludGVybmFsKGNhbGxfYWRkcmVzcywgb3BlcmFuZHNbMV0pKTsKKysgICAgICAgICBET05FOworKyAgICAgIH0KKysgICB9IGVsc2UgeworKyAgICAgaWYgKCBmbGFnX3BpYyAmJgorKyAgICAgICAgICBHRVRfQ09ERShjYWxsX2FkZHJlc3MpID09IFNZTUJPTF9SRUYgKXsKKysgICAgICAgY3VycmVudF9mdW5jdGlvbl91c2VzX3BpY19vZmZzZXRfdGFibGUgPSAxOworKyAgICAgICBlbWl0X2NhbGxfaW5zbihnZW5fY2FsbF9pbnRlcm5hbChjYWxsX2FkZHJlc3MsIG9wZXJhbmRzWzFdKSk7CisrICAgICAgIERPTkU7CisrICAgICB9CisrCisrICAgICBpZiAoICFTWU1CT0xfUkVGX1JDQUxMX0ZVTkNUSU9OX1Aob3BlcmFuZHNbMF0pICl7CisrICAgICAgIGlmICggb3B0aW1pemVfc2l6ZSAmJgorKyAgICAgICAgICAgICBHRVRfQ09ERShjYWxsX2FkZHJlc3MpID09IFNZTUJPTF9SRUYgKXsKKysgICAgICAgICBjYWxsX2FkZHJlc3MgPSBmb3JjZV9jb25zdF9tZW0oU0ltb2RlLCBjYWxsX2FkZHJlc3MpOworKyAgICAgICB9IGVsc2UgeworKyAgICAgICAgIGNhbGxfYWRkcmVzcyA9IGZvcmNlX3JlZyhTSW1vZGUsIGNhbGxfYWRkcmVzcyk7CisrICAgICAgIH0KKysgICAgIH0KKysgICB9CisrICAgZW1pdF9jYWxsX2luc24oZ2VuX2NhbGxfaW50ZXJuYWwoY2FsbF9hZGRyZXNzLCBvcGVyYW5kc1sxXSkpOworKyAgIERPTkU7CisrICB9CisrKQorKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBjYWxsX3ZhbHVlCisrOzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKzs7IFN1YnJ1dGluZSBjYWxsIGluc3RydWN0aW9uIHJldHVybmluZyBhIHZhbHVlLgorKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysoZGVmaW5lX2V4cGFuZCAiY2FsbF92YWx1ZSIKKysgICBbKHBhcmFsbGVsIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgIiIgIiIpCisrICAgICAgICAgICAgICAgICAgICAoY2FsbCAobWF0Y2hfb3BlcmFuZDpTSSAxICIiICIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQgMiAiIiAiIikpKQorKyAgICAgICAgICAgICAgIChjbG9iYmVyIChyZWc6U0kgTFJfUkVHTlVNKSldKV0KKysgICAiIgorKyAgIHsKKysgICAgcnR4IGNhbGxfYWRkcmVzczsKKysgICAgaWYgKCBHRVRfQ09ERShvcGVyYW5kc1sxXSkgIT0gTUVNICkKKysgICAgICBGQUlMOworKworKyAgICBjYWxsX2FkZHJlc3MgPSBYRVhQKG9wZXJhbmRzWzFdLCAwKTsKKysKKysgICAgLyogSWYgYXNzZW1ibGVyIHN1cHBvcnRzIGNhbGwgcHNldWRvIGluc24gYW5kIHRoZSBjYWxsCisrICAgICAgIGFkZHJlc3MgaXMgYSBzeW1ib2wgdGhlbiBub3RoaW5nIHNwZWNpYWwgbmVlZHMgdG8gYmUgZG9uZS4gKi8KKysgICAgaWYgKCBUQVJHRVRfSEFTX0FTTV9BRERSX1BTRVVET1MKKysgICAgICAgICAmJiAoR0VUX0NPREUoY2FsbF9hZGRyZXNzKSA9PSBTWU1CT0xfUkVGKSApeworKyAgICAgICAvKiBXZSBtdXN0IGhvd2V2ZXIgbWFyayB0aGUgZnVuY3Rpb24gYXMgdXNpbmcgdGhlIEdPVCBpZgorKyAgICAgICAgICBmbGFnX3BpYyBpcyBzZXQsIHNpbmNlIHRoZSBjYWxsIGluc24gbWlnaHQgdHVybiBpbnRvCisrICAgICAgICAgIGEgbWNhbGwgdXNpbmcgdGhlIEdPVCBwdHIgcmVnaXN0ZXIuICovCisrICAgICAgIGlmICggZmxhZ19waWMgKSB7CisrICAgICAgICAgIGN1cnJlbnRfZnVuY3Rpb25fdXNlc19waWNfb2Zmc2V0X3RhYmxlID0gMTsKKysgICAgICAgICAgZW1pdF9jYWxsX2luc24oZ2VuX2NhbGxfdmFsdWVfaW50ZXJuYWwob3BlcmFuZHNbMF0sIGNhbGxfYWRkcmVzcywgb3BlcmFuZHNbMl0pKTsKKysgICAgICAgICAgRE9ORTsKKysgICAgICAgfQorKyAgICB9IGVsc2UgeworKyAgICAgIGlmICggZmxhZ19waWMgJiYKKysgICAgICAgICAgIEdFVF9DT0RFKGNhbGxfYWRkcmVzcykgPT0gU1lNQk9MX1JFRiApeworKyAgICAgICAgY3VycmVudF9mdW5jdGlvbl91c2VzX3BpY19vZmZzZXRfdGFibGUgPSAxOworKyAgICAgICAgZW1pdF9jYWxsX2luc24oZ2VuX2NhbGxfdmFsdWVfaW50ZXJuYWwob3BlcmFuZHNbMF0sIGNhbGxfYWRkcmVzcywgb3BlcmFuZHNbMl0pKTsKKysgICAgICAgIERPTkU7CisrICAgICAgfQorKworKyAgICAgIGlmICggIVNZTUJPTF9SRUZfUkNBTExfRlVOQ1RJT05fUChvcGVyYW5kc1sxXSkgKXsKKysgICAgICAgIGlmICggb3B0aW1pemVfc2l6ZSAmJgorKyAgICAgICAgICAgICBHRVRfQ09ERShjYWxsX2FkZHJlc3MpID09IFNZTUJPTF9SRUYpeworKyAgICAgICAgICBjYWxsX2FkZHJlc3MgPSBmb3JjZV9jb25zdF9tZW0oU0ltb2RlLCBjYWxsX2FkZHJlc3MpOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgY2FsbF9hZGRyZXNzID0gZm9yY2VfcmVnKFNJbW9kZSwgY2FsbF9hZGRyZXNzKTsKKysgICAgICAgIH0KKysgICAgICB9CisrICAgIH0KKysgICAgZW1pdF9jYWxsX2luc24oZ2VuX2NhbGxfdmFsdWVfaW50ZXJuYWwob3BlcmFuZHNbMF0sIGNhbGxfYWRkcmVzcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZHNbMl0pKTsKKysgICAgRE9ORTsKKysKKysgICB9KQorKworKyhkZWZpbmVfaW5zbiAiY2FsbF92YWx1ZV9pbnRlcm5hbCIKKysgIFsocGFyYWxsZWwgWyhzZXQgKG1hdGNoX29wZXJhbmQgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yLHIscixyIikKKysgICAgICAgICAgICAgICAgICAgKGNhbGwgKG1lbTpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJhdnIzMl9jYWxsX29wZXJhbmQiICJyLFUsVCxXIikpCisrICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kIDIgIiIgIiIpKSkKKysgICAgICAgICAgICAgIChjbG9iYmVyIChyZWc6U0kgTFJfUkVHTlVNKSldKV0KKysgIDs7IE9wZXJhbmQgMiBub3QgdXNlZCBvbiB0aGUgQVZSMzIuCisrICAiIgorKyAgeworKyAgIHN3aXRjaCAod2hpY2hfYWx0ZXJuYXRpdmUpeworKyAgICBjYXNlIDA6CisrICAgICAgcmV0dXJuICJpY2FsbFx0JTEiOworKyAgICBjYXNlIDE6CisrICAgICAgcmV0dXJuICJyY2FsbFx0JTEiOworKyAgICBjYXNlIDI6CisrICAgICAgcmV0dXJuICJtY2FsbFx0JTEiOworKyAgICBjYXNlIDM6CisrICAgICAgaWYgKCBUQVJHRVRfSEFTX0FTTV9BRERSX1BTRVVET1MgKQorKyAgICAgICAgcmV0dXJuICJjYWxsXHQlMSI7CisrICAgICAgZWxzZQorKyAgICAgICAgcmV0dXJuICJtY2FsbFx0cjZbJTFAZ290XSI7CisrICAgIGRlZmF1bHQ6CisrICAgICAgYWJvcnQoKTsKKysgICB9CisrICB9CisrICBbKHNldF9hdHRyICJ0eXBlIiAiY2FsbCIpCisrICAgKHNldF9hdHRyICJsZW5ndGgiICIyLDQsNCwxMCIpCisrICAgKHNldF9hdHRyICJjYyIgImNhbGxfc2V0IildKQorKworKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyB1bnR5cGVkX2NhbGwKKys7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrOzsgU3VicnV0aW5lIGNhbGwgaW5zdHJ1Y3Rpb24gcmV0dXJuaW5nIGEgdmFsdWUgb2YgYW55IHR5cGUuCisrOzsgVGhlIGNvZGUgaXMgY29waWVkIGZyb20gbTY4ay5tZCAoZXhjZXB0IGdlbl9ibG9ja2FnZSBpcyByZW1vdmVkKQorKzs7IEZpeG1lIQorKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysoZGVmaW5lX2V4cGFuZCAidW50eXBlZF9jYWxsIgorKyAgWyhwYXJhbGxlbCBbKGNhbGwgKG1hdGNoX29wZXJhbmQgMCAiYXZyMzJfY2FsbF9vcGVyYW5kIiAiIikKKysJCSAgICAoY29uc3RfaW50IDApKQorKwkgICAgICAobWF0Y2hfb3BlcmFuZCAxICIiICIiKQorKwkgICAgICAobWF0Y2hfb3BlcmFuZCAyICIiICIiKV0pXQorKyAgIiIKKysgIHsKKysgICAgaW50IGk7CisrCisrICAgIGVtaXRfY2FsbF9pbnNuIChHRU5fQ0FMTCAob3BlcmFuZHNbMF0sIGNvbnN0MF9ydHgsIE5VTEwsIGNvbnN0MF9ydHgpKTsKKysKKysgICAgZm9yIChpID0gMDsgaSA8IFhWRUNMRU4gKG9wZXJhbmRzWzJdLCAwKTsgaSsrKSB7CisrICAgICAgcnR4IHNldCA9IFhWRUNFWFAgKG9wZXJhbmRzWzJdLCAwLCBpKTsKKysgICAgICBlbWl0X21vdmVfaW5zbiAoU0VUX0RFU1QgKHNldCksIFNFVF9TUkMgKHNldCkpOworKyAgICB9CisrCisrICAgIC8qIFRoZSBvcHRpbWl6ZXIgZG9lcyBub3Qga25vdyB0aGF0IHRoZSBjYWxsIHNldHMgdGhlIGZ1bmN0aW9uIHZhbHVlCisrICAgICAgIHJlZ2lzdGVycyB3ZSBzdG9yZWQgaW4gdGhlIHJlc3VsdCBibG9jay4gIFdlIGF2b2lkIHByb2JsZW1zIGJ5CisrICAgICAgIGNsYWltaW5nIHRoYXQgYWxsIGhhcmQgcmVnaXN0ZXJzIGFyZSB1c2VkIGFuZCBjbG9iYmVyZWQgYXQgdGhpcworKyAgICAgICBwb2ludC4gICovCisrICAgIGVtaXRfaW5zbiAoZ2VuX2Jsb2NrYWdlICgpKTsKKysKKysgICAgRE9ORTsKKysgIH0pCisrCisrCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKzs7IHJldHVybgorKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysKKysoZGVmaW5lX2luc24gInJldHVybiIKKysgIFsocmV0dXJuKV0KKysgICJVU0VfUkVUVVJOX0lOU04gKEZBTFNFKSIKKysgIHsKKysgICBhdnIzMl9vdXRwdXRfcmV0dXJuX2luc3RydWN0aW9uKFRSVUUsIEZBTFNFLCBOVUxMLCBOVUxMKTsKKysgICByZXR1cm4gIiI7CisrICB9CisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJjYWxsIildCisrICApCisrCisrCisrKGRlZmluZV9pbnNuICJyZXR1cm5fY29uZCIKKysgIFsoc2V0IChwYykgCisrICAgICAgICAoaWZfdGhlbl9lbHNlIChtYXRjaF9vcGVyYW5kIDAgImF2cjMyX2NvbXBhcmlzb25fb3BlcmFuZCIgIiIpCisrICAgICAgICAgICAgICAgICAgICAgIChyZXR1cm4pCisrICAgICAgICAgICAgICAgICAgICAgIChwYykpKV0KKysgICJVU0VfUkVUVVJOX0lOU04gKFRSVUUpIgorKyAgInJldCUwXHRyMTIiOworKyAgWyhzZXRfYXR0ciAidHlwZSIgImNhbGwiKV0pCisrICAKKysoZGVmaW5lX2luc24gInJldHVybl9jb25kX3ByZWRpY2FibGUiCisrICBbKHJldHVybildCisrICAiVVNFX1JFVFVSTl9JTlNOIChUUlVFKSIKKysgICJyZXQlP1x0cjEyIjsKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjYWxsIikKKysgICAoc2V0X2F0dHIgInByZWRpY2FibGUiICJ5ZXMiKV0pCisrCisrCisrKGRlZmluZV9pbnNuICJyZXR1cm5faW1tIgorKyAgWyhwYXJhbGxlbCBbKHNldCAocmVnIFJFVFZBTF9SRUdOVU0pIChtYXRjaF9vcGVyYW5kIDAgImltbWVkaWF0ZV9vcGVyYW5kIiAiaSIpKQorKyAgICAgICAgICAgICAgKHVzZSAocmVnIFJFVFZBTF9SRUdOVU0pKQorKyAgICAgICAgICAgICAgKHJldHVybildKV0KKysgICJVU0VfUkVUVVJOX0lOU04gKEZBTFNFKSAmJgorKyAgICgoSU5UVkFMKG9wZXJhbmRzWzBdKSA9PSAtMSkgfHwgKElOVFZBTChvcGVyYW5kc1swXSkgPT0gMCkgfHwgKElOVFZBTChvcGVyYW5kc1swXSkgPT0gMSkpIgorKyAgeworKyAgIGF2cjMyX291dHB1dF9yZXR1cm5faW5zdHJ1Y3Rpb24oVFJVRSwgRkFMU0UsIE5VTEwsIG9wZXJhbmRzWzBdKTsKKysgICByZXR1cm4gIiI7CisrICB9CisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJjYWxsIildCisrICApCisrCisrKGRlZmluZV9pbnNuICJyZXR1cm5faW1tX2NvbmQiCisrICBbKHBhcmFsbGVsIFsoc2V0IChyZWcgUkVUVkFMX1JFR05VTSkgKG1hdGNoX29wZXJhbmQgMCAiaW1tZWRpYXRlX29wZXJhbmQiICJpIikpCisrICAgICAgICAgICAgICAodXNlIChyZWcgUkVUVkFMX1JFR05VTSkpCisrICAgICAgICAgICAgICAoc2V0IChwYykgCisrICAgICAgICAgICAgICAgICAgIChpZl90aGVuX2Vsc2UgKG1hdGNoX29wZXJhbmQgMSAiYXZyMzJfY29tcGFyaXNvbl9vcGVyYW5kIiAiIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmV0dXJuKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYykpKV0pXQorKyAgIlVTRV9SRVRVUk5fSU5TTiAoVFJVRSkgJiYKKysgICAoKElOVFZBTChvcGVyYW5kc1swXSkgPT0gLTEpIHx8IChJTlRWQUwob3BlcmFuZHNbMF0pID09IDApIHx8IChJTlRWQUwob3BlcmFuZHNbMF0pID09IDEpKSIKKysgICJyZXQlMVx0JTAiOworKyAgWyhzZXRfYXR0ciAidHlwZSIgImNhbGwiKV0KKysgICkKKysKKysoZGVmaW5lX2luc24gInJldHVybl9pbW1fcHJlZGljYWJsZSIKKysgIFsocGFyYWxsZWwgWyhzZXQgKHJlZyBSRVRWQUxfUkVHTlVNKSAobWF0Y2hfb3BlcmFuZCAwICJpbW1lZGlhdGVfb3BlcmFuZCIgImkiKSkKKysgICAgICAgICAgICAgICh1c2UgKHJlZyBSRVRWQUxfUkVHTlVNKSkKKysgICAgICAgICAgICAgIChyZXR1cm4pXSldCisrICAiVVNFX1JFVFVSTl9JTlNOIChUUlVFKSAmJgorKyAgICgoSU5UVkFMKG9wZXJhbmRzWzBdKSA9PSAtMSkgfHwgKElOVFZBTChvcGVyYW5kc1swXSkgPT0gMCkgfHwgKElOVFZBTChvcGVyYW5kc1swXSkgPT0gMSkpIgorKyAgInJldCU/XHQlMCI7CisrICBbKHNldF9hdHRyICJ0eXBlIiAiY2FsbCIpCisrICAgKHNldF9hdHRyICJwcmVkaWNhYmxlIiAieWVzIildKQorKworKyhkZWZpbmVfaW5zbiAicmV0dXJuXzxtb2RlPnJlZyIKKysgIFsoc2V0IChyZWcgUkVUVkFMX1JFR05VTSkgKG1hdGNoX29wZXJhbmQ6TU9WTSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKQorKyAgICh1c2UgKHJlZyBSRVRWQUxfUkVHTlVNKSkKKysgICAocmV0dXJuKV0KKysgICJVU0VfUkVUVVJOX0lOU04gKFRSVUUpIgorKyAgInJldCU/XHQlMCI7CisrICBbKHNldF9hdHRyICJ0eXBlIiAiY2FsbCIpCisrICAgKHNldF9hdHRyICJwcmVkaWNhYmxlIiAieWVzIildKQorKworKyhkZWZpbmVfaW5zbiAicmV0dXJuXzxtb2RlPnJlZ19jb25kIgorKyAgWyhzZXQgKHJlZyBSRVRWQUxfUkVHTlVNKSAobWF0Y2hfb3BlcmFuZDpNT1ZNIDAgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpCisrICAgKHVzZSAocmVnIFJFVFZBTF9SRUdOVU0pKQorKyAgIChzZXQgKHBjKSAKKysgICAgICAgIChpZl90aGVuX2Vsc2UgKG1hdGNoX29wZXJhdG9yIDEgImF2cjMyX2NvbXBhcmlzb25fb3BlcmF0b3IiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKGNjMCkgKGNvbnN0X2ludCAwKV0pCisrICAgICAgICAgICAgICAgICAgICAgIChyZXR1cm4pCisrICAgICAgICAgICAgICAgICAgICAgIChwYykpKV0KKysgICJVU0VfUkVUVVJOX0lOU04gKFRSVUUpIgorKyAgInJldCUxXHQlMCI7CisrICBbKHNldF9hdHRyICJ0eXBlIiAiY2FsbCIpXSkKKysgIAorKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBub3AKKys7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrOzsgTm8tb3AgaW5zdHJ1Y3Rpb24uCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyhkZWZpbmVfaW5zbiAibm9wIgorKyAgWyhjb25zdF9pbnQgMCldCisrICAiIgorKyAgIm5vcCIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImFsdSIpCisrICAgKHNldF9hdHRyICJjYyIgIm5vbmUiKV0pCisrCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKzs7IG5vbmxvY2FsX2dvdG9fcmVjZWl2ZXIKKys7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrOzsgRm9yIHRhcmdldHMgd2l0aCBhIHJldHVybiBzdGFjayB3ZSBtdXN0IG1ha2Ugc3VyZSB0byBmbHVzaCB0aGUgcmV0dXJuIHN0YWNrCisrOzsgc2luY2UgaXQgd2lsbCBiZSBjb3JydXB0IGFmdGVyIGEgbm9ubG9jYWwgZ290by4KKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrKGRlZmluZV9leHBhbmQgIm5vbmxvY2FsX2dvdG9fcmVjZWl2ZXIiCisrICBbKGNvbnN0X2ludCAwKV0KKysgICJUQVJHRVRfUkVUVVJOX1NUQUNLIgorKyAgIgorKyAgIHsKKysgICAgZW1pdF9pbnNuICggZ2VuX2ZycygpICk7CisrICAgIERPTkU7CisrICAgfQorKyAgIgorKyAgKQorKworKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBidWlsdGluX3NldGptcF9yZWNlaXZlcgorKzs7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKys7OyBGb3IgcGljIGNvZGUgd2UgbmVlZCB0byByZWxvYWQgdGhlIHBpYyByZWdpc3Rlci4KKys7OyBGb3IgdGFyZ2V0cyB3aXRoIGEgcmV0dXJuIHN0YWNrIHdlIG11c3QgbWFrZSBzdXJlIHRvIGZsdXNoIHRoZSByZXR1cm4gc3RhY2sKKys7OyBzaW5jZSBpdCB3aWxsIHByb2JhYmx5IGJlIGNvcnJ1cHRlZC4KKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrKGRlZmluZV9leHBhbmQgImJ1aWx0aW5fc2V0am1wX3JlY2VpdmVyIgorKyAgWyhsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMCAiIiAiIikpXQorKyAgImZsYWdfcGljIgorKyAgIgorKyAgIHsKKysgICAgaWYgKCBUQVJHRVRfUkVUVVJOX1NUQUNLICkgCisrICAgICBlbWl0X2luc24gKCBnZW5fZnJzKCkgKTsKKysKKysgICAgYXZyMzJfbG9hZF9waWNfcmVnaXN0ZXIgKCk7CisrICAgIERPTkU7CisrICAgfQorKyAgIgorKykKKysKKysKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrOzsgaW5kaXJlY3RfanVtcAorKzs7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKys7OyBKdW1wIHRvIGFuIGFkZHJlc3MgaW4gcmVnIG9yIG1lbW9yeS4KKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrKGRlZmluZV9leHBhbmQgImluZGlyZWN0X2p1bXAiCisrICBbKHNldCAocGMpCisrCShtYXRjaF9vcGVyYW5kOlNJIDAgImdlbmVyYWxfb3BlcmFuZCIgIiIpKV0KKysgICIiCisrICB7CisrICAgIC8qIE9uZSBvZiB0aGUgb3BzIGhhcyB0byBiZSBpbiBhIHJlZ2lzdGVyLiAgKi8KKysgICAgaWYgKCAoZmxhZ19waWMgfHwgVEFSR0VUX0hBU19BU01fQUREUl9QU0VVRE9TICkKKysgICAgICAgICAmJiAhYXZyMzJfbGVnaXRpbWF0ZV9waWNfb3BlcmFuZF9wKG9wZXJhbmRzWzBdKSApCisrICAgICAgb3BlcmFuZHNbMF0gPSBsZWdpdGltaXplX3BpY19hZGRyZXNzIChvcGVyYW5kc1swXSwgU0ltb2RlLCAwKTsKKysgICAgZWxzZSBpZiAoIGZsYWdfcGljICYmIGF2cjMyX2FkZHJlc3Nfb3BlcmFuZChvcGVyYW5kc1swXSwgR0VUX01PREUob3BlcmFuZHNbMF0pKSApCisrICAgICAgLyogSWYgd2UgaGF2ZSBhbiBhZGRyZXNzIG9wZXJhbmQgdGhlbiB0aGlzIGZ1bmN0aW9uIHVzZXMgdGhlIHBpYyByZWdpc3Rlci4gKi8KKysgICAgICBjdXJyZW50X2Z1bmN0aW9uX3VzZXNfcGljX29mZnNldF90YWJsZSA9IDE7CisrICB9KQorKworKworKyhkZWZpbmVfaW5zbiAiaW5kaXJlY3RfanVtcF9pbnRlcm5hbCIKKysgIFsoc2V0IChwYykKKysJKG1hdGNoX29wZXJhbmQ6U0kgMCAiYXZyMzJfbm9uX3Jtd19nZW5lcmFsX29wZXJhbmQiICJyLG0sVyIpKV0KKysgICIiCisrICB7CisrICAgIHN3aXRjaCggd2hpY2hfYWx0ZXJuYXRpdmUgKXsKKysgICAgICBjYXNlIDA6CisrICAgICAgICByZXR1cm4gIm1vdlx0cGMsICUwIjsKKysgICAgICBjYXNlIDE6CisrICAgICAgICBpZiAoIGF2cjMyX2NvbnN0X3Bvb2xfcmVmX29wZXJhbmQob3BlcmFuZHNbMF0sIEdFVF9NT0RFKG9wZXJhbmRzWzBdKSkgKQorKyAgICAgICAgICByZXR1cm4gImxkZHBjXHRwYywgJTAiOworKyAgICAgICAgZWxzZQorKyAgICAgICAgICByZXR1cm4gImxkLndcdHBjLCAlMCI7CisrICAgICAgY2FzZSAyOgorKyAgICAgICAgaWYgKCBmbGFnX3BpYyApCisrICAgICAgICAgIHJldHVybiAibGQud1x0cGMsIHI2WyUwQGdvdF0iOworKyAgICAgICAgZWxzZQorKyAgICAgICAgICByZXR1cm4gImxkYS53XHRwYywgJTAiOworKyAgICAgIGRlZmF1bHQ6CisrCWFib3J0KCk7CisrICAgIH0KKysgICB9CisrICBbKHNldF9hdHRyICJsZW5ndGgiICIyLDQsOCIpCisrICAgKHNldF9hdHRyICJ0eXBlIiAiY2FsbCxjYWxsLGNhbGwiKQorKyAgIChzZXRfYXR0ciAiY2MiICJub25lLG5vbmUsY2xvYmJlciIpXSkKKysKKysKKysKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrOzsgY2FzZXNpIGFuZCB0YWJsZWp1bXAKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrKGRlZmluZV9pbnNuICJ0YWJsZWp1bXBfYWRkIgorKyAgWyhzZXQgKHBjKQorKwkocGx1czpTSSAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCisrICAgICAgICAgICAgICAgICAobXVsdDpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJpbW1lZGlhdGVfb3BlcmFuZCIgIkt1MDQiICkpKSkKKysgICAodXNlIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMyAiIiAiIikpKV0KKysgICJmbGFnX3BpYyAmJgorKyAgICgoSU5UVkFMKG9wZXJhbmRzWzJdKSA9PSAwKSB8fCAoSU5UVkFMKG9wZXJhbmRzWzJdKSA9PSAyKSB8fAorKyAgICAoSU5UVkFMKG9wZXJhbmRzWzJdKSA9PSA0KSB8fCAoSU5UVkFMKG9wZXJhbmRzWzJdKSA9PSA4KSkiCisrICAiYWRkXHRwYywgJTAsICUxIDw8ICVwMiIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAiY2MiICJjbG9iYmVyIildKQorKworKyhkZWZpbmVfaW5zbiAidGFibGVqdW1wX2luc24iCisrICBbKHNldCAocGMpIChtYXRjaF9vcGVyYW5kOlNJIDAgIm1lbW9yeV9vcGVyYW5kIiAibSIpKQorKyAgICh1c2UgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAxICIiICIiKSkpXQorKyAgIiFmbGFnX3BpYyIKKysgICJsZC53XHRwYywgJTAiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJjYWxsIikKKysgICAoc2V0X2F0dHIgImNjIiAibm9uZSIpXSkKKysKKysoZGVmaW5lX2V4cGFuZCAiY2FzZXNpIgorKyAgWyhtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQk7IGluZGV4IHRvIGp1bXAgb24KKysgICAobWF0Y2hfb3BlcmFuZDpTSSAxICJjb25zdF9pbnRfb3BlcmFuZCIgIiIpCTsgbG93ZXIgYm91bmQKKysgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJjb25zdF9pbnRfb3BlcmFuZCIgIiIpCTsgdG90YWwgcmFuZ2UKKysgICAobWF0Y2hfb3BlcmFuZDpTSSAzICIiICIiKQkJCTsgdGFibGUgbGFiZWwKKysgICAobWF0Y2hfb3BlcmFuZDpTSSA0ICIiICIiKV0JCQk7IE91dCBvZiByYW5nZSBsYWJlbAorKyAgIiIKKysgICIKKysgIHsKKysgICAgcnR4IHJlZzsKKysgICAgcnR4IGluZGV4ID0gb3BlcmFuZHNbMF07CisrICAgIHJ0eCBsb3dfYm91bmQgPSBvcGVyYW5kc1sxXTsKKysgICAgcnR4IHJhbmdlID0gb3BlcmFuZHNbMl07CisrICAgIHJ0eCB0YWJsZV9sYWJlbCA9IG9wZXJhbmRzWzNdOworKyAgICBydHggb29yX2xhYmVsID0gb3BlcmFuZHNbNF07CisrCisrICAgIGluZGV4ID0gZm9yY2VfcmVnICggU0ltb2RlLCBpbmRleCApOworKyAgICBpZiAobG93X2JvdW5kICE9IGNvbnN0MF9ydHgpCisrICAgICAgeworKyAgICAgICAgaWYgKCFhdnIzMl9jb25zdF9va19mb3JfY29uc3RyYWludF9wKElOVFZBTCAobG93X2JvdW5kKSwgJ0knLCBcIklzMjFcIikpeworKyAgICAgICAgICByZWcgPSBmb3JjZV9yZWcoU0ltb2RlLCBHRU5fSU5UIChJTlRWQUwgKGxvd19ib3VuZCkpKTsKKysJICBlbWl0X2luc24gKGdlbl9zdWJzaTMgKHJlZywgaW5kZXgsCisrCQkJICAgICAgICAgcmVnKSk7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICByZWcgPSBnZW5fcmVnX3J0eCAoU0ltb2RlKTsKKysgICAgICAgICAgZW1pdF9pbnNuIChnZW5fYWRkc2kzIChyZWcsIGluZGV4LAorKwkJICAgICAgICAgCSBHRU5fSU5UICgtSU5UVkFMIChsb3dfYm91bmQpKSkpOworKyAgICAgICAgfQorKwlpbmRleCA9IHJlZzsKKysgICAgICB9CisrCisrICAgIGlmICghYXZyMzJfY29uc3Rfb2tfZm9yX2NvbnN0cmFpbnRfcCAoSU5UVkFMIChyYW5nZSksICdLJywgXCJLczIxXCIpKQorKyAgICAgIHJhbmdlID0gZm9yY2VfcmVnIChTSW1vZGUsIHJhbmdlKTsKKysKKysgICAgZW1pdF9jbXBfYW5kX2p1bXBfaW5zbnMgKCBpbmRleCwgcmFuZ2UsIEdUVSwgTlVMTF9SVFgsIFNJbW9kZSwgMSwgb29yX2xhYmVsICk7CisrICAgIHJlZyA9IGdlbl9yZWdfcnR4IChTSW1vZGUpOworKyAgICBlbWl0X21vdmVfaW5zbiAoIHJlZywgZ2VuX3J0eF9MQUJFTF9SRUYgKFZPSURtb2RlLCB0YWJsZV9sYWJlbCkpOworKworKyAgICBpZiAoIGZsYWdfcGljICkgCisrICAgICAgIGVtaXRfanVtcF9pbnNuICggZ2VuX3RhYmxlanVtcF9hZGQgKCByZWcsIGluZGV4LCBHRU5fSU5UKDQpLCB0YWJsZV9sYWJlbCkpOworKyAgICBlbHNlCisrICAgICAgIGVtaXRfanVtcF9pbnNuICggCisrICAgICAgICAgICBnZW5fdGFibGVqdW1wX2luc24gKCBnZW5fcnR4X01FTSAoIFNJbW9kZSwgCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9ydHhfUExVUyAoIFNJbW9kZSwgCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZywgCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9ydHhfTVVMVCAoIFNJbW9kZSwgCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0VOX0lOVCg0KSkpKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2xhYmVsKSk7CisrICAgIERPTkU7CisrICB9IgorKykKKysKKysKKysKKysoZGVmaW5lX2luc24gInByZWZldGNoIgorKyAgWyhwcmVmZXRjaCAobWF0Y2hfb3BlcmFuZDpTSSAwICJhdnIzMl9rczE2X2FkZHJlc3Nfb3BlcmFuZCIgInAiKQorKwkgICAgIChtYXRjaF9vcGVyYW5kIDEgImNvbnN0X2ludF9vcGVyYW5kIiAiIikKKysJICAgICAobWF0Y2hfb3BlcmFuZCAyICJjb25zdF9pbnRfb3BlcmFuZCIgIiIpKV0KKysgICIiCisrICB7CisrICAgICByZXR1cm4gInByZWZcdCUwIjsKKysgIH0KKysKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImxvYWQiKQorKyAgIChzZXRfYXR0ciAiY2MiICJub25lIildKQorKworKworKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBwcm9sb2d1ZQorKzs7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKys7OyBUaGlzIHBhdHRlcm4sIGlmIGRlZmluZWQsIGVtaXRzIFJUTCBmb3IgZW50cnkgdG8gYSBmdW5jdGlvbi4gVGhlIGZ1bmN0aW9uCisrOzsgZW50cnkgaSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgc3RhY2sgZnJhbWUsIGluaXRpYWxpemluZyB0aGUgZnJhbWUKKys7OyBwb2ludGVyIHJlZ2lzdGVyLCBzYXZpbmcgY2FsbGVlIHNhdmVkIHJlZ2lzdGVycywgZXRjLgorKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysoZGVmaW5lX2V4cGFuZCAicHJvbG9ndWUiCisrICBbKGNsb2JiZXIgKGNvbnN0X2ludCAwKSldCisrICAiIgorKyAgIgorKyAgYXZyMzJfZXhwYW5kX3Byb2xvZ3VlKCk7CisrICBET05FOworKyAgIgorKyAgKQorKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBlaF9yZXR1cm4KKys7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrOzsgVGhpcyBwYXR0ZXJuLCBpZiBkZWZpbmVkLCBhZmZlY3RzIHRoZSB3YXkgX19idWlsdGluX2VoX3JldHVybiwgYW5kCisrOzsgdGhlbmNlIHRoZSBjYWxsIGZyYW1lIGV4Y2VwdGlvbiBoYW5kbGluZyBsaWJyYXJ5IHJvdXRpbmVzLCBhcmUKKys7OyBidWlsdC4gSXQgaXMgaW50ZW5kZWQgdG8gaGFuZGxlIG5vbi10cml2aWFsIGFjdGlvbnMgbmVlZGVkIGFsb25nCisrOzsgdGhlIGFibm9ybWFsIHJldHVybiBwYXRoLgorKzs7CisrOzsgVGhlIGFkZHJlc3Mgb2YgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIHRvIHdoaWNoIHRoZSBmdW5jdGlvbiBzaG91bGQKKys7OyByZXR1cm4gaXMgcGFzc2VkIGFzIG9wZXJhbmQgdG8gdGhpcyBwYXR0ZXJuLiBJdCB3aWxsIG5vcm1hbGx5IG5lZWQKKys7OyB0byBjb3BpZWQgYnkgdGhlIHBhdHRlcm4gdG8gc29tZSBzcGVjaWFsIHJlZ2lzdGVyIG9yIG1lbW9yeQorKzs7IGxvY2F0aW9uLiBJZiB0aGUgcGF0dGVybiBuZWVkcyB0byBkZXRlcm1pbmUgdGhlIGxvY2F0aW9uIG9mIHRoZQorKzs7IHRhcmdldCBjYWxsIGZyYW1lIGluIG9yZGVyIHRvIGRvIHNvLCBpdCBtYXkgdXNlCisrOzsgRUhfUkVUVVJOX1NUQUNLQURKX1JUWCwgaWYgZGVmaW5lZDsgaXQgd2lsbCBoYXZlIGFscmVhZHkgYmVlbgorKzs7IGFzc2lnbmVkLgorKzs7CisrOzsgSWYgdGhpcyBwYXR0ZXJuIGlzIG5vdCBkZWZpbmVkLCB0aGUgZGVmYXVsdCBhY3Rpb24gd2lsbCBiZSB0bworKzs7IHNpbXBseSBjb3B5IHRoZSByZXR1cm4gYWRkcmVzcyB0byBFSF9SRVRVUk5fSEFORExFUl9SVFguIEVpdGhlcgorKzs7IHRoYXQgbWFjcm8gb3IgdGhpcyBwYXR0ZXJuIG5lZWRzIHRvIGJlIGRlZmluZWQgaWYgY2FsbCBmcmFtZQorKzs7IGV4Y2VwdGlvbiBoYW5kbGluZyBpcyB0byBiZSB1c2VkLgorKworKzs7IFdlIGNhbid0IGV4cGFuZCB0aGlzIGJlZm9yZSB3ZSBrbm93IHdoZXJlIHRoZSBsaW5rIHJlZ2lzdGVyIGlzIHN0b3JlZC4KKysoZGVmaW5lX2luc25fYW5kX3NwbGl0ICJlaF9yZXR1cm4iCisrICBbKHVuc3BlY192b2xhdGlsZSBbKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKV0KKysJCSAgICBWVU5TUEVDX0VIX1JFVFVSTikKKysgICAoY2xvYmJlciAobWF0Y2hfc2NyYXRjaDpTSSAxICI9JnIiKSldCisrICAiIgorKyAgIiMiCisrICAicmVsb2FkX2NvbXBsZXRlZCIKKysgIFsoY29uc3RfaW50IDApXQorKyAgIgorKyAgeworKyAgICBhdnIzMl9zZXRfcmV0dXJuX2FkZHJlc3MgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSk7CisrICAgIERPTkU7CisrICB9IgorKyAgKQorKworKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBmZnNzaTIKKys7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrKGRlZmluZV9pbnNuICJmZnNzaTIiCisrICBbIChzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysgICAgICAgICAoZmZzOlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKSBdCisrICAiIgorKyAgIm1vdiAgICAlMCwgJTEKKysgICBicmV2ICAgJTAKKysgICBjbHogICAgJTAsICUwCisrICAgc3ViICAgICUwLCAtMQorKyAgIGNwICAgICAlMCwgMzMKKysgICBtb3ZlcSAgJTAsIDAiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICIxOCIpCisrICAgKHNldF9hdHRyICJjYyIgImNsb2JiZXIiKV0KKysgICkKKysKKysKKysKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrOzsgc3dhcF9oCisrOzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyhkZWZpbmVfaW5zbiAiKnN3YXBfaCIKKysgIFsgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKyAgICAgICAgIChpb3I6U0kgKGFzaGlmdDpTSSAobWF0Y2hfZHVwIDApIChjb25zdF9pbnQgMTYpKQorKyAgICAgICAgICAgICAgICAgKGxzaGlmdHJ0OlNJIChtYXRjaF9kdXAgMCkgKGNvbnN0X2ludCAxNikpKSldCisrICAiIgorKyAgInN3YXAuaCAgICAlMCIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKysgICkKKysKKysoZGVmaW5lX2luc25fYW5kX3NwbGl0ICJic3dhcF8xNiIKKysgIFsgKHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJhdnIzMl9ic3dhcF9vcGVyYW5kIiAiPXIsUktzMTMsciIpCisrICAgICAgICAgKGlvcjpISSAoYW5kOkhJIChsc2hpZnRydDpISSAobWF0Y2hfb3BlcmFuZDpISSAxICJhdnIzMl9ic3dhcF9vcGVyYW5kIiAicixyLFJLczEzIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgOCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMjU1KSkKKysgICAgICAgICAgICAgICAgIChhc2hpZnQ6SEkgKGFuZDpISSAobWF0Y2hfZHVwIDEpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAyNTUpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDgpKSkpXQorKyAgIiIKKysgIHsKKysgICBzd2l0Y2ggKCB3aGljaF9hbHRlcm5hdGl2ZSApeworKyAgICAgY2FzZSAwOgorKyAgICAgICBpZiAoIFJFR05PKG9wZXJhbmRzWzBdKSA9PSBSRUdOTyhvcGVyYW5kc1sxXSkpCisrICAgICAgICAgcmV0dXJuICJzd2FwLmJoXHQlMCI7CisrICAgICAgIGVsc2UKKysgICAgICAgICByZXR1cm4gIm1vdlx0JTAsICUxXDtzd2FwLmJoXHQlMCI7CisrICAgICBjYXNlIDE6CisrICAgICAgIHJldHVybiAic3Rzd3AuaFx0JTAsICUxIjsKKysgICAgIGNhc2UgMjoKKysgICAgICAgcmV0dXJuICJsZHN3cC5zaFx0JTAsICUxIjsKKysgICAgIGRlZmF1bHQ6CisrICAgICAgIGFib3J0KCk7CisrICAgICB9CisrICB9CisrCisrICAiKHJlbG9hZF9jb21wbGV0ZWQgJiYKKysgICAgIFJFR19QKG9wZXJhbmRzWzBdKSAmJiBSRUdfUChvcGVyYW5kc1sxXSkKKysgICAgICYmIChSRUdOTyhvcGVyYW5kc1swXSkgIT0gUkVHTk8ob3BlcmFuZHNbMV0pKSkiCisrICBbKHNldCAobWF0Y2hfZHVwIDApIChtYXRjaF9kdXAgMSkpCisrICAgKHNldCAobWF0Y2hfZHVwIDApCisrICAgICAgICAoaW9yOkhJIChhbmQ6SEkgKGxzaGlmdHJ0OkhJIChtYXRjaF9kdXAgMCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCA4KSkKKysgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDI1NSkpCisrICAgICAgICAgICAgICAgIChhc2hpZnQ6SEkgKGFuZDpISSAobWF0Y2hfZHVwIDApCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDI1NSkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCA4KSkpKV0KKysgICIiCisrCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0LDQsNCIpCisrICAgKHNldF9hdHRyICJ0eXBlIiAiYWx1LHN0b3JlLGxvYWRfcm0iKV0KKysgICkKKysKKysoZGVmaW5lX2luc25fYW5kX3NwbGl0ICJic3dhcF8zMiIKKysgIFsgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJhdnIzMl9ic3dhcF9vcGVyYW5kIiAiPXIsUktzMTQsciIpCisrICAgICAgICAgKGlvcjpTSSAoaW9yOlNJIChsc2hpZnRydDpTSSAoYW5kOlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgImF2cjMyX2Jzd2FwX29wZXJhbmQiICJyLHIsUktzMTQiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IC0xNjc3NzIxNikpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDI0KSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgKGxzaGlmdHJ0OlNJIChhbmQ6U0kgKG1hdGNoX2R1cCAxKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDE2NzExNjgwKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgOCkpKQorKyAgICAgICAgICAgICAgICAgKGlvcjpTSSAoYXNoaWZ0OlNJIChhbmQ6U0kgKG1hdGNoX2R1cCAxKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCA2NTI4MCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCA4KSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgKGFzaGlmdDpTSSAoYW5kOlNJIChtYXRjaF9kdXAgMSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMjU1KSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDI0KSkpKSldCisrICAiIgorKyAgeworKyAgICBzd2l0Y2ggKCB3aGljaF9hbHRlcm5hdGl2ZSApeworKyAgICAgY2FzZSAwOgorKyAgICAgICBpZiAoIFJFR05PKG9wZXJhbmRzWzBdKSA9PSBSRUdOTyhvcGVyYW5kc1sxXSkpCisrICAgICAgICAgcmV0dXJuICJzd2FwLmJcdCUwIjsKKysgICAgICAgZWxzZQorKyAgICAgICAgIHJldHVybiAiIyI7CisrICAgICBjYXNlIDE6CisrICAgICAgIHJldHVybiAic3Rzd3Aud1x0JTAsICUxIjsKKysgICAgIGNhc2UgMjoKKysgICAgICAgcmV0dXJuICJsZHN3cC53XHQlMCwgJTEiOworKyAgICAgZGVmYXVsdDoKKysgICAgICAgYWJvcnQoKTsKKysgICAgfQorKyAgfQorKyAgIihyZWxvYWRfY29tcGxldGVkICYmCisrICAgIFJFR19QKG9wZXJhbmRzWzBdKSAmJiBSRUdfUChvcGVyYW5kc1sxXSkKKysgICAgJiYgKFJFR05PKG9wZXJhbmRzWzBdKSAhPSBSRUdOTyhvcGVyYW5kc1sxXSkpKSIKKysgIFsoc2V0IChtYXRjaF9kdXAgMCkgKG1hdGNoX2R1cCAxKSkKKysgICAoc2V0IChtYXRjaF9kdXAgMCkKKysgICAgICAgIChpb3I6U0kgKGlvcjpTSSAobHNoaWZ0cnQ6U0kgKGFuZDpTSSAobWF0Y2hfZHVwIDApCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAtMTY3NzcyMTYpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDI0KSkKKysgICAgICAgICAgICAgICAgICAgICAgICAobHNoaWZ0cnQ6U0kgKGFuZDpTSSAobWF0Y2hfZHVwIDApCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAxNjcxMTY4MCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgOCkpKQorKyAgICAgICAgICAgICAgICAoaW9yOlNJIChhc2hpZnQ6U0kgKGFuZDpTSSAobWF0Y2hfZHVwIDApCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgNjUyODApKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCA4KSkKKysgICAgICAgICAgICAgICAgICAgICAgICAoYXNoaWZ0OlNJIChhbmQ6U0kgKG1hdGNoX2R1cCAwKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDI1NSkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDI0KSkpKSldCisrICAiIgorKworKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCw0LDQiKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImFsdSxzdG9yZSxsb2FkX3JtIildCisrICApCisrCisrCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKzs7IGJsb2NrYWdlCisrOzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKzs7IFVOU1BFQ19WT0xBVElMRSBpcyBjb25zaWRlcmVkIHRvIHVzZSBhbmQgY2xvYmJlciBhbGwgaGFyZCByZWdpc3RlcnMgYW5kCisrOzsgYWxsIG9mIG1lbW9yeS4gIFRoaXMgYmxvY2tzIGluc25zIGZyb20gYmVpbmcgbW92ZWQgYWNyb3NzIHRoaXMgcG9pbnQuCisrCisrKGRlZmluZV9pbnNuICJibG9ja2FnZSIKKysgIFsodW5zcGVjX3ZvbGF0aWxlIFsoY29uc3RfaW50IDApXSBWVU5TUEVDX0JMT0NLQUdFKV0KKysgICIiCisrICAiIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMCIpXQorKykKKysKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrOzsgY2x6c2kyCisrOzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyhkZWZpbmVfaW5zbiAiY2x6c2kyIgorKyAgWyAoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisrICAgICAgICAgKGNsejpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSkgXQorKyAgIiIKKysgICJjbHogICAgJTAsICUxIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJjYyIgInNldF96IildCisrICApCisrCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKzs7IGN0enNpMgorKzs7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysoZGVmaW5lX2luc24gImN0enNpMiIKKysgIFsgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIsciIpCisrICAgICAgICAgKGN0ejpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCxyIikpKSBdCisrICAiIgorKyAgIkAKKysgICBicmV2XHQlMFw7Y2x6XHQlMCwgJTAKKysgICBtb3ZcdCUwLCAlMVw7YnJldlx0JTBcO2Nselx0JTAsICUwIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiOCIpCisrICAgKHNldF9hdHRyICJjYyIgInNldF96IildCisrICApCisrCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKzs7IGNhY2hlIGluc3RydWN0aW9ucworKzs7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysoZGVmaW5lX2luc24gImNhY2hlIgorKyAgWyAodW5zcGVjX3ZvbGF0aWxlIFsobWF0Y2hfb3BlcmFuZDpTSSAwICJhdnIzMl9rczExX2FkZHJlc3Nfb3BlcmFuZCIgInAiKQorKyAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAxICJpbW1lZGlhdGVfb3BlcmFuZCIgIkt1MDUiKV0gVlVOU1BFQ19DQUNIRSldCisrICAiIgorKyAgImNhY2hlICAgICUwLCAlMSIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKV0KKysgICkKKysKKysoZGVmaW5lX2luc24gInN5bmMiCisrICBbICh1bnNwZWNfdm9sYXRpbGUgWyhtYXRjaF9vcGVyYW5kOlNJIDAgImltbWVkaWF0ZV9vcGVyYW5kIiAiS3UwOCIpXSBWVU5TUEVDX1NZTkMpXQorKyAgIiIKKysgICJzeW5jICAgICUwIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpXQorKyAgKQorKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBUTEIgaW5zdHJ1Y3Rpb25zCisrOzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyhkZWZpbmVfaW5zbiAidGxiciIKKysgIFsgKHVuc3BlY192b2xhdGlsZSBbKGNvbnN0X2ludCAwKV0gVlVOU1BFQ19UTEJSKV0KKysgICIiCisrICAidGxiciIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKysgICkKKysKKysoZGVmaW5lX2luc24gInRsYnciCisrICBbICh1bnNwZWNfdm9sYXRpbGUgWyhjb25zdF9pbnQgMCldIFZVTlNQRUNfVExCVyldCisrICAiIgorKyAgInRsYnciCisrICBbKHNldF9hdHRyICJsZW5ndGgiICIyIildCisrICApCisrCisrKGRlZmluZV9pbnNuICJ0bGJzIgorKyAgWyAodW5zcGVjX3ZvbGF0aWxlIFsoY29uc3RfaW50IDApXSBWVU5TUEVDX1RMQlMpXQorKyAgIiIKKysgICJ0bGJzIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKyAgKQorKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBCcmVha3BvaW50IGluc3RydWN0aW9uCisrOzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyhkZWZpbmVfaW5zbiAiYnJlYWtwb2ludCIKKysgIFsgKHVuc3BlY192b2xhdGlsZSBbKGNvbnN0X2ludCAwKV0gVlVOU1BFQ19CUkVBS1BPSU5UKV0KKysgICIiCisrICAiYnJlYWtwb2ludCIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKysgICkKKysKKysKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrOzsgbXRzci9tZnNyIGluc3RydWN0aW9uCisrOzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyhkZWZpbmVfaW5zbiAibXRzciIKKysgIFsgKHVuc3BlY192b2xhdGlsZSBbKG1hdGNoX29wZXJhbmQgMCAiaW1tZWRpYXRlX29wZXJhbmQiICJpIikKKysgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKV0gVlVOU1BFQ19NVFNSKV0KKysgICIiCisrICAibXRzclx0JTAsICUxIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpXQorKyAgKQorKworKyhkZWZpbmVfaW5zbiAibWZzciIKKysgIFsgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKyAgICAgICAgICh1bnNwZWNfdm9sYXRpbGU6U0kgWyhtYXRjaF9vcGVyYW5kIDEgImltbWVkaWF0ZV9vcGVyYW5kIiAiaSIpXSBWVU5TUEVDX01GU1IpKSBdCisrICAiIgorKyAgIm1mc3JcdCUwLCAlMSIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKV0KKysgICkKKysKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrOzsgbXRkci9tZmRyIGluc3RydWN0aW9uCisrOzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyhkZWZpbmVfaW5zbiAibXRkciIKKysgIFsgKHVuc3BlY192b2xhdGlsZSBbKG1hdGNoX29wZXJhbmQgMCAiaW1tZWRpYXRlX29wZXJhbmQiICJpIikKKysgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKV0gVlVOU1BFQ19NVERSKV0KKysgICIiCisrICAibXRkclx0JTAsICUxIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpXQorKyAgKQorKworKyhkZWZpbmVfaW5zbiAibWZkciIKKysgIFsgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKyAgICAgICAgICh1bnNwZWNfdm9sYXRpbGU6U0kgWyhtYXRjaF9vcGVyYW5kIDEgImltbWVkaWF0ZV9vcGVyYW5kIiAiaSIpXSBWVU5TUEVDX01GRFIpKSBdCisrICAiIgorKyAgIm1mZHJcdCUwLCAlMSIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKV0KKysgICkKKysKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrOzsgbXVzZnIKKys7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrKGRlZmluZV9pbnNuICJtdXNmciIKKysgIFsgKHVuc3BlY192b2xhdGlsZSBbKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKV0gVlVOU1BFQ19NVVNGUildCisrICAiIgorKyAgIm11c2ZyXHQlMCIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKQorKyAgIChzZXRfYXR0ciAiY2MiICJjbG9iYmVyIildCisrICApCisrCisrKGRlZmluZV9pbnNuICJtdXN0ciIKKysgIFsgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKyAgICAgICAgICh1bnNwZWNfdm9sYXRpbGU6U0kgWyhjb25zdF9pbnQgMCldIFZVTlNQRUNfTVVTVFIpKSBdCisrICAiIgorKyAgIm11c3RyXHQlMCIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKysgICkKKysKKysoZGVmaW5lX2luc24gInNzcmYiCisrICBbICh1bnNwZWNfdm9sYXRpbGUgWyhtYXRjaF9vcGVyYW5kOlNJIDAgImltbWVkaWF0ZV9vcGVyYW5kIiAiS3UwNSIpXSBWVU5TUEVDX1NTUkYpXQorKyAgIiIKKysgICJzc3JmICAgICUwIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpCisrICAgKHNldF9hdHRyICJjYyIgImNsb2JiZXIiKV0KKysgICkKKysKKysoZGVmaW5lX2luc24gImNzcmYiCisrICBbICh1bnNwZWNfdm9sYXRpbGUgWyhtYXRjaF9vcGVyYW5kOlNJIDAgImltbWVkaWF0ZV9vcGVyYW5kIiAiS3UwNSIpXSBWVU5TUEVDX0NTUkYpXQorKyAgIiIKKysgICJjc3JmICAgICUwIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpCisrICAgKHNldF9hdHRyICJjYyIgImNsb2JiZXIiKV0KKysgICkKKysKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrOzsgRmx1c2ggUmV0dXJuIFN0YWNrIGluc3RydWN0aW9uCisrOzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyhkZWZpbmVfaW5zbiAiZnJzIgorKyAgWyAodW5zcGVjX3ZvbGF0aWxlIFsoY29uc3RfaW50IDApXSBWVU5TUEVDX0ZSUyldCisrICAiIgorKyAgImZycyIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKQorKyAgIChzZXRfYXR0ciAiY2MiICJub25lIildCisrICApCisrCisrCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKzs7IFNhdHVyYXRpb24gUm91bmQgU2NhbGUgaW5zdHJ1Y3Rpb24KKys7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrKGRlZmluZV9pbnNuICJzYXRzIgorKyAgWyAoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIrciIpCisrICAgICAgICAgKHVuc3BlYzpTSSBbKG1hdGNoX2R1cCAwKQorKyAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kIDEgImltbWVkaWF0ZV9vcGVyYW5kIiAiS3UwNSIpCisrICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQgMiAiaW1tZWRpYXRlX29wZXJhbmQiICJLdTA1IildCisrICAgICAgICAgICAgICAgICAgICBVTlNQRUNfU0FUUykpIF0KKysgICJUQVJHRVRfRFNQIgorKyAgInNhdHNcdCUwID4+ICUxLCAlMiIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJhbHVfc2F0IikKKysgICAoc2V0X2F0dHIgImxlbmd0aCIgIjQiKV0KKysgICkKKysKKysoZGVmaW5lX2luc24gInNhdHUiCisrICBbIChzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIityIikKKysgICAgICAgICAodW5zcGVjOlNJIFsobWF0Y2hfZHVwIDApCisrICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQgMSAiaW1tZWRpYXRlX29wZXJhbmQiICJLdTA1IikKKysgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZCAyICJpbW1lZGlhdGVfb3BlcmFuZCIgIkt1MDUiKV0KKysgICAgICAgICAgICAgICAgICAgIFVOU1BFQ19TQVRVKSkgXQorKyAgIlRBUkdFVF9EU1AiCisrICAic2F0dVx0JTAgPj4gJTEsICUyIgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImFsdV9zYXQiKQorKyAgIChzZXRfYXR0ciAibGVuZ3RoIiAiNCIpXQorKyAgKQorKworKyhkZWZpbmVfaW5zbiAic2F0cm5kcyIKKysgIFsgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiK3IiKQorKyAgICAgICAgICh1bnNwZWM6U0kgWyhtYXRjaF9kdXAgMCkKKysgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZCAxICJpbW1lZGlhdGVfb3BlcmFuZCIgIkt1MDUiKQorKyAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kIDIgImltbWVkaWF0ZV9vcGVyYW5kIiAiS3UwNSIpXQorKyAgICAgICAgICAgICAgICAgICAgVU5TUEVDX1NBVFJORFMpKSBdCisrICAiVEFSR0VUX0RTUCIKKysgICJzYXRybmRzXHQlMCA+PiAlMSwgJTIiCisrICBbKHNldF9hdHRyICJ0eXBlIiAiYWx1X3NhdCIpCisrICAgKHNldF9hdHRyICJsZW5ndGgiICI0IildCisrICApCisrCisrKGRlZmluZV9pbnNuICJzYXRybmR1IgorKyAgWyAoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIrciIpCisrICAgICAgICAgKHVuc3BlYzpTSSBbKG1hdGNoX2R1cCAwKQorKyAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kIDEgImltbWVkaWF0ZV9vcGVyYW5kIiAiS3UwNSIpCisrICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQgMiAiaW1tZWRpYXRlX29wZXJhbmQiICJLdTA1IildCisrICAgICAgICAgICAgICAgICAgICBVTlNQRUNfU0FUUk5EVSkpIF0KKysgICJUQVJHRVRfRFNQIgorKyAgInNhdHNcdCUwID4+ICUxLCAlMiIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJhbHVfc2F0IikKKysgICAoc2V0X2F0dHIgImxlbmd0aCIgIjQiKV0KKysgICkKKysKKys7OyBTcGVjaWFsIHBhdHRlcm5zIGZvciBkZWFsaW5nIHdpdGggdGhlIGNvbnN0YW50IHBvb2wKKysKKysoZGVmaW5lX2luc24gImFsaWduXzQiCisrICBbKHVuc3BlY192b2xhdGlsZSBbKGNvbnN0X2ludCAwKV0gVlVOU1BFQ19BTElHTildCisrICAiIgorKyAgeworKyAgIGFzc2VtYmxlX2FsaWduICgzMik7CisrICAgcmV0dXJuICIiOworKyAgfQorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKykKKysKKysoZGVmaW5lX2luc24gImNvbnN0dGFibGVfc3RhcnQiCisrICBbKHVuc3BlY192b2xhdGlsZSBbKGNvbnN0X2ludCAwKV0gVlVOU1BFQ19QT09MX1NUQVJUKV0KKysgICIiCisrICB7CisrICAgcmV0dXJuICIuY3Bvb2wiOworKyAgfQorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMCIpXQorKyAgKQorKworKyhkZWZpbmVfaW5zbiAiY29uc3R0YWJsZV9lbmQiCisrICBbKHVuc3BlY192b2xhdGlsZSBbKGNvbnN0X2ludCAwKV0gVlVOU1BFQ19QT09MX0VORCldCisrICAiIgorKyAgeworKyAgIG1ha2luZ19jb25zdF90YWJsZSA9IEZBTFNFOworKyAgIHJldHVybiAiIjsKKysgIH0KKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjAiKV0KKyspCisrCisrCisrKGRlZmluZV9pbnNuICJjb25zdHRhYmxlXzQiCisrICBbKHVuc3BlY192b2xhdGlsZSBbKG1hdGNoX29wZXJhbmQgMCAiIiAiIildIFZVTlNQRUNfUE9PTF80KV0KKysgICIiCisrICB7CisrICAgIG1ha2luZ19jb25zdF90YWJsZSA9IFRSVUU7CisrICAgIHN3aXRjaCAoR0VUX01PREVfQ0xBU1MgKEdFVF9NT0RFIChvcGVyYW5kc1swXSkpKQorKyAgICAgIHsKKysgICAgICBjYXNlIE1PREVfRkxPQVQ6CisrICAgICAgeworKyAgICAgICAgUkVBTF9WQUxVRV9UWVBFIHI7CisrICAgICAgICBjaGFyIHJlYWxfc3RyaW5nWzEwMjRdOworKyAgICAgICAgUkVBTF9WQUxVRV9GUk9NX0NPTlNUX0RPVUJMRSAociwgb3BlcmFuZHNbMF0pOworKyAgICAgICAgcmVhbF90b19kZWNpbWFsKHJlYWxfc3RyaW5nLCAmciwgMTAyNCwgMCwgMSk7CisrICAgICAgICBhc21fZnByaW50ZiAoYXNtX291dF9maWxlLCAiXHQuZmxvYXRcdCVzXG4iLCByZWFsX3N0cmluZyk7CisrICAgICAgICBicmVhazsKKysgICAgICB9CisrICAgICAgZGVmYXVsdDoKKysgICAgICAgIGFzc2VtYmxlX2ludGVnZXIgKG9wZXJhbmRzWzBdLCA0LCAwLCAxKTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgcmV0dXJuICIiOworKyAgfQorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpXQorKykKKysKKysoZGVmaW5lX2luc24gImNvbnN0dGFibGVfOCIKKysgIFsodW5zcGVjX3ZvbGF0aWxlIFsobWF0Y2hfb3BlcmFuZCAwICIiICIiKV0gVlVOU1BFQ19QT09MXzgpXQorKyAgIiIKKysgIHsKKysgICAgbWFraW5nX2NvbnN0X3RhYmxlID0gVFJVRTsKKysgICAgc3dpdGNoIChHRVRfTU9ERV9DTEFTUyAoR0VUX01PREUgKG9wZXJhbmRzWzBdKSkpCisrICAgICAgeworKyAgICAgICBjYXNlIE1PREVfRkxPQVQ6CisrICAgICAgICB7CisrICAgICAgICAgUkVBTF9WQUxVRV9UWVBFIHI7IAorKyAgICAgICAgIGNoYXIgcmVhbF9zdHJpbmdbMTAyNF07CisrICAgICAgICAgUkVBTF9WQUxVRV9GUk9NX0NPTlNUX0RPVUJMRSAociwgb3BlcmFuZHNbMF0pOworKyAgICAgICAgIHJlYWxfdG9fZGVjaW1hbChyZWFsX3N0cmluZywgJnIsIDEwMjQsIDAsIDEpOworKyAgICAgICAgIGFzbV9mcHJpbnRmIChhc21fb3V0X2ZpbGUsICJcdC5kb3VibGVcdCVzXG4iLCByZWFsX3N0cmluZyk7CisrICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgYXNzZW1ibGVfaW50ZWdlcihvcGVyYW5kc1swXSwgOCwgMCwgMSk7CisrICAgICAgICBicmVhazsKKysgICAgIH0KKysgICAgcmV0dXJuICIiOworKyAgfQorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiOCIpXQorKykKKysKKysoZGVmaW5lX2luc24gImNvbnN0dGFibGVfMTYiCisrICBbKHVuc3BlY192b2xhdGlsZSBbKG1hdGNoX29wZXJhbmQgMCAiIiAiIildIFZVTlNQRUNfUE9PTF8xNildCisrICAiIgorKyAgeworKyAgICBtYWtpbmdfY29uc3RfdGFibGUgPSBUUlVFOworKyAgICBhc3NlbWJsZV9pbnRlZ2VyKG9wZXJhbmRzWzBdLCAxNiwgMCwgMSk7CisrICAgIHJldHVybiAiIjsKKysgIH0KKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjE2IildCisrKQorKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBjb3Byb2Nlc3NvciBpbnN0cnVjdGlvbnMKKys7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrKGRlZmluZV9pbnNuICJjb3AiCisrICBbICh1bnNwZWNfdm9sYXRpbGUgWyhtYXRjaF9vcGVyYW5kIDAgImltbWVkaWF0ZV9vcGVyYW5kIiAiS3UwMyIpCisrICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kIDEgImltbWVkaWF0ZV9vcGVyYW5kIiAiS3UwNCIpCisrICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kIDIgImltbWVkaWF0ZV9vcGVyYW5kIiAiS3UwNCIpCisrICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kIDMgImltbWVkaWF0ZV9vcGVyYW5kIiAiS3UwNCIpCisrICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kIDQgImltbWVkaWF0ZV9vcGVyYW5kIiAiS3UwNyIpXSBWVU5TUEVDX0NPUCldCisrICAiIgorKyAgImNvcFx0Y3AlMCwgY3IlMSwgY3IlMiwgY3IlMywgJTQiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IildCisrICApCisrCisrKGRlZmluZV9pbnNuICJtdmNyc2kiCisrICBbIChzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAiYXZyMzJfY29wX21vdmVfb3BlcmFuZCIgIj1yLDwsWiIpCisrICAgICAgICAgKHVuc3BlY192b2xhdGlsZTpTSSBbKG1hdGNoX29wZXJhbmQgMSAiaW1tZWRpYXRlX29wZXJhbmQiICJLdTAzLEt1MDMsS3UwMyIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQgMiAiaW1tZWRpYXRlX29wZXJhbmQiICJLdTA0LEt1MDQsS3UwNCIpXQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVlVOU1BFQ19NVkNSKSkgXQorKyAgIiIKKysgICJACisrICAgbXZjci53XHRjcCUxLCAlMCwgY3IlMgorKyAgIHN0Y20ud1x0Y3AlMSwgJTAsIGNyJTIKKysgICBzdGMud1x0Y3AlMSwgJTAsIGNyJTIiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IildCisrICApCisrCisrKGRlZmluZV9pbnNuICJtdmNyZGkiCisrICBbIChzZXQgKG1hdGNoX29wZXJhbmQ6REkgMCAiYXZyMzJfY29wX21vdmVfb3BlcmFuZCIgIj1yLDwsWiIpCisrICAgICAgICAgKHVuc3BlY192b2xhdGlsZTpESSBbKG1hdGNoX29wZXJhbmQgMSAiaW1tZWRpYXRlX29wZXJhbmQiICJLdTAzLEt1MDMsS3UwMyIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQgMiAiaW1tZWRpYXRlX29wZXJhbmQiICJLdTA0LEt1MDQsS3UwNCIpXQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVlVOU1BFQ19NVkNSKSkgXQorKyAgIiIKKysgICJACisrICAgbXZjci5kXHRjcCUxLCAlMCwgY3IlMgorKyAgIHN0Y20uZFx0Y3AlMSwgJTAsIGNyJTItY3IlaTIKKysgICBzdGMuZFx0Y3AlMSwgJTAsIGNyJTIiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IildCisrICApCisrCisrKGRlZmluZV9pbnNuICJtdnJjc2kiCisrICBbICh1bnNwZWNfdm9sYXRpbGU6U0kgWyhtYXRjaF9vcGVyYW5kIDAgImltbWVkaWF0ZV9vcGVyYW5kIiAiS3UwMyxLdTAzLEt1MDMiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZCAxICJpbW1lZGlhdGVfb3BlcmFuZCIgIkt1MDQsS3UwNCxLdTA0IikKKysgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAiYXZyMzJfY29wX21vdmVfb3BlcmFuZCIgInIsPixaIildCisrICAgICAgICAgICAgICAgICAgICAgICAgVlVOU1BFQ19NVlJDKV0KKysgICIiCisrICB7CisrICAgc3dpdGNoICh3aGljaF9hbHRlcm5hdGl2ZSl7CisrICAgIGNhc2UgMDoKKysgICAgICByZXR1cm4gIm12cmMud1x0Y3AlMCwgY3IlMSwgJTIiOworKyAgICBjYXNlIDE6CisrICAgICAgcmV0dXJuICJsZGNtLndcdGNwJTAsICUyLCBjciUxIjsKKysgICAgY2FzZSAyOgorKyAgICAgIHJldHVybiAibGRjLndcdGNwJTAsIGNyJTEsICUyIjsKKysgICAgZGVmYXVsdDoKKysgICAgICBhYm9ydCgpOworKyAgIH0KKysgIH0KKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKV0KKysgICkKKysKKysoZGVmaW5lX2luc24gIm12cmNkaSIKKysgIFsgKHVuc3BlY192b2xhdGlsZTpESSBbKG1hdGNoX29wZXJhbmQgMCAiaW1tZWRpYXRlX29wZXJhbmQiICJLdTAzLEt1MDMsS3UwMyIpCisrICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kIDEgImltbWVkaWF0ZV9vcGVyYW5kIiAiS3UwNCxLdTA0LEt1MDQiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpESSAyICJhdnIzMl9jb3BfbW92ZV9vcGVyYW5kIiAiciw+LFoiKV0KKysgICAgICAgICAgICAgICAgICAgICAgICBWVU5TUEVDX01WUkMpXQorKyAgIiIKKysgIHsKKysgICBzd2l0Y2ggKHdoaWNoX2FsdGVybmF0aXZlKXsKKysgICAgY2FzZSAwOgorKyAgICAgIHJldHVybiAibXZyYy5kXHRjcCUwLCBjciUxLCAlMiI7CisrICAgIGNhc2UgMToKKysgICAgICByZXR1cm4gImxkY20uZFx0Y3AlMCwgJTIsIGNyJTEtY3IlaTEiOworKyAgICBjYXNlIDI6CisrICAgICAgcmV0dXJuICJsZGMuZFx0Y3AlMCwgY3IlMSwgJTIiOworKyAgICBkZWZhdWx0OgorKyAgICAgIGFib3J0KCk7CisrICAgfQorKyAgfQorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpXQorKyAgKQorKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBlcGlsb2d1ZQorKzs7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKys7OyBUaGlzIHBhdHRlcm4gZW1pdHMgUlRMIGZvciBleGl0IGZyb20gYSBmdW5jdGlvbi4gVGhlIGZ1bmN0aW9uIGV4aXQgaXMKKys7OyByZXNwb25zaWJsZSBmb3IgZGVhbGxvY2F0aW5nIHRoZSBzdGFjayBmcmFtZSwgcmVzdG9yaW5nIGNhbGxlZSBzYXZlZAorKzs7IHJlZ2lzdGVycyBhbmQgZW1pdHRpbmcgdGhlIHJldHVybiBpbnN0cnVjdGlvbi4KKys7OyBUb0RvOiB1c2luZyBUQVJHRVRfQVNNX0ZVTkNUSU9OX1BST0xPR1VFIGluc3RlYWQuCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyhkZWZpbmVfZXhwYW5kICJlcGlsb2d1ZSIKKysgIFsodW5zcGVjX3ZvbGF0aWxlIFsocmV0dXJuKV0gVlVOU1BFQ19FUElMT0dVRSldCisrICAiIgorKyAgIgorKyAgaWYgKFVTRV9SRVRVUk5fSU5TTiAoRkFMU0UpKXsKKysgICAgICBlbWl0X2p1bXBfaW5zbiAoZ2VuX3JldHVybiAoKSk7CisrICAgICAgRE9ORTsKKysgIH0KKysgIGVtaXRfanVtcF9pbnNuIChnZW5fcnR4X1VOU1BFQ19WT0xBVElMRSAoVk9JRG1vZGUsCisrCWdlbl9ydHZlYyAoMSwKKysJCWdlbl9ydHhfUkVUVVJOIChWT0lEbW9kZSkpLAorKwlWVU5TUEVDX0VQSUxPR1VFKSk7CisrICBET05FOworKyAgIgorKyAgKQorKworKyhkZWZpbmVfaW5zbiAiKmVwaWxvZ3VlX2luc25zIgorKyAgWyh1bnNwZWNfdm9sYXRpbGUgWyhyZXR1cm4pXSBWVU5TUEVDX0VQSUxPR1VFKV0KKysgICIiCisrICB7CisrICAgIGF2cjMyX291dHB1dF9yZXR1cm5faW5zdHJ1Y3Rpb24gKEZBTFNFLCBGQUxTRSwgTlVMTCwgTlVMTCk7CisrICAgIHJldHVybiAiIjsKKysgIH0KKysgIDsgTGVuZ3RoIGlzIGFic29sdXRlIHdvcnN0IGNhc2UKKysgIFsoc2V0X2F0dHIgInR5cGUiICJicmFuY2giKQorKyAgIChzZXRfYXR0ciAibGVuZ3RoIiAiMTIiKV0KKysgICkKKysKKysoZGVmaW5lX2luc24gIiplcGlsb2d1ZV9pbnNuc19yZXRfaW1tIgorKyAgWyhwYXJhbGxlbCBbKHNldCAocmVnIFJFVFZBTF9SRUdOVU0pIChtYXRjaF9vcGVyYW5kIDAgImltbWVkaWF0ZV9vcGVyYW5kIiAiaSIpKQorKyAgICAgICAgICAgICAgKHVzZSAocmVnIFJFVFZBTF9SRUdOVU0pKQorKyAgICAgICAgICAgICAgKHVuc3BlY192b2xhdGlsZSBbKHJldHVybildIFZVTlNQRUNfRVBJTE9HVUUpXSldCisrICAiKChJTlRWQUwob3BlcmFuZHNbMF0pID09IC0xKSB8fCAoSU5UVkFMKG9wZXJhbmRzWzBdKSA9PSAwKSB8fCAoSU5UVkFMKG9wZXJhbmRzWzBdKSA9PSAxKSkiCisrICB7CisrICAgIGF2cjMyX291dHB1dF9yZXR1cm5faW5zdHJ1Y3Rpb24gKEZBTFNFLCBGQUxTRSwgTlVMTCwgb3BlcmFuZHNbMF0pOworKyAgICByZXR1cm4gIiI7CisrICB9CisrICA7IExlbmd0aCBpcyBhYnNvbHV0ZSB3b3JzdCBjYXNlCisrICBbKHNldF9hdHRyICJ0eXBlIiAiYnJhbmNoIikKKysgICAoc2V0X2F0dHIgImxlbmd0aCIgIjEyIildCisrICApCisrCisrKGRlZmluZV9pbnNuICJzaWJjYWxsX2VwaWxvZ3VlIgorKyAgWyh1bnNwZWNfdm9sYXRpbGUgWyhjb25zdF9pbnQgMCldIFZVTlNQRUNfRVBJTE9HVUUpXQorKyAgIiIKKysgIHsKKysgICBhdnIzMl9vdXRwdXRfcmV0dXJuX2luc3RydWN0aW9uIChGQUxTRSwgRkFMU0UsICBOVUxMLCBOVUxMKTsKKysgICByZXR1cm4gIiI7CisrICB9CisrOzsgTGVuZ3RoIGlzIGFic29sdXRlIHdvcnN0IGNhc2UKKysgIFsoc2V0X2F0dHIgInR5cGUiICJicmFuY2giKQorKyAgIChzZXRfYXR0ciAibGVuZ3RoIiAiMTIiKV0KKysgICkKKysKKysoZGVmaW5lX2luc24gIipzaWJjYWxsX2VwaWxvZ3VlX2luc25zX3JldF9pbW0iCisrICBbKHBhcmFsbGVsIFsoc2V0IChyZWcgUkVUVkFMX1JFR05VTSkgKG1hdGNoX29wZXJhbmQgMCAiaW1tZWRpYXRlX29wZXJhbmQiICJpIikpCisrICAgICAgICAgICAgICAodXNlIChyZWcgUkVUVkFMX1JFR05VTSkpCisrICAgICAgICAgICAgICAodW5zcGVjX3ZvbGF0aWxlIFsoY29uc3RfaW50IDApXSBWVU5TUEVDX0VQSUxPR1VFKV0pXQorKyAgIigoSU5UVkFMKG9wZXJhbmRzWzBdKSA9PSAtMSkgfHwgKElOVFZBTChvcGVyYW5kc1swXSkgPT0gMCkgfHwgKElOVFZBTChvcGVyYW5kc1swXSkgPT0gMSkpIgorKyAgeworKyAgICBhdnIzMl9vdXRwdXRfcmV0dXJuX2luc3RydWN0aW9uIChGQUxTRSwgRkFMU0UsIE5VTEwsIG9wZXJhbmRzWzBdKTsKKysgICAgcmV0dXJuICIiOworKyAgfQorKyAgOyBMZW5ndGggaXMgYWJzb2x1dGUgd29yc3QgY2FzZQorKyAgWyhzZXRfYXR0ciAidHlwZSIgImJyYW5jaCIpCisrICAgKHNldF9hdHRyICJsZW5ndGgiICIxMiIpXQorKyAgKQorKworKyhkZWZpbmVfaW5zbiAibGR4aSIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisrCShtZW06U0kgKHBsdXM6U0kKKysgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikKKysgICAgICAgICAgICAgICAgIChtdWx0OlNJICh6ZXJvX2V4dHJhY3Q6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDgpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDMgImltbWVkaWF0ZV9vcGVyYW5kIiAiS3UwNSIpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCA0KSkpKSldCisrICAiKElOVFZBTChvcGVyYW5kc1szXSkgPT0gMjQgfHwgSU5UVkFMKG9wZXJhbmRzWzNdKSA9PSAxNiB8fCBJTlRWQUwob3BlcmFuZHNbM10pID09IDgKKysgICB8fCBJTlRWQUwob3BlcmFuZHNbM10pID09IDApIgorKyAgeworKyAgIHN3aXRjaCAoIElOVFZBTChvcGVyYW5kc1szXSkgKXsKKysgICAgY2FzZSAwOgorKyAgICAgICAgIHJldHVybiAibGQudyAgICAlMCwgJTFbJTI6YiA8PCAyXSI7CisrICAgIGNhc2UgODoKKysgICAgICAgICByZXR1cm4gImxkLncgICAgJTAsICUxWyUyOmwgPDwgMl0iOworKyAgICBjYXNlIDE2OgorKyAgICAgICAgIHJldHVybiAibGQudyAgICAlMCwgJTFbJTI6dSA8PCAyXSI7CisrICAgIGNhc2UgMjQ6CisrICAgICAgICAgcmV0dXJuICJsZC53ICAgICUwLCAlMVslMjp0IDw8IDJdIjsKKysgICAgZGVmYXVsdDoKKysgICAgICAgICBpbnRlcm5hbF9lcnJvcigiaWxsZWdhbCBvcGVyYW5kIGZvciBsZHhpIik7CisrICAgfQorKyAgfQorKyAgWyhzZXRfYXR0ciAidHlwZSIgImxvYWQiKQorKyAgIChzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJjYyIgIm5vbmUiKV0pCisrCisrCisrCisrCisrCisrCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKzs7IFBlZXBob2xlIG9wdGltaXppbmcKKys7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrOzsgQ2hhbmdpbmcKKys7OyAgIHN1YiAgICAgcjgsIHI3LCA4CisrOzsgICBzdC53ICAgIHI4WzB4MF0sIHIxMgorKzs7IHRvCisrOzsgICBzdWIgICAgIHI4LCByNywgOAorKzs7ICAgc3QudyAgICByN1stMHg4XSwgcjEyCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKzsgKHNldCAocmVnOlNJIDkgcjgpCisrOyAgICAgIChwbHVzOlNJIChyZWcvZjpTSSA2IHI3KQorKzsgICAgICAgICAgICAgICAoY29uc3RfaW50IC4uLikpKQorKzsgKHNldCAobWVtOlNJIChyZWc6U0kgOSByOCkpCisrOyAgICAgIChyZWc6U0kgMTIgcjEyKSkKKysoZGVmaW5lX3BlZXBob2xlMgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrCShwbHVzOlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKwkJIChtYXRjaF9vcGVyYW5kOlNJIDIgImltbWVkaWF0ZV9vcGVyYW5kIiAiIikpKQorKyAgIChzZXQgKG1lbTpTSSAobWF0Y2hfZHVwIDApKQorKwkobWF0Y2hfb3BlcmFuZDpTSSAzICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikpXQorKyAgIlJFR05PKG9wZXJhbmRzWzBdKSAhPSBSRUdOTyhvcGVyYW5kc1sxXSkgJiYgYXZyMzJfY29uc3Rfb2tfZm9yX2NvbnN0cmFpbnRfcChJTlRWQUwob3BlcmFuZHNbMl0pLCAnSycsIFwiS3MxNlwiKSIKKysgIFsoc2V0IChtYXRjaF9kdXAgMCkKKysJKHBsdXM6U0kgKG1hdGNoX2R1cCAxKQorKwkJIChtYXRjaF9kdXAgMikpKQorKyAgIChzZXQgKG1lbTpTSSAocGx1czpTSSAobWF0Y2hfZHVwIDEpCisrCQkJIChtYXRjaF9kdXAgMikpKQorKwkobWF0Y2hfZHVwIDMpKV0KKysgICIiKQorKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBQZWVwaG9sZSBvcHRpbWl6aW5nCisrOzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKzs7IENoYW5naW5nCisrOzsgICBzdWIgICAgIHI2LCByNywgNAorKzs7ICAgbGQudyAgICByNiwgcjZbMHgwXQorKzs7IHRvCisrOzsgICBzdWIgICAgIHI2LCByNywgNAorKzs7ICAgbGQudyAgICByNiwgcjdbLTB4NF0KKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrOyAoc2V0IChyZWc6U0kgNyByNikKKys7ICAgICAgKHBsdXM6U0kgKHJlZy9mOlNJIDYgcjcpCisrOyAgICAgICAgICAgICAgIChjb25zdF9pbnQgLTQgWzB4ZmZmZmZmZmNdKSkpCisrOyAoc2V0IChyZWc6U0kgNyByNikKKys7ICAgICAgKG1lbTpTSSAocmVnOlNJIDcgcjYpKSkKKysoZGVmaW5lX3BlZXBob2xlMgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrCShwbHVzOlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKwkJIChtYXRjaF9vcGVyYW5kOlNJIDIgImltbWVkaWF0ZV9vcGVyYW5kIiAiIikpKQorKyAgIChzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrCShtZW06U0kgKG1hdGNoX2R1cCAwKSkpXQorKyAgIlJFR05PKG9wZXJhbmRzWzBdKSAhPSBSRUdOTyhvcGVyYW5kc1sxXSkgJiYgYXZyMzJfY29uc3Rfb2tfZm9yX2NvbnN0cmFpbnRfcChJTlRWQUwob3BlcmFuZHNbMl0pLCAnSycsIFwiS3MxNlwiKSIKKysgIFsoc2V0IChtYXRjaF9kdXAgMCkKKysJKHBsdXM6U0kgKG1hdGNoX2R1cCAxKQorKwkJIChtYXRjaF9kdXAgMikpKQorKyAgIChzZXQgKG1hdGNoX2R1cCAzKQorKwkobWVtOlNJIChwbHVzOlNJIChtYXRjaF9kdXAgMSkKKysJCQkgKG1hdGNoX2R1cCAyKSkpKV0KKysgICIiKQorKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBQZWVwaG9sZSBvcHRpbWl6aW5nCisrOzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKzs7IENoYW5naW5nCisrOzsgICBsZC5zYiAgIHIwLCByN1stMHg2XQorKzs7ICAgY2FzaHMuYiByMAorKzs7IHRvCisrOzsgICBsZC5zYiAgIHIwLCByN1stMHg2XQorKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysoZGVmaW5lX3BlZXBob2xlMgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6UUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrCShtYXRjaF9vcGVyYW5kOlFJIDEgImxvYWRfc2JfbWVtb3J5X29wZXJhbmQiICIiKSkKKysgICAoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKwkoc2lnbl9leHRlbmQ6U0kgKG1hdGNoX2R1cCAwKSkpXQorKyAgIihSRUdOTyhvcGVyYW5kc1swXSkgPT0gUkVHTk8ob3BlcmFuZHNbMl0pIHx8IHBlZXAyX3JlZ19kZWFkX3AoMiwgb3BlcmFuZHNbMF0pKSIKKysgIFsoc2V0IChtYXRjaF9kdXAgMikKKysJKHNpZ25fZXh0ZW5kOlNJIChtYXRjaF9kdXAgMSkpKV0KKysgICIiKQorKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBQZWVwaG9sZSBvcHRpbWl6aW5nCisrOzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKzs7IENoYW5naW5nCisrOzsgICBsZC51YiAgIHIwLCByN1stMHg2XQorKzs7ICAgY2FzaHUuYiByMAorKzs7IHRvCisrOzsgICBsZC51YiAgIHIwLCByN1stMHg2XQorKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysoZGVmaW5lX3BlZXBob2xlMgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6UUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrCShtYXRjaF9vcGVyYW5kOlFJIDEgIm1lbW9yeV9vcGVyYW5kIiAiIikpCisrICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysJKHplcm9fZXh0ZW5kOlNJIChtYXRjaF9kdXAgMCkpKV0KKysgICIoUkVHTk8ob3BlcmFuZHNbMF0pID09IFJFR05PKG9wZXJhbmRzWzJdKSkgfHwgcGVlcDJfcmVnX2RlYWRfcCgyLCBvcGVyYW5kc1swXSkiCisrICBbKHNldCAobWF0Y2hfZHVwIDIpCisrCSh6ZXJvX2V4dGVuZDpTSSAobWF0Y2hfZHVwIDEpKSldCisrICAiIikKKysKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrOzsgUGVlcGhvbGUgb3B0aW1pemluZworKzs7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKys7OyBDaGFuZ2luZworKzs7ICAgbGQuc2ggICByMCwgcjdbLTB4Nl0KKys7OyAgIGNhc3RzLmggcjAKKys7OyB0bworKzs7ICAgbGQuc2ggICByMCwgcjdbLTB4Nl0KKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrKGRlZmluZV9wZWVwaG9sZTIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKwkobWF0Y2hfb3BlcmFuZDpISSAxICJtZW1vcnlfb3BlcmFuZCIgIiIpKQorKyAgIChzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrCShzaWduX2V4dGVuZDpTSSAobWF0Y2hfZHVwIDApKSldCisrICAiKFJFR05PKG9wZXJhbmRzWzBdKSA9PSBSRUdOTyhvcGVyYW5kc1syXSkpIHx8IHBlZXAyX3JlZ19kZWFkX3AoMiwgb3BlcmFuZHNbMF0pIgorKyAgWyhzZXQgKG1hdGNoX2R1cCAyKQorKwkoc2lnbl9leHRlbmQ6U0kgKG1hdGNoX2R1cCAxKSkpXQorKyAgIiIpCisrCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKzs7IFBlZXBob2xlIG9wdGltaXppbmcKKys7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrOzsgQ2hhbmdpbmcKKys7OyAgIGxkLnVoICAgcjAsIHI3Wy0weDZdCisrOzsgICBjYXN0dS5oIHIwCisrOzsgdG8KKys7OyAgIGxkLnVoICAgcjAsIHI3Wy0weDZdCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyhkZWZpbmVfcGVlcGhvbGUyCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysJKG1hdGNoX29wZXJhbmQ6SEkgMSAibWVtb3J5X29wZXJhbmQiICIiKSkKKysgICAoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKwkoemVyb19leHRlbmQ6U0kgKG1hdGNoX2R1cCAwKSkpXQorKyAgIihSRUdOTyhvcGVyYW5kc1swXSkgPT0gUkVHTk8ob3BlcmFuZHNbMl0pKSB8fCBwZWVwMl9yZWdfZGVhZF9wKDIsIG9wZXJhbmRzWzBdKSIKKysgIFsoc2V0IChtYXRjaF9kdXAgMikKKysJKHplcm9fZXh0ZW5kOlNJIChtYXRjaF9kdXAgMSkpKV0KKysgICIiKQorKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBQZWVwaG9sZSBvcHRpbWl6aW5nCisrOzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKzs7IENoYW5naW5nCisrOzsgICBtdWwgICAgIHJkLCByeCwgcnkKKys7OyAgIGFkZCAgICAgcmQyLCByZCAgCisrOzsgb3IKKys7OyAgIGFkZCAgICAgcmQyLCByZCwgcmQyICAKKys7OyB0bworKzs7ICAgbWFjICAgICByZDIsIHJ4LCByeQorKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysoZGVmaW5lX3BlZXBob2xlMgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrICAgICAgICAobXVsdDpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpKSkKKysgICAoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDMgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKyAgICAgICAgKHBsdXM6U0kgKG1hdGNoX2R1cCAzKQorKyAgICAgICAgICAgICAgICAgKG1hdGNoX2R1cCAwKSkpXQorKyAgInBlZXAyX3JlZ19kZWFkX3AoMiwgb3BlcmFuZHNbMF0pIgorKyAgWyhzZXQgKG1hdGNoX2R1cCAzKQorKwkocGx1czpTSSAobXVsdDpTSSAobWF0Y2hfZHVwIDEpCisrCQkJICAobWF0Y2hfZHVwIDIpKQorKwkJIChtYXRjaF9kdXAgMykpKV0KKysgICIiKQorKworKyhkZWZpbmVfcGVlcGhvbGUyCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysgICAgICAgIChtdWx0OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKyAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikpKQorKyAgIChzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrICAgICAgICAocGx1czpTSSAobWF0Y2hfZHVwIDApCisrICAgICAgICAgICAgICAgICAobWF0Y2hfZHVwIDMpKSldCisrICAicGVlcDJfcmVnX2RlYWRfcCgyLCBvcGVyYW5kc1swXSkiCisrICBbKHNldCAobWF0Y2hfZHVwIDMpCisrCShwbHVzOlNJIChtdWx0OlNJIChtYXRjaF9kdXAgMSkKKysJCQkgIChtYXRjaF9kdXAgMikpCisrCQkgKG1hdGNoX2R1cCAzKSkpXQorKyAgIiIpCisrCisrCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKzs7IFBlZXBob2xlIG9wdGltaXppbmcKKys7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrOzsgQ2hhbmdpbmcKKys7OyAgIGJmZXh0dSAgcmQsIHJzLCBrNSwgMSBvciBhbmQoaC9sKSByZCwgb25lX2JpdF9zZXRfbWFzaworKzs7IHRvCisrOzsgICBibGQgICAgIHJzLCBrNQorKzs7CisrOzsgSWYgcmQgaXMgZGVhZCBhZnRlciB0aGUgb3BlcmF0aW9uLgorKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysoZGVmaW5lX3BlZXBob2xlMgorKyAgWyAoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKyAgICAgICAgICh6ZXJvX2V4dHJhY3Q6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDEpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJpbW1lZGlhdGVfb3BlcmFuZCIgIiIpKSkKKysgICAgKHNldCAoY2MwKQorKyAgICAgICAgIChtYXRjaF9kdXAgMCkpXQorKyAgInBlZXAyX3JlZ19kZWFkX3AoMiwgb3BlcmFuZHNbMF0pIgorKyAgWyhzZXQgKGNjMCkKKysgICAgICAgIChhbmQ6U0kgKG1hdGNoX2R1cCAxKQorKyAgICAgICAgICAgICAgICAobWF0Y2hfZHVwIDIpKSldCisrICAib3BlcmFuZHNbMl0gPSBHRU5fSU5UKDEgPDwgSU5UVkFMKG9wZXJhbmRzWzJdKSk7IikKKysKKysoZGVmaW5lX3BlZXBob2xlMgorKyAgWyAoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKyAgICAgICAgIChhbmQ6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJvbmVfYml0X3NldF9vcGVyYW5kIiAiIikpKQorKyAgICAoc2V0IChjYzApCisrICAgICAgICAgKG1hdGNoX2R1cCAwKSldCisrICAicGVlcDJfcmVnX2RlYWRfcCgyLCBvcGVyYW5kc1swXSkiCisrICBbKHNldCAoY2MwKQorKyAgICAgICAgKGFuZDpTSSAobWF0Y2hfZHVwIDEpCisrICAgICAgICAgICAgICAgIChtYXRjaF9kdXAgMikpKV0KKysgICIiKQorKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBQZWVwaG9sZSBvcHRpbWl6aW5nCisrOzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKzs7IExvYWQgd2l0aCBleHRyYWN0ZWQgaW5kZXg6IGxkLncgIFJkLCBSYltSaTp7dC91L2IvbH0gPDwgMl0KKys7OworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysKKysKKysoZGVmaW5lX3BlZXBob2xlCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysgICAgICAgICh6ZXJvX2V4dHJhY3Q6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgOCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAiYXZyMzJfZXh0cmFjdF9zaGlmdF9vcGVyYW5kIiAiIikpKQorKyAgIChzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrICAgICAgICAobWVtOlNJIChwbHVzOlNJIChtdWx0OlNJIChtYXRjaF9kdXAgMCkgKGNvbnN0X2ludCA0KSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgNCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpKSkpXQorKworKyAgIihkZWFkX29yX3NldF9wKGluc24sIG9wZXJhbmRzWzBdKSkiCisrICB7CisrICAgc3dpdGNoICggSU5UVkFMKG9wZXJhbmRzWzJdKSApeworKyAgICBjYXNlIDA6CisrICAgICAgICAgcmV0dXJuICJsZC53ICAgICUzLCAlNFslMTpiIDw8IDJdIjsKKysgICAgY2FzZSA4OgorKyAgICAgICAgIHJldHVybiAibGQudyAgICAlMywgJTRbJTE6bCA8PCAyXSI7CisrICAgIGNhc2UgMTY6CisrICAgICAgICAgcmV0dXJuICJsZC53ICAgICUzLCAlNFslMTp1IDw8IDJdIjsKKysgICAgY2FzZSAyNDoKKysgICAgICAgICByZXR1cm4gImxkLncgICAgJTMsICU0WyUxOnQgPDwgMl0iOworKyAgICBkZWZhdWx0OgorKyAgICAgICAgIGludGVybmFsX2Vycm9yKCJpbGxlZ2FsIG9wZXJhbmQgZm9yIGxkeGkiKTsKKysgICB9CisrICB9CisrICBbKHNldF9hdHRyICJ0eXBlIiAibG9hZCIpCisrICAgKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgImNjIiAiY2xvYmJlciIpXQorKyAgKQorKworKworKworKyhkZWZpbmVfcGVlcGhvbGUKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKyAgICAgICAgKGFuZDpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikgKGNvbnN0X2ludCAyNTUpKSkKKysgICAoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKyAgICAgICAgKG1lbTpTSSAocGx1czpTSSAobXVsdDpTSSAobWF0Y2hfZHVwIDApIChjb25zdF9pbnQgNCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDMgInJlZ2lzdGVyX29wZXJhbmQiICIiKSkpKV0KKysKKysgICIoZGVhZF9vcl9zZXRfcChpbnNuLCBvcGVyYW5kc1swXSkpIgorKworKyAgImxkLncgICAgJTIsICUzWyUxOmIgPDwgMl0iCisrICBbKHNldF9hdHRyICJ0eXBlIiAibG9hZCIpCisrICAgKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgImNjIiAiY2xvYmJlciIpXQorKyAgKQorKworKworKyhkZWZpbmVfcGVlcGhvbGUyCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysgICAgICAgICh6ZXJvX2V4dHJhY3Q6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgOCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAiYXZyMzJfZXh0cmFjdF9zaGlmdF9vcGVyYW5kIiAiIikpKQorKyAgIChzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrICAgICAgICAobWVtOlNJIChwbHVzOlNJIChtdWx0OlNJIChtYXRjaF9kdXAgMCkgKGNvbnN0X2ludCA0KSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgNCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpKSkpXQorKworKyAgIihwZWVwMl9yZWdfZGVhZF9wKDIsIG9wZXJhbmRzWzBdKSkKKysgICB8fCAoUkVHTk8ob3BlcmFuZHNbMF0pID09IFJFR05PKG9wZXJhbmRzWzNdKSkiCisrICBbKHNldCAobWF0Y2hfZHVwIDMpCisrCShtZW06U0kgKHBsdXM6U0kKKysgICAgICAgICAgICAgICAgIChtYXRjaF9kdXAgNCkKKysgICAgICAgICAgICAgICAgIChtdWx0OlNJICh6ZXJvX2V4dHJhY3Q6U0kgKG1hdGNoX2R1cCAxKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDgpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9kdXAgMikpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDQpKSkpKV0KKysgICkKKysKKysoZGVmaW5lX3BlZXBob2xlMgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrICAgICAgICAoemVyb19leHRlbmQ6U0kgKG1hdGNoX29wZXJhbmQ6UUkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpKSkKKysgICAoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKyAgICAgICAgKG1lbTpTSSAocGx1czpTSSAobXVsdDpTSSAobWF0Y2hfZHVwIDApIChjb25zdF9pbnQgNCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDMgInJlZ2lzdGVyX29wZXJhbmQiICIiKSkpKV0KKysKKysgICIocGVlcDJfcmVnX2RlYWRfcCgyLCBvcGVyYW5kc1swXSkpCisrICAgfHwgKFJFR05PKG9wZXJhbmRzWzBdKSA9PSBSRUdOTyhvcGVyYW5kc1syXSkpIgorKyAgWyhzZXQgKG1hdGNoX2R1cCAyKQorKwkobWVtOlNJIChwbHVzOlNJCisrICAgICAgICAgICAgICAgICAobWF0Y2hfZHVwIDMpCisrICAgICAgICAgICAgICAgICAobXVsdDpTSSAoemVyb19leHRyYWN0OlNJIChtYXRjaF9kdXAgMSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCA4KQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCA0KSkpKSldCisrICAib3BlcmFuZHNbMV0gPSBnZW5fcnR4X1JFRyhTSW1vZGUsIFJFR05PKG9wZXJhbmRzWzFdKSk7IgorKyAgKQorKworKworKyhkZWZpbmVfcGVlcGhvbGUyCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysgICAgICAgIChhbmQ6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMjU1KSkpCisrICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysgICAgICAgIChtZW06U0kgKHBsdXM6U0kgKG11bHQ6U0kgKG1hdGNoX2R1cCAwKSAoY29uc3RfaW50IDQpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAzICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikpKSldCisrCisrICAiKHBlZXAyX3JlZ19kZWFkX3AoMiwgb3BlcmFuZHNbMF0pKQorKyAgIHx8IChSRUdOTyhvcGVyYW5kc1swXSkgPT0gUkVHTk8ob3BlcmFuZHNbMl0pKSIKKysgIFsoc2V0IChtYXRjaF9kdXAgMikKKysJKG1lbTpTSSAocGx1czpTSQorKyAgICAgICAgICAgICAgICAgKG1hdGNoX2R1cCAzKQorKyAgICAgICAgICAgICAgICAgKG11bHQ6U0kgKHplcm9fZXh0cmFjdDpTSSAobWF0Y2hfZHVwIDEpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgOCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAwKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgNCkpKSkpXQorKyAgIiIKKysgICkKKysKKysKKysKKysoZGVmaW5lX3BlZXBob2xlMgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrICAgICAgICAobHNoaWZ0cnQ6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAyNCkpKQorKyAgIChzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrICAgICAgICAobWVtOlNJIChwbHVzOlNJIChtdWx0OlNJIChtYXRjaF9kdXAgMCkgKGNvbnN0X2ludCA0KSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpKSkpXQorKworKyAgIihwZWVwMl9yZWdfZGVhZF9wKDIsIG9wZXJhbmRzWzBdKSkKKysgICB8fCAoUkVHTk8ob3BlcmFuZHNbMF0pID09IFJFR05PKG9wZXJhbmRzWzJdKSkiCisrICBbKHNldCAobWF0Y2hfZHVwIDIpCisrCShtZW06U0kgKHBsdXM6U0kKKysgICAgICAgICAgICAgICAgIChtYXRjaF9kdXAgMykKKysgICAgICAgICAgICAgICAgIChtdWx0OlNJICh6ZXJvX2V4dHJhY3Q6U0kgKG1hdGNoX2R1cCAxKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDgpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMjQpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCA0KSkpKSldCisrICAiIgorKyAgKQorKworKworKzs7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisrOzsgQU5ETgorKzs7CisrOzsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysKKysKKysoZGVmaW5lX3BlZXBob2xlMgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrICAgICAgICAobm90OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIiKSkpCisrICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysgICAgICAgIChhbmQ6U0kgKG1hdGNoX2R1cCAyKQorKyAgICAgICAgICAgICAgICAobWF0Y2hfZHVwIDApKSldCisrICAicGVlcDJfcmVnX2RlYWRfcCgyLCBvcGVyYW5kc1swXSkiCisrCisrICBbKHNldCAobWF0Y2hfZHVwIDIpCisrICAgICAgICAoYW5kOlNJICAobWF0Y2hfZHVwIDIpCisrICAgICAgICAgICAgICAgICAobm90OlNJIChtYXRjaF9kdXAgMSkpCisrICAgICAgICAgICAgICAgICApKV0KKysgICIiCisrKQorKworKyhkZWZpbmVfcGVlcGhvbGUyCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysgICAgICAgIChub3Q6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpKSkKKysgICAoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKyAgICAgICAgKGFuZDpTSSAobWF0Y2hfZHVwIDApCisrICAgICAgICAgICAgICAgIChtYXRjaF9kdXAgMikKKysgICAgICAgICAgICAgICAgKSldCisrICAicGVlcDJfcmVnX2RlYWRfcCgyLCBvcGVyYW5kc1swXSkiCisrCisrICBbKHNldCAobWF0Y2hfZHVwIDIpCisrICAgICAgICAoYW5kOlNJICAobWF0Y2hfZHVwIDIpCisrICAgICAgICAgICAgICAgICAobm90OlNJIChtYXRjaF9kdXAgMSkpCisrICAgICAgICAgICAgICAgICApKV0KKysKKysgICIiCisrKQorKworKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBBZGRhYnMgcGVlcGhvbGUKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrCisrKGRlZmluZV9wZWVwaG9sZQorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysgCShhYnM6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpCisrICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKyAJKHBsdXM6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQorKyAJCSAobWF0Y2hfZHVwIDIpKSldCisrICAiZGVhZF9vcl9zZXRfcChpbnNuLCBvcGVyYW5kc1syXSkiCisrICAiYWRkYWJzICAlMCwgJTMsICUxIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJjYyIgInNldF96IildKQorKworKyhkZWZpbmVfcGVlcGhvbGUKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisrIAkoYWJzOlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKQorKyAgIChzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysgCShwbHVzOlNJIChtYXRjaF9kdXAgMikKKysgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDMgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKV0KKysgICJkZWFkX29yX3NldF9wKGluc24sIG9wZXJhbmRzWzJdKSIKKysgICJhZGRhYnMgICUwLCAlMywgJTEiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgImNjIiAic2V0X3oiKV0pCisrCisrCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKzs7IERldGVjdCByb3VuZGluZ3MKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrCisrKGRlZmluZV9pbnNuICIqcm91bmQiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiK3IiKQorKyAgICAgICAgKGFzaGlmdHJ0OlNJIChwbHVzOlNJIChtYXRjaF9kdXAgMCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAxICJpbW1lZGlhdGVfb3BlcmFuZCIgImkiKSkKKysgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJpbW1lZGlhdGVfb3BlcmFuZCIgImkiKSkpXQorKyAgImF2cjMyX3JuZF9vcGVyYW5kcyhvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pIgorKworKyAgInNhdHJuZHMgICAgJTAgPj4gJTIsIDMxIgorKworKyAgWyhzZXRfYXR0ciAidHlwZSIgImFsdV9zYXQiKQorKyAgIChzZXRfYXR0ciAibGVuZ3RoIiAiNCIpXQorKworKyAgKQorKworKworKyhkZWZpbmVfcGVlcGhvbGUyCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysJKHBsdXM6U0kgKG1hdGNoX2R1cCAwKQorKyAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMSAiaW1tZWRpYXRlX29wZXJhbmQiICIiKSkpCisrICAgKHNldCAobWF0Y2hfZHVwIDApCisrCShhc2hpZnRydDpTSSAobWF0Y2hfZHVwIDApCisrICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAiaW1tZWRpYXRlX29wZXJhbmQiICIiKSkpXQorKyAgImF2cjMyX3JuZF9vcGVyYW5kcyhvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pIgorKworKyAgWyhzZXQgKG1hdGNoX2R1cCAwKQorKyAgICAgICAgKGFzaGlmdHJ0OlNJIChwbHVzOlNJIChtYXRjaF9kdXAgMCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfZHVwIDEpKQorKyAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9kdXAgMikpKV0KKysgICkKKysKKysoZGVmaW5lX3BlZXBob2xlCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCisrCShwbHVzOlNJIChtYXRjaF9kdXAgMCkKKysgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDEgImltbWVkaWF0ZV9vcGVyYW5kIiAiaSIpKSkKKysgICAoc2V0IChtYXRjaF9kdXAgMCkKKysJKGFzaGlmdHJ0OlNJIChtYXRjaF9kdXAgMCkKKysgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJpbW1lZGlhdGVfb3BlcmFuZCIgImkiKSkpXQorKyAgImF2cjMyX3JuZF9vcGVyYW5kcyhvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pIgorKworKyAgInNhdHJuZHMgICAgJTAgPj4gJTIsIDMxIgorKworKyAgWyhzZXRfYXR0ciAidHlwZSIgImFsdV9zYXQiKQorKyAgIChzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJjYyIgImNsb2JiZXIiKV0KKysKKysgICkKKysKKysKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrOzsgbWNhbGwKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrKGRlZmluZV9wZWVwaG9sZQorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgICIiKQorKwkobWF0Y2hfb3BlcmFuZCAxICJhdnIzMl9jb25zdF9wb29sX3JlZl9vcGVyYW5kIiAgIiIpKQorKyAgIChwYXJhbGxlbCBbKGNhbGwgKG1lbTpTSSAobWF0Y2hfZHVwIDApKQorKyAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQgMiAiIiAiIikpCisrICAgICAgICAgICAgICAoY2xvYmJlciAocmVnOlNJIExSX1JFR05VTSkpXSldCisrICAiZGVhZF9vcl9zZXRfcChpbnNuLCBvcGVyYW5kc1swXSkiCisrICAibWNhbGwgICAgJTEiCisrICBbKHNldF9hdHRyICJ0eXBlIiAiY2FsbCIpCisrICAgKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgImNjIiAiY2xvYmJlciIpXQorKykKKysKKysoZGVmaW5lX3BlZXBob2xlCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAgICAgIiIpCisrCShtYXRjaF9vcGVyYW5kIDEgImF2cjMyX2NvbnN0X3Bvb2xfcmVmX29wZXJhbmQiICAiIikpCisrICAgKHBhcmFsbGVsIFsoc2V0IChtYXRjaF9vcGVyYW5kIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKyAgICAgICAgICAgICAgICAgICAoY2FsbCAobWVtOlNJIChtYXRjaF9kdXAgMikpCisrICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kIDMgIiIgIiIpKSkKKysgICAgICAgICAgICAgIChjbG9iYmVyIChyZWc6U0kgTFJfUkVHTlVNKSldKV0KKysgICJkZWFkX29yX3NldF9wKGluc24sIG9wZXJhbmRzWzJdKSIKKysgICJtY2FsbCAgICAlMSIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjYWxsIikKKysgICAoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAiY2MiICJjYWxsX3NldCIpXQorKykKKysKKysKKysoZGVmaW5lX3BlZXBob2xlMgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgIiIpCisrCShtYXRjaF9vcGVyYW5kIDEgImF2cjMyX2NvbnN0X3Bvb2xfcmVmX29wZXJhbmQiICAiIikpCisrICAgKHBhcmFsbGVsIFsoY2FsbCAobWVtOlNJIChtYXRjaF9kdXAgMCkpCisrICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZCAyICIiICIiKSkKKysgICAgICAgICAgICAgIChjbG9iYmVyIChyZWc6U0kgTFJfUkVHTlVNKSldKV0KKysgICJwZWVwMl9yZWdfZGVhZF9wKDIsIG9wZXJhbmRzWzBdKSIKKysgIFsocGFyYWxsZWwgWyhjYWxsIChtZW06U0kgKG1hdGNoX2R1cCAxKSkKKysgICAgICAgICAgICAgICAgICAgIChtYXRjaF9kdXAgMikpCisrICAgICAgICAgICAgICAoY2xvYmJlciAocmVnOlNJIExSX1JFR05VTSkpXSldCisrICAiIgorKykKKysKKysoZGVmaW5lX3BlZXBob2xlMgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgICIiKQorKwkobWF0Y2hfb3BlcmFuZCAxICJhdnIzMl9jb25zdF9wb29sX3JlZl9vcGVyYW5kIiAgIiIpKQorKyAgIChwYXJhbGxlbCBbKHNldCAobWF0Y2hfb3BlcmFuZCAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysgICAgICAgICAgICAgICAgICAgKGNhbGwgKG1lbTpTSSAobWF0Y2hfZHVwIDApKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZCAzICIiICIiKSkpCisrICAgICAgICAgICAgICAoY2xvYmJlciAocmVnOlNJIExSX1JFR05VTSkpXSldCisrICAiKHBlZXAyX3JlZ19kZWFkX3AoMiwgb3BlcmFuZHNbMF0pIHx8IChSRUdOTyhvcGVyYW5kc1syXSkgPT0gUkVHTk8ob3BlcmFuZHNbMF0pKSkiCisrICBbKHBhcmFsbGVsIFsoc2V0IChtYXRjaF9kdXAgMikKKysgICAgICAgICAgICAgICAgICAgKGNhbGwgKG1lbTpTSSAobWF0Y2hfZHVwIDEpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfZHVwIDMpKSkKKysgICAgICAgICAgICAgIChjbG9iYmVyIChyZWc6U0kgTFJfUkVHTlVNKSldKV0KKysgICIiCisrKQorKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBSZXR1cm5pbmcgYSB2YWx1ZQorKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysKKysKKysoZGVmaW5lX3BlZXBob2xlCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZCAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysgICAgICAgIChtYXRjaF9vcGVyYW5kIDEgInJlZ2lzdGVyX29wZXJhbmQiICIiKSkKKysgICAocmV0dXJuKV0KKysgICJVU0VfUkVUVVJOX0lOU04gKFRSVUUpICYmIChSRUdOTyhvcGVyYW5kc1swXSkgPT0gUkVUVkFMX1JFR05VTSkKKysgICAmJiAoUkVHTk8ob3BlcmFuZHNbMV0pICE9IExSX1JFR05VTSkKKysgICAmJiAoUkVHTk9fUkVHX0NMQVNTKFJFR05PKG9wZXJhbmRzWzFdKSkgPT0gR0VORVJBTF9SRUdTKSIKKysgICJyZXRhbCAgICAlMSIKKysgIFsoc2V0X2F0dHIgInR5cGUiICJjYWxsIikKKysgICAoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKysgICkKKysKKysKKysoZGVmaW5lX3BlZXBob2xlCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZCAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCisrICAgICAgICAobWF0Y2hfb3BlcmFuZCAxICJpbW1lZGlhdGVfb3BlcmFuZCIgImkiKSkKKysgICAocmV0dXJuKV0KKysgICIoVVNFX1JFVFVSTl9JTlNOIChGQUxTRSkgJiYgKFJFR05PKG9wZXJhbmRzWzBdKSA9PSBSRVRWQUxfUkVHTlVNKSAmJgorKyAgICgoSU5UVkFMKG9wZXJhbmRzWzFdKSA9PSAtMSkgfHwgKElOVFZBTChvcGVyYW5kc1sxXSkgPT0gMCkgfHwgKElOVFZBTChvcGVyYW5kc1sxXSkgPT0gMSkpKSIKKysgIHsKKysgICAgYXZyMzJfb3V0cHV0X3JldHVybl9pbnN0cnVjdGlvbiAoVFJVRSwgRkFMU0UsIE5VTEwsIG9wZXJhbmRzWzFdKTsKKysgICAgcmV0dXJuICIiOworKyAgfQorKyAgWyhzZXRfYXR0ciAidHlwZSIgImNhbGwiKQorKyAgIChzZXRfYXR0ciAibGVuZ3RoIiAiNCIpXQorKyAgKQorKworKyhkZWZpbmVfcGVlcGhvbGUKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kIDAgInJlZ2lzdGVyX29wZXJhbmQiICJyIikKKysgICAgICAgIChtYXRjaF9vcGVyYW5kIDEgImltbWVkaWF0ZV9vcGVyYW5kIiAiaSIpKQorKyAgICh1bnNwZWNfdm9sYXRpbGUgWyhyZXR1cm4pXSBWVU5TUEVDX0VQSUxPR1VFKV0KKysgICIoUkVHTk8ob3BlcmFuZHNbMF0pID09IFJFVFZBTF9SRUdOVU0pICYmCisrICAgKChJTlRWQUwob3BlcmFuZHNbMV0pID09IC0xKSB8fCAoSU5UVkFMKG9wZXJhbmRzWzFdKSA9PSAwKSB8fCAoSU5UVkFMKG9wZXJhbmRzWzFdKSA9PSAxKSkiCisrICB7CisrICAgIGF2cjMyX291dHB1dF9yZXR1cm5faW5zdHJ1Y3Rpb24gKEZBTFNFLCBGQUxTRSwgTlVMTCwgb3BlcmFuZHNbMV0pOworKyAgICByZXR1cm4gIiI7CisrICB9CisrICA7IExlbmd0aCBpcyBhYnNvbHV0ZSB3b3JzdCBjYXNlCisrICBbKHNldF9hdHRyICJ0eXBlIiAiYnJhbmNoIikKKysgICAoc2V0X2F0dHIgImxlbmd0aCIgIjEyIildCisrICApCisrCisrKGRlZmluZV9wZWVwaG9sZQorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysgICAgICAgIChpZl90aGVuX2Vsc2UgKG1hdGNoX29wZXJhdG9yIDEgImF2cjMyX2NvbXBhcmlzb25fb3BlcmF0b3IiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG1hdGNoX29wZXJhbmQgNCAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kIDUgInJlZ2lzdGVyX2ltbWVkaWF0ZV9vcGVyYW5kIiAicktzMjEiKV0pCisrICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kIDIgImF2cjMyX2NvbmRfcmVnaXN0ZXJfaW1tZWRpYXRlX29wZXJhbmQiICJyS3MwOCIpCisrICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kIDMgImF2cjMyX2NvbmRfcmVnaXN0ZXJfaW1tZWRpYXRlX29wZXJhbmQiICJyS3MwOCIpKSkKKysgICAocmV0dXJuKV0KKysgICJVU0VfUkVUVVJOX0lOU04gKFRSVUUpICYmIChSRUdOTyhvcGVyYW5kc1swXSkgPT0gUkVUVkFMX1JFR05VTSkiCisrICB7CisrICAgb3BlcmFuZHNbMV0gPSBhdnIzMl9vdXRwdXRfY21wKG9wZXJhbmRzWzFdLCBHRVRfTU9ERShvcGVyYW5kc1s0XSksIG9wZXJhbmRzWzRdLCBvcGVyYW5kc1s1XSk7CisrCisrICAgaWYgKCBHRVRfQ09ERShvcGVyYW5kc1syXSkgPT0gUkVHCisrICAgICAgICAmJiBHRVRfQ09ERShvcGVyYW5kc1szXSkgPT0gUkVHCisrICAgICAgICAmJiBSRUdOTyhvcGVyYW5kc1syXSkgIT0gTFJfUkVHTlVNCisrICAgICAgICAmJiBSRUdOTyhvcGVyYW5kc1szXSkgIT0gTFJfUkVHTlVNICl7CisrICAgICAgcmV0dXJuICJyZXQlMSAgICAlMlw7cmV0JWkxICAgICUzIjsKKysgICB9IGVsc2UgaWYgKCBHRVRfQ09ERShvcGVyYW5kc1syXSkgPT0gUkVHCisrICAgICAgICAgICAgICAgJiYgR0VUX0NPREUob3BlcmFuZHNbM10pID09IENPTlNUX0lOVCApeworKyAgICAgIGlmICggSU5UVkFMKG9wZXJhbmRzWzNdKSA9PSAtMQorKyAgICAgICAgICAgfHwgSU5UVkFMKG9wZXJhbmRzWzNdKSA9PSAwCisrICAgICAgICAgICB8fCBJTlRWQUwob3BlcmFuZHNbM10pID09IDEgKXsKKysgICAgICAgIHJldHVybiAicmV0JTEgICAgJTJcO3JldCVpMSAgICAlZDMiOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICByZXR1cm4gIm1vdiUxICAgIHIxMiwgJTJcO21vdiVpMSAgICByMTIsICUzXDtyZXRhbCAgICByMTIiOworKyAgICAgIH0KKysgICB9IGVsc2UgaWYgKCBHRVRfQ09ERShvcGVyYW5kc1syXSkgPT0gQ09OU1RfSU5UCisrICAgICAgICAgICAgICAgJiYgR0VUX0NPREUob3BlcmFuZHNbM10pID09IFJFRyApeworKyAgICAgIGlmICggSU5UVkFMKG9wZXJhbmRzWzJdKSA9PSAtMQorKyAgICAgICAgICAgfHwgSU5UVkFMKG9wZXJhbmRzWzJdKSA9PSAwCisrICAgICAgICAgICB8fCBJTlRWQUwob3BlcmFuZHNbMl0pID09IDEgKXsKKysgICAgICAgIHJldHVybiAicmV0JTEgICAgJWQyXDtyZXQlaTEgICAgJTMiOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICByZXR1cm4gIm1vdiUxICAgIHIxMiwgJTJcO21vdiVpMSAgICByMTIsICUzXDtyZXRhbCAgICByMTIiOworKyAgICAgIH0KKysgICB9IGVsc2UgeworKyAgICAgIGlmICggKElOVFZBTChvcGVyYW5kc1syXSkgPT0gLTEKKysgICAgICAgICAgICB8fCBJTlRWQUwob3BlcmFuZHNbMl0pID09IDAKKysgICAgICAgICAgICB8fCBJTlRWQUwob3BlcmFuZHNbMl0pID09IDEgKQorKyAgICAgICAgICAgJiYgKElOVFZBTChvcGVyYW5kc1szXSkgPT0gLTEKKysgICAgICAgICAgICAgICB8fCBJTlRWQUwob3BlcmFuZHNbM10pID09IDAKKysgICAgICAgICAgICAgICB8fCBJTlRWQUwob3BlcmFuZHNbM10pID09IDEgKSl7CisrICAgICAgICByZXR1cm4gInJldCUxICAgICVkMlw7cmV0JWkxICAgICVkMyI7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIHJldHVybiAibW92JTEgICAgcjEyLCAlMlw7bW92JWkxICAgIHIxMiwgJTNcO3JldGFsICAgIHIxMiI7CisrICAgICAgfQorKyAgIH0KKysgIH0KKysKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjEwIikKKysgICAoc2V0X2F0dHIgImNjIiAibm9uZSIpCisrICAgKHNldF9hdHRyICJ0eXBlIiAiY2FsbCIpXSkKKysgIAorKworKworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBtdWxuaGgudworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysKKysoZGVmaW5lX3BlZXBob2xlMgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrICAgICAgICAobmVnOkhJIChtYXRjaF9vcGVyYW5kOkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIiKSkpCisrICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysgICAgICAgIChtdWx0OlNJCisrICAgICAgICAgKHNpZ25fZXh0ZW5kOlNJIChtYXRjaF9kdXAgMCkpCisrICAgICAgICAgKHNpZ25fZXh0ZW5kOlNJIChtYXRjaF9vcGVyYW5kOkhJIDMgInJlZ2lzdGVyX29wZXJhbmQiICIiKSkpKV0KKysgICIocGVlcDJfcmVnX2RlYWRfcCgyLCBvcGVyYW5kc1swXSkpIHx8IChSRUdOTyhvcGVyYW5kc1syXSkgPT0gUkVHTk8ob3BlcmFuZHNbMF0pKSIKKysgIFsgKHNldCAobWF0Y2hfZHVwIDIpCisrICAgICAgICAgKG11bHQ6U0kKKysgICAgICAgICAgKHNpZ25fZXh0ZW5kOlNJIChuZWc6SEkgKG1hdGNoX2R1cCAxKSkpCisrICAgICAgICAgIChzaWduX2V4dGVuZDpTSSAobWF0Y2hfZHVwIDMpKSkpXQorKyAgIiIKKysgICkKKysKKysoZGVmaW5lX3BlZXBob2xlMgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrICAgICAgICAobmVnOkhJIChtYXRjaF9vcGVyYW5kOkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIiKSkpCisrICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysgICAgICAgIChtdWx0OlNJCisrICAgICAgICAgKHNpZ25fZXh0ZW5kOlNJIChtYXRjaF9vcGVyYW5kOkhJIDMgInJlZ2lzdGVyX29wZXJhbmQiICIiKSkKKysgICAgICAgICAoc2lnbl9leHRlbmQ6U0kgKG1hdGNoX2R1cCAwKSkpKV0KKysgICIocGVlcDJfcmVnX2RlYWRfcCgyLCBvcGVyYW5kc1swXSkpIHx8IChSRUdOTyhvcGVyYW5kc1syXSkgPT0gUkVHTk8ob3BlcmFuZHNbMF0pKSIKKysgIFsgKHNldCAobWF0Y2hfZHVwIDIpCisrICAgICAgICAgKG11bHQ6U0kKKysgICAgICAgICAgKHNpZ25fZXh0ZW5kOlNJIChuZWc6SEkgKG1hdGNoX2R1cCAxKSkpCisrICAgICAgICAgIChzaWduX2V4dGVuZDpTSSAobWF0Y2hfZHVwIDMpKSkpXQorKyAgIiIKKysgICkKKysKKysKKysKKys7Oz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrOzsgVmVjdG9yIHNldCBhbmQgZXh0cmFjdCBvcGVyYXRpb25zCisrOzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyhkZWZpbmVfaW5zbiAidmVjX3NldHYyaGlfaGkiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMkhJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisrICAgICAgICAodmVjX21lcmdlOlYySEkKKysgICAgICAgICAobWF0Y2hfZHVwIDApCisrICAgICAgICAgKHZlY19kdXBsaWNhdGU6VjJISQorKyAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpISSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKQorKyAgICAgICAgIChjb25zdF9pbnQgMSkpKV0KKysgICIiCisrICAiYmZpbnNcdCUwLCAlMSwgMTYsIDE2IgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImFsdSIpCisrICAgKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgImNjIiAiY2xvYmJlciIpXSkKKysKKysoZGVmaW5lX2luc24gInZlY19zZXR2MmhpX2xvIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJISSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiK3IiKQorKyAgICAgICAgKHZlY19tZXJnZTpWMkhJCisrICAgICAgICAgKG1hdGNoX2R1cCAwKQorKyAgICAgICAgICh2ZWNfZHVwbGljYXRlOlYySEkKKysgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6SEkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkKKysgICAgICAgICAoY29uc3RfaW50IDIpKSldCisrICAiIgorKyAgImJmaW5zXHQlMCwgJTEsIDAsIDE2IgorKyAgWyhzZXRfYXR0ciAidHlwZSIgImFsdSIpCisrICAgKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgImNjIiAiY2xvYmJlciIpXSkKKysKKysoZGVmaW5lX2V4cGFuZCAidmVjX3NldHYyaGkiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMkhJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKyAgICAgICAgKHZlY19tZXJnZTpWMkhJCisrICAgICAgICAgKG1hdGNoX2R1cCAwKQorKyAgICAgICAgICh2ZWNfZHVwbGljYXRlOlYySEkKKysgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6SEkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpKQorKyAgICAgICAgIChtYXRjaF9vcGVyYW5kIDIgImltbWVkaWF0ZV9vcGVyYW5kIiAiIikpKV0KKysgICIiCisrICB7IG9wZXJhbmRzWzJdID0gR0VOX0lOVChJTlRWQUwob3BlcmFuZHNbMl0pICsgMSk7IH0KKysgICkKKysKKysoZGVmaW5lX2luc24gInZlY19leHRyYWN0djJoaSIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisrICAgICAgICAodmVjX3NlbGVjdDpISQorKyAgICAgICAgIChtYXRjaF9vcGVyYW5kOlYySEkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQorKyAgICAgICAgIChwYXJhbGxlbCBbKG1hdGNoX29wZXJhbmQ6U0kgMiAiaW1tZWRpYXRlX29wZXJhbmQiICJpIildKSkpXQorKyAgIiIKKysgIHsKKysgICBpZiAoIElOVFZBTChvcGVyYW5kc1syXSkgPT0gMCApCisrICAgICAgcmV0dXJuICJiZmV4dHVcdCUwLCAlMSwgMTYsIDE2IjsKKysgICBlbHNlCisrICAgICAgcmV0dXJuICJiZmV4dHVcdCUwLCAlMSwgMCwgMTYiOworKyAgfQorKyAgWyhzZXRfYXR0ciAidHlwZSIgImFsdSIpCisrICAgKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgImNjIiAiY2xvYmJlciIpXSkKKysKKysoZGVmaW5lX2luc24gInZlY19leHRyYWN0djRxaSIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlFJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisrICAgICAgICAodmVjX3NlbGVjdDpRSQorKyAgICAgICAgIChtYXRjaF9vcGVyYW5kOlY0UUkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQorKyAgICAgICAgIChwYXJhbGxlbCBbKG1hdGNoX29wZXJhbmQ6U0kgMiAiaW1tZWRpYXRlX29wZXJhbmQiICJpIildKSkpXQorKyAgIiIKKysgIHsKKysgICBzd2l0Y2ggKCBJTlRWQUwob3BlcmFuZHNbMl0pICl7CisrICAgICBjYXNlIDA6CisrICAgICAgIHJldHVybiAiYmZleHR1XHQlMCwgJTEsIDI0LCA4IjsKKysgICAgIGNhc2UgMToKKysgICAgICAgcmV0dXJuICJiZmV4dHVcdCUwLCAlMSwgMTYsIDgiOworKyAgICAgY2FzZSAyOgorKyAgICAgICByZXR1cm4gImJmZXh0dVx0JTAsICUxLCA4LCA4IjsKKysgICAgIGNhc2UgMzoKKysgICAgICAgcmV0dXJuICJiZmV4dHVcdCUwLCAlMSwgMCwgOCI7CisrICAgICBkZWZhdWx0OgorKyAgICAgICBhYm9ydCgpOworKyAgIH0KKysgIH0KKysgIFsoc2V0X2F0dHIgInR5cGUiICJhbHUiKQorKyAgIChzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJjYyIgImNsb2JiZXIiKV0pCisrCisrCisrKGRlZmluZV9pbnNuICJjb25jYXR2MmhpIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJISSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIsIHIsIHIiKQorKyAgICAgICAgKHZlY19jb25jYXQ6VjJISQorKyAgICAgICAgIChtYXRjaF9vcGVyYW5kOkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyLCByLCAwIikKKysgICAgICAgICAobWF0Y2hfb3BlcmFuZDpISSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiciwgMCwgciIpKSldCisrICAiIgorKyAgIkAKKysgICBtb3ZcdCUwLCAlMVw7YmZpbnNcdCUwLCAlMiwgMCwgMTYKKysgICBiZmluc1x0JTAsICUyLCAwLCAxNgorKyAgIGJmaW5zXHQlMCwgJTEsIDE2LCAxNiIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjYsIDQsIDQiKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImFsdSIpXSkKKysKKysKKys7OyBMb2FkIHRoZSBhdG9taWMgb3BlcmF0aW9uIGRlc2NyaXB0aW9uCisrKGluY2x1ZGUgInN5bmMubWQiKQorKworKzs7IExvYWQgdGhlIFNJTUQgZGVzY3JpcHRpb24KKysoaW5jbHVkZSAic2ltZC5tZCIpCisrCisrOzsgTG9hZCB0aGUgRlAgY29wckFvY2Vzc29yIHBhdHRlcm5zCisrKGluY2x1ZGUgImZwY3AubWQiKQorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2NjL2NvbmZpZy9hdnIzMi9hdnIzMi1tb2Rlcy5kZWYKK0BAIC0wLDAgKzEgQEAKKytWRUNUT1JfTU9ERVMgKElOVCwgNCk7ICAgICAgICAvKiAgICAgICAgICAgIFY0UUkgVjJISSAqLworLS0tIC9kZXYvbnVsbAorKysrIGIvZ2NjL2NvbmZpZy9hdnIzMi9hdnIzMi5vcHQKK0BAIC0wLDAgKzEsODYgQEAKKys7IE9wdGlvbnMgZm9yIHRoZSBBVE1FTCBBVlIzMiBwb3J0IG9mIHRoZSBjb21waWxlci4KKysKKys7IENvcHlyaWdodCAyMDA3IEF0bWVsIENvcnBvcmF0aW9uLgorKzsKKys7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKys7CisrOyBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorKzsgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKys7IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisrOyB2ZXJzaW9uLgorKzsKKys7IEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKKys7IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisrOyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKys7IGZvciBtb3JlIGRldGFpbHMuCisrOworKzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKys7IGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKys7IFNvZnR3YXJlIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKys7IDAyMTEwLTEzMDEsIFVTQS4KKysKKyttdXNlLXJvZGF0YS1zZWN0aW9uCisrVGFyZ2V0IFJlcG9ydCBNYXNrKFVTRV9ST0RBVEFfU0VDVElPTikKKytVc2Ugc2VjdGlvbiAucm9kYXRhIGZvciByZWFkLW9ubHkgZGF0YSBpbnN0ZWFkIG9mIC50ZXh0LgorKworK21oYXJkLWZsb2F0CisrVGFyZ2V0IFJlcG9ydCBVbmRvY3VtZW50ZWQgTWFzayhIQVJEX0ZMT0FUKQorK1VzZSBmbG9hdGluZyBwb2ludCBjb3Byb2Nlc3NvciBpbnN0cnVjdGlvbnMuCisrCisrbXNvZnQtZmxvYXQKKytUYXJnZXQgUmVwb3J0IFVuZG9jdW1lbnRlZCBJbnZlcnNlTWFzayhIQVJEX0ZMT0FULCBTT0ZUX0ZMT0FUKQorK1VzZSBzb2Z0d2FyZSBmbG9hdGluZy1wb2ludCBsaWJyYXJ5IGZvciBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zLgorKworK21mb3JjZS1kb3VibGUtYWxpZ24KKytUYXJnZXQgUmVwb3J0IFJlamVjdE5lZ2F0aXZlIE1hc2soRk9SQ0VfRE9VQkxFX0FMSUdOKQorK0ZvcmNlIGRvdWJsZS13b3JkIGFsaWdubWVudCBmb3IgZG91YmxlLXdvcmQgbWVtb3J5IGFjY2Vzc2VzLgorKworK21uby1pbml0LWdvdAorK1RhcmdldCBSZXBvcnQgUmVqZWN0TmVnYXRpdmUgTWFzayhOT19JTklUX0dPVCkKKytEbyBub3QgaW5pdGlhbGl6ZSBHT1QgcmVnaXN0ZXIgYmVmb3JlIHVzaW5nIGl0IHdoZW4gY29tcGlsaW5nIFBJQyBjb2RlLgorKworK21yZWxheAorK1RhcmdldCBSZXBvcnQgTWFzayhSRUxBWCkKKytMZXQgaW52b2tlZCBhc3NlbWJsZXIgYW5kIGxpbmtlciBkbyByZWxheGluZyAoRW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gb3B0aW1pemF0aW9uIGxldmVsIGlzID4xKS4KKysKKyttbWQtcmVvcmctb3B0CisrVGFyZ2V0IFJlcG9ydCBVbmRvY3VtZW50ZWQgTWFzayhNRF9SRU9SR19PUFRJTUlaQVRJT04pCisrUGVyZm9ybSBtYWNoaW5lIGRlcGVuZGVudCBvcHRpbWl6YXRpb25zIGluIHJlb3JnIHN0YWdlLgorKworK21hc20tYWRkci1wc2V1ZG9zCisrVGFyZ2V0IFJlcG9ydCBNYXNrKEhBU19BU01fQUREUl9QU0VVRE9TKSAKKytVc2UgYXNzZW1ibGVyIHBzZXVkby1pbnN0cnVjdGlvbnMgbGRhLncgYW5kIGNhbGwgZm9yIGhhbmRsaW5nIGRpcmVjdCBhZGRyZXNzZXMuIChFbmFibGVkIGJ5IGRlZmF1bHQpCisrCisrbXBhcnQ9CisrVGFyZ2V0IFJlcG9ydCBSZWplY3ROZWdhdGl2ZSBKb2luZWQgVmFyKGF2cjMyX3BhcnRfbmFtZSkKKytTcGVjaWZ5IHRoZSBBVlIzMiBwYXJ0IG5hbWUKKysKKyttY3B1PQorK1RhcmdldCBSZXBvcnQgUmVqZWN0TmVnYXRpdmUgSm9pbmVkIFVuZG9jdW1lbnRlZCBWYXIoYXZyMzJfcGFydF9uYW1lKQorK1NwZWNpZnkgdGhlIEFWUjMyIHBhcnQgbmFtZSAoZGVwcmVjYXRlZCkKKysKKyttYXJjaD0KKytUYXJnZXQgUmVwb3J0IFJlamVjdE5lZ2F0aXZlIEpvaW5lZCBWYXIoYXZyMzJfYXJjaF9uYW1lKQorK1NwZWNpZnkgdGhlIEFWUjMyIGFyY2hpdGVjdHVyZSBuYW1lCisrCisrbWZhc3QtZmxvYXQKKytUYXJnZXQgUmVwb3J0IE1hc2soRkFTVF9GTE9BVCkKKytFbmFibGUgZmFzdCBmbG9hdGluZy1wb2ludCBsaWJyYXJ5LiBFbmFibGVkIGJ5IGRlZmF1bHQgaWYgdGhlIC1mdW5zYWZlLW1hdGgtb3B0aW1pemF0aW9ucyBzd2l0Y2ggaXMgc3BlY2lmaWVkLgorKworK21pbW0taW4tY29uc3QtcG9vbAorK1RhcmdldCBSZXBvcnQgVmFyKGF2cjMyX2ltbV9pbl9jb25zdF9wb29sKSBJbml0KC0xKQorK1B1dCBsYXJnZSBpbW1lZGlhdGVzIGluIGNvbnN0YW50IHBvb2wuIFRoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGZvciBhcmNocyB3aXRoIGluc24tY2FjaGUuCisrCisrbW5vLXBpYworK1RhcmdldCBSZXBvcnQgUmVqZWN0TmVnYXRpdmUgTWFzayhOT19QSUMpCisrRG8gbm90IGdlbmVyYXRlIHBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUuIChkZXByZWNhdGVkLCB1c2UgLWZuby1waWMgaW5zdGVhZCkKKysKKyttY29uZC1leGVjLWJlZm9yZS1yZWxvYWQKKytUYXJnZXQgUmVwb3J0IFVuZG9jdW1lbnRlZCBNYXNrKENPTkRfRVhFQ19CRUZPUkVfUkVMT0FEKSAKKytFbmFibGUgZXhwZXJpbWVudGFsIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbiBwcmVwYXJhdGlvbiBiZWZvcmUgdGhlIHJlbG9hZCBzdGFnZS4gCisrCisrbXJtdy1hZGRyZXNzYWJsZS1kYXRhCisrVGFyZ2V0IFJlcG9ydCBNYXNrKFJNV19BRERSRVNTQUJMRV9EQVRBKQorK1NpZ25hbCB0aGF0IGFsbCBkYXRhIGlzIGluIHJhbmdlIGZvciB0aGUgQXRvbWljIFJlYWQtTW9kaWZ5LVdyaXRlIG1lbW9yeSBpbnN0cnVjdGlvbnMsIGFuZCB0aGF0CisrZ2NjIGNhbiBzYWZlbHkgZ2VuZXJhdGUgdGhlc2Ugd2hlbmV2ZXIgcG9zc2libGUuIAorKworLS0tIC9kZXYvbnVsbAorKysrIGIvZ2NjL2NvbmZpZy9hdnIzMi9hdnIzMi1wcm90b3MuaAorQEAgLTAsMCArMSwxOTYgQEAKKysvKgorKyAgIFByb3RvdHlwZXMgZm9yIGV4cG9ydGVkIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGF2cjMyLmMKKysgICBDb3B5cmlnaHQgMjAwMy0yMDA2IEF0bWVsIENvcnBvcmF0aW9uLgorKworKyAgIFdyaXR0ZW4gYnkgUm9ubnkgUGVkZXJzZW4sIEF0bWVsIE5vcndheSwgPHJwZWRlcnNlbkBhdG1lbC5jb20+CisrICAgSW5pdGlhbCBwb3J0aW5nIGJ5IEFuZGVycyDvv71kbGFuZC4KKysKKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAqLworKworKworKyNpZm5kZWYgQVZSMzJfUFJPVE9TX0gKKysjZGVmaW5lIEFWUjMyX1BST1RPU19ICisrCisrZXh0ZXJuIGNvbnN0IGludCBzd2FwX3JlZ1tdOworKworK2V4dGVybiBpbnQgYXZyMzJfdmFsaWRfbWFjbWFjX2J5cGFzcyAocnR4LCBydHgpOworK2V4dGVybiBpbnQgYXZyMzJfdmFsaWRfbXVsbWFjX2J5cGFzcyAocnR4LCBydHgpOworKworK2V4dGVybiBpbnQgYXZyMzJfZGVjb2RlX2xjb21tX3N5bWJvbF9vZmZzZXQgKHJ0eCwgaW50ICopOworK2V4dGVybiB2b2lkIGF2cjMyX2VuY29kZV9sY29tbV9zeW1ib2xfb2Zmc2V0ICh0cmVlLCBjaGFyICosIGludCk7CisrCisrZXh0ZXJuIGNvbnN0IGNoYXIgKmF2cjMyX3N0cmlwX25hbWVfZW5jb2RpbmcgKGNvbnN0IGNoYXIgKik7CisrCisrZXh0ZXJuIHJ0eCBhdnIzMl9nZXRfbm90ZV9yZWdfZXF1aXYgKHJ0eCBpbnNuKTsKKysKKytleHRlcm4gaW50IGF2cjMyX3VzZV9yZXR1cm5faW5zbiAoaW50IGlzY29uZCk7CisrCisrZXh0ZXJuIHZvaWQgYXZyMzJfbWFrZV9yZWdsaXN0MTYgKGludCByZWdsaXN0MTZfdmVjdCwgY2hhciAqcmVnbGlzdDE2X3N0cmluZyk7CisrCisrZXh0ZXJuIHZvaWQgYXZyMzJfbWFrZV9yZWdsaXN0OCAoaW50IHJlZ2xpc3Q4X3ZlY3QsIGNoYXIgKnJlZ2xpc3Q4X3N0cmluZyk7CisrZXh0ZXJuIHZvaWQgYXZyMzJfbWFrZV9mcF9yZWdsaXN0X3cgKGludCByZWdsaXN0X21hc2ssIGNoYXIgKnJlZ2xpc3Rfc3RyaW5nKTsKKytleHRlcm4gdm9pZCBhdnIzMl9tYWtlX2ZwX3JlZ2xpc3RfZCAoaW50IHJlZ2xpc3RfbWFzaywgY2hhciAqcmVnbGlzdF9zdHJpbmcpOworKworK2V4dGVybiB2b2lkIGF2cjMyX291dHB1dF9yZXR1cm5faW5zdHJ1Y3Rpb24gKGludCBzaW5nbGVfcmV0X2luc3QsCisrCQkJCQkgICAgIGludCBpc2NvbmQsIHJ0eCBjb25kLAorKwkJCQkJICAgICBydHggcjEyX2ltbSk7CisrZXh0ZXJuIHZvaWQgYXZyMzJfZXhwYW5kX3Byb2xvZ3VlICh2b2lkKTsKKytleHRlcm4gdm9pZCBhdnIzMl9zZXRfcmV0dXJuX2FkZHJlc3MgKHJ0eCBzb3VyY2UsIHJ0eCBzY3JhdGNoKTsKKysKKytleHRlcm4gaW50IGF2cjMyX2hhcmRfcmVnbm9fbW9kZV9vayAoaW50IHJlZ25vLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlKTsKKytleHRlcm4gaW50IGF2cjMyX2V4dHJhX2NvbnN0cmFpbnRfcyAocnR4IHZhbHVlLCBjb25zdCBpbnQgc3RyaWN0KTsKKytleHRlcm4gaW50IGF2cjMyX2VoX3JldHVybl9kYXRhX3JlZ25vIChjb25zdCBpbnQgbik7CisrZXh0ZXJuIGludCBhdnIzMl9pbml0aWFsX2VsaW1pbmF0aW9uX29mZnNldCAoY29uc3QgaW50IGZyb20sIGNvbnN0IGludCB0byk7CisrZXh0ZXJuIHJ0eCBhdnIzMl9mdW5jdGlvbl9hcmcgKENVTVVMQVRJVkVfQVJHUyAqIGN1bSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKysJCQkgICAgICAgdHJlZSB0eXBlLCBpbnQgbmFtZWQpOworK2V4dGVybiB2b2lkIGF2cjMyX2luaXRfY3VtdWxhdGl2ZV9hcmdzIChDVU1VTEFUSVZFX0FSR1MgKiBjdW0sIHRyZWUgZm50eXBlLAorKwkJCQkJcnR4IGxpYm5hbWUsIHRyZWUgZm5kZWNsKTsKKytleHRlcm4gdm9pZCBhdnIzMl9mdW5jdGlvbl9hcmdfYWR2YW5jZSAoQ1VNVUxBVElWRV9BUkdTICogY3VtLAorKwkJCQkJZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKysJCQkJCXRyZWUgdHlwZSwgaW50IG5hbWVkKTsKKysjaWZkZWYgQVJHU19TSVpFX1JUWAorKy8qIGV4cHIuaCBkZWZpbmVzIEFSR1NfU0laRV9SVFggYW5kIGBlbnVtIGRpcmVjdGlvbicuICAqLworK2V4dGVybiBlbnVtIGRpcmVjdGlvbiBhdnIzMl9mdW5jdGlvbl9hcmdfcGFkZGluZyAoZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKysJCQkJCQkgIHRyZWUgdHlwZSk7CisrI2VuZGlmIC8qIEFSR1NfU0laRV9SVFggKi8KKytleHRlcm4gcnR4IGF2cjMyX2Z1bmN0aW9uX3ZhbHVlICh0cmVlIHZhbHR5cGUsIHRyZWUgZnVuYywgYm9vbCBvdXRnb2luZyk7CisrZXh0ZXJuIHJ0eCBhdnIzMl9saWJjYWxsX3ZhbHVlIChlbnVtIG1hY2hpbmVfbW9kZSBtb2RlKTsKKytleHRlcm4gaW50IGF2cjMyX3NjaGVkX3VzZV9kZmFfcGlwZWxpbmVfaW50ZXJmYWNlICh2b2lkKTsKKytleHRlcm4gYm9vbCBhdnIzMl9yZXR1cm5faW5fbWVtb3J5ICh0cmVlIHR5cGUsIHRyZWUgZm50eXBlKTsKKytleHRlcm4gdm9pZCBhdnIzMl9yZWdzX3RvX3NhdmUgKGNoYXIgKm9wZXJhbmQpOworK2V4dGVybiB2b2lkIGF2cjMyX3RhcmdldF9hc21fZnVuY3Rpb25fcHJvbG9ndWUgKEZJTEUgKiBmaWxlLAorKwkJCQkJCUhPU1RfV0lERV9JTlQgc2l6ZSk7CisrZXh0ZXJuIHZvaWQgYXZyMzJfdGFyZ2V0X2FzbV9mdW5jdGlvbl9lcGlsb2d1ZSAoRklMRSAqIGZpbGUsCisrCQkJCQkJSE9TVF9XSURFX0lOVCBzaXplKTsKKytleHRlcm4gdm9pZCBhdnIzMl90cmFtcG9saW5lX3RlbXBsYXRlIChGSUxFICogZmlsZSk7CisrZXh0ZXJuIHZvaWQgYXZyMzJfaW5pdGlhbGl6ZV90cmFtcG9saW5lIChydHggYWRkciwgcnR4IGZuYWRkciwKKysJCQkJCSBydHggc3RhdGljX2NoYWluKTsKKytleHRlcm4gaW50IGF2cjMyX2xlZ2l0aW1hdGVfYWRkcmVzcyAoZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgcnR4IHgsCisrCQkJCSAgICAgaW50IHN0cmljdCk7CisrZXh0ZXJuIGludCBhdnIzMl9sZWdpdGltYXRlX2NvbnN0YW50X3AgKHJ0eCB4KTsKKysKKytleHRlcm4gaW50IGF2cjMyX2xlZ2l0aW1hdGVfcGljX29wZXJhbmRfcCAocnR4IHgpOworKworK2V4dGVybiBydHggYXZyMzJfZmluZF9zeW1ib2wgKHJ0eCB4KTsKKytleHRlcm4gdm9pZCBhdnIzMl9zZWxlY3Rfc2VjdGlvbiAocnR4IGV4cCwgaW50IHJlbG9jLCBpbnQgYWxpZ24pOworK2V4dGVybiB2b2lkIGF2cjMyX2VuY29kZV9zZWN0aW9uX2luZm8gKHRyZWUgZGVjbCwgcnR4IHJ0bCwgaW50IGZpcnN0KTsKKytleHRlcm4gdm9pZCBhdnIzMl9hc21fZmlsZV9lbmQgKEZJTEUgKiBzdHJlYW0pOworK2V4dGVybiB2b2lkIGF2cjMyX2FzbV9vdXRwdXRfYXNjaWkgKEZJTEUgKiBzdHJlYW0sIGNoYXIgKnB0ciwgaW50IGxlbik7CisrZXh0ZXJuIHZvaWQgYXZyMzJfYXNtX291dHB1dF9jb21tb24gKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGNoYXIgKm5hbWUsCisrCQkJCSAgICAgaW50IHNpemUsIGludCByb3VuZGVkKTsKKytleHRlcm4gdm9pZCBhdnIzMl9hc21fb3V0cHV0X2xhYmVsIChGSUxFICogc3RyZWFtLCBjb25zdCBjaGFyICpuYW1lKTsKKytleHRlcm4gdm9pZCBhdnIzMl9hc21fZGVjbGFyZV9vYmplY3RfbmFtZSAoRklMRSAqIHN0cmVhbSwgY2hhciAqbmFtZSwKKysJCQkJCSAgIHRyZWUgZGVjbCk7CisrZXh0ZXJuIHZvaWQgYXZyMzJfYXNtX2dsb2JhbGl6ZV9sYWJlbCAoRklMRSAqIHN0cmVhbSwgY29uc3QgY2hhciAqbmFtZSk7CisrZXh0ZXJuIHZvaWQgYXZyMzJfYXNtX3dlYWtlbl9sYWJlbCAoRklMRSAqIHN0cmVhbSwgY29uc3QgY2hhciAqbmFtZSk7CisrZXh0ZXJuIHZvaWQgYXZyMzJfYXNtX291dHB1dF9leHRlcm5hbCAoRklMRSAqIHN0cmVhbSwgdHJlZSBkZWNsLAorKwkJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSk7CisrZXh0ZXJuIHZvaWQgYXZyMzJfYXNtX291dHB1dF9leHRlcm5hbF9saWJjYWxsIChGSUxFICogc3RyZWFtLCBydHggc3ltcmVmKTsKKytleHRlcm4gdm9pZCBhdnIzMl9hc21fb3V0cHV0X2xhYmVscmVmIChGSUxFICogc3RyZWFtLCBjb25zdCBjaGFyICpuYW1lKTsKKytleHRlcm4gdm9pZCBhdnIzMl9ub3RpY2VfdXBkYXRlX2NjIChydHggZXhwLCBydHggaW5zbik7CisrZXh0ZXJuIHZvaWQgYXZyMzJfcHJpbnRfb3BlcmFuZCAoRklMRSAqIHN0cmVhbSwgcnR4IHgsIGludCBjb2RlKTsKKytleHRlcm4gdm9pZCBhdnIzMl9wcmludF9vcGVyYW5kX2FkZHJlc3MgKEZJTEUgKiBzdHJlYW0sIHJ0eCB4KTsKKysKKytleHRlcm4gaW50IGF2cjMyX3N5bWJvbCAocnR4IHgpOworKworK2V4dGVybiB2b2lkIGF2cjMyX3NlbGVjdF9ydHhfc2VjdGlvbiAoZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgcnR4IHgsCisrCQkJCSAgICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgYWxpZ24pOworKworK2V4dGVybiBpbnQgYXZyMzJfbG9hZF9tdWx0aXBsZV9vcGVyYXRpb24gKHJ0eCBvcCwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSk7CisrZXh0ZXJuIGludCBhdnIzMl9zdG9yZV9tdWx0aXBsZV9vcGVyYXRpb24gKHJ0eCBvcCwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSk7CisrCisrZXh0ZXJuIGludCBhdnIzMl9jb25zdF9va19mb3JfY29uc3RyYWludF9wIChIT1NUX1dJREVfSU5UIHZhbHVlLCBjaGFyIGMsCisrCQkJCQkgICAgY29uc3QgY2hhciAqc3RyKTsKKysKKytleHRlcm4gYm9vbCBhdnIzMl9jYW5ub3RfZm9yY2VfY29uc3RfbWVtIChydHggeCk7CisrCisrZXh0ZXJuIHZvaWQgYXZyMzJfaW5pdF9idWlsdGlucyAodm9pZCk7CisrCisrZXh0ZXJuIHJ0eCBhdnIzMl9leHBhbmRfYnVpbHRpbiAodHJlZSBleHAsIHJ0eCB0YXJnZXQsIHJ0eCBzdWJ0YXJnZXQsCisrCQkJCSBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBpbnQgaWdub3JlKTsKKysKKytleHRlcm4gYm9vbCBhdnIzMl9tdXN0X3Bhc3NfaW5fc3RhY2sgKGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIHRyZWUgdHlwZSk7CisrCisrZXh0ZXJuIGJvb2wgYXZyMzJfc3RyaWN0X2FyZ3VtZW50X25hbWluZyAoQ1VNVUxBVElWRV9BUkdTICogY2EpOworKworK2V4dGVybiBib29sIGF2cjMyX3Bhc3NfYnlfcmVmZXJlbmNlIChDVU1VTEFUSVZFX0FSR1MgKiBjdW0sCisrCQkJCSAgICAgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKysJCQkJICAgICB0cmVlIHR5cGUsIGJvb2wgbmFtZWQpOworKworK2V4dGVybiBydHggYXZyMzJfZ2VuX2xvYWRfbXVsdGlwbGUgKHJ0eCAqIHJlZ3MsIGludCBjb3VudCwgcnR4IGZyb20sCisrCQkJCSAgICBpbnQgd3JpdGVfYmFjaywgaW50IGluX3N0cnVjdF9wLAorKwkJCQkgICAgaW50IHNjYWxhcl9wKTsKKytleHRlcm4gcnR4IGF2cjMyX2dlbl9zdG9yZV9tdWx0aXBsZSAocnR4ICogcmVncywgaW50IGNvdW50LCBydHggdG8sCisrCQkJCSAgICAgaW50IGluX3N0cnVjdF9wLCBpbnQgc2NhbGFyX3ApOworK2V4dGVybiBpbnQgYXZyMzJfZ2VuX21vdm1lbXNpIChydHggKiBvcGVyYW5kcyk7CisrCisrZXh0ZXJuIGludCBhdnIzMl9ybmRfb3BlcmFuZHMgKHJ0eCBhZGQsIHJ0eCBzaGlmdCk7CisrZXh0ZXJuIGludCBhdnIzMl9hZGp1c3RfaW5zbl9sZW5ndGggKHJ0eCBpbnNuLCBpbnQgbGVuZ3RoKTsKKysKKytleHRlcm4gaW50IHN5bWJvbF9tZW50aW9uZWRfcCAocnR4IHgpOworK2V4dGVybiBpbnQgbGFiZWxfbWVudGlvbmVkX3AgKHJ0eCB4KTsKKytleHRlcm4gcnR4IGxlZ2l0aW1pemVfcGljX2FkZHJlc3MgKHJ0eCBvcmlnLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBydHggcmVnKTsKKytleHRlcm4gaW50IGF2cjMyX2FkZHJlc3NfcmVnaXN0ZXJfcnR4X3AgKHJ0eCB4LCBpbnQgc3RyaWN0X3ApOworK2V4dGVybiBpbnQgYXZyMzJfbGVnaXRpbWF0ZV9pbmRleF9wIChlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBydHggaW5kZXgsCisrCQkJCSAgICAgaW50IHN0cmljdF9wKTsKKysKKytleHRlcm4gaW50IGF2cjMyX2NvbnN0X2RvdWJsZV9pbW1lZGlhdGUgKHJ0eCB2YWx1ZSk7CisrZXh0ZXJuIHZvaWQgYXZyMzJfaW5pdF9leHBhbmRlcnMgKHZvaWQpOworK2V4dGVybiBydHggYXZyMzJfcmV0dXJuX2FkZHIgKGludCBjb3VudCwgcnR4IGZyYW1lKTsKKytleHRlcm4gYm9vbCBhdnIzMl9nb3RfbWVudGlvbmVkX3AgKHJ0eCBhZGRyKTsKKysKKytleHRlcm4gdm9pZCBhdnIzMl9maW5hbF9wcmVzY2FuX2luc24gKHJ0eCBpbnNuLCBydHggKiBvcHZlYywgaW50IG5vcGVyYW5kcyk7CisrCisrZXh0ZXJuIGludCBhdnIzMl9leHBhbmRfbW92Y2MgKGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIHJ0eCBvcGVyYW5kc1tdKTsKKytleHRlcm4gaW50IGF2cjMyX2V4cGFuZF9hZGRjYyAoZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgcnR4IG9wZXJhbmRzW10pOworKyNpZmRlZiBSVFhfQ09ERQorK2V4dGVybiBpbnQgYXZyMzJfZXhwYW5kX3NjYyAoUlRYX0NPREUgY29uZCwgcnR4ICogb3BlcmFuZHMpOworKyNlbmRpZgorKworK2V4dGVybiBpbnQgYXZyMzJfc3RvcmVfYnlwYXNzIChydHggaW5zbl9vdXQsIHJ0eCBpbnNuX2luKTsKKytleHRlcm4gaW50IGF2cjMyX211bF93YXdfYnlwYXNzIChydHggaW5zbl9vdXQsIHJ0eCBpbnNuX2luKTsKKytleHRlcm4gaW50IGF2cjMyX3ZhbGlkX2xvYWRfZG91YmxlX2J5cGFzcyAocnR4IGluc25fb3V0LCBydHggaW5zbl9pbik7CisrZXh0ZXJuIGludCBhdnIzMl92YWxpZF9sb2FkX3F1YWRfYnlwYXNzIChydHggaW5zbl9vdXQsIHJ0eCBpbnNuX2luKTsKKytleHRlcm4gcnR4IGF2cjMyX291dHB1dF9jbXAgKHJ0eCBjb25kLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorKwkJCSAgICAgcnR4IG9wMCwgcnR4IG9wMSk7CisrCisrcnR4IGdldF9uZXh0X2luc25fY29uZCAocnR4IGN1cl9pbnNuKTsKKytpbnQgc2V0X25leHRfaW5zbl9jb25kIChydHggY3VyX2luc24sIHJ0eCBjb25kKTsKKyt2b2lkIGF2cjMyX292ZXJyaWRlX29wdGlvbnMgKHZvaWQpOworK3ZvaWQgYXZyMzJfbG9hZF9waWNfcmVnaXN0ZXIgKHZvaWQpOworKyNpZmRlZiBHQ0NfQkFTSUNfQkxPQ0tfSAorK3J0eCBhdnIzMl9pZmN2dF9tb2RpZnlfaW5zbiAoY2VfaWZfYmxvY2tfdCAqY2VfaW5mbywgcnR4IHBhdHRlcm4sIHJ0eCBpbnNuLCAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbnVtX3RydWVfY2hhbmdlcyk7CisrcnR4IGF2cjMyX2lmY3Z0X21vZGlmeV90ZXN0IChjZV9pZl9ibG9ja190ICpjZV9pbmZvLCBydHggdGVzdCApOworK3ZvaWQgYXZyMzJfaWZjdnRfbW9kaWZ5X2NhbmNlbCAoIGNlX2lmX2Jsb2NrX3QgKmNlX2luZm8sIGludCAqbnVtX3RydWVfY2hhbmdlcyk7CisrI2VuZGlmCisrdm9pZCBhdnIzMl9vcHRpbWl6YXRpb25fb3B0aW9ucyAoaW50IGxldmVsLCBpbnQgc2l6ZSk7CisraW50IGF2cjMyX2NvbnN0X29rX2Zvcl9tb3ZlIChIT1NUX1dJREVfSU5UIGMpOworKworK3ZvaWQgYXZyMzJfc3BsaXRfY29uc3RfZXhwciAoZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gbWFjaGluZV9tb2RlIG5ld19tb2RlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnR4IGV4cHIsIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnR4ICpzcGxpdF9leHByKTsKKyt2b2lkIGF2cjMyX2dldF9pbnR2YWwgKGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisrICAgICAgICAgICAgICAgICAgICAgICBydHggY29uc3RfZXhwciwgCisrICAgICAgICAgICAgICAgICAgICAgICBIT1NUX1dJREVfSU5UICp2YWwpOworKworK2ludCBhdnIzMl9jb25kX2ltbV9jbG9iYmVyX3NwbGl0dGFibGUgKHJ0eCBpbnNuLCAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydHggb3BlcmFuZHNbXSk7CisrCisrCisrI2VuZGlmIC8qIEFWUjMyX1BST1RPU19IICovCistLS0gL2Rldi9udWxsCisrKysgYi9nY2MvY29uZmlnL2F2cjMyL2NydGkuYXNtCitAQCAtMCwwICsxLDY0IEBACisrLyoKKysgICBJbml0L2Zpbmkgc3R1ZmYgZm9yIEFWUjMyLgorKyAgIENvcHlyaWdodCAyMDAzLTIwMDYgQXRtZWwgQ29ycG9yYXRpb24uCisrCisrICAgV3JpdHRlbiBieSBSb25ueSBQZWRlcnNlbiwgQXRtZWwgTm9yd2F5LCA8cnBlZGVyc2VuQGF0bWVsLmNvbT4KKysKKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAqLworKworKwkKKysvKiBUaGUgY29kZSBpbiBzZWN0aW9ucyAuaW5pdCBhbmQgLmZpbmkgaXMgc3VwcG9zZWQgdG8gYmUgYSBzaW5nbGUKKysgICByZWd1bGFyIGZ1bmN0aW9uLiAgVGhlIGZ1bmN0aW9uIGluIC5pbml0IGlzIGNhbGxlZCBkaXJlY3RseSBmcm9tCisrICAgc3RhcnQgaW4gY3J0MS5hc20uICBUaGUgZnVuY3Rpb24gaW4gLmZpbmkgaXMgYXRleGl0KCllZCBpbiBjcnQxLmFzbQorKyAgIHRvby4KKysKKysgICBjcnRpLmFzbSBjb250cmlidXRlcyB0aGUgcHJvbG9ndWUgb2YgYSBmdW5jdGlvbiB0byB0aGVzZSBzZWN0aW9ucywKKysgICBhbmQgY3J0bi5hc20gY29tZXMgdXAgdGhlIGVwaWxvZ3VlLiAgU1RBUlRGSUxFX1NQRUMgc2hvdWxkIGxpc3QKKysgICBjcnRpLm8gYmVmb3JlIGFueSBvdGhlciBvYmplY3QgZmlsZXMgdGhhdCBtaWdodCBhZGQgY29kZSB0byAuaW5pdAorKyAgIG9yIC5maW5pIHNlY3Rpb25zLCBhbmQgRU5ERklMRV9TUEVDIHNob3VsZCBsaXN0IGNydG4ubyBhZnRlciBhbnkKKysgICBzdWNoIG9iamVjdCBmaWxlcy4gICovCisrCQkKKysJLmZpbGUJCSJjcnRpLmFzbSIKKysKKysJLnNlY3Rpb24JIi5pbml0IgorKy8qIEp1c3QgbG9hZCB0aGUgR09UICovCisrCS5hbGlnbiAyCisrCS5nbG9iYWwJX2luaXQKKytfaW5pdDoKKysJc3RtCS0tc3AsIHI2LCBscgorKwlsZGRwYwlyNiwgMWYJCQorKzA6CQorKwlyc3ViCXI2LCBwYworKwlyam1wCTJmCisrCS5hbGlnbgkyCisrMToJLmxvbmcJMGIgLSBfR0xPQkFMX09GRlNFVF9UQUJMRV8JCQorKzI6CQorKwkJCQkKKysJLnNlY3Rpb24JIi5maW5pIgorKy8qIEp1c3QgbG9hZCB0aGUgR09UICovCisrCS5hbGlnbgkyCisrCS5nbG9iYWwJX2ZpbmkKKytfZmluaToKKysJc3RtCS0tc3AsIHI2LCBscgorKwlsZGRwYwlyNiwgMWYJCQorKzA6CQorKwlyc3ViCXI2LCBwYworKwlyam1wCTJmCisrCS5hbGlnbgkyCisrMToJLmxvbmcJMGIgLSBfR0xPQkFMX09GRlNFVF9UQUJMRV8JCQorKzI6CQorKworLS0tIC9kZXYvbnVsbAorKysrIGIvZ2NjL2NvbmZpZy9hdnIzMi9jcnRuLmFzbQorQEAgLTAsMCArMSw0NCBAQAorKy8qICAgQ29weXJpZ2h0IChDKSAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgICBXcml0dGVuIEJ5IE5pY2sgQ2xpZnRvbgorKworKyAgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorKyAgbGF0ZXIgdmVyc2lvbi4KKysKKysgIEluIGFkZGl0aW9uIHRvIHRoZSBwZXJtaXNzaW9ucyBpbiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHRoZQorKyAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzIHlvdSB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBsaW5rIHRoZQorKyAgY29tcGlsZWQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgd2l0aCBvdGhlciBwcm9ncmFtcywgYW5kIHRvIGRpc3RyaWJ1dGUKKysgIHRob3NlIHByb2dyYW1zIHdpdGhvdXQgYW55IHJlc3RyaWN0aW9uIGNvbWluZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcworKyAgZmlsZS4gIChUaGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSByZXN0cmljdGlvbnMgZG8gYXBwbHkgaW4gb3RoZXIKKysgIHJlc3BlY3RzOyBmb3IgZXhhbXBsZSwgdGhleSBjb3ZlciBtb2RpZmljYXRpb24gb2YgdGhlIGZpbGUsIGFuZAorKyAgZGlzdHJpYnV0aW9uIHdoZW4gbm90IGxpbmtlZCBpbnRvIGFub3RoZXIgcHJvZ3JhbS4pCisrCisrICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KKysgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKysgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKworKyAgICAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgaWYgeW91IGxpbmsgdGhpcyBsaWJyYXJ5IHdpdGggZmlsZXMKKysgICAgIGNvbXBpbGVkIHdpdGggR0NDIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcyBkb2VzIG5vdCBjYXVzZQorKyAgICAgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKyAgICAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlciBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeQorKyAgICAgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysqLworKworKworKworKwkKKysJLmZpbGUJCSJjcnRuLmFzbSIKKysKKysJLnNlY3Rpb24JIi5pbml0IgorKwlsZG0Jc3ArKywgcjYsIHBjCisrCQkJCisrCS5zZWN0aW9uCSIuZmluaSIKKysJbGRtCXNwKyssIHI2LCBwYworKwkJCistLS0gL2Rldi9udWxsCisrKysgYi9nY2MvY29uZmlnL2F2cjMyL2ZwY3AubWQKK0BAIC0wLDAgKzEsNTUxIEBACisrOzsgICBBVlIzMiBtYWNoaW5lIGRlc2NyaXB0aW9uIGZpbGUgZm9yIEZsb2F0aW5nLVBvaW50IGluc3RydWN0aW9ucy4KKys7OyAgIENvcHlyaWdodCAyMDAzLTIwMDYgQXRtZWwgQ29ycG9yYXRpb24uCisrOzsKKys7OyAgIFdyaXR0ZW4gYnkgUm9ubnkgUGVkZXJzZW4sIEF0bWVsIE5vcndheSwgPHJwZWRlcnNlbkBhdG1lbC5jb20+CisrOzsKKys7OyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKys7OworKzs7ICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKys7OyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrOzsgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKzs7ICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKys7OworKzs7ICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrOzsgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKzs7ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKzs7ICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKys7OworKzs7ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKys7OyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrOzsgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKworKzs7IC0qLSBNb2RlOiBTY2hlbWUgLSotCisrCisrOzsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKys7OyBBdXRvbWF0b24gcGlwZWxpbmUgZGVzY3JpcHRpb24gZm9yIGZsb2F0aW5nLXBvaW50IGNvcHJvY2Vzc29yIGluc25zCisrOzsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysoZGVmaW5lX2NwdV91bml0ICJmaWQsZm0xLGZtMixmbTMsZm00LGZ3YixmY21wLGZjYXN0IiAiYXZyMzJfYXAiKQorKworKyhkZWZpbmVfaW5zbl9yZXNlcnZhdGlvbiAiZm12X29wIiAxCisrICAoYW5kIChlcV9hdHRyICJwaXBlbGluZSIgImFwIikKKysgICAgICAgKGVxX2F0dHIgInR5cGUiICJmbXYiKSkKKysgICJpcyxkYSxkLGZpZCxmd2IiKQorKworKyhkZWZpbmVfaW5zbl9yZXNlcnZhdGlvbiAiZm11bF9vcCIgNQorKyAgKGFuZCAoZXFfYXR0ciAicGlwZWxpbmUiICJhcCIpCisrICAgICAgIChlcV9hdHRyICJ0eXBlIiAiZm11bCIpKQorKyAgImlzLGRhLGQsZmlkLGZtMSxmbTIsZm0zLGZtNCxmd2IiKQorKworKyhkZWZpbmVfaW5zbl9yZXNlcnZhdGlvbiAiZmNtcHNfb3AiIDEKKysgIChhbmQgKGVxX2F0dHIgInBpcGVsaW5lIiAiYXAiKQorKyAgICAgICAoZXFfYXR0ciAidHlwZSIgImZjbXBzIikpCisrICAiaXMsZGEsZCxmaWQsZmNtcCIpCisrCisrKGRlZmluZV9pbnNuX3Jlc2VydmF0aW9uICJmY21wZF9vcCIgMgorKyAgKGFuZCAoZXFfYXR0ciAicGlwZWxpbmUiICJhcCIpCisrICAgICAgIChlcV9hdHRyICJ0eXBlIiAiZmNtcGQiKSkKKysgICJpcyxkYSxkLGZpZCoyLGZjbXAiKQorKworKyhkZWZpbmVfaW5zbl9yZXNlcnZhdGlvbiAiZmNhc3Rfb3AiIDMKKysgIChhbmQgKGVxX2F0dHIgInBpcGVsaW5lIiAiYXAiKQorKyAgICAgICAoZXFfYXR0ciAidHlwZSIgImZjYXN0IikpCisrICAiaXMsZGEsZCxmaWQsZmNtcCxmY2FzdCxmd2IiKQorKworKyhkZWZpbmVfaW5zbl9yZXNlcnZhdGlvbiAiZm12Y3B1X29wIiAyCisrICAoYW5kIChlcV9hdHRyICJwaXBlbGluZSIgImFwIikKKysgICAgICAgKGVxX2F0dHIgInR5cGUiICJmbXZjcHUiKSkKKysgICJpcyxkYSxkIikKKysKKysoZGVmaW5lX2luc25fcmVzZXJ2YXRpb24gImZsZGRfb3AiIDEKKysgIChhbmQgKGVxX2F0dHIgInBpcGVsaW5lIiAiYXAiKQorKyAgICAgICAoZXFfYXR0ciAidHlwZSIgImZsZGQiKSkKKysgICJpcyxkYSxkLGZ3YiIpCisrCisrKGRlZmluZV9pbnNuX3Jlc2VydmF0aW9uICJmbGRzX29wIiAxCisrICAoYW5kIChlcV9hdHRyICJwaXBlbGluZSIgImFwIikKKysgICAgICAgKGVxX2F0dHIgInR5cGUiICJmbGRzIikpCisrICAiaXMsZGEsZCxmd2IiKQorKworKyhkZWZpbmVfaW5zbl9yZXNlcnZhdGlvbiAiZnN0c19vcCIgMAorKyAgKGFuZCAoZXFfYXR0ciAicGlwZWxpbmUiICJhcCIpCisrICAgICAgIChlcV9hdHRyICJ0eXBlIiAiZnN0cyIpKQorKyAgImlzLGRhKjIsZCIpCisrCisrKGRlZmluZV9pbnNuX3Jlc2VydmF0aW9uICJmc3RkX29wIiAwCisrICAoYW5kIChlcV9hdHRyICJwaXBlbGluZSIgImFwIikKKysgICAgICAgKGVxX2F0dHIgInR5cGUiICJmc3RkIikpCisrICAiaXMsZGEqMixkIikKKysKKysKKysoZGVmaW5lX2luc24gIiptb3ZzZl9mcGNwIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0YgMCAibm9uaW1tZWRpYXRlX29wZXJhbmQiICAgICAiPWYsZixyLGYsbSxyLHIscixtIikKKysJKG1hdGNoX29wZXJhbmQ6U0YgMSAiZ2VuZXJhbF9vcGVyYW5kIiAgICAgICAgICAiIGYscixmLG0sZixyLEcsbSxyIikpXQorKyAgIlRBUkdFVF9IQVJEX0ZMT0FUIgorKyAgIkAKKysgICBmbW92LnNcdCUwLCAlMQorKyAgIGZtb3Yuc1x0JTAsICUxCisrICAgZm1vdi5zXHQlMCwgJTEKKysgICBmbGQuc1x0JTAsICUxCisrICAgZnN0LnNcdCUwLCAlMQorKyAgIG1vdlx0JTAsICUxCisrICAgbW92XHQlMCwgJTEKKysgICBsZC53XHQlMCwgJTEKKysgICBzdC53XHQlMCwgJTEiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0LDQsNCw0LDQsMiw0LDQsNCIpCisrICAgKHNldF9hdHRyICJ0eXBlIiAiZm12LGZsZHMsZm12Y3B1LGZsZHMsZnN0cyxhbHUsYWx1LGxvYWQsc3RvcmUiKV0pCisrCisrKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKm1vdmRmX2ZwY3AiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpERiAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIgICAgICI9ZixmLHIsZixtLHIscixtIikKKysJKG1hdGNoX29wZXJhbmQ6REYgMSAiZ2VuZXJhbF9vcGVyYW5kIiAgICAgICAgICAiIGYscixmLG0sZixyLG0sciIpKV0KKysgICJUQVJHRVRfSEFSRF9GTE9BVCIKKysgICJACisrICAgZm1vdi5kXHQlMCwgJTEKKysgICBmbW92LmRcdCUwLCAlMQorKyAgIGZtb3YuZFx0JTAsICUxCisrICAgZmxkLmRcdCUwLCAlMQorKyAgIGZzdC5kXHQlMCwgJTEKKysgICBtb3ZcdCUwLCAlMVw7bW92XHQlbTAsICVtMQorKyAgIGxkLmRcdCUwLCAlMQorKyAgIHN0LmRcdCUwLCAlMSIKKysKKysgICJUQVJHRVRfSEFSRF9GTE9BVAorKyAgICYmIHJlbG9hZF9jb21wbGV0ZWQKKysgICAmJiAoUkVHX1Aob3BlcmFuZHNbMF0pICYmICAoUkVHTk9fUkVHX0NMQVNTKFJFR05PKG9wZXJhbmRzWzBdKSkgPT0gR0VORVJBTF9SRUdTKSkKKysgICAmJiAoUkVHX1Aob3BlcmFuZHNbMV0pICYmICAoUkVHTk9fUkVHX0NMQVNTKFJFR05PKG9wZXJhbmRzWzFdKSkgPT0gR0VORVJBTF9SRUdTKSkiCisrICBbKHNldCAobWF0Y2hfZHVwIDApIChtYXRjaF9kdXAgMSkpCisrICAgKHNldCAobWF0Y2hfZHVwIDIpIChtYXRjaF9kdXAgMykpXQorKyAgIgorKyAgIHsKKysgICAgb3BlcmFuZHNbMl0gPSBnZW5faGlnaHBhcnQgKFNJbW9kZSwgb3BlcmFuZHNbMF0pOworKyAgICBvcGVyYW5kc1swXSA9IGdlbl9sb3dwYXJ0IChTSW1vZGUsIG9wZXJhbmRzWzBdKTsKKysgICAgb3BlcmFuZHNbM10gPSBnZW5faGlnaHBhcnQoU0ltb2RlLCBvcGVyYW5kc1sxXSk7CisrICAgIG9wZXJhbmRzWzFdID0gZ2VuX2xvd3BhcnQoU0ltb2RlLCBvcGVyYW5kc1sxXSk7CisrICAgfQorKyAgIgorKworKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCw0LDQsNCw0LDQsNCw0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJmbXYsZmxkZCxmbXZjcHUsZmxkZCxmc3RkLGFsdTIsbG9hZDIsc3RvcmUyIildKQorKworKworKyhkZWZpbmVfaW5zbiAibXVsc2YzIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0YgICAgICAgICAgMCAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgIj1mIikKKysJKG11bHQ6U0YgKG1hdGNoX29wZXJhbmQ6U0YgMSAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgImYiKQorKwkJIChtYXRjaF9vcGVyYW5kOlNGIDIgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICJmIikpKV0KKysgICJUQVJHRVRfSEFSRF9GTE9BVCIKKysgICJmbXVsLnNcdCUwLCAlMSwgJTIiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJmbXVsIildKQorKworKyhkZWZpbmVfaW5zbiAibm11bHNmMyIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNGICAgICAgICAgIDAgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICI9ZiIpCisrCShuZWc6U0YgKG11bHQ6U0YgKG1hdGNoX29wZXJhbmQ6U0YgMSAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgImYiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTRiAyICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiZiIpKSkpXQorKyAgIlRBUkdFVF9IQVJEX0ZMT0FUIgorKyAgImZubXVsLnNcdCUwLCAlMSwgJTIiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJmbXVsIildKQorKworKyhkZWZpbmVfcGVlcGhvbGUyCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTRiAgICAgICAgICAwICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysJKG11bHQ6U0YgKG1hdGNoX29wZXJhbmQ6U0YgMSAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrCQkgKG1hdGNoX29wZXJhbmQ6U0YgMiAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgIiIpKSkKKysgICAoc2V0IChtYXRjaF9vcGVyYW5kOlNGICAgICAgICAgIDMgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICIiKQorKwkobmVnOlNGIChtYXRjaF9kdXAgMCkpKV0KKysgICJUQVJHRVRfSEFSRF9GTE9BVCAmJgorKyAgIChwZWVwMl9yZWdfZGVhZF9wKDIsIG9wZXJhbmRzWzBdKSB8fCAoUkVHTk8ob3BlcmFuZHNbM10pID09IFJFR05PKG9wZXJhbmRzWzBdKSkpIgorKyAgWyhzZXQgKG1hdGNoX2R1cCAzKQorKwkobmVnOlNGIChtdWx0OlNGIChtYXRjaF9kdXAgMSkKKysJCQkgKG1hdGNoX2R1cCAyKSkpKV0KKyspCisrCisrCisrKGRlZmluZV9pbnNuICJtYWNzZjMiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTRiAgICAgICAgICAwICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiPWYiKQorKwkocGx1czpTRiAobXVsdDpTRiAobWF0Y2hfb3BlcmFuZDpTRiAxICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiZiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTRiAyICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiZiIpKQorKyAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0YgMyAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgIjAiKSkpXQorKyAgIlRBUkdFVF9IQVJEX0ZMT0FUIgorKyAgImZtYWMuc1x0JTAsICUxLCAlMiIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImZtdWwiKV0pCisrCisrKGRlZmluZV9pbnNuICJubWFjc2YzIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0YgICAgICAgICAgMCAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgIj1mIikKKysJKHBsdXM6U0YgIChuZWc6U0YgKG11bHQ6U0YgKG1hdGNoX29wZXJhbmQ6U0YgMSAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgImYiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0YgMiAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgImYiKSkpCisrICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0YgMyAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgIjAiKSkpXQorKyAgIlRBUkdFVF9IQVJEX0ZMT0FUIgorKyAgImZubWFjLnNcdCUwLCAlMSwgJTIiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJmbXVsIildKQorKworKyhkZWZpbmVfcGVlcGhvbGUyCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTRiAgICAgICAgICAwICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysJKG11bHQ6U0YgKG1hdGNoX29wZXJhbmQ6U0YgMSAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrCQkgKG1hdGNoX29wZXJhbmQ6U0YgMiAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgIiIpKSkKKysgICAoc2V0IChtYXRjaF9vcGVyYW5kOlNGICAgICAgICAgIDMgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICIiKQorKwkobWludXM6U0YKKysJIChtYXRjaF9kdXAgMykKKysJIChtYXRjaF9kdXAgMCkpKV0KKysgICJUQVJHRVRfSEFSRF9GTE9BVCAmJiBwZWVwMl9yZWdfZGVhZF9wKDIsIG9wZXJhbmRzWzBdKSIKKysgIFsoc2V0IChtYXRjaF9kdXAgMykKKysJKHBsdXM6U0YgIChuZWc6U0YgKG11bHQ6U0YgKG1hdGNoX2R1cCAxKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX2R1cCAyKSkpCisrICAgICAgICAgICAgICAgICAgKG1hdGNoX2R1cCAzKSkpXQorKykKKysKKysKKysoZGVmaW5lX2luc24gIm1zdWJhY3NmMyIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNGICAgICAgICAgIDAgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICI9ZiIpCisrCShtaW51czpTRiAobXVsdDpTRiAobWF0Y2hfb3BlcmFuZDpTRiAxICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiZiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0YgMiAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgImYiKSkKKysgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTRiAzICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiMCIpKSldCisrICAiVEFSR0VUX0hBUkRfRkxPQVQiCisrICAiZm1zYy5zXHQlMCwgJTEsICUyIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJ0eXBlIiAiZm11bCIpXSkKKysKKysoZGVmaW5lX3BlZXBob2xlMgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0YgICAgICAgICAgMCAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrCShtdWx0OlNGIChtYXRjaF9vcGVyYW5kOlNGIDEgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICIiKQorKwkJIChtYXRjaF9vcGVyYW5kOlNGIDIgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICIiKSkpCisrICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTRiAgICAgICAgICAzICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysJKG1pbnVzOlNGCisrCSAobWF0Y2hfZHVwIDApCisrCSAobWF0Y2hfZHVwIDMpKSldCisrICAiVEFSR0VUX0hBUkRfRkxPQVQgJiYgcGVlcDJfcmVnX2RlYWRfcCgyLCBvcGVyYW5kc1swXSkiCisrICBbKHNldCAobWF0Y2hfZHVwIDMpCisrCShtaW51czpTRiAgKG11bHQ6U0YgKG1hdGNoX2R1cCAxKQorKwkJCSAgICAobWF0Y2hfZHVwIDIpKQorKwkJICAgKG1hdGNoX2R1cCAzKSkpXQorKykKKysKKysoZGVmaW5lX2luc24gIm5tc3ViYWNzZjMiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTRiAgICAgICAgICAwICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiPWYiKQorKwkobWludXM6U0YgIChuZWc6U0YgKG11bHQ6U0YgKG1hdGNoX29wZXJhbmQ6U0YgMSAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgImYiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNGIDIgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICJmIikpKQorKyAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTRiAzICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiMCIpKSldCisrICAiVEFSR0VUX0hBUkRfRkxPQVQiCisrICAiZm5tc2Muc1x0JTAsICUxLCAlMiIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImZtdWwiKV0pCisrCisrCisrCisrKGRlZmluZV9pbnNuICJhZGRzZjMiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTRiAgICAgICAgICAwICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiPWYiKQorKwkocGx1czpTRiAobWF0Y2hfb3BlcmFuZDpTRiAxICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiZiIpCisrCQkgKG1hdGNoX29wZXJhbmQ6U0YgMiAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgImYiKSkpXQorKyAgIlRBUkdFVF9IQVJEX0ZMT0FUIgorKyAgImZhZGQuc1x0JTAsICUxLCAlMiIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImZtdWwiKV0pCisrCisrKGRlZmluZV9pbnNuICJzdWJzZjMiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTRiAgICAgICAgICAwICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiPWYiKQorKwkobWludXM6U0YgKG1hdGNoX29wZXJhbmQ6U0YgMSAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgImYiKQorKyAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNGIDIgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICJmIikpKV0KKysgICJUQVJHRVRfSEFSRF9GTE9BVCIKKysgICJmc3ViLnNcdCUwLCAlMSwgJTIiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJmbXVsIildKQorKworKworKyhkZWZpbmVfaW5zbiAibmVnc2YyIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0YgICAgICAgICAgMCAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgIj1mIikKKysJKG5lZzpTRiAobWF0Y2hfb3BlcmFuZDpTRiAxICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiZiIpKSldCisrICAiVEFSR0VUX0hBUkRfRkxPQVQiCisrICAiZm5lZy5zXHQlMCwgJTEiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJmbXYiKV0pCisrCisrKGRlZmluZV9pbnNuICJhYnNzZjIiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTRiAgICAgICAgICAwICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiPWYiKQorKwkoYWJzOlNGIChtYXRjaF9vcGVyYW5kOlNGIDEgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICJmIikpKV0KKysgICJUQVJHRVRfSEFSRF9GTE9BVCIKKysgICJmYWJzLnNcdCUwLCAlMSIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImZtdiIpXSkKKysKKysoZGVmaW5lX2luc24gInRydW5jZGZzZjIiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTRiAgICAgICAgICAwICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiPWYiKQorKwkoZmxvYXRfdHJ1bmNhdGU6U0YKKysgICAgICAgICAobWF0Y2hfb3BlcmFuZDpERiAxICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiZiIpKSldCisrICAiVEFSR0VUX0hBUkRfRkxPQVQiCisrICAiZmNhc3RkLnNcdCUwLCAlMSIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImZjYXN0IildKQorKworKyhkZWZpbmVfaW5zbiAiZXh0ZW5kc2ZkZjIiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpERiAgICAgICAgICAwICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiPWYiKQorKwkoZmxvYXRfZXh0ZW5kOkRGCisrICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0YgMSAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgImYiKSkpXQorKyAgIlRBUkdFVF9IQVJEX0ZMT0FUIgorKyAgImZjYXN0cy5kXHQlMCwgJTEiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJmY2FzdCIpXSkKKysKKysoZGVmaW5lX2luc24gIm11bGRmMyIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkRGICAgICAgICAgIDAgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICI9ZiIpCisrCShtdWx0OkRGIChtYXRjaF9vcGVyYW5kOkRGIDEgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICJmIikKKysJCSAobWF0Y2hfb3BlcmFuZDpERiAyICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiZiIpKSldCisrICAiVEFSR0VUX0hBUkRfRkxPQVQiCisrICAiZm11bC5kXHQlMCwgJTEsICUyIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJ0eXBlIiAiZm11bCIpXSkKKysKKysoZGVmaW5lX2luc24gIm5tdWxkZjMiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpERiAgICAgICAgICAwICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiPWYiKQorKwkobmVnOkRGIChtdWx0OkRGIChtYXRjaF9vcGVyYW5kOkRGIDEgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICJmIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6REYgMiAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgImYiKSkpKV0KKysgICJUQVJHRVRfSEFSRF9GTE9BVCIKKysgICJmbm11bC5kXHQlMCwgJTEsICUyIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJ0eXBlIiAiZm11bCIpXSkKKysKKysoZGVmaW5lX3BlZXBob2xlMgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REYgICAgICAgICAgMCAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrCShtdWx0OkRGIChtYXRjaF9vcGVyYW5kOkRGIDEgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICIiKQorKwkJIChtYXRjaF9vcGVyYW5kOkRGIDIgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICIiKSkpCisrICAgKHNldCAobWF0Y2hfb3BlcmFuZDpERiAgICAgICAgICAzICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysJKG5lZzpERiAobWF0Y2hfZHVwIDApKSldCisrICAiVEFSR0VUX0hBUkRfRkxPQVQgJiYKKysgICAocGVlcDJfcmVnX2RlYWRfcCgyLCBvcGVyYW5kc1swXSkgfHwgKFJFR05PKG9wZXJhbmRzWzNdKSA9PSBSRUdOTyhvcGVyYW5kc1swXSkpKSIKKysgIFsoc2V0IChtYXRjaF9kdXAgMykKKysJKG5lZzpERiAobXVsdDpERiAobWF0Y2hfZHVwIDEpCisrCQkJIChtYXRjaF9kdXAgMikpKSldCisrKQorKworKyhkZWZpbmVfaW5zbiAibWFjZGYzIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REYgICAgICAgICAgMCAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgIj1mIikKKysJKHBsdXM6REYgKG11bHQ6REYgKG1hdGNoX29wZXJhbmQ6REYgMSAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgImYiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6REYgMiAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgImYiKSkKKysgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkRGIDMgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICIwIikpKV0KKysgICJUQVJHRVRfSEFSRF9GTE9BVCIKKysgICJmbWFjLmRcdCUwLCAlMSwgJTIiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJmbXVsIildKQorKworKyhkZWZpbmVfaW5zbiAibXN1YmFjZGYzIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REYgICAgICAgICAgMCAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgIj1mIikKKysJKG1pbnVzOkRGIChtdWx0OkRGIChtYXRjaF9vcGVyYW5kOkRGIDEgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICJmIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpERiAyICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiZiIpKQorKyAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkRGIDMgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICIwIikpKV0KKysgICJUQVJHRVRfSEFSRF9GTE9BVCIKKysgICJmbXNjLmRcdCUwLCAlMSwgJTIiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJmbXVsIildKQorKworKyhkZWZpbmVfcGVlcGhvbGUyCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpERiAgICAgICAgICAwICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysJKG11bHQ6REYgKG1hdGNoX29wZXJhbmQ6REYgMSAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrCQkgKG1hdGNoX29wZXJhbmQ6REYgMiAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgIiIpKSkKKysgICAoc2V0IChtYXRjaF9vcGVyYW5kOkRGICAgICAgICAgIDMgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICIiKQorKwkobWludXM6REYKKysJIChtYXRjaF9kdXAgMCkKKysJIChtYXRjaF9kdXAgMykpKV0KKysgICJUQVJHRVRfSEFSRF9GTE9BVCAmJiBwZWVwMl9yZWdfZGVhZF9wKDIsIG9wZXJhbmRzWzBdKSIKKysgIFsoc2V0IChtYXRjaF9kdXAgMykKKysJKG1pbnVzOkRGICAobXVsdDpERiAobWF0Y2hfZHVwIDEpCisrCQkJICAgIChtYXRjaF9kdXAgMikpCisrCQkgICAobWF0Y2hfZHVwIDMpKSldCisrICApCisrCisrKGRlZmluZV9pbnNuICJubXN1YmFjZGYzIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REYgICAgICAgICAgMCAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgIj1mIikKKysJKG1pbnVzOkRGICAobmVnOkRGIChtdWx0OkRGIChtYXRjaF9vcGVyYW5kOkRGIDEgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICJmIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpERiAyICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiZiIpKSkKKysgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6REYgMyAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgIjAiKSkpXQorKyAgIlRBUkdFVF9IQVJEX0ZMT0FUIgorKyAgImZubXNjLmRcdCUwLCAlMSwgJTIiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJmbXVsIildKQorKworKyhkZWZpbmVfaW5zbiAibm1hY2RmMyIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkRGICAgICAgICAgIDAgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICI9ZiIpCisrCShwbHVzOkRGICAobmVnOkRGIChtdWx0OkRGIChtYXRjaF9vcGVyYW5kOkRGIDEgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICJmIikKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkRGIDIgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICJmIikpKQorKyAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkRGIDMgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICIwIikpKV0KKysgICJUQVJHRVRfSEFSRF9GTE9BVCIKKysgICJmbm1hYy5kXHQlMCwgJTEsICUyIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJ0eXBlIiAiZm11bCIpXSkKKysKKysoZGVmaW5lX3BlZXBob2xlMgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REYgICAgICAgICAgMCAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrCShtdWx0OkRGIChtYXRjaF9vcGVyYW5kOkRGIDEgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICIiKQorKwkJIChtYXRjaF9vcGVyYW5kOkRGIDIgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICIiKSkpCisrICAgKHNldCAobWF0Y2hfb3BlcmFuZDpERiAgICAgICAgICAzICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiIikKKysJKG1pbnVzOkRGCisrCSAobWF0Y2hfZHVwIDMpCisrCSAobWF0Y2hfZHVwIDApKSldCisrICAiVEFSR0VUX0hBUkRfRkxPQVQgJiYgcGVlcDJfcmVnX2RlYWRfcCgyLCBvcGVyYW5kc1swXSkiCisrICBbKHNldCAobWF0Y2hfZHVwIDMpCisrCShwbHVzOkRGICAobmVnOkRGIChtdWx0OkRGIChtYXRjaF9kdXAgMSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9kdXAgMikpKQorKyAgICAgICAgICAgICAgICAgIChtYXRjaF9kdXAgMykpKV0KKyspCisrCisrKGRlZmluZV9pbnNuICJhZGRkZjMiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpERiAgICAgICAgICAwICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiPWYiKQorKwkocGx1czpERiAobWF0Y2hfb3BlcmFuZDpERiAxICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiZiIpCisrCQkgKG1hdGNoX29wZXJhbmQ6REYgMiAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgImYiKSkpXQorKyAgIlRBUkdFVF9IQVJEX0ZMT0FUIgorKyAgImZhZGQuZFx0JTAsICUxLCAlMiIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImZtdWwiKV0pCisrCisrKGRlZmluZV9pbnNuICJzdWJkZjMiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpERiAgICAgICAgICAwICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiPWYiKQorKwkobWludXM6REYgKG1hdGNoX29wZXJhbmQ6REYgMSAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgImYiKQorKyAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkRGIDIgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICJmIikpKV0KKysgICJUQVJHRVRfSEFSRF9GTE9BVCIKKysgICJmc3ViLmRcdCUwLCAlMSwgJTIiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJmbXVsIildKQorKworKyhkZWZpbmVfaW5zbiAibmVnZGYyIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REYgICAgICAgICAgMCAiYXZyMzJfZnBfcmVnaXN0ZXJfb3BlcmFuZCIgIj1mIikKKysJKG5lZzpERiAobWF0Y2hfb3BlcmFuZDpERiAxICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiZiIpKSldCisrICAiVEFSR0VUX0hBUkRfRkxPQVQiCisrICAiZm5lZy5kXHQlMCwgJTEiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJmbXYiKV0pCisrCisrKGRlZmluZV9pbnNuICJhYnNkZjIiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpERiAgICAgICAgICAwICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIiAiPWYiKQorKwkoYWJzOkRGIChtYXRjaF9vcGVyYW5kOkRGIDEgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICJmIikpKV0KKysgICJUQVJHRVRfSEFSRF9GTE9BVCIKKysgICJmYWJzLmRcdCUwLCAlMSIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImZtdiIpXSkKKysKKysKKysoZGVmaW5lX2V4cGFuZCAiY21wZGYiCisrICBbKHNldCAoY2MwKQorKwkoY29tcGFyZTpERgorKwkgKG1hdGNoX29wZXJhbmQ6REYgMCAiZ2VuZXJhbF9vcGVyYW5kIiAiIikKKysJIChtYXRjaF9vcGVyYW5kOkRGIDEgImdlbmVyYWxfb3BlcmFuZCIgICIiKSkpXQorKyAgIlRBUkdFVF9IQVJEX0ZMT0FUIgorKyAgInsKKysgICBydHggdG1wcmVnOworKyAgIGlmICggIVJFR19QKG9wZXJhbmRzWzBdKSApCisrICAgICBvcGVyYW5kc1swXSA9IGZvcmNlX3JlZyhERm1vZGUsIG9wZXJhbmRzWzBdKTsKKysKKysgICBpZiAoICFSRUdfUChvcGVyYW5kc1sxXSkgKQorKyAgICAgb3BlcmFuZHNbMV0gPSBmb3JjZV9yZWcoREZtb2RlLCBvcGVyYW5kc1sxXSk7CisrCisrICAgYXZyMzJfY29tcGFyZV9vcDAgPSBvcGVyYW5kc1swXTsKKysgICBhdnIzMl9jb21wYXJlX29wMSA9IG9wZXJhbmRzWzFdOworKworKyAgIGVtaXRfaW5zbihnZW5fY21wZGZfaW50ZXJuYWwob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdKSk7CisrCisrICAgdG1wcmVnID0gZ2VuX3JlZ19ydHgoU0ltb2RlKTsKKysgICBlbWl0X2luc24oZ2VuX2ZwY2NfdG9fcmVnKHRtcHJlZykpOworKyAgIGVtaXRfaW5zbihnZW5fcmVnX3RvX2NjKHRtcHJlZykpOworKworKyAgIERPTkU7CisrICB9IgorKykKKysKKysoZGVmaW5lX2luc24gImNtcGRmX2ludGVybmFsIgorKyAgWyhzZXQgKHJlZzpDQyBGUENDX1JFR05VTSkKKysJKGNvbXBhcmU6Q0MKKysJIChtYXRjaF9vcGVyYW5kOkRGIDAgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICJmIikKKysJIChtYXRjaF9vcGVyYW5kOkRGIDEgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICJmIikpKV0KKysgICJUQVJHRVRfSEFSRF9GTE9BVCIKKysgIHsKKysgICBpZiAoIXJ0eF9lcXVhbF9wKGNjX3ByZXZfc3RhdHVzLm1kZXAuZnB2YWx1ZSwgU0VUX1NSQyhQQVRURVJOIChpbnNuKSkpICkKKysgICAgICByZXR1cm4gImZjbXAuZFx0JTAsICUxIjsKKysgICByZXR1cm4gIiI7CisrICB9CisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJmY21wZCIpCisrICAgKHNldF9hdHRyICJjYyIgImZwY29tcGFyZSIpXSkKKysKKysoZGVmaW5lX2V4cGFuZCAiY21wc2YiCisrICBbKHNldCAoY2MwKQorKwkoY29tcGFyZTpTRgorKwkgKG1hdGNoX29wZXJhbmQ6U0YgMCAiZ2VuZXJhbF9vcGVyYW5kIiAiIikKKysJIChtYXRjaF9vcGVyYW5kOlNGIDEgImdlbmVyYWxfb3BlcmFuZCIgICIiKSkpXQorKyAgIlRBUkdFVF9IQVJEX0ZMT0FUIgorKyAgInsKKysgICBydHggdG1wcmVnOworKyAgIGlmICggIVJFR19QKG9wZXJhbmRzWzBdKSApCisrICAgICBvcGVyYW5kc1swXSA9IGZvcmNlX3JlZyhTRm1vZGUsIG9wZXJhbmRzWzBdKTsKKysKKysgICBpZiAoICFSRUdfUChvcGVyYW5kc1sxXSkgKQorKyAgICAgb3BlcmFuZHNbMV0gPSBmb3JjZV9yZWcoU0Ztb2RlLCBvcGVyYW5kc1sxXSk7CisrCisrICAgYXZyMzJfY29tcGFyZV9vcDAgPSBvcGVyYW5kc1swXTsKKysgICBhdnIzMl9jb21wYXJlX29wMSA9IG9wZXJhbmRzWzFdOworKworKyAgIGVtaXRfaW5zbihnZW5fY21wc2ZfaW50ZXJuYWwob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdKSk7CisrCisrICAgdG1wcmVnID0gZ2VuX3JlZ19ydHgoU0ltb2RlKTsKKysgICBlbWl0X2luc24oZ2VuX2ZwY2NfdG9fcmVnKHRtcHJlZykpOworKyAgIGVtaXRfaW5zbihnZW5fcmVnX3RvX2NjKHRtcHJlZykpOworKworKyAgIERPTkU7CisrICB9IgorKykKKysKKysoZGVmaW5lX2luc24gImNtcHNmX2ludGVybmFsIgorKyAgWyhzZXQgKHJlZzpDQyBGUENDX1JFR05VTSkKKysJKGNvbXBhcmU6Q0MKKysJIChtYXRjaF9vcGVyYW5kOlNGIDAgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICJmIikKKysJIChtYXRjaF9vcGVyYW5kOlNGIDEgImF2cjMyX2ZwX3JlZ2lzdGVyX29wZXJhbmQiICJmIikpKV0KKysgICJUQVJHRVRfSEFSRF9GTE9BVCIKKysgIHsKKysgICBpZiAoIXJ0eF9lcXVhbF9wKGNjX3ByZXZfc3RhdHVzLm1kZXAuZnB2YWx1ZSwgU0VUX1NSQyhQQVRURVJOIChpbnNuKSkpICkKKysgICAgICByZXR1cm4gImZjbXAuc1x0JTAsICUxIjsKKysgICByZXR1cm4gIiI7CisrICB9CisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJmY21wcyIpCisrICAgKHNldF9hdHRyICJjYyIgImZwY29tcGFyZSIpXSkKKysKKysoZGVmaW5lX2luc24gImZwY2NfdG9fcmVnIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysJKHVuc3BlYzpTSSBbKHJlZzpDQyBGUENDX1JFR05VTSldCisrCQkgICBVTlNQRUNfRlBDQ19UT19SRUcpKV0KKysgICJUQVJHRVRfSEFSRF9GTE9BVCIKKysgICJmbW92LnNcdCUwLCBmc3IiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJmbXZjcHUiKV0pCisrCisrKGRlZmluZV9pbnNuICJyZWdfdG9fY2MiCisrICBbKHNldCAoY2MwKQorKwkodW5zcGVjOlNJIFsobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpXQorKwkJICAgVU5TUEVDX1JFR19UT19DQykpXQorKyAgIlRBUkdFVF9IQVJEX0ZMT0FUIgorKyAgIm11c2ZyXHQlMCIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImFsdSIpCisrICAgKHNldF9hdHRyICJjYyIgImZyb21fZnBjYyIpXSkKKysKKysoZGVmaW5lX2luc24gInN0bV9mcCIKKysgIFsodW5zcGVjIFsobWF0Y2hfb3BlcmFuZCAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCisrICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQgMSAiY29uc3RfaW50X29wZXJhbmQiICIiKQorKyAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kIDIgImNvbnN0X2ludF9vcGVyYW5kIiAiIildCisrCSAgIFVOU1BFQ19TVE1GUCldCisrICAiVEFSR0VUX0hBUkRfRkxPQVQiCisrICB7CisrICAgIGludCBjb3BfcmVnbGlzdCA9IElOVFZBTChvcGVyYW5kc1sxXSk7CisrCisrICAgIGlmIChJTlRWQUwob3BlcmFuZHNbMl0pICE9IDApCisrICAgICAgcmV0dXJuICJzdGNtLndcdGNwMCwgLS0lMCwgJUMxIjsKKysgICAgZWxzZQorKyAgICAgIHJldHVybiAic3RjbS53XHRjcDAsICUwLCAlQzEiOworKworKyAgICBpZiAoIGNvcF9yZWdsaXN0ICYgfjB4ZmYgKXsKKysgICAgICBvcGVyYW5kc1sxXSA9IEdFTl9JTlQoY29wX3JlZ2xpc3QgJiB+MHhmZik7CisrICAgICAgaWYgKElOVFZBTChvcGVyYW5kc1syXSkgIT0gMCkKKysgICAgICAgICByZXR1cm4gInN0Y20uZFx0Y3AwLCAtLSUwLCAlRDEiOworKyAgICAgIGVsc2UKKysgICAgICAgICByZXR1cm4gInN0Y20uZFx0Y3AwLCAlMCwgJUQxIjsKKysgICAgfQorKyAgfQorKyAgWyhzZXRfYXR0ciAidHlwZSIgImZzdG0iKQorKyAgIChzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJjYyIgIm5vbmUiKV0pCistLS0gL2Rldi9udWxsCisrKysgYi9nY2MvY29uZmlnL2F2cjMyL2xpYjFmdW5jcy5TCitAQCAtMCwwICsxLDI4NzQgQEAKKysvKiBNYWNybyBmb3IgbW92aW5nIGltbWVkaWF0ZSB2YWx1ZSB0byByZWdpc3Rlci4gKi8JCisrLm1hY3JvIG1vdl9pbW0JcmVnLCBpbW0KKysuaWYJKCgoXGltbSAmIDB4ZmZmZmYpID09IFxpbW0pIHx8ICgoXGltbSB8IDB4ZmZmMDAwMDApID09IFxpbW0pKQorKwltb3YJXHJlZywgXGltbQorKyNpZiBfX0FWUjMyX1VDX18gPj0gMgorKy5lbHNlaWYJKChcaW1tICYgMHhmZmZmKSA9PSAwKQorKwltb3ZoCVxyZWcsIGhpKFxpbW0pCisrCisrI2VuZGlmCisrLmVsc2UKKysJbW92CVxyZWcsIGxvKFxpbW0pCisrCW9yaAlccmVnLCBoaShcaW1tKQorKy5lbmRpZgorKy5lbmRtCisrCQorKwkKKysJIAorKy8qIEFkanVzdCB0aGUgdW5wYWNrZWQgZG91YmxlIG51bWJlciBpZiBpdCBpcyBhIHN1Ym5vcm1hbCBudW1iZXIuCisrICAgVGhlIGV4cG9uZW50IGFuZCBtYW50aXNzYSBwYWlyIGFyZSBzdG9yZWQKKysgICBpbiBbbWFudF9oaSxtYW50X2xvXSBhbmQgW2V4cF0uIEEgcmVnaXN0ZXIgd2l0aCB0aGUgY29ycmVjdCBzaWduIGJpdCBpbgorKyAgIHRoZSBNU0IgaXMgcGFzc2VkIGluIFtzaWduXS4gTmVlZHMgdHdvIHNjcmF0Y2gKKysgICByZWdpc3RlcnMgW3NjcmF0Y2gxXSBhbmQgW3NjcmF0Y2gyXS4gQW4gYWRqdXN0ZWQgYW5kIHBhY2tlZCBkb3VibGUgZmxvYXQKKysgICBpcyBwcmVzZW50IGluIFttYW50X2hpLG1hbnRfbG9dIGFmdGVyIG1hY3JvIGhhcyBleGVjdXRlZCAqLworKy5tYWNybyAgYWRqdXN0X3N1Ym5vcm1hbF9kZiAgICAgZXhwLCBtYW50X2xvLCBtYW50X2hpLCBzaWduLCBzY3JhdGNoMSwgc2NyYXRjaDIgCisrICAgICAgICAvKiBXZSBoYXZlIGFuIGV4cG9uZW50IHdoaWNoIGlzIDw9MCBpbmRpY2F0aW5nIGEgc3Vibm9ybWFsIG51bWJlcgorKyAgICAgICAgICAgQXMgaXQgc2hvdWxkIGJlIHN0b3JlZCBhcyBpZiB0aGUgZXhwb25lbnQgd2FzIDEgKGFsdGhvdWdoIHRoZQorKyAgICAgICAgICAgZXhwb25lbnQgZmllbGQgaXMgYWxsIHplcm9zIHRvIGluZGljYXRlIGEgc3Vibm9ybWFsIG51bWJlcikKKysgICAgICAgICAgIHdlIGhhdmUgdG8gc2hpZnQgZG93biB0aGUgbWFudGlzc2EgdG8gaXRzIGNvcnJlY3QgcG9zaXRpb24uICovCisrICAgICAgICBuZWcgICAgIFxleHAKKysgICAgICAgIHN1YiAgICAgXGV4cCwtMSAgICAgICAgICAgICAgICAgICAvKiBhbW91bnQgdG8gc2hpZnQgZG93biAqLworKyAgICAgICAgY3AudyAgICBcZXhwLDU0CisrICAgICAgICBicmxvICAgIDUwZiAgICAgICAgICAgICAgICAgICAgIC8qIGlmIG1vcmUgdGhhbiA1MyBzaGlmdCBzdGVwcywgdGhlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGlyZSBtYW50aXNzYSB3aWxsIGRpc2FwcGVhcgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRob3V0IGFueSByb3VuZGluZyB0byBvY2N1ciAqLworKyAgICAgICAgbW92ICAgICBcbWFudF9oaSwgMAorKyAgICAgICAgbW92ICAgICBcbWFudF9sbywgMAorKyAgICAgICAgcmptcCAgICA1MmYKKys1MDogICAgIAorKyAgICAgICAgc3ViICAgICBcZXhwLC0xMCAgICAgICAgICAgICAgICAvKiBkbyB0aGUgc2hpZnQgdG8gcG9zaXRpb24gdGhlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbnRpc3NhIGF0IHRoZSBzYW1lIHRpbWUKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90ZSEgdGhpcyBkb2VzIG5vdCBpbmNsdWRlIHRoZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCAxIHN0ZXAgc2hpZnQgdG8gYWRkIHRoZSBzaWduICovCisrIAorKyAgICAgICAgLyogd2hlbiBzaGlmdGluZywgc2F2ZSBhbGwgc2hpZnRlZCBvdXQgYml0cyBpbiBbc2NyYXRjaDJdLiB3ZSBtYXkgbmVlZCB0bworKyAgICAgICAgICAgbG9vayBhdCB0aGVtIHRvIG1ha2UgY29ycmVjdCByb3VuZGluZy4gKi8KKysgCisrICAgICAgICByc3ViICAgIFxzY3JhdGNoMSxcZXhwLDMyICAgICAgIC8qIGdldCBpbnZlcnRlZCBzaGlmdCBjb3VudCAqLworKyAgICAgICAgY3AudyAgICBcZXhwLDMyICAgICAgICAgICAgICAgICAvKiBoYW5kbGUgc2hpZnRzID49IDMyIHNlcGFyYXRlbHkgKi8KKysgICAgICAgIGJyaHMgICAgNTFmCisrIAorKyAgICAgICAgLyogc21hbGwgKDwzMikgc2hpZnQgYW1vdW50LCBib3RoIHdvcmRzIGFyZSBwYXJ0IG9mIHRoZSBzaGlmdCAqLworKyAgICAgICAgbHNsICAgICBcc2NyYXRjaDIsXG1hbnRfbG8sXHNjcmF0Y2gxICAgICAgICAgICAgICAgLyogc2F2ZSBiaXRzIHRvIHNoaWZ0IG91dCBmcm9tIGxzdyovCisrICAgICAgICBsc2wgICAgIFxzY3JhdGNoMSxcbWFudF9oaSxcc2NyYXRjaDEgICAgICAgICAgICAgICAvKiBnZXQgYml0cyBmcm9tIG1zdyBkZXN0aW5lZCBmb3IgbHN3Ki8KKysgICAgICAgIGxzciAgICAgXG1hbnRfbG8sXG1hbnRfbG8sXGV4cCAgICAgICAgICAgICAgICAgICAgIC8qIHNoaWZ0IGRvd24gbHN3ICovCisrICAgICAgICBsc3IgICAgIFxtYW50X2hpLFxtYW50X2hpLFxleHAgICAgICAgICAgICAgICAgICAgICAvKiBzaGlmdCBkb3duIG1zdyAqLworKyAgICAgICAgb3IgICAgICBcbWFudF9oaSxcc2NyYXRjaDEgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkIGJpdHMgZnJvbSBtc3cgd2l0aCBwcmVwYXJlZCBsc3cgKi8KKysgICAgICAgIHJqbXAgICAgNTBmCisrIAorKyAgICAgICAgLyogbGFyZ2UgKD49MzIpIHNoaWZ0IGFtb3VudCwgb25seSBsc3cgd2lsbCBoYXZlIGJpdHMgbGVmdCBhZnRlciBzaGlmdC4KKysgICAgICAgICAgIG5vdGUgdGhhdCBzaGlmdCBvcGVyYXRpb25zIHdpbGwgdXNlICgoc2hpZnQgY291bnQpIG1vZCAzMikgc28KKysgICAgICAgICAgIHdlIGRvIG5vdCBuZWVkIHRvIHN1YnRyYWN0IDMyIGZyb20gc2hpZnQgY291bnQuICovCisrNTE6CisrICAgICAgICBsc2wgICAgIFxzY3JhdGNoMixcbWFudF9oaSxcc2NyYXRjaDEgICAgICAgICAgICAgICAvKiBzYXZlIGJpdHMgdG8gc2hpZnQgb3V0IGZyb20gbXN3ICovCisrICAgICAgICBvciAgICAgIFxzY3JhdGNoMixcbWFudF9sbyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbHNvIHNhdmUgYWxsIGJpdHMgZnJvbSBsc3cgKi8KKysgICAgICAgIG1vdiAgICAgXG1hbnRfbG8sXG1hbnRfaGkgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1zdyAtPiBsc3cgKGkuZS4gInNoaWZ0IDMyIGZpcnN0IikgKi8KKysgICAgICAgIG1vdiAgICAgXG1hbnRfaGksMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNsZWFyIG1zdyAqLworKyAgICAgICAgbHNyICAgICBcbWFudF9sbyxcbWFudF9sbyxcZXhwICAgICAgICAgICAgICAgICAgICAgLyogbWFrZSByZXN0IG9mIHNoaWZ0IGluc2lkZSBsc3cgKi8KKysgCisrNTA6CisrICAgICAgICAvKiByZXN1bHQgaXMgYWxtb3N0IHJlYWR5IHRvIHJldHVybiwgZXhjZXB0IHRoYXQgbGVhc3Qgc2lnbmlmaWNhbnQgYml0CisrICAgICAgICAgICBhbmQgdGhlIHBhcnQgd2UgYWxyZWFkeSBzaGlmdGVkIG91dCBtYXkgY2F1c2UgdGhlIHJlc3VsdCB0byBiZQorKyAgICAgICAgICAgcm91bmRlZCAqLworKyAgICAgICAgYmxkICAgICBcbWFudF9sbywwICAgICAgICAgICAgICAgICAgIC8qIGdldCBiaXQgdG8gYmUgc2hpZnRlZCBvdXQgKi8KKysgICAgICAgIGJyY2MgICAgNTFmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZiBiaXQgd2FzIDAsIG5vIHJvdW5kaW5nICovCisrIAorKyAgICAgICAgLyogbXNiIG9mIHBhcnQgdG8gcmVtb3ZlIGlzIDEsIHNvIHJvdW5kaW5nIGRlcGVuZHMgb24gcmVzdCBvZiBiaXRzICovCisrICAgICAgICB0c3QgICAgIFxzY3JhdGNoMixcc2NyYXRjaDIgICAgICAgICAgICAgICAgICAgLyogZ2V0IHNoaWZ0ZWQgb3V0IHRhaWwgKi8KKysgICAgICAgIGJybmUgICAgNTBmICAgICAvKiBpZiByZXN0ID4gMCwgZG8gcm91bmQgKi8KKysgICAgICAgIGJsZCAgICAgXG1hbnRfbG8sMSAgICAgICAgICAgICAgICAgICAvKiB3ZSBoYXZlIHRvIGxvb2sgYXQgbHNiIGluIHJlc3VsdCAqLworKyAgICAgICAgYnJjYyAgICA1MWYgICAvKiBpZiBsc2IgaXMgMCwgZG9uJ3Qgcm91bmQgKi8KKysgCisrNTA6CisrICAgICAgICAvKiBzdWJub3JtYWwgcmVzdWx0IHJlcXVpcmVzIHJvdW5kaW5nCisrICAgICAgICAgICByb3VuZGluZyBtYXkgY2F1c2Ugc3Vibm9ybWFsIHRvIGJlY29tZSBzbWFsbGVzdCBub3JtYWwgbnVtYmVyCisrICAgICAgICAgICBsdWNraWx5LCBzbWFsbGVzdCBub3JtYWwgbnVtYmVyIGhhcyBleGFjdGx5IHRoZSByZXByZXNlbnRhdGlvbgorKyAgICAgICAgICAgd2UgZ290IGJ5IHJpcHBsaW5nIGEgb25lIGJpdCB1cCBmcm9tIG1hbnRpc3NhIGludG8gZXhwb25lbnQgZmllbGQuICovCisrICAgICAgICBzdWIgICAgIFxtYW50X2xvLC0xCisrICAgICAgICBzdWJjYyAgIFxtYW50X2hpLC0xCisrIAorKzUxOgorKyAgICAgICAgLyogc2hpZnQgYW5kIHJldHVybiBwYWNrZWQgZG91YmxlIHdpdGggY29ycmVjdCBzaWduICovCisrICAgICAgICByb2wgICAgIFxzaWduCisrICAgICAgICByb3IgICAgIFxtYW50X2hpCisrICAgICAgICByb3IgICAgIFxtYW50X2xvICAgICAgICAKKys1MjogICAgIAorKy5lbmRtCisrIAorKyAKKysvKiBBZGp1c3Qgc3Vibm9ybWFsIHNpbmdsZSBmbG9hdCBudW1iZXIgd2l0aCBleHBvbmVudCBbZXhwXQorKyAgIGFuZCBtYW50aXNzYSBbbWFudF0gYW5kIHJvdW5kLiAgICAqLworKy5tYWNybyAgYWRqdXN0X3N1Ym5vcm1hbF9zZiAgICAgc2YsIGV4cCwgbWFudCwgc2lnbiwgc2NyYXRjaAorKyAgICAgICAgLyogc3Vibm9ybWFsIG51bWJlciAqLworKyAgICAgICAgcnN1YiAgICBcZXhwLFxleHAsIDEgICAgICAgICAgICAvKiBzaGlmdCBhbW91bnQgKi8KKysgICAgICAgIGNwLncgICAgXGV4cCwgMjUKKysgICAgICAgIG1vdmhzICAgXG1hbnQsIDAgICAgICAgICAgICAgICAgCisrICAgICAgICBicmhzICAgIDkwZiAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiB6ZXJvICovCisrICAgICAgICByc3ViICAgIFxzY3JhdGNoLCBcZXhwLCAzMgorKyAgICAgICAgbHNsICAgICBcc2NyYXRjaCwgXG1hbnQsXHNjcmF0Y2gvKiBDaGVjayBpZiB0aGVyZSBhcmUgYW55IGJpdHMgc2V0CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBiaXRzIGRpc2NhcmRlZCBpbiB0aGUgbWFudGlzc2EgKi8KKysgICAgICAgIHNybmUgICAgXHNjcmF0Y2ggICAgICAgICAgICAgICAgLyogSWYgc28gc2V0IHRoZSBsc2Igb2YgdGhlIHNoaWZ0ZWQgbWFudGlzc2EgKi8gCisrICAgICAgICBsc3IgICAgIFxtYW50LFxtYW50LFxleHAgICAgICAgIC8qIFNoaWZ0IHRoZSBtYW50aXNzYSAqLworKyAgICAgICAgb3IgICAgICBcbWFudCwgXHNjcmF0Y2ggICAgICAgICAvKiBSb3VuZCBsc2IgaWYgYW55IGJpdHMgd2VyZSBzaGlmdGVkIG91dCAgKi8KKysgICAgICAgIC8qIFJvdW5kaW5nIDogICBGb3IgZXhwbGFpbmF0aW9uLCBzZWUgcm91bmRfc2YuICovCisrICAgICAgICBtb3YgICAgIFxzY3JhdGNoLCAweDdmICAgICAgICAgIC8qIFNldCByb3VuZGluZyBjb25zdGFudCAqLworKyAgICAgICAgYmxkICAgICBcbWFudCwgOCAgICAgICAgICAgICAgICAKKysgICAgICAgIHN1YmVxICAgXHNjcmF0Y2gsIC0xICAgICAgICAgICAgLyogRm9yIG9kZCBudW1iZXJzIHVzZSByb3VuZGluZyBjb25zdGFudCAweDgwICovCisrICAgICAgICBhZGQgICAgIFxtYW50LCBcc2NyYXRjaCAgICAgICAgIC8qIEFkZCByb3VuZGluZyBjb25zdGFudCB0byBtYW50aXNzYSAqLworKyAgICAgICAgLyogV2UgY2FuJ3Qgb3ZlcmZsb3cgYmVjYXVzZSBtYW50aXNzYSBpcyBhdCBsZWFzdCBzaGlmdGVkIG9uZSBwb3NpdGlvbgorKyAgICAgICAgICAgdG8gdGhlIHJpZ2h0IHNvIHRoZSBpbXBsaWNpdCBiaXQgaXMgemVyby4gV2UgY2FuIGhvd2V2ZXIgZ2V0IHRoZSBpbXBsaWNpdAorKyAgICAgICAgICAgYml0IHNldCBhZnRlciByb3VuZGluZyB3aGljaCBtZWFucyB0aGF0IHdlIGhhdmUgdGhlIGxvd2VzdCBub3JtYWwgbnVtYmVyCisrICAgICAgICAgICBidXQgdGhpcyBpcyBvayBzaW5jZSB0aGlzIGJpdCBoYXMgdGhlIHNhbWUgcG9zaXRpb24gYXMgdGhlIExTQiBvZiB0aGUKKysgICAgICAgICAgIGV4cG9uZW50ICovCisrICAgICAgICBsc3IgICAgIFxzZiwgXG1hbnQsIDcKKysgICAgICAgIC8qIFJvdGF0ZSBpbiBzaWduICovCisrICAgICAgICBsc2wgICAgIFxzaWduLCAxCisrICAgICAgICByb3IgICAgIFxzZgorKzkwOiAgICAgCisrLmVuZG0KKysgCisrIAorKy8qIFJvdW5kIHRoZSB1bnBhY2tlZCBkZiBudW1iZXIgd2l0aCBleHBvbmVudCBbZXhwXSBhbmQKKysgICBtYW50aXNzYSBbbWFudF9oaSwgbWFudF9sb10uIFVzZXMgc2NyYXRjaCByZWdpc3RlcgorKyAgIFtzY3JhdGNoXSAqLworKy5tYWNybyAgcm91bmRfZGYgICAgICAgIGV4cCwgbWFudF9sbywgbWFudF9oaSwgc2NyYXRjaAorKyAgICAgICAgbW92ICAgICBcc2NyYXRjaCwgMHgzZmYgICAgICAgICAvKiBSb3VuZGluZyBjb25zdGFudCAqLworKyAgICAgICAgYmxkICAgICBcbWFudF9sbywxMSAgICAgICAgICAgICAvKiBDaGVjayBpZiBsc2IgaW4gdGhlIGZpbmFsIHJlc3VsdCBpcyAgCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCAqLworKyAgICAgICAgc3ViZXEgICBcc2NyYXRjaCwgLTEgICAgICAgICAgICAvKiBBZGp1c3Qgcm91bmRpbmcgY29uc3RhbnQgdG8gMHg0MDAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcm91bmRpbmcgMC41IHVwd2FyZHMgKi8gICAKKysgICAgICAgIGFkZCAgICAgXG1hbnRfbG8sIFxzY3JhdGNoICAgICAgLyogUm91bmQgKi8KKysgICAgICAgIGFjciAgICAgXG1hbnRfaGkgICAgICAgICAgICAgICAgLyogSWYgb3ZlcmZsb3dpbmcgd2Uga25vdyB0aGF0CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlIGhhdmUgYWxsIHplcm9zIGluIHRoZSBiaXRzIG5vdAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZWQgb3V0IHNvIHdlIGNhbiBsZWF2ZSB0aGVtCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dCB3ZSBtdXN0IGluY3JlYXNlIHRoZSBleHBvbmVudCB3aXRoCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR3byBzaW5jZSB3ZSBoYWQgYW4gaW1wbGljaXQgYml0CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIGxvc3QgKyB0aGUgZXh0cmEgb3ZlcmZsb3cgYml0ICovCisrICAgICAgICBzdWJjcyAgIFxleHAsIC0yICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSBleHBvbmVudCAqLworKy5lbmRtICAgICAgICAgICAKKysgCisrLyogUm91bmQgc2luZ2xlIGZsb2F0IG51bWJlciBzdG9yZWQgaW4gW21hbnRdIGFuZCBbZXhwXSAqLworKy5tYWNybyAgcm91bmRfc2YgICAgICAgIGV4cCwgbWFudCwgc2NyYXRjaAorKyAgICAgICAgLyogUm91bmQ6ICAgICAgIAorKyAgICAgICAgICAgICAgICBGb3IgMC41IHdlIHJvdW5kIHRvIG5lYXJlc3QgZXZlbiBpbnRlZ2VyCisrICAgICAgICAgICAgICAgIGZvciBhbGwgb3RoZXIgY2FzZXMgd2Ugcm91bmQgdG8gbmVhcmVzdCBpbnRlZ2VyLgorKyAgICAgICAgICAgICAgICBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlIGRpZ2l0IGxlZnQgb2YgdGhlICJwb2ludCIgKC4pCisrICAgICAgICAgICAgICAgIGlzIDEgd2UgY2FuIGFkZCAweDgwIHRvIHRoZSBtYW50aXNzYSBzaW5jZSB0aGUKKysgICAgICAgICAgICAgICAgY29ybmVyIGNhc2UgMHgxODAgd2lsbCByb3VuZCB1cCB0byAweDIwMC4gSWYgdGhlCisrICAgICAgICAgICAgICAgIGRpZ2l0IGxlZnQgb2YgdGhlICJwb2ludCIgaXMgMCB3ZSB3aWxsIGhhdmUgdG8KKysgICAgICAgICAgICAgICAgYWRkIDB4N2Ygc2luY2UgdGhpcyB3aWxsIGdpdmUgMHhmZiBhbmQgaGVuY2UgYQorKyAgICAgICAgICAgICAgICB0cnVuY2F0aW9uL3JvdW5kaW5nIGRvd253YXJkcyBmb3IgdGhlIGNvcm5lcgorKyAgICAgICAgICAgICAgICBjYXNlIHdoZW4gdGhlIDkgbG93ZXN0IGJpdHMgYXJlIDB4MDgwICovCisrICAgICAgICBtb3YgICAgIFxzY3JhdGNoLCAweDdmICAvKiBTZXQgcm91bmRpbmcgY29uc3RhbnQgKi8KKysgICAgICAgIC8qIENoZWNrIGlmIHRoZSBtYW50aXNzYSBpcyBldmVuIG9yIG9kZCAqLworKyAgICAgICAgYmxkICAgICBcbWFudCwgOAorKyAgICAgICAgc3ViZXEgICBcc2NyYXRjaCwgLTEgICAgLyogUm91bmRpbmcgY29uc3RhbnQgc2hvdWxkIGJlIDB4ODAgKi8KKysgICAgICAgIGFkZCAgICAgXG1hbnQsIFxzY3JhdGNoCisrICAgICAgICBzdWJjcyAgIFxleHAsIC0yICAgICAgICAvKiBBZGp1c3QgZXhwb25lbnQgaWYgd2Ugb3ZlcmZsb3dlZCAqLyAgICAgICAgICAKKysuZW5kbQorKyAKKysgICAgICAgICAgICAgICAgIAorKyAKKysvKiBQYWNrIGEgc2luZ2xlIGZsb2F0IG51bWJlciBzdG9yZWQgaW4gW21hbnRdIGFuZCBbZXhwXQorKyAgIGludG8gYSBzaW5nbGUgZmxvYXQgbnVtYmVyIGluIFtzZl0gICovCisrLm1hY3JvICBwYWNrX3NmIHNmLCBleHAsIG1hbnQKKysgICAgICAgIGJsZCAgICAgXG1hbnQsMzEgICAgICAgICAgICAgICAgICAvKiBpbXBsaWNpdCBiaXQgdG8geiAqLworKyAgICAgICAgc3VibmUgICBcZXhwLDEgICAgICAgICAgICAgICAgICAgLyogaWYgc3Vibm9ybWFsIChpbXBsaWNpdCBiaXQgMCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3QgZXhwb25lbnQgdG8gc3RvcmFnZSBmb3JtYXQgKi8KKysgICAgICAgIAorKyAgICAgICAgbHNyICAgICBcc2YsIFxtYW50LCA3CisrICAgICAgICBiZmlucyAgIFxzZiwgXGV4cCwgMjQsIDgKKysuZW5kbSAgIAorKyAKKysvKiBQYWNrIGV4cG9uZW50IFtleHBdIGFuZCBtYW50aXNzYSBbbWFudF9oaSwgbWFudF9sb10KKysgICBpbnRvIFtkZl9oaSwgZGZfbG9dLiAgW2RmX2hpXSBpcyBzaGlmdGVkCisrICAgb25lIGJpdCB1cCBzbyB0aGUgc2lnbiBiaXQgY2FuIGJlIHNoaWZ0ZWQgaW50byBpdCAqLworKyAgICAgICAgCisrLm1hY3JvICBwYWNrX2RmICAgICAgICAgZXhwLCBtYW50X2xvLCBtYW50X2hpLCBkZl9sbywgZGZfaGkKKysgICAgICAgIGJsZCAgICAgXG1hbnRfaGksMzEgICAgICAgICAgICAgICAgICAvKiBpbXBsaWNpdCBiaXQgdG8geiAqLworKyAgICAgICAgc3VibmUgICBcZXhwLDEgICAgICAgICAgICAgICAgICAgLyogaWYgc3Vibm9ybWFsIChpbXBsaWNpdCBiaXQgMCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3QgZXhwb25lbnQgdG8gc3RvcmFnZSBmb3JtYXQgKi8KKysgCisrICAgICAgICBsc3IgICAgIFxtYW50X2xvLDExICAgICAgICAgICAgICAgICAgLyogc2hpZnQgYmFjayBsc3cgKi8KKysgICAgICAgIG9yICAgICAgXGRmX2xvLFxtYW50X2xvLFxtYW50X2hpPDwyMSAgICAgICAgICAvKiBjb21iaW5lIHdpdGggbG93IGJpdHMgZnJvbSBtc3cgKi8KKysgICAgICAgIGxzbCAgICAgXG1hbnRfaGksMSAgICAgICAgICAgICAgICAgICAvKiBnZXQgcmlkIG9mIGltcGxpY2l0IGJpdCAqLworKyAgICAgICAgbHNyICAgICBcbWFudF9oaSwxMSAgICAgICAgICAgICAgICAgIC8qIHNoaWZ0IGJhY2sgbXN3IGV4Y2VwdCBmb3Igb25lIHN0ZXAqLworKyAgICAgICAgb3IgICAgICBcZGZfaGksXG1hbnRfaGksXGV4cDw8MjEgICAgICAgICAgLyogY29tYmluZSBtc3cgd2l0aCBleHBvbmVudCAqLworKy5lbmRtCisrIAorKy8qIE5vcm1hbGl6ZSBzaW5nbGUgZmxvYXQgbnVtYmVyIHN0b3JlZCBpbiBbbWFudF0gYW5kIFtleHBdCisrICAgdXNpbmcgc2NyYXRjaCByZWdpc3RlciBbc2NyYXRjaF0gKi8KKysubWFjcm8gIG5vcm1hbGl6ZV9zZiAgICBleHAsIG1hbnQsIHNjcmF0Y2gKKysgICAgICAgIC8qIEFkanVzdCBleHBvbmVudCBhbmQgbWFudGlzc2EgKi8KKysgICAgICAgIGNseiAgICAgXHNjcmF0Y2gsIFxtYW50CisrICAgICAgICBzdWIgICAgIFxleHAsIFxzY3JhdGNoCisrICAgICAgICBsc2wgICAgIFxtYW50LCBcbWFudCwgXHNjcmF0Y2gKKysuZW5kbQorKyAKKysvKiBOb3JtYWxpemUgdGhlIGV4cG9uZW50IGFuZCBtYW50aXNzYSBwYWlyIHN0b3JlZAorKyAgIGluIFttYW50X2hpLG1hbnRfbG9dIGFuZCBbZXhwXS4gTmVlZHMgdHdvIHNjcmF0Y2gKKysgICByZWdpc3RlcnMgW3NjcmF0Y2gxXSBhbmQgW3NjcmF0Y2gyXS4gKi8KKysubWFjcm8gIG5vcm1hbGl6ZV9kZiAgICAgICAgICAgIGV4cCwgbWFudF9sbywgbWFudF9oaSwgc2NyYXRjaDEsIHNjcmF0Y2gyCisrICAgICAgICBjbHogICAgIFxzY3JhdGNoMSxcbWFudF9oaSAgICAgLyogQ2hlY2sgaWYgd2UgaGF2ZSB6ZXJvcyBpbiBoaWdoIGJpdHMgKi8KKysgICAgICAgIGJyZXEgICAgODBmICAgICAgICAgICAgICAgICAgICAgLyogTm8gbmVlZCBmb3Igc2NhbGluZyBpZiBubyB6ZXJvcyBpbiBoaWdoIGJpdHMgKi8KKysgICAgICAgIGJyY3MgICAgODFmICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgZm9yIGFsbCB6ZXJvcyAqLyAgICAgICAgICAgCisrIAorKyAgICAgICAgLyogc2hpZnQgYW1vdW50IGlzIHNtYWxsZXIgdGhhbiAzMiwgYW5kIGludm9sdmVzIGJvdGggbXN3IGFuZCBsc3cqLworKyAgICAgICAgcnN1YiAgICBcc2NyYXRjaDIsXHNjcmF0Y2gxLDMyICAvKiBzaGlmdCBtYW50aXNzYSAqLworKyAgICAgICAgbHNsICAgICBcbWFudF9oaSxcbWFudF9oaSxcc2NyYXRjaDEKKysgICAgICAgIGxzciAgICAgXHNjcmF0Y2gyLFxtYW50X2xvLFxzY3JhdGNoMgorKyAgICAgICAgb3IgICAgICBcbWFudF9oaSxcc2NyYXRjaDIKKysgICAgICAgIGxzbCAgICAgXG1hbnRfbG8sXG1hbnRfbG8sXHNjcmF0Y2gxCisrICAgICAgICBzdWIgICAgIFxleHAsXHNjcmF0Y2gxICAgICAgICAgIC8qIGFkanVzdCBleHBvbmVudCAqLworKyAgICAgICAgcmptcCAgICA4MGYgICAgICAgICAgICAgICAgICAgICAvKiBGaW5pc2hlZCAqLyAgCisrODE6CisrICAgICAgICAvKiBzaGlmdCBhbW91bnQgaXMgZ3JlYXRlciB0aGFuIDMyICovCisrICAgICAgICBjbHogICAgIFxzY3JhdGNoMSxcbWFudF9sbyAgICAgIC8qIHNoaWZ0IG1hbnRpc3NhICovCisrICAgICAgICBtb3ZjcyAgIFxzY3JhdGNoMSwgMAorKyAgICAgICAgc3ViY2MgICBcc2NyYXRjaDEsLTMyCisrICAgICAgICBsc2wgICAgIFxtYW50X2hpLFxtYW50X2xvLFxzY3JhdGNoMQorKyAgICAgICAgbW92ICAgICBcbWFudF9sbywwCisrICAgICAgICBzdWIgICAgIFxleHAsXHNjcmF0Y2gxICAgICAgICAgIC8qIGFkanVzdCBleHBvbmVudCAqLworKzgwOiAgICAgCisrLmVuZG0KKysgICAgICAgIAorKyAKKysvKiBGYXN0IGJ1dCBhcHByb3hpbWF0ZSBtdWx0aXBseSBvZiB0d28gNjQtYml0IG51bWJlcnMgdG8gZ2l2ZSBhIDY0IGJpdCByZXN1bHQuCisrICAgVGhlIG11bHRpcGxpY2F0aW9uIG9mIFthbF14W2JsXSBpcyBkaXNjYXJkZWQuCisrICAgT3BlcmFuZHMgaW4gW2FoXSwgW2FsXSwgW2JoXSwgW2JsXS4KKysgICBTY3JhdGNoIHJlZ2lzdGVycyBpbiBbc2hdLCBbc2xdLgorKyAgIFJldHVybnMgcmVzdWx0cyBpbiByZWdpc3RlcnMgW3JoXSwgW3JsXS4qLworKy5tYWNybyAgbXVsX2FwcHJveF9kZiAgIGFoLCBhbCwgYmgsIGJsLCByaCwgcmwsIHNoLCBzbAorKyAgICAgICAgbXVsdS5kICBcc2wsIFxhaCwgXGJsCisrICAgICAgICBtYWN1LmQgIFxzbCwgXGFsLCBcYmgKKysgICAgICAgIG11bHUuZCAgXHJsLCBcYWgsIFxiaAorKyAgICAgICAgYWRkICAgICBccmwsIFxzaAorKyAgICAgICAgYWNyICAgICBccmgKKysuZW5kbSAgICAgICAgICAgCisrIAorKyAKKysgICAgICAgIAorKyNpZiBkZWZpbmVkKExfYXZyMzJfZjY0X211bCkgfHwgZGVmaW5lZChMX2F2cjMyX2Y2NF9tdWxfZmFzdCkKKysgICAgICAgIC5hbGlnbiAgMgorKyNpZiBkZWZpbmVkKExfYXZyMzJfZjY0X211bCkKKysgICAgICAgIC5nbG9iYWwgX19hdnIzMl9mNjRfbXVsCisrICAgICAgICAudHlwZSAgX19hdnIzMl9mNjRfbXVsLEBmdW5jdGlvbgorK19fYXZyMzJfZjY0X211bDoKKysjZWxzZSAKKysgICAgICAgIC5nbG9iYWwgX19hdnIzMl9mNjRfbXVsX2Zhc3QKKysgICAgICAgIC50eXBlICBfX2F2cjMyX2Y2NF9tdWxfZmFzdCxAZnVuY3Rpb24KKytfX2F2cjMyX2Y2NF9tdWxfZmFzdDoKKysjZW5kaWYgICAgICAgICAgICAgICAgCisrICAgICAgICBvciAgICAgIHIxMiwgcjEwLCByMTEgPDwgMSAKKysgICAgICAgIGJyZXEgICBfX2F2cjMyX2Y2NF9tdWxfb3AxX3plcm8gICAgICAgIAorKworKyNpZiBkZWZpbmVkKExfYXZyMzJfZjY0X211bCkKKysJcHVzaG0JcjQtcjcsIGxyCisrI2Vsc2UKKysgICAgICAgIHN0bSAgICAgLS1zcCwgcjUscjYscjcsbHIgICAgICAgCisrI2VuZGlmCisrCisrI2RlZmluZSBBVlIzMl9GNjRfTVVMX09QMV9JTlRfQklUUyAxCisrI2RlZmluZSBBVlIzMl9GNjRfTVVMX09QMl9JTlRfQklUUyAxMAorKyNkZWZpbmUgQVZSMzJfRjY0X01VTF9SRVNfSU5UX0JJVFMgMTEKKysJCisrICAgICAgICAvKiBvcDEgaW4ge3IxMSxyMTB9Ki8KKysgICAgICAgIC8qIG9wMiBpbiB7cjkscjh9Ki8KKysgICAgICAgIGVvciAgICAgbHIsIHIxMSwgcjkgICAgICAgICAgICAgLyogTVNCKGxyKSA9IFNpZ24ob3AxKSBeIFNpZ24ob3AyKSAqLworKyAKKysgICAgICAgIC8qIFVucGFjayBvcDEgdG8gMS42MyBmb3JtYXQqLyAgICAgICAgCisrICAgICAgICAvKiBleHA6IHI3ICovCisrICAgICAgICAvKiBzZjogIHIxMSwgcjEwICovCisrCWJmZXh0dQlyNywgcjExLCAyMCwgMTEgLyogRXh0cmFjdCBleHBvbmVudCAqLworKworKwltb3YJcjUsIDEKKysKKysgICAgICAgIC8qIENoZWNrIGlmIG5vcm1hbGl6YXRpb24gaXMgbmVlZGVkICovCisrICAgICAgICBicmVxICAgIF9fYXZyMzJfZjY0X211bF9vcDFfc3Vibm9ybWFsIC8qSWYgbnVtYmVyIGlzIHN1Ym5vcm1hbCwgbm9ybWFsaXplIGl0ICovIAorKworKyAgICAgICAgbHNsICAgICByMTEsICgxMi1BVlIzMl9GNjRfTVVMX09QMV9JTlRfQklUUy0xKSAvKiBFeHRyYWN0IG1hbnRpc3NhLCBsZWF2ZSByb29tIGZvciBpbXBsaWNpdCBiaXQgKi8gCisrICAgICAgICBvciAgICAgIHIxMSwgcjExLCByMTA+PigzMi0oMTItQVZSMzJfRjY0X01VTF9PUDFfSU5UX0JJVFMtMSkpCisrICAgICAgICBsc2wgICAgIHIxMCwgKDEyLUFWUjMyX0Y2NF9NVUxfT1AxX0lOVF9CSVRTLTEpCisrCWJmaW5zCXIxMSwgcjUsIDMyIC0gKDEgKyBBVlIzMl9GNjRfTVVMX09QMV9JTlRfQklUUyksIDEgKyBBVlIzMl9GNjRfTVVMX09QMV9JTlRfQklUUyAvKiBJbnNlcnQgaW1wbGljaXQgYml0ICovCisrCisrCisrMjI6ICAgICAKKysgICAgICAgIC8qIFVucGFjayBvcDIgdG8gMTAuNTQgZm9ybWF0ICovCisrICAgICAgICAvKiBleHA6IHI2ICovCisrICAgICAgICAvKiBzZjogIHI5LCByOCAqLworKwliZmV4dHUJcjYsIHI5LCAyMCwgMTEgLyogRXh0cmFjdCBleHBvbmVudCAqLworKworKyAgICAgICAgLyogQ2hlY2sgaWYgbm9ybWFsaXphdGlvbiBpcyBuZWVkZWQgKi8KKysgICAgICAgIGJyZXEgICAgX19hdnIzMl9mNjRfbXVsX29wMl9zdWJub3JtYWwgLypJZiBudW1iZXIgaXMgc3Vibm9ybWFsLCBub3JtYWxpemUgaXQgKi8gCisrCisrCWxzbAlyOCwgMSAvKiBFeHRyYWN0IG1hbnRpc3NhLCBsZWF2ZSByb29tIGZvciBpbXBsaWNpdCBiaXQgKi8KKysJcm9sCXI5CQorKwliZmlucwlyOSwgcjUsIDMyIC0gKDEgKyBBVlIzMl9GNjRfTVVMX09QMl9JTlRfQklUUyksIDEgKyBBVlIzMl9GNjRfTVVMX09QMl9JTlRfQklUUyAvKiBJbnNlcnQgaW1wbGljaXQgYml0ICovCisrCisrMjM6ICAgICAKKysgCisrICAgICAgICAvKiBDaGVjayBpZiBhbnkgb3BlcmFuZHMgYXJlIE5hTiBvciBJTkYgKi8KKysgICAgICAgIGNwICAgICAgcjcsIDB4N2ZmCisrICAgICAgICBicmVxICAgIF9fYXZyMzJfZjY0X211bF9vcF9uYW5fb3JfaW5mIC8qIENoZWNrIG9wMSBmb3IgTmFOIG9yIEluZiAqLworKyAgICAgICAgY3AgICAgICByNiwgMHg3ZmYKKysgICAgICAgIGJyZXEgICAgX19hdnIzMl9mNjRfbXVsX29wX25hbl9vcl9pbmYgIC8qIENoZWNrIG9wMiBmb3IgTmFOIG9yIEluZiAqLworKyAKKysgCisrICAgICAgICAvKiBDYWxjdWxhdGUgbmV3IGV4cG9uZW50IGluIHIxMiovCisrICAgICAgICBhZGQgICAgIHIxMiwgcjcsIHI2CisrICAgICAgICBzdWIgICAgIHIxMiwgKDEwMjMtMSkKKysgCisrI2lmIGRlZmluZWQoTF9hdnIzMl9mNjRfbXVsKQorKwkvKiBEbyB0aGUgbXVsdGlwbGljYXRpb24uCisrICAgICAgICAgICBQbGFjZSByZXN1bHQgaW4gW3IxMSwgcjEwLCByNywgcjZdLiBUaGUgcmVzdWx0IGlzIGluIDExLjExNyBmb3JtYXQuICAqLworKyAgICAgICAgbXVsdS5kICByNCwgcjExLCByOAorKyAgICAgICAgbWFjdS5kICByNCwgcjEwLCByOQorKyAgICAgICAgbXVsdS5kICByNiwgcjEwLCByOAorKyAgICAgICAgbXVsdS5kICByMTAsIHIxMSwgcjkKKysJYWRkCXI3LCByNAorKwlhZGMJcjEwLCByMTAsIHI1CQorKwlhY3IJcjExCisrI2Vsc2UKKysJLyogRG8gdGhlIG11bHRpcGxpY2F0aW9uIHVzaW5nIGFwcHJveGltYXRlIGNhbGN1bGF0aW9uLiBkaXNjYXJkIHRoZSBhbCB4IGJsCisrCSAgIGNhbGN1bGF0aW9uLgorKyAgICAgICAgICAgUGxhY2UgcmVzdWx0IGluIFtyMTEsIHIxMCwgcjddLiBUaGUgcmVzdWx0IGlzIGluIDExLjg1IGZvcm1hdC4gICovCisrCisrICAgICAgICAvKiBEbyB0aGUgbXVsdGlwbGljYXRpb24gdXNpbmcgYXBwcm94aW1hdGUgY2FsY3VsYXRpb24uCisrICAgICAgICAgUGxhY2UgcmVzdWx0IGluIHIxMSwgcjEwLiBVc2UgcjcsIHI2IGFzIHNjcmF0Y2ggcmVnaXN0ZXJzICovCisrICAgICAgICBtdWx1LmQgIHI2LCByMTEsIHI4CisrICAgICAgICBtYWN1LmQgIHI2LCByMTAsIHI5CisrICAgICAgICBtdWx1LmQgIHIxMCwgcjExLCByOQorKyAgICAgICAgYWRkICAgICByMTAsIHI3CisrICAgICAgICBhY3IgICAgIHIxMQorKyNlbmRpZiAKKysgICAgICAgIC8qIEFkanVzdCBleHBvbmVudCBhbmQgbWFudGlzc2EgKi8KKysgICAgICAgIC8qIFtyMTJdOmV4cCwgW3IxMSwgcjEwXTptYW50IFtyNywgcjZdOnN0aWNreSBiaXRzICovCisrICAgICAgICAvKiBNYW50aXNzYSBtYXkgYmUgb2YgdGhlIGZvcm1hdCAwMDAwMDAwMDAwMC4weHh4IG9yIDAwMDAwMDAwMDAwLjF4eHguICovCisrICAgICAgICAvKiBJbiB0aGUgZmlyc3QgY2FzZSwgc2hpZnQgb25lIHBvcyB0byBsZWZ0LiovCisrICAgICAgICBibGQgICAgIHIxMSwgMzItQVZSMzJfRjY0X01VTF9SRVNfSU5UX0JJVFMtMQorKwlicmVxCTBmCQorKwlsc2wJcjcsIDEKKysJcm9sCXIxMAorKwlyb2wJcjExCisrCXN1YglyMTIsIDEKKyswOgkKKysgICAgICAgIGNwICAgICAgcjEyLCAwICAKKysgICAgICAgIGJybGUgICAgX19hdnIzMl9mNjRfbXVsX3Jlc19zdWJub3JtYWwgLypSZXN1bHQgd2FzIHN1Ym5vcm1hbC4qLworKyAKKysgICAgICAgIC8qIENoZWNrIGZvciBJbmYuICovCisrICAgICAgICBjcC53ICAgIHIxMiwgMHg3ZmYKKysgICAgICAgIGJyZ2UgICAgX19hdnIzMl9mNjRfbXVsX3Jlc19pbmYKKysKKysJLyogSW5zZXJ0IGV4cG9uZW50LiAqLworKwliZmlucwlyMTEsIHIxMiwgMjAsIDExICAKKysKKysgICAgICAgIC8qIFJlc3VsdCB3YXMgbm90IHN1Ym5vcm1hbC4gUGVyZm9ybSByb3VuZGluZy4gKi8KKysgICAgICAgIC8qIEZvciB0aGUgZmFzdCB2ZXJzaW9uIHdlIGRpc2NhcmQgdGhlIHN0aWNreSBiaXRzIGFuZCBhbHdheXMgcm91bmQKKysJICAgdGhlIGhhbGZ3YXljYXNlIHVwLiAqLworKzI0OgkKKysjaWYgZGVmaW5lZChMX2F2cjMyX2Y2NF9tdWwpCisrCW9yCXI2LCByNiwgcjEwIDw8IDMxIC8qIE9yIGluIHBhcml0eSBiaXQgaW50byBzdGlja3liaXRzICovCisrCW9yCXI3LCByNywgcjYgPj4gMSAgIC8qIE9yIHRvZ2V0aGVyIHN0aWNreSBhbmQgc3RpbGwgbWFrZSB0aGUgbXNiIAorKwkJCQkgICAgIG9mIHI3IHJlcHJlc2VudCB0aGUgaGFsZndheSBiaXQuICovCisrCWVvcmgJcjcsIDB4ODAwMAkgIC8qIFRvZ2dsZSBoYWxmd2F5IGJpdC4gKi8KKysJLyogV2Ugc2hvdWxkIG5vdyByb3VuZCB1cCBieSBhZGRpbmcgb25lIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzOgorKworKwkJaGFsZndheSAgIHN0aWNreXxwYXJpdHkgIHJvdW5kLXVwCisrCQkgICAwICAgICAgICAgICAgeCAgICAgICAgICAgbm8KKysJCSAgIDEgICAgICAgICAgICAwICAgICAgICAgICBubworKwkgICAgICAgICAgIDEgICAgICAgICAgICAxICAgICAgICAgICB5ZXMKKysKKysJICAgU2luY2Ugd2UgaGF2ZSBpbnZlcnRlZCB0aGUgaGFsZndheSBiaXQgd2UgY2FuIHVzZSB0aGUgc2F0dSBpbnN0cnVjdGlvbgorKyAgICAgICAgICAgYnkgc2F0dXJhdGluZyB0byAxIGJpdCB0byBpbXBsZW1lbnQgdGhpcy4gCisrCSovIAorKwlzYXR1CXI3ID4+IDAsIDEKKysjZWxzZQorKwlsc3IJcjcsIDMxCisrI2VuZGlmCQorKwlhZGQJcjEwLCByNworKwlhY3IJcjExCQorKyAgICAgICAgCisrICAgICAgICAvKiBJbnNlcnQgc2lnbiBiaXQqLworKyAgICAgICAgYmxkICAgICBsciwgMzEKKysgICAgICAgIGJzdCAgICAgcjExLCAzMQorKyAgICAgICAgCisrICAgICAgICAvKiBSZXR1cm4gcmVzdWx0IGluIFtyMTEscjEwXSAqLworKyNpZiBkZWZpbmVkKExfYXZyMzJfZjY0X211bCkKKysJcG9wbQlyNC1yNywgcGMKKysjZWxzZQorKyAgICAgICAgbGRtICAgICBzcCsrLCByNSwgcjYsIHI3LHBjCisrI2VuZGlmCisrIAorKyAKKytfX2F2cjMyX2Y2NF9tdWxfb3AxX3N1Ym5vcm1hbDoKKysJYW5kaAlyMTEsIDB4MDAwZiAvKiBSZW1vdmUgc2lnbiBiaXQgYW5kIGV4cG9uZW50ICovCisrICAgICAgICBjbHogICAgIHIxMiwgcjEwICAgIC8qIENvdW50IGxlYWRpbmcgemVyb3MgaW4gbHN3ICovCisrICAgICAgICBjbHogICAgIHI2LCByMTEgICAgIC8qIENvdW50IGxlYWRpbmcgemVyb3MgaW4gbXN3ICovCisrICAgICAgICBzdWJjcwlyMTIsIC0zMiArIEFWUjMyX0Y2NF9NVUxfT1AxX0lOVF9CSVRTIAorKwltb3ZjcwlyNiwgcjEyCisrCXN1YmNjCXI2LCBBVlIzMl9GNjRfTVVMX09QMV9JTlRfQklUUworKwljcC53CXI2LCAzMgorKwlicmdlCTBmCisrCQkKKysgICAgICAgIC8qIHNoaWZ0aW5nIGludm9sdmVzIGJvdGggbXN3IGFuZCBsc3cqLworKyAgICAgICAgcnN1YiAgICByMTIsIHI2LCAzMiAgLyogc2hpZnQgbWFudGlzc2EgKi8KKysgICAgICAgIGxzbCAgICAgcjExLCByMTEsIHI2CisrICAgICAgICBsc3IgICAgIHIxMiwgcjEwLCByMTIKKysgICAgICAgIG9yICAgICAgcjExLCByMTIKKysgICAgICAgIGxzbCAgICAgcjEwLCByMTAsIHI2CisrCXN1YglyNiwgMTItQVZSMzJfRjY0X01VTF9PUDFfSU5UX0JJVFMKKysgICAgICAgIHN1YiAgICAgcjcsIHI2ICAgICAgICAgIC8qIGFkanVzdCBleHBvbmVudCAqLworKyAgICAgICAgcmptcCAgICAyMmIgICAgICAgICAgICAgLyogRmluaXNoZWQgKi8gIAorKzA6CisrICAgICAgICAvKiBtc3cgaXMgemVybyBzbyBvbmx5IG5lZWQgdG8gY29uc2lkZXIgbHN3ICovCisrICAgICAgICBsc2wgICAgIHIxMSwgcjEwLCByNgorKwlicmVxCV9fYXZyMzJfZjY0X211bF9yZXNfemVybworKyAgICAgICAgbW92ICAgICByMTAsIDAKKysJc3ViCXI2LCAxMi1BVlIzMl9GNjRfTVVMX09QMV9JTlRfQklUUworKyAgICAgICAgc3ViICAgICByNywgcjYgICAgICAgICAgICAvKiBhZGp1c3QgZXhwb25lbnQgKi8KKysgICAgICAgIHJqbXAgICAgMjJiCisrCisrIAorK19fYXZyMzJfZjY0X211bF9vcDJfc3Vibm9ybWFsOgorKwlhbmRoCXI5LCAweDAwMGYgIC8qIFJlbW92ZSBzaWduIGJpdCBhbmQgZXhwb25lbnQgKi8KKysgICAgICAgIGNseiAgICAgcjEyLCByOCAgICAvKiBDb3VudCBsZWFkaW5nIHplcm9zIGluIGxzdyAqLworKyAgICAgICAgY2x6ICAgICByNSwgcjkgICAgIC8qIENvdW50IGxlYWRpbmcgemVyb3MgaW4gbXN3ICovCisrICAgICAgICBzdWJjcwlyMTIsIC0zMiArIEFWUjMyX0Y2NF9NVUxfT1AyX0lOVF9CSVRTIAorKwltb3ZjcwlyNSwgcjEyCisrCXN1YmNjCXI1LCBBVlIzMl9GNjRfTVVMX09QMl9JTlRfQklUUworKwljcC53CXI1LCAzMgorKwlicmdlCTBmCisrCQkKKysgICAgICAgIC8qIHNoaWZ0aW5nIGludm9sdmVzIGJvdGggbXN3IGFuZCBsc3cqLworKyAgICAgICAgcnN1YiAgICByMTIsIHI1LCAzMiAgLyogc2hpZnQgbWFudGlzc2EgKi8KKysgICAgICAgIGxzbCAgICAgcjksIHI5LCByNQorKyAgICAgICAgbHNyICAgICByMTIsIHI4LCByMTIKKysgICAgICAgIG9yICAgICAgcjksIHIxMgorKyAgICAgICAgbHNsICAgICByOCwgcjgsIHI1CisrCXN1YglyNSwgMTIgLSBBVlIzMl9GNjRfTVVMX09QMl9JTlRfQklUUworKyAgICAgICAgc3ViICAgICByNiwgcjUgICAgICAgICAgLyogYWRqdXN0IGV4cG9uZW50ICovCisrICAgICAgICByam1wICAgIDIzYiAgICAgICAgICAgICAvKiBGaW5pc2hlZCAqLyAgCisrMDoKKysgICAgICAgIC8qIG1zdyBpcyB6ZXJvIHNvIG9ubHkgbmVlZCB0byBjb25zaWRlciBsc3cgKi8KKysgICAgICAgIGxzbCAgICAgcjksIHI4LCByNQorKwlicmVxCV9fYXZyMzJfZjY0X211bF9yZXNfemVybworKyAgICAgICAgbW92ICAgICByOCwgMAorKwlzdWIJcjUsIDEyIC0gQVZSMzJfRjY0X01VTF9PUDJfSU5UX0JJVFMKKysgICAgICAgIHN1YiAgICAgcjYsIHI1ICAgICAgICAgICAgLyogYWRqdXN0IGV4cG9uZW50ICovCisrICAgICAgICByam1wICAgIDIzYgorKyAgICAgICAgICAgICAgICAKKysgCisrX19hdnIzMl9mNjRfbXVsX29wX25hbl9vcl9pbmY6CisrICAgICAgICAvKiBTYW1lIGNvZGUgZm9yIE9QMSBhbmQgT1AyKi8KKysgICAgICAgIC8qIFNpbmNlIHdlIGFyZSBoZXJlLCBhdCBsZWFzdCBvbmUgb2YgdGhlIE9QcyB3ZXJlIE5hTiBvciBJTkYqLworKwlhbmRoCXI5LCAweDAwMGYgIC8qIFJlbW92ZSBzaWduIGJpdCBhbmQgZXhwb25lbnQgKi8KKysJYW5kaAlyMTEsIDB4MDAwZiAgLyogUmVtb3ZlIHNpZ24gYml0IGFuZCBleHBvbmVudCAqLworKyAgICAgICAgLyogTWVyZ2UgdGhlIHJlZ3MgaW4gZWFjaCBvcGVyYW5kIHRvIGNoZWNrIGZvciB6ZXJvKi8KKysgICAgICAgIG9yICAgICAgcjExLCByMTAgLyogb3AxICovCisrICAgICAgICBvciAgICAgIHI5LCByOCAvKiBvcDIgKi8KKysgICAgICAgIC8qIENoZWNrIGlmIG9wMSBpcyBOYU4gb3IgSU5GICovCisrICAgICAgICBjcCAgICAgIHI3LCAweDdmZgorKyAgICAgICAgYnJuZSAgICBfX2F2cjMyX2Y2NF9tdWxfb3AxX25vdF9uYW5pbmYKKysgICAgICAgIC8qIG9wMSB3YXMgTmFOIG9yIElORi4qLworKyAgICAgICAgY3AgICAgICByMTEsIDAKKysgICAgICAgIGJybmUgICAgX19hdnIzMl9mNjRfbXVsX3Jlc19uYW4gLyogb3AxIHdhcyBOYU4uIFJlc3VsdCB3aWxsIGJlIE5hTiovCisrICAgICAgICAvKm9wMSB3YXMgSU5GLiBjaGVjayBpZiBvcDIgaXMgTmFOIG9yIElORiovCisrICAgICAgICBjcCAgICAgIHI2LCAweDdmZgorKyAgICAgICAgYnJuZSAgICBfX2F2cjMyX2Y2NF9tdWxfcmVzX2luZiAvKm9wMSB3YXMgSU5GLCBvcDIgd2FzIG5laXRoZXIgTmFOIG5vciBJTkYqLworKyAgICAgICAgLyogb3AxIGlzIElORiwgb3AyIGlzIGVpdGhlciBOYU4gb3IgSU5GKi8KKysgICAgICAgIGNwICAgICAgcjksIDAKKysgICAgICAgIGJyZXEgICAgX19hdnIzMl9mNjRfbXVsX3Jlc19pbmYgLypvcDIgd2FzIGFsc28gSU5GKi8KKysgICAgICAgIHJqbXAgICAgX19hdnIzMl9mNjRfbXVsX3Jlc19uYW4gLypvcDIgd2FzIE5hTiovCisrIAorK19fYXZyMzJfZjY0X211bF9vcDFfbm90X25hbmluZjoKKysgICAgICAgIC8qIG9wMSB3YXMgbm90IE5hTiBub3IgSU5GLiBUaGVuIG9wMiBtdXN0IGJlIE5hTiBvciBJTkYqLworKyAgICAgICAgY3AgICAgICByOSwgMAorKyAgICAgICAgYnJlcSAgICBfX2F2cjMyX2Y2NF9tdWxfcmVzX2luZiAvKm9wMiB3YXMgSU5GLCByZXR1cm4gSU5GKi8KKysgICAgICAgIHJqbXAgICBfX2F2cjMyX2Y2NF9tdWxfcmVzX25hbiAvKmVsc2UgcmV0dXJuIE5hTiovCisrICAgICAgICAKKytfX2F2cjMyX2Y2NF9tdWxfcmVzX3N1Ym5vcm1hbDovKiBNdWx0aXBseSByZXN1bHQgd2FzIHN1Ym5vcm1hbC4gKi8KKysjaWYgZGVmaW5lZChMX2F2cjMyX2Y2NF9tdWwpCisrCS8qIENoZWNrIGhvdyBtdWNoIHdlIG11c3Qgc2NhbGUgZG93biB0aGUgbWFudGlzc2EuICovCisrCW5lZwlyMTIKKysJc3ViCXIxMiwgLTEgICAgIC8qIFdlIGRvIG5vIGxvbmdlciBoYXZlIGFuIGltcGxpY2l0IGJpdC4gKi8KKysJc2F0dQlyMTIgPj4gMCwgNiAvKiBTYXR1cmF0ZSBzaGlmdCBhbW91bnQgdG8gbWF4IDYzLiAqLworKwljcC53CXIxMiwgMzIKKysJYnJnZQkwZgorKwkvKiBTaGlmdCBhbW91bnQgPDMyICovCisrCXJzdWIJcjgsIHIxMiwgMzIKKysJb3IJcjYsIHI3IAorKwlsc3IJcjcsIHI3LCByMTIKKysJbHNsCXI5LCByMTAsIHI4CisrCW9yCXI3LCByOQorKwlsc3IJcjEwLCByMTAsIHIxMgorKwlsc2wJcjksIHIxMSwgcjgKKysJb3IJcjEwLCByOQorKwlsc3IJcjExLCByMTEsIHIxMgorKwlyam1wCTI0YgorKzA6CisrCS8qIFNoaWZ0IGFtb3VudCA+PTMyICovCisrCXJzdWIJcjgsIHIxMiwgMzIKKysJbW92ZXEJcjksIDAKKysJYnJlcQkwZgorKwlsc2wJcjksIHIxMSwgcjgKKyswOgkKKysJb3IJcjYsIHI3CisrCW9yCXI2LCByNiwgcjEwIDw8IDEgCisrCWxzcglyMTAsIHIxMCwgcjEyCisrCW9yCXI3LCByOSwgcjEwCisrCWxzcglyMTAsIHIxMSwgcjEyCisrCW1vdglyMTEsIDAJCisrCXJqbXAJMjRiCQkJCQorKyNlbHNlCisrCS8qIEZsdXNoIHRvIHplcm8gZm9yIHRoZSBmYXN0IHZlcnNpb24uICovCisrICAgICAgICBtb3YgICAgIHIxMSwgbHIgLypHZXQgY29ycmVjdCBzaWduKi8KKysgICAgICAgIGFuZGggICAgcjExLCAweDgwMDAsIENPSAorKyAgICAgICAgbW92ICAgICByMTAsIDAKKysgICAgICAgIGxkbSAgICAgc3ArKywgcjUsIHI2LCByNyxwYworKyNlbmRpZgorKworK19fYXZyMzJfZjY0X211bF9yZXNfemVybzovKiBNdWx0aXBseSByZXN1bHQgaXMgemVyby4gKi8KKysgICAgICAgIG1vdiAgICAgcjExLCBsciAvKkdldCBjb3JyZWN0IHNpZ24qLworKyAgICAgICAgYW5kaCAgICByMTEsIDB4ODAwMCwgQ09ICisrICAgICAgICBtb3YgICAgIHIxMCwgMAorKyNpZiBkZWZpbmVkKExfYXZyMzJfZjY0X211bCkKKysJcG9wbQlyNC1yNywgcGMKKysjZWxzZQorKyAgICAgICAgbGRtICAgICBzcCsrLCByNSwgcjYsIHI3LHBjCisrI2VuZGlmCisrIAorK19fYXZyMzJfZjY0X211bF9yZXNfbmFuOiAgICAgICAgLyogUmV0dXJuIE5hTi4gKi8KKysgICAgICAgIG1vdiAgICAgcjExLCAtMQorKyAgICAgICAgbW92ICAgICByMTAsIC0xCisrI2lmIGRlZmluZWQoTF9hdnIzMl9mNjRfbXVsKQorKwlwb3BtCXI0LXI3LCBwYworKyNlbHNlCisrICAgICAgICBsZG0gICAgIHNwKyssIHI1LCByNiwgcjcscGMKKysjZW5kaWYKKysgICAgICAgIAorK19fYXZyMzJfZjY0X211bF9yZXNfaW5mOiAgICAgICAgLyogUmV0dXJuIElORi4gKi8KKysJbW92CXIxMSwgMHhmZmYwMDAwMAorKyAgICAgICAgYmxkICAgICBsciwgMzEKKysgICAgICAgIGJzdCAgICAgcjExLCAzMQorKyAgICAgICAgbW92ICAgICByMTAsIDAKKysjaWYgZGVmaW5lZChMX2F2cjMyX2Y2NF9tdWwpCisrCXBvcG0JcjQtcjcsIHBjCisrI2Vsc2UKKysgICAgICAgIGxkbSAgICAgc3ArKywgcjUsIHI2LCByNyxwYworKyNlbmRpZgorKworK19fYXZyMzJfZjY0X211bF9vcDFfemVybzoKKysgICAgICAgIC8qIEdldCBzaWduICovCisrICAgICAgICBlb3IgICAgIHIxMSwgcjExLCByOQorKyAgICAgICAgYW5kaCAgICByMTEsIDB4ODAwMCwgQ09IICAKKysgICAgICAgIC8qIENoZWNrIGlmIG9wMiBpcyBJbmYgb3IgTmFOLiAqLworKyAgICAgICAgYmZleHR1ICByMTIsIHI5LCAyMCwgMTEKKysgICAgICAgIGNwLncgICAgcjEyLCAweDdmZgorKyAgICAgICAgcmV0bmUgICByMTIgICAgIC8qIFJldHVybiAwLjAgKi8KKysgICAgICAgIC8qIFJldHVybiBOYU4gKi8KKysgICAgICAgIG1vdiAgICAgcjEwLCAtMQorKyAgICAgICAgbW92ICAgICByMTEsIC0xCisrICAgICAgICByZXQgICAgIHIxMgorKyAgICAgICAgIAorKworKyAKKysjZW5kaWYKKysgICAgICAgICAgICAgICAgCisrIAorKyNpZiAgZGVmaW5lZChMX2F2cjMyX2Y2NF9hZGRzdWIpIHx8IGRlZmluZWQoTF9hdnIzMl9mNjRfYWRkc3ViX2Zhc3QpCisrICAgICAgICAuYWxpZ24gIDIKKysKKytfX2F2cjMyX2Y2NF9zdWJfZnJvbV9hZGQ6CisrICAgICAgICAvKiBTd2l0Y2ggc2lnbiBvbiBvcDIgKi8KKysgICAgICAgIGVvcmggICAgcjksIDB4ODAwMAorKworKyNpZiAgZGVmaW5lZChMX2F2cjMyX2Y2NF9hZGRzdWJfZmFzdCkKKysgICAgICAgIC5nbG9iYWwgX19hdnIzMl9mNjRfc3ViX2Zhc3QKKysgICAgICAgIC50eXBlICBfX2F2cjMyX2Y2NF9zdWJfZmFzdCxAZnVuY3Rpb24KKytfX2F2cjMyX2Y2NF9zdWJfZmFzdDoKKysjZWxzZQkKKysgICAgICAgIC5nbG9iYWwgX19hdnIzMl9mNjRfc3ViCisrICAgICAgICAudHlwZSAgX19hdnIzMl9mNjRfc3ViLEBmdW5jdGlvbgorK19fYXZyMzJfZjY0X3N1YjoKKysjZW5kaWYKKysgICAgICAgIAorKyAgICAgICAgLyogb3AxIGluIHtyMTEscjEwfSovCisrICAgICAgICAvKiBvcDIgaW4ge3I5LHI4fSovCisrCisrI2lmICBkZWZpbmVkKExfYXZyMzJfZjY0X2FkZHN1Yl9mYXN0KQorKyAgICAgICAgLyogSWYgb3AyIGlzIHplcm8ganVzdCByZXR1cm4gb3AxICovCisrICAgICAgICBvciAgICAgIHIxMiwgcjgsIHI5IDw8IDEKKysgICAgICAgIHJldGVxICAgcjEyIAorKyNlbmRpZgorKyAKKysgICAgICAgIC8qIENoZWNrIHNpZ25zICovCisrICAgICAgICBlb3IgICAgIHIxMiwgcjExLCByOQorKyAgICAgICAgLyogRGlmZmVyZW50IHNpZ25zLCB1c2UgYWRkaXRpb24uICovCisrICAgICAgICBicm1pICAgIF9fYXZyMzJfZjY0X2FkZF9mcm9tX3N1YgorKyAKKysgICAgICAgIHN0bSAgICAgLS1zcCwgcjUsIHI2LCByNywgbHIKKysgCisrICAgICAgICAvKiBHZXQgc2lnbiBvZiBvcDEgaW50byByMTIgKi8KKysgICAgICAgIG1vdiAgICAgcjEyLCByMTEKKysgICAgICAgIGFuZGggICAgcjEyLCAweDgwMDAsIENPSCAgICAgICAgICAgICAgICAKKysgCisrICAgICAgICAvKiBSZW1vdmUgc2lnbiBmcm9tIG9wZXJhbmRzICovCisrICAgICAgICBjYnIgICAgIHIxMSwgMzEKKysgICAgICAgIGNiciAgICAgcjksIDMxCisrIAorKyAgICAgICAgLyogUHV0IHRoZSBsYXJnZXN0IG51bWJlciBpbiBbcjExLCByMTBdCisrICAgICAgICAgICBhbmQgdGhlIHNtYWxsZXN0IG51bWJlciBpbiBbcjksIHI4XSAqLworKyAgICAgICAgY3AgICAgICByMTAsIHI4CisrICAgICAgICBjcGMgICAgIHIxMSwgcjkKKysgICAgICAgIGJyaHMgICAgMWYgLyogU2tpcCBzd2FwIGlmIG9wZXJhbmRzIGFscmVhZHkgY29ycmVjdGx5IG9yZGVyZWQqLworKyAgICAgICAgLyogT3BlcmFuZHMgd2VyZSBub3QgY29ycmVjdGx5IG9yZGVyZWQsIHN3YXAgdGhlbSovCisrICAgICAgICBtb3YgICAgIHI3LCByMTEKKysgICAgICAgIG1vdiAgICAgcjExLCByOQorKyAgICAgICAgbW92ICAgICByOSwgcjcKKysgICAgICAgIG1vdiAgICAgcjcsIHIxMAorKyAgICAgICAgbW92ICAgICByMTAsIHI4CisrICAgICAgICBtb3YgICAgIHI4LCByNworKyAgICAgICAgZW9yaCAgICByMTIsIDB4ODAwMCAvKiBJbnZlcnQgc2lnbiBpbiByMTIqLworKzE6ICAgICAgCisrICAgICAgICAvKiBVbnBhY2sgbGFyZ2VzdCBvcGVyYW5kIC0gb3BIICovICAgICAgCisrICAgICAgICAvKiBleHA6IHI3ICovCisrICAgICAgICAvKiBzZjogIHIxMSwgcjEwICovCisrICAgICAgICBsc3IgICAgIHI3LCByMTEsIDIwIC8qIEV4dHJhY3QgZXhwb25lbnQgKi8KKysgICAgICAgIGxzbCAgICAgcjExLCAxMSAvKiBFeHRyYWN0IG1hbnRpc3NhLCBsZWF2ZSByb29tIGZvciBpbXBsaWNpdCBiaXQgKi8gCisrICAgICAgICBvciAgICAgIHIxMSwgcjExLCByMTA+PjIxCisrICAgICAgICBsc2wgICAgIHIxMCwgMTEKKysgICAgICAgIHNiciAgICAgcjExLCAzMSAvKiBJbnNlcnQgaW1wbGljaXQgYml0ICovCisrIAorKyAgICAgICAgCisrICAgICAgICAvKiBVbnBhY2sgc21hbGxlc3Qgb3BlcmFuZCAtIG9wTCAqLworKyAgICAgICAgLyogZXhwOiByNiAqLworKyAgICAgICAgLyogc2Y6ICByOSwgcjggKi8KKysgICAgICAgIGxzciAgICAgcjYsIHI5LCAyMCAvKiBFeHRyYWN0IGV4cG9uZW50ICovCisrICAgICAgICBicmVxICAgIF9fYXZyMzJfZjY0X3N1Yl9vcExfc3Vibm9ybWFsIC8qIElmIGVpdGhlciB6ZXJvIG9yIHN1Ym5vcm1hbCAqLworKyAgICAgICAgbHNsICAgICByOSwgMTEgLyogRXh0cmFjdCBtYW50aXNzYSwgbGVhdmUgcm9vbSBmb3IgaW1wbGljaXQgYml0ICovIAorKyAgICAgICAgb3IgICAgICByOSwgcjksIHI4Pj4yMQorKyAgICAgICAgbHNsICAgICByOCwgMTEKKysgICAgICAgIHNiciAgICAgcjksIDMxIC8qIEluc2VydCBpbXBsaWNpdCBiaXQgKi8KKysgCisrCisrX19hdnIzMl9mNjRfc3ViX29wTF9zdWJub3JtYWxfZG9uZTogICAgIAorKyAgICAgICAgLyogb3BIIGlzIE5hTiBvciBJbmYuICovCisrICAgICAgICBjcC53ICAgIHI3LCAweDdmZgorKyAgICAgICAgYnJlcSAgICBfX2F2cjMyX2Y2NF9zdWJfb3BIX25hbl9vcl9pbmYKKysKKysgICAgICAgIC8qIEdldCBzaGlmdCBhbW91bnQgdG8gc2NhbGUgbWFudGlzc2Egb2Ygb3AyLiAqLworKyAgICAgICAgcnN1YiAgICByNiwgcjcKKysgICAgICAgIGJyZXEgICAgX19hdnIzMl9mNjRfc3ViX3NoaWZ0X2RvbmUgLyogTm8gbmVlZCB0byBzaGlmdCwgZXhwb25lbnRzIGFyZSBlcXVhbCovCisrIAorKyAgICAgICAgLyogU2NhbGUgbWFudGlzc2EgW3I5LCByOF0gd2l0aCBhbW91bnQgW3I2XS4KKysgICAgICAgIFVzZXMgc2NyYXRjaCByZWdpc3RlcnMgW3I1XSBhbmQgW2xyXS4KKysgICAgICAgIEluIElFRUUgbW9kZTpNdXN0IG5vdCBmb3JnZXQgdGhlIHN0aWNreSBiaXRzIHdlIGludGVuZCB0byBzaGlmdCBvdXQuICovCisrIAorKyAgICAgICAgcnN1YiAgICByNSxyNiwzMiAvKiBnZXQgKDMyIC0gc2hpZnQgY291bnQpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiBzaGlmdCBjb3VudCA+IDMyIHdlIGdldCBhCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZ2F0aXZlIHZhbHVlLCBidXQgdGhhdCB3aWxsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmsgYXMgd2VsbCBpbiB0aGUgY29kZSBiZWxvdy4pICovCisrIAorKyAgICAgICAgY3AudyAgICByNiwzMiAgICAgICAvKiBoYW5kbGUgc2hpZnRzID49IDMyIHNlcGFyYXRlbHkgKi8KKysgICAgICAgIGJyaHMgICAgX19hdnIzMl9mNjRfc3ViX2xvbmdzaGlmdAorKyAKKysgICAgICAgIC8qIHNtYWxsICg8MzIpIHNoaWZ0IGFtb3VudCwgYm90aCB3b3JkcyBhcmUgcGFydCBvZiB0aGUgc2hpZnQKKysgICAgICAgICAgIGZpcnN0IHJlbWVtYmVyIHdoZXRoZXIgcGFydCB0aGF0IGlzIGxvc3QgY29udGFpbnMgYW55IDEgYml0cyAuLi4gKi8KKysgICAgICAgIGxzbCAgICAgbHIscjgscjUgIC8qIHNoaWZ0IGF3YXkgYml0cyB0aGF0IGFyZSBwYXJ0IG9mCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBtYW50aXNzYS4gb25seSBwYXJ0IHRoYXQgZ29lcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gbHIgYXJlIGJpdHMgdGhhdCB3aWxsIGJlIGxvc3QgKi8KKysgCisrICAgICAgICAvKiAuLi4gYW5kIG5vdyB0byB0aGUgYWN0dWFsIHNoaWZ0ICovCisrICAgICAgICBsc2wgICAgIHI1LHI5LHI1ICAvKiBnZXQgYml0cyBmcm9tIG1zdyBkZXN0aW5lZCBmb3IgbHN3Ki8KKysgICAgICAgIGxzciAgICAgcjgscjgscjYgIC8qIHNoaWZ0IGRvd24gbHN3IG9mIG1hbnRpc3NhICovCisrICAgICAgICBsc3IgICAgIHI5LHI5LHI2ICAvKiBzaGlmdCBkb3duIG1zdyBvZiBtYW50aXNzYSAqLworKyAgICAgICAgb3IgICAgICByOCxyNSAgICAgLyogY29tYmluZSB0aGVzZSBiaXRzIHdpdGggcHJlcGFyZWQgbHN3Ki8KKysjaWYgIGRlZmluZWQoTF9hdnIzMl9mNjRfYWRkc3ViKQorKyAgICAgICAgY3AudyAgICBsciwwICAgICAgLyogaWYgYW55ICcxJyBiaXQgaW4gcGFydCB3ZSBsb3N0IC4uLiovCisrICAgICAgICBzcm5lICAgIGxyCisrICAgICAgICBvciAgICAgIHI4LCBsciAgICAgLyogLi4uIHdlIG5lZWQgdG8gc2V0IHN0aWNreSBiaXQqLworKyNlbmRpZgorKyAgICAgICAgCisrX19hdnIzMl9mNjRfc3ViX3NoaWZ0X2RvbmU6ICAgICAKKysgICAgICAgIC8qIE5vdyBzdWJ0cmFjdCB0aGUgbWFudGlzc2FzLiAqLworKyAgICAgICAgc3ViICAgICByMTAsIHI4CisrICAgICAgICBzYmMgICAgIHIxMSwgcjExLCByOQorKyAKKysgICAgICAgIC8qIE5vcm1hbGl6ZSB0aGUgZXhwb25lbnQgYW5kIG1hbnRpc3NhIHBhaXIgc3RvcmVkIGluCisrICAgICAgICBbcjExLHIxMF0gYW5kIGV4cG9uZW50IGluIFtyN10uIE5lZWRzIHR3byBzY3JhdGNoIHJlZ2lzdGVycyBbcjZdIGFuZCBbbHJdLiAqLworKyAgICAgICAgY2x6ICAgICByNixyMTEgICAgIC8qIENoZWNrIGlmIHdlIGhhdmUgemVyb3MgaW4gaGlnaCBiaXRzICovCisrICAgICAgICBicmVxICAgIF9fYXZyMzJfZjY0X3N1Yl9sb25nbm9ybWFsaXplX2RvbmUgIC8qIE5vIG5lZWQgZm9yIHNjYWxpbmcgaWYgbm8gemVyb3MgaW4gaGlnaCBiaXRzICovCisrICAgICAgICBicmNzICAgIF9fYXZyMzJfZjY0X3N1Yl9sb25nbm9ybWFsaXplCisrIAorKwkKKysgICAgICAgIC8qIHNoaWZ0IGFtb3VudCBpcyBzbWFsbGVyIHRoYW4gMzIsIGFuZCBpbnZvbHZlcyBib3RoIG1zdyBhbmQgbHN3Ki8KKysgICAgICAgIHJzdWIgICAgbHIscjYsMzIgIC8qIHNoaWZ0IG1hbnRpc3NhICovCisrICAgICAgICBsc2wgICAgIHIxMSxyMTEscjYKKysgICAgICAgIGxzciAgICAgbHIscjEwLGxyCisrICAgICAgICBvciAgICAgIHIxMSxscgorKyAgICAgICAgbHNsICAgICByMTAscjEwLHI2CisrIAorKyAgICAgICAgc3ViICAgICByNyxyNiAgICAvKiBhZGp1c3QgZXhwb25lbnQgKi8KKysgICAgICAgIGJybGUgICAgX19hdnIzMl9mNjRfc3ViX3N1Ym5vcm1hbF9yZXN1bHQKKytfX2F2cjMyX2Y2NF9zdWJfbG9uZ25vcm1hbGl6ZV9kb25lOiAgICAgCisrICAgICAgICAKKysjaWYgZGVmaW5lZChMX2F2cjMyX2Y2NF9hZGRzdWIpCisrICAgICAgICAvKiBJbnNlcnQgdGhlIGJpdHMgd2Ugd2lsbCByZW1vdmUgZnJvbSB0aGUgbWFudGlzc2EgcjlbMzE6MjFdICovCisrICAgICAgICBsc2wgICAgIHI5LCByMTAsICgzMiAtIDExKQorKyNlbHNlCisrICAgICAgICAvKiBLZWVwIHRoZSBsYXN0IGJpdCBzaGlmdGVkIG91dC4gKi8KKysgICAgICAgIGJmZXh0dSAgcjksIHIxMCwgMTAsIDEKKysjZW5kaWYKKysgCisrICAgICAgICAvKiBQYWNrIGZpbmFsIHJlc3VsdCovCisrICAgICAgICAvKiBJbnB1dDogW3I3XTpleHAsIFtyMTEsIHIxMF06bWFudCwgW3IxMl06c2lnbiBpbiBNU0IgKi8KKysgICAgICAgIC8qIFJlc3VsdCBpbiBbcjExLHIxMF0gKi8KKysgICAgICAgIC8qIEluc2VydCBtYW50aXNzYSAqLworKyAgICAgICAgbHNyICAgICByMTAsIDExCisrICAgICAgICBvciAgICAgIHIxMCwgcjEwLCByMTE8PDIxCisrICAgICAgICBsc3IgICAgIHIxMSwgMTEKKysgICAgICAgIC8qIEluc2VydCBleHBvbmVudCBhbmQgc2lnbiBiaXQqLworKwliZmlucwlyMTEsIHI3LCAyMCwgMTEKKysgICAgICAgIG9yICAgICAgcjExLCByMTIKKysgICAgICAgIAorKyAgICAgICAgLyogUm91bmQgKi8gICAgIAorK19fYXZyMzJfZjY0X3N1Yl9yb3VuZDoKKysjaWYgZGVmaW5lZChMX2F2cjMyX2Y2NF9hZGRzdWIpCisrCW1vdl9pbW0JcjcsIDB4ODAwMDAwMDAKKysgICAgICAgIGJsZCAgICAgcjEwLCAwCisrICAgICAgICBzdWJuZSAgIHI3LCAtMSAgCisrIAorKyAgICAgICAgY3AudyAgICByOSwgcjcKKysgICAgICAgIHNyaHMgICAgcjkKKysjZW5kaWYKKysgICAgICAgIGFkZCAgICAgcjEwLCByOQorKyAgICAgICAgYWNyICAgICByMTEKKysgICAgICAgIAorKyAgICAgICAgLyogUmV0dXJuIHJlc3VsdCBpbiBbcjExLHIxMF0gKi8KKysgICAgICAgIGxkbSAgICAgc3ArKywgcjUsIHI2LCByNyxwYworKyAKKysgCisrIAorK19fYXZyMzJfZjY0X3N1Yl9vcExfc3Vibm9ybWFsOgorKyAgICAgICAgLyogRXh0cmFjdCB0aGUgb2YgbWFudGlzc2EgKi8KKysgICAgICAgIGxzbCAgICAgcjksIDExIC8qIEV4dHJhY3QgbWFudGlzc2EsIGxlYXZlIHJvb20gZm9yIGltcGxpY2l0IGJpdCAqLyAKKysgICAgICAgIG9yICAgICAgcjksIHI5LCByOD4+MjEKKysgICAgICAgIGxzbCAgICAgcjgsIDExCisrIAorKyAgICAgICAgLyogU2V0IGV4cG9uZW50IHRvIDEgaWYgd2UgZG8gbm90IGhhdmUgYSB6ZXJvLiAqLworKyAgICAgICAgb3IgICAgICBsciwgcjksIHI4CisrICAgICAgICBtb3ZuZSAgIHI2LDEKKysJCisrICAgICAgICAvKiBDaGVjayBpZiBvcEggaXMgYWxzbyBzdWJub3JtYWwuIElmIHNvLCBjbGVhciBpbXBsaWNpdCBiaXQgaW4gcjExKi8KKysgICAgICAgIHJzdWIgICAgbHIsIHI3LCAwCisrICAgICAgICBtb3ZlcSAgIHI3LDEKKysgICAgICAgIGJzdCAgICAgcjExLCAzMQorKwkKKysgICAgICAgIC8qIENoZWNrIGlmIG9wMSBpcyB6ZXJvLCBpZiBzbyBzZXQgZXhwb25lbnQgdG8gMC4gKi8KKysgICAgICAgIG9yICAgICAgbHIsIHIxMSwgcjEwCisrICAgICAgICBtb3ZlcSAgIHI3LDAKKysJICAgICAgICAgICAgICAgICAKKysgICAgICAgIHJqbXAgICAgX19hdnIzMl9mNjRfc3ViX29wTF9zdWJub3JtYWxfZG9uZQorKyAKKytfX2F2cjMyX2Y2NF9zdWJfb3BIX25hbl9vcl9pbmY6IAorKyAgICAgICAgLyogQ2hlY2sgaWYgb3BIIGlzIE5hTiwgaWYgc28gcmV0dXJuIE5hTiAqLworKyAgICAgICAgY2JyICAgICByMTEsIDMxCisrICAgICAgICBvciAgICAgIGxyLCByMTEsIHIxMAorKyAgICAgICAgYnJuZSAgICBfX2F2cjMyX2Y2NF9zdWJfcmV0dXJuX25hbgorKyAKKysgICAgICAgIC8qIG9wSCBpcyBJbmYuICovCisrICAgICAgICAvKiBDaGVjayBpZiBvcEwgaXMgSW5mLiBvciBOYU4gKi8KKysgICAgICAgIGNwLncgICAgcjYsIDB4N2ZmCisrICAgICAgICBicmVxICAgIF9fYXZyMzJfZjY0X3N1Yl9yZXR1cm5fbmFuCisrCS8qIFJldHVybiBpbmZpbml0eSB3aXRoIGNvcnJlY3Qgc2lnbi4gKi8JCisrCW9yICAgICAgcjExLCByMTIsIHI3IDw8IDIwCisrICAgICAgICBsZG0gICAgIHNwKyssIHI1LCByNiwgcjcsIHBjLyogb3BMIG5vdCBJbmYgb3IgTmFOLCByZXR1cm4gb3BIICovCisrX19hdnIzMl9mNjRfc3ViX3JldHVybl9uYW46ICAgICAKKysgICAgICAgIG1vdiAgICAgcjEwLCAtMSAvKiBHZW5lcmF0ZSBOYU4gaW4gcjExLCByMTAgKi8KKysgICAgICAgIG1vdiAgICAgcjExLCAtMQorKyAgICAgICAgbGRtICAgICBzcCsrLCByNSwgcjYsIHI3LCBwYy8qIG9wTCBJbmYgb3IgTmFOLCByZXR1cm4gTmFOICovCisrIAorKyAKKytfX2F2cjMyX2Y2NF9zdWJfc3Vibm9ybWFsX3Jlc3VsdDoKKysjaWYgZGVmaW5lZChMX2F2cjMyX2Y2NF9hZGRzdWIpCisrCS8qIENoZWNrIGhvdyBtdWNoIHdlIG11c3Qgc2NhbGUgZG93biB0aGUgbWFudGlzc2EuICovCisrCW5lZwlyNworKwlzdWIJcjcsIC0xICAgICAvKiBXZSBkbyBubyBsb25nZXIgaGF2ZSBhbiBpbXBsaWNpdCBiaXQuICovCisrCXNhdHUJcjcgPj4gMCwgNiAvKiBTYXR1cmF0ZSBzaGlmdCBhbW91bnQgdG8gbWF4IDYzLiAqLworKwljcC53CXI3LCAzMgorKwlicmdlCTBmCisrCS8qIFNoaWZ0IGFtb3VudCA8MzIgKi8KKysJcnN1YglyOCwgcjcsIDMyCisrCWxzbAlyOSwgcjEwLCByOAorKwlzcm5lCXI2CisrCWxzcglyMTAsIHIxMCwgcjcKKysJb3IJcjEwLCByNgkJLyogU3RpY2t5IGJpdCBmcm9tIHRoZQorKwkJCQkgICBwYXJ0IHRoYXQgd2FzIHNoaWZ0ZWQgb3V0LiAqLworKwlsc2wJcjksIHIxMSwgcjgKKysJb3IJcjEwLCByMTAsIHI5CisrCWxzcglyMTEsIHIxMCwgcjcKKysJLyogU2V0IGV4cG9uZW50ICovCisrCW1vdglyNywgMAorKwlyam1wCV9fYXZyMzJfZjY0X3N1Yl9sb25nbm9ybWFsaXplX2RvbmUKKyswOgorKwkvKiBTaGlmdCBhbW91bnQgPj0zMiAqLworKwlyc3ViCXI4LCByNywgNjQKKysJbHNsCXI5LCByMTEsIHI4CisrCW9yCXI5LCByMTAKKysJc3JuZQlyNgorKwlsc3IJcjEwLCByMTEsIHI3CisrCW9yCXIxMCwgcjYJCS8qIFN0aWNreSBiaXQgZnJvbSB0aGUKKysJCQkJICAgcGFydCB0aGF0IHdhcyBzaGlmdGVkIG91dC4gKi8KKysJbW92CXIxMSwgMAorKwkvKiBTZXQgZXhwb25lbnQgKi8KKysJbW92CXI3LCAwCisrCXJqbXAJX19hdnIzMl9mNjRfc3ViX2xvbmdub3JtYWxpemVfZG9uZQorKyNlbHNlCisrICAgICAgICAvKiBKdXN0IGZsdXNoIHN1Ym5vcm1hbHMgdG8gemVyby4gKi8KKysgICAgICAgIG1vdiAgICAgcjEwLCAwCisrICAgICAgICBtb3YgICAgIHIxMSwgMAorKyNlbmRpZgorKyAgICAgICAgbGRtICAgICBzcCsrLCByNSwgcjYsIHI3LCBwYworKyAKKytfX2F2cjMyX2Y2NF9zdWJfbG9uZ3NoaWZ0OgorKyAgICAgICAgLyogbGFyZ2UgKD49MzIpIHNoaWZ0IGFtb3VudCwgb25seSBsc3cgd2lsbCBoYXZlIGJpdHMgbGVmdCBhZnRlciBzaGlmdC4KKysgICAgICAgICAgIG5vdGUgdGhhdCBzaGlmdCBvcGVyYXRpb25zIHdpbGwgdXNlICgoc2hpZnQgY291bnQ9cjYpIG1vZCAzMikgc28KKysgICAgICAgICAgIHdlIGRvIG5vdCBuZWVkIHRvIHN1YnRyYWN0IDMyIGZyb20gc2hpZnQgY291bnQuICovCisrICAgICAgICAvKiBTYXR1cmF0ZSB0aGUgc2hpZnQgYW1vdW50IHRvIDYzLiBJZiB0aGUgYW1vdW50CisrICAgICAgICAgICBpcyBhbnkgbGFyZ2VyIG9wMiBpcyBpbnNpZ25pZmljYW50LiAqLworKyAgICAgICAgc2F0dSAgICByNiA+PiAwLCA2CisrCQorKyNpZiBkZWZpbmVkKExfYXZyMzJfZjY0X2FkZHN1YikKKysgICAgICAgIC8qIGZpcnN0IHJlbWVtYmVyIHdoZXRoZXIgcGFydCB0aGF0IGlzIGxvc3QgY29udGFpbnMgYW55IDEgYml0cyAuLi4gKi8KKysJbW92ZXEJbHIsIHI4CSAgIC8qIElmIHNoaWZ0IGFtb3VudCBpcyAzMiwgbm8gYml0cyBmcm9tIG1zdyBhcmUgbG9zdC4gKi8KKysJYnJlcQkwZgorKyAgICAgICAgbHNsICAgICBscixyOSxyNSAgIC8qIHNhdmUgYWxsIGxvc3QgYml0cyBmcm9tIG1zdyAqLworKyAgICAgICAgb3IgICAgICBscixyOCAgICAgIC8qIGFsc28gc2F2ZSBsb3N0IGJpdHMgKGFsbCkgZnJvbSBsc3cKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3cgbHIgIT0gMCBpZiB3ZSBsb3NlIGFueSBiaXRzICovCisrI2VuZGlmICAKKyswOgkKKysgICAgICAgIC8qIC4uLiBhbmQgbm93IHRvIHRoZSBhY3R1YWwgc2hpZnQgKi8KKysgICAgICAgIGxzciAgICAgcjgscjkscjYgICAvKiBNb3ZlIG1zdyB0byBsc3cgYW5kIHNoaWZ0LiAqLworKyAgICAgICAgbW92ICAgICByOSwwICAgICAgIC8qIGNsZWFyIG1zdyAqLworKyNpZiBkZWZpbmVkKExfYXZyMzJfZjY0X2FkZHN1YikKKysgICAgICAgIGNwLncgICAgbHIsMCAgICAgICAvKiBpZiBhbnkgJzEnIGJpdCBpbiBwYXJ0IHdlIGxvc3QgLi4uKi8KKysgICAgICAgIHNybmUgICAgbHIKKysgICAgICAgIG9yICAgICAgcjgsIGxyICAgICAgLyogLi4uIHdlIG5lZWQgdG8gc2V0IHN0aWNreSBiaXQqLworKyNlbmRpZgorKyAgICAgICAgcmptcCAgICBfX2F2cjMyX2Y2NF9zdWJfc2hpZnRfZG9uZQorKyAKKytfX2F2cjMyX2Y2NF9zdWJfbG9uZ25vcm1hbGl6ZToKKysgICAgICAgIC8qIHNoaWZ0IGFtb3VudCBpcyBncmVhdGVyIHRoYW4gMzIgKi8KKysgICAgICAgIGNseiAgICAgcjYscjEwICAgICAgLyogc2hpZnQgbWFudGlzc2EgKi8KKysgICAgICAgIC8qIElmIHRoZSByZXN1bHRpbmcgbWFudGlzc2EgaXMgemVybyB0aGUgcmVzdWx0IGlzIAorKyAgICAgICAgICAgemVybyBzbyBmb3JjZSBleHBvbmVudCB0byB6ZXJvLiAqLworKyAgICAgICAgbW92Y3MgICByNywgMAorKyAgICAgICAgbW92Y3MgICByNiwgMAorKyAgICAgICAgbW92Y3MgICByMTIsIDAgIC8qIEFsc28gY2xlYXIgc2lnbiBiaXQuIEEgemVybyByZXN1bHQgZnJvbSBzdWJ0cmFjdGlvbgorKwkJCSAgIGFsd2F5cyBpcyArMC4wICovCisrICAgICAgICBzdWJjYyAgIHI2LC0zMgorKyAgICAgICAgbHNsICAgICByMTEscjEwLHI2CisrICAgICAgICBtb3YgICAgIHIxMCwwCisrICAgICAgICBzdWIgICAgIHI3LHI2ICAgICAgICAgIC8qIGFkanVzdCBleHBvbmVudCAqLworKyAgICAgICAgYnJsZSAgICBfX2F2cjMyX2Y2NF9zdWJfc3Vibm9ybWFsX3Jlc3VsdAorKyAgICAgICAgcmptcCAgICBfX2F2cjMyX2Y2NF9zdWJfbG9uZ25vcm1hbGl6ZV9kb25lCisrICAgICAgICAKKysgCisrICAgICAgICAKKysJIC5hbGlnbiAgMgorK19fYXZyMzJfZjY0X2FkZF9mcm9tX3N1YjoKKysgICAgICAgIC8qIFN3aXRjaCBzaWduIG9uIG9wMiAqLworKyAgICAgICAgZW9yaCAgICByOSwgMHg4MDAwCisrCisrI2lmIGRlZmluZWQoTF9hdnIzMl9mNjRfYWRkc3ViX2Zhc3QpCisrICAgICAgICAuZ2xvYmFsIF9fYXZyMzJfZjY0X2FkZF9mYXN0CisrICAgICAgICAudHlwZSAgX19hdnIzMl9mNjRfYWRkX2Zhc3QsQGZ1bmN0aW9uCisrX19hdnIzMl9mNjRfYWRkX2Zhc3Q6CisrI2Vsc2UJCisrICAgICAgICAuZ2xvYmFsIF9fYXZyMzJfZjY0X2FkZAorKyAgICAgICAgLnR5cGUgIF9fYXZyMzJfZjY0X2FkZCxAZnVuY3Rpb24KKytfX2F2cjMyX2Y2NF9hZGQ6CisrI2VuZGlmCisrICAgICAgICAKKysgICAgICAgIC8qIG9wMSBpbiB7cjExLHIxMH0qLworKyAgICAgICAgLyogb3AyIGluIHtyOSxyOH0qLworKyAKKysjaWYgZGVmaW5lZChMX2F2cjMyX2Y2NF9hZGRzdWJfZmFzdCkKKysgICAgICAgIC8qIElmIG9wMiBpcyB6ZXJvIGp1c3QgcmV0dXJuIG9wMSAqLworKyAgICAgICAgb3IgICAgICByMTIsIHI4LCByOSA8PCAxCisrICAgICAgICByZXRlcSAgIHIxMiAKKysjZW5kaWYKKysKKysgICAgICAgIC8qIENoZWNrIHNpZ25zICovCisrICAgICAgICBlb3IgICAgIHIxMiwgcjExLCByOQorKyAgICAgICAgLyogRGlmZmVyZW50IHNpZ25zLCB1c2Ugc3VidHJhY3Rpb24uICovCisrICAgICAgICBicm1pICAgIF9fYXZyMzJfZjY0X3N1Yl9mcm9tX2FkZAorKyAKKysgICAgICAgIHN0bSAgICAgLS1zcCwgcjUsIHI2LCByNywgbHIKKysgCisrICAgICAgICAvKiBHZXQgc2lnbiBvZiBvcDEgaW50byByMTIgKi8KKysgICAgICAgIG1vdiAgICAgcjEyLCByMTEKKysgICAgICAgIGFuZGggICAgcjEyLCAweDgwMDAsIENPSCAgICAgICAgICAgICAgICAKKysgCisrICAgICAgICAvKiBSZW1vdmUgc2lnbiBmcm9tIG9wZXJhbmRzICovCisrICAgICAgICBjYnIgICAgIHIxMSwgMzEKKysgICAgICAgIGNiciAgICAgcjksIDMxCisrIAorKyAgICAgICAgLyogUHV0IHRoZSBudW1iZXIgd2l0aCB0aGUgbGFyZ2VzdCBleHBvbmVudCBpbiBbcjExLCByMTBdCisrICAgICAgICAgICBhbmQgdGhlIG51bWJlciB3aXRoIHRoZSBzbWFsbGVzdCBleHBvbmVudCBpbiBbcjksIHI4XSAqLworKyAgICAgICAgY3AgICAgICByMTEsIHI5CisrICAgICAgICBicmhzICAgIDFmIC8qIFNraXAgc3dhcCBpZiBvcGVyYW5kcyBhbHJlYWR5IGNvcnJlY3RseSBvcmRlcmVkICovCisrICAgICAgICAvKiBPcGVyYW5kcyB3ZXJlIG5vdCBjb3JyZWN0bHkgb3JkZXJlZCwgc3dhcCB0aGVtICovCisrICAgICAgICBtb3YgICAgIHI3LCByMTEKKysgICAgICAgIG1vdiAgICAgcjExLCByOQorKyAgICAgICAgbW92ICAgICByOSwgcjcKKysgICAgICAgIG1vdiAgICAgcjcsIHIxMAorKyAgICAgICAgbW92ICAgICByMTAsIHI4CisrICAgICAgICBtb3YgICAgIHI4LCByNworKzE6ICAgICAgCisrCW1vdglsciwgMCAvKiBTZXQgc3RpY2t5IGJpdHMgdG8gemVybyAqLworKyAgICAgICAgLyogVW5wYWNrIGxhcmdlc3Qgb3BlcmFuZCAtIG9wSCAqLyAgICAgIAorKyAgICAgICAgLyogZXhwOiByNyAqLworKyAgICAgICAgLyogc2Y6ICByMTEsIHIxMCAqLworKwliZmV4dHUJUjcsIFIxMSwgMjAsIDExIC8qIEV4dHJhY3QgZXhwb25lbnQgKi8KKysJYmZleHR1CXIxMSwgcjExLCAwLCAyMCAvKiBFeHRyYWN0IG1hbnRpc3NhICovCisrICAgICAgICBzYnIgICAgIHIxMSwgMjAgLyogSW5zZXJ0IGltcGxpY2l0IGJpdCAqLworKyAKKysgICAgICAgIC8qIFVucGFjayBzbWFsbGVzdCBvcGVyYW5kIC0gb3BMICovCisrICAgICAgICAvKiBleHA6IHI2ICovCisrICAgICAgICAvKiBzZjogIHI5LCByOCAqLworKwliZmV4dHUJUjYsIFI5LCAyMCwgMTEJLyogRXh0cmFjdCBleHBvbmVudCAqLworKwlicmVxCV9fYXZyMzJfZjY0X2FkZF9vcDJfc3Vibm9ybWFsCisrCWJmZXh0dQlyOSwgcjksIDAsIDIwICAgLyogRXh0cmFjdCBtYW50aXNzYSAqLworKyAgICAgICAgc2JyICAgICByOSwgMjAJCS8qIEluc2VydCBpbXBsaWNpdCBiaXQgKi8KKysKKysyOgkJIAorKyAgICAgICAgLyogb3BIIGlzIE5hTiBvciBJbmYuICovCisrICAgICAgICBjcC53ICAgIHI3LCAweDdmZgorKyAgICAgICAgYnJlcSAgICBfX2F2cjMyX2Y2NF9hZGRfb3BIX25hbl9vcl9pbmYKKysKKysgICAgICAgIC8qIEdldCBzaGlmdCBhbW91bnQgdG8gc2NhbGUgbWFudGlzc2Egb2Ygb3AyLiAqLworKyAgICAgICAgcnN1YiAgICByNiwgcjcKKysgICAgICAgIGJyZXEgICAgX19hdnIzMl9mNjRfYWRkX3NoaWZ0X2RvbmUgLyogTm8gbmVlZCB0byBzaGlmdCwgZXhwb25lbnRzIGFyZSBlcXVhbCovCisrIAorKyAgICAgICAgLyogU2NhbGUgbWFudGlzc2EgW3I5LCByOF0gd2l0aCBhbW91bnQgW3I2XS4KKysgICAgICAgIFVzZXMgc2NyYXRjaCByZWdpc3RlcnMgW3I1XSBhbmQgW2xyXS4KKysgICAgICAgIEluIElFRUUgbW9kZTpNdXN0IG5vdCBmb3JnZXQgdGhlIHN0aWNreSBiaXRzIHdlIGludGVuZCB0byBzaGlmdCBvdXQuICovCisrICAgICAgICByc3ViICAgIHI1LHI2LDMyIC8qIGdldCAoMzIgLSBzaGlmdCBjb3VudCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIHNoaWZ0IGNvdW50ID4gMzIgd2UgZ2V0IGEKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVnYXRpdmUgdmFsdWUsIGJ1dCB0aGF0IHdpbGwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yayBhcyB3ZWxsIGluIHRoZSBjb2RlIGJlbG93LikgKi8KKysgCisrICAgICAgICBjcC53ICAgIHI2LDMyICAgICAgIC8qIGhhbmRsZSBzaGlmdHMgPj0gMzIgc2VwYXJhdGVseSAqLworKyAgICAgICAgYnJocyAgICBfX2F2cjMyX2Y2NF9hZGRfbG9uZ3NoaWZ0CisrIAorKyAgICAgICAgLyogc21hbGwgKDwzMikgc2hpZnQgYW1vdW50LCBib3RoIHdvcmRzIGFyZSBwYXJ0IG9mIHRoZSBzaGlmdAorKyAgICAgICAgICAgZmlyc3QgcmVtZW1iZXIgd2hldGhlciBwYXJ0IHRoYXQgaXMgbG9zdCBjb250YWlucyBhbnkgMSBiaXRzIC4uLiAqLworKyAgICAgICAgbHNsICAgICBscixyOCxyNSAgLyogc2hpZnQgYXdheSBiaXRzIHRoYXQgYXJlIHBhcnQgb2YKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIG1hbnRpc3NhLiBvbmx5IHBhcnQgdGhhdCBnb2VzCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBsciBhcmUgYml0cyB0aGF0IHdpbGwgYmUgbG9zdCAqLworKyAKKysgICAgICAgIC8qIC4uLiBhbmQgbm93IHRvIHRoZSBhY3R1YWwgc2hpZnQgKi8KKysgICAgICAgIGxzbCAgICAgcjUscjkscjUgIC8qIGdldCBiaXRzIGZyb20gbXN3IGRlc3RpbmVkIGZvciBsc3cqLworKyAgICAgICAgbHNyICAgICByOCxyOCxyNiAgLyogc2hpZnQgZG93biBsc3cgb2YgbWFudGlzc2EgKi8KKysgICAgICAgIGxzciAgICAgcjkscjkscjYgIC8qIHNoaWZ0IGRvd24gbXN3IG9mIG1hbnRpc3NhICovCisrICAgICAgICBvciAgICAgIHI4LHI1ICAgICAvKiBjb21iaW5lIHRoZXNlIGJpdHMgd2l0aCBwcmVwYXJlZCBsc3cqLworKyAgICAgICAgCisrX19hdnIzMl9mNjRfYWRkX3NoaWZ0X2RvbmU6ICAgICAKKysgICAgICAgIC8qIE5vdyBhZGQgdGhlIG1hbnRpc3Nhcy4gKi8KKysgICAgICAgIGFkZCAgICAgcjEwLCByOAorKyAgICAgICAgYWRjICAgICByMTEsIHIxMSwgcjkKKysKKysgICAgICAgIC8qIENoZWNrIGlmIHdlIG92ZXJmbG93ZWQuICovCisrCWJsZAlyMTEsIDIxIAorKyAgICAgICAgYnJlcQlfX2F2cjMyX2Y2NF9hZGRfcmVzX29mOgorKworK19fYXZyMzJfZjY0X2FkZF9yZXNfb2ZfZG9uZTogICAgCisrICAgICAgICAKKysgICAgICAgIC8qIFBhY2sgZmluYWwgcmVzdWx0Ki8KKysgICAgICAgIC8qIElucHV0OiBbcjddOmV4cCwgW3IxMSwgcjEwXTptYW50LCBbcjEyXTpzaWduIGluIE1TQiAqLworKyAgICAgICAgLyogUmVzdWx0IGluIFtyMTEscjEwXSAqLworKyAgICAgICAgLyogSW5zZXJ0IGV4cG9uZW50IGFuZCBzaWduIGJpdCovCisrCWJmaW5zCXIxMSwgcjcsIDIwLCAxMQorKwlvcglyMTEsIHIxMgorKyAgICAgICAgCisrICAgICAgICAvKiBSb3VuZCAqLyAgICAgCisrX19hdnIzMl9mNjRfYWRkX3JvdW5kOgorKyNpZiBkZWZpbmVkKExfYXZyMzJfZjY0X2FkZHN1YikKKysJYmZleHR1CXIxMiwgcjEwLCAwLCAxIC8qIEV4dHJhY3QgcGFyaXR5IGJpdC4qLworKwlvcglsciwgcjEyCSAgICAgICAvKiBvciBpdCB0b2dldGhlciB3aXRoIHRoZSBzdGlja3kgYml0cy4gKi8JCisrCWVvcmgJbHIsIDB4ODAwMCAgICAgLyogVG9nZ2xlIHJvdW5kIGJpdC4gKi8JCisrCS8qIFdlIHNob3VsZCBub3cgcm91bmQgdXAgYnkgYWRkaW5nIG9uZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczoKKysKKysJCWhhbGZ3YXkgICBzdGlja3l8cGFyaXR5ICByb3VuZC11cAorKwkJICAgMCAgICAgICAgICAgIHggICAgICAgICAgIG5vCisrCQkgICAxICAgICAgICAgICAgMCAgICAgICAgICAgbm8KKysJICAgICAgICAgICAxICAgICAgICAgICAgMSAgICAgICAgICAgeWVzCisrCisrCSAgIFNpbmNlIHdlIGhhdmUgaW52ZXJ0ZWQgdGhlIGhhbGZ3YXkgYml0IHdlIGNhbiB1c2UgdGhlIHNhdHUgaW5zdHJ1Y3Rpb24KKysgICAgICAgICAgIGJ5IHNhdHVyYXRpbmcgdG8gMSBiaXQgdG8gaW1wbGVtZW50IHRoaXMuIAorKwkqLyAKKysJc2F0dQlsciA+PiAwLCAxCisrI2Vsc2UKKysJbHNyCWxyLCAzMQorKyNlbmRpZgorKyAgICAgICAgYWRkICAgICByMTAsIGxyCisrICAgICAgICBhY3IgICAgIHIxMQorKyAgICAgICAgCisrICAgICAgICAvKiBSZXR1cm4gcmVzdWx0IGluIFtyMTEscjEwXSAqLworKyAgICAgICAgbGRtICAgICBzcCsrLCByNSwgcjYsIHI3LHBjCisrIAorKyAgCisrX19hdnIzMl9mNjRfYWRkX29wSF9uYW5fb3JfaW5mOiAKKysgICAgICAgIC8qIENoZWNrIGlmIG9wSCBpcyBOYU4sIGlmIHNvIHJldHVybiBOYU4gKi8KKysgICAgICAgIGNiciAgICAgcjExLCAyMAorKyAgICAgICAgb3IgICAgICBsciwgcjExLCByMTAKKysgICAgICAgIGJybmUgICAgX19hdnIzMl9mNjRfYWRkX3JldHVybl9uYW4KKysgCisrICAgICAgICAvKiBvcEggaXMgSW5mLiAqLworKyAgICAgICAgLyogQ2hlY2sgaWYgb3BMIGlzIEluZi4gb3IgTmFOICovCisrICAgICAgICBjcC53ICAgIHI2LCAweDdmZgorKyAgICAgICAgYnJlcSAgICBfX2F2cjMyX2Y2NF9hZGRfb3BMX25hbl9vcl9pbmYKKysgICAgICAgIGxkbSAgICAgc3ArKywgcjUsIHI2LCByNywgcGMvKiBvcEwgbm90IEluZiBvciBOYU4sIHJldHVybiBvcEggKi8KKytfX2F2cjMyX2Y2NF9hZGRfb3BMX25hbl9vcl9pbmY6CisrICAgICAgICBjYnIgICAgIHI5LCAyMAorKyAgICAgICAgb3IgICAgICBsciwgcjksIHI4CisrICAgICAgICBicm5lICAgIF9fYXZyMzJfZjY0X2FkZF9yZXR1cm5fbmFuCisrICAgICAgICBtb3YgICAgIHIxMCwgMCAgLyogR2VuZXJhdGUgSW5mIGluIHIxMSwgcjEwICovCisrCW1vdl9pbW0gcjExLCAweDdmZjAwMDAwCisrICAgICAgICBsZG0gICAgIHNwKyssIHI1LCByNiwgcjcsIHBjLyogb3BMIEluZiwgcmV0dXJuIEluZiAqLworK19fYXZyMzJfZjY0X2FkZF9yZXR1cm5fbmFuOiAgICAgCisrICAgICAgICBtb3YgICAgIHIxMCwgLTEgLyogR2VuZXJhdGUgTmFOIGluIHIxMSwgcjEwICovCisrICAgICAgICBtb3YgICAgIHIxMSwgLTEKKysgICAgICAgIGxkbSAgICAgc3ArKywgcjUsIHI2LCByNywgcGMvKiBvcEwgSW5mIG9yIE5hTiwgcmV0dXJuIE5hTiAqLworKyAKKysgCisrX19hdnIzMl9mNjRfYWRkX2xvbmdzaGlmdDoKKysgICAgICAgIC8qIGxhcmdlICg+PTMyKSBzaGlmdCBhbW91bnQsIG9ubHkgbHN3IHdpbGwgaGF2ZSBiaXRzIGxlZnQgYWZ0ZXIgc2hpZnQuCisrICAgICAgICAgICBub3RlIHRoYXQgc2hpZnQgb3BlcmF0aW9ucyB3aWxsIHVzZSAoKHNoaWZ0IGNvdW50PXI2KSBtb2QgMzIpIHNvCisrICAgICAgICAgICB3ZSBkbyBub3QgbmVlZCB0byBzdWJ0cmFjdCAzMiBmcm9tIHNoaWZ0IGNvdW50LiAqLworKyAgICAgICAgLyogU2F0dXJhdGUgdGhlIHNoaWZ0IGFtb3VudCB0byA2My4gSWYgdGhlIGFtb3VudAorKyAgICAgICAgICAgaXMgYW55IGxhcmdlciBvcDIgaXMgaW5zaWduaWZpY2FudC4gKi8KKysgICAgICAgIHNhdHUgICAgcjYgPj4gMCwgNgorKwkvKiBJZiBzaGlmdCBhbW91bnQgaXMgMzIgdGhlcmUgYXJlIG5vIGJpdHMgZnJvbSB0aGUgbXN3IHRoYXQgYXJlIGxvc3QuICovCisrCW1vdmVxCWxyLCByOAorKwlicmVxCTBmCQorKyAgICAgICAgLyogZmlyc3QgcmVtZW1iZXIgd2hldGhlciBwYXJ0IHRoYXQgaXMgbG9zdCBjb250YWlucyBhbnkgMSBiaXRzIC4uLiAqLworKyAgICAgICAgbHNsICAgICBscixyOSxyNSAgIC8qIHNhdmUgYWxsIGxvc3QgYml0cyBmcm9tIG1zdyAqLworKyNpZiBkZWZpbmVkKExfYXZyMzJfZjY0X2FkZHN1YikKKysJY3AudwlyOCwgMAorKwlzcm5lCXI4CQorKyAgICAgICAgb3IgICAgICBscixyOCAgICAgIC8qIGFsc28gc2F2ZSBsb3N0IGJpdHMgKGFsbCkgZnJvbSBsc3cKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3cgbHIgIT0gMCBpZiB3ZSBsb3NlIGFueSBiaXRzICovCisrI2VuZGlmICAKKyswOgkKKysgICAgICAgIC8qIC4uLiBhbmQgbm93IHRvIHRoZSBhY3R1YWwgc2hpZnQgKi8KKysgICAgICAgIGxzciAgICAgcjgscjkscjYgICAvKiBtc3cgLT4gbHN3IGFuZCBtYWtlIHJlc3Qgb2Ygc2hpZnQgaW5zaWRlIGxzdyovCisrICAgICAgICBtb3YgICAgIHI5LDAgICAgICAgLyogY2xlYXIgbXN3ICovCisrICAgICAgICByam1wICAgIF9fYXZyMzJfZjY0X2FkZF9zaGlmdF9kb25lCisrIAorK19fYXZyMzJfZjY0X2FkZF9yZXNfb2Y6CisrCS8qIFdlIG92ZXJmbG93ZWQuIFNjYWxlIGRvd24gbWFudGlzc2EgYnkgc2hpZnRpbmcgcmlnaHQgb25lIHBvc2l0aW9uLiAqLworKwlvcglsciwgbHIsIGxyIDw8IDEgLyogUmVtZW1iZXIgc3RpY2t5Yml0cyovCisrCWxzcglyMTEsIDEKKysJcm9yCXIxMAorKwlyb3IJbHIKKysJc3ViCXI3LCAtMQkvKiBJbmNyZW1lbnQgZXhwb25lbnQgKi8KKysgCisrICAgICAgICAvKiBDbGVhciBtYW50aXNzYSB0byBzZXQgcmVzdWx0IHRvIEluZiBpZiB0aGUgZXhwb25lbnQgaXMgMjU1LiAqLworKyAgICAgICAgY3AudyAgICByNywgMHg3ZmYKKysgICAgICAgIG1vdmVxICAgcjEwLCAwCisrICAgICAgICBtb3ZlcSAgIHIxMSwgMAorKyAgICAgICAgbW92ZXEgICBsciwgMAorKyAgICAgICAgcmptcCAgICBfX2F2cjMyX2Y2NF9hZGRfcmVzX29mX2RvbmUKKysgICAgICAgIAorK19fYXZyMzJfZjY0X2FkZF9vcDJfc3Vibm9ybWFsOgkKKysJLyogU2V0IGVweHBvbmVudCB0byAxICovCisrCW1vdglyNiwgMQorKworKwkvKiBDaGVjayBpZiBvcDIgaXMgYWxzbyBzdWJub3JtYWwuICovCisrCWNwLncJcjcsIDAKKysJYnJuZQkyYgorKworKwljYnIJcjExLCAyMAorKwkvKiBCb3RoIG9wZXJhbmRzIGFyZSBzdWJub3JtYWwuIEp1c3QgYWRkZCB0aGUgbWFudGlzc2FzCisrCSAgIGFuZCB0aGUgZXhwb25lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHNldCB0byAxIGlmCisrCSAgIHdlIG92ZXJmbG93IGludG8gYSBub3JtYWwgbnVtYmVyLiAqLworKwlhZGQJcjEwLCByOAorKwlhZGMJcjExLCByMTEsIHI5CisrCisrCS8qIEFkZCBzaWduIGJpdCAqLworKwlvcglyMTEsIHIxMgorKwkKKysgICAgICAgIC8qIFJldHVybiByZXN1bHQgaW4gW3IxMSxyMTBdICovCisrICAgICAgICBsZG0gICAgIHNwKyssIHI1LCByNiwgcjcscGMKKysJCisrCQkJCisrCSAKKysjZW5kaWYKKysgCisrI2lmZGVmIExfYXZyMzJfZjY0X3RvX3UzMgorKyAgICAgICAgLyogVGhpcyBnb2VzIGludG8gTF9maXhkZnNpICovCisrI2VuZGlmCisrICAgICAgICAKKysgCisrI2lmZGVmIExfYXZyMzJfZjY0X3RvX3MzMgorKyAgICAgICAgLmdsb2JhbCBfX2F2cjMyX2Y2NF90b191MzIKKysgICAgICAgIC50eXBlICBfX2F2cjMyX2Y2NF90b191MzIsQGZ1bmN0aW9uCisrX19hdnIzMl9mNjRfdG9fdTMyOgorKyAgICAgICAgY3AudyAgICByMTEsIDAKKysgICAgICAgIHJldG1pICAgMCAgICAgICAvKiBOZWdhdGl2ZSByZXR1cm5zIDAgKi8KKysgCisrICAgICAgICAvKiBGYWxsdGhyb3VnaCB0byBkZiB0byBzaWduZWQgc2kgY29udmVyc2lvbiAqLyAKKysgICAgICAgIC5nbG9iYWwgX19hdnIzMl9mNjRfdG9fczMyCisrICAgICAgICAudHlwZSAgX19hdnIzMl9mNjRfdG9fczMyLEBmdW5jdGlvbgorK19fYXZyMzJfZjY0X3RvX3MzMjoKKysgICAgICAgIGxzbCAgICAgcjEyLHIxMSwxCisrICAgICAgICBsc3IgICAgIHIxMiwyMSAgICAgICAgICAgICAgICAgIC8qIGV4dHJhY3QgZXhwb25lbnQqLworKyAgICAgICAgc3ViICAgICByMTIsMTAyMyAgICAgICAgICAgICAgICAvKiBjb252ZXJ0IHRvIHVuYmlhc2VkIGV4cG9uZW50LiovCisrICAgICAgICByZXRsbyAgIDAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRvbyBzbWFsbCBleHBvbmVudCBpbXBsaWVzIHplcm8uICovCisrIAorKzE6ICAgICAgCisrICAgICAgICByc3ViICAgIHIxMixyMTIsMzEgICAgICAgICAgICAgIC8qIHNoaWZ0IGNvdW50ID0gMzEgLSBleHBvbmVudCAqLworKyAgICAgICAgbW92ICAgICByOSxyMTEgICAgICAgICAgICAgICAgICAvKiBzYXZlIHNpZ24gZm9yIGxhdGVyLi4uKi8KKysgICAgICAgIGxzbCAgICAgcjExLDExICAgICAgICAgICAgICAgICAgLyogcmVtb3ZlIGV4cG9uZW50IGFuZCBzaWduKi8KKysgICAgICAgIHNiciAgICAgcjExLDMxICAgICAgICAgICAgICAgICAgLyogYWRkIGltcGxpY2l0IGJpdCovCisrICAgICAgICBvciAgICAgIHIxMSxyMTEscjEwPj4yMSAgICAgICAgIC8qIGdldCByZXN0IG9mIGJpdHMgZnJvbSBsc3cgb2YgZG91YmxlICovCisrICAgICAgICBsc3IgICAgIHIxMSxyMTEscjEyICAgICAgICAgICAgIC8qIHNoaWZ0IGRvd24gbWFudGlzc2EgdG8gZmluYWwgcGxhY2UgKi8KKysgICAgICAgIGxzbCAgICAgcjksMSAgICAgICAgICAgICAgICAgICAgLyogc2lnbiAtPiBjYXJyeSAqLworKyAgICAgICAgcmV0Y2MgICByMTEgICAgICAgICAgICAgICAgICAgICAvKiBpZiBwb3NpdGl2ZSwgd2UgYXJlIGRvbmUgKi8KKysgICAgICAgIG5lZyAgICAgcjExICAgICAgICAgICAgICAgICAgICAgLyogaWYgbmVnYXRpdmUgZmxvYXQsIG5lZ2F0ZSByZXN1bHQgKi8KKysgICAgICAgIHJldCAgICAgcjExCisrIAorKyNlbmRpZiAgLyogTF9maXhkZnNpKi8KKysgCisrI2lmZGVmIExfYXZyMzJfZjY0X3RvX3U2NAorKyAgICAgICAgLyogQWN0dWFsIGZ1bmN0aW9uIGlzIGluIExfZml4ZGZkaSAqLworKyNlbmRpZgorKyAgICAgICAgCisrI2lmZGVmIExfYXZyMzJfZjY0X3RvX3M2NAorKyAgICAgICAgLmdsb2JhbCBfX2F2cjMyX2Y2NF90b191NjQKKysgICAgICAgIC50eXBlICBfX2F2cjMyX2Y2NF90b191NjQsQGZ1bmN0aW9uCisrX19hdnIzMl9mNjRfdG9fdTY0OgorKyAgICAgICAgY3AudyAgICByMTEsMAorKyAgICAgICAgLyogTmVnYXRpdmUgbnVtYmVycyByZXR1cm4gemVybyAqLworKyAgICAgICAgbW92bWkgICByMTAsIDAKKysgICAgICAgIG1vdm1pICAgcjExLCAwCisrICAgICAgICByZXRtaSAgIHIxMQorKyAKKysgICAgICAgIAorKyAKKysgICAgICAgIC8qIEZhbGx0aHJvdWdoICovCisrICAgICAgICAuZ2xvYmFsIF9fYXZyMzJfZjY0X3RvX3M2NAorKyAgICAgICAgLnR5cGUgIF9fYXZyMzJfZjY0X3RvX3M2NCxAZnVuY3Rpb24KKytfX2F2cjMyX2Y2NF90b19zNjQ6CisrICAgICAgICBsc2wgICAgIHI5LHIxMSwxCisrICAgICAgICBsc3IgICAgIHI5LDIxICAgICAgICAgICAgICAgICAgIC8qIGdldCBleHBvbmVudCovCisrICAgICAgICBzdWIgICAgIHI5LDEwMjMgICAgICAgICAgICAgICAgIC8qIGNvbnZlcnQgdG8gY29ycmVjdCByYW5nZSovCisrICAgICAgICAvKiBSZXR1cm4gemVybyBpZiBleHBvbmVudCB0byBzbWFsbCAqLworKyAgICAgICAgbW92bG8gICByMTAsIDAKKysgICAgICAgIG1vdmxvICAgcjExLCAwCisrICAgICAgICByZXRsbyAgIHIxMQorKyAKKysgICAgICAgIG1vdiAgICAgcjgscjExICAgICAgICAgICAgICAgICAgLyogc2F2ZSBzaWduIGZvciBsYXRlci4uLiovCisrMTogICAgICAKKysgICAgICAgIGxzbCAgICAgcjExLDExICAgICAgICAgICAgICAgICAgLyogcmVtb3ZlIGV4cG9uZW50ICovCisrICAgICAgICBzYnIgICAgIHIxMSwzMSAgICAgICAgICAgICAgICAgIC8qIGFkZCBpbXBsaWNpdCBiaXQqLworKyAgICAgICAgb3IgICAgICByMTEscjExLHIxMD4+MjEgICAgICAgICAvKiBnZXQgcmVzdCBvZiBiaXRzIGZyb20gbHN3IG9mIGRvdWJsZSovCisrICAgICAgICBsc2wgICAgIHIxMCwxMSAgICAgICAgICAgICAgICAgIC8qIGFsaWduIGxzdyBjb3JyZWN0bHkgYXMgd2VsbCAqLworKyAgICAgICAgcnN1YiAgICByOSxyOSw2MyAgICAgICAgICAgICAgICAvKiBzaGlmdCBjb3VudCA9IDYzIC0gZXhwb25lbnQgKi8KKysgICAgICAgIGJyZXEgICAgMWYKKysgCisrICAgICAgICBjcC53ICAgIHI5LDMyICAgICAgICAgICAgICAgICAgIC8qIGlzIHNoaWZ0IGNvdW50IG1vcmUgdGhhbiBvbmUgcmVnPyAqLworKyAgICAgICAgYnJocyAgICAwZgorKyAKKysgICAgICAgIG1vdiAgICAgcjEyLHIxMSAgICAgICAgICAgICAgICAgLyogc2F2ZSBtc3cgKi8KKysgICAgICAgIGxzciAgICAgcjEwLHIxMCxyOSAgICAgICAgICAgICAgLyogc21hbGwgc2hpZnQgY291bnQsIHNoaWZ0IGRvd24gbHN3ICovCisrICAgICAgICBsc3IgICAgIHIxMSxyMTEscjkgICAgICAgICAgICAgIC8qIHNtYWxsIHNoaWZ0IGNvdW50LCBzaGlmdCBkb3duIG1zdyAqLworKyAgICAgICAgcnN1YiAgICByOSxyOSwzMiAgICAgICAgICAgICAgICAvKiBnZXQgMzItc2l6ZSBvZiBzaGlmdGVkIG91dCB0YWlsICovCisrICAgICAgICBsc2wgICAgIHIxMixyMTIscjkgICAgICAgICAgICAgIC8qIGFsaWduIHBhcnQgdG8gbW92ZSBmcm9tIG1zdyB0byBsc3cgKi8KKysgICAgICAgIG9yICAgICAgcjEwLHIxMiAgICAgICAgICAgICAgICAgLyogY29tYmluZSB0byBnZXQgbmV3IGxzdyAqLworKyAgICAgICAgcmptcCAgICAxZgorKyAKKyswOgorKyAgICAgICAgbHNyICAgICByMTAscjExLHI5ICAgICAgICAgICAgICAvKiBsYXJnZSBzaGlmdCBjb3VudCxvbmx5IGxzdyBnZXQgYml0cworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RlIHRoYXQgc2hpZnQgY291bnQgaXMgbW9kdWxvIDMyKi8KKysgICAgICAgIG1vdiAgICAgcjExLDAgICAgICAgICAgICAgICAgICAgLyogbXN3IHdpbGwgYmUgMCAqLworKyAKKysxOgorKyAgICAgICAgbHNsICAgICByOCwxICAgICAgICAgICAgICAgICAgICAvKiBzaWduIC0+IGNhcnJ5ICovCisrICAgICAgICByZXRjYyAgIHIxMSAgICAgICAgICAgICAgICAgICAgIC8qIGlmIHBvc2l0aXZlLCB3ZSBhcmUgZG9uZSAqLworKyAKKysgICAgICAgIG5lZyAgICAgcjExICAgICAgICAgICAgICAgICAgICAgLyogaWYgbmVnYXRpdmUgZmxvYXQsIG5lZ2F0ZSByZXN1bHQgKi8KKysgICAgICAgIG5lZyAgICAgcjEwCisrICAgICAgICBzY3IgICAgIHIxMQorKyAgICAgICAgcmV0ICAgICByMTEgCisrIAorKyNlbmRpZgorKyAKKysjaWZkZWYgTF9hdnIzMl91MzJfdG9fZjY0CisrICAgICAgICAvKiBDb2RlIGxvY2F0ZWQgaW4gTF9mbG9hdHNpZGYgKi8KKysjZW5kaWYKKysgICAgICAgIAorKyNpZmRlZiBMX2F2cjMyX3MzMl90b19mNjQKKysgICAgICAgIC5nbG9iYWwgX19hdnIzMl91MzJfdG9fZjY0CisrICAgICAgICAudHlwZSAgX19hdnIzMl91MzJfdG9fZjY0LEBmdW5jdGlvbgorK19fYXZyMzJfdTMyX3RvX2Y2NDoKKysgICAgICAgIHN1YiAgICAgcjExLCByMTIsIDAgLyogTW92ZSB0byByMTEgYW5kIGZvcmNlIFogZmxhZyB0byBiZSB1cGRhdGVkICovCisrICAgICAgICBtb3YgICAgIHIxMiwgMCAgICAgIC8qIGFsd2F5cyBwb3NpdGl2ZSAqLworKyAgICAgICAgcmptcCAgICAwZiAgICAgICAgICAvKiBKdW1wIHRvIGNvbW1vbiBjb2RlIGZvciBmbG9hdHNpZGYgKi8KKysgICAgICAgIAorKyAgICAgICAgLmdsb2JhbCBfX2F2cjMyX3MzMl90b19mNjQKKysgICAgICAgIC50eXBlICBfX2F2cjMyX3MzMl90b19mNjQsQGZ1bmN0aW9uCisrX19hdnIzMl9zMzJfdG9fZjY0OgorKyAgICAgICAgbW92ICAgICByMTEsIHIxMiAgICAgICAgLyogS2VlcCBvcmlnaW5hbCB2YWx1ZSBpbiByMTIgZm9yIHNpZ24gKi8KKysgICAgICAgIGFicyAgICAgcjExICAgICAgICAgICAgIC8qIEFic29sdXRlIHZhbHVlIGlmIHIxMiAqLworKzA6ICAgICAgCisrICAgICAgICBtb3YgICAgIHIxMCwwICAgICAgICAgICAvKiBsZXQgcmVtYWluaW5nIGJpdHMgYmUgemVybyAqLworKyAgICAgICAgcmV0ZXEgICByMTEgICAgICAgICAgICAgLyogemVybyBsb25nIHdpbGwgcmV0dXJuIHplcm8gZmxvYXQgKi8KKysgCisrICAgICAgICBwdXNobSAgIGxyCisrICAgICAgICBtb3YgICAgIHI5LDMxKzEwMjMgICAgICAgICAgICAgIC8qIHNldCBleHBvbmVudCAqLworKyAgICAgICAgICAgICAgICAKKysgICAgICAgIG5vcm1hbGl6ZV9kZiAgICByOSAvKmV4cCovLCByMTAsIHIxMSAvKiBtYW50aXNzYSAqLywgcjgsIGxyIC8qIHNjcmF0Y2ggKi8KKysgCisrICAgICAgICAvKiBDaGVjayBpZiBhIHN1Ym5vcm1hbCByZXN1bHQgd2FzIGNyZWF0ZWQgKi8KKysgICAgICAgIGNwLncgICAgcjksIDAKKysgICAgICAgIGJyZ3QgICAgMGYKKysgICAgICAgIAorKyAgICAgICAgYWRqdXN0X3N1Ym5vcm1hbF9kZiAgICAgcjkgLyogZXhwICovLCByMTAsIHIxMSAvKiBNYW50aXNzYSAqLywgcjEyIC8qc2lnbiovLCByOCwgbHIgLyogc2NyYXRjaCAqLworKyAgICAgICAgcG9wbSAgICBwYworKzA6CisrICAgICAgICAKKysgICAgICAgIC8qIFJvdW5kIHJlc3VsdCAqLworKyAgICAgICAgcm91bmRfZGYgICAgICAgIHI5IC8qZXhwKi8sIHIxMCwgcjExIC8qIE1hbnRpc3NhICovLCByOCAvKnNjcmF0Y2gqLworKyAgICAgICAgY3AudyAgICByOSwweDdmZgorKyAgICAgICAgYnJsdCAgICAwZgorKyAgICAgICAgLypSZXR1cm4gaW5maW5pdHkgKi8KKysgICAgICAgIG1vdiAgICAgcjEwLCAwCisrCW1vdl9pbW0JcjExLCAweGZmZTAwMDAwCisrICAgICAgICByam1wICAgIF9fZmxvYXRzaWRmX3JldHVybl9vcDEKKysgICAgICAgIAorKzA6CisrIAorKyAgICAgICAgLyogUGFjayAqLworKyAgICAgICAgcGFja19kZiByOSAvKmV4cCovLCByMTAsIHIxMSAvKiBtYW50aXNzYSAqLywgcjEwLCByMTEgLyogT3V0cHV0IGRmIG51bWJlciovCisrX19mbG9hdHNpZGZfcmV0dXJuX29wMTogCisrICAgICAgICBsc2wgICAgIHIxMiwxICAgICAgICAgICAgICAgICAgLyogc2hpZnQgaW4gc2lnbiBiaXQgKi8KKysgICAgICAgIHJvciAgICAgcjExCisrIAorKyAgICAgICAgcG9wbSAgICBwYworKyNlbmRpZgorKyAKKysgCisrI2lmZGVmIExfYXZyMzJfZjMyX2NtcF9lcQorKyAgICAgICAgLmdsb2JhbCBfX2F2cjMyX2YzMl9jbXBfZXEKKysgICAgICAgIC50eXBlICBfX2F2cjMyX2YzMl9jbXBfZXEsQGZ1bmN0aW9uCisrX19hdnIzMl9mMzJfY21wX2VxOiAgICAgCisrICAgICAgICBjcC53ICAgIHIxMiwgcjExCisrICAgICAgICBicmVxICAgIDBmICAgICAgCisrICAgICAgICAvKiBJZiBub3QgZXF1YWwgY2hlY2sgZm9yICsvLTAgKi8KKysgICAgICAgIC8qIE9yIHRvZ2V0aGVyIHRoZSB0d28gdmFsdWVzIGFuZCBzaGlmdCBvdXQgdGhlIHNpZ24gYml0LgorKyAgICAgICAgICAgSWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCB0aGVuIHRoZSB0d28gdmFsdWVzIGFyZSBib3RoIHplcm8uICovCisrICAgICAgICBvciAgICAgIHIxMiwgcjExCisrICAgICAgICBsc2wgICAgIHIxMiwgMQorKyAgICAgICAgcmV0ZXEgICAxCisrICAgICAgICByZXQgICAgIDAKKyswOiAgICAgICAgICAgICAgICAgICAgICAKKysgICAgICAgIC8qIE51bWJlcnMgd2VyZSBlcXVhbC4gQ2hlY2sgZm9yIE5hTiBvciBJbmYgKi8KKysJbW92X2ltbQlyMTEsIDB4ZmYwMDAwMDAKKysgICAgICAgIGxzbCAgICAgcjEyLCAxCisrICAgICAgICBjcC53ICAgIHIxMiwgcjExCisrICAgICAgICByZXRscyAgIDEgICAgIC8qIDAgaWYgTmFOLCAxIG90aGVyd2lzZSAqLworKyAgICAgICAgcmV0ICAgICAwICAgICAKKysjZW5kaWYKKysgICAgICAgIAorKyNpZiBkZWZpbmVkKExfYXZyMzJfZjMyX2NtcF9nZSkgfHwgZGVmaW5lZChMX2F2cjMyX2YzMl9jbXBfbHQpCisrI2lmZGVmIExfYXZyMzJfZjMyX2NtcF9nZQorKyAgICAgICAgLmdsb2JhbCBfX2F2cjMyX2YzMl9jbXBfZ2UKKysgICAgICAgIC50eXBlICBfX2F2cjMyX2YzMl9jbXBfZ2UsQGZ1bmN0aW9uCisrX19hdnIzMl9mMzJfY21wX2dlOgorKyNlbmRpZiAgCisrI2lmZGVmIExfYXZyMzJfZjMyX2NtcF9sdAorKyAgICAgICAgLmdsb2JhbCBfX2F2cjMyX2YzMl9jbXBfbHQKKysgICAgICAgIC50eXBlICBfX2F2cjMyX2YzMl9jbXBfbHQsQGZ1bmN0aW9uCisrX19hdnIzMl9mMzJfY21wX2x0OgorKyNlbmRpZiAgCisrICAgICAgICBsc2wgICAgIHIxMCwgcjEyLCAxICAgICAvKiBSZW1vdmUgc2lnbiBiaXRzICovCisrICAgICAgICBsc2wgICAgIHI5LCByMTEsIDEKKysJc3ViZmVxCXIxMCwgMAorKyNpZmRlZiBMX2F2cjMyX2YzMl9jbXBfZ2UKKysJcmV0ZXEJMQkJLyogQm90aCBudW1iZXIgYXJlIHplcm8uIFJldHVybiB0cnVlLiAqLworKyNlbmRpZgkKKysjaWZkZWYgTF9hdnIzMl9mMzJfY21wX2x0CisrCXJldGVxCTAJCS8qIEJvdGggbnVtYmVyIGFyZSB6ZXJvLiBSZXR1cm4gZmFsc2UuICovCisrI2VuZGlmCQorKwltb3ZfaW1tCXI4LCAweGZmMDAwMDAwCisrICAgICAgICBjcC53ICAgIHIxMCwgcjgKKysgICAgICAgIHJldGhpICAgMCAgICAgICAgICAgICAgIC8qIE9wMCBpcyBOYU4gKi8gICAgICAgICAgICAgICAgCisrICAgICAgICBjcC53ICAgIHI5LCByOAorKyAgICAgICAgcmV0aGkgICAwICAgICAgICAgICAgICAgLyogT3AxIGlzIE5hbiAqLworKyAKKysgICAgICAgIGVvciAgICAgcjgsIHIxMSwgcjEyCisrICAgICAgICBibGQgICAgIHIxMiwgMzEKKysjaWZkZWYgTF9hdnIzMl9mMzJfY21wX2dlCisrICAgICAgICBzcmNjICAgIHI4ICAgICAgLyogU2V0IHJlc3VsdCB0byB0cnVlIGlmIG9wMCBpcyBwb3NpdGl2ZSovCisrI2VuZGlmCisrI2lmZGVmIExfYXZyMzJfZjMyX2NtcF9sdAorKyAgICAgICAgc3JjcyAgICByOCAgICAgIC8qIFNldCByZXN1bHQgdG8gdHJ1ZSBpZiBvcDAgaXMgbmVnYXRpdmUqLworKyNlbmRpZgorKyAgICAgICAgcmV0bWkgICByOCAgICAgIC8qIFJldHVybiBpZiBzaWducyBhcmUgZGlmZmVyZW50ICovCisrICAgICAgICBicmNzICAgIDBmICAgICAgLyogQm90aCBzaWducyBuZWdhdGl2ZT8gKi8KKysgCisrICAgICAgICAvKiBCb3RoIHNpZ25zIHBvc2l0aXZlICovCisrICAgICAgICBjcC53ICAgIHIxMiwgcjExCisrI2lmZGVmIExfYXZyMzJfZjMyX2NtcF9nZQorKyAgICAgICAgcmV0aHMgICAgMQorKyAgICAgICAgcmV0bG8gICAgMAorKyNlbmRpZgorKyNpZmRlZiBMX2F2cjMyX2YzMl9jbXBfbHQKKysgICAgICAgIHJldGhzICAgIDAKKysgICAgICAgIHJldGxvICAgIDEKKysjZW5kaWYKKyswOgorKyAgICAgICAgLyogQm90aCBzaWducyBuZWdhdGl2ZSAqLworKyAgICAgICAgY3AudyAgICByMTEsIHIxMgorKyNpZmRlZiBMX2F2cjMyX2YzMl9jbXBfZ2UKKysgICAgICAgIHJldGhzICAgIDEKKysgICAgICAgIHJldGxvICAgIDAKKysjZW5kaWYKKysjaWZkZWYgTF9hdnIzMl9mMzJfY21wX2x0CisrICAgICAgICByZXRocyAgICAwCisrICAgICAgICByZXRsbyAgICAxCisrI2VuZGlmCisrI2VuZGlmCisrICAgICAgICAKKysgCisrI2lmZGVmIExfYXZyMzJfZjY0X2NtcF9lcQorKyAgICAgICAgLmdsb2JhbCBfX2F2cjMyX2Y2NF9jbXBfZXEKKysgICAgICAgIC50eXBlICBfX2F2cjMyX2Y2NF9jbXBfZXEsQGZ1bmN0aW9uCisrX19hdnIzMl9mNjRfY21wX2VxOiAgICAgCisrICAgICAgICBjcC53ICAgIHIxMCxyOAorKyAgICAgICAgY3BjICAgICByMTEscjkKKysgICAgICAgIGJyZXEgICAgMGYKKysgICAgICAgIAorKyAgICAgICAgLyogQXJncyB3ZXJlIG5vdCBlcXVhbCovCisrICAgICAgICAvKiBCb3RoIGFyZ3MgY291bGQgYmUgemVybyB3aXRoIGRpZmZlcmVudCBzaWduIGJpdHMgKi8KKysgICAgICAgIGxzbCAgICAgcjExLDEgICAgICAgICAgICAgICAgICAgLyogZ2V0IHJpZCBvZiBzaWduIGJpdHMgKi8KKysgICAgICAgIGxzbCAgICAgcjksMQorKyAgICAgICAgb3IgICAgICByMTEscjEwICAgICAgICAgICAgICAgICAvKiBDaGVjayBpZiBhbGwgYml0cyBhcmUgemVybyAqLworKyAgICAgICAgb3IgICAgICByMTEscjkKKysgICAgICAgIG9yICAgICAgcjExLHI4CisrICAgICAgICByZXRlcSAgIDEgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGFsbCB6ZXJvcyB0aGUgYXJndW1lbnRzIGFyZSBlcXVhbAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbyByZXR1cm4gMSBlbHNlIHJldHVybiAwICovCisrICAgICAgICByZXQgICAgIDAKKyswOiAgICAgIAorKyAgICAgICAgLyogY2hlY2sgZm9yIE5hTiAqLworKyAgICAgICAgbHNsICAgICByMTEsMQorKwltb3ZfaW1tCXIxMiwgMHhmZmUwMDAwMAorKyAgICAgICAgY3AudyAgICByMTAsMAorKyAgICAgICAgY3BjICAgICByMTEscjEyICAgICAgICAgICAgICAgICAvKiBjaGVjayBpZiBuYW4gb3IgaW5mICovCisrICAgICAgICByZXRscyAgIDEgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIEFyZyBpcyBOYU4gcmV0dXJuIDAgZWxzZSAxKi8KKysgICAgICAgIHJldCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuICAqLworKyAKKysjZW5kaWYKKysgCisrIAorKyNpZiAgIGRlZmluZWQoTF9hdnIzMl9mNjRfY21wX2dlKSB8fCBkZWZpbmVkKExfYXZyMzJfZjY0X2NtcF9sdCkKKysgCisrI2lmZGVmIExfYXZyMzJfZjY0X2NtcF9nZQorKyAgICAgICAgLmdsb2JhbCBfX2F2cjMyX2Y2NF9jbXBfZ2UKKysgICAgICAgIC50eXBlICBfX2F2cjMyX2Y2NF9jbXBfZ2UsQGZ1bmN0aW9uCisrX19hdnIzMl9mNjRfY21wX2dlOgorKyNlbmRpZiAgCisrI2lmZGVmIExfYXZyMzJfZjY0X2NtcF9sdAorKyAgICAgICAgLmdsb2JhbCBfX2F2cjMyX2Y2NF9jbXBfbHQKKysgICAgICAgIC50eXBlICBfX2F2cjMyX2Y2NF9jbXBfbHQsQGZ1bmN0aW9uCisrX19hdnIzMl9mNjRfY21wX2x0OgorKyNlbmRpZiAgCisrIAorKyAgICAgICAgLyogY29tcGFyZSBtYWduaXR1ZGUgb2Ygb3AxIGFuZCBvcDIgKi8KKysgICAgICAgIGxzbCAgICAgcjExLDEgICAgICAgICAgICAgICAgICAgLyogUmVtb3ZlIHNpZ24gYml0IG9mIG9wMSAqLworKyAgICAgICAgc3JjcyAgICByMTIgICAgICAgICAgICAgICAgICAgICAvKiBTaWduIG9wMSB0byBsc2Igb2YgcjEyKi8KKysJc3ViZmVxCXIxMCwgMAorKwlicmVxCTNmCQkJLyogb3AxIHplcm8gKi8KKysgICAgICAgIGxzbCAgICAgcjksMSAgICAgICAgICAgICAgICAgICAgLyogUmVtb3ZlIHNpZ24gYml0IG9mIG9wMiAqLworKyAgICAgICAgcm9sICAgICByMTIgICAgICAgICAgICAgICAgICAgICAvKiBTaWduIG9wMiB0byBsc2Igb2YgbHIsIHNpZ24gYml0IG9wMSBiaXQgMSBvZiByMTIqLworKwkKKysgCisrICAgICAgICAvKiBDaGVjayBmb3IgTmFuICovCisrCXB1c2htCWxyCisrCW1vdl9pbW0JbHIsIDB4ZmZlMDAwMDAKKysgICAgICAgIGNwLncgICAgcjEwLDAKKysgICAgICAgIGNwYyAgICAgcjExLGxyCisrICAgICAgICBicmhpICAgIDBmICAgICAgLyogV2UgaGF2ZSBOYU4gKi8KKysgICAgICAgIGNwLncgICAgcjgsMAorKyAgICAgICAgY3BjICAgICByOSxscgorKyAgICAgICAgYnJoaSAgICAwZiAgICAgIC8qIFdlIGhhdmUgTmFOICovCisrCXBvcG0JbHIKKysgCisrICAgICAgICBjcC53ICAgIHIxMiwzICAgICAgICAgICAgICAgICAgIC8qIGJvdGggb3BlcmFuZHMgbmVnYXRpdmUgPyovICAgIAorKyAgICAgICAgYnJlcSAgICAxZgorKyAKKysgICAgICAgIGNwLncgICAgcjEyLDEgICAgICAgICAgICAgICAgICAgLyogYm90aCBvcGVyYW5kcyBwb3NpdGl2ZT8gKi8KKysgICAgICAgIGJybG8gICAgMmYKKysgCisrICAgICAgICAvKiBEaWZmZXJlbnQgc2lnbnMuIElmIHNpZ24gb2Ygb3AxIGlzIG5lZ2F0aXZlIHRoZSBkaWZmZXJlbmNlCisrICAgICAgICAgICBiZXR3ZWVuIG9wMSBhbmQgb3AyIHdpbGwgYWx3YXlzIGJlIG5lZ2F0aXZlLCBhbmQgaWYgb3AxIGlzCisrICAgICAgICAgICBwb3NpdGl2ZSB0aGUgZGlmZmVyZW5jZSB3aWxsIGFsd2F5cyBiZSBwb3NpdGl2ZSAqLyAgICAgICAgICAgCisrI2lmZGVmIExfYXZyMzJfZjY0X2NtcF9nZQorKwlyZXRlcQkxCisrCXJldG5lCTAKKysjZW5kaWYKKysjaWZkZWYgTF9hdnIzMl9mNjRfY21wX2x0CisrCXJldGVxCTAKKysJcmV0bmUJMQorKyNlbmRpZgorKyAgCisrMjoKKysgICAgICAgIC8qIEJvdGggb3BlcmFuZHMgcG9zaXRpdmUuIEp1c3QgY29tcHV0ZSB0aGUgZGlmZmVyZW5jZSAqLworKyAgICAgICAgY3AudyAgICByMTAscjgKKysgICAgICAgIGNwYyAgICAgcjExLHI5CisrI2lmZGVmIExfYXZyMzJfZjY0X2NtcF9nZQorKwlyZXRocwkxCisrCXJldGxvCTAKKysjZW5kaWYKKysjaWZkZWYgTF9hdnIzMl9mNjRfY21wX2x0CisrCXJldGhzCTAKKysJcmV0bG8JMQorKyNlbmRpZgorKyAgICAgICAgICAgICAgICAKKysxOgorKyAgICAgICAgLyogQm90aCBvcGVyYW5kcyBuZWdhdGl2ZS4gQ29tcHV0ZSB0aGUgZGlmZmVyZW5jZSB3aXRoIG9wZXJhbmRzIHN3aXRjaGVkICovCisrICAgICAgICBjcCAgICAgcjgscjEwCisrICAgICAgICBjcGMgICAgcjkscjExCisrI2lmZGVmIExfYXZyMzJfZjY0X2NtcF9nZQorKwlyZXRocwkxCisrCXJldGxvCTAKKysjZW5kaWYKKysjaWZkZWYgTF9hdnIzMl9mNjRfY21wX2x0CisrCXJldGhzCTAKKysJcmV0bG8JMQorKyNlbmRpZgorKworKzA6ICAgICAgCisrICAgICAgICBwb3BtICAgIHBjLCByMTI9MAorKyNlbmRpZgorKyAKKyszOgorKyAgICAgICAgbHNsICAgICByOSwxICAgICAgICAgICAgICAgICAgIC8qIFJlbW92ZSBzaWduIGJpdCBvZiBvcDEgKi8KKysjaWZkZWYgTF9hdnIzMl9mNjRfY21wX2dlCisrICAgICAgICBzcmNzICAgIHIxMgkJICAgICAgIC8qIElmIG9wMiBpcyBuZWdhdGl2ZSB0aGVuIG9wMSA+PSBvcDIuICovCQorKyNlbmRpZgorKyNpZmRlZiBMX2F2cjMyX2Y2NF9jbXBfbHQKKysgICAgICAgIHNyY2MgICAgcjEyCQkgICAgICAgLyogSWYgb3AyIGlzIHBvc2l0dmUgdGhlbiBvcDEgPD0gb3AyLiAqLworKyNlbmRpZgorKwlzdWJmZXEJcjgsIDAJCSAgICAgICAKKysjaWZkZWYgTF9hdnIzMl9mNjRfY21wX2dlCisrCXJldGVxCTEJCSAgICAgICAvKiBCb3RoIG9wZXJhbmRzIGFyZSB6ZXJvLiBSZXR1cm4gdHJ1ZS4gKi8KKysjZW5kaWYKKysjaWZkZWYgTF9hdnIzMl9mNjRfY21wX2x0CisrCXJldGVxCTAJCSAgICAgICAvKiBCb3RoIG9wZXJhbmRzIGFyZSB6ZXJvLiBSZXR1cm4gZmFsc2UuICovCisrI2VuZGlmCisrCXJldAlyMTIKKysJCQkJICAgICAgICAKKysgCisrI2lmIGRlZmluZWQoTF9hdnIzMl9mNjRfZGl2KSB8fCBkZWZpbmVkKExfYXZyMzJfZjY0X2Rpdl9mYXN0KQorKyAgICAgICAgLmFsaWduICAyCisrCisrI2lmIGRlZmluZWQoTF9hdnIzMl9mNjRfZGl2X2Zhc3QpCisrICAgICAgICAuZ2xvYmFsIF9fYXZyMzJfZjY0X2Rpdl9mYXN0CisrICAgICAgICAudHlwZSAgX19hdnIzMl9mNjRfZGl2X2Zhc3QsQGZ1bmN0aW9uCisrX19hdnIzMl9mNjRfZGl2X2Zhc3Q6CisrI2Vsc2UKKysgICAgICAgIC5nbG9iYWwgX19hdnIzMl9mNjRfZGl2CisrICAgICAgICAudHlwZSAgX19hdnIzMl9mNjRfZGl2LEBmdW5jdGlvbgorK19fYXZyMzJfZjY0X2RpdjoKKysjZW5kaWYKKysgICAgICAgIHN0bSAgICAgLS1zcCwgcjAsIHIxLCByMiwgcjMsIHI0LCByNSwgcjYsIHI3LGxyIAorKyAgICAgICAgLyogb3AxIGluIHtyMTEscjEwfSovCisrICAgICAgICAvKiBvcDIgaW4ge3I5LHI4fSovCisrICAgICAgICBlb3IgICAgIGxyLCByMTEsIHI5ICAgICAgICAgICAgIC8qIE1TQihscikgPSBTaWduKG9wMSkgXiBTaWduKG9wMikgKi8KKysgCisrICAgICAgICAKKysgICAgICAgIC8qIFVucGFjayBvcDEgdG8gMi42MiBmb3JtYXQqLyAgCisrICAgICAgICAvKiBleHA6IHI3ICovCisrICAgICAgICAvKiBzZjogIHIxMSwgcjEwICovCisrICAgICAgICBsc3IgICAgIHI3LCByMTEsIDIwIC8qIEV4dHJhY3QgZXhwb25lbnQgKi8KKysgICAgICAgICAgICAgICAgCisrICAgICAgICBsc2wgICAgIHIxMSwgOSAvKiBFeHRyYWN0IG1hbnRpc3NhLCBsZWF2ZSByb29tIGZvciBpbXBsaWNpdCBiaXQgKi8gCisrICAgICAgICBvciAgICAgIHIxMSwgcjExLCByMTA+PjIzCisrICAgICAgICBsc2wgICAgIHIxMCwgOQorKyAgICAgICAgc2JyICAgICByMTEsIDI5IC8qIEluc2VydCBpbXBsaWNpdCBiaXQgKi8KKysgICAgICAgIGFuZGggICAgcjExLCAweDNmZmYgLypNYXNrIGxhc3QgcGFydCBvZiBleHBvbmVudCBzaW5jZSB3ZSB1c2UgMi42MiBmb3JtYXQqLworKyAKKysgICAgICAgIGNiciAgICAgcjcsIDExICAgICAgIC8qIENsZWFyIHNpZ24gYml0ICovCisrICAgICAgICAvKiBDaGVjayBpZiBub3JtYWxpemF0aW9uIGlzIG5lZWRlZCAqLworKyAgICAgICAgYnJlcSAgICAxMWYgLypJZiBudW1iZXIgaXMgc3Vibm9ybWFsLCBub3JtYWxpemUgaXQgKi8KKysyMjogICAgIAorKyAgICAgICAgY3AgICAgICByNywgMHg3ZmYKKysgICAgICAgIGJyZ2UgICAgMmYgIC8qIENoZWNrIG9wMSBmb3IgTmFOIG9yIEluZiAqLworKworKyAgICAgICAgLyogVW5wYWNrIG9wMiB0byAyLjYyIGZvcm1hdCovCisrICAgICAgICAvKiBleHA6IHI2ICovCisrICAgICAgICAvKiBzZjogIHI5LCByOCAqLworKyAgICAgICAgbHNyICAgICByNiwgcjksIDIwIC8qIEV4dHJhY3QgZXhwb25lbnQgKi8KKysgICAgICAgICAgICAgICAgCisrICAgICAgICBsc2wgICAgIHI5LCA5IC8qIEV4dHJhY3QgbWFudGlzc2EsIGxlYXZlIHJvb20gZm9yIGltcGxpY2l0IGJpdCAqLyAKKysgICAgICAgIG9yICAgICAgcjksIHI5LCByOD4+MjMKKysgICAgICAgIGxzbCAgICAgcjgsIDkKKysgICAgICAgIHNiciAgICAgcjksIDI5IC8qIEluc2VydCBpbXBsaWNpdCBiaXQgKi8KKysgICAgICAgIGFuZGggICAgcjksIDB4M2ZmZiAvKk1hc2sgbGFzdCBwYXJ0IG9mIGV4cG9uZW50IHNpbmNlIHdlIHVzZSAyLjYyIGZvcm1hdCovCisrIAorKyAgICAgICAgY2JyICAgICByNiwgMTEgICAgICAgLyogQ2xlYXIgc2lnbiBiaXQgKi8KKysgICAgICAgIC8qIENoZWNrIGlmIG5vcm1hbGl6YXRpb24gaXMgbmVlZGVkICovCisrICAgICAgICBicmVxICAgIDEzZiAvKklmIG51bWJlciBpcyBzdWJub3JtYWwsIG5vcm1hbGl6ZSBpdCAqLworKzIzOiAgICAgICAgICAgICAKKysgICAgICAgIGNwICAgICAgcjYsIDB4N2ZmCisrICAgICAgICBicmdlICAgIDNmICAvKiBDaGVjayBvcDIgZm9yIE5hTiBvciBJbmYgKi8KKysKKysgICAgICAgIC8qIENhbGN1bGF0ZSBuZXcgZXhwb25lbnQgKi8KKysgICAgICAgIHN1YiAgICAgcjcsIHI2CisrICAgICAgICBzdWIgICAgIHI3LC0xMDIzCisrIAorKyAgICAgICAgLyogRGl2aWRlICovCisrICAgICAgICAvKiBBcHByb3hpbWF0aW5nIDEvZCB3aXRoIHRoZSBmb2xsb3dpbmcgcmVjdXJyZW5jZTogKi8KKysgICAgICAgIC8qIFJbaisxXSA9IFJbal0qKDItUltqXSpkKSAqLworKyAgICAgICAgLyogVXNpbmcgMi42MiBmb3JtYXQgKi8KKysgICAgICAgIC8qIFRXTzogIHIxMiAqLworKyAgICAgICAgLyogZCA9IG9wMiA9IGRpdmlzb3IgKDIuNjIgZm9ybWF0KTogcjkscjggKi8KKysgICAgICAgIC8qIE11bHRpcGx5IHJlc3VsdCA6ICAgICByNSwgcjQgKi8KKysgICAgICAgIC8qIEluaXRpYWwgZ3Vlc3MgOiAgICAgICByMywgcjIgKi8KKysgICAgICAgIC8qIE5ldyBhcHByb3hpbWF0aW9ucyA6ICByMywgcjIgKi8KKysgICAgICAgIC8qIG9wMSA9IERpdmlkZW5kICgyLjYyIGZvcm1hdCkgOiByMTEsIHIxMCAqLworKyAKKysJbW92X2ltbQlyMTIsIDB4ODAwMDAwMDAKKysgICAgICAgICAKKysgICAgICAgIC8qIExvYWQgaW5pdGlhbCBndWVzcywgdXNpbmcgbG9vay11cCB0YWJsZSAqLworKyAgICAgICAgLyogSW5pdGlhbCBndWVzcyBpcyBvZiBmb3JtYXQgMDEuWFksIHdoZXJlIFhZIGlzIGNvbnN0cnVjdGVkIGFzIGZvbGxvd3M6ICovCisrICAgICAgICAvKiBMZXQgZCBiZSBvZiBmb2xsb3dpbmcgZm9ybWF0OiAwMC4xeHkuLi4uLiwgdGhlbiBYWT1+eHkgKi8KKysgICAgICAgIC8qIEZvciBkPTAwLjEwMCA9IDAsNSAgIC0+IGluaXRpYWwgZ3Vlc3M9MDEuMTEgPSAxLDc1ICovCisrICAgICAgICAvKiBGb3IgZD0wMC4xMDEgPSAwLDYyNSAtPiBpbml0aWFsIGd1ZXNzPTAxLjExID0gMSw1ICAqLworKyAgICAgICAgLyogRm9yIGQ9MDAuMTEwID0gMCw3NSAgLT4gaW5pdGlhbCBndWVzcz0wMS4xMSA9IDEsMjUgKi8KKysgICAgICAgIC8qIEZvciBkPTAwLjExMSA9IDAsODc1IC0+IGluaXRpYWwgZ3Vlc3M9MDEuMTEgPSAxLDAgICovCisrICAgICAgICAvKiByMiBpcyBhbHNvIHBhcnQgb2YgdGhlIHJlZyBwYWlyIGZvcm1pbmcgaW5pdGlhbCBndWVzcywgYnV0IGl0Ki8KKysgICAgICAgIC8qIGlzIGtlcHQgdW5pbml0aWFsaXplZCB0byBzYXZlIG9uZSBjeWNsZSBzaW5jZSBpdCBoYXMgc28gbG93IHNpZ25pZmljYW5jZSovCisrIAorKyAgICAgICAgbHNyICAgICByMywgcjEyLCAxCisrICAgICAgICBiZmV4dHUgIHI0LCByOSwgMjcsIDIKKysgICAgICAgIGNvbSAgICAgcjQKKysgICAgICAgIGJmaW5zICAgcjMsIHI0LCAyOCwgMgorKyAKKysgICAgICAgIC8qIEZpcnN0IGFwcHJveGltYXRpb24gKi8KKysgICAgICAgIC8qIEFwcHJveGltYXRpbmcgdG8gMzIgYml0cyAqLworKyAgICAgICAgLyogcjUgPSBSW2pdKmQgKi8KKysgICAgICAgIG11bHUuZCAgcjQsIHIzLCByOQorKyAgICAgICAgLyogcjUgPSAyLVJbal0qZCAqLworKyAgICAgICAgc3ViICAgIHI1LCByMTIsIHI1PDwyCisrICAgICAgICAvKiByMyA9IFJbal0qKDItUltqXSpkKSAqLworKyAgICAgICAgbXVsdS5kICByNCwgcjMsIHI1CisrICAgICAgICBsc2wgICAgIHIzLCByNSwgMgorKyAgICAgICAgIAorKyAgICAgICAgLyogU2Vjb25kIGFwcHJveGltYXRpb24gKi8KKysgICAgICAgIC8qIEFwcHJveGltYXRpbmcgdG8gMzIgYml0cyAqLworKyAgICAgICAgLyogcjUgPSBSW2pdKmQgKi8KKysgICAgICAgIG11bHUuZCAgcjQsIHIzLCByOQorKyAgICAgICAgLyogcjUgPSAyLVJbal0qZCAqLworKyAgICAgICAgc3ViICAgIHI1LCByMTIsIHI1PDwyCisrICAgICAgICAvKiByMyA9IFJbal0qKDItUltqXSpkKSAqLworKyAgICAgICAgbXVsdS5kICByNCwgcjMsIHI1CisrICAgICAgICBsc2wgICAgIHIzLCByNSwgMgorKyAgICAgICAgIAorKyAgICAgICAgLyogVGhpcmQgYXBwcm94aW1hdGlvbiAqLworKyAgICAgICAgLyogQXBwcm94aW1hdGluZyB0byAzMiBiaXRzICovCisrICAgICAgICAvKiByNSA9IFJbal0qZCAqLworKyAgICAgICAgbXVsdS5kICByNCwgcjMsIHI5CisrICAgICAgICAvKiByNSA9IDItUltqXSpkICovCisrICAgICAgICBzdWIgICAgcjUsIHIxMiwgcjU8PDIKKysgICAgICAgIC8qIHIzID0gUltqXSooMi1SW2pdKmQpICovCisrICAgICAgICBtdWx1LmQgIHI0LCByMywgcjUKKysgICAgICAgIGxzbCAgICAgcjMsIHI1LCAyCisrIAorKyAgICAgICAgLyogRm91cnRoIGFwcHJveGltYXRpb24gKi8KKysgICAgICAgIC8qIEFwcHJveGltYXRpbmcgdG8gNjQgYml0cyAqLworKyAgICAgICAgLyogcjUscjQgPSBSW2pdKmQgKi8KKysgICAgICAgIG11bF9hcHByb3hfZGYgICAgICAgIHIzIC8qYWgqLywgcjIgLyphbCovLCByOSAvKmJoKi8sIHI4IC8qYmwqLywgcjUgLypyaCovLCByNCAvKnJsKi8sIHIxIC8qc2gqLywgcjAgLypzbCovCisrICAgICAgICBsc2wgICAgcjUsIDIKKysgICAgICAgIG9yICAgICByNSwgcjUsIHI0Pj4zMAorKyAgICAgICAgbHNsICAgIHI0LCAyCisrICAgICAgICAvKiByNSxyNCA9IDItUltqXSpkICovCisrICAgICAgICBuZWcgICAgcjQKKysgICAgICAgIHNiYyAgICByNSwgcjEyLCByNQorKyAgICAgICAgLyogcjMscjIgPSBSW2pdKigyLVJbal0qZCkgKi8KKysgICAgICAgIG11bF9hcHByb3hfZGYgICAgICAgIHIzIC8qYWgqLywgcjIgLyphbCovLCByNSAvKmJoKi8sIHI0IC8qYmwqLywgcjUgLypyaCovLCByNCAvKnJsKi8sIHIxIC8qc2gqLywgcjAgLypzbCovCisrICAgICAgICBsc2wgICAgcjMsIHI1LCAyCisrICAgICAgICBvciAgICAgcjMsIHIzLCByND4+MzAKKysgICAgICAgIGxzbCAgICByMiwgcjQsIDIKKysgCisrIAorKyAgICAgICAgLyogRmlmdGggYXBwcm94aW1hdGlvbiAqLworKyAgICAgICAgLyogQXBwcm94aW1hdGluZyB0byA2NCBiaXRzICovCisrICAgICAgICAvKiByNSxyNCA9IFJbal0qZCAqLworKyAgICAgICAgbXVsX2FwcHJveF9kZiAgICAgICAgcjMgLyphaCovLCByMiAvKmFsKi8sIHI5IC8qYmgqLywgcjggLypibCovLCByNSAvKnJoKi8sIHI0IC8qcmwqLywgcjEgLypzaCovLCByMCAvKnNsKi8KKysgICAgICAgIGxzbCAgICByNSwgMgorKyAgICAgICAgb3IgICAgIHI1LCByNSwgcjQ+PjMwCisrICAgICAgICBsc2wgICAgcjQsIDIKKysgICAgICAgIC8qIHI1LHI0ID0gMi1SW2pdKmQgKi8KKysgICAgICAgIG5lZyAgICByNAorKyAgICAgICAgc2JjICAgIHI1LCByMTIsIHI1CisrICAgICAgICAvKiByMyxyMiA9IFJbal0qKDItUltqXSpkKSAqLworKyAgICAgICAgbXVsX2FwcHJveF9kZiAgICAgICAgcjMgLyphaCovLCByMiAvKmFsKi8sIHI1IC8qYmgqLywgcjQgLypibCovLCByNSAvKnJoKi8sIHI0IC8qcmwqLywgcjEgLypzaCovLCByMCAvKnNsKi8KKysgICAgICAgIGxzbCAgICByMywgcjUsIDIKKysgICAgICAgIG9yICAgICByMywgcjMsIHI0Pj4zMAorKyAgICAgICAgbHNsICAgIHIyLCByNCwgMgorKyAKKysgCisrICAgICAgICAvKiBNdWx0aXBseSB3aXRoIGRpdmlkZW5kIHRvIGdldCBxdW90aWVudCAqLworKyAgICAgICAgbXVsX2FwcHJveF9kZiAgICAgICAgcjMgLyphaCovLCByMiAvKmFsKi8sIHIxMSAvKmJoKi8sIHIxMCAvKmJsKi8sIHIzIC8qcmgqLywgcjIgLypybCovLCByMSAvKnNoKi8sIHIwIC8qc2wqLworKyAKKysgCisrICAgICAgICAvKiBUbyBpbmNyZWFzZSBzcGVlZCwgdGhpcyByZXN1bHQgaXMgbm90IGNvcnJlY3RlZCBiZWZvcmUgZmluYWwgcm91bmRpbmcuKi8KKysgICAgICAgIC8qIFRoaXMgbWF5IGdpdmUgYSBkaWZmZXJlbmNlIHRvIElFRUUgY29tcGxpYW50IGNvZGUgb2YgMSBVTFAuKi8KKysJCQorKyAKKysgICAgICAgIC8qIEFkanVzdCBleHBvbmVudCBhbmQgbWFudGlzc2EgKi8KKysgICAgICAgIC8qIHI3OmV4cCwgW3IzLCByMl06bWFudCwgW3I1LCByNF06c2NyYXRjaCovCisrICAgICAgICAvKiBNYW50aXNzYSBtYXkgYmUgb2YgdGhlIGZvcm1hdCAwLnh4eHggb3IgMS54eHh4LiAqLworKyAgICAgICAgLyogSW4gdGhlIGZpcnN0IGNhc2UsIHNoaWZ0IG9uZSBwb3MgdG8gbGVmdC4qLworKyAgICAgICAgYmxkICAgICByMywgMzEtMworKwlicmVxCTBmCisrCWxzbAlyMiwgMQorKwlyb2wJcjMKKysJc3ViCXI3LCAxCisrI2lmIGRlZmluZWQoTF9hdnIzMl9mNjRfZGl2KQorKwkvKiBXZSBtdXN0IHNjYWxlIGRvd24gdGhlIGRpdmlkZW5kIHRvIDUuNTkgZm9ybWF0LiAqLworKwlsc3IJcjEwLCAzCisrCW9yCXIxMCwgcjEwLCByMTEgPDwgMjkKKysJbHNyCXIxMSwgMworKwlyam1wICAgIDFmCisrI2VuZGlmCQorKzA6CQorKyNpZiBkZWZpbmVkKExfYXZyMzJfZjY0X2RpdikKKysJLyogV2UgbXVzdCBzY2FsZSBkb3duIHRoZSBkaXZpZGVuZCB0byA2LjU4IGZvcm1hdC4gKi8KKysJbHNyCXIxMCwgNAorKwlvcglyMTAsIHIxMCwgcjExIDw8IDI4CisrCWxzcglyMTEsIDQKKysxOgkKKysjZW5kaWYKKysgICAgICAgIGNwICAgICAgcjcsIDAgICAKKysgICAgICAgIGJybGUgICAgX19hdnIzMl9mNjRfZGl2X3Jlc19zdWJub3JtYWwgLyogUmVzdWx0IHdhcyBzdWJub3JtYWwuICovCisrIAorKyAKKysjaWYgZGVmaW5lZChMX2F2cjMyX2Y2NF9kaXYpCisrCS8qIEluIG9yZGVyIHRvIHJvdW5kIGNvcnJlY3RseSB3ZSBjYWxjdWxhdGUgdGhlIHJlbWFpbmRlcjoJCisrCSAgIFJlbWFpbmRlciA9IGRpdmlkZW5kWzExOnIxMF0gLSBkaXZpc29yW3I5OnI4XSpxdW90aWVudFtyMzpyMl0gCisrCSAgIGZvciB0aGUgY2FzZSB3aGVuIHRoZSBxdW90aWVudCBpcyBoYWxmd2F5IGJldHdlZW4gdGhlIHJvdW5kLXVwCisrCSAgIHZhbHVlIGFuZCB0aGUgcm91bmQgZG93biB2YWx1ZS4gSWYgdGhlIHJlbWFpbmRlciB0aGVuIGlzIG5lZ2F0aXZlCisrCSAgIGl0IG1lYW5zIHRoYXQgdGhlIHF1b3RpZW50IHdhcyB0byBiaWcgYW5kIHRoYXQgaXQgc2hvdWxkIG5vdCBiZQorKyAgICAgICAgICAgcm91bmRlZCB1cCwgaWYgdGhlIHJlbWFpbmRlciBpcyBwb3NpdGl2ZSB0aGUgcXVvdGllbnQgd2FzIHRvIHNtYWxsCisrCSAgIGFuZCB3ZSBuZWVkIHRvIHJvdW5kIHVwLiBJZiB0aGUgcmVtYWluZGVyIGlzIHplcm8gaXQgbWVhbnMgdGhhdCB0aGUKKysJICAgcXVvdGllbnQgaXMgZXhhY3QgYnV0IHNpbmNlIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBndWFyZCBiaXQgd2Ugc2hvdWxkCisrCSAgIHJvdW5kIHRvIGV2ZW4uICovCisrCisrCS8qIFRydW5jYXRlIGFuZCBhZGQgZ3VhcmQgYml0LiAqLworKwlhbmRsCXIyLCAweGZmMDAKKysJb3JsCXIyLCAweDAwODAJCisrCQorKworKwkvKiBOb3cgZG8gdGhlIG11bHRpcGxpY2F0aW9uLiBUaGUgcXVvdGllbnQgaGFzIHRoZSBmb3JtYXQgNC42MAorKwkgICB3aGlsZSB0aGUgZGl2aXNvciBoYXMgdGhlIGZvcm1hdCAyLjYyIHdoaWNoIGdpdmVzIGEgcmVzdWx0CisrCSAgIG9mIDYuNTggKi8KKysgICAgICAgIG11bHUuZCAgcjAsIHIzLCByOAorKyAgICAgICAgbWFjdS5kICByMCwgcjIsIHI5CisrICAgICAgICBtdWx1LmQgIHI0LCByMiwgcjgKKysgICAgICAgIG11bHUuZCAgcjgsIHIzLCByOQorKwlhZGQJcjUsIHIwCisrCWFkYwlyOCwgcjgsIHIxCQorKwlhY3IJcjkKKysKKysKKysJLyogQ2hlY2sgaWYgcmVtYWluZGVyIGlzIHBvc2l0aXZlLCBuZWdhdGl2ZSBvciBlcXVhbC4gKi8KKysJYmZleHR1CXIxMiwgcjIsIDgsIDEgIC8qIEdldCBwYXJpdHkgYml0IGludG8gYml0IDAgb2YgcjAgKi8gCisrCWNwCXI0LCAwCisrCWNwYwlyNQorK19fYXZyMzJfZjY0X2Rpdl9yb3VuZF9zdWJub3JtYWw6CQorKwljcGMJcjgsIHIxMAorKwljcGMJcjksIHIxMQorKwlzcmxvCXI2CS8qIFJlbWFpbmRlciBwb3NpdGl2ZToJIHdlIG5lZWQgdG8gcm91bmQgdXAuKi8KKysJbW92ZXEJcjYsIHIxMiAgLyogUmVtYWluZGVyIHplcm86CSByb3VuZCB1cCBpZiBtYW50aXNzYSBvZGQuICovCisrI2Vsc2UKKysJYmZleHR1CXI2LCByMiwgNywgMSAgLyogR2V0IGd1YXJkIGJpdCAqLyAJCisrI2VuZGlmCisrCS8qIEZpbmFsIHBhY2tpbmcsIHNjYWxlIGRvd24gbWFudGlzc2EuICovCisrCWxzcglyMTAsIHIyLCA4CisrICAgICAgICBvciAgICAgIHIxMCwgcjEwLCByMzw8MjQKKysgICAgICAgIGxzciAgICAgcjExLCByMywgOAorKwkvKiBJbnNlcnQgZXhwb25lbnQgYW5kIHNpZ24gYml0Ki8KKysJYmZpbnMJcjExLCByNywgMjAsIDExCisrICAgICAgICBibGQgICAgIGxyLCAzMQorKyAgICAgICAgYnN0ICAgICByMTEsIDMxCisrCisrCS8qIEZpbmFsIHJvdW5kaW5nICovCisrCWFkZAlyMTAsIHI2CisrCWFjcglyMTEJCQorKwkgICAgICAgIAorKyAgICAgICAgLyogUmV0dXJuIHJlc3VsdCBpbiBbcjExLHIxMF0gKi8KKysgICAgICAgIGxkbSAgICAgc3ArKywgcjAsIHIxLCByMiwgcjMsIHI0LCByNSwgcjYsIHI3LHBjCisrIAorKyAgICAgICAgICAgICAgICAKKysyOgorKyAgICAgICAgLyogT3AxIGlzIE5hTiBvciBpbmYgKi8KKysgICAgICAgIGFuZGggICAgcjExLCAweDAwMGYgLyogRXh0cmFjdCBtYW50aXNzYSAqLworKyAgICAgICAgb3IgICAgICByMTEsIHIxMAorKyAgICAgICAgYnJuZSAgICAxNmYgICAgIC8qIFJldHVybiBOYU4gaWYgb3AxIGlzIE5hTiAqLworKyAgICAgICAgLyogT3AxIGlzIGluZiBjaGVjayBvcDIgKi8KKysgICAgICAgIGxzciAgICAgcjYsIHI5LCAyMCAvKiBFeHRyYWN0IGV4cG9uZW50ICovCisrICAgICAgICBjYnIgICAgIHI2LCA4ICAgICAgIC8qIENsZWFyIHNpZ24gYml0ICovCisrICAgICAgICBjcCAgICAgIHI2LCAweDdmZgorKyAgICAgICAgYnJuZSAgICAxN2YgICAgIC8qIEluZi9udW1iZXIgZ2l2ZXMgaW5mLCByZXR1cm4gaW5mICovCisrICAgICAgICByam1wICAgIDE2ZiAgICAgLyogVGhlIHJlc3QgZ2l2ZXMgTmFOKi8KKysgICAgICAgIAorKzM6ICAgICAgCisrICAgICAgICAvKiBPcDEgaXMgYSB2YWxpZCBudW1iZXIuIE9wIDIgaXMgTmFOIG9yIGluZiAqLworKyAgICAgICAgYW5kaCAgICByOSwgMHgwMDBmIC8qIEV4dHJhY3QgbWFudGlzc2EgKi8KKysgICAgICAgIG9yICAgICAgcjksIHI4CisrICAgICAgICBicm5lICAgIDE2ZiAgICAgLyogUmV0dXJuIE5hTiBpZiBvcDIgaXMgTmFOICovCisrICAgICAgICByam1wICAgIDE1ZiAgICAgLyogT3AyIHdhcyBpbmYsIHJldHVybiB6ZXJvKi8KKysgICAgICAgICAgICAgICAgCisrMTE6ICAgICAvKiBPcDEgd2FzIGRlbm9ybWFsLiBGaXggaXQuICovCisrICAgICAgICBsc2wgICAgIHIxMSwgMworKyAgICAgICAgb3IgICAgICByMTEsIHIxMSwgcjEwID4+IDI5CisrICAgICAgICBsc2wgICAgIHIxMCwgMworKyAgICAgICAgLyogQ2hlY2sgaWYgb3AxIGlzIHplcm8uICovCisrICAgICAgICBvciAgICAgIHI0LCByMTAsIHIxMQorKyAgICAgICAgYnJlcSAgICBfX2F2cjMyX2Y2NF9kaXZfb3AxX3plcm8KKysgICAgICAgIG5vcm1hbGl6ZV9kZiAgICByNyAvKmV4cCovLCByMTAsIHIxMSAvKk1hbnRpc3NhKi8sIHI0LCByNSAvKnNjcmF0Y2gqLworKyAgICAgICAgbHNyICAgICByMTAsIDIKKysgICAgICAgIG9yICAgICAgcjEwLCByMTAsIHIxMSA8PCAzMAorKyAgICAgICAgbHNyICAgICByMTEsIDIKKysgICAgICAgIHJqbXAgICAgMjJiCisrIAorKyAKKysxMzogICAgIC8qIE9wMiB3YXMgZGVub3JtYWwuIEZpeCBpdCAqLworKyAgICAgICAgbHNsICAgICByOSwgMworKyAgICAgICAgb3IgICAgICByOSwgcjksIHI4ID4+IDI5CisrICAgICAgICBsc2wgICAgIHI4LCAzCisrICAgICAgICAvKiBDaGVjayBpZiBvcDIgaXMgemVyby4gKi8KKysgICAgICAgIG9yICAgICAgcjQsIHI5LCByOAorKyAgICAgICAgYnJlcSAgICAxN2YgICAgIC8qIERpdmlzb3IgaXMgemVybyAtPiByZXR1cm4gSW5mICovCisrICAgICAgICBub3JtYWxpemVfZGYgICAgcjYgLypleHAqLywgcjgsIHI5IC8qTWFudGlzc2EqLywgcjQsIHI1IC8qc2NyYXRjaCovICAgICAKKysgICAgICAgIGxzciAgICAgcjgsIDIKKysgICAgICAgIG9yICAgICAgcjgsIHI4LCByOSA8PCAzMAorKyAgICAgICAgbHNyICAgICByOSwgMgorKyAgICAgICAgcmptcCAgICAyM2IKKysgICAgICAgIAorKyAKKytfX2F2cjMyX2Y2NF9kaXZfcmVzX3N1Ym5vcm1hbDovKiBEaXZpZGUgcmVzdWx0IHdhcyBzdWJub3JtYWwuICovCisrI2lmIGRlZmluZWQoTF9hdnIzMl9mNjRfZGl2KQorKwkvKiBDaGVjayBob3cgbXVjaCB3ZSBtdXN0IHNjYWxlIGRvd24gdGhlIG1hbnRpc3NhLiAqLworKwluZWcJcjcKKysJc3ViCXI3LCAtMSAgICAgLyogV2UgZG8gbm8gbG9uZ2VyIGhhdmUgYW4gaW1wbGljaXQgYml0LiAqLworKwlzYXR1CXI3ID4+IDAsIDYgLyogU2F0dXJhdGUgc2hpZnQgYW1vdW50IHRvIG1heCA2My4gKi8KKysJY3AudwlyNywgMzIKKysJYnJnZQkwZgorKwkvKiBTaGlmdCBhbW91bnQgPDMyICovCisrCS8qIFNjYWxlIGRvd24gcXVvdGllbnQgKi8KKysJcnN1YglyNiwgcjcsIDMyCisrCWxzcglyMiwgcjIsIHI3CisrCWxzbAlyMTIsIHIzLCByNgorKwlvcglyMiwgcjEyCisrCWxzcglyMywgcjMsIHI3CisrCS8qIFNjYWxlIGRvd24gdGhlIGRpdmlkZW5kIHRvIG1hdGNoIHRoZSBzY2FsaW5nIG9mIHRoZSBxdW90aWVudC4gKi8KKysJbHNsCXIxLCByMTAsIHI2CisrCWxzcglyMTAsIHIxMCwgcjcKKysJbHNsCXIxMiwgcjExLCByNgorKwlvcglyMTAsIHIxMgorKwlsc3IJcjExLCByMTEsIHI3CisrCW1vdglyMCwgMAorKwlyam1wCTFmCisrMDoKKysJLyogU2hpZnQgYW1vdW50ID49MzIgKi8KKysJcnN1YglyNiwgcjcsIDMyCisrCW1vdmVxCXIwLCAwCisrCW1vdmVxCXIxMiwgMAorKwlicmVxCTBmCisrCWxzbAlyMCwgcjEwLCByNgorKwlsc2wJcjEyLCByMTEsIHI2CisrMDoJCisrCWxzcglyMiwgcjMsIHI3CisrCW1vdglyMywgMAorKwkvKiBTY2FsZSBkb3duIHRoZSBkaXZpZGVuZCB0byBtYXRjaCB0aGUgc2NhbGluZyBvZiB0aGUgcXVvdGllbnQuICovCisrCWxzcglyMSwgcjEwLCByNworKwlvcglyMSwgcjEyCisrCWxzcglyMTAsIHIxMSwgcjcKKysJbW92CXIxMSwgMAorKzE6CQorKwkvKiBTdGFydCBwZXJmb3JtaW5nIHRoZSBzYW1lIHJvdW5kaW5nIGFzIGRvbmUgZm9yIG5vcm1hbCBudW1iZXJzCisrCSAgIGJ1dCB0aGlzIHRpbWUgd2UgaGF2ZSBzY2FsZWQgdGhlIHF1b3RpZW50IGFuZCBkaXZpZGVuZCBhbmQgaGVuY2UKKysJICAgbmVlZCBhIGxpdHRsZSBkaWZmZXJlbnQgY29tcGFyaXNvbi4gKi8KKysJLyogVHJ1bmNhdGUgYW5kIGFkZCBndWFyZCBiaXQuICovCisrCWFuZGwJcjIsIDB4ZmYwMAorKwlvcmwJcjIsIDB4MDA4MAkKKysJCisrCS8qIE5vdyBkbyB0aGUgbXVsdGlwbGljYXRpb24uICovCisrICAgICAgICBtdWx1LmQgIHI2LCByMywgcjgKKysgICAgICAgIG1hY3UuZCAgcjYsIHIyLCByOQorKyAgICAgICAgbXVsdS5kICByNCwgcjIsIHI4CisrICAgICAgICBtdWx1LmQgIHI4LCByMywgcjkKKysJYWRkCXI1LCByNgorKwlhZGMJcjgsIHI4LCByNwkKKysJYWNyCXI5CisrCisrCS8qIFNldCBleHBvbmVudCB0byAwICovCisrCW1vdglyNywgMAkKKysKKysJLyogQ2hlY2sgaWYgcmVtYWluZGVyIGlzIHBvc2l0aXZlLCBuZWdhdGl2ZSBvciBlcXVhbC4gKi8KKysJYmZleHR1CXIxMiwgcjIsIDgsIDEgIC8qIEdldCBwYXJpdHkgYml0IGludG8gYml0IDAgb2YgcjAgKi8gCisrCWNwCXI0LCByMAorKwljcGMJcjUsIHIxCisrCS8qIE5vdyB0aGUgcmVzdCBvZiB0aGUgcm91bmRpbmcgaXMgdGhlIHNhbWUgYXMgZm9yIG5vcm1hbHMuICovCisrCXJqbXAJX19hdnIzMl9mNjRfZGl2X3JvdW5kX3N1Ym5vcm1hbAorKwkKKysjZW5kaWYKKysxNToJCisrCS8qIEZsdXNoIHRvIHplcm8gZm9yIHRoZSBmYXN0IHZlcnNpb24uICovCisrICAgICAgICBtb3YgICAgIHIxMSwgbHIgLypHZXQgY29ycmVjdCBzaWduKi8KKysgICAgICAgIGFuZGggICAgcjExLCAweDgwMDAsIENPSAorKyAgICAgICAgbW92ICAgICByMTAsIDAKKysgICAgICAgIGxkbSAgICAgc3ArKywgcjAsIHIxLCByMiwgcjMsIHI0LCByNSwgcjYsIHI3LHBjCisrCSAKKysxNjogICAgIC8qIFJldHVybiBOYU4uICovCisrICAgICAgICBtb3YgICAgIHIxMSwgLTEKKysgICAgICAgIG1vdiAgICAgcjEwLCAtMQorKyAgICAgICAgbGRtICAgICBzcCsrLCByMCwgcjEsIHIyLCByMywgcjQsIHI1LCByNiwgcjcscGMKKysgICAgICAgIAorKzE3OiAgICAgLyogUmV0dXJuIElORi4gKi8KKysgICAgICAgIG1vdiAgICAgcjExLCBsciAvKkdldCBjb3JyZWN0IHNpZ24qLworKyAgICAgICAgYW5kaCAgICByMTEsIDB4ODAwMCwgQ09ICisrICAgICAgICBvcmggICAgIHIxMSwgMHg3ZmYwCisrICAgICAgICBtb3YgICAgIHIxMCwgMAorKyAgICAgICAgbGRtICAgICBzcCsrLCByMCwgcjEsIHIyLCByMywgcjQsIHI1LCByNiwgcjcscGMKKysKKytfX2F2cjMyX2Y2NF9kaXZfb3AxX3plcm86CisrICAgICAgICBvciAgICAgIHI1LCByOCwgcjkgPDwgMQorKyAgICAgICAgYnJlcSAgICAxNmIgICAgICAgICAgICAgLyogMC4wLzAuMCAtPiBOYU4gKi8KKysgICAgICAgIGJmZXh0dSAgcjQsIHI5LCAyMCwgMTEKKysgICAgICAgIGNwICAgICAgcjQsIDB4N2ZmCisrICAgICAgICBicm5lICAgIDE1YiAgICAgICAgICAgICAvKiBSZXR1cm4gemVybyAqLworKyAgICAgICAgLyogQ2hlY2sgaWYgZGl2aXNvciBpcyBJbmYgb3IgTmFOICovCisrICAgICAgICBvciAgICAgIHI1LCByOCwgcjkgPDwgMTIKKysgICAgICAgIGJyZXEgICAgMTViICAgICAgICAgICAgIC8qIERpdmlzb3IgaXMgaW5mIC0+IHJldHVybiB6ZXJvICovCisrICAgICAgICByam1wICAgIDE2YiAgICAgICAgICAgICAvKiBSZXR1cm4gTmFOICovICAgICAgICAgICAgICAgIAorKyAgICAgICAgCisrICAgICAgICAKKysgICAgICAgIAorKworKyNlbmRpZiAgCisrICAgICAgICAgICAgICAgIAorKyNpZiBkZWZpbmVkKExfYXZyMzJfZjMyX2FkZHN1YikgfHwgZGVmaW5lZChMX2F2cjMyX2YzMl9hZGRzdWJfZmFzdCkKKysKKysgICAgICAgIC5hbGlnbiAgMgorK19fYXZyMzJfZjMyX3N1Yl9mcm9tX2FkZDoKKysgICAgICAgIC8qIFN3aXRjaCBzaWduIG9uIG9wMiAqLworKyAgICAgICAgZW9yaCAgICByMTEsIDB4ODAwMAorKworKyNpZiBkZWZpbmVkKExfYXZyMzJfZjMyX2FkZHN1Yl9mYXN0KQorKyAgICAgICAgLmdsb2JhbCBfX2F2cjMyX2YzMl9zdWJfZmFzdAorKyAgICAgICAgLnR5cGUgIF9fYXZyMzJfZjMyX3N1Yl9mYXN0LEBmdW5jdGlvbgorK19fYXZyMzJfZjMyX3N1Yl9mYXN0OgorKyNlbHNlCisrICAgICAgICAuZ2xvYmFsIF9fYXZyMzJfZjMyX3N1YgorKyAgICAgICAgLnR5cGUgIF9fYXZyMzJfZjMyX3N1YixAZnVuY3Rpb24KKytfX2F2cjMyX2YzMl9zdWI6CisrI2VuZGlmIAorKyAKKysgICAgICAgIC8qIENoZWNrIHNpZ25zICovCisrICAgICAgICBlb3IgICAgIHI4LCByMTEsIHIxMgorKyAgICAgICAgLyogRGlmZmVyZW50IHNpZ25zLCB1c2Ugc3VidHJhY3Rpb24uICovCisrICAgICAgICBicm1pICAgIF9fYXZyMzJfZjMyX2FkZF9mcm9tX3N1YgorKyAKKysgICAgICAgIC8qIEdldCBzaWduIG9mIG9wMSAqLworKyAgICAgICAgbW92ICAgICByOCwgcjEyCisrICAgICAgICBhbmRoICAgIHIxMiwgMHg4MDAwLCBDT0ggICAgICAgICAgICAgICAgCisrIAorKyAgICAgICAgLyogUmVtb3ZlIHNpZ24gZnJvbSBvcGVyYW5kcyAqLworKyAgICAgICAgY2JyICAgICByMTEsIDMxCisrI2lmIGRlZmluZWQoTF9hdnIzMl9mMzJfYWRkc3ViX2Zhc3QpCisrICAgICAgICByZXRlcSAgIHI4ICAgICAgLyogSWYgb3AyIGlzIHplcm8gcmV0dXJuIG9wMSAqLworKyNlbmRpZgorKyAgICAgICAgY2JyICAgICByOCwgMzEKKysgCisrICAgICAgICAvKiBQdXQgdGhlIG51bWJlciB3aXRoIHRoZSBsYXJnZXN0IGV4cG9uZW50IGluIHIxMAorKyAgICAgICAgICAgYW5kIHRoZSBudW1iZXIgd2l0aCB0aGUgc21hbGxlc3QgZXhwb25lbnQgaW4gcjkgKi8KKysgICAgICAgIG1heCAgICAgcjEwLCByOCwgcjExCisrICAgICAgICBtaW4gICAgIHI5LCByOCwgcjExCisrICAgICAgICBjcCAgICAgIHIxMCwgcjggLypJZiBsYXJnZXN0IG9wZXJhbmQgKGluIFIxMCkgaXMgbm90IGVxdWFsIHRvIG9wMSovCisrICAgICAgICBzdWJuZSAgIHIxMiwgMSAvKiBTdWJ0cmFjdCAxIGZyb20gc2lnbiwgd2hpY2ggd2lsbCBpbnZlcnQgTVNCIG9mIHIxMiovCisrICAgICAgICBhbmRoICAgIHIxMiwgMHg4MDAwLCBDT0ggLypNYXNrIGFsbCBidXQgTVNCKi8KKysgCisrICAgICAgICAvKiBVbnBhY2sgZXhwb25lbnQgYW5kIG1hbnRpc3NhIG9mIG9wMSAqLworKyAgICAgICAgbHNsICAgICByOCwgcjEwLCA4CisrICAgICAgICBzYnIgICAgIHI4LCAzMSAgLyogU2V0IGltcGxpY2l0IGJpdC4gKi8KKysgICAgICAgIGxzciAgICAgcjEwLCAyMyAKKysgICAgICAgICAgICAgICAgCisrICAgICAgICAvKiBvcDEgaXMgTmFOIG9yIEluZi4gKi8KKysgICAgICAgIGNwLncgICAgcjEwLCAweGZmCisrICAgICAgICBicmVxICAgIF9fYXZyMzJfZjMyX3N1Yl9vcDFfbmFuX29yX2luZgorKyAgICAgICAgCisrICAgICAgICAvKiBVbnBhY2sgZXhwb25lbnQgYW5kIG1hbnRpc3NhIG9mIG9wMiAqLworKyAgICAgICAgbHNsICAgICByMTEsIHI5LCA4CisrICAgICAgICBzYnIgICAgIHIxMSwgMzEgIC8qIFNldCBpbXBsaWNpdCBiaXQuICovCisrICAgICAgICBsc3IgICAgIHI5LCAyMyAgCisrIAorKyNpZiBkZWZpbmVkKExfYXZyMzJfZjMyX2FkZHN1YikKKysgICAgICAgIC8qIEtlZXAgc3RpY2t5IGJpdCBmb3IgY29ycmVjdCBJRUVFIHJvdW5kaW5nICovCisrICAgICAgICBzdC53ICAgIC0tc3AsIHIxMgorKyAKKysgICAgICAgIC8qIG9wMiBpcyBlaXRoZXIgemVybyBvciBzdWJub3JtYWwuICovCisrICAgICAgICBicmVxICAgIF9fYXZyMzJfZjMyX3N1Yl9vcDJfc3Vibm9ybWFsCisrMDogICAgICAKKysgICAgICAgIC8qIEdldCBzaGlmdCBhbW91bnQgdG8gc2NhbGUgbWFudGlzc2Egb2Ygb3AyLiAqLworKyAgICAgICAgc3ViICAgICByMTIsIHIxMCwgcjkgICAgICAgICAgICAgICAgIAorKworKwlicmVxCV9fYXZyMzJfZjMyX3N1Yl9zaGlmdF9kb25lCisrIAorKyAgICAgICAgLyogU2F0dXJhdGUgdGhlIHNoaWZ0IGFtb3VudCB0byAzMS4gSWYgdGhlIGFtb3VudAorKyAgICAgICAgICAgaXMgYW55IGxhcmdlciBvcDIgaXMgaW5zaWduaWZpY2FudC4gKi8KKysgICAgICAgIHNhdHUgICAgcjEyID4+IDAsIDUgICAgICAKKysKKysgICAgICAgIC8qIFB1dCB0aGUgcmVtYWluaW5nIGJpdHMgaW50byByOS4qLworKyAgICAgICAgcnN1YiAgICByOSwgcjEyLCAzMgorKyAgICAgICAgbHNsICAgICByOSwgcjExLCByOQorKwkKKysJLyogSWYgdGhlIHJlbWFpbmluZyBiaXRzIGFyZSBub24temVybyB0aGVuIHdlIG11c3Qgc3VidHJhY3Qgb25lCisrCSAgIG1vcmUgZnJvbSBvcEwuICAqLworKwlzdWJuZQlyOCwgMQorKwlzcm5lCXI5CS8qIExTQiBvZiByOSByZXByZXNlbnRzIHN0aWNreSBiaXRzLiAqLworKworKyAgICAgICAgLyogU2hpZnQgbWFudGlzc2Egb2Ygb3AyIHRvIHNhbWUgZGVjaW1hbCBwb2ludCBhcyB0aGUgbWFudGlzc2EKKysgICAgICAgICAgIG9mIG9wMS4gKi8KKysgICAgICAgIGxzciAgICAgcjExLCByMTEsIHIxMgorKyAKKysKKytfX2F2cjMyX2YzMl9zdWJfc2hpZnRfZG9uZToJCisrICAgICAgICAvKiBOb3cgc3VidHJhY3QgdGhlIG1hbnRpc3Nhcy4gKi8KKysgICAgICAgIHN1YiAgICAgcjgsIHIxMQorKyAKKysgICAgICAgIGxkLncgICAgcjEyLCBzcCsrCisrIAorKyAgICAgICAgLyogTm9ybWFsaXplIHJlc3VsdGluZyBtYW50aXNzYS4gKi8KKysgICAgICAgIGNseiAgICAgcjExLCByOAorKworKwlyZXRjcwkwCisrICAgICAgICBsc2wgICAgIHI4LCByOCwgcjExCisrICAgICAgICBzdWIgICAgIHIxMCwgcjExCisrICAgICAgICBicmxlICAgIF9fYXZyMzJfZjMyX3N1Yl9zdWJub3JtYWxfcmVzdWx0CisrCisrICAgICAgICAvKiBJbnNlcnQgdGhlIGJpdHMgd2Ugd2lsbCByZW1vdmUgZnJvbSB0aGUgbWFudGlzc2EgaW50byByOVszMToyNF0gKi8KKysJb3IJcjksIHI5LCByOCA8PCAyNAorKyNlbHNlCisrICAgICAgICAvKiBJZ25vcmUgc3RpY2t5IGJpdCB0byBzaW1wbGlmeSBhbmQgc3BlZWQgdXAgcm91bmRpbmcgKi8KKysgICAgICAgIC8qIG9wMiBpcyBlaXRoZXIgemVybyBvciBzdWJub3JtYWwuICovCisrICAgICAgICBicmVxICAgIF9fYXZyMzJfZjMyX3N1Yl9vcDJfc3Vibm9ybWFsCisrMDogICAgICAKKysgICAgICAgIC8qIEdldCBzaGlmdCBhbW91bnQgdG8gc2NhbGUgbWFudGlzc2Egb2Ygb3AyLiAqLworKyAgICAgICAgcnN1YiAgICByOSwgcjEwICAgICAgICAgICAgICAgICAKKysgCisrICAgICAgICAvKiBTYXR1cmF0ZSB0aGUgc2hpZnQgYW1vdW50IHRvIDMxLiBJZiB0aGUgYW1vdW50CisrICAgICAgICAgICBpcyBhbnkgbGFyZ2VyIG9wMiBpcyBpbnNpZ25pZmljYW50LiAqLworKyAgICAgICAgc2F0dSAgICByOSA+PiAwLCA1ICAgICAgCisrIAorKyAgICAgICAgLyogU2hpZnQgbWFudGlzc2Egb2Ygb3AyIHRvIHNhbWUgZGVjaW1hbCBwb2ludCBhcyB0aGUgbWFudGlzc2EKKysgICAgICAgICAgIG9mIG9wMS4gKi8KKysgICAgICAgIGxzciAgICAgcjExLCByMTEsIHI5CisrIAorKyAgICAgICAgLyogTm93IHN1YnRyYWN0IHRoZSBtYW50aXNzYXMuICovCisrICAgICAgICBzdWIgICAgIHI4LCByMTEKKysgCisrICAgICAgICAvKiBOb3JtYWxpemUgcmVzdWx0aW5nIG1hbnRpc3NhLiAqLworKyAgICAgICAgY2x6ICAgICByOSwgcjgKKysJcmV0Y3MJMAorKyAgICAgICAgbHNsICAgICByOCwgcjgsIHI5CisrICAgICAgICBzdWIgICAgIHIxMCwgcjkKKysgICAgICAgIGJybGUgICAgX19hdnIzMl9mMzJfc3ViX3N1Ym5vcm1hbF9yZXN1bHQgICAgICAgIAorKyNlbmRpZgorKyAgICAgICAgCisrICAgICAgICAvKiBQYWNrIHJlc3VsdC4gKi8KKysgICAgICAgIG9yICAgICAgcjEyLCByMTIsIHI4ID4+IDgKKysgICAgICAgIGJmaW5zICAgcjEyLCByMTAsIDIzLCA4ICAgICAgICAgCisrIAorKyAgICAgICAgLyogUm91bmQgKi8gICAgIAorK19fYXZyMzJfZjMyX3N1Yl9yb3VuZDoKKysjaWYgZGVmaW5lZChMX2F2cjMyX2YzMl9hZGRzdWIpCisrCW1vdl9pbW0JcjEwLCAweDgwMDAwMDAwCisrICAgICAgICBibGQgICAgIHIxMiwgMAorKyAgICAgICAgc3VibmUgICByMTAsIC0xIAorKyAgICAgICAgY3AudyAgICByOSwgcjEwCisrICAgICAgICBzdWJocyAgIHIxMiwgLTEKKysjZWxzZQorKyAgICAgICAgYmxkICAgICByOCwgNyAKKysgICAgICAgIGFjciAgICAgcjEyCisrI2VuZGlmICAKKysgICAgICAgIAorKyAgICAgICAgcmV0ICAgICByMTIgICAgIAorKyAKKysgCisrX19hdnIzMl9mMzJfc3ViX29wMl9zdWJub3JtYWw6CisrICAgICAgICAvKiBGaXggaW1wbGljaXQgYml0IGFuZCBhZGp1c3QgZXhwb25lbnQgb2Ygc3Vibm9ybWFscy4gKi8KKysgICAgICAgIGNiciAgICAgcjExLCAzMQorKyAgICAgICAgLyogU2V0IGV4cG9uZW50IHRvIDEgaWYgd2UgZG8gbm90IGhhdmUgYSB6ZXJvLiAqLworKyAgICAgICAgbW92bmUgICByOSwxCisrIAorKyAgICAgICAgLyogQ2hlY2sgaWYgb3AxIGlzIGFsc28gc3Vibm9ybWFsLiAqLworKyAgICAgICAgY3AudyAgICByMTAsIDAKKysgICAgICAgIGJybmUgICAgMGIKKysgCisrICAgICAgICBjYnIgICAgIHI4LCAzMQorKyAgICAgICAgIC8qIElmIG9wMSBpcyBub3QgemVybyBzZXQgZXhwb25lbnQgdG8gMS4gKi8KKysgICAgICAgIG1vdm5lICAgcjEwLDEKKysgICAgICAgICAgICAgICAgCisrICAgICAgICByam1wICAgIDBiCisrIAorK19fYXZyMzJfZjMyX3N1Yl9vcDFfbmFuX29yX2luZjogCisrICAgICAgICAvKiBDaGVjayBpZiBvcDEgaXMgTmFOLCBpZiBzbyByZXR1cm4gTmFOICovCisrICAgICAgICBsc2wgICAgIHIxMSwgcjgsIDEKKysgICAgICAgIHJldG5lICAgLTEKKysgCisrICAgICAgICAvKiBvcDEgaXMgSW5mLiAqLworKyAgICAgICAgYmZpbnMgICByMTIsIHIxMCwgMjMsIDggLyogR2VuZXJhdGUgSW5mIGluIHIxMiAqLworKyAKKysgICAgICAgIC8qIENoZWNrIGlmIG9wMiBpcyBJbmYuIG9yIE5hTiAqLworKyAgICAgICAgbHNyICAgICByMTEsIHI5LCAyMworKyAgICAgICAgY3AudyAgICByMTEsIDB4ZmYKKysgICAgICAgIHJldG5lICAgcjEyICAgICAgICAgICAgIC8qIG9wMiBub3QgSW5mIG9yIE5hTiwgcmV0dXJuIG9wMSAqLworKyAKKysgICAgICAgIHJldCAgICAgLTEgICAgICAgICAgICAgIC8qIG9wMiBJbmYgb3IgTmFOLCByZXR1cm4gTmFOICovCisrIAorK19fYXZyMzJfZjMyX3N1Yl9zdWJub3JtYWxfcmVzdWx0OgorKyAgICAgICAgLyogQ2hlY2sgaWYgdGhlIG51bWJlciBpcyBzbyBzbWFsbCB0aGF0CisrICAgICAgICAgICBpdCB3aWxsIGJlIHJlcHJlc2VudGVkIHdpdGggemVyby4gKi8KKysgICAgICAgIHJzdWIgICAgcjEwLCByMTAsIDkKKysgICAgICAgIHJzdWIgICAgcjExLCByMTAsIDMyCisrICAgICAgICByZXRjcyAgIDAKKysgCisrICAgICAgICAvKiBTaGlmdCB0aGUgbWFudGlzc2EgaW50byB0aGUgY29ycmVjdCBwb3NpdGlvbi4qLworKyAgICAgICAgbHNyICAgICByMTAsIHI4LCByMTAKKysgICAgICAgIC8qIEFkZCBzaWduIGJpdC4gKi8KKysgICAgICAgIG9yICAgICAgcjEyLCByMTAKKysKKysgICAgICAgIC8qIFB1dCB0aGUgc2hpZnRlZCBvdXQgYml0cyBpbiB0aGUgbW9zdCBzaWduaWZpY2FudCBwYXJ0CisrICAgICAgICAgICBvZiByOC4gKi8KKysgICAgICAgIGxzbCAgICAgcjgsIHI4LCByMTEKKysgCisrI2lmIGRlZmluZWQoTF9hdnIzMl9mMzJfYWRkc3ViKQorKyAgICAgICAgLyogQWRkIGFsbCB0aGUgcmVtYWluZGVyIGJpdHMgdXNlZCBmb3Igcm91bmRpbmcgaW50byByOSAqLworKyAgICAgICAgb3IgICAgICByOSwgcjgKKysjZWxzZQorKyAgICAgICAgbHNyICAgICByOCwgMjQgCisrI2VuZGlmCisrICAgICAgICByam1wICAgIF9fYXZyMzJfZjMyX3N1Yl9yb3VuZAorKyAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKyAgICAgICAgLmFsaWduICAyCisrCisrX19hdnIzMl9mMzJfYWRkX2Zyb21fc3ViOgorKyAgICAgICAgLyogU3dpdGNoIHNpZ24gb24gb3AyICovCisrICAgICAgICBlb3JoICAgIHIxMSwgMHg4MDAwCisrCisrI2lmIGRlZmluZWQoTF9hdnIzMl9mMzJfYWRkc3ViX2Zhc3QpCisrICAgICAgICAuZ2xvYmFsIF9fYXZyMzJfZjMyX2FkZF9mYXN0CisrICAgICAgICAudHlwZSAgX19hdnIzMl9mMzJfYWRkX2Zhc3QsQGZ1bmN0aW9uCisrX19hdnIzMl9mMzJfYWRkX2Zhc3Q6CisrI2Vsc2UKKysgICAgICAgIC5nbG9iYWwgX19hdnIzMl9mMzJfYWRkCisrICAgICAgICAudHlwZSAgX19hdnIzMl9mMzJfYWRkLEBmdW5jdGlvbgorK19fYXZyMzJfZjMyX2FkZDoKKysjZW5kaWYgCisrCQorKyAgICAgICAgLyogQ2hlY2sgc2lnbnMgKi8KKysgICAgICAgIGVvciAgICAgcjgsIHIxMSwgcjEyCisrICAgICAgICAvKiBEaWZmZXJlbnQgc2lnbnMsIHVzZSBzdWJ0cmFjdGlvbi4gKi8KKysgICAgICAgIGJybWkgICAgX19hdnIzMl9mMzJfc3ViX2Zyb21fYWRkCisrIAorKyAgICAgICAgLyogR2V0IHNpZ24gb2Ygb3AxICovCisrICAgICAgICBtb3YgICAgIHI4LCByMTIKKysgICAgICAgIGFuZGggICAgcjEyLCAweDgwMDAsIENPSCAgICAgICAgICAgICAgICAKKysgCisrICAgICAgICAvKiBSZW1vdmUgc2lnbiBmcm9tIG9wZXJhbmRzICovCisrICAgICAgICBjYnIgICAgIHIxMSwgMzEKKysjaWYgZGVmaW5lZChMX2F2cjMyX2YzMl9hZGRzdWJfZmFzdCkKKysgICAgICAgIHJldGVxICAgcjggICAgICAvKiBJZiBvcDIgaXMgemVybyByZXR1cm4gb3AxICovCisrI2VuZGlmCisrICAgICAgICBjYnIgICAgIHI4LCAzMQorKyAKKysgICAgICAgIC8qIFB1dCB0aGUgbnVtYmVyIHdpdGggdGhlIGxhcmdlc3QgZXhwb25lbnQgaW4gcjEwCisrICAgICAgICAgICBhbmQgdGhlIG51bWJlciB3aXRoIHRoZSBzbWFsbGVzdCBleHBvbmVudCBpbiByOSAqLworKyAgICAgICAgbWF4ICAgICByMTAsIHI4LCByMTEKKysgICAgICAgIG1pbiAgICAgcjksIHI4LCByMTEKKysgCisrICAgICAgICAvKiBVbnBhY2sgZXhwb25lbnQgYW5kIG1hbnRpc3NhIG9mIG9wMSAqLworKyAgICAgICAgbHNsICAgICByOCwgcjEwLCA4CisrICAgICAgICBzYnIgICAgIHI4LCAzMSAgLyogU2V0IGltcGxpY2l0IGJpdC4gKi8KKysgICAgICAgIGxzciAgICAgcjEwLCAyMyAKKysgICAgICAgICAgICAgICAgCisrICAgICAgICAvKiBvcDEgaXMgTmFOIG9yIEluZi4gKi8KKysgICAgICAgIGNwLncgICAgcjEwLCAweGZmCisrICAgICAgICBicmVxICAgIF9fYXZyMzJfZjMyX2FkZF9vcDFfbmFuX29yX2luZgorKyAgICAgICAgCisrICAgICAgICAvKiBVbnBhY2sgZXhwb25lbnQgYW5kIG1hbnRpc3NhIG9mIG9wMiAqLworKyAgICAgICAgbHNsICAgICByMTEsIHI5LCA4CisrICAgICAgICBzYnIgICAgIHIxMSwgMzEgIC8qIFNldCBpbXBsaWNpdCBiaXQuICovCisrICAgICAgICBsc3IgICAgIHI5LCAyMyAgCisrIAorKyNpZiBkZWZpbmVkKExfYXZyMzJfZjMyX2FkZHN1YikKKysgICAgICAgIC8qIG9wMiBpcyBlaXRoZXIgemVybyBvciBzdWJub3JtYWwuICovCisrICAgICAgICBicmVxICAgIF9fYXZyMzJfZjMyX2FkZF9vcDJfc3Vibm9ybWFsCisrMDogICAgICAKKysgICAgICAgIC8qIEtlZXAgc3RpY2t5IGJpdCBmb3IgY29ycmVjdCBJRUVFIHJvdW5kaW5nICovCisrICAgICAgICBzdC53ICAgIC0tc3AsIHIxMgorKyAKKysgICAgICAgIC8qIEdldCBzaGlmdCBhbW91bnQgdG8gc2NhbGUgbWFudGlzc2Egb2Ygb3AyLiAqLworKyAgICAgICAgcnN1YiAgICByOSwgcjEwICAgICAgICAgICAgICAgICAKKysgCisrICAgICAgICAvKiBTYXR1cmF0ZSB0aGUgc2hpZnQgYW1vdW50IHRvIDMxLiBJZiB0aGUgYW1vdW50CisrICAgICAgICAgICBpcyBhbnkgbGFyZ2VyIG9wMiBpcyBpbnNpZ25pZmljYW50LiAqLworKyAgICAgICAgc2F0dSAgICByOSA+PiAwLCA1ICAgICAgCisrIAorKyAgICAgICAgLyogU2hpZnQgbWFudGlzc2Egb2Ygb3AyIHRvIHNhbWUgZGVjaW1hbCBwb2ludCBhcyB0aGUgbWFudGlzc2EKKysgICAgICAgICAgIG9mIG9wMS4gKi8KKysgICAgICAgIGxzciAgICAgcjEyLCByMTEsIHI5CisrIAorKyAgICAgICAgLyogUHV0IHRoZSByZW1haW5kaW5nIGJpdHMgaW50byByMTFbMjM6Li5dLiovCisrICAgICAgICByc3ViICAgIHI5LCByOSwgKDMyLTgpCisrICAgICAgICBsc2wgICAgIHIxMSwgcjExLCByOQorKyAgICAgICAgLyogSW5zZXJ0IHRoZSBiaXRzIHdlIHdpbGwgcmVtb3ZlIGZyb20gdGhlIG1hbnRpc3NhIGludG8gcjExWzMxOjI0XSAqLworKyAgICAgICAgYmZpbnMgICByMTEsIHIxMiwgMjQsIDgKKysgCisrICAgICAgICAvKiBOb3cgYWRkIHRoZSBtYW50aXNzYXMuICovCisrICAgICAgICBhZGQgICAgIHI4LCByMTIKKysgCisrICAgICAgICBsZC53ICAgIHIxMiwgc3ArKworKyNlbHNlCisrICAgICAgICAvKiBJZ25vcmUgc3RpY2t5IGJpdCB0byBzaW1wbGlmeSBhbmQgc3BlZWQgdXAgcm91bmRpbmcgKi8KKysgICAgICAgIC8qIG9wMiBpcyBlaXRoZXIgemVybyBvciBzdWJub3JtYWwuICovCisrICAgICAgICBicmVxICAgIF9fYXZyMzJfZjMyX2FkZF9vcDJfc3Vibm9ybWFsCisrMDogICAgICAKKysgICAgICAgIC8qIEdldCBzaGlmdCBhbW91bnQgdG8gc2NhbGUgbWFudGlzc2Egb2Ygb3AyLiAqLworKyAgICAgICAgcnN1YiAgICByOSwgcjEwICAgICAgICAgICAgICAgICAKKysgCisrICAgICAgICAvKiBTYXR1cmF0ZSB0aGUgc2hpZnQgYW1vdW50IHRvIDMxLiBJZiB0aGUgYW1vdW50CisrICAgICAgICAgICBpcyBhbnkgbGFyZ2VyIG9wMiBpcyBpbnNpZ25pZmljYW50LiAqLworKyAgICAgICAgc2F0dSAgICByOSA+PiAwLCA1ICAgICAgCisrIAorKyAgICAgICAgLyogU2hpZnQgbWFudGlzc2Egb2Ygb3AyIHRvIHNhbWUgZGVjaW1hbCBwb2ludCBhcyB0aGUgbWFudGlzc2EKKysgICAgICAgICAgIG9mIG9wMS4gKi8KKysgICAgICAgIGxzciAgICAgcjExLCByMTEsIHI5CisrIAorKyAgICAgICAgLyogTm93IGFkZCB0aGUgbWFudGlzc2FzLiAqLworKyAgICAgICAgYWRkICAgICByOCwgcjExCisrICAgICAgICAKKysjZW5kaWYKKysgICAgICAgIC8qIENoZWNrIGlmIHdlIG92ZXJmbG93ZWQuICovCisrICAgICAgICBicmNzICAgIF9fYXZyMzJfZjMyX2FkZF9yZXNfb2YKKysxOiAgICAgIAorKyAgICAgICAgLyogUGFjayByZXN1bHQuICovCisrICAgICAgICBvciAgICAgIHIxMiwgcjEyLCByOCA+PiA4CisrICAgICAgICBiZmlucyAgIHIxMiwgcjEwLCAyMywgOCAgICAgICAgIAorKyAKKysgICAgICAgIC8qIFJvdW5kICovICAgICAKKysjaWYgZGVmaW5lZChMX2F2cjMyX2YzMl9hZGRzdWIpCisrCW1vdl9pbW0JcjEwLCAweDgwMDAwMDAwCisrICAgICAgICBibGQgICAgIHIxMiwgMAorKyAgICAgICAgc3VibmUgICByMTAsIC0xIAorKyAgICAgICAgY3AudyAgICByMTEsIHIxMAorKyAgICAgICAgc3ViaHMgICByMTIsIC0xCisrI2Vsc2UKKysgICAgICAgIGJsZCAgICAgcjgsIDcgCisrICAgICAgICBhY3IgICAgIHIxMgorKyNlbmRpZiAgCisrCisrICAgICAgICByZXQgICAgIHIxMiAgICAgCisrIAorK19fYXZyMzJfZjMyX2FkZF9vcDJfc3Vibm9ybWFsOgorKyAgICAgICAgLyogRml4IGltcGxpY2l0IGJpdCBhbmQgYWRqdXN0IGV4cG9uZW50IG9mIHN1Ym5vcm1hbHMuICovCisrICAgICAgICBjYnIgICAgIHIxMSwgMzEKKysgICAgICAgIC8qIFNldCBleHBvbmVudCB0byAxIGlmIHdlIGRvIG5vdCBoYXZlIGEgemVyby4gKi8KKysgICAgICAgIG1vdm5lICAgcjksMQorKyAKKysgICAgICAgIC8qIENoZWNrIGlmIG9wMSBpcyBhbHNvIHN1Ym5vcm1hbC4gKi8KKysgICAgICAgIGNwLncgICAgcjEwLCAwCisrICAgICAgICBicm5lICAgIDBiCisrCS8qIEJvdGggb3BlcmFuZHMgc3Vibm9ybWFsLCBqdXN0IGFkZCB0aGUgbWFudGlzc2FzIGFuZCAKKysJICAgcGFjay4gSWYgdGhlIGFkZGl0aW9uIG9mIHRoZSBzdWJub3JtYWwgbnVtYmVycyByZXN1bHRzCisrCSAgIGluIGEgbm9ybWFsIG51bWJlciB0aGVuIHRoZSBleHBvbmVudCB3aWxsIGF1dG9tYXRpY2FsbHkKKysJICAgYmUgc2V0IHRvIDEgYnkgdGhlIGFkZGl0aW9uLiAqLworKyAgICAgICAgY2JyICAgICByOCwgMzEKKysJYWRkCXIxMSwgcjgKKysJb3IJcjEyLCByMTIsIHIxMSA+PiA4CisrCXJldAlyMTIKKysgCisrX19hdnIzMl9mMzJfYWRkX29wMV9uYW5fb3JfaW5mOiAKKysgICAgICAgIC8qIENoZWNrIGlmIG9wMSBpcyBOYU4sIGlmIHNvIHJldHVybiBOYU4gKi8KKysgICAgICAgIGxzbCAgICAgcjExLCByOCwgMQorKyAgICAgICAgcmV0bmUgICAtMQorKyAKKysgICAgICAgIC8qIG9wMSBpcyBJbmYuICovCisrICAgICAgICBiZmlucyAgIHIxMiwgcjEwLCAyMywgOCAvKiBHZW5lcmF0ZSBJbmYgaW4gcjEyICovCisrIAorKyAgICAgICAgLyogQ2hlY2sgaWYgb3AyIGlzIEluZi4gb3IgTmFOICovCisrICAgICAgICBsc3IgICAgIHIxMSwgcjksIDIzCisrICAgICAgICBjcC53ICAgIHIxMSwgMHhmZgorKyAgICAgICAgcmV0bmUgICByMTIgICAgICAgICAgICAgLyogb3AyIG5vdCBJbmYgb3IgTmFOLCByZXR1cm4gb3AxICovCisrIAorKyAgICAgICAgbHNsICAgICByOSwgOQorKyAgICAgICAgcmV0ZXEgICByMTIgICAgICAgICAgICAgLyogb3AyIEluZiByZXR1cm4gb3AxICovCisrICAgICAgICByZXQgICAgIC0xICAgICAgICAgICAgICAvKiBvcDIgaXMgTmFOLCByZXR1cm4gTmFOICovIAorKyAKKytfX2F2cjMyX2YzMl9hZGRfcmVzX29mOgorKyAgICAgICAgLyogV2Ugb3ZlcmZsb3dlZC4gSW5jcmVhc2UgZXhwb25lbnQgYW5kIHNoaWZ0IG1hbnRpc3NhLiovCisrICAgICAgICBsc3IgICAgIHI4LCAxCisrICAgICAgICBzdWIgICAgIHIxMCwgLTEKKysgCisrICAgICAgICAvKiBDbGVhciBtYW50aXNzYSB0byBzZXQgcmVzdWx0IHRvIEluZiBpZiB0aGUgZXhwb25lbnQgaXMgMjU1LiAqLworKyAgICAgICAgY3AudyAgICByMTAsIDI1NQorKyAgICAgICAgbW92ZXEgICByOCwgMAorKyAgICAgICAgbW92ZXEgICByMTEsIDAKKysgICAgICAgIHJqbXAgICAgMWIgICAgICAKKysgICAgICAgIAorKyAgICAgICAgCisrI2VuZGlmCisrCisrCQorKyNpZiBkZWZpbmVkKExfYXZyMzJfZjMyX2RpdikgfHwgZGVmaW5lZChMX2F2cjMyX2YzMl9kaXZfZmFzdCkKKysJLmFsaWduCTIKKysKKysjaWYgZGVmaW5lZChMX2F2cjMyX2YzMl9kaXZfZmFzdCkKKysgICAgICAgIC5nbG9iYWwgX19hdnIzMl9mMzJfZGl2X2Zhc3QKKysgICAgICAgIC50eXBlICBfX2F2cjMyX2YzMl9kaXZfZmFzdCxAZnVuY3Rpb24KKytfX2F2cjMyX2YzMl9kaXZfZmFzdDoKKysjZWxzZQorKyAgICAgICAgLmdsb2JhbCBfX2F2cjMyX2YzMl9kaXYKKysgICAgICAgIC50eXBlICBfX2F2cjMyX2YzMl9kaXYsQGZ1bmN0aW9uCisrX19hdnIzMl9mMzJfZGl2OgorKyNlbmRpZgorKwkgCisrICAgICAgICBlb3IgICAgIHI4LCByMTEsIHIxMiAgICAgICAgICAgIC8qIE1TQihyOCkgPSBTaWduKG9wMSkgXiBTaWduKG9wMikgKi8KKysgCisrICAgICAgICAvKiBVbnBhY2sgKi8KKysgICAgICAgIGxzbCAgICAgcjEyLDEKKysgICAgICAgIHJldGVxICAgMCAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHplcm8gaWYgb3AxIGlzIHplcm8gKi8KKysgICAgICAgIGxzbCAgICAgcjExLDEKKysgICAgICAgIGJyZXEgICAgNGYgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgb3AyIGZvciB6ZXJvICovCisrICAgICAgICAKKysgICAgICAgIC8qIFVucGFjayBvcDEqLyAKKysgICAgICAgIC8qIGV4cDogcjkgKi8KKysgICAgICAgIC8qIHNmOiAgcjEyICovCisrICAgICAgICBsc3IgICAgIHI5LCByMTIsIDI0CisrICAgICAgICBicmVxICAgIDExZiAvKklmIG51bWJlciBpcyBzdWJub3JtYWwqLworKyAgICAgICAgY3AgICAgICByOSwgMHhmZgorKyAgICAgICAgYnJocyAgICAyZiAgLyogQ2hlY2sgb3AxIGZvciBOYU4gb3IgSW5mICovICAgICAgCisrICAgICAgICBsc2wgICAgIHIxMiwgNworKyAgICAgICAgc2JyICAgICByMTIsIDMxIC8qSW1wbGljaXQgYml0Ki8KKysxMjogICAgICAgICAgICAgICAgICAgICAKKysgCisrICAgICAgICAvKiBVbnBhY2sgb3AyKi8KKysgICAgICAgIC8qIGV4cDogcjEwICovCisrICAgICAgICAvKiBzZjogIHIxMSAqLworKyAgICAgICAgbHNyICAgICByMTAsIHIxMSwgMjQKKysgICAgICAgIGJyZXEgICAgMTNmIC8qSWYgbnVtYmVyIGlzIHN1Ym5vcm1hbCovCisrICAgICAgICBjcCAgICAgIHIxMCwgMHhmZgorKyAgICAgICAgYnJocyAgICAzZiAgLyogQ2hlY2sgb3AyIGZvciBOYU4gb3IgSW5mICovICAgICAgCisrICAgICAgICAKKysgICAgICAgIGxzbCAgICAgcjExLDcKKysgICAgICAgIHNiciAgICAgcjExLCAzMSAvKkltcGxpY2l0IGJpdCovCisrMTQ6ICAgICAKKysgCisrICAgICAgICAvKiBGb3IgVUMzLCBzdG9yZSB3aXRoIHByZWRlY3JlbWVudCBpcyBmYXN0ZXIgdGhhbiBzdG0gKi8KKysgICAgICAgIHN0LncgICAgLS1zcCwgcjUKKysgICAgICAgIHN0LmQgICAgLS1zcCwgcjYKKysgCisrICAgICAgICAvKiBDYWxjdWxhdGUgbmV3IGV4cG9uZW50ICovCisrICAgICAgICBzdWIgICAgIHI5LCByMTAKKysgICAgICAgIHN1YiAgICAgcjksLTEyNworKyAKKysgICAgICAgIC8qIERpdmlkZSAqLworKyAgICAgICAgLyogQXBwcm94aW1hdGluZyAxL2Qgd2l0aCB0aGUgZm9sbG93aW5nIHJlY3VycmVuY2U6ICovCisrICAgICAgICAvKiBSW2orMV0gPSBSW2pdKigyLVJbal0qZCkgKi8KKysgICAgICAgIC8qIFVzaW5nIDIuMzAgZm9ybWF0ICovCisrICAgICAgICAvKiBUV086ICByMTAgKi8KKysgICAgICAgIC8qIGQ6ICAgIHI1ICovCisrICAgICAgICAvKiBNdWx0aXBseSByZXN1bHQgOiAgICAgcjYsIHI3ICovCisrICAgICAgICAvKiBJbml0aWFsIGd1ZXNzIDogICAgICAgcjExICovCisrICAgICAgICAvKiBOZXcgYXBwcm94aW1hdGlvbnMgOiAgcjExICovCisrICAgICAgICAvKiBEaXZpZGVuZCA6ICAgICAgICAgICAgcjEyICovCisrCisrCS8qIExvYWQgVFdPICovCisrCW1vdl9pbW0JcjEwLCAweDgwMDAwMDAwIAorKyAgICAgICAgIAorKyAgICAgICAgbHNyICAgICByMTIsIDIgICAgIC8qIEdldCBzaWduaWZpY2FuZCBvZiBPcDEgaW4gMi4zMCBmb3JtYXQgKi8KKysgICAgICAgIGxzciAgICAgcjUsIHIxMSwgMiAvKiBHZXQgc2lnbmlmaWNhbmQgb2YgT3AyICg9ZCkgaW4gMi4zMCBmb3JtYXQgKi8KKysgCisrICAgICAgICAvKiBMb2FkIGluaXRpYWwgZ3Vlc3MsIHVzaW5nIGxvb2stdXAgdGFibGUgKi8KKysgICAgICAgIC8qIEluaXRpYWwgZ3Vlc3MgaXMgb2YgZm9ybWF0IDAxLlhZLCB3aGVyZSBYWSBpcyBjb25zdHJ1Y3RlZCBhcyBmb2xsb3dzOiAqLworKyAgICAgICAgLyogTGV0IGQgYmUgb2YgZm9sbG93aW5nIGZvcm1hdDogMDAuMXh5Li4uLi4sIHRoZW4gWFk9fnh5ICovCisrICAgICAgICAvKiBGb3IgZD0wMC4xMDAgPSAwLDUgICAtPiBpbml0aWFsIGd1ZXNzPTAxLjExID0gMSw3NSAqLworKyAgICAgICAgLyogRm9yIGQ9MDAuMTAxID0gMCw2MjUgLT4gaW5pdGlhbCBndWVzcz0wMS4xMSA9IDEsNSAgKi8KKysgICAgICAgIC8qIEZvciBkPTAwLjExMCA9IDAsNzUgIC0+IGluaXRpYWwgZ3Vlc3M9MDEuMTEgPSAxLDI1ICovCisrICAgICAgICAvKiBGb3IgZD0wMC4xMTEgPSAwLDg3NSAtPiBpbml0aWFsIGd1ZXNzPTAxLjExID0gMSwwICAqLworKyAKKysgICAgICAgIGxzciAgICAgcjExLCByMTAsIDEKKysgICAgICAgIGJmZXh0dSAgcjYsIHI1LCAyNywgMgorKyAgICAgICAgY29tICAgICByNgorKyAgICAgICAgYmZpbnMgICByMTEsIHI2LCAyOCwgMgorKyAKKysgICAgICAgIC8qIEZpcnN0IGFwcHJveGltYXRpb24gKi8KKysgICAgICAgIC8qIHI3ID0gUltqXSpkICovCisrICAgICAgICBtdWx1LmQgIHI2LCByMTEsIHI1CisrICAgICAgICAvKiByNyA9IDItUltqXSpkICovCisrICAgICAgICBzdWIgICAgcjcsIHIxMCwgcjc8PDIKKysgICAgICAgIC8qIHIxMSA9IFJbal0qKDItUltqXSpkKSAqLworKyAgICAgICAgbXVsdS5kICByNiwgcjExLCByNworKyAgICAgICAgbHNsICAgICByMTEsIHI3LCAyCisrICAgICAgICAgCisrICAgICAgICAvKiBTZWNvbmQgYXBwcm94aW1hdGlvbiAqLworKyAgICAgICAgLyogcjcgPSBSW2pdKmQgKi8KKysgICAgICAgIG11bHUuZCAgcjYsIHIxMSwgcjUKKysgICAgICAgIC8qIHI3ID0gMi1SW2pdKmQgKi8KKysgICAgICAgIHN1YiAgICByNywgcjEwLCByNzw8MgorKyAgICAgICAgLyogcjExID0gUltqXSooMi1SW2pdKmQpICovCisrICAgICAgICBtdWx1LmQgIHI2LCByMTEsIHI3CisrICAgICAgICBsc2wgICAgIHIxMSwgcjcsIDIKKysgICAgICAgICAKKysgICAgICAgIC8qIFRoaXJkIGFwcHJveGltYXRpb24gKi8KKysgICAgICAgIC8qIHI3ID0gUltqXSpkICovCisrICAgICAgICBtdWx1LmQgIHI2LCByMTEsIHI1CisrICAgICAgICAvKiByNyA9IDItUltqXSpkICovCisrICAgICAgICBzdWIgICAgcjcsIHIxMCwgcjc8PDIKKysgICAgICAgIC8qIHIxMSA9IFJbal0qKDItUltqXSpkKSAqLworKyAgICAgICAgbXVsdS5kICByNiwgcjExLCByNworKyAgICAgICAgbHNsICAgICByMTEsIHI3LCAyCisrIAorKyAgICAgICAgLyogRm91cnRoIGFwcHJveGltYXRpb24gKi8KKysgICAgICAgIC8qIHI3ID0gUltqXSpkICovCisrICAgICAgICBtdWx1LmQgIHI2LCByMTEsIHI1CisrICAgICAgICAvKiByNyA9IDItUltqXSpkICovCisrICAgICAgICBzdWIgICAgcjcsIHIxMCwgcjc8PDIKKysgICAgICAgIC8qIHIxMSA9IFJbal0qKDItUltqXSpkKSAqLworKyAgICAgICAgbXVsdS5kICByNiwgcjExLCByNworKyAgICAgICAgbHNsICAgICByMTEsIHI3LCAyCisrIAorKyAKKysgICAgICAgIC8qIE11bHRpcGx5IHdpdGggZGl2aWRlbmQgdG8gZ2V0IHF1b3RpZW50LCByNyA9IHNmKG9wMSkvc2Yob3AyKSAqLworKyAgICAgICAgbXVsdS5kICByNiwgcjExLCByMTIKKysgCisrICAgICAgICAvKiBTaGlmdCBieSAzIHRvIGdldCByZXN1bHQgaW4gMS4zMSBmb3JtYXQsIGFzIHJlcXVpcmVkIGJ5IHRoZSBleHBvbmVudC4gKi8KKysgICAgICAgIC8qIE5vdGUgdGhhdCAxLjMxIGZvcm1hdCBpcyBhbHJlYWR5IHVzZWQgYnkgdGhlIGV4cG9uZW50IGluIHI5LCBzaW5jZSAqLworKyAgICAgICAgLyogYSBiaWFzIG9mIDEyNyB3YXMgYWRkZWQgdG8gdGhlIHJlc3VsdCBleHBvbmVudCwgZXZlbiB0aG91Z2ggdGhlIGltcGxpY2l0ICovCisrICAgICAgICAvKiBiaXQgd2FzIGluc2VydGVkLiBUaGlzIGdpdmVzIHRoZSBleHBvbmVudCBhbiBhZGRpdGlvbmFsIGJpYXMgb2YgMSwgd2hpY2ggKi8KKysgICAgICAgIC8qIHN1cHBvcnRzIDEuMzEgZm9ybWF0LiAqLworKwkvL2xzbCAgICAgcjEwLCByNywgMworKworKwkvKiBBZGp1c3QgZXhwb25lbnQgYW5kIG1hbnRpc3NhIGluIGNhc2UgdGhlIHJlc3VsdCBpcyBvZiBmb3JtYXQKKysJICAgMDAwMC4xeHh4IHRvIDAwMDEueHh4Ki8JCisrI2lmIGRlZmluZWQoTF9hdnIzMl9mMzJfZGl2KQorKwlsc3IJcjEyLCA0CS8qIFNjYWxlIGRpdmlkZW5kIHRvIDYuMjYgZm9ybWF0IHRvIG1hdGNoIHRoZQorKwkJCSAgIHJlc3VsdCBvZiB0aGUgbXVsdGlwbGljYXRpb24gb2YgdGhlIGRpdmlzb3IgYW5kIAorKwkJCSAgIHF1b3RpZW50IHRvIGdldCB0aGUgcmVtYWluZGVyLiAqLworKyNlbmRpZgorKwlibGQJcjcsIDMxLTMKKysJYnJlcQkwZgorKwlsc2wJcjcsIDEJCisrCXN1YglyOSwgMQorKyNpZiBkZWZpbmVkKExfYXZyMzJfZjMyX2RpdikKKysJbHNsCXIxMiwgMQkvKiBTY2FsZSBkaXZpZGVuZCB0byA1LjI3IGZvcm1hdCB0byBtYXRjaCB0aGUKKysJCQkgICByZXN1bHQgb2YgdGhlIG11bHRpcGxpY2F0aW9uIG9mIHRoZSBkaXZpc29yIGFuZCAKKysJCQkgICBxdW90aWVudCB0byBnZXQgdGhlIHJlbWFpbmRlci4gKi8KKysjZW5kaWYKKyswOgkJCisrICAgICAgICBjcCAgICAgIHI5LCAwICAgCisrICAgICAgICBicmxlICAgIF9fYXZyMzJfZjMyX2Rpdl9yZXNfc3Vibm9ybWFsIC8qIFJlc3VsdCB3YXMgc3Vibm9ybWFsLiAqLworKworKwkJCisrI2lmIGRlZmluZWQoTF9hdnIzMl9mMzJfZGl2KQorKwkvKiBJbiBvcmRlciB0byByb3VuZCBjb3JyZWN0bHkgd2UgY2FsY3VsYXRlIHRoZSByZW1haW5kZXI6CQorKwkgICBSZW1haW5kZXIgPSBkaXZpZGVuZFtyMTJdIC0gZGl2aXNvcltyNV0qcXVvdGllbnRbcjddIAorKwkgICBmb3IgdGhlIGNhc2Ugd2hlbiB0aGUgcXVvdGllbnQgaXMgaGFsZndheSBiZXR3ZWVuIHRoZSByb3VuZC11cAorKwkgICB2YWx1ZSBhbmQgdGhlIHJvdW5kIGRvd24gdmFsdWUuIElmIHRoZSByZW1haW5kZXIgdGhlbiBpcyBuZWdhdGl2ZQorKwkgICBpdCBtZWFucyB0aGF0IHRoZSBxdW90aWVudCB3YXMgdG8gYmlnIGFuZCB0aGF0IGl0IHNob3VsZCBub3QgYmUKKysgICAgICAgICAgIHJvdW5kZWQgdXAsIGlmIHRoZSByZW1haW5kZXIgaXMgcG9zaXRpdmUgdGhlIHF1b3RpZW50IHdhcyB0byBzbWFsbAorKwkgICBhbmQgd2UgbmVlZCB0byByb3VuZCB1cC4gSWYgdGhlIHJlbWFpbmRlciBpcyB6ZXJvIGl0IG1lYW5zIHRoYXQgdGhlCisrCSAgIHF1b3RpZW50IGlzIGV4YWN0IGJ1dCBzaW5jZSB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgZ3VhcmQgYml0IHdlIHNob3VsZAorKwkgICByb3VuZCB0byBldmVuLiAqLworKwlhbmRsCXI3LCAweGZmZTAKKysJb3JsCXI3LCAweDAwMTAKKysKKysJLyogTm93IGRvIHRoZSBtdWx0aXBsaWNhdGlvbi4gVGhlIHF1b3RpZW50IGhhcyB0aGUgZm9ybWF0IDQuMjgKKysJICAgd2hpbGUgdGhlIGRpdmlzb3IgaGFzIHRoZSBmb3JtYXQgMi4zMCB3aGljaCBnaXZlcyBhIHJlc3VsdAorKwkgICBvZiA2LjI2ICovCisrCW11bHUuZAlyMTAsIHI1LCByNworKworKwkvKiBDaGVjayBpZiByZW1haW5kZXIgaXMgcG9zaXRpdmUsIG5lZ2F0aXZlIG9yIGVxdWFsLiAqLworKwliZmV4dHUJcjUsIHI3LCA1LCAxICAvKiBHZXQgcGFyaXR5IGJpdCBpbnRvIGJpdCAwIG9mIHI1ICovIAorKwljcAlyMTAsIDAKKytfX2F2cjMyX2YzMl9kaXZfcm91bmRfc3Vibm9ybWFsOgkKKysJY3BjCXIxMSwgcjEyCisrCXNybG8JcjExCS8qIFJlbWFpbmRlciBwb3NpdGl2ZToJIHdlIG5lZWQgdG8gcm91bmQgdXAuKi8KKysJbW92ZXEJcjExLCByNSAgLyogUmVtYWluZGVyIHplcm86CSByb3VuZCB1cCBpZiBtYW50aXNzYSBvZGQuICovCisrI2Vsc2UKKysJYmZleHR1CXIxMSwgcjcsIDQsIDEgIC8qIEdldCBndWFyZCBiaXQgKi8gCQorKyNlbmRpZgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKysgICAgICAgIC8qIFBhY2sgZmluYWwgcmVzdWx0Ki8KKysgICAgICAgIGxzciAgICAgcjEyLCByNywgNQorKyAgICAgICAgYmZpbnMgICByMTIsIHI5LCAyMywgOAorKyAgICAgICAgLyogRm9yIFVDMywgbG9hZCB3aXRoIHBvc3RpbmNyZW1lbnQgaXMgZmFzdGVyIHRoYW4gbGRtICovCisrICAgICAgICBsZC5kICAgIHI2LCBzcCsrCisrICAgICAgICBsZC53ICAgIHI1LCBzcCsrCisrICAgICAgICBibGQgICAgIHI4LCAzMQorKyAgICAgICAgYnN0ICAgICByMTIsIDMxCisrCS8qIFJvdW5kaW5nIGFkZC4gKi8KKysJYWRkCXIxMiwgcjExCisrICAgICAgICByZXQgICAgIHIxMgorKworK19fZGl2c2ZfcmV0dXJuX29wMTogICAgIAorKyAgICAgICAgbHNsICAgICByOCwgMQorKyAgICAgICAgcm9yICAgICByMTIKKysgICAgICAgIHJldCAgICAgcjEyCisrIAorKyAKKysyOgorKyAgICAgICAgLyogT3AxIGlzIE5hTiBvciBpbmYgKi8KKysgICAgICAgIHJldG5lICAgLTEgICAgICAvKiBSZXR1cm4gTmFOIGlmIG9wMSBpcyBOYU4gKi8KKysgICAgICAgIC8qIE9wMSBpcyBpbmYgY2hlY2sgb3AyICovCisrCW1vdl9pbW0JcjksIDB4ZmYwMDAwMDAKKysgICAgICAgIGNwICAgICAgcjExLCByOQorKyAgICAgICAgYnJsbyAgICBfX2RpdnNmX3JldHVybl9vcDEgLyogaW5mL251bWJlciBnaXZlcyBpbmYgKi8KKysgICAgICAgIHJldCAgICAgLTEgICAgICAvKiBUaGUgcmVzdCBnaXZlcyBOYU4qLworKzM6ICAgICAgCisrICAgICAgICAvKiBPcDIgaXMgTmFOIG9yIGluZiAqLworKyAgICAgICAgcmV0ZXEgICAwICAgICAgIC8qIFJldHVybiB6ZXJvIGlmIG51bWJlci9pbmYqLworKyAgICAgICAgcmV0ICAgICAtMSAgICAgIC8qIFJldHVybiBOYU4qLworKzQ6CisrICAgICAgICAvKiBPcDIgaXMgemVybyA/ICovCisrICAgICAgICB0c3QgICAgIHIxMixyMTIKKysgICAgICAgIHJldGVxICAgLTEgICAgICAvKiAwLjAvMC4wIGlzIE5hTiAqLworKyAgICAgICAgLyogTm9uemVyby8wLjAgaXMgSW5mLiBTaWduIGJpdCB3aWxsIGJlIHNoaWZ0ZWQgaW4gYmVmb3JlIHJldHVybmluZyovCisrCW1vdl9pbW0JcjEyLCAweGZmMDAwMDAwCisrICAgICAgICByam1wICAgIF9fZGl2c2ZfcmV0dXJuX29wMQorKyAgICAgICAgICAgICAgICAKKysxMTogICAgIC8qIE9wMSB3YXMgZGVub3JtYWwuIEZpeCBpdC4gKi8KKysgICAgICAgIGxzbCAgICAgcjEyLDcKKysgICAgICAgIGNseiAgICAgcjkscjEyCisrICAgICAgICBsc2wgICAgIHIxMixyMTIscjkKKysgICAgICAgIHJzdWIgICAgcjkscjksMQorKyAgICAgICAgcmptcCAgICAxMmIKKysgCisrMTM6ICAgICAvKiBPcDIgd2FzIGRlbm9ybWFsLiBGaXggaXQuICovIAorKyAgICAgICAgbHNsICAgICByMTEsNworKyAgICAgICAgY2x6ICAgICByMTAscjExCisrICAgICAgICBsc2wgICAgIHIxMSxyMTEscjEwCisrICAgICAgICByc3ViICAgIHIxMCxyMTAsMQorKyAgICAgICAgcmptcCAgICAxNGIKKysgICAgICAgIAorKyAKKytfX2F2cjMyX2YzMl9kaXZfcmVzX3N1Ym5vcm1hbDogICAgIC8qIERpdmlkZSByZXN1bHQgd2FzIHN1Ym5vcm1hbCAqLworKyNpZiBkZWZpbmVkKExfYXZyMzJfZjMyX2RpdikKKysJLyogQ2hlY2sgaG93IG11Y2ggd2UgbXVzdCBzY2FsZSBkb3duIHRoZSBtYW50aXNzYS4gKi8KKysJbmVnCXI5CisrCXN1YglyOSwgLTEgICAgIC8qIFdlIGRvIG5vIGxvbmdlciBoYXZlIGFuIGltcGxpY2l0IGJpdC4gKi8KKysJc2F0dQlyOSA+PiAwLCA1IC8qIFNhdHVyYXRlIHNoaWZ0IGFtb3VudCB0byBtYXggMzIuICovCisrCS8qIFNjYWxlIGRvd24gcXVvdGllbnQgKi8KKysJcnN1YglyMTAsIHI5LCAzMgorKwlsc3IJcjcsIHI3LCByOQorKwkvKiBTY2FsZSBkb3duIHRoZSBkaXZpZGVuZCB0byBtYXRjaCB0aGUgc2NhbGluZyBvZiB0aGUgcXVvdGllbnQuICovCisrCWxzbAlyNiwgcjEyLCByMTAJLyogTWFrZSB0aGUgZGl2aWRlbnQgNjQtYml0IGFuZCBwdXQgdGhlIGxzdyBpbiByNiAqLworKwlsc3IJcjEyLCByMTIsIHI5CisrCisrCS8qIFN0YXJ0IHBlcmZvcm1pbmcgdGhlIHNhbWUgcm91bmRpbmcgYXMgZG9uZSBmb3Igbm9ybWFsIG51bWJlcnMKKysJICAgYnV0IHRoaXMgdGltZSB3ZSBoYXZlIHNjYWxlZCB0aGUgcXVvdGllbnQgYW5kIGRpdmlkZW5kIGFuZCBoZW5jZQorKwkgICBuZWVkIGEgbGl0dGxlIGRpZmZlcmVudCBjb21wYXJpc29uLiAqLworKwlhbmRsCXI3LCAweGZmZTAKKysJb3JsCXI3LCAweDAwMTAKKysKKysJLyogTm93IGRvIHRoZSBtdWx0aXBsaWNhdGlvbi4gVGhlIHF1b3RpZW50IGhhcyB0aGUgZm9ybWF0IDQuMjgKKysJICAgd2hpbGUgdGhlIGRpdmlzb3IgaGFzIHRoZSBmb3JtYXQgMi4zMCB3aGljaCBnaXZlcyBhIHJlc3VsdAorKwkgICBvZiA2LjI2ICovCisrCW11bHUuZAlyMTAsIHI1LCByNworKworKwkvKiBTZXQgZXhwb25lbnQgdG8gMCAqLworKwltb3YJcjksIDAJCisrCisrCS8qIENoZWNrIGlmIHJlbWFpbmRlciBpcyBwb3NpdGl2ZSwgbmVnYXRpdmUgb3IgZXF1YWwuICovCisrCWJmZXh0dQlyNSwgcjcsIDUsIDEgIC8qIEdldCBwYXJpdHkgYml0IGludG8gYml0IDAgb2YgcjUgKi8gCisrCWNwCXIxMCwgcjYKKysJcmptcAlfX2F2cjMyX2YzMl9kaXZfcm91bmRfc3Vibm9ybWFsCisrCisrI2Vsc2UKKysgICAgICAgIGxkLmQgICAgcjYsIHNwKysKKysgICAgICAgIGxkLncgICAgcjUsIHNwKysKKysgICAgICAgIC8qRmx1c2ggdG8gemVybyovCisrCXJldAkwCisrI2VuZGlmCisrI2VuZGlmCisrIAorKyNpZmRlZiBMX2F2cjMyX2YzMl9tdWwKKysgICAgICAgIC5nbG9iYWwgX19hdnIzMl9mMzJfbXVsCisrICAgICAgICAudHlwZSAgX19hdnIzMl9mMzJfbXVsLEBmdW5jdGlvbgorKyAKKysgICAgICAgICAgICAgICAgCisrX19hdnIzMl9mMzJfbXVsOgorKyAgICAgICAgbW92ICAgICByOCwgcjEyCisrICAgICAgICBlb3IgICAgIHIxMiwgcjExICAgICAgICAgICAgICAgIC8qIE1TQihyOCkgPSBTaWduKG9wMSkgXiBTaWduKG9wMikgKi8KKysgICAgICAgIGFuZGggICAgcjEyLCAweDgwMDAsIENPSAorKyAgICAgICAgCisrICAgICAgICAvKiBhcnJhbmdlIG9wZXJhbmRzIHNvIHRoYXQgdGhhdCBvcDEgPj0gb3AyICovCisrICAgICAgICBjYnIgICAgIHI4LCAzMQorKyAgICAgICAgYnJlcSAgICBfX2F2cjMyX2YzMl9tdWxfb3AxX3plcm8KKysgICAgICAgIGNiciAgICAgcjExLCAzMQorKyAKKysgICAgICAgIC8qIFB1dCB0aGUgbnVtYmVyIHdpdGggdGhlIGxhcmdlc3QgZXhwb25lbnQgaW4gcjEwCisrICAgICAgICAgICBhbmQgdGhlIG51bWJlciB3aXRoIHRoZSBzbWFsbGVzdCBleHBvbmVudCBpbiByOSAqLworKyAgICAgICAgbWF4ICAgICByMTAsIHI4LCByMTEKKysgICAgICAgIG1pbiAgICAgcjksIHI4LCByMTEKKysgCisrICAgICAgICAvKiBVbnBhY2sgZXhwb25lbnQgYW5kIG1hbnRpc3NhIG9mIG9wMSAqLworKyAgICAgICAgbHNsICAgICByOCwgcjEwLCA4CisrICAgICAgICBzYnIgICAgIHI4LCAzMSAgLyogU2V0IGltcGxpY2l0IGJpdC4gKi8KKysgICAgICAgIGxzciAgICAgcjEwLCAyMyAKKysgICAgICAgICAgICAgICAgCisrICAgICAgICAvKiBvcDEgaXMgTmFOIG9yIEluZi4gKi8KKysgICAgICAgIGNwLncgICAgcjEwLCAweGZmCisrICAgICAgICBicmVxICAgIF9fYXZyMzJfZjMyX211bF9vcDFfbmFuX29yX2luZgorKyAgICAgICAgCisrICAgICAgICAvKiBVbnBhY2sgZXhwb25lbnQgYW5kIG1hbnRpc3NhIG9mIG9wMiAqLworKyAgICAgICAgbHNsICAgICByMTEsIHI5LCA4CisrICAgICAgICBzYnIgICAgIHIxMSwgMzEgIC8qIFNldCBpbXBsaWNpdCBiaXQuICovCisrICAgICAgICBsc3IgICAgIHI5LCAyMyAgCisrIAorKyAgICAgICAgLyogb3AyIGlzIGVpdGhlciB6ZXJvIG9yIHN1Ym5vcm1hbC4gKi8KKysgICAgICAgIGJyZXEgICAgX19hdnIzMl9mMzJfbXVsX29wMl9zdWJub3JtYWwKKyswOiAgICAgIAorKyAgICAgICAgLyogQ2FsY3VsYXRlIG5ldyBleHBvbmVudCAqLworKyAgICAgICAgYWRkICAgICByOSxyMTAKKysgCisrICAgICAgICAvKiBEbyB0aGUgbXVsdGlwbGljYXRpb24gKi8KKysgICAgICAgIG11bHUuZCAgcjEwLHI4LHIxMQorKyAKKysgICAgICAgIC8qIFdlIG1pZ2h0IG5lZWQgdG8gc2NhbGUgdXAgYnkgdHdvIGlmIHRoZSBNU0Igb2YgdGhlIHJlc3VsdCBpcworKyAgICAgICAgICAgemVyby4gKi8KKysgICAgICAgIGxzbCAgICAgcjgsIHIxMSwgMQorKyAgICAgICAgbW92Y2MgICByMTEsIHI4CisrICAgICAgICBzdWJjYyAgIHI5LCAxCisrIAorKyAgICAgICAgLyogUHV0IHRoZSBzaGlmdGVkIG91dCBiaXRzIG9mIHRoZSBtYW50aXNzYSBpbnRvIHIxMCAqLworKyAgICAgICAgbHNyICAgICByMTAsIDgKKysgICAgICAgIGJmaW5zICAgcjEwLCByMTEsIDI0LCA4CisrICAgICAgICAgICAgICAgIAorKyAgICAgICAgc3ViICAgICByOSwoMTI3LTEpICAgICAgICAgICAgICAvKiByZW1vdmUgZXh0cmEgZXhwb25lbnQgYmlhcyAqLworKyAgICAgICAgYnJsZSAgICBfX2F2cjMyX2YzMl9tdWxfcmVzX3N1Ym5vcm1hbAorKyAKKysgICAgICAgIC8qIENoZWNrIGZvciBJbmYuICovCisrICAgICAgICBjcC53ICAgIHI5LCAweGZmCisrICAgICAgICBicmdlICAgIDFmCisrIAorKyAgICAgICAgLyogUGFjayByZXN1bHQuICovCisrICAgICAgICBvciAgICAgIHIxMiwgcjEyLCByMTEgPj4gOAorKyAgICAgICAgYmZpbnMgICByMTIsIHI5LCAyMywgOCAgICAgICAgICAKKysgCisrICAgICAgICAvKiBSb3VuZCAqLyAgICAgCisrX19hdnIzMl9mMzJfbXVsX3JvdW5kOgorKwltb3ZfaW1tCXI4LCAweDgwMDAwMDAwCisrICAgICAgICBibGQgICAgIHIxMiwgMAorKyAgICAgICAgc3VibmUgICByOCwgLTEgIAorKyAKKysgICAgICAgIGNwLncgICAgcjEwLCByOAorKyAgICAgICAgc3ViaHMgICByMTIsIC0xCisrICAgICAgICAKKysgICAgICAgIHJldCAgICAgcjEyICAgICAKKysgCisrMTogICAgICAKKysgICAgICAgIC8qIFJldHVybiBJbmYgKi8gICAgICAgIAorKyAgICAgICAgb3JoICAgICByMTIsIDB4N2Y4MAorKyAgICAgICAgcmV0ICAgICByMTIKKysgCisrX19hdnIzMl9mMzJfbXVsX29wMl9zdWJub3JtYWw6CisrICAgICAgICBjYnIgICAgIHIxMSwgMzEKKysgICAgICAgIGNseiAgICAgcjksIHIxMQorKyAgICAgICAgcmV0Y3MgICAwICAgICAgIC8qIG9wMiBpcyB6ZXJvLiBSZXR1cm4gMCAqLworKyAgICAgICAgbHNsICAgICByMTEsIHIxMSwgcjkKKysgICAgICAgIHJzdWIgICAgcjksIHI5LCAxCisrICAgICAgICAgICAgICAgIAorKyAgICAgICAgLyogQ2hlY2sgaWYgb3AyIGlzIHN1Ym5vcm1hbC4gKi8KKysgICAgICAgIHRzdCAgICAgcjEwLCByMTAKKysgICAgICAgIGJybmUgICAgMGIKKysgCisrICAgICAgICAvKiBvcDIgaXMgc3Vibm9ybWFsICovICAKKysgICAgICAgIGNiciAgICAgcjgsIDMxCisrICAgICAgICBjbHogICAgIHIxMCwgcjExCisrICAgICAgICByZXRjcyAgIDAgICAgICAgLyogb3AxIGlzIHplcm8uIFJldHVybiAwICovCisrICAgICAgICBsc2wgICAgIHI4LCByOCwgcjEwCisrICAgICAgICByc3ViICAgIHIxMCwgcjEwLCAxCisrICAgICAgICAgICAgICAgICAgICAgICAgCisrICAgICAgICByam1wICAgIDBiCisrICAgICAgICAgICAgICAgIAorKyAKKytfX2F2cjMyX2YzMl9tdWxfb3AxX25hbl9vcl9pbmY6CisrICAgICAgICAvKiBDaGVjayBpZiBvcDEgaXMgTmFOLCBpZiBzbyByZXR1cm4gTmFOICovCisrICAgICAgICBsc2wgICAgIHIxMSwgcjgsIDEKKysgICAgICAgIHJldG5lICAgLTEKKysgCisrICAgICAgICAvKiBvcDEgaXMgSW5mLiAqLworKyAgICAgICAgdHN0ICAgICByOSwgcjkKKysgICAgICAgIHJldGVxICAgLTEgICAgICAvKiBJbmYgKiAwIC0+IE5hTiAqLworKyAKKysgICAgICAgIGJmaW5zICAgcjEyLCByMTAsIDIzLCA4IC8qIEdlbmVyYXRlIEluZiBpbiByMTIgKi8KKysgCisrICAgICAgICAvKiBDaGVjayBpZiBvcDIgaXMgSW5mLiBvciBOYU4gKi8KKysgICAgICAgIGxzciAgICAgcjExLCByOSwgMjMKKysgICAgICAgIGNwLncgICAgcjExLCAweGZmCisrICAgICAgICByZXRuZSAgIHIxMiAgICAgICAgICAgICAvKiBvcDIgbm90IEluZiBvciBOYU4sIHJldHVybiBJbmZvICovCisrIAorKyAgICAgICAgbHNsICAgICByOSwgOQorKyAgICAgICAgcmV0ZXEgICByMTIgICAgICAgICAgICAgLyogb3AyIEluZiByZXR1cm4gSW5mICovCisrICAgICAgICByZXQgICAgIC0xICAgICAgICAgICAgICAvKiBvcDIgaXMgTmFOLCByZXR1cm4gTmFOICovIAorKyAgICAgICAgCisrX19hdnIzMl9mMzJfbXVsX3Jlc19zdWJub3JtYWw6CisrICAgICAgICAvKiBDaGVjayBpZiB0aGUgbnVtYmVyIGlzIHNvIHNtYWxsIHRoYXQKKysgICAgICAgICAgIGl0IHdpbGwgYmUgcmVwcmVzZW50ZWQgd2l0aCB6ZXJvLiAqLworKyAgICAgICAgcnN1YiAgICByOSwgcjksIDkKKysgICAgICAgIHJzdWIgICAgcjgsIHI5LCAzMgorKyAgICAgICAgcmV0Y3MgICAwCisrIAorKyAgICAgICAgLyogU2hpZnQgdGhlIG1hbnRpc3NhIGludG8gdGhlIGNvcnJlY3QgcG9zaXRpb24uKi8KKysgICAgICAgIGxzciAgICAgcjksIHIxMSwgcjkKKysgICAgICAgIC8qIEFkZCBzaWduIGJpdC4gKi8KKysgICAgICAgIG9yICAgICAgcjEyLCByOQorKyAgICAgICAgLyogUHV0IHRoZSBzaGlmdGVkIG91dCBiaXRzIGluIHRoZSBtb3N0IHNpZ25pZmljYW50IHBhcnQKKysgICAgICAgICAgIG9mIHI4LiAqLworKyAgICAgICAgbHNsICAgICByMTEsIHIxMSwgcjgKKysgCisrICAgICAgICAvKiBBZGQgYWxsIHRoZSByZW1haW5kZXIgYml0cyB1c2VkIGZvciByb3VuZGluZyBpbnRvIHIxMSAqLworKyAgICAgICAgYW5kaCAgICByMTAsIDB4MDBGRiAgICAgCisrICAgICAgICBvciAgICAgIHIxMCwgcjExCisrICAgICAgICByam1wICAgIF9fYXZyMzJfZjMyX211bF9yb3VuZAorKworK19fYXZyMzJfZjMyX211bF9vcDFfemVybzoKKysgICAgICAgIGJmZXh0dSAgcjEwLCByMTEsIDIzLCA4CisrICAgICAgICBjcC53ICAgIHIxMCwgMHhmZgorKyAgICAgICAgcmV0bmUgICByMTIKKysgICAgICAgIHJldGVxICAgLTEgICAgICAgIAorKyAKKysjZW5kaWYgIAorKyAKKysgICAgICAgIAorKyNpZmRlZiBMX2F2cjMyX3MzMl90b19mMzIKKysgICAgICAgIC5nbG9iYWwgX19hdnIzMl9zMzJfdG9fZjMyCisrICAgICAgICAudHlwZSAgX19hdnIzMl9zMzJfdG9fZjMyLEBmdW5jdGlvbgorK19fYXZyMzJfczMyX3RvX2YzMjoKKysgICAgICAgIGNwICAgICAgcjEyLCAwCisrICAgICAgICByZXRlcSAgIHIxMiAgICAgLyogSWYgemVybyB0aGVuIHJldHVybiB6ZXJvIGZsb2F0ICovCisrICAgICAgICBtb3YgICAgIHIxMSwgcjEyIC8qIEtlZXAgdGhlIHNpZ24gKi8KKysgICAgICAgIGFicyAgICAgcjEyICAgICAvKiBDb21wdXRlIHRoZSBhYnNvbHV0ZSB2YWx1ZSAqLworKyAgICAgICAgbW92ICAgICByMTAsIDMxICsgMTI3ICAgLyogU2V0IHRoZSBjb3JyZWN0IGV4cG9uZW50ICovCisrICAgICAgICAKKysgICAgICAgIC8qIE5vcm1hbGl6ZSAqLworKyAgICAgICAgbm9ybWFsaXplX3NmICAgIHIxMCAvKmV4cCovLCByMTIgLyptYW50Ki8sIHI5IC8qc2NyYXRjaCovICAgICAgIAorKyAKKysgICAgICAgIC8qIENoZWNrIGZvciBzdWJub3JtYWwgcmVzdWx0ICovCisrICAgICAgICBjcC53ICAgIHIxMCwgMAorKyAgICAgICAgYnJsZSAgICBfX2F2cjMyX3MzMl90b19mMzJfc3Vibm9ybWFsCisrIAorKyAgICAgICAgcm91bmRfc2YgICAgICAgIHIxMCAvKmV4cCovLCByMTIgLyptYW50Ki8sIHI5IC8qc2NyYXRjaCovICAgICAgIAorKyAgICAgICAgcGFja19zZiAgICAgICAgIHIxMiAvKnNmKi8sIHIxMCAvKmV4cCovLCByMTIgLyptYW50Ki8KKysgICAgICAgIGxzbCAgICAgcjExLCAxCisrICAgICAgICByb3IgICAgIHIxMgorKyAgICAgICAgcmV0ICAgICByMTIgICAgICAgICAgICAgCisrIAorK19fYXZyMzJfczMyX3RvX2YzMl9zdWJub3JtYWw6CisrICAgICAgICAvKiBBZGp1c3QgYSBzdWJub3JtYWwgcmVzdWx0ICovCisrICAgICAgICBhZGp1c3Rfc3Vibm9ybWFsX3NmICAgICByMTIvKnNmKi8sIHIxMCAvKmV4cCovLCByMTIgLyptYW50Ki8sIHIxMS8qc2lnbiovLCByOSAvKnNjcmF0Y2gqLworKyAgICAgICAgcmV0ICAgICByMTIKKysgICAgICAgIAorKyNlbmRpZgorKyAKKysjaWZkZWYgTF9hdnIzMl91MzJfdG9fZjMyCisrICAgICAgICAuZ2xvYmFsIF9fYXZyMzJfdTMyX3RvX2YzMgorKyAgICAgICAgLnR5cGUgIF9fYXZyMzJfdTMyX3RvX2YzMixAZnVuY3Rpb24KKytfX2F2cjMyX3UzMl90b19mMzI6CisrICAgICAgICBjcCAgICAgIHIxMiwgMAorKyAgICAgICAgcmV0ZXEgICByMTIgICAgIC8qIElmIHplcm8gdGhlbiByZXR1cm4gemVybyBmbG9hdCAqLworKyAgICAgICAgbW92ICAgICByMTAsIDMxICsgMTI3ICAgLyogU2V0IHRoZSBjb3JyZWN0IGV4cG9uZW50ICovCisrICAgICAgICAKKysgICAgICAgIC8qIE5vcm1hbGl6ZSAqLworKyAgICAgICAgbm9ybWFsaXplX3NmICAgIHIxMCAvKmV4cCovLCByMTIgLyptYW50Ki8sIHI5IC8qc2NyYXRjaCovICAgICAgIAorKyAKKysgICAgICAgIC8qIENoZWNrIGZvciBzdWJub3JtYWwgcmVzdWx0ICovCisrICAgICAgICBjcC53ICAgIHIxMCwgMAorKyAgICAgICAgYnJsZSAgICBfX2F2cjMyX3UzMl90b19mMzJfc3Vibm9ybWFsCisrIAorKyAgICAgICAgcm91bmRfc2YgICAgICAgIHIxMCAvKmV4cCovLCByMTIgLyptYW50Ki8sIHI5IC8qc2NyYXRjaCovICAgICAgIAorKyAgICAgICAgcGFja19zZiAgICAgICAgIHIxMiAvKnNmKi8sIHIxMCAvKmV4cCovLCByMTIgLyptYW50Ki8KKysgICAgICAgIGxzciAgICAgcjEyLDEgICAvKiBTaWduIGJpdCBpcyAwIGZvciB1bnNpZ25lZCBpbnQgKi8KKysgICAgICAgIHJldCAgICAgcjEyICAgICAgICAgICAgIAorKyAKKytfX2F2cjMyX3UzMl90b19mMzJfc3Vibm9ybWFsOgorKyAgICAgICAgLyogQWRqdXN0IGEgc3Vibm9ybWFsIHJlc3VsdCAqLworKyAgICAgICAgbW92ICAgICByOCwgMAorKyAgICAgICAgYWRqdXN0X3N1Ym5vcm1hbF9zZiAgICAgcjEyLypzZiovLHIxMCAvKmV4cCovLCByMTIgLyptYW50Ki8scjgvKnNpZ24qLywgcjkgLypzY3JhdGNoKi8KKysgICAgICAgIHJldCAgICAgcjEyCisrICAgICAgICAKKysgICAgICAgIAorKyNlbmRpZgorKyAgICAgICAgCisrIAorKyNpZmRlZiBMX2F2cjMyX2YzMl90b19zMzIKKysgICAgICAgIC5nbG9iYWwgX19hdnIzMl9mMzJfdG9fczMyCisrICAgICAgICAudHlwZSAgX19hdnIzMl9mMzJfdG9fczMyLEBmdW5jdGlvbgorK19fYXZyMzJfZjMyX3RvX3MzMjoKKysgICAgICAgIGJmZXh0dSAgcjExLCByMTIsIDIzLCA4CisrICAgICAgICBzdWIgICAgIHIxMSwxMjcgICAgICAgICAgICAgICAgIC8qIEZpeCBiaWFzICovCisrICAgICAgICByZXRsbyAgIDAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5lZ2F0aXZlIGV4cG9uZW50IHlpZWxkcyB6ZXJvIGludGVnZXIgKi8KKysgCisrICAgICAgICAvKiBTaGlmdCBtYW50aXNzYSBpbnRvIGNvcnJlY3QgcG9zaXRpb24gKi8KKysgICAgICAgIHJzdWIgICAgcjExLHIxMSwzMSAgICAgIC8qIFNoaWZ0IGFtb3VudCAqLworKyAgICAgICAgbHNsICAgICByMTAscjEyLDggICAgICAgLyogR2V0IG1hbnRpc3NhICovCisrICAgICAgICBzYnIgICAgIHIxMCwzMSAgICAgICAgICAvKiBBZGQgaW1wbGljaXQgYml0ICovCisrICAgICAgICBsc3IgICAgIHIxMCxyMTAscjExICAgICAvKiBQZXJmb3JtIHNoaWZ0ICovCisrICAgICAgICBsc2wgICAgIHIxMiwxICAgICAgICAgICAvKiBDaGVjayBzaWduICovCisrICAgICAgICByZXRjYyAgIHIxMCAgICAgICAgICAgICAvKiBpZiBwb3NpdGl2ZSwgd2UgYXJlIGRvbmUgKi8KKysgICAgICAgIG5lZyAgICAgcjEwICAgICAgICAgICAgIC8qIGlmIG5lZ2F0aXZlIGZsb2F0LCBuZWdhdGUgcmVzdWx0ICovCisrICAgICAgICByZXQgICAgIHIxMAorKyAKKysjZW5kaWYgIAorKyAgICAgICAgCisrI2lmZGVmIExfYXZyMzJfZjMyX3RvX3UzMgorKyAgICAgICAgLmdsb2JhbCBfX2F2cjMyX2YzMl90b191MzIKKysgICAgICAgIC50eXBlICBfX2F2cjMyX2YzMl90b191MzIsQGZ1bmN0aW9uCisrX19hdnIzMl9mMzJfdG9fdTMyOgorKyAgICAgICAgY3AgICAgICByMTIsMAorKyAgICAgICAgcmV0bWkgICAwICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWdhdGl2ZSBudW1iZXJzIGdpdmVzIDAgKi8KKysgICAgICAgIGJmZXh0dSAgcjExLCByMTIsIDIzLCA4ICAgICAgICAgLyogRXh0cmFjdCBleHBvbmVudCAqLworKyAgICAgICAgc3ViICAgICByMTEsMTI3ICAgICAgICAgICAgICAgICAvKiBGaXggYmlhcyAqLworKyAgICAgICAgcmV0bG8gICAwICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWdhdGl2ZSBleHBvbmVudCB5aWVsZHMgemVybyBpbnRlZ2VyICovCisrIAorKyAgICAgICAgLyogU2hpZnQgbWFudGlzc2EgaW50byBjb3JyZWN0IHBvc2l0aW9uICovCisrICAgICAgICByc3ViICAgIHIxMSxyMTEsMzEgICAgICAvKiBTaGlmdCBhbW91bnQgKi8KKysgICAgICAgIGxzbCAgICAgcjEyLDggICAgICAgICAgIC8qIEdldCBtYW50aXNzYSAqLworKyAgICAgICAgc2JyICAgICByMTIsMzEgICAgICAgICAgLyogQWRkIGltcGxpY2l0IGJpdCAqLworKyAgICAgICAgbHNyICAgICByMTIscjEyLHIxMSAgICAgLyogUGVyZm9ybSBzaGlmdCAqLworKyAgICAgICAgcmV0ICAgICByMTIKKysgCisrI2VuZGlmICAKKysgCisrI2lmZGVmIExfYXZyMzJfZjMyX3RvX2Y2NAorKyAgICAgICAgLmdsb2JhbCBfX2F2cjMyX2YzMl90b19mNjQKKysgICAgICAgIC50eXBlICBfX2F2cjMyX2YzMl90b19mNjQsQGZ1bmN0aW9uCisrIAorK19fYXZyMzJfZjMyX3RvX2Y2NDoKKysgICAgICAgIGxzbCAgICAgcjExLHIxMiwxICAgICAgICAgICAgICAgLyogUmVtb3ZlIHNpZ24gYml0LCBrZWVwIG9yaWdpbmFsIHZhbHVlIGluIHIxMiovCisrICAgICAgICBtb3ZlcSAgIHIxMCwgMAorKyAgICAgICAgcmV0ZXEgICByMTEgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gemVybyBpZiBpbnB1dCBpcyB6ZXJvICovCisrIAorKyAgICAgICAgYmZleHR1ICByOSxyMTEsMjQsOCAgICAgICAgICAgICAgLyogR2V0IGV4cG9uZW50ICovCisrICAgICAgICBjcC53ICAgIHI5LDB4ZmYgICAgICAgICAgICAgICAgIC8qIGNoZWNrIGZvciBOYU4gb3IgaW5mICovCisrICAgICAgICBicmVxICAgIDBmCisrIAorKyAgICAgICAgbHNsICAgICByMTEsNyAgICAgICAgICAgICAgICAgICAvKiBDb252ZXJ0IHNmIG1hbnRpc3NhIHRvIGRmIGZvcm1hdCAqLworKyAgICAgICAgbW92ICAgICByMTAsMAorKyAKKysgICAgICAgIC8qIENoZWNrIGlmIGltcGxpY2l0IGJpdCBzaG91bGQgYmUgc2V0ICovCisrICAgICAgICBjcC53ICAgIHI5LCAwCisrICAgICAgICBzdWJlcSAgIHI5LC0xICAgICAgICAgICAgICAgICAgICAvKiBBZGp1c3QgZXhwb25lbnQgaWYgaXQgd2FzIDAgKi8KKysgICAgICAgIHNybmUgICAgcjgKKysgICAgICAgIG9yICAgICAgcjExLCByMTEsIHI4IDw8IDMxICAgICAgLyogU2V0IGltcGxpY2l0IGJpdCBpZiBuZWVkZWQgKi8KKysgICAgICAgIHN1YiAgICAgcjksKDEyNy0weDNmZikgICAgICAgICAgLyogQ29udmVydCBleHBvbmVudCB0byBkZiBmb3JtYXQgZXhwb25lbnQgKi8KKysgCisrICAgICAgICAvKldlIGtub3cgdGhhdCBsb3cgcmVnaXN0ZXIgb2YgbWFudGlzc2EgaXMgMCwgYW5kIHdpbGwgYmUgdW5hZmZlY3RlZCBieSBub3JtYWxpemF0aW9uLiovCisrICAgICAgICAvKldlIGNhbiB0aGVyZWZvcmUgdXNlIHRoZSBmYXN0ZXIgbm9ybWFsaXplX3NmIGZ1bmN0aW9uIGluc3RlYWQgb2Ygbm9ybWFsaXplX2RmLiovCisrICAgICAgICBub3JtYWxpemVfc2YgICAgcjkgLypleHAqLywgcjExIC8qbWFudGlzc2EqLywgcjggLypzY3JhdGNoKi8KKysgICAgICAgIHBhY2tfZGYgICAgICAgICByOSAvKmV4cCovLCByMTAsIHIxMSAvKm1hbnRpc3NhKi8sIHIxMCwgcjExIC8qZGYqLworKyAKKytfX2V4dGVuZHNmZGZfcmV0dXJuX29wMTogICAgICAgIAorKyAgICAgICAgLyogUm90YXRlIGluIHNpZ24gYml0ICovCisrICAgICAgICBsc2wgICAgIHIxMiwgMQorKyAgICAgICAgcm9yICAgICByMTEKKysgICAgICAgIHJldCAgICAgcjExCisrICAgICAgICAgICAgICAgICAgICAgICAgCisrMDoKKysgICAgICAgIC8qIEluZiBvciBOYU4qLworKwltb3ZfaW1tCXIxMCwgMHhmZmUwMDAwMAorKyAgICAgICAgbHNsICAgICByMTEsOCAgICAgICAgICAgICAgICAgICAvKiBjaGVjayBtYW50aXNzYSAqLworKyAgICAgICAgbW92bmUgICByMTEsIC0xICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gTmFOICovCisrICAgICAgICBtb3ZlcSAgIHIxMSwgcjEwICAgICAgICAgICAgICAgIC8qIFJldHVybiBpbmYgKi8KKysgICAgICAgIHJqbXAgICAgX19leHRlbmRzZmRmX3JldHVybl9vcDEKKysjZW5kaWYgICAgICAgICAgICAgICAgICAKKysgCisrIAorKyNpZmRlZiBMX2F2cjMyX2Y2NF90b19mMzIKKysgICAgICAgIC5nbG9iYWwgX19hdnIzMl9mNjRfdG9fZjMyCisrICAgICAgICAudHlwZSAgX19hdnIzMl9mNjRfdG9fZjMyLEBmdW5jdGlvbgorKyAKKytfX2F2cjMyX2Y2NF90b19mMzI6CisrICAgICAgICAvKiBVbnBhY2sgKi8KKysgICAgICAgIGxzbCAgICAgcjkscjExLDEgICAgICAgICAgICAgICAgLyogVW5wYWNrIGV4cG9uZW50ICovCisrICAgICAgICBsc3IgICAgIHI5LDIxCisrIAorKyAgICAgICAgcmV0ZXEgICAwICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBleHBvbmVudCBpcyAwIHRoZSBudW1iZXIgaXMgc28gc21hbGwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB0aGUgY29udmVyc2lvbiB0byBzaW5nbGUgZmxvYXQgZ2l2ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemVybyAqLworKyAKKysgICAgICAgIGxzbCAgICAgcjgscjExLDEwICAgICAgICAgICAgICAgICAgLyogQWRqdXN0IG1hbnRpc3NhICovCisrICAgICAgICBvciAgICAgIHIxMixyOCxyMTA+PjIyCisrIAorKyAgICAgICAgbHNsICAgICByMTAsMTAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHJlbWFpbmluZyBiaXRzCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBsb3cgcGFydCBvZiB0aGUgbWFudGlzc2EuKi8KKysgICAgICAgIG5lZyAgICAgcjEwCisrICAgICAgICByb2wgICAgIHIxMiAgICAgICAgICAgICAgICAgICAgIC8qIElmIHRoZXJlIHdlcmUgcmVtYWluaW5nIGJpdHMgdGhlbiBzZXQgbHNiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIG1hbnRpc3NhIHRvIDEgKi8KKysgCisrICAgICAgICBjcCAgICAgIHI5LDB4N2ZmCisrICAgICAgICBicmVxICAgIDJmICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGZvciBOYU4gb3IgaW5mICovCisrIAorKyAgICAgICAgc3ViICAgICByOSwoMHgzZmYtMTI3KSAgICAgICAgICAvKiBBZGp1c3QgYmlhcyBvZiBleHBvbmVudCAqLworKyAgICAgICAgc2JyICAgICByMTIsMzEgICAgICAgICAgICAgICAgICAvKiBzZXQgdGhlIGltcGxpY2l0IGJpdC4qLworKyAKKysgICAgICAgIGNwLncgICAgcjksIDAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgZm9yIHN1Ym5vcm1hbCBudW1iZXIgKi8KKysgICAgICAgIGJybGUgICAgM2YKKysgCisrICAgICAgICByb3VuZF9zZiAgICAgICAgcjkgLypleHAqLywgcjEyIC8qbWFudCovLCByMTAgLypzY3JhdGNoKi8gICAgICAgCisrICAgICAgICBwYWNrX3NmICAgICAgICAgcjEyIC8qc2YqLywgcjkgLypleHAqLywgcjEyIC8qbWFudCovCisrX190cnVuY2Rmc2ZfcmV0dXJuX29wMTogCisrICAgICAgICAvKiBSb3RhdGUgaW4gc2lnbiBiaXQgKi8KKysgICAgICAgIGxzbCAgICAgcjExLCAxCisrICAgICAgICByb3IgICAgIHIxMgorKyAgICAgICAgcmV0ICAgICByMTIgICAgICAgICAgICAgCisrICAgICAgICAKKysyOgorKyAgICAgICAgLyogTmFOIG9yIGluZiAqLworKyAgICAgICAgY2JyICAgICByMTIsMzEgICAgICAgICAgICAgICAgICAvKiBjbGVhciBpbXBsaWNpdCBiaXQgKi8KKysgICAgICAgIHJldG5lICAgLTEgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIE5hTiBpZiBtYW50aXNzYSBub3QgemVybyAqLworKwltb3ZfaW1tCXIxMiwgMHhmZjAwMDAwMAorKyAgICAgICAgcmV0ICAgICByMTIgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gaW5mICovCisrIAorKzM6ICAgICAgLyogUmVzdWx0IGlzIHN1Ym5vcm1hbC4gQWRqdXN0IGl0LiovCisrICAgICAgICBhZGp1c3Rfc3Vibm9ybWFsX3NmICAgICByMTIvKnNmKi8scjkgLypleHAqLywgcjEyIC8qbWFudCovLCByMTEvKnNpZ24qLywgcjEwIC8qc2NyYXRjaCovCisrICAgICAgICByZXQgICAgIHIxMgorKyAgICAgICAgCisrICAgICAgICAgICAgICAgIAorKyNlbmRpZgorKyAKKysjaWYgZGVmaW5lZChMX211bHNpMykgJiYgKF9fQVZSMzJfVUNfXyA9PSAzKQorKwkuZ2xvYmFsIF9fbXVsc2kzCisrCS50eXBlIF9fbXVsc2kzLEBmdW5jdGlvbgorKworK19fbXVsc2kzOgorKwltb3YgcjksIDAKKyswOgorKwlsc3IgcjExLCAxCisrCWFkZGNzIHI5LCByOSwgcjEyCisrCWJyZXEgMWYKKysJbHNsIHIxMiwgMQorKwlyam1wIDBiCisrMToKKysJcmV0IHI5CisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9nY2MvY29uZmlnL2F2cjMyL2xpYjJmdW5jcy5TCitAQCAtMCwwICsxLDIxIEBACisrCS5hbGlnbgk0CisrCS5nbG9iYWwgX19ub25sb2NhbF9nb3RvCisrCS50eXBlICBfX25vbmxvY2FsX2dvdG8sQGZ1bmN0aW9uCisrCisrLyogX19ub25sb2NhbF9nb3RvOglUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgbm9ubG9jYWxfZ290bydzIGluIGdjYy4KKysKKysJcGFyYW1ldGVyIDAgKHIxMikgPSBOZXcgRnJhbWUgUG9pbnRlcgorKwlwYXJhbWV0ZXIgMSAocjExKSA9IEFkZHJlc3MgdG8gZ290bworKwlwYXJhbWV0ZXIgMiAocjEwKSA9IE5ldyBTdGFjayBQb2ludGVyCisrCisrCVRoaXMgZnVuY3Rpb24gaW52YWxpZGF0ZXMgdGhlIHJldHVybiBzdGFjaywgc2luY2UgaXQgcmV0dXJucyBmcm9tIGEKKysJZnVuY3Rpb24gd2l0aG91dCB1c2luZyBhIHJldHVybiBpbnN0cnVjdGlvbi4KKysqLworK19fbm9ubG9jYWxfZ290bzoKKysJbW92CXI3LCByMTIKKysJbW92CXNwLCByMTAKKysJZnJzCQkJIyBGbHVzaCByZXR1cm4gc3RhY2sKKysJbW92CXBjLCByMTEKKysKKysKKysJCQorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2NjL2NvbmZpZy9hdnIzMi9saW51eC1lbGYuaAorQEAgLTAsMCArMSwxNTEgQEAKKysvKgorKyAgIExpbnV4L0VsZiBzcGVjaWZpYyBkZWZpbml0aW9ucy4KKysgICBDb3B5cmlnaHQgMjAwMy0yMDA2IEF0bWVsIENvcnBvcmF0aW9uLgorKworKyAgIFdyaXR0ZW4gYnkgUm9ubnkgUGVkZXJzZW4sIEF0bWVsIE5vcndheSwgPHJwZWRlcnNlbkBhdG1lbC5jb20+CisrICAgYW5kIEjvv712YXJkIFNraW5uZW1vZW4sIEF0bWVsIE5vcndheSwgPGhza2lubmVtb2VuQGF0bWVsLmNvbT4KKysKKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAqLworKworKworKworKy8qIGVsZm9zLmggc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGluY2x1ZGVkLiAgTm93IGp1c3Qgb3ZlcnJpZGUKKysgICBhbnkgY29uZmxpY3RpbmcgZGVmaW5pdGlvbnMgYW5kIGFkZCBhbnkgZXh0cmFzLiAgKi8KKysKKysvKiBSdW4tdGltZSBUYXJnZXQgU3BlY2lmaWNhdGlvbi4gICovCisrI3VuZGVmICBUQVJHRVRfVkVSU0lPTgorKyNkZWZpbmUgVEFSR0VUX1ZFUlNJT04gIGZwdXRzICgiIChBVlIzMiBHTlUvTGludXggd2l0aCBFTEYpIiwgc3RkZXJyKTsKKysKKysvKiBEbyBub3QgYXNzdW1lIGFueXRoaW5nIGFib3V0IGhlYWRlciBmaWxlcy4gICovCisrI2RlZmluZSBOT19JTVBMSUNJVF9FWFRFUk5fQworKworKy8qIFRoZSBHTlUgQysrIHN0YW5kYXJkIGxpYnJhcnkgcmVxdWlyZXMgdGhhdCB0aGVzZSBtYWNyb3MgYmUgZGVmaW5lZC4gICovCisrI3VuZGVmIENQTFVTUExVU19DUFBfU1BFQworKyNkZWZpbmUgQ1BMVVNQTFVTX0NQUF9TUEVDICItRF9HTlVfU09VUkNFICUoY3BwKSIKKysKKysvKiBOb3cgd2UgZGVmaW5lIHRoZSBzdHJpbmdzIHVzZWQgdG8gYnVpbGQgdGhlIHNwZWMgZmlsZS4gICovCisrI3VuZGVmICBMSUJfU1BFQworKyNkZWZpbmUgTElCX1NQRUMgXAorKyAgIiV7cHRocmVhZDotbHB0aHJlYWR9IFwKKysgICAle3NoYXJlZDotbGN9IFwKKysgICAleyFzaGFyZWQ6JXtwcm9maWxlOi1sY19wfSV7IXByb2ZpbGU6LWxjfX0iCisrCisrLyogUHJvdmlkZSBhIFNUQVJURklMRV9TUEVDIGFwcHJvcHJpYXRlIGZvciBHTlUvTGludXguICBIZXJlIHdlIGFkZAorKyAgIHRoZSBHTlUvTGludXggbWFnaWNhbCBjcnRiZWdpbi5vIGZpbGUgKHNlZSBjcnRzdHVmZi5jKSB3aGljaAorKyAgIHByb3ZpZGVzIHBhcnQgb2YgdGhlIHN1cHBvcnQgZm9yIGdldHRpbmcgQysrIGZpbGUtc2NvcGUgc3RhdGljCisrICAgb2JqZWN0IGNvbnN0cnVjdGVkIGJlZm9yZSBlbnRlcmluZyBgbWFpbicuICAqLworKworKyN1bmRlZiAgU1RBUlRGSUxFX1NQRUMKKysjZGVmaW5lIFNUQVJURklMRV9TUEVDIFwKKysgICIleyFzaGFyZWQ6IFwKKysgICAgICV7cGc6Z2NydDEubyVzfSAleyFwZzole3A6Z2NydDEubyVzfSBcCisrCQkgICAgICAgJXshcDole3Byb2ZpbGU6Z2NydDEubyVzfSBcCisrCQkJICV7IXByb2ZpbGU6Y3J0MS5vJXN9fX19IFwKKysgICBjcnRpLm8lcyAleyFzaGFyZWQ6Y3J0YmVnaW4ubyVzfSAle3NoYXJlZDpjcnRiZWdpblMubyVzfSIKKysKKysvKiBQcm92aWRlIGEgRU5ERklMRV9TUEVDIGFwcHJvcHJpYXRlIGZvciBHTlUvTGludXguICBIZXJlIHdlIHRhY2sgb24KKysgICB0aGUgR05VL0xpbnV4IG1hZ2ljYWwgY3J0ZW5kLm8gZmlsZSAoc2VlIGNydHN0dWZmLmMpIHdoaWNoCisrICAgcHJvdmlkZXMgcGFydCBvZiB0aGUgc3VwcG9ydCBmb3IgZ2V0dGluZyBDKysgZmlsZS1zY29wZSBzdGF0aWMKKysgICBvYmplY3QgY29uc3RydWN0ZWQgYmVmb3JlIGVudGVyaW5nIGBtYWluJywgZm9sbG93ZWQgYnkgYSBub3JtYWwKKysgICBHTlUvTGludXggImZpbmFsaXplciIgZmlsZSwgYGNydG4ubycuICAqLworKworKyN1bmRlZiAgRU5ERklMRV9TUEVDCisrI2RlZmluZSBFTkRGSUxFX1NQRUMgXAorKyAgIiV7IXNoYXJlZDpjcnRlbmQubyVzfSAle3NoYXJlZDpjcnRlbmRTLm8lc30gY3J0bi5vJXMiCisrCisrI3VuZGVmIEFTTV9TUEVDCisrI2RlZmluZSBBU01fU1BFQyAiJXshbW5vLXBpYzoleyFmbm8tcGljOi0tcGljfX0gJXttcmVsYXh8Tyo6JXttbm8tcmVsYXh8TzB8TzE6IDs6LS1saW5rcmVsYXh9fSAle21jcHU9KjotbWNwdT0lKn0iCisrIAorKyN1bmRlZiAgTElOS19TUEVDCisrI2RlZmluZSBMSU5LX1NQRUMgIiV7dmVyc2lvbjotdn0gXAorKyAgICV7c3RhdGljOi1Cc3RhdGljfSBcCisrICAgJXtzaGFyZWQ6LXNoYXJlZH0gXAorKyAgICV7c3ltYm9saWM6LUJzeW1ib2xpY30gXAorKyAgICV7cmR5bmFtaWM6LWV4cG9ydC1keW5hbWljfSBcCisrICAgJXshZHluYW1pYy1saW5rZXI6LWR5bmFtaWMtbGlua2VyIC9saWIvbGQtdUNsaWJjLnNvLjB9IFwKKysgICAle21yZWxheHxPKjole21uby1yZWxheHxPMHxPMTogOzotLXJlbGF4fX0iCisrCisrI2RlZmluZSBUQVJHRVRfT1NfQ1BQX0JVSUxUSU5TKCkgTElOVVhfVEFSR0VUX09TX0NQUF9CVUlMVElOUygpCisrCisrLyogVGhpcyBpcyBob3cgd2UgdGVsbCB0aGUgYXNzZW1ibGVyIHRoYXQgdHdvIHN5bWJvbHMgaGF2ZSB0aGUgc2FtZSB2YWx1ZS4gICovCisrI2RlZmluZSBBU01fT1VUUFVUX0RFRihGSUxFLCBOQU1FMSwgTkFNRTIpIFwKKysgIGRvCQkJCQkgICBcCisrICAgIHsJCQkJCSAgIFwKKysgICAgICBhc3NlbWJsZV9uYW1lIChGSUxFLCBOQU1FMSk7IAkgICBcCisrICAgICAgZnB1dHMgKCIgPSAiLCBGSUxFKTsJCSAgIFwKKysgICAgICBhc3NlbWJsZV9uYW1lIChGSUxFLCBOQU1FMik7CSAgIFwKKysgICAgICBmcHV0YyAoJ1xuJywgRklMRSk7CQkgICBcCisrICAgIH0JCQkJCSAgIFwKKysgIHdoaWxlICgwKQorKworKworKworKyN1bmRlZiAgQ0MxX1NQRUMKKysjZGVmaW5lIENDMV9TUEVDICIle3Byb2ZpbGU6LXB9IgorKworKy8qIFRhcmdldCBDUFUgYnVpbHRpbnMuICAqLworKyNkZWZpbmUgVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMoKQkJCQlcCisrICBkbwkJCQkJCQkJXAorKyAgICB7CQkJCQkJCQlcCisrICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX2F2cjMyX18iKTsJCQkJXAorKyAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19BVlIzMl9fIik7CQkJCVwKKysgICAgICBidWlsdGluX2RlZmluZSAoIl9fQVZSMzJfTElOVVhfXyIpOwkJCVwKKysgICAgICBidWlsdGluX2RlZmluZSAoYXZyMzJfcGFydC0+bWFjcm8pOwkJCVwKKysgICAgICBidWlsdGluX2RlZmluZSAoYXZyMzJfYXJjaC0+bWFjcm8pOwkJCVwKKysgICAgICBpZiAoYXZyMzJfYXJjaC0+dWFyY2hfdHlwZSA9PSBVQVJDSF9UWVBFX0FWUjMyQSkJCVwKKysJYnVpbHRpbl9kZWZpbmUgKCJfX0FWUjMyX0FWUjMyQV9fIik7CQkJXAorKyAgICAgIGVsc2UJCQkJCQkJXAorKwlidWlsdGluX2RlZmluZSAoIl9fQVZSMzJfQVZSMzJCX18iKTsJCQlcCisrICAgICAgaWYgKFRBUkdFVF9VTkFMSUdORURfV09SRCkJCQkJXAorKwlidWlsdGluX2RlZmluZSAoIl9fQVZSMzJfSEFTX1VOQUxJR05FRF9XT1JEX18iKTsJXAorKyAgICAgIGlmIChUQVJHRVRfU0lNRCkJCQkJCQlcCisrCWJ1aWx0aW5fZGVmaW5lICgiX19BVlIzMl9IQVNfU0lNRF9fIik7CQkJXAorKyAgICAgIGlmIChUQVJHRVRfRFNQKQkJCQkJCVwKKysJYnVpbHRpbl9kZWZpbmUgKCJfX0FWUjMyX0hBU19EU1BfXyIpOwkJCVwKKysgICAgICBpZiAoVEFSR0VUX1JNVykJCQkJCQlcCisrCWJ1aWx0aW5fZGVmaW5lICgiX19BVlIzMl9IQVNfUk1XX18iKTsJCQlcCisrICAgICAgaWYgKFRBUkdFVF9CUkFOQ0hfUFJFRCkJCQkJCVwKKysJYnVpbHRpbl9kZWZpbmUgKCJfX0FWUjMyX0hBU19CUkFOQ0hfUFJFRF9fIik7CQlcCisrICAgICAgaWYgKFRBUkdFVF9GQVNUX0ZMT0FUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19BVlIzMl9GQVNUX0ZMT0FUX18iKTsgICAgICAgICAgICAgICAgXAorKyAgICB9CQkJCQkJCQlcCisrICB3aGlsZSAoMCkKKysKKysKKysKKysvKiBDYWxsIHRoZSBmdW5jdGlvbiBwcm9maWxlciB3aXRoIGEgZ2l2ZW4gcHJvZmlsZSBsYWJlbC4gICovCisrI3VuZGVmICBGVU5DVElPTl9QUk9GSUxFUgorKyNkZWZpbmUgRlVOQ1RJT05fUFJPRklMRVIoU1RSRUFNLCBMQUJFTE5PKQkJCQlcCisrICBkbwkJCQkJCQkJCVwKKysgICAgewkJCQkJCQkJCVwKKysgICAgICBmcHJpbnRmIChTVFJFQU0sICJcdG1vdlx0bHIsIGxvKG1jb3VudClcblx0b3JoXHRsciwgaGkobWNvdW50KVxuIik7IFwKKysgICAgICBmcHJpbnRmIChTVFJFQU0sICJcdGljYWxsIGxyXG4iKTsJCQkJCVwKKysgICAgfQkJCQkJCQkJCVwKKysgIHdoaWxlICgwKQorKworKyNkZWZpbmUgTk9fUFJPRklMRV9DT1VOVEVSUyAxCisrCisrLyogRm9yIGR5bmFtaWMgbGlicmFyaWVzIHRvIHdvcmsgKi8KKysvKiAjZGVmaW5lIFBMVF9SRUdfQ0FMTF9DTE9CQkVSRUQgMSAqLworKyNkZWZpbmUgQVZSMzJfQUxXQVlTX1BJQyAxCisrCisrLyogdWNsaWJjIGRvZXMgbm90IGltcGxlbWVudCBzaW5mLCBjb3NmIGV0Yy4gKi8KKysjdW5kZWYgVEFSR0VUX0M5OV9GVU5DVElPTlMKKysjZGVmaW5lIFRBUkdFVF9DOTlfRlVOQ1RJT05TIDAKKysKKysjZGVmaW5lIExJTktfR0NDX0NfU0VRVUVOQ0VfU1BFQyBcCisrICAiJXtzdGF0aWM6LS1zdGFydC1ncm91cH0gJUcgJUwgJXtzdGF0aWM6LS1lbmQtZ3JvdXB9JXshc3RhdGljOiVHfSIKKy0tLSAvZGV2L251bGwKKysrKyBiL2djYy9jb25maWcvYXZyMzIvcHJlZGljYXRlcy5tZAorQEAgLTAsMCArMSw0MTkgQEAKKys7OyAgIEFWUjMyIHByZWRpY2F0ZXMgZmlsZS4KKys7OyAgIENvcHlyaWdodCAyMDAzLTIwMDYgQXRtZWwgQ29ycG9yYXRpb24uCisrOzsKKys7OyAgIFdyaXR0ZW4gYnkgUm9ubnkgUGVkZXJzZW4sIEF0bWVsIE5vcndheSwgPHJwZWRlcnNlbkBhdG1lbC5jb20+CisrOzsKKys7OyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKys7OworKzs7ICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKys7OyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrOzsgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKzs7ICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKys7OworKzs7ICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrOzsgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKzs7ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKzs7ICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKys7OworKzs7ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKys7OyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrOzsgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKworKworKzs7IFRydWUgaWYgdGhlIG9wZXJhbmQgaXMgYSBtZW1vcnkgcmVmZXJlbmNlIHdoaWNoIGNvbnRhaW5zIGFuCisrOzsgQWRkcmVzcyBjb25zaXN0aW5nIG9mIGEgc2luZ2xlIHBvaW50ZXIgcmVnaXN0ZXIKKysoZGVmaW5lX3ByZWRpY2F0ZSAiYXZyMzJfaW5kaXJlY3RfcmVnaXN0ZXJfb3BlcmFuZCIKKysgIChhbmQgKG1hdGNoX2NvZGUgIm1lbSIpCisrICAgICAgIChtYXRjaF90ZXN0ICJyZWdpc3Rlcl9vcGVyYW5kKFhFWFAob3AsIDApLCBTSW1vZGUpIikpKQorKworKworKworKzs7IEFkZHJlc3MgZXhwcmVzc2lvbiB3aXRoIGEgYmFzZSBwb2ludGVyIG9mZnNldCB3aXRoCisrOzsgYSByZWdpc3RlciBkaXNwbGFjZW1lbnQKKysoZGVmaW5lX3ByZWRpY2F0ZSAiYXZyMzJfaW5kZXhlZF9tZW1vcnlfb3BlcmFuZCIKKysgIChhbmQgKG1hdGNoX2NvZGUgIm1lbSIpCisrICAgICAgIChtYXRjaF90ZXN0ICJHRVRfQ09ERShYRVhQKG9wLCAwKSkgPT0gUExVUyIpKQorKyAgeworKworKyAgIHJ0eCBvcDAgPSBYRVhQKFhFWFAob3AsIDApLCAwKTsKKysgICBydHggb3AxID0gWEVYUChYRVhQKG9wLCAwKSwgMSk7CisrCisrICAgcmV0dXJuICgoYXZyMzJfYWRkcmVzc19yZWdpc3Rlcl9ydHhfcCAob3AwLCAwKQorKyAgICAgICAgICAgICYmIGF2cjMyX2xlZ2l0aW1hdGVfaW5kZXhfcCAoR0VUX01PREUob3ApLCBvcDEsIDApKQorKwkgICB8fCAoYXZyMzJfYWRkcmVzc19yZWdpc3Rlcl9ydHhfcCAob3AxLCAwKQorKyAgICAgICAgICAgICYmIGF2cjMyX2xlZ2l0aW1hdGVfaW5kZXhfcCAoR0VUX01PREUob3ApLCBvcDAsIDApKSk7CisrCisrIH0pCisrCisrOzsgT3BlcmFuZCBzdWl0YWJsZSBmb3IgdGhlIGxkLnNiIGluc3RydWN0aW9uCisrKGRlZmluZV9wcmVkaWNhdGUgImxvYWRfc2JfbWVtb3J5X29wZXJhbmQiCisrICAoaW9yIChtYXRjaF9vcGVyYW5kIDAgImF2cjMyX2luZGlyZWN0X3JlZ2lzdGVyX29wZXJhbmQiKQorKyAgICAgICAobWF0Y2hfb3BlcmFuZCAwICJhdnIzMl9pbmRleGVkX21lbW9yeV9vcGVyYW5kIikpKQorKworKworKzs7IE9wZXJhbmQgc3VpdGFibGUgYXMgb3BlcmFuZCB0byBpbnNucyBzaWduIGV4dGVuZGluZyBRSSB2YWx1ZXMKKysoZGVmaW5lX3ByZWRpY2F0ZSAiZXh0ZW5kcWlfb3BlcmFuZCIKKysgIChpb3IgKG1hdGNoX29wZXJhbmQgMCAibG9hZF9zYl9tZW1vcnlfb3BlcmFuZCIpCisrICAgICAgIChtYXRjaF9vcGVyYW5kIDAgInJlZ2lzdGVyX29wZXJhbmQiKSkpCisrCisrKGRlZmluZV9wcmVkaWNhdGUgInBvc3RfaW5jX21lbW9yeV9vcGVyYW5kIgorKyAgKGFuZCAobWF0Y2hfY29kZSAibWVtIikKKysgICAgICAgKG1hdGNoX3Rlc3QgIihHRVRfQ09ERShYRVhQKG9wLCAwKSkgPT0gUE9TVF9JTkMpCisrICAgICAgICAgICAgICAgICAgICAgJiYgUkVHX1AoWEVYUChYRVhQKG9wLCAwKSwgMCkpIikpKQorKworKyhkZWZpbmVfcHJlZGljYXRlICJwcmVfZGVjX21lbW9yeV9vcGVyYW5kIgorKyAgKGFuZCAobWF0Y2hfY29kZSAibWVtIikKKysgICAgICAgKG1hdGNoX3Rlc3QgIihHRVRfQ09ERShYRVhQKG9wLCAwKSkgPT0gUFJFX0RFQykKKysgICAgICAgICAgICAgICAgICAgICAmJiBSRUdfUChYRVhQKFhFWFAob3AsIDApLCAwKSkiKSkpCisrCisrOzsgT3BlcmFuZCBzdWl0YWJsZSBmb3IgYWRkIGluc3RydWN0aW9ucworKyhkZWZpbmVfcHJlZGljYXRlICJhdnIzMl9hZGRfb3BlcmFuZCIKKysgIChpb3IgKG1hdGNoX29wZXJhbmQgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisrICAgICAgIChhbmQgKG1hdGNoX29wZXJhbmQgMCAiaW1tZWRpYXRlX29wZXJhbmQiKQorKyAgICAgICAgICAgIChtYXRjaF90ZXN0ICJDT05TVF9PS19GT1JfQ09OU1RSQUlOVF9QKElOVFZBTChvcCksICdJJywgXCJJczIxXCIpIikpKSkKKysKKys7OyBPcGVyYW5kIGlzIGEgcG93ZXIgb2YgdHdvIGltbWVkaWF0ZQorKyhkZWZpbmVfcHJlZGljYXRlICJwb3dlcl9vZl90d29fb3BlcmFuZCIKKysgIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQorK3sKKysgIEhPU1RfV0lERV9JTlQgdmFsdWUgPSBJTlRWQUwgKG9wKTsKKysKKysgIHJldHVybiB2YWx1ZSAhPSAwICYmICh2YWx1ZSAmICh2YWx1ZSAtIDEpKSA9PSAwOworK30pCisrCisrOzsgT3BlcmFuZCBpcyBhIG11bHRpcGxlIG9mIDggaW1tZWRpYXRlCisrKGRlZmluZV9wcmVkaWNhdGUgIm11bHRpcGxlX29mXzhfb3BlcmFuZCIKKysgIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQorK3sKKysgIEhPU1RfV0lERV9JTlQgdmFsdWUgPSBJTlRWQUwgKG9wKTsKKysKKysgIHJldHVybiAodmFsdWUgJiAweDcpID09IDAgOworK30pCisrCisrOzsgT3BlcmFuZCBpcyBhIG11bHRpcGxlIG9mIDE2IGltbWVkaWF0ZQorKyhkZWZpbmVfcHJlZGljYXRlICJtdWx0aXBsZV9vZl8xNl9vcGVyYW5kIgorKyAgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCisreworKyAgSE9TVF9XSURFX0lOVCB2YWx1ZSA9IElOVFZBTCAob3ApOworKworKyAgcmV0dXJuICh2YWx1ZSAmIDB4ZikgPT0gMCA7CisrfSkKKysKKys7OyBPcGVyYW5kIGlzIGEgbWFzayB1c2VkIGZvciBtYXNraW5nIGF3YXkgdXBwZXIgYml0cyBvZiBhIHJlZworKyhkZWZpbmVfcHJlZGljYXRlICJhdnIzMl9tYXNrX3VwcGVyX2JpdHNfb3BlcmFuZCIKKysgIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQorK3sKKysgIEhPU1RfV0lERV9JTlQgdmFsdWUgPSBJTlRWQUwgKG9wKSArIDE7CisrCisrICByZXR1cm4gdmFsdWUgIT0gMSAmJiB2YWx1ZSAhPSAwICYmICh2YWx1ZSAmICh2YWx1ZSAtIDEpKSA9PSAwOworK30pCisrCisrCisrOzsgT3BlcmFuZCBzdWl0YWJsZSBmb3IgbXVsIGluc3RydWN0aW9ucworKyhkZWZpbmVfcHJlZGljYXRlICJhdnIzMl9tdWxfb3BlcmFuZCIKKysgIChpb3IgKG1hdGNoX29wZXJhbmQgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisrICAgICAgIChhbmQgKG1hdGNoX29wZXJhbmQgMCAiaW1tZWRpYXRlX29wZXJhbmQiKQorKyAgICAgICAgICAgIChtYXRjaF90ZXN0ICJDT05TVF9PS19GT1JfQ09OU1RSQUlOVF9QKElOVFZBTChvcCksICdLJywgXCJLczA4XCIpIikpKSkKKysKKys7OyBUcnVlIGZvciBsb2dpY2FsIGJpbmFyeSBvcGVyYXRvcnMuCisrKGRlZmluZV9wcmVkaWNhdGUgImxvZ2ljYWxfYmluYXJ5X29wZXJhdG9yIgorKyAgKG1hdGNoX2NvZGUgImlvcix4b3IsYW5kIikpCisrCisrOzsgVHJ1ZSBmb3IgbG9naWNhbCBzaGlmdCBvcGVyYXRvcnMKKysoZGVmaW5lX3ByZWRpY2F0ZSAibG9naWNhbF9zaGlmdF9vcGVyYXRvciIKKysgIChtYXRjaF9jb2RlICJhc2hpZnQsbHNoaWZ0cnQiKSkKKysKKys7OyBUcnVlIGZvciBzaGlmdCBvcGVyYW5kIGZvciBsb2dpY2FsIGFuZCwgb3IgYW5kIGVvciBpbnNucworKyhkZWZpbmVfcHJlZGljYXRlICJhdnIzMl9sb2dpY2FsX3NoaWZ0X29wZXJhbmQiCisrICAoYW5kIChtYXRjaF9jb2RlICJhc2hpZnQsbHNoaWZ0cnQiKQorKyAgICAgICAoaW9yIChhbmQgKG1hdGNoX3Rlc3QgIkdFVF9DT0RFKFhFWFAob3AsIDEpKSA9PSBDT05TVF9JTlQiKQorKyAgICAgICAgICAgICAgICAgKG1hdGNoX3Rlc3QgInJlZ2lzdGVyX29wZXJhbmQoWEVYUChvcCwgMCksIEdFVF9NT0RFKFhFWFAob3AsIDApKSkiKSkKKysgICAgICAgICAgICAoYW5kIChtYXRjaF90ZXN0ICJHRVRfQ09ERShYRVhQKG9wLCAwKSkgPT0gQ09OU1RfSU5UIikKKysgICAgICAgICAgICAgICAgIChtYXRjaF90ZXN0ICJyZWdpc3Rlcl9vcGVyYW5kKFhFWFAob3AsIDEpLCBHRVRfTU9ERShYRVhQKG9wLCAxKSkpIikpKSkKKysgICkKKysKKysKKys7OyBQcmVkaWNhdGUgZm9yIHNlY29uZCBvcGVyYW5kIHRvIGFuZCwgaW9yIGFuZCB4b3IgaW5zbiBwYXR0ZXJucworKyhkZWZpbmVfcHJlZGljYXRlICJhdnIzMl9sb2dpY2FsX2luc25fb3BlcmFuZCIKKysgIChpb3IgKG1hdGNoX29wZXJhbmQgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisrICAgICAgIChtYXRjaF9vcGVyYW5kIDAgImF2cjMyX2xvZ2ljYWxfc2hpZnRfb3BlcmFuZCIpKQorKykKKysKKysKKys7OyBUcnVlIGZvciBhdnIzMiBjb21wYXJpc29uIG9wZXJhdG9ycworKyhkZWZpbmVfcHJlZGljYXRlICJhdnIzMl9jb21wYXJpc29uX29wZXJhdG9yIgorKyAgKGlvciAobWF0Y2hfY29kZSAiZXEsIG5lLCBndCwgZ2UsIGx0LCBsZSwgZ3R1LCBnZXUsIGx0dSwgbGV1IikKKysgICAgICAgKGFuZCAobWF0Y2hfY29kZSAidW5zcGVjIikKKysgICAgICAgICAgICAobWF0Y2hfdGVzdCAiKFhJTlQob3AsIDEpID09IFVOU1BFQ19DT05EX01JKQorKyAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoWElOVChvcCwgMSkgPT0gVU5TUEVDX0NPTkRfUEwpIikpKSkKKysKKysoZGVmaW5lX3ByZWRpY2F0ZSAiYXZyMzJfY29uZDNfY29tcGFyaXNvbl9vcGVyYXRvciIKKysgIChpb3IgKG1hdGNoX2NvZGUgImVxLCBuZSwgZ2UsIGx0LCBnZXUsIGx0dSIpCisrICAgICAgIChhbmQgKG1hdGNoX2NvZGUgInVuc3BlYyIpCisrICAgICAgICAgICAgKG1hdGNoX3Rlc3QgIihYSU5UKG9wLCAxKSA9PSBVTlNQRUNfQ09ORF9NSSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKFhJTlQob3AsIDEpID09IFVOU1BFQ19DT05EX1BMKSIpKSkpCisrCisrOzsgVHJ1ZSBmb3IgYXZyMzIgY29tcGFyaXNvbiBvcGVyYW5kCisrKGRlZmluZV9wcmVkaWNhdGUgImF2cjMyX2NvbXBhcmlzb25fb3BlcmFuZCIKKysgIChpb3IgKGFuZCAobWF0Y2hfY29kZSAiZXEsIG5lLCBndCwgZ2UsIGx0LCBsZSwgZ3R1LCBnZXUsIGx0dSwgbGV1IikKKysgICAgICAgICAgICAobWF0Y2hfdGVzdCAiKENDMF9QIChYRVhQKG9wLDApKSAmJiBydHhfZXF1YWxfcCAoWEVYUChvcCwxKSwgY29uc3QwX3J0eCkpIikpCisrICAgICAgIChhbmQgKG1hdGNoX2NvZGUgInVuc3BlYyIpCisrICAgICAgICAgICAgKG1hdGNoX3Rlc3QgIihYSU5UKG9wLCAxKSA9PSBVTlNQRUNfQ09ORF9NSSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKFhJTlQob3AsIDEpID09IFVOU1BFQ19DT05EX1BMKSIpKSkpCisrCisrOzsgVHJ1ZSBpZiB0aGlzIGlzIGEgY29uc3RfaW50IHdpdGggb25lIGJpdCBzZXQKKysoZGVmaW5lX3ByZWRpY2F0ZSAib25lX2JpdF9zZXRfb3BlcmFuZCIKKysgIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQorKyAgeworKyAgIGludCBpOworKyAgIGludCB2YWx1ZTsKKysgICBpbnQgb25lcyA9IDA7CisrCisrICAgdmFsdWUgPSBJTlRWQUwob3ApOworKyAgIGZvciAoIGkgPSAwIDsgaSA8IDMyOyBpKysgKXsKKysgICAgIGlmICggdmFsdWUgJiAoIDEgPDwgaSApICl7CisrICAgICAgICBvbmVzKys7CisrICAgICAgfQorKyAgIH0KKysKKysgICByZXR1cm4gKCBvbmVzID09IDEgKTsKKysgIH0pCisrCisrCisrOzsgVHJ1ZSBpZiB0aGlzIGlzIGEgY29uc3RfaW50IHdpdGggb25lIGJpdCBjbGVhcmVkCisrKGRlZmluZV9wcmVkaWNhdGUgIm9uZV9iaXRfY2xlYXJlZF9vcGVyYW5kIgorKyAgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCisrICB7CisrICAgaW50IGk7CisrICAgaW50IHZhbHVlOworKyAgIGludCB6ZXJvZXMgPSAwOworKworKyAgIHZhbHVlID0gSU5UVkFMKG9wKTsKKysgICBmb3IgKCBpID0gMCA7IGkgPCAzMjsgaSsrICl7CisrICAgICBpZiAoICEodmFsdWUgJiAoIDEgPDwgaSApKSApeworKyAgICAgICAgemVyb2VzKys7CisrICAgICAgfQorKyAgIH0KKysKKysgICByZXR1cm4gKCB6ZXJvZXMgPT0gMSApOworKyAgfSkKKysKKysKKys7OyBJbW1lZGlhdGUgYWxsIHRoZSBsb3cgMTYtYml0cyBjbGVhcmVkCisrKGRlZmluZV9wcmVkaWNhdGUgImF2cjMyX2hpMTZfaW1tZWRpYXRlX29wZXJhbmQiCisrICAobWF0Y2hfY29kZSAiY29uc3RfaW50IikKKysgIHsKKysgICAvKiBJZiB0aGUgbG93IDE2LWJpdHMgYXJlIHplcm8gdGhlbiB0aGlzCisrICAgICAgaXMgYSBoaTE2IGltbWVkaWF0ZS4gKi8KKysgICByZXR1cm4gKChJTlRWQUwob3ApICYgMHhmZmZmKSA9PSAwKTsKKysgICB9CisrKQorKworKzs7IFRydWUgaWYgdGhpcyBpcyBhIHJlZ2lzdGVyIG9yIGltbWVkaWF0ZSBvcGVyYW5kCisrKGRlZmluZV9wcmVkaWNhdGUgInJlZ2lzdGVyX2ltbWVkaWF0ZV9vcGVyYW5kIgorKyAgKGlvciAobWF0Y2hfb3BlcmFuZCAwICJyZWdpc3Rlcl9vcGVyYW5kIikKKysgICAgICAgKG1hdGNoX29wZXJhbmQgMCAiaW1tZWRpYXRlX29wZXJhbmQiKSkpCisrCisrOzsgVHJ1ZSBpZiB0aGlzIGlzIGEgcmVnaXN0ZXIgb3IgY29uc3RfaW50IG9wZXJhbmQKKysoZGVmaW5lX3ByZWRpY2F0ZSAicmVnaXN0ZXJfY29uc3RfaW50X29wZXJhbmQiCisrICAoaW9yIChtYXRjaF9vcGVyYW5kIDAgInJlZ2lzdGVyX29wZXJhbmQiKQorKyAgICAgICAoYW5kIChtYXRjaF9vcGVyYW5kIDAgImNvbnN0X2ludF9vcGVyYW5kIikKKysgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZCAwICJpbW1lZGlhdGVfb3BlcmFuZCIpKSkpCisrCisrOzsgVHJ1ZSBpZiB0aGlzIGlzIGEgcmVnaXN0ZXIgb3IgY29uc3RfZG91YmxlIG9wZXJhbmQKKysoZGVmaW5lX3ByZWRpY2F0ZSAicmVnaXN0ZXJfY29uc3RfZG91YmxlX29wZXJhbmQiCisrICAoaW9yIChtYXRjaF9vcGVyYW5kIDAgInJlZ2lzdGVyX29wZXJhbmQiKQorKyAgICAgICAobWF0Y2hfb3BlcmFuZCAwICJjb25zdF9kb3VibGVfb3BlcmFuZCIpKSkKKysKKys7OyBUcnVlIGlzIHRoaXMgaXMgYW4gb3BlcmFuZCBjb250YWluaW5nIGEgbGFiZWxfcmVmCisrKGRlZmluZV9wcmVkaWNhdGUgImF2cjMyX2xhYmVsX3JlZl9vcGVyYW5kIgorKyAgKGFuZCAobWF0Y2hfY29kZSAibWVtIikKKysgICAgICAgKG1hdGNoX3Rlc3QgImF2cjMyX2ZpbmRfc3ltYm9sKG9wKQorKyAgICAgICAgICAgICAgICAgICAgJiYgKEdFVF9DT0RFKGF2cjMyX2ZpbmRfc3ltYm9sKG9wKSkgPT0gTEFCRUxfUkVGKSIpKSkKKysKKys7OyBUcnVlIGlzIHRoaXMgaXMgYSB2YWxpZCBzeW1ib2wgcG9pbnRpbmcgdG8gdGhlIGNvbnN0YW50IHBvb2wKKysoZGVmaW5lX3ByZWRpY2F0ZSAiYXZyMzJfY29uc3RfcG9vbF9vcGVyYW5kIgorKyAgKGFuZCAobWF0Y2hfY29kZSAic3ltYm9sX3JlZiIpCisrICAgICAgIChtYXRjaF90ZXN0ICJDT05TVEFOVF9QT09MX0FERFJFU1NfUChvcCkiKSkKKysgIHsKKysgICAgICAgIHJldHVybiAoZmxhZ19waWMgPyAoIShzeW1ib2xfbWVudGlvbmVkX3AgKGdldF9wb29sX2NvbnN0YW50IChvcCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgfHwgbGFiZWxfbWVudGlvbmVkX3AgKGdldF9wb29sX2NvbnN0YW50IChvcCkpKQorKyAgICAgICAgICAgICAgICAgICAgICAgfHwgYXZyMzJfZ290X21lbnRpb25lZF9wKGdldF9wb29sX2NvbnN0YW50IChvcCkpKQorKyAgICAgICAgICAgICAgICAgICAgOiB0cnVlKTsKKysgIH0KKyspCisrCisrOzsgVHJ1ZSBpcyB0aGlzIGlzIGEgbWVtb3J5IHJlZmVyZW5jZSB0byB0aGUgY29uc3RhbnQgb3IgbWluaSBwb29sCisrKGRlZmluZV9wcmVkaWNhdGUgImF2cjMyX2NvbnN0X3Bvb2xfcmVmX29wZXJhbmQiCisrICAoaW9yIChtYXRjaF9vcGVyYW5kIDAgImF2cjMyX2xhYmVsX3JlZl9vcGVyYW5kIikKKysgICAgICAgKGFuZCAobWF0Y2hfY29kZSAibWVtIikKKysgICAgICAgICAgICAobWF0Y2hfdGVzdCAiYXZyMzJfY29uc3RfcG9vbF9vcGVyYW5kKFhFWFAob3AsMCksIEdFVF9NT0RFKFhFWFAob3AsMCkpKSIpKSkpCisrCisrCisrOzsgTGVnYWwgc291cmNlIG9wZXJhbmQgZm9yIG1vdnRpIGluc25zCisrKGRlZmluZV9wcmVkaWNhdGUgImF2cjMyX21vdnRpX3NyY19vcGVyYW5kIgorKyAgKGlvciAobWF0Y2hfb3BlcmFuZCAwICJhdnIzMl9jb25zdF9wb29sX3JlZl9vcGVyYW5kIikKKysgICAgICAgKGlvciAoaW9yIChtYXRjaF9vcGVyYW5kIDAgInJlZ2lzdGVyX2ltbWVkaWF0ZV9vcGVyYW5kIikKKysgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kIDAgImF2cjMyX2luZGlyZWN0X3JlZ2lzdGVyX29wZXJhbmQiKSkKKysgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZCAwICJwb3N0X2luY19tZW1vcnlfb3BlcmFuZCIpKSkpCisrICAKKys7OyBMZWdhbCBkZXN0aW5hdGlvbiBvcGVyYW5kIGZvciBtb3Z0aSBpbnNucworKyhkZWZpbmVfcHJlZGljYXRlICJhdnIzMl9tb3Z0aV9kc3Rfb3BlcmFuZCIKKysgIChpb3IgKGlvciAobWF0Y2hfb3BlcmFuZCAwICJyZWdpc3Rlcl9vcGVyYW5kIikKKysgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZCAwICJhdnIzMl9pbmRpcmVjdF9yZWdpc3Rlcl9vcGVyYW5kIikpCisrICAgICAgIChtYXRjaF9vcGVyYW5kIDAgInByZV9kZWNfbWVtb3J5X29wZXJhbmQiKSkpCisrCisrCisrOzsgVHJ1ZSBpcyB0aGlzIGlzIGEgazEyIG9mZnNldGVkIG1lbW9yeSBvcGVyYW5kCisrKGRlZmluZV9wcmVkaWNhdGUgImF2cjMyX2sxMl9tZW1vcnlfb3BlcmFuZCIKKysgIChhbmQgKG1hdGNoX2NvZGUgIm1lbSIpCisrICAgICAgIChpb3IgKG1hdGNoX3Rlc3QgIlJFR19QKFhFWFAob3AsIDApKSIpCisrICAgICAgICAgICAgKG1hdGNoX3Rlc3QgIkdFVF9DT0RFKFhFWFAob3AsIDApKSA9PSBQTFVTCisrICAgICAgICAgICAgICAgICAgICAgICAgICYmIFJFR19QKFhFWFAoWEVYUChvcCwgMCksIDApKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoR0VUX0NPREUoWEVYUChYRVhQKG9wLCAwKSwgMSkpID09IENPTlNUX0lOVCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKENPTlNUX09LX0ZPUl9DT05TVFJBSU5UX1AoSU5UVkFMKFhFWFAoWEVYUChvcCwgMCksIDApKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdLJywgKG1vZGUgPT0gU0ltb2RlKSA/IFwiS3MxNFwiIDogKChtb2RlID09IEhJbW9kZSkgPyBcIktzMTNcIiA6IFwiS3MxMlwiKSkpIikpKSkKKysKKys7OyBUcnVlIGlzIHRoaXMgaXMgYSBtZW1vcnkgb3BlcmFuZCB3aXRoIGFuIGltbWVkaWF0ZSBkaXNwbGFjZW1lbnQKKysoZGVmaW5lX3ByZWRpY2F0ZSAiYXZyMzJfaW1tX2Rpc3BfbWVtb3J5X29wZXJhbmQiCisrICAoYW5kIChtYXRjaF9jb2RlICJtZW0iKQorKyAgICAgICAobWF0Y2hfdGVzdCAiR0VUX0NPREUoWEVYUChvcCwgMCkpID09IFBMVVMKKysgICAgICAgICAgICAgICAgICAgICYmIFJFR19QKFhFWFAoWEVYUChvcCwgMCksIDApKQorKyAgICAgICAgICAgICAgICAgICAgJiYgKEdFVF9DT0RFKFhFWFAoWEVYUChvcCwgMCksIDEpKSA9PSBDT05TVF9JTlQpIikpKQorKworKzs7IFRydWUgaXMgdGhpcyBpcyBhIGJzd2FwIG9wZXJhbmQKKysoZGVmaW5lX3ByZWRpY2F0ZSAiYXZyMzJfYnN3YXBfb3BlcmFuZCIKKysgIChpb3IgKG1hdGNoX29wZXJhbmQgMCAiYXZyMzJfazEyX21lbW9yeV9vcGVyYW5kIikKKysgICAgICAgKG1hdGNoX29wZXJhbmQgMCAicmVnaXN0ZXJfb3BlcmFuZCIpKSkKKysKKys7OyBUcnVlIGlzIHRoaXMgaXMgYSB2YWxpZCBjb3Byb2Nlc3NvciBpbnNuIG1lbW9yeSBvcGVyYW5kCisrKGRlZmluZV9wcmVkaWNhdGUgImF2cjMyX2NvcF9tZW1vcnlfb3BlcmFuZCIKKysgIChhbmQgKG1hdGNoX29wZXJhbmQgMCAibWVtb3J5X29wZXJhbmQiKQorKyAgICAgICAobm90IChtYXRjaF90ZXN0ICJHRVRfQ09ERShYRVhQKG9wLCAwKSkgPT0gUExVUworKyAgICAgICAgICAgICAgICAgICAgICAgICAmJiBSRUdfUChYRVhQKFhFWFAob3AsIDApLCAwKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKEdFVF9DT0RFKFhFWFAoWEVYUChvcCwgMCksIDEpKSA9PSBDT05TVF9JTlQpCisrICAgICAgICAgICAgICAgICAgICAgICAgICYmICEoQ09OU1RfT0tfRk9SX0NPTlNUUkFJTlRfUChJTlRWQUwoWEVYUChYRVhQKG9wLCAwKSwgMCkpLCAnSycsIFwiS3UxMFwiKSkiKSkpKQorKworKzs7IFRydWUgaXMgdGhpcyBpcyBhIHZhbGlkIHNvdXJjZS9kZXN0aW5hdGlvbiBvcGVyYW5kCisrOzsgZm9yIG1vdmluZyB2YWx1ZXMgdG8vZnJvbSBhIGNvcHJvY2Vzc29yCisrKGRlZmluZV9wcmVkaWNhdGUgImF2cjMyX2NvcF9tb3ZlX29wZXJhbmQiCisrICAoaW9yIChtYXRjaF9vcGVyYW5kIDAgInJlZ2lzdGVyX29wZXJhbmQiKQorKyAgICAgICAobWF0Y2hfb3BlcmFuZCAwICJhdnIzMl9jb3BfbWVtb3J5X29wZXJhbmQiKSkpCisrCisrCisrOzsgVHJ1ZSBpcyB0aGlzIGlzIGEgdmFsaWQgZXh0cmFjdCBieXRlIG9mZnNldCBmb3IgdXNlIGluCisrOzsgbG9hZCBleHRyYWN0ZWQgaW5kZXggaW5zbnMKKysoZGVmaW5lX3ByZWRpY2F0ZSAiYXZyMzJfZXh0cmFjdF9zaGlmdF9vcGVyYW5kIgorKyAgKGFuZCAobWF0Y2hfb3BlcmFuZCAwICJjb25zdF9pbnRfb3BlcmFuZCIpCisrICAgICAgIChtYXRjaF90ZXN0ICIoSU5UVkFMKG9wKSA9PSAwKSB8fCAoSU5UVkFMKG9wKSA9PSA4KQorKyAgICAgICAgICAgICAgICAgICAgfHwgKElOVFZBTChvcCkgPT0gMTYpIHx8IChJTlRWQUwob3ApID09IDI0KSIpKSkKKysKKys7OyBUcnVlIGlzIHRoaXMgaXMgYSBmbG9hdGluZy1wb2ludCByZWdpc3RlcgorKyhkZWZpbmVfcHJlZGljYXRlICJhdnIzMl9mcF9yZWdpc3Rlcl9vcGVyYW5kIgorKyAgKGFuZCAobWF0Y2hfb3BlcmFuZCAwICJyZWdpc3Rlcl9vcGVyYW5kIikKKysgICAgICAgKG1hdGNoX3Rlc3QgIlJFR05PX1JFR19DTEFTUyhSRUdOTyhvcCkpID09IEZQX1JFR1MiKSkpCisrCisrOzsgVHJ1ZSBpcyB0aGlzIGlzIHZhbGlkIGF2cjMyIHN5bWJvbCBvcGVyYW5kCisrKGRlZmluZV9wcmVkaWNhdGUgImF2cjMyX3N5bWJvbF9vcGVyYW5kIgorKyAgKGFuZCAobWF0Y2hfY29kZSAibGFiZWxfcmVmLCBzeW1ib2xfcmVmLCBjb25zdCIpCisrICAgICAgIChtYXRjaF90ZXN0ICJhdnIzMl9maW5kX3N5bWJvbChvcCkiKSkpCisrCisrOzsgVHJ1ZSBpcyB0aGlzIGlzIHZhbGlkIG9wZXJhbmQgZm9yIHRoZSBsZGEudyBhbmQgY2FsbCBwc2V1ZG8gaW5zbnMKKysoZGVmaW5lX3ByZWRpY2F0ZSAiYXZyMzJfYWRkcmVzc19vcGVyYW5kIgorKyAgKGFuZCAoYW5kIChtYXRjaF9jb2RlICJsYWJlbF9yZWYsIHN5bWJvbF9yZWYiKQorKyAgICAgICAgICAgIChtYXRjaF90ZXN0ICJhdnIzMl9maW5kX3N5bWJvbChvcCkiKSkKKysgICAgICAgKGlvciAobWF0Y2hfdGVzdCAiVEFSR0VUX0hBU19BU01fQUREUl9QU0VVRE9TIikKKysgICAgICAgICAgICAobWF0Y2hfdGVzdCAiZmxhZ19waWMiKSkgKSkKKysKKys7OyBBbiBpbW1lZGlhdGUgazE2IGFkZHJlc3Mgb3BlcmFuZAorKyhkZWZpbmVfcHJlZGljYXRlICJhdnIzMl9rczE2X2FkZHJlc3Nfb3BlcmFuZCIKKysgIChhbmQgKG1hdGNoX29wZXJhbmQgMCAiYWRkcmVzc19vcGVyYW5kIikKKysgICAgICAgKGlvciAobWF0Y2hfdGVzdCAiUkVHX1Aob3ApIikKKysgICAgICAgICAgICAobWF0Y2hfdGVzdCAiR0VUX0NPREUob3ApID09IFBMVVMKKysgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKChHRVRfQ09ERShYRVhQKG9wLDApKSA9PSBDT05TVF9JTlQpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoR0VUX0NPREUoWEVYUChvcCwxKSkgPT0gQ09OU1RfSU5UKSkiKSkgKSkKKysKKys7OyBBbiBvZmZzZXQgazE2IG1lbW9yeSBvcGVyYW5kCisrKGRlZmluZV9wcmVkaWNhdGUgImF2cjMyX2tzMTZfbWVtb3J5X29wZXJhbmQiCisrICAoYW5kIChtYXRjaF9jb2RlICJtZW0iKQorKyAgICAgICAobWF0Y2hfdGVzdCAiYXZyMzJfa3MxNl9hZGRyZXNzX29wZXJhbmQgKFhFWFAgKG9wLCAwKSwgR0VUX01PREUgKFhFWFAgKG9wLCAwKSkpIikpKQorKworKzs7IEFuIGltbWVkaWF0ZSBrMTEgYWRkcmVzcyBvcGVyYW5kCisrKGRlZmluZV9wcmVkaWNhdGUgImF2cjMyX2tzMTFfYWRkcmVzc19vcGVyYW5kIgorKyAgKGFuZCAobWF0Y2hfb3BlcmFuZCAwICJhZGRyZXNzX29wZXJhbmQiKQorKyAgICAgICAoaW9yIChtYXRjaF90ZXN0ICJSRUdfUChvcCkiKQorKyAgICAgICAgICAgIChtYXRjaF90ZXN0ICJHRVRfQ09ERShvcCkgPT0gUExVUworKyAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKChHRVRfQ09ERShYRVhQKG9wLDApKSA9PSBDT05TVF9JTlQpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYXZyMzJfY29uc3Rfb2tfZm9yX2NvbnN0cmFpbnRfcChJTlRWQUwoWEVYUChvcCwwKSksICdLJywgXCJLczExXCIpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChHRVRfQ09ERShYRVhQKG9wLDEpKSA9PSBDT05TVF9JTlQpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYXZyMzJfY29uc3Rfb2tfZm9yX2NvbnN0cmFpbnRfcChJTlRWQUwoWEVYUChvcCwxKSksICdLJywgXCJLczExXCIpKSkiKSkgKSkKKysKKys7OyBUcnVlIGlmIHRoaXMgaXMgYSBhdnIzMiBjYWxsIG9wZXJhbmQKKysoZGVmaW5lX3ByZWRpY2F0ZSAiYXZyMzJfY2FsbF9vcGVyYW5kIgorKyAgKGlvciAoaW9yIChtYXRjaF9vcGVyYW5kIDAgInJlZ2lzdGVyX29wZXJhbmQiKQorKyAgICAgICAgICAgIChpb3IgKG1hdGNoX29wZXJhbmQgMCAiYXZyMzJfY29uc3RfcG9vbF9yZWZfb3BlcmFuZCIpCisrICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZCAwICJhdnIzMl9hZGRyZXNzX29wZXJhbmQiKSkpCisrICAgICAgIChtYXRjaF90ZXN0ICJTWU1CT0xfUkVGX1JDQUxMX0ZVTkNUSU9OX1Aob3ApIikpKQorKworKzs7IFJldHVybiB0cnVlIGZvciBvcGVyYXRvcnMgcGVyZm9ybWluZyBBTFUgb3BlcmF0aW9ucworKworKyhkZWZpbmVfcHJlZGljYXRlICJhbHVfb3BlcmF0b3IiCisrICAobWF0Y2hfY29kZSAiaW9yLCB4b3IsIGFuZCwgcGx1cywgbWludXMsIGFzaGlmdCwgbHNoaWZ0cnQsIGFzaGlmdHJ0IikpCisrCisrKGRlZmluZV9wcmVkaWNhdGUgImF2cjMyX2FkZF9zaGlmdF9pbW1lZGlhdGVfb3BlcmFuZCIKKysgIChhbmQgKG1hdGNoX29wZXJhbmQgMCAiaW1tZWRpYXRlX29wZXJhbmQiKQorKyAgICAgICAobWF0Y2hfdGVzdCAiQ09OU1RfT0tfRk9SX0NPTlNUUkFJTlRfUChJTlRWQUwob3ApLCAnSycsIFwiS3UwMlwiKSIpKSkKKysKKysoZGVmaW5lX3ByZWRpY2F0ZSAiYXZyMzJfY29uZF9yZWdpc3Rlcl9pbW1lZGlhdGVfb3BlcmFuZCIKKysgIChpb3IgKG1hdGNoX29wZXJhbmQgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisrICAgICAgIChhbmQgKG1hdGNoX29wZXJhbmQgMCAiaW1tZWRpYXRlX29wZXJhbmQiKQorKyAgICAgICAgICAgIChtYXRjaF90ZXN0ICJDT05TVF9PS19GT1JfQ09OU1RSQUlOVF9QKElOVFZBTChvcCksICdLJywgXCJLczA4XCIpIikpKSkKKysKKysoZGVmaW5lX3ByZWRpY2F0ZSAiYXZyMzJfY29uZF9pbW1lZGlhdGVfb3BlcmFuZCIKKysgIChhbmQgKG1hdGNoX29wZXJhbmQgMCAiaW1tZWRpYXRlX29wZXJhbmQiKQorKyAgICAgICAobWF0Y2hfdGVzdCAiQ09OU1RfT0tfRk9SX0NPTlNUUkFJTlRfUChJTlRWQUwob3ApLCAnSScsIFwiSXMwOFwiKSIpKSkKKysKKysKKysoZGVmaW5lX3ByZWRpY2F0ZSAiYXZyMzJfY29uZF9tb3ZlX29wZXJhbmQiCisrICAoaW9yIChpb3IgKG1hdGNoX29wZXJhbmQgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisrICAgICAgICAgICAgKGFuZCAobWF0Y2hfb3BlcmFuZCAwICJpbW1lZGlhdGVfb3BlcmFuZCIpCisrICAgICAgICAgICAgICAgICAobWF0Y2hfdGVzdCAiQ09OU1RfT0tfRk9SX0NPTlNUUkFJTlRfUChJTlRWQUwob3ApLCAnSycsIFwiS3MwOFwiKSIpKSkKKysgICAgICAgKGFuZCAobWF0Y2hfdGVzdCAiVEFSR0VUX1YyX0lOU05TIikKKysgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZCAwICJtZW1vcnlfb3BlcmFuZCIpKSkpCisrCisrKGRlZmluZV9wcmVkaWNhdGUgImF2cjMyX21vdl9pbW1lZGlhdGVfb3BlcmFuZCIKKysgIChhbmQgKG1hdGNoX29wZXJhbmQgMCAiaW1tZWRpYXRlX29wZXJhbmQiKQorKyAgICAgICAobWF0Y2hfdGVzdCAiYXZyMzJfY29uc3Rfb2tfZm9yX21vdmUoSU5UVkFMKG9wKSkiKSkpCisrCisrCisrKGRlZmluZV9wcmVkaWNhdGUgImF2cjMyX3Jtd19hZGRyZXNzX29wZXJhbmQiCisrICAoaW9yIChhbmQgKG1hdGNoX2NvZGUgInN5bWJvbF9yZWYiKSAKKysgICAgICAgICAgICAobWF0Y2hfdGVzdCAiKHtydHggc3ltYm9sID0gYXZyMzJfZmluZF9zeW1ib2wob3ApOyBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2wgJiYgKEdFVF9DT0RFIChzeW1ib2wpID09IFNZTUJPTF9SRUYpICYmIFNZTUJPTF9SRUZfUk1XX0FERFIoc3ltYm9sKTt9KSIpKQorKyAgICAgICAoYW5kIChtYXRjaF9vcGVyYW5kIDAgImltbWVkaWF0ZV9vcGVyYW5kIikKKysgICAgICAgICAgICAobWF0Y2hfdGVzdCAiQ09OU1RfT0tfRk9SX0NPTlNUUkFJTlRfUChJTlRWQUwob3ApLCAnSycsIFwiS3MxN1wiKSIpKSkKKysgIHsKKysgICByZXR1cm4gVEFSR0VUX1JNVyAmJiAhZmxhZ19waWM7CisrICB9CisrKQorKyAKKysoZGVmaW5lX3ByZWRpY2F0ZSAiYXZyMzJfcm13X21lbW9yeV9vcGVyYW5kIgorKyAgKGFuZCAobWF0Y2hfY29kZSAibWVtIikKKysgICAgICAgKG1hdGNoX3Rlc3QgIihHRVRfTU9ERShvcCkgPT0gU0ltb2RlKSAmJiAKKysgICAgICAgICAgICAgICAgICAgIGF2cjMyX3Jtd19hZGRyZXNzX29wZXJhbmQoWEVYUChvcCwgMCksIEdFVF9NT0RFKFhFWFAob3AsIDApKSkiKSkpCisrCisrKGRlZmluZV9wcmVkaWNhdGUgImF2cjMyX3Jtd19tZW1vcnlfb3JfcmVnaXN0ZXJfb3BlcmFuZCIKKysgIChpb3IgKG1hdGNoX29wZXJhbmQgMCAiYXZyMzJfcm13X21lbW9yeV9vcGVyYW5kIikKKysgICAgICAgKG1hdGNoX29wZXJhbmQgMCAicmVnaXN0ZXJfb3BlcmFuZCIpKSkKKysKKysoZGVmaW5lX3ByZWRpY2F0ZSAiYXZyMzJfbm9uX3Jtd19tZW1vcnlfb3BlcmFuZCIKKysgIChhbmQgKG5vdCAobWF0Y2hfb3BlcmFuZCAwICJhdnIzMl9ybXdfbWVtb3J5X29wZXJhbmQiKSkKKysgICAgICAgKG1hdGNoX29wZXJhbmQgMCAibWVtb3J5X29wZXJhbmQiKSkpCisrCisrKGRlZmluZV9wcmVkaWNhdGUgImF2cjMyX25vbl9ybXdfZ2VuZXJhbF9vcGVyYW5kIgorKyAgKGFuZCAobm90IChtYXRjaF9vcGVyYW5kIDAgImF2cjMyX3Jtd19tZW1vcnlfb3BlcmFuZCIpKQorKyAgICAgICAobWF0Y2hfb3BlcmFuZCAwICJnZW5lcmFsX29wZXJhbmQiKSkpCisrCisrKGRlZmluZV9wcmVkaWNhdGUgImF2cjMyX25vbl9ybXdfbm9uaW1tZWRpYXRlX29wZXJhbmQiCisrICAoYW5kIChub3QgKG1hdGNoX29wZXJhbmQgMCAiYXZyMzJfcm13X21lbW9yeV9vcGVyYW5kIikpCisrICAgICAgIChtYXRjaF9vcGVyYW5kIDAgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIikpKQorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2NjL2NvbmZpZy9hdnIzMi9zaW1kLm1kCitAQCAtMCwwICsxLDE0NSBAQAorKzs7ICAgQVZSMzIgbWFjaGluZSBkZXNjcmlwdGlvbiBmaWxlIGZvciBTSU1EIGluc3RydWN0aW9ucy4KKys7OyAgIENvcHlyaWdodCAyMDAzLTIwMDYgQXRtZWwgQ29ycG9yYXRpb24uCisrOzsKKys7OyAgIFdyaXR0ZW4gYnkgUm9ubnkgUGVkZXJzZW4sIEF0bWVsIE5vcndheSwgPHJwZWRlcnNlbkBhdG1lbC5jb20+CisrOzsKKys7OyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKys7OworKzs7ICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKys7OyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrOzsgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKzs7ICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKys7OworKzs7ICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrOzsgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKzs7ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKzs7ICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKys7OworKzs7ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKys7OyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrOzsgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKworKzs7IC0qLSBNb2RlOiBTY2hlbWUgLSotCisrCisrCisrOzsgVmVjdG9yIG1vZGVzCisrKGRlZmluZV9tb2RlX21hY3JvIFZFQ00gW1YySEkgVjRRSV0pCisrKGRlZmluZV9tb2RlX2F0dHIgIHNpemUgWyhWMkhJICJoIikgKFY0UUkgImIiKV0pCisrCisrKGRlZmluZV9pbnNuICJhZGQ8bW9kZT4zIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VkVDTSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkocGx1czpWRUNNIChtYXRjaF9vcGVyYW5kOlZFQ00gMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQorKyAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpWRUNNIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKV0KKysgICJUQVJHRVRfU0lNRCIKKysgICJwYWRkLjxzaXplPlx0JTAsICUxLCAlMiIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImFsdSIpXSkKKysKKysKKysoZGVmaW5lX2luc24gInN1Yjxtb2RlPjMiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWRUNNIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisrCShtaW51czpWRUNNIChtYXRjaF9vcGVyYW5kOlZFQ00gMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQorKyAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6VkVDTSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSldCisrICAiVEFSR0VUX1NJTUQiCisrICAicHN1Yi48c2l6ZT5cdCUwLCAlMSwgJTIiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJhbHUiKV0pCisrCisrCisrKGRlZmluZV9pbnNuICJhYnM8bW9kZT4yIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VkVDTSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkoYWJzOlZFQ00gKG1hdGNoX29wZXJhbmQ6VkVDTSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSldCisrICAiVEFSR0VUX1NJTUQiCisrICAicGFicy5zPHNpemU+XHQlMCwgJTEiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJhbHUiKV0pCisrCisrKGRlZmluZV9pbnNuICJhc2hsPG1vZGU+MyIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlZFQ00gMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgICAgICI9ciIpCisrCShhc2hpZnQ6VkVDTSAobWF0Y2hfb3BlcmFuZDpWRUNNIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikKKysgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJpbW1lZGlhdGVfb3BlcmFuZCIgIkt1MDQiKSkpXQorKyAgIlRBUkdFVF9TSU1EIgorKyAgInBsc2wuPHNpemU+XHQlMCwgJTEsICUyIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJ0eXBlIiAiYWx1IildKQorKworKyhkZWZpbmVfaW5zbiAiYXNocjxtb2RlPjMiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWRUNNIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgICAgICAgICAiPXIiKQorKwkoYXNoaWZ0cnQ6VkVDTSAobWF0Y2hfb3BlcmFuZDpWRUNNIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikKKysgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgImltbWVkaWF0ZV9vcGVyYW5kIiAiS3UwNCIpKSldCisrICAiVEFSR0VUX1NJTUQiCisrICAicGFzci48c2l6ZT5cdCUwLCAlMSwgJTIiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJhbHUiKV0pCisrCisrKGRlZmluZV9pbnNuICJsc2hyPG1vZGU+MyIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlZFQ00gMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgICAgICI9ciIpCisrCShsc2hpZnRydDpWRUNNIChtYXRjaF9vcGVyYW5kOlZFQ00gMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAiaW1tZWRpYXRlX29wZXJhbmQiICJLdTA0IikpKV0KKysgICJUQVJHRVRfU0lNRCIKKysgICJwbHNyLjxzaXplPlx0JTAsICUxLCAlMiIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImFsdSIpXSkKKysKKysoZGVmaW5lX2luc24gInNtYXh2MmhpMyIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlYySEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKysJKHNtYXg6VjJISSAobWF0Y2hfb3BlcmFuZDpWMkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikKKysgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpWMkhJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKV0KKysKKysgICJUQVJHRVRfU0lNRCIKKysgICJwbWF4LnNoXHQlMCwgJTEsICUyIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJ0eXBlIiAiYWx1IildKQorKworKyhkZWZpbmVfaW5zbiAic21pbnYyaGkzIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJISSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKwkoc21pbjpWMkhJIChtYXRjaF9vcGVyYW5kOlYySEkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlYySEkgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpXQorKworKyAgIlRBUkdFVF9TSU1EIgorKyAgInBtaW4uc2hcdCUwLCAlMSwgJTIiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJhbHUiKV0pCisrCisrKGRlZmluZV9pbnNuICJ1bWF4djRxaTMiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWNFFJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisrCSh1bWF4OlY0UUkgKG1hdGNoX29wZXJhbmQ6VjRRSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCisrICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlY0UUkgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpXQorKworKyAgIlRBUkdFVF9TSU1EIgorKyAgInBtYXgudWJcdCUwLCAlMSwgJTIiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJhbHUiKV0pCisrCisrKGRlZmluZV9pbnNuICJ1bWludjRxaTMiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWNFFJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisrCSh1bWluOlY0UUkgKG1hdGNoX29wZXJhbmQ6VjRRSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCisrICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlY0UUkgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpXQorKworKyAgIlRBUkdFVF9TSU1EIgorKyAgInBtaW4udWJcdCUwLCAlMSwgJTIiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI0IikKKysgICAoc2V0X2F0dHIgInR5cGUiICJhbHUiKV0pCisrCisrCisrKGRlZmluZV9pbnNuICJhZGRzdWJ2MmhpIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJISSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorKyAgICAgICAgKHZlY19jb25jYXQ6VjJISQorKyAgICAgICAgIChwbHVzOkhJIChtYXRjaF9vcGVyYW5kOkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikKKysgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpISSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKQorKyAgICAgICAgIChtaW51czpISSAobWF0Y2hfZHVwIDEpIChtYXRjaF9kdXAgMikpKSldCisrICAiVEFSR0VUX1NJTUQiCisrICAicGFkZHN1Yi5oXHQlMCwgJTE6YiwgJTI6YiIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKQorKyAgIChzZXRfYXR0ciAidHlwZSIgImFsdSIpXSkKKysKKysoZGVmaW5lX2luc24gInN1YmFkZHYyaGkiCisrICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMkhJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisrICAgICAgICAodmVjX2NvbmNhdDpWMkhJCisrICAgICAgICAgKG1pbnVzOkhJIChtYXRjaF9vcGVyYW5kOkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikKKysgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpISSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKQorKyAgICAgICAgIChwbHVzOkhJIChtYXRjaF9kdXAgMSkgKG1hdGNoX2R1cCAyKSkpKV0KKysgICJUQVJHRVRfU0lNRCIKKysgICJwc3ViYWRkLmhcdCUwLCAlMTpiLCAlMjpiIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpCisrICAgKHNldF9hdHRyICJ0eXBlIiAiYWx1IildKQorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2NjL2NvbmZpZy9hdnIzMi9zeW5jLm1kCitAQCAtMCwwICsxLDI0NCBAQAorKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKys7OyBBdG9taWMgb3BlcmF0aW9ucworKzs7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysKKysKKysoZGVmaW5lX2luc24gInN5bmNfY29tcGFyZV9hbmRfc3dhcHNpIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj0mciwmciIpCisrCShtYXRjaF9vcGVyYW5kOlNJIDEgIm1lbW9yeV9vcGVyYW5kIiAiK1JLczE2LCtSS3MxNiIpKQorKyAgIChzZXQgKG1hdGNoX2R1cCAxKQorKwkodW5zcGVjX3ZvbGF0aWxlOlNJCisrCSAgWyhtYXRjaF9kdXAgMSkKKysJICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfaW1tZWRpYXRlX29wZXJhbmQiICJyLEtzMjEiKQorKwkgICAobWF0Y2hfb3BlcmFuZDpTSSAzICJyZWdpc3Rlcl9vcGVyYW5kIiAicixyIildCisrCSAgVlVOU1BFQ19TWU5DX0NNUFhDSEcpKSAgIF0KKysgICIiCisrICAiMDoKKysgICBzc3JmXHQ1CisrICAgbGQud1x0JTAsJTEKKysgICBjcC53XHQlMCwlMgorKyAgIGJybmVcdDBmCisrICAgc3Rjb25kXHQlMSwgJTMKKysgICBicm5lXHQwYgorKyAgIDA6CisrICAiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICIxNiwxOCIpCisrICAgKHNldF9hdHRyICJjYyIgImNsb2JiZXIiKV0KKysgICkKKysgCisrCisrKGRlZmluZV9jb2RlX21hY3JvIGF0b21pY19vcCBbcGx1cyBtaW51cyBhbmQgaW9yIHhvcl0pCisrKGRlZmluZV9jb2RlX2F0dHIgIGF0b21pY19hc21faW5zbiBbKHBsdXMgImFkZCIpIChtaW51cyAic3ViIikgKGFuZCAiYW5kIikgKGlvciAib3IiKSAoeG9yICJlb3IiKV0pCisrKGRlZmluZV9jb2RlX2F0dHIgIGF0b21pY19pbnNuIFsocGx1cyAiYWRkIikgKG1pbnVzICJzdWIiKSAoYW5kICJhbmQiKSAoaW9yICJpb3IiKSAoeG9yICJ4b3IiKV0pCisrCisrKGRlZmluZV9pbnNuICJzeW5jX2xvYWRzaSIKKysgIDsgTkIhIFB1dCBhbiBlYXJseSBjbG9iYmVyIG9uIHRoZSBkZXN0aW5hdGlvbiBvcGVyYW5kIHRvIAorKyAgOyBhdm9pZCBnY2MgdXNpbmcgdGhlIHNhbWUgcmVnaXN0ZXIgaW4gdGhlIHNvdXJjZSBhbmQgCisrICA7IGRlc3RpbmF0aW9uLiBUaGlzIGlzIGRvbmUgaW4gb3JkZXIgdG8gYXZvaWQgZ2NjIHRvIAorKyAgOyBjbG9iYmVyIHRoZSBzb3VyY2Ugb3BlcmFuZCBzaW5jZSB0aGVzZSBpbnN0cnVjdGlvbnMKKysgIDsgYXJlIGFjdHVhbGx5IGluc2lkZSBhICJsb29wIi4KKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9JnIiKQorKwkodW5zcGVjX3ZvbGF0aWxlOlNJCisrICAgICAgICAgWyhtYXRjaF9vcGVyYW5kOlNJIDEgImF2cjMyX2tzMTZfbWVtb3J5X29wZXJhbmQiICJSS3MxNiIpCisrICAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMiAiIiAiIikpXQorKyAgICAgICAgIFZVTlNQRUNfU1lOQ19TRVRfTE9DS19BTkRfTE9BRCkgKV0KKysgICIiCisrICAiJTI6CisrICAgc3NyZlx0NQorKyAgIGxkLndcdCUwLCUxIgorKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNiIpCisrICAgKHNldF9hdHRyICJjYyIgImNsb2JiZXIiKV0KKysgICkKKysgIAorKyhkZWZpbmVfaW5zbiAic3luY19zdG9yZV9pZl9sb2NrIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAiYXZyMzJfa3MxNl9tZW1vcnlfb3BlcmFuZCIgIj1SS3MxNiIpCisrICAgICAgICAodW5zcGVjX3ZvbGF0aWxlOlNJCisrICAgICAgICAgWyhtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikKKysgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAyICIiICIiKSldCisrICAgICAgICAgVlVOU1BFQ19TWU5DX1NUT1JFX0lGX0xPQ0spICldCisrICAiIgorKyAgInN0Y29uZFx0JTAsICUxCisrICAgYnJuZVx0JTIiCisrICBbKHNldF9hdHRyICJsZW5ndGgiICI2IikKKysgICAoc2V0X2F0dHIgImNjIiAiY2xvYmJlciIpXQorKyAgKQorKworKworKyhkZWZpbmVfZXhwYW5kICJzeW5jXzxhdG9taWNfaW5zbj5zaSIKKysgIFsoc2V0IChtYXRjaF9kdXAgMikKKysJKHVuc3BlY192b2xhdGlsZTpTSQorKyAgICAgICAgIFsobWF0Y2hfb3BlcmFuZDpTSSAwICJhdnIzMl9rczE2X21lbW9yeV9vcGVyYW5kIiAiIikKKysgICAgICAgICAgKG1hdGNoX2R1cCAzKV0KKysgICAgICAgICBWVU5TUEVDX1NZTkNfU0VUX0xPQ0tfQU5EX0xPQUQpKQorKyAgIChzZXQgKG1hdGNoX2R1cCAyKSAKKysgICAgICAgIChhdG9taWNfb3A6U0kgKG1hdGNoX2R1cCAyKQorKyAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9pbW1lZGlhdGVfb3BlcmFuZCIgIiIpKSkKKysgICAoc2V0IChtYXRjaF9kdXAgMCkKKysgICAgICAgICh1bnNwZWNfdm9sYXRpbGU6U0kKKysgICAgICAgICBbKG1hdGNoX2R1cCAyKQorKyAgICAgICAgICAobWF0Y2hfZHVwIDMpXQorKyAgICAgICAgIFZVTlNQRUNfU1lOQ19TVE9SRV9JRl9MT0NLKSApCisrICAgKHVzZSAobWF0Y2hfZHVwIDEpKQorKyAgICh1c2UgKG1hdGNoX2R1cCA0KSldCisrICAiIgorKyAgeworKyAgIHJ0eCAqbWVtX2V4cHIgPSAmb3BlcmFuZHNbMF07CisrICAgcnR4IHB0cl9yZWc7CisrICAgaWYgKCAhYXZyMzJfa3MxNl9tZW1vcnlfb3BlcmFuZCAoKm1lbV9leHByLCBHRVRfTU9ERSAoKm1lbV9leHByKSkgKQorKyAgICB7CisrICAgICAgcHRyX3JlZyA9IGZvcmNlX3JlZyAoUG1vZGUsIFhFWFAgKCptZW1fZXhwciwgMCkpOworKyAgICAgIFhFWFAgKCptZW1fZXhwciwgMCkgPSBwdHJfcmVnOworKyAgICB9IAorKyAgIGVsc2UgCisrICAgIHsKKysgICAgICBydHggYWRkcmVzcyA9IFhFWFAgKCptZW1fZXhwciwgMCk7CisrICAgICAgaWYgKCBSRUdfUCAoYWRkcmVzcykgKQorKyAgICAgICAgIHB0cl9yZWcgPSBhZGRyZXNzOworKyAgICAgIGVsc2UgaWYgKCBSRUdfUCAoWEVYUCAoYWRkcmVzcywgMCkpICkgCisrICAgICAgICAgcHRyX3JlZyA9IFhFWFAgKGFkZHJlc3MsIDApOworKyAgICAgIGVsc2UgCisrICAgICAgICAgcHRyX3JlZyA9IFhFWFAgKGFkZHJlc3MsIDEpOworKyAgICB9CisrCisrICAgb3BlcmFuZHNbMl0gPSBnZW5fcmVnX3J0eCAoU0ltb2RlKTsKKysgICBvcGVyYW5kc1szXSA9IGdlbl9ydHhfTEFCRUxfUkVGKFBtb2RlLCBnZW5fbGFiZWxfcnR4ICgpKTsKKysgICBvcGVyYW5kc1s0XSA9IHB0cl9yZWc7ICAgCisrCisrICB9CisrICApCisrCisrCisrCisrKGRlZmluZV9leHBhbmQgInN5bmNfb2xkXzxhdG9taWNfaW5zbj5zaSIKKysgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorKwkodW5zcGVjX3ZvbGF0aWxlOlNJCisrICAgICAgICAgWyhtYXRjaF9vcGVyYW5kOlNJIDEgImF2cjMyX2tzMTZfbWVtb3J5X29wZXJhbmQiICIiKQorKyAgICAgICAgICAobWF0Y2hfZHVwIDQpXQorKyAgICAgICAgIFZVTlNQRUNfU1lOQ19TRVRfTE9DS19BTkRfTE9BRCkpCisrICAgKHNldCAobWF0Y2hfZHVwIDMpIAorKyAgICAgICAgKGF0b21pY19vcDpTSSAobWF0Y2hfZHVwIDApCisrICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX2ltbWVkaWF0ZV9vcGVyYW5kIiAiIikpKQorKyAgIChzZXQgKG1hdGNoX2R1cCAxKQorKyAgICAgICAgKHVuc3BlY192b2xhdGlsZTpTSQorKyAgICAgICAgIFsobWF0Y2hfZHVwIDMpCisrICAgICAgICAgIChtYXRjaF9kdXAgNCldCisrICAgICAgICAgVlVOU1BFQ19TWU5DX1NUT1JFX0lGX0xPQ0spICkKKysgICAodXNlIChtYXRjaF9kdXAgMikpCisrICAgKHVzZSAobWF0Y2hfZHVwIDUpKV0KKysgICIiCisrICB7CisrICAgcnR4ICptZW1fZXhwciA9ICZvcGVyYW5kc1sxXTsKKysgICBydHggcHRyX3JlZzsKKysgICBpZiAoICFhdnIzMl9rczE2X21lbW9yeV9vcGVyYW5kICgqbWVtX2V4cHIsIEdFVF9NT0RFICgqbWVtX2V4cHIpKSApCisrICAgIHsKKysgICAgICBwdHJfcmVnID0gZm9yY2VfcmVnIChQbW9kZSwgWEVYUCAoKm1lbV9leHByLCAwKSk7CisrICAgICAgWEVYUCAoKm1lbV9leHByLCAwKSA9IHB0cl9yZWc7CisrICAgIH0gCisrICAgZWxzZSAKKysgICAgeworKyAgICAgIHJ0eCBhZGRyZXNzID0gWEVYUCAoKm1lbV9leHByLCAwKTsKKysgICAgICBpZiAoIFJFR19QIChhZGRyZXNzKSApCisrICAgICAgICAgcHRyX3JlZyA9IGFkZHJlc3M7CisrICAgICAgZWxzZSBpZiAoIFJFR19QIChYRVhQIChhZGRyZXNzLCAwKSkgKSAKKysgICAgICAgICBwdHJfcmVnID0gWEVYUCAoYWRkcmVzcywgMCk7CisrICAgICAgZWxzZSAKKysgICAgICAgICBwdHJfcmVnID0gWEVYUCAoYWRkcmVzcywgMSk7CisrICAgIH0KKysKKysgICBvcGVyYW5kc1szXSA9IGdlbl9yZWdfcnR4IChTSW1vZGUpOworKyAgIG9wZXJhbmRzWzRdID0gZ2VuX3J0eF9MQUJFTF9SRUYoUG1vZGUsIGdlbl9sYWJlbF9ydHggKCkpOworKyAgIG9wZXJhbmRzWzVdID0gcHRyX3JlZzsKKysgIH0KKysgICkKKysKKysoZGVmaW5lX2V4cGFuZCAic3luY19uZXdfPGF0b21pY19pbnNuPnNpIgorKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisrCSh1bnNwZWNfdm9sYXRpbGU6U0kKKysgICAgICAgICBbKG1hdGNoX29wZXJhbmQ6U0kgMSAiYXZyMzJfa3MxNl9tZW1vcnlfb3BlcmFuZCIgIiIpCisrICAgICAgICAgIChtYXRjaF9kdXAgMyldCisrICAgICAgICAgVlVOU1BFQ19TWU5DX1NFVF9MT0NLX0FORF9MT0FEKSkKKysgICAoc2V0IChtYXRjaF9kdXAgMCkgCisrICAgICAgICAoYXRvbWljX29wOlNJIChtYXRjaF9kdXAgMCkKKysgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfaW1tZWRpYXRlX29wZXJhbmQiICIiKSkpCisrICAgKHNldCAobWF0Y2hfZHVwIDEpCisrICAgICAgICAodW5zcGVjX3ZvbGF0aWxlOlNJCisrICAgICAgICAgWyhtYXRjaF9kdXAgMCkKKysgICAgICAgICAgKG1hdGNoX2R1cCAzKV0KKysgICAgICAgICBWVU5TUEVDX1NZTkNfU1RPUkVfSUZfTE9DSykgKQorKyAgICh1c2UgKG1hdGNoX2R1cCAyKSkKKysgICAodXNlIChtYXRjaF9kdXAgNCkpXQorKyAgIiIKKysgIHsKKysgICBydHggKm1lbV9leHByID0gJm9wZXJhbmRzWzFdOworKyAgIHJ0eCBwdHJfcmVnOworKyAgIGlmICggIWF2cjMyX2tzMTZfbWVtb3J5X29wZXJhbmQgKCptZW1fZXhwciwgR0VUX01PREUgKCptZW1fZXhwcikpICkKKysgICAgeworKyAgICAgIHB0cl9yZWcgPSBmb3JjZV9yZWcgKFBtb2RlLCBYRVhQICgqbWVtX2V4cHIsIDApKTsKKysgICAgICBYRVhQICgqbWVtX2V4cHIsIDApID0gcHRyX3JlZzsKKysgICAgfSAKKysgICBlbHNlIAorKyAgICB7CisrICAgICAgcnR4IGFkZHJlc3MgPSBYRVhQICgqbWVtX2V4cHIsIDApOworKyAgICAgIGlmICggUkVHX1AgKGFkZHJlc3MpICkKKysgICAgICAgICBwdHJfcmVnID0gYWRkcmVzczsKKysgICAgICBlbHNlIGlmICggUkVHX1AgKFhFWFAgKGFkZHJlc3MsIDApKSApIAorKyAgICAgICAgIHB0cl9yZWcgPSBYRVhQIChhZGRyZXNzLCAwKTsKKysgICAgICBlbHNlIAorKyAgICAgICAgIHB0cl9yZWcgPSBYRVhQIChhZGRyZXNzLCAxKTsKKysgICAgfQorKworKyAgIG9wZXJhbmRzWzNdID0gZ2VuX3J0eF9MQUJFTF9SRUYoUG1vZGUsIGdlbl9sYWJlbF9ydHggKCkpOworKyAgIG9wZXJhbmRzWzRdID0gcHRyX3JlZzsKKysgIH0KKysgICkKKysKKysKKys7KGRlZmluZV9pbnNuICJzeW5jXzxhdG9taWNfaW5zbj5zaSIKKys7ICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJtZW1vcnlfb3BlcmFuZCIgIitSS3MxNiIpCisrOwkodW5zcGVjX3ZvbGF0aWxlOlNJCisrOyAgICAgICAgIFsoYXRvbWljX29wOlNJIChtYXRjaF9kdXAgMCkKKys7ICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSldCisrOyAgICAgICAgIFZVTlNQRUNfU1lOQ19DTVBYQ0hHKSkKKys7ICAgKGNsb2JiZXIgKG1hdGNoX3NjcmF0Y2g6U0kgMiAiPSZyIikpXQorKzsgICIiCisrOyAgIjA6CisrOyAgIHNzcmZcdDUKKys7ICAgbGQud1x0JTIsJTAKKys7ICAgPGF0b21pY19hc21faW5zbj5cdCUyLCUxCisrOyAgIHN0Y29uZFx0JTAsICUyCisrOyAgIGJybmVcdDBiCisrOyAgIgorKzsgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjE0IikKKys7ICAgKHNldF9hdHRyICJjYyIgImNsb2JiZXIiKV0KKys7ICApCisrOworKzsoZGVmaW5lX2luc24gInN5bmNfbmV3XzxhdG9taWNfaW5zbj5zaSIKKys7ICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAxICJtZW1vcnlfb3BlcmFuZCIgIitSS3MxNiIpCisrOwkodW5zcGVjX3ZvbGF0aWxlOlNJCisrOyAgICAgICAgIFsoYXRvbWljX29wOlNJIChtYXRjaF9kdXAgMSkKKys7ICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSldCisrOyAgICAgICAgIFZVTlNQRUNfU1lOQ19DTVBYQ0hHKSkKKys7ICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPSZyIikKKys7CShhdG9taWNfb3A6U0kgKG1hdGNoX2R1cCAxKQorKzsgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX2R1cCAyKSkpXQorKzsgICIiCisrOyAgIjA6CisrOyAgIHNzcmZcdDUKKys7ICAgbGQud1x0JTAsJTEKKys7ICAgPGF0b21pY19hc21faW5zbj5cdCUwLCUyCisrOyAgIHN0Y29uZFx0JTEsICUwCisrOyAgIGJybmVcdDBiCisrOyAgIgorKzsgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjE0IikKKys7ICAgKHNldF9hdHRyICJjYyIgImNsb2JiZXIiKV0KKys7ICApCisrCisrKGRlZmluZV9pbnNuICJzeW5jX2xvY2tfdGVzdF9hbmRfc2V0c2kiCisrICBbIChzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj0mciIpCisrICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMSAibWVtb3J5X29wZXJhbmQiICIrUkt1MDAiKSkKKysgICAgKHNldCAobWF0Y2hfZHVwIDEpCisrICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkgXQorKyAgIiIKKysgICJ4Y2hnXHQlMCwgJXAxLCAlMiIKKysgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKV0KKysgICkKKy0tLSAvZGV2L251bGwKKysrKyBiL2djYy9jb25maWcvYXZyMzIvdC1hdnIzMgorQEAgLTAsMCArMSw3NyBAQAorKworK01EX0lOQ0xVREVTPSAJJChzcmNkaXIpL2NvbmZpZy9hdnIzMi9hdnIzMi5tZCBcCisrCQkkKHNyY2RpcikvY29uZmlnL2F2cjMyL3N5bmMubWQgXAorKwkJJChzcmNkaXIpL2NvbmZpZy9hdnIzMi9mcGNwLm1kIFwKKysJCSQoc3JjZGlyKS9jb25maWcvYXZyMzIvc2ltZC5tZCBcCisrICAgICAgICAkKHNyY2RpcikvY29uZmlnL2F2cjMyL3ByZWRpY2F0ZXMubWQKKysKKytzLWNvbmZpZyBzLWNvbmRpdGlvbnMgcy1mbGFncyBzLWNvZGVzIHMtY29uc3RhbnRzIHMtZW1pdCBzLXJlY29nIHMtcHJlZHMgXAorKwlzLW9waW5pdCBzLWV4dHJhY3Qgcy1wZWVwIHMtYXR0ciBzLWF0dHJ0YWIgcy1vdXRwdXQ6ICQoTURfSU5DTFVERVMpCisrCisrIyBXZSB3YW50IGZpbmUgZ3JhaW5lZCBsaWJyYXJpZXMsIHNvIHVzZSB0aGUgbmV3IGNvZGUKKysjIHRvIGJ1aWxkIHRoZSBmbG9hdGluZyBwb2ludCBlbXVsYXRpb24gbGlicmFyaWVzLgorK0ZQQklUID0gZnAtYml0LmMKKytEUEJJVCA9IGRwLWJpdC5jCisrCisrTElCMUFTTVNSQyA9IGF2cjMyL2xpYjFmdW5jcy5TCisrTElCMUFTTUZVTkNTID0gIF9hdnIzMl9mNjRfbXVsIF9hdnIzMl9mNjRfbXVsX2Zhc3QgX2F2cjMyX2Y2NF9hZGRzdWIgX2F2cjMyX2Y2NF9hZGRzdWJfZmFzdCAgX2F2cjMyX2Y2NF90b191MzIgXAorKyAgICAgICAgICAgICAgICBfYXZyMzJfZjY0X3RvX3MzMiBfYXZyMzJfZjY0X3RvX3U2NCBfYXZyMzJfZjY0X3RvX3M2NCBfYXZyMzJfdTMyX3RvX2Y2NCBcCisrICAgICAgICAgICAgICAgIF9hdnIzMl9zMzJfdG9fZjY0IF9hdnIzMl9mNjRfY21wX2VxIF9hdnIzMl9mNjRfY21wX2dlIF9hdnIzMl9mNjRfY21wX2x0IFwKKysgICAgICAgICAgICAgICAgX2F2cjMyX2YzMl9jbXBfZXEgX2F2cjMyX2YzMl9jbXBfZ2UgX2F2cjMyX2YzMl9jbXBfbHQgX2F2cjMyX2Y2NF9kaXYgX2F2cjMyX2Y2NF9kaXZfZmFzdCBcCisrICAgICAgICAgICAgICAgIF9hdnIzMl9mMzJfZGl2IF9hdnIzMl9mMzJfZGl2X2Zhc3QgX2F2cjMyX2YzMl9hZGRzdWIgX2F2cjMyX2YzMl9hZGRzdWJfZmFzdCBcCisrICAgICAgICAgICAgICAgIF9hdnIzMl9mMzJfbXVsIF9hdnIzMl9zMzJfdG9fZjMyIF9hdnIzMl91MzJfdG9fZjMyIF9hdnIzMl9mMzJfdG9fczMyIFwKKysgICAgICAgICAgICAgICAgX2F2cjMyX2YzMl90b191MzIgX2F2cjMyX2YzMl90b19mNjQgX2F2cjMyX2Y2NF90b19mMzIgX211bHNpMworKworKyNMSUIyRlVOQ1NfRVhUUkEgKz0gJChzcmNkaXIpL2NvbmZpZy9hdnIzMi9saWIyZnVuY3MuUworKworK01VTFRJTElCX09QVElPTlMgICAgID0gbWFyY2g9YXAvbWFyY2g9dWNyMS9tYXJjaD11Y3IyL21hcmNoPXVjcjJub211bAorK01VTFRJTElCX0RJUk5BTUVTICAgID0gYXAgdWNyMSB1Y3IyIHVjcjJub211bAorK01VTFRJTElCX0VYQ0VQVElPTlMgID0KKytNVUxUSUxJQl9NQVRDSEVTICAgICArPSBtYXJjaD9hcD1tcGFydD9hcDcwMDAKKytNVUxUSUxJQl9NQVRDSEVTICAgICArPSBtYXJjaD9hcD1tcGFydD9hcDcwMDEKKytNVUxUSUxJQl9NQVRDSEVTICAgICArPSBtYXJjaD9hcD1tcGFydD9hcDcwMDIKKytNVUxUSUxJQl9NQVRDSEVTICAgICArPSBtYXJjaD9hcD1tcGFydD9hcDcyMDAKKytNVUxUSUxJQl9NQVRDSEVTICAgICArPSBtYXJjaD91Y3IxPW1hcmNoP3VjCisrTVVMVElMSUJfTUFUQ0hFUyAgICAgKz0gbWFyY2g/dWNyMT1tcGFydD91YzNhMDUxMmVzCisrTVVMVElMSUJfTUFUQ0hFUyAgICAgKz0gbWFyY2g/dWNyMj1tcGFydD91YzNhMDEyOAorK01VTFRJTElCX01BVENIRVMgICAgICs9IG1hcmNoP3VjcjI9bXBhcnQ/dWMzYTAyNTYKKytNVUxUSUxJQl9NQVRDSEVTICAgICArPSBtYXJjaD91Y3IyPW1wYXJ0P3VjM2EwNTEyCisrTVVMVElMSUJfTUFUQ0hFUyAgICAgKz0gbWFyY2g/dWNyMj1tcGFydD91YzNhMTEyOAorK01VTFRJTElCX01BVENIRVMgICAgICs9IG1hcmNoP3VjcjI9bXBhcnQ/dWMzYTEyNTYKKytNVUxUSUxJQl9NQVRDSEVTICAgICArPSBtYXJjaD91Y3IxPW1wYXJ0P3VjM2ExNTEyZXMKKytNVUxUSUxJQl9NQVRDSEVTICAgICArPSBtYXJjaD91Y3IyPW1wYXJ0P3VjM2ExNTEyCisrTVVMVElMSUJfTUFUQ0hFUyAgICAgKz0gbWFyY2g/dWNyMm5vbXVsPW1wYXJ0P3VjM2EzcmV2ZAorK01VTFRJTElCX01BVENIRVMgICAgICs9IG1hcmNoP3VjcjI9bXBhcnQ/dWMzYTM2NAorK01VTFRJTElCX01BVENIRVMgICAgICs9IG1hcmNoP3VjcjI9bXBhcnQ/dWMzYTM2NHMKKytNVUxUSUxJQl9NQVRDSEVTICAgICArPSBtYXJjaD91Y3IyPW1wYXJ0P3VjM2EzMTI4CisrTVVMVElMSUJfTUFUQ0hFUyAgICAgKz0gbWFyY2g/dWNyMj1tcGFydD91YzNhMzEyOHMKKytNVUxUSUxJQl9NQVRDSEVTICAgICArPSBtYXJjaD91Y3IyPW1wYXJ0P3VjM2EzMjU2CisrTVVMVElMSUJfTUFUQ0hFUyAgICAgKz0gbWFyY2g/dWNyMj1tcGFydD91YzNhMzI1NnMKKytNVUxUSUxJQl9NQVRDSEVTICAgICArPSBtYXJjaD91Y3IxPW1wYXJ0P3VjM2IwNjQKKytNVUxUSUxJQl9NQVRDSEVTICAgICArPSBtYXJjaD91Y3IxPW1wYXJ0P3VjM2IwMTI4CisrTVVMVElMSUJfTUFUQ0hFUyAgICAgKz0gbWFyY2g/dWNyMT1tcGFydD91YzNiMDI1NmVzCisrTVVMVElMSUJfTUFUQ0hFUyAgICAgKz0gbWFyY2g/dWNyMT1tcGFydD91YzNiMDI1NgorK01VTFRJTElCX01BVENIRVMgICAgICs9IG1hcmNoP3VjcjE9bXBhcnQ/dWMzYjE2NAorK01VTFRJTElCX01BVENIRVMgICAgICs9IG1hcmNoP3VjcjE9bXBhcnQ/dWMzYjExMjgKKytNVUxUSUxJQl9NQVRDSEVTICAgICArPSBtYXJjaD91Y3IxPW1wYXJ0P3VjM2IxMjU2ZXMKKytNVUxUSUxJQl9NQVRDSEVTICAgICArPSBtYXJjaD91Y3IxPW1wYXJ0P3VjM2IxMjU2CisrCisrCisrRVhUUkFfTVVMVElMSUJfUEFSVFMgPSBjcnRiZWdpbi5vIGNydGJlZ2luUy5vIGNydGVuZC5vIGNydGVuZFMubyBjcnRpLm8gY3J0bi5vCisrCisrQ1JUU1RVRkZfVF9DRkxBR1MgPSAtbXJlbGF4CisrQ1JUU1RVRkZfVF9DRkxBR1NfUyA9IC1tcmVsYXggLWZQSUMKKytUQVJHRVRfTElCR0NDMl9DRkxBR1MgKz0gLW1yZWxheAorKworK0xJQkdDQyA9IHN0bXAtbXVsdGlsaWIKKytJTlNUQUxMX0xJQkdDQyA9IGluc3RhbGwtbXVsdGlsaWIKKysKKytmcC1iaXQuYzogJChzcmNkaXIpL2NvbmZpZy9mcC1iaXQuYworKwllY2hvICcjZGVmaW5lIEZMT0FUJyA+IGZwLWJpdC5jCisrCWNhdCAkKHNyY2RpcikvY29uZmlnL2ZwLWJpdC5jID4+IGZwLWJpdC5jCisrCisrZHAtYml0LmM6ICQoc3JjZGlyKS9jb25maWcvZnAtYml0LmMKKysJY2F0ICQoc3JjZGlyKS9jb25maWcvZnAtYml0LmMgPiBkcC1iaXQuYworKworKworKworLS0tIC9kZXYvbnVsbAorKysrIGIvZ2NjL2NvbmZpZy9hdnIzMi90LWVsZgorQEAgLTAsMCArMSwxNiBAQAorKworKyMgQXNzZW1ibGUgc3RhcnR1cCBmaWxlcy4KKyskKFQpY3J0aS5vOiAkKHNyY2RpcikvY29uZmlnL2F2cjMyL2NydGkuYXNtICQoR0NDX1BBU1NFUykKKysJJChHQ0NfRk9SX1RBUkdFVCkgJChDUlRTVFVGRl9DRkxBR1MpICQoQ1JUU1RVRkZfVF9DRkxBR1MpICQoSU5DTFVERVMpIFwKKysJLWMgLW8gJChUKWNydGkubyAteCBhc3NlbWJsZXItd2l0aC1jcHAgJChzcmNkaXIpL2NvbmZpZy9hdnIzMi9jcnRpLmFzbQorKworKyQoVCljcnRuLm86ICQoc3JjZGlyKS9jb25maWcvYXZyMzIvY3J0bi5hc20gJChHQ0NfUEFTU0VTKQorKwkkKEdDQ19GT1JfVEFSR0VUKSAkKENSVFNUVUZGX0NGTEFHUykgJChDUlRTVFVGRl9UX0NGTEFHUykgJChJTkNMVURFUykgXAorKwktYyAtbyAkKFQpY3J0bi5vIC14IGFzc2VtYmxlci13aXRoLWNwcCAkKHNyY2RpcikvY29uZmlnL2F2cjMyL2NydG4uYXNtCisrCisrCisrIyBCdWlsZCB0aGUgbGlicmFyaWVzIGZvciBib3RoIGhhcmQgYW5kIHNvZnQgZmxvYXRpbmcgcG9pbnQKKytFWFRSQV9NVUxUSUxJQl9QQVJUUyA9IGNydGJlZ2luLm8gY3J0YmVnaW5TLm8gY3J0ZW5kLm8gY3J0ZW5kUy5vIGNydGkubyBjcnRuLm8KKysKKytMSUJHQ0MgPSBzdG1wLW11bHRpbGliCisrSU5TVEFMTF9MSUJHQ0MgPSBpbnN0YWxsLW11bHRpbGliCistLS0gL2Rldi9udWxsCisrKysgYi9nY2MvY29uZmlnL2F2cjMyL3VjbGludXgtZWxmLmgKK0BAIC0wLDAgKzEsMjAgQEAKKysKKysvKiBSdW4tdGltZSBUYXJnZXQgU3BlY2lmaWNhdGlvbi4gICovCisrI3VuZGVmICBUQVJHRVRfVkVSU0lPTgorKyNkZWZpbmUgVEFSR0VUX1ZFUlNJT04gIGZwdXRzICgiIChBVlIzMiB1Q2xpbnV4IHdpdGggRUxGKSIsIHN0ZGVycikKKysKKysvKiBXZSBkb24ndCB3YW50IGEgLmpjciBzZWN0aW9uIG9uIHVDbGludXguIEFzIGlmIHRoaXMgbWFrZXMgYSBkaWZmZXJlbmNlLi4uICovCisrI2RlZmluZSBUQVJHRVRfVVNFX0pDUl9TRUNUSU9OIDAKKysKKysvKiBIZXJlIHdlIGdvLiBEcm9wIHRoZSBjcnRiZWdpbi9jcnRlbmQgc3R1ZmYgY29tcGxldGVseS4gKi8KKysjdW5kZWYgU1RBUlRGSUxFX1NQRUMKKysjZGVmaW5lIFNUQVJURklMRV9TUEVDCQkJCQkJCVwKKysgICIleyFzaGFyZWQ6ICV7cGc6Z2NydDEubyVzfSAleyFwZzole3A6Z2NydDEubyVzfSIJCQlcCisrICAiICV7IXA6JXtwcm9maWxlOmdjcnQxLm8lc30iCQkJCQkJXAorKyAgIiAleyFwcm9maWxlOmNydDEubyVzfX19fSBjcnRpLm8lcyIKKysKKysjdW5kZWYgRU5ERklMRV9TUEVDCisrI2RlZmluZSBFTkRGSUxFX1NQRUMgImNydG4ubyVzIgorKworKyN1bmRlZiBUQVJHRVRfREVGQVVMVAorKyNkZWZpbmUgVEFSR0VUX0RFRkFVTFQgKEFWUjMyX0ZMQUdfTk9fSU5JVF9HT1QpCistLS0gYS9nY2MvY29uZmlnL2hvc3QtbGludXguYworKysrIGIvZ2NjL2NvbmZpZy9ob3N0LWxpbnV4LmMKK0BAIC0yNSw2ICsyNSw5IEBACisgI2luY2x1ZGUgImhvc3Rob29rcy5oIgorICNpbmNsdWRlICJob3N0aG9va3MtZGVmLmgiCisgCisrI2lmbmRlZiBTU0laRV9NQVgKKysjZGVmaW5lIFNTSVpFX01BWCBMT05HX01BWAorKyNlbmRpZgorIAorIC8qIExpbnV4IGhhcyBhIGZlYXR1cmUgY2FsbGVkIGV4ZWMtc2hpZWxkLXJhbmRvbWl6ZSB0aGF0IHBlcnR1cmJzIHRoZQorICAgIGFkZHJlc3Mgb2Ygbm9uLWZpeGVkIG1hcHBlZCBzZWdtZW50cyBieSBhIChyZWxhdGl2ZWx5KSBzbWFsbCBhbW91bnQuCistLS0gYS9nY2MvY29uZmlnLmdjYworKysrIGIvZ2NjL2NvbmZpZy5nY2MKK0BAIC03ODEsNiArNzgxLDI0IEBAIGF2ci0qLSopCisgCXRtX2ZpbGU9ImF2ci9hdnIuaCBkYnhlbGYuaCIKKyAJdXNlX2ZpeHByb3RvPXllcworIAk7OworK2F2cjMyKi0qLWxpbnV4KikKKysgICAgdG1fZmlsZT0iZGJ4ZWxmLmggZWxmb3MuaCBsaW51eC5oIGF2cjMyL2xpbnV4LWVsZi5oIGF2cjMyL2F2cjMyLmggIgorKyAgICB0bWFrZV9maWxlPSJ0LWxpbnV4IGF2cjMyL3QtYXZyMzIgYXZyMzIvdC1lbGYiCisrCWV4dHJhX3BhcnRzPSJjcnRiZWdpbi5vIGNydGJlZ2luUy5vIGNydGVuZC5vIGNydGVuZFMubyIKKysJZXh0cmFfbW9kZXM9YXZyMzIvYXZyMzItbW9kZXMuZGVmCisrCWdudV9sZD15ZXMKKysJOzsKKythdnIzMiotKi11Y2xpbnV4KikKKysJdG1fZmlsZT0iZGJ4ZWxmLmggZWxmb3MuaCBsaW51eC5oIGF2cjMyL2xpbnV4LWVsZi5oIGF2cjMyL3VjbGludXgtZWxmLmggYXZyMzIvYXZyMzIuaCIKKysJdG1ha2VfZmlsZT0idC1saW51eCBhdnIzMi90LWF2cjMyIGF2cjMyL3QtZWxmIgorKwlleHRyYV9tb2Rlcz1hdnIzMi9hdnIzMi1tb2Rlcy5kZWYKKysJZ251X2xkPXllcworKwk7OworK2F2cjMyLSotKikKKysgICAgdG1fZmlsZT0iZGJ4ZWxmLmggZWxmb3MuaCBhdnIzMi9hdnIzMi5oIGF2cjMyL2F2cjMyLWVsZi5oIgorKyAgICB0bWFrZV9maWxlPSJhdnIzMi90LWF2cjMyIGF2cjMyL3QtZWxmIgorKwlleHRyYV9tb2Rlcz1hdnIzMi9hdnIzMi1tb2Rlcy5kZWYKKysJOzsKKyBiZmluKi1lbGYqKQorIAl0bV9maWxlPSIke3RtX2ZpbGV9IGRieGVsZi5oIGVsZm9zLmggYmZpbi9lbGYuaCIKKyAgICAgICAgIHRtYWtlX2ZpbGU9YmZpbi90LWJmaW4tZWxmCitAQCAtMTY4MSw2ICsxNjk5LDkgQEAgcGRwMTEtKi1ic2QpCisgcGRwMTEtKi0qKQorIAl1c2VfZml4cHJvdG89eWVzCisgCTs7CisrYXZyLSotKikKKysJdXNlX2ZpeHByb3RvPXllcworKwk7OworICMgcG9ydCBub3QgeWV0IGNvbnRyaWJ1dGVkCisgI3Bvd2VycGMtKi1vcGVuYnNkKikKKyAjCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gcnM2MDAwL3QtZnBydWxlcyByczYwMDAvdC1mcHJ1bGVzLWZwYml0ICIKK0BAIC0yNzE3LDYgKzI3MzgsMzIgQEAgY2FzZSAiJHt0YXJnZXR9IiBpbgorIAkJZmkKKyAJCTs7CisgCisrCWF2cjMyKi0qLSopCisrCQlzdXBwb3J0ZWRfZGVmYXVsdHM9InBhcnQgYXJjaCIKKysKKysJCWNhc2UgIiR3aXRoX3BhcnQiIGluCisrCQkiIiBcCisrCQl8ICJhcDcwMDAiIHwgImFwNzAxMCIgfCAiYXA3MDIwIiB8ICJ1YzNhMDI1NiIgfCAidWMzYTA1MTIiIHwgInVjM2ExMTI4IiB8ICJ1YzNhMTI1NiIgfCAidWMzYTE1MTIiICkKKysJCQkjIE9LCisrCQkJOzsKKysJCSopCisrCQkJZWNobyAiVW5rbm93biBwYXJ0IHVzZWQgaW4gLS13aXRoLXBhcnQ9JHdpdGhfcGFydCIgMT4mMgorKwkJCWV4aXQgMQorKwkJCTs7CisrCQllc2FjCisrCisrCQljYXNlICIkd2l0aF9hcmNoIiBpbgorKwkJIiIgXAorKwkJfCAiYXAiIHwgInVjIikKKysJCQkjIE9LCisrCQkJOzsKKysJCSopCisrCQkJZWNobyAiVW5rbm93biBhcmNoIHVzZWQgaW4gLS13aXRoLWFyY2g9JHdpdGhfYXJjaCIgMT4mMgorKwkJCWV4aXQgMQorKwkJCTs7CisrCQllc2FjCisrICAgICAgICAgICAgICAgIDs7CisrCisgCWZyKi0qLSpsaW51eCopCisgCQlzdXBwb3J0ZWRfZGVmYXVsdHM9Y3B1CisgCQljYXNlICIkd2l0aF9jcHUiIGluCistLS0gYS9nY2MvZG9jL2V4dGVuZC50ZXhpCisrKysgYi9nY2MvZG9jL2V4dGVuZC50ZXhpCitAQCAtMTk4MSw3ICsxOTgxLDcgQEAgdGhpcyBhdHRyaWJ1dGUgdG8gd29yayBjb3JyZWN0bHkuCisgCisgQGl0ZW0gaW50ZXJydXB0CisgQGNpbmRleCBpbnRlcnJ1cHQgaGFuZGxlciBmdW5jdGlvbnMKKy1Vc2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIEFSTSwgQVZSLCBDNHgsIENSWCwgTTMyQywgTTMyUi9ELCBNUzEsIGFuZCBYc3Rvcm15MTYKKytVc2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIEFSTSwgQVZSLCBBVlIzMiwgQzR4LCBDUlgsIE0zMkMsIE0zMlIvRCwgTVMxLCBhbmQgWHN0b3JteTE2CisgcG9ydHMgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIGlzIGFuIGludGVycnVwdCBoYW5kbGVyLgorIFRoZSBjb21waWxlciB3aWxsIGdlbmVyYXRlIGZ1bmN0aW9uIGVudHJ5IGFuZCBleGl0IHNlcXVlbmNlcyBzdWl0YWJsZQorIGZvciB1c2UgaW4gYW4gaW50ZXJydXB0IGhhbmRsZXIgd2hlbiB0aGlzIGF0dHJpYnV0ZSBpcyBwcmVzZW50LgorQEAgLTIwMDAsNiArMjAwMCwxNSBAQCB2b2lkIGYgKCkgX19hdHRyaWJ1dGVfXyAoKGludGVycnVwdCAoIklSCisgCisgUGVybWlzc2libGUgdmFsdWVzIGZvciB0aGlzIHBhcmFtZXRlciBhcmU6IElSUSwgRklRLCBTV0ksIEFCT1JUIGFuZCBVTkRFRkAuCisgCisrTm90ZSwgZm9yIHRoZSBBVlIzMiwgeW91IGNhbiBzcGVjaWZ5IHdoaWNoIGJhbmtpbmcgc2NoZW1lIGlzIHVzZWQgZm9yCisrdGhlIGludGVycnVwdCBtb2RlIHRoaXMgaW50ZXJydXB0IGhhbmRsZXIgaXMgdXNlZCBpbiBsaWtlIHRoaXM6CisrCisrQHNtYWxsZXhhbXBsZQorK3ZvaWQgZiAoKSBfX2F0dHJpYnV0ZV9fICgoaW50ZXJydXB0ICgiRlVMTCIpKSk7CisrQGVuZCBzbWFsbGV4YW1wbGUKKysKKytQZXJtaXNzaWJsZSB2YWx1ZXMgZm9yIHRoaXMgcGFyYW1ldGVyIGFyZTogRlVMTCwgSEFMRiwgTk9ORSBhbmQgVU5ERUYuCisrCisgQGl0ZW0gaW50ZXJydXB0X2hhbmRsZXIKKyBAY2luZGV4IGludGVycnVwdCBoYW5kbGVyIGZ1bmN0aW9ucyBvbiB0aGUgQmxhY2tmaW4sIG02OGssIEg4LzMwMCBhbmQgU0ggcHJvY2Vzc29ycworIFVzZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgQmxhY2tmaW4sIG02OGssIEg4LzMwMCwgSDgvMzAwSCwgSDhTLCBhbmQgU0ggdG8KK0BAIC0zNDYwLDYgKzM0NjksMjMgQEAgcGxhY2VkIGluIGVpdGhlciB0aGUgQGNvZGV7LmJzc19iZWxvdzEwMAorIAorIEBlbmQgdGFibGUKKyAKKytAc3Vic2VjdGlvbiBBVlIzMiBWYXJpYWJsZSBBdHRyaWJ1dGVzCisrCisrT25lIGF0dHJpYnV0ZSBpcyBjdXJyZW50bHkgZGVmaW5lZCBmb3IgQVZSMzIgY29uZmlndXJhdGlvbnM6CisrQGNvZGV7cm13X2FkZHJlc3NhYmxlfQorKworK0B0YWJsZSBAY29kZQorK0BpdGVtIHJtd19hZGRyZXNzYWJsZQorK0BjaW5kZXggQGNvZGV7cm13X2FkZHJlc3NhYmxlfSBhdHRyaWJ1dGUKKysKKytUaGlzIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBzaWduYWwgdGhhdCBhIHZhcmlhYmxlIGNhbiBiZSBhY2Nlc3NlZCAKKyt3aXRoIHRoZSBhZGRyZXNzaW5nIG1vZGUgb2YgdGhlIEFWUjMyIEF0b21pYyBSZWFkLU1vZGlmeS1Xcml0ZSBtZW1vcnkKKytpbnN0cnVjdGlvbnMgYW5kIGhlbmNlIG1ha2UgaXQgcG9zc2libGUgZm9yIGdjYyB0byBnZW5lcmF0ZSB0aGVzZSAKKytpbnN0cnVjdGlvbnMgd2l0aG91dCB1c2luZyBidWlsdC1pbiBmdW5jdGlvbnMgb3IgaW5saW5lIGFzc2VtYmx5IHN0YXRlbWVudHMuIAorK1ZhcmlhYmxlcyB1c2VkIHdpdGhpbiB0aGUgQVZSMzIgQXRvbWljIFJlYWQtTW9kaWZ5LVdyaXRlIGJ1aWx0LWluCisrZnVuY3Rpb25zIHdpbGwgYXV0b21hdGljYWxseSBnZXQgdGhlIEBjb2Rle3Jtd19hZGRyZXNzYWJsZX0gYXR0cmlidXRlLgorK0BlbmQgdGFibGUKKysKKyBAbm9kZSBUeXBlIEF0dHJpYnV0ZXMKKyBAc2VjdGlvbiBTcGVjaWZ5aW5nIEF0dHJpYnV0ZXMgb2YgVHlwZXMKKyBAY2luZGV4IGF0dHJpYnV0ZSBvZiB0eXBlcworQEAgLTYxNjcsNiArNjE5Myw3IEBAIGluc3RydWN0aW9ucywgYnV0IGFsbG93IHRoZSBjb21waWxlciB0byAKKyBAbWVudQorICogQWxwaGEgQnVpbHQtaW4gRnVuY3Rpb25zOjoKKyAqIEFSTSBCdWlsdC1pbiBGdW5jdGlvbnM6OgorKyogQVZSMzIgQnVpbHQtaW4gRnVuY3Rpb25zOjoKKyAqIEJsYWNrZmluIEJ1aWx0LWluIEZ1bmN0aW9uczo6CisgKiBGUi1WIEJ1aWx0LWluIEZ1bmN0aW9uczo6CisgKiBYODYgQnVpbHQtaW4gRnVuY3Rpb25zOjoKK0BAIC02NDA1LDYgKzY0MzIsNzYgQEAgbG9uZyBsb25nIF9fYnVpbHRpbl9hcm1fd3hvciAobG9uZyBsb25nLAorIGxvbmcgbG9uZyBfX2J1aWx0aW5fYXJtX3d6ZXJvICgpCisgQGVuZCBzbWFsbGV4YW1wbGUKKyAKKytAbm9kZSBBVlIzMiBCdWlsdC1pbiBGdW5jdGlvbnMKKytAc3Vic2VjdGlvbiBBVlIzMiBCdWlsdC1pbiBGdW5jdGlvbnMKKysKKysKKysKKytCdWlsdC1pbiBmdW5jdGlvbnMgZm9yIGF0b21pYyBtZW1vcnkgKFJNVykgaW5zdHJ1Y3Rpb25zLiBOb3RlIHRoYXQgdGhlc2UKKytidWlsdC1pbnMgd2lsbCBmYWlsIGZvciB0YXJnZXRzIHdoZXJlIHRoZSBSTVcgaW5zdHJ1Y3Rpb25zIGFyZSBub3QKKytpbXBsZW1lbnRlZC4gQWxzbyBub3RlIHRoYXQgdGhlc2UgaW5zdHJ1Y3Rpb25zIG9ubHkgdGhhdCBhIEtzMTUgPDwgMgorK21lbW9yeSBhZGRyZXNzIGFuZCB3aWxsIHRoZXJlZm9yIG5vdCB3b3JrIHdpdGggYW55IHJ1bnRpbWUgY29tcHV0ZWQgCisrbWVtb3J5IGFkZHJlc3Nlcy4gVGhlIHVzZXIgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoYXQgYW55CisrcG9pbnRlcnMgdXNlZCB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zIHBvaW50cyB0byBhIHZhbGlkIG1lbW9yeSBhZGRyZXNzLgorKyAKKytAc21hbGxleGFtcGxlCisrdm9pZCBfX2J1aWx0aW5fbWVtcyhpbnQgKi8qcHRyKi8sIGludCAvKmJpdCovKQorK3ZvaWQgX19idWlsdGluX21lbWMoaW50ICovKnB0ciovLCBpbnQgLypiaXQqLykKKyt2b2lkIF9fYnVpbHRpbl9tZW10KGludCAqLypwdHIqLywgaW50IC8qYml0Ki8pCisrQGVuZCBzbWFsbGV4YW1wbGUKKysKKytCdWlsdC1pbiBmdW5jdGlvbnMgZm9yIERTUCBpbnN0cnVjdGlvbnMuIE5vdGUgdGhhdCB0aGVzZSBidWlsdC1pbnMgd2lsbAorK2ZhaWwgZm9yIHRhcmdldHMgd2hlcmUgdGhlIERTUCBpbnN0cnVjdGlvbnMgYXJlIG5vdCBpbXBsZW1lbnRlZC4KKysKKytAc21hbGxleGFtcGxlCisraW50IF9fYnVpbHRpbl9zYXRzIChpbnQgLypSZCovLGludCAvKnNhKi8sIGludCAvKmJuKi8pCisraW50IF9fYnVpbHRpbl9zYXR1IChpbnQgLypSZCovLGludCAvKnNhKi8sIGludCAvKmJuKi8pCisraW50IF9fYnVpbHRpbl9zYXRybmRzIChpbnQgLypSZCovLGludCAvKnNhKi8sIGludCAvKmJuKi8pCisraW50IF9fYnVpbHRpbl9zYXRybmR1IChpbnQgLypSZCovLGludCAvKnNhKi8sIGludCAvKmJuKi8pCisrc2hvcnQgX19idWlsdGluX211bHNhdGhoX2ggKHNob3J0LCBzaG9ydCkKKytpbnQgX19idWlsdGluX211bHNhdGhoX3cgKHNob3J0LCBzaG9ydCkKKytzaG9ydCBfX2J1aWx0aW5fbXVsc2F0cm5kaGhfaCAoc2hvcnQsIHNob3J0KQorK2ludCBfX2J1aWx0aW5fbXVsc2F0cm5kd2hfdyAoaW50LCBzaG9ydCkKKytpbnQgX19idWlsdGluX211bHNhdHdoX3cgKGludCwgc2hvcnQpCisraW50IF9fYnVpbHRpbl9tYWNzYXRoaF93IChpbnQsIHNob3J0LCBzaG9ydCkKKytzaG9ydCBfX2J1aWx0aW5fc2F0YWRkX2ggKHNob3J0LCBzaG9ydCkKKytzaG9ydCBfX2J1aWx0aW5fc2F0c3ViX2ggKHNob3J0LCBzaG9ydCkKKytpbnQgX19idWlsdGluX3NhdGFkZF93IChpbnQsIGludCkKKytpbnQgX19idWlsdGluX3NhdHN1Yl93IChpbnQsIGludCkKKytsb25nIGxvbmcgX19idWlsdGluX211bHdoX2QoaW50LCBzaG9ydCkKKytsb25nIGxvbmcgX19idWlsdGluX211bG53aF9kKGludCwgc2hvcnQpCisrbG9uZyBsb25nIF9fYnVpbHRpbl9tYWN3aF9kKGxvbmcgbG9uZywgaW50LCBzaG9ydCkKKytsb25nIGxvbmcgX19idWlsdGluX21hY2hoX2QobG9uZyBsb25nLCBzaG9ydCwgc2hvcnQpCisrQGVuZCBzbWFsbGV4YW1wbGUKKysKKytPdGhlciBidWlsdC1pbiBmdW5jdGlvbnMgZm9yIGluc3RydWN0aW9ucyB0aGF0IGNhbm5vdCBlYXNpbHkgYmUKKytnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyLiAKKysKKytAc21hbGxleGFtcGxlCisrdm9pZCBfX2J1aWx0aW5fc3NyZihpbnQpOworK3ZvaWQgX19idWlsdGluX2NzcmYoaW50KTsKKyt2b2lkIF9fYnVpbHRpbl9tdXNmcihpbnQpOworK2ludCBfX2J1aWx0aW5fbXVzdHIodm9pZCk7CisraW50IF9fYnVpbHRpbl9tZnNyKGludCAvKlN0YXR1cyBSZWdpc3RlciBBZGRyZXNzKi8pCisrdm9pZCBfX2J1aWx0aW5fbXRzcihpbnQgLypTdGF0dXMgUmVnaXN0ZXIgQWRkcmVzcyovLCBpbnQgLypWYWx1ZSovKQorK2ludCBfX2J1aWx0aW5fbWZkcihpbnQgLypEZWJ1ZyBSZWdpc3RlciBBZGRyZXNzKi8pCisrdm9pZCBfX2J1aWx0aW5fbXRkcihpbnQgLypEZWJ1ZyBSZWdpc3RlciBBZGRyZXNzKi8sIGludCAvKlZhbHVlKi8pCisrdm9pZCBfX2J1aWx0aW5fY2FjaGUodm9pZCAqIC8qQWRkcmVzcyovLCBpbnQgLypDYWNoZSBPcGVyYXRpb24qLykKKyt2b2lkIF9fYnVpbHRpbl9zeW5jKGludCAvKlN5bmMgT3BlcmF0aW9uKi8pCisrdm9pZCBfX2J1aWx0aW5fdGxicih2b2lkKQorK3ZvaWQgX19idWlsdGluX3RsYnModm9pZCkKKyt2b2lkIF9fYnVpbHRpbl90bGJ3KHZvaWQpCisrdm9pZCBfX2J1aWx0aW5fYnJlYWtwb2ludCh2b2lkKQorK2ludCBfX2J1aWx0aW5feGNoZyh2b2lkICogLypBZGRyZXNzKi8sIGludCAvKlZhbHVlKi8gKQorK3Nob3J0IF9fYnVpbHRpbl9ic3dhcF8xNihzaG9ydCkKKytpbnQgX19idWlsdGluX2Jzd2FwXzMyKGludCkKKyt2b2lkIF9fYnVpbHRpbl9jb3AoaW50LypjcG5yKi8sIGludC8qY3JkKi8sIGludC8qY3J4Ki8sIGludC8qY3J5Ki8sIGludC8qb3AqLykKKytpbnQgX19idWlsdGluX212Y3JfdyhpbnQvKmNwbnIqLywgaW50LypjcnMqLykKKyt2b2lkIF9fYnVpbHRpbl9tdnJjX3coaW50LypjcG5yKi8sIGludC8qY3JkKi8sIGludC8qdmFsdWUqLykKKytsb25nIGxvbmcgX19idWlsdGluX212Y3JfZChpbnQvKmNwbnIqLywgaW50LypjcnMqLykKKyt2b2lkIF9fYnVpbHRpbl9tdnJjX2QoaW50LypjcG5yKi8sIGludC8qY3JkKi8sIGxvbmcgbG9uZy8qdmFsdWUqLykKKytAZW5kIHNtYWxsZXhhbXBsZQorKworIEBub2RlIEJsYWNrZmluIEJ1aWx0LWluIEZ1bmN0aW9ucworIEBzdWJzZWN0aW9uIEJsYWNrZmluIEJ1aWx0LWluIEZ1bmN0aW9ucworIAorLS0tIGEvZ2NjL2RvYy9pbnZva2UudGV4aQorKysrIGIvZ2NjL2RvYy9pbnZva2UudGV4aQorQEAgLTE5MCw3ICsxOTAsNyBAQCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLgorIC1mbm8tZGVmYXVsdC1pbmxpbmUgIC1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbiBAZ29sCisgLVdhYmkgIC1XY3Rvci1kdG9yLXByaXZhY3kgQGdvbAorIC1Xbm9uLXZpcnR1YWwtZHRvciAgLVdyZW9yZGVyIEBnb2wKKy0tV2VmZmMrKyAgLVduby1kZXByZWNhdGVkICAtV3N0cmljdC1udWxsLXNlbnRpbmVsIEBnb2wKKystV2VmZmMrKyAgLVduby1kZXByZWNhdGVkIEBnb2wKKyAtV25vLW5vbi10ZW1wbGF0ZS1mcmllbmQgIC1Xb2xkLXN0eWxlLWNhc3QgQGdvbAorIC1Xb3ZlcmxvYWRlZC12aXJ0dWFsICAtV25vLXBtZi1jb252ZXJzaW9ucyBAZ29sCisgLVdzaWduLXByb21vfQorQEAgLTU4OCw2ICs1ODgsMTIgQEAgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdHN9LgorIC1tYXV0by1pbmNkZWMgIC1taW5tYXggIC1tbG9uZy1jYWxscyAgLW1zaG9ydCBAZ29sCisgLW1zb2Z0LXJlZy1jb3VudD1AdmFye2NvdW50fX0KKyAKKytAZW1waHtBVlIzMiBPcHRpb25zfQorK0BnY2NvcHRsaXN0ey1tdXNlLXJvZGF0YS1zZWN0aW9uIC1taGFyZC1mbG9hdCAtbXNvZnQtZmxvYXQgLW1yZWxheCBAZ29sCisrLW1mb3JjZS1kb3VibGUtYWxpZ24gLW1uby1pbml0LWdvdCAtbXJlbGF4IC1tbWQtcmVvcmctb3B0IC1tYXNtLWFkZHItcHNldWRvcyBAZ29sCisrLW1wYXJ0PUB2YXJ7cGFydH0gLW1jcHU9QHZhcntjcHV9IC1tYXJjaD1AdmFye2FyY2h9IEBnb2wgIAorKy1tZmFzdC1mbG9hdCAtbWltbS1pbi1jb25zdC1wb29sfQorKworIEBlbXBoe01Db3JlIE9wdGlvbnN9CisgQGdjY29wdGxpc3R7LW1oYXJkbGl0ICAtbW5vLWhhcmRsaXQgIC1tZGl2ICAtbW5vLWRpdiAgLW1yZWxheC1pbW1lZGlhdGVzIEBnb2wKKyAtbW5vLXJlbGF4LWltbWVkaWF0ZXMgIC1td2lkZS1iaXRmaWVsZHMgIC1tbm8td2lkZS1iaXRmaWVsZHMgQGdvbAorQEAgLTE4NjgsMTQgKzE4NzQsNiBAQCB0byBmaWx0ZXIgb3V0IHRob3NlIHdhcm5pbmdzLgorIEBvcGluZGV4IFduby1kZXByZWNhdGVkCisgRG8gbm90IHdhcm4gYWJvdXQgdXNhZ2Ugb2YgZGVwcmVjYXRlZCBmZWF0dXJlcy4gIEB4cmVme0RlcHJlY2F0ZWQgRmVhdHVyZXN9LgorIAorLUBpdGVtIC1Xc3RyaWN0LW51bGwtc2VudGluZWwgQHJ7KEMrKyBvbmx5KX0KKy1Ab3BpbmRleCBXc3RyaWN0LW51bGwtc2VudGluZWwKKy1XYXJuIGFsc28gYWJvdXQgdGhlIHVzZSBvZiBhbiB1bmNhc3RlZCBAY29kZXtOVUxMfSBhcyBzZW50aW5lbC4gIFdoZW4KKy1jb21waWxpbmcgb25seSB3aXRoIEdDQyB0aGlzIGlzIGEgdmFsaWQgc2VudGluZWwsIGFzIEBjb2Rle05VTEx9IGlzIGRlZmluZWQKKy10byBAY29kZXtfX251bGx9LiAgQWx0aG91Z2ggaXQgaXMgYSBudWxsIHBvaW50ZXIgY29uc3RhbnQgbm90IGEgbnVsbCBwb2ludGVyLAorLWl0IGlzIGd1YXJhbnRlZWQgdG8gb2YgdGhlIHNhbWUgc2l6ZSBhcyBhIHBvaW50ZXIuICBCdXQgdGhpcyB1c2UgaXMKKy1ub3QgcG9ydGFibGUgYWNyb3NzIGRpZmZlcmVudCBjb21waWxlcnMuCistCisgQGl0ZW0gLVduby1ub24tdGVtcGxhdGUtZnJpZW5kIEByeyhDKysgb25seSl9CisgQG9waW5kZXggV25vLW5vbi10ZW1wbGF0ZS1mcmllbmQKKyBEaXNhYmxlIHdhcm5pbmdzIHdoZW4gbm9uLXRlbXBsYXRpemVkIGZyaWVuZCBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkCitAQCAtMjczMiwxMyArMjczMCwxMSBAQCByZXF1aXJpbmcgQG9wdGlvbnstT30uCisgSWYgeW91IHdhbnQgdG8gd2FybiBhYm91dCBjb2RlIHdoaWNoIHVzZXMgdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWUgb2YgdGhlCisgdmFyaWFibGUgaW4gaXRzIG93biBpbml0aWFsaXplciwgdXNlIHRoZSBAb3B0aW9uey1XaW5pdC1zZWxmfSBvcHRpb24uCisgCistVGhlc2Ugd2FybmluZ3Mgb2NjdXIgZm9yIGluZGl2aWR1YWwgdW5pbml0aWFsaXplZCBvciBjbG9iYmVyZWQKKy1lbGVtZW50cyBvZiBzdHJ1Y3R1cmUsIHVuaW9uIG9yIGFycmF5IHZhcmlhYmxlcyBhcyB3ZWxsIGFzIGZvcgorLXZhcmlhYmxlcyB3aGljaCBhcmUgdW5pbml0aWFsaXplZCBvciBjbG9iYmVyZWQgYXMgYSB3aG9sZS4gIFRoZXkgZG8KKy1ub3Qgb2NjdXIgZm9yIHZhcmlhYmxlcyBvciBlbGVtZW50cyBkZWNsYXJlZCBAY29kZXt2b2xhdGlsZX0uICBCZWNhdXNlCistdGhlc2Ugd2FybmluZ3MgZGVwZW5kIG9uIG9wdGltaXphdGlvbiwgdGhlIGV4YWN0IHZhcmlhYmxlcyBvciBlbGVtZW50cworLWZvciB3aGljaCB0aGVyZSBhcmUgd2FybmluZ3Mgd2lsbCBkZXBlbmQgb24gdGhlIHByZWNpc2Ugb3B0aW1pemF0aW9uCistb3B0aW9ucyBhbmQgdmVyc2lvbiBvZiBHQ0MgdXNlZC4KKytUaGVzZSB3YXJuaW5ncyBvY2N1ciBvbmx5IGZvciB2YXJpYWJsZXMgdGhhdCBhcmUgY2FuZGlkYXRlcyBmb3IKKytyZWdpc3RlciBhbGxvY2F0aW9uLiAgVGhlcmVmb3JlLCB0aGV5IGRvIG5vdCBvY2N1ciBmb3IgYSB2YXJpYWJsZSB0aGF0CisraXMgZGVjbGFyZWQgQGNvZGV7dm9sYXRpbGV9LCBvciB3aG9zZSBhZGRyZXNzIGlzIHRha2VuLCBvciB3aG9zZSBzaXplCisraXMgb3RoZXIgdGhhbiAxLCAyLCA0IG9yIDggYnl0ZXMuICBBbHNvLCB0aGV5IGRvIG5vdCBvY2N1ciBmb3IKKytzdHJ1Y3R1cmVzLCB1bmlvbnMgb3IgYXJyYXlzLCBldmVuIHdoZW4gdGhleSBhcmUgaW4gcmVnaXN0ZXJzLgorIAorIE5vdGUgdGhhdCB0aGVyZSBtYXkgYmUgbm8gd2FybmluZyBhYm91dCBhIHZhcmlhYmxlIHRoYXQgaXMgdXNlZCBvbmx5CisgdG8gY29tcHV0ZSBhIHZhbHVlIHRoYXQgaXRzZWxmIGlzIG5ldmVyIHVzZWQsIGJlY2F1c2Ugc3VjaAorQEAgLTYyMDEsMTAgKzYxOTcsNiBAQCBJZiBudW1iZXIgb2YgY2FuZGlkYXRlcyBpbiB0aGUgc2V0IGlzIHNtCisgd2UgYWx3YXlzIHRyeSB0byByZW1vdmUgdW5uZWNlc3NhcnkgaXZzIGZyb20gdGhlIHNldCBkdXJpbmcgaXRzCisgb3B0aW1pemF0aW9uIHdoZW4gYSBuZXcgaXYgaXMgYWRkZWQgdG8gdGhlIHNldC4KKyAKKy1AaXRlbSBzY2V2LW1heC1leHByLXNpemUKKy1Cb3VuZCBvbiBzaXplIG9mIGV4cHJlc3Npb25zIHVzZWQgaW4gdGhlIHNjYWxhciBldm9sdXRpb25zIGFuYWx5emVyLgorLUxhcmdlIGV4cHJlc3Npb25zIHNsb3cgdGhlIGFuYWx5emVyLgorLQorIEBpdGVtIHZlY3QtbWF4LXZlcnNpb24tY2hlY2tzCisgVGhlIG1heGltdW0gbnVtYmVyIG9mIHJ1bnRpbWUgY2hlY2tzIHRoYXQgY2FuIGJlIHBlcmZvcm1lZCB3aGVuIGRvaW5nCisgbG9vcCB2ZXJzaW9uaW5nIGluIHRoZSB2ZWN0b3JpemVyLiAgU2VlIG9wdGlvbiBmdHJlZS12ZWN0LWxvb3AtdmVyc2lvbgorQEAgLTc0MDIsNyArNzM5NCw3IEBAIHBsYXRmb3JtLgorICogQVJDIE9wdGlvbnM6OgorICogQVJNIE9wdGlvbnM6OgorICogQVZSIE9wdGlvbnM6OgorLSogQmxhY2tmaW4gT3B0aW9uczo6CisrKiBBVlIzMiBPcHRpb25zOjoKKyAqIENSSVMgT3B0aW9uczo6CisgKiBDUlggT3B0aW9uczo6CisgKiBEYXJ3aW4gT3B0aW9uczo6CitAQCAtNzg2Nyw4MSArNzg1OSw4MCBAQCBjb21wbHkgdG8gdGhlIEMgc3RhbmRhcmRzLCBidXQgaXQgd2lsbCBwCisgc2l6ZS4KKyBAZW5kIHRhYmxlCisgCistQG5vZGUgQmxhY2tmaW4gT3B0aW9ucworLUBzdWJzZWN0aW9uIEJsYWNrZmluIE9wdGlvbnMKKy1AY2luZGV4IEJsYWNrZmluIE9wdGlvbnMKKytAbm9kZSBBVlIzMiBPcHRpb25zCisrQHN1YnNlY3Rpb24gQVZSMzIgT3B0aW9ucworK0BjaW5kZXggQVZSMzIgT3B0aW9ucworKworK1RoZXNlIG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIEFWUjMyIGltcGxlbWVudGF0aW9uczoKKyAKKyBAdGFibGUgQGdjY3RhYm9wdAorLUBpdGVtIC1tb21pdC1sZWFmLWZyYW1lLXBvaW50ZXIKKy1Ab3BpbmRleCBtb21pdC1sZWFmLWZyYW1lLXBvaW50ZXIKKy1Eb24ndCBrZWVwIHRoZSBmcmFtZSBwb2ludGVyIGluIGEgcmVnaXN0ZXIgZm9yIGxlYWYgZnVuY3Rpb25zLiAgVGhpcworLWF2b2lkcyB0aGUgaW5zdHJ1Y3Rpb25zIHRvIHNhdmUsIHNldCB1cCBhbmQgcmVzdG9yZSBmcmFtZSBwb2ludGVycyBhbmQKKy1tYWtlcyBhbiBleHRyYSByZWdpc3RlciBhdmFpbGFibGUgaW4gbGVhZiBmdW5jdGlvbnMuICBUaGUgb3B0aW9uCistQG9wdGlvbnstZm9taXQtZnJhbWUtcG9pbnRlcn0gcmVtb3ZlcyB0aGUgZnJhbWUgcG9pbnRlciBmb3IgYWxsIGZ1bmN0aW9ucworLXdoaWNoIG1pZ2h0IG1ha2UgZGVidWdnaW5nIGhhcmRlci4KKytAaXRlbSAtbXVzZS1yb2RhdGEtc2VjdGlvbgorK0BvcGluZGV4IG11c2Utcm9kYXRhLXNlY3Rpb24KKytVc2Ugc2VjdGlvbiBAc2FtcHsucm9kYXRhfSBmb3IgcmVhZC1vbmx5IGRhdGEgaW5zdGVhZCBvZiBAc2FtcHsudGV4dH0uCisgCistQGl0ZW0gLW1zcGVjbGQtYW5vbWFseQorLUBvcGluZGV4IG1zcGVjbGQtYW5vbWFseQorLVdoZW4gZW5hYmxlZCwgdGhlIGNvbXBpbGVyIHdpbGwgZW5zdXJlIHRoYXQgdGhlIGdlbmVyYXRlZCBjb2RlIGRvZXMgbm90CistY29udGFpbiBzcGVjdWxhdGl2ZSBsb2FkcyBhZnRlciBqdW1wIGluc3RydWN0aW9ucy4gIFRoaXMgb3B0aW9uIGlzIGVuYWJsZWQKKy1ieSBkZWZhdWx0LgorLQorLUBpdGVtIC1tbm8tc3BlY2xkLWFub21hbHkKKy1Ab3BpbmRleCBtbm8tc3BlY2xkLWFub21hbHkKKy1Eb24ndCBnZW5lcmF0ZSBleHRyYSBjb2RlIHRvIHByZXZlbnQgc3BlY3VsYXRpdmUgbG9hZHMgZnJvbSBvY2N1cnJpbmcuCistCistQGl0ZW0gLW1jc3luYy1hbm9tYWx5CistQG9waW5kZXggbWNzeW5jLWFub21hbHkKKy1XaGVuIGVuYWJsZWQsIHRoZSBjb21waWxlciB3aWxsIGVuc3VyZSB0aGF0IHRoZSBnZW5lcmF0ZWQgY29kZSBkb2VzIG5vdAorLWNvbnRhaW4gQ1NZTkMgb3IgU1NZTkMgaW5zdHJ1Y3Rpb25zIHRvbyBzb29uIGFmdGVyIGNvbmRpdGlvbmFsIGJyYW5jaGVzLgorLVRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKy0KKy1AaXRlbSAtbW5vLWNzeW5jLWFub21hbHkKKy1Ab3BpbmRleCBtbm8tY3N5bmMtYW5vbWFseQorLURvbid0IGdlbmVyYXRlIGV4dHJhIGNvZGUgdG8gcHJldmVudCBDU1lOQyBvciBTU1lOQyBpbnN0cnVjdGlvbnMgZnJvbQorLW9jY3VycmluZyB0b28gc29vbiBhZnRlciBhIGNvbmRpdGlvbmFsIGJyYW5jaC4KKy0KKy1AaXRlbSAtbWxvdy02NGsKKy1Ab3BpbmRleCBtbG93LTY0aworLVdoZW4gZW5hYmxlZCwgdGhlIGNvbXBpbGVyIGlzIGZyZWUgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGtub3dsZWRnZSB0aGF0CistdGhlIGVudGlyZSBwcm9ncmFtIGZpdHMgaW50byB0aGUgbG93IDY0ayBvZiBtZW1vcnkuCistCistQGl0ZW0gLW1uby1sb3ctNjRrCistQG9waW5kZXggbW5vLWxvdy02NGsKKy1Bc3N1bWUgdGhhdCB0aGUgcHJvZ3JhbSBpcyBhcmJpdHJhcmlseSBsYXJnZS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisrQGl0ZW0gLW1oYXJkLWZsb2F0CisrQG9waW5kZXggbWhhcmQtZmxvYXQKKytVc2UgZmxvYXRpbmcgcG9pbnQgY29wcm9jZXNzb3IgaW5zdHJ1Y3Rpb25zLgorIAorLUBpdGVtIC1taWQtc2hhcmVkLWxpYnJhcnkKKy1Ab3BpbmRleCBtaWQtc2hhcmVkLWxpYnJhcnkKKy1HZW5lcmF0ZSBjb2RlIHRoYXQgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyB2aWEgdGhlIGxpYnJhcnkgSUQgbWV0aG9kLgorLVRoaXMgYWxsb3dzIGZvciBleGVjdXRlIGluIHBsYWNlIGFuZCBzaGFyZWQgbGlicmFyaWVzIGluIGFuIGVudmlyb25tZW50Cistd2l0aG91dCB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VtZW50LiAgVGhpcyBvcHRpb24gaW1wbGllcyBAb3B0aW9uey1mUElDfS4KKytAaXRlbSAtbXNvZnQtZmxvYXQKKytAb3BpbmRleCBtc29mdC1mbG9hdAorK1VzZSBzb2Z0d2FyZSBmbG9hdGluZy1wb2ludCBsaWJyYXJ5IGZvciBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zLgorIAorLUBpdGVtIC1tbm8taWQtc2hhcmVkLWxpYnJhcnkKKy1Ab3BpbmRleCBtbm8taWQtc2hhcmVkLWxpYnJhcnkKKy1HZW5lcmF0ZSBjb2RlIHRoYXQgZG9lc24ndCBhc3N1bWUgSUQgYmFzZWQgc2hhcmVkIGxpYnJhcmllcyBhcmUgYmVpbmcgdXNlZC4KKy1UaGlzIGlzIHRoZSBkZWZhdWx0LgorK0BpdGVtIC1tZm9yY2UtZG91YmxlLWFsaWduCisrQG9waW5kZXggbWZvcmNlLWRvdWJsZS1hbGlnbgorK0ZvcmNlIGRvdWJsZS13b3JkIGFsaWdubWVudCBmb3IgZG91YmxlLXdvcmQgbWVtb3J5IGFjY2Vzc2VzLgorKworK0BpdGVtIC1tbm8taW5pdC1nb3QKKytAb3BpbmRleCBtbm8taW5pdC1nb3QKKytEbyBub3QgaW5pdGlhbGl6ZSB0aGUgR09UIHJlZ2lzdGVyIGJlZm9yZSB1c2luZyBpdCB3aGVuIGNvbXBpbGluZyBQSUMKKytjb2RlLgorIAorLUBpdGVtIC1tc2hhcmVkLWxpYnJhcnktaWQ9bgorLUBvcGluZGV4IG1zaGFyZWQtbGlicmFyeS1pZAorLVNwZWNpZmllZCB0aGUgaWRlbnRpZmljYXRpb24gbnVtYmVyIG9mIHRoZSBJRCBiYXNlZCBzaGFyZWQgbGlicmFyeSBiZWluZworLWNvbXBpbGVkLiAgU3BlY2lmeWluZyBhIHZhbHVlIG9mIDAgd2lsbCBnZW5lcmF0ZSBtb3JlIGNvbXBhY3QgY29kZSwgc3BlY2lmeWluZworLW90aGVyIHZhbHVlcyB3aWxsIGZvcmNlIHRoZSBhbGxvY2F0aW9uIG9mIHRoYXQgbnVtYmVyIHRvIHRoZSBjdXJyZW50CistbGlicmFyeSBidXQgaXMgbm8gbW9yZSBzcGFjZSBvciB0aW1lIGVmZmljaWVudCB0aGFuIG9taXR0aW5nIHRoaXMgb3B0aW9uLgorK0BpdGVtIC1tcmVsYXgKKytAb3BpbmRleCBtcmVsYXgKKytMZXQgaW52b2tlZCBhc3NlbWJsZXIgYW5kIGxpbmtlciBkbyByZWxheGluZyAKKysoRW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gb3B0aW1pemF0aW9uIGxldmVsIGlzID4xKS4KKytUaGlzIG1lYW5zIHRoYXQgd2hlbiB0aGUgYWRkcmVzcyBvZiBzeW1ib2xzIGFyZSBrbm93biBhdCBsaW5rIHRpbWUsCisrdGhlIGxpbmtlciBjYW4gb3B0aW1pemUgQHNhbXB7aWNhbGx9IGFuZCBAc2FtcHttY2FsbH0KKytpbnN0cnVjdGlvbnMgaW50byBhIEBzYW1we3JjYWxsfSBpbnN0cnVjdGlvbiBpZiBwb3NzaWJsZS4gCisrTG9hZGluZyB0aGUgYWRkcmVzcyBvZiBhIHN5bWJvbCBjYW4gYWxzbyBiZSBvcHRpbWl6ZWQuICAKKysKKytAaXRlbSAtbW1kLXJlb3JnLW9wdAorK0BvcGluZGV4IG1tZC1yZW9yZy1vcHQKKytQZXJmb3JtIG1hY2hpbmUgZGVwZW5kZW50IG9wdGltaXphdGlvbnMgaW4gcmVvcmcgc3RhZ2UuCisrCisrQGl0ZW0gLW1hc20tYWRkci1wc2V1ZG9zCisrQG9waW5kZXggbWFzbS1hZGRyLXBzZXVkb3MKKytVc2UgYXNzZW1ibGVyIHBzZXVkby1pbnN0cnVjdGlvbnMgbGRhLncgYW5kIGNhbGwgZm9yIGhhbmRsaW5nIGRpcmVjdAorK2FkZHJlc3Nlcy4gKEVuYWJsZWQgYnkgZGVmYXVsdCkKKysKKytAaXRlbSAtbXBhcnQ9QHZhcntwYXJ0fQorK0BvcGluZGV4IG1wYXJ0CisrR2VuZXJhdGUgY29kZSBmb3IgdGhlIHNwZWNpZmllZCBwYXJ0LiBQZXJtaXNzaWJsZSBwYXJ0cyBhcmU6IAorK0BzYW1we2FwNzAwMH0sIEBzYW1we2FwNzAxMH0sQHNhbXB7YXA3MDIwfSwKKytAc2FtcHt1YzNhMDEyOH0sIEBzYW1we3VjM2EwMjU2fSwgQHNhbXB7dWMzYTA1MTJ9LAorK0BzYW1we3VjM2ExMTI4fSwgQHNhbXB7dWMzYTEyNTZ9LCBAc2FtcHt1YzNhMTUxMn0sCisrQHNhbXB7dWMzYjA2NH0sIEBzYW1we3VjM2IwMTI4fSwgQHNhbXB7dWMzYjAyNTZ9LAorK0BzYW1we3VjM2IxNjR9LCBAc2FtcHt1YzNiMTEyOH0sIEBzYW1we3VjM2IxMjU2fS4KKyAKKy1AaXRlbSAtbWxvbmctY2FsbHMKKy1AaXRlbXggLW1uby1sb25nLWNhbGxzCistQG9waW5kZXggbWxvbmctY2FsbHMKKy1Ab3BpbmRleCBtbm8tbG9uZy1jYWxscworLVRlbGxzIHRoZSBjb21waWxlciB0byBwZXJmb3JtIGZ1bmN0aW9uIGNhbGxzIGJ5IGZpcnN0IGxvYWRpbmcgdGhlCistYWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24gaW50byBhIHJlZ2lzdGVyIGFuZCB0aGVuIHBlcmZvcm1pbmcgYSBzdWJyb3V0aW5lCistY2FsbCBvbiB0aGlzIHJlZ2lzdGVyLiAgVGhpcyBzd2l0Y2ggaXMgbmVlZGVkIGlmIHRoZSB0YXJnZXQgZnVuY3Rpb24KKy13aWxsIGxpZSBvdXRzaWRlIG9mIHRoZSAyNCBiaXQgYWRkcmVzc2luZyByYW5nZSBvZiB0aGUgb2Zmc2V0IGJhc2VkCistdmVyc2lvbiBvZiBzdWJyb3V0aW5lIGNhbGwgaW5zdHJ1Y3Rpb24uCisrQGl0ZW0gLW1jcHU9QHZhcntjcHUtdHlwZX0KKytAb3BpbmRleCBtY3B1CisrU2FtZSBhcyAtbXBhcnQuIE9ic29sZXRlLgorKworK0BpdGVtIC1tYXJjaD1AdmFye2FyY2h9CisrQG9waW5kZXggbWFyY2gKKytHZW5lcmF0ZSBjb2RlIGZvciB0aGUgc3BlY2lmaWVkIGFyY2hpdGVjdHVyZS4gUGVybWlzc2libGUgYXJjaGl0ZWN0dXJlcyBhcmU6CisrQHNhbXB7YXB9IGFuZCBAc2FtcHt1Y30uIAorKworK0BpdGVtIC1tZmFzdC1mbG9hdAorK0BvcGluZGV4IG1mYXN0LWZsb2F0CisrRW5hYmxlIGZhc3QgZmxvYXRpbmctcG9pbnQgbGlicmFyeSB0aGF0IGRvZXMgbm90IGNvbmZvcm0gdG8gaWVlZSBidXQgaXMgc3RpbGwgZ29vZCBlbm91Z2gKKytmb3IgbW9zdCBhcHBsaWNhdGlvbnMuIFRoZSBmYXN0IGZsb2F0aW5nLXBvaW50IGxpYnJhcnkgZG9lcyBub3Qgcm91bmQgdG8gdGhlIG5lYXJlc3QgZXZlbgorK2J1dCBhd2F5IGZyb20gemVyby4gRW5hYmxlZCBieSBkZWZhdWx0IGlmIHRoZSAtZnVuc2FmZS1tYXRoLW9wdGltaXphdGlvbnMgc3dpdGNoIGlzIHNwZWNpZmllZC4gCisrCisrQGl0ZW0gLW1pbW0taW4tY29uc3QtcG9vbAorK0BvcGluZGV4IG1pbW0taW4tY29uc3QtcG9vbAorK1B1dCBsYXJnZSBpbW1lZGlhdGVzIGluIGNvbnN0YW50IHBvb2wuIFRoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGZvciBhcmNocyB3aXRoIGluc24tY2FjaGUuCisgCistVGhpcyBmZWF0dXJlIGlzIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQuICBTcGVjaWZ5aW5nCistQG9wdGlvbnstbW5vLWxvbmctY2FsbHN9IHdpbGwgcmVzdG9yZSB0aGUgZGVmYXVsdCBiZWhhdmlvci4gIE5vdGUgdGhlc2UKKy1zd2l0Y2hlcyBoYXZlIG5vIGVmZmVjdCBvbiBob3cgdGhlIGNvbXBpbGVyIGdlbmVyYXRlcyBjb2RlIHRvIGhhbmRsZQorLWZ1bmN0aW9uIGNhbGxzIHZpYSBmdW5jdGlvbiBwb2ludGVycy4KKyBAZW5kIHRhYmxlCisgCisgQG5vZGUgQ1JJUyBPcHRpb25zCistLS0gYS9nY2MvZG9jL21kLnRleGkKKysrKyBiL2djYy9kb2MvbWQudGV4aQorQEAgLTE2ODEsNiArMTY4MSw4MCBAQCBBIG1lbW9yeSByZWZlcmVuY2Ugc3VpdGFibGUgZm9yIGlXTU1YdCBsCisgQSBtZW1vcnkgcmVmZXJlbmNlIHN1aXRhYmxlIGZvciB0aGUgQVJNdjQgbGRyc2IgaW5zdHJ1Y3Rpb24uCisgQGVuZCB0YWJsZQorIAorK0BpdGVtIEFWUjMyIGZhbWlseS0tLUBmaWxle2F2cjMyLmh9CisrQHRhYmxlIEBjb2RlCisrQGl0ZW0gZgorK0Zsb2F0aW5nLXBvaW50IHJlZ2lzdGVycyAoZjAgdG8gZjE1KSAoUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UpCisrCisrQGl0ZW0gS3VAdmFye2JpdHN9CisrVW5zaWduZWQgY29uc3RhbnQgcmVwcmVzZW50YWJsZSB3aXRoIEB2YXJ7Yml0c30gbnVtYmVyIG9mIGJpdHMgKE11c3QgYmUKKyt0d28gZGlnaXRzKS4gSS5lOiBBbiB1bnNpZ25lZCA4LWJpdCBjb25zdGFudCBpcyB3cml0dGVuIGFzIEBzYW1we0t1MDh9ICAKKysgCisrQGl0ZW0gS3NAdmFye2JpdHN9CisrU2lnbmVkIGNvbnN0YW50IHJlcHJlc2VudGFibGUgd2l0aCBAdmFye2JpdHN9IG51bWJlciBvZiBiaXRzIChNdXN0IGJlCisrdHdvIGRpZ2l0cykuIEkuZTogQSBzaWduZWQgMTItYml0IGNvbnN0YW50IGlzIHdyaXR0ZW4gYXMgQHNhbXB7S3MxMn0gIAorKworK0BpdGVtIElzQHZhcntiaXRzfQorK1RoZSBuZWdhdGVkIHJhbmdlIG9mIGEgc2lnbmVkIGNvbnN0YW50IHJlcHJlc2VudGFibGUgd2l0aCAgQHZhcntiaXRzfSAKKytudW1iZXIgb2YgYml0cy4gVGhlIHNhbWUgYXMgQHNhbXB7S3NAdmFye2JpdHN9fSB3aXRoIGEgbmVnYXRlZCByYW5nZS4gCisrVGhpcyBtZWFucyB0aGF0IHRoZSBjb25zdGFudCBtdXN0IGJlIGluIHRoZSByYW5nZSBAbWF0aHstMl57Yml0cy0xfS0xfSB0byBAbWF0aHsyXntiaXRzLTF9fQorKworK0BpdGVtIEcKKytBIHNpbmdsZS9kb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IGltbWVkaWF0ZSBvciA2NC1iaXQgaW50ZWdlciAKKytpbW1lZGlhdGUgd2hlcmUgdGhlIGxlYXN0IGFuZCBtb3N0IHNpZ25pZmljYW50IHdvcmRzIGJvdGggY2FuIGJlCisrbG9hZGVkIHdpdGggYSBtb3ZlIGluc3RydWN0aW9uLiBUaGF0IGlzIHRoZSB0aGUgaW50ZWdlciBmb3JtIG9mIHRoZSAKKyt2YWx1ZXMgaW4gdGhlIGxlYXN0IGFuZCBtb3N0IHNpZ25pZmljYW50IHdvcmRzIGJvdGggYXJlIGluIHRoZSByYW5nZSAKKytAbWF0aHstMl57MjB9fSB0byBAbWF0aHsyXnsyMH0tMX0uCisrICAgICAgICAgCisrQGl0ZW0gTQorK0FueSAzMi1iaXQgaW1tZWRpYXRlIHdpdGggdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBzZXQgdG8gemVybyBhbmQgdGhlCisrcmVtYWluaW5nIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgc2V0IHRvIG9uZS4gCisrCisrQGl0ZW0gSgorK0EgMzItYml0IGltbWVkaWF0ZSB3aGVyZSBhbGwgdGhlIGxvd2VyIDE2LWJpdHMgYXJlIHplcm8uIAorKworK0BpdGVtIE8KKytBIDMyLWJpdCBpbW1lZGlhdGUgd2l0aCBvbmUgYml0IHNldCBhbmQgdGhlIHJlc3Qgb2YgdGhlIGJpdHMgY2xlYXJlZC4gCisrCisrQGl0ZW0gTgorK0EgMzItYml0IGltbWVkaWF0ZSB3aXRoIG9uZSBiaXQgY2xlYXJlZCBhbmQgdGhlIHJlc3Qgb2YgdGhlIGJpdHMgc2V0LiAKKysKKytAaXRlbSBMCisrQSAzMi1iaXQgaW1tZWRpYXRlIHdoZXJlIGFsbCB0aGUgbG93ZXIgMTYtYml0cyBhcmUgc2V0LiAKKysKKytAaXRlbSBRCisrQW55IEFWUjMyIG1lbW9yeSByZWZlcmVuY2UgZXhjZXB0IGZvciByZWZlcmVuY2UgdXNlZCBmb3IgdGhlIGF0b21pYyBtZW1vcnkgKFJNVykgaW5zdHJ1Y3Rpb25zLgorKworK0BpdGVtIFJLc0B2YXJ7Yml0c30KKytBIG1lbW9yeSByZWZlcmVuY2Ugd2hlcmUgdGhlIGFkZHJlc3MgY29uc2lzdHMgb2YgYSBiYXNlIHJlZ2lzdGVyCisrcGx1cyBhIHNpZ25lZCBpbW1lZGlhdGUgZGlzcGxhY2VtZW50IHdpdGggcmFuZ2UgZ2l2ZW4gYnkgQHNhbXB7S3NAdmFye2JpdHN9fQorK3doaWNoIGhhcyB0aGUgc2FtZSBmb3JtYXQgYXMgZm9yIHRoZSBzaWduZWQgaW1tZWRpYXRlIGludGVnZXIgY29uc3RyYWludAorK2dpdmVuIGFib3ZlLiAgCisrCisrQGl0ZW0gUkt1QHZhcntiaXRzfQorK0EgbWVtb3J5IHJlZmVyZW5jZSB3aGVyZSB0aGUgYWRkcmVzcyBjb25zaXN0cyBvZiBhIGJhc2UgcmVnaXN0ZXIKKytwbHVzIGFuIHVuc2lnbmVkIGltbWVkaWF0ZSBkaXNwbGFjZW1lbnQgd2l0aCByYW5nZSBnaXZlbiBieSBAc2FtcHtLdUB2YXJ7Yml0c319Cisrd2hpY2ggaGFzIHRoZSBzYW1lIGZvcm1hdCBhcyBmb3IgdGhlIHVuc2lnbmVkIGltbWVkaWF0ZSBpbnRlZ2VyIGNvbnN0cmFpbnQKKytnaXZlbiBhYm92ZS4gIAorKworK0BpdGVtIFMKKytBIG1lbW9yeSByZWZlcmVuY2Ugd2l0aCBhbiBpbW1lZGlhdGUgb3IgcmVnaXN0ZXIgb2Zmc2V0CisrCisrQGl0ZW0gVAorK0EgbWVtb3J5IHJlZmVyZW5jZSB0byBhIGNvbnN0YW50IHBvb2wgZW50cnkKKysKKytAaXRlbSBXCisrQSB2YWxpZCBvcGVyYW5kIGZvciB1c2UgaW4gdGhlIEBzYW1we2xkYS53fSBpbnN0cnVjdGlvbiBtYWNybyB3aGVuCisrcmVsYXhpbmcgaXMgZW5hYmxlZAorKworK0BpdGVtIFkKKytBIG1lbW9yeSByZWZlcmVuY2Ugc3VpdGFibGUgZm9yIHRoZSBhdG9taWMgbWVtb3J5IChSTVcpIGluc3RydWN0aW9ucy4KKysKKytAaXRlbSBaCisrQSBtZW1vcnkgcmVmZXJlbmNlIHZhbGlkIGZvciBjb3Byb2Nlc3NvciBtZW1vcnkgaW5zdHJ1Y3Rpb25zCisrCisrQGVuZCB0YWJsZQorKworIEBpdGVtIEFWUiBmYW1pbHktLS1AZmlsZXtjb25maWcvYXZyL2NvbnN0cmFpbnRzLm1kfQorIEB0YWJsZSBAY29kZQorIEBpdGVtIGwKKy0tLSBhL2djYy9leHBtZWQuYworKysrIGIvZ2NjL2V4cG1lZC5jCitAQCAtMzYsNiArMzYsNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgCisgI2luY2x1ZGUgInJlYWwuaCIKKyAjaW5jbHVkZSAicmVjb2cuaCIKKyAjaW5jbHVkZSAibGFuZ2hvb2tzLmgiCisrI2luY2x1ZGUgInRhcmdldC5oIgorIAorIHN0YXRpYyB2b2lkIHN0b3JlX2ZpeGVkX2JpdF9maWVsZCAocnR4LCB1bnNpZ25lZCBIT1NUX1dJREVfSU5ULAorIAkJCQkgICB1bnNpZ25lZCBIT1NUX1dJREVfSU5ULAorQEAgLTQ1NCw5ICs0NTUsMTkgQEAgc3RvcmVfYml0X2ZpZWxkIChydHggc3RyX3J0eCwgdW5zaWduZWQgSAorIAkgID8gKChHRVRfTU9ERV9TSVpFIChmaWVsZG1vZGUpID49IFVOSVRTX1BFUl9XT1JECisgCSAgICAgfHwgR0VUX01PREVfU0laRSAoR0VUX01PREUgKG9wMCkpID09IEdFVF9NT0RFX1NJWkUgKGZpZWxkbW9kZSkpCisgCSAgICAgJiYgYnl0ZV9vZmZzZXQgJSBHRVRfTU9ERV9TSVpFIChmaWVsZG1vZGUpID09IDApCistCSAgOiAoISBTTE9XX1VOQUxJR05FRF9BQ0NFU1MgKGZpZWxkbW9kZSwgTUVNX0FMSUdOIChvcDApKQorLQkgICAgIHx8IChvZmZzZXQgKiBCSVRTX1BFUl9VTklUICUgYml0c2l6ZSA9PSAwCistCQkgJiYgTUVNX0FMSUdOIChvcDApICUgR0VUX01PREVfQklUU0laRSAoZmllbGRtb2RlKSA9PSAwKSkpKQorKyAgICAgICAgIDogKCAKKysKKysgICAgICAgICAgICAgLyogTkIhIEFkZGVkIGZvciBBVlIzMiwgYW5kIEkgdGhpbmsgdGhpcyBzaG91bGQgYmUgdHJ1ZSBmb3IKKysgICAgICAgICAgICAgICAgYWxsIHRhcmdldHMgbm90IHVzaW5nIG5hcnJvdyB2b2xhdGlsZSBiaXRmaWVsZHMuIElmIHRoZQorKyAgICAgICAgICAgICAgICBiaXRmaWVsZCBpcyB2b2xhdGlsZSB0aGVuIHdlIG5lZWQgdG8gcGVyZm9ybSBhbiBhY2Nlc3MKKysgICAgICAgICAgICAgICAgY29uc2lzdGVudCB3aXRoIHRoZSBjb250YWluZXIgdHlwZS4gKi8KKysgICAgICAgICAgICAgIShNRU1fVk9MQVRJTEVfUCAob3AwKSAKKysgICAgICAgICAgICAgICAmJiBHRVRfTU9ERV9CSVRTSVpFIChHRVRfTU9ERSAob3AwKSkgIT0gYml0c2l6ZQorKyAgICAgICAgICAgICAgICYmIGJpdHNpemUgPCBCSVRTX1BFUl9XT1JECisrICAgICAgICAgICAgICAgJiYgIXRhcmdldG0ubmFycm93X3ZvbGF0aWxlX2JpdGZpZWxkICgpKQorKyAgICAgICAgICAgICAmJiAoISBTTE9XX1VOQUxJR05FRF9BQ0NFU1MgKGZpZWxkbW9kZSwgTUVNX0FMSUdOIChvcDApKQorKyAgICAgICAgICAgICAgICAgfHwgKG9mZnNldCAqIEJJVFNfUEVSX1VOSVQgJSBiaXRzaXplID09IDAKKysgICAgICAgICAgICAgICAgICAgICAmJiBNRU1fQUxJR04gKG9wMCkgJSBHRVRfTU9ERV9CSVRTSVpFIChmaWVsZG1vZGUpID09IDApKSkpKQorICAgICB7CisgICAgICAgaWYgKE1FTV9QIChvcDApKQorIAlvcDAgPSBhZGp1c3RfYWRkcmVzcyAob3AwLCBmaWVsZG1vZGUsIG9mZnNldCk7CitAQCAtMTI1Niw2ICsxMjY3LDEzIEBAIGV4dHJhY3RfYml0X2ZpZWxkIChydHggc3RyX3J0eCwgdW5zaWduZWQKKyAJICAgJiYgR0VUX01PREVfU0laRSAobW9kZTEpICE9IDAKKyAJICAgJiYgYnl0ZV9vZmZzZXQgJSBHRVRfTU9ERV9TSVpFIChtb2RlMSkgPT0gMCkKKyAJICB8fCAoTUVNX1AgKG9wMCkKKysgICAgICAgICAgICAgLyogTkIhIEFkZGVkIGZvciBBVlIzMiwgYW5kIEkgdGhpbmsgdGhpcyBzaG91bGQgYmUgdHJ1ZSBmb3IKKysgICAgICAgICAgICAgICAgYWxsIHRhcmdldHMgbm90IHVzaW5nIG5hcnJvdyB2b2xhdGlsZSBiaXRmaWVsZHMuIElmIHRoZQorKyAgICAgICAgICAgICAgICBiaXRmaWVsZCBpcyB2b2xhdGlsZSB0aGVuIHdlIG5lZWQgdG8gcGVyZm9ybSBhbiBhY2Nlc3MKKysgICAgICAgICAgICAgICAgY29uc2lzdGVudCB3aXRoIHRoZSBjb250YWluZXIgdHlwZS4gKi8KKysgICAgICAgICAgICAgICYmICEoTUVNX1ZPTEFUSUxFX1AgKG9wMCkKKysgICAgICAgICAgICAgICAgICAgJiYgR0VUX01PREVfQklUU0laRSAoR0VUX01PREUgKG9wMCkpICE9IGJpdHNpemUKKysgICAgICAgICAgICAgICAgICAgJiYgIXRhcmdldG0ubmFycm93X3ZvbGF0aWxlX2JpdGZpZWxkICgpKQorIAkgICAgICAmJiAoISBTTE9XX1VOQUxJR05FRF9BQ0NFU1MgKG1vZGUsIE1FTV9BTElHTiAob3AwKSkKKyAJCSAgfHwgKG9mZnNldCAqIEJJVFNfUEVSX1VOSVQgJSBiaXRzaXplID09IDAKKyAJCSAgICAgICYmIE1FTV9BTElHTiAob3AwKSAlIGJpdHNpemUgPT0gMCkpKSkpCistLS0gYS9nY2MvZXhwci5jCisrKysgYi9nY2MvZXhwci5jCitAQCAtMzUxOSwxOCArMzUxOSwxOSBAQCBlbWl0X3NpbmdsZV9wdXNoX2luc24gKGVudW0gbWFjaGluZV9tb2RlCisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworKyAgICAgIGVtaXRfbW92ZV9pbnNuIChzdGFja19wb2ludGVyX3J0eCwKKysJCSAgICAgIGV4cGFuZF9iaW5vcCAoUG1vZGUsCisgI2lmZGVmIFNUQUNLX0dST1dTX0RPV05XQVJECistICAgICAgLyogPz8/IFRoaXMgc2VlbXMgd3JvbmcgaWYgU1RBQ0tfUFVTSF9DT0RFID09IFBPU1RfREVDLiAgKi8KKy0gICAgICBkZXN0X2FkZHIgPSBnZW5fcnR4X1BMVVMgKFBtb2RlLCBzdGFja19wb2ludGVyX3J0eCwKKy0JCQkJR0VOX0lOVCAoLShIT1NUX1dJREVfSU5UKSByb3VuZGVkX3NpemUpKTsKKysJCQkJICAgIHN1Yl9vcHRhYiwKKyAjZWxzZQorLSAgICAgIC8qID8/PyBUaGlzIHNlZW1zIHdyb25nIGlmIFNUQUNLX1BVU0hfQ09ERSA9PSBQT1NUX0lOQy4gICovCistICAgICAgZGVzdF9hZGRyID0gZ2VuX3J0eF9QTFVTIChQbW9kZSwgc3RhY2tfcG9pbnRlcl9ydHgsCistCQkJCUdFTl9JTlQgKHJvdW5kZWRfc2l6ZSkpOworKwkJCQkgICAgYWRkX29wdGFiLAorICNlbmRpZgorLSAgICAgIGRlc3RfYWRkciA9IGdlbl9ydHhfUFJFX01PRElGWSAoUG1vZGUsIHN0YWNrX3BvaW50ZXJfcnR4LCBkZXN0X2FkZHIpOworKwkJCQkgICAgc3RhY2tfcG9pbnRlcl9ydHgsCisrCQkJCSAgICBHRU5fSU5UIChyb3VuZGVkX3NpemUpLAorKwkJCQkgICAgTlVMTF9SVFgsIDAsIE9QVEFCX0xJQl9XSURFTikpOworKyAgICAgIGRlc3RfYWRkciA9IHN0YWNrX3BvaW50ZXJfcnR4OworICAgICB9CistCisrICAKKyAgIGRlc3QgPSBnZW5fcnR4X01FTSAobW9kZSwgZGVzdF9hZGRyKTsKKyAKKyAgIGlmICh0eXBlICE9IDApCitAQCAtNTUwOSw3ICs1NTEwLDIxIEBAIHN0b3JlX2ZpZWxkIChydHggdGFyZ2V0LCBIT1NUX1dJREVfSU5UIGIKKyAgICAgIGlzIGEgYml0IGZpZWxkLCB3ZSBjYW5ub3QgdXNlIGFkZHJlc3NpbmcgdG8gYWNjZXNzIGl0LgorICAgICAgVXNlIGJpdC1maWVsZCB0ZWNobmlxdWVzIG9yIFNVQlJFRyB0byBzdG9yZSBpbiBpdC4gICovCisgCistICBpZiAobW9kZSA9PSBWT0lEbW9kZQorKyAgaWYgKAorKyAgICAgIC8qIE5CISBBZGRlZCBmb3IgQVZSMzIsIGFuZCBJIHRoaW5rIHRoaXMgc2hvdWxkIGJlIHRydWUgZm9yCisrICAgICAgICAgYWxsIHRhcmdldHMgbm90IHVzaW5nIG5hcnJvdyB2b2xhdGlsZSBiaXRmaWVsZHMuIElmIHRoZQorKyAgICAgICAgIGJpdGZpZWxkIGlzIHZvbGF0aWxlIHRoZW4gd2UgbmVlZCB0byBwZXJmb3JtIGFuIGFjY2VzcworKyAgICAgICAgIGNvbnNpc3RlbnQgd2l0aCB0aGUgY29udGFpbmVyIHR5cGUuICovCisrICAgICAgKE1FTV9QICh0YXJnZXQpIAorKyAgICAgICAmJiBNRU1fVk9MQVRJTEVfUCAodGFyZ2V0KSAKKysgICAgICAgJiYgKChHRVRfTU9ERSAodGFyZ2V0KSAhPSBCTEttb2RlCisrICAgICAgICAgICAgJiYgR0VUX01PREVfQklUU0laRSAoR0VUX01PREUgKHRhcmdldCkpID4gYml0c2l6ZSApCisrICAgICAgICAgICAvKiBJZiBCTEttb2RlLCBjaGVjayBpZiB0aGlzIGlzIGEgcmVjb3JkLiBEbyBub3Qga25vdyAKKysgICAgICAgICAgICAgIGlmIHRoaXMgaXMgcmVhbGx5IG5lY2VzYXJyeSB0aG91Z2guLi4qLworKyAgICAgICAgICAgfHwgKEdFVF9NT0RFICh0YXJnZXQpID09IEJMS21vZGUKKysgICAgICAgICAgICAgICAmJiBUUkVFX0NPREUgKHR5cGUpID09IFJFQ09SRF9UWVBFKSkKKysgICAgICAgJiYgIXRhcmdldG0ubmFycm93X3ZvbGF0aWxlX2JpdGZpZWxkICgpKQorKyAgICAgIHx8IG1vZGUgPT0gVk9JRG1vZGUKKyAgICAgICB8fCAobW9kZSAhPSBCTEttb2RlICYmICEgZGlyZWN0X3N0b3JlWyhpbnQpIG1vZGVdCisgCSAgJiYgR0VUX01PREVfQ0xBU1MgKG1vZGUpICE9IE1PREVfQ09NUExFWF9JTlQKKyAJICAmJiBHRVRfTU9ERV9DTEFTUyAobW9kZSkgIT0gTU9ERV9DT01QTEVYX0ZMT0FUKQorQEAgLTc1NjAsNyArNzU3NSwyMSBAQCBleHBhbmRfZXhwcl9yZWFsXzEgKHRyZWUgZXhwLCBydHggdGFyZ2V0CisgCSAgIGJ5IGRvaW5nIHRoZSBleHRyYWN0IGludG8gYW4gb2JqZWN0IGFzIHdpZGUgYXMgdGhlIGZpZWxkCisgCSAgICh3aGljaCB3ZSBrbm93IHRvIGJlIHRoZSB3aWR0aCBvZiBhIGJhc2ljIG1vZGUpLCB0aGVuCisgCSAgIHN0b3JpbmcgaW50byBtZW1vcnksIGFuZCBjaGFuZ2luZyB0aGUgbW9kZSB0byBCTEttb2RlLiAgKi8KKy0JaWYgKG1vZGUxID09IFZPSURtb2RlCisrICAgICAgIGlmICggICAgICAKKysgICAgICAgICAgICAvKiBOQiEgQWRkZWQgZm9yIEFWUjMyLCBhbmQgSSB0aGluayB0aGlzIHNob3VsZCBiZSB0cnVlIGZvcgorKyAgICAgICAgICAgICAgIGFsbCB0YXJnZXRzIG5vdCB1c2luZyBuYXJyb3cgdm9sYXRpbGUgYml0ZmllbGRzLiBJZiB0aGUKKysgICAgICAgICAgICAgICBiaXRmaWVsZCBpcyB2b2xhdGlsZSB0aGVuIHdlIG5lZWQgdG8gcGVyZm9ybSBhbiBhY2Nlc3MKKysgICAgICAgICAgICAgICBjb25zaXN0ZW50IHdpdGggdGhlIGNvbnRhaW5lciB0eXBlLiAqLworKyAgICAgICAgICAgIChNRU1fUCAob3AwKSAKKysgICAgICAgICAgICAgJiYgTUVNX1ZPTEFUSUxFX1AgKG9wMCkgCisrICAgICAgICAgICAgICYmICgoR0VUX01PREUgKG9wMCkgIT0gQkxLbW9kZQorKyAgICAgICAgICAgICAgICAgICYmIEdFVF9NT0RFX0JJVFNJWkUgKEdFVF9NT0RFIChvcDApKSA+IGJpdHNpemUgKQorKyAgICAgICAgICAgICAgICAgLyogSWYgQkxLbW9kZSwgY2hlY2sgaWYgdGhpcyBpcyBhIHJlY29yZC4gRG8gbm90IGtub3cgCisrICAgICAgICAgICAgICAgICAgICBpZiB0aGlzIGlzIHJlYWxseSBuZWNlc2FycnkgdGhvdWdoLi4uKi8KKysgICAgICAgICAgICAgICAgIHx8IChHRVRfTU9ERSAob3AwKSA9PSBCTEttb2RlCisrICAgICAgICAgICAgICAgICAgICAgJiYgVFJFRV9DT0RFICh0eXBlKSA9PSBSRUNPUkRfVFlQRSkpCisrICAgICAgICAgICAgICYmICF0YXJnZXRtLm5hcnJvd192b2xhdGlsZV9iaXRmaWVsZCAoKSkKKysgICAgICAgICAgICB8fCBtb2RlMSA9PSBWT0lEbW9kZQorIAkgICAgfHwgUkVHX1AgKG9wMCkgfHwgR0VUX0NPREUgKG9wMCkgPT0gU1VCUkVHCisgCSAgICB8fCAobW9kZTEgIT0gQkxLbW9kZSAmJiAhIGRpcmVjdF9sb2FkWyhpbnQpIG1vZGUxXQorIAkJJiYgR0VUX01PREVfQ0xBU1MgKG1vZGUpICE9IE1PREVfQ09NUExFWF9JTlQKKy0tLSBhL2djYy9mbG93LmMKKysrKyBiL2djYy9mbG93LmMKK0BAIC0zMzI3LDEyICszMzI3LDEyIEBAIG5vdF9yZWdfY29uZCAocnR4IHgpCisgICBpZiAoR0VUX0NPREUgKHgpID09IE5PVCkKKyAgICAgcmV0dXJuIFhFWFAgKHgsIDApOworICAgaWYgKENPTVBBUklTT05fUCAoeCkKKy0gICAgICAmJiBSRUdfUCAoWEVYUCAoeCwgMCkpKQorKyAgICAgIC8qICYmIFJFR19QIChYRVhQICh4LCAwKSkqLykKKyAgICAgeworLSAgICAgIGdjY19hc3NlcnQgKFhFWFAgKHgsIDEpID09IGNvbnN0MF9ydHgpOworKyAgICAgIC8qZ2NjX2Fzc2VydCAoWEVYUCAoeCwgMSkgPT0gY29uc3QwX3J0eCk7Ki8KKyAKKyAgICAgICByZXR1cm4gZ2VuX3J0eF9mbXRfZWUgKHJldmVyc2VkX2NvbXBhcmlzb25fY29kZSAoeCwgTlVMTCksCistCQkJICAgICBWT0lEbW9kZSwgWEVYUCAoeCwgMCksIGNvbnN0MF9ydHgpOworKwkJCSAgICAgVk9JRG1vZGUsIFhFWFAgKHgsIDApLCBYRVhQICh4LCAwKSAvKmNvbnN0MF9ydHgqLyk7CisgICAgIH0KKyAgIHJldHVybiBnZW5fcnR4X05PVCAoMCwgeCk7CisgfQorLS0tIGEvZ2NjL2Z1bmN0aW9uLmMKKysrKyBiL2djYy9mdW5jdGlvbi5jCitAQCAtMjY3Niw4ICsyNjc2LDEyIEBAIGFzc2lnbl9wYXJtX3NldHVwX3JlZyAoc3RydWN0IGFzc2lnbl9wYXIKKyAgICAgU0VUX0RFQ0xfUlRMIChwYXJtLCBwYXJtcmVnKTsKKyAKKyAgIC8qIENvcHkgdGhlIHZhbHVlIGludG8gdGhlIHJlZ2lzdGVyLiAgKi8KKy0gIGlmIChkYXRhLT5ub21pbmFsX21vZGUgIT0gZGF0YS0+cGFzc2VkX21vZGUKKy0gICAgICB8fCBwcm9tb3RlZF9ub21pbmFsX21vZGUgIT0gZGF0YS0+cHJvbW90ZWRfbW9kZSkKKysgIGlmICggKGRhdGEtPm5vbWluYWxfbW9kZSAhPSBkYXRhLT5wYXNzZWRfbW9kZQorKyAgICAgICAgLyogQWRkZWQgZm9yIEFWUjMyOiBJZiBwYXNzZWRfbW9kZSBpcyBlcXVhbAorKyAgICAgICAgICAgdG8gcHJvbW90ZWQgbm9taW5hbCBtb2RlIHdoeSBzaG91bGQgYmUgY29udmVydD8KKysgICAgICAgICAgIFRoZSBjb252ZXJzaW9uIHNob3VsZCBtYWtlIG5vIGRpZmZlcmVuY2UuICovCisrICAgICAgICAmJiBkYXRhLT5wYXNzZWRfbW9kZSAhPSBwcm9tb3RlZF9ub21pbmFsX21vZGUpCisrICAgICAgIHx8IHByb21vdGVkX25vbWluYWxfbW9kZSAhPSBkYXRhLT5wcm9tb3RlZF9tb2RlKQorICAgICB7CisgICAgICAgaW50IHNhdmVfdHJlZV91c2VkOworIAorLS0tIGEvZ2NjL2dlbmVtaXQuYworKysrIGIvZ2NjL2dlbmVtaXQuYworQEAgLTEyMSw2ICsxMjEsMjQgQEAgbWF4X29wZXJhbmRfdmVjIChydHggaW5zbiwgaW50IGFyZykKKyB9CisgDAorIHN0YXRpYyB2b2lkCisrZ2VuX3ZhcmFyZ19wcm9sb2d1ZShpbnQgb3BlcmFuZHMpCisreworKyAgaW50IGk7CisrCisrICBpZiAob3BlcmFuZHMgPiAxKQorKyAgICB7CisrICAgICAgZm9yIChpID0gMTsgaSA8IG9wZXJhbmRzOyBpKyspCisrCXByaW50ZigiICBydHggb3BlcmFuZCVkIEFUVFJJQlVURV9VTlVTRUQ7XG4iLCBpKTsKKysKKysgICAgICBwcmludGYoIiAgdmFfbGlzdCBhcmdzO1xuXG4iKTsKKysgICAgICBwcmludGYoIiAgdmFfc3RhcnQoYXJncywgb3BlcmFuZDApO1xuIik7CisrICAgICAgZm9yIChpID0gMTsgaSA8IG9wZXJhbmRzOyBpKyspCisrCXByaW50ZigiICBvcGVyYW5kJWQgPSB2YV9hcmcoYXJncywgcnR4KTtcbiIsIGkpOworKyAgICAgIHByaW50ZigiICB2YV9lbmQoYXJncyk7XG5cbiIpOworKyAgICB9CisrfQorKworK3N0YXRpYyB2b2lkCisgcHJpbnRfY29kZSAoUlRYX0NPREUgY29kZSkKKyB7CisgICBjb25zdCBjaGFyICpwMTsKK0BAIC00MDUsMTggKzQyMywxNiBAQCBnZW5faW5zbiAocnR4IGluc24sIGludCBsaW5lbm8pCisgICAgIGZhdGFsICgibWF0Y2hfZHVwIG9wZXJhbmQgbnVtYmVyIGhhcyBubyBtYXRjaF9vcGVyYW5kIik7CisgCisgICAvKiBPdXRwdXQgdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIGFyZ3VtZW50IGRlY2xhcmF0aW9ucy4gICovCistICBwcmludGYgKCJydHhcbmdlbl8lcyAoIiwgWFNUUiAoaW5zbiwgMCkpOworKyAgcHJpbnRmICgicnR4XG5nZW5fJXMgIiwgWFNUUiAoaW5zbiwgMCkpOworKworICAgaWYgKG9wZXJhbmRzKQorLSAgICBmb3IgKGkgPSAwOyBpIDwgb3BlcmFuZHM7IGkrKykKKy0gICAgICBpZiAoaSkKKy0JcHJpbnRmICgiLFxuXHRydHggb3BlcmFuZCVkIEFUVFJJQlVURV9VTlVTRUQiLCBpKTsKKy0gICAgICBlbHNlCistCXByaW50ZiAoInJ0eCBvcGVyYW5kJWQgQVRUUklCVVRFX1VOVVNFRCIsIGkpOworKyAgICBwcmludGYoIihydHggb3BlcmFuZDAgQVRUUklCVVRFX1VOVVNFRCwgLi4uKVxuIik7CisgICBlbHNlCistICAgIHByaW50ZiAoInZvaWQiKTsKKy0gIHByaW50ZiAoIilcbiIpOworKyAgICBwcmludGYoIih2b2lkKVxuIik7CisgICBwcmludGYgKCJ7XG4iKTsKKyAKKysgIGdlbl92YXJhcmdfcHJvbG9ndWUob3BlcmFuZHMpOworKworICAgLyogT3V0cHV0IGNvZGUgdG8gY29uc3RydWN0IGFuZCByZXR1cm4gdGhlIHJ0bCBmb3IgdGhlIGluc3RydWN0aW9uIGJvZHkuICAqLworIAorICAgaWYgKFhWRUNMRU4gKGluc24sIDEpID09IDEpCitAQCAtNDU2LDE2ICs0NzIsMTIgQEAgZ2VuX2V4cGFuZCAocnR4IGV4cGFuZCkKKyAgIG9wZXJhbmRzID0gbWF4X29wZXJhbmRfdmVjIChleHBhbmQsIDEpOworIAorICAgLyogT3V0cHV0IHRoZSBmdW5jdGlvbiBuYW1lIGFuZCBhcmd1bWVudCBkZWNsYXJhdGlvbnMuICAqLworLSAgcHJpbnRmICgicnR4XG5nZW5fJXMgKCIsIFhTVFIgKGV4cGFuZCwgMCkpOworKyAgcHJpbnRmICgicnR4XG5nZW5fJXMgIiwgWFNUUiAoZXhwYW5kLCAwKSk7CisgICBpZiAob3BlcmFuZHMpCistICAgIGZvciAoaSA9IDA7IGkgPCBvcGVyYW5kczsgaSsrKQorLSAgICAgIGlmIChpKQorLQlwcmludGYgKCIsXG5cdHJ0eCBvcGVyYW5kJWQiLCBpKTsKKy0gICAgICBlbHNlCistCXByaW50ZiAoInJ0eCBvcGVyYW5kJWQiLCBpKTsKKysgICAgcHJpbnRmKCIocnR4IG9wZXJhbmQwIEFUVFJJQlVURV9VTlVTRUQsIC4uLilcbiIpOworICAgZWxzZQorLSAgICBwcmludGYgKCJ2b2lkIik7CistICBwcmludGYgKCIpXG4iKTsKKysgICAgcHJpbnRmKCIodm9pZClcbiIpOworKworICAgcHJpbnRmICgie1xuIik7CisgCisgICAvKiBJZiB3ZSBkb24ndCBoYXZlIGFueSBDIGNvZGUgdG8gd3JpdGUsIG9ubHkgb25lIGluc24gaXMgYmVpbmcgd3JpdHRlbiwKK0BAIC00NzUsNiArNDg3LDggQEAgZ2VuX2V4cGFuZCAocnR4IGV4cGFuZCkKKyAgICAgICAmJiBvcGVyYW5kcyA+IG1heF9kdXBfb3BubworICAgICAgICYmIFhWRUNMRU4gKGV4cGFuZCwgMSkgPT0gMSkKKyAgICAgeworKyAgICAgIGdlbl92YXJhcmdfcHJvbG9ndWUob3BlcmFuZHMpOworKworICAgICAgIHByaW50ZiAoIiAgcmV0dXJuICIpOworICAgICAgIGdlbl9leHAgKFhWRUNFWFAgKGV4cGFuZCwgMSwgMCksIERFRklORV9FWFBBTkQsIE5VTEwpOworICAgICAgIHByaW50ZiAoIjtcbn1cblxuIik7CitAQCAtNDg4LDYgKzUwMiw3IEBAIGdlbl9leHBhbmQgKHJ0eCBleHBhbmQpCisgICBmb3IgKDsgaSA8PSBtYXhfc2NyYXRjaF9vcG5vOyBpKyspCisgICAgIHByaW50ZiAoIiAgcnR4IG9wZXJhbmQlZCBBVFRSSUJVVEVfVU5VU0VEO1xuIiwgaSk7CisgICBwcmludGYgKCIgIHJ0eCBfdmFsID0gMDtcbiIpOworKyAgZ2VuX3ZhcmFyZ19wcm9sb2d1ZShvcGVyYW5kcyk7CisgICBwcmludGYgKCIgIHN0YXJ0X3NlcXVlbmNlICgpO1xuIik7CisgCisgICAvKiBUaGUgZm91cnRoIG9wZXJhbmQgb2YgREVGSU5FX0VYUEFORCBpcyBzb21lIGNvZGUgdG8gYmUgZXhlY3V0ZWQKKy0tLSBhL2djYy9nZW5mbGFncy5jCisrKysgYi9nY2MvZ2VuZmxhZ3MuYworQEAgLTEyNyw3ICsxMjcsNiBAQCBzdGF0aWMgdm9pZAorIGdlbl9wcm90byAocnR4IGluc24pCisgeworICAgaW50IG51bSA9IG51bV9vcGVyYW5kcyAoaW5zbik7CistICBpbnQgaTsKKyAgIGNvbnN0IGNoYXIgKm5hbWUgPSBYU1RSIChpbnNuLCAwKTsKKyAgIGludCB0cnV0aCA9IG1heWJlX2V2YWxfY190ZXN0IChYU1RSIChpbnNuLCAyKSk7CisgCitAQCAtMTU4LDEyICsxNTcsNyBAQCBnZW5fcHJvdG8gKHJ0eCBpbnNuKQorICAgaWYgKG51bSA9PSAwKQorICAgICBmcHV0cyAoInZvaWQiLCBzdGRvdXQpOworICAgZWxzZQorLSAgICB7CistICAgICAgZm9yIChpID0gMTsgaSA8IG51bTsgaSsrKQorLQlmcHV0cyAoInJ0eCwgIiwgc3Rkb3V0KTsKKy0KKy0gICAgICBmcHV0cyAoInJ0eCIsIHN0ZG91dCk7CistICAgIH0KKysgICAgZnB1dHMoInJ0eCwgLi4uIiwgc3Rkb3V0KTsKKyAKKyAgIHB1dHMgKCIpOyIpOworIAorQEAgLTE3MywxMiArMTY3LDcgQEAgZ2VuX3Byb3RvIChydHggaW5zbikKKyAgICAgeworICAgICAgIHByaW50ZiAoInN0YXRpYyBpbmxpbmUgcnR4XG5nZW5fJXMiLCBuYW1lKTsKKyAgICAgICBpZiAobnVtID4gMCkKKy0JeworLQkgIHB1dGNoYXIgKCcoJyk7CistCSAgZm9yIChpID0gMDsgaSA8IG51bS0xOyBpKyspCistCSAgICBwcmludGYgKCJydHggQVJHX1VOVVNFRCAoJWMpLCAiLCAnYScgKyBpKTsKKy0JICBwcmludGYgKCJydHggQVJHX1VOVVNFRCAoJWMpKVxuIiwgJ2EnICsgaSk7CistCX0KKysJcHV0cygiKHJ0eCBBUkdfVU5VU0VEKGEpLCAuLi4pIik7CisgICAgICAgZWxzZQorIAlwdXRzICgiKHZvaWQpIik7CisgICAgICAgcHV0cyAoIntcbiAgcmV0dXJuIDA7XG59Iik7CistLS0gYS9nY2MvZ2Vub3V0cHV0LmMKKysrKyBiL2djYy9nZW5vdXRwdXQuYworQEAgLTM4Niw3ICszODYsNyBAQCBvdXRwdXRfaW5zbl9kYXRhICh2b2lkKQorIAl9CisgCisgICAgICAgaWYgKGQtPm5hbWUgJiYgZC0+bmFtZVswXSAhPSAnKicpCistCXByaW50ZiAoIiAgICAoaW5zbl9nZW5fZm4pIGdlbl8lcyxcbiIsIGQtPm5hbWUpOworKwlwcmludGYgKCIgICAgZ2VuXyVzLFxuIiwgZC0+bmFtZSk7CisgICAgICAgZWxzZQorIAlwcmludGYgKCIgICAgMCxcbiIpOworIAorLS0tIGEvZ2NjL2lmY3Z0LmMKKysrKyBiL2djYy9pZmN2dC5jCitAQCAtNzcsNyArNzcsNyBAQCBzdGF0aWMgaW50IG51bV9wb3NzaWJsZV9pZl9ibG9ja3M7Cisgc3RhdGljIGludCBudW1fdXBkYXRlZF9pZl9ibG9ja3M7CisgCisgLyogIyBvZiBjaGFuZ2VzIG1hZGUgd2hpY2ggcmVxdWlyZSBsaWZlIGluZm9ybWF0aW9uIHRvIGJlIHVwZGF0ZWQuICAqLworLXN0YXRpYyBpbnQgbnVtX3RydWVfY2hhbmdlczsKKytpbnQgbnVtX3RydWVfY2hhbmdlczsKKyAKKyAvKiBXaGV0aGVyIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbiBjaGFuZ2VzIHdlcmUgbWFkZS4gICovCisgc3RhdGljIGludCBjb25kX2V4ZWNfY2hhbmdlZF9wOworQEAgLTI4NywxMiArMjg3LDE1IEBAIGNvbmRfZXhlY19wcm9jZXNzX2luc25zIChjZV9pZl9ibG9ja190ICoKKyAgICAgICBpZiAobXVzdF9iZV9sYXN0KQorIAlyZXR1cm4gRkFMU0U7CisgCistICAgICAgaWYgKG1vZGlmaWVkX2luX3AgKHRlc3QsIGluc24pKQorLQl7CistCSAgaWYgKCFtb2Rfb2spCistCSAgICByZXR1cm4gRkFMU0U7CistCSAgbXVzdF9iZV9sYXN0ID0gVFJVRTsKKy0JfQorKyNpZmRlZiBJRkNWVF9BTExPV19NT0RJRllfVEVTVF9JTl9JTlNOICAgICAgIAorKyAgICAgIGlmICggIUlGQ1ZUX0FMTE9XX01PRElGWV9URVNUX0lOX0lOU04gKQorKyNlbmRpZgorKyAgICAgICAgaWYgKG1vZGlmaWVkX2luX3AgKHRlc3QsIGluc24pKQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgaWYgKCFtb2Rfb2spCisrICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisrICAgICAgICAgICAgbXVzdF9iZV9sYXN0ID0gVFJVRTsKKysgICAgICAgICAgfQorIAorICAgICAgIC8qIE5vdyBidWlsZCB0aGUgY29uZGl0aW9uYWwgZm9ybSBvZiB0aGUgaW5zdHJ1Y3Rpb24uICAqLworICAgICAgIHBhdHRlcm4gPSBQQVRURVJOIChpbnNuKTsKK0BAIC01NjYsMTYgKzU2OSwxOSBAQCBjb25kX2V4ZWNfcHJvY2Vzc19pZl9ibG9jayAoY2VfaWZfYmxvY2tfCisgICAvKiBEbyBhbnkgbWFjaGluZSBkZXBlbmRlbnQgZmluYWwgbW9kaWZpY2F0aW9ucy4gICovCisgICBJRkNWVF9NT0RJRllfRklOQUwgKGNlX2luZm8pOworICNlbmRpZgorLQorLSAgLyogQ29udmVyc2lvbiBzdWNjZWVkZWQuICAqLworLSAgaWYgKGR1bXBfZmlsZSkKKy0gICAgZnByaW50ZiAoZHVtcF9maWxlLCAiJWQgaW5zbiVzIGNvbnZlcnRlZCB0byBjb25kaXRpb25hbCBleGVjdXRpb24uXG4iLAorLQkgICAgIG5faW5zbnMsIChuX2luc25zID09IDEpID8gIiB3YXMiIDogInMgd2VyZSIpOworLQorKyAgCisgICAvKiBNZXJnZSB0aGUgYmxvY2tzISAgKi8KKy0gIG1lcmdlX2lmX2Jsb2NrIChjZV9pbmZvKTsKKy0gIGNvbmRfZXhlY19jaGFuZ2VkX3AgPSBUUlVFOworLSAgcmV0dXJuIFRSVUU7CisrICBpZiAoIHJlbG9hZF9jb21wbGV0ZWQgKXsKKysgICAgLyogQ29udmVyc2lvbiBzdWNjZWVkZWQuICAqLworKyAgICBpZiAoZHVtcF9maWxlKQorKyAgICAgIGZwcmludGYgKGR1bXBfZmlsZSwgIiVkIGluc24lcyBjb252ZXJ0ZWQgdG8gY29uZGl0aW9uYWwgZXhlY3V0aW9uLlxuIiwKKysgICAgICAgICAgICAgICBuX2luc25zLCAobl9pbnNucyA9PSAxKSA/ICIgd2FzIiA6ICJzIHdlcmUiKTsKKysgICAgCisrICAgIG1lcmdlX2lmX2Jsb2NrIChjZV9pbmZvKTsKKysgICAgY29uZF9leGVjX2NoYW5nZWRfcCA9IFRSVUU7CisrICAgIHJldHVybiBUUlVFOworKyAgfQorKyAgcmV0dXJuIEZBTFNFOworIAorICBmYWlsOgorICNpZmRlZiBJRkNWVF9NT0RJRllfQ0FOQ0VMCitAQCAtMTA1MCw3ICsxMDU2LDExIEBAIG5vY2VfdHJ5X2FkZGNjIChzdHJ1Y3Qgbm9jZV9pZl9pbmZvICppZl8KKyAJICAhPSBVTktOT1dOKSkKKyAgICAgeworICAgICAgIHJ0eCBjb25kID0gaWZfaW5mby0+Y29uZDsKKy0gICAgICBlbnVtIHJ0eF9jb2RlIGNvZGUgPSByZXZlcnNlZF9jb21wYXJpc29uX2NvZGUgKGNvbmQsIGlmX2luZm8tPmp1bXApOworKyAgICAgIC8qIFRoaXMgZ2VuZXJhdGVzIHdyb25nIGNvZGUgZm9yIEFWUjMyLiBUaGUgY29uZCBjb2RlIG5lZWQgbm90IGJlIHJldmVyc2VkCisrICAgICAgICAgc2luY2UgdGhlIGFkZG1vZGVjYyBwYXR0ZXJucyBhZGQgaWYgdGhlIGNvbmRpdGlvbiBpcyBOT1QgbWV0LiAqLworKyAgICAgIC8qICAgZW51bSBydHhfY29kZSBjb2RlID0gcmV2ZXJzZWRfY29tcGFyaXNvbl9jb2RlIChjb25kLCBpZl9pbmZvLT5qdW1wKTsqLworKyAgICAgIGVudW0gcnR4X2NvZGUgY29kZSA9IEdFVF9DT0RFKGNvbmQpOworKworIAorICAgICAgIC8qIEZpcnN0IHRyeSB0byB1c2UgYWRkY2MgcGF0dGVybi4gICovCisgICAgICAgaWYgKGdlbmVyYWxfb3BlcmFuZCAoWEVYUCAoY29uZCwgMCksIFZPSURtb2RlKQorQEAgLTI2NTEsNyArMjY2MSwxMiBAQCBwcm9jZXNzX2lmX2Jsb2NrIChzdHJ1Y3QgY2VfaWZfYmxvY2sgKiBjCisgICAgICAgJiYgY29uZF9tb3ZlX3Byb2Nlc3NfaWZfYmxvY2sgKGNlX2luZm8pKQorICAgICByZXR1cm4gVFJVRTsKKyAKKy0gIGlmIChIQVZFX2NvbmRpdGlvbmFsX2V4ZWN1dGlvbiAmJiByZWxvYWRfY29tcGxldGVkKQorKyAgaWYgKEhBVkVfY29uZGl0aW9uYWxfZXhlY3V0aW9uICYmIAorKyNpZmRlZiBJRkNWVF9DT05EX0VYRUNfQkVGT1JFX1JFTE9BRAorKyAgICAgIChyZWxvYWRfY29tcGxldGVkIHx8IElGQ1ZUX0NPTkRfRVhFQ19CRUZPUkVfUkVMT0FEKSkKKysjZWxzZQorKyAgICAgIHJlbG9hZF9jb21wbGV0ZWQpCisrI2VuZGlmCisgICAgIHsKKyAgICAgICAvKiBJZiB3ZSBoYXZlICYmIGFuZCB8fCB0ZXN0cywgdHJ5IHRvIGZpcnN0IGhhbmRsZSBjb21iaW5pbmcgdGhlICYmIGFuZAorICAgICAgICAgIHx8IHRlc3RzIGludG8gdGhlIGNvbmRpdGlvbmFsIGNvZGUsIGFuZCBpZiB0aGF0IGZhaWxzLCBnbyBiYWNrIGFuZAorQEAgLTQwMzYsNiArNDA1MSwxNSBAQCByZXN0X29mX2hhbmRsZV9pZl9hZnRlcl9yZWxvYWQgKHZvaWQpCisgICBjbGVhbnVwX2NmZyAoQ0xFQU5VUF9FWFBFTlNJVkUKKyAgICAgICAgICAgICAgICB8IENMRUFOVVBfVVBEQVRFX0xJRkUKKyAgICAgICAgICAgICAgICB8IChmbGFnX2Nyb3NzanVtcGluZyA/IENMRUFOVVBfQ1JPU1NKVU1QIDogMCkpOworKyAgCisrICAvKiBIYWNrIGZvciB0aGUgQVZSMzIgZXhwZXJpbWVudGFsIGlmY3Z0IHByb2Nlc3NpbmcgYmVmb3JlIHJlbG9hZC4KKysgICAgIFRoZSBBVlIzMiBzcGVjaWZpYyBpZmN2dCBjb2RlIG5lZWRzIHRvIGtub3cgd2hlbiBpZmN2dCBhZnRlciByZWxvYWQgCisrICAgICBoYXMgYmVndW4uICovCisrI2lmZGVmIElGQ1ZUX0NPTkRfRVhFQ19CRUZPUkVfUkVMT0FECisrICBpZiAoIElGQ1ZUX0NPTkRfRVhFQ19CRUZPUkVfUkVMT0FEICkKKysgICAgY2Z1bi0+bWFjaGluZS0+aWZjdnRfYWZ0ZXJfcmVsb2FkID0gMTsKKysjZW5kaWYKKysgIAorICAgaWYgKGZsYWdfaWZfY29udmVyc2lvbjIpCisgICAgIGlmX2NvbnZlcnQgKDEpOworICAgcmV0dXJuIDA7CistLS0gYS9nY2MvbG9uZ2xvbmcuaAorKysrIGIvZ2NjL2xvbmdsb25nLmgKK0BAIC0yMjYsNiArMjI2LDQxIEBAIFVESXR5cGUgX191bXVsc2lkaTMgKFVTSXR5cGUsIFVTSXR5cGUpOworICNkZWZpbmUgVURJVl9USU1FIDEwMAorICNlbmRpZiAvKiBfX2FybV9fICovCisgCisrI2lmIGRlZmluZWQgKF9fYXZyMzJfXykgJiYgV19UWVBFX1NJWkUgPT0gMzIKKysjZGVmaW5lIGFkZF9zc2FhYWEoc2gsIHNsLCBhaCwgYWwsIGJoLCBibCkgXAorKyAgX19hc21fXyAoImFkZFx0JTEsICU0LCAlNVxuXHRhZGNcdCUwLCAlMiwgJTMiCQlcCisrCSAgIDogIj1yIiAoKFVTSXR5cGUpIChzaCkpLAkJCQkJXAorKwkgICAgICI9JnIiICgoVVNJdHlwZSkgKHNsKSkJCQkJCVwKKysJICAgOiAiciIgKChVU0l0eXBlKSAoYWgpKSwJCQkJCVwKKysJICAgICAiciIgKChVU0l0eXBlKSAoYmgpKSwJCQkJCVwKKysJICAgICAiciIgKChVU0l0eXBlKSAoYWwpKSwJCQkJCVwKKysJICAgICAiciIgKChVU0l0eXBlKSAoYmwpKSBfX0NMT0JCRVJfQ0MpCisrI2RlZmluZSBzdWJfZGRtbXNzKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpIFwKKysgIF9fYXNtX18gKCJzdWJcdCUxLCAlNCwgJTVcblx0c2JjXHQlMCwgJTIsICUzIgkJXAorKwkgICA6ICI9ciIgKChVU0l0eXBlKSAoc2gpKSwJCQkJCVwKKysJICAgICAiPSZyIiAoKFVTSXR5cGUpIChzbCkpCQkJCQlcCisrCSAgIDogInIiICgoVVNJdHlwZSkgKGFoKSksCQkJCQlcCisrCSAgICAgInIiICgoVVNJdHlwZSkgKGJoKSksCQkJCQlcCisrCSAgICAgInIiICgoVVNJdHlwZSkgKGFsKSksCQkJCQlcCisrCSAgICAgInIiICgoVVNJdHlwZSkgKGJsKSkgX19DTE9CQkVSX0NDKQorKworKyNpZiAhZGVmaW5lZCAoX19BVlIzMl9VQ19fKSB8fCBfX0FWUjMyX1VDX18gIT0gMworKyNkZWZpbmUgX191bXVsc2lkaTMoYSxiKSAoKFVESXR5cGUpKGEpICogKFVESXR5cGUpKGIpKQorKworKyNkZWZpbmUgdW11bF9wcG1tKHcxLCB3MCwgdSwgdikgXAorK3sJCQkJCQkJCQlcCisrICBEV3VuaW9uIF9fdzsJCQkJCQkJCVwKKysgIF9fdy5sbCA9IF9fdW11bHNpZGkzICh1LCB2KTsJCQkJCQlcCisrICB3MSA9IF9fdy5zLmhpZ2g7CQkJCQkJCVwKKysgIHcwID0gX193LnMubG93OwkJCQkJCQlcCisrfQorKyNlbmRpZgorKworKyNkZWZpbmUgY291bnRfbGVhZGluZ196ZXJvcyhDT1VOVCxYKQkoKENPVU5UKSA9IF9fYnVpbHRpbl9jbHogKFgpKQorKyNkZWZpbmUgY291bnRfdHJhaWxpbmdfemVyb3MoQ09VTlQsWCkJKChDT1VOVCkgPSBfX2J1aWx0aW5fY3R6IChYKSkKKysjZGVmaW5lIENPVU5UX0xFQURJTkdfWkVST1NfMCAzMgorKyNlbmRpZgorKworICNpZiBkZWZpbmVkIChfX2hwcGEpICYmIFdfVFlQRV9TSVpFID09IDMyCisgI2RlZmluZSBhZGRfc3NhYWFhKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpIFwKKyAgIF9fYXNtX18gKCJhZGQgJTQsJTUsJTFcblx0YWRkYyAlMiwlMywlMCIJCQkJXAorLS0tIGEvZ2NjL29wdGFicy5oCisrKysgYi9nY2Mvb3B0YWJzLmgKK0BAIC00MzEsNyArNDMxLDcgQEAgZXh0ZXJuIGVudW0gaW5zbl9jb2RlIHJlbG9hZF9vdXRfb3B0YWJbTgorIGV4dGVybiBHVFkoKCkpIG9wdGFiIGNvZGVfdG9fb3B0YWJbTlVNX1JUWF9DT0RFICsgMV07CisgCisgDAorLXR5cGVkZWYgcnR4ICgqcnR4ZnVuKSAocnR4KTsKKyt0eXBlZGVmIHJ0eCAoKnJ0eGZ1bikgKHJ0eCwgLi4uKTsKKyAKKyAvKiBJbmRleGVkIGJ5IHRoZSBydHgtY29kZSBmb3IgYSBjb25kaXRpb25hbCAoZS5nLiBFUSwgTFQsLi4uKQorICAgIGdpdmVzIHRoZSBnZW5fZnVuY3Rpb24gdG8gbWFrZSBhIGJyYW5jaCB0byB0ZXN0IHRoYXQgY29uZGl0aW9uLiAgKi8KKy0tLSBhL2djYy9yZWdyZW5hbWUuYworKysrIGIvZ2NjL3JlZ3JlbmFtZS5jCitAQCAtMTU5Miw2ICsxNTkyLDkgQEAgY29weXByb3BfaGFyZHJlZ19mb3J3YXJkXzEgKGJhc2ljX2Jsb2NrIAorICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICBydHggaW5zbjsKKyAKKysgIHJ0eCBwcmV2X3ByZWRfdGVzdDsKKysgIGludCBwcmV2X3ByZWRfaW5zbl9za2lwcGVkID0gMDsKKysKKyAgIGZvciAoaW5zbiA9IEJCX0hFQUQgKGJiKTsgOyBpbnNuID0gTkVYVF9JTlNOIChpbnNuKSkKKyAgICAgeworICAgICAgIGludCBuX29wcywgaSwgYWx0LCBwcmVkaWNhdGVkOworQEAgLTE2MzAsNyArMTYzMyw2MCBAQCBjb3B5cHJvcF9oYXJkcmVnX2ZvcndhcmRfMSAoYmFzaWNfYmxvY2sgCisgCSAgICAgIHx8IChwcmVkaWNhdGVkICYmIHJlY29nX2RhdGEub3BlcmFuZF90eXBlW2ldID09IE9QX09VVCkpCisgCSAgICByZWNvZ19kYXRhLm9wZXJhbmRfdHlwZVtpXSA9IE9QX0lOT1VUOworIAl9CisrICAgICAgCisgCisrICAgICAgLyogQWRkZWQgZm9yIHRhcmdldHMgKEFWUjMyKSB3aGljaCBzdXBwb3J0cyB0ZXN0IG9wZXJhbmRzIHRvIGJlIG1vZGlmaWVkCisrICAgICAgICAgaW4gY29uZF9leGVjIGluc3RydWN0aW9uLiBGb3IgdGhlc2UgdGFyZ2V0cyB3ZSBjYW5ub3QgbWFrZSBhIGNoYW5nZSB0bworKyAgICAgICAgIHRoZSB0ZXN0IG9wZXJhbmRzIGlmIG9uZSBvZiB0aGUgdGVzdCBvcGVyYW5kcyBpcyBhbiBvdXRwdXQgb3BlcmFuZCBUaGlzIGJlYWN1c2UKKysgICAgICAgICBjaGFuZ2luZyB0aGUgdGVzdCBvcGVyYW5kcyBtaWdodCBjYXVzZSB0aGUgbmVlZCBmb3IgaW5zZXJ0aW5nIGEgbmV3IHRlc3QKKysgICAgICAgICBpbnNucyBpbiB0aGUgbWlkZGxlIG9mIGEgc2VxdWVuY2Ugb2YgY29uZF9leGVjIGluc25zIGFuZCBpZiB0aGUgdGVzdCBvcGVyYW5kcworKyAgICAgICAgIGFyZSBtb2RpZmllZCB0aGVzZSB0ZXN0cyB3aWxsIGZhaWwuCisrICAgICAgKi8KKysgICAgICAKKysgICAgICBpZiAoIElGQ1ZUX0FMTE9XX01PRElGWV9URVNUX0lOX0lOU04KKysgICAgICAgICAgICYmIHByZWRpY2F0ZWQgKQorKyAgICAgICAgeyAKKysgICAgICAgICAgaW50IGluc25fc2tpcHBlZCA9IDA7CisrICAgICAgICAgIHJ0eCB0ZXN0ID0gQ09ORF9FWEVDX1RFU1QgKFBBVFRFUk4gKGluc24pKTsKKysKKysgICAgICAgICAgLyogQ2hlY2sgaWYgdGhlIHByZXZpb3VzIGluc24gd2FzIGEgc2tpcHBlZCBwcmVkaWNhdGVkIGluc24gd2l0aCB0aGUgc2FtZQorKyAgICAgICAgICAgICB0ZXN0IGFzIHRoaXMgcHJlZGljYXRlZCBpbnNucy4gSWYgc28gd2UgY2Fubm90IGRvIGFueSBtb2RpZmljYXRpb24gdG8KKysgICAgICAgICAgICAgdGhpcyBpbnNuIGVpdGhlciBzaW5jZSB3ZSBjYW5ub3QgZW1pdCB0aGUgdGVzdCBpbnNuIGJlY2F1c2UgdGhlIG9wZXJhbmRzCisrICAgICAgICAgICAgIGFyZSBjbG9iYmVyZWQuICovCisrICAgICAgICAgIGlmICggcHJldl9wcmVkX2luc25fc2tpcHBlZCAKKysgICAgICAgICAgICAgICAmJiAocnR4X2VxdWFsX3AgKHRlc3QsIHByZXZfcHJlZF90ZXN0KSAKKysgICAgICAgICAgICAgICAgICAgfHwgcnR4X2VxdWFsX3AgKHRlc3QsIHJldmVyc2VkX2NvbmRpdGlvbiAocHJldl9wcmVkX3Rlc3QpKSkgKQorKyAgICAgICAgICAgIHsgCisrICAgICAgICAgICAgICBpbnNuX3NraXBwZWQgPSAxOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIC8qIENoZWNrIGlmIHRoZSBvdXRwdXQgb3BlcmFuZCBpcyB1c2VkIGluIHRoZSB0ZXN0IGV4cHJlc3Npb24uICovCisrICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbl9vcHM7ICsraSkKKysgICAgICAgICAgICAgICAgaWYgKCByZWNvZ19kYXRhLm9wZXJhbmRfdHlwZVtpXSA9PSBPUF9JTk9VVCAKKysgICAgICAgICAgICAgICAgICAgICAmJiByZWdfbWVudGlvbmVkX3AgKHJlY29nX2RhdGEub3BlcmFuZFtpXSwgdGVzdCkgKQorKyAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGluc25fc2tpcHBlZCA9IDE7CisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAKKysgICAgICAgICAgICB9CisrICAgICAgICAgIAorKyAgICAgICAgICBwcmV2X3ByZWRfdGVzdCA9IHRlc3Q7CisrICAgICAgICAgIHByZXZfcHJlZF9pbnNuX3NraXBwZWQgPSBpbnNuX3NraXBwZWQ7CisrICAgICAgICAgIGlmICggaW5zbl9za2lwcGVkICkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBpZiAoaW5zbiA9PSBCQl9FTkQgKGJiKSkKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0gCisrICAgICAgZWxzZSAKKysgICAgICAgIHsKKysgICAgICAgICAgcHJldl9wcmVkX2luc25fc2tpcHBlZCA9IDA7CisrICAgICAgICB9CisrICAgICAgCisgICAgICAgLyogRm9yIGVhY2ggZWFybHljbG9iYmVyIG9wZXJhbmQsIHphcCB0aGUgdmFsdWUgZGF0YS4gICovCisgICAgICAgZm9yIChpID0gMDsgaSA8IG5fb3BzOyBpKyspCisgCWlmIChyZWNvZ19vcF9hbHRbaV1bYWx0XS5lYXJseWNsb2JiZXIpCistLS0gYS9nY2MvcmVsb2FkLmMKKysrKyBiL2djYy9yZWxvYWQuYworQEAgLTQ1NzQsNyArNDU3NCw3IEBAIGZpbmRfcmVsb2Fkc190b3BsZXYgKHJ0eCB4LCBpbnQgb3BudW0sIGUKKyAJICAgICAgeCA9IG1lbTsKKyAJICAgICAgaSA9IGZpbmRfcmVsb2Fkc19hZGRyZXNzIChHRVRfTU9ERSAoeCksICZ4LCBYRVhQICh4LCAwKSwgJlhFWFAgKHgsIDApLAorIAkJCQkJb3BudW0sIHR5cGUsIGluZF9sZXZlbHMsIGluc24pOworLQkgICAgICBpZiAoeCAhPSBtZW0pCisrICAgICAgICAgaWYgKCFydHhfZXF1YWxfcCAoeCwgbWVtKSkKKyAJCXB1c2hfcmVnX2VxdWl2X2FsdF9tZW0gKHJlZ25vLCB4KTsKKyAJICAgICAgaWYgKGFkZHJlc3NfcmVsb2FkZWQpCisgCQkqYWRkcmVzc19yZWxvYWRlZCA9IGk7CistLS0gYS9nY2Mvc2NoZWQtZGVwcy5jCisrKysgYi9nY2Mvc2NoZWQtZGVwcy5jCitAQCAtNjQ5LDcgKzY0OSwxNCBAQCBmaXh1cF9zY2hlZF9ncm91cHMgKHJ0eCBpbnNuKQorIAorICAgcHJldl9ub25ub3RlID0gcHJldl9ub25ub3RlX2luc24gKGluc24pOworICAgaWYgKEJMT0NLX0ZPUl9JTlNOIChpbnNuKSA9PSBCTE9DS19GT1JfSU5TTiAocHJldl9ub25ub3RlKQorLSAgICAgICYmICEgc2NoZWRfaW5zbnNfY29uZGl0aW9uc19tdXRleF9wIChpbnNuLCBwcmV2X25vbm5vdGUpKQorKyAgICAgIC8qIE1vZGlmaWNhdGlvbiBmb3IgQVZSMzIgYnkgUlA6IFdoeSBpcyB0aGlzIGhlcmUsIHRoaXMgd2lsbAorKyAgICAgICAgIGNhdXNlIGluc3RydWN0aW9uIHRvIGJlIHdpdGhvdXQgYW55IGRlcGVuZGVuY2llcyB3aGljaCBtaWdodAorKyAgICAgICAgIGNhdXNlIGl0IHRvIGJlIG1vdmVkIGFueXdoZXJlLiBGb3IgdGhlIEFWUjMyIHdlIHRyeSB0byBrZWVwCisrICAgICAgICAgYSBncm91cCBvZiBjb25kaXRpb25hbHMgdG9nZXRoZXIgZXZlbiBpZiB0aGV5IGFyZSBtdXR1YWwgZXhjbHVzaXZlLgorKyAgICAgICovCisrICAgICAgJiYgKCEgc2NoZWRfaW5zbnNfY29uZGl0aW9uc19tdXRleF9wIChpbnNuLCBwcmV2X25vbm5vdGUpCisrICAgICAgICAgIHx8IEdFVF9DT0RFIChQQVRURVJOIChpbnNuKSkgPT0gQ09ORF9FWEVDICkKKysgICAgICApCisgICAgIGFkZF9kZXBlbmRlbmNlIChpbnNuLCBwcmV2X25vbm5vdGUsIFJFR19ERVBfQU5USSk7CisgfQorIAwKK0BAIC0xMTIzLDggKzExMzAsMjkgQEAgc2NoZWRfYW5hbHl6ZV9pbnNuIChzdHJ1Y3QgZGVwcyAqZGVwcywgcgorIAorICAgaWYgKGNvZGUgPT0gQ09ORF9FWEVDKQorICAgICB7CisrI2lmZGVmIElGQ1ZUX0FMTE9XX01PRElGWV9URVNUX0lOX0lOU04KKysgICAgICBpZiAoSUZDVlRfQUxMT1dfTU9ESUZZX1RFU1RfSU5fSU5TTikKKysgICAgICAgIHsKKysgICAgICAgICAgLyogQ2hlY2sgaWYgd2UgaGF2ZSBhIGdyb3VwIG9nIGNvbmRpdGlvbmFsIGluc3RydWN0aW9ucyB3aXRoIHRoZSBzYW1lIHRlc3QuIAorKyAgICAgICAgICAgICBJZiBzbyB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXkgYXJlIG5vdCBzY2hlZHVsZWQgYXBhcnQgaW4gb3JkZXIgdG8KKysgICAgICAgICAgICAgYXZvaWQgdW5uZWNlc2FycnkgdGVzdHMgYW5kIGlmIG9uZSBvZiB0aGUgcmVnaXN0ZXJzIGluIHRoZSB0ZXN0IGlzIG1vZGlmaWVkCisrICAgICAgICAgICAgIGluIHRoZSBpbnN0cnVjdGlvbiB0aGlzIGlzIG5lZWRlZCB0byBlbnN1cmUgY29ycmVjdCBjb2RlLiAqLworKyAgICAgICAgICBpZiAoIHByZXZfbm9ubm90ZV9pbnNuIChpbnNuKQorKyAgICAgICAgICAgICAgICYmIElOU05fUCAocHJldl9ub25ub3RlX2luc24gKGluc24pKQorKyAgICAgICAgICAgICAgICYmIEdFVF9DT0RFIChQQVRURVJOIChwcmV2X25vbm5vdGVfaW5zbiAoaW5zbikpKSA9PSBDT05EX0VYRUMgCisrICAgICAgICAgICAgICAgJiYgcnR4X2VxdWFsX3AgKFhFWFAoQ09ORF9FWEVDX1RFU1QgKFBBVFRFUk4gKHByZXZfbm9ubm90ZV9pbnNuIChpbnNuKSkpLCAwKSwgWEVYUCAoQ09ORF9FWEVDX1RFU1QgKHgpLCAwKSkKKysgICAgICAgICAgICAgICAmJiBydHhfZXF1YWxfcCAoWEVYUChDT05EX0VYRUNfVEVTVCAoUEFUVEVSTiAocHJldl9ub25ub3RlX2luc24gKGluc24pKSksIDEpLCBYRVhQIChDT05EX0VYRUNfVEVTVCAoeCksIDEpKQorKyAgICAgICAgICAgICAgICYmICggR0VUX0NPREUgKENPTkRfRVhFQ19URVNUIChQQVRURVJOIChwcmV2X25vbm5vdGVfaW5zbiAoaW5zbikpKSkgPT0gR0VUX0NPREUgKENPTkRfRVhFQ19URVNUICh4KSkKKysgICAgICAgICAgICAgICAgICAgIHx8IEdFVF9DT0RFIChDT05EX0VYRUNfVEVTVCAoUEFUVEVSTiAocHJldl9ub25ub3RlX2luc24gKGluc24pKSkpID09IHJldmVyc2VkX2NvbXBhcmlzb25fY29kZSAoQ09ORF9FWEVDX1RFU1QgKHgpLCBpbnNuKSkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgU0NIRURfR1JPVVBfUCAoaW5zbikgPSAxOworKyAgICAgICAgICAgICAgLy9DQU5UX01PVkUgKHByZXZfbm9ubm90ZV9pbnNuIChpbnNuKSkgPSAxOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysjZW5kaWYgICAgICAKKyAgICAgICBzY2hlZF9hbmFseXplXzIgKGRlcHMsIENPTkRfRVhFQ19URVNUICh4KSwgaW5zbik7CisgCisrCisgICAgICAgLyogPz8/IFNob3VsZCBiZSByZWNvcmRpbmcgY29uZGl0aW9ucyBzbyB3ZSByZWR1Y2UgdGhlIG51bWJlciBvZgorIAkgZmFsc2UgZGVwZW5kZW5jaWVzLiAgKi8KKyAgICAgICB4ID0gQ09ORF9FWEVDX0NPREUgKHgpOworLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvc2liY2FsbC0zLmMKKysrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3NpYmNhbGwtMy5jCitAQCAtNSw3ICs1LDcgQEAKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEluYy4KKyAgICBDb250cmlidXRlZCBieSBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBiaXRyYW5nZS5jb20+ICAqLworIAorLS8qIHsgZGctZG8gcnVuIHsgeGZhaWwgYXJjLSotKiBhdnItKi0qIGM0eC0qLSogY3Jpcy0qLSogaDgzMDAtKi0qIGhwcGEqNjQqLSotKiBtMzJyLSotKiBtNjhoYzE/LSotKiBtNjgxPy0qLSogbTY4MCotKi0qIG02OGstKi0qIG1jb3JlLSotKiBtbjEwMzAwLSotKiB4c3Rvcm15MTYtKi0qIHY4NTAqLSotKiB2YXgtKi0qIHh0ZW5zYS0qLSogfSB9ICovCisrLyogeyBkZy1kbyBydW4geyB4ZmFpbCBhcmMtKi0qIGF2ci0qLSogYXZyMzItKi0qIGM0eC0qLSogY3Jpcy0qLSogaDgzMDAtKi0qIGhwcGEqNjQqLSotKiBtMzJyLSotKiBtNjhoYzE/LSotKiBtNjgxPy0qLSogbTY4MCotKi0qIG02OGstKi0qIG1jb3JlLSotKiBtbjEwMzAwLSotKiB4c3Rvcm15MTYtKi0qIHY4NTAqLSotKiB2YXgtKi0qIHh0ZW5zYS0qLSogfSB9ICovCisgLyogeyBkZy1vcHRpb25zICItTzIgLWZvcHRpbWl6ZS1zaWJsaW5nLWNhbGxzIiB9ICovCisgCisgLyogVGhlIG9wdGlvbiAtZm9wdGltaXplLXNpYmxpbmctY2FsbHMgaXMgdGhlIGRlZmF1bHQsIGJ1dCBzZXJ2ZXMgYXMKKy0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3NpYmNhbGwtNC5jCisrKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9zaWJjYWxsLTQuYworQEAgLTUsNyArNSw3IEBACisgICAgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBJbmMuCisgICAgQ29udHJpYnV0ZWQgYnkgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYml0cmFuZ2UuY29tPiAgKi8KKyAKKy0vKiB7IGRnLWRvIHJ1biB7IHhmYWlsIGFyYy0qLSogYXZyLSotKiBjNHgtKi0qIGNyaXMtKi0qIGg4MzAwLSotKiBocHBhKjY0Ki0qLSogbTMyci0qLSogbTY4aGMxPy0qLSogbTY4MT8tKi0qIG02ODAqLSotKiBtNjhrLSotKiBtY29yZS0qLSogbW4xMDMwMC0qLSogeHN0b3JteTE2LSotKiB2ODUwKi0qLSogdmF4LSotKiB4dGVuc2EtKi0qIH0gfSAqLworKy8qIHsgZGctZG8gcnVuIHsgeGZhaWwgYXJjLSotKiBhdnItKi0qIGF2cjMyLSotKiBjNHgtKi0qIGNyaXMtKi0qIGg4MzAwLSotKiBocHBhKjY0Ki0qLSogbTMyci0qLSogbTY4aGMxPy0qLSogbTY4MT8tKi0qIG02ODAqLSotKiBtNjhrLSotKiBtY29yZS0qLSogbW4xMDMwMC0qLSogeHN0b3JteTE2LSotKiB2ODUwKi0qLSogdmF4LSotKiB4dGVuc2EtKi0qIH0gfSAqLworIC8qIHsgZGctb3B0aW9ucyAiLU8yIC1mb3B0aW1pemUtc2libGluZy1jYWxscyIgfSAqLworIAorIC8qIFRoZSBvcHRpb24gLWZvcHRpbWl6ZS1zaWJsaW5nLWNhbGxzIGlzIHRoZSBkZWZhdWx0LCBidXQgc2VydmVzIGFzCistLS0gYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmFtcG9saW5lLTEuYworKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJhbXBvbGluZS0xLmMKK0BAIC00Niw2ICs0Niw4IEBAIHZvaWQgZm9vICh2b2lkKQorIAorIGludCBtYWluICh2b2lkKQorIHsKKysjaWZuZGVmIE5PX1RSQU1QT0xJTkVTCisgICBmb28gKCk7CisrI2VuZGlmCisgICByZXR1cm4gMDsKKyB9CistLS0gYS9nY2MvdGVzdHN1aXRlL2crKy5vbGQtZGVqYS9nKysucHQvc3RhdGljMTEuQworKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysub2xkLWRlamEvZysrLnB0L3N0YXRpYzExLkMKK0BAIC0yLDcgKzIsNyBAQAorIC8vIGluIHRoZWlyIGRlamFnbnUgYmFzZWJvYXJkIGRlc2NyaXB0aW9uKSByZXF1aXJlIHRoYXQgdGhlIHN0YXR1cyBpcworIC8vIGZpbmFsIHdoZW4gZXhpdCBpcyBlbnRlcmVkIChvciBtYWluIHJldHVybnMpLCBhbmQgbm90ICJvdmVycnVsZWQiIGJ5IGEKKyAvLyBkZXN0cnVjdG9yIGNhbGxpbmcgX2V4aXQuICBJdCdzIG5vdCByZWFsbHkgd29ydGggaXQgdG8gaGFuZGxlIHRoYXQuCistLy8geyBkZy1kbyBydW4geyB4ZmFpbCBtbWl4LWtudXRoLW1taXh3YXJlIHh0ZW5zYS0qLWVsZiogYXJtKi0qLWVsZiBhcm0qLSotZWFiaSBtNjhrLSotZWxmIH0gfQorKy8vIHsgZGctZG8gcnVuIHsgeGZhaWwgbW1peC1rbnV0aC1tbWl4d2FyZSB4dGVuc2EtKi1lbGYqIGF2cjMyLSotZWxmIGFybSotKi1lbGYgYXJtKi0qLWVhYmkgbTY4ay0qLWVsZiB9IH0KKyAKKyAvLyBCdWc6IGcrKyB3YXMgZmFpbGluZyB0byBkZXN0cm95IEM8aW50Pjo6YSBiZWNhdXNlIGl0IHdhcyB1c2luZyB0d28KKyAvLyBkaWZmZXJlbnQgc2VudHJ5IHZhcmlhYmxlcyBmb3IgY29uc3RydWN0aW9uIGFuZCBkZXN0cnVjdGlvbi4KKy0tLSBhL2djYy92ZXJzaW9uLmMKKysrKyBiL2djYy92ZXJzaW9uLmMKK0BAIC04LDcgKzgsNyBAQAorICAgIGluIHBhcmVudGhlc2VzLiAgWW91IG1heSBhbHNvIHdpc2ggdG8gaW5jbHVkZSBhIG51bWJlciBpbmRpY2F0aW5nCisgICAgdGhlIHJldmlzaW9uIG9mIHlvdXIgbW9kaWZpZWQgY29tcGlsZXIuICAqLworIAorLSNkZWZpbmUgVkVSU1VGRklYICIiCisrI2RlZmluZSBWRVJTVUZGSVggIi1hdG1lbC4xLjEuMy5hdnIzMmxpbnV4LjEiCisgCisgLyogVGhpcyBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIG9ubGluZSBkb2N1bWVudCBnaXZpbmcgaW5zdHJ1Y3Rpb25zIGZvcgorICAgIHJlcG9ydGluZyBidWdzLiAgSWYgeW91IGRpc3RyaWJ1dGUgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIEdDQywKK0BAIC0xNyw5ICsxNyw5IEBACisgICAgZm9yd2FyZCB1cyBidWdzIHJlcG9ydGVkIHRvIHlvdSwgaWYgeW91IGRldGVybWluZSB0aGF0IHRoZXkgYXJlCisgICAgbm90IGJ1Z3MgaW4geW91ciBtb2RpZmljYXRpb25zLikgICovCisgCistY29uc3QgY2hhciBidWdfcmVwb3J0X3VybFtdID0gIjxVUkw6aHR0cDovL2djYy5nbnUub3JnL2J1Z3MuaHRtbD4iOworK2NvbnN0IGNoYXIgYnVnX3JlcG9ydF91cmxbXSA9ICI8VVJMOmh0dHA6Ly93d3cuYXRtZWwuY29tL2F2cjMyLz4iOworIAorIC8qIFRoZSBjb21wbGV0ZSB2ZXJzaW9uIHN0cmluZywgYXNzZW1ibGVkIGZyb20gc2V2ZXJhbCBwaWVjZXMuCisgICAgQkFTRVZFUiwgREFURVNUQU1QLCBhbmQgREVWUEhBU0UgYXJlIGRlZmluZWQgYnkgdGhlIE1ha2VmaWxlLiAgKi8KKyAKKy1jb25zdCBjaGFyIHZlcnNpb25fc3RyaW5nW10gPSBCQVNFVkVSIERBVEVTVEFNUCBERVZQSEFTRSBWRVJTVUZGSVg7CisrY29uc3QgY2hhciB2ZXJzaW9uX3N0cmluZ1tdID0gQkFTRVZFUiBWRVJTVUZGSVggREFURVNUQU1QIERFVlBIQVNFOworLS0tIGEvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAorKysrIGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAorQEAgLTEyNSwxNSArMTI1LDYgQEAgQUNfREVGVU4oW0dMSUJDWFhfQ09ORklHVVJFXSwgWworICAgIyMgb3RoZXIgbWFjcm9zIGZyb20gZG9pbmcgdGhlIHNhbWUuICBUaGlzIHNob3VsZCBiZSBhdXRvbWF0ZWQuKSAgLXBtZQorICAgbmVlZF9saWJtYXRoPW5vCisgCistICAjIENoZWNrIGZvciB1Q2xpYmMgc2luY2UgTGludXggcGxhdGZvcm1zIHVzZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbgorLSAgIyBkaXJlY3RvcmllcyBkZXBlbmRpbmcgb24gdGhlIEMgbGlicmFyeSBpbiB1c2UuCistICBBQ19FR1JFUF9DUFAoW191c2luZ191Y2xpYmNdLCBbCistICAjaW5jbHVkZSA8c3RkaW8uaD4KKy0gICNpZiBfX1VDTElCQ19fCistICAgIF91c2luZ191Y2xpYmMKKy0gICNlbmRpZgorLSAgXSwgdWNsaWJjPXllcywgdWNsaWJjPW5vKQorLQorICAgIyBGaW5kIHBsYXRmb3JtLXNwZWNpZmljIGRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgY29uZmlndXJhdGlvbiBpbmZvLgorICAgIyBBbHNvIHBvc3NpYmx5IG1vZGlmeSBmbGFncyB1c2VkIGVsc2V3aGVyZSwgYXMgbmVlZGVkIGJ5IHRoZSBwbGF0Zm9ybS4KKyAgIEdMSUJDWFhfQ0hFQ0tfSE9TVAorQEAgLTEzODksOCArMTM4MCw4IEBAIEFDX0RFRlVOKFtHTElCQ1hYX0VOQUJMRV9DTE9DQUxFXSwgWworICAgICAgICNlbmRpZgorICAgICAgIGludCBtYWluKCkKKyAgICAgICB7CistCWNvbnN0IGNoYXIgX19vbmVbXSA9ICLEdWdsZWluIEF1Z21lbiI7CistICAgICAgICBjb25zdCBjaGFyIF9fdHdvW10gPSAixHVnbGVpbiI7CisrCWNvbnN0IGNoYXIgX19vbmVbXSA9ICLDhHVnbGVpbiBBdWdtZW4iOworKyAgICAgICAgY29uc3QgY2hhciBfX3R3b1tdID0gIsOEdWdsZWluIjsKKyAgICAgICAgCWludCBpOworICAgICAgICAgaW50IGo7CisgICAgICAgICBfX2xvY2FsZV90ICAgICAgICBsb2M7CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaAorQEAgLTMxLDYgKzMxLDggQEAKKyAvLworIC8vIElTTyBDKysgMTQ4ODI6IDIyLjEgIExvY2FsZXMKKyAvLworKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorICAgCisgLyoqIEBmaWxlIGN0eXBlX2Jhc2UuaAorICAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCitAQCAtNDUsOCArNDcsMTIgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKyAgIHN0cnVjdCBjdHlwZV9iYXNlCisgICB7CisgICAgIC8vIE5vbi1zdGFuZGFyZCB0eXBlZGVmcy4KKy0gICAgdHlwZWRlZiBjb25zdCBpbnQqIAkJX190b190eXBlOworLQorKyNpZmRlZiBfX1VDTElCQ19fCisrICAgIHR5cGVkZWYgY29uc3QgX19jdHlwZV90b3VwbG93X3QqICAgX190b190eXBlOworKyNlbHNlCisrICAgIHR5cGVkZWYgY29uc3QgaW50KiAgICAgICAgIF9fdG9fdHlwZTsKKysjZW5kaWYKKysgCisgICAgIC8vIE5COiBPZmZzZXRzIGludG8gY3R5cGU8Y2hhcj46Ol9NX3RhYmxlIGZvcmNlIGEgcGFydGljdWxhciBzaXplCisgICAgIC8vIG9uIHRoZSBtYXNrIHR5cGUuIEJlY2F1c2Ugb2YgdGhpcywgd2UgZG9uJ3QgdXNlIGFuIGVudW0uCisgICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgCW1hc2s7ICAgCistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9NYWtlZmlsZS5pbgorKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvTWFrZWZpbGUuaW4KK0BAIC0zNiw2ICszNiw3IEBAIFBPU1RfVU5JTlNUQUxMID0gOgorIGJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACisgaG9zdF90cmlwbGV0ID0gQGhvc3RACisgdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAorK0xJQk9CSkRJUiA9CisgRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluIFwKKyAJJCh0b3Bfc3JjZGlyKS9mcmFnbWVudC5hbQorIHN1YmRpciA9IGluY2x1ZGUKKy0tLSBhL2xpYnN0ZGMrKy12My9saWJtYXRoL01ha2VmaWxlLmluCisrKysgYi9saWJzdGRjKystdjMvbGlibWF0aC9NYWtlZmlsZS5pbgorQEAgLTM3LDYgKzM3LDcgQEAgUE9TVF9VTklOU1RBTEwgPSA6CisgYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKKyBob3N0X3RyaXBsZXQgPSBAaG9zdEAKKyB0YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACisrTElCT0JKRElSID0KKyBzdWJkaXIgPSBsaWJtYXRoCisgRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCisgQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorLS0tIGEvbGlic3RkYysrLXYzL2xpYnN1cGMrKy9NYWtlZmlsZS5pbgorKysrIGIvbGlic3RkYysrLXYzL2xpYnN1cGMrKy9NYWtlZmlsZS5pbgorQEAgLTM4LDYgKzM4LDcgQEAgUE9TVF9VTklOU1RBTEwgPSA6CisgYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKKyBob3N0X3RyaXBsZXQgPSBAaG9zdEAKKyB0YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACisrTElCT0JKRElSID0KKyBESVNUX0NPTU1PTiA9ICQoZ2xpYmN4eGluc3RhbGxfSEVBREVSUykgJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKKyAJJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZnJhZ21lbnQuYW0KKyBzdWJkaXIgPSBsaWJzdXBjKysKKy0tLSBhL2xpYnN0ZGMrKy12My9NYWtlZmlsZS5pbgorKysrIGIvbGlic3RkYysrLXYzL01ha2VmaWxlLmluCitAQCAtMzYsNiArMzYsNyBAQCBQT1NUX1VOSU5TVEFMTCA9IDoKKyBidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAorIGhvc3RfdHJpcGxldCA9IEBob3N0QAorIHRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKKytMSUJPQkpESVIgPQorIERJU1RfQ09NTU9OID0gUkVBRE1FICQoYW1fX2NvbmZpZ3VyZV9kZXBzKSAkKHNyY2RpcikvLi4vY29uZmlnLmd1ZXNzIFwKKyAJJChzcmNkaXIpLy4uL2NvbmZpZy5zdWIgJChzcmNkaXIpLy4uL2luc3RhbGwtc2ggXAorIAkkKHNyY2RpcikvLi4vbHRtYWluLnNoICQoc3JjZGlyKS8uLi9taXNzaW5nIFwKKy0tLSBhL2xpYnN0ZGMrKy12My9wby9NYWtlZmlsZS5pbgorKysrIGIvbGlic3RkYysrLXYzL3BvL01ha2VmaWxlLmluCitAQCAtMzYsNiArMzYsNyBAQCBQT1NUX1VOSU5TVEFMTCA9IDoKKyBidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAorIGhvc3RfdHJpcGxldCA9IEBob3N0QAorIHRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKKytMSUJPQkpESVIgPQorIERJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbiBcCisgCSQodG9wX3NyY2RpcikvZnJhZ21lbnQuYW0KKyBzdWJkaXIgPSBwbworLS0tIGEvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgorKysrIGIvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgorQEAgLTM2LDYgKzM2LDcgQEAgUE9TVF9VTklOU1RBTEwgPSA6CisgYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKKyBob3N0X3RyaXBsZXQgPSBAaG9zdEAKKyB0YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACisrTElCT0JKRElSID0KKyBESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gXAorIAkkKHRvcF9zcmNkaXIpL2ZyYWdtZW50LmFtCisgc3ViZGlyID0gc3JjCistLS0gYS9NYWtlZmlsZS5kZWYKKysrKyBiL01ha2VmaWxlLmRlZgorQEAgLTQ4MSw3ICs0ODEsNyBAQCBsYW5nX2Vudl9kZXBlbmRlbmNpZXMgPSB7IG1vZHVsZT1yZGE7IH07CisgbGFuZ19lbnZfZGVwZW5kZW5jaWVzID0geyBtb2R1bGU9d2luc3VwOyB9OworIGxhbmdfZW52X2RlcGVuZGVuY2llcyA9IHsgbW9kdWxlPXF0aHJlYWRzOyB9OworIAorLWRlcGVuZGVuY2llcyA9IHsgbW9kdWxlPWFsbC10YXJnZXQtbGliZ2xvc3M7IG9uPWNvbmZpZ3VyZS10YXJnZXQtbmV3bGliOyB9OworK2RlcGVuZGVuY2llcyA9IHsgbW9kdWxlPWFsbC10YXJnZXQtbGliZ2xvc3M7IG9uPWFsbC10YXJnZXQtbmV3bGliOyB9OworIGRlcGVuZGVuY2llcyA9IHsgbW9kdWxlPWFsbC10YXJnZXQtd2luc3VwOyBvbj1hbGwtdGFyZ2V0LWxpYmliZXJ0eTsgfTsKKyBkZXBlbmRlbmNpZXMgPSB7IG1vZHVsZT1hbGwtdGFyZ2V0LXdpbnN1cDsgb249YWxsLXRhcmdldC1saWJ0ZXJtY2FwOyB9OworIAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNDM3OTEsNyArNDM3OTEsNyBAQCBhbGwtdGFyZ2V0LWxpYm9iamM6IG1heWJlLWFsbC10YXJnZXQtYm9lCisgYWxsLXRhcmdldC1saWJzdGRjKystdjM6IG1heWJlLWFsbC10YXJnZXQtbGliaWJlcnR5CisgaW5zdGFsbC10YXJnZXQtbGlic3NwOiBtYXliZS1pbnN0YWxsLWdjYworIGluc3RhbGwtdGFyZ2V0LWxpYmdvbXA6IG1heWJlLWluc3RhbGwtZ2NjCistYWxsLXRhcmdldC1saWJnbG9zczogbWF5YmUtY29uZmlndXJlLXRhcmdldC1uZXdsaWIKKythbGwtdGFyZ2V0LWxpYmdsb3NzOiBtYXliZS1hbGwtdGFyZ2V0LW5ld2xpYgorIGFsbC10YXJnZXQtd2luc3VwOiBtYXliZS1hbGwtdGFyZ2V0LWxpYmliZXJ0eQorIGFsbC10YXJnZXQtd2luc3VwOiBtYXliZS1hbGwtdGFyZ2V0LWxpYnRlcm1jYXAKKyAKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC0yMTU4LDcgKzIxNTgsNyBAQCBMMjpdLAorICAgYXNfdmVyPWAkZ2NjX2N2X2FzIC0tdmVyc2lvbiAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKKyAgIGlmIGVjaG8gIiRhc192ZXIiIHwgZ3JlcCBHTlUgPiAvZGV2L251bGw7IHRoZW4KKyBjaGFuZ2VxdW90ZSgsKWRubAorLSAgICBhc192ZXI9YGVjaG8gJGFzX3ZlciB8IHNlZCAtZSAncy9HTlUgYXNzZW1ibGVyIFwoWzAtOS5dWzAtOS5dKlwpLiovXDEvJ2AKKysgICAgYXNfdmVyPWBlY2hvICRhc192ZXIgfCBzZWQgLWUgJ3MvR05VIGFzc2VtYmxlclwoIChHTlUgQmludXRpbHMpXClcPyBcKFswLTkuXVswLTkuXSpcKS4qL1wyLydgCisgICAgIGFzX21ham9yPWBlY2hvICRhc192ZXIgfCBzZWQgJ3MvXC4uKi8vJ2AKKyAgICAgYXNfbWlub3I9YGVjaG8gJGFzX3ZlciB8IHNlZCAncy9bXi5dKlwuXChbMC05XSpcKS4qL1wxLydgCisgY2hhbmdlcXVvdGUoWyxdKWRubAorQEAgLTI5NzEsNyArMjk3MSw3IEBAIGVzYWMKKyBjYXNlICIkdGFyZ2V0IiBpbgorICAgaT84NiotKi0qIHwgbWlwcyotKi0qIHwgYWxwaGEqLSotKiB8IHBvd2VycGMqLSotKiB8IHNwYXJjKi0qLSogfCBtNjgqLSotKiBcCisgICB8IHg4Nl82NCotKi0qIHwgaHBwYSotKi0qIHwgYXJtKi0qLSogfCBzdHJvbmdhcm0qLSotKiB8IHhzY2FsZSotKi0qIFwKKy0gIHwgeHN0b3JteTE2Ki0qLSogfCBjcmlzLSotKiB8IHh0ZW5zYS0qLSogfCBiZmluLSotKiB8IHNjb3JlKi0qLSopCisrICB8IHhzdG9ybXkxNiotKi0qIHwgY3Jpcy0qLSogfCB4dGVuc2EtKi0qIHwgYmZpbi0qLSogfCBzY29yZSotKi0qIHwgYXZyMzItKi0qKQorICAgICBpbnNuPSJub3AiCisgICAgIDs7CisgICBpYTY0Ki0qLSogfCBzMzkwKi0qLSopCistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMTQwMjMsNyArMTQwMjMsNyBAQCBMMjonID4gY29uZnRlc3QucworICAgIyBhcmJpdHJhcnkgc2VjdGlvbnMgYXJlIHN1cHBvcnRlZCBhbmQgdHJ5IHRoZSB0ZXN0LgorICAgYXNfdmVyPWAkZ2NjX2N2X2FzIC0tdmVyc2lvbiAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKKyAgIGlmIGVjaG8gIiRhc192ZXIiIHwgZ3JlcCBHTlUgPiAvZGV2L251bGw7IHRoZW4KKy0gICAgYXNfdmVyPWBlY2hvICRhc192ZXIgfCBzZWQgLWUgJ3MvR05VIGFzc2VtYmxlciBcKFswLTkuXVswLTkuXSpcKS4qL1wxLydgCisrICAgIGFzX3Zlcj1gZWNobyAkYXNfdmVyIHwgc2VkIC1lICdzL0dOVSBhc3NlbWJsZXJcKCAoR05VIEJpbnV0aWxzKVwpXD8gXChbMC05Ll1bMC05Ll0qXCkuKi9cMi8nYAorICAgICBhc19tYWpvcj1gZWNobyAkYXNfdmVyIHwgc2VkICdzL1wuLiovLydgCisgICAgIGFzX21pbm9yPWBlY2hvICRhc192ZXIgfCBzZWQgJ3MvW14uXSpcLlwoWzAtOV0qXCkuKi9cMS8nYAorICAgICBpZiB0ZXN0ICRhc19tYWpvciAtZXEgMiAmJiB0ZXN0ICRhc19taW5vciAtbHQgMTEKK0BAIC0xNTYxMCw3ICsxNTYxMCw3IEBAIGVzYWMKKyBjYXNlICIkdGFyZ2V0IiBpbgorICAgaT84NiotKi0qIHwgbWlwcyotKi0qIHwgYWxwaGEqLSotKiB8IHBvd2VycGMqLSotKiB8IHNwYXJjKi0qLSogfCBtNjgqLSotKiBcCisgICB8IHg4Nl82NCotKi0qIHwgaHBwYSotKi0qIHwgYXJtKi0qLSogfCBzdHJvbmdhcm0qLSotKiB8IHhzY2FsZSotKi0qIFwKKy0gIHwgeHN0b3JteTE2Ki0qLSogfCBjcmlzLSotKiB8IHh0ZW5zYS0qLSogfCBiZmluLSotKiB8IHNjb3JlKi0qLSopCisrICB8IHhzdG9ybXkxNiotKi0qIHwgY3Jpcy0qLSogfCB4dGVuc2EtKi0qIHwgYmZpbi0qLSogfCBzY29yZSotKi0qIHwgYXZyMzItKi0qKQorICAgICBpbnNuPSJub3AiCisgICAgIDs7CisgICBpYTY0Ki0qLSogfCBzMzkwKi0qLSopCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4yLzMxMC1saWJnY2NfZWguYS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjIvMzEwLWxpYmdjY19laC5hLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwOWRiM2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4yLzMxMC1saWJnY2NfZWguYS5wYXRjaApAQCAtMCwwICsxLDMyIEBACitWYW1waXJpc2VkIGZyb206CisgIGh0dHA6Ly9sYW5kbGV5Lm5ldC9oZy9hYm9yaWdpbmFsL2ZpbGUvN2UwNzQ3YTY2NWFiL3NvdXJjZXMvcGF0Y2hlcy9nY2MtY29yZS1saWJnY2NlaC5wYXRjaAorCitkaWZmIC1kdXJOIGdjYy00LjIuMi5vcmlnL2djYy9ta2xpYmdjYy5pbiBnY2MtNC4yLjIvZ2NjL21rbGliZ2NjLmluCistLS0gZ2NjLTQuMi4yLm9yaWcvZ2NjL21rbGliZ2NjLmluCTIwMDYtMDctMDQgMjI6MjA6MDEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4yL2djYy9ta2xpYmdjYy5pbgkyMDExLTA4LTMxIDE2OjI0OjAzLjY3NDY5MDAxNiArMDIwMAorQEAgLTIyMyw4ICsyMjMsOCBAQAorICAgaWYgWyAiJExJQlVOV0lORCIgXTsgdGhlbgorICAgICBsaWJ1bndpbmRfYT0kZGlyL2xpYnVud2luZC5hCisgICBmaQorKyAgbGliZ2NjX2VoX2E9JGRpci9saWJnY2NfZWguYQorICAgaWYgWyAiJFNITElCX0xJTksiIF07IHRoZW4KKy0gICAgbGliZ2NjX2VoX2E9JGRpci9saWJnY2NfZWguYQorICAgICBsaWJnY2Nfc19zbz0kZGlyL2xpYmdjY19zJHtTSExJQl9FWFR9CisgICAgIGlmIFsgIiRMSUJVTldJTkQiIF07IHRoZW4KKyAgICAgICBsaWJ1bndpbmRfc289JGRpci9saWJ1bndpbmQke1NITElCX0VYVH0KK0BAIC04ODksMTEgKzg4OSwxMSBAQAorICAgZWNobyAnCWNobW9kIDY0NCcgICR7bGRpcn0vbGliZ2Nvdi5hCisgICBlY2hvICcJJChSQU5MSUJfRk9SX1RBUkdFVCknICR7bGRpcn0vbGliZ2Nvdi5hCisgCistICBpZiBbICIkU0hMSUJfTElOSyIgXTsgdGhlbgorLSAgICBlY2hvICcJJChJTlNUQUxMX0RBVEEpJyAke2Rpcn0vbGliZ2NjX2VoLmEgJHtsZGlyfS8KKy0gICAgZWNobyAnCWNobW9kIDY0NCcgICR7bGRpcn0vbGliZ2NjX2VoLmEKKy0gICAgZWNobyAnCSQoUkFOTElCX0ZPUl9UQVJHRVQpJyAke2xkaXJ9L2xpYmdjY19laC5hCisrICBlY2hvICcJJChJTlNUQUxMX0RBVEEpJyAke2Rpcn0vbGliZ2NjX2VoLmEgJHtsZGlyfS8KKysgIGVjaG8gJwljaG1vZCA2NDQnICAke2xkaXJ9L2xpYmdjY19laC5hCisrICBlY2hvICcJJChSQU5MSUJfRk9SX1RBUkdFVCknICR7bGRpcn0vbGliZ2NjX2VoLmEKKyAKKysgIGlmIFsgIiRTSExJQl9MSU5LIiBdOyB0aGVuCisgICAgIHNobGliX3NsaWJkaXJfcXVhbD0KKyAgICAgb3NfbXVsdGlsaWJfZGlyPWAkR0NDX0ZPUl9UQVJHRVQgJGZsYWdzIC0tcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5YAorICAgICBpZiBbICIkb3NfbXVsdGlsaWJfZGlyIiAhPSAuIF07IHRoZW4KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjMvMTAwLXVjbGliYy1jb25mLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8xMDAtdWNsaWJjLWNvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI2MWRhZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjMvMTAwLXVjbGliYy1jb25mLnBhdGNoCkBAIC0wLDAgKzEsMjE2IEBACitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2JvZWhtLWdjL2NvbmZpZ3VyZSBnY2MtNC4yLjEvYm9laG0tZ2MvY29uZmlndXJlCistLS0gZ2NjLTQuMi4xLm9yaWcvYm9laG0tZ2MvY29uZmlndXJlCTIwMDctMDctMTkgMTY6MzM6NTYuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2JvZWhtLWdjL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjI5OjIyLjAwMDAwMDAwMCArMDIwMAorQEAgLTQzMjMsNyArNDMyMyw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2ggZ2NjLTQuMi4xL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAorLS0tIGdjYy00LjIuMS5vcmlnL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAkyMDA1LTA4LTE1IDAyOjQxOjMxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMDUsNiArMTA1LDEwIEBACisgIHRoZW4KKyAgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCisgICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQorK2VsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCAtYSAkSF9SRUFMX1RBUkdFVCA9IGk2ODYtcGMtbGludXgtdWNsaWJjIF0KKysgdGhlbgorKyAgbWFrZSBhbGwtZ2RiIGFsbC1kZWphZ251IGFsbC1sZCB8fCBleGl0IDEKKysgIG1ha2UgaW5zdGFsbC1nZGIgaW5zdGFsbC1kZWphZ251IGluc3RhbGwtbGQgfHwgZXhpdCAxCisgZWxpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIF0gOyB0aGVuCisgICBtYWtlIGJvb3RzdHJhcCB8fCBleGl0IDEKKyAgIG1ha2UgaW5zdGFsbCB8fCBleGl0IDEKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvZ2NjL2NvbmZpZy9jcmlzL2xpbnV4LmggZ2NjLTQuMi4xL2djYy9jb25maWcvY3Jpcy9saW51eC5oCistLS0gZ2NjLTQuMi4xLm9yaWcvZ2NjL2NvbmZpZy9jcmlzL2xpbnV4LmgJMjAwNi0wMi0xOCAxMjoxMjo1MS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvZ2NjL2NvbmZpZy9jcmlzL2xpbnV4LmgJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC03NCw3ICs3NCwxMSBAQAorICNkZWZpbmUgQ1JJU19ERUZBVUxUX0NQVV9WRVJTSU9OIENSSVNfQ1BVX05HCisgCisgI3VuZGVmIENSSVNfU1VCVEFSR0VUX1ZFUlNJT04KKy0jZGVmaW5lIENSSVNfU1VCVEFSR0VUX1ZFUlNJT04gIiAtIGNyaXMtYXhpcy1saW51eC1nbnUiCisrI2lmIFVDTElCQ19ERUZBVUxUCisrIyBkZWZpbmUgQ1JJU19TVUJUQVJHRVRfVkVSU0lPTiAiIC0gY3Jpcy1heGlzLWxpbnV4LXVjbGliYyIKKysjZWxzZQorKyMgZGVmaW5lIENSSVNfU1VCVEFSR0VUX1ZFUlNJT04gIiAtIGNyaXMtYXhpcy1saW51eC1nbnUiCisrI2VuZGlmCisgCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC5zby4xIgorIAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJmZmkvY29uZmlndXJlIGdjYy00LjIuMS9saWJmZmkvY29uZmlndXJlCistLS0gZ2NjLTQuMi4xLm9yaWcvbGliZmZpL2NvbmZpZ3VyZQkyMDA3LTA3LTE5IDE2OjMzOjU2LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJmZmkvY29uZmlndXJlCTIwMDctMDgtMDMgMjA6Mjk6MjIuMDAwMDAwMDAwICswMjAwCitAQCAtMzQ2MCw3ICszNDYwLDcgQEAKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgqKQorICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgIDs7CisgCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZSBnY2MtNC4yLjEvbGliZ2ZvcnRyYW4vY29uZmlndXJlCistLS0gZ2NjLTQuMi4xLm9yaWcvbGliZ2ZvcnRyYW4vY29uZmlndXJlCTIwMDctMDctMTkgMTY6MzM6NTYuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjI5OjIyLjAwMDAwMDAwMCArMDIwMAorQEAgLTM3MjEsNyArMzcyMSw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJnb21wL2NvbmZpZ3VyZSBnY2MtNC4yLjEvbGliZ29tcC9jb25maWd1cmUKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJnb21wL2NvbmZpZ3VyZQkyMDA3LTA3LTE5IDE2OjMzOjU2LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJnb21wL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjI5OjIyLjAwMDAwMDAwMCArMDIwMAorQEAgLTM4OTMsNyArMzg5Myw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJqYXZhL2NsYXNzcGF0aC9jb25maWd1cmUgZ2NjLTQuMi4xL2xpYmphdmEvY2xhc3NwYXRoL2NvbmZpZ3VyZQorLS0tIGdjYy00LjIuMS5vcmlnL2xpYmphdmEvY2xhc3NwYXRoL2NvbmZpZ3VyZQkyMDA3LTAxLTE3IDE5OjEwOjI2LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9saWJqYXZhL2NsYXNzcGF0aC9jb25maWd1cmUJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC01MzA3LDcgKzUzMDcsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcgZ2NjLTQuMi4xL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCistLS0gZ2NjLTQuMi4xLm9yaWcvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcJMjAwNi0wOC0wNyAyMjozNzo1MC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC02MDMsNyArNjAzLDcgQEAKKyAKKyAjIFRyYW5zZm9ybSBsaW51eCogdG8gKi0qLWxpbnV4LWdudSosIHRvIHN1cHBvcnQgb2xkIGNvbmZpZ3VyZSBzY3JpcHRzLgorIGNhc2UgJGhvc3Rfb3MgaW4KKy1saW51eC1nbnUqKSA7OworK2xpbnV4LWdudSp8bGludXgtdWNsaWJjKikgOzsKKyBsaW51eCopIGhvc3Q9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoLiotLiotbGludXhcKVwoLipcKSQvXDEtZ251XDIvJ2AKKyBlc2FjCisgCitAQCAtMTI1MSw3ICsxMjUxLDcgQEAKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgqKQorICAgdmVyc2lvbl90eXBlPWxpbnV4CisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIG5lZWRfdmVyc2lvbj1ubworZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJqYXZhL2NvbmZpZ3VyZSBnY2MtNC4yLjEvbGliamF2YS9jb25maWd1cmUKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJqYXZhL2NvbmZpZ3VyZQkyMDA3LTA3LTE5IDE2OjMzOjU2LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJqYXZhL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjI5OjIyLjAwMDAwMDAwMCArMDIwMAorQEAgLTU0MjQsNyArNTQyNCw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJtdWRmbGFwL2NvbmZpZ3VyZSBnY2MtNC4yLjEvbGlibXVkZmxhcC9jb25maWd1cmUKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJtdWRmbGFwL2NvbmZpZ3VyZQkyMDA2LTEyLTA0IDEyOjEzOjA3LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9saWJtdWRmbGFwL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjI5OjIyLjAwMDAwMDAwMCArMDIwMAorQEAgLTUzOTQsNyArNTM5NCw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJvYmpjL2NvbmZpZ3VyZSBnY2MtNC4yLjEvbGlib2JqYy9jb25maWd1cmUKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJvYmpjL2NvbmZpZ3VyZQkyMDA2LTEwLTE1IDA5OjQyOjU3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJvYmpjL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjI5OjIyLjAwMDAwMDAwMCArMDIwMAorQEAgLTMzMTQsNyArMzMxNCw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzc3AvY29uZmlndXJlIGdjYy00LjIuMS9saWJzc3AvY29uZmlndXJlCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3NwL2NvbmZpZ3VyZQkyMDA2LTEwLTE1IDA5OjQyOjU3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzc3AvY29uZmlndXJlCTIwMDctMDgtMDMgMjA6Mjk6MjIuMDAwMDAwMDAwICswMjAwCitAQCAtNDQ4MCw3ICs0NDgwLDcgQEAKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgqKQorICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgIDs7CisgCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWd1cmUgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWd1cmUKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlndXJlCTIwMDctMDYtMjkgMDE6MDI6MDUuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWd1cmUJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC00MjgzLDcgKzQyODMsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlidG9vbC5tNCBnY2MtNC4yLjEvbGlidG9vbC5tNAorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnRvb2wubTQJMjAwNS0wNy0xNiAwNDozMDo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlidG9vbC5tNAkyMDA3LTA4LTAzIDIwOjI5OjIyLjAwMDAwMDAwMCArMDIwMAorQEAgLTczOSw3ICs3MzksNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbHRjb25maWcgZ2NjLTQuMi4xL2x0Y29uZmlnCistLS0gZ2NjLTQuMi4xLm9yaWcvbHRjb25maWcJMjAwNy0wMi0xNCAxODowODozNS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbHRjb25maWcJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC02MDMsNyArNjAzLDcgQEAKKyAKKyAjIFRyYW5zZm9ybSBsaW51eCogdG8gKi0qLWxpbnV4LWdudSosIHRvIHN1cHBvcnQgb2xkIGNvbmZpZ3VyZSBzY3JpcHRzLgorIGNhc2UgJGhvc3Rfb3MgaW4KKy1saW51eC1nbnUqKSA7OworK2xpbnV4LWdudSp8bGludXgtdWNsaWJjKikgOzsKKyBsaW51eCopIGhvc3Q9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoLiotLiotbGludXhcKVwoLipcKSQvXDEtZ251XDIvJ2AKKyBlc2FjCisgCitAQCAtMTI1MSw3ICsxMjUxLDcgQEAKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgqKQorICAgdmVyc2lvbl90eXBlPWxpbnV4CisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIG5lZWRfdmVyc2lvbj1ubworZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy96bGliL2NvbmZpZ3VyZSBnY2MtNC4yLjEvemxpYi9jb25maWd1cmUKKy0tLSBnY2MtNC4yLjEub3JpZy96bGliL2NvbmZpZ3VyZQkyMDA3LTAxLTE3IDE5OjEwOjI2LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS96bGliL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjI5OjIyLjAwMDAwMDAwMCArMDIwMAorQEAgLTM0MjksNyArMzQyOSw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8xMTAtdWNsaWJjLWNvbmYtbm91cHN0cmVhbS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjMvMTEwLXVjbGliYy1jb25mLW5vdXBzdHJlYW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMyMzlkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjMvMTEwLXVjbGliYy1jb25mLW5vdXBzdHJlYW0ucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9nY2MvY29uZmlnLmdjYyBnY2MtNC4yLjEvZ2NjL2NvbmZpZy5nY2MKKy0tLSBnY2MtNC4yLjEub3JpZy9nY2MvY29uZmlnLmdjYwkyMDA3LTAyLTAzIDA2OjI1OjIwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9nY2MvY29uZmlnLmdjYwkyMDA3LTA4LTAzIDIwOjI5OjUyLjAwMDAwMDAwMCArMDIwMAorQEAgLTE5NjQsNyArMTk2NCw3IEBACisgICAgICAgICA7OworIHNoLSotZWxmKiB8IHNoWzEyMzQ2bF0qLSotZWxmKiB8IHNoKi0qLWthb3MqIHwgXAorIHNoLSotc3ltYmlhbmVsZiogfCBzaFsxMjM0NmxdKi0qLXN5bWJpYW5lbGYqIHwgXAorLSAgc2gtKi1saW51eCogfCBzaFszNDZsYmVdKi0qLWxpbnV4KiB8IFwKKysgIHNoKi0qLWxpbnV4KiB8IHNoWzM0NmxiZV0qLSotbGludXgqIHwgXAorICAgc2gtKi1uZXRic2RlbGYqIHwgc2hsKi0qLW5ldGJzZGVsZiogfCBzaDUtKi1uZXRic2QqIHwgc2g1bCotKi1uZXRic2QqIHwgXAorICAgIHNoNjQtKi1uZXRic2QqIHwgc2g2NGwqLSotbmV0YnNkKikKKyAJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSBzaC90LXNoIHNoL3QtZWxmIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8xMjAtdWNsaWJjLWxvY2FsZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjMvMTIwLXVjbGliYy1sb2NhbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk4YzUwNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjMvMTIwLXVjbGliYy1sb2NhbGUucGF0Y2gKQEAgLTAsMCArMSwyODA2IEBACitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CTIwMDctMDYtMjkgMDE6MDI6MDUuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMzM0LDcgKzEzMzQsNyBAQAorIEFDX0RFRlVOKFtHTElCQ1hYX0VOQUJMRV9DTE9DQUxFXSwgWworICAgR0xJQkNYWF9FTkFCTEUoY2xvY2FsZSxhdXRvLFtAPDpAPU1PREVMQDo+QF0sCisgICAgIFt1c2UgTU9ERUwgZm9yIHRhcmdldCBsb2NhbGUgcGFja2FnZV0sCistICAgIFtwZXJtaXQgZ2VuZXJpY3xnbnV8aWVlZV8xMDAzLjEtMjAwMXx5ZXN8bm98YXV0b10pCisrICAgIFtwZXJtaXQgZ2VuZXJpY3xnbnV8aWVlZV8xMDAzLjEtMjAwMXx1Y2xpYmN8eWVzfG5vfGF1dG9dKQorIAorICAgIyBEZWFsIHdpdGggZ2V0dGV4dCBpc3N1ZXMuICBEZWZhdWx0IHRvIG5vdCB1c2luZyBpdCAoPW5vKSB1bnRpbCB3ZSBkZXRlY3QKKyAgICMgc3VwcG9ydCBmb3IgaXQgbGF0ZXIuICBMZXQgdGhlIHVzZXIgdHVybiBpdCBvZmYgdmlhIC0tZS9kLCBidXQgbGV0IHRoYXQKK0BAIC0xMzU1LDYgKzEzNTUsOSBAQAorICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCisrICAgICAgKi11Y2xpYmMqKQorKyAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz11Y2xpYmMKKysgICAgICAgIDs7CisgICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCisgICAgICAgICBlbmFibGVfY2xvY2FsZV9mbGFnPWdudQkKKyAgICAgICAgIDs7CitAQCAtMTUyNiw2ICsxNTI5LDQwIEBACisgICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5jYworICAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvYysrbG9jYWxlX2ludGVybmFsLmgKKyAgICAgICA7OworKyAgICB1Y2xpYmMpCisrICAgICAgQUNfTVNHX1JFU1VMVCh1Y2xpYmMpCisrCisrICAgICAgIyBEZWNsYXJlIGludGVudGlvbiB0byB1c2UgZ2V0dGV4dCwgYW5kIGFkZCBzdXBwb3J0IGZvciBzcGVjaWZpYworKyAgICAgICMgbGFuZ3VhZ2VzLgorKyAgICAgICMgRm9yIHNvbWUgcmVhc29uLCBBTExfTElOR1VBUyBoYXMgdG8gYmUgYmVmb3JlIEFNLUdOVS1HRVRURVhUCisrICAgICAgQUxMX0xJTkdVQVM9ImRlIGZyIgorKworKyAgICAgICMgRG9uJ3QgY2FsbCBBTS1HTlUtR0VUVEVYVCBoZXJlLiBJbnN0ZWFkLCBhc3N1bWUgZ2xpYmMuCisrICAgICAgQUNfQ0hFQ0tfUFJPRyhjaGVja19tc2dmbXQsIG1zZ2ZtdCwgeWVzLCBubykKKysgICAgICBpZiB0ZXN0IHgiJGNoZWNrX21zZ2ZtdCIgPSB4InllcyIgJiYgdGVzdCB4IiRlbmFibGVfbmxzIiA9IHgieWVzIjsgdGhlbgorKyAgICAgICAgVVNFX05MUz15ZXMKKysgICAgICBmaQorKyAgICAgICMgRXhwb3J0IHRoZSBidWlsZCBvYmplY3RzLgorKyAgICAgIGZvciBsaW5nIGluICRBTExfTElOR1VBUzsgZG8gXAorKyAgICAgICAgZ2xpYmN4eF9NT0ZJTEVTPSIkZ2xpYmN4eF9NT0ZJTEVTICRsaW5nLm1vIjsgXAorKyAgICAgICAgZ2xpYmN4eF9QT0ZJTEVTPSIkZ2xpYmN4eF9QT0ZJTEVTICRsaW5nLnBvIjsgXAorKyAgICAgIGRvbmUKKysgICAgICBBQ19TVUJTVChnbGliY3h4X01PRklMRVMpCisrICAgICAgQUNfU1VCU1QoZ2xpYmN4eF9QT0ZJTEVTKQorKworKyAgICAgIENMT0NBTEVfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrICAgICAgQ0xPQ0FMRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKyAgICAgIENDT0RFQ1ZUX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworKyAgICAgIENDT0xMQVRFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworKyAgICAgIENDVFlQRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrICAgICAgQ01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrICAgICAgQ01FU1NBR0VTX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKysgICAgICBDTU9ORVlfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKyAgICAgIENOVU1FUklDX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKyAgICAgIENUSU1FX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysgICAgICA7OworICAgZXNhYworIAorICAgIyBUaGlzIGlzIHdoZXJlIHRoZSB0ZXN0c3VpdGUgbG9va3MgZm9yIGxvY2FsZSBjYXRhbG9ncywgdXNpbmcgdGhlCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxNjAgQEAKKysvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxjZXJybm8+ICAvLyBGb3IgZXJybm8KKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxzdGRleGNlcHQ+CisrI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3N0cnRvbF9sKFMsIEUsIEIsIEwpICAgICAgc3RydG9sKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvdWxfbChTLCBFLCBCLCBMKSAgICAgc3RydG91bCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b2xsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvbGwoKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG91bGxfbChTLCBFLCBCLCBMKSAgICBzdHJ0b3VsbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKysjZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCisrI2RlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKysjd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworKyNkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKysjZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkIAorK3sKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGZsb2F0JiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fZjsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCAKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fZDsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBsb25nIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19sZDsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB2b2lkCisrICBsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsIAorKwkJCQkgICAgX19jX2xvY2FsZSBfX29sZCkKKysgIHsKKysgICAgX19jbG9jID0gX19uZXdsb2NhbGUoMSA8PCBMQ19BTEwsIF9fcywgX19vbGQpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIGlmICghX19jbG9jKQorKyAgICAgIHsKKysJLy8gVGhpcyBuYW1lZCBsb2NhbGUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgdW5kZXJseWluZyBPUy4KKysJX190aHJvd19ydW50aW1lX2Vycm9yKF9fTigibG9jYWxlOjpmYWNldDo6X1NfY3JlYXRlX2NfbG9jYWxlICIKKysJCQkgICAgICAibmFtZSBub3QgdmFsaWQiKSk7CisrICAgICAgfQorKyNlbmRpZgorKyAgfQorKyAgCisrICB2b2lkCisrICBsb2NhbGU6OmZhY2V0OjpfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKysgIHsKKysgICAgaWYgKF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKKysgICAgICBfX2ZyZWVsb2NhbGUoX19jbG9jKTsgCisrICB9CisrCisrICBfX2NfbG9jYWxlCisrICBsb2NhbGU6OmZhY2V0OjpfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICB7IHJldHVybiBfX2R1cGxvY2FsZShfX2Nsb2MpOyB9CisrfSAvLyBuYW1lc3BhY2Ugc3RkCisrCisrbmFtZXNwYWNlIF9fZ251X2N4eAorK3sKKysgIGNvbnN0IGNoYXIqIGNvbnN0IGNhdGVnb3J5X25hbWVzWzYgKyBfR0xJQkNYWF9OVU1fQ0FURUdPUklFU10gPQorKyAgICB7CisrICAgICAgIkxDX0NUWVBFIiwgCisrICAgICAgIkxDX05VTUVSSUMiLAorKyAgICAgICJMQ19USU1FIiwgCisrICAgICAgIkxDX0NPTExBVEUiLCAKKysgICAgICAiTENfTU9ORVRBUlkiLAorKyAgICAgICJMQ19NRVNTQUdFUyIsIAorKyNpZiBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAhPSAwCisrICAgICAgIkxDX1BBUEVSIiwgCisrICAgICAgIkxDX05BTUUiLCAKKysgICAgICAiTENfQUREUkVTUyIsCisrICAgICAgIkxDX1RFTEVQSE9ORSIsIAorKyAgICAgICJMQ19NRUFTVVJFTUVOVCIsIAorKyAgICAgICJMQ19JREVOVElGSUNBVElPTiIgCisrI2VuZGlmCisrICAgIH07CisrfQorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICBjb25zdCBjaGFyKiBjb25zdCogY29uc3QgbG9jYWxlOjpfU19jYXRlZ29yaWVzID0gX19nbnVfY3h4OjpjYXRlZ29yeV9uYW1lczsKKyt9ICAvLyBuYW1lc3BhY2Ugc3RkCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDExNyBAQAorKy8vIFdyYXBwZXIgZm9yIHVuZGVybHlpbmcgQy1sYW5ndWFnZSBsb2NhbGl6YXRpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi44ICBTdGFuZGFyZCBsb2NhbGUgY2F0ZWdvcmllcy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2lmbmRlZiBfQ19MT0NBTEVfSAorKyNkZWZpbmUgX0NfTE9DQUxFX0ggMQorKworKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKysKKysjaW5jbHVkZSA8Y3N0cmluZz4gICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnN0cmxlbgorKyNpbmNsdWRlIDxjc3RkaW8+ICAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c25wcmludGYgb3Igc3RkOjpzcHJpbnRmCisrI2luY2x1ZGUgPGNsb2NhbGU+CisrI2luY2x1ZGUgPGxhbmdpbmZvLmg+CQkvLyBGb3IgY29kZWN2dAorKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyNpbmNsdWRlIDxpY29udi5oPgkJLy8gRm9yIGNvZGVjdnQgdXNpbmcgaWNvbnYsIGljb252X3QKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKysjaW5jbHVkZSA8bGliaW50bC5oPiAJCS8vIEZvciBtZXNzYWdlcworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIHdoYXQgaXMgX0dMSUJDWFhfQ19MT0NBTEVfR05VIGZvcgorKyNlbmRpZgorKyNkZWZpbmUgX0dMSUJDWFhfQ19MT0NBTEVfR05VIDEKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggY2F0ZWdvcmllcworKyNlbmRpZgorKy8vICNkZWZpbmUgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgNgorKyNkZWZpbmUgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgMAorKyAKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworK25hbWVzcGFjZSBfX2dudV9jeHgKKyt7CisrICBleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisrfQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgIHR5cGVkZWYgX19sb2NhbGVfdAkJX19jX2xvY2FsZTsKKysjZWxzZQorKyAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKysjZW5kaWYKKysKKysgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIF9UdiB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKysgIC8vIHN0cmluZy4gIElmIHNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKysgIC8vIHRoZSB1bnNhZmUgc3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisrICAvLyBiZSBhdm9pZGVkLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgorKyAgICBpbnQKKysgICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwgCisrCQkgICAgIGNvbnN0IGludCBfX3NpemUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKKysJCSAgICAgY29uc3QgY2hhciogX19mbXQsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fcHJlYykKKysgICAgeworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fY2xvYyk7CisrI2Vsc2UKKysJCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMpCisrICAgIHsKKysjIGlmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fb2xkKSArIDFdOworKyAgICAgIHN0ZDo6c3RyY3B5KF9fc2F2LCBfX29sZCk7CisrICAgICAgc3RkOjpzZXRsb2NhbGUoTENfQUxMLCAiQyIpOworKyMgZW5kaWYKKysjZW5kaWYKKysKKysgICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7CisrI2VsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisrI2VuZGlmCisrICAgICAgcmV0dXJuIF9fcmV0OworKyAgICB9CisrfQorKworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNjMgQEAKKysvLyBQcm90b3R5cGVzIGZvciBHTElCQyB0aHJlYWQgbG9jYWxlIF9fLXByZWZpeGVkIGZ1bmN0aW9ucyAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLyBXcml0dGVuIGJ5IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisrI2luY2x1ZGUgPGNsb2NhbGU+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgY2xlYW4gdGhpcyB1cAorKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKytleHRlcm4gIkMiIF9fdHlwZW9mKG5sX2xhbmdpbmZvX2wpIF9fbmxfbGFuZ2luZm9fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cmNvbGxfbCkgX19zdHJjb2xsX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJmdGltZV9sKSBfX3N0cmZ0aW1lX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2RfbCkgX19zdHJ0b2RfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvZl9sKSBfX3N0cnRvZl9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9sZF9sKSBfX3N0cnRvbGRfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnhmcm1fbCkgX19zdHJ4ZnJtX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihuZXdsb2NhbGUpIF9fbmV3bG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YoZnJlZWxvY2FsZSkgX19mcmVlbG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YoZHVwbG9jYWxlKSBfX2R1cGxvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrZXh0ZXJuICJDIiBfX3R5cGVvZihpc3djdHlwZV9sKSBfX2lzd2N0eXBlX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih0b3dsb3dlcl9sKSBfX3Rvd2xvd2VyX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih0b3d1cHBlcl9sKSBfX3Rvd3VwcGVyX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3Njb2xsX2wpIF9fd2NzY29sbF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzZnRpbWVfbCkgX193Y3NmdGltZV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzeGZybV9sKSBfX3djc3hmcm1fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjdHlwZV9sKSBfX3djdHlwZV9sOworKyNlbmRpZiAKKysKKysjZW5kaWYgLy8gR0xJQkMgMi4zIGFuZCBsYXRlcgorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDMwNiBAQAorKy8vIHN0ZDo6Y29kZWN2dCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS41IC0gVGVtcGxhdGUgY2xhc3MgY29kZWN2dAorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBTcGVjaWFsaXphdGlvbnMuCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLCAKKysJIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorKwkgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKKysJIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAorKyAgeworKyAgICByZXN1bHQgX19yZXQgPSBvazsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIHdjc25ydG9tYnMgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2UgZmFsbCBiYWNrIHRvIHdjcnRvbWIgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KKysgICAgLy8gTkI6IHdjc25ydG9tYnMgaXMgYSBHTlUgZXh0ZW5zaW9uCisrICAgIGZvciAoX19mcm9tX25leHQgPSBfX2Zyb20sIF9fdG9fbmV4dCA9IF9fdG87CisrCSBfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX190b19uZXh0IDwgX190b19lbmQKKysJICYmIF9fcmV0ID09IG9rOykKKysgICAgICB7CisrCWNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kID0gd21lbWNocihfX2Zyb21fbmV4dCwgTCdcMCcsCisrCQkJCQkJICAgICAgX19mcm9tX2VuZCAtIF9fZnJvbV9uZXh0KTsKKysJaWYgKCFfX2Zyb21fY2h1bmtfZW5kKQorKwkgIF9fZnJvbV9jaHVua19lbmQgPSBfX2Zyb21fZW5kOworKworKwlfX2Zyb20gPSBfX2Zyb21fbmV4dDsKKysJY29uc3Qgc2l6ZV90IF9fY29udiA9IHdjc25ydG9tYnMoX190b19uZXh0LCAmX19mcm9tX25leHQsCisrCQkJCQkgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbV9uZXh0LAorKwkJCQkJIF9fdG9fZW5kIC0gX190b19uZXh0LCAmX19zdGF0ZSk7CisrCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisrCSAgeworKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKKysJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKysJICAgIC8vIHdjcnRvbWIuCisrCSAgICBmb3IgKDsgX19mcm9tIDwgX19mcm9tX25leHQ7ICsrX19mcm9tKQorKwkgICAgICBfX3RvX25leHQgKz0gd2NydG9tYihfX3RvX25leHQsICpfX2Zyb20sICZfX3RtcF9zdGF0ZSk7CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCSAgICBfX3JldCA9IGVycm9yOworKwkgIH0KKysJZWxzZSBpZiAoX19mcm9tX25leHQgJiYgX19mcm9tX25leHQgPCBfX2Zyb21fY2h1bmtfZW5kKQorKwkgIHsKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb21fY2h1bmtfZW5kOworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICB9CisrCisrCWlmIChfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX19yZXQgPT0gb2spCisrCSAgeworKwkgICAgZXh0ZXJuX3R5cGUgX19idWZbTUJfTEVOX01BWF07CisrCSAgICBfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7CisrCSAgICBjb25zdCBzaXplX3QgX19jb252ID0gd2NydG9tYihfX2J1ZiwgKl9fZnJvbV9uZXh0LCAmX190bXBfc3RhdGUpOworKwkgICAgaWYgKF9fY29udiA+IHN0YXRpY19jYXN0PHNpemVfdD4oX190b19lbmQgLSBfX3RvX25leHQpKQorKwkgICAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCW1lbWNweShfX3RvX25leHQsIF9fYnVmLCBfX2NvbnYpOworKwkJX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkJX190b19uZXh0ICs9IF9fY29udjsKKysJCSsrX19mcm9tX25leHQ7CisrCSAgICAgIH0KKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OyAKKysgIH0KKysgIAorKyAgY29kZWN2dF9iYXNlOjpyZXN1bHQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLCAKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCisrCWludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCisrCWludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAorKyAgeworKyAgICByZXN1bHQgX19yZXQgPSBvazsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIG1ic25ydG93Y3MgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2Ugc3RvcmUgYSBMJ1wwJyBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KKysgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9fZnJvbSwgX190b19uZXh0ID0gX190bzsKKysJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAorKwkgJiYgX19yZXQgPT0gb2s7KQorKyAgICAgIHsKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQ7CisrCV9fZnJvbV9jaHVua19lbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KG1lbWNocihfX2Zyb21fbmV4dCwgJ1wwJywKKysJCQkJCQkJCSAgX19mcm9tX2VuZAorKwkJCQkJCQkJICAtIF9fZnJvbV9uZXh0KSk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKKysKKysJX19mcm9tID0gX19mcm9tX25leHQ7CisrCXNpemVfdCBfX2NvbnYgPSBtYnNucnRvd2NzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LAorKwkJCQkgICBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCisrCQkJCSAgIF9fdG9fZW5kIC0gX190b19uZXh0LCAmX19zdGF0ZSk7CisrCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisrCSAgeworKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKKysJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKysJICAgIC8vIG1icnRvd2MuCisrCSAgICBmb3IgKDs7ICsrX190b19uZXh0LCBfX2Zyb20gKz0gX19jb252KQorKwkgICAgICB7CisrCQlfX2NvbnYgPSBtYnJ0b3djKF9fdG9fbmV4dCwgX19mcm9tLCBfX2Zyb21fZW5kIC0gX19mcm9tLAorKwkJCQkgJl9fdG1wX3N0YXRlKTsKKysJCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkKKysJCSAgICB8fCBfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpCisrCQkgIGJyZWFrOworKwkgICAgICB9CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbTsKKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsJICAgIAorKwkgICAgX19yZXQgPSBlcnJvcjsKKysJICB9CisrCWVsc2UgaWYgKF9fZnJvbV9uZXh0ICYmIF9fZnJvbV9uZXh0IDwgX19mcm9tX2NodW5rX2VuZCkKKysJICB7CisrCSAgICAvLyBJdCBpcyB1bmNsZWFyIHdoYXQgdG8gcmV0dXJuIGluIHRoaXMgY2FzZSAoc2VlIERSIDM4MikuIAorKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgIH0KKysKKysJaWYgKF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3JldCA9PSBvaykKKysJICB7CisrCSAgICBpZiAoX190b19uZXh0IDwgX190b19lbmQpCisrCSAgICAgIHsKKysJCS8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzCisrCQlfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7CQkKKysJCSsrX19mcm9tX25leHQ7CisrCQkqX190b19uZXh0KysgPSBMJ1wwJzsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsgCisrICB9CisrCisrICBpbnQgCisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCisrICB7CisrICAgIC8vIFhYWCBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCB0aGUgZW5jb2RpbmcgaXMKKysgICAgLy8gc3RhdGVsZXNzIGFuZCBpcyBlaXRoZXIgc2luZ2xlLWJ5dGUgb3IgdmFyaWFibGUtd2lkdGguCisrICAgIGludCBfX3JldCA9IDA7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKyAgICBpZiAoTUJfQ1VSX01BWCA9PSAxKQorKyAgICAgIF9fcmV0ID0gMTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX3JldDsKKysgIH0gIAorKworKyAgaW50IAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKyAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncy4KKysgICAgaW50IF9fcmV0ID0gTUJfQ1VSX01BWDsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysgIAorKyAgaW50IAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2xlbmd0aChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAorKwkgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0CisrICB7CisrICAgIGludCBfX3JldCA9IDA7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIGFkdmFuY2UgcGFzdCBpdCBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KKysgIAorKyAgICAvLyBBIGR1bW15IGludGVybmFsIGJ1ZmZlciBpcyBuZWVkZWQgaW4gb3JkZXIgZm9yIG1ic25ydG9jd3MgdG8gY29uc2lkZXIKKysgICAgLy8gaXRzIGZvdXJ0aCBwYXJhbWV0ZXIgKGl0IHdvdWxkbid0IHdpdGggTlVMTCBhcyBmaXJzdCBwYXJhbWV0ZXIpLgorKyAgICB3Y2hhcl90KiBfX3RvID0gc3RhdGljX2Nhc3Q8d2NoYXJfdCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKHdjaGFyX3QpIAorKwkJCQkJCQkgICAqIF9fbWF4KSk7CisrICAgIHdoaWxlIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKKysgICAgICB7CisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOworKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tLCAnXDAnLAorKwkJCQkJCQkJICBfX2VuZAorKwkJCQkJCQkJICAtIF9fZnJvbSkpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZW5kOworKworKwljb25zdCBleHRlcm5fdHlwZSogX190bXBfZnJvbSA9IF9fZnJvbTsKKysJc2l6ZV90IF9fY29udiA9IG1ic25ydG93Y3MoX190bywgJl9fZnJvbSwKKysJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbSwKKysJCQkJICAgX19tYXgsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gbWJydG93Yy4KKysJICAgIGZvciAoX19mcm9tID0gX190bXBfZnJvbTs7IF9fZnJvbSArPSBfX2NvbnYpCisrCSAgICAgIHsKKysJCV9fY29udiA9IG1icnRvd2MoTlVMTCwgX19mcm9tLCBfX2VuZCAtIF9fZnJvbSwKKysJCQkJICZfX3RtcF9zdGF0ZSk7CisrCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCisrCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQorKwkJICBicmVhazsKKysJICAgICAgfQorKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKKysJICAgIGJyZWFrOworKwkgIH0KKysJaWYgKCFfX2Zyb20pCisrCSAgX19mcm9tID0gX19mcm9tX2NodW5rX2VuZDsKKysJCisrCV9fcmV0ICs9IF9fZnJvbSAtIF9fdG1wX2Zyb207CisrCV9fbWF4IC09IF9fY29udjsKKysKKysJaWYgKF9fZnJvbSA8IF9fZW5kICYmIF9fbWF4KQorKwkgIHsKKysJICAgIC8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzCisrCSAgICBfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7CisrCSAgICArK19fZnJvbTsKKysJICAgICsrX19yZXQ7CisrCSAgICAtLV9fbWF4OworKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7IAorKyAgfQorKyNlbmRpZgorK30KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw4MCBAQAorKy8vIHN0ZDo6Y29sbGF0ZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNC4xLjIgIGNvbGxhdGUgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fc3RyY29sbF9sKFMxLCBTMiwgTCkgICAgICBzdHJjb2xsKChTMSksIChTMikpCisrI2RlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCisrI2RlZmluZSBfX3djc2NvbGxfbChTMSwgUzIsIEwpICAgICAgd2NzY29sbCgoUzEpLCAoUzIpKQorKyNkZWZpbmUgX193Y3N4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHdjc3hmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBUaGVzZSBhcmUgYmFzaWNhbGx5IGV4dGVuc2lvbnMgdG8gY2hhcl90cmFpdHMsIGFuZCBwZXJoYXBzIHNob3VsZAorKyAgLy8gYmUgcHV0IHRoZXJlIGluc3RlYWQgb2YgaGVyZS4KKysgIHRlbXBsYXRlPD4KKysgICAgaW50IAorKyAgICBjb2xsYXRlPGNoYXI+OjpfTV9jb21wYXJlKGNvbnN0IGNoYXIqIF9fb25lLCBjb25zdCBjaGFyKiBfX3R3bykgY29uc3QKKysgICAgeyAKKysgICAgICBpbnQgX19jbXAgPSBfX3N0cmNvbGxfbChfX29uZSwgX190d28sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOworKyAgICAgIHJldHVybiAoX19jbXAgPj4gKDggKiBzaXplb2YgKGludCkgLSAyKSkgfCAoX19jbXAgIT0gMCk7CisrICAgIH0KKysgIAorKyAgdGVtcGxhdGU8PgorKyAgICBzaXplX3QKKysgICAgY29sbGF0ZTxjaGFyPjo6X01fdHJhbnNmb3JtKGNoYXIqIF9fdG8sIGNvbnN0IGNoYXIqIF9fZnJvbSwgCisrCQkJCXNpemVfdCBfX24pIGNvbnN0IAorKyAgICB7IHJldHVybiBfX3N0cnhmcm1fbChfX3RvLCBfX2Zyb20sIF9fbiwgX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgaW50IAorKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV9jb21wYXJlKGNvbnN0IHdjaGFyX3QqIF9fb25lLCAKKysJCQkJIGNvbnN0IHdjaGFyX3QqIF9fdHdvKSBjb25zdAorKyAgICB7CisrICAgICAgaW50IF9fY21wID0gX193Y3Njb2xsX2woX19vbmUsIF9fdHdvLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsKKysgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDApOworKyAgICB9CisrICAKKysgIHRlbXBsYXRlPD4KKysgICAgc2l6ZV90CisrICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX3RyYW5zZm9ybSh3Y2hhcl90KiBfX3RvLCBjb25zdCB3Y2hhcl90KiBfX2Zyb20sCisrCQkJCSAgIHNpemVfdCBfX24pIGNvbnN0CisrICAgIHsgcmV0dXJuIF9fd2NzeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQorKyNlbmRpZgorK30KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMzAwIEBACisrLy8gc3RkOjpjdHlwZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS4xLjIgIGN0eXBlIHZpcnR1YWwgZnVuY3Rpb25zLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgIHdjdHlwZSgoUykpCisrI2RlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICB0b3d1cHBlcigoQykpCisrI2RlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICB0b3dsb3dlcigoQykpCisrI2RlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICBpc3djdHlwZSgoQyksIChNKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCisrICAvLyB2YXJpb3VzIC9jb25maWcvb3MvKiBmaWxlcy4KKysgIHRlbXBsYXRlPD4KKysgICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorKyAgICA6IGN0eXBlPGNoYXI+KDAsIGZhbHNlLCBfX3JlZnMpIAorKyAgICB7IAkJCisrICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKKysJeworKwkgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY3R5cGUpOworKwkgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZSwgX19zKTsgCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICB0aGlzLT5fTV90b3VwcGVyID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfdG91cHBlcjsKKysJICB0aGlzLT5fTV90b2xvd2VyID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfdG9sb3dlcjsKKysJICB0aGlzLT5fTV90YWJsZSA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX2I7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVCAgCisrICBjdHlwZTx3Y2hhcl90Pjo6X193bWFza190eXBlCisrICBjdHlwZTx3Y2hhcl90Pjo6X01fY29udmVydF90b193bWFzayhjb25zdCBtYXNrIF9fbSkgY29uc3QKKysgIHsKKysgICAgX193bWFza190eXBlIF9fcmV0OworKyAgICBzd2l0Y2ggKF9fbSkKKysgICAgICB7CisrICAgICAgY2FzZSBzcGFjZToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJzcGFjZSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBwcmludDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJwcmludCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBjbnRybDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJjbnRybCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSB1cHBlcjoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJ1cHBlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBsb3dlcjoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJsb3dlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBhbHBoYToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJhbHBoYSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBkaWdpdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJkaWdpdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBwdW5jdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJwdW5jdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSB4ZGlnaXQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgieGRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGFsbnVtOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImFsbnVtIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGdyYXBoOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImdyYXBoIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBkZWZhdWx0OgorKwlfX3JldCA9IF9fd21hc2tfdHlwZSgpOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKyAgCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9fdG93dXBwZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b3VwcGVyKHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrICAgICAgICAqX19sbyA9IF9fdG93dXBwZXJfbCgqX19sbywgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICAgICAgKytfX2xvOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrICAKKysgIHdjaGFyX3QKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b2xvd2VyKHdjaGFyX3QgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX190b3dsb3dlcl9sKF9fYywgX01fY19sb2NhbGVfY3R5cGUpOyB9CisrICAKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKyAgICAgICAgKl9fbG8gPSBfX3Rvd2xvd2VyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgICAgICsrX19sbzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgYm9vbAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9faXMobWFzayBfX20sIHdjaGFyX3QgX19jKSBjb25zdAorKyAgeyAKKysgICAgLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysgICAgLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKKysgICAgY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsgCisrICAgIGZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysgICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQorKwkgICYmIF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwl7CisrCSAgX19yZXQgPSB0cnVlOworKwkgIGJyZWFrOworKwl9CisrICAgIHJldHVybiBfX3JldDsgICAgCisrICB9CisrICAKKysgIGNvbnN0IHdjaGFyX3QqIAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9faXMoY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgbWFzayogX192ZWMpIGNvbnN0CisrICB7CisrICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytfX3ZlYywgKytfX2xvKQorKyAgICAgIHsKKysJLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysJLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7IAorKwltYXNrIF9fbSA9IDA7CisrCWZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysJICBpZiAoX19pc3djdHlwZV9sKCpfX2xvLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJICAgIF9fbSB8PSBfTV9iaXRbX19iaXRjdXJdOworKwkqX192ZWMgPSBfX207CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysgIAorKyAgY29uc3Qgd2NoYXJfdCogCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkgJiYgIXRoaXMtPmRvX2lzKF9fbSwgKl9fbG8pKQorKyAgICAgICsrX19sbzsKKysgICAgcmV0dXJuIF9fbG87CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkgJiYgdGhpcy0+ZG9faXMoX19tLCAqX19sbykgIT0gMCkKKysgICAgICArK19fbG87CisrICAgIHJldHVybiBfX2xvOworKyAgfQorKworKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fd2lkZW4oY2hhciBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfTV93aWRlbltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpXTsgfQorKworKyAgY29uc3QgY2hhciogCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCB3Y2hhcl90KiBfX2Rlc3QpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrCSpfX2Rlc3QgPSBfTV93aWRlbltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sbyldOworKwkrK19fbG87CisrCSsrX19kZXN0OworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBjaGFyCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19uYXJyb3cod2NoYXJfdCBfX3djLCBjaGFyIF9fZGZhdWx0KSBjb25zdAorKyAgeworKyAgICBpZiAoX193YyA+PSAwICYmIF9fd2MgPCAxMjggJiYgX01fbmFycm93X29rKQorKyAgICAgIHJldHVybiBfTV9uYXJyb3dbX193Y107CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgY29uc3QgaW50IF9fYyA9IHdjdG9iKF9fd2MpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsgCisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fbmFycm93KGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIGNoYXIgX19kZmF1bHQsIAorKwkgICAgY2hhciogX19kZXN0KSBjb25zdAorKyAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIGlmIChfTV9uYXJyb3dfb2spCisrICAgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKwl7CisrCSAgaWYgKCpfX2xvID49IDAgJiYgKl9fbG8gPCAxMjgpCisrCSAgICAqX19kZXN0ID0gX01fbmFycm93WypfX2xvXTsKKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIGNvbnN0IGludCBfX2MgPSB3Y3RvYigqX19sbyk7CisrCSAgICAgICpfX2Rlc3QgPSAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7CisrCSAgICB9CisrCSAgKytfX2xvOworKwkgICsrX19kZXN0OworKwl9CisrICAgIGVsc2UKKysgICAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrCXsKKysJICBjb25zdCBpbnQgX19jID0gd2N0b2IoKl9fbG8pOworKwkgICpfX2Rlc3QgPSAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7CisrCSAgKytfX2xvOworKwkgICsrX19kZXN0OworKwl9CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIHZvaWQKKysgIGN0eXBlPHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX2N0eXBlKCkKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOworKyNlbmRpZgorKyAgICB3aW50X3QgX19pOworKyAgICBmb3IgKF9faSA9IDA7IF9faSA8IDEyODsgKytfX2kpCisrICAgICAgeworKwljb25zdCBpbnQgX19jID0gd2N0b2IoX19pKTsKKysJaWYgKF9fYyA9PSBFT0YpCisrCSAgYnJlYWs7CisrCWVsc2UKKysJICBfTV9uYXJyb3dbX19pXSA9IHN0YXRpY19jYXN0PGNoYXI+KF9fYyk7CisrICAgICAgfQorKyAgICBpZiAoX19pID09IDEyOCkKKysgICAgICBfTV9uYXJyb3dfb2sgPSB0cnVlOworKyAgICBlbHNlCisrICAgICAgX01fbmFycm93X29rID0gZmFsc2U7CisrICAgIGZvciAoc2l6ZV90IF9faiA9IDA7CisrCSBfX2ogPCBzaXplb2YoX01fd2lkZW4pIC8gc2l6ZW9mKHdpbnRfdCk7ICsrX19qKQorKyAgICAgIF9NX3dpZGVuW19fal0gPSBidG93YyhfX2opOworKworKyAgICBmb3IgKHNpemVfdCBfX2sgPSAwOyBfX2sgPD0gMTE7ICsrX19rKQorKyAgICAgIHsgCisrCV9NX2JpdFtfX2tdID0gc3RhdGljX2Nhc3Q8bWFzaz4oX0lTYml0KF9faykpOworKwlfTV93bWFza1tfX2tdID0gX01fY29udmVydF90b193bWFzayhfTV9iaXRbX19rXSk7CisrICAgICAgfQorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgIH0KKysjZW5kaWYgLy8gIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrfQorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxMDAgQEAKKysvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggZ2V0dGV4dCBzdHVmZgorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworK2V4dGVybiAiQyIgY2hhciAqX19kY2dldHRleHQoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCQkgICAgIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpOworKyN1bmRlZiBnZXR0ZXh0CisrI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBfX2RjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrI2Vsc2UKKysjdW5kZWYgZ2V0dGV4dAorKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBTcGVjaWFsaXphdGlvbnMuCisrICB0ZW1wbGF0ZTw+CisrICAgIHN0cmluZworKyAgICBtZXNzYWdlczxjaGFyPjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCBzdHJpbmcmIF9fZGZhdWx0KSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKSk7CisrICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfbWVzc2FnZXMpOworKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2Vsc2UKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2VuZGlmCisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgd3N0cmluZworKyAgICBtZXNzYWdlczx3Y2hhcl90Pjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCB3c3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKKysgICAgeworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKKysgICAgICBjaGFyKiBfX21zZyA9IGdldHRleHQoX01fY29udmVydF90b19jaGFyKF9fZGZhdWx0KSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbHNlCisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbmRpZgorKyAgICB9CisrI2VuZGlmCisrfQorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDExOCBAQAorKy8vIHN0ZDo6bWVzc2FnZXMgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjcuMS4yICBtZXNzYWdlcyBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHByb3RvdHlwZXMgZm9yICp0ZXh0ZG9tYWluIGZ1bmNzCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrZXh0ZXJuICJDIiBjaGFyICpfX3RleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSk7CisrZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCQkJCSAgY29uc3QgY2hhciAqZGlybmFtZSk7CisrI2Vsc2UKKysjdW5kZWYgX190ZXh0ZG9tYWluCisrI3VuZGVmIF9fYmluZHRleHRkb21haW4KKysjZGVmaW5lIF9fdGV4dGRvbWFpbihEKSAgICAgICAgICAgKCh2b2lkKTApCisrI2RlZmluZSBfX2JpbmR0ZXh0ZG9tYWluKEQsUCkgICAgICgodm9pZCkwKQorKyNlbmRpZgorKworKyAgLy8gTm9uLXZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKHNpemVfdCBfX3JlZnMpCisrICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2dldF9jX2xvY2FsZSgpKSwgCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKF9TX2dldF9jX25hbWUoKSkKKysgICAgIHsgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgCisrCQkJCXNpemVfdCBfX3JlZnMpIAorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpKSwKKysgICAgIF9NX25hbWVfbWVzc2FnZXMoX19zKQorKyAgICAgeworKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKysgICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysgICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZyAKKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywgCisrCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CisrICAgIHsgCisrICAgICAgX19iaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworKyAgICAgIHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOyAKKysgICAgfQorKworKyAgLy8gVmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojp+bWVzc2FnZXMoKQorKyAgICB7IAorKyAgICAgIGlmIChfTV9uYW1lX21lc3NhZ2VzICE9IF9TX2dldF9jX25hbWUoKSkKKysJZGVsZXRlIFtdIF9NX25hbWVfbWVzc2FnZXM7CisrICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7IAorKyAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cgCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIAorKwkJCSAgICAgIGNvbnN0IGxvY2FsZSYpIGNvbnN0CisrICAgIHsgCisrICAgICAgLy8gTm8gZXJyb3IgY2hlY2tpbmcgaXMgZG9uZSwgYXNzdW1lIHRoZSBjYXRhbG9nIGV4aXN0cyBhbmQgY2FuCisrICAgICAgLy8gYmUgdXNlZC4KKysgICAgICBfX3RleHRkb21haW4oX19zLmNfc3RyKCkpOworKyAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHZvaWQgICAgCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2Nsb3NlKGNhdGFsb2cpIGNvbnN0IAorKyAgICB7IH0KKysKKysgICAvLyBtZXNzYWdlc19ieW5hbWUKKysgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlc19ieW5hbWU8X0NoYXJUPjo6bWVzc2FnZXNfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKysgICAgIDogbWVzc2FnZXM8X0NoYXJUPihfX3JlZnMpIAorKyAgICAgeyAKKysgICAgICAgaWYgKHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgIT0gbG9jYWxlOjpmYWNldDo6X1NfZ2V0X2NfbmFtZSgpKQorKwkgZGVsZXRlIFtdIHRoaXMtPl9NX25hbWVfbWVzc2FnZXM7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgdGhpcy0+X01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKworKyAgICAgICBpZiAoc3RkOjpzdHJjbXAoX19zLCAiQyIpICE9IDAgJiYgc3RkOjpzdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorKwkgeworKwkgICB0aGlzLT5fU19kZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysJICAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3MpOyAKKysJIH0KKysgICAgIH0KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNjkyIEBACisrLy8gc3RkOjptb25leXB1bmN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi42LjMuMiAgbW9uZXlwdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBvcHRpbWl6ZSB0aGlzIGZvciB1Y2xpYmMKKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6CisrICAvLyBzcGFjZSBub25lIHN5bWJvbCBzaWduIHZhbHVlCisrICBtb25leV9iYXNlOjpwYXR0ZXJuCisrICBtb25leV9iYXNlOjpfU19jb25zdHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VkZXMsIGNoYXIgX19zcGFjZSwgY2hhciBfX3Bvc24pCisrICB7IAorKyAgICBwYXR0ZXJuIF9fcmV0OworKworKyAgICAvLyBUaGlzIGluc2FuZWx5IGNvbXBsaWNhdGVkIHJvdXRpbmUgYXR0ZW1wdHMgdG8gY29uc3RydWN0IGEgdmFsaWQKKysgICAgLy8gcGF0dGVybiBmb3IgdXNlIHdpdGggbW9ueWVwdW5jdC4gQSBjb3VwbGUgb2YgaW52YXJpYW50czoKKysKKysgICAgLy8gaWYgKF9fcHJlY2VkZXMpIHN5bWJvbCAtPiB2YWx1ZQorKyAgICAvLyBlbHNlIHZhbHVlIC0+IHN5bWJvbAorKyAgICAKKysgICAgLy8gaWYgKF9fc3BhY2UpIHNwYWNlCisrICAgIC8vIGVsc2Ugbm9uZQorKworKyAgICAvLyBub25lID09IG5ldmVyIGZpcnN0CisrICAgIC8vIHNwYWNlIG5ldmVyIGZpcnN0IG9yIGxhc3QKKysKKysgICAgLy8gQW55IGVsZWdhbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgYXJlIHdlbGNvbWUuCisrICAgIHN3aXRjaCAoX19wb3NuKQorKyAgICAgIHsKKysgICAgICBjYXNlIDA6CisrICAgICAgY2FzZSAxOgorKwkvLyAxIFRoZSBzaWduIHByZWNlZGVzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgorKwlfX3JldC5maWVsZFswXSA9IHNpZ247CisrCWlmIChfX3NwYWNlKQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbi4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbiBhbmQgZW5kcyB3aXRoIG5vbmUuCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOworKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSAyOgorKwkvLyAyIFRoZSBzaWduIGZvbGxvd3MgdGhlIHZhbHVlIGFuZCBzeW1ib2wuCisrCWlmIChfX3NwYWNlKQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gZWl0aGVyIGVuZHMgd2l0aCBzaWduLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCSAgICBfX3JldC5maWVsZFszXSA9IHNpZ247CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBlbmRzIHdpdGggc2lnbiB0aGVuIG5vbmUuCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOworKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSAzOgorKwkvLyAzIFRoZSBzaWduIGltbWVkaWF0ZWx5IHByZWNlZGVzIHRoZSBzeW1ib2wuCisrCWlmIChfX3ByZWNlZGVzKQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gc2lnbjsKKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOwkgICAgCisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsJCQorKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkJX19yZXQuZmllbGRbM10gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzaWduOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgNDoKKysJLy8gNCBUaGUgc2lnbiBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBzeW1ib2wuCisrCWlmIChfX3ByZWNlZGVzKQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkgICAgX19yZXQuZmllbGRbMV0gPSBzaWduOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gc2lnbjsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysJOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgdm9pZAorKyAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIAorKwkJCQkJCSAgICAgY29uc3QgY2hhciopCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPGNoYXIsIHRydWU+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9IG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX0RFQ0lNQUxfUE9JTlQsIAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fVEhPVVNBTkRTX1NFUCwgCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgaWYgKCFfX25wb3NuKQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIoKSI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sIAorKwkJCQkJCQlfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAvLyBfSW50bCA9PSB0cnVlCisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX25sX2xhbmdpbmZvX2woX19JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9GUkFDX0RJR0lUUywgCisrCQkJCQkJICAgICAgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsIAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLCAKKysJCQkJCQkJX19ucG9zbik7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgdm9pZAorKyAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCAKKysJCQkJCQkgICAgICBjb25zdCBjaGFyKikKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8Y2hhciwgZmFsc2U+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9IG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX0RFQ0lNQUxfUE9JTlQsIAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fVEhPVVNBTkRTX1NFUCwgCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBpZiAoIV9fbnBvc24pCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwKKysJCQkJCQkJX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgLy8gX0ludGwgPT0gZmFsc2UKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLCAKKysJCQkJCQkJX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsIAorKwkJCQkJCQlfX25wb3NuKTsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+IAorKyAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4gCisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCAKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkJCQkJCQljb25zdCBjaGFyKikKKysjZWxzZQorKwkJCQkJCQljb25zdCBjaGFyKiBfX25hbWUpCisrI2VuZGlmCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIHRydWU+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxzZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKysJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysKKysJICBjb25zdCBjaGFyKiBfX2Nwb3NzaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NuZWdzaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NjdXJyID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOworKworKwkgIHdjaGFyX3QqIF9fd2NzX3BzID0gMDsKKysJICB3Y2hhcl90KiBfX3djc19ucyA9IDA7CisrCSAgY29uc3QgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIHRyeQorKwkgICAgeworKwkgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKysJICAgICAgc2l6ZV90IF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCSAgICAgIAorKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NuZWdzaWduKTsKKysJICAgICAgaWYgKCFfX25wb3NuKQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiKCkiOworKwkgICAgICBlbHNlIGlmIChfX2xlbikKKysJCXsgCisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19ucyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX25zLCAmX19jbmVnc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fd2NzX25zOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCSAgICAgIAorKwkgICAgICAvLyBfSW50bCA9PSB0cnVlLgorKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsKKysJICAgICAgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgd2NoYXJfdCogX193Y3MgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djcywgJl9fY2N1cnIsIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX193Y3M7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICAgIH0KKysJICBjYXRjaCAoLi4uKQorKwkgICAgeworKwkgICAgICBkZWxldGUgX01fZGF0YTsKKysJICAgICAgX01fZGF0YSA9IDA7CisrCSAgICAgIGRlbGV0ZSBfX3djc19wczsKKysJICAgICAgZGVsZXRlIF9fd2NzX25zOwkgICAgICAKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisrCSAgICB9IAorKwkgIAorKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfRlJBQ19ESUdJVFMsIAorKwkJCQkJCSAgICAgIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLCAKKysJCQkJCQkJX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwgCisrCQkJCQkJCV9fbnBvc24pOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICB2b2lkCisrICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCQkJCQkJICAgICAgIGNvbnN0IGNoYXIqKQorKyNlbHNlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fbmFtZSkKKysjZW5kaWYKKysgIHsKKysgICAgaWYgKCFfTV9kYXRhKQorKyAgICAgIF9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIGZhbHNlPjsKKysKKysgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxzZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKysgICAgICAgICAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrI2VuZGlmCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrICAgICAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKworKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19DVVJSRU5DWV9TWU1CT0wsIF9fY2xvYyk7CisrCisrCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOworKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKKysJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICB0cnkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKysgICAgICAgICAgICAgIHNpemVfdCBfX2xlbjsKKysgICAgICAgICAgICAgIF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOworKyAgICAgICAgICAgICAgaWYgKF9fbGVuKQorKyAgICAgICAgICAgICAgICB7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKwkgICAgICAKKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jbmVnc2lnbik7CisrCSAgICAgIGlmICghX19ucG9zbikKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIigpIjsKKysJICAgICAgZWxzZSBpZiAoX19sZW4pCisrCQl7IAorKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAgICAgLy8gX0ludGwgPT0gdHJ1ZS4KKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jY3Vycik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIHdjaGFyX3QqIF9fd2NzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3MsICZfX2NjdXJyLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fd2NzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgICAgfQorKyAgICAgICAgICBjYXRjaCAoLi4uKQorKwkgICAgeworKwkgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgICAgICAgICAgIF9NX2RhdGEgPSAwOworKwkgICAgICBkZWxldGUgX193Y3NfcHM7CisrCSAgICAgIGRlbGV0ZSBfX3djc19uczsJICAgICAgCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJICAgIH0KKysKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLCAKKysJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsIAorKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25wb3NuKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+IAorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCisrICAgICAgICAgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsKKysgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT46On5tb25leXB1bmN0KCkKKysgICAgeworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUKKysgICAgICAgICAgJiYgd2NzY21wKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24sIEwiKCkiKSAhPSAwKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sOworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICB9CisrI2VuZGlmCisrfQorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDE2MCBAQAorKy8vIHN0ZDo6bnVtcHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjMuMS4yICBudW1wdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PiAKKysgICAgdm9pZAorKyAgICBudW1wdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX251bXB1bmN0X2NhY2hlPGNoYXI+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7CisrCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworKworKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbnVtX2Jhc2U6Ol9TX29lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfb3V0W19faV0gPSBfX251bV9iYXNlOjpfU19hdG9tc19vdXRbX19pXTsKKysKKysJICBmb3IgKHNpemVfdCBfX2ogPSAwOyBfX2ogPCBfX251bV9iYXNlOjpfU19pZW5kOyArK19faikKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX2luW19fal0gPSBfX251bV9iYXNlOjpfU19hdG9tc19pbltfX2pdOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChERUNJTUFMX1BPSU5ULCAKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKFRIT1VTQU5EU19TRVAsIAorKwkJCQkJCQlfX2Nsb2MpKTsKKysKKysJICAvLyBDaGVjayBmb3IgTlVMTCwgd2hpY2ggaW1wbGllcyBubyBncm91cGluZy4KKysJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSAnXDAnKQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChHUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJfQorKworKyAgICAgIC8vIE5COiBUaGVyZSBpcyBubyB3YXkgdG8gZXh0YWN0IHRoaXMgaW5mbyBmcm9tIHBvc2l4IGxvY2FsZXMuCisrICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woWUVTU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lID0gInRydWUiOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lX3NpemUgPSA0OworKyAgICAgIC8vIF9NX2ZhbHNlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChOT1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWUgPSAiZmFsc2UiOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKKysgICAgfQorKyAKKysgIHRlbXBsYXRlPD4gCisrICAgIG51bXB1bmN0PGNoYXI+Ojp+bnVtcHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrICAgCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+IAorKyAgICB2b2lkCisrICAgIG51bXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8d2NoYXJfdD47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKysKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysKKysJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV0pOworKworKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal0pOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIC8vIE5COiBJbiB0aGUgR05VIG1vZGVsIHdjaGFyX3QgaXMgYWx3YXlzIDMyIGJpdCB3aWRlLgorKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysKKysJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCX0KKysKKysgICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFjdCB0aGlzIGluZm8gZnJvbSBwb3NpeCBsb2NhbGVzLgorKyAgICAgIC8vIF9NX3RydWVuYW1lID0gX19ubF9sYW5naW5mb19sKFlFU1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZSA9IEwidHJ1ZSI7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7CisrICAgICAgLy8gX01fZmFsc2VuYW1lID0gX19ubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZSA9IEwiZmFsc2UiOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgbnVtcHVuY3Q8d2NoYXJfdD46On5udW1wdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysgI2VuZGlmCisrfQorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDQwNiBAQAorKy8vIHN0ZDo6dGltZV9nZXQsIHN0ZDo6dGltZV9wdXQgaW1wbGVtZW50YXRpb24sIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEuMiAtIHRpbWVfZ2V0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6CisrICAgIF9NX3B1dChjaGFyKiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3QgY2hhciogX19mb3JtYXQsIAorKwkgICBjb25zdCB0bSogX190bSkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX19zdHJmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorKwkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysjZWxzZQorKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RyZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKysgICAgICBpZiAoX19sZW4gPT0gMCkKKysJX19zWzBdID0gJ1wwJzsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8Y2hhcj47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSAiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9ICIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSAiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9ICIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gIiI7CisrCSAgX01fZGF0YS0+X01fYW0gPSAiQU0iOworKwkgIF9NX2RhdGEtPl9NX3BtID0gIlBNIjsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSAiIjsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSAiU3VuZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gIk1vbmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9ICJUdWVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gIldlZG5lc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9ICJUaHVyc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9ICJGcmlkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSAiU2F0dXJkYXkiOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSAiU3VuIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9ICJNb24iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gIlR1ZSI7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSAiV2VkIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9ICJUaHUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gIkZyaSI7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSAiU2F0IjsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSAiSmFudWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9ICJGZWJydWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9ICJNYXJjaCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9ICJBcHJpbCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9ICJNYXkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSAiSnVuZSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9ICJKdWx5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gIkF1Z3VzdCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9ICJTZXB0ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSAiT2N0b2JlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9ICJOb3ZlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9ICJEZWNlbWJlciI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gIkphbiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSAiRmViIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9ICJNYXIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gIkFwciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSAiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9ICJKdW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gIkp1bCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSAiQXVnIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9ICJTZXAiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gIk9jdCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSAiTm92IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9ICJEZWMiOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsgCisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChUX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfRF9UX0ZNVCwKKysJCQkJCQkJICAgICBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtID0gX19ubF9sYW5naW5mb19sKEFNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wbSA9IF9fbmxfbGFuZ2luZm9fbChQTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKFRfRk1UX0FNUE0sIF9fY2xvYyk7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gX19ubF9sYW5naW5mb19sKERBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBfX25sX2xhbmdpbmZvX2woREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gX19ubF9sYW5naW5mb19sKERBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBfX25sX2xhbmdpbmZvX2woREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gX19ubF9sYW5naW5mb19sKERBWV83LCBfX2Nsb2MpOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gX19ubF9sYW5naW5mb19sKEFCREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNywgX19jbG9jKTsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fbmxfbGFuZ2luZm9fbChNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gX19ubF9sYW5naW5mb19sKE1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBfX25sX2xhbmdpbmZvX2woTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fbmxfbGFuZ2luZm9fbChNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gX19ubF9sYW5naW5mb19sKE1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX25sX2xhbmdpbmZvX2woTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fbmxfbGFuZ2luZm9fbChNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gX19ubF9sYW5naW5mb19sKE1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEyLCBfX2Nsb2MpOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMiwgX19jbG9jKTsKKysJfQorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46OgorKyAgICBfTV9wdXQod2NoYXJfdCogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IHdjaGFyX3QqIF9fZm9ybWF0LCAKKysJICAgY29uc3QgdG0qIF9fdG0pIGNvbnN0CisrICAgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwgX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisrCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyNlbHNlCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSB3Y3NmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKyAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorKyAgICAgIGlmIChfX2xlbiA9PSAwKQorKwlfX3NbMF0gPSBMJ1wwJzsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8d2NoYXJfdD47CisrCisrI3dhcm5pbmcgd2lkZSB0aW1lIHN0dWZmCisrLy8gICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IEwiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IEwiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fYW0gPSBMIkFNIjsKKysJICBfTV9kYXRhLT5fTV9wbSA9IEwiUE0iOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IEwiIjsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBMIlN1bmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IEwiTW9uZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gTCJUdWVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gTCJXZWRuZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBMIlRodXJzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gTCJGcmlkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBMIlNhdHVyZGF5IjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gTCJTdW4iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gTCJNb24iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gTCJUdWUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gTCJXZWQiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gTCJUaHUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gTCJGcmkiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gTCJTYXQiOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IEwiSmFudWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IEwiRmVicnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBMIk1hcmNoIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gTCJBcHJpbCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IEwiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gTCJKdW5lIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gTCJKdWx5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gTCJBdWd1c3QiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBMIlNlcHRlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IEwiT2N0b2JlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IEwiTm92ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBMIkRlY2VtYmVyIjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBMIkphbiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBMIkZlYiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBMIk1hciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBMIkFwciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBMIk1heSI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBMIkp1biI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBMIkp1bCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBMIkF1ZyI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBMIlNlcCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBMIk9jdCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBMIk5vdiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBMIkRlYyI7CisrCX0KKysjaWYgMAorKyAgICAgIGVsc2UKKysJeworKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7IAorKworKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90ICpfX3c7IH0gX191OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9EX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dUX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1BNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wbSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1RfRk1UX0FNUE0sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX191Ll9fdzsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gX191Ll9fdzsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX191Ll9fdzsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEyLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX3UuX193OworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEyLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX191Ll9fdzsKKysJfQorKyNlbmRpZiAvLyAwCisrICAgIH0KKysjZW5kaWYKKyt9CitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw2OCBAQAorKy8vIHN0ZDo6dGltZV9nZXQsIHN0ZDo6dGltZV9wdXQgaW1wbGVtZW50YXRpb24sIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEuMiAtIHRpbWVfZ2V0IGZ1bmN0aW9ucworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4zLjIgLSB0aW1lX3B1dCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KHNpemVfdCBfX3JlZnMpIAorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwgCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY2FjaGVfdHlwZSogX19jYWNoZSwgc2l6ZV90IF9fcmVmcykgCisrICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShfX2NhY2hlKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLCAKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJICAgICBzaXplX3QgX19yZWZzKSAKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksIAorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChfX3MpCisrICAgIHsgCisrICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKKysgICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOyAKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+Ojp+X190aW1lcHVuY3QoKQorKyAgICB7IAorKyAgICAgIGlmIChfTV9uYW1lX3RpbWVwdW5jdCAhPSBfU19nZXRfY19uYW1lKCkpCisrCWRlbGV0ZSBbXSBfTV9uYW1lX3RpbWVwdW5jdDsKKysgICAgICBkZWxldGUgX01fZGF0YTsgCisrICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV90aW1lcHVuY3QpOyAKKysgICAgfQorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlndXJlIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlndXJlCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjI5OjIyLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlndXJlCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtNTc2OSw3ICs1NzY5LDcgQEAKKyAgIGVuYWJsZXZhbD0iJGVuYWJsZV9jbG9jYWxlIgorIAorICAgICAgIGNhc2UgIiRlbmFibGV2YWwiIGluCistICAgICAgIGdlbmVyaWN8Z251fGllZWVfMTAwMy4xLTIwMDF8eWVzfG5vfGF1dG8pIDs7CisrICAgICAgIGdlbmVyaWN8Z251fGllZWVfMTAwMy4xLTIwMDF8dWNsaWJjfHllc3xub3xhdXRvKSA7OworICAgICAgICAqKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBVbmtub3duIGFyZ3VtZW50IHRvIGVuYWJsZS9kaXNhYmxlIGNsb2NhbGUiID4mNQorIGVjaG8gIiRhc19tZTogZXJyb3I6IFVua25vd24gYXJndW1lbnQgdG8gZW5hYmxlL2Rpc2FibGUgY2xvY2FsZSIgPiYyO30KKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKK0BAIC01ODAyLDYgKzU4MDIsOSBAQAorICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCisrICAgICAgbGludXgtdWNsaWJjKikKKysgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCisrCTs7CisgICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCisgICAgICAgICBlbmFibGVfY2xvY2FsZV9mbGFnPWdudQorICAgICAgICAgOzsKK0BAIC02MTkwLDYgKzYxOTMsNzYgQEAKKyAgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjCisgICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorICAgICAgIDs7CisrICAgIHVjbGliYykKKysgICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1Y2xpYmMiID4mNQorK2VjaG8gIiR7RUNIT19UfXVjbGliYyIgPiY2CisrCisrICAgICAgIyBEZWNsYXJlIGludGVudGlvbiB0byB1c2UgZ2V0dGV4dCwgYW5kIGFkZCBzdXBwb3J0IGZvciBzcGVjaWZpYworKyAgICAgICMgbGFuZ3VhZ2VzLgorKyAgICAgICMgRm9yIHNvbWUgcmVhc29uLCBBTExfTElOR1VBUyBoYXMgdG8gYmUgYmVmb3JlIEFNLUdOVS1HRVRURVhUCisrICAgICAgQUxMX0xJTkdVQVM9ImRlIGZyIgorKworKyAgICAgICMgRG9uJ3QgY2FsbCBBTS1HTlUtR0VUVEVYVCBoZXJlLiBJbnN0ZWFkLCBhc3N1bWUgZ2xpYmMuCisrICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtc2dmbXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtc2dmbXQ7IGFjX3dvcmQ9JDIKKytlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2hlY2tfbXNnZm10K3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRjaGVja19tc2dmbXQiOyB0aGVuCisrICBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0iJGNoZWNrX21zZ2ZtdCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICAgIGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10PSJ5ZXMiCisrICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrZG9uZQorKworKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10IiAmJiBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0ibm8iCisrZmkKKytmaQorK2NoZWNrX21zZ2ZtdD0kYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQKKytpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgorKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGNoZWNrX21zZ2ZtdCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGNoZWNrX21zZ2ZtdCIgPiY2CisrZWxzZQorKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKKytmaQorKworKyAgICAgIGlmIHRlc3QgeCIkY2hlY2tfbXNnZm10IiA9IHgieWVzIiAmJiB0ZXN0IHgiJGVuYWJsZV9ubHMiID0geCJ5ZXMiOyB0aGVuCisrICAgICAgICBVU0VfTkxTPXllcworKyAgICAgIGZpCisrICAgICAgIyBFeHBvcnQgdGhlIGJ1aWxkIG9iamVjdHMuCisrICAgICAgZm9yIGxpbmcgaW4gJEFMTF9MSU5HVUFTOyBkbyBcCisrICAgICAgICBnbGliY3h4X01PRklMRVM9IiRnbGliY3h4X01PRklMRVMgJGxpbmcubW8iOyBcCisrICAgICAgICBnbGliY3h4X1BPRklMRVM9IiRnbGliY3h4X1BPRklMRVMgJGxpbmcucG8iOyBcCisrICAgICAgZG9uZQorKworKworKworKyAgICAgIENMT0NBTEVfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrICAgICAgQ0xPQ0FMRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKyAgICAgIENDT0RFQ1ZUX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworKyAgICAgIENDT0xMQVRFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworKyAgICAgIENDVFlQRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrICAgICAgQ01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrICAgICAgQ01FU1NBR0VTX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKysgICAgICBDTU9ORVlfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKyAgICAgIENOVU1FUklDX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKyAgICAgIENUSU1FX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysgICAgICA7OworICAgZXNhYworIAorICAgIyBUaGlzIGlzIHdoZXJlIHRoZSB0ZXN0c3VpdGUgbG9va3MgZm9yIGxvY2FsZSBjYXRhbG9ncywgdXNpbmcgdGhlCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oIGdjYy00LjIuMS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaAorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCTIwMDUtMDgtMTcgMDQ6Mjg6NDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMTAxLDcgKzEwMSw5IEBACisgdXNpbmcgc3RkOjp3bWVtY3B5OworIHVzaW5nIHN0ZDo6d21lbW1vdmU7CisgdXNpbmcgc3RkOjp3bWVtc2V0OworKyNpZiBfR0xJQkNYWF9IQVZFX1dDU0ZUSU1FCisgdXNpbmcgc3RkOjp3Y3NmdGltZTsKKysjZW5kaWYKKyAKKyAjaWYgX0dMSUJDWFhfVVNFX0M5OQorIHVzaW5nIHN0ZDo6d2NzdG9sZDsKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvc3RkX2N3Y2hhci5oIGdjYy00LjIuMS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9zdGRfY3djaGFyLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9zdGRfY3djaGFyLmgJMjAwNi0xMi0wNyAxMDozMzo1MS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvc3RkX2N3Y2hhci5oCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMTgyLDcgKzE4Miw5IEBACisgICB1c2luZyA6Ondjc2NvbGw7CisgICB1c2luZyA6Ondjc2NweTsKKyAgIHVzaW5nIDo6d2NzY3NwbjsKKysjaWYgX0dMSUJDWFhfSEFWRV9XQ1NGVElNRQorICAgdXNpbmcgOjp3Y3NmdGltZTsKKysjZW5kaWYKKyAgIHVzaW5nIDo6d2NzbGVuOworICAgdXNpbmcgOjp3Y3NuY2F0OworICAgdXNpbmcgOjp3Y3NuY21wOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8xMzAtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjMvMTMwLXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg4ZGMyMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjMvMTMwLXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2gKQEAgLTAsMCArMSwyMjMgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCTIwMDctMDgtMDMgMjA6MzA6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtMzksMjAgKzM5LDYgQEAKKyAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fc3RydG9sX2woUywgRSwgQiwgTCkgICAgICBzdHJ0b2woKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG91bF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b3VsKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvbGxfbChTLCBFLCBCLCBMKSAgICAgc3RydG9sbCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b3VsbF9sKFMsIEUsIEIsIEwpICAgIHN0cnRvdWxsKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorLSNkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKy0jZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorLSN3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CistI2RlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorLSNkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorLSNkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQgCisgeworICAgdGVtcGxhdGU8PgorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAkyMDA3LTA4LTAzIDIwOjMwOjUzLjAwMDAwMDAwMCArMDIwMAorQEAgLTY4LDYgKzY4LDcgQEAKKyB7CisgICBleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisgfQorKyNkZWZpbmUgX191c2Vsb2NhbGUgdXNlbG9jYWxlCisgI2VuZGlmCisgCisgbmFtZXNwYWNlIHN0ZAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgJMjAwNy0wOC0wMyAyMDozMDo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC02MCw0ICs2MCw0OSBAQAorIGV4dGVybiAiQyIgX190eXBlb2Yod2N0eXBlX2wpIF9fd2N0eXBlX2w7CisgI2VuZGlmIAorIAorKyMgZGVmaW5lIF9fbmxfbGFuZ2luZm9fbCBubF9sYW5naW5mb19sCisrIyBkZWZpbmUgX19zdHJjb2xsX2wgc3RyY29sbF9sCisrIyBkZWZpbmUgX19zdHJmdGltZV9sIHN0cmZ0aW1lX2wKKysjIGRlZmluZSBfX3N0cnRvZF9sIHN0cnRvZF9sCisrIyBkZWZpbmUgX19zdHJ0b2ZfbCBzdHJ0b2ZfbAorKyMgZGVmaW5lIF9fc3RydG9sZF9sIHN0cnRvbGRfbAorKyMgZGVmaW5lIF9fc3RyeGZybV9sIHN0cnhmcm1fbAorKyMgZGVmaW5lIF9fbmV3bG9jYWxlIG5ld2xvY2FsZQorKyMgZGVmaW5lIF9fZnJlZWxvY2FsZSBmcmVlbG9jYWxlCisrIyBkZWZpbmUgX19kdXBsb2NhbGUgZHVwbG9jYWxlCisrIyBkZWZpbmUgX191c2Vsb2NhbGUgdXNlbG9jYWxlCisrCisrIyBpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyMgIGRlZmluZSBfX2lzd2N0eXBlX2wgaXN3Y3R5cGVfbAorKyMgIGRlZmluZSBfX3Rvd2xvd2VyX2wgdG93bG93ZXJfbAorKyMgIGRlZmluZSBfX3Rvd3VwcGVyX2wgdG93dXBwZXJfbAorKyMgIGRlZmluZSBfX3djc2NvbGxfbCB3Y3Njb2xsX2wKKysjICBkZWZpbmUgX193Y3NmdGltZV9sIHdjc2Z0aW1lX2wKKysjICBkZWZpbmUgX193Y3N4ZnJtX2wgd2NzeGZybV9sCisrIyAgZGVmaW5lIF9fd2N0eXBlX2wgd2N0eXBlX2wKKysjIGVuZGlmCisrCisrI2Vsc2UKKysjIGRlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyMgZGVmaW5lIF9fc3RyY29sbF9sKFMxLCBTMiwgTCkgICAgICBzdHJjb2xsKChTMSksIChTMikpCisrIyBkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorKyMgZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorKyMgZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKysjIHdhcm5pbmcgc2hvdWxkIGR1bW15IF9fbmV3bG9jYWxlIGNoZWNrIGZvciBDfFBPU0lYID8KKysjIGRlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorKyMgZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKysjIGRlZmluZSBfX2R1cGxvY2FsZShhKSAgICAgICAgICAgICAgX19jX2xvY2FsZSgpCisrLy8jIGRlZmluZSBfX3VzZWxvY2FsZSA/CisrLy8KKysjIGlmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrIyAgZGVmaW5lIF9faXN3Y3R5cGVfbChDLCBNLCBMKSAgICAgICBpc3djdHlwZSgoQyksIChNKSkKKysjICBkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgIHRvd2xvd2VyKChDKSkKKysjICBkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgIHRvd3VwcGVyKChDKSkKKysjICBkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKysvLyMgIGRlZmluZSBfX3djc2Z0aW1lX2woUywgTSwgRiwgVCwgTCkgIHdjc2Z0aW1lKChTKSwgKE0pLCAoRiksIChUKSkgCisrIyAgZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKysjICBkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgIHdjdHlwZSgoUykpCisrIyBlbmRpZgorKworICNlbmRpZiAvLyBHTElCQyAyLjMgYW5kIGxhdGVyCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zNiwxMyArMzYsNiBAQAorICNpbmNsdWRlIDxsb2NhbGU+CisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorLSNkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorLSNkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKy0jZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gVGhlc2UgYXJlIGJhc2ljYWxseSBleHRlbnNpb25zIHRvIGNoYXJfdHJhaXRzLCBhbmQgcGVyaGFwcyBzaG91bGQKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zOCwxMyArMzgsNiBAQAorICN1bmRlZiBfTElCQworICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgd2N0eXBlKChTKSkKKy0jZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgIHRvd3VwcGVyKChDKSkKKy0jZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgIHRvd2xvd2VyKChDKSkKKy0jZGVmaW5lIF9faXN3Y3R5cGVfbChDLCBNLCBMKSAgICAgIGlzd2N0eXBlKChDKSwgKE0pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBOQjogVGhlIG90aGVyIGN0eXBlPGNoYXI+IHNwZWNpYWxpemF0aW9ucyBhcmUgaW4gc3JjL2xvY2FsZS5jYyBhbmQKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zOSwxMyArMzksMTAgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggZ2V0dGV4dCBzdHVmZgorICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLWV4dGVybiAiQyIgY2hhciAqX19kY2dldHRleHQoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKy0JCQkgICAgIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpOworICN1bmRlZiBnZXR0ZXh0CistI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBfX2RjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBkY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorICNlbHNlCistI3VuZGVmIGdldHRleHQKKyAjZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKyAjZW5kaWYKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAkyMDA3LTA4LTAzIDIwOjMwOjUzLjAwMDAwMDAwMCArMDIwMAorQEAgLTM2LDE1ICszNiwxMSBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLWV4dGVybiAiQyIgY2hhciAqX190ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOworLWV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorLQkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUpOworLSNlbHNlCistI3VuZGVmIF9fdGV4dGRvbWFpbgorLSN1bmRlZiBfX2JpbmR0ZXh0ZG9tYWluCistI2RlZmluZSBfX3RleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorLSNkZWZpbmUgX19iaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI3VuZGVmIHRleHRkb21haW4KKysjdW5kZWYgYmluZHRleHRkb21haW4KKysjZGVmaW5lIHRleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisgI2VuZGlmCisgCisgICAvLyBOb24tdmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorQEAgLTcwLDcgKzY2LDcgQEAKKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywgCisgCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CisgICAgIHsgCistICAgICAgX19iaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworKyAgICAgIGJpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CisgICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7IAorICAgICB9CisgCitAQCAtOTAsNyArODYsNyBAQAorICAgICB7IAorICAgICAgIC8vIE5vIGVycm9yIGNoZWNraW5nIGlzIGRvbmUsIGFzc3VtZSB0aGUgY2F0YWxvZyBleGlzdHMgYW5kIGNhbgorICAgICAgIC8vIGJlIHVzZWQuCistICAgICAgX190ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKysgICAgICB0ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKyAgICAgICByZXR1cm4gMDsKKyAgICAgfQorIAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMwOjUzLjAwMDAwMDAwMCArMDIwMAorQEAgLTQzLDEwICs0Myw2IEBACisgI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisgI2VuZGlmCisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIC8vIENvbnN0cnVjdCBhbmQgcmV0dXJuIHZhbGlkIHBhdHRlcm4gY29uc2lzdGluZyBvZiBzb21lIGNvbWJpbmF0aW9uIG9mOgorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtNDEsOSArNDEsNiBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKKyB7CitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC00MCw5ICs0MCw2IEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisgI2VuZGlmCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCistI2VuZGlmCisgCisgbmFtZXNwYWNlIHN0ZAorIHsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjMvMTQwLXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8xNDAtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc3YmI1NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjMvMTQwLXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMToyNC4wMDAwMDAwMDAgKzAyMDAKK0BAIC00MDEsNyArNDAxLDcgQEAKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CistIyBlbHNlCisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworICMgZW5kaWYKK0BAIC01NTYsNyArNTU2LDcgQEAKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CistIyBlbHNlCisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworICMgZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMxOjI0LjAwMDAwMDAwMCArMDIwMAorQEAgLTEyNywxMiArMTI3LDI1IEBACisgCXsKKyAJICAvLyBOYW1lZCBsb2NhbGUuCisgCSAgLy8gTkI6IEluIHRoZSBHTlUgbW9kZWwgd2NoYXJfdCBpcyBhbHdheXMgMzIgYml0IHdpZGUuCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG51bWVyaWMKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfXworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbmRpZgorKyNlbHNlCisgCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKyAJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisgCisgCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorIAorIAkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09IEwnXDAnKQorIAkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjMvMTUwLXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8xNTAtdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM0ZjRlNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjMvMTUwLXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoCkBAIC0wLDAgKzEsMzU0IEBACitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCTIwMDctMDgtMDMgMjA6MzA6NTMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwkyMDA3LTA4LTAzIDIwOjMxOjU0LjAwMDAwMDAwMCArMDIwMAorQEAgLTQ2LDE2ICs0NiwxMyBAQAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGZsb2F0JiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgCisgCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICAgIHsKKy0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKy0JeworLQkgIGNoYXIqIF9fc2FuaXR5OworLQkgIGVycm5vID0gMDsKKy0JICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fZjsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwlfX3YgPSBfX2Y7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdGVtcGxhdGU8PgorQEAgLTYzLDE2ICs2MCwxMyBAQAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIAorIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorICAgICB7CistICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCistCXsKKy0JICBjaGFyKiBfX3Nhbml0eTsKKy0JICBlcnJubyA9IDA7CistCSAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CistICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorLQkgICAgX192ID0gX19kOworLQkgIGVsc2UKKy0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworLQl9CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwlfX3YgPSBfX2Q7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdGVtcGxhdGU8PgorQEAgLTgwLDE2ICs3NCwxMyBAQAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGxvbmcgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKy0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCistCSAgICBfX3YgPSBfX2xkOworLQkgIGVsc2UKKy0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworLQl9CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19sZDsKKysgICAgICBlbHNlCisrCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICB9CisgCisgICB2b2lkCitAQCAtMTEwLDcgKzEwMSw3IEBACisgICB2b2lkCisgICBsb2NhbGU6OmZhY2V0OjpfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKyAgIHsKKy0gICAgaWYgKF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKKysgICAgaWYgKF9fY2xvYyAmJiBfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCisgICAgICAgX19mcmVlbG9jYWxlKF9fY2xvYyk7IAorICAgfQorIAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAkyMDA3LTA4LTAzIDIwOjMwOjUzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAkyMDA3LTA4LTAzIDIwOjMxOjU0LjAwMDAwMDAwMCArMDIwMAorQEAgLTM5LDIxICszOSwyMyBAQAorICNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKyAKKyAjaW5jbHVkZSA8Y3N0cmluZz4gICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnN0cmxlbgorLSNpbmNsdWRlIDxjc3RkaW8+ICAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c25wcmludGYgb3Igc3RkOjpzcHJpbnRmCisrI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjp2c25wcmludGYgb3Igc3RkOjp2c3ByaW50ZgorICNpbmNsdWRlIDxjbG9jYWxlPgorICNpbmNsdWRlIDxsYW5naW5mby5oPgkJLy8gRm9yIGNvZGVjdnQKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggdGhpcworICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysjaWZkZWYgX0dMSUJDWFhfVVNFX0lDT05WCisgI2luY2x1ZGUgPGljb252Lmg+CQkvLyBGb3IgY29kZWN2dCB1c2luZyBpY29udiwgaWNvbnZfdAorICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLSNpbmNsdWRlIDxsaWJpbnRsLmg+IAkJLy8gRm9yIG1lc3NhZ2VzCisrI2lmZGVmIEhBVkVfTElCSU5UTF9ICisrI2luY2x1ZGUgPGxpYmludGwuaD4JCS8vIEZvciBtZXNzYWdlcworICNlbmRpZgorKyNpbmNsdWRlIDxjc3RkYXJnPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHdoYXQgaXMgX0dMSUJDWFhfQ19MT0NBTEVfR05VIGZvcgorKy8vIHBzbTogdXNlZCBpbiBvcy9nbnUtbGludXgvY3R5cGVfbm9uaW5saW5lLmgKKyAjZW5kaWYKKyAjZGVmaW5lIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSAxCisgCitAQCAtNjIsNyArNjQsNyBAQAorICNlbmRpZgorIC8vICNkZWZpbmUgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgNgorICNkZWZpbmUgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgMAorLSAKKysKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIG5hbWVzcGFjZSBfX2dudV9jeHgKKyB7CitAQCAtNzksMjIgKzgxLDI0IEBACisgICB0eXBlZGVmIGludCoJCQlfX2NfbG9jYWxlOworICNlbmRpZgorIAorLSAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgX1R2IHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgorLSAgLy8gc3RyaW5nLiAgSWYgc25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworLSAgLy8gdGhlIHVuc2FmZSBzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKysgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIGRvdWJsZSB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKysgIC8vIHN0cmluZy4gIElmIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCisrICAvLyB0aGUgdW5zYWZlIHZzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKyAgIC8vIGJlIGF2b2lkZWQuCistICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CistICAgIGludAorLSAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LCAKKy0JCSAgICAgY29uc3QgaW50IF9fc2l6ZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpLAorLQkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKy0JCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19wcmVjKQorKyAgICBpbmxpbmUgaW50CisrICAgIF9fY29udmVydF9mcm9tX3YoY29uc3QgX19jX2xvY2FsZSYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrCQkJCQlfX2Nsb2MgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQorKyNlbmRpZgorKwkJICAgICAsCisrCQkgICAgIGNoYXIqIF9fb3V0LAorKwkJICAgICBjb25zdCBpbnQgX19zaXplLAorKwkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwgLi4uKQorICAgICB7CisrICAgICAgdmFfbGlzdCBfX2FyZ3M7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisgICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19jbG9jKTsKKyAjZWxzZQorLQkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYykKKy0gICAgeworICMgaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgICAgICAgY2hhciogX19vbGQgPSBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworICAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19vbGQpICsgMV07CitAQCAtMTAzLDcgKzEwNyw5IEBACisgIyBlbmRpZgorICNlbmRpZgorIAorLSAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKKysgICAgICB2YV9zdGFydChfX2FyZ3MsIF9fZm10KTsKKysgICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnZzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19hcmdzKTsKKysgICAgICB2YV9lbmQoX19hcmdzKTsKKyAKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKyAgICAgICBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fb2xkKTsKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMTo1NC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMyw5ICszMywxNCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKyBuYW1lc3BhY2Ugc3RkCitAQCAtMTM4LDIwICsxNDMsMzQgQEAKKyAgIGN0eXBlPHdjaGFyX3Q+OjoKKyAgIGRvX2lzKG1hc2sgX19tLCB3Y2hhcl90IF9fYykgY29uc3QKKyAgIHsgCistICAgIC8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCistICAgIC8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKyAgICAvLyBUaGUgY2FzZSBvZiBfX20gPT0gY3R5cGVfYmFzZTo6c3BhY2UgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCwKKysgICAgLy8gZHVlIHRvIGl0cyB1c2UgaW4gbWFueSBpc3RyZWFtIGZ1bmN0aW9ucy4gIFRoZXJlZm9yZSB3ZSBkZWFsIHdpdGgKKysgICAgLy8gaXQgZmlyc3QsIGV4cGxvaXRpbmcgdGhlIGtub3dsZWRnZSB0aGF0IG9uIEdOVSBzeXN0ZW1zIF9NX2JpdFs1XQorKyAgICAvLyBpcyB0aGUgbWFzayBjb3JyZXNwb25kaW5nIHRvIGN0eXBlX2Jhc2U6OnNwYWNlLiAgTkI6IGFuIGVuY29kaW5nCisrICAgIC8vIGNoYW5nZSB3b3VsZCBub3QgYWZmZWN0IGNvcnJlY3RuZXNzIQorICAgICBib29sIF9fcmV0ID0gZmFsc2U7CistICAgIGNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7IAorLSAgICBmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCistICAgICAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0KKy0JICAmJiBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKy0JeworLQkgIF9fcmV0ID0gdHJ1ZTsKKy0JICBicmVhazsKKy0JfQorKyAgICBpZiAoX19tID09IF9NX2JpdFs1XSkKKysgICAgICBfX3JldCA9IF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrWzVdLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrICAgIGVsc2UKKysgICAgICB7CisrCS8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrCS8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKwljb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworKwlmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrCSAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0pCisrCSAgICB7CisrCSAgICAgIGlmIChfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJCXsKKysJCSAgX19yZXQgPSB0cnVlOworKwkJICBicmVhazsKKysJCX0KKysJICAgICAgZWxzZSBpZiAoX19tID09IF9NX2JpdFtfX2JpdGN1cl0pCisrCQlicmVhazsKKysJICAgIH0KKysgICAgICB9CisgICAgIHJldHVybiBfX3JldDsgICAgCisgICB9CistICAKKysKKyAgIGNvbnN0IHdjaGFyX3QqIAorICAgY3R5cGU8d2NoYXJfdD46OgorICAgZG9faXMoY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgbWFzayogX192ZWMpIGNvbnN0CitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCTIwMDctMDgtMDMgMjA6MzA6NTMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgJMjAwNy0wOC0wMyAyMDozMTo1NC4wMDAwMDAwMDAgKzAyMDAKK0BAIC00NywxOCArNDcsMjEgQEAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKHNpemVfdCBfX3JlZnMpCisgICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2dldF9jX2xvY2FsZSgpKSwgCistICAgICBfTV9uYW1lX21lc3NhZ2VzKF9TX2dldF9jX25hbWUoKSkKKysgICAgICAgX01fbmFtZV9tZXNzYWdlcyhfU19nZXRfY19uYW1lKCkpCisgICAgICB7IH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsIAorIAkJCQlzaXplX3QgX19yZWZzKSAKKy0gICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKSksCistICAgICBfTV9uYW1lX21lc3NhZ2VzKF9fcykKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoTlVMTCksIF9NX25hbWVfbWVzc2FnZXMoTlVMTCkKKyAgICAgIHsKKy0gICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CistICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdGQ6OnN0cmxlbihfX3MpICsgMTsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07CisrICAgICAgIHN0ZDo6bWVtY3B5KF9fdG1wLCBfX3MsIF9fbGVuKTsKKyAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKworKyAgICAgICAvLyBMYXN0IHRvIGF2b2lkIGxlYWtpbmcgbWVtb3J5IGlmIG5ldyB0aHJvd3MuCisrICAgICAgIF9NX2NfbG9jYWxlX21lc3NhZ2VzID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKKyAgICAgIH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMToyNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMTo1NC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMyw5ICszMywxNCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KK0BAIC0yMDYsNyArMjExLDcgQEAKKyAJICB9CisgCWJyZWFrOworICAgICAgIGRlZmF1bHQ6CistCTsKKysJX19yZXQgPSBwYXR0ZXJuKCk7CisgICAgICAgfQorICAgICByZXR1cm4gX19yZXQ7CisgICB9CitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzE6MjQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMTo1NC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMyw5ICszMywxNCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCTIwMDctMDgtMDMgMjA6MzE6NTQuMDAwMDAwMDAwICswMjAwCitAQCAtMzcsMjUgKzM3LDMzIEBACisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KHNpemVfdCBfX3JlZnMpIAorICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwgCistICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgICBfTV9uYW1lX3RpbWVwdW5jdChfU19nZXRfY19uYW1lKCkpCisgICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsgfQorIAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NhY2hlX3R5cGUqIF9fY2FjaGUsIHNpemVfdCBfX3JlZnMpIAorICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoX19jYWNoZSksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwgCistICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgICBfTV9uYW1lX3RpbWVwdW5jdChfU19nZXRfY19uYW1lKCkpCisgICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsgfQorIAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorIAkJCQkgICAgIHNpemVfdCBfX3JlZnMpIAorICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwgCistICAgIF9NX25hbWVfdGltZXB1bmN0KF9fcykKKysgICAgICBfTV9uYW1lX3RpbWVwdW5jdChOVUxMKQorICAgICB7IAorLSAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworLSAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0ZDo6c3RybGVuKF9fcykgKyAxOworKyAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbX19sZW5dOworKyAgICAgIHN0ZDo6bWVtY3B5KF9fdG1wLCBfX3MsIF9fbGVuKTsKKyAgICAgICBfTV9uYW1lX3RpbWVwdW5jdCA9IF9fdG1wOworLSAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7IAorKworKyAgICAgIHRyeQorKwl7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7IH0KKysgICAgICBjYXRjaCguLi4pCisrCXsKKysJICBkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CisrCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisrCX0KKyAgICAgfQorIAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8xNjAtbGlic3RkYysrLXBpYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjMvMTYwLWxpYnN0ZGMrKy1waWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI0NGQ0YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjMvMTYwLWxpYnN0ZGMrKy1waWMucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmFtIGdjYy00LjIuMS9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmFtCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQkyMDA2LTA3LTI4IDA2OjU3OjM0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmFtCTIwMDctMDgtMDMgMjA6MzI6MjcuMDAwMDAwMDAwICswMjAwCitAQCAtMjU3LDYgKzI1NywxMiBAQAorIAkgICQoT1BUX0xERkxBR1MpICQoU0VDVElPTl9MREZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKExUTERGTEFHUykgLW8gJEAKKyAKKyAKKytpbnN0YWxsLWV4ZWMtbG9jYWw6CisraWZlcSAoJChlbmFibGVfc2hhcmVkKSx5ZXMpCisrCSQoQVIpIGNydSBsaWJzdGRjKytfcGljLmEgLmxpYnMvKi5vICQodG9wX2J1aWxkZGlyKS9saWJzdXBjKysvKi5vCisrCSQoSU5TVEFMTF9EQVRBKSBsaWJzdGRjKytfcGljLmEgJChERVNURElSKSQodG9vbGV4ZWNsaWJkaXIpCisrZW5kaWYKKysKKyAjIEFkZGVkIGJpdHMgdG8gYnVpbGQgZGVidWcgbGlicmFyeS4KKyBpZiBHTElCQ1hYX0JVSUxEX0RFQlVHCisgYWxsLWxvY2FsOiBidWlsZF9kZWJ1ZworZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluIGdjYy00LjIuMS9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgkyMDA2LTEwLTE2IDIxOjA4OjIyLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCTIwMDctMDgtMDMgMjA6MzI6MjcuMDAwMDAwMDAwICswMjAwCitAQCAtNjU3LDcgKzY1Nyw3IEBACisgCisgaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWRhdGEtbG9jYWwKKyAKKy1pbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUworK2luc3RhbGwtZXhlYy1hbTogaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTIGluc3RhbGwtZXhlYy1sb2NhbAorIAorIGluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisgCitAQCAtNjkwLDYgKzY5MCw3IEBACisgCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKKyAJaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCisgCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWRhdGEtbG9jYWwgaW5zdGFsbC1leGVjIFwKKysJaW5zdGFsbC1leGVjLWxvY2FsIFwKKyAJaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorIAlpbnN0YWxsLXN0cmlwIGluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUyBpbnN0YWxsY2hlY2sgXAorIAlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCitAQCAtNzk5LDYgKzgwMCwxMyBAQAorIGluc3RhbGxfZGVidWc6CisgCShjZCAke2RlYnVnZGlyfSAmJiAkKE1BS0UpIFwKKyAJdG9vbGV4ZWNsaWJkaXI9JChnbGliY3h4X3Rvb2xleGVjbGliZGlyKS9kZWJ1ZyBpbnN0YWxsKQorKworK2luc3RhbGwtZXhlYy1sb2NhbDoKKytpZmVxICgkKGVuYWJsZV9zaGFyZWQpLHllcykKKysJJChBUikgY3J1IGxpYnN0ZGMrK19waWMuYSAqLm8gJCh0b3BfYnVpbGRkaXIpL2xpYnN1cGMrKy8qLm8KKysJJChJTlNUQUxMX0RBVEEpIGxpYnN0ZGMrK19waWMuYSAkKERFU1RESVIpJCh0b29sZXhlY2xpYmRpcikKKytlbmRpZgorKworICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisgIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisgLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8xNzAtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8xNzAtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNjc4OTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4zLzE3MC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9ib2VobS1nYy9pbmNsdWRlL2djLmggZ2NjLTQuMi4xL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAorLS0tIGdjYy00LjIuMS5vcmlnL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAkyMDA2LTA5LTE4IDIwOjQ1OjA4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9ib2VobS1nYy9pbmNsdWRlL2djLmgJMjAwNy0wOC0wMyAyMDozMzowMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC01MDIsNyArNTAyLDcgQEAKKyAjaWYgZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoX19HTElCQ19fKQorICMgaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyAjIGlmIChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMSB8fCBfX0dMSUJDX18gPiAyKSBcCistICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykKKysgICAgICYmICFkZWZpbmVkKF9faWE2NF9fKSAmJiAhZGVmaW5lZChfX1VDTElCQ19fKQorICMgICBpZm5kZWYgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQorICMgICAgIGRlZmluZSBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgIGVuZGlmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4zLzE4MC1jOTktc25wcmludGYucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4zLzE4MC1jOTktc25wcmludGYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRiMGMzNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjMvMTgwLWM5OS1zbnByaW50Zi5wYXRjaApAQCAtMCwwICsxLDEyIEBACitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL3N0ZF9jc3RkaW8uaCBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvc3RkX2NzdGRpby5oCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvc3RkX2NzdGRpby5oCTIwMDYtMTItMDcgMTA6MzM6NTEuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL3N0ZF9jc3RkaW8uaAkyMDA3LTA4LTAzIDIwOjMzOjI0LjAwMDAwMDAwMCArMDIwMAorQEAgLTE0NCw3ICsxNDQsNyBAQAorIAorIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKyAKKy0jaWYgX0dMSUJDWFhfVVNFX0M5OQorKyNpZiBfR0xJQkNYWF9VU0VfQzk5IHx8IGRlZmluZWQoX19VQ0xJQkNfXykKKyAKKyAjdW5kZWYgc25wcmludGYKKyAjdW5kZWYgdmZzY2FuZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8xOTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8xOTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNmQ3MWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4zLzE5MC1jOTktY29tcGxleC11Z2x5LWhhY2sucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlndXJlIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlndXJlCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlndXJlCTIwMDctMDgtMDMgMjA6MzM6NTYuMDAwMDAwMDAwICswMjAwCitAQCAtNzUxNCw2ICs3NTE0LDkgQEAKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpbmNsdWRlIDxjb21wbGV4Lmg+CisrI2lmZGVmIF9fVUNMSUJDX18KKysjZXJyb3IgdWdseSBoYWNrIHRvIG1ha2Ugc3VyZSBjb25maWd1cmUgdGVzdCBmYWlscyBoZXJlIGZvciBjcm9zcyB1bnRpbCB1Q2xpYmMgc3VwcG9ydHMgdGhlIGNvbXBsZXggZnVuY3MKKysjZW5kaWYKKyBpbnQKKyBtYWluICgpCisgewpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8yMDAtaW5kZXhfbWFjcm8ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4zLzIwMC1pbmRleF9tYWNyby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTU2YjVkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8yMDAtaW5kZXhfbWFjcm8ucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZSBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQkyMDA2LTEwLTE3IDEzOjU2OjIxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQkyMDA3LTA4LTAzIDIwOjM0OjIzLjAwMDAwMDAwMCArMDIwMAorQEAgLTU4LDYgKzU4LDkgQEAKKyAjaW5jbHVkZSA8Yml0cy9hbGxvY2F0b3IuaD4KKyAjaW5jbHVkZSA8ZXh0L2hhc2hfZnVuLmg+CisgCisrLyogY29wZSB3LyBpbmRleCBkZWZpbmVkIGFzIG1hY3JvLCBTdVN2MyBwcm9wb3NhbCAqLworKyN1bmRlZiBpbmRleAorKworICMgaWZkZWYgX19HQworICMgICBkZWZpbmUgX19HQ19DT05TVCBjb25zdAorICMgZWxzZQorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaCBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAkyMDA2LTEwLTE3IDEzOjU2OjIxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAkyMDA3LTA4LTAzIDIwOjM0OjIzLjAwMDAwMDAwMCArMDIwMAorQEAgLTU0LDYgKzU0LDkgQEAKKyAjaW5jbHVkZSA8ZXh0L21lbW9yeT4gLy8gRm9yIHVuaW5pdGlhbGl6ZWRfY29weV9uCisgI2luY2x1ZGUgPGV4dC9udW1lcmljPiAvLyBGb3IgcG93ZXIKKyAKKysvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCisrI3VuZGVmIGluZGV4CisrCisgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKyAKKyAgIHVzaW5nIHN0ZDo6c2l6ZV90OwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8yMTAtbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4zLzIxMC1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmU4NzA0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8yMTAtbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJtdWRmbGFwL21mLWhvb2tzMi5jIGdjYy00LjIuMS9saWJtdWRmbGFwL21mLWhvb2tzMi5jCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlibXVkZmxhcC9tZi1ob29rczIuYwkyMDA1LTA5LTIzIDIzOjU4OjM5LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJtdWRmbGFwL21mLWhvb2tzMi5jCTIwMDctMDgtMDMgMjA6MzU6MDkuMDAwMDAwMDAwICswMjAwCitAQCAtNDI3LDcgKzQyNyw3IEBACisgeworICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQocywgbiwgX19NRl9DSEVDS19XUklURSwgImJ6ZXJvIHJlZ2lvbiIpOworLSAgYnplcm8gKHMsIG4pOworKyAgbWVtc2V0IChzLCAwLCBuKTsKKyB9CisgCisgCitAQCAtNDM3LDcgKzQzNyw3IEBACisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzcmMsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjb3B5IHNyYyIpOworICAgTUZfVkFMSURBVEVfRVhURU5UKGRlc3QsIG4sIF9fTUZfQ0hFQ0tfV1JJVEUsICJiY29weSBkZXN0Iik7CistICBiY29weSAoc3JjLCBkZXN0LCBuKTsKKysgIG1lbW1vdmUgKGRlc3QsIHNyYywgbik7CisgfQorIAorIAorQEAgLTQ0Nyw3ICs0NDcsNyBAQAorICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQoczEsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjbXAgMXN0IGFyZyIpOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMyLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY21wIDJuZCBhcmciKTsKKy0gIHJldHVybiBiY21wIChzMSwgczIsIG4pOworKyAgcmV0dXJuIG4gPT0gMCA/IDAgOiBtZW1jbXAgKHMxLCBzMiwgbik7CisgfQorIAorIAorQEAgLTQ1Niw3ICs0NTYsNyBAQAorICAgc2l6ZV90IG4gPSBzdHJsZW4gKHMpOworICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQocywgQ0xBTVBBREQobiwgMSksIF9fTUZfQ0hFQ0tfUkVBRCwgImluZGV4IHJlZ2lvbiIpOworLSAgcmV0dXJuIGluZGV4IChzLCBjKTsKKysgIHJldHVybiBzdHJjaHIgKHMsIGMpOworIH0KKyAKKyAKK0BAIC00NjUsNyArNDY1LDcgQEAKKyAgIHNpemVfdCBuID0gc3RybGVuIChzKTsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIENMQU1QQUREKG4sIDEpLCBfX01GX0NIRUNLX1JFQUQsICJyaW5kZXggcmVnaW9uIik7CistICByZXR1cm4gcmluZGV4IChzLCBjKTsKKysgIHJldHVybiBzdHJyY2hyIChzLCBjKTsKKyB9CisgCisgLyogWFhYOiAgc3RwY3B5LCBtZW1jY3B5ICovCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4zLzIyMC1saWJzdGRjKystbmFtZXNwYWNlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8yMjAtbGlic3RkYysrLW5hbWVzcGFjZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDllOGYyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8yMjAtbGlic3RkYysrLW5hbWVzcGFjZS5wYXRjaApAQCAtMCwwICsxLDM2IEBACitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCTIwMDctMDgtMDMgMjA6MzE6NTQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgJMjAwNy0wOC0wMyAyMDozNTo0MC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMiw3ICszMiw4IEBACisgLy8KKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorLQorK25hbWVzcGFjZSBzdGQKKyt7CisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IHByb3RvdHlwZXMgZm9yICp0ZXh0ZG9tYWluIGZ1bmNzCisgI2VuZGlmCitAQCAtMTE1LDMgKzExNiw0IEBACisgCSAgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsgCisgCSB9CisgICAgICB9CisrfQorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAkyMDA3LTA4LTAzIDIwOjMxOjU0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgJMjAwNy0wOC0wMyAyMDozNTo0MC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMyw3ICszMyw4IEBACisgLy8KKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorLQorK25hbWVzcGFjZSBzdGQKKyt7CisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KHNpemVfdCBfX3JlZnMpIAorICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwgCitAQCAtNzQsMyArNzUsNCBAQAorICAgICAgIGRlbGV0ZSBfTV9kYXRhOyAKKyAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7IAorICAgICB9CisrfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8yMzAtbGliYmFja2VuZF9kZXBfZ2Nvdi1pb3YuaC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjMvMjMwLWxpYmJhY2tlbmRfZGVwX2djb3YtaW92LmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI3NTRiZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjMvMjMwLWxpYmJhY2tlbmRfZGVwX2djb3YtaW92LmgucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9nY2MvTWFrZWZpbGUuaW4gZ2NjLTQuMi4xL2djYy9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjIuMS5vcmlnL2djYy9NYWtlZmlsZS5pbgkyMDA3LTA1LTMxIDE3OjM3OjM4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9nY2MvTWFrZWZpbGUuaW4JMjAwNy0wOC0wMyAyMDozNjoxNC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNjYwLDcgKzI2NjAsNyBAQAorICMgRklYTUU6IHdyaXRpbmcgcHJvcGVyIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBpcyBhICpMT1QqIG9mIHdvcmsuCisgbGliYmFja2VuZC5vIDogJChPQkpTLWNvbW1vbjoubz0uYykgJChvdXRfZmlsZSkgXAorICAgaW5zbi1jb25maWcuaCBpbnNuLWZsYWdzLmggaW5zbi1jb2Rlcy5oIGluc24tY29uc3RhbnRzLmggXAorLSAgaW5zbi1hdHRyLmggICQoREFURVNUQU1QKSAkKEJBU0VWRVIpICQoREVWUEhBU0UpCisrICBpbnNuLWF0dHIuaCAgJChEQVRFU1RBTVApICQoQkFTRVZFUikgJChERVZQSEFTRSkgZ2Nvdi1pb3YuaAorIAkkKENDKSAkKEFMTF9DRkxBR1MpICQoQUxMX0NQUEZMQUdTKSBcCisgCSAgLURUQVJHRVRfTkFNRT1cIiQodGFyZ2V0X25vbmNhbm9uaWNhbClcIiBcCisgCSAgLURMT0NBTEVESVI9XCIkKGxvY2FsZWRpcilcIiBcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4zLzI0MC1hcm0tYmlnZW5kaWFuLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8yNDAtYXJtLWJpZ2VuZGlhbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWJlY2NkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8yNDAtYXJtLWJpZ2VuZGlhbi5wYXRjaApAQCAtMCwwICsxLDY0IEBACitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oIGdjYy00LjIuMS9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorLS0tIGdjYy00LjIuMS5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMDYtMDItMTcgMDA6Mjk6MTAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMi4xL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMDctMDgtMDMgMjA6MzY6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtMjgsMTkgKzI4LDMzIEBACisgI3VuZGVmICBUQVJHRVRfVkVSU0lPTgorICNkZWZpbmUgVEFSR0VUX1ZFUlNJT04gIGZwdXRzICgiIChBUk0gR05VL0xpbnV4IHdpdGggRUxGKSIsIHN0ZGVycik7CisgCisrLyoKKysgKiAnY29uZmlnLmdjYycgZGVmaW5lcyBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUIGFzIDEgZm9yIGFybSpiLSoKKysgKiAoYmlnIGVuZGlhbikgY29uZmlndXJhdGlvbnMuCisrICovCisrI2lmIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQKKysjZGVmaW5lIFRBUkdFVF9FTkRJQU5fREVGQVVMVCBNQVNLX0JJR19FTkQKKysjZGVmaW5lIFRBUkdFVF9FTkRJQU5fT1BUSU9OICJtYmlnLWVuZGlhbiIKKysjZGVmaW5lIFRBUkdFVF9MSU5LRVJfRU1VTEFUSU9OICJhcm1lbGZiX2xpbnV4IgorKyNlbHNlCisrI2RlZmluZSBUQVJHRVRfRU5ESUFOX0RFRkFVTFQgMAorKyNkZWZpbmUgVEFSR0VUX0VORElBTl9PUFRJT04gIm1saXR0bGUtZW5kaWFuIgorKyNkZWZpbmUgVEFSR0VUX0xJTktFUl9FTVVMQVRJT04gImFybWVsZl9saW51eCIKKysjZW5kaWYKKysKKyAjdW5kZWYgIFRBUkdFVF9ERUZBVUxUX0ZMT0FUX0FCSQorICNkZWZpbmUgVEFSR0VUX0RFRkFVTFRfRkxPQVRfQUJJIEFSTV9GTE9BVF9BQklfSEFSRAorIAorICN1bmRlZiAgVEFSR0VUX0RFRkFVTFQKKy0jZGVmaW5lIFRBUkdFVF9ERUZBVUxUICgwKQorKyNkZWZpbmUgVEFSR0VUX0RFRkFVTFQgKFRBUkdFVF9FTkRJQU5fREVGQVVMVCkKKyAKKyAjZGVmaW5lIFNVQlRBUkdFVF9DUFVfREVGQVVMVCBUQVJHRVRfQ1BVX2FybTYKKyAKKy0jZGVmaW5lIFNVQlRBUkdFVF9FWFRSQV9MSU5LX1NQRUMgIiAtbSBhcm1lbGZfbGludXggLXAiCisrI2RlZmluZSBTVUJUQVJHRVRfRVhUUkFfTElOS19TUEVDICIgLW0gIiBUQVJHRVRfTElOS0VSX0VNVUxBVElPTiAiIC1wIgorIAorICN1bmRlZiAgTVVMVElMSUJfREVGQVVMVFMKKyAjZGVmaW5lIE1VTFRJTElCX0RFRkFVTFRTIFwKKy0JeyAibWFybSIsICJtbGl0dGxlLWVuZGlhbiIsICJtaGFyZC1mbG9hdCIsICJtbm8tdGh1bWItaW50ZXJ3b3JrIiB9CisrCXsgIm1hcm0iLCBUQVJHRVRfRU5ESUFOX09QVElPTiwgIm1oYXJkLWZsb2F0IiwgIm1uby10aHVtYi1pbnRlcndvcmsiIH0KKyAKKyAvKiBOb3cgd2UgZGVmaW5lIHRoZSBzdHJpbmdzIHVzZWQgdG8gYnVpbGQgdGhlIHNwZWMgZmlsZS4gICovCisgI3VuZGVmICBMSUJfU1BFQworQEAgLTYxLDcgKzc1LDcgQEAKKyAgICAle3JkeW5hbWljOi1leHBvcnQtZHluYW1pY30gXAorICAgICV7IWR5bmFtaWMtbGlua2VyOi1keW5hbWljLWxpbmtlciAiIExJTlVYX0RZTkFNSUNfTElOS0VSICJ9IFwKKyAgICAtWCBcCistICAgJXttYmlnLWVuZGlhbjotRUJ9IiBcCisrICAgJXttYmlnLWVuZGlhbjotRUJ9ICV7bWxpdHRsZS1lbmRpYW46LUVMfSIgXAorICAgIFNVQlRBUkdFVF9FWFRSQV9MSU5LX1NQRUMKKyAKKyAjdW5kZWYgIExJTktfU1BFQworZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9nY2MvY29uZmlnLmdjYyBnY2MtNC4yLjEvZ2NjL2NvbmZpZy5nY2MKKy0tLSBnY2MtNC4yLjEub3JpZy9nY2MvY29uZmlnLmdjYwkyMDA3LTA4LTAzIDIwOjI5OjUyLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9nY2MvY29uZmlnLmdjYwkyMDA3LTA4LTAzIDIwOjM2OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTcwNSw2ICs3MDUsMTEgQEAKKyAJdG1fZmlsZT0iZGJ4ZWxmLmggZWxmb3MuaCBsaW51eC5oIGFybS9lbGYuaCBhcm0vbGludXgtZ2FzLmggYXJtL2xpbnV4LWVsZi5oIgorIAl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IHQtbGludXggYXJtL3QtYXJtIgorIAljYXNlICR7dGFyZ2V0fSBpbgorKwlhcm0qYi0qKQorKwkJdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUPTEiCisrCQk7OworKwllc2FjCisrCWNhc2UgJHt0YXJnZXR9IGluCisgCWFybSotKi1saW51eC0qZWFiaSkKKyAJICAgIHRtX2ZpbGU9IiR0bV9maWxlIGFybS9icGFiaS5oIGFybS9saW51eC1lYWJpLmgiCisgCSAgICB0bWFrZV9maWxlPSIkdG1ha2VfZmlsZSBhcm0vdC1hcm0tZWxmIGFybS90LWJwYWJpIGFybS90LWxpbnV4LWVhYmkiCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4zLzI1MC1zb2Z0ZmxvYXQtZml4LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8yNTAtc29mdGZsb2F0LWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTE3ODU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8yNTAtc29mdGZsb2F0LWZpeC5wYXRjaApAQCAtMCwwICsxLDU4IEBACitUaGlzIHBhdGNoIChDKSAyMDA3IFlhbm4gRS4gTU9SSU4KK0xpY2Vuc2VkIHVuZGVyIEdQTCB2Mi4KKworRmlyc3QgaHVuayBvZiB0aGlzIHBhdGNoIHNvbHZlcyBjb21waWxpbmcgdUNsaWJjOgorCittYWtlWzFdOiBFbnRlcmluZyBkaXJlY3RvcnkgYC9ob21lL3ltb3Jpbi94LXRvb2xzL2J1aWxkL2FybWViLXVua25vd24tbGludXgtdWNsaWJjL2djYy00LjEuMS11Q2xpYmMtMC45LjI4LjEvYnVpbGQtbGliYycKKyAgTEQgbGlidUNsaWJjLTAuOS4yOS5zbworbGliYy9saWJjX3NvLmEoZGlmZnRpbWUub3MpOiBJbiBmdW5jdGlvbiBgZGlmZnRpbWUnOgorZGlmZnRpbWUuYzooLnRleHQrMHg4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19mbG9hdHNpZGYnCitkaWZmdGltZS5jOigudGV4dCsweDJjKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19zdWJkZjMnCitsaWJjL2xpYmNfc28uYShfZnBtYXh0b3N0ci5vcyk6IEluIGZ1bmN0aW9uIGBfZnBtYXh0b3N0cic6CitfZnBtYXh0b3N0ci5jOigudGV4dCsweGQ0KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19uZWRmMicKK19mcG1heHRvc3RyLmM6KC50ZXh0KzB4ZjgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX2VxZGYyJworX2ZwbWF4dG9zdHIuYzooLnRleHQrMHgxMTQpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX2RpdmRmMycKK19mcG1heHRvc3RyLmM6KC50ZXh0KzB4MTIwKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19sdGRmMicKK19mcG1heHRvc3RyLmM6KC50ZXh0KzB4MWM0KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19tdWxkZjMnCitfZnBtYXh0b3N0ci5jOigudGV4dCsweDM4OCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fZ2VkZjInCitfZnBtYXh0b3N0ci5jOigudGV4dCsweDQzMCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fYWRkZGYzJworbGliYy9saWJjX3NvLmEoX19wc2ZzX2RvX251bWVyaWMub3MpOiBJbiBmdW5jdGlvbiBgX19wc2ZzX2RvX251bWVyaWMnOgorX19wc2ZzX2RvX251bWVyaWMuYzooLnRleHQrMHg1MjApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX3RydW5jZGZzZjInCitsaWJjL2xpYmNfc28uYShzdHJ0b2Yub3MpOiBJbiBmdW5jdGlvbiBgc3RydG9mJzoKK3N0cnRvZi5jOigudGV4dCsweDFjKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19leHRlbmRzZmRmMicKKy9ob21lL3ltb3Jpbi94LXRvb2xzL2J1aWxkL2FybWViLXVua25vd24tbGludXgtdWNsaWJjL2djYy00LjEuMS11Q2xpYmMtMC45LjI4LjEvY2NfY29yZV9wcmVmaXgvbGliL2djYy9hcm0tbGludXgtdWNsaWJjLzQuMS4xL2xpYmdjYy5hKF9maXh1bnNkZnNpLm8pOgorSW4gZnVuY3Rpb24gYF9fZml4dW5zZGZzaSc6CitsaWJnY2MyLmM6KC50ZXh0KzB4MzQpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX2ZpeGRmc2knCittYWtlWzJdOiAqKiogW2xpYi9saWJjLnNvXSBFcnJvciAxCittYWtlWzFdOiAqKiogW2xpYi9saWJjLnNvLjBdIEVycm9yIDIKK21ha2VbMV06IExlYXZpbmcgZGlyZWN0b3J5IGAvaG9tZS95bW9yaW4veC10b29scy9idWlsZC9hcm1lYi11bmtub3duLWxpbnV4LXVjbGliYy9nY2MtNC4xLjEtdUNsaWJjLTAuOS4yOC4xL2J1aWxkLWxpYmMnCittYWtlOiAqKiogWy9ob21lL3ltb3Jpbi94LXRvb2xzL2J1aWxkL2FybWViLXVua25vd24tbGludXgtdWNsaWJjL2djYy00LjEuMS11Q2xpYmMtMC45LjI4LjEvYnVpbGQtbGliYy9saWIvbGliYy5hXQorRXJyb3IgMgorCitUaGUgc2Vjb25kIGh1bmsgZml4ZXMgYnVpbGRpbmcgZmluYWwgZ2NjIGJlY2F1c2Ugc29mdC1mbG9hdCBpbXBsaWVzIHVzaW5nIC1sZmxvYXQgKHdoaWNoIHdlIGRvbid0IGhhdmUpLgorCisKK2RpZmYgLWR1ciBnY2MtNC4yLjAub3JpZy9nY2MvY29uZmlnLmdjYyBnY2MtNC4yLjAvZ2NjL2NvbmZpZy5nY2MKKy0tLSBnY2MtNC4yLjAub3JpZy9nY2MvY29uZmlnLmdjYwkyMDA3LTA3LTE1IDExOjI0OjE4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMC9nY2MvY29uZmlnLmdjYwkyMDA3LTA3LTE1IDExOjI2OjAyLjAwMDAwMDAwMCArMDIwMAorQEAgLTcyMSw3ICs3MjEsNyBAQAorIAkgICAgZGVmYXVsdF91c2VfY3hhX2F0ZXhpdD15ZXMKKyAJICAgIDs7CisgCSopCistCSAgICB0bWFrZV9maWxlPSIkdG1ha2VfZmlsZSBhcm0vdC1saW51eCIKKysJICAgIHRtYWtlX2ZpbGU9IiR0bWFrZV9maWxlIGFybS90LWxpbnV4IGFybS90LWFybS1lbGYiCisgCSAgICA7OworIAllc2FjCisgCXRtX2ZpbGU9IiR0bV9maWxlIGFybS9hb3V0LmggYXJtL2FybS5oIgorZGlmZiAtZHVyIGdjYy00LjIuMC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oIGdjYy00LjIuMC9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorLS0tIGdjYy00LjIuMC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMDctMDctMTUgMTE6MjQ6MTguMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4wL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMDctMDctMTUgMTE6MjY6MDIuMDAwMDAwMDAwICswMjAwCitAQCAtNjMsNyArNjMsNyBAQAorICAgICV7c2hhcmVkOi1sY30gXAorICAgICV7IXNoYXJlZDole3Byb2ZpbGU6LWxjX3B9JXshcHJvZmlsZTotbGN9fSIKKyAKKy0jZGVmaW5lIExJQkdDQ19TUEVDICIle21zb2Z0LWZsb2F0Oi1sZmxvYXR9ICV7bWZsb2F0LWFiaT1zb2Z0KjotbGZsb2F0fSAtbGdjYyIKKysjZGVmaW5lIExJQkdDQ19TUEVDICItbGdjYyIKKyAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4zLzI2MC1mbGF0dGVuLXN3aXRjaC1zdG10LTAwLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8yNjAtZmxhdHRlbi1zd2l0Y2gtc3RtdC0wMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzQwYzU3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8yNjAtZmxhdHRlbi1zd2l0Y2gtc3RtdC0wMC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2djYy9zdG10LmMgZ2NjLTQuMi4xL2djYy9zdG10LmMKKy0tLSBnY2MtNC4yLjEub3JpZy9nY2Mvc3RtdC5jCTIwMDctMDctMTkgMDU6MjU6MzIuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2djYy9zdG10LmMJMjAwNy0wOC0wMyAyMDozNzoxOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNTEyLDcgKzI1MTIsMTEgQEAKKyAJICB1c2VfY29zdF90YWJsZQorIAkgICAgPSAoVFJFRV9DT0RFIChvcmlnX3R5cGUpICE9IEVOVU1FUkFMX1RZUEUKKyAJICAgICAgICYmIGVzdGltYXRlX2Nhc2VfY29zdHMgKGNhc2VfbGlzdCkpOworLQkgIGJhbGFuY2VfY2FzZV9ub2RlcyAoJmNhc2VfbGlzdCwgTlVMTCk7CisrCSAgLyogV2hlbiBvcHRpbWl6aW5nIGZvciBzaXplLCB3ZSB3YW50IGEgc3RyYWlnaHQgbGlzdCB0byBhdm9pZAorKwkgICAgIGp1bXBzIGFzIG11Y2ggYXMgcG9zc2libGUuIFRoaXMgYmFzaWNhbGx5IGNyZWF0ZXMgYW4gaWYtZWxzZQorKwkgICAgIGNoYWluLiAgKi8KKysJICBpZiAoIW9wdGltaXplX3NpemUpCisrCSAgICBiYWxhbmNlX2Nhc2Vfbm9kZXMgKCZjYXNlX2xpc3QsIE5VTEwpOworIAkgIGVtaXRfY2FzZV9ub2RlcyAoaW5kZXgsIGNhc2VfbGlzdCwgZGVmYXVsdF9sYWJlbCwgaW5kZXhfdHlwZSk7CisgCSAgZW1pdF9qdW1wIChkZWZhdWx0X2xhYmVsKTsKKyAJfQorQEAgLTMwNzAsNiArMzA3NCw3IEBACisgCSAgICB7CisgCSAgICAgIGlmICghbm9kZV9oYXNfbG93X2JvdW5kIChub2RlLCBpbmRleF90eXBlKSkKKyAJCXsKKysJCSAgaWYgKCFvcHRpbWl6ZV9zaXplKSAvKiBkb24ndCBqbCB0byB0aGUgLmRlZmF1bHRfbGFiZWwuICovCisgCQkgIGVtaXRfY21wX2FuZF9qdW1wX2luc25zIChpbmRleCwKKyAJCQkJCSAgIGNvbnZlcnRfbW9kZXMKKyAJCQkJCSAgIChtb2RlLCBpbW9kZSwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjMvMjcwLXNvZnQtZmxvYXQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4zLzI3MC1zb2Z0LWZsb2F0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyODdiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4zLzI3MC1zb2Z0LWZsb2F0LnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK2RpZmYgLXVOcHIgZ2NjLTQuMi4xX29yaWcvZ2NjL2NvbmZpZy9yczYwMDAvZGFyd2luLWxkb3VibGUuYyBnY2MtNC4yLjEvZ2NjL2NvbmZpZy9yczYwMDAvZGFyd2luLWxkb3VibGUuYworLS0tIGdjYy00LjIuMV9vcmlnL2djYy9jb25maWcvcnM2MDAwL2Rhcndpbi1sZG91YmxlLmMJMjAwNy0wMy0wNSAxMTo1NDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBnY2MtNC4yLjEvZ2NjL2NvbmZpZy9yczYwMDAvZGFyd2luLWxkb3VibGUuYwkyMDA4LTAxLTMxIDE3OjUxOjI0LjAwMDAwMDAwMCAtMDUwMAorQEAgLTcwLDYgKzcwLDggQEAgU29mdHdhcmUgRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LAorICAgIGJ1dCBHQ0MgY3VycmVudGx5IGdlbmVyYXRlcyBwb29yIGNvZGUgd2hlbiBhIHVuaW9uIGlzIHVzZWQgdG8gdHVybgorICAgIGEgbG9uZyBkb3VibGUgaW50byBhIHBhaXIgb2YgZG91Ymxlcy4gICovCisgCisrI2lmIGRlZmluZWQgKF9TT0ZUX0ZMT0FUKSAmJiBkZWZpbmVkIChfX0xPTkdfRE9VQkxFXzEyOF9fKQorKworIGxvbmcgZG91YmxlIF9fZ2NjX3FhZGQgKGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSk7CisgbG9uZyBkb3VibGUgX19nY2NfcXN1YiAoZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKTsKKyBsb25nIGRvdWJsZSBfX2djY19xbXVsIChkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpOworQEAgLTIxOSw4ICsyMjEsNiBAQCBfX2djY19xZGl2IChkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjCisgICByZXR1cm4gei5sZHZhbDsKKyB9CisgCistI2lmIGRlZmluZWQgKF9TT0ZUX0ZMT0FUKSAmJiBkZWZpbmVkIChfX0xPTkdfRE9VQkxFXzEyOF9fKQorLQorIGxvbmcgZG91YmxlIF9fZ2NjX3FuZWcgKGRvdWJsZSwgZG91YmxlKTsKKyBpbnQgX19nY2NfcWVxIChkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpOworIGludCBfX2djY19xbmUgKGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSk7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4zLzI4MC1lYWJpX2ZpeGVzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8yODAtZWFiaV9maXhlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGNlNjA4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8yODAtZWFiaV9maXhlcy5wYXRjaApAQCAtMCwwICsxLDEzIEBACitkaWZmIC1kdXJOIGdjYy00LjIuMy5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCBnY2MtNC4yLjMvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCistLS0gZ2NjLTQuMi4zLm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCTIwMDctMDktMDEgMTc6Mjg6MzAuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4zL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAkyMDA4LTA1LTI1IDIzOjQ3OjM2LjAwMDAwMDAwMCArMDIwMAorQEAgLTQ3LDcgKzQ3LDggQEAKKyAjZGVmaW5lIFNVQlRBUkdFVF9DUFVfREVGQVVMVCBUQVJHRVRfQ1BVX2FybTEwdGRtaQorIAorICN1bmRlZiBTVUJUQVJHRVRfRVhUUkFfTElOS19TUEVDCistI2RlZmluZSBTVUJUQVJHRVRfRVhUUkFfTElOS19TUEVDICIgLW0gYXJtZWxmX2xpbnV4X2VhYmkiCisrI2RlZmluZSBTVUJUQVJHRVRfRVhUUkFfTElOS19TUEVDCVwKKysJIiAle21saXR0bGUtZW5kaWFuOi1tIGFybWVsZl9saW51eF9lYWJpfSAle21iaWctZW5kaWFuOi1tIGFybWVsZmJfbGludXhfZWFiaX0iCisgCisgLyogVXNlIGxkLWxpbnV4LnNvLjMgc28gdGhhdCBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHJ1biAiY2xhc3NpYyIKKyAgICBHTlUvTGludXggYmluYXJpZXMgb24gYW4gRUFCSSBzeXN0ZW0uICAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8yOTAtYWxwaGEtc2lnbmFsX2gucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4zLzI5MC1hbHBoYS1zaWduYWxfaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2UxNzk2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8yOTAtYWxwaGEtc2lnbmFsX2gucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorLS0tIGdjYy00LjIuMS1zdG9jay9nY2MvY29uZmlnL2FscGhhL2xpbnV4LXVud2luZC5oCTIwMDUtMDYtMjQgMjA6MjI6NDEuMDAwMDAwMDAwIC0wNTAwCisrKysgZ2NjLTQuMi4xL2djYy9jb25maWcvYWxwaGEvbGludXgtdW53aW5kLmgJMjAwNy0wOS0wMSAyMDoyMTozNC4wMDAwMDAwMDAgLTA1MDAKK0BAIC0yOSw2ICsyOSw5IEBAIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAvKiBEbyBjb2RlIHJlYWRpbmcgdG8gaWRlbnRpZnkgYSBzaWduYWwgZnJhbWUsIGFuZCBzZXQgdGhlIGZyYW1lCisgICAgc3RhdGUgZGF0YSBhcHByb3ByaWF0ZWx5LiAgU2VlIHVud2luZC1kdzIuYyBmb3IgdGhlIHN0cnVjdHMuICAqLworIAorKy8qIERvbid0IHVzZSB0aGlzIGlmIGluaGliaXRfbGliYyBpcyBzZXQKKysgICBUaGUgYnVpbGQgZm9yIHRoaXMgdGFyZ2V0IHdpbGwgZmFpbCB0cnlpbmcgdG8gaW5jbHVkZSBtaXNzaW5nIGhlYWRlcnMgKi8KKysjaWZuZGVmIGluaGliaXRfbGliYworICNpbmNsdWRlIDxzaWduYWwuaD4KKyAjaW5jbHVkZSA8c3lzL3Vjb250ZXh0Lmg+CisgCitAQCAtODAsMyArODMsNCBAQCBhbHBoYV9mYWxsYmFja19mcmFtZV9zdGF0ZSAoc3RydWN0IF9VbndpCisgICBmcy0+cmV0YWRkcl9jb2x1bW4gPSA2NDsKKyAgIHJldHVybiBfVVJDX05PX1JFQVNPTjsKKyB9CisrI2VuZGlmIC8qIGluaGliaXRfbGliYyAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8zMDAtZm9ydHJhbi1zaWduZWQtVEltb2RlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8zMDAtZm9ydHJhbi1zaWduZWQtVEltb2RlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZTJmMDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4zLzMwMC1mb3J0cmFuLXNpZ25lZC1USW1vZGUucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRml4IGJ1aWxkaW5nIGdmb3J0cmFuIGZvciBBUk0uCitodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAwNy0wNS9tc2cwMTAxMC5odG1sCistLS0tCisKK1RoZSBwYXRjaCBiZWxvdyBmaXhlcyBhIGNyYXNoIGJ1aWxkaW5nIGxpYmdmb3J0cmFuIG9uIGFybS1saW51eC1nbnVlYWJpLgorCitUaGlzIHRhcmdldCBkb2Vzbid0IHJlYWxseSBoYXZlIGEgMTI4LWJpdCBpbnRlZ2VyIHR5cGUsIGhvd2V2ZXIgaXQgZG9lcyB1c2UgCitUSW1vZGUgdG8gcmVwcmVzZW50IHRoZSByZXR1cm4gdmFsdWUgb2YgY2VydGFpbiBzcGVjaWFsIEFCSSBkZWZpbmVkIGxpYnJhcnkgCitmdW5jdGlvbnMuIFRoaXMgcmVzdWx0cyBpbiB0eXBlX2Zvcl9zaXplKFRJbW9kZSkgYmVpbmcgY2FsbGVkLgorCitCZWNhdXNlIFRJbW9kZSBkZW9zbid0IGNvcnJlc3BvbmQgdG8gYW55IGdmb3J0cmFuIGludGVnZXIga2luZCAKK2dmY190eXBlX2Zvcl9zaXplIHJldHVybnMgTlVMTCBhbmQgd2Ugc2VnZmF1bHQgc2hvcnRseSBhZnRlci4KKworVGhlIHBhdGNoIGJlbG93IGZpeGVzIHRoaXMgYnkgbWFraW5nIGdmY190eXBlX2Zvcl9zaXplIGhhbmRsZSBUSW1vZGUgaW4gdGhlIAorc2FtZSB3YXkgYXMgdGhlIEMgZnJvbnRlbmQuCisKK1Rlc3RlZCBvbiB4ODZfNjQtbGludXggYW5kIGFybS1saW51eC1nbnVlYWJpLgorQXBwbGllZCB0byB0cnVuay4KKworUGF1bAorCisyMDA3LTA1LTE1ICBQYXVsIEJyb29rICA8cGF1bEBjb2Rlc291cmNlcnkuY29tPgorCisgICAgZ2NjL2ZvcnRyYW4vCisgICAgKiB0cmFucy10eXBlcy5jIChnZmNfdHlwZV9mb3Jfc2l6ZSk6IEhhbmRsZSBzaWduZWQgVEltb2RlLgorCitkaWZmIC1kdXJOIGdjYy00LjIuMy5vbGQvZ2NjL2ZvcnRyYW4vdHJhbnMtdHlwZXMuYyBnY2MtNC4yLjMvZ2NjL2ZvcnRyYW4vdHJhbnMtdHlwZXMuYworLS0tIGdjYy00LjIuMy5vbGQvZ2NjL2ZvcnRyYW4vdHJhbnMtdHlwZXMuYwkyMDA3LTA4LTMxIDEwOjI3OjUwLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMy9nY2MvZm9ydHJhbi90cmFucy10eXBlcy5jCTIwMDgtMDctMTcgMDk6NTQ6MjAuMDAwMDAwMDAwICswMjAwCitAQCAtMTc5OSw2ICsxNzk5LDEzIEBACisgCSAgaWYgKHR5cGUgJiYgYml0cyA9PSBUWVBFX1BSRUNJU0lPTiAodHlwZSkpCisgCSAgICByZXR1cm4gdHlwZTsKKyAJfQorKworKwkvKiBIYW5kbGUgVEltb2RlIGFzIGEgc3BlY2lhbCBjYXNlIGJlY2F1c2UgaXQgaXMgdXNlZCBieSBzb21lIGJhY2tlbmRzCisrCSAgIChlZy4gQVJNKSBldmVuIHRob3VnaCBpdCBpcyBub3QgYXZhaWxhYmxlIGZvciBub3JtYWwgdXNlLiAgKi8KKysjaWYgSE9TVF9CSVRTX1BFUl9XSURFX0lOVCA+PSA2NAorKwlpZiAoYml0cyA9PSBUWVBFX1BSRUNJU0lPTiAoaW50VElfdHlwZV9ub2RlKSkKKysJICByZXR1cm4gaW50VElfdHlwZV9ub2RlOworKyNlbmRpZgorICAgICB9CisgICBlbHNlCisgICAgIHsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjMvMzEwLXNoLXdpdGhvdXQtaGVhZGVycy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjMvMzEwLXNoLXdpdGhvdXQtaGVhZGVycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2RkYjY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8zMTAtc2gtd2l0aG91dC1oZWFkZXJzLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK09uIDIwMDgxMDExLCBLaGVtIFJBSiB3cml0ZXM6CisgWW91IGhhdmUgdG8gYmFyIGdjYyB0cnlpbmcgdG8gYnVpbGQgdW53aW5kaW5nIGF0IHN0YWdlIDEuIFRyeSB0aGUKKyBhdHRhY2hlZCBwYXRjaCBhbmQgc2VlIGlmIGl0IGhlbHBzLgorCisgZ2NjL2NvbmZpZy9zaC9saW51eC11bndpbmQuaCB8ICAgIDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitJbmRleDogZ2NjLTRfMi1icmFuY2gvZ2NjL2NvbmZpZy9zaC9saW51eC11bndpbmQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00XzItYnJhbmNoLm9yaWcvZ2NjL2NvbmZpZy9zaC9saW51eC11bndpbmQuaAkyMDA4LTA3LTAxIDE3OjI0OjQwLjAwMDAwMDAwMCAtMDcwMAorKysrIGdjYy00XzItYnJhbmNoL2djYy9jb25maWcvc2gvbGludXgtdW53aW5kLmgJMjAwOC0wNy0wMSAxNzoyNTo0Ny4wMDAwMDAwMDAgLTA3MDAKK0BAIC0yNiw2ICsyNiw4IEBAIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ08KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAKKysjaWZuZGVmIGluaGliaXRfbGliYworKworIC8qIERvIGNvZGUgcmVhZGluZyB0byBpZGVudGlmeSBhIHNpZ25hbCBmcmFtZSwgYW5kIHNldCB0aGUgZnJhbWUKKyAgICBzdGF0ZSBkYXRhIGFwcHJvcHJpYXRlbHkuICBTZWUgdW53aW5kLWR3Mi5jIGZvciB0aGUgc3RydWN0cy4gICovCisgCitAQCAtMjUxLDMgKzI1Myw0IEBAIHNoX2ZhbGxiYWNrX2ZyYW1lX3N0YXRlIChzdHJ1Y3QgX1Vud2luZF8KKyAgIHJldHVybiBfVVJDX05PX1JFQVNPTjsKKyB9CisgI2VuZGlmIC8qIGRlZmluZWQgKF9fU0g1X18pICovCisrI2VuZGlmIC8qIGlmbmRlZiBpbmhpYml0X2xpYmMgKi8KKwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8zMjAtbGliZ2NjX2VoLmEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi4zLzMyMC1saWJnY2NfZWguYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDlkYjNhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuMy8zMjAtbGliZ2NjX2VoLmEucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorVmFtcGlyaXNlZCBmcm9tOgorICBodHRwOi8vbGFuZGxleS5uZXQvaGcvYWJvcmlnaW5hbC9maWxlLzdlMDc0N2E2NjVhYi9zb3VyY2VzL3BhdGNoZXMvZ2NjLWNvcmUtbGliZ2NjZWgucGF0Y2gKKworZGlmZiAtZHVyTiBnY2MtNC4yLjIub3JpZy9nY2MvbWtsaWJnY2MuaW4gZ2NjLTQuMi4yL2djYy9ta2xpYmdjYy5pbgorLS0tIGdjYy00LjIuMi5vcmlnL2djYy9ta2xpYmdjYy5pbgkyMDA2LTA3LTA0IDIyOjIwOjAxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMi9nY2MvbWtsaWJnY2MuaW4JMjAxMS0wOC0zMSAxNjoyNDowMy42NzQ2OTAwMTYgKzAyMDAKK0BAIC0yMjMsOCArMjIzLDggQEAKKyAgIGlmIFsgIiRMSUJVTldJTkQiIF07IHRoZW4KKyAgICAgbGlidW53aW5kX2E9JGRpci9saWJ1bndpbmQuYQorICAgZmkKKysgIGxpYmdjY19laF9hPSRkaXIvbGliZ2NjX2VoLmEKKyAgIGlmIFsgIiRTSExJQl9MSU5LIiBdOyB0aGVuCistICAgIGxpYmdjY19laF9hPSRkaXIvbGliZ2NjX2VoLmEKKyAgICAgbGliZ2NjX3Nfc289JGRpci9saWJnY2NfcyR7U0hMSUJfRVhUfQorICAgICBpZiBbICIkTElCVU5XSU5EIiBdOyB0aGVuCisgICAgICAgbGlidW53aW5kX3NvPSRkaXIvbGlidW53aW5kJHtTSExJQl9FWFR9CitAQCAtODg5LDExICs4ODksMTEgQEAKKyAgIGVjaG8gJwljaG1vZCA2NDQnICAke2xkaXJ9L2xpYmdjb3YuYQorICAgZWNobyAnCSQoUkFOTElCX0ZPUl9UQVJHRVQpJyAke2xkaXJ9L2xpYmdjb3YuYQorIAorLSAgaWYgWyAiJFNITElCX0xJTksiIF07IHRoZW4KKy0gICAgZWNobyAnCSQoSU5TVEFMTF9EQVRBKScgJHtkaXJ9L2xpYmdjY19laC5hICR7bGRpcn0vCistICAgIGVjaG8gJwljaG1vZCA2NDQnICAke2xkaXJ9L2xpYmdjY19laC5hCistICAgIGVjaG8gJwkkKFJBTkxJQl9GT1JfVEFSR0VUKScgJHtsZGlyfS9saWJnY2NfZWguYQorKyAgZWNobyAnCSQoSU5TVEFMTF9EQVRBKScgJHtkaXJ9L2xpYmdjY19laC5hICR7bGRpcn0vCisrICBlY2hvICcJY2htb2QgNjQ0JyAgJHtsZGlyfS9saWJnY2NfZWguYQorKyAgZWNobyAnCSQoUkFOTElCX0ZPUl9UQVJHRVQpJyAke2xkaXJ9L2xpYmdjY19laC5hCisgCisrICBpZiBbICIkU0hMSUJfTElOSyIgXTsgdGhlbgorICAgICBzaGxpYl9zbGliZGlyX3F1YWw9CisgICAgIG9zX211bHRpbGliX2Rpcj1gJEdDQ19GT1JfVEFSR0VUICRmbGFncyAtLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeWAKKyAgICAgaWYgWyAiJG9zX211bHRpbGliX2RpciIgIT0gLiBdOyB0aGVuCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi40LzEwMC11Y2xpYmMtY29uZi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMTAwLXVjbGliYy1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNjFkYWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi40LzEwMC11Y2xpYmMtY29uZi5wYXRjaApAQCAtMCwwICsxLDIxNiBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9ib2VobS1nYy9jb25maWd1cmUgZ2NjLTQuMi4xL2JvZWhtLWdjL2NvbmZpZ3VyZQorLS0tIGdjYy00LjIuMS5vcmlnL2JvZWhtLWdjL2NvbmZpZ3VyZQkyMDA3LTA3LTE5IDE2OjMzOjU2LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9ib2VobS1nYy9jb25maWd1cmUJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC00MzIzLDcgKzQzMjMsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoIGdjYy00LjIuMS9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKKy0tLSBnY2MtNC4yLjEub3JpZy9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gJMjAwNS0wOC0xNSAwMjo0MTozMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCTIwMDctMDgtMDMgMjA6Mjk6MjIuMDAwMDAwMDAwICswMjAwCitAQCAtMTA1LDYgKzEwNSwxMCBAQAorICB0aGVuCisgICBtYWtlIGFsbC1nZGIgYWxsLWRlamFnbnUgYWxsLWxkIHx8IGV4aXQgMQorICAgbWFrZSBpbnN0YWxsLWdkYiBpbnN0YWxsLWRlamFnbnUgaW5zdGFsbC1sZCB8fCBleGl0IDEKKytlbGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgLWEgJEhfUkVBTF9UQVJHRVQgPSBpNjg2LXBjLWxpbnV4LXVjbGliYyBdCisrIHRoZW4KKysgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCisrICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQorIGVsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCBdIDsgdGhlbgorICAgbWFrZSBib290c3RyYXAgfHwgZXhpdCAxCisgICBtYWtlIGluc3RhbGwgfHwgZXhpdCAxCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2djYy9jb25maWcvY3Jpcy9saW51eC5oIGdjYy00LjIuMS9nY2MvY29uZmlnL2NyaXMvbGludXguaAorLS0tIGdjYy00LjIuMS5vcmlnL2djYy9jb25maWcvY3Jpcy9saW51eC5oCTIwMDYtMDItMTggMTI6MTI6NTEuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMi4xL2djYy9jb25maWcvY3Jpcy9saW51eC5oCTIwMDctMDgtMDMgMjA6Mjk6MjIuMDAwMDAwMDAwICswMjAwCitAQCAtNzQsNyArNzQsMTEgQEAKKyAjZGVmaW5lIENSSVNfREVGQVVMVF9DUFVfVkVSU0lPTiBDUklTX0NQVV9ORworIAorICN1bmRlZiBDUklTX1NVQlRBUkdFVF9WRVJTSU9OCistI2RlZmluZSBDUklTX1NVQlRBUkdFVF9WRVJTSU9OICIgLSBjcmlzLWF4aXMtbGludXgtZ251IgorKyNpZiBVQ0xJQkNfREVGQVVMVAorKyMgZGVmaW5lIENSSVNfU1VCVEFSR0VUX1ZFUlNJT04gIiAtIGNyaXMtYXhpcy1saW51eC11Y2xpYmMiCisrI2Vsc2UKKysjIGRlZmluZSBDUklTX1NVQlRBUkdFVF9WRVJTSU9OICIgLSBjcmlzLWF4aXMtbGludXgtZ251IgorKyNlbmRpZgorIAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQuc28uMSIKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGliZmZpL2NvbmZpZ3VyZSBnY2MtNC4yLjEvbGliZmZpL2NvbmZpZ3VyZQorLS0tIGdjYy00LjIuMS5vcmlnL2xpYmZmaS9jb25maWd1cmUJMjAwNy0wNy0xOSAxNjozMzo1Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGliZmZpL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjI5OjIyLjAwMDAwMDAwMCArMDIwMAorQEAgLTM0NjAsNyArMzQ2MCw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJnZm9ydHJhbi9jb25maWd1cmUgZ2NjLTQuMi4xL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQorLS0tIGdjYy00LjIuMS5vcmlnL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQkyMDA3LTA3LTE5IDE2OjMzOjU2LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJnZm9ydHJhbi9jb25maWd1cmUJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zNzIxLDcgKzM3MjEsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGliZ29tcC9jb25maWd1cmUgZ2NjLTQuMi4xL2xpYmdvbXAvY29uZmlndXJlCistLS0gZ2NjLTQuMi4xLm9yaWcvbGliZ29tcC9jb25maWd1cmUJMjAwNy0wNy0xOSAxNjozMzo1Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGliZ29tcC9jb25maWd1cmUJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zODkzLDcgKzM4OTMsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGliamF2YS9jbGFzc3BhdGgvY29uZmlndXJlIGdjYy00LjIuMS9saWJqYXZhL2NsYXNzcGF0aC9jb25maWd1cmUKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJqYXZhL2NsYXNzcGF0aC9jb25maWd1cmUJMjAwNy0wMS0xNyAxOToxMDoyNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbGliamF2YS9jbGFzc3BhdGgvY29uZmlndXJlCTIwMDctMDgtMDMgMjA6Mjk6MjIuMDAwMDAwMDAwICswMjAwCitAQCAtNTMwNyw3ICs1MzA3LDcgQEAKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgqKQorICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgIDs7CisgCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnIGdjYy00LjIuMS9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZworLS0tIGdjYy00LjIuMS5vcmlnL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCTIwMDYtMDgtMDcgMjI6Mzc6NTAuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCTIwMDctMDgtMDMgMjA6Mjk6MjIuMDAwMDAwMDAwICswMjAwCitAQCAtNjAzLDcgKzYwMyw3IEBACisgCisgIyBUcmFuc2Zvcm0gbGludXgqIHRvICotKi1saW51eC1nbnUqLCB0byBzdXBwb3J0IG9sZCBjb25maWd1cmUgc2NyaXB0cy4KKyBjYXNlICRob3N0X29zIGluCistbGludXgtZ251KikgOzsKKytsaW51eC1nbnUqfGxpbnV4LXVjbGliYyopIDs7CisgbGludXgqKSBob3N0PWBlY2hvICRob3N0IHwgc2VkICdzL15cKC4qLS4qLWxpbnV4XClcKC4qXCkkL1wxLWdudVwyLydgCisgZXNhYworIAorQEAgLTEyNTEsNyArMTI1MSw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIHZlcnNpb25fdHlwZT1saW51eAorICAgbmVlZF9saWJfcHJlZml4PW5vCisgICBuZWVkX3ZlcnNpb249bm8KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGliamF2YS9jb25maWd1cmUgZ2NjLTQuMi4xL2xpYmphdmEvY29uZmlndXJlCistLS0gZ2NjLTQuMi4xLm9yaWcvbGliamF2YS9jb25maWd1cmUJMjAwNy0wNy0xOSAxNjozMzo1Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGliamF2YS9jb25maWd1cmUJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC01NDI0LDcgKzU0MjQsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlibXVkZmxhcC9jb25maWd1cmUgZ2NjLTQuMi4xL2xpYm11ZGZsYXAvY29uZmlndXJlCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlibXVkZmxhcC9jb25maWd1cmUJMjAwNi0xMi0wNCAxMjoxMzowNy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbGlibXVkZmxhcC9jb25maWd1cmUJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC01Mzk0LDcgKzUzOTQsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlib2JqYy9jb25maWd1cmUgZ2NjLTQuMi4xL2xpYm9iamMvY29uZmlndXJlCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlib2JqYy9jb25maWd1cmUJMjAwNi0xMC0xNSAwOTo0Mjo1Ny4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlib2JqYy9jb25maWd1cmUJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMzE0LDcgKzMzMTQsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3NwL2NvbmZpZ3VyZSBnY2MtNC4yLjEvbGlic3NwL2NvbmZpZ3VyZQorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnNzcC9jb25maWd1cmUJMjAwNi0xMC0xNSAwOTo0Mjo1Ny4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3NwL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjI5OjIyLjAwMDAwMDAwMCArMDIwMAorQEAgLTQ0ODAsNyArNDQ4MCw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlndXJlIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlndXJlCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQkyMDA3LTA2LTI5IDAxOjAyOjA1LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlndXJlCTIwMDctMDgtMDMgMjA6Mjk6MjIuMDAwMDAwMDAwICswMjAwCitAQCAtNDI4Myw3ICs0MjgzLDcgQEAKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgqKQorICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgIDs7CisgCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnRvb2wubTQgZ2NjLTQuMi4xL2xpYnRvb2wubTQKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJ0b29sLm00CTIwMDUtMDctMTYgMDQ6MzA6NTMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnRvb2wubTQJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC03MzksNyArNzM5LDcgQEAKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgqKQorICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgIDs7CisgCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2x0Y29uZmlnIGdjYy00LjIuMS9sdGNvbmZpZworLS0tIGdjYy00LjIuMS5vcmlnL2x0Y29uZmlnCTIwMDctMDItMTQgMTg6MDg6MzUuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMi4xL2x0Y29uZmlnCTIwMDctMDgtMDMgMjA6Mjk6MjIuMDAwMDAwMDAwICswMjAwCitAQCAtNjAzLDcgKzYwMyw3IEBACisgCisgIyBUcmFuc2Zvcm0gbGludXgqIHRvICotKi1saW51eC1nbnUqLCB0byBzdXBwb3J0IG9sZCBjb25maWd1cmUgc2NyaXB0cy4KKyBjYXNlICRob3N0X29zIGluCistbGludXgtZ251KikgOzsKKytsaW51eC1nbnUqfGxpbnV4LXVjbGliYyopIDs7CisgbGludXgqKSBob3N0PWBlY2hvICRob3N0IHwgc2VkICdzL15cKC4qLS4qLWxpbnV4XClcKC4qXCkkL1wxLWdudVwyLydgCisgZXNhYworIAorQEAgLTEyNTEsNyArMTI1MSw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIHZlcnNpb25fdHlwZT1saW51eAorICAgbmVlZF9saWJfcHJlZml4PW5vCisgICBuZWVkX3ZlcnNpb249bm8KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvemxpYi9jb25maWd1cmUgZ2NjLTQuMi4xL3psaWIvY29uZmlndXJlCistLS0gZ2NjLTQuMi4xLm9yaWcvemxpYi9jb25maWd1cmUJMjAwNy0wMS0xNyAxOToxMDoyNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvemxpYi9jb25maWd1cmUJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zNDI5LDcgKzM0MjksNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMTEwLXVjbGliYy1jb25mLW5vdXBzdHJlYW0ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi40LzExMC11Y2xpYmMtY29uZi1ub3Vwc3RyZWFtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMjM5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi40LzExMC11Y2xpYmMtY29uZi1ub3Vwc3RyZWFtLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvZ2NjL2NvbmZpZy5nY2MgZ2NjLTQuMi4xL2djYy9jb25maWcuZ2NjCistLS0gZ2NjLTQuMi4xLm9yaWcvZ2NjL2NvbmZpZy5nY2MJMjAwNy0wMi0wMyAwNjoyNToyMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvZ2NjL2NvbmZpZy5nY2MJMjAwNy0wOC0wMyAyMDoyOTo1Mi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xOTY0LDcgKzE5NjQsNyBAQAorICAgICAgICAgOzsKKyBzaC0qLWVsZiogfCBzaFsxMjM0NmxdKi0qLWVsZiogfCBzaCotKi1rYW9zKiB8IFwKKyBzaC0qLXN5bWJpYW5lbGYqIHwgc2hbMTIzNDZsXSotKi1zeW1iaWFuZWxmKiB8IFwKKy0gIHNoLSotbGludXgqIHwgc2hbMzQ2bGJlXSotKi1saW51eCogfCBcCisrICBzaCotKi1saW51eCogfCBzaFszNDZsYmVdKi0qLWxpbnV4KiB8IFwKKyAgIHNoLSotbmV0YnNkZWxmKiB8IHNobCotKi1uZXRic2RlbGYqIHwgc2g1LSotbmV0YnNkKiB8IHNoNWwqLSotbmV0YnNkKiB8IFwKKyAgICBzaDY0LSotbmV0YnNkKiB8IHNoNjRsKi0qLW5ldGJzZCopCisgCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gc2gvdC1zaCBzaC90LWVsZiIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMTIwLXVjbGliYy1sb2NhbGUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi40LzEyMC11Y2xpYmMtbG9jYWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5OGM1MDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi40LzEyMC11Y2xpYmMtbG9jYWxlLnBhdGNoCkBAIC0wLDAgKzEsMjgwNiBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00IGdjYy00LjIuMS9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAkyMDA3LTA2LTI5IDAxOjAyOjA1LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMTMzNCw3ICsxMzM0LDcgQEAKKyBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKKyAgIEdMSUJDWFhfRU5BQkxFKGNsb2NhbGUsYXV0byxbQDw6QD1NT0RFTEA6PkBdLAorICAgICBbdXNlIE1PREVMIGZvciB0YXJnZXQgbG9jYWxlIHBhY2thZ2VdLAorLSAgICBbcGVybWl0IGdlbmVyaWN8Z251fGllZWVfMTAwMy4xLTIwMDF8eWVzfG5vfGF1dG9dKQorKyAgICBbcGVybWl0IGdlbmVyaWN8Z251fGllZWVfMTAwMy4xLTIwMDF8dWNsaWJjfHllc3xub3xhdXRvXSkKKyAKKyAgICMgRGVhbCB3aXRoIGdldHRleHQgaXNzdWVzLiAgRGVmYXVsdCB0byBub3QgdXNpbmcgaXQgKD1ubykgdW50aWwgd2UgZGV0ZWN0CisgICAjIHN1cHBvcnQgZm9yIGl0IGxhdGVyLiAgTGV0IHRoZSB1c2VyIHR1cm4gaXQgb2ZmIHZpYSAtLWUvZCwgYnV0IGxldCB0aGF0CitAQCAtMTM1NSw2ICsxMzU1LDkgQEAKKyAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCisgICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgorICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgorKyAgICAgICotdWNsaWJjKikKKysgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCisrICAgICAgICA7OworICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQorICAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz1nbnUJCisgICAgICAgICA7OworQEAgLTE1MjYsNiArMTUyOSw0MCBAQAorICAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy90aW1lX21lbWJlcnMuY2MKKyAgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgICAgICAgOzsKKysgICAgdWNsaWJjKQorKyAgICAgIEFDX01TR19SRVNVTFQodWNsaWJjKQorKworKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKKysgICAgICAjIGxhbmd1YWdlcy4KKysgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAorKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKKysKKysgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgorKyAgICAgIEFDX0NIRUNLX1BST0coY2hlY2tfbXNnZm10LCBtc2dmbXQsIHllcywgbm8pCisrICAgICAgaWYgdGVzdCB4IiRjaGVja19tc2dmbXQiID0geCJ5ZXMiICYmIHRlc3QgeCIkZW5hYmxlX25scyIgPSB4InllcyI7IHRoZW4KKysgICAgICAgIFVTRV9OTFM9eWVzCisrICAgICAgZmkKKysgICAgICAjIEV4cG9ydCB0aGUgYnVpbGQgb2JqZWN0cy4KKysgICAgICBmb3IgbGluZyBpbiAkQUxMX0xJTkdVQVM7IGRvIFwKKysgICAgICAgIGdsaWJjeHhfTU9GSUxFUz0iJGdsaWJjeHhfTU9GSUxFUyAkbGluZy5tbyI7IFwKKysgICAgICAgIGdsaWJjeHhfUE9GSUxFUz0iJGdsaWJjeHhfUE9GSUxFUyAkbGluZy5wbyI7IFwKKysgICAgICBkb25lCisrICAgICAgQUNfU1VCU1QoZ2xpYmN4eF9NT0ZJTEVTKQorKyAgICAgIEFDX1NVQlNUKGdsaWJjeHhfUE9GSUxFUykKKysKKysgICAgICBDTE9DQUxFX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysgICAgICBDQ09ERUNWVF9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKysgICAgICBDQ09MTEFURV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysgICAgICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKyAgICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysgICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrICAgICAgOzsKKyAgIGVzYWMKKyAKKyAgICMgVGhpcyBpcyB3aGVyZSB0aGUgdGVzdHN1aXRlIGxvb2tzIGZvciBsb2NhbGUgY2F0YWxvZ3MsIHVzaW5nIHRoZQorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTYwIEBACisrLy8gV3JhcHBlciBmb3IgdW5kZXJseWluZyBDLWxhbmd1YWdlIGxvY2FsaXphdGlvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjggIFN0YW5kYXJkIGxvY2FsZSBjYXRlZ29yaWVzLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8Y2Vycm5vPiAgLy8gRm9yIGVycm5vCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8c3RkZXhjZXB0PgorKyNpbmNsdWRlIDxsYW5naW5mby5oPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19zdHJ0b2xfbChTLCBFLCBCLCBMKSAgICAgIHN0cnRvbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b3VsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvdWwoKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG9sbF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b2xsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvdWxsX2woUywgRSwgQiwgTCkgICAgc3RydG91bGwoKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG9mX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2YoKFMpLCAoRSkpCisrI2RlZmluZSBfX3N0cnRvZF9sKFMsIEUsIEwpICAgICAgICAgc3RydG9kKChTKSwgKEUpKQorKyNkZWZpbmUgX19zdHJ0b2xkX2woUywgRSwgTCkgICAgICAgIHN0cnRvbGQoKFMpLCAoRSkpCisrI3dhcm5pbmcgc2hvdWxkIGR1bW15IF9fbmV3bG9jYWxlIGNoZWNrIGZvciBDfFBPU0lYID8KKysjZGVmaW5lIF9fbmV3bG9jYWxlKGEsIGIsIGMpICAgICAgICBOVUxMCisrI2RlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCisrI2RlZmluZSBfX2R1cGxvY2FsZShhKSAgICAgICAgICAgICAgX19jX2xvY2FsZSgpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZCAKKyt7CisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBmbG9hdCYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2Y7CisrCSAgZWxzZQorKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2Q7CisrCSAgZWxzZQorKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgbG9uZyBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgbG9uZyBkb3VibGUgX19sZCA9IF9fc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fbGQ7CisrCSAgZWxzZQorKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisrCX0KKysgICAgfQorKworKyAgdm9pZAorKyAgbG9jYWxlOjpmYWNldDo6X1NfY3JlYXRlX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYywgY29uc3QgY2hhciogX19zLCAKKysJCQkJICAgIF9fY19sb2NhbGUgX19vbGQpCisrICB7CisrICAgIF9fY2xvYyA9IF9fbmV3bG9jYWxlKDEgPDwgTENfQUxMLCBfX3MsIF9fb2xkKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBpZiAoIV9fY2xvYykKKysgICAgICB7CisrCS8vIFRoaXMgbmFtZWQgbG9jYWxlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgT1MuCisrCV9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oImxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZSAiCisrCQkJICAgICAgIm5hbWUgbm90IHZhbGlkIikpOworKyAgICAgIH0KKysjZW5kaWYKKysgIH0KKysgIAorKyAgdm9pZAorKyAgbG9jYWxlOjpmYWNldDo6X1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICB7CisrICAgIGlmIChfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCisrICAgICAgX19mcmVlbG9jYWxlKF9fY2xvYyk7IAorKyAgfQorKworKyAgX19jX2xvY2FsZQorKyAgbG9jYWxlOjpmYWNldDo6X1NfY2xvbmVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorKyAgeyByZXR1cm4gX19kdXBsb2NhbGUoX19jbG9jKTsgfQorK30gLy8gbmFtZXNwYWNlIHN0ZAorKworK25hbWVzcGFjZSBfX2dudV9jeHgKKyt7CisrICBjb25zdCBjaGFyKiBjb25zdCBjYXRlZ29yeV9uYW1lc1s2ICsgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVNdID0KKysgICAgeworKyAgICAgICJMQ19DVFlQRSIsIAorKyAgICAgICJMQ19OVU1FUklDIiwKKysgICAgICAiTENfVElNRSIsIAorKyAgICAgICJMQ19DT0xMQVRFIiwgCisrICAgICAgIkxDX01PTkVUQVJZIiwKKysgICAgICAiTENfTUVTU0FHRVMiLCAKKysjaWYgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgIT0gMAorKyAgICAgICJMQ19QQVBFUiIsIAorKyAgICAgICJMQ19OQU1FIiwgCisrICAgICAgIkxDX0FERFJFU1MiLAorKyAgICAgICJMQ19URUxFUEhPTkUiLCAKKysgICAgICAiTENfTUVBU1VSRU1FTlQiLCAKKysgICAgICAiTENfSURFTlRJRklDQVRJT04iIAorKyNlbmRpZgorKyAgICB9OworK30KKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7CisrfSAgLy8gbmFtZXNwYWNlIHN0ZAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxMTcgQEAKKysvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpZm5kZWYgX0NfTE9DQUxFX0gKKysjZGVmaW5lIF9DX0xPQ0FMRV9IIDEKKysKKysjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisrCisrI2luY2x1ZGUgPGNzdHJpbmc+ICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzdHJsZW4KKysjaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnNucHJpbnRmIG9yIHN0ZDo6c3ByaW50ZgorKyNpbmNsdWRlIDxjbG9jYWxlPgorKyNpbmNsdWRlIDxsYW5naW5mby5oPgkJLy8gRm9yIGNvZGVjdnQKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysjaW5jbHVkZSA8aWNvbnYuaD4JCS8vIEZvciBjb2RlY3Z0IHVzaW5nIGljb252LCBpY29udl90CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI2luY2x1ZGUgPGxpYmludGwuaD4gCQkvLyBGb3IgbWVzc2FnZXMKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB3aGF0IGlzIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSBmb3IKKysjZW5kaWYKKysjZGVmaW5lIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSAxCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IGNhdGVnb3JpZXMKKysjZW5kaWYKKysvLyAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDYKKysjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDAKKysgCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKytuYW1lc3BhY2UgX19nbnVfY3h4CisreworKyAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworK30KKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICB0eXBlZGVmIF9fbG9jYWxlX3QJCV9fY19sb2NhbGU7CisrI2Vsc2UKKysgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7CisrI2VuZGlmCisrCisrICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBfVHYgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCisrICAvLyBzdHJpbmcuICBJZiBzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCisrICAvLyB0aGUgdW5zYWZlIHNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAorKyAgLy8gYmUgYXZvaWRlZC4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KKysgICAgaW50CisrICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsIAorKwkJICAgICBjb25zdCBpbnQgX19zaXplIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSksCisrCQkgICAgIGNvbnN0IGNoYXIqIF9fZm10LAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKwkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX3ByZWMpCisrICAgIHsKKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjKQorKyAgICB7CisrIyBpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBjaGFyKiBfX29sZCA9IHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX29sZCkgKyAxXTsKKysgICAgICBzdGQ6OnN0cmNweShfX3NhdiwgX19vbGQpOworKyAgICAgIHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgIkMiKTsKKysjIGVuZGlmCisrI2VuZGlmCisrCisrICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjpzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19wcmVjLCBfX3YpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKyAgICAgIF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19vbGQpOworKyNlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrICAgICAgZGVsZXRlIFtdIF9fc2F2OworKyNlbmRpZgorKyAgICAgIHJldHVybiBfX3JldDsKKysgICAgfQorK30KKysKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDYzIEBACisrLy8gUHJvdG90eXBlcyBmb3IgR0xJQkMgdGhyZWFkIGxvY2FsZSBfXy1wcmVmaXhlZCBmdW5jdGlvbnMgLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8gV3JpdHRlbiBieSBKYWt1YiBKZWxpbmVrIDxqYWt1YkByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorKyNpbmNsdWRlIDxjbG9jYWxlPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGNsZWFuIHRoaXMgdXAKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisrZXh0ZXJuICJDIiBfX3R5cGVvZihubF9sYW5naW5mb19sKSBfX25sX2xhbmdpbmZvX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJjb2xsX2wpIF9fc3RyY29sbF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RyZnRpbWVfbCkgX19zdHJmdGltZV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9kX2wpIF9fc3RydG9kX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2ZfbCkgX19zdHJ0b2ZfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvbGRfbCkgX19zdHJ0b2xkX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ4ZnJtX2wpIF9fc3RyeGZybV9sOworK2V4dGVybiAiQyIgX190eXBlb2YobmV3bG9jYWxlKSBfX25ld2xvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKGZyZWVsb2NhbGUpIF9fZnJlZWxvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKGR1cGxvY2FsZSkgX19kdXBsb2NhbGU7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorK2V4dGVybiAiQyIgX190eXBlb2YoaXN3Y3R5cGVfbCkgX19pc3djdHlwZV9sOworK2V4dGVybiAiQyIgX190eXBlb2YodG93bG93ZXJfbCkgX190b3dsb3dlcl9sOworK2V4dGVybiAiQyIgX190eXBlb2YodG93dXBwZXJfbCkgX190b3d1cHBlcl9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzY29sbF9sKSBfX3djc2NvbGxfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc2Z0aW1lX2wpIF9fd2NzZnRpbWVfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc3hmcm1fbCkgX193Y3N4ZnJtX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3R5cGVfbCkgX193Y3R5cGVfbDsKKysjZW5kaWYgCisrCisrI2VuZGlmIC8vIEdMSUJDIDIuMyBhbmQgbGF0ZXIKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwzMDYgQEAKKysvLyBzdGQ6OmNvZGVjdnQgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuNSAtIFRlbXBsYXRlIGNsYXNzIGNvZGVjdnQKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gU3BlY2lhbGl6YXRpb25zLgorKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgY29kZWN2dF9iYXNlOjpyZXN1bHQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwgCisrCSBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKysJIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCisrCSBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKKysgIHsKKysgICAgcmVzdWx0IF9fcmV0ID0gb2s7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyB3Y3NucnRvbWJzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIGZhbGwgYmFjayB0byB3Y3J0b21iIGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiB3Y3NucnRvbWJzIGlzIGEgR05VIGV4dGVuc2lvbgorKyAgICBmb3IgKF9fZnJvbV9uZXh0ID0gX19mcm9tLCBfX3RvX25leHQgPSBfX3RvOworKwkgX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fdG9fbmV4dCA8IF9fdG9fZW5kCisrCSAmJiBfX3JldCA9PSBvazspCisrICAgICAgeworKwljb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZCA9IHdtZW1jaHIoX19mcm9tX25leHQsIEwnXDAnLAorKwkJCQkJCSAgICAgIF9fZnJvbV9lbmQgLSBfX2Zyb21fbmV4dCk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKKysKKysJX19mcm9tID0gX19mcm9tX25leHQ7CisrCWNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3NucnRvbWJzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LAorKwkJCQkJIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb21fbmV4dCwKKysJCQkJCSBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyB3Y3J0b21iLgorKwkgICAgZm9yICg7IF9fZnJvbSA8IF9fZnJvbV9uZXh0OyArK19fZnJvbSkKKysJICAgICAgX190b19uZXh0ICs9IHdjcnRvbWIoX190b19uZXh0LCAqX19mcm9tLCAmX190bXBfc3RhdGUpOworKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgPSBlcnJvcjsKKysJICB9CisrCWVsc2UgaWYgKF9fZnJvbV9uZXh0ICYmIF9fZnJvbV9uZXh0IDwgX19mcm9tX2NodW5rX2VuZCkKKysJICB7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tX2NodW5rX2VuZDsKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgfQorKworKwlpZiAoX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fcmV0ID09IG9rKQorKwkgIHsKKysJICAgIGV4dGVybl90eXBlIF9fYnVmW01CX0xFTl9NQVhdOworKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkgICAgY29uc3Qgc2l6ZV90IF9fY29udiA9IHdjcnRvbWIoX19idWYsICpfX2Zyb21fbmV4dCwgJl9fdG1wX3N0YXRlKTsKKysJICAgIGlmIChfX2NvbnYgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fdG9fZW5kIC0gX190b19uZXh0KSkKKysJICAgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgICAgZWxzZQorKwkgICAgICB7CisrCQltZW1jcHkoX190b19uZXh0LCBfX2J1ZiwgX19jb252KTsKKysJCV9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJCV9fdG9fbmV4dCArPSBfX2NvbnY7CisrCQkrK19fZnJvbV9uZXh0OworKwkgICAgICB9CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsgCisrICB9CisrICAKKysgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwgCisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorKwlpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAorKwlpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKKysgIHsKKysgICAgcmVzdWx0IF9fcmV0ID0gb2s7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIHN0b3JlIGEgTCdcMCcgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KKysgICAgLy8gTkI6IG1ic25ydG93Y3MgaXMgYSBHTlUgZXh0ZW5zaW9uCisrICAgIGZvciAoX19mcm9tX25leHQgPSBfX2Zyb20sIF9fdG9fbmV4dCA9IF9fdG87CisrCSBfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX190b19uZXh0IDwgX190b19lbmQKKysJICYmIF9fcmV0ID09IG9rOykKKysgICAgICB7CisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOworKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tX25leHQsICdcMCcsCisrCQkJCQkJCQkgIF9fZnJvbV9lbmQKKysJCQkJCQkJCSAgLSBfX2Zyb21fbmV4dCkpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7CisrCisrCV9fZnJvbSA9IF9fZnJvbV9uZXh0OworKwlzaXplX3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKKysJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbV9uZXh0LAorKwkJCQkgICBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyBtYnJ0b3djLgorKwkgICAgZm9yICg7OyArK19fdG9fbmV4dCwgX19mcm9tICs9IF9fY29udikKKysJICAgICAgeworKwkJX19jb252ID0gbWJydG93YyhfX3RvX25leHQsIF9fZnJvbSwgX19mcm9tX2VuZCAtIF9fZnJvbSwKKysJCQkJICZfX3RtcF9zdGF0ZSk7CisrCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCisrCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQorKwkJICBicmVhazsKKysJICAgICAgfQorKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb207CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CSAgICAKKysJICAgIF9fcmV0ID0gZXJyb3I7CisrCSAgfQorKwllbHNlIGlmIChfX2Zyb21fbmV4dCAmJiBfX2Zyb21fbmV4dCA8IF9fZnJvbV9jaHVua19lbmQpCisrCSAgeworKwkgICAgLy8gSXQgaXMgdW5jbGVhciB3aGF0IHRvIHJldHVybiBpbiB0aGlzIGNhc2UgKHNlZSBEUiAzODIpLiAKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb21fY2h1bmtfZW5kOworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICB9CisrCisrCWlmIChfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX19yZXQgPT0gb2spCisrCSAgeworKwkgICAgaWYgKF9fdG9fbmV4dCA8IF9fdG9fZW5kKQorKwkgICAgICB7CisrCQkvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncworKwkJX190bXBfc3RhdGUgPSBfX3N0YXRlOwkJCisrCQkrK19fZnJvbV9uZXh0OworKwkJKl9fdG9fbmV4dCsrID0gTCdcMCc7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7IAorKyAgfQorKworKyAgaW50IAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKQorKyAgeworKyAgICAvLyBYWFggVGhpcyBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGVuY29kaW5nIGlzCisrICAgIC8vIHN0YXRlbGVzcyBhbmQgaXMgZWl0aGVyIHNpbmdsZS1ieXRlIG9yIHZhcmlhYmxlLXdpZHRoLgorKyAgICBpbnQgX19yZXQgPSAwOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysgICAgaWYgKE1CX0NVUl9NQVggPT0gMSkKKysgICAgICBfX3JldCA9IDE7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gX19yZXQ7CisrICB9ICAKKysKKysgIGludCAKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKQorKyAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysgICAgLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MuCisrICAgIGludCBfX3JldCA9IE1CX0NVUl9NQVg7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrICAKKysgIGludCAKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19sZW5ndGgoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKKysJICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdAorKyAgeworKyAgICBpbnQgX19yZXQgPSAwOworKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysKKysgICAgLy8gbWJzbnJ0b3djcyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKysgICAgLy8gaW4gY2FzZSB3ZSBhZHZhbmNlIHBhc3QgaXQgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KKysgICAgLy8gTkI6IG1ic25ydG93Y3MgaXMgYSBHTlUgZXh0ZW5zaW9uCisrICAKKysgICAgLy8gQSBkdW1teSBpbnRlcm5hbCBidWZmZXIgaXMgbmVlZGVkIGluIG9yZGVyIGZvciBtYnNucnRvY3dzIHRvIGNvbnNpZGVyCisrICAgIC8vIGl0cyBmb3VydGggcGFyYW1ldGVyIChpdCB3b3VsZG4ndCB3aXRoIE5VTEwgYXMgZmlyc3QgcGFyYW1ldGVyKS4KKysgICAgd2NoYXJfdCogX190byA9IHN0YXRpY19jYXN0PHdjaGFyX3QqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZih3Y2hhcl90KSAKKysJCQkJCQkJICAgKiBfX21heCkpOworKyAgICB3aGlsZSAoX19mcm9tIDwgX19lbmQgJiYgX19tYXgpCisrICAgICAgeworKwljb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZDsKKysJX19mcm9tX2NodW5rX2VuZCA9IHN0YXRpY19jYXN0PGNvbnN0IGV4dGVybl90eXBlKj4obWVtY2hyKF9fZnJvbSwgJ1wwJywKKysJCQkJCQkJCSAgX19lbmQKKysJCQkJCQkJCSAgLSBfX2Zyb20pKTsKKysJaWYgKCFfX2Zyb21fY2h1bmtfZW5kKQorKwkgIF9fZnJvbV9jaHVua19lbmQgPSBfX2VuZDsKKysKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fdG1wX2Zyb20gPSBfX2Zyb207CisrCXNpemVfdCBfX2NvbnYgPSBtYnNucnRvd2NzKF9fdG8sICZfX2Zyb20sCisrCQkJCSAgIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb20sCisrCQkJCSAgIF9fbWF4LCAmX19zdGF0ZSk7CisrCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisrCSAgeworKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKKysJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKysJICAgIC8vIG1icnRvd2MuCisrCSAgICBmb3IgKF9fZnJvbSA9IF9fdG1wX2Zyb207OyBfX2Zyb20gKz0gX19jb252KQorKwkgICAgICB7CisrCQlfX2NvbnYgPSBtYnJ0b3djKE5VTEwsIF9fZnJvbSwgX19lbmQgLSBfX2Zyb20sCisrCQkJCSAmX190bXBfc3RhdGUpOworKwkJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKQorKwkJICAgIHx8IF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSkKKysJCSAgYnJlYWs7CisrCSAgICAgIH0KKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJICAgIF9fcmV0ICs9IF9fZnJvbSAtIF9fdG1wX2Zyb207CisrCSAgICBicmVhazsKKysJICB9CisrCWlmICghX19mcm9tKQorKwkgIF9fZnJvbSA9IF9fZnJvbV9jaHVua19lbmQ7CisrCQorKwlfX3JldCArPSBfX2Zyb20gLSBfX3RtcF9mcm9tOworKwlfX21heCAtPSBfX2NvbnY7CisrCisrCWlmIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKKysJICB7CisrCSAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncworKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkgICAgKytfX2Zyb207CisrCSAgICArK19fcmV0OworKwkgICAgLS1fX21heDsKKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OyAKKysgIH0KKysjZW5kaWYKKyt9CitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsODAgQEAKKysvLyBzdGQ6OmNvbGxhdGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjQuMS4yICBjb2xsYXRlIHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorKyNkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyNkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKysjZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gVGhlc2UgYXJlIGJhc2ljYWxseSBleHRlbnNpb25zIHRvIGNoYXJfdHJhaXRzLCBhbmQgcGVyaGFwcyBzaG91bGQKKysgIC8vIGJlIHB1dCB0aGVyZSBpbnN0ZWFkIG9mIGhlcmUuCisrICB0ZW1wbGF0ZTw+CisrICAgIGludCAKKysgICAgY29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiBfX29uZSwgY29uc3QgY2hhciogX190d28pIGNvbnN0CisrICAgIHsgCisrICAgICAgaW50IF9fY21wID0gX19zdHJjb2xsX2woX19vbmUsIF9fdHdvLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsKKysgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDApOworKyAgICB9CisrICAKKysgIHRlbXBsYXRlPD4KKysgICAgc2l6ZV90CisrICAgIGNvbGxhdGU8Y2hhcj46Ol9NX3RyYW5zZm9ybShjaGFyKiBfX3RvLCBjb25zdCBjaGFyKiBfX2Zyb20sIAorKwkJCQlzaXplX3QgX19uKSBjb25zdCAKKysgICAgeyByZXR1cm4gX19zdHJ4ZnJtX2woX190bywgX19mcm9tLCBfX24sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIGludCAKKysgICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fY29tcGFyZShjb25zdCB3Y2hhcl90KiBfX29uZSwgCisrCQkJCSBjb25zdCB3Y2hhcl90KiBfX3R3bykgY29uc3QKKysgICAgeworKyAgICAgIGludCBfX2NtcCA9IF9fd2NzY29sbF9sKF9fb25lLCBfX3R3bywgX01fY19sb2NhbGVfY29sbGF0ZSk7CisrICAgICAgcmV0dXJuIChfX2NtcCA+PiAoOCAqIHNpemVvZiAoaW50KSAtIDIpKSB8IChfX2NtcCAhPSAwKTsKKysgICAgfQorKyAgCisrICB0ZW1wbGF0ZTw+CisrICAgIHNpemVfdAorKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV90cmFuc2Zvcm0od2NoYXJfdCogX190bywgY29uc3Qgd2NoYXJfdCogX19mcm9tLAorKwkJCQkgICBzaXplX3QgX19uKSBjb25zdAorKyAgICB7IHJldHVybiBfX3djc3hmcm1fbChfX3RvLCBfX2Zyb20sIF9fbiwgX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KKysjZW5kaWYKKyt9CitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDMwMCBAQAorKy8vIHN0ZDo6Y3R5cGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuMS4yICBjdHlwZSB2aXJ0dWFsIGZ1bmN0aW9ucy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICB3Y3R5cGUoKFMpKQorKyNkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgdG93dXBwZXIoKEMpKQorKyNkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgdG93bG93ZXIoKEMpKQorKyNkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAorKyAgLy8gdmFyaW91cyAvY29uZmlnL29zLyogZmlsZXMuCisrICB0ZW1wbGF0ZTw+CisrICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKysgICAgOiBjdHlwZTxjaGFyPigwLCBmYWxzZSwgX19yZWZzKSAKKysgICAgeyAJCQorKyAgICAgIGlmIChzdGQ6OnN0cmNtcChfX3MsICJDIikgIT0gMCAmJiBzdGQ6OnN0cmNtcChfX3MsICJQT1NJWCIpICE9IDApCisrCXsKKysJICB0aGlzLT5fU19kZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlKTsKKysJICB0aGlzLT5fU19jcmVhdGVfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY3R5cGUsIF9fcyk7IAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgdGhpcy0+X01fdG91cHBlciA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX3RvdXBwZXI7CisrCSAgdGhpcy0+X01fdG9sb3dlciA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX3RvbG93ZXI7CisrCSAgdGhpcy0+X01fdGFibGUgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV9iOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QgIAorKyAgY3R5cGU8d2NoYXJfdD46Ol9fd21hc2tfdHlwZQorKyAgY3R5cGU8d2NoYXJfdD46Ol9NX2NvbnZlcnRfdG9fd21hc2soY29uc3QgbWFzayBfX20pIGNvbnN0CisrICB7CisrICAgIF9fd21hc2tfdHlwZSBfX3JldDsKKysgICAgc3dpdGNoIChfX20pCisrICAgICAgeworKyAgICAgIGNhc2Ugc3BhY2U6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgic3BhY2UiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgcHJpbnQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgicHJpbnQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgY250cmw6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiY250cmwiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgdXBwZXI6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgidXBwZXIiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgbG93ZXI6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgibG93ZXIiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgYWxwaGE6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiYWxwaGEiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgZGlnaXQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiZGlnaXQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgcHVuY3Q6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgicHVuY3QiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgeGRpZ2l0OgorKwlfX3JldCA9IF9fd2N0eXBlX2woInhkaWdpdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBhbG51bToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJhbG51bSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBncmFwaDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJncmFwaCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysJX19yZXQgPSBfX3dtYXNrX3R5cGUoKTsKKysgICAgICB9CisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysgIAorKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvdXBwZXIod2NoYXJfdCBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfX3Rvd3VwcGVyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKyAgICAgICAgKl9fbG8gPSBfX3Rvd3VwcGVyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgICAgICsrX19sbzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKyAgCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9fdG93bG93ZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQorKyAgCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvbG93ZXIod2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKyAgICAgIHsKKysgICAgICAgICpfX2xvID0gX190b3dsb3dlcl9sKCpfX2xvLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrICAgICAgICArK19fbG87CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIGJvb2wKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX2lzKG1hc2sgX19tLCB3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgCisrICAgIC8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrICAgIC8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKyAgICBib29sIF9fcmV0ID0gZmFsc2U7CisrICAgIGNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7IAorKyAgICBmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrICAgICAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0KKysJICAmJiBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJeworKwkgIF9fcmV0ID0gdHJ1ZTsKKysJICBicmVhazsKKysJfQorKyAgICByZXR1cm4gX19yZXQ7ICAgIAorKyAgfQorKyAgCisrICBjb25zdCB3Y2hhcl90KiAKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX2lzKGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdAorKyAgeworKyAgICBmb3IgKDsgX19sbyA8IF9faGk7ICsrX192ZWMsICsrX19sbykKKysgICAgICB7CisrCS8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrCS8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKwljb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOyAKKysJbWFzayBfX20gPSAwOworKwlmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrCSAgaWYgKF9faXN3Y3R5cGVfbCgqX19sbywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCisrCSAgICBfX20gfD0gX01fYml0W19fYml0Y3VyXTsKKysJKl9fdmVjID0gX19tOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrICAKKysgIGNvbnN0IHdjaGFyX3QqIAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpICYmICF0aGlzLT5kb19pcyhfX20sICpfX2xvKSkKKysgICAgICArK19fbG87CisrICAgIHJldHVybiBfX2xvOworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpICYmIHRoaXMtPmRvX2lzKF9fbSwgKl9fbG8pICE9IDApCisrICAgICAgKytfX2xvOworKyAgICByZXR1cm4gX19sbzsKKysgIH0KKysKKysgIHdjaGFyX3QKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKV07IH0KKysKKysgIGNvbnN0IGNoYXIqIAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgd2NoYXJfdCogX19kZXN0KSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKwkqX19kZXN0ID0gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG8pXTsKKysJKytfX2xvOworKwkrK19fZGVzdDsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgY2hhcgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fbmFycm93KHdjaGFyX3QgX193YywgY2hhciBfX2RmYXVsdCkgY29uc3QKKysgIHsKKysgICAgaWYgKF9fd2MgPj0gMCAmJiBfX3djIDwgMTI4ICYmIF9NX25hcnJvd19vaykKKysgICAgICByZXR1cm4gX01fbmFycm93W19fd2NdOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIGNvbnN0IGludCBfX2MgPSB3Y3RvYihfX3djKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7IAorKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX25hcnJvdyhjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpLCBjaGFyIF9fZGZhdWx0LCAKKysJICAgIGNoYXIqIF9fZGVzdCkgY29uc3QKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOworKyNlbmRpZgorKyAgICBpZiAoX01fbmFycm93X29rKQorKyAgICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysJeworKwkgIGlmICgqX19sbyA+PSAwICYmICpfX2xvIDwgMTI4KQorKwkgICAgKl9fZGVzdCA9IF9NX25hcnJvd1sqX19sb107CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBjb25zdCBpbnQgX19jID0gd2N0b2IoKl9fbG8pOworKwkgICAgICAqX19kZXN0ID0gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKwkgICAgfQorKwkgICsrX19sbzsKKysJICArK19fZGVzdDsKKysJfQorKyAgICBlbHNlCisrICAgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKwl7CisrCSAgY29uc3QgaW50IF9fYyA9IHdjdG9iKCpfX2xvKTsKKysJICAqX19kZXN0ID0gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKwkgICsrX19sbzsKKysJICArK19fZGVzdDsKKysJfQorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICB2b2lkCisrICBjdHlwZTx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9jdHlwZSgpCisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgd2ludF90IF9faTsKKysgICAgZm9yIChfX2kgPSAwOyBfX2kgPCAxMjg7ICsrX19pKQorKyAgICAgIHsKKysJY29uc3QgaW50IF9fYyA9IHdjdG9iKF9faSk7CisrCWlmIChfX2MgPT0gRU9GKQorKwkgIGJyZWFrOworKwllbHNlCisrCSAgX01fbmFycm93W19faV0gPSBzdGF0aWNfY2FzdDxjaGFyPihfX2MpOworKyAgICAgIH0KKysgICAgaWYgKF9faSA9PSAxMjgpCisrICAgICAgX01fbmFycm93X29rID0gdHJ1ZTsKKysgICAgZWxzZQorKyAgICAgIF9NX25hcnJvd19vayA9IGZhbHNlOworKyAgICBmb3IgKHNpemVfdCBfX2ogPSAwOworKwkgX19qIDwgc2l6ZW9mKF9NX3dpZGVuKSAvIHNpemVvZih3aW50X3QpOyArK19faikKKysgICAgICBfTV93aWRlbltfX2pdID0gYnRvd2MoX19qKTsKKysKKysgICAgZm9yIChzaXplX3QgX19rID0gMDsgX19rIDw9IDExOyArK19faykKKysgICAgICB7IAorKwlfTV9iaXRbX19rXSA9IHN0YXRpY19jYXN0PG1hc2s+KF9JU2JpdChfX2spKTsKKysJX01fd21hc2tbX19rXSA9IF9NX2NvbnZlcnRfdG9fd21hc2soX01fYml0W19fa10pOworKyAgICAgIH0KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICB9CisrI2VuZGlmIC8vICBfR0xJQkNYWF9VU0VfV0NIQVJfVAorK30KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTAwIEBACisrLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IGdldHRleHQgc3R1ZmYKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKytleHRlcm4gIkMiIGNoYXIgKl9fZGNnZXR0ZXh0KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCQkJICAgICBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KTsKKysjdW5kZWYgZ2V0dGV4dAorKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgX19kY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorKyNlbHNlCisrI3VuZGVmIGdldHRleHQKKysjZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gU3BlY2lhbGl6YXRpb25zLgorKyAgdGVtcGxhdGU8PgorKyAgICBzdHJpbmcKKysgICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KGdldHRleHQoX19kZmF1bHQuY19zdHIoKSkpOworKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysgICAgICByZXR1cm4gc3RyaW5nKF9fbXNnKTsKKysjZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbHNlCisrICAgICAgY29uc3QgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9fZGZhdWx0LmNfc3RyKCkpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbmRpZgorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHdzdHJpbmcKKysgICAgbWVzc2FnZXM8d2NoYXJfdD46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgd3N0cmluZyYgX19kZmF1bHQpIGNvbnN0CisrICAgIHsKKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV9tZXNzYWdlcyk7CisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZWxzZQorKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZW5kaWYKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxMTggQEAKKysvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworK2V4dGVybiAiQyIgY2hhciAqX190ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOworK2V4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUpOworKyNlbHNlCisrI3VuZGVmIF9fdGV4dGRvbWFpbgorKyN1bmRlZiBfX2JpbmR0ZXh0ZG9tYWluCisrI2RlZmluZSBfX3RleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgX19iaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKysjZW5kaWYKKysKKysgIC8vIE5vbi12aXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhzaXplX3QgX19yZWZzKQorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19nZXRfY19sb2NhbGUoKSksIAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfU19nZXRfY19uYW1lKCkpCisrICAgICB7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsIAorKwkJCQlzaXplX3QgX19yZWZzKSAKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKSksCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKF9fcykKKysgICAgIHsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX190bXA7CisrICAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cgCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsIAorKwkJCSAgIGNvbnN0IGNoYXIqIF9fZGlyKSBjb25zdAorKyAgICB7IAorKyAgICAgIF9fYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKysgICAgICByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsgCisrICAgIH0KKysKKysgIC8vIFZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6fm1lc3NhZ2VzKCkKKysgICAgeyAKKysgICAgICBpZiAoX01fbmFtZV9tZXNzYWdlcyAhPSBfU19nZXRfY19uYW1lKCkpCisrCWRlbGV0ZSBbXSBfTV9uYW1lX21lc3NhZ2VzOworKyAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOyAKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nIAorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCAKKysJCQkgICAgICBjb25zdCBsb2NhbGUmKSBjb25zdAorKyAgICB7IAorKyAgICAgIC8vIE5vIGVycm9yIGNoZWNraW5nIGlzIGRvbmUsIGFzc3VtZSB0aGUgY2F0YWxvZyBleGlzdHMgYW5kIGNhbgorKyAgICAgIC8vIGJlIHVzZWQuCisrICAgICAgX190ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB2b2lkICAgIAorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRhbG9nKSBjb25zdCAKKysgICAgeyB9CisrCisrICAgLy8gbWVzc2FnZXNfYnluYW1lCisrICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXNfYnluYW1lPF9DaGFyVD46Om1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCisrICAgICA6IG1lc3NhZ2VzPF9DaGFyVD4oX19yZWZzKSAKKysgICAgIHsgCisrICAgICAgIGlmICh0aGlzLT5fTV9uYW1lX21lc3NhZ2VzICE9IGxvY2FsZTo6ZmFjZXQ6Ol9TX2dldF9jX25hbWUoKSkKKysJIGRlbGV0ZSBbXSB0aGlzLT5fTV9uYW1lX21lc3NhZ2VzOworKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKysgICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgIHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysKKysgICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKKysJIHsKKysJICAgdGhpcy0+X1NfZGVzdHJveV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrCSAgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsgCisrCSB9CisrICAgICB9CitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDY5MiBAQAorKy8vIHN0ZDo6bW9uZXlwdW5jdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNi4zLjIgIG1vbmV5cHVuY3QgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgb3B0aW1pemUgdGhpcyBmb3IgdWNsaWJjCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIENvbnN0cnVjdCBhbmQgcmV0dXJuIHZhbGlkIHBhdHRlcm4gY29uc2lzdGluZyBvZiBzb21lIGNvbWJpbmF0aW9uIG9mOgorKyAgLy8gc3BhY2Ugbm9uZSBzeW1ib2wgc2lnbiB2YWx1ZQorKyAgbW9uZXlfYmFzZTo6cGF0dGVybgorKyAgbW9uZXlfYmFzZTo6X1NfY29uc3RydWN0X3BhdHRlcm4oY2hhciBfX3ByZWNlZGVzLCBjaGFyIF9fc3BhY2UsIGNoYXIgX19wb3NuKQorKyAgeyAKKysgICAgcGF0dGVybiBfX3JldDsKKysKKysgICAgLy8gVGhpcyBpbnNhbmVseSBjb21wbGljYXRlZCByb3V0aW5lIGF0dGVtcHRzIHRvIGNvbnN0cnVjdCBhIHZhbGlkCisrICAgIC8vIHBhdHRlcm4gZm9yIHVzZSB3aXRoIG1vbnllcHVuY3QuIEEgY291cGxlIG9mIGludmFyaWFudHM6CisrCisrICAgIC8vIGlmIChfX3ByZWNlZGVzKSBzeW1ib2wgLT4gdmFsdWUKKysgICAgLy8gZWxzZSB2YWx1ZSAtPiBzeW1ib2wKKysgICAgCisrICAgIC8vIGlmIChfX3NwYWNlKSBzcGFjZQorKyAgICAvLyBlbHNlIG5vbmUKKysKKysgICAgLy8gbm9uZSA9PSBuZXZlciBmaXJzdAorKyAgICAvLyBzcGFjZSBuZXZlciBmaXJzdCBvciBsYXN0CisrCisrICAgIC8vIEFueSBlbGVnYW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGFyZSB3ZWxjb21lLgorKyAgICBzd2l0Y2ggKF9fcG9zbikKKysgICAgICB7CisrICAgICAgY2FzZSAwOgorKyAgICAgIGNhc2UgMToKKysJLy8gMSBUaGUgc2lnbiBwcmVjZWRlcyB0aGUgdmFsdWUgYW5kIHN5bWJvbC4KKysJX19yZXQuZmllbGRbMF0gPSBzaWduOworKwlpZiAoX19zcGFjZSkKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24uCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24gYW5kIGVuZHMgd2l0aCBub25lLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgMjoKKysJLy8gMiBUaGUgc2lnbiBmb2xsb3dzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgorKwlpZiAoX19zcGFjZSkKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIGVpdGhlciBlbmRzIHdpdGggc2lnbi4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkgICAgX19yZXQuZmllbGRbM10gPSBzaWduOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gZW5kcyB3aXRoIHNpZ24gdGhlbiBub25lLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgMzoKKysJLy8gMyBUaGUgc2lnbiBpbW1lZGlhdGVseSBwcmVjZWRlcyB0aGUgc3ltYm9sLgorKwlpZiAoX19wcmVjZWRlcykKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHNpZ247CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsJICAgIAorKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CQkKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwlicmVhazsKKysgICAgICBjYXNlIDQ6CisrCS8vIDQgVGhlIHNpZ24gaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgc3ltYm9sLgorKwlpZiAoX19wcmVjZWRlcykKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc2lnbjsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IHNpZ247CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsyXSA9IHNpZ247CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWJyZWFrOworKyAgICAgIGRlZmF1bHQ6CisrCTsKKysgICAgICB9CisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCAKKysJCQkJCQkgICAgIGNvbnN0IGNoYXIqKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCB0cnVlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULCAKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX1RIT1VTQU5EU19TRVAsIAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIGlmICghX19ucG9zbikKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCAKKysJCQkJCQkJX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgLy8gX0ludGwgPT0gdHJ1ZQorKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfRlJBQ19ESUdJVFMsIAorKwkJCQkJCSAgICAgIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLCAKKysJCQkJCQkJX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwgCisrCQkJCQkJCV9fbnBvc24pOworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgCisrCQkJCQkJICAgICAgY29uc3QgY2hhciopCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPGNoYXIsIGZhbHNlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULCAKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX1RIT1VTQU5EU19TRVAsIAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgaWYgKCFfX25wb3NuKQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIoKSI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sCisrCQkJCQkJCV9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgIC8vIF9JbnRsID09IGZhbHNlCisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX25sX2xhbmdpbmZvX2woX19DVVJSRU5DWV9TWU1CT0wsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0ZSQUNfRElHSVRTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwgCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLCAKKysJCQkJCQkJX19ucG9zbik7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrICB0ZW1wbGF0ZTw+IAorKyAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+IAorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJCQkJCQkJY29uc3QgY2hhciopCisrI2Vsc2UKKysJCQkJCQkJY29uc3QgY2hhciogX19uYW1lKQorKyNlbmRpZgorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTx3Y2hhcl90LCB0cnVlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV0pOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisrI2Vsc2UKKysJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKysJICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcy4uLiBzaG91bGQgYmUgbW9uZXRhcnkKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfXworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVsc2UKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbmRpZgorKyNlbHNlCisrCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrI2VuZGlmCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCisrCSAgY29uc3QgY2hhciogX19jcG9zc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jbmVnc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jY3VyciA9IF9fbmxfbGFuZ2luZm9fbChfX0lOVF9DVVJSX1NZTUJPTCwgX19jbG9jKTsKKysKKysJICB3Y2hhcl90KiBfX3djc19wcyA9IDA7CisrCSAgd2NoYXJfdCogX193Y3NfbnMgPSAwOworKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICB0cnkKKysJICAgIHsKKysJICAgICAgbWJzdGF0ZV90IF9fc3RhdGU7CisrCSAgICAgIHNpemVfdCBfX2xlbiA9IHN0cmxlbihfX2Nwb3NzaWduKTsKKysJICAgICAgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfcHMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19wcywgJl9fY3Bvc3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX3djc19wczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICAgICAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKwkgICAgICAKKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jbmVnc2lnbik7CisrCSAgICAgIGlmICghX19ucG9zbikKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIigpIjsKKysJICAgICAgZWxzZSBpZiAoX19sZW4pCisrCQl7IAorKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICAgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKwkgICAgICAKKysJICAgICAgLy8gX0ludGwgPT0gdHJ1ZS4KKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jY3Vycik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIHdjaGFyX3QqIF9fd2NzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3MsICZfX2NjdXJyLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fd2NzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICAgICAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgICB9CisrCSAgY2F0Y2ggKC4uLikKKysJICAgIHsKKysJICAgICAgZGVsZXRlIF9NX2RhdGE7CisrCSAgICAgIF9NX2RhdGEgPSAwOworKwkgICAgICBkZWxldGUgX193Y3NfcHM7CisrCSAgICAgIGRlbGV0ZSBfX3djc19uczsJICAgICAgCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwkgICAgfSAKKysJICAKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX0ZSQUNfRElHSVRTLCAKKysJCQkJCQkgICAgICBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwgCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsIAorKwkJCQkJCQlfX25wb3NuKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+IAorKyAgdm9pZAorKyAgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkJCQkJCSAgICAgICBjb25zdCBjaGFyKikKKysjZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX25hbWUpCisrI2VuZGlmCisrICB7CisrICAgIGlmICghX01fZGF0YSkKKysgICAgICBfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTx3Y2hhcl90LCBmYWxzZT47CisrCisrICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrICAgICAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV0pOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisrI2Vsc2UKKysJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKysJICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcy4uLiBzaG91bGQgYmUgbW9uZXRhcnkKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfXworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVsc2UKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbmRpZgorKyNlbHNlCisrICAgICAgICAgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKyAgICAgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysKKysJICBjb25zdCBjaGFyKiBfX2Nwb3NzaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NuZWdzaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NjdXJyID0gX19ubF9sYW5naW5mb19sKF9fQ1VSUkVOQ1lfU1lNQk9MLCBfX2Nsb2MpOworKworKwkgIHdjaGFyX3QqIF9fd2NzX3BzID0gMDsKKysJICB3Y2hhcl90KiBfX3djc19ucyA9IDA7CisrCSAgY29uc3QgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgdHJ5CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgbWJzdGF0ZV90IF9fc3RhdGU7CisrICAgICAgICAgICAgICBzaXplX3QgX19sZW47CisrICAgICAgICAgICAgICBfX2xlbiA9IHN0cmxlbihfX2Nwb3NzaWduKTsKKysgICAgICAgICAgICAgIGlmIChfX2xlbikKKysgICAgICAgICAgICAgICAgeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfcHMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19wcywgJl9fY3Bvc3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX3djc19wczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysJICAgICAgCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOworKwkgICAgICBpZiAoIV9fbnBvc24pCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7CisrCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorKwkJeyAKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX25zID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfbnMsICZfX2NuZWdzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX193Y3NfbnM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgICAgIC8vIF9JbnRsID09IHRydWUuCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICAgIH0KKysgICAgICAgICAgY2F0Y2ggKC4uLikKKysJICAgIHsKKysJICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgICAgICAgICAgICBfTV9kYXRhID0gMDsKKysJICAgICAgZGVsZXRlIF9fd2NzX3BzOworKwkgICAgICBkZWxldGUgX193Y3NfbnM7CSAgICAgIAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKyAgICAgICAgICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisrCSAgICB9CisrCisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0ZSQUNfRElHSVRTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwgCisrCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLCAKKysJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ucG9zbik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PiAKKysgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZQorKyAgICAgICAgICAmJiB3Y3NjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgTCIoKSIpICE9IDApCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fY3Vycl9zeW1ib2w7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCisrICAgICAgICAgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsKKysgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxNjAgQEAKKysvLyBzdGQ6Om51bXB1bmN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi4zLjEuMiAgbnVtcHVuY3QgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIHRlbXBsYXRlPD4gCisrICAgIHZvaWQKKysgICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19udW1wdW5jdF9jYWNoZTxjaGFyPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOworKworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0gX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV07CisrCisrCSAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19udW1fYmFzZTo6X1NfaWVuZDsgKytfX2opCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0gX19udW1fYmFzZTo6X1NfYXRvbXNfaW5bX19qXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woREVDSU1BTF9QT0lOVCwgCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChUSE9VU0FORFNfU0VQLCAKKysJCQkJCQkJX19jbG9jKSk7CisrCisrCSAgLy8gQ2hlY2sgZm9yIE5VTEwsIHdoaWNoIGltcGxpZXMgbm8gZ3JvdXBpbmcuCisrCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gJ1wwJykKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCX0KKysKKysgICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFjdCB0aGlzIGluZm8gZnJvbSBwb3NpeCBsb2NhbGVzLgorKyAgICAgIC8vIF9NX3RydWVuYW1lID0gX19ubF9sYW5naW5mb19sKFlFU1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZSA9ICJ0cnVlIjsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZV9zaXplID0gNDsKKysgICAgICAvLyBfTV9mYWxzZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woTk9TVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lID0gImZhbHNlIjsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWVfc2l6ZSA9IDU7CisrICAgIH0KKysgCisrICB0ZW1wbGF0ZTw+IAorKyAgICBudW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKyAgIAorKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PiAKKysgICAgdm9pZAorKyAgICBudW1wdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX251bXB1bmN0X2NhY2hlPHdjaGFyX3Q+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7CisrCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19udW1fYmFzZTo6X1Nfb2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19vdXRbX19pXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fbnVtX2Jhc2U6Ol9TX2F0b21zX291dFtfX2ldKTsKKysKKysJICBmb3IgKHNpemVfdCBfX2ogPSAwOyBfX2ogPCBfX251bV9iYXNlOjpfU19pZW5kOyArK19faikKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX2luW19fal0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90PihfX251bV9iYXNlOjpfU19hdG9tc19pbltfX2pdKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICAvLyBOQjogSW4gdGhlIEdOVSBtb2RlbCB3Y2hhcl90IGlzIGFsd2F5cyAzMiBiaXQgd2lkZS4KKysJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrCisrCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gTCdcMCcpCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKEdST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwl9CisrCisrICAgICAgLy8gTkI6IFRoZXJlIGlzIG5vIHdheSB0byBleHRhY3QgdGhpcyBpbmZvIGZyb20gcG9zaXggbG9jYWxlcy4KKysgICAgICAvLyBfTV90cnVlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChZRVNTVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWUgPSBMInRydWUiOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lX3NpemUgPSA0OworKyAgICAgIC8vIF9NX2ZhbHNlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChOT1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWUgPSBMImZhbHNlIjsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWVfc2l6ZSA9IDU7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIG51bXB1bmN0PHdjaGFyX3Q+Ojp+bnVtcHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrICNlbmRpZgorK30KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw0MDYgQEAKKysvLyBzdGQ6OnRpbWVfZ2V0LCBzdGQ6OnRpbWVfcHV0IGltcGxlbWVudGF0aW9uLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4xLjIgLSB0aW1lX2dldCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4zLjIgLSB0aW1lX3B1dCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorKyNlbmRpZgorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8Y2hhcj46OgorKyAgICBfTV9wdXQoY2hhciogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IGNoYXIqIF9fZm9ybWF0LCAKKysJICAgY29uc3QgdG0qIF9fdG0pIGNvbnN0CisrICAgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fc3RyZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKysJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrI2Vsc2UKKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0cmZ0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisrICAgICAgaWYgKF9fbGVuID09IDApCisrCV9fc1swXSA9ICdcMCc7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPGNoYXI+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOworKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSAiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSAiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2FtID0gIkFNIjsKKysJICBfTV9kYXRhLT5fTV9wbSA9ICJQTSI7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gIiI7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gIlN1bmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9ICJNb25kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSAiVHVlc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9ICJXZWRuZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSAiVGh1cnNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSAiRnJpZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gIlNhdHVyZGF5IjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gIlN1biI7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSAiTW9uIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9ICJUdWUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gIldlZCI7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSAiVGh1IjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9ICJGcmkiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gIlNhdCI7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gIkphbnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSAiRmVicnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSAiTWFyY2giOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSAiQXByaWwiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSAiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gIkp1bmUiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSAiSnVseSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9ICJBdWd1c3QiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSAiU2VwdGVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gIk9jdG9iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSAiTm92ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSAiRGVjZW1iZXIiOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9ICJKYW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gIkZlYiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSAiTWFyIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9ICJBcHIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gIk1heSI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSAiSnVuIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9ICJKdWwiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gIkF1ZyI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSAiU2VwIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9ICJPY3QiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gIk5vdiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSAiRGVjIjsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7IAorKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKERfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGltZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKERfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX0RfVF9GTVQsCisrCQkJCQkJCSAgICAgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbSA9IF9fbmxfbGFuZ2luZm9fbChBTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG0gPSBfX25sX2xhbmdpbmZvX2woUE1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChUX0ZNVF9BTVBNLCBfX2Nsb2MpOworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX01fZGF0YS0+X01fZGF5MSA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gX19ubF9sYW5naW5mb19sKERBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBfX25sX2xhbmdpbmZvX2woREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gX19ubF9sYW5naW5mb19sKERBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBfX25sX2xhbmdpbmZvX2woREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NyA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNywgX19jbG9jKTsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gX19ubF9sYW5naW5mb19sKEFCREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzcsIF9fY2xvYyk7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gX19ubF9sYW5naW5mb19sKE1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBfX25sX2xhbmdpbmZvX2woTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IF9fbmxfbGFuZ2luZm9fbChNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gX19ubF9sYW5naW5mb19sKE1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBfX25sX2xhbmdpbmZvX2woTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IF9fbmxfbGFuZ2luZm9fbChNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gX19ubF9sYW5naW5mb19sKE1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSBfX25sX2xhbmdpbmZvX2woTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9IF9fbmxfbGFuZ2luZm9fbChNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gX19ubF9sYW5naW5mb19sKE1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gX19ubF9sYW5naW5mb19sKE1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gX19ubF9sYW5naW5mb19sKE1PTl8xMiwgX19jbG9jKTsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMTIsIF9fY2xvYyk7CisrCX0KKysgICAgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjoKKysgICAgX01fcHV0KHdjaGFyX3QqIF9fcywgc2l6ZV90IF9fbWF4bGVuLCBjb25zdCB3Y2hhcl90KiBfX2Zvcm1hdCwgCisrCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorKwkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysjZWxzZQorKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gd2NzZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKysgICAgICBpZiAoX19sZW4gPT0gMCkKKysJX19zWzBdID0gTCdcMCc7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4gCisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPHdjaGFyX3Q+OworKworKyN3YXJuaW5nIHdpZGUgdGltZSBzdHVmZgorKy8vICAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOworKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gTCIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gTCIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2FtID0gTCJBTSI7CisrCSAgX01fZGF0YS0+X01fcG0gPSBMIlBNIjsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBMIiI7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gTCJTdW5kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBMIk1vbmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IEwiVHVlc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9IEwiV2VkbmVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gTCJUaHVyc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IEwiRnJpZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gTCJTYXR1cmRheSI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IEwiU3VuIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IEwiTW9uIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IEwiVHVlIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IEwiV2VkIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IEwiVGh1IjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IEwiRnJpIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IEwiU2F0IjsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBMIkphbnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBMIkZlYnJ1YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gTCJNYXJjaCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IEwiQXByaWwiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBMIk1heSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IEwiSnVuZSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IEwiSnVseSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IEwiQXVndXN0IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gTCJTZXB0ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBMIk9jdG9iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBMIk5vdmVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gTCJEZWNlbWJlciI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gTCJKYW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gTCJGZWIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gTCJNYXIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gTCJBcHIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gTCJNYXkiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gTCJKdW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gTCJKdWwiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gTCJBdWciOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gTCJTZXAiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gTCJPY3QiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gTCJOb3YiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gTCJEZWMiOworKwl9CisrI2lmIDAKKysgICAgICBlbHNlCisrCXsKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOyAKKysKKysJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCAqX193OyB9IF9fdTsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGltZV9lcmFfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX0RfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW0gPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dQTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG0gPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dUX0ZNVF9BTVBNLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IF9fdS5fX3c7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NyA9IF9fdS5fX3c7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IF9fdS5fX3c7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gX191Ll9fdzsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IF9fdS5fX3c7CisrCX0KKysjZW5kaWYgLy8gMAorKyAgICB9CisrI2VuZGlmCisrfQorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNjggQEAKKysvLyBzdGQ6OnRpbWVfZ2V0LCBzdGQ6OnRpbWVfcHV0IGltcGxlbWVudGF0aW9uLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4xLjIgLSB0aW1lX2dldCBmdW5jdGlvbnMKKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzKSAKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksIAorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChfU19nZXRfY19uYW1lKCkpCisrICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NhY2hlX3R5cGUqIF9fY2FjaGUsIHNpemVfdCBfX3JlZnMpIAorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoX19jYWNoZSksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwgCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCSAgICAgc2l6ZV90IF9fcmVmcykgCisrICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLCAKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX19zKQorKyAgICB7IAorKyAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX190bXA7CisrICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsgCisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6fl9fdGltZXB1bmN0KCkKKysgICAgeyAKKysgICAgICBpZiAoX01fbmFtZV90aW1lcHVuY3QgIT0gX1NfZ2V0X2NfbmFtZSgpKQorKwlkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7IAorKyAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfdGltZXB1bmN0KTsgCisrICAgIH0KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWd1cmUJMjAwNy0wOC0wMyAyMDoyOToyMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTU3NjksNyArNTc2OSw3IEBACisgICBlbmFibGV2YWw9IiRlbmFibGVfY2xvY2FsZSIKKyAKKyAgICAgICBjYXNlICIkZW5hYmxldmFsIiBpbgorLSAgICAgICBnZW5lcmljfGdudXxpZWVlXzEwMDMuMS0yMDAxfHllc3xub3xhdXRvKSA7OworKyAgICAgICBnZW5lcmljfGdudXxpZWVlXzEwMDMuMS0yMDAxfHVjbGliY3x5ZXN8bm98YXV0bykgOzsKKyAgICAgICAgKikgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogVW5rbm93biBhcmd1bWVudCB0byBlbmFibGUvZGlzYWJsZSBjbG9jYWxlIiA+JjUKKyBlY2hvICIkYXNfbWU6IGVycm9yOiBVbmtub3duIGFyZ3VtZW50IHRvIGVuYWJsZS9kaXNhYmxlIGNsb2NhbGUiID4mMjt9CisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CitAQCAtNTgwMiw2ICs1ODAyLDkgQEAKKyAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCisgICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgorICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgorKyAgICAgIGxpbnV4LXVjbGliYyopCisrICAgICAgICBlbmFibGVfY2xvY2FsZV9mbGFnPXVjbGliYworKwk7OworICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQorICAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz1nbnUKKyAgICAgICAgIDs7CitAQCAtNjE5MCw2ICs2MTkzLDc2IEBACisgICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5jYworICAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvYysrbG9jYWxlX2ludGVybmFsLmgKKyAgICAgICA7OworKyAgICB1Y2xpYmMpCisrICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdWNsaWJjIiA+JjUKKytlY2hvICIke0VDSE9fVH11Y2xpYmMiID4mNgorKworKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKKysgICAgICAjIGxhbmd1YWdlcy4KKysgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAorKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKKysKKysgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgorKyAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXNnZm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgbXNnZm10OyBhY193b3JkPSQyCisrZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCtzZXR9IiA9IHNldDsgdGhlbgorKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9IiRjaGVja19tc2dmbXQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgICBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0ieWVzIgorKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorK2RvbmUKKysKKysgIHRlc3QgLXogIiRhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCIgJiYgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9Im5vIgorK2ZpCisrZmkKKytjaGVja19tc2dmbXQ9JGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10CisraWYgdGVzdCAtbiAiJGNoZWNrX21zZ2ZtdCI7IHRoZW4KKysgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRjaGVja19tc2dmbXQiID4mNQorK2VjaG8gIiR7RUNIT19UfSRjaGVja19tc2dmbXQiID4mNgorK2Vsc2UKKysgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2CisrZmkKKysKKysgICAgICBpZiB0ZXN0IHgiJGNoZWNrX21zZ2ZtdCIgPSB4InllcyIgJiYgdGVzdCB4IiRlbmFibGVfbmxzIiA9IHgieWVzIjsgdGhlbgorKyAgICAgICAgVVNFX05MUz15ZXMKKysgICAgICBmaQorKyAgICAgICMgRXhwb3J0IHRoZSBidWlsZCBvYmplY3RzLgorKyAgICAgIGZvciBsaW5nIGluICRBTExfTElOR1VBUzsgZG8gXAorKyAgICAgICAgZ2xpYmN4eF9NT0ZJTEVTPSIkZ2xpYmN4eF9NT0ZJTEVTICRsaW5nLm1vIjsgXAorKyAgICAgICAgZ2xpYmN4eF9QT0ZJTEVTPSIkZ2xpYmN4eF9QT0ZJTEVTICRsaW5nLnBvIjsgXAorKyAgICAgIGRvbmUKKysKKysKKysKKysgICAgICBDTE9DQUxFX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysgICAgICBDQ09ERUNWVF9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKysgICAgICBDQ09MTEFURV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysgICAgICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKyAgICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysgICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrICAgICAgOzsKKyAgIGVzYWMKKyAKKyAgICMgVGhpcyBpcyB3aGVyZSB0aGUgdGVzdHN1aXRlIGxvb2tzIGZvciBsb2NhbGUgY2F0YWxvZ3MsIHVzaW5nIHRoZQorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaCBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaAkyMDA1LTA4LTE3IDA0OjI4OjQ0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaAkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTEwMSw3ICsxMDEsOSBAQAorIHVzaW5nIHN0ZDo6d21lbWNweTsKKyB1c2luZyBzdGQ6OndtZW1tb3ZlOworIHVzaW5nIHN0ZDo6d21lbXNldDsKKysjaWYgX0dMSUJDWFhfSEFWRV9XQ1NGVElNRQorIHVzaW5nIHN0ZDo6d2NzZnRpbWU7CisrI2VuZGlmCisgCisgI2lmIF9HTElCQ1hYX1VTRV9DOTkKKyB1c2luZyBzdGQ6Ondjc3RvbGQ7CitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL3N0ZF9jd2NoYXIuaCBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvc3RkX2N3Y2hhci5oCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvc3RkX2N3Y2hhci5oCTIwMDYtMTItMDcgMTA6MzM6NTEuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL3N0ZF9jd2NoYXIuaAkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTE4Miw3ICsxODIsOSBAQAorICAgdXNpbmcgOjp3Y3Njb2xsOworICAgdXNpbmcgOjp3Y3NjcHk7CisgICB1c2luZyA6Ondjc2NzcG47CisrI2lmIF9HTElCQ1hYX0hBVkVfV0NTRlRJTUUKKyAgIHVzaW5nIDo6d2NzZnRpbWU7CisrI2VuZGlmCisgICB1c2luZyA6Ondjc2xlbjsKKyAgIHVzaW5nIDo6d2NzbmNhdDsKKyAgIHVzaW5nIDo6d2NzbmNtcDsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMTMwLXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi40LzEzMC11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4OGRjMjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi40LzEzMC11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCkBAIC0wLDAgKzEsMjIzIEBACitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwkyMDA3LTA4LTAzIDIwOjMwOjUzLjAwMDAwMDAwMCArMDIwMAorQEAgLTM5LDIwICszOSw2IEBACisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX3N0cnRvbF9sKFMsIEUsIEIsIEwpICAgICAgc3RydG9sKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvdWxfbChTLCBFLCBCLCBMKSAgICAgc3RydG91bCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b2xsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvbGwoKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG91bGxfbChTLCBFLCBCLCBMKSAgICBzdHJ0b3VsbCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKy0jZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCistI2RlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKy0jd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworLSNkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKy0jZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKy0jZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkIAorIHsKKyAgIHRlbXBsYXRlPD4KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgJMjAwNy0wOC0wMyAyMDozMDo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC02OCw2ICs2OCw3IEBACisgeworICAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworIH0KKysjZGVmaW5lIF9fdXNlbG9jYWxlIHVzZWxvY2FsZQorICNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCTIwMDctMDgtMDMgMjA6MzA6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtNjAsNCArNjAsNDkgQEAKKyBleHRlcm4gIkMiIF9fdHlwZW9mKHdjdHlwZV9sKSBfX3djdHlwZV9sOworICNlbmRpZiAKKyAKKysjIGRlZmluZSBfX25sX2xhbmdpbmZvX2wgbmxfbGFuZ2luZm9fbAorKyMgZGVmaW5lIF9fc3RyY29sbF9sIHN0cmNvbGxfbAorKyMgZGVmaW5lIF9fc3RyZnRpbWVfbCBzdHJmdGltZV9sCisrIyBkZWZpbmUgX19zdHJ0b2RfbCBzdHJ0b2RfbAorKyMgZGVmaW5lIF9fc3RydG9mX2wgc3RydG9mX2wKKysjIGRlZmluZSBfX3N0cnRvbGRfbCBzdHJ0b2xkX2wKKysjIGRlZmluZSBfX3N0cnhmcm1fbCBzdHJ4ZnJtX2wKKysjIGRlZmluZSBfX25ld2xvY2FsZSBuZXdsb2NhbGUKKysjIGRlZmluZSBfX2ZyZWVsb2NhbGUgZnJlZWxvY2FsZQorKyMgZGVmaW5lIF9fZHVwbG9jYWxlIGR1cGxvY2FsZQorKyMgZGVmaW5lIF9fdXNlbG9jYWxlIHVzZWxvY2FsZQorKworKyMgaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysjICBkZWZpbmUgX19pc3djdHlwZV9sIGlzd2N0eXBlX2wKKysjICBkZWZpbmUgX190b3dsb3dlcl9sIHRvd2xvd2VyX2wKKysjICBkZWZpbmUgX190b3d1cHBlcl9sIHRvd3VwcGVyX2wKKysjICBkZWZpbmUgX193Y3Njb2xsX2wgd2NzY29sbF9sCisrIyAgZGVmaW5lIF9fd2NzZnRpbWVfbCB3Y3NmdGltZV9sCisrIyAgZGVmaW5lIF9fd2NzeGZybV9sIHdjc3hmcm1fbAorKyMgIGRlZmluZSBfX3djdHlwZV9sIHdjdHlwZV9sCisrIyBlbmRpZgorKworKyNlbHNlCisrIyBkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjIGRlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorKyMgZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCisrIyBkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCisrIyB3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CisrIyBkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKysjIGRlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCisrIyBkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorKy8vIyBkZWZpbmUgX191c2Vsb2NhbGUgPworKy8vCisrIyBpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyMgIGRlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCisrIyAgZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgICB0b3dsb3dlcigoQykpCisrIyAgZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgICB0b3d1cHBlcigoQykpCisrIyAgZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCisrLy8jICBkZWZpbmUgX193Y3NmdGltZV9sKFMsIE0sIEYsIFQsIEwpICB3Y3NmdGltZSgoUyksIChNKSwgKEYpLCAoVCkpIAorKyMgIGRlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCisrIyAgZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgICB3Y3R5cGUoKFMpKQorKyMgZW5kaWYKKysKKyAjZW5kaWYgLy8gR0xJQkMgMi4zIGFuZCBsYXRlcgorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtMzYsMTMgKzM2LDYgQEAKKyAjaW5jbHVkZSA8bG9jYWxlPgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKKy0jZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKy0jZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCistI2RlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIC8vIFRoZXNlIGFyZSBiYXNpY2FsbHkgZXh0ZW5zaW9ucyB0byBjaGFyX3RyYWl0cywgYW5kIHBlcmhhcHMgc2hvdWxkCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtMzgsMTMgKzM4LDYgQEAKKyAjdW5kZWYgX0xJQkMKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgIHdjdHlwZSgoUykpCistI2RlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICB0b3d1cHBlcigoQykpCistI2RlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICB0b3dsb3dlcigoQykpCistI2RlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICBpc3djdHlwZSgoQyksIChNKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtMzksMTMgKzM5LDEwIEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IGdldHRleHQgc3R1ZmYKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKy1leHRlcm4gIkMiIGNoYXIgKl9fZGNnZXR0ZXh0KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCistCQkJICAgICBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KTsKKyAjdW5kZWYgZ2V0dGV4dAorLSNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgX19kY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgZGNnZXR0ZXh0KE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKyAjZWxzZQorLSN1bmRlZiBnZXR0ZXh0CisgI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSAobXNnaWQpCisgI2VuZGlmCisgCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgJMjAwNy0wOC0wMyAyMDozMDo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zNiwxNSArMzYsMTEgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKy1leHRlcm4gIkMiIGNoYXIgKl9fdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKKy1leHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKy0JCQkJICBjb25zdCBjaGFyICpkaXJuYW1lKTsKKy0jZWxzZQorLSN1bmRlZiBfX3RleHRkb21haW4KKy0jdW5kZWYgX19iaW5kdGV4dGRvbWFpbgorLSNkZWZpbmUgX190ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKKy0jZGVmaW5lIF9fYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyN1bmRlZiB0ZXh0ZG9tYWluCisrI3VuZGVmIGJpbmR0ZXh0ZG9tYWluCisrI2RlZmluZSB0ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIGJpbmR0ZXh0ZG9tYWluKEQsUCkgICAgICgodm9pZCkwKQorICNlbmRpZgorIAorICAgLy8gTm9uLXZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KK0BAIC03MCw3ICs2Niw3IEBACisgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsIAorIAkJCSAgIGNvbnN0IGNoYXIqIF9fZGlyKSBjb25zdAorICAgICB7IAorLSAgICAgIF9fYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKysgICAgICBiaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworICAgICAgIHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOyAKKyAgICAgfQorIAorQEAgLTkwLDcgKzg2LDcgQEAKKyAgICAgeyAKKyAgICAgICAvLyBObyBlcnJvciBjaGVja2luZyBpcyBkb25lLCBhc3N1bWUgdGhlIGNhdGFsb2cgZXhpc3RzIGFuZCBjYW4KKyAgICAgICAvLyBiZSB1c2VkLgorLSAgICAgIF9fdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisrICAgICAgdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC00MywxMCArNDMsNiBAQAorICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBDb25zdHJ1Y3QgYW5kIHJldHVybiB2YWxpZCBwYXR0ZXJuIGNvbnNpc3Rpbmcgb2Ygc29tZSBjb21iaW5hdGlvbiBvZjoKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMwOjUzLjAwMDAwMDAwMCArMDIwMAorQEAgLTQxLDkgKzQxLDYgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKyAjZW5kaWYKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKy0jZW5kaWYKKyAKKyBuYW1lc3BhY2Ugc3RkCisgeworZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMwOjIxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtNDAsOSArNDAsNiBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKKyB7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi40LzE0MC11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMTQwLXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3N2JiNTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi40LzE0MC11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaApAQCAtMCwwICsxLDUwIEBACitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6NTMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzE6MjQuMDAwMDAwMDAwICswMjAwCitAQCAtNDAxLDcgKzQwMSw3IEBACisgIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworLSMgZWxzZQorKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKyAjIGVuZGlmCitAQCAtNTU2LDcgKzU1Niw3IEBACisgIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworLSMgZWxzZQorKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKyAjIGVuZGlmCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6NTMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MJMjAwNy0wOC0wMyAyMDozMToyNC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMjcsMTIgKzEyNywyNSBAQAorIAl7CisgCSAgLy8gTmFtZWQgbG9jYWxlLgorIAkgIC8vIE5COiBJbiB0aGUgR05VIG1vZGVsIHdjaGFyX3QgaXMgYWx3YXlzIDMyIGJpdCB3aWRlLgorKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBudW1lcmljCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorIAkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisgCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworIAorIAkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKyAKKyAJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKKyAJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi40LzE1MC11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMTUwLXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNGY0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi40LzE1MC11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaApAQCAtMCwwICsxLDM1NCBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwkyMDA3LTA4LTAzIDIwOjMwOjUzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MJMjAwNy0wOC0wMyAyMDozMTo1NC4wMDAwMDAwMDAgKzAyMDAKK0BAIC00NiwxNiArNDYsMTMgQEAKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBmbG9hdCYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIAorIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorICAgICB7CistICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCistCXsKKy0JICBjaGFyKiBfX3Nhbml0eTsKKy0JICBlcnJubyA9IDA7CistCSAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKy0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCistCSAgICBfX3YgPSBfX2Y7CistCSAgZWxzZQorLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CistCX0KKysgICAgICBjaGFyKiBfX3Nhbml0eTsKKysgICAgICBlcnJubyA9IDA7CisrICAgICAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19mOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPD4KK0BAIC02MywxNiArNjAsMTMgQEAKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCAKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fZDsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19kOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPD4KK0BAIC04MCwxNiArNzQsMTMgQEAKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBsb25nIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisgCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICAgIHsKKy0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKy0JeworLQkgIGNoYXIqIF9fc2FuaXR5OworLQkgIGVycm5vID0gMDsKKy0JICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CistICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorLQkgICAgX192ID0gX19sZDsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCV9fdiA9IF9fbGQ7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdm9pZAorQEAgLTExMCw3ICsxMDEsNyBAQAorICAgdm9pZAorICAgbG9jYWxlOjpmYWNldDo6X1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICB7CistICAgIGlmIChfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCisrICAgIGlmIChfX2Nsb2MgJiYgX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorICAgICAgIF9fZnJlZWxvY2FsZShfX2Nsb2MpOyAKKyAgIH0KKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgJMjAwNy0wOC0wMyAyMDozMDo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgJMjAwNy0wOC0wMyAyMDozMTo1NC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zOSwyMSArMzksMjMgQEAKKyAjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisgCisgI2luY2x1ZGUgPGNzdHJpbmc+ICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzdHJsZW4KKy0jaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnNucHJpbnRmIG9yIHN0ZDo6c3ByaW50ZgorKyNpbmNsdWRlIDxjc3RkaW8+ICAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6dnNucHJpbnRmIG9yIHN0ZDo6dnNwcmludGYKKyAjaW5jbHVkZSA8Y2xvY2FsZT4KKyAjaW5jbHVkZSA8bGFuZ2luZm8uaD4JCS8vIEZvciBjb2RlY3Z0CisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IHRoaXMKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9JQ09OVgorICNpbmNsdWRlIDxpY29udi5oPgkJLy8gRm9yIGNvZGVjdnQgdXNpbmcgaWNvbnYsIGljb252X3QKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKy0jaW5jbHVkZSA8bGliaW50bC5oPiAJCS8vIEZvciBtZXNzYWdlcworKyNpZmRlZiBIQVZFX0xJQklOVExfSAorKyNpbmNsdWRlIDxsaWJpbnRsLmg+CQkvLyBGb3IgbWVzc2FnZXMKKyAjZW5kaWYKKysjaW5jbHVkZSA8Y3N0ZGFyZz4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyB3aGF0IGlzIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSBmb3IKKysvLyBwc206IHVzZWQgaW4gb3MvZ251LWxpbnV4L2N0eXBlX25vbmlubGluZS5oCisgI2VuZGlmCisgI2RlZmluZSBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgMQorIAorQEAgLTYyLDcgKzY0LDcgQEAKKyAjZW5kaWYKKyAvLyAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDYKKyAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDAKKy0gCisrCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyBuYW1lc3BhY2UgX19nbnVfY3h4CisgeworQEAgLTc5LDIyICs4MSwyNCBAQAorICAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKyAjZW5kaWYKKyAKKy0gIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIF9UdiB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKy0gIC8vIHN0cmluZy4gIElmIHNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKy0gIC8vIHRoZSB1bnNhZmUgc3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisrICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBkb3VibGUgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCisrICAvLyBzdHJpbmcuICBJZiB2c25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworKyAgLy8gdGhlIHVuc2FmZSB2c3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisgICAvLyBiZSBhdm9pZGVkLgorLSAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgorLSAgICBpbnQKKy0gICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwgCistCQkgICAgIGNvbnN0IGludCBfX3NpemUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKKy0JCSAgICAgY29uc3QgY2hhciogX19mbXQsCistI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCistCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fcHJlYykKKysgICAgaW5saW5lIGludAorKyAgICBfX2NvbnZlcnRfZnJvbV92KGNvbnN0IF9fY19sb2NhbGUmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKwkJCQkJX19jbG9jIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKKysjZW5kaWYKKysJCSAgICAgLAorKwkJICAgICBjaGFyKiBfX291dCwKKysJCSAgICAgY29uc3QgaW50IF9fc2l6ZSwKKysJCSAgICAgY29uc3QgY2hhciogX19mbXQsIC4uLikKKyAgICAgeworKyAgICAgIHZhX2xpc3QgX19hcmdzOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworICAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fY2xvYyk7CisgI2Vsc2UKKy0JCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMpCistICAgIHsKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICAgICAgIGNoYXIqIF9fb2xkID0gc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKyAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fb2xkKSArIDFdOworQEAgLTEwMyw3ICsxMDcsOSBAQAorICMgZW5kaWYKKyAjZW5kaWYKKyAKKy0gICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7CisrICAgICAgdmFfc3RhcnQoX19hcmdzLCBfX2ZtdCk7CisrICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjp2c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fYXJncyk7CisrICAgICAgdmFfZW5kKF9fYXJncyk7CisgCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisgICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7CitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzA6NTMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzE6NTQuMDAwMDAwMDAwICswMjAwCitAQCAtMzMsOSArMzMsMTQgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCisgbmFtZXNwYWNlIHN0ZAorQEAgLTEzOCwyMCArMTQzLDM0IEBACisgICBjdHlwZTx3Y2hhcl90Pjo6CisgICBkb19pcyhtYXNrIF9fbSwgd2NoYXJfdCBfX2MpIGNvbnN0CisgICB7IAorLSAgICAvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorLSAgICAvLyBsaWJyYXJ5IGZvciBibGFuay4KKysgICAgLy8gVGhlIGNhc2Ugb2YgX19tID09IGN0eXBlX2Jhc2U6OnNwYWNlIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQsCisrICAgIC8vIGR1ZSB0byBpdHMgdXNlIGluIG1hbnkgaXN0cmVhbSBmdW5jdGlvbnMuICBUaGVyZWZvcmUgd2UgZGVhbCB3aXRoCisrICAgIC8vIGl0IGZpcnN0LCBleHBsb2l0aW5nIHRoZSBrbm93bGVkZ2UgdGhhdCBvbiBHTlUgc3lzdGVtcyBfTV9iaXRbNV0KKysgICAgLy8gaXMgdGhlIG1hc2sgY29ycmVzcG9uZGluZyB0byBjdHlwZV9iYXNlOjpzcGFjZS4gIE5COiBhbiBlbmNvZGluZworKyAgICAvLyBjaGFuZ2Ugd291bGQgbm90IGFmZmVjdCBjb3JyZWN0bmVzcyEKKyAgICAgYm9vbCBfX3JldCA9IGZhbHNlOworLSAgICBjb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOyAKKy0gICAgZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorLSAgICAgIGlmIChfX20gJiBfTV9iaXRbX19iaXRjdXJdCistCSAgJiYgX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCistCXsKKy0JICBfX3JldCA9IHRydWU7CistCSAgYnJlYWs7CistCX0KKysgICAgaWYgKF9fbSA9PSBfTV9iaXRbNV0pCisrICAgICAgX19yZXQgPSBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1s1XSwgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICBlbHNlCisrICAgICAgeworKwkvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKwkvLyBsaWJyYXJ5IGZvciBibGFuay4KKysJY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKysJZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorKwkgIGlmIChfX20gJiBfTV9iaXRbX19iaXRjdXJdKQorKwkgICAgeworKwkgICAgICBpZiAoX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCisrCQl7CisrCQkgIF9fcmV0ID0gdHJ1ZTsKKysJCSAgYnJlYWs7CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKF9fbSA9PSBfTV9iaXRbX19iaXRjdXJdKQorKwkJYnJlYWs7CisrCSAgICB9CisrICAgICAgfQorICAgICByZXR1cm4gX19yZXQ7ICAgIAorICAgfQorLSAgCisrCisgICBjb25zdCB3Y2hhcl90KiAKKyAgIGN0eXBlPHdjaGFyX3Q+OjoKKyAgIGRvX2lzKGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAkyMDA3LTA4LTAzIDIwOjMwOjUzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCTIwMDctMDgtMDMgMjA6MzE6NTQuMDAwMDAwMDAwICswMjAwCitAQCAtNDcsMTggKzQ3LDIxIEBACisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhzaXplX3QgX19yZWZzKQorICAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19nZXRfY19sb2NhbGUoKSksIAorLSAgICAgX01fbmFtZV9tZXNzYWdlcyhfU19nZXRfY19uYW1lKCkpCisrICAgICAgIF9NX25hbWVfbWVzc2FnZXMoX1NfZ2V0X2NfbmFtZSgpKQorICAgICAgeyB9CisgCisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLCAKKyAJCQkJc2l6ZV90IF9fcmVmcykgCistICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYykpLAorLSAgICAgX01fbmFtZV9tZXNzYWdlcyhfX3MpCisrICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKE5VTEwpLCBfTV9uYW1lX21lc3NhZ2VzKE5VTEwpCisgICAgICB7CistICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworLSAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RkOjpzdHJsZW4oX19zKSArIDE7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbX19sZW5dOworKyAgICAgICBzdGQ6Om1lbWNweShfX3RtcCwgX19zLCBfX2xlbik7CisgICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysKKysgICAgICAgLy8gTGFzdCB0byBhdm9pZCBsZWFraW5nIG1lbW9yeSBpZiBuZXcgdGhyb3dzLgorKyAgICAgICBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CisgICAgICB9CisgCisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzE6MjQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzE6NTQuMDAwMDAwMDAwICswMjAwCitAQCAtMzMsOSArMzMsMTQgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitAQCAtMjA2LDcgKzIxMSw3IEBACisgCSAgfQorIAlicmVhazsKKyAgICAgICBkZWZhdWx0OgorLQk7CisrCV9fcmV0ID0gcGF0dGVybigpOworICAgICAgIH0KKyAgICAgcmV0dXJuIF9fcmV0OworICAgfQorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwkyMDA3LTA4LTAzIDIwOjMxOjI0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCTIwMDctMDgtMDMgMjA6MzE6NTQuMDAwMDAwMDAwICswMjAwCitAQCAtMzMsOSArMzMsMTQgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitkaWZmIC1kdXJOIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCTIwMDctMDgtMDMgMjA6MzA6MjEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAkyMDA3LTA4LTAzIDIwOjMxOjU0LjAwMDAwMDAwMCArMDIwMAorQEAgLTM3LDI1ICszNywzMyBAQAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzKSAKKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksIAorLSAgICBfTV9uYW1lX3RpbWVwdW5jdChfU19nZXRfY19uYW1lKCkpCisrICAgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorICAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jYWNoZV90eXBlKiBfX2NhY2hlLCBzaXplX3QgX19yZWZzKSAKKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKF9fY2FjaGUpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksIAorLSAgICBfTV9uYW1lX3RpbWVwdW5jdChfU19nZXRfY19uYW1lKCkpCisrICAgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorICAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKyAJCQkJICAgICBzaXplX3QgX19yZWZzKSAKKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksIAorLSAgICBfTV9uYW1lX3RpbWVwdW5jdChfX3MpCisrICAgICAgX01fbmFtZV90aW1lcHVuY3QoTlVMTCkKKyAgICAgeyAKKy0gICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKy0gICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdGQ6OnN0cmxlbihfX3MpICsgMTsKKysgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsKKysgICAgICBzdGQ6Om1lbWNweShfX3RtcCwgX19zLCBfX2xlbik7CisgICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKKy0gICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOyAKKysKKysgICAgICB0cnkKKysJeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOyB9CisrICAgICAgY2F0Y2goLi4uKQorKwl7CisrCSAgZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OworKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwl9CisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMTYwLWxpYnN0ZGMrKy1waWMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi40LzE2MC1saWJzdGRjKystcGljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNDRkNGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi40LzE2MC1saWJzdGRjKystcGljLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbSBnY2MtNC4yLjEvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuYW0JMjAwNi0wNy0yOCAwNjo1NzozNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQkyMDA3LTA4LTAzIDIwOjMyOjI3LjAwMDAwMDAwMCArMDIwMAorQEAgLTI1Nyw2ICsyNTcsMTIgQEAKKyAJICAkKE9QVF9MREZMQUdTKSAkKFNFQ1RJT05fTERGTEFHUykgJChBTV9DWFhGTEFHUykgJChMVExERkxBR1MpIC1vICRACisgCisgCisraW5zdGFsbC1leGVjLWxvY2FsOgorK2lmZXEgKCQoZW5hYmxlX3NoYXJlZCkseWVzKQorKwkkKEFSKSBjcnUgbGlic3RkYysrX3BpYy5hIC5saWJzLyoubyAkKHRvcF9idWlsZGRpcikvbGlic3VwYysrLyoubworKwkkKElOU1RBTExfREFUQSkgbGlic3RkYysrX3BpYy5hICQoREVTVERJUikkKHRvb2xleGVjbGliZGlyKQorK2VuZGlmCisrCisgIyBBZGRlZCBiaXRzIHRvIGJ1aWxkIGRlYnVnIGxpYnJhcnkuCisgaWYgR0xJQkNYWF9CVUlMRF9ERUJVRworIGFsbC1sb2NhbDogYnVpbGRfZGVidWcKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbiBnY2MtNC4yLjEvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuaW4JMjAwNi0xMC0xNiAyMTowODoyMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgkyMDA3LTA4LTAzIDIwOjMyOjI3LjAwMDAwMDAwMCArMDIwMAorQEAgLTY1Nyw3ICs2NTcsNyBAQAorIAorIGluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1kYXRhLWxvY2FsCisgCistaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLXRvb2xleGVjbGliTFRMSUJSQVJJRVMKKytpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUyBpbnN0YWxsLWV4ZWMtbG9jYWwKKyAKKyBpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorIAorQEAgLTY5MCw2ICs2OTAsNyBAQAorIAlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCisgCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAorIAlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kYXRhLWxvY2FsIGluc3RhbGwtZXhlYyBcCisrCWluc3RhbGwtZXhlYy1sb2NhbCBcCisgCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKyAJaW5zdGFsbC1zdHJpcCBpbnN0YWxsLXRvb2xleGVjbGliTFRMSUJSQVJJRVMgaW5zdGFsbGNoZWNrIFwKKyAJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorQEAgLTc5OSw2ICs4MDAsMTMgQEAKKyBpbnN0YWxsX2RlYnVnOgorIAkoY2QgJHtkZWJ1Z2Rpcn0gJiYgJChNQUtFKSBcCisgCXRvb2xleGVjbGliZGlyPSQoZ2xpYmN4eF90b29sZXhlY2xpYmRpcikvZGVidWcgaW5zdGFsbCkKKysKKytpbnN0YWxsLWV4ZWMtbG9jYWw6CisraWZlcSAoJChlbmFibGVfc2hhcmVkKSx5ZXMpCisrCSQoQVIpIGNydSBsaWJzdGRjKytfcGljLmEgKi5vICQodG9wX2J1aWxkZGlyKS9saWJzdXBjKysvKi5vCisrCSQoSU5TVEFMTF9EQVRBKSBsaWJzdGRjKytfcGljLmEgJChERVNURElSKSQodG9vbGV4ZWNsaWJkaXIpCisrZW5kaWYKKysKKyAjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorICMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorIC5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMTcwLW1pc3NpbmctZXhlY2luZm9faC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMTcwLW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjY3ODk5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuNC8xNzAtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvYm9laG0tZ2MvaW5jbHVkZS9nYy5oIGdjYy00LjIuMS9ib2VobS1nYy9pbmNsdWRlL2djLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9ib2VobS1nYy9pbmNsdWRlL2djLmgJMjAwNi0wOS0xOCAyMDo0NTowOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCTIwMDctMDgtMDMgMjA6MzM6MDAuMDAwMDAwMDAwICswMjAwCitAQCAtNTAyLDcgKzUwMiw3IEBACisgI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykKKyAjIGluY2x1ZGUgPGZlYXR1cmVzLmg+CisgIyBpZiAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEgfHwgX19HTElCQ19fID4gMikgXAorLSAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pCisrICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykgJiYgIWRlZmluZWQoX19VQ0xJQkNfXykKKyAjICAgaWZuZGVmIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgICBkZWZpbmUgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQorICMgICBlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuNC8xODAtYzk5LXNucHJpbnRmLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuNC8xODAtYzk5LXNucHJpbnRmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYjBjMzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi40LzE4MC1jOTktc25wcmludGYucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9zdGRfY3N0ZGlvLmggZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL3N0ZF9jc3RkaW8uaAorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL3N0ZF9jc3RkaW8uaAkyMDA2LTEyLTA3IDEwOjMzOjUxLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9zdGRfY3N0ZGlvLmgJMjAwNy0wOC0wMyAyMDozMzoyNC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNDQsNyArMTQ0LDcgQEAKKyAKKyBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisgCistI2lmIF9HTElCQ1hYX1VTRV9DOTkKKysjaWYgX0dMSUJDWFhfVVNFX0M5OSB8fCBkZWZpbmVkKF9fVUNMSUJDX18pCisgCisgI3VuZGVmIHNucHJpbnRmCisgI3VuZGVmIHZmc2NhbmYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMTkwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMTkwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTZkNzFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuNC8xOTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorLS0tIGdjYy00LjIuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWd1cmUJMjAwNy0wOC0wMyAyMDozMDoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQkyMDA3LTA4LTAzIDIwOjMzOjU2LjAwMDAwMDAwMCArMDIwMAorQEAgLTc1MTQsNiArNzUxNCw5IEBACisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaW5jbHVkZSA8Y29tcGxleC5oPgorKyNpZmRlZiBfX1VDTElCQ19fCisrI2Vycm9yIHVnbHkgaGFjayB0byBtYWtlIHN1cmUgY29uZmlndXJlIHRlc3QgZmFpbHMgaGVyZSBmb3IgY3Jvc3MgdW50aWwgdUNsaWJjIHN1cHBvcnRzIHRoZSBjb21wbGV4IGZ1bmNzCisrI2VuZGlmCisgaW50CisgbWFpbiAoKQorIHsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMjAwLWluZGV4X21hY3JvLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuNC8yMDAtaW5kZXhfbWFjcm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU1NmI1ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMjAwLWluZGV4X21hY3JvLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUgZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUJMjAwNi0xMC0xNyAxMzo1NjoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUJMjAwNy0wOC0wMyAyMDozNDoyMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC01OCw2ICs1OCw5IEBACisgI2luY2x1ZGUgPGJpdHMvYWxsb2NhdG9yLmg+CisgI2luY2x1ZGUgPGV4dC9oYXNoX2Z1bi5oPgorIAorKy8qIGNvcGUgdy8gaW5kZXggZGVmaW5lZCBhcyBtYWNybywgU3VTdjMgcHJvcG9zYWwgKi8KKysjdW5kZWYgaW5kZXgKKysKKyAjIGlmZGVmIF9fR0MKKyAjICAgZGVmaW5lIF9fR0NfQ09OU1QgY29uc3QKKyAjIGVsc2UKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmggZ2NjLTQuMi4xL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgJMjAwNi0xMC0xNyAxMzo1NjoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgJMjAwNy0wOC0wMyAyMDozNDoyMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC01NCw2ICs1NCw5IEBACisgI2luY2x1ZGUgPGV4dC9tZW1vcnk+IC8vIEZvciB1bmluaXRpYWxpemVkX2NvcHlfbgorICNpbmNsdWRlIDxleHQvbnVtZXJpYz4gLy8gRm9yIHBvd2VyCisgCisrLyogY29wZSB3LyBpbmRleCBkZWZpbmVkIGFzIG1hY3JvLCBTdVN2MyBwcm9wb3NhbCAqLworKyN1bmRlZiBpbmRleAorKworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisgCisgICB1c2luZyBzdGQ6OnNpemVfdDsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMjEwLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuNC8yMTAtbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZlODcwNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMjEwLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlibXVkZmxhcC9tZi1ob29rczIuYyBnY2MtNC4yLjEvbGlibXVkZmxhcC9tZi1ob29rczIuYworLS0tIGdjYy00LjIuMS5vcmlnL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMJMjAwNS0wOS0yMyAyMzo1ODozOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlibXVkZmxhcC9tZi1ob29rczIuYwkyMDA3LTA4LTAzIDIwOjM1OjA5LjAwMDAwMDAwMCArMDIwMAorQEAgLTQyNyw3ICs0MjcsNyBAQAorIHsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIG4sIF9fTUZfQ0hFQ0tfV1JJVEUsICJiemVybyByZWdpb24iKTsKKy0gIGJ6ZXJvIChzLCBuKTsKKysgIG1lbXNldCAocywgMCwgbik7CisgfQorIAorIAorQEAgLTQzNyw3ICs0MzcsNyBAQAorICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQoc3JjLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY29weSBzcmMiKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChkZXN0LCBuLCBfX01GX0NIRUNLX1dSSVRFLCAiYmNvcHkgZGVzdCIpOworLSAgYmNvcHkgKHNyYywgZGVzdCwgbik7CisrICBtZW1tb3ZlIChkZXN0LCBzcmMsIG4pOworIH0KKyAKKyAKK0BAIC00NDcsNyArNDQ3LDcgQEAKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMxLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY21wIDFzdCBhcmciKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzMiwgbiwgX19NRl9DSEVDS19SRUFELCAiYmNtcCAybmQgYXJnIik7CistICByZXR1cm4gYmNtcCAoczEsIHMyLCBuKTsKKysgIHJldHVybiBuID09IDAgPyAwIDogbWVtY21wIChzMSwgczIsIG4pOworIH0KKyAKKyAKK0BAIC00NTYsNyArNDU2LDcgQEAKKyAgIHNpemVfdCBuID0gc3RybGVuIChzKTsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIENMQU1QQUREKG4sIDEpLCBfX01GX0NIRUNLX1JFQUQsICJpbmRleCByZWdpb24iKTsKKy0gIHJldHVybiBpbmRleCAocywgYyk7CisrICByZXR1cm4gc3RyY2hyIChzLCBjKTsKKyB9CisgCisgCitAQCAtNDY1LDcgKzQ2NSw3IEBACisgICBzaXplX3QgbiA9IHN0cmxlbiAocyk7CisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzLCBDTEFNUEFERChuLCAxKSwgX19NRl9DSEVDS19SRUFELCAicmluZGV4IHJlZ2lvbiIpOworLSAgcmV0dXJuIHJpbmRleCAocywgYyk7CisrICByZXR1cm4gc3RycmNociAocywgYyk7CisgfQorIAorIC8qIFhYWDogIHN0cGNweSwgbWVtY2NweSAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuNC8yMjAtbGlic3RkYysrLW5hbWVzcGFjZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMjIwLWxpYnN0ZGMrKy1uYW1lc3BhY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA5ZThmMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMjIwLWxpYnN0ZGMrKy1uYW1lc3BhY2UucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCistLS0gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAkyMDA3LTA4LTAzIDIwOjMxOjU0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCTIwMDctMDgtMDMgMjA6MzU6NDAuMDAwMDAwMDAwICswMjAwCitAQCAtMzIsNyArMzIsOCBAQAorIC8vCisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKy0KKytuYW1lc3BhY2Ugc3RkCisreworICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworICNlbmRpZgorQEAgLTExNSwzICsxMTYsNCBAQAorIAkgICB0aGlzLT5fU19jcmVhdGVfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfbWVzc2FnZXMsIF9fcyk7IAorIAkgfQorICAgICAgfQorK30KK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGdjYy00LjIuMS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgJMjAwNy0wOC0wMyAyMDozMTo1NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCTIwMDctMDgtMDMgMjA6MzU6NDAuMDAwMDAwMDAwICswMjAwCitAQCAtMzMsNyArMzMsOCBAQAorIC8vCisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKy0KKytuYW1lc3BhY2Ugc3RkCisreworICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzKSAKKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksIAorQEAgLTc0LDMgKzc1LDQgQEAKKyAgICAgICBkZWxldGUgX01fZGF0YTsgCisgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV90aW1lcHVuY3QpOyAKKyAgICAgfQorK30KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMjMwLWxpYmJhY2tlbmRfZGVwX2djb3YtaW92LmgucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi40LzIzMC1saWJiYWNrZW5kX2RlcF9nY292LWlvdi5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNzU0YmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi40LzIzMC1saWJiYWNrZW5kX2RlcF9nY292LWlvdi5oLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvZ2NjL01ha2VmaWxlLmluIGdjYy00LjIuMS9nY2MvTWFrZWZpbGUuaW4KKy0tLSBnY2MtNC4yLjEub3JpZy9nY2MvTWFrZWZpbGUuaW4JMjAwNy0wNS0zMSAxNzozNzozOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvZ2NjL01ha2VmaWxlLmluCTIwMDctMDgtMDMgMjA6MzY6MTQuMDAwMDAwMDAwICswMjAwCitAQCAtMjY2MCw3ICsyNjYwLDcgQEAKKyAjIEZJWE1FOiB3cml0aW5nIHByb3BlciBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgaXMgYSAqTE9UKiBvZiB3b3JrLgorIGxpYmJhY2tlbmQubyA6ICQoT0JKUy1jb21tb246Lm89LmMpICQob3V0X2ZpbGUpIFwKKyAgIGluc24tY29uZmlnLmggaW5zbi1mbGFncy5oIGluc24tY29kZXMuaCBpbnNuLWNvbnN0YW50cy5oIFwKKy0gIGluc24tYXR0ci5oICAkKERBVEVTVEFNUCkgJChCQVNFVkVSKSAkKERFVlBIQVNFKQorKyAgaW5zbi1hdHRyLmggICQoREFURVNUQU1QKSAkKEJBU0VWRVIpICQoREVWUEhBU0UpIGdjb3YtaW92LmgKKyAJJChDQykgJChBTExfQ0ZMQUdTKSAkKEFMTF9DUFBGTEFHUykgXAorIAkgIC1EVEFSR0VUX05BTUU9XCIkKHRhcmdldF9ub25jYW5vbmljYWwpXCIgXAorIAkgIC1ETE9DQUxFRElSPVwiJChsb2NhbGVkaXIpXCIgXApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuNC8yNDAtYXJtLWJpZ2VuZGlhbi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMjQwLWFybS1iaWdlbmRpYW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFiZWNjZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMjQwLWFybS1iaWdlbmRpYW4ucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCBnY2MtNC4yLjEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKKy0tLSBnY2MtNC4yLjEub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDA2LTAyLTE3IDAwOjI5OjEwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjIuMS9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDA3LTA4LTAzIDIwOjM2OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTI4LDE5ICsyOCwzMyBAQAorICN1bmRlZiAgVEFSR0VUX1ZFUlNJT04KKyAjZGVmaW5lIFRBUkdFVF9WRVJTSU9OICBmcHV0cyAoIiAoQVJNIEdOVS9MaW51eCB3aXRoIEVMRikiLCBzdGRlcnIpOworIAorKy8qCisrICogJ2NvbmZpZy5nY2MnIGRlZmluZXMgVEFSR0VUX0JJR19FTkRJQU5fREVGQVVMVCBhcyAxIGZvciBhcm0qYi0qCisrICogKGJpZyBlbmRpYW4pIGNvbmZpZ3VyYXRpb25zLgorKyAqLworKyNpZiBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUCisrI2RlZmluZSBUQVJHRVRfRU5ESUFOX0RFRkFVTFQgTUFTS19CSUdfRU5ECisrI2RlZmluZSBUQVJHRVRfRU5ESUFOX09QVElPTiAibWJpZy1lbmRpYW4iCisrI2RlZmluZSBUQVJHRVRfTElOS0VSX0VNVUxBVElPTiAiYXJtZWxmYl9saW51eCIKKysjZWxzZQorKyNkZWZpbmUgVEFSR0VUX0VORElBTl9ERUZBVUxUIDAKKysjZGVmaW5lIFRBUkdFVF9FTkRJQU5fT1BUSU9OICJtbGl0dGxlLWVuZGlhbiIKKysjZGVmaW5lIFRBUkdFVF9MSU5LRVJfRU1VTEFUSU9OICJhcm1lbGZfbGludXgiCisrI2VuZGlmCisrCisgI3VuZGVmICBUQVJHRVRfREVGQVVMVF9GTE9BVF9BQkkKKyAjZGVmaW5lIFRBUkdFVF9ERUZBVUxUX0ZMT0FUX0FCSSBBUk1fRkxPQVRfQUJJX0hBUkQKKyAKKyAjdW5kZWYgIFRBUkdFVF9ERUZBVUxUCistI2RlZmluZSBUQVJHRVRfREVGQVVMVCAoMCkKKysjZGVmaW5lIFRBUkdFVF9ERUZBVUxUIChUQVJHRVRfRU5ESUFOX0RFRkFVTFQpCisgCisgI2RlZmluZSBTVUJUQVJHRVRfQ1BVX0RFRkFVTFQgVEFSR0VUX0NQVV9hcm02CisgCistI2RlZmluZSBTVUJUQVJHRVRfRVhUUkFfTElOS19TUEVDICIgLW0gYXJtZWxmX2xpbnV4IC1wIgorKyNkZWZpbmUgU1VCVEFSR0VUX0VYVFJBX0xJTktfU1BFQyAiIC1tICIgVEFSR0VUX0xJTktFUl9FTVVMQVRJT04gIiAtcCIKKyAKKyAjdW5kZWYgIE1VTFRJTElCX0RFRkFVTFRTCisgI2RlZmluZSBNVUxUSUxJQl9ERUZBVUxUUyBcCistCXsgIm1hcm0iLCAibWxpdHRsZS1lbmRpYW4iLCAibWhhcmQtZmxvYXQiLCAibW5vLXRodW1iLWludGVyd29yayIgfQorKwl7ICJtYXJtIiwgVEFSR0VUX0VORElBTl9PUFRJT04sICJtaGFyZC1mbG9hdCIsICJtbm8tdGh1bWItaW50ZXJ3b3JrIiB9CisgCisgLyogTm93IHdlIGRlZmluZSB0aGUgc3RyaW5ncyB1c2VkIHRvIGJ1aWxkIHRoZSBzcGVjIGZpbGUuICAqLworICN1bmRlZiAgTElCX1NQRUMKK0BAIC02MSw3ICs3NSw3IEBACisgICAgJXtyZHluYW1pYzotZXhwb3J0LWR5bmFtaWN9IFwKKyAgICAleyFkeW5hbWljLWxpbmtlcjotZHluYW1pYy1saW5rZXIgIiBMSU5VWF9EWU5BTUlDX0xJTktFUiAifSBcCisgICAgLVggXAorLSAgICV7bWJpZy1lbmRpYW46LUVCfSIgXAorKyAgICV7bWJpZy1lbmRpYW46LUVCfSAle21saXR0bGUtZW5kaWFuOi1FTH0iIFwKKyAgICBTVUJUQVJHRVRfRVhUUkFfTElOS19TUEVDCisgCisgI3VuZGVmICBMSU5LX1NQRUMKK2RpZmYgLWR1ck4gZ2NjLTQuMi4xLm9yaWcvZ2NjL2NvbmZpZy5nY2MgZ2NjLTQuMi4xL2djYy9jb25maWcuZ2NjCistLS0gZ2NjLTQuMi4xLm9yaWcvZ2NjL2NvbmZpZy5nY2MJMjAwNy0wOC0wMyAyMDoyOTo1Mi4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjEvZ2NjL2NvbmZpZy5nY2MJMjAwNy0wOC0wMyAyMDozNjo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC03MDUsNiArNzA1LDExIEBACisgCXRtX2ZpbGU9ImRieGVsZi5oIGVsZm9zLmggbGludXguaCBhcm0vZWxmLmggYXJtL2xpbnV4LWdhcy5oIGFybS9saW51eC1lbGYuaCIKKyAJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSB0LWxpbnV4IGFybS90LWFybSIKKyAJY2FzZSAke3RhcmdldH0gaW4KKysJYXJtKmItKikKKysJCXRtX2RlZmluZXM9IiR7dG1fZGVmaW5lc30gVEFSR0VUX0JJR19FTkRJQU5fREVGQVVMVD0xIgorKwkJOzsKKysJZXNhYworKwljYXNlICR7dGFyZ2V0fSBpbgorIAlhcm0qLSotbGludXgtKmVhYmkpCisgCSAgICB0bV9maWxlPSIkdG1fZmlsZSBhcm0vYnBhYmkuaCBhcm0vbGludXgtZWFiaS5oIgorIAkgICAgdG1ha2VfZmlsZT0iJHRtYWtlX2ZpbGUgYXJtL3QtYXJtLWVsZiBhcm0vdC1icGFiaSBhcm0vdC1saW51eC1lYWJpIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuNC8yNDEtYXJtLWJpZ2VuZGlhbjIucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi40LzI0MS1hcm0tYmlnZW5kaWFuMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjljMTMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuNC8yNDEtYXJtLWJpZ2VuZGlhbjIucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorR2lsbGVzIENoYW50ZXBlcmRyaXggPGdpbGxlcy5jaGFudGVwZXJkcml4QHhlbm9tYWkub3JnPiB3cm90ZToKKworSSB0cmllZCB0byB1c2UgY3Jvc3N0b29sLW5nIHRvIGdlbmVyYXRlIGEgdG9vbGNoYWluIGZvciBMaW51eCBvbiBiaWcKK2VuZGlhbiBhcm0gd2l0aCByZWNlbnQgdmVyc2lvbnMgb2YgZ2NjLCBnbGliYywgZXRjLi4uIGJ1dCBoYWQgYSBmZXcKK3Byb2JsZW1zLgorCitJdCBhcHBlYXJzIHRoYXQgdGhlIGdjYyBwYXRjaCAoZm9yIGdjYyA0LjIueCkKK2ZvciBiaWctZW5kaWFuIGFybSAoMjQwLWFybS1iaWdlbmRpYW4ucGF0Y2gpIGxhY2tzIHRoZSBjaGFuZ2UgYXR0YWNoZWQKK3RvIHRoaXMgbWFpbCBhcyAyNDAtYXJtLWJpZ2VuZGlhbjIucGF0Y2guCisKKy0tLSBnY2MtNC4yLjQvZ2NjL2NvbmZpZy9hcm0vYnBhYmkuaH4JMjAwNy0wOS0wMSAxNzoyODozMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjQvZ2NjL2NvbmZpZy9hcm0vYnBhYmkuaAkyMDA5LTAxLTA1IDE5OjE5OjEwLjAwMDAwMDAwMCArMDEwMAorQEAgLTMyLDkgKzMyLDE5IEBACisgI3VuZGVmIEZQVVRZUEVfREVGQVVMVAorICNkZWZpbmUgRlBVVFlQRV9ERUZBVUxUIEZQVVRZUEVfVkZQCisgCisrLyoKKysgKiAnY29uZmlnLmdjYycgZGVmaW5lcyBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUIGFzIDEgZm9yIGFybSpiLSoKKysgKiAoYmlnIGVuZGlhbikgY29uZmlndXJhdGlvbnMuCisrICovCisrI2lmIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQKKysjZGVmaW5lIFRBUkdFVF9FTkRJQU5fREVGQVVMVCBNQVNLX0JJR19FTkQKKysjZWxzZQorKyNkZWZpbmUgVEFSR0VUX0VORElBTl9ERUZBVUxUIDAKKysjZW5kaWYKKysKKyAvKiBFQUJJIHRhcmdldHMgc2hvdWxkIGVuYWJsZSBpbnRlcndvcmtpbmcgYnkgZGVmYXVsdC4gICovCisgI3VuZGVmIFRBUkdFVF9ERUZBVUxUCistI2RlZmluZSBUQVJHRVRfREVGQVVMVCBNQVNLX0lOVEVSV09SSworKyNkZWZpbmUgVEFSR0VUX0RFRkFVTFQgKE1BU0tfSU5URVJXT1JLIHwgVEFSR0VUX0VORElBTl9ERUZBVUxUKQorIAorIC8qIFRoZSBBUk0gQlBBQkkgZnVuY3Rpb25zIHJldHVybiBhIGJvb2xlYW47IHRoZXkgdXNlIG5vIHNwZWNpYWwKKyAgICBjYWxsaW5nIGNvbnZlbnRpb24uICAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuNC8yNTAtc29mdGZsb2F0LWZpeC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMjUwLXNvZnRmbG9hdC1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUxNzg1NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMjUwLXNvZnRmbG9hdC1maXgucGF0Y2gKQEAgLTAsMCArMSw1OCBAQAorVGhpcyBwYXRjaCAoQykgMjAwNyBZYW5uIEUuIE1PUklOCitMaWNlbnNlZCB1bmRlciBHUEwgdjIuCisKK0ZpcnN0IGh1bmsgb2YgdGhpcyBwYXRjaCBzb2x2ZXMgY29tcGlsaW5nIHVDbGliYzoKKworbWFrZVsxXTogRW50ZXJpbmcgZGlyZWN0b3J5IGAvaG9tZS95bW9yaW4veC10b29scy9idWlsZC9hcm1lYi11bmtub3duLWxpbnV4LXVjbGliYy9nY2MtNC4xLjEtdUNsaWJjLTAuOS4yOC4xL2J1aWxkLWxpYmMnCisgIExEIGxpYnVDbGliYy0wLjkuMjkuc28KK2xpYmMvbGliY19zby5hKGRpZmZ0aW1lLm9zKTogSW4gZnVuY3Rpb24gYGRpZmZ0aW1lJzoKK2RpZmZ0aW1lLmM6KC50ZXh0KzB4OCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fZmxvYXRzaWRmJworZGlmZnRpbWUuYzooLnRleHQrMHgyYyk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fc3ViZGYzJworbGliYy9saWJjX3NvLmEoX2ZwbWF4dG9zdHIub3MpOiBJbiBmdW5jdGlvbiBgX2ZwbWF4dG9zdHInOgorX2ZwbWF4dG9zdHIuYzooLnRleHQrMHhkNCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fbmVkZjInCitfZnBtYXh0b3N0ci5jOigudGV4dCsweGY4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19lcWRmMicKK19mcG1heHRvc3RyLmM6KC50ZXh0KzB4MTE0KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19kaXZkZjMnCitfZnBtYXh0b3N0ci5jOigudGV4dCsweDEyMCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fbHRkZjInCitfZnBtYXh0b3N0ci5jOigudGV4dCsweDFjNCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fbXVsZGYzJworX2ZwbWF4dG9zdHIuYzooLnRleHQrMHgzODgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX2dlZGYyJworX2ZwbWF4dG9zdHIuYzooLnRleHQrMHg0MzApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX2FkZGRmMycKK2xpYmMvbGliY19zby5hKF9fcHNmc19kb19udW1lcmljLm9zKTogSW4gZnVuY3Rpb24gYF9fcHNmc19kb19udW1lcmljJzoKK19fcHNmc19kb19udW1lcmljLmM6KC50ZXh0KzB4NTIwKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX190cnVuY2Rmc2YyJworbGliYy9saWJjX3NvLmEoc3RydG9mLm9zKTogSW4gZnVuY3Rpb24gYHN0cnRvZic6CitzdHJ0b2YuYzooLnRleHQrMHgxYyk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fZXh0ZW5kc2ZkZjInCisvaG9tZS95bW9yaW4veC10b29scy9idWlsZC9hcm1lYi11bmtub3duLWxpbnV4LXVjbGliYy9nY2MtNC4xLjEtdUNsaWJjLTAuOS4yOC4xL2NjX2NvcmVfcHJlZml4L2xpYi9nY2MvYXJtLWxpbnV4LXVjbGliYy80LjEuMS9saWJnY2MuYShfZml4dW5zZGZzaS5vKToKK0luIGZ1bmN0aW9uIGBfX2ZpeHVuc2Rmc2knOgorbGliZ2NjMi5jOigudGV4dCsweDM0KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19maXhkZnNpJworbWFrZVsyXTogKioqIFtsaWIvbGliYy5zb10gRXJyb3IgMQorbWFrZVsxXTogKioqIFtsaWIvbGliYy5zby4wXSBFcnJvciAyCittYWtlWzFdOiBMZWF2aW5nIGRpcmVjdG9yeSBgL2hvbWUveW1vcmluL3gtdG9vbHMvYnVpbGQvYXJtZWItdW5rbm93bi1saW51eC11Y2xpYmMvZ2NjLTQuMS4xLXVDbGliYy0wLjkuMjguMS9idWlsZC1saWJjJworbWFrZTogKioqIFsvaG9tZS95bW9yaW4veC10b29scy9idWlsZC9hcm1lYi11bmtub3duLWxpbnV4LXVjbGliYy9nY2MtNC4xLjEtdUNsaWJjLTAuOS4yOC4xL2J1aWxkLWxpYmMvbGliL2xpYmMuYV0KK0Vycm9yIDIKKworVGhlIHNlY29uZCBodW5rIGZpeGVzIGJ1aWxkaW5nIGZpbmFsIGdjYyBiZWNhdXNlIHNvZnQtZmxvYXQgaW1wbGllcyB1c2luZyAtbGZsb2F0ICh3aGljaCB3ZSBkb24ndCBoYXZlKS4KKworCitkaWZmIC1kdXIgZ2NjLTQuMi4wLm9yaWcvZ2NjL2NvbmZpZy5nY2MgZ2NjLTQuMi4wL2djYy9jb25maWcuZ2NjCistLS0gZ2NjLTQuMi4wLm9yaWcvZ2NjL2NvbmZpZy5nY2MJMjAwNy0wNy0xNSAxMToyNDoxOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjAvZ2NjL2NvbmZpZy5nY2MJMjAwNy0wNy0xNSAxMToyNjowMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC03MjEsNyArNzIxLDcgQEAKKyAJICAgIGRlZmF1bHRfdXNlX2N4YV9hdGV4aXQ9eWVzCisgCSAgICA7OworIAkqKQorLQkgICAgdG1ha2VfZmlsZT0iJHRtYWtlX2ZpbGUgYXJtL3QtbGludXgiCisrCSAgICB0bWFrZV9maWxlPSIkdG1ha2VfZmlsZSBhcm0vdC1saW51eCBhcm0vdC1hcm0tZWxmIgorIAkgICAgOzsKKyAJZXNhYworIAl0bV9maWxlPSIkdG1fZmlsZSBhcm0vYW91dC5oIGFybS9hcm0uaCIKK2RpZmYgLWR1ciBnY2MtNC4yLjAub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCBnY2MtNC4yLjAvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKKy0tLSBnY2MtNC4yLjAub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDA3LTA3LTE1IDExOjI0OjE4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMC9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDA3LTA3LTE1IDExOjI2OjAyLjAwMDAwMDAwMCArMDIwMAorQEAgLTYzLDcgKzYzLDcgQEAKKyAgICAle3NoYXJlZDotbGN9IFwKKyAgICAleyFzaGFyZWQ6JXtwcm9maWxlOi1sY19wfSV7IXByb2ZpbGU6LWxjfX0iCisgCistI2RlZmluZSBMSUJHQ0NfU1BFQyAiJXttc29mdC1mbG9hdDotbGZsb2F0fSAle21mbG9hdC1hYmk9c29mdCo6LWxmbG9hdH0gLWxnY2MiCisrI2RlZmluZSBMSUJHQ0NfU1BFQyAiLWxnY2MiCisgCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuNC8yNjAtZmxhdHRlbi1zd2l0Y2gtc3RtdC0wMC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMjYwLWZsYXR0ZW4tc3dpdGNoLXN0bXQtMDAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM0MGM1NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMjYwLWZsYXR0ZW4tc3dpdGNoLXN0bXQtMDAucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjEub3JpZy9nY2Mvc3RtdC5jIGdjYy00LjIuMS9nY2Mvc3RtdC5jCistLS0gZ2NjLTQuMi4xLm9yaWcvZ2NjL3N0bXQuYwkyMDA3LTA3LTE5IDA1OjI1OjMyLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMS9nY2Mvc3RtdC5jCTIwMDctMDgtMDMgMjA6Mzc6MTkuMDAwMDAwMDAwICswMjAwCitAQCAtMjUxMiw3ICsyNTEyLDExIEBACisgCSAgdXNlX2Nvc3RfdGFibGUKKyAJICAgID0gKFRSRUVfQ09ERSAob3JpZ190eXBlKSAhPSBFTlVNRVJBTF9UWVBFCisgCSAgICAgICAmJiBlc3RpbWF0ZV9jYXNlX2Nvc3RzIChjYXNlX2xpc3QpKTsKKy0JICBiYWxhbmNlX2Nhc2Vfbm9kZXMgKCZjYXNlX2xpc3QsIE5VTEwpOworKwkgIC8qIFdoZW4gb3B0aW1pemluZyBmb3Igc2l6ZSwgd2Ugd2FudCBhIHN0cmFpZ2h0IGxpc3QgdG8gYXZvaWQKKysJICAgICBqdW1wcyBhcyBtdWNoIGFzIHBvc3NpYmxlLiBUaGlzIGJhc2ljYWxseSBjcmVhdGVzIGFuIGlmLWVsc2UKKysJICAgICBjaGFpbi4gICovCisrCSAgaWYgKCFvcHRpbWl6ZV9zaXplKQorKwkgICAgYmFsYW5jZV9jYXNlX25vZGVzICgmY2FzZV9saXN0LCBOVUxMKTsKKyAJICBlbWl0X2Nhc2Vfbm9kZXMgKGluZGV4LCBjYXNlX2xpc3QsIGRlZmF1bHRfbGFiZWwsIGluZGV4X3R5cGUpOworIAkgIGVtaXRfanVtcCAoZGVmYXVsdF9sYWJlbCk7CisgCX0KK0BAIC0zMDcwLDYgKzMwNzQsNyBAQAorIAkgICAgeworIAkgICAgICBpZiAoIW5vZGVfaGFzX2xvd19ib3VuZCAobm9kZSwgaW5kZXhfdHlwZSkpCisgCQl7CisrCQkgIGlmICghb3B0aW1pemVfc2l6ZSkgLyogZG9uJ3QgamwgdG8gdGhlIC5kZWZhdWx0X2xhYmVsLiAqLworIAkJICBlbWl0X2NtcF9hbmRfanVtcF9pbnNucyAoaW5kZXgsCisgCQkJCQkgICBjb252ZXJ0X21vZGVzCisgCQkJCQkgICAobW9kZSwgaW1vZGUsCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi40LzI3MC1zb2Z0LWZsb2F0LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuNC8yNzAtc29mdC1mbG9hdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mjg3YmZhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuNC8yNzAtc29mdC1mbG9hdC5wYXRjaApAQCAtMCwwICsxLDIxIEBACitkaWZmIC11TnByIGdjYy00LjIuMV9vcmlnL2djYy9jb25maWcvcnM2MDAwL2Rhcndpbi1sZG91YmxlLmMgZ2NjLTQuMi4xL2djYy9jb25maWcvcnM2MDAwL2Rhcndpbi1sZG91YmxlLmMKKy0tLSBnY2MtNC4yLjFfb3JpZy9nY2MvY29uZmlnL3JzNjAwMC9kYXJ3aW4tbGRvdWJsZS5jCTIwMDctMDMtMDUgMTE6NTQ6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgZ2NjLTQuMi4xL2djYy9jb25maWcvcnM2MDAwL2Rhcndpbi1sZG91YmxlLmMJMjAwOC0wMS0zMSAxNzo1MToyNC4wMDAwMDAwMDAgLTA1MDAKK0BAIC03MCw2ICs3MCw4IEBAIFNvZnR3YXJlIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwKKyAgICBidXQgR0NDIGN1cnJlbnRseSBnZW5lcmF0ZXMgcG9vciBjb2RlIHdoZW4gYSB1bmlvbiBpcyB1c2VkIHRvIHR1cm4KKyAgICBhIGxvbmcgZG91YmxlIGludG8gYSBwYWlyIG9mIGRvdWJsZXMuICAqLworIAorKyNpZiBkZWZpbmVkIChfU09GVF9GTE9BVCkgJiYgZGVmaW5lZCAoX19MT05HX0RPVUJMRV8xMjhfXykKKysKKyBsb25nIGRvdWJsZSBfX2djY19xYWRkIChkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpOworIGxvbmcgZG91YmxlIF9fZ2NjX3FzdWIgKGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSk7CisgbG9uZyBkb3VibGUgX19nY2NfcW11bCAoZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKTsKK0BAIC0yMTksOCArMjIxLDYgQEAgX19nY2NfcWRpdiAoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYworICAgcmV0dXJuIHoubGR2YWw7CisgfQorIAorLSNpZiBkZWZpbmVkIChfU09GVF9GTE9BVCkgJiYgZGVmaW5lZCAoX19MT05HX0RPVUJMRV8xMjhfXykKKy0KKyBsb25nIGRvdWJsZSBfX2djY19xbmVnIChkb3VibGUsIGRvdWJsZSk7CisgaW50IF9fZ2NjX3FlcSAoZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKTsKKyBpbnQgX19nY2NfcW5lIChkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuNC8yODAtZWFiaV9maXhlcy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMjgwLWVhYmlfZml4ZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RjZTYwOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMjgwLWVhYmlfZml4ZXMucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorZGlmZiAtZHVyTiBnY2MtNC4yLjMub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggZ2NjLTQuMi4zL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorLS0tIGdjYy00LjIuMy5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAkyMDA3LTA5LTAxIDE3OjI4OjMwLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjIuMy9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgJMjAwOC0wNS0yNSAyMzo0NzozNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC00Nyw3ICs0Nyw4IEBACisgI2RlZmluZSBTVUJUQVJHRVRfQ1BVX0RFRkFVTFQgVEFSR0VUX0NQVV9hcm0xMHRkbWkKKyAKKyAjdW5kZWYgU1VCVEFSR0VUX0VYVFJBX0xJTktfU1BFQworLSNkZWZpbmUgU1VCVEFSR0VUX0VYVFJBX0xJTktfU1BFQyAiIC1tIGFybWVsZl9saW51eF9lYWJpIgorKyNkZWZpbmUgU1VCVEFSR0VUX0VYVFJBX0xJTktfU1BFQwlcCisrCSIgJXttbGl0dGxlLWVuZGlhbjotbSBhcm1lbGZfbGludXhfZWFiaX0gJXttYmlnLWVuZGlhbjotbSBhcm1lbGZiX2xpbnV4X2VhYml9IgorIAorIC8qIFVzZSBsZC1saW51eC5zby4zIHNvIHRoYXQgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBydW4gImNsYXNzaWMiCisgICAgR05VL0xpbnV4IGJpbmFyaWVzIG9uIGFuIEVBQkkgc3lzdGVtLiAgKi8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMjkwLWFscGhhLXNpZ25hbF9oLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuNC8yOTAtYWxwaGEtc2lnbmFsX2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdlMTc5NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMjkwLWFscGhhLXNpZ25hbF9oLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKKy0tLSBnY2MtNC4yLjEtc3RvY2svZ2NjL2NvbmZpZy9hbHBoYS9saW51eC11bndpbmQuaAkyMDA1LTA2LTI0IDIwOjIyOjQxLjAwMDAwMDAwMCAtMDUwMAorKysrIGdjYy00LjIuMS9nY2MvY29uZmlnL2FscGhhL2xpbnV4LXVud2luZC5oCTIwMDctMDktMDEgMjA6MjE6MzQuMDAwMDAwMDAwIC0wNTAwCitAQCAtMjksNiArMjksOSBAQCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgLyogRG8gY29kZSByZWFkaW5nIHRvIGlkZW50aWZ5IGEgc2lnbmFsIGZyYW1lLCBhbmQgc2V0IHRoZSBmcmFtZQorICAgIHN0YXRlIGRhdGEgYXBwcm9wcmlhdGVseS4gIFNlZSB1bndpbmQtZHcyLmMgZm9yIHRoZSBzdHJ1Y3RzLiAgKi8KKyAKKysvKiBEb24ndCB1c2UgdGhpcyBpZiBpbmhpYml0X2xpYmMgaXMgc2V0CisrICAgVGhlIGJ1aWxkIGZvciB0aGlzIHRhcmdldCB3aWxsIGZhaWwgdHJ5aW5nIHRvIGluY2x1ZGUgbWlzc2luZyBoZWFkZXJzICovCisrI2lmbmRlZiBpbmhpYml0X2xpYmMKKyAjaW5jbHVkZSA8c2lnbmFsLmg+CisgI2luY2x1ZGUgPHN5cy91Y29udGV4dC5oPgorIAorQEAgLTgwLDMgKzgzLDQgQEAgYWxwaGFfZmFsbGJhY2tfZnJhbWVfc3RhdGUgKHN0cnVjdCBfVW53aQorICAgZnMtPnJldGFkZHJfY29sdW1uID0gNjQ7CisgICByZXR1cm4gX1VSQ19OT19SRUFTT047CisgfQorKyNlbmRpZiAvKiBpbmhpYml0X2xpYmMgKi8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMzAwLWZvcnRyYW4tc2lnbmVkLVRJbW9kZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMzAwLWZvcnRyYW4tc2lnbmVkLVRJbW9kZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWUyZjAxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuNC8zMDAtZm9ydHJhbi1zaWduZWQtVEltb2RlLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0ZpeCBidWlsZGluZyBnZm9ydHJhbiBmb3IgQVJNLgoraHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMDctMDUvbXNnMDEwMTAuaHRtbAorLS0tLQorCitUaGUgcGF0Y2ggYmVsb3cgZml4ZXMgYSBjcmFzaCBidWlsZGluZyBsaWJnZm9ydHJhbiBvbiBhcm0tbGludXgtZ251ZWFiaS4KKworVGhpcyB0YXJnZXQgZG9lc24ndCByZWFsbHkgaGF2ZSBhIDEyOC1iaXQgaW50ZWdlciB0eXBlLCBob3dldmVyIGl0IGRvZXMgdXNlIAorVEltb2RlIHRvIHJlcHJlc2VudCB0aGUgcmV0dXJuIHZhbHVlIG9mIGNlcnRhaW4gc3BlY2lhbCBBQkkgZGVmaW5lZCBsaWJyYXJ5IAorZnVuY3Rpb25zLiBUaGlzIHJlc3VsdHMgaW4gdHlwZV9mb3Jfc2l6ZShUSW1vZGUpIGJlaW5nIGNhbGxlZC4KKworQmVjYXVzZSBUSW1vZGUgZGVvc24ndCBjb3JyZXNwb25kIHRvIGFueSBnZm9ydHJhbiBpbnRlZ2VyIGtpbmQgCitnZmNfdHlwZV9mb3Jfc2l6ZSByZXR1cm5zIE5VTEwgYW5kIHdlIHNlZ2ZhdWx0IHNob3J0bHkgYWZ0ZXIuCisKK1RoZSBwYXRjaCBiZWxvdyBmaXhlcyB0aGlzIGJ5IG1ha2luZyBnZmNfdHlwZV9mb3Jfc2l6ZSBoYW5kbGUgVEltb2RlIGluIHRoZSAKK3NhbWUgd2F5IGFzIHRoZSBDIGZyb250ZW5kLgorCitUZXN0ZWQgb24geDg2XzY0LWxpbnV4IGFuZCBhcm0tbGludXgtZ251ZWFiaS4KK0FwcGxpZWQgdG8gdHJ1bmsuCisKK1BhdWwKKworMjAwNy0wNS0xNSAgUGF1bCBCcm9vayAgPHBhdWxAY29kZXNvdXJjZXJ5LmNvbT4KKworICAgIGdjYy9mb3J0cmFuLworICAgICogdHJhbnMtdHlwZXMuYyAoZ2ZjX3R5cGVfZm9yX3NpemUpOiBIYW5kbGUgc2lnbmVkIFRJbW9kZS4KKworZGlmZiAtZHVyTiBnY2MtNC4yLjMub2xkL2djYy9mb3J0cmFuL3RyYW5zLXR5cGVzLmMgZ2NjLTQuMi4zL2djYy9mb3J0cmFuL3RyYW5zLXR5cGVzLmMKKy0tLSBnY2MtNC4yLjMub2xkL2djYy9mb3J0cmFuL3RyYW5zLXR5cGVzLmMJMjAwNy0wOC0zMSAxMDoyNzo1MC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjMvZ2NjL2ZvcnRyYW4vdHJhbnMtdHlwZXMuYwkyMDA4LTA3LTE3IDA5OjU0OjIwLjAwMDAwMDAwMCArMDIwMAorQEAgLTE3OTksNiArMTc5OSwxMyBAQAorIAkgIGlmICh0eXBlICYmIGJpdHMgPT0gVFlQRV9QUkVDSVNJT04gKHR5cGUpKQorIAkgICAgcmV0dXJuIHR5cGU7CisgCX0KKysKKysJLyogSGFuZGxlIFRJbW9kZSBhcyBhIHNwZWNpYWwgY2FzZSBiZWNhdXNlIGl0IGlzIHVzZWQgYnkgc29tZSBiYWNrZW5kcworKwkgICAoZWcuIEFSTSkgZXZlbiB0aG91Z2ggaXQgaXMgbm90IGF2YWlsYWJsZSBmb3Igbm9ybWFsIHVzZS4gICovCisrI2lmIEhPU1RfQklUU19QRVJfV0lERV9JTlQgPj0gNjQKKysJaWYgKGJpdHMgPT0gVFlQRV9QUkVDSVNJT04gKGludFRJX3R5cGVfbm9kZSkpCisrCSAgcmV0dXJuIGludFRJX3R5cGVfbm9kZTsKKysjZW5kaWYKKyAgICAgfQorICAgZWxzZQorICAgICB7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi40LzMxMC1zaC13aXRob3V0LWhlYWRlcnMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMi40LzMxMC1zaC13aXRob3V0LWhlYWRlcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdkZGI2NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMzEwLXNoLXdpdGhvdXQtaGVhZGVycy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitPbiAyMDA4MTAxMSwgS2hlbSBSQUogd3JpdGVzOgorIFlvdSBoYXZlIHRvIGJhciBnY2MgdHJ5aW5nIHRvIGJ1aWxkIHVud2luZGluZyBhdCBzdGFnZSAxLiBUcnkgdGhlCisgYXR0YWNoZWQgcGF0Y2ggYW5kIHNlZSBpZiBpdCBoZWxwcy4KKworIGdjYy9jb25maWcvc2gvbGludXgtdW53aW5kLmggfCAgICAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworSW5kZXg6IGdjYy00XzItYnJhbmNoL2djYy9jb25maWcvc2gvbGludXgtdW53aW5kLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNF8yLWJyYW5jaC5vcmlnL2djYy9jb25maWcvc2gvbGludXgtdW53aW5kLmgJMjAwOC0wNy0wMSAxNzoyNDo0MC4wMDAwMDAwMDAgLTA3MDAKKysrKyBnY2MtNF8yLWJyYW5jaC9nY2MvY29uZmlnL3NoL2xpbnV4LXVud2luZC5oCTIwMDgtMDctMDEgMTc6MjU6NDcuMDAwMDAwMDAwIC0wNzAwCitAQCAtMjYsNiArMjYsOCBAQCBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgCisrI2lmbmRlZiBpbmhpYml0X2xpYmMKKysKKyAvKiBEbyBjb2RlIHJlYWRpbmcgdG8gaWRlbnRpZnkgYSBzaWduYWwgZnJhbWUsIGFuZCBzZXQgdGhlIGZyYW1lCisgICAgc3RhdGUgZGF0YSBhcHByb3ByaWF0ZWx5LiAgU2VlIHVud2luZC1kdzIuYyBmb3IgdGhlIHN0cnVjdHMuICAqLworIAorQEAgLTI1MSwzICsyNTMsNCBAQCBzaF9mYWxsYmFja19mcmFtZV9zdGF0ZSAoc3RydWN0IF9VbndpbmRfCisgICByZXR1cm4gX1VSQ19OT19SRUFTT047CisgfQorICNlbmRpZiAvKiBkZWZpbmVkIChfX1NINV9fKSAqLworKyNlbmRpZiAvKiBpZm5kZWYgaW5oaWJpdF9saWJjICovCisKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMzIwLWxpYmdjY19laC5hLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjIuNC8zMjAtbGliZ2NjX2VoLmEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA5ZGIzYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4yLjQvMzIwLWxpYmdjY19laC5hLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1ZhbXBpcmlzZWQgZnJvbToKKyAgaHR0cDovL2xhbmRsZXkubmV0L2hnL2Fib3JpZ2luYWwvZmlsZS83ZTA3NDdhNjY1YWIvc291cmNlcy9wYXRjaGVzL2djYy1jb3JlLWxpYmdjY2VoLnBhdGNoCisKK2RpZmYgLWR1ck4gZ2NjLTQuMi4yLm9yaWcvZ2NjL21rbGliZ2NjLmluIGdjYy00LjIuMi9nY2MvbWtsaWJnY2MuaW4KKy0tLSBnY2MtNC4yLjIub3JpZy9nY2MvbWtsaWJnY2MuaW4JMjAwNi0wNy0wNCAyMjoyMDowMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4yLjIvZ2NjL21rbGliZ2NjLmluCTIwMTEtMDgtMzEgMTY6MjQ6MDMuNjc0NjkwMDE2ICswMjAwCitAQCAtMjIzLDggKzIyMyw4IEBACisgICBpZiBbICIkTElCVU5XSU5EIiBdOyB0aGVuCisgICAgIGxpYnVud2luZF9hPSRkaXIvbGlidW53aW5kLmEKKyAgIGZpCisrICBsaWJnY2NfZWhfYT0kZGlyL2xpYmdjY19laC5hCisgICBpZiBbICIkU0hMSUJfTElOSyIgXTsgdGhlbgorLSAgICBsaWJnY2NfZWhfYT0kZGlyL2xpYmdjY19laC5hCisgICAgIGxpYmdjY19zX3NvPSRkaXIvbGliZ2NjX3Mke1NITElCX0VYVH0KKyAgICAgaWYgWyAiJExJQlVOV0lORCIgXTsgdGhlbgorICAgICAgIGxpYnVud2luZF9zbz0kZGlyL2xpYnVud2luZCR7U0hMSUJfRVhUfQorQEAgLTg4OSwxMSArODg5LDExIEBACisgICBlY2hvICcJY2htb2QgNjQ0JyAgJHtsZGlyfS9saWJnY292LmEKKyAgIGVjaG8gJwkkKFJBTkxJQl9GT1JfVEFSR0VUKScgJHtsZGlyfS9saWJnY292LmEKKyAKKy0gIGlmIFsgIiRTSExJQl9MSU5LIiBdOyB0aGVuCistICAgIGVjaG8gJwkkKElOU1RBTExfREFUQSknICR7ZGlyfS9saWJnY2NfZWguYSAke2xkaXJ9LworLSAgICBlY2hvICcJY2htb2QgNjQ0JyAgJHtsZGlyfS9saWJnY2NfZWguYQorLSAgICBlY2hvICcJJChSQU5MSUJfRk9SX1RBUkdFVCknICR7bGRpcn0vbGliZ2NjX2VoLmEKKysgIGVjaG8gJwkkKElOU1RBTExfREFUQSknICR7ZGlyfS9saWJnY2NfZWguYSAke2xkaXJ9LworKyAgZWNobyAnCWNobW9kIDY0NCcgICR7bGRpcn0vbGliZ2NjX2VoLmEKKysgIGVjaG8gJwkkKFJBTkxJQl9GT1JfVEFSR0VUKScgJHtsZGlyfS9saWJnY2NfZWguYQorIAorKyAgaWYgWyAiJFNITElCX0xJTksiIF07IHRoZW4KKyAgICAgc2hsaWJfc2xpYmRpcl9xdWFsPQorICAgICBvc19tdWx0aWxpYl9kaXI9YCRHQ0NfRk9SX1RBUkdFVCAkZmxhZ3MgLS1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnlgCisgICAgIGlmIFsgIiRvc19tdWx0aWxpYl9kaXIiICE9IC4gXTsgdGhlbgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8xMDAtYWxwaGEtbWllZWUtZGVmYXVsdC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjEvMTAwLWFscGhhLW1pZWVlLWRlZmF1bHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ0OTY2OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjEvMTAwLWFscGhhLW1pZWVlLWRlZmF1bHQucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vMDBfYWxsX2djYy00LjEtYWxwaGEtbWllZWUtZGVmYXVsdC5wYXRjaAorU2V0IHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9uIGFscGhhIHRvIHVzZSAtbWllZWUgc2luY2UgdGhlIGxhcmdlIG1ham9yaXR5IG9mCit0aW1lIHdlIHdhbnQgdGhpcyAoYmFkL3dlaXJkIHRoaW5ncyBjYW4gaGFwcGVuIHdpdGggcGFja2FnZXMgYnVpbHQgd2l0aG91dAorLW1pZWVlKS4KKworVG8gc2F0aXNmeSB0aG9zZSBwZW9wbGUgd2hvIG1heSBub3Qgd2FudCAtbWllZWUgZm9yY2VkIG9uIHRoZW0gYWxsIHRoZSB0aW1lLAord2UgYWxzbyBwcm92aWRlIC1tbm8taWVlZS4KKworUGF0Y2ggYnkgTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgorCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvYWxwaGEvYWxwaGEuaCBnY2MtNC4zLjEvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5oCistLS0gZ2NjLTQuMy4xLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5oCTIwMDctMTItMDYgMTQ6MjU6MzcuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4xL2djYy9jb25maWcvYWxwaGEvYWxwaGEuaAkyMDA4LTA2LTEwIDE0OjU2OjM2LjAwMDAwMDAwMCArMDIwMAorQEAgLTk1LDYgKzk1LDggQEAKKyAgIHdoaWxlICgwKQorICNlbmRpZgorIAorKyNkZWZpbmUgQ1BQX1NQRUMgIiV7IW5vLWllZWU6LW1pZWVlfSIKKysKKyAjZGVmaW5lIFdPUkRfU1dJVENIX1RBS0VTX0FSRyhTVFIpCQlcCisgICghc3RyY21wIChTVFIsICJycGF0aCIpIHx8IERFRkFVTFRfV09SRF9TV0lUQ0hfVEFLRVNfQVJHKFNUUikpCisgCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvYWxwaGEvYWxwaGEub3B0IGdjYy00LjMuMS9nY2MvY29uZmlnL2FscGhhL2FscGhhLm9wdAorLS0tIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvYWxwaGEvYWxwaGEub3B0CTIwMDctMDgtMDIgMTI6NDk6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2djYy9jb25maWcvYWxwaGEvYWxwaGEub3B0CTIwMDgtMDYtMTAgMTQ6NTY6MzYuMDAwMDAwMDAwICswMjAwCitAQCAtMzksNyArMzksNyBAQAorIFJlcXVlc3QgSUVFRS1jb25mb3JtYW50IG1hdGggbGlicmFyeSByb3V0aW5lcyAoT1NGLzEpCisgCisgbWllZWUKKy1UYXJnZXQgUmVwb3J0IFJlamVjdE5lZ2F0aXZlIE1hc2soSUVFRSkKKytUYXJnZXQgUmVwb3J0IE1hc2soSUVFRSkKKyBFbWl0IElFRUUtY29uZm9ybWFudCBjb2RlLCB3aXRob3V0IGluZXhhY3QgZXhjZXB0aW9ucworIAorIG1pZWVlLXdpdGgtaW5leGFjdApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8xMTAtdHJhbXBvbGluZXdhcm4ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzExMC10cmFtcG9saW5ld2Fybi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGNmZTRkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8xMTAtdHJhbXBvbGluZXdhcm4ucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vMDBfYWxsX2djYy10cmFtcG9saW5ld2Fybi5wYXRjaAorCVRoaXMgdHJpdmlhbCBwYXRjaCBjYXVzZXMgZ2NjIHRvIGVtaXQgYSB3YXJuaW5nIHdoZW5ldmVyCisJaXQgZ2VuZXJhdGVzIGEgdHJhbXBvbGluZS4gIFRoZXNlIGFyZSBvdGhlcndpc2UgaGFyZCB0bworCWxvY2F0ZS4gIEl0IGlzIHJpZ2dlZCB0byBkZWZhdWx0IE9OIC0gdG8gaGF2ZSBpdCBkZWZhdWx0CisJdG8gT0ZGIHJlbW92ZSB0aGUgdGV4dCAnSW5pdCgxKScgZnJvbSB0aGUgY29tbW9uLm9wdAorCXBhdGNoLCBsZWF2aW5nIGp1c3QgJ0NvbW1vbiBWYXIod2Fybl90cmFtcG9saW5lcyknLgorCUtldmluIEYuIFF1aW5uIDxrZXZxdWlubkBnZW50b28ub3JnPiAxNyBKYW4gMjAwNgorCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy9idWlsdGlucy5jIGdjYy00LjMuMS9nY2MvYnVpbHRpbnMuYworLS0tIGdjYy00LjMuMS5vcmlnL2djYy9idWlsdGlucy5jCTIwMDgtMDQtMjMgMDA6MzY6MjcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2djYy9idWlsdGlucy5jCTIwMDgtMDYtMTAgMTQ6NTY6NTQuMDAwMDAwMDAwICswMjAwCitAQCAtNTY2Miw2ICs1NjYyLDkgQEAKKyAgIHRyYW1wb2xpbmVzX2NyZWF0ZWQgPSAxOworICAgSU5JVElBTElaRV9UUkFNUE9MSU5FIChyX3RyYW1wLCByX2Z1bmMsIHJfY2hhaW4pOworIAorKyAgaWYgKHdhcm5fdHJhbXBvbGluZXMpCisrICAgIHdhcm5pbmcgKE9QVF9XdHJhbXBvbGluZXMsICJnZW5lcmF0aW5nIHRyYW1wb2xpbmUgaW4gb2JqZWN0IChyZXF1aXJlcyBleGVjdXRhYmxlIHN0YWNrKSIpOworKworICAgcmV0dXJuIGNvbnN0MF9ydHg7CisgfQorIAorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9nY2MvY29tbW9uLm9wdCBnY2MtNC4zLjEvZ2NjL2NvbW1vbi5vcHQKKy0tLSBnY2MtNC4zLjEub3JpZy9nY2MvY29tbW9uLm9wdAkyMDA4LTAxLTIyIDE1OjExOjQ0LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMS9nY2MvY29tbW9uLm9wdAkyMDA4LTA2LTEwIDE0OjU2OjU0LjAwMDAwMDAwMCArMDIwMAorQEAgLTE4Miw2ICsxODIsMTAgQEAKKyBDb21tb24gVmFyKHdhcm5fc3lzdGVtX2hlYWRlcnMpIFdhcm5pbmcKKyBEbyBub3Qgc3VwcHJlc3Mgd2FybmluZ3MgZnJvbSBzeXN0ZW0gaGVhZGVycworIAorK1d0cmFtcG9saW5lcworK0NvbW1vbiBWYXIod2Fybl90cmFtcG9saW5lcykgSW5pdCgxKQorK1dhcm4gd2hlbmV2ZXIgYSB0cmFtcG9saW5lIGlzIGdlbmVyYXRlZAorKworIFd1bmluaXRpYWxpemVkCisgQ29tbW9uIFZhcih3YXJuX3VuaW5pdGlhbGl6ZWQpIFdhcm5pbmcKKyBXYXJuIGFib3V0IHVuaW5pdGlhbGl6ZWQgYXV0b21hdGljIHZhcmlhYmxlcwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8xMjAtamF2YS1ub211bHRpLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8xMjAtamF2YS1ub211bHRpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNDNjZTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzEyMC1qYXZhLW5vbXVsdGkucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vMDNfYWxsX2djYzQzLWphdmEtbm9tdWx0aS5wYXRjaAorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9saWJqYXZhL2NvbmZpZ3VyZSBnY2MtNC4zLjEvbGliamF2YS9jb25maWd1cmUKKy0tLSBnY2MtNC4zLjEub3JpZy9saWJqYXZhL2NvbmZpZ3VyZQkyMDA4LTA2LTA2IDE2OjQ5OjExLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMS9saWJqYXZhL2NvbmZpZ3VyZQkyMDA4LTA2LTEwIDE0OjU3OjM4LjAwMDAwMDAwMCArMDIwMAorQEAgLTEwMTgsNiArMTAxOCw4IEBACisgICAtLWVuYWJsZS1nY29uZi1wZWVyICAgICBjb21waWxlIEdDb25mIG5hdGl2ZSBwZWVycyBmb3IgdXRpbC5wcmVmZXJlbmNlcworICAgLS1lbmFibGUtamF2YS1tYWludGFpbmVyLW1vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93IHJlYnVpbGRpbmcgb2YgLmNsYXNzIGFuZCAuaCBmaWxlcworKyAgLS1lbmFibGUtbGliamF2YS1tdWx0aWxpYgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgbGliamF2YSBhcyBtdWx0aWxpYgorICAgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgIHNwZWVkcyB1cCBvbmUtdGltZSBidWlsZAorICAgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyAgIGRvIG5vdCByZWplY3Qgc2xvdyBkZXBlbmRlbmN5IGV4dHJhY3RvcnMKKyAgIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSAgZW5hYmxlIG1ha2UgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBub3QgdXNlZnVsCitAQCAtMTg1MCw2ICsxODUyLDE2IEBACisgZmkKKyAKKyAKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGliamF2YS1tdWx0aWxpYiB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfbGliamF2YV9tdWx0aWxpYitzZXR9IiA9IHNldDsgdGhlbgorKyAgZW5hYmxldmFsPSRlbmFibGVfbGliamF2YV9tdWx0aWxpYjsKKytmaQorKworK2lmIHRlc3QgIiRlbmFibGVfbGliamF2YV9tdWx0aWxpYiIgPSBubzsgdGhlbgorKyAgbXVsdGlsaWI9bm8KKysgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1kaXNhYmxlLW11bHRpbGliIgorK2ZpCisrCisgIyBJdCBtYXkgbm90IGJlIHNhZmUgdG8gcnVuIGxpbmtpbmcgdGVzdHMgaW4gQUNfUFJPR19DQy9BQ19QUk9HX0NYWC4KKyAKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMy4xLm9yaWcvbGliamF2YS9jb25maWd1cmUuYWMgZ2NjLTQuMy4xL2xpYmphdmEvY29uZmlndXJlLmFjCistLS0gZ2NjLTQuMy4xLm9yaWcvbGliamF2YS9jb25maWd1cmUuYWMJMjAwNy0xMi0yMiAxNjo0ODo0Ni4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjEvbGliamF2YS9jb25maWd1cmUuYWMJMjAwOC0wNi0xMCAxNDo1NzozOC4wMDAwMDAwMDAgKzAyMDAKK0BAIC04Miw2ICs4MiwxMyBAQAorIAlbYWxsb3cgcmVidWlsZGluZyBvZiAuY2xhc3MgYW5kIC5oIGZpbGVzXSkpCisgQU1fQ09ORElUSU9OQUwoSkFWQV9NQUlOVEFJTkVSX01PREUsIHRlc3QgIiRlbmFibGVfamF2YV9tYWludGFpbmVyX21vZGUiID0geWVzKQorIAorK0FDX0FSR19FTkFCTEUobGliamF2YS1tdWx0aWxpYiwKKysJQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxpYmphdmEtbXVsdGlsaWJdLCBbYnVpbGQgbGliamF2YSBhcyBtdWx0aWxpYl0pKQorK2lmIHRlc3QgIiRlbmFibGVfbGliamF2YV9tdWx0aWxpYiIgPSBubzsgdGhlbgorKyAgbXVsdGlsaWI9bm8KKysgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1kaXNhYmxlLW11bHRpbGliIgorK2ZpCisrCisgIyBJdCBtYXkgbm90IGJlIHNhZmUgdG8gcnVuIGxpbmtpbmcgdGVzdHMgaW4gQUNfUFJPR19DQy9BQ19QUk9HX0NYWC4KKyBHQ0NfTk9fRVhFQ1VUQUJMRVMKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjEvMTMwLWNyb3NzLWNvbXBpbGUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzEzMC1jcm9zcy1jb21waWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NzEwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzEzMC1jcm9zcy1jb21waWxlLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzA4X2FsbF9nY2MtNC4xLWNyb3NzLWNvbXBpbGUucGF0Y2gKK1NvbWUgbm90ZXMgb24gdGhlICdib290c3RyYXAgd2l0aCBvciB3aXRob3V0IGxpYmMgaGVhZGVycycgZGViYXRlOgoraHR0cDovL2xpbnV4ZnJvbXNjcmF0Y2gub3JnL3BpcGVybWFpbC9sZnMtZGV2LzIwMDUtSnVseS8wNTI0MDkuaHRtbAoraHR0cDovL2djYy5nbnUub3JnL21sL2djYy8yMDA1LTA3L21zZzAxMTk1Lmh0bWwKKworZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9nY2MvY29uZmlndXJlIGdjYy00LjMuMS9nY2MvY29uZmlndXJlCistLS0gZ2NjLTQuMy4xLm9yaWcvZ2NjL2NvbmZpZ3VyZQkyMDA4LTA1LTIxIDEwOjU0OjE1LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMS9nY2MvY29uZmlndXJlCTIwMDgtMDYtMTAgMTQ6NTc6NDIuMDAwMDAwMDAwICswMjAwCitAQCAtMTMyODMsNyArMTMyODMsNyBAQAorIAkgICAgfCBwb3dlcnBjKi0qLSoscG93ZXJwYzY0Ki0qLSopCisgCQlDUk9TUz0iJENST1NTIC1ETkFUSVZFX0NST1NTIiA7OworIAllc2FjCistZWxpZiB0ZXN0ICJ4JFRBUkdFVF9TWVNURU1fUk9PVCIgIT0geDsgdGhlbgorK2VsaWYgdGVzdCAieCRUQVJHRVRfU1lTVEVNX1JPT1QiICE9IHggLW8gJGJ1aWxkICE9ICRob3N0OyB0aGVuCisgICAgICAgICBTWVNURU1fSEVBREVSX0RJUj0kYnVpbGRfc3lzdGVtX2hlYWRlcl9kaXIKKyBmaQorIAorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9nY2MvY29uZmlndXJlLmFjIGdjYy00LjMuMS9nY2MvY29uZmlndXJlLmFjCistLS0gZ2NjLTQuMy4xLm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYwkyMDA4LTA1LTIxIDEwOjU0OjE1LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMS9nY2MvY29uZmlndXJlLmFjCTIwMDgtMDYtMTAgMTQ6NTc6NDIuMDAwMDAwMDAwICswMjAwCitAQCAtMTc0OSw3ICsxNzQ5LDcgQEAKKyAJICAgIHwgcG93ZXJwYyotKi0qLHBvd2VycGM2NCotKi0qKQorIAkJQ1JPU1M9IiRDUk9TUyAtRE5BVElWRV9DUk9TUyIgOzsKKyAJZXNhYworLWVsaWYgdGVzdCAieCRUQVJHRVRfU1lTVEVNX1JPT1QiICE9IHg7IHRoZW4KKytlbGlmIHRlc3QgIngkVEFSR0VUX1NZU1RFTV9ST09UIiAhPSB4IC1vICRidWlsZCAhPSAkaG9zdDsgdGhlbgorICAgICAgICAgU1lTVEVNX0hFQURFUl9ESVI9JGJ1aWxkX3N5c3RlbV9oZWFkZXJfZGlyIAorIGZpCisgCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy91bndpbmQtZHcyLmMgZ2NjLTQuMy4xL2djYy91bndpbmQtZHcyLmMKKy0tLSBnY2MtNC4zLjEub3JpZy9nY2MvdW53aW5kLWR3Mi5jCTIwMDctMDctMjUgMjA6MTQ6NTcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2djYy91bndpbmQtZHcyLmMJMjAwOC0wNi0xMCAxNDo1Nzo0Mi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMzQsOSArMzM0LDExIEBACisgfQorICNlbmRpZgorIAorKyNpZm5kZWYgaW5oaWJpdF9saWJjCisgI2lmZGVmIE1EX1VOV0lORF9TVVBQT1JUCisgI2luY2x1ZGUgTURfVU5XSU5EX1NVUFBPUlQKKyAjZW5kaWYKKysjZW5kaWYKKyAMCisgLyogRXh0cmFjdCBhbnkgaW50ZXJlc3RpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgQ0lFIGZvciB0aGUgdHJhbnNsYXRpb24KKyAgICB1bml0IEYgYmVsb25ncyB0by4gIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGJ5dGUgYWZ0ZXIgdGhlIGF1Z21lbnRhdGlvbiwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjEvMTQwLW5ldGJzZC1zeW1ib2xpYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjEvMTQwLW5ldGJzZC1zeW1ib2xpYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDZhMDRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8xNDAtbmV0YnNkLXN5bWJvbGljLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzExX2FsbF9nY2MtbmV0YnNkLXN5bWJvbGljLnBhdGNoCitodHRwOi8vYnVncy5nZW50b28ub3JnLzEyMjY5OAorCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvbmV0YnNkLWVsZi5oIGdjYy00LjMuMS9nY2MvY29uZmlnL25ldGJzZC1lbGYuaAorLS0tIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvbmV0YnNkLWVsZi5oCTIwMDctMDktMDMgMTg6MTQ6MDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2djYy9jb25maWcvbmV0YnNkLWVsZi5oCTIwMDgtMDYtMTAgMTQ6NTc6NDguMDAwMDAwMDAwICswMjAwCitAQCAtODIsNiArODIsNyBAQAorICNkZWZpbmUgTkVUQlNEX0xJTktfU1BFQ19FTEYgXAorICAgIiV7YXNzZXJ0Kn0gJXtSKn0gJXtycGF0aCp9IFwKKyAgICAle3NoYXJlZDotc2hhcmVkfSBcCisrICAgJXtzeW1ib2xpYzotQnN5bWJvbGljfSBcCisgICAgJXshc2hhcmVkOiBcCisgICAgICAtZGMgLWRwIFwKKyAgICAgICV7IW5vc3RkbGliOiBcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzE1MC1zcGFyYzY0LWJzZC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjEvMTUwLXNwYXJjNjQtYnNkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYzJiNDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzE1MC1zcGFyYzY0LWJzZC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby8xNF9hbGxfZ2NjLXNwYXJjNjQtYnNkLnBhdGNoCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oIGdjYy00LjMuMS9nY2MvY29uZmlnL3NwYXJjL2ZyZWVic2QuaAorLS0tIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oCTIwMDctMDgtMDIgMTI6NDk6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oCTIwMDgtMDYtMTAgMTQ6NTc6NTQuMDAwMDAwMDAwICswMjAwCitAQCAtMjUsOSArMjUsMjIgQEAKKyAvKiBGcmVlQlNEIG5lZWRzIHRoZSBwbGF0Zm9ybSBuYW1lIChzcGFyYzY0KSBkZWZpbmVkLgorICAgIEVtYWNzIG5lZWRzIHRvIGtub3cgaWYgdGhlIGFyY2ggaXMgNjQgb3IgMzItYml0cy4gICovCisgCistI3VuZGVmICBDUFBfQ1BVNjRfREVGQVVMVF9TUEVDCistI2RlZmluZSBDUFBfQ1BVNjRfREVGQVVMVF9TUEVDIFwKKy0gICItRF9fc3BhcmM2NF9fIC1EX19zcGFyY192OV9fIC1EX19zcGFyY3Y5IC1EX19hcmNoNjRfXyIKKysjdW5kZWYgIEZCU0RfVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMKKysjZGVmaW5lIEZCU0RfVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMoKSAgICAgICAgICAgICAgICAgIFwKKysgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBpZiAoVEFSR0VUX0FSQ0g2NCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjNjRfXyIpOyAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjX3Y5X18iKTsgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjdjkiKTsgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19zcGFyYyIpOyAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBidWlsdGluX2RlZmluZSAoIl9fc3BhcmNfXyIpOyAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHdoaWxlICgwKQorKworIAorICNkZWZpbmUgTElOS19TUEVDICIlKGxpbmtfYXJjaCkJCQkJCQlcCisgICAleyFtbm8tcmVsYXg6JXshcjotcmVsYXh9fQkJCQkJCVwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjEvMTYwLWZsYXR0ZW4tc3dpdGNoLXN0bXQtMDAucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzE2MC1mbGF0dGVuLXN3aXRjaC1zdG10LTAwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1Y2FmY2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzE2MC1mbGF0dGVuLXN3aXRjaC1zdG10LTAwLnBhdGNoCkBAIC0wLDAgKzEsNzYgQEAKK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzE4X2FsbF85MDQtZmxhdHRlbi1zd2l0Y2gtc3RtdC0wMC5wYXRjaAoraHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMDctMDQvbXNnMDA5MjcuaHRtbAorCitIaSwKKworVGhlIGF0dGFjaGVkIHBhdGNoIG1ha2VzIHN1cmUgdGhhdCB3ZSBjcmVhdGUgc21hbGxlciBvYmplY3QgY29kZSBmb3IKK3NpbXBsZSBzd2l0Y2ggc3RhdGVtZW50cy4gV2UganVzdCBtYWtlIHN1cmUgdG8gZmxhdHRlbiB0aGUgc3dpdGNoCitzdGF0ZW1lbnQgaW50byBhbiBpZi1lbHNlIGNoYWluLCBiYXNpY2FsbHkuCisKK1RoaXMgZml4ZXMgYSBzaXplLXJlZ3Jlc3Npb24gYXMgY29tcGFyZWQgdG8gZ2NjLTMuNCwgYXMgY2FuIGJlIHNlZW4KK2JlbG93LgorCisyMDA3LTA0LTE1ICBCZXJuaGFyZCBGaXNjaGVyICA8Li4+CisKKwkqIHN0bXQuYyAoZXhwYW5kX2Nhc2UpOiBEbyBub3QgY3JlYXRlIGEgY29tcGxleCBiaW5hcnkgdHJlZSB3aGVuCisJb3B0aW1pemluZyBmb3Igc2l6ZSBidXQgcmF0aGVyIHVzZSB0aGUgc2ltcGxlIG9yZGVyZWQgbGlzdC4KKwkoZW1pdF9jYXNlX25vZGVzKTogZG8gbm90IGVtaXQganVtcHMgdG8gdGhlIGRlZmF1bHRfbGFiZWwgd2hlbgorCW9wdGltaXppbmcgZm9yIHNpemUuCisKK05vdCByZWd0ZXN0ZWQgc28gZmFyLgorQ29tbWVudHM/CisKK0F0dGFjaGVkIGlzIHRoZSB0ZXN0IHN3aXRjaC5jIG1lbnRpb25lZCBiZWxvdy4KKworJCBmb3IgaSBpbiAyLjk1IDMuMyAzLjQgNC4wIDQuMSA0LjIub3JpZy1IRUFEIDQuMy5vcmlnLUhFQUQgNC4zLUhFQUQ7ZG8KK2djYy0kaSAgLURDSEFJTiAtT3MgLW8gc3dpdGNoLUNIQUlOLSRpLm8gLWMgc3dpdGNoLmMgO2RvbmUKKyQgZm9yIGkgaW4gMi45NSAzLjMgMy40IDQuMCA0LjEgNC4yLm9yaWctSEVBRCA0LjMub3JpZy1IRUFEIDQuMy1IRUFEO2RvCitnY2MtJGkgIC1VQ0hBSU4gLU9zIC1vIHN3aXRjaC0kaS5vIC1jIHN3aXRjaC5jIDtkb25lCisKKyQgc2l6ZSBzd2l0Y2gtKi5vCisgICB0ZXh0CSAgIGRhdGEJICAgIGJzcwkgICAgZGVjCSAgICBoZXgJZmlsZW5hbWUKKyAgICAxNjkJICAgICAgMAkgICAgICAwCSAgICAxNjkJICAgICBhOQlzd2l0Y2gtMi45NS5vCisgICAgMTE1CSAgICAgIDAJICAgICAgMAkgICAgMTE1CSAgICAgNzMJc3dpdGNoLTMuMy5vCisgICAgMTAzCSAgICAgIDAJICAgICAgMAkgICAgMTAzCSAgICAgNjcJc3dpdGNoLTMuNC5vCisgICAgMTI0CSAgICAgIDAJICAgICAgMAkgICAgMTI0CSAgICAgN2MJc3dpdGNoLTQuMC5vCisgICAgMTI0CSAgICAgIDAJICAgICAgMAkgICAgMTI0CSAgICAgN2MJc3dpdGNoLTQuMS5vCisgICAgMTI0CSAgICAgIDAJICAgICAgMAkgICAgMTI0CSAgICAgN2MJc3dpdGNoLTQuMi5vcmlnLUhFQUQubworICAgICA5NQkgICAgICAwCSAgICAgIDAJICAgICA5NQkgICAgIDVmCXN3aXRjaC00LjMtSEVBRC5vCisgICAgMTI0CSAgICAgIDAJICAgICAgMAkgICAgMTI0CSAgICAgN2MJc3dpdGNoLTQuMy5vcmlnLUhFQUQubworICAgIDE2NgkgICAgICAwCSAgICAgIDAJICAgIDE2NgkgICAgIGE2CXN3aXRjaC1DSEFJTi0yLjk1Lm8KKyAgICAxMTEJICAgICAgMAkgICAgICAwCSAgICAxMTEJICAgICA2Zglzd2l0Y2gtQ0hBSU4tMy4zLm8KKyAgICAgOTUJICAgICAgMAkgICAgICAwCSAgICAgOTUJICAgICA1Zglzd2l0Y2gtQ0hBSU4tMy40Lm8KKyAgICAgOTUJICAgICAgMAkgICAgICAwCSAgICAgOTUJICAgICA1Zglzd2l0Y2gtQ0hBSU4tNC4wLm8KKyAgICAgOTUJICAgICAgMAkgICAgICAwCSAgICAgOTUJICAgICA1Zglzd2l0Y2gtQ0hBSU4tNC4xLm8KKyAgICAgOTUJICAgICAgMAkgICAgICAwCSAgICAgOTUJICAgICA1Zglzd2l0Y2gtQ0hBSU4tNC4yLm9yaWctSEVBRC5vCisgICAgIDk1CSAgICAgIDAJICAgICAgMAkgICAgIDk1CSAgICAgNWYJc3dpdGNoLUNIQUlOLTQuMy1IRUFELm8KKyAgICAgOTUJICAgICAgMAkgICAgICAwCSAgICAgOTUJICAgICA1Zglzd2l0Y2gtQ0hBSU4tNC4zLm9yaWctSEVBRC5vCisKKworQ29udGVudC1UeXBlOiB0ZXh0L3gtZGlmZjsgY2hhcnNldD11cy1hc2NpaQorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9ImdjYy00LjMuZ2NjLWZsYXR0ZW4tc3dpdGNoLXN0bXQuMDAuZGlmZiIKKworZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9nY2Mvc3RtdC5jIGdjYy00LjMuMS9nY2Mvc3RtdC5jCistLS0gZ2NjLTQuMy4xLm9yaWcvZ2NjL3N0bXQuYwkyMDA4LTA1LTA5IDIwOjEyOjEzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMS9nY2Mvc3RtdC5jCTIwMDgtMDYtMTAgMTQ6NTc6NTguMDAwMDAwMDAwICswMjAwCitAQCAtMjUwOSw3ICsyNTA5LDExIEBACisgCSAgdXNlX2Nvc3RfdGFibGUKKyAJICAgID0gKFRSRUVfQ09ERSAob3JpZ190eXBlKSAhPSBFTlVNRVJBTF9UWVBFCisgCSAgICAgICAmJiBlc3RpbWF0ZV9jYXNlX2Nvc3RzIChjYXNlX2xpc3QpKTsKKy0JICBiYWxhbmNlX2Nhc2Vfbm9kZXMgKCZjYXNlX2xpc3QsIE5VTEwpOworKwkgIC8qIFdoZW4gb3B0aW1pemluZyBmb3Igc2l6ZSwgd2Ugd2FudCBhIHN0cmFpZ2h0IGxpc3QgdG8gYXZvaWQKKysJICAgICBqdW1wcyBhcyBtdWNoIGFzIHBvc3NpYmxlLiBUaGlzIGJhc2ljYWxseSBjcmVhdGVzIGFuIGlmLWVsc2UKKysJICAgICBjaGFpbi4gICovCisrCSAgaWYgKCFvcHRpbWl6ZV9zaXplKQorKwkgICAgYmFsYW5jZV9jYXNlX25vZGVzICgmY2FzZV9saXN0LCBOVUxMKTsKKyAJICBlbWl0X2Nhc2Vfbm9kZXMgKGluZGV4LCBjYXNlX2xpc3QsIGRlZmF1bHRfbGFiZWwsIGluZGV4X3R5cGUpOworIAkgIGVtaXRfanVtcCAoZGVmYXVsdF9sYWJlbCk7CisgCX0KK0BAIC0zMDY3LDYgKzMwNzEsNyBAQAorIAkgICAgeworIAkgICAgICBpZiAoIW5vZGVfaGFzX2xvd19ib3VuZCAobm9kZSwgaW5kZXhfdHlwZSkpCisgCQl7CisrCQkgIGlmICghb3B0aW1pemVfc2l6ZSkgLyogZG9uJ3QgamwgdG8gdGhlIC5kZWZhdWx0X2xhYmVsLiAqLworIAkJICBlbWl0X2NtcF9hbmRfanVtcF9pbnNucyAoaW5kZXgsCisgCQkJCQkgICBjb252ZXJ0X21vZGVzCisgCQkJCQkgICAobW9kZSwgaW1vZGUsCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzE3MC1saWJpYmVydHktcGljLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8xNzAtbGliaWJlcnR5LXBpYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjFlNmI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8xNzAtbGliaWJlcnR5LXBpYy5wYXRjaApAQCAtMCwwICsxLDEyIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby81MV9hbGxfZ2NjLTMuNC1saWJpYmVydHktcGljLnBhdGNoCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2xpYmliZXJ0eS9NYWtlZmlsZS5pbiBnY2MtNC4zLjEvbGliaWJlcnR5L01ha2VmaWxlLmluCistLS0gZ2NjLTQuMy4xLm9yaWcvbGliaWJlcnR5L01ha2VmaWxlLmluCTIwMDctMDctMjUgMDg6MjY6NDUuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2xpYmliZXJ0eS9NYWtlZmlsZS5pbgkyMDA4LTA2LTEwIDE0OjU4OjAyLjAwMDAwMDAwMCArMDIwMAorQEAgLTIyNSw2ICsyMjUsNyBAQAorIAkgICQoQVIpICQoQVJfRkxBR1MpICQoVEFSR0VUTElCKSBcCisgCSAgICAkKFJFUVVJUkVEX09GSUxFUykgJChFWFRSQV9PRklMRVMpICQoTElCT0JKUyk7IFwKKyAJICAkKFJBTkxJQikgJChUQVJHRVRMSUIpOyBcCisrCSAgY3AgJChUQVJHRVRMSUIpIC4uLyA7IFwKKyAJICBjZCAuLjsgXAorIAllbHNlIHRydWU7IGZpCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzE4MC1zdXBlcmgtZGVmYXVsdC1tdWx0aWxpYi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjEvMTgwLXN1cGVyaC1kZWZhdWx0LW11bHRpbGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMjQyMjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzE4MC1zdXBlcmgtZGVmYXVsdC1tdWx0aWxpYi5wYXRjaApAQCAtMCwwICsxLDI1IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby81M19hbGxfZ2NjNC1zdXBlcmgtZGVmYXVsdC1tdWx0aWxpYi5wYXRjaAorVGhlIGdjYy0zLnggdG9vbGNoYWlucyB3b3VsZCBjb250YWluIGFsbCB0aGUgdGFyZ2V0cyBieSBkZWZhdWx0LiAgV2l0aCBnY2MtNCwKK3lvdSBoYXZlIHRvIGFjdHVhbGx5IGxpc3Qgb3V0IHRoZSBtdWx0aWxpYnMgeW91IHdhbnQgb3IgeW91IHdpbGwgZW5kIHVwIHdpdGgKK2p1c3Qgb25lIHdoZW4gdXNpbmcgdGFyZ2V0cyBsaWtlICdzaDQtbGludXgtZ251Jy4KKworVGhlIHJlc3VsdGluZyB0b29sY2hhaW4gY2FuJ3QgZXZlbiBidWlsZCBhIGtlcm5lbCBhcyB0aGUga2VybmVsIG5lZWRzIHRvIGJ1aWxkCit3aXRoIHRoZSBub2ZwdSBmbGFnIHRvIGJlIHN1cmUgdGhhdCBubyBmcHUgb3BzIGFyZSBnZW5lcmF0ZWQuCisKK0hlcmUgd2UgcmVzdG9yZSB0aGUgZ2NjLTMueCBiZWhhdmlvcjsgdGhlIGFkZGl0aW9uYWwgb3ZlcmhlYWQgb2YgYnVpbGRpbmcgYWxsCitvZiB0aGVzZSBtdWx0aWxpYnMgYnkgZGVmYXVsdCBpcyBuZWdsaWdpYmxlLgorCitodHRwOi8vYnVncy5nZW50b28ub3JnLzE0MDIwNQorCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcuZ2NjIGdjYy00LjMuMS9nY2MvY29uZmlnLmdjYworLS0tIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcuZ2NjCTIwMDgtMDUtMjEgMTA6NTQ6MTUuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2djYy9jb25maWcuZ2NjCTIwMDgtMDYtMTAgMTQ6NTg6MDYuMDAwMDAwMDAwICswMjAwCitAQCAtMjI3OCw3ICsyMjc4LDcgQEAKKyAJaWYgdGVzdCB4JHtzaF9tdWx0aWxpYnN9ID0geCA7IHRoZW4KKyAJCWNhc2UgJHt0YXJnZXR9IGluCisgCQlzaDY0LXN1cGVyaC1saW51eCogfCBcCistCQlzaFsxMjM0XSopCXNoX211bHRpbGlicz0ke3NoX2NwdV90YXJnZXR9IDs7CisrCQlzaFsxMjM0XSopCXNoX211bHRpbGlicz1gY2QgJHtzcmNkaXJ9L2NvbmZpZy9zaCA7IGVjaG8gdC1tbGliLXNoWzEtNF0qIHwgc2VkICdzOnQtbWxpYi1zaDosbTpnO3M6IDo6ZydgIDs7CisgCQlzaDY0KiB8IHNoNSopCXNoX211bHRpbGlicz1tNS0zMm1lZGlhLG01LTMybWVkaWEtbm9mcHUsbTUtY29tcGFjdCxtNS1jb21wYWN0LW5vZnB1LG01LTY0bWVkaWEsbTUtNjRtZWRpYS1ub2ZwdSA7OworIAkJc2gtc3VwZXJoLSopCXNoX211bHRpbGlicz1tNCxtNC1zaW5nbGUsbTQtc2luZ2xlLW9ubHksbTQtbm9mcHUgOzsKKyAJCXNoKi0qLWxpbnV4KikJc2hfbXVsdGlsaWJzPW0xLG0zZSxtNCA7OwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8xOTAtbGlic3RkYysrLXBpYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjEvMTkwLWxpYnN0ZGMrKy1waWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFjYWIxOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjEvMTkwLWxpYnN0ZGMrKy1waWMucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vNTRfYWxsXzMwMC1saWJzdGRjKystcGljLnBhdGNoCitpbnN0YWxsIGxpYnN0ZGMrK19waWMuYSBpZiB3ZSBoYXZlIHBpYyBvYmpzCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4xLm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbSBnY2MtNC4zLjEvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQorLS0tIGdjYy00LjMuMS5vcmlnL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuYW0JMjAwOC0wMi0yOSAxOToyNjo1MC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjEvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQkyMDA4LTA2LTEwIDE0OjU4OjA5LjAwMDAwMDAwMCArMDIwMAorQEAgLTI4OSw2ICsyODksMTMgQEAKKyAJICAkKE9QVF9MREZMQUdTKSAkKFNFQ1RJT05fTERGTEFHUykgJChBTV9DWFhGTEFHUykgJChMVExERkxBR1MpIC1vICRACisgCisgCisraW5zdGFsbC1leGVjLWxvY2FsOgorKwlwaWNfb2Jqcz1gc2VkIC1uICJzOic6Omc7czpecGljX29iamVjdD06OnAiICoubG8gfCBncmVwIC12ICdebm9uZSQkJ2A7IFwKKysJaWYgWyB4IiQkcGljX29ianMiICE9IHggXTsgdGhlbiBcCisrCQkkKEFSKSBjcnUgbGlic3RkYysrX3BpYy5hICQkcGljX29ianMgJCh0b3BfYnVpbGRkaXIpL2xpYnN1cGMrKy8qLm8gfHwgZXhpdCAxOyBcCisrCQkkKElOU1RBTExfREFUQSkgbGlic3RkYysrX3BpYy5hICQoREVTVERJUikkKHRvb2xleGVjbGliZGlyKSB8fCBleGl0IDE7IFwKKysJZmkKKysKKyAjIEFkZGVkIGJpdHMgdG8gYnVpbGQgZGVidWcgbGlicmFyeS4KKyBpZiBHTElCQ1hYX0JVSUxEX0RFQlVHCisgYWxsLWxvY2FsOiBidWlsZF9kZWJ1ZworZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluIGdjYy00LjMuMS9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCistLS0gZ2NjLTQuMy4xLm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgkyMDA4LTAyLTI5IDE5OjI2OjUwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMS9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCTIwMDgtMDYtMTAgMTQ6NTg6MDkuMDAwMDAwMDAwICswMjAwCitAQCAtNjkzLDcgKzY5Myw3IEBACisgCisgaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWRhdGEtbG9jYWwKKyAKKy1pbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUworK2luc3RhbGwtZXhlYy1hbTogaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTIGluc3RhbGwtZXhlYy1sb2NhbAorIAorIGluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisgCitAQCAtNzMyLDcgKzczMiw3IEBACisgCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKyAJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorIAl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWluZm8tYW0gXAorLQl1bmluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUworKwl1bmluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUyBpbnN0YWxsLWV4ZWMtbG9jYWwKKyAKKyAKKyAjIFN5bWJvbCB2ZXJzaW9uaW5nIGZvciBzaGFyZWQgbGlicmFyaWVzLgorQEAgLTg1OCw2ICs4NTgsMTQgQEAKKyBpbnN0YWxsX2RlYnVnOgorIAkoY2QgJHtkZWJ1Z2Rpcn0gJiYgJChNQUtFKSBcCisgCXRvb2xleGVjbGliZGlyPSQoZ2xpYmN4eF90b29sZXhlY2xpYmRpcikvZGVidWcgaW5zdGFsbCkKKysKKytpbnN0YWxsLWV4ZWMtbG9jYWw6CisrCXBpY19vYmpzPWBzZWQgLW4gInM6Jzo6ZztzOl5waWNfb2JqZWN0PTo6cCIgKi5sbyB8IGdyZXAgLXYgJ15ub25lJCQnYDsgXAorKwlpZiBbIHgiJCRwaWNfb2JqcyIgIT0geCBdOyB0aGVuIFwKKysJCSQoQVIpIGNydSBsaWJzdGRjKytfcGljLmEgJCRwaWNfb2JqcyAkKHRvcF9idWlsZGRpcikvbGlic3VwYysrLyoubyB8fCBleGl0IDE7IFwKKysJCSQoSU5TVEFMTF9EQVRBKSBsaWJzdGRjKytfcGljLmEgJChERVNURElSKSQodG9vbGV4ZWNsaWJkaXIpIHx8IGV4aXQgMTsgXAorKwlmaQorKworICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisgIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisgLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8yMDAtcHIyNDE3MC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjEvMjAwLXByMjQxNzAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QxMzY5OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjEvMjAwLXByMjQxNzAucGF0Y2gKQEAgLTAsMCArMSw2MSBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vNjFfYWxsX2djYzQzLXByMjQxNzAucGF0Y2gKK2h0dHA6Ly9nY2MuZ251Lm9yZy9QUjI0MTcwCisKKzIwMDgtMDItMjAgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KKworCVBSIGxpYmdjai8yNDE3MDoKKwkqIGphdmEvaW8vbmF0RmlsZVBvc2l4LmNjIChGaWxlOjpwZXJmb3JtTGlzdCk6IERvbid0IHVzZQorCXJlYWRkaXJfci4KKwkqIGNvbmZpZ3VyZSwgaW5jbHVkZS9jb25maWcuaC5pbjogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5hYzogRG9uJ3QgY2hlY2sgZm9yIHJlYWRkaXJfci4KKworZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9saWJqYXZhL2NvbmZpZ3VyZS5hYyBnY2MtNC4zLjEvbGliamF2YS9jb25maWd1cmUuYWMKKy0tLSBnY2MtNC4zLjEub3JpZy9saWJqYXZhL2NvbmZpZ3VyZS5hYwkyMDA4LTA2LTEwIDE0OjU3OjQyLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMS9saWJqYXZhL2NvbmZpZ3VyZS5hYwkyMDA4LTA2LTEwIDE0OjU4OjEzLjAwMDAwMDAwMCArMDIwMAorQEAgLTEwMzAsNyArMTAzMCw3IEBACisgICAgUExBVEZPUk1ORVQ9Tm9OZXQKKyBlbHNlCisgICAgQUNfQ0hFQ0tfRlVOQ1MoW3N0cmVycm9yX3Igc2VsZWN0IGZzdGF0IG9wZW4gZnN5bmMgc2xlZXAgb3BlbmRpciBcCistICAgICAgICAgICAgICAgICAgIGxvY2FsdGltZV9yIHJlYWRkaXJfciBnZXRwd3VpZF9yIGdldGN3ZCBcCisrICAgICAgICAgICAgICAgICAgIGxvY2FsdGltZV9yIGdldHB3dWlkX3IgZ2V0Y3dkIFwKKyAJCSAgIGFjY2VzcyBzdGF0IGxzdGF0IG1rZGlyIHJlbmFtZSBybWRpciB1bmxpbmsgdXRpbWUgY2htb2QgcmVhZGxpbmsgXAorIAkJICAgbmxfbGFuZ2luZm8gc2V0bG9jYWxlIFwKKyAJCSAgIGluZXRfcHRvbiB1bmFtZSBpbmV0X250b2EgXAorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9saWJqYXZhL2luY2x1ZGUvY29uZmlnLmguaW4gZ2NjLTQuMy4xL2xpYmphdmEvaW5jbHVkZS9jb25maWcuaC5pbgorLS0tIGdjYy00LjMuMS5vcmlnL2xpYmphdmEvaW5jbHVkZS9jb25maWcuaC5pbgkyMDA3LTA3LTMxIDE4OjE3OjIxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMS9saWJqYXZhL2luY2x1ZGUvY29uZmlnLmguaW4JMjAwOC0wNi0xMCAxNDo1ODoxMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMTQsOSArMjE0LDYgQEAKKyAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHB3ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyAjdW5kZWYgSEFWRV9QV0RfSAorIAorLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVhZGRpcl9yJyBmdW5jdGlvbi4gKi8KKy0jdW5kZWYgSEFWRV9SRUFERElSX1IKKy0KKyAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJlYWRsaW5rJyBmdW5jdGlvbi4gKi8KKyAjdW5kZWYgSEFWRV9SRUFETElOSworIAorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9saWJqYXZhL2phdmEvaW8vbmF0RmlsZVBvc2l4LmNjIGdjYy00LjMuMS9saWJqYXZhL2phdmEvaW8vbmF0RmlsZVBvc2l4LmNjCistLS0gZ2NjLTQuMy4xLm9yaWcvbGliamF2YS9qYXZhL2lvL25hdEZpbGVQb3NpeC5jYwkyMDA3LTA4LTA0IDIzOjUwOjAxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMS9saWJqYXZhL2phdmEvaW8vbmF0RmlsZVBvc2l4LmNjCTIwMDgtMDYtMTAgMTQ6NTg6MTMuMDAwMDAwMDAwICswMjAwCitAQCAtMSw2ICsxLDYgQEAKKyAvLyBuYXRGaWxlLmNjIC0gTmF0aXZlIHBhcnQgb2YgRmlsZSBjbGFzcyBmb3IgUE9TSVguCisgCistLyogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA2CisrLyogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA2LCAyMDA4CisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGliZ2NqLgorQEAgLTI5MiwxMyArMjkyLDcgQEAKKyAKKyAgIGphdmE6OnV0aWw6OkFycmF5TGlzdCAqbGlzdCA9IG5ldyBqYXZhOjp1dGlsOjpBcnJheUxpc3QgKCk7CisgICBzdHJ1Y3QgZGlyZW50ICpkOworLSNpZiBkZWZpbmVkKEhBVkVfUkVBRERJUl9SKSAmJiBkZWZpbmVkKF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUykKKy0gIGludCBuYW1lX21heCA9IHBhdGhjb25mIChidWYsIF9QQ19OQU1FX01BWCk7CistICBjaGFyIGRidWZbc2l6ZW9mIChzdHJ1Y3QgZGlyZW50KSArIG5hbWVfbWF4ICsgMV07CistICB3aGlsZSAocmVhZGRpcl9yIChkaXIsIChzdHJ1Y3QgZGlyZW50ICopIGRidWYsICZkKSA9PSAwICYmIGQgIT0gTlVMTCkKKy0jZWxzZSAvKiBIQVZFX1JFQURESVJfUiAqLworICAgd2hpbGUgKChkID0gcmVhZGRpciAoZGlyKSkgIT0gTlVMTCkKKy0jZW5kaWYgLyogSEFWRV9SRUFERElSX1IgKi8KKyAgICAgeworICAgICAgIC8vIE9taXQgIi4iIGFuZCAiLi4iLgorICAgICAgIGlmIChkLT5kX25hbWVbMF0gPT0gJy4nCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzIxMC1ub3RlR05Vc3RhY2stMDAucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzIxMC1ub3RlR05Vc3RhY2stMDAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY1NjY2MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjEvMjEwLW5vdGVHTlVzdGFjay0wMC5wYXRjaApAQCAtMCwwICsxLDk2IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby82MV9hbGxfZ2NjNC1pYTY0LW5vdGVHTlVzdGFjay5wYXRjaAorMjAwNC0wOS0yMCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZy9yczYwMDAvcHBjLWFzbS5oOiBBZGQgLm5vdGUuR05VLXN0YWNrIHNlY3Rpb24gYWxzbworCW9uIHBwYzY0LWxpbnV4LgorCisJKiBjb25maWcvaWE2NC9saWIxZnVuY3MuYXNtOiBBZGQgLm5vdGUuR05VLXN0YWNrIHNlY3Rpb24gb24KKwlpYTY0LWxpbnV4LgorCSogY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtOiBMaWtld2lzZS4KKwkqIGNvbmZpZy9pYTY0L2NydGVuZC5hc206IExpa2V3aXNlLgorCSogY29uZmlnL2lhNjQvY3J0aS5hc206IExpa2V3aXNlLgorCSogY29uZmlnL2lhNjQvY3J0bi5hc206IExpa2V3aXNlLgorCisyMDA0LTA1LTE0ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogY29uZmlnL2lhNjQvbGludXguaCAoVEFSR0VUX0FTTV9GSUxFX0VORCk6IERlZmluZS4KKworZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtIGdjYy00LjMuMS9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtCistLS0gZ2NjLTQuMy4xLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGJlZ2luLmFzbQkyMDA1LTA5LTI3IDAyOjUyOjI0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMS9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtCTIwMDgtMDYtMTAgMTQ6NTg6MTcuMDAwMDAwMDAwICswMjAwCitAQCAtMjU1LDMgKzI1NSw3IEBACisgLndlYWsgX19jeGFfZmluYWxpemUKKyAjZW5kaWYKKyAud2VhayBfSnZfUmVnaXN0ZXJDbGFzc2VzCisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtIGdjYy00LjMuMS9nY2MvY29uZmlnL2lhNjQvY3J0ZW5kLmFzbQorLS0tIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtCTIwMDUtMDktMjcgMDI6NTI6MjQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtCTIwMDgtMDYtMTAgMTQ6NTg6MTcuMDAwMDAwMDAwICswMjAwCitAQCAtMTIyLDMgKzEyMiw3IEBACisgCisgCWJyLnJldC5zcHRrLm1hbnkgcnAKKyAJLmVuZHAgX19kb19nbG9iYWxfY3RvcnNfYXV4CisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRpLmFzbSBnY2MtNC4zLjEvZ2NjL2NvbmZpZy9pYTY0L2NydGkuYXNtCistLS0gZ2NjLTQuMy4xLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGkuYXNtCTIwMDUtMDYtMjUgMDM6MjI6NDEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2djYy9jb25maWcvaWE2NC9jcnRpLmFzbQkyMDA4LTA2LTEwIDE0OjU4OjE3LjAwMDAwMDAwMCArMDIwMAorQEAgLTY0LDMgKzY0LDcgQEAKKyAJLmJvZHkKKyAKKyAjIGVuZCBvZiBjcnRpLmFzbQorKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0bi5hc20gZ2NjLTQuMy4xL2djYy9jb25maWcvaWE2NC9jcnRuLmFzbQorLS0tIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRuLmFzbQkyMDA1LTA2LTI1IDAzOjIyOjQxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMS9nY2MvY29uZmlnL2lhNjQvY3J0bi5hc20JMjAwOC0wNi0xMCAxNDo1ODoxNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC01NCwzICs1NCw3IEBACisgCWJyLnJldC5zcHRrLm1hbnkgYjAKKyAKKyAjIGVuZCBvZiBjcnRuLmFzbQorKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbSBnY2MtNC4zLjEvZ2NjL2NvbmZpZy9pYTY0L2xpYjFmdW5jcy5hc20KKy0tLSBnY2MtNC4zLjEub3JpZy9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbQkyMDA1LTA5LTI3IDAyOjUyOjI0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMS9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbQkyMDA4LTA2LTEwIDE0OjU4OjE3LjAwMDAwMDAwMCArMDIwMAorQEAgLTc5MiwzICs3OTIsNyBAQAorIAl9CisgCS5lbmRwIF9fZmxvYXR0aXRmCisgI2VuZGlmCisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvaWE2NC9saW51eC5oIGdjYy00LjMuMS9nY2MvY29uZmlnL2lhNjQvbGludXguaAorLS0tIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvaWE2NC9saW51eC5oCTIwMDYtMTItMTIgMTY6MTU6MTkuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4xL2djYy9jb25maWcvaWE2NC9saW51eC5oCTIwMDgtMDYtMTAgMTQ6NTg6MTcuMDAwMDAwMDAwICswMjAwCitAQCAtNSw2ICs1LDggQEAKKyAKKyAjZGVmaW5lIFRBUkdFVF9WRVJTSU9OIGZwcmludGYgKHN0ZGVyciwgIiAoSUEtNjQpIExpbnV4Iik7CisgCisrI2RlZmluZSBUQVJHRVRfQVNNX0ZJTEVfRU5EIGZpbGVfZW5kX2luZGljYXRlX2V4ZWNfc3RhY2sKKysKKyAvKiBUaGlzIGlzIGZvciAtcHJvZmlsZSB0byB1c2UgLWxjX3AgaW5zdGVhZCBvZiAtbGMuICAqLworICN1bmRlZiBDQzFfU1BFQworICNkZWZpbmUgQ0MxX1NQRUMgIiV7cHJvZmlsZTotcH0gJXtHKn0iCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvcnM2MDAwL3BwYy1hc20uaCBnY2MtNC4zLjEvZ2NjL2NvbmZpZy9yczYwMDAvcHBjLWFzbS5oCistLS0gZ2NjLTQuMy4xLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvcHBjLWFzbS5oCTIwMDMtMDYtMDQgMTg6NDQ6NTEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2djYy9jb25maWcvcnM2MDAwL3BwYy1hc20uaAkyMDA4LTA2LTEwIDE0OjU4OjE3LjAwMDAwMDAwMCArMDIwMAorQEAgLTE1OCw3ICsxNTgsNyBAQAorIAkuc2l6ZSBGVU5DX05BTUUobmFtZSksR0xVRSguTCxuYW1lKS1GVU5DX05BTUUobmFtZSkKKyAjZW5kaWYKKyAKKy0jaWYgZGVmaW5lZCBfX2xpbnV4X18gJiYgIWRlZmluZWQgX19wb3dlcnBjNjRfXworKyNpZiBkZWZpbmVkIF9fbGludXhfXworIAkuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2sKKyAJLnByZXZpb3VzCisgI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzIyMC1ub3RlR05Vc3RhY2stMDEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzIyMC1ub3RlR05Vc3RhY2stMDEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc0ZTVlOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjEvMjIwLW5vdGVHTlVzdGFjay0wMS5wYXRjaApAQCAtMCwwICsxLDE5OCBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vNjJfYWxsX2djYzQtbm90ZUdOVXN0YWNrLnBhdGNoCisyMDA1LTAyLTA4ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogc3JjL2FscGhhL29zZi5TOiBBZGQgLm5vdGUuR05VLXN0YWNrIG9uIExpbnV4LgorCSogc3JjL3MzOTAvc3lzdi5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUzogTGlrZXdpc2UuCisJKiBzcmMveDg2L3VuaXg2NC5TOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvc3lzdi5TOiBMaWtld2lzZS4KKwkqIHNyYy9zcGFyYy92OC5TOiBMaWtld2lzZS4KKwkqIHNyYy9zcGFyYy92OS5TOiBMaWtld2lzZS4KKwkqIHNyYy9tNjhrL3N5c3YuUzogTGlrZXdpc2UuCisJKiBzcmMvaWE2NC91bml4LlM6IExpa2V3aXNlLgorCSogc3JjL2FybS9zeXN2LlM6IExpa2V3aXNlLgorCisJKiBpYTY0X3NhdmVfcmVnc19pbl9zdGFjay5zOiBNb3ZlZCB0by4uLgorCSogaWE2NF9zYXZlX3JlZ3NfaW5fc3RhY2suUzogLi4uIHRoaXMuICBBZGQgLm5vdGUuR05VLXN0YWNrCisJb24gTGludXguCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4xLm9yaWcvYm9laG0tZ2MvaWE2NF9zYXZlX3JlZ3NfaW5fc3RhY2suUyBnY2MtNC4zLjEvYm9laG0tZ2MvaWE2NF9zYXZlX3JlZ3NfaW5fc3RhY2suUworLS0tIGdjYy00LjMuMS5vcmlnL2JvZWhtLWdjL2lhNjRfc2F2ZV9yZWdzX2luX3N0YWNrLlMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjEvYm9laG0tZ2MvaWE2NF9zYXZlX3JlZ3NfaW5fc3RhY2suUwkyMDA4LTA2LTEwIDE0OjU4OjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxNSBAQAorKyAgICAgICAgLnRleHQKKysgICAgICAgIC5hbGlnbiAxNgorKyAgICAgICAgLmdsb2JhbCBHQ19zYXZlX3JlZ3NfaW5fc3RhY2sKKysgICAgICAgIC5wcm9jIEdDX3NhdmVfcmVnc19pbl9zdGFjaworK0dDX3NhdmVfcmVnc19pbl9zdGFjazoKKysgICAgICAgIC5ib2R5Zm9vLm1wZworKyAgICAgICAgZmx1c2hycworKyAgICAgICAgOzsKKysgICAgICAgIG1vdiByOD1hci5ic3AKKysgICAgICAgIGJyLnJldC5zcHRrLmZldyBycAorKyAgICAgICAgLmVuZHAgR0Nfc2F2ZV9yZWdzX2luX3N0YWNrCisrCisrI2lmZGVmIF9fbGludXhfXworKwkuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2JvZWhtLWdjL2lhNjRfc2F2ZV9yZWdzX2luX3N0YWNrLnMgZ2NjLTQuMy4xL2JvZWhtLWdjL2lhNjRfc2F2ZV9yZWdzX2luX3N0YWNrLnMKKy0tLSBnY2MtNC4zLjEub3JpZy9ib2VobS1nYy9pYTY0X3NhdmVfcmVnc19pbl9zdGFjay5zCTIwMDEtMTAtMTUgMDY6NTc6NTkuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2JvZWhtLWdjL2lhNjRfc2F2ZV9yZWdzX2luX3N0YWNrLnMJMjAwOC0wNi0xMCAxNDo1ODoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xLDEyICswLDAgQEAKKy0gICAgICAgIC50ZXh0CistICAgICAgICAuYWxpZ24gMTYKKy0gICAgICAgIC5nbG9iYWwgR0Nfc2F2ZV9yZWdzX2luX3N0YWNrCistICAgICAgICAucHJvYyBHQ19zYXZlX3JlZ3NfaW5fc3RhY2sKKy1HQ19zYXZlX3JlZ3NfaW5fc3RhY2s6CistICAgICAgICAuYm9keQorLSAgICAgICAgZmx1c2hycworLSAgICAgICAgOzsKKy0gICAgICAgIG1vdiByOD1hci5ic3AKKy0gICAgICAgIGJyLnJldC5zcHRrLmZldyBycAorLSAgICAgICAgLmVuZHAgR0Nfc2F2ZV9yZWdzX2luX3N0YWNrCistCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2xpYmZmaS9zcmMvYWxwaGEvb3NmLlMgZ2NjLTQuMy4xL2xpYmZmaS9zcmMvYWxwaGEvb3NmLlMKKy0tLSBnY2MtNC4zLjEub3JpZy9saWJmZmkvc3JjL2FscGhhL29zZi5TCTIwMDctMDQtMDYgMTg6MjQ6MTYuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2xpYmZmaS9zcmMvYWxwaGEvb3NmLlMJMjAwOC0wNi0xMCAxNDo1ODoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zNTgsNCArMzU4LDggQEAKKyAJLmJ5dGUJMTYJCSMgdWxlYjEyOCBvZmZzZXQgMTYqLTgKKyAJLmFsaWduIDMKKyAkTEVGREUzOgorKworKyNpZmRlZiBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgorICNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9saWJmZmkvc3JjL2FybS9zeXN2LlMgZ2NjLTQuMy4xL2xpYmZmaS9zcmMvYXJtL3N5c3YuUworLS0tIGdjYy00LjMuMS5vcmlnL2xpYmZmaS9zcmMvYXJtL3N5c3YuUwkyMDA3LTA5LTA0IDE5OjUyOjQ1LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMS9saWJmZmkvc3JjL2FybS9zeXN2LlMJMjAwOC0wNi0xMCAxNDo1ODoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yOTMsMyArMjkzLDYgQEAKKyAJVU5XSU5EIC5mbmVuZAorICAgICAgICAgLnNpemUgICAgQ05BTUUoZmZpX2Nsb3N1cmVfU1lTViksLmZmaV9jbG9zdXJlX1NZU1ZfZW5kLUNOQU1FKGZmaV9jbG9zdXJlX1NZU1YpCisgCisrI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXworKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsJXByb2diaXRzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2xpYmZmaS9zcmMvaWE2NC91bml4LlMgZ2NjLTQuMy4xL2xpYmZmaS9zcmMvaWE2NC91bml4LlMKKy0tLSBnY2MtNC4zLjEub3JpZy9saWJmZmkvc3JjL2lhNjQvdW5peC5TCTIwMDUtMDMtMzAgMjM6NDk6MTkuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2xpYmZmaS9zcmMvaWE2NC91bml4LlMJMjAwOC0wNi0xMCAxNDo1ODoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC01NTMsMyArNTUzLDcgQEAKKyAJZGF0YTgJQHBjcmVsKC5MbGRfaGZhX2Zsb2F0KQkJLy8gRkZJX0lBNjRfVFlQRV9IRkFfRkxPQVQKKyAJZGF0YTgJQHBjcmVsKC5MbGRfaGZhX2RvdWJsZSkJCS8vIEZGSV9JQTY0X1RZUEVfSEZBX0RPVUJMRQorIAlkYXRhOAlAcGNyZWwoLkxsZF9oZmFfbGRvdWJsZSkJLy8gRkZJX0lBNjRfVFlQRV9IRkFfTERPVUJMRQorKworKyNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9saWJmZmkvc3JjL202OGsvc3lzdi5TIGdjYy00LjMuMS9saWJmZmkvc3JjL202OGsvc3lzdi5TCistLS0gZ2NjLTQuMy4xLm9yaWcvbGliZmZpL3NyYy9tNjhrL3N5c3YuUwkyMDA3LTA1LTEwIDIzOjI5OjA0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMS9saWJmZmkvc3JjL202OGsvc3lzdi5TCTIwMDgtMDYtMTAgMTQ6NTg6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMjA3LDMgKzIwNyw3IEBACisgCXJ0cworIAlDRklfRU5EUFJPQygpCisgCS5zaXplCWZmaV9jbG9zdXJlX3N0cnVjdF9TWVNWLC4tZmZpX2Nsb3N1cmVfc3RydWN0X1NZU1YKKysKKysjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4xLm9yaWcvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjQuUyBnY2MtNC4zLjEvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjQuUworLS0tIGdjYy00LjMuMS5vcmlnL2xpYmZmaS9zcmMvcG93ZXJwYy9saW51eDY0LlMJMjAwNy0xMS0xNyAwMDoyNDo1My4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjEvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjQuUwkyMDA4LTA2LTEwIDE0OjU4OjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTE3OSwzICsxNzksNyBAQAorIAkuYWxpZ24gMworIC5MRUZERTE6CisgI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXworKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2xpYmZmaS9zcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUyBnY2MtNC4zLjEvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TCistLS0gZ2NjLTQuMy4xLm9yaWcvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TCTIwMDUtMDgtMTEgMjM6MTg6MjQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2xpYmZmaS9zcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUwkyMDA4LTA2LTEwIDE0OjU4OjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTIwNCwzICsyMDQsNyBAQAorIAkuYWxpZ24gMworIC5MRUZERTE6CisgI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXworKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2xpYmZmaS9zcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIGdjYy00LjMuMS9saWJmZmkvc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUworLS0tIGdjYy00LjMuMS5vcmlnL2xpYmZmaS9zcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TCTIwMDctMTItMDEgMjI6MDA6MDQuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4xL2xpYmZmaS9zcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TCTIwMDgtMDYtMTAgMTQ6NTg6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMjk1LDMgKzI5NSw3IEBACisgLkxFRkRFMToKKyAKKyAjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4xLm9yaWcvbGliZmZpL3NyYy9wb3dlcnBjL3N5c3YuUyBnY2MtNC4zLjEvbGliZmZpL3NyYy9wb3dlcnBjL3N5c3YuUworLS0tIGdjYy00LjMuMS5vcmlnL2xpYmZmaS9zcmMvcG93ZXJwYy9zeXN2LlMJMjAwNy0xMi0wMSAyMjowMDowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjEvbGliZmZpL3NyYy9wb3dlcnBjL3N5c3YuUwkyMDA4LTA2LTEwIDE0OjU4OjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTIyMywzICsyMjMsNyBAQAorICAgICAgIC5hbGlnbiAyCisgLkxFRkRFMToKKyAjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4xLm9yaWcvbGliZmZpL3NyYy9zMzkwL3N5c3YuUyBnY2MtNC4zLjEvbGliZmZpL3NyYy9zMzkwL3N5c3YuUworLS0tIGdjYy00LjMuMS5vcmlnL2xpYmZmaS9zcmMvczM5MC9zeXN2LlMJMjAwMy0xMC0yMSAyMTowMTo1OC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjEvbGliZmZpL3NyYy9zMzkwL3N5c3YuUwkyMDA4LTA2LTEwIDE0OjU4OjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTQyNywzICs0MjcsNiBAQAorIAorICNlbmRpZgorIAorKyNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9saWJmZmkvc3JjL3NwYXJjL3Y4LlMgZ2NjLTQuMy4xL2xpYmZmaS9zcmMvc3BhcmMvdjguUworLS0tIGdjYy00LjMuMS5vcmlnL2xpYmZmaS9zcmMvc3BhcmMvdjguUwkyMDA0LTExLTIyIDE5OjM1OjE2LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMS9saWJmZmkvc3JjL3NwYXJjL3Y4LlMJMjAwOC0wNi0xMCAxNDo1ODoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNjUsMyArMjY1LDcgQEAKKyAJLmJ5dGUJMHgxZgkhIHVsZWIxMjggMHgxZgorIAkuYWxpZ24JV1MKKyAuTExFRkRFMjoKKysKKysjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4xLm9yaWcvbGliZmZpL3NyYy9zcGFyYy92OS5TIGdjYy00LjMuMS9saWJmZmkvc3JjL3NwYXJjL3Y5LlMKKy0tLSBnY2MtNC4zLjEub3JpZy9saWJmZmkvc3JjL3NwYXJjL3Y5LlMJMjAwNC0wMS0yNSAwNzo1ODozMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjEvbGliZmZpL3NyYy9zcGFyYy92OS5TCTIwMDgtMDYtMTAgMTQ6NTg6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMzAwLDMgKzMwMCw3IEBACisgCS5hbGlnbiA4CisgLkxMRUZERTI6CisgI2VuZGlmCisrCisrI2lmZGVmIF9fbGludXhfXworKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2xpYmZmaS9zcmMveDg2L3N5c3YuUyBnY2MtNC4zLjEvbGliZmZpL3NyYy94ODYvc3lzdi5TCistLS0gZ2NjLTQuMy4xLm9yaWcvbGliZmZpL3NyYy94ODYvc3lzdi5TCTIwMDgtMDEtMzAgMTU6MzY6NTguMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4xL2xpYmZmaS9zcmMveDg2L3N5c3YuUwkyMDA4LTA2LTEwIDE0OjU4OjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTQzMCwzICs0MzAsNyBAQAorICNlbmRpZgorIAorICNlbmRpZiAvKiBpZm5kZWYgX194ODZfNjRfXyAqLworKworKyNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9saWJmZmkvc3JjL3g4Ni91bml4NjQuUyBnY2MtNC4zLjEvbGliZmZpL3NyYy94ODYvdW5peDY0LlMKKy0tLSBnY2MtNC4zLjEub3JpZy9saWJmZmkvc3JjL3g4Ni91bml4NjQuUwkyMDA1LTA1LTA1IDA2OjA2OjM4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMS9saWJmZmkvc3JjL3g4Ni91bml4NjQuUwkyMDA4LTA2LTEwIDE0OjU4OjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTQxMCwzICs0MTAsNyBAQAorIC5MRUZERTM6CisgCisgI2VuZGlmIC8qIF9feDg2XzY0X18gKi8KKysKKysjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjEvMjMwLXByMzQ1NzEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzIzMC1wcjM0NTcxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZDBjMzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzIzMC1wcjM0NTcxLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzY0X2FsbF9nY2M0My1wcjM0NTcxLnBhdGNoCitodHRwOi8vZ2NjLmdudS5vcmcvUFIzNDU3MQorCisyMDA3LTEyLTI2ICBSYXNrIEluZ2VtYW5uIExhbWJlcnRzZW4gIDxyYXNrQHN5Z2VodXMuZGs+CisKKwlQUiB0YXJnZXQvMzQ1NzEKKwkqIGNvbmZpZy9hbHBoYS9hbHBoYS5jIChhbHBoYV9jYW5ub3RfZm9yY2VfY29uc3RfbWVtKTogVXNlCisJc3ltYm9saWNfb3BlcmFuZC4KKwkqIHZhcmFzbS5jIChvdXRwdXRfY29uc3RhbnRfcG9vbF8xKTogRml4IHR5cG8uCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4xLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5jIGdjYy00LjMuMS9nY2MvY29uZmlnL2FscGhhL2FscGhhLmMKKy0tLSBnY2MtNC4zLjEub3JpZy9nY2MvY29uZmlnL2FscGhhL2FscGhhLmMJMjAwOC0wMi0wNyAxODo0NToyNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjEvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5jCTIwMDgtMDYtMTAgMTQ6NTg6MjQuMDAwMDAwMDAwICswMjAwCitAQCAtMTExMyw4ICsxMTEzLDcgQEAKKyBzdGF0aWMgYm9vbAorIGFscGhhX2Nhbm5vdF9mb3JjZV9jb25zdF9tZW0gKHJ0eCB4KQorIHsKKy0gIGVudW0gcnR4X2NvZGUgY29kZSA9IEdFVF9DT0RFICh4KTsKKy0gIHJldHVybiBjb2RlID09IFNZTUJPTF9SRUYgfHwgY29kZSA9PSBMQUJFTF9SRUYgfHwgY29kZSA9PSBDT05TVDsKKysgIHJldHVybiBzeW1ib2xpY19vcGVyYW5kICh4LCBHRVRfTU9ERSAoeCkpOworIH0KKyAKKyAvKiBXZSBkbyBub3QgYWxsb3cgaW5kaXJlY3QgY2FsbHMgdG8gYmUgb3B0aW1pemVkIGludG8gc2libGluZyBjYWxscywgbm9yCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy92YXJhc20uYyBnY2MtNC4zLjEvZ2NjL3ZhcmFzbS5jCistLS0gZ2NjLTQuMy4xLm9yaWcvZ2NjL3ZhcmFzbS5jCTIwMDctMTItMDUgMjI6NTU6MTAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4xL2djYy92YXJhc20uYwkyMDA4LTA2LTEwIDE0OjU4OjI0LjAwMDAwMDAwMCArMDIwMAorQEAgLTM3MTAsNyArMzcxMCw3IEBACisgICAgICAgLyogRkFMTFRIUlUgICovCisgCisgICAgIGNhc2UgTEFCRUxfUkVGOgorLSAgICAgIHRtcCA9IFhFWFAgKHgsIDApOworKyAgICAgIHRtcCA9IFhFWFAgKHRtcCwgMCk7CisgICAgICAgZ2NjX2Fzc2VydCAoIUlOU05fREVMRVRFRF9QICh0bXApKTsKKyAgICAgICBnY2NfYXNzZXJ0ICghTk9URV9QICh0bXApCisgCQkgIHx8IE5PVEVfS0lORCAodG1wKSAhPSBOT1RFX0lOU05fREVMRVRFRCk7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzI0MC1wcjI1MzQzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8yNDAtcHIyNTM0My5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzZmNjA3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8yNDAtcHIyNTM0My5wYXRjaApAQCAtMCwwICsxLDIxIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby82Nl9hbGxfZ2NjNDMtcHIyNTM0My5wYXRjaAoraHR0cDovL2djYy5nbnUub3JnL1BSMjUzNDMKKworc25pcGVkIGZyb20gRGViaWFuCisKKzIwMDgtMDQtMjcgIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorCisJKiBjb25maWcvaG9zdC1saW51eC5jIChUUllfRU1QVFlfVk1fU1BBQ0UpOiBEZWZpbmUgZm9yIF9fbWM2ODAwMF9fLgorCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvaG9zdC1saW51eC5jIGdjYy00LjMuMS9nY2MvY29uZmlnL2hvc3QtbGludXguYworLS0tIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvaG9zdC1saW51eC5jCTIwMDctMDgtMDIgMTI6NDk6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2djYy9jb25maWcvaG9zdC1saW51eC5jCTIwMDgtMDYtMTAgMTQ6NTg6MjguMDAwMDAwMDAwICswMjAwCitAQCAtODQsNiArODQsOCBAQAorICMgZGVmaW5lIFRSWV9FTVBUWV9WTV9TUEFDRQkweDgwMDAwMDAwMDAKKyAjZWxpZiBkZWZpbmVkKF9fc3BhcmNfXykKKyAjIGRlZmluZSBUUllfRU1QVFlfVk1fU1BBQ0UJMHg2MDAwMDAwMAorKyNlbGlmIGRlZmluZWQoX19tYzY4MDAwX18pCisrIyBkZWZpbmUgVFJZX0VNUFRZX1ZNX1NQQUNFCTB4NDAwMDAwMDAKKyAjZWxzZQorICMgZGVmaW5lIFRSWV9FTVBUWV9WTV9TUEFDRQkwCisgI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzI1MC1zaC1wcjI0ODM2LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8yNTAtc2gtcHIyNDgzNi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTNlMjY0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8yNTAtc2gtcHIyNDgzNi5wYXRjaApAQCAtMCwwICsxLDI4IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby83NF9hbGxfc2gtcHIyNDgzNi5wYXRjaAoraHR0cDovL3NvdXJjZWZvcmdlLm5ldC9tYWlsYXJjaGl2ZS9mb3J1bS5waHA/dGhyZWFkX2lkPTg5NTkzMDQmZm9ydW1faWQ9NTM0OAoraHR0cDovL2djYy5nbnUub3JnL1BSMjQ4MzYKKworZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9nY2MvY29uZmlndXJlIGdjYy00LjMuMS9nY2MvY29uZmlndXJlCistLS0gZ2NjLTQuMy4xLm9yaWcvZ2NjL2NvbmZpZ3VyZQkyMDA4LTA2LTEwIDE0OjU3OjQ4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMS9nY2MvY29uZmlndXJlCTIwMDgtMDYtMTAgMTQ6NTg6MzIuMDAwMDAwMDAwICswMjAwCitAQCAtMTQ3MDksNyArMTQ3MDksNyBAQAorIAl0bHNfZmlyc3RfbWlub3I9MTQKKyAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCisgCTs7CistICBzaC0qLSogfCBzaFszNF0tKi0qKQorKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCisgICAgIGNvbmZ0ZXN0X3M9JworIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKKyBmb286CS5sb25nCTI1CitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWd1cmUuYWMgZ2NjLTQuMy4xL2djYy9jb25maWd1cmUuYWMKKy0tLSBnY2MtNC4zLjEub3JpZy9nY2MvY29uZmlndXJlLmFjCTIwMDgtMDYtMTAgMTQ6NTc6NDguMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2djYy9jb25maWd1cmUuYWMJMjAwOC0wNi0xMCAxNDo1ODozMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNTM3LDcgKzI1MzcsNyBAQAorIAl0bHNfZmlyc3RfbWlub3I9MTQKKyAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCisgCTs7CistICBzaC0qLSogfCBzaFszNF0tKi0qKQorKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCisgICAgIGNvbmZ0ZXN0X3M9JworIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKKyBmb286CS5sb25nCTI1CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzI2MC11Y2xpYmMtY29uZi1ub3Vwc3RyZWFtLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8yNjAtdWNsaWJjLWNvbmYtbm91cHN0cmVhbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTc2OTY4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8yNjAtdWNsaWJjLWNvbmYtbm91cHN0cmVhbS5wYXRjaApAQCAtMCwwICsxLDEzIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL3VjbGliYy85MF9hbGxfMTAzLXVjbGliYy1jb25mLW5vdXBzdHJlYW0ucGF0Y2gKK2RpZmYgLWR1ck4gZ2NjLTQuMy4xLm9yaWcvZ2NjL2NvbmZpZy5nY2MgZ2NjLTQuMy4xL2djYy9jb25maWcuZ2NjCistLS0gZ2NjLTQuMy4xLm9yaWcvZ2NjL2NvbmZpZy5nY2MJMjAwOC0wNi0xMCAxNDo1ODowOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjEvZ2NjL2NvbmZpZy5nY2MJMjAwOC0wNi0xMCAxNDo1ODozNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMTQ5LDcgKzIxNDksNyBAQAorICAgICAgICAgOzsKKyBzaC0qLWVsZiogfCBzaFsxMjM0NmxdKi0qLWVsZiogfCBzaCotKi1rYW9zKiB8IFwKKyBzaC0qLXN5bWJpYW5lbGYqIHwgc2hbMTIzNDZsXSotKi1zeW1iaWFuZWxmKiB8IFwKKy0gIHNoLSotbGludXgqIHwgc2hbMzQ2bGJlXSotKi1saW51eCogfCBcCisrICBzaCotKi1saW51eCogfCBzaFszNDZsYmVdKi0qLWxpbnV4KiB8IFwKKyAgIHNoLSotbmV0YnNkZWxmKiB8IHNobCotKi1uZXRic2RlbGYqIHwgc2g1LSotbmV0YnNkKiB8IHNoNWwqLSotbmV0YnNkKiB8IFwKKyAgICBzaDY0LSotbmV0YnNkKiB8IHNoNjRsKi0qLW5ldGJzZCopCisgCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gc2gvdC1zaCBzaC90LWVsZiIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjEvMjcwLW1pc3NpbmctZXhlY2luZm9faC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjEvMjcwLW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTc0OWIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8yNzAtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvdWNsaWJjLzkwX2FsbF8zMDEtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCBnY2MtNC4zLjEvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCistLS0gZ2NjLTQuMy4xLm9yaWcvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCTIwMDctMDQtMjMgMjM6MTA6MDkuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAkyMDA4LTA2LTEwIDE0OjU4OjU0LjAwMDAwMDAwMCArMDIwMAorQEAgLTUwMyw3ICs1MDMsNyBAQAorICNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX0dMSUJDX18pCisgIyBpbmNsdWRlIDxmZWF0dXJlcy5oPgorICMgaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxIHx8IF9fR0xJQkNfXyA+IDIpIFwKKy0gICAgICYmICFkZWZpbmVkKF9faWE2NF9fKQorKyAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pICYmICFkZWZpbmVkKF9fVUNMSUJDX18pCisgIyAgIGlmbmRlZiBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgICAgZGVmaW5lIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjEvMjgwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjEvMjgwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWEzNmY4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8yODAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvdWNsaWJjLzkwX2FsbF8zMDMtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2xpYnN0ZGMrKy12My9jb25maWd1cmUgZ2NjLTQuMy4xL2xpYnN0ZGMrKy12My9jb25maWd1cmUKKy0tLSBnY2MtNC4zLjEub3JpZy9saWJzdGRjKystdjMvY29uZmlndXJlCTIwMDgtMDYtMTAgMTQ6NTg6NDMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2xpYnN0ZGMrKy12My9jb25maWd1cmUJMjAwOC0wNi0xMCAxNDo1ODo1OC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zOTAwNiw2ICszOTAwNiw5IEBACisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaW5jbHVkZSA8Y29tcGxleC5oPgorKyNpZmRlZiBfX1VDTElCQ19fCisrI2Vycm9yIHVnbHkgaGFjayB0byBtYWtlIHN1cmUgY29uZmlndXJlIHRlc3QgZmFpbHMgaGVyZSBmb3IgY3Jvc3MgdW50aWwgdUNsaWJjIHN1cHBvcnRzIHRoZSBjb21wbGV4IGZ1bmNzCisrI2VuZGlmCisgaW50CisgbWFpbiAoKQorIHsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjEvMjkwLWluZGV4X21hY3JvLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8yOTAtaW5kZXhfbWFjcm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU3OTRhYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjEvMjkwLWluZGV4X21hY3JvLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvdWNsaWJjLzkwX2FsbF8zMDQtaW5kZXhfbWFjcm8ucGF0Y2gKK2RpZmYgLWR1ck4gZ2NjLTQuMy4xLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUgZ2NjLTQuMy4xL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCistLS0gZ2NjLTQuMy4xLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUJMjAwOC0wMS0zMSAxOTo0NDo1NS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUJMjAwOC0wNi0xMCAxNDo1OTowMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC01OSw2ICs1OSw5IEBACisgI2luY2x1ZGUgPGJpdHMvZ3Roci5oPgorICNpbmNsdWRlIDx0cjEvZnVuY3Rpb25hbD4KKyAKKysvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCisrI3VuZGVmIGluZGV4CisrCisgIyBpZmRlZiBfX0dDCisgIyAgIGRlZmluZSBfX0dDX0NPTlNUIGNvbnN0CisgIyBlbHNlCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oIGdjYy00LjMuMS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAorLS0tIGdjYy00LjMuMS5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCTIwMDctMDUtMDQgMTc6MDY6NDYuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCTIwMDgtMDYtMTAgMTQ6NTk6MDIuMDAwMDAwMDAwICswMjAwCitAQCAtNTQsNiArNTQsOSBAQAorICNpbmNsdWRlIDxleHQvbWVtb3J5PiAvLyBGb3IgdW5pbml0aWFsaXplZF9jb3B5X24KKyAjaW5jbHVkZSA8ZXh0L251bWVyaWM+IC8vIEZvciBwb3dlcgorIAorKy8qIGNvcGUgdy8gaW5kZXggZGVmaW5lZCBhcyBtYWNybywgU3VTdjMgcHJvcG9zYWwgKi8KKysjdW5kZWYgaW5kZXgKKysKKyBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorIAorICAgdXNpbmcgc3RkOjpzaXplX3Q7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzMwMC1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjEvMzAwLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NzJmYzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzMwMC1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL3VjbGliYy85MF9hbGxfMzA1LWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMgZ2NjLTQuMy4xL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMKKy0tLSBnY2MtNC4zLjEub3JpZy9saWJtdWRmbGFwL21mLWhvb2tzMi5jCTIwMDUtMDktMjMgMjM6NTg6MzkuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMJMjAwOC0wNi0xMCAxNDo1OTowNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC00MjcsNyArNDI3LDcgQEAKKyB7CisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzLCBuLCBfX01GX0NIRUNLX1dSSVRFLCAiYnplcm8gcmVnaW9uIik7CistICBiemVybyAocywgbik7CisrICBtZW1zZXQgKHMsIDAsIG4pOworIH0KKyAKKyAKK0BAIC00MzcsNyArNDM3LDcgQEAKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHNyYywgbiwgX19NRl9DSEVDS19SRUFELCAiYmNvcHkgc3JjIik7CisgICBNRl9WQUxJREFURV9FWFRFTlQoZGVzdCwgbiwgX19NRl9DSEVDS19XUklURSwgImJjb3B5IGRlc3QiKTsKKy0gIGJjb3B5IChzcmMsIGRlc3QsIG4pOworKyAgbWVtbW92ZSAoZGVzdCwgc3JjLCBuKTsKKyB9CisgCisgCitAQCAtNDQ3LDcgKzQ0Nyw3IEBACisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzMSwgbiwgX19NRl9DSEVDS19SRUFELCAiYmNtcCAxc3QgYXJnIik7CisgICBNRl9WQUxJREFURV9FWFRFTlQoczIsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjbXAgMm5kIGFyZyIpOworLSAgcmV0dXJuIGJjbXAgKHMxLCBzMiwgbik7CisrICByZXR1cm4gbWVtY21wIChzMSwgczIsIG4pOworIH0KKyAKKyAKK0BAIC00NTYsNyArNDU2LDcgQEAKKyAgIHNpemVfdCBuID0gc3RybGVuIChzKTsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIENMQU1QQUREKG4sIDEpLCBfX01GX0NIRUNLX1JFQUQsICJpbmRleCByZWdpb24iKTsKKy0gIHJldHVybiBpbmRleCAocywgYyk7CisrICByZXR1cm4gc3RyY2hyIChzLCBjKTsKKyB9CisgCisgCitAQCAtNDY1LDcgKzQ2NSw3IEBACisgICBzaXplX3QgbiA9IHN0cmxlbiAocyk7CisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzLCBDTEFNUEFERChuLCAxKSwgX19NRl9DSEVDS19SRUFELCAicmluZGV4IHJlZ2lvbiIpOworLSAgcmV0dXJuIHJpbmRleCAocywgYyk7CisrICByZXR1cm4gc3RycmNociAocywgYyk7CisgfQorIAorIC8qIFhYWDogIHN0cGNweSwgbWVtY2NweSAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8zMTAtYXJtLXNvZnRmbG9hdC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjEvMzEwLWFybS1zb2Z0ZmxvYXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU3ZWE3YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjEvMzEwLWFybS1zb2Z0ZmxvYXQucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCBnY2MtNC4zLjEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKKy0tLSBnY2MtNC4zLjEub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDA3LTExLTA4IDE0OjQ0OjA5LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMS9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDA4LTA3LTIzIDE1OjMwOjU3LjAwMDAwMDAwMCArMDIwMAorQEAgLTYwLDcgKzYwLDcgQEAKKyAgICAle3NoYXJlZDotbGN9IFwKKyAgICAleyFzaGFyZWQ6JXtwcm9maWxlOi1sY19wfSV7IXByb2ZpbGU6LWxjfX0iCisgCistI2RlZmluZSBMSUJHQ0NfU1BFQyAiJXttc29mdC1mbG9hdDotbGZsb2F0fSAle21mbG9hdC1hYmk9c29mdCo6LWxmbG9hdH0gLWxnY2MiCisrI2RlZmluZSBMSUJHQ0NfU1BFQyAiLWxnY2MiCisgCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorIAorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9nY2MvY29uZmlnL2FybS90LWxpbnV4IGdjYy00LjMuMS9nY2MvY29uZmlnL2FybS90LWxpbnV4CistLS0gZ2NjLTQuMy4xLm9yaWcvZ2NjL2NvbmZpZy9hcm0vdC1saW51eAkyMDA2LTExLTA5IDIzOjE0OjI3LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMS9nY2MvY29uZmlnL2FybS90LWxpbnV4CTIwMDgtMDctMjMgMTk6MTU6MjUuMDAwMDAwMDAwICswMjAwCitAQCAtMyw3ICszLDEyIEBACisgVEFSR0VUX0xJQkdDQzJfQ0ZMQUdTID0gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZQSUMKKyAKKyBMSUIxQVNNU1JDID0gYXJtL2xpYjFmdW5jcy5hc20KKy1MSUIxQVNNRlVOQ1MgPSBfdWRpdnNpMyBfZGl2c2kzIF91bW9kc2kzIF9tb2RzaTMgX2R2bWRfbG54CisrTElCMUFTTUZVTkNTID0gX3VkaXZzaTMgX2RpdnNpMyBfdW1vZHNpMyBfbW9kc2kzIF9kdm1kX3RscyBfYmJfaW5pdF9mdW5jIFwKKysJX2NhbGxfdmlhX3JYIF9pbnRlcndvcmtfY2FsbF92aWFfclggXAorKwlfbHNocmRpMyBfYXNocmRpMyBfYXNobGRpMyBcCisrCV9uZWdkZjIgX2FkZHN1YmRmMyBfbXVsZGl2ZGYzIF9jbXBkZjIgX3Vub3JkZGYyIF9maXhkZnNpIF9maXh1bnNkZnNpIFwKKysJX3RydW5jZGZzZjIgX25lZ3NmMiBfYWRkc3Vic2YzIF9tdWxkaXZzZjMgX2NtcHNmMiBfdW5vcmRzZjIgXAorKwlfZml4c2ZzaSBfZml4dW5zc2ZzaSBfZmxvYXRkaWRmIF9mbG9hdGRpc2YgX2Zsb2F0dW5kaWRmIF9mbG9hdHVuZGlzZgorIAorICMgTVVMVElMSUJfT1BUSU9OUyA9IG1oYXJkLWZsb2F0L21zb2Z0LWZsb2F0CisgIyBNVUxUSUxJQl9ESVJOQU1FUyA9IGhhcmQtZmxvYXQgc29mdC1mbG9hdApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8zMjAtYWxwaGEtc2lnbmFsX2gucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzMyMC1hbHBoYS1zaWduYWxfaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2UxNzk2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8zMjAtYWxwaGEtc2lnbmFsX2gucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorLS0tIGdjYy00LjIuMS1zdG9jay9nY2MvY29uZmlnL2FscGhhL2xpbnV4LXVud2luZC5oCTIwMDUtMDYtMjQgMjA6MjI6NDEuMDAwMDAwMDAwIC0wNTAwCisrKysgZ2NjLTQuMi4xL2djYy9jb25maWcvYWxwaGEvbGludXgtdW53aW5kLmgJMjAwNy0wOS0wMSAyMDoyMTozNC4wMDAwMDAwMDAgLTA1MDAKK0BAIC0yOSw2ICsyOSw5IEBAIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAvKiBEbyBjb2RlIHJlYWRpbmcgdG8gaWRlbnRpZnkgYSBzaWduYWwgZnJhbWUsIGFuZCBzZXQgdGhlIGZyYW1lCisgICAgc3RhdGUgZGF0YSBhcHByb3ByaWF0ZWx5LiAgU2VlIHVud2luZC1kdzIuYyBmb3IgdGhlIHN0cnVjdHMuICAqLworIAorKy8qIERvbid0IHVzZSB0aGlzIGlmIGluaGliaXRfbGliYyBpcyBzZXQKKysgICBUaGUgYnVpbGQgZm9yIHRoaXMgdGFyZ2V0IHdpbGwgZmFpbCB0cnlpbmcgdG8gaW5jbHVkZSBtaXNzaW5nIGhlYWRlcnMgKi8KKysjaWZuZGVmIGluaGliaXRfbGliYworICNpbmNsdWRlIDxzaWduYWwuaD4KKyAjaW5jbHVkZSA8c3lzL3Vjb250ZXh0Lmg+CisgCitAQCAtODAsMyArODMsNCBAQCBhbHBoYV9mYWxsYmFja19mcmFtZV9zdGF0ZSAoc3RydWN0IF9VbndpCisgICBmcy0+cmV0YWRkcl9jb2x1bW4gPSA2NDsKKyAgIHJldHVybiBfVVJDX05PX1JFQVNPTjsKKyB9CisrI2VuZGlmIC8qIGluaGliaXRfbGliYyAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8zMzAtdW53aW5kLWZvci11Q2xpYmMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzMzMC11bndpbmQtZm9yLXVDbGliYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWY3ZjM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8zMzAtdW53aW5kLWZvci11Q2xpYmMucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9nY2MvY29uZmlnL3QtbGludXgtdWNsaWJjIGdjYy00LjMuMS9nY2MvY29uZmlnL3QtbGludXgtdWNsaWJjCistLS0gZ2NjLTQuMy4xLm9yaWcvZ2NjL2NvbmZpZy90LWxpbnV4LXVjbGliYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMS9nY2MvY29uZmlnL3QtbGludXgtdWNsaWJjCTIwMDgtMDctMjkgMTM6MDc6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDUgQEAKKysjIFJlbW92ZSBnbGliYyBzcGVjaWZpYyBmaWxlcyBhZGRlZCBpbiB0LWxpbnV4CisrU0hMSUJfTUFQRklMRVMgOj0gJChmaWx0ZXItb3V0ICQoc3JjZGlyKS9jb25maWcvbGliZ2NjLWdsaWJjLnZlciwgJChTSExJQl9NQVBGSUxFUykpCisrCisrIyBVc2UgdW53aW5kLWR3Mi1mZGUgaW5zdGVhZCBvZiB1bndpbmQtZHcyLWZkZS1nbGliYworK0xJQjJBRERFSCA6PSAkKHN1YnN0IHVud2luZC1kdzItZmRlLWdsaWJjLmMsdW53aW5kLWR3Mi1mZGUuYywkKExJQjJBRERFSCkpCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcuZ2NjIGdjYy00LjMuMS9nY2MvY29uZmlnLmdjYworLS0tIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcuZ2NjCTIwMDgtMDctMjkgMTM6MTE6MDIuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2djYy9jb25maWcuZ2NjCTIwMDgtMDctMjkgMTM6MTA6MDUuMDAwMDAwMDAwICswMjAwCitAQCAtMjY1MSw2ICsyNjUxLDEyIEBACisgCTs7CisgZXNhYworIAorKyMgUmF0aGVyIHRoYW4gaG9vayBpbnRvIGVhY2ggdGFyZ2V0LCBqdXN0IGRvIGl0IGFmdGVyIGFsbCB0aGUgbGludXgKKysjIHRhcmdldHMgaGF2ZSBiZWVuIHByb2Nlc3NlZAorK2Nhc2UgJHt0YXJnZXR9IGluCisrICAqLWxpbnV4LXVjbGliYyopIHRtX2RlZmluZXM9IiR7dG1fZGVmaW5lc30gVVNFX1VDTElCQyIgOyB0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IHQtbGludXgtdWNsaWJjIjs7CisrZXNhYworKworIGNhc2UgJHt0YXJnZXR9IGluCisgaVszNDU2N104Ni0qLWxpbnV4KmFvdXQqIHwgaVszNDU2N104Ni0qLWxpbnV4KmxpYmMxKQorIAl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IGkzODYvdC1nbW1fbWFsbG9jIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8zNDAtbWFrZS1tbm8tc3BlLXdvcmstYXMtZXhwZWN0ZWQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzM0MC1tYWtlLW1uby1zcGUtd29yay1hcy1leHBlY3RlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGMzMjkxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8zNDAtbWFrZS1tbm8tc3BlLXdvcmstYXMtZXhwZWN0ZWQucGF0Y2gKQEAgLTAsMCArMSw5MCBAQAorMjAwOC0wNC0wMyAgTmF0aGFuIEZyb3lkICA8ZnJveWRuakBjb2Rlc291cmNlcnkuY29tPgorCSAgICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBjb2Rlc291cmNlcnkuY29tPgorCisgICAgICAgICogY29uZmlnL3JzNjAwMC9yczYwMDAub3B0IChtc3BlKTogUmVtb3ZlIFZhciBwcm9wZXJ0eS4KKwkobWlzZWwpOiBMaWtld2lzZS4KKyAgICAgICAgKiBjb25maWcvcnM2MDAwL3JzNjAwMC5oIChyczYwMDBfc3BlKTogRGVjbGFyZS4KKwkocnM2MDAwX2lzZWwpOiBMaWtld2lzZS4KKyAgICAgICAgKiBjb25maWcvcnM2MDAwL3JzNjAwMC5jIChyczYwMDBfc3BlKTogTmV3IHZhcmlhYmxlLgorCShyczYwMDBfaXNlbCk6IE5ldyB2YXJpYWJsZS4KKyAgICAgICAgKHJzNjAwMF9oYW5kbGVfb3B0aW9uKTogSGFuZGxlIE9QVF9tc3BlIGFuZCBPUFRfbWlzZWwuCisKK0luZGV4OiBnY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmMJKHJldmlzaW9uIDEzNDY0MikKKysrKyBiL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5jCSh3b3JraW5nIGNvcHkpCitAQCAtMTc0LDkgKzE3NCwxNSBAQCBpbnQgcnM2MDAwX2llZWVxdWFkOworIC8qIE5vbnplcm8gdG8gdXNlIEFsdGlWZWMgQUJJLiAgKi8KKyBpbnQgcnM2MDAwX2FsdGl2ZWNfYWJpOworIAorKy8qIE5vbnplcm8gaWYgd2Ugd2FudCBTUEUgU0lNRCBpbnN0cnVjdGlvbnMuICAqLworK2ludCByczYwMDBfc3BlOworKworIC8qIE5vbnplcm8gaWYgd2Ugd2FudCBTUEUgQUJJIGV4dGVuc2lvbnMuICAqLworIGludCByczYwMDBfc3BlX2FiaTsKKyAKKysvKiBOb256ZXJvIHRvIHVzZSBpc2VsIGluc3RydWN0aW9ucy4gICovCisraW50IHJzNjAwMF9pc2VsOworKworIC8qIE5vbnplcm8gaWYgZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucyBhcmUgZG9uZSBpbiB0aGUgR1BScy4gICovCisgaW50IHJzNjAwMF9mbG9hdF9ncHJzID0gMDsKKyAKK0BAIC0yMTc3LDExICsyMTgzLDIxIEBAIHJzNjAwMF9oYW5kbGVfb3B0aW9uIChzaXplX3QgY29kZSwgY29uc3QKKyAgICAgICByczYwMDBfcGFyc2VfeWVzX25vX29wdGlvbiAoInZyc2F2ZSIsIGFyZywgJihUQVJHRVRfQUxUSVZFQ19WUlNBVkUpKTsKKyAgICAgICBicmVhazsKKyAKKysgICAgY2FzZSBPUFRfbWlzZWw6CisrICAgICAgcnM2MDAwX2V4cGxpY2l0X29wdGlvbnMuaXNlbCA9IHRydWU7CisrICAgICAgcnM2MDAwX2lzZWwgPSB2YWx1ZTsKKysgICAgICBicmVhazsKKysKKyAgICAgY2FzZSBPUFRfbWlzZWxfOgorICAgICAgIHJzNjAwMF9leHBsaWNpdF9vcHRpb25zLmlzZWwgPSB0cnVlOworICAgICAgIHJzNjAwMF9wYXJzZV95ZXNfbm9fb3B0aW9uICgiaXNlbCIsIGFyZywgJihyczYwMDBfaXNlbCkpOworICAgICAgIGJyZWFrOworIAorKyAgICBjYXNlIE9QVF9tc3BlOgorKyAgICAgIHJzNjAwMF9leHBsaWNpdF9vcHRpb25zLnNwZSA9IHRydWU7CisrICAgICAgcnM2MDAwX3NwZSA9IHZhbHVlOworKyAgICAgIGJyZWFrOworKworICAgICBjYXNlIE9QVF9tc3BlXzoKKyAgICAgICByczYwMDBfZXhwbGljaXRfb3B0aW9ucy5zcGUgPSB0cnVlOworICAgICAgIHJzNjAwMF9wYXJzZV95ZXNfbm9fb3B0aW9uICgic3BlIiwgYXJnLCAmKHJzNjAwMF9zcGUpKTsKK0luZGV4OiBnY2MvY29uZmlnL3JzNjAwMC9yczYwMDAub3B0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAub3B0CShyZXZpc2lvbiAxMzQ2NDIpCisrKysgYi9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAub3B0CSh3b3JraW5nIGNvcHkpCitAQCAtMTkwLDcgKzE5MCw3IEBAIFRhcmdldCBSZWplY3ROZWdhdGl2ZSBKb2luZWQKKyAtbXZyc2F2ZT15ZXMvbm8JRGVwcmVjYXRlZCBvcHRpb24uICBVc2UgLW12cnNhdmUvLW1uby12cnNhdmUgaW5zdGVhZAorIAorIG1pc2VsCistVGFyZ2V0IFZhcihyczYwMDBfaXNlbCkKKytUYXJnZXQKKyBHZW5lcmF0ZSBpc2VsIGluc3RydWN0aW9ucworIAorIG1pc2VsPQorQEAgLTE5OCw3ICsxOTgsNyBAQCBUYXJnZXQgUmVqZWN0TmVnYXRpdmUgSm9pbmVkCisgLW1pc2VsPXllcy9ubwlEZXByZWNhdGVkIG9wdGlvbi4gIFVzZSAtbWlzZWwvLW1uby1pc2VsIGluc3RlYWQKKyAKKyBtc3BlCistVGFyZ2V0IFZhcihyczYwMDBfc3BlKQorK1RhcmdldAorIEdlbmVyYXRlIFNQRSBTSU1EIGluc3RydWN0aW9ucyBvbiBFNTAwCisgCisgbXBhaXJlZAorSW5kZXg6IGdjYy9jb25maWcvcnM2MDAwL3JzNjAwMC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuaAkocmV2aXNpb24gMTM0NjQyKQorKysrIGIvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmgJKHdvcmtpbmcgY29weSkKK0BAIC0zNjcsNiArMzY3LDggQEAgZXh0ZXJuIGludCByczYwMDBfbG9uZ19kb3VibGVfdHlwZV9zaXplOworIGV4dGVybiBpbnQgcnM2MDAwX2llZWVxdWFkOworIGV4dGVybiBpbnQgcnM2MDAwX2FsdGl2ZWNfYWJpOworIGV4dGVybiBpbnQgcnM2MDAwX3NwZV9hYmk7CisrZXh0ZXJuIGludCByczYwMDBfc3BlOworK2V4dGVybiBpbnQgcnM2MDAwX2lzZWw7CisgZXh0ZXJuIGludCByczYwMDBfZmxvYXRfZ3ByczsKKyBleHRlcm4gaW50IHJzNjAwMF9hbGlnbm1lbnRfZmxhZ3M7CisgZXh0ZXJuIGNvbnN0IGNoYXIgKnJzNjAwMF9zY2hlZF9pbnNlcnRfbm9wc19zdHI7CisKKwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8zNTAtc2gtd2l0aG91dC1oZWFkZXJzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8zNTAtc2gtd2l0aG91dC1oZWFkZXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZGRiNjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzM1MC1zaC13aXRob3V0LWhlYWRlcnMucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorT24gMjAwODEwMTEsIEtoZW0gUkFKIHdyaXRlczoKKyBZb3UgaGF2ZSB0byBiYXIgZ2NjIHRyeWluZyB0byBidWlsZCB1bndpbmRpbmcgYXQgc3RhZ2UgMS4gVHJ5IHRoZQorIGF0dGFjaGVkIHBhdGNoIGFuZCBzZWUgaWYgaXQgaGVscHMuCisKKyBnY2MvY29uZmlnL3NoL2xpbnV4LXVud2luZC5oIHwgICAgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK0luZGV4OiBnY2MtNF8yLWJyYW5jaC9nY2MvY29uZmlnL3NoL2xpbnV4LXVud2luZC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTRfMi1icmFuY2gub3JpZy9nY2MvY29uZmlnL3NoL2xpbnV4LXVud2luZC5oCTIwMDgtMDctMDEgMTc6MjQ6NDAuMDAwMDAwMDAwIC0wNzAwCisrKysgZ2NjLTRfMi1icmFuY2gvZ2NjL2NvbmZpZy9zaC9saW51eC11bndpbmQuaAkyMDA4LTA3LTAxIDE3OjI1OjQ3LjAwMDAwMDAwMCAtMDcwMAorQEAgLTI2LDYgKzI2LDggQEAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDTworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworIAorKyNpZm5kZWYgaW5oaWJpdF9saWJjCisrCisgLyogRG8gY29kZSByZWFkaW5nIHRvIGlkZW50aWZ5IGEgc2lnbmFsIGZyYW1lLCBhbmQgc2V0IHRoZSBmcmFtZQorICAgIHN0YXRlIGRhdGEgYXBwcm9wcmlhdGVseS4gIFNlZSB1bndpbmQtZHcyLmMgZm9yIHRoZSBzdHJ1Y3RzLiAgKi8KKyAKK0BAIC0yNTEsMyArMjUzLDQgQEAgc2hfZmFsbGJhY2tfZnJhbWVfc3RhdGUgKHN0cnVjdCBfVW53aW5kXworICAgcmV0dXJuIF9VUkNfTk9fUkVBU09OOworIH0KKyAjZW5kaWYgLyogZGVmaW5lZCAoX19TSDVfXykgKi8KKysjZW5kaWYgLyogaWZuZGVmIGluaGliaXRfbGliYyAqLworCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzM2MC11bmJyZWFrLWFybXY0dC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjEvMzYwLXVuYnJlYWstYXJtdjR0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMTRlMGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzM2MC11bmJyZWFrLWFybXY0dC5wYXRjaApAQCAtMCwwICsxLDExIEBACistLS0gZ2NjLTQuMy4yLm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCTIwMDktMDktMDggMjM6NDY6NDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4yL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAkyMDA5LTA5LTA4IDIzOjQ2OjUxLjAwMDAwMDAwMCArMDIwMAorQEAgLTQ0LDcgKzQ0LDcgQEAKKyAgICBUaGUgQVJNMTBURE1JIGNvcmUgaXMgdGhlIGRlZmF1bHQgZm9yIGFybXY1dCwgc28gc2V0CisgICAgU1VCVEFSR0VUX0NQVV9ERUZBVUxUIHRvIGFjaGlldmUgdGhpcy4gICovCisgI3VuZGVmICBTVUJUQVJHRVRfQ1BVX0RFRkFVTFQKKy0jZGVmaW5lIFNVQlRBUkdFVF9DUFVfREVGQVVMVCBUQVJHRVRfQ1BVX2FybTEwdGRtaQorKyNkZWZpbmUgU1VCVEFSR0VUX0NQVV9ERUZBVUxUIFRBUkdFVF9DUFVfYXJtOXRkbWkKKyAKKyAvKiBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUIGlzIHNldCBpbgorICAgIGNvbmZpZy5nY2MgZm9yIGJpZyBlbmRpYW4gY29uZmlndXJhdGlvbnMuICAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8zNzAtbGliZ2NjX2VoLmEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4xLzM3MC1saWJnY2NfZWguYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzI2M2FlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMS8zNzAtbGliZ2NjX2VoLmEucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorSGlnaGx5IGluc3BpcmVkIGJ5OgorICBodHRwOi8vbGFuZGxleS5uZXQvaGcvYWJvcmlnaW5hbC9maWxlLzdlMDc0N2E2NjVhYi9zb3VyY2VzL3BhdGNoZXMvZ2NjLWNvcmUtbGliZ2NjZWgucGF0Y2gKKworZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy8vbGliZ2NjL01ha2VmaWxlLmluIGdjYy00LjMuMS9saWJnY2MvTWFrZWZpbGUuaW4KKy0tLSBnY2MtNC4zLjEub3JpZy8vbGliZ2NjL01ha2VmaWxlLmluCTIwMDctMTItMjcgMTI6MjY6MDYuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4xL2xpYmdjYy9NYWtlZmlsZS5pbgkyMDExLTA5LTAyIDEyOjIxOjIzLjc4MTU0NDY3OSArMDIwMAorQEAgLTcwNiw4ICs3MDYsOSBAQAorIGxpYmdjY19zJChTSExJQl9FWFQpOiBsaWJ1bndpbmQkKFNITElCX0VYVCkKKyBlbmRpZgorIAorK2FsbDogbGliZ2NjX2VoLmEKKyBpZmVxICgkKGVuYWJsZV9zaGFyZWQpLHllcykKKy1hbGw6IGxpYmdjY19laC5hIGxpYmdjY19zJChTSExJQl9FWFQpCisrYWxsOiBsaWJnY2NfcyQoU0hMSUJfRVhUKQorIGlmbmVxICgkKExJQlVOV0lORCksKQorIGFsbDogbGlidW53aW5kJChTSExJQl9FWFQpCisgZW5kaWYKK0BAIC04NzYsMTAgKzg3Nyw2IEBACisgaW5zdGFsbC1zaGFyZWQ6CisgCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQoaW5zdF9saWJkaXIpCisgCistCSQoSU5TVEFMTF9EQVRBKSBsaWJnY2NfZWguYSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvCistCWNobW9kIDY0NCAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKy0JJChSQU5MSUIpICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY2NfZWguYQorLQorIAkkKHN1YnN0IEBtdWx0aWxpYl9kaXJALCQoTVVMVElESVIpLCQoc3Vic3QgXAorIAkJQHNobGliX2Jhc2VfbmFtZUAsbGliZ2NjX3MsJChzdWJzdCBcCisgCQlAc2hsaWJfc2xpYmRpcl9xdWFsQCwkKE1VTFRJT1NTVUJESVIpLCQoU0hMSUJfSU5TVEFMTCkpKSkKK0BAIC04OTQsNiArODkxLDEwIEBACisgCWNobW9kIDY0NCAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2Nvdi5hCisgCSQoUkFOTElCKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2Nvdi5hCisgCisrCSQoSU5TVEFMTF9EQVRBKSBsaWJnY2NfZWguYSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvCisrCWNobW9kIDY0NCAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKysJJChSQU5MSUIpICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY2NfZWguYQorKworIAlwYXJ0cz0iJChJTlNUQUxMX1BBUlRTKSI7CQkJCVwKKyAJZm9yIGZpbGUgaW4gJCRwYXJ0czsgZG8JCQkJCVwKKyAJICBybSAtZiAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvJCRmaWxlOwkJXApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8xMDAtYWxwaGEtbWllZWUtZGVmYXVsdC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMTAwLWFscGhhLW1pZWVlLWRlZmF1bHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ0OTY2OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMTAwLWFscGhhLW1pZWVlLWRlZmF1bHQucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vMDBfYWxsX2djYy00LjEtYWxwaGEtbWllZWUtZGVmYXVsdC5wYXRjaAorU2V0IHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9uIGFscGhhIHRvIHVzZSAtbWllZWUgc2luY2UgdGhlIGxhcmdlIG1ham9yaXR5IG9mCit0aW1lIHdlIHdhbnQgdGhpcyAoYmFkL3dlaXJkIHRoaW5ncyBjYW4gaGFwcGVuIHdpdGggcGFja2FnZXMgYnVpbHQgd2l0aG91dAorLW1pZWVlKS4KKworVG8gc2F0aXNmeSB0aG9zZSBwZW9wbGUgd2hvIG1heSBub3Qgd2FudCAtbWllZWUgZm9yY2VkIG9uIHRoZW0gYWxsIHRoZSB0aW1lLAord2UgYWxzbyBwcm92aWRlIC1tbm8taWVlZS4KKworUGF0Y2ggYnkgTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgorCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvYWxwaGEvYWxwaGEuaCBnY2MtNC4zLjEvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5oCistLS0gZ2NjLTQuMy4xLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5oCTIwMDctMTItMDYgMTQ6MjU6MzcuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4xL2djYy9jb25maWcvYWxwaGEvYWxwaGEuaAkyMDA4LTA2LTEwIDE0OjU2OjM2LjAwMDAwMDAwMCArMDIwMAorQEAgLTk1LDYgKzk1LDggQEAKKyAgIHdoaWxlICgwKQorICNlbmRpZgorIAorKyNkZWZpbmUgQ1BQX1NQRUMgIiV7IW5vLWllZWU6LW1pZWVlfSIKKysKKyAjZGVmaW5lIFdPUkRfU1dJVENIX1RBS0VTX0FSRyhTVFIpCQlcCisgICghc3RyY21wIChTVFIsICJycGF0aCIpIHx8IERFRkFVTFRfV09SRF9TV0lUQ0hfVEFLRVNfQVJHKFNUUikpCisgCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvYWxwaGEvYWxwaGEub3B0IGdjYy00LjMuMS9nY2MvY29uZmlnL2FscGhhL2FscGhhLm9wdAorLS0tIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvYWxwaGEvYWxwaGEub3B0CTIwMDctMDgtMDIgMTI6NDk6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2djYy9jb25maWcvYWxwaGEvYWxwaGEub3B0CTIwMDgtMDYtMTAgMTQ6NTY6MzYuMDAwMDAwMDAwICswMjAwCitAQCAtMzksNyArMzksNyBAQAorIFJlcXVlc3QgSUVFRS1jb25mb3JtYW50IG1hdGggbGlicmFyeSByb3V0aW5lcyAoT1NGLzEpCisgCisgbWllZWUKKy1UYXJnZXQgUmVwb3J0IFJlamVjdE5lZ2F0aXZlIE1hc2soSUVFRSkKKytUYXJnZXQgUmVwb3J0IE1hc2soSUVFRSkKKyBFbWl0IElFRUUtY29uZm9ybWFudCBjb2RlLCB3aXRob3V0IGluZXhhY3QgZXhjZXB0aW9ucworIAorIG1pZWVlLXdpdGgtaW5leGFjdApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8xMTAtdHJhbXBvbGluZXdhcm4ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzExMC10cmFtcG9saW5ld2Fybi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGNmZTRkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8xMTAtdHJhbXBvbGluZXdhcm4ucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vMDBfYWxsX2djYy10cmFtcG9saW5ld2Fybi5wYXRjaAorCVRoaXMgdHJpdmlhbCBwYXRjaCBjYXVzZXMgZ2NjIHRvIGVtaXQgYSB3YXJuaW5nIHdoZW5ldmVyCisJaXQgZ2VuZXJhdGVzIGEgdHJhbXBvbGluZS4gIFRoZXNlIGFyZSBvdGhlcndpc2UgaGFyZCB0bworCWxvY2F0ZS4gIEl0IGlzIHJpZ2dlZCB0byBkZWZhdWx0IE9OIC0gdG8gaGF2ZSBpdCBkZWZhdWx0CisJdG8gT0ZGIHJlbW92ZSB0aGUgdGV4dCAnSW5pdCgxKScgZnJvbSB0aGUgY29tbW9uLm9wdAorCXBhdGNoLCBsZWF2aW5nIGp1c3QgJ0NvbW1vbiBWYXIod2Fybl90cmFtcG9saW5lcyknLgorCUtldmluIEYuIFF1aW5uIDxrZXZxdWlubkBnZW50b28ub3JnPiAxNyBKYW4gMjAwNgorCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy9idWlsdGlucy5jIGdjYy00LjMuMS9nY2MvYnVpbHRpbnMuYworLS0tIGdjYy00LjMuMS5vcmlnL2djYy9idWlsdGlucy5jCTIwMDgtMDQtMjMgMDA6MzY6MjcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2djYy9idWlsdGlucy5jCTIwMDgtMDYtMTAgMTQ6NTY6NTQuMDAwMDAwMDAwICswMjAwCitAQCAtNTY2Miw2ICs1NjYyLDkgQEAKKyAgIHRyYW1wb2xpbmVzX2NyZWF0ZWQgPSAxOworICAgSU5JVElBTElaRV9UUkFNUE9MSU5FIChyX3RyYW1wLCByX2Z1bmMsIHJfY2hhaW4pOworIAorKyAgaWYgKHdhcm5fdHJhbXBvbGluZXMpCisrICAgIHdhcm5pbmcgKE9QVF9XdHJhbXBvbGluZXMsICJnZW5lcmF0aW5nIHRyYW1wb2xpbmUgaW4gb2JqZWN0IChyZXF1aXJlcyBleGVjdXRhYmxlIHN0YWNrKSIpOworKworICAgcmV0dXJuIGNvbnN0MF9ydHg7CisgfQorIAorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9nY2MvY29tbW9uLm9wdCBnY2MtNC4zLjEvZ2NjL2NvbW1vbi5vcHQKKy0tLSBnY2MtNC4zLjEub3JpZy9nY2MvY29tbW9uLm9wdAkyMDA4LTAxLTIyIDE1OjExOjQ0LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMS9nY2MvY29tbW9uLm9wdAkyMDA4LTA2LTEwIDE0OjU2OjU0LjAwMDAwMDAwMCArMDIwMAorQEAgLTE4Miw2ICsxODIsMTAgQEAKKyBDb21tb24gVmFyKHdhcm5fc3lzdGVtX2hlYWRlcnMpIFdhcm5pbmcKKyBEbyBub3Qgc3VwcHJlc3Mgd2FybmluZ3MgZnJvbSBzeXN0ZW0gaGVhZGVycworIAorK1d0cmFtcG9saW5lcworK0NvbW1vbiBWYXIod2Fybl90cmFtcG9saW5lcykgSW5pdCgxKQorK1dhcm4gd2hlbmV2ZXIgYSB0cmFtcG9saW5lIGlzIGdlbmVyYXRlZAorKworIFd1bmluaXRpYWxpemVkCisgQ29tbW9uIFZhcih3YXJuX3VuaW5pdGlhbGl6ZWQpIFdhcm5pbmcKKyBXYXJuIGFib3V0IHVuaW5pdGlhbGl6ZWQgYXV0b21hdGljIHZhcmlhYmxlcwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8xMjAtamF2YS1ub211bHRpLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8xMjAtamF2YS1ub211bHRpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNDNjZTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzEyMC1qYXZhLW5vbXVsdGkucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vMDNfYWxsX2djYzQzLWphdmEtbm9tdWx0aS5wYXRjaAorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9saWJqYXZhL2NvbmZpZ3VyZSBnY2MtNC4zLjEvbGliamF2YS9jb25maWd1cmUKKy0tLSBnY2MtNC4zLjEub3JpZy9saWJqYXZhL2NvbmZpZ3VyZQkyMDA4LTA2LTA2IDE2OjQ5OjExLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMS9saWJqYXZhL2NvbmZpZ3VyZQkyMDA4LTA2LTEwIDE0OjU3OjM4LjAwMDAwMDAwMCArMDIwMAorQEAgLTEwMTgsNiArMTAxOCw4IEBACisgICAtLWVuYWJsZS1nY29uZi1wZWVyICAgICBjb21waWxlIEdDb25mIG5hdGl2ZSBwZWVycyBmb3IgdXRpbC5wcmVmZXJlbmNlcworICAgLS1lbmFibGUtamF2YS1tYWludGFpbmVyLW1vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93IHJlYnVpbGRpbmcgb2YgLmNsYXNzIGFuZCAuaCBmaWxlcworKyAgLS1lbmFibGUtbGliamF2YS1tdWx0aWxpYgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgbGliamF2YSBhcyBtdWx0aWxpYgorICAgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgIHNwZWVkcyB1cCBvbmUtdGltZSBidWlsZAorICAgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyAgIGRvIG5vdCByZWplY3Qgc2xvdyBkZXBlbmRlbmN5IGV4dHJhY3RvcnMKKyAgIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSAgZW5hYmxlIG1ha2UgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBub3QgdXNlZnVsCitAQCAtMTg1MCw2ICsxODUyLDE2IEBACisgZmkKKyAKKyAKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGliamF2YS1tdWx0aWxpYiB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfbGliamF2YV9tdWx0aWxpYitzZXR9IiA9IHNldDsgdGhlbgorKyAgZW5hYmxldmFsPSRlbmFibGVfbGliamF2YV9tdWx0aWxpYjsKKytmaQorKworK2lmIHRlc3QgIiRlbmFibGVfbGliamF2YV9tdWx0aWxpYiIgPSBubzsgdGhlbgorKyAgbXVsdGlsaWI9bm8KKysgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1kaXNhYmxlLW11bHRpbGliIgorK2ZpCisrCisgIyBJdCBtYXkgbm90IGJlIHNhZmUgdG8gcnVuIGxpbmtpbmcgdGVzdHMgaW4gQUNfUFJPR19DQy9BQ19QUk9HX0NYWC4KKyAKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMy4xLm9yaWcvbGliamF2YS9jb25maWd1cmUuYWMgZ2NjLTQuMy4xL2xpYmphdmEvY29uZmlndXJlLmFjCistLS0gZ2NjLTQuMy4xLm9yaWcvbGliamF2YS9jb25maWd1cmUuYWMJMjAwNy0xMi0yMiAxNjo0ODo0Ni4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjEvbGliamF2YS9jb25maWd1cmUuYWMJMjAwOC0wNi0xMCAxNDo1NzozOC4wMDAwMDAwMDAgKzAyMDAKK0BAIC04Miw2ICs4MiwxMyBAQAorIAlbYWxsb3cgcmVidWlsZGluZyBvZiAuY2xhc3MgYW5kIC5oIGZpbGVzXSkpCisgQU1fQ09ORElUSU9OQUwoSkFWQV9NQUlOVEFJTkVSX01PREUsIHRlc3QgIiRlbmFibGVfamF2YV9tYWludGFpbmVyX21vZGUiID0geWVzKQorIAorK0FDX0FSR19FTkFCTEUobGliamF2YS1tdWx0aWxpYiwKKysJQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxpYmphdmEtbXVsdGlsaWJdLCBbYnVpbGQgbGliamF2YSBhcyBtdWx0aWxpYl0pKQorK2lmIHRlc3QgIiRlbmFibGVfbGliamF2YV9tdWx0aWxpYiIgPSBubzsgdGhlbgorKyAgbXVsdGlsaWI9bm8KKysgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1kaXNhYmxlLW11bHRpbGliIgorK2ZpCisrCisgIyBJdCBtYXkgbm90IGJlIHNhZmUgdG8gcnVuIGxpbmtpbmcgdGVzdHMgaW4gQUNfUFJPR19DQy9BQ19QUk9HX0NYWC4KKyBHQ0NfTk9fRVhFQ1VUQUJMRVMKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMTMwLWNyb3NzLWNvbXBpbGUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzEzMC1jcm9zcy1jb21waWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2OTQwOWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzEzMC1jcm9zcy1jb21waWxlLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzA4X2FsbF9nY2MtNC4xLWNyb3NzLWNvbXBpbGUucGF0Y2gKK1NvbWUgbm90ZXMgb24gdGhlICdib290c3RyYXAgd2l0aCBvciB3aXRob3V0IGxpYmMgaGVhZGVycycgZGViYXRlOgoraHR0cDovL2xpbnV4ZnJvbXNjcmF0Y2gub3JnL3BpcGVybWFpbC9sZnMtZGV2LzIwMDUtSnVseS8wNTI0MDkuaHRtbAoraHR0cDovL2djYy5nbnUub3JnL21sL2djYy8yMDA1LTA3L21zZzAxMTk1Lmh0bWwKKworZGlmZiAtZHVyTiBnY2MtNC4zLjIub3JpZy9nY2MvY29uZmlndXJlIGdjYy00LjMuMi9nY2MvY29uZmlndXJlCistLS0gZ2NjLTQuMy4yLm9yaWcvZ2NjL2NvbmZpZ3VyZQkyMDA4LTA4LTAxIDExOjUxOjAzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMi9nY2MvY29uZmlndXJlCTIwMDgtMDktMjMgMTk6Mzk6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtMTM0NDIsNyArMTM0NDIsNyBAQAorIAkgICAgfCBwb3dlcnBjKi0qLSoscG93ZXJwYzY0Ki0qLSopCisgCQlDUk9TUz0iJENST1NTIC1ETkFUSVZFX0NST1NTIiA7OworIAllc2FjCistZWxpZiB0ZXN0ICJ4JFRBUkdFVF9TWVNURU1fUk9PVCIgIT0geDsgdGhlbgorK2VsaWYgdGVzdCAieCRUQVJHRVRfU1lTVEVNX1JPT1QiICE9IHggLW8gJGJ1aWxkICE9ICRob3N0OyB0aGVuCisgICAgICAgICBTWVNURU1fSEVBREVSX0RJUj0kYnVpbGRfc3lzdGVtX2hlYWRlcl9kaXIKKyBmaQorIAorZGlmZiAtZHVyTiBnY2MtNC4zLjIub3JpZy9nY2MvY29uZmlndXJlLmFjIGdjYy00LjMuMi9nY2MvY29uZmlndXJlLmFjCistLS0gZ2NjLTQuMy4yLm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYwkyMDA4LTA4LTAxIDExOjUxOjAzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMi9nY2MvY29uZmlndXJlLmFjCTIwMDgtMDktMjMgMTk6Mzk6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtMTc0OSw3ICsxNzQ5LDcgQEAKKyAJICAgIHwgcG93ZXJwYyotKi0qLHBvd2VycGM2NCotKi0qKQorIAkJQ1JPU1M9IiRDUk9TUyAtRE5BVElWRV9DUk9TUyIgOzsKKyAJZXNhYworLWVsaWYgdGVzdCAieCRUQVJHRVRfU1lTVEVNX1JPT1QiICE9IHg7IHRoZW4KKytlbGlmIHRlc3QgIngkVEFSR0VUX1NZU1RFTV9ST09UIiAhPSB4IC1vICRidWlsZCAhPSAkaG9zdDsgdGhlbgorICAgICAgICAgU1lTVEVNX0hFQURFUl9ESVI9JGJ1aWxkX3N5c3RlbV9oZWFkZXJfZGlyIAorIGZpCisgCitkaWZmIC1kdXJOIGdjYy00LjMuMi5vcmlnL2djYy91bndpbmQtZHcyLmMgZ2NjLTQuMy4yL2djYy91bndpbmQtZHcyLmMKKy0tLSBnY2MtNC4zLjIub3JpZy9nY2MvdW53aW5kLWR3Mi5jCTIwMDctMDctMjUgMjA6MTQ6NTcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4yL2djYy91bndpbmQtZHcyLmMJMjAwOC0wOS0yMyAxOTozOTo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMzQsOSArMzM0LDExIEBACisgfQorICNlbmRpZgorIAorKyNpZm5kZWYgaW5oaWJpdF9saWJjCisgI2lmZGVmIE1EX1VOV0lORF9TVVBQT1JUCisgI2luY2x1ZGUgTURfVU5XSU5EX1NVUFBPUlQKKyAjZW5kaWYKKysjZW5kaWYKKyAMCisgLyogRXh0cmFjdCBhbnkgaW50ZXJlc3RpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgQ0lFIGZvciB0aGUgdHJhbnNsYXRpb24KKyAgICB1bml0IEYgYmVsb25ncyB0by4gIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGJ5dGUgYWZ0ZXIgdGhlIGF1Z21lbnRhdGlvbiwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMTQwLW5ldGJzZC1zeW1ib2xpYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMTQwLW5ldGJzZC1zeW1ib2xpYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDZhMDRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8xNDAtbmV0YnNkLXN5bWJvbGljLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzExX2FsbF9nY2MtbmV0YnNkLXN5bWJvbGljLnBhdGNoCitodHRwOi8vYnVncy5nZW50b28ub3JnLzEyMjY5OAorCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvbmV0YnNkLWVsZi5oIGdjYy00LjMuMS9nY2MvY29uZmlnL25ldGJzZC1lbGYuaAorLS0tIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvbmV0YnNkLWVsZi5oCTIwMDctMDktMDMgMTg6MTQ6MDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2djYy9jb25maWcvbmV0YnNkLWVsZi5oCTIwMDgtMDYtMTAgMTQ6NTc6NDguMDAwMDAwMDAwICswMjAwCitAQCAtODIsNiArODIsNyBAQAorICNkZWZpbmUgTkVUQlNEX0xJTktfU1BFQ19FTEYgXAorICAgIiV7YXNzZXJ0Kn0gJXtSKn0gJXtycGF0aCp9IFwKKyAgICAle3NoYXJlZDotc2hhcmVkfSBcCisrICAgJXtzeW1ib2xpYzotQnN5bWJvbGljfSBcCisgICAgJXshc2hhcmVkOiBcCisgICAgICAtZGMgLWRwIFwKKyAgICAgICV7IW5vc3RkbGliOiBcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzE1MC1zcGFyYzY0LWJzZC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMTUwLXNwYXJjNjQtYnNkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYzJiNDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzE1MC1zcGFyYzY0LWJzZC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby8xNF9hbGxfZ2NjLXNwYXJjNjQtYnNkLnBhdGNoCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oIGdjYy00LjMuMS9nY2MvY29uZmlnL3NwYXJjL2ZyZWVic2QuaAorLS0tIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oCTIwMDctMDgtMDIgMTI6NDk6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oCTIwMDgtMDYtMTAgMTQ6NTc6NTQuMDAwMDAwMDAwICswMjAwCitAQCAtMjUsOSArMjUsMjIgQEAKKyAvKiBGcmVlQlNEIG5lZWRzIHRoZSBwbGF0Zm9ybSBuYW1lIChzcGFyYzY0KSBkZWZpbmVkLgorICAgIEVtYWNzIG5lZWRzIHRvIGtub3cgaWYgdGhlIGFyY2ggaXMgNjQgb3IgMzItYml0cy4gICovCisgCistI3VuZGVmICBDUFBfQ1BVNjRfREVGQVVMVF9TUEVDCistI2RlZmluZSBDUFBfQ1BVNjRfREVGQVVMVF9TUEVDIFwKKy0gICItRF9fc3BhcmM2NF9fIC1EX19zcGFyY192OV9fIC1EX19zcGFyY3Y5IC1EX19hcmNoNjRfXyIKKysjdW5kZWYgIEZCU0RfVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMKKysjZGVmaW5lIEZCU0RfVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMoKSAgICAgICAgICAgICAgICAgIFwKKysgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBpZiAoVEFSR0VUX0FSQ0g2NCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjNjRfXyIpOyAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjX3Y5X18iKTsgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjdjkiKTsgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19zcGFyYyIpOyAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBidWlsdGluX2RlZmluZSAoIl9fc3BhcmNfXyIpOyAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHdoaWxlICgwKQorKworIAorICNkZWZpbmUgTElOS19TUEVDICIlKGxpbmtfYXJjaCkJCQkJCQlcCisgICAleyFtbm8tcmVsYXg6JXshcjotcmVsYXh9fQkJCQkJCVwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMTYwLWZsYXR0ZW4tc3dpdGNoLXN0bXQtMDAucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzE2MC1mbGF0dGVuLXN3aXRjaC1zdG10LTAwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1Y2FmY2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzE2MC1mbGF0dGVuLXN3aXRjaC1zdG10LTAwLnBhdGNoCkBAIC0wLDAgKzEsNzYgQEAKK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzE4X2FsbF85MDQtZmxhdHRlbi1zd2l0Y2gtc3RtdC0wMC5wYXRjaAoraHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMDctMDQvbXNnMDA5MjcuaHRtbAorCitIaSwKKworVGhlIGF0dGFjaGVkIHBhdGNoIG1ha2VzIHN1cmUgdGhhdCB3ZSBjcmVhdGUgc21hbGxlciBvYmplY3QgY29kZSBmb3IKK3NpbXBsZSBzd2l0Y2ggc3RhdGVtZW50cy4gV2UganVzdCBtYWtlIHN1cmUgdG8gZmxhdHRlbiB0aGUgc3dpdGNoCitzdGF0ZW1lbnQgaW50byBhbiBpZi1lbHNlIGNoYWluLCBiYXNpY2FsbHkuCisKK1RoaXMgZml4ZXMgYSBzaXplLXJlZ3Jlc3Npb24gYXMgY29tcGFyZWQgdG8gZ2NjLTMuNCwgYXMgY2FuIGJlIHNlZW4KK2JlbG93LgorCisyMDA3LTA0LTE1ICBCZXJuaGFyZCBGaXNjaGVyICA8Li4+CisKKwkqIHN0bXQuYyAoZXhwYW5kX2Nhc2UpOiBEbyBub3QgY3JlYXRlIGEgY29tcGxleCBiaW5hcnkgdHJlZSB3aGVuCisJb3B0aW1pemluZyBmb3Igc2l6ZSBidXQgcmF0aGVyIHVzZSB0aGUgc2ltcGxlIG9yZGVyZWQgbGlzdC4KKwkoZW1pdF9jYXNlX25vZGVzKTogZG8gbm90IGVtaXQganVtcHMgdG8gdGhlIGRlZmF1bHRfbGFiZWwgd2hlbgorCW9wdGltaXppbmcgZm9yIHNpemUuCisKK05vdCByZWd0ZXN0ZWQgc28gZmFyLgorQ29tbWVudHM/CisKK0F0dGFjaGVkIGlzIHRoZSB0ZXN0IHN3aXRjaC5jIG1lbnRpb25lZCBiZWxvdy4KKworJCBmb3IgaSBpbiAyLjk1IDMuMyAzLjQgNC4wIDQuMSA0LjIub3JpZy1IRUFEIDQuMy5vcmlnLUhFQUQgNC4zLUhFQUQ7ZG8KK2djYy0kaSAgLURDSEFJTiAtT3MgLW8gc3dpdGNoLUNIQUlOLSRpLm8gLWMgc3dpdGNoLmMgO2RvbmUKKyQgZm9yIGkgaW4gMi45NSAzLjMgMy40IDQuMCA0LjEgNC4yLm9yaWctSEVBRCA0LjMub3JpZy1IRUFEIDQuMy1IRUFEO2RvCitnY2MtJGkgIC1VQ0hBSU4gLU9zIC1vIHN3aXRjaC0kaS5vIC1jIHN3aXRjaC5jIDtkb25lCisKKyQgc2l6ZSBzd2l0Y2gtKi5vCisgICB0ZXh0CSAgIGRhdGEJICAgIGJzcwkgICAgZGVjCSAgICBoZXgJZmlsZW5hbWUKKyAgICAxNjkJICAgICAgMAkgICAgICAwCSAgICAxNjkJICAgICBhOQlzd2l0Y2gtMi45NS5vCisgICAgMTE1CSAgICAgIDAJICAgICAgMAkgICAgMTE1CSAgICAgNzMJc3dpdGNoLTMuMy5vCisgICAgMTAzCSAgICAgIDAJICAgICAgMAkgICAgMTAzCSAgICAgNjcJc3dpdGNoLTMuNC5vCisgICAgMTI0CSAgICAgIDAJICAgICAgMAkgICAgMTI0CSAgICAgN2MJc3dpdGNoLTQuMC5vCisgICAgMTI0CSAgICAgIDAJICAgICAgMAkgICAgMTI0CSAgICAgN2MJc3dpdGNoLTQuMS5vCisgICAgMTI0CSAgICAgIDAJICAgICAgMAkgICAgMTI0CSAgICAgN2MJc3dpdGNoLTQuMi5vcmlnLUhFQUQubworICAgICA5NQkgICAgICAwCSAgICAgIDAJICAgICA5NQkgICAgIDVmCXN3aXRjaC00LjMtSEVBRC5vCisgICAgMTI0CSAgICAgIDAJICAgICAgMAkgICAgMTI0CSAgICAgN2MJc3dpdGNoLTQuMy5vcmlnLUhFQUQubworICAgIDE2NgkgICAgICAwCSAgICAgIDAJICAgIDE2NgkgICAgIGE2CXN3aXRjaC1DSEFJTi0yLjk1Lm8KKyAgICAxMTEJICAgICAgMAkgICAgICAwCSAgICAxMTEJICAgICA2Zglzd2l0Y2gtQ0hBSU4tMy4zLm8KKyAgICAgOTUJICAgICAgMAkgICAgICAwCSAgICAgOTUJICAgICA1Zglzd2l0Y2gtQ0hBSU4tMy40Lm8KKyAgICAgOTUJICAgICAgMAkgICAgICAwCSAgICAgOTUJICAgICA1Zglzd2l0Y2gtQ0hBSU4tNC4wLm8KKyAgICAgOTUJICAgICAgMAkgICAgICAwCSAgICAgOTUJICAgICA1Zglzd2l0Y2gtQ0hBSU4tNC4xLm8KKyAgICAgOTUJICAgICAgMAkgICAgICAwCSAgICAgOTUJICAgICA1Zglzd2l0Y2gtQ0hBSU4tNC4yLm9yaWctSEVBRC5vCisgICAgIDk1CSAgICAgIDAJICAgICAgMAkgICAgIDk1CSAgICAgNWYJc3dpdGNoLUNIQUlOLTQuMy1IRUFELm8KKyAgICAgOTUJICAgICAgMAkgICAgICAwCSAgICAgOTUJICAgICA1Zglzd2l0Y2gtQ0hBSU4tNC4zLm9yaWctSEVBRC5vCisKKworQ29udGVudC1UeXBlOiB0ZXh0L3gtZGlmZjsgY2hhcnNldD11cy1hc2NpaQorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9ImdjYy00LjMuZ2NjLWZsYXR0ZW4tc3dpdGNoLXN0bXQuMDAuZGlmZiIKKworZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9nY2Mvc3RtdC5jIGdjYy00LjMuMS9nY2Mvc3RtdC5jCistLS0gZ2NjLTQuMy4xLm9yaWcvZ2NjL3N0bXQuYwkyMDA4LTA1LTA5IDIwOjEyOjEzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMS9nY2Mvc3RtdC5jCTIwMDgtMDYtMTAgMTQ6NTc6NTguMDAwMDAwMDAwICswMjAwCitAQCAtMjUwOSw3ICsyNTA5LDExIEBACisgCSAgdXNlX2Nvc3RfdGFibGUKKyAJICAgID0gKFRSRUVfQ09ERSAob3JpZ190eXBlKSAhPSBFTlVNRVJBTF9UWVBFCisgCSAgICAgICAmJiBlc3RpbWF0ZV9jYXNlX2Nvc3RzIChjYXNlX2xpc3QpKTsKKy0JICBiYWxhbmNlX2Nhc2Vfbm9kZXMgKCZjYXNlX2xpc3QsIE5VTEwpOworKwkgIC8qIFdoZW4gb3B0aW1pemluZyBmb3Igc2l6ZSwgd2Ugd2FudCBhIHN0cmFpZ2h0IGxpc3QgdG8gYXZvaWQKKysJICAgICBqdW1wcyBhcyBtdWNoIGFzIHBvc3NpYmxlLiBUaGlzIGJhc2ljYWxseSBjcmVhdGVzIGFuIGlmLWVsc2UKKysJICAgICBjaGFpbi4gICovCisrCSAgaWYgKCFvcHRpbWl6ZV9zaXplKQorKwkgICAgYmFsYW5jZV9jYXNlX25vZGVzICgmY2FzZV9saXN0LCBOVUxMKTsKKyAJICBlbWl0X2Nhc2Vfbm9kZXMgKGluZGV4LCBjYXNlX2xpc3QsIGRlZmF1bHRfbGFiZWwsIGluZGV4X3R5cGUpOworIAkgIGVtaXRfanVtcCAoZGVmYXVsdF9sYWJlbCk7CisgCX0KK0BAIC0zMDY3LDYgKzMwNzEsNyBAQAorIAkgICAgeworIAkgICAgICBpZiAoIW5vZGVfaGFzX2xvd19ib3VuZCAobm9kZSwgaW5kZXhfdHlwZSkpCisgCQl7CisrCQkgIGlmICghb3B0aW1pemVfc2l6ZSkgLyogZG9uJ3QgamwgdG8gdGhlIC5kZWZhdWx0X2xhYmVsLiAqLworIAkJICBlbWl0X2NtcF9hbmRfanVtcF9pbnNucyAoaW5kZXgsCisgCQkJCQkgICBjb252ZXJ0X21vZGVzCisgCQkJCQkgICAobW9kZSwgaW1vZGUsCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzE3MC1saWJpYmVydHktcGljLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8xNzAtbGliaWJlcnR5LXBpYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjFlNmI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8xNzAtbGliaWJlcnR5LXBpYy5wYXRjaApAQCAtMCwwICsxLDEyIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby81MV9hbGxfZ2NjLTMuNC1saWJpYmVydHktcGljLnBhdGNoCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2xpYmliZXJ0eS9NYWtlZmlsZS5pbiBnY2MtNC4zLjEvbGliaWJlcnR5L01ha2VmaWxlLmluCistLS0gZ2NjLTQuMy4xLm9yaWcvbGliaWJlcnR5L01ha2VmaWxlLmluCTIwMDctMDctMjUgMDg6MjY6NDUuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2xpYmliZXJ0eS9NYWtlZmlsZS5pbgkyMDA4LTA2LTEwIDE0OjU4OjAyLjAwMDAwMDAwMCArMDIwMAorQEAgLTIyNSw2ICsyMjUsNyBAQAorIAkgICQoQVIpICQoQVJfRkxBR1MpICQoVEFSR0VUTElCKSBcCisgCSAgICAkKFJFUVVJUkVEX09GSUxFUykgJChFWFRSQV9PRklMRVMpICQoTElCT0JKUyk7IFwKKyAJICAkKFJBTkxJQikgJChUQVJHRVRMSUIpOyBcCisrCSAgY3AgJChUQVJHRVRMSUIpIC4uLyA7IFwKKyAJICBjZCAuLjsgXAorIAllbHNlIHRydWU7IGZpCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzE4MC1zdXBlcmgtZGVmYXVsdC1tdWx0aWxpYi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMTgwLXN1cGVyaC1kZWZhdWx0LW11bHRpbGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMjQyMjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzE4MC1zdXBlcmgtZGVmYXVsdC1tdWx0aWxpYi5wYXRjaApAQCAtMCwwICsxLDI1IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby81M19hbGxfZ2NjNC1zdXBlcmgtZGVmYXVsdC1tdWx0aWxpYi5wYXRjaAorVGhlIGdjYy0zLnggdG9vbGNoYWlucyB3b3VsZCBjb250YWluIGFsbCB0aGUgdGFyZ2V0cyBieSBkZWZhdWx0LiAgV2l0aCBnY2MtNCwKK3lvdSBoYXZlIHRvIGFjdHVhbGx5IGxpc3Qgb3V0IHRoZSBtdWx0aWxpYnMgeW91IHdhbnQgb3IgeW91IHdpbGwgZW5kIHVwIHdpdGgKK2p1c3Qgb25lIHdoZW4gdXNpbmcgdGFyZ2V0cyBsaWtlICdzaDQtbGludXgtZ251Jy4KKworVGhlIHJlc3VsdGluZyB0b29sY2hhaW4gY2FuJ3QgZXZlbiBidWlsZCBhIGtlcm5lbCBhcyB0aGUga2VybmVsIG5lZWRzIHRvIGJ1aWxkCit3aXRoIHRoZSBub2ZwdSBmbGFnIHRvIGJlIHN1cmUgdGhhdCBubyBmcHUgb3BzIGFyZSBnZW5lcmF0ZWQuCisKK0hlcmUgd2UgcmVzdG9yZSB0aGUgZ2NjLTMueCBiZWhhdmlvcjsgdGhlIGFkZGl0aW9uYWwgb3ZlcmhlYWQgb2YgYnVpbGRpbmcgYWxsCitvZiB0aGVzZSBtdWx0aWxpYnMgYnkgZGVmYXVsdCBpcyBuZWdsaWdpYmxlLgorCitodHRwOi8vYnVncy5nZW50b28ub3JnLzE0MDIwNQorCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcuZ2NjIGdjYy00LjMuMS9nY2MvY29uZmlnLmdjYworLS0tIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcuZ2NjCTIwMDgtMDUtMjEgMTA6NTQ6MTUuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2djYy9jb25maWcuZ2NjCTIwMDgtMDYtMTAgMTQ6NTg6MDYuMDAwMDAwMDAwICswMjAwCitAQCAtMjI3OCw3ICsyMjc4LDcgQEAKKyAJaWYgdGVzdCB4JHtzaF9tdWx0aWxpYnN9ID0geCA7IHRoZW4KKyAJCWNhc2UgJHt0YXJnZXR9IGluCisgCQlzaDY0LXN1cGVyaC1saW51eCogfCBcCistCQlzaFsxMjM0XSopCXNoX211bHRpbGlicz0ke3NoX2NwdV90YXJnZXR9IDs7CisrCQlzaFsxMjM0XSopCXNoX211bHRpbGlicz1gY2QgJHtzcmNkaXJ9L2NvbmZpZy9zaCA7IGVjaG8gdC1tbGliLXNoWzEtNF0qIHwgc2VkICdzOnQtbWxpYi1zaDosbTpnO3M6IDo6ZydgIDs7CisgCQlzaDY0KiB8IHNoNSopCXNoX211bHRpbGlicz1tNS0zMm1lZGlhLG01LTMybWVkaWEtbm9mcHUsbTUtY29tcGFjdCxtNS1jb21wYWN0LW5vZnB1LG01LTY0bWVkaWEsbTUtNjRtZWRpYS1ub2ZwdSA7OworIAkJc2gtc3VwZXJoLSopCXNoX211bHRpbGlicz1tNCxtNC1zaW5nbGUsbTQtc2luZ2xlLW9ubHksbTQtbm9mcHUgOzsKKyAJCXNoKi0qLWxpbnV4KikJc2hfbXVsdGlsaWJzPW0xLG0zZSxtNCA7OwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8xOTAtbGlic3RkYysrLXBpYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMTkwLWxpYnN0ZGMrKy1waWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFjYWIxOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMTkwLWxpYnN0ZGMrKy1waWMucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vNTRfYWxsXzMwMC1saWJzdGRjKystcGljLnBhdGNoCitpbnN0YWxsIGxpYnN0ZGMrK19waWMuYSBpZiB3ZSBoYXZlIHBpYyBvYmpzCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4xLm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbSBnY2MtNC4zLjEvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQorLS0tIGdjYy00LjMuMS5vcmlnL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuYW0JMjAwOC0wMi0yOSAxOToyNjo1MC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjEvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQkyMDA4LTA2LTEwIDE0OjU4OjA5LjAwMDAwMDAwMCArMDIwMAorQEAgLTI4OSw2ICsyODksMTMgQEAKKyAJICAkKE9QVF9MREZMQUdTKSAkKFNFQ1RJT05fTERGTEFHUykgJChBTV9DWFhGTEFHUykgJChMVExERkxBR1MpIC1vICRACisgCisgCisraW5zdGFsbC1leGVjLWxvY2FsOgorKwlwaWNfb2Jqcz1gc2VkIC1uICJzOic6Omc7czpecGljX29iamVjdD06OnAiICoubG8gfCBncmVwIC12ICdebm9uZSQkJ2A7IFwKKysJaWYgWyB4IiQkcGljX29ianMiICE9IHggXTsgdGhlbiBcCisrCQkkKEFSKSBjcnUgbGlic3RkYysrX3BpYy5hICQkcGljX29ianMgJCh0b3BfYnVpbGRkaXIpL2xpYnN1cGMrKy8qLm8gfHwgZXhpdCAxOyBcCisrCQkkKElOU1RBTExfREFUQSkgbGlic3RkYysrX3BpYy5hICQoREVTVERJUikkKHRvb2xleGVjbGliZGlyKSB8fCBleGl0IDE7IFwKKysJZmkKKysKKyAjIEFkZGVkIGJpdHMgdG8gYnVpbGQgZGVidWcgbGlicmFyeS4KKyBpZiBHTElCQ1hYX0JVSUxEX0RFQlVHCisgYWxsLWxvY2FsOiBidWlsZF9kZWJ1ZworZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluIGdjYy00LjMuMS9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCistLS0gZ2NjLTQuMy4xLm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgkyMDA4LTAyLTI5IDE5OjI2OjUwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMS9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCTIwMDgtMDYtMTAgMTQ6NTg6MDkuMDAwMDAwMDAwICswMjAwCitAQCAtNjkzLDcgKzY5Myw3IEBACisgCisgaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWRhdGEtbG9jYWwKKyAKKy1pbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUworK2luc3RhbGwtZXhlYy1hbTogaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTIGluc3RhbGwtZXhlYy1sb2NhbAorIAorIGluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisgCitAQCAtNzMyLDcgKzczMiw3IEBACisgCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKyAJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorIAl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWluZm8tYW0gXAorLQl1bmluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUworKwl1bmluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUyBpbnN0YWxsLWV4ZWMtbG9jYWwKKyAKKyAKKyAjIFN5bWJvbCB2ZXJzaW9uaW5nIGZvciBzaGFyZWQgbGlicmFyaWVzLgorQEAgLTg1OCw2ICs4NTgsMTQgQEAKKyBpbnN0YWxsX2RlYnVnOgorIAkoY2QgJHtkZWJ1Z2Rpcn0gJiYgJChNQUtFKSBcCisgCXRvb2xleGVjbGliZGlyPSQoZ2xpYmN4eF90b29sZXhlY2xpYmRpcikvZGVidWcgaW5zdGFsbCkKKysKKytpbnN0YWxsLWV4ZWMtbG9jYWw6CisrCXBpY19vYmpzPWBzZWQgLW4gInM6Jzo6ZztzOl5waWNfb2JqZWN0PTo6cCIgKi5sbyB8IGdyZXAgLXYgJ15ub25lJCQnYDsgXAorKwlpZiBbIHgiJCRwaWNfb2JqcyIgIT0geCBdOyB0aGVuIFwKKysJCSQoQVIpIGNydSBsaWJzdGRjKytfcGljLmEgJCRwaWNfb2JqcyAkKHRvcF9idWlsZGRpcikvbGlic3VwYysrLyoubyB8fCBleGl0IDE7IFwKKysJCSQoSU5TVEFMTF9EQVRBKSBsaWJzdGRjKytfcGljLmEgJChERVNURElSKSQodG9vbGV4ZWNsaWJkaXIpIHx8IGV4aXQgMTsgXAorKwlmaQorKworICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisgIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisgLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8yMDAtcHIyNDE3MC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMjAwLXByMjQxNzAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QxMzY5OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMjAwLXByMjQxNzAucGF0Y2gKQEAgLTAsMCArMSw2MSBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vNjFfYWxsX2djYzQzLXByMjQxNzAucGF0Y2gKK2h0dHA6Ly9nY2MuZ251Lm9yZy9QUjI0MTcwCisKKzIwMDgtMDItMjAgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KKworCVBSIGxpYmdjai8yNDE3MDoKKwkqIGphdmEvaW8vbmF0RmlsZVBvc2l4LmNjIChGaWxlOjpwZXJmb3JtTGlzdCk6IERvbid0IHVzZQorCXJlYWRkaXJfci4KKwkqIGNvbmZpZ3VyZSwgaW5jbHVkZS9jb25maWcuaC5pbjogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5hYzogRG9uJ3QgY2hlY2sgZm9yIHJlYWRkaXJfci4KKworZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9saWJqYXZhL2NvbmZpZ3VyZS5hYyBnY2MtNC4zLjEvbGliamF2YS9jb25maWd1cmUuYWMKKy0tLSBnY2MtNC4zLjEub3JpZy9saWJqYXZhL2NvbmZpZ3VyZS5hYwkyMDA4LTA2LTEwIDE0OjU3OjQyLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMS9saWJqYXZhL2NvbmZpZ3VyZS5hYwkyMDA4LTA2LTEwIDE0OjU4OjEzLjAwMDAwMDAwMCArMDIwMAorQEAgLTEwMzAsNyArMTAzMCw3IEBACisgICAgUExBVEZPUk1ORVQ9Tm9OZXQKKyBlbHNlCisgICAgQUNfQ0hFQ0tfRlVOQ1MoW3N0cmVycm9yX3Igc2VsZWN0IGZzdGF0IG9wZW4gZnN5bmMgc2xlZXAgb3BlbmRpciBcCistICAgICAgICAgICAgICAgICAgIGxvY2FsdGltZV9yIHJlYWRkaXJfciBnZXRwd3VpZF9yIGdldGN3ZCBcCisrICAgICAgICAgICAgICAgICAgIGxvY2FsdGltZV9yIGdldHB3dWlkX3IgZ2V0Y3dkIFwKKyAJCSAgIGFjY2VzcyBzdGF0IGxzdGF0IG1rZGlyIHJlbmFtZSBybWRpciB1bmxpbmsgdXRpbWUgY2htb2QgcmVhZGxpbmsgXAorIAkJICAgbmxfbGFuZ2luZm8gc2V0bG9jYWxlIFwKKyAJCSAgIGluZXRfcHRvbiB1bmFtZSBpbmV0X250b2EgXAorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9saWJqYXZhL2luY2x1ZGUvY29uZmlnLmguaW4gZ2NjLTQuMy4xL2xpYmphdmEvaW5jbHVkZS9jb25maWcuaC5pbgorLS0tIGdjYy00LjMuMS5vcmlnL2xpYmphdmEvaW5jbHVkZS9jb25maWcuaC5pbgkyMDA3LTA3LTMxIDE4OjE3OjIxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMS9saWJqYXZhL2luY2x1ZGUvY29uZmlnLmguaW4JMjAwOC0wNi0xMCAxNDo1ODoxMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMTQsOSArMjE0LDYgQEAKKyAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHB3ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyAjdW5kZWYgSEFWRV9QV0RfSAorIAorLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVhZGRpcl9yJyBmdW5jdGlvbi4gKi8KKy0jdW5kZWYgSEFWRV9SRUFERElSX1IKKy0KKyAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJlYWRsaW5rJyBmdW5jdGlvbi4gKi8KKyAjdW5kZWYgSEFWRV9SRUFETElOSworIAorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9saWJqYXZhL2phdmEvaW8vbmF0RmlsZVBvc2l4LmNjIGdjYy00LjMuMS9saWJqYXZhL2phdmEvaW8vbmF0RmlsZVBvc2l4LmNjCistLS0gZ2NjLTQuMy4xLm9yaWcvbGliamF2YS9qYXZhL2lvL25hdEZpbGVQb3NpeC5jYwkyMDA3LTA4LTA0IDIzOjUwOjAxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMS9saWJqYXZhL2phdmEvaW8vbmF0RmlsZVBvc2l4LmNjCTIwMDgtMDYtMTAgMTQ6NTg6MTMuMDAwMDAwMDAwICswMjAwCitAQCAtMSw2ICsxLDYgQEAKKyAvLyBuYXRGaWxlLmNjIC0gTmF0aXZlIHBhcnQgb2YgRmlsZSBjbGFzcyBmb3IgUE9TSVguCisgCistLyogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA2CisrLyogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA2LCAyMDA4CisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGliZ2NqLgorQEAgLTI5MiwxMyArMjkyLDcgQEAKKyAKKyAgIGphdmE6OnV0aWw6OkFycmF5TGlzdCAqbGlzdCA9IG5ldyBqYXZhOjp1dGlsOjpBcnJheUxpc3QgKCk7CisgICBzdHJ1Y3QgZGlyZW50ICpkOworLSNpZiBkZWZpbmVkKEhBVkVfUkVBRERJUl9SKSAmJiBkZWZpbmVkKF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUykKKy0gIGludCBuYW1lX21heCA9IHBhdGhjb25mIChidWYsIF9QQ19OQU1FX01BWCk7CistICBjaGFyIGRidWZbc2l6ZW9mIChzdHJ1Y3QgZGlyZW50KSArIG5hbWVfbWF4ICsgMV07CistICB3aGlsZSAocmVhZGRpcl9yIChkaXIsIChzdHJ1Y3QgZGlyZW50ICopIGRidWYsICZkKSA9PSAwICYmIGQgIT0gTlVMTCkKKy0jZWxzZSAvKiBIQVZFX1JFQURESVJfUiAqLworICAgd2hpbGUgKChkID0gcmVhZGRpciAoZGlyKSkgIT0gTlVMTCkKKy0jZW5kaWYgLyogSEFWRV9SRUFERElSX1IgKi8KKyAgICAgeworICAgICAgIC8vIE9taXQgIi4iIGFuZCAiLi4iLgorICAgICAgIGlmIChkLT5kX25hbWVbMF0gPT0gJy4nCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzIxMC1ub3RlR05Vc3RhY2stMDAucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzIxMC1ub3RlR05Vc3RhY2stMDAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY1NjY2MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMjEwLW5vdGVHTlVzdGFjay0wMC5wYXRjaApAQCAtMCwwICsxLDk2IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby82MV9hbGxfZ2NjNC1pYTY0LW5vdGVHTlVzdGFjay5wYXRjaAorMjAwNC0wOS0yMCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZy9yczYwMDAvcHBjLWFzbS5oOiBBZGQgLm5vdGUuR05VLXN0YWNrIHNlY3Rpb24gYWxzbworCW9uIHBwYzY0LWxpbnV4LgorCisJKiBjb25maWcvaWE2NC9saWIxZnVuY3MuYXNtOiBBZGQgLm5vdGUuR05VLXN0YWNrIHNlY3Rpb24gb24KKwlpYTY0LWxpbnV4LgorCSogY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtOiBMaWtld2lzZS4KKwkqIGNvbmZpZy9pYTY0L2NydGVuZC5hc206IExpa2V3aXNlLgorCSogY29uZmlnL2lhNjQvY3J0aS5hc206IExpa2V3aXNlLgorCSogY29uZmlnL2lhNjQvY3J0bi5hc206IExpa2V3aXNlLgorCisyMDA0LTA1LTE0ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogY29uZmlnL2lhNjQvbGludXguaCAoVEFSR0VUX0FTTV9GSUxFX0VORCk6IERlZmluZS4KKworZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtIGdjYy00LjMuMS9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtCistLS0gZ2NjLTQuMy4xLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGJlZ2luLmFzbQkyMDA1LTA5LTI3IDAyOjUyOjI0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMS9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtCTIwMDgtMDYtMTAgMTQ6NTg6MTcuMDAwMDAwMDAwICswMjAwCitAQCAtMjU1LDMgKzI1NSw3IEBACisgLndlYWsgX19jeGFfZmluYWxpemUKKyAjZW5kaWYKKyAud2VhayBfSnZfUmVnaXN0ZXJDbGFzc2VzCisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtIGdjYy00LjMuMS9nY2MvY29uZmlnL2lhNjQvY3J0ZW5kLmFzbQorLS0tIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtCTIwMDUtMDktMjcgMDI6NTI6MjQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtCTIwMDgtMDYtMTAgMTQ6NTg6MTcuMDAwMDAwMDAwICswMjAwCitAQCAtMTIyLDMgKzEyMiw3IEBACisgCisgCWJyLnJldC5zcHRrLm1hbnkgcnAKKyAJLmVuZHAgX19kb19nbG9iYWxfY3RvcnNfYXV4CisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRpLmFzbSBnY2MtNC4zLjEvZ2NjL2NvbmZpZy9pYTY0L2NydGkuYXNtCistLS0gZ2NjLTQuMy4xLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGkuYXNtCTIwMDUtMDYtMjUgMDM6MjI6NDEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2djYy9jb25maWcvaWE2NC9jcnRpLmFzbQkyMDA4LTA2LTEwIDE0OjU4OjE3LjAwMDAwMDAwMCArMDIwMAorQEAgLTY0LDMgKzY0LDcgQEAKKyAJLmJvZHkKKyAKKyAjIGVuZCBvZiBjcnRpLmFzbQorKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0bi5hc20gZ2NjLTQuMy4xL2djYy9jb25maWcvaWE2NC9jcnRuLmFzbQorLS0tIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRuLmFzbQkyMDA1LTA2LTI1IDAzOjIyOjQxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMS9nY2MvY29uZmlnL2lhNjQvY3J0bi5hc20JMjAwOC0wNi0xMCAxNDo1ODoxNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC01NCwzICs1NCw3IEBACisgCWJyLnJldC5zcHRrLm1hbnkgYjAKKyAKKyAjIGVuZCBvZiBjcnRuLmFzbQorKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbSBnY2MtNC4zLjEvZ2NjL2NvbmZpZy9pYTY0L2xpYjFmdW5jcy5hc20KKy0tLSBnY2MtNC4zLjEub3JpZy9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbQkyMDA1LTA5LTI3IDAyOjUyOjI0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMS9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbQkyMDA4LTA2LTEwIDE0OjU4OjE3LjAwMDAwMDAwMCArMDIwMAorQEAgLTc5MiwzICs3OTIsNyBAQAorIAl9CisgCS5lbmRwIF9fZmxvYXR0aXRmCisgI2VuZGlmCisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvaWE2NC9saW51eC5oIGdjYy00LjMuMS9nY2MvY29uZmlnL2lhNjQvbGludXguaAorLS0tIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvaWE2NC9saW51eC5oCTIwMDYtMTItMTIgMTY6MTU6MTkuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4xL2djYy9jb25maWcvaWE2NC9saW51eC5oCTIwMDgtMDYtMTAgMTQ6NTg6MTcuMDAwMDAwMDAwICswMjAwCitAQCAtNSw2ICs1LDggQEAKKyAKKyAjZGVmaW5lIFRBUkdFVF9WRVJTSU9OIGZwcmludGYgKHN0ZGVyciwgIiAoSUEtNjQpIExpbnV4Iik7CisgCisrI2RlZmluZSBUQVJHRVRfQVNNX0ZJTEVfRU5EIGZpbGVfZW5kX2luZGljYXRlX2V4ZWNfc3RhY2sKKysKKyAvKiBUaGlzIGlzIGZvciAtcHJvZmlsZSB0byB1c2UgLWxjX3AgaW5zdGVhZCBvZiAtbGMuICAqLworICN1bmRlZiBDQzFfU1BFQworICNkZWZpbmUgQ0MxX1NQRUMgIiV7cHJvZmlsZTotcH0gJXtHKn0iCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvcnM2MDAwL3BwYy1hc20uaCBnY2MtNC4zLjEvZ2NjL2NvbmZpZy9yczYwMDAvcHBjLWFzbS5oCistLS0gZ2NjLTQuMy4xLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvcHBjLWFzbS5oCTIwMDMtMDYtMDQgMTg6NDQ6NTEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2djYy9jb25maWcvcnM2MDAwL3BwYy1hc20uaAkyMDA4LTA2LTEwIDE0OjU4OjE3LjAwMDAwMDAwMCArMDIwMAorQEAgLTE1OCw3ICsxNTgsNyBAQAorIAkuc2l6ZSBGVU5DX05BTUUobmFtZSksR0xVRSguTCxuYW1lKS1GVU5DX05BTUUobmFtZSkKKyAjZW5kaWYKKyAKKy0jaWYgZGVmaW5lZCBfX2xpbnV4X18gJiYgIWRlZmluZWQgX19wb3dlcnBjNjRfXworKyNpZiBkZWZpbmVkIF9fbGludXhfXworIAkuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2sKKyAJLnByZXZpb3VzCisgI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzIyMC1ub3RlR05Vc3RhY2stMDEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzIyMC1ub3RlR05Vc3RhY2stMDEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY4ZTg1ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMjIwLW5vdGVHTlVzdGFjay0wMS5wYXRjaApAQCAtMCwwICsxLDE5OCBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vNjJfYWxsX2djYzQtbm90ZUdOVXN0YWNrLnBhdGNoCisyMDA1LTAyLTA4ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogc3JjL2FscGhhL29zZi5TOiBBZGQgLm5vdGUuR05VLXN0YWNrIG9uIExpbnV4LgorCSogc3JjL3MzOTAvc3lzdi5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUzogTGlrZXdpc2UuCisJKiBzcmMveDg2L3VuaXg2NC5TOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvc3lzdi5TOiBMaWtld2lzZS4KKwkqIHNyYy9zcGFyYy92OC5TOiBMaWtld2lzZS4KKwkqIHNyYy9zcGFyYy92OS5TOiBMaWtld2lzZS4KKwkqIHNyYy9tNjhrL3N5c3YuUzogTGlrZXdpc2UuCisJKiBzcmMvaWE2NC91bml4LlM6IExpa2V3aXNlLgorCSogc3JjL2FybS9zeXN2LlM6IExpa2V3aXNlLgorCisJKiBpYTY0X3NhdmVfcmVnc19pbl9zdGFjay5zOiBNb3ZlZCB0by4uLgorCSogaWE2NF9zYXZlX3JlZ3NfaW5fc3RhY2suUzogLi4uIHRoaXMuICBBZGQgLm5vdGUuR05VLXN0YWNrCisJb24gTGludXguCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4xLm9yaWcvYm9laG0tZ2MvaWE2NF9zYXZlX3JlZ3NfaW5fc3RhY2suUyBnY2MtNC4zLjEvYm9laG0tZ2MvaWE2NF9zYXZlX3JlZ3NfaW5fc3RhY2suUworLS0tIGdjYy00LjMuMS5vcmlnL2JvZWhtLWdjL2lhNjRfc2F2ZV9yZWdzX2luX3N0YWNrLlMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjEvYm9laG0tZ2MvaWE2NF9zYXZlX3JlZ3NfaW5fc3RhY2suUwkyMDA4LTA2LTEwIDE0OjU4OjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxNSBAQAorKyAgICAgICAgLnRleHQKKysgICAgICAgIC5hbGlnbiAxNgorKyAgICAgICAgLmdsb2JhbCBHQ19zYXZlX3JlZ3NfaW5fc3RhY2sKKysgICAgICAgIC5wcm9jIEdDX3NhdmVfcmVnc19pbl9zdGFjaworK0dDX3NhdmVfcmVnc19pbl9zdGFjazoKKysgICAgICAgIC5ib2R5Zm9vLm1wZworKyAgICAgICAgZmx1c2hycworKyAgICAgICAgOzsKKysgICAgICAgIG1vdiByOD1hci5ic3AKKysgICAgICAgIGJyLnJldC5zcHRrLmZldyBycAorKyAgICAgICAgLmVuZHAgR0Nfc2F2ZV9yZWdzX2luX3N0YWNrCisrCisrI2lmZGVmIF9fbGludXhfXworKwkuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2JvZWhtLWdjL2lhNjRfc2F2ZV9yZWdzX2luX3N0YWNrLnMgZ2NjLTQuMy4xL2JvZWhtLWdjL2lhNjRfc2F2ZV9yZWdzX2luX3N0YWNrLnMKKy0tLSBnY2MtNC4zLjEub3JpZy9ib2VobS1nYy9pYTY0X3NhdmVfcmVnc19pbl9zdGFjay5zCTIwMDEtMTAtMTUgMDY6NTc6NTkuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2JvZWhtLWdjL2lhNjRfc2F2ZV9yZWdzX2luX3N0YWNrLnMJMTk3MC0wMS0wMSAwMjowMDowMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xLDEyICswLDAgQEAKKy0gICAgICAgIC50ZXh0CistICAgICAgICAuYWxpZ24gMTYKKy0gICAgICAgIC5nbG9iYWwgR0Nfc2F2ZV9yZWdzX2luX3N0YWNrCistICAgICAgICAucHJvYyBHQ19zYXZlX3JlZ3NfaW5fc3RhY2sKKy1HQ19zYXZlX3JlZ3NfaW5fc3RhY2s6CistICAgICAgICAuYm9keQorLSAgICAgICAgZmx1c2hycworLSAgICAgICAgOzsKKy0gICAgICAgIG1vdiByOD1hci5ic3AKKy0gICAgICAgIGJyLnJldC5zcHRrLmZldyBycAorLSAgICAgICAgLmVuZHAgR0Nfc2F2ZV9yZWdzX2luX3N0YWNrCistCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2xpYmZmaS9zcmMvYWxwaGEvb3NmLlMgZ2NjLTQuMy4xL2xpYmZmaS9zcmMvYWxwaGEvb3NmLlMKKy0tLSBnY2MtNC4zLjEub3JpZy9saWJmZmkvc3JjL2FscGhhL29zZi5TCTIwMDctMDQtMDYgMTg6MjQ6MTYuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2xpYmZmaS9zcmMvYWxwaGEvb3NmLlMJMjAwOC0wNi0xMCAxNDo1ODoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zNTgsNCArMzU4LDggQEAKKyAJLmJ5dGUJMTYJCSMgdWxlYjEyOCBvZmZzZXQgMTYqLTgKKyAJLmFsaWduIDMKKyAkTEVGREUzOgorKworKyNpZmRlZiBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgorICNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9saWJmZmkvc3JjL2FybS9zeXN2LlMgZ2NjLTQuMy4xL2xpYmZmaS9zcmMvYXJtL3N5c3YuUworLS0tIGdjYy00LjMuMS5vcmlnL2xpYmZmaS9zcmMvYXJtL3N5c3YuUwkyMDA3LTA5LTA0IDE5OjUyOjQ1LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMS9saWJmZmkvc3JjL2FybS9zeXN2LlMJMjAwOC0wNi0xMCAxNDo1ODoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yOTMsMyArMjkzLDYgQEAKKyAJVU5XSU5EIC5mbmVuZAorICAgICAgICAgLnNpemUgICAgQ05BTUUoZmZpX2Nsb3N1cmVfU1lTViksLmZmaV9jbG9zdXJlX1NZU1ZfZW5kLUNOQU1FKGZmaV9jbG9zdXJlX1NZU1YpCisgCisrI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXworKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsJXByb2diaXRzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2xpYmZmaS9zcmMvaWE2NC91bml4LlMgZ2NjLTQuMy4xL2xpYmZmaS9zcmMvaWE2NC91bml4LlMKKy0tLSBnY2MtNC4zLjEub3JpZy9saWJmZmkvc3JjL2lhNjQvdW5peC5TCTIwMDUtMDMtMzAgMjM6NDk6MTkuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2xpYmZmaS9zcmMvaWE2NC91bml4LlMJMjAwOC0wNi0xMCAxNDo1ODoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC01NTMsMyArNTUzLDcgQEAKKyAJZGF0YTgJQHBjcmVsKC5MbGRfaGZhX2Zsb2F0KQkJLy8gRkZJX0lBNjRfVFlQRV9IRkFfRkxPQVQKKyAJZGF0YTgJQHBjcmVsKC5MbGRfaGZhX2RvdWJsZSkJCS8vIEZGSV9JQTY0X1RZUEVfSEZBX0RPVUJMRQorIAlkYXRhOAlAcGNyZWwoLkxsZF9oZmFfbGRvdWJsZSkJLy8gRkZJX0lBNjRfVFlQRV9IRkFfTERPVUJMRQorKworKyNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9saWJmZmkvc3JjL202OGsvc3lzdi5TIGdjYy00LjMuMS9saWJmZmkvc3JjL202OGsvc3lzdi5TCistLS0gZ2NjLTQuMy4xLm9yaWcvbGliZmZpL3NyYy9tNjhrL3N5c3YuUwkyMDA3LTA1LTEwIDIzOjI5OjA0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMS9saWJmZmkvc3JjL202OGsvc3lzdi5TCTIwMDgtMDYtMTAgMTQ6NTg6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMjA3LDMgKzIwNyw3IEBACisgCXJ0cworIAlDRklfRU5EUFJPQygpCisgCS5zaXplCWZmaV9jbG9zdXJlX3N0cnVjdF9TWVNWLC4tZmZpX2Nsb3N1cmVfc3RydWN0X1NZU1YKKysKKysjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4xLm9yaWcvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjQuUyBnY2MtNC4zLjEvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjQuUworLS0tIGdjYy00LjMuMS5vcmlnL2xpYmZmaS9zcmMvcG93ZXJwYy9saW51eDY0LlMJMjAwNy0xMS0xNyAwMDoyNDo1My4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjEvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjQuUwkyMDA4LTA2LTEwIDE0OjU4OjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTE3OSwzICsxNzksNyBAQAorIAkuYWxpZ24gMworIC5MRUZERTE6CisgI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXworKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2xpYmZmaS9zcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUyBnY2MtNC4zLjEvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TCistLS0gZ2NjLTQuMy4xLm9yaWcvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TCTIwMDUtMDgtMTEgMjM6MTg6MjQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2xpYmZmaS9zcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUwkyMDA4LTA2LTEwIDE0OjU4OjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTIwNCwzICsyMDQsNyBAQAorIAkuYWxpZ24gMworIC5MRUZERTE6CisgI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXworKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2xpYmZmaS9zcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIGdjYy00LjMuMS9saWJmZmkvc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUworLS0tIGdjYy00LjMuMS5vcmlnL2xpYmZmaS9zcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TCTIwMDctMTItMDEgMjI6MDA6MDQuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4xL2xpYmZmaS9zcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TCTIwMDgtMDYtMTAgMTQ6NTg6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMjk1LDMgKzI5NSw3IEBACisgLkxFRkRFMToKKyAKKyAjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4xLm9yaWcvbGliZmZpL3NyYy9wb3dlcnBjL3N5c3YuUyBnY2MtNC4zLjEvbGliZmZpL3NyYy9wb3dlcnBjL3N5c3YuUworLS0tIGdjYy00LjMuMS5vcmlnL2xpYmZmaS9zcmMvcG93ZXJwYy9zeXN2LlMJMjAwNy0xMi0wMSAyMjowMDowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjEvbGliZmZpL3NyYy9wb3dlcnBjL3N5c3YuUwkyMDA4LTA2LTEwIDE0OjU4OjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTIyMywzICsyMjMsNyBAQAorICAgICAgIC5hbGlnbiAyCisgLkxFRkRFMToKKyAjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4xLm9yaWcvbGliZmZpL3NyYy9zMzkwL3N5c3YuUyBnY2MtNC4zLjEvbGliZmZpL3NyYy9zMzkwL3N5c3YuUworLS0tIGdjYy00LjMuMS5vcmlnL2xpYmZmaS9zcmMvczM5MC9zeXN2LlMJMjAwMy0xMC0yMSAyMTowMTo1OC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjEvbGliZmZpL3NyYy9zMzkwL3N5c3YuUwkyMDA4LTA2LTEwIDE0OjU4OjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTQyNywzICs0MjcsNiBAQAorIAorICNlbmRpZgorIAorKyNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9saWJmZmkvc3JjL3NwYXJjL3Y4LlMgZ2NjLTQuMy4xL2xpYmZmaS9zcmMvc3BhcmMvdjguUworLS0tIGdjYy00LjMuMS5vcmlnL2xpYmZmaS9zcmMvc3BhcmMvdjguUwkyMDA0LTExLTIyIDE5OjM1OjE2LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMS9saWJmZmkvc3JjL3NwYXJjL3Y4LlMJMjAwOC0wNi0xMCAxNDo1ODoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNjUsMyArMjY1LDcgQEAKKyAJLmJ5dGUJMHgxZgkhIHVsZWIxMjggMHgxZgorIAkuYWxpZ24JV1MKKyAuTExFRkRFMjoKKysKKysjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4xLm9yaWcvbGliZmZpL3NyYy9zcGFyYy92OS5TIGdjYy00LjMuMS9saWJmZmkvc3JjL3NwYXJjL3Y5LlMKKy0tLSBnY2MtNC4zLjEub3JpZy9saWJmZmkvc3JjL3NwYXJjL3Y5LlMJMjAwNC0wMS0yNSAwNzo1ODozMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjEvbGliZmZpL3NyYy9zcGFyYy92OS5TCTIwMDgtMDYtMTAgMTQ6NTg6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMzAwLDMgKzMwMCw3IEBACisgCS5hbGlnbiA4CisgLkxMRUZERTI6CisgI2VuZGlmCisrCisrI2lmZGVmIF9fbGludXhfXworKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2xpYmZmaS9zcmMveDg2L3N5c3YuUyBnY2MtNC4zLjEvbGliZmZpL3NyYy94ODYvc3lzdi5TCistLS0gZ2NjLTQuMy4xLm9yaWcvbGliZmZpL3NyYy94ODYvc3lzdi5TCTIwMDgtMDEtMzAgMTU6MzY6NTguMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4xL2xpYmZmaS9zcmMveDg2L3N5c3YuUwkyMDA4LTA2LTEwIDE0OjU4OjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTQzMCwzICs0MzAsNyBAQAorICNlbmRpZgorIAorICNlbmRpZiAvKiBpZm5kZWYgX194ODZfNjRfXyAqLworKworKyNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9saWJmZmkvc3JjL3g4Ni91bml4NjQuUyBnY2MtNC4zLjEvbGliZmZpL3NyYy94ODYvdW5peDY0LlMKKy0tLSBnY2MtNC4zLjEub3JpZy9saWJmZmkvc3JjL3g4Ni91bml4NjQuUwkyMDA1LTA1LTA1IDA2OjA2OjM4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMS9saWJmZmkvc3JjL3g4Ni91bml4NjQuUwkyMDA4LTA2LTEwIDE0OjU4OjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTQxMCwzICs0MTAsNyBAQAorIC5MRUZERTM6CisgCisgI2VuZGlmIC8qIF9feDg2XzY0X18gKi8KKysKKysjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMjMwLXByMzQ1NzEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzIzMC1wcjM0NTcxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZDBjMzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzIzMC1wcjM0NTcxLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzY0X2FsbF9nY2M0My1wcjM0NTcxLnBhdGNoCitodHRwOi8vZ2NjLmdudS5vcmcvUFIzNDU3MQorCisyMDA3LTEyLTI2ICBSYXNrIEluZ2VtYW5uIExhbWJlcnRzZW4gIDxyYXNrQHN5Z2VodXMuZGs+CisKKwlQUiB0YXJnZXQvMzQ1NzEKKwkqIGNvbmZpZy9hbHBoYS9hbHBoYS5jIChhbHBoYV9jYW5ub3RfZm9yY2VfY29uc3RfbWVtKTogVXNlCisJc3ltYm9saWNfb3BlcmFuZC4KKwkqIHZhcmFzbS5jIChvdXRwdXRfY29uc3RhbnRfcG9vbF8xKTogRml4IHR5cG8uCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4xLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5jIGdjYy00LjMuMS9nY2MvY29uZmlnL2FscGhhL2FscGhhLmMKKy0tLSBnY2MtNC4zLjEub3JpZy9nY2MvY29uZmlnL2FscGhhL2FscGhhLmMJMjAwOC0wMi0wNyAxODo0NToyNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjEvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5jCTIwMDgtMDYtMTAgMTQ6NTg6MjQuMDAwMDAwMDAwICswMjAwCitAQCAtMTExMyw4ICsxMTEzLDcgQEAKKyBzdGF0aWMgYm9vbAorIGFscGhhX2Nhbm5vdF9mb3JjZV9jb25zdF9tZW0gKHJ0eCB4KQorIHsKKy0gIGVudW0gcnR4X2NvZGUgY29kZSA9IEdFVF9DT0RFICh4KTsKKy0gIHJldHVybiBjb2RlID09IFNZTUJPTF9SRUYgfHwgY29kZSA9PSBMQUJFTF9SRUYgfHwgY29kZSA9PSBDT05TVDsKKysgIHJldHVybiBzeW1ib2xpY19vcGVyYW5kICh4LCBHRVRfTU9ERSAoeCkpOworIH0KKyAKKyAvKiBXZSBkbyBub3QgYWxsb3cgaW5kaXJlY3QgY2FsbHMgdG8gYmUgb3B0aW1pemVkIGludG8gc2libGluZyBjYWxscywgbm9yCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy92YXJhc20uYyBnY2MtNC4zLjEvZ2NjL3ZhcmFzbS5jCistLS0gZ2NjLTQuMy4xLm9yaWcvZ2NjL3ZhcmFzbS5jCTIwMDctMTItMDUgMjI6NTU6MTAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4xL2djYy92YXJhc20uYwkyMDA4LTA2LTEwIDE0OjU4OjI0LjAwMDAwMDAwMCArMDIwMAorQEAgLTM3MTAsNyArMzcxMCw3IEBACisgICAgICAgLyogRkFMTFRIUlUgICovCisgCisgICAgIGNhc2UgTEFCRUxfUkVGOgorLSAgICAgIHRtcCA9IFhFWFAgKHgsIDApOworKyAgICAgIHRtcCA9IFhFWFAgKHRtcCwgMCk7CisgICAgICAgZ2NjX2Fzc2VydCAoIUlOU05fREVMRVRFRF9QICh0bXApKTsKKyAgICAgICBnY2NfYXNzZXJ0ICghTk9URV9QICh0bXApCisgCQkgIHx8IE5PVEVfS0lORCAodG1wKSAhPSBOT1RFX0lOU05fREVMRVRFRCk7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzI0MC1wcjI1MzQzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8yNDAtcHIyNTM0My5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzZmNjA3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8yNDAtcHIyNTM0My5wYXRjaApAQCAtMCwwICsxLDIxIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby82Nl9hbGxfZ2NjNDMtcHIyNTM0My5wYXRjaAoraHR0cDovL2djYy5nbnUub3JnL1BSMjUzNDMKKworc25pcGVkIGZyb20gRGViaWFuCisKKzIwMDgtMDQtMjcgIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorCisJKiBjb25maWcvaG9zdC1saW51eC5jIChUUllfRU1QVFlfVk1fU1BBQ0UpOiBEZWZpbmUgZm9yIF9fbWM2ODAwMF9fLgorCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvaG9zdC1saW51eC5jIGdjYy00LjMuMS9nY2MvY29uZmlnL2hvc3QtbGludXguYworLS0tIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcvaG9zdC1saW51eC5jCTIwMDctMDgtMDIgMTI6NDk6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2djYy9jb25maWcvaG9zdC1saW51eC5jCTIwMDgtMDYtMTAgMTQ6NTg6MjguMDAwMDAwMDAwICswMjAwCitAQCAtODQsNiArODQsOCBAQAorICMgZGVmaW5lIFRSWV9FTVBUWV9WTV9TUEFDRQkweDgwMDAwMDAwMDAKKyAjZWxpZiBkZWZpbmVkKF9fc3BhcmNfXykKKyAjIGRlZmluZSBUUllfRU1QVFlfVk1fU1BBQ0UJMHg2MDAwMDAwMAorKyNlbGlmIGRlZmluZWQoX19tYzY4MDAwX18pCisrIyBkZWZpbmUgVFJZX0VNUFRZX1ZNX1NQQUNFCTB4NDAwMDAwMDAKKyAjZWxzZQorICMgZGVmaW5lIFRSWV9FTVBUWV9WTV9TUEFDRQkwCisgI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzI1MC1zaC1wcjI0ODM2LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8yNTAtc2gtcHIyNDgzNi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmIyYjRjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8yNTAtc2gtcHIyNDgzNi5wYXRjaApAQCAtMCwwICsxLDI4IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby83NF9hbGxfc2gtcHIyNDgzNi5wYXRjaAoraHR0cDovL3NvdXJjZWZvcmdlLm5ldC9tYWlsYXJjaGl2ZS9mb3J1bS5waHA/dGhyZWFkX2lkPTg5NTkzMDQmZm9ydW1faWQ9NTM0OAoraHR0cDovL2djYy5nbnUub3JnL1BSMjQ4MzYKKworZGlmZiAtZHVyTiBnY2MtNC4zLjIub3JpZy9nY2MvY29uZmlndXJlIGdjYy00LjMuMi9nY2MvY29uZmlndXJlCistLS0gZ2NjLTQuMy4yLm9yaWcvZ2NjL2NvbmZpZ3VyZQkyMDA4LTA5LTIzIDE5OjQxOjQ1LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMi9nY2MvY29uZmlndXJlCTIwMDgtMDktMjMgMTk6NDM6MTEuMDAwMDAwMDAwICswMjAwCitAQCAtMjA2ODksNyArMjA2ODksNyBAQAorIAl0bHNfZmlyc3RfbWlub3I9MTQKKyAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCisgCTs7CistICBzaC0qLSogfCBzaFszNF0tKi0qKQorKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCisgICAgIGNvbmZ0ZXN0X3M9JworIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKKyBmb286CS5sb25nCTI1CitkaWZmIC1kdXJOIGdjYy00LjMuMi5vcmlnL2djYy9jb25maWd1cmUuYWMgZ2NjLTQuMy4yL2djYy9jb25maWd1cmUuYWMKKy0tLSBnY2MtNC4zLjIub3JpZy9nY2MvY29uZmlndXJlLmFjCTIwMDgtMDktMjMgMTk6NDE6NDUuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4yL2djYy9jb25maWd1cmUuYWMJMjAwOC0wOS0yMyAxOTo0MzoxMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNTUyLDcgKzI1NTIsNyBAQAorIAl0bHNfZmlyc3RfbWlub3I9MTQKKyAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCisgCTs7CistICBzaC0qLSogfCBzaFszNF0tKi0qKQorKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCisgICAgIGNvbmZ0ZXN0X3M9JworIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKKyBmb286CS5sb25nCTI1CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzI2MC11Y2xpYmMtY29uZi1ub3Vwc3RyZWFtLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8yNjAtdWNsaWJjLWNvbmYtbm91cHN0cmVhbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTc2OTY4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8yNjAtdWNsaWJjLWNvbmYtbm91cHN0cmVhbS5wYXRjaApAQCAtMCwwICsxLDEzIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL3VjbGliYy85MF9hbGxfMTAzLXVjbGliYy1jb25mLW5vdXBzdHJlYW0ucGF0Y2gKK2RpZmYgLWR1ck4gZ2NjLTQuMy4xLm9yaWcvZ2NjL2NvbmZpZy5nY2MgZ2NjLTQuMy4xL2djYy9jb25maWcuZ2NjCistLS0gZ2NjLTQuMy4xLm9yaWcvZ2NjL2NvbmZpZy5nY2MJMjAwOC0wNi0xMCAxNDo1ODowOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjEvZ2NjL2NvbmZpZy5nY2MJMjAwOC0wNi0xMCAxNDo1ODozNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMTQ5LDcgKzIxNDksNyBAQAorICAgICAgICAgOzsKKyBzaC0qLWVsZiogfCBzaFsxMjM0NmxdKi0qLWVsZiogfCBzaCotKi1rYW9zKiB8IFwKKyBzaC0qLXN5bWJpYW5lbGYqIHwgc2hbMTIzNDZsXSotKi1zeW1iaWFuZWxmKiB8IFwKKy0gIHNoLSotbGludXgqIHwgc2hbMzQ2bGJlXSotKi1saW51eCogfCBcCisrICBzaCotKi1saW51eCogfCBzaFszNDZsYmVdKi0qLWxpbnV4KiB8IFwKKyAgIHNoLSotbmV0YnNkZWxmKiB8IHNobCotKi1uZXRic2RlbGYqIHwgc2g1LSotbmV0YnNkKiB8IHNoNWwqLSotbmV0YnNkKiB8IFwKKyAgICBzaDY0LSotbmV0YnNkKiB8IHNoNjRsKi0qLW5ldGJzZCopCisgCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gc2gvdC1zaCBzaC90LWVsZiIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMjcwLW1pc3NpbmctZXhlY2luZm9faC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMjcwLW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTc0OWIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8yNzAtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvdWNsaWJjLzkwX2FsbF8zMDEtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCBnY2MtNC4zLjEvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCistLS0gZ2NjLTQuMy4xLm9yaWcvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCTIwMDctMDQtMjMgMjM6MTA6MDkuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAkyMDA4LTA2LTEwIDE0OjU4OjU0LjAwMDAwMDAwMCArMDIwMAorQEAgLTUwMyw3ICs1MDMsNyBAQAorICNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX0dMSUJDX18pCisgIyBpbmNsdWRlIDxmZWF0dXJlcy5oPgorICMgaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxIHx8IF9fR0xJQkNfXyA+IDIpIFwKKy0gICAgICYmICFkZWZpbmVkKF9faWE2NF9fKQorKyAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pICYmICFkZWZpbmVkKF9fVUNMSUJDX18pCisgIyAgIGlmbmRlZiBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgICAgZGVmaW5lIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMjgwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMjgwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDYyOTE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8yODAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvdWNsaWJjLzkwX2FsbF8zMDMtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCitkaWZmIC1kdXJOIGdjYy00LjMuMi5vcmlnL2xpYnN0ZGMrKy12My9jb25maWd1cmUgZ2NjLTQuMy4yL2xpYnN0ZGMrKy12My9jb25maWd1cmUKKy0tLSBnY2MtNC4zLjIub3JpZy9saWJzdGRjKystdjMvY29uZmlndXJlCTIwMDgtMDctMDcgMjE6NDk6NTQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4yL2xpYnN0ZGMrKy12My9jb25maWd1cmUJMjAwOC0wOS0yMyAxOTo0NToyNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zODkzNSw2ICszODkzNSw5IEBACisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaW5jbHVkZSA8Y29tcGxleC5oPgorKyNpZmRlZiBfX1VDTElCQ19fCisrI2Vycm9yIHVnbHkgaGFjayB0byBtYWtlIHN1cmUgY29uZmlndXJlIHRlc3QgZmFpbHMgaGVyZSBmb3IgY3Jvc3MgdW50aWwgdUNsaWJjIHN1cHBvcnRzIHRoZSBjb21wbGV4IGZ1bmNzCisrI2VuZGlmCisgaW50CisgbWFpbiAoKQorIHsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMjkwLWluZGV4X21hY3JvLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8yOTAtaW5kZXhfbWFjcm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU3OTRhYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMjkwLWluZGV4X21hY3JvLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvdWNsaWJjLzkwX2FsbF8zMDQtaW5kZXhfbWFjcm8ucGF0Y2gKK2RpZmYgLWR1ck4gZ2NjLTQuMy4xLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUgZ2NjLTQuMy4xL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCistLS0gZ2NjLTQuMy4xLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUJMjAwOC0wMS0zMSAxOTo0NDo1NS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUJMjAwOC0wNi0xMCAxNDo1OTowMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC01OSw2ICs1OSw5IEBACisgI2luY2x1ZGUgPGJpdHMvZ3Roci5oPgorICNpbmNsdWRlIDx0cjEvZnVuY3Rpb25hbD4KKyAKKysvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCisrI3VuZGVmIGluZGV4CisrCisgIyBpZmRlZiBfX0dDCisgIyAgIGRlZmluZSBfX0dDX0NPTlNUIGNvbnN0CisgIyBlbHNlCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oIGdjYy00LjMuMS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAorLS0tIGdjYy00LjMuMS5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCTIwMDctMDUtMDQgMTc6MDY6NDYuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCTIwMDgtMDYtMTAgMTQ6NTk6MDIuMDAwMDAwMDAwICswMjAwCitAQCAtNTQsNiArNTQsOSBAQAorICNpbmNsdWRlIDxleHQvbWVtb3J5PiAvLyBGb3IgdW5pbml0aWFsaXplZF9jb3B5X24KKyAjaW5jbHVkZSA8ZXh0L251bWVyaWM+IC8vIEZvciBwb3dlcgorIAorKy8qIGNvcGUgdy8gaW5kZXggZGVmaW5lZCBhcyBtYWNybywgU3VTdjMgcHJvcG9zYWwgKi8KKysjdW5kZWYgaW5kZXgKKysKKyBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorIAorICAgdXNpbmcgc3RkOjpzaXplX3Q7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzMwMC1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMzAwLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NzJmYzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzMwMC1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL3VjbGliYy85MF9hbGxfMzA1LWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMgZ2NjLTQuMy4xL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMKKy0tLSBnY2MtNC4zLjEub3JpZy9saWJtdWRmbGFwL21mLWhvb2tzMi5jCTIwMDUtMDktMjMgMjM6NTg6MzkuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMJMjAwOC0wNi0xMCAxNDo1OTowNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC00MjcsNyArNDI3LDcgQEAKKyB7CisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzLCBuLCBfX01GX0NIRUNLX1dSSVRFLCAiYnplcm8gcmVnaW9uIik7CistICBiemVybyAocywgbik7CisrICBtZW1zZXQgKHMsIDAsIG4pOworIH0KKyAKKyAKK0BAIC00MzcsNyArNDM3LDcgQEAKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHNyYywgbiwgX19NRl9DSEVDS19SRUFELCAiYmNvcHkgc3JjIik7CisgICBNRl9WQUxJREFURV9FWFRFTlQoZGVzdCwgbiwgX19NRl9DSEVDS19XUklURSwgImJjb3B5IGRlc3QiKTsKKy0gIGJjb3B5IChzcmMsIGRlc3QsIG4pOworKyAgbWVtbW92ZSAoZGVzdCwgc3JjLCBuKTsKKyB9CisgCisgCitAQCAtNDQ3LDcgKzQ0Nyw3IEBACisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzMSwgbiwgX19NRl9DSEVDS19SRUFELCAiYmNtcCAxc3QgYXJnIik7CisgICBNRl9WQUxJREFURV9FWFRFTlQoczIsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjbXAgMm5kIGFyZyIpOworLSAgcmV0dXJuIGJjbXAgKHMxLCBzMiwgbik7CisrICByZXR1cm4gbWVtY21wIChzMSwgczIsIG4pOworIH0KKyAKKyAKK0BAIC00NTYsNyArNDU2LDcgQEAKKyAgIHNpemVfdCBuID0gc3RybGVuIChzKTsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIENMQU1QQUREKG4sIDEpLCBfX01GX0NIRUNLX1JFQUQsICJpbmRleCByZWdpb24iKTsKKy0gIHJldHVybiBpbmRleCAocywgYyk7CisrICByZXR1cm4gc3RyY2hyIChzLCBjKTsKKyB9CisgCisgCitAQCAtNDY1LDcgKzQ2NSw3IEBACisgICBzaXplX3QgbiA9IHN0cmxlbiAocyk7CisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzLCBDTEFNUEFERChuLCAxKSwgX19NRl9DSEVDS19SRUFELCAicmluZGV4IHJlZ2lvbiIpOworLSAgcmV0dXJuIHJpbmRleCAocywgYyk7CisrICByZXR1cm4gc3RycmNociAocywgYyk7CisgfQorIAorIC8qIFhYWDogIHN0cGNweSwgbWVtY2NweSAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8zMTAtYXJtLXNvZnRmbG9hdC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMzEwLWFybS1zb2Z0ZmxvYXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU3ZWE3YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMzEwLWFybS1zb2Z0ZmxvYXQucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCBnY2MtNC4zLjEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKKy0tLSBnY2MtNC4zLjEub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDA3LTExLTA4IDE0OjQ0OjA5LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMS9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDA4LTA3LTIzIDE1OjMwOjU3LjAwMDAwMDAwMCArMDIwMAorQEAgLTYwLDcgKzYwLDcgQEAKKyAgICAle3NoYXJlZDotbGN9IFwKKyAgICAleyFzaGFyZWQ6JXtwcm9maWxlOi1sY19wfSV7IXByb2ZpbGU6LWxjfX0iCisgCistI2RlZmluZSBMSUJHQ0NfU1BFQyAiJXttc29mdC1mbG9hdDotbGZsb2F0fSAle21mbG9hdC1hYmk9c29mdCo6LWxmbG9hdH0gLWxnY2MiCisrI2RlZmluZSBMSUJHQ0NfU1BFQyAiLWxnY2MiCisgCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorIAorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9nY2MvY29uZmlnL2FybS90LWxpbnV4IGdjYy00LjMuMS9nY2MvY29uZmlnL2FybS90LWxpbnV4CistLS0gZ2NjLTQuMy4xLm9yaWcvZ2NjL2NvbmZpZy9hcm0vdC1saW51eAkyMDA2LTExLTA5IDIzOjE0OjI3LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMS9nY2MvY29uZmlnL2FybS90LWxpbnV4CTIwMDgtMDctMjMgMTk6MTU6MjUuMDAwMDAwMDAwICswMjAwCitAQCAtMyw3ICszLDEyIEBACisgVEFSR0VUX0xJQkdDQzJfQ0ZMQUdTID0gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZQSUMKKyAKKyBMSUIxQVNNU1JDID0gYXJtL2xpYjFmdW5jcy5hc20KKy1MSUIxQVNNRlVOQ1MgPSBfdWRpdnNpMyBfZGl2c2kzIF91bW9kc2kzIF9tb2RzaTMgX2R2bWRfbG54CisrTElCMUFTTUZVTkNTID0gX3VkaXZzaTMgX2RpdnNpMyBfdW1vZHNpMyBfbW9kc2kzIF9kdm1kX3RscyBfYmJfaW5pdF9mdW5jIFwKKysJX2NhbGxfdmlhX3JYIF9pbnRlcndvcmtfY2FsbF92aWFfclggXAorKwlfbHNocmRpMyBfYXNocmRpMyBfYXNobGRpMyBcCisrCV9uZWdkZjIgX2FkZHN1YmRmMyBfbXVsZGl2ZGYzIF9jbXBkZjIgX3Vub3JkZGYyIF9maXhkZnNpIF9maXh1bnNkZnNpIFwKKysJX3RydW5jZGZzZjIgX25lZ3NmMiBfYWRkc3Vic2YzIF9tdWxkaXZzZjMgX2NtcHNmMiBfdW5vcmRzZjIgXAorKwlfZml4c2ZzaSBfZml4dW5zc2ZzaSBfZmxvYXRkaWRmIF9mbG9hdGRpc2YgX2Zsb2F0dW5kaWRmIF9mbG9hdHVuZGlzZgorIAorICMgTVVMVElMSUJfT1BUSU9OUyA9IG1oYXJkLWZsb2F0L21zb2Z0LWZsb2F0CisgIyBNVUxUSUxJQl9ESVJOQU1FUyA9IGhhcmQtZmxvYXQgc29mdC1mbG9hdApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8zMjAtYWxwaGEtc2lnbmFsX2gucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzMyMC1hbHBoYS1zaWduYWxfaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2UxNzk2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8zMjAtYWxwaGEtc2lnbmFsX2gucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorLS0tIGdjYy00LjIuMS1zdG9jay9nY2MvY29uZmlnL2FscGhhL2xpbnV4LXVud2luZC5oCTIwMDUtMDYtMjQgMjA6MjI6NDEuMDAwMDAwMDAwIC0wNTAwCisrKysgZ2NjLTQuMi4xL2djYy9jb25maWcvYWxwaGEvbGludXgtdW53aW5kLmgJMjAwNy0wOS0wMSAyMDoyMTozNC4wMDAwMDAwMDAgLTA1MDAKK0BAIC0yOSw2ICsyOSw5IEBAIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAvKiBEbyBjb2RlIHJlYWRpbmcgdG8gaWRlbnRpZnkgYSBzaWduYWwgZnJhbWUsIGFuZCBzZXQgdGhlIGZyYW1lCisgICAgc3RhdGUgZGF0YSBhcHByb3ByaWF0ZWx5LiAgU2VlIHVud2luZC1kdzIuYyBmb3IgdGhlIHN0cnVjdHMuICAqLworIAorKy8qIERvbid0IHVzZSB0aGlzIGlmIGluaGliaXRfbGliYyBpcyBzZXQKKysgICBUaGUgYnVpbGQgZm9yIHRoaXMgdGFyZ2V0IHdpbGwgZmFpbCB0cnlpbmcgdG8gaW5jbHVkZSBtaXNzaW5nIGhlYWRlcnMgKi8KKysjaWZuZGVmIGluaGliaXRfbGliYworICNpbmNsdWRlIDxzaWduYWwuaD4KKyAjaW5jbHVkZSA8c3lzL3Vjb250ZXh0Lmg+CisgCitAQCAtODAsMyArODMsNCBAQCBhbHBoYV9mYWxsYmFja19mcmFtZV9zdGF0ZSAoc3RydWN0IF9VbndpCisgICBmcy0+cmV0YWRkcl9jb2x1bW4gPSA2NDsKKyAgIHJldHVybiBfVVJDX05PX1JFQVNPTjsKKyB9CisrI2VuZGlmIC8qIGluaGliaXRfbGliYyAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8zMzAtdW53aW5kLWZvci11Q2xpYmMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzMzMC11bndpbmQtZm9yLXVDbGliYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWY3ZjM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8zMzAtdW53aW5kLWZvci11Q2xpYmMucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorZGlmZiAtZHVyTiBnY2MtNC4zLjEub3JpZy9nY2MvY29uZmlnL3QtbGludXgtdWNsaWJjIGdjYy00LjMuMS9nY2MvY29uZmlnL3QtbGludXgtdWNsaWJjCistLS0gZ2NjLTQuMy4xLm9yaWcvZ2NjL2NvbmZpZy90LWxpbnV4LXVjbGliYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMS9nY2MvY29uZmlnL3QtbGludXgtdWNsaWJjCTIwMDgtMDctMjkgMTM6MDc6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDUgQEAKKysjIFJlbW92ZSBnbGliYyBzcGVjaWZpYyBmaWxlcyBhZGRlZCBpbiB0LWxpbnV4CisrU0hMSUJfTUFQRklMRVMgOj0gJChmaWx0ZXItb3V0ICQoc3JjZGlyKS9jb25maWcvbGliZ2NjLWdsaWJjLnZlciwgJChTSExJQl9NQVBGSUxFUykpCisrCisrIyBVc2UgdW53aW5kLWR3Mi1mZGUgaW5zdGVhZCBvZiB1bndpbmQtZHcyLWZkZS1nbGliYworK0xJQjJBRERFSCA6PSAkKHN1YnN0IHVud2luZC1kdzItZmRlLWdsaWJjLmMsdW53aW5kLWR3Mi1mZGUuYywkKExJQjJBRERFSCkpCitkaWZmIC1kdXJOIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcuZ2NjIGdjYy00LjMuMS9nY2MvY29uZmlnLmdjYworLS0tIGdjYy00LjMuMS5vcmlnL2djYy9jb25maWcuZ2NjCTIwMDgtMDctMjkgMTM6MTE6MDIuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4xL2djYy9jb25maWcuZ2NjCTIwMDgtMDctMjkgMTM6MTA6MDUuMDAwMDAwMDAwICswMjAwCitAQCAtMjY1MSw2ICsyNjUxLDEyIEBACisgCTs7CisgZXNhYworIAorKyMgUmF0aGVyIHRoYW4gaG9vayBpbnRvIGVhY2ggdGFyZ2V0LCBqdXN0IGRvIGl0IGFmdGVyIGFsbCB0aGUgbGludXgKKysjIHRhcmdldHMgaGF2ZSBiZWVuIHByb2Nlc3NlZAorK2Nhc2UgJHt0YXJnZXR9IGluCisrICAqLWxpbnV4LXVjbGliYyopIHRtX2RlZmluZXM9IiR7dG1fZGVmaW5lc30gVVNFX1VDTElCQyIgOyB0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IHQtbGludXgtdWNsaWJjIjs7CisrZXNhYworKworIGNhc2UgJHt0YXJnZXR9IGluCisgaVszNDU2N104Ni0qLWxpbnV4KmFvdXQqIHwgaVszNDU2N104Ni0qLWxpbnV4KmxpYmMxKQorIAl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IGkzODYvdC1nbW1fbWFsbG9jIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8zNDAtbWFrZS1tbm8tc3BlLXdvcmstYXMtZXhwZWN0ZWQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzM0MC1tYWtlLW1uby1zcGUtd29yay1hcy1leHBlY3RlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjcwMmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8zNDAtbWFrZS1tbm8tc3BlLXdvcmstYXMtZXhwZWN0ZWQucGF0Y2gKQEAgLTAsMCArMSw4NSBAQAorMjAwOC0wNC0wMyAgTmF0aGFuIEZyb3lkICA8ZnJveWRuakBjb2Rlc291cmNlcnkuY29tPgorICAgICAgICAgICAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AY29kZXNvdXJjZXJ5LmNvbT4KKworICAgICAgICAqIGNvbmZpZy9yczYwMDAvcnM2MDAwLm9wdCAobXNwZSk6IFJlbW92ZSBWYXIgcHJvcGVydHkuCisgICAgICAgIChtaXNlbCk6IExpa2V3aXNlLgorICAgICAgICAqIGNvbmZpZy9yczYwMDAvcnM2MDAwLmggKHJzNjAwMF9zcGUpOiBEZWNsYXJlLgorICAgICAgICAocnM2MDAwX2lzZWwpOiBMaWtld2lzZS4KKyAgICAgICAgKiBjb25maWcvcnM2MDAwL3JzNjAwMC5jIChyczYwMDBfc3BlKTogTmV3IHZhcmlhYmxlLgorICAgICAgICAocnM2MDAwX2lzZWwpOiBOZXcgdmFyaWFibGUuCisgICAgICAgIChyczYwMDBfaGFuZGxlX29wdGlvbik6IEhhbmRsZSBPUFRfbXNwZSBhbmQgT1BUX21pc2VsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4yLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmMgZ2NjLTQuMy4yL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5jCistLS0gZ2NjLTQuMy4yLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmMJMjAwOC0wNi0xMCAxOToxMzo1Ny4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjIvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmMJMjAwOC0wOS0yMyAxOTo0Njo0NS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNzQsOSArMTc0LDE1IEBACisgLyogTm9uemVybyB0byB1c2UgQWx0aVZlYyBBQkkuICAqLworIGludCByczYwMDBfYWx0aXZlY19hYmk7CisgCisrLyogTm9uemVybyBpZiB3ZSB3YW50IFNQRSBTSU1EIGluc3RydWN0aW9ucy4gICovCisraW50IHJzNjAwMF9zcGU7CisrCisgLyogTm9uemVybyBpZiB3ZSB3YW50IFNQRSBBQkkgZXh0ZW5zaW9ucy4gICovCisgaW50IHJzNjAwMF9zcGVfYWJpOworIAorKy8qIE5vbnplcm8gdG8gdXNlIGlzZWwgaW5zdHJ1Y3Rpb25zLiAgKi8KKytpbnQgcnM2MDAwX2lzZWw7CisrCisgLyogTm9uemVybyBpZiBmbG9hdGluZyBwb2ludCBvcGVyYXRpb25zIGFyZSBkb25lIGluIHRoZSBHUFJzLiAgKi8KKyBpbnQgcnM2MDAwX2Zsb2F0X2dwcnMgPSAwOworIAorQEAgLTIxNDQsMTEgKzIxNTAsMjEgQEAKKyAgICAgICByczYwMDBfcGFyc2VfeWVzX25vX29wdGlvbiAoInZyc2F2ZSIsIGFyZywgJihUQVJHRVRfQUxUSVZFQ19WUlNBVkUpKTsKKyAgICAgICBicmVhazsKKyAKKysgICAgY2FzZSBPUFRfbWlzZWw6CisrICAgICAgcnM2MDAwX2V4cGxpY2l0X29wdGlvbnMuaXNlbCA9IHRydWU7CisrICAgICAgcnM2MDAwX2lzZWwgPSB2YWx1ZTsKKysgICAgICBicmVhazsKKysKKyAgICAgY2FzZSBPUFRfbWlzZWxfOgorICAgICAgIHJzNjAwMF9leHBsaWNpdF9vcHRpb25zLmlzZWwgPSB0cnVlOworICAgICAgIHJzNjAwMF9wYXJzZV95ZXNfbm9fb3B0aW9uICgiaXNlbCIsIGFyZywgJihyczYwMDBfaXNlbCkpOworICAgICAgIGJyZWFrOworIAorKyAgICBjYXNlIE9QVF9tc3BlOgorKyAgICAgIHJzNjAwMF9leHBsaWNpdF9vcHRpb25zLnNwZSA9IHRydWU7CisrICAgICAgcnM2MDAwX3NwZSA9IHZhbHVlOworKyAgICAgIGJyZWFrOworKworICAgICBjYXNlIE9QVF9tc3BlXzoKKyAgICAgICByczYwMDBfZXhwbGljaXRfb3B0aW9ucy5zcGUgPSB0cnVlOworICAgICAgIHJzNjAwMF9wYXJzZV95ZXNfbm9fb3B0aW9uICgic3BlIiwgYXJnLCAmKHJzNjAwMF9zcGUpKTsKK2RpZmYgLWR1ck4gZ2NjLTQuMy4yLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLm9wdCBnY2MtNC4zLjIvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLm9wdAorLS0tIGdjYy00LjMuMi5vcmlnL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5vcHQJMjAwNy0xMC0zMSAwODo1NjowMS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjIvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLm9wdAkyMDA4LTA5LTIzIDE5OjQ2OjQ1LjAwMDAwMDAwMCArMDIwMAorQEAgLTE5MCw3ICsxOTAsNyBAQAorIC1tdnJzYXZlPXllcy9ubwlEZXByZWNhdGVkIG9wdGlvbi4gIFVzZSAtbXZyc2F2ZS8tbW5vLXZyc2F2ZSBpbnN0ZWFkCisgCisgbWlzZWwKKy1UYXJnZXQgVmFyKHJzNjAwMF9pc2VsKQorK1RhcmdldAorIEdlbmVyYXRlIGlzZWwgaW5zdHJ1Y3Rpb25zCisgCisgbWlzZWw9CitAQCAtMTk4LDcgKzE5OCw3IEBACisgLW1pc2VsPXllcy9ubwlEZXByZWNhdGVkIG9wdGlvbi4gIFVzZSAtbWlzZWwvLW1uby1pc2VsIGluc3RlYWQKKyAKKyBtc3BlCistVGFyZ2V0IFZhcihyczYwMDBfc3BlKQorK1RhcmdldAorIEdlbmVyYXRlIFNQRSBTSU1EIGluc3RydWN0aW9ucyBvbiBFNTAwCisgCisgbXBhaXJlZAorZGlmZiAtZHVyTiBnY2MtNC4zLjIub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuaCBnY2MtNC4zLjIvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmgKKy0tLSBnY2MtNC4zLjIub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuaAkyMDA4LTAxLTI2IDE4OjE4OjM1LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMi9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuaAkyMDA4LTA5LTIzIDE5OjQ2OjQ1LjAwMDAwMDAwMCArMDIwMAorQEAgLTM0OSw2ICszNDksOCBAQAorIGV4dGVybiBpbnQgcnM2MDAwX2llZWVxdWFkOworIGV4dGVybiBpbnQgcnM2MDAwX2FsdGl2ZWNfYWJpOworIGV4dGVybiBpbnQgcnM2MDAwX3NwZV9hYmk7CisrZXh0ZXJuIGludCByczYwMDBfc3BlOworK2V4dGVybiBpbnQgcnM2MDAwX2lzZWw7CisgZXh0ZXJuIGludCByczYwMDBfZmxvYXRfZ3ByczsKKyBleHRlcm4gaW50IHJzNjAwMF9hbGlnbm1lbnRfZmxhZ3M7CisgZXh0ZXJuIGNvbnN0IGNoYXIgKnJzNjAwMF9zY2hlZF9pbnNlcnRfbm9wc19zdHI7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzM1MC1zaC13aXRob3V0LWhlYWRlcnMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzM1MC1zaC13aXRob3V0LWhlYWRlcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdkZGI2NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMzUwLXNoLXdpdGhvdXQtaGVhZGVycy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitPbiAyMDA4MTAxMSwgS2hlbSBSQUogd3JpdGVzOgorIFlvdSBoYXZlIHRvIGJhciBnY2MgdHJ5aW5nIHRvIGJ1aWxkIHVud2luZGluZyBhdCBzdGFnZSAxLiBUcnkgdGhlCisgYXR0YWNoZWQgcGF0Y2ggYW5kIHNlZSBpZiBpdCBoZWxwcy4KKworIGdjYy9jb25maWcvc2gvbGludXgtdW53aW5kLmggfCAgICAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworSW5kZXg6IGdjYy00XzItYnJhbmNoL2djYy9jb25maWcvc2gvbGludXgtdW53aW5kLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNF8yLWJyYW5jaC5vcmlnL2djYy9jb25maWcvc2gvbGludXgtdW53aW5kLmgJMjAwOC0wNy0wMSAxNzoyNDo0MC4wMDAwMDAwMDAgLTA3MDAKKysrKyBnY2MtNF8yLWJyYW5jaC9nY2MvY29uZmlnL3NoL2xpbnV4LXVud2luZC5oCTIwMDgtMDctMDEgMTc6MjU6NDcuMDAwMDAwMDAwIC0wNzAwCitAQCAtMjYsNiArMjYsOCBAQCBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgCisrI2lmbmRlZiBpbmhpYml0X2xpYmMKKysKKyAvKiBEbyBjb2RlIHJlYWRpbmcgdG8gaWRlbnRpZnkgYSBzaWduYWwgZnJhbWUsIGFuZCBzZXQgdGhlIGZyYW1lCisgICAgc3RhdGUgZGF0YSBhcHByb3ByaWF0ZWx5LiAgU2VlIHVud2luZC1kdzIuYyBmb3IgdGhlIHN0cnVjdHMuICAqLworIAorQEAgLTI1MSwzICsyNTMsNCBAQCBzaF9mYWxsYmFja19mcmFtZV9zdGF0ZSAoc3RydWN0IF9VbndpbmRfCisgICByZXR1cm4gX1VSQ19OT19SRUFTT047CisgfQorICNlbmRpZiAvKiBkZWZpbmVkIChfX1NINV9fKSAqLworKyNlbmRpZiAvKiBpZm5kZWYgaW5oaWJpdF9saWJjICovCisKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMzYwLWZpeC1leHBlbnNpdmUtb3B0aW1pemUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzM2MC1maXgtZXhwZW5zaXZlLW9wdGltaXplLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5OWFjNTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzM2MC1maXgtZXhwZW5zaXZlLW9wdGltaXplLnBhdGNoCkBAIC0wLDAgKzEsMjA3IEBACitQUiB0cmVlLW9wdGltaXphdGlvbi8zMjA0NAorCitGcm9tOiByYWtkdmVyCitEYXRlOiAyMDA4LTEyLTEyIDIxOjMyOjQ3ICswMTAwCisKKyogdHJlZS1zY2FsYXItZXZvbHV0aW9uLmggKGV4cHJlc3Npb25fZXhwZW5zaXZlX3ApOiBEZWNsYXJlLgorKiB0cmVlLXNjYWxhci1ldm9sdXRpb24uYyAoZXhwcmVzc2lvbl9leHBlbnNpdmVfcCk6IE5ldyBmdW5jdGlvbi4KKyhzY2V2X2NvbnN0X3Byb3ApOiBBdm9pZCBpbnRyb2R1Y2luZyBleHBlbnNpdmUgZXhwcmVzc2lvbnMuCisqIHRyZWUtc3NhLWxvb3AtaXZvcHRzLmMgKG1heV9lbGltaW5hdGVfaXYpOiBEaXR0by4KKworKiBnY2MuZGcvcHIzNDAyNy0xLmM6IENoYW5nZSBvdXRjb21lLgorKiBnY2MuZGcvdHJlZS1zc2EvcHIzMjA0NC5jOiBOZXcgdGVzdC4KKworY2hlcnJ5IHBpY2tlZCBmcm9tIHN2bjovL2djYy5nbnUub3JnL3N2bi9nY2MvdHJ1bmssIHJldiAxNDI3MTkgYW5kIGFkYXB0ZWQgdG8KK2FwcGx5IG9uIGdjYyA0LjMuMgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luZGV4OiBnY2MtNC4zLjIvZ2NjL3RyZWUtc2NhbGFyLWV2b2x1dGlvbi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuMy4yLm9yaWcvZ2NjL3RyZWUtc2NhbGFyLWV2b2x1dGlvbi5jCTIwMDktMDEtMjggMTA6MTQ6MzcuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4yL2djYy90cmVlLXNjYWxhci1ldm9sdXRpb24uYwkyMDA5LTAxLTI4IDEwOjE3OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTI3MTYsNiArMjcxNiw1MCBAQAorICAgc2NhbGFyX2V2b2x1dGlvbl9pbmZvID0gTlVMTDsKKyB9CisgCisrLyogUmV0dXJucyB0cnVlIGlmIHRoZSBleHByZXNzaW9uIEVYUFIgaXMgY29uc2lkZXJlZCB0byBiZSB0b28gZXhwZW5zaXZlCisrICAgZm9yIHNjZXZfY29uc3RfcHJvcC4gICovCisrCisrYm9vbAorK2V4cHJlc3Npb25fZXhwZW5zaXZlX3AgKHRyZWUgZXhwcikKKyt7CisrICBlbnVtIHRyZWVfY29kZSBjb2RlOworKworKyAgaWYgKGlzX2dpbXBsZV92YWwgKGV4cHIpKQorKyAgICByZXR1cm4gZmFsc2U7CisrCisrICBjb2RlID0gVFJFRV9DT0RFIChleHByKTsKKysgIGlmIChjb2RlID09IFRSVU5DX0RJVl9FWFBSCisrICAgICAgfHwgY29kZSA9PSBDRUlMX0RJVl9FWFBSCisrICAgICAgfHwgY29kZSA9PSBGTE9PUl9ESVZfRVhQUgorKyAgICAgIHx8IGNvZGUgPT0gUk9VTkRfRElWX0VYUFIKKysgICAgICB8fCBjb2RlID09IFRSVU5DX01PRF9FWFBSCisrICAgICAgfHwgY29kZSA9PSBDRUlMX01PRF9FWFBSCisrICAgICAgfHwgY29kZSA9PSBGTE9PUl9NT0RfRVhQUgorKyAgICAgIHx8IGNvZGUgPT0gUk9VTkRfTU9EX0VYUFIKKysgICAgICB8fCBjb2RlID09IEVYQUNUX0RJVl9FWFBSKQorKyAgICB7CisrICAgICAgLyogRGl2aXNpb24gYnkgcG93ZXIgb2YgdHdvIGlzIHVzdWFsbHkgY2hlYXAsIHNvIHdlIGFsbG93IGl0LgorKwkgRm9yYmlkIGFueXRoaW5nIGVsc2UuICAqLworKyAgICAgIGlmICghaW50ZWdlcl9wb3cycCAoVFJFRV9PUEVSQU5EIChleHByLCAxKSkpCisrCXJldHVybiB0cnVlOworKyAgICB9CisrCisrICBzd2l0Y2ggKFRSRUVfQ09ERV9DTEFTUyAoY29kZSkpCisrICAgIHsKKysgICAgY2FzZSB0Y2NfYmluYXJ5OgorKyAgICBjYXNlIHRjY19jb21wYXJpc29uOgorKyAgICAgIGlmIChleHByZXNzaW9uX2V4cGVuc2l2ZV9wIChUUkVFX09QRVJBTkQgKGV4cHIsIDEpKSkKKysJcmV0dXJuIHRydWU7CisrCisrICAgICAgLyogRmFsbHRocnUuICAqLworKyAgICBjYXNlIHRjY191bmFyeToKKysgICAgICByZXR1cm4gZXhwcmVzc2lvbl9leHBlbnNpdmVfcCAoVFJFRV9PUEVSQU5EIChleHByLCAwKSk7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIHRydWU7CisrICAgIH0KKyt9CisrCisgLyogUmVwbGFjZSBzc2EgbmFtZXMgZm9yIHRoYXQgc2NldiBjYW4gcHJvdmUgdGhleSBhcmUgY29uc3RhbnQgYnkgdGhlCisgICAgYXBwcm9wcmlhdGUgY29uc3RhbnRzLiAgQWxzbyBwZXJmb3JtIGZpbmFsIHZhbHVlIHJlcGxhY2VtZW50IGluIGxvb3BzLAorICAgIGluIGNhc2UgdGhlIHJlcGxhY2VtZW50IGV4cHJlc3Npb25zIGFyZSBjaGVhcC4KK0BAIC0yODAyLDEyICsyODQ2LDYgQEAKKyAJY29udGludWU7CisgCisgICAgICAgbml0ZXIgPSBudW1iZXJfb2ZfbGF0Y2hfZXhlY3V0aW9ucyAobG9vcCk7CistICAgICAgLyogV2UgdXNlZCB0byBjaGVjayBoZXJlIHdoZXRoZXIgdGhlIGNvbXB1dGF0aW9uIG9mIE5JVEVSIGlzIGV4cGVuc2l2ZSwKKy0JIGFuZCBhdm9pZGVkIGZpbmFsIHZhbHVlIGVsaW1pbmF0aW9uIGlmIHRoYXQgaXMgdGhlIGNhc2UuICBUaGUgcHJvYmxlbQorLQkgaXMgdGhhdCBpdCBpcyBoYXJkIHRvIGV2YWx1YXRlIHdoZXRoZXIgdGhlIGV4cHJlc3Npb24gaXMgdG9vCistCSBleHBlbnNpdmUsIGFzIHdlIGRvIG5vdCBrbm93IHdoYXQgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgdGhlCistCSB0aGUgZWxpbWluYXRpb24gb2YgdGhlIGZpbmFsIHZhbHVlIG1heSByZXZlYWwuICBUaGVyZWZvcmUsIHdlIG5vdworLQkgZWxpbWluYXRlIHRoZSBmaW5hbCB2YWx1ZXMgb2YgaW5kdWN0aW9uIHZhcmlhYmxlcyB1bmNvbmRpdGlvbmFsbHkuICAqLworICAgICAgIGlmIChuaXRlciA9PSBjaHJlY19kb250X2tub3cpCisgCWNvbnRpbnVlOworIAorQEAgLTI4MzgsNyArMjg3NiwxNSBAQAorIAkgICAgICAvKiBNb3ZpbmcgdGhlIGNvbXB1dGF0aW9uIGZyb20gdGhlIGxvb3AgbWF5IHByb2xvbmcgbGlmZSByYW5nZQorIAkJIG9mIHNvbWUgc3NhIG5hbWVzLCB3aGljaCBtYXkgY2F1c2UgcHJvYmxlbXMgaWYgdGhleSBhcHBlYXIKKyAJCSBvbiBhYm5vcm1hbCBlZGdlcy4gICovCistCSAgICAgIHx8IGNvbnRhaW5zX2Fibm9ybWFsX3NzYV9uYW1lX3AgKGRlZikpCisrCSAgICAgIHx8IGNvbnRhaW5zX2Fibm9ybWFsX3NzYV9uYW1lX3AgKGRlZikKKysJICAgICAgLyogRG8gbm90IGVtaXQgZXhwZW5zaXZlIGV4cHJlc3Npb25zLiAgVGhlIHJhdGlvbmFsZSBpcyB0aGF0CisrCQkgd2hlbiBzb21lb25lIHdyaXRlcyBhIGNvZGUgbGlrZQorKworKwkJIHdoaWxlIChuID4gNDUpIG4gLT0gNDU7CisrCisrCQkgaGUgcHJvYmFibHkga25vd3MgdGhhdCBuIGlzIG5vdCBsYXJnZSwgYW5kIGRvZXMgbm90IHdhbnQgaXQKKysJCSB0byBiZSB0dXJuZWQgaW50byBuICU9IDQ1LiAgKi8KKysJICAgICAgfHwgZXhwcmVzc2lvbl9leHBlbnNpdmVfcCAoZGVmKSkKKyAJICAgIGNvbnRpbnVlOworIAorIAkgIC8qIEVsaW1pbmF0ZSB0aGUgUEhJIG5vZGUgYW5kIHJlcGxhY2UgaXQgYnkgYSBjb21wdXRhdGlvbiBvdXRzaWRlCitJbmRleDogZ2NjLTQuMy4yL2djYy90cmVlLXNjYWxhci1ldm9sdXRpb24uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjMuMi5vcmlnL2djYy90cmVlLXNjYWxhci1ldm9sdXRpb24uaAkyMDA5LTAxLTI4IDEwOjIyOjQ3LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMi9nY2MvdHJlZS1zY2FsYXItZXZvbHV0aW9uLmgJMjAwOS0wMS0yOCAxMDoyMzoxMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zNSw2ICszNSw3IEBACisgZXh0ZXJuIHZvaWQgc2Nldl9hbmFseXNpcyAodm9pZCk7CisgdW5zaWduZWQgaW50IHNjZXZfY29uc3RfcHJvcCAodm9pZCk7CisgCisrYm9vbCBleHByZXNzaW9uX2V4cGVuc2l2ZV9wICh0cmVlKTsKKyBleHRlcm4gYm9vbCBzaW1wbGVfaXYgKHN0cnVjdCBsb29wICosIHRyZWUsIHRyZWUsIGFmZmluZV9pdiAqLCBib29sKTsKKyAKKyAvKiBSZXR1cm5zIHRoZSBsb29wIG9mIHRoZSBwb2x5bm9taWFsIGNocmVjIENIUkVDLiAgKi8KK0luZGV4OiBnY2MtNC4zLjIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHIzNDAyNy0xLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC4zLjIub3JpZy9nY2MvdGVzdHN1aXRlL2djYy5kZy9wcjM0MDI3LTEuYwkyMDA5LTAxLTI4IDEwOjI0OjA5LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMi9nY2MvdGVzdHN1aXRlL2djYy5kZy9wcjM0MDI3LTEuYwkyMDA5LTAxLTI4IDEwOjI0OjQzLjAwMDAwMDAwMCArMDEwMAorQEAgLTgsNSArOCw5IEBACisgICByZXR1cm4gbnM7CisgfQorIAorLS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAibnMgJSAxMDAwMCIgIm9wdGltaXplZCIgfSB9ICovCisrLyogVGhpcyB0ZXN0IHdhcyBvcmlnaW5hbGx5IGludHJvZHVjZWQgdG8gdGVzdCB0aGF0IHdlIHRyYW5zZm9ybQorKyAgIHRvIG5zICUgMTAwMDAuICBTZWUgdGhlIGRpc2N1c3Npb24gb2YgUFIgMzIwNDQgd2h5IHdlIGRvIG5vdCBkbworKyAgIHRoYXQgYW55bW9yZS4gICovCisrLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIlIiAwICJvcHRpbWl6ZWQiIH0gfSAqLworKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiLyIgMCAib3B0aW1pemVkIiB9IH0gKi8KKyAvKiB7IGRnLWZpbmFsIHsgY2xlYW51cC10cmVlLWR1bXAgIm9wdGltaXplZCIgfSB9ICovCitJbmRleDogZ2NjLTQuMy4yL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ByMzIwNDQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGdjYy00LjMuMi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9wcjMyMDQ0LmMJMjAwOS0wMS0yOCAxMDoyNTo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsNTUgQEAKKysvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1mZHVtcC10cmVlLWVtcHR5IC1mZHVtcC10cmVlLWZpbmFsX2NsZWFudXAiIH0gKi8KKysKKytpbnQgZm9vIChpbnQgbikKKyt7CisrICB3aGlsZSAobiA+PSA0NSkKKysgICAgbiAtPSA0NTsKKysKKysgIHJldHVybiBuOworK30KKysKKytpbnQgYmFyIChpbnQgbikKKyt7CisrICB3aGlsZSAobiA+PSA2NCkKKysgICAgbiAtPSA2NDsKKysKKysgIHJldHVybiBuOworK30KKysKKytpbnQgYmxhIChpbnQgbikKKyt7CisrICBpbnQgaSA9IDA7CisrCisrICB3aGlsZSAobiA+PSA0NSkKKysgICAgeworKyAgICAgIGkrKzsKKysgICAgICBuIC09IDQ1OworKyAgICB9CisrCisrICByZXR1cm4gaTsKKyt9CisrCisraW50IGJheiAoaW50IG4pCisreworKyAgaW50IGkgPSAwOworKworKyAgd2hpbGUgKG4gPj0gNjQpCisrICAgIHsKKysgICAgICBpKys7CisrICAgICAgbiAtPSA2NDsKKysgICAgfQorKworKyAgcmV0dXJuIGk7CisrfQorKworKy8qIFRoZSBsb29wcyBjb21wdXRpbmcgZGl2aXNpb24vbW9kdWxvIGJ5IDY0IHNob3VsZCBiZSBlbGltaW5hdGVkLiAgKi8KKysvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIlJlbW92aW5nIGVtcHR5IGxvb3AiIDIgImVtcHR5IiB9IH0gKi8KKysKKysvKiBUaGVyZSBzaG91bGQgYmUgbm8gZGl2aXNpb24vbW9kdWxvIGluIHRoZSBmaW5hbCBkdW1wIChkaXZpc2lvbiBhbmQgbW9kdWxvCisrICAgYnkgNjQgYXJlIGRvbmUgdXNpbmcgYml0IG9wZXJhdGlvbnMpLiAgKi8KKysvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIi8iIDAgImZpbmFsX2NsZWFudXAiIH0gfSAqLworKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiJSIgMCAiZmluYWxfY2xlYW51cCIgfSB9ICovCisrCisrLyogeyBkZy1maW5hbCB7IGNsZWFudXAtdHJlZS1kdW1wICJlbXB0eSIgfSB9ICovCisrLyogeyBkZy1maW5hbCB7IGNsZWFudXAtdHJlZS1kdW1wICJmaW5hbF9jbGVhbnVwIiB9IH0gKi8KK0luZGV4OiBnY2MtNC4zLjIvZ2NjL3RyZWUtc3NhLWxvb3AtaXZvcHRzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC4zLjIub3JpZy9nY2MvdHJlZS1zc2EtbG9vcC1pdm9wdHMuYwkyMDA5LTAxLTI4IDEwOjI2OjA0LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMi9nY2MvdHJlZS1zc2EtbG9vcC1pdm9wdHMuYwkyMDA5LTAxLTI4IDEwOjI3OjA5LjAwMDAwMDAwMCArMDEwMAorQEAgLTM3NzgsNyArMzc3OCwxMiBAQAorICAgICByZXR1cm4gZmFsc2U7CisgCisgICBjYW5kX3ZhbHVlX2F0IChsb29wLCBjYW5kLCB1c2UtPnN0bXQsIG5pdCwgJmJuZCk7CisrCisgICAqYm91bmQgPSBhZmZfY29tYmluYXRpb25fdG9fdHJlZSAoJmJuZCk7CisrICAvKiBJdCBpcyB1bmxpa2VseSB0aGF0IGNvbXB1dGluZyB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdXNpbmcgZGl2aXNpb24KKysgICAgIHdvdWxkIGJlIG1vcmUgcHJvZml0YWJsZSB0aGFuIGtlZXBpbmcgdGhlIG9yaWdpbmFsIGluZHVjdGlvbiB2YXJpYWJsZS4gICovCisrICBpZiAoZXhwcmVzc2lvbl9leHBlbnNpdmVfcCAoKmJvdW5kKSkKKysgICAgcmV0dXJuIGZhbHNlOworICAgcmV0dXJuIHRydWU7CisgfQorIAorCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzM3MC1zaC1uby1saWJjLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8zNzAtc2gtbm8tbGliYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDAwNzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi8zNzAtc2gtbm8tbGliYy5wYXRjaApAQCAtMCwwICsxLDEyIEBACitkaWZmIC1kdXJOIGdjYy00LjMuMi5vcmlnL2xpYmdjYy9jb25maWcvc2gvdC1saW51eCBnY2MtNC4zLjIvbGliZ2NjL2NvbmZpZy9zaC90LWxpbnV4CistLS0gZ2NjLTQuMy4yLm9yaWcvbGliZ2NjL2NvbmZpZy9zaC90LWxpbnV4CTIwMDktMDMtMDcgMTE6NDI6MzguMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4yL2xpYmdjYy9jb25maWcvc2gvdC1saW51eAkyMDA5LTAzLTA3IDExOjAzOjM5LjAwMDAwMDAwMCArMDEwMAorQEAgLTE1LDcgKzE1LDcgQEAKKyAJLVdsLC0tc29uYW1lPUBzaGxpYl9iYXNlX25hbWVALnNvLjEgXAorIAktV2wsLS12ZXJzaW9uLXNjcmlwdD1Ac2hsaWJfbWFwX2ZpbGVAIFwKKyAJLW8gQG11bHRpbGliX2RpckAvQHNobGliX2Jhc2VfbmFtZUAuc28uMS50bXAgQG11bHRpbGliX2ZsYWdzQCBcCistCUBzaGxpYl9vYmpzQCAtbGMgJiYgXAorKwlAc2hsaWJfb2Jqc0AgJiYgXAorIAlybSAtZiBAbXVsdGlsaWJfZGlyQC9Ac2hsaWJfYmFzZV9uYW1lQC5zbyAmJiBcCisgCWlmIFsgLWYgQG11bHRpbGliX2RpckAvQHNobGliX2Jhc2VfbmFtZUAuc28uMSBdOyB0aGVuIFwKKyAJICBtdiAtZiBAbXVsdGlsaWJfZGlyQC9Ac2hsaWJfYmFzZV9uYW1lQC5zby4xIFwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMzgwLXByMzc0MzYucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzM4MC1wcjM3NDM2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YTAxNmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzM4MC1wcjM3NDM2LnBhdGNoCkBAIC0wLDAgKzEsODYgQEAKK2djYyBzdm4gMTQyNzc4OgorCitQUiB0YXJnZXQvMzc0MzYKKyogYXJtLmMgKGFybV9sZWdpdGltYXRlX2luZGV4KTogT25seSBhY2NlcHQgYWRkcmVzc2VzIHRoYXQgYXJlIGluCitjYW5vbmljYWwgZm9ybS4KKyogcHJlZGljYXRlcy5tZCAoYXJtX3JlZ19vcl9leHRlbmRxaXNpX21lbV9vcCk6IE5ldyBwcmVkaWNhdGUuCisqIGFybS5tZCAoZXh0ZW5kcWloaTIpOiBVc2UgYXJtX3JlZ19vcl9leHRlbmRxaXNpX21lbV9vcCBwcmVkaWNhdGUKK2ZvciBvcGVyYW5kMS4KKyhleHRlbmRxaXNpMik6IExpa2V3aXNlLgorKGFybV9leHRlbmRxaXNpLCBhcm1fZXh0ZW5kcWlzaV92Nik6IFVzZSBhcm1fZXh0ZW5kcWlzaV9tZW1fb3AKK3ByZWRpY2F0ZSBmb3Igb3BlcmFuZDEuCisKK2RpZmYgLU51cmEgZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hcm0vYXJtLmMgZ2NjLTQuMy4zL2djYy9jb25maWcvYXJtL2FybS5jCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hcm0vYXJtLmMJMjAwOC0wNi0xMSAwNzo1Mjo1NS4wMDAwMDAwMDAgLTAzMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hcm0vYXJtLmMJMjAwOS0wNS0yMSAxNjowNjo0NS4wMDAwMDAwMDAgLTAzMDAKK0BAIC0zNzY5LDYgKzM3NjksNyBAQAorICAgICAgIHJ0eCB4b3AxID0gWEVYUCAoeCwgMSk7CisgCisgICAgICAgcmV0dXJuICgoYXJtX2FkZHJlc3NfcmVnaXN0ZXJfcnR4X3AgKHhvcDAsIHN0cmljdF9wKQorKwkgICAgICAgJiYgR0VUX0NPREUoeG9wMSkgPT0gQ09OU1RfSU5UCisgCSAgICAgICAmJiBhcm1fbGVnaXRpbWF0ZV9pbmRleF9wIChtb2RlLCB4b3AxLCBvdXRlciwgc3RyaWN0X3ApKQorIAkgICAgICB8fCAoYXJtX2FkZHJlc3NfcmVnaXN0ZXJfcnR4X3AgKHhvcDEsIHN0cmljdF9wKQorIAkJICAmJiBhcm1fbGVnaXRpbWF0ZV9pbmRleF9wIChtb2RlLCB4b3AwLCBvdXRlciwgc3RyaWN0X3ApKSk7CitkaWZmIC1OdXJhIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvYXJtL2FybS5tZCBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hcm0vYXJtLm1kCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hcm0vYXJtLm1kCTIwMDctMDktMDQgMDE6NDQ6NDcuMDAwMDAwMDAwIC0wMzAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvYXJtL2FybS5tZAkyMDA5LTA1LTIxIDE2OjA2OjQ1LjAwMDAwMDAwMCAtMDMwMAorQEAgLTQxOTksNyArNDE5OSw3IEBACisgCisgKGRlZmluZV9leHBhbmQgImV4dGVuZHFpaGkyIgorICAgWyhzZXQgKG1hdGNoX2R1cCAyKQorLQkoYXNoaWZ0OlNJIChtYXRjaF9vcGVyYW5kOlFJIDEgImdlbmVyYWxfb3BlcmFuZCIgIiIpCisrCShhc2hpZnQ6U0kgKG1hdGNoX29wZXJhbmQ6UUkgMSAiYXJtX3JlZ19vcl9leHRlbmRxaXNpX21lbV9vcCIgIiIpCisgCQkgICAoY29uc3RfaW50IDI0KSkpCisgICAgKHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJzX3JlZ2lzdGVyX29wZXJhbmQiICIiKQorIAkoYXNoaWZ0cnQ6U0kgKG1hdGNoX2R1cCAyKQorQEAgLTQyMjQsNyArNDIyNCw3IEBACisgCisgKGRlZmluZV9pbnNuICIqYXJtX2V4dGVuZHFpaGlfaW5zbiIKKyAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAgInNfcmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKy0JKHNpZ25fZXh0ZW5kOkhJIChtYXRjaF9vcGVyYW5kOlFJIDEgIm1lbW9yeV9vcGVyYW5kIiAiVXEiKSkpXQorKwkoc2lnbl9leHRlbmQ6SEkgKG1hdGNoX29wZXJhbmQ6UUkgMSAiYXJtX2V4dGVuZHFpc2lfbWVtX29wIiAiVXEiKSkpXQorICAgIlRBUkdFVF9BUk0gJiYgYXJtX2FyY2g0IgorICAgImxkciUoc2IlKVxcdCUwLCAlMSIKKyAgIFsoc2V0X2F0dHIgInR5cGUiICJsb2FkX2J5dGUiKQorQEAgLTQyMzUsNyArNDIzNSw3IEBACisgCisgKGRlZmluZV9leHBhbmQgImV4dGVuZHFpc2kyIgorICAgWyhzZXQgKG1hdGNoX2R1cCAyKQorLQkoYXNoaWZ0OlNJIChtYXRjaF9vcGVyYW5kOlFJIDEgImdlbmVyYWxfb3BlcmFuZCIgIiIpCisrCShhc2hpZnQ6U0kgKG1hdGNoX29wZXJhbmQ6UUkgMSAiYXJtX3JlZ19vcl9leHRlbmRxaXNpX21lbV9vcCIgIiIpCisgCQkgICAoY29uc3RfaW50IDI0KSkpCisgICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJzX3JlZ2lzdGVyX29wZXJhbmQiICIiKQorIAkoYXNoaWZ0cnQ6U0kgKG1hdGNoX2R1cCAyKQorQEAgLTQyNjcsNyArNDI2Nyw3IEBACisgCisgKGRlZmluZV9pbnNuICIqYXJtX2V4dGVuZHFpc2kiCisgICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJzX3JlZ2lzdGVyX29wZXJhbmQiICI9ciIpCistCShzaWduX2V4dGVuZDpTSSAobWF0Y2hfb3BlcmFuZDpRSSAxICJtZW1vcnlfb3BlcmFuZCIgIlVxIikpKV0KKysJKHNpZ25fZXh0ZW5kOlNJIChtYXRjaF9vcGVyYW5kOlFJIDEgImFybV9leHRlbmRxaXNpX21lbV9vcCIgIlVxIikpKV0KKyAgICJUQVJHRVRfQVJNICYmIGFybV9hcmNoNCAmJiAhYXJtX2FyY2g2IgorICAgImxkciUoc2IlKVxcdCUwLCAlMSIKKyAgIFsoc2V0X2F0dHIgInR5cGUiICJsb2FkX2J5dGUiKQorQEAgLTQyNzgsNyArNDI3OCw4IEBACisgCisgKGRlZmluZV9pbnNuICIqYXJtX2V4dGVuZHFpc2lfdjYiCisgICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJzX3JlZ2lzdGVyX29wZXJhbmQiICI9cixyIikKKy0JKHNpZ25fZXh0ZW5kOlNJIChtYXRjaF9vcGVyYW5kOlFJIDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAicixVcSIpKSldCisrCShzaWduX2V4dGVuZDpTSQorKwkgKG1hdGNoX29wZXJhbmQ6UUkgMSAiYXJtX3JlZ19vcl9leHRlbmRxaXNpX21lbV9vcCIgInIsVXEiKSkpXQorICAgIlRBUkdFVF9BUk0gJiYgYXJtX2FyY2g2IgorICAgIkAKKyAgICBzeHRiJT9cXHQlMCwgJTEKK2RpZmYgLU51cmEgZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hcm0vcHJlZGljYXRlcy5tZCBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hcm0vcHJlZGljYXRlcy5tZAorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvYXJtL3ByZWRpY2F0ZXMubWQJMjAwNy0wOC0wMiAwNzo0OTozMS4wMDAwMDAwMDAgLTAzMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hcm0vcHJlZGljYXRlcy5tZAkyMDA5LTA1LTIxIDE2OjA2OjQ1LjAwMDAwMDAwMCAtMDMwMAorQEAgLTIzNCw2ICsyMzQsMTAgQEAKKyAgICAgICAgKG1hdGNoX3Rlc3QgImFybV9sZWdpdGltYXRlX2FkZHJlc3NfcCAobW9kZSwgWEVYUCAob3AsIDApLCBTSUdOX0VYVEVORCwKKyAJCQkJCSAgICAgIDApIikpKQorIAorKyhkZWZpbmVfc3BlY2lhbF9wcmVkaWNhdGUgImFybV9yZWdfb3JfZXh0ZW5kcWlzaV9tZW1fb3AiCisrICAoaW9yIChtYXRjaF9vcGVyYW5kIDAgImFybV9leHRlbmRxaXNpX21lbV9vcCIpCisrICAgICAgIChtYXRjaF9vcGVyYW5kIDAgInNfcmVnaXN0ZXJfb3BlcmFuZCIpKSkKKysKKyAoZGVmaW5lX3ByZWRpY2F0ZSAicG93ZXJfb2ZfdHdvX29wZXJhbmQiCisgICAobWF0Y2hfY29kZSAiY29uc3RfaW50IikKKyB7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzM5MC11bmJyZWFrLWFybXY0dC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjIvMzkwLXVuYnJlYWstYXJtdjR0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMTRlMGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzM5MC11bmJyZWFrLWFybXY0dC5wYXRjaApAQCAtMCwwICsxLDExIEBACistLS0gZ2NjLTQuMy4yLm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCTIwMDktMDktMDggMjM6NDY6NDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4yL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAkyMDA5LTA5LTA4IDIzOjQ2OjUxLjAwMDAwMDAwMCArMDIwMAorQEAgLTQ0LDcgKzQ0LDcgQEAKKyAgICBUaGUgQVJNMTBURE1JIGNvcmUgaXMgdGhlIGRlZmF1bHQgZm9yIGFybXY1dCwgc28gc2V0CisgICAgU1VCVEFSR0VUX0NQVV9ERUZBVUxUIHRvIGFjaGlldmUgdGhpcy4gICovCisgI3VuZGVmICBTVUJUQVJHRVRfQ1BVX0RFRkFVTFQKKy0jZGVmaW5lIFNVQlRBUkdFVF9DUFVfREVGQVVMVCBUQVJHRVRfQ1BVX2FybTEwdGRtaQorKyNkZWZpbmUgU1VCVEFSR0VUX0NQVV9ERUZBVUxUIFRBUkdFVF9DUFVfYXJtOXRkbWkKKyAKKyAvKiBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUIGlzIHNldCBpbgorICAgIGNvbmZpZy5nY2MgZm9yIGJpZyBlbmRpYW4gY29uZmlndXJhdGlvbnMuICAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi80MDAtbGliZ2NjX2VoLmEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4yLzQwMC1saWJnY2NfZWguYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTQxOThhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMi80MDAtbGliZ2NjX2VoLmEucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorSGlnaGx5IGluc3BpcmVkIGJ5OgorICBodHRwOi8vbGFuZGxleS5uZXQvaGcvYWJvcmlnaW5hbC9maWxlLzdlMDc0N2E2NjVhYi9zb3VyY2VzL3BhdGNoZXMvZ2NjLWNvcmUtbGliZ2NjZWgucGF0Y2gKKworZGlmZiAtZHVyTiBnY2MtNC4zLjIub3JpZy8vbGliZ2NjL01ha2VmaWxlLmluIGdjYy00LjMuMi9saWJnY2MvTWFrZWZpbGUuaW4KKy0tLSBnY2MtNC4zLjIub3JpZy8vbGliZ2NjL01ha2VmaWxlLmluCTIwMDgtMDYtMTcgMTE6MzI6MzQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4yL2xpYmdjYy9NYWtlZmlsZS5pbgkyMDExLTA5LTAyIDEyOjI3OjM5LjI5NjUzODk1NSArMDIwMAorQEAgLTcwNSw4ICs3MDUsOSBAQAorIGxpYmdjY19zJChTSExJQl9FWFQpOiBsaWJ1bndpbmQkKFNITElCX0VYVCkKKyBlbmRpZgorIAorK2FsbDogbGliZ2NjX2VoLmEKKyBpZmVxICgkKGVuYWJsZV9zaGFyZWQpLHllcykKKy1hbGw6IGxpYmdjY19laC5hIGxpYmdjY19zJChTSExJQl9FWFQpCisrYWxsOiBsaWJnY2NfcyQoU0hMSUJfRVhUKQorIGlmbmVxICgkKExJQlVOV0lORCksKQorIGFsbDogbGlidW53aW5kJChTSExJQl9FWFQpCisgZW5kaWYKK0BAIC04NzUsMTAgKzg3Niw2IEBACisgaW5zdGFsbC1zaGFyZWQ6CisgCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQoaW5zdF9saWJkaXIpCisgCistCSQoSU5TVEFMTF9EQVRBKSBsaWJnY2NfZWguYSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvCistCWNobW9kIDY0NCAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKy0JJChSQU5MSUIpICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY2NfZWguYQorLQorIAkkKHN1YnN0IEBtdWx0aWxpYl9kaXJALCQoTVVMVElESVIpLCQoc3Vic3QgXAorIAkJQHNobGliX2Jhc2VfbmFtZUAsbGliZ2NjX3MsJChzdWJzdCBcCisgCQlAc2hsaWJfc2xpYmRpcl9xdWFsQCwkKE1VTFRJT1NTVUJESVIpLCQoU0hMSUJfSU5TVEFMTCkpKSkKK0BAIC04OTMsNiArODkwLDEwIEBACisgCWNobW9kIDY0NCAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2Nvdi5hCisgCSQoUkFOTElCKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2Nvdi5hCisgCisrCSQoSU5TVEFMTF9EQVRBKSBsaWJnY2NfZWguYSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvCisrCWNobW9kIDY0NCAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKysJJChSQU5MSUIpICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY2NfZWguYQorKworIAlwYXJ0cz0iJChJTlNUQUxMX1BBUlRTKSI7CQkJCVwKKyAJZm9yIGZpbGUgaW4gJCRwYXJ0czsgZG8JCQkJCVwKKyAJICBybSAtZiAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvJCRmaWxlOwkJXApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8xMDAtYWxwaGEtbWllZWUtZGVmYXVsdC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjMvMTAwLWFscGhhLW1pZWVlLWRlZmF1bHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ1MDE5ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjMvMTAwLWFscGhhLW1pZWVlLWRlZmF1bHQucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMTAwLWFscGhhLW1pZWVlLWRlZmF1bHQucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby8wMF9hbGxfZ2NjLTQuMS1hbHBoYS1taWVlZS1kZWZhdWx0LnBhdGNoCitTZXQgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb24gYWxwaGEgdG8gdXNlIC1taWVlZSBzaW5jZSB0aGUgbGFyZ2UgbWFqb3JpdHkgb2YKK3RpbWUgd2Ugd2FudCB0aGlzIChiYWQvd2VpcmQgdGhpbmdzIGNhbiBoYXBwZW4gd2l0aCBwYWNrYWdlcyBidWlsdCB3aXRob3V0CistbWllZWUpLgorCitUbyBzYXRpc2Z5IHRob3NlIHBlb3BsZSB3aG8gbWF5IG5vdCB3YW50IC1taWVlZSBmb3JjZWQgb24gdGhlbSBhbGwgdGhlIHRpbWUsCit3ZSBhbHNvIHByb3ZpZGUgLW1uby1pZWVlLgorCitQYXRjaCBieSBNaWtlIEZyeXNpbmdlciA8dmFwaWVyQGdlbnRvby5vcmc+CisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FscGhhL2FscGhhLmggZ2NjLTQuMy4zL2djYy9jb25maWcvYWxwaGEvYWxwaGEuaAorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvYWxwaGEvYWxwaGEuaAkyMDA3LTEyLTA2IDE0OjI1OjM3LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL2FscGhhL2FscGhhLmgJMjAwOS0wMS0yNyAyMjoxOTowMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC05NSw2ICs5NSw4IEBACisgICB3aGlsZSAoMCkKKyAjZW5kaWYKKyAKKysjZGVmaW5lIENQUF9TUEVDICIleyFuby1pZWVlOi1taWVlZX0iCisrCisgI2RlZmluZSBXT1JEX1NXSVRDSF9UQUtFU19BUkcoU1RSKQkJXAorICAoIXN0cmNtcCAoU1RSLCAicnBhdGgiKSB8fCBERUZBVUxUX1dPUkRfU1dJVENIX1RBS0VTX0FSRyhTVFIpKQorIAorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FscGhhL2FscGhhLm9wdCBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5vcHQKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FscGhhL2FscGhhLm9wdAkyMDA3LTA4LTAyIDEyOjQ5OjMxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL2FscGhhL2FscGhhLm9wdAkyMDA5LTAxLTI3IDIyOjE5OjAyLjAwMDAwMDAwMCArMDEwMAorQEAgLTM5LDcgKzM5LDcgQEAKKyBSZXF1ZXN0IElFRUUtY29uZm9ybWFudCBtYXRoIGxpYnJhcnkgcm91dGluZXMgKE9TRi8xKQorIAorIG1pZWVlCistVGFyZ2V0IFJlcG9ydCBSZWplY3ROZWdhdGl2ZSBNYXNrKElFRUUpCisrVGFyZ2V0IFJlcG9ydCBNYXNrKElFRUUpCisgRW1pdCBJRUVFLWNvbmZvcm1hbnQgY29kZSwgd2l0aG91dCBpbmV4YWN0IGV4Y2VwdGlvbnMKKyAKKyBtaWVlZS13aXRoLWluZXhhY3QKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjMvMTEwLXRyYW1wb2xpbmV3YXJuLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8xMTAtdHJhbXBvbGluZXdhcm4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNhYjIxNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjMvMTEwLXRyYW1wb2xpbmV3YXJuLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzExMC10cmFtcG9saW5ld2Fybi5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzAwX2FsbF9nY2MtdHJhbXBvbGluZXdhcm4ucGF0Y2gKKwlUaGlzIHRyaXZpYWwgcGF0Y2ggY2F1c2VzIGdjYyB0byBlbWl0IGEgd2FybmluZyB3aGVuZXZlcgorCWl0IGdlbmVyYXRlcyBhIHRyYW1wb2xpbmUuICBUaGVzZSBhcmUgb3RoZXJ3aXNlIGhhcmQgdG8KKwlsb2NhdGUuICBJdCBpcyByaWdnZWQgdG8gZGVmYXVsdCBPTiAtIHRvIGhhdmUgaXQgZGVmYXVsdAorCXRvIE9GRiByZW1vdmUgdGhlIHRleHQgJ0luaXQoMSknIGZyb20gdGhlIGNvbW1vbi5vcHQKKwlwYXRjaCwgbGVhdmluZyBqdXN0ICdDb21tb24gVmFyKHdhcm5fdHJhbXBvbGluZXMpJy4KKwlLZXZpbiBGLiBRdWlubiA8a2V2cXVpbm5AZ2VudG9vLm9yZz4gMTcgSmFuIDIwMDYKKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9idWlsdGlucy5jIGdjYy00LjMuMy9nY2MvYnVpbHRpbnMuYworLS0tIGdjYy00LjMuMy5vcmlnL2djYy9idWlsdGlucy5jCTIwMDgtMDgtMTkgMTg6Mzc6MTMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2djYy9idWlsdGlucy5jCTIwMDktMDEtMjcgMjI6MTk6MTIuMDAwMDAwMDAwICswMTAwCitAQCAtNTY2Miw2ICs1NjYyLDkgQEAKKyAgIHRyYW1wb2xpbmVzX2NyZWF0ZWQgPSAxOworICAgSU5JVElBTElaRV9UUkFNUE9MSU5FIChyX3RyYW1wLCByX2Z1bmMsIHJfY2hhaW4pOworIAorKyAgaWYgKHdhcm5fdHJhbXBvbGluZXMpCisrICAgIHdhcm5pbmcgKE9QVF9XdHJhbXBvbGluZXMsICJnZW5lcmF0aW5nIHRyYW1wb2xpbmUgaW4gb2JqZWN0IChyZXF1aXJlcyBleGVjdXRhYmxlIHN0YWNrKSIpOworKworICAgcmV0dXJuIGNvbnN0MF9ydHg7CisgfQorIAorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29tbW9uLm9wdCBnY2MtNC4zLjMvZ2NjL2NvbW1vbi5vcHQKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29tbW9uLm9wdAkyMDA4LTAxLTIyIDE1OjExOjQ0LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9nY2MvY29tbW9uLm9wdAkyMDA5LTAxLTI3IDIyOjE5OjEyLjAwMDAwMDAwMCArMDEwMAorQEAgLTE4Miw2ICsxODIsMTAgQEAKKyBDb21tb24gVmFyKHdhcm5fc3lzdGVtX2hlYWRlcnMpIFdhcm5pbmcKKyBEbyBub3Qgc3VwcHJlc3Mgd2FybmluZ3MgZnJvbSBzeXN0ZW0gaGVhZGVycworIAorK1d0cmFtcG9saW5lcworK0NvbW1vbiBWYXIod2Fybl90cmFtcG9saW5lcykgSW5pdCgxKQorK1dhcm4gd2hlbmV2ZXIgYSB0cmFtcG9saW5lIGlzIGdlbmVyYXRlZAorKworIFd1bmluaXRpYWxpemVkCisgQ29tbW9uIFZhcih3YXJuX3VuaW5pdGlhbGl6ZWQpIFdhcm5pbmcKKyBXYXJuIGFib3V0IHVuaW5pdGlhbGl6ZWQgYXV0b21hdGljIHZhcmlhYmxlcwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8xMjAtamF2YS1ub211bHRpLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8xMjAtamF2YS1ub211bHRpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YjgxM2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzEyMC1qYXZhLW5vbXVsdGkucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMTIwLWphdmEtbm9tdWx0aS5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzAzX2FsbF9nY2M0My1qYXZhLW5vbXVsdGkucGF0Y2gKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJqYXZhL2NvbmZpZ3VyZSBnY2MtNC4zLjMvbGliamF2YS9jb25maWd1cmUKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJqYXZhL2NvbmZpZ3VyZQkyMDA5LTAxLTI0IDExOjMyOjI5LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9saWJqYXZhL2NvbmZpZ3VyZQkyMDA5LTAxLTI3IDIyOjE5OjE0LjAwMDAwMDAwMCArMDEwMAorQEAgLTEwMTgsNiArMTAxOCw4IEBACisgICAtLWVuYWJsZS1nY29uZi1wZWVyICAgICBjb21waWxlIEdDb25mIG5hdGl2ZSBwZWVycyBmb3IgdXRpbC5wcmVmZXJlbmNlcworICAgLS1lbmFibGUtamF2YS1tYWludGFpbmVyLW1vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93IHJlYnVpbGRpbmcgb2YgLmNsYXNzIGFuZCAuaCBmaWxlcworKyAgLS1lbmFibGUtbGliamF2YS1tdWx0aWxpYgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgbGliamF2YSBhcyBtdWx0aWxpYgorICAgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgIHNwZWVkcyB1cCBvbmUtdGltZSBidWlsZAorICAgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyAgIGRvIG5vdCByZWplY3Qgc2xvdyBkZXBlbmRlbmN5IGV4dHJhY3RvcnMKKyAgIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSAgZW5hYmxlIG1ha2UgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBub3QgdXNlZnVsCitAQCAtMTg1MCw2ICsxODUyLDE2IEBACisgZmkKKyAKKyAKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGliamF2YS1tdWx0aWxpYiB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfbGliamF2YV9tdWx0aWxpYitzZXR9IiA9IHNldDsgdGhlbgorKyAgZW5hYmxldmFsPSRlbmFibGVfbGliamF2YV9tdWx0aWxpYjsKKytmaQorKworK2lmIHRlc3QgIiRlbmFibGVfbGliamF2YV9tdWx0aWxpYiIgPSBubzsgdGhlbgorKyAgbXVsdGlsaWI9bm8KKysgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1kaXNhYmxlLW11bHRpbGliIgorK2ZpCisrCisgIyBJdCBtYXkgbm90IGJlIHNhZmUgdG8gcnVuIGxpbmtpbmcgdGVzdHMgaW4gQUNfUFJPR19DQy9BQ19QUk9HX0NYWC4KKyAKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliamF2YS9jb25maWd1cmUuYWMgZ2NjLTQuMy4zL2xpYmphdmEvY29uZmlndXJlLmFjCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliamF2YS9jb25maWd1cmUuYWMJMjAwOC0wNy0wMiAyMzoyMzo0My4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGliamF2YS9jb25maWd1cmUuYWMJMjAwOS0wMS0yNyAyMjoxOToxNC4wMDAwMDAwMDAgKzAxMDAKK0BAIC04Miw2ICs4MiwxMyBAQAorIAlbYWxsb3cgcmVidWlsZGluZyBvZiAuY2xhc3MgYW5kIC5oIGZpbGVzXSkpCisgQU1fQ09ORElUSU9OQUwoSkFWQV9NQUlOVEFJTkVSX01PREUsIHRlc3QgIiRlbmFibGVfamF2YV9tYWludGFpbmVyX21vZGUiID0geWVzKQorIAorK0FDX0FSR19FTkFCTEUobGliamF2YS1tdWx0aWxpYiwKKysJQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxpYmphdmEtbXVsdGlsaWJdLCBbYnVpbGQgbGliamF2YSBhcyBtdWx0aWxpYl0pKQorK2lmIHRlc3QgIiRlbmFibGVfbGliamF2YV9tdWx0aWxpYiIgPSBubzsgdGhlbgorKyAgbXVsdGlsaWI9bm8KKysgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1kaXNhYmxlLW11bHRpbGliIgorK2ZpCisrCisgIyBJdCBtYXkgbm90IGJlIHNhZmUgdG8gcnVuIGxpbmtpbmcgdGVzdHMgaW4gQUNfUFJPR19DQy9BQ19QUk9HX0NYWC4KKyBHQ0NfTk9fRVhFQ1VUQUJMRVMKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjMvMTMwLWNyb3NzLWNvbXBpbGUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzEzMC1jcm9zcy1jb21waWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNjU5OTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzEzMC1jcm9zcy1jb21waWxlLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzEzMC1jcm9zcy1jb21waWxlLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vMDhfYWxsX2djYy00LjEtY3Jvc3MtY29tcGlsZS5wYXRjaAorU29tZSBub3RlcyBvbiB0aGUgJ2Jvb3RzdHJhcCB3aXRoIG9yIHdpdGhvdXQgbGliYyBoZWFkZXJzJyBkZWJhdGU6CitodHRwOi8vbGludXhmcm9tc2NyYXRjaC5vcmcvcGlwZXJtYWlsL2xmcy1kZXYvMjAwNS1KdWx5LzA1MjQwOS5odG1sCitodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLzIwMDUtMDcvbXNnMDExOTUuaHRtbAorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZ3VyZSBnY2MtNC4zLjMvZ2NjL2NvbmZpZ3VyZQorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWd1cmUJMjAwOC0wOC0wMSAxMTo1MTowMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZ3VyZQkyMDA5LTAxLTI3IDIyOjE5OjE2LjAwMDAwMDAwMCArMDEwMAorQEAgLTEzNDQyLDcgKzEzNDQyLDcgQEAKKyAJICAgIHwgcG93ZXJwYyotKi0qLHBvd2VycGM2NCotKi0qKQorIAkJQ1JPU1M9IiRDUk9TUyAtRE5BVElWRV9DUk9TUyIgOzsKKyAJZXNhYworLWVsaWYgdGVzdCAieCRUQVJHRVRfU1lTVEVNX1JPT1QiICE9IHg7IHRoZW4KKytlbGlmIHRlc3QgIngkVEFSR0VUX1NZU1RFTV9ST09UIiAhPSB4IC1vICRidWlsZCAhPSAkaG9zdDsgdGhlbgorICAgICAgICAgU1lTVEVNX0hFQURFUl9ESVI9JGJ1aWxkX3N5c3RlbV9oZWFkZXJfZGlyCisgZmkKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYyBnY2MtNC4zLjMvZ2NjL2NvbmZpZ3VyZS5hYworLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWd1cmUuYWMJMjAwOC0wOC0wMSAxMTo1MTowMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZ3VyZS5hYwkyMDA5LTAxLTI3IDIyOjE5OjE2LjAwMDAwMDAwMCArMDEwMAorQEAgLTE3NDksNyArMTc0OSw3IEBACisgCSAgICB8IHBvd2VycGMqLSotKixwb3dlcnBjNjQqLSotKikKKyAJCUNST1NTPSIkQ1JPU1MgLUROQVRJVkVfQ1JPU1MiIDs7CisgCWVzYWMKKy1lbGlmIHRlc3QgIngkVEFSR0VUX1NZU1RFTV9ST09UIiAhPSB4OyB0aGVuCisrZWxpZiB0ZXN0ICJ4JFRBUkdFVF9TWVNURU1fUk9PVCIgIT0geCAtbyAkYnVpbGQgIT0gJGhvc3Q7IHRoZW4KKyAgICAgICAgIFNZU1RFTV9IRUFERVJfRElSPSRidWlsZF9zeXN0ZW1faGVhZGVyX2RpciAKKyBmaQorIAorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvdW53aW5kLWR3Mi5jIGdjYy00LjMuMy9nY2MvdW53aW5kLWR3Mi5jCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL3Vud2luZC1kdzIuYwkyMDA4LTA5LTI1IDAwOjQ0OjI4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9nY2MvdW53aW5kLWR3Mi5jCTIwMDktMDEtMjcgMjI6MTk6MTYuMDAwMDAwMDAwICswMTAwCitAQCAtMzM0LDkgKzMzNCwxMSBAQAorIH0KKyAjZW5kaWYKKyAKKysjaWZuZGVmIGluaGliaXRfbGliYworICNpZmRlZiBNRF9VTldJTkRfU1VQUE9SVAorICNpbmNsdWRlIE1EX1VOV0lORF9TVVBQT1JUCisgI2VuZGlmCisrI2VuZGlmCisgDAorIC8qIEV4dHJhY3QgYW55IGludGVyZXN0aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIENJRSBmb3IgdGhlIHRyYW5zbGF0aW9uCisgICAgdW5pdCBGIGJlbG9uZ3MgdG8uICBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBieXRlIGFmdGVyIHRoZSBhdWdtZW50YXRpb24sCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzE0MC1uZXRic2Qtc3ltYm9saWMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzE0MC1uZXRic2Qtc3ltYm9saWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg5OWRkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjMvMTQwLW5ldGJzZC1zeW1ib2xpYy5wYXRjaApAQCAtMCwwICsxLDE5IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8xNDAtbmV0YnNkLXN5bWJvbGljLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vMTFfYWxsX2djYy1uZXRic2Qtc3ltYm9saWMucGF0Y2gKK2h0dHA6Ly9idWdzLmdlbnRvby5vcmcvMTIyNjk4CisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL25ldGJzZC1lbGYuaCBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9uZXRic2QtZWxmLmgKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL25ldGJzZC1lbGYuaAkyMDA3LTA5LTAzIDE4OjE0OjA0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL25ldGJzZC1lbGYuaAkyMDA5LTAxLTI3IDIyOjE5OjE4LjAwMDAwMDAwMCArMDEwMAorQEAgLTgyLDYgKzgyLDcgQEAKKyAjZGVmaW5lIE5FVEJTRF9MSU5LX1NQRUNfRUxGIFwKKyAgICIle2Fzc2VydCp9ICV7Uip9ICV7cnBhdGgqfSBcCisgICAgJXtzaGFyZWQ6LXNoYXJlZH0gXAorKyAgICV7c3ltYm9saWM6LUJzeW1ib2xpY30gXAorICAgICV7IXNoYXJlZDogXAorICAgICAgLWRjIC1kcCBcCisgICAgICAleyFub3N0ZGxpYjogXApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8xNTAtc3BhcmM2NC1ic2QucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzE1MC1zcGFyYzY0LWJzZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzNhNzYzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8xNTAtc3BhcmM2NC1ic2QucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMTUwLXNwYXJjNjQtYnNkLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vMTRfYWxsX2djYy1zcGFyYzY0LWJzZC5wYXRjaAorLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oIGdjYy00LjMuMy9nY2MvY29uZmlnL3NwYXJjL2ZyZWVic2QuaAorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oCTIwMDctMDgtMDIgMTI6NDk6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oCTIwMDktMDEtMjcgMjI6MTk6MjAuMDAwMDAwMDAwICswMTAwCitAQCAtMjUsOSArMjUsMjIgQEAKKyAvKiBGcmVlQlNEIG5lZWRzIHRoZSBwbGF0Zm9ybSBuYW1lIChzcGFyYzY0KSBkZWZpbmVkLgorICAgIEVtYWNzIG5lZWRzIHRvIGtub3cgaWYgdGhlIGFyY2ggaXMgNjQgb3IgMzItYml0cy4gICovCisgCistI3VuZGVmICBDUFBfQ1BVNjRfREVGQVVMVF9TUEVDCistI2RlZmluZSBDUFBfQ1BVNjRfREVGQVVMVF9TUEVDIFwKKy0gICItRF9fc3BhcmM2NF9fIC1EX19zcGFyY192OV9fIC1EX19zcGFyY3Y5IC1EX19hcmNoNjRfXyIKKysjdW5kZWYgIEZCU0RfVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMKKysjZGVmaW5lIEZCU0RfVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMoKSAgICAgICAgICAgICAgICAgIFwKKysgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBpZiAoVEFSR0VUX0FSQ0g2NCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjNjRfXyIpOyAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjX3Y5X18iKTsgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjdjkiKTsgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19zcGFyYyIpOyAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBidWlsdGluX2RlZmluZSAoIl9fc3BhcmNfXyIpOyAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHdoaWxlICgwKQorKworIAorICNkZWZpbmUgTElOS19TUEVDICIlKGxpbmtfYXJjaCkJCQkJCQlcCisgICAleyFtbm8tcmVsYXg6JXshcjotcmVsYXh9fQkJCQkJCVwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjMvMTYwLWZsYXR0ZW4tc3dpdGNoLXN0bXQtMDAucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzE2MC1mbGF0dGVuLXN3aXRjaC1zdG10LTAwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYWNmYmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzE2MC1mbGF0dGVuLXN3aXRjaC1zdG10LTAwLnBhdGNoCkBAIC0wLDAgKzEsODEgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzE2MC1mbGF0dGVuLXN3aXRjaC1zdG10LTAwLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vMThfYWxsXzkwNC1mbGF0dGVuLXN3aXRjaC1zdG10LTAwLnBhdGNoCitodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAwNy0wNC9tc2cwMDkyNy5odG1sCisKK0hpLAorCitUaGUgYXR0YWNoZWQgcGF0Y2ggbWFrZXMgc3VyZSB0aGF0IHdlIGNyZWF0ZSBzbWFsbGVyIG9iamVjdCBjb2RlIGZvcgorc2ltcGxlIHN3aXRjaCBzdGF0ZW1lbnRzLiBXZSBqdXN0IG1ha2Ugc3VyZSB0byBmbGF0dGVuIHRoZSBzd2l0Y2gKK3N0YXRlbWVudCBpbnRvIGFuIGlmLWVsc2UgY2hhaW4sIGJhc2ljYWxseS4KKworVGhpcyBmaXhlcyBhIHNpemUtcmVncmVzc2lvbiBhcyBjb21wYXJlZCB0byBnY2MtMy40LCBhcyBjYW4gYmUgc2VlbgorYmVsb3cuCisKKzIwMDctMDQtMTUgIEJlcm5oYXJkIEZpc2NoZXIgIDwuLj4KKworCSogc3RtdC5jIChleHBhbmRfY2FzZSk6IERvIG5vdCBjcmVhdGUgYSBjb21wbGV4IGJpbmFyeSB0cmVlIHdoZW4KKwlvcHRpbWl6aW5nIGZvciBzaXplIGJ1dCByYXRoZXIgdXNlIHRoZSBzaW1wbGUgb3JkZXJlZCBsaXN0LgorCShlbWl0X2Nhc2Vfbm9kZXMpOiBkbyBub3QgZW1pdCBqdW1wcyB0byB0aGUgZGVmYXVsdF9sYWJlbCB3aGVuCisJb3B0aW1pemluZyBmb3Igc2l6ZS4KKworTm90IHJlZ3Rlc3RlZCBzbyBmYXIuCitDb21tZW50cz8KKworQXR0YWNoZWQgaXMgdGhlIHRlc3Qgc3dpdGNoLmMgbWVudGlvbmVkIGJlbG93LgorCiskIGZvciBpIGluIDIuOTUgMy4zIDMuNCA0LjAgNC4xIDQuMi5vcmlnLUhFQUQgNC4zLm9yaWctSEVBRCA0LjMtSEVBRDtkbworZ2NjLSRpICAtRENIQUlOIC1PcyAtbyBzd2l0Y2gtQ0hBSU4tJGkubyAtYyBzd2l0Y2guYyA7ZG9uZQorJCBmb3IgaSBpbiAyLjk1IDMuMyAzLjQgNC4wIDQuMSA0LjIub3JpZy1IRUFEIDQuMy5vcmlnLUhFQUQgNC4zLUhFQUQ7ZG8KK2djYy0kaSAgLVVDSEFJTiAtT3MgLW8gc3dpdGNoLSRpLm8gLWMgc3dpdGNoLmMgO2RvbmUKKworJCBzaXplIHN3aXRjaC0qLm8KKyAgIHRleHQJICAgZGF0YQkgICAgYnNzCSAgICBkZWMJICAgIGhleAlmaWxlbmFtZQorICAgIDE2OQkgICAgICAwCSAgICAgIDAJICAgIDE2OQkgICAgIGE5CXN3aXRjaC0yLjk1Lm8KKyAgICAxMTUJICAgICAgMAkgICAgICAwCSAgICAxMTUJICAgICA3Mwlzd2l0Y2gtMy4zLm8KKyAgICAxMDMJICAgICAgMAkgICAgICAwCSAgICAxMDMJICAgICA2Nwlzd2l0Y2gtMy40Lm8KKyAgICAxMjQJICAgICAgMAkgICAgICAwCSAgICAxMjQJICAgICA3Ywlzd2l0Y2gtNC4wLm8KKyAgICAxMjQJICAgICAgMAkgICAgICAwCSAgICAxMjQJICAgICA3Ywlzd2l0Y2gtNC4xLm8KKyAgICAxMjQJICAgICAgMAkgICAgICAwCSAgICAxMjQJICAgICA3Ywlzd2l0Y2gtNC4yLm9yaWctSEVBRC5vCisgICAgIDk1CSAgICAgIDAJICAgICAgMAkgICAgIDk1CSAgICAgNWYJc3dpdGNoLTQuMy1IRUFELm8KKyAgICAxMjQJICAgICAgMAkgICAgICAwCSAgICAxMjQJICAgICA3Ywlzd2l0Y2gtNC4zLm9yaWctSEVBRC5vCisgICAgMTY2CSAgICAgIDAJICAgICAgMAkgICAgMTY2CSAgICAgYTYJc3dpdGNoLUNIQUlOLTIuOTUubworICAgIDExMQkgICAgICAwCSAgICAgIDAJICAgIDExMQkgICAgIDZmCXN3aXRjaC1DSEFJTi0zLjMubworICAgICA5NQkgICAgICAwCSAgICAgIDAJICAgICA5NQkgICAgIDVmCXN3aXRjaC1DSEFJTi0zLjQubworICAgICA5NQkgICAgICAwCSAgICAgIDAJICAgICA5NQkgICAgIDVmCXN3aXRjaC1DSEFJTi00LjAubworICAgICA5NQkgICAgICAwCSAgICAgIDAJICAgICA5NQkgICAgIDVmCXN3aXRjaC1DSEFJTi00LjEubworICAgICA5NQkgICAgICAwCSAgICAgIDAJICAgICA5NQkgICAgIDVmCXN3aXRjaC1DSEFJTi00LjIub3JpZy1IRUFELm8KKyAgICAgOTUJICAgICAgMAkgICAgICAwCSAgICAgOTUJICAgICA1Zglzd2l0Y2gtQ0hBSU4tNC4zLUhFQUQubworICAgICA5NQkgICAgICAwCSAgICAgIDAJICAgICA5NQkgICAgIDVmCXN3aXRjaC1DSEFJTi00LjMub3JpZy1IRUFELm8KKworCitDb250ZW50LVR5cGU6IHRleHQveC1kaWZmOyBjaGFyc2V0PXVzLWFzY2lpCitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iZ2NjLTQuMy5nY2MtZmxhdHRlbi1zd2l0Y2gtc3RtdC4wMC5kaWZmIgorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL3N0bXQuYyBnY2MtNC4zLjMvZ2NjL3N0bXQuYworLS0tIGdjYy00LjMuMy5vcmlnL2djYy9zdG10LmMJMjAwOC0wNS0wOSAyMDoxMjoxMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL3N0bXQuYwkyMDA5LTAxLTI3IDIyOjE5OjI4LjAwMDAwMDAwMCArMDEwMAorQEAgLTI1MDksNyArMjUwOSwxMSBAQAorIAkgIHVzZV9jb3N0X3RhYmxlCisgCSAgICA9IChUUkVFX0NPREUgKG9yaWdfdHlwZSkgIT0gRU5VTUVSQUxfVFlQRQorIAkgICAgICAgJiYgZXN0aW1hdGVfY2FzZV9jb3N0cyAoY2FzZV9saXN0KSk7CistCSAgYmFsYW5jZV9jYXNlX25vZGVzICgmY2FzZV9saXN0LCBOVUxMKTsKKysJICAvKiBXaGVuIG9wdGltaXppbmcgZm9yIHNpemUsIHdlIHdhbnQgYSBzdHJhaWdodCBsaXN0IHRvIGF2b2lkCisrCSAgICAganVtcHMgYXMgbXVjaCBhcyBwb3NzaWJsZS4gVGhpcyBiYXNpY2FsbHkgY3JlYXRlcyBhbiBpZi1lbHNlCisrCSAgICAgY2hhaW4uICAqLworKwkgIGlmICghb3B0aW1pemVfc2l6ZSkKKysJICAgIGJhbGFuY2VfY2FzZV9ub2RlcyAoJmNhc2VfbGlzdCwgTlVMTCk7CisgCSAgZW1pdF9jYXNlX25vZGVzIChpbmRleCwgY2FzZV9saXN0LCBkZWZhdWx0X2xhYmVsLCBpbmRleF90eXBlKTsKKyAJICBlbWl0X2p1bXAgKGRlZmF1bHRfbGFiZWwpOworIAl9CitAQCAtMzA2Nyw2ICszMDcxLDcgQEAKKyAJICAgIHsKKyAJICAgICAgaWYgKCFub2RlX2hhc19sb3dfYm91bmQgKG5vZGUsIGluZGV4X3R5cGUpKQorIAkJeworKwkJICBpZiAoIW9wdGltaXplX3NpemUpIC8qIGRvbid0IGpsIHRvIHRoZSAuZGVmYXVsdF9sYWJlbC4gKi8KKyAJCSAgZW1pdF9jbXBfYW5kX2p1bXBfaW5zbnMgKGluZGV4LAorIAkJCQkJICAgY29udmVydF9tb2RlcworIAkJCQkJICAgKG1vZGUsIGltb2RlLApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8xNzAtbGliaWJlcnR5LXBpYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjMvMTcwLWxpYmliZXJ0eS1waWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA3ODlkMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjMvMTcwLWxpYmliZXJ0eS1waWMucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMTcwLWxpYmliZXJ0eS1waWMucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby81MV9hbGxfZ2NjLTMuNC1saWJpYmVydHktcGljLnBhdGNoCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliaWJlcnR5L01ha2VmaWxlLmluIGdjYy00LjMuMy9saWJpYmVydHkvTWFrZWZpbGUuaW4KKy0tLSBnY2MtNC4zLjMub3JpZy9saWJpYmVydHkvTWFrZWZpbGUuaW4JMjAwNy0wNy0yNSAwODoyNjo0NS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGliaWJlcnR5L01ha2VmaWxlLmluCTIwMDktMDEtMjcgMjI6MTk6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMjI1LDYgKzIyNSw3IEBACisgCSAgJChBUikgJChBUl9GTEFHUykgJChUQVJHRVRMSUIpIFwKKyAJICAgICQoUkVRVUlSRURfT0ZJTEVTKSAkKEVYVFJBX09GSUxFUykgJChMSUJPQkpTKTsgXAorIAkgICQoUkFOTElCKSAkKFRBUkdFVExJQik7IFwKKysJICBjcCAkKFRBUkdFVExJQikgLi4vIDsgXAorIAkgIGNkIC4uOyBcCisgCWVsc2UgdHJ1ZTsgZmkKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjMvMTgwLXN1cGVyaC1kZWZhdWx0LW11bHRpbGliLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8xODAtc3VwZXJoLWRlZmF1bHQtbXVsdGlsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQxOTM3NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjMvMTgwLXN1cGVyaC1kZWZhdWx0LW11bHRpbGliLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzE4MC1zdXBlcmgtZGVmYXVsdC1tdWx0aWxpYi5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzUzX2FsbF9nY2M0LXN1cGVyaC1kZWZhdWx0LW11bHRpbGliLnBhdGNoCitUaGUgZ2NjLTMueCB0b29sY2hhaW5zIHdvdWxkIGNvbnRhaW4gYWxsIHRoZSB0YXJnZXRzIGJ5IGRlZmF1bHQuICBXaXRoIGdjYy00LAoreW91IGhhdmUgdG8gYWN0dWFsbHkgbGlzdCBvdXQgdGhlIG11bHRpbGlicyB5b3Ugd2FudCBvciB5b3Ugd2lsbCBlbmQgdXAgd2l0aAoranVzdCBvbmUgd2hlbiB1c2luZyB0YXJnZXRzIGxpa2UgJ3NoNC1saW51eC1nbnUnLgorCitUaGUgcmVzdWx0aW5nIHRvb2xjaGFpbiBjYW4ndCBldmVuIGJ1aWxkIGEga2VybmVsIGFzIHRoZSBrZXJuZWwgbmVlZHMgdG8gYnVpbGQKK3dpdGggdGhlIG5vZnB1IGZsYWcgdG8gYmUgc3VyZSB0aGF0IG5vIGZwdSBvcHMgYXJlIGdlbmVyYXRlZC4KKworSGVyZSB3ZSByZXN0b3JlIHRoZSBnY2MtMy54IGJlaGF2aW9yOyB0aGUgYWRkaXRpb25hbCBvdmVyaGVhZCBvZiBidWlsZGluZyBhbGwKK29mIHRoZXNlIG11bHRpbGlicyBieSBkZWZhdWx0IGlzIG5lZ2xpZ2libGUuCisKK2h0dHA6Ly9idWdzLmdlbnRvby5vcmcvMTQwMjA1CisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnLmdjYyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy5nY2MKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnLmdjYwkyMDA4LTExLTIwIDE4OjA5OjUzLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnLmdjYwkyMDA5LTAxLTI3IDIyOjE5OjMyLjAwMDAwMDAwMCArMDEwMAorQEAgLTIyNzUsNyArMjI3NSw3IEBACisgCWlmIHRlc3QgeCR7c2hfbXVsdGlsaWJzfSA9IHggOyB0aGVuCisgCQljYXNlICR7dGFyZ2V0fSBpbgorIAkJc2g2NC1zdXBlcmgtbGludXgqIHwgXAorLQkJc2hbMTIzNF0qKQlzaF9tdWx0aWxpYnM9JHtzaF9jcHVfdGFyZ2V0fSA7OworKwkJc2hbMTIzNF0qKQlzaF9tdWx0aWxpYnM9YGNkICR7c3JjZGlyfS9jb25maWcvc2ggOyBlY2hvIHQtbWxpYi1zaFsxLTRdKiB8IHNlZCAnczp0LW1saWItc2g6LG06ZztzOiA6OmcnYCA7OworIAkJc2g2NCogfCBzaDUqKQlzaF9tdWx0aWxpYnM9bTUtMzJtZWRpYSxtNS0zMm1lZGlhLW5vZnB1LG01LWNvbXBhY3QsbTUtY29tcGFjdC1ub2ZwdSxtNS02NG1lZGlhLG01LTY0bWVkaWEtbm9mcHUgOzsKKyAJCXNoLXN1cGVyaC0qKQlzaF9tdWx0aWxpYnM9bTQsbTQtc2luZ2xlLG00LXNpbmdsZS1vbmx5LG00LW5vZnB1IDs7CisgCQlzaCotKi1saW51eCopCXNoX211bHRpbGlicz1tMSxtM2UsbTQgOzsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjMvMTkwLWxpYnN0ZGMrKy1waWMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzE5MC1saWJzdGRjKystcGljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2Mjg0N2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzE5MC1saWJzdGRjKystcGljLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzE5MC1saWJzdGRjKystcGljLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vNTRfYWxsXzMwMC1saWJzdGRjKystcGljLnBhdGNoCitpbnN0YWxsIGxpYnN0ZGMrK19waWMuYSBpZiB3ZSBoYXZlIHBpYyBvYmpzCisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmFtIGdjYy00LjMuMy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmFtCistLS0gZ2NjLTQuMy4zLm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQkyMDA4LTAyLTI5IDE5OjI2OjUwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmFtCTIwMDktMDEtMjcgMjI6MTk6MzQuMDAwMDAwMDAwICswMTAwCitAQCAtMjg5LDYgKzI4OSwxMyBAQAorIAkgICQoT1BUX0xERkxBR1MpICQoU0VDVElPTl9MREZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKExUTERGTEFHUykgLW8gJEAKKyAKKyAKKytpbnN0YWxsLWV4ZWMtbG9jYWw6CisrCXBpY19vYmpzPWBzZWQgLW4gInM6Jzo6ZztzOl5waWNfb2JqZWN0PTo6cCIgKi5sbyB8IGdyZXAgLXYgJ15ub25lJCQnYDsgXAorKwlpZiBbIHgiJCRwaWNfb2JqcyIgIT0geCBdOyB0aGVuIFwKKysJCSQoQVIpIGNydSBsaWJzdGRjKytfcGljLmEgJCRwaWNfb2JqcyAkKHRvcF9idWlsZGRpcikvbGlic3VwYysrLyoubyB8fCBleGl0IDE7IFwKKysJCSQoSU5TVEFMTF9EQVRBKSBsaWJzdGRjKytfcGljLmEgJChERVNURElSKSQodG9vbGV4ZWNsaWJkaXIpIHx8IGV4aXQgMTsgXAorKwlmaQorKworICMgQWRkZWQgYml0cyB0byBidWlsZCBkZWJ1ZyBsaWJyYXJ5LgorIGlmIEdMSUJDWFhfQlVJTERfREVCVUcKKyBhbGwtbG9jYWw6IGJ1aWxkX2RlYnVnCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuaW4gZ2NjLTQuMy4zL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuaW4KKy0tLSBnY2MtNC4zLjMub3JpZy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCTIwMDgtMDItMjkgMTk6MjY6NTAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuaW4JMjAwOS0wMS0yNyAyMjoxOTozNC4wMDAwMDAwMDAgKzAxMDAKK0BAIC02OTMsNyArNjkzLDcgQEAKKyAKKyBpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtZGF0YS1sb2NhbAorIAorLWluc3RhbGwtZXhlYy1hbTogaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTCisraW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLXRvb2xleGVjbGliTFRMSUJSQVJJRVMgaW5zdGFsbC1leGVjLWxvY2FsCisgCisgaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKyAKK0BAIC03MzIsNyArNzMyLDcgQEAKKyAJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAorIAltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisgCXRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtaW5mby1hbSBcCistCXVuaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTCisrCXVuaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTIGluc3RhbGwtZXhlYy1sb2NhbAorIAorIAorICMgU3ltYm9sIHZlcnNpb25pbmcgZm9yIHNoYXJlZCBsaWJyYXJpZXMuCitAQCAtODU4LDYgKzg1OCwxNCBAQAorIGluc3RhbGxfZGVidWc6CisgCShjZCAke2RlYnVnZGlyfSAmJiAkKE1BS0UpIFwKKyAJdG9vbGV4ZWNsaWJkaXI9JChnbGliY3h4X3Rvb2xleGVjbGliZGlyKS9kZWJ1ZyBpbnN0YWxsKQorKworK2luc3RhbGwtZXhlYy1sb2NhbDoKKysJcGljX29ianM9YHNlZCAtbiAiczonOjpnO3M6XnBpY19vYmplY3Q9OjpwIiAqLmxvIHwgZ3JlcCAtdiAnXm5vbmUkJCdgOyBcCisrCWlmIFsgeCIkJHBpY19vYmpzIiAhPSB4IF07IHRoZW4gXAorKwkJJChBUikgY3J1IGxpYnN0ZGMrK19waWMuYSAkJHBpY19vYmpzICQodG9wX2J1aWxkZGlyKS9saWJzdXBjKysvKi5vIHx8IGV4aXQgMTsgXAorKwkJJChJTlNUQUxMX0RBVEEpIGxpYnN0ZGMrK19waWMuYSAkKERFU1RESVIpJCh0b29sZXhlY2xpYmRpcikgfHwgZXhpdCAxOyBcCisrCWZpCisrCisgIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyAjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKyAuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzIwMC1wcjI0MTcwLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8yMDAtcHIyNDE3MC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmJiYzllCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8yMDAtcHIyNDE3MC5wYXRjaApAQCAtMCwwICsxLDY2IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8yMDAtcHIyNDE3MC5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzYxX2FsbF9nY2M0My1wcjI0MTcwLnBhdGNoCitodHRwOi8vZ2NjLmdudS5vcmcvUFIyNDE3MAorCisyMDA4LTAyLTIwICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+CisKKwlQUiBsaWJnY2ovMjQxNzA6CisJKiBqYXZhL2lvL25hdEZpbGVQb3NpeC5jYyAoRmlsZTo6cGVyZm9ybUxpc3QpOiBEb24ndCB1c2UKKwlyZWFkZGlyX3IuCisJKiBjb25maWd1cmUsIGluY2x1ZGUvY29uZmlnLmguaW46IFJlYnVpbHQuCisJKiBjb25maWd1cmUuYWM6IERvbid0IGNoZWNrIGZvciByZWFkZGlyX3IuCisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJqYXZhL2NvbmZpZ3VyZS5hYyBnY2MtNC4zLjMvbGliamF2YS9jb25maWd1cmUuYWMKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJqYXZhL2NvbmZpZ3VyZS5hYwkyMDA5LTAxLTI3IDIyOjE5OjE2LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9saWJqYXZhL2NvbmZpZ3VyZS5hYwkyMDA5LTAxLTI3IDIyOjE5OjM2LjAwMDAwMDAwMCArMDEwMAorQEAgLTEwMzAsNyArMTAzMCw3IEBACisgICAgUExBVEZPUk1ORVQ9Tm9OZXQKKyBlbHNlCisgICAgQUNfQ0hFQ0tfRlVOQ1MoW3N0cmVycm9yX3Igc2VsZWN0IGZzdGF0IG9wZW4gZnN5bmMgc2xlZXAgb3BlbmRpciBcCistICAgICAgICAgICAgICAgICAgIGxvY2FsdGltZV9yIHJlYWRkaXJfciBnZXRwd3VpZF9yIGdldGN3ZCBcCisrICAgICAgICAgICAgICAgICAgIGxvY2FsdGltZV9yIGdldHB3dWlkX3IgZ2V0Y3dkIFwKKyAJCSAgIGFjY2VzcyBzdGF0IGxzdGF0IG1rZGlyIHJlbmFtZSBybWRpciB1bmxpbmsgdXRpbWUgY2htb2QgcmVhZGxpbmsgXAorIAkJICAgbmxfbGFuZ2luZm8gc2V0bG9jYWxlIFwKKyAJCSAgIGluZXRfcHRvbiB1bmFtZSBpbmV0X250b2EgXAorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJqYXZhL2luY2x1ZGUvY29uZmlnLmguaW4gZ2NjLTQuMy4zL2xpYmphdmEvaW5jbHVkZS9jb25maWcuaC5pbgorLS0tIGdjYy00LjMuMy5vcmlnL2xpYmphdmEvaW5jbHVkZS9jb25maWcuaC5pbgkyMDA3LTA3LTMxIDE4OjE3OjIxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9saWJqYXZhL2luY2x1ZGUvY29uZmlnLmguaW4JMjAwOS0wMS0yNyAyMjoxOTozNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMTQsOSArMjE0LDYgQEAKKyAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHB3ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyAjdW5kZWYgSEFWRV9QV0RfSAorIAorLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVhZGRpcl9yJyBmdW5jdGlvbi4gKi8KKy0jdW5kZWYgSEFWRV9SRUFERElSX1IKKy0KKyAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJlYWRsaW5rJyBmdW5jdGlvbi4gKi8KKyAjdW5kZWYgSEFWRV9SRUFETElOSworIAorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJqYXZhL2phdmEvaW8vbmF0RmlsZVBvc2l4LmNjIGdjYy00LjMuMy9saWJqYXZhL2phdmEvaW8vbmF0RmlsZVBvc2l4LmNjCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliamF2YS9qYXZhL2lvL25hdEZpbGVQb3NpeC5jYwkyMDA3LTA4LTA0IDIzOjUwOjAxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9saWJqYXZhL2phdmEvaW8vbmF0RmlsZVBvc2l4LmNjCTIwMDktMDEtMjcgMjI6MTk6MzYuMDAwMDAwMDAwICswMTAwCitAQCAtMSw2ICsxLDYgQEAKKyAvLyBuYXRGaWxlLmNjIC0gTmF0aXZlIHBhcnQgb2YgRmlsZSBjbGFzcyBmb3IgUE9TSVguCisgCistLyogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA2CisrLyogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA2LCAyMDA4CisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGliZ2NqLgorQEAgLTI5MiwxMyArMjkyLDcgQEAKKyAKKyAgIGphdmE6OnV0aWw6OkFycmF5TGlzdCAqbGlzdCA9IG5ldyBqYXZhOjp1dGlsOjpBcnJheUxpc3QgKCk7CisgICBzdHJ1Y3QgZGlyZW50ICpkOworLSNpZiBkZWZpbmVkKEhBVkVfUkVBRERJUl9SKSAmJiBkZWZpbmVkKF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUykKKy0gIGludCBuYW1lX21heCA9IHBhdGhjb25mIChidWYsIF9QQ19OQU1FX01BWCk7CistICBjaGFyIGRidWZbc2l6ZW9mIChzdHJ1Y3QgZGlyZW50KSArIG5hbWVfbWF4ICsgMV07CistICB3aGlsZSAocmVhZGRpcl9yIChkaXIsIChzdHJ1Y3QgZGlyZW50ICopIGRidWYsICZkKSA9PSAwICYmIGQgIT0gTlVMTCkKKy0jZWxzZSAvKiBIQVZFX1JFQURESVJfUiAqLworICAgd2hpbGUgKChkID0gcmVhZGRpciAoZGlyKSkgIT0gTlVMTCkKKy0jZW5kaWYgLyogSEFWRV9SRUFERElSX1IgKi8KKyAgICAgeworICAgICAgIC8vIE9taXQgIi4iIGFuZCAiLi4iLgorICAgICAgIGlmIChkLT5kX25hbWVbMF0gPT0gJy4nCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzIxMC1ub3RlR05Vc3RhY2stMDAucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzIxMC1ub3RlR05Vc3RhY2stMDAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRjNjQyNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjMvMjEwLW5vdGVHTlVzdGFjay0wMC5wYXRjaApAQCAtMCwwICsxLDEwMSBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMjEwLW5vdGVHTlVzdGFjay0wMC5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzYxX2FsbF9nY2M0LWlhNjQtbm90ZUdOVXN0YWNrLnBhdGNoCisyMDA0LTA5LTIwICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogY29uZmlnL3JzNjAwMC9wcGMtYXNtLmg6IEFkZCAubm90ZS5HTlUtc3RhY2sgc2VjdGlvbiBhbHNvCisJb24gcHBjNjQtbGludXguCisKKwkqIGNvbmZpZy9pYTY0L2xpYjFmdW5jcy5hc206IEFkZCAubm90ZS5HTlUtc3RhY2sgc2VjdGlvbiBvbgorCWlhNjQtbGludXguCisJKiBjb25maWcvaWE2NC9jcnRiZWdpbi5hc206IExpa2V3aXNlLgorCSogY29uZmlnL2lhNjQvY3J0ZW5kLmFzbTogTGlrZXdpc2UuCisJKiBjb25maWcvaWE2NC9jcnRpLmFzbTogTGlrZXdpc2UuCisJKiBjb25maWcvaWE2NC9jcnRuLmFzbTogTGlrZXdpc2UuCisKKzIwMDQtMDUtMTQgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBjb25maWcvaWE2NC9saW51eC5oIChUQVJHRVRfQVNNX0ZJTEVfRU5EKTogRGVmaW5lLgorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGJlZ2luLmFzbSBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9pYTY0L2NydGJlZ2luLmFzbQorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRiZWdpbi5hc20JMjAwNS0wOS0yNyAwMjo1MjoyNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9pYTY0L2NydGJlZ2luLmFzbQkyMDA5LTAxLTI3IDIyOjE5OjM5LjAwMDAwMDAwMCArMDEwMAorQEAgLTI1NSwzICsyNTUsNyBAQAorIC53ZWFrIF9fY3hhX2ZpbmFsaXplCisgI2VuZGlmCisgLndlYWsgX0p2X1JlZ2lzdGVyQ2xhc3NlcworKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0ZW5kLmFzbSBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9pYTY0L2NydGVuZC5hc20KKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0ZW5kLmFzbQkyMDA1LTA5LTI3IDAyOjUyOjI0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL2lhNjQvY3J0ZW5kLmFzbQkyMDA5LTAxLTI3IDIyOjE5OjM5LjAwMDAwMDAwMCArMDEwMAorQEAgLTEyMiwzICsxMjIsNyBAQAorIAorIAlici5yZXQuc3B0ay5tYW55IHJwCisgCS5lbmRwIF9fZG9fZ2xvYmFsX2N0b3JzX2F1eAorKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0aS5hc20gZ2NjLTQuMy4zL2djYy9jb25maWcvaWE2NC9jcnRpLmFzbQorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRpLmFzbQkyMDA1LTA2LTI1IDAzOjIyOjQxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL2lhNjQvY3J0aS5hc20JMjAwOS0wMS0yNyAyMjoxOTozOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC02NCwzICs2NCw3IEBACisgCS5ib2R5CisgCisgIyBlbmQgb2YgY3J0aS5hc20KKysKKysjaWZkZWYgX19saW51eF9fCisrLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrOyAucHJldmlvdXMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydG4uYXNtIGdjYy00LjMuMy9nY2MvY29uZmlnL2lhNjQvY3J0bi5hc20KKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0bi5hc20JMjAwNS0wNi0yNSAwMzoyMjo0MS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9pYTY0L2NydG4uYXNtCTIwMDktMDEtMjcgMjI6MTk6MzkuMDAwMDAwMDAwICswMTAwCitAQCAtNTQsMyArNTQsNyBAQAorIAlici5yZXQuc3B0ay5tYW55IGIwCisgCisgIyBlbmQgb2YgY3J0bi5hc20KKysKKysjaWZkZWYgX19saW51eF9fCisrLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrOyAucHJldmlvdXMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2xpYjFmdW5jcy5hc20gZ2NjLTQuMy4zL2djYy9jb25maWcvaWE2NC9saWIxZnVuY3MuYXNtCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2xpYjFmdW5jcy5hc20JMjAwNS0wOS0yNyAwMjo1MjoyNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9pYTY0L2xpYjFmdW5jcy5hc20JMjAwOS0wMS0yNyAyMjoxOTozOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC03OTIsMyArNzkyLDcgQEAKKyAJfQorIAkuZW5kcCBfX2Zsb2F0dGl0ZgorICNlbmRpZgorKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2lhNjQvbGludXguaCBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9pYTY0L2xpbnV4LmgKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2lhNjQvbGludXguaAkyMDA2LTEyLTEyIDE2OjE1OjE5LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL2lhNjQvbGludXguaAkyMDA5LTAxLTI3IDIyOjE5OjM5LjAwMDAwMDAwMCArMDEwMAorQEAgLTUsNiArNSw4IEBACisgCisgI2RlZmluZSBUQVJHRVRfVkVSU0lPTiBmcHJpbnRmIChzdGRlcnIsICIgKElBLTY0KSBMaW51eCIpOworIAorKyNkZWZpbmUgVEFSR0VUX0FTTV9GSUxFX0VORCBmaWxlX2VuZF9pbmRpY2F0ZV9leGVjX3N0YWNrCisrCisgLyogVGhpcyBpcyBmb3IgLXByb2ZpbGUgdG8gdXNlIC1sY19wIGluc3RlYWQgb2YgLWxjLiAgKi8KKyAjdW5kZWYgQ0MxX1NQRUMKKyAjZGVmaW5lIENDMV9TUEVDICIle3Byb2ZpbGU6LXB9ICV7Ryp9IgorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9wcGMtYXNtLmggZ2NjLTQuMy4zL2djYy9jb25maWcvcnM2MDAwL3BwYy1hc20uaAorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvcnM2MDAwL3BwYy1hc20uaAkyMDAzLTA2LTA0IDE4OjQ0OjUxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL3JzNjAwMC9wcGMtYXNtLmgJMjAwOS0wMS0yNyAyMjoxOTozOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNTgsNyArMTU4LDcgQEAKKyAJLnNpemUgRlVOQ19OQU1FKG5hbWUpLEdMVUUoLkwsbmFtZSktRlVOQ19OQU1FKG5hbWUpCisgI2VuZGlmCisgCistI2lmIGRlZmluZWQgX19saW51eF9fICYmICFkZWZpbmVkIF9fcG93ZXJwYzY0X18KKysjaWYgZGVmaW5lZCBfX2xpbnV4X18KKyAJLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrCisgCS5wcmV2aW91cworICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8yMjAtbm90ZUdOVXN0YWNrLTAxLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8yMjAtbm90ZUdOVXN0YWNrLTAxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNmU5OTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzIyMC1ub3RlR05Vc3RhY2stMDEucGF0Y2gKQEAgLTAsMCArMSwyMDMgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzIyMC1ub3RlR05Vc3RhY2stMDEucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby82Ml9hbGxfZ2NjNC1ub3RlR05Vc3RhY2sucGF0Y2gKKzIwMDUtMDItMDggIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBzcmMvYWxwaGEvb3NmLlM6IEFkZCAubm90ZS5HTlUtc3RhY2sgb24gTGludXguCisJKiBzcmMvczM5MC9zeXN2LlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvbGludXg2NC5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvdW5peDY0LlM6IExpa2V3aXNlLgorCSogc3JjL3g4Ni9zeXN2LlM6IExpa2V3aXNlLgorCSogc3JjL3NwYXJjL3Y4LlM6IExpa2V3aXNlLgorCSogc3JjL3NwYXJjL3Y5LlM6IExpa2V3aXNlLgorCSogc3JjL202OGsvc3lzdi5TOiBMaWtld2lzZS4KKwkqIHNyYy9pYTY0L3VuaXguUzogTGlrZXdpc2UuCisJKiBzcmMvYXJtL3N5c3YuUzogTGlrZXdpc2UuCisKKwkqIGlhNjRfc2F2ZV9yZWdzX2luX3N0YWNrLnM6IE1vdmVkIHRvLi4uCisJKiBpYTY0X3NhdmVfcmVnc19pbl9zdGFjay5TOiAuLi4gdGhpcy4gIEFkZCAubm90ZS5HTlUtc3RhY2sKKwlvbiBMaW51eC4KKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2JvZWhtLWdjL2lhNjRfc2F2ZV9yZWdzX2luX3N0YWNrLlMgZ2NjLTQuMy4zL2JvZWhtLWdjL2lhNjRfc2F2ZV9yZWdzX2luX3N0YWNrLlMKKy0tLSBnY2MtNC4zLjMub3JpZy9ib2VobS1nYy9pYTY0X3NhdmVfcmVnc19pbl9zdGFjay5TCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2JvZWhtLWdjL2lhNjRfc2F2ZV9yZWdzX2luX3N0YWNrLlMJMjAwOS0wMS0yNyAyMjoyNToyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMTUgQEAKKysgICAgICAgIC50ZXh0CisrICAgICAgICAuYWxpZ24gMTYKKysgICAgICAgIC5nbG9iYWwgR0Nfc2F2ZV9yZWdzX2luX3N0YWNrCisrICAgICAgICAucHJvYyBHQ19zYXZlX3JlZ3NfaW5fc3RhY2sKKytHQ19zYXZlX3JlZ3NfaW5fc3RhY2s6CisrICAgICAgICAuYm9keWZvby5tcGcKKysgICAgICAgIGZsdXNocnMKKysgICAgICAgIDs7CisrICAgICAgICBtb3Ygcjg9YXIuYnNwCisrICAgICAgICBici5yZXQuc3B0ay5mZXcgcnAKKysgICAgICAgIC5lbmRwIEdDX3NhdmVfcmVnc19pbl9zdGFjaworKworKyNpZmRlZiBfX2xpbnV4X18KKysJLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9ib2VobS1nYy9pYTY0X3NhdmVfcmVnc19pbl9zdGFjay5zIGdjYy00LjMuMy9ib2VobS1nYy9pYTY0X3NhdmVfcmVnc19pbl9zdGFjay5zCistLS0gZ2NjLTQuMy4zLm9yaWcvYm9laG0tZ2MvaWE2NF9zYXZlX3JlZ3NfaW5fc3RhY2sucwkyMDAxLTEwLTE1IDA2OjU3OjU5LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9ib2VobS1nYy9pYTY0X3NhdmVfcmVnc19pbl9zdGFjay5zCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCitAQCAtMSwxMiArMCwwIEBACistICAgICAgICAudGV4dAorLSAgICAgICAgLmFsaWduIDE2CistICAgICAgICAuZ2xvYmFsIEdDX3NhdmVfcmVnc19pbl9zdGFjaworLSAgICAgICAgLnByb2MgR0Nfc2F2ZV9yZWdzX2luX3N0YWNrCistR0Nfc2F2ZV9yZWdzX2luX3N0YWNrOgorLSAgICAgICAgLmJvZHkKKy0gICAgICAgIGZsdXNocnMKKy0gICAgICAgIDs7CistICAgICAgICBtb3Ygcjg9YXIuYnNwCistICAgICAgICBici5yZXQuc3B0ay5mZXcgcnAKKy0gICAgICAgIC5lbmRwIEdDX3NhdmVfcmVnc19pbl9zdGFjaworLQorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL2FscGhhL29zZi5TIGdjYy00LjMuMy9saWJmZmkvc3JjL2FscGhhL29zZi5TCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9hbHBoYS9vc2YuUwkyMDA3LTA0LTA2IDE4OjI0OjE2LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9saWJmZmkvc3JjL2FscGhhL29zZi5TCTIwMDktMDEtMjcgMjI6MjU6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtMzU4LDQgKzM1OCw4IEBACisgCS5ieXRlCTE2CQkjIHVsZWIxMjggb2Zmc2V0IDE2Ki04CisgCS5hbGlnbiAzCisgJExFRkRFMzoKKysKKysjaWZkZWYgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKKyAjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9hcm0vc3lzdi5TIGdjYy00LjMuMy9saWJmZmkvc3JjL2FybS9zeXN2LlMKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL2FybS9zeXN2LlMJMjAwNy0wOS0wNCAxOTo1Mjo0NS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGliZmZpL3NyYy9hcm0vc3lzdi5TCTIwMDktMDEtMjcgMjI6MjU6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtMjkzLDMgKzI5Myw2IEBACisgCVVOV0lORCAuZm5lbmQKKyAgICAgICAgIC5zaXplICAgIENOQU1FKGZmaV9jbG9zdXJlX1NZU1YpLC5mZmlfY2xvc3VyZV9TWVNWX2VuZC1DTkFNRShmZmlfY2xvc3VyZV9TWVNWKQorIAorKyNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLCVwcm9nYml0cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL2lhNjQvdW5peC5TIGdjYy00LjMuMy9saWJmZmkvc3JjL2lhNjQvdW5peC5TCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9pYTY0L3VuaXguUwkyMDA1LTAzLTMwIDIzOjQ5OjE5LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9saWJmZmkvc3JjL2lhNjQvdW5peC5TCTIwMDktMDEtMjcgMjI6MjU6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtNTUzLDMgKzU1Myw3IEBACisgCWRhdGE4CUBwY3JlbCguTGxkX2hmYV9mbG9hdCkJCS8vIEZGSV9JQTY0X1RZUEVfSEZBX0ZMT0FUCisgCWRhdGE4CUBwY3JlbCguTGxkX2hmYV9kb3VibGUpCQkvLyBGRklfSUE2NF9UWVBFX0hGQV9ET1VCTEUKKyAJZGF0YTgJQHBjcmVsKC5MbGRfaGZhX2xkb3VibGUpCS8vIEZGSV9JQTY0X1RZUEVfSEZBX0xET1VCTEUKKysKKysjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9tNjhrL3N5c3YuUyBnY2MtNC4zLjMvbGliZmZpL3NyYy9tNjhrL3N5c3YuUworLS0tIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvbTY4ay9zeXN2LlMJMjAwNy0wNS0xMCAyMzoyOTowNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGliZmZpL3NyYy9tNjhrL3N5c3YuUwkyMDA5LTAxLTI3IDIyOjI1OjI3LjAwMDAwMDAwMCArMDEwMAorQEAgLTIwNywzICsyMDcsNyBAQAorIAlydHMKKyAJQ0ZJX0VORFBST0MoKQorIAkuc2l6ZQlmZmlfY2xvc3VyZV9zdHJ1Y3RfU1lTViwuLWZmaV9jbG9zdXJlX3N0cnVjdF9TWVNWCisrCisrI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXworKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvcG93ZXJwYy9saW51eDY0LlMgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvcG93ZXJwYy9saW51eDY0LlMKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL3Bvd2VycGMvbGludXg2NC5TCTIwMDctMTEtMTcgMDA6MjQ6NTMuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvcG93ZXJwYy9saW51eDY0LlMJMjAwOS0wMS0yNyAyMjoyNToyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNzksMyArMTc5LDcgQEAKKyAJLmFsaWduIDMKKyAuTEVGREUxOgorICNlbmRpZgorKworKyNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUworLS0tIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUwkyMDA1LTA4LTExIDIzOjE4OjI0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9saWJmZmkvc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMJMjAwOS0wMS0yNyAyMjoyNToyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMDQsMyArMjA0LDcgQEAKKyAJLmFsaWduIDMKKyAuTEVGREUxOgorICNlbmRpZgorKworKyNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUyBnY2MtNC4zLjMvbGliZmZpL3NyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUwkyMDA3LTEyLTAxIDIyOjAwOjA0LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9saWJmZmkvc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUwkyMDA5LTAxLTI3IDIyOjI1OjI3LjAwMDAwMDAwMCArMDEwMAorQEAgLTI5NSwzICsyOTUsNyBAQAorIC5MRUZERTE6CisgCisgI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXworKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvcG93ZXJwYy9zeXN2LlMgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvcG93ZXJwYy9zeXN2LlMKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL3Bvd2VycGMvc3lzdi5TCTIwMDctMTItMDEgMjI6MDA6MDQuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvcG93ZXJwYy9zeXN2LlMJMjAwOS0wMS0yNyAyMjoyNToyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMjMsMyArMjIzLDcgQEAKKyAgICAgICAuYWxpZ24gMgorIC5MRUZERTE6CisgI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXworKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvczM5MC9zeXN2LlMgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvczM5MC9zeXN2LlMKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL3MzOTAvc3lzdi5TCTIwMDMtMTAtMjEgMjE6MDE6NTguMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvczM5MC9zeXN2LlMJMjAwOS0wMS0yNyAyMjoyNToyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC00MjcsMyArNDI3LDYgQEAKKyAKKyAjZW5kaWYKKyAKKysjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9zcGFyYy92OC5TIGdjYy00LjMuMy9saWJmZmkvc3JjL3NwYXJjL3Y4LlMKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL3NwYXJjL3Y4LlMJMjAwOC0xMS0yMSAyMzoxMzoxMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvbGliZmZpL3NyYy9zcGFyYy92OC5TCTIwMDktMDEtMjcgMjI6MjU6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtMzA2LDMgKzMwNiw3IEBACisgCS5ieXRlCTB4MWYJISB1bGViMTI4IDB4MWYKKyAJLmFsaWduCVdTCisgLkxMRUZERTI6CisrCisrI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXworKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvc3BhcmMvdjkuUyBnY2MtNC4zLjMvbGliZmZpL3NyYy9zcGFyYy92OS5TCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9zcGFyYy92OS5TCTIwMDQtMDEtMjUgMDc6NTg6MzMuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvc3BhcmMvdjkuUwkyMDA5LTAxLTI3IDIyOjI1OjI3LjAwMDAwMDAwMCArMDEwMAorQEAgLTMwMCwzICszMDAsNyBAQAorIAkuYWxpZ24gOAorIC5MTEVGREUyOgorICNlbmRpZgorKworKyNpZmRlZiBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL3g4Ni9zeXN2LlMgZ2NjLTQuMy4zL2xpYmZmaS9zcmMveDg2L3N5c3YuUworLS0tIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMveDg2L3N5c3YuUwkyMDA4LTAxLTMwIDE1OjM2OjU4LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9saWJmZmkvc3JjL3g4Ni9zeXN2LlMJMjAwOS0wMS0yNyAyMjoyNToyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC00MzAsMyArNDMwLDcgQEAKKyAjZW5kaWYKKyAKKyAjZW5kaWYgLyogaWZuZGVmIF9feDg2XzY0X18gKi8KKysKKysjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy94ODYvdW5peDY0LlMgZ2NjLTQuMy4zL2xpYmZmaS9zcmMveDg2L3VuaXg2NC5TCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy94ODYvdW5peDY0LlMJMjAwNS0wNS0wNSAwNjowNjozOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGliZmZpL3NyYy94ODYvdW5peDY0LlMJMjAwOS0wMS0yNyAyMjoyNToyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC00MTAsMyArNDEwLDcgQEAKKyAuTEVGREUzOgorIAorICNlbmRpZiAvKiBfX3g4Nl82NF9fICovCisrCisrI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXworKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisrI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzIzMC1wcjM0NTcxLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8yMzAtcHIzNDU3MS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjhhMWNjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8yMzAtcHIzNDU3MS5wYXRjaApAQCAtMCwwICsxLDI4IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8yMzAtcHIzNDU3MS5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzY0X2FsbF9nY2M0My1wcjM0NTcxLnBhdGNoCitodHRwOi8vZ2NjLmdudS5vcmcvUFIzNDU3MQorCisyMDA3LTEyLTI2ICBSYXNrIEluZ2VtYW5uIExhbWJlcnRzZW4gIDxyYXNrQHN5Z2VodXMuZGs+CisKKwlQUiB0YXJnZXQvMzQ1NzEKKwkqIGNvbmZpZy9hbHBoYS9hbHBoYS5jIChhbHBoYV9jYW5ub3RfZm9yY2VfY29uc3RfbWVtKTogVXNlCisJc3ltYm9saWNfb3BlcmFuZC4KKwkqIHZhcmFzbS5jIChvdXRwdXRfY29uc3RhbnRfcG9vbF8xKTogRml4IHR5cG8uCisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FscGhhL2FscGhhLmMgZ2NjLTQuMy4zL2djYy9jb25maWcvYWxwaGEvYWxwaGEuYworLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvYWxwaGEvYWxwaGEuYwkyMDA4LTA5LTA5IDAxOjE2OjU1LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL2FscGhhL2FscGhhLmMJMjAwOS0wMS0yNyAyMjoyNToyOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMTEzLDggKzExMTMsNyBAQAorIHN0YXRpYyBib29sCisgYWxwaGFfY2Fubm90X2ZvcmNlX2NvbnN0X21lbSAocnR4IHgpCisgeworLSAgZW51bSBydHhfY29kZSBjb2RlID0gR0VUX0NPREUgKHgpOworLSAgcmV0dXJuIGNvZGUgPT0gU1lNQk9MX1JFRiB8fCBjb2RlID09IExBQkVMX1JFRiB8fCBjb2RlID09IENPTlNUOworKyAgcmV0dXJuIHN5bWJvbGljX29wZXJhbmQgKHgsIEdFVF9NT0RFICh4KSk7CisgfQorIAorIC8qIFdlIGRvIG5vdCBhbGxvdyBpbmRpcmVjdCBjYWxscyB0byBiZSBvcHRpbWl6ZWQgaW50byBzaWJsaW5nIGNhbGxzLCBub3IKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjMvMjQwLXByMjUzNDMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzI0MC1wcjI1MzQzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZDYzMTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzI0MC1wcjI1MzQzLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzI0MC1wcjI1MzQzLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vNjZfYWxsX2djYzQzLXByMjUzNDMucGF0Y2gKK2h0dHA6Ly9nY2MuZ251Lm9yZy9QUjI1MzQzCisKK3NuaXBlZCBmcm9tIERlYmlhbgorCisyMDA4LTA0LTI3ICBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKworCSogY29uZmlnL2hvc3QtbGludXguYyAoVFJZX0VNUFRZX1ZNX1NQQUNFKTogRGVmaW5lIGZvciBfX21jNjgwMDBfXy4KKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvaG9zdC1saW51eC5jIGdjYy00LjMuMy9nY2MvY29uZmlnL2hvc3QtbGludXguYworLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvaG9zdC1saW51eC5jCTIwMDctMDgtMDIgMTI6NDk6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvaG9zdC1saW51eC5jCTIwMDktMDEtMjcgMjI6MjU6MzEuMDAwMDAwMDAwICswMTAwCitAQCAtODQsNiArODQsOCBAQAorICMgZGVmaW5lIFRSWV9FTVBUWV9WTV9TUEFDRQkweDgwMDAwMDAwMDAKKyAjZWxpZiBkZWZpbmVkKF9fc3BhcmNfXykKKyAjIGRlZmluZSBUUllfRU1QVFlfVk1fU1BBQ0UJMHg2MDAwMDAwMAorKyNlbGlmIGRlZmluZWQoX19tYzY4MDAwX18pCisrIyBkZWZpbmUgVFJZX0VNUFRZX1ZNX1NQQUNFCTB4NDAwMDAwMDAKKyAjZWxzZQorICMgZGVmaW5lIFRSWV9FTVBUWV9WTV9TUEFDRQkwCisgI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzI1MC1zaC1wcjI0ODM2LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8yNTAtc2gtcHIyNDgzNi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTI4YjM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8yNTAtc2gtcHIyNDgzNi5wYXRjaApAQCAtMCwwICsxLDMzIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8yNTAtc2gtcHIyNDgzNi5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzc0X2FsbF9zaC1wcjI0ODM2LnBhdGNoCitodHRwOi8vc291cmNlZm9yZ2UubmV0L21haWxhcmNoaXZlL2ZvcnVtLnBocD90aHJlYWRfaWQ9ODk1OTMwNCZmb3J1bV9pZD01MzQ4CitodHRwOi8vZ2NjLmdudS5vcmcvUFIyNDgzNgorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZ3VyZSBnY2MtNC4zLjMvZ2NjL2NvbmZpZ3VyZQorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWd1cmUJMjAwOS0wMS0yNyAyMjoxOToxOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZ3VyZQkyMDA5LTAxLTI3IDIyOjI1OjMzLjAwMDAwMDAwMCArMDEwMAorQEAgLTIwNjg5LDcgKzIwNjg5LDcgQEAKKyAJdGxzX2ZpcnN0X21pbm9yPTE0CisgCXRsc19hc19vcHQ9Ii1tNjQgLUFlc2FtZSAtLWZhdGFsLXdhcm5pbmdzIgorIAk7OworLSAgc2gtKi0qIHwgc2hbMzRdLSotKikKKysgIHNoLSotKiB8IHNoWzM0XSotKi0qKQorICAgICBjb25mdGVzdF9zPScKKyAJLnNlY3Rpb24gIi50ZGF0YSIsImF3VCIsQHByb2diaXRzCisgZm9vOgkubG9uZwkyNQorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlndXJlLmFjIGdjYy00LjMuMy9nY2MvY29uZmlndXJlLmFjCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYwkyMDA5LTAxLTI3IDIyOjE5OjE4LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlndXJlLmFjCTIwMDktMDEtMjcgMjI6MjU6MzMuMDAwMDAwMDAwICswMTAwCitAQCAtMjU1Miw3ICsyNTUyLDcgQEAKKyAJdGxzX2ZpcnN0X21pbm9yPTE0CisgCXRsc19hc19vcHQ9Ii1tNjQgLUFlc2FtZSAtLWZhdGFsLXdhcm5pbmdzIgorIAk7OworLSAgc2gtKi0qIHwgc2hbMzRdLSotKikKKysgIHNoLSotKiB8IHNoWzM0XSotKi0qKQorICAgICBjb25mdGVzdF9zPScKKyAJLnNlY3Rpb24gIi50ZGF0YSIsImF3VCIsQHByb2diaXRzCisgZm9vOgkubG9uZwkyNQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8yNjAtdWNsaWJjLWNvbmYtbm91cHN0cmVhbS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjMvMjYwLXVjbGliYy1jb25mLW5vdXBzdHJlYW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA0NjAzMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjMvMjYwLXVjbGliYy1jb25mLW5vdXBzdHJlYW0ucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMjYwLXVjbGliYy1jb25mLW5vdXBzdHJlYW0ucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL3VjbGliYy85MF9hbGxfMTAzLXVjbGliYy1jb25mLW5vdXBzdHJlYW0ucGF0Y2gKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnLmdjYyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy5nY2MKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnLmdjYwkyMDA5LTAxLTI3IDIyOjE5OjM0LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnLmdjYwkyMDA5LTAxLTI3IDIyOjI1OjM1LjAwMDAwMDAwMCArMDEwMAorQEAgLTIxNDYsNyArMjE0Niw3IEBACisgICAgICAgICA7OworIHNoLSotZWxmKiB8IHNoWzEyMzQ2bF0qLSotZWxmKiB8IHNoKi0qLWthb3MqIHwgXAorIHNoLSotc3ltYmlhbmVsZiogfCBzaFsxMjM0NmxdKi0qLXN5bWJpYW5lbGYqIHwgXAorLSAgc2gtKi1saW51eCogfCBzaFszNDZsYmVdKi0qLWxpbnV4KiB8IFwKKysgIHNoKi0qLWxpbnV4KiB8IHNoWzM0NmxiZV0qLSotbGludXgqIHwgXAorICAgc2gtKi1uZXRic2RlbGYqIHwgc2hsKi0qLW5ldGJzZGVsZiogfCBzaDUtKi1uZXRic2QqIHwgc2g1bCotKi1uZXRic2QqIHwgXAorICAgIHNoNjQtKi1uZXRic2QqIHwgc2g2NGwqLSotbmV0YnNkKikKKyAJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSBzaC90LXNoIHNoL3QtZWxmIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8yNzAtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8yNzAtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMzZmNDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzI3MC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMjcwLW1pc3NpbmctZXhlY2luZm9faC5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvdWNsaWJjLzkwX2FsbF8zMDEtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvYm9laG0tZ2MvaW5jbHVkZS9nYy5oIGdjYy00LjMuMy9ib2VobS1nYy9pbmNsdWRlL2djLmgKKy0tLSBnY2MtNC4zLjMub3JpZy9ib2VobS1nYy9pbmNsdWRlL2djLmgJMjAwNy0wNC0yMyAyMzoxMDowOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCTIwMDktMDEtMjcgMjI6MjU6MzcuMDAwMDAwMDAwICswMTAwCitAQCAtNTAzLDcgKzUwMyw3IEBACisgI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykKKyAjIGluY2x1ZGUgPGZlYXR1cmVzLmg+CisgIyBpZiAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEgfHwgX19HTElCQ19fID4gMikgXAorLSAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pCisrICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykgJiYgIWRlZmluZWQoX19VQ0xJQkNfXykKKyAjICAgaWZuZGVmIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgICBkZWZpbmUgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQorICMgICBlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8yODAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8yODAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ODg2NDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzI4MC1jOTktY29tcGxleC11Z2x5LWhhY2sucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMjgwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvdWNsaWJjLzkwX2FsbF8zMDMtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBnY2MtNC4zLjMvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorLS0tIGdjYy00LjMuMy5vcmlnL2xpYnN0ZGMrKy12My9jb25maWd1cmUJMjAwOC0wNy0wNyAyMTo0OTo1NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQkyMDA5LTAxLTI3IDIyOjI1OjM5LjAwMDAwMDAwMCArMDEwMAorQEAgLTM4OTM1LDYgKzM4OTM1LDkgQEAKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpbmNsdWRlIDxjb21wbGV4Lmg+CisrI2lmZGVmIF9fVUNMSUJDX18KKysjZXJyb3IgdWdseSBoYWNrIHRvIG1ha2Ugc3VyZSBjb25maWd1cmUgdGVzdCBmYWlscyBoZXJlIGZvciBjcm9zcyB1bnRpbCB1Q2xpYmMgc3VwcG9ydHMgdGhlIGNvbXBsZXggZnVuY3MKKysjZW5kaWYKKyBpbnQKKyBtYWluICgpCisgewpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8yOTAtaW5kZXhfbWFjcm8ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzI5MC1pbmRleF9tYWNyby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmI4OTlhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8yOTAtaW5kZXhfbWFjcm8ucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMjkwLWluZGV4X21hY3JvLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS91Y2xpYmMvOTBfYWxsXzMwNC1pbmRleF9tYWNyby5wYXRjaAorLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlIGdjYy00LjMuMy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQorLS0tIGdjYy00LjMuMy5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCTIwMDgtMDctMTUgMTI6MTQ6NTEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCTIwMDktMDEtMjcgMjI6MjU6NDEuMDAwMDAwMDAwICswMTAwCitAQCAtNTksNiArNTksOSBAQAorICNpbmNsdWRlIDxiaXRzL2d0aHIuaD4KKyAjaW5jbHVkZSA8dHIxL2Z1bmN0aW9uYWw+CisgCisrLyogY29wZSB3LyBpbmRleCBkZWZpbmVkIGFzIG1hY3JvLCBTdVN2MyBwcm9wb3NhbCAqLworKyN1bmRlZiBpbmRleAorKworICMgaWZkZWYgX19HQworICMgICBkZWZpbmUgX19HQ19DT05TVCBjb25zdAorICMgZWxzZQorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaCBnY2MtNC4zLjMvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAkyMDA3LTA1LTA0IDE3OjA2OjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAkyMDA5LTAxLTI3IDIyOjI1OjQxLjAwMDAwMDAwMCArMDEwMAorQEAgLTU0LDYgKzU0LDkgQEAKKyAjaW5jbHVkZSA8ZXh0L21lbW9yeT4gLy8gRm9yIHVuaW5pdGlhbGl6ZWRfY29weV9uCisgI2luY2x1ZGUgPGV4dC9udW1lcmljPiAvLyBGb3IgcG93ZXIKKyAKKysvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCisrI3VuZGVmIGluZGV4CisrCisgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKyAKKyAgIHVzaW5nIHN0ZDo6c2l6ZV90OwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8zMDAtbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzMwMC1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjIwZGE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8zMDAtbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMzAwLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS91Y2xpYmMvOTBfYWxsXzMwNS1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaAorLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMgZ2NjLTQuMy4zL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJtdWRmbGFwL21mLWhvb2tzMi5jCTIwMDUtMDktMjMgMjM6NTg6MzkuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMJMjAwOS0wMS0yNyAyMjoyNTo0NS4wMDAwMDAwMDAgKzAxMDAKK0BAIC00MjcsNyArNDI3LDcgQEAKKyB7CisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzLCBuLCBfX01GX0NIRUNLX1dSSVRFLCAiYnplcm8gcmVnaW9uIik7CistICBiemVybyAocywgbik7CisrICBtZW1zZXQgKHMsIDAsIG4pOworIH0KKyAKKyAKK0BAIC00MzcsNyArNDM3LDcgQEAKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHNyYywgbiwgX19NRl9DSEVDS19SRUFELCAiYmNvcHkgc3JjIik7CisgICBNRl9WQUxJREFURV9FWFRFTlQoZGVzdCwgbiwgX19NRl9DSEVDS19XUklURSwgImJjb3B5IGRlc3QiKTsKKy0gIGJjb3B5IChzcmMsIGRlc3QsIG4pOworKyAgbWVtbW92ZSAoZGVzdCwgc3JjLCBuKTsKKyB9CisgCisgCitAQCAtNDQ3LDcgKzQ0Nyw3IEBACisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzMSwgbiwgX19NRl9DSEVDS19SRUFELCAiYmNtcCAxc3QgYXJnIik7CisgICBNRl9WQUxJREFURV9FWFRFTlQoczIsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjbXAgMm5kIGFyZyIpOworLSAgcmV0dXJuIGJjbXAgKHMxLCBzMiwgbik7CisrICByZXR1cm4gbWVtY21wIChzMSwgczIsIG4pOworIH0KKyAKKyAKK0BAIC00NTYsNyArNDU2LDcgQEAKKyAgIHNpemVfdCBuID0gc3RybGVuIChzKTsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIENMQU1QQUREKG4sIDEpLCBfX01GX0NIRUNLX1JFQUQsICJpbmRleCByZWdpb24iKTsKKy0gIHJldHVybiBpbmRleCAocywgYyk7CisrICByZXR1cm4gc3RyY2hyIChzLCBjKTsKKyB9CisgCisgCitAQCAtNDY1LDcgKzQ2NSw3IEBACisgICBzaXplX3QgbiA9IHN0cmxlbiAocyk7CisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzLCBDTEFNUEFERChuLCAxKSwgX19NRl9DSEVDS19SRUFELCAicmluZGV4IHJlZ2lvbiIpOworLSAgcmV0dXJuIHJpbmRleCAocywgYyk7CisrICByZXR1cm4gc3RycmNociAocywgYyk7CisgfQorIAorIC8qIFhYWDogIHN0cGNweSwgbWVtY2NweSAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8zMTAtYXJtLXNvZnRmbG9hdC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjMvMzEwLWFybS1zb2Z0ZmxvYXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBkZTQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjMvMzEwLWFybS1zb2Z0ZmxvYXQucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMzEwLWFybS1zb2Z0ZmxvYXQucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmggZ2NjLTQuMy4zL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgJMjAwNy0xMS0wOCAxNDo0NDowOS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgJMjAwOS0wMS0yNyAyMjoyNTo0Ny4wMDAwMDAwMDAgKzAxMDAKK0BAIC02MCw3ICs2MCw3IEBACisgICAgJXtzaGFyZWQ6LWxjfSBcCisgICAgJXshc2hhcmVkOiV7cHJvZmlsZTotbGNfcH0leyFwcm9maWxlOi1sY319IgorIAorLSNkZWZpbmUgTElCR0NDX1NQRUMgIiV7bXNvZnQtZmxvYXQ6LWxmbG9hdH0gJXttZmxvYXQtYWJpPXNvZnQqOi1sZmxvYXR9IC1sZ2NjIgorKyNkZWZpbmUgTElCR0NDX1NQRUMgIi1sZ2NjIgorIAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hcm0vdC1saW51eCBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hcm0vdC1saW51eAorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvYXJtL3QtbGludXgJMjAwNi0xMS0wOSAyMzoxNDoyNy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hcm0vdC1saW51eAkyMDA5LTAxLTI3IDIyOjI1OjQ3LjAwMDAwMDAwMCArMDEwMAorQEAgLTMsNyArMywxMiBAQAorIFRBUkdFVF9MSUJHQ0MyX0NGTEFHUyA9IC1mb21pdC1mcmFtZS1wb2ludGVyIC1mUElDCisgCisgTElCMUFTTVNSQyA9IGFybS9saWIxZnVuY3MuYXNtCistTElCMUFTTUZVTkNTID0gX3VkaXZzaTMgX2RpdnNpMyBfdW1vZHNpMyBfbW9kc2kzIF9kdm1kX2xueAorK0xJQjFBU01GVU5DUyA9IF91ZGl2c2kzIF9kaXZzaTMgX3Vtb2RzaTMgX21vZHNpMyBfZHZtZF90bHMgX2JiX2luaXRfZnVuYyBcCisrCV9jYWxsX3ZpYV9yWCBfaW50ZXJ3b3JrX2NhbGxfdmlhX3JYIFwKKysJX2xzaHJkaTMgX2FzaHJkaTMgX2FzaGxkaTMgXAorKwlfbmVnZGYyIF9hZGRzdWJkZjMgX211bGRpdmRmMyBfY21wZGYyIF91bm9yZGRmMiBfZml4ZGZzaSBfZml4dW5zZGZzaSBcCisrCV90cnVuY2Rmc2YyIF9uZWdzZjIgX2FkZHN1YnNmMyBfbXVsZGl2c2YzIF9jbXBzZjIgX3Vub3Jkc2YyIFwKKysJX2ZpeHNmc2kgX2ZpeHVuc3Nmc2kgX2Zsb2F0ZGlkZiBfZmxvYXRkaXNmIF9mbG9hdHVuZGlkZiBfZmxvYXR1bmRpc2YKKyAKKyAjIE1VTFRJTElCX09QVElPTlMgPSBtaGFyZC1mbG9hdC9tc29mdC1mbG9hdAorICMgTVVMVElMSUJfRElSTkFNRVMgPSBoYXJkLWZsb2F0IHNvZnQtZmxvYXQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjMvMzIwLWFscGhhLXNpZ25hbF9oLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8zMjAtYWxwaGEtc2lnbmFsX2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY0ZGYzZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjMvMzIwLWFscGhhLXNpZ25hbF9oLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzMyMC1hbHBoYS1zaWduYWxfaC5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FscGhhL2xpbnV4LXVud2luZC5oIGdjYy00LjMuMy9nY2MvY29uZmlnL2FscGhhL2xpbnV4LXVud2luZC5oCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC11bndpbmQuaAkyMDA2LTEwLTI2IDIxOjMxOjA5LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL2FscGhhL2xpbnV4LXVud2luZC5oCTIwMDktMDEtMjcgMjI6MjU6NDkuMDAwMDAwMDAwICswMTAwCitAQCAtMjksNiArMjksOSBAQAorIC8qIERvIGNvZGUgcmVhZGluZyB0byBpZGVudGlmeSBhIHNpZ25hbCBmcmFtZSwgYW5kIHNldCB0aGUgZnJhbWUKKyAgICBzdGF0ZSBkYXRhIGFwcHJvcHJpYXRlbHkuICBTZWUgdW53aW5kLWR3Mi5jIGZvciB0aGUgc3RydWN0cy4gICovCisgCisrLyogRG9uJ3QgdXNlIHRoaXMgaWYgaW5oaWJpdF9saWJjIGlzIHNldAorKyAgIFRoZSBidWlsZCBmb3IgdGhpcyB0YXJnZXQgd2lsbCBmYWlsIHRyeWluZyB0byBpbmNsdWRlIG1pc3NpbmcgaGVhZGVycyAqLworKyNpZm5kZWYgaW5oaWJpdF9saWJjCisgI2luY2x1ZGUgPHNpZ25hbC5oPgorICNpbmNsdWRlIDxzeXMvdWNvbnRleHQuaD4KKyAKK0BAIC04MCwzICs4Myw0IEBACisgICBmcy0+cmV0YWRkcl9jb2x1bW4gPSA2NDsKKyAgIHJldHVybiBfVVJDX05PX1JFQVNPTjsKKyB9CisrI2VuZGlmIC8qIGluaGliaXRfbGliYyAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8zMzAtdW53aW5kLWZvci11Q2xpYmMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzMzMC11bndpbmQtZm9yLXVDbGliYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzk3YzJmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8zMzAtdW53aW5kLWZvci11Q2xpYmMucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMzMwLXVud2luZC1mb3ItdUNsaWJjLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvdC1saW51eC11Y2xpYmMgZ2NjLTQuMy4zL2djYy9jb25maWcvdC1saW51eC11Y2xpYmMKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL3QtbGludXgtdWNsaWJjCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvdC1saW51eC11Y2xpYmMJMjAwOS0wMS0yNyAyMjoyODo1My4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsNSBAQAorKyMgUmVtb3ZlIGdsaWJjIHNwZWNpZmljIGZpbGVzIGFkZGVkIGluIHQtbGludXgKKytTSExJQl9NQVBGSUxFUyA6PSAkKGZpbHRlci1vdXQgJChzcmNkaXIpL2NvbmZpZy9saWJnY2MtZ2xpYmMudmVyLCAkKFNITElCX01BUEZJTEVTKSkKKysKKysjIFVzZSB1bndpbmQtZHcyLWZkZSBpbnN0ZWFkIG9mIHVud2luZC1kdzItZmRlLWdsaWJjCisrTElCMkFEREVIIDo9ICQoc3Vic3QgdW53aW5kLWR3Mi1mZGUtZ2xpYmMuYyx1bndpbmQtZHcyLWZkZS5jLCQoTElCMkFEREVIKSkKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy5nY2MgZ2NjLTQuMy4zL2djYy9jb25maWcuZ2NjCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy5nY2MJMjAwOS0wMS0yNyAyMjoyNTozNy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy5nY2MJMjAwOS0wMS0yNyAyMjoyODo1My4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNjQ4LDYgKzI2NDgsMTIgQEAKKyAJOzsKKyBlc2FjCisgCisrIyBSYXRoZXIgdGhhbiBob29rIGludG8gZWFjaCB0YXJnZXQsIGp1c3QgZG8gaXQgYWZ0ZXIgYWxsIHRoZSBsaW51eAorKyMgdGFyZ2V0cyBoYXZlIGJlZW4gcHJvY2Vzc2VkCisrY2FzZSAke3RhcmdldH0gaW4KKysgICotbGludXgtdWNsaWJjKikgdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBVU0VfVUNMSUJDIiA7IHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gdC1saW51eC11Y2xpYmMiOzsKKytlc2FjCisrCisgY2FzZSAke3RhcmdldH0gaW4KKyBpWzM0NTY3XTg2LSotbGludXgqYW91dCogfCBpWzM0NTY3XTg2LSotbGludXgqbGliYzEpCisgCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gaTM4Ni90LWdtbV9tYWxsb2MiCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzM0MC1tYWtlLW1uby1zcGUtd29yay1hcy1leHBlY3RlZC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjMvMzQwLW1ha2UtbW5vLXNwZS13b3JrLWFzLWV4cGVjdGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMmQyMDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzM0MC1tYWtlLW1uby1zcGUtd29yay1hcy1leHBlY3RlZC5wYXRjaApAQCAtMCwwICsxLDkwIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8zNDAtbWFrZS1tbm8tc3BlLXdvcmstYXMtZXhwZWN0ZWQucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCisyMDA4LTA0LTAzICBOYXRoYW4gRnJveWQgIDxmcm95ZG5qQGNvZGVzb3VyY2VyeS5jb20+CisgICAgICAgICAgICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBjb2Rlc291cmNlcnkuY29tPgorCisgICAgICAgICogY29uZmlnL3JzNjAwMC9yczYwMDAub3B0IChtc3BlKTogUmVtb3ZlIFZhciBwcm9wZXJ0eS4KKyAgICAgICAgKG1pc2VsKTogTGlrZXdpc2UuCisgICAgICAgICogY29uZmlnL3JzNjAwMC9yczYwMDAuaCAocnM2MDAwX3NwZSk6IERlY2xhcmUuCisgICAgICAgIChyczYwMDBfaXNlbCk6IExpa2V3aXNlLgorICAgICAgICAqIGNvbmZpZy9yczYwMDAvcnM2MDAwLmMgKHJzNjAwMF9zcGUpOiBOZXcgdmFyaWFibGUuCisgICAgICAgIChyczYwMDBfaXNlbCk6IE5ldyB2YXJpYWJsZS4KKyAgICAgICAgKHJzNjAwMF9oYW5kbGVfb3B0aW9uKTogSGFuZGxlIE9QVF9tc3BlIGFuZCBPUFRfbWlzZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5jIGdjYy00LjMuMy9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuYworLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5jCTIwMDgtMTEtMTggMjM6MDc6NTguMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5jCTIwMDktMDEtMjcgMjI6Mjg6NTUuMDAwMDAwMDAwICswMTAwCitAQCAtMTc0LDkgKzE3NCwxNSBAQAorIC8qIE5vbnplcm8gdG8gdXNlIEFsdGlWZWMgQUJJLiAgKi8KKyBpbnQgcnM2MDAwX2FsdGl2ZWNfYWJpOworIAorKy8qIE5vbnplcm8gaWYgd2Ugd2FudCBTUEUgU0lNRCBpbnN0cnVjdGlvbnMuICAqLworK2ludCByczYwMDBfc3BlOworKworIC8qIE5vbnplcm8gaWYgd2Ugd2FudCBTUEUgQUJJIGV4dGVuc2lvbnMuICAqLworIGludCByczYwMDBfc3BlX2FiaTsKKyAKKysvKiBOb256ZXJvIHRvIHVzZSBpc2VsIGluc3RydWN0aW9ucy4gICovCisraW50IHJzNjAwMF9pc2VsOworKworIC8qIE5vbnplcm8gaWYgZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucyBhcmUgZG9uZSBpbiB0aGUgR1BScy4gICovCisgaW50IHJzNjAwMF9mbG9hdF9ncHJzID0gMDsKKyAKK0BAIC0yMTQ0LDExICsyMTUwLDIxIEBACisgICAgICAgcnM2MDAwX3BhcnNlX3llc19ub19vcHRpb24gKCJ2cnNhdmUiLCBhcmcsICYoVEFSR0VUX0FMVElWRUNfVlJTQVZFKSk7CisgICAgICAgYnJlYWs7CisgCisrICAgIGNhc2UgT1BUX21pc2VsOgorKyAgICAgIHJzNjAwMF9leHBsaWNpdF9vcHRpb25zLmlzZWwgPSB0cnVlOworKyAgICAgIHJzNjAwMF9pc2VsID0gdmFsdWU7CisrICAgICAgYnJlYWs7CisrCisgICAgIGNhc2UgT1BUX21pc2VsXzoKKyAgICAgICByczYwMDBfZXhwbGljaXRfb3B0aW9ucy5pc2VsID0gdHJ1ZTsKKyAgICAgICByczYwMDBfcGFyc2VfeWVzX25vX29wdGlvbiAoImlzZWwiLCBhcmcsICYocnM2MDAwX2lzZWwpKTsKKyAgICAgICBicmVhazsKKyAKKysgICAgY2FzZSBPUFRfbXNwZToKKysgICAgICByczYwMDBfZXhwbGljaXRfb3B0aW9ucy5zcGUgPSB0cnVlOworKyAgICAgIHJzNjAwMF9zcGUgPSB2YWx1ZTsKKysgICAgICBicmVhazsKKysKKyAgICAgY2FzZSBPUFRfbXNwZV86CisgICAgICAgcnM2MDAwX2V4cGxpY2l0X29wdGlvbnMuc3BlID0gdHJ1ZTsKKyAgICAgICByczYwMDBfcGFyc2VfeWVzX25vX29wdGlvbiAoInNwZSIsIGFyZywgJihyczYwMDBfc3BlKSk7CitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5oIGdjYy00LjMuMy9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuaAorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5oCTIwMDgtMDEtMjYgMTg6MTg6MzUuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5oCTIwMDktMDEtMjcgMjI6Mjg6NTUuMDAwMDAwMDAwICswMTAwCitAQCAtMzQ5LDYgKzM0OSw4IEBACisgZXh0ZXJuIGludCByczYwMDBfaWVlZXF1YWQ7CisgZXh0ZXJuIGludCByczYwMDBfYWx0aXZlY19hYmk7CisgZXh0ZXJuIGludCByczYwMDBfc3BlX2FiaTsKKytleHRlcm4gaW50IHJzNjAwMF9zcGU7CisrZXh0ZXJuIGludCByczYwMDBfaXNlbDsKKyBleHRlcm4gaW50IHJzNjAwMF9mbG9hdF9ncHJzOworIGV4dGVybiBpbnQgcnM2MDAwX2FsaWdubWVudF9mbGFnczsKKyBleHRlcm4gY29uc3QgY2hhciAqcnM2MDAwX3NjaGVkX2luc2VydF9ub3BzX3N0cjsKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLm9wdCBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLm9wdAorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5vcHQJMjAwNy0xMC0zMSAwODo1NjowMS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLm9wdAkyMDA5LTAxLTI3IDIyOjI4OjU1LjAwMDAwMDAwMCArMDEwMAorQEAgLTE5MCw3ICsxOTAsNyBAQAorIC1tdnJzYXZlPXllcy9ubwlEZXByZWNhdGVkIG9wdGlvbi4gIFVzZSAtbXZyc2F2ZS8tbW5vLXZyc2F2ZSBpbnN0ZWFkCisgCisgbWlzZWwKKy1UYXJnZXQgVmFyKHJzNjAwMF9pc2VsKQorK1RhcmdldAorIEdlbmVyYXRlIGlzZWwgaW5zdHJ1Y3Rpb25zCisgCisgbWlzZWw9CitAQCAtMTk4LDcgKzE5OCw3IEBACisgLW1pc2VsPXllcy9ubwlEZXByZWNhdGVkIG9wdGlvbi4gIFVzZSAtbWlzZWwvLW1uby1pc2VsIGluc3RlYWQKKyAKKyBtc3BlCistVGFyZ2V0IFZhcihyczYwMDBfc3BlKQorK1RhcmdldAorIEdlbmVyYXRlIFNQRSBTSU1EIGluc3RydWN0aW9ucyBvbiBFNTAwCisgCisgbXBhaXJlZApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8zNTAtc2gtd2l0aG91dC1oZWFkZXJzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8zNTAtc2gtd2l0aG91dC1oZWFkZXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYjg2MGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzM1MC1zaC13aXRob3V0LWhlYWRlcnMucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMzUwLXNoLXdpdGhvdXQtaGVhZGVycy5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09uIDIwMDgxMDExLCBLaGVtIFJBSiB3cml0ZXM6CisgWW91IGhhdmUgdG8gYmFyIGdjYyB0cnlpbmcgdG8gYnVpbGQgdW53aW5kaW5nIGF0IHN0YWdlIDEuIFRyeSB0aGUKKyBhdHRhY2hlZCBwYXRjaCBhbmQgc2VlIGlmIGl0IGhlbHBzLgorCisgZ2NjL2NvbmZpZy9zaC9saW51eC11bndpbmQuaCB8ICAgIDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9zaC9saW51eC11bndpbmQuaCBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9zaC9saW51eC11bndpbmQuaAorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvc2gvbGludXgtdW53aW5kLmgJMjAwNy0wOS0xMiAwODo1OTowNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9zaC9saW51eC11bndpbmQuaAkyMDA5LTAxLTI3IDIyOjI4OjU3LjAwMDAwMDAwMCArMDEwMAorQEAgLTI2LDYgKzI2LDggQEAKKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAKKysjaWZuZGVmIGluaGliaXRfbGliYworKworIC8qIERvIGNvZGUgcmVhZGluZyB0byBpZGVudGlmeSBhIHNpZ25hbCBmcmFtZSwgYW5kIHNldCB0aGUgZnJhbWUKKyAgICBzdGF0ZSBkYXRhIGFwcHJvcHJpYXRlbHkuICBTZWUgdW53aW5kLWR3Mi5jIGZvciB0aGUgc3RydWN0cy4gICovCisgCitAQCAtMjUxLDMgKzI1Myw0IEBACisgICByZXR1cm4gX1VSQ19OT19SRUFTT047CisgfQorICNlbmRpZiAvKiBkZWZpbmVkIChfX1NINV9fKSAqLworKyNlbmRpZiAvKiBpZm5kZWYgaW5oaWJpdF9saWJjICovCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzM4MC1wcjM3NDM2LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8zODAtcHIzNzQzNi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWEwMTZmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8zODAtcHIzNzQzNi5wYXRjaApAQCAtMCwwICsxLDg2IEBACitnY2Mgc3ZuIDE0Mjc3ODoKKworUFIgdGFyZ2V0LzM3NDM2CisqIGFybS5jIChhcm1fbGVnaXRpbWF0ZV9pbmRleCk6IE9ubHkgYWNjZXB0IGFkZHJlc3NlcyB0aGF0IGFyZSBpbgorY2Fub25pY2FsIGZvcm0uCisqIHByZWRpY2F0ZXMubWQgKGFybV9yZWdfb3JfZXh0ZW5kcWlzaV9tZW1fb3ApOiBOZXcgcHJlZGljYXRlLgorKiBhcm0ubWQgKGV4dGVuZHFpaGkyKTogVXNlIGFybV9yZWdfb3JfZXh0ZW5kcWlzaV9tZW1fb3AgcHJlZGljYXRlCitmb3Igb3BlcmFuZDEuCisoZXh0ZW5kcWlzaTIpOiBMaWtld2lzZS4KKyhhcm1fZXh0ZW5kcWlzaSwgYXJtX2V4dGVuZHFpc2lfdjYpOiBVc2UgYXJtX2V4dGVuZHFpc2lfbWVtX29wCitwcmVkaWNhdGUgZm9yIG9wZXJhbmQxLgorCitkaWZmIC1OdXJhIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvYXJtL2FybS5jIGdjYy00LjMuMy9nY2MvY29uZmlnL2FybS9hcm0uYworLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvYXJtL2FybS5jCTIwMDgtMDYtMTEgMDc6NTI6NTUuMDAwMDAwMDAwIC0wMzAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvYXJtL2FybS5jCTIwMDktMDUtMjEgMTY6MDY6NDUuMDAwMDAwMDAwIC0wMzAwCitAQCAtMzc2OSw2ICszNzY5LDcgQEAKKyAgICAgICBydHggeG9wMSA9IFhFWFAgKHgsIDEpOworIAorICAgICAgIHJldHVybiAoKGFybV9hZGRyZXNzX3JlZ2lzdGVyX3J0eF9wICh4b3AwLCBzdHJpY3RfcCkKKysJICAgICAgICYmIEdFVF9DT0RFKHhvcDEpID09IENPTlNUX0lOVAorIAkgICAgICAgJiYgYXJtX2xlZ2l0aW1hdGVfaW5kZXhfcCAobW9kZSwgeG9wMSwgb3V0ZXIsIHN0cmljdF9wKSkKKyAJICAgICAgfHwgKGFybV9hZGRyZXNzX3JlZ2lzdGVyX3J0eF9wICh4b3AxLCBzdHJpY3RfcCkKKyAJCSAgJiYgYXJtX2xlZ2l0aW1hdGVfaW5kZXhfcCAobW9kZSwgeG9wMCwgb3V0ZXIsIHN0cmljdF9wKSkpOworZGlmZiAtTnVyYSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FybS9hcm0ubWQgZ2NjLTQuMy4zL2djYy9jb25maWcvYXJtL2FybS5tZAorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvYXJtL2FybS5tZAkyMDA3LTA5LTA0IDAxOjQ0OjQ3LjAwMDAwMDAwMCAtMDMwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL2FybS9hcm0ubWQJMjAwOS0wNS0yMSAxNjowNjo0NS4wMDAwMDAwMDAgLTAzMDAKK0BAIC00MTk5LDcgKzQxOTksNyBAQAorIAorIChkZWZpbmVfZXhwYW5kICJleHRlbmRxaWhpMiIKKyAgIFsoc2V0IChtYXRjaF9kdXAgMikKKy0JKGFzaGlmdDpTSSAobWF0Y2hfb3BlcmFuZDpRSSAxICJnZW5lcmFsX29wZXJhbmQiICIiKQorKwkoYXNoaWZ0OlNJIChtYXRjaF9vcGVyYW5kOlFJIDEgImFybV9yZWdfb3JfZXh0ZW5kcWlzaV9tZW1fb3AiICIiKQorIAkJICAgKGNvbnN0X2ludCAyNCkpKQorICAgIChzZXQgKG1hdGNoX29wZXJhbmQ6SEkgMCAic19yZWdpc3Rlcl9vcGVyYW5kIiAiIikKKyAJKGFzaGlmdHJ0OlNJIChtYXRjaF9kdXAgMikKK0BAIC00MjI0LDcgKzQyMjQsNyBAQAorIAorIChkZWZpbmVfaW5zbiAiKmFybV9leHRlbmRxaWhpX2luc24iCisgICBbKHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJzX3JlZ2lzdGVyX29wZXJhbmQiICI9ciIpCistCShzaWduX2V4dGVuZDpISSAobWF0Y2hfb3BlcmFuZDpRSSAxICJtZW1vcnlfb3BlcmFuZCIgIlVxIikpKV0KKysJKHNpZ25fZXh0ZW5kOkhJIChtYXRjaF9vcGVyYW5kOlFJIDEgImFybV9leHRlbmRxaXNpX21lbV9vcCIgIlVxIikpKV0KKyAgICJUQVJHRVRfQVJNICYmIGFybV9hcmNoNCIKKyAgICJsZHIlKHNiJSlcXHQlMCwgJTEiCisgICBbKHNldF9hdHRyICJ0eXBlIiAibG9hZF9ieXRlIikKK0BAIC00MjM1LDcgKzQyMzUsNyBAQAorIAorIChkZWZpbmVfZXhwYW5kICJleHRlbmRxaXNpMiIKKyAgIFsoc2V0IChtYXRjaF9kdXAgMikKKy0JKGFzaGlmdDpTSSAobWF0Y2hfb3BlcmFuZDpRSSAxICJnZW5lcmFsX29wZXJhbmQiICIiKQorKwkoYXNoaWZ0OlNJIChtYXRjaF9vcGVyYW5kOlFJIDEgImFybV9yZWdfb3JfZXh0ZW5kcWlzaV9tZW1fb3AiICIiKQorIAkJICAgKGNvbnN0X2ludCAyNCkpKQorICAgIChzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAic19yZWdpc3Rlcl9vcGVyYW5kIiAiIikKKyAJKGFzaGlmdHJ0OlNJIChtYXRjaF9kdXAgMikKK0BAIC00MjY3LDcgKzQyNjcsNyBAQAorIAorIChkZWZpbmVfaW5zbiAiKmFybV9leHRlbmRxaXNpIgorICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAic19yZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorLQkoc2lnbl9leHRlbmQ6U0kgKG1hdGNoX29wZXJhbmQ6UUkgMSAibWVtb3J5X29wZXJhbmQiICJVcSIpKSldCisrCShzaWduX2V4dGVuZDpTSSAobWF0Y2hfb3BlcmFuZDpRSSAxICJhcm1fZXh0ZW5kcWlzaV9tZW1fb3AiICJVcSIpKSldCisgICAiVEFSR0VUX0FSTSAmJiBhcm1fYXJjaDQgJiYgIWFybV9hcmNoNiIKKyAgICJsZHIlKHNiJSlcXHQlMCwgJTEiCisgICBbKHNldF9hdHRyICJ0eXBlIiAibG9hZF9ieXRlIikKK0BAIC00Mjc4LDcgKzQyNzgsOCBAQAorIAorIChkZWZpbmVfaW5zbiAiKmFybV9leHRlbmRxaXNpX3Y2IgorICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAic19yZWdpc3Rlcl9vcGVyYW5kIiAiPXIsciIpCistCShzaWduX2V4dGVuZDpTSSAobWF0Y2hfb3BlcmFuZDpRSSAxICJub25pbW1lZGlhdGVfb3BlcmFuZCIgInIsVXEiKSkpXQorKwkoc2lnbl9leHRlbmQ6U0kKKysJIChtYXRjaF9vcGVyYW5kOlFJIDEgImFybV9yZWdfb3JfZXh0ZW5kcWlzaV9tZW1fb3AiICJyLFVxIikpKV0KKyAgICJUQVJHRVRfQVJNICYmIGFybV9hcmNoNiIKKyAgICJACisgICAgc3h0YiU/XFx0JTAsICUxCitkaWZmIC1OdXJhIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvYXJtL3ByZWRpY2F0ZXMubWQgZ2NjLTQuMy4zL2djYy9jb25maWcvYXJtL3ByZWRpY2F0ZXMubWQKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FybS9wcmVkaWNhdGVzLm1kCTIwMDctMDgtMDIgMDc6NDk6MzEuMDAwMDAwMDAwIC0wMzAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvYXJtL3ByZWRpY2F0ZXMubWQJMjAwOS0wNS0yMSAxNjowNjo0NS4wMDAwMDAwMDAgLTAzMDAKK0BAIC0yMzQsNiArMjM0LDEwIEBACisgICAgICAgIChtYXRjaF90ZXN0ICJhcm1fbGVnaXRpbWF0ZV9hZGRyZXNzX3AgKG1vZGUsIFhFWFAgKG9wLCAwKSwgU0lHTl9FWFRFTkQsCisgCQkJCQkgICAgICAwKSIpKSkKKyAKKysoZGVmaW5lX3NwZWNpYWxfcHJlZGljYXRlICJhcm1fcmVnX29yX2V4dGVuZHFpc2lfbWVtX29wIgorKyAgKGlvciAobWF0Y2hfb3BlcmFuZCAwICJhcm1fZXh0ZW5kcWlzaV9tZW1fb3AiKQorKyAgICAgICAobWF0Y2hfb3BlcmFuZCAwICJzX3JlZ2lzdGVyX29wZXJhbmQiKSkpCisrCisgKGRlZmluZV9wcmVkaWNhdGUgInBvd2VyX29mX3R3b19vcGVyYW5kIgorICAgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCisgewpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8zOTAtdW5icmVhay1hcm12NHQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy4zLzM5MC11bmJyZWFrLWFybXY0dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjE0ZTBkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy8zOTAtdW5icmVhay1hcm12NHQucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorLS0tIGdjYy00LjMuMi5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAkyMDA5LTA5LTA4IDIzOjQ2OjQ0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgJMjAwOS0wOS0wOCAyMzo0Njo1MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC00NCw3ICs0NCw3IEBACisgICAgVGhlIEFSTTEwVERNSSBjb3JlIGlzIHRoZSBkZWZhdWx0IGZvciBhcm12NXQsIHNvIHNldAorICAgIFNVQlRBUkdFVF9DUFVfREVGQVVMVCB0byBhY2hpZXZlIHRoaXMuICAqLworICN1bmRlZiAgU1VCVEFSR0VUX0NQVV9ERUZBVUxUCistI2RlZmluZSBTVUJUQVJHRVRfQ1BVX0RFRkFVTFQgVEFSR0VUX0NQVV9hcm0xMHRkbWkKKysjZGVmaW5lIFNVQlRBUkdFVF9DUFVfREVGQVVMVCBUQVJHRVRfQ1BVX2FybTl0ZG1pCisgCisgLyogVEFSR0VUX0JJR19FTkRJQU5fREVGQVVMVCBpcyBzZXQgaW4KKyAgICBjb25maWcuZ2NjIGZvciBiaWcgZW5kaWFuIGNvbmZpZ3VyYXRpb25zLiAgKi8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjMvNDAwLWxpYmdjY19laC5hLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuMy80MDAtbGliZ2NjX2VoLmEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU0MTk4YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjMvNDAwLWxpYmdjY19laC5hLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0hpZ2hseSBpbnNwaXJlZCBieToKKyAgaHR0cDovL2xhbmRsZXkubmV0L2hnL2Fib3JpZ2luYWwvZmlsZS83ZTA3NDdhNjY1YWIvc291cmNlcy9wYXRjaGVzL2djYy1jb3JlLWxpYmdjY2VoLnBhdGNoCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4yLm9yaWcvL2xpYmdjYy9NYWtlZmlsZS5pbiBnY2MtNC4zLjIvbGliZ2NjL01ha2VmaWxlLmluCistLS0gZ2NjLTQuMy4yLm9yaWcvL2xpYmdjYy9NYWtlZmlsZS5pbgkyMDA4LTA2LTE3IDExOjMyOjM0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMi9saWJnY2MvTWFrZWZpbGUuaW4JMjAxMS0wOS0wMiAxMjoyNzozOS4yOTY1Mzg5NTUgKzAyMDAKK0BAIC03MDUsOCArNzA1LDkgQEAKKyBsaWJnY2NfcyQoU0hMSUJfRVhUKTogbGlidW53aW5kJChTSExJQl9FWFQpCisgZW5kaWYKKyAKKythbGw6IGxpYmdjY19laC5hCisgaWZlcSAoJChlbmFibGVfc2hhcmVkKSx5ZXMpCistYWxsOiBsaWJnY2NfZWguYSBsaWJnY2NfcyQoU0hMSUJfRVhUKQorK2FsbDogbGliZ2NjX3MkKFNITElCX0VYVCkKKyBpZm5lcSAoJChMSUJVTldJTkQpLCkKKyBhbGw6IGxpYnVud2luZCQoU0hMSUJfRVhUKQorIGVuZGlmCitAQCAtODc1LDEwICs4NzYsNiBAQAorIGluc3RhbGwtc2hhcmVkOgorIAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGluc3RfbGliZGlyKQorIAorLQkkKElOU1RBTExfREFUQSkgbGliZ2NjX2VoLmEgJChERVNURElSKSQoaW5zdF9saWJkaXIpLworLQljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCistCSQoUkFOTElCKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKy0KKyAJJChzdWJzdCBAbXVsdGlsaWJfZGlyQCwkKE1VTFRJRElSKSwkKHN1YnN0IFwKKyAJCUBzaGxpYl9iYXNlX25hbWVALGxpYmdjY19zLCQoc3Vic3QgXAorIAkJQHNobGliX3NsaWJkaXJfcXVhbEAsJChNVUxUSU9TU1VCRElSKSwkKFNITElCX0lOU1RBTEwpKSkpCitAQCAtODkzLDYgKzg5MCwxMCBAQAorIAljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjb3YuYQorIAkkKFJBTkxJQikgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjb3YuYQorIAorKwkkKElOU1RBTExfREFUQSkgbGliZ2NjX2VoLmEgJChERVNURElSKSQoaW5zdF9saWJkaXIpLworKwljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCisrCSQoUkFOTElCKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKysKKyAJcGFydHM9IiQoSU5TVEFMTF9QQVJUUykiOwkJCQlcCisgCWZvciBmaWxlIGluICQkcGFydHM7IGRvCQkJCQlcCisgCSAgcm0gLWYgJChERVNURElSKSQoaW5zdF9saWJkaXIpLyQkZmlsZTsJCVwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMTAwLWFscGhhLW1pZWVlLWRlZmF1bHQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy40LzEwMC1hbHBoYS1taWVlZS1kZWZhdWx0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NTAxOWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy40LzEwMC1hbHBoYS1taWVlZS1kZWZhdWx0LnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzEwMC1hbHBoYS1taWVlZS1kZWZhdWx0LnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vMDBfYWxsX2djYy00LjEtYWxwaGEtbWllZWUtZGVmYXVsdC5wYXRjaAorU2V0IHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9uIGFscGhhIHRvIHVzZSAtbWllZWUgc2luY2UgdGhlIGxhcmdlIG1ham9yaXR5IG9mCit0aW1lIHdlIHdhbnQgdGhpcyAoYmFkL3dlaXJkIHRoaW5ncyBjYW4gaGFwcGVuIHdpdGggcGFja2FnZXMgYnVpbHQgd2l0aG91dAorLW1pZWVlKS4KKworVG8gc2F0aXNmeSB0aG9zZSBwZW9wbGUgd2hvIG1heSBub3Qgd2FudCAtbWllZWUgZm9yY2VkIG9uIHRoZW0gYWxsIHRoZSB0aW1lLAord2UgYWxzbyBwcm92aWRlIC1tbm8taWVlZS4KKworUGF0Y2ggYnkgTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5oIGdjYy00LjMuMy9nY2MvY29uZmlnL2FscGhhL2FscGhhLmgKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FscGhhL2FscGhhLmgJMjAwNy0xMi0wNiAxNDoyNTozNy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5oCTIwMDktMDEtMjcgMjI6MTk6MDIuMDAwMDAwMDAwICswMTAwCitAQCAtOTUsNiArOTUsOCBAQAorICAgd2hpbGUgKDApCisgI2VuZGlmCisgCisrI2RlZmluZSBDUFBfU1BFQyAiJXshbm8taWVlZTotbWllZWV9IgorKworICNkZWZpbmUgV09SRF9TV0lUQ0hfVEFLRVNfQVJHKFNUUikJCVwKKyAgKCFzdHJjbXAgKFNUUiwgInJwYXRoIikgfHwgREVGQVVMVF9XT1JEX1NXSVRDSF9UQUtFU19BUkcoU1RSKSkKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5vcHQgZ2NjLTQuMy4zL2djYy9jb25maWcvYWxwaGEvYWxwaGEub3B0CistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5vcHQJMjAwNy0wOC0wMiAxMjo0OTozMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5vcHQJMjAwOS0wMS0yNyAyMjoxOTowMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zOSw3ICszOSw3IEBACisgUmVxdWVzdCBJRUVFLWNvbmZvcm1hbnQgbWF0aCBsaWJyYXJ5IHJvdXRpbmVzIChPU0YvMSkKKyAKKyBtaWVlZQorLVRhcmdldCBSZXBvcnQgUmVqZWN0TmVnYXRpdmUgTWFzayhJRUVFKQorK1RhcmdldCBSZXBvcnQgTWFzayhJRUVFKQorIEVtaXQgSUVFRS1jb25mb3JtYW50IGNvZGUsIHdpdGhvdXQgaW5leGFjdCBleGNlcHRpb25zCisgCisgbWllZWUtd2l0aC1pbmV4YWN0CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy40LzExMC10cmFtcG9saW5ld2Fybi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMTEwLXRyYW1wb2xpbmV3YXJuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYWIyMTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy40LzExMC10cmFtcG9saW5ld2Fybi5wYXRjaApAQCAtMCwwICsxLDQwIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8xMTAtdHJhbXBvbGluZXdhcm4ucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby8wMF9hbGxfZ2NjLXRyYW1wb2xpbmV3YXJuLnBhdGNoCisJVGhpcyB0cml2aWFsIHBhdGNoIGNhdXNlcyBnY2MgdG8gZW1pdCBhIHdhcm5pbmcgd2hlbmV2ZXIKKwlpdCBnZW5lcmF0ZXMgYSB0cmFtcG9saW5lLiAgVGhlc2UgYXJlIG90aGVyd2lzZSBoYXJkIHRvCisJbG9jYXRlLiAgSXQgaXMgcmlnZ2VkIHRvIGRlZmF1bHQgT04gLSB0byBoYXZlIGl0IGRlZmF1bHQKKwl0byBPRkYgcmVtb3ZlIHRoZSB0ZXh0ICdJbml0KDEpJyBmcm9tIHRoZSBjb21tb24ub3B0CisJcGF0Y2gsIGxlYXZpbmcganVzdCAnQ29tbW9uIFZhcih3YXJuX3RyYW1wb2xpbmVzKScuCisJS2V2aW4gRi4gUXVpbm4gPGtldnF1aW5uQGdlbnRvby5vcmc+IDE3IEphbiAyMDA2CisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvYnVpbHRpbnMuYyBnY2MtNC4zLjMvZ2NjL2J1aWx0aW5zLmMKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvYnVpbHRpbnMuYwkyMDA4LTA4LTE5IDE4OjM3OjEzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9nY2MvYnVpbHRpbnMuYwkyMDA5LTAxLTI3IDIyOjE5OjEyLjAwMDAwMDAwMCArMDEwMAorQEAgLTU2NjIsNiArNTY2Miw5IEBACisgICB0cmFtcG9saW5lc19jcmVhdGVkID0gMTsKKyAgIElOSVRJQUxJWkVfVFJBTVBPTElORSAocl90cmFtcCwgcl9mdW5jLCByX2NoYWluKTsKKyAKKysgIGlmICh3YXJuX3RyYW1wb2xpbmVzKQorKyAgICB3YXJuaW5nIChPUFRfV3RyYW1wb2xpbmVzLCAiZ2VuZXJhdGluZyB0cmFtcG9saW5lIGluIG9iamVjdCAocmVxdWlyZXMgZXhlY3V0YWJsZSBzdGFjaykiKTsKKysKKyAgIHJldHVybiBjb25zdDBfcnR4OworIH0KKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbW1vbi5vcHQgZ2NjLTQuMy4zL2djYy9jb21tb24ub3B0CistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbW1vbi5vcHQJMjAwOC0wMS0yMiAxNToxMTo0NC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbW1vbi5vcHQJMjAwOS0wMS0yNyAyMjoxOToxMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xODIsNiArMTgyLDEwIEBACisgQ29tbW9uIFZhcih3YXJuX3N5c3RlbV9oZWFkZXJzKSBXYXJuaW5nCisgRG8gbm90IHN1cHByZXNzIHdhcm5pbmdzIGZyb20gc3lzdGVtIGhlYWRlcnMKKyAKKytXdHJhbXBvbGluZXMKKytDb21tb24gVmFyKHdhcm5fdHJhbXBvbGluZXMpIEluaXQoMSkKKytXYXJuIHdoZW5ldmVyIGEgdHJhbXBvbGluZSBpcyBnZW5lcmF0ZWQKKysKKyBXdW5pbml0aWFsaXplZAorIENvbW1vbiBWYXIod2Fybl91bmluaXRpYWxpemVkKSBXYXJuaW5nCisgV2FybiBhYm91dCB1bmluaXRpYWxpemVkIGF1dG9tYXRpYyB2YXJpYWJsZXMKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMTIwLWphdmEtbm9tdWx0aS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMTIwLWphdmEtbm9tdWx0aS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2I4MTNlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8xMjAtamF2YS1ub211bHRpLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzEyMC1qYXZhLW5vbXVsdGkucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby8wM19hbGxfZ2NjNDMtamF2YS1ub211bHRpLnBhdGNoCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliamF2YS9jb25maWd1cmUgZ2NjLTQuMy4zL2xpYmphdmEvY29uZmlndXJlCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliamF2YS9jb25maWd1cmUJMjAwOS0wMS0yNCAxMTozMjoyOS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvbGliamF2YS9jb25maWd1cmUJMjAwOS0wMS0yNyAyMjoxOToxNC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMDE4LDYgKzEwMTgsOCBAQAorICAgLS1lbmFibGUtZ2NvbmYtcGVlciAgICAgY29tcGlsZSBHQ29uZiBuYXRpdmUgcGVlcnMgZm9yIHV0aWwucHJlZmVyZW5jZXMKKyAgIC0tZW5hYmxlLWphdmEtbWFpbnRhaW5lci1tb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdyByZWJ1aWxkaW5nIG9mIC5jbGFzcyBhbmQgLmggZmlsZXMKKysgIC0tZW5hYmxlLWxpYmphdmEtbXVsdGlsaWIKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGxpYmphdmEgYXMgbXVsdGlsaWIKKyAgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICBzcGVlZHMgdXAgb25lLXRpbWUgYnVpbGQKKyAgIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgICBkbyBub3QgcmVqZWN0IHNsb3cgZGVwZW5kZW5jeSBleHRyYWN0b3JzCisgICAtLWVuYWJsZS1tYWludGFpbmVyLW1vZGUgIGVuYWJsZSBtYWtlIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgbm90IHVzZWZ1bAorQEAgLTE4NTAsNiArMTg1MiwxNiBAQAorIGZpCisgCisgCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYmphdmEtbXVsdGlsaWIgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7ZW5hYmxlX2xpYmphdmFfbXVsdGlsaWIrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX2xpYmphdmFfbXVsdGlsaWI7CisrZmkKKysKKytpZiB0ZXN0ICIkZW5hYmxlX2xpYmphdmFfbXVsdGlsaWIiID0gbm87IHRoZW4KKysgIG11bHRpbGliPW5vCisrICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzIC0tZGlzYWJsZS1tdWx0aWxpYiIKKytmaQorKworICMgSXQgbWF5IG5vdCBiZSBzYWZlIHRvIHJ1biBsaW5raW5nIHRlc3RzIGluIEFDX1BST0dfQ0MvQUNfUFJPR19DWFguCisgCisgCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYmphdmEvY29uZmlndXJlLmFjIGdjYy00LjMuMy9saWJqYXZhL2NvbmZpZ3VyZS5hYworLS0tIGdjYy00LjMuMy5vcmlnL2xpYmphdmEvY29uZmlndXJlLmFjCTIwMDgtMDctMDIgMjM6MjM6NDMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2xpYmphdmEvY29uZmlndXJlLmFjCTIwMDktMDEtMjcgMjI6MTk6MTQuMDAwMDAwMDAwICswMTAwCitAQCAtODIsNiArODIsMTMgQEAKKyAJW2FsbG93IHJlYnVpbGRpbmcgb2YgLmNsYXNzIGFuZCAuaCBmaWxlc10pKQorIEFNX0NPTkRJVElPTkFMKEpBVkFfTUFJTlRBSU5FUl9NT0RFLCB0ZXN0ICIkZW5hYmxlX2phdmFfbWFpbnRhaW5lcl9tb2RlIiA9IHllcykKKyAKKytBQ19BUkdfRU5BQkxFKGxpYmphdmEtbXVsdGlsaWIsCisrCUFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1saWJqYXZhLW11bHRpbGliXSwgW2J1aWxkIGxpYmphdmEgYXMgbXVsdGlsaWJdKSkKKytpZiB0ZXN0ICIkZW5hYmxlX2xpYmphdmFfbXVsdGlsaWIiID0gbm87IHRoZW4KKysgIG11bHRpbGliPW5vCisrICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzIC0tZGlzYWJsZS1tdWx0aWxpYiIKKytmaQorKworICMgSXQgbWF5IG5vdCBiZSBzYWZlIHRvIHJ1biBsaW5raW5nIHRlc3RzIGluIEFDX1BST0dfQ0MvQUNfUFJPR19DWFguCisgR0NDX05PX0VYRUNVVEFCTEVTCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy40LzEzMC1jcm9zcy1jb21waWxlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8xMzAtY3Jvc3MtY29tcGlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjY1OTk4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8xMzAtY3Jvc3MtY29tcGlsZS5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8xMzAtY3Jvc3MtY29tcGlsZS5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzA4X2FsbF9nY2MtNC4xLWNyb3NzLWNvbXBpbGUucGF0Y2gKK1NvbWUgbm90ZXMgb24gdGhlICdib290c3RyYXAgd2l0aCBvciB3aXRob3V0IGxpYmMgaGVhZGVycycgZGViYXRlOgoraHR0cDovL2xpbnV4ZnJvbXNjcmF0Y2gub3JnL3BpcGVybWFpbC9sZnMtZGV2LzIwMDUtSnVseS8wNTI0MDkuaHRtbAoraHR0cDovL2djYy5nbnUub3JnL21sL2djYy8yMDA1LTA3L21zZzAxMTk1Lmh0bWwKKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWd1cmUgZ2NjLTQuMy4zL2djYy9jb25maWd1cmUKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlndXJlCTIwMDgtMDgtMDEgMTE6NTE6MDMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWd1cmUJMjAwOS0wMS0yNyAyMjoxOToxNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMzQ0Miw3ICsxMzQ0Miw3IEBACisgCSAgICB8IHBvd2VycGMqLSotKixwb3dlcnBjNjQqLSotKikKKyAJCUNST1NTPSIkQ1JPU1MgLUROQVRJVkVfQ1JPU1MiIDs7CisgCWVzYWMKKy1lbGlmIHRlc3QgIngkVEFSR0VUX1NZU1RFTV9ST09UIiAhPSB4OyB0aGVuCisrZWxpZiB0ZXN0ICJ4JFRBUkdFVF9TWVNURU1fUk9PVCIgIT0geCAtbyAkYnVpbGQgIT0gJGhvc3Q7IHRoZW4KKyAgICAgICAgIFNZU1RFTV9IRUFERVJfRElSPSRidWlsZF9zeXN0ZW1faGVhZGVyX2RpcgorIGZpCisgCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWd1cmUuYWMgZ2NjLTQuMy4zL2djYy9jb25maWd1cmUuYWMKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlndXJlLmFjCTIwMDgtMDgtMDEgMTE6NTE6MDMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWd1cmUuYWMJMjAwOS0wMS0yNyAyMjoxOToxNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNzQ5LDcgKzE3NDksNyBAQAorIAkgICAgfCBwb3dlcnBjKi0qLSoscG93ZXJwYzY0Ki0qLSopCisgCQlDUk9TUz0iJENST1NTIC1ETkFUSVZFX0NST1NTIiA7OworIAllc2FjCistZWxpZiB0ZXN0ICJ4JFRBUkdFVF9TWVNURU1fUk9PVCIgIT0geDsgdGhlbgorK2VsaWYgdGVzdCAieCRUQVJHRVRfU1lTVEVNX1JPT1QiICE9IHggLW8gJGJ1aWxkICE9ICRob3N0OyB0aGVuCisgICAgICAgICBTWVNURU1fSEVBREVSX0RJUj0kYnVpbGRfc3lzdGVtX2hlYWRlcl9kaXIgCisgZmkKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL3Vud2luZC1kdzIuYyBnY2MtNC4zLjMvZ2NjL3Vud2luZC1kdzIuYworLS0tIGdjYy00LjMuMy5vcmlnL2djYy91bndpbmQtZHcyLmMJMjAwOC0wOS0yNSAwMDo0NDoyOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL3Vud2luZC1kdzIuYwkyMDA5LTAxLTI3IDIyOjE5OjE2LjAwMDAwMDAwMCArMDEwMAorQEAgLTMzNCw5ICszMzQsMTEgQEAKKyB9CisgI2VuZGlmCisgCisrI2lmbmRlZiBpbmhpYml0X2xpYmMKKyAjaWZkZWYgTURfVU5XSU5EX1NVUFBPUlQKKyAjaW5jbHVkZSBNRF9VTldJTkRfU1VQUE9SVAorICNlbmRpZgorKyNlbmRpZgorIAwKKyAvKiBFeHRyYWN0IGFueSBpbnRlcmVzdGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBDSUUgZm9yIHRoZSB0cmFuc2xhdGlvbgorICAgIHVuaXQgRiBiZWxvbmdzIHRvLiAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgYnl0ZSBhZnRlciB0aGUgYXVnbWVudGF0aW9uLApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8xNDAtbmV0YnNkLXN5bWJvbGljLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8xNDAtbmV0YnNkLXN5bWJvbGljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4OTlkZDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy40LzE0MC1uZXRic2Qtc3ltYm9saWMucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMTQwLW5ldGJzZC1zeW1ib2xpYy5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzExX2FsbF9nY2MtbmV0YnNkLXN5bWJvbGljLnBhdGNoCitodHRwOi8vYnVncy5nZW50b28ub3JnLzEyMjY5OAorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9uZXRic2QtZWxmLmggZ2NjLTQuMy4zL2djYy9jb25maWcvbmV0YnNkLWVsZi5oCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9uZXRic2QtZWxmLmgJMjAwNy0wOS0wMyAxODoxNDowNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9uZXRic2QtZWxmLmgJMjAwOS0wMS0yNyAyMjoxOToxOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC04Miw2ICs4Miw3IEBACisgI2RlZmluZSBORVRCU0RfTElOS19TUEVDX0VMRiBcCisgICAiJXthc3NlcnQqfSAle1IqfSAle3JwYXRoKn0gXAorICAgICV7c2hhcmVkOi1zaGFyZWR9IFwKKysgICAle3N5bWJvbGljOi1Cc3ltYm9saWN9IFwKKyAgICAleyFzaGFyZWQ6IFwKKyAgICAgIC1kYyAtZHAgXAorICAgICAgJXshbm9zdGRsaWI6IFwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMTUwLXNwYXJjNjQtYnNkLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8xNTAtc3BhcmM2NC1ic2QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMzYTc2MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMTUwLXNwYXJjNjQtYnNkLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzE1MC1zcGFyYzY0LWJzZC5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzE0X2FsbF9nY2Mtc3BhcmM2NC1ic2QucGF0Y2gKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL3NwYXJjL2ZyZWVic2QuaCBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9zcGFyYy9mcmVlYnNkLmgKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL3NwYXJjL2ZyZWVic2QuaAkyMDA3LTA4LTAyIDEyOjQ5OjMxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL3NwYXJjL2ZyZWVic2QuaAkyMDA5LTAxLTI3IDIyOjE5OjIwLjAwMDAwMDAwMCArMDEwMAorQEAgLTI1LDkgKzI1LDIyIEBACisgLyogRnJlZUJTRCBuZWVkcyB0aGUgcGxhdGZvcm0gbmFtZSAoc3BhcmM2NCkgZGVmaW5lZC4KKyAgICBFbWFjcyBuZWVkcyB0byBrbm93IGlmIHRoZSBhcmNoIGlzIDY0IG9yIDMyLWJpdHMuICAqLworIAorLSN1bmRlZiAgQ1BQX0NQVTY0X0RFRkFVTFRfU1BFQworLSNkZWZpbmUgQ1BQX0NQVTY0X0RFRkFVTFRfU1BFQyBcCistICAiLURfX3NwYXJjNjRfXyAtRF9fc3BhcmNfdjlfXyAtRF9fc3BhcmN2OSAtRF9fYXJjaDY0X18iCisrI3VuZGVmICBGQlNEX1RBUkdFVF9DUFVfQ1BQX0JVSUxUSU5TCisrI2RlZmluZSBGQlNEX1RBUkdFVF9DUFVfQ1BQX0JVSUxUSU5TKCkgICAgICAgICAgICAgICAgICBcCisrICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgaWYgKFRBUkdFVF9BUkNINjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19zcGFyYzY0X18iKTsgICAgICAgICAgICAgICBcCisrICAgICAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19zcGFyY192OV9fIik7ICAgICAgICAgICAgICBcCisrICAgICAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19zcGFyY3Y5Iik7ICAgICAgICAgICAgICAgICBcCisrICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBidWlsdGluX2RlZmluZSAoIl9fc3BhcmMiKTsgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjX18iKTsgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB3aGlsZSAoMCkKKysKKyAKKyAjZGVmaW5lIExJTktfU1BFQyAiJShsaW5rX2FyY2gpCQkJCQkJXAorICAgJXshbW5vLXJlbGF4OiV7IXI6LXJlbGF4fX0JCQkJCQlcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy40LzE2MC1mbGF0dGVuLXN3aXRjaC1zdG10LTAwLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8xNjAtZmxhdHRlbi1zd2l0Y2gtc3RtdC0wMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmFjZmJjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8xNjAtZmxhdHRlbi1zd2l0Y2gtc3RtdC0wMC5wYXRjaApAQCAtMCwwICsxLDgxIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8xNjAtZmxhdHRlbi1zd2l0Y2gtc3RtdC0wMC5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzE4X2FsbF85MDQtZmxhdHRlbi1zd2l0Y2gtc3RtdC0wMC5wYXRjaAoraHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMDctMDQvbXNnMDA5MjcuaHRtbAorCitIaSwKKworVGhlIGF0dGFjaGVkIHBhdGNoIG1ha2VzIHN1cmUgdGhhdCB3ZSBjcmVhdGUgc21hbGxlciBvYmplY3QgY29kZSBmb3IKK3NpbXBsZSBzd2l0Y2ggc3RhdGVtZW50cy4gV2UganVzdCBtYWtlIHN1cmUgdG8gZmxhdHRlbiB0aGUgc3dpdGNoCitzdGF0ZW1lbnQgaW50byBhbiBpZi1lbHNlIGNoYWluLCBiYXNpY2FsbHkuCisKK1RoaXMgZml4ZXMgYSBzaXplLXJlZ3Jlc3Npb24gYXMgY29tcGFyZWQgdG8gZ2NjLTMuNCwgYXMgY2FuIGJlIHNlZW4KK2JlbG93LgorCisyMDA3LTA0LTE1ICBCZXJuaGFyZCBGaXNjaGVyICA8Li4+CisKKwkqIHN0bXQuYyAoZXhwYW5kX2Nhc2UpOiBEbyBub3QgY3JlYXRlIGEgY29tcGxleCBiaW5hcnkgdHJlZSB3aGVuCisJb3B0aW1pemluZyBmb3Igc2l6ZSBidXQgcmF0aGVyIHVzZSB0aGUgc2ltcGxlIG9yZGVyZWQgbGlzdC4KKwkoZW1pdF9jYXNlX25vZGVzKTogZG8gbm90IGVtaXQganVtcHMgdG8gdGhlIGRlZmF1bHRfbGFiZWwgd2hlbgorCW9wdGltaXppbmcgZm9yIHNpemUuCisKK05vdCByZWd0ZXN0ZWQgc28gZmFyLgorQ29tbWVudHM/CisKK0F0dGFjaGVkIGlzIHRoZSB0ZXN0IHN3aXRjaC5jIG1lbnRpb25lZCBiZWxvdy4KKworJCBmb3IgaSBpbiAyLjk1IDMuMyAzLjQgNC4wIDQuMSA0LjIub3JpZy1IRUFEIDQuMy5vcmlnLUhFQUQgNC4zLUhFQUQ7ZG8KK2djYy0kaSAgLURDSEFJTiAtT3MgLW8gc3dpdGNoLUNIQUlOLSRpLm8gLWMgc3dpdGNoLmMgO2RvbmUKKyQgZm9yIGkgaW4gMi45NSAzLjMgMy40IDQuMCA0LjEgNC4yLm9yaWctSEVBRCA0LjMub3JpZy1IRUFEIDQuMy1IRUFEO2RvCitnY2MtJGkgIC1VQ0hBSU4gLU9zIC1vIHN3aXRjaC0kaS5vIC1jIHN3aXRjaC5jIDtkb25lCisKKyQgc2l6ZSBzd2l0Y2gtKi5vCisgICB0ZXh0CSAgIGRhdGEJICAgIGJzcwkgICAgZGVjCSAgICBoZXgJZmlsZW5hbWUKKyAgICAxNjkJICAgICAgMAkgICAgICAwCSAgICAxNjkJICAgICBhOQlzd2l0Y2gtMi45NS5vCisgICAgMTE1CSAgICAgIDAJICAgICAgMAkgICAgMTE1CSAgICAgNzMJc3dpdGNoLTMuMy5vCisgICAgMTAzCSAgICAgIDAJICAgICAgMAkgICAgMTAzCSAgICAgNjcJc3dpdGNoLTMuNC5vCisgICAgMTI0CSAgICAgIDAJICAgICAgMAkgICAgMTI0CSAgICAgN2MJc3dpdGNoLTQuMC5vCisgICAgMTI0CSAgICAgIDAJICAgICAgMAkgICAgMTI0CSAgICAgN2MJc3dpdGNoLTQuMS5vCisgICAgMTI0CSAgICAgIDAJICAgICAgMAkgICAgMTI0CSAgICAgN2MJc3dpdGNoLTQuMi5vcmlnLUhFQUQubworICAgICA5NQkgICAgICAwCSAgICAgIDAJICAgICA5NQkgICAgIDVmCXN3aXRjaC00LjMtSEVBRC5vCisgICAgMTI0CSAgICAgIDAJICAgICAgMAkgICAgMTI0CSAgICAgN2MJc3dpdGNoLTQuMy5vcmlnLUhFQUQubworICAgIDE2NgkgICAgICAwCSAgICAgIDAJICAgIDE2NgkgICAgIGE2CXN3aXRjaC1DSEFJTi0yLjk1Lm8KKyAgICAxMTEJICAgICAgMAkgICAgICAwCSAgICAxMTEJICAgICA2Zglzd2l0Y2gtQ0hBSU4tMy4zLm8KKyAgICAgOTUJICAgICAgMAkgICAgICAwCSAgICAgOTUJICAgICA1Zglzd2l0Y2gtQ0hBSU4tMy40Lm8KKyAgICAgOTUJICAgICAgMAkgICAgICAwCSAgICAgOTUJICAgICA1Zglzd2l0Y2gtQ0hBSU4tNC4wLm8KKyAgICAgOTUJICAgICAgMAkgICAgICAwCSAgICAgOTUJICAgICA1Zglzd2l0Y2gtQ0hBSU4tNC4xLm8KKyAgICAgOTUJICAgICAgMAkgICAgICAwCSAgICAgOTUJICAgICA1Zglzd2l0Y2gtQ0hBSU4tNC4yLm9yaWctSEVBRC5vCisgICAgIDk1CSAgICAgIDAJICAgICAgMAkgICAgIDk1CSAgICAgNWYJc3dpdGNoLUNIQUlOLTQuMy1IRUFELm8KKyAgICAgOTUJICAgICAgMAkgICAgICAwCSAgICAgOTUJICAgICA1Zglzd2l0Y2gtQ0hBSU4tNC4zLm9yaWctSEVBRC5vCisKKworQ29udGVudC1UeXBlOiB0ZXh0L3gtZGlmZjsgY2hhcnNldD11cy1hc2NpaQorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9ImdjYy00LjMuZ2NjLWZsYXR0ZW4tc3dpdGNoLXN0bXQuMDAuZGlmZiIKKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9zdG10LmMgZ2NjLTQuMy4zL2djYy9zdG10LmMKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2Mvc3RtdC5jCTIwMDgtMDUtMDkgMjA6MTI6MTMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2djYy9zdG10LmMJMjAwOS0wMS0yNyAyMjoxOToyOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNTA5LDcgKzI1MDksMTEgQEAKKyAJICB1c2VfY29zdF90YWJsZQorIAkgICAgPSAoVFJFRV9DT0RFIChvcmlnX3R5cGUpICE9IEVOVU1FUkFMX1RZUEUKKyAJICAgICAgICYmIGVzdGltYXRlX2Nhc2VfY29zdHMgKGNhc2VfbGlzdCkpOworLQkgIGJhbGFuY2VfY2FzZV9ub2RlcyAoJmNhc2VfbGlzdCwgTlVMTCk7CisrCSAgLyogV2hlbiBvcHRpbWl6aW5nIGZvciBzaXplLCB3ZSB3YW50IGEgc3RyYWlnaHQgbGlzdCB0byBhdm9pZAorKwkgICAgIGp1bXBzIGFzIG11Y2ggYXMgcG9zc2libGUuIFRoaXMgYmFzaWNhbGx5IGNyZWF0ZXMgYW4gaWYtZWxzZQorKwkgICAgIGNoYWluLiAgKi8KKysJICBpZiAoIW9wdGltaXplX3NpemUpCisrCSAgICBiYWxhbmNlX2Nhc2Vfbm9kZXMgKCZjYXNlX2xpc3QsIE5VTEwpOworIAkgIGVtaXRfY2FzZV9ub2RlcyAoaW5kZXgsIGNhc2VfbGlzdCwgZGVmYXVsdF9sYWJlbCwgaW5kZXhfdHlwZSk7CisgCSAgZW1pdF9qdW1wIChkZWZhdWx0X2xhYmVsKTsKKyAJfQorQEAgLTMwNjcsNiArMzA3MSw3IEBACisgCSAgICB7CisgCSAgICAgIGlmICghbm9kZV9oYXNfbG93X2JvdW5kIChub2RlLCBpbmRleF90eXBlKSkKKyAJCXsKKysJCSAgaWYgKCFvcHRpbWl6ZV9zaXplKSAvKiBkb24ndCBqbCB0byB0aGUgLmRlZmF1bHRfbGFiZWwuICovCisgCQkgIGVtaXRfY21wX2FuZF9qdW1wX2luc25zIChpbmRleCwKKyAJCQkJCSAgIGNvbnZlcnRfbW9kZXMKKyAJCQkJCSAgIChtb2RlLCBpbW9kZSwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMTcwLWxpYmliZXJ0eS1waWMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy40LzE3MC1saWJpYmVydHktcGljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNzg5ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy40LzE3MC1saWJpYmVydHktcGljLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzE3MC1saWJpYmVydHktcGljLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vNTFfYWxsX2djYy0zLjQtbGliaWJlcnR5LXBpYy5wYXRjaAorLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYmliZXJ0eS9NYWtlZmlsZS5pbiBnY2MtNC4zLjMvbGliaWJlcnR5L01ha2VmaWxlLmluCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliaWJlcnR5L01ha2VmaWxlLmluCTIwMDctMDctMjUgMDg6MjY6NDUuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2xpYmliZXJ0eS9NYWtlZmlsZS5pbgkyMDA5LTAxLTI3IDIyOjE5OjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTIyNSw2ICsyMjUsNyBAQAorIAkgICQoQVIpICQoQVJfRkxBR1MpICQoVEFSR0VUTElCKSBcCisgCSAgICAkKFJFUVVJUkVEX09GSUxFUykgJChFWFRSQV9PRklMRVMpICQoTElCT0JKUyk7IFwKKyAJICAkKFJBTkxJQikgJChUQVJHRVRMSUIpOyBcCisrCSAgY3AgJChUQVJHRVRMSUIpIC4uLyA7IFwKKyAJICBjZCAuLjsgXAorIAllbHNlIHRydWU7IGZpCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy40LzE4MC1zdXBlcmgtZGVmYXVsdC1tdWx0aWxpYi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMTgwLXN1cGVyaC1kZWZhdWx0LW11bHRpbGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MTkzNzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy40LzE4MC1zdXBlcmgtZGVmYXVsdC1tdWx0aWxpYi5wYXRjaApAQCAtMCwwICsxLDMwIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8xODAtc3VwZXJoLWRlZmF1bHQtbXVsdGlsaWIucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby81M19hbGxfZ2NjNC1zdXBlcmgtZGVmYXVsdC1tdWx0aWxpYi5wYXRjaAorVGhlIGdjYy0zLnggdG9vbGNoYWlucyB3b3VsZCBjb250YWluIGFsbCB0aGUgdGFyZ2V0cyBieSBkZWZhdWx0LiAgV2l0aCBnY2MtNCwKK3lvdSBoYXZlIHRvIGFjdHVhbGx5IGxpc3Qgb3V0IHRoZSBtdWx0aWxpYnMgeW91IHdhbnQgb3IgeW91IHdpbGwgZW5kIHVwIHdpdGgKK2p1c3Qgb25lIHdoZW4gdXNpbmcgdGFyZ2V0cyBsaWtlICdzaDQtbGludXgtZ251Jy4KKworVGhlIHJlc3VsdGluZyB0b29sY2hhaW4gY2FuJ3QgZXZlbiBidWlsZCBhIGtlcm5lbCBhcyB0aGUga2VybmVsIG5lZWRzIHRvIGJ1aWxkCit3aXRoIHRoZSBub2ZwdSBmbGFnIHRvIGJlIHN1cmUgdGhhdCBubyBmcHUgb3BzIGFyZSBnZW5lcmF0ZWQuCisKK0hlcmUgd2UgcmVzdG9yZSB0aGUgZ2NjLTMueCBiZWhhdmlvcjsgdGhlIGFkZGl0aW9uYWwgb3ZlcmhlYWQgb2YgYnVpbGRpbmcgYWxsCitvZiB0aGVzZSBtdWx0aWxpYnMgYnkgZGVmYXVsdCBpcyBuZWdsaWdpYmxlLgorCitodHRwOi8vYnVncy5nZW50b28ub3JnLzE0MDIwNQorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy5nY2MgZ2NjLTQuMy4zL2djYy9jb25maWcuZ2NjCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy5nY2MJMjAwOC0xMS0yMCAxODowOTo1My4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy5nY2MJMjAwOS0wMS0yNyAyMjoxOTozMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMjc1LDcgKzIyNzUsNyBAQAorIAlpZiB0ZXN0IHgke3NoX211bHRpbGlic30gPSB4IDsgdGhlbgorIAkJY2FzZSAke3RhcmdldH0gaW4KKyAJCXNoNjQtc3VwZXJoLWxpbnV4KiB8IFwKKy0JCXNoWzEyMzRdKikJc2hfbXVsdGlsaWJzPSR7c2hfY3B1X3RhcmdldH0gOzsKKysJCXNoWzEyMzRdKikJc2hfbXVsdGlsaWJzPWBjZCAke3NyY2Rpcn0vY29uZmlnL3NoIDsgZWNobyB0LW1saWItc2hbMS00XSogfCBzZWQgJ3M6dC1tbGliLXNoOixtOmc7czogOjpnJ2AgOzsKKyAJCXNoNjQqIHwgc2g1KikJc2hfbXVsdGlsaWJzPW01LTMybWVkaWEsbTUtMzJtZWRpYS1ub2ZwdSxtNS1jb21wYWN0LG01LWNvbXBhY3Qtbm9mcHUsbTUtNjRtZWRpYSxtNS02NG1lZGlhLW5vZnB1IDs7CisgCQlzaC1zdXBlcmgtKikJc2hfbXVsdGlsaWJzPW00LG00LXNpbmdsZSxtNC1zaW5nbGUtb25seSxtNC1ub2ZwdSA7OworIAkJc2gqLSotbGludXgqKQlzaF9tdWx0aWxpYnM9bTEsbTNlLG00IDs7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy40LzE5MC1saWJzdGRjKystcGljLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8xOTAtbGlic3RkYysrLXBpYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjI4NDdjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8xOTAtbGlic3RkYysrLXBpYy5wYXRjaApAQCAtMCwwICsxLDYxIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8xOTAtbGlic3RkYysrLXBpYy5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzU0X2FsbF8zMDAtbGlic3RkYysrLXBpYy5wYXRjaAoraW5zdGFsbCBsaWJzdGRjKytfcGljLmEgaWYgd2UgaGF2ZSBwaWMgb2JqcworCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbSBnY2MtNC4zLjMvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQorLS0tIGdjYy00LjMuMy5vcmlnL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuYW0JMjAwOC0wMi0yOSAxOToyNjo1MC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQkyMDA5LTAxLTI3IDIyOjE5OjM0LjAwMDAwMDAwMCArMDEwMAorQEAgLTI4OSw2ICsyODksMTMgQEAKKyAJICAkKE9QVF9MREZMQUdTKSAkKFNFQ1RJT05fTERGTEFHUykgJChBTV9DWFhGTEFHUykgJChMVExERkxBR1MpIC1vICRACisgCisgCisraW5zdGFsbC1leGVjLWxvY2FsOgorKwlwaWNfb2Jqcz1gc2VkIC1uICJzOic6Omc7czpecGljX29iamVjdD06OnAiICoubG8gfCBncmVwIC12ICdebm9uZSQkJ2A7IFwKKysJaWYgWyB4IiQkcGljX29ianMiICE9IHggXTsgdGhlbiBcCisrCQkkKEFSKSBjcnUgbGlic3RkYysrX3BpYy5hICQkcGljX29ianMgJCh0b3BfYnVpbGRkaXIpL2xpYnN1cGMrKy8qLm8gfHwgZXhpdCAxOyBcCisrCQkkKElOU1RBTExfREFUQSkgbGlic3RkYysrX3BpYy5hICQoREVTVERJUikkKHRvb2xleGVjbGliZGlyKSB8fCBleGl0IDE7IFwKKysJZmkKKysKKyAjIEFkZGVkIGJpdHMgdG8gYnVpbGQgZGVidWcgbGlicmFyeS4KKyBpZiBHTElCQ1hYX0JVSUxEX0RFQlVHCisgYWxsLWxvY2FsOiBidWlsZF9kZWJ1ZworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluIGdjYy00LjMuMy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCistLS0gZ2NjLTQuMy4zLm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgkyMDA4LTAyLTI5IDE5OjI2OjUwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCTIwMDktMDEtMjcgMjI6MTk6MzQuMDAwMDAwMDAwICswMTAwCitAQCAtNjkzLDcgKzY5Myw3IEBACisgCisgaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWRhdGEtbG9jYWwKKyAKKy1pbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUworK2luc3RhbGwtZXhlYy1hbTogaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTIGluc3RhbGwtZXhlYy1sb2NhbAorIAorIGluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisgCitAQCAtNzMyLDcgKzczMiw3IEBACisgCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKyAJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorIAl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWluZm8tYW0gXAorLQl1bmluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUworKwl1bmluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUyBpbnN0YWxsLWV4ZWMtbG9jYWwKKyAKKyAKKyAjIFN5bWJvbCB2ZXJzaW9uaW5nIGZvciBzaGFyZWQgbGlicmFyaWVzLgorQEAgLTg1OCw2ICs4NTgsMTQgQEAKKyBpbnN0YWxsX2RlYnVnOgorIAkoY2QgJHtkZWJ1Z2Rpcn0gJiYgJChNQUtFKSBcCisgCXRvb2xleGVjbGliZGlyPSQoZ2xpYmN4eF90b29sZXhlY2xpYmRpcikvZGVidWcgaW5zdGFsbCkKKysKKytpbnN0YWxsLWV4ZWMtbG9jYWw6CisrCXBpY19vYmpzPWBzZWQgLW4gInM6Jzo6ZztzOl5waWNfb2JqZWN0PTo6cCIgKi5sbyB8IGdyZXAgLXYgJ15ub25lJCQnYDsgXAorKwlpZiBbIHgiJCRwaWNfb2JqcyIgIT0geCBdOyB0aGVuIFwKKysJCSQoQVIpIGNydSBsaWJzdGRjKytfcGljLmEgJCRwaWNfb2JqcyAkKHRvcF9idWlsZGRpcikvbGlic3VwYysrLyoubyB8fCBleGl0IDE7IFwKKysJCSQoSU5TVEFMTF9EQVRBKSBsaWJzdGRjKytfcGljLmEgJChERVNURElSKSQodG9vbGV4ZWNsaWJkaXIpIHx8IGV4aXQgMTsgXAorKwlmaQorKworICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisgIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisgLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8yMDAtcHIyNDE3MC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMjAwLXByMjQxNzAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJiYmM5ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMjAwLXByMjQxNzAucGF0Y2gKQEAgLTAsMCArMSw2NiBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMjAwLXByMjQxNzAucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby82MV9hbGxfZ2NjNDMtcHIyNDE3MC5wYXRjaAoraHR0cDovL2djYy5nbnUub3JnL1BSMjQxNzAKKworMjAwOC0wMi0yMCAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgorCisJUFIgbGliZ2NqLzI0MTcwOgorCSogamF2YS9pby9uYXRGaWxlUG9zaXguY2MgKEZpbGU6OnBlcmZvcm1MaXN0KTogRG9uJ3QgdXNlCisJcmVhZGRpcl9yLgorCSogY29uZmlndXJlLCBpbmNsdWRlL2NvbmZpZy5oLmluOiBSZWJ1aWx0LgorCSogY29uZmlndXJlLmFjOiBEb24ndCBjaGVjayBmb3IgcmVhZGRpcl9yLgorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliamF2YS9jb25maWd1cmUuYWMgZ2NjLTQuMy4zL2xpYmphdmEvY29uZmlndXJlLmFjCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliamF2YS9jb25maWd1cmUuYWMJMjAwOS0wMS0yNyAyMjoxOToxNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvbGliamF2YS9jb25maWd1cmUuYWMJMjAwOS0wMS0yNyAyMjoxOTozNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMDMwLDcgKzEwMzAsNyBAQAorICAgIFBMQVRGT1JNTkVUPU5vTmV0CisgZWxzZQorICAgIEFDX0NIRUNLX0ZVTkNTKFtzdHJlcnJvcl9yIHNlbGVjdCBmc3RhdCBvcGVuIGZzeW5jIHNsZWVwIG9wZW5kaXIgXAorLSAgICAgICAgICAgICAgICAgICBsb2NhbHRpbWVfciByZWFkZGlyX3IgZ2V0cHd1aWRfciBnZXRjd2QgXAorKyAgICAgICAgICAgICAgICAgICBsb2NhbHRpbWVfciBnZXRwd3VpZF9yIGdldGN3ZCBcCisgCQkgICBhY2Nlc3Mgc3RhdCBsc3RhdCBta2RpciByZW5hbWUgcm1kaXIgdW5saW5rIHV0aW1lIGNobW9kIHJlYWRsaW5rIFwKKyAJCSAgIG5sX2xhbmdpbmZvIHNldGxvY2FsZSBcCisgCQkgICBpbmV0X3B0b24gdW5hbWUgaW5ldF9udG9hIFwKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliamF2YS9pbmNsdWRlL2NvbmZpZy5oLmluIGdjYy00LjMuMy9saWJqYXZhL2luY2x1ZGUvY29uZmlnLmguaW4KKy0tLSBnY2MtNC4zLjMub3JpZy9saWJqYXZhL2luY2x1ZGUvY29uZmlnLmguaW4JMjAwNy0wNy0zMSAxODoxNzoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGliamF2YS9pbmNsdWRlL2NvbmZpZy5oLmluCTIwMDktMDEtMjcgMjI6MTk6MzYuMDAwMDAwMDAwICswMTAwCitAQCAtMjE0LDkgKzIxNCw2IEBACisgLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwd2QuaD4gaGVhZGVyIGZpbGUuICovCisgI3VuZGVmIEhBVkVfUFdEX0gKKyAKKy0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJlYWRkaXJfcicgZnVuY3Rpb24uICovCistI3VuZGVmIEhBVkVfUkVBRERJUl9SCistCisgLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZWFkbGluaycgZnVuY3Rpb24uICovCisgI3VuZGVmIEhBVkVfUkVBRExJTksKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliamF2YS9qYXZhL2lvL25hdEZpbGVQb3NpeC5jYyBnY2MtNC4zLjMvbGliamF2YS9qYXZhL2lvL25hdEZpbGVQb3NpeC5jYworLS0tIGdjYy00LjMuMy5vcmlnL2xpYmphdmEvamF2YS9pby9uYXRGaWxlUG9zaXguY2MJMjAwNy0wOC0wNCAyMzo1MDowMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGliamF2YS9qYXZhL2lvL25hdEZpbGVQb3NpeC5jYwkyMDA5LTAxLTI3IDIyOjE5OjM2LjAwMDAwMDAwMCArMDEwMAorQEAgLTEsNiArMSw2IEBACisgLy8gbmF0RmlsZS5jYyAtIE5hdGl2ZSBwYXJ0IG9mIEZpbGUgY2xhc3MgZm9yIFBPU0lYLgorIAorLS8qIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNgorKy8qIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNiwgMjAwOAorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIAorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYmdjai4KK0BAIC0yOTIsMTMgKzI5Miw3IEBACisgCisgICBqYXZhOjp1dGlsOjpBcnJheUxpc3QgKmxpc3QgPSBuZXcgamF2YTo6dXRpbDo6QXJyYXlMaXN0ICgpOworICAgc3RydWN0IGRpcmVudCAqZDsKKy0jaWYgZGVmaW5lZChIQVZFX1JFQURESVJfUikgJiYgZGVmaW5lZChfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MpCistICBpbnQgbmFtZV9tYXggPSBwYXRoY29uZiAoYnVmLCBfUENfTkFNRV9NQVgpOworLSAgY2hhciBkYnVmW3NpemVvZiAoc3RydWN0IGRpcmVudCkgKyBuYW1lX21heCArIDFdOworLSAgd2hpbGUgKHJlYWRkaXJfciAoZGlyLCAoc3RydWN0IGRpcmVudCAqKSBkYnVmLCAmZCkgPT0gMCAmJiBkICE9IE5VTEwpCistI2Vsc2UgLyogSEFWRV9SRUFERElSX1IgKi8KKyAgIHdoaWxlICgoZCA9IHJlYWRkaXIgKGRpcikpICE9IE5VTEwpCistI2VuZGlmIC8qIEhBVkVfUkVBRERJUl9SICovCisgICAgIHsKKyAgICAgICAvLyBPbWl0ICIuIiBhbmQgIi4uIi4KKyAgICAgICBpZiAoZC0+ZF9uYW1lWzBdID09ICcuJwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8yMTAtbm90ZUdOVXN0YWNrLTAwLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8yMTAtbm90ZUdOVXN0YWNrLTAwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YzY0MjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy40LzIxMC1ub3RlR05Vc3RhY2stMDAucGF0Y2gKQEAgLTAsMCArMSwxMDEgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzIxMC1ub3RlR05Vc3RhY2stMDAucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby82MV9hbGxfZ2NjNC1pYTY0LW5vdGVHTlVzdGFjay5wYXRjaAorMjAwNC0wOS0yMCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZy9yczYwMDAvcHBjLWFzbS5oOiBBZGQgLm5vdGUuR05VLXN0YWNrIHNlY3Rpb24gYWxzbworCW9uIHBwYzY0LWxpbnV4LgorCisJKiBjb25maWcvaWE2NC9saWIxZnVuY3MuYXNtOiBBZGQgLm5vdGUuR05VLXN0YWNrIHNlY3Rpb24gb24KKwlpYTY0LWxpbnV4LgorCSogY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtOiBMaWtld2lzZS4KKwkqIGNvbmZpZy9pYTY0L2NydGVuZC5hc206IExpa2V3aXNlLgorCSogY29uZmlnL2lhNjQvY3J0aS5hc206IExpa2V3aXNlLgorCSogY29uZmlnL2lhNjQvY3J0bi5hc206IExpa2V3aXNlLgorCisyMDA0LTA1LTE0ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogY29uZmlnL2lhNjQvbGludXguaCAoVEFSR0VUX0FTTV9GSUxFX0VORCk6IERlZmluZS4KKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRiZWdpbi5hc20gZ2NjLTQuMy4zL2djYy9jb25maWcvaWE2NC9jcnRiZWdpbi5hc20KKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtCTIwMDUtMDktMjcgMDI6NTI6MjQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvaWE2NC9jcnRiZWdpbi5hc20JMjAwOS0wMS0yNyAyMjoxOTozOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNTUsMyArMjU1LDcgQEAKKyAud2VhayBfX2N4YV9maW5hbGl6ZQorICNlbmRpZgorIC53ZWFrIF9Kdl9SZWdpc3RlckNsYXNzZXMKKysKKysjaWZkZWYgX19saW51eF9fCisrLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrOyAucHJldmlvdXMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGVuZC5hc20gZ2NjLTQuMy4zL2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGVuZC5hc20JMjAwNS0wOS0yNyAwMjo1MjoyNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9pYTY0L2NydGVuZC5hc20JMjAwOS0wMS0yNyAyMjoxOTozOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMjIsMyArMTIyLDcgQEAKKyAKKyAJYnIucmV0LnNwdGsubWFueSBycAorIAkuZW5kcCBfX2RvX2dsb2JhbF9jdG9yc19hdXgKKysKKysjaWZkZWYgX19saW51eF9fCisrLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrOyAucHJldmlvdXMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGkuYXNtIGdjYy00LjMuMy9nY2MvY29uZmlnL2lhNjQvY3J0aS5hc20KKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0aS5hc20JMjAwNS0wNi0yNSAwMzoyMjo0MS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9pYTY0L2NydGkuYXNtCTIwMDktMDEtMjcgMjI6MTk6MzkuMDAwMDAwMDAwICswMTAwCitAQCAtNjQsMyArNjQsNyBAQAorIAkuYm9keQorIAorICMgZW5kIG9mIGNydGkuYXNtCisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRuLmFzbSBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9pYTY0L2NydG4uYXNtCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydG4uYXNtCTIwMDUtMDYtMjUgMDM6MjI6NDEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvaWE2NC9jcnRuLmFzbQkyMDA5LTAxLTI3IDIyOjE5OjM5LjAwMDAwMDAwMCArMDEwMAorQEAgLTU0LDMgKzU0LDcgQEAKKyAJYnIucmV0LnNwdGsubWFueSBiMAorIAorICMgZW5kIG9mIGNydG4uYXNtCisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvaWE2NC9saWIxZnVuY3MuYXNtIGdjYy00LjMuMy9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbQorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvaWE2NC9saWIxZnVuY3MuYXNtCTIwMDUtMDktMjcgMDI6NTI6MjQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvaWE2NC9saWIxZnVuY3MuYXNtCTIwMDktMDEtMjcgMjI6MTk6MzkuMDAwMDAwMDAwICswMTAwCitAQCAtNzkyLDMgKzc5Miw3IEBACisgCX0KKyAJLmVuZHAgX19mbG9hdHRpdGYKKyAjZW5kaWYKKysKKysjaWZkZWYgX19saW51eF9fCisrLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrOyAucHJldmlvdXMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2xpbnV4LmggZ2NjLTQuMy4zL2djYy9jb25maWcvaWE2NC9saW51eC5oCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2xpbnV4LmgJMjAwNi0xMi0xMiAxNjoxNToxOS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9pYTY0L2xpbnV4LmgJMjAwOS0wMS0yNyAyMjoxOTozOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC01LDYgKzUsOCBAQAorIAorICNkZWZpbmUgVEFSR0VUX1ZFUlNJT04gZnByaW50ZiAoc3RkZXJyLCAiIChJQS02NCkgTGludXgiKTsKKyAKKysjZGVmaW5lIFRBUkdFVF9BU01fRklMRV9FTkQgZmlsZV9lbmRfaW5kaWNhdGVfZXhlY19zdGFjaworKworIC8qIFRoaXMgaXMgZm9yIC1wcm9maWxlIHRvIHVzZSAtbGNfcCBpbnN0ZWFkIG9mIC1sYy4gICovCisgI3VuZGVmIENDMV9TUEVDCisgI2RlZmluZSBDQzFfU1BFQyAiJXtwcm9maWxlOi1wfSAle0cqfSIKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvcHBjLWFzbS5oIGdjYy00LjMuMy9nY2MvY29uZmlnL3JzNjAwMC9wcGMtYXNtLmgKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9wcGMtYXNtLmgJMjAwMy0wNi0wNCAxODo0NDo1MS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9yczYwMDAvcHBjLWFzbS5oCTIwMDktMDEtMjcgMjI6MTk6MzkuMDAwMDAwMDAwICswMTAwCitAQCAtMTU4LDcgKzE1OCw3IEBACisgCS5zaXplIEZVTkNfTkFNRShuYW1lKSxHTFVFKC5MLG5hbWUpLUZVTkNfTkFNRShuYW1lKQorICNlbmRpZgorIAorLSNpZiBkZWZpbmVkIF9fbGludXhfXyAmJiAhZGVmaW5lZCBfX3Bvd2VycGM2NF9fCisrI2lmIGRlZmluZWQgX19saW51eF9fCisgCS5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjaworIAkucHJldmlvdXMKKyAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMjIwLW5vdGVHTlVzdGFjay0wMS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMjIwLW5vdGVHTlVzdGFjay0wMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjZlOTk5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8yMjAtbm90ZUdOVXN0YWNrLTAxLnBhdGNoCkBAIC0wLDAgKzEsMjAzIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8yMjAtbm90ZUdOVXN0YWNrLTAxLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vNjJfYWxsX2djYzQtbm90ZUdOVXN0YWNrLnBhdGNoCisyMDA1LTAyLTA4ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogc3JjL2FscGhhL29zZi5TOiBBZGQgLm5vdGUuR05VLXN0YWNrIG9uIExpbnV4LgorCSogc3JjL3MzOTAvc3lzdi5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUzogTGlrZXdpc2UuCisJKiBzcmMveDg2L3VuaXg2NC5TOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvc3lzdi5TOiBMaWtld2lzZS4KKwkqIHNyYy9zcGFyYy92OC5TOiBMaWtld2lzZS4KKwkqIHNyYy9zcGFyYy92OS5TOiBMaWtld2lzZS4KKwkqIHNyYy9tNjhrL3N5c3YuUzogTGlrZXdpc2UuCisJKiBzcmMvaWE2NC91bml4LlM6IExpa2V3aXNlLgorCSogc3JjL2FybS9zeXN2LlM6IExpa2V3aXNlLgorCisJKiBpYTY0X3NhdmVfcmVnc19pbl9zdGFjay5zOiBNb3ZlZCB0by4uLgorCSogaWE2NF9zYXZlX3JlZ3NfaW5fc3RhY2suUzogLi4uIHRoaXMuICBBZGQgLm5vdGUuR05VLXN0YWNrCisJb24gTGludXguCisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9ib2VobS1nYy9pYTY0X3NhdmVfcmVnc19pbl9zdGFjay5TIGdjYy00LjMuMy9ib2VobS1nYy9pYTY0X3NhdmVfcmVnc19pbl9zdGFjay5TCistLS0gZ2NjLTQuMy4zLm9yaWcvYm9laG0tZ2MvaWE2NF9zYXZlX3JlZ3NfaW5fc3RhY2suUwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9ib2VobS1nYy9pYTY0X3NhdmVfcmVnc19pbl9zdGFjay5TCTIwMDktMDEtMjcgMjI6MjU6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDE1IEBACisrICAgICAgICAudGV4dAorKyAgICAgICAgLmFsaWduIDE2CisrICAgICAgICAuZ2xvYmFsIEdDX3NhdmVfcmVnc19pbl9zdGFjaworKyAgICAgICAgLnByb2MgR0Nfc2F2ZV9yZWdzX2luX3N0YWNrCisrR0Nfc2F2ZV9yZWdzX2luX3N0YWNrOgorKyAgICAgICAgLmJvZHlmb28ubXBnCisrICAgICAgICBmbHVzaHJzCisrICAgICAgICA7OworKyAgICAgICAgbW92IHI4PWFyLmJzcAorKyAgICAgICAgYnIucmV0LnNwdGsuZmV3IHJwCisrICAgICAgICAuZW5kcCBHQ19zYXZlX3JlZ3NfaW5fc3RhY2sKKysKKysjaWZkZWYgX19saW51eF9fCisrCS5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvYm9laG0tZ2MvaWE2NF9zYXZlX3JlZ3NfaW5fc3RhY2sucyBnY2MtNC4zLjMvYm9laG0tZ2MvaWE2NF9zYXZlX3JlZ3NfaW5fc3RhY2sucworLS0tIGdjYy00LjMuMy5vcmlnL2JvZWhtLWdjL2lhNjRfc2F2ZV9yZWdzX2luX3N0YWNrLnMJMjAwMS0xMC0xNSAwNjo1Nzo1OS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvYm9laG0tZ2MvaWE2NF9zYXZlX3JlZ3NfaW5fc3RhY2sucwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorQEAgLTEsMTIgKzAsMCBAQAorLSAgICAgICAgLnRleHQKKy0gICAgICAgIC5hbGlnbiAxNgorLSAgICAgICAgLmdsb2JhbCBHQ19zYXZlX3JlZ3NfaW5fc3RhY2sKKy0gICAgICAgIC5wcm9jIEdDX3NhdmVfcmVnc19pbl9zdGFjaworLUdDX3NhdmVfcmVnc19pbl9zdGFjazoKKy0gICAgICAgIC5ib2R5CistICAgICAgICBmbHVzaHJzCistICAgICAgICA7OworLSAgICAgICAgbW92IHI4PWFyLmJzcAorLSAgICAgICAgYnIucmV0LnNwdGsuZmV3IHJwCistICAgICAgICAuZW5kcCBHQ19zYXZlX3JlZ3NfaW5fc3RhY2sKKy0KK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9hbHBoYS9vc2YuUyBnY2MtNC4zLjMvbGliZmZpL3NyYy9hbHBoYS9vc2YuUworLS0tIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvYWxwaGEvb3NmLlMJMjAwNy0wNC0wNiAxODoyNDoxNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGliZmZpL3NyYy9hbHBoYS9vc2YuUwkyMDA5LTAxLTI3IDIyOjI1OjI3LjAwMDAwMDAwMCArMDEwMAorQEAgLTM1OCw0ICszNTgsOCBAQAorIAkuYnl0ZQkxNgkJIyB1bGViMTI4IG9mZnNldCAxNiotOAorIAkuYWxpZ24gMworICRMRUZERTM6CisrCisrI2lmZGVmIF9fbGludXhfXworKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisrI2VuZGlmCisgI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvYXJtL3N5c3YuUyBnY2MtNC4zLjMvbGliZmZpL3NyYy9hcm0vc3lzdi5TCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9hcm0vc3lzdi5TCTIwMDctMDktMDQgMTk6NTI6NDUuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvYXJtL3N5c3YuUwkyMDA5LTAxLTI3IDIyOjI1OjI3LjAwMDAwMDAwMCArMDEwMAorQEAgLTI5MywzICsyOTMsNiBAQAorIAlVTldJTkQgLmZuZW5kCisgICAgICAgICAuc2l6ZSAgICBDTkFNRShmZmlfY2xvc3VyZV9TWVNWKSwuZmZpX2Nsb3N1cmVfU1lTVl9lbmQtQ05BTUUoZmZpX2Nsb3N1cmVfU1lTVikKKyAKKysjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIiwlcHJvZ2JpdHMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9pYTY0L3VuaXguUyBnY2MtNC4zLjMvbGliZmZpL3NyYy9pYTY0L3VuaXguUworLS0tIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvaWE2NC91bml4LlMJMjAwNS0wMy0zMCAyMzo0OToxOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGliZmZpL3NyYy9pYTY0L3VuaXguUwkyMDA5LTAxLTI3IDIyOjI1OjI3LjAwMDAwMDAwMCArMDEwMAorQEAgLTU1MywzICs1NTMsNyBAQAorIAlkYXRhOAlAcGNyZWwoLkxsZF9oZmFfZmxvYXQpCQkvLyBGRklfSUE2NF9UWVBFX0hGQV9GTE9BVAorIAlkYXRhOAlAcGNyZWwoLkxsZF9oZmFfZG91YmxlKQkJLy8gRkZJX0lBNjRfVFlQRV9IRkFfRE9VQkxFCisgCWRhdGE4CUBwY3JlbCguTGxkX2hmYV9sZG91YmxlKQkvLyBGRklfSUE2NF9UWVBFX0hGQV9MRE9VQkxFCisrCisrI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXworKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvbTY4ay9zeXN2LlMgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvbTY4ay9zeXN2LlMKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL202OGsvc3lzdi5TCTIwMDctMDUtMTAgMjM6Mjk6MDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvbTY4ay9zeXN2LlMJMjAwOS0wMS0yNyAyMjoyNToyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMDcsMyArMjA3LDcgQEAKKyAJcnRzCisgCUNGSV9FTkRQUk9DKCkKKyAJLnNpemUJZmZpX2Nsb3N1cmVfc3RydWN0X1NZU1YsLi1mZmlfY2xvc3VyZV9zdHJ1Y3RfU1lTVgorKworKyNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL3Bvd2VycGMvbGludXg2NC5TIGdjYy00LjMuMy9saWJmZmkvc3JjL3Bvd2VycGMvbGludXg2NC5TCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjQuUwkyMDA3LTExLTE3IDAwOjI0OjUzLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9saWJmZmkvc3JjL3Bvd2VycGMvbGludXg2NC5TCTIwMDktMDEtMjcgMjI6MjU6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtMTc5LDMgKzE3OSw3IEBACisgCS5hbGlnbiAzCisgLkxFRkRFMToKKyAjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TIGdjYy00LjMuMy9saWJmZmkvc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMJMjAwNS0wOC0xMSAyMzoxODoyNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TCTIwMDktMDEtMjcgMjI6MjU6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtMjA0LDMgKzIwNCw3IEBACisgCS5hbGlnbiAzCisgLkxFRkRFMToKKyAjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMJMjAwNy0xMi0wMSAyMjowMDowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvbGliZmZpL3NyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMJMjAwOS0wMS0yNyAyMjoyNToyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yOTUsMyArMjk1LDcgQEAKKyAuTEVGREUxOgorIAorICNlbmRpZgorKworKyNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL3Bvd2VycGMvc3lzdi5TIGdjYy00LjMuMy9saWJmZmkvc3JjL3Bvd2VycGMvc3lzdi5TCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9wb3dlcnBjL3N5c3YuUwkyMDA3LTEyLTAxIDIyOjAwOjA0LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9saWJmZmkvc3JjL3Bvd2VycGMvc3lzdi5TCTIwMDktMDEtMjcgMjI6MjU6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtMjIzLDMgKzIyMyw3IEBACisgICAgICAgLmFsaWduIDIKKyAuTEVGREUxOgorICNlbmRpZgorKworKyNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL3MzOTAvc3lzdi5TIGdjYy00LjMuMy9saWJmZmkvc3JjL3MzOTAvc3lzdi5TCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9zMzkwL3N5c3YuUwkyMDAzLTEwLTIxIDIxOjAxOjU4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9saWJmZmkvc3JjL3MzOTAvc3lzdi5TCTIwMDktMDEtMjcgMjI6MjU6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtNDI3LDMgKzQyNyw2IEBACisgCisgI2VuZGlmCisgCisrI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXworKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvc3BhcmMvdjguUyBnY2MtNC4zLjMvbGliZmZpL3NyYy9zcGFyYy92OC5TCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9zcGFyYy92OC5TCTIwMDgtMTEtMjEgMjM6MTM6MTMuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvc3BhcmMvdjguUwkyMDA5LTAxLTI3IDIyOjI1OjI3LjAwMDAwMDAwMCArMDEwMAorQEAgLTMwNiwzICszMDYsNyBAQAorIAkuYnl0ZQkweDFmCSEgdWxlYjEyOCAweDFmCisgCS5hbGlnbglXUworIC5MTEVGREUyOgorKworKyNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL3NwYXJjL3Y5LlMgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvc3BhcmMvdjkuUworLS0tIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvc3BhcmMvdjkuUwkyMDA0LTAxLTI1IDA3OjU4OjMzLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9saWJmZmkvc3JjL3NwYXJjL3Y5LlMJMjAwOS0wMS0yNyAyMjoyNToyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zMDAsMyArMzAwLDcgQEAKKyAJLmFsaWduIDgKKyAuTExFRkRFMjoKKyAjZW5kaWYKKysKKysjaWZkZWYgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy94ODYvc3lzdi5TIGdjYy00LjMuMy9saWJmZmkvc3JjL3g4Ni9zeXN2LlMKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL3g4Ni9zeXN2LlMJMjAwOC0wMS0zMCAxNTozNjo1OC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvbGliZmZpL3NyYy94ODYvc3lzdi5TCTIwMDktMDEtMjcgMjI6MjU6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtNDMwLDMgKzQzMCw3IEBACisgI2VuZGlmCisgCisgI2VuZGlmIC8qIGlmbmRlZiBfX3g4Nl82NF9fICovCisrCisrI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXworKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMveDg2L3VuaXg2NC5TIGdjYy00LjMuMy9saWJmZmkvc3JjL3g4Ni91bml4NjQuUworLS0tIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMveDg2L3VuaXg2NC5TCTIwMDUtMDUtMDUgMDY6MDY6MzguMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2xpYmZmaS9zcmMveDg2L3VuaXg2NC5TCTIwMDktMDEtMjcgMjI6MjU6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtNDEwLDMgKzQxMCw3IEBACisgLkxFRkRFMzoKKyAKKyAjZW5kaWYgLyogX194ODZfNjRfXyAqLworKworKyNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8yMzAtcHIzNDU3MS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMjMwLXByMzQ1NzEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI4YTFjYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMjMwLXByMzQ1NzEucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMjMwLXByMzQ1NzEucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby82NF9hbGxfZ2NjNDMtcHIzNDU3MS5wYXRjaAoraHR0cDovL2djYy5nbnUub3JnL1BSMzQ1NzEKKworMjAwNy0xMi0yNiAgUmFzayBJbmdlbWFubiBMYW1iZXJ0c2VuICA8cmFza0BzeWdlaHVzLmRrPgorCisJUFIgdGFyZ2V0LzM0NTcxCisJKiBjb25maWcvYWxwaGEvYWxwaGEuYyAoYWxwaGFfY2Fubm90X2ZvcmNlX2NvbnN0X21lbSk6IFVzZQorCXN5bWJvbGljX29wZXJhbmQuCisJKiB2YXJhc20uYyAob3V0cHV0X2NvbnN0YW50X3Bvb2xfMSk6IEZpeCB0eXBvLgorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5jIGdjYy00LjMuMy9nY2MvY29uZmlnL2FscGhhL2FscGhhLmMKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FscGhhL2FscGhhLmMJMjAwOC0wOS0wOSAwMToxNjo1NS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5jCTIwMDktMDEtMjcgMjI6MjU6MjkuMDAwMDAwMDAwICswMTAwCitAQCAtMTExMyw4ICsxMTEzLDcgQEAKKyBzdGF0aWMgYm9vbAorIGFscGhhX2Nhbm5vdF9mb3JjZV9jb25zdF9tZW0gKHJ0eCB4KQorIHsKKy0gIGVudW0gcnR4X2NvZGUgY29kZSA9IEdFVF9DT0RFICh4KTsKKy0gIHJldHVybiBjb2RlID09IFNZTUJPTF9SRUYgfHwgY29kZSA9PSBMQUJFTF9SRUYgfHwgY29kZSA9PSBDT05TVDsKKysgIHJldHVybiBzeW1ib2xpY19vcGVyYW5kICh4LCBHRVRfTU9ERSAoeCkpOworIH0KKyAKKyAvKiBXZSBkbyBub3QgYWxsb3cgaW5kaXJlY3QgY2FsbHMgdG8gYmUgb3B0aW1pemVkIGludG8gc2libGluZyBjYWxscywgbm9yCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy40LzI0MC1wcjI1MzQzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8yNDAtcHIyNTM0My5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2Q2MzE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8yNDAtcHIyNTM0My5wYXRjaApAQCAtMCwwICsxLDI2IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8yNDAtcHIyNTM0My5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzY2X2FsbF9nY2M0My1wcjI1MzQzLnBhdGNoCitodHRwOi8vZ2NjLmdudS5vcmcvUFIyNTM0MworCitzbmlwZWQgZnJvbSBEZWJpYW4KKworMjAwOC0wNC0yNyAgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisKKwkqIGNvbmZpZy9ob3N0LWxpbnV4LmMgKFRSWV9FTVBUWV9WTV9TUEFDRSk6IERlZmluZSBmb3IgX19tYzY4MDAwX18uCisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2hvc3QtbGludXguYyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9ob3N0LWxpbnV4LmMKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2hvc3QtbGludXguYwkyMDA3LTA4LTAyIDEyOjQ5OjMxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL2hvc3QtbGludXguYwkyMDA5LTAxLTI3IDIyOjI1OjMxLjAwMDAwMDAwMCArMDEwMAorQEAgLTg0LDYgKzg0LDggQEAKKyAjIGRlZmluZSBUUllfRU1QVFlfVk1fU1BBQ0UJMHg4MDAwMDAwMDAwCisgI2VsaWYgZGVmaW5lZChfX3NwYXJjX18pCisgIyBkZWZpbmUgVFJZX0VNUFRZX1ZNX1NQQUNFCTB4NjAwMDAwMDAKKysjZWxpZiBkZWZpbmVkKF9fbWM2ODAwMF9fKQorKyMgZGVmaW5lIFRSWV9FTVBUWV9WTV9TUEFDRQkweDQwMDAwMDAwCisgI2Vsc2UKKyAjIGRlZmluZSBUUllfRU1QVFlfVk1fU1BBQ0UJMAorICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8yNTAtc2gtcHIyNDgzNi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMjUwLXNoLXByMjQ4MzYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUyOGIzNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMjUwLXNoLXByMjQ4MzYucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMjUwLXNoLXByMjQ4MzYucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby83NF9hbGxfc2gtcHIyNDgzNi5wYXRjaAoraHR0cDovL3NvdXJjZWZvcmdlLm5ldC9tYWlsYXJjaGl2ZS9mb3J1bS5waHA/dGhyZWFkX2lkPTg5NTkzMDQmZm9ydW1faWQ9NTM0OAoraHR0cDovL2djYy5nbnUub3JnL1BSMjQ4MzYKKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWd1cmUgZ2NjLTQuMy4zL2djYy9jb25maWd1cmUKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlndXJlCTIwMDktMDEtMjcgMjI6MTk6MTguMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWd1cmUJMjAwOS0wMS0yNyAyMjoyNTozMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMDY4OSw3ICsyMDY4OSw3IEBACisgCXRsc19maXJzdF9taW5vcj0xNAorIAl0bHNfYXNfb3B0PSItbTY0IC1BZXNhbWUgLS1mYXRhbC13YXJuaW5ncyIKKyAJOzsKKy0gIHNoLSotKiB8IHNoWzM0XS0qLSopCisrICBzaC0qLSogfCBzaFszNF0qLSotKikKKyAgICAgY29uZnRlc3Rfcz0nCisgCS5zZWN0aW9uICIudGRhdGEiLCJhd1QiLEBwcm9nYml0cworIGZvbzoJLmxvbmcJMjUKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYyBnY2MtNC4zLjMvZ2NjL2NvbmZpZ3VyZS5hYworLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWd1cmUuYWMJMjAwOS0wMS0yNyAyMjoxOToxOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZ3VyZS5hYwkyMDA5LTAxLTI3IDIyOjI1OjMzLjAwMDAwMDAwMCArMDEwMAorQEAgLTI1NTIsNyArMjU1Miw3IEBACisgCXRsc19maXJzdF9taW5vcj0xNAorIAl0bHNfYXNfb3B0PSItbTY0IC1BZXNhbWUgLS1mYXRhbC13YXJuaW5ncyIKKyAJOzsKKy0gIHNoLSotKiB8IHNoWzM0XS0qLSopCisrICBzaC0qLSogfCBzaFszNF0qLSotKikKKyAgICAgY29uZnRlc3Rfcz0nCisgCS5zZWN0aW9uICIudGRhdGEiLCJhd1QiLEBwcm9nYml0cworIGZvbzoJLmxvbmcJMjUKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMjYwLXVjbGliYy1jb25mLW5vdXBzdHJlYW0ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy40LzI2MC11Y2xpYmMtY29uZi1ub3Vwc3RyZWFtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNDYwMzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy40LzI2MC11Y2xpYmMtY29uZi1ub3Vwc3RyZWFtLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzI2MC11Y2xpYmMtY29uZi1ub3Vwc3RyZWFtLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS91Y2xpYmMvOTBfYWxsXzEwMy11Y2xpYmMtY29uZi1ub3Vwc3RyZWFtLnBhdGNoCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy5nY2MgZ2NjLTQuMy4zL2djYy9jb25maWcuZ2NjCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy5nY2MJMjAwOS0wMS0yNyAyMjoxOTozNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy5nY2MJMjAwOS0wMS0yNyAyMjoyNTozNS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMTQ2LDcgKzIxNDYsNyBAQAorICAgICAgICAgOzsKKyBzaC0qLWVsZiogfCBzaFsxMjM0NmxdKi0qLWVsZiogfCBzaCotKi1rYW9zKiB8IFwKKyBzaC0qLXN5bWJpYW5lbGYqIHwgc2hbMTIzNDZsXSotKi1zeW1iaWFuZWxmKiB8IFwKKy0gIHNoLSotbGludXgqIHwgc2hbMzQ2bGJlXSotKi1saW51eCogfCBcCisrICBzaCotKi1saW51eCogfCBzaFszNDZsYmVdKi0qLWxpbnV4KiB8IFwKKyAgIHNoLSotbmV0YnNkZWxmKiB8IHNobCotKi1uZXRic2RlbGYqIHwgc2g1LSotbmV0YnNkKiB8IHNoNWwqLSotbmV0YnNkKiB8IFwKKyAgICBzaDY0LSotbmV0YnNkKiB8IHNoNjRsKi0qLW5ldGJzZCopCisgCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gc2gvdC1zaCBzaC90LWVsZiIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMjcwLW1pc3NpbmctZXhlY2luZm9faC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMjcwLW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjM2ZjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8yNzAtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzI3MC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL3VjbGliYy85MF9hbGxfMzAxLW1pc3NpbmctZXhlY2luZm9faC5wYXRjaAorLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCBnY2MtNC4zLjMvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCistLS0gZ2NjLTQuMy4zLm9yaWcvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCTIwMDctMDQtMjMgMjM6MTA6MDkuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAkyMDA5LTAxLTI3IDIyOjI1OjM3LjAwMDAwMDAwMCArMDEwMAorQEAgLTUwMyw3ICs1MDMsNyBAQAorICNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX0dMSUJDX18pCisgIyBpbmNsdWRlIDxmZWF0dXJlcy5oPgorICMgaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxIHx8IF9fR0xJQkNfXyA+IDIpIFwKKy0gICAgICYmICFkZWZpbmVkKF9faWE2NF9fKQorKyAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pICYmICFkZWZpbmVkKF9fVUNMSUJDX18pCisgIyAgIGlmbmRlZiBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgICAgZGVmaW5lIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMjgwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMjgwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTg4NjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8yODAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzI4MC1jOTktY29tcGxleC11Z2x5LWhhY2sucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL3VjbGliYy85MF9hbGxfMzAzLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaAorLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYnN0ZGMrKy12My9jb25maWd1cmUgZ2NjLTQuMy4zL2xpYnN0ZGMrKy12My9jb25maWd1cmUKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJzdGRjKystdjMvY29uZmlndXJlCTIwMDgtMDctMDcgMjE6NDk6NTQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2xpYnN0ZGMrKy12My9jb25maWd1cmUJMjAwOS0wMS0yNyAyMjoyNTozOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zODkzNSw2ICszODkzNSw5IEBACisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaW5jbHVkZSA8Y29tcGxleC5oPgorKyNpZmRlZiBfX1VDTElCQ19fCisrI2Vycm9yIHVnbHkgaGFjayB0byBtYWtlIHN1cmUgY29uZmlndXJlIHRlc3QgZmFpbHMgaGVyZSBmb3IgY3Jvc3MgdW50aWwgdUNsaWJjIHN1cHBvcnRzIHRoZSBjb21wbGV4IGZ1bmNzCisrI2VuZGlmCisgaW50CisgbWFpbiAoKQorIHsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMjkwLWluZGV4X21hY3JvLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8yOTAtaW5kZXhfbWFjcm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JiODk5YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMjkwLWluZGV4X21hY3JvLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzI5MC1pbmRleF9tYWNyby5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvdWNsaWJjLzkwX2FsbF8zMDQtaW5kZXhfbWFjcm8ucGF0Y2gKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZSBnY2MtNC4zLjMvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQkyMDA4LTA3LTE1IDEyOjE0OjUxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQkyMDA5LTAxLTI3IDIyOjI1OjQxLjAwMDAwMDAwMCArMDEwMAorQEAgLTU5LDYgKzU5LDkgQEAKKyAjaW5jbHVkZSA8Yml0cy9ndGhyLmg+CisgI2luY2x1ZGUgPHRyMS9mdW5jdGlvbmFsPgorIAorKy8qIGNvcGUgdy8gaW5kZXggZGVmaW5lZCBhcyBtYWNybywgU3VTdjMgcHJvcG9zYWwgKi8KKysjdW5kZWYgaW5kZXgKKysKKyAjIGlmZGVmIF9fR0MKKyAjICAgZGVmaW5lIF9fR0NfQ09OU1QgY29uc3QKKyAjIGVsc2UKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmggZ2NjLTQuMy4zL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCistLS0gZ2NjLTQuMy4zLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgJMjAwNy0wNS0wNCAxNzowNjo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgJMjAwOS0wMS0yNyAyMjoyNTo0MS4wMDAwMDAwMDAgKzAxMDAKK0BAIC01NCw2ICs1NCw5IEBACisgI2luY2x1ZGUgPGV4dC9tZW1vcnk+IC8vIEZvciB1bmluaXRpYWxpemVkX2NvcHlfbgorICNpbmNsdWRlIDxleHQvbnVtZXJpYz4gLy8gRm9yIHBvd2VyCisgCisrLyogY29wZSB3LyBpbmRleCBkZWZpbmVkIGFzIG1hY3JvLCBTdVN2MyBwcm9wb3NhbCAqLworKyN1bmRlZiBpbmRleAorKworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisgCisgICB1c2luZyBzdGQ6OnNpemVfdDsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMzAwLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8zMDAtbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IyMGRhOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMzAwLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzMwMC1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvdWNsaWJjLzkwX2FsbF8zMDUtbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2gKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJtdWRmbGFwL21mLWhvb2tzMi5jIGdjYy00LjMuMy9saWJtdWRmbGFwL21mLWhvb2tzMi5jCistLS0gZ2NjLTQuMy4zLm9yaWcvbGlibXVkZmxhcC9tZi1ob29rczIuYwkyMDA1LTA5LTIzIDIzOjU4OjM5LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9saWJtdWRmbGFwL21mLWhvb2tzMi5jCTIwMDktMDEtMjcgMjI6MjU6NDUuMDAwMDAwMDAwICswMTAwCitAQCAtNDI3LDcgKzQyNyw3IEBACisgeworICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQocywgbiwgX19NRl9DSEVDS19XUklURSwgImJ6ZXJvIHJlZ2lvbiIpOworLSAgYnplcm8gKHMsIG4pOworKyAgbWVtc2V0IChzLCAwLCBuKTsKKyB9CisgCisgCitAQCAtNDM3LDcgKzQzNyw3IEBACisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzcmMsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjb3B5IHNyYyIpOworICAgTUZfVkFMSURBVEVfRVhURU5UKGRlc3QsIG4sIF9fTUZfQ0hFQ0tfV1JJVEUsICJiY29weSBkZXN0Iik7CistICBiY29weSAoc3JjLCBkZXN0LCBuKTsKKysgIG1lbW1vdmUgKGRlc3QsIHNyYywgbik7CisgfQorIAorIAorQEAgLTQ0Nyw3ICs0NDcsNyBAQAorICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQoczEsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjbXAgMXN0IGFyZyIpOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMyLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY21wIDJuZCBhcmciKTsKKy0gIHJldHVybiBiY21wIChzMSwgczIsIG4pOworKyAgcmV0dXJuIG1lbWNtcCAoczEsIHMyLCBuKTsKKyB9CisgCisgCitAQCAtNDU2LDcgKzQ1Niw3IEBACisgICBzaXplX3QgbiA9IHN0cmxlbiAocyk7CisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzLCBDTEFNUEFERChuLCAxKSwgX19NRl9DSEVDS19SRUFELCAiaW5kZXggcmVnaW9uIik7CistICByZXR1cm4gaW5kZXggKHMsIGMpOworKyAgcmV0dXJuIHN0cmNociAocywgYyk7CisgfQorIAorIAorQEAgLTQ2NSw3ICs0NjUsNyBAQAorICAgc2l6ZV90IG4gPSBzdHJsZW4gKHMpOworICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQocywgQ0xBTVBBREQobiwgMSksIF9fTUZfQ0hFQ0tfUkVBRCwgInJpbmRleCByZWdpb24iKTsKKy0gIHJldHVybiByaW5kZXggKHMsIGMpOworKyAgcmV0dXJuIHN0cnJjaHIgKHMsIGMpOworIH0KKyAKKyAvKiBYWFg6ICBzdHBjcHksIG1lbWNjcHkgKi8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMzEwLWFybS1zb2Z0ZmxvYXQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy40LzMxMC1hcm0tc29mdGZsb2F0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZGU0NWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy40LzMxMC1hcm0tc29mdGZsb2F0LnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzMxMC1hcm0tc29mdGZsb2F0LnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oIGdjYy00LjMuMy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMDctMTEtMDggMTQ6NDQ6MDkuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMDktMDEtMjcgMjI6MjU6NDcuMDAwMDAwMDAwICswMTAwCitAQCAtNjAsNyArNjAsNyBAQAorICAgICV7c2hhcmVkOi1sY30gXAorICAgICV7IXNoYXJlZDole3Byb2ZpbGU6LWxjX3B9JXshcHJvZmlsZTotbGN9fSIKKyAKKy0jZGVmaW5lIExJQkdDQ19TUEVDICIle21zb2Z0LWZsb2F0Oi1sZmxvYXR9ICV7bWZsb2F0LWFiaT1zb2Z0KjotbGZsb2F0fSAtbGdjYyIKKysjZGVmaW5lIExJQkdDQ19TUEVDICItbGdjYyIKKyAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisgCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvYXJtL3QtbGludXggZ2NjLTQuMy4zL2djYy9jb25maWcvYXJtL3QtbGludXgKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FybS90LWxpbnV4CTIwMDYtMTEtMDkgMjM6MTQ6MjcuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvYXJtL3QtbGludXgJMjAwOS0wMS0yNyAyMjoyNTo0Ny4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zLDcgKzMsMTIgQEAKKyBUQVJHRVRfTElCR0NDMl9DRkxBR1MgPSAtZm9taXQtZnJhbWUtcG9pbnRlciAtZlBJQworIAorIExJQjFBU01TUkMgPSBhcm0vbGliMWZ1bmNzLmFzbQorLUxJQjFBU01GVU5DUyA9IF91ZGl2c2kzIF9kaXZzaTMgX3Vtb2RzaTMgX21vZHNpMyBfZHZtZF9sbngKKytMSUIxQVNNRlVOQ1MgPSBfdWRpdnNpMyBfZGl2c2kzIF91bW9kc2kzIF9tb2RzaTMgX2R2bWRfdGxzIF9iYl9pbml0X2Z1bmMgXAorKwlfY2FsbF92aWFfclggX2ludGVyd29ya19jYWxsX3ZpYV9yWCBcCisrCV9sc2hyZGkzIF9hc2hyZGkzIF9hc2hsZGkzIFwKKysJX25lZ2RmMiBfYWRkc3ViZGYzIF9tdWxkaXZkZjMgX2NtcGRmMiBfdW5vcmRkZjIgX2ZpeGRmc2kgX2ZpeHVuc2Rmc2kgXAorKwlfdHJ1bmNkZnNmMiBfbmVnc2YyIF9hZGRzdWJzZjMgX211bGRpdnNmMyBfY21wc2YyIF91bm9yZHNmMiBcCisrCV9maXhzZnNpIF9maXh1bnNzZnNpIF9mbG9hdGRpZGYgX2Zsb2F0ZGlzZiBfZmxvYXR1bmRpZGYgX2Zsb2F0dW5kaXNmCisgCisgIyBNVUxUSUxJQl9PUFRJT05TID0gbWhhcmQtZmxvYXQvbXNvZnQtZmxvYXQKKyAjIE1VTFRJTElCX0RJUk5BTUVTID0gaGFyZC1mbG9hdCBzb2Z0LWZsb2F0CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy40LzMyMC1hbHBoYS1zaWduYWxfaC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMzIwLWFscGhhLXNpZ25hbF9oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNGRmM2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy40LzMyMC1hbHBoYS1zaWduYWxfaC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8zMjAtYWxwaGEtc2lnbmFsX2gucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC11bndpbmQuaCBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC11bndpbmQuaAorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvYWxwaGEvbGludXgtdW53aW5kLmgJMjAwNi0xMC0yNiAyMTozMTowOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC11bndpbmQuaAkyMDA5LTAxLTI3IDIyOjI1OjQ5LjAwMDAwMDAwMCArMDEwMAorQEAgLTI5LDYgKzI5LDkgQEAKKyAvKiBEbyBjb2RlIHJlYWRpbmcgdG8gaWRlbnRpZnkgYSBzaWduYWwgZnJhbWUsIGFuZCBzZXQgdGhlIGZyYW1lCisgICAgc3RhdGUgZGF0YSBhcHByb3ByaWF0ZWx5LiAgU2VlIHVud2luZC1kdzIuYyBmb3IgdGhlIHN0cnVjdHMuICAqLworIAorKy8qIERvbid0IHVzZSB0aGlzIGlmIGluaGliaXRfbGliYyBpcyBzZXQKKysgICBUaGUgYnVpbGQgZm9yIHRoaXMgdGFyZ2V0IHdpbGwgZmFpbCB0cnlpbmcgdG8gaW5jbHVkZSBtaXNzaW5nIGhlYWRlcnMgKi8KKysjaWZuZGVmIGluaGliaXRfbGliYworICNpbmNsdWRlIDxzaWduYWwuaD4KKyAjaW5jbHVkZSA8c3lzL3Vjb250ZXh0Lmg+CisgCitAQCAtODAsMyArODMsNCBAQAorICAgZnMtPnJldGFkZHJfY29sdW1uID0gNjQ7CisgICByZXR1cm4gX1VSQ19OT19SRUFTT047CisgfQorKyNlbmRpZiAvKiBpbmhpYml0X2xpYmMgKi8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMzMwLXVud2luZC1mb3ItdUNsaWJjLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8zMzAtdW53aW5kLWZvci11Q2xpYmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM5N2MyZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMzMwLXVud2luZC1mb3ItdUNsaWJjLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzMzMC11bndpbmQtZm9yLXVDbGliYy5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL3QtbGludXgtdWNsaWJjIGdjYy00LjMuMy9nY2MvY29uZmlnL3QtbGludXgtdWNsaWJjCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy90LWxpbnV4LXVjbGliYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL3QtbGludXgtdWNsaWJjCTIwMDktMDEtMjcgMjI6Mjg6NTMuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDUgQEAKKysjIFJlbW92ZSBnbGliYyBzcGVjaWZpYyBmaWxlcyBhZGRlZCBpbiB0LWxpbnV4CisrU0hMSUJfTUFQRklMRVMgOj0gJChmaWx0ZXItb3V0ICQoc3JjZGlyKS9jb25maWcvbGliZ2NjLWdsaWJjLnZlciwgJChTSExJQl9NQVBGSUxFUykpCisrCisrIyBVc2UgdW53aW5kLWR3Mi1mZGUgaW5zdGVhZCBvZiB1bndpbmQtZHcyLWZkZS1nbGliYworK0xJQjJBRERFSCA6PSAkKHN1YnN0IHVud2luZC1kdzItZmRlLWdsaWJjLmMsdW53aW5kLWR3Mi1mZGUuYywkKExJQjJBRERFSCkpCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcuZ2NjIGdjYy00LjMuMy9nY2MvY29uZmlnLmdjYworLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcuZ2NjCTIwMDktMDEtMjcgMjI6MjU6MzcuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcuZ2NjCTIwMDktMDEtMjcgMjI6Mjg6NTMuMDAwMDAwMDAwICswMTAwCitAQCAtMjY0OCw2ICsyNjQ4LDEyIEBACisgCTs7CisgZXNhYworIAorKyMgUmF0aGVyIHRoYW4gaG9vayBpbnRvIGVhY2ggdGFyZ2V0LCBqdXN0IGRvIGl0IGFmdGVyIGFsbCB0aGUgbGludXgKKysjIHRhcmdldHMgaGF2ZSBiZWVuIHByb2Nlc3NlZAorK2Nhc2UgJHt0YXJnZXR9IGluCisrICAqLWxpbnV4LXVjbGliYyopIHRtX2RlZmluZXM9IiR7dG1fZGVmaW5lc30gVVNFX1VDTElCQyIgOyB0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IHQtbGludXgtdWNsaWJjIjs7CisrZXNhYworKworIGNhc2UgJHt0YXJnZXR9IGluCisgaVszNDU2N104Ni0qLWxpbnV4KmFvdXQqIHwgaVszNDU2N104Ni0qLWxpbnV4KmxpYmMxKQorIAl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IGkzODYvdC1nbW1fbWFsbG9jIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8zNDAtbWFrZS1tbm8tc3BlLXdvcmstYXMtZXhwZWN0ZWQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy40LzM0MC1tYWtlLW1uby1zcGUtd29yay1hcy1leHBlY3RlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDJkMjAzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8zNDAtbWFrZS1tbm8tc3BlLXdvcmstYXMtZXhwZWN0ZWQucGF0Y2gKQEAgLTAsMCArMSw5MCBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMzQwLW1ha2UtbW5vLXNwZS13b3JrLWFzLWV4cGVjdGVkLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorMjAwOC0wNC0wMyAgTmF0aGFuIEZyb3lkICA8ZnJveWRuakBjb2Rlc291cmNlcnkuY29tPgorICAgICAgICAgICAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AY29kZXNvdXJjZXJ5LmNvbT4KKworICAgICAgICAqIGNvbmZpZy9yczYwMDAvcnM2MDAwLm9wdCAobXNwZSk6IFJlbW92ZSBWYXIgcHJvcGVydHkuCisgICAgICAgIChtaXNlbCk6IExpa2V3aXNlLgorICAgICAgICAqIGNvbmZpZy9yczYwMDAvcnM2MDAwLmggKHJzNjAwMF9zcGUpOiBEZWNsYXJlLgorICAgICAgICAocnM2MDAwX2lzZWwpOiBMaWtld2lzZS4KKyAgICAgICAgKiBjb25maWcvcnM2MDAwL3JzNjAwMC5jIChyczYwMDBfc3BlKTogTmV3IHZhcmlhYmxlLgorICAgICAgICAocnM2MDAwX2lzZWwpOiBOZXcgdmFyaWFibGUuCisgICAgICAgIChyczYwMDBfaGFuZGxlX29wdGlvbik6IEhhbmRsZSBPUFRfbXNwZSBhbmQgT1BUX21pc2VsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuYyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmMKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuYwkyMDA4LTExLTE4IDIzOjA3OjU4LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuYwkyMDA5LTAxLTI3IDIyOjI4OjU1LjAwMDAwMDAwMCArMDEwMAorQEAgLTE3NCw5ICsxNzQsMTUgQEAKKyAvKiBOb256ZXJvIHRvIHVzZSBBbHRpVmVjIEFCSS4gICovCisgaW50IHJzNjAwMF9hbHRpdmVjX2FiaTsKKyAKKysvKiBOb256ZXJvIGlmIHdlIHdhbnQgU1BFIFNJTUQgaW5zdHJ1Y3Rpb25zLiAgKi8KKytpbnQgcnM2MDAwX3NwZTsKKysKKyAvKiBOb256ZXJvIGlmIHdlIHdhbnQgU1BFIEFCSSBleHRlbnNpb25zLiAgKi8KKyBpbnQgcnM2MDAwX3NwZV9hYmk7CisgCisrLyogTm9uemVybyB0byB1c2UgaXNlbCBpbnN0cnVjdGlvbnMuICAqLworK2ludCByczYwMDBfaXNlbDsKKysKKyAvKiBOb256ZXJvIGlmIGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbnMgYXJlIGRvbmUgaW4gdGhlIEdQUnMuICAqLworIGludCByczYwMDBfZmxvYXRfZ3BycyA9IDA7CisgCitAQCAtMjE0NCwxMSArMjE1MCwyMSBAQAorICAgICAgIHJzNjAwMF9wYXJzZV95ZXNfbm9fb3B0aW9uICgidnJzYXZlIiwgYXJnLCAmKFRBUkdFVF9BTFRJVkVDX1ZSU0FWRSkpOworICAgICAgIGJyZWFrOworIAorKyAgICBjYXNlIE9QVF9taXNlbDoKKysgICAgICByczYwMDBfZXhwbGljaXRfb3B0aW9ucy5pc2VsID0gdHJ1ZTsKKysgICAgICByczYwMDBfaXNlbCA9IHZhbHVlOworKyAgICAgIGJyZWFrOworKworICAgICBjYXNlIE9QVF9taXNlbF86CisgICAgICAgcnM2MDAwX2V4cGxpY2l0X29wdGlvbnMuaXNlbCA9IHRydWU7CisgICAgICAgcnM2MDAwX3BhcnNlX3llc19ub19vcHRpb24gKCJpc2VsIiwgYXJnLCAmKHJzNjAwMF9pc2VsKSk7CisgICAgICAgYnJlYWs7CisgCisrICAgIGNhc2UgT1BUX21zcGU6CisrICAgICAgcnM2MDAwX2V4cGxpY2l0X29wdGlvbnMuc3BlID0gdHJ1ZTsKKysgICAgICByczYwMDBfc3BlID0gdmFsdWU7CisrICAgICAgYnJlYWs7CisrCisgICAgIGNhc2UgT1BUX21zcGVfOgorICAgICAgIHJzNjAwMF9leHBsaWNpdF9vcHRpb25zLnNwZSA9IHRydWU7CisgICAgICAgcnM2MDAwX3BhcnNlX3llc19ub19vcHRpb24gKCJzcGUiLCBhcmcsICYocnM2MDAwX3NwZSkpOworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuaCBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmgKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuaAkyMDA4LTAxLTI2IDE4OjE4OjM1LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuaAkyMDA5LTAxLTI3IDIyOjI4OjU1LjAwMDAwMDAwMCArMDEwMAorQEAgLTM0OSw2ICszNDksOCBAQAorIGV4dGVybiBpbnQgcnM2MDAwX2llZWVxdWFkOworIGV4dGVybiBpbnQgcnM2MDAwX2FsdGl2ZWNfYWJpOworIGV4dGVybiBpbnQgcnM2MDAwX3NwZV9hYmk7CisrZXh0ZXJuIGludCByczYwMDBfc3BlOworK2V4dGVybiBpbnQgcnM2MDAwX2lzZWw7CisgZXh0ZXJuIGludCByczYwMDBfZmxvYXRfZ3ByczsKKyBleHRlcm4gaW50IHJzNjAwMF9hbGlnbm1lbnRfZmxhZ3M7CisgZXh0ZXJuIGNvbnN0IGNoYXIgKnJzNjAwMF9zY2hlZF9pbnNlcnRfbm9wc19zdHI7CitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5vcHQgZ2NjLTQuMy4zL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5vcHQKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAub3B0CTIwMDctMTAtMzEgMDg6NTY6MDEuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5vcHQJMjAwOS0wMS0yNyAyMjoyODo1NS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xOTAsNyArMTkwLDcgQEAKKyAtbXZyc2F2ZT15ZXMvbm8JRGVwcmVjYXRlZCBvcHRpb24uICBVc2UgLW12cnNhdmUvLW1uby12cnNhdmUgaW5zdGVhZAorIAorIG1pc2VsCistVGFyZ2V0IFZhcihyczYwMDBfaXNlbCkKKytUYXJnZXQKKyBHZW5lcmF0ZSBpc2VsIGluc3RydWN0aW9ucworIAorIG1pc2VsPQorQEAgLTE5OCw3ICsxOTgsNyBAQAorIC1taXNlbD15ZXMvbm8JRGVwcmVjYXRlZCBvcHRpb24uICBVc2UgLW1pc2VsLy1tbm8taXNlbCBpbnN0ZWFkCisgCisgbXNwZQorLVRhcmdldCBWYXIocnM2MDAwX3NwZSkKKytUYXJnZXQKKyBHZW5lcmF0ZSBTUEUgU0lNRCBpbnN0cnVjdGlvbnMgb24gRTUwMAorIAorIG1wYWlyZWQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMzUwLXNoLXdpdGhvdXQtaGVhZGVycy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMzUwLXNoLXdpdGhvdXQtaGVhZGVycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmI4NjBkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8zNTAtc2gtd2l0aG91dC1oZWFkZXJzLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzM1MC1zaC13aXRob3V0LWhlYWRlcnMucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPbiAyMDA4MTAxMSwgS2hlbSBSQUogd3JpdGVzOgorIFlvdSBoYXZlIHRvIGJhciBnY2MgdHJ5aW5nIHRvIGJ1aWxkIHVud2luZGluZyBhdCBzdGFnZSAxLiBUcnkgdGhlCisgYXR0YWNoZWQgcGF0Y2ggYW5kIHNlZSBpZiBpdCBoZWxwcy4KKworIGdjYy9jb25maWcvc2gvbGludXgtdW53aW5kLmggfCAgICAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvc2gvbGludXgtdW53aW5kLmggZ2NjLTQuMy4zL2djYy9jb25maWcvc2gvbGludXgtdW53aW5kLmgKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL3NoL2xpbnV4LXVud2luZC5oCTIwMDctMDktMTIgMDg6NTk6MDYuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvc2gvbGludXgtdW53aW5kLmgJMjAwOS0wMS0yNyAyMjoyODo1Ny4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNiw2ICsyNiw4IEBACisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgCisrI2lmbmRlZiBpbmhpYml0X2xpYmMKKysKKyAvKiBEbyBjb2RlIHJlYWRpbmcgdG8gaWRlbnRpZnkgYSBzaWduYWwgZnJhbWUsIGFuZCBzZXQgdGhlIGZyYW1lCisgICAgc3RhdGUgZGF0YSBhcHByb3ByaWF0ZWx5LiAgU2VlIHVud2luZC1kdzIuYyBmb3IgdGhlIHN0cnVjdHMuICAqLworIAorQEAgLTI1MSwzICsyNTMsNCBAQAorICAgcmV0dXJuIF9VUkNfTk9fUkVBU09OOworIH0KKyAjZW5kaWYgLyogZGVmaW5lZCAoX19TSDVfXykgKi8KKysjZW5kaWYgLyogaWZuZGVmIGluaGliaXRfbGliYyAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8zODAtcHIzNzQzNi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMzgwLXByMzc0MzYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlhMDE2ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMzgwLXByMzc0MzYucGF0Y2gKQEAgLTAsMCArMSw4NiBAQAorZ2NjIHN2biAxNDI3Nzg6CisKK1BSIHRhcmdldC8zNzQzNgorKiBhcm0uYyAoYXJtX2xlZ2l0aW1hdGVfaW5kZXgpOiBPbmx5IGFjY2VwdCBhZGRyZXNzZXMgdGhhdCBhcmUgaW4KK2Nhbm9uaWNhbCBmb3JtLgorKiBwcmVkaWNhdGVzLm1kIChhcm1fcmVnX29yX2V4dGVuZHFpc2lfbWVtX29wKTogTmV3IHByZWRpY2F0ZS4KKyogYXJtLm1kIChleHRlbmRxaWhpMik6IFVzZSBhcm1fcmVnX29yX2V4dGVuZHFpc2lfbWVtX29wIHByZWRpY2F0ZQorZm9yIG9wZXJhbmQxLgorKGV4dGVuZHFpc2kyKTogTGlrZXdpc2UuCisoYXJtX2V4dGVuZHFpc2ksIGFybV9leHRlbmRxaXNpX3Y2KTogVXNlIGFybV9leHRlbmRxaXNpX21lbV9vcAorcHJlZGljYXRlIGZvciBvcGVyYW5kMS4KKworZGlmZiAtTnVyYSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FybS9hcm0uYyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hcm0vYXJtLmMKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FybS9hcm0uYwkyMDA4LTA2LTExIDA3OjUyOjU1LjAwMDAwMDAwMCAtMDMwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL2FybS9hcm0uYwkyMDA5LTA1LTIxIDE2OjA2OjQ1LjAwMDAwMDAwMCAtMDMwMAorQEAgLTM3NjksNiArMzc2OSw3IEBACisgICAgICAgcnR4IHhvcDEgPSBYRVhQICh4LCAxKTsKKyAKKyAgICAgICByZXR1cm4gKChhcm1fYWRkcmVzc19yZWdpc3Rlcl9ydHhfcCAoeG9wMCwgc3RyaWN0X3ApCisrCSAgICAgICAmJiBHRVRfQ09ERSh4b3AxKSA9PSBDT05TVF9JTlQKKyAJICAgICAgICYmIGFybV9sZWdpdGltYXRlX2luZGV4X3AgKG1vZGUsIHhvcDEsIG91dGVyLCBzdHJpY3RfcCkpCisgCSAgICAgIHx8IChhcm1fYWRkcmVzc19yZWdpc3Rlcl9ydHhfcCAoeG9wMSwgc3RyaWN0X3ApCisgCQkgICYmIGFybV9sZWdpdGltYXRlX2luZGV4X3AgKG1vZGUsIHhvcDAsIG91dGVyLCBzdHJpY3RfcCkpKTsKK2RpZmYgLU51cmEgZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hcm0vYXJtLm1kIGdjYy00LjMuMy9nY2MvY29uZmlnL2FybS9hcm0ubWQKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FybS9hcm0ubWQJMjAwNy0wOS0wNCAwMTo0NDo0Ny4wMDAwMDAwMDAgLTAzMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hcm0vYXJtLm1kCTIwMDktMDUtMjEgMTY6MDY6NDUuMDAwMDAwMDAwIC0wMzAwCitAQCAtNDE5OSw3ICs0MTk5LDcgQEAKKyAKKyAoZGVmaW5lX2V4cGFuZCAiZXh0ZW5kcWloaTIiCisgICBbKHNldCAobWF0Y2hfZHVwIDIpCistCShhc2hpZnQ6U0kgKG1hdGNoX29wZXJhbmQ6UUkgMSAiZ2VuZXJhbF9vcGVyYW5kIiAiIikKKysJKGFzaGlmdDpTSSAobWF0Y2hfb3BlcmFuZDpRSSAxICJhcm1fcmVnX29yX2V4dGVuZHFpc2lfbWVtX29wIiAiIikKKyAJCSAgIChjb25zdF9pbnQgMjQpKSkKKyAgICAoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAgInNfcmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisgCShhc2hpZnRydDpTSSAobWF0Y2hfZHVwIDIpCitAQCAtNDIyNCw3ICs0MjI0LDcgQEAKKyAKKyAoZGVmaW5lX2luc24gIiphcm1fZXh0ZW5kcWloaV9pbnNuIgorICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SEkgMCAic19yZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorLQkoc2lnbl9leHRlbmQ6SEkgKG1hdGNoX29wZXJhbmQ6UUkgMSAibWVtb3J5X29wZXJhbmQiICJVcSIpKSldCisrCShzaWduX2V4dGVuZDpISSAobWF0Y2hfb3BlcmFuZDpRSSAxICJhcm1fZXh0ZW5kcWlzaV9tZW1fb3AiICJVcSIpKSldCisgICAiVEFSR0VUX0FSTSAmJiBhcm1fYXJjaDQiCisgICAibGRyJShzYiUpXFx0JTAsICUxIgorICAgWyhzZXRfYXR0ciAidHlwZSIgImxvYWRfYnl0ZSIpCitAQCAtNDIzNSw3ICs0MjM1LDcgQEAKKyAKKyAoZGVmaW5lX2V4cGFuZCAiZXh0ZW5kcWlzaTIiCisgICBbKHNldCAobWF0Y2hfZHVwIDIpCistCShhc2hpZnQ6U0kgKG1hdGNoX29wZXJhbmQ6UUkgMSAiZ2VuZXJhbF9vcGVyYW5kIiAiIikKKysJKGFzaGlmdDpTSSAobWF0Y2hfb3BlcmFuZDpRSSAxICJhcm1fcmVnX29yX2V4dGVuZHFpc2lfbWVtX29wIiAiIikKKyAJCSAgIChjb25zdF9pbnQgMjQpKSkKKyAgICAoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInNfcmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisgCShhc2hpZnRydDpTSSAobWF0Y2hfZHVwIDIpCitAQCAtNDI2Nyw3ICs0MjY3LDcgQEAKKyAKKyAoZGVmaW5lX2luc24gIiphcm1fZXh0ZW5kcWlzaSIKKyAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInNfcmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKy0JKHNpZ25fZXh0ZW5kOlNJIChtYXRjaF9vcGVyYW5kOlFJIDEgIm1lbW9yeV9vcGVyYW5kIiAiVXEiKSkpXQorKwkoc2lnbl9leHRlbmQ6U0kgKG1hdGNoX29wZXJhbmQ6UUkgMSAiYXJtX2V4dGVuZHFpc2lfbWVtX29wIiAiVXEiKSkpXQorICAgIlRBUkdFVF9BUk0gJiYgYXJtX2FyY2g0ICYmICFhcm1fYXJjaDYiCisgICAibGRyJShzYiUpXFx0JTAsICUxIgorICAgWyhzZXRfYXR0ciAidHlwZSIgImxvYWRfYnl0ZSIpCitAQCAtNDI3OCw3ICs0Mjc4LDggQEAKKyAKKyAoZGVmaW5lX2luc24gIiphcm1fZXh0ZW5kcWlzaV92NiIKKyAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInNfcmVnaXN0ZXJfb3BlcmFuZCIgIj1yLHIiKQorLQkoc2lnbl9leHRlbmQ6U0kgKG1hdGNoX29wZXJhbmQ6UUkgMSAibm9uaW1tZWRpYXRlX29wZXJhbmQiICJyLFVxIikpKV0KKysJKHNpZ25fZXh0ZW5kOlNJCisrCSAobWF0Y2hfb3BlcmFuZDpRSSAxICJhcm1fcmVnX29yX2V4dGVuZHFpc2lfbWVtX29wIiAicixVcSIpKSldCisgICAiVEFSR0VUX0FSTSAmJiBhcm1fYXJjaDYiCisgICAiQAorICAgIHN4dGIlP1xcdCUwLCAlMQorZGlmZiAtTnVyYSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FybS9wcmVkaWNhdGVzLm1kIGdjYy00LjMuMy9nY2MvY29uZmlnL2FybS9wcmVkaWNhdGVzLm1kCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hcm0vcHJlZGljYXRlcy5tZAkyMDA3LTA4LTAyIDA3OjQ5OjMxLjAwMDAwMDAwMCAtMDMwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL2FybS9wcmVkaWNhdGVzLm1kCTIwMDktMDUtMjEgMTY6MDY6NDUuMDAwMDAwMDAwIC0wMzAwCitAQCAtMjM0LDYgKzIzNCwxMCBAQAorICAgICAgICAobWF0Y2hfdGVzdCAiYXJtX2xlZ2l0aW1hdGVfYWRkcmVzc19wIChtb2RlLCBYRVhQIChvcCwgMCksIFNJR05fRVhURU5ELAorIAkJCQkJICAgICAgMCkiKSkpCisgCisrKGRlZmluZV9zcGVjaWFsX3ByZWRpY2F0ZSAiYXJtX3JlZ19vcl9leHRlbmRxaXNpX21lbV9vcCIKKysgIChpb3IgKG1hdGNoX29wZXJhbmQgMCAiYXJtX2V4dGVuZHFpc2lfbWVtX29wIikKKysgICAgICAgKG1hdGNoX29wZXJhbmQgMCAic19yZWdpc3Rlcl9vcGVyYW5kIikpKQorKworIChkZWZpbmVfcHJlZGljYXRlICJwb3dlcl9vZl90d29fb3BlcmFuZCIKKyAgIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQorIHsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMzkwLXVuYnJlYWstYXJtdjR0LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC8zOTAtdW5icmVhay1hcm12NHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYxNGUwZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvMzkwLXVuYnJlYWstYXJtdjR0LnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKKy0tLSBnY2MtNC4zLjIub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgJMjAwOS0wOS0wOCAyMzo0Njo0NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCTIwMDktMDktMDggMjM6NDY6NTEuMDAwMDAwMDAwICswMjAwCitAQCAtNDQsNyArNDQsNyBAQAorICAgIFRoZSBBUk0xMFRETUkgY29yZSBpcyB0aGUgZGVmYXVsdCBmb3IgYXJtdjV0LCBzbyBzZXQKKyAgICBTVUJUQVJHRVRfQ1BVX0RFRkFVTFQgdG8gYWNoaWV2ZSB0aGlzLiAgKi8KKyAjdW5kZWYgIFNVQlRBUkdFVF9DUFVfREVGQVVMVAorLSNkZWZpbmUgU1VCVEFSR0VUX0NQVV9ERUZBVUxUIFRBUkdFVF9DUFVfYXJtMTB0ZG1pCisrI2RlZmluZSBTVUJUQVJHRVRfQ1BVX0RFRkFVTFQgVEFSR0VUX0NQVV9hcm05dGRtaQorIAorIC8qIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQgaXMgc2V0IGluCisgICAgY29uZmlnLmdjYyBmb3IgYmlnIGVuZGlhbiBjb25maWd1cmF0aW9ucy4gICovCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy40LzQwMC1lY2p4LWhvc3QtY2MucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy40LzQwMC1lY2p4LWhvc3QtY2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkzMDY5YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjQvNDAwLWVjangtaG9zdC1jYy5wYXRjaApAQCAtMCwwICsxLDEzIEBACitkaWZmIC11ciBnY2MtNC4zLjQtb3JpZy9saWJqYXZhL01ha2VmaWxlLmluIGdjYy00LjMuNC9saWJqYXZhL01ha2VmaWxlLmluCistLS0gZ2NjLTQuMy40LW9yaWcvbGliamF2YS9NYWtlZmlsZS5pbgkyMDA5LTA4LTA0IDA0OjEyOjI3LjAwMDAwMDAwMCAtMDcwMAorKysrIGdjYy00LjMuNC9saWJqYXZhL01ha2VmaWxlLmluCTIwMDktMDktMjMgMjI6MDM6MTUuNzUwOTUxNDgzIC0wNzAwCitAQCAtODg3NCw2ICs4ODc0LDkgQEAKKyBlY2p4JChFWEVFWFQpOiAkKGVjanhfT0JKRUNUUykgJChlY2p4X0RFUEVOREVOQ0lFUykgCisgCUBybSAtZiBlY2p4JChFWEVFWFQpCisgCSQoZWNqeF9MSU5LKSAkKGVjanhfTERGTEFHUykgJChlY2p4X09CSkVDVFMpICQoZWNqeF9MREFERCkgJChMSUJTKQorK2VjanguJChPQkpFWFQpOiAkKGVjanhfU09VUkNFUykKKysJQHJtIC1mIGVjanguJChPQkpFWFQpCisrCSQoQ0NfRk9SX0JVSUxEKSAkKEJVSUxEX0NGTEFHUykgLWMgLW8gJEAgJDwKKyBnYXBwbGV0dmlld2VyJChFWEVFWFQpOiAkKGdhcHBsZXR2aWV3ZXJfT0JKRUNUUykgJChnYXBwbGV0dmlld2VyX0RFUEVOREVOQ0lFUykgCisgCUBybSAtZiBnYXBwbGV0dmlld2VyJChFWEVFWFQpCisgCSQoZ2FwcGxldHZpZXdlcl9MSU5LKSAkKGdhcHBsZXR2aWV3ZXJfTERGTEFHUykgJChnYXBwbGV0dmlld2VyX09CSkVDVFMpICQoZ2FwcGxldHZpZXdlcl9MREFERCkgJChMSUJTKQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC80MTAtbGliZ2NjX2VoLmEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy40LzQxMC1saWJnY2NfZWguYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTQxOThhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNC80MTAtbGliZ2NjX2VoLmEucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorSGlnaGx5IGluc3BpcmVkIGJ5OgorICBodHRwOi8vbGFuZGxleS5uZXQvaGcvYWJvcmlnaW5hbC9maWxlLzdlMDc0N2E2NjVhYi9zb3VyY2VzL3BhdGNoZXMvZ2NjLWNvcmUtbGliZ2NjZWgucGF0Y2gKKworZGlmZiAtZHVyTiBnY2MtNC4zLjIub3JpZy8vbGliZ2NjL01ha2VmaWxlLmluIGdjYy00LjMuMi9saWJnY2MvTWFrZWZpbGUuaW4KKy0tLSBnY2MtNC4zLjIub3JpZy8vbGliZ2NjL01ha2VmaWxlLmluCTIwMDgtMDYtMTcgMTE6MzI6MzQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4yL2xpYmdjYy9NYWtlZmlsZS5pbgkyMDExLTA5LTAyIDEyOjI3OjM5LjI5NjUzODk1NSArMDIwMAorQEAgLTcwNSw4ICs3MDUsOSBAQAorIGxpYmdjY19zJChTSExJQl9FWFQpOiBsaWJ1bndpbmQkKFNITElCX0VYVCkKKyBlbmRpZgorIAorK2FsbDogbGliZ2NjX2VoLmEKKyBpZmVxICgkKGVuYWJsZV9zaGFyZWQpLHllcykKKy1hbGw6IGxpYmdjY19laC5hIGxpYmdjY19zJChTSExJQl9FWFQpCisrYWxsOiBsaWJnY2NfcyQoU0hMSUJfRVhUKQorIGlmbmVxICgkKExJQlVOV0lORCksKQorIGFsbDogbGlidW53aW5kJChTSExJQl9FWFQpCisgZW5kaWYKK0BAIC04NzUsMTAgKzg3Niw2IEBACisgaW5zdGFsbC1zaGFyZWQ6CisgCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQoaW5zdF9saWJkaXIpCisgCistCSQoSU5TVEFMTF9EQVRBKSBsaWJnY2NfZWguYSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvCistCWNobW9kIDY0NCAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKy0JJChSQU5MSUIpICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY2NfZWguYQorLQorIAkkKHN1YnN0IEBtdWx0aWxpYl9kaXJALCQoTVVMVElESVIpLCQoc3Vic3QgXAorIAkJQHNobGliX2Jhc2VfbmFtZUAsbGliZ2NjX3MsJChzdWJzdCBcCisgCQlAc2hsaWJfc2xpYmRpcl9xdWFsQCwkKE1VTFRJT1NTVUJESVIpLCQoU0hMSUJfSU5TVEFMTCkpKSkKK0BAIC04OTMsNiArODkwLDEwIEBACisgCWNobW9kIDY0NCAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2Nvdi5hCisgCSQoUkFOTElCKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2Nvdi5hCisgCisrCSQoSU5TVEFMTF9EQVRBKSBsaWJnY2NfZWguYSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvCisrCWNobW9kIDY0NCAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKysJJChSQU5MSUIpICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY2NfZWguYQorKworIAlwYXJ0cz0iJChJTlNUQUxMX1BBUlRTKSI7CQkJCVwKKyAJZm9yIGZpbGUgaW4gJCRwYXJ0czsgZG8JCQkJCVwKKyAJICBybSAtZiAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvJCRmaWxlOwkJXApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNS8xMDAtYWxwaGEtbWllZWUtZGVmYXVsdC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMTAwLWFscGhhLW1pZWVlLWRlZmF1bHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ1MDE5ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMTAwLWFscGhhLW1pZWVlLWRlZmF1bHQucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMTAwLWFscGhhLW1pZWVlLWRlZmF1bHQucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby8wMF9hbGxfZ2NjLTQuMS1hbHBoYS1taWVlZS1kZWZhdWx0LnBhdGNoCitTZXQgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb24gYWxwaGEgdG8gdXNlIC1taWVlZSBzaW5jZSB0aGUgbGFyZ2UgbWFqb3JpdHkgb2YKK3RpbWUgd2Ugd2FudCB0aGlzIChiYWQvd2VpcmQgdGhpbmdzIGNhbiBoYXBwZW4gd2l0aCBwYWNrYWdlcyBidWlsdCB3aXRob3V0CistbWllZWUpLgorCitUbyBzYXRpc2Z5IHRob3NlIHBlb3BsZSB3aG8gbWF5IG5vdCB3YW50IC1taWVlZSBmb3JjZWQgb24gdGhlbSBhbGwgdGhlIHRpbWUsCit3ZSBhbHNvIHByb3ZpZGUgLW1uby1pZWVlLgorCitQYXRjaCBieSBNaWtlIEZyeXNpbmdlciA8dmFwaWVyQGdlbnRvby5vcmc+CisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FscGhhL2FscGhhLmggZ2NjLTQuMy4zL2djYy9jb25maWcvYWxwaGEvYWxwaGEuaAorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvYWxwaGEvYWxwaGEuaAkyMDA3LTEyLTA2IDE0OjI1OjM3LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL2FscGhhL2FscGhhLmgJMjAwOS0wMS0yNyAyMjoxOTowMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC05NSw2ICs5NSw4IEBACisgICB3aGlsZSAoMCkKKyAjZW5kaWYKKyAKKysjZGVmaW5lIENQUF9TUEVDICIleyFuby1pZWVlOi1taWVlZX0iCisrCisgI2RlZmluZSBXT1JEX1NXSVRDSF9UQUtFU19BUkcoU1RSKQkJXAorICAoIXN0cmNtcCAoU1RSLCAicnBhdGgiKSB8fCBERUZBVUxUX1dPUkRfU1dJVENIX1RBS0VTX0FSRyhTVFIpKQorIAorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FscGhhL2FscGhhLm9wdCBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5vcHQKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FscGhhL2FscGhhLm9wdAkyMDA3LTA4LTAyIDEyOjQ5OjMxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL2FscGhhL2FscGhhLm9wdAkyMDA5LTAxLTI3IDIyOjE5OjAyLjAwMDAwMDAwMCArMDEwMAorQEAgLTM5LDcgKzM5LDcgQEAKKyBSZXF1ZXN0IElFRUUtY29uZm9ybWFudCBtYXRoIGxpYnJhcnkgcm91dGluZXMgKE9TRi8xKQorIAorIG1pZWVlCistVGFyZ2V0IFJlcG9ydCBSZWplY3ROZWdhdGl2ZSBNYXNrKElFRUUpCisrVGFyZ2V0IFJlcG9ydCBNYXNrKElFRUUpCisgRW1pdCBJRUVFLWNvbmZvcm1hbnQgY29kZSwgd2l0aG91dCBpbmV4YWN0IGV4Y2VwdGlvbnMKKyAKKyBtaWVlZS13aXRoLWluZXhhY3QKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMTEwLXRyYW1wb2xpbmV3YXJuLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNS8xMTAtdHJhbXBvbGluZXdhcm4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNhYjIxNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMTEwLXRyYW1wb2xpbmV3YXJuLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzExMC10cmFtcG9saW5ld2Fybi5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzAwX2FsbF9nY2MtdHJhbXBvbGluZXdhcm4ucGF0Y2gKKwlUaGlzIHRyaXZpYWwgcGF0Y2ggY2F1c2VzIGdjYyB0byBlbWl0IGEgd2FybmluZyB3aGVuZXZlcgorCWl0IGdlbmVyYXRlcyBhIHRyYW1wb2xpbmUuICBUaGVzZSBhcmUgb3RoZXJ3aXNlIGhhcmQgdG8KKwlsb2NhdGUuICBJdCBpcyByaWdnZWQgdG8gZGVmYXVsdCBPTiAtIHRvIGhhdmUgaXQgZGVmYXVsdAorCXRvIE9GRiByZW1vdmUgdGhlIHRleHQgJ0luaXQoMSknIGZyb20gdGhlIGNvbW1vbi5vcHQKKwlwYXRjaCwgbGVhdmluZyBqdXN0ICdDb21tb24gVmFyKHdhcm5fdHJhbXBvbGluZXMpJy4KKwlLZXZpbiBGLiBRdWlubiA8a2V2cXVpbm5AZ2VudG9vLm9yZz4gMTcgSmFuIDIwMDYKKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9idWlsdGlucy5jIGdjYy00LjMuMy9nY2MvYnVpbHRpbnMuYworLS0tIGdjYy00LjMuMy5vcmlnL2djYy9idWlsdGlucy5jCTIwMDgtMDgtMTkgMTg6Mzc6MTMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2djYy9idWlsdGlucy5jCTIwMDktMDEtMjcgMjI6MTk6MTIuMDAwMDAwMDAwICswMTAwCitAQCAtNTY2Miw2ICs1NjYyLDkgQEAKKyAgIHRyYW1wb2xpbmVzX2NyZWF0ZWQgPSAxOworICAgSU5JVElBTElaRV9UUkFNUE9MSU5FIChyX3RyYW1wLCByX2Z1bmMsIHJfY2hhaW4pOworIAorKyAgaWYgKHdhcm5fdHJhbXBvbGluZXMpCisrICAgIHdhcm5pbmcgKE9QVF9XdHJhbXBvbGluZXMsICJnZW5lcmF0aW5nIHRyYW1wb2xpbmUgaW4gb2JqZWN0IChyZXF1aXJlcyBleGVjdXRhYmxlIHN0YWNrKSIpOworKworICAgcmV0dXJuIGNvbnN0MF9ydHg7CisgfQorIAorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29tbW9uLm9wdCBnY2MtNC4zLjMvZ2NjL2NvbW1vbi5vcHQKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29tbW9uLm9wdAkyMDA4LTAxLTIyIDE1OjExOjQ0LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9nY2MvY29tbW9uLm9wdAkyMDA5LTAxLTI3IDIyOjE5OjEyLjAwMDAwMDAwMCArMDEwMAorQEAgLTE4Miw2ICsxODIsMTAgQEAKKyBDb21tb24gVmFyKHdhcm5fc3lzdGVtX2hlYWRlcnMpIFdhcm5pbmcKKyBEbyBub3Qgc3VwcHJlc3Mgd2FybmluZ3MgZnJvbSBzeXN0ZW0gaGVhZGVycworIAorK1d0cmFtcG9saW5lcworK0NvbW1vbiBWYXIod2Fybl90cmFtcG9saW5lcykgSW5pdCgxKQorK1dhcm4gd2hlbmV2ZXIgYSB0cmFtcG9saW5lIGlzIGdlbmVyYXRlZAorKworIFd1bmluaXRpYWxpemVkCisgQ29tbW9uIFZhcih3YXJuX3VuaW5pdGlhbGl6ZWQpIFdhcm5pbmcKKyBXYXJuIGFib3V0IHVuaW5pdGlhbGl6ZWQgYXV0b21hdGljIHZhcmlhYmxlcwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNS8xMjAtamF2YS1ub211bHRpLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNS8xMjAtamF2YS1ub211bHRpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YjgxM2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzEyMC1qYXZhLW5vbXVsdGkucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMTIwLWphdmEtbm9tdWx0aS5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzAzX2FsbF9nY2M0My1qYXZhLW5vbXVsdGkucGF0Y2gKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJqYXZhL2NvbmZpZ3VyZSBnY2MtNC4zLjMvbGliamF2YS9jb25maWd1cmUKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJqYXZhL2NvbmZpZ3VyZQkyMDA5LTAxLTI0IDExOjMyOjI5LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9saWJqYXZhL2NvbmZpZ3VyZQkyMDA5LTAxLTI3IDIyOjE5OjE0LjAwMDAwMDAwMCArMDEwMAorQEAgLTEwMTgsNiArMTAxOCw4IEBACisgICAtLWVuYWJsZS1nY29uZi1wZWVyICAgICBjb21waWxlIEdDb25mIG5hdGl2ZSBwZWVycyBmb3IgdXRpbC5wcmVmZXJlbmNlcworICAgLS1lbmFibGUtamF2YS1tYWludGFpbmVyLW1vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93IHJlYnVpbGRpbmcgb2YgLmNsYXNzIGFuZCAuaCBmaWxlcworKyAgLS1lbmFibGUtbGliamF2YS1tdWx0aWxpYgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgbGliamF2YSBhcyBtdWx0aWxpYgorICAgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgIHNwZWVkcyB1cCBvbmUtdGltZSBidWlsZAorICAgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyAgIGRvIG5vdCByZWplY3Qgc2xvdyBkZXBlbmRlbmN5IGV4dHJhY3RvcnMKKyAgIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSAgZW5hYmxlIG1ha2UgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBub3QgdXNlZnVsCitAQCAtMTg1MCw2ICsxODUyLDE2IEBACisgZmkKKyAKKyAKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGliamF2YS1tdWx0aWxpYiB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfbGliamF2YV9tdWx0aWxpYitzZXR9IiA9IHNldDsgdGhlbgorKyAgZW5hYmxldmFsPSRlbmFibGVfbGliamF2YV9tdWx0aWxpYjsKKytmaQorKworK2lmIHRlc3QgIiRlbmFibGVfbGliamF2YV9tdWx0aWxpYiIgPSBubzsgdGhlbgorKyAgbXVsdGlsaWI9bm8KKysgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1kaXNhYmxlLW11bHRpbGliIgorK2ZpCisrCisgIyBJdCBtYXkgbm90IGJlIHNhZmUgdG8gcnVuIGxpbmtpbmcgdGVzdHMgaW4gQUNfUFJPR19DQy9BQ19QUk9HX0NYWC4KKyAKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliamF2YS9jb25maWd1cmUuYWMgZ2NjLTQuMy4zL2xpYmphdmEvY29uZmlndXJlLmFjCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliamF2YS9jb25maWd1cmUuYWMJMjAwOC0wNy0wMiAyMzoyMzo0My4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGliamF2YS9jb25maWd1cmUuYWMJMjAwOS0wMS0yNyAyMjoxOToxNC4wMDAwMDAwMDAgKzAxMDAKK0BAIC04Miw2ICs4MiwxMyBAQAorIAlbYWxsb3cgcmVidWlsZGluZyBvZiAuY2xhc3MgYW5kIC5oIGZpbGVzXSkpCisgQU1fQ09ORElUSU9OQUwoSkFWQV9NQUlOVEFJTkVSX01PREUsIHRlc3QgIiRlbmFibGVfamF2YV9tYWludGFpbmVyX21vZGUiID0geWVzKQorIAorK0FDX0FSR19FTkFCTEUobGliamF2YS1tdWx0aWxpYiwKKysJQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxpYmphdmEtbXVsdGlsaWJdLCBbYnVpbGQgbGliamF2YSBhcyBtdWx0aWxpYl0pKQorK2lmIHRlc3QgIiRlbmFibGVfbGliamF2YV9tdWx0aWxpYiIgPSBubzsgdGhlbgorKyAgbXVsdGlsaWI9bm8KKysgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1kaXNhYmxlLW11bHRpbGliIgorK2ZpCisrCisgIyBJdCBtYXkgbm90IGJlIHNhZmUgdG8gcnVuIGxpbmtpbmcgdGVzdHMgaW4gQUNfUFJPR19DQy9BQ19QUk9HX0NYWC4KKyBHQ0NfTk9fRVhFQ1VUQUJMRVMKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMTMwLWNyb3NzLWNvbXBpbGUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzEzMC1jcm9zcy1jb21waWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNjU5OTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzEzMC1jcm9zcy1jb21waWxlLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzEzMC1jcm9zcy1jb21waWxlLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vMDhfYWxsX2djYy00LjEtY3Jvc3MtY29tcGlsZS5wYXRjaAorU29tZSBub3RlcyBvbiB0aGUgJ2Jvb3RzdHJhcCB3aXRoIG9yIHdpdGhvdXQgbGliYyBoZWFkZXJzJyBkZWJhdGU6CitodHRwOi8vbGludXhmcm9tc2NyYXRjaC5vcmcvcGlwZXJtYWlsL2xmcy1kZXYvMjAwNS1KdWx5LzA1MjQwOS5odG1sCitodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLzIwMDUtMDcvbXNnMDExOTUuaHRtbAorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZ3VyZSBnY2MtNC4zLjMvZ2NjL2NvbmZpZ3VyZQorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWd1cmUJMjAwOC0wOC0wMSAxMTo1MTowMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZ3VyZQkyMDA5LTAxLTI3IDIyOjE5OjE2LjAwMDAwMDAwMCArMDEwMAorQEAgLTEzNDQyLDcgKzEzNDQyLDcgQEAKKyAJICAgIHwgcG93ZXJwYyotKi0qLHBvd2VycGM2NCotKi0qKQorIAkJQ1JPU1M9IiRDUk9TUyAtRE5BVElWRV9DUk9TUyIgOzsKKyAJZXNhYworLWVsaWYgdGVzdCAieCRUQVJHRVRfU1lTVEVNX1JPT1QiICE9IHg7IHRoZW4KKytlbGlmIHRlc3QgIngkVEFSR0VUX1NZU1RFTV9ST09UIiAhPSB4IC1vICRidWlsZCAhPSAkaG9zdDsgdGhlbgorICAgICAgICAgU1lTVEVNX0hFQURFUl9ESVI9JGJ1aWxkX3N5c3RlbV9oZWFkZXJfZGlyCisgZmkKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYyBnY2MtNC4zLjMvZ2NjL2NvbmZpZ3VyZS5hYworLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWd1cmUuYWMJMjAwOC0wOC0wMSAxMTo1MTowMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZ3VyZS5hYwkyMDA5LTAxLTI3IDIyOjE5OjE2LjAwMDAwMDAwMCArMDEwMAorQEAgLTE3NDksNyArMTc0OSw3IEBACisgCSAgICB8IHBvd2VycGMqLSotKixwb3dlcnBjNjQqLSotKikKKyAJCUNST1NTPSIkQ1JPU1MgLUROQVRJVkVfQ1JPU1MiIDs7CisgCWVzYWMKKy1lbGlmIHRlc3QgIngkVEFSR0VUX1NZU1RFTV9ST09UIiAhPSB4OyB0aGVuCisrZWxpZiB0ZXN0ICJ4JFRBUkdFVF9TWVNURU1fUk9PVCIgIT0geCAtbyAkYnVpbGQgIT0gJGhvc3Q7IHRoZW4KKyAgICAgICAgIFNZU1RFTV9IRUFERVJfRElSPSRidWlsZF9zeXN0ZW1faGVhZGVyX2RpciAKKyBmaQorIAorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvdW53aW5kLWR3Mi5jIGdjYy00LjMuMy9nY2MvdW53aW5kLWR3Mi5jCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL3Vud2luZC1kdzIuYwkyMDA4LTA5LTI1IDAwOjQ0OjI4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9nY2MvdW53aW5kLWR3Mi5jCTIwMDktMDEtMjcgMjI6MTk6MTYuMDAwMDAwMDAwICswMTAwCitAQCAtMzM0LDkgKzMzNCwxMSBAQAorIH0KKyAjZW5kaWYKKyAKKysjaWZuZGVmIGluaGliaXRfbGliYworICNpZmRlZiBNRF9VTldJTkRfU1VQUE9SVAorICNpbmNsdWRlIE1EX1VOV0lORF9TVVBQT1JUCisgI2VuZGlmCisrI2VuZGlmCisgDAorIC8qIEV4dHJhY3QgYW55IGludGVyZXN0aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIENJRSBmb3IgdGhlIHRyYW5zbGF0aW9uCisgICAgdW5pdCBGIGJlbG9uZ3MgdG8uICBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBieXRlIGFmdGVyIHRoZSBhdWdtZW50YXRpb24sCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzE0MC1uZXRic2Qtc3ltYm9saWMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzE0MC1uZXRic2Qtc3ltYm9saWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg5OWRkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMTQwLW5ldGJzZC1zeW1ib2xpYy5wYXRjaApAQCAtMCwwICsxLDE5IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8xNDAtbmV0YnNkLXN5bWJvbGljLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vMTFfYWxsX2djYy1uZXRic2Qtc3ltYm9saWMucGF0Y2gKK2h0dHA6Ly9idWdzLmdlbnRvby5vcmcvMTIyNjk4CisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL25ldGJzZC1lbGYuaCBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9uZXRic2QtZWxmLmgKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL25ldGJzZC1lbGYuaAkyMDA3LTA5LTAzIDE4OjE0OjA0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL25ldGJzZC1lbGYuaAkyMDA5LTAxLTI3IDIyOjE5OjE4LjAwMDAwMDAwMCArMDEwMAorQEAgLTgyLDYgKzgyLDcgQEAKKyAjZGVmaW5lIE5FVEJTRF9MSU5LX1NQRUNfRUxGIFwKKyAgICIle2Fzc2VydCp9ICV7Uip9ICV7cnBhdGgqfSBcCisgICAgJXtzaGFyZWQ6LXNoYXJlZH0gXAorKyAgICV7c3ltYm9saWM6LUJzeW1ib2xpY30gXAorICAgICV7IXNoYXJlZDogXAorICAgICAgLWRjIC1kcCBcCisgICAgICAleyFub3N0ZGxpYjogXApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNS8xNTAtc3BhcmM2NC1ic2QucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzE1MC1zcGFyYzY0LWJzZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzNhNzYzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNS8xNTAtc3BhcmM2NC1ic2QucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMTUwLXNwYXJjNjQtYnNkLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vMTRfYWxsX2djYy1zcGFyYzY0LWJzZC5wYXRjaAorLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oIGdjYy00LjMuMy9nY2MvY29uZmlnL3NwYXJjL2ZyZWVic2QuaAorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oCTIwMDctMDgtMDIgMTI6NDk6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oCTIwMDktMDEtMjcgMjI6MTk6MjAuMDAwMDAwMDAwICswMTAwCitAQCAtMjUsOSArMjUsMjIgQEAKKyAvKiBGcmVlQlNEIG5lZWRzIHRoZSBwbGF0Zm9ybSBuYW1lIChzcGFyYzY0KSBkZWZpbmVkLgorICAgIEVtYWNzIG5lZWRzIHRvIGtub3cgaWYgdGhlIGFyY2ggaXMgNjQgb3IgMzItYml0cy4gICovCisgCistI3VuZGVmICBDUFBfQ1BVNjRfREVGQVVMVF9TUEVDCistI2RlZmluZSBDUFBfQ1BVNjRfREVGQVVMVF9TUEVDIFwKKy0gICItRF9fc3BhcmM2NF9fIC1EX19zcGFyY192OV9fIC1EX19zcGFyY3Y5IC1EX19hcmNoNjRfXyIKKysjdW5kZWYgIEZCU0RfVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMKKysjZGVmaW5lIEZCU0RfVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMoKSAgICAgICAgICAgICAgICAgIFwKKysgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBpZiAoVEFSR0VUX0FSQ0g2NCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjNjRfXyIpOyAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjX3Y5X18iKTsgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjdjkiKTsgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19zcGFyYyIpOyAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBidWlsdGluX2RlZmluZSAoIl9fc3BhcmNfXyIpOyAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHdoaWxlICgwKQorKworIAorICNkZWZpbmUgTElOS19TUEVDICIlKGxpbmtfYXJjaCkJCQkJCQlcCisgICAleyFtbm8tcmVsYXg6JXshcjotcmVsYXh9fQkJCQkJCVwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMTYwLWZsYXR0ZW4tc3dpdGNoLXN0bXQtMDAucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzE2MC1mbGF0dGVuLXN3aXRjaC1zdG10LTAwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYWNmYmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzE2MC1mbGF0dGVuLXN3aXRjaC1zdG10LTAwLnBhdGNoCkBAIC0wLDAgKzEsODEgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzE2MC1mbGF0dGVuLXN3aXRjaC1zdG10LTAwLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vMThfYWxsXzkwNC1mbGF0dGVuLXN3aXRjaC1zdG10LTAwLnBhdGNoCitodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAwNy0wNC9tc2cwMDkyNy5odG1sCisKK0hpLAorCitUaGUgYXR0YWNoZWQgcGF0Y2ggbWFrZXMgc3VyZSB0aGF0IHdlIGNyZWF0ZSBzbWFsbGVyIG9iamVjdCBjb2RlIGZvcgorc2ltcGxlIHN3aXRjaCBzdGF0ZW1lbnRzLiBXZSBqdXN0IG1ha2Ugc3VyZSB0byBmbGF0dGVuIHRoZSBzd2l0Y2gKK3N0YXRlbWVudCBpbnRvIGFuIGlmLWVsc2UgY2hhaW4sIGJhc2ljYWxseS4KKworVGhpcyBmaXhlcyBhIHNpemUtcmVncmVzc2lvbiBhcyBjb21wYXJlZCB0byBnY2MtMy40LCBhcyBjYW4gYmUgc2VlbgorYmVsb3cuCisKKzIwMDctMDQtMTUgIEJlcm5oYXJkIEZpc2NoZXIgIDwuLj4KKworCSogc3RtdC5jIChleHBhbmRfY2FzZSk6IERvIG5vdCBjcmVhdGUgYSBjb21wbGV4IGJpbmFyeSB0cmVlIHdoZW4KKwlvcHRpbWl6aW5nIGZvciBzaXplIGJ1dCByYXRoZXIgdXNlIHRoZSBzaW1wbGUgb3JkZXJlZCBsaXN0LgorCShlbWl0X2Nhc2Vfbm9kZXMpOiBkbyBub3QgZW1pdCBqdW1wcyB0byB0aGUgZGVmYXVsdF9sYWJlbCB3aGVuCisJb3B0aW1pemluZyBmb3Igc2l6ZS4KKworTm90IHJlZ3Rlc3RlZCBzbyBmYXIuCitDb21tZW50cz8KKworQXR0YWNoZWQgaXMgdGhlIHRlc3Qgc3dpdGNoLmMgbWVudGlvbmVkIGJlbG93LgorCiskIGZvciBpIGluIDIuOTUgMy4zIDMuNCA0LjAgNC4xIDQuMi5vcmlnLUhFQUQgNC4zLm9yaWctSEVBRCA0LjMtSEVBRDtkbworZ2NjLSRpICAtRENIQUlOIC1PcyAtbyBzd2l0Y2gtQ0hBSU4tJGkubyAtYyBzd2l0Y2guYyA7ZG9uZQorJCBmb3IgaSBpbiAyLjk1IDMuMyAzLjQgNC4wIDQuMSA0LjIub3JpZy1IRUFEIDQuMy5vcmlnLUhFQUQgNC4zLUhFQUQ7ZG8KK2djYy0kaSAgLVVDSEFJTiAtT3MgLW8gc3dpdGNoLSRpLm8gLWMgc3dpdGNoLmMgO2RvbmUKKworJCBzaXplIHN3aXRjaC0qLm8KKyAgIHRleHQJICAgZGF0YQkgICAgYnNzCSAgICBkZWMJICAgIGhleAlmaWxlbmFtZQorICAgIDE2OQkgICAgICAwCSAgICAgIDAJICAgIDE2OQkgICAgIGE5CXN3aXRjaC0yLjk1Lm8KKyAgICAxMTUJICAgICAgMAkgICAgICAwCSAgICAxMTUJICAgICA3Mwlzd2l0Y2gtMy4zLm8KKyAgICAxMDMJICAgICAgMAkgICAgICAwCSAgICAxMDMJICAgICA2Nwlzd2l0Y2gtMy40Lm8KKyAgICAxMjQJICAgICAgMAkgICAgICAwCSAgICAxMjQJICAgICA3Ywlzd2l0Y2gtNC4wLm8KKyAgICAxMjQJICAgICAgMAkgICAgICAwCSAgICAxMjQJICAgICA3Ywlzd2l0Y2gtNC4xLm8KKyAgICAxMjQJICAgICAgMAkgICAgICAwCSAgICAxMjQJICAgICA3Ywlzd2l0Y2gtNC4yLm9yaWctSEVBRC5vCisgICAgIDk1CSAgICAgIDAJICAgICAgMAkgICAgIDk1CSAgICAgNWYJc3dpdGNoLTQuMy1IRUFELm8KKyAgICAxMjQJICAgICAgMAkgICAgICAwCSAgICAxMjQJICAgICA3Ywlzd2l0Y2gtNC4zLm9yaWctSEVBRC5vCisgICAgMTY2CSAgICAgIDAJICAgICAgMAkgICAgMTY2CSAgICAgYTYJc3dpdGNoLUNIQUlOLTIuOTUubworICAgIDExMQkgICAgICAwCSAgICAgIDAJICAgIDExMQkgICAgIDZmCXN3aXRjaC1DSEFJTi0zLjMubworICAgICA5NQkgICAgICAwCSAgICAgIDAJICAgICA5NQkgICAgIDVmCXN3aXRjaC1DSEFJTi0zLjQubworICAgICA5NQkgICAgICAwCSAgICAgIDAJICAgICA5NQkgICAgIDVmCXN3aXRjaC1DSEFJTi00LjAubworICAgICA5NQkgICAgICAwCSAgICAgIDAJICAgICA5NQkgICAgIDVmCXN3aXRjaC1DSEFJTi00LjEubworICAgICA5NQkgICAgICAwCSAgICAgIDAJICAgICA5NQkgICAgIDVmCXN3aXRjaC1DSEFJTi00LjIub3JpZy1IRUFELm8KKyAgICAgOTUJICAgICAgMAkgICAgICAwCSAgICAgOTUJICAgICA1Zglzd2l0Y2gtQ0hBSU4tNC4zLUhFQUQubworICAgICA5NQkgICAgICAwCSAgICAgIDAJICAgICA5NQkgICAgIDVmCXN3aXRjaC1DSEFJTi00LjMub3JpZy1IRUFELm8KKworCitDb250ZW50LVR5cGU6IHRleHQveC1kaWZmOyBjaGFyc2V0PXVzLWFzY2lpCitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iZ2NjLTQuMy5nY2MtZmxhdHRlbi1zd2l0Y2gtc3RtdC4wMC5kaWZmIgorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL3N0bXQuYyBnY2MtNC4zLjMvZ2NjL3N0bXQuYworLS0tIGdjYy00LjMuMy5vcmlnL2djYy9zdG10LmMJMjAwOC0wNS0wOSAyMDoxMjoxMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL3N0bXQuYwkyMDA5LTAxLTI3IDIyOjE5OjI4LjAwMDAwMDAwMCArMDEwMAorQEAgLTI1MDksNyArMjUwOSwxMSBAQAorIAkgIHVzZV9jb3N0X3RhYmxlCisgCSAgICA9IChUUkVFX0NPREUgKG9yaWdfdHlwZSkgIT0gRU5VTUVSQUxfVFlQRQorIAkgICAgICAgJiYgZXN0aW1hdGVfY2FzZV9jb3N0cyAoY2FzZV9saXN0KSk7CistCSAgYmFsYW5jZV9jYXNlX25vZGVzICgmY2FzZV9saXN0LCBOVUxMKTsKKysJICAvKiBXaGVuIG9wdGltaXppbmcgZm9yIHNpemUsIHdlIHdhbnQgYSBzdHJhaWdodCBsaXN0IHRvIGF2b2lkCisrCSAgICAganVtcHMgYXMgbXVjaCBhcyBwb3NzaWJsZS4gVGhpcyBiYXNpY2FsbHkgY3JlYXRlcyBhbiBpZi1lbHNlCisrCSAgICAgY2hhaW4uICAqLworKwkgIGlmICghb3B0aW1pemVfc2l6ZSkKKysJICAgIGJhbGFuY2VfY2FzZV9ub2RlcyAoJmNhc2VfbGlzdCwgTlVMTCk7CisgCSAgZW1pdF9jYXNlX25vZGVzIChpbmRleCwgY2FzZV9saXN0LCBkZWZhdWx0X2xhYmVsLCBpbmRleF90eXBlKTsKKyAJICBlbWl0X2p1bXAgKGRlZmF1bHRfbGFiZWwpOworIAl9CitAQCAtMzA2Nyw2ICszMDcxLDcgQEAKKyAJICAgIHsKKyAJICAgICAgaWYgKCFub2RlX2hhc19sb3dfYm91bmQgKG5vZGUsIGluZGV4X3R5cGUpKQorIAkJeworKwkJICBpZiAoIW9wdGltaXplX3NpemUpIC8qIGRvbid0IGpsIHRvIHRoZSAuZGVmYXVsdF9sYWJlbC4gKi8KKyAJCSAgZW1pdF9jbXBfYW5kX2p1bXBfaW5zbnMgKGluZGV4LAorIAkJCQkJICAgY29udmVydF9tb2RlcworIAkJCQkJICAgKG1vZGUsIGltb2RlLApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNS8xNzAtbGliaWJlcnR5LXBpYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMTcwLWxpYmliZXJ0eS1waWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA3ODlkMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMTcwLWxpYmliZXJ0eS1waWMucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMTcwLWxpYmliZXJ0eS1waWMucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby81MV9hbGxfZ2NjLTMuNC1saWJpYmVydHktcGljLnBhdGNoCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliaWJlcnR5L01ha2VmaWxlLmluIGdjYy00LjMuMy9saWJpYmVydHkvTWFrZWZpbGUuaW4KKy0tLSBnY2MtNC4zLjMub3JpZy9saWJpYmVydHkvTWFrZWZpbGUuaW4JMjAwNy0wNy0yNSAwODoyNjo0NS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGliaWJlcnR5L01ha2VmaWxlLmluCTIwMDktMDEtMjcgMjI6MTk6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMjI1LDYgKzIyNSw3IEBACisgCSAgJChBUikgJChBUl9GTEFHUykgJChUQVJHRVRMSUIpIFwKKyAJICAgICQoUkVRVUlSRURfT0ZJTEVTKSAkKEVYVFJBX09GSUxFUykgJChMSUJPQkpTKTsgXAorIAkgICQoUkFOTElCKSAkKFRBUkdFVExJQik7IFwKKysJICBjcCAkKFRBUkdFVExJQikgLi4vIDsgXAorIAkgIGNkIC4uOyBcCisgCWVsc2UgdHJ1ZTsgZmkKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMTgwLXN1cGVyaC1kZWZhdWx0LW11bHRpbGliLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNS8xODAtc3VwZXJoLWRlZmF1bHQtbXVsdGlsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQxOTM3NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMTgwLXN1cGVyaC1kZWZhdWx0LW11bHRpbGliLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzE4MC1zdXBlcmgtZGVmYXVsdC1tdWx0aWxpYi5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzUzX2FsbF9nY2M0LXN1cGVyaC1kZWZhdWx0LW11bHRpbGliLnBhdGNoCitUaGUgZ2NjLTMueCB0b29sY2hhaW5zIHdvdWxkIGNvbnRhaW4gYWxsIHRoZSB0YXJnZXRzIGJ5IGRlZmF1bHQuICBXaXRoIGdjYy00LAoreW91IGhhdmUgdG8gYWN0dWFsbHkgbGlzdCBvdXQgdGhlIG11bHRpbGlicyB5b3Ugd2FudCBvciB5b3Ugd2lsbCBlbmQgdXAgd2l0aAoranVzdCBvbmUgd2hlbiB1c2luZyB0YXJnZXRzIGxpa2UgJ3NoNC1saW51eC1nbnUnLgorCitUaGUgcmVzdWx0aW5nIHRvb2xjaGFpbiBjYW4ndCBldmVuIGJ1aWxkIGEga2VybmVsIGFzIHRoZSBrZXJuZWwgbmVlZHMgdG8gYnVpbGQKK3dpdGggdGhlIG5vZnB1IGZsYWcgdG8gYmUgc3VyZSB0aGF0IG5vIGZwdSBvcHMgYXJlIGdlbmVyYXRlZC4KKworSGVyZSB3ZSByZXN0b3JlIHRoZSBnY2MtMy54IGJlaGF2aW9yOyB0aGUgYWRkaXRpb25hbCBvdmVyaGVhZCBvZiBidWlsZGluZyBhbGwKK29mIHRoZXNlIG11bHRpbGlicyBieSBkZWZhdWx0IGlzIG5lZ2xpZ2libGUuCisKK2h0dHA6Ly9idWdzLmdlbnRvby5vcmcvMTQwMjA1CisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnLmdjYyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy5nY2MKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnLmdjYwkyMDA4LTExLTIwIDE4OjA5OjUzLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnLmdjYwkyMDA5LTAxLTI3IDIyOjE5OjMyLjAwMDAwMDAwMCArMDEwMAorQEAgLTIyNzUsNyArMjI3NSw3IEBACisgCWlmIHRlc3QgeCR7c2hfbXVsdGlsaWJzfSA9IHggOyB0aGVuCisgCQljYXNlICR7dGFyZ2V0fSBpbgorIAkJc2g2NC1zdXBlcmgtbGludXgqIHwgXAorLQkJc2hbMTIzNF0qKQlzaF9tdWx0aWxpYnM9JHtzaF9jcHVfdGFyZ2V0fSA7OworKwkJc2hbMTIzNF0qKQlzaF9tdWx0aWxpYnM9YGNkICR7c3JjZGlyfS9jb25maWcvc2ggOyBlY2hvIHQtbWxpYi1zaFsxLTRdKiB8IHNlZCAnczp0LW1saWItc2g6LG06ZztzOiA6OmcnYCA7OworIAkJc2g2NCogfCBzaDUqKQlzaF9tdWx0aWxpYnM9bTUtMzJtZWRpYSxtNS0zMm1lZGlhLW5vZnB1LG01LWNvbXBhY3QsbTUtY29tcGFjdC1ub2ZwdSxtNS02NG1lZGlhLG01LTY0bWVkaWEtbm9mcHUgOzsKKyAJCXNoLXN1cGVyaC0qKQlzaF9tdWx0aWxpYnM9bTQsbTQtc2luZ2xlLG00LXNpbmdsZS1vbmx5LG00LW5vZnB1IDs7CisgCQlzaCotKi1saW51eCopCXNoX211bHRpbGlicz1tMSxtM2UsbTQgOzsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMTkwLWxpYnN0ZGMrKy1waWMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzE5MC1saWJzdGRjKystcGljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YmM2MDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzE5MC1saWJzdGRjKystcGljLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzE5MC1saWJzdGRjKystcGljLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vNTRfYWxsXzMwMC1saWJzdGRjKystcGljLnBhdGNoCitpbnN0YWxsIGxpYnN0ZGMrK19waWMuYSBpZiB3ZSBoYXZlIHBpYyBvYmpzCisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjUub3JpZy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmFtIGdjYy00LjMuNS9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmFtCistLS0gZ2NjLTQuMy41Lm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQkyMDA4LTAyLTI5IDE5OjI2OjUwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuNS9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmFtCTIwMTAtMDktMTkgMTg6NTg6NDAuMDAwMDAwMDAwICswMjAwCitAQCAtMjg5LDYgKzI4OSwxMyBAQAorIAkgICQoT1BUX0xERkxBR1MpICQoU0VDVElPTl9MREZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKExUTERGTEFHUykgLW8gJEAKKyAKKyAKKytpbnN0YWxsLWV4ZWMtbG9jYWw6CisrCXBpY19vYmpzPWBzZWQgLW4gInM6Jzo6ZztzOl5waWNfb2JqZWN0PTo6cCIgKi5sbyB8IGdyZXAgLXYgJ15ub25lJCQnYDsgXAorKwlpZiBbIHgiJCRwaWNfb2JqcyIgIT0geCBdOyB0aGVuIFwKKysJCSQoQVIpIGNydSBsaWJzdGRjKytfcGljLmEgJCRwaWNfb2JqcyAkKHRvcF9idWlsZGRpcikvbGlic3VwYysrLyoubyB8fCBleGl0IDE7IFwKKysJCSQoSU5TVEFMTF9EQVRBKSBsaWJzdGRjKytfcGljLmEgJChERVNURElSKSQodG9vbGV4ZWNsaWJkaXIpIHx8IGV4aXQgMTsgXAorKwlmaQorKworICMgQWRkZWQgYml0cyB0byBidWlsZCBkZWJ1ZyBsaWJyYXJ5LgorIGlmIEdMSUJDWFhfQlVJTERfREVCVUcKKyBhbGwtbG9jYWw6IGJ1aWxkX2RlYnVnCitkaWZmIC1kdXJOIGdjYy00LjMuNS5vcmlnL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuaW4gZ2NjLTQuMy41L2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuaW4KKy0tLSBnY2MtNC4zLjUub3JpZy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCTIwMTAtMDUtMDYgMTk6MTk6NDYuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy41L2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuaW4JMjAxMC0wOS0xOSAxOTowMTo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC02NDYsNyArNjQ2LDcgQEAKKyAKKyBpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtZGF0YS1sb2NhbAorIAorLWluc3RhbGwtZXhlYy1hbTogaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTCisraW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLXRvb2xleGVjbGliTFRMSUJSQVJJRVMgaW5zdGFsbC1leGVjLWxvY2FsCisgCisgaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKyAKK0BAIC02ODUsNyArNjg1LDcgQEAKKyAJbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKyAJbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIFwKKyAJdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1pbmZvLWFtIFwKKy0JdW5pbnN0YWxsLXRvb2xleGVjbGliTFRMSUJSQVJJRVMKKysJdW5pbnN0YWxsLXRvb2xleGVjbGliTFRMSUJSQVJJRVMgaW5zdGFsbC1leGVjLWxvY2FsCisgCisgCisgIyBTeW1ib2wgdmVyc2lvbmluZyBmb3Igc2hhcmVkIGxpYnJhcmllcy4KK0BAIC04MTEsNiArODExLDE0IEBACisgaW5zdGFsbF9kZWJ1ZzoKKyAJKGNkICR7ZGVidWdkaXJ9ICYmICQoTUFLRSkgXAorIAl0b29sZXhlY2xpYmRpcj0kKGdsaWJjeHhfdG9vbGV4ZWNsaWJkaXIpL2RlYnVnIGluc3RhbGwpCisrCisraW5zdGFsbC1leGVjLWxvY2FsOgorKwlwaWNfb2Jqcz1gc2VkIC1uICJzOic6Omc7czpecGljX29iamVjdD06OnAiICoubG8gfCBncmVwIC12ICdebm9uZSQkJ2A7IFwKKysJaWYgWyB4IiQkcGljX29ianMiICE9IHggXTsgdGhlbiBcCisrCQkkKEFSKSBjcnUgbGlic3RkYysrX3BpYy5hICQkcGljX29ianMgJCh0b3BfYnVpbGRkaXIpL2xpYnN1cGMrKy8qLm8gfHwgZXhpdCAxOyBcCisrCQkkKElOU1RBTExfREFUQSkgbGlic3RkYysrX3BpYy5hICQoREVTVERJUikkKHRvb2xleGVjbGliZGlyKSB8fCBleGl0IDE7IFwKKysJZmkKKysKKyAjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorICMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorIC5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMjAwLXByMjQxNzAucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzIwMC1wcjI0MTcwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYmJjOWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzIwMC1wcjI0MTcwLnBhdGNoCkBAIC0wLDAgKzEsNjYgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzIwMC1wcjI0MTcwLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vNjFfYWxsX2djYzQzLXByMjQxNzAucGF0Y2gKK2h0dHA6Ly9nY2MuZ251Lm9yZy9QUjI0MTcwCisKKzIwMDgtMDItMjAgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KKworCVBSIGxpYmdjai8yNDE3MDoKKwkqIGphdmEvaW8vbmF0RmlsZVBvc2l4LmNjIChGaWxlOjpwZXJmb3JtTGlzdCk6IERvbid0IHVzZQorCXJlYWRkaXJfci4KKwkqIGNvbmZpZ3VyZSwgaW5jbHVkZS9jb25maWcuaC5pbjogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5hYzogRG9uJ3QgY2hlY2sgZm9yIHJlYWRkaXJfci4KKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYmphdmEvY29uZmlndXJlLmFjIGdjYy00LjMuMy9saWJqYXZhL2NvbmZpZ3VyZS5hYworLS0tIGdjYy00LjMuMy5vcmlnL2xpYmphdmEvY29uZmlndXJlLmFjCTIwMDktMDEtMjcgMjI6MTk6MTYuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2xpYmphdmEvY29uZmlndXJlLmFjCTIwMDktMDEtMjcgMjI6MTk6MzYuMDAwMDAwMDAwICswMTAwCitAQCAtMTAzMCw3ICsxMDMwLDcgQEAKKyAgICBQTEFURk9STU5FVD1Ob05ldAorIGVsc2UKKyAgICBBQ19DSEVDS19GVU5DUyhbc3RyZXJyb3JfciBzZWxlY3QgZnN0YXQgb3BlbiBmc3luYyBzbGVlcCBvcGVuZGlyIFwKKy0gICAgICAgICAgICAgICAgICAgbG9jYWx0aW1lX3IgcmVhZGRpcl9yIGdldHB3dWlkX3IgZ2V0Y3dkIFwKKysgICAgICAgICAgICAgICAgICAgbG9jYWx0aW1lX3IgZ2V0cHd1aWRfciBnZXRjd2QgXAorIAkJICAgYWNjZXNzIHN0YXQgbHN0YXQgbWtkaXIgcmVuYW1lIHJtZGlyIHVubGluayB1dGltZSBjaG1vZCByZWFkbGluayBcCisgCQkgICBubF9sYW5naW5mbyBzZXRsb2NhbGUgXAorIAkJICAgaW5ldF9wdG9uIHVuYW1lIGluZXRfbnRvYSBcCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYmphdmEvaW5jbHVkZS9jb25maWcuaC5pbiBnY2MtNC4zLjMvbGliamF2YS9pbmNsdWRlL2NvbmZpZy5oLmluCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliamF2YS9pbmNsdWRlL2NvbmZpZy5oLmluCTIwMDctMDctMzEgMTg6MTc6MjEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2xpYmphdmEvaW5jbHVkZS9jb25maWcuaC5pbgkyMDA5LTAxLTI3IDIyOjE5OjM2LjAwMDAwMDAwMCArMDEwMAorQEAgLTIxNCw5ICsyMTQsNiBAQAorIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cHdkLmg+IGhlYWRlciBmaWxlLiAqLworICN1bmRlZiBIQVZFX1BXRF9ICisgCistLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZWFkZGlyX3InIGZ1bmN0aW9uLiAqLworLSN1bmRlZiBIQVZFX1JFQURESVJfUgorLQorIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVhZGxpbmsnIGZ1bmN0aW9uLiAqLworICN1bmRlZiBIQVZFX1JFQURMSU5LCisgCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYmphdmEvamF2YS9pby9uYXRGaWxlUG9zaXguY2MgZ2NjLTQuMy4zL2xpYmphdmEvamF2YS9pby9uYXRGaWxlUG9zaXguY2MKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJqYXZhL2phdmEvaW8vbmF0RmlsZVBvc2l4LmNjCTIwMDctMDgtMDQgMjM6NTA6MDEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2xpYmphdmEvamF2YS9pby9uYXRGaWxlUG9zaXguY2MJMjAwOS0wMS0yNyAyMjoxOTozNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xLDYgKzEsNiBAQAorIC8vIG5hdEZpbGUuY2MgLSBOYXRpdmUgcGFydCBvZiBGaWxlIGNsYXNzIGZvciBQT1NJWC4KKyAKKy0vKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDYKKysvKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDYsIDIwMDgKKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJnY2ouCitAQCAtMjkyLDEzICsyOTIsNyBAQAorIAorICAgamF2YTo6dXRpbDo6QXJyYXlMaXN0ICpsaXN0ID0gbmV3IGphdmE6OnV0aWw6OkFycmF5TGlzdCAoKTsKKyAgIHN0cnVjdCBkaXJlbnQgKmQ7CistI2lmIGRlZmluZWQoSEFWRV9SRUFERElSX1IpICYmIGRlZmluZWQoX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTKQorLSAgaW50IG5hbWVfbWF4ID0gcGF0aGNvbmYgKGJ1ZiwgX1BDX05BTUVfTUFYKTsKKy0gIGNoYXIgZGJ1ZltzaXplb2YgKHN0cnVjdCBkaXJlbnQpICsgbmFtZV9tYXggKyAxXTsKKy0gIHdoaWxlIChyZWFkZGlyX3IgKGRpciwgKHN0cnVjdCBkaXJlbnQgKikgZGJ1ZiwgJmQpID09IDAgJiYgZCAhPSBOVUxMKQorLSNlbHNlIC8qIEhBVkVfUkVBRERJUl9SICovCisgICB3aGlsZSAoKGQgPSByZWFkZGlyIChkaXIpKSAhPSBOVUxMKQorLSNlbmRpZiAvKiBIQVZFX1JFQURESVJfUiAqLworICAgICB7CisgICAgICAgLy8gT21pdCAiLiIgYW5kICIuLiIuCisgICAgICAgaWYgKGQtPmRfbmFtZVswXSA9PSAnLicKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMjEwLW5vdGVHTlVzdGFjay0wMC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMjEwLW5vdGVHTlVzdGFjay0wMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGM2NDI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNS8yMTAtbm90ZUdOVXN0YWNrLTAwLnBhdGNoCkBAIC0wLDAgKzEsMTAxIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8yMTAtbm90ZUdOVXN0YWNrLTAwLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vNjFfYWxsX2djYzQtaWE2NC1ub3RlR05Vc3RhY2sucGF0Y2gKKzIwMDQtMDktMjAgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBjb25maWcvcnM2MDAwL3BwYy1hc20uaDogQWRkIC5ub3RlLkdOVS1zdGFjayBzZWN0aW9uIGFsc28KKwlvbiBwcGM2NC1saW51eC4KKworCSogY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbTogQWRkIC5ub3RlLkdOVS1zdGFjayBzZWN0aW9uIG9uCisJaWE2NC1saW51eC4KKwkqIGNvbmZpZy9pYTY0L2NydGJlZ2luLmFzbTogTGlrZXdpc2UuCisJKiBjb25maWcvaWE2NC9jcnRlbmQuYXNtOiBMaWtld2lzZS4KKwkqIGNvbmZpZy9pYTY0L2NydGkuYXNtOiBMaWtld2lzZS4KKwkqIGNvbmZpZy9pYTY0L2NydG4uYXNtOiBMaWtld2lzZS4KKworMjAwNC0wNS0xNCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZy9pYTY0L2xpbnV4LmggKFRBUkdFVF9BU01fRklMRV9FTkQpOiBEZWZpbmUuCisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtIGdjYy00LjMuMy9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGJlZ2luLmFzbQkyMDA1LTA5LTI3IDAyOjUyOjI0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtCTIwMDktMDEtMjcgMjI6MTk6MzkuMDAwMDAwMDAwICswMTAwCitAQCAtMjU1LDMgKzI1NSw3IEBACisgLndlYWsgX19jeGFfZmluYWxpemUKKyAjZW5kaWYKKyAud2VhayBfSnZfUmVnaXN0ZXJDbGFzc2VzCisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtIGdjYy00LjMuMy9nY2MvY29uZmlnL2lhNjQvY3J0ZW5kLmFzbQorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtCTIwMDUtMDktMjcgMDI6NTI6MjQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtCTIwMDktMDEtMjcgMjI6MTk6MzkuMDAwMDAwMDAwICswMTAwCitAQCAtMTIyLDMgKzEyMiw3IEBACisgCisgCWJyLnJldC5zcHRrLm1hbnkgcnAKKyAJLmVuZHAgX19kb19nbG9iYWxfY3RvcnNfYXV4CisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRpLmFzbSBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9pYTY0L2NydGkuYXNtCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGkuYXNtCTIwMDUtMDYtMjUgMDM6MjI6NDEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvaWE2NC9jcnRpLmFzbQkyMDA5LTAxLTI3IDIyOjE5OjM5LjAwMDAwMDAwMCArMDEwMAorQEAgLTY0LDMgKzY0LDcgQEAKKyAJLmJvZHkKKyAKKyAjIGVuZCBvZiBjcnRpLmFzbQorKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0bi5hc20gZ2NjLTQuMy4zL2djYy9jb25maWcvaWE2NC9jcnRuLmFzbQorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRuLmFzbQkyMDA1LTA2LTI1IDAzOjIyOjQxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL2lhNjQvY3J0bi5hc20JMjAwOS0wMS0yNyAyMjoxOTozOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC01NCwzICs1NCw3IEBACisgCWJyLnJldC5zcHRrLm1hbnkgYjAKKyAKKyAjIGVuZCBvZiBjcnRuLmFzbQorKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbSBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9pYTY0L2xpYjFmdW5jcy5hc20KKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbQkyMDA1LTA5LTI3IDAyOjUyOjI0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbQkyMDA5LTAxLTI3IDIyOjE5OjM5LjAwMDAwMDAwMCArMDEwMAorQEAgLTc5MiwzICs3OTIsNyBAQAorIAl9CisgCS5lbmRwIF9fZmxvYXR0aXRmCisgI2VuZGlmCisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvaWE2NC9saW51eC5oIGdjYy00LjMuMy9nY2MvY29uZmlnL2lhNjQvbGludXguaAorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvaWE2NC9saW51eC5oCTIwMDYtMTItMTIgMTY6MTU6MTkuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvaWE2NC9saW51eC5oCTIwMDktMDEtMjcgMjI6MTk6MzkuMDAwMDAwMDAwICswMTAwCitAQCAtNSw2ICs1LDggQEAKKyAKKyAjZGVmaW5lIFRBUkdFVF9WRVJTSU9OIGZwcmludGYgKHN0ZGVyciwgIiAoSUEtNjQpIExpbnV4Iik7CisgCisrI2RlZmluZSBUQVJHRVRfQVNNX0ZJTEVfRU5EIGZpbGVfZW5kX2luZGljYXRlX2V4ZWNfc3RhY2sKKysKKyAvKiBUaGlzIGlzIGZvciAtcHJvZmlsZSB0byB1c2UgLWxjX3AgaW5zdGVhZCBvZiAtbGMuICAqLworICN1bmRlZiBDQzFfU1BFQworICNkZWZpbmUgQ0MxX1NQRUMgIiV7cHJvZmlsZTotcH0gJXtHKn0iCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvcnM2MDAwL3BwYy1hc20uaCBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9yczYwMDAvcHBjLWFzbS5oCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvcHBjLWFzbS5oCTIwMDMtMDYtMDQgMTg6NDQ6NTEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvcnM2MDAwL3BwYy1hc20uaAkyMDA5LTAxLTI3IDIyOjE5OjM5LjAwMDAwMDAwMCArMDEwMAorQEAgLTE1OCw3ICsxNTgsNyBAQAorIAkuc2l6ZSBGVU5DX05BTUUobmFtZSksR0xVRSguTCxuYW1lKS1GVU5DX05BTUUobmFtZSkKKyAjZW5kaWYKKyAKKy0jaWYgZGVmaW5lZCBfX2xpbnV4X18gJiYgIWRlZmluZWQgX19wb3dlcnBjNjRfXworKyNpZiBkZWZpbmVkIF9fbGludXhfXworIAkuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2sKKyAJLnByZXZpb3VzCisgI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzIyMC1ub3RlR05Vc3RhY2stMDEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzIyMC1ub3RlR05Vc3RhY2stMDEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I2ZTk5OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMjIwLW5vdGVHTlVzdGFjay0wMS5wYXRjaApAQCAtMCwwICsxLDIwMyBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMjIwLW5vdGVHTlVzdGFjay0wMS5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzYyX2FsbF9nY2M0LW5vdGVHTlVzdGFjay5wYXRjaAorMjAwNS0wMi0wOCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIHNyYy9hbHBoYS9vc2YuUzogQWRkIC5ub3RlLkdOVS1zdGFjayBvbiBMaW51eC4KKwkqIHNyYy9zMzkwL3N5c3YuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0LlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9zeXN2LlM6IExpa2V3aXNlLgorCSogc3JjL3g4Ni91bml4NjQuUzogTGlrZXdpc2UuCisJKiBzcmMveDg2L3N5c3YuUzogTGlrZXdpc2UuCisJKiBzcmMvc3BhcmMvdjguUzogTGlrZXdpc2UuCisJKiBzcmMvc3BhcmMvdjkuUzogTGlrZXdpc2UuCisJKiBzcmMvbTY4ay9zeXN2LlM6IExpa2V3aXNlLgorCSogc3JjL2lhNjQvdW5peC5TOiBMaWtld2lzZS4KKwkqIHNyYy9hcm0vc3lzdi5TOiBMaWtld2lzZS4KKworCSogaWE2NF9zYXZlX3JlZ3NfaW5fc3RhY2suczogTW92ZWQgdG8uLi4KKwkqIGlhNjRfc2F2ZV9yZWdzX2luX3N0YWNrLlM6IC4uLiB0aGlzLiAgQWRkIC5ub3RlLkdOVS1zdGFjaworCW9uIExpbnV4LgorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvYm9laG0tZ2MvaWE2NF9zYXZlX3JlZ3NfaW5fc3RhY2suUyBnY2MtNC4zLjMvYm9laG0tZ2MvaWE2NF9zYXZlX3JlZ3NfaW5fc3RhY2suUworLS0tIGdjYy00LjMuMy5vcmlnL2JvZWhtLWdjL2lhNjRfc2F2ZV9yZWdzX2luX3N0YWNrLlMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvYm9laG0tZ2MvaWE2NF9zYXZlX3JlZ3NfaW5fc3RhY2suUwkyMDA5LTAxLTI3IDIyOjI1OjI3LjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwxNSBAQAorKyAgICAgICAgLnRleHQKKysgICAgICAgIC5hbGlnbiAxNgorKyAgICAgICAgLmdsb2JhbCBHQ19zYXZlX3JlZ3NfaW5fc3RhY2sKKysgICAgICAgIC5wcm9jIEdDX3NhdmVfcmVnc19pbl9zdGFjaworK0dDX3NhdmVfcmVnc19pbl9zdGFjazoKKysgICAgICAgIC5ib2R5Zm9vLm1wZworKyAgICAgICAgZmx1c2hycworKyAgICAgICAgOzsKKysgICAgICAgIG1vdiByOD1hci5ic3AKKysgICAgICAgIGJyLnJldC5zcHRrLmZldyBycAorKyAgICAgICAgLmVuZHAgR0Nfc2F2ZV9yZWdzX2luX3N0YWNrCisrCisrI2lmZGVmIF9fbGludXhfXworKwkuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2JvZWhtLWdjL2lhNjRfc2F2ZV9yZWdzX2luX3N0YWNrLnMgZ2NjLTQuMy4zL2JvZWhtLWdjL2lhNjRfc2F2ZV9yZWdzX2luX3N0YWNrLnMKKy0tLSBnY2MtNC4zLjMub3JpZy9ib2VobS1nYy9pYTY0X3NhdmVfcmVnc19pbl9zdGFjay5zCTIwMDEtMTAtMTUgMDY6NTc6NTkuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2JvZWhtLWdjL2lhNjRfc2F2ZV9yZWdzX2luX3N0YWNrLnMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xLDEyICswLDAgQEAKKy0gICAgICAgIC50ZXh0CistICAgICAgICAuYWxpZ24gMTYKKy0gICAgICAgIC5nbG9iYWwgR0Nfc2F2ZV9yZWdzX2luX3N0YWNrCistICAgICAgICAucHJvYyBHQ19zYXZlX3JlZ3NfaW5fc3RhY2sKKy1HQ19zYXZlX3JlZ3NfaW5fc3RhY2s6CistICAgICAgICAuYm9keQorLSAgICAgICAgZmx1c2hycworLSAgICAgICAgOzsKKy0gICAgICAgIG1vdiByOD1hci5ic3AKKy0gICAgICAgIGJyLnJldC5zcHRrLmZldyBycAorLSAgICAgICAgLmVuZHAgR0Nfc2F2ZV9yZWdzX2luX3N0YWNrCistCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvYWxwaGEvb3NmLlMgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvYWxwaGEvb3NmLlMKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL2FscGhhL29zZi5TCTIwMDctMDQtMDYgMTg6MjQ6MTYuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvYWxwaGEvb3NmLlMJMjAwOS0wMS0yNyAyMjoyNToyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zNTgsNCArMzU4LDggQEAKKyAJLmJ5dGUJMTYJCSMgdWxlYjEyOCBvZmZzZXQgMTYqLTgKKyAJLmFsaWduIDMKKyAkTEVGREUzOgorKworKyNpZmRlZiBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgorICNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL2FybS9zeXN2LlMgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvYXJtL3N5c3YuUworLS0tIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvYXJtL3N5c3YuUwkyMDA3LTA5LTA0IDE5OjUyOjQ1LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9saWJmZmkvc3JjL2FybS9zeXN2LlMJMjAwOS0wMS0yNyAyMjoyNToyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yOTMsMyArMjkzLDYgQEAKKyAJVU5XSU5EIC5mbmVuZAorICAgICAgICAgLnNpemUgICAgQ05BTUUoZmZpX2Nsb3N1cmVfU1lTViksLmZmaV9jbG9zdXJlX1NZU1ZfZW5kLUNOQU1FKGZmaV9jbG9zdXJlX1NZU1YpCisgCisrI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXworKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsJXByb2diaXRzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvaWE2NC91bml4LlMgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvaWE2NC91bml4LlMKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL2lhNjQvdW5peC5TCTIwMDUtMDMtMzAgMjM6NDk6MTkuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvaWE2NC91bml4LlMJMjAwOS0wMS0yNyAyMjoyNToyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC01NTMsMyArNTUzLDcgQEAKKyAJZGF0YTgJQHBjcmVsKC5MbGRfaGZhX2Zsb2F0KQkJLy8gRkZJX0lBNjRfVFlQRV9IRkFfRkxPQVQKKyAJZGF0YTgJQHBjcmVsKC5MbGRfaGZhX2RvdWJsZSkJCS8vIEZGSV9JQTY0X1RZUEVfSEZBX0RPVUJMRQorIAlkYXRhOAlAcGNyZWwoLkxsZF9oZmFfbGRvdWJsZSkJLy8gRkZJX0lBNjRfVFlQRV9IRkFfTERPVUJMRQorKworKyNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL202OGsvc3lzdi5TIGdjYy00LjMuMy9saWJmZmkvc3JjL202OGsvc3lzdi5TCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9tNjhrL3N5c3YuUwkyMDA3LTA1LTEwIDIzOjI5OjA0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9saWJmZmkvc3JjL202OGsvc3lzdi5TCTIwMDktMDEtMjcgMjI6MjU6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtMjA3LDMgKzIwNyw3IEBACisgCXJ0cworIAlDRklfRU5EUFJPQygpCisgCS5zaXplCWZmaV9jbG9zdXJlX3N0cnVjdF9TWVNWLC4tZmZpX2Nsb3N1cmVfc3RydWN0X1NZU1YKKysKKysjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjQuUyBnY2MtNC4zLjMvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjQuUworLS0tIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvcG93ZXJwYy9saW51eDY0LlMJMjAwNy0xMS0xNyAwMDoyNDo1My4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjQuUwkyMDA5LTAxLTI3IDIyOjI1OjI3LjAwMDAwMDAwMCArMDEwMAorQEAgLTE3OSwzICsxNzksNyBAQAorIAkuYWxpZ24gMworIC5MRUZERTE6CisgI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXworKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUyBnY2MtNC4zLjMvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TCTIwMDUtMDgtMTEgMjM6MTg6MjQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUwkyMDA5LTAxLTI3IDIyOjI1OjI3LjAwMDAwMDAwMCArMDEwMAorQEAgLTIwNCwzICsyMDQsNyBAQAorIAkuYWxpZ24gMworIC5MRUZERTE6CisgI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXworKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIGdjYy00LjMuMy9saWJmZmkvc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUworLS0tIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TCTIwMDctMTItMDEgMjI6MDA6MDQuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TCTIwMDktMDEtMjcgMjI6MjU6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtMjk1LDMgKzI5NSw3IEBACisgLkxFRkRFMToKKyAKKyAjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9wb3dlcnBjL3N5c3YuUyBnY2MtNC4zLjMvbGliZmZpL3NyYy9wb3dlcnBjL3N5c3YuUworLS0tIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvcG93ZXJwYy9zeXN2LlMJMjAwNy0xMi0wMSAyMjowMDowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvbGliZmZpL3NyYy9wb3dlcnBjL3N5c3YuUwkyMDA5LTAxLTI3IDIyOjI1OjI3LjAwMDAwMDAwMCArMDEwMAorQEAgLTIyMywzICsyMjMsNyBAQAorICAgICAgIC5hbGlnbiAyCisgLkxFRkRFMToKKyAjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9zMzkwL3N5c3YuUyBnY2MtNC4zLjMvbGliZmZpL3NyYy9zMzkwL3N5c3YuUworLS0tIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvczM5MC9zeXN2LlMJMjAwMy0xMC0yMSAyMTowMTo1OC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGliZmZpL3NyYy9zMzkwL3N5c3YuUwkyMDA5LTAxLTI3IDIyOjI1OjI3LjAwMDAwMDAwMCArMDEwMAorQEAgLTQyNywzICs0MjcsNiBAQAorIAorICNlbmRpZgorIAorKyNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL3NwYXJjL3Y4LlMgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvc3BhcmMvdjguUworLS0tIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvc3BhcmMvdjguUwkyMDA4LTExLTIxIDIzOjEzOjEzLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9saWJmZmkvc3JjL3NwYXJjL3Y4LlMJMjAwOS0wMS0yNyAyMjoyNToyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zMDYsMyArMzA2LDcgQEAKKyAJLmJ5dGUJMHgxZgkhIHVsZWIxMjggMHgxZgorIAkuYWxpZ24JV1MKKyAuTExFRkRFMjoKKysKKysjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9zcGFyYy92OS5TIGdjYy00LjMuMy9saWJmZmkvc3JjL3NwYXJjL3Y5LlMKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL3NwYXJjL3Y5LlMJMjAwNC0wMS0yNSAwNzo1ODozMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvbGliZmZpL3NyYy9zcGFyYy92OS5TCTIwMDktMDEtMjcgMjI6MjU6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtMzAwLDMgKzMwMCw3IEBACisgCS5hbGlnbiA4CisgLkxMRUZERTI6CisgI2VuZGlmCisrCisrI2lmZGVmIF9fbGludXhfXworKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMveDg2L3N5c3YuUyBnY2MtNC4zLjMvbGliZmZpL3NyYy94ODYvc3lzdi5TCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy94ODYvc3lzdi5TCTIwMDgtMDEtMzAgMTU6MzY6NTguMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2xpYmZmaS9zcmMveDg2L3N5c3YuUwkyMDA5LTAxLTI3IDIyOjI1OjI3LjAwMDAwMDAwMCArMDEwMAorQEAgLTQzMCwzICs0MzAsNyBAQAorICNlbmRpZgorIAorICNlbmRpZiAvKiBpZm5kZWYgX194ODZfNjRfXyAqLworKworKyNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL3g4Ni91bml4NjQuUyBnY2MtNC4zLjMvbGliZmZpL3NyYy94ODYvdW5peDY0LlMKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL3g4Ni91bml4NjQuUwkyMDA1LTA1LTA1IDA2OjA2OjM4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9saWJmZmkvc3JjL3g4Ni91bml4NjQuUwkyMDA5LTAxLTI3IDIyOjI1OjI3LjAwMDAwMDAwMCArMDEwMAorQEAgLTQxMCwzICs0MTAsNyBAQAorIC5MRUZERTM6CisgCisgI2VuZGlmIC8qIF9feDg2XzY0X18gKi8KKysKKysjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMjMwLXByMzQ1NzEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzIzMC1wcjM0NTcxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyOGExY2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzIzMC1wcjM0NTcxLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzIzMC1wcjM0NTcxLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vNjRfYWxsX2djYzQzLXByMzQ1NzEucGF0Y2gKK2h0dHA6Ly9nY2MuZ251Lm9yZy9QUjM0NTcxCisKKzIwMDctMTItMjYgIFJhc2sgSW5nZW1hbm4gTGFtYmVydHNlbiAgPHJhc2tAc3lnZWh1cy5kaz4KKworCVBSIHRhcmdldC8zNDU3MQorCSogY29uZmlnL2FscGhhL2FscGhhLmMgKGFscGhhX2Nhbm5vdF9mb3JjZV9jb25zdF9tZW0pOiBVc2UKKwlzeW1ib2xpY19vcGVyYW5kLgorCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdGFudF9wb29sXzEpOiBGaXggdHlwby4KKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvYWxwaGEvYWxwaGEuYyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5jCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5jCTIwMDgtMDktMDkgMDE6MTY6NTUuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvYWxwaGEvYWxwaGEuYwkyMDA5LTAxLTI3IDIyOjI1OjI5LjAwMDAwMDAwMCArMDEwMAorQEAgLTExMTMsOCArMTExMyw3IEBACisgc3RhdGljIGJvb2wKKyBhbHBoYV9jYW5ub3RfZm9yY2VfY29uc3RfbWVtIChydHggeCkKKyB7CistICBlbnVtIHJ0eF9jb2RlIGNvZGUgPSBHRVRfQ09ERSAoeCk7CistICByZXR1cm4gY29kZSA9PSBTWU1CT0xfUkVGIHx8IGNvZGUgPT0gTEFCRUxfUkVGIHx8IGNvZGUgPT0gQ09OU1Q7CisrICByZXR1cm4gc3ltYm9saWNfb3BlcmFuZCAoeCwgR0VUX01PREUgKHgpKTsKKyB9CisgCisgLyogV2UgZG8gbm90IGFsbG93IGluZGlyZWN0IGNhbGxzIHRvIGJlIG9wdGltaXplZCBpbnRvIHNpYmxpbmcgY2FsbHMsIG5vcgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNS8yNDAtcHIyNTM0My5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMjQwLXByMjUzNDMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdkNjMxOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMjQwLXByMjUzNDMucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMjQwLXByMjUzNDMucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby82Nl9hbGxfZ2NjNDMtcHIyNTM0My5wYXRjaAoraHR0cDovL2djYy5nbnUub3JnL1BSMjUzNDMKKworc25pcGVkIGZyb20gRGViaWFuCisKKzIwMDgtMDQtMjcgIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorCisJKiBjb25maWcvaG9zdC1saW51eC5jIChUUllfRU1QVFlfVk1fU1BBQ0UpOiBEZWZpbmUgZm9yIF9fbWM2ODAwMF9fLgorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9ob3N0LWxpbnV4LmMgZ2NjLTQuMy4zL2djYy9jb25maWcvaG9zdC1saW51eC5jCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9ob3N0LWxpbnV4LmMJMjAwNy0wOC0wMiAxMjo0OTozMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9ob3N0LWxpbnV4LmMJMjAwOS0wMS0yNyAyMjoyNTozMS4wMDAwMDAwMDAgKzAxMDAKK0BAIC04NCw2ICs4NCw4IEBACisgIyBkZWZpbmUgVFJZX0VNUFRZX1ZNX1NQQUNFCTB4ODAwMDAwMDAwMAorICNlbGlmIGRlZmluZWQoX19zcGFyY19fKQorICMgZGVmaW5lIFRSWV9FTVBUWV9WTV9TUEFDRQkweDYwMDAwMDAwCisrI2VsaWYgZGVmaW5lZChfX21jNjgwMDBfXykKKysjIGRlZmluZSBUUllfRU1QVFlfVk1fU1BBQ0UJMHg0MDAwMDAwMAorICNlbHNlCisgIyBkZWZpbmUgVFJZX0VNUFRZX1ZNX1NQQUNFCTAKKyAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMjUwLXNoLXByMjQ4MzYucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzI1MC1zaC1wcjI0ODM2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MjhiMzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzI1MC1zaC1wcjI0ODM2LnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzI1MC1zaC1wcjI0ODM2LnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vNzRfYWxsX3NoLXByMjQ4MzYucGF0Y2gKK2h0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvbWFpbGFyY2hpdmUvZm9ydW0ucGhwP3RocmVhZF9pZD04OTU5MzA0JmZvcnVtX2lkPTUzNDgKK2h0dHA6Ly9nY2MuZ251Lm9yZy9QUjI0ODM2CisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlndXJlIGdjYy00LjMuMy9nY2MvY29uZmlndXJlCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZ3VyZQkyMDA5LTAxLTI3IDIyOjE5OjE4LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlndXJlCTIwMDktMDEtMjcgMjI6MjU6MzMuMDAwMDAwMDAwICswMTAwCitAQCAtMjA2ODksNyArMjA2ODksNyBAQAorIAl0bHNfZmlyc3RfbWlub3I9MTQKKyAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCisgCTs7CistICBzaC0qLSogfCBzaFszNF0tKi0qKQorKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCisgICAgIGNvbmZ0ZXN0X3M9JworIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKKyBmb286CS5sb25nCTI1CitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWd1cmUuYWMgZ2NjLTQuMy4zL2djYy9jb25maWd1cmUuYWMKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlndXJlLmFjCTIwMDktMDEtMjcgMjI6MTk6MTguMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWd1cmUuYWMJMjAwOS0wMS0yNyAyMjoyNTozMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNTUyLDcgKzI1NTIsNyBAQAorIAl0bHNfZmlyc3RfbWlub3I9MTQKKyAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCisgCTs7CistICBzaC0qLSogfCBzaFszNF0tKi0qKQorKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCisgICAgIGNvbmZ0ZXN0X3M9JworIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKKyBmb286CS5sb25nCTI1CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzI2MC11Y2xpYmMtY29uZi1ub3Vwc3RyZWFtLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNS8yNjAtdWNsaWJjLWNvbmYtbm91cHN0cmVhbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDQ2MDMwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNS8yNjAtdWNsaWJjLWNvbmYtbm91cHN0cmVhbS5wYXRjaApAQCAtMCwwICsxLDE4IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8yNjAtdWNsaWJjLWNvbmYtbm91cHN0cmVhbS5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvdWNsaWJjLzkwX2FsbF8xMDMtdWNsaWJjLWNvbmYtbm91cHN0cmVhbS5wYXRjaAorLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcuZ2NjIGdjYy00LjMuMy9nY2MvY29uZmlnLmdjYworLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcuZ2NjCTIwMDktMDEtMjcgMjI6MTk6MzQuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcuZ2NjCTIwMDktMDEtMjcgMjI6MjU6MzUuMDAwMDAwMDAwICswMTAwCitAQCAtMjE0Niw3ICsyMTQ2LDcgQEAKKyAgICAgICAgIDs7Cisgc2gtKi1lbGYqIHwgc2hbMTIzNDZsXSotKi1lbGYqIHwgc2gqLSota2FvcyogfCBcCisgc2gtKi1zeW1iaWFuZWxmKiB8IHNoWzEyMzQ2bF0qLSotc3ltYmlhbmVsZiogfCBcCistICBzaC0qLWxpbnV4KiB8IHNoWzM0NmxiZV0qLSotbGludXgqIHwgXAorKyAgc2gqLSotbGludXgqIHwgc2hbMzQ2bGJlXSotKi1saW51eCogfCBcCisgICBzaC0qLW5ldGJzZGVsZiogfCBzaGwqLSotbmV0YnNkZWxmKiB8IHNoNS0qLW5ldGJzZCogfCBzaDVsKi0qLW5ldGJzZCogfCBcCisgICAgc2g2NC0qLW5ldGJzZCogfCBzaDY0bCotKi1uZXRic2QqKQorIAl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IHNoL3Qtc2ggc2gvdC1lbGYiCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzI3MC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzI3MC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYzNmY0NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMjcwLW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApAQCAtMCwwICsxLDE4IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8yNzAtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS91Y2xpYmMvOTBfYWxsXzMwMS1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9ib2VobS1nYy9pbmNsdWRlL2djLmggZ2NjLTQuMy4zL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAorLS0tIGdjYy00LjMuMy5vcmlnL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAkyMDA3LTA0LTIzIDIzOjEwOjA5LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9ib2VobS1nYy9pbmNsdWRlL2djLmgJMjAwOS0wMS0yNyAyMjoyNTozNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC01MDMsNyArNTAzLDcgQEAKKyAjaWYgZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoX19HTElCQ19fKQorICMgaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyAjIGlmIChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMSB8fCBfX0dMSUJDX18gPiAyKSBcCistICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykKKysgICAgICYmICFkZWZpbmVkKF9faWE2NF9fKSAmJiAhZGVmaW5lZChfX1VDTElCQ19fKQorICMgICBpZm5kZWYgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQorICMgICAgIGRlZmluZSBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgIGVuZGlmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzI4MC1jOTktY29tcGxleC11Z2x5LWhhY2sucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzI4MC1jOTktY29tcGxleC11Z2x5LWhhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU4ODY0NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMjgwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaApAQCAtMCwwICsxLDE5IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8yODAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS91Y2xpYmMvOTBfYWxsXzMwMy1jOTktY29tcGxleC11Z2x5LWhhY2sucGF0Y2gKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJzdGRjKystdjMvY29uZmlndXJlIGdjYy00LjMuMy9saWJzdGRjKystdjMvY29uZmlndXJlCistLS0gZ2NjLTQuMy4zLm9yaWcvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQkyMDA4LTA3LTA3IDIxOjQ5OjU0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9saWJzdGRjKystdjMvY29uZmlndXJlCTIwMDktMDEtMjcgMjI6MjU6MzkuMDAwMDAwMDAwICswMTAwCitAQCAtMzg5MzUsNiArMzg5MzUsOSBAQAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgI2luY2x1ZGUgPGNvbXBsZXguaD4KKysjaWZkZWYgX19VQ0xJQkNfXworKyNlcnJvciB1Z2x5IGhhY2sgdG8gbWFrZSBzdXJlIGNvbmZpZ3VyZSB0ZXN0IGZhaWxzIGhlcmUgZm9yIGNyb3NzIHVudGlsIHVDbGliYyBzdXBwb3J0cyB0aGUgY29tcGxleCBmdW5jcworKyNlbmRpZgorIGludAorIG1haW4gKCkKKyB7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzI5MC1pbmRleF9tYWNyby5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMjkwLWluZGV4X21hY3JvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYjg5OWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzI5MC1pbmRleF9tYWNyby5wYXRjaApAQCAtMCwwICsxLDMyIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8yOTAtaW5kZXhfbWFjcm8ucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL3VjbGliYy85MF9hbGxfMzA0LWluZGV4X21hY3JvLnBhdGNoCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUgZ2NjLTQuMy4zL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCistLS0gZ2NjLTQuMy4zLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUJMjAwOC0wNy0xNSAxMjoxNDo1MS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUJMjAwOS0wMS0yNyAyMjoyNTo0MS4wMDAwMDAwMDAgKzAxMDAKK0BAIC01OSw2ICs1OSw5IEBACisgI2luY2x1ZGUgPGJpdHMvZ3Roci5oPgorICNpbmNsdWRlIDx0cjEvZnVuY3Rpb25hbD4KKyAKKysvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCisrI3VuZGVmIGluZGV4CisrCisgIyBpZmRlZiBfX0dDCisgIyAgIGRlZmluZSBfX0dDX0NPTlNUIGNvbnN0CisgIyBlbHNlCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oIGdjYy00LjMuMy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAorLS0tIGdjYy00LjMuMy5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCTIwMDctMDUtMDQgMTc6MDY6NDYuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCTIwMDktMDEtMjcgMjI6MjU6NDEuMDAwMDAwMDAwICswMTAwCitAQCAtNTQsNiArNTQsOSBAQAorICNpbmNsdWRlIDxleHQvbWVtb3J5PiAvLyBGb3IgdW5pbml0aWFsaXplZF9jb3B5X24KKyAjaW5jbHVkZSA8ZXh0L251bWVyaWM+IC8vIEZvciBwb3dlcgorIAorKy8qIGNvcGUgdy8gaW5kZXggZGVmaW5lZCBhcyBtYWNybywgU3VTdjMgcHJvcG9zYWwgKi8KKysjdW5kZWYgaW5kZXgKKysKKyBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorIAorICAgdXNpbmcgc3RkOjpzaXplX3Q7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzMwMC1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMzAwLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMjBkYTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzMwMC1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaApAQCAtMCwwICsxLDU0IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8zMDAtbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL3VjbGliYy85MF9hbGxfMzA1LWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGlibXVkZmxhcC9tZi1ob29rczIuYyBnY2MtNC4zLjMvbGlibXVkZmxhcC9tZi1ob29rczIuYworLS0tIGdjYy00LjMuMy5vcmlnL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMJMjAwNS0wOS0yMyAyMzo1ODozOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGlibXVkZmxhcC9tZi1ob29rczIuYwkyMDA5LTAxLTI3IDIyOjI1OjQ1LjAwMDAwMDAwMCArMDEwMAorQEAgLTQyNyw3ICs0MjcsNyBAQAorIHsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIG4sIF9fTUZfQ0hFQ0tfV1JJVEUsICJiemVybyByZWdpb24iKTsKKy0gIGJ6ZXJvIChzLCBuKTsKKysgIG1lbXNldCAocywgMCwgbik7CisgfQorIAorIAorQEAgLTQzNyw3ICs0MzcsNyBAQAorICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQoc3JjLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY29weSBzcmMiKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChkZXN0LCBuLCBfX01GX0NIRUNLX1dSSVRFLCAiYmNvcHkgZGVzdCIpOworLSAgYmNvcHkgKHNyYywgZGVzdCwgbik7CisrICBtZW1tb3ZlIChkZXN0LCBzcmMsIG4pOworIH0KKyAKKyAKK0BAIC00NDcsNyArNDQ3LDcgQEAKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMxLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY21wIDFzdCBhcmciKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzMiwgbiwgX19NRl9DSEVDS19SRUFELCAiYmNtcCAybmQgYXJnIik7CistICByZXR1cm4gYmNtcCAoczEsIHMyLCBuKTsKKysgIHJldHVybiBtZW1jbXAgKHMxLCBzMiwgbik7CisgfQorIAorIAorQEAgLTQ1Niw3ICs0NTYsNyBAQAorICAgc2l6ZV90IG4gPSBzdHJsZW4gKHMpOworICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQocywgQ0xBTVBBREQobiwgMSksIF9fTUZfQ0hFQ0tfUkVBRCwgImluZGV4IHJlZ2lvbiIpOworLSAgcmV0dXJuIGluZGV4IChzLCBjKTsKKysgIHJldHVybiBzdHJjaHIgKHMsIGMpOworIH0KKyAKKyAKK0BAIC00NjUsNyArNDY1LDcgQEAKKyAgIHNpemVfdCBuID0gc3RybGVuIChzKTsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIENMQU1QQUREKG4sIDEpLCBfX01GX0NIRUNLX1JFQUQsICJyaW5kZXggcmVnaW9uIik7CistICByZXR1cm4gcmluZGV4IChzLCBjKTsKKysgIHJldHVybiBzdHJyY2hyIChzLCBjKTsKKyB9CisgCisgLyogWFhYOiAgc3RwY3B5LCBtZW1jY3B5ICovCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzMxMC1hcm0tc29mdGZsb2F0LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNS8zMTAtYXJtLXNvZnRmbG9hdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGRlNDVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNS8zMTAtYXJtLXNvZnRmbG9hdC5wYXRjaApAQCAtMCwwICsxLDM0IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8zMTAtYXJtLXNvZnRmbG9hdC5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDA3LTExLTA4IDE0OjQ0OjA5LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDA5LTAxLTI3IDIyOjI1OjQ3LjAwMDAwMDAwMCArMDEwMAorQEAgLTYwLDcgKzYwLDcgQEAKKyAgICAle3NoYXJlZDotbGN9IFwKKyAgICAleyFzaGFyZWQ6JXtwcm9maWxlOi1sY19wfSV7IXByb2ZpbGU6LWxjfX0iCisgCistI2RlZmluZSBMSUJHQ0NfU1BFQyAiJXttc29mdC1mbG9hdDotbGZsb2F0fSAle21mbG9hdC1hYmk9c29mdCo6LWxmbG9hdH0gLWxnY2MiCisrI2RlZmluZSBMSUJHQ0NfU1BFQyAiLWxnY2MiCisgCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorIAorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FybS90LWxpbnV4IGdjYy00LjMuMy9nY2MvY29uZmlnL2FybS90LWxpbnV4CistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hcm0vdC1saW51eAkyMDA2LTExLTA5IDIzOjE0OjI3LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL2FybS90LWxpbnV4CTIwMDktMDEtMjcgMjI6MjU6NDcuMDAwMDAwMDAwICswMTAwCitAQCAtMyw3ICszLDEyIEBACisgVEFSR0VUX0xJQkdDQzJfQ0ZMQUdTID0gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZQSUMKKyAKKyBMSUIxQVNNU1JDID0gYXJtL2xpYjFmdW5jcy5hc20KKy1MSUIxQVNNRlVOQ1MgPSBfdWRpdnNpMyBfZGl2c2kzIF91bW9kc2kzIF9tb2RzaTMgX2R2bWRfbG54CisrTElCMUFTTUZVTkNTID0gX3VkaXZzaTMgX2RpdnNpMyBfdW1vZHNpMyBfbW9kc2kzIF9kdm1kX3RscyBfYmJfaW5pdF9mdW5jIFwKKysJX2NhbGxfdmlhX3JYIF9pbnRlcndvcmtfY2FsbF92aWFfclggXAorKwlfbHNocmRpMyBfYXNocmRpMyBfYXNobGRpMyBcCisrCV9uZWdkZjIgX2FkZHN1YmRmMyBfbXVsZGl2ZGYzIF9jbXBkZjIgX3Vub3JkZGYyIF9maXhkZnNpIF9maXh1bnNkZnNpIFwKKysJX3RydW5jZGZzZjIgX25lZ3NmMiBfYWRkc3Vic2YzIF9tdWxkaXZzZjMgX2NtcHNmMiBfdW5vcmRzZjIgXAorKwlfZml4c2ZzaSBfZml4dW5zc2ZzaSBfZmxvYXRkaWRmIF9mbG9hdGRpc2YgX2Zsb2F0dW5kaWRmIF9mbG9hdHVuZGlzZgorIAorICMgTVVMVElMSUJfT1BUSU9OUyA9IG1oYXJkLWZsb2F0L21zb2Z0LWZsb2F0CisgIyBNVUxUSUxJQl9ESVJOQU1FUyA9IGhhcmQtZmxvYXQgc29mdC1mbG9hdApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNS8zMjAtYWxwaGEtc2lnbmFsX2gucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzMyMC1hbHBoYS1zaWduYWxfaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjRkZjNlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNS8zMjAtYWxwaGEtc2lnbmFsX2gucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMzIwLWFscGhhLXNpZ25hbF9oLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvYWxwaGEvbGludXgtdW53aW5kLmggZ2NjLTQuMy4zL2djYy9jb25maWcvYWxwaGEvbGludXgtdW53aW5kLmgKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FscGhhL2xpbnV4LXVud2luZC5oCTIwMDYtMTAtMjYgMjE6MzE6MDkuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvYWxwaGEvbGludXgtdW53aW5kLmgJMjAwOS0wMS0yNyAyMjoyNTo0OS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yOSw2ICsyOSw5IEBACisgLyogRG8gY29kZSByZWFkaW5nIHRvIGlkZW50aWZ5IGEgc2lnbmFsIGZyYW1lLCBhbmQgc2V0IHRoZSBmcmFtZQorICAgIHN0YXRlIGRhdGEgYXBwcm9wcmlhdGVseS4gIFNlZSB1bndpbmQtZHcyLmMgZm9yIHRoZSBzdHJ1Y3RzLiAgKi8KKyAKKysvKiBEb24ndCB1c2UgdGhpcyBpZiBpbmhpYml0X2xpYmMgaXMgc2V0CisrICAgVGhlIGJ1aWxkIGZvciB0aGlzIHRhcmdldCB3aWxsIGZhaWwgdHJ5aW5nIHRvIGluY2x1ZGUgbWlzc2luZyBoZWFkZXJzICovCisrI2lmbmRlZiBpbmhpYml0X2xpYmMKKyAjaW5jbHVkZSA8c2lnbmFsLmg+CisgI2luY2x1ZGUgPHN5cy91Y29udGV4dC5oPgorIAorQEAgLTgwLDMgKzgzLDQgQEAKKyAgIGZzLT5yZXRhZGRyX2NvbHVtbiA9IDY0OworICAgcmV0dXJuIF9VUkNfTk9fUkVBU09OOworIH0KKysjZW5kaWYgLyogaW5oaWJpdF9saWJjICovCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzMzMC11bndpbmQtZm9yLXVDbGliYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMzMwLXVud2luZC1mb3ItdUNsaWJjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOTdjMmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzMzMC11bndpbmQtZm9yLXVDbGliYy5wYXRjaApAQCAtMCwwICsxLDMwIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8zMzAtdW53aW5kLWZvci11Q2xpYmMucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy90LWxpbnV4LXVjbGliYyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy90LWxpbnV4LXVjbGliYworLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvdC1saW51eC11Y2xpYmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy90LWxpbnV4LXVjbGliYwkyMDA5LTAxLTI3IDIyOjI4OjUzLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSw1IEBACisrIyBSZW1vdmUgZ2xpYmMgc3BlY2lmaWMgZmlsZXMgYWRkZWQgaW4gdC1saW51eAorK1NITElCX01BUEZJTEVTIDo9ICQoZmlsdGVyLW91dCAkKHNyY2RpcikvY29uZmlnL2xpYmdjYy1nbGliYy52ZXIsICQoU0hMSUJfTUFQRklMRVMpKQorKworKyMgVXNlIHVud2luZC1kdzItZmRlIGluc3RlYWQgb2YgdW53aW5kLWR3Mi1mZGUtZ2xpYmMKKytMSUIyQURERUggOj0gJChzdWJzdCB1bndpbmQtZHcyLWZkZS1nbGliYy5jLHVud2luZC1kdzItZmRlLmMsJChMSUIyQURERUgpKQorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnLmdjYyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy5nY2MKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnLmdjYwkyMDA5LTAxLTI3IDIyOjI1OjM3LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnLmdjYwkyMDA5LTAxLTI3IDIyOjI4OjUzLjAwMDAwMDAwMCArMDEwMAorQEAgLTI2NDgsNiArMjY0OCwxMiBAQAorIAk7OworIGVzYWMKKyAKKysjIFJhdGhlciB0aGFuIGhvb2sgaW50byBlYWNoIHRhcmdldCwganVzdCBkbyBpdCBhZnRlciBhbGwgdGhlIGxpbnV4CisrIyB0YXJnZXRzIGhhdmUgYmVlbiBwcm9jZXNzZWQKKytjYXNlICR7dGFyZ2V0fSBpbgorKyAgKi1saW51eC11Y2xpYmMqKSB0bV9kZWZpbmVzPSIke3RtX2RlZmluZXN9IFVTRV9VQ0xJQkMiIDsgdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSB0LWxpbnV4LXVjbGliYyI7OworK2VzYWMKKysKKyBjYXNlICR7dGFyZ2V0fSBpbgorIGlbMzQ1NjddODYtKi1saW51eCphb3V0KiB8IGlbMzQ1NjddODYtKi1saW51eCpsaWJjMSkKKyAJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSBpMzg2L3QtZ21tX21hbGxvYyIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMzQwLW1ha2UtbW5vLXNwZS13b3JrLWFzLWV4cGVjdGVkLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNS8zNDAtbWFrZS1tbm8tc3BlLXdvcmstYXMtZXhwZWN0ZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQyZDIwMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMzQwLW1ha2UtbW5vLXNwZS13b3JrLWFzLWV4cGVjdGVkLnBhdGNoCkBAIC0wLDAgKzEsOTAgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzM0MC1tYWtlLW1uby1zcGUtd29yay1hcy1leHBlY3RlZC5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KKzIwMDgtMDQtMDMgIE5hdGhhbiBGcm95ZCAgPGZyb3lkbmpAY29kZXNvdXJjZXJ5LmNvbT4KKyAgICAgICAgICAgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGNvZGVzb3VyY2VyeS5jb20+CisKKyAgICAgICAgKiBjb25maWcvcnM2MDAwL3JzNjAwMC5vcHQgKG1zcGUpOiBSZW1vdmUgVmFyIHByb3BlcnR5LgorICAgICAgICAobWlzZWwpOiBMaWtld2lzZS4KKyAgICAgICAgKiBjb25maWcvcnM2MDAwL3JzNjAwMC5oIChyczYwMDBfc3BlKTogRGVjbGFyZS4KKyAgICAgICAgKHJzNjAwMF9pc2VsKTogTGlrZXdpc2UuCisgICAgICAgICogY29uZmlnL3JzNjAwMC9yczYwMDAuYyAocnM2MDAwX3NwZSk6IE5ldyB2YXJpYWJsZS4KKyAgICAgICAgKHJzNjAwMF9pc2VsKTogTmV3IHZhcmlhYmxlLgorICAgICAgICAocnM2MDAwX2hhbmRsZV9vcHRpb24pOiBIYW5kbGUgT1BUX21zcGUgYW5kIE9QVF9taXNlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmMgZ2NjLTQuMy4zL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5jCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmMJMjAwOC0xMS0xOCAyMzowNzo1OC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmMJMjAwOS0wMS0yNyAyMjoyODo1NS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNzQsOSArMTc0LDE1IEBACisgLyogTm9uemVybyB0byB1c2UgQWx0aVZlYyBBQkkuICAqLworIGludCByczYwMDBfYWx0aXZlY19hYmk7CisgCisrLyogTm9uemVybyBpZiB3ZSB3YW50IFNQRSBTSU1EIGluc3RydWN0aW9ucy4gICovCisraW50IHJzNjAwMF9zcGU7CisrCisgLyogTm9uemVybyBpZiB3ZSB3YW50IFNQRSBBQkkgZXh0ZW5zaW9ucy4gICovCisgaW50IHJzNjAwMF9zcGVfYWJpOworIAorKy8qIE5vbnplcm8gdG8gdXNlIGlzZWwgaW5zdHJ1Y3Rpb25zLiAgKi8KKytpbnQgcnM2MDAwX2lzZWw7CisrCisgLyogTm9uemVybyBpZiBmbG9hdGluZyBwb2ludCBvcGVyYXRpb25zIGFyZSBkb25lIGluIHRoZSBHUFJzLiAgKi8KKyBpbnQgcnM2MDAwX2Zsb2F0X2dwcnMgPSAwOworIAorQEAgLTIxNDQsMTEgKzIxNTAsMjEgQEAKKyAgICAgICByczYwMDBfcGFyc2VfeWVzX25vX29wdGlvbiAoInZyc2F2ZSIsIGFyZywgJihUQVJHRVRfQUxUSVZFQ19WUlNBVkUpKTsKKyAgICAgICBicmVhazsKKyAKKysgICAgY2FzZSBPUFRfbWlzZWw6CisrICAgICAgcnM2MDAwX2V4cGxpY2l0X29wdGlvbnMuaXNlbCA9IHRydWU7CisrICAgICAgcnM2MDAwX2lzZWwgPSB2YWx1ZTsKKysgICAgICBicmVhazsKKysKKyAgICAgY2FzZSBPUFRfbWlzZWxfOgorICAgICAgIHJzNjAwMF9leHBsaWNpdF9vcHRpb25zLmlzZWwgPSB0cnVlOworICAgICAgIHJzNjAwMF9wYXJzZV95ZXNfbm9fb3B0aW9uICgiaXNlbCIsIGFyZywgJihyczYwMDBfaXNlbCkpOworICAgICAgIGJyZWFrOworIAorKyAgICBjYXNlIE9QVF9tc3BlOgorKyAgICAgIHJzNjAwMF9leHBsaWNpdF9vcHRpb25zLnNwZSA9IHRydWU7CisrICAgICAgcnM2MDAwX3NwZSA9IHZhbHVlOworKyAgICAgIGJyZWFrOworKworICAgICBjYXNlIE9QVF9tc3BlXzoKKyAgICAgICByczYwMDBfZXhwbGljaXRfb3B0aW9ucy5zcGUgPSB0cnVlOworICAgICAgIHJzNjAwMF9wYXJzZV95ZXNfbm9fb3B0aW9uICgic3BlIiwgYXJnLCAmKHJzNjAwMF9zcGUpKTsKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmggZ2NjLTQuMy4zL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5oCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmgJMjAwOC0wMS0yNiAxODoxODozNS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmgJMjAwOS0wMS0yNyAyMjoyODo1NS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zNDksNiArMzQ5LDggQEAKKyBleHRlcm4gaW50IHJzNjAwMF9pZWVlcXVhZDsKKyBleHRlcm4gaW50IHJzNjAwMF9hbHRpdmVjX2FiaTsKKyBleHRlcm4gaW50IHJzNjAwMF9zcGVfYWJpOworK2V4dGVybiBpbnQgcnM2MDAwX3NwZTsKKytleHRlcm4gaW50IHJzNjAwMF9pc2VsOworIGV4dGVybiBpbnQgcnM2MDAwX2Zsb2F0X2dwcnM7CisgZXh0ZXJuIGludCByczYwMDBfYWxpZ25tZW50X2ZsYWdzOworIGV4dGVybiBjb25zdCBjaGFyICpyczYwMDBfc2NoZWRfaW5zZXJ0X25vcHNfc3RyOworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAub3B0IGdjYy00LjMuMy9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAub3B0CistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLm9wdAkyMDA3LTEwLTMxIDA4OjU2OjAxLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAub3B0CTIwMDktMDEtMjcgMjI6Mjg6NTUuMDAwMDAwMDAwICswMTAwCitAQCAtMTkwLDcgKzE5MCw3IEBACisgLW12cnNhdmU9eWVzL25vCURlcHJlY2F0ZWQgb3B0aW9uLiAgVXNlIC1tdnJzYXZlLy1tbm8tdnJzYXZlIGluc3RlYWQKKyAKKyBtaXNlbAorLVRhcmdldCBWYXIocnM2MDAwX2lzZWwpCisrVGFyZ2V0CisgR2VuZXJhdGUgaXNlbCBpbnN0cnVjdGlvbnMKKyAKKyBtaXNlbD0KK0BAIC0xOTgsNyArMTk4LDcgQEAKKyAtbWlzZWw9eWVzL25vCURlcHJlY2F0ZWQgb3B0aW9uLiAgVXNlIC1taXNlbC8tbW5vLWlzZWwgaW5zdGVhZAorIAorIG1zcGUKKy1UYXJnZXQgVmFyKHJzNjAwMF9zcGUpCisrVGFyZ2V0CisgR2VuZXJhdGUgU1BFIFNJTUQgaW5zdHJ1Y3Rpb25zIG9uIEU1MDAKKyAKKyBtcGFpcmVkCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzM1MC1zaC13aXRob3V0LWhlYWRlcnMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzM1MC1zaC13aXRob3V0LWhlYWRlcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJiODYwZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMzUwLXNoLXdpdGhvdXQtaGVhZGVycy5wYXRjaApAQCAtMCwwICsxLDI5IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8zNTAtc2gtd2l0aG91dC1oZWFkZXJzLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT24gMjAwODEwMTEsIEtoZW0gUkFKIHdyaXRlczoKKyBZb3UgaGF2ZSB0byBiYXIgZ2NjIHRyeWluZyB0byBidWlsZCB1bndpbmRpbmcgYXQgc3RhZ2UgMS4gVHJ5IHRoZQorIGF0dGFjaGVkIHBhdGNoIGFuZCBzZWUgaWYgaXQgaGVscHMuCisKKyBnY2MvY29uZmlnL3NoL2xpbnV4LXVud2luZC5oIHwgICAgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL3NoL2xpbnV4LXVud2luZC5oIGdjYy00LjMuMy9nY2MvY29uZmlnL3NoL2xpbnV4LXVud2luZC5oCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9zaC9saW51eC11bndpbmQuaAkyMDA3LTA5LTEyIDA4OjU5OjA2LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL3NoL2xpbnV4LXVud2luZC5oCTIwMDktMDEtMjcgMjI6Mjg6NTcuMDAwMDAwMDAwICswMTAwCitAQCAtMjYsNiArMjYsOCBAQAorIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworIAorKyNpZm5kZWYgaW5oaWJpdF9saWJjCisrCisgLyogRG8gY29kZSByZWFkaW5nIHRvIGlkZW50aWZ5IGEgc2lnbmFsIGZyYW1lLCBhbmQgc2V0IHRoZSBmcmFtZQorICAgIHN0YXRlIGRhdGEgYXBwcm9wcmlhdGVseS4gIFNlZSB1bndpbmQtZHcyLmMgZm9yIHRoZSBzdHJ1Y3RzLiAgKi8KKyAKK0BAIC0yNTEsMyArMjUzLDQgQEAKKyAgIHJldHVybiBfVVJDX05PX1JFQVNPTjsKKyB9CisgI2VuZGlmIC8qIGRlZmluZWQgKF9fU0g1X18pICovCisrI2VuZGlmIC8qIGlmbmRlZiBpbmhpYml0X2xpYmMgKi8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMzgwLXByMzc0MzYucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzM4MC1wcjM3NDM2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YTAxNmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzM4MC1wcjM3NDM2LnBhdGNoCkBAIC0wLDAgKzEsODYgQEAKK2djYyBzdm4gMTQyNzc4OgorCitQUiB0YXJnZXQvMzc0MzYKKyogYXJtLmMgKGFybV9sZWdpdGltYXRlX2luZGV4KTogT25seSBhY2NlcHQgYWRkcmVzc2VzIHRoYXQgYXJlIGluCitjYW5vbmljYWwgZm9ybS4KKyogcHJlZGljYXRlcy5tZCAoYXJtX3JlZ19vcl9leHRlbmRxaXNpX21lbV9vcCk6IE5ldyBwcmVkaWNhdGUuCisqIGFybS5tZCAoZXh0ZW5kcWloaTIpOiBVc2UgYXJtX3JlZ19vcl9leHRlbmRxaXNpX21lbV9vcCBwcmVkaWNhdGUKK2ZvciBvcGVyYW5kMS4KKyhleHRlbmRxaXNpMik6IExpa2V3aXNlLgorKGFybV9leHRlbmRxaXNpLCBhcm1fZXh0ZW5kcWlzaV92Nik6IFVzZSBhcm1fZXh0ZW5kcWlzaV9tZW1fb3AKK3ByZWRpY2F0ZSBmb3Igb3BlcmFuZDEuCisKK2RpZmYgLU51cmEgZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hcm0vYXJtLmMgZ2NjLTQuMy4zL2djYy9jb25maWcvYXJtL2FybS5jCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hcm0vYXJtLmMJMjAwOC0wNi0xMSAwNzo1Mjo1NS4wMDAwMDAwMDAgLTAzMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hcm0vYXJtLmMJMjAwOS0wNS0yMSAxNjowNjo0NS4wMDAwMDAwMDAgLTAzMDAKK0BAIC0zNzY5LDYgKzM3NjksNyBAQAorICAgICAgIHJ0eCB4b3AxID0gWEVYUCAoeCwgMSk7CisgCisgICAgICAgcmV0dXJuICgoYXJtX2FkZHJlc3NfcmVnaXN0ZXJfcnR4X3AgKHhvcDAsIHN0cmljdF9wKQorKwkgICAgICAgJiYgR0VUX0NPREUoeG9wMSkgPT0gQ09OU1RfSU5UCisgCSAgICAgICAmJiBhcm1fbGVnaXRpbWF0ZV9pbmRleF9wIChtb2RlLCB4b3AxLCBvdXRlciwgc3RyaWN0X3ApKQorIAkgICAgICB8fCAoYXJtX2FkZHJlc3NfcmVnaXN0ZXJfcnR4X3AgKHhvcDEsIHN0cmljdF9wKQorIAkJICAmJiBhcm1fbGVnaXRpbWF0ZV9pbmRleF9wIChtb2RlLCB4b3AwLCBvdXRlciwgc3RyaWN0X3ApKSk7CitkaWZmIC1OdXJhIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvYXJtL2FybS5tZCBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hcm0vYXJtLm1kCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hcm0vYXJtLm1kCTIwMDctMDktMDQgMDE6NDQ6NDcuMDAwMDAwMDAwIC0wMzAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvYXJtL2FybS5tZAkyMDA5LTA1LTIxIDE2OjA2OjQ1LjAwMDAwMDAwMCAtMDMwMAorQEAgLTQxOTksNyArNDE5OSw3IEBACisgCisgKGRlZmluZV9leHBhbmQgImV4dGVuZHFpaGkyIgorICAgWyhzZXQgKG1hdGNoX2R1cCAyKQorLQkoYXNoaWZ0OlNJIChtYXRjaF9vcGVyYW5kOlFJIDEgImdlbmVyYWxfb3BlcmFuZCIgIiIpCisrCShhc2hpZnQ6U0kgKG1hdGNoX29wZXJhbmQ6UUkgMSAiYXJtX3JlZ19vcl9leHRlbmRxaXNpX21lbV9vcCIgIiIpCisgCQkgICAoY29uc3RfaW50IDI0KSkpCisgICAgKHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJzX3JlZ2lzdGVyX29wZXJhbmQiICIiKQorIAkoYXNoaWZ0cnQ6U0kgKG1hdGNoX2R1cCAyKQorQEAgLTQyMjQsNyArNDIyNCw3IEBACisgCisgKGRlZmluZV9pbnNuICIqYXJtX2V4dGVuZHFpaGlfaW5zbiIKKyAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAgInNfcmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKy0JKHNpZ25fZXh0ZW5kOkhJIChtYXRjaF9vcGVyYW5kOlFJIDEgIm1lbW9yeV9vcGVyYW5kIiAiVXEiKSkpXQorKwkoc2lnbl9leHRlbmQ6SEkgKG1hdGNoX29wZXJhbmQ6UUkgMSAiYXJtX2V4dGVuZHFpc2lfbWVtX29wIiAiVXEiKSkpXQorICAgIlRBUkdFVF9BUk0gJiYgYXJtX2FyY2g0IgorICAgImxkciUoc2IlKVxcdCUwLCAlMSIKKyAgIFsoc2V0X2F0dHIgInR5cGUiICJsb2FkX2J5dGUiKQorQEAgLTQyMzUsNyArNDIzNSw3IEBACisgCisgKGRlZmluZV9leHBhbmQgImV4dGVuZHFpc2kyIgorICAgWyhzZXQgKG1hdGNoX2R1cCAyKQorLQkoYXNoaWZ0OlNJIChtYXRjaF9vcGVyYW5kOlFJIDEgImdlbmVyYWxfb3BlcmFuZCIgIiIpCisrCShhc2hpZnQ6U0kgKG1hdGNoX29wZXJhbmQ6UUkgMSAiYXJtX3JlZ19vcl9leHRlbmRxaXNpX21lbV9vcCIgIiIpCisgCQkgICAoY29uc3RfaW50IDI0KSkpCisgICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJzX3JlZ2lzdGVyX29wZXJhbmQiICIiKQorIAkoYXNoaWZ0cnQ6U0kgKG1hdGNoX2R1cCAyKQorQEAgLTQyNjcsNyArNDI2Nyw3IEBACisgCisgKGRlZmluZV9pbnNuICIqYXJtX2V4dGVuZHFpc2kiCisgICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJzX3JlZ2lzdGVyX29wZXJhbmQiICI9ciIpCistCShzaWduX2V4dGVuZDpTSSAobWF0Y2hfb3BlcmFuZDpRSSAxICJtZW1vcnlfb3BlcmFuZCIgIlVxIikpKV0KKysJKHNpZ25fZXh0ZW5kOlNJIChtYXRjaF9vcGVyYW5kOlFJIDEgImFybV9leHRlbmRxaXNpX21lbV9vcCIgIlVxIikpKV0KKyAgICJUQVJHRVRfQVJNICYmIGFybV9hcmNoNCAmJiAhYXJtX2FyY2g2IgorICAgImxkciUoc2IlKVxcdCUwLCAlMSIKKyAgIFsoc2V0X2F0dHIgInR5cGUiICJsb2FkX2J5dGUiKQorQEAgLTQyNzgsNyArNDI3OCw4IEBACisgCisgKGRlZmluZV9pbnNuICIqYXJtX2V4dGVuZHFpc2lfdjYiCisgICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJzX3JlZ2lzdGVyX29wZXJhbmQiICI9cixyIikKKy0JKHNpZ25fZXh0ZW5kOlNJIChtYXRjaF9vcGVyYW5kOlFJIDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAicixVcSIpKSldCisrCShzaWduX2V4dGVuZDpTSQorKwkgKG1hdGNoX29wZXJhbmQ6UUkgMSAiYXJtX3JlZ19vcl9leHRlbmRxaXNpX21lbV9vcCIgInIsVXEiKSkpXQorICAgIlRBUkdFVF9BUk0gJiYgYXJtX2FyY2g2IgorICAgIkAKKyAgICBzeHRiJT9cXHQlMCwgJTEKK2RpZmYgLU51cmEgZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hcm0vcHJlZGljYXRlcy5tZCBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hcm0vcHJlZGljYXRlcy5tZAorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvYXJtL3ByZWRpY2F0ZXMubWQJMjAwNy0wOC0wMiAwNzo0OTozMS4wMDAwMDAwMDAgLTAzMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hcm0vcHJlZGljYXRlcy5tZAkyMDA5LTA1LTIxIDE2OjA2OjQ1LjAwMDAwMDAwMCAtMDMwMAorQEAgLTIzNCw2ICsyMzQsMTAgQEAKKyAgICAgICAgKG1hdGNoX3Rlc3QgImFybV9sZWdpdGltYXRlX2FkZHJlc3NfcCAobW9kZSwgWEVYUCAob3AsIDApLCBTSUdOX0VYVEVORCwKKyAJCQkJCSAgICAgIDApIikpKQorIAorKyhkZWZpbmVfc3BlY2lhbF9wcmVkaWNhdGUgImFybV9yZWdfb3JfZXh0ZW5kcWlzaV9tZW1fb3AiCisrICAoaW9yIChtYXRjaF9vcGVyYW5kIDAgImFybV9leHRlbmRxaXNpX21lbV9vcCIpCisrICAgICAgIChtYXRjaF9vcGVyYW5kIDAgInNfcmVnaXN0ZXJfb3BlcmFuZCIpKSkKKysKKyAoZGVmaW5lX3ByZWRpY2F0ZSAicG93ZXJfb2ZfdHdvX29wZXJhbmQiCisgICAobWF0Y2hfY29kZSAiY29uc3RfaW50IikKKyB7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzM5MC11bmJyZWFrLWFybXY0dC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvMzkwLXVuYnJlYWstYXJtdjR0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMTRlMGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzM5MC11bmJyZWFrLWFybXY0dC5wYXRjaApAQCAtMCwwICsxLDExIEBACistLS0gZ2NjLTQuMy4yLm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCTIwMDktMDktMDggMjM6NDY6NDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4yL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAkyMDA5LTA5LTA4IDIzOjQ2OjUxLjAwMDAwMDAwMCArMDIwMAorQEAgLTQ0LDcgKzQ0LDcgQEAKKyAgICBUaGUgQVJNMTBURE1JIGNvcmUgaXMgdGhlIGRlZmF1bHQgZm9yIGFybXY1dCwgc28gc2V0CisgICAgU1VCVEFSR0VUX0NQVV9ERUZBVUxUIHRvIGFjaGlldmUgdGhpcy4gICovCisgI3VuZGVmICBTVUJUQVJHRVRfQ1BVX0RFRkFVTFQKKy0jZGVmaW5lIFNVQlRBUkdFVF9DUFVfREVGQVVMVCBUQVJHRVRfQ1BVX2FybTEwdGRtaQorKyNkZWZpbmUgU1VCVEFSR0VUX0NQVV9ERUZBVUxUIFRBUkdFVF9DUFVfYXJtOXRkbWkKKyAKKyAvKiBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUIGlzIHNldCBpbgorICAgIGNvbmZpZy5nY2MgZm9yIGJpZyBlbmRpYW4gY29uZmlndXJhdGlvbnMuICAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNS80MDAtZWNqeC1ob3N0LWNjLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNS80MDAtZWNqeC1ob3N0LWNjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MzA2OWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzQwMC1lY2p4LWhvc3QtY2MucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorZGlmZiAtdXIgZ2NjLTQuMy40LW9yaWcvbGliamF2YS9NYWtlZmlsZS5pbiBnY2MtNC4zLjQvbGliamF2YS9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjMuNC1vcmlnL2xpYmphdmEvTWFrZWZpbGUuaW4JMjAwOS0wOC0wNCAwNDoxMjoyNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBnY2MtNC4zLjQvbGliamF2YS9NYWtlZmlsZS5pbgkyMDA5LTA5LTIzIDIyOjAzOjE1Ljc1MDk1MTQ4MyAtMDcwMAorQEAgLTg4NzQsNiArODg3NCw5IEBACisgZWNqeCQoRVhFRVhUKTogJChlY2p4X09CSkVDVFMpICQoZWNqeF9ERVBFTkRFTkNJRVMpIAorIAlAcm0gLWYgZWNqeCQoRVhFRVhUKQorIAkkKGVjanhfTElOSykgJChlY2p4X0xERkxBR1MpICQoZWNqeF9PQkpFQ1RTKSAkKGVjanhfTERBREQpICQoTElCUykKKytlY2p4LiQoT0JKRVhUKTogJChlY2p4X1NPVVJDRVMpCisrCUBybSAtZiBlY2p4LiQoT0JKRVhUKQorKwkkKENDX0ZPUl9CVUlMRCkgJChCVUlMRF9DRkxBR1MpIC1jIC1vICRAICQ8CisgZ2FwcGxldHZpZXdlciQoRVhFRVhUKTogJChnYXBwbGV0dmlld2VyX09CSkVDVFMpICQoZ2FwcGxldHZpZXdlcl9ERVBFTkRFTkNJRVMpIAorIAlAcm0gLWYgZ2FwcGxldHZpZXdlciQoRVhFRVhUKQorIAkkKGdhcHBsZXR2aWV3ZXJfTElOSykgJChnYXBwbGV0dmlld2VyX0xERkxBR1MpICQoZ2FwcGxldHZpZXdlcl9PQkpFQ1RTKSAkKGdhcHBsZXR2aWV3ZXJfTERBREQpICQoTElCUykKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvNDEwLXByNDIyODktZml4LWxpYmZmaS1idWlsZC1vbi1hcm0tb2FiaS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvNDEwLXByNDIyODktZml4LWxpYmZmaS1idWlsZC1vbi1hcm0tb2FiaS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjU0ODc5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNS80MTAtcHI0MjI4OS1maXgtbGliZmZpLWJ1aWxkLW9uLWFybS1vYWJpLnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKKy0tLSBnY2MtNC4zLjQvbGliZmZpL3NyYy9hcm0vc3lzdi5TCQorKysrIGdjYy00LjMuNC9saWJmZmkvc3JjL2FybS9zeXN2LlMJCitAQCAtMjM1LDcgKzIzNSw3IEBAIEFSTV9GVU5DX1NUQVJUIGZmaV9jbG9zdXJlX1NZU1YKKyAJc3RtZmQJc3AhLCB7aXAsIGxyfQorIAlVTldJTkQgLnNhdmUJe3IwLCBscn0KKyAJYWRkCXIyLCBzcCwgIzgKKy0JLnBhZCAjMTYKKysJVU5XSU5EIC5wYWQgIzE2CisgCXN1YglzcCwgc3AsICMxNgorIAlzdHIJc3AsIFtzcCwgIzhdCisgCWFkZAlyMSwgc3AsICM4CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzQyMC1saWJnY2NfZWguYS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjUvNDIwLWxpYmdjY19laC5hLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NDE5OGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy41LzQyMC1saWJnY2NfZWguYS5wYXRjaApAQCAtMCwwICsxLDM5IEBACitIaWdobHkgaW5zcGlyZWQgYnk6CisgIGh0dHA6Ly9sYW5kbGV5Lm5ldC9oZy9hYm9yaWdpbmFsL2ZpbGUvN2UwNzQ3YTY2NWFiL3NvdXJjZXMvcGF0Y2hlcy9nY2MtY29yZS1saWJnY2NlaC5wYXRjaAorCitkaWZmIC1kdXJOIGdjYy00LjMuMi5vcmlnLy9saWJnY2MvTWFrZWZpbGUuaW4gZ2NjLTQuMy4yL2xpYmdjYy9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjMuMi5vcmlnLy9saWJnY2MvTWFrZWZpbGUuaW4JMjAwOC0wNi0xNyAxMTozMjozNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjIvbGliZ2NjL01ha2VmaWxlLmluCTIwMTEtMDktMDIgMTI6Mjc6MzkuMjk2NTM4OTU1ICswMjAwCitAQCAtNzA1LDggKzcwNSw5IEBACisgbGliZ2NjX3MkKFNITElCX0VYVCk6IGxpYnVud2luZCQoU0hMSUJfRVhUKQorIGVuZGlmCisgCisrYWxsOiBsaWJnY2NfZWguYQorIGlmZXEgKCQoZW5hYmxlX3NoYXJlZCkseWVzKQorLWFsbDogbGliZ2NjX2VoLmEgbGliZ2NjX3MkKFNITElCX0VYVCkKKythbGw6IGxpYmdjY19zJChTSExJQl9FWFQpCisgaWZuZXEgKCQoTElCVU5XSU5EKSwpCisgYWxsOiBsaWJ1bndpbmQkKFNITElCX0VYVCkKKyBlbmRpZgorQEAgLTg3NSwxMCArODc2LDYgQEAKKyBpbnN0YWxsLXNoYXJlZDoKKyAJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikKKyAKKy0JJChJTlNUQUxMX0RBVEEpIGxpYmdjY19laC5hICQoREVTVERJUikkKGluc3RfbGliZGlyKS8KKy0JY2htb2QgNjQ0ICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY2NfZWguYQorLQkkKFJBTkxJQikgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCistCisgCSQoc3Vic3QgQG11bHRpbGliX2RpckAsJChNVUxUSURJUiksJChzdWJzdCBcCisgCQlAc2hsaWJfYmFzZV9uYW1lQCxsaWJnY2NfcywkKHN1YnN0IFwKKyAJCUBzaGxpYl9zbGliZGlyX3F1YWxALCQoTVVMVElPU1NVQkRJUiksJChTSExJQl9JTlNUQUxMKSkpKQorQEAgLTg5Myw2ICs4OTAsMTAgQEAKKyAJY2htb2QgNjQ0ICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY292LmEKKyAJJChSQU5MSUIpICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY292LmEKKyAKKysJJChJTlNUQUxMX0RBVEEpIGxpYmdjY19laC5hICQoREVTVERJUikkKGluc3RfbGliZGlyKS8KKysJY2htb2QgNjQ0ICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY2NfZWguYQorKwkkKFJBTkxJQikgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCisrCisgCXBhcnRzPSIkKElOU1RBTExfUEFSVFMpIjsJCQkJXAorIAlmb3IgZmlsZSBpbiAkJHBhcnRzOyBkbwkJCQkJXAorIAkgIHJtIC1mICQoREVTVERJUikkKGluc3RfbGliZGlyKS8kJGZpbGU7CQlcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy42LzEwMC1hbHBoYS1taWVlZS1kZWZhdWx0LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8xMDAtYWxwaGEtbWllZWUtZGVmYXVsdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDUwMTlkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8xMDAtYWxwaGEtbWllZWUtZGVmYXVsdC5wYXRjaApAQCAtMCwwICsxLDM5IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8xMDAtYWxwaGEtbWllZWUtZGVmYXVsdC5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzAwX2FsbF9nY2MtNC4xLWFscGhhLW1pZWVlLWRlZmF1bHQucGF0Y2gKK1NldCB0aGUgZGVmYXVsdCBiZWhhdmlvciBvbiBhbHBoYSB0byB1c2UgLW1pZWVlIHNpbmNlIHRoZSBsYXJnZSBtYWpvcml0eSBvZgordGltZSB3ZSB3YW50IHRoaXMgKGJhZC93ZWlyZCB0aGluZ3MgY2FuIGhhcHBlbiB3aXRoIHBhY2thZ2VzIGJ1aWx0IHdpdGhvdXQKKy1taWVlZSkuCisKK1RvIHNhdGlzZnkgdGhvc2UgcGVvcGxlIHdobyBtYXkgbm90IHdhbnQgLW1pZWVlIGZvcmNlZCBvbiB0aGVtIGFsbCB0aGUgdGltZSwKK3dlIGFsc28gcHJvdmlkZSAtbW5vLWllZWUuCisKK1BhdGNoIGJ5IE1pa2UgRnJ5c2luZ2VyIDx2YXBpZXJAZ2VudG9vLm9yZz4KKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvYWxwaGEvYWxwaGEuaCBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5oCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5oCTIwMDctMTItMDYgMTQ6MjU6MzcuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvYWxwaGEvYWxwaGEuaAkyMDA5LTAxLTI3IDIyOjE5OjAyLjAwMDAwMDAwMCArMDEwMAorQEAgLTk1LDYgKzk1LDggQEAKKyAgIHdoaWxlICgwKQorICNlbmRpZgorIAorKyNkZWZpbmUgQ1BQX1NQRUMgIiV7IW5vLWllZWU6LW1pZWVlfSIKKysKKyAjZGVmaW5lIFdPUkRfU1dJVENIX1RBS0VTX0FSRyhTVFIpCQlcCisgICghc3RyY21wIChTVFIsICJycGF0aCIpIHx8IERFRkFVTFRfV09SRF9TV0lUQ0hfVEFLRVNfQVJHKFNUUikpCisgCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvYWxwaGEvYWxwaGEub3B0IGdjYy00LjMuMy9nY2MvY29uZmlnL2FscGhhL2FscGhhLm9wdAorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvYWxwaGEvYWxwaGEub3B0CTIwMDctMDgtMDIgMTI6NDk6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvYWxwaGEvYWxwaGEub3B0CTIwMDktMDEtMjcgMjI6MTk6MDIuMDAwMDAwMDAwICswMTAwCitAQCAtMzksNyArMzksNyBAQAorIFJlcXVlc3QgSUVFRS1jb25mb3JtYW50IG1hdGggbGlicmFyeSByb3V0aW5lcyAoT1NGLzEpCisgCisgbWllZWUKKy1UYXJnZXQgUmVwb3J0IFJlamVjdE5lZ2F0aXZlIE1hc2soSUVFRSkKKytUYXJnZXQgUmVwb3J0IE1hc2soSUVFRSkKKyBFbWl0IElFRUUtY29uZm9ybWFudCBjb2RlLCB3aXRob3V0IGluZXhhY3QgZXhjZXB0aW9ucworIAorIG1pZWVlLXdpdGgtaW5leGFjdApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8xMTAtdHJhbXBvbGluZXdhcm4ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy42LzExMC10cmFtcG9saW5ld2Fybi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2FiMjE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8xMTAtdHJhbXBvbGluZXdhcm4ucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMTEwLXRyYW1wb2xpbmV3YXJuLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vMDBfYWxsX2djYy10cmFtcG9saW5ld2Fybi5wYXRjaAorCVRoaXMgdHJpdmlhbCBwYXRjaCBjYXVzZXMgZ2NjIHRvIGVtaXQgYSB3YXJuaW5nIHdoZW5ldmVyCisJaXQgZ2VuZXJhdGVzIGEgdHJhbXBvbGluZS4gIFRoZXNlIGFyZSBvdGhlcndpc2UgaGFyZCB0bworCWxvY2F0ZS4gIEl0IGlzIHJpZ2dlZCB0byBkZWZhdWx0IE9OIC0gdG8gaGF2ZSBpdCBkZWZhdWx0CisJdG8gT0ZGIHJlbW92ZSB0aGUgdGV4dCAnSW5pdCgxKScgZnJvbSB0aGUgY29tbW9uLm9wdAorCXBhdGNoLCBsZWF2aW5nIGp1c3QgJ0NvbW1vbiBWYXIod2Fybl90cmFtcG9saW5lcyknLgorCUtldmluIEYuIFF1aW5uIDxrZXZxdWlubkBnZW50b28ub3JnPiAxNyBKYW4gMjAwNgorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2J1aWx0aW5zLmMgZ2NjLTQuMy4zL2djYy9idWlsdGlucy5jCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2J1aWx0aW5zLmMJMjAwOC0wOC0xOSAxODozNzoxMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2J1aWx0aW5zLmMJMjAwOS0wMS0yNyAyMjoxOToxMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC01NjYyLDYgKzU2NjIsOSBAQAorICAgdHJhbXBvbGluZXNfY3JlYXRlZCA9IDE7CisgICBJTklUSUFMSVpFX1RSQU1QT0xJTkUgKHJfdHJhbXAsIHJfZnVuYywgcl9jaGFpbik7CisgCisrICBpZiAod2Fybl90cmFtcG9saW5lcykKKysgICAgd2FybmluZyAoT1BUX1d0cmFtcG9saW5lcywgImdlbmVyYXRpbmcgdHJhbXBvbGluZSBpbiBvYmplY3QgKHJlcXVpcmVzIGV4ZWN1dGFibGUgc3RhY2spIik7CisrCisgICByZXR1cm4gY29uc3QwX3J0eDsKKyB9CisgCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb21tb24ub3B0IGdjYy00LjMuMy9nY2MvY29tbW9uLm9wdAorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb21tb24ub3B0CTIwMDgtMDEtMjIgMTU6MTE6NDQuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2djYy9jb21tb24ub3B0CTIwMDktMDEtMjcgMjI6MTk6MTIuMDAwMDAwMDAwICswMTAwCitAQCAtMTgyLDYgKzE4MiwxMCBAQAorIENvbW1vbiBWYXIod2Fybl9zeXN0ZW1faGVhZGVycykgV2FybmluZworIERvIG5vdCBzdXBwcmVzcyB3YXJuaW5ncyBmcm9tIHN5c3RlbSBoZWFkZXJzCisgCisrV3RyYW1wb2xpbmVzCisrQ29tbW9uIFZhcih3YXJuX3RyYW1wb2xpbmVzKSBJbml0KDEpCisrV2FybiB3aGVuZXZlciBhIHRyYW1wb2xpbmUgaXMgZ2VuZXJhdGVkCisrCisgV3VuaW5pdGlhbGl6ZWQKKyBDb21tb24gVmFyKHdhcm5fdW5pbml0aWFsaXplZCkgV2FybmluZworIFdhcm4gYWJvdXQgdW5pbml0aWFsaXplZCBhdXRvbWF0aWMgdmFyaWFibGVzCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy42LzEyMC1qYXZhLW5vbXVsdGkucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy42LzEyMC1qYXZhLW5vbXVsdGkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdiODEzZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMTIwLWphdmEtbm9tdWx0aS5wYXRjaApAQCAtMCwwICsxLDUyIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8xMjAtamF2YS1ub211bHRpLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vMDNfYWxsX2djYzQzLWphdmEtbm9tdWx0aS5wYXRjaAorLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYmphdmEvY29uZmlndXJlIGdjYy00LjMuMy9saWJqYXZhL2NvbmZpZ3VyZQorLS0tIGdjYy00LjMuMy5vcmlnL2xpYmphdmEvY29uZmlndXJlCTIwMDktMDEtMjQgMTE6MzI6MjkuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2xpYmphdmEvY29uZmlndXJlCTIwMDktMDEtMjcgMjI6MTk6MTQuMDAwMDAwMDAwICswMTAwCitAQCAtMTAxOCw2ICsxMDE4LDggQEAKKyAgIC0tZW5hYmxlLWdjb25mLXBlZXIgICAgIGNvbXBpbGUgR0NvbmYgbmF0aXZlIHBlZXJzIGZvciB1dGlsLnByZWZlcmVuY2VzCisgICAtLWVuYWJsZS1qYXZhLW1haW50YWluZXItbW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3cgcmVidWlsZGluZyBvZiAuY2xhc3MgYW5kIC5oIGZpbGVzCisrICAtLWVuYWJsZS1saWJqYXZhLW11bHRpbGliCisrICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBsaWJqYXZhIGFzIG11bHRpbGliCisgICAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyAgc3BlZWRzIHVwIG9uZS10aW1lIGJ1aWxkCisgICAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICAgZG8gbm90IHJlamVjdCBzbG93IGRlcGVuZGVuY3kgZXh0cmFjdG9ycworICAgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlICBlbmFibGUgbWFrZSBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIG5vdCB1c2VmdWwKK0BAIC0xODUwLDYgKzE4NTIsMTYgQEAKKyBmaQorIAorIAorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJqYXZhLW11bHRpbGliIHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke2VuYWJsZV9saWJqYXZhX211bHRpbGliK3NldH0iID0gc2V0OyB0aGVuCisrICBlbmFibGV2YWw9JGVuYWJsZV9saWJqYXZhX211bHRpbGliOworK2ZpCisrCisraWYgdGVzdCAiJGVuYWJsZV9saWJqYXZhX211bHRpbGliIiA9IG5vOyB0aGVuCisrICBtdWx0aWxpYj1ubworKyAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAtLWRpc2FibGUtbXVsdGlsaWIiCisrZmkKKysKKyAjIEl0IG1heSBub3QgYmUgc2FmZSB0byBydW4gbGlua2luZyB0ZXN0cyBpbiBBQ19QUk9HX0NDL0FDX1BST0dfQ1hYLgorIAorIAorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJqYXZhL2NvbmZpZ3VyZS5hYyBnY2MtNC4zLjMvbGliamF2YS9jb25maWd1cmUuYWMKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJqYXZhL2NvbmZpZ3VyZS5hYwkyMDA4LTA3LTAyIDIzOjIzOjQzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9saWJqYXZhL2NvbmZpZ3VyZS5hYwkyMDA5LTAxLTI3IDIyOjE5OjE0LjAwMDAwMDAwMCArMDEwMAorQEAgLTgyLDYgKzgyLDEzIEBACisgCVthbGxvdyByZWJ1aWxkaW5nIG9mIC5jbGFzcyBhbmQgLmggZmlsZXNdKSkKKyBBTV9DT05ESVRJT05BTChKQVZBX01BSU5UQUlORVJfTU9ERSwgdGVzdCAiJGVuYWJsZV9qYXZhX21haW50YWluZXJfbW9kZSIgPSB5ZXMpCisgCisrQUNfQVJHX0VOQUJMRShsaWJqYXZhLW11bHRpbGliLAorKwlBU19IRUxQX1NUUklORyhbLS1lbmFibGUtbGliamF2YS1tdWx0aWxpYl0sIFtidWlsZCBsaWJqYXZhIGFzIG11bHRpbGliXSkpCisraWYgdGVzdCAiJGVuYWJsZV9saWJqYXZhX211bHRpbGliIiA9IG5vOyB0aGVuCisrICBtdWx0aWxpYj1ubworKyAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAtLWRpc2FibGUtbXVsdGlsaWIiCisrZmkKKysKKyAjIEl0IG1heSBub3QgYmUgc2FmZSB0byBydW4gbGlua2luZyB0ZXN0cyBpbiBBQ19QUk9HX0NDL0FDX1BST0dfQ1hYLgorIEdDQ19OT19FWEVDVVRBQkxFUworIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8xMzAtY3Jvc3MtY29tcGlsZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMTMwLWNyb3NzLWNvbXBpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI2NTk5OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMTMwLWNyb3NzLWNvbXBpbGUucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMTMwLWNyb3NzLWNvbXBpbGUucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby8wOF9hbGxfZ2NjLTQuMS1jcm9zcy1jb21waWxlLnBhdGNoCitTb21lIG5vdGVzIG9uIHRoZSAnYm9vdHN0cmFwIHdpdGggb3Igd2l0aG91dCBsaWJjIGhlYWRlcnMnIGRlYmF0ZToKK2h0dHA6Ly9saW51eGZyb21zY3JhdGNoLm9yZy9waXBlcm1haWwvbGZzLWRldi8yMDA1LUp1bHkvMDUyNDA5Lmh0bWwKK2h0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MvMjAwNS0wNy9tc2cwMTE5NS5odG1sCisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlndXJlIGdjYy00LjMuMy9nY2MvY29uZmlndXJlCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZ3VyZQkyMDA4LTA4LTAxIDExOjUxOjAzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlndXJlCTIwMDktMDEtMjcgMjI6MTk6MTYuMDAwMDAwMDAwICswMTAwCitAQCAtMTM0NDIsNyArMTM0NDIsNyBAQAorIAkgICAgfCBwb3dlcnBjKi0qLSoscG93ZXJwYzY0Ki0qLSopCisgCQlDUk9TUz0iJENST1NTIC1ETkFUSVZFX0NST1NTIiA7OworIAllc2FjCistZWxpZiB0ZXN0ICJ4JFRBUkdFVF9TWVNURU1fUk9PVCIgIT0geDsgdGhlbgorK2VsaWYgdGVzdCAieCRUQVJHRVRfU1lTVEVNX1JPT1QiICE9IHggLW8gJGJ1aWxkICE9ICRob3N0OyB0aGVuCisgICAgICAgICBTWVNURU1fSEVBREVSX0RJUj0kYnVpbGRfc3lzdGVtX2hlYWRlcl9kaXIKKyBmaQorIAorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlndXJlLmFjIGdjYy00LjMuMy9nY2MvY29uZmlndXJlLmFjCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYwkyMDA4LTA4LTAxIDExOjUxOjAzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlndXJlLmFjCTIwMDktMDEtMjcgMjI6MTk6MTYuMDAwMDAwMDAwICswMTAwCitAQCAtMTc0OSw3ICsxNzQ5LDcgQEAKKyAJICAgIHwgcG93ZXJwYyotKi0qLHBvd2VycGM2NCotKi0qKQorIAkJQ1JPU1M9IiRDUk9TUyAtRE5BVElWRV9DUk9TUyIgOzsKKyAJZXNhYworLWVsaWYgdGVzdCAieCRUQVJHRVRfU1lTVEVNX1JPT1QiICE9IHg7IHRoZW4KKytlbGlmIHRlc3QgIngkVEFSR0VUX1NZU1RFTV9ST09UIiAhPSB4IC1vICRidWlsZCAhPSAkaG9zdDsgdGhlbgorICAgICAgICAgU1lTVEVNX0hFQURFUl9ESVI9JGJ1aWxkX3N5c3RlbV9oZWFkZXJfZGlyIAorIGZpCisgCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy91bndpbmQtZHcyLmMgZ2NjLTQuMy4zL2djYy91bndpbmQtZHcyLmMKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvdW53aW5kLWR3Mi5jCTIwMDgtMDktMjUgMDA6NDQ6MjguMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2djYy91bndpbmQtZHcyLmMJMjAwOS0wMS0yNyAyMjoxOToxNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zMzQsOSArMzM0LDExIEBACisgfQorICNlbmRpZgorIAorKyNpZm5kZWYgaW5oaWJpdF9saWJjCisgI2lmZGVmIE1EX1VOV0lORF9TVVBQT1JUCisgI2luY2x1ZGUgTURfVU5XSU5EX1NVUFBPUlQKKyAjZW5kaWYKKysjZW5kaWYKKyAMCisgLyogRXh0cmFjdCBhbnkgaW50ZXJlc3RpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgQ0lFIGZvciB0aGUgdHJhbnNsYXRpb24KKyAgICB1bml0IEYgYmVsb25ncyB0by4gIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGJ5dGUgYWZ0ZXIgdGhlIGF1Z21lbnRhdGlvbiwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMTQwLW5ldGJzZC1zeW1ib2xpYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMTQwLW5ldGJzZC1zeW1ib2xpYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODk5ZGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8xNDAtbmV0YnNkLXN5bWJvbGljLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzE0MC1uZXRic2Qtc3ltYm9saWMucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby8xMV9hbGxfZ2NjLW5ldGJzZC1zeW1ib2xpYy5wYXRjaAoraHR0cDovL2J1Z3MuZ2VudG9vLm9yZy8xMjI2OTgKKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvbmV0YnNkLWVsZi5oIGdjYy00LjMuMy9nY2MvY29uZmlnL25ldGJzZC1lbGYuaAorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvbmV0YnNkLWVsZi5oCTIwMDctMDktMDMgMTg6MTQ6MDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvbmV0YnNkLWVsZi5oCTIwMDktMDEtMjcgMjI6MTk6MTguMDAwMDAwMDAwICswMTAwCitAQCAtODIsNiArODIsNyBAQAorICNkZWZpbmUgTkVUQlNEX0xJTktfU1BFQ19FTEYgXAorICAgIiV7YXNzZXJ0Kn0gJXtSKn0gJXtycGF0aCp9IFwKKyAgICAle3NoYXJlZDotc2hhcmVkfSBcCisrICAgJXtzeW1ib2xpYzotQnN5bWJvbGljfSBcCisgICAgJXshc2hhcmVkOiBcCisgICAgICAtZGMgLWRwIFwKKyAgICAgICV7IW5vc3RkbGliOiBcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy42LzE1MC1zcGFyYzY0LWJzZC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMTUwLXNwYXJjNjQtYnNkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzM2E3NjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy42LzE1MC1zcGFyYzY0LWJzZC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8xNTAtc3BhcmM2NC1ic2QucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby8xNF9hbGxfZ2NjLXNwYXJjNjQtYnNkLnBhdGNoCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9zcGFyYy9mcmVlYnNkLmggZ2NjLTQuMy4zL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9zcGFyYy9mcmVlYnNkLmgJMjAwNy0wOC0wMiAxMjo0OTozMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9zcGFyYy9mcmVlYnNkLmgJMjAwOS0wMS0yNyAyMjoxOToyMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNSw5ICsyNSwyMiBAQAorIC8qIEZyZWVCU0QgbmVlZHMgdGhlIHBsYXRmb3JtIG5hbWUgKHNwYXJjNjQpIGRlZmluZWQuCisgICAgRW1hY3MgbmVlZHMgdG8ga25vdyBpZiB0aGUgYXJjaCBpcyA2NCBvciAzMi1iaXRzLiAgKi8KKyAKKy0jdW5kZWYgIENQUF9DUFU2NF9ERUZBVUxUX1NQRUMKKy0jZGVmaW5lIENQUF9DUFU2NF9ERUZBVUxUX1NQRUMgXAorLSAgIi1EX19zcGFyYzY0X18gLURfX3NwYXJjX3Y5X18gLURfX3NwYXJjdjkgLURfX2FyY2g2NF9fIgorKyN1bmRlZiAgRkJTRF9UQVJHRVRfQ1BVX0NQUF9CVUlMVElOUworKyNkZWZpbmUgRkJTRF9UQVJHRVRfQ1BVX0NQUF9CVUlMVElOUygpICAgICAgICAgICAgICAgICAgXAorKyAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGlmIChUQVJHRVRfQVJDSDY0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBidWlsdGluX2RlZmluZSAoIl9fc3BhcmM2NF9fIik7ICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBidWlsdGluX2RlZmluZSAoIl9fc3BhcmNfdjlfXyIpOyAgICAgICAgICAgICAgXAorKyAgICAgICAgICBidWlsdGluX2RlZmluZSAoIl9fc3BhcmN2OSIpOyAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjIik7ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19zcGFyY19fIik7ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgd2hpbGUgKDApCisrCisgCisgI2RlZmluZSBMSU5LX1NQRUMgIiUobGlua19hcmNoKQkJCQkJCVwKKyAgICV7IW1uby1yZWxheDoleyFyOi1yZWxheH19CQkJCQkJXApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8xNjAtZmxhdHRlbi1zd2l0Y2gtc3RtdC0wMC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMTYwLWZsYXR0ZW4tc3dpdGNoLXN0bXQtMDAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJhY2ZiYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMTYwLWZsYXR0ZW4tc3dpdGNoLXN0bXQtMDAucGF0Y2gKQEAgLTAsMCArMSw4MSBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMTYwLWZsYXR0ZW4tc3dpdGNoLXN0bXQtMDAucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby8xOF9hbGxfOTA0LWZsYXR0ZW4tc3dpdGNoLXN0bXQtMDAucGF0Y2gKK2h0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDA3LTA0L21zZzAwOTI3Lmh0bWwKKworSGksCisKK1RoZSBhdHRhY2hlZCBwYXRjaCBtYWtlcyBzdXJlIHRoYXQgd2UgY3JlYXRlIHNtYWxsZXIgb2JqZWN0IGNvZGUgZm9yCitzaW1wbGUgc3dpdGNoIHN0YXRlbWVudHMuIFdlIGp1c3QgbWFrZSBzdXJlIHRvIGZsYXR0ZW4gdGhlIHN3aXRjaAorc3RhdGVtZW50IGludG8gYW4gaWYtZWxzZSBjaGFpbiwgYmFzaWNhbGx5LgorCitUaGlzIGZpeGVzIGEgc2l6ZS1yZWdyZXNzaW9uIGFzIGNvbXBhcmVkIHRvIGdjYy0zLjQsIGFzIGNhbiBiZSBzZWVuCitiZWxvdy4KKworMjAwNy0wNC0xNSAgQmVybmhhcmQgRmlzY2hlciAgPC4uPgorCisJKiBzdG10LmMgKGV4cGFuZF9jYXNlKTogRG8gbm90IGNyZWF0ZSBhIGNvbXBsZXggYmluYXJ5IHRyZWUgd2hlbgorCW9wdGltaXppbmcgZm9yIHNpemUgYnV0IHJhdGhlciB1c2UgdGhlIHNpbXBsZSBvcmRlcmVkIGxpc3QuCisJKGVtaXRfY2FzZV9ub2Rlcyk6IGRvIG5vdCBlbWl0IGp1bXBzIHRvIHRoZSBkZWZhdWx0X2xhYmVsIHdoZW4KKwlvcHRpbWl6aW5nIGZvciBzaXplLgorCitOb3QgcmVndGVzdGVkIHNvIGZhci4KK0NvbW1lbnRzPworCitBdHRhY2hlZCBpcyB0aGUgdGVzdCBzd2l0Y2guYyBtZW50aW9uZWQgYmVsb3cuCisKKyQgZm9yIGkgaW4gMi45NSAzLjMgMy40IDQuMCA0LjEgNC4yLm9yaWctSEVBRCA0LjMub3JpZy1IRUFEIDQuMy1IRUFEO2RvCitnY2MtJGkgIC1EQ0hBSU4gLU9zIC1vIHN3aXRjaC1DSEFJTi0kaS5vIC1jIHN3aXRjaC5jIDtkb25lCiskIGZvciBpIGluIDIuOTUgMy4zIDMuNCA0LjAgNC4xIDQuMi5vcmlnLUhFQUQgNC4zLm9yaWctSEVBRCA0LjMtSEVBRDtkbworZ2NjLSRpICAtVUNIQUlOIC1PcyAtbyBzd2l0Y2gtJGkubyAtYyBzd2l0Y2guYyA7ZG9uZQorCiskIHNpemUgc3dpdGNoLSoubworICAgdGV4dAkgICBkYXRhCSAgICBic3MJICAgIGRlYwkgICAgaGV4CWZpbGVuYW1lCisgICAgMTY5CSAgICAgIDAJICAgICAgMAkgICAgMTY5CSAgICAgYTkJc3dpdGNoLTIuOTUubworICAgIDExNQkgICAgICAwCSAgICAgIDAJICAgIDExNQkgICAgIDczCXN3aXRjaC0zLjMubworICAgIDEwMwkgICAgICAwCSAgICAgIDAJICAgIDEwMwkgICAgIDY3CXN3aXRjaC0zLjQubworICAgIDEyNAkgICAgICAwCSAgICAgIDAJICAgIDEyNAkgICAgIDdjCXN3aXRjaC00LjAubworICAgIDEyNAkgICAgICAwCSAgICAgIDAJICAgIDEyNAkgICAgIDdjCXN3aXRjaC00LjEubworICAgIDEyNAkgICAgICAwCSAgICAgIDAJICAgIDEyNAkgICAgIDdjCXN3aXRjaC00LjIub3JpZy1IRUFELm8KKyAgICAgOTUJICAgICAgMAkgICAgICAwCSAgICAgOTUJICAgICA1Zglzd2l0Y2gtNC4zLUhFQUQubworICAgIDEyNAkgICAgICAwCSAgICAgIDAJICAgIDEyNAkgICAgIDdjCXN3aXRjaC00LjMub3JpZy1IRUFELm8KKyAgICAxNjYJICAgICAgMAkgICAgICAwCSAgICAxNjYJICAgICBhNglzd2l0Y2gtQ0hBSU4tMi45NS5vCisgICAgMTExCSAgICAgIDAJICAgICAgMAkgICAgMTExCSAgICAgNmYJc3dpdGNoLUNIQUlOLTMuMy5vCisgICAgIDk1CSAgICAgIDAJICAgICAgMAkgICAgIDk1CSAgICAgNWYJc3dpdGNoLUNIQUlOLTMuNC5vCisgICAgIDk1CSAgICAgIDAJICAgICAgMAkgICAgIDk1CSAgICAgNWYJc3dpdGNoLUNIQUlOLTQuMC5vCisgICAgIDk1CSAgICAgIDAJICAgICAgMAkgICAgIDk1CSAgICAgNWYJc3dpdGNoLUNIQUlOLTQuMS5vCisgICAgIDk1CSAgICAgIDAJICAgICAgMAkgICAgIDk1CSAgICAgNWYJc3dpdGNoLUNIQUlOLTQuMi5vcmlnLUhFQUQubworICAgICA5NQkgICAgICAwCSAgICAgIDAJICAgICA5NQkgICAgIDVmCXN3aXRjaC1DSEFJTi00LjMtSEVBRC5vCisgICAgIDk1CSAgICAgIDAJICAgICAgMAkgICAgIDk1CSAgICAgNWYJc3dpdGNoLUNIQUlOLTQuMy5vcmlnLUhFQUQubworCisKK0NvbnRlbnQtVHlwZTogdGV4dC94LWRpZmY7IGNoYXJzZXQ9dXMtYXNjaWkKK0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSJnY2MtNC4zLmdjYy1mbGF0dGVuLXN3aXRjaC1zdG10LjAwLmRpZmYiCisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2Mvc3RtdC5jIGdjYy00LjMuMy9nY2Mvc3RtdC5jCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL3N0bXQuYwkyMDA4LTA1LTA5IDIwOjEyOjEzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9nY2Mvc3RtdC5jCTIwMDktMDEtMjcgMjI6MTk6MjguMDAwMDAwMDAwICswMTAwCitAQCAtMjUwOSw3ICsyNTA5LDExIEBACisgCSAgdXNlX2Nvc3RfdGFibGUKKyAJICAgID0gKFRSRUVfQ09ERSAob3JpZ190eXBlKSAhPSBFTlVNRVJBTF9UWVBFCisgCSAgICAgICAmJiBlc3RpbWF0ZV9jYXNlX2Nvc3RzIChjYXNlX2xpc3QpKTsKKy0JICBiYWxhbmNlX2Nhc2Vfbm9kZXMgKCZjYXNlX2xpc3QsIE5VTEwpOworKwkgIC8qIFdoZW4gb3B0aW1pemluZyBmb3Igc2l6ZSwgd2Ugd2FudCBhIHN0cmFpZ2h0IGxpc3QgdG8gYXZvaWQKKysJICAgICBqdW1wcyBhcyBtdWNoIGFzIHBvc3NpYmxlLiBUaGlzIGJhc2ljYWxseSBjcmVhdGVzIGFuIGlmLWVsc2UKKysJICAgICBjaGFpbi4gICovCisrCSAgaWYgKCFvcHRpbWl6ZV9zaXplKQorKwkgICAgYmFsYW5jZV9jYXNlX25vZGVzICgmY2FzZV9saXN0LCBOVUxMKTsKKyAJICBlbWl0X2Nhc2Vfbm9kZXMgKGluZGV4LCBjYXNlX2xpc3QsIGRlZmF1bHRfbGFiZWwsIGluZGV4X3R5cGUpOworIAkgIGVtaXRfanVtcCAoZGVmYXVsdF9sYWJlbCk7CisgCX0KK0BAIC0zMDY3LDYgKzMwNzEsNyBAQAorIAkgICAgeworIAkgICAgICBpZiAoIW5vZGVfaGFzX2xvd19ib3VuZCAobm9kZSwgaW5kZXhfdHlwZSkpCisgCQl7CisrCQkgIGlmICghb3B0aW1pemVfc2l6ZSkgLyogZG9uJ3QgamwgdG8gdGhlIC5kZWZhdWx0X2xhYmVsLiAqLworIAkJICBlbWl0X2NtcF9hbmRfanVtcF9pbnNucyAoaW5kZXgsCisgCQkJCQkgICBjb252ZXJ0X21vZGVzCisgCQkJCQkgICAobW9kZSwgaW1vZGUsCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy42LzE3MC1saWJpYmVydHktcGljLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8xNzAtbGliaWJlcnR5LXBpYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDc4OWQwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8xNzAtbGliaWJlcnR5LXBpYy5wYXRjaApAQCAtMCwwICsxLDE3IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8xNzAtbGliaWJlcnR5LXBpYy5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzUxX2FsbF9nY2MtMy40LWxpYmliZXJ0eS1waWMucGF0Y2gKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJpYmVydHkvTWFrZWZpbGUuaW4gZ2NjLTQuMy4zL2xpYmliZXJ0eS9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjMuMy5vcmlnL2xpYmliZXJ0eS9NYWtlZmlsZS5pbgkyMDA3LTA3LTI1IDA4OjI2OjQ1LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9saWJpYmVydHkvTWFrZWZpbGUuaW4JMjAwOS0wMS0yNyAyMjoxOTozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMjUsNiArMjI1LDcgQEAKKyAJICAkKEFSKSAkKEFSX0ZMQUdTKSAkKFRBUkdFVExJQikgXAorIAkgICAgJChSRVFVSVJFRF9PRklMRVMpICQoRVhUUkFfT0ZJTEVTKSAkKExJQk9CSlMpOyBcCisgCSAgJChSQU5MSUIpICQoVEFSR0VUTElCKTsgXAorKwkgIGNwICQoVEFSR0VUTElCKSAuLi8gOyBcCisgCSAgY2QgLi47IFwKKyAJZWxzZSB0cnVlOyBmaQorIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8xODAtc3VwZXJoLWRlZmF1bHQtbXVsdGlsaWIucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy42LzE4MC1zdXBlcmgtZGVmYXVsdC1tdWx0aWxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDE5Mzc3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8xODAtc3VwZXJoLWRlZmF1bHQtbXVsdGlsaWIucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMTgwLXN1cGVyaC1kZWZhdWx0LW11bHRpbGliLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vNTNfYWxsX2djYzQtc3VwZXJoLWRlZmF1bHQtbXVsdGlsaWIucGF0Y2gKK1RoZSBnY2MtMy54IHRvb2xjaGFpbnMgd291bGQgY29udGFpbiBhbGwgdGhlIHRhcmdldHMgYnkgZGVmYXVsdC4gIFdpdGggZ2NjLTQsCit5b3UgaGF2ZSB0byBhY3R1YWxseSBsaXN0IG91dCB0aGUgbXVsdGlsaWJzIHlvdSB3YW50IG9yIHlvdSB3aWxsIGVuZCB1cCB3aXRoCitqdXN0IG9uZSB3aGVuIHVzaW5nIHRhcmdldHMgbGlrZSAnc2g0LWxpbnV4LWdudScuCisKK1RoZSByZXN1bHRpbmcgdG9vbGNoYWluIGNhbid0IGV2ZW4gYnVpbGQgYSBrZXJuZWwgYXMgdGhlIGtlcm5lbCBuZWVkcyB0byBidWlsZAord2l0aCB0aGUgbm9mcHUgZmxhZyB0byBiZSBzdXJlIHRoYXQgbm8gZnB1IG9wcyBhcmUgZ2VuZXJhdGVkLgorCitIZXJlIHdlIHJlc3RvcmUgdGhlIGdjYy0zLnggYmVoYXZpb3I7IHRoZSBhZGRpdGlvbmFsIG92ZXJoZWFkIG9mIGJ1aWxkaW5nIGFsbAorb2YgdGhlc2UgbXVsdGlsaWJzIGJ5IGRlZmF1bHQgaXMgbmVnbGlnaWJsZS4KKworaHR0cDovL2J1Z3MuZ2VudG9vLm9yZy8xNDAyMDUKKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcuZ2NjIGdjYy00LjMuMy9nY2MvY29uZmlnLmdjYworLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcuZ2NjCTIwMDgtMTEtMjAgMTg6MDk6NTMuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcuZ2NjCTIwMDktMDEtMjcgMjI6MTk6MzIuMDAwMDAwMDAwICswMTAwCitAQCAtMjI3NSw3ICsyMjc1LDcgQEAKKyAJaWYgdGVzdCB4JHtzaF9tdWx0aWxpYnN9ID0geCA7IHRoZW4KKyAJCWNhc2UgJHt0YXJnZXR9IGluCisgCQlzaDY0LXN1cGVyaC1saW51eCogfCBcCistCQlzaFsxMjM0XSopCXNoX211bHRpbGlicz0ke3NoX2NwdV90YXJnZXR9IDs7CisrCQlzaFsxMjM0XSopCXNoX211bHRpbGlicz1gY2QgJHtzcmNkaXJ9L2NvbmZpZy9zaCA7IGVjaG8gdC1tbGliLXNoWzEtNF0qIHwgc2VkICdzOnQtbWxpYi1zaDosbTpnO3M6IDo6ZydgIDs7CisgCQlzaDY0KiB8IHNoNSopCXNoX211bHRpbGlicz1tNS0zMm1lZGlhLG01LTMybWVkaWEtbm9mcHUsbTUtY29tcGFjdCxtNS1jb21wYWN0LW5vZnB1LG01LTY0bWVkaWEsbTUtNjRtZWRpYS1ub2ZwdSA7OworIAkJc2gtc3VwZXJoLSopCXNoX211bHRpbGlicz1tNCxtNC1zaW5nbGUsbTQtc2luZ2xlLW9ubHksbTQtbm9mcHUgOzsKKyAJCXNoKi0qLWxpbnV4KikJc2hfbXVsdGlsaWJzPW0xLG0zZSxtNCA7OwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8xOTAtbGlic3RkYysrLXBpYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMTkwLWxpYnN0ZGMrKy1waWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRiYzYwMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMTkwLWxpYnN0ZGMrKy1waWMucGF0Y2gKQEAgLTAsMCArMSw2MSBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMTkwLWxpYnN0ZGMrKy1waWMucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby81NF9hbGxfMzAwLWxpYnN0ZGMrKy1waWMucGF0Y2gKK2luc3RhbGwgbGlic3RkYysrX3BpYy5hIGlmIHdlIGhhdmUgcGljIG9ianMKKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuNS5vcmlnL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuYW0gZ2NjLTQuMy41L2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuYW0KKy0tLSBnY2MtNC4zLjUub3JpZy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmFtCTIwMDgtMDItMjkgMTk6MjY6NTAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy41L2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuYW0JMjAxMC0wOS0xOSAxODo1ODo0MC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yODksNiArMjg5LDEzIEBACisgCSAgJChPUFRfTERGTEFHUykgJChTRUNUSU9OX0xERkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoTFRMREZMQUdTKSAtbyAkQAorIAorIAorK2luc3RhbGwtZXhlYy1sb2NhbDoKKysJcGljX29ianM9YHNlZCAtbiAiczonOjpnO3M6XnBpY19vYmplY3Q9OjpwIiAqLmxvIHwgZ3JlcCAtdiAnXm5vbmUkJCdgOyBcCisrCWlmIFsgeCIkJHBpY19vYmpzIiAhPSB4IF07IHRoZW4gXAorKwkJJChBUikgY3J1IGxpYnN0ZGMrK19waWMuYSAkJHBpY19vYmpzICQodG9wX2J1aWxkZGlyKS9saWJzdXBjKysvKi5vIHx8IGV4aXQgMTsgXAorKwkJJChJTlNUQUxMX0RBVEEpIGxpYnN0ZGMrK19waWMuYSAkKERFU1RESVIpJCh0b29sZXhlY2xpYmRpcikgfHwgZXhpdCAxOyBcCisrCWZpCisrCisgIyBBZGRlZCBiaXRzIHRvIGJ1aWxkIGRlYnVnIGxpYnJhcnkuCisgaWYgR0xJQkNYWF9CVUlMRF9ERUJVRworIGFsbC1sb2NhbDogYnVpbGRfZGVidWcKK2RpZmYgLWR1ck4gZ2NjLTQuMy41Lm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbiBnY2MtNC4zLjUvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjMuNS5vcmlnL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuaW4JMjAxMC0wNS0wNiAxOToxOTo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjUvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgkyMDEwLTA5LTE5IDE5OjAxOjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTY0Niw3ICs2NDYsNyBAQAorIAorIGluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1kYXRhLWxvY2FsCisgCistaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLXRvb2xleGVjbGliTFRMSUJSQVJJRVMKKytpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUyBpbnN0YWxsLWV4ZWMtbG9jYWwKKyAKKyBpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorIAorQEAgLTY4NSw3ICs2ODUsNyBAQAorIAltb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorIAltb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB1bmluc3RhbGwgXAorIAl1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWluZm8tYW0gXAorLQl1bmluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUworKwl1bmluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUyBpbnN0YWxsLWV4ZWMtbG9jYWwKKyAKKyAKKyAjIFN5bWJvbCB2ZXJzaW9uaW5nIGZvciBzaGFyZWQgbGlicmFyaWVzLgorQEAgLTgxMSw2ICs4MTEsMTQgQEAKKyBpbnN0YWxsX2RlYnVnOgorIAkoY2QgJHtkZWJ1Z2Rpcn0gJiYgJChNQUtFKSBcCisgCXRvb2xleGVjbGliZGlyPSQoZ2xpYmN4eF90b29sZXhlY2xpYmRpcikvZGVidWcgaW5zdGFsbCkKKysKKytpbnN0YWxsLWV4ZWMtbG9jYWw6CisrCXBpY19vYmpzPWBzZWQgLW4gInM6Jzo6ZztzOl5waWNfb2JqZWN0PTo6cCIgKi5sbyB8IGdyZXAgLXYgJ15ub25lJCQnYDsgXAorKwlpZiBbIHgiJCRwaWNfb2JqcyIgIT0geCBdOyB0aGVuIFwKKysJCSQoQVIpIGNydSBsaWJzdGRjKytfcGljLmEgJCRwaWNfb2JqcyAkKHRvcF9idWlsZGRpcikvbGlic3VwYysrLyoubyB8fCBleGl0IDE7IFwKKysJCSQoSU5TVEFMTF9EQVRBKSBsaWJzdGRjKytfcGljLmEgJChERVNURElSKSQodG9vbGV4ZWNsaWJkaXIpIHx8IGV4aXQgMTsgXAorKwlmaQorKworICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisgIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisgLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8yMDAtcHIyNDE3MC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMjAwLXByMjQxNzAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJiYmM5ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMjAwLXByMjQxNzAucGF0Y2gKQEAgLTAsMCArMSw2NiBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMjAwLXByMjQxNzAucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby82MV9hbGxfZ2NjNDMtcHIyNDE3MC5wYXRjaAoraHR0cDovL2djYy5nbnUub3JnL1BSMjQxNzAKKworMjAwOC0wMi0yMCAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgorCisJUFIgbGliZ2NqLzI0MTcwOgorCSogamF2YS9pby9uYXRGaWxlUG9zaXguY2MgKEZpbGU6OnBlcmZvcm1MaXN0KTogRG9uJ3QgdXNlCisJcmVhZGRpcl9yLgorCSogY29uZmlndXJlLCBpbmNsdWRlL2NvbmZpZy5oLmluOiBSZWJ1aWx0LgorCSogY29uZmlndXJlLmFjOiBEb24ndCBjaGVjayBmb3IgcmVhZGRpcl9yLgorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliamF2YS9jb25maWd1cmUuYWMgZ2NjLTQuMy4zL2xpYmphdmEvY29uZmlndXJlLmFjCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliamF2YS9jb25maWd1cmUuYWMJMjAwOS0wMS0yNyAyMjoxOToxNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvbGliamF2YS9jb25maWd1cmUuYWMJMjAwOS0wMS0yNyAyMjoxOTozNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMDMwLDcgKzEwMzAsNyBAQAorICAgIFBMQVRGT1JNTkVUPU5vTmV0CisgZWxzZQorICAgIEFDX0NIRUNLX0ZVTkNTKFtzdHJlcnJvcl9yIHNlbGVjdCBmc3RhdCBvcGVuIGZzeW5jIHNsZWVwIG9wZW5kaXIgXAorLSAgICAgICAgICAgICAgICAgICBsb2NhbHRpbWVfciByZWFkZGlyX3IgZ2V0cHd1aWRfciBnZXRjd2QgXAorKyAgICAgICAgICAgICAgICAgICBsb2NhbHRpbWVfciBnZXRwd3VpZF9yIGdldGN3ZCBcCisgCQkgICBhY2Nlc3Mgc3RhdCBsc3RhdCBta2RpciByZW5hbWUgcm1kaXIgdW5saW5rIHV0aW1lIGNobW9kIHJlYWRsaW5rIFwKKyAJCSAgIG5sX2xhbmdpbmZvIHNldGxvY2FsZSBcCisgCQkgICBpbmV0X3B0b24gdW5hbWUgaW5ldF9udG9hIFwKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliamF2YS9pbmNsdWRlL2NvbmZpZy5oLmluIGdjYy00LjMuMy9saWJqYXZhL2luY2x1ZGUvY29uZmlnLmguaW4KKy0tLSBnY2MtNC4zLjMub3JpZy9saWJqYXZhL2luY2x1ZGUvY29uZmlnLmguaW4JMjAwNy0wNy0zMSAxODoxNzoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGliamF2YS9pbmNsdWRlL2NvbmZpZy5oLmluCTIwMDktMDEtMjcgMjI6MTk6MzYuMDAwMDAwMDAwICswMTAwCitAQCAtMjE0LDkgKzIxNCw2IEBACisgLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwd2QuaD4gaGVhZGVyIGZpbGUuICovCisgI3VuZGVmIEhBVkVfUFdEX0gKKyAKKy0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJlYWRkaXJfcicgZnVuY3Rpb24uICovCistI3VuZGVmIEhBVkVfUkVBRERJUl9SCistCisgLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZWFkbGluaycgZnVuY3Rpb24uICovCisgI3VuZGVmIEhBVkVfUkVBRExJTksKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliamF2YS9qYXZhL2lvL25hdEZpbGVQb3NpeC5jYyBnY2MtNC4zLjMvbGliamF2YS9qYXZhL2lvL25hdEZpbGVQb3NpeC5jYworLS0tIGdjYy00LjMuMy5vcmlnL2xpYmphdmEvamF2YS9pby9uYXRGaWxlUG9zaXguY2MJMjAwNy0wOC0wNCAyMzo1MDowMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGliamF2YS9qYXZhL2lvL25hdEZpbGVQb3NpeC5jYwkyMDA5LTAxLTI3IDIyOjE5OjM2LjAwMDAwMDAwMCArMDEwMAorQEAgLTEsNiArMSw2IEBACisgLy8gbmF0RmlsZS5jYyAtIE5hdGl2ZSBwYXJ0IG9mIEZpbGUgY2xhc3MgZm9yIFBPU0lYLgorIAorLS8qIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNgorKy8qIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNiwgMjAwOAorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIAorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYmdjai4KK0BAIC0yOTIsMTMgKzI5Miw3IEBACisgCisgICBqYXZhOjp1dGlsOjpBcnJheUxpc3QgKmxpc3QgPSBuZXcgamF2YTo6dXRpbDo6QXJyYXlMaXN0ICgpOworICAgc3RydWN0IGRpcmVudCAqZDsKKy0jaWYgZGVmaW5lZChIQVZFX1JFQURESVJfUikgJiYgZGVmaW5lZChfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MpCistICBpbnQgbmFtZV9tYXggPSBwYXRoY29uZiAoYnVmLCBfUENfTkFNRV9NQVgpOworLSAgY2hhciBkYnVmW3NpemVvZiAoc3RydWN0IGRpcmVudCkgKyBuYW1lX21heCArIDFdOworLSAgd2hpbGUgKHJlYWRkaXJfciAoZGlyLCAoc3RydWN0IGRpcmVudCAqKSBkYnVmLCAmZCkgPT0gMCAmJiBkICE9IE5VTEwpCistI2Vsc2UgLyogSEFWRV9SRUFERElSX1IgKi8KKyAgIHdoaWxlICgoZCA9IHJlYWRkaXIgKGRpcikpICE9IE5VTEwpCistI2VuZGlmIC8qIEhBVkVfUkVBRERJUl9SICovCisgICAgIHsKKyAgICAgICAvLyBPbWl0ICIuIiBhbmQgIi4uIi4KKyAgICAgICBpZiAoZC0+ZF9uYW1lWzBdID09ICcuJwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8yMTAtbm90ZUdOVXN0YWNrLTAwLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8yMTAtbm90ZUdOVXN0YWNrLTAwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YzY0MjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy42LzIxMC1ub3RlR05Vc3RhY2stMDAucGF0Y2gKQEAgLTAsMCArMSwxMDEgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzIxMC1ub3RlR05Vc3RhY2stMDAucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby82MV9hbGxfZ2NjNC1pYTY0LW5vdGVHTlVzdGFjay5wYXRjaAorMjAwNC0wOS0yMCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZy9yczYwMDAvcHBjLWFzbS5oOiBBZGQgLm5vdGUuR05VLXN0YWNrIHNlY3Rpb24gYWxzbworCW9uIHBwYzY0LWxpbnV4LgorCisJKiBjb25maWcvaWE2NC9saWIxZnVuY3MuYXNtOiBBZGQgLm5vdGUuR05VLXN0YWNrIHNlY3Rpb24gb24KKwlpYTY0LWxpbnV4LgorCSogY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtOiBMaWtld2lzZS4KKwkqIGNvbmZpZy9pYTY0L2NydGVuZC5hc206IExpa2V3aXNlLgorCSogY29uZmlnL2lhNjQvY3J0aS5hc206IExpa2V3aXNlLgorCSogY29uZmlnL2lhNjQvY3J0bi5hc206IExpa2V3aXNlLgorCisyMDA0LTA1LTE0ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogY29uZmlnL2lhNjQvbGludXguaCAoVEFSR0VUX0FTTV9GSUxFX0VORCk6IERlZmluZS4KKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRiZWdpbi5hc20gZ2NjLTQuMy4zL2djYy9jb25maWcvaWE2NC9jcnRiZWdpbi5hc20KKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtCTIwMDUtMDktMjcgMDI6NTI6MjQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvaWE2NC9jcnRiZWdpbi5hc20JMjAwOS0wMS0yNyAyMjoxOTozOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNTUsMyArMjU1LDcgQEAKKyAud2VhayBfX2N4YV9maW5hbGl6ZQorICNlbmRpZgorIC53ZWFrIF9Kdl9SZWdpc3RlckNsYXNzZXMKKysKKysjaWZkZWYgX19saW51eF9fCisrLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrOyAucHJldmlvdXMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGVuZC5hc20gZ2NjLTQuMy4zL2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGVuZC5hc20JMjAwNS0wOS0yNyAwMjo1MjoyNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9pYTY0L2NydGVuZC5hc20JMjAwOS0wMS0yNyAyMjoxOTozOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMjIsMyArMTIyLDcgQEAKKyAKKyAJYnIucmV0LnNwdGsubWFueSBycAorIAkuZW5kcCBfX2RvX2dsb2JhbF9jdG9yc19hdXgKKysKKysjaWZkZWYgX19saW51eF9fCisrLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrOyAucHJldmlvdXMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGkuYXNtIGdjYy00LjMuMy9nY2MvY29uZmlnL2lhNjQvY3J0aS5hc20KKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0aS5hc20JMjAwNS0wNi0yNSAwMzoyMjo0MS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9pYTY0L2NydGkuYXNtCTIwMDktMDEtMjcgMjI6MTk6MzkuMDAwMDAwMDAwICswMTAwCitAQCAtNjQsMyArNjQsNyBAQAorIAkuYm9keQorIAorICMgZW5kIG9mIGNydGkuYXNtCisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRuLmFzbSBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9pYTY0L2NydG4uYXNtCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydG4uYXNtCTIwMDUtMDYtMjUgMDM6MjI6NDEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvaWE2NC9jcnRuLmFzbQkyMDA5LTAxLTI3IDIyOjE5OjM5LjAwMDAwMDAwMCArMDEwMAorQEAgLTU0LDMgKzU0LDcgQEAKKyAJYnIucmV0LnNwdGsubWFueSBiMAorIAorICMgZW5kIG9mIGNydG4uYXNtCisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvaWE2NC9saWIxZnVuY3MuYXNtIGdjYy00LjMuMy9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbQorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvaWE2NC9saWIxZnVuY3MuYXNtCTIwMDUtMDktMjcgMDI6NTI6MjQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvaWE2NC9saWIxZnVuY3MuYXNtCTIwMDktMDEtMjcgMjI6MTk6MzkuMDAwMDAwMDAwICswMTAwCitAQCAtNzkyLDMgKzc5Miw3IEBACisgCX0KKyAJLmVuZHAgX19mbG9hdHRpdGYKKyAjZW5kaWYKKysKKysjaWZkZWYgX19saW51eF9fCisrLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrOyAucHJldmlvdXMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2xpbnV4LmggZ2NjLTQuMy4zL2djYy9jb25maWcvaWE2NC9saW51eC5oCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2xpbnV4LmgJMjAwNi0xMi0xMiAxNjoxNToxOS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9pYTY0L2xpbnV4LmgJMjAwOS0wMS0yNyAyMjoxOTozOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC01LDYgKzUsOCBAQAorIAorICNkZWZpbmUgVEFSR0VUX1ZFUlNJT04gZnByaW50ZiAoc3RkZXJyLCAiIChJQS02NCkgTGludXgiKTsKKyAKKysjZGVmaW5lIFRBUkdFVF9BU01fRklMRV9FTkQgZmlsZV9lbmRfaW5kaWNhdGVfZXhlY19zdGFjaworKworIC8qIFRoaXMgaXMgZm9yIC1wcm9maWxlIHRvIHVzZSAtbGNfcCBpbnN0ZWFkIG9mIC1sYy4gICovCisgI3VuZGVmIENDMV9TUEVDCisgI2RlZmluZSBDQzFfU1BFQyAiJXtwcm9maWxlOi1wfSAle0cqfSIKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvcHBjLWFzbS5oIGdjYy00LjMuMy9nY2MvY29uZmlnL3JzNjAwMC9wcGMtYXNtLmgKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9wcGMtYXNtLmgJMjAwMy0wNi0wNCAxODo0NDo1MS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9yczYwMDAvcHBjLWFzbS5oCTIwMDktMDEtMjcgMjI6MTk6MzkuMDAwMDAwMDAwICswMTAwCitAQCAtMTU4LDcgKzE1OCw3IEBACisgCS5zaXplIEZVTkNfTkFNRShuYW1lKSxHTFVFKC5MLG5hbWUpLUZVTkNfTkFNRShuYW1lKQorICNlbmRpZgorIAorLSNpZiBkZWZpbmVkIF9fbGludXhfXyAmJiAhZGVmaW5lZCBfX3Bvd2VycGM2NF9fCisrI2lmIGRlZmluZWQgX19saW51eF9fCisgCS5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjaworIAkucHJldmlvdXMKKyAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMjIwLW5vdGVHTlVzdGFjay0wMS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMjIwLW5vdGVHTlVzdGFjay0wMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjZlOTk5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8yMjAtbm90ZUdOVXN0YWNrLTAxLnBhdGNoCkBAIC0wLDAgKzEsMjAzIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8yMjAtbm90ZUdOVXN0YWNrLTAxLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS9nZW50b28vNjJfYWxsX2djYzQtbm90ZUdOVXN0YWNrLnBhdGNoCisyMDA1LTAyLTA4ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogc3JjL2FscGhhL29zZi5TOiBBZGQgLm5vdGUuR05VLXN0YWNrIG9uIExpbnV4LgorCSogc3JjL3MzOTAvc3lzdi5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUzogTGlrZXdpc2UuCisJKiBzcmMveDg2L3VuaXg2NC5TOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvc3lzdi5TOiBMaWtld2lzZS4KKwkqIHNyYy9zcGFyYy92OC5TOiBMaWtld2lzZS4KKwkqIHNyYy9zcGFyYy92OS5TOiBMaWtld2lzZS4KKwkqIHNyYy9tNjhrL3N5c3YuUzogTGlrZXdpc2UuCisJKiBzcmMvaWE2NC91bml4LlM6IExpa2V3aXNlLgorCSogc3JjL2FybS9zeXN2LlM6IExpa2V3aXNlLgorCisJKiBpYTY0X3NhdmVfcmVnc19pbl9zdGFjay5zOiBNb3ZlZCB0by4uLgorCSogaWE2NF9zYXZlX3JlZ3NfaW5fc3RhY2suUzogLi4uIHRoaXMuICBBZGQgLm5vdGUuR05VLXN0YWNrCisJb24gTGludXguCisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9ib2VobS1nYy9pYTY0X3NhdmVfcmVnc19pbl9zdGFjay5TIGdjYy00LjMuMy9ib2VobS1nYy9pYTY0X3NhdmVfcmVnc19pbl9zdGFjay5TCistLS0gZ2NjLTQuMy4zLm9yaWcvYm9laG0tZ2MvaWE2NF9zYXZlX3JlZ3NfaW5fc3RhY2suUwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9ib2VobS1nYy9pYTY0X3NhdmVfcmVnc19pbl9zdGFjay5TCTIwMDktMDEtMjcgMjI6MjU6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDE1IEBACisrICAgICAgICAudGV4dAorKyAgICAgICAgLmFsaWduIDE2CisrICAgICAgICAuZ2xvYmFsIEdDX3NhdmVfcmVnc19pbl9zdGFjaworKyAgICAgICAgLnByb2MgR0Nfc2F2ZV9yZWdzX2luX3N0YWNrCisrR0Nfc2F2ZV9yZWdzX2luX3N0YWNrOgorKyAgICAgICAgLmJvZHlmb28ubXBnCisrICAgICAgICBmbHVzaHJzCisrICAgICAgICA7OworKyAgICAgICAgbW92IHI4PWFyLmJzcAorKyAgICAgICAgYnIucmV0LnNwdGsuZmV3IHJwCisrICAgICAgICAuZW5kcCBHQ19zYXZlX3JlZ3NfaW5fc3RhY2sKKysKKysjaWZkZWYgX19saW51eF9fCisrCS5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvYm9laG0tZ2MvaWE2NF9zYXZlX3JlZ3NfaW5fc3RhY2sucyBnY2MtNC4zLjMvYm9laG0tZ2MvaWE2NF9zYXZlX3JlZ3NfaW5fc3RhY2sucworLS0tIGdjYy00LjMuMy5vcmlnL2JvZWhtLWdjL2lhNjRfc2F2ZV9yZWdzX2luX3N0YWNrLnMJMjAwMS0xMC0xNSAwNjo1Nzo1OS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvYm9laG0tZ2MvaWE2NF9zYXZlX3JlZ3NfaW5fc3RhY2sucwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorQEAgLTEsMTIgKzAsMCBAQAorLSAgICAgICAgLnRleHQKKy0gICAgICAgIC5hbGlnbiAxNgorLSAgICAgICAgLmdsb2JhbCBHQ19zYXZlX3JlZ3NfaW5fc3RhY2sKKy0gICAgICAgIC5wcm9jIEdDX3NhdmVfcmVnc19pbl9zdGFjaworLUdDX3NhdmVfcmVnc19pbl9zdGFjazoKKy0gICAgICAgIC5ib2R5CistICAgICAgICBmbHVzaHJzCistICAgICAgICA7OworLSAgICAgICAgbW92IHI4PWFyLmJzcAorLSAgICAgICAgYnIucmV0LnNwdGsuZmV3IHJwCistICAgICAgICAuZW5kcCBHQ19zYXZlX3JlZ3NfaW5fc3RhY2sKKy0KK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9hbHBoYS9vc2YuUyBnY2MtNC4zLjMvbGliZmZpL3NyYy9hbHBoYS9vc2YuUworLS0tIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvYWxwaGEvb3NmLlMJMjAwNy0wNC0wNiAxODoyNDoxNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGliZmZpL3NyYy9hbHBoYS9vc2YuUwkyMDA5LTAxLTI3IDIyOjI1OjI3LjAwMDAwMDAwMCArMDEwMAorQEAgLTM1OCw0ICszNTgsOCBAQAorIAkuYnl0ZQkxNgkJIyB1bGViMTI4IG9mZnNldCAxNiotOAorIAkuYWxpZ24gMworICRMRUZERTM6CisrCisrI2lmZGVmIF9fbGludXhfXworKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisrI2VuZGlmCisgI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvYXJtL3N5c3YuUyBnY2MtNC4zLjMvbGliZmZpL3NyYy9hcm0vc3lzdi5TCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9hcm0vc3lzdi5TCTIwMDctMDktMDQgMTk6NTI6NDUuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvYXJtL3N5c3YuUwkyMDA5LTAxLTI3IDIyOjI1OjI3LjAwMDAwMDAwMCArMDEwMAorQEAgLTI5MywzICsyOTMsNiBAQAorIAlVTldJTkQgLmZuZW5kCisgICAgICAgICAuc2l6ZSAgICBDTkFNRShmZmlfY2xvc3VyZV9TWVNWKSwuZmZpX2Nsb3N1cmVfU1lTVl9lbmQtQ05BTUUoZmZpX2Nsb3N1cmVfU1lTVikKKyAKKysjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIiwlcHJvZ2JpdHMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9pYTY0L3VuaXguUyBnY2MtNC4zLjMvbGliZmZpL3NyYy9pYTY0L3VuaXguUworLS0tIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvaWE2NC91bml4LlMJMjAwNS0wMy0zMCAyMzo0OToxOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGliZmZpL3NyYy9pYTY0L3VuaXguUwkyMDA5LTAxLTI3IDIyOjI1OjI3LjAwMDAwMDAwMCArMDEwMAorQEAgLTU1MywzICs1NTMsNyBAQAorIAlkYXRhOAlAcGNyZWwoLkxsZF9oZmFfZmxvYXQpCQkvLyBGRklfSUE2NF9UWVBFX0hGQV9GTE9BVAorIAlkYXRhOAlAcGNyZWwoLkxsZF9oZmFfZG91YmxlKQkJLy8gRkZJX0lBNjRfVFlQRV9IRkFfRE9VQkxFCisgCWRhdGE4CUBwY3JlbCguTGxkX2hmYV9sZG91YmxlKQkvLyBGRklfSUE2NF9UWVBFX0hGQV9MRE9VQkxFCisrCisrI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXworKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvbTY4ay9zeXN2LlMgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvbTY4ay9zeXN2LlMKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL202OGsvc3lzdi5TCTIwMDctMDUtMTAgMjM6Mjk6MDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvbTY4ay9zeXN2LlMJMjAwOS0wMS0yNyAyMjoyNToyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMDcsMyArMjA3LDcgQEAKKyAJcnRzCisgCUNGSV9FTkRQUk9DKCkKKyAJLnNpemUJZmZpX2Nsb3N1cmVfc3RydWN0X1NZU1YsLi1mZmlfY2xvc3VyZV9zdHJ1Y3RfU1lTVgorKworKyNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL3Bvd2VycGMvbGludXg2NC5TIGdjYy00LjMuMy9saWJmZmkvc3JjL3Bvd2VycGMvbGludXg2NC5TCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjQuUwkyMDA3LTExLTE3IDAwOjI0OjUzLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9saWJmZmkvc3JjL3Bvd2VycGMvbGludXg2NC5TCTIwMDktMDEtMjcgMjI6MjU6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtMTc5LDMgKzE3OSw3IEBACisgCS5hbGlnbiAzCisgLkxFRkRFMToKKyAjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TIGdjYy00LjMuMy9saWJmZmkvc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMJMjAwNS0wOC0xMSAyMzoxODoyNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TCTIwMDktMDEtMjcgMjI6MjU6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtMjA0LDMgKzIwNCw3IEBACisgCS5hbGlnbiAzCisgLkxFRkRFMToKKyAjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMJMjAwNy0xMi0wMSAyMjowMDowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvbGliZmZpL3NyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMJMjAwOS0wMS0yNyAyMjoyNToyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yOTUsMyArMjk1LDcgQEAKKyAuTEVGREUxOgorIAorICNlbmRpZgorKworKyNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL3Bvd2VycGMvc3lzdi5TIGdjYy00LjMuMy9saWJmZmkvc3JjL3Bvd2VycGMvc3lzdi5TCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9wb3dlcnBjL3N5c3YuUwkyMDA3LTEyLTAxIDIyOjAwOjA0LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9saWJmZmkvc3JjL3Bvd2VycGMvc3lzdi5TCTIwMDktMDEtMjcgMjI6MjU6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtMjIzLDMgKzIyMyw3IEBACisgICAgICAgLmFsaWduIDIKKyAuTEVGREUxOgorICNlbmRpZgorKworKyNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL3MzOTAvc3lzdi5TIGdjYy00LjMuMy9saWJmZmkvc3JjL3MzOTAvc3lzdi5TCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9zMzkwL3N5c3YuUwkyMDAzLTEwLTIxIDIxOjAxOjU4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9saWJmZmkvc3JjL3MzOTAvc3lzdi5TCTIwMDktMDEtMjcgMjI6MjU6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtNDI3LDMgKzQyNyw2IEBACisgCisgI2VuZGlmCisgCisrI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXworKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvc3BhcmMvdjguUyBnY2MtNC4zLjMvbGliZmZpL3NyYy9zcGFyYy92OC5TCistLS0gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy9zcGFyYy92OC5TCTIwMDgtMTEtMjEgMjM6MTM6MTMuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvc3BhcmMvdjguUwkyMDA5LTAxLTI3IDIyOjI1OjI3LjAwMDAwMDAwMCArMDEwMAorQEAgLTMwNiwzICszMDYsNyBAQAorIAkuYnl0ZQkweDFmCSEgdWxlYjEyOCAweDFmCisgCS5hbGlnbglXUworIC5MTEVGREUyOgorKworKyNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL3NwYXJjL3Y5LlMgZ2NjLTQuMy4zL2xpYmZmaS9zcmMvc3BhcmMvdjkuUworLS0tIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMvc3BhcmMvdjkuUwkyMDA0LTAxLTI1IDA3OjU4OjMzLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9saWJmZmkvc3JjL3NwYXJjL3Y5LlMJMjAwOS0wMS0yNyAyMjoyNToyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zMDAsMyArMzAwLDcgQEAKKyAJLmFsaWduIDgKKyAuTExFRkRFMjoKKyAjZW5kaWYKKysKKysjaWZkZWYgX19saW51eF9fCisrCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGliZmZpL3NyYy94ODYvc3lzdi5TIGdjYy00LjMuMy9saWJmZmkvc3JjL3g4Ni9zeXN2LlMKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJmZmkvc3JjL3g4Ni9zeXN2LlMJMjAwOC0wMS0zMCAxNTozNjo1OC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvbGliZmZpL3NyYy94ODYvc3lzdi5TCTIwMDktMDEtMjcgMjI6MjU6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtNDMwLDMgKzQzMCw3IEBACisgI2VuZGlmCisgCisgI2VuZGlmIC8qIGlmbmRlZiBfX3g4Nl82NF9fICovCisrCisrI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXworKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMveDg2L3VuaXg2NC5TIGdjYy00LjMuMy9saWJmZmkvc3JjL3g4Ni91bml4NjQuUworLS0tIGdjYy00LjMuMy5vcmlnL2xpYmZmaS9zcmMveDg2L3VuaXg2NC5TCTIwMDUtMDUtMDUgMDY6MDY6MzguMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2xpYmZmaS9zcmMveDg2L3VuaXg2NC5TCTIwMDktMDEtMjcgMjI6MjU6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtNDEwLDMgKzQxMCw3IEBACisgLkxFRkRFMzoKKyAKKyAjZW5kaWYgLyogX194ODZfNjRfXyAqLworKworKyNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKysJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8yMzAtcHIzNDU3MS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMjMwLXByMzQ1NzEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI4YTFjYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMjMwLXByMzQ1NzEucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMjMwLXByMzQ1NzEucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby82NF9hbGxfZ2NjNDMtcHIzNDU3MS5wYXRjaAoraHR0cDovL2djYy5nbnUub3JnL1BSMzQ1NzEKKworMjAwNy0xMi0yNiAgUmFzayBJbmdlbWFubiBMYW1iZXJ0c2VuICA8cmFza0BzeWdlaHVzLmRrPgorCisJUFIgdGFyZ2V0LzM0NTcxCisJKiBjb25maWcvYWxwaGEvYWxwaGEuYyAoYWxwaGFfY2Fubm90X2ZvcmNlX2NvbnN0X21lbSk6IFVzZQorCXN5bWJvbGljX29wZXJhbmQuCisJKiB2YXJhc20uYyAob3V0cHV0X2NvbnN0YW50X3Bvb2xfMSk6IEZpeCB0eXBvLgorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5jIGdjYy00LjMuMy9nY2MvY29uZmlnL2FscGhhL2FscGhhLmMKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FscGhhL2FscGhhLmMJMjAwOC0wOS0wOSAwMToxNjo1NS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5jCTIwMDktMDEtMjcgMjI6MjU6MjkuMDAwMDAwMDAwICswMTAwCitAQCAtMTExMyw4ICsxMTEzLDcgQEAKKyBzdGF0aWMgYm9vbAorIGFscGhhX2Nhbm5vdF9mb3JjZV9jb25zdF9tZW0gKHJ0eCB4KQorIHsKKy0gIGVudW0gcnR4X2NvZGUgY29kZSA9IEdFVF9DT0RFICh4KTsKKy0gIHJldHVybiBjb2RlID09IFNZTUJPTF9SRUYgfHwgY29kZSA9PSBMQUJFTF9SRUYgfHwgY29kZSA9PSBDT05TVDsKKysgIHJldHVybiBzeW1ib2xpY19vcGVyYW5kICh4LCBHRVRfTU9ERSAoeCkpOworIH0KKyAKKyAvKiBXZSBkbyBub3QgYWxsb3cgaW5kaXJlY3QgY2FsbHMgdG8gYmUgb3B0aW1pemVkIGludG8gc2libGluZyBjYWxscywgbm9yCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy42LzI0MC1wcjI1MzQzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8yNDAtcHIyNTM0My5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2Q2MzE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8yNDAtcHIyNTM0My5wYXRjaApAQCAtMCwwICsxLDI2IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8yNDAtcHIyNTM0My5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvZ2VudG9vLzY2X2FsbF9nY2M0My1wcjI1MzQzLnBhdGNoCitodHRwOi8vZ2NjLmdudS5vcmcvUFIyNTM0MworCitzbmlwZWQgZnJvbSBEZWJpYW4KKworMjAwOC0wNC0yNyAgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisKKwkqIGNvbmZpZy9ob3N0LWxpbnV4LmMgKFRSWV9FTVBUWV9WTV9TUEFDRSk6IERlZmluZSBmb3IgX19tYzY4MDAwX18uCisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2hvc3QtbGludXguYyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9ob3N0LWxpbnV4LmMKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2hvc3QtbGludXguYwkyMDA3LTA4LTAyIDEyOjQ5OjMxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL2hvc3QtbGludXguYwkyMDA5LTAxLTI3IDIyOjI1OjMxLjAwMDAwMDAwMCArMDEwMAorQEAgLTg0LDYgKzg0LDggQEAKKyAjIGRlZmluZSBUUllfRU1QVFlfVk1fU1BBQ0UJMHg4MDAwMDAwMDAwCisgI2VsaWYgZGVmaW5lZChfX3NwYXJjX18pCisgIyBkZWZpbmUgVFJZX0VNUFRZX1ZNX1NQQUNFCTB4NjAwMDAwMDAKKysjZWxpZiBkZWZpbmVkKF9fbWM2ODAwMF9fKQorKyMgZGVmaW5lIFRSWV9FTVBUWV9WTV9TUEFDRQkweDQwMDAwMDAwCisgI2Vsc2UKKyAjIGRlZmluZSBUUllfRU1QVFlfVk1fU1BBQ0UJMAorICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8yNTAtc2gtcHIyNDgzNi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMjUwLXNoLXByMjQ4MzYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUyOGIzNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMjUwLXNoLXByMjQ4MzYucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMjUwLXNoLXByMjQ4MzYucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL2dlbnRvby83NF9hbGxfc2gtcHIyNDgzNi5wYXRjaAoraHR0cDovL3NvdXJjZWZvcmdlLm5ldC9tYWlsYXJjaGl2ZS9mb3J1bS5waHA/dGhyZWFkX2lkPTg5NTkzMDQmZm9ydW1faWQ9NTM0OAoraHR0cDovL2djYy5nbnUub3JnL1BSMjQ4MzYKKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWd1cmUgZ2NjLTQuMy4zL2djYy9jb25maWd1cmUKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlndXJlCTIwMDktMDEtMjcgMjI6MTk6MTguMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWd1cmUJMjAwOS0wMS0yNyAyMjoyNTozMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMDY4OSw3ICsyMDY4OSw3IEBACisgCXRsc19maXJzdF9taW5vcj0xNAorIAl0bHNfYXNfb3B0PSItbTY0IC1BZXNhbWUgLS1mYXRhbC13YXJuaW5ncyIKKyAJOzsKKy0gIHNoLSotKiB8IHNoWzM0XS0qLSopCisrICBzaC0qLSogfCBzaFszNF0qLSotKikKKyAgICAgY29uZnRlc3Rfcz0nCisgCS5zZWN0aW9uICIudGRhdGEiLCJhd1QiLEBwcm9nYml0cworIGZvbzoJLmxvbmcJMjUKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYyBnY2MtNC4zLjMvZ2NjL2NvbmZpZ3VyZS5hYworLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWd1cmUuYWMJMjAwOS0wMS0yNyAyMjoxOToxOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZ3VyZS5hYwkyMDA5LTAxLTI3IDIyOjI1OjMzLjAwMDAwMDAwMCArMDEwMAorQEAgLTI1NTIsNyArMjU1Miw3IEBACisgCXRsc19maXJzdF9taW5vcj0xNAorIAl0bHNfYXNfb3B0PSItbTY0IC1BZXNhbWUgLS1mYXRhbC13YXJuaW5ncyIKKyAJOzsKKy0gIHNoLSotKiB8IHNoWzM0XS0qLSopCisrICBzaC0qLSogfCBzaFszNF0qLSotKikKKyAgICAgY29uZnRlc3Rfcz0nCisgCS5zZWN0aW9uICIudGRhdGEiLCJhd1QiLEBwcm9nYml0cworIGZvbzoJLmxvbmcJMjUKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMjYwLXVjbGliYy1jb25mLW5vdXBzdHJlYW0ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy42LzI2MC11Y2xpYmMtY29uZi1ub3Vwc3RyZWFtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNDYwMzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy42LzI2MC11Y2xpYmMtY29uZi1ub3Vwc3RyZWFtLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzI2MC11Y2xpYmMtY29uZi1ub3Vwc3RyZWFtLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS91Y2xpYmMvOTBfYWxsXzEwMy11Y2xpYmMtY29uZi1ub3Vwc3RyZWFtLnBhdGNoCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy5nY2MgZ2NjLTQuMy4zL2djYy9jb25maWcuZ2NjCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy5nY2MJMjAwOS0wMS0yNyAyMjoxOTozNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy5nY2MJMjAwOS0wMS0yNyAyMjoyNTozNS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMTQ2LDcgKzIxNDYsNyBAQAorICAgICAgICAgOzsKKyBzaC0qLWVsZiogfCBzaFsxMjM0NmxdKi0qLWVsZiogfCBzaCotKi1rYW9zKiB8IFwKKyBzaC0qLXN5bWJpYW5lbGYqIHwgc2hbMTIzNDZsXSotKi1zeW1iaWFuZWxmKiB8IFwKKy0gIHNoLSotbGludXgqIHwgc2hbMzQ2bGJlXSotKi1saW51eCogfCBcCisrICBzaCotKi1saW51eCogfCBzaFszNDZsYmVdKi0qLWxpbnV4KiB8IFwKKyAgIHNoLSotbmV0YnNkZWxmKiB8IHNobCotKi1uZXRic2RlbGYqIHwgc2g1LSotbmV0YnNkKiB8IHNoNWwqLSotbmV0YnNkKiB8IFwKKyAgICBzaDY0LSotbmV0YnNkKiB8IHNoNjRsKi0qLW5ldGJzZCopCisgCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gc2gvdC1zaCBzaC90LWVsZiIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMjcwLW1pc3NpbmctZXhlY2luZm9faC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMjcwLW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjM2ZjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8yNzAtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzI3MC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL3VjbGliYy85MF9hbGxfMzAxLW1pc3NpbmctZXhlY2luZm9faC5wYXRjaAorLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCBnY2MtNC4zLjMvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCistLS0gZ2NjLTQuMy4zLm9yaWcvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCTIwMDctMDQtMjMgMjM6MTA6MDkuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAkyMDA5LTAxLTI3IDIyOjI1OjM3LjAwMDAwMDAwMCArMDEwMAorQEAgLTUwMyw3ICs1MDMsNyBAQAorICNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX0dMSUJDX18pCisgIyBpbmNsdWRlIDxmZWF0dXJlcy5oPgorICMgaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxIHx8IF9fR0xJQkNfXyA+IDIpIFwKKy0gICAgICYmICFkZWZpbmVkKF9faWE2NF9fKQorKyAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pICYmICFkZWZpbmVkKF9fVUNMSUJDX18pCisgIyAgIGlmbmRlZiBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgICAgZGVmaW5lIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMjgwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMjgwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTg4NjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8yODAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzI4MC1jOTktY29tcGxleC11Z2x5LWhhY2sucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL3VjbGliYy85MF9hbGxfMzAzLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaAorLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYnN0ZGMrKy12My9jb25maWd1cmUgZ2NjLTQuMy4zL2xpYnN0ZGMrKy12My9jb25maWd1cmUKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJzdGRjKystdjMvY29uZmlndXJlCTIwMDgtMDctMDcgMjE6NDk6NTQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2xpYnN0ZGMrKy12My9jb25maWd1cmUJMjAwOS0wMS0yNyAyMjoyNTozOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zODkzNSw2ICszODkzNSw5IEBACisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaW5jbHVkZSA8Y29tcGxleC5oPgorKyNpZmRlZiBfX1VDTElCQ19fCisrI2Vycm9yIHVnbHkgaGFjayB0byBtYWtlIHN1cmUgY29uZmlndXJlIHRlc3QgZmFpbHMgaGVyZSBmb3IgY3Jvc3MgdW50aWwgdUNsaWJjIHN1cHBvcnRzIHRoZSBjb21wbGV4IGZ1bmNzCisrI2VuZGlmCisgaW50CisgbWFpbiAoKQorIHsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMjkwLWluZGV4X21hY3JvLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8yOTAtaW5kZXhfbWFjcm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JiODk5YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMjkwLWluZGV4X21hY3JvLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzI5MC1pbmRleF9tYWNyby5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvdWNsaWJjLzkwX2FsbF8zMDQtaW5kZXhfbWFjcm8ucGF0Y2gKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZSBnY2MtNC4zLjMvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQkyMDA4LTA3LTE1IDEyOjE0OjUxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQkyMDA5LTAxLTI3IDIyOjI1OjQxLjAwMDAwMDAwMCArMDEwMAorQEAgLTU5LDYgKzU5LDkgQEAKKyAjaW5jbHVkZSA8Yml0cy9ndGhyLmg+CisgI2luY2x1ZGUgPHRyMS9mdW5jdGlvbmFsPgorIAorKy8qIGNvcGUgdy8gaW5kZXggZGVmaW5lZCBhcyBtYWNybywgU3VTdjMgcHJvcG9zYWwgKi8KKysjdW5kZWYgaW5kZXgKKysKKyAjIGlmZGVmIF9fR0MKKyAjICAgZGVmaW5lIF9fR0NfQ09OU1QgY29uc3QKKyAjIGVsc2UKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmggZ2NjLTQuMy4zL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCistLS0gZ2NjLTQuMy4zLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgJMjAwNy0wNS0wNCAxNzowNjo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgJMjAwOS0wMS0yNyAyMjoyNTo0MS4wMDAwMDAwMDAgKzAxMDAKK0BAIC01NCw2ICs1NCw5IEBACisgI2luY2x1ZGUgPGV4dC9tZW1vcnk+IC8vIEZvciB1bmluaXRpYWxpemVkX2NvcHlfbgorICNpbmNsdWRlIDxleHQvbnVtZXJpYz4gLy8gRm9yIHBvd2VyCisgCisrLyogY29wZSB3LyBpbmRleCBkZWZpbmVkIGFzIG1hY3JvLCBTdVN2MyBwcm9wb3NhbCAqLworKyN1bmRlZiBpbmRleAorKworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisgCisgICB1c2luZyBzdGQ6OnNpemVfdDsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMzAwLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8zMDAtbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IyMGRhOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMzAwLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzMwMC1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvdWNsaWJjLzkwX2FsbF8zMDUtbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2gKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJtdWRmbGFwL21mLWhvb2tzMi5jIGdjYy00LjMuMy9saWJtdWRmbGFwL21mLWhvb2tzMi5jCistLS0gZ2NjLTQuMy4zLm9yaWcvbGlibXVkZmxhcC9tZi1ob29rczIuYwkyMDA1LTA5LTIzIDIzOjU4OjM5LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9saWJtdWRmbGFwL21mLWhvb2tzMi5jCTIwMDktMDEtMjcgMjI6MjU6NDUuMDAwMDAwMDAwICswMTAwCitAQCAtNDI3LDcgKzQyNyw3IEBACisgeworICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQocywgbiwgX19NRl9DSEVDS19XUklURSwgImJ6ZXJvIHJlZ2lvbiIpOworLSAgYnplcm8gKHMsIG4pOworKyAgbWVtc2V0IChzLCAwLCBuKTsKKyB9CisgCisgCitAQCAtNDM3LDcgKzQzNyw3IEBACisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzcmMsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjb3B5IHNyYyIpOworICAgTUZfVkFMSURBVEVfRVhURU5UKGRlc3QsIG4sIF9fTUZfQ0hFQ0tfV1JJVEUsICJiY29weSBkZXN0Iik7CistICBiY29weSAoc3JjLCBkZXN0LCBuKTsKKysgIG1lbW1vdmUgKGRlc3QsIHNyYywgbik7CisgfQorIAorIAorQEAgLTQ0Nyw3ICs0NDcsNyBAQAorICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQoczEsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjbXAgMXN0IGFyZyIpOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMyLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY21wIDJuZCBhcmciKTsKKy0gIHJldHVybiBiY21wIChzMSwgczIsIG4pOworKyAgcmV0dXJuIG1lbWNtcCAoczEsIHMyLCBuKTsKKyB9CisgCisgCitAQCAtNDU2LDcgKzQ1Niw3IEBACisgICBzaXplX3QgbiA9IHN0cmxlbiAocyk7CisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzLCBDTEFNUEFERChuLCAxKSwgX19NRl9DSEVDS19SRUFELCAiaW5kZXggcmVnaW9uIik7CistICByZXR1cm4gaW5kZXggKHMsIGMpOworKyAgcmV0dXJuIHN0cmNociAocywgYyk7CisgfQorIAorIAorQEAgLTQ2NSw3ICs0NjUsNyBAQAorICAgc2l6ZV90IG4gPSBzdHJsZW4gKHMpOworICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQocywgQ0xBTVBBREQobiwgMSksIF9fTUZfQ0hFQ0tfUkVBRCwgInJpbmRleCByZWdpb24iKTsKKy0gIHJldHVybiByaW5kZXggKHMsIGMpOworKyAgcmV0dXJuIHN0cnJjaHIgKHMsIGMpOworIH0KKyAKKyAvKiBYWFg6ICBzdHBjcHksIG1lbWNjcHkgKi8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMzEwLWFybS1zb2Z0ZmxvYXQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy42LzMxMC1hcm0tc29mdGZsb2F0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZGU0NWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy42LzMxMC1hcm0tc29mdGZsb2F0LnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzMxMC1hcm0tc29mdGZsb2F0LnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oIGdjYy00LjMuMy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMDctMTEtMDggMTQ6NDQ6MDkuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMDktMDEtMjcgMjI6MjU6NDcuMDAwMDAwMDAwICswMTAwCitAQCAtNjAsNyArNjAsNyBAQAorICAgICV7c2hhcmVkOi1sY30gXAorICAgICV7IXNoYXJlZDole3Byb2ZpbGU6LWxjX3B9JXshcHJvZmlsZTotbGN9fSIKKyAKKy0jZGVmaW5lIExJQkdDQ19TUEVDICIle21zb2Z0LWZsb2F0Oi1sZmxvYXR9ICV7bWZsb2F0LWFiaT1zb2Z0KjotbGZsb2F0fSAtbGdjYyIKKysjZGVmaW5lIExJQkdDQ19TUEVDICItbGdjYyIKKyAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisgCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvYXJtL3QtbGludXggZ2NjLTQuMy4zL2djYy9jb25maWcvYXJtL3QtbGludXgKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FybS90LWxpbnV4CTIwMDYtMTEtMDkgMjM6MTQ6MjcuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvYXJtL3QtbGludXgJMjAwOS0wMS0yNyAyMjoyNTo0Ny4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zLDcgKzMsMTIgQEAKKyBUQVJHRVRfTElCR0NDMl9DRkxBR1MgPSAtZm9taXQtZnJhbWUtcG9pbnRlciAtZlBJQworIAorIExJQjFBU01TUkMgPSBhcm0vbGliMWZ1bmNzLmFzbQorLUxJQjFBU01GVU5DUyA9IF91ZGl2c2kzIF9kaXZzaTMgX3Vtb2RzaTMgX21vZHNpMyBfZHZtZF9sbngKKytMSUIxQVNNRlVOQ1MgPSBfdWRpdnNpMyBfZGl2c2kzIF91bW9kc2kzIF9tb2RzaTMgX2R2bWRfdGxzIF9iYl9pbml0X2Z1bmMgXAorKwlfY2FsbF92aWFfclggX2ludGVyd29ya19jYWxsX3ZpYV9yWCBcCisrCV9sc2hyZGkzIF9hc2hyZGkzIF9hc2hsZGkzIFwKKysJX25lZ2RmMiBfYWRkc3ViZGYzIF9tdWxkaXZkZjMgX2NtcGRmMiBfdW5vcmRkZjIgX2ZpeGRmc2kgX2ZpeHVuc2Rmc2kgXAorKwlfdHJ1bmNkZnNmMiBfbmVnc2YyIF9hZGRzdWJzZjMgX211bGRpdnNmMyBfY21wc2YyIF91bm9yZHNmMiBcCisrCV9maXhzZnNpIF9maXh1bnNzZnNpIF9mbG9hdGRpZGYgX2Zsb2F0ZGlzZiBfZmxvYXR1bmRpZGYgX2Zsb2F0dW5kaXNmCisgCisgIyBNVUxUSUxJQl9PUFRJT05TID0gbWhhcmQtZmxvYXQvbXNvZnQtZmxvYXQKKyAjIE1VTFRJTElCX0RJUk5BTUVTID0gaGFyZC1mbG9hdCBzb2Z0LWZsb2F0CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy42LzMyMC1hbHBoYS1zaWduYWxfaC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMzIwLWFscGhhLXNpZ25hbF9oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNGRmM2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy42LzMyMC1hbHBoYS1zaWduYWxfaC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8zMjAtYWxwaGEtc2lnbmFsX2gucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC11bndpbmQuaCBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC11bndpbmQuaAorLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvYWxwaGEvbGludXgtdW53aW5kLmgJMjAwNi0xMC0yNiAyMTozMTowOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC11bndpbmQuaAkyMDA5LTAxLTI3IDIyOjI1OjQ5LjAwMDAwMDAwMCArMDEwMAorQEAgLTI5LDYgKzI5LDkgQEAKKyAvKiBEbyBjb2RlIHJlYWRpbmcgdG8gaWRlbnRpZnkgYSBzaWduYWwgZnJhbWUsIGFuZCBzZXQgdGhlIGZyYW1lCisgICAgc3RhdGUgZGF0YSBhcHByb3ByaWF0ZWx5LiAgU2VlIHVud2luZC1kdzIuYyBmb3IgdGhlIHN0cnVjdHMuICAqLworIAorKy8qIERvbid0IHVzZSB0aGlzIGlmIGluaGliaXRfbGliYyBpcyBzZXQKKysgICBUaGUgYnVpbGQgZm9yIHRoaXMgdGFyZ2V0IHdpbGwgZmFpbCB0cnlpbmcgdG8gaW5jbHVkZSBtaXNzaW5nIGhlYWRlcnMgKi8KKysjaWZuZGVmIGluaGliaXRfbGliYworICNpbmNsdWRlIDxzaWduYWwuaD4KKyAjaW5jbHVkZSA8c3lzL3Vjb250ZXh0Lmg+CisgCitAQCAtODAsMyArODMsNCBAQAorICAgZnMtPnJldGFkZHJfY29sdW1uID0gNjQ7CisgICByZXR1cm4gX1VSQ19OT19SRUFTT047CisgfQorKyNlbmRpZiAvKiBpbmhpYml0X2xpYmMgKi8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMzMwLXVud2luZC1mb3ItdUNsaWJjLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8zMzAtdW53aW5kLWZvci11Q2xpYmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM5N2MyZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMzMwLXVud2luZC1mb3ItdUNsaWJjLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzMzMC11bndpbmQtZm9yLXVDbGliYy5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL3QtbGludXgtdWNsaWJjIGdjYy00LjMuMy9nY2MvY29uZmlnL3QtbGludXgtdWNsaWJjCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy90LWxpbnV4LXVjbGliYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL3QtbGludXgtdWNsaWJjCTIwMDktMDEtMjcgMjI6Mjg6NTMuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDUgQEAKKysjIFJlbW92ZSBnbGliYyBzcGVjaWZpYyBmaWxlcyBhZGRlZCBpbiB0LWxpbnV4CisrU0hMSUJfTUFQRklMRVMgOj0gJChmaWx0ZXItb3V0ICQoc3JjZGlyKS9jb25maWcvbGliZ2NjLWdsaWJjLnZlciwgJChTSExJQl9NQVBGSUxFUykpCisrCisrIyBVc2UgdW53aW5kLWR3Mi1mZGUgaW5zdGVhZCBvZiB1bndpbmQtZHcyLWZkZS1nbGliYworK0xJQjJBRERFSCA6PSAkKHN1YnN0IHVud2luZC1kdzItZmRlLWdsaWJjLmMsdW53aW5kLWR3Mi1mZGUuYywkKExJQjJBRERFSCkpCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcuZ2NjIGdjYy00LjMuMy9nY2MvY29uZmlnLmdjYworLS0tIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcuZ2NjCTIwMDktMDEtMjcgMjI6MjU6MzcuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcuZ2NjCTIwMDktMDEtMjcgMjI6Mjg6NTMuMDAwMDAwMDAwICswMTAwCitAQCAtMjY0OCw2ICsyNjQ4LDEyIEBACisgCTs7CisgZXNhYworIAorKyMgUmF0aGVyIHRoYW4gaG9vayBpbnRvIGVhY2ggdGFyZ2V0LCBqdXN0IGRvIGl0IGFmdGVyIGFsbCB0aGUgbGludXgKKysjIHRhcmdldHMgaGF2ZSBiZWVuIHByb2Nlc3NlZAorK2Nhc2UgJHt0YXJnZXR9IGluCisrICAqLWxpbnV4LXVjbGliYyopIHRtX2RlZmluZXM9IiR7dG1fZGVmaW5lc30gVVNFX1VDTElCQyIgOyB0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IHQtbGludXgtdWNsaWJjIjs7CisrZXNhYworKworIGNhc2UgJHt0YXJnZXR9IGluCisgaVszNDU2N104Ni0qLWxpbnV4KmFvdXQqIHwgaVszNDU2N104Ni0qLWxpbnV4KmxpYmMxKQorIAl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IGkzODYvdC1nbW1fbWFsbG9jIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8zNDAtbWFrZS1tbm8tc3BlLXdvcmstYXMtZXhwZWN0ZWQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy42LzM0MC1tYWtlLW1uby1zcGUtd29yay1hcy1leHBlY3RlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDJkMjAzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8zNDAtbWFrZS1tbm8tc3BlLXdvcmstYXMtZXhwZWN0ZWQucGF0Y2gKQEAgLTAsMCArMSw5MCBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMzQwLW1ha2UtbW5vLXNwZS13b3JrLWFzLWV4cGVjdGVkLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorMjAwOC0wNC0wMyAgTmF0aGFuIEZyb3lkICA8ZnJveWRuakBjb2Rlc291cmNlcnkuY29tPgorICAgICAgICAgICAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AY29kZXNvdXJjZXJ5LmNvbT4KKworICAgICAgICAqIGNvbmZpZy9yczYwMDAvcnM2MDAwLm9wdCAobXNwZSk6IFJlbW92ZSBWYXIgcHJvcGVydHkuCisgICAgICAgIChtaXNlbCk6IExpa2V3aXNlLgorICAgICAgICAqIGNvbmZpZy9yczYwMDAvcnM2MDAwLmggKHJzNjAwMF9zcGUpOiBEZWNsYXJlLgorICAgICAgICAocnM2MDAwX2lzZWwpOiBMaWtld2lzZS4KKyAgICAgICAgKiBjb25maWcvcnM2MDAwL3JzNjAwMC5jIChyczYwMDBfc3BlKTogTmV3IHZhcmlhYmxlLgorICAgICAgICAocnM2MDAwX2lzZWwpOiBOZXcgdmFyaWFibGUuCisgICAgICAgIChyczYwMDBfaGFuZGxlX29wdGlvbik6IEhhbmRsZSBPUFRfbXNwZSBhbmQgT1BUX21pc2VsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuYyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmMKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuYwkyMDA4LTExLTE4IDIzOjA3OjU4LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuYwkyMDA5LTAxLTI3IDIyOjI4OjU1LjAwMDAwMDAwMCArMDEwMAorQEAgLTE3NCw5ICsxNzQsMTUgQEAKKyAvKiBOb256ZXJvIHRvIHVzZSBBbHRpVmVjIEFCSS4gICovCisgaW50IHJzNjAwMF9hbHRpdmVjX2FiaTsKKyAKKysvKiBOb256ZXJvIGlmIHdlIHdhbnQgU1BFIFNJTUQgaW5zdHJ1Y3Rpb25zLiAgKi8KKytpbnQgcnM2MDAwX3NwZTsKKysKKyAvKiBOb256ZXJvIGlmIHdlIHdhbnQgU1BFIEFCSSBleHRlbnNpb25zLiAgKi8KKyBpbnQgcnM2MDAwX3NwZV9hYmk7CisgCisrLyogTm9uemVybyB0byB1c2UgaXNlbCBpbnN0cnVjdGlvbnMuICAqLworK2ludCByczYwMDBfaXNlbDsKKysKKyAvKiBOb256ZXJvIGlmIGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbnMgYXJlIGRvbmUgaW4gdGhlIEdQUnMuICAqLworIGludCByczYwMDBfZmxvYXRfZ3BycyA9IDA7CisgCitAQCAtMjE0NCwxMSArMjE1MCwyMSBAQAorICAgICAgIHJzNjAwMF9wYXJzZV95ZXNfbm9fb3B0aW9uICgidnJzYXZlIiwgYXJnLCAmKFRBUkdFVF9BTFRJVkVDX1ZSU0FWRSkpOworICAgICAgIGJyZWFrOworIAorKyAgICBjYXNlIE9QVF9taXNlbDoKKysgICAgICByczYwMDBfZXhwbGljaXRfb3B0aW9ucy5pc2VsID0gdHJ1ZTsKKysgICAgICByczYwMDBfaXNlbCA9IHZhbHVlOworKyAgICAgIGJyZWFrOworKworICAgICBjYXNlIE9QVF9taXNlbF86CisgICAgICAgcnM2MDAwX2V4cGxpY2l0X29wdGlvbnMuaXNlbCA9IHRydWU7CisgICAgICAgcnM2MDAwX3BhcnNlX3llc19ub19vcHRpb24gKCJpc2VsIiwgYXJnLCAmKHJzNjAwMF9pc2VsKSk7CisgICAgICAgYnJlYWs7CisgCisrICAgIGNhc2UgT1BUX21zcGU6CisrICAgICAgcnM2MDAwX2V4cGxpY2l0X29wdGlvbnMuc3BlID0gdHJ1ZTsKKysgICAgICByczYwMDBfc3BlID0gdmFsdWU7CisrICAgICAgYnJlYWs7CisrCisgICAgIGNhc2UgT1BUX21zcGVfOgorICAgICAgIHJzNjAwMF9leHBsaWNpdF9vcHRpb25zLnNwZSA9IHRydWU7CisgICAgICAgcnM2MDAwX3BhcnNlX3llc19ub19vcHRpb24gKCJzcGUiLCBhcmcsICYocnM2MDAwX3NwZSkpOworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuaCBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmgKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuaAkyMDA4LTAxLTI2IDE4OjE4OjM1LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuaAkyMDA5LTAxLTI3IDIyOjI4OjU1LjAwMDAwMDAwMCArMDEwMAorQEAgLTM0OSw2ICszNDksOCBAQAorIGV4dGVybiBpbnQgcnM2MDAwX2llZWVxdWFkOworIGV4dGVybiBpbnQgcnM2MDAwX2FsdGl2ZWNfYWJpOworIGV4dGVybiBpbnQgcnM2MDAwX3NwZV9hYmk7CisrZXh0ZXJuIGludCByczYwMDBfc3BlOworK2V4dGVybiBpbnQgcnM2MDAwX2lzZWw7CisgZXh0ZXJuIGludCByczYwMDBfZmxvYXRfZ3ByczsKKyBleHRlcm4gaW50IHJzNjAwMF9hbGlnbm1lbnRfZmxhZ3M7CisgZXh0ZXJuIGNvbnN0IGNoYXIgKnJzNjAwMF9zY2hlZF9pbnNlcnRfbm9wc19zdHI7CitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5vcHQgZ2NjLTQuMy4zL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5vcHQKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAub3B0CTIwMDctMTAtMzEgMDg6NTY6MDEuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5vcHQJMjAwOS0wMS0yNyAyMjoyODo1NS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xOTAsNyArMTkwLDcgQEAKKyAtbXZyc2F2ZT15ZXMvbm8JRGVwcmVjYXRlZCBvcHRpb24uICBVc2UgLW12cnNhdmUvLW1uby12cnNhdmUgaW5zdGVhZAorIAorIG1pc2VsCistVGFyZ2V0IFZhcihyczYwMDBfaXNlbCkKKytUYXJnZXQKKyBHZW5lcmF0ZSBpc2VsIGluc3RydWN0aW9ucworIAorIG1pc2VsPQorQEAgLTE5OCw3ICsxOTgsNyBAQAorIC1taXNlbD15ZXMvbm8JRGVwcmVjYXRlZCBvcHRpb24uICBVc2UgLW1pc2VsLy1tbm8taXNlbCBpbnN0ZWFkCisgCisgbXNwZQorLVRhcmdldCBWYXIocnM2MDAwX3NwZSkKKytUYXJnZXQKKyBHZW5lcmF0ZSBTUEUgU0lNRCBpbnN0cnVjdGlvbnMgb24gRTUwMAorIAorIG1wYWlyZWQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMzUwLXNoLXdpdGhvdXQtaGVhZGVycy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMzUwLXNoLXdpdGhvdXQtaGVhZGVycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmI4NjBkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8zNTAtc2gtd2l0aG91dC1oZWFkZXJzLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzM1MC1zaC13aXRob3V0LWhlYWRlcnMucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPbiAyMDA4MTAxMSwgS2hlbSBSQUogd3JpdGVzOgorIFlvdSBoYXZlIHRvIGJhciBnY2MgdHJ5aW5nIHRvIGJ1aWxkIHVud2luZGluZyBhdCBzdGFnZSAxLiBUcnkgdGhlCisgYXR0YWNoZWQgcGF0Y2ggYW5kIHNlZSBpZiBpdCBoZWxwcy4KKworIGdjYy9jb25maWcvc2gvbGludXgtdW53aW5kLmggfCAgICAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2djYy9jb25maWcvc2gvbGludXgtdW53aW5kLmggZ2NjLTQuMy4zL2djYy9jb25maWcvc2gvbGludXgtdW53aW5kLmgKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL3NoL2xpbnV4LXVud2luZC5oCTIwMDctMDktMTIgMDg6NTk6MDYuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2djYy9jb25maWcvc2gvbGludXgtdW53aW5kLmgJMjAwOS0wMS0yNyAyMjoyODo1Ny4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNiw2ICsyNiw4IEBACisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgCisrI2lmbmRlZiBpbmhpYml0X2xpYmMKKysKKyAvKiBEbyBjb2RlIHJlYWRpbmcgdG8gaWRlbnRpZnkgYSBzaWduYWwgZnJhbWUsIGFuZCBzZXQgdGhlIGZyYW1lCisgICAgc3RhdGUgZGF0YSBhcHByb3ByaWF0ZWx5LiAgU2VlIHVud2luZC1kdzIuYyBmb3IgdGhlIHN0cnVjdHMuICAqLworIAorQEAgLTI1MSwzICsyNTMsNCBAQAorICAgcmV0dXJuIF9VUkNfTk9fUkVBU09OOworIH0KKyAjZW5kaWYgLyogZGVmaW5lZCAoX19TSDVfXykgKi8KKysjZW5kaWYgLyogaWZuZGVmIGluaGliaXRfbGliYyAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8zODAtcHIzNzQzNi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMzgwLXByMzc0MzYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlhMDE2ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMzgwLXByMzc0MzYucGF0Y2gKQEAgLTAsMCArMSw4NiBAQAorZ2NjIHN2biAxNDI3Nzg6CisKK1BSIHRhcmdldC8zNzQzNgorKiBhcm0uYyAoYXJtX2xlZ2l0aW1hdGVfaW5kZXgpOiBPbmx5IGFjY2VwdCBhZGRyZXNzZXMgdGhhdCBhcmUgaW4KK2Nhbm9uaWNhbCBmb3JtLgorKiBwcmVkaWNhdGVzLm1kIChhcm1fcmVnX29yX2V4dGVuZHFpc2lfbWVtX29wKTogTmV3IHByZWRpY2F0ZS4KKyogYXJtLm1kIChleHRlbmRxaWhpMik6IFVzZSBhcm1fcmVnX29yX2V4dGVuZHFpc2lfbWVtX29wIHByZWRpY2F0ZQorZm9yIG9wZXJhbmQxLgorKGV4dGVuZHFpc2kyKTogTGlrZXdpc2UuCisoYXJtX2V4dGVuZHFpc2ksIGFybV9leHRlbmRxaXNpX3Y2KTogVXNlIGFybV9leHRlbmRxaXNpX21lbV9vcAorcHJlZGljYXRlIGZvciBvcGVyYW5kMS4KKworZGlmZiAtTnVyYSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FybS9hcm0uYyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hcm0vYXJtLmMKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FybS9hcm0uYwkyMDA4LTA2LTExIDA3OjUyOjU1LjAwMDAwMDAwMCAtMDMwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL2FybS9hcm0uYwkyMDA5LTA1LTIxIDE2OjA2OjQ1LjAwMDAwMDAwMCAtMDMwMAorQEAgLTM3NjksNiArMzc2OSw3IEBACisgICAgICAgcnR4IHhvcDEgPSBYRVhQICh4LCAxKTsKKyAKKyAgICAgICByZXR1cm4gKChhcm1fYWRkcmVzc19yZWdpc3Rlcl9ydHhfcCAoeG9wMCwgc3RyaWN0X3ApCisrCSAgICAgICAmJiBHRVRfQ09ERSh4b3AxKSA9PSBDT05TVF9JTlQKKyAJICAgICAgICYmIGFybV9sZWdpdGltYXRlX2luZGV4X3AgKG1vZGUsIHhvcDEsIG91dGVyLCBzdHJpY3RfcCkpCisgCSAgICAgIHx8IChhcm1fYWRkcmVzc19yZWdpc3Rlcl9ydHhfcCAoeG9wMSwgc3RyaWN0X3ApCisgCQkgICYmIGFybV9sZWdpdGltYXRlX2luZGV4X3AgKG1vZGUsIHhvcDAsIG91dGVyLCBzdHJpY3RfcCkpKTsKK2RpZmYgLU51cmEgZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hcm0vYXJtLm1kIGdjYy00LjMuMy9nY2MvY29uZmlnL2FybS9hcm0ubWQKKy0tLSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FybS9hcm0ubWQJMjAwNy0wOS0wNCAwMTo0NDo0Ny4wMDAwMDAwMDAgLTAzMDAKKysrKyBnY2MtNC4zLjMvZ2NjL2NvbmZpZy9hcm0vYXJtLm1kCTIwMDktMDUtMjEgMTY6MDY6NDUuMDAwMDAwMDAwIC0wMzAwCitAQCAtNDE5OSw3ICs0MTk5LDcgQEAKKyAKKyAoZGVmaW5lX2V4cGFuZCAiZXh0ZW5kcWloaTIiCisgICBbKHNldCAobWF0Y2hfZHVwIDIpCistCShhc2hpZnQ6U0kgKG1hdGNoX29wZXJhbmQ6UUkgMSAiZ2VuZXJhbF9vcGVyYW5kIiAiIikKKysJKGFzaGlmdDpTSSAobWF0Y2hfb3BlcmFuZDpRSSAxICJhcm1fcmVnX29yX2V4dGVuZHFpc2lfbWVtX29wIiAiIikKKyAJCSAgIChjb25zdF9pbnQgMjQpKSkKKyAgICAoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAgInNfcmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisgCShhc2hpZnRydDpTSSAobWF0Y2hfZHVwIDIpCitAQCAtNDIyNCw3ICs0MjI0LDcgQEAKKyAKKyAoZGVmaW5lX2luc24gIiphcm1fZXh0ZW5kcWloaV9pbnNuIgorICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SEkgMCAic19yZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorLQkoc2lnbl9leHRlbmQ6SEkgKG1hdGNoX29wZXJhbmQ6UUkgMSAibWVtb3J5X29wZXJhbmQiICJVcSIpKSldCisrCShzaWduX2V4dGVuZDpISSAobWF0Y2hfb3BlcmFuZDpRSSAxICJhcm1fZXh0ZW5kcWlzaV9tZW1fb3AiICJVcSIpKSldCisgICAiVEFSR0VUX0FSTSAmJiBhcm1fYXJjaDQiCisgICAibGRyJShzYiUpXFx0JTAsICUxIgorICAgWyhzZXRfYXR0ciAidHlwZSIgImxvYWRfYnl0ZSIpCitAQCAtNDIzNSw3ICs0MjM1LDcgQEAKKyAKKyAoZGVmaW5lX2V4cGFuZCAiZXh0ZW5kcWlzaTIiCisgICBbKHNldCAobWF0Y2hfZHVwIDIpCistCShhc2hpZnQ6U0kgKG1hdGNoX29wZXJhbmQ6UUkgMSAiZ2VuZXJhbF9vcGVyYW5kIiAiIikKKysJKGFzaGlmdDpTSSAobWF0Y2hfb3BlcmFuZDpRSSAxICJhcm1fcmVnX29yX2V4dGVuZHFpc2lfbWVtX29wIiAiIikKKyAJCSAgIChjb25zdF9pbnQgMjQpKSkKKyAgICAoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInNfcmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisgCShhc2hpZnRydDpTSSAobWF0Y2hfZHVwIDIpCitAQCAtNDI2Nyw3ICs0MjY3LDcgQEAKKyAKKyAoZGVmaW5lX2luc24gIiphcm1fZXh0ZW5kcWlzaSIKKyAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInNfcmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKy0JKHNpZ25fZXh0ZW5kOlNJIChtYXRjaF9vcGVyYW5kOlFJIDEgIm1lbW9yeV9vcGVyYW5kIiAiVXEiKSkpXQorKwkoc2lnbl9leHRlbmQ6U0kgKG1hdGNoX29wZXJhbmQ6UUkgMSAiYXJtX2V4dGVuZHFpc2lfbWVtX29wIiAiVXEiKSkpXQorICAgIlRBUkdFVF9BUk0gJiYgYXJtX2FyY2g0ICYmICFhcm1fYXJjaDYiCisgICAibGRyJShzYiUpXFx0JTAsICUxIgorICAgWyhzZXRfYXR0ciAidHlwZSIgImxvYWRfYnl0ZSIpCitAQCAtNDI3OCw3ICs0Mjc4LDggQEAKKyAKKyAoZGVmaW5lX2luc24gIiphcm1fZXh0ZW5kcWlzaV92NiIKKyAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInNfcmVnaXN0ZXJfb3BlcmFuZCIgIj1yLHIiKQorLQkoc2lnbl9leHRlbmQ6U0kgKG1hdGNoX29wZXJhbmQ6UUkgMSAibm9uaW1tZWRpYXRlX29wZXJhbmQiICJyLFVxIikpKV0KKysJKHNpZ25fZXh0ZW5kOlNJCisrCSAobWF0Y2hfb3BlcmFuZDpRSSAxICJhcm1fcmVnX29yX2V4dGVuZHFpc2lfbWVtX29wIiAicixVcSIpKSldCisgICAiVEFSR0VUX0FSTSAmJiBhcm1fYXJjaDYiCisgICAiQAorICAgIHN4dGIlP1xcdCUwLCAlMQorZGlmZiAtTnVyYSBnY2MtNC4zLjMub3JpZy9nY2MvY29uZmlnL2FybS9wcmVkaWNhdGVzLm1kIGdjYy00LjMuMy9nY2MvY29uZmlnL2FybS9wcmVkaWNhdGVzLm1kCistLS0gZ2NjLTQuMy4zLm9yaWcvZ2NjL2NvbmZpZy9hcm0vcHJlZGljYXRlcy5tZAkyMDA3LTA4LTAyIDA3OjQ5OjMxLjAwMDAwMDAwMCAtMDMwMAorKysrIGdjYy00LjMuMy9nY2MvY29uZmlnL2FybS9wcmVkaWNhdGVzLm1kCTIwMDktMDUtMjEgMTY6MDY6NDUuMDAwMDAwMDAwIC0wMzAwCitAQCAtMjM0LDYgKzIzNCwxMCBAQAorICAgICAgICAobWF0Y2hfdGVzdCAiYXJtX2xlZ2l0aW1hdGVfYWRkcmVzc19wIChtb2RlLCBYRVhQIChvcCwgMCksIFNJR05fRVhURU5ELAorIAkJCQkJICAgICAgMCkiKSkpCisgCisrKGRlZmluZV9zcGVjaWFsX3ByZWRpY2F0ZSAiYXJtX3JlZ19vcl9leHRlbmRxaXNpX21lbV9vcCIKKysgIChpb3IgKG1hdGNoX29wZXJhbmQgMCAiYXJtX2V4dGVuZHFpc2lfbWVtX29wIikKKysgICAgICAgKG1hdGNoX29wZXJhbmQgMCAic19yZWdpc3Rlcl9vcGVyYW5kIikpKQorKworIChkZWZpbmVfcHJlZGljYXRlICJwb3dlcl9vZl90d29fb3BlcmFuZCIKKyAgIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQorIHsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMzkwLXVuYnJlYWstYXJtdjR0LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi8zOTAtdW5icmVhay1hcm12NHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYxNGUwZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvMzkwLXVuYnJlYWstYXJtdjR0LnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKKy0tLSBnY2MtNC4zLjIub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgJMjAwOS0wOS0wOCAyMzo0Njo0NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCTIwMDktMDktMDggMjM6NDY6NTEuMDAwMDAwMDAwICswMjAwCitAQCAtNDQsNyArNDQsNyBAQAorICAgIFRoZSBBUk0xMFRETUkgY29yZSBpcyB0aGUgZGVmYXVsdCBmb3IgYXJtdjV0LCBzbyBzZXQKKyAgICBTVUJUQVJHRVRfQ1BVX0RFRkFVTFQgdG8gYWNoaWV2ZSB0aGlzLiAgKi8KKyAjdW5kZWYgIFNVQlRBUkdFVF9DUFVfREVGQVVMVAorLSNkZWZpbmUgU1VCVEFSR0VUX0NQVV9ERUZBVUxUIFRBUkdFVF9DUFVfYXJtMTB0ZG1pCisrI2RlZmluZSBTVUJUQVJHRVRfQ1BVX0RFRkFVTFQgVEFSR0VUX0NQVV9hcm05dGRtaQorIAorIC8qIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQgaXMgc2V0IGluCisgICAgY29uZmlnLmdjYyBmb3IgYmlnIGVuZGlhbiBjb25maWd1cmF0aW9ucy4gICovCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy42LzQwMC1lY2p4LWhvc3QtY2MucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy42LzQwMC1lY2p4LWhvc3QtY2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkzMDY5YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvNDAwLWVjangtaG9zdC1jYy5wYXRjaApAQCAtMCwwICsxLDEzIEBACitkaWZmIC11ciBnY2MtNC4zLjQtb3JpZy9saWJqYXZhL01ha2VmaWxlLmluIGdjYy00LjMuNC9saWJqYXZhL01ha2VmaWxlLmluCistLS0gZ2NjLTQuMy40LW9yaWcvbGliamF2YS9NYWtlZmlsZS5pbgkyMDA5LTA4LTA0IDA0OjEyOjI3LjAwMDAwMDAwMCAtMDcwMAorKysrIGdjYy00LjMuNC9saWJqYXZhL01ha2VmaWxlLmluCTIwMDktMDktMjMgMjI6MDM6MTUuNzUwOTUxNDgzIC0wNzAwCitAQCAtODg3NCw2ICs4ODc0LDkgQEAKKyBlY2p4JChFWEVFWFQpOiAkKGVjanhfT0JKRUNUUykgJChlY2p4X0RFUEVOREVOQ0lFUykgCisgCUBybSAtZiBlY2p4JChFWEVFWFQpCisgCSQoZWNqeF9MSU5LKSAkKGVjanhfTERGTEFHUykgJChlY2p4X09CSkVDVFMpICQoZWNqeF9MREFERCkgJChMSUJTKQorK2VjanguJChPQkpFWFQpOiAkKGVjanhfU09VUkNFUykKKysJQHJtIC1mIGVjanguJChPQkpFWFQpCisrCSQoQ0NfRk9SX0JVSUxEKSAkKEJVSUxEX0NGTEFHUykgLWMgLW8gJEAgJDwKKyBnYXBwbGV0dmlld2VyJChFWEVFWFQpOiAkKGdhcHBsZXR2aWV3ZXJfT0JKRUNUUykgJChnYXBwbGV0dmlld2VyX0RFUEVOREVOQ0lFUykgCisgCUBybSAtZiBnYXBwbGV0dmlld2VyJChFWEVFWFQpCisgCSQoZ2FwcGxldHZpZXdlcl9MSU5LKSAkKGdhcHBsZXR2aWV3ZXJfTERGTEFHUykgJChnYXBwbGV0dmlld2VyX09CSkVDVFMpICQoZ2FwcGxldHZpZXdlcl9MREFERCkgJChMSUJTKQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi80MTAtcHI0MjI4OS1maXgtbGliZmZpLWJ1aWxkLW9uLWFybS1vYWJpLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi80MTAtcHI0MjI4OS1maXgtbGliZmZpLWJ1aWxkLW9uLWFybS1vYWJpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NTQ4NzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuMy42LzQxMC1wcjQyMjg5LWZpeC1saWJmZmktYnVpbGQtb24tYXJtLW9hYmkucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorLS0tIGdjYy00LjMuNC9saWJmZmkvc3JjL2FybS9zeXN2LlMJCisrKysgZ2NjLTQuMy40L2xpYmZmaS9zcmMvYXJtL3N5c3YuUwkKK0BAIC0yMzUsNyArMjM1LDcgQEAgQVJNX0ZVTkNfU1RBUlQgZmZpX2Nsb3N1cmVfU1lTVgorIAlzdG1mZAlzcCEsIHtpcCwgbHJ9CisgCVVOV0lORCAuc2F2ZQl7cjAsIGxyfQorIAlhZGQJcjIsIHNwLCAjOAorLQkucGFkICMxNgorKwlVTldJTkQgLnBhZCAjMTYKKyAJc3ViCXNwLCBzcCwgIzE2CisgCXN0cglzcCwgW3NwLCAjOF0KKyAJYWRkCXIxLCBzcCwgIzgKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvNDIwLWxpYmdjY19laC5hLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjMuNi80MjAtbGliZ2NjX2VoLmEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU0MTk4YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC4zLjYvNDIwLWxpYmdjY19laC5hLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0hpZ2hseSBpbnNwaXJlZCBieToKKyAgaHR0cDovL2xhbmRsZXkubmV0L2hnL2Fib3JpZ2luYWwvZmlsZS83ZTA3NDdhNjY1YWIvc291cmNlcy9wYXRjaGVzL2djYy1jb3JlLWxpYmdjY2VoLnBhdGNoCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4yLm9yaWcvL2xpYmdjYy9NYWtlZmlsZS5pbiBnY2MtNC4zLjIvbGliZ2NjL01ha2VmaWxlLmluCistLS0gZ2NjLTQuMy4yLm9yaWcvL2xpYmdjYy9NYWtlZmlsZS5pbgkyMDA4LTA2LTE3IDExOjMyOjM0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMi9saWJnY2MvTWFrZWZpbGUuaW4JMjAxMS0wOS0wMiAxMjoyNzozOS4yOTY1Mzg5NTUgKzAyMDAKK0BAIC03MDUsOCArNzA1LDkgQEAKKyBsaWJnY2NfcyQoU0hMSUJfRVhUKTogbGlidW53aW5kJChTSExJQl9FWFQpCisgZW5kaWYKKyAKKythbGw6IGxpYmdjY19laC5hCisgaWZlcSAoJChlbmFibGVfc2hhcmVkKSx5ZXMpCistYWxsOiBsaWJnY2NfZWguYSBsaWJnY2NfcyQoU0hMSUJfRVhUKQorK2FsbDogbGliZ2NjX3MkKFNITElCX0VYVCkKKyBpZm5lcSAoJChMSUJVTldJTkQpLCkKKyBhbGw6IGxpYnVud2luZCQoU0hMSUJfRVhUKQorIGVuZGlmCitAQCAtODc1LDEwICs4NzYsNiBAQAorIGluc3RhbGwtc2hhcmVkOgorIAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGluc3RfbGliZGlyKQorIAorLQkkKElOU1RBTExfREFUQSkgbGliZ2NjX2VoLmEgJChERVNURElSKSQoaW5zdF9saWJkaXIpLworLQljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCistCSQoUkFOTElCKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKy0KKyAJJChzdWJzdCBAbXVsdGlsaWJfZGlyQCwkKE1VTFRJRElSKSwkKHN1YnN0IFwKKyAJCUBzaGxpYl9iYXNlX25hbWVALGxpYmdjY19zLCQoc3Vic3QgXAorIAkJQHNobGliX3NsaWJkaXJfcXVhbEAsJChNVUxUSU9TU1VCRElSKSwkKFNITElCX0lOU1RBTEwpKSkpCitAQCAtODkzLDYgKzg5MCwxMCBAQAorIAljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjb3YuYQorIAkkKFJBTkxJQikgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjb3YuYQorIAorKwkkKElOU1RBTExfREFUQSkgbGliZ2NjX2VoLmEgJChERVNURElSKSQoaW5zdF9saWJkaXIpLworKwljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCisrCSQoUkFOTElCKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKysKKyAJcGFydHM9IiQoSU5TVEFMTF9QQVJUUykiOwkJCQlcCisgCWZvciBmaWxlIGluICQkcGFydHM7IGRvCQkJCQlcCisgCSAgcm0gLWYgJChERVNURElSKSQoaW5zdF9saWJkaXIpLyQkZmlsZTsJCVwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMTAwLWFscGhhLW1pZWVlLWRlZmF1bHQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzEwMC1hbHBoYS1taWVlZS1kZWZhdWx0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZjBkYzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzEwMC1hbHBoYS1taWVlZS1kZWZhdWx0LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5oIGdjYy00LjQuMC9nY2MvY29uZmlnL2FscGhhL2FscGhhLmgKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2FscGhhL2FscGhhLmgJMjAwOS0wMi0yMCAxNjoyMDozOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5oCTIwMDktMDUtMjcgMjE6Mzc6NTguMDAwMDAwMDAwICswMjAwCitAQCAtOTUsNiArOTUsOCBAQAorICAgd2hpbGUgKDApCisgI2VuZGlmCisgCisrI2RlZmluZSBDUFBfU1BFQyAiJXshbm8taWVlZTotbWllZWV9IgorKworICNkZWZpbmUgV09SRF9TV0lUQ0hfVEFLRVNfQVJHKFNUUikJCVwKKyAgKCFzdHJjbXAgKFNUUiwgInJwYXRoIikgfHwgREVGQVVMVF9XT1JEX1NXSVRDSF9UQUtFU19BUkcoU1RSKSkKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5vcHQgZ2NjLTQuNC4wL2djYy9jb25maWcvYWxwaGEvYWxwaGEub3B0CistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5vcHQJMjAwNy0wOC0wMiAxMjo0OTozMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5vcHQJMjAwOS0wNS0yNyAyMTozNzo1OC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zOSw3ICszOSw3IEBACisgUmVxdWVzdCBJRUVFLWNvbmZvcm1hbnQgbWF0aCBsaWJyYXJ5IHJvdXRpbmVzIChPU0YvMSkKKyAKKyBtaWVlZQorLVRhcmdldCBSZXBvcnQgUmVqZWN0TmVnYXRpdmUgTWFzayhJRUVFKQorK1RhcmdldCBSZXBvcnQgTWFzayhJRUVFKQorIEVtaXQgSUVFRS1jb25mb3JtYW50IGNvZGUsIHdpdGhvdXQgaW5leGFjdCBleGNlcHRpb25zCisgCisgbWllZWUtd2l0aC1pbmV4YWN0CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzExMC10cmFtcG9saW5ld2Fybi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMTEwLXRyYW1wb2xpbmV3YXJuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZWY0OTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzExMC10cmFtcG9saW5ld2Fybi5wYXRjaApAQCAtMCwwICsxLDI3IEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9idWlsdGlucy5jIGdjYy00LjQuMC9nY2MvYnVpbHRpbnMuYworLS0tIGdjYy00LjQuMC5vcmlnL2djYy9idWlsdGlucy5jCTIwMDktMDMtMzAgMTk6NDI6MjcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9idWlsdGlucy5jCTIwMDktMDUtMjcgMjE6Mzg6MDEuMDAwMDAwMDAwICswMjAwCitAQCAtNTc2OCw2ICs1NzY4LDkgQEAKKyAgIHRyYW1wb2xpbmVzX2NyZWF0ZWQgPSAxOworICAgSU5JVElBTElaRV9UUkFNUE9MSU5FIChyX3RyYW1wLCByX2Z1bmMsIHJfY2hhaW4pOworIAorKyAgaWYgKHdhcm5fdHJhbXBvbGluZXMpCisrICAgIHdhcm5pbmcgKE9QVF9XdHJhbXBvbGluZXMsICJnZW5lcmF0aW5nIHRyYW1wb2xpbmUgaW4gb2JqZWN0IChyZXF1aXJlcyBleGVjdXRhYmxlIHN0YWNrKSIpOworKworICAgcmV0dXJuIGNvbnN0MF9ydHg7CisgfQorIAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29tbW9uLm9wdCBnY2MtNC40LjAvZ2NjL2NvbW1vbi5vcHQKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29tbW9uLm9wdAkyMDA5LTAzLTI4IDE4OjI4OjQ1LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuMC9nY2MvY29tbW9uLm9wdAkyMDA5LTA1LTI3IDIxOjM4OjAxLjAwMDAwMDAwMCArMDIwMAorQEAgLTE5Nyw2ICsxOTcsMTAgQEAKKyBDb21tb24gVmFyKHdhcm5fdHlwZV9saW1pdHMpIEluaXQoLTEpIFdhcm5pbmcKKyBXYXJuIGlmIGEgY29tcGFyaXNvbiBpcyBhbHdheXMgdHJ1ZSBvciBhbHdheXMgZmFsc2UgZHVlIHRvIHRoZSBsaW1pdGVkIHJhbmdlIG9mIHRoZSBkYXRhIHR5cGUKKyAKKytXdHJhbXBvbGluZXMKKytDb21tb24gVmFyKHdhcm5fdHJhbXBvbGluZXMpIEluaXQoMSkKKytXYXJuIHdoZW5ldmVyIGEgdHJhbXBvbGluZSBpcyBnZW5lcmF0ZWQKKysKKyBXdW5pbml0aWFsaXplZAorIENvbW1vbiBWYXIod2Fybl91bmluaXRpYWxpemVkKSBXYXJuaW5nCisgV2FybiBhYm91dCB1bmluaXRpYWxpemVkIGF1dG9tYXRpYyB2YXJpYWJsZXMKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMTIwLWphdmEtbm9tdWx0aS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMTIwLWphdmEtbm9tdWx0aS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDU0NzljCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMC8xMjAtamF2YS1ub211bHRpLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvbGliamF2YS9jb25maWd1cmUgZ2NjLTQuNC4wL2xpYmphdmEvY29uZmlndXJlCistLS0gZ2NjLTQuNC4wLm9yaWcvbGliamF2YS9jb25maWd1cmUJMjAwOS0wNC0yMSAxMTowODowOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvbGliamF2YS9jb25maWd1cmUJMjAwOS0wNS0yNyAyMTozODowMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMDIxLDYgKzEwMjEsOCBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD15ZXMKKyAgIC0tZW5hYmxlLWphdmEtbWFpbnRhaW5lci1tb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdyByZWJ1aWxkaW5nIG9mIC5jbGFzcyBhbmQgLmggZmlsZXMKKysgIC0tZW5hYmxlLWxpYmphdmEtbXVsdGlsaWIKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGxpYmphdmEgYXMgbXVsdGlsaWIKKyAgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICBzcGVlZHMgdXAgb25lLXRpbWUgYnVpbGQKKyAgIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgICBkbyBub3QgcmVqZWN0IHNsb3cgZGVwZW5kZW5jeSBleHRyYWN0b3JzCisgICAtLWVuYWJsZS1tYWludGFpbmVyLW1vZGUgIGVuYWJsZSBtYWtlIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgbm90IHVzZWZ1bAorQEAgLTE5NzMsNiArMTk3NSwxNiBAQAorIGZpCisgCisgCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYmphdmEtbXVsdGlsaWIgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7ZW5hYmxlX2xpYmphdmFfbXVsdGlsaWIrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX2xpYmphdmFfbXVsdGlsaWI7CisrZmkKKysKKytpZiB0ZXN0ICIkZW5hYmxlX2xpYmphdmFfbXVsdGlsaWIiID0gbm87IHRoZW4KKysgIG11bHRpbGliPW5vCisrICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzIC0tZGlzYWJsZS1tdWx0aWxpYiIKKytmaQorKworICMgSXQgbWF5IG5vdCBiZSBzYWZlIHRvIHJ1biBsaW5raW5nIHRlc3RzIGluIEFDX1BST0dfQ0MvQUNfUFJPR19DWFguCisgCisgCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2xpYmphdmEvY29uZmlndXJlLmFjIGdjYy00LjQuMC9saWJqYXZhL2NvbmZpZ3VyZS5hYworLS0tIGdjYy00LjQuMC5vcmlnL2xpYmphdmEvY29uZmlndXJlLmFjCTIwMDktMDQtMDkgMjM6NTQ6MjguMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2xpYmphdmEvY29uZmlndXJlLmFjCTIwMDktMDUtMjcgMjE6Mzg6MDMuMDAwMDAwMDAwICswMjAwCitAQCAtMTM5LDYgKzEzOSwxMyBAQAorIAlbYWxsb3cgcmVidWlsZGluZyBvZiAuY2xhc3MgYW5kIC5oIGZpbGVzXSkpCisgQU1fQ09ORElUSU9OQUwoSkFWQV9NQUlOVEFJTkVSX01PREUsIHRlc3QgIiRlbmFibGVfamF2YV9tYWludGFpbmVyX21vZGUiID0geWVzKQorIAorK0FDX0FSR19FTkFCTEUobGliamF2YS1tdWx0aWxpYiwKKysJQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxpYmphdmEtbXVsdGlsaWJdLCBbYnVpbGQgbGliamF2YSBhcyBtdWx0aWxpYl0pKQorK2lmIHRlc3QgIiRlbmFibGVfbGliamF2YV9tdWx0aWxpYiIgPSBubzsgdGhlbgorKyAgbXVsdGlsaWI9bm8KKysgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1kaXNhYmxlLW11bHRpbGliIgorK2ZpCisrCisgIyBJdCBtYXkgbm90IGJlIHNhZmUgdG8gcnVuIGxpbmtpbmcgdGVzdHMgaW4gQUNfUFJPR19DQy9BQ19QUk9HX0NYWC4KKyBHQ0NfTk9fRVhFQ1VUQUJMRVMKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMTMwLWNyb3NzLWNvbXBpbGUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzEzMC1jcm9zcy1jb21waWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZmU3YzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzEzMC1jcm9zcy1jb21waWxlLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZ3VyZSBnY2MtNC40LjAvZ2NjL2NvbmZpZ3VyZQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWd1cmUJMjAwOS0wMy0yNCAxODo0NjowMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZ3VyZQkyMDA5LTA1LTI3IDIxOjM4OjA2LjAwMDAwMDAwMCArMDIwMAorQEAgLTEzOTk3LDcgKzEzOTk3LDcgQEAKKyAJICAgIHwgcG93ZXJwYyotKi0qLHBvd2VycGM2NCotKi0qKQorIAkJQ1JPU1M9IiRDUk9TUyAtRE5BVElWRV9DUk9TUyIgOzsKKyAJZXNhYworLWVsaWYgdGVzdCAieCRUQVJHRVRfU1lTVEVNX1JPT1QiICE9IHg7IHRoZW4KKytlbGlmIHRlc3QgIngkVEFSR0VUX1NZU1RFTV9ST09UIiAhPSB4IC1vICRidWlsZCAhPSAkaG9zdDsgdGhlbgorICAgICAgICAgU1lTVEVNX0hFQURFUl9ESVI9JGJ1aWxkX3N5c3RlbV9oZWFkZXJfZGlyCisgZmkKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYyBnY2MtNC40LjAvZ2NjL2NvbmZpZ3VyZS5hYworLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWd1cmUuYWMJMjAwOS0wMy0yNCAxODo0NjowMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZ3VyZS5hYwkyMDA5LTA1LTI3IDIxOjM4OjA2LjAwMDAwMDAwMCArMDIwMAorQEAgLTE3MjAsNyArMTcyMCw3IEBACisgCSAgICB8IHBvd2VycGMqLSotKixwb3dlcnBjNjQqLSotKikKKyAJCUNST1NTPSIkQ1JPU1MgLUROQVRJVkVfQ1JPU1MiIDs7CisgCWVzYWMKKy1lbGlmIHRlc3QgIngkVEFSR0VUX1NZU1RFTV9ST09UIiAhPSB4OyB0aGVuCisrZWxpZiB0ZXN0ICJ4JFRBUkdFVF9TWVNURU1fUk9PVCIgIT0geCAtbyAkYnVpbGQgIT0gJGhvc3Q7IHRoZW4KKyAgICAgICAgIFNZU1RFTV9IRUFERVJfRElSPSRidWlsZF9zeXN0ZW1faGVhZGVyX2RpciAKKyBmaQorIAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvdW53aW5kLWR3Mi5jIGdjYy00LjQuMC9nY2MvdW53aW5kLWR3Mi5jCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL3Vud2luZC1kdzIuYwkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvdW53aW5kLWR3Mi5jCTIwMDktMDUtMjcgMjE6Mzg6MDYuMDAwMDAwMDAwICswMjAwCitAQCAtMzI5LDkgKzMyOSwxMSBAQAorIH0KKyAjZW5kaWYKKyAKKysjaWZuZGVmIGluaGliaXRfbGliYworICNpZmRlZiBNRF9VTldJTkRfU1VQUE9SVAorICNpbmNsdWRlIE1EX1VOV0lORF9TVVBQT1JUCisgI2VuZGlmCisrI2VuZGlmCisgDAorIC8qIEV4dHJhY3QgYW55IGludGVyZXN0aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIENJRSBmb3IgdGhlIHRyYW5zbGF0aW9uCisgICAgdW5pdCBGIGJlbG9uZ3MgdG8uICBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBieXRlIGFmdGVyIHRoZSBhdWdtZW50YXRpb24sCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzE0MC1kZWZhdWx0LWZvcm1hdC1zZWN1cml0eS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMTQwLWRlZmF1bHQtZm9ybWF0LXNlY3VyaXR5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxOTQyZjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzE0MC1kZWZhdWx0LWZvcm1hdC1zZWN1cml0eS5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jLWNvbW1vbi5jIGdjYy00LjQuMC9nY2MvYy1jb21tb24uYworLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jLWNvbW1vbi5jCTIwMDktMDMtMzAgMTk6NDI6MjcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jLWNvbW1vbi5jCTIwMDktMDUtMjcgMjE6Mzg6MDguMDAwMDAwMDAwICswMjAwCitAQCAtMzAxLDcgKzMwMSw3IEBACisgLyogV2FybiBhYm91dCBmb3JtYXQvYXJndW1lbnQgYW5vbWFsaWVzIGluIGNhbGxzIHRvIGZvcm1hdHRlZCBJL08gZnVuY3Rpb25zCisgICAgKCpwcmludGYsICpzY2FuZiwgc3RyZnRpbWUsIHN0cmZtb24sIGV0Yy4pLiAgKi8KKyAKKy1pbnQgd2Fybl9mb3JtYXQ7CisraW50IHdhcm5fZm9ybWF0ID0gMTsKKyAKKyAvKiBXYXJuIGFib3V0IHVzaW5nIF9fbnVsbCAoYXMgTlVMTCBpbiBDKyspIGFzIHNlbnRpbmVsLiAgRm9yIGNvZGUgY29tcGlsZWQKKyAgICB3aXRoIEdDQyB0aGlzIGRvZXNuJ3QgbWF0dGVyIGFzIF9fbnVsbCBpcyBndWFyYW50ZWVkIHRvIGhhdmUgdGhlIHJpZ2h0CitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jLm9wdCBnY2MtNC40LjAvZ2NjL2Mub3B0CistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2Mub3B0CTIwMDktMDMtMTggMjI6MTQ6NTMuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC4wL2djYy9jLm9wdAkyMDA5LTA1LTI3IDIxOjM4OjA4LjAwMDAwMDAwMCArMDIwMAorQEAgLTIzNiw3ICsyMzYsNyBAQAorIFdhcm4gYWJvdXQgZm9ybWF0IHN0cmluZ3MgdGhhdCBjb250YWluIE5VTCBieXRlcworIAorIFdmb3JtYXQtc2VjdXJpdHkKKy1DIE9iakMgQysrIE9iakMrKyBWYXIod2Fybl9mb3JtYXRfc2VjdXJpdHkpIFdhcm5pbmcKKytDIE9iakMgQysrIE9iakMrKyBWYXIod2Fybl9mb3JtYXRfc2VjdXJpdHkpIEluaXQoMSkgV2FybmluZworIFdhcm4gYWJvdXQgcG9zc2libGUgc2VjdXJpdHkgcHJvYmxlbXMgd2l0aCBmb3JtYXQgZnVuY3Rpb25zCisgCisgV2Zvcm1hdC15MmsKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2RvYy9pbnZva2UudGV4aSBnY2MtNC40LjAvZ2NjL2RvYy9pbnZva2UudGV4aQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9kb2MvaW52b2tlLnRleGkJMjAwOS0wNC0wMSAwOToxODo0Ny4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL2RvYy9pbnZva2UudGV4aQkyMDA5LTA1LTI3IDIxOjM4OjA4LjAwMDAwMDAwMCArMDIwMAorQEAgLTI4NjcsNiArMjg2Nyw5IEBACisgQG9wdGlvbnstV2Zvcm1hdC1ub25saXRlcmFsfSwgQG9wdGlvbnstV2Zvcm1hdC1zZWN1cml0eX0sIGFuZAorIEBvcHRpb257LVdmb3JtYXQ9Mn0gYXJlIGF2YWlsYWJsZSwgYnV0IGFyZSBub3QgaW5jbHVkZWQgaW4gQG9wdGlvbnstV2FsbH0uCisgCisrTk9URTogSW4gR2VudG9vLCB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgZm9yIEMsIEMrKywgT2JqQywgT2JqQysrLgorK1RvIGRpc2FibGUsIHVzZSBAb3B0aW9uey1XZm9ybWF0PTB9LgorKworIEBpdGVtIC1XZm9ybWF0LXkyaworIEBvcGluZGV4IFdmb3JtYXQteTJrCisgQG9waW5kZXggV25vLWZvcm1hdC15MmsKK0BAIC0yOTIwLDYgKzI5MjMsMTEgQEAKKyBpbiBmdXR1cmUgd2FybmluZ3MgbWF5IGJlIGFkZGVkIHRvIEBvcHRpb257LVdmb3JtYXQtc2VjdXJpdHl9IHRoYXQgYXJlIG5vdAorIGluY2x1ZGVkIGluIEBvcHRpb257LVdmb3JtYXQtbm9ubGl0ZXJhbH0uKQorIAorK05PVEU6IEluIEdlbnRvbywgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGZvciBDLCBDKyssIE9iakMsIE9iakMrKy4KKytUbyBkaXNhYmxlLCB1c2UgQG9wdGlvbnstV25vLWZvcm1hdC1zZWN1cml0eX0sIG9yIGRpc2FibGUgYWxsIGZvcm1hdCB3YXJuaW5ncworK3dpdGggQG9wdGlvbnstV2Zvcm1hdD0wfS4gIFRvIG1ha2UgZm9ybWF0IHNlY3VyaXR5IHdhcm5pbmdzIGZhdGFsLCBzcGVjaWZ5CisrQG9wdGlvbnstV2Vycm9yPWZvcm1hdC1zZWN1cml0eX0uCisrCisgQGl0ZW0gLVdmb3JtYXQ9MgorIEBvcGluZGV4IFdmb3JtYXQ9MgorIEBvcGluZGV4IFduby1mb3JtYXQ9MgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMC8xNTAtZGVmYXVsdC1mb3J0aWZ5LXNvdXJjZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMTUwLWRlZmF1bHQtZm9ydGlmeS1zb3VyY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY4MjI3ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMTUwLWRlZmF1bHQtZm9ydGlmeS1zb3VyY2UucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvZG9jL2ludm9rZS50ZXhpIGdjYy00LjQuMC9nY2MvZG9jL2ludm9rZS50ZXhpCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2RvYy9pbnZva2UudGV4aQkyMDA5LTA1LTI3IDIxOjM4OjExLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvZG9jL2ludm9rZS50ZXhpCTIwMDktMDUtMjcgMjE6Mzg6MTEuMDAwMDAwMDAwICswMjAwCitAQCAtNTQxMSw2ICs1NDExLDExIEBACisgUGxlYXNlIG5vdGUgdGhlIHdhcm5pbmcgdW5kZXIgQG9wdGlvbnstZmdjc2V9IGFib3V0CisgaW52b2tpbmcgQG9wdGlvbnstTzJ9IG9uIHByb2dyYW1zIHRoYXQgdXNlIGNvbXB1dGVkIGdvdG9zLgorIAorK05PVEU6IEluIEdlbnRvbywgQG9wdGlvbnstRF9GT1JUSUZZX1NPVVJDRT0yfSBpcyBzZXQgYnkgZGVmYXVsdCwgYW5kIGlzCisrYWN0aXZhdGVkIHdoZW4gQG9wdGlvbnstT30gaXMgc2V0IHRvIDIgb3IgaGlnaGVyLiAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwKKytjb21waWxlLXRpbWUgYW5kIHJ1bi10aW1lIGNoZWNrcyBmb3Igc2V2ZXJhbCBsaWJjIGZ1bmN0aW9ucy4gIFRvIGRpc2FibGUsCisrc3BlY2lmeSBlaXRoZXIgQG9wdGlvbnstVV9GT1JUSUZZX1NPVVJDRX0gb3IgQG9wdGlvbnstRF9GT1JUSUZZX1NPVVJDRT0wfS4KKysKKyBAaXRlbSAtTzMKKyBAb3BpbmRleCBPMworIE9wdGltaXplIHlldCBtb3JlLiAgQG9wdGlvbnstTzN9IHR1cm5zIG9uIGFsbCBvcHRpbWl6YXRpb25zIHNwZWNpZmllZAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvZ2NjLmMgZ2NjLTQuNC4wL2djYy9nY2MuYworLS0tIGdjYy00LjQuMC5vcmlnL2djYy9nY2MuYwkyMDA5LTAzLTE3IDIyOjI1OjU5LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuMC9nY2MvZ2NjLmMJMjAwOS0wNS0yNyAyMTozODoxMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC04MDcsNiArODA3LDcgQEAKKyAgJXtIfSAlQyAle0QqJlUqJkEqfSAle2kqfSAlWiAlaVwKKyAgJXtmbXVkZmxhcDotRF9NVURGTEFQIC1pbmNsdWRlIG1mLXJ1bnRpbWUuaH1cCisgICV7Zm11ZGZsYXB0aDotRF9NVURGTEFQIC1EX01VREZMQVBUSCAtaW5jbHVkZSBtZi1ydW50aW1lLmh9XAorKyAleyFEX0ZPUlRJRllfU09VUkNFOiV7IURfRk9SVElGWV9TT1VSQ0U9KjoleyFVX0ZPUlRJRllfU09VUkNFOi1EX0ZPUlRJRllfU09VUkNFPTJ9fX1cCisgICV7RXxNfE1NOiVXe28qfX0iOworIAorIC8qIFRoaXMgY29udGFpbnMgY3BwIG9wdGlvbnMgd2hpY2ggYXJlIGNvbW1vbiB3aXRoIGNjMV9vcHRpb25zIGFuZCBhcmUgcGFzc2VkCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzE2MC1uZXRic2Qtc3ltYm9saWMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzE2MC1uZXRic2Qtc3ltYm9saWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUxZjFjYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMTYwLW5ldGJzZC1zeW1ib2xpYy5wYXRjaApAQCAtMCwwICsxLDExIEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvbmV0YnNkLWVsZi5oIGdjYy00LjQuMC9nY2MvY29uZmlnL25ldGJzZC1lbGYuaAorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvbmV0YnNkLWVsZi5oCTIwMDctMDktMDMgMTg6MTQ6MDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvbmV0YnNkLWVsZi5oCTIwMDktMDUtMjcgMjE6Mzg6MTQuMDAwMDAwMDAwICswMjAwCitAQCAtODIsNiArODIsNyBAQAorICNkZWZpbmUgTkVUQlNEX0xJTktfU1BFQ19FTEYgXAorICAgIiV7YXNzZXJ0Kn0gJXtSKn0gJXtycGF0aCp9IFwKKyAgICAle3NoYXJlZDotc2hhcmVkfSBcCisrICAgJXtzeW1ib2xpYzotQnN5bWJvbGljfSBcCisgICAgJXshc2hhcmVkOiBcCisgICAgICAtZGMgLWRwIFwKKyAgICAgICV7IW5vc3RkbGliOiBcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzE3MC1zcGFyYzY0LWJzZC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMTcwLXNwYXJjNjQtYnNkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YTVlZWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzE3MC1zcGFyYzY0LWJzZC5wYXRjaApAQCAtMCwwICsxLDI5IEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oIGdjYy00LjQuMC9nY2MvY29uZmlnL3NwYXJjL2ZyZWVic2QuaAorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oCTIwMDctMDgtMDIgMTI6NDk6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oCTIwMDktMDUtMjcgMjE6Mzg6MTYuMDAwMDAwMDAwICswMjAwCitAQCAtMjUsOSArMjUsMjIgQEAKKyAvKiBGcmVlQlNEIG5lZWRzIHRoZSBwbGF0Zm9ybSBuYW1lIChzcGFyYzY0KSBkZWZpbmVkLgorICAgIEVtYWNzIG5lZWRzIHRvIGtub3cgaWYgdGhlIGFyY2ggaXMgNjQgb3IgMzItYml0cy4gICovCisgCistI3VuZGVmICBDUFBfQ1BVNjRfREVGQVVMVF9TUEVDCistI2RlZmluZSBDUFBfQ1BVNjRfREVGQVVMVF9TUEVDIFwKKy0gICItRF9fc3BhcmM2NF9fIC1EX19zcGFyY192OV9fIC1EX19zcGFyY3Y5IC1EX19hcmNoNjRfXyIKKysjdW5kZWYgIEZCU0RfVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMKKysjZGVmaW5lIEZCU0RfVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMoKSAgICAgICAgICAgICAgICAgIFwKKysgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBpZiAoVEFSR0VUX0FSQ0g2NCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjNjRfXyIpOyAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjX3Y5X18iKTsgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjdjkiKTsgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19zcGFyYyIpOyAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBidWlsdGluX2RlZmluZSAoIl9fc3BhcmNfXyIpOyAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHdoaWxlICgwKQorKworIAorICNkZWZpbmUgTElOS19TUEVDICIlKGxpbmtfYXJjaCkJCQkJCQlcCisgICAleyFtbm8tcmVsYXg6JXshcjotcmVsYXh9fQkJCQkJCVwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMTgwLWxpYmdvbXAtbm8td2Vycm9yLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMC8xODAtbGliZ29tcC1uby13ZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQyYWRmMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMTgwLWxpYmdvbXAtbm8td2Vycm9yLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvbGliZ29tcC9jb25maWd1cmUgZ2NjLTQuNC4wL2xpYmdvbXAvY29uZmlndXJlCistLS0gZ2NjLTQuNC4wLm9yaWcvbGliZ29tcC9jb25maWd1cmUJMjAwOS0wNC0yMSAxMTowODowOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvbGliZ29tcC9jb25maWd1cmUJMjAwOS0wNS0yNyAyMTozODoxOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMzM0LDcgKzMzMzQsNyBAQAorIAorICMgQWRkIC1XYWxsIC1XZXJyb3IgaWYgd2UgYXJlIHVzaW5nIEdDQy4KKyBpZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyI7IHRoZW4KKy0gIFhDRkxBR1M9IiRYQ0ZMQUdTIC1XYWxsIC1XZXJyb3IiCisrICBYQ0ZMQUdTPSIkWENGTEFHUyAtV2FsbCIKKyBmaQorIAorICMgRmluZCBvdGhlciBwcm9ncmFtcyB3ZSBuZWVkLgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMC8xOTAtZmxhdHRlbi1zd2l0Y2gtc3RtdC0wMC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMTkwLWZsYXR0ZW4tc3dpdGNoLXN0bXQtMDAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRiMWNjYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMTkwLWZsYXR0ZW4tc3dpdGNoLXN0bXQtMDAucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2Mvc3RtdC5jIGdjYy00LjQuMC9nY2Mvc3RtdC5jCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL3N0bXQuYwkyMDA5LTAyLTI3IDIwOjQ5OjQyLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuMC9nY2Mvc3RtdC5jCTIwMDktMDUtMjcgMjE6Mzg6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMjM3Niw3ICsyMzc2LDExIEBACisgCSAgdXNlX2Nvc3RfdGFibGUKKyAJICAgID0gKFRSRUVfQ09ERSAob3JpZ190eXBlKSAhPSBFTlVNRVJBTF9UWVBFCisgCSAgICAgICAmJiBlc3RpbWF0ZV9jYXNlX2Nvc3RzIChjYXNlX2xpc3QpKTsKKy0JICBiYWxhbmNlX2Nhc2Vfbm9kZXMgKCZjYXNlX2xpc3QsIE5VTEwpOworKwkgIC8qIFdoZW4gb3B0aW1pemluZyBmb3Igc2l6ZSwgd2Ugd2FudCBhIHN0cmFpZ2h0IGxpc3QgdG8gYXZvaWQKKysJICAgICBqdW1wcyBhcyBtdWNoIGFzIHBvc3NpYmxlLiBUaGlzIGJhc2ljYWxseSBjcmVhdGVzIGFuIGlmLWVsc2UKKysJICAgICBjaGFpbi4gICovCisrCSAgaWYgKCFvcHRpbWl6ZV9zaXplKQorKwkgICAgYmFsYW5jZV9jYXNlX25vZGVzICgmY2FzZV9saXN0LCBOVUxMKTsKKyAJICBlbWl0X2Nhc2Vfbm9kZXMgKGluZGV4LCBjYXNlX2xpc3QsIGRlZmF1bHRfbGFiZWwsIGluZGV4X3R5cGUpOworIAkgIGlmIChkZWZhdWx0X2xhYmVsKQorIAkgICAgZW1pdF9qdW1wIChkZWZhdWx0X2xhYmVsKTsKK0BAIC0yOTQyLDYgKzI5NDYsNyBAQAorIAkgICAgeworIAkgICAgICBpZiAoIW5vZGVfaGFzX2xvd19ib3VuZCAobm9kZSwgaW5kZXhfdHlwZSkpCisgCQl7CisrCQkgIGlmICghb3B0aW1pemVfc2l6ZSkgLyogZG9uJ3QgamwgdG8gdGhlIC5kZWZhdWx0X2xhYmVsLiAqLworIAkJICBlbWl0X2NtcF9hbmRfanVtcF9pbnNucyAoaW5kZXgsCisgCQkJCQkgICBjb252ZXJ0X21vZGVzCisgCQkJCQkgICAobW9kZSwgaW1vZGUsCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzIwMC1saWJpYmVydHkuaC1hc3ByaW50Zi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMjAwLWxpYmliZXJ0eS5oLWFzcHJpbnRmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNzg0YmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzIwMC1saWJpYmVydHkuaC1hc3ByaW50Zi5wYXRjaApAQCAtMCwwICsxLDE1IEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2luY2x1ZGUvbGliaWJlcnR5LmggZ2NjLTQuNC4wL2luY2x1ZGUvbGliaWJlcnR5LmgKKy0tLSBnY2MtNC40LjAub3JpZy9pbmNsdWRlL2xpYmliZXJ0eS5oCTIwMDgtMDYtMjQgMDM6NDI6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2luY2x1ZGUvbGliaWJlcnR5LmgJMjAwOS0wNS0yNyAyMTozODoyNC4wMDAwMDAwMDAgKzAyMDAKK0BAIC01OTUsOCArNTk1LDExIEBACisgLyogTGlrZSBzcHJpbnRmIGJ1dCBwcm92aWRlcyBhIHBvaW50ZXIgdG8gbWFsbG9jJ2Qgc3RvcmFnZSwgd2hpY2ggbXVzdAorICAgIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuICAqLworIAorKy8qIGFzcHJpbnRmIG1heSBiZSBkZWNsYXJlZCBhcyBhIG1hY3JvIGJ5IGdsaWJjIHdpdGggX19VU0VfRk9SVElGWV9MRVZFTC4gICovCisrI2lmbmRlZiBhc3ByaW50ZgorIGV4dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgLi4uKSBBVFRSSUJVVEVfUFJJTlRGXzI7CisgI2VuZGlmCisrI2VuZGlmCisgCisgI2lmICFIQVZFX0RFQ0xfVkFTUFJJTlRGCisgLyogTGlrZSB2c3ByaW50ZiBidXQgcHJvdmlkZXMgYSBwb2ludGVyIHRvIG1hbGxvYydkIHN0b3JhZ2UsIHdoaWNoCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzIxMC1hcm0tdW5icmVhay1hcm12NHQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzIxMC1hcm0tdW5icmVhay1hcm12NHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZlYWZjNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMjEwLWFybS11bmJyZWFrLWFybXY0dC5wYXRjaApAQCAtMCwwICsxLDEyIEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCBnY2MtNC40LjAvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCTIwMDctMTEtMDggMTQ6NDQ6MDkuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAkyMDA5LTA1LTI3IDIxOjM4OjI2LjAwMDAwMDAwMCArMDIwMAorQEAgLTQ0LDcgKzQ0LDcgQEAKKyAgICBUaGUgQVJNMTBURE1JIGNvcmUgaXMgdGhlIGRlZmF1bHQgZm9yIGFybXY1dCwgc28gc2V0CisgICAgU1VCVEFSR0VUX0NQVV9ERUZBVUxUIHRvIGFjaGlldmUgdGhpcy4gICovCisgI3VuZGVmICBTVUJUQVJHRVRfQ1BVX0RFRkFVTFQKKy0jZGVmaW5lIFNVQlRBUkdFVF9DUFVfREVGQVVMVCBUQVJHRVRfQ1BVX2FybTEwdGRtaQorKyNkZWZpbmUgU1VCVEFSR0VUX0NQVV9ERUZBVUxUIFRBUkdFVF9DUFVfYXJtOXRkbWkKKyAKKyAvKiBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUIGlzIHNldCBpbgorICAgIGNvbmZpZy5nY2MgZm9yIGJpZyBlbmRpYW4gY29uZmlndXJhdGlvbnMuICAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMC8yMjAtbGliaWJlcnR5LXBpYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMjIwLWxpYmliZXJ0eS1waWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYxM2E0ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMjIwLWxpYmliZXJ0eS1waWMucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9saWJpYmVydHkvTWFrZWZpbGUuaW4gZ2NjLTQuNC4wL2xpYmliZXJ0eS9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjQuMC5vcmlnL2xpYmliZXJ0eS9NYWtlZmlsZS5pbgkyMDA4LTEwLTIyIDE1OjMwOjE5LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9saWJpYmVydHkvTWFrZWZpbGUuaW4JMjAwOS0wNS0yNyAyMTozODoyOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMjcsNiArMjI3LDcgQEAKKyAJICAkKEFSKSAkKEFSX0ZMQUdTKSAkKFRBUkdFVExJQikgXAorIAkgICAgJChSRVFVSVJFRF9PRklMRVMpICQoRVhUUkFfT0ZJTEVTKSAkKExJQk9CSlMpOyBcCisgCSAgJChSQU5MSUIpICQoVEFSR0VUTElCKTsgXAorKwkgIGNwICQoVEFSR0VUTElCKSAuLi8gOyBcCisgCSAgY2QgLi47IFwKKyAJZWxzZSB0cnVlOyBmaQorIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMC8yMzAtc3VwZXJoLWRlZmF1bHQtbXVsdGlsaWIucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzIzMC1zdXBlcmgtZGVmYXVsdC1tdWx0aWxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzcxOWU4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMC8yMzAtc3VwZXJoLWRlZmF1bHQtbXVsdGlsaWIucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnLmdjYyBnY2MtNC40LjAvZ2NjL2NvbmZpZy5nY2MKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnLmdjYwkyMDA5LTA0LTE3IDEzOjU4OjQxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnLmdjYwkyMDA5LTA1LTI3IDIxOjM4OjMxLjAwMDAwMDAwMCArMDIwMAorQEAgLTIxMjEsNyArMjEyMSw3IEBACisgCWlmIHRlc3QgeCR7c2hfbXVsdGlsaWJzfSA9IHggOyB0aGVuCisgCQljYXNlICR7dGFyZ2V0fSBpbgorIAkJc2g2NC1zdXBlcmgtbGludXgqIHwgXAorLQkJc2hbMTIzNF0qKQlzaF9tdWx0aWxpYnM9JHtzaF9jcHVfdGFyZ2V0fSA7OworKwkJc2hbMTIzNF0qKQlzaF9tdWx0aWxpYnM9YGNkICR7c3JjZGlyfS9jb25maWcvc2ggOyBlY2hvIHQtbWxpYi1zaFsxLTRdKiB8IHNlZCAnczp0LW1saWItc2g6LG06ZztzOiA6OmcnYCA7OworIAkJc2g2NCogfCBzaDUqKQlzaF9tdWx0aWxpYnM9bTUtMzJtZWRpYSxtNS0zMm1lZGlhLW5vZnB1LG01LWNvbXBhY3QsbTUtY29tcGFjdC1ub2ZwdSxtNS02NG1lZGlhLG01LTY0bWVkaWEtbm9mcHUgOzsKKyAJCXNoLXN1cGVyaC0qKQlzaF9tdWx0aWxpYnM9bTQsbTQtc2luZ2xlLG00LXNpbmdsZS1vbmx5LG00LW5vZnB1IDs7CisgCQlzaCotKi1saW51eCopCXNoX211bHRpbGlicz1tMSxtM2UsbTQgOzsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMjQwLWxpYnN0ZGMrKy1waWMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzI0MC1saWJzdGRjKystcGljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NTFkZmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzI0MC1saWJzdGRjKystcGljLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbSBnY2MtNC40LjAvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQorLS0tIGdjYy00LjQuMC5vcmlnL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuYW0JMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQkyMDA5LTA1LTI3IDIxOjM4OjM0LjAwMDAwMDAwMCArMDIwMAorQEAgLTM1MSw2ICszNTEsMTMgQEAKKyAJICAkKE9QVF9MREZMQUdTKSAkKFNFQ1RJT05fTERGTEFHUykgJChBTV9DWFhGTEFHUykgJChMVExERkxBR1MpIC1vICRACisgCisgCisraW5zdGFsbC1leGVjLWxvY2FsOgorKwlwaWNfb2Jqcz1gc2VkIC1uICJzOic6Omc7czpecGljX29iamVjdD06OnAiICoubG8gfCBncmVwIC12ICdebm9uZSQkJ2A7IFwKKysJaWYgWyB4IiQkcGljX29ianMiICE9IHggXTsgdGhlbiBcCisrCQkkKEFSKSBjcnUgbGlic3RkYysrX3BpYy5hICQkcGljX29ianMgJCh0b3BfYnVpbGRkaXIpL2xpYnN1cGMrKy8qLm8gfHwgZXhpdCAxOyBcCisrCQkkKElOU1RBTExfREFUQSkgbGlic3RkYysrX3BpYy5hICQoREVTVERJUikkKHRvb2xleGVjbGliZGlyKSB8fCBleGl0IDE7IFwKKysJZmkKKysKKyAjIEFkZGVkIGJpdHMgdG8gYnVpbGQgZGVidWcgbGlicmFyeS4KKyBpZiBHTElCQ1hYX0JVSUxEX0RFQlVHCisgYWxsLWxvY2FsOiBidWlsZF9kZWJ1ZworZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluIGdjYy00LjQuMC9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCistLS0gZ2NjLTQuNC4wLm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgkyMDA5LTAxLTE3IDAzOjAzOjI1LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuMC9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCTIwMDktMDUtMjcgMjE6Mzg6MzQuMDAwMDAwMDAwICswMjAwCitAQCAtNzI2LDcgKzcyNiw3IEBACisgCisgaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWRhdGEtbG9jYWwKKyAKKy1pbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUworK2luc3RhbGwtZXhlYy1hbTogaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTIGluc3RhbGwtZXhlYy1sb2NhbAorIAorIGluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisgCitAQCAtNzY1LDcgKzc2NSw3IEBACisgCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKyAJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorIAl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWluZm8tYW0gXAorLQl1bmluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUworKwl1bmluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUyBpbnN0YWxsLWV4ZWMtbG9jYWwKKyAKKyAKKyAjIFN5bWJvbCB2ZXJzaW9uaW5nIGZvciBzaGFyZWQgbGlicmFyaWVzLgorQEAgLTk0Miw2ICs5NDIsMTQgQEAKKyBpbnN0YWxsX2RlYnVnOgorIAkoY2QgJHtkZWJ1Z2Rpcn0gJiYgJChNQUtFKSBcCisgCXRvb2xleGVjbGliZGlyPSQoZ2xpYmN4eF90b29sZXhlY2xpYmRpcikvZGVidWcgaW5zdGFsbCkKKysKKytpbnN0YWxsLWV4ZWMtbG9jYWw6CisrCXBpY19vYmpzPWBzZWQgLW4gInM6Jzo6ZztzOl5waWNfb2JqZWN0PTo6cCIgKi5sbyB8IGdyZXAgLXYgJ15ub25lJCQnYDsgXAorKwlpZiBbIHgiJCRwaWNfb2JqcyIgIT0geCBdOyB0aGVuIFwKKysJCSQoQVIpIGNydSBsaWJzdGRjKytfcGljLmEgJCRwaWNfb2JqcyAkKHRvcF9idWlsZGRpcikvbGlic3VwYysrLyoubyB8fCBleGl0IDE7IFwKKysJCSQoSU5TVEFMTF9EQVRBKSBsaWJzdGRjKytfcGljLmEgJChERVNURElSKSQodG9vbGV4ZWNsaWJkaXIpIHx8IGV4aXQgMTsgXAorKwlmaQorKworICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisgIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisgLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMC8yNTAtaWE2NC1ub3RlR05Vc3RhY2sucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzI1MC1pYTY0LW5vdGVHTlVzdGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjgwZTZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMC8yNTAtaWE2NC1ub3RlR05Vc3RhY2sucGF0Y2gKQEAgLTAsMCArMSw3OSBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtIGdjYy00LjQuMC9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGJlZ2luLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtCTIwMDktMDUtMjcgMjE6Mzg6MzcuMDAwMDAwMDAwICswMjAwCitAQCAtMjUyLDMgKzI1Miw3IEBACisgLndlYWsgX19jeGFfZmluYWxpemUKKyAjZW5kaWYKKyAud2VhayBfSnZfUmVnaXN0ZXJDbGFzc2VzCisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtIGdjYy00LjQuMC9nY2MvY29uZmlnL2lhNjQvY3J0ZW5kLmFzbQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtCTIwMDktMDUtMjcgMjE6Mzg6MzcuMDAwMDAwMDAwICswMjAwCitAQCAtMTE5LDMgKzExOSw3IEBACisgCisgCWJyLnJldC5zcHRrLm1hbnkgcnAKKyAJLmVuZHAgX19kb19nbG9iYWxfY3RvcnNfYXV4CisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRpLmFzbSBnY2MtNC40LjAvZ2NjL2NvbmZpZy9pYTY0L2NydGkuYXNtCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGkuYXNtCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvaWE2NC9jcnRpLmFzbQkyMDA5LTA1LTI3IDIxOjM4OjM3LjAwMDAwMDAwMCArMDIwMAorQEAgLTUxLDMgKzUxLDcgQEAKKyAJLmJvZHkKKyAKKyAjIGVuZCBvZiBjcnRpLmFzbQorKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0bi5hc20gZ2NjLTQuNC4wL2djYy9jb25maWcvaWE2NC9jcnRuLmFzbQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRuLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL2lhNjQvY3J0bi5hc20JMjAwOS0wNS0yNyAyMTozODozNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC00MSwzICs0MSw3IEBACisgCWJyLnJldC5zcHRrLm1hbnkgYjAKKyAKKyAjIGVuZCBvZiBjcnRuLmFzbQorKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbSBnY2MtNC40LjAvZ2NjL2NvbmZpZy9pYTY0L2xpYjFmdW5jcy5hc20KKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbQkyMDA5LTA1LTI3IDIxOjM4OjM3LjAwMDAwMDAwMCArMDIwMAorQEAgLTc5MywzICs3OTMsNyBAQAorIAkuZW5kcCBfX2Zsb2F0dGl0ZgorICNlbmRpZgorICNlbmRpZgorKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2lhNjQvbGludXguaCBnY2MtNC40LjAvZ2NjL2NvbmZpZy9pYTY0L2xpbnV4LmgKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2lhNjQvbGludXguaAkyMDA5LTAyLTEyIDE3OjMwOjUzLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL2lhNjQvbGludXguaAkyMDA5LTA1LTI3IDIxOjM4OjM3LjAwMDAwMDAwMCArMDIwMAorQEAgLTUsNiArNSw4IEBACisgCisgI2RlZmluZSBUQVJHRVRfVkVSU0lPTiBmcHJpbnRmIChzdGRlcnIsICIgKElBLTY0KSBMaW51eCIpOworIAorKyNkZWZpbmUgVEFSR0VUX0FTTV9GSUxFX0VORCBmaWxlX2VuZF9pbmRpY2F0ZV9leGVjX3N0YWNrCisrCisgLyogVGhpcyBpcyBmb3IgLXByb2ZpbGUgdG8gdXNlIC1sY19wIGluc3RlYWQgb2YgLWxjLiAgKi8KKyAjdW5kZWYgQ0MxX1NQRUMKKyAjZGVmaW5lIENDMV9TUEVDICIle3Byb2ZpbGU6LXB9ICV7Ryp9IgorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9wcGMtYXNtLmggZ2NjLTQuNC4wL2djYy9jb25maWcvcnM2MDAwL3BwYy1hc20uaAorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvcnM2MDAwL3BwYy1hc20uaAkyMDA4LTEwLTEzIDE3OjQ0OjI2LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL3JzNjAwMC9wcGMtYXNtLmgJMjAwOS0wNS0yNyAyMTozODozNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNzIsNyArMTcyLDcgQEAKKyAJLnNpemUgRlVOQ19OQU1FKG5hbWUpLEdMVUUoLkwsbmFtZSktRlVOQ19OQU1FKG5hbWUpCisgI2VuZGlmCisgCistI2lmIGRlZmluZWQgX19saW51eF9fICYmICFkZWZpbmVkIF9fcG93ZXJwYzY0X18KKysjaWYgZGVmaW5lZCBfX2xpbnV4X18KKyAJLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrCisgCS5wcmV2aW91cworICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMC8yNjAtc2gtbGliZ2NjLXN0YWNrcy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMjYwLXNoLWxpYmdjYy1zdGFja3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJhZjJjOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMjYwLXNoLWxpYmdjYy1zdGFja3MucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL3NoL2xpYjFmdW5jcy5hc20gZ2NjLTQuNC4wL2djYy9jb25maWcvc2gvbGliMWZ1bmNzLmFzbQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvc2gvbGliMWZ1bmNzLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL3NoL2xpYjFmdW5jcy5hc20JMjAwOS0wNS0yNyAyMTozODozOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMCw2ICszMCwxMSBAQAorICEhIHJlY29kZWQgaW4gYXNzZW1ibHkgYnkgVG9zaGl5YXN1IE1vcml0YQorICEhIHRtQG5ldGNvbS5jb20KKyAKKysjaWYgZGVmaW5lZChfX0VMRl9fKSAmJiBkZWZpbmVkKF9fbGludXhfXykKKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2ssIiIsJXByb2diaXRzCisrLnByZXZpb3VzCisrI2VuZGlmCisrCisgLyogU0gyIG9wdGltaXphdGlvbnMgZm9yIF9fX2FzaHJzaTMsIF9fX2FzaGxzaTMsIF9fX2xzaHJzaTMgYW5kCisgICAgRUxGIGxvY2FsIGxhYmVsIHByZWZpeGVzIGJ5IEoib3JuIFJlbm5lY2tlCisgICAgYW15bGFhckBjeWdudXMuY29tICAqLworZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL3NoL2xpbnV4LWF0b21pYy5hc20gZ2NjLTQuNC4wL2djYy9jb25maWcvc2gvbGludXgtYXRvbWljLmFzbQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvc2gvbGludXgtYXRvbWljLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL3NoL2xpbnV4LWF0b21pYy5hc20JMjAwOS0wNS0yNyAyMTozODozOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMzYsMyArMTM2LDYgQEAKKyBBVE9NSUNfRkVUQ0hfQU5EX0NPTUJPUChuYW5kLGFuZCxub3QsNCxsLG1vdikKKyAKKyAjZW5kaWYgLyogISBfX1NINV9fICovCisrCisrLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrLCIiLCVwcm9nYml0cworKy5wcmV2aW91cwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMC8yNzAtc2gtcHIyNDgzNi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMjcwLXNoLXByMjQ4MzYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M3NDVhYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMjcwLXNoLXByMjQ4MzYucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlndXJlIGdjYy00LjQuMC9nY2MvY29uZmlndXJlCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZ3VyZQkyMDA5LTA1LTI3IDIxOjM4OjA4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlndXJlCTIwMDktMDUtMjcgMjE6Mzg6NDIuMDAwMDAwMDAwICswMjAwCitAQCAtMjIyMDUsNyArMjIyMDUsNyBAQAorIAl0bHNfZmlyc3RfbWlub3I9MTQKKyAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCisgCTs7CistICBzaC0qLSogfCBzaFszNF0tKi0qKQorKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCisgICAgIGNvbmZ0ZXN0X3M9JworIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKKyBmb286CS5sb25nCTI1CitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWd1cmUuYWMgZ2NjLTQuNC4wL2djYy9jb25maWd1cmUuYWMKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlndXJlLmFjCTIwMDktMDUtMjcgMjE6Mzg6MDguMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWd1cmUuYWMJMjAwOS0wNS0yNyAyMTozODo0Mi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNjczLDcgKzI2NzMsNyBAQAorIAl0bHNfZmlyc3RfbWlub3I9MTQKKyAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCisgCTs7CistICBzaC0qLSogfCBzaFszNF0tKi0qKQorKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCisgICAgIGNvbmZ0ZXN0X3M9JworIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKKyBmb286CS5sb25nCTI1CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzI4MC1mcmVlYnNkLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMC8yODAtZnJlZWJzZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWQ5ZDBiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMC8yODAtZnJlZWJzZC5wYXRjaApAQCAtMCwwICsxLDk0IEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvZnJlZWJzZC1zcGVjLmggZ2NjLTQuNC4wL2djYy9jb25maWcvZnJlZWJzZC1zcGVjLmgKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2ZyZWVic2Qtc3BlYy5oCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvZnJlZWJzZC1zcGVjLmgJMjAwOS0wNS0yNyAyMTozODo0NS4wMDAwMDAwMDAgKzAyMDAKK0BAIC02MSw2ICs2MSw4IEBACisgCWJ1aWx0aW5fYXNzZXJ0ICgic3lzdGVtPXVuaXgiKTsJCQkJCVwKKyAJYnVpbHRpbl9hc3NlcnQgKCJzeXN0ZW09YnNkIik7CQkJCQlcCisgCWJ1aWx0aW5fYXNzZXJ0ICgic3lzdGVtPUZyZWVCU0QiKTsJCQkJXAorKwlpZighKGZsYWdfaXNvICYmIChjX2RpYWxlY3RfY3h4ICgpID8gY3h4X2RpYWxlY3QgPT0gY3h4OTggOiAhZmxhZ19pc29jOTkpKSkJXAorKwkJYnVpbHRpbl9kZWZpbmUoIl9MT05HTE9ORyIpOwkJCQlcCisgCUZCU0RfVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMoKTsJCQkJCVwKKyAgICAgfQkJCQkJCQkJCVwKKyAgIHdoaWxlICgwKQorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL3QtZnJlZWJzZC1laCBnY2MtNC40LjAvZ2NjL2NvbmZpZy90LWZyZWVic2QtZWgKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL3QtZnJlZWJzZC1laAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL3QtZnJlZWJzZC1laAkyMDA5LTA1LTI3IDIxOjM4OjQ1LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw0IEBACisrIyBVc2UgdW53aW5kLWR3Mi1mZGUtZ2xpYmMKKytMSUIyQURERUggPSAkKHNyY2RpcikvdW53aW5kLWR3Mi5jICQoc3JjZGlyKS91bndpbmQtZHcyLWZkZS1nbGliYy5jIFwKKysgICQoc3JjZGlyKS91bndpbmQtc2psai5jICQoc3JjZGlyKS9ndGhyLWduYXQuYyAkKHNyY2RpcikvdW53aW5kLWMuYworK0xJQjJBRERFSERFUCA9IHVud2luZC5pbmMgdW53aW5kLWR3Mi1mZGUuaCB1bndpbmQtZHcyLWZkZS5jCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcuZ2NjIGdjYy00LjQuMC9nY2MvY29uZmlnLmdjYworLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcuZ2NjCTIwMDktMDUtMjcgMjE6Mzg6MzQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcuZ2NjCTIwMDktMDUtMjcgMjE6Mzg6NDUuMDAwMDAwMDAwICswMjAwCitAQCAtNDU2LDcgKzQ1Niw3IEBACisgICAjIHBsZWFzZXMgYXJvdW5kIHRoZSBwcm92aWRlZCBjb3JlIHNldHRpbmcuCisgICBnYXM9eWVzCisgICBnbnVfbGQ9eWVzCistICBleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBjcnRlbmQubyBjcnRiZWdpblMubyBjcnRlbmRTLm8iCisrICBleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBjcnRlbmQubyBjcnRiZWdpblMubyBjcnRlbmRTLm8gY3J0YmVnaW5ULm8iCisgICBmYnNkX21ham9yPWBlY2hvICR7dGFyZ2V0fSB8IHNlZCAtZSAncy8uKmZyZWVic2QvL2cnIHwgc2VkIC1lICdzL1wuLiovL2cnYAorICAgdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBGQlNEX01BSk9SPSR7ZmJzZF9tYWpvcn0iCisgICB0bWFrZV9maWxlPSJ0LXNsaWJnY2MtZWxmLXZlciB0LWZyZWVic2QiCitAQCAtMTA0Miw2ICsxMDQyLDEwIEBACisgCTs7CisgaVszNDU2N104Ni0qLWZyZWVic2QqKQorIAl0bV9maWxlPSIke3RtX2ZpbGV9IGkzODYvdW5peC5oIGkzODYvYXR0LmggZGJ4ZWxmLmggZWxmb3MuaCAke2Zic2RfdG1fZmlsZX0gaTM4Ni9mcmVlYnNkLmgiCisrCWZic2RfbWFqb3I9YGVjaG8gJHt0YXJnZXR9IHwgc2VkIC1lICdzLy4qZnJlZWJzZC8vZycgfCBzZWQgLWUgJ3MvXC4uKi8vZydgCisrCWlmIHRlc3QgJHtmYnNkX21ham9yfSAtZ2UgNzsgdGhlbgorKwkJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSB0LWZyZWVic2QtZWgiCisrCWZpCisgCTs7CisgeDg2XzY0LSotZnJlZWJzZCopCisgCXRtX2ZpbGU9IiR7dG1fZmlsZX0gaTM4Ni91bml4LmggaTM4Ni9hdHQuaCBkYnhlbGYuaCBlbGZvcy5oICR7ZmJzZF90bV9maWxlfSBpMzg2L3g4Ni02NC5oIGkzODYvZnJlZWJzZC5oIGkzODYvZnJlZWJzZDY0LmgiCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jcnRzdHVmZi5jIGdjYy00LjQuMC9nY2MvY3J0c3R1ZmYuYworLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jcnRzdHVmZi5jCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jcnRzdHVmZi5jCTIwMDktMDUtMjcgMjE6Mzg6NDUuMDAwMDAwMDAwICswMjAwCitAQCAtODUsMTMgKzg1LDE1IEBACisgICAgICYmICFkZWZpbmVkKE9CSkVDVF9GT1JNQVRfRkxBVCkgXAorICAgICAmJiBkZWZpbmVkKEhBVkVfTERfRUhfRlJBTUVfSERSKSBcCisgICAgICYmICFkZWZpbmVkKGluaGliaXRfbGliYykgJiYgIWRlZmluZWQoQ1JUU1RVRkZUX08pIFwKKy0gICAgJiYgZGVmaW5lZChfX0dMSUJDX18pICYmIF9fR0xJQkNfXyA+PSAyCisrICAgICYmICgoZGVmaW5lZChfX0dMSUJDX18pICYmIF9fR0xJQkNfXyA+PSAyKSBcCisrICAgIHx8IChkZWZpbmVkKF9fRnJlZUJTRF92ZXJzaW9uKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMjIpKQorICNpbmNsdWRlIDxsaW5rLmg+CisgLyogdUNsaWJjIHByZXRlbmRzIHRvIGJlIGdsaWJjIDIuMiBhbmQgRFRfQ09ORklHIGlzIGRlZmluZWQgaW4gaXRzIGxpbmsuaC4KKyAgICBCdXQgaXQgZG9lc24ndCB1c2UgUFRfR05VX0VIX0ZSQU1FIEVMRiBzZWdtZW50IGN1cnJlbnRseS4gICovCisgIyBpZiAhZGVmaW5lZChfX1VDTElCQ19fKSBcCistICAgICAmJiAoX19HTElCQ19fID4gMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID4gMikgXAorLSAgICAgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA9PSAyICYmIGRlZmluZWQoRFRfQ09ORklHKSkpCisrICAgICB8fCAoX19HTElCQ19fID4gMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID4gMikgXAorKyAgICAgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA9PSAyICYmIGRlZmluZWQoRFRfQ09ORklHKSkpIFwKKysgICAgIHx8IChfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMjIpCisgIyAgZGVmaW5lIFVTRV9QVF9HTlVfRUhfRlJBTUUKKyAjIGVuZGlmCisgI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy91bndpbmQtZHcyLWZkZS1nbGliYy5jIGdjYy00LjQuMC9nY2MvdW53aW5kLWR3Mi1mZGUtZ2xpYmMuYworLS0tIGdjYy00LjQuMC5vcmlnL2djYy91bndpbmQtZHcyLWZkZS1nbGliYy5jCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy91bndpbmQtZHcyLWZkZS1nbGliYy5jCTIwMDktMDUtMjcgMjE6Mzg6NDUuMDAwMDAwMDAwICswMjAwCitAQCAtNDYsOCArNDYsOSBAQAorICNpbmNsdWRlICJndGhyLmgiCisgCisgI2lmICFkZWZpbmVkKGluaGliaXRfbGliYykgJiYgZGVmaW5lZChIQVZFX0xEX0VIX0ZSQU1FX0hEUikgXAorLSAgICAmJiAoX19HTElCQ19fID4gMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID4gMikgXAorLQl8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID09IDIgJiYgZGVmaW5lZChEVF9DT05GSUcpKSkKKysgICAgJiYgKChfX0dMSUJDX18gPiAyIHx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPiAyKSBcCisrCXx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPT0gMiAmJiBkZWZpbmVkKERUX0NPTkZJRykpKSBcCisrICAgIHx8IChfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMjIgKSkKKyAKKyAjaWZuZGVmIF9fUkVMT0NfUE9JTlRFUgorICMgZGVmaW5lIF9fUkVMT0NfUE9JTlRFUihwdHIsIGJhc2UpICgocHRyKSArIChiYXNlKSkKK0BAIC02Myw2ICs2NCwxMyBAQAorICNkZWZpbmUgUFRfR05VX0VIX0ZSQU1FIChQVF9MT09TICsgMHg0NzRlNTUwKQorICNlbmRpZgorIAorKy8qIFN1cHBvcnQgRnJlZUJTRCAqLworKyNpZm5kZWYgRWxmVworKyMgaWZkZWYgX19FbGZOCisrIyAgZGVmaW5lIEVsZlcgX19FbGZOCisrIyBlbmRpZgorKyNlbmRpZgorKworIHN0cnVjdCB1bndfZWhfY2FsbGJhY2tfZGF0YQorIHsKKyAgIF9VbndpbmRfUHRyIHBjOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMC8yOTAtZnJlZWJzZC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMjkwLWZyZWVic2QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQxNTY0YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMjkwLWZyZWVic2QucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2ZyZWVic2Qtc3BlYy5oIGdjYy00LjQuMC9nY2MvY29uZmlnL2ZyZWVic2Qtc3BlYy5oCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9mcmVlYnNkLXNwZWMuaAkyMDA5LTA1LTI3IDIxOjM4OjQ3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL2ZyZWVic2Qtc3BlYy5oCTIwMDktMDUtMjcgMjE6Mzg6NDcuMDAwMDAwMDAwICswMjAwCitAQCAtODYsOSArODYsMTAgQEAKKyAjZGVmaW5lIEZCU0RfU1RBUlRGSUxFX1NQRUMgXAorICAgIiV7IXNoYXJlZDogXAorICAgICAgJXtwZzpnY3J0MS5vJXN9ICV7IXBnOiV7cDpnY3J0MS5vJXN9IFwKKy0JCSAgICAgICAleyFwOiV7cHJvZmlsZTpnY3J0MS5vJXN9IFwKKy0JCQkgJXshcHJvZmlsZTpjcnQxLm8lc319fX0gXAorLSAgIGNydGkubyVzICV7IXNoYXJlZDpjcnRiZWdpbi5vJXN9ICV7c2hhcmVkOmNydGJlZ2luUy5vJXN9IgorKwkleyFwOiV7cHJvZmlsZTpnY3J0MS5vJXN9IFwKKysJICV7IXByb2ZpbGU6Y3J0MS5vJXN9fX19IFwKKysgICBjcnRpLm8lcyBcCisrICAgJXtzdGF0aWM6Y3J0YmVnaW5ULm8lcztzaGFyZWQ6Y3J0YmVnaW5TLm8lczs6Y3J0YmVnaW4ubyVzfSIKKyAKKyAvKiBQcm92aWRlIGEgRU5ERklMRV9TUEVDIGFwcHJvcHJpYXRlIGZvciBGcmVlQlNELiAgSGVyZSB3ZSB0YWNrIG9uCisgICAgdGhlIG1hZ2ljYWwgY3J0ZW5kLm8gZmlsZSAoc2VlIGNydHN0dWZmLmMpIHdoaWNoIHByb3ZpZGVzIHBhcnQgb2YgCitAQCAtMTI2LDcgKzEyNyw4IEBACisgICAgICV7cGc6ICAtbGNfcH0JCQkJCQkJXAorICAgfSIKKyAjZWxzZQorLSNpZiBGQlNEX01BSk9SIDwgNQorKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKysjaWYgX19GcmVlQlNEX3ZlcnNpb24gPCA1MDAwMTYKKyAjZGVmaW5lIEZCU0RfTElCX1NQRUMgIgkJCQkJCQlcCisgICAleyFzaGFyZWQ6CQkJCQkJCQlcCisgICAgICV7IXBnOgkJCQkJCQkJXAorQEAgLTEzNiwxNyArMTM4LDM0IEBACisgICAgICAgJXshcHRocmVhZDotbGNfcH0JCQkJCQkJXAorICAgICAgICV7cHRocmVhZDotbGNfcl9wfX0JCQkJCQlcCisgICB9IgorLSNlbHNlCisrI2VsaWYgX19GcmVlQlNEX3ZlcnNpb24gPCA3MDAwMjIKKyAjZGVmaW5lIEZCU0RfTElCX1NQRUMgIgkJCQkJCQlcCisgICAleyFzaGFyZWQ6CQkJCQkJCQlcCisgICAgICV7IXBnOiAle3B0aHJlYWQ6LWxwdGhyZWFkfSAtbGN9CQkJCQlcCisgICAgICV7cGc6ICAle3B0aHJlYWQ6LWxwdGhyZWFkX3B9IC1sY19wfQkJCQlcCisgICB9IgorKyNlbHNlCisrI2RlZmluZSBGQlNEX0xJQl9TUEVDICIJCQkJCQkJXAorKyAgJXshc2hhcmVkOgkJCQkJCQkJXAorKyAgICAleyFwZzogJXtwdGhyZWFkOi1scHRocmVhZH0gLWxjfQkJCQkJXAorKyAgICAle3BnOiAgJXtwdGhyZWFkOi1scHRocmVhZF9wfSAtbGNfcH19CQkJCVwKKysgICV7c2hhcmVkOgkJCQkJCQkJXAorKyAgICAle3B0aHJlYWQ6LWxwdGhyZWFkfSAtbGN9CQkJCQkJXAorKyAgIgorICNlbmRpZgorICNlbmRpZgorIAorLSNpZiBGQlNEX01BSk9SIDwgNgorKyNpZiBGQlNEX01BSk9SIDwgNQorICNkZWZpbmUgRkJTRF9EWU5BTUlDX0xJTktFUiAiL3Vzci9saWJleGVjL2xkLWVsZi5zby4xIgorICNlbHNlCisgI2RlZmluZSBGQlNEX0RZTkFNSUNfTElOS0VSICIvbGliZXhlYy9sZC1lbGYuc28uMSIKKyAjZW5kaWYKKysKKysjaWYgZGVmaW5lZChIQVZFX0xEX0VIX0ZSQU1FX0hEUikKKysjZGVmaW5lIExJTktfRUhfU1BFQyAiJXshc3RhdGljOi0tZWgtZnJhbWUtaGRyfSAiCisrI2VuZGlmCisrCisrLyogVXNlIC0tYXMtbmVlZGVkIC1sZ2NjX3MgZm9yIGVoIHN1cHBvcnQuICAqLworKyNpZmRlZiBIQVZFX0xEX0FTX05FRURFRAorKyNkZWZpbmUgVVNFX0xEX0FTX05FRURFRCAxCisrI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzMwMC1wcjQwMTA1LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMC8zMDAtcHI0MDEwNS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWNiYWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMC8zMDAtcHI0MDEwNS5wYXRjaApAQCAtMCwwICsxLDE4MCBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvTWFrZWZpbGUuaW4gZ2NjLTQuNC4wL2djYy9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9NYWtlZmlsZS5pbgkyMDA5LTAzLTI1IDEzOjAwOjMyLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuMC9nY2MvTWFrZWZpbGUuaW4JMjAwOS0wNS0yNyAyMTozODo1MC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNzg1LDcgKzI3ODUsOCBAQAorICAgIHZhbHVlLXByb2YuaCAkKFRSRUVfSU5MSU5FX0gpICQoVEFSR0VUX0gpCisgY2ZncnRsLm8gOiBjZmdydGwuYyAkKENPTkZJR19IKSAkKFNZU1RFTV9IKSBjb3JldHlwZXMuaCAkKFRNX0gpICQoUlRMX0gpIFwKKyAgICAkKEZMQUdTX0gpIGluc24tY29uZmlnLmggJChCQVNJQ19CTE9DS19IKSAkKFJFR1NfSCkgaGFyZC1yZWctc2V0LmggXAorLSAgIG91dHB1dC5oICQoVE9QTEVWX0gpICQoRlVOQ1RJT05fSCkgZXhjZXB0LmggJChUTV9QX0gpIGluc24tY29uZmlnLmggJChFWFBSX0gpIFwKKysgICBvdXRwdXQuaCAkKFRPUExFVl9IKSAkKEZVTkNUSU9OX0gpIGV4Y2VwdC5oICQoVE1fUF9IKSAkKElOU05fQVRUUl9IKSBcCisrICAgaW5zbi1jb25maWcuaCAkKEVYUFJfSCkgXAorICAgICQoQ0ZHTEFZT1VUX0gpICQoQ0ZHTE9PUF9IKSAkKE9CU1RBQ0tfSCkgJChUQVJHRVRfSCkgJChUUkVFX0gpIFwKKyAgICB0cmVlLXBhc3MuaCAkKERGX0gpICQoR0dDX0gpCisgY2ZnYW5hbC5vIDogY2ZnYW5hbC5jICQoQ09ORklHX0gpICQoU1lTVEVNX0gpIGNvcmV0eXBlcy5oICQoVE1fSCkgJChSVExfSCkgXAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY2ZncnRsLmMgZ2NjLTQuNC4wL2djYy9jZmdydGwuYworLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jZmdydGwuYwkyMDA4LTEyLTEyIDIyOjE2OjA5LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuMC9nY2MvY2ZncnRsLmMJMjAwOS0wNS0yNyAyMTozODo1MC4wMDAwMDAwMDAgKzAyMDAKK0BAIC01Myw2ICs1Myw3IEBACisgI2luY2x1ZGUgInRvcGxldi5oIgorICNpbmNsdWRlICJ0bV9wLmgiCisgI2luY2x1ZGUgIm9ic3RhY2suaCIKKysjaW5jbHVkZSAiaW5zbi1hdHRyLmgiCisgI2luY2x1ZGUgImluc24tY29uZmlnLmgiCisgI2luY2x1ZGUgImNmZ2xheW91dC5oIgorICNpbmNsdWRlICJleHByLmgiCitAQCAtNDI3LDEzICs0MjgsMjcgQEAKKyAgIHJldHVybiAwOworIH0KKyAKKytzdGF0aWMgdW5zaWduZWQgaW50CisrcmVzdF9vZl9wYXNzX2ZyZWVfY2ZnICh2b2lkKQorK3sKKysjaWZkZWYgREVMQVlfU0xPVFMKKysgIC8qIFRoZSByZXNvdXJjZS5jIG1hY2hpbmVyeSB1c2VzIERGIGJ1dCB0aGUgQ0ZHIGlzbid0IGd1YXJhbnRlZWQgdG8gYmUKKysgICAgIHZhbGlkIGF0IHRoYXQgcG9pbnQgc28gaXQgd291bGQgYmUgdG9vIGxhdGUgdG8gY2FsbCBkZl9hbmFseXplLiAgKi8KKysgIGlmIChvcHRpbWl6ZSA+IDAgJiYgZmxhZ19kZWxheWVkX2JyYW5jaCkKKysgICAgZGZfYW5hbHl6ZSAoKTsKKysjZW5kaWYKKysKKysgIGZyZWVfYmJfZm9yX2luc24gKCk7CisrICByZXR1cm4gMDsKKyt9CisrCisgc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2ZyZWVfY2ZnID0KKyB7CisgIHsKKyAgIFJUTF9QQVNTLAorICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYW1lICovCisgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdhdGUgKi8KKy0gIGZyZWVfYmJfZm9yX2luc24sICAgICAgICAgICAgICAgICAgICAgLyogZXhlY3V0ZSAqLworKyAgcmVzdF9vZl9wYXNzX2ZyZWVfY2ZnLCAgICAgICAgICAgICAgICAvKiBleGVjdXRlICovCisgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN1YiAqLworICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuZXh0ICovCisgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXRpY19wYXNzX251bWJlciAqLworZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvcmVzb3VyY2UuYyBnY2MtNC40LjAvZ2NjL3Jlc291cmNlLmMKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvcmVzb3VyY2UuYwkyMDA5LTAyLTIwIDE2OjIwOjM4LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuMC9nY2MvcmVzb3VyY2UuYwkyMDA5LTA1LTI3IDIxOjM4OjUwLjAwMDAwMDAwMCArMDIwMAorQEAgLTEzNSw4ICsxMzUsNiBAQAorIHN0YXRpYyBpbnQKKyBmaW5kX2Jhc2ljX2Jsb2NrIChydHggaW5zbiwgaW50IHNlYXJjaF9saW1pdCkKKyB7CistICBiYXNpY19ibG9jayBiYjsKKy0KKyAgIC8qIFNjYW4gYmFja3dhcmRzIHRvIHRoZSBwcmV2aW91cyBCQVJSSUVSLiAgVGhlbiBzZWUgaWYgd2UgY2FuIGZpbmQgYQorICAgICAgbGFiZWwgdGhhdCBzdGFydHMgYSBiYXNpYyBibG9jay4gIFJldHVybiB0aGUgYmFzaWMgYmxvY2sgbnVtYmVyLiAgKi8KKyAgIGZvciAoaW5zbiA9IHByZXZfbm9ubm90ZV9pbnNuIChpbnNuKTsKK0BAIC0xNTcsMTEgKzE1NSw4IEBACisgICBmb3IgKGluc24gPSBuZXh0X25vbm5vdGVfaW5zbiAoaW5zbik7CisgICAgICAgIGluc24gJiYgTEFCRUxfUCAoaW5zbik7CisgICAgICAgIGluc24gPSBuZXh0X25vbm5vdGVfaW5zbiAoaW5zbikpCistICAgIHsKKy0gICAgICBGT1JfRUFDSF9CQiAoYmIpCistCWlmIChpbnNuID09IEJCX0hFQUQgKGJiKSkKKy0JICByZXR1cm4gYmItPmluZGV4OworLSAgICB9CisrICAgIGlmIChCTE9DS19GT1JfSU5TTiAoaW5zbikpCisrICAgICAgcmV0dXJuIEJMT0NLX0ZPUl9JTlNOIChpbnNuKS0+aW5kZXg7CisgCisgICByZXR1cm4gLTE7CisgfQorQEAgLTg0OCwxMyArODQzLDEyIEBACisgICAgKHdpdGggbm8gaW50ZXJ2ZW5pbmcgYWN0aXZlIGluc25zKSB0byBzZWUgaWYgYW55IG9mIHRoZW0gc3RhcnQgYSBiYXNpYworICAgIGJsb2NrLiAgSWYgd2UgaGl0IHRoZSBzdGFydCBvZiB0aGUgZnVuY3Rpb24gZmlyc3QsIHdlIHVzZSBibG9jayAwLgorIAorLSAgIE9uY2Ugd2UgaGF2ZSBmb3VuZCBhIGJhc2ljIGJsb2NrIGFuZCBhIGNvcnJlc3BvbmRpbmcgZmlyc3QgaW5zbnMsIHdlIGNhbgorLSAgIGFjY3VyYXRlbHkgY29tcHV0ZSB0aGUgbGl2ZSBzdGF0dXMgZnJvbSBiYXNpY19ibG9ja19saXZlX3JlZ3MgYW5kCistICAgcmVnX3JlbnVtYmVyLiAgKEJ5IHN0YXJ0aW5nIGF0IGEgbGFiZWwgZm9sbG93aW5nIGEgQkFSUklFUiwgd2UgYXJlIGltbXVuZQorLSAgIHRvIGFjdGlvbnMgdGFrZW4gYnkgcmVsb2FkIGFuZCBqdW1wLikgIFRoZW4gd2Ugc2NhbiBhbGwgaW5zbnMgYmV0d2VlbgorLSAgIHRoYXQgcG9pbnQgYW5kIG91ciB0YXJnZXQuICBGb3IgZWFjaCBDTE9CQkVSIChvciBmb3IgY2FsbC1jbG9iYmVyZWQgcmVncworLSAgIHdoZW4gd2UgcGFzcyBhIENBTExfSU5TTiksIG1hcmsgdGhlIGFwcHJvcHJpYXRlIHJlZ2lzdGVycyBhcmUgZGVhZC4gIEZvcgorLSAgIGEgU0VULCBtYXJrIHRoZW0gYXMgbGl2ZS4KKysgICBPbmNlIHdlIGhhdmUgZm91bmQgYSBiYXNpYyBibG9jayBhbmQgYSBjb3JyZXNwb25kaW5nIGZpcnN0IGluc24sIHdlIGNhbgorKyAgIGFjY3VyYXRlbHkgY29tcHV0ZSB0aGUgbGl2ZSBzdGF0dXMgKGJ5IHN0YXJ0aW5nIGF0IGEgbGFiZWwgZm9sbG93aW5nIGEKKysgICBCQVJSSUVSLCB3ZSBhcmUgaW1tdW5lIHRvIGFjdGlvbnMgdGFrZW4gYnkgcmVsb2FkIGFuZCBqdW1wLikgIFRoZW4gd2UKKysgICBzY2FuIGFsbCBpbnNucyBiZXR3ZWVuIHRoYXQgcG9pbnQgYW5kIG91ciB0YXJnZXQuICBGb3IgZWFjaCBDTE9CQkVSIChvcgorKyAgIGZvciBjYWxsLWNsb2JiZXJlZCByZWdzIHdoZW4gd2UgcGFzcyBhIENBTExfSU5TTiksIG1hcmsgdGhlIGFwcHJvcHJpYXRlCisrICAgcmVnaXN0ZXJzIGFyZSBkZWFkLiAgRm9yIGEgU0VULCBtYXJrIHRoZW0gYXMgbGl2ZS4KKyAKKyAgICBXZSBoYXZlIHRvIGJlIGNhcmVmdWwgd2hlbiB1c2luZyBSRUdfREVBRCBub3RlcyBiZWNhdXNlIHRoZXkgYXJlIG5vdAorICAgIHVwZGF0ZWQgYnkgc3VjaCB0aGluZ3MgYXMgZmluZF9lcXVpdl9yZWcuICBTbyBrZWVwIHRyYWNrIG9mIHJlZ2lzdGVycworQEAgLTk1NCwxMyArOTQ4LDEwIEBACisgICAgICBUQVJHRVQuICBPdGhlcndpc2UsIHdlIG11c3QgYXNzdW1lIGV2ZXJ5dGhpbmcgaXMgbGl2ZS4gICovCisgICBpZiAoYiAhPSAtMSkKKyAgICAgeworLSAgICAgIHJlZ3NldCByZWdzX2xpdmUgPSBERl9MUl9JTiAoQkFTSUNfQkxPQ0sgKGIpKTsKKysgICAgICByZWdzZXQgcmVnc19saXZlID0gZGZfZ2V0X2xpdmVfaW4gKEJBU0lDX0JMT0NLIChiKSk7CisgICAgICAgcnR4IHN0YXJ0X2luc24sIHN0b3BfaW5zbjsKKyAKKy0gICAgICAvKiBDb21wdXRlIGhhcmQgcmVncyBsaXZlIGF0IHN0YXJ0IG9mIGJsb2NrIC0tIHRoaXMgaXMgdGhlIHJlYWwgaGFyZCByZWdzCistCSBtYXJrZWQgbGl2ZSwgcGx1cyBsaXZlIHBzZXVkbyByZWdzIHRoYXQgaGF2ZSBiZWVuIHJlbnVtYmVyZWQgdG8KKy0JIGhhcmQgcmVncy4gICovCistCisrICAgICAgLyogQ29tcHV0ZSBoYXJkIHJlZ3MgbGl2ZSBhdCBzdGFydCBvZiBibG9jay4gICovCisgICAgICAgUkVHX1NFVF9UT19IQVJEX1JFR19TRVQgKGN1cnJlbnRfbGl2ZV9yZWdzLCByZWdzX2xpdmUpOworIAorICAgICAgIC8qIEdldCBzdGFydGluZyBhbmQgZW5kaW5nIGluc24sIGhhbmRsaW5nIHRoZSBjYXNlIHdoZXJlIGVhY2ggbWlnaHQKK0BAIC0xMDQ2LDEwICsxMDM3LDI0IEBACisgCisgCSAgZWxzZSBpZiAoTEFCRUxfUCAocmVhbF9pbnNuKSkKKyAJICAgIHsKKysJICAgICAgYmFzaWNfYmxvY2sgYmI7CisrCisgCSAgICAgIC8qIEEgbGFiZWwgY2xvYmJlcnMgdGhlIHBlbmRpbmcgZGVhZCByZWdpc3RlcnMgc2luY2UgbmVpdGhlcgorIAkJIHJlbG9hZCBub3IganVtcCB3aWxsIHByb3BhZ2F0ZSBhIHZhbHVlIGFjcm9zcyBhIGxhYmVsLiAgKi8KKyAJICAgICAgQU5EX0NPTVBMX0hBUkRfUkVHX1NFVCAoY3VycmVudF9saXZlX3JlZ3MsIHBlbmRpbmdfZGVhZF9yZWdzKTsKKyAJICAgICAgQ0xFQVJfSEFSRF9SRUdfU0VUIChwZW5kaW5nX2RlYWRfcmVncyk7CisrCisrCSAgICAgIC8qIFdlIG11c3QgY29uc2VydmF0aXZlbHkgYXNzdW1lIHRoYXQgYWxsIHJlZ2lzdGVycyB0aGF0IHVzZWQKKysJCSB0byBiZSBsaXZlIGhlcmUgc3RpbGwgYXJlLiAgVGhlIGZhbGx0aHJvdWdoIGVkZ2UgbWF5IGhhdmUKKysJCSBsZWZ0IGEgbGl2ZSByZWdpc3RlciB1bmluaXRpYWxpemVkLiAgKi8KKysJICAgICAgYmIgPSBCTE9DS19GT1JfSU5TTiAocmVhbF9pbnNuKTsKKysJICAgICAgaWYgKGJiKQorKwkJeworKwkJICBIQVJEX1JFR19TRVQgZXh0cmFfbGl2ZTsKKysKKysJCSAgUkVHX1NFVF9UT19IQVJEX1JFR19TRVQgKGV4dHJhX2xpdmUsIGRmX2dldF9saXZlX2luIChiYikpOworKwkJICBJT1JfSEFSRF9SRUdfU0VUIChjdXJyZW50X2xpdmVfcmVncywgZXh0cmFfbGl2ZSk7CisrCQl9CisgCSAgICB9CisgCisgCSAgLyogVGhlIGJlZ2lubmluZyBvZiB0aGUgZXBpbG9ndWUgY29ycmVzcG9uZHMgdG8gdGhlIGVuZCBvZiB0aGUKK0BAIC0xMTIxLDYgKzExMjYsNyBAQAorIGluaXRfcmVzb3VyY2VfaW5mbyAocnR4IGVwaWxvZ3VlX2luc24pCisgeworICAgaW50IGk7CisrICBiYXNpY19ibG9jayBiYjsKKyAKKyAgIC8qIEluZGljYXRlIHdoYXQgcmVzb3VyY2VzIGFyZSByZXF1aXJlZCB0byBiZSB2YWxpZCBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50CisgICAgICBmdW5jdGlvbi4gIFRoZSBjb25kaXRpb24gY29kZSBuZXZlciBpcyBhbmQgbWVtb3J5IGFsd2F5cyBpcy4gIElmIHRoZQorQEAgLTExODksNiArMTE5NSwxMSBAQAorICAgLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIHRhYmxlcyB1c2VkIGJ5IG1hcmtfdGFyZ2V0X2xpdmVfcmVncy4gICovCisgICB0YXJnZXRfaGFzaF90YWJsZSA9IFhDTkVXVkVDIChzdHJ1Y3QgdGFyZ2V0X2luZm8gKiwgVEFSR0VUX0hBU0hfUFJJTUUpOworICAgYmJfdGlja3MgPSBYQ05FV1ZFQyAoaW50LCBsYXN0X2Jhc2ljX2Jsb2NrKTsKKysKKysgIC8qIFNldCB0aGUgQkxPQ0tfRk9SX0lOU04gb2YgZWFjaCBsYWJlbCB0aGF0IHN0YXJ0cyBhIGJhc2ljIGJsb2NrLiAgKi8KKysgIEZPUl9FQUNIX0JCIChiYikKKysgICAgaWYgKExBQkVMX1AgKEJCX0hFQUQgKGJiKSkpCisrICAgICAgQkxPQ0tfRk9SX0lOU04gKEJCX0hFQUQgKGJiKSkgPSBiYjsKKyB9CisgDAorIC8qIEZyZWUgdXAgdGhlIHJlc291cmNlcyBhbGxvY2F0ZWQgdG8gbWFya190YXJnZXRfbGl2ZV9yZWdzICgpLiAgVGhpcworQEAgLTExOTcsNiArMTIwOCw4IEBACisgdm9pZAorIGZyZWVfcmVzb3VyY2VfaW5mbyAodm9pZCkKKyB7CisrICBiYXNpY19ibG9jayBiYjsKKysKKyAgIGlmICh0YXJnZXRfaGFzaF90YWJsZSAhPSBOVUxMKQorICAgICB7CisgICAgICAgaW50IGk7CitAQCAtMTIyMiw2ICsxMjM1LDEwIEBACisgICAgICAgZnJlZSAoYmJfdGlja3MpOworICAgICAgIGJiX3RpY2tzID0gTlVMTDsKKyAgICAgfQorKworKyAgRk9SX0VBQ0hfQkIgKGJiKQorKyAgICBpZiAoTEFCRUxfUCAoQkJfSEVBRCAoYmIpKSkKKysgICAgICBCTE9DS19GT1JfSU5TTiAoQkJfSEVBRCAoYmIpKSA9IE5VTEw7CisgfQorIAwKKyAvKiBDbGVhciBhbnkgaGFzaGVkIGluZm9ybWF0aW9uIHRoYXQgd2UgaGF2ZSBzdG9yZWQgZm9yIElOU04uICAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMC8zMTAtdWNsaWJjLWNvbmYucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzMxMC11Y2xpYmMtY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2YzYjkxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMC8zMTAtdWNsaWJjLWNvbmYucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2ggZ2NjLTQuNC4wL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAorLS0tIGdjYy00LjQuMC5vcmlnL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gJMjAwOS0wNS0yNyAyMTozODo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMDYsNiArMTA2LDEwIEBACisgIHRoZW4KKyAgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCisgICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQorK2VsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCAtYSAkSF9SRUFMX1RBUkdFVCA9IGk2ODYtcGMtbGludXgtdWNsaWJjIF0KKysgdGhlbgorKyAgbWFrZSBhbGwtZ2RiIGFsbC1kZWphZ251IGFsbC1sZCB8fCBleGl0IDEKKysgIG1ha2UgaW5zdGFsbC1nZGIgaW5zdGFsbC1kZWphZ251IGluc3RhbGwtbGQgfHwgZXhpdCAxCisgZWxpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIF0gOyB0aGVuCisgICBtYWtlIGJvb3RzdHJhcCB8fCBleGl0IDEKKyAgIG1ha2UgaW5zdGFsbCB8fCBleGl0IDEKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcgZ2NjLTQuNC4wL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCistLS0gZ2NjLTQuNC4wLm9yaWcvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcJMjAwNy0wNi0wNCAwMToxODo0My4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcJMjAwOS0wNS0yNyAyMTozODo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC02MDMsNyArNjAzLDcgQEAKKyAKKyAjIFRyYW5zZm9ybSBsaW51eCogdG8gKi0qLWxpbnV4LWdudSosIHRvIHN1cHBvcnQgb2xkIGNvbmZpZ3VyZSBzY3JpcHRzLgorIGNhc2UgJGhvc3Rfb3MgaW4KKy1saW51eC1nbnUqKSA7OworK2xpbnV4LWdudSp8bGludXgtdWNsaWJjKikgOzsKKyBsaW51eCopIGhvc3Q9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoLiotLiotbGludXhcKVwoLipcKSQvXDEtZ251XDIvJ2AKKyBlc2FjCisgCitAQCAtMTI1MSw3ICsxMjUxLDcgQEAKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgqKQorICAgdmVyc2lvbl90eXBlPWxpbnV4CisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIG5lZWRfdmVyc2lvbj1ubwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMC8zMjAtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMC8zMjAtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwOTMzNWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzMyMC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9ib2VobS1nYy9pbmNsdWRlL2djLmggZ2NjLTQuNC4wL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAorLS0tIGdjYy00LjQuMC5vcmlnL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAkyMDA3LTA0LTIzIDIzOjEwOjA5LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9ib2VobS1nYy9pbmNsdWRlL2djLmgJMjAwOS0wNS0yNyAyMTozODo1NS4wMDAwMDAwMDAgKzAyMDAKK0BAIC01MDMsNyArNTAzLDcgQEAKKyAjaWYgZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoX19HTElCQ19fKQorICMgaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyAjIGlmIChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMSB8fCBfX0dMSUJDX18gPiAyKSBcCistICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykKKysgICAgICYmICFkZWZpbmVkKF9faWE2NF9fKSAmJiAhZGVmaW5lZChfX1VDTElCQ19fKQorICMgICBpZm5kZWYgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQorICMgICAgIGRlZmluZSBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgIGVuZGlmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzMzMC1jOTktc25wcmludGYucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzMzMC1jOTktc25wcmludGYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkyOGY0YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMzMwLWM5OS1zbnByaW50Zi5wYXRjaApAQCAtMCwwICsxLDEyIEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfZ2xvYmFsL2NzdGRpbyBnY2MtNC40LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY19nbG9iYWwvY3N0ZGlvCistLS0gZ2NjLTQuNC4wLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvY19nbG9iYWwvY3N0ZGlvCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfZ2xvYmFsL2NzdGRpbwkyMDA5LTA1LTI3IDIxOjM4OjU4LjAwMDAwMDAwMCArMDIwMAorQEAgLTEzOSw3ICsxMzksNyBAQAorIAorIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKyAKKy0jaWYgX0dMSUJDWFhfVVNFX0M5OQorKyNpZiBfR0xJQkNYWF9VU0VfQzk5IHx8IGRlZmluZWQgX19VQ0xJQkNfXworIAorICN1bmRlZiBzbnByaW50ZgorICN1bmRlZiB2ZnNjYW5mCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzM0MC1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMzQwLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYTRlMzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzM0MC1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMgZ2NjLTQuNC4wL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMKKy0tLSBnY2MtNC40LjAub3JpZy9saWJtdWRmbGFwL21mLWhvb2tzMi5jCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMJMjAwOS0wNS0yNyAyMTozOTowMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC00MjEsNyArNDIxLDcgQEAKKyB7CisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzLCBuLCBfX01GX0NIRUNLX1dSSVRFLCAiYnplcm8gcmVnaW9uIik7CistICBiemVybyAocywgbik7CisrICBtZW1zZXQgKHMsIDAsIG4pOworIH0KKyAKKyAKK0BAIC00MzEsNyArNDMxLDcgQEAKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHNyYywgbiwgX19NRl9DSEVDS19SRUFELCAiYmNvcHkgc3JjIik7CisgICBNRl9WQUxJREFURV9FWFRFTlQoZGVzdCwgbiwgX19NRl9DSEVDS19XUklURSwgImJjb3B5IGRlc3QiKTsKKy0gIGJjb3B5IChzcmMsIGRlc3QsIG4pOworKyAgbWVtbW92ZSAoZGVzdCwgc3JjLCBuKTsKKyB9CisgCisgCitAQCAtNDQxLDcgKzQ0MSw3IEBACisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzMSwgbiwgX19NRl9DSEVDS19SRUFELCAiYmNtcCAxc3QgYXJnIik7CisgICBNRl9WQUxJREFURV9FWFRFTlQoczIsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjbXAgMm5kIGFyZyIpOworLSAgcmV0dXJuIGJjbXAgKHMxLCBzMiwgbik7CisrICByZXR1cm4gbiA9PSAwID8gMCA6IG1lbWNtcCAoczEsIHMyLCBuKTsKKyB9CisgCisgCitAQCAtNDUwLDcgKzQ1MCw3IEBACisgICBzaXplX3QgbiA9IHN0cmxlbiAocyk7CisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzLCBDTEFNUEFERChuLCAxKSwgX19NRl9DSEVDS19SRUFELCAiaW5kZXggcmVnaW9uIik7CistICByZXR1cm4gaW5kZXggKHMsIGMpOworKyAgcmV0dXJuIHN0cmNociAocywgYyk7CisgfQorIAorIAorQEAgLTQ1OSw3ICs0NTksNyBAQAorICAgc2l6ZV90IG4gPSBzdHJsZW4gKHMpOworICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQocywgQ0xBTVBBREQobiwgMSksIF9fTUZfQ0hFQ0tfUkVBRCwgInJpbmRleCByZWdpb24iKTsKKy0gIHJldHVybiByaW5kZXggKHMsIGMpOworKyAgcmV0dXJuIHN0cnJjaHIgKHMsIGMpOworIH0KKyAKKyAvKiBYWFg6ICBzdHBjcHksIG1lbWNjcHkgKi8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMzUwLWluZGV4X21hY3JvLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMC8zNTAtaW5kZXhfbWFjcm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JiODk5YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMzUwLWluZGV4X21hY3JvLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzI5MC1pbmRleF9tYWNyby5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvdWNsaWJjLzkwX2FsbF8zMDQtaW5kZXhfbWFjcm8ucGF0Y2gKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZSBnY2MtNC4zLjMvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQkyMDA4LTA3LTE1IDEyOjE0OjUxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQkyMDA5LTAxLTI3IDIyOjI1OjQxLjAwMDAwMDAwMCArMDEwMAorQEAgLTU5LDYgKzU5LDkgQEAKKyAjaW5jbHVkZSA8Yml0cy9ndGhyLmg+CisgI2luY2x1ZGUgPHRyMS9mdW5jdGlvbmFsPgorIAorKy8qIGNvcGUgdy8gaW5kZXggZGVmaW5lZCBhcyBtYWNybywgU3VTdjMgcHJvcG9zYWwgKi8KKysjdW5kZWYgaW5kZXgKKysKKyAjIGlmZGVmIF9fR0MKKyAjICAgZGVmaW5lIF9fR0NfQ09OU1QgY29uc3QKKyAjIGVsc2UKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmggZ2NjLTQuMy4zL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCistLS0gZ2NjLTQuMy4zLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgJMjAwNy0wNS0wNCAxNzowNjo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgJMjAwOS0wMS0yNyAyMjoyNTo0MS4wMDAwMDAwMDAgKzAxMDAKK0BAIC01NCw2ICs1NCw5IEBACisgI2luY2x1ZGUgPGV4dC9tZW1vcnk+IC8vIEZvciB1bmluaXRpYWxpemVkX2NvcHlfbgorICNpbmNsdWRlIDxleHQvbnVtZXJpYz4gLy8gRm9yIHBvd2VyCisgCisrLyogY29wZSB3LyBpbmRleCBkZWZpbmVkIGFzIG1hY3JvLCBTdVN2MyBwcm9wb3NhbCAqLworKyN1bmRlZiBpbmRleAorKworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisgCisgICB1c2luZyBzdGQ6OnNpemVfdDsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMzYwLWFybS1iaWdlbmRpYW4ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzM2MC1hcm0tYmlnZW5kaWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZjEwYWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzM2MC1hcm0tYmlnZW5kaWFuLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0J5IExlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQHdhbnRzdG9mbHkub3JnPgorQWRkcyBzdXBwb3J0IGZvciBhcm0qYi1saW51eCogYmlnLWVuZGlhbiBBUk0gdGFyZ2V0cworCitTZWUgaHR0cDovL2djYy5nbnUub3JnL1BSMTYzNTAKKworLS0tIGdjYy00LjQuMi5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMDktMDItMjAgMTY6MjA6MzguMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC4yL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMDktMTItMzEgMTQ6MTk6MjAuMDAwMDAwMDAwICswMTAwCitAQCAtNTEsNyArNTEsNyBAQAorIAorICN1bmRlZiAgTVVMVElMSUJfREVGQVVMVFMKKyAjZGVmaW5lIE1VTFRJTElCX0RFRkFVTFRTIFwKKy0JeyAibWFybSIsICJtbGl0dGxlLWVuZGlhbiIsICJtaGFyZC1mbG9hdCIsICJtbm8tdGh1bWItaW50ZXJ3b3JrIiB9CisrCXsgIm1hcm0iLCBUQVJHRVRfRU5ESUFOX09QVElPTiwgIm1oYXJkLWZsb2F0IiwgIm1uby10aHVtYi1pbnRlcndvcmsiIH0KKyAKKyAvKiBOb3cgd2UgZGVmaW5lIHRoZSBzdHJpbmdzIHVzZWQgdG8gYnVpbGQgdGhlIHNwZWMgZmlsZS4gICovCisgI3VuZGVmICBMSUJfU1BFQworZGlmZiAtcnUgZ2NjLTQuNC4yLm9yaWcvZ2NjL2NvbmZpZy5nY2MgZ2NjLTQuNC4yL2djYy9jb25maWcuZ2NjCistLS0gZ2NjLTQuNC4yLm9yaWcvZ2NjL2NvbmZpZy5nY2MJMjAwOS0xMi0zMSAxNDo0MzoxNy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC40LjIvZ2NjL2NvbmZpZy5nY2MJMjAxMC0wMS0wNSAwOToyNzo0Mi4wMDAwMDAwMDAgKzAxMDAKK0BAIC03MzMsNiArNzMzLDExIEBACisgCXRtX2ZpbGU9ImRieGVsZi5oIGVsZm9zLmggYXJtL3Vua25vd24tZWxmLmggYXJtL2VsZi5oIGFybS9saW51eC1nYXMuaCBhcm0vdWNsaW51eC1lbGYuaCIKKyAJdG1ha2VfZmlsZT0iYXJtL3QtYXJtIGFybS90LWFybS1lbGYiCisgCWNhc2UgJHt0YXJnZXR9IGluCisrCWFybSpiLSopCisrCQl0bV9kZWZpbmVzPSIke3RtX2RlZmluZXN9IFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQ9MSIKKysJCTs7CisrCWVzYWMKKysJY2FzZSAke3RhcmdldH0gaW4KKyAJYXJtKi0qLXVjbGludXgqZWFiaSkKKyAJICAgIHRtX2ZpbGU9IiR0bV9maWxlIGFybS9icGFiaS5oIGFybS91Y2xpbnV4LWVhYmkuaCIKKyAJICAgIHRtYWtlX2ZpbGU9IiR0bWFrZV9maWxlIGFybS90LWJwYWJpIgorCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzM3MC1ib290c3RyYXAtdGFyZ2V0X2xpYl9wYXRoLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMC8zNzAtYm9vdHN0cmFwLXRhcmdldF9saWJfcGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTcxZDJkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMC8zNzAtYm9vdHN0cmFwLXRhcmdldF9saWJfcGF0aC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitDaGFuZ2VMb2c6CisyMDEwLTAxLTA2ICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorCisJUFIgYm9vdHN0cmFwLzQxODE4CisJKiBNYWtlZmlsZS50cGwgKEJBU0VfVEFSR0VUX0VYUE9SVFMpOiBPbmx5IGFkZCBUQVJHRVRfTElCX1BBVEgKKwl0byAkKFJQQVRIX0VOVlZBUikgaWYgYm9vdHN0cmFwcGluZy4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggZTVmYTFkMy4uZGJmYzFmMCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTI4MSw3ICsyODEsMTAgQEAgQkFTRV9UQVJHRVRfRVhQT1JUUyA9IFwKKyAJU1RSSVA9IiQoU1RSSVBfRk9SX1RBUkdFVCkiOyBleHBvcnQgU1RSSVA7IFwKKyAJV0lORFJFUz0iJChXSU5EUkVTX0ZPUl9UQVJHRVQpIjsgZXhwb3J0IFdJTkRSRVM7IFwKKyAJV0lORE1DPSIkKFdJTkRNQ19GT1JfVEFSR0VUKSI7IGV4cG9ydCBXSU5ETUM7IFwKKy0JJChSUEFUSF9FTlZWQVIpPWBlY2hvICIkKEhPU1RfTElCX1BBVEgpJChUQVJHRVRfTElCX1BBVEgpJCQkKFJQQVRIX0VOVlZBUikiIHwgc2VkICdzLDo6Kiw6LGc7cyxeOiosLDtzLDoqJCQsLCdgOyBleHBvcnQgJChSUEFUSF9FTlZWQVIpOworK0BpZiBnY2MtYm9vdHN0cmFwCisrCSQoUlBBVEhfRU5WVkFSKT1gZWNobyAiJChUQVJHRVRfTElCX1BBVEgpJCQkKFJQQVRIX0VOVlZBUikiIHwgc2VkICdzLDo6Kiw6LGc7cyxeOiosLDtzLDoqJCQsLCdgOyBleHBvcnQgJChSUEFUSF9FTlZWQVIpOyBcCisrQGVuZGlmIGdjYy1ib290c3RyYXAKKysJJChSUEFUSF9FTlZWQVIpPWBlY2hvICIkKEhPU1RfTElCX1BBVEgpJCQkKFJQQVRIX0VOVlZBUikiIHwgc2VkICdzLDo6Kiw6LGc7cyxeOiosLDtzLDoqJCQsLCdgOyBleHBvcnQgJChSUEFUSF9FTlZWQVIpOworIAorIFJBV19DWFhfVEFSR0VUX0VYUE9SVFMgPSBcCisgCSQoQkFTRV9UQVJHRVRfRVhQT1JUUykgXAorZGlmZiAtLWdpdCBhL01ha2VmaWxlLnRwbCBiL01ha2VmaWxlLnRwbAoraW5kZXggMTUxMDJlNS4uNDUyZDQ3YyAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLnRwbAorKysrIGIvTWFrZWZpbGUudHBsCitAQCAtMjg0LDcgKzI4NCwxMCBAQCBCQVNFX1RBUkdFVF9FWFBPUlRTID0gXAorIAlTVFJJUD0iJChTVFJJUF9GT1JfVEFSR0VUKSI7IGV4cG9ydCBTVFJJUDsgXAorIAlXSU5EUkVTPSIkKFdJTkRSRVNfRk9SX1RBUkdFVCkiOyBleHBvcnQgV0lORFJFUzsgXAorIAlXSU5ETUM9IiQoV0lORE1DX0ZPUl9UQVJHRVQpIjsgZXhwb3J0IFdJTkRNQzsgXAorLQkkKFJQQVRIX0VOVlZBUik9YGVjaG8gIiQoSE9TVF9MSUJfUEFUSCkkKFRBUkdFVF9MSUJfUEFUSCkkJCQoUlBBVEhfRU5WVkFSKSIgfCBzZWQgJ3MsOjoqLDosZztzLF46KiwsO3MsOiokJCwsJ2A7IGV4cG9ydCAkKFJQQVRIX0VOVlZBUik7CisrQGlmIGdjYy1ib290c3RyYXAKKysJJChSUEFUSF9FTlZWQVIpPWBlY2hvICIkKFRBUkdFVF9MSUJfUEFUSCkkJCQoUlBBVEhfRU5WVkFSKSIgfCBzZWQgJ3MsOjoqLDosZztzLF46KiwsO3MsOiokJCwsJ2A7IGV4cG9ydCAkKFJQQVRIX0VOVlZBUik7IFwKKytAZW5kaWYgZ2NjLWJvb3RzdHJhcAorKwkkKFJQQVRIX0VOVlZBUik9YGVjaG8gIiQoSE9TVF9MSUJfUEFUSCkkJCQoUlBBVEhfRU5WVkFSKSIgfCBzZWQgJ3MsOjoqLDosZztzLF46KiwsO3MsOiokJCwsJ2A7IGV4cG9ydCAkKFJQQVRIX0VOVlZBUik7CisgCisgUkFXX0NYWF9UQVJHRVRfRVhQT1JUUyA9IFwKKyAJJChCQVNFX1RBUkdFVF9FWFBPUlRTKSBcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzM4MC1wb3dlcnBjLWxpYmdjY19zLWxpbmstbGlibS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMzgwLXBvd2VycGMtbGliZ2NjX3MtbGluay1saWJtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZDkxMjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzM4MC1wb3dlcnBjLWxpYmdjY19zLWxpbmstbGlibS5wYXRjaApAQCAtMCwwICsxLDEzNSBAQAoraHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMDgtMTAvbXNnMDAyNjkuaHRtbAorCitPbiBnbGliYyB0aGUgbGliYy5zbyBjYXJyaWVzIGEgY29weSBvZiB0aGUgbWF0aCBmdW5jdGlvbiBjb3B5c2lnbmwoKSBidXQKK29uIHVDbGliYyBtYXRoIGZ1bmN0aW9ucyBsaWtlIGNvcHlzaWdubCgpIGxpdmUgaW4gbGlibS4gU2luY2UgbGliZ2NjX3MKK2NvbnRhaW5zIHVucmVzb2x2ZWQgc3ltYm9scywgYW55IGF0dGVtcHQgdG8gbGluayBhZ2FpbnN0IGxpYmdjY19zCit3aXRob3V0IGV4cGxpY2l0ZWx5IHNwZWNpZnlpbmcgLWxtIGZhaWxzLCByZXN1bHRpbmcgaW4gYSBicm9rZW4KK2Jvb3RzdHJhcCBvZiB0aGUgY29tcGlsZXIuCisKKworZGlmZiAtcmR1cCBnY2MtNC40LjAub2xkL2djYy9jb25maWcvdC1zbGliZ2NjLWVsZi12ZXIgZ2NjLTQuNC4wL2djYy9jb25maWcvdC1zbGliZ2NjLWVsZi12ZXIKKy0tLSBnY2MtNC40LjAub2xkL2djYy9jb25maWcvdC1zbGliZ2NjLWVsZi12ZXIJMjAwNS0xMC0zMSAxODowMzowOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy90LXNsaWJnY2MtZWxmLXZlcgkyMDA4LTEwLTA3IDE5OjI4OjEzLjAwMDAwMDAwMCArMDIwMAorQEAgLTksNyArOSw3IEBAIFNITElCX01BUCA9IEBzaGxpYl9tYXBfZmlsZUAKKyBTSExJQl9PQkpTID0gQHNobGliX29ianNACisgU0hMSUJfRElSID0gQG11bHRpbGliX2RpckAKKyBTSExJQl9TTElCRElSX1FVQUwgPSBAc2hsaWJfc2xpYmRpcl9xdWFsQAorLVNITElCX0xDID0gLWxjCisrU0hMSUJfTEMgPSBAbGliZ2NjX2xpYm1AIC1sYworIAorIFNITElCX0xJTksgPSAkKEdDQ19GT1JfVEFSR0VUKSAkKExJQkdDQzJfQ0ZMQUdTKSAtc2hhcmVkIC1ub2RlZmF1bHRsaWJzIFwKKyAJLVdsLC0tc29uYW1lPSQoU0hMSUJfU09OQU1FKSBcCitkaWZmIC1yZHVwIGdjYy00LjQuMC5vbGQvbGliZ2NjL2NvbmZpZ3VyZSBnY2MtNC40LjAvbGliZ2NjL2NvbmZpZ3VyZQorLS0tIGdjYy00LjQuMC5vbGQvbGliZ2NjL2NvbmZpZ3VyZQkyMDA4LTA3LTE3IDEwOjQwOjUzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9saWJnY2MvY29uZmlndXJlCTIwMDgtMTAtMDcgMTk6NDA6NDguMDAwMDAwMDAwICswMjAwCitAQCAtMjcyLDcgKzI3Miw3IEBAIFBBQ0tBR0VfU1RSSU5HPSdHTlUgQyBSdW50aW1lIExpYnJhcnkgMS4KKyBQQUNLQUdFX0JVR1JFUE9SVD0nJworIAorIGFjX3VuaXF1ZV9maWxlPSJzdGF0aWMtb2JqZWN0Lm1rIgorLWFjX3N1YnN0X3ZhcnM9J1NIRUxMIFBBVEhfU0VQQVJBVE9SIFBBQ0tBR0VfTkFNRSBQQUNLQUdFX1RBUk5BTUUgUEFDS0FHRV9WRVJTSU9OIFBBQ0tBR0VfU1RSSU5HIFBBQ0tBR0VfQlVHUkVQT1JUIGV4ZWNfcHJlZml4IHByZWZpeCBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgbGliZGlyIGluY2x1ZGVkaXIgb2xkaW5jbHVkZWRpciBpbmZvZGlyIG1hbmRpciBidWlsZF9hbGlhcyBob3N0X2FsaWFzIHRhcmdldF9hbGlhcyBERUZTIEVDSE9fQyBFQ0hPX04gRUNIT19UIExJQlMgbGliZ2NjX3RvcGRpciBlbmFibGVfc2hhcmVkIHNsaWJkaXIgSU5TVEFMTF9QUk9HUkFNIElOU1RBTExfU0NSSVBUIElOU1RBTExfREFUQSBBV0sgYnVpbGQgYnVpbGRfY3B1IGJ1aWxkX3ZlbmRvciBidWlsZF9vcyBob3N0IGhvc3RfY3B1IGhvc3RfdmVuZG9yIGhvc3Rfb3MgaG9zdF9ub25jYW5vbmljYWwgYnVpbGRfbGlic3ViZGlyIGJ1aWxkX3N1YmRpciBob3N0X3N1YmRpciB0YXJnZXRfc3ViZGlyIEFSIGFjX2N0X0FSIExJUE8gYWNfY3RfTElQTyBOTSBhY19jdF9OTSBSQU5MSUIgYWNfY3RfUkFOTElCIFNUUklQIGFjX2N0X1NUUklQIExOX1MgQ0MgQ0ZMQUdTIExERkxBR1MgQ1BQRkxBR1MgYWNfY3RfQ0MgRVhFRVhUIE9CSkVYVCBDUFAgZGVjaW1hbF9mbG9hdCBlbmFibGVfZGVjaW1hbF9mbG9hdCBmaXhlZF9wb2ludCB2aXNfaGlkZSBzZXRfaGF2ZV9jY190bHMgdG1ha2VfZmlsZSBleHRyYV9wYXJ0cyBhc21faGlkZGVuX29wIExJQk9CSlMgTFRMSUJPQkpTJworK2FjX3N1YnN0X3ZhcnM9J1NIRUxMIFBBVEhfU0VQQVJBVE9SIFBBQ0tBR0VfTkFNRSBQQUNLQUdFX1RBUk5BTUUgUEFDS0FHRV9WRVJTSU9OIFBBQ0tBR0VfU1RSSU5HIFBBQ0tBR0VfQlVHUkVQT1JUIGV4ZWNfcHJlZml4IHByZWZpeCBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgbGliZGlyIGluY2x1ZGVkaXIgb2xkaW5jbHVkZWRpciBpbmZvZGlyIG1hbmRpciBidWlsZF9hbGlhcyBob3N0X2FsaWFzIHRhcmdldF9hbGlhcyBERUZTIEVDSE9fQyBFQ0hPX04gRUNIT19UIExJQlMgbGliZ2NjX3RvcGRpciBlbmFibGVfc2hhcmVkIHNsaWJkaXIgSU5TVEFMTF9QUk9HUkFNIElOU1RBTExfU0NSSVBUIElOU1RBTExfREFUQSBBV0sgYnVpbGQgYnVpbGRfY3B1IGJ1aWxkX3ZlbmRvciBidWlsZF9vcyBob3N0IGhvc3RfY3B1IGhvc3RfdmVuZG9yIGhvc3Rfb3MgaG9zdF9ub25jYW5vbmljYWwgYnVpbGRfbGlic3ViZGlyIGJ1aWxkX3N1YmRpciBob3N0X3N1YmRpciB0YXJnZXRfc3ViZGlyIEFSIGFjX2N0X0FSIExJUE8gYWNfY3RfTElQTyBOTSBhY19jdF9OTSBSQU5MSUIgYWNfY3RfUkFOTElCIFNUUklQIGFjX2N0X1NUUklQIExOX1MgQ0MgQ0ZMQUdTIExERkxBR1MgQ1BQRkxBR1MgYWNfY3RfQ0MgRVhFRVhUIE9CSkVYVCBDUFAgZGVjaW1hbF9mbG9hdCBlbmFibGVfZGVjaW1hbF9mbG9hdCBmaXhlZF9wb2ludCB2aXNfaGlkZSBzZXRfaGF2ZV9jY190bHMgTElCR0NDX0xJQk0gdG1ha2VfZmlsZSBleHRyYV9wYXJ0cyBhc21faGlkZGVuX29wIExJQk9CSlMgTFRMSUJPQkpTJworIGFjX3N1YnN0X2ZpbGVzPScnCisgYWNfcHdkPWBwd2RgCisgCitAQCAtMzUyMiw2ICszNTIyLDM5IEBAIGlmIHRlc3QgIiRlbmFibGVfdGxzICRnY2NfY3ZfaGF2ZV9jY190bHMKKyBmaQorIAorIAorKyMgT24gcG93ZXJwYyBsaWJnY2NfcyByZWZlcmVuY2VzIGNvcHlzaWdubCB3aGljaCBpcyBhIGxpYm0gZnVuY3Rpb24gYnV0CisrIyBnbGliYyBhcHBhcmVudGx5IGFsc28gcHJvdmlkZXMgaXQgdmlhIGxpYmMgYXMgb3Bwb3NlZCB0byB1Q2xpYmMgd2hlcmUKKysjIGl0IGxpdmVzIGluIGxpYm0uCisrZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgY29weXNpZ25sIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgY29weXNpZ25sLi4uICRFQ0hPX0MiID4mNgorK2lmIHRlc3QgIiR7bGliZ2NjX2N2X2NvcHlzaWdubF9saWIrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKworKyAgICBlY2hvICcjaW5jbHVkZSA8ZmVhdHVyZXMuaD4nID4gY29uZnRlc3QuYworKyAgICBlY2hvICdpbnQgdGhlX2xpYmMgPSBfX1VDTElCQ19fICsgX19wb3dlcnBjX187JyA+PiBjb25mdGVzdC5jCisrICAgIGxpYmdjY19jdl9jb3B5c2lnbmxfbGliPSItbGMiCisrICAgIGlmIHsgYWNfdHJ5PScke0NDLWNjfSAtUyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LnMgMT4mNScKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9CisrICAgIHRoZW4KKysJbGliZ2NjX2N2X2NvcHlzaWdubF9saWI9Ii1sbSIKKysgICAgZmkKKysgICAgcm0gLWYgY29uZnRlc3QuKgorKworK2ZpCisrZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGxpYmdjY19jdl9jb3B5c2lnbmxfbGliIiA+JjUKKytlY2hvICIke0VDSE9fVH0kbGliZ2NjX2N2X2NvcHlzaWdubF9saWIiID4mNgorKworK2Nhc2UgLyR7bGliZ2NjX2N2X2NvcHlzaWdubF9saWJ9LyBpbgorKyAgLy1sbS8pIExJQkdDQ19MSUJNPSIkTElCR0NDX0xJQk0gLWxtIiA7OworKyAgKikgTElCR0NDX0xJQk09IDs7CisrZXNhYworKworKworICMgQ29uZGl0aW9uYWxpemUgdGhlIG1ha2VmaWxlIGZvciB0aGlzIHRhcmdldCBtYWNoaW5lLgorIHRtYWtlX2ZpbGVfPQorIGZvciBmIGluICR7dG1ha2VfZmlsZX0KK0BAIC00MjQyLDYgKzQyNzUsNyBAQCBzLEBlbmFibGVfZGVjaW1hbF9mbG9hdEAsJGVuYWJsZV9kZWNpbWFsCisgcyxAZml4ZWRfcG9pbnRALCRmaXhlZF9wb2ludCw7dCB0CisgcyxAdmlzX2hpZGVALCR2aXNfaGlkZSw7dCB0CisgcyxAc2V0X2hhdmVfY2NfdGxzQCwkc2V0X2hhdmVfY2NfdGxzLDt0IHQKKytzLEBMSUJHQ0NfTElCTUAsJExJQkdDQ19MSUJNLDt0IHQKKyBzLEB0bWFrZV9maWxlQCwkdG1ha2VfZmlsZSw7dCB0CisgcyxAZXh0cmFfcGFydHNALCRleHRyYV9wYXJ0cyw7dCB0CisgcyxAYXNtX2hpZGRlbl9vcEAsJGFzbV9oaWRkZW5fb3AsO3QgdAorZGlmZiAtcmR1cCBnY2MtNC40LjAub2xkL2xpYmdjYy9jb25maWd1cmUuYWMgZ2NjLTQuNC4wL2xpYmdjYy9jb25maWd1cmUuYWMKKy0tLSBnY2MtNC40LjAub2xkL2xpYmdjYy9jb25maWd1cmUuYWMJMjAwOC0wNy0xNyAxMDo0MDo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvbGliZ2NjL2NvbmZpZ3VyZS5hYwkyMDA4LTEwLTA3IDE5OjM0OjQ4LjAwMDAwMDAwMCArMDIwMAorQEAgLTIwMyw2ICsyMDMsMjcgQEAgaWYgdGVzdCAiJGVuYWJsZV90bHMgJGdjY19jdl9oYXZlX2NjX3RscworIGZpCisgQUNfU1VCU1Qoc2V0X2hhdmVfY2NfdGxzKQorIAorKyMgT24gcG93ZXJwYyBsaWJnY2NfcyByZWZlcmVuY2VzIGNvcHlzaWdubCB3aGljaCBpcyBhIGxpYm0gZnVuY3Rpb24gYnV0CisrIyBnbGliYyBhcHBhcmVudGx5IGFsc28gcHJvdmlkZXMgaXQgdmlhIGxpYmMgYXMgb3Bwb3NlZCB0byB1Q2xpYmMgd2hlcmUKKysjIGl0IGxpdmVzIGluIGxpYm0uCisrQUNfQ0FDSEVfQ0hFQ0sKKysgIGxpYmdjY19jdl9jb3B5c2lnbmxfbGliLAorKyAgICBlY2hvICcjaW5jbHVkZSA8ZmVhdHVyZXMuaD4nID4gY29uZnRlc3QuYworKyAgICBlY2hvICdpbnQgdGhlX2xpYmMgPSBfX1VDTElCQ19fICsgX19wb3dlcnBjX187JyA+PiBjb25mdGVzdC5jCisrICAgIGxpYmdjY19jdl9jb3B5c2lnbmxfbGliPSItbGMiCisrICAgIGlmIEFDX1RSWV9DT01NQU5EKCR7Q0MtY2N9IC1TIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QucyAxPiZBU19NRVNTQUdFX0xPR19GRCkKKysgICAgdGhlbgorKwlsaWJnY2NfY3ZfY29weXNpZ25sX2xpYj0iLWxtIgorKyAgICBmaQorKyAgICBybSAtZiBjb25mdGVzdC4qCisrICBdKQorKworK2Nhc2UgLyR7bGliZ2NjX2N2X2NvcHlzaWdubF9saWJ9LyBpbgorKyAgLy1sbS8pIExJQkdDQ19MSUJNPSIkTElCR0NDX0xJQk0gLWxtIiA7OworKyAgKikgTElCR0NDX0xJQk09IDs7CisrZXNhYworK0FDX1NVQlNUKExJQkdDQ19MSUJNKQorKworICMgQ29uZGl0aW9uYWxpemUgdGhlIG1ha2VmaWxlIGZvciB0aGlzIHRhcmdldCBtYWNoaW5lLgorIHRtYWtlX2ZpbGVfPQorIGZvciBmIGluICR7dG1ha2VfZmlsZX0KK2RpZmYgLXJkdXAgZ2NjLTQuNC4wLm9sZC9saWJnY2MvTWFrZWZpbGUuaW4gZ2NjLTQuNC4wL2xpYmdjYy9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjQuMC5vbGQvbGliZ2NjL01ha2VmaWxlLmluCTIwMDgtMDctMTcgMTA6NDA6NTMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2xpYmdjYy9NYWtlZmlsZS5pbgkyMDA4LTEwLTA3IDE5OjI4OjEzLjAwMDAwMDAwMCArMDIwMAorQEAgLTQwLDYgKzQwLDcgQEAgZW5hYmxlX3NoYXJlZCA9IEBlbmFibGVfc2hhcmVkQAorIGRlY2ltYWxfZmxvYXQgPSBAZGVjaW1hbF9mbG9hdEAKKyBlbmFibGVfZGVjaW1hbF9mbG9hdCA9IEBlbmFibGVfZGVjaW1hbF9mbG9hdEAKKyBmaXhlZF9wb2ludCA9IEBmaXhlZF9wb2ludEAKKytMSUJHQ0NfTElCTSA9IEBMSUJHQ0NfTElCTUAKKyAKKyBob3N0X25vbmNhbm9uaWNhbCA9IEBob3N0X25vbmNhbm9uaWNhbEAKKyAKK0BAIC03ODYsOSArNzg3LDEwIEBAIGxpYmdjY19zJChTSExJQl9FWFQpOiAkKGxpYmdjYy1zLW9iamVjdHMKKyAJCUBtdWx0aWxpYl9kaXJALCQoTVVMVElESVIpLCQoc3Vic3QgXAorIAkJQHNobGliX29ianNALCQob2JqZWN0cyksJChzdWJzdCBcCisgCQlAc2hsaWJfYmFzZV9uYW1lQCxsaWJnY2NfcywkKHN1YnN0IFwKKysJCUBsaWJnY2NfbGlibUAsJChMSUJHQ0NfTElCTSksJChzdWJzdCBcCisgCQlAc2hsaWJfbWFwX2ZpbGVALCQobWFwZmlsZSksJChzdWJzdCBcCisgCQlAc2hsaWJfc2xpYmRpcl9xdWFsQCwkKE1VTFRJT1NTVUJESVIpLCQoc3Vic3QgXAorLQkJQHNobGliX3NsaWJkaXJALCQoc2hsaWJfc2xpYmRpciksJChTSExJQl9MSU5LKSkpKSkpKSkKKysJCUBzaGxpYl9zbGliZGlyQCwkKHNobGliX3NsaWJkaXIpLCQoU0hMSUJfTElOSykpKSkpKSkpKQorIAorIGxpYnVud2luZCQoU0hMSUJfRVhUKTogJChsaWJ1bndpbmQtcy1vYmplY3RzKSAkKGV4dHJhLXBhcnRzKQorIAkjIEBtdWx0aWxpYl9mbGFnc0AgaXMgc3RpbGwgbmVlZGVkIGJlY2F1c2UgdGhpcyBtYXkgdXNlCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzM5MC1hcm0tc29mdGZsb2F0LWxpYmdjYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvMzkwLWFybS1zb2Z0ZmxvYXQtbGliZ2NjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YTMwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzM5MC1hcm0tc29mdGZsb2F0LWxpYmdjYy5wYXRjaApAQCAtMCwwICsxLDM4IEBACitbUEFUQ0hdIGFkZCB0aGUgY29ycmVjdCBzeW1ib2xzIHRvIGxpYmdjYyBmb3IgdWNsaWJjIGFybSBzb2Z0ZmxvYXQKKworU2lnbmVkLW9mZi1ieTogUGV0ZXIgS29yc2dhYXJkIDxqYWNtZXRAc3Vuc2l0ZS5kaz4KKy0tLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oIHwgICAgMiArLQorIGdjYy9jb25maWcvYXJtL3QtbGludXggICAgIHwgICAgNiArKysrKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdjYy00LjQuMC9nY2MvY29uZmlnL2FybS90LWxpbnV4Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9hcm0vdC1saW51eAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL2FybS90LWxpbnV4CitAQCAtNCw3ICs0LDExIEBACisgCisgTElCMUFTTVNSQyA9IGFybS9saWIxZnVuY3MuYXNtCisgTElCMUFTTUZVTkNTID0gX3VkaXZzaTMgX2RpdnNpMyBfdW1vZHNpMyBfbW9kc2kzIF9kdm1kX2xueCBfY2x6c2kyIF9jbHpkaTIgXAorLQlfYXJtX2FkZHN1YmRmMyBfYXJtX2FkZHN1YnNmMworKwlfYXJtX2FkZHN1YmRmMyBfYXJtX2FkZHN1YnNmMyBcCisrCV9hcm1fbmVnZGYyIF9hcm1fbXVsZGl2ZGYzIF9hcm1fY21wZGYyIF9hcm1fdW5vcmRkZjIgXAorKwlfYXJtX2ZpeGRmc2kgX2FybV9maXh1bnNkZnNpIF9hcm1fdHJ1bmNkZnNmMiBcCisrCV9hcm1fbmVnc2YyIF9hcm1fbXVsZGl2c2YzIF9hcm1fY21wc2YyIF9hcm1fdW5vcmRzZjIgXAorKwlfYXJtX2ZpeHNmc2kgX2FybV9maXh1bnNzZnNpCisgCisgIyBNVUxUSUxJQl9PUFRJT05TID0gbWhhcmQtZmxvYXQvbXNvZnQtZmxvYXQKKyAjIE1VTFRJTElCX0RJUk5BTUVTID0gaGFyZC1mbG9hdCBzb2Z0LWZsb2F0CitJbmRleDogZ2NjLTQuNC4wL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKK0BAIC02MCw3ICs2MCw3IEBACisgICAgJXtzaGFyZWQ6LWxjfSBcCisgICAgJXshc2hhcmVkOiV7cHJvZmlsZTotbGNfcH0leyFwcm9maWxlOi1sY319IgorIAorLSNkZWZpbmUgTElCR0NDX1NQRUMgIiV7bXNvZnQtZmxvYXQ6LWxmbG9hdH0gJXttZmxvYXQtYWJpPXNvZnQqOi1sZmxvYXR9IC1sZ2NjIgorKyNkZWZpbmUgTElCR0NDX1NQRUMgIi1sZ2NjIgorIAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvNDAwLXByNDIyODktZml4LWxpYmZmaS1idWlsZC1vbi1hcm0tb2FiaS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvNDAwLXByNDIyODktZml4LWxpYmZmaS1idWlsZC1vbi1hcm0tb2FiaS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjU0ODc5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMC80MDAtcHI0MjI4OS1maXgtbGliZmZpLWJ1aWxkLW9uLWFybS1vYWJpLnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKKy0tLSBnY2MtNC4zLjQvbGliZmZpL3NyYy9hcm0vc3lzdi5TCQorKysrIGdjYy00LjMuNC9saWJmZmkvc3JjL2FybS9zeXN2LlMJCitAQCAtMjM1LDcgKzIzNSw3IEBAIEFSTV9GVU5DX1NUQVJUIGZmaV9jbG9zdXJlX1NZU1YKKyAJc3RtZmQJc3AhLCB7aXAsIGxyfQorIAlVTldJTkQgLnNhdmUJe3IwLCBscn0KKyAJYWRkCXIyLCBzcCwgIzgKKy0JLnBhZCAjMTYKKysJVU5XSU5EIC5wYWQgIzE2CisgCXN1YglzcCwgc3AsICMxNgorIAlzdHIJc3AsIFtzcCwgIzhdCisgCWFkZAlyMSwgc3AsICM4CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzQxMC1saWJnY2NfZWguYS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjAvNDEwLWxpYmdjY19laC5hLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NTMyNjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4wLzQxMC1saWJnY2NfZWguYS5wYXRjaApAQCAtMCwwICsxLDM5IEBACitIaWdobHkgaW5zcGlyZWQgYnk6CisgIGh0dHA6Ly9sYW5kbGV5Lm5ldC9oZy9hYm9yaWdpbmFsL2ZpbGUvN2UwNzQ3YTY2NWFiL3NvdXJjZXMvcGF0Y2hlcy9nY2MtY29yZS1saWJnY2NlaC5wYXRjaAorCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2xpYmdjYy9NYWtlZmlsZS5pbiBnY2MtNC40LjAvbGliZ2NjL01ha2VmaWxlLmluCistLS0gZ2NjLTQuNC4wLm9yaWcvbGliZ2NjL01ha2VmaWxlLmluCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2xpYmdjYy9NYWtlZmlsZS5pbgkyMDExLTA5LTEyIDE3OjA1OjI1LjEyMTEyNDU1OSArMDIwMAorQEAgLTc1NCw4ICs3NTQsOSBAQAorIGxpYmdjY19zJChTSExJQl9FWFQpOiBsaWJ1bndpbmQkKFNITElCX0VYVCkKKyBlbmRpZgorIAorK2FsbDogbGliZ2NjX2VoLmEKKyBpZmVxICgkKGVuYWJsZV9zaGFyZWQpLHllcykKKy1hbGw6IGxpYmdjY19laC5hIGxpYmdjY19zJChTSExJQl9FWFQpCisrYWxsOiBsaWJnY2NfcyQoU0hMSUJfRVhUKQorIGlmbmVxICgkKExJQlVOV0lORCksKQorIGFsbDogbGlidW53aW5kJChTSExJQl9FWFQpCisgZW5kaWYKK0BAIC05MjQsMTAgKzkyNSw2IEBACisgaW5zdGFsbC1zaGFyZWQ6CisgCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQoaW5zdF9saWJkaXIpCisgCistCSQoSU5TVEFMTF9EQVRBKSBsaWJnY2NfZWguYSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvCistCWNobW9kIDY0NCAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKy0JJChSQU5MSUIpICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY2NfZWguYQorLQorIAkkKHN1YnN0IEBtdWx0aWxpYl9kaXJALCQoTVVMVElESVIpLCQoc3Vic3QgXAorIAkJQHNobGliX2Jhc2VfbmFtZUAsbGliZ2NjX3MsJChzdWJzdCBcCisgCQlAc2hsaWJfc2xpYmRpcl9xdWFsQCwkKE1VTFRJT1NTVUJESVIpLCQoU0hMSUJfSU5TVEFMTCkpKSkKK0BAIC05NDIsNiArOTM5LDEwIEBACisgCWNobW9kIDY0NCAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2Nvdi5hCisgCSQoUkFOTElCKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2Nvdi5hCisgCisrCSQoSU5TVEFMTF9EQVRBKSBsaWJnY2NfZWguYSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvCisrCWNobW9kIDY0NCAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKysJJChSQU5MSUIpICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY2NfZWguYQorKworIAlwYXJ0cz0iJChJTlNUQUxMX1BBUlRTKSI7CQkJCVwKKyAJZm9yIGZpbGUgaW4gJCRwYXJ0czsgZG8JCQkJCVwKKyAJICBybSAtZiAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvJCRmaWxlOwkJXApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8xMDAtYWxwaGEtbWllZWUtZGVmYXVsdC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMTAwLWFscGhhLW1pZWVlLWRlZmF1bHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NmMGRjNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMTAwLWFscGhhLW1pZWVlLWRlZmF1bHQucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2FscGhhL2FscGhhLmggZ2NjLTQuNC4wL2djYy9jb25maWcvYWxwaGEvYWxwaGEuaAorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvYWxwaGEvYWxwaGEuaAkyMDA5LTAyLTIwIDE2OjIwOjM4LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL2FscGhhL2FscGhhLmgJMjAwOS0wNS0yNyAyMTozNzo1OC4wMDAwMDAwMDAgKzAyMDAKK0BAIC05NSw2ICs5NSw4IEBACisgICB3aGlsZSAoMCkKKyAjZW5kaWYKKyAKKysjZGVmaW5lIENQUF9TUEVDICIleyFuby1pZWVlOi1taWVlZX0iCisrCisgI2RlZmluZSBXT1JEX1NXSVRDSF9UQUtFU19BUkcoU1RSKQkJXAorICAoIXN0cmNtcCAoU1RSLCAicnBhdGgiKSB8fCBERUZBVUxUX1dPUkRfU1dJVENIX1RBS0VTX0FSRyhTVFIpKQorIAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2FscGhhL2FscGhhLm9wdCBnY2MtNC40LjAvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5vcHQKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2FscGhhL2FscGhhLm9wdAkyMDA3LTA4LTAyIDEyOjQ5OjMxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL2FscGhhL2FscGhhLm9wdAkyMDA5LTA1LTI3IDIxOjM3OjU4LjAwMDAwMDAwMCArMDIwMAorQEAgLTM5LDcgKzM5LDcgQEAKKyBSZXF1ZXN0IElFRUUtY29uZm9ybWFudCBtYXRoIGxpYnJhcnkgcm91dGluZXMgKE9TRi8xKQorIAorIG1pZWVlCistVGFyZ2V0IFJlcG9ydCBSZWplY3ROZWdhdGl2ZSBNYXNrKElFRUUpCisrVGFyZ2V0IFJlcG9ydCBNYXNrKElFRUUpCisgRW1pdCBJRUVFLWNvbmZvcm1hbnQgY29kZSwgd2l0aG91dCBpbmV4YWN0IGV4Y2VwdGlvbnMKKyAKKyBtaWVlZS13aXRoLWluZXhhY3QKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMTEwLXRyYW1wb2xpbmV3YXJuLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8xMTAtdHJhbXBvbGluZXdhcm4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNlZjQ5OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMTEwLXRyYW1wb2xpbmV3YXJuLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2J1aWx0aW5zLmMgZ2NjLTQuNC4wL2djYy9idWlsdGlucy5jCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2J1aWx0aW5zLmMJMjAwOS0wMy0zMCAxOTo0MjoyNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL2J1aWx0aW5zLmMJMjAwOS0wNS0yNyAyMTozODowMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC01NzY4LDYgKzU3NjgsOSBAQAorICAgdHJhbXBvbGluZXNfY3JlYXRlZCA9IDE7CisgICBJTklUSUFMSVpFX1RSQU1QT0xJTkUgKHJfdHJhbXAsIHJfZnVuYywgcl9jaGFpbik7CisgCisrICBpZiAod2Fybl90cmFtcG9saW5lcykKKysgICAgd2FybmluZyAoT1BUX1d0cmFtcG9saW5lcywgImdlbmVyYXRpbmcgdHJhbXBvbGluZSBpbiBvYmplY3QgKHJlcXVpcmVzIGV4ZWN1dGFibGUgc3RhY2spIik7CisrCisgICByZXR1cm4gY29uc3QwX3J0eDsKKyB9CisgCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb21tb24ub3B0IGdjYy00LjQuMC9nY2MvY29tbW9uLm9wdAorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb21tb24ub3B0CTIwMDktMDMtMjggMTg6Mjg6NDUuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC4wL2djYy9jb21tb24ub3B0CTIwMDktMDUtMjcgMjE6Mzg6MDEuMDAwMDAwMDAwICswMjAwCitAQCAtMTk3LDYgKzE5NywxMCBAQAorIENvbW1vbiBWYXIod2Fybl90eXBlX2xpbWl0cykgSW5pdCgtMSkgV2FybmluZworIFdhcm4gaWYgYSBjb21wYXJpc29uIGlzIGFsd2F5cyB0cnVlIG9yIGFsd2F5cyBmYWxzZSBkdWUgdG8gdGhlIGxpbWl0ZWQgcmFuZ2Ugb2YgdGhlIGRhdGEgdHlwZQorIAorK1d0cmFtcG9saW5lcworK0NvbW1vbiBWYXIod2Fybl90cmFtcG9saW5lcykgSW5pdCgxKQorK1dhcm4gd2hlbmV2ZXIgYSB0cmFtcG9saW5lIGlzIGdlbmVyYXRlZAorKworIFd1bmluaXRpYWxpemVkCisgQ29tbW9uIFZhcih3YXJuX3VuaW5pdGlhbGl6ZWQpIFdhcm5pbmcKKyBXYXJuIGFib3V0IHVuaW5pdGlhbGl6ZWQgYXV0b21hdGljIHZhcmlhYmxlcwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8xMjAtamF2YS1ub211bHRpLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8xMjAtamF2YS1ub211bHRpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NTQ3OWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4xLzEyMC1qYXZhLW5vbXVsdGkucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9saWJqYXZhL2NvbmZpZ3VyZSBnY2MtNC40LjAvbGliamF2YS9jb25maWd1cmUKKy0tLSBnY2MtNC40LjAub3JpZy9saWJqYXZhL2NvbmZpZ3VyZQkyMDA5LTA0LTIxIDExOjA4OjA4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9saWJqYXZhL2NvbmZpZ3VyZQkyMDA5LTA1LTI3IDIxOjM4OjAzLjAwMDAwMDAwMCArMDIwMAorQEAgLTEwMjEsNiArMTAyMSw4IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PXllcworICAgLS1lbmFibGUtamF2YS1tYWludGFpbmVyLW1vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93IHJlYnVpbGRpbmcgb2YgLmNsYXNzIGFuZCAuaCBmaWxlcworKyAgLS1lbmFibGUtbGliamF2YS1tdWx0aWxpYgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgbGliamF2YSBhcyBtdWx0aWxpYgorICAgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgIHNwZWVkcyB1cCBvbmUtdGltZSBidWlsZAorICAgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyAgIGRvIG5vdCByZWplY3Qgc2xvdyBkZXBlbmRlbmN5IGV4dHJhY3RvcnMKKyAgIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSAgZW5hYmxlIG1ha2UgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBub3QgdXNlZnVsCitAQCAtMTk3Myw2ICsxOTc1LDE2IEBACisgZmkKKyAKKyAKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGliamF2YS1tdWx0aWxpYiB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfbGliamF2YV9tdWx0aWxpYitzZXR9IiA9IHNldDsgdGhlbgorKyAgZW5hYmxldmFsPSRlbmFibGVfbGliamF2YV9tdWx0aWxpYjsKKytmaQorKworK2lmIHRlc3QgIiRlbmFibGVfbGliamF2YV9tdWx0aWxpYiIgPSBubzsgdGhlbgorKyAgbXVsdGlsaWI9bm8KKysgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1kaXNhYmxlLW11bHRpbGliIgorK2ZpCisrCisgIyBJdCBtYXkgbm90IGJlIHNhZmUgdG8gcnVuIGxpbmtpbmcgdGVzdHMgaW4gQUNfUFJPR19DQy9BQ19QUk9HX0NYWC4KKyAKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvbGliamF2YS9jb25maWd1cmUuYWMgZ2NjLTQuNC4wL2xpYmphdmEvY29uZmlndXJlLmFjCistLS0gZ2NjLTQuNC4wLm9yaWcvbGliamF2YS9jb25maWd1cmUuYWMJMjAwOS0wNC0wOSAyMzo1NDoyOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvbGliamF2YS9jb25maWd1cmUuYWMJMjAwOS0wNS0yNyAyMTozODowMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMzksNiArMTM5LDEzIEBACisgCVthbGxvdyByZWJ1aWxkaW5nIG9mIC5jbGFzcyBhbmQgLmggZmlsZXNdKSkKKyBBTV9DT05ESVRJT05BTChKQVZBX01BSU5UQUlORVJfTU9ERSwgdGVzdCAiJGVuYWJsZV9qYXZhX21haW50YWluZXJfbW9kZSIgPSB5ZXMpCisgCisrQUNfQVJHX0VOQUJMRShsaWJqYXZhLW11bHRpbGliLAorKwlBU19IRUxQX1NUUklORyhbLS1lbmFibGUtbGliamF2YS1tdWx0aWxpYl0sIFtidWlsZCBsaWJqYXZhIGFzIG11bHRpbGliXSkpCisraWYgdGVzdCAiJGVuYWJsZV9saWJqYXZhX211bHRpbGliIiA9IG5vOyB0aGVuCisrICBtdWx0aWxpYj1ubworKyAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAtLWRpc2FibGUtbXVsdGlsaWIiCisrZmkKKysKKyAjIEl0IG1heSBub3QgYmUgc2FmZSB0byBydW4gbGlua2luZyB0ZXN0cyBpbiBBQ19QUk9HX0NDL0FDX1BST0dfQ1hYLgorIEdDQ19OT19FWEVDVVRBQkxFUworIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8xMzAtY3Jvc3MtY29tcGlsZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMTMwLWNyb3NzLWNvbXBpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZmZTdjOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMTMwLWNyb3NzLWNvbXBpbGUucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlndXJlIGdjYy00LjQuMC9nY2MvY29uZmlndXJlCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZ3VyZQkyMDA5LTAzLTI0IDE4OjQ2OjAzLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlndXJlCTIwMDktMDUtMjcgMjE6Mzg6MDYuMDAwMDAwMDAwICswMjAwCitAQCAtMTM5OTcsNyArMTM5OTcsNyBAQAorIAkgICAgfCBwb3dlcnBjKi0qLSoscG93ZXJwYzY0Ki0qLSopCisgCQlDUk9TUz0iJENST1NTIC1ETkFUSVZFX0NST1NTIiA7OworIAllc2FjCistZWxpZiB0ZXN0ICJ4JFRBUkdFVF9TWVNURU1fUk9PVCIgIT0geDsgdGhlbgorK2VsaWYgdGVzdCAieCRUQVJHRVRfU1lTVEVNX1JPT1QiICE9IHggLW8gJGJ1aWxkICE9ICRob3N0OyB0aGVuCisgICAgICAgICBTWVNURU1fSEVBREVSX0RJUj0kYnVpbGRfc3lzdGVtX2hlYWRlcl9kaXIKKyBmaQorIAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlndXJlLmFjIGdjYy00LjQuMC9nY2MvY29uZmlndXJlLmFjCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYwkyMDA5LTAzLTI0IDE4OjQ2OjAzLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlndXJlLmFjCTIwMDktMDUtMjcgMjE6Mzg6MDYuMDAwMDAwMDAwICswMjAwCitAQCAtMTcyMCw3ICsxNzIwLDcgQEAKKyAJICAgIHwgcG93ZXJwYyotKi0qLHBvd2VycGM2NCotKi0qKQorIAkJQ1JPU1M9IiRDUk9TUyAtRE5BVElWRV9DUk9TUyIgOzsKKyAJZXNhYworLWVsaWYgdGVzdCAieCRUQVJHRVRfU1lTVEVNX1JPT1QiICE9IHg7IHRoZW4KKytlbGlmIHRlc3QgIngkVEFSR0VUX1NZU1RFTV9ST09UIiAhPSB4IC1vICRidWlsZCAhPSAkaG9zdDsgdGhlbgorICAgICAgICAgU1lTVEVNX0hFQURFUl9ESVI9JGJ1aWxkX3N5c3RlbV9oZWFkZXJfZGlyIAorIGZpCisgCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy91bndpbmQtZHcyLmMgZ2NjLTQuNC4wL2djYy91bndpbmQtZHcyLmMKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvdW53aW5kLWR3Mi5jCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy91bndpbmQtZHcyLmMJMjAwOS0wNS0yNyAyMTozODowNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMjksOSArMzI5LDExIEBACisgfQorICNlbmRpZgorIAorKyNpZm5kZWYgaW5oaWJpdF9saWJjCisgI2lmZGVmIE1EX1VOV0lORF9TVVBQT1JUCisgI2luY2x1ZGUgTURfVU5XSU5EX1NVUFBPUlQKKyAjZW5kaWYKKysjZW5kaWYKKyAMCisgLyogRXh0cmFjdCBhbnkgaW50ZXJlc3RpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgQ0lFIGZvciB0aGUgdHJhbnNsYXRpb24KKyAgICB1bml0IEYgYmVsb25ncyB0by4gIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGJ5dGUgYWZ0ZXIgdGhlIGF1Z21lbnRhdGlvbiwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMTQwLWRlZmF1bHQtZm9ybWF0LXNlY3VyaXR5LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8xNDAtZGVmYXVsdC1mb3JtYXQtc2VjdXJpdHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE5NDJmNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMTQwLWRlZmF1bHQtZm9ybWF0LXNlY3VyaXR5LnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2MtY29tbW9uLmMgZ2NjLTQuNC4wL2djYy9jLWNvbW1vbi5jCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2MtY29tbW9uLmMJMjAwOS0wMy0zMCAxOTo0MjoyNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL2MtY29tbW9uLmMJMjAwOS0wNS0yNyAyMTozODowOC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMDEsNyArMzAxLDcgQEAKKyAvKiBXYXJuIGFib3V0IGZvcm1hdC9hcmd1bWVudCBhbm9tYWxpZXMgaW4gY2FsbHMgdG8gZm9ybWF0dGVkIEkvTyBmdW5jdGlvbnMKKyAgICAoKnByaW50ZiwgKnNjYW5mLCBzdHJmdGltZSwgc3RyZm1vbiwgZXRjLikuICAqLworIAorLWludCB3YXJuX2Zvcm1hdDsKKytpbnQgd2Fybl9mb3JtYXQgPSAxOworIAorIC8qIFdhcm4gYWJvdXQgdXNpbmcgX19udWxsIChhcyBOVUxMIGluIEMrKykgYXMgc2VudGluZWwuICBGb3IgY29kZSBjb21waWxlZAorICAgIHdpdGggR0NDIHRoaXMgZG9lc24ndCBtYXR0ZXIgYXMgX19udWxsIGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSB0aGUgcmlnaHQKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2Mub3B0IGdjYy00LjQuMC9nY2MvYy5vcHQKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvYy5vcHQJMjAwOS0wMy0xOCAyMjoxNDo1My4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC40LjAvZ2NjL2Mub3B0CTIwMDktMDUtMjcgMjE6Mzg6MDguMDAwMDAwMDAwICswMjAwCitAQCAtMjM2LDcgKzIzNiw3IEBACisgV2FybiBhYm91dCBmb3JtYXQgc3RyaW5ncyB0aGF0IGNvbnRhaW4gTlVMIGJ5dGVzCisgCisgV2Zvcm1hdC1zZWN1cml0eQorLUMgT2JqQyBDKysgT2JqQysrIFZhcih3YXJuX2Zvcm1hdF9zZWN1cml0eSkgV2FybmluZworK0MgT2JqQyBDKysgT2JqQysrIFZhcih3YXJuX2Zvcm1hdF9zZWN1cml0eSkgSW5pdCgxKSBXYXJuaW5nCisgV2FybiBhYm91dCBwb3NzaWJsZSBzZWN1cml0eSBwcm9ibGVtcyB3aXRoIGZvcm1hdCBmdW5jdGlvbnMKKyAKKyBXZm9ybWF0LXkyaworZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvZG9jL2ludm9rZS50ZXhpIGdjYy00LjQuMC9nY2MvZG9jL2ludm9rZS50ZXhpCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2RvYy9pbnZva2UudGV4aQkyMDA5LTA0LTAxIDA5OjE4OjQ3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvZG9jL2ludm9rZS50ZXhpCTIwMDktMDUtMjcgMjE6Mzg6MDguMDAwMDAwMDAwICswMjAwCitAQCAtMjg2Nyw2ICsyODY3LDkgQEAKKyBAb3B0aW9uey1XZm9ybWF0LW5vbmxpdGVyYWx9LCBAb3B0aW9uey1XZm9ybWF0LXNlY3VyaXR5fSwgYW5kCisgQG9wdGlvbnstV2Zvcm1hdD0yfSBhcmUgYXZhaWxhYmxlLCBidXQgYXJlIG5vdCBpbmNsdWRlZCBpbiBAb3B0aW9uey1XYWxsfS4KKyAKKytOT1RFOiBJbiBHZW50b28sIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBmb3IgQywgQysrLCBPYmpDLCBPYmpDKysuCisrVG8gZGlzYWJsZSwgdXNlIEBvcHRpb257LVdmb3JtYXQ9MH0uCisrCisgQGl0ZW0gLVdmb3JtYXQteTJrCisgQG9waW5kZXggV2Zvcm1hdC15MmsKKyBAb3BpbmRleCBXbm8tZm9ybWF0LXkyaworQEAgLTI5MjAsNiArMjkyMywxMSBAQAorIGluIGZ1dHVyZSB3YXJuaW5ncyBtYXkgYmUgYWRkZWQgdG8gQG9wdGlvbnstV2Zvcm1hdC1zZWN1cml0eX0gdGhhdCBhcmUgbm90CisgaW5jbHVkZWQgaW4gQG9wdGlvbnstV2Zvcm1hdC1ub25saXRlcmFsfS4pCisgCisrTk9URTogSW4gR2VudG9vLCB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgZm9yIEMsIEMrKywgT2JqQywgT2JqQysrLgorK1RvIGRpc2FibGUsIHVzZSBAb3B0aW9uey1Xbm8tZm9ybWF0LXNlY3VyaXR5fSwgb3IgZGlzYWJsZSBhbGwgZm9ybWF0IHdhcm5pbmdzCisrd2l0aCBAb3B0aW9uey1XZm9ybWF0PTB9LiAgVG8gbWFrZSBmb3JtYXQgc2VjdXJpdHkgd2FybmluZ3MgZmF0YWwsIHNwZWNpZnkKKytAb3B0aW9uey1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5fS4KKysKKyBAaXRlbSAtV2Zvcm1hdD0yCisgQG9waW5kZXggV2Zvcm1hdD0yCisgQG9waW5kZXggV25vLWZvcm1hdD0yCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4xLzE1MC1kZWZhdWx0LWZvcnRpZnktc291cmNlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8xNTAtZGVmYXVsdC1mb3J0aWZ5LXNvdXJjZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjgyMjdmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8xNTAtZGVmYXVsdC1mb3J0aWZ5LXNvdXJjZS5wYXRjaApAQCAtMCwwICsxLDI2IEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9kb2MvaW52b2tlLnRleGkgZ2NjLTQuNC4wL2djYy9kb2MvaW52b2tlLnRleGkKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvZG9jL2ludm9rZS50ZXhpCTIwMDktMDUtMjcgMjE6Mzg6MTEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9kb2MvaW52b2tlLnRleGkJMjAwOS0wNS0yNyAyMTozODoxMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC01NDExLDYgKzU0MTEsMTEgQEAKKyBQbGVhc2Ugbm90ZSB0aGUgd2FybmluZyB1bmRlciBAb3B0aW9uey1mZ2NzZX0gYWJvdXQKKyBpbnZva2luZyBAb3B0aW9uey1PMn0gb24gcHJvZ3JhbXMgdGhhdCB1c2UgY29tcHV0ZWQgZ290b3MuCisgCisrTk9URTogSW4gR2VudG9vLCBAb3B0aW9uey1EX0ZPUlRJRllfU09VUkNFPTJ9IGlzIHNldCBieSBkZWZhdWx0LCBhbmQgaXMKKythY3RpdmF0ZWQgd2hlbiBAb3B0aW9uey1PfSBpcyBzZXQgdG8gMiBvciBoaWdoZXIuICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbAorK2NvbXBpbGUtdGltZSBhbmQgcnVuLXRpbWUgY2hlY2tzIGZvciBzZXZlcmFsIGxpYmMgZnVuY3Rpb25zLiAgVG8gZGlzYWJsZSwKKytzcGVjaWZ5IGVpdGhlciBAb3B0aW9uey1VX0ZPUlRJRllfU09VUkNFfSBvciBAb3B0aW9uey1EX0ZPUlRJRllfU09VUkNFPTB9LgorKworIEBpdGVtIC1PMworIEBvcGluZGV4IE8zCisgT3B0aW1pemUgeWV0IG1vcmUuICBAb3B0aW9uey1PM30gdHVybnMgb24gYWxsIG9wdGltaXphdGlvbnMgc3BlY2lmaWVkCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9nY2MuYyBnY2MtNC40LjAvZ2NjL2djYy5jCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2djYy5jCTIwMDktMDMtMTcgMjI6MjU6NTkuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC4wL2djYy9nY2MuYwkyMDA5LTA1LTI3IDIxOjM4OjExLjAwMDAwMDAwMCArMDIwMAorQEAgLTgwNyw2ICs4MDcsNyBAQAorICAle0h9ICVDICV7RComVSomQSp9ICV7aSp9ICVaICVpXAorICAle2ZtdWRmbGFwOi1EX01VREZMQVAgLWluY2x1ZGUgbWYtcnVudGltZS5ofVwKKyAgJXtmbXVkZmxhcHRoOi1EX01VREZMQVAgLURfTVVERkxBUFRIIC1pbmNsdWRlIG1mLXJ1bnRpbWUuaH1cCisrICV7IURfRk9SVElGWV9TT1VSQ0U6JXshRF9GT1JUSUZZX1NPVVJDRT0qOiV7IVVfRk9SVElGWV9TT1VSQ0U6LURfRk9SVElGWV9TT1VSQ0U9Mn19fVwKKyAgJXtFfE18TU06JVd7byp9fSI7CisgCisgLyogVGhpcyBjb250YWlucyBjcHAgb3B0aW9ucyB3aGljaCBhcmUgY29tbW9uIHdpdGggY2MxX29wdGlvbnMgYW5kIGFyZSBwYXNzZWQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMTYwLW5ldGJzZC1zeW1ib2xpYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMTYwLW5ldGJzZC1zeW1ib2xpYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTFmMWNiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8xNjAtbmV0YnNkLXN5bWJvbGljLnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9uZXRic2QtZWxmLmggZ2NjLTQuNC4wL2djYy9jb25maWcvbmV0YnNkLWVsZi5oCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9uZXRic2QtZWxmLmgJMjAwNy0wOS0wMyAxODoxNDowNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy9uZXRic2QtZWxmLmgJMjAwOS0wNS0yNyAyMTozODoxNC4wMDAwMDAwMDAgKzAyMDAKK0BAIC04Miw2ICs4Miw3IEBACisgI2RlZmluZSBORVRCU0RfTElOS19TUEVDX0VMRiBcCisgICAiJXthc3NlcnQqfSAle1IqfSAle3JwYXRoKn0gXAorICAgICV7c2hhcmVkOi1zaGFyZWR9IFwKKysgICAle3N5bWJvbGljOi1Cc3ltYm9saWN9IFwKKyAgICAleyFzaGFyZWQ6IFwKKyAgICAgIC1kYyAtZHAgXAorICAgICAgJXshbm9zdGRsaWI6IFwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMTcwLXNwYXJjNjQtYnNkLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8xNzAtc3BhcmM2NC1ic2QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlhNWVlYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMTcwLXNwYXJjNjQtYnNkLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9zcGFyYy9mcmVlYnNkLmggZ2NjLTQuNC4wL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9zcGFyYy9mcmVlYnNkLmgJMjAwNy0wOC0wMiAxMjo0OTozMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy9zcGFyYy9mcmVlYnNkLmgJMjAwOS0wNS0yNyAyMTozODoxNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNSw5ICsyNSwyMiBAQAorIC8qIEZyZWVCU0QgbmVlZHMgdGhlIHBsYXRmb3JtIG5hbWUgKHNwYXJjNjQpIGRlZmluZWQuCisgICAgRW1hY3MgbmVlZHMgdG8ga25vdyBpZiB0aGUgYXJjaCBpcyA2NCBvciAzMi1iaXRzLiAgKi8KKyAKKy0jdW5kZWYgIENQUF9DUFU2NF9ERUZBVUxUX1NQRUMKKy0jZGVmaW5lIENQUF9DUFU2NF9ERUZBVUxUX1NQRUMgXAorLSAgIi1EX19zcGFyYzY0X18gLURfX3NwYXJjX3Y5X18gLURfX3NwYXJjdjkgLURfX2FyY2g2NF9fIgorKyN1bmRlZiAgRkJTRF9UQVJHRVRfQ1BVX0NQUF9CVUlMVElOUworKyNkZWZpbmUgRkJTRF9UQVJHRVRfQ1BVX0NQUF9CVUlMVElOUygpICAgICAgICAgICAgICAgICAgXAorKyAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGlmIChUQVJHRVRfQVJDSDY0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBidWlsdGluX2RlZmluZSAoIl9fc3BhcmM2NF9fIik7ICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBidWlsdGluX2RlZmluZSAoIl9fc3BhcmNfdjlfXyIpOyAgICAgICAgICAgICAgXAorKyAgICAgICAgICBidWlsdGluX2RlZmluZSAoIl9fc3BhcmN2OSIpOyAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjIik7ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19zcGFyY19fIik7ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgd2hpbGUgKDApCisrCisgCisgI2RlZmluZSBMSU5LX1NQRUMgIiUobGlua19hcmNoKQkJCQkJCVwKKyAgICV7IW1uby1yZWxheDoleyFyOi1yZWxheH19CQkJCQkJXApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8xODAtbGliZ29tcC1uby13ZXJyb3IucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4xLzE4MC1saWJnb21wLW5vLXdlcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDJhZGYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8xODAtbGliZ29tcC1uby13ZXJyb3IucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9saWJnb21wL2NvbmZpZ3VyZSBnY2MtNC40LjAvbGliZ29tcC9jb25maWd1cmUKKy0tLSBnY2MtNC40LjAub3JpZy9saWJnb21wL2NvbmZpZ3VyZQkyMDA5LTA0LTIxIDExOjA4OjA4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9saWJnb21wL2NvbmZpZ3VyZQkyMDA5LTA1LTI3IDIxOjM4OjE5LjAwMDAwMDAwMCArMDIwMAorQEAgLTMzMzQsNyArMzMzNCw3IEBACisgCisgIyBBZGQgLVdhbGwgLVdlcnJvciBpZiB3ZSBhcmUgdXNpbmcgR0NDLgorIGlmIHRlc3QgIngkR0NDIiA9ICJ4eWVzIjsgdGhlbgorLSAgWENGTEFHUz0iJFhDRkxBR1MgLVdhbGwgLVdlcnJvciIKKysgIFhDRkxBR1M9IiRYQ0ZMQUdTIC1XYWxsIgorIGZpCisgCisgIyBGaW5kIG90aGVyIHByb2dyYW1zIHdlIG5lZWQuCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4xLzE5MC1mbGF0dGVuLXN3aXRjaC1zdG10LTAwLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8xOTAtZmxhdHRlbi1zd2l0Y2gtc3RtdC0wMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGIxY2NjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8xOTAtZmxhdHRlbi1zd2l0Y2gtc3RtdC0wMC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9zdG10LmMgZ2NjLTQuNC4wL2djYy9zdG10LmMKKy0tLSBnY2MtNC40LjAub3JpZy9nY2Mvc3RtdC5jCTIwMDktMDItMjcgMjA6NDk6NDIuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC4wL2djYy9zdG10LmMJMjAwOS0wNS0yNyAyMTozODoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMzc2LDcgKzIzNzYsMTEgQEAKKyAJICB1c2VfY29zdF90YWJsZQorIAkgICAgPSAoVFJFRV9DT0RFIChvcmlnX3R5cGUpICE9IEVOVU1FUkFMX1RZUEUKKyAJICAgICAgICYmIGVzdGltYXRlX2Nhc2VfY29zdHMgKGNhc2VfbGlzdCkpOworLQkgIGJhbGFuY2VfY2FzZV9ub2RlcyAoJmNhc2VfbGlzdCwgTlVMTCk7CisrCSAgLyogV2hlbiBvcHRpbWl6aW5nIGZvciBzaXplLCB3ZSB3YW50IGEgc3RyYWlnaHQgbGlzdCB0byBhdm9pZAorKwkgICAgIGp1bXBzIGFzIG11Y2ggYXMgcG9zc2libGUuIFRoaXMgYmFzaWNhbGx5IGNyZWF0ZXMgYW4gaWYtZWxzZQorKwkgICAgIGNoYWluLiAgKi8KKysJICBpZiAoIW9wdGltaXplX3NpemUpCisrCSAgICBiYWxhbmNlX2Nhc2Vfbm9kZXMgKCZjYXNlX2xpc3QsIE5VTEwpOworIAkgIGVtaXRfY2FzZV9ub2RlcyAoaW5kZXgsIGNhc2VfbGlzdCwgZGVmYXVsdF9sYWJlbCwgaW5kZXhfdHlwZSk7CisgCSAgaWYgKGRlZmF1bHRfbGFiZWwpCisgCSAgICBlbWl0X2p1bXAgKGRlZmF1bHRfbGFiZWwpOworQEAgLTI5NDIsNiArMjk0Niw3IEBACisgCSAgICB7CisgCSAgICAgIGlmICghbm9kZV9oYXNfbG93X2JvdW5kIChub2RlLCBpbmRleF90eXBlKSkKKyAJCXsKKysJCSAgaWYgKCFvcHRpbWl6ZV9zaXplKSAvKiBkb24ndCBqbCB0byB0aGUgLmRlZmF1bHRfbGFiZWwuICovCisgCQkgIGVtaXRfY21wX2FuZF9qdW1wX2luc25zIChpbmRleCwKKyAJCQkJCSAgIGNvbnZlcnRfbW9kZXMKKyAJCQkJCSAgIChtb2RlLCBpbW9kZSwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMjAwLWxpYmliZXJ0eS5oLWFzcHJpbnRmLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8yMDAtbGliaWJlcnR5LmgtYXNwcmludGYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI3ODRiZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMjAwLWxpYmliZXJ0eS5oLWFzcHJpbnRmLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvaW5jbHVkZS9saWJpYmVydHkuaCBnY2MtNC40LjAvaW5jbHVkZS9saWJpYmVydHkuaAorLS0tIGdjYy00LjQuMC5vcmlnL2luY2x1ZGUvbGliaWJlcnR5LmgJMjAwOC0wNi0yNCAwMzo0MjozMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvaW5jbHVkZS9saWJpYmVydHkuaAkyMDA5LTA1LTI3IDIxOjM4OjI0LjAwMDAwMDAwMCArMDIwMAorQEAgLTU5NSw4ICs1OTUsMTEgQEAKKyAvKiBMaWtlIHNwcmludGYgYnV0IHByb3ZpZGVzIGEgcG9pbnRlciB0byBtYWxsb2MnZCBzdG9yYWdlLCB3aGljaCBtdXN0CisgICAgYmUgZnJlZWQgYnkgdGhlIGNhbGxlci4gICovCisgCisrLyogYXNwcmludGYgbWF5IGJlIGRlY2xhcmVkIGFzIGEgbWFjcm8gYnkgZ2xpYmMgd2l0aCBfX1VTRV9GT1JUSUZZX0xFVkVMLiAgKi8KKysjaWZuZGVmIGFzcHJpbnRmCisgZXh0ZXJuIGludCBhc3ByaW50ZiAoY2hhciAqKiwgY29uc3QgY2hhciAqLCAuLi4pIEFUVFJJQlVURV9QUklOVEZfMjsKKyAjZW5kaWYKKysjZW5kaWYKKyAKKyAjaWYgIUhBVkVfREVDTF9WQVNQUklOVEYKKyAvKiBMaWtlIHZzcHJpbnRmIGJ1dCBwcm92aWRlcyBhIHBvaW50ZXIgdG8gbWFsbG9jJ2Qgc3RvcmFnZSwgd2hpY2gKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMjEwLWFybS11bmJyZWFrLWFybXY0dC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMjEwLWFybS11bmJyZWFrLWFybXY0dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmVhZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8yMTAtYXJtLXVuYnJlYWstYXJtdjR0LnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oIGdjYy00LjQuMC9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgJMjAwNy0xMS0wOCAxNDo0NDowOS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCTIwMDktMDUtMjcgMjE6Mzg6MjYuMDAwMDAwMDAwICswMjAwCitAQCAtNDQsNyArNDQsNyBAQAorICAgIFRoZSBBUk0xMFRETUkgY29yZSBpcyB0aGUgZGVmYXVsdCBmb3IgYXJtdjV0LCBzbyBzZXQKKyAgICBTVUJUQVJHRVRfQ1BVX0RFRkFVTFQgdG8gYWNoaWV2ZSB0aGlzLiAgKi8KKyAjdW5kZWYgIFNVQlRBUkdFVF9DUFVfREVGQVVMVAorLSNkZWZpbmUgU1VCVEFSR0VUX0NQVV9ERUZBVUxUIFRBUkdFVF9DUFVfYXJtMTB0ZG1pCisrI2RlZmluZSBTVUJUQVJHRVRfQ1BVX0RFRkFVTFQgVEFSR0VUX0NQVV9hcm05dGRtaQorIAorIC8qIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQgaXMgc2V0IGluCisgICAgY29uZmlnLmdjYyBmb3IgYmlnIGVuZGlhbiBjb25maWd1cmF0aW9ucy4gICovCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4xLzIyMC1saWJpYmVydHktcGljLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8yMjAtbGliaWJlcnR5LXBpYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjEzYTRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8yMjAtbGliaWJlcnR5LXBpYy5wYXRjaApAQCAtMCwwICsxLDExIEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2xpYmliZXJ0eS9NYWtlZmlsZS5pbiBnY2MtNC40LjAvbGliaWJlcnR5L01ha2VmaWxlLmluCistLS0gZ2NjLTQuNC4wLm9yaWcvbGliaWJlcnR5L01ha2VmaWxlLmluCTIwMDgtMTAtMjIgMTU6MzA6MTkuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2xpYmliZXJ0eS9NYWtlZmlsZS5pbgkyMDA5LTA1LTI3IDIxOjM4OjI5LjAwMDAwMDAwMCArMDIwMAorQEAgLTIyNyw2ICsyMjcsNyBAQAorIAkgICQoQVIpICQoQVJfRkxBR1MpICQoVEFSR0VUTElCKSBcCisgCSAgICAkKFJFUVVJUkVEX09GSUxFUykgJChFWFRSQV9PRklMRVMpICQoTElCT0JKUyk7IFwKKyAJICAkKFJBTkxJQikgJChUQVJHRVRMSUIpOyBcCisrCSAgY3AgJChUQVJHRVRMSUIpIC4uLyA7IFwKKyAJICBjZCAuLjsgXAorIAllbHNlIHRydWU7IGZpCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4xLzIzMC1zdXBlcmgtZGVmYXVsdC1tdWx0aWxpYi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMjMwLXN1cGVyaC1kZWZhdWx0LW11bHRpbGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNzE5ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4xLzIzMC1zdXBlcmgtZGVmYXVsdC1tdWx0aWxpYi5wYXRjaApAQCAtMCwwICsxLDEyIEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcuZ2NjIGdjYy00LjQuMC9nY2MvY29uZmlnLmdjYworLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcuZ2NjCTIwMDktMDQtMTcgMTM6NTg6NDEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcuZ2NjCTIwMDktMDUtMjcgMjE6Mzg6MzEuMDAwMDAwMDAwICswMjAwCitAQCAtMjEyMSw3ICsyMTIxLDcgQEAKKyAJaWYgdGVzdCB4JHtzaF9tdWx0aWxpYnN9ID0geCA7IHRoZW4KKyAJCWNhc2UgJHt0YXJnZXR9IGluCisgCQlzaDY0LXN1cGVyaC1saW51eCogfCBcCistCQlzaFsxMjM0XSopCXNoX211bHRpbGlicz0ke3NoX2NwdV90YXJnZXR9IDs7CisrCQlzaFsxMjM0XSopCXNoX211bHRpbGlicz1gY2QgJHtzcmNkaXJ9L2NvbmZpZy9zaCA7IGVjaG8gdC1tbGliLXNoWzEtNF0qIHwgc2VkICdzOnQtbWxpYi1zaDosbTpnO3M6IDo6ZydgIDs7CisgCQlzaDY0KiB8IHNoNSopCXNoX211bHRpbGlicz1tNS0zMm1lZGlhLG01LTMybWVkaWEtbm9mcHUsbTUtY29tcGFjdCxtNS1jb21wYWN0LW5vZnB1LG01LTY0bWVkaWEsbTUtNjRtZWRpYS1ub2ZwdSA7OworIAkJc2gtc3VwZXJoLSopCXNoX211bHRpbGlicz1tNCxtNC1zaW5nbGUsbTQtc2luZ2xlLW9ubHksbTQtbm9mcHUgOzsKKyAJCXNoKi0qLWxpbnV4KikJc2hfbXVsdGlsaWJzPW0xLG0zZSxtNCA7OwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8yNDAtbGlic3RkYysrLXBpYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMjQwLWxpYnN0ZGMrKy1waWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk1MWRmYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMjQwLWxpYnN0ZGMrKy1waWMucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmFtIGdjYy00LjQuMC9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmFtCistLS0gZ2NjLTQuNC4wLm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmFtCTIwMDktMDUtMjcgMjE6Mzg6MzQuMDAwMDAwMDAwICswMjAwCitAQCAtMzUxLDYgKzM1MSwxMyBAQAorIAkgICQoT1BUX0xERkxBR1MpICQoU0VDVElPTl9MREZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKExUTERGTEFHUykgLW8gJEAKKyAKKyAKKytpbnN0YWxsLWV4ZWMtbG9jYWw6CisrCXBpY19vYmpzPWBzZWQgLW4gInM6Jzo6ZztzOl5waWNfb2JqZWN0PTo6cCIgKi5sbyB8IGdyZXAgLXYgJ15ub25lJCQnYDsgXAorKwlpZiBbIHgiJCRwaWNfb2JqcyIgIT0geCBdOyB0aGVuIFwKKysJCSQoQVIpIGNydSBsaWJzdGRjKytfcGljLmEgJCRwaWNfb2JqcyAkKHRvcF9idWlsZGRpcikvbGlic3VwYysrLyoubyB8fCBleGl0IDE7IFwKKysJCSQoSU5TVEFMTF9EQVRBKSBsaWJzdGRjKytfcGljLmEgJChERVNURElSKSQodG9vbGV4ZWNsaWJkaXIpIHx8IGV4aXQgMTsgXAorKwlmaQorKworICMgQWRkZWQgYml0cyB0byBidWlsZCBkZWJ1ZyBsaWJyYXJ5LgorIGlmIEdMSUJDWFhfQlVJTERfREVCVUcKKyBhbGwtbG9jYWw6IGJ1aWxkX2RlYnVnCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuaW4gZ2NjLTQuNC4wL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuaW4KKy0tLSBnY2MtNC40LjAub3JpZy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCTIwMDktMDEtMTcgMDM6MDM6MjUuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC4wL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuaW4JMjAwOS0wNS0yNyAyMTozODozNC4wMDAwMDAwMDAgKzAyMDAKK0BAIC03MjYsNyArNzI2LDcgQEAKKyAKKyBpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtZGF0YS1sb2NhbAorIAorLWluc3RhbGwtZXhlYy1hbTogaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTCisraW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLXRvb2xleGVjbGliTFRMSUJSQVJJRVMgaW5zdGFsbC1leGVjLWxvY2FsCisgCisgaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKyAKK0BAIC03NjUsNyArNzY1LDcgQEAKKyAJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAorIAltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisgCXRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtaW5mby1hbSBcCistCXVuaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTCisrCXVuaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTIGluc3RhbGwtZXhlYy1sb2NhbAorIAorIAorICMgU3ltYm9sIHZlcnNpb25pbmcgZm9yIHNoYXJlZCBsaWJyYXJpZXMuCitAQCAtOTQyLDYgKzk0MiwxNCBAQAorIGluc3RhbGxfZGVidWc6CisgCShjZCAke2RlYnVnZGlyfSAmJiAkKE1BS0UpIFwKKyAJdG9vbGV4ZWNsaWJkaXI9JChnbGliY3h4X3Rvb2xleGVjbGliZGlyKS9kZWJ1ZyBpbnN0YWxsKQorKworK2luc3RhbGwtZXhlYy1sb2NhbDoKKysJcGljX29ianM9YHNlZCAtbiAiczonOjpnO3M6XnBpY19vYmplY3Q9OjpwIiAqLmxvIHwgZ3JlcCAtdiAnXm5vbmUkJCdgOyBcCisrCWlmIFsgeCIkJHBpY19vYmpzIiAhPSB4IF07IHRoZW4gXAorKwkJJChBUikgY3J1IGxpYnN0ZGMrK19waWMuYSAkJHBpY19vYmpzICQodG9wX2J1aWxkZGlyKS9saWJzdXBjKysvKi5vIHx8IGV4aXQgMTsgXAorKwkJJChJTlNUQUxMX0RBVEEpIGxpYnN0ZGMrK19waWMuYSAkKERFU1RESVIpJCh0b29sZXhlY2xpYmRpcikgfHwgZXhpdCAxOyBcCisrCWZpCisrCisgIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyAjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKyAuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4xLzI1MC1pYTY0LW5vdGVHTlVzdGFjay5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMjUwLWlhNjQtbm90ZUdOVXN0YWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliODBlNmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4xLzI1MC1pYTY0LW5vdGVHTlVzdGFjay5wYXRjaApAQCAtMCwwICsxLDc5IEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRiZWdpbi5hc20gZ2NjLTQuNC4wL2djYy9jb25maWcvaWE2NC9jcnRiZWdpbi5hc20KKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvaWE2NC9jcnRiZWdpbi5hc20JMjAwOS0wNS0yNyAyMTozODozNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNTIsMyArMjUyLDcgQEAKKyAud2VhayBfX2N4YV9maW5hbGl6ZQorICNlbmRpZgorIC53ZWFrIF9Kdl9SZWdpc3RlckNsYXNzZXMKKysKKysjaWZkZWYgX19saW51eF9fCisrLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrOyAucHJldmlvdXMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGVuZC5hc20gZ2NjLTQuNC4wL2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGVuZC5hc20JMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy9pYTY0L2NydGVuZC5hc20JMjAwOS0wNS0yNyAyMTozODozNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMTksMyArMTE5LDcgQEAKKyAKKyAJYnIucmV0LnNwdGsubWFueSBycAorIAkuZW5kcCBfX2RvX2dsb2JhbF9jdG9yc19hdXgKKysKKysjaWZkZWYgX19saW51eF9fCisrLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrOyAucHJldmlvdXMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGkuYXNtIGdjYy00LjQuMC9nY2MvY29uZmlnL2lhNjQvY3J0aS5hc20KKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0aS5hc20JMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy9pYTY0L2NydGkuYXNtCTIwMDktMDUtMjcgMjE6Mzg6MzcuMDAwMDAwMDAwICswMjAwCitAQCAtNTEsMyArNTEsNyBAQAorIAkuYm9keQorIAorICMgZW5kIG9mIGNydGkuYXNtCisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRuLmFzbSBnY2MtNC40LjAvZ2NjL2NvbmZpZy9pYTY0L2NydG4uYXNtCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydG4uYXNtCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvaWE2NC9jcnRuLmFzbQkyMDA5LTA1LTI3IDIxOjM4OjM3LjAwMDAwMDAwMCArMDIwMAorQEAgLTQxLDMgKzQxLDcgQEAKKyAJYnIucmV0LnNwdGsubWFueSBiMAorIAorICMgZW5kIG9mIGNydG4uYXNtCisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvaWE2NC9saWIxZnVuY3MuYXNtIGdjYy00LjQuMC9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvaWE2NC9saWIxZnVuY3MuYXNtCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvaWE2NC9saWIxZnVuY3MuYXNtCTIwMDktMDUtMjcgMjE6Mzg6MzcuMDAwMDAwMDAwICswMjAwCitAQCAtNzkzLDMgKzc5Myw3IEBACisgCS5lbmRwIF9fZmxvYXR0aXRmCisgI2VuZGlmCisgI2VuZGlmCisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvaWE2NC9saW51eC5oIGdjYy00LjQuMC9nY2MvY29uZmlnL2lhNjQvbGludXguaAorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvaWE2NC9saW51eC5oCTIwMDktMDItMTIgMTc6MzA6NTMuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvaWE2NC9saW51eC5oCTIwMDktMDUtMjcgMjE6Mzg6MzcuMDAwMDAwMDAwICswMjAwCitAQCAtNSw2ICs1LDggQEAKKyAKKyAjZGVmaW5lIFRBUkdFVF9WRVJTSU9OIGZwcmludGYgKHN0ZGVyciwgIiAoSUEtNjQpIExpbnV4Iik7CisgCisrI2RlZmluZSBUQVJHRVRfQVNNX0ZJTEVfRU5EIGZpbGVfZW5kX2luZGljYXRlX2V4ZWNfc3RhY2sKKysKKyAvKiBUaGlzIGlzIGZvciAtcHJvZmlsZSB0byB1c2UgLWxjX3AgaW5zdGVhZCBvZiAtbGMuICAqLworICN1bmRlZiBDQzFfU1BFQworICNkZWZpbmUgQ0MxX1NQRUMgIiV7cHJvZmlsZTotcH0gJXtHKn0iCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvcnM2MDAwL3BwYy1hc20uaCBnY2MtNC40LjAvZ2NjL2NvbmZpZy9yczYwMDAvcHBjLWFzbS5oCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvcHBjLWFzbS5oCTIwMDgtMTAtMTMgMTc6NDQ6MjYuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvcnM2MDAwL3BwYy1hc20uaAkyMDA5LTA1LTI3IDIxOjM4OjM3LjAwMDAwMDAwMCArMDIwMAorQEAgLTE3Miw3ICsxNzIsNyBAQAorIAkuc2l6ZSBGVU5DX05BTUUobmFtZSksR0xVRSguTCxuYW1lKS1GVU5DX05BTUUobmFtZSkKKyAjZW5kaWYKKyAKKy0jaWYgZGVmaW5lZCBfX2xpbnV4X18gJiYgIWRlZmluZWQgX19wb3dlcnBjNjRfXworKyNpZiBkZWZpbmVkIF9fbGludXhfXworIAkuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2sKKyAJLnByZXZpb3VzCisgI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4xLzI2MC1zaC1saWJnY2Mtc3RhY2tzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8yNjAtc2gtbGliZ2NjLXN0YWNrcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmFmMmM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8yNjAtc2gtbGliZ2NjLXN0YWNrcy5wYXRjaApAQCAtMCwwICsxLDI1IEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvc2gvbGliMWZ1bmNzLmFzbSBnY2MtNC40LjAvZ2NjL2NvbmZpZy9zaC9saWIxZnVuY3MuYXNtCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9zaC9saWIxZnVuY3MuYXNtCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvc2gvbGliMWZ1bmNzLmFzbQkyMDA5LTA1LTI3IDIxOjM4OjM5LjAwMDAwMDAwMCArMDIwMAorQEAgLTMwLDYgKzMwLDExIEBACisgISEgcmVjb2RlZCBpbiBhc3NlbWJseSBieSBUb3NoaXlhc3UgTW9yaXRhCisgISEgdG1AbmV0Y29tLmNvbQorIAorKyNpZiBkZWZpbmVkKF9fRUxGX18pICYmIGRlZmluZWQoX19saW51eF9fKQorKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjaywiIiwlcHJvZ2JpdHMKKysucHJldmlvdXMKKysjZW5kaWYKKysKKyAvKiBTSDIgb3B0aW1pemF0aW9ucyBmb3IgX19fYXNocnNpMywgX19fYXNobHNpMywgX19fbHNocnNpMyBhbmQKKyAgICBFTEYgbG9jYWwgbGFiZWwgcHJlZml4ZXMgYnkgSiJvcm4gUmVubmVja2UKKyAgICBhbXlsYWFyQGN5Z251cy5jb20gICovCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvc2gvbGludXgtYXRvbWljLmFzbSBnY2MtNC40LjAvZ2NjL2NvbmZpZy9zaC9saW51eC1hdG9taWMuYXNtCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9zaC9saW51eC1hdG9taWMuYXNtCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvc2gvbGludXgtYXRvbWljLmFzbQkyMDA5LTA1LTI3IDIxOjM4OjM5LjAwMDAwMDAwMCArMDIwMAorQEAgLTEzNiwzICsxMzYsNiBAQAorIEFUT01JQ19GRVRDSF9BTkRfQ09NQk9QKG5hbmQsYW5kLG5vdCw0LGwsbW92KQorIAorICNlbmRpZiAvKiAhIF9fU0g1X18gKi8KKysKKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2ssIiIsJXByb2diaXRzCisrLnByZXZpb3VzCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4xLzI3MC1zaC1wcjI0ODM2LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8yNzAtc2gtcHIyNDgzNi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzc0NWFiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8yNzAtc2gtcHIyNDgzNi5wYXRjaApAQCAtMCwwICsxLDI0IEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWd1cmUgZ2NjLTQuNC4wL2djYy9jb25maWd1cmUKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlndXJlCTIwMDktMDUtMjcgMjE6Mzg6MDguMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWd1cmUJMjAwOS0wNS0yNyAyMTozODo0Mi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMjIwNSw3ICsyMjIwNSw3IEBACisgCXRsc19maXJzdF9taW5vcj0xNAorIAl0bHNfYXNfb3B0PSItbTY0IC1BZXNhbWUgLS1mYXRhbC13YXJuaW5ncyIKKyAJOzsKKy0gIHNoLSotKiB8IHNoWzM0XS0qLSopCisrICBzaC0qLSogfCBzaFszNF0qLSotKikKKyAgICAgY29uZnRlc3Rfcz0nCisgCS5zZWN0aW9uICIudGRhdGEiLCJhd1QiLEBwcm9nYml0cworIGZvbzoJLmxvbmcJMjUKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYyBnY2MtNC40LjAvZ2NjL2NvbmZpZ3VyZS5hYworLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWd1cmUuYWMJMjAwOS0wNS0yNyAyMTozODowOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZ3VyZS5hYwkyMDA5LTA1LTI3IDIxOjM4OjQyLjAwMDAwMDAwMCArMDIwMAorQEAgLTI2NzMsNyArMjY3Myw3IEBACisgCXRsc19maXJzdF9taW5vcj0xNAorIAl0bHNfYXNfb3B0PSItbTY0IC1BZXNhbWUgLS1mYXRhbC13YXJuaW5ncyIKKyAJOzsKKy0gIHNoLSotKiB8IHNoWzM0XS0qLSopCisrICBzaC0qLSogfCBzaFszNF0qLSotKikKKyAgICAgY29uZnRlc3Rfcz0nCisgCS5zZWN0aW9uICIudGRhdGEiLCJhd1QiLEBwcm9nYml0cworIGZvbzoJLmxvbmcJMjUKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMjgwLWZyZWVic2QucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4xLzI4MC1mcmVlYnNkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZDlkMGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4xLzI4MC1mcmVlYnNkLnBhdGNoCkBAIC0wLDAgKzEsOTQgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9mcmVlYnNkLXNwZWMuaCBnY2MtNC40LjAvZ2NjL2NvbmZpZy9mcmVlYnNkLXNwZWMuaAorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvZnJlZWJzZC1zcGVjLmgJMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy9mcmVlYnNkLXNwZWMuaAkyMDA5LTA1LTI3IDIxOjM4OjQ1LjAwMDAwMDAwMCArMDIwMAorQEAgLTYxLDYgKzYxLDggQEAKKyAJYnVpbHRpbl9hc3NlcnQgKCJzeXN0ZW09dW5peCIpOwkJCQkJXAorIAlidWlsdGluX2Fzc2VydCAoInN5c3RlbT1ic2QiKTsJCQkJCVwKKyAJYnVpbHRpbl9hc3NlcnQgKCJzeXN0ZW09RnJlZUJTRCIpOwkJCQlcCisrCWlmKCEoZmxhZ19pc28gJiYgKGNfZGlhbGVjdF9jeHggKCkgPyBjeHhfZGlhbGVjdCA9PSBjeHg5OCA6ICFmbGFnX2lzb2M5OSkpKQlcCisrCQlidWlsdGluX2RlZmluZSgiX0xPTkdMT05HIik7CQkJCVwKKyAJRkJTRF9UQVJHRVRfQ1BVX0NQUF9CVUlMVElOUygpOwkJCQkJXAorICAgICB9CQkJCQkJCQkJXAorICAgd2hpbGUgKDApCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvdC1mcmVlYnNkLWVoIGdjYy00LjQuMC9nY2MvY29uZmlnL3QtZnJlZWJzZC1laAorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvdC1mcmVlYnNkLWVoCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvdC1mcmVlYnNkLWVoCTIwMDktMDUtMjcgMjE6Mzg6NDUuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDQgQEAKKysjIFVzZSB1bndpbmQtZHcyLWZkZS1nbGliYworK0xJQjJBRERFSCA9ICQoc3JjZGlyKS91bndpbmQtZHcyLmMgJChzcmNkaXIpL3Vud2luZC1kdzItZmRlLWdsaWJjLmMgXAorKyAgJChzcmNkaXIpL3Vud2luZC1zamxqLmMgJChzcmNkaXIpL2d0aHItZ25hdC5jICQoc3JjZGlyKS91bndpbmQtYy5jCisrTElCMkFEREVIREVQID0gdW53aW5kLmluYyB1bndpbmQtZHcyLWZkZS5oIHVud2luZC1kdzItZmRlLmMKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy5nY2MgZ2NjLTQuNC4wL2djYy9jb25maWcuZ2NjCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy5nY2MJMjAwOS0wNS0yNyAyMTozODozNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy5nY2MJMjAwOS0wNS0yNyAyMTozODo0NS4wMDAwMDAwMDAgKzAyMDAKK0BAIC00NTYsNyArNDU2LDcgQEAKKyAgICMgcGxlYXNlcyBhcm91bmQgdGhlIHByb3ZpZGVkIGNvcmUgc2V0dGluZy4KKyAgIGdhcz15ZXMKKyAgIGdudV9sZD15ZXMKKy0gIGV4dHJhX3BhcnRzPSJjcnRiZWdpbi5vIGNydGVuZC5vIGNydGJlZ2luUy5vIGNydGVuZFMubyIKKysgIGV4dHJhX3BhcnRzPSJjcnRiZWdpbi5vIGNydGVuZC5vIGNydGJlZ2luUy5vIGNydGVuZFMubyBjcnRiZWdpblQubyIKKyAgIGZic2RfbWFqb3I9YGVjaG8gJHt0YXJnZXR9IHwgc2VkIC1lICdzLy4qZnJlZWJzZC8vZycgfCBzZWQgLWUgJ3MvXC4uKi8vZydgCisgICB0bV9kZWZpbmVzPSIke3RtX2RlZmluZXN9IEZCU0RfTUFKT1I9JHtmYnNkX21ham9yfSIKKyAgIHRtYWtlX2ZpbGU9InQtc2xpYmdjYy1lbGYtdmVyIHQtZnJlZWJzZCIKK0BAIC0xMDQyLDYgKzEwNDIsMTAgQEAKKyAJOzsKKyBpWzM0NTY3XTg2LSotZnJlZWJzZCopCisgCXRtX2ZpbGU9IiR7dG1fZmlsZX0gaTM4Ni91bml4LmggaTM4Ni9hdHQuaCBkYnhlbGYuaCBlbGZvcy5oICR7ZmJzZF90bV9maWxlfSBpMzg2L2ZyZWVic2QuaCIKKysJZmJzZF9tYWpvcj1gZWNobyAke3RhcmdldH0gfCBzZWQgLWUgJ3MvLipmcmVlYnNkLy9nJyB8IHNlZCAtZSAncy9cLi4qLy9nJ2AKKysJaWYgdGVzdCAke2Zic2RfbWFqb3J9IC1nZSA3OyB0aGVuCisrCQl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IHQtZnJlZWJzZC1laCIKKysJZmkKKyAJOzsKKyB4ODZfNjQtKi1mcmVlYnNkKikKKyAJdG1fZmlsZT0iJHt0bV9maWxlfSBpMzg2L3VuaXguaCBpMzg2L2F0dC5oIGRieGVsZi5oIGVsZm9zLmggJHtmYnNkX3RtX2ZpbGV9IGkzODYveDg2LTY0LmggaTM4Ni9mcmVlYnNkLmggaTM4Ni9mcmVlYnNkNjQuaCIKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NydHN0dWZmLmMgZ2NjLTQuNC4wL2djYy9jcnRzdHVmZi5jCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NydHN0dWZmLmMJMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NydHN0dWZmLmMJMjAwOS0wNS0yNyAyMTozODo0NS4wMDAwMDAwMDAgKzAyMDAKK0BAIC04NSwxMyArODUsMTUgQEAKKyAgICAgJiYgIWRlZmluZWQoT0JKRUNUX0ZPUk1BVF9GTEFUKSBcCisgICAgICYmIGRlZmluZWQoSEFWRV9MRF9FSF9GUkFNRV9IRFIpIFwKKyAgICAgJiYgIWRlZmluZWQoaW5oaWJpdF9saWJjKSAmJiAhZGVmaW5lZChDUlRTVFVGRlRfTykgXAorLSAgICAmJiBkZWZpbmVkKF9fR0xJQkNfXykgJiYgX19HTElCQ19fID49IDIKKysgICAgJiYgKChkZWZpbmVkKF9fR0xJQkNfXykgJiYgX19HTElCQ19fID49IDIpIFwKKysgICAgfHwgKGRlZmluZWQoX19GcmVlQlNEX3ZlcnNpb24pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDcwMDAyMikpCisgI2luY2x1ZGUgPGxpbmsuaD4KKyAvKiB1Q2xpYmMgcHJldGVuZHMgdG8gYmUgZ2xpYmMgMi4yIGFuZCBEVF9DT05GSUcgaXMgZGVmaW5lZCBpbiBpdHMgbGluay5oLgorICAgIEJ1dCBpdCBkb2Vzbid0IHVzZSBQVF9HTlVfRUhfRlJBTUUgRUxGIHNlZ21lbnQgY3VycmVudGx5LiAgKi8KKyAjIGlmICFkZWZpbmVkKF9fVUNMSUJDX18pIFwKKy0gICAgICYmIChfX0dMSUJDX18gPiAyIHx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPiAyKSBcCistICAgICB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID09IDIgJiYgZGVmaW5lZChEVF9DT05GSUcpKSkKKysgICAgIHx8IChfX0dMSUJDX18gPiAyIHx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPiAyKSBcCisrICAgICB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID09IDIgJiYgZGVmaW5lZChEVF9DT05GSUcpKSkgXAorKyAgICAgfHwgKF9fRnJlZUJTRF92ZXJzaW9uID49IDcwMDAyMikKKyAjICBkZWZpbmUgVVNFX1BUX0dOVV9FSF9GUkFNRQorICMgZW5kaWYKKyAjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL3Vud2luZC1kdzItZmRlLWdsaWJjLmMgZ2NjLTQuNC4wL2djYy91bndpbmQtZHcyLWZkZS1nbGliYy5jCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL3Vud2luZC1kdzItZmRlLWdsaWJjLmMJMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL3Vud2luZC1kdzItZmRlLWdsaWJjLmMJMjAwOS0wNS0yNyAyMTozODo0NS4wMDAwMDAwMDAgKzAyMDAKK0BAIC00Niw4ICs0Niw5IEBACisgI2luY2x1ZGUgImd0aHIuaCIKKyAKKyAjaWYgIWRlZmluZWQoaW5oaWJpdF9saWJjKSAmJiBkZWZpbmVkKEhBVkVfTERfRUhfRlJBTUVfSERSKSBcCistICAgICYmIChfX0dMSUJDX18gPiAyIHx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPiAyKSBcCistCXx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPT0gMiAmJiBkZWZpbmVkKERUX0NPTkZJRykpKQorKyAgICAmJiAoKF9fR0xJQkNfXyA+IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+IDIpIFwKKysJfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA9PSAyICYmIGRlZmluZWQoRFRfQ09ORklHKSkpIFwKKysgICAgfHwgKF9fRnJlZUJTRF92ZXJzaW9uID49IDcwMDAyMiApKQorIAorICNpZm5kZWYgX19SRUxPQ19QT0lOVEVSCisgIyBkZWZpbmUgX19SRUxPQ19QT0lOVEVSKHB0ciwgYmFzZSkgKChwdHIpICsgKGJhc2UpKQorQEAgLTYzLDYgKzY0LDEzIEBACisgI2RlZmluZSBQVF9HTlVfRUhfRlJBTUUgKFBUX0xPT1MgKyAweDQ3NGU1NTApCisgI2VuZGlmCisgCisrLyogU3VwcG9ydCBGcmVlQlNEICovCisrI2lmbmRlZiBFbGZXCisrIyBpZmRlZiBfX0VsZk4KKysjICBkZWZpbmUgRWxmVyBfX0VsZk4KKysjIGVuZGlmCisrI2VuZGlmCisrCisgc3RydWN0IHVud19laF9jYWxsYmFja19kYXRhCisgeworICAgX1Vud2luZF9QdHIgcGM7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4xLzI5MC1mcmVlYnNkLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8yOTAtZnJlZWJzZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDE1NjRiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8yOTAtZnJlZWJzZC5wYXRjaApAQCAtMCwwICsxLDY0IEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvZnJlZWJzZC1zcGVjLmggZ2NjLTQuNC4wL2djYy9jb25maWcvZnJlZWJzZC1zcGVjLmgKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2ZyZWVic2Qtc3BlYy5oCTIwMDktMDUtMjcgMjE6Mzg6NDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvZnJlZWJzZC1zcGVjLmgJMjAwOS0wNS0yNyAyMTozODo0Ny4wMDAwMDAwMDAgKzAyMDAKK0BAIC04Niw5ICs4NiwxMCBAQAorICNkZWZpbmUgRkJTRF9TVEFSVEZJTEVfU1BFQyBcCisgICAiJXshc2hhcmVkOiBcCisgICAgICAle3BnOmdjcnQxLm8lc30gJXshcGc6JXtwOmdjcnQxLm8lc30gXAorLQkJICAgICAgICV7IXA6JXtwcm9maWxlOmdjcnQxLm8lc30gXAorLQkJCSAleyFwcm9maWxlOmNydDEubyVzfX19fSBcCistICAgY3J0aS5vJXMgJXshc2hhcmVkOmNydGJlZ2luLm8lc30gJXtzaGFyZWQ6Y3J0YmVnaW5TLm8lc30iCisrCSV7IXA6JXtwcm9maWxlOmdjcnQxLm8lc30gXAorKwkgJXshcHJvZmlsZTpjcnQxLm8lc319fX0gXAorKyAgIGNydGkubyVzIFwKKysgICAle3N0YXRpYzpjcnRiZWdpblQubyVzO3NoYXJlZDpjcnRiZWdpblMubyVzOzpjcnRiZWdpbi5vJXN9IgorIAorIC8qIFByb3ZpZGUgYSBFTkRGSUxFX1NQRUMgYXBwcm9wcmlhdGUgZm9yIEZyZWVCU0QuICBIZXJlIHdlIHRhY2sgb24KKyAgICB0aGUgbWFnaWNhbCBjcnRlbmQubyBmaWxlIChzZWUgY3J0c3R1ZmYuYykgd2hpY2ggcHJvdmlkZXMgcGFydCBvZiAKK0BAIC0xMjYsNyArMTI3LDggQEAKKyAgICAgJXtwZzogIC1sY19wfQkJCQkJCQlcCisgICB9IgorICNlbHNlCistI2lmIEZCU0RfTUFKT1IgPCA1CisrI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDUwMDAxNgorICNkZWZpbmUgRkJTRF9MSUJfU1BFQyAiCQkJCQkJCVwKKyAgICV7IXNoYXJlZDoJCQkJCQkJCVwKKyAgICAgJXshcGc6CQkJCQkJCQlcCitAQCAtMTM2LDE3ICsxMzgsMzQgQEAKKyAgICAgICAleyFwdGhyZWFkOi1sY19wfQkJCQkJCQlcCisgICAgICAgJXtwdGhyZWFkOi1sY19yX3B9fQkJCQkJCVwKKyAgIH0iCistI2Vsc2UKKysjZWxpZiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDcwMDAyMgorICNkZWZpbmUgRkJTRF9MSUJfU1BFQyAiCQkJCQkJCVwKKyAgICV7IXNoYXJlZDoJCQkJCQkJCVwKKyAgICAgJXshcGc6ICV7cHRocmVhZDotbHB0aHJlYWR9IC1sY30JCQkJCVwKKyAgICAgJXtwZzogICV7cHRocmVhZDotbHB0aHJlYWRfcH0gLWxjX3B9CQkJCVwKKyAgIH0iCisrI2Vsc2UKKysjZGVmaW5lIEZCU0RfTElCX1NQRUMgIgkJCQkJCQlcCisrICAleyFzaGFyZWQ6CQkJCQkJCQlcCisrICAgICV7IXBnOiAle3B0aHJlYWQ6LWxwdGhyZWFkfSAtbGN9CQkJCQlcCisrICAgICV7cGc6ICAle3B0aHJlYWQ6LWxwdGhyZWFkX3B9IC1sY19wfX0JCQkJXAorKyAgJXtzaGFyZWQ6CQkJCQkJCQlcCisrICAgICV7cHRocmVhZDotbHB0aHJlYWR9IC1sY30JCQkJCQlcCisrICAiCisgI2VuZGlmCisgI2VuZGlmCisgCistI2lmIEZCU0RfTUFKT1IgPCA2CisrI2lmIEZCU0RfTUFKT1IgPCA1CisgI2RlZmluZSBGQlNEX0RZTkFNSUNfTElOS0VSICIvdXNyL2xpYmV4ZWMvbGQtZWxmLnNvLjEiCisgI2Vsc2UKKyAjZGVmaW5lIEZCU0RfRFlOQU1JQ19MSU5LRVIgIi9saWJleGVjL2xkLWVsZi5zby4xIgorICNlbmRpZgorKworKyNpZiBkZWZpbmVkKEhBVkVfTERfRUhfRlJBTUVfSERSKQorKyNkZWZpbmUgTElOS19FSF9TUEVDICIleyFzdGF0aWM6LS1laC1mcmFtZS1oZHJ9ICIKKysjZW5kaWYKKysKKysvKiBVc2UgLS1hcy1uZWVkZWQgLWxnY2NfcyBmb3IgZWggc3VwcG9ydC4gICovCisrI2lmZGVmIEhBVkVfTERfQVNfTkVFREVECisrI2RlZmluZSBVU0VfTERfQVNfTkVFREVEIDEKKysjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMzAwLXVjbGliYy1jb25mLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8zMDAtdWNsaWJjLWNvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNmM2I5MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMzAwLXVjbGliYy1jb25mLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoIGdjYy00LjQuMC9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKKy0tLSBnY2MtNC40LjAub3JpZy9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gJMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCTIwMDktMDUtMjcgMjE6Mzg6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtMTA2LDYgKzEwNiwxMCBAQAorICB0aGVuCisgICBtYWtlIGFsbC1nZGIgYWxsLWRlamFnbnUgYWxsLWxkIHx8IGV4aXQgMQorICAgbWFrZSBpbnN0YWxsLWdkYiBpbnN0YWxsLWRlamFnbnUgaW5zdGFsbC1sZCB8fCBleGl0IDEKKytlbGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgLWEgJEhfUkVBTF9UQVJHRVQgPSBpNjg2LXBjLWxpbnV4LXVjbGliYyBdCisrIHRoZW4KKysgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCisrICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQorIGVsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCBdIDsgdGhlbgorICAgbWFrZSBib290c3RyYXAgfHwgZXhpdCAxCisgICBtYWtlIGluc3RhbGwgfHwgZXhpdCAxCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnIGdjYy00LjQuMC9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZworLS0tIGdjYy00LjQuMC5vcmlnL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCTIwMDctMDYtMDQgMDE6MTg6NDMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCTIwMDktMDUtMjcgMjE6Mzg6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtNjAzLDcgKzYwMyw3IEBACisgCisgIyBUcmFuc2Zvcm0gbGludXgqIHRvICotKi1saW51eC1nbnUqLCB0byBzdXBwb3J0IG9sZCBjb25maWd1cmUgc2NyaXB0cy4KKyBjYXNlICRob3N0X29zIGluCistbGludXgtZ251KikgOzsKKytsaW51eC1nbnUqfGxpbnV4LXVjbGliYyopIDs7CisgbGludXgqKSBob3N0PWBlY2hvICRob3N0IHwgc2VkICdzL15cKC4qLS4qLWxpbnV4XClcKC4qXCkkL1wxLWdudVwyLydgCisgZXNhYworIAorQEAgLTEyNTEsNyArMTI1MSw3IEBACisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIHZlcnNpb25fdHlwZT1saW51eAorICAgbmVlZF9saWJfcHJlZml4PW5vCisgICBuZWVkX3ZlcnNpb249bm8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMzEwLW1pc3NpbmctZXhlY2luZm9faC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMzEwLW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDkzMzVlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8zMTAtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvYm9laG0tZ2MvaW5jbHVkZS9nYy5oIGdjYy00LjQuMC9ib2VobS1nYy9pbmNsdWRlL2djLmgKKy0tLSBnY2MtNC40LjAub3JpZy9ib2VobS1nYy9pbmNsdWRlL2djLmgJMjAwNy0wNC0yMyAyMzoxMDowOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCTIwMDktMDUtMjcgMjE6Mzg6NTUuMDAwMDAwMDAwICswMjAwCitAQCAtNTAzLDcgKzUwMyw3IEBACisgI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykKKyAjIGluY2x1ZGUgPGZlYXR1cmVzLmg+CisgIyBpZiAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEgfHwgX19HTElCQ19fID4gMikgXAorLSAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pCisrICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykgJiYgIWRlZmluZWQoX19VQ0xJQkNfXykKKyAjICAgaWZuZGVmIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgICBkZWZpbmUgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQorICMgICBlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8zMjAtYzk5LXNucHJpbnRmLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8zMjAtYzk5LXNucHJpbnRmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MjhmNGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4xLzMyMC1jOTktc25wcmludGYucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9jX2dsb2JhbC9jc3RkaW8gZ2NjLTQuNC4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfZ2xvYmFsL2NzdGRpbworLS0tIGdjYy00LjQuMC5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfZ2xvYmFsL2NzdGRpbwkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jX2dsb2JhbC9jc3RkaW8JMjAwOS0wNS0yNyAyMTozODo1OC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMzksNyArMTM5LDcgQEAKKyAKKyBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisgCistI2lmIF9HTElCQ1hYX1VTRV9DOTkKKysjaWYgX0dMSUJDWFhfVVNFX0M5OSB8fCBkZWZpbmVkIF9fVUNMSUJDX18KKyAKKyAjdW5kZWYgc25wcmludGYKKyAjdW5kZWYgdmZzY2FuZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8zMzAtbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4xLzMzMC1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2E0ZTMyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8zMzAtbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9saWJtdWRmbGFwL21mLWhvb2tzMi5jIGdjYy00LjQuMC9saWJtdWRmbGFwL21mLWhvb2tzMi5jCistLS0gZ2NjLTQuNC4wLm9yaWcvbGlibXVkZmxhcC9tZi1ob29rczIuYwkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9saWJtdWRmbGFwL21mLWhvb2tzMi5jCTIwMDktMDUtMjcgMjE6Mzk6MDAuMDAwMDAwMDAwICswMjAwCitAQCAtNDIxLDcgKzQyMSw3IEBACisgeworICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQocywgbiwgX19NRl9DSEVDS19XUklURSwgImJ6ZXJvIHJlZ2lvbiIpOworLSAgYnplcm8gKHMsIG4pOworKyAgbWVtc2V0IChzLCAwLCBuKTsKKyB9CisgCisgCitAQCAtNDMxLDcgKzQzMSw3IEBACisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzcmMsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjb3B5IHNyYyIpOworICAgTUZfVkFMSURBVEVfRVhURU5UKGRlc3QsIG4sIF9fTUZfQ0hFQ0tfV1JJVEUsICJiY29weSBkZXN0Iik7CistICBiY29weSAoc3JjLCBkZXN0LCBuKTsKKysgIG1lbW1vdmUgKGRlc3QsIHNyYywgbik7CisgfQorIAorIAorQEAgLTQ0MSw3ICs0NDEsNyBAQAorICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQoczEsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjbXAgMXN0IGFyZyIpOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMyLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY21wIDJuZCBhcmciKTsKKy0gIHJldHVybiBiY21wIChzMSwgczIsIG4pOworKyAgcmV0dXJuIG4gPT0gMCA/IDAgOiBtZW1jbXAgKHMxLCBzMiwgbik7CisgfQorIAorIAorQEAgLTQ1MCw3ICs0NTAsNyBAQAorICAgc2l6ZV90IG4gPSBzdHJsZW4gKHMpOworICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQocywgQ0xBTVBBREQobiwgMSksIF9fTUZfQ0hFQ0tfUkVBRCwgImluZGV4IHJlZ2lvbiIpOworLSAgcmV0dXJuIGluZGV4IChzLCBjKTsKKysgIHJldHVybiBzdHJjaHIgKHMsIGMpOworIH0KKyAKKyAKK0BAIC00NTksNyArNDU5LDcgQEAKKyAgIHNpemVfdCBuID0gc3RybGVuIChzKTsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIENMQU1QQUREKG4sIDEpLCBfX01GX0NIRUNLX1JFQUQsICJyaW5kZXggcmVnaW9uIik7CistICByZXR1cm4gcmluZGV4IChzLCBjKTsKKysgIHJldHVybiBzdHJyY2hyIChzLCBjKTsKKyB9CisgCisgLyogWFhYOiAgc3RwY3B5LCBtZW1jY3B5ICovCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4xLzM0MC1lY2p4LWhvc3QtY2MucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4xLzM0MC1lY2p4LWhvc3QtY2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFmOGVkNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMzQwLWVjangtaG9zdC1jYy5wYXRjaApAQCAtMCwwICsxLDEzIEBACitkaWZmIC11ciBnY2MtNC40LjEtb3JpZy9saWJqYXZhL01ha2VmaWxlLmluIGdjYy00LjQuMS9saWJqYXZhL01ha2VmaWxlLmluCistLS0gZ2NjLTQuNC4xLW9yaWcvbGliamF2YS9NYWtlZmlsZS5pbgkyMDA5LTA4LTA0IDA0OjEyOjI3LjAwMDAwMDAwMCAtMDcwMAorKysrIGdjYy00LjQuMS9saWJqYXZhL01ha2VmaWxlLmluCTIwMDktMDktMjMgMjI6MDM6MTUuNzUwOTUxNDgzIC0wNzAwCitAQCAtODg3NCw2ICs4ODc0LDkgQEAKKyBlY2p4JChFWEVFWFQpOiAkKGVjanhfT0JKRUNUUykgJChlY2p4X0RFUEVOREVOQ0lFUykgCisgCUBybSAtZiBlY2p4JChFWEVFWFQpCisgCSQoZWNqeF9MSU5LKSAkKGVjanhfTERGTEFHUykgJChlY2p4X09CSkVDVFMpICQoZWNqeF9MREFERCkgJChMSUJTKQorK2VjanguJChPQkpFWFQpOiAkKGVjanhfU09VUkNFUykKKysJQHJtIC1mIGVjanguJChPQkpFWFQpCisrCSQoQ0NfRk9SX0JVSUxEKSAkKEJVSUxEX0NGTEFHUykgLWMgLW8gJEAgJDwKKyBnYXBwbGV0dmlld2VyJChFWEVFWFQpOiAkKGdhcHBsZXR2aWV3ZXJfT0JKRUNUUykgJChnYXBwbGV0dmlld2VyX0RFUEVOREVOQ0lFUykgCisgCUBybSAtZiBnYXBwbGV0dmlld2VyJChFWEVFWFQpCisgCSQoZ2FwcGxldHZpZXdlcl9MSU5LKSAkKGdhcHBsZXR2aWV3ZXJfTERGTEFHUykgJChnYXBwbGV0dmlld2VyX09CSkVDVFMpICQoZ2FwcGxldHZpZXdlcl9MREFERCkgJChMSUJTKQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8zNTAtaW5kZXhfbWFjcm8ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4xLzM1MC1pbmRleF9tYWNyby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmI4OTlhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8zNTAtaW5kZXhfbWFjcm8ucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogLi4vNC4zLjIvMjkwLWluZGV4X21hY3JvLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2djYy80LjMuMS91Y2xpYmMvOTBfYWxsXzMwNC1pbmRleF9tYWNyby5wYXRjaAorLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlIGdjYy00LjMuMy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQorLS0tIGdjYy00LjMuMy5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCTIwMDgtMDctMTUgMTI6MTQ6NTEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCTIwMDktMDEtMjcgMjI6MjU6NDEuMDAwMDAwMDAwICswMTAwCitAQCAtNTksNiArNTksOSBAQAorICNpbmNsdWRlIDxiaXRzL2d0aHIuaD4KKyAjaW5jbHVkZSA8dHIxL2Z1bmN0aW9uYWw+CisgCisrLyogY29wZSB3LyBpbmRleCBkZWZpbmVkIGFzIG1hY3JvLCBTdVN2MyBwcm9wb3NhbCAqLworKyN1bmRlZiBpbmRleAorKworICMgaWZkZWYgX19HQworICMgICBkZWZpbmUgX19HQ19DT05TVCBjb25zdAorICMgZWxzZQorZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaCBnY2MtNC4zLjMvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAkyMDA3LTA1LTA0IDE3OjA2OjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAkyMDA5LTAxLTI3IDIyOjI1OjQxLjAwMDAwMDAwMCArMDEwMAorQEAgLTU0LDYgKzU0LDkgQEAKKyAjaW5jbHVkZSA8ZXh0L21lbW9yeT4gLy8gRm9yIHVuaW5pdGlhbGl6ZWRfY29weV9uCisgI2luY2x1ZGUgPGV4dC9udW1lcmljPiAvLyBGb3IgcG93ZXIKKyAKKysvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCisrI3VuZGVmIGluZGV4CisrCisgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKyAKKyAgIHVzaW5nIHN0ZDo6c2l6ZV90OwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8zNjAtYXJtLWJpZ2VuZGlhbi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMzYwLWFybS1iaWdlbmRpYW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBmMTBhYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMzYwLWFybS1iaWdlbmRpYW4ucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorQnkgTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAd2FudHN0b2ZseS5vcmc+CitBZGRzIHN1cHBvcnQgZm9yIGFybSpiLWxpbnV4KiBiaWctZW5kaWFuIEFSTSB0YXJnZXRzCisKK1NlZSBodHRwOi8vZ2NjLmdudS5vcmcvUFIxNjM1MAorCistLS0gZ2NjLTQuNC4yLm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgJMjAwOS0wMi0yMCAxNjoyMDozOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC40LjIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgJMjAwOS0xMi0zMSAxNDoxOToyMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC01MSw3ICs1MSw3IEBACisgCisgI3VuZGVmICBNVUxUSUxJQl9ERUZBVUxUUworICNkZWZpbmUgTVVMVElMSUJfREVGQVVMVFMgXAorLQl7ICJtYXJtIiwgIm1saXR0bGUtZW5kaWFuIiwgIm1oYXJkLWZsb2F0IiwgIm1uby10aHVtYi1pbnRlcndvcmsiIH0KKysJeyAibWFybSIsIFRBUkdFVF9FTkRJQU5fT1BUSU9OLCAibWhhcmQtZmxvYXQiLCAibW5vLXRodW1iLWludGVyd29yayIgfQorIAorIC8qIE5vdyB3ZSBkZWZpbmUgdGhlIHN0cmluZ3MgdXNlZCB0byBidWlsZCB0aGUgc3BlYyBmaWxlLiAgKi8KKyAjdW5kZWYgIExJQl9TUEVDCitkaWZmIC1ydSBnY2MtNC40LjIub3JpZy9nY2MvY29uZmlnLmdjYyBnY2MtNC40LjIvZ2NjL2NvbmZpZy5nY2MKKy0tLSBnY2MtNC40LjIub3JpZy9nY2MvY29uZmlnLmdjYwkyMDA5LTEyLTMxIDE0OjQzOjE3LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuMi9nY2MvY29uZmlnLmdjYwkyMDEwLTAxLTA1IDA5OjI3OjQyLjAwMDAwMDAwMCArMDEwMAorQEAgLTczMyw2ICs3MzMsMTEgQEAKKyAJdG1fZmlsZT0iZGJ4ZWxmLmggZWxmb3MuaCBhcm0vdW5rbm93bi1lbGYuaCBhcm0vZWxmLmggYXJtL2xpbnV4LWdhcy5oIGFybS91Y2xpbnV4LWVsZi5oIgorIAl0bWFrZV9maWxlPSJhcm0vdC1hcm0gYXJtL3QtYXJtLWVsZiIKKyAJY2FzZSAke3RhcmdldH0gaW4KKysJYXJtKmItKikKKysJCXRtX2RlZmluZXM9IiR7dG1fZGVmaW5lc30gVEFSR0VUX0JJR19FTkRJQU5fREVGQVVMVD0xIgorKwkJOzsKKysJZXNhYworKwljYXNlICR7dGFyZ2V0fSBpbgorIAlhcm0qLSotdWNsaW51eCplYWJpKQorIAkgICAgdG1fZmlsZT0iJHRtX2ZpbGUgYXJtL2JwYWJpLmggYXJtL3VjbGludXgtZWFiaS5oIgorIAkgICAgdG1ha2VfZmlsZT0iJHRtYWtlX2ZpbGUgYXJtL3QtYnBhYmkiCisKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMzcwLWJvb3RzdHJhcC10YXJnZXRfbGliX3BhdGgucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4xLzM3MC1ib290c3RyYXAtdGFyZ2V0X2xpYl9wYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNzFkMmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4xLzM3MC1ib290c3RyYXAtdGFyZ2V0X2xpYl9wYXRoLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0NoYW5nZUxvZzoKKzIwMTAtMDEtMDYgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwlQUiBib290c3RyYXAvNDE4MTgKKwkqIE1ha2VmaWxlLnRwbCAoQkFTRV9UQVJHRVRfRVhQT1JUUyk6IE9ubHkgYWRkIFRBUkdFVF9MSUJfUEFUSAorCXRvICQoUlBBVEhfRU5WVkFSKSBpZiBib290c3RyYXBwaW5nLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCBlNWZhMWQzLi5kYmZjMWYwIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMjgxLDcgKzI4MSwxMCBAQCBCQVNFX1RBUkdFVF9FWFBPUlRTID0gXAorIAlTVFJJUD0iJChTVFJJUF9GT1JfVEFSR0VUKSI7IGV4cG9ydCBTVFJJUDsgXAorIAlXSU5EUkVTPSIkKFdJTkRSRVNfRk9SX1RBUkdFVCkiOyBleHBvcnQgV0lORFJFUzsgXAorIAlXSU5ETUM9IiQoV0lORE1DX0ZPUl9UQVJHRVQpIjsgZXhwb3J0IFdJTkRNQzsgXAorLQkkKFJQQVRIX0VOVlZBUik9YGVjaG8gIiQoSE9TVF9MSUJfUEFUSCkkKFRBUkdFVF9MSUJfUEFUSCkkJCQoUlBBVEhfRU5WVkFSKSIgfCBzZWQgJ3MsOjoqLDosZztzLF46KiwsO3MsOiokJCwsJ2A7IGV4cG9ydCAkKFJQQVRIX0VOVlZBUik7CisrQGlmIGdjYy1ib290c3RyYXAKKysJJChSUEFUSF9FTlZWQVIpPWBlY2hvICIkKFRBUkdFVF9MSUJfUEFUSCkkJCQoUlBBVEhfRU5WVkFSKSIgfCBzZWQgJ3MsOjoqLDosZztzLF46KiwsO3MsOiokJCwsJ2A7IGV4cG9ydCAkKFJQQVRIX0VOVlZBUik7IFwKKytAZW5kaWYgZ2NjLWJvb3RzdHJhcAorKwkkKFJQQVRIX0VOVlZBUik9YGVjaG8gIiQoSE9TVF9MSUJfUEFUSCkkJCQoUlBBVEhfRU5WVkFSKSIgfCBzZWQgJ3MsOjoqLDosZztzLF46KiwsO3MsOiokJCwsJ2A7IGV4cG9ydCAkKFJQQVRIX0VOVlZBUik7CisgCisgUkFXX0NYWF9UQVJHRVRfRVhQT1JUUyA9IFwKKyAJJChCQVNFX1RBUkdFVF9FWFBPUlRTKSBcCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUudHBsIGIvTWFrZWZpbGUudHBsCitpbmRleCAxNTEwMmU1Li40NTJkNDdjIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUudHBsCisrKysgYi9NYWtlZmlsZS50cGwKK0BAIC0yODQsNyArMjg0LDEwIEBAIEJBU0VfVEFSR0VUX0VYUE9SVFMgPSBcCisgCVNUUklQPSIkKFNUUklQX0ZPUl9UQVJHRVQpIjsgZXhwb3J0IFNUUklQOyBcCisgCVdJTkRSRVM9IiQoV0lORFJFU19GT1JfVEFSR0VUKSI7IGV4cG9ydCBXSU5EUkVTOyBcCisgCVdJTkRNQz0iJChXSU5ETUNfRk9SX1RBUkdFVCkiOyBleHBvcnQgV0lORE1DOyBcCistCSQoUlBBVEhfRU5WVkFSKT1gZWNobyAiJChIT1NUX0xJQl9QQVRIKSQoVEFSR0VUX0xJQl9QQVRIKSQkJChSUEFUSF9FTlZWQVIpIiB8IHNlZCAncyw6OiosOixnO3MsXjoqLCw7cyw6KiQkLCwnYDsgZXhwb3J0ICQoUlBBVEhfRU5WVkFSKTsKKytAaWYgZ2NjLWJvb3RzdHJhcAorKwkkKFJQQVRIX0VOVlZBUik9YGVjaG8gIiQoVEFSR0VUX0xJQl9QQVRIKSQkJChSUEFUSF9FTlZWQVIpIiB8IHNlZCAncyw6OiosOixnO3MsXjoqLCw7cyw6KiQkLCwnYDsgZXhwb3J0ICQoUlBBVEhfRU5WVkFSKTsgXAorK0BlbmRpZiBnY2MtYm9vdHN0cmFwCisrCSQoUlBBVEhfRU5WVkFSKT1gZWNobyAiJChIT1NUX0xJQl9QQVRIKSQkJChSUEFUSF9FTlZWQVIpIiB8IHNlZCAncyw6OiosOixnO3MsXjoqLCw7cyw6KiQkLCwnYDsgZXhwb3J0ICQoUlBBVEhfRU5WVkFSKTsKKyAKKyBSQVdfQ1hYX1RBUkdFVF9FWFBPUlRTID0gXAorIAkkKEJBU0VfVEFSR0VUX0VYUE9SVFMpIFwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMzgwLXBvd2VycGMtbGliZ2NjX3MtbGluay1saWJtLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8zODAtcG93ZXJwYy1saWJnY2Nfcy1saW5rLWxpYm0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNkOTEyMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMzgwLXBvd2VycGMtbGliZ2NjX3MtbGluay1saWJtLnBhdGNoCkBAIC0wLDAgKzEsMTM1IEBACitodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAwOC0xMC9tc2cwMDI2OS5odG1sCisKK09uIGdsaWJjIHRoZSBsaWJjLnNvIGNhcnJpZXMgYSBjb3B5IG9mIHRoZSBtYXRoIGZ1bmN0aW9uIGNvcHlzaWdubCgpIGJ1dAorb24gdUNsaWJjIG1hdGggZnVuY3Rpb25zIGxpa2UgY29weXNpZ25sKCkgbGl2ZSBpbiBsaWJtLiBTaW5jZSBsaWJnY2NfcworY29udGFpbnMgdW5yZXNvbHZlZCBzeW1ib2xzLCBhbnkgYXR0ZW1wdCB0byBsaW5rIGFnYWluc3QgbGliZ2NjX3MKK3dpdGhvdXQgZXhwbGljaXRlbHkgc3BlY2lmeWluZyAtbG0gZmFpbHMsIHJlc3VsdGluZyBpbiBhIGJyb2tlbgorYm9vdHN0cmFwIG9mIHRoZSBjb21waWxlci4KKworCitkaWZmIC1yZHVwIGdjYy00LjQuMC5vbGQvZ2NjL2NvbmZpZy90LXNsaWJnY2MtZWxmLXZlciBnY2MtNC40LjAvZ2NjL2NvbmZpZy90LXNsaWJnY2MtZWxmLXZlcgorLS0tIGdjYy00LjQuMC5vbGQvZ2NjL2NvbmZpZy90LXNsaWJnY2MtZWxmLXZlcgkyMDA1LTEwLTMxIDE4OjAzOjA4LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL3Qtc2xpYmdjYy1lbGYtdmVyCTIwMDgtMTAtMDcgMTk6Mjg6MTMuMDAwMDAwMDAwICswMjAwCitAQCAtOSw3ICs5LDcgQEAgU0hMSUJfTUFQID0gQHNobGliX21hcF9maWxlQAorIFNITElCX09CSlMgPSBAc2hsaWJfb2Jqc0AKKyBTSExJQl9ESVIgPSBAbXVsdGlsaWJfZGlyQAorIFNITElCX1NMSUJESVJfUVVBTCA9IEBzaGxpYl9zbGliZGlyX3F1YWxACistU0hMSUJfTEMgPSAtbGMKKytTSExJQl9MQyA9IEBsaWJnY2NfbGlibUAgLWxjCisgCisgU0hMSUJfTElOSyA9ICQoR0NDX0ZPUl9UQVJHRVQpICQoTElCR0NDMl9DRkxBR1MpIC1zaGFyZWQgLW5vZGVmYXVsdGxpYnMgXAorIAktV2wsLS1zb25hbWU9JChTSExJQl9TT05BTUUpIFwKK2RpZmYgLXJkdXAgZ2NjLTQuNC4wLm9sZC9saWJnY2MvY29uZmlndXJlIGdjYy00LjQuMC9saWJnY2MvY29uZmlndXJlCistLS0gZ2NjLTQuNC4wLm9sZC9saWJnY2MvY29uZmlndXJlCTIwMDgtMDctMTcgMTA6NDA6NTMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2xpYmdjYy9jb25maWd1cmUJMjAwOC0xMC0wNyAxOTo0MDo0OC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNzIsNyArMjcyLDcgQEAgUEFDS0FHRV9TVFJJTkc9J0dOVSBDIFJ1bnRpbWUgTGlicmFyeSAxLgorIFBBQ0tBR0VfQlVHUkVQT1JUPScnCisgCisgYWNfdW5pcXVlX2ZpbGU9InN0YXRpYy1vYmplY3QubWsiCistYWNfc3Vic3RfdmFycz0nU0hFTEwgUEFUSF9TRVBBUkFUT1IgUEFDS0FHRV9OQU1FIFBBQ0tBR0VfVEFSTkFNRSBQQUNLQUdFX1ZFUlNJT04gUEFDS0FHRV9TVFJJTkcgUEFDS0FHRV9CVUdSRVBPUlQgZXhlY19wcmVmaXggcHJlZml4IHByb2dyYW1fdHJhbnNmb3JtX25hbWUgYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgbG9jYWxzdGF0ZWRpciBsaWJkaXIgaW5jbHVkZWRpciBvbGRpbmNsdWRlZGlyIGluZm9kaXIgbWFuZGlyIGJ1aWxkX2FsaWFzIGhvc3RfYWxpYXMgdGFyZ2V0X2FsaWFzIERFRlMgRUNIT19DIEVDSE9fTiBFQ0hPX1QgTElCUyBsaWJnY2NfdG9wZGlyIGVuYWJsZV9zaGFyZWQgc2xpYmRpciBJTlNUQUxMX1BST0dSQU0gSU5TVEFMTF9TQ1JJUFQgSU5TVEFMTF9EQVRBIEFXSyBidWlsZCBidWlsZF9jcHUgYnVpbGRfdmVuZG9yIGJ1aWxkX29zIGhvc3QgaG9zdF9jcHUgaG9zdF92ZW5kb3IgaG9zdF9vcyBob3N0X25vbmNhbm9uaWNhbCBidWlsZF9saWJzdWJkaXIgYnVpbGRfc3ViZGlyIGhvc3Rfc3ViZGlyIHRhcmdldF9zdWJkaXIgQVIgYWNfY3RfQVIgTElQTyBhY19jdF9MSVBPIE5NIGFjX2N0X05NIFJBTkxJQiBhY19jdF9SQU5MSUIgU1RSSVAgYWNfY3RfU1RSSVAgTE5fUyBDQyBDRkxBR1MgTERGTEFHUyBDUFBGTEFHUyBhY19jdF9DQyBFWEVFWFQgT0JKRVhUIENQUCBkZWNpbWFsX2Zsb2F0IGVuYWJsZV9kZWNpbWFsX2Zsb2F0IGZpeGVkX3BvaW50IHZpc19oaWRlIHNldF9oYXZlX2NjX3RscyB0bWFrZV9maWxlIGV4dHJhX3BhcnRzIGFzbV9oaWRkZW5fb3AgTElCT0JKUyBMVExJQk9CSlMnCisrYWNfc3Vic3RfdmFycz0nU0hFTEwgUEFUSF9TRVBBUkFUT1IgUEFDS0FHRV9OQU1FIFBBQ0tBR0VfVEFSTkFNRSBQQUNLQUdFX1ZFUlNJT04gUEFDS0FHRV9TVFJJTkcgUEFDS0FHRV9CVUdSRVBPUlQgZXhlY19wcmVmaXggcHJlZml4IHByb2dyYW1fdHJhbnNmb3JtX25hbWUgYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgbG9jYWxzdGF0ZWRpciBsaWJkaXIgaW5jbHVkZWRpciBvbGRpbmNsdWRlZGlyIGluZm9kaXIgbWFuZGlyIGJ1aWxkX2FsaWFzIGhvc3RfYWxpYXMgdGFyZ2V0X2FsaWFzIERFRlMgRUNIT19DIEVDSE9fTiBFQ0hPX1QgTElCUyBsaWJnY2NfdG9wZGlyIGVuYWJsZV9zaGFyZWQgc2xpYmRpciBJTlNUQUxMX1BST0dSQU0gSU5TVEFMTF9TQ1JJUFQgSU5TVEFMTF9EQVRBIEFXSyBidWlsZCBidWlsZF9jcHUgYnVpbGRfdmVuZG9yIGJ1aWxkX29zIGhvc3QgaG9zdF9jcHUgaG9zdF92ZW5kb3IgaG9zdF9vcyBob3N0X25vbmNhbm9uaWNhbCBidWlsZF9saWJzdWJkaXIgYnVpbGRfc3ViZGlyIGhvc3Rfc3ViZGlyIHRhcmdldF9zdWJkaXIgQVIgYWNfY3RfQVIgTElQTyBhY19jdF9MSVBPIE5NIGFjX2N0X05NIFJBTkxJQiBhY19jdF9SQU5MSUIgU1RSSVAgYWNfY3RfU1RSSVAgTE5fUyBDQyBDRkxBR1MgTERGTEFHUyBDUFBGTEFHUyBhY19jdF9DQyBFWEVFWFQgT0JKRVhUIENQUCBkZWNpbWFsX2Zsb2F0IGVuYWJsZV9kZWNpbWFsX2Zsb2F0IGZpeGVkX3BvaW50IHZpc19oaWRlIHNldF9oYXZlX2NjX3RscyBMSUJHQ0NfTElCTSB0bWFrZV9maWxlIGV4dHJhX3BhcnRzIGFzbV9oaWRkZW5fb3AgTElCT0JKUyBMVExJQk9CSlMnCisgYWNfc3Vic3RfZmlsZXM9JycKKyBhY19wd2Q9YHB3ZGAKKyAKK0BAIC0zNTIyLDYgKzM1MjIsMzkgQEAgaWYgdGVzdCAiJGVuYWJsZV90bHMgJGdjY19jdl9oYXZlX2NjX3RscworIGZpCisgCisgCisrIyBPbiBwb3dlcnBjIGxpYmdjY19zIHJlZmVyZW5jZXMgY29weXNpZ25sIHdoaWNoIGlzIGEgbGlibSBmdW5jdGlvbiBidXQKKysjIGdsaWJjIGFwcGFyZW50bHkgYWxzbyBwcm92aWRlcyBpdCB2aWEgbGliYyBhcyBvcHBvc2VkIHRvIHVDbGliYyB3aGVyZQorKyMgaXQgbGl2ZXMgaW4gbGlibS4KKytlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBjb3B5c2lnbmwiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBjb3B5c2lnbmwuLi4gJEVDSE9fQyIgPiY2CisraWYgdGVzdCAiJHtsaWJnY2NfY3ZfY29weXNpZ25sX2xpYitzZXR9IiA9IHNldDsgdGhlbgorKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKytlbHNlCisrCisrICAgIGVjaG8gJyNpbmNsdWRlIDxmZWF0dXJlcy5oPicgPiBjb25mdGVzdC5jCisrICAgIGVjaG8gJ2ludCB0aGVfbGliYyA9IF9fVUNMSUJDX18gKyBfX3Bvd2VycGNfXzsnID4+IGNvbmZ0ZXN0LmMKKysgICAgbGliZ2NjX2N2X2NvcHlzaWdubF9saWI9Ii1sYyIKKysgICAgaWYgeyBhY190cnk9JyR7Q0MtY2N9IC1TIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QucyAxPiY1JworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0KKysgICAgdGhlbgorKwlsaWJnY2NfY3ZfY29weXNpZ25sX2xpYj0iLWxtIgorKyAgICBmaQorKyAgICBybSAtZiBjb25mdGVzdC4qCisrCisrZmkKKytlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGliZ2NjX2N2X2NvcHlzaWdubF9saWIiID4mNQorK2VjaG8gIiR7RUNIT19UfSRsaWJnY2NfY3ZfY29weXNpZ25sX2xpYiIgPiY2CisrCisrY2FzZSAvJHtsaWJnY2NfY3ZfY29weXNpZ25sX2xpYn0vIGluCisrICAvLWxtLykgTElCR0NDX0xJQk09IiRMSUJHQ0NfTElCTSAtbG0iIDs7CisrICAqKSBMSUJHQ0NfTElCTT0gOzsKKytlc2FjCisrCisrCisgIyBDb25kaXRpb25hbGl6ZSB0aGUgbWFrZWZpbGUgZm9yIHRoaXMgdGFyZ2V0IG1hY2hpbmUuCisgdG1ha2VfZmlsZV89CisgZm9yIGYgaW4gJHt0bWFrZV9maWxlfQorQEAgLTQyNDIsNiArNDI3NSw3IEBAIHMsQGVuYWJsZV9kZWNpbWFsX2Zsb2F0QCwkZW5hYmxlX2RlY2ltYWwKKyBzLEBmaXhlZF9wb2ludEAsJGZpeGVkX3BvaW50LDt0IHQKKyBzLEB2aXNfaGlkZUAsJHZpc19oaWRlLDt0IHQKKyBzLEBzZXRfaGF2ZV9jY190bHNALCRzZXRfaGF2ZV9jY190bHMsO3QgdAorK3MsQExJQkdDQ19MSUJNQCwkTElCR0NDX0xJQk0sO3QgdAorIHMsQHRtYWtlX2ZpbGVALCR0bWFrZV9maWxlLDt0IHQKKyBzLEBleHRyYV9wYXJ0c0AsJGV4dHJhX3BhcnRzLDt0IHQKKyBzLEBhc21faGlkZGVuX29wQCwkYXNtX2hpZGRlbl9vcCw7dCB0CitkaWZmIC1yZHVwIGdjYy00LjQuMC5vbGQvbGliZ2NjL2NvbmZpZ3VyZS5hYyBnY2MtNC40LjAvbGliZ2NjL2NvbmZpZ3VyZS5hYworLS0tIGdjYy00LjQuMC5vbGQvbGliZ2NjL2NvbmZpZ3VyZS5hYwkyMDA4LTA3LTE3IDEwOjQwOjUzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9saWJnY2MvY29uZmlndXJlLmFjCTIwMDgtMTAtMDcgMTk6MzQ6NDguMDAwMDAwMDAwICswMjAwCitAQCAtMjAzLDYgKzIwMywyNyBAQCBpZiB0ZXN0ICIkZW5hYmxlX3RscyAkZ2NjX2N2X2hhdmVfY2NfdGxzCisgZmkKKyBBQ19TVUJTVChzZXRfaGF2ZV9jY190bHMpCisgCisrIyBPbiBwb3dlcnBjIGxpYmdjY19zIHJlZmVyZW5jZXMgY29weXNpZ25sIHdoaWNoIGlzIGEgbGlibSBmdW5jdGlvbiBidXQKKysjIGdsaWJjIGFwcGFyZW50bHkgYWxzbyBwcm92aWRlcyBpdCB2aWEgbGliYyBhcyBvcHBvc2VkIHRvIHVDbGliYyB3aGVyZQorKyMgaXQgbGl2ZXMgaW4gbGlibS4KKytBQ19DQUNIRV9DSEVDSworKyAgbGliZ2NjX2N2X2NvcHlzaWdubF9saWIsCisrICAgIGVjaG8gJyNpbmNsdWRlIDxmZWF0dXJlcy5oPicgPiBjb25mdGVzdC5jCisrICAgIGVjaG8gJ2ludCB0aGVfbGliYyA9IF9fVUNMSUJDX18gKyBfX3Bvd2VycGNfXzsnID4+IGNvbmZ0ZXN0LmMKKysgICAgbGliZ2NjX2N2X2NvcHlzaWdubF9saWI9Ii1sYyIKKysgICAgaWYgQUNfVFJZX0NPTU1BTkQoJHtDQy1jY30gLVMgY29uZnRlc3QuYyAtbyBjb25mdGVzdC5zIDE+JkFTX01FU1NBR0VfTE9HX0ZEKQorKyAgICB0aGVuCisrCWxpYmdjY19jdl9jb3B5c2lnbmxfbGliPSItbG0iCisrICAgIGZpCisrICAgIHJtIC1mIGNvbmZ0ZXN0LioKKysgIF0pCisrCisrY2FzZSAvJHtsaWJnY2NfY3ZfY29weXNpZ25sX2xpYn0vIGluCisrICAvLWxtLykgTElCR0NDX0xJQk09IiRMSUJHQ0NfTElCTSAtbG0iIDs7CisrICAqKSBMSUJHQ0NfTElCTT0gOzsKKytlc2FjCisrQUNfU1VCU1QoTElCR0NDX0xJQk0pCisrCisgIyBDb25kaXRpb25hbGl6ZSB0aGUgbWFrZWZpbGUgZm9yIHRoaXMgdGFyZ2V0IG1hY2hpbmUuCisgdG1ha2VfZmlsZV89CisgZm9yIGYgaW4gJHt0bWFrZV9maWxlfQorZGlmZiAtcmR1cCBnY2MtNC40LjAub2xkL2xpYmdjYy9NYWtlZmlsZS5pbiBnY2MtNC40LjAvbGliZ2NjL01ha2VmaWxlLmluCistLS0gZ2NjLTQuNC4wLm9sZC9saWJnY2MvTWFrZWZpbGUuaW4JMjAwOC0wNy0xNyAxMDo0MDo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvbGliZ2NjL01ha2VmaWxlLmluCTIwMDgtMTAtMDcgMTk6Mjg6MTMuMDAwMDAwMDAwICswMjAwCitAQCAtNDAsNiArNDAsNyBAQCBlbmFibGVfc2hhcmVkID0gQGVuYWJsZV9zaGFyZWRACisgZGVjaW1hbF9mbG9hdCA9IEBkZWNpbWFsX2Zsb2F0QAorIGVuYWJsZV9kZWNpbWFsX2Zsb2F0ID0gQGVuYWJsZV9kZWNpbWFsX2Zsb2F0QAorIGZpeGVkX3BvaW50ID0gQGZpeGVkX3BvaW50QAorK0xJQkdDQ19MSUJNID0gQExJQkdDQ19MSUJNQAorIAorIGhvc3Rfbm9uY2Fub25pY2FsID0gQGhvc3Rfbm9uY2Fub25pY2FsQAorIAorQEAgLTc4Niw5ICs3ODcsMTAgQEAgbGliZ2NjX3MkKFNITElCX0VYVCk6ICQobGliZ2NjLXMtb2JqZWN0cworIAkJQG11bHRpbGliX2RpckAsJChNVUxUSURJUiksJChzdWJzdCBcCisgCQlAc2hsaWJfb2Jqc0AsJChvYmplY3RzKSwkKHN1YnN0IFwKKyAJCUBzaGxpYl9iYXNlX25hbWVALGxpYmdjY19zLCQoc3Vic3QgXAorKwkJQGxpYmdjY19saWJtQCwkKExJQkdDQ19MSUJNKSwkKHN1YnN0IFwKKyAJCUBzaGxpYl9tYXBfZmlsZUAsJChtYXBmaWxlKSwkKHN1YnN0IFwKKyAJCUBzaGxpYl9zbGliZGlyX3F1YWxALCQoTVVMVElPU1NVQkRJUiksJChzdWJzdCBcCistCQlAc2hsaWJfc2xpYmRpckAsJChzaGxpYl9zbGliZGlyKSwkKFNITElCX0xJTkspKSkpKSkpKQorKwkJQHNobGliX3NsaWJkaXJALCQoc2hsaWJfc2xpYmRpciksJChTSExJQl9MSU5LKSkpKSkpKSkpCisgCisgbGlidW53aW5kJChTSExJQl9FWFQpOiAkKGxpYnVud2luZC1zLW9iamVjdHMpICQoZXh0cmEtcGFydHMpCisgCSMgQG11bHRpbGliX2ZsYWdzQCBpcyBzdGlsbCBuZWVkZWQgYmVjYXVzZSB0aGlzIG1heSB1c2UKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMzkwLWFybS1zb2Z0ZmxvYXQtbGliZ2NjLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS8zOTAtYXJtLXNvZnRmbG9hdC1saWJnY2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZhMzBhMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvMzkwLWFybS1zb2Z0ZmxvYXQtbGliZ2NjLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK1tQQVRDSF0gYWRkIHRoZSBjb3JyZWN0IHN5bWJvbHMgdG8gbGliZ2NjIGZvciB1Y2xpYmMgYXJtIHNvZnRmbG9hdAorCitTaWduZWQtb2ZmLWJ5OiBQZXRlciBLb3JzZ2FhcmQgPGphY21ldEBzdW5zaXRlLmRrPgorLS0tCisgZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmggfCAgICAyICstCisgZ2NjL2NvbmZpZy9hcm0vdC1saW51eCAgICAgfCAgICA2ICsrKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitJbmRleDogZ2NjLTQuNC4wL2djYy9jb25maWcvYXJtL3QtbGludXgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2FybS90LWxpbnV4CisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvYXJtL3QtbGludXgKK0BAIC00LDcgKzQsMTEgQEAKKyAKKyBMSUIxQVNNU1JDID0gYXJtL2xpYjFmdW5jcy5hc20KKyBMSUIxQVNNRlVOQ1MgPSBfdWRpdnNpMyBfZGl2c2kzIF91bW9kc2kzIF9tb2RzaTMgX2R2bWRfbG54IF9jbHpzaTIgX2NsemRpMiBcCistCV9hcm1fYWRkc3ViZGYzIF9hcm1fYWRkc3Vic2YzCisrCV9hcm1fYWRkc3ViZGYzIF9hcm1fYWRkc3Vic2YzIFwKKysJX2FybV9uZWdkZjIgX2FybV9tdWxkaXZkZjMgX2FybV9jbXBkZjIgX2FybV91bm9yZGRmMiBcCisrCV9hcm1fZml4ZGZzaSBfYXJtX2ZpeHVuc2Rmc2kgX2FybV90cnVuY2Rmc2YyIFwKKysJX2FybV9uZWdzZjIgX2FybV9tdWxkaXZzZjMgX2FybV9jbXBzZjIgX2FybV91bm9yZHNmMiBcCisrCV9hcm1fZml4c2ZzaSBfYXJtX2ZpeHVuc3Nmc2kKKyAKKyAjIE1VTFRJTElCX09QVElPTlMgPSBtaGFyZC1mbG9hdC9tc29mdC1mbG9hdAorICMgTVVMVElMSUJfRElSTkFNRVMgPSBoYXJkLWZsb2F0IHNvZnQtZmxvYXQKK0luZGV4OiBnY2MtNC40LjAvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorQEAgLTYwLDcgKzYwLDcgQEAKKyAgICAle3NoYXJlZDotbGN9IFwKKyAgICAleyFzaGFyZWQ6JXtwcm9maWxlOi1sY19wfSV7IXByb2ZpbGU6LWxjfX0iCisgCistI2RlZmluZSBMSUJHQ0NfU1BFQyAiJXttc29mdC1mbG9hdDotbGZsb2F0fSAle21mbG9hdC1hYmk9c29mdCo6LWxmbG9hdH0gLWxnY2MiCisrI2RlZmluZSBMSUJHQ0NfU1BFQyAiLWxnY2MiCisgCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS80MDAtcHI0MjI4OS1maXgtbGliZmZpLWJ1aWxkLW9uLWFybS1vYWJpLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS80MDAtcHI0MjI4OS1maXgtbGliZmZpLWJ1aWxkLW9uLWFybS1vYWJpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NTQ4NzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4xLzQwMC1wcjQyMjg5LWZpeC1saWJmZmktYnVpbGQtb24tYXJtLW9hYmkucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorLS0tIGdjYy00LjMuNC9saWJmZmkvc3JjL2FybS9zeXN2LlMJCisrKysgZ2NjLTQuMy40L2xpYmZmaS9zcmMvYXJtL3N5c3YuUwkKK0BAIC0yMzUsNyArMjM1LDcgQEAgQVJNX0ZVTkNfU1RBUlQgZmZpX2Nsb3N1cmVfU1lTVgorIAlzdG1mZAlzcCEsIHtpcCwgbHJ9CisgCVVOV0lORCAuc2F2ZQl7cjAsIGxyfQorIAlhZGQJcjIsIHNwLCAjOAorLQkucGFkICMxNgorKwlVTldJTkQgLnBhZCAjMTYKKyAJc3ViCXNwLCBzcCwgIzE2CisgCXN0cglzcCwgW3NwLCAjOF0KKyAJYWRkCXIxLCBzcCwgIzgKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvNDEwLWxpYmdjY19laC5hLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMS80MTAtbGliZ2NjX2VoLmEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc1MzI2MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjEvNDEwLWxpYmdjY19laC5hLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0hpZ2hseSBpbnNwaXJlZCBieToKKyAgaHR0cDovL2xhbmRsZXkubmV0L2hnL2Fib3JpZ2luYWwvZmlsZS83ZTA3NDdhNjY1YWIvc291cmNlcy9wYXRjaGVzL2djYy1jb3JlLWxpYmdjY2VoLnBhdGNoCisKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvbGliZ2NjL01ha2VmaWxlLmluIGdjYy00LjQuMC9saWJnY2MvTWFrZWZpbGUuaW4KKy0tLSBnY2MtNC40LjAub3JpZy9saWJnY2MvTWFrZWZpbGUuaW4JMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvbGliZ2NjL01ha2VmaWxlLmluCTIwMTEtMDktMTIgMTc6MDU6MjUuMTIxMTI0NTU5ICswMjAwCitAQCAtNzU0LDggKzc1NCw5IEBACisgbGliZ2NjX3MkKFNITElCX0VYVCk6IGxpYnVud2luZCQoU0hMSUJfRVhUKQorIGVuZGlmCisgCisrYWxsOiBsaWJnY2NfZWguYQorIGlmZXEgKCQoZW5hYmxlX3NoYXJlZCkseWVzKQorLWFsbDogbGliZ2NjX2VoLmEgbGliZ2NjX3MkKFNITElCX0VYVCkKKythbGw6IGxpYmdjY19zJChTSExJQl9FWFQpCisgaWZuZXEgKCQoTElCVU5XSU5EKSwpCisgYWxsOiBsaWJ1bndpbmQkKFNITElCX0VYVCkKKyBlbmRpZgorQEAgLTkyNCwxMCArOTI1LDYgQEAKKyBpbnN0YWxsLXNoYXJlZDoKKyAJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikKKyAKKy0JJChJTlNUQUxMX0RBVEEpIGxpYmdjY19laC5hICQoREVTVERJUikkKGluc3RfbGliZGlyKS8KKy0JY2htb2QgNjQ0ICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY2NfZWguYQorLQkkKFJBTkxJQikgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCistCisgCSQoc3Vic3QgQG11bHRpbGliX2RpckAsJChNVUxUSURJUiksJChzdWJzdCBcCisgCQlAc2hsaWJfYmFzZV9uYW1lQCxsaWJnY2NfcywkKHN1YnN0IFwKKyAJCUBzaGxpYl9zbGliZGlyX3F1YWxALCQoTVVMVElPU1NVQkRJUiksJChTSExJQl9JTlNUQUxMKSkpKQorQEAgLTk0Miw2ICs5MzksMTAgQEAKKyAJY2htb2QgNjQ0ICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY292LmEKKyAJJChSQU5MSUIpICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY292LmEKKyAKKysJJChJTlNUQUxMX0RBVEEpIGxpYmdjY19laC5hICQoREVTVERJUikkKGluc3RfbGliZGlyKS8KKysJY2htb2QgNjQ0ICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY2NfZWguYQorKwkkKFJBTkxJQikgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCisrCisgCXBhcnRzPSIkKElOU1RBTExfUEFSVFMpIjsJCQkJXAorIAlmb3IgZmlsZSBpbiAkJHBhcnRzOyBkbwkJCQkJXAorIAkgIHJtIC1mICQoREVTVERJUikkKGluc3RfbGliZGlyKS8kJGZpbGU7CQlcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzEwMC1hbHBoYS1taWVlZS1kZWZhdWx0LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8xMDAtYWxwaGEtbWllZWUtZGVmYXVsdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2YwZGM0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8xMDAtYWxwaGEtbWllZWUtZGVmYXVsdC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvYWxwaGEvYWxwaGEuaCBnY2MtNC40LjAvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5oCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5oCTIwMDktMDItMjAgMTY6MjA6MzguMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvYWxwaGEvYWxwaGEuaAkyMDA5LTA1LTI3IDIxOjM3OjU4LjAwMDAwMDAwMCArMDIwMAorQEAgLTk1LDYgKzk1LDggQEAKKyAgIHdoaWxlICgwKQorICNlbmRpZgorIAorKyNkZWZpbmUgQ1BQX1NQRUMgIiV7IW5vLWllZWU6LW1pZWVlfSIKKysKKyAjZGVmaW5lIFdPUkRfU1dJVENIX1RBS0VTX0FSRyhTVFIpCQlcCisgICghc3RyY21wIChTVFIsICJycGF0aCIpIHx8IERFRkFVTFRfV09SRF9TV0lUQ0hfVEFLRVNfQVJHKFNUUikpCisgCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvYWxwaGEvYWxwaGEub3B0IGdjYy00LjQuMC9nY2MvY29uZmlnL2FscGhhL2FscGhhLm9wdAorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvYWxwaGEvYWxwaGEub3B0CTIwMDctMDgtMDIgMTI6NDk6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvYWxwaGEvYWxwaGEub3B0CTIwMDktMDUtMjcgMjE6Mzc6NTguMDAwMDAwMDAwICswMjAwCitAQCAtMzksNyArMzksNyBAQAorIFJlcXVlc3QgSUVFRS1jb25mb3JtYW50IG1hdGggbGlicmFyeSByb3V0aW5lcyAoT1NGLzEpCisgCisgbWllZWUKKy1UYXJnZXQgUmVwb3J0IFJlamVjdE5lZ2F0aXZlIE1hc2soSUVFRSkKKytUYXJnZXQgUmVwb3J0IE1hc2soSUVFRSkKKyBFbWl0IElFRUUtY29uZm9ybWFudCBjb2RlLCB3aXRob3V0IGluZXhhY3QgZXhjZXB0aW9ucworIAorIG1pZWVlLXdpdGgtaW5leGFjdApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8xMTAtdHJhbXBvbGluZXdhcm4ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzExMC10cmFtcG9saW5ld2Fybi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2VmNDk5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8xMTAtdHJhbXBvbGluZXdhcm4ucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvYnVpbHRpbnMuYyBnY2MtNC40LjAvZ2NjL2J1aWx0aW5zLmMKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvYnVpbHRpbnMuYwkyMDA5LTAzLTMwIDE5OjQyOjI3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvYnVpbHRpbnMuYwkyMDA5LTA1LTI3IDIxOjM4OjAxLjAwMDAwMDAwMCArMDIwMAorQEAgLTU3NjgsNiArNTc2OCw5IEBACisgICB0cmFtcG9saW5lc19jcmVhdGVkID0gMTsKKyAgIElOSVRJQUxJWkVfVFJBTVBPTElORSAocl90cmFtcCwgcl9mdW5jLCByX2NoYWluKTsKKyAKKysgIGlmICh3YXJuX3RyYW1wb2xpbmVzKQorKyAgICB3YXJuaW5nIChPUFRfV3RyYW1wb2xpbmVzLCAiZ2VuZXJhdGluZyB0cmFtcG9saW5lIGluIG9iamVjdCAocmVxdWlyZXMgZXhlY3V0YWJsZSBzdGFjaykiKTsKKysKKyAgIHJldHVybiBjb25zdDBfcnR4OworIH0KKyAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbW1vbi5vcHQgZ2NjLTQuNC4wL2djYy9jb21tb24ub3B0CistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbW1vbi5vcHQJMjAwOS0wMy0yOCAxODoyODo0NS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbW1vbi5vcHQJMjAwOS0wNS0yNyAyMTozODowMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xOTcsNiArMTk3LDEwIEBACisgQ29tbW9uIFZhcih3YXJuX3R5cGVfbGltaXRzKSBJbml0KC0xKSBXYXJuaW5nCisgV2FybiBpZiBhIGNvbXBhcmlzb24gaXMgYWx3YXlzIHRydWUgb3IgYWx3YXlzIGZhbHNlIGR1ZSB0byB0aGUgbGltaXRlZCByYW5nZSBvZiB0aGUgZGF0YSB0eXBlCisgCisrV3RyYW1wb2xpbmVzCisrQ29tbW9uIFZhcih3YXJuX3RyYW1wb2xpbmVzKSBJbml0KDEpCisrV2FybiB3aGVuZXZlciBhIHRyYW1wb2xpbmUgaXMgZ2VuZXJhdGVkCisrCisgV3VuaW5pdGlhbGl6ZWQKKyBDb21tb24gVmFyKHdhcm5fdW5pbml0aWFsaXplZCkgV2FybmluZworIFdhcm4gYWJvdXQgdW5pbml0aWFsaXplZCBhdXRvbWF0aWMgdmFyaWFibGVzCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzEyMC1qYXZhLW5vbXVsdGkucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzEyMC1qYXZhLW5vbXVsdGkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ1NDc5YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjIvMTIwLWphdmEtbm9tdWx0aS5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2xpYmphdmEvY29uZmlndXJlIGdjYy00LjQuMC9saWJqYXZhL2NvbmZpZ3VyZQorLS0tIGdjYy00LjQuMC5vcmlnL2xpYmphdmEvY29uZmlndXJlCTIwMDktMDQtMjEgMTE6MDg6MDguMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2xpYmphdmEvY29uZmlndXJlCTIwMDktMDUtMjcgMjE6Mzg6MDMuMDAwMDAwMDAwICswMjAwCitAQCAtMTAyMSw2ICsxMDIxLDggQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9eWVzCisgICAtLWVuYWJsZS1qYXZhLW1haW50YWluZXItbW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3cgcmVidWlsZGluZyBvZiAuY2xhc3MgYW5kIC5oIGZpbGVzCisrICAtLWVuYWJsZS1saWJqYXZhLW11bHRpbGliCisrICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBsaWJqYXZhIGFzIG11bHRpbGliCisgICAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyAgc3BlZWRzIHVwIG9uZS10aW1lIGJ1aWxkCisgICAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICAgZG8gbm90IHJlamVjdCBzbG93IGRlcGVuZGVuY3kgZXh0cmFjdG9ycworICAgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlICBlbmFibGUgbWFrZSBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIG5vdCB1c2VmdWwKK0BAIC0xOTczLDYgKzE5NzUsMTYgQEAKKyBmaQorIAorIAorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJqYXZhLW11bHRpbGliIHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke2VuYWJsZV9saWJqYXZhX211bHRpbGliK3NldH0iID0gc2V0OyB0aGVuCisrICBlbmFibGV2YWw9JGVuYWJsZV9saWJqYXZhX211bHRpbGliOworK2ZpCisrCisraWYgdGVzdCAiJGVuYWJsZV9saWJqYXZhX211bHRpbGliIiA9IG5vOyB0aGVuCisrICBtdWx0aWxpYj1ubworKyAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAtLWRpc2FibGUtbXVsdGlsaWIiCisrZmkKKysKKyAjIEl0IG1heSBub3QgYmUgc2FmZSB0byBydW4gbGlua2luZyB0ZXN0cyBpbiBBQ19QUk9HX0NDL0FDX1BST0dfQ1hYLgorIAorIAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9saWJqYXZhL2NvbmZpZ3VyZS5hYyBnY2MtNC40LjAvbGliamF2YS9jb25maWd1cmUuYWMKKy0tLSBnY2MtNC40LjAub3JpZy9saWJqYXZhL2NvbmZpZ3VyZS5hYwkyMDA5LTA0LTA5IDIzOjU0OjI4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9saWJqYXZhL2NvbmZpZ3VyZS5hYwkyMDA5LTA1LTI3IDIxOjM4OjAzLjAwMDAwMDAwMCArMDIwMAorQEAgLTEzOSw2ICsxMzksMTMgQEAKKyAJW2FsbG93IHJlYnVpbGRpbmcgb2YgLmNsYXNzIGFuZCAuaCBmaWxlc10pKQorIEFNX0NPTkRJVElPTkFMKEpBVkFfTUFJTlRBSU5FUl9NT0RFLCB0ZXN0ICIkZW5hYmxlX2phdmFfbWFpbnRhaW5lcl9tb2RlIiA9IHllcykKKyAKKytBQ19BUkdfRU5BQkxFKGxpYmphdmEtbXVsdGlsaWIsCisrCUFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1saWJqYXZhLW11bHRpbGliXSwgW2J1aWxkIGxpYmphdmEgYXMgbXVsdGlsaWJdKSkKKytpZiB0ZXN0ICIkZW5hYmxlX2xpYmphdmFfbXVsdGlsaWIiID0gbm87IHRoZW4KKysgIG11bHRpbGliPW5vCisrICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzIC0tZGlzYWJsZS1tdWx0aWxpYiIKKytmaQorKworICMgSXQgbWF5IG5vdCBiZSBzYWZlIHRvIHJ1biBsaW5raW5nIHRlc3RzIGluIEFDX1BST0dfQ0MvQUNfUFJPR19DWFguCisgR0NDX05PX0VYRUNVVEFCTEVTCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzEzMC1jcm9zcy1jb21waWxlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8xMzAtY3Jvc3MtY29tcGlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmZlN2M4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8xMzAtY3Jvc3MtY29tcGlsZS5wYXRjaApAQCAtMCwwICsxLDM5IEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWd1cmUgZ2NjLTQuNC4wL2djYy9jb25maWd1cmUKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlndXJlCTIwMDktMDMtMjQgMTg6NDY6MDMuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWd1cmUJMjAwOS0wNS0yNyAyMTozODowNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMzk5Nyw3ICsxMzk5Nyw3IEBACisgCSAgICB8IHBvd2VycGMqLSotKixwb3dlcnBjNjQqLSotKikKKyAJCUNST1NTPSIkQ1JPU1MgLUROQVRJVkVfQ1JPU1MiIDs7CisgCWVzYWMKKy1lbGlmIHRlc3QgIngkVEFSR0VUX1NZU1RFTV9ST09UIiAhPSB4OyB0aGVuCisrZWxpZiB0ZXN0ICJ4JFRBUkdFVF9TWVNURU1fUk9PVCIgIT0geCAtbyAkYnVpbGQgIT0gJGhvc3Q7IHRoZW4KKyAgICAgICAgIFNZU1RFTV9IRUFERVJfRElSPSRidWlsZF9zeXN0ZW1faGVhZGVyX2RpcgorIGZpCisgCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWd1cmUuYWMgZ2NjLTQuNC4wL2djYy9jb25maWd1cmUuYWMKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlndXJlLmFjCTIwMDktMDMtMjQgMTg6NDY6MDMuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWd1cmUuYWMJMjAwOS0wNS0yNyAyMTozODowNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNzIwLDcgKzE3MjAsNyBAQAorIAkgICAgfCBwb3dlcnBjKi0qLSoscG93ZXJwYzY0Ki0qLSopCisgCQlDUk9TUz0iJENST1NTIC1ETkFUSVZFX0NST1NTIiA7OworIAllc2FjCistZWxpZiB0ZXN0ICJ4JFRBUkdFVF9TWVNURU1fUk9PVCIgIT0geDsgdGhlbgorK2VsaWYgdGVzdCAieCRUQVJHRVRfU1lTVEVNX1JPT1QiICE9IHggLW8gJGJ1aWxkICE9ICRob3N0OyB0aGVuCisgICAgICAgICBTWVNURU1fSEVBREVSX0RJUj0kYnVpbGRfc3lzdGVtX2hlYWRlcl9kaXIgCisgZmkKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL3Vud2luZC1kdzIuYyBnY2MtNC40LjAvZ2NjL3Vud2luZC1kdzIuYworLS0tIGdjYy00LjQuMC5vcmlnL2djYy91bndpbmQtZHcyLmMJMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL3Vud2luZC1kdzIuYwkyMDA5LTA1LTI3IDIxOjM4OjA2LjAwMDAwMDAwMCArMDIwMAorQEAgLTMyOSw5ICszMjksMTEgQEAKKyB9CisgI2VuZGlmCisgCisrI2lmbmRlZiBpbmhpYml0X2xpYmMKKyAjaWZkZWYgTURfVU5XSU5EX1NVUFBPUlQKKyAjaW5jbHVkZSBNRF9VTldJTkRfU1VQUE9SVAorICNlbmRpZgorKyNlbmRpZgorIAwKKyAvKiBFeHRyYWN0IGFueSBpbnRlcmVzdGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBDSUUgZm9yIHRoZSB0cmFuc2xhdGlvbgorICAgIHVuaXQgRiBiZWxvbmdzIHRvLiAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgYnl0ZSBhZnRlciB0aGUgYXVnbWVudGF0aW9uLApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8xNDAtZGVmYXVsdC1mb3JtYXQtc2VjdXJpdHkucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzE0MC1kZWZhdWx0LWZvcm1hdC1zZWN1cml0eS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTk0MmY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8xNDAtZGVmYXVsdC1mb3JtYXQtc2VjdXJpdHkucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvYy1jb21tb24uYyBnY2MtNC40LjAvZ2NjL2MtY29tbW9uLmMKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvYy1jb21tb24uYwkyMDA5LTAzLTMwIDE5OjQyOjI3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvYy1jb21tb24uYwkyMDA5LTA1LTI3IDIxOjM4OjA4LjAwMDAwMDAwMCArMDIwMAorQEAgLTMwMSw3ICszMDEsNyBAQAorIC8qIFdhcm4gYWJvdXQgZm9ybWF0L2FyZ3VtZW50IGFub21hbGllcyBpbiBjYWxscyB0byBmb3JtYXR0ZWQgSS9PIGZ1bmN0aW9ucworICAgICgqcHJpbnRmLCAqc2NhbmYsIHN0cmZ0aW1lLCBzdHJmbW9uLCBldGMuKS4gICovCisgCistaW50IHdhcm5fZm9ybWF0OworK2ludCB3YXJuX2Zvcm1hdCA9IDE7CisgCisgLyogV2FybiBhYm91dCB1c2luZyBfX251bGwgKGFzIE5VTEwgaW4gQysrKSBhcyBzZW50aW5lbC4gIEZvciBjb2RlIGNvbXBpbGVkCisgICAgd2l0aCBHQ0MgdGhpcyBkb2Vzbid0IG1hdHRlciBhcyBfX251bGwgaXMgZ3VhcmFudGVlZCB0byBoYXZlIHRoZSByaWdodAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvYy5vcHQgZ2NjLTQuNC4wL2djYy9jLm9wdAorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jLm9wdAkyMDA5LTAzLTE4IDIyOjE0OjUzLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuMC9nY2MvYy5vcHQJMjAwOS0wNS0yNyAyMTozODowOC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMzYsNyArMjM2LDcgQEAKKyBXYXJuIGFib3V0IGZvcm1hdCBzdHJpbmdzIHRoYXQgY29udGFpbiBOVUwgYnl0ZXMKKyAKKyBXZm9ybWF0LXNlY3VyaXR5CistQyBPYmpDIEMrKyBPYmpDKysgVmFyKHdhcm5fZm9ybWF0X3NlY3VyaXR5KSBXYXJuaW5nCisrQyBPYmpDIEMrKyBPYmpDKysgVmFyKHdhcm5fZm9ybWF0X3NlY3VyaXR5KSBJbml0KDEpIFdhcm5pbmcKKyBXYXJuIGFib3V0IHBvc3NpYmxlIHNlY3VyaXR5IHByb2JsZW1zIHdpdGggZm9ybWF0IGZ1bmN0aW9ucworIAorIFdmb3JtYXQteTJrCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9kb2MvaW52b2tlLnRleGkgZ2NjLTQuNC4wL2djYy9kb2MvaW52b2tlLnRleGkKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvZG9jL2ludm9rZS50ZXhpCTIwMDktMDQtMDEgMDk6MTg6NDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9kb2MvaW52b2tlLnRleGkJMjAwOS0wNS0yNyAyMTozODowOC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yODY3LDYgKzI4NjcsOSBAQAorIEBvcHRpb257LVdmb3JtYXQtbm9ubGl0ZXJhbH0sIEBvcHRpb257LVdmb3JtYXQtc2VjdXJpdHl9LCBhbmQKKyBAb3B0aW9uey1XZm9ybWF0PTJ9IGFyZSBhdmFpbGFibGUsIGJ1dCBhcmUgbm90IGluY2x1ZGVkIGluIEBvcHRpb257LVdhbGx9LgorIAorK05PVEU6IEluIEdlbnRvbywgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGZvciBDLCBDKyssIE9iakMsIE9iakMrKy4KKytUbyBkaXNhYmxlLCB1c2UgQG9wdGlvbnstV2Zvcm1hdD0wfS4KKysKKyBAaXRlbSAtV2Zvcm1hdC15MmsKKyBAb3BpbmRleCBXZm9ybWF0LXkyaworIEBvcGluZGV4IFduby1mb3JtYXQteTJrCitAQCAtMjkyMCw2ICsyOTIzLDExIEBACisgaW4gZnV0dXJlIHdhcm5pbmdzIG1heSBiZSBhZGRlZCB0byBAb3B0aW9uey1XZm9ybWF0LXNlY3VyaXR5fSB0aGF0IGFyZSBub3QKKyBpbmNsdWRlZCBpbiBAb3B0aW9uey1XZm9ybWF0LW5vbmxpdGVyYWx9LikKKyAKKytOT1RFOiBJbiBHZW50b28sIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBmb3IgQywgQysrLCBPYmpDLCBPYmpDKysuCisrVG8gZGlzYWJsZSwgdXNlIEBvcHRpb257LVduby1mb3JtYXQtc2VjdXJpdHl9LCBvciBkaXNhYmxlIGFsbCBmb3JtYXQgd2FybmluZ3MKKyt3aXRoIEBvcHRpb257LVdmb3JtYXQ9MH0uICBUbyBtYWtlIGZvcm1hdCBzZWN1cml0eSB3YXJuaW5ncyBmYXRhbCwgc3BlY2lmeQorK0BvcHRpb257LVdlcnJvcj1mb3JtYXQtc2VjdXJpdHl9LgorKworIEBpdGVtIC1XZm9ybWF0PTIKKyBAb3BpbmRleCBXZm9ybWF0PTIKKyBAb3BpbmRleCBXbm8tZm9ybWF0PTIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjIvMTUwLWRlZmF1bHQtZm9ydGlmeS1zb3VyY2UucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzE1MC1kZWZhdWx0LWZvcnRpZnktc291cmNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ODIyN2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzE1MC1kZWZhdWx0LWZvcnRpZnktc291cmNlLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2RvYy9pbnZva2UudGV4aSBnY2MtNC40LjAvZ2NjL2RvYy9pbnZva2UudGV4aQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9kb2MvaW52b2tlLnRleGkJMjAwOS0wNS0yNyAyMTozODoxMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL2RvYy9pbnZva2UudGV4aQkyMDA5LTA1LTI3IDIxOjM4OjExLjAwMDAwMDAwMCArMDIwMAorQEAgLTU0MTEsNiArNTQxMSwxMSBAQAorIFBsZWFzZSBub3RlIHRoZSB3YXJuaW5nIHVuZGVyIEBvcHRpb257LWZnY3NlfSBhYm91dAorIGludm9raW5nIEBvcHRpb257LU8yfSBvbiBwcm9ncmFtcyB0aGF0IHVzZSBjb21wdXRlZCBnb3Rvcy4KKyAKKytOT1RFOiBJbiBHZW50b28sIEBvcHRpb257LURfRk9SVElGWV9TT1VSQ0U9Mn0gaXMgc2V0IGJ5IGRlZmF1bHQsIGFuZCBpcworK2FjdGl2YXRlZCB3aGVuIEBvcHRpb257LU99IGlzIHNldCB0byAyIG9yIGhpZ2hlci4gIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsCisrY29tcGlsZS10aW1lIGFuZCBydW4tdGltZSBjaGVja3MgZm9yIHNldmVyYWwgbGliYyBmdW5jdGlvbnMuICBUbyBkaXNhYmxlLAorK3NwZWNpZnkgZWl0aGVyIEBvcHRpb257LVVfRk9SVElGWV9TT1VSQ0V9IG9yIEBvcHRpb257LURfRk9SVElGWV9TT1VSQ0U9MH0uCisrCisgQGl0ZW0gLU8zCisgQG9waW5kZXggTzMKKyBPcHRpbWl6ZSB5ZXQgbW9yZS4gIEBvcHRpb257LU8zfSB0dXJucyBvbiBhbGwgb3B0aW1pemF0aW9ucyBzcGVjaWZpZWQKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2djYy5jIGdjYy00LjQuMC9nY2MvZ2NjLmMKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvZ2NjLmMJMjAwOS0wMy0xNyAyMjoyNTo1OS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC40LjAvZ2NjL2djYy5jCTIwMDktMDUtMjcgMjE6Mzg6MTEuMDAwMDAwMDAwICswMjAwCitAQCAtODA3LDYgKzgwNyw3IEBACisgICV7SH0gJUMgJXtEKiZVKiZBKn0gJXtpKn0gJVogJWlcCisgICV7Zm11ZGZsYXA6LURfTVVERkxBUCAtaW5jbHVkZSBtZi1ydW50aW1lLmh9XAorICAle2ZtdWRmbGFwdGg6LURfTVVERkxBUCAtRF9NVURGTEFQVEggLWluY2x1ZGUgbWYtcnVudGltZS5ofVwKKysgJXshRF9GT1JUSUZZX1NPVVJDRToleyFEX0ZPUlRJRllfU09VUkNFPSo6JXshVV9GT1JUSUZZX1NPVVJDRTotRF9GT1JUSUZZX1NPVVJDRT0yfX19XAorICAle0V8TXxNTTolV3tvKn19IjsKKyAKKyAvKiBUaGlzIGNvbnRhaW5zIGNwcCBvcHRpb25zIHdoaWNoIGFyZSBjb21tb24gd2l0aCBjYzFfb3B0aW9ucyBhbmQgYXJlIHBhc3NlZApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8xNjAtbmV0YnNkLXN5bWJvbGljLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8xNjAtbmV0YnNkLXN5bWJvbGljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMWYxY2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzE2MC1uZXRic2Qtc3ltYm9saWMucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL25ldGJzZC1lbGYuaCBnY2MtNC40LjAvZ2NjL2NvbmZpZy9uZXRic2QtZWxmLmgKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL25ldGJzZC1lbGYuaAkyMDA3LTA5LTAzIDE4OjE0OjA0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL25ldGJzZC1lbGYuaAkyMDA5LTA1LTI3IDIxOjM4OjE0LjAwMDAwMDAwMCArMDIwMAorQEAgLTgyLDYgKzgyLDcgQEAKKyAjZGVmaW5lIE5FVEJTRF9MSU5LX1NQRUNfRUxGIFwKKyAgICIle2Fzc2VydCp9ICV7Uip9ICV7cnBhdGgqfSBcCisgICAgJXtzaGFyZWQ6LXNoYXJlZH0gXAorKyAgICV7c3ltYm9saWM6LUJzeW1ib2xpY30gXAorICAgICV7IXNoYXJlZDogXAorICAgICAgLWRjIC1kcCBcCisgICAgICAleyFub3N0ZGxpYjogXApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8xNzAtc3BhcmM2NC1ic2QucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzE3MC1zcGFyYzY0LWJzZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWE1ZWVhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8xNzAtc3BhcmM2NC1ic2QucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL3NwYXJjL2ZyZWVic2QuaCBnY2MtNC40LjAvZ2NjL2NvbmZpZy9zcGFyYy9mcmVlYnNkLmgKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL3NwYXJjL2ZyZWVic2QuaAkyMDA3LTA4LTAyIDEyOjQ5OjMxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL3NwYXJjL2ZyZWVic2QuaAkyMDA5LTA1LTI3IDIxOjM4OjE2LjAwMDAwMDAwMCArMDIwMAorQEAgLTI1LDkgKzI1LDIyIEBACisgLyogRnJlZUJTRCBuZWVkcyB0aGUgcGxhdGZvcm0gbmFtZSAoc3BhcmM2NCkgZGVmaW5lZC4KKyAgICBFbWFjcyBuZWVkcyB0byBrbm93IGlmIHRoZSBhcmNoIGlzIDY0IG9yIDMyLWJpdHMuICAqLworIAorLSN1bmRlZiAgQ1BQX0NQVTY0X0RFRkFVTFRfU1BFQworLSNkZWZpbmUgQ1BQX0NQVTY0X0RFRkFVTFRfU1BFQyBcCistICAiLURfX3NwYXJjNjRfXyAtRF9fc3BhcmNfdjlfXyAtRF9fc3BhcmN2OSAtRF9fYXJjaDY0X18iCisrI3VuZGVmICBGQlNEX1RBUkdFVF9DUFVfQ1BQX0JVSUxUSU5TCisrI2RlZmluZSBGQlNEX1RBUkdFVF9DUFVfQ1BQX0JVSUxUSU5TKCkgICAgICAgICAgICAgICAgICBcCisrICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgaWYgKFRBUkdFVF9BUkNINjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19zcGFyYzY0X18iKTsgICAgICAgICAgICAgICBcCisrICAgICAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19zcGFyY192OV9fIik7ICAgICAgICAgICAgICBcCisrICAgICAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19zcGFyY3Y5Iik7ICAgICAgICAgICAgICAgICBcCisrICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBidWlsdGluX2RlZmluZSAoIl9fc3BhcmMiKTsgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjX18iKTsgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB3aGlsZSAoMCkKKysKKyAKKyAjZGVmaW5lIExJTktfU1BFQyAiJShsaW5rX2FyY2gpCQkJCQkJXAorICAgJXshbW5vLXJlbGF4OiV7IXI6LXJlbGF4fX0JCQkJCQlcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzE4MC1saWJnb21wLW5vLXdlcnJvci5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjIvMTgwLWxpYmdvbXAtbm8td2Vycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMmFkZjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzE4MC1saWJnb21wLW5vLXdlcnJvci5wYXRjaApAQCAtMCwwICsxLDEyIEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2xpYmdvbXAvY29uZmlndXJlIGdjYy00LjQuMC9saWJnb21wL2NvbmZpZ3VyZQorLS0tIGdjYy00LjQuMC5vcmlnL2xpYmdvbXAvY29uZmlndXJlCTIwMDktMDQtMjEgMTE6MDg6MDguMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2xpYmdvbXAvY29uZmlndXJlCTIwMDktMDUtMjcgMjE6Mzg6MTkuMDAwMDAwMDAwICswMjAwCitAQCAtMzMzNCw3ICszMzM0LDcgQEAKKyAKKyAjIEFkZCAtV2FsbCAtV2Vycm9yIGlmIHdlIGFyZSB1c2luZyBHQ0MuCisgaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiOyB0aGVuCistICBYQ0ZMQUdTPSIkWENGTEFHUyAtV2FsbCAtV2Vycm9yIgorKyAgWENGTEFHUz0iJFhDRkxBR1MgLVdhbGwiCisgZmkKKyAKKyAjIEZpbmQgb3RoZXIgcHJvZ3JhbXMgd2UgbmVlZC4KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjIvMTkwLWZsYXR0ZW4tc3dpdGNoLXN0bXQtMDAucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzE5MC1mbGF0dGVuLXN3aXRjaC1zdG10LTAwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYjFjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzE5MC1mbGF0dGVuLXN3aXRjaC1zdG10LTAwLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL3N0bXQuYyBnY2MtNC40LjAvZ2NjL3N0bXQuYworLS0tIGdjYy00LjQuMC5vcmlnL2djYy9zdG10LmMJMjAwOS0wMi0yNyAyMDo0OTo0Mi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC40LjAvZ2NjL3N0bXQuYwkyMDA5LTA1LTI3IDIxOjM4OjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTIzNzYsNyArMjM3NiwxMSBAQAorIAkgIHVzZV9jb3N0X3RhYmxlCisgCSAgICA9IChUUkVFX0NPREUgKG9yaWdfdHlwZSkgIT0gRU5VTUVSQUxfVFlQRQorIAkgICAgICAgJiYgZXN0aW1hdGVfY2FzZV9jb3N0cyAoY2FzZV9saXN0KSk7CistCSAgYmFsYW5jZV9jYXNlX25vZGVzICgmY2FzZV9saXN0LCBOVUxMKTsKKysJICAvKiBXaGVuIG9wdGltaXppbmcgZm9yIHNpemUsIHdlIHdhbnQgYSBzdHJhaWdodCBsaXN0IHRvIGF2b2lkCisrCSAgICAganVtcHMgYXMgbXVjaCBhcyBwb3NzaWJsZS4gVGhpcyBiYXNpY2FsbHkgY3JlYXRlcyBhbiBpZi1lbHNlCisrCSAgICAgY2hhaW4uICAqLworKwkgIGlmICghb3B0aW1pemVfc2l6ZSkKKysJICAgIGJhbGFuY2VfY2FzZV9ub2RlcyAoJmNhc2VfbGlzdCwgTlVMTCk7CisgCSAgZW1pdF9jYXNlX25vZGVzIChpbmRleCwgY2FzZV9saXN0LCBkZWZhdWx0X2xhYmVsLCBpbmRleF90eXBlKTsKKyAJICBpZiAoZGVmYXVsdF9sYWJlbCkKKyAJICAgIGVtaXRfanVtcCAoZGVmYXVsdF9sYWJlbCk7CitAQCAtMjk0Miw2ICsyOTQ2LDcgQEAKKyAJICAgIHsKKyAJICAgICAgaWYgKCFub2RlX2hhc19sb3dfYm91bmQgKG5vZGUsIGluZGV4X3R5cGUpKQorIAkJeworKwkJICBpZiAoIW9wdGltaXplX3NpemUpIC8qIGRvbid0IGpsIHRvIHRoZSAuZGVmYXVsdF9sYWJlbC4gKi8KKyAJCSAgZW1pdF9jbXBfYW5kX2p1bXBfaW5zbnMgKGluZGV4LAorIAkJCQkJICAgY29udmVydF9tb2RlcworIAkJCQkJICAgKG1vZGUsIGltb2RlLApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8yMDAtbGliaWJlcnR5LmgtYXNwcmludGYucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzIwMC1saWJpYmVydHkuaC1hc3ByaW50Zi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjc4NGJlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8yMDAtbGliaWJlcnR5LmgtYXNwcmludGYucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9pbmNsdWRlL2xpYmliZXJ0eS5oIGdjYy00LjQuMC9pbmNsdWRlL2xpYmliZXJ0eS5oCistLS0gZ2NjLTQuNC4wLm9yaWcvaW5jbHVkZS9saWJpYmVydHkuaAkyMDA4LTA2LTI0IDAzOjQyOjMxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9pbmNsdWRlL2xpYmliZXJ0eS5oCTIwMDktMDUtMjcgMjE6Mzg6MjQuMDAwMDAwMDAwICswMjAwCitAQCAtNTk1LDggKzU5NSwxMSBAQAorIC8qIExpa2Ugc3ByaW50ZiBidXQgcHJvdmlkZXMgYSBwb2ludGVyIHRvIG1hbGxvYydkIHN0b3JhZ2UsIHdoaWNoIG11c3QKKyAgICBiZSBmcmVlZCBieSB0aGUgY2FsbGVyLiAgKi8KKyAKKysvKiBhc3ByaW50ZiBtYXkgYmUgZGVjbGFyZWQgYXMgYSBtYWNybyBieSBnbGliYyB3aXRoIF9fVVNFX0ZPUlRJRllfTEVWRUwuICAqLworKyNpZm5kZWYgYXNwcmludGYKKyBleHRlcm4gaW50IGFzcHJpbnRmIChjaGFyICoqLCBjb25zdCBjaGFyICosIC4uLikgQVRUUklCVVRFX1BSSU5URl8yOworICNlbmRpZgorKyNlbmRpZgorIAorICNpZiAhSEFWRV9ERUNMX1ZBU1BSSU5URgorIC8qIExpa2UgdnNwcmludGYgYnV0IHByb3ZpZGVzIGEgcG9pbnRlciB0byBtYWxsb2MnZCBzdG9yYWdlLCB3aGljaApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8yMTAtYXJtLXVuYnJlYWstYXJtdjR0LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8yMTAtYXJtLXVuYnJlYWstYXJtdjR0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZWFmYzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzIxMC1hcm0tdW5icmVhay1hcm12NHQucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggZ2NjLTQuNC4wL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAkyMDA3LTExLTA4IDE0OjQ0OjA5LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgJMjAwOS0wNS0yNyAyMTozODoyNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC00NCw3ICs0NCw3IEBACisgICAgVGhlIEFSTTEwVERNSSBjb3JlIGlzIHRoZSBkZWZhdWx0IGZvciBhcm12NXQsIHNvIHNldAorICAgIFNVQlRBUkdFVF9DUFVfREVGQVVMVCB0byBhY2hpZXZlIHRoaXMuICAqLworICN1bmRlZiAgU1VCVEFSR0VUX0NQVV9ERUZBVUxUCistI2RlZmluZSBTVUJUQVJHRVRfQ1BVX0RFRkFVTFQgVEFSR0VUX0NQVV9hcm0xMHRkbWkKKysjZGVmaW5lIFNVQlRBUkdFVF9DUFVfREVGQVVMVCBUQVJHRVRfQ1BVX2FybTl0ZG1pCisgCisgLyogVEFSR0VUX0JJR19FTkRJQU5fREVGQVVMVCBpcyBzZXQgaW4KKyAgICBjb25maWcuZ2NjIGZvciBiaWcgZW5kaWFuIGNvbmZpZ3VyYXRpb25zLiAgKi8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjIvMjIwLWxpYmliZXJ0eS1waWMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzIyMC1saWJpYmVydHktcGljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMTNhNGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzIyMC1saWJpYmVydHktcGljLnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvbGliaWJlcnR5L01ha2VmaWxlLmluIGdjYy00LjQuMC9saWJpYmVydHkvTWFrZWZpbGUuaW4KKy0tLSBnY2MtNC40LjAub3JpZy9saWJpYmVydHkvTWFrZWZpbGUuaW4JMjAwOC0xMC0yMiAxNTozMDoxOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvbGliaWJlcnR5L01ha2VmaWxlLmluCTIwMDktMDUtMjcgMjE6Mzg6MjkuMDAwMDAwMDAwICswMjAwCitAQCAtMjI3LDYgKzIyNyw3IEBACisgCSAgJChBUikgJChBUl9GTEFHUykgJChUQVJHRVRMSUIpIFwKKyAJICAgICQoUkVRVUlSRURfT0ZJTEVTKSAkKEVYVFJBX09GSUxFUykgJChMSUJPQkpTKTsgXAorIAkgICQoUkFOTElCKSAkKFRBUkdFVExJQik7IFwKKysJICBjcCAkKFRBUkdFVExJQikgLi4vIDsgXAorIAkgIGNkIC4uOyBcCisgCWVsc2UgdHJ1ZTsgZmkKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjIvMjMwLXN1cGVyaC1kZWZhdWx0LW11bHRpbGliLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8yMzAtc3VwZXJoLWRlZmF1bHQtbXVsdGlsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M3MTllOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjIvMjMwLXN1cGVyaC1kZWZhdWx0LW11bHRpbGliLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy5nY2MgZ2NjLTQuNC4wL2djYy9jb25maWcuZ2NjCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy5nY2MJMjAwOS0wNC0xNyAxMzo1ODo0MS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy5nY2MJMjAwOS0wNS0yNyAyMTozODozMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMTIxLDcgKzIxMjEsNyBAQAorIAlpZiB0ZXN0IHgke3NoX211bHRpbGlic30gPSB4IDsgdGhlbgorIAkJY2FzZSAke3RhcmdldH0gaW4KKyAJCXNoNjQtc3VwZXJoLWxpbnV4KiB8IFwKKy0JCXNoWzEyMzRdKikJc2hfbXVsdGlsaWJzPSR7c2hfY3B1X3RhcmdldH0gOzsKKysJCXNoWzEyMzRdKikJc2hfbXVsdGlsaWJzPWBjZCAke3NyY2Rpcn0vY29uZmlnL3NoIDsgZWNobyB0LW1saWItc2hbMS00XSogfCBzZWQgJ3M6dC1tbGliLXNoOixtOmc7czogOjpnJ2AgOzsKKyAJCXNoNjQqIHwgc2g1KikJc2hfbXVsdGlsaWJzPW01LTMybWVkaWEsbTUtMzJtZWRpYS1ub2ZwdSxtNS1jb21wYWN0LG01LWNvbXBhY3Qtbm9mcHUsbTUtNjRtZWRpYSxtNS02NG1lZGlhLW5vZnB1IDs7CisgCQlzaC1zdXBlcmgtKikJc2hfbXVsdGlsaWJzPW00LG00LXNpbmdsZSxtNC1zaW5nbGUtb25seSxtNC1ub2ZwdSA7OworIAkJc2gqLSotbGludXgqKQlzaF9tdWx0aWxpYnM9bTEsbTNlLG00IDs7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzI0MC1saWJzdGRjKystcGljLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8yNDAtbGlic3RkYysrLXBpYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTUxZGZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8yNDAtbGlic3RkYysrLXBpYy5wYXRjaApAQCAtMCwwICsxLDUzIEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuYW0gZ2NjLTQuNC4wL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuYW0KKy0tLSBnY2MtNC40LjAub3JpZy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmFtCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuYW0JMjAwOS0wNS0yNyAyMTozODozNC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zNTEsNiArMzUxLDEzIEBACisgCSAgJChPUFRfTERGTEFHUykgJChTRUNUSU9OX0xERkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoTFRMREZMQUdTKSAtbyAkQAorIAorIAorK2luc3RhbGwtZXhlYy1sb2NhbDoKKysJcGljX29ianM9YHNlZCAtbiAiczonOjpnO3M6XnBpY19vYmplY3Q9OjpwIiAqLmxvIHwgZ3JlcCAtdiAnXm5vbmUkJCdgOyBcCisrCWlmIFsgeCIkJHBpY19vYmpzIiAhPSB4IF07IHRoZW4gXAorKwkJJChBUikgY3J1IGxpYnN0ZGMrK19waWMuYSAkJHBpY19vYmpzICQodG9wX2J1aWxkZGlyKS9saWJzdXBjKysvKi5vIHx8IGV4aXQgMTsgXAorKwkJJChJTlNUQUxMX0RBVEEpIGxpYnN0ZGMrK19waWMuYSAkKERFU1RESVIpJCh0b29sZXhlY2xpYmRpcikgfHwgZXhpdCAxOyBcCisrCWZpCisrCisgIyBBZGRlZCBiaXRzIHRvIGJ1aWxkIGRlYnVnIGxpYnJhcnkuCisgaWYgR0xJQkNYWF9CVUlMRF9ERUJVRworIGFsbC1sb2NhbDogYnVpbGRfZGVidWcKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbiBnY2MtNC40LjAvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjQuMC5vcmlnL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuaW4JMjAwOS0wMS0xNyAwMzowMzoyNS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC40LjAvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgkyMDA5LTA1LTI3IDIxOjM4OjM0LjAwMDAwMDAwMCArMDIwMAorQEAgLTcyNiw3ICs3MjYsNyBAQAorIAorIGluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1kYXRhLWxvY2FsCisgCistaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLXRvb2xleGVjbGliTFRMSUJSQVJJRVMKKytpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUyBpbnN0YWxsLWV4ZWMtbG9jYWwKKyAKKyBpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorIAorQEAgLTc2NSw3ICs3NjUsNyBAQAorIAltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCisgCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKyAJdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1pbmZvLWFtIFwKKy0JdW5pbnN0YWxsLXRvb2xleGVjbGliTFRMSUJSQVJJRVMKKysJdW5pbnN0YWxsLXRvb2xleGVjbGliTFRMSUJSQVJJRVMgaW5zdGFsbC1leGVjLWxvY2FsCisgCisgCisgIyBTeW1ib2wgdmVyc2lvbmluZyBmb3Igc2hhcmVkIGxpYnJhcmllcy4KK0BAIC05NDIsNiArOTQyLDE0IEBACisgaW5zdGFsbF9kZWJ1ZzoKKyAJKGNkICR7ZGVidWdkaXJ9ICYmICQoTUFLRSkgXAorIAl0b29sZXhlY2xpYmRpcj0kKGdsaWJjeHhfdG9vbGV4ZWNsaWJkaXIpL2RlYnVnIGluc3RhbGwpCisrCisraW5zdGFsbC1leGVjLWxvY2FsOgorKwlwaWNfb2Jqcz1gc2VkIC1uICJzOic6Omc7czpecGljX29iamVjdD06OnAiICoubG8gfCBncmVwIC12ICdebm9uZSQkJ2A7IFwKKysJaWYgWyB4IiQkcGljX29ianMiICE9IHggXTsgdGhlbiBcCisrCQkkKEFSKSBjcnUgbGlic3RkYysrX3BpYy5hICQkcGljX29ianMgJCh0b3BfYnVpbGRkaXIpL2xpYnN1cGMrKy8qLm8gfHwgZXhpdCAxOyBcCisrCQkkKElOU1RBTExfREFUQSkgbGlic3RkYysrX3BpYy5hICQoREVTVERJUikkKHRvb2xleGVjbGliZGlyKSB8fCBleGl0IDE7IFwKKysJZmkKKysKKyAjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorICMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorIC5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjIvMjUwLWlhNjQtbm90ZUdOVXN0YWNrLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8yNTAtaWE2NC1ub3RlR05Vc3RhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI4MGU2YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjIvMjUwLWlhNjQtbm90ZUdOVXN0YWNrLnBhdGNoCkBAIC0wLDAgKzEsNzkgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGJlZ2luLmFzbSBnY2MtNC40LjAvZ2NjL2NvbmZpZy9pYTY0L2NydGJlZ2luLmFzbQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRiZWdpbi5hc20JMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy9pYTY0L2NydGJlZ2luLmFzbQkyMDA5LTA1LTI3IDIxOjM4OjM3LjAwMDAwMDAwMCArMDIwMAorQEAgLTI1MiwzICsyNTIsNyBAQAorIC53ZWFrIF9fY3hhX2ZpbmFsaXplCisgI2VuZGlmCisgLndlYWsgX0p2X1JlZ2lzdGVyQ2xhc3NlcworKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0ZW5kLmFzbSBnY2MtNC40LjAvZ2NjL2NvbmZpZy9pYTY0L2NydGVuZC5hc20KKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0ZW5kLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL2lhNjQvY3J0ZW5kLmFzbQkyMDA5LTA1LTI3IDIxOjM4OjM3LjAwMDAwMDAwMCArMDIwMAorQEAgLTExOSwzICsxMTksNyBAQAorIAorIAlici5yZXQuc3B0ay5tYW55IHJwCisgCS5lbmRwIF9fZG9fZ2xvYmFsX2N0b3JzX2F1eAorKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0aS5hc20gZ2NjLTQuNC4wL2djYy9jb25maWcvaWE2NC9jcnRpLmFzbQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRpLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL2lhNjQvY3J0aS5hc20JMjAwOS0wNS0yNyAyMTozODozNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC01MSwzICs1MSw3IEBACisgCS5ib2R5CisgCisgIyBlbmQgb2YgY3J0aS5hc20KKysKKysjaWZkZWYgX19saW51eF9fCisrLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrOyAucHJldmlvdXMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydG4uYXNtIGdjYy00LjQuMC9nY2MvY29uZmlnL2lhNjQvY3J0bi5hc20KKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0bi5hc20JMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy9pYTY0L2NydG4uYXNtCTIwMDktMDUtMjcgMjE6Mzg6MzcuMDAwMDAwMDAwICswMjAwCitAQCAtNDEsMyArNDEsNyBAQAorIAlici5yZXQuc3B0ay5tYW55IGIwCisgCisgIyBlbmQgb2YgY3J0bi5hc20KKysKKysjaWZkZWYgX19saW51eF9fCisrLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrOyAucHJldmlvdXMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2xpYjFmdW5jcy5hc20gZ2NjLTQuNC4wL2djYy9jb25maWcvaWE2NC9saWIxZnVuY3MuYXNtCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2xpYjFmdW5jcy5hc20JMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy9pYTY0L2xpYjFmdW5jcy5hc20JMjAwOS0wNS0yNyAyMTozODozNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC03OTMsMyArNzkzLDcgQEAKKyAJLmVuZHAgX19mbG9hdHRpdGYKKyAjZW5kaWYKKyAjZW5kaWYKKysKKysjaWZkZWYgX19saW51eF9fCisrLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrOyAucHJldmlvdXMKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2xpbnV4LmggZ2NjLTQuNC4wL2djYy9jb25maWcvaWE2NC9saW51eC5oCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2xpbnV4LmgJMjAwOS0wMi0xMiAxNzozMDo1My4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy9pYTY0L2xpbnV4LmgJMjAwOS0wNS0yNyAyMTozODozNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC01LDYgKzUsOCBAQAorIAorICNkZWZpbmUgVEFSR0VUX1ZFUlNJT04gZnByaW50ZiAoc3RkZXJyLCAiIChJQS02NCkgTGludXgiKTsKKyAKKysjZGVmaW5lIFRBUkdFVF9BU01fRklMRV9FTkQgZmlsZV9lbmRfaW5kaWNhdGVfZXhlY19zdGFjaworKworIC8qIFRoaXMgaXMgZm9yIC1wcm9maWxlIHRvIHVzZSAtbGNfcCBpbnN0ZWFkIG9mIC1sYy4gICovCisgI3VuZGVmIENDMV9TUEVDCisgI2RlZmluZSBDQzFfU1BFQyAiJXtwcm9maWxlOi1wfSAle0cqfSIKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvcHBjLWFzbS5oIGdjYy00LjQuMC9nY2MvY29uZmlnL3JzNjAwMC9wcGMtYXNtLmgKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9wcGMtYXNtLmgJMjAwOC0xMC0xMyAxNzo0NDoyNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy9yczYwMDAvcHBjLWFzbS5oCTIwMDktMDUtMjcgMjE6Mzg6MzcuMDAwMDAwMDAwICswMjAwCitAQCAtMTcyLDcgKzE3Miw3IEBACisgCS5zaXplIEZVTkNfTkFNRShuYW1lKSxHTFVFKC5MLG5hbWUpLUZVTkNfTkFNRShuYW1lKQorICNlbmRpZgorIAorLSNpZiBkZWZpbmVkIF9fbGludXhfXyAmJiAhZGVmaW5lZCBfX3Bvd2VycGM2NF9fCisrI2lmIGRlZmluZWQgX19saW51eF9fCisgCS5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjaworIAkucHJldmlvdXMKKyAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjIvMjYwLXNoLWxpYmdjYy1zdGFja3MucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzI2MC1zaC1saWJnY2Mtc3RhY2tzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYWYyYzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzI2MC1zaC1saWJnY2Mtc3RhY2tzLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9zaC9saWIxZnVuY3MuYXNtIGdjYy00LjQuMC9nY2MvY29uZmlnL3NoL2xpYjFmdW5jcy5hc20KKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL3NoL2xpYjFmdW5jcy5hc20JMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy9zaC9saWIxZnVuY3MuYXNtCTIwMDktMDUtMjcgMjE6Mzg6MzkuMDAwMDAwMDAwICswMjAwCitAQCAtMzAsNiArMzAsMTEgQEAKKyAhISByZWNvZGVkIGluIGFzc2VtYmx5IGJ5IFRvc2hpeWFzdSBNb3JpdGEKKyAhISB0bUBuZXRjb20uY29tCisgCisrI2lmIGRlZmluZWQoX19FTEZfXykgJiYgZGVmaW5lZChfX2xpbnV4X18pCisrLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrLCIiLCVwcm9nYml0cworKy5wcmV2aW91cworKyNlbmRpZgorKworIC8qIFNIMiBvcHRpbWl6YXRpb25zIGZvciBfX19hc2hyc2kzLCBfX19hc2hsc2kzLCBfX19sc2hyc2kzIGFuZAorICAgIEVMRiBsb2NhbCBsYWJlbCBwcmVmaXhlcyBieSBKIm9ybiBSZW5uZWNrZQorICAgIGFteWxhYXJAY3lnbnVzLmNvbSAgKi8KK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9zaC9saW51eC1hdG9taWMuYXNtIGdjYy00LjQuMC9nY2MvY29uZmlnL3NoL2xpbnV4LWF0b21pYy5hc20KKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL3NoL2xpbnV4LWF0b21pYy5hc20JMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy9zaC9saW51eC1hdG9taWMuYXNtCTIwMDktMDUtMjcgMjE6Mzg6MzkuMDAwMDAwMDAwICswMjAwCitAQCAtMTM2LDMgKzEzNiw2IEBACisgQVRPTUlDX0ZFVENIX0FORF9DT01CT1AobmFuZCxhbmQsbm90LDQsbCxtb3YpCisgCisgI2VuZGlmIC8qICEgX19TSDVfXyAqLworKworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjaywiIiwlcHJvZ2JpdHMKKysucHJldmlvdXMKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjIvMjcwLXNoLXByMjQ4MzYucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzI3MC1zaC1wcjI0ODM2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNzQ1YWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzI3MC1zaC1wcjI0ODM2LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZ3VyZSBnY2MtNC40LjAvZ2NjL2NvbmZpZ3VyZQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWd1cmUJMjAwOS0wNS0yNyAyMTozODowOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZ3VyZQkyMDA5LTA1LTI3IDIxOjM4OjQyLjAwMDAwMDAwMCArMDIwMAorQEAgLTIyMjA1LDcgKzIyMjA1LDcgQEAKKyAJdGxzX2ZpcnN0X21pbm9yPTE0CisgCXRsc19hc19vcHQ9Ii1tNjQgLUFlc2FtZSAtLWZhdGFsLXdhcm5pbmdzIgorIAk7OworLSAgc2gtKi0qIHwgc2hbMzRdLSotKikKKysgIHNoLSotKiB8IHNoWzM0XSotKi0qKQorICAgICBjb25mdGVzdF9zPScKKyAJLnNlY3Rpb24gIi50ZGF0YSIsImF3VCIsQHByb2diaXRzCisgZm9vOgkubG9uZwkyNQorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlndXJlLmFjIGdjYy00LjQuMC9nY2MvY29uZmlndXJlLmFjCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYwkyMDA5LTA1LTI3IDIxOjM4OjA4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlndXJlLmFjCTIwMDktMDUtMjcgMjE6Mzg6NDIuMDAwMDAwMDAwICswMjAwCitAQCAtMjY3Myw3ICsyNjczLDcgQEAKKyAJdGxzX2ZpcnN0X21pbm9yPTE0CisgCXRsc19hc19vcHQ9Ii1tNjQgLUFlc2FtZSAtLWZhdGFsLXdhcm5pbmdzIgorIAk7OworLSAgc2gtKi0qIHwgc2hbMzRdLSotKikKKysgIHNoLSotKiB8IHNoWzM0XSotKi0qKQorICAgICBjb25mdGVzdF9zPScKKyAJLnNlY3Rpb24gIi50ZGF0YSIsImF3VCIsQHByb2diaXRzCisgZm9vOgkubG9uZwkyNQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8yODAtZnJlZWJzZC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjIvMjgwLWZyZWVic2QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlkOWQwYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjIvMjgwLWZyZWVic2QucGF0Y2gKQEAgLTAsMCArMSw5NCBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2ZyZWVic2Qtc3BlYy5oIGdjYy00LjQuMC9nY2MvY29uZmlnL2ZyZWVic2Qtc3BlYy5oCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9mcmVlYnNkLXNwZWMuaAkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL2ZyZWVic2Qtc3BlYy5oCTIwMDktMDUtMjcgMjE6Mzg6NDUuMDAwMDAwMDAwICswMjAwCitAQCAtNjEsNiArNjEsOCBAQAorIAlidWlsdGluX2Fzc2VydCAoInN5c3RlbT11bml4Iik7CQkJCQlcCisgCWJ1aWx0aW5fYXNzZXJ0ICgic3lzdGVtPWJzZCIpOwkJCQkJXAorIAlidWlsdGluX2Fzc2VydCAoInN5c3RlbT1GcmVlQlNEIik7CQkJCVwKKysJaWYoIShmbGFnX2lzbyAmJiAoY19kaWFsZWN0X2N4eCAoKSA/IGN4eF9kaWFsZWN0ID09IGN4eDk4IDogIWZsYWdfaXNvYzk5KSkpCVwKKysJCWJ1aWx0aW5fZGVmaW5lKCJfTE9OR0xPTkciKTsJCQkJXAorIAlGQlNEX1RBUkdFVF9DUFVfQ1BQX0JVSUxUSU5TKCk7CQkJCQlcCisgICAgIH0JCQkJCQkJCQlcCisgICB3aGlsZSAoMCkKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy90LWZyZWVic2QtZWggZ2NjLTQuNC4wL2djYy9jb25maWcvdC1mcmVlYnNkLWVoCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy90LWZyZWVic2QtZWgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy90LWZyZWVic2QtZWgJMjAwOS0wNS0yNyAyMTozODo0NS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNCBAQAorKyMgVXNlIHVud2luZC1kdzItZmRlLWdsaWJjCisrTElCMkFEREVIID0gJChzcmNkaXIpL3Vud2luZC1kdzIuYyAkKHNyY2RpcikvdW53aW5kLWR3Mi1mZGUtZ2xpYmMuYyBcCisrICAkKHNyY2RpcikvdW53aW5kLXNqbGouYyAkKHNyY2RpcikvZ3Roci1nbmF0LmMgJChzcmNkaXIpL3Vud2luZC1jLmMKKytMSUIyQURERUhERVAgPSB1bndpbmQuaW5jIHVud2luZC1kdzItZmRlLmggdW53aW5kLWR3Mi1mZGUuYworZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnLmdjYyBnY2MtNC40LjAvZ2NjL2NvbmZpZy5nY2MKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnLmdjYwkyMDA5LTA1LTI3IDIxOjM4OjM0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnLmdjYwkyMDA5LTA1LTI3IDIxOjM4OjQ1LjAwMDAwMDAwMCArMDIwMAorQEAgLTQ1Niw3ICs0NTYsNyBAQAorICAgIyBwbGVhc2VzIGFyb3VuZCB0aGUgcHJvdmlkZWQgY29yZSBzZXR0aW5nLgorICAgZ2FzPXllcworICAgZ251X2xkPXllcworLSAgZXh0cmFfcGFydHM9ImNydGJlZ2luLm8gY3J0ZW5kLm8gY3J0YmVnaW5TLm8gY3J0ZW5kUy5vIgorKyAgZXh0cmFfcGFydHM9ImNydGJlZ2luLm8gY3J0ZW5kLm8gY3J0YmVnaW5TLm8gY3J0ZW5kUy5vIGNydGJlZ2luVC5vIgorICAgZmJzZF9tYWpvcj1gZWNobyAke3RhcmdldH0gfCBzZWQgLWUgJ3MvLipmcmVlYnNkLy9nJyB8IHNlZCAtZSAncy9cLi4qLy9nJ2AKKyAgIHRtX2RlZmluZXM9IiR7dG1fZGVmaW5lc30gRkJTRF9NQUpPUj0ke2Zic2RfbWFqb3J9IgorICAgdG1ha2VfZmlsZT0idC1zbGliZ2NjLWVsZi12ZXIgdC1mcmVlYnNkIgorQEAgLTEwNDIsNiArMTA0MiwxMCBAQAorIAk7OworIGlbMzQ1NjddODYtKi1mcmVlYnNkKikKKyAJdG1fZmlsZT0iJHt0bV9maWxlfSBpMzg2L3VuaXguaCBpMzg2L2F0dC5oIGRieGVsZi5oIGVsZm9zLmggJHtmYnNkX3RtX2ZpbGV9IGkzODYvZnJlZWJzZC5oIgorKwlmYnNkX21ham9yPWBlY2hvICR7dGFyZ2V0fSB8IHNlZCAtZSAncy8uKmZyZWVic2QvL2cnIHwgc2VkIC1lICdzL1wuLiovL2cnYAorKwlpZiB0ZXN0ICR7ZmJzZF9tYWpvcn0gLWdlIDc7IHRoZW4KKysJCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gdC1mcmVlYnNkLWVoIgorKwlmaQorIAk7OworIHg4Nl82NC0qLWZyZWVic2QqKQorIAl0bV9maWxlPSIke3RtX2ZpbGV9IGkzODYvdW5peC5oIGkzODYvYXR0LmggZGJ4ZWxmLmggZWxmb3MuaCAke2Zic2RfdG1fZmlsZX0gaTM4Ni94ODYtNjQuaCBpMzg2L2ZyZWVic2QuaCBpMzg2L2ZyZWVic2Q2NC5oIgorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY3J0c3R1ZmYuYyBnY2MtNC40LjAvZ2NjL2NydHN0dWZmLmMKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY3J0c3R1ZmYuYwkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY3J0c3R1ZmYuYwkyMDA5LTA1LTI3IDIxOjM4OjQ1LjAwMDAwMDAwMCArMDIwMAorQEAgLTg1LDEzICs4NSwxNSBAQAorICAgICAmJiAhZGVmaW5lZChPQkpFQ1RfRk9STUFUX0ZMQVQpIFwKKyAgICAgJiYgZGVmaW5lZChIQVZFX0xEX0VIX0ZSQU1FX0hEUikgXAorICAgICAmJiAhZGVmaW5lZChpbmhpYml0X2xpYmMpICYmICFkZWZpbmVkKENSVFNUVUZGVF9PKSBcCistICAgICYmIGRlZmluZWQoX19HTElCQ19fKSAmJiBfX0dMSUJDX18gPj0gMgorKyAgICAmJiAoKGRlZmluZWQoX19HTElCQ19fKSAmJiBfX0dMSUJDX18gPj0gMikgXAorKyAgICB8fCAoZGVmaW5lZChfX0ZyZWVCU0RfdmVyc2lvbikgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNzAwMDIyKSkKKyAjaW5jbHVkZSA8bGluay5oPgorIC8qIHVDbGliYyBwcmV0ZW5kcyB0byBiZSBnbGliYyAyLjIgYW5kIERUX0NPTkZJRyBpcyBkZWZpbmVkIGluIGl0cyBsaW5rLmguCisgICAgQnV0IGl0IGRvZXNuJ3QgdXNlIFBUX0dOVV9FSF9GUkFNRSBFTEYgc2VnbWVudCBjdXJyZW50bHkuICAqLworICMgaWYgIWRlZmluZWQoX19VQ0xJQkNfXykgXAorLSAgICAgJiYgKF9fR0xJQkNfXyA+IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+IDIpIFwKKy0gICAgIHx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPT0gMiAmJiBkZWZpbmVkKERUX0NPTkZJRykpKQorKyAgICAgfHwgKF9fR0xJQkNfXyA+IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+IDIpIFwKKysgICAgIHx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPT0gMiAmJiBkZWZpbmVkKERUX0NPTkZJRykpKSBcCisrICAgICB8fCAoX19GcmVlQlNEX3ZlcnNpb24gPj0gNzAwMDIyKQorICMgIGRlZmluZSBVU0VfUFRfR05VX0VIX0ZSQU1FCisgIyBlbmRpZgorICNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvdW53aW5kLWR3Mi1mZGUtZ2xpYmMuYyBnY2MtNC40LjAvZ2NjL3Vud2luZC1kdzItZmRlLWdsaWJjLmMKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvdW53aW5kLWR3Mi1mZGUtZ2xpYmMuYwkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvdW53aW5kLWR3Mi1mZGUtZ2xpYmMuYwkyMDA5LTA1LTI3IDIxOjM4OjQ1LjAwMDAwMDAwMCArMDIwMAorQEAgLTQ2LDggKzQ2LDkgQEAKKyAjaW5jbHVkZSAiZ3Roci5oIgorIAorICNpZiAhZGVmaW5lZChpbmhpYml0X2xpYmMpICYmIGRlZmluZWQoSEFWRV9MRF9FSF9GUkFNRV9IRFIpIFwKKy0gICAgJiYgKF9fR0xJQkNfXyA+IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+IDIpIFwKKy0JfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA9PSAyICYmIGRlZmluZWQoRFRfQ09ORklHKSkpCisrICAgICYmICgoX19HTElCQ19fID4gMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID4gMikgXAorKwl8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID09IDIgJiYgZGVmaW5lZChEVF9DT05GSUcpKSkgXAorKyAgICB8fCAoX19GcmVlQlNEX3ZlcnNpb24gPj0gNzAwMDIyICkpCisgCisgI2lmbmRlZiBfX1JFTE9DX1BPSU5URVIKKyAjIGRlZmluZSBfX1JFTE9DX1BPSU5URVIocHRyLCBiYXNlKSAoKHB0cikgKyAoYmFzZSkpCitAQCAtNjMsNiArNjQsMTMgQEAKKyAjZGVmaW5lIFBUX0dOVV9FSF9GUkFNRSAoUFRfTE9PUyArIDB4NDc0ZTU1MCkKKyAjZW5kaWYKKyAKKysvKiBTdXBwb3J0IEZyZWVCU0QgKi8KKysjaWZuZGVmIEVsZlcKKysjIGlmZGVmIF9fRWxmTgorKyMgIGRlZmluZSBFbGZXIF9fRWxmTgorKyMgZW5kaWYKKysjZW5kaWYKKysKKyBzdHJ1Y3QgdW53X2VoX2NhbGxiYWNrX2RhdGEKKyB7CisgICBfVW53aW5kX1B0ciBwYzsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjIvMjkwLWZyZWVic2QucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzI5MC1mcmVlYnNkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMTU2NGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzI5MC1mcmVlYnNkLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9mcmVlYnNkLXNwZWMuaCBnY2MtNC40LjAvZ2NjL2NvbmZpZy9mcmVlYnNkLXNwZWMuaAorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvZnJlZWJzZC1zcGVjLmgJMjAwOS0wNS0yNyAyMTozODo0Ny4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy9mcmVlYnNkLXNwZWMuaAkyMDA5LTA1LTI3IDIxOjM4OjQ3LjAwMDAwMDAwMCArMDIwMAorQEAgLTg2LDkgKzg2LDEwIEBACisgI2RlZmluZSBGQlNEX1NUQVJURklMRV9TUEVDIFwKKyAgICIleyFzaGFyZWQ6IFwKKyAgICAgICV7cGc6Z2NydDEubyVzfSAleyFwZzole3A6Z2NydDEubyVzfSBcCistCQkgICAgICAgJXshcDole3Byb2ZpbGU6Z2NydDEubyVzfSBcCistCQkJICV7IXByb2ZpbGU6Y3J0MS5vJXN9fX19IFwKKy0gICBjcnRpLm8lcyAleyFzaGFyZWQ6Y3J0YmVnaW4ubyVzfSAle3NoYXJlZDpjcnRiZWdpblMubyVzfSIKKysJJXshcDole3Byb2ZpbGU6Z2NydDEubyVzfSBcCisrCSAleyFwcm9maWxlOmNydDEubyVzfX19fSBcCisrICAgY3J0aS5vJXMgXAorKyAgICV7c3RhdGljOmNydGJlZ2luVC5vJXM7c2hhcmVkOmNydGJlZ2luUy5vJXM7OmNydGJlZ2luLm8lc30iCisgCisgLyogUHJvdmlkZSBhIEVOREZJTEVfU1BFQyBhcHByb3ByaWF0ZSBmb3IgRnJlZUJTRC4gIEhlcmUgd2UgdGFjayBvbgorICAgIHRoZSBtYWdpY2FsIGNydGVuZC5vIGZpbGUgKHNlZSBjcnRzdHVmZi5jKSB3aGljaCBwcm92aWRlcyBwYXJ0IG9mIAorQEAgLTEyNiw3ICsxMjcsOCBAQAorICAgICAle3BnOiAgLWxjX3B9CQkJCQkJCVwKKyAgIH0iCisgI2Vsc2UKKy0jaWYgRkJTRF9NQUpPUiA8IDUKKysjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisrI2lmIF9fRnJlZUJTRF92ZXJzaW9uIDwgNTAwMDE2CisgI2RlZmluZSBGQlNEX0xJQl9TUEVDICIJCQkJCQkJXAorICAgJXshc2hhcmVkOgkJCQkJCQkJXAorICAgICAleyFwZzoJCQkJCQkJCVwKK0BAIC0xMzYsMTcgKzEzOCwzNCBAQAorICAgICAgICV7IXB0aHJlYWQ6LWxjX3B9CQkJCQkJCVwKKyAgICAgICAle3B0aHJlYWQ6LWxjX3JfcH19CQkJCQkJXAorICAgfSIKKy0jZWxzZQorKyNlbGlmIF9fRnJlZUJTRF92ZXJzaW9uIDwgNzAwMDIyCisgI2RlZmluZSBGQlNEX0xJQl9TUEVDICIJCQkJCQkJXAorICAgJXshc2hhcmVkOgkJCQkJCQkJXAorICAgICAleyFwZzogJXtwdGhyZWFkOi1scHRocmVhZH0gLWxjfQkJCQkJXAorICAgICAle3BnOiAgJXtwdGhyZWFkOi1scHRocmVhZF9wfSAtbGNfcH0JCQkJXAorICAgfSIKKysjZWxzZQorKyNkZWZpbmUgRkJTRF9MSUJfU1BFQyAiCQkJCQkJCVwKKysgICV7IXNoYXJlZDoJCQkJCQkJCVwKKysgICAgJXshcGc6ICV7cHRocmVhZDotbHB0aHJlYWR9IC1sY30JCQkJCVwKKysgICAgJXtwZzogICV7cHRocmVhZDotbHB0aHJlYWRfcH0gLWxjX3B9fQkJCQlcCisrICAle3NoYXJlZDoJCQkJCQkJCVwKKysgICAgJXtwdGhyZWFkOi1scHRocmVhZH0gLWxjfQkJCQkJCVwKKysgICIKKyAjZW5kaWYKKyAjZW5kaWYKKyAKKy0jaWYgRkJTRF9NQUpPUiA8IDYKKysjaWYgRkJTRF9NQUpPUiA8IDUKKyAjZGVmaW5lIEZCU0RfRFlOQU1JQ19MSU5LRVIgIi91c3IvbGliZXhlYy9sZC1lbGYuc28uMSIKKyAjZWxzZQorICNkZWZpbmUgRkJTRF9EWU5BTUlDX0xJTktFUiAiL2xpYmV4ZWMvbGQtZWxmLnNvLjEiCisgI2VuZGlmCisrCisrI2lmIGRlZmluZWQoSEFWRV9MRF9FSF9GUkFNRV9IRFIpCisrI2RlZmluZSBMSU5LX0VIX1NQRUMgIiV7IXN0YXRpYzotLWVoLWZyYW1lLWhkcn0gIgorKyNlbmRpZgorKworKy8qIFVzZSAtLWFzLW5lZWRlZCAtbGdjY19zIGZvciBlaCBzdXBwb3J0LiAgKi8KKysjaWZkZWYgSEFWRV9MRF9BU19ORUVERUQKKysjZGVmaW5lIFVTRV9MRF9BU19ORUVERUQgMQorKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8zMDAtdWNsaWJjLWNvbmYucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzMwMC11Y2xpYmMtY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2YzYjkxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8zMDAtdWNsaWJjLWNvbmYucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2ggZ2NjLTQuNC4wL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAorLS0tIGdjYy00LjQuMC5vcmlnL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gJMjAwOS0wNS0yNyAyMTozODo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMDYsNiArMTA2LDEwIEBACisgIHRoZW4KKyAgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCisgICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQorK2VsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCAtYSAkSF9SRUFMX1RBUkdFVCA9IGk2ODYtcGMtbGludXgtdWNsaWJjIF0KKysgdGhlbgorKyAgbWFrZSBhbGwtZ2RiIGFsbC1kZWphZ251IGFsbC1sZCB8fCBleGl0IDEKKysgIG1ha2UgaW5zdGFsbC1nZGIgaW5zdGFsbC1kZWphZ251IGluc3RhbGwtbGQgfHwgZXhpdCAxCisgZWxpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIF0gOyB0aGVuCisgICBtYWtlIGJvb3RzdHJhcCB8fCBleGl0IDEKKyAgIG1ha2UgaW5zdGFsbCB8fCBleGl0IDEKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcgZ2NjLTQuNC4wL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCistLS0gZ2NjLTQuNC4wLm9yaWcvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcJMjAwNy0wNi0wNCAwMToxODo0My4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcJMjAwOS0wNS0yNyAyMTozODo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC02MDMsNyArNjAzLDcgQEAKKyAKKyAjIFRyYW5zZm9ybSBsaW51eCogdG8gKi0qLWxpbnV4LWdudSosIHRvIHN1cHBvcnQgb2xkIGNvbmZpZ3VyZSBzY3JpcHRzLgorIGNhc2UgJGhvc3Rfb3MgaW4KKy1saW51eC1nbnUqKSA7OworK2xpbnV4LWdudSp8bGludXgtdWNsaWJjKikgOzsKKyBsaW51eCopIGhvc3Q9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoLiotLiotbGludXhcKVwoLipcKSQvXDEtZ251XDIvJ2AKKyBlc2FjCisgCitAQCAtMTI1MSw3ICsxMjUxLDcgQEAKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgqKQorICAgdmVyc2lvbl90eXBlPWxpbnV4CisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIG5lZWRfdmVyc2lvbj1ubwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8zMTAtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8zMTAtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwOTMzNWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzMxMC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9ib2VobS1nYy9pbmNsdWRlL2djLmggZ2NjLTQuNC4wL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAorLS0tIGdjYy00LjQuMC5vcmlnL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAkyMDA3LTA0LTIzIDIzOjEwOjA5LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9ib2VobS1nYy9pbmNsdWRlL2djLmgJMjAwOS0wNS0yNyAyMTozODo1NS4wMDAwMDAwMDAgKzAyMDAKK0BAIC01MDMsNyArNTAzLDcgQEAKKyAjaWYgZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoX19HTElCQ19fKQorICMgaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyAjIGlmIChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMSB8fCBfX0dMSUJDX18gPiAyKSBcCistICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykKKysgICAgICYmICFkZWZpbmVkKF9faWE2NF9fKSAmJiAhZGVmaW5lZChfX1VDTElCQ19fKQorICMgICBpZm5kZWYgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQorICMgICAgIGRlZmluZSBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgIGVuZGlmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzMyMC1jOTktc25wcmludGYucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzMyMC1jOTktc25wcmludGYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkyOGY0YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjIvMzIwLWM5OS1zbnByaW50Zi5wYXRjaApAQCAtMCwwICsxLDEyIEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfZ2xvYmFsL2NzdGRpbyBnY2MtNC40LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY19nbG9iYWwvY3N0ZGlvCistLS0gZ2NjLTQuNC4wLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvY19nbG9iYWwvY3N0ZGlvCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfZ2xvYmFsL2NzdGRpbwkyMDA5LTA1LTI3IDIxOjM4OjU4LjAwMDAwMDAwMCArMDIwMAorQEAgLTEzOSw3ICsxMzksNyBAQAorIAorIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKyAKKy0jaWYgX0dMSUJDWFhfVVNFX0M5OQorKyNpZiBfR0xJQkNYWF9VU0VfQzk5IHx8IGRlZmluZWQgX19VQ0xJQkNfXworIAorICN1bmRlZiBzbnByaW50ZgorICN1bmRlZiB2ZnNjYW5mCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzMzMC1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjIvMzMwLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYTRlMzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzMzMC1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMgZ2NjLTQuNC4wL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMKKy0tLSBnY2MtNC40LjAub3JpZy9saWJtdWRmbGFwL21mLWhvb2tzMi5jCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMJMjAwOS0wNS0yNyAyMTozOTowMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC00MjEsNyArNDIxLDcgQEAKKyB7CisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzLCBuLCBfX01GX0NIRUNLX1dSSVRFLCAiYnplcm8gcmVnaW9uIik7CistICBiemVybyAocywgbik7CisrICBtZW1zZXQgKHMsIDAsIG4pOworIH0KKyAKKyAKK0BAIC00MzEsNyArNDMxLDcgQEAKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHNyYywgbiwgX19NRl9DSEVDS19SRUFELCAiYmNvcHkgc3JjIik7CisgICBNRl9WQUxJREFURV9FWFRFTlQoZGVzdCwgbiwgX19NRl9DSEVDS19XUklURSwgImJjb3B5IGRlc3QiKTsKKy0gIGJjb3B5IChzcmMsIGRlc3QsIG4pOworKyAgbWVtbW92ZSAoZGVzdCwgc3JjLCBuKTsKKyB9CisgCisgCitAQCAtNDQxLDcgKzQ0MSw3IEBACisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzMSwgbiwgX19NRl9DSEVDS19SRUFELCAiYmNtcCAxc3QgYXJnIik7CisgICBNRl9WQUxJREFURV9FWFRFTlQoczIsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjbXAgMm5kIGFyZyIpOworLSAgcmV0dXJuIGJjbXAgKHMxLCBzMiwgbik7CisrICByZXR1cm4gbiA9PSAwID8gMCA6IG1lbWNtcCAoczEsIHMyLCBuKTsKKyB9CisgCisgCitAQCAtNDUwLDcgKzQ1MCw3IEBACisgICBzaXplX3QgbiA9IHN0cmxlbiAocyk7CisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzLCBDTEFNUEFERChuLCAxKSwgX19NRl9DSEVDS19SRUFELCAiaW5kZXggcmVnaW9uIik7CistICByZXR1cm4gaW5kZXggKHMsIGMpOworKyAgcmV0dXJuIHN0cmNociAocywgYyk7CisgfQorIAorIAorQEAgLTQ1OSw3ICs0NTksNyBAQAorICAgc2l6ZV90IG4gPSBzdHJsZW4gKHMpOworICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQocywgQ0xBTVBBREQobiwgMSksIF9fTUZfQ0hFQ0tfUkVBRCwgInJpbmRleCByZWdpb24iKTsKKy0gIHJldHVybiByaW5kZXggKHMsIGMpOworKyAgcmV0dXJuIHN0cnJjaHIgKHMsIGMpOworIH0KKyAKKyAvKiBYWFg6ICBzdHBjcHksIG1lbWNjcHkgKi8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjIvMzQwLWVjangtaG9zdC1jYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjIvMzQwLWVjangtaG9zdC1jYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWY4ZWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8zNDAtZWNqeC1ob3N0LWNjLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK2RpZmYgLXVyIGdjYy00LjQuMS1vcmlnL2xpYmphdmEvTWFrZWZpbGUuaW4gZ2NjLTQuNC4xL2xpYmphdmEvTWFrZWZpbGUuaW4KKy0tLSBnY2MtNC40LjEtb3JpZy9saWJqYXZhL01ha2VmaWxlLmluCTIwMDktMDgtMDQgMDQ6MTI6MjcuMDAwMDAwMDAwIC0wNzAwCisrKysgZ2NjLTQuNC4xL2xpYmphdmEvTWFrZWZpbGUuaW4JMjAwOS0wOS0yMyAyMjowMzoxNS43NTA5NTE0ODMgLTA3MDAKK0BAIC04ODc0LDYgKzg4NzQsOSBAQAorIGVjangkKEVYRUVYVCk6ICQoZWNqeF9PQkpFQ1RTKSAkKGVjanhfREVQRU5ERU5DSUVTKSAKKyAJQHJtIC1mIGVjangkKEVYRUVYVCkKKyAJJChlY2p4X0xJTkspICQoZWNqeF9MREZMQUdTKSAkKGVjanhfT0JKRUNUUykgJChlY2p4X0xEQUREKSAkKExJQlMpCisrZWNqeC4kKE9CSkVYVCk6ICQoZWNqeF9TT1VSQ0VTKQorKwlAcm0gLWYgZWNqeC4kKE9CSkVYVCkKKysJJChDQ19GT1JfQlVJTEQpICQoQlVJTERfQ0ZMQUdTKSAtYyAtbyAkQCAkPAorIGdhcHBsZXR2aWV3ZXIkKEVYRUVYVCk6ICQoZ2FwcGxldHZpZXdlcl9PQkpFQ1RTKSAkKGdhcHBsZXR2aWV3ZXJfREVQRU5ERU5DSUVTKSAKKyAJQHJtIC1mIGdhcHBsZXR2aWV3ZXIkKEVYRUVYVCkKKyAJJChnYXBwbGV0dmlld2VyX0xJTkspICQoZ2FwcGxldHZpZXdlcl9MREZMQUdTKSAkKGdhcHBsZXR2aWV3ZXJfT0JKRUNUUykgJChnYXBwbGV0dmlld2VyX0xEQUREKSAkKExJQlMpCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzM1MC1pbmRleF9tYWNyby5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjIvMzUwLWluZGV4X21hY3JvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYjg5OWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzM1MC1pbmRleF9tYWNyby5wYXRjaApAQCAtMCwwICsxLDMyIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiAuLi80LjMuMi8yOTAtaW5kZXhfbWFjcm8ucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL3VjbGliYy85MF9hbGxfMzA0LWluZGV4X21hY3JvLnBhdGNoCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUgZ2NjLTQuMy4zL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCistLS0gZ2NjLTQuMy4zLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUJMjAwOC0wNy0xNSAxMjoxNDo1MS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUJMjAwOS0wMS0yNyAyMjoyNTo0MS4wMDAwMDAwMDAgKzAxMDAKK0BAIC01OSw2ICs1OSw5IEBACisgI2luY2x1ZGUgPGJpdHMvZ3Roci5oPgorICNpbmNsdWRlIDx0cjEvZnVuY3Rpb25hbD4KKyAKKysvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCisrI3VuZGVmIGluZGV4CisrCisgIyBpZmRlZiBfX0dDCisgIyAgIGRlZmluZSBfX0dDX0NPTlNUIGNvbnN0CisgIyBlbHNlCitkaWZmIC1kdXJOIGdjYy00LjMuMy5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oIGdjYy00LjMuMy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAorLS0tIGdjYy00LjMuMy5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCTIwMDctMDUtMDQgMTc6MDY6NDYuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuMy4zL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCTIwMDktMDEtMjcgMjI6MjU6NDEuMDAwMDAwMDAwICswMTAwCitAQCAtNTQsNiArNTQsOSBAQAorICNpbmNsdWRlIDxleHQvbWVtb3J5PiAvLyBGb3IgdW5pbml0aWFsaXplZF9jb3B5X24KKyAjaW5jbHVkZSA8ZXh0L251bWVyaWM+IC8vIEZvciBwb3dlcgorIAorKy8qIGNvcGUgdy8gaW5kZXggZGVmaW5lZCBhcyBtYWNybywgU3VTdjMgcHJvcG9zYWwgKi8KKysjdW5kZWYgaW5kZXgKKysKKyBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorIAorICAgdXNpbmcgc3RkOjpzaXplX3Q7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzM2MC1hcm0tYmlnZW5kaWFuLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8zNjAtYXJtLWJpZ2VuZGlhbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGYxMGFhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8zNjAtYXJtLWJpZ2VuZGlhbi5wYXRjaApAQCAtMCwwICsxLDMyIEBACitCeSBMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEB3YW50c3RvZmx5Lm9yZz4KK0FkZHMgc3VwcG9ydCBmb3IgYXJtKmItbGludXgqIGJpZy1lbmRpYW4gQVJNIHRhcmdldHMKKworU2VlIGh0dHA6Ly9nY2MuZ251Lm9yZy9QUjE2MzUwCisKKy0tLSBnY2MtNC40LjIub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDA5LTAyLTIwIDE2OjIwOjM4LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuMi9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDA5LTEyLTMxIDE0OjE5OjIwLjAwMDAwMDAwMCArMDEwMAorQEAgLTUxLDcgKzUxLDcgQEAKKyAKKyAjdW5kZWYgIE1VTFRJTElCX0RFRkFVTFRTCisgI2RlZmluZSBNVUxUSUxJQl9ERUZBVUxUUyBcCistCXsgIm1hcm0iLCAibWxpdHRsZS1lbmRpYW4iLCAibWhhcmQtZmxvYXQiLCAibW5vLXRodW1iLWludGVyd29yayIgfQorKwl7ICJtYXJtIiwgVEFSR0VUX0VORElBTl9PUFRJT04sICJtaGFyZC1mbG9hdCIsICJtbm8tdGh1bWItaW50ZXJ3b3JrIiB9CisgCisgLyogTm93IHdlIGRlZmluZSB0aGUgc3RyaW5ncyB1c2VkIHRvIGJ1aWxkIHRoZSBzcGVjIGZpbGUuICAqLworICN1bmRlZiAgTElCX1NQRUMKK2RpZmYgLXJ1IGdjYy00LjQuMi5vcmlnL2djYy9jb25maWcuZ2NjIGdjYy00LjQuMi9nY2MvY29uZmlnLmdjYworLS0tIGdjYy00LjQuMi5vcmlnL2djYy9jb25maWcuZ2NjCTIwMDktMTItMzEgMTQ6NDM6MTcuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC4yL2djYy9jb25maWcuZ2NjCTIwMTAtMDEtMDUgMDk6Mjc6NDIuMDAwMDAwMDAwICswMTAwCitAQCAtNzMzLDYgKzczMywxMSBAQAorIAl0bV9maWxlPSJkYnhlbGYuaCBlbGZvcy5oIGFybS91bmtub3duLWVsZi5oIGFybS9lbGYuaCBhcm0vbGludXgtZ2FzLmggYXJtL3VjbGludXgtZWxmLmgiCisgCXRtYWtlX2ZpbGU9ImFybS90LWFybSBhcm0vdC1hcm0tZWxmIgorIAljYXNlICR7dGFyZ2V0fSBpbgorKwlhcm0qYi0qKQorKwkJdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUPTEiCisrCQk7OworKwllc2FjCisrCWNhc2UgJHt0YXJnZXR9IGluCisgCWFybSotKi11Y2xpbnV4KmVhYmkpCisgCSAgICB0bV9maWxlPSIkdG1fZmlsZSBhcm0vYnBhYmkuaCBhcm0vdWNsaW51eC1lYWJpLmgiCisgCSAgICB0bWFrZV9maWxlPSIkdG1ha2VfZmlsZSBhcm0vdC1icGFiaSIKKwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8zNzAtYm9vdHN0cmFwLXRhcmdldF9saWJfcGF0aC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjIvMzcwLWJvb3RzdHJhcC10YXJnZXRfbGliX3BhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E3MWQyZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjIvMzcwLWJvb3RzdHJhcC10YXJnZXRfbGliX3BhdGgucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorQ2hhbmdlTG9nOgorMjAxMC0wMS0wNiAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KKworCVBSIGJvb3RzdHJhcC80MTgxOAorCSogTWFrZWZpbGUudHBsIChCQVNFX1RBUkdFVF9FWFBPUlRTKTogT25seSBhZGQgVEFSR0VUX0xJQl9QQVRICisJdG8gJChSUEFUSF9FTlZWQVIpIGlmIGJvb3RzdHJhcHBpbmcuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IGU1ZmExZDMuLmRiZmMxZjAgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0yODEsNyArMjgxLDEwIEBAIEJBU0VfVEFSR0VUX0VYUE9SVFMgPSBcCisgCVNUUklQPSIkKFNUUklQX0ZPUl9UQVJHRVQpIjsgZXhwb3J0IFNUUklQOyBcCisgCVdJTkRSRVM9IiQoV0lORFJFU19GT1JfVEFSR0VUKSI7IGV4cG9ydCBXSU5EUkVTOyBcCisgCVdJTkRNQz0iJChXSU5ETUNfRk9SX1RBUkdFVCkiOyBleHBvcnQgV0lORE1DOyBcCistCSQoUlBBVEhfRU5WVkFSKT1gZWNobyAiJChIT1NUX0xJQl9QQVRIKSQoVEFSR0VUX0xJQl9QQVRIKSQkJChSUEFUSF9FTlZWQVIpIiB8IHNlZCAncyw6OiosOixnO3MsXjoqLCw7cyw6KiQkLCwnYDsgZXhwb3J0ICQoUlBBVEhfRU5WVkFSKTsKKytAaWYgZ2NjLWJvb3RzdHJhcAorKwkkKFJQQVRIX0VOVlZBUik9YGVjaG8gIiQoVEFSR0VUX0xJQl9QQVRIKSQkJChSUEFUSF9FTlZWQVIpIiB8IHNlZCAncyw6OiosOixnO3MsXjoqLCw7cyw6KiQkLCwnYDsgZXhwb3J0ICQoUlBBVEhfRU5WVkFSKTsgXAorK0BlbmRpZiBnY2MtYm9vdHN0cmFwCisrCSQoUlBBVEhfRU5WVkFSKT1gZWNobyAiJChIT1NUX0xJQl9QQVRIKSQkJChSUEFUSF9FTlZWQVIpIiB8IHNlZCAncyw6OiosOixnO3MsXjoqLCw7cyw6KiQkLCwnYDsgZXhwb3J0ICQoUlBBVEhfRU5WVkFSKTsKKyAKKyBSQVdfQ1hYX1RBUkdFVF9FWFBPUlRTID0gXAorIAkkKEJBU0VfVEFSR0VUX0VYUE9SVFMpIFwKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS50cGwgYi9NYWtlZmlsZS50cGwKK2luZGV4IDE1MTAyZTUuLjQ1MmQ0N2MgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS50cGwKKysrKyBiL01ha2VmaWxlLnRwbAorQEAgLTI4NCw3ICsyODQsMTAgQEAgQkFTRV9UQVJHRVRfRVhQT1JUUyA9IFwKKyAJU1RSSVA9IiQoU1RSSVBfRk9SX1RBUkdFVCkiOyBleHBvcnQgU1RSSVA7IFwKKyAJV0lORFJFUz0iJChXSU5EUkVTX0ZPUl9UQVJHRVQpIjsgZXhwb3J0IFdJTkRSRVM7IFwKKyAJV0lORE1DPSIkKFdJTkRNQ19GT1JfVEFSR0VUKSI7IGV4cG9ydCBXSU5ETUM7IFwKKy0JJChSUEFUSF9FTlZWQVIpPWBlY2hvICIkKEhPU1RfTElCX1BBVEgpJChUQVJHRVRfTElCX1BBVEgpJCQkKFJQQVRIX0VOVlZBUikiIHwgc2VkICdzLDo6Kiw6LGc7cyxeOiosLDtzLDoqJCQsLCdgOyBleHBvcnQgJChSUEFUSF9FTlZWQVIpOworK0BpZiBnY2MtYm9vdHN0cmFwCisrCSQoUlBBVEhfRU5WVkFSKT1gZWNobyAiJChUQVJHRVRfTElCX1BBVEgpJCQkKFJQQVRIX0VOVlZBUikiIHwgc2VkICdzLDo6Kiw6LGc7cyxeOiosLDtzLDoqJCQsLCdgOyBleHBvcnQgJChSUEFUSF9FTlZWQVIpOyBcCisrQGVuZGlmIGdjYy1ib290c3RyYXAKKysJJChSUEFUSF9FTlZWQVIpPWBlY2hvICIkKEhPU1RfTElCX1BBVEgpJCQkKFJQQVRIX0VOVlZBUikiIHwgc2VkICdzLDo6Kiw6LGc7cyxeOiosLDtzLDoqJCQsLCdgOyBleHBvcnQgJChSUEFUSF9FTlZWQVIpOworIAorIFJBV19DWFhfVEFSR0VUX0VYUE9SVFMgPSBcCisgCSQoQkFTRV9UQVJHRVRfRVhQT1JUUykgXApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8zODAtcG93ZXJwYy1saWJnY2Nfcy1saW5rLWxpYm0ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzM4MC1wb3dlcnBjLWxpYmdjY19zLWxpbmstbGlibS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2Q5MTIxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8zODAtcG93ZXJwYy1saWJnY2Nfcy1saW5rLWxpYm0ucGF0Y2gKQEAgLTAsMCArMSwxMzUgQEAKK2h0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDA4LTEwL21zZzAwMjY5Lmh0bWwKKworT24gZ2xpYmMgdGhlIGxpYmMuc28gY2FycmllcyBhIGNvcHkgb2YgdGhlIG1hdGggZnVuY3Rpb24gY29weXNpZ25sKCkgYnV0CitvbiB1Q2xpYmMgbWF0aCBmdW5jdGlvbnMgbGlrZSBjb3B5c2lnbmwoKSBsaXZlIGluIGxpYm0uIFNpbmNlIGxpYmdjY19zCitjb250YWlucyB1bnJlc29sdmVkIHN5bWJvbHMsIGFueSBhdHRlbXB0IHRvIGxpbmsgYWdhaW5zdCBsaWJnY2Nfcword2l0aG91dCBleHBsaWNpdGVseSBzcGVjaWZ5aW5nIC1sbSBmYWlscywgcmVzdWx0aW5nIGluIGEgYnJva2VuCitib290c3RyYXAgb2YgdGhlIGNvbXBpbGVyLgorCisKK2RpZmYgLXJkdXAgZ2NjLTQuNC4wLm9sZC9nY2MvY29uZmlnL3Qtc2xpYmdjYy1lbGYtdmVyIGdjYy00LjQuMC9nY2MvY29uZmlnL3Qtc2xpYmdjYy1lbGYtdmVyCistLS0gZ2NjLTQuNC4wLm9sZC9nY2MvY29uZmlnL3Qtc2xpYmdjYy1lbGYtdmVyCTIwMDUtMTAtMzEgMTg6MDM6MDguMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvdC1zbGliZ2NjLWVsZi12ZXIJMjAwOC0xMC0wNyAxOToyODoxMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC05LDcgKzksNyBAQCBTSExJQl9NQVAgPSBAc2hsaWJfbWFwX2ZpbGVACisgU0hMSUJfT0JKUyA9IEBzaGxpYl9vYmpzQAorIFNITElCX0RJUiA9IEBtdWx0aWxpYl9kaXJACisgU0hMSUJfU0xJQkRJUl9RVUFMID0gQHNobGliX3NsaWJkaXJfcXVhbEAKKy1TSExJQl9MQyA9IC1sYworK1NITElCX0xDID0gQGxpYmdjY19saWJtQCAtbGMKKyAKKyBTSExJQl9MSU5LID0gJChHQ0NfRk9SX1RBUkdFVCkgJChMSUJHQ0MyX0NGTEFHUykgLXNoYXJlZCAtbm9kZWZhdWx0bGlicyBcCisgCS1XbCwtLXNvbmFtZT0kKFNITElCX1NPTkFNRSkgXAorZGlmZiAtcmR1cCBnY2MtNC40LjAub2xkL2xpYmdjYy9jb25maWd1cmUgZ2NjLTQuNC4wL2xpYmdjYy9jb25maWd1cmUKKy0tLSBnY2MtNC40LjAub2xkL2xpYmdjYy9jb25maWd1cmUJMjAwOC0wNy0xNyAxMDo0MDo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvbGliZ2NjL2NvbmZpZ3VyZQkyMDA4LTEwLTA3IDE5OjQwOjQ4LjAwMDAwMDAwMCArMDIwMAorQEAgLTI3Miw3ICsyNzIsNyBAQCBQQUNLQUdFX1NUUklORz0nR05VIEMgUnVudGltZSBMaWJyYXJ5IDEuCisgUEFDS0FHRV9CVUdSRVBPUlQ9JycKKyAKKyBhY191bmlxdWVfZmlsZT0ic3RhdGljLW9iamVjdC5tayIKKy1hY19zdWJzdF92YXJzPSdTSEVMTCBQQVRIX1NFUEFSQVRPUiBQQUNLQUdFX05BTUUgUEFDS0FHRV9UQVJOQU1FIFBBQ0tBR0VfVkVSU0lPTiBQQUNLQUdFX1NUUklORyBQQUNLQUdFX0JVR1JFUE9SVCBleGVjX3ByZWZpeCBwcmVmaXggcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBsb2NhbHN0YXRlZGlyIGxpYmRpciBpbmNsdWRlZGlyIG9sZGluY2x1ZGVkaXIgaW5mb2RpciBtYW5kaXIgYnVpbGRfYWxpYXMgaG9zdF9hbGlhcyB0YXJnZXRfYWxpYXMgREVGUyBFQ0hPX0MgRUNIT19OIEVDSE9fVCBMSUJTIGxpYmdjY190b3BkaXIgZW5hYmxlX3NoYXJlZCBzbGliZGlyIElOU1RBTExfUFJPR1JBTSBJTlNUQUxMX1NDUklQVCBJTlNUQUxMX0RBVEEgQVdLIGJ1aWxkIGJ1aWxkX2NwdSBidWlsZF92ZW5kb3IgYnVpbGRfb3MgaG9zdCBob3N0X2NwdSBob3N0X3ZlbmRvciBob3N0X29zIGhvc3Rfbm9uY2Fub25pY2FsIGJ1aWxkX2xpYnN1YmRpciBidWlsZF9zdWJkaXIgaG9zdF9zdWJkaXIgdGFyZ2V0X3N1YmRpciBBUiBhY19jdF9BUiBMSVBPIGFjX2N0X0xJUE8gTk0gYWNfY3RfTk0gUkFOTElCIGFjX2N0X1JBTkxJQiBTVFJJUCBhY19jdF9TVFJJUCBMTl9TIENDIENGTEFHUyBMREZMQUdTIENQUEZMQUdTIGFjX2N0X0NDIEVYRUVYVCBPQkpFWFQgQ1BQIGRlY2ltYWxfZmxvYXQgZW5hYmxlX2RlY2ltYWxfZmxvYXQgZml4ZWRfcG9pbnQgdmlzX2hpZGUgc2V0X2hhdmVfY2NfdGxzIHRtYWtlX2ZpbGUgZXh0cmFfcGFydHMgYXNtX2hpZGRlbl9vcCBMSUJPQkpTIExUTElCT0JKUycKKythY19zdWJzdF92YXJzPSdTSEVMTCBQQVRIX1NFUEFSQVRPUiBQQUNLQUdFX05BTUUgUEFDS0FHRV9UQVJOQU1FIFBBQ0tBR0VfVkVSU0lPTiBQQUNLQUdFX1NUUklORyBQQUNLQUdFX0JVR1JFUE9SVCBleGVjX3ByZWZpeCBwcmVmaXggcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBsb2NhbHN0YXRlZGlyIGxpYmRpciBpbmNsdWRlZGlyIG9sZGluY2x1ZGVkaXIgaW5mb2RpciBtYW5kaXIgYnVpbGRfYWxpYXMgaG9zdF9hbGlhcyB0YXJnZXRfYWxpYXMgREVGUyBFQ0hPX0MgRUNIT19OIEVDSE9fVCBMSUJTIGxpYmdjY190b3BkaXIgZW5hYmxlX3NoYXJlZCBzbGliZGlyIElOU1RBTExfUFJPR1JBTSBJTlNUQUxMX1NDUklQVCBJTlNUQUxMX0RBVEEgQVdLIGJ1aWxkIGJ1aWxkX2NwdSBidWlsZF92ZW5kb3IgYnVpbGRfb3MgaG9zdCBob3N0X2NwdSBob3N0X3ZlbmRvciBob3N0X29zIGhvc3Rfbm9uY2Fub25pY2FsIGJ1aWxkX2xpYnN1YmRpciBidWlsZF9zdWJkaXIgaG9zdF9zdWJkaXIgdGFyZ2V0X3N1YmRpciBBUiBhY19jdF9BUiBMSVBPIGFjX2N0X0xJUE8gTk0gYWNfY3RfTk0gUkFOTElCIGFjX2N0X1JBTkxJQiBTVFJJUCBhY19jdF9TVFJJUCBMTl9TIENDIENGTEFHUyBMREZMQUdTIENQUEZMQUdTIGFjX2N0X0NDIEVYRUVYVCBPQkpFWFQgQ1BQIGRlY2ltYWxfZmxvYXQgZW5hYmxlX2RlY2ltYWxfZmxvYXQgZml4ZWRfcG9pbnQgdmlzX2hpZGUgc2V0X2hhdmVfY2NfdGxzIExJQkdDQ19MSUJNIHRtYWtlX2ZpbGUgZXh0cmFfcGFydHMgYXNtX2hpZGRlbl9vcCBMSUJPQkpTIExUTElCT0JKUycKKyBhY19zdWJzdF9maWxlcz0nJworIGFjX3B3ZD1gcHdkYAorIAorQEAgLTM1MjIsNiArMzUyMiwzOSBAQCBpZiB0ZXN0ICIkZW5hYmxlX3RscyAkZ2NjX2N2X2hhdmVfY2NfdGxzCisgZmkKKyAKKyAKKysjIE9uIHBvd2VycGMgbGliZ2NjX3MgcmVmZXJlbmNlcyBjb3B5c2lnbmwgd2hpY2ggaXMgYSBsaWJtIGZ1bmN0aW9uIGJ1dAorKyMgZ2xpYmMgYXBwYXJlbnRseSBhbHNvIHByb3ZpZGVzIGl0IHZpYSBsaWJjIGFzIG9wcG9zZWQgdG8gdUNsaWJjIHdoZXJlCisrIyBpdCBsaXZlcyBpbiBsaWJtLgorK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGNvcHlzaWdubCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGNvcHlzaWdubC4uLiAkRUNIT19DIiA+JjYKKytpZiB0ZXN0ICIke2xpYmdjY19jdl9jb3B5c2lnbmxfbGliK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysKKysgICAgZWNobyAnI2luY2x1ZGUgPGZlYXR1cmVzLmg+JyA+IGNvbmZ0ZXN0LmMKKysgICAgZWNobyAnaW50IHRoZV9saWJjID0gX19VQ0xJQkNfXyArIF9fcG93ZXJwY19fOycgPj4gY29uZnRlc3QuYworKyAgICBsaWJnY2NfY3ZfY29weXNpZ25sX2xpYj0iLWxjIgorKyAgICBpZiB7IGFjX3RyeT0nJHtDQy1jY30gLVMgY29uZnRlc3QuYyAtbyBjb25mdGVzdC5zIDE+JjUnCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfQorKyAgICB0aGVuCisrCWxpYmdjY19jdl9jb3B5c2lnbmxfbGliPSItbG0iCisrICAgIGZpCisrICAgIHJtIC1mIGNvbmZ0ZXN0LioKKysKKytmaQorK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsaWJnY2NfY3ZfY29weXNpZ25sX2xpYiIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGxpYmdjY19jdl9jb3B5c2lnbmxfbGliIiA+JjYKKysKKytjYXNlIC8ke2xpYmdjY19jdl9jb3B5c2lnbmxfbGlifS8gaW4KKysgIC8tbG0vKSBMSUJHQ0NfTElCTT0iJExJQkdDQ19MSUJNIC1sbSIgOzsKKysgICopIExJQkdDQ19MSUJNPSA7OworK2VzYWMKKysKKysKKyAjIENvbmRpdGlvbmFsaXplIHRoZSBtYWtlZmlsZSBmb3IgdGhpcyB0YXJnZXQgbWFjaGluZS4KKyB0bWFrZV9maWxlXz0KKyBmb3IgZiBpbiAke3RtYWtlX2ZpbGV9CitAQCAtNDI0Miw2ICs0Mjc1LDcgQEAgcyxAZW5hYmxlX2RlY2ltYWxfZmxvYXRALCRlbmFibGVfZGVjaW1hbAorIHMsQGZpeGVkX3BvaW50QCwkZml4ZWRfcG9pbnQsO3QgdAorIHMsQHZpc19oaWRlQCwkdmlzX2hpZGUsO3QgdAorIHMsQHNldF9oYXZlX2NjX3Rsc0AsJHNldF9oYXZlX2NjX3Rscyw7dCB0CisrcyxATElCR0NDX0xJQk1ALCRMSUJHQ0NfTElCTSw7dCB0CisgcyxAdG1ha2VfZmlsZUAsJHRtYWtlX2ZpbGUsO3QgdAorIHMsQGV4dHJhX3BhcnRzQCwkZXh0cmFfcGFydHMsO3QgdAorIHMsQGFzbV9oaWRkZW5fb3BALCRhc21faGlkZGVuX29wLDt0IHQKK2RpZmYgLXJkdXAgZ2NjLTQuNC4wLm9sZC9saWJnY2MvY29uZmlndXJlLmFjIGdjYy00LjQuMC9saWJnY2MvY29uZmlndXJlLmFjCistLS0gZ2NjLTQuNC4wLm9sZC9saWJnY2MvY29uZmlndXJlLmFjCTIwMDgtMDctMTcgMTA6NDA6NTMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2xpYmdjYy9jb25maWd1cmUuYWMJMjAwOC0xMC0wNyAxOTozNDo0OC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMDMsNiArMjAzLDI3IEBAIGlmIHRlc3QgIiRlbmFibGVfdGxzICRnY2NfY3ZfaGF2ZV9jY190bHMKKyBmaQorIEFDX1NVQlNUKHNldF9oYXZlX2NjX3RscykKKyAKKysjIE9uIHBvd2VycGMgbGliZ2NjX3MgcmVmZXJlbmNlcyBjb3B5c2lnbmwgd2hpY2ggaXMgYSBsaWJtIGZ1bmN0aW9uIGJ1dAorKyMgZ2xpYmMgYXBwYXJlbnRseSBhbHNvIHByb3ZpZGVzIGl0IHZpYSBsaWJjIGFzIG9wcG9zZWQgdG8gdUNsaWJjIHdoZXJlCisrIyBpdCBsaXZlcyBpbiBsaWJtLgorK0FDX0NBQ0hFX0NIRUNLCisrICBsaWJnY2NfY3ZfY29weXNpZ25sX2xpYiwKKysgICAgZWNobyAnI2luY2x1ZGUgPGZlYXR1cmVzLmg+JyA+IGNvbmZ0ZXN0LmMKKysgICAgZWNobyAnaW50IHRoZV9saWJjID0gX19VQ0xJQkNfXyArIF9fcG93ZXJwY19fOycgPj4gY29uZnRlc3QuYworKyAgICBsaWJnY2NfY3ZfY29weXNpZ25sX2xpYj0iLWxjIgorKyAgICBpZiBBQ19UUllfQ09NTUFORCgke0NDLWNjfSAtUyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LnMgMT4mQVNfTUVTU0FHRV9MT0dfRkQpCisrICAgIHRoZW4KKysJbGliZ2NjX2N2X2NvcHlzaWdubF9saWI9Ii1sbSIKKysgICAgZmkKKysgICAgcm0gLWYgY29uZnRlc3QuKgorKyAgXSkKKysKKytjYXNlIC8ke2xpYmdjY19jdl9jb3B5c2lnbmxfbGlifS8gaW4KKysgIC8tbG0vKSBMSUJHQ0NfTElCTT0iJExJQkdDQ19MSUJNIC1sbSIgOzsKKysgICopIExJQkdDQ19MSUJNPSA7OworK2VzYWMKKytBQ19TVUJTVChMSUJHQ0NfTElCTSkKKysKKyAjIENvbmRpdGlvbmFsaXplIHRoZSBtYWtlZmlsZSBmb3IgdGhpcyB0YXJnZXQgbWFjaGluZS4KKyB0bWFrZV9maWxlXz0KKyBmb3IgZiBpbiAke3RtYWtlX2ZpbGV9CitkaWZmIC1yZHVwIGdjYy00LjQuMC5vbGQvbGliZ2NjL01ha2VmaWxlLmluIGdjYy00LjQuMC9saWJnY2MvTWFrZWZpbGUuaW4KKy0tLSBnY2MtNC40LjAub2xkL2xpYmdjYy9NYWtlZmlsZS5pbgkyMDA4LTA3LTE3IDEwOjQwOjUzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9saWJnY2MvTWFrZWZpbGUuaW4JMjAwOC0xMC0wNyAxOToyODoxMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC00MCw2ICs0MCw3IEBAIGVuYWJsZV9zaGFyZWQgPSBAZW5hYmxlX3NoYXJlZEAKKyBkZWNpbWFsX2Zsb2F0ID0gQGRlY2ltYWxfZmxvYXRACisgZW5hYmxlX2RlY2ltYWxfZmxvYXQgPSBAZW5hYmxlX2RlY2ltYWxfZmxvYXRACisgZml4ZWRfcG9pbnQgPSBAZml4ZWRfcG9pbnRACisrTElCR0NDX0xJQk0gPSBATElCR0NDX0xJQk1ACisgCisgaG9zdF9ub25jYW5vbmljYWwgPSBAaG9zdF9ub25jYW5vbmljYWxACisgCitAQCAtNzg2LDkgKzc4NywxMCBAQCBsaWJnY2NfcyQoU0hMSUJfRVhUKTogJChsaWJnY2Mtcy1vYmplY3RzCisgCQlAbXVsdGlsaWJfZGlyQCwkKE1VTFRJRElSKSwkKHN1YnN0IFwKKyAJCUBzaGxpYl9vYmpzQCwkKG9iamVjdHMpLCQoc3Vic3QgXAorIAkJQHNobGliX2Jhc2VfbmFtZUAsbGliZ2NjX3MsJChzdWJzdCBcCisrCQlAbGliZ2NjX2xpYm1ALCQoTElCR0NDX0xJQk0pLCQoc3Vic3QgXAorIAkJQHNobGliX21hcF9maWxlQCwkKG1hcGZpbGUpLCQoc3Vic3QgXAorIAkJQHNobGliX3NsaWJkaXJfcXVhbEAsJChNVUxUSU9TU1VCRElSKSwkKHN1YnN0IFwKKy0JCUBzaGxpYl9zbGliZGlyQCwkKHNobGliX3NsaWJkaXIpLCQoU0hMSUJfTElOSykpKSkpKSkpCisrCQlAc2hsaWJfc2xpYmRpckAsJChzaGxpYl9zbGliZGlyKSwkKFNITElCX0xJTkspKSkpKSkpKSkKKyAKKyBsaWJ1bndpbmQkKFNITElCX0VYVCk6ICQobGlidW53aW5kLXMtb2JqZWN0cykgJChleHRyYS1wYXJ0cykKKyAJIyBAbXVsdGlsaWJfZmxhZ3NAIGlzIHN0aWxsIG5lZWRlZCBiZWNhdXNlIHRoaXMgbWF5IHVzZQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8zOTAtYXJtLXNvZnRmbG9hdC1saWJnY2MucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzM5MC1hcm0tc29mdGZsb2F0LWxpYmdjYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmEzMGEzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi8zOTAtYXJtLXNvZnRmbG9hdC1saWJnY2MucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorW1BBVENIXSBhZGQgdGhlIGNvcnJlY3Qgc3ltYm9scyB0byBsaWJnY2MgZm9yIHVjbGliYyBhcm0gc29mdGZsb2F0CisKK1NpZ25lZC1vZmYtYnk6IFBldGVyIEtvcnNnYWFyZCA8amFjbWV0QHN1bnNpdGUuZGs+CistLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL2FybS90LWxpbnV4ICAgICB8ICAgIDYgKysrKystCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC40LjAvZ2NjL2NvbmZpZy9hcm0vdC1saW51eAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvYXJtL3QtbGludXgKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy9hcm0vdC1saW51eAorQEAgLTQsNyArNCwxMSBAQAorIAorIExJQjFBU01TUkMgPSBhcm0vbGliMWZ1bmNzLmFzbQorIExJQjFBU01GVU5DUyA9IF91ZGl2c2kzIF9kaXZzaTMgX3Vtb2RzaTMgX21vZHNpMyBfZHZtZF9sbnggX2NsenNpMiBfY2x6ZGkyIFwKKy0JX2FybV9hZGRzdWJkZjMgX2FybV9hZGRzdWJzZjMKKysJX2FybV9hZGRzdWJkZjMgX2FybV9hZGRzdWJzZjMgXAorKwlfYXJtX25lZ2RmMiBfYXJtX211bGRpdmRmMyBfYXJtX2NtcGRmMiBfYXJtX3Vub3JkZGYyIFwKKysJX2FybV9maXhkZnNpIF9hcm1fZml4dW5zZGZzaSBfYXJtX3RydW5jZGZzZjIgXAorKwlfYXJtX25lZ3NmMiBfYXJtX211bGRpdnNmMyBfYXJtX2NtcHNmMiBfYXJtX3Vub3Jkc2YyIFwKKysJX2FybV9maXhzZnNpIF9hcm1fZml4dW5zc2ZzaQorIAorICMgTVVMVElMSUJfT1BUSU9OUyA9IG1oYXJkLWZsb2F0L21zb2Z0LWZsb2F0CisgIyBNVUxUSUxJQl9ESVJOQU1FUyA9IGhhcmQtZmxvYXQgc29mdC1mbG9hdAorSW5kZXg6IGdjYy00LjQuMC9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCitAQCAtNjAsNyArNjAsNyBAQAorICAgICV7c2hhcmVkOi1sY30gXAorICAgICV7IXNoYXJlZDole3Byb2ZpbGU6LWxjX3B9JXshcHJvZmlsZTotbGN9fSIKKyAKKy0jZGVmaW5lIExJQkdDQ19TUEVDICIle21zb2Z0LWZsb2F0Oi1sZmxvYXR9ICV7bWZsb2F0LWFiaT1zb2Z0KjotbGZsb2F0fSAtbGdjYyIKKysjZGVmaW5lIExJQkdDQ19TUEVDICItbGdjYyIKKyAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzQwMC1wcjQyMjg5LWZpeC1saWJmZmktYnVpbGQtb24tYXJtLW9hYmkucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzQwMC1wcjQyMjg5LWZpeC1saWJmZmktYnVpbGQtb24tYXJtLW9hYmkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY1NDg3OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjIvNDAwLXByNDIyODktZml4LWxpYmZmaS1idWlsZC1vbi1hcm0tb2FiaS5wYXRjaApAQCAtMCwwICsxLDExIEBACistLS0gZ2NjLTQuMy40L2xpYmZmaS9zcmMvYXJtL3N5c3YuUwkKKysrKyBnY2MtNC4zLjQvbGliZmZpL3NyYy9hcm0vc3lzdi5TCQorQEAgLTIzNSw3ICsyMzUsNyBAQCBBUk1fRlVOQ19TVEFSVCBmZmlfY2xvc3VyZV9TWVNWCisgCXN0bWZkCXNwISwge2lwLCBscn0KKyAJVU5XSU5EIC5zYXZlCXtyMCwgbHJ9CisgCWFkZAlyMiwgc3AsICM4CistCS5wYWQgIzE2CisrCVVOV0lORCAucGFkICMxNgorIAlzdWIJc3AsIHNwLCAjMTYKKyAJc3RyCXNwLCBbc3AsICM4XQorIAlhZGQJcjEsIHNwLCAjOApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi80MTAtbGliZ2NjX2VoLmEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4yLzQxMC1saWJnY2NfZWguYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzUzMjYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMi80MTAtbGliZ2NjX2VoLmEucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorSGlnaGx5IGluc3BpcmVkIGJ5OgorICBodHRwOi8vbGFuZGxleS5uZXQvaGcvYWJvcmlnaW5hbC9maWxlLzdlMDc0N2E2NjVhYi9zb3VyY2VzL3BhdGNoZXMvZ2NjLWNvcmUtbGliZ2NjZWgucGF0Y2gKKworZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9saWJnY2MvTWFrZWZpbGUuaW4gZ2NjLTQuNC4wL2xpYmdjYy9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjQuMC5vcmlnL2xpYmdjYy9NYWtlZmlsZS5pbgkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9saWJnY2MvTWFrZWZpbGUuaW4JMjAxMS0wOS0xMiAxNzowNToyNS4xMjExMjQ1NTkgKzAyMDAKK0BAIC03NTQsOCArNzU0LDkgQEAKKyBsaWJnY2NfcyQoU0hMSUJfRVhUKTogbGlidW53aW5kJChTSExJQl9FWFQpCisgZW5kaWYKKyAKKythbGw6IGxpYmdjY19laC5hCisgaWZlcSAoJChlbmFibGVfc2hhcmVkKSx5ZXMpCistYWxsOiBsaWJnY2NfZWguYSBsaWJnY2NfcyQoU0hMSUJfRVhUKQorK2FsbDogbGliZ2NjX3MkKFNITElCX0VYVCkKKyBpZm5lcSAoJChMSUJVTldJTkQpLCkKKyBhbGw6IGxpYnVud2luZCQoU0hMSUJfRVhUKQorIGVuZGlmCitAQCAtOTI0LDEwICs5MjUsNiBAQAorIGluc3RhbGwtc2hhcmVkOgorIAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGluc3RfbGliZGlyKQorIAorLQkkKElOU1RBTExfREFUQSkgbGliZ2NjX2VoLmEgJChERVNURElSKSQoaW5zdF9saWJkaXIpLworLQljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCistCSQoUkFOTElCKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKy0KKyAJJChzdWJzdCBAbXVsdGlsaWJfZGlyQCwkKE1VTFRJRElSKSwkKHN1YnN0IFwKKyAJCUBzaGxpYl9iYXNlX25hbWVALGxpYmdjY19zLCQoc3Vic3QgXAorIAkJQHNobGliX3NsaWJkaXJfcXVhbEAsJChNVUxUSU9TU1VCRElSKSwkKFNITElCX0lOU1RBTEwpKSkpCitAQCAtOTQyLDYgKzkzOSwxMCBAQAorIAljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjb3YuYQorIAkkKFJBTkxJQikgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjb3YuYQorIAorKwkkKElOU1RBTExfREFUQSkgbGliZ2NjX2VoLmEgJChERVNURElSKSQoaW5zdF9saWJkaXIpLworKwljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCisrCSQoUkFOTElCKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKysKKyAJcGFydHM9IiQoSU5TVEFMTF9QQVJUUykiOwkJCQlcCisgCWZvciBmaWxlIGluICQkcGFydHM7IGRvCQkJCQlcCisgCSAgcm0gLWYgJChERVNURElSKSQoaW5zdF9saWJkaXIpLyQkZmlsZTsJCVwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMTAwLWFscGhhLW1pZWVlLWRlZmF1bHQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzEwMC1hbHBoYS1taWVlZS1kZWZhdWx0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZjBkYzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzEwMC1hbHBoYS1taWVlZS1kZWZhdWx0LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5oIGdjYy00LjQuMC9nY2MvY29uZmlnL2FscGhhL2FscGhhLmgKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2FscGhhL2FscGhhLmgJMjAwOS0wMi0yMCAxNjoyMDozOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5oCTIwMDktMDUtMjcgMjE6Mzc6NTguMDAwMDAwMDAwICswMjAwCitAQCAtOTUsNiArOTUsOCBAQAorICAgd2hpbGUgKDApCisgI2VuZGlmCisgCisrI2RlZmluZSBDUFBfU1BFQyAiJXshbm8taWVlZTotbWllZWV9IgorKworICNkZWZpbmUgV09SRF9TV0lUQ0hfVEFLRVNfQVJHKFNUUikJCVwKKyAgKCFzdHJjbXAgKFNUUiwgInJwYXRoIikgfHwgREVGQVVMVF9XT1JEX1NXSVRDSF9UQUtFU19BUkcoU1RSKSkKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5vcHQgZ2NjLTQuNC4wL2djYy9jb25maWcvYWxwaGEvYWxwaGEub3B0CistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5vcHQJMjAwNy0wOC0wMiAxMjo0OTozMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5vcHQJMjAwOS0wNS0yNyAyMTozNzo1OC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zOSw3ICszOSw3IEBACisgUmVxdWVzdCBJRUVFLWNvbmZvcm1hbnQgbWF0aCBsaWJyYXJ5IHJvdXRpbmVzIChPU0YvMSkKKyAKKyBtaWVlZQorLVRhcmdldCBSZXBvcnQgUmVqZWN0TmVnYXRpdmUgTWFzayhJRUVFKQorK1RhcmdldCBSZXBvcnQgTWFzayhJRUVFKQorIEVtaXQgSUVFRS1jb25mb3JtYW50IGNvZGUsIHdpdGhvdXQgaW5leGFjdCBleGNlcHRpb25zCisgCisgbWllZWUtd2l0aC1pbmV4YWN0CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzExMC10cmFtcG9saW5ld2Fybi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMTEwLXRyYW1wb2xpbmV3YXJuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZWY0OTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzExMC10cmFtcG9saW5ld2Fybi5wYXRjaApAQCAtMCwwICsxLDI3IEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9idWlsdGlucy5jIGdjYy00LjQuMC9nY2MvYnVpbHRpbnMuYworLS0tIGdjYy00LjQuMC5vcmlnL2djYy9idWlsdGlucy5jCTIwMDktMDMtMzAgMTk6NDI6MjcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9idWlsdGlucy5jCTIwMDktMDUtMjcgMjE6Mzg6MDEuMDAwMDAwMDAwICswMjAwCitAQCAtNTc2OCw2ICs1NzY4LDkgQEAKKyAgIHRyYW1wb2xpbmVzX2NyZWF0ZWQgPSAxOworICAgSU5JVElBTElaRV9UUkFNUE9MSU5FIChyX3RyYW1wLCByX2Z1bmMsIHJfY2hhaW4pOworIAorKyAgaWYgKHdhcm5fdHJhbXBvbGluZXMpCisrICAgIHdhcm5pbmcgKE9QVF9XdHJhbXBvbGluZXMsICJnZW5lcmF0aW5nIHRyYW1wb2xpbmUgaW4gb2JqZWN0IChyZXF1aXJlcyBleGVjdXRhYmxlIHN0YWNrKSIpOworKworICAgcmV0dXJuIGNvbnN0MF9ydHg7CisgfQorIAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29tbW9uLm9wdCBnY2MtNC40LjAvZ2NjL2NvbW1vbi5vcHQKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29tbW9uLm9wdAkyMDA5LTAzLTI4IDE4OjI4OjQ1LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuMC9nY2MvY29tbW9uLm9wdAkyMDA5LTA1LTI3IDIxOjM4OjAxLjAwMDAwMDAwMCArMDIwMAorQEAgLTE5Nyw2ICsxOTcsMTAgQEAKKyBDb21tb24gVmFyKHdhcm5fdHlwZV9saW1pdHMpIEluaXQoLTEpIFdhcm5pbmcKKyBXYXJuIGlmIGEgY29tcGFyaXNvbiBpcyBhbHdheXMgdHJ1ZSBvciBhbHdheXMgZmFsc2UgZHVlIHRvIHRoZSBsaW1pdGVkIHJhbmdlIG9mIHRoZSBkYXRhIHR5cGUKKyAKKytXdHJhbXBvbGluZXMKKytDb21tb24gVmFyKHdhcm5fdHJhbXBvbGluZXMpIEluaXQoMSkKKytXYXJuIHdoZW5ldmVyIGEgdHJhbXBvbGluZSBpcyBnZW5lcmF0ZWQKKysKKyBXdW5pbml0aWFsaXplZAorIENvbW1vbiBWYXIod2Fybl91bmluaXRpYWxpemVkKSBXYXJuaW5nCisgV2FybiBhYm91dCB1bmluaXRpYWxpemVkIGF1dG9tYXRpYyB2YXJpYWJsZXMKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMTIwLWphdmEtbm9tdWx0aS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMTIwLWphdmEtbm9tdWx0aS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDU0NzljCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMy8xMjAtamF2YS1ub211bHRpLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvbGliamF2YS9jb25maWd1cmUgZ2NjLTQuNC4wL2xpYmphdmEvY29uZmlndXJlCistLS0gZ2NjLTQuNC4wLm9yaWcvbGliamF2YS9jb25maWd1cmUJMjAwOS0wNC0yMSAxMTowODowOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvbGliamF2YS9jb25maWd1cmUJMjAwOS0wNS0yNyAyMTozODowMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMDIxLDYgKzEwMjEsOCBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD15ZXMKKyAgIC0tZW5hYmxlLWphdmEtbWFpbnRhaW5lci1tb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdyByZWJ1aWxkaW5nIG9mIC5jbGFzcyBhbmQgLmggZmlsZXMKKysgIC0tZW5hYmxlLWxpYmphdmEtbXVsdGlsaWIKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGxpYmphdmEgYXMgbXVsdGlsaWIKKyAgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICBzcGVlZHMgdXAgb25lLXRpbWUgYnVpbGQKKyAgIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgICBkbyBub3QgcmVqZWN0IHNsb3cgZGVwZW5kZW5jeSBleHRyYWN0b3JzCisgICAtLWVuYWJsZS1tYWludGFpbmVyLW1vZGUgIGVuYWJsZSBtYWtlIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgbm90IHVzZWZ1bAorQEAgLTE5NzMsNiArMTk3NSwxNiBAQAorIGZpCisgCisgCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYmphdmEtbXVsdGlsaWIgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7ZW5hYmxlX2xpYmphdmFfbXVsdGlsaWIrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX2xpYmphdmFfbXVsdGlsaWI7CisrZmkKKysKKytpZiB0ZXN0ICIkZW5hYmxlX2xpYmphdmFfbXVsdGlsaWIiID0gbm87IHRoZW4KKysgIG11bHRpbGliPW5vCisrICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzIC0tZGlzYWJsZS1tdWx0aWxpYiIKKytmaQorKworICMgSXQgbWF5IG5vdCBiZSBzYWZlIHRvIHJ1biBsaW5raW5nIHRlc3RzIGluIEFDX1BST0dfQ0MvQUNfUFJPR19DWFguCisgCisgCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2xpYmphdmEvY29uZmlndXJlLmFjIGdjYy00LjQuMC9saWJqYXZhL2NvbmZpZ3VyZS5hYworLS0tIGdjYy00LjQuMC5vcmlnL2xpYmphdmEvY29uZmlndXJlLmFjCTIwMDktMDQtMDkgMjM6NTQ6MjguMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2xpYmphdmEvY29uZmlndXJlLmFjCTIwMDktMDUtMjcgMjE6Mzg6MDMuMDAwMDAwMDAwICswMjAwCitAQCAtMTM5LDYgKzEzOSwxMyBAQAorIAlbYWxsb3cgcmVidWlsZGluZyBvZiAuY2xhc3MgYW5kIC5oIGZpbGVzXSkpCisgQU1fQ09ORElUSU9OQUwoSkFWQV9NQUlOVEFJTkVSX01PREUsIHRlc3QgIiRlbmFibGVfamF2YV9tYWludGFpbmVyX21vZGUiID0geWVzKQorIAorK0FDX0FSR19FTkFCTEUobGliamF2YS1tdWx0aWxpYiwKKysJQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxpYmphdmEtbXVsdGlsaWJdLCBbYnVpbGQgbGliamF2YSBhcyBtdWx0aWxpYl0pKQorK2lmIHRlc3QgIiRlbmFibGVfbGliamF2YV9tdWx0aWxpYiIgPSBubzsgdGhlbgorKyAgbXVsdGlsaWI9bm8KKysgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1kaXNhYmxlLW11bHRpbGliIgorK2ZpCisrCisgIyBJdCBtYXkgbm90IGJlIHNhZmUgdG8gcnVuIGxpbmtpbmcgdGVzdHMgaW4gQUNfUFJPR19DQy9BQ19QUk9HX0NYWC4KKyBHQ0NfTk9fRVhFQ1VUQUJMRVMKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMTMwLWNyb3NzLWNvbXBpbGUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzEzMC1jcm9zcy1jb21waWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZmU3YzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzEzMC1jcm9zcy1jb21waWxlLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZ3VyZSBnY2MtNC40LjAvZ2NjL2NvbmZpZ3VyZQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWd1cmUJMjAwOS0wMy0yNCAxODo0NjowMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZ3VyZQkyMDA5LTA1LTI3IDIxOjM4OjA2LjAwMDAwMDAwMCArMDIwMAorQEAgLTEzOTk3LDcgKzEzOTk3LDcgQEAKKyAJICAgIHwgcG93ZXJwYyotKi0qLHBvd2VycGM2NCotKi0qKQorIAkJQ1JPU1M9IiRDUk9TUyAtRE5BVElWRV9DUk9TUyIgOzsKKyAJZXNhYworLWVsaWYgdGVzdCAieCRUQVJHRVRfU1lTVEVNX1JPT1QiICE9IHg7IHRoZW4KKytlbGlmIHRlc3QgIngkVEFSR0VUX1NZU1RFTV9ST09UIiAhPSB4IC1vICRidWlsZCAhPSAkaG9zdDsgdGhlbgorICAgICAgICAgU1lTVEVNX0hFQURFUl9ESVI9JGJ1aWxkX3N5c3RlbV9oZWFkZXJfZGlyCisgZmkKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYyBnY2MtNC40LjAvZ2NjL2NvbmZpZ3VyZS5hYworLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWd1cmUuYWMJMjAwOS0wMy0yNCAxODo0NjowMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZ3VyZS5hYwkyMDA5LTA1LTI3IDIxOjM4OjA2LjAwMDAwMDAwMCArMDIwMAorQEAgLTE3MjAsNyArMTcyMCw3IEBACisgCSAgICB8IHBvd2VycGMqLSotKixwb3dlcnBjNjQqLSotKikKKyAJCUNST1NTPSIkQ1JPU1MgLUROQVRJVkVfQ1JPU1MiIDs7CisgCWVzYWMKKy1lbGlmIHRlc3QgIngkVEFSR0VUX1NZU1RFTV9ST09UIiAhPSB4OyB0aGVuCisrZWxpZiB0ZXN0ICJ4JFRBUkdFVF9TWVNURU1fUk9PVCIgIT0geCAtbyAkYnVpbGQgIT0gJGhvc3Q7IHRoZW4KKyAgICAgICAgIFNZU1RFTV9IRUFERVJfRElSPSRidWlsZF9zeXN0ZW1faGVhZGVyX2RpciAKKyBmaQorIAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvdW53aW5kLWR3Mi5jIGdjYy00LjQuMC9nY2MvdW53aW5kLWR3Mi5jCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL3Vud2luZC1kdzIuYwkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvdW53aW5kLWR3Mi5jCTIwMDktMDUtMjcgMjE6Mzg6MDYuMDAwMDAwMDAwICswMjAwCitAQCAtMzI5LDkgKzMyOSwxMSBAQAorIH0KKyAjZW5kaWYKKyAKKysjaWZuZGVmIGluaGliaXRfbGliYworICNpZmRlZiBNRF9VTldJTkRfU1VQUE9SVAorICNpbmNsdWRlIE1EX1VOV0lORF9TVVBQT1JUCisgI2VuZGlmCisrI2VuZGlmCisgDAorIC8qIEV4dHJhY3QgYW55IGludGVyZXN0aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIENJRSBmb3IgdGhlIHRyYW5zbGF0aW9uCisgICAgdW5pdCBGIGJlbG9uZ3MgdG8uICBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBieXRlIGFmdGVyIHRoZSBhdWdtZW50YXRpb24sCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzE0MC1kZWZhdWx0LWZvcm1hdC1zZWN1cml0eS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMTQwLWRlZmF1bHQtZm9ybWF0LXNlY3VyaXR5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxOTQyZjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzE0MC1kZWZhdWx0LWZvcm1hdC1zZWN1cml0eS5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jLWNvbW1vbi5jIGdjYy00LjQuMC9nY2MvYy1jb21tb24uYworLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jLWNvbW1vbi5jCTIwMDktMDMtMzAgMTk6NDI6MjcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jLWNvbW1vbi5jCTIwMDktMDUtMjcgMjE6Mzg6MDguMDAwMDAwMDAwICswMjAwCitAQCAtMzAxLDcgKzMwMSw3IEBACisgLyogV2FybiBhYm91dCBmb3JtYXQvYXJndW1lbnQgYW5vbWFsaWVzIGluIGNhbGxzIHRvIGZvcm1hdHRlZCBJL08gZnVuY3Rpb25zCisgICAgKCpwcmludGYsICpzY2FuZiwgc3RyZnRpbWUsIHN0cmZtb24sIGV0Yy4pLiAgKi8KKyAKKy1pbnQgd2Fybl9mb3JtYXQ7CisraW50IHdhcm5fZm9ybWF0ID0gMTsKKyAKKyAvKiBXYXJuIGFib3V0IHVzaW5nIF9fbnVsbCAoYXMgTlVMTCBpbiBDKyspIGFzIHNlbnRpbmVsLiAgRm9yIGNvZGUgY29tcGlsZWQKKyAgICB3aXRoIEdDQyB0aGlzIGRvZXNuJ3QgbWF0dGVyIGFzIF9fbnVsbCBpcyBndWFyYW50ZWVkIHRvIGhhdmUgdGhlIHJpZ2h0CitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jLm9wdCBnY2MtNC40LjAvZ2NjL2Mub3B0CistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2Mub3B0CTIwMDktMDMtMTggMjI6MTQ6NTMuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC4wL2djYy9jLm9wdAkyMDA5LTA1LTI3IDIxOjM4OjA4LjAwMDAwMDAwMCArMDIwMAorQEAgLTIzNiw3ICsyMzYsNyBAQAorIFdhcm4gYWJvdXQgZm9ybWF0IHN0cmluZ3MgdGhhdCBjb250YWluIE5VTCBieXRlcworIAorIFdmb3JtYXQtc2VjdXJpdHkKKy1DIE9iakMgQysrIE9iakMrKyBWYXIod2Fybl9mb3JtYXRfc2VjdXJpdHkpIFdhcm5pbmcKKytDIE9iakMgQysrIE9iakMrKyBWYXIod2Fybl9mb3JtYXRfc2VjdXJpdHkpIEluaXQoMSkgV2FybmluZworIFdhcm4gYWJvdXQgcG9zc2libGUgc2VjdXJpdHkgcHJvYmxlbXMgd2l0aCBmb3JtYXQgZnVuY3Rpb25zCisgCisgV2Zvcm1hdC15MmsKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvZ2NjL2RvYy9pbnZva2UudGV4aSBnY2MtNC40LjAvZ2NjL2RvYy9pbnZva2UudGV4aQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9kb2MvaW52b2tlLnRleGkJMjAwOS0wNC0wMSAwOToxODo0Ny4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvZ2NjL2RvYy9pbnZva2UudGV4aQkyMDA5LTA1LTI3IDIxOjM4OjA4LjAwMDAwMDAwMCArMDIwMAorQEAgLTI4NjcsNiArMjg2Nyw5IEBACisgQG9wdGlvbnstV2Zvcm1hdC1ub25saXRlcmFsfSwgQG9wdGlvbnstV2Zvcm1hdC1zZWN1cml0eX0sIGFuZAorIEBvcHRpb257LVdmb3JtYXQ9Mn0gYXJlIGF2YWlsYWJsZSwgYnV0IGFyZSBub3QgaW5jbHVkZWQgaW4gQG9wdGlvbnstV2FsbH0uCisgCisrTk9URTogSW4gR2VudG9vLCB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgZm9yIEMsIEMrKywgT2JqQywgT2JqQysrLgorK1RvIGRpc2FibGUsIHVzZSBAb3B0aW9uey1XZm9ybWF0PTB9LgorKworIEBpdGVtIC1XZm9ybWF0LXkyaworIEBvcGluZGV4IFdmb3JtYXQteTJrCisgQG9waW5kZXggV25vLWZvcm1hdC15MmsKK0BAIC0yOTIwLDYgKzI5MjMsMTEgQEAKKyBpbiBmdXR1cmUgd2FybmluZ3MgbWF5IGJlIGFkZGVkIHRvIEBvcHRpb257LVdmb3JtYXQtc2VjdXJpdHl9IHRoYXQgYXJlIG5vdAorIGluY2x1ZGVkIGluIEBvcHRpb257LVdmb3JtYXQtbm9ubGl0ZXJhbH0uKQorIAorK05PVEU6IEluIEdlbnRvbywgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGZvciBDLCBDKyssIE9iakMsIE9iakMrKy4KKytUbyBkaXNhYmxlLCB1c2UgQG9wdGlvbnstV25vLWZvcm1hdC1zZWN1cml0eX0sIG9yIGRpc2FibGUgYWxsIGZvcm1hdCB3YXJuaW5ncworK3dpdGggQG9wdGlvbnstV2Zvcm1hdD0wfS4gIFRvIG1ha2UgZm9ybWF0IHNlY3VyaXR5IHdhcm5pbmdzIGZhdGFsLCBzcGVjaWZ5CisrQG9wdGlvbnstV2Vycm9yPWZvcm1hdC1zZWN1cml0eX0uCisrCisgQGl0ZW0gLVdmb3JtYXQ9MgorIEBvcGluZGV4IFdmb3JtYXQ9MgorIEBvcGluZGV4IFduby1mb3JtYXQ9MgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMy8xNTAtZGVmYXVsdC1mb3J0aWZ5LXNvdXJjZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMTUwLWRlZmF1bHQtZm9ydGlmeS1zb3VyY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY4MjI3ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMTUwLWRlZmF1bHQtZm9ydGlmeS1zb3VyY2UucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvZG9jL2ludm9rZS50ZXhpIGdjYy00LjQuMC9nY2MvZG9jL2ludm9rZS50ZXhpCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2RvYy9pbnZva2UudGV4aQkyMDA5LTA1LTI3IDIxOjM4OjExLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvZG9jL2ludm9rZS50ZXhpCTIwMDktMDUtMjcgMjE6Mzg6MTEuMDAwMDAwMDAwICswMjAwCitAQCAtNTQxMSw2ICs1NDExLDExIEBACisgUGxlYXNlIG5vdGUgdGhlIHdhcm5pbmcgdW5kZXIgQG9wdGlvbnstZmdjc2V9IGFib3V0CisgaW52b2tpbmcgQG9wdGlvbnstTzJ9IG9uIHByb2dyYW1zIHRoYXQgdXNlIGNvbXB1dGVkIGdvdG9zLgorIAorK05PVEU6IEluIEdlbnRvbywgQG9wdGlvbnstRF9GT1JUSUZZX1NPVVJDRT0yfSBpcyBzZXQgYnkgZGVmYXVsdCwgYW5kIGlzCisrYWN0aXZhdGVkIHdoZW4gQG9wdGlvbnstT30gaXMgc2V0IHRvIDIgb3IgaGlnaGVyLiAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwKKytjb21waWxlLXRpbWUgYW5kIHJ1bi10aW1lIGNoZWNrcyBmb3Igc2V2ZXJhbCBsaWJjIGZ1bmN0aW9ucy4gIFRvIGRpc2FibGUsCisrc3BlY2lmeSBlaXRoZXIgQG9wdGlvbnstVV9GT1JUSUZZX1NPVVJDRX0gb3IgQG9wdGlvbnstRF9GT1JUSUZZX1NPVVJDRT0wfS4KKysKKyBAaXRlbSAtTzMKKyBAb3BpbmRleCBPMworIE9wdGltaXplIHlldCBtb3JlLiAgQG9wdGlvbnstTzN9IHR1cm5zIG9uIGFsbCBvcHRpbWl6YXRpb25zIHNwZWNpZmllZAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvZ2NjLmMgZ2NjLTQuNC4wL2djYy9nY2MuYworLS0tIGdjYy00LjQuMC5vcmlnL2djYy9nY2MuYwkyMDA5LTAzLTE3IDIyOjI1OjU5LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuMC9nY2MvZ2NjLmMJMjAwOS0wNS0yNyAyMTozODoxMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC04MDcsNiArODA3LDcgQEAKKyAgJXtIfSAlQyAle0QqJlUqJkEqfSAle2kqfSAlWiAlaVwKKyAgJXtmbXVkZmxhcDotRF9NVURGTEFQIC1pbmNsdWRlIG1mLXJ1bnRpbWUuaH1cCisgICV7Zm11ZGZsYXB0aDotRF9NVURGTEFQIC1EX01VREZMQVBUSCAtaW5jbHVkZSBtZi1ydW50aW1lLmh9XAorKyAleyFEX0ZPUlRJRllfU09VUkNFOiV7IURfRk9SVElGWV9TT1VSQ0U9KjoleyFVX0ZPUlRJRllfU09VUkNFOi1EX0ZPUlRJRllfU09VUkNFPTJ9fX1cCisgICV7RXxNfE1NOiVXe28qfX0iOworIAorIC8qIFRoaXMgY29udGFpbnMgY3BwIG9wdGlvbnMgd2hpY2ggYXJlIGNvbW1vbiB3aXRoIGNjMV9vcHRpb25zIGFuZCBhcmUgcGFzc2VkCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzE2MC1uZXRic2Qtc3ltYm9saWMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzE2MC1uZXRic2Qtc3ltYm9saWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUxZjFjYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMTYwLW5ldGJzZC1zeW1ib2xpYy5wYXRjaApAQCAtMCwwICsxLDExIEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvbmV0YnNkLWVsZi5oIGdjYy00LjQuMC9nY2MvY29uZmlnL25ldGJzZC1lbGYuaAorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvbmV0YnNkLWVsZi5oCTIwMDctMDktMDMgMTg6MTQ6MDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvbmV0YnNkLWVsZi5oCTIwMDktMDUtMjcgMjE6Mzg6MTQuMDAwMDAwMDAwICswMjAwCitAQCAtODIsNiArODIsNyBAQAorICNkZWZpbmUgTkVUQlNEX0xJTktfU1BFQ19FTEYgXAorICAgIiV7YXNzZXJ0Kn0gJXtSKn0gJXtycGF0aCp9IFwKKyAgICAle3NoYXJlZDotc2hhcmVkfSBcCisrICAgJXtzeW1ib2xpYzotQnN5bWJvbGljfSBcCisgICAgJXshc2hhcmVkOiBcCisgICAgICAtZGMgLWRwIFwKKyAgICAgICV7IW5vc3RkbGliOiBcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzE3MC1zcGFyYzY0LWJzZC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMTcwLXNwYXJjNjQtYnNkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YTVlZWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzE3MC1zcGFyYzY0LWJzZC5wYXRjaApAQCAtMCwwICsxLDI5IEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oIGdjYy00LjQuMC9nY2MvY29uZmlnL3NwYXJjL2ZyZWVic2QuaAorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oCTIwMDctMDgtMDIgMTI6NDk6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oCTIwMDktMDUtMjcgMjE6Mzg6MTYuMDAwMDAwMDAwICswMjAwCitAQCAtMjUsOSArMjUsMjIgQEAKKyAvKiBGcmVlQlNEIG5lZWRzIHRoZSBwbGF0Zm9ybSBuYW1lIChzcGFyYzY0KSBkZWZpbmVkLgorICAgIEVtYWNzIG5lZWRzIHRvIGtub3cgaWYgdGhlIGFyY2ggaXMgNjQgb3IgMzItYml0cy4gICovCisgCistI3VuZGVmICBDUFBfQ1BVNjRfREVGQVVMVF9TUEVDCistI2RlZmluZSBDUFBfQ1BVNjRfREVGQVVMVF9TUEVDIFwKKy0gICItRF9fc3BhcmM2NF9fIC1EX19zcGFyY192OV9fIC1EX19zcGFyY3Y5IC1EX19hcmNoNjRfXyIKKysjdW5kZWYgIEZCU0RfVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMKKysjZGVmaW5lIEZCU0RfVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMoKSAgICAgICAgICAgICAgICAgIFwKKysgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBpZiAoVEFSR0VUX0FSQ0g2NCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjNjRfXyIpOyAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjX3Y5X18iKTsgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjdjkiKTsgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19zcGFyYyIpOyAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBidWlsdGluX2RlZmluZSAoIl9fc3BhcmNfXyIpOyAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHdoaWxlICgwKQorKworIAorICNkZWZpbmUgTElOS19TUEVDICIlKGxpbmtfYXJjaCkJCQkJCQlcCisgICAleyFtbm8tcmVsYXg6JXshcjotcmVsYXh9fQkJCQkJCVwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMTgwLWxpYmdvbXAtbm8td2Vycm9yLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMy8xODAtbGliZ29tcC1uby13ZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQyYWRmMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMTgwLWxpYmdvbXAtbm8td2Vycm9yLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvbGliZ29tcC9jb25maWd1cmUgZ2NjLTQuNC4wL2xpYmdvbXAvY29uZmlndXJlCistLS0gZ2NjLTQuNC4wLm9yaWcvbGliZ29tcC9jb25maWd1cmUJMjAwOS0wNC0yMSAxMTowODowOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvbGliZ29tcC9jb25maWd1cmUJMjAwOS0wNS0yNyAyMTozODoxOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMzM0LDcgKzMzMzQsNyBAQAorIAorICMgQWRkIC1XYWxsIC1XZXJyb3IgaWYgd2UgYXJlIHVzaW5nIEdDQy4KKyBpZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyI7IHRoZW4KKy0gIFhDRkxBR1M9IiRYQ0ZMQUdTIC1XYWxsIC1XZXJyb3IiCisrICBYQ0ZMQUdTPSIkWENGTEFHUyAtV2FsbCIKKyBmaQorIAorICMgRmluZCBvdGhlciBwcm9ncmFtcyB3ZSBuZWVkLgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMy8xOTAtZmxhdHRlbi1zd2l0Y2gtc3RtdC0wMC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMTkwLWZsYXR0ZW4tc3dpdGNoLXN0bXQtMDAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRiMWNjYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMTkwLWZsYXR0ZW4tc3dpdGNoLXN0bXQtMDAucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2Mvc3RtdC5jIGdjYy00LjQuMC9nY2Mvc3RtdC5jCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL3N0bXQuYwkyMDA5LTAyLTI3IDIwOjQ5OjQyLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuMC9nY2Mvc3RtdC5jCTIwMDktMDUtMjcgMjE6Mzg6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMjM3Niw3ICsyMzc2LDExIEBACisgCSAgdXNlX2Nvc3RfdGFibGUKKyAJICAgID0gKFRSRUVfQ09ERSAob3JpZ190eXBlKSAhPSBFTlVNRVJBTF9UWVBFCisgCSAgICAgICAmJiBlc3RpbWF0ZV9jYXNlX2Nvc3RzIChjYXNlX2xpc3QpKTsKKy0JICBiYWxhbmNlX2Nhc2Vfbm9kZXMgKCZjYXNlX2xpc3QsIE5VTEwpOworKwkgIC8qIFdoZW4gb3B0aW1pemluZyBmb3Igc2l6ZSwgd2Ugd2FudCBhIHN0cmFpZ2h0IGxpc3QgdG8gYXZvaWQKKysJICAgICBqdW1wcyBhcyBtdWNoIGFzIHBvc3NpYmxlLiBUaGlzIGJhc2ljYWxseSBjcmVhdGVzIGFuIGlmLWVsc2UKKysJICAgICBjaGFpbi4gICovCisrCSAgaWYgKCFvcHRpbWl6ZV9zaXplKQorKwkgICAgYmFsYW5jZV9jYXNlX25vZGVzICgmY2FzZV9saXN0LCBOVUxMKTsKKyAJICBlbWl0X2Nhc2Vfbm9kZXMgKGluZGV4LCBjYXNlX2xpc3QsIGRlZmF1bHRfbGFiZWwsIGluZGV4X3R5cGUpOworIAkgIGlmIChkZWZhdWx0X2xhYmVsKQorIAkgICAgZW1pdF9qdW1wIChkZWZhdWx0X2xhYmVsKTsKK0BAIC0yOTQyLDYgKzI5NDYsNyBAQAorIAkgICAgeworIAkgICAgICBpZiAoIW5vZGVfaGFzX2xvd19ib3VuZCAobm9kZSwgaW5kZXhfdHlwZSkpCisgCQl7CisrCQkgIGlmICghb3B0aW1pemVfc2l6ZSkgLyogZG9uJ3QgamwgdG8gdGhlIC5kZWZhdWx0X2xhYmVsLiAqLworIAkJICBlbWl0X2NtcF9hbmRfanVtcF9pbnNucyAoaW5kZXgsCisgCQkJCQkgICBjb252ZXJ0X21vZGVzCisgCQkJCQkgICAobW9kZSwgaW1vZGUsCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzIwMC1saWJpYmVydHkuaC1hc3ByaW50Zi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMjAwLWxpYmliZXJ0eS5oLWFzcHJpbnRmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNzg0YmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzIwMC1saWJpYmVydHkuaC1hc3ByaW50Zi5wYXRjaApAQCAtMCwwICsxLDE1IEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2luY2x1ZGUvbGliaWJlcnR5LmggZ2NjLTQuNC4wL2luY2x1ZGUvbGliaWJlcnR5LmgKKy0tLSBnY2MtNC40LjAub3JpZy9pbmNsdWRlL2xpYmliZXJ0eS5oCTIwMDgtMDYtMjQgMDM6NDI6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2luY2x1ZGUvbGliaWJlcnR5LmgJMjAwOS0wNS0yNyAyMTozODoyNC4wMDAwMDAwMDAgKzAyMDAKK0BAIC01OTUsOCArNTk1LDExIEBACisgLyogTGlrZSBzcHJpbnRmIGJ1dCBwcm92aWRlcyBhIHBvaW50ZXIgdG8gbWFsbG9jJ2Qgc3RvcmFnZSwgd2hpY2ggbXVzdAorICAgIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuICAqLworIAorKy8qIGFzcHJpbnRmIG1heSBiZSBkZWNsYXJlZCBhcyBhIG1hY3JvIGJ5IGdsaWJjIHdpdGggX19VU0VfRk9SVElGWV9MRVZFTC4gICovCisrI2lmbmRlZiBhc3ByaW50ZgorIGV4dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgLi4uKSBBVFRSSUJVVEVfUFJJTlRGXzI7CisgI2VuZGlmCisrI2VuZGlmCisgCisgI2lmICFIQVZFX0RFQ0xfVkFTUFJJTlRGCisgLyogTGlrZSB2c3ByaW50ZiBidXQgcHJvdmlkZXMgYSBwb2ludGVyIHRvIG1hbGxvYydkIHN0b3JhZ2UsIHdoaWNoCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzIxMC1hcm0tdW5icmVhay1hcm12NHQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzIxMC1hcm0tdW5icmVhay1hcm12NHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZlYWZjNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMjEwLWFybS11bmJyZWFrLWFybXY0dC5wYXRjaApAQCAtMCwwICsxLDEyIEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCBnY2MtNC40LjAvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCTIwMDctMTEtMDggMTQ6NDQ6MDkuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAkyMDA5LTA1LTI3IDIxOjM4OjI2LjAwMDAwMDAwMCArMDIwMAorQEAgLTQ0LDcgKzQ0LDcgQEAKKyAgICBUaGUgQVJNMTBURE1JIGNvcmUgaXMgdGhlIGRlZmF1bHQgZm9yIGFybXY1dCwgc28gc2V0CisgICAgU1VCVEFSR0VUX0NQVV9ERUZBVUxUIHRvIGFjaGlldmUgdGhpcy4gICovCisgI3VuZGVmICBTVUJUQVJHRVRfQ1BVX0RFRkFVTFQKKy0jZGVmaW5lIFNVQlRBUkdFVF9DUFVfREVGQVVMVCBUQVJHRVRfQ1BVX2FybTEwdGRtaQorKyNkZWZpbmUgU1VCVEFSR0VUX0NQVV9ERUZBVUxUIFRBUkdFVF9DUFVfYXJtOXRkbWkKKyAKKyAvKiBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUIGlzIHNldCBpbgorICAgIGNvbmZpZy5nY2MgZm9yIGJpZyBlbmRpYW4gY29uZmlndXJhdGlvbnMuICAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMy8yMjAtbGliaWJlcnR5LXBpYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMjIwLWxpYmliZXJ0eS1waWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYxM2E0ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMjIwLWxpYmliZXJ0eS1waWMucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9saWJpYmVydHkvTWFrZWZpbGUuaW4gZ2NjLTQuNC4wL2xpYmliZXJ0eS9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjQuMC5vcmlnL2xpYmliZXJ0eS9NYWtlZmlsZS5pbgkyMDA4LTEwLTIyIDE1OjMwOjE5LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9saWJpYmVydHkvTWFrZWZpbGUuaW4JMjAwOS0wNS0yNyAyMTozODoyOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMjcsNiArMjI3LDcgQEAKKyAJICAkKEFSKSAkKEFSX0ZMQUdTKSAkKFRBUkdFVExJQikgXAorIAkgICAgJChSRVFVSVJFRF9PRklMRVMpICQoRVhUUkFfT0ZJTEVTKSAkKExJQk9CSlMpOyBcCisgCSAgJChSQU5MSUIpICQoVEFSR0VUTElCKTsgXAorKwkgIGNwICQoVEFSR0VUTElCKSAuLi8gOyBcCisgCSAgY2QgLi47IFwKKyAJZWxzZSB0cnVlOyBmaQorIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMy8yMzAtc3VwZXJoLWRlZmF1bHQtbXVsdGlsaWIucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzIzMC1zdXBlcmgtZGVmYXVsdC1tdWx0aWxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzcxOWU4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMy8yMzAtc3VwZXJoLWRlZmF1bHQtbXVsdGlsaWIucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnLmdjYyBnY2MtNC40LjAvZ2NjL2NvbmZpZy5nY2MKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnLmdjYwkyMDA5LTA0LTE3IDEzOjU4OjQxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnLmdjYwkyMDA5LTA1LTI3IDIxOjM4OjMxLjAwMDAwMDAwMCArMDIwMAorQEAgLTIxMjEsNyArMjEyMSw3IEBACisgCWlmIHRlc3QgeCR7c2hfbXVsdGlsaWJzfSA9IHggOyB0aGVuCisgCQljYXNlICR7dGFyZ2V0fSBpbgorIAkJc2g2NC1zdXBlcmgtbGludXgqIHwgXAorLQkJc2hbMTIzNF0qKQlzaF9tdWx0aWxpYnM9JHtzaF9jcHVfdGFyZ2V0fSA7OworKwkJc2hbMTIzNF0qKQlzaF9tdWx0aWxpYnM9YGNkICR7c3JjZGlyfS9jb25maWcvc2ggOyBlY2hvIHQtbWxpYi1zaFsxLTRdKiB8IHNlZCAnczp0LW1saWItc2g6LG06ZztzOiA6OmcnYCA7OworIAkJc2g2NCogfCBzaDUqKQlzaF9tdWx0aWxpYnM9bTUtMzJtZWRpYSxtNS0zMm1lZGlhLW5vZnB1LG01LWNvbXBhY3QsbTUtY29tcGFjdC1ub2ZwdSxtNS02NG1lZGlhLG01LTY0bWVkaWEtbm9mcHUgOzsKKyAJCXNoLXN1cGVyaC0qKQlzaF9tdWx0aWxpYnM9bTQsbTQtc2luZ2xlLG00LXNpbmdsZS1vbmx5LG00LW5vZnB1IDs7CisgCQlzaCotKi1saW51eCopCXNoX211bHRpbGlicz1tMSxtM2UsbTQgOzsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMjQwLWxpYnN0ZGMrKy1waWMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzI0MC1saWJzdGRjKystcGljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NTFkZmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzI0MC1saWJzdGRjKystcGljLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbSBnY2MtNC40LjAvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQorLS0tIGdjYy00LjQuMC5vcmlnL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuYW0JMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQkyMDA5LTA1LTI3IDIxOjM4OjM0LjAwMDAwMDAwMCArMDIwMAorQEAgLTM1MSw2ICszNTEsMTMgQEAKKyAJICAkKE9QVF9MREZMQUdTKSAkKFNFQ1RJT05fTERGTEFHUykgJChBTV9DWFhGTEFHUykgJChMVExERkxBR1MpIC1vICRACisgCisgCisraW5zdGFsbC1leGVjLWxvY2FsOgorKwlwaWNfb2Jqcz1gc2VkIC1uICJzOic6Omc7czpecGljX29iamVjdD06OnAiICoubG8gfCBncmVwIC12ICdebm9uZSQkJ2A7IFwKKysJaWYgWyB4IiQkcGljX29ianMiICE9IHggXTsgdGhlbiBcCisrCQkkKEFSKSBjcnUgbGlic3RkYysrX3BpYy5hICQkcGljX29ianMgJCh0b3BfYnVpbGRkaXIpL2xpYnN1cGMrKy8qLm8gfHwgZXhpdCAxOyBcCisrCQkkKElOU1RBTExfREFUQSkgbGlic3RkYysrX3BpYy5hICQoREVTVERJUikkKHRvb2xleGVjbGliZGlyKSB8fCBleGl0IDE7IFwKKysJZmkKKysKKyAjIEFkZGVkIGJpdHMgdG8gYnVpbGQgZGVidWcgbGlicmFyeS4KKyBpZiBHTElCQ1hYX0JVSUxEX0RFQlVHCisgYWxsLWxvY2FsOiBidWlsZF9kZWJ1ZworZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluIGdjYy00LjQuMC9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCistLS0gZ2NjLTQuNC4wLm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgkyMDA5LTAxLTE3IDAzOjAzOjI1LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuMC9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCTIwMDktMDUtMjcgMjE6Mzg6MzQuMDAwMDAwMDAwICswMjAwCitAQCAtNzI2LDcgKzcyNiw3IEBACisgCisgaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWRhdGEtbG9jYWwKKyAKKy1pbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUworK2luc3RhbGwtZXhlYy1hbTogaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTIGluc3RhbGwtZXhlYy1sb2NhbAorIAorIGluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisgCitAQCAtNzY1LDcgKzc2NSw3IEBACisgCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKyAJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorIAl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWluZm8tYW0gXAorLQl1bmluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUworKwl1bmluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUyBpbnN0YWxsLWV4ZWMtbG9jYWwKKyAKKyAKKyAjIFN5bWJvbCB2ZXJzaW9uaW5nIGZvciBzaGFyZWQgbGlicmFyaWVzLgorQEAgLTk0Miw2ICs5NDIsMTQgQEAKKyBpbnN0YWxsX2RlYnVnOgorIAkoY2QgJHtkZWJ1Z2Rpcn0gJiYgJChNQUtFKSBcCisgCXRvb2xleGVjbGliZGlyPSQoZ2xpYmN4eF90b29sZXhlY2xpYmRpcikvZGVidWcgaW5zdGFsbCkKKysKKytpbnN0YWxsLWV4ZWMtbG9jYWw6CisrCXBpY19vYmpzPWBzZWQgLW4gInM6Jzo6ZztzOl5waWNfb2JqZWN0PTo6cCIgKi5sbyB8IGdyZXAgLXYgJ15ub25lJCQnYDsgXAorKwlpZiBbIHgiJCRwaWNfb2JqcyIgIT0geCBdOyB0aGVuIFwKKysJCSQoQVIpIGNydSBsaWJzdGRjKytfcGljLmEgJCRwaWNfb2JqcyAkKHRvcF9idWlsZGRpcikvbGlic3VwYysrLyoubyB8fCBleGl0IDE7IFwKKysJCSQoSU5TVEFMTF9EQVRBKSBsaWJzdGRjKytfcGljLmEgJChERVNURElSKSQodG9vbGV4ZWNsaWJkaXIpIHx8IGV4aXQgMTsgXAorKwlmaQorKworICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisgIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisgLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMy8yNTAtaWE2NC1ub3RlR05Vc3RhY2sucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzI1MC1pYTY0LW5vdGVHTlVzdGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjgwZTZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMy8yNTAtaWE2NC1ub3RlR05Vc3RhY2sucGF0Y2gKQEAgLTAsMCArMSw3OSBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtIGdjYy00LjQuMC9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGJlZ2luLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtCTIwMDktMDUtMjcgMjE6Mzg6MzcuMDAwMDAwMDAwICswMjAwCitAQCAtMjUyLDMgKzI1Miw3IEBACisgLndlYWsgX19jeGFfZmluYWxpemUKKyAjZW5kaWYKKyAud2VhayBfSnZfUmVnaXN0ZXJDbGFzc2VzCisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtIGdjYy00LjQuMC9nY2MvY29uZmlnL2lhNjQvY3J0ZW5kLmFzbQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtCTIwMDktMDUtMjcgMjE6Mzg6MzcuMDAwMDAwMDAwICswMjAwCitAQCAtMTE5LDMgKzExOSw3IEBACisgCisgCWJyLnJldC5zcHRrLm1hbnkgcnAKKyAJLmVuZHAgX19kb19nbG9iYWxfY3RvcnNfYXV4CisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRpLmFzbSBnY2MtNC40LjAvZ2NjL2NvbmZpZy9pYTY0L2NydGkuYXNtCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGkuYXNtCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvaWE2NC9jcnRpLmFzbQkyMDA5LTA1LTI3IDIxOjM4OjM3LjAwMDAwMDAwMCArMDIwMAorQEAgLTUxLDMgKzUxLDcgQEAKKyAJLmJvZHkKKyAKKyAjIGVuZCBvZiBjcnRpLmFzbQorKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0bi5hc20gZ2NjLTQuNC4wL2djYy9jb25maWcvaWE2NC9jcnRuLmFzbQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRuLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL2lhNjQvY3J0bi5hc20JMjAwOS0wNS0yNyAyMTozODozNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC00MSwzICs0MSw3IEBACisgCWJyLnJldC5zcHRrLm1hbnkgYjAKKyAKKyAjIGVuZCBvZiBjcnRuLmFzbQorKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbSBnY2MtNC40LjAvZ2NjL2NvbmZpZy9pYTY0L2xpYjFmdW5jcy5hc20KKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbQkyMDA5LTA1LTI3IDIxOjM4OjM3LjAwMDAwMDAwMCArMDIwMAorQEAgLTc5MywzICs3OTMsNyBAQAorIAkuZW5kcCBfX2Zsb2F0dGl0ZgorICNlbmRpZgorICNlbmRpZgorKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2lhNjQvbGludXguaCBnY2MtNC40LjAvZ2NjL2NvbmZpZy9pYTY0L2xpbnV4LmgKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2lhNjQvbGludXguaAkyMDA5LTAyLTEyIDE3OjMwOjUzLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL2lhNjQvbGludXguaAkyMDA5LTA1LTI3IDIxOjM4OjM3LjAwMDAwMDAwMCArMDIwMAorQEAgLTUsNiArNSw4IEBACisgCisgI2RlZmluZSBUQVJHRVRfVkVSU0lPTiBmcHJpbnRmIChzdGRlcnIsICIgKElBLTY0KSBMaW51eCIpOworIAorKyNkZWZpbmUgVEFSR0VUX0FTTV9GSUxFX0VORCBmaWxlX2VuZF9pbmRpY2F0ZV9leGVjX3N0YWNrCisrCisgLyogVGhpcyBpcyBmb3IgLXByb2ZpbGUgdG8gdXNlIC1sY19wIGluc3RlYWQgb2YgLWxjLiAgKi8KKyAjdW5kZWYgQ0MxX1NQRUMKKyAjZGVmaW5lIENDMV9TUEVDICIle3Byb2ZpbGU6LXB9ICV7Ryp9IgorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9wcGMtYXNtLmggZ2NjLTQuNC4wL2djYy9jb25maWcvcnM2MDAwL3BwYy1hc20uaAorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvcnM2MDAwL3BwYy1hc20uaAkyMDA4LTEwLTEzIDE3OjQ0OjI2LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL3JzNjAwMC9wcGMtYXNtLmgJMjAwOS0wNS0yNyAyMTozODozNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNzIsNyArMTcyLDcgQEAKKyAJLnNpemUgRlVOQ19OQU1FKG5hbWUpLEdMVUUoLkwsbmFtZSktRlVOQ19OQU1FKG5hbWUpCisgI2VuZGlmCisgCistI2lmIGRlZmluZWQgX19saW51eF9fICYmICFkZWZpbmVkIF9fcG93ZXJwYzY0X18KKysjaWYgZGVmaW5lZCBfX2xpbnV4X18KKyAJLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrCisgCS5wcmV2aW91cworICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMy8yNjAtc2gtbGliZ2NjLXN0YWNrcy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMjYwLXNoLWxpYmdjYy1zdGFja3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJhZjJjOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMjYwLXNoLWxpYmdjYy1zdGFja3MucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL3NoL2xpYjFmdW5jcy5hc20gZ2NjLTQuNC4wL2djYy9jb25maWcvc2gvbGliMWZ1bmNzLmFzbQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvc2gvbGliMWZ1bmNzLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL3NoL2xpYjFmdW5jcy5hc20JMjAwOS0wNS0yNyAyMTozODozOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMCw2ICszMCwxMSBAQAorICEhIHJlY29kZWQgaW4gYXNzZW1ibHkgYnkgVG9zaGl5YXN1IE1vcml0YQorICEhIHRtQG5ldGNvbS5jb20KKyAKKysjaWYgZGVmaW5lZChfX0VMRl9fKSAmJiBkZWZpbmVkKF9fbGludXhfXykKKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2ssIiIsJXByb2diaXRzCisrLnByZXZpb3VzCisrI2VuZGlmCisrCisgLyogU0gyIG9wdGltaXphdGlvbnMgZm9yIF9fX2FzaHJzaTMsIF9fX2FzaGxzaTMsIF9fX2xzaHJzaTMgYW5kCisgICAgRUxGIGxvY2FsIGxhYmVsIHByZWZpeGVzIGJ5IEoib3JuIFJlbm5lY2tlCisgICAgYW15bGFhckBjeWdudXMuY29tICAqLworZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL3NoL2xpbnV4LWF0b21pYy5hc20gZ2NjLTQuNC4wL2djYy9jb25maWcvc2gvbGludXgtYXRvbWljLmFzbQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvc2gvbGludXgtYXRvbWljLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL3NoL2xpbnV4LWF0b21pYy5hc20JMjAwOS0wNS0yNyAyMTozODozOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMzYsMyArMTM2LDYgQEAKKyBBVE9NSUNfRkVUQ0hfQU5EX0NPTUJPUChuYW5kLGFuZCxub3QsNCxsLG1vdikKKyAKKyAjZW5kaWYgLyogISBfX1NINV9fICovCisrCisrLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrLCIiLCVwcm9nYml0cworKy5wcmV2aW91cwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMy8yNzAtc2gtcHIyNDgzNi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMjcwLXNoLXByMjQ4MzYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M3NDVhYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMjcwLXNoLXByMjQ4MzYucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlndXJlIGdjYy00LjQuMC9nY2MvY29uZmlndXJlCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZ3VyZQkyMDA5LTA1LTI3IDIxOjM4OjA4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlndXJlCTIwMDktMDUtMjcgMjE6Mzg6NDIuMDAwMDAwMDAwICswMjAwCitAQCAtMjIyMDUsNyArMjIyMDUsNyBAQAorIAl0bHNfZmlyc3RfbWlub3I9MTQKKyAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCisgCTs7CistICBzaC0qLSogfCBzaFszNF0tKi0qKQorKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCisgICAgIGNvbmZ0ZXN0X3M9JworIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKKyBmb286CS5sb25nCTI1CitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWd1cmUuYWMgZ2NjLTQuNC4wL2djYy9jb25maWd1cmUuYWMKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlndXJlLmFjCTIwMDktMDUtMjcgMjE6Mzg6MDguMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWd1cmUuYWMJMjAwOS0wNS0yNyAyMTozODo0Mi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNjczLDcgKzI2NzMsNyBAQAorIAl0bHNfZmlyc3RfbWlub3I9MTQKKyAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCisgCTs7CistICBzaC0qLSogfCBzaFszNF0tKi0qKQorKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCisgICAgIGNvbmZ0ZXN0X3M9JworIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKKyBmb286CS5sb25nCTI1CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzI4MC1mcmVlYnNkLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMy8yODAtZnJlZWJzZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWQ5ZDBiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMy8yODAtZnJlZWJzZC5wYXRjaApAQCAtMCwwICsxLDk0IEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvZnJlZWJzZC1zcGVjLmggZ2NjLTQuNC4wL2djYy9jb25maWcvZnJlZWJzZC1zcGVjLmgKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2ZyZWVic2Qtc3BlYy5oCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvZnJlZWJzZC1zcGVjLmgJMjAwOS0wNS0yNyAyMTozODo0NS4wMDAwMDAwMDAgKzAyMDAKK0BAIC02MSw2ICs2MSw4IEBACisgCWJ1aWx0aW5fYXNzZXJ0ICgic3lzdGVtPXVuaXgiKTsJCQkJCVwKKyAJYnVpbHRpbl9hc3NlcnQgKCJzeXN0ZW09YnNkIik7CQkJCQlcCisgCWJ1aWx0aW5fYXNzZXJ0ICgic3lzdGVtPUZyZWVCU0QiKTsJCQkJXAorKwlpZighKGZsYWdfaXNvICYmIChjX2RpYWxlY3RfY3h4ICgpID8gY3h4X2RpYWxlY3QgPT0gY3h4OTggOiAhZmxhZ19pc29jOTkpKSkJXAorKwkJYnVpbHRpbl9kZWZpbmUoIl9MT05HTE9ORyIpOwkJCQlcCisgCUZCU0RfVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMoKTsJCQkJCVwKKyAgICAgfQkJCQkJCQkJCVwKKyAgIHdoaWxlICgwKQorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL3QtZnJlZWJzZC1laCBnY2MtNC40LjAvZ2NjL2NvbmZpZy90LWZyZWVic2QtZWgKKy0tLSBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL3QtZnJlZWJzZC1laAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL3QtZnJlZWJzZC1laAkyMDA5LTA1LTI3IDIxOjM4OjQ1LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw0IEBACisrIyBVc2UgdW53aW5kLWR3Mi1mZGUtZ2xpYmMKKytMSUIyQURERUggPSAkKHNyY2RpcikvdW53aW5kLWR3Mi5jICQoc3JjZGlyKS91bndpbmQtZHcyLWZkZS1nbGliYy5jIFwKKysgICQoc3JjZGlyKS91bndpbmQtc2psai5jICQoc3JjZGlyKS9ndGhyLWduYXQuYyAkKHNyY2RpcikvdW53aW5kLWMuYworK0xJQjJBRERFSERFUCA9IHVud2luZC5pbmMgdW53aW5kLWR3Mi1mZGUuaCB1bndpbmQtZHcyLWZkZS5jCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcuZ2NjIGdjYy00LjQuMC9nY2MvY29uZmlnLmdjYworLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcuZ2NjCTIwMDktMDUtMjcgMjE6Mzg6MzQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcuZ2NjCTIwMDktMDUtMjcgMjE6Mzg6NDUuMDAwMDAwMDAwICswMjAwCitAQCAtNDU2LDcgKzQ1Niw3IEBACisgICAjIHBsZWFzZXMgYXJvdW5kIHRoZSBwcm92aWRlZCBjb3JlIHNldHRpbmcuCisgICBnYXM9eWVzCisgICBnbnVfbGQ9eWVzCistICBleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBjcnRlbmQubyBjcnRiZWdpblMubyBjcnRlbmRTLm8iCisrICBleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBjcnRlbmQubyBjcnRiZWdpblMubyBjcnRlbmRTLm8gY3J0YmVnaW5ULm8iCisgICBmYnNkX21ham9yPWBlY2hvICR7dGFyZ2V0fSB8IHNlZCAtZSAncy8uKmZyZWVic2QvL2cnIHwgc2VkIC1lICdzL1wuLiovL2cnYAorICAgdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBGQlNEX01BSk9SPSR7ZmJzZF9tYWpvcn0iCisgICB0bWFrZV9maWxlPSJ0LXNsaWJnY2MtZWxmLXZlciB0LWZyZWVic2QiCitAQCAtMTA0Miw2ICsxMDQyLDEwIEBACisgCTs7CisgaVszNDU2N104Ni0qLWZyZWVic2QqKQorIAl0bV9maWxlPSIke3RtX2ZpbGV9IGkzODYvdW5peC5oIGkzODYvYXR0LmggZGJ4ZWxmLmggZWxmb3MuaCAke2Zic2RfdG1fZmlsZX0gaTM4Ni9mcmVlYnNkLmgiCisrCWZic2RfbWFqb3I9YGVjaG8gJHt0YXJnZXR9IHwgc2VkIC1lICdzLy4qZnJlZWJzZC8vZycgfCBzZWQgLWUgJ3MvXC4uKi8vZydgCisrCWlmIHRlc3QgJHtmYnNkX21ham9yfSAtZ2UgNzsgdGhlbgorKwkJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSB0LWZyZWVic2QtZWgiCisrCWZpCisgCTs7CisgeDg2XzY0LSotZnJlZWJzZCopCisgCXRtX2ZpbGU9IiR7dG1fZmlsZX0gaTM4Ni91bml4LmggaTM4Ni9hdHQuaCBkYnhlbGYuaCBlbGZvcy5oICR7ZmJzZF90bV9maWxlfSBpMzg2L3g4Ni02NC5oIGkzODYvZnJlZWJzZC5oIGkzODYvZnJlZWJzZDY0LmgiCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy9jcnRzdHVmZi5jIGdjYy00LjQuMC9nY2MvY3J0c3R1ZmYuYworLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jcnRzdHVmZi5jCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy9jcnRzdHVmZi5jCTIwMDktMDUtMjcgMjE6Mzg6NDUuMDAwMDAwMDAwICswMjAwCitAQCAtODUsMTMgKzg1LDE1IEBACisgICAgICYmICFkZWZpbmVkKE9CSkVDVF9GT1JNQVRfRkxBVCkgXAorICAgICAmJiBkZWZpbmVkKEhBVkVfTERfRUhfRlJBTUVfSERSKSBcCisgICAgICYmICFkZWZpbmVkKGluaGliaXRfbGliYykgJiYgIWRlZmluZWQoQ1JUU1RVRkZUX08pIFwKKy0gICAgJiYgZGVmaW5lZChfX0dMSUJDX18pICYmIF9fR0xJQkNfXyA+PSAyCisrICAgICYmICgoZGVmaW5lZChfX0dMSUJDX18pICYmIF9fR0xJQkNfXyA+PSAyKSBcCisrICAgIHx8IChkZWZpbmVkKF9fRnJlZUJTRF92ZXJzaW9uKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMjIpKQorICNpbmNsdWRlIDxsaW5rLmg+CisgLyogdUNsaWJjIHByZXRlbmRzIHRvIGJlIGdsaWJjIDIuMiBhbmQgRFRfQ09ORklHIGlzIGRlZmluZWQgaW4gaXRzIGxpbmsuaC4KKyAgICBCdXQgaXQgZG9lc24ndCB1c2UgUFRfR05VX0VIX0ZSQU1FIEVMRiBzZWdtZW50IGN1cnJlbnRseS4gICovCisgIyBpZiAhZGVmaW5lZChfX1VDTElCQ19fKSBcCistICAgICAmJiAoX19HTElCQ19fID4gMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID4gMikgXAorLSAgICAgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA9PSAyICYmIGRlZmluZWQoRFRfQ09ORklHKSkpCisrICAgICB8fCAoX19HTElCQ19fID4gMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID4gMikgXAorKyAgICAgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA9PSAyICYmIGRlZmluZWQoRFRfQ09ORklHKSkpIFwKKysgICAgIHx8IChfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMjIpCisgIyAgZGVmaW5lIFVTRV9QVF9HTlVfRUhfRlJBTUUKKyAjIGVuZGlmCisgI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2djYy91bndpbmQtZHcyLWZkZS1nbGliYy5jIGdjYy00LjQuMC9nY2MvdW53aW5kLWR3Mi1mZGUtZ2xpYmMuYworLS0tIGdjYy00LjQuMC5vcmlnL2djYy91bndpbmQtZHcyLWZkZS1nbGliYy5jCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2djYy91bndpbmQtZHcyLWZkZS1nbGliYy5jCTIwMDktMDUtMjcgMjE6Mzg6NDUuMDAwMDAwMDAwICswMjAwCitAQCAtNDYsOCArNDYsOSBAQAorICNpbmNsdWRlICJndGhyLmgiCisgCisgI2lmICFkZWZpbmVkKGluaGliaXRfbGliYykgJiYgZGVmaW5lZChIQVZFX0xEX0VIX0ZSQU1FX0hEUikgXAorLSAgICAmJiAoX19HTElCQ19fID4gMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID4gMikgXAorLQl8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID09IDIgJiYgZGVmaW5lZChEVF9DT05GSUcpKSkKKysgICAgJiYgKChfX0dMSUJDX18gPiAyIHx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPiAyKSBcCisrCXx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPT0gMiAmJiBkZWZpbmVkKERUX0NPTkZJRykpKSBcCisrICAgIHx8IChfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMjIgKSkKKyAKKyAjaWZuZGVmIF9fUkVMT0NfUE9JTlRFUgorICMgZGVmaW5lIF9fUkVMT0NfUE9JTlRFUihwdHIsIGJhc2UpICgocHRyKSArIChiYXNlKSkKK0BAIC02Myw2ICs2NCwxMyBAQAorICNkZWZpbmUgUFRfR05VX0VIX0ZSQU1FIChQVF9MT09TICsgMHg0NzRlNTUwKQorICNlbmRpZgorIAorKy8qIFN1cHBvcnQgRnJlZUJTRCAqLworKyNpZm5kZWYgRWxmVworKyMgaWZkZWYgX19FbGZOCisrIyAgZGVmaW5lIEVsZlcgX19FbGZOCisrIyBlbmRpZgorKyNlbmRpZgorKworIHN0cnVjdCB1bndfZWhfY2FsbGJhY2tfZGF0YQorIHsKKyAgIF9VbndpbmRfUHRyIHBjOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMy8yOTAtZnJlZWJzZC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMjkwLWZyZWVic2QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQxNTY0YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMjkwLWZyZWVic2QucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9nY2MvY29uZmlnL2ZyZWVic2Qtc3BlYy5oIGdjYy00LjQuMC9nY2MvY29uZmlnL2ZyZWVic2Qtc3BlYy5oCistLS0gZ2NjLTQuNC4wLm9yaWcvZ2NjL2NvbmZpZy9mcmVlYnNkLXNwZWMuaAkyMDA5LTA1LTI3IDIxOjM4OjQ3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9nY2MvY29uZmlnL2ZyZWVic2Qtc3BlYy5oCTIwMDktMDUtMjcgMjE6Mzg6NDcuMDAwMDAwMDAwICswMjAwCitAQCAtODYsOSArODYsMTAgQEAKKyAjZGVmaW5lIEZCU0RfU1RBUlRGSUxFX1NQRUMgXAorICAgIiV7IXNoYXJlZDogXAorICAgICAgJXtwZzpnY3J0MS5vJXN9ICV7IXBnOiV7cDpnY3J0MS5vJXN9IFwKKy0JCSAgICAgICAleyFwOiV7cHJvZmlsZTpnY3J0MS5vJXN9IFwKKy0JCQkgJXshcHJvZmlsZTpjcnQxLm8lc319fX0gXAorLSAgIGNydGkubyVzICV7IXNoYXJlZDpjcnRiZWdpbi5vJXN9ICV7c2hhcmVkOmNydGJlZ2luUy5vJXN9IgorKwkleyFwOiV7cHJvZmlsZTpnY3J0MS5vJXN9IFwKKysJICV7IXByb2ZpbGU6Y3J0MS5vJXN9fX19IFwKKysgICBjcnRpLm8lcyBcCisrICAgJXtzdGF0aWM6Y3J0YmVnaW5ULm8lcztzaGFyZWQ6Y3J0YmVnaW5TLm8lczs6Y3J0YmVnaW4ubyVzfSIKKyAKKyAvKiBQcm92aWRlIGEgRU5ERklMRV9TUEVDIGFwcHJvcHJpYXRlIGZvciBGcmVlQlNELiAgSGVyZSB3ZSB0YWNrIG9uCisgICAgdGhlIG1hZ2ljYWwgY3J0ZW5kLm8gZmlsZSAoc2VlIGNydHN0dWZmLmMpIHdoaWNoIHByb3ZpZGVzIHBhcnQgb2YgCitAQCAtMTI2LDcgKzEyNyw4IEBACisgICAgICV7cGc6ICAtbGNfcH0JCQkJCQkJXAorICAgfSIKKyAjZWxzZQorLSNpZiBGQlNEX01BSk9SIDwgNQorKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKysjaWYgX19GcmVlQlNEX3ZlcnNpb24gPCA1MDAwMTYKKyAjZGVmaW5lIEZCU0RfTElCX1NQRUMgIgkJCQkJCQlcCisgICAleyFzaGFyZWQ6CQkJCQkJCQlcCisgICAgICV7IXBnOgkJCQkJCQkJXAorQEAgLTEzNiwxNyArMTM4LDM0IEBACisgICAgICAgJXshcHRocmVhZDotbGNfcH0JCQkJCQkJXAorICAgICAgICV7cHRocmVhZDotbGNfcl9wfX0JCQkJCQlcCisgICB9IgorLSNlbHNlCisrI2VsaWYgX19GcmVlQlNEX3ZlcnNpb24gPCA3MDAwMjIKKyAjZGVmaW5lIEZCU0RfTElCX1NQRUMgIgkJCQkJCQlcCisgICAleyFzaGFyZWQ6CQkJCQkJCQlcCisgICAgICV7IXBnOiAle3B0aHJlYWQ6LWxwdGhyZWFkfSAtbGN9CQkJCQlcCisgICAgICV7cGc6ICAle3B0aHJlYWQ6LWxwdGhyZWFkX3B9IC1sY19wfQkJCQlcCisgICB9IgorKyNlbHNlCisrI2RlZmluZSBGQlNEX0xJQl9TUEVDICIJCQkJCQkJXAorKyAgJXshc2hhcmVkOgkJCQkJCQkJXAorKyAgICAleyFwZzogJXtwdGhyZWFkOi1scHRocmVhZH0gLWxjfQkJCQkJXAorKyAgICAle3BnOiAgJXtwdGhyZWFkOi1scHRocmVhZF9wfSAtbGNfcH19CQkJCVwKKysgICV7c2hhcmVkOgkJCQkJCQkJXAorKyAgICAle3B0aHJlYWQ6LWxwdGhyZWFkfSAtbGN9CQkJCQkJXAorKyAgIgorICNlbmRpZgorICNlbmRpZgorIAorLSNpZiBGQlNEX01BSk9SIDwgNgorKyNpZiBGQlNEX01BSk9SIDwgNQorICNkZWZpbmUgRkJTRF9EWU5BTUlDX0xJTktFUiAiL3Vzci9saWJleGVjL2xkLWVsZi5zby4xIgorICNlbHNlCisgI2RlZmluZSBGQlNEX0RZTkFNSUNfTElOS0VSICIvbGliZXhlYy9sZC1lbGYuc28uMSIKKyAjZW5kaWYKKysKKysjaWYgZGVmaW5lZChIQVZFX0xEX0VIX0ZSQU1FX0hEUikKKysjZGVmaW5lIExJTktfRUhfU1BFQyAiJXshc3RhdGljOi0tZWgtZnJhbWUtaGRyfSAiCisrI2VuZGlmCisrCisrLyogVXNlIC0tYXMtbmVlZGVkIC1sZ2NjX3MgZm9yIGVoIHN1cHBvcnQuICAqLworKyNpZmRlZiBIQVZFX0xEX0FTX05FRURFRAorKyNkZWZpbmUgVVNFX0xEX0FTX05FRURFRCAxCisrI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzMwMC11Y2xpYmMtY29uZi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMzAwLXVjbGliYy1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZjNiOTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzMwMC11Y2xpYmMtY29uZi5wYXRjaApAQCAtMCwwICsxLDM1IEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaCBnY2MtNC40LjAvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCistLS0gZ2NjLTQuNC4wLm9yaWcvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAkyMDA5LTA1LTI3IDIxOjM4OjUzLjAwMDAwMDAwMCArMDIwMAorQEAgLTEwNiw2ICsxMDYsMTAgQEAKKyAgdGhlbgorICAgbWFrZSBhbGwtZ2RiIGFsbC1kZWphZ251IGFsbC1sZCB8fCBleGl0IDEKKyAgIG1ha2UgaW5zdGFsbC1nZGIgaW5zdGFsbC1kZWphZ251IGluc3RhbGwtbGQgfHwgZXhpdCAxCisrZWxpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIC1hICRIX1JFQUxfVEFSR0VUID0gaTY4Ni1wYy1saW51eC11Y2xpYmMgXQorKyB0aGVuCisrICBtYWtlIGFsbC1nZGIgYWxsLWRlamFnbnUgYWxsLWxkIHx8IGV4aXQgMQorKyAgbWFrZSBpbnN0YWxsLWdkYiBpbnN0YWxsLWRlamFnbnUgaW5zdGFsbC1sZCB8fCBleGl0IDEKKyBlbGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgXSA7IHRoZW4KKyAgIG1ha2UgYm9vdHN0cmFwIHx8IGV4aXQgMQorICAgbWFrZSBpbnN0YWxsIHx8IGV4aXQgMQorZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZyBnY2MtNC40LjAvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKKy0tLSBnY2MtNC40LjAub3JpZy9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZwkyMDA3LTA2LTA0IDAxOjE4OjQzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZwkyMDA5LTA1LTI3IDIxOjM4OjUzLjAwMDAwMDAwMCArMDIwMAorQEAgLTYwMyw3ICs2MDMsNyBAQAorIAorICMgVHJhbnNmb3JtIGxpbnV4KiB0byAqLSotbGludXgtZ251KiwgdG8gc3VwcG9ydCBvbGQgY29uZmlndXJlIHNjcmlwdHMuCisgY2FzZSAkaG9zdF9vcyBpbgorLWxpbnV4LWdudSopIDs7CisrbGludXgtZ251KnxsaW51eC11Y2xpYmMqKSA7OworIGxpbnV4KikgaG9zdD1gZWNobyAkaG9zdCB8IHNlZCAncy9eXCguKi0uKi1saW51eFwpXCguKlwpJC9cMS1nbnVcMi8nYAorIGVzYWMKKyAKK0BAIC0xMjUxLDcgKzEyNTEsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgbmVlZF92ZXJzaW9uPW5vCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzMxMC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzMxMC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA5MzM1ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMzEwLW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApAQCAtMCwwICsxLDEyIEBACitkaWZmIC1kdXJOIGdjYy00LjQuMC5vcmlnL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCBnY2MtNC40LjAvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCistLS0gZ2NjLTQuNC4wLm9yaWcvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCTIwMDctMDQtMjMgMjM6MTA6MDkuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAkyMDA5LTA1LTI3IDIxOjM4OjU1LjAwMDAwMDAwMCArMDIwMAorQEAgLTUwMyw3ICs1MDMsNyBAQAorICNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX0dMSUJDX18pCisgIyBpbmNsdWRlIDxmZWF0dXJlcy5oPgorICMgaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxIHx8IF9fR0xJQkNfXyA+IDIpIFwKKy0gICAgICYmICFkZWZpbmVkKF9faWE2NF9fKQorKyAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pICYmICFkZWZpbmVkKF9fVUNMSUJDX18pCisgIyAgIGlmbmRlZiBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgICAgZGVmaW5lIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMzIwLWM5OS1zbnByaW50Zi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMzIwLWM5OS1zbnByaW50Zi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTI4ZjRiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMy8zMjAtYzk5LXNucHJpbnRmLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvY19nbG9iYWwvY3N0ZGlvIGdjYy00LjQuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jX2dsb2JhbC9jc3RkaW8KKy0tLSBnY2MtNC40LjAub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9jX2dsb2JhbC9jc3RkaW8JMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY19nbG9iYWwvY3N0ZGlvCTIwMDktMDUtMjcgMjE6Mzg6NTguMDAwMDAwMDAwICswMjAwCitAQCAtMTM5LDcgKzEzOSw3IEBACisgCisgX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorIAorLSNpZiBfR0xJQkNYWF9VU0VfQzk5CisrI2lmIF9HTElCQ1hYX1VTRV9DOTkgfHwgZGVmaW5lZCBfX1VDTElCQ19fCisgCisgI3VuZGVmIHNucHJpbnRmCisgI3VuZGVmIHZmc2NhbmYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMzMwLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMy8zMzAtbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNhNGUzMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMzMwLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC4wLm9yaWcvbGlibXVkZmxhcC9tZi1ob29rczIuYyBnY2MtNC40LjAvbGlibXVkZmxhcC9tZi1ob29rczIuYworLS0tIGdjYy00LjQuMC5vcmlnL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMJMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvbGlibXVkZmxhcC9tZi1ob29rczIuYwkyMDA5LTA1LTI3IDIxOjM5OjAwLjAwMDAwMDAwMCArMDIwMAorQEAgLTQyMSw3ICs0MjEsNyBAQAorIHsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIG4sIF9fTUZfQ0hFQ0tfV1JJVEUsICJiemVybyByZWdpb24iKTsKKy0gIGJ6ZXJvIChzLCBuKTsKKysgIG1lbXNldCAocywgMCwgbik7CisgfQorIAorIAorQEAgLTQzMSw3ICs0MzEsNyBAQAorICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQoc3JjLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY29weSBzcmMiKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChkZXN0LCBuLCBfX01GX0NIRUNLX1dSSVRFLCAiYmNvcHkgZGVzdCIpOworLSAgYmNvcHkgKHNyYywgZGVzdCwgbik7CisrICBtZW1tb3ZlIChkZXN0LCBzcmMsIG4pOworIH0KKyAKKyAKK0BAIC00NDEsNyArNDQxLDcgQEAKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMxLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY21wIDFzdCBhcmciKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzMiwgbiwgX19NRl9DSEVDS19SRUFELCAiYmNtcCAybmQgYXJnIik7CistICByZXR1cm4gYmNtcCAoczEsIHMyLCBuKTsKKysgIHJldHVybiBuID09IDAgPyAwIDogbWVtY21wIChzMSwgczIsIG4pOworIH0KKyAKKyAKK0BAIC00NTAsNyArNDUwLDcgQEAKKyAgIHNpemVfdCBuID0gc3RybGVuIChzKTsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIENMQU1QQUREKG4sIDEpLCBfX01GX0NIRUNLX1JFQUQsICJpbmRleCByZWdpb24iKTsKKy0gIHJldHVybiBpbmRleCAocywgYyk7CisrICByZXR1cm4gc3RyY2hyIChzLCBjKTsKKyB9CisgCisgCitAQCAtNDU5LDcgKzQ1OSw3IEBACisgICBzaXplX3QgbiA9IHN0cmxlbiAocyk7CisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzLCBDTEFNUEFERChuLCAxKSwgX19NRl9DSEVDS19SRUFELCAicmluZGV4IHJlZ2lvbiIpOworLSAgcmV0dXJuIHJpbmRleCAocywgYyk7CisrICByZXR1cm4gc3RycmNociAocywgYyk7CisgfQorIAorIC8qIFhYWDogIHN0cGNweSwgbWVtY2NweSAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMy8zNDAtZWNqeC1ob3N0LWNjLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMy8zNDAtZWNqeC1ob3N0LWNjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZjhlZDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzM0MC1lY2p4LWhvc3QtY2MucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorZGlmZiAtdXIgZ2NjLTQuNC4xLW9yaWcvbGliamF2YS9NYWtlZmlsZS5pbiBnY2MtNC40LjEvbGliamF2YS9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjQuMS1vcmlnL2xpYmphdmEvTWFrZWZpbGUuaW4JMjAwOS0wOC0wNCAwNDoxMjoyNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBnY2MtNC40LjEvbGliamF2YS9NYWtlZmlsZS5pbgkyMDA5LTA5LTIzIDIyOjAzOjE1Ljc1MDk1MTQ4MyAtMDcwMAorQEAgLTg4NzQsNiArODg3NCw5IEBACisgZWNqeCQoRVhFRVhUKTogJChlY2p4X09CSkVDVFMpICQoZWNqeF9ERVBFTkRFTkNJRVMpIAorIAlAcm0gLWYgZWNqeCQoRVhFRVhUKQorIAkkKGVjanhfTElOSykgJChlY2p4X0xERkxBR1MpICQoZWNqeF9PQkpFQ1RTKSAkKGVjanhfTERBREQpICQoTElCUykKKytlY2p4LiQoT0JKRVhUKTogJChlY2p4X1NPVVJDRVMpCisrCUBybSAtZiBlY2p4LiQoT0JKRVhUKQorKwkkKENDX0ZPUl9CVUlMRCkgJChCVUlMRF9DRkxBR1MpIC1jIC1vICRAICQ8CisgZ2FwcGxldHZpZXdlciQoRVhFRVhUKTogJChnYXBwbGV0dmlld2VyX09CSkVDVFMpICQoZ2FwcGxldHZpZXdlcl9ERVBFTkRFTkNJRVMpIAorIAlAcm0gLWYgZ2FwcGxldHZpZXdlciQoRVhFRVhUKQorIAkkKGdhcHBsZXR2aWV3ZXJfTElOSykgJChnYXBwbGV0dmlld2VyX0xERkxBR1MpICQoZ2FwcGxldHZpZXdlcl9PQkpFQ1RTKSAkKGdhcHBsZXR2aWV3ZXJfTERBREQpICQoTElCUykKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMzUwLWluZGV4X21hY3JvLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMy8zNTAtaW5kZXhfbWFjcm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JiODk5YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMzUwLWluZGV4X21hY3JvLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IC4uLzQuMy4yLzI5MC1pbmRleF9tYWNyby5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNC4zLjEvdWNsaWJjLzkwX2FsbF8zMDQtaW5kZXhfbWFjcm8ucGF0Y2gKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnY2MtNC4zLjMub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZSBnY2MtNC4zLjMvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUKKy0tLSBnY2MtNC4zLjMub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQkyMDA4LTA3LTE1IDEyOjE0OjUxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjMuMy9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQkyMDA5LTAxLTI3IDIyOjI1OjQxLjAwMDAwMDAwMCArMDEwMAorQEAgLTU5LDYgKzU5LDkgQEAKKyAjaW5jbHVkZSA8Yml0cy9ndGhyLmg+CisgI2luY2x1ZGUgPHRyMS9mdW5jdGlvbmFsPgorIAorKy8qIGNvcGUgdy8gaW5kZXggZGVmaW5lZCBhcyBtYWNybywgU3VTdjMgcHJvcG9zYWwgKi8KKysjdW5kZWYgaW5kZXgKKysKKyAjIGlmZGVmIF9fR0MKKyAjICAgZGVmaW5lIF9fR0NfQ09OU1QgY29uc3QKKyAjIGVsc2UKK2RpZmYgLWR1ck4gZ2NjLTQuMy4zLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmggZ2NjLTQuMy4zL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCistLS0gZ2NjLTQuMy4zLm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgJMjAwNy0wNS0wNCAxNzowNjo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC4zLjMvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgJMjAwOS0wMS0yNyAyMjoyNTo0MS4wMDAwMDAwMDAgKzAxMDAKK0BAIC01NCw2ICs1NCw5IEBACisgI2luY2x1ZGUgPGV4dC9tZW1vcnk+IC8vIEZvciB1bmluaXRpYWxpemVkX2NvcHlfbgorICNpbmNsdWRlIDxleHQvbnVtZXJpYz4gLy8gRm9yIHBvd2VyCisgCisrLyogY29wZSB3LyBpbmRleCBkZWZpbmVkIGFzIG1hY3JvLCBTdVN2MyBwcm9wb3NhbCAqLworKyN1bmRlZiBpbmRleAorKworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisgCisgICB1c2luZyBzdGQ6OnNpemVfdDsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMzYwLWFybS1iaWdlbmRpYW4ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzM2MC1hcm0tYmlnZW5kaWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZjEwYWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzM2MC1hcm0tYmlnZW5kaWFuLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0J5IExlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQHdhbnRzdG9mbHkub3JnPgorQWRkcyBzdXBwb3J0IGZvciBhcm0qYi1saW51eCogYmlnLWVuZGlhbiBBUk0gdGFyZ2V0cworCitTZWUgaHR0cDovL2djYy5nbnUub3JnL1BSMTYzNTAKKworLS0tIGdjYy00LjQuMi5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMDktMDItMjAgMTY6MjA6MzguMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC4yL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMDktMTItMzEgMTQ6MTk6MjAuMDAwMDAwMDAwICswMTAwCitAQCAtNTEsNyArNTEsNyBAQAorIAorICN1bmRlZiAgTVVMVElMSUJfREVGQVVMVFMKKyAjZGVmaW5lIE1VTFRJTElCX0RFRkFVTFRTIFwKKy0JeyAibWFybSIsICJtbGl0dGxlLWVuZGlhbiIsICJtaGFyZC1mbG9hdCIsICJtbm8tdGh1bWItaW50ZXJ3b3JrIiB9CisrCXsgIm1hcm0iLCBUQVJHRVRfRU5ESUFOX09QVElPTiwgIm1oYXJkLWZsb2F0IiwgIm1uby10aHVtYi1pbnRlcndvcmsiIH0KKyAKKyAvKiBOb3cgd2UgZGVmaW5lIHRoZSBzdHJpbmdzIHVzZWQgdG8gYnVpbGQgdGhlIHNwZWMgZmlsZS4gICovCisgI3VuZGVmICBMSUJfU1BFQworZGlmZiAtcnUgZ2NjLTQuNC4yLm9yaWcvZ2NjL2NvbmZpZy5nY2MgZ2NjLTQuNC4yL2djYy9jb25maWcuZ2NjCistLS0gZ2NjLTQuNC4yLm9yaWcvZ2NjL2NvbmZpZy5nY2MJMjAwOS0xMi0zMSAxNDo0MzoxNy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC40LjIvZ2NjL2NvbmZpZy5nY2MJMjAxMC0wMS0wNSAwOToyNzo0Mi4wMDAwMDAwMDAgKzAxMDAKK0BAIC03MzMsNiArNzMzLDExIEBACisgCXRtX2ZpbGU9ImRieGVsZi5oIGVsZm9zLmggYXJtL3Vua25vd24tZWxmLmggYXJtL2VsZi5oIGFybS9saW51eC1nYXMuaCBhcm0vdWNsaW51eC1lbGYuaCIKKyAJdG1ha2VfZmlsZT0iYXJtL3QtYXJtIGFybS90LWFybS1lbGYiCisgCWNhc2UgJHt0YXJnZXR9IGluCisrCWFybSpiLSopCisrCQl0bV9kZWZpbmVzPSIke3RtX2RlZmluZXN9IFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQ9MSIKKysJCTs7CisrCWVzYWMKKysJY2FzZSAke3RhcmdldH0gaW4KKyAJYXJtKi0qLXVjbGludXgqZWFiaSkKKyAJICAgIHRtX2ZpbGU9IiR0bV9maWxlIGFybS9icGFiaS5oIGFybS91Y2xpbnV4LWVhYmkuaCIKKyAJICAgIHRtYWtlX2ZpbGU9IiR0bWFrZV9maWxlIGFybS90LWJwYWJpIgorCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzM3MC1ib290c3RyYXAtdGFyZ2V0X2xpYl9wYXRoLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMy8zNzAtYm9vdHN0cmFwLXRhcmdldF9saWJfcGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTcxZDJkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMy8zNzAtYm9vdHN0cmFwLXRhcmdldF9saWJfcGF0aC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitDaGFuZ2VMb2c6CisyMDEwLTAxLTA2ICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorCisJUFIgYm9vdHN0cmFwLzQxODE4CisJKiBNYWtlZmlsZS50cGwgKEJBU0VfVEFSR0VUX0VYUE9SVFMpOiBPbmx5IGFkZCBUQVJHRVRfTElCX1BBVEgKKwl0byAkKFJQQVRIX0VOVlZBUikgaWYgYm9vdHN0cmFwcGluZy4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggZTVmYTFkMy4uZGJmYzFmMCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTI4MSw3ICsyODEsMTAgQEAgQkFTRV9UQVJHRVRfRVhQT1JUUyA9IFwKKyAJU1RSSVA9IiQoU1RSSVBfRk9SX1RBUkdFVCkiOyBleHBvcnQgU1RSSVA7IFwKKyAJV0lORFJFUz0iJChXSU5EUkVTX0ZPUl9UQVJHRVQpIjsgZXhwb3J0IFdJTkRSRVM7IFwKKyAJV0lORE1DPSIkKFdJTkRNQ19GT1JfVEFSR0VUKSI7IGV4cG9ydCBXSU5ETUM7IFwKKy0JJChSUEFUSF9FTlZWQVIpPWBlY2hvICIkKEhPU1RfTElCX1BBVEgpJChUQVJHRVRfTElCX1BBVEgpJCQkKFJQQVRIX0VOVlZBUikiIHwgc2VkICdzLDo6Kiw6LGc7cyxeOiosLDtzLDoqJCQsLCdgOyBleHBvcnQgJChSUEFUSF9FTlZWQVIpOworK0BpZiBnY2MtYm9vdHN0cmFwCisrCSQoUlBBVEhfRU5WVkFSKT1gZWNobyAiJChUQVJHRVRfTElCX1BBVEgpJCQkKFJQQVRIX0VOVlZBUikiIHwgc2VkICdzLDo6Kiw6LGc7cyxeOiosLDtzLDoqJCQsLCdgOyBleHBvcnQgJChSUEFUSF9FTlZWQVIpOyBcCisrQGVuZGlmIGdjYy1ib290c3RyYXAKKysJJChSUEFUSF9FTlZWQVIpPWBlY2hvICIkKEhPU1RfTElCX1BBVEgpJCQkKFJQQVRIX0VOVlZBUikiIHwgc2VkICdzLDo6Kiw6LGc7cyxeOiosLDtzLDoqJCQsLCdgOyBleHBvcnQgJChSUEFUSF9FTlZWQVIpOworIAorIFJBV19DWFhfVEFSR0VUX0VYUE9SVFMgPSBcCisgCSQoQkFTRV9UQVJHRVRfRVhQT1JUUykgXAorZGlmZiAtLWdpdCBhL01ha2VmaWxlLnRwbCBiL01ha2VmaWxlLnRwbAoraW5kZXggMTUxMDJlNS4uNDUyZDQ3YyAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLnRwbAorKysrIGIvTWFrZWZpbGUudHBsCitAQCAtMjg0LDcgKzI4NCwxMCBAQCBCQVNFX1RBUkdFVF9FWFBPUlRTID0gXAorIAlTVFJJUD0iJChTVFJJUF9GT1JfVEFSR0VUKSI7IGV4cG9ydCBTVFJJUDsgXAorIAlXSU5EUkVTPSIkKFdJTkRSRVNfRk9SX1RBUkdFVCkiOyBleHBvcnQgV0lORFJFUzsgXAorIAlXSU5ETUM9IiQoV0lORE1DX0ZPUl9UQVJHRVQpIjsgZXhwb3J0IFdJTkRNQzsgXAorLQkkKFJQQVRIX0VOVlZBUik9YGVjaG8gIiQoSE9TVF9MSUJfUEFUSCkkKFRBUkdFVF9MSUJfUEFUSCkkJCQoUlBBVEhfRU5WVkFSKSIgfCBzZWQgJ3MsOjoqLDosZztzLF46KiwsO3MsOiokJCwsJ2A7IGV4cG9ydCAkKFJQQVRIX0VOVlZBUik7CisrQGlmIGdjYy1ib290c3RyYXAKKysJJChSUEFUSF9FTlZWQVIpPWBlY2hvICIkKFRBUkdFVF9MSUJfUEFUSCkkJCQoUlBBVEhfRU5WVkFSKSIgfCBzZWQgJ3MsOjoqLDosZztzLF46KiwsO3MsOiokJCwsJ2A7IGV4cG9ydCAkKFJQQVRIX0VOVlZBUik7IFwKKytAZW5kaWYgZ2NjLWJvb3RzdHJhcAorKwkkKFJQQVRIX0VOVlZBUik9YGVjaG8gIiQoSE9TVF9MSUJfUEFUSCkkJCQoUlBBVEhfRU5WVkFSKSIgfCBzZWQgJ3MsOjoqLDosZztzLF46KiwsO3MsOiokJCwsJ2A7IGV4cG9ydCAkKFJQQVRIX0VOVlZBUik7CisgCisgUkFXX0NYWF9UQVJHRVRfRVhQT1JUUyA9IFwKKyAJJChCQVNFX1RBUkdFVF9FWFBPUlRTKSBcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzM4MC1wb3dlcnBjLWxpYmdjY19zLWxpbmstbGlibS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvMzgwLXBvd2VycGMtbGliZ2NjX3MtbGluay1saWJtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMmY5NjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzM4MC1wb3dlcnBjLWxpYmdjY19zLWxpbmstbGlibS5wYXRjaApAQCAtMCwwICsxLDEzNSBAQAoraHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMDgtMTAvbXNnMDAyNjkuaHRtbAorCitPbiBnbGliYyB0aGUgbGliYy5zbyBjYXJyaWVzIGEgY29weSBvZiB0aGUgbWF0aCBmdW5jdGlvbiBjb3B5c2lnbmwoKSBidXQKK29uIHVDbGliYyBtYXRoIGZ1bmN0aW9ucyBsaWtlIGNvcHlzaWdubCgpIGxpdmUgaW4gbGlibS4gU2luY2UgbGliZ2NjX3MKK2NvbnRhaW5zIHVucmVzb2x2ZWQgc3ltYm9scywgYW55IGF0dGVtcHQgdG8gbGluayBhZ2FpbnN0IGxpYmdjY19zCit3aXRob3V0IGV4cGxpY2l0ZWx5IHNwZWNpZnlpbmcgLWxtIGZhaWxzLCByZXN1bHRpbmcgaW4gYSBicm9rZW4KK2Jvb3RzdHJhcCBvZiB0aGUgY29tcGlsZXIuCisKKworZGlmZiAtcmR1cCBnY2MtNC40LjAub2xkL2djYy9jb25maWcvdC1zbGliZ2NjLWVsZi12ZXIgZ2NjLTQuNC4wL2djYy9jb25maWcvdC1zbGliZ2NjLWVsZi12ZXIKKy0tLSBnY2MtNC40LjAub2xkL2djYy9jb25maWcvdC1zbGliZ2NjLWVsZi12ZXIJMjAwNS0xMC0zMSAxODowMzowOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy90LXNsaWJnY2MtZWxmLXZlcgkyMDA4LTEwLTA3IDE5OjI4OjEzLjAwMDAwMDAwMCArMDIwMAorQEAgLTksNyArOSw3IEBAIFNITElCX01BUCA9IEBzaGxpYl9tYXBfZmlsZUAKKyBTSExJQl9PQkpTID0gQHNobGliX29ianNACisgU0hMSUJfRElSID0gQG11bHRpbGliX2RpckAKKyBTSExJQl9TTElCRElSX1FVQUwgPSBAc2hsaWJfc2xpYmRpcl9xdWFsQAorLVNITElCX0xDID0gLWxjCisrU0hMSUJfTEMgPSBAbGliZ2NjX2xpYm1AIC1sYworIFNITElCX01BS0VfU09MSU5LID0gJChMTl9TKSAkKFNITElCX1NPTkFNRSkgJChTSExJQl9ESVIpLyQoU0hMSUJfU09MSU5LKQorIFNITElCX0lOU1RBTExfU09MSU5LID0gJChMTl9TKSAkKFNITElCX1NPTkFNRSkgXAorIAkkJChERVNURElSKSQkKHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwpLyQoU0hMSUJfU09MSU5LKQorZGlmZiAtcmR1cCBnY2MtNC40LjAub2xkL2xpYmdjYy9jb25maWd1cmUgZ2NjLTQuNC4wL2xpYmdjYy9jb25maWd1cmUKKy0tLSBnY2MtNC40LjAub2xkL2xpYmdjYy9jb25maWd1cmUJMjAwOC0wNy0xNyAxMDo0MDo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjAvbGliZ2NjL2NvbmZpZ3VyZQkyMDA4LTEwLTA3IDE5OjQwOjQ4LjAwMDAwMDAwMCArMDIwMAorQEAgLTI3Miw3ICsyNzIsNyBAQCBQQUNLQUdFX1NUUklORz0nR05VIEMgUnVudGltZSBMaWJyYXJ5IDEuCisgUEFDS0FHRV9CVUdSRVBPUlQ9JycKKyAKKyBhY191bmlxdWVfZmlsZT0ic3RhdGljLW9iamVjdC5tayIKKy1hY19zdWJzdF92YXJzPSdTSEVMTCBQQVRIX1NFUEFSQVRPUiBQQUNLQUdFX05BTUUgUEFDS0FHRV9UQVJOQU1FIFBBQ0tBR0VfVkVSU0lPTiBQQUNLQUdFX1NUUklORyBQQUNLQUdFX0JVR1JFUE9SVCBleGVjX3ByZWZpeCBwcmVmaXggcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBsb2NhbHN0YXRlZGlyIGxpYmRpciBpbmNsdWRlZGlyIG9sZGluY2x1ZGVkaXIgaW5mb2RpciBtYW5kaXIgYnVpbGRfYWxpYXMgaG9zdF9hbGlhcyB0YXJnZXRfYWxpYXMgREVGUyBFQ0hPX0MgRUNIT19OIEVDSE9fVCBMSUJTIGxpYmdjY190b3BkaXIgZW5hYmxlX3NoYXJlZCBzbGliZGlyIElOU1RBTExfUFJPR1JBTSBJTlNUQUxMX1NDUklQVCBJTlNUQUxMX0RBVEEgQVdLIGJ1aWxkIGJ1aWxkX2NwdSBidWlsZF92ZW5kb3IgYnVpbGRfb3MgaG9zdCBob3N0X2NwdSBob3N0X3ZlbmRvciBob3N0X29zIGhvc3Rfbm9uY2Fub25pY2FsIGJ1aWxkX2xpYnN1YmRpciBidWlsZF9zdWJkaXIgaG9zdF9zdWJkaXIgdGFyZ2V0X3N1YmRpciBBUiBhY19jdF9BUiBMSVBPIGFjX2N0X0xJUE8gTk0gYWNfY3RfTk0gUkFOTElCIGFjX2N0X1JBTkxJQiBTVFJJUCBhY19jdF9TVFJJUCBMTl9TIENDIENGTEFHUyBMREZMQUdTIENQUEZMQUdTIGFjX2N0X0NDIEVYRUVYVCBPQkpFWFQgQ1BQIGRlY2ltYWxfZmxvYXQgZW5hYmxlX2RlY2ltYWxfZmxvYXQgZml4ZWRfcG9pbnQgdmlzX2hpZGUgc2V0X2hhdmVfY2NfdGxzIHRtYWtlX2ZpbGUgZXh0cmFfcGFydHMgYXNtX2hpZGRlbl9vcCBMSUJPQkpTIExUTElCT0JKUycKKythY19zdWJzdF92YXJzPSdTSEVMTCBQQVRIX1NFUEFSQVRPUiBQQUNLQUdFX05BTUUgUEFDS0FHRV9UQVJOQU1FIFBBQ0tBR0VfVkVSU0lPTiBQQUNLQUdFX1NUUklORyBQQUNLQUdFX0JVR1JFUE9SVCBleGVjX3ByZWZpeCBwcmVmaXggcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBsb2NhbHN0YXRlZGlyIGxpYmRpciBpbmNsdWRlZGlyIG9sZGluY2x1ZGVkaXIgaW5mb2RpciBtYW5kaXIgYnVpbGRfYWxpYXMgaG9zdF9hbGlhcyB0YXJnZXRfYWxpYXMgREVGUyBFQ0hPX0MgRUNIT19OIEVDSE9fVCBMSUJTIGxpYmdjY190b3BkaXIgZW5hYmxlX3NoYXJlZCBzbGliZGlyIElOU1RBTExfUFJPR1JBTSBJTlNUQUxMX1NDUklQVCBJTlNUQUxMX0RBVEEgQVdLIGJ1aWxkIGJ1aWxkX2NwdSBidWlsZF92ZW5kb3IgYnVpbGRfb3MgaG9zdCBob3N0X2NwdSBob3N0X3ZlbmRvciBob3N0X29zIGhvc3Rfbm9uY2Fub25pY2FsIGJ1aWxkX2xpYnN1YmRpciBidWlsZF9zdWJkaXIgaG9zdF9zdWJkaXIgdGFyZ2V0X3N1YmRpciBBUiBhY19jdF9BUiBMSVBPIGFjX2N0X0xJUE8gTk0gYWNfY3RfTk0gUkFOTElCIGFjX2N0X1JBTkxJQiBTVFJJUCBhY19jdF9TVFJJUCBMTl9TIENDIENGTEFHUyBMREZMQUdTIENQUEZMQUdTIGFjX2N0X0NDIEVYRUVYVCBPQkpFWFQgQ1BQIGRlY2ltYWxfZmxvYXQgZW5hYmxlX2RlY2ltYWxfZmxvYXQgZml4ZWRfcG9pbnQgdmlzX2hpZGUgc2V0X2hhdmVfY2NfdGxzIExJQkdDQ19MSUJNIHRtYWtlX2ZpbGUgZXh0cmFfcGFydHMgYXNtX2hpZGRlbl9vcCBMSUJPQkpTIExUTElCT0JKUycKKyBhY19zdWJzdF9maWxlcz0nJworIGFjX3B3ZD1gcHdkYAorIAorQEAgLTM1MjIsNiArMzUyMiwzOSBAQCBpZiB0ZXN0ICIkZW5hYmxlX3RscyAkZ2NjX2N2X2hhdmVfY2NfdGxzCisgZmkKKyAKKyAKKysjIE9uIHBvd2VycGMgbGliZ2NjX3MgcmVmZXJlbmNlcyBjb3B5c2lnbmwgd2hpY2ggaXMgYSBsaWJtIGZ1bmN0aW9uIGJ1dAorKyMgZ2xpYmMgYXBwYXJlbnRseSBhbHNvIHByb3ZpZGVzIGl0IHZpYSBsaWJjIGFzIG9wcG9zZWQgdG8gdUNsaWJjIHdoZXJlCisrIyBpdCBsaXZlcyBpbiBsaWJtLgorK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGNvcHlzaWdubCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGNvcHlzaWdubC4uLiAkRUNIT19DIiA+JjYKKytpZiB0ZXN0ICIke2xpYmdjY19jdl9jb3B5c2lnbmxfbGliK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysKKysgICAgZWNobyAnI2luY2x1ZGUgPGZlYXR1cmVzLmg+JyA+IGNvbmZ0ZXN0LmMKKysgICAgZWNobyAnaW50IHRoZV9saWJjID0gX19VQ0xJQkNfXyArIF9fcG93ZXJwY19fOycgPj4gY29uZnRlc3QuYworKyAgICBsaWJnY2NfY3ZfY29weXNpZ25sX2xpYj0iLWxjIgorKyAgICBpZiB7IGFjX3RyeT0nJHtDQy1jY30gLVMgY29uZnRlc3QuYyAtbyBjb25mdGVzdC5zIDE+JjUnCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfQorKyAgICB0aGVuCisrCWxpYmdjY19jdl9jb3B5c2lnbmxfbGliPSItbG0iCisrICAgIGZpCisrICAgIHJtIC1mIGNvbmZ0ZXN0LioKKysKKytmaQorK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsaWJnY2NfY3ZfY29weXNpZ25sX2xpYiIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGxpYmdjY19jdl9jb3B5c2lnbmxfbGliIiA+JjYKKysKKytjYXNlIC8ke2xpYmdjY19jdl9jb3B5c2lnbmxfbGlifS8gaW4KKysgIC8tbG0vKSBMSUJHQ0NfTElCTT0iJExJQkdDQ19MSUJNIC1sbSIgOzsKKysgICopIExJQkdDQ19MSUJNPSA7OworK2VzYWMKKysKKysKKyAjIENvbmRpdGlvbmFsaXplIHRoZSBtYWtlZmlsZSBmb3IgdGhpcyB0YXJnZXQgbWFjaGluZS4KKyB0bWFrZV9maWxlXz0KKyBmb3IgZiBpbiAke3RtYWtlX2ZpbGV9CitAQCAtNDI0Miw2ICs0Mjc1LDcgQEAgcyxAZW5hYmxlX2RlY2ltYWxfZmxvYXRALCRlbmFibGVfZGVjaW1hbAorIHMsQGZpeGVkX3BvaW50QCwkZml4ZWRfcG9pbnQsO3QgdAorIHMsQHZpc19oaWRlQCwkdmlzX2hpZGUsO3QgdAorIHMsQHNldF9oYXZlX2NjX3Rsc0AsJHNldF9oYXZlX2NjX3Rscyw7dCB0CisrcyxATElCR0NDX0xJQk1ALCRMSUJHQ0NfTElCTSw7dCB0CisgcyxAdG1ha2VfZmlsZUAsJHRtYWtlX2ZpbGUsO3QgdAorIHMsQGV4dHJhX3BhcnRzQCwkZXh0cmFfcGFydHMsO3QgdAorIHMsQGFzbV9oaWRkZW5fb3BALCRhc21faGlkZGVuX29wLDt0IHQKK2RpZmYgLXJkdXAgZ2NjLTQuNC4wLm9sZC9saWJnY2MvY29uZmlndXJlLmFjIGdjYy00LjQuMC9saWJnY2MvY29uZmlndXJlLmFjCistLS0gZ2NjLTQuNC4wLm9sZC9saWJnY2MvY29uZmlndXJlLmFjCTIwMDgtMDctMTcgMTA6NDA6NTMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC4wL2xpYmdjYy9jb25maWd1cmUuYWMJMjAwOC0xMC0wNyAxOTozNDo0OC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMDMsNiArMjAzLDI3IEBAIGlmIHRlc3QgIiRlbmFibGVfdGxzICRnY2NfY3ZfaGF2ZV9jY190bHMKKyBmaQorIEFDX1NVQlNUKHNldF9oYXZlX2NjX3RscykKKyAKKysjIE9uIHBvd2VycGMgbGliZ2NjX3MgcmVmZXJlbmNlcyBjb3B5c2lnbmwgd2hpY2ggaXMgYSBsaWJtIGZ1bmN0aW9uIGJ1dAorKyMgZ2xpYmMgYXBwYXJlbnRseSBhbHNvIHByb3ZpZGVzIGl0IHZpYSBsaWJjIGFzIG9wcG9zZWQgdG8gdUNsaWJjIHdoZXJlCisrIyBpdCBsaXZlcyBpbiBsaWJtLgorK0FDX0NBQ0hFX0NIRUNLCisrICBsaWJnY2NfY3ZfY29weXNpZ25sX2xpYiwKKysgICAgZWNobyAnI2luY2x1ZGUgPGZlYXR1cmVzLmg+JyA+IGNvbmZ0ZXN0LmMKKysgICAgZWNobyAnaW50IHRoZV9saWJjID0gX19VQ0xJQkNfXyArIF9fcG93ZXJwY19fOycgPj4gY29uZnRlc3QuYworKyAgICBsaWJnY2NfY3ZfY29weXNpZ25sX2xpYj0iLWxjIgorKyAgICBpZiBBQ19UUllfQ09NTUFORCgke0NDLWNjfSAtUyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LnMgMT4mQVNfTUVTU0FHRV9MT0dfRkQpCisrICAgIHRoZW4KKysJbGliZ2NjX2N2X2NvcHlzaWdubF9saWI9Ii1sbSIKKysgICAgZmkKKysgICAgcm0gLWYgY29uZnRlc3QuKgorKyAgXSkKKysKKytjYXNlIC8ke2xpYmdjY19jdl9jb3B5c2lnbmxfbGlifS8gaW4KKysgIC8tbG0vKSBMSUJHQ0NfTElCTT0iJExJQkdDQ19MSUJNIC1sbSIgOzsKKysgICopIExJQkdDQ19MSUJNPSA7OworK2VzYWMKKytBQ19TVUJTVChMSUJHQ0NfTElCTSkKKysKKyAjIENvbmRpdGlvbmFsaXplIHRoZSBtYWtlZmlsZSBmb3IgdGhpcyB0YXJnZXQgbWFjaGluZS4KKyB0bWFrZV9maWxlXz0KKyBmb3IgZiBpbiAke3RtYWtlX2ZpbGV9CitkaWZmIC1yZHVwIGdjYy00LjQuMC5vbGQvbGliZ2NjL01ha2VmaWxlLmluIGdjYy00LjQuMC9saWJnY2MvTWFrZWZpbGUuaW4KKy0tLSBnY2MtNC40LjAub2xkL2xpYmdjYy9NYWtlZmlsZS5pbgkyMDA4LTA3LTE3IDEwOjQwOjUzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9saWJnY2MvTWFrZWZpbGUuaW4JMjAwOC0xMC0wNyAxOToyODoxMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC00MCw2ICs0MCw3IEBAIGVuYWJsZV9zaGFyZWQgPSBAZW5hYmxlX3NoYXJlZEAKKyBkZWNpbWFsX2Zsb2F0ID0gQGRlY2ltYWxfZmxvYXRACisgZW5hYmxlX2RlY2ltYWxfZmxvYXQgPSBAZW5hYmxlX2RlY2ltYWxfZmxvYXRACisgZml4ZWRfcG9pbnQgPSBAZml4ZWRfcG9pbnRACisrTElCR0NDX0xJQk0gPSBATElCR0NDX0xJQk1ACisgCisgaG9zdF9ub25jYW5vbmljYWwgPSBAaG9zdF9ub25jYW5vbmljYWxACisgCitAQCAtNzg2LDkgKzc4NywxMCBAQCBsaWJnY2NfcyQoU0hMSUJfRVhUKTogJChsaWJnY2Mtcy1vYmplY3RzCisgCQlAbXVsdGlsaWJfZGlyQCwkKE1VTFRJRElSKSwkKHN1YnN0IFwKKyAJCUBzaGxpYl9vYmpzQCwkKG9iamVjdHMpLCQoc3Vic3QgXAorIAkJQHNobGliX2Jhc2VfbmFtZUAsbGliZ2NjX3MsJChzdWJzdCBcCisrCQlAbGliZ2NjX2xpYm1ALCQoTElCR0NDX0xJQk0pLCQoc3Vic3QgXAorIAkJQHNobGliX21hcF9maWxlQCwkKG1hcGZpbGUpLCQoc3Vic3QgXAorIAkJQHNobGliX3NsaWJkaXJfcXVhbEAsJChNVUxUSU9TU1VCRElSKSwkKHN1YnN0IFwKKy0JCUBzaGxpYl9zbGliZGlyQCwkKHNobGliX3NsaWJkaXIpLCQoU0hMSUJfTElOSykpKSkpKSkpCisrCQlAc2hsaWJfc2xpYmRpckAsJChzaGxpYl9zbGliZGlyKSwkKFNITElCX0xJTkspKSkpKSkpKSkKKyAKKyBsaWJ1bndpbmQkKFNITElCX0VYVCk6ICQobGlidW53aW5kLXMtb2JqZWN0cykgJChleHRyYS1wYXJ0cykKKyAJIyBAbXVsdGlsaWJfZmxhZ3NAIGlzIHN0aWxsIG5lZWRlZCBiZWNhdXNlIHRoaXMgbWF5IHVzZQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMy8zOTAtYXJtLXNvZnRmbG9hdC1saWJnY2MucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzM5MC1hcm0tc29mdGZsb2F0LWxpYmdjYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmEzMGEzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMy8zOTAtYXJtLXNvZnRmbG9hdC1saWJnY2MucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorW1BBVENIXSBhZGQgdGhlIGNvcnJlY3Qgc3ltYm9scyB0byBsaWJnY2MgZm9yIHVjbGliYyBhcm0gc29mdGZsb2F0CisKK1NpZ25lZC1vZmYtYnk6IFBldGVyIEtvcnNnYWFyZCA8amFjbWV0QHN1bnNpdGUuZGs+CistLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL2FybS90LWxpbnV4ICAgICB8ICAgIDYgKysrKystCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC40LjAvZ2NjL2NvbmZpZy9hcm0vdC1saW51eAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvYXJtL3QtbGludXgKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy9hcm0vdC1saW51eAorQEAgLTQsNyArNCwxMSBAQAorIAorIExJQjFBU01TUkMgPSBhcm0vbGliMWZ1bmNzLmFzbQorIExJQjFBU01GVU5DUyA9IF91ZGl2c2kzIF9kaXZzaTMgX3Vtb2RzaTMgX21vZHNpMyBfZHZtZF9sbnggX2NsenNpMiBfY2x6ZGkyIFwKKy0JX2FybV9hZGRzdWJkZjMgX2FybV9hZGRzdWJzZjMKKysJX2FybV9hZGRzdWJkZjMgX2FybV9hZGRzdWJzZjMgXAorKwlfYXJtX25lZ2RmMiBfYXJtX211bGRpdmRmMyBfYXJtX2NtcGRmMiBfYXJtX3Vub3JkZGYyIFwKKysJX2FybV9maXhkZnNpIF9hcm1fZml4dW5zZGZzaSBfYXJtX3RydW5jZGZzZjIgXAorKwlfYXJtX25lZ3NmMiBfYXJtX211bGRpdnNmMyBfYXJtX2NtcHNmMiBfYXJtX3Vub3Jkc2YyIFwKKysJX2FybV9maXhzZnNpIF9hcm1fZml4dW5zc2ZzaQorIAorICMgTVVMVElMSUJfT1BUSU9OUyA9IG1oYXJkLWZsb2F0L21zb2Z0LWZsb2F0CisgIyBNVUxUSUxJQl9ESVJOQU1FUyA9IGhhcmQtZmxvYXQgc29mdC1mbG9hdAorSW5kZXg6IGdjYy00LjQuMC9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCitAQCAtNjAsNyArNjAsNyBAQAorICAgICV7c2hhcmVkOi1sY30gXAorICAgICV7IXNoYXJlZDole3Byb2ZpbGU6LWxjX3B9JXshcHJvZmlsZTotbGN9fSIKKyAKKy0jZGVmaW5lIExJQkdDQ19TUEVDICIle21zb2Z0LWZsb2F0Oi1sZmxvYXR9ICV7bWZsb2F0LWFiaT1zb2Z0KjotbGZsb2F0fSAtbGdjYyIKKysjZGVmaW5lIExJQkdDQ19TUEVDICItbGdjYyIKKyAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzQwMC1wcjQyMjg5LWZpeC1saWJmZmktYnVpbGQtb24tYXJtLW9hYmkucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzQwMC1wcjQyMjg5LWZpeC1saWJmZmktYnVpbGQtb24tYXJtLW9hYmkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY1NDg3OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjMvNDAwLXByNDIyODktZml4LWxpYmZmaS1idWlsZC1vbi1hcm0tb2FiaS5wYXRjaApAQCAtMCwwICsxLDExIEBACistLS0gZ2NjLTQuMy40L2xpYmZmaS9zcmMvYXJtL3N5c3YuUwkKKysrKyBnY2MtNC4zLjQvbGliZmZpL3NyYy9hcm0vc3lzdi5TCQorQEAgLTIzNSw3ICsyMzUsNyBAQCBBUk1fRlVOQ19TVEFSVCBmZmlfY2xvc3VyZV9TWVNWCisgCXN0bWZkCXNwISwge2lwLCBscn0KKyAJVU5XSU5EIC5zYXZlCXtyMCwgbHJ9CisgCWFkZAlyMiwgc3AsICM4CistCS5wYWQgIzE2CisrCVVOV0lORCAucGFkICMxNgorIAlzdWIJc3AsIHNwLCAjMTYKKyAJc3RyCXNwLCBbc3AsICM4XQorIAlhZGQJcjEsIHNwLCAjOApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMy80MTAtbGliZ2NjX2VoLmEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC4zLzQxMC1saWJnY2NfZWguYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzUzMjYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuMy80MTAtbGliZ2NjX2VoLmEucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorSGlnaGx5IGluc3BpcmVkIGJ5OgorICBodHRwOi8vbGFuZGxleS5uZXQvaGcvYWJvcmlnaW5hbC9maWxlLzdlMDc0N2E2NjVhYi9zb3VyY2VzL3BhdGNoZXMvZ2NjLWNvcmUtbGliZ2NjZWgucGF0Y2gKKworZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9saWJnY2MvTWFrZWZpbGUuaW4gZ2NjLTQuNC4wL2xpYmdjYy9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjQuMC5vcmlnL2xpYmdjYy9NYWtlZmlsZS5pbgkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9saWJnY2MvTWFrZWZpbGUuaW4JMjAxMS0wOS0xMiAxNzowNToyNS4xMjExMjQ1NTkgKzAyMDAKK0BAIC03NTQsOCArNzU0LDkgQEAKKyBsaWJnY2NfcyQoU0hMSUJfRVhUKTogbGlidW53aW5kJChTSExJQl9FWFQpCisgZW5kaWYKKyAKKythbGw6IGxpYmdjY19laC5hCisgaWZlcSAoJChlbmFibGVfc2hhcmVkKSx5ZXMpCistYWxsOiBsaWJnY2NfZWguYSBsaWJnY2NfcyQoU0hMSUJfRVhUKQorK2FsbDogbGliZ2NjX3MkKFNITElCX0VYVCkKKyBpZm5lcSAoJChMSUJVTldJTkQpLCkKKyBhbGw6IGxpYnVud2luZCQoU0hMSUJfRVhUKQorIGVuZGlmCitAQCAtOTI0LDEwICs5MjUsNiBAQAorIGluc3RhbGwtc2hhcmVkOgorIAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGluc3RfbGliZGlyKQorIAorLQkkKElOU1RBTExfREFUQSkgbGliZ2NjX2VoLmEgJChERVNURElSKSQoaW5zdF9saWJkaXIpLworLQljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCistCSQoUkFOTElCKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKy0KKyAJJChzdWJzdCBAbXVsdGlsaWJfZGlyQCwkKE1VTFRJRElSKSwkKHN1YnN0IFwKKyAJCUBzaGxpYl9iYXNlX25hbWVALGxpYmdjY19zLCQoc3Vic3QgXAorIAkJQHNobGliX3NsaWJkaXJfcXVhbEAsJChNVUxUSU9TU1VCRElSKSwkKFNITElCX0lOU1RBTEwpKSkpCitAQCAtOTQyLDYgKzkzOSwxMCBAQAorIAljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjb3YuYQorIAkkKFJBTkxJQikgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjb3YuYQorIAorKwkkKElOU1RBTExfREFUQSkgbGliZ2NjX2VoLmEgJChERVNURElSKSQoaW5zdF9saWJkaXIpLworKwljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCisrCSQoUkFOTElCKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKysKKyAJcGFydHM9IiQoSU5TVEFMTF9QQVJUUykiOwkJCQlcCisgCWZvciBmaWxlIGluICQkcGFydHM7IGRvCQkJCQlcCisgCSAgcm0gLWYgJChERVNURElSKSQoaW5zdF9saWJkaXIpLyQkZmlsZTsJCVwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMTAwLWFscGhhLW1pZWVlLWRlZmF1bHQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzEwMC1hbHBoYS1taWVlZS1kZWZhdWx0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NzU5Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzEwMC1hbHBoYS1taWVlZS1kZWZhdWx0LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC40Lm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5oIGdjYy00LjQuNC9nY2MvY29uZmlnL2FscGhhL2FscGhhLmgKKy0tLSBnY2MtNC40LjQub3JpZy9nY2MvY29uZmlnL2FscGhhL2FscGhhLmgJMjAwOS0wMi0yMCAxNjoyMDozOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC40LjQvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5oCTIwMTAtMDUtMTYgMTk6MTA6MTkuMDAwMDAwMDAwICswMjAwCitAQCAtOTUsNiArOTUsOCBAQAorICAgd2hpbGUgKDApCisgI2VuZGlmCisgCisrI2RlZmluZSBDUFBfU1BFQyAiJXshbm8taWVlZTotbWllZWV9IgorKworICNkZWZpbmUgV09SRF9TV0lUQ0hfVEFLRVNfQVJHKFNUUikJCVwKKyAgKCFzdHJjbXAgKFNUUiwgInJwYXRoIikgfHwgREVGQVVMVF9XT1JEX1NXSVRDSF9UQUtFU19BUkcoU1RSKSkKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuNC40Lm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5vcHQgZ2NjLTQuNC40L2djYy9jb25maWcvYWxwaGEvYWxwaGEub3B0CistLS0gZ2NjLTQuNC40Lm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5vcHQJMjAwNy0wOC0wMiAxMjo0OTozMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjQvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5vcHQJMjAxMC0wNS0xNiAxOToxMDoxOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zOSw3ICszOSw3IEBACisgUmVxdWVzdCBJRUVFLWNvbmZvcm1hbnQgbWF0aCBsaWJyYXJ5IHJvdXRpbmVzIChPU0YvMSkKKyAKKyBtaWVlZQorLVRhcmdldCBSZXBvcnQgUmVqZWN0TmVnYXRpdmUgTWFzayhJRUVFKQorK1RhcmdldCBSZXBvcnQgTWFzayhJRUVFKQorIEVtaXQgSUVFRS1jb25mb3JtYW50IGNvZGUsIHdpdGhvdXQgaW5leGFjdCBleGNlcHRpb25zCisgCisgbWllZWUtd2l0aC1pbmV4YWN0CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzExMC10cmFtcG9saW5ld2Fybi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMTEwLXRyYW1wb2xpbmV3YXJuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMjIxZDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzExMC10cmFtcG9saW5ld2Fybi5wYXRjaApAQCAtMCwwICsxLDI3IEBACitkaWZmIC1kdXJOIGdjYy00LjQuNC5vcmlnL2djYy9idWlsdGlucy5jIGdjYy00LjQuNC9nY2MvYnVpbHRpbnMuYworLS0tIGdjYy00LjQuNC5vcmlnL2djYy9idWlsdGlucy5jCTIwMTAtMDMtMjIgMTY6MDA6MjAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC40L2djYy9idWlsdGlucy5jCTIwMTAtMDUtMTYgMTk6MTA6MzQuMDAwMDAwMDAwICswMjAwCitAQCAtNTc4Myw2ICs1NzgzLDkgQEAKKyAgIHRyYW1wb2xpbmVzX2NyZWF0ZWQgPSAxOworICAgSU5JVElBTElaRV9UUkFNUE9MSU5FIChyX3RyYW1wLCByX2Z1bmMsIHJfY2hhaW4pOworIAorKyAgaWYgKHdhcm5fdHJhbXBvbGluZXMpCisrICAgIHdhcm5pbmcgKE9QVF9XdHJhbXBvbGluZXMsICJnZW5lcmF0aW5nIHRyYW1wb2xpbmUgaW4gb2JqZWN0IChyZXF1aXJlcyBleGVjdXRhYmxlIHN0YWNrKSIpOworKworICAgcmV0dXJuIGNvbnN0MF9ydHg7CisgfQorIAorZGlmZiAtZHVyTiBnY2MtNC40LjQub3JpZy9nY2MvY29tbW9uLm9wdCBnY2MtNC40LjQvZ2NjL2NvbW1vbi5vcHQKKy0tLSBnY2MtNC40LjQub3JpZy9nY2MvY29tbW9uLm9wdAkyMDA5LTAzLTI4IDE4OjI4OjQ1LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNC9nY2MvY29tbW9uLm9wdAkyMDEwLTA1LTE2IDE5OjEwOjM0LjAwMDAwMDAwMCArMDIwMAorQEAgLTE5Nyw2ICsxOTcsMTAgQEAKKyBDb21tb24gVmFyKHdhcm5fdHlwZV9saW1pdHMpIEluaXQoLTEpIFdhcm5pbmcKKyBXYXJuIGlmIGEgY29tcGFyaXNvbiBpcyBhbHdheXMgdHJ1ZSBvciBhbHdheXMgZmFsc2UgZHVlIHRvIHRoZSBsaW1pdGVkIHJhbmdlIG9mIHRoZSBkYXRhIHR5cGUKKyAKKytXdHJhbXBvbGluZXMKKytDb21tb24gVmFyKHdhcm5fdHJhbXBvbGluZXMpIEluaXQoMSkKKytXYXJuIHdoZW5ldmVyIGEgdHJhbXBvbGluZSBpcyBnZW5lcmF0ZWQKKysKKyBXdW5pbml0aWFsaXplZAorIENvbW1vbiBWYXIod2Fybl91bmluaXRpYWxpemVkKSBXYXJuaW5nCisgV2FybiBhYm91dCB1bmluaXRpYWxpemVkIGF1dG9tYXRpYyB2YXJpYWJsZXMKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMTIwLWphdmEtbm9tdWx0aS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMTIwLWphdmEtbm9tdWx0aS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDMwNjM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC8xMjAtamF2YS1ub211bHRpLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC40Lm9yaWcvbGliamF2YS9jb25maWd1cmUgZ2NjLTQuNC40L2xpYmphdmEvY29uZmlndXJlCistLS0gZ2NjLTQuNC40Lm9yaWcvbGliamF2YS9jb25maWd1cmUJMjAxMC0wNC0yOSAxMDoyNjo1NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjQvbGliamF2YS9jb25maWd1cmUJMjAxMC0wNS0xNiAxOToxMDo0OS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMDIxLDYgKzEwMjEsOCBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD15ZXMKKyAgIC0tZW5hYmxlLWphdmEtbWFpbnRhaW5lci1tb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdyByZWJ1aWxkaW5nIG9mIC5jbGFzcyBhbmQgLmggZmlsZXMKKysgIC0tZW5hYmxlLWxpYmphdmEtbXVsdGlsaWIKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGxpYmphdmEgYXMgbXVsdGlsaWIKKyAgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICBzcGVlZHMgdXAgb25lLXRpbWUgYnVpbGQKKyAgIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgICBkbyBub3QgcmVqZWN0IHNsb3cgZGVwZW5kZW5jeSBleHRyYWN0b3JzCisgICAtLWVuYWJsZS1tYWludGFpbmVyLW1vZGUgIGVuYWJsZSBtYWtlIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgbm90IHVzZWZ1bAorQEAgLTE5NzMsNiArMTk3NSwxNiBAQAorIGZpCisgCisgCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYmphdmEtbXVsdGlsaWIgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7ZW5hYmxlX2xpYmphdmFfbXVsdGlsaWIrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX2xpYmphdmFfbXVsdGlsaWI7CisrZmkKKysKKytpZiB0ZXN0ICIkZW5hYmxlX2xpYmphdmFfbXVsdGlsaWIiID0gbm87IHRoZW4KKysgIG11bHRpbGliPW5vCisrICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzIC0tZGlzYWJsZS1tdWx0aWxpYiIKKytmaQorKworICMgSXQgbWF5IG5vdCBiZSBzYWZlIHRvIHJ1biBsaW5raW5nIHRlc3RzIGluIEFDX1BST0dfQ0MvQUNfUFJPR19DWFguCisgCisgCitkaWZmIC1kdXJOIGdjYy00LjQuNC5vcmlnL2xpYmphdmEvY29uZmlndXJlLmFjIGdjYy00LjQuNC9saWJqYXZhL2NvbmZpZ3VyZS5hYworLS0tIGdjYy00LjQuNC5vcmlnL2xpYmphdmEvY29uZmlndXJlLmFjCTIwMTAtMDQtMjEgMTk6MDQ6NDIuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC40L2xpYmphdmEvY29uZmlndXJlLmFjCTIwMTAtMDUtMTYgMTk6MTA6NDkuMDAwMDAwMDAwICswMjAwCitAQCAtMTM5LDYgKzEzOSwxMyBAQAorIAlbYWxsb3cgcmVidWlsZGluZyBvZiAuY2xhc3MgYW5kIC5oIGZpbGVzXSkpCisgQU1fQ09ORElUSU9OQUwoSkFWQV9NQUlOVEFJTkVSX01PREUsIHRlc3QgIiRlbmFibGVfamF2YV9tYWludGFpbmVyX21vZGUiID0geWVzKQorIAorK0FDX0FSR19FTkFCTEUobGliamF2YS1tdWx0aWxpYiwKKysJQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxpYmphdmEtbXVsdGlsaWJdLCBbYnVpbGQgbGliamF2YSBhcyBtdWx0aWxpYl0pKQorK2lmIHRlc3QgIiRlbmFibGVfbGliamF2YV9tdWx0aWxpYiIgPSBubzsgdGhlbgorKyAgbXVsdGlsaWI9bm8KKysgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1kaXNhYmxlLW11bHRpbGliIgorK2ZpCisrCisgIyBJdCBtYXkgbm90IGJlIHNhZmUgdG8gcnVuIGxpbmtpbmcgdGVzdHMgaW4gQUNfUFJPR19DQy9BQ19QUk9HX0NYWC4KKyBHQ0NfTk9fRVhFQ1VUQUJMRVMKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMTMwLWNyb3NzLWNvbXBpbGUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzEzMC1jcm9zcy1jb21waWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4OTk3MTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzEzMC1jcm9zcy1jb21waWxlLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC40Lm9yaWcvZ2NjL2NvbmZpZ3VyZSBnY2MtNC40LjQvZ2NjL2NvbmZpZ3VyZQorLS0tIGdjYy00LjQuNC5vcmlnL2djYy9jb25maWd1cmUJMjAwOS0xMC0xOSAxNDoxNToyNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjQvZ2NjL2NvbmZpZ3VyZQkyMDEwLTA1LTE2IDE5OjExOjAwLjAwMDAwMDAwMCArMDIwMAorQEAgLTEzOTk3LDcgKzEzOTk3LDcgQEAKKyAJICAgIHwgcG93ZXJwYyotKi0qLHBvd2VycGM2NCotKi0qKQorIAkJQ1JPU1M9IiRDUk9TUyAtRE5BVElWRV9DUk9TUyIgOzsKKyAJZXNhYworLWVsaWYgdGVzdCAieCRUQVJHRVRfU1lTVEVNX1JPT1QiICE9IHg7IHRoZW4KKytlbGlmIHRlc3QgIngkVEFSR0VUX1NZU1RFTV9ST09UIiAhPSB4IC1vICRidWlsZCAhPSAkaG9zdDsgdGhlbgorICAgICAgICAgU1lTVEVNX0hFQURFUl9ESVI9JGJ1aWxkX3N5c3RlbV9oZWFkZXJfZGlyCisgZmkKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuNC40Lm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYyBnY2MtNC40LjQvZ2NjL2NvbmZpZ3VyZS5hYworLS0tIGdjYy00LjQuNC5vcmlnL2djYy9jb25maWd1cmUuYWMJMjAwOS0xMC0xOSAxNDoxNToyNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjQvZ2NjL2NvbmZpZ3VyZS5hYwkyMDEwLTA1LTE2IDE5OjExOjAwLjAwMDAwMDAwMCArMDIwMAorQEAgLTE3MjAsNyArMTcyMCw3IEBACisgCSAgICB8IHBvd2VycGMqLSotKixwb3dlcnBjNjQqLSotKikKKyAJCUNST1NTPSIkQ1JPU1MgLUROQVRJVkVfQ1JPU1MiIDs7CisgCWVzYWMKKy1lbGlmIHRlc3QgIngkVEFSR0VUX1NZU1RFTV9ST09UIiAhPSB4OyB0aGVuCisrZWxpZiB0ZXN0ICJ4JFRBUkdFVF9TWVNURU1fUk9PVCIgIT0geCAtbyAkYnVpbGQgIT0gJGhvc3Q7IHRoZW4KKyAgICAgICAgIFNZU1RFTV9IRUFERVJfRElSPSRidWlsZF9zeXN0ZW1faGVhZGVyX2RpciAKKyBmaQorIAorZGlmZiAtZHVyTiBnY2MtNC40LjQub3JpZy9nY2MvdW53aW5kLWR3Mi5jIGdjYy00LjQuNC9nY2MvdW53aW5kLWR3Mi5jCistLS0gZ2NjLTQuNC40Lm9yaWcvZ2NjL3Vud2luZC1kdzIuYwkyMDEwLTAxLTIwIDA5OjM5OjE4LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNC9nY2MvdW53aW5kLWR3Mi5jCTIwMTAtMDUtMTYgMTk6MTE6MDAuMDAwMDAwMDAwICswMjAwCitAQCAtMzI5LDkgKzMyOSwxMSBAQAorIH0KKyAjZW5kaWYKKyAKKysjaWZuZGVmIGluaGliaXRfbGliYworICNpZmRlZiBNRF9VTldJTkRfU1VQUE9SVAorICNpbmNsdWRlIE1EX1VOV0lORF9TVVBQT1JUCisgI2VuZGlmCisrI2VuZGlmCisgDAorIC8qIEV4dHJhY3QgYW55IGludGVyZXN0aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIENJRSBmb3IgdGhlIHRyYW5zbGF0aW9uCisgICAgdW5pdCBGIGJlbG9uZ3MgdG8uICBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBieXRlIGFmdGVyIHRoZSBhdWdtZW50YXRpb24sCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzE0MC1kZWZhdWx0LWZvcm1hdC1zZWN1cml0eS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMTQwLWRlZmF1bHQtZm9ybWF0LXNlY3VyaXR5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NGY1MjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzE0MC1kZWZhdWx0LWZvcm1hdC1zZWN1cml0eS5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitkaWZmIC1kdXJOIGdjYy00LjQuNC5vcmlnL2djYy9jLWNvbW1vbi5jIGdjYy00LjQuNC9nY2MvYy1jb21tb24uYworLS0tIGdjYy00LjQuNC5vcmlnL2djYy9jLWNvbW1vbi5jCTIwMDktMTEtMDUgMTU6NTc6NTcuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC40L2djYy9jLWNvbW1vbi5jCTIwMTAtMDUtMTYgMTk6MTE6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMzAxLDcgKzMwMSw3IEBACisgLyogV2FybiBhYm91dCBmb3JtYXQvYXJndW1lbnQgYW5vbWFsaWVzIGluIGNhbGxzIHRvIGZvcm1hdHRlZCBJL08gZnVuY3Rpb25zCisgICAgKCpwcmludGYsICpzY2FuZiwgc3RyZnRpbWUsIHN0cmZtb24sIGV0Yy4pLiAgKi8KKyAKKy1pbnQgd2Fybl9mb3JtYXQ7CisraW50IHdhcm5fZm9ybWF0ID0gMTsKKyAKKyAvKiBXYXJuIGFib3V0IHVzaW5nIF9fbnVsbCAoYXMgTlVMTCBpbiBDKyspIGFzIHNlbnRpbmVsLiAgRm9yIGNvZGUgY29tcGlsZWQKKyAgICB3aXRoIEdDQyB0aGlzIGRvZXNuJ3QgbWF0dGVyIGFzIF9fbnVsbCBpcyBndWFyYW50ZWVkIHRvIGhhdmUgdGhlIHJpZ2h0CitkaWZmIC1kdXJOIGdjYy00LjQuNC5vcmlnL2djYy9jLm9wdCBnY2MtNC40LjQvZ2NjL2Mub3B0CistLS0gZ2NjLTQuNC40Lm9yaWcvZ2NjL2Mub3B0CTIwMDktMDktMTggMjM6NTM6MjMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC40L2djYy9jLm9wdAkyMDEwLTA1LTE2IDE5OjExOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTIzNiw3ICsyMzYsNyBAQAorIFdhcm4gYWJvdXQgZm9ybWF0IHN0cmluZ3MgdGhhdCBjb250YWluIE5VTCBieXRlcworIAorIFdmb3JtYXQtc2VjdXJpdHkKKy1DIE9iakMgQysrIE9iakMrKyBWYXIod2Fybl9mb3JtYXRfc2VjdXJpdHkpIFdhcm5pbmcKKytDIE9iakMgQysrIE9iakMrKyBWYXIod2Fybl9mb3JtYXRfc2VjdXJpdHkpIEluaXQoMSkgV2FybmluZworIFdhcm4gYWJvdXQgcG9zc2libGUgc2VjdXJpdHkgcHJvYmxlbXMgd2l0aCBmb3JtYXQgZnVuY3Rpb25zCisgCisgV2Zvcm1hdC15MmsKK2RpZmYgLWR1ck4gZ2NjLTQuNC40Lm9yaWcvZ2NjL2RvYy9pbnZva2UudGV4aSBnY2MtNC40LjQvZ2NjL2RvYy9pbnZva2UudGV4aQorLS0tIGdjYy00LjQuNC5vcmlnL2djYy9kb2MvaW52b2tlLnRleGkJMjAxMC0wNC0wOCAxMjo0Njo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjQvZ2NjL2RvYy9pbnZva2UudGV4aQkyMDEwLTA1LTE2IDE5OjExOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTI4ODgsNiArMjg4OCw5IEBACisgQG9wdGlvbnstV2Zvcm1hdC1ub25saXRlcmFsfSwgQG9wdGlvbnstV2Zvcm1hdC1zZWN1cml0eX0sIGFuZAorIEBvcHRpb257LVdmb3JtYXQ9Mn0gYXJlIGF2YWlsYWJsZSwgYnV0IGFyZSBub3QgaW5jbHVkZWQgaW4gQG9wdGlvbnstV2FsbH0uCisgCisrTk9URTogSW4gR2VudG9vLCB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgZm9yIEMsIEMrKywgT2JqQywgT2JqQysrLgorK1RvIGRpc2FibGUsIHVzZSBAb3B0aW9uey1XZm9ybWF0PTB9LgorKworIEBpdGVtIC1XZm9ybWF0LXkyaworIEBvcGluZGV4IFdmb3JtYXQteTJrCisgQG9waW5kZXggV25vLWZvcm1hdC15MmsKK0BAIC0yOTQxLDYgKzI5NDQsMTEgQEAKKyBpbiBmdXR1cmUgd2FybmluZ3MgbWF5IGJlIGFkZGVkIHRvIEBvcHRpb257LVdmb3JtYXQtc2VjdXJpdHl9IHRoYXQgYXJlIG5vdAorIGluY2x1ZGVkIGluIEBvcHRpb257LVdmb3JtYXQtbm9ubGl0ZXJhbH0uKQorIAorK05PVEU6IEluIEdlbnRvbywgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGZvciBDLCBDKyssIE9iakMsIE9iakMrKy4KKytUbyBkaXNhYmxlLCB1c2UgQG9wdGlvbnstV25vLWZvcm1hdC1zZWN1cml0eX0sIG9yIGRpc2FibGUgYWxsIGZvcm1hdCB3YXJuaW5ncworK3dpdGggQG9wdGlvbnstV2Zvcm1hdD0wfS4gIFRvIG1ha2UgZm9ybWF0IHNlY3VyaXR5IHdhcm5pbmdzIGZhdGFsLCBzcGVjaWZ5CisrQG9wdGlvbnstV2Vycm9yPWZvcm1hdC1zZWN1cml0eX0uCisrCisgQGl0ZW0gLVdmb3JtYXQ9MgorIEBvcGluZGV4IFdmb3JtYXQ9MgorIEBvcGluZGV4IFduby1mb3JtYXQ9MgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC8xNTAtZGVmYXVsdC1mb3J0aWZ5LXNvdXJjZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMTUwLWRlZmF1bHQtZm9ydGlmeS1zb3VyY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM5Y2ExMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMTUwLWRlZmF1bHQtZm9ydGlmeS1zb3VyY2UucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjQub3JpZy9nY2MvZG9jL2ludm9rZS50ZXhpIGdjYy00LjQuNC9nY2MvZG9jL2ludm9rZS50ZXhpCistLS0gZ2NjLTQuNC40Lm9yaWcvZ2NjL2RvYy9pbnZva2UudGV4aQkyMDEwLTA1LTE2IDE5OjExOjIxLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNC9nY2MvZG9jL2ludm9rZS50ZXhpCTIwMTAtMDUtMTYgMTk6MTE6MzAuMDAwMDAwMDAwICswMjAwCitAQCAtNTQzMiw2ICs1NDMyLDExIEBACisgUGxlYXNlIG5vdGUgdGhlIHdhcm5pbmcgdW5kZXIgQG9wdGlvbnstZmdjc2V9IGFib3V0CisgaW52b2tpbmcgQG9wdGlvbnstTzJ9IG9uIHByb2dyYW1zIHRoYXQgdXNlIGNvbXB1dGVkIGdvdG9zLgorIAorK05PVEU6IEluIEdlbnRvbywgQG9wdGlvbnstRF9GT1JUSUZZX1NPVVJDRT0yfSBpcyBzZXQgYnkgZGVmYXVsdCwgYW5kIGlzCisrYWN0aXZhdGVkIHdoZW4gQG9wdGlvbnstT30gaXMgc2V0IHRvIDIgb3IgaGlnaGVyLiAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwKKytjb21waWxlLXRpbWUgYW5kIHJ1bi10aW1lIGNoZWNrcyBmb3Igc2V2ZXJhbCBsaWJjIGZ1bmN0aW9ucy4gIFRvIGRpc2FibGUsCisrc3BlY2lmeSBlaXRoZXIgQG9wdGlvbnstVV9GT1JUSUZZX1NPVVJDRX0gb3IgQG9wdGlvbnstRF9GT1JUSUZZX1NPVVJDRT0wfS4KKysKKyBAaXRlbSAtTzMKKyBAb3BpbmRleCBPMworIE9wdGltaXplIHlldCBtb3JlLiAgQG9wdGlvbnstTzN9IHR1cm5zIG9uIGFsbCBvcHRpbWl6YXRpb25zIHNwZWNpZmllZAorZGlmZiAtZHVyTiBnY2MtNC40LjQub3JpZy9nY2MvZ2NjLmMgZ2NjLTQuNC40L2djYy9nY2MuYworLS0tIGdjYy00LjQuNC5vcmlnL2djYy9nY2MuYwkyMDEwLTAxLTA5IDAxOjA1OjA2LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNC9nY2MvZ2NjLmMJMjAxMC0wNS0xNiAxOToxMTozMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC04MDcsNiArODA3LDcgQEAKKyAgJXtIfSAlQyAle0QqJlUqJkEqfSAle2kqfSAlWiAlaVwKKyAgJXtmbXVkZmxhcDotRF9NVURGTEFQIC1pbmNsdWRlIG1mLXJ1bnRpbWUuaH1cCisgICV7Zm11ZGZsYXB0aDotRF9NVURGTEFQIC1EX01VREZMQVBUSCAtaW5jbHVkZSBtZi1ydW50aW1lLmh9XAorKyAleyFEX0ZPUlRJRllfU09VUkNFOiV7IURfRk9SVElGWV9TT1VSQ0U9KjoleyFVX0ZPUlRJRllfU09VUkNFOi1EX0ZPUlRJRllfU09VUkNFPTJ9fX1cCisgICV7RXxNfE1NOiVXe28qfX0iOworIAorIC8qIFRoaXMgY29udGFpbnMgY3BwIG9wdGlvbnMgd2hpY2ggYXJlIGNvbW1vbiB3aXRoIGNjMV9vcHRpb25zIGFuZCBhcmUgcGFzc2VkCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzE2MC1uZXRic2Qtc3ltYm9saWMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzE2MC1uZXRic2Qtc3ltYm9saWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZmM2NlNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMTYwLW5ldGJzZC1zeW1ib2xpYy5wYXRjaApAQCAtMCwwICsxLDExIEBACitkaWZmIC1kdXJOIGdjYy00LjQuNC5vcmlnL2djYy9jb25maWcvbmV0YnNkLWVsZi5oIGdjYy00LjQuNC9nY2MvY29uZmlnL25ldGJzZC1lbGYuaAorLS0tIGdjYy00LjQuNC5vcmlnL2djYy9jb25maWcvbmV0YnNkLWVsZi5oCTIwMDctMDktMDMgMTg6MTQ6MDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC40L2djYy9jb25maWcvbmV0YnNkLWVsZi5oCTIwMTAtMDUtMTYgMTk6MTE6NTAuMDAwMDAwMDAwICswMjAwCitAQCAtODIsNiArODIsNyBAQAorICNkZWZpbmUgTkVUQlNEX0xJTktfU1BFQ19FTEYgXAorICAgIiV7YXNzZXJ0Kn0gJXtSKn0gJXtycGF0aCp9IFwKKyAgICAle3NoYXJlZDotc2hhcmVkfSBcCisrICAgJXtzeW1ib2xpYzotQnN5bWJvbGljfSBcCisgICAgJXshc2hhcmVkOiBcCisgICAgICAtZGMgLWRwIFwKKyAgICAgICV7IW5vc3RkbGliOiBcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzE3MC1zcGFyYzY0LWJzZC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMTcwLXNwYXJjNjQtYnNkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OWY1MWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzE3MC1zcGFyYzY0LWJzZC5wYXRjaApAQCAtMCwwICsxLDI5IEBACitkaWZmIC1kdXJOIGdjYy00LjQuNC5vcmlnL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oIGdjYy00LjQuNC9nY2MvY29uZmlnL3NwYXJjL2ZyZWVic2QuaAorLS0tIGdjYy00LjQuNC5vcmlnL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oCTIwMDctMDgtMDIgMTI6NDk6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC40L2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oCTIwMTAtMDUtMTYgMTk6MTI6MDAuMDAwMDAwMDAwICswMjAwCitAQCAtMjUsOSArMjUsMjIgQEAKKyAvKiBGcmVlQlNEIG5lZWRzIHRoZSBwbGF0Zm9ybSBuYW1lIChzcGFyYzY0KSBkZWZpbmVkLgorICAgIEVtYWNzIG5lZWRzIHRvIGtub3cgaWYgdGhlIGFyY2ggaXMgNjQgb3IgMzItYml0cy4gICovCisgCistI3VuZGVmICBDUFBfQ1BVNjRfREVGQVVMVF9TUEVDCistI2RlZmluZSBDUFBfQ1BVNjRfREVGQVVMVF9TUEVDIFwKKy0gICItRF9fc3BhcmM2NF9fIC1EX19zcGFyY192OV9fIC1EX19zcGFyY3Y5IC1EX19hcmNoNjRfXyIKKysjdW5kZWYgIEZCU0RfVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMKKysjZGVmaW5lIEZCU0RfVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMoKSAgICAgICAgICAgICAgICAgIFwKKysgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBpZiAoVEFSR0VUX0FSQ0g2NCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjNjRfXyIpOyAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjX3Y5X18iKTsgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjdjkiKTsgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19zcGFyYyIpOyAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBidWlsdGluX2RlZmluZSAoIl9fc3BhcmNfXyIpOyAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHdoaWxlICgwKQorKworIAorICNkZWZpbmUgTElOS19TUEVDICIlKGxpbmtfYXJjaCkJCQkJCQlcCisgICAleyFtbm8tcmVsYXg6JXshcjotcmVsYXh9fQkJCQkJCVwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMTgwLWxpYmdvbXAtbm8td2Vycm9yLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC8xODAtbGliZ29tcC1uby13ZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFmYmY1NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMTgwLWxpYmdvbXAtbm8td2Vycm9yLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC40Lm9yaWcvbGliZ29tcC9jb25maWd1cmUgZ2NjLTQuNC40L2xpYmdvbXAvY29uZmlndXJlCistLS0gZ2NjLTQuNC40Lm9yaWcvbGliZ29tcC9jb25maWd1cmUJMjAxMC0wNC0yOSAxMDoyNjo1NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjQvbGliZ29tcC9jb25maWd1cmUJMjAxMC0wNS0xNiAxOToxMjoxOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMzM0LDcgKzMzMzQsNyBAQAorIAorICMgQWRkIC1XYWxsIC1XZXJyb3IgaWYgd2UgYXJlIHVzaW5nIEdDQy4KKyBpZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyI7IHRoZW4KKy0gIFhDRkxBR1M9IiRYQ0ZMQUdTIC1XYWxsIC1XZXJyb3IiCisrICBYQ0ZMQUdTPSIkWENGTEFHUyAtV2FsbCIKKyBmaQorIAorICMgRmluZCBvdGhlciBwcm9ncmFtcyB3ZSBuZWVkLgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC8xOTAtZmxhdHRlbi1zd2l0Y2gtc3RtdC0wMC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMTkwLWZsYXR0ZW4tc3dpdGNoLXN0bXQtMDAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNiODA2MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMTkwLWZsYXR0ZW4tc3dpdGNoLXN0bXQtMDAucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjQub3JpZy9nY2Mvc3RtdC5jIGdjYy00LjQuNC9nY2Mvc3RtdC5jCistLS0gZ2NjLTQuNC40Lm9yaWcvZ2NjL3N0bXQuYwkyMDEwLTAzLTA4IDEyOjQ2OjI4LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNC9nY2Mvc3RtdC5jCTIwMTAtMDUtMTYgMTk6MTI6MzEuMDAwMDAwMDAwICswMjAwCitAQCAtMjM3Nyw3ICsyMzc3LDExIEBACisgCSAgdXNlX2Nvc3RfdGFibGUKKyAJICAgID0gKFRSRUVfQ09ERSAob3JpZ190eXBlKSAhPSBFTlVNRVJBTF9UWVBFCisgCSAgICAgICAmJiBlc3RpbWF0ZV9jYXNlX2Nvc3RzIChjYXNlX2xpc3QpKTsKKy0JICBiYWxhbmNlX2Nhc2Vfbm9kZXMgKCZjYXNlX2xpc3QsIE5VTEwpOworKwkgIC8qIFdoZW4gb3B0aW1pemluZyBmb3Igc2l6ZSwgd2Ugd2FudCBhIHN0cmFpZ2h0IGxpc3QgdG8gYXZvaWQKKysJICAgICBqdW1wcyBhcyBtdWNoIGFzIHBvc3NpYmxlLiBUaGlzIGJhc2ljYWxseSBjcmVhdGVzIGFuIGlmLWVsc2UKKysJICAgICBjaGFpbi4gICovCisrCSAgaWYgKCFvcHRpbWl6ZV9zaXplKQorKwkgICAgYmFsYW5jZV9jYXNlX25vZGVzICgmY2FzZV9saXN0LCBOVUxMKTsKKyAJICBlbWl0X2Nhc2Vfbm9kZXMgKGluZGV4LCBjYXNlX2xpc3QsIGRlZmF1bHRfbGFiZWwsIGluZGV4X3R5cGUpOworIAkgIGlmIChkZWZhdWx0X2xhYmVsKQorIAkgICAgZW1pdF9qdW1wIChkZWZhdWx0X2xhYmVsKTsKK0BAIC0yOTQzLDYgKzI5NDcsNyBAQAorIAkgICAgeworIAkgICAgICBpZiAoIW5vZGVfaGFzX2xvd19ib3VuZCAobm9kZSwgaW5kZXhfdHlwZSkpCisgCQl7CisrCQkgIGlmICghb3B0aW1pemVfc2l6ZSkgLyogZG9uJ3QgamwgdG8gdGhlIC5kZWZhdWx0X2xhYmVsLiAqLworIAkJICBlbWl0X2NtcF9hbmRfanVtcF9pbnNucyAoaW5kZXgsCisgCQkJCQkgICBjb252ZXJ0X21vZGVzCisgCQkJCQkgICAobW9kZSwgaW1vZGUsCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzIwMC1saWJpYmVydHkuaC1hc3ByaW50Zi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMjAwLWxpYmliZXJ0eS5oLWFzcHJpbnRmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNGZlMWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzIwMC1saWJpYmVydHkuaC1hc3ByaW50Zi5wYXRjaApAQCAtMCwwICsxLDE1IEBACitkaWZmIC1kdXJOIGdjYy00LjQuNC5vcmlnL2luY2x1ZGUvbGliaWJlcnR5LmggZ2NjLTQuNC40L2luY2x1ZGUvbGliaWJlcnR5LmgKKy0tLSBnY2MtNC40LjQub3JpZy9pbmNsdWRlL2xpYmliZXJ0eS5oCTIwMDgtMDYtMjQgMDM6NDI6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC40L2luY2x1ZGUvbGliaWJlcnR5LmgJMjAxMC0wNS0xNiAxOToxMjo1MC4wMDAwMDAwMDAgKzAyMDAKK0BAIC01OTUsOCArNTk1LDExIEBACisgLyogTGlrZSBzcHJpbnRmIGJ1dCBwcm92aWRlcyBhIHBvaW50ZXIgdG8gbWFsbG9jJ2Qgc3RvcmFnZSwgd2hpY2ggbXVzdAorICAgIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuICAqLworIAorKy8qIGFzcHJpbnRmIG1heSBiZSBkZWNsYXJlZCBhcyBhIG1hY3JvIGJ5IGdsaWJjIHdpdGggX19VU0VfRk9SVElGWV9MRVZFTC4gICovCisrI2lmbmRlZiBhc3ByaW50ZgorIGV4dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgLi4uKSBBVFRSSUJVVEVfUFJJTlRGXzI7CisgI2VuZGlmCisrI2VuZGlmCisgCisgI2lmICFIQVZFX0RFQ0xfVkFTUFJJTlRGCisgLyogTGlrZSB2c3ByaW50ZiBidXQgcHJvdmlkZXMgYSBwb2ludGVyIHRvIG1hbGxvYydkIHN0b3JhZ2UsIHdoaWNoCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzIxMC1hcm0tdW5icmVhay1hcm12NHQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzIxMC1hcm0tdW5icmVhay1hcm12NHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYwYjRiYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMjEwLWFybS11bmJyZWFrLWFybXY0dC5wYXRjaApAQCAtMCwwICsxLDEyIEBACitkaWZmIC1kdXJOIGdjYy00LjQuNC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCBnY2MtNC40LjQvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCistLS0gZ2NjLTQuNC40Lm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCTIwMDctMTEtMDggMTQ6NDQ6MDkuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC40L2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAkyMDEwLTA1LTE2IDE5OjEzOjAwLjAwMDAwMDAwMCArMDIwMAorQEAgLTQ0LDcgKzQ0LDcgQEAKKyAgICBUaGUgQVJNMTBURE1JIGNvcmUgaXMgdGhlIGRlZmF1bHQgZm9yIGFybXY1dCwgc28gc2V0CisgICAgU1VCVEFSR0VUX0NQVV9ERUZBVUxUIHRvIGFjaGlldmUgdGhpcy4gICovCisgI3VuZGVmICBTVUJUQVJHRVRfQ1BVX0RFRkFVTFQKKy0jZGVmaW5lIFNVQlRBUkdFVF9DUFVfREVGQVVMVCBUQVJHRVRfQ1BVX2FybTEwdGRtaQorKyNkZWZpbmUgU1VCVEFSR0VUX0NQVV9ERUZBVUxUIFRBUkdFVF9DUFVfYXJtOXRkbWkKKyAKKyAvKiBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUIGlzIHNldCBpbgorICAgIGNvbmZpZy5nY2MgZm9yIGJpZyBlbmRpYW4gY29uZmlndXJhdGlvbnMuICAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC8yMjAtbGliaWJlcnR5LXBpYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMjIwLWxpYmliZXJ0eS1waWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEyOTFiYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMjIwLWxpYmliZXJ0eS1waWMucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjQub3JpZy9saWJpYmVydHkvTWFrZWZpbGUuaW4gZ2NjLTQuNC40L2xpYmliZXJ0eS9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjQuNC5vcmlnL2xpYmliZXJ0eS9NYWtlZmlsZS5pbgkyMDA4LTEwLTIyIDE1OjMwOjE5LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNC9saWJpYmVydHkvTWFrZWZpbGUuaW4JMjAxMC0wNS0xNiAxOToxMzoyMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMjcsNiArMjI3LDcgQEAKKyAJICAkKEFSKSAkKEFSX0ZMQUdTKSAkKFRBUkdFVExJQikgXAorIAkgICAgJChSRVFVSVJFRF9PRklMRVMpICQoRVhUUkFfT0ZJTEVTKSAkKExJQk9CSlMpOyBcCisgCSAgJChSQU5MSUIpICQoVEFSR0VUTElCKTsgXAorKwkgIGNwICQoVEFSR0VUTElCKSAuLi8gOyBcCisgCSAgY2QgLi47IFwKKyAJZWxzZSB0cnVlOyBmaQorIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC8yMzAtc3VwZXJoLWRlZmF1bHQtbXVsdGlsaWIucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzIzMC1zdXBlcmgtZGVmYXVsdC1tdWx0aWxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjMxYzc3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC8yMzAtc3VwZXJoLWRlZmF1bHQtbXVsdGlsaWIucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjQub3JpZy9nY2MvY29uZmlnLmdjYyBnY2MtNC40LjQvZ2NjL2NvbmZpZy5nY2MKKy0tLSBnY2MtNC40LjQub3JpZy9nY2MvY29uZmlnLmdjYwkyMDEwLTAyLTE4IDA1OjI0OjA0LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNC9nY2MvY29uZmlnLmdjYwkyMDEwLTA1LTE2IDE5OjEzOjMwLjAwMDAwMDAwMCArMDIwMAorQEAgLTIxMjgsNyArMjEyOCw3IEBACisgCWlmIHRlc3QgeCR7c2hfbXVsdGlsaWJzfSA9IHggOyB0aGVuCisgCQljYXNlICR7dGFyZ2V0fSBpbgorIAkJc2g2NC1zdXBlcmgtbGludXgqIHwgXAorLQkJc2hbMTIzNF0qKQlzaF9tdWx0aWxpYnM9JHtzaF9jcHVfdGFyZ2V0fSA7OworKwkJc2hbMTIzNF0qKQlzaF9tdWx0aWxpYnM9YGNkICR7c3JjZGlyfS9jb25maWcvc2ggOyBlY2hvIHQtbWxpYi1zaFsxLTRdKiB8IHNlZCAnczp0LW1saWItc2g6LG06ZztzOiA6OmcnYCA7OworIAkJc2g2NCogfCBzaDUqKQlzaF9tdWx0aWxpYnM9bTUtMzJtZWRpYSxtNS0zMm1lZGlhLW5vZnB1LG01LWNvbXBhY3QsbTUtY29tcGFjdC1ub2ZwdSxtNS02NG1lZGlhLG01LTY0bWVkaWEtbm9mcHUgOzsKKyAJCXNoLXN1cGVyaC0qKQlzaF9tdWx0aWxpYnM9bTQsbTQtc2luZ2xlLG00LXNpbmdsZS1vbmx5LG00LW5vZnB1IDs7CisgCQlzaCotKi1saW51eCopCXNoX211bHRpbGlicz1tMSxtM2UsbTQgOzsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMjQwLWxpYnN0ZGMrKy1waWMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzI0MC1saWJzdGRjKystcGljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NmQ2MjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzI0MC1saWJzdGRjKystcGljLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC40Lm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbSBnY2MtNC40LjQvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQorLS0tIGdjYy00LjQuNC5vcmlnL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuYW0JMjAwOS0wOC0yNiAyMTowNDoxMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjQvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQkyMDEwLTA1LTE2IDE5OjEzOjUwLjAwMDAwMDAwMCArMDIwMAorQEAgLTM1Niw2ICszNTYsMTMgQEAKKyAJICAkKE9QVF9MREZMQUdTKSAkKFNFQ1RJT05fTERGTEFHUykgJChBTV9DWFhGTEFHUykgJChMVExERkxBR1MpIC1vICRACisgCisgCisraW5zdGFsbC1leGVjLWxvY2FsOgorKwlwaWNfb2Jqcz1gc2VkIC1uICJzOic6Omc7czpecGljX29iamVjdD06OnAiICoubG8gfCBncmVwIC12ICdebm9uZSQkJ2A7IFwKKysJaWYgWyB4IiQkcGljX29ianMiICE9IHggXTsgdGhlbiBcCisrCQkkKEFSKSBjcnUgbGlic3RkYysrX3BpYy5hICQkcGljX29ianMgJCh0b3BfYnVpbGRkaXIpL2xpYnN1cGMrKy8qLm8gfHwgZXhpdCAxOyBcCisrCQkkKElOU1RBTExfREFUQSkgbGlic3RkYysrX3BpYy5hICQoREVTVERJUikkKHRvb2xleGVjbGliZGlyKSB8fCBleGl0IDE7IFwKKysJZmkKKysKKyAjIEFkZGVkIGJpdHMgdG8gYnVpbGQgZGVidWcgbGlicmFyeS4KKyBpZiBHTElCQ1hYX0JVSUxEX0RFQlVHCisgYWxsLWxvY2FsOiBidWlsZF9kZWJ1ZworZGlmZiAtZHVyTiBnY2MtNC40LjQub3JpZy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluIGdjYy00LjQuNC9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCistLS0gZ2NjLTQuNC40Lm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgkyMDA5LTA4LTI2IDIxOjA0OjExLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNC9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCTIwMTAtMDUtMTYgMTk6MTM6NTAuMDAwMDAwMDAwICswMjAwCitAQCAtNzI2LDcgKzcyNiw3IEBACisgCisgaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWRhdGEtbG9jYWwKKyAKKy1pbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUworK2luc3RhbGwtZXhlYy1hbTogaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTIGluc3RhbGwtZXhlYy1sb2NhbAorIAorIGluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisgCitAQCAtNzY1LDcgKzc2NSw3IEBACisgCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKyAJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorIAl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWluZm8tYW0gXAorLQl1bmluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUworKwl1bmluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUyBpbnN0YWxsLWV4ZWMtbG9jYWwKKyAKKyAKKyAjIFN5bWJvbCB2ZXJzaW9uaW5nIGZvciBzaGFyZWQgbGlicmFyaWVzLgorQEAgLTk0Nyw2ICs5NDcsMTQgQEAKKyBpbnN0YWxsX2RlYnVnOgorIAkoY2QgJHtkZWJ1Z2Rpcn0gJiYgJChNQUtFKSBcCisgCXRvb2xleGVjbGliZGlyPSQoZ2xpYmN4eF90b29sZXhlY2xpYmRpcikvZGVidWcgaW5zdGFsbCkKKysKKytpbnN0YWxsLWV4ZWMtbG9jYWw6CisrCXBpY19vYmpzPWBzZWQgLW4gInM6Jzo6ZztzOl5waWNfb2JqZWN0PTo6cCIgKi5sbyB8IGdyZXAgLXYgJ15ub25lJCQnYDsgXAorKwlpZiBbIHgiJCRwaWNfb2JqcyIgIT0geCBdOyB0aGVuIFwKKysJCSQoQVIpIGNydSBsaWJzdGRjKytfcGljLmEgJCRwaWNfb2JqcyAkKHRvcF9idWlsZGRpcikvbGlic3VwYysrLyoubyB8fCBleGl0IDE7IFwKKysJCSQoSU5TVEFMTF9EQVRBKSBsaWJzdGRjKytfcGljLmEgJChERVNURElSKSQodG9vbGV4ZWNsaWJkaXIpIHx8IGV4aXQgMTsgXAorKwlmaQorKworICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisgIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisgLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC8yNTAtaWE2NC1ub3RlR05Vc3RhY2sucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzI1MC1pYTY0LW5vdGVHTlVzdGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTFiZmU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC8yNTAtaWE2NC1ub3RlR05Vc3RhY2sucGF0Y2gKQEAgLTAsMCArMSw3OSBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjQub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtIGdjYy00LjQuNC9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtCistLS0gZ2NjLTQuNC40Lm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGJlZ2luLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNC9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtCTIwMTAtMDUtMTYgMTk6MTM6NTkuMDAwMDAwMDAwICswMjAwCitAQCAtMjUyLDMgKzI1Miw3IEBACisgLndlYWsgX19jeGFfZmluYWxpemUKKyAjZW5kaWYKKyAud2VhayBfSnZfUmVnaXN0ZXJDbGFzc2VzCisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjQuNC5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtIGdjYy00LjQuNC9nY2MvY29uZmlnL2lhNjQvY3J0ZW5kLmFzbQorLS0tIGdjYy00LjQuNC5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC40L2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtCTIwMTAtMDUtMTYgMTk6MTM6NTkuMDAwMDAwMDAwICswMjAwCitAQCAtMTE5LDMgKzExOSw3IEBACisgCisgCWJyLnJldC5zcHRrLm1hbnkgcnAKKyAJLmVuZHAgX19kb19nbG9iYWxfY3RvcnNfYXV4CisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjQuNC5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRpLmFzbSBnY2MtNC40LjQvZ2NjL2NvbmZpZy9pYTY0L2NydGkuYXNtCistLS0gZ2NjLTQuNC40Lm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGkuYXNtCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC40L2djYy9jb25maWcvaWE2NC9jcnRpLmFzbQkyMDEwLTA1LTE2IDE5OjEzOjU5LjAwMDAwMDAwMCArMDIwMAorQEAgLTUxLDMgKzUxLDcgQEAKKyAJLmJvZHkKKyAKKyAjIGVuZCBvZiBjcnRpLmFzbQorKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC40LjQub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0bi5hc20gZ2NjLTQuNC40L2djYy9jb25maWcvaWE2NC9jcnRuLmFzbQorLS0tIGdjYy00LjQuNC5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRuLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNC9nY2MvY29uZmlnL2lhNjQvY3J0bi5hc20JMjAxMC0wNS0xNiAxOToxMzo1OS4wMDAwMDAwMDAgKzAyMDAKK0BAIC00MSwzICs0MSw3IEBACisgCWJyLnJldC5zcHRrLm1hbnkgYjAKKyAKKyAjIGVuZCBvZiBjcnRuLmFzbQorKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC40LjQub3JpZy9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbSBnY2MtNC40LjQvZ2NjL2NvbmZpZy9pYTY0L2xpYjFmdW5jcy5hc20KKy0tLSBnY2MtNC40LjQub3JpZy9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNC9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbQkyMDEwLTA1LTE2IDE5OjEzOjU5LjAwMDAwMDAwMCArMDIwMAorQEAgLTc5MywzICs3OTMsNyBAQAorIAkuZW5kcCBfX2Zsb2F0dGl0ZgorICNlbmRpZgorICNlbmRpZgorKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC40LjQub3JpZy9nY2MvY29uZmlnL2lhNjQvbGludXguaCBnY2MtNC40LjQvZ2NjL2NvbmZpZy9pYTY0L2xpbnV4LmgKKy0tLSBnY2MtNC40LjQub3JpZy9nY2MvY29uZmlnL2lhNjQvbGludXguaAkyMDA5LTAyLTEyIDE3OjMwOjUzLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNC9nY2MvY29uZmlnL2lhNjQvbGludXguaAkyMDEwLTA1LTE2IDE5OjEzOjU5LjAwMDAwMDAwMCArMDIwMAorQEAgLTUsNiArNSw4IEBACisgCisgI2RlZmluZSBUQVJHRVRfVkVSU0lPTiBmcHJpbnRmIChzdGRlcnIsICIgKElBLTY0KSBMaW51eCIpOworIAorKyNkZWZpbmUgVEFSR0VUX0FTTV9GSUxFX0VORCBmaWxlX2VuZF9pbmRpY2F0ZV9leGVjX3N0YWNrCisrCisgLyogVGhpcyBpcyBmb3IgLXByb2ZpbGUgdG8gdXNlIC1sY19wIGluc3RlYWQgb2YgLWxjLiAgKi8KKyAjdW5kZWYgQ0MxX1NQRUMKKyAjZGVmaW5lIENDMV9TUEVDICIle3Byb2ZpbGU6LXB9ICV7Ryp9IgorZGlmZiAtZHVyTiBnY2MtNC40LjQub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9wcGMtYXNtLmggZ2NjLTQuNC40L2djYy9jb25maWcvcnM2MDAwL3BwYy1hc20uaAorLS0tIGdjYy00LjQuNC5vcmlnL2djYy9jb25maWcvcnM2MDAwL3BwYy1hc20uaAkyMDA4LTEwLTEzIDE3OjQ0OjI2LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNC9nY2MvY29uZmlnL3JzNjAwMC9wcGMtYXNtLmgJMjAxMC0wNS0xNiAxOToxMzo1OS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNzIsNyArMTcyLDcgQEAKKyAJLnNpemUgRlVOQ19OQU1FKG5hbWUpLEdMVUUoLkwsbmFtZSktRlVOQ19OQU1FKG5hbWUpCisgI2VuZGlmCisgCistI2lmIGRlZmluZWQgX19saW51eF9fICYmICFkZWZpbmVkIF9fcG93ZXJwYzY0X18KKysjaWYgZGVmaW5lZCBfX2xpbnV4X18KKyAJLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrCisgCS5wcmV2aW91cworICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC8yNjAtc2gtbGliZ2NjLXN0YWNrcy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMjYwLXNoLWxpYmdjYy1zdGFja3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMyNmIxYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMjYwLXNoLWxpYmdjYy1zdGFja3MucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjQub3JpZy9nY2MvY29uZmlnL3NoL2xpYjFmdW5jcy5hc20gZ2NjLTQuNC40L2djYy9jb25maWcvc2gvbGliMWZ1bmNzLmFzbQorLS0tIGdjYy00LjQuNC5vcmlnL2djYy9jb25maWcvc2gvbGliMWZ1bmNzLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNC9nY2MvY29uZmlnL3NoL2xpYjFmdW5jcy5hc20JMjAxMC0wNS0xNiAxOToxNDoxOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMCw2ICszMCwxMSBAQAorICEhIHJlY29kZWQgaW4gYXNzZW1ibHkgYnkgVG9zaGl5YXN1IE1vcml0YQorICEhIHRtQG5ldGNvbS5jb20KKyAKKysjaWYgZGVmaW5lZChfX0VMRl9fKSAmJiBkZWZpbmVkKF9fbGludXhfXykKKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2ssIiIsJXByb2diaXRzCisrLnByZXZpb3VzCisrI2VuZGlmCisrCisgLyogU0gyIG9wdGltaXphdGlvbnMgZm9yIF9fX2FzaHJzaTMsIF9fX2FzaGxzaTMsIF9fX2xzaHJzaTMgYW5kCisgICAgRUxGIGxvY2FsIGxhYmVsIHByZWZpeGVzIGJ5IEoib3JuIFJlbm5lY2tlCisgICAgYW15bGFhckBjeWdudXMuY29tICAqLworZGlmZiAtZHVyTiBnY2MtNC40LjQub3JpZy9nY2MvY29uZmlnL3NoL2xpbnV4LWF0b21pYy5hc20gZ2NjLTQuNC40L2djYy9jb25maWcvc2gvbGludXgtYXRvbWljLmFzbQorLS0tIGdjYy00LjQuNC5vcmlnL2djYy9jb25maWcvc2gvbGludXgtYXRvbWljLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNC9nY2MvY29uZmlnL3NoL2xpbnV4LWF0b21pYy5hc20JMjAxMC0wNS0xNiAxOToxNDoxOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMzYsMyArMTM2LDYgQEAKKyBBVE9NSUNfRkVUQ0hfQU5EX0NPTUJPUChuYW5kLGFuZCxub3QsNCxsLG1vdikKKyAKKyAjZW5kaWYgLyogISBfX1NINV9fICovCisrCisrLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrLCIiLCVwcm9nYml0cworKy5wcmV2aW91cwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC8yNzAtc2gtcHIyNDgzNi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMjcwLXNoLXByMjQ4MzYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUzNzcyMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMjcwLXNoLXByMjQ4MzYucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjQub3JpZy9nY2MvY29uZmlndXJlIGdjYy00LjQuNC9nY2MvY29uZmlndXJlCistLS0gZ2NjLTQuNC40Lm9yaWcvZ2NjL2NvbmZpZ3VyZQkyMDEwLTA1LTE2IDE5OjExOjAwLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNC9nY2MvY29uZmlndXJlCTIwMTAtMDUtMTYgMTk6MTQ6MzEuMDAwMDAwMDAwICswMjAwCitAQCAtMjIyNDEsNyArMjIyNDEsNyBAQAorIAl0bHNfZmlyc3RfbWlub3I9MTQKKyAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCisgCTs7CistICBzaC0qLSogfCBzaFszNF0tKi0qKQorKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCisgICAgIGNvbmZ0ZXN0X3M9JworIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKKyBmb286CS5sb25nCTI1CitkaWZmIC1kdXJOIGdjYy00LjQuNC5vcmlnL2djYy9jb25maWd1cmUuYWMgZ2NjLTQuNC40L2djYy9jb25maWd1cmUuYWMKKy0tLSBnY2MtNC40LjQub3JpZy9nY2MvY29uZmlndXJlLmFjCTIwMTAtMDUtMTYgMTk6MTE6MDAuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC40L2djYy9jb25maWd1cmUuYWMJMjAxMC0wNS0xNiAxOToxNDozMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNjg0LDcgKzI2ODQsNyBAQAorIAl0bHNfZmlyc3RfbWlub3I9MTQKKyAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCisgCTs7CistICBzaC0qLSogfCBzaFszNF0tKi0qKQorKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCisgICAgIGNvbmZ0ZXN0X3M9JworIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKKyBmb286CS5sb25nCTI1CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzI4MC1mcmVlYnNkLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC8yODAtZnJlZWJzZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTdmNjNiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC8yODAtZnJlZWJzZC5wYXRjaApAQCAtMCwwICsxLDk0IEBACitkaWZmIC1kdXJOIGdjYy00LjQuNC5vcmlnL2djYy9jb25maWcvZnJlZWJzZC1zcGVjLmggZ2NjLTQuNC40L2djYy9jb25maWcvZnJlZWJzZC1zcGVjLmgKKy0tLSBnY2MtNC40LjQub3JpZy9nY2MvY29uZmlnL2ZyZWVic2Qtc3BlYy5oCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC40L2djYy9jb25maWcvZnJlZWJzZC1zcGVjLmgJMjAxMC0wNS0xNiAxOTozNjoxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC02MSw2ICs2MSw4IEBACisgCWJ1aWx0aW5fYXNzZXJ0ICgic3lzdGVtPXVuaXgiKTsJCQkJCVwKKyAJYnVpbHRpbl9hc3NlcnQgKCJzeXN0ZW09YnNkIik7CQkJCQlcCisgCWJ1aWx0aW5fYXNzZXJ0ICgic3lzdGVtPUZyZWVCU0QiKTsJCQkJXAorKwlpZighKGZsYWdfaXNvICYmIChjX2RpYWxlY3RfY3h4ICgpID8gY3h4X2RpYWxlY3QgPT0gY3h4OTggOiAhZmxhZ19pc29jOTkpKSkJXAorKwkJYnVpbHRpbl9kZWZpbmUoIl9MT05HTE9ORyIpOwkJCQlcCisgCUZCU0RfVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMoKTsJCQkJCVwKKyAgICAgfQkJCQkJCQkJCVwKKyAgIHdoaWxlICgwKQorZGlmZiAtZHVyTiBnY2MtNC40LjQub3JpZy9nY2MvY29uZmlnL3QtZnJlZWJzZC1laCBnY2MtNC40LjQvZ2NjL2NvbmZpZy90LWZyZWVic2QtZWgKKy0tLSBnY2MtNC40LjQub3JpZy9nY2MvY29uZmlnL3QtZnJlZWJzZC1laAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNC9nY2MvY29uZmlnL3QtZnJlZWJzZC1laAkyMDEwLTA1LTE2IDE5OjM2OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw0IEBACisrIyBVc2UgdW53aW5kLWR3Mi1mZGUtZ2xpYmMKKytMSUIyQURERUggPSAkKHNyY2RpcikvdW53aW5kLWR3Mi5jICQoc3JjZGlyKS91bndpbmQtZHcyLWZkZS1nbGliYy5jIFwKKysgICQoc3JjZGlyKS91bndpbmQtc2psai5jICQoc3JjZGlyKS9ndGhyLWduYXQuYyAkKHNyY2RpcikvdW53aW5kLWMuYworK0xJQjJBRERFSERFUCA9IHVud2luZC5pbmMgdW53aW5kLWR3Mi1mZGUuaCB1bndpbmQtZHcyLWZkZS5jCitkaWZmIC1kdXJOIGdjYy00LjQuNC5vcmlnL2djYy9jb25maWcuZ2NjIGdjYy00LjQuNC9nY2MvY29uZmlnLmdjYworLS0tIGdjYy00LjQuNC5vcmlnL2djYy9jb25maWcuZ2NjCTIwMTAtMDUtMTYgMTk6MTM6MzAuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC40L2djYy9jb25maWcuZ2NjCTIwMTAtMDUtMTYgMTk6MzY6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtNDU2LDcgKzQ1Niw3IEBACisgICAjIHBsZWFzZXMgYXJvdW5kIHRoZSBwcm92aWRlZCBjb3JlIHNldHRpbmcuCisgICBnYXM9eWVzCisgICBnbnVfbGQ9eWVzCistICBleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBjcnRlbmQubyBjcnRiZWdpblMubyBjcnRlbmRTLm8iCisrICBleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBjcnRlbmQubyBjcnRiZWdpblMubyBjcnRlbmRTLm8gY3J0YmVnaW5ULm8iCisgICBmYnNkX21ham9yPWBlY2hvICR7dGFyZ2V0fSB8IHNlZCAtZSAncy8uKmZyZWVic2QvL2cnIHwgc2VkIC1lICdzL1wuLiovL2cnYAorICAgdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBGQlNEX01BSk9SPSR7ZmJzZF9tYWpvcn0iCisgICB0bWFrZV9maWxlPSJ0LXNsaWJnY2MtZWxmLXZlciB0LWZyZWVic2QiCitAQCAtMTA0Miw2ICsxMDQyLDEwIEBACisgCTs7CisgaVszNDU2N104Ni0qLWZyZWVic2QqKQorIAl0bV9maWxlPSIke3RtX2ZpbGV9IGkzODYvdW5peC5oIGkzODYvYXR0LmggZGJ4ZWxmLmggZWxmb3MuaCAke2Zic2RfdG1fZmlsZX0gaTM4Ni9mcmVlYnNkLmgiCisrCWZic2RfbWFqb3I9YGVjaG8gJHt0YXJnZXR9IHwgc2VkIC1lICdzLy4qZnJlZWJzZC8vZycgfCBzZWQgLWUgJ3MvXC4uKi8vZydgCisrCWlmIHRlc3QgJHtmYnNkX21ham9yfSAtZ2UgNzsgdGhlbgorKwkJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSB0LWZyZWVic2QtZWgiCisrCWZpCisgCTs7CisgeDg2XzY0LSotZnJlZWJzZCopCisgCXRtX2ZpbGU9IiR7dG1fZmlsZX0gaTM4Ni91bml4LmggaTM4Ni9hdHQuaCBkYnhlbGYuaCBlbGZvcy5oICR7ZmJzZF90bV9maWxlfSBpMzg2L3g4Ni02NC5oIGkzODYvZnJlZWJzZC5oIGkzODYvZnJlZWJzZDY0LmgiCitkaWZmIC1kdXJOIGdjYy00LjQuNC5vcmlnL2djYy9jcnRzdHVmZi5jIGdjYy00LjQuNC9nY2MvY3J0c3R1ZmYuYworLS0tIGdjYy00LjQuNC5vcmlnL2djYy9jcnRzdHVmZi5jCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC40L2djYy9jcnRzdHVmZi5jCTIwMTAtMDUtMTYgMTk6MzY6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtODUsMTMgKzg1LDE1IEBACisgICAgICYmICFkZWZpbmVkKE9CSkVDVF9GT1JNQVRfRkxBVCkgXAorICAgICAmJiBkZWZpbmVkKEhBVkVfTERfRUhfRlJBTUVfSERSKSBcCisgICAgICYmICFkZWZpbmVkKGluaGliaXRfbGliYykgJiYgIWRlZmluZWQoQ1JUU1RVRkZUX08pIFwKKy0gICAgJiYgZGVmaW5lZChfX0dMSUJDX18pICYmIF9fR0xJQkNfXyA+PSAyCisrICAgICYmICgoZGVmaW5lZChfX0dMSUJDX18pICYmIF9fR0xJQkNfXyA+PSAyKSBcCisrICAgIHx8IChkZWZpbmVkKF9fRnJlZUJTRF92ZXJzaW9uKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMjIpKQorICNpbmNsdWRlIDxsaW5rLmg+CisgLyogdUNsaWJjIHByZXRlbmRzIHRvIGJlIGdsaWJjIDIuMiBhbmQgRFRfQ09ORklHIGlzIGRlZmluZWQgaW4gaXRzIGxpbmsuaC4KKyAgICBCdXQgaXQgZG9lc24ndCB1c2UgUFRfR05VX0VIX0ZSQU1FIEVMRiBzZWdtZW50IGN1cnJlbnRseS4gICovCisgIyBpZiAhZGVmaW5lZChfX1VDTElCQ19fKSBcCistICAgICAmJiAoX19HTElCQ19fID4gMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID4gMikgXAorLSAgICAgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA9PSAyICYmIGRlZmluZWQoRFRfQ09ORklHKSkpCisrICAgICB8fCAoX19HTElCQ19fID4gMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID4gMikgXAorKyAgICAgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA9PSAyICYmIGRlZmluZWQoRFRfQ09ORklHKSkpIFwKKysgICAgIHx8IChfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMjIpCisgIyAgZGVmaW5lIFVTRV9QVF9HTlVfRUhfRlJBTUUKKyAjIGVuZGlmCisgI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjQuNC5vcmlnL2djYy91bndpbmQtZHcyLWZkZS1nbGliYy5jIGdjYy00LjQuNC9nY2MvdW53aW5kLWR3Mi1mZGUtZ2xpYmMuYworLS0tIGdjYy00LjQuNC5vcmlnL2djYy91bndpbmQtZHcyLWZkZS1nbGliYy5jCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC40L2djYy91bndpbmQtZHcyLWZkZS1nbGliYy5jCTIwMTAtMDUtMTYgMTk6MzY6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtNDYsOCArNDYsOSBAQAorICNpbmNsdWRlICJndGhyLmgiCisgCisgI2lmICFkZWZpbmVkKGluaGliaXRfbGliYykgJiYgZGVmaW5lZChIQVZFX0xEX0VIX0ZSQU1FX0hEUikgXAorLSAgICAmJiAoX19HTElCQ19fID4gMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID4gMikgXAorLQl8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID09IDIgJiYgZGVmaW5lZChEVF9DT05GSUcpKSkKKysgICAgJiYgKChfX0dMSUJDX18gPiAyIHx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPiAyKSBcCisrCXx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPT0gMiAmJiBkZWZpbmVkKERUX0NPTkZJRykpKSBcCisrICAgIHx8IChfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMjIgKSkKKyAKKyAjaWZuZGVmIF9fUkVMT0NfUE9JTlRFUgorICMgZGVmaW5lIF9fUkVMT0NfUE9JTlRFUihwdHIsIGJhc2UpICgocHRyKSArIChiYXNlKSkKK0BAIC02Myw2ICs2NCwxMyBAQAorICNkZWZpbmUgUFRfR05VX0VIX0ZSQU1FIChQVF9MT09TICsgMHg0NzRlNTUwKQorICNlbmRpZgorIAorKy8qIFN1cHBvcnQgRnJlZUJTRCAqLworKyNpZm5kZWYgRWxmVworKyMgaWZkZWYgX19FbGZOCisrIyAgZGVmaW5lIEVsZlcgX19FbGZOCisrIyBlbmRpZgorKyNlbmRpZgorKworIHN0cnVjdCB1bndfZWhfY2FsbGJhY2tfZGF0YQorIHsKKyAgIF9VbndpbmRfUHRyIHBjOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC8yOTAtZnJlZWJzZC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMjkwLWZyZWVic2QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRmYTAzYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMjkwLWZyZWVic2QucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjQub3JpZy9nY2MvY29uZmlnL2ZyZWVic2Qtc3BlYy5oIGdjYy00LjQuNC9nY2MvY29uZmlnL2ZyZWVic2Qtc3BlYy5oCistLS0gZ2NjLTQuNC40Lm9yaWcvZ2NjL2NvbmZpZy9mcmVlYnNkLXNwZWMuaAkyMDEwLTA1LTE2IDE5OjM2OjE1LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNC9nY2MvY29uZmlnL2ZyZWVic2Qtc3BlYy5oCTIwMTAtMDUtMTYgMTk6MzY6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtODYsOSArODYsMTAgQEAKKyAjZGVmaW5lIEZCU0RfU1RBUlRGSUxFX1NQRUMgXAorICAgIiV7IXNoYXJlZDogXAorICAgICAgJXtwZzpnY3J0MS5vJXN9ICV7IXBnOiV7cDpnY3J0MS5vJXN9IFwKKy0JCSAgICAgICAleyFwOiV7cHJvZmlsZTpnY3J0MS5vJXN9IFwKKy0JCQkgJXshcHJvZmlsZTpjcnQxLm8lc319fX0gXAorLSAgIGNydGkubyVzICV7IXNoYXJlZDpjcnRiZWdpbi5vJXN9ICV7c2hhcmVkOmNydGJlZ2luUy5vJXN9IgorKwkleyFwOiV7cHJvZmlsZTpnY3J0MS5vJXN9IFwKKysJICV7IXByb2ZpbGU6Y3J0MS5vJXN9fX19IFwKKysgICBjcnRpLm8lcyBcCisrICAgJXtzdGF0aWM6Y3J0YmVnaW5ULm8lcztzaGFyZWQ6Y3J0YmVnaW5TLm8lczs6Y3J0YmVnaW4ubyVzfSIKKyAKKyAvKiBQcm92aWRlIGEgRU5ERklMRV9TUEVDIGFwcHJvcHJpYXRlIGZvciBGcmVlQlNELiAgSGVyZSB3ZSB0YWNrIG9uCisgICAgdGhlIG1hZ2ljYWwgY3J0ZW5kLm8gZmlsZSAoc2VlIGNydHN0dWZmLmMpIHdoaWNoIHByb3ZpZGVzIHBhcnQgb2YgCitAQCAtMTI2LDcgKzEyNyw4IEBACisgICAgICV7cGc6ICAtbGNfcH0JCQkJCQkJXAorICAgfSIKKyAjZWxzZQorLSNpZiBGQlNEX01BSk9SIDwgNQorKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKysjaWYgX19GcmVlQlNEX3ZlcnNpb24gPCA1MDAwMTYKKyAjZGVmaW5lIEZCU0RfTElCX1NQRUMgIgkJCQkJCQlcCisgICAleyFzaGFyZWQ6CQkJCQkJCQlcCisgICAgICV7IXBnOgkJCQkJCQkJXAorQEAgLTEzNiwxNyArMTM4LDM0IEBACisgICAgICAgJXshcHRocmVhZDotbGNfcH0JCQkJCQkJXAorICAgICAgICV7cHRocmVhZDotbGNfcl9wfX0JCQkJCQlcCisgICB9IgorLSNlbHNlCisrI2VsaWYgX19GcmVlQlNEX3ZlcnNpb24gPCA3MDAwMjIKKyAjZGVmaW5lIEZCU0RfTElCX1NQRUMgIgkJCQkJCQlcCisgICAleyFzaGFyZWQ6CQkJCQkJCQlcCisgICAgICV7IXBnOiAle3B0aHJlYWQ6LWxwdGhyZWFkfSAtbGN9CQkJCQlcCisgICAgICV7cGc6ICAle3B0aHJlYWQ6LWxwdGhyZWFkX3B9IC1sY19wfQkJCQlcCisgICB9IgorKyNlbHNlCisrI2RlZmluZSBGQlNEX0xJQl9TUEVDICIJCQkJCQkJXAorKyAgJXshc2hhcmVkOgkJCQkJCQkJXAorKyAgICAleyFwZzogJXtwdGhyZWFkOi1scHRocmVhZH0gLWxjfQkJCQkJXAorKyAgICAle3BnOiAgJXtwdGhyZWFkOi1scHRocmVhZF9wfSAtbGNfcH19CQkJCVwKKysgICV7c2hhcmVkOgkJCQkJCQkJXAorKyAgICAle3B0aHJlYWQ6LWxwdGhyZWFkfSAtbGN9CQkJCQkJXAorKyAgIgorICNlbmRpZgorICNlbmRpZgorIAorLSNpZiBGQlNEX01BSk9SIDwgNgorKyNpZiBGQlNEX01BSk9SIDwgNQorICNkZWZpbmUgRkJTRF9EWU5BTUlDX0xJTktFUiAiL3Vzci9saWJleGVjL2xkLWVsZi5zby4xIgorICNlbHNlCisgI2RlZmluZSBGQlNEX0RZTkFNSUNfTElOS0VSICIvbGliZXhlYy9sZC1lbGYuc28uMSIKKyAjZW5kaWYKKysKKysjaWYgZGVmaW5lZChIQVZFX0xEX0VIX0ZSQU1FX0hEUikKKysjZGVmaW5lIExJTktfRUhfU1BFQyAiJXshc3RhdGljOi0tZWgtZnJhbWUtaGRyfSAiCisrI2VuZGlmCisrCisrLyogVXNlIC0tYXMtbmVlZGVkIC1sZ2NjX3MgZm9yIGVoIHN1cHBvcnQuICAqLworKyNpZmRlZiBIQVZFX0xEX0FTX05FRURFRAorKyNkZWZpbmUgVVNFX0xEX0FTX05FRURFRCAxCisrI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzMwMC11Y2xpYmMtY29uZi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMzAwLXVjbGliYy1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MThmYTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzMwMC11Y2xpYmMtY29uZi5wYXRjaApAQCAtMCwwICsxLDM1IEBACitkaWZmIC1kdXJOIGdjYy00LjQuNC5vcmlnL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaCBnY2MtNC40LjQvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCistLS0gZ2NjLTQuNC40Lm9yaWcvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC40L2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAkyMDEwLTA1LTE2IDE5OjM2OjM2LjAwMDAwMDAwMCArMDIwMAorQEAgLTEwNiw2ICsxMDYsMTAgQEAKKyAgdGhlbgorICAgbWFrZSBhbGwtZ2RiIGFsbC1kZWphZ251IGFsbC1sZCB8fCBleGl0IDEKKyAgIG1ha2UgaW5zdGFsbC1nZGIgaW5zdGFsbC1kZWphZ251IGluc3RhbGwtbGQgfHwgZXhpdCAxCisrZWxpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIC1hICRIX1JFQUxfVEFSR0VUID0gaTY4Ni1wYy1saW51eC11Y2xpYmMgXQorKyB0aGVuCisrICBtYWtlIGFsbC1nZGIgYWxsLWRlamFnbnUgYWxsLWxkIHx8IGV4aXQgMQorKyAgbWFrZSBpbnN0YWxsLWdkYiBpbnN0YWxsLWRlamFnbnUgaW5zdGFsbC1sZCB8fCBleGl0IDEKKyBlbGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgXSA7IHRoZW4KKyAgIG1ha2UgYm9vdHN0cmFwIHx8IGV4aXQgMQorICAgbWFrZSBpbnN0YWxsIHx8IGV4aXQgMQorZGlmZiAtZHVyTiBnY2MtNC40LjQub3JpZy9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZyBnY2MtNC40LjQvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKKy0tLSBnY2MtNC40LjQub3JpZy9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZwkyMDA3LTA2LTA0IDAxOjE4OjQzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNC9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZwkyMDEwLTA1LTE2IDE5OjM2OjM2LjAwMDAwMDAwMCArMDIwMAorQEAgLTYwMyw3ICs2MDMsNyBAQAorIAorICMgVHJhbnNmb3JtIGxpbnV4KiB0byAqLSotbGludXgtZ251KiwgdG8gc3VwcG9ydCBvbGQgY29uZmlndXJlIHNjcmlwdHMuCisgY2FzZSAkaG9zdF9vcyBpbgorLWxpbnV4LWdudSopIDs7CisrbGludXgtZ251KnxsaW51eC11Y2xpYmMqKSA7OworIGxpbnV4KikgaG9zdD1gZWNobyAkaG9zdCB8IHNlZCAncy9eXCguKi0uKi1saW51eFwpXCguKlwpJC9cMS1nbnVcMi8nYAorIGVzYWMKKyAKK0BAIC0xMjUxLDcgKzEyNTEsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgbmVlZF92ZXJzaW9uPW5vCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzMxMC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzMxMC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU1Y2FiNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMzEwLW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApAQCAtMCwwICsxLDEyIEBACitkaWZmIC1kdXJOIGdjYy00LjQuNC5vcmlnL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCBnY2MtNC40LjQvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCistLS0gZ2NjLTQuNC40Lm9yaWcvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCTIwMDctMDQtMjMgMjM6MTA6MDkuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC40L2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAkyMDEwLTA1LTE2IDE5OjM2OjQ4LjAwMDAwMDAwMCArMDIwMAorQEAgLTUwMyw3ICs1MDMsNyBAQAorICNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX0dMSUJDX18pCisgIyBpbmNsdWRlIDxmZWF0dXJlcy5oPgorICMgaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxIHx8IF9fR0xJQkNfXyA+IDIpIFwKKy0gICAgICYmICFkZWZpbmVkKF9faWE2NF9fKQorKyAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pICYmICFkZWZpbmVkKF9fVUNMSUJDX18pCisgIyAgIGlmbmRlZiBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgICAgZGVmaW5lIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMzIwLWM5OS1zbnByaW50Zi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMzIwLWM5OS1zbnByaW50Zi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzMxNTY0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC8zMjAtYzk5LXNucHJpbnRmLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC40Lm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvY19nbG9iYWwvY3N0ZGlvIGdjYy00LjQuNC9saWJzdGRjKystdjMvaW5jbHVkZS9jX2dsb2JhbC9jc3RkaW8KKy0tLSBnY2MtNC40LjQub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9jX2dsb2JhbC9jc3RkaW8JMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjQvbGlic3RkYysrLXYzL2luY2x1ZGUvY19nbG9iYWwvY3N0ZGlvCTIwMTAtMDUtMTYgMTk6Mzc6MDYuMDAwMDAwMDAwICswMjAwCitAQCAtMTM5LDcgKzEzOSw3IEBACisgCisgX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorIAorLSNpZiBfR0xJQkNYWF9VU0VfQzk5CisrI2lmIF9HTElCQ1hYX1VTRV9DOTkgfHwgZGVmaW5lZCBfX1VDTElCQ19fCisgCisgI3VuZGVmIHNucHJpbnRmCisgI3VuZGVmIHZmc2NhbmYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMzMwLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC8zMzAtbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgzZTE0ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMzMwLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC40Lm9yaWcvbGlibXVkZmxhcC9tZi1ob29rczIuYyBnY2MtNC40LjQvbGlibXVkZmxhcC9tZi1ob29rczIuYworLS0tIGdjYy00LjQuNC5vcmlnL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMJMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjQvbGlibXVkZmxhcC9tZi1ob29rczIuYwkyMDEwLTA1LTE2IDE5OjM3OjE4LjAwMDAwMDAwMCArMDIwMAorQEAgLTQyMSw3ICs0MjEsNyBAQAorIHsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIG4sIF9fTUZfQ0hFQ0tfV1JJVEUsICJiemVybyByZWdpb24iKTsKKy0gIGJ6ZXJvIChzLCBuKTsKKysgIG1lbXNldCAocywgMCwgbik7CisgfQorIAorIAorQEAgLTQzMSw3ICs0MzEsNyBAQAorICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQoc3JjLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY29weSBzcmMiKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChkZXN0LCBuLCBfX01GX0NIRUNLX1dSSVRFLCAiYmNvcHkgZGVzdCIpOworLSAgYmNvcHkgKHNyYywgZGVzdCwgbik7CisrICBtZW1tb3ZlIChkZXN0LCBzcmMsIG4pOworIH0KKyAKKyAKK0BAIC00NDEsNyArNDQxLDcgQEAKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMxLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY21wIDFzdCBhcmciKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzMiwgbiwgX19NRl9DSEVDS19SRUFELCAiYmNtcCAybmQgYXJnIik7CistICByZXR1cm4gYmNtcCAoczEsIHMyLCBuKTsKKysgIHJldHVybiBuID09IDAgPyAwIDogbWVtY21wIChzMSwgczIsIG4pOworIH0KKyAKKyAKK0BAIC00NTAsNyArNDUwLDcgQEAKKyAgIHNpemVfdCBuID0gc3RybGVuIChzKTsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIENMQU1QQUREKG4sIDEpLCBfX01GX0NIRUNLX1JFQUQsICJpbmRleCByZWdpb24iKTsKKy0gIHJldHVybiBpbmRleCAocywgYyk7CisrICByZXR1cm4gc3RyY2hyIChzLCBjKTsKKyB9CisgCisgCitAQCAtNDU5LDcgKzQ1OSw3IEBACisgICBzaXplX3QgbiA9IHN0cmxlbiAocyk7CisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzLCBDTEFNUEFERChuLCAxKSwgX19NRl9DSEVDS19SRUFELCAicmluZGV4IHJlZ2lvbiIpOworLSAgcmV0dXJuIHJpbmRleCAocywgYyk7CisrICByZXR1cm4gc3RycmNociAocywgYyk7CisgfQorIAorIC8qIFhYWDogIHN0cGNweSwgbWVtY2NweSAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC8zNDAtZWNqeC1ob3N0LWNjLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC8zNDAtZWNqeC1ob3N0LWNjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MTRlYjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzM0MC1lY2p4LWhvc3QtY2MucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjQub3JpZy9saWJqYXZhL01ha2VmaWxlLmluIGdjYy00LjQuNC9saWJqYXZhL01ha2VmaWxlLmluCistLS0gZ2NjLTQuNC40Lm9yaWcvbGliamF2YS9NYWtlZmlsZS5pbgkyMDEwLTA0LTI5IDEwOjI2OjU0LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNC9saWJqYXZhL01ha2VmaWxlLmluCTIwMTAtMDUtMTYgMTk6Mzc6MzguMDAwMDAwMDAwICswMjAwCitAQCAtOTI3MCw2ICs5MjcwLDkgQEAKKyBlY2p4JChFWEVFWFQpOiAkKGVjanhfT0JKRUNUUykgJChlY2p4X0RFUEVOREVOQ0lFUykgCisgCUBybSAtZiBlY2p4JChFWEVFWFQpCisgCSQoZWNqeF9MSU5LKSAkKGVjanhfTERGTEFHUykgJChlY2p4X09CSkVDVFMpICQoZWNqeF9MREFERCkgJChMSUJTKQorK2VjanguJChPQkpFWFQpOiAkKGVjanhfU09VUkNFUykKKysJQHJtIC1mIGVjanguJChPQkpFWFQpCisrCSQoQ0NfRk9SX0JVSUxEKSAkKEJVSUxEX0NGTEFHUykgLWMgLW8gJEAgJDwKKyBnYXBwbGV0dmlld2VyJChFWEVFWFQpOiAkKGdhcHBsZXR2aWV3ZXJfT0JKRUNUUykgJChnYXBwbGV0dmlld2VyX0RFUEVOREVOQ0lFUykgCisgCUBybSAtZiBnYXBwbGV0dmlld2VyJChFWEVFWFQpCisgCSQoZ2FwcGxldHZpZXdlcl9MSU5LKSAkKGdhcHBsZXR2aWV3ZXJfTERGTEFHUykgJChnYXBwbGV0dmlld2VyX09CSkVDVFMpICQoZ2FwcGxldHZpZXdlcl9MREFERCkgJChMSUJTKQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC8zNTAtaW5kZXhfbWFjcm8ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzM1MC1pbmRleF9tYWNyby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWMzYzkxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC8zNTAtaW5kZXhfbWFjcm8ucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL3VjbGliYy85MF9hbGxfMzA0LWluZGV4X21hY3JvLnBhdGNoCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuNC40Lm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUgZ2NjLTQuNC40L2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCistLS0gZ2NjLTQuNC40Lm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUJMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjQvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUJMjAxMC0wNS0xNiAxOTozNzo0Ny4wMDAwMDAwMDAgKzAyMDAKK0BAIC01NCw2ICs1NCw5IEBACisgI2luY2x1ZGUgPGJpdHMvZ3Roci5oPgorICNpbmNsdWRlIDx0cjEvZnVuY3Rpb25hbD4KKyAKKysvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCisrI3VuZGVmIGluZGV4CisrCisgIyBpZmRlZiBfX0dDCisgIyAgIGRlZmluZSBfX0dDX0NPTlNUIGNvbnN0CisgIyBlbHNlCitkaWZmIC1kdXJOIGdjYy00LjQuNC5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oIGdjYy00LjQuNC9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAorLS0tIGdjYy00LjQuNC5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC40L2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCTIwMTAtMDUtMTYgMTk6Mzc6NDcuMDAwMDAwMDAwICswMjAwCitAQCAtNDksNiArNDksOSBAQAorICNpbmNsdWRlIDxleHQvbWVtb3J5PiAvLyBGb3IgdW5pbml0aWFsaXplZF9jb3B5X24KKyAjaW5jbHVkZSA8ZXh0L251bWVyaWM+IC8vIEZvciBwb3dlcgorIAorKy8qIGNvcGUgdy8gaW5kZXggZGVmaW5lZCBhcyBtYWNybywgU3VTdjMgcHJvcG9zYWwgKi8KKysjdW5kZWYgaW5kZXgKKysKKyBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorIAorICAgdXNpbmcgc3RkOjpzaXplX3Q7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzM2MC1hcm0tYmlnZW5kaWFuLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC8zNjAtYXJtLWJpZ2VuZGlhbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDIyMzkxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC8zNjAtYXJtLWJpZ2VuZGlhbi5wYXRjaApAQCAtMCwwICsxLDMyIEBACitCeSBMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEB3YW50c3RvZmx5Lm9yZz4KK0FkZHMgc3VwcG9ydCBmb3IgYXJtKmItbGludXgqIGJpZy1lbmRpYW4gQVJNIHRhcmdldHMKKworU2VlIGh0dHA6Ly9nY2MuZ251Lm9yZy9QUjE2MzUwCisKK2RpZmYgLWR1ck4gZ2NjLTQuNC40Lm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmggZ2NjLTQuNC40L2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCistLS0gZ2NjLTQuNC40Lm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgJMjAwOS0wMi0yMCAxNjoyMDozOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC40LjQvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgJMjAxMC0wNS0xNiAxOTozODowNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC01MSw3ICs1MSw3IEBACisgCisgI3VuZGVmICBNVUxUSUxJQl9ERUZBVUxUUworICNkZWZpbmUgTVVMVElMSUJfREVGQVVMVFMgXAorLQl7ICJtYXJtIiwgIm1saXR0bGUtZW5kaWFuIiwgIm1oYXJkLWZsb2F0IiwgIm1uby10aHVtYi1pbnRlcndvcmsiIH0KKysJeyAibWFybSIsIFRBUkdFVF9FTkRJQU5fT1BUSU9OLCAibWhhcmQtZmxvYXQiLCAibW5vLXRodW1iLWludGVyd29yayIgfQorIAorIC8qIE5vdyB3ZSBkZWZpbmUgdGhlIHN0cmluZ3MgdXNlZCB0byBidWlsZCB0aGUgc3BlYyBmaWxlLiAgKi8KKyAjdW5kZWYgIExJQl9TUEVDCitkaWZmIC1kdXJOIGdjYy00LjQuNC5vcmlnL2djYy9jb25maWcuZ2NjIGdjYy00LjQuNC9nY2MvY29uZmlnLmdjYworLS0tIGdjYy00LjQuNC5vcmlnL2djYy9jb25maWcuZ2NjCTIwMTAtMDUtMTYgMTk6MzY6MTUuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC40L2djYy9jb25maWcuZ2NjCTIwMTAtMDUtMTYgMTk6Mzg6MDcuMDAwMDAwMDAwICswMjAwCitAQCAtNzMzLDYgKzczMywxMSBAQAorIAl0bV9maWxlPSJkYnhlbGYuaCBlbGZvcy5oIGFybS91bmtub3duLWVsZi5oIGFybS9lbGYuaCBhcm0vbGludXgtZ2FzLmggYXJtL3VjbGludXgtZWxmLmgiCisgCXRtYWtlX2ZpbGU9ImFybS90LWFybSBhcm0vdC1hcm0tZWxmIgorIAljYXNlICR7dGFyZ2V0fSBpbgorKwlhcm0qYi0qKQorKwkJdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUPTEiCisrCQk7OworKwllc2FjCisrCWNhc2UgJHt0YXJnZXR9IGluCisgCWFybSotKi11Y2xpbnV4KmVhYmkpCisgCSAgICB0bV9maWxlPSIkdG1fZmlsZSBhcm0vYnBhYmkuaCBhcm0vdWNsaW51eC1lYWJpLmgiCisgCSAgICB0bWFrZV9maWxlPSIkdG1ha2VfZmlsZSBhcm0vdC1icGFiaSIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMzcwLWJvb3RzdHJhcC10YXJnZXRfbGliX3BhdGgucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzM3MC1ib290c3RyYXAtdGFyZ2V0X2xpYl9wYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMTdlNjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzM3MC1ib290c3RyYXAtdGFyZ2V0X2xpYl9wYXRoLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0NoYW5nZUxvZzoKKzIwMTAtMDEtMDYgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwlQUiBib290c3RyYXAvNDE4MTgKKwkqIE1ha2VmaWxlLnRwbCAoQkFTRV9UQVJHRVRfRVhQT1JUUyk6IE9ubHkgYWRkIFRBUkdFVF9MSUJfUEFUSAorCXRvICQoUlBBVEhfRU5WVkFSKSBpZiBib290c3RyYXBwaW5nLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKK2RpZmYgLWR1ck4gZ2NjLTQuNC40Lm9yaWcvTWFrZWZpbGUuaW4gZ2NjLTQuNC40L01ha2VmaWxlLmluCistLS0gZ2NjLTQuNC40Lm9yaWcvTWFrZWZpbGUuaW4JMjAwOS0wNC0yNSAwNjoxMDoyOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjQvTWFrZWZpbGUuaW4JMjAxMC0wNS0xNiAxOTozODoxNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNDUsNyArMjQ1LDEwIEBACisgCVNUUklQPSIkKFNUUklQX0ZPUl9UQVJHRVQpIjsgZXhwb3J0IFNUUklQOyBcCisgCVdJTkRSRVM9IiQoV0lORFJFU19GT1JfVEFSR0VUKSI7IGV4cG9ydCBXSU5EUkVTOyBcCisgCVdJTkRNQz0iJChXSU5ETUNfRk9SX1RBUkdFVCkiOyBleHBvcnQgV0lORE1DOyBcCistCSQoUlBBVEhfRU5WVkFSKT1gZWNobyAiJChIT1NUX0xJQl9QQVRIKSQoVEFSR0VUX0xJQl9QQVRIKSQkJChSUEFUSF9FTlZWQVIpIiB8IHNlZCAncyw6OiosOixnO3MsXjoqLCw7cyw6KiQkLCwnYDsgZXhwb3J0ICQoUlBBVEhfRU5WVkFSKTsKKytAaWYgZ2NjLWJvb3RzdHJhcAorKwkkKFJQQVRIX0VOVlZBUik9YGVjaG8gIiQoVEFSR0VUX0xJQl9QQVRIKSQkJChSUEFUSF9FTlZWQVIpIiB8IHNlZCAncyw6OiosOixnO3MsXjoqLCw7cyw6KiQkLCwnYDsgZXhwb3J0ICQoUlBBVEhfRU5WVkFSKTsgXAorK0BlbmRpZiBnY2MtYm9vdHN0cmFwCisrCSQoUlBBVEhfRU5WVkFSKT1gZWNobyAiJChIT1NUX0xJQl9QQVRIKSQkJChSUEFUSF9FTlZWQVIpIiB8IHNlZCAncyw6OiosOixnO3MsXjoqLCw7cyw6KiQkLCwnYDsgZXhwb3J0ICQoUlBBVEhfRU5WVkFSKTsKKyAKKyBSQVdfQ1hYX1RBUkdFVF9FWFBPUlRTID0gXAorIAkkKEJBU0VfVEFSR0VUX0VYUE9SVFMpIFwKK2RpZmYgLWR1ck4gZ2NjLTQuNC40Lm9yaWcvTWFrZWZpbGUudHBsIGdjYy00LjQuNC9NYWtlZmlsZS50cGwKKy0tLSBnY2MtNC40LjQub3JpZy9NYWtlZmlsZS50cGwJMjAwOS0wNC0xNCAxMDo1NzozMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjQvTWFrZWZpbGUudHBsCTIwMTAtMDUtMTYgMTk6Mzg6MTcuMDAwMDAwMDAwICswMjAwCitAQCAtMjQ4LDcgKzI0OCwxMCBAQAorIAlTVFJJUD0iJChTVFJJUF9GT1JfVEFSR0VUKSI7IGV4cG9ydCBTVFJJUDsgXAorIAlXSU5EUkVTPSIkKFdJTkRSRVNfRk9SX1RBUkdFVCkiOyBleHBvcnQgV0lORFJFUzsgXAorIAlXSU5ETUM9IiQoV0lORE1DX0ZPUl9UQVJHRVQpIjsgZXhwb3J0IFdJTkRNQzsgXAorLQkkKFJQQVRIX0VOVlZBUik9YGVjaG8gIiQoSE9TVF9MSUJfUEFUSCkkKFRBUkdFVF9MSUJfUEFUSCkkJCQoUlBBVEhfRU5WVkFSKSIgfCBzZWQgJ3MsOjoqLDosZztzLF46KiwsO3MsOiokJCwsJ2A7IGV4cG9ydCAkKFJQQVRIX0VOVlZBUik7CisrQGlmIGdjYy1ib290c3RyYXAKKysJJChSUEFUSF9FTlZWQVIpPWBlY2hvICIkKFRBUkdFVF9MSUJfUEFUSCkkJCQoUlBBVEhfRU5WVkFSKSIgfCBzZWQgJ3MsOjoqLDosZztzLF46KiwsO3MsOiokJCwsJ2A7IGV4cG9ydCAkKFJQQVRIX0VOVlZBUik7IFwKKytAZW5kaWYgZ2NjLWJvb3RzdHJhcAorKwkkKFJQQVRIX0VOVlZBUik9YGVjaG8gIiQoSE9TVF9MSUJfUEFUSCkkJCQoUlBBVEhfRU5WVkFSKSIgfCBzZWQgJ3MsOjoqLDosZztzLF46KiwsO3MsOiokJCwsJ2A7IGV4cG9ydCAkKFJQQVRIX0VOVlZBUik7CisgCisgUkFXX0NYWF9UQVJHRVRfRVhQT1JUUyA9IFwKKyAJJChCQVNFX1RBUkdFVF9FWFBPUlRTKSBcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzM4MC1wb3dlcnBjLWxpYmdjY19zLWxpbmstbGlibS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvMzgwLXBvd2VycGMtbGliZ2NjX3MtbGluay1saWJtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0N2EzMDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzM4MC1wb3dlcnBjLWxpYmdjY19zLWxpbmstbGlibS5wYXRjaApAQCAtMCwwICsxLDEzNSBAQAoraHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMDgtMTAvbXNnMDAyNjkuaHRtbAorCitPbiBnbGliYyB0aGUgbGliYy5zbyBjYXJyaWVzIGEgY29weSBvZiB0aGUgbWF0aCBmdW5jdGlvbiBjb3B5c2lnbmwoKSBidXQKK29uIHVDbGliYyBtYXRoIGZ1bmN0aW9ucyBsaWtlIGNvcHlzaWdubCgpIGxpdmUgaW4gbGlibS4gU2luY2UgbGliZ2NjX3MKK2NvbnRhaW5zIHVucmVzb2x2ZWQgc3ltYm9scywgYW55IGF0dGVtcHQgdG8gbGluayBhZ2FpbnN0IGxpYmdjY19zCit3aXRob3V0IGV4cGxpY2l0ZWx5IHNwZWNpZnlpbmcgLWxtIGZhaWxzLCByZXN1bHRpbmcgaW4gYSBicm9rZW4KK2Jvb3RzdHJhcCBvZiB0aGUgY29tcGlsZXIuCisKKworZGlmZiAtZHVyTiBnY2MtNC40LjQub3JpZy9nY2MvY29uZmlnL3Qtc2xpYmdjYy1lbGYtdmVyIGdjYy00LjQuNC9nY2MvY29uZmlnL3Qtc2xpYmdjYy1lbGYtdmVyCistLS0gZ2NjLTQuNC40Lm9yaWcvZ2NjL2NvbmZpZy90LXNsaWJnY2MtZWxmLXZlcgkyMDEwLTAxLTA0IDE2OjEzOjA4LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNC9nY2MvY29uZmlnL3Qtc2xpYmdjYy1lbGYtdmVyCTIwMTAtMDUtMTYgMTk6Mzg6MzYuMDAwMDAwMDAwICswMjAwCitAQCAtOSw3ICs5LDcgQEAKKyBTSExJQl9PQkpTID0gQHNobGliX29ianNACisgU0hMSUJfRElSID0gQG11bHRpbGliX2RpckAKKyBTSExJQl9TTElCRElSX1FVQUwgPSBAc2hsaWJfc2xpYmRpcl9xdWFsQAorLVNITElCX0xDID0gLWxjCisrU0hMSUJfTEMgPSBAbGliZ2NjX2xpYm1AIC1sYworIFNITElCX01BS0VfU09MSU5LID0gJChMTl9TKSAkKFNITElCX1NPTkFNRSkgJChTSExJQl9ESVIpLyQoU0hMSUJfU09MSU5LKQorIFNITElCX0lOU1RBTExfU09MSU5LID0gJChMTl9TKSAkKFNITElCX1NPTkFNRSkgXAorIAkkJChERVNURElSKSQkKHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwpLyQoU0hMSUJfU09MSU5LKQorZGlmZiAtZHVyTiBnY2MtNC40LjQub3JpZy9saWJnY2MvTWFrZWZpbGUuaW4gZ2NjLTQuNC40L2xpYmdjYy9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjQuNC5vcmlnL2xpYmdjYy9NYWtlZmlsZS5pbgkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNC9saWJnY2MvTWFrZWZpbGUuaW4JMjAxMC0wNS0xNiAxOTozODozNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zOSw2ICszOSw3IEBACisgZGVjaW1hbF9mbG9hdCA9IEBkZWNpbWFsX2Zsb2F0QAorIGVuYWJsZV9kZWNpbWFsX2Zsb2F0ID0gQGVuYWJsZV9kZWNpbWFsX2Zsb2F0QAorIGZpeGVkX3BvaW50ID0gQGZpeGVkX3BvaW50QAorK0xJQkdDQ19MSUJNID0gQExJQkdDQ19MSUJNQAorIAorIGhvc3Rfbm9uY2Fub25pY2FsID0gQGhvc3Rfbm9uY2Fub25pY2FsQAorIAorQEAgLTc4Nyw5ICs3ODgsMTAgQEAKKyAJCUBtdWx0aWxpYl9kaXJALCQoTVVMVElESVIpLCQoc3Vic3QgXAorIAkJQHNobGliX29ianNALCQob2JqZWN0cyksJChzdWJzdCBcCisgCQlAc2hsaWJfYmFzZV9uYW1lQCxsaWJnY2NfcywkKHN1YnN0IFwKKysJCUBsaWJnY2NfbGlibUAsJChMSUJHQ0NfTElCTSksJChzdWJzdCBcCisgCQlAc2hsaWJfbWFwX2ZpbGVALCQobWFwZmlsZSksJChzdWJzdCBcCisgCQlAc2hsaWJfc2xpYmRpcl9xdWFsQCwkKE1VTFRJT1NTVUJESVIpLCQoc3Vic3QgXAorLQkJQHNobGliX3NsaWJkaXJALCQoc2hsaWJfc2xpYmRpciksJChTSExJQl9MSU5LKSkpKSkpKSkKKysJCUBzaGxpYl9zbGliZGlyQCwkKHNobGliX3NsaWJkaXIpLCQoU0hMSUJfTElOSykpKSkpKSkpKQorIAorIGxpYnVud2luZCQoU0hMSUJfRVhUKTogJChsaWJ1bndpbmQtcy1vYmplY3RzKSAkKGV4dHJhLXBhcnRzKQorIAkjIEBtdWx0aWxpYl9mbGFnc0AgaXMgc3RpbGwgbmVlZGVkIGJlY2F1c2UgdGhpcyBtYXkgdXNlCitkaWZmIC1kdXJOIGdjYy00LjQuNC5vcmlnL2xpYmdjYy9jb25maWd1cmUgZ2NjLTQuNC40L2xpYmdjYy9jb25maWd1cmUKKy0tLSBnY2MtNC40LjQub3JpZy9saWJnY2MvY29uZmlndXJlCTIwMDgtMTEtMjAgMTg6MTM6MDEuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC40L2xpYmdjYy9jb25maWd1cmUJMjAxMC0wNS0xNiAxOTozODozNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNzIsNyArMjcyLDcgQEAKKyBQQUNLQUdFX0JVR1JFUE9SVD0nJworIAorIGFjX3VuaXF1ZV9maWxlPSJzdGF0aWMtb2JqZWN0Lm1rIgorLWFjX3N1YnN0X3ZhcnM9J1NIRUxMIFBBVEhfU0VQQVJBVE9SIFBBQ0tBR0VfTkFNRSBQQUNLQUdFX1RBUk5BTUUgUEFDS0FHRV9WRVJTSU9OIFBBQ0tBR0VfU1RSSU5HIFBBQ0tBR0VfQlVHUkVQT1JUIGV4ZWNfcHJlZml4IHByZWZpeCBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgbGliZGlyIGluY2x1ZGVkaXIgb2xkaW5jbHVkZWRpciBpbmZvZGlyIG1hbmRpciBidWlsZF9hbGlhcyBob3N0X2FsaWFzIHRhcmdldF9hbGlhcyBERUZTIEVDSE9fQyBFQ0hPX04gRUNIT19UIExJQlMgbGliZ2NjX3RvcGRpciBlbmFibGVfc2hhcmVkIHNsaWJkaXIgSU5TVEFMTF9QUk9HUkFNIElOU1RBTExfU0NSSVBUIElOU1RBTExfREFUQSBBV0sgYnVpbGQgYnVpbGRfY3B1IGJ1aWxkX3ZlbmRvciBidWlsZF9vcyBob3N0IGhvc3RfY3B1IGhvc3RfdmVuZG9yIGhvc3Rfb3MgaG9zdF9ub25jYW5vbmljYWwgYnVpbGRfbGlic3ViZGlyIGJ1aWxkX3N1YmRpciBob3N0X3N1YmRpciB0YXJnZXRfc3ViZGlyIEFSIGFjX2N0X0FSIExJUE8gYWNfY3RfTElQTyBOTSBhY19jdF9OTSBSQU5MSUIgYWNfY3RfUkFOTElCIFNUUklQIGFjX2N0X1NUUklQIExOX1MgQ0MgQ0ZMQUdTIExERkxBR1MgQ1BQRkxBR1MgYWNfY3RfQ0MgRVhFRVhUIE9CSkVYVCBDUFAgZGVjaW1hbF9mbG9hdCBlbmFibGVfZGVjaW1hbF9mbG9hdCBmaXhlZF9wb2ludCB2aXNfaGlkZSBzZXRfaGF2ZV9jY190bHMgdG1ha2VfZmlsZSBleHRyYV9wYXJ0cyBhc21faGlkZGVuX29wIExJQk9CSlMgTFRMSUJPQkpTJworK2FjX3N1YnN0X3ZhcnM9J1NIRUxMIFBBVEhfU0VQQVJBVE9SIFBBQ0tBR0VfTkFNRSBQQUNLQUdFX1RBUk5BTUUgUEFDS0FHRV9WRVJTSU9OIFBBQ0tBR0VfU1RSSU5HIFBBQ0tBR0VfQlVHUkVQT1JUIGV4ZWNfcHJlZml4IHByZWZpeCBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgbGliZGlyIGluY2x1ZGVkaXIgb2xkaW5jbHVkZWRpciBpbmZvZGlyIG1hbmRpciBidWlsZF9hbGlhcyBob3N0X2FsaWFzIHRhcmdldF9hbGlhcyBERUZTIEVDSE9fQyBFQ0hPX04gRUNIT19UIExJQlMgbGliZ2NjX3RvcGRpciBlbmFibGVfc2hhcmVkIHNsaWJkaXIgSU5TVEFMTF9QUk9HUkFNIElOU1RBTExfU0NSSVBUIElOU1RBTExfREFUQSBBV0sgYnVpbGQgYnVpbGRfY3B1IGJ1aWxkX3ZlbmRvciBidWlsZF9vcyBob3N0IGhvc3RfY3B1IGhvc3RfdmVuZG9yIGhvc3Rfb3MgaG9zdF9ub25jYW5vbmljYWwgYnVpbGRfbGlic3ViZGlyIGJ1aWxkX3N1YmRpciBob3N0X3N1YmRpciB0YXJnZXRfc3ViZGlyIEFSIGFjX2N0X0FSIExJUE8gYWNfY3RfTElQTyBOTSBhY19jdF9OTSBSQU5MSUIgYWNfY3RfUkFOTElCIFNUUklQIGFjX2N0X1NUUklQIExOX1MgQ0MgQ0ZMQUdTIExERkxBR1MgQ1BQRkxBR1MgYWNfY3RfQ0MgRVhFRVhUIE9CSkVYVCBDUFAgZGVjaW1hbF9mbG9hdCBlbmFibGVfZGVjaW1hbF9mbG9hdCBmaXhlZF9wb2ludCB2aXNfaGlkZSBzZXRfaGF2ZV9jY190bHMgTElCR0NDX0xJQk0gdG1ha2VfZmlsZSBleHRyYV9wYXJ0cyBhc21faGlkZGVuX29wIExJQk9CSlMgTFRMSUJPQkpTJworIGFjX3N1YnN0X2ZpbGVzPScnCisgYWNfcHdkPWBwd2RgCisgCitAQCAtMzU0Nyw2ICszNTQ3LDM5IEBACisgZmkKKyAKKyAKKysjIE9uIHBvd2VycGMgbGliZ2NjX3MgcmVmZXJlbmNlcyBjb3B5c2lnbmwgd2hpY2ggaXMgYSBsaWJtIGZ1bmN0aW9uIGJ1dAorKyMgZ2xpYmMgYXBwYXJlbnRseSBhbHNvIHByb3ZpZGVzIGl0IHZpYSBsaWJjIGFzIG9wcG9zZWQgdG8gdUNsaWJjIHdoZXJlCisrIyBpdCBsaXZlcyBpbiBsaWJtLgorK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGNvcHlzaWdubCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGNvcHlzaWdubC4uLiAkRUNIT19DIiA+JjYKKytpZiB0ZXN0ICIke2xpYmdjY19jdl9jb3B5c2lnbmxfbGliK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysKKysgICAgZWNobyAnI2luY2x1ZGUgPGZlYXR1cmVzLmg+JyA+IGNvbmZ0ZXN0LmMKKysgICAgZWNobyAnaW50IHRoZV9saWJjID0gX19VQ0xJQkNfXyArIF9fcG93ZXJwY19fOycgPj4gY29uZnRlc3QuYworKyAgICBsaWJnY2NfY3ZfY29weXNpZ25sX2xpYj0iLWxjIgorKyAgICBpZiB7IGFjX3RyeT0nJHtDQy1jY30gLVMgY29uZnRlc3QuYyAtbyBjb25mdGVzdC5zIDE+JjUnCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfQorKyAgICB0aGVuCisrCWxpYmdjY19jdl9jb3B5c2lnbmxfbGliPSItbG0iCisrICAgIGZpCisrICAgIHJtIC1mIGNvbmZ0ZXN0LioKKysKKytmaQorK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsaWJnY2NfY3ZfY29weXNpZ25sX2xpYiIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGxpYmdjY19jdl9jb3B5c2lnbmxfbGliIiA+JjYKKysKKytjYXNlIC8ke2xpYmdjY19jdl9jb3B5c2lnbmxfbGlifS8gaW4KKysgIC8tbG0vKSBMSUJHQ0NfTElCTT0iJExJQkdDQ19MSUJNIC1sbSIgOzsKKysgICopIExJQkdDQ19MSUJNPSA7OworK2VzYWMKKysKKysKKyAjIENvbmRpdGlvbmFsaXplIHRoZSBtYWtlZmlsZSBmb3IgdGhpcyB0YXJnZXQgbWFjaGluZS4KKyB0bWFrZV9maWxlXz0KKyBmb3IgZiBpbiAke3RtYWtlX2ZpbGV9CitAQCAtNDI2Nyw2ICs0MzAwLDcgQEAKKyBzLEBmaXhlZF9wb2ludEAsJGZpeGVkX3BvaW50LDt0IHQKKyBzLEB2aXNfaGlkZUAsJHZpc19oaWRlLDt0IHQKKyBzLEBzZXRfaGF2ZV9jY190bHNALCRzZXRfaGF2ZV9jY190bHMsO3QgdAorK3MsQExJQkdDQ19MSUJNQCwkTElCR0NDX0xJQk0sO3QgdAorIHMsQHRtYWtlX2ZpbGVALCR0bWFrZV9maWxlLDt0IHQKKyBzLEBleHRyYV9wYXJ0c0AsJGV4dHJhX3BhcnRzLDt0IHQKKyBzLEBhc21faGlkZGVuX29wQCwkYXNtX2hpZGRlbl9vcCw7dCB0CitkaWZmIC1kdXJOIGdjYy00LjQuNC5vcmlnL2xpYmdjYy9jb25maWd1cmUuYWMgZ2NjLTQuNC40L2xpYmdjYy9jb25maWd1cmUuYWMKKy0tLSBnY2MtNC40LjQub3JpZy9saWJnY2MvY29uZmlndXJlLmFjCTIwMDgtMTEtMjAgMTg6MTM6MDEuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC40L2xpYmdjYy9jb25maWd1cmUuYWMJMjAxMC0wNS0xNiAxOTozODozNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMjMsNiArMjIzLDI3IEBACisgZmkKKyBBQ19TVUJTVChzZXRfaGF2ZV9jY190bHMpCisgCisrIyBPbiBwb3dlcnBjIGxpYmdjY19zIHJlZmVyZW5jZXMgY29weXNpZ25sIHdoaWNoIGlzIGEgbGlibSBmdW5jdGlvbiBidXQKKysjIGdsaWJjIGFwcGFyZW50bHkgYWxzbyBwcm92aWRlcyBpdCB2aWEgbGliYyBhcyBvcHBvc2VkIHRvIHVDbGliYyB3aGVyZQorKyMgaXQgbGl2ZXMgaW4gbGlibS4KKytBQ19DQUNIRV9DSEVDSworKyAgbGliZ2NjX2N2X2NvcHlzaWdubF9saWIsCisrICAgIGVjaG8gJyNpbmNsdWRlIDxmZWF0dXJlcy5oPicgPiBjb25mdGVzdC5jCisrICAgIGVjaG8gJ2ludCB0aGVfbGliYyA9IF9fVUNMSUJDX18gKyBfX3Bvd2VycGNfXzsnID4+IGNvbmZ0ZXN0LmMKKysgICAgbGliZ2NjX2N2X2NvcHlzaWdubF9saWI9Ii1sYyIKKysgICAgaWYgQUNfVFJZX0NPTU1BTkQoJHtDQy1jY30gLVMgY29uZnRlc3QuYyAtbyBjb25mdGVzdC5zIDE+JkFTX01FU1NBR0VfTE9HX0ZEKQorKyAgICB0aGVuCisrCWxpYmdjY19jdl9jb3B5c2lnbmxfbGliPSItbG0iCisrICAgIGZpCisrICAgIHJtIC1mIGNvbmZ0ZXN0LioKKysgIF0pCisrCisrY2FzZSAvJHtsaWJnY2NfY3ZfY29weXNpZ25sX2xpYn0vIGluCisrICAvLWxtLykgTElCR0NDX0xJQk09IiRMSUJHQ0NfTElCTSAtbG0iIDs7CisrICAqKSBMSUJHQ0NfTElCTT0gOzsKKytlc2FjCisrQUNfU1VCU1QoTElCR0NDX0xJQk0pCisrCisgIyBDb25kaXRpb25hbGl6ZSB0aGUgbWFrZWZpbGUgZm9yIHRoaXMgdGFyZ2V0IG1hY2hpbmUuCisgdG1ha2VfZmlsZV89CisgZm9yIGYgaW4gJHt0bWFrZV9maWxlfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC8zOTAtYXJtLXNvZnRmbG9hdC1saWJnY2MucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzM5MC1hcm0tc29mdGZsb2F0LWxpYmdjYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmEzMGEzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC8zOTAtYXJtLXNvZnRmbG9hdC1saWJnY2MucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorW1BBVENIXSBhZGQgdGhlIGNvcnJlY3Qgc3ltYm9scyB0byBsaWJnY2MgZm9yIHVjbGliYyBhcm0gc29mdGZsb2F0CisKK1NpZ25lZC1vZmYtYnk6IFBldGVyIEtvcnNnYWFyZCA8amFjbWV0QHN1bnNpdGUuZGs+CistLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL2FybS90LWxpbnV4ICAgICB8ICAgIDYgKysrKystCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC40LjAvZ2NjL2NvbmZpZy9hcm0vdC1saW51eAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvYXJtL3QtbGludXgKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy9hcm0vdC1saW51eAorQEAgLTQsNyArNCwxMSBAQAorIAorIExJQjFBU01TUkMgPSBhcm0vbGliMWZ1bmNzLmFzbQorIExJQjFBU01GVU5DUyA9IF91ZGl2c2kzIF9kaXZzaTMgX3Vtb2RzaTMgX21vZHNpMyBfZHZtZF9sbnggX2NsenNpMiBfY2x6ZGkyIFwKKy0JX2FybV9hZGRzdWJkZjMgX2FybV9hZGRzdWJzZjMKKysJX2FybV9hZGRzdWJkZjMgX2FybV9hZGRzdWJzZjMgXAorKwlfYXJtX25lZ2RmMiBfYXJtX211bGRpdmRmMyBfYXJtX2NtcGRmMiBfYXJtX3Vub3JkZGYyIFwKKysJX2FybV9maXhkZnNpIF9hcm1fZml4dW5zZGZzaSBfYXJtX3RydW5jZGZzZjIgXAorKwlfYXJtX25lZ3NmMiBfYXJtX211bGRpdnNmMyBfYXJtX2NtcHNmMiBfYXJtX3Vub3Jkc2YyIFwKKysJX2FybV9maXhzZnNpIF9hcm1fZml4dW5zc2ZzaQorIAorICMgTVVMVElMSUJfT1BUSU9OUyA9IG1oYXJkLWZsb2F0L21zb2Z0LWZsb2F0CisgIyBNVUxUSUxJQl9ESVJOQU1FUyA9IGhhcmQtZmxvYXQgc29mdC1mbG9hdAorSW5kZXg6IGdjYy00LjQuMC9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCitAQCAtNjAsNyArNjAsNyBAQAorICAgICV7c2hhcmVkOi1sY30gXAorICAgICV7IXNoYXJlZDole3Byb2ZpbGU6LWxjX3B9JXshcHJvZmlsZTotbGN9fSIKKyAKKy0jZGVmaW5lIExJQkdDQ19TUEVDICIle21zb2Z0LWZsb2F0Oi1sZmxvYXR9ICV7bWZsb2F0LWFiaT1zb2Z0KjotbGZsb2F0fSAtbGdjYyIKKysjZGVmaW5lIExJQkdDQ19TUEVDICItbGdjYyIKKyAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzQwMC1wcjQyMjg5LWZpeC1saWJmZmktYnVpbGQtb24tYXJtLW9hYmkucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzQwMC1wcjQyMjg5LWZpeC1saWJmZmktYnVpbGQtb24tYXJtLW9hYmkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY1NDg3OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjQvNDAwLXByNDIyODktZml4LWxpYmZmaS1idWlsZC1vbi1hcm0tb2FiaS5wYXRjaApAQCAtMCwwICsxLDExIEBACistLS0gZ2NjLTQuMy40L2xpYmZmaS9zcmMvYXJtL3N5c3YuUwkKKysrKyBnY2MtNC4zLjQvbGliZmZpL3NyYy9hcm0vc3lzdi5TCQorQEAgLTIzNSw3ICsyMzUsNyBAQCBBUk1fRlVOQ19TVEFSVCBmZmlfY2xvc3VyZV9TWVNWCisgCXN0bWZkCXNwISwge2lwLCBscn0KKyAJVU5XSU5EIC5zYXZlCXtyMCwgbHJ9CisgCWFkZAlyMiwgc3AsICM4CistCS5wYWQgIzE2CisrCVVOV0lORCAucGFkICMxNgorIAlzdWIJc3AsIHNwLCAjMTYKKyAJc3RyCXNwLCBbc3AsICM4XQorIAlhZGQJcjEsIHNwLCAjOApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC80MTAtbGliZ2NjX2VoLmEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC40LzQxMC1saWJnY2NfZWguYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzUzMjYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNC80MTAtbGliZ2NjX2VoLmEucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorSGlnaGx5IGluc3BpcmVkIGJ5OgorICBodHRwOi8vbGFuZGxleS5uZXQvaGcvYWJvcmlnaW5hbC9maWxlLzdlMDc0N2E2NjVhYi9zb3VyY2VzL3BhdGNoZXMvZ2NjLWNvcmUtbGliZ2NjZWgucGF0Y2gKKworZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9saWJnY2MvTWFrZWZpbGUuaW4gZ2NjLTQuNC4wL2xpYmdjYy9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjQuMC5vcmlnL2xpYmdjYy9NYWtlZmlsZS5pbgkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9saWJnY2MvTWFrZWZpbGUuaW4JMjAxMS0wOS0xMiAxNzowNToyNS4xMjExMjQ1NTkgKzAyMDAKK0BAIC03NTQsOCArNzU0LDkgQEAKKyBsaWJnY2NfcyQoU0hMSUJfRVhUKTogbGlidW53aW5kJChTSExJQl9FWFQpCisgZW5kaWYKKyAKKythbGw6IGxpYmdjY19laC5hCisgaWZlcSAoJChlbmFibGVfc2hhcmVkKSx5ZXMpCistYWxsOiBsaWJnY2NfZWguYSBsaWJnY2NfcyQoU0hMSUJfRVhUKQorK2FsbDogbGliZ2NjX3MkKFNITElCX0VYVCkKKyBpZm5lcSAoJChMSUJVTldJTkQpLCkKKyBhbGw6IGxpYnVud2luZCQoU0hMSUJfRVhUKQorIGVuZGlmCitAQCAtOTI0LDEwICs5MjUsNiBAQAorIGluc3RhbGwtc2hhcmVkOgorIAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGluc3RfbGliZGlyKQorIAorLQkkKElOU1RBTExfREFUQSkgbGliZ2NjX2VoLmEgJChERVNURElSKSQoaW5zdF9saWJkaXIpLworLQljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCistCSQoUkFOTElCKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKy0KKyAJJChzdWJzdCBAbXVsdGlsaWJfZGlyQCwkKE1VTFRJRElSKSwkKHN1YnN0IFwKKyAJCUBzaGxpYl9iYXNlX25hbWVALGxpYmdjY19zLCQoc3Vic3QgXAorIAkJQHNobGliX3NsaWJkaXJfcXVhbEAsJChNVUxUSU9TU1VCRElSKSwkKFNITElCX0lOU1RBTEwpKSkpCitAQCAtOTQyLDYgKzkzOSwxMCBAQAorIAljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjb3YuYQorIAkkKFJBTkxJQikgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjb3YuYQorIAorKwkkKElOU1RBTExfREFUQSkgbGliZ2NjX2VoLmEgJChERVNURElSKSQoaW5zdF9saWJkaXIpLworKwljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCisrCSQoUkFOTElCKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKysKKyAJcGFydHM9IiQoSU5TVEFMTF9QQVJUUykiOwkJCQlcCisgCWZvciBmaWxlIGluICQkcGFydHM7IGRvCQkJCQlcCisgCSAgcm0gLWYgJChERVNURElSKSQoaW5zdF9saWJkaXIpLyQkZmlsZTsJCVwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMTAwLWFscGhhLW1pZWVlLWRlZmF1bHQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzEwMC1hbHBoYS1taWVlZS1kZWZhdWx0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmM2FjZDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzEwMC1hbHBoYS1taWVlZS1kZWZhdWx0LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5oIGdjYy00LjQuNS9nY2MvY29uZmlnL2FscGhhL2FscGhhLmgKKy0tLSBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL2FscGhhL2FscGhhLmgJMjAwOS0wMi0yMCAxNjoyMDozOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC40LjUvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5oCTIwMTAtMTAtMDkgMjI6NTc6MzEuMDAwMDAwMDAwICswMjAwCitAQCAtOTUsNiArOTUsOCBAQAorICAgd2hpbGUgKDApCisgI2VuZGlmCisgCisrI2RlZmluZSBDUFBfU1BFQyAiJXshbm8taWVlZTotbWllZWV9IgorKworICNkZWZpbmUgV09SRF9TV0lUQ0hfVEFLRVNfQVJHKFNUUikJCVwKKyAgKCFzdHJjbXAgKFNUUiwgInJwYXRoIikgfHwgREVGQVVMVF9XT1JEX1NXSVRDSF9UQUtFU19BUkcoU1RSKSkKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5vcHQgZ2NjLTQuNC41L2djYy9jb25maWcvYWxwaGEvYWxwaGEub3B0CistLS0gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5vcHQJMjAwNy0wOC0wMiAxMjo0OTozMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5vcHQJMjAxMC0xMC0wOSAyMjo1NzozMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zOSw3ICszOSw3IEBACisgUmVxdWVzdCBJRUVFLWNvbmZvcm1hbnQgbWF0aCBsaWJyYXJ5IHJvdXRpbmVzIChPU0YvMSkKKyAKKyBtaWVlZQorLVRhcmdldCBSZXBvcnQgUmVqZWN0TmVnYXRpdmUgTWFzayhJRUVFKQorK1RhcmdldCBSZXBvcnQgTWFzayhJRUVFKQorIEVtaXQgSUVFRS1jb25mb3JtYW50IGNvZGUsIHdpdGhvdXQgaW5leGFjdCBleGNlcHRpb25zCisgCisgbWllZWUtd2l0aC1pbmV4YWN0CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzExMC10cmFtcG9saW5ld2Fybi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMTEwLXRyYW1wb2xpbmV3YXJuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiY2U4NTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzExMC10cmFtcG9saW5ld2Fybi5wYXRjaApAQCAtMCwwICsxLDI3IEBACitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9idWlsdGlucy5jIGdjYy00LjQuNS9nY2MvYnVpbHRpbnMuYworLS0tIGdjYy00LjQuNS5vcmlnL2djYy9idWlsdGlucy5jCTIwMTAtMDMtMjIgMTY6MDA6MjAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC41L2djYy9idWlsdGlucy5jCTIwMTAtMTAtMDkgMjI6NTc6NTguMDAwMDAwMDAwICswMjAwCitAQCAtNTc4Myw2ICs1NzgzLDkgQEAKKyAgIHRyYW1wb2xpbmVzX2NyZWF0ZWQgPSAxOworICAgSU5JVElBTElaRV9UUkFNUE9MSU5FIChyX3RyYW1wLCByX2Z1bmMsIHJfY2hhaW4pOworIAorKyAgaWYgKHdhcm5fdHJhbXBvbGluZXMpCisrICAgIHdhcm5pbmcgKE9QVF9XdHJhbXBvbGluZXMsICJnZW5lcmF0aW5nIHRyYW1wb2xpbmUgaW4gb2JqZWN0IChyZXF1aXJlcyBleGVjdXRhYmxlIHN0YWNrKSIpOworKworICAgcmV0dXJuIGNvbnN0MF9ydHg7CisgfQorIAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29tbW9uLm9wdCBnY2MtNC40LjUvZ2NjL2NvbW1vbi5vcHQKKy0tLSBnY2MtNC40LjUub3JpZy9nY2MvY29tbW9uLm9wdAkyMDA5LTAzLTI4IDE4OjI4OjQ1LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNS9nY2MvY29tbW9uLm9wdAkyMDEwLTEwLTA5IDIyOjU3OjU4LjAwMDAwMDAwMCArMDIwMAorQEAgLTE5Nyw2ICsxOTcsMTAgQEAKKyBDb21tb24gVmFyKHdhcm5fdHlwZV9saW1pdHMpIEluaXQoLTEpIFdhcm5pbmcKKyBXYXJuIGlmIGEgY29tcGFyaXNvbiBpcyBhbHdheXMgdHJ1ZSBvciBhbHdheXMgZmFsc2UgZHVlIHRvIHRoZSBsaW1pdGVkIHJhbmdlIG9mIHRoZSBkYXRhIHR5cGUKKyAKKytXdHJhbXBvbGluZXMKKytDb21tb24gVmFyKHdhcm5fdHJhbXBvbGluZXMpIEluaXQoMSkKKytXYXJuIHdoZW5ldmVyIGEgdHJhbXBvbGluZSBpcyBnZW5lcmF0ZWQKKysKKyBXdW5pbml0aWFsaXplZAorIENvbW1vbiBWYXIod2Fybl91bmluaXRpYWxpemVkKSBXYXJuaW5nCisgV2FybiBhYm91dCB1bmluaXRpYWxpemVkIGF1dG9tYXRpYyB2YXJpYWJsZXMKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMTIwLWphdmEtbm9tdWx0aS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMTIwLWphdmEtbm9tdWx0aS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGVkNjNlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS8xMjAtamF2YS1ub211bHRpLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvbGliamF2YS9jb25maWd1cmUgZ2NjLTQuNC41L2xpYmphdmEvY29uZmlndXJlCistLS0gZ2NjLTQuNC41Lm9yaWcvbGliamF2YS9jb25maWd1cmUJMjAxMC0xMC0wMSAxMDoyNjoxOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvbGliamF2YS9jb25maWd1cmUJMjAxMC0xMC0wOSAyMjo1ODowNC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMDIyLDYgKzEwMjIsOCBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD15ZXMKKyAgIC0tZW5hYmxlLWphdmEtbWFpbnRhaW5lci1tb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdyByZWJ1aWxkaW5nIG9mIC5jbGFzcyBhbmQgLmggZmlsZXMKKysgIC0tZW5hYmxlLWxpYmphdmEtbXVsdGlsaWIKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGxpYmphdmEgYXMgbXVsdGlsaWIKKyAgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICBzcGVlZHMgdXAgb25lLXRpbWUgYnVpbGQKKyAgIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgICBkbyBub3QgcmVqZWN0IHNsb3cgZGVwZW5kZW5jeSBleHRyYWN0b3JzCisgICAtLWVuYWJsZS1tYWludGFpbmVyLW1vZGUgIGVuYWJsZSBtYWtlIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgbm90IHVzZWZ1bAorQEAgLTE5NzQsNiArMTk3NiwxNiBAQAorIGZpCisgCisgCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYmphdmEtbXVsdGlsaWIgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7ZW5hYmxlX2xpYmphdmFfbXVsdGlsaWIrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX2xpYmphdmFfbXVsdGlsaWI7CisrZmkKKysKKytpZiB0ZXN0ICIkZW5hYmxlX2xpYmphdmFfbXVsdGlsaWIiID0gbm87IHRoZW4KKysgIG11bHRpbGliPW5vCisrICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzIC0tZGlzYWJsZS1tdWx0aWxpYiIKKytmaQorKworICMgSXQgbWF5IG5vdCBiZSBzYWZlIHRvIHJ1biBsaW5raW5nIHRlc3RzIGluIEFDX1BST0dfQ0MvQUNfUFJPR19DWFguCisgCisgCitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2xpYmphdmEvY29uZmlndXJlLmFjIGdjYy00LjQuNS9saWJqYXZhL2NvbmZpZ3VyZS5hYworLS0tIGdjYy00LjQuNS5vcmlnL2xpYmphdmEvY29uZmlndXJlLmFjCTIwMTAtMDYtMTEgMTM6NDk6MTYuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2xpYmphdmEvY29uZmlndXJlLmFjCTIwMTAtMTAtMDkgMjI6NTg6MDQuMDAwMDAwMDAwICswMjAwCitAQCAtMTM5LDYgKzEzOSwxMyBAQAorIAlbYWxsb3cgcmVidWlsZGluZyBvZiAuY2xhc3MgYW5kIC5oIGZpbGVzXSkpCisgQU1fQ09ORElUSU9OQUwoSkFWQV9NQUlOVEFJTkVSX01PREUsIHRlc3QgIiRlbmFibGVfamF2YV9tYWludGFpbmVyX21vZGUiID0geWVzKQorIAorK0FDX0FSR19FTkFCTEUobGliamF2YS1tdWx0aWxpYiwKKysJQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxpYmphdmEtbXVsdGlsaWJdLCBbYnVpbGQgbGliamF2YSBhcyBtdWx0aWxpYl0pKQorK2lmIHRlc3QgIiRlbmFibGVfbGliamF2YV9tdWx0aWxpYiIgPSBubzsgdGhlbgorKyAgbXVsdGlsaWI9bm8KKysgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1kaXNhYmxlLW11bHRpbGliIgorK2ZpCisrCisgIyBJdCBtYXkgbm90IGJlIHNhZmUgdG8gcnVuIGxpbmtpbmcgdGVzdHMgaW4gQUNfUFJPR19DQy9BQ19QUk9HX0NYWC4KKyBHQ0NfTk9fRVhFQ1VUQUJMRVMKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMTMwLWNyb3NzLWNvbXBpbGUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzEzMC1jcm9zcy1jb21waWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYmM2MGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzEzMC1jcm9zcy1jb21waWxlLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZ3VyZSBnY2MtNC40LjUvZ2NjL2NvbmZpZ3VyZQorLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWd1cmUJMjAxMC0wNi0yMCAxNzo0Mzo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvZ2NjL2NvbmZpZ3VyZQkyMDEwLTEwLTA5IDIyOjU4OjM2LjAwMDAwMDAwMCArMDIwMAorQEAgLTEzOTk3LDcgKzEzOTk3LDcgQEAKKyAJICAgIHwgcG93ZXJwYyotKi0qLHBvd2VycGM2NCotKi0qKQorIAkJQ1JPU1M9IiRDUk9TUyAtRE5BVElWRV9DUk9TUyIgOzsKKyAJZXNhYworLWVsaWYgdGVzdCAieCRUQVJHRVRfU1lTVEVNX1JPT1QiICE9IHg7IHRoZW4KKytlbGlmIHRlc3QgIngkVEFSR0VUX1NZU1RFTV9ST09UIiAhPSB4IC1vICRidWlsZCAhPSAkaG9zdDsgdGhlbgorICAgICAgICAgU1lTVEVNX0hFQURFUl9ESVI9JGJ1aWxkX3N5c3RlbV9oZWFkZXJfZGlyCisgZmkKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYyBnY2MtNC40LjUvZ2NjL2NvbmZpZ3VyZS5hYworLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWd1cmUuYWMJMjAxMC0wNi0yMCAxNzo0Mzo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvZ2NjL2NvbmZpZ3VyZS5hYwkyMDEwLTEwLTA5IDIyOjU4OjM2LjAwMDAwMDAwMCArMDIwMAorQEAgLTE3MjAsNyArMTcyMCw3IEBACisgCSAgICB8IHBvd2VycGMqLSotKixwb3dlcnBjNjQqLSotKikKKyAJCUNST1NTPSIkQ1JPU1MgLUROQVRJVkVfQ1JPU1MiIDs7CisgCWVzYWMKKy1lbGlmIHRlc3QgIngkVEFSR0VUX1NZU1RFTV9ST09UIiAhPSB4OyB0aGVuCisrZWxpZiB0ZXN0ICJ4JFRBUkdFVF9TWVNURU1fUk9PVCIgIT0geCAtbyAkYnVpbGQgIT0gJGhvc3Q7IHRoZW4KKyAgICAgICAgIFNZU1RFTV9IRUFERVJfRElSPSRidWlsZF9zeXN0ZW1faGVhZGVyX2RpciAKKyBmaQorIAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvdW53aW5kLWR3Mi5jIGdjYy00LjQuNS9nY2MvdW53aW5kLWR3Mi5jCistLS0gZ2NjLTQuNC41Lm9yaWcvZ2NjL3Vud2luZC1kdzIuYwkyMDEwLTAxLTIwIDA5OjM5OjE4LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNS9nY2MvdW53aW5kLWR3Mi5jCTIwMTAtMTAtMDkgMjI6NTg6MzYuMDAwMDAwMDAwICswMjAwCitAQCAtMzI5LDkgKzMyOSwxMSBAQAorIH0KKyAjZW5kaWYKKyAKKysjaWZuZGVmIGluaGliaXRfbGliYworICNpZmRlZiBNRF9VTldJTkRfU1VQUE9SVAorICNpbmNsdWRlIE1EX1VOV0lORF9TVVBQT1JUCisgI2VuZGlmCisrI2VuZGlmCisgDAorIC8qIEV4dHJhY3QgYW55IGludGVyZXN0aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIENJRSBmb3IgdGhlIHRyYW5zbGF0aW9uCisgICAgdW5pdCBGIGJlbG9uZ3MgdG8uICBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBieXRlIGFmdGVyIHRoZSBhdWdtZW50YXRpb24sCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzE0MC1kZWZhdWx0LWZvcm1hdC1zZWN1cml0eS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMTQwLWRlZmF1bHQtZm9ybWF0LXNlY3VyaXR5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMWQ5ODgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzE0MC1kZWZhdWx0LWZvcm1hdC1zZWN1cml0eS5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9jLWNvbW1vbi5jIGdjYy00LjQuNS9nY2MvYy1jb21tb24uYworLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jLWNvbW1vbi5jCTIwMTAtMDctMjcgMTU6MDc6MjguMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2djYy9jLWNvbW1vbi5jCTIwMTAtMTAtMDkgMjI6NTk6MDMuMDAwMDAwMDAwICswMjAwCitAQCAtMzAxLDcgKzMwMSw3IEBACisgLyogV2FybiBhYm91dCBmb3JtYXQvYXJndW1lbnQgYW5vbWFsaWVzIGluIGNhbGxzIHRvIGZvcm1hdHRlZCBJL08gZnVuY3Rpb25zCisgICAgKCpwcmludGYsICpzY2FuZiwgc3RyZnRpbWUsIHN0cmZtb24sIGV0Yy4pLiAgKi8KKyAKKy1pbnQgd2Fybl9mb3JtYXQ7CisraW50IHdhcm5fZm9ybWF0ID0gMTsKKyAKKyAvKiBXYXJuIGFib3V0IHVzaW5nIF9fbnVsbCAoYXMgTlVMTCBpbiBDKyspIGFzIHNlbnRpbmVsLiAgRm9yIGNvZGUgY29tcGlsZWQKKyAgICB3aXRoIEdDQyB0aGlzIGRvZXNuJ3QgbWF0dGVyIGFzIF9fbnVsbCBpcyBndWFyYW50ZWVkIHRvIGhhdmUgdGhlIHJpZ2h0CitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9jLm9wdCBnY2MtNC40LjUvZ2NjL2Mub3B0CistLS0gZ2NjLTQuNC41Lm9yaWcvZ2NjL2Mub3B0CTIwMDktMDktMTggMjM6NTM6MjMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2djYy9jLm9wdAkyMDEwLTEwLTA5IDIyOjU5OjAzLjAwMDAwMDAwMCArMDIwMAorQEAgLTIzNiw3ICsyMzYsNyBAQAorIFdhcm4gYWJvdXQgZm9ybWF0IHN0cmluZ3MgdGhhdCBjb250YWluIE5VTCBieXRlcworIAorIFdmb3JtYXQtc2VjdXJpdHkKKy1DIE9iakMgQysrIE9iakMrKyBWYXIod2Fybl9mb3JtYXRfc2VjdXJpdHkpIFdhcm5pbmcKKytDIE9iakMgQysrIE9iakMrKyBWYXIod2Fybl9mb3JtYXRfc2VjdXJpdHkpIEluaXQoMSkgV2FybmluZworIFdhcm4gYWJvdXQgcG9zc2libGUgc2VjdXJpdHkgcHJvYmxlbXMgd2l0aCBmb3JtYXQgZnVuY3Rpb25zCisgCisgV2Zvcm1hdC15MmsKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvZ2NjL2RvYy9pbnZva2UudGV4aSBnY2MtNC40LjUvZ2NjL2RvYy9pbnZva2UudGV4aQorLS0tIGdjYy00LjQuNS5vcmlnL2djYy9kb2MvaW52b2tlLnRleGkJMjAxMC0wOS0wOCAyMDoxMzowMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvZ2NjL2RvYy9pbnZva2UudGV4aQkyMDEwLTEwLTA5IDIyOjU5OjAzLjAwMDAwMDAwMCArMDIwMAorQEAgLTI4ODgsNiArMjg4OCw5IEBACisgQG9wdGlvbnstV2Zvcm1hdC1ub25saXRlcmFsfSwgQG9wdGlvbnstV2Zvcm1hdC1zZWN1cml0eX0sIGFuZAorIEBvcHRpb257LVdmb3JtYXQ9Mn0gYXJlIGF2YWlsYWJsZSwgYnV0IGFyZSBub3QgaW5jbHVkZWQgaW4gQG9wdGlvbnstV2FsbH0uCisgCisrTk9URTogSW4gR2VudG9vLCB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgZm9yIEMsIEMrKywgT2JqQywgT2JqQysrLgorK1RvIGRpc2FibGUsIHVzZSBAb3B0aW9uey1XZm9ybWF0PTB9LgorKworIEBpdGVtIC1XZm9ybWF0LXkyaworIEBvcGluZGV4IFdmb3JtYXQteTJrCisgQG9waW5kZXggV25vLWZvcm1hdC15MmsKK0BAIC0yOTQxLDYgKzI5NDQsMTEgQEAKKyBpbiBmdXR1cmUgd2FybmluZ3MgbWF5IGJlIGFkZGVkIHRvIEBvcHRpb257LVdmb3JtYXQtc2VjdXJpdHl9IHRoYXQgYXJlIG5vdAorIGluY2x1ZGVkIGluIEBvcHRpb257LVdmb3JtYXQtbm9ubGl0ZXJhbH0uKQorIAorK05PVEU6IEluIEdlbnRvbywgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGZvciBDLCBDKyssIE9iakMsIE9iakMrKy4KKytUbyBkaXNhYmxlLCB1c2UgQG9wdGlvbnstV25vLWZvcm1hdC1zZWN1cml0eX0sIG9yIGRpc2FibGUgYWxsIGZvcm1hdCB3YXJuaW5ncworK3dpdGggQG9wdGlvbnstV2Zvcm1hdD0wfS4gIFRvIG1ha2UgZm9ybWF0IHNlY3VyaXR5IHdhcm5pbmdzIGZhdGFsLCBzcGVjaWZ5CisrQG9wdGlvbnstV2Vycm9yPWZvcm1hdC1zZWN1cml0eX0uCisrCisgQGl0ZW0gLVdmb3JtYXQ9MgorIEBvcGluZGV4IFdmb3JtYXQ9MgorIEBvcGluZGV4IFduby1mb3JtYXQ9MgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS8xNTAtZGVmYXVsdC1mb3J0aWZ5LXNvdXJjZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMTUwLWRlZmF1bHQtZm9ydGlmeS1zb3VyY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ1YTdlOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMTUwLWRlZmF1bHQtZm9ydGlmeS1zb3VyY2UucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvZG9jL2ludm9rZS50ZXhpIGdjYy00LjQuNS9nY2MvZG9jL2ludm9rZS50ZXhpCistLS0gZ2NjLTQuNC41Lm9yaWcvZ2NjL2RvYy9pbnZva2UudGV4aQkyMDEwLTEwLTA5IDIyOjU5OjAzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9nY2MvZG9jL2ludm9rZS50ZXhpCTIwMTAtMTAtMDkgMjI6NTk6MzMuMDAwMDAwMDAwICswMjAwCitAQCAtNTQzMiw2ICs1NDMyLDExIEBACisgUGxlYXNlIG5vdGUgdGhlIHdhcm5pbmcgdW5kZXIgQG9wdGlvbnstZmdjc2V9IGFib3V0CisgaW52b2tpbmcgQG9wdGlvbnstTzJ9IG9uIHByb2dyYW1zIHRoYXQgdXNlIGNvbXB1dGVkIGdvdG9zLgorIAorK05PVEU6IEluIEdlbnRvbywgQG9wdGlvbnstRF9GT1JUSUZZX1NPVVJDRT0yfSBpcyBzZXQgYnkgZGVmYXVsdCwgYW5kIGlzCisrYWN0aXZhdGVkIHdoZW4gQG9wdGlvbnstT30gaXMgc2V0IHRvIDIgb3IgaGlnaGVyLiAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwKKytjb21waWxlLXRpbWUgYW5kIHJ1bi10aW1lIGNoZWNrcyBmb3Igc2V2ZXJhbCBsaWJjIGZ1bmN0aW9ucy4gIFRvIGRpc2FibGUsCisrc3BlY2lmeSBlaXRoZXIgQG9wdGlvbnstVV9GT1JUSUZZX1NPVVJDRX0gb3IgQG9wdGlvbnstRF9GT1JUSUZZX1NPVVJDRT0wfS4KKysKKyBAaXRlbSAtTzMKKyBAb3BpbmRleCBPMworIE9wdGltaXplIHlldCBtb3JlLiAgQG9wdGlvbnstTzN9IHR1cm5zIG9uIGFsbCBvcHRpbWl6YXRpb25zIHNwZWNpZmllZAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvZ2NjLmMgZ2NjLTQuNC41L2djYy9nY2MuYworLS0tIGdjYy00LjQuNS5vcmlnL2djYy9nY2MuYwkyMDEwLTAxLTA5IDAxOjA1OjA2LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNS9nY2MvZ2NjLmMJMjAxMC0xMC0wOSAyMjo1OTozMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC04MDcsNiArODA3LDcgQEAKKyAgJXtIfSAlQyAle0QqJlUqJkEqfSAle2kqfSAlWiAlaVwKKyAgJXtmbXVkZmxhcDotRF9NVURGTEFQIC1pbmNsdWRlIG1mLXJ1bnRpbWUuaH1cCisgICV7Zm11ZGZsYXB0aDotRF9NVURGTEFQIC1EX01VREZMQVBUSCAtaW5jbHVkZSBtZi1ydW50aW1lLmh9XAorKyAleyFEX0ZPUlRJRllfU09VUkNFOiV7IURfRk9SVElGWV9TT1VSQ0U9KjoleyFVX0ZPUlRJRllfU09VUkNFOi1EX0ZPUlRJRllfU09VUkNFPTJ9fX1cCisgICV7RXxNfE1NOiVXe28qfX0iOworIAorIC8qIFRoaXMgY29udGFpbnMgY3BwIG9wdGlvbnMgd2hpY2ggYXJlIGNvbW1vbiB3aXRoIGNjMV9vcHRpb25zIGFuZCBhcmUgcGFzc2VkCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzE2MC1uZXRic2Qtc3ltYm9saWMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzE2MC1uZXRic2Qtc3ltYm9saWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYxYjA3OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMTYwLW5ldGJzZC1zeW1ib2xpYy5wYXRjaApAQCAtMCwwICsxLDExIEBACitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvbmV0YnNkLWVsZi5oIGdjYy00LjQuNS9nY2MvY29uZmlnL25ldGJzZC1lbGYuaAorLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvbmV0YnNkLWVsZi5oCTIwMDctMDktMDMgMTg6MTQ6MDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2djYy9jb25maWcvbmV0YnNkLWVsZi5oCTIwMTAtMTAtMDkgMjI6NTk6NTcuMDAwMDAwMDAwICswMjAwCitAQCAtODIsNiArODIsNyBAQAorICNkZWZpbmUgTkVUQlNEX0xJTktfU1BFQ19FTEYgXAorICAgIiV7YXNzZXJ0Kn0gJXtSKn0gJXtycGF0aCp9IFwKKyAgICAle3NoYXJlZDotc2hhcmVkfSBcCisrICAgJXtzeW1ib2xpYzotQnN5bWJvbGljfSBcCisgICAgJXshc2hhcmVkOiBcCisgICAgICAtZGMgLWRwIFwKKyAgICAgICV7IW5vc3RkbGliOiBcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzE3MC1zcGFyYzY0LWJzZC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMTcwLXNwYXJjNjQtYnNkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZDliNTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzE3MC1zcGFyYzY0LWJzZC5wYXRjaApAQCAtMCwwICsxLDI5IEBACitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oIGdjYy00LjQuNS9nY2MvY29uZmlnL3NwYXJjL2ZyZWVic2QuaAorLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oCTIwMDctMDgtMDIgMTI6NDk6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oCTIwMTAtMTAtMDkgMjM6MDA6MDMuMDAwMDAwMDAwICswMjAwCitAQCAtMjUsOSArMjUsMjIgQEAKKyAvKiBGcmVlQlNEIG5lZWRzIHRoZSBwbGF0Zm9ybSBuYW1lIChzcGFyYzY0KSBkZWZpbmVkLgorICAgIEVtYWNzIG5lZWRzIHRvIGtub3cgaWYgdGhlIGFyY2ggaXMgNjQgb3IgMzItYml0cy4gICovCisgCistI3VuZGVmICBDUFBfQ1BVNjRfREVGQVVMVF9TUEVDCistI2RlZmluZSBDUFBfQ1BVNjRfREVGQVVMVF9TUEVDIFwKKy0gICItRF9fc3BhcmM2NF9fIC1EX19zcGFyY192OV9fIC1EX19zcGFyY3Y5IC1EX19hcmNoNjRfXyIKKysjdW5kZWYgIEZCU0RfVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMKKysjZGVmaW5lIEZCU0RfVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMoKSAgICAgICAgICAgICAgICAgIFwKKysgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBpZiAoVEFSR0VUX0FSQ0g2NCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjNjRfXyIpOyAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjX3Y5X18iKTsgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjdjkiKTsgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19zcGFyYyIpOyAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBidWlsdGluX2RlZmluZSAoIl9fc3BhcmNfXyIpOyAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHdoaWxlICgwKQorKworIAorICNkZWZpbmUgTElOS19TUEVDICIlKGxpbmtfYXJjaCkJCQkJCQlcCisgICAleyFtbm8tcmVsYXg6JXshcjotcmVsYXh9fQkJCQkJCVwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMTgwLWxpYmdvbXAtbm8td2Vycm9yLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS8xODAtbGliZ29tcC1uby13ZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkNTA2MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMTgwLWxpYmdvbXAtbm8td2Vycm9yLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvbGliZ29tcC9jb25maWd1cmUgZ2NjLTQuNC41L2xpYmdvbXAvY29uZmlndXJlCistLS0gZ2NjLTQuNC41Lm9yaWcvbGliZ29tcC9jb25maWd1cmUJMjAxMC0xMC0wMSAxMDoyNjoxOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvbGliZ29tcC9jb25maWd1cmUJMjAxMC0xMC0wOSAyMzowMDozMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMzM0LDcgKzMzMzQsNyBAQAorIAorICMgQWRkIC1XYWxsIC1XZXJyb3IgaWYgd2UgYXJlIHVzaW5nIEdDQy4KKyBpZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyI7IHRoZW4KKy0gIFhDRkxBR1M9IiRYQ0ZMQUdTIC1XYWxsIC1XZXJyb3IiCisrICBYQ0ZMQUdTPSIkWENGTEFHUyAtV2FsbCIKKyBmaQorIAorICMgRmluZCBvdGhlciBwcm9ncmFtcyB3ZSBuZWVkLgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS8xOTAtZmxhdHRlbi1zd2l0Y2gtc3RtdC0wMC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMTkwLWZsYXR0ZW4tc3dpdGNoLXN0bXQtMDAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRkNjhmZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMTkwLWZsYXR0ZW4tc3dpdGNoLXN0bXQtMDAucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2Mvc3RtdC5jIGdjYy00LjQuNS9nY2Mvc3RtdC5jCistLS0gZ2NjLTQuNC41Lm9yaWcvZ2NjL3N0bXQuYwkyMDEwLTAzLTA4IDEyOjQ2OjI4LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNS9nY2Mvc3RtdC5jCTIwMTAtMTAtMDkgMjM6MDE6MDEuMDAwMDAwMDAwICswMjAwCitAQCAtMjM3Nyw3ICsyMzc3LDExIEBACisgCSAgdXNlX2Nvc3RfdGFibGUKKyAJICAgID0gKFRSRUVfQ09ERSAob3JpZ190eXBlKSAhPSBFTlVNRVJBTF9UWVBFCisgCSAgICAgICAmJiBlc3RpbWF0ZV9jYXNlX2Nvc3RzIChjYXNlX2xpc3QpKTsKKy0JICBiYWxhbmNlX2Nhc2Vfbm9kZXMgKCZjYXNlX2xpc3QsIE5VTEwpOworKwkgIC8qIFdoZW4gb3B0aW1pemluZyBmb3Igc2l6ZSwgd2Ugd2FudCBhIHN0cmFpZ2h0IGxpc3QgdG8gYXZvaWQKKysJICAgICBqdW1wcyBhcyBtdWNoIGFzIHBvc3NpYmxlLiBUaGlzIGJhc2ljYWxseSBjcmVhdGVzIGFuIGlmLWVsc2UKKysJICAgICBjaGFpbi4gICovCisrCSAgaWYgKCFvcHRpbWl6ZV9zaXplKQorKwkgICAgYmFsYW5jZV9jYXNlX25vZGVzICgmY2FzZV9saXN0LCBOVUxMKTsKKyAJICBlbWl0X2Nhc2Vfbm9kZXMgKGluZGV4LCBjYXNlX2xpc3QsIGRlZmF1bHRfbGFiZWwsIGluZGV4X3R5cGUpOworIAkgIGlmIChkZWZhdWx0X2xhYmVsKQorIAkgICAgZW1pdF9qdW1wIChkZWZhdWx0X2xhYmVsKTsKK0BAIC0yOTQzLDYgKzI5NDcsNyBAQAorIAkgICAgeworIAkgICAgICBpZiAoIW5vZGVfaGFzX2xvd19ib3VuZCAobm9kZSwgaW5kZXhfdHlwZSkpCisgCQl7CisrCQkgIGlmICghb3B0aW1pemVfc2l6ZSkgLyogZG9uJ3QgamwgdG8gdGhlIC5kZWZhdWx0X2xhYmVsLiAqLworIAkJICBlbWl0X2NtcF9hbmRfanVtcF9pbnNucyAoaW5kZXgsCisgCQkJCQkgICBjb252ZXJ0X21vZGVzCisgCQkJCQkgICAobW9kZSwgaW1vZGUsCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzIwMC1saWJpYmVydHkuaC1hc3ByaW50Zi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMjAwLWxpYmliZXJ0eS5oLWFzcHJpbnRmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZTQ1MjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzIwMC1saWJpYmVydHkuaC1hc3ByaW50Zi5wYXRjaApAQCAtMCwwICsxLDE1IEBACitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2luY2x1ZGUvbGliaWJlcnR5LmggZ2NjLTQuNC41L2luY2x1ZGUvbGliaWJlcnR5LmgKKy0tLSBnY2MtNC40LjUub3JpZy9pbmNsdWRlL2xpYmliZXJ0eS5oCTIwMDgtMDYtMjQgMDM6NDI6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2luY2x1ZGUvbGliaWJlcnR5LmgJMjAxMC0xMC0wOSAyMzowMTozMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC01OTUsOCArNTk1LDExIEBACisgLyogTGlrZSBzcHJpbnRmIGJ1dCBwcm92aWRlcyBhIHBvaW50ZXIgdG8gbWFsbG9jJ2Qgc3RvcmFnZSwgd2hpY2ggbXVzdAorICAgIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuICAqLworIAorKy8qIGFzcHJpbnRmIG1heSBiZSBkZWNsYXJlZCBhcyBhIG1hY3JvIGJ5IGdsaWJjIHdpdGggX19VU0VfRk9SVElGWV9MRVZFTC4gICovCisrI2lmbmRlZiBhc3ByaW50ZgorIGV4dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgLi4uKSBBVFRSSUJVVEVfUFJJTlRGXzI7CisgI2VuZGlmCisrI2VuZGlmCisgCisgI2lmICFIQVZFX0RFQ0xfVkFTUFJJTlRGCisgLyogTGlrZSB2c3ByaW50ZiBidXQgcHJvdmlkZXMgYSBwb2ludGVyIHRvIG1hbGxvYydkIHN0b3JhZ2UsIHdoaWNoCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzIxMC1hcm0tdW5icmVhay1hcm12NHQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzIxMC1hcm0tdW5icmVhay1hcm12NHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk2YTgwYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMjEwLWFybS11bmJyZWFrLWFybXY0dC5wYXRjaApAQCAtMCwwICsxLDEyIEBACitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCBnY2MtNC40LjUvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCistLS0gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCTIwMDctMTEtMDggMTQ6NDQ6MDkuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC41L2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAkyMDEwLTEwLTA5IDIzOjAxOjU5LjAwMDAwMDAwMCArMDIwMAorQEAgLTQ0LDcgKzQ0LDcgQEAKKyAgICBUaGUgQVJNMTBURE1JIGNvcmUgaXMgdGhlIGRlZmF1bHQgZm9yIGFybXY1dCwgc28gc2V0CisgICAgU1VCVEFSR0VUX0NQVV9ERUZBVUxUIHRvIGFjaGlldmUgdGhpcy4gICovCisgI3VuZGVmICBTVUJUQVJHRVRfQ1BVX0RFRkFVTFQKKy0jZGVmaW5lIFNVQlRBUkdFVF9DUFVfREVGQVVMVCBUQVJHRVRfQ1BVX2FybTEwdGRtaQorKyNkZWZpbmUgU1VCVEFSR0VUX0NQVV9ERUZBVUxUIFRBUkdFVF9DUFVfYXJtOXRkbWkKKyAKKyAvKiBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUIGlzIHNldCBpbgorICAgIGNvbmZpZy5nY2MgZm9yIGJpZyBlbmRpYW4gY29uZmlndXJhdGlvbnMuICAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS8yMjAtbGliaWJlcnR5LXBpYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMjIwLWxpYmliZXJ0eS1waWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNiMTgwYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMjIwLWxpYmliZXJ0eS1waWMucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9saWJpYmVydHkvTWFrZWZpbGUuaW4gZ2NjLTQuNC41L2xpYmliZXJ0eS9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjQuNS5vcmlnL2xpYmliZXJ0eS9NYWtlZmlsZS5pbgkyMDA4LTEwLTIyIDE1OjMwOjE5LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9saWJpYmVydHkvTWFrZWZpbGUuaW4JMjAxMC0xMC0wOSAyMzowMjoyOC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMjcsNiArMjI3LDcgQEAKKyAJICAkKEFSKSAkKEFSX0ZMQUdTKSAkKFRBUkdFVExJQikgXAorIAkgICAgJChSRVFVSVJFRF9PRklMRVMpICQoRVhUUkFfT0ZJTEVTKSAkKExJQk9CSlMpOyBcCisgCSAgJChSQU5MSUIpICQoVEFSR0VUTElCKTsgXAorKwkgIGNwICQoVEFSR0VUTElCKSAuLi8gOyBcCisgCSAgY2QgLi47IFwKKyAJZWxzZSB0cnVlOyBmaQorIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS8yMzAtc3VwZXJoLWRlZmF1bHQtbXVsdGlsaWIucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzIzMC1zdXBlcmgtZGVmYXVsdC1tdWx0aWxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGYyM2E5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS8yMzAtc3VwZXJoLWRlZmF1bHQtbXVsdGlsaWIucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnLmdjYyBnY2MtNC40LjUvZ2NjL2NvbmZpZy5nY2MKKy0tLSBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnLmdjYwkyMDEwLTA2LTE0IDAwOjE2OjUwLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9nY2MvY29uZmlnLmdjYwkyMDEwLTEwLTA5IDIzOjAyOjU2LjAwMDAwMDAwMCArMDIwMAorQEAgLTIxNDAsNyArMjE0MCw3IEBACisgCWlmIHRlc3QgeCR7c2hfbXVsdGlsaWJzfSA9IHggOyB0aGVuCisgCQljYXNlICR7dGFyZ2V0fSBpbgorIAkJc2g2NC1zdXBlcmgtbGludXgqIHwgXAorLQkJc2hbMTIzNF0qKQlzaF9tdWx0aWxpYnM9JHtzaF9jcHVfdGFyZ2V0fSA7OworKwkJc2hbMTIzNF0qKQlzaF9tdWx0aWxpYnM9YGNkICR7c3JjZGlyfS9jb25maWcvc2ggOyBlY2hvIHQtbWxpYi1zaFsxLTRdKiB8IHNlZCAnczp0LW1saWItc2g6LG06ZztzOiA6OmcnYCA7OworIAkJc2g2NCogfCBzaDUqKQlzaF9tdWx0aWxpYnM9bTUtMzJtZWRpYSxtNS0zMm1lZGlhLW5vZnB1LG01LWNvbXBhY3QsbTUtY29tcGFjdC1ub2ZwdSxtNS02NG1lZGlhLG01LTY0bWVkaWEtbm9mcHUgOzsKKyAJCXNoLXN1cGVyaC0qKQlzaF9tdWx0aWxpYnM9bTQsbTQtc2luZ2xlLG00LXNpbmdsZS1vbmx5LG00LW5vZnB1IDs7CisgCQlzaCotKi1saW51eCopCXNoX211bHRpbGlicz1tMSxtM2UsbTQgOzsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMjQwLWxpYnN0ZGMrKy1waWMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzI0MC1saWJzdGRjKystcGljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZGU1YTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzI0MC1saWJzdGRjKystcGljLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbSBnY2MtNC40LjUvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQorLS0tIGdjYy00LjQuNS5vcmlnL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuYW0JMjAwOS0wOC0yNiAyMTowNDoxMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQkyMDEwLTEwLTA5IDIzOjAzOjI2LjAwMDAwMDAwMCArMDIwMAorQEAgLTM1Niw2ICszNTYsMTMgQEAKKyAJICAkKE9QVF9MREZMQUdTKSAkKFNFQ1RJT05fTERGTEFHUykgJChBTV9DWFhGTEFHUykgJChMVExERkxBR1MpIC1vICRACisgCisgCisraW5zdGFsbC1leGVjLWxvY2FsOgorKwlwaWNfb2Jqcz1gc2VkIC1uICJzOic6Omc7czpecGljX29iamVjdD06OnAiICoubG8gfCBncmVwIC12ICdebm9uZSQkJ2A7IFwKKysJaWYgWyB4IiQkcGljX29ianMiICE9IHggXTsgdGhlbiBcCisrCQkkKEFSKSBjcnUgbGlic3RkYysrX3BpYy5hICQkcGljX29ianMgJCh0b3BfYnVpbGRkaXIpL2xpYnN1cGMrKy8qLm8gfHwgZXhpdCAxOyBcCisrCQkkKElOU1RBTExfREFUQSkgbGlic3RkYysrX3BpYy5hICQoREVTVERJUikkKHRvb2xleGVjbGliZGlyKSB8fCBleGl0IDE7IFwKKysJZmkKKysKKyAjIEFkZGVkIGJpdHMgdG8gYnVpbGQgZGVidWcgbGlicmFyeS4KKyBpZiBHTElCQ1hYX0JVSUxEX0RFQlVHCisgYWxsLWxvY2FsOiBidWlsZF9kZWJ1ZworZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluIGdjYy00LjQuNS9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCistLS0gZ2NjLTQuNC41Lm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgkyMDA5LTA4LTI2IDIxOjA0OjExLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCTIwMTAtMTAtMDkgMjM6MDM6MjYuMDAwMDAwMDAwICswMjAwCitAQCAtNzI2LDcgKzcyNiw3IEBACisgCisgaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWRhdGEtbG9jYWwKKyAKKy1pbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUworK2luc3RhbGwtZXhlYy1hbTogaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTIGluc3RhbGwtZXhlYy1sb2NhbAorIAorIGluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisgCitAQCAtNzY1LDcgKzc2NSw3IEBACisgCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKyAJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorIAl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWluZm8tYW0gXAorLQl1bmluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUworKwl1bmluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUyBpbnN0YWxsLWV4ZWMtbG9jYWwKKyAKKyAKKyAjIFN5bWJvbCB2ZXJzaW9uaW5nIGZvciBzaGFyZWQgbGlicmFyaWVzLgorQEAgLTk0Nyw2ICs5NDcsMTQgQEAKKyBpbnN0YWxsX2RlYnVnOgorIAkoY2QgJHtkZWJ1Z2Rpcn0gJiYgJChNQUtFKSBcCisgCXRvb2xleGVjbGliZGlyPSQoZ2xpYmN4eF90b29sZXhlY2xpYmRpcikvZGVidWcgaW5zdGFsbCkKKysKKytpbnN0YWxsLWV4ZWMtbG9jYWw6CisrCXBpY19vYmpzPWBzZWQgLW4gInM6Jzo6ZztzOl5waWNfb2JqZWN0PTo6cCIgKi5sbyB8IGdyZXAgLXYgJ15ub25lJCQnYDsgXAorKwlpZiBbIHgiJCRwaWNfb2JqcyIgIT0geCBdOyB0aGVuIFwKKysJCSQoQVIpIGNydSBsaWJzdGRjKytfcGljLmEgJCRwaWNfb2JqcyAkKHRvcF9idWlsZGRpcikvbGlic3VwYysrLyoubyB8fCBleGl0IDE7IFwKKysJCSQoSU5TVEFMTF9EQVRBKSBsaWJzdGRjKytfcGljLmEgJChERVNURElSKSQodG9vbGV4ZWNsaWJkaXIpIHx8IGV4aXQgMTsgXAorKwlmaQorKworICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisgIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisgLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS8yNTAtaWE2NC1ub3RlR05Vc3RhY2sucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzI1MC1pYTY0LW5vdGVHTlVzdGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDEyOGU0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS8yNTAtaWE2NC1ub3RlR05Vc3RhY2sucGF0Y2gKQEAgLTAsMCArMSw3OSBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtIGdjYy00LjQuNS9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtCistLS0gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGJlZ2luLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtCTIwMTAtMTAtMDkgMjM6MDM6NTUuMDAwMDAwMDAwICswMjAwCitAQCAtMjUyLDMgKzI1Miw3IEBACisgLndlYWsgX19jeGFfZmluYWxpemUKKyAjZW5kaWYKKyAud2VhayBfSnZfUmVnaXN0ZXJDbGFzc2VzCisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtIGdjYy00LjQuNS9nY2MvY29uZmlnL2lhNjQvY3J0ZW5kLmFzbQorLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtCTIwMTAtMTAtMDkgMjM6MDM6NTUuMDAwMDAwMDAwICswMjAwCitAQCAtMTE5LDMgKzExOSw3IEBACisgCisgCWJyLnJldC5zcHRrLm1hbnkgcnAKKyAJLmVuZHAgX19kb19nbG9iYWxfY3RvcnNfYXV4CisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRpLmFzbSBnY2MtNC40LjUvZ2NjL2NvbmZpZy9pYTY0L2NydGkuYXNtCistLS0gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGkuYXNtCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2djYy9jb25maWcvaWE2NC9jcnRpLmFzbQkyMDEwLTEwLTA5IDIzOjAzOjU1LjAwMDAwMDAwMCArMDIwMAorQEAgLTUxLDMgKzUxLDcgQEAKKyAJLmJvZHkKKyAKKyAjIGVuZCBvZiBjcnRpLmFzbQorKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0bi5hc20gZ2NjLTQuNC41L2djYy9jb25maWcvaWE2NC9jcnRuLmFzbQorLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRuLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9nY2MvY29uZmlnL2lhNjQvY3J0bi5hc20JMjAxMC0xMC0wOSAyMzowMzo1NS4wMDAwMDAwMDAgKzAyMDAKK0BAIC00MSwzICs0MSw3IEBACisgCWJyLnJldC5zcHRrLm1hbnkgYjAKKyAKKyAjIGVuZCBvZiBjcnRuLmFzbQorKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbSBnY2MtNC40LjUvZ2NjL2NvbmZpZy9pYTY0L2xpYjFmdW5jcy5hc20KKy0tLSBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbQkyMDEwLTEwLTA5IDIzOjAzOjU1LjAwMDAwMDAwMCArMDIwMAorQEAgLTc5MywzICs3OTMsNyBAQAorIAkuZW5kcCBfX2Zsb2F0dGl0ZgorICNlbmRpZgorICNlbmRpZgorKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL2lhNjQvbGludXguaCBnY2MtNC40LjUvZ2NjL2NvbmZpZy9pYTY0L2xpbnV4LmgKKy0tLSBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL2lhNjQvbGludXguaAkyMDA5LTAyLTEyIDE3OjMwOjUzLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNS9nY2MvY29uZmlnL2lhNjQvbGludXguaAkyMDEwLTEwLTA5IDIzOjAzOjU1LjAwMDAwMDAwMCArMDIwMAorQEAgLTUsNiArNSw4IEBACisgCisgI2RlZmluZSBUQVJHRVRfVkVSU0lPTiBmcHJpbnRmIChzdGRlcnIsICIgKElBLTY0KSBMaW51eCIpOworIAorKyNkZWZpbmUgVEFSR0VUX0FTTV9GSUxFX0VORCBmaWxlX2VuZF9pbmRpY2F0ZV9leGVjX3N0YWNrCisrCisgLyogVGhpcyBpcyBmb3IgLXByb2ZpbGUgdG8gdXNlIC1sY19wIGluc3RlYWQgb2YgLWxjLiAgKi8KKyAjdW5kZWYgQ0MxX1NQRUMKKyAjZGVmaW5lIENDMV9TUEVDICIle3Byb2ZpbGU6LXB9ICV7Ryp9IgorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9wcGMtYXNtLmggZ2NjLTQuNC41L2djYy9jb25maWcvcnM2MDAwL3BwYy1hc20uaAorLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvcnM2MDAwL3BwYy1hc20uaAkyMDA4LTEwLTEzIDE3OjQ0OjI2LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9nY2MvY29uZmlnL3JzNjAwMC9wcGMtYXNtLmgJMjAxMC0xMC0wOSAyMzowMzo1NS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNzIsNyArMTcyLDcgQEAKKyAJLnNpemUgRlVOQ19OQU1FKG5hbWUpLEdMVUUoLkwsbmFtZSktRlVOQ19OQU1FKG5hbWUpCisgI2VuZGlmCisgCistI2lmIGRlZmluZWQgX19saW51eF9fICYmICFkZWZpbmVkIF9fcG93ZXJwYzY0X18KKysjaWYgZGVmaW5lZCBfX2xpbnV4X18KKyAJLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrCisgCS5wcmV2aW91cworICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS8yNjAtc2gtbGliZ2NjLXN0YWNrcy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMjYwLXNoLWxpYmdjYy1zdGFja3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2YmFmMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMjYwLXNoLWxpYmdjYy1zdGFja3MucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL3NoL2xpYjFmdW5jcy5hc20gZ2NjLTQuNC41L2djYy9jb25maWcvc2gvbGliMWZ1bmNzLmFzbQorLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvc2gvbGliMWZ1bmNzLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9nY2MvY29uZmlnL3NoL2xpYjFmdW5jcy5hc20JMjAxMC0xMC0wOSAyMzowNDoyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMCw2ICszMCwxMSBAQAorICEhIHJlY29kZWQgaW4gYXNzZW1ibHkgYnkgVG9zaGl5YXN1IE1vcml0YQorICEhIHRtQG5ldGNvbS5jb20KKyAKKysjaWYgZGVmaW5lZChfX0VMRl9fKSAmJiBkZWZpbmVkKF9fbGludXhfXykKKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2ssIiIsJXByb2diaXRzCisrLnByZXZpb3VzCisrI2VuZGlmCisrCisgLyogU0gyIG9wdGltaXphdGlvbnMgZm9yIF9fX2FzaHJzaTMsIF9fX2FzaGxzaTMsIF9fX2xzaHJzaTMgYW5kCisgICAgRUxGIGxvY2FsIGxhYmVsIHByZWZpeGVzIGJ5IEoib3JuIFJlbm5lY2tlCisgICAgYW15bGFhckBjeWdudXMuY29tICAqLworZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL3NoL2xpbnV4LWF0b21pYy5hc20gZ2NjLTQuNC41L2djYy9jb25maWcvc2gvbGludXgtYXRvbWljLmFzbQorLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvc2gvbGludXgtYXRvbWljLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9nY2MvY29uZmlnL3NoL2xpbnV4LWF0b21pYy5hc20JMjAxMC0xMC0wOSAyMzowNDoyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMzYsMyArMTM2LDYgQEAKKyBBVE9NSUNfRkVUQ0hfQU5EX0NPTUJPUChuYW5kLGFuZCxub3QsNCxsLG1vdikKKyAKKyAjZW5kaWYgLyogISBfX1NINV9fICovCisrCisrLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrLCIiLCVwcm9nYml0cworKy5wcmV2aW91cwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS8yNzAtc2gtcHIyNDgzNi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMjcwLXNoLXByMjQ4MzYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFjYTYzZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMjcwLXNoLXByMjQ4MzYucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlndXJlIGdjYy00LjQuNS9nY2MvY29uZmlndXJlCistLS0gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZ3VyZQkyMDEwLTEwLTA5IDIyOjU4OjM2LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9nY2MvY29uZmlndXJlCTIwMTAtMTAtMDkgMjM6MDQ6NTAuMDAwMDAwMDAwICswMjAwCitAQCAtMjIyODUsNyArMjIyODUsNyBAQAorIAl0bHNfZmlyc3RfbWlub3I9MTQKKyAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCisgCTs7CistICBzaC0qLSogfCBzaFszNF0tKi0qKQorKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCisgICAgIGNvbmZ0ZXN0X3M9JworIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKKyBmb286CS5sb25nCTI1CitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWd1cmUuYWMgZ2NjLTQuNC41L2djYy9jb25maWd1cmUuYWMKKy0tLSBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlndXJlLmFjCTIwMTAtMTAtMDkgMjI6NTg6MzYuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2djYy9jb25maWd1cmUuYWMJMjAxMC0xMC0wOSAyMzowNDo1MC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNzI4LDcgKzI3MjgsNyBAQAorIAl0bHNfZmlyc3RfbWlub3I9MTQKKyAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCisgCTs7CistICBzaC0qLSogfCBzaFszNF0tKi0qKQorKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCisgICAgIGNvbmZ0ZXN0X3M9JworIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKKyBmb286CS5sb25nCTI1CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzI4MC1mcmVlYnNkLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS8yODAtZnJlZWJzZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjZiMzRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS8yODAtZnJlZWJzZC5wYXRjaApAQCAtMCwwICsxLDk0IEBACitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvZnJlZWJzZC1zcGVjLmggZ2NjLTQuNC41L2djYy9jb25maWcvZnJlZWJzZC1zcGVjLmgKKy0tLSBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL2ZyZWVic2Qtc3BlYy5oCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2djYy9jb25maWcvZnJlZWJzZC1zcGVjLmgJMjAxMC0xMC0wOSAyMzowOTo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC02MSw2ICs2MSw4IEBACisgCWJ1aWx0aW5fYXNzZXJ0ICgic3lzdGVtPXVuaXgiKTsJCQkJCVwKKyAJYnVpbHRpbl9hc3NlcnQgKCJzeXN0ZW09YnNkIik7CQkJCQlcCisgCWJ1aWx0aW5fYXNzZXJ0ICgic3lzdGVtPUZyZWVCU0QiKTsJCQkJXAorKwlpZighKGZsYWdfaXNvICYmIChjX2RpYWxlY3RfY3h4ICgpID8gY3h4X2RpYWxlY3QgPT0gY3h4OTggOiAhZmxhZ19pc29jOTkpKSkJXAorKwkJYnVpbHRpbl9kZWZpbmUoIl9MT05HTE9ORyIpOwkJCQlcCisgCUZCU0RfVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMoKTsJCQkJCVwKKyAgICAgfQkJCQkJCQkJCVwKKyAgIHdoaWxlICgwKQorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL3QtZnJlZWJzZC1laCBnY2MtNC40LjUvZ2NjL2NvbmZpZy90LWZyZWVic2QtZWgKKy0tLSBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL3QtZnJlZWJzZC1laAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNS9nY2MvY29uZmlnL3QtZnJlZWJzZC1laAkyMDEwLTEwLTA5IDIzOjA5OjUzLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw0IEBACisrIyBVc2UgdW53aW5kLWR3Mi1mZGUtZ2xpYmMKKytMSUIyQURERUggPSAkKHNyY2RpcikvdW53aW5kLWR3Mi5jICQoc3JjZGlyKS91bndpbmQtZHcyLWZkZS1nbGliYy5jIFwKKysgICQoc3JjZGlyKS91bndpbmQtc2psai5jICQoc3JjZGlyKS9ndGhyLWduYXQuYyAkKHNyY2RpcikvdW53aW5kLWMuYworK0xJQjJBRERFSERFUCA9IHVud2luZC5pbmMgdW53aW5kLWR3Mi1mZGUuaCB1bndpbmQtZHcyLWZkZS5jCitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcuZ2NjIGdjYy00LjQuNS9nY2MvY29uZmlnLmdjYworLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcuZ2NjCTIwMTAtMTAtMDkgMjM6MDI6NTYuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2djYy9jb25maWcuZ2NjCTIwMTAtMTAtMDkgMjM6MDk6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtNDU2LDcgKzQ1Niw3IEBACisgICAjIHBsZWFzZXMgYXJvdW5kIHRoZSBwcm92aWRlZCBjb3JlIHNldHRpbmcuCisgICBnYXM9eWVzCisgICBnbnVfbGQ9eWVzCistICBleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBjcnRlbmQubyBjcnRiZWdpblMubyBjcnRlbmRTLm8iCisrICBleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBjcnRlbmQubyBjcnRiZWdpblMubyBjcnRlbmRTLm8gY3J0YmVnaW5ULm8iCisgICBmYnNkX21ham9yPWBlY2hvICR7dGFyZ2V0fSB8IHNlZCAtZSAncy8uKmZyZWVic2QvL2cnIHwgc2VkIC1lICdzL1wuLiovL2cnYAorICAgdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBGQlNEX01BSk9SPSR7ZmJzZF9tYWpvcn0iCisgICB0bWFrZV9maWxlPSJ0LXNsaWJnY2MtZWxmLXZlciB0LWZyZWVic2QiCitAQCAtMTA0OCw2ICsxMDQ4LDEwIEBACisgCTs7CisgaVszNDU2N104Ni0qLWZyZWVic2QqKQorIAl0bV9maWxlPSIke3RtX2ZpbGV9IGkzODYvdW5peC5oIGkzODYvYXR0LmggZGJ4ZWxmLmggZWxmb3MuaCAke2Zic2RfdG1fZmlsZX0gaTM4Ni9mcmVlYnNkLmgiCisrCWZic2RfbWFqb3I9YGVjaG8gJHt0YXJnZXR9IHwgc2VkIC1lICdzLy4qZnJlZWJzZC8vZycgfCBzZWQgLWUgJ3MvXC4uKi8vZydgCisrCWlmIHRlc3QgJHtmYnNkX21ham9yfSAtZ2UgNzsgdGhlbgorKwkJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSB0LWZyZWVic2QtZWgiCisrCWZpCisgCTs7CisgeDg2XzY0LSotZnJlZWJzZCopCisgCXRtX2ZpbGU9IiR7dG1fZmlsZX0gaTM4Ni91bml4LmggaTM4Ni9hdHQuaCBkYnhlbGYuaCBlbGZvcy5oICR7ZmJzZF90bV9maWxlfSBpMzg2L3g4Ni02NC5oIGkzODYvZnJlZWJzZC5oIGkzODYvZnJlZWJzZDY0LmgiCitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9jcnRzdHVmZi5jIGdjYy00LjQuNS9nY2MvY3J0c3R1ZmYuYworLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jcnRzdHVmZi5jCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2djYy9jcnRzdHVmZi5jCTIwMTAtMTAtMDkgMjM6MDk6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtODUsMTMgKzg1LDE1IEBACisgICAgICYmICFkZWZpbmVkKE9CSkVDVF9GT1JNQVRfRkxBVCkgXAorICAgICAmJiBkZWZpbmVkKEhBVkVfTERfRUhfRlJBTUVfSERSKSBcCisgICAgICYmICFkZWZpbmVkKGluaGliaXRfbGliYykgJiYgIWRlZmluZWQoQ1JUU1RVRkZUX08pIFwKKy0gICAgJiYgZGVmaW5lZChfX0dMSUJDX18pICYmIF9fR0xJQkNfXyA+PSAyCisrICAgICYmICgoZGVmaW5lZChfX0dMSUJDX18pICYmIF9fR0xJQkNfXyA+PSAyKSBcCisrICAgIHx8IChkZWZpbmVkKF9fRnJlZUJTRF92ZXJzaW9uKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMjIpKQorICNpbmNsdWRlIDxsaW5rLmg+CisgLyogdUNsaWJjIHByZXRlbmRzIHRvIGJlIGdsaWJjIDIuMiBhbmQgRFRfQ09ORklHIGlzIGRlZmluZWQgaW4gaXRzIGxpbmsuaC4KKyAgICBCdXQgaXQgZG9lc24ndCB1c2UgUFRfR05VX0VIX0ZSQU1FIEVMRiBzZWdtZW50IGN1cnJlbnRseS4gICovCisgIyBpZiAhZGVmaW5lZChfX1VDTElCQ19fKSBcCistICAgICAmJiAoX19HTElCQ19fID4gMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID4gMikgXAorLSAgICAgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA9PSAyICYmIGRlZmluZWQoRFRfQ09ORklHKSkpCisrICAgICB8fCAoX19HTElCQ19fID4gMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID4gMikgXAorKyAgICAgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA9PSAyICYmIGRlZmluZWQoRFRfQ09ORklHKSkpIFwKKysgICAgIHx8IChfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMjIpCisgIyAgZGVmaW5lIFVTRV9QVF9HTlVfRUhfRlJBTUUKKyAjIGVuZGlmCisgI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy91bndpbmQtZHcyLWZkZS1nbGliYy5jIGdjYy00LjQuNS9nY2MvdW53aW5kLWR3Mi1mZGUtZ2xpYmMuYworLS0tIGdjYy00LjQuNS5vcmlnL2djYy91bndpbmQtZHcyLWZkZS1nbGliYy5jCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2djYy91bndpbmQtZHcyLWZkZS1nbGliYy5jCTIwMTAtMTAtMDkgMjM6MDk6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtNDYsOCArNDYsOSBAQAorICNpbmNsdWRlICJndGhyLmgiCisgCisgI2lmICFkZWZpbmVkKGluaGliaXRfbGliYykgJiYgZGVmaW5lZChIQVZFX0xEX0VIX0ZSQU1FX0hEUikgXAorLSAgICAmJiAoX19HTElCQ19fID4gMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID4gMikgXAorLQl8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID09IDIgJiYgZGVmaW5lZChEVF9DT05GSUcpKSkKKysgICAgJiYgKChfX0dMSUJDX18gPiAyIHx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPiAyKSBcCisrCXx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPT0gMiAmJiBkZWZpbmVkKERUX0NPTkZJRykpKSBcCisrICAgIHx8IChfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMjIgKSkKKyAKKyAjaWZuZGVmIF9fUkVMT0NfUE9JTlRFUgorICMgZGVmaW5lIF9fUkVMT0NfUE9JTlRFUihwdHIsIGJhc2UpICgocHRyKSArIChiYXNlKSkKK0BAIC02Myw2ICs2NCwxMyBAQAorICNkZWZpbmUgUFRfR05VX0VIX0ZSQU1FIChQVF9MT09TICsgMHg0NzRlNTUwKQorICNlbmRpZgorIAorKy8qIFN1cHBvcnQgRnJlZUJTRCAqLworKyNpZm5kZWYgRWxmVworKyMgaWZkZWYgX19FbGZOCisrIyAgZGVmaW5lIEVsZlcgX19FbGZOCisrIyBlbmRpZgorKyNlbmRpZgorKworIHN0cnVjdCB1bndfZWhfY2FsbGJhY2tfZGF0YQorIHsKKyAgIF9VbndpbmRfUHRyIHBjOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS8yOTAtZnJlZWJzZC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMjkwLWZyZWVic2QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhkNjMyZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMjkwLWZyZWVic2QucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL2ZyZWVic2Qtc3BlYy5oIGdjYy00LjQuNS9nY2MvY29uZmlnL2ZyZWVic2Qtc3BlYy5oCistLS0gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZy9mcmVlYnNkLXNwZWMuaAkyMDEwLTEwLTA5IDIzOjA5OjUzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9nY2MvY29uZmlnL2ZyZWVic2Qtc3BlYy5oCTIwMTAtMTAtMDkgMjM6MTA6MDIuMDAwMDAwMDAwICswMjAwCitAQCAtODYsOSArODYsMTAgQEAKKyAjZGVmaW5lIEZCU0RfU1RBUlRGSUxFX1NQRUMgXAorICAgIiV7IXNoYXJlZDogXAorICAgICAgJXtwZzpnY3J0MS5vJXN9ICV7IXBnOiV7cDpnY3J0MS5vJXN9IFwKKy0JCSAgICAgICAleyFwOiV7cHJvZmlsZTpnY3J0MS5vJXN9IFwKKy0JCQkgJXshcHJvZmlsZTpjcnQxLm8lc319fX0gXAorLSAgIGNydGkubyVzICV7IXNoYXJlZDpjcnRiZWdpbi5vJXN9ICV7c2hhcmVkOmNydGJlZ2luUy5vJXN9IgorKwkleyFwOiV7cHJvZmlsZTpnY3J0MS5vJXN9IFwKKysJICV7IXByb2ZpbGU6Y3J0MS5vJXN9fX19IFwKKysgICBjcnRpLm8lcyBcCisrICAgJXtzdGF0aWM6Y3J0YmVnaW5ULm8lcztzaGFyZWQ6Y3J0YmVnaW5TLm8lczs6Y3J0YmVnaW4ubyVzfSIKKyAKKyAvKiBQcm92aWRlIGEgRU5ERklMRV9TUEVDIGFwcHJvcHJpYXRlIGZvciBGcmVlQlNELiAgSGVyZSB3ZSB0YWNrIG9uCisgICAgdGhlIG1hZ2ljYWwgY3J0ZW5kLm8gZmlsZSAoc2VlIGNydHN0dWZmLmMpIHdoaWNoIHByb3ZpZGVzIHBhcnQgb2YgCitAQCAtMTI2LDcgKzEyNyw4IEBACisgICAgICV7cGc6ICAtbGNfcH0JCQkJCQkJXAorICAgfSIKKyAjZWxzZQorLSNpZiBGQlNEX01BSk9SIDwgNQorKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKysjaWYgX19GcmVlQlNEX3ZlcnNpb24gPCA1MDAwMTYKKyAjZGVmaW5lIEZCU0RfTElCX1NQRUMgIgkJCQkJCQlcCisgICAleyFzaGFyZWQ6CQkJCQkJCQlcCisgICAgICV7IXBnOgkJCQkJCQkJXAorQEAgLTEzNiwxNyArMTM4LDM0IEBACisgICAgICAgJXshcHRocmVhZDotbGNfcH0JCQkJCQkJXAorICAgICAgICV7cHRocmVhZDotbGNfcl9wfX0JCQkJCQlcCisgICB9IgorLSNlbHNlCisrI2VsaWYgX19GcmVlQlNEX3ZlcnNpb24gPCA3MDAwMjIKKyAjZGVmaW5lIEZCU0RfTElCX1NQRUMgIgkJCQkJCQlcCisgICAleyFzaGFyZWQ6CQkJCQkJCQlcCisgICAgICV7IXBnOiAle3B0aHJlYWQ6LWxwdGhyZWFkfSAtbGN9CQkJCQlcCisgICAgICV7cGc6ICAle3B0aHJlYWQ6LWxwdGhyZWFkX3B9IC1sY19wfQkJCQlcCisgICB9IgorKyNlbHNlCisrI2RlZmluZSBGQlNEX0xJQl9TUEVDICIJCQkJCQkJXAorKyAgJXshc2hhcmVkOgkJCQkJCQkJXAorKyAgICAleyFwZzogJXtwdGhyZWFkOi1scHRocmVhZH0gLWxjfQkJCQkJXAorKyAgICAle3BnOiAgJXtwdGhyZWFkOi1scHRocmVhZF9wfSAtbGNfcH19CQkJCVwKKysgICV7c2hhcmVkOgkJCQkJCQkJXAorKyAgICAle3B0aHJlYWQ6LWxwdGhyZWFkfSAtbGN9CQkJCQkJXAorKyAgIgorICNlbmRpZgorICNlbmRpZgorIAorLSNpZiBGQlNEX01BSk9SIDwgNgorKyNpZiBGQlNEX01BSk9SIDwgNQorICNkZWZpbmUgRkJTRF9EWU5BTUlDX0xJTktFUiAiL3Vzci9saWJleGVjL2xkLWVsZi5zby4xIgorICNlbHNlCisgI2RlZmluZSBGQlNEX0RZTkFNSUNfTElOS0VSICIvbGliZXhlYy9sZC1lbGYuc28uMSIKKyAjZW5kaWYKKysKKysjaWYgZGVmaW5lZChIQVZFX0xEX0VIX0ZSQU1FX0hEUikKKysjZGVmaW5lIExJTktfRUhfU1BFQyAiJXshc3RhdGljOi0tZWgtZnJhbWUtaGRyfSAiCisrI2VuZGlmCisrCisrLyogVXNlIC0tYXMtbmVlZGVkIC1sZ2NjX3MgZm9yIGVoIHN1cHBvcnQuICAqLworKyNpZmRlZiBIQVZFX0xEX0FTX05FRURFRAorKyNkZWZpbmUgVVNFX0xEX0FTX05FRURFRCAxCisrI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzMwMC11Y2xpYmMtY29uZi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMzAwLXVjbGliYy1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNDY1ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzMwMC11Y2xpYmMtY29uZi5wYXRjaApAQCAtMCwwICsxLDM1IEBACitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaCBnY2MtNC40LjUvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCistLS0gZ2NjLTQuNC41Lm9yaWcvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAkyMDEwLTEwLTA5IDIzOjEwOjMyLjAwMDAwMDAwMCArMDIwMAorQEAgLTEwNiw2ICsxMDYsMTAgQEAKKyAgdGhlbgorICAgbWFrZSBhbGwtZ2RiIGFsbC1kZWphZ251IGFsbC1sZCB8fCBleGl0IDEKKyAgIG1ha2UgaW5zdGFsbC1nZGIgaW5zdGFsbC1kZWphZ251IGluc3RhbGwtbGQgfHwgZXhpdCAxCisrZWxpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIC1hICRIX1JFQUxfVEFSR0VUID0gaTY4Ni1wYy1saW51eC11Y2xpYmMgXQorKyB0aGVuCisrICBtYWtlIGFsbC1nZGIgYWxsLWRlamFnbnUgYWxsLWxkIHx8IGV4aXQgMQorKyAgbWFrZSBpbnN0YWxsLWdkYiBpbnN0YWxsLWRlamFnbnUgaW5zdGFsbC1sZCB8fCBleGl0IDEKKyBlbGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgXSA7IHRoZW4KKyAgIG1ha2UgYm9vdHN0cmFwIHx8IGV4aXQgMQorICAgbWFrZSBpbnN0YWxsIHx8IGV4aXQgMQorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZyBnY2MtNC40LjUvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKKy0tLSBnY2MtNC40LjUub3JpZy9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZwkyMDA3LTA2LTA0IDAxOjE4OjQzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZwkyMDEwLTEwLTA5IDIzOjEwOjMyLjAwMDAwMDAwMCArMDIwMAorQEAgLTYwMyw3ICs2MDMsNyBAQAorIAorICMgVHJhbnNmb3JtIGxpbnV4KiB0byAqLSotbGludXgtZ251KiwgdG8gc3VwcG9ydCBvbGQgY29uZmlndXJlIHNjcmlwdHMuCisgY2FzZSAkaG9zdF9vcyBpbgorLWxpbnV4LWdudSopIDs7CisrbGludXgtZ251KnxsaW51eC11Y2xpYmMqKSA7OworIGxpbnV4KikgaG9zdD1gZWNobyAkaG9zdCB8IHNlZCAncy9eXCguKi0uKi1saW51eFwpXCguKlwpJC9cMS1nbnVcMi8nYAorIGVzYWMKKyAKK0BAIC0xMjUxLDcgKzEyNTEsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgbmVlZF92ZXJzaW9uPW5vCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzMxMC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzMxMC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QzODFkYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMzEwLW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApAQCAtMCwwICsxLDEyIEBACitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCBnY2MtNC40LjUvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCistLS0gZ2NjLTQuNC41Lm9yaWcvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCTIwMDctMDQtMjMgMjM6MTA6MDkuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAkyMDEwLTEwLTA5IDIzOjExOjAwLjAwMDAwMDAwMCArMDIwMAorQEAgLTUwMyw3ICs1MDMsNyBAQAorICNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX0dMSUJDX18pCisgIyBpbmNsdWRlIDxmZWF0dXJlcy5oPgorICMgaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxIHx8IF9fR0xJQkNfXyA+IDIpIFwKKy0gICAgICYmICFkZWZpbmVkKF9faWE2NF9fKQorKyAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pICYmICFkZWZpbmVkKF9fVUNMSUJDX18pCisgIyAgIGlmbmRlZiBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgICAgZGVmaW5lIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMzIwLWM5OS1zbnByaW50Zi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMzIwLWM5OS1zbnByaW50Zi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmFhMDZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS8zMjAtYzk5LXNucHJpbnRmLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvY19nbG9iYWwvY3N0ZGlvIGdjYy00LjQuNS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2dsb2JhbC9jc3RkaW8KKy0tLSBnY2MtNC40LjUub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9jX2dsb2JhbC9jc3RkaW8JMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvbGlic3RkYysrLXYzL2luY2x1ZGUvY19nbG9iYWwvY3N0ZGlvCTIwMTAtMTAtMDkgMjM6MTE6MjcuMDAwMDAwMDAwICswMjAwCitAQCAtMTM5LDcgKzEzOSw3IEBACisgCisgX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorIAorLSNpZiBfR0xJQkNYWF9VU0VfQzk5CisrI2lmIF9HTElCQ1hYX1VTRV9DOTkgfHwgZGVmaW5lZCBfX1VDTElCQ19fCisgCisgI3VuZGVmIHNucHJpbnRmCisgI3VuZGVmIHZmc2NhbmYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMzMwLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS8zMzAtbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVmNzcwOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMzMwLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvbGlibXVkZmxhcC9tZi1ob29rczIuYyBnY2MtNC40LjUvbGlibXVkZmxhcC9tZi1ob29rczIuYworLS0tIGdjYy00LjQuNS5vcmlnL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMJMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvbGlibXVkZmxhcC9tZi1ob29rczIuYwkyMDEwLTEwLTA5IDIzOjExOjUyLjAwMDAwMDAwMCArMDIwMAorQEAgLTQyMSw3ICs0MjEsNyBAQAorIHsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIG4sIF9fTUZfQ0hFQ0tfV1JJVEUsICJiemVybyByZWdpb24iKTsKKy0gIGJ6ZXJvIChzLCBuKTsKKysgIG1lbXNldCAocywgMCwgbik7CisgfQorIAorIAorQEAgLTQzMSw3ICs0MzEsNyBAQAorICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQoc3JjLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY29weSBzcmMiKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChkZXN0LCBuLCBfX01GX0NIRUNLX1dSSVRFLCAiYmNvcHkgZGVzdCIpOworLSAgYmNvcHkgKHNyYywgZGVzdCwgbik7CisrICBtZW1tb3ZlIChkZXN0LCBzcmMsIG4pOworIH0KKyAKKyAKK0BAIC00NDEsNyArNDQxLDcgQEAKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMxLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY21wIDFzdCBhcmciKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzMiwgbiwgX19NRl9DSEVDS19SRUFELCAiYmNtcCAybmQgYXJnIik7CistICByZXR1cm4gYmNtcCAoczEsIHMyLCBuKTsKKysgIHJldHVybiBuID09IDAgPyAwIDogbWVtY21wIChzMSwgczIsIG4pOworIH0KKyAKKyAKK0BAIC00NTAsNyArNDUwLDcgQEAKKyAgIHNpemVfdCBuID0gc3RybGVuIChzKTsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIENMQU1QQUREKG4sIDEpLCBfX01GX0NIRUNLX1JFQUQsICJpbmRleCByZWdpb24iKTsKKy0gIHJldHVybiBpbmRleCAocywgYyk7CisrICByZXR1cm4gc3RyY2hyIChzLCBjKTsKKyB9CisgCisgCitAQCAtNDU5LDcgKzQ1OSw3IEBACisgICBzaXplX3QgbiA9IHN0cmxlbiAocyk7CisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzLCBDTEFNUEFERChuLCAxKSwgX19NRl9DSEVDS19SRUFELCAicmluZGV4IHJlZ2lvbiIpOworLSAgcmV0dXJuIHJpbmRleCAocywgYyk7CisrICByZXR1cm4gc3RycmNociAocywgYyk7CisgfQorIAorIC8qIFhYWDogIHN0cGNweSwgbWVtY2NweSAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS8zNDAtZWNqeC1ob3N0LWNjLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS8zNDAtZWNqeC1ob3N0LWNjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZjZhZTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzM0MC1lY2p4LWhvc3QtY2MucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9saWJqYXZhL01ha2VmaWxlLmluIGdjYy00LjQuNS9saWJqYXZhL01ha2VmaWxlLmluCistLS0gZ2NjLTQuNC41Lm9yaWcvbGliamF2YS9NYWtlZmlsZS5pbgkyMDEwLTEwLTAxIDEwOjI2OjE4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9saWJqYXZhL01ha2VmaWxlLmluCTIwMTAtMTAtMDkgMjM6MTI6MjIuMDAwMDAwMDAwICswMjAwCitAQCAtOTE4MCw2ICs5MTgwLDkgQEAKKyBlY2p4JChFWEVFWFQpOiAkKGVjanhfT0JKRUNUUykgJChlY2p4X0RFUEVOREVOQ0lFUykgCisgCUBybSAtZiBlY2p4JChFWEVFWFQpCisgCSQoZWNqeF9MSU5LKSAkKGVjanhfTERGTEFHUykgJChlY2p4X09CSkVDVFMpICQoZWNqeF9MREFERCkgJChMSUJTKQorK2VjanguJChPQkpFWFQpOiAkKGVjanhfU09VUkNFUykKKysJQHJtIC1mIGVjanguJChPQkpFWFQpCisrCSQoQ0NfRk9SX0JVSUxEKSAkKEJVSUxEX0NGTEFHUykgLWMgLW8gJEAgJDwKKyBnYXBwbGV0dmlld2VyJChFWEVFWFQpOiAkKGdhcHBsZXR2aWV3ZXJfT0JKRUNUUykgJChnYXBwbGV0dmlld2VyX0RFUEVOREVOQ0lFUykgCisgCUBybSAtZiBnYXBwbGV0dmlld2VyJChFWEVFWFQpCisgCSQoZ2FwcGxldHZpZXdlcl9MSU5LKSAkKGdhcHBsZXR2aWV3ZXJfTERGTEFHUykgJChnYXBwbGV0dmlld2VyX09CSkVDVFMpICQoZ2FwcGxldHZpZXdlcl9MREFERCkgJChMSUJTKQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS8zNTAtaW5kZXhfbWFjcm8ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzM1MC1pbmRleF9tYWNyby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGRhMTFlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS8zNTAtaW5kZXhfbWFjcm8ucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL3VjbGliYy85MF9hbGxfMzA0LWluZGV4X21hY3JvLnBhdGNoCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUgZ2NjLTQuNC41L2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCistLS0gZ2NjLTQuNC41Lm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUJMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUJMjAxMC0xMC0wOSAyMzoxMjo1MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC01NCw2ICs1NCw5IEBACisgI2luY2x1ZGUgPGJpdHMvZ3Roci5oPgorICNpbmNsdWRlIDx0cjEvZnVuY3Rpb25hbD4KKyAKKysvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCisrI3VuZGVmIGluZGV4CisrCisgIyBpZmRlZiBfX0dDCisgIyAgIGRlZmluZSBfX0dDX0NPTlNUIGNvbnN0CisgIyBlbHNlCitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oIGdjYy00LjQuNS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAorLS0tIGdjYy00LjQuNS5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCTIwMTAtMTAtMDkgMjM6MTI6NTEuMDAwMDAwMDAwICswMjAwCitAQCAtNDksNiArNDksOSBAQAorICNpbmNsdWRlIDxleHQvbWVtb3J5PiAvLyBGb3IgdW5pbml0aWFsaXplZF9jb3B5X24KKyAjaW5jbHVkZSA8ZXh0L251bWVyaWM+IC8vIEZvciBwb3dlcgorIAorKy8qIGNvcGUgdy8gaW5kZXggZGVmaW5lZCBhcyBtYWNybywgU3VTdjMgcHJvcG9zYWwgKi8KKysjdW5kZWYgaW5kZXgKKysKKyBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorIAorICAgdXNpbmcgc3RkOjpzaXplX3Q7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzM2MC1hcm0tYmlnZW5kaWFuLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS8zNjAtYXJtLWJpZ2VuZGlhbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTY0MjkwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS8zNjAtYXJtLWJpZ2VuZGlhbi5wYXRjaApAQCAtMCwwICsxLDMyIEBACitCeSBMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEB3YW50c3RvZmx5Lm9yZz4KK0FkZHMgc3VwcG9ydCBmb3IgYXJtKmItbGludXgqIGJpZy1lbmRpYW4gQVJNIHRhcmdldHMKKworU2VlIGh0dHA6Ly9nY2MuZ251Lm9yZy9QUjE2MzUwCisKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmggZ2NjLTQuNC41L2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCistLS0gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgJMjAwOS0wMi0yMCAxNjoyMDozOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC40LjUvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgJMjAxMC0xMC0wOSAyMzoxMzoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC01MSw3ICs1MSw3IEBACisgCisgI3VuZGVmICBNVUxUSUxJQl9ERUZBVUxUUworICNkZWZpbmUgTVVMVElMSUJfREVGQVVMVFMgXAorLQl7ICJtYXJtIiwgIm1saXR0bGUtZW5kaWFuIiwgIm1oYXJkLWZsb2F0IiwgIm1uby10aHVtYi1pbnRlcndvcmsiIH0KKysJeyAibWFybSIsIFRBUkdFVF9FTkRJQU5fT1BUSU9OLCAibWhhcmQtZmxvYXQiLCAibW5vLXRodW1iLWludGVyd29yayIgfQorIAorIC8qIE5vdyB3ZSBkZWZpbmUgdGhlIHN0cmluZ3MgdXNlZCB0byBidWlsZCB0aGUgc3BlYyBmaWxlLiAgKi8KKyAjdW5kZWYgIExJQl9TUEVDCitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcuZ2NjIGdjYy00LjQuNS9nY2MvY29uZmlnLmdjYworLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcuZ2NjCTIwMTAtMTAtMDkgMjM6MDk6NTMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2djYy9jb25maWcuZ2NjCTIwMTAtMTAtMDkgMjM6MTM6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtNzM5LDYgKzczOSwxMSBAQAorIAl0bV9maWxlPSJkYnhlbGYuaCBlbGZvcy5oIGFybS91bmtub3duLWVsZi5oIGFybS9lbGYuaCBhcm0vbGludXgtZ2FzLmggYXJtL3VjbGludXgtZWxmLmgiCisgCXRtYWtlX2ZpbGU9ImFybS90LWFybSBhcm0vdC1hcm0tZWxmIgorIAljYXNlICR7dGFyZ2V0fSBpbgorKwlhcm0qYi0qKQorKwkJdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUPTEiCisrCQk7OworKwllc2FjCisrCWNhc2UgJHt0YXJnZXR9IGluCisgCWFybSotKi11Y2xpbnV4KmVhYmkpCisgCSAgICB0bV9maWxlPSIkdG1fZmlsZSBhcm0vYnBhYmkuaCBhcm0vdWNsaW51eC1lYWJpLmgiCisgCSAgICB0bWFrZV9maWxlPSIkdG1ha2VfZmlsZSBhcm0vdC1icGFiaSIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMzcwLWJvb3RzdHJhcC10YXJnZXRfbGliX3BhdGgucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzM3MC1ib290c3RyYXAtdGFyZ2V0X2xpYl9wYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZjYyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzM3MC1ib290c3RyYXAtdGFyZ2V0X2xpYl9wYXRoLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0NoYW5nZUxvZzoKKzIwMTAtMDEtMDYgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwlQUiBib290c3RyYXAvNDE4MTgKKwkqIE1ha2VmaWxlLnRwbCAoQkFTRV9UQVJHRVRfRVhQT1JUUyk6IE9ubHkgYWRkIFRBUkdFVF9MSUJfUEFUSAorCXRvICQoUlBBVEhfRU5WVkFSKSBpZiBib290c3RyYXBwaW5nLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvTWFrZWZpbGUuaW4gZ2NjLTQuNC41L01ha2VmaWxlLmluCistLS0gZ2NjLTQuNC41Lm9yaWcvTWFrZWZpbGUuaW4JMjAwOS0wNC0yNSAwNjoxMDoyOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvTWFrZWZpbGUuaW4JMjAxMC0xMC0wOSAyMzoxMzo1MC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNDUsNyArMjQ1LDEwIEBACisgCVNUUklQPSIkKFNUUklQX0ZPUl9UQVJHRVQpIjsgZXhwb3J0IFNUUklQOyBcCisgCVdJTkRSRVM9IiQoV0lORFJFU19GT1JfVEFSR0VUKSI7IGV4cG9ydCBXSU5EUkVTOyBcCisgCVdJTkRNQz0iJChXSU5ETUNfRk9SX1RBUkdFVCkiOyBleHBvcnQgV0lORE1DOyBcCistCSQoUlBBVEhfRU5WVkFSKT1gZWNobyAiJChIT1NUX0xJQl9QQVRIKSQoVEFSR0VUX0xJQl9QQVRIKSQkJChSUEFUSF9FTlZWQVIpIiB8IHNlZCAncyw6OiosOixnO3MsXjoqLCw7cyw6KiQkLCwnYDsgZXhwb3J0ICQoUlBBVEhfRU5WVkFSKTsKKytAaWYgZ2NjLWJvb3RzdHJhcAorKwkkKFJQQVRIX0VOVlZBUik9YGVjaG8gIiQoVEFSR0VUX0xJQl9QQVRIKSQkJChSUEFUSF9FTlZWQVIpIiB8IHNlZCAncyw6OiosOixnO3MsXjoqLCw7cyw6KiQkLCwnYDsgZXhwb3J0ICQoUlBBVEhfRU5WVkFSKTsgXAorK0BlbmRpZiBnY2MtYm9vdHN0cmFwCisrCSQoUlBBVEhfRU5WVkFSKT1gZWNobyAiJChIT1NUX0xJQl9QQVRIKSQkJChSUEFUSF9FTlZWQVIpIiB8IHNlZCAncyw6OiosOixnO3MsXjoqLCw7cyw6KiQkLCwnYDsgZXhwb3J0ICQoUlBBVEhfRU5WVkFSKTsKKyAKKyBSQVdfQ1hYX1RBUkdFVF9FWFBPUlRTID0gXAorIAkkKEJBU0VfVEFSR0VUX0VYUE9SVFMpIFwKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvTWFrZWZpbGUudHBsIGdjYy00LjQuNS9NYWtlZmlsZS50cGwKKy0tLSBnY2MtNC40LjUub3JpZy9NYWtlZmlsZS50cGwJMjAwOS0wNC0xNCAxMDo1NzozMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvTWFrZWZpbGUudHBsCTIwMTAtMTAtMDkgMjM6MTM6NTAuMDAwMDAwMDAwICswMjAwCitAQCAtMjQ4LDcgKzI0OCwxMCBAQAorIAlTVFJJUD0iJChTVFJJUF9GT1JfVEFSR0VUKSI7IGV4cG9ydCBTVFJJUDsgXAorIAlXSU5EUkVTPSIkKFdJTkRSRVNfRk9SX1RBUkdFVCkiOyBleHBvcnQgV0lORFJFUzsgXAorIAlXSU5ETUM9IiQoV0lORE1DX0ZPUl9UQVJHRVQpIjsgZXhwb3J0IFdJTkRNQzsgXAorLQkkKFJQQVRIX0VOVlZBUik9YGVjaG8gIiQoSE9TVF9MSUJfUEFUSCkkKFRBUkdFVF9MSUJfUEFUSCkkJCQoUlBBVEhfRU5WVkFSKSIgfCBzZWQgJ3MsOjoqLDosZztzLF46KiwsO3MsOiokJCwsJ2A7IGV4cG9ydCAkKFJQQVRIX0VOVlZBUik7CisrQGlmIGdjYy1ib290c3RyYXAKKysJJChSUEFUSF9FTlZWQVIpPWBlY2hvICIkKFRBUkdFVF9MSUJfUEFUSCkkJCQoUlBBVEhfRU5WVkFSKSIgfCBzZWQgJ3MsOjoqLDosZztzLF46KiwsO3MsOiokJCwsJ2A7IGV4cG9ydCAkKFJQQVRIX0VOVlZBUik7IFwKKytAZW5kaWYgZ2NjLWJvb3RzdHJhcAorKwkkKFJQQVRIX0VOVlZBUik9YGVjaG8gIiQoSE9TVF9MSUJfUEFUSCkkJCQoUlBBVEhfRU5WVkFSKSIgfCBzZWQgJ3MsOjoqLDosZztzLF46KiwsO3MsOiokJCwsJ2A7IGV4cG9ydCAkKFJQQVRIX0VOVlZBUik7CisgCisgUkFXX0NYWF9UQVJHRVRfRVhQT1JUUyA9IFwKKyAJJChCQVNFX1RBUkdFVF9FWFBPUlRTKSBcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzM4MC1wb3dlcnBjLWxpYmdjY19zLWxpbmstbGlibS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvMzgwLXBvd2VycGMtbGliZ2NjX3MtbGluay1saWJtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YmM5M2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzM4MC1wb3dlcnBjLWxpYmdjY19zLWxpbmstbGlibS5wYXRjaApAQCAtMCwwICsxLDEzNCBAQAoraHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMDgtMTAvbXNnMDAyNjkuaHRtbAorCitPbiBnbGliYyB0aGUgbGliYy5zbyBjYXJyaWVzIGEgY29weSBvZiB0aGUgbWF0aCBmdW5jdGlvbiBjb3B5c2lnbmwoKSBidXQKK2NvbnRhaW5zIHVucmVzb2x2ZWQgc3ltYm9scywgYW55IGF0dGVtcHQgdG8gbGluayBhZ2FpbnN0IGxpYmdjY19zCit3aXRob3V0IGV4cGxpY2l0ZWx5IHNwZWNpZnlpbmcgLWxtIGZhaWxzLCByZXN1bHRpbmcgaW4gYSBicm9rZW4KK2Jvb3RzdHJhcCBvZiB0aGUgY29tcGlsZXIuCisKKworZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL3Qtc2xpYmdjYy1lbGYtdmVyIGdjYy00LjQuNS9nY2MvY29uZmlnL3Qtc2xpYmdjYy1lbGYtdmVyCistLS0gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZy90LXNsaWJnY2MtZWxmLXZlcgkyMDEwLTAxLTA0IDE2OjEzOjA4LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNS9nY2MvY29uZmlnL3Qtc2xpYmdjYy1lbGYtdmVyCTIwMTAtMTAtMDkgMjM6MTQ6MTguMDAwMDAwMDAwICswMjAwCitAQCAtOSw3ICs5LDcgQEAKKyBTSExJQl9PQkpTID0gQHNobGliX29ianNACisgU0hMSUJfRElSID0gQG11bHRpbGliX2RpckAKKyBTSExJQl9TTElCRElSX1FVQUwgPSBAc2hsaWJfc2xpYmRpcl9xdWFsQAorLVNITElCX0xDID0gLWxjCisrU0hMSUJfTEMgPSBAbGliZ2NjX2xpYm1AIC1sYworIFNITElCX01BS0VfU09MSU5LID0gJChMTl9TKSAkKFNITElCX1NPTkFNRSkgJChTSExJQl9ESVIpLyQoU0hMSUJfU09MSU5LKQorIFNITElCX0lOU1RBTExfU09MSU5LID0gJChMTl9TKSAkKFNITElCX1NPTkFNRSkgXAorIAkkJChERVNURElSKSQkKHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwpLyQoU0hMSUJfU09MSU5LKQorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9saWJnY2MvY29uZmlndXJlIGdjYy00LjQuNS9saWJnY2MvY29uZmlndXJlCistLS0gZ2NjLTQuNC41Lm9yaWcvbGliZ2NjL2NvbmZpZ3VyZQkyMDA4LTExLTIwIDE4OjEzOjAxLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNS9saWJnY2MvY29uZmlndXJlCTIwMTAtMTAtMDkgMjM6MTQ6MTguMDAwMDAwMDAwICswMjAwCitAQCAtMjcyLDcgKzI3Miw3IEBACisgUEFDS0FHRV9CVUdSRVBPUlQ9JycKKyAKKyBhY191bmlxdWVfZmlsZT0ic3RhdGljLW9iamVjdC5tayIKKy1hY19zdWJzdF92YXJzPSdTSEVMTCBQQVRIX1NFUEFSQVRPUiBQQUNLQUdFX05BTUUgUEFDS0FHRV9UQVJOQU1FIFBBQ0tBR0VfVkVSU0lPTiBQQUNLQUdFX1NUUklORyBQQUNLQUdFX0JVR1JFUE9SVCBleGVjX3ByZWZpeCBwcmVmaXggcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBsb2NhbHN0YXRlZGlyIGxpYmRpciBpbmNsdWRlZGlyIG9sZGluY2x1ZGVkaXIgaW5mb2RpciBtYW5kaXIgYnVpbGRfYWxpYXMgaG9zdF9hbGlhcyB0YXJnZXRfYWxpYXMgREVGUyBFQ0hPX0MgRUNIT19OIEVDSE9fVCBMSUJTIGxpYmdjY190b3BkaXIgZW5hYmxlX3NoYXJlZCBzbGliZGlyIElOU1RBTExfUFJPR1JBTSBJTlNUQUxMX1NDUklQVCBJTlNUQUxMX0RBVEEgQVdLIGJ1aWxkIGJ1aWxkX2NwdSBidWlsZF92ZW5kb3IgYnVpbGRfb3MgaG9zdCBob3N0X2NwdSBob3N0X3ZlbmRvciBob3N0X29zIGhvc3Rfbm9uY2Fub25pY2FsIGJ1aWxkX2xpYnN1YmRpciBidWlsZF9zdWJkaXIgaG9zdF9zdWJkaXIgdGFyZ2V0X3N1YmRpciBBUiBhY19jdF9BUiBMSVBPIGFjX2N0X0xJUE8gTk0gYWNfY3RfTk0gUkFOTElCIGFjX2N0X1JBTkxJQiBTVFJJUCBhY19jdF9TVFJJUCBMTl9TIENDIENGTEFHUyBMREZMQUdTIENQUEZMQUdTIGFjX2N0X0NDIEVYRUVYVCBPQkpFWFQgQ1BQIGRlY2ltYWxfZmxvYXQgZW5hYmxlX2RlY2ltYWxfZmxvYXQgZml4ZWRfcG9pbnQgdmlzX2hpZGUgc2V0X2hhdmVfY2NfdGxzIHRtYWtlX2ZpbGUgZXh0cmFfcGFydHMgYXNtX2hpZGRlbl9vcCBMSUJPQkpTIExUTElCT0JKUycKKythY19zdWJzdF92YXJzPSdTSEVMTCBQQVRIX1NFUEFSQVRPUiBQQUNLQUdFX05BTUUgUEFDS0FHRV9UQVJOQU1FIFBBQ0tBR0VfVkVSU0lPTiBQQUNLQUdFX1NUUklORyBQQUNLQUdFX0JVR1JFUE9SVCBleGVjX3ByZWZpeCBwcmVmaXggcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBsb2NhbHN0YXRlZGlyIGxpYmRpciBpbmNsdWRlZGlyIG9sZGluY2x1ZGVkaXIgaW5mb2RpciBtYW5kaXIgYnVpbGRfYWxpYXMgaG9zdF9hbGlhcyB0YXJnZXRfYWxpYXMgREVGUyBFQ0hPX0MgRUNIT19OIEVDSE9fVCBMSUJTIGxpYmdjY190b3BkaXIgZW5hYmxlX3NoYXJlZCBzbGliZGlyIElOU1RBTExfUFJPR1JBTSBJTlNUQUxMX1NDUklQVCBJTlNUQUxMX0RBVEEgQVdLIGJ1aWxkIGJ1aWxkX2NwdSBidWlsZF92ZW5kb3IgYnVpbGRfb3MgaG9zdCBob3N0X2NwdSBob3N0X3ZlbmRvciBob3N0X29zIGhvc3Rfbm9uY2Fub25pY2FsIGJ1aWxkX2xpYnN1YmRpciBidWlsZF9zdWJkaXIgaG9zdF9zdWJkaXIgdGFyZ2V0X3N1YmRpciBBUiBhY19jdF9BUiBMSVBPIGFjX2N0X0xJUE8gTk0gYWNfY3RfTk0gUkFOTElCIGFjX2N0X1JBTkxJQiBTVFJJUCBhY19jdF9TVFJJUCBMTl9TIENDIENGTEFHUyBMREZMQUdTIENQUEZMQUdTIGFjX2N0X0NDIEVYRUVYVCBPQkpFWFQgQ1BQIGRlY2ltYWxfZmxvYXQgZW5hYmxlX2RlY2ltYWxfZmxvYXQgZml4ZWRfcG9pbnQgdmlzX2hpZGUgc2V0X2hhdmVfY2NfdGxzIExJQkdDQ19MSUJNIHRtYWtlX2ZpbGUgZXh0cmFfcGFydHMgYXNtX2hpZGRlbl9vcCBMSUJPQkpTIExUTElCT0JKUycKKyBhY19zdWJzdF9maWxlcz0nJworIGFjX3B3ZD1gcHdkYAorIAorQEAgLTM1NDcsNiArMzU0NywzOSBAQAorIGZpCisgCisgCisrIyBPbiBwb3dlcnBjIGxpYmdjY19zIHJlZmVyZW5jZXMgY29weXNpZ25sIHdoaWNoIGlzIGEgbGlibSBmdW5jdGlvbiBidXQKKysjIGdsaWJjIGFwcGFyZW50bHkgYWxzbyBwcm92aWRlcyBpdCB2aWEgbGliYyBhcyBvcHBvc2VkIHRvIHVDbGliYyB3aGVyZQorKyMgaXQgbGl2ZXMgaW4gbGlibS4KKytlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBjb3B5c2lnbmwiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBjb3B5c2lnbmwuLi4gJEVDSE9fQyIgPiY2CisraWYgdGVzdCAiJHtsaWJnY2NfY3ZfY29weXNpZ25sX2xpYitzZXR9IiA9IHNldDsgdGhlbgorKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKytlbHNlCisrCisrICAgIGVjaG8gJyNpbmNsdWRlIDxmZWF0dXJlcy5oPicgPiBjb25mdGVzdC5jCisrICAgIGVjaG8gJ2ludCB0aGVfbGliYyA9IF9fVUNMSUJDX18gKyBfX3Bvd2VycGNfXzsnID4+IGNvbmZ0ZXN0LmMKKysgICAgbGliZ2NjX2N2X2NvcHlzaWdubF9saWI9Ii1sYyIKKysgICAgaWYgeyBhY190cnk9JyR7Q0MtY2N9IC1TIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QucyAxPiY1JworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0KKysgICAgdGhlbgorKwlsaWJnY2NfY3ZfY29weXNpZ25sX2xpYj0iLWxtIgorKyAgICBmaQorKyAgICBybSAtZiBjb25mdGVzdC4qCisrCisrZmkKKytlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGliZ2NjX2N2X2NvcHlzaWdubF9saWIiID4mNQorK2VjaG8gIiR7RUNIT19UfSRsaWJnY2NfY3ZfY29weXNpZ25sX2xpYiIgPiY2CisrCisrY2FzZSAvJHtsaWJnY2NfY3ZfY29weXNpZ25sX2xpYn0vIGluCisrICAvLWxtLykgTElCR0NDX0xJQk09IiRMSUJHQ0NfTElCTSAtbG0iIDs7CisrICAqKSBMSUJHQ0NfTElCTT0gOzsKKytlc2FjCisrCisrCisgIyBDb25kaXRpb25hbGl6ZSB0aGUgbWFrZWZpbGUgZm9yIHRoaXMgdGFyZ2V0IG1hY2hpbmUuCisgdG1ha2VfZmlsZV89CisgZm9yIGYgaW4gJHt0bWFrZV9maWxlfQorQEAgLTQyNjcsNiArNDMwMCw3IEBACisgcyxAZml4ZWRfcG9pbnRALCRmaXhlZF9wb2ludCw7dCB0CisgcyxAdmlzX2hpZGVALCR2aXNfaGlkZSw7dCB0CisgcyxAc2V0X2hhdmVfY2NfdGxzQCwkc2V0X2hhdmVfY2NfdGxzLDt0IHQKKytzLEBMSUJHQ0NfTElCTUAsJExJQkdDQ19MSUJNLDt0IHQKKyBzLEB0bWFrZV9maWxlQCwkdG1ha2VfZmlsZSw7dCB0CisgcyxAZXh0cmFfcGFydHNALCRleHRyYV9wYXJ0cyw7dCB0CisgcyxAYXNtX2hpZGRlbl9vcEAsJGFzbV9oaWRkZW5fb3AsO3QgdAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9saWJnY2MvY29uZmlndXJlLmFjIGdjYy00LjQuNS9saWJnY2MvY29uZmlndXJlLmFjCistLS0gZ2NjLTQuNC41Lm9yaWcvbGliZ2NjL2NvbmZpZ3VyZS5hYwkyMDA4LTExLTIwIDE4OjEzOjAxLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNS9saWJnY2MvY29uZmlndXJlLmFjCTIwMTAtMTAtMDkgMjM6MTQ6MTguMDAwMDAwMDAwICswMjAwCitAQCAtMjIzLDYgKzIyMywyNyBAQAorIGZpCisgQUNfU1VCU1Qoc2V0X2hhdmVfY2NfdGxzKQorIAorKyMgT24gcG93ZXJwYyBsaWJnY2NfcyByZWZlcmVuY2VzIGNvcHlzaWdubCB3aGljaCBpcyBhIGxpYm0gZnVuY3Rpb24gYnV0CisrIyBnbGliYyBhcHBhcmVudGx5IGFsc28gcHJvdmlkZXMgaXQgdmlhIGxpYmMgYXMgb3Bwb3NlZCB0byB1Q2xpYmMgd2hlcmUKKysjIGl0IGxpdmVzIGluIGxpYm0uCisrQUNfQ0FDSEVfQ0hFQ0sKKysgIGxpYmdjY19jdl9jb3B5c2lnbmxfbGliLAorKyAgICBlY2hvICcjaW5jbHVkZSA8ZmVhdHVyZXMuaD4nID4gY29uZnRlc3QuYworKyAgICBlY2hvICdpbnQgdGhlX2xpYmMgPSBfX1VDTElCQ19fICsgX19wb3dlcnBjX187JyA+PiBjb25mdGVzdC5jCisrICAgIGxpYmdjY19jdl9jb3B5c2lnbmxfbGliPSItbGMiCisrICAgIGlmIEFDX1RSWV9DT01NQU5EKCR7Q0MtY2N9IC1TIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QucyAxPiZBU19NRVNTQUdFX0xPR19GRCkKKysgICAgdGhlbgorKwlsaWJnY2NfY3ZfY29weXNpZ25sX2xpYj0iLWxtIgorKyAgICBmaQorKyAgICBybSAtZiBjb25mdGVzdC4qCisrICBdKQorKworK2Nhc2UgLyR7bGliZ2NjX2N2X2NvcHlzaWdubF9saWJ9LyBpbgorKyAgLy1sbS8pIExJQkdDQ19MSUJNPSIkTElCR0NDX0xJQk0gLWxtIiA7OworKyAgKikgTElCR0NDX0xJQk09IDs7CisrZXNhYworK0FDX1NVQlNUKExJQkdDQ19MSUJNKQorKworICMgQ29uZGl0aW9uYWxpemUgdGhlIG1ha2VmaWxlIGZvciB0aGlzIHRhcmdldCBtYWNoaW5lLgorIHRtYWtlX2ZpbGVfPQorIGZvciBmIGluICR7dG1ha2VfZmlsZX0KK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvbGliZ2NjL01ha2VmaWxlLmluIGdjYy00LjQuNS9saWJnY2MvTWFrZWZpbGUuaW4KKy0tLSBnY2MtNC40LjUub3JpZy9saWJnY2MvTWFrZWZpbGUuaW4JMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvbGliZ2NjL01ha2VmaWxlLmluCTIwMTAtMTAtMDkgMjM6MTQ6MTguMDAwMDAwMDAwICswMjAwCitAQCAtMzksNiArMzksNyBAQAorIGRlY2ltYWxfZmxvYXQgPSBAZGVjaW1hbF9mbG9hdEAKKyBlbmFibGVfZGVjaW1hbF9mbG9hdCA9IEBlbmFibGVfZGVjaW1hbF9mbG9hdEAKKyBmaXhlZF9wb2ludCA9IEBmaXhlZF9wb2ludEAKKytMSUJHQ0NfTElCTSA9IEBMSUJHQ0NfTElCTUAKKyAKKyBob3N0X25vbmNhbm9uaWNhbCA9IEBob3N0X25vbmNhbm9uaWNhbEAKKyAKK0BAIC03ODcsOSArNzg4LDEwIEBACisgCQlAbXVsdGlsaWJfZGlyQCwkKE1VTFRJRElSKSwkKHN1YnN0IFwKKyAJCUBzaGxpYl9vYmpzQCwkKG9iamVjdHMpLCQoc3Vic3QgXAorIAkJQHNobGliX2Jhc2VfbmFtZUAsbGliZ2NjX3MsJChzdWJzdCBcCisrCQlAbGliZ2NjX2xpYm1ALCQoTElCR0NDX0xJQk0pLCQoc3Vic3QgXAorIAkJQHNobGliX21hcF9maWxlQCwkKG1hcGZpbGUpLCQoc3Vic3QgXAorIAkJQHNobGliX3NsaWJkaXJfcXVhbEAsJChNVUxUSU9TU1VCRElSKSwkKHN1YnN0IFwKKy0JCUBzaGxpYl9zbGliZGlyQCwkKHNobGliX3NsaWJkaXIpLCQoU0hMSUJfTElOSykpKSkpKSkpCisrCQlAc2hsaWJfc2xpYmRpckAsJChzaGxpYl9zbGliZGlyKSwkKFNITElCX0xJTkspKSkpKSkpKSkKKyAKKyBsaWJ1bndpbmQkKFNITElCX0VYVCk6ICQobGlidW53aW5kLXMtb2JqZWN0cykgJChleHRyYS1wYXJ0cykKKyAJIyBAbXVsdGlsaWJfZmxhZ3NAIGlzIHN0aWxsIG5lZWRlZCBiZWNhdXNlIHRoaXMgbWF5IHVzZQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS8zOTAtYXJtLXNvZnRmbG9hdC1saWJnY2MucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzM5MC1hcm0tc29mdGZsb2F0LWxpYmdjYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmEzMGEzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS8zOTAtYXJtLXNvZnRmbG9hdC1saWJnY2MucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorW1BBVENIXSBhZGQgdGhlIGNvcnJlY3Qgc3ltYm9scyB0byBsaWJnY2MgZm9yIHVjbGliYyBhcm0gc29mdGZsb2F0CisKK1NpZ25lZC1vZmYtYnk6IFBldGVyIEtvcnNnYWFyZCA8amFjbWV0QHN1bnNpdGUuZGs+CistLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL2FybS90LWxpbnV4ICAgICB8ICAgIDYgKysrKystCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC40LjAvZ2NjL2NvbmZpZy9hcm0vdC1saW51eAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvYXJtL3QtbGludXgKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy9hcm0vdC1saW51eAorQEAgLTQsNyArNCwxMSBAQAorIAorIExJQjFBU01TUkMgPSBhcm0vbGliMWZ1bmNzLmFzbQorIExJQjFBU01GVU5DUyA9IF91ZGl2c2kzIF9kaXZzaTMgX3Vtb2RzaTMgX21vZHNpMyBfZHZtZF9sbnggX2NsenNpMiBfY2x6ZGkyIFwKKy0JX2FybV9hZGRzdWJkZjMgX2FybV9hZGRzdWJzZjMKKysJX2FybV9hZGRzdWJkZjMgX2FybV9hZGRzdWJzZjMgXAorKwlfYXJtX25lZ2RmMiBfYXJtX211bGRpdmRmMyBfYXJtX2NtcGRmMiBfYXJtX3Vub3JkZGYyIFwKKysJX2FybV9maXhkZnNpIF9hcm1fZml4dW5zZGZzaSBfYXJtX3RydW5jZGZzZjIgXAorKwlfYXJtX25lZ3NmMiBfYXJtX211bGRpdnNmMyBfYXJtX2NtcHNmMiBfYXJtX3Vub3Jkc2YyIFwKKysJX2FybV9maXhzZnNpIF9hcm1fZml4dW5zc2ZzaQorIAorICMgTVVMVElMSUJfT1BUSU9OUyA9IG1oYXJkLWZsb2F0L21zb2Z0LWZsb2F0CisgIyBNVUxUSUxJQl9ESVJOQU1FUyA9IGhhcmQtZmxvYXQgc29mdC1mbG9hdAorSW5kZXg6IGdjYy00LjQuMC9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCitAQCAtNjAsNyArNjAsNyBAQAorICAgICV7c2hhcmVkOi1sY30gXAorICAgICV7IXNoYXJlZDole3Byb2ZpbGU6LWxjX3B9JXshcHJvZmlsZTotbGN9fSIKKyAKKy0jZGVmaW5lIExJQkdDQ19TUEVDICIle21zb2Z0LWZsb2F0Oi1sZmxvYXR9ICV7bWZsb2F0LWFiaT1zb2Z0KjotbGZsb2F0fSAtbGdjYyIKKysjZGVmaW5lIExJQkdDQ19TUEVDICItbGdjYyIKKyAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzQwMC1wcjQyMjg5LWZpeC1saWJmZmktYnVpbGQtb24tYXJtLW9hYmkucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzQwMC1wcjQyMjg5LWZpeC1saWJmZmktYnVpbGQtb24tYXJtLW9hYmkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY1NDg3OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjUvNDAwLXByNDIyODktZml4LWxpYmZmaS1idWlsZC1vbi1hcm0tb2FiaS5wYXRjaApAQCAtMCwwICsxLDExIEBACistLS0gZ2NjLTQuMy40L2xpYmZmaS9zcmMvYXJtL3N5c3YuUwkKKysrKyBnY2MtNC4zLjQvbGliZmZpL3NyYy9hcm0vc3lzdi5TCQorQEAgLTIzNSw3ICsyMzUsNyBAQCBBUk1fRlVOQ19TVEFSVCBmZmlfY2xvc3VyZV9TWVNWCisgCXN0bWZkCXNwISwge2lwLCBscn0KKyAJVU5XSU5EIC5zYXZlCXtyMCwgbHJ9CisgCWFkZAlyMiwgc3AsICM4CistCS5wYWQgIzE2CisrCVVOV0lORCAucGFkICMxNgorIAlzdWIJc3AsIHNwLCAjMTYKKyAJc3RyCXNwLCBbc3AsICM4XQorIAlhZGQJcjEsIHNwLCAjOApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS80MTAtbGliZ2NjX2VoLmEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC41LzQxMC1saWJnY2NfZWguYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzUzMjYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNS80MTAtbGliZ2NjX2VoLmEucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorSGlnaGx5IGluc3BpcmVkIGJ5OgorICBodHRwOi8vbGFuZGxleS5uZXQvaGcvYWJvcmlnaW5hbC9maWxlLzdlMDc0N2E2NjVhYi9zb3VyY2VzL3BhdGNoZXMvZ2NjLWNvcmUtbGliZ2NjZWgucGF0Y2gKKworZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9saWJnY2MvTWFrZWZpbGUuaW4gZ2NjLTQuNC4wL2xpYmdjYy9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjQuMC5vcmlnL2xpYmdjYy9NYWtlZmlsZS5pbgkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9saWJnY2MvTWFrZWZpbGUuaW4JMjAxMS0wOS0xMiAxNzowNToyNS4xMjExMjQ1NTkgKzAyMDAKK0BAIC03NTQsOCArNzU0LDkgQEAKKyBsaWJnY2NfcyQoU0hMSUJfRVhUKTogbGlidW53aW5kJChTSExJQl9FWFQpCisgZW5kaWYKKyAKKythbGw6IGxpYmdjY19laC5hCisgaWZlcSAoJChlbmFibGVfc2hhcmVkKSx5ZXMpCistYWxsOiBsaWJnY2NfZWguYSBsaWJnY2NfcyQoU0hMSUJfRVhUKQorK2FsbDogbGliZ2NjX3MkKFNITElCX0VYVCkKKyBpZm5lcSAoJChMSUJVTldJTkQpLCkKKyBhbGw6IGxpYnVud2luZCQoU0hMSUJfRVhUKQorIGVuZGlmCitAQCAtOTI0LDEwICs5MjUsNiBAQAorIGluc3RhbGwtc2hhcmVkOgorIAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGluc3RfbGliZGlyKQorIAorLQkkKElOU1RBTExfREFUQSkgbGliZ2NjX2VoLmEgJChERVNURElSKSQoaW5zdF9saWJkaXIpLworLQljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCistCSQoUkFOTElCKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKy0KKyAJJChzdWJzdCBAbXVsdGlsaWJfZGlyQCwkKE1VTFRJRElSKSwkKHN1YnN0IFwKKyAJCUBzaGxpYl9iYXNlX25hbWVALGxpYmdjY19zLCQoc3Vic3QgXAorIAkJQHNobGliX3NsaWJkaXJfcXVhbEAsJChNVUxUSU9TU1VCRElSKSwkKFNITElCX0lOU1RBTEwpKSkpCitAQCAtOTQyLDYgKzkzOSwxMCBAQAorIAljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjb3YuYQorIAkkKFJBTkxJQikgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjb3YuYQorIAorKwkkKElOU1RBTExfREFUQSkgbGliZ2NjX2VoLmEgJChERVNURElSKSQoaW5zdF9saWJkaXIpLworKwljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCisrCSQoUkFOTElCKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKysKKyAJcGFydHM9IiQoSU5TVEFMTF9QQVJUUykiOwkJCQlcCisgCWZvciBmaWxlIGluICQkcGFydHM7IGRvCQkJCQlcCisgCSAgcm0gLWYgJChERVNURElSKSQoaW5zdF9saWJkaXIpLyQkZmlsZTsJCVwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMTAwLWFscGhhLW1pZWVlLWRlZmF1bHQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzEwMC1hbHBoYS1taWVlZS1kZWZhdWx0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmM2FjZDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzEwMC1hbHBoYS1taWVlZS1kZWZhdWx0LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5oIGdjYy00LjQuNS9nY2MvY29uZmlnL2FscGhhL2FscGhhLmgKKy0tLSBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL2FscGhhL2FscGhhLmgJMjAwOS0wMi0yMCAxNjoyMDozOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC40LjUvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5oCTIwMTAtMTAtMDkgMjI6NTc6MzEuMDAwMDAwMDAwICswMjAwCitAQCAtOTUsNiArOTUsOCBAQAorICAgd2hpbGUgKDApCisgI2VuZGlmCisgCisrI2RlZmluZSBDUFBfU1BFQyAiJXshbm8taWVlZTotbWllZWV9IgorKworICNkZWZpbmUgV09SRF9TV0lUQ0hfVEFLRVNfQVJHKFNUUikJCVwKKyAgKCFzdHJjbXAgKFNUUiwgInJwYXRoIikgfHwgREVGQVVMVF9XT1JEX1NXSVRDSF9UQUtFU19BUkcoU1RSKSkKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5vcHQgZ2NjLTQuNC41L2djYy9jb25maWcvYWxwaGEvYWxwaGEub3B0CistLS0gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5vcHQJMjAwNy0wOC0wMiAxMjo0OTozMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5vcHQJMjAxMC0xMC0wOSAyMjo1NzozMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zOSw3ICszOSw3IEBACisgUmVxdWVzdCBJRUVFLWNvbmZvcm1hbnQgbWF0aCBsaWJyYXJ5IHJvdXRpbmVzIChPU0YvMSkKKyAKKyBtaWVlZQorLVRhcmdldCBSZXBvcnQgUmVqZWN0TmVnYXRpdmUgTWFzayhJRUVFKQorK1RhcmdldCBSZXBvcnQgTWFzayhJRUVFKQorIEVtaXQgSUVFRS1jb25mb3JtYW50IGNvZGUsIHdpdGhvdXQgaW5leGFjdCBleGNlcHRpb25zCisgCisgbWllZWUtd2l0aC1pbmV4YWN0CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzExMC10cmFtcG9saW5ld2Fybi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMTEwLXRyYW1wb2xpbmV3YXJuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiY2U4NTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzExMC10cmFtcG9saW5ld2Fybi5wYXRjaApAQCAtMCwwICsxLDI3IEBACitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9idWlsdGlucy5jIGdjYy00LjQuNS9nY2MvYnVpbHRpbnMuYworLS0tIGdjYy00LjQuNS5vcmlnL2djYy9idWlsdGlucy5jCTIwMTAtMDMtMjIgMTY6MDA6MjAuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC41L2djYy9idWlsdGlucy5jCTIwMTAtMTAtMDkgMjI6NTc6NTguMDAwMDAwMDAwICswMjAwCitAQCAtNTc4Myw2ICs1NzgzLDkgQEAKKyAgIHRyYW1wb2xpbmVzX2NyZWF0ZWQgPSAxOworICAgSU5JVElBTElaRV9UUkFNUE9MSU5FIChyX3RyYW1wLCByX2Z1bmMsIHJfY2hhaW4pOworIAorKyAgaWYgKHdhcm5fdHJhbXBvbGluZXMpCisrICAgIHdhcm5pbmcgKE9QVF9XdHJhbXBvbGluZXMsICJnZW5lcmF0aW5nIHRyYW1wb2xpbmUgaW4gb2JqZWN0IChyZXF1aXJlcyBleGVjdXRhYmxlIHN0YWNrKSIpOworKworICAgcmV0dXJuIGNvbnN0MF9ydHg7CisgfQorIAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29tbW9uLm9wdCBnY2MtNC40LjUvZ2NjL2NvbW1vbi5vcHQKKy0tLSBnY2MtNC40LjUub3JpZy9nY2MvY29tbW9uLm9wdAkyMDA5LTAzLTI4IDE4OjI4OjQ1LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNS9nY2MvY29tbW9uLm9wdAkyMDEwLTEwLTA5IDIyOjU3OjU4LjAwMDAwMDAwMCArMDIwMAorQEAgLTE5Nyw2ICsxOTcsMTAgQEAKKyBDb21tb24gVmFyKHdhcm5fdHlwZV9saW1pdHMpIEluaXQoLTEpIFdhcm5pbmcKKyBXYXJuIGlmIGEgY29tcGFyaXNvbiBpcyBhbHdheXMgdHJ1ZSBvciBhbHdheXMgZmFsc2UgZHVlIHRvIHRoZSBsaW1pdGVkIHJhbmdlIG9mIHRoZSBkYXRhIHR5cGUKKyAKKytXdHJhbXBvbGluZXMKKytDb21tb24gVmFyKHdhcm5fdHJhbXBvbGluZXMpIEluaXQoMSkKKytXYXJuIHdoZW5ldmVyIGEgdHJhbXBvbGluZSBpcyBnZW5lcmF0ZWQKKysKKyBXdW5pbml0aWFsaXplZAorIENvbW1vbiBWYXIod2Fybl91bmluaXRpYWxpemVkKSBXYXJuaW5nCisgV2FybiBhYm91dCB1bmluaXRpYWxpemVkIGF1dG9tYXRpYyB2YXJpYWJsZXMKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMTIwLWphdmEtbm9tdWx0aS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMTIwLWphdmEtbm9tdWx0aS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGVkNjNlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi8xMjAtamF2YS1ub211bHRpLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvbGliamF2YS9jb25maWd1cmUgZ2NjLTQuNC41L2xpYmphdmEvY29uZmlndXJlCistLS0gZ2NjLTQuNC41Lm9yaWcvbGliamF2YS9jb25maWd1cmUJMjAxMC0xMC0wMSAxMDoyNjoxOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvbGliamF2YS9jb25maWd1cmUJMjAxMC0xMC0wOSAyMjo1ODowNC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMDIyLDYgKzEwMjIsOCBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD15ZXMKKyAgIC0tZW5hYmxlLWphdmEtbWFpbnRhaW5lci1tb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdyByZWJ1aWxkaW5nIG9mIC5jbGFzcyBhbmQgLmggZmlsZXMKKysgIC0tZW5hYmxlLWxpYmphdmEtbXVsdGlsaWIKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGxpYmphdmEgYXMgbXVsdGlsaWIKKyAgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICBzcGVlZHMgdXAgb25lLXRpbWUgYnVpbGQKKyAgIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgICBkbyBub3QgcmVqZWN0IHNsb3cgZGVwZW5kZW5jeSBleHRyYWN0b3JzCisgICAtLWVuYWJsZS1tYWludGFpbmVyLW1vZGUgIGVuYWJsZSBtYWtlIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgbm90IHVzZWZ1bAorQEAgLTE5NzQsNiArMTk3NiwxNiBAQAorIGZpCisgCisgCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYmphdmEtbXVsdGlsaWIgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7ZW5hYmxlX2xpYmphdmFfbXVsdGlsaWIrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX2xpYmphdmFfbXVsdGlsaWI7CisrZmkKKysKKytpZiB0ZXN0ICIkZW5hYmxlX2xpYmphdmFfbXVsdGlsaWIiID0gbm87IHRoZW4KKysgIG11bHRpbGliPW5vCisrICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzIC0tZGlzYWJsZS1tdWx0aWxpYiIKKytmaQorKworICMgSXQgbWF5IG5vdCBiZSBzYWZlIHRvIHJ1biBsaW5raW5nIHRlc3RzIGluIEFDX1BST0dfQ0MvQUNfUFJPR19DWFguCisgCisgCitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2xpYmphdmEvY29uZmlndXJlLmFjIGdjYy00LjQuNS9saWJqYXZhL2NvbmZpZ3VyZS5hYworLS0tIGdjYy00LjQuNS5vcmlnL2xpYmphdmEvY29uZmlndXJlLmFjCTIwMTAtMDYtMTEgMTM6NDk6MTYuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2xpYmphdmEvY29uZmlndXJlLmFjCTIwMTAtMTAtMDkgMjI6NTg6MDQuMDAwMDAwMDAwICswMjAwCitAQCAtMTM5LDYgKzEzOSwxMyBAQAorIAlbYWxsb3cgcmVidWlsZGluZyBvZiAuY2xhc3MgYW5kIC5oIGZpbGVzXSkpCisgQU1fQ09ORElUSU9OQUwoSkFWQV9NQUlOVEFJTkVSX01PREUsIHRlc3QgIiRlbmFibGVfamF2YV9tYWludGFpbmVyX21vZGUiID0geWVzKQorIAorK0FDX0FSR19FTkFCTEUobGliamF2YS1tdWx0aWxpYiwKKysJQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxpYmphdmEtbXVsdGlsaWJdLCBbYnVpbGQgbGliamF2YSBhcyBtdWx0aWxpYl0pKQorK2lmIHRlc3QgIiRlbmFibGVfbGliamF2YV9tdWx0aWxpYiIgPSBubzsgdGhlbgorKyAgbXVsdGlsaWI9bm8KKysgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1kaXNhYmxlLW11bHRpbGliIgorK2ZpCisrCisgIyBJdCBtYXkgbm90IGJlIHNhZmUgdG8gcnVuIGxpbmtpbmcgdGVzdHMgaW4gQUNfUFJPR19DQy9BQ19QUk9HX0NYWC4KKyBHQ0NfTk9fRVhFQ1VUQUJMRVMKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMTMwLWNyb3NzLWNvbXBpbGUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzEzMC1jcm9zcy1jb21waWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYmM2MGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzEzMC1jcm9zcy1jb21waWxlLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZ3VyZSBnY2MtNC40LjUvZ2NjL2NvbmZpZ3VyZQorLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWd1cmUJMjAxMC0wNi0yMCAxNzo0Mzo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvZ2NjL2NvbmZpZ3VyZQkyMDEwLTEwLTA5IDIyOjU4OjM2LjAwMDAwMDAwMCArMDIwMAorQEAgLTEzOTk3LDcgKzEzOTk3LDcgQEAKKyAJICAgIHwgcG93ZXJwYyotKi0qLHBvd2VycGM2NCotKi0qKQorIAkJQ1JPU1M9IiRDUk9TUyAtRE5BVElWRV9DUk9TUyIgOzsKKyAJZXNhYworLWVsaWYgdGVzdCAieCRUQVJHRVRfU1lTVEVNX1JPT1QiICE9IHg7IHRoZW4KKytlbGlmIHRlc3QgIngkVEFSR0VUX1NZU1RFTV9ST09UIiAhPSB4IC1vICRidWlsZCAhPSAkaG9zdDsgdGhlbgorICAgICAgICAgU1lTVEVNX0hFQURFUl9ESVI9JGJ1aWxkX3N5c3RlbV9oZWFkZXJfZGlyCisgZmkKKyAKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYyBnY2MtNC40LjUvZ2NjL2NvbmZpZ3VyZS5hYworLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWd1cmUuYWMJMjAxMC0wNi0yMCAxNzo0Mzo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvZ2NjL2NvbmZpZ3VyZS5hYwkyMDEwLTEwLTA5IDIyOjU4OjM2LjAwMDAwMDAwMCArMDIwMAorQEAgLTE3MjAsNyArMTcyMCw3IEBACisgCSAgICB8IHBvd2VycGMqLSotKixwb3dlcnBjNjQqLSotKikKKyAJCUNST1NTPSIkQ1JPU1MgLUROQVRJVkVfQ1JPU1MiIDs7CisgCWVzYWMKKy1lbGlmIHRlc3QgIngkVEFSR0VUX1NZU1RFTV9ST09UIiAhPSB4OyB0aGVuCisrZWxpZiB0ZXN0ICJ4JFRBUkdFVF9TWVNURU1fUk9PVCIgIT0geCAtbyAkYnVpbGQgIT0gJGhvc3Q7IHRoZW4KKyAgICAgICAgIFNZU1RFTV9IRUFERVJfRElSPSRidWlsZF9zeXN0ZW1faGVhZGVyX2RpciAKKyBmaQorIAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvdW53aW5kLWR3Mi5jIGdjYy00LjQuNS9nY2MvdW53aW5kLWR3Mi5jCistLS0gZ2NjLTQuNC41Lm9yaWcvZ2NjL3Vud2luZC1kdzIuYwkyMDEwLTAxLTIwIDA5OjM5OjE4LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNS9nY2MvdW53aW5kLWR3Mi5jCTIwMTAtMTAtMDkgMjI6NTg6MzYuMDAwMDAwMDAwICswMjAwCitAQCAtMzI5LDkgKzMyOSwxMSBAQAorIH0KKyAjZW5kaWYKKyAKKysjaWZuZGVmIGluaGliaXRfbGliYworICNpZmRlZiBNRF9VTldJTkRfU1VQUE9SVAorICNpbmNsdWRlIE1EX1VOV0lORF9TVVBQT1JUCisgI2VuZGlmCisrI2VuZGlmCisgDAorIC8qIEV4dHJhY3QgYW55IGludGVyZXN0aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIENJRSBmb3IgdGhlIHRyYW5zbGF0aW9uCisgICAgdW5pdCBGIGJlbG9uZ3MgdG8uICBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBieXRlIGFmdGVyIHRoZSBhdWdtZW50YXRpb24sCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzE0MC1kZWZhdWx0LWZvcm1hdC1zZWN1cml0eS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMTQwLWRlZmF1bHQtZm9ybWF0LXNlY3VyaXR5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMWQ5ODgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzE0MC1kZWZhdWx0LWZvcm1hdC1zZWN1cml0eS5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9jLWNvbW1vbi5jIGdjYy00LjQuNS9nY2MvYy1jb21tb24uYworLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jLWNvbW1vbi5jCTIwMTAtMDctMjcgMTU6MDc6MjguMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2djYy9jLWNvbW1vbi5jCTIwMTAtMTAtMDkgMjI6NTk6MDMuMDAwMDAwMDAwICswMjAwCitAQCAtMzAxLDcgKzMwMSw3IEBACisgLyogV2FybiBhYm91dCBmb3JtYXQvYXJndW1lbnQgYW5vbWFsaWVzIGluIGNhbGxzIHRvIGZvcm1hdHRlZCBJL08gZnVuY3Rpb25zCisgICAgKCpwcmludGYsICpzY2FuZiwgc3RyZnRpbWUsIHN0cmZtb24sIGV0Yy4pLiAgKi8KKyAKKy1pbnQgd2Fybl9mb3JtYXQ7CisraW50IHdhcm5fZm9ybWF0ID0gMTsKKyAKKyAvKiBXYXJuIGFib3V0IHVzaW5nIF9fbnVsbCAoYXMgTlVMTCBpbiBDKyspIGFzIHNlbnRpbmVsLiAgRm9yIGNvZGUgY29tcGlsZWQKKyAgICB3aXRoIEdDQyB0aGlzIGRvZXNuJ3QgbWF0dGVyIGFzIF9fbnVsbCBpcyBndWFyYW50ZWVkIHRvIGhhdmUgdGhlIHJpZ2h0CitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9jLm9wdCBnY2MtNC40LjUvZ2NjL2Mub3B0CistLS0gZ2NjLTQuNC41Lm9yaWcvZ2NjL2Mub3B0CTIwMDktMDktMTggMjM6NTM6MjMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2djYy9jLm9wdAkyMDEwLTEwLTA5IDIyOjU5OjAzLjAwMDAwMDAwMCArMDIwMAorQEAgLTIzNiw3ICsyMzYsNyBAQAorIFdhcm4gYWJvdXQgZm9ybWF0IHN0cmluZ3MgdGhhdCBjb250YWluIE5VTCBieXRlcworIAorIFdmb3JtYXQtc2VjdXJpdHkKKy1DIE9iakMgQysrIE9iakMrKyBWYXIod2Fybl9mb3JtYXRfc2VjdXJpdHkpIFdhcm5pbmcKKytDIE9iakMgQysrIE9iakMrKyBWYXIod2Fybl9mb3JtYXRfc2VjdXJpdHkpIEluaXQoMSkgV2FybmluZworIFdhcm4gYWJvdXQgcG9zc2libGUgc2VjdXJpdHkgcHJvYmxlbXMgd2l0aCBmb3JtYXQgZnVuY3Rpb25zCisgCisgV2Zvcm1hdC15MmsKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvZ2NjL2RvYy9pbnZva2UudGV4aSBnY2MtNC40LjUvZ2NjL2RvYy9pbnZva2UudGV4aQorLS0tIGdjYy00LjQuNS5vcmlnL2djYy9kb2MvaW52b2tlLnRleGkJMjAxMC0wOS0wOCAyMDoxMzowMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvZ2NjL2RvYy9pbnZva2UudGV4aQkyMDEwLTEwLTA5IDIyOjU5OjAzLjAwMDAwMDAwMCArMDIwMAorQEAgLTI4ODgsNiArMjg4OCw5IEBACisgQG9wdGlvbnstV2Zvcm1hdC1ub25saXRlcmFsfSwgQG9wdGlvbnstV2Zvcm1hdC1zZWN1cml0eX0sIGFuZAorIEBvcHRpb257LVdmb3JtYXQ9Mn0gYXJlIGF2YWlsYWJsZSwgYnV0IGFyZSBub3QgaW5jbHVkZWQgaW4gQG9wdGlvbnstV2FsbH0uCisgCisrTk9URTogSW4gR2VudG9vLCB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgZm9yIEMsIEMrKywgT2JqQywgT2JqQysrLgorK1RvIGRpc2FibGUsIHVzZSBAb3B0aW9uey1XZm9ybWF0PTB9LgorKworIEBpdGVtIC1XZm9ybWF0LXkyaworIEBvcGluZGV4IFdmb3JtYXQteTJrCisgQG9waW5kZXggV25vLWZvcm1hdC15MmsKK0BAIC0yOTQxLDYgKzI5NDQsMTEgQEAKKyBpbiBmdXR1cmUgd2FybmluZ3MgbWF5IGJlIGFkZGVkIHRvIEBvcHRpb257LVdmb3JtYXQtc2VjdXJpdHl9IHRoYXQgYXJlIG5vdAorIGluY2x1ZGVkIGluIEBvcHRpb257LVdmb3JtYXQtbm9ubGl0ZXJhbH0uKQorIAorK05PVEU6IEluIEdlbnRvbywgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGZvciBDLCBDKyssIE9iakMsIE9iakMrKy4KKytUbyBkaXNhYmxlLCB1c2UgQG9wdGlvbnstV25vLWZvcm1hdC1zZWN1cml0eX0sIG9yIGRpc2FibGUgYWxsIGZvcm1hdCB3YXJuaW5ncworK3dpdGggQG9wdGlvbnstV2Zvcm1hdD0wfS4gIFRvIG1ha2UgZm9ybWF0IHNlY3VyaXR5IHdhcm5pbmdzIGZhdGFsLCBzcGVjaWZ5CisrQG9wdGlvbnstV2Vycm9yPWZvcm1hdC1zZWN1cml0eX0uCisrCisgQGl0ZW0gLVdmb3JtYXQ9MgorIEBvcGluZGV4IFdmb3JtYXQ9MgorIEBvcGluZGV4IFduby1mb3JtYXQ9MgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi8xNTAtZGVmYXVsdC1mb3J0aWZ5LXNvdXJjZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMTUwLWRlZmF1bHQtZm9ydGlmeS1zb3VyY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ1YTdlOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMTUwLWRlZmF1bHQtZm9ydGlmeS1zb3VyY2UucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvZG9jL2ludm9rZS50ZXhpIGdjYy00LjQuNS9nY2MvZG9jL2ludm9rZS50ZXhpCistLS0gZ2NjLTQuNC41Lm9yaWcvZ2NjL2RvYy9pbnZva2UudGV4aQkyMDEwLTEwLTA5IDIyOjU5OjAzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9nY2MvZG9jL2ludm9rZS50ZXhpCTIwMTAtMTAtMDkgMjI6NTk6MzMuMDAwMDAwMDAwICswMjAwCitAQCAtNTQzMiw2ICs1NDMyLDExIEBACisgUGxlYXNlIG5vdGUgdGhlIHdhcm5pbmcgdW5kZXIgQG9wdGlvbnstZmdjc2V9IGFib3V0CisgaW52b2tpbmcgQG9wdGlvbnstTzJ9IG9uIHByb2dyYW1zIHRoYXQgdXNlIGNvbXB1dGVkIGdvdG9zLgorIAorK05PVEU6IEluIEdlbnRvbywgQG9wdGlvbnstRF9GT1JUSUZZX1NPVVJDRT0yfSBpcyBzZXQgYnkgZGVmYXVsdCwgYW5kIGlzCisrYWN0aXZhdGVkIHdoZW4gQG9wdGlvbnstT30gaXMgc2V0IHRvIDIgb3IgaGlnaGVyLiAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwKKytjb21waWxlLXRpbWUgYW5kIHJ1bi10aW1lIGNoZWNrcyBmb3Igc2V2ZXJhbCBsaWJjIGZ1bmN0aW9ucy4gIFRvIGRpc2FibGUsCisrc3BlY2lmeSBlaXRoZXIgQG9wdGlvbnstVV9GT1JUSUZZX1NPVVJDRX0gb3IgQG9wdGlvbnstRF9GT1JUSUZZX1NPVVJDRT0wfS4KKysKKyBAaXRlbSAtTzMKKyBAb3BpbmRleCBPMworIE9wdGltaXplIHlldCBtb3JlLiAgQG9wdGlvbnstTzN9IHR1cm5zIG9uIGFsbCBvcHRpbWl6YXRpb25zIHNwZWNpZmllZAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvZ2NjLmMgZ2NjLTQuNC41L2djYy9nY2MuYworLS0tIGdjYy00LjQuNS5vcmlnL2djYy9nY2MuYwkyMDEwLTAxLTA5IDAxOjA1OjA2LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNS9nY2MvZ2NjLmMJMjAxMC0xMC0wOSAyMjo1OTozMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC04MDcsNiArODA3LDcgQEAKKyAgJXtIfSAlQyAle0QqJlUqJkEqfSAle2kqfSAlWiAlaVwKKyAgJXtmbXVkZmxhcDotRF9NVURGTEFQIC1pbmNsdWRlIG1mLXJ1bnRpbWUuaH1cCisgICV7Zm11ZGZsYXB0aDotRF9NVURGTEFQIC1EX01VREZMQVBUSCAtaW5jbHVkZSBtZi1ydW50aW1lLmh9XAorKyAleyFEX0ZPUlRJRllfU09VUkNFOiV7IURfRk9SVElGWV9TT1VSQ0U9KjoleyFVX0ZPUlRJRllfU09VUkNFOi1EX0ZPUlRJRllfU09VUkNFPTJ9fX1cCisgICV7RXxNfE1NOiVXe28qfX0iOworIAorIC8qIFRoaXMgY29udGFpbnMgY3BwIG9wdGlvbnMgd2hpY2ggYXJlIGNvbW1vbiB3aXRoIGNjMV9vcHRpb25zIGFuZCBhcmUgcGFzc2VkCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzE2MC1uZXRic2Qtc3ltYm9saWMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzE2MC1uZXRic2Qtc3ltYm9saWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYxYjA3OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMTYwLW5ldGJzZC1zeW1ib2xpYy5wYXRjaApAQCAtMCwwICsxLDExIEBACitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvbmV0YnNkLWVsZi5oIGdjYy00LjQuNS9nY2MvY29uZmlnL25ldGJzZC1lbGYuaAorLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvbmV0YnNkLWVsZi5oCTIwMDctMDktMDMgMTg6MTQ6MDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2djYy9jb25maWcvbmV0YnNkLWVsZi5oCTIwMTAtMTAtMDkgMjI6NTk6NTcuMDAwMDAwMDAwICswMjAwCitAQCAtODIsNiArODIsNyBAQAorICNkZWZpbmUgTkVUQlNEX0xJTktfU1BFQ19FTEYgXAorICAgIiV7YXNzZXJ0Kn0gJXtSKn0gJXtycGF0aCp9IFwKKyAgICAle3NoYXJlZDotc2hhcmVkfSBcCisrICAgJXtzeW1ib2xpYzotQnN5bWJvbGljfSBcCisgICAgJXshc2hhcmVkOiBcCisgICAgICAtZGMgLWRwIFwKKyAgICAgICV7IW5vc3RkbGliOiBcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzE3MC1zcGFyYzY0LWJzZC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMTcwLXNwYXJjNjQtYnNkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZDliNTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzE3MC1zcGFyYzY0LWJzZC5wYXRjaApAQCAtMCwwICsxLDI5IEBACitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oIGdjYy00LjQuNS9nY2MvY29uZmlnL3NwYXJjL2ZyZWVic2QuaAorLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oCTIwMDctMDgtMDIgMTI6NDk6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2djYy9jb25maWcvc3BhcmMvZnJlZWJzZC5oCTIwMTAtMTAtMDkgMjM6MDA6MDMuMDAwMDAwMDAwICswMjAwCitAQCAtMjUsOSArMjUsMjIgQEAKKyAvKiBGcmVlQlNEIG5lZWRzIHRoZSBwbGF0Zm9ybSBuYW1lIChzcGFyYzY0KSBkZWZpbmVkLgorICAgIEVtYWNzIG5lZWRzIHRvIGtub3cgaWYgdGhlIGFyY2ggaXMgNjQgb3IgMzItYml0cy4gICovCisgCistI3VuZGVmICBDUFBfQ1BVNjRfREVGQVVMVF9TUEVDCistI2RlZmluZSBDUFBfQ1BVNjRfREVGQVVMVF9TUEVDIFwKKy0gICItRF9fc3BhcmM2NF9fIC1EX19zcGFyY192OV9fIC1EX19zcGFyY3Y5IC1EX19hcmNoNjRfXyIKKysjdW5kZWYgIEZCU0RfVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMKKysjZGVmaW5lIEZCU0RfVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMoKSAgICAgICAgICAgICAgICAgIFwKKysgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBpZiAoVEFSR0VUX0FSQ0g2NCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjNjRfXyIpOyAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjX3Y5X18iKTsgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX3NwYXJjdjkiKTsgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19zcGFyYyIpOyAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBidWlsdGluX2RlZmluZSAoIl9fc3BhcmNfXyIpOyAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHdoaWxlICgwKQorKworIAorICNkZWZpbmUgTElOS19TUEVDICIlKGxpbmtfYXJjaCkJCQkJCQlcCisgICAleyFtbm8tcmVsYXg6JXshcjotcmVsYXh9fQkJCQkJCVwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMTgwLWxpYmdvbXAtbm8td2Vycm9yLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi8xODAtbGliZ29tcC1uby13ZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkNTA2MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMTgwLWxpYmdvbXAtbm8td2Vycm9yLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvbGliZ29tcC9jb25maWd1cmUgZ2NjLTQuNC41L2xpYmdvbXAvY29uZmlndXJlCistLS0gZ2NjLTQuNC41Lm9yaWcvbGliZ29tcC9jb25maWd1cmUJMjAxMC0xMC0wMSAxMDoyNjoxOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvbGliZ29tcC9jb25maWd1cmUJMjAxMC0xMC0wOSAyMzowMDozMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMzM0LDcgKzMzMzQsNyBAQAorIAorICMgQWRkIC1XYWxsIC1XZXJyb3IgaWYgd2UgYXJlIHVzaW5nIEdDQy4KKyBpZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyI7IHRoZW4KKy0gIFhDRkxBR1M9IiRYQ0ZMQUdTIC1XYWxsIC1XZXJyb3IiCisrICBYQ0ZMQUdTPSIkWENGTEFHUyAtV2FsbCIKKyBmaQorIAorICMgRmluZCBvdGhlciBwcm9ncmFtcyB3ZSBuZWVkLgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi8xOTAtZmxhdHRlbi1zd2l0Y2gtc3RtdC0wMC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMTkwLWZsYXR0ZW4tc3dpdGNoLXN0bXQtMDAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRkNjhmZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMTkwLWZsYXR0ZW4tc3dpdGNoLXN0bXQtMDAucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2Mvc3RtdC5jIGdjYy00LjQuNS9nY2Mvc3RtdC5jCistLS0gZ2NjLTQuNC41Lm9yaWcvZ2NjL3N0bXQuYwkyMDEwLTAzLTA4IDEyOjQ2OjI4LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNS9nY2Mvc3RtdC5jCTIwMTAtMTAtMDkgMjM6MDE6MDEuMDAwMDAwMDAwICswMjAwCitAQCAtMjM3Nyw3ICsyMzc3LDExIEBACisgCSAgdXNlX2Nvc3RfdGFibGUKKyAJICAgID0gKFRSRUVfQ09ERSAob3JpZ190eXBlKSAhPSBFTlVNRVJBTF9UWVBFCisgCSAgICAgICAmJiBlc3RpbWF0ZV9jYXNlX2Nvc3RzIChjYXNlX2xpc3QpKTsKKy0JICBiYWxhbmNlX2Nhc2Vfbm9kZXMgKCZjYXNlX2xpc3QsIE5VTEwpOworKwkgIC8qIFdoZW4gb3B0aW1pemluZyBmb3Igc2l6ZSwgd2Ugd2FudCBhIHN0cmFpZ2h0IGxpc3QgdG8gYXZvaWQKKysJICAgICBqdW1wcyBhcyBtdWNoIGFzIHBvc3NpYmxlLiBUaGlzIGJhc2ljYWxseSBjcmVhdGVzIGFuIGlmLWVsc2UKKysJICAgICBjaGFpbi4gICovCisrCSAgaWYgKCFvcHRpbWl6ZV9zaXplKQorKwkgICAgYmFsYW5jZV9jYXNlX25vZGVzICgmY2FzZV9saXN0LCBOVUxMKTsKKyAJICBlbWl0X2Nhc2Vfbm9kZXMgKGluZGV4LCBjYXNlX2xpc3QsIGRlZmF1bHRfbGFiZWwsIGluZGV4X3R5cGUpOworIAkgIGlmIChkZWZhdWx0X2xhYmVsKQorIAkgICAgZW1pdF9qdW1wIChkZWZhdWx0X2xhYmVsKTsKK0BAIC0yOTQzLDYgKzI5NDcsNyBAQAorIAkgICAgeworIAkgICAgICBpZiAoIW5vZGVfaGFzX2xvd19ib3VuZCAobm9kZSwgaW5kZXhfdHlwZSkpCisgCQl7CisrCQkgIGlmICghb3B0aW1pemVfc2l6ZSkgLyogZG9uJ3QgamwgdG8gdGhlIC5kZWZhdWx0X2xhYmVsLiAqLworIAkJICBlbWl0X2NtcF9hbmRfanVtcF9pbnNucyAoaW5kZXgsCisgCQkJCQkgICBjb252ZXJ0X21vZGVzCisgCQkJCQkgICAobW9kZSwgaW1vZGUsCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzIwMC1saWJpYmVydHkuaC1hc3ByaW50Zi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMjAwLWxpYmliZXJ0eS5oLWFzcHJpbnRmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZTQ1MjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzIwMC1saWJpYmVydHkuaC1hc3ByaW50Zi5wYXRjaApAQCAtMCwwICsxLDE1IEBACitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2luY2x1ZGUvbGliaWJlcnR5LmggZ2NjLTQuNC41L2luY2x1ZGUvbGliaWJlcnR5LmgKKy0tLSBnY2MtNC40LjUub3JpZy9pbmNsdWRlL2xpYmliZXJ0eS5oCTIwMDgtMDYtMjQgMDM6NDI6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2luY2x1ZGUvbGliaWJlcnR5LmgJMjAxMC0xMC0wOSAyMzowMTozMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC01OTUsOCArNTk1LDExIEBACisgLyogTGlrZSBzcHJpbnRmIGJ1dCBwcm92aWRlcyBhIHBvaW50ZXIgdG8gbWFsbG9jJ2Qgc3RvcmFnZSwgd2hpY2ggbXVzdAorICAgIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuICAqLworIAorKy8qIGFzcHJpbnRmIG1heSBiZSBkZWNsYXJlZCBhcyBhIG1hY3JvIGJ5IGdsaWJjIHdpdGggX19VU0VfRk9SVElGWV9MRVZFTC4gICovCisrI2lmbmRlZiBhc3ByaW50ZgorIGV4dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgLi4uKSBBVFRSSUJVVEVfUFJJTlRGXzI7CisgI2VuZGlmCisrI2VuZGlmCisgCisgI2lmICFIQVZFX0RFQ0xfVkFTUFJJTlRGCisgLyogTGlrZSB2c3ByaW50ZiBidXQgcHJvdmlkZXMgYSBwb2ludGVyIHRvIG1hbGxvYydkIHN0b3JhZ2UsIHdoaWNoCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzIxMC1hcm0tdW5icmVhay1hcm12NHQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzIxMC1hcm0tdW5icmVhay1hcm12NHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk2YTgwYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMjEwLWFybS11bmJyZWFrLWFybXY0dC5wYXRjaApAQCAtMCwwICsxLDEyIEBACitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCBnY2MtNC40LjUvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCistLS0gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCTIwMDctMTEtMDggMTQ6NDQ6MDkuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNC41L2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAkyMDEwLTEwLTA5IDIzOjAxOjU5LjAwMDAwMDAwMCArMDIwMAorQEAgLTQ0LDcgKzQ0LDcgQEAKKyAgICBUaGUgQVJNMTBURE1JIGNvcmUgaXMgdGhlIGRlZmF1bHQgZm9yIGFybXY1dCwgc28gc2V0CisgICAgU1VCVEFSR0VUX0NQVV9ERUZBVUxUIHRvIGFjaGlldmUgdGhpcy4gICovCisgI3VuZGVmICBTVUJUQVJHRVRfQ1BVX0RFRkFVTFQKKy0jZGVmaW5lIFNVQlRBUkdFVF9DUFVfREVGQVVMVCBUQVJHRVRfQ1BVX2FybTEwdGRtaQorKyNkZWZpbmUgU1VCVEFSR0VUX0NQVV9ERUZBVUxUIFRBUkdFVF9DUFVfYXJtOXRkbWkKKyAKKyAvKiBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUIGlzIHNldCBpbgorICAgIGNvbmZpZy5nY2MgZm9yIGJpZyBlbmRpYW4gY29uZmlndXJhdGlvbnMuICAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi8yMjAtbGliaWJlcnR5LXBpYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMjIwLWxpYmliZXJ0eS1waWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNiMTgwYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMjIwLWxpYmliZXJ0eS1waWMucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9saWJpYmVydHkvTWFrZWZpbGUuaW4gZ2NjLTQuNC41L2xpYmliZXJ0eS9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjQuNS5vcmlnL2xpYmliZXJ0eS9NYWtlZmlsZS5pbgkyMDA4LTEwLTIyIDE1OjMwOjE5LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9saWJpYmVydHkvTWFrZWZpbGUuaW4JMjAxMC0xMC0wOSAyMzowMjoyOC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMjcsNiArMjI3LDcgQEAKKyAJICAkKEFSKSAkKEFSX0ZMQUdTKSAkKFRBUkdFVExJQikgXAorIAkgICAgJChSRVFVSVJFRF9PRklMRVMpICQoRVhUUkFfT0ZJTEVTKSAkKExJQk9CSlMpOyBcCisgCSAgJChSQU5MSUIpICQoVEFSR0VUTElCKTsgXAorKwkgIGNwICQoVEFSR0VUTElCKSAuLi8gOyBcCisgCSAgY2QgLi47IFwKKyAJZWxzZSB0cnVlOyBmaQorIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi8yMzAtc3VwZXJoLWRlZmF1bHQtbXVsdGlsaWIucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzIzMC1zdXBlcmgtZGVmYXVsdC1tdWx0aWxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGYyM2E5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi8yMzAtc3VwZXJoLWRlZmF1bHQtbXVsdGlsaWIucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnLmdjYyBnY2MtNC40LjUvZ2NjL2NvbmZpZy5nY2MKKy0tLSBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnLmdjYwkyMDEwLTA2LTE0IDAwOjE2OjUwLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9nY2MvY29uZmlnLmdjYwkyMDEwLTEwLTA5IDIzOjAyOjU2LjAwMDAwMDAwMCArMDIwMAorQEAgLTIxNDAsNyArMjE0MCw3IEBACisgCWlmIHRlc3QgeCR7c2hfbXVsdGlsaWJzfSA9IHggOyB0aGVuCisgCQljYXNlICR7dGFyZ2V0fSBpbgorIAkJc2g2NC1zdXBlcmgtbGludXgqIHwgXAorLQkJc2hbMTIzNF0qKQlzaF9tdWx0aWxpYnM9JHtzaF9jcHVfdGFyZ2V0fSA7OworKwkJc2hbMTIzNF0qKQlzaF9tdWx0aWxpYnM9YGNkICR7c3JjZGlyfS9jb25maWcvc2ggOyBlY2hvIHQtbWxpYi1zaFsxLTRdKiB8IHNlZCAnczp0LW1saWItc2g6LG06ZztzOiA6OmcnYCA7OworIAkJc2g2NCogfCBzaDUqKQlzaF9tdWx0aWxpYnM9bTUtMzJtZWRpYSxtNS0zMm1lZGlhLW5vZnB1LG01LWNvbXBhY3QsbTUtY29tcGFjdC1ub2ZwdSxtNS02NG1lZGlhLG01LTY0bWVkaWEtbm9mcHUgOzsKKyAJCXNoLXN1cGVyaC0qKQlzaF9tdWx0aWxpYnM9bTQsbTQtc2luZ2xlLG00LXNpbmdsZS1vbmx5LG00LW5vZnB1IDs7CisgCQlzaCotKi1saW51eCopCXNoX211bHRpbGlicz1tMSxtM2UsbTQgOzsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMjQwLWxpYnN0ZGMrKy1waWMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzI0MC1saWJzdGRjKystcGljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZGU1YTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzI0MC1saWJzdGRjKystcGljLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbSBnY2MtNC40LjUvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQorLS0tIGdjYy00LjQuNS5vcmlnL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuYW0JMjAwOS0wOC0yNiAyMTowNDoxMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQkyMDEwLTEwLTA5IDIzOjAzOjI2LjAwMDAwMDAwMCArMDIwMAorQEAgLTM1Niw2ICszNTYsMTMgQEAKKyAJICAkKE9QVF9MREZMQUdTKSAkKFNFQ1RJT05fTERGTEFHUykgJChBTV9DWFhGTEFHUykgJChMVExERkxBR1MpIC1vICRACisgCisgCisraW5zdGFsbC1leGVjLWxvY2FsOgorKwlwaWNfb2Jqcz1gc2VkIC1uICJzOic6Omc7czpecGljX29iamVjdD06OnAiICoubG8gfCBncmVwIC12ICdebm9uZSQkJ2A7IFwKKysJaWYgWyB4IiQkcGljX29ianMiICE9IHggXTsgdGhlbiBcCisrCQkkKEFSKSBjcnUgbGlic3RkYysrX3BpYy5hICQkcGljX29ianMgJCh0b3BfYnVpbGRkaXIpL2xpYnN1cGMrKy8qLm8gfHwgZXhpdCAxOyBcCisrCQkkKElOU1RBTExfREFUQSkgbGlic3RkYysrX3BpYy5hICQoREVTVERJUikkKHRvb2xleGVjbGliZGlyKSB8fCBleGl0IDE7IFwKKysJZmkKKysKKyAjIEFkZGVkIGJpdHMgdG8gYnVpbGQgZGVidWcgbGlicmFyeS4KKyBpZiBHTElCQ1hYX0JVSUxEX0RFQlVHCisgYWxsLWxvY2FsOiBidWlsZF9kZWJ1ZworZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluIGdjYy00LjQuNS9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCistLS0gZ2NjLTQuNC41Lm9yaWcvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgkyMDA5LTA4LTI2IDIxOjA0OjExLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluCTIwMTAtMTAtMDkgMjM6MDM6MjYuMDAwMDAwMDAwICswMjAwCitAQCAtNzI2LDcgKzcyNiw3IEBACisgCisgaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWRhdGEtbG9jYWwKKyAKKy1pbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUworK2luc3RhbGwtZXhlYy1hbTogaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTIGluc3RhbGwtZXhlYy1sb2NhbAorIAorIGluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisgCitAQCAtNzY1LDcgKzc2NSw3IEBACisgCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKyAJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorIAl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWluZm8tYW0gXAorLQl1bmluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUworKwl1bmluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUyBpbnN0YWxsLWV4ZWMtbG9jYWwKKyAKKyAKKyAjIFN5bWJvbCB2ZXJzaW9uaW5nIGZvciBzaGFyZWQgbGlicmFyaWVzLgorQEAgLTk0Nyw2ICs5NDcsMTQgQEAKKyBpbnN0YWxsX2RlYnVnOgorIAkoY2QgJHtkZWJ1Z2Rpcn0gJiYgJChNQUtFKSBcCisgCXRvb2xleGVjbGliZGlyPSQoZ2xpYmN4eF90b29sZXhlY2xpYmRpcikvZGVidWcgaW5zdGFsbCkKKysKKytpbnN0YWxsLWV4ZWMtbG9jYWw6CisrCXBpY19vYmpzPWBzZWQgLW4gInM6Jzo6ZztzOl5waWNfb2JqZWN0PTo6cCIgKi5sbyB8IGdyZXAgLXYgJ15ub25lJCQnYDsgXAorKwlpZiBbIHgiJCRwaWNfb2JqcyIgIT0geCBdOyB0aGVuIFwKKysJCSQoQVIpIGNydSBsaWJzdGRjKytfcGljLmEgJCRwaWNfb2JqcyAkKHRvcF9idWlsZGRpcikvbGlic3VwYysrLyoubyB8fCBleGl0IDE7IFwKKysJCSQoSU5TVEFMTF9EQVRBKSBsaWJzdGRjKytfcGljLmEgJChERVNURElSKSQodG9vbGV4ZWNsaWJkaXIpIHx8IGV4aXQgMTsgXAorKwlmaQorKworICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisgIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisgLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi8yNTAtaWE2NC1ub3RlR05Vc3RhY2sucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzI1MC1pYTY0LW5vdGVHTlVzdGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDEyOGU0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi8yNTAtaWE2NC1ub3RlR05Vc3RhY2sucGF0Y2gKQEAgLTAsMCArMSw3OSBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtIGdjYy00LjQuNS9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtCistLS0gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGJlZ2luLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9nY2MvY29uZmlnL2lhNjQvY3J0YmVnaW4uYXNtCTIwMTAtMTAtMDkgMjM6MDM6NTUuMDAwMDAwMDAwICswMjAwCitAQCAtMjUyLDMgKzI1Miw3IEBACisgLndlYWsgX19jeGFfZmluYWxpemUKKyAjZW5kaWYKKyAud2VhayBfSnZfUmVnaXN0ZXJDbGFzc2VzCisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtIGdjYy00LjQuNS9nY2MvY29uZmlnL2lhNjQvY3J0ZW5kLmFzbQorLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2djYy9jb25maWcvaWE2NC9jcnRlbmQuYXNtCTIwMTAtMTAtMDkgMjM6MDM6NTUuMDAwMDAwMDAwICswMjAwCitAQCAtMTE5LDMgKzExOSw3IEBACisgCisgCWJyLnJldC5zcHRrLm1hbnkgcnAKKyAJLmVuZHAgX19kb19nbG9iYWxfY3RvcnNfYXV4CisrCisrI2lmZGVmIF9fbGludXhfXworKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjazsgLnByZXZpb3VzCisrI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRpLmFzbSBnY2MtNC40LjUvZ2NjL2NvbmZpZy9pYTY0L2NydGkuYXNtCistLS0gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZy9pYTY0L2NydGkuYXNtCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2djYy9jb25maWcvaWE2NC9jcnRpLmFzbQkyMDEwLTEwLTA5IDIzOjAzOjU1LjAwMDAwMDAwMCArMDIwMAorQEAgLTUxLDMgKzUxLDcgQEAKKyAJLmJvZHkKKyAKKyAjIGVuZCBvZiBjcnRpLmFzbQorKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL2lhNjQvY3J0bi5hc20gZ2NjLTQuNC41L2djYy9jb25maWcvaWE2NC9jcnRuLmFzbQorLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvaWE2NC9jcnRuLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9nY2MvY29uZmlnL2lhNjQvY3J0bi5hc20JMjAxMC0xMC0wOSAyMzowMzo1NS4wMDAwMDAwMDAgKzAyMDAKK0BAIC00MSwzICs0MSw3IEBACisgCWJyLnJldC5zcHRrLm1hbnkgYjAKKyAKKyAjIGVuZCBvZiBjcnRuLmFzbQorKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbSBnY2MtNC40LjUvZ2NjL2NvbmZpZy9pYTY0L2xpYjFmdW5jcy5hc20KKy0tLSBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9nY2MvY29uZmlnL2lhNjQvbGliMWZ1bmNzLmFzbQkyMDEwLTEwLTA5IDIzOjAzOjU1LjAwMDAwMDAwMCArMDIwMAorQEAgLTc5MywzICs3OTMsNyBAQAorIAkuZW5kcCBfX2Zsb2F0dGl0ZgorICNlbmRpZgorICNlbmRpZgorKworKyNpZmRlZiBfX2xpbnV4X18KKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2s7IC5wcmV2aW91cworKyNlbmRpZgorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL2lhNjQvbGludXguaCBnY2MtNC40LjUvZ2NjL2NvbmZpZy9pYTY0L2xpbnV4LmgKKy0tLSBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL2lhNjQvbGludXguaAkyMDA5LTAyLTEyIDE3OjMwOjUzLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNS9nY2MvY29uZmlnL2lhNjQvbGludXguaAkyMDEwLTEwLTA5IDIzOjAzOjU1LjAwMDAwMDAwMCArMDIwMAorQEAgLTUsNiArNSw4IEBACisgCisgI2RlZmluZSBUQVJHRVRfVkVSU0lPTiBmcHJpbnRmIChzdGRlcnIsICIgKElBLTY0KSBMaW51eCIpOworIAorKyNkZWZpbmUgVEFSR0VUX0FTTV9GSUxFX0VORCBmaWxlX2VuZF9pbmRpY2F0ZV9leGVjX3N0YWNrCisrCisgLyogVGhpcyBpcyBmb3IgLXByb2ZpbGUgdG8gdXNlIC1sY19wIGluc3RlYWQgb2YgLWxjLiAgKi8KKyAjdW5kZWYgQ0MxX1NQRUMKKyAjZGVmaW5lIENDMV9TUEVDICIle3Byb2ZpbGU6LXB9ICV7Ryp9IgorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9wcGMtYXNtLmggZ2NjLTQuNC41L2djYy9jb25maWcvcnM2MDAwL3BwYy1hc20uaAorLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvcnM2MDAwL3BwYy1hc20uaAkyMDA4LTEwLTEzIDE3OjQ0OjI2LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9nY2MvY29uZmlnL3JzNjAwMC9wcGMtYXNtLmgJMjAxMC0xMC0wOSAyMzowMzo1NS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNzIsNyArMTcyLDcgQEAKKyAJLnNpemUgRlVOQ19OQU1FKG5hbWUpLEdMVUUoLkwsbmFtZSktRlVOQ19OQU1FKG5hbWUpCisgI2VuZGlmCisgCistI2lmIGRlZmluZWQgX19saW51eF9fICYmICFkZWZpbmVkIF9fcG93ZXJwYzY0X18KKysjaWYgZGVmaW5lZCBfX2xpbnV4X18KKyAJLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrCisgCS5wcmV2aW91cworICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi8yNjAtc2gtbGliZ2NjLXN0YWNrcy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMjYwLXNoLWxpYmdjYy1zdGFja3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2YmFmMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMjYwLXNoLWxpYmdjYy1zdGFja3MucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL3NoL2xpYjFmdW5jcy5hc20gZ2NjLTQuNC41L2djYy9jb25maWcvc2gvbGliMWZ1bmNzLmFzbQorLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvc2gvbGliMWZ1bmNzLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9nY2MvY29uZmlnL3NoL2xpYjFmdW5jcy5hc20JMjAxMC0xMC0wOSAyMzowNDoyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMCw2ICszMCwxMSBAQAorICEhIHJlY29kZWQgaW4gYXNzZW1ibHkgYnkgVG9zaGl5YXN1IE1vcml0YQorICEhIHRtQG5ldGNvbS5jb20KKyAKKysjaWYgZGVmaW5lZChfX0VMRl9fKSAmJiBkZWZpbmVkKF9fbGludXhfXykKKysuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2ssIiIsJXByb2diaXRzCisrLnByZXZpb3VzCisrI2VuZGlmCisrCisgLyogU0gyIG9wdGltaXphdGlvbnMgZm9yIF9fX2FzaHJzaTMsIF9fX2FzaGxzaTMsIF9fX2xzaHJzaTMgYW5kCisgICAgRUxGIGxvY2FsIGxhYmVsIHByZWZpeGVzIGJ5IEoib3JuIFJlbm5lY2tlCisgICAgYW15bGFhckBjeWdudXMuY29tICAqLworZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL3NoL2xpbnV4LWF0b21pYy5hc20gZ2NjLTQuNC41L2djYy9jb25maWcvc2gvbGludXgtYXRvbWljLmFzbQorLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvc2gvbGludXgtYXRvbWljLmFzbQkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9nY2MvY29uZmlnL3NoL2xpbnV4LWF0b21pYy5hc20JMjAxMC0xMC0wOSAyMzowNDoyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMzYsMyArMTM2LDYgQEAKKyBBVE9NSUNfRkVUQ0hfQU5EX0NPTUJPUChuYW5kLGFuZCxub3QsNCxsLG1vdikKKyAKKyAjZW5kaWYgLyogISBfX1NINV9fICovCisrCisrLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrLCIiLCVwcm9nYml0cworKy5wcmV2aW91cwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi8yNzAtc2gtcHIyNDgzNi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMjcwLXNoLXByMjQ4MzYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFjYTYzZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMjcwLXNoLXByMjQ4MzYucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlndXJlIGdjYy00LjQuNS9nY2MvY29uZmlndXJlCistLS0gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZ3VyZQkyMDEwLTEwLTA5IDIyOjU4OjM2LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9nY2MvY29uZmlndXJlCTIwMTAtMTAtMDkgMjM6MDQ6NTAuMDAwMDAwMDAwICswMjAwCitAQCAtMjIyODUsNyArMjIyODUsNyBAQAorIAl0bHNfZmlyc3RfbWlub3I9MTQKKyAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCisgCTs7CistICBzaC0qLSogfCBzaFszNF0tKi0qKQorKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCisgICAgIGNvbmZ0ZXN0X3M9JworIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKKyBmb286CS5sb25nCTI1CitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWd1cmUuYWMgZ2NjLTQuNC41L2djYy9jb25maWd1cmUuYWMKKy0tLSBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlndXJlLmFjCTIwMTAtMTAtMDkgMjI6NTg6MzYuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2djYy9jb25maWd1cmUuYWMJMjAxMC0xMC0wOSAyMzowNDo1MC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNzI4LDcgKzI3MjgsNyBAQAorIAl0bHNfZmlyc3RfbWlub3I9MTQKKyAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCisgCTs7CistICBzaC0qLSogfCBzaFszNF0tKi0qKQorKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCisgICAgIGNvbmZ0ZXN0X3M9JworIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKKyBmb286CS5sb25nCTI1CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzI4MC1mcmVlYnNkLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi8yODAtZnJlZWJzZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjZiMzRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi8yODAtZnJlZWJzZC5wYXRjaApAQCAtMCwwICsxLDk0IEBACitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcvZnJlZWJzZC1zcGVjLmggZ2NjLTQuNC41L2djYy9jb25maWcvZnJlZWJzZC1zcGVjLmgKKy0tLSBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL2ZyZWVic2Qtc3BlYy5oCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2djYy9jb25maWcvZnJlZWJzZC1zcGVjLmgJMjAxMC0xMC0wOSAyMzowOTo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC02MSw2ICs2MSw4IEBACisgCWJ1aWx0aW5fYXNzZXJ0ICgic3lzdGVtPXVuaXgiKTsJCQkJCVwKKyAJYnVpbHRpbl9hc3NlcnQgKCJzeXN0ZW09YnNkIik7CQkJCQlcCisgCWJ1aWx0aW5fYXNzZXJ0ICgic3lzdGVtPUZyZWVCU0QiKTsJCQkJXAorKwlpZighKGZsYWdfaXNvICYmIChjX2RpYWxlY3RfY3h4ICgpID8gY3h4X2RpYWxlY3QgPT0gY3h4OTggOiAhZmxhZ19pc29jOTkpKSkJXAorKwkJYnVpbHRpbl9kZWZpbmUoIl9MT05HTE9ORyIpOwkJCQlcCisgCUZCU0RfVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMoKTsJCQkJCVwKKyAgICAgfQkJCQkJCQkJCVwKKyAgIHdoaWxlICgwKQorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL3QtZnJlZWJzZC1laCBnY2MtNC40LjUvZ2NjL2NvbmZpZy90LWZyZWVic2QtZWgKKy0tLSBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL3QtZnJlZWJzZC1laAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNS9nY2MvY29uZmlnL3QtZnJlZWJzZC1laAkyMDEwLTEwLTA5IDIzOjA5OjUzLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw0IEBACisrIyBVc2UgdW53aW5kLWR3Mi1mZGUtZ2xpYmMKKytMSUIyQURERUggPSAkKHNyY2RpcikvdW53aW5kLWR3Mi5jICQoc3JjZGlyKS91bndpbmQtZHcyLWZkZS1nbGliYy5jIFwKKysgICQoc3JjZGlyKS91bndpbmQtc2psai5jICQoc3JjZGlyKS9ndGhyLWduYXQuYyAkKHNyY2RpcikvdW53aW5kLWMuYworK0xJQjJBRERFSERFUCA9IHVud2luZC5pbmMgdW53aW5kLWR3Mi1mZGUuaCB1bndpbmQtZHcyLWZkZS5jCitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcuZ2NjIGdjYy00LjQuNS9nY2MvY29uZmlnLmdjYworLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcuZ2NjCTIwMTAtMTAtMDkgMjM6MDI6NTYuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2djYy9jb25maWcuZ2NjCTIwMTAtMTAtMDkgMjM6MDk6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtNDU2LDcgKzQ1Niw3IEBACisgICAjIHBsZWFzZXMgYXJvdW5kIHRoZSBwcm92aWRlZCBjb3JlIHNldHRpbmcuCisgICBnYXM9eWVzCisgICBnbnVfbGQ9eWVzCistICBleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBjcnRlbmQubyBjcnRiZWdpblMubyBjcnRlbmRTLm8iCisrICBleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBjcnRlbmQubyBjcnRiZWdpblMubyBjcnRlbmRTLm8gY3J0YmVnaW5ULm8iCisgICBmYnNkX21ham9yPWBlY2hvICR7dGFyZ2V0fSB8IHNlZCAtZSAncy8uKmZyZWVic2QvL2cnIHwgc2VkIC1lICdzL1wuLiovL2cnYAorICAgdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBGQlNEX01BSk9SPSR7ZmJzZF9tYWpvcn0iCisgICB0bWFrZV9maWxlPSJ0LXNsaWJnY2MtZWxmLXZlciB0LWZyZWVic2QiCitAQCAtMTA0OCw2ICsxMDQ4LDEwIEBACisgCTs7CisgaVszNDU2N104Ni0qLWZyZWVic2QqKQorIAl0bV9maWxlPSIke3RtX2ZpbGV9IGkzODYvdW5peC5oIGkzODYvYXR0LmggZGJ4ZWxmLmggZWxmb3MuaCAke2Zic2RfdG1fZmlsZX0gaTM4Ni9mcmVlYnNkLmgiCisrCWZic2RfbWFqb3I9YGVjaG8gJHt0YXJnZXR9IHwgc2VkIC1lICdzLy4qZnJlZWJzZC8vZycgfCBzZWQgLWUgJ3MvXC4uKi8vZydgCisrCWlmIHRlc3QgJHtmYnNkX21ham9yfSAtZ2UgNzsgdGhlbgorKwkJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSB0LWZyZWVic2QtZWgiCisrCWZpCisgCTs7CisgeDg2XzY0LSotZnJlZWJzZCopCisgCXRtX2ZpbGU9IiR7dG1fZmlsZX0gaTM4Ni91bml4LmggaTM4Ni9hdHQuaCBkYnhlbGYuaCBlbGZvcy5oICR7ZmJzZF90bV9maWxlfSBpMzg2L3g4Ni02NC5oIGkzODYvZnJlZWJzZC5oIGkzODYvZnJlZWJzZDY0LmgiCitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9jcnRzdHVmZi5jIGdjYy00LjQuNS9nY2MvY3J0c3R1ZmYuYworLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jcnRzdHVmZi5jCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2djYy9jcnRzdHVmZi5jCTIwMTAtMTAtMDkgMjM6MDk6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtODUsMTMgKzg1LDE1IEBACisgICAgICYmICFkZWZpbmVkKE9CSkVDVF9GT1JNQVRfRkxBVCkgXAorICAgICAmJiBkZWZpbmVkKEhBVkVfTERfRUhfRlJBTUVfSERSKSBcCisgICAgICYmICFkZWZpbmVkKGluaGliaXRfbGliYykgJiYgIWRlZmluZWQoQ1JUU1RVRkZUX08pIFwKKy0gICAgJiYgZGVmaW5lZChfX0dMSUJDX18pICYmIF9fR0xJQkNfXyA+PSAyCisrICAgICYmICgoZGVmaW5lZChfX0dMSUJDX18pICYmIF9fR0xJQkNfXyA+PSAyKSBcCisrICAgIHx8IChkZWZpbmVkKF9fRnJlZUJTRF92ZXJzaW9uKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMjIpKQorICNpbmNsdWRlIDxsaW5rLmg+CisgLyogdUNsaWJjIHByZXRlbmRzIHRvIGJlIGdsaWJjIDIuMiBhbmQgRFRfQ09ORklHIGlzIGRlZmluZWQgaW4gaXRzIGxpbmsuaC4KKyAgICBCdXQgaXQgZG9lc24ndCB1c2UgUFRfR05VX0VIX0ZSQU1FIEVMRiBzZWdtZW50IGN1cnJlbnRseS4gICovCisgIyBpZiAhZGVmaW5lZChfX1VDTElCQ19fKSBcCistICAgICAmJiAoX19HTElCQ19fID4gMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID4gMikgXAorLSAgICAgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA9PSAyICYmIGRlZmluZWQoRFRfQ09ORklHKSkpCisrICAgICB8fCAoX19HTElCQ19fID4gMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID4gMikgXAorKyAgICAgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA9PSAyICYmIGRlZmluZWQoRFRfQ09ORklHKSkpIFwKKysgICAgIHx8IChfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMjIpCisgIyAgZGVmaW5lIFVTRV9QVF9HTlVfRUhfRlJBTUUKKyAjIGVuZGlmCisgI2VuZGlmCitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy91bndpbmQtZHcyLWZkZS1nbGliYy5jIGdjYy00LjQuNS9nY2MvdW53aW5kLWR3Mi1mZGUtZ2xpYmMuYworLS0tIGdjYy00LjQuNS5vcmlnL2djYy91bndpbmQtZHcyLWZkZS1nbGliYy5jCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2djYy91bndpbmQtZHcyLWZkZS1nbGliYy5jCTIwMTAtMTAtMDkgMjM6MDk6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtNDYsOCArNDYsOSBAQAorICNpbmNsdWRlICJndGhyLmgiCisgCisgI2lmICFkZWZpbmVkKGluaGliaXRfbGliYykgJiYgZGVmaW5lZChIQVZFX0xEX0VIX0ZSQU1FX0hEUikgXAorLSAgICAmJiAoX19HTElCQ19fID4gMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID4gMikgXAorLQl8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID09IDIgJiYgZGVmaW5lZChEVF9DT05GSUcpKSkKKysgICAgJiYgKChfX0dMSUJDX18gPiAyIHx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPiAyKSBcCisrCXx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPT0gMiAmJiBkZWZpbmVkKERUX0NPTkZJRykpKSBcCisrICAgIHx8IChfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMjIgKSkKKyAKKyAjaWZuZGVmIF9fUkVMT0NfUE9JTlRFUgorICMgZGVmaW5lIF9fUkVMT0NfUE9JTlRFUihwdHIsIGJhc2UpICgocHRyKSArIChiYXNlKSkKK0BAIC02Myw2ICs2NCwxMyBAQAorICNkZWZpbmUgUFRfR05VX0VIX0ZSQU1FIChQVF9MT09TICsgMHg0NzRlNTUwKQorICNlbmRpZgorIAorKy8qIFN1cHBvcnQgRnJlZUJTRCAqLworKyNpZm5kZWYgRWxmVworKyMgaWZkZWYgX19FbGZOCisrIyAgZGVmaW5lIEVsZlcgX19FbGZOCisrIyBlbmRpZgorKyNlbmRpZgorKworIHN0cnVjdCB1bndfZWhfY2FsbGJhY2tfZGF0YQorIHsKKyAgIF9VbndpbmRfUHRyIHBjOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi8yOTAtZnJlZWJzZC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMjkwLWZyZWVic2QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhkNjMyZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMjkwLWZyZWVic2QucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL2ZyZWVic2Qtc3BlYy5oIGdjYy00LjQuNS9nY2MvY29uZmlnL2ZyZWVic2Qtc3BlYy5oCistLS0gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZy9mcmVlYnNkLXNwZWMuaAkyMDEwLTEwLTA5IDIzOjA5OjUzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9nY2MvY29uZmlnL2ZyZWVic2Qtc3BlYy5oCTIwMTAtMTAtMDkgMjM6MTA6MDIuMDAwMDAwMDAwICswMjAwCitAQCAtODYsOSArODYsMTAgQEAKKyAjZGVmaW5lIEZCU0RfU1RBUlRGSUxFX1NQRUMgXAorICAgIiV7IXNoYXJlZDogXAorICAgICAgJXtwZzpnY3J0MS5vJXN9ICV7IXBnOiV7cDpnY3J0MS5vJXN9IFwKKy0JCSAgICAgICAleyFwOiV7cHJvZmlsZTpnY3J0MS5vJXN9IFwKKy0JCQkgJXshcHJvZmlsZTpjcnQxLm8lc319fX0gXAorLSAgIGNydGkubyVzICV7IXNoYXJlZDpjcnRiZWdpbi5vJXN9ICV7c2hhcmVkOmNydGJlZ2luUy5vJXN9IgorKwkleyFwOiV7cHJvZmlsZTpnY3J0MS5vJXN9IFwKKysJICV7IXByb2ZpbGU6Y3J0MS5vJXN9fX19IFwKKysgICBjcnRpLm8lcyBcCisrICAgJXtzdGF0aWM6Y3J0YmVnaW5ULm8lcztzaGFyZWQ6Y3J0YmVnaW5TLm8lczs6Y3J0YmVnaW4ubyVzfSIKKyAKKyAvKiBQcm92aWRlIGEgRU5ERklMRV9TUEVDIGFwcHJvcHJpYXRlIGZvciBGcmVlQlNELiAgSGVyZSB3ZSB0YWNrIG9uCisgICAgdGhlIG1hZ2ljYWwgY3J0ZW5kLm8gZmlsZSAoc2VlIGNydHN0dWZmLmMpIHdoaWNoIHByb3ZpZGVzIHBhcnQgb2YgCitAQCAtMTI2LDcgKzEyNyw4IEBACisgICAgICV7cGc6ICAtbGNfcH0JCQkJCQkJXAorICAgfSIKKyAjZWxzZQorLSNpZiBGQlNEX01BSk9SIDwgNQorKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKysjaWYgX19GcmVlQlNEX3ZlcnNpb24gPCA1MDAwMTYKKyAjZGVmaW5lIEZCU0RfTElCX1NQRUMgIgkJCQkJCQlcCisgICAleyFzaGFyZWQ6CQkJCQkJCQlcCisgICAgICV7IXBnOgkJCQkJCQkJXAorQEAgLTEzNiwxNyArMTM4LDM0IEBACisgICAgICAgJXshcHRocmVhZDotbGNfcH0JCQkJCQkJXAorICAgICAgICV7cHRocmVhZDotbGNfcl9wfX0JCQkJCQlcCisgICB9IgorLSNlbHNlCisrI2VsaWYgX19GcmVlQlNEX3ZlcnNpb24gPCA3MDAwMjIKKyAjZGVmaW5lIEZCU0RfTElCX1NQRUMgIgkJCQkJCQlcCisgICAleyFzaGFyZWQ6CQkJCQkJCQlcCisgICAgICV7IXBnOiAle3B0aHJlYWQ6LWxwdGhyZWFkfSAtbGN9CQkJCQlcCisgICAgICV7cGc6ICAle3B0aHJlYWQ6LWxwdGhyZWFkX3B9IC1sY19wfQkJCQlcCisgICB9IgorKyNlbHNlCisrI2RlZmluZSBGQlNEX0xJQl9TUEVDICIJCQkJCQkJXAorKyAgJXshc2hhcmVkOgkJCQkJCQkJXAorKyAgICAleyFwZzogJXtwdGhyZWFkOi1scHRocmVhZH0gLWxjfQkJCQkJXAorKyAgICAle3BnOiAgJXtwdGhyZWFkOi1scHRocmVhZF9wfSAtbGNfcH19CQkJCVwKKysgICV7c2hhcmVkOgkJCQkJCQkJXAorKyAgICAle3B0aHJlYWQ6LWxwdGhyZWFkfSAtbGN9CQkJCQkJXAorKyAgIgorICNlbmRpZgorICNlbmRpZgorIAorLSNpZiBGQlNEX01BSk9SIDwgNgorKyNpZiBGQlNEX01BSk9SIDwgNQorICNkZWZpbmUgRkJTRF9EWU5BTUlDX0xJTktFUiAiL3Vzci9saWJleGVjL2xkLWVsZi5zby4xIgorICNlbHNlCisgI2RlZmluZSBGQlNEX0RZTkFNSUNfTElOS0VSICIvbGliZXhlYy9sZC1lbGYuc28uMSIKKyAjZW5kaWYKKysKKysjaWYgZGVmaW5lZChIQVZFX0xEX0VIX0ZSQU1FX0hEUikKKysjZGVmaW5lIExJTktfRUhfU1BFQyAiJXshc3RhdGljOi0tZWgtZnJhbWUtaGRyfSAiCisrI2VuZGlmCisrCisrLyogVXNlIC0tYXMtbmVlZGVkIC1sZ2NjX3MgZm9yIGVoIHN1cHBvcnQuICAqLworKyNpZmRlZiBIQVZFX0xEX0FTX05FRURFRAorKyNkZWZpbmUgVVNFX0xEX0FTX05FRURFRCAxCisrI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzMwMC11Y2xpYmMtY29uZi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMzAwLXVjbGliYy1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNDY1ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzMwMC11Y2xpYmMtY29uZi5wYXRjaApAQCAtMCwwICsxLDM1IEBACitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaCBnY2MtNC40LjUvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCistLS0gZ2NjLTQuNC41Lm9yaWcvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAkyMDEwLTEwLTA5IDIzOjEwOjMyLjAwMDAwMDAwMCArMDIwMAorQEAgLTEwNiw2ICsxMDYsMTAgQEAKKyAgdGhlbgorICAgbWFrZSBhbGwtZ2RiIGFsbC1kZWphZ251IGFsbC1sZCB8fCBleGl0IDEKKyAgIG1ha2UgaW5zdGFsbC1nZGIgaW5zdGFsbC1kZWphZ251IGluc3RhbGwtbGQgfHwgZXhpdCAxCisrZWxpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIC1hICRIX1JFQUxfVEFSR0VUID0gaTY4Ni1wYy1saW51eC11Y2xpYmMgXQorKyB0aGVuCisrICBtYWtlIGFsbC1nZGIgYWxsLWRlamFnbnUgYWxsLWxkIHx8IGV4aXQgMQorKyAgbWFrZSBpbnN0YWxsLWdkYiBpbnN0YWxsLWRlamFnbnUgaW5zdGFsbC1sZCB8fCBleGl0IDEKKyBlbGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgXSA7IHRoZW4KKyAgIG1ha2UgYm9vdHN0cmFwIHx8IGV4aXQgMQorICAgbWFrZSBpbnN0YWxsIHx8IGV4aXQgMQorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZyBnY2MtNC40LjUvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKKy0tLSBnY2MtNC40LjUub3JpZy9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZwkyMDA3LTA2LTA0IDAxOjE4OjQzLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZwkyMDEwLTEwLTA5IDIzOjEwOjMyLjAwMDAwMDAwMCArMDIwMAorQEAgLTYwMyw3ICs2MDMsNyBAQAorIAorICMgVHJhbnNmb3JtIGxpbnV4KiB0byAqLSotbGludXgtZ251KiwgdG8gc3VwcG9ydCBvbGQgY29uZmlndXJlIHNjcmlwdHMuCisgY2FzZSAkaG9zdF9vcyBpbgorLWxpbnV4LWdudSopIDs7CisrbGludXgtZ251KnxsaW51eC11Y2xpYmMqKSA7OworIGxpbnV4KikgaG9zdD1gZWNobyAkaG9zdCB8IHNlZCAncy9eXCguKi0uKi1saW51eFwpXCguKlwpJC9cMS1nbnVcMi8nYAorIGVzYWMKKyAKK0BAIC0xMjUxLDcgKzEyNTEsNyBAQAorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgbmVlZF92ZXJzaW9uPW5vCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzMxMC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzMxMC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QzODFkYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMzEwLW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApAQCAtMCwwICsxLDEyIEBACitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCBnY2MtNC40LjUvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCistLS0gZ2NjLTQuNC41Lm9yaWcvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCTIwMDctMDQtMjMgMjM6MTA6MDkuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAkyMDEwLTEwLTA5IDIzOjExOjAwLjAwMDAwMDAwMCArMDIwMAorQEAgLTUwMyw3ICs1MDMsNyBAQAorICNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX0dMSUJDX18pCisgIyBpbmNsdWRlIDxmZWF0dXJlcy5oPgorICMgaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxIHx8IF9fR0xJQkNfXyA+IDIpIFwKKy0gICAgICYmICFkZWZpbmVkKF9faWE2NF9fKQorKyAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pICYmICFkZWZpbmVkKF9fVUNMSUJDX18pCisgIyAgIGlmbmRlZiBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgICAgZGVmaW5lIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMzIwLWM5OS1zbnByaW50Zi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMzIwLWM5OS1zbnByaW50Zi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmFhMDZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi8zMjAtYzk5LXNucHJpbnRmLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvY19nbG9iYWwvY3N0ZGlvIGdjYy00LjQuNS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2dsb2JhbC9jc3RkaW8KKy0tLSBnY2MtNC40LjUub3JpZy9saWJzdGRjKystdjMvaW5jbHVkZS9jX2dsb2JhbC9jc3RkaW8JMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvbGlic3RkYysrLXYzL2luY2x1ZGUvY19nbG9iYWwvY3N0ZGlvCTIwMTAtMTAtMDkgMjM6MTE6MjcuMDAwMDAwMDAwICswMjAwCitAQCAtMTM5LDcgKzEzOSw3IEBACisgCisgX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorIAorLSNpZiBfR0xJQkNYWF9VU0VfQzk5CisrI2lmIF9HTElCQ1hYX1VTRV9DOTkgfHwgZGVmaW5lZCBfX1VDTElCQ19fCisgCisgI3VuZGVmIHNucHJpbnRmCisgI3VuZGVmIHZmc2NhbmYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMzMwLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi8zMzAtbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVmNzcwOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMzMwLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvbGlibXVkZmxhcC9tZi1ob29rczIuYyBnY2MtNC40LjUvbGlibXVkZmxhcC9tZi1ob29rczIuYworLS0tIGdjYy00LjQuNS5vcmlnL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMJMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvbGlibXVkZmxhcC9tZi1ob29rczIuYwkyMDEwLTEwLTA5IDIzOjExOjUyLjAwMDAwMDAwMCArMDIwMAorQEAgLTQyMSw3ICs0MjEsNyBAQAorIHsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIG4sIF9fTUZfQ0hFQ0tfV1JJVEUsICJiemVybyByZWdpb24iKTsKKy0gIGJ6ZXJvIChzLCBuKTsKKysgIG1lbXNldCAocywgMCwgbik7CisgfQorIAorIAorQEAgLTQzMSw3ICs0MzEsNyBAQAorICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQoc3JjLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY29weSBzcmMiKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChkZXN0LCBuLCBfX01GX0NIRUNLX1dSSVRFLCAiYmNvcHkgZGVzdCIpOworLSAgYmNvcHkgKHNyYywgZGVzdCwgbik7CisrICBtZW1tb3ZlIChkZXN0LCBzcmMsIG4pOworIH0KKyAKKyAKK0BAIC00NDEsNyArNDQxLDcgQEAKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMxLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY21wIDFzdCBhcmciKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzMiwgbiwgX19NRl9DSEVDS19SRUFELCAiYmNtcCAybmQgYXJnIik7CistICByZXR1cm4gYmNtcCAoczEsIHMyLCBuKTsKKysgIHJldHVybiBuID09IDAgPyAwIDogbWVtY21wIChzMSwgczIsIG4pOworIH0KKyAKKyAKK0BAIC00NTAsNyArNDUwLDcgQEAKKyAgIHNpemVfdCBuID0gc3RybGVuIChzKTsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIENMQU1QQUREKG4sIDEpLCBfX01GX0NIRUNLX1JFQUQsICJpbmRleCByZWdpb24iKTsKKy0gIHJldHVybiBpbmRleCAocywgYyk7CisrICByZXR1cm4gc3RyY2hyIChzLCBjKTsKKyB9CisgCisgCitAQCAtNDU5LDcgKzQ1OSw3IEBACisgICBzaXplX3QgbiA9IHN0cmxlbiAocyk7CisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzLCBDTEFNUEFERChuLCAxKSwgX19NRl9DSEVDS19SRUFELCAicmluZGV4IHJlZ2lvbiIpOworLSAgcmV0dXJuIHJpbmRleCAocywgYyk7CisrICByZXR1cm4gc3RycmNociAocywgYyk7CisgfQorIAorIC8qIFhYWDogIHN0cGNweSwgbWVtY2NweSAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi8zNDAtZWNqeC1ob3N0LWNjLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi8zNDAtZWNqeC1ob3N0LWNjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZjZhZTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzM0MC1lY2p4LWhvc3QtY2MucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9saWJqYXZhL01ha2VmaWxlLmluIGdjYy00LjQuNS9saWJqYXZhL01ha2VmaWxlLmluCistLS0gZ2NjLTQuNC41Lm9yaWcvbGliamF2YS9NYWtlZmlsZS5pbgkyMDEwLTEwLTAxIDEwOjI2OjE4LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuNS9saWJqYXZhL01ha2VmaWxlLmluCTIwMTAtMTAtMDkgMjM6MTI6MjIuMDAwMDAwMDAwICswMjAwCitAQCAtOTE4MCw2ICs5MTgwLDkgQEAKKyBlY2p4JChFWEVFWFQpOiAkKGVjanhfT0JKRUNUUykgJChlY2p4X0RFUEVOREVOQ0lFUykgCisgCUBybSAtZiBlY2p4JChFWEVFWFQpCisgCSQoZWNqeF9MSU5LKSAkKGVjanhfTERGTEFHUykgJChlY2p4X09CSkVDVFMpICQoZWNqeF9MREFERCkgJChMSUJTKQorK2VjanguJChPQkpFWFQpOiAkKGVjanhfU09VUkNFUykKKysJQHJtIC1mIGVjanguJChPQkpFWFQpCisrCSQoQ0NfRk9SX0JVSUxEKSAkKEJVSUxEX0NGTEFHUykgLWMgLW8gJEAgJDwKKyBnYXBwbGV0dmlld2VyJChFWEVFWFQpOiAkKGdhcHBsZXR2aWV3ZXJfT0JKRUNUUykgJChnYXBwbGV0dmlld2VyX0RFUEVOREVOQ0lFUykgCisgCUBybSAtZiBnYXBwbGV0dmlld2VyJChFWEVFWFQpCisgCSQoZ2FwcGxldHZpZXdlcl9MSU5LKSAkKGdhcHBsZXR2aWV3ZXJfTERGTEFHUykgJChnYXBwbGV0dmlld2VyX09CSkVDVFMpICQoZ2FwcGxldHZpZXdlcl9MREFERCkgJChMSUJTKQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi8zNTAtaW5kZXhfbWFjcm8ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzM1MC1pbmRleF9tYWNyby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGRhMTFlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi8zNTAtaW5kZXhfbWFjcm8ucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2NjLzQuMy4xL3VjbGliYy85MF9hbGxfMzA0LWluZGV4X21hY3JvLnBhdGNoCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUgZ2NjLTQuNC41L2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCistLS0gZ2NjLTQuNC41Lm9yaWcvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUJMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUJMjAxMC0xMC0wOSAyMzoxMjo1MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC01NCw2ICs1NCw5IEBACisgI2luY2x1ZGUgPGJpdHMvZ3Roci5oPgorICNpbmNsdWRlIDx0cjEvZnVuY3Rpb25hbD4KKyAKKysvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCisrI3VuZGVmIGluZGV4CisrCisgIyBpZmRlZiBfX0dDCisgIyAgIGRlZmluZSBfX0dDX0NPTlNUIGNvbnN0CisgIyBlbHNlCitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oIGdjYy00LjQuNS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAorLS0tIGdjYy00LjQuNS5vcmlnL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCTIwMDktMDQtMTAgMDE6MjM6MDcuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCTIwMTAtMTAtMDkgMjM6MTI6NTEuMDAwMDAwMDAwICswMjAwCitAQCAtNDksNiArNDksOSBAQAorICNpbmNsdWRlIDxleHQvbWVtb3J5PiAvLyBGb3IgdW5pbml0aWFsaXplZF9jb3B5X24KKyAjaW5jbHVkZSA8ZXh0L251bWVyaWM+IC8vIEZvciBwb3dlcgorIAorKy8qIGNvcGUgdy8gaW5kZXggZGVmaW5lZCBhcyBtYWNybywgU3VTdjMgcHJvcG9zYWwgKi8KKysjdW5kZWYgaW5kZXgKKysKKyBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorIAorICAgdXNpbmcgc3RkOjpzaXplX3Q7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzM2MC1hcm0tYmlnZW5kaWFuLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi8zNjAtYXJtLWJpZ2VuZGlhbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTY0MjkwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi8zNjAtYXJtLWJpZ2VuZGlhbi5wYXRjaApAQCAtMCwwICsxLDMyIEBACitCeSBMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEB3YW50c3RvZmx5Lm9yZz4KK0FkZHMgc3VwcG9ydCBmb3IgYXJtKmItbGludXgqIGJpZy1lbmRpYW4gQVJNIHRhcmdldHMKKworU2VlIGh0dHA6Ly9nY2MuZ251Lm9yZy9QUjE2MzUwCisKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmggZ2NjLTQuNC41L2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCistLS0gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgJMjAwOS0wMi0yMCAxNjoyMDozOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC40LjUvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgJMjAxMC0xMC0wOSAyMzoxMzoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC01MSw3ICs1MSw3IEBACisgCisgI3VuZGVmICBNVUxUSUxJQl9ERUZBVUxUUworICNkZWZpbmUgTVVMVElMSUJfREVGQVVMVFMgXAorLQl7ICJtYXJtIiwgIm1saXR0bGUtZW5kaWFuIiwgIm1oYXJkLWZsb2F0IiwgIm1uby10aHVtYi1pbnRlcndvcmsiIH0KKysJeyAibWFybSIsIFRBUkdFVF9FTkRJQU5fT1BUSU9OLCAibWhhcmQtZmxvYXQiLCAibW5vLXRodW1iLWludGVyd29yayIgfQorIAorIC8qIE5vdyB3ZSBkZWZpbmUgdGhlIHN0cmluZ3MgdXNlZCB0byBidWlsZCB0aGUgc3BlYyBmaWxlLiAgKi8KKyAjdW5kZWYgIExJQl9TUEVDCitkaWZmIC1kdXJOIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcuZ2NjIGdjYy00LjQuNS9nY2MvY29uZmlnLmdjYworLS0tIGdjYy00LjQuNS5vcmlnL2djYy9jb25maWcuZ2NjCTIwMTAtMTAtMDkgMjM6MDk6NTMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNC41L2djYy9jb25maWcuZ2NjCTIwMTAtMTAtMDkgMjM6MTM6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtNzM5LDYgKzczOSwxMSBAQAorIAl0bV9maWxlPSJkYnhlbGYuaCBlbGZvcy5oIGFybS91bmtub3duLWVsZi5oIGFybS9lbGYuaCBhcm0vbGludXgtZ2FzLmggYXJtL3VjbGludXgtZWxmLmgiCisgCXRtYWtlX2ZpbGU9ImFybS90LWFybSBhcm0vdC1hcm0tZWxmIgorIAljYXNlICR7dGFyZ2V0fSBpbgorKwlhcm0qYi0qKQorKwkJdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUPTEiCisrCQk7OworKwllc2FjCisrCWNhc2UgJHt0YXJnZXR9IGluCisgCWFybSotKi11Y2xpbnV4KmVhYmkpCisgCSAgICB0bV9maWxlPSIkdG1fZmlsZSBhcm0vYnBhYmkuaCBhcm0vdWNsaW51eC1lYWJpLmgiCisgCSAgICB0bWFrZV9maWxlPSIkdG1ha2VfZmlsZSBhcm0vdC1icGFiaSIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMzcwLWJvb3RzdHJhcC10YXJnZXRfbGliX3BhdGgucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzM3MC1ib290c3RyYXAtdGFyZ2V0X2xpYl9wYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZjYyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzM3MC1ib290c3RyYXAtdGFyZ2V0X2xpYl9wYXRoLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0NoYW5nZUxvZzoKKzIwMTAtMDEtMDYgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwlQUiBib290c3RyYXAvNDE4MTgKKwkqIE1ha2VmaWxlLnRwbCAoQkFTRV9UQVJHRVRfRVhQT1JUUyk6IE9ubHkgYWRkIFRBUkdFVF9MSUJfUEFUSAorCXRvICQoUlBBVEhfRU5WVkFSKSBpZiBib290c3RyYXBwaW5nLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvTWFrZWZpbGUuaW4gZ2NjLTQuNC41L01ha2VmaWxlLmluCistLS0gZ2NjLTQuNC41Lm9yaWcvTWFrZWZpbGUuaW4JMjAwOS0wNC0yNSAwNjoxMDoyOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvTWFrZWZpbGUuaW4JMjAxMC0xMC0wOSAyMzoxMzo1MC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNDUsNyArMjQ1LDEwIEBACisgCVNUUklQPSIkKFNUUklQX0ZPUl9UQVJHRVQpIjsgZXhwb3J0IFNUUklQOyBcCisgCVdJTkRSRVM9IiQoV0lORFJFU19GT1JfVEFSR0VUKSI7IGV4cG9ydCBXSU5EUkVTOyBcCisgCVdJTkRNQz0iJChXSU5ETUNfRk9SX1RBUkdFVCkiOyBleHBvcnQgV0lORE1DOyBcCistCSQoUlBBVEhfRU5WVkFSKT1gZWNobyAiJChIT1NUX0xJQl9QQVRIKSQoVEFSR0VUX0xJQl9QQVRIKSQkJChSUEFUSF9FTlZWQVIpIiB8IHNlZCAncyw6OiosOixnO3MsXjoqLCw7cyw6KiQkLCwnYDsgZXhwb3J0ICQoUlBBVEhfRU5WVkFSKTsKKytAaWYgZ2NjLWJvb3RzdHJhcAorKwkkKFJQQVRIX0VOVlZBUik9YGVjaG8gIiQoVEFSR0VUX0xJQl9QQVRIKSQkJChSUEFUSF9FTlZWQVIpIiB8IHNlZCAncyw6OiosOixnO3MsXjoqLCw7cyw6KiQkLCwnYDsgZXhwb3J0ICQoUlBBVEhfRU5WVkFSKTsgXAorK0BlbmRpZiBnY2MtYm9vdHN0cmFwCisrCSQoUlBBVEhfRU5WVkFSKT1gZWNobyAiJChIT1NUX0xJQl9QQVRIKSQkJChSUEFUSF9FTlZWQVIpIiB8IHNlZCAncyw6OiosOixnO3MsXjoqLCw7cyw6KiQkLCwnYDsgZXhwb3J0ICQoUlBBVEhfRU5WVkFSKTsKKyAKKyBSQVdfQ1hYX1RBUkdFVF9FWFBPUlRTID0gXAorIAkkKEJBU0VfVEFSR0VUX0VYUE9SVFMpIFwKK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvTWFrZWZpbGUudHBsIGdjYy00LjQuNS9NYWtlZmlsZS50cGwKKy0tLSBnY2MtNC40LjUub3JpZy9NYWtlZmlsZS50cGwJMjAwOS0wNC0xNCAxMDo1NzozMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvTWFrZWZpbGUudHBsCTIwMTAtMTAtMDkgMjM6MTM6NTAuMDAwMDAwMDAwICswMjAwCitAQCAtMjQ4LDcgKzI0OCwxMCBAQAorIAlTVFJJUD0iJChTVFJJUF9GT1JfVEFSR0VUKSI7IGV4cG9ydCBTVFJJUDsgXAorIAlXSU5EUkVTPSIkKFdJTkRSRVNfRk9SX1RBUkdFVCkiOyBleHBvcnQgV0lORFJFUzsgXAorIAlXSU5ETUM9IiQoV0lORE1DX0ZPUl9UQVJHRVQpIjsgZXhwb3J0IFdJTkRNQzsgXAorLQkkKFJQQVRIX0VOVlZBUik9YGVjaG8gIiQoSE9TVF9MSUJfUEFUSCkkKFRBUkdFVF9MSUJfUEFUSCkkJCQoUlBBVEhfRU5WVkFSKSIgfCBzZWQgJ3MsOjoqLDosZztzLF46KiwsO3MsOiokJCwsJ2A7IGV4cG9ydCAkKFJQQVRIX0VOVlZBUik7CisrQGlmIGdjYy1ib290c3RyYXAKKysJJChSUEFUSF9FTlZWQVIpPWBlY2hvICIkKFRBUkdFVF9MSUJfUEFUSCkkJCQoUlBBVEhfRU5WVkFSKSIgfCBzZWQgJ3MsOjoqLDosZztzLF46KiwsO3MsOiokJCwsJ2A7IGV4cG9ydCAkKFJQQVRIX0VOVlZBUik7IFwKKytAZW5kaWYgZ2NjLWJvb3RzdHJhcAorKwkkKFJQQVRIX0VOVlZBUik9YGVjaG8gIiQoSE9TVF9MSUJfUEFUSCkkJCQoUlBBVEhfRU5WVkFSKSIgfCBzZWQgJ3MsOjoqLDosZztzLF46KiwsO3MsOiokJCwsJ2A7IGV4cG9ydCAkKFJQQVRIX0VOVlZBUik7CisgCisgUkFXX0NYWF9UQVJHRVRfRVhQT1JUUyA9IFwKKyAJJChCQVNFX1RBUkdFVF9FWFBPUlRTKSBcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzM4MC1wb3dlcnBjLWxpYmdjY19zLWxpbmstbGlibS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvMzgwLXBvd2VycGMtbGliZ2NjX3MtbGluay1saWJtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YmM5M2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzM4MC1wb3dlcnBjLWxpYmdjY19zLWxpbmstbGlibS5wYXRjaApAQCAtMCwwICsxLDEzNCBAQAoraHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMDgtMTAvbXNnMDAyNjkuaHRtbAorCitPbiBnbGliYyB0aGUgbGliYy5zbyBjYXJyaWVzIGEgY29weSBvZiB0aGUgbWF0aCBmdW5jdGlvbiBjb3B5c2lnbmwoKSBidXQKK2NvbnRhaW5zIHVucmVzb2x2ZWQgc3ltYm9scywgYW55IGF0dGVtcHQgdG8gbGluayBhZ2FpbnN0IGxpYmdjY19zCit3aXRob3V0IGV4cGxpY2l0ZWx5IHNwZWNpZnlpbmcgLWxtIGZhaWxzLCByZXN1bHRpbmcgaW4gYSBicm9rZW4KK2Jvb3RzdHJhcCBvZiB0aGUgY29tcGlsZXIuCisKKworZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9nY2MvY29uZmlnL3Qtc2xpYmdjYy1lbGYtdmVyIGdjYy00LjQuNS9nY2MvY29uZmlnL3Qtc2xpYmdjYy1lbGYtdmVyCistLS0gZ2NjLTQuNC41Lm9yaWcvZ2NjL2NvbmZpZy90LXNsaWJnY2MtZWxmLXZlcgkyMDEwLTAxLTA0IDE2OjEzOjA4LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNS9nY2MvY29uZmlnL3Qtc2xpYmdjYy1lbGYtdmVyCTIwMTAtMTAtMDkgMjM6MTQ6MTguMDAwMDAwMDAwICswMjAwCitAQCAtOSw3ICs5LDcgQEAKKyBTSExJQl9PQkpTID0gQHNobGliX29ianNACisgU0hMSUJfRElSID0gQG11bHRpbGliX2RpckAKKyBTSExJQl9TTElCRElSX1FVQUwgPSBAc2hsaWJfc2xpYmRpcl9xdWFsQAorLVNITElCX0xDID0gLWxjCisrU0hMSUJfTEMgPSBAbGliZ2NjX2xpYm1AIC1sYworIFNITElCX01BS0VfU09MSU5LID0gJChMTl9TKSAkKFNITElCX1NPTkFNRSkgJChTSExJQl9ESVIpLyQoU0hMSUJfU09MSU5LKQorIFNITElCX0lOU1RBTExfU09MSU5LID0gJChMTl9TKSAkKFNITElCX1NPTkFNRSkgXAorIAkkJChERVNURElSKSQkKHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwpLyQoU0hMSUJfU09MSU5LKQorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9saWJnY2MvY29uZmlndXJlIGdjYy00LjQuNS9saWJnY2MvY29uZmlndXJlCistLS0gZ2NjLTQuNC41Lm9yaWcvbGliZ2NjL2NvbmZpZ3VyZQkyMDA4LTExLTIwIDE4OjEzOjAxLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNS9saWJnY2MvY29uZmlndXJlCTIwMTAtMTAtMDkgMjM6MTQ6MTguMDAwMDAwMDAwICswMjAwCitAQCAtMjcyLDcgKzI3Miw3IEBACisgUEFDS0FHRV9CVUdSRVBPUlQ9JycKKyAKKyBhY191bmlxdWVfZmlsZT0ic3RhdGljLW9iamVjdC5tayIKKy1hY19zdWJzdF92YXJzPSdTSEVMTCBQQVRIX1NFUEFSQVRPUiBQQUNLQUdFX05BTUUgUEFDS0FHRV9UQVJOQU1FIFBBQ0tBR0VfVkVSU0lPTiBQQUNLQUdFX1NUUklORyBQQUNLQUdFX0JVR1JFUE9SVCBleGVjX3ByZWZpeCBwcmVmaXggcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBsb2NhbHN0YXRlZGlyIGxpYmRpciBpbmNsdWRlZGlyIG9sZGluY2x1ZGVkaXIgaW5mb2RpciBtYW5kaXIgYnVpbGRfYWxpYXMgaG9zdF9hbGlhcyB0YXJnZXRfYWxpYXMgREVGUyBFQ0hPX0MgRUNIT19OIEVDSE9fVCBMSUJTIGxpYmdjY190b3BkaXIgZW5hYmxlX3NoYXJlZCBzbGliZGlyIElOU1RBTExfUFJPR1JBTSBJTlNUQUxMX1NDUklQVCBJTlNUQUxMX0RBVEEgQVdLIGJ1aWxkIGJ1aWxkX2NwdSBidWlsZF92ZW5kb3IgYnVpbGRfb3MgaG9zdCBob3N0X2NwdSBob3N0X3ZlbmRvciBob3N0X29zIGhvc3Rfbm9uY2Fub25pY2FsIGJ1aWxkX2xpYnN1YmRpciBidWlsZF9zdWJkaXIgaG9zdF9zdWJkaXIgdGFyZ2V0X3N1YmRpciBBUiBhY19jdF9BUiBMSVBPIGFjX2N0X0xJUE8gTk0gYWNfY3RfTk0gUkFOTElCIGFjX2N0X1JBTkxJQiBTVFJJUCBhY19jdF9TVFJJUCBMTl9TIENDIENGTEFHUyBMREZMQUdTIENQUEZMQUdTIGFjX2N0X0NDIEVYRUVYVCBPQkpFWFQgQ1BQIGRlY2ltYWxfZmxvYXQgZW5hYmxlX2RlY2ltYWxfZmxvYXQgZml4ZWRfcG9pbnQgdmlzX2hpZGUgc2V0X2hhdmVfY2NfdGxzIHRtYWtlX2ZpbGUgZXh0cmFfcGFydHMgYXNtX2hpZGRlbl9vcCBMSUJPQkpTIExUTElCT0JKUycKKythY19zdWJzdF92YXJzPSdTSEVMTCBQQVRIX1NFUEFSQVRPUiBQQUNLQUdFX05BTUUgUEFDS0FHRV9UQVJOQU1FIFBBQ0tBR0VfVkVSU0lPTiBQQUNLQUdFX1NUUklORyBQQUNLQUdFX0JVR1JFUE9SVCBleGVjX3ByZWZpeCBwcmVmaXggcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBsb2NhbHN0YXRlZGlyIGxpYmRpciBpbmNsdWRlZGlyIG9sZGluY2x1ZGVkaXIgaW5mb2RpciBtYW5kaXIgYnVpbGRfYWxpYXMgaG9zdF9hbGlhcyB0YXJnZXRfYWxpYXMgREVGUyBFQ0hPX0MgRUNIT19OIEVDSE9fVCBMSUJTIGxpYmdjY190b3BkaXIgZW5hYmxlX3NoYXJlZCBzbGliZGlyIElOU1RBTExfUFJPR1JBTSBJTlNUQUxMX1NDUklQVCBJTlNUQUxMX0RBVEEgQVdLIGJ1aWxkIGJ1aWxkX2NwdSBidWlsZF92ZW5kb3IgYnVpbGRfb3MgaG9zdCBob3N0X2NwdSBob3N0X3ZlbmRvciBob3N0X29zIGhvc3Rfbm9uY2Fub25pY2FsIGJ1aWxkX2xpYnN1YmRpciBidWlsZF9zdWJkaXIgaG9zdF9zdWJkaXIgdGFyZ2V0X3N1YmRpciBBUiBhY19jdF9BUiBMSVBPIGFjX2N0X0xJUE8gTk0gYWNfY3RfTk0gUkFOTElCIGFjX2N0X1JBTkxJQiBTVFJJUCBhY19jdF9TVFJJUCBMTl9TIENDIENGTEFHUyBMREZMQUdTIENQUEZMQUdTIGFjX2N0X0NDIEVYRUVYVCBPQkpFWFQgQ1BQIGRlY2ltYWxfZmxvYXQgZW5hYmxlX2RlY2ltYWxfZmxvYXQgZml4ZWRfcG9pbnQgdmlzX2hpZGUgc2V0X2hhdmVfY2NfdGxzIExJQkdDQ19MSUJNIHRtYWtlX2ZpbGUgZXh0cmFfcGFydHMgYXNtX2hpZGRlbl9vcCBMSUJPQkpTIExUTElCT0JKUycKKyBhY19zdWJzdF9maWxlcz0nJworIGFjX3B3ZD1gcHdkYAorIAorQEAgLTM1NDcsNiArMzU0NywzOSBAQAorIGZpCisgCisgCisrIyBPbiBwb3dlcnBjIGxpYmdjY19zIHJlZmVyZW5jZXMgY29weXNpZ25sIHdoaWNoIGlzIGEgbGlibSBmdW5jdGlvbiBidXQKKysjIGdsaWJjIGFwcGFyZW50bHkgYWxzbyBwcm92aWRlcyBpdCB2aWEgbGliYyBhcyBvcHBvc2VkIHRvIHVDbGliYyB3aGVyZQorKyMgaXQgbGl2ZXMgaW4gbGlibS4KKytlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBjb3B5c2lnbmwiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBjb3B5c2lnbmwuLi4gJEVDSE9fQyIgPiY2CisraWYgdGVzdCAiJHtsaWJnY2NfY3ZfY29weXNpZ25sX2xpYitzZXR9IiA9IHNldDsgdGhlbgorKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKytlbHNlCisrCisrICAgIGVjaG8gJyNpbmNsdWRlIDxmZWF0dXJlcy5oPicgPiBjb25mdGVzdC5jCisrICAgIGVjaG8gJ2ludCB0aGVfbGliYyA9IF9fVUNMSUJDX18gKyBfX3Bvd2VycGNfXzsnID4+IGNvbmZ0ZXN0LmMKKysgICAgbGliZ2NjX2N2X2NvcHlzaWdubF9saWI9Ii1sYyIKKysgICAgaWYgeyBhY190cnk9JyR7Q0MtY2N9IC1TIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QucyAxPiY1JworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0KKysgICAgdGhlbgorKwlsaWJnY2NfY3ZfY29weXNpZ25sX2xpYj0iLWxtIgorKyAgICBmaQorKyAgICBybSAtZiBjb25mdGVzdC4qCisrCisrZmkKKytlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGliZ2NjX2N2X2NvcHlzaWdubF9saWIiID4mNQorK2VjaG8gIiR7RUNIT19UfSRsaWJnY2NfY3ZfY29weXNpZ25sX2xpYiIgPiY2CisrCisrY2FzZSAvJHtsaWJnY2NfY3ZfY29weXNpZ25sX2xpYn0vIGluCisrICAvLWxtLykgTElCR0NDX0xJQk09IiRMSUJHQ0NfTElCTSAtbG0iIDs7CisrICAqKSBMSUJHQ0NfTElCTT0gOzsKKytlc2FjCisrCisrCisgIyBDb25kaXRpb25hbGl6ZSB0aGUgbWFrZWZpbGUgZm9yIHRoaXMgdGFyZ2V0IG1hY2hpbmUuCisgdG1ha2VfZmlsZV89CisgZm9yIGYgaW4gJHt0bWFrZV9maWxlfQorQEAgLTQyNjcsNiArNDMwMCw3IEBACisgcyxAZml4ZWRfcG9pbnRALCRmaXhlZF9wb2ludCw7dCB0CisgcyxAdmlzX2hpZGVALCR2aXNfaGlkZSw7dCB0CisgcyxAc2V0X2hhdmVfY2NfdGxzQCwkc2V0X2hhdmVfY2NfdGxzLDt0IHQKKytzLEBMSUJHQ0NfTElCTUAsJExJQkdDQ19MSUJNLDt0IHQKKyBzLEB0bWFrZV9maWxlQCwkdG1ha2VfZmlsZSw7dCB0CisgcyxAZXh0cmFfcGFydHNALCRleHRyYV9wYXJ0cyw7dCB0CisgcyxAYXNtX2hpZGRlbl9vcEAsJGFzbV9oaWRkZW5fb3AsO3QgdAorZGlmZiAtZHVyTiBnY2MtNC40LjUub3JpZy9saWJnY2MvY29uZmlndXJlLmFjIGdjYy00LjQuNS9saWJnY2MvY29uZmlndXJlLmFjCistLS0gZ2NjLTQuNC41Lm9yaWcvbGliZ2NjL2NvbmZpZ3VyZS5hYwkyMDA4LTExLTIwIDE4OjEzOjAxLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjQuNS9saWJnY2MvY29uZmlndXJlLmFjCTIwMTAtMTAtMDkgMjM6MTQ6MTguMDAwMDAwMDAwICswMjAwCitAQCAtMjIzLDYgKzIyMywyNyBAQAorIGZpCisgQUNfU1VCU1Qoc2V0X2hhdmVfY2NfdGxzKQorIAorKyMgT24gcG93ZXJwYyBsaWJnY2NfcyByZWZlcmVuY2VzIGNvcHlzaWdubCB3aGljaCBpcyBhIGxpYm0gZnVuY3Rpb24gYnV0CisrIyBnbGliYyBhcHBhcmVudGx5IGFsc28gcHJvdmlkZXMgaXQgdmlhIGxpYmMgYXMgb3Bwb3NlZCB0byB1Q2xpYmMgd2hlcmUKKysjIGl0IGxpdmVzIGluIGxpYm0uCisrQUNfQ0FDSEVfQ0hFQ0sKKysgIGxpYmdjY19jdl9jb3B5c2lnbmxfbGliLAorKyAgICBlY2hvICcjaW5jbHVkZSA8ZmVhdHVyZXMuaD4nID4gY29uZnRlc3QuYworKyAgICBlY2hvICdpbnQgdGhlX2xpYmMgPSBfX1VDTElCQ19fICsgX19wb3dlcnBjX187JyA+PiBjb25mdGVzdC5jCisrICAgIGxpYmdjY19jdl9jb3B5c2lnbmxfbGliPSItbGMiCisrICAgIGlmIEFDX1RSWV9DT01NQU5EKCR7Q0MtY2N9IC1TIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QucyAxPiZBU19NRVNTQUdFX0xPR19GRCkKKysgICAgdGhlbgorKwlsaWJnY2NfY3ZfY29weXNpZ25sX2xpYj0iLWxtIgorKyAgICBmaQorKyAgICBybSAtZiBjb25mdGVzdC4qCisrICBdKQorKworK2Nhc2UgLyR7bGliZ2NjX2N2X2NvcHlzaWdubF9saWJ9LyBpbgorKyAgLy1sbS8pIExJQkdDQ19MSUJNPSIkTElCR0NDX0xJQk0gLWxtIiA7OworKyAgKikgTElCR0NDX0xJQk09IDs7CisrZXNhYworK0FDX1NVQlNUKExJQkdDQ19MSUJNKQorKworICMgQ29uZGl0aW9uYWxpemUgdGhlIG1ha2VmaWxlIGZvciB0aGlzIHRhcmdldCBtYWNoaW5lLgorIHRtYWtlX2ZpbGVfPQorIGZvciBmIGluICR7dG1ha2VfZmlsZX0KK2RpZmYgLWR1ck4gZ2NjLTQuNC41Lm9yaWcvbGliZ2NjL01ha2VmaWxlLmluIGdjYy00LjQuNS9saWJnY2MvTWFrZWZpbGUuaW4KKy0tLSBnY2MtNC40LjUub3JpZy9saWJnY2MvTWFrZWZpbGUuaW4JMjAwOS0wNC0xMCAwMToyMzowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC40LjUvbGliZ2NjL01ha2VmaWxlLmluCTIwMTAtMTAtMDkgMjM6MTQ6MTguMDAwMDAwMDAwICswMjAwCitAQCAtMzksNiArMzksNyBAQAorIGRlY2ltYWxfZmxvYXQgPSBAZGVjaW1hbF9mbG9hdEAKKyBlbmFibGVfZGVjaW1hbF9mbG9hdCA9IEBlbmFibGVfZGVjaW1hbF9mbG9hdEAKKyBmaXhlZF9wb2ludCA9IEBmaXhlZF9wb2ludEAKKytMSUJHQ0NfTElCTSA9IEBMSUJHQ0NfTElCTUAKKyAKKyBob3N0X25vbmNhbm9uaWNhbCA9IEBob3N0X25vbmNhbm9uaWNhbEAKKyAKK0BAIC03ODcsOSArNzg4LDEwIEBACisgCQlAbXVsdGlsaWJfZGlyQCwkKE1VTFRJRElSKSwkKHN1YnN0IFwKKyAJCUBzaGxpYl9vYmpzQCwkKG9iamVjdHMpLCQoc3Vic3QgXAorIAkJQHNobGliX2Jhc2VfbmFtZUAsbGliZ2NjX3MsJChzdWJzdCBcCisrCQlAbGliZ2NjX2xpYm1ALCQoTElCR0NDX0xJQk0pLCQoc3Vic3QgXAorIAkJQHNobGliX21hcF9maWxlQCwkKG1hcGZpbGUpLCQoc3Vic3QgXAorIAkJQHNobGliX3NsaWJkaXJfcXVhbEAsJChNVUxUSU9TU1VCRElSKSwkKHN1YnN0IFwKKy0JCUBzaGxpYl9zbGliZGlyQCwkKHNobGliX3NsaWJkaXIpLCQoU0hMSUJfTElOSykpKSkpKSkpCisrCQlAc2hsaWJfc2xpYmRpckAsJChzaGxpYl9zbGliZGlyKSwkKFNITElCX0xJTkspKSkpKSkpKSkKKyAKKyBsaWJ1bndpbmQkKFNITElCX0VYVCk6ICQobGlidW53aW5kLXMtb2JqZWN0cykgJChleHRyYS1wYXJ0cykKKyAJIyBAbXVsdGlsaWJfZmxhZ3NAIGlzIHN0aWxsIG5lZWRlZCBiZWNhdXNlIHRoaXMgbWF5IHVzZQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi8zOTAtYXJtLXNvZnRmbG9hdC1saWJnY2MucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzM5MC1hcm0tc29mdGZsb2F0LWxpYmdjYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmEzMGEzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi8zOTAtYXJtLXNvZnRmbG9hdC1saWJnY2MucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorW1BBVENIXSBhZGQgdGhlIGNvcnJlY3Qgc3ltYm9scyB0byBsaWJnY2MgZm9yIHVjbGliYyBhcm0gc29mdGZsb2F0CisKK1NpZ25lZC1vZmYtYnk6IFBldGVyIEtvcnNnYWFyZCA8amFjbWV0QHN1bnNpdGUuZGs+CistLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL2FybS90LWxpbnV4ICAgICB8ICAgIDYgKysrKystCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC40LjAvZ2NjL2NvbmZpZy9hcm0vdC1saW51eAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvYXJtL3QtbGludXgKKysrKyBnY2MtNC40LjAvZ2NjL2NvbmZpZy9hcm0vdC1saW51eAorQEAgLTQsNyArNCwxMSBAQAorIAorIExJQjFBU01TUkMgPSBhcm0vbGliMWZ1bmNzLmFzbQorIExJQjFBU01GVU5DUyA9IF91ZGl2c2kzIF9kaXZzaTMgX3Vtb2RzaTMgX21vZHNpMyBfZHZtZF9sbnggX2NsenNpMiBfY2x6ZGkyIFwKKy0JX2FybV9hZGRzdWJkZjMgX2FybV9hZGRzdWJzZjMKKysJX2FybV9hZGRzdWJkZjMgX2FybV9hZGRzdWJzZjMgXAorKwlfYXJtX25lZ2RmMiBfYXJtX211bGRpdmRmMyBfYXJtX2NtcGRmMiBfYXJtX3Vub3JkZGYyIFwKKysJX2FybV9maXhkZnNpIF9hcm1fZml4dW5zZGZzaSBfYXJtX3RydW5jZGZzZjIgXAorKwlfYXJtX25lZ3NmMiBfYXJtX211bGRpdnNmMyBfYXJtX2NtcHNmMiBfYXJtX3Vub3Jkc2YyIFwKKysJX2FybV9maXhzZnNpIF9hcm1fZml4dW5zc2ZzaQorIAorICMgTVVMVElMSUJfT1BUSU9OUyA9IG1oYXJkLWZsb2F0L21zb2Z0LWZsb2F0CisgIyBNVUxUSUxJQl9ESVJOQU1FUyA9IGhhcmQtZmxvYXQgc29mdC1mbG9hdAorSW5kZXg6IGdjYy00LjQuMC9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjQuMC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCisrKysgZ2NjLTQuNC4wL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCitAQCAtNjAsNyArNjAsNyBAQAorICAgICV7c2hhcmVkOi1sY30gXAorICAgICV7IXNoYXJlZDole3Byb2ZpbGU6LWxjX3B9JXshcHJvZmlsZTotbGN9fSIKKyAKKy0jZGVmaW5lIExJQkdDQ19TUEVDICIle21zb2Z0LWZsb2F0Oi1sZmxvYXR9ICV7bWZsb2F0LWFiaT1zb2Z0KjotbGZsb2F0fSAtbGdjYyIKKysjZGVmaW5lIExJQkdDQ19TUEVDICItbGdjYyIKKyAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzQwMC1wcjQyMjg5LWZpeC1saWJmZmktYnVpbGQtb24tYXJtLW9hYmkucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzQwMC1wcjQyMjg5LWZpeC1saWJmZmktYnVpbGQtb24tYXJtLW9hYmkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY1NDg3OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC40LjYvNDAwLXByNDIyODktZml4LWxpYmZmaS1idWlsZC1vbi1hcm0tb2FiaS5wYXRjaApAQCAtMCwwICsxLDExIEBACistLS0gZ2NjLTQuMy40L2xpYmZmaS9zcmMvYXJtL3N5c3YuUwkKKysrKyBnY2MtNC4zLjQvbGliZmZpL3NyYy9hcm0vc3lzdi5TCQorQEAgLTIzNSw3ICsyMzUsNyBAQCBBUk1fRlVOQ19TVEFSVCBmZmlfY2xvc3VyZV9TWVNWCisgCXN0bWZkCXNwISwge2lwLCBscn0KKyAJVU5XSU5EIC5zYXZlCXtyMCwgbHJ9CisgCWFkZAlyMiwgc3AsICM4CistCS5wYWQgIzE2CisrCVVOV0lORCAucGFkICMxNgorIAlzdWIJc3AsIHNwLCAjMTYKKyAJc3RyCXNwLCBbc3AsICM4XQorIAlhZGQJcjEsIHNwLCAjOApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi80MTAtbGliZ2NjX2VoLmEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNC42LzQxMC1saWJnY2NfZWguYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzUzMjYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjQuNi80MTAtbGliZ2NjX2VoLmEucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorSGlnaGx5IGluc3BpcmVkIGJ5OgorICBodHRwOi8vbGFuZGxleS5uZXQvaGcvYWJvcmlnaW5hbC9maWxlLzdlMDc0N2E2NjVhYi9zb3VyY2VzL3BhdGNoZXMvZ2NjLWNvcmUtbGliZ2NjZWgucGF0Y2gKKworZGlmZiAtZHVyTiBnY2MtNC40LjAub3JpZy9saWJnY2MvTWFrZWZpbGUuaW4gZ2NjLTQuNC4wL2xpYmdjYy9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjQuMC5vcmlnL2xpYmdjYy9NYWtlZmlsZS5pbgkyMDA5LTA0LTEwIDAxOjIzOjA3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjQuMC9saWJnY2MvTWFrZWZpbGUuaW4JMjAxMS0wOS0xMiAxNzowNToyNS4xMjExMjQ1NTkgKzAyMDAKK0BAIC03NTQsOCArNzU0LDkgQEAKKyBsaWJnY2NfcyQoU0hMSUJfRVhUKTogbGlidW53aW5kJChTSExJQl9FWFQpCisgZW5kaWYKKyAKKythbGw6IGxpYmdjY19laC5hCisgaWZlcSAoJChlbmFibGVfc2hhcmVkKSx5ZXMpCistYWxsOiBsaWJnY2NfZWguYSBsaWJnY2NfcyQoU0hMSUJfRVhUKQorK2FsbDogbGliZ2NjX3MkKFNITElCX0VYVCkKKyBpZm5lcSAoJChMSUJVTldJTkQpLCkKKyBhbGw6IGxpYnVud2luZCQoU0hMSUJfRVhUKQorIGVuZGlmCitAQCAtOTI0LDEwICs5MjUsNiBAQAorIGluc3RhbGwtc2hhcmVkOgorIAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGluc3RfbGliZGlyKQorIAorLQkkKElOU1RBTExfREFUQSkgbGliZ2NjX2VoLmEgJChERVNURElSKSQoaW5zdF9saWJkaXIpLworLQljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCistCSQoUkFOTElCKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKy0KKyAJJChzdWJzdCBAbXVsdGlsaWJfZGlyQCwkKE1VTFRJRElSKSwkKHN1YnN0IFwKKyAJCUBzaGxpYl9iYXNlX25hbWVALGxpYmdjY19zLCQoc3Vic3QgXAorIAkJQHNobGliX3NsaWJkaXJfcXVhbEAsJChNVUxUSU9TU1VCRElSKSwkKFNITElCX0lOU1RBTEwpKSkpCitAQCAtOTQyLDYgKzkzOSwxMCBAQAorIAljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjb3YuYQorIAkkKFJBTkxJQikgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjb3YuYQorIAorKwkkKElOU1RBTExfREFUQSkgbGliZ2NjX2VoLmEgJChERVNURElSKSQoaW5zdF9saWJkaXIpLworKwljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCisrCSQoUkFOTElCKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKysKKyAJcGFydHM9IiQoSU5TVEFMTF9QQVJUUykiOwkJCQlcCisgCWZvciBmaWxlIGluICQkcGFydHM7IGRvCQkJCQlcCisgCSAgcm0gLWYgJChERVNURElSKSQoaW5zdF9saWJkaXIpLyQkZmlsZTsJCVwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC41LjAvMTAwLWVjangtaG9zdC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC41LjAvMTAwLWVjangtaG9zdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTZhYTUwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjUuMC8xMDAtZWNqeC1ob3N0LnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNS4yLm9yaWcvbGliamF2YS9NYWtlZmlsZS5pbiBnY2MtNC41LjIvbGliamF2YS9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjUuMi5vcmlnL2xpYmphdmEvTWFrZWZpbGUuaW4JMjAxMC0xMi0xNiAxMzo0OTowMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC41LjIvbGliamF2YS9NYWtlZmlsZS5pbgkyMDEwLTEyLTI5IDIzOjAyOjQxLjAwMDAwMDAwMCArMDEwMAorQEAgLTk0NjMsNiArOTQ2Myw5IEBACisgZWNqeCQoRVhFRVhUKTogJChlY2p4X09CSkVDVFMpICQoZWNqeF9ERVBFTkRFTkNJRVMpIAorIAlAcm0gLWYgZWNqeCQoRVhFRVhUKQorIAkkKGVjanhfTElOSykgJChlY2p4X09CSkVDVFMpICQoZWNqeF9MREFERCkgJChMSUJTKQorK2VjanguJChPQkpFWFQpOiAkKGVjanhfU09VUkNFUykKKysJQHJtIC1mIGVjanguJChPQkpFWFQpCisrCSQoQ0NfRk9SX0JVSUxEKSAkKEJVSUxEX0NGTEFHUykgLWMgLW8gJEAgJDwKKyBnYXBwbGV0dmlld2VyJChFWEVFWFQpOiAkKGdhcHBsZXR2aWV3ZXJfT0JKRUNUUykgJChnYXBwbGV0dmlld2VyX0RFUEVOREVOQ0lFUykgCisgCUBybSAtZiBnYXBwbGV0dmlld2VyJChFWEVFWFQpCisgCSQoZ2FwcGxldHZpZXdlcl9MSU5LKSAkKGdhcHBsZXR2aWV3ZXJfT0JKRUNUUykgJChnYXBwbGV0dmlld2VyX0xEQUREKSAkKExJQlMpCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNS4wLzExMC1saWJnY2NfZWguYS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC41LjAvMTEwLWxpYmdjY19laC5hLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYzAxOWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNS4wLzExMC1saWJnY2NfZWguYS5wYXRjaApAQCAtMCwwICsxLDM5IEBACitIaWdobHkgaW5zcGlyZWQgYnk6CisgIGh0dHA6Ly9sYW5kbGV5Lm5ldC9oZy9hYm9yaWdpbmFsL2ZpbGUvN2UwNzQ3YTY2NWFiL3NvdXJjZXMvcGF0Y2hlcy9nY2MtY29yZS1saWJnY2NlaC5wYXRjaAorCitkaWZmIC1kdXJOIGdjYy00LjUuMC5vcmlnL2xpYmdjYy9NYWtlZmlsZS5pbiBnY2MtNC41LjAvbGliZ2NjL01ha2VmaWxlLmluCistLS0gZ2NjLTQuNS4wLm9yaWcvbGliZ2NjL01ha2VmaWxlLmluCTIwMTAtMDMtMzAgMTU6MDg6NTIuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNS4wL2xpYmdjYy9NYWtlZmlsZS5pbgkyMDExLTA5LTEyIDE3OjQ2OjUxLjM0MjgwMDczMSArMDIwMAorQEAgLTc2NSw4ICs3NjUsOSBAQAorIGxpYmdjY19zJChTSExJQl9FWFQpOiBsaWJ1bndpbmQkKFNITElCX0VYVCkKKyBlbmRpZgorIAorK2FsbDogbGliZ2NjX2VoLmEKKyBpZmVxICgkKGVuYWJsZV9zaGFyZWQpLHllcykKKy1hbGw6IGxpYmdjY19laC5hIGxpYmdjY19zJChTSExJQl9FWFQpCisrYWxsOiBsaWJnY2NfcyQoU0hMSUJfRVhUKQorIGlmbmVxICgkKExJQlVOV0lORCksKQorIGFsbDogbGlidW53aW5kJChTSExJQl9FWFQpCisgZW5kaWYKK0BAIC05MzUsMTAgKzkzNiw2IEBACisgaW5zdGFsbC1zaGFyZWQ6CisgCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQoaW5zdF9saWJkaXIpCisgCistCSQoSU5TVEFMTF9EQVRBKSBsaWJnY2NfZWguYSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvCistCWNobW9kIDY0NCAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKy0JJChSQU5MSUIpICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY2NfZWguYQorLQorIAkkKHN1YnN0IEBtdWx0aWxpYl9kaXJALCQoTVVMVElESVIpLCQoc3Vic3QgXAorIAkJQHNobGliX2Jhc2VfbmFtZUAsbGliZ2NjX3MsJChzdWJzdCBcCisgCQlAc2hsaWJfc2xpYmRpcl9xdWFsQCwkKE1VTFRJT1NTVUJESVIpLCQoU0hMSUJfSU5TVEFMTCkpKSkKK0BAIC05NTMsNiArOTUwLDEwIEBACisgCWNobW9kIDY0NCAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2Nvdi5hCisgCSQoUkFOTElCKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2Nvdi5hCisgCisrCSQoSU5TVEFMTF9EQVRBKSBsaWJnY2NfZWguYSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvCisrCWNobW9kIDY0NCAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKysJJChSQU5MSUIpICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY2NfZWguYQorKworIAlwYXJ0cz0iJChJTlNUQUxMX1BBUlRTKSI7CQkJCVwKKyAJZm9yIGZpbGUgaW4gJCRwYXJ0czsgZG8JCQkJCVwKKyAJICBybSAtZiAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvJCRmaWxlOwkJXApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjUuMS8xMDAtZWNqeC1ob3N0LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjUuMS8xMDAtZWNqeC1ob3N0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNmFhNTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNS4xLzEwMC1lY2p4LWhvc3QucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorZGlmZiAtZHVyTiBnY2MtNC41LjIub3JpZy9saWJqYXZhL01ha2VmaWxlLmluIGdjYy00LjUuMi9saWJqYXZhL01ha2VmaWxlLmluCistLS0gZ2NjLTQuNS4yLm9yaWcvbGliamF2YS9NYWtlZmlsZS5pbgkyMDEwLTEyLTE2IDEzOjQ5OjAzLjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjUuMi9saWJqYXZhL01ha2VmaWxlLmluCTIwMTAtMTItMjkgMjM6MDI6NDEuMDAwMDAwMDAwICswMTAwCitAQCAtOTQ2Myw2ICs5NDYzLDkgQEAKKyBlY2p4JChFWEVFWFQpOiAkKGVjanhfT0JKRUNUUykgJChlY2p4X0RFUEVOREVOQ0lFUykgCisgCUBybSAtZiBlY2p4JChFWEVFWFQpCisgCSQoZWNqeF9MSU5LKSAkKGVjanhfT0JKRUNUUykgJChlY2p4X0xEQUREKSAkKExJQlMpCisrZWNqeC4kKE9CSkVYVCk6ICQoZWNqeF9TT1VSQ0VTKQorKwlAcm0gLWYgZWNqeC4kKE9CSkVYVCkKKysJJChDQ19GT1JfQlVJTEQpICQoQlVJTERfQ0ZMQUdTKSAtYyAtbyAkQCAkPAorIGdhcHBsZXR2aWV3ZXIkKEVYRUVYVCk6ICQoZ2FwcGxldHZpZXdlcl9PQkpFQ1RTKSAkKGdhcHBsZXR2aWV3ZXJfREVQRU5ERU5DSUVTKSAKKyAJQHJtIC1mIGdhcHBsZXR2aWV3ZXIkKEVYRUVYVCkKKyAJJChnYXBwbGV0dmlld2VyX0xJTkspICQoZ2FwcGxldHZpZXdlcl9PQkpFQ1RTKSAkKGdhcHBsZXR2aWV3ZXJfTERBREQpICQoTElCUykKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC41LjEvMTEwLWxpYmdjY19laC5hLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjUuMS8xMTAtbGliZ2NjX2VoLmEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNjMDE5ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC41LjEvMTEwLWxpYmdjY19laC5hLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0hpZ2hseSBpbnNwaXJlZCBieToKKyAgaHR0cDovL2xhbmRsZXkubmV0L2hnL2Fib3JpZ2luYWwvZmlsZS83ZTA3NDdhNjY1YWIvc291cmNlcy9wYXRjaGVzL2djYy1jb3JlLWxpYmdjY2VoLnBhdGNoCisKK2RpZmYgLWR1ck4gZ2NjLTQuNS4wLm9yaWcvbGliZ2NjL01ha2VmaWxlLmluIGdjYy00LjUuMC9saWJnY2MvTWFrZWZpbGUuaW4KKy0tLSBnY2MtNC41LjAub3JpZy9saWJnY2MvTWFrZWZpbGUuaW4JMjAxMC0wMy0zMCAxNTowODo1Mi4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MtNC41LjAvbGliZ2NjL01ha2VmaWxlLmluCTIwMTEtMDktMTIgMTc6NDY6NTEuMzQyODAwNzMxICswMjAwCitAQCAtNzY1LDggKzc2NSw5IEBACisgbGliZ2NjX3MkKFNITElCX0VYVCk6IGxpYnVud2luZCQoU0hMSUJfRVhUKQorIGVuZGlmCisgCisrYWxsOiBsaWJnY2NfZWguYQorIGlmZXEgKCQoZW5hYmxlX3NoYXJlZCkseWVzKQorLWFsbDogbGliZ2NjX2VoLmEgbGliZ2NjX3MkKFNITElCX0VYVCkKKythbGw6IGxpYmdjY19zJChTSExJQl9FWFQpCisgaWZuZXEgKCQoTElCVU5XSU5EKSwpCisgYWxsOiBsaWJ1bndpbmQkKFNITElCX0VYVCkKKyBlbmRpZgorQEAgLTkzNSwxMCArOTM2LDYgQEAKKyBpbnN0YWxsLXNoYXJlZDoKKyAJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikKKyAKKy0JJChJTlNUQUxMX0RBVEEpIGxpYmdjY19laC5hICQoREVTVERJUikkKGluc3RfbGliZGlyKS8KKy0JY2htb2QgNjQ0ICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY2NfZWguYQorLQkkKFJBTkxJQikgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCistCisgCSQoc3Vic3QgQG11bHRpbGliX2RpckAsJChNVUxUSURJUiksJChzdWJzdCBcCisgCQlAc2hsaWJfYmFzZV9uYW1lQCxsaWJnY2NfcywkKHN1YnN0IFwKKyAJCUBzaGxpYl9zbGliZGlyX3F1YWxALCQoTVVMVElPU1NVQkRJUiksJChTSExJQl9JTlNUQUxMKSkpKQorQEAgLTk1Myw2ICs5NTAsMTAgQEAKKyAJY2htb2QgNjQ0ICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY292LmEKKyAJJChSQU5MSUIpICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY292LmEKKyAKKysJJChJTlNUQUxMX0RBVEEpIGxpYmdjY19laC5hICQoREVTVERJUikkKGluc3RfbGliZGlyKS8KKysJY2htb2QgNjQ0ICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY2NfZWguYQorKwkkKFJBTkxJQikgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCisrCisgCXBhcnRzPSIkKElOU1RBTExfUEFSVFMpIjsJCQkJXAorIAlmb3IgZmlsZSBpbiAkJHBhcnRzOyBkbwkJCQkJXAorIAkgIHJtIC1mICQoREVTVERJUikkKGluc3RfbGliZGlyKS8kJGZpbGU7CQlcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNS4yLzEwMC1lY2p4LWhvc3QucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNS4yLzEwMC1lY2p4LWhvc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE2YWE1MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC41LjIvMTAwLWVjangtaG9zdC5wYXRjaApAQCAtMCwwICsxLDEzIEBACitkaWZmIC1kdXJOIGdjYy00LjUuMi5vcmlnL2xpYmphdmEvTWFrZWZpbGUuaW4gZ2NjLTQuNS4yL2xpYmphdmEvTWFrZWZpbGUuaW4KKy0tLSBnY2MtNC41LjIub3JpZy9saWJqYXZhL01ha2VmaWxlLmluCTIwMTAtMTItMTYgMTM6NDk6MDMuMDAwMDAwMDAwICswMTAwCisrKysgZ2NjLTQuNS4yL2xpYmphdmEvTWFrZWZpbGUuaW4JMjAxMC0xMi0yOSAyMzowMjo0MS4wMDAwMDAwMDAgKzAxMDAKK0BAIC05NDYzLDYgKzk0NjMsOSBAQAorIGVjangkKEVYRUVYVCk6ICQoZWNqeF9PQkpFQ1RTKSAkKGVjanhfREVQRU5ERU5DSUVTKSAKKyAJQHJtIC1mIGVjangkKEVYRUVYVCkKKyAJJChlY2p4X0xJTkspICQoZWNqeF9PQkpFQ1RTKSAkKGVjanhfTERBREQpICQoTElCUykKKytlY2p4LiQoT0JKRVhUKTogJChlY2p4X1NPVVJDRVMpCisrCUBybSAtZiBlY2p4LiQoT0JKRVhUKQorKwkkKENDX0ZPUl9CVUlMRCkgJChCVUlMRF9DRkxBR1MpIC1jIC1vICRAICQ8CisgZ2FwcGxldHZpZXdlciQoRVhFRVhUKTogJChnYXBwbGV0dmlld2VyX09CSkVDVFMpICQoZ2FwcGxldHZpZXdlcl9ERVBFTkRFTkNJRVMpIAorIAlAcm0gLWYgZ2FwcGxldHZpZXdlciQoRVhFRVhUKQorIAkkKGdhcHBsZXR2aWV3ZXJfTElOSykgJChnYXBwbGV0dmlld2VyX09CSkVDVFMpICQoZ2FwcGxldHZpZXdlcl9MREFERCkgJChMSUJTKQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjUuMi8xMTAtbGliZ2NjX2VoLmEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNS4yLzExMC1saWJnY2NfZWguYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2MwMTllCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjUuMi8xMTAtbGliZ2NjX2VoLmEucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorSGlnaGx5IGluc3BpcmVkIGJ5OgorICBodHRwOi8vbGFuZGxleS5uZXQvaGcvYWJvcmlnaW5hbC9maWxlLzdlMDc0N2E2NjVhYi9zb3VyY2VzL3BhdGNoZXMvZ2NjLWNvcmUtbGliZ2NjZWgucGF0Y2gKKworZGlmZiAtZHVyTiBnY2MtNC41LjAub3JpZy9saWJnY2MvTWFrZWZpbGUuaW4gZ2NjLTQuNS4wL2xpYmdjYy9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjUuMC5vcmlnL2xpYmdjYy9NYWtlZmlsZS5pbgkyMDEwLTAzLTMwIDE1OjA4OjUyLjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy00LjUuMC9saWJnY2MvTWFrZWZpbGUuaW4JMjAxMS0wOS0xMiAxNzo0Njo1MS4zNDI4MDA3MzEgKzAyMDAKK0BAIC03NjUsOCArNzY1LDkgQEAKKyBsaWJnY2NfcyQoU0hMSUJfRVhUKTogbGlidW53aW5kJChTSExJQl9FWFQpCisgZW5kaWYKKyAKKythbGw6IGxpYmdjY19laC5hCisgaWZlcSAoJChlbmFibGVfc2hhcmVkKSx5ZXMpCistYWxsOiBsaWJnY2NfZWguYSBsaWJnY2NfcyQoU0hMSUJfRVhUKQorK2FsbDogbGliZ2NjX3MkKFNITElCX0VYVCkKKyBpZm5lcSAoJChMSUJVTldJTkQpLCkKKyBhbGw6IGxpYnVud2luZCQoU0hMSUJfRVhUKQorIGVuZGlmCitAQCAtOTM1LDEwICs5MzYsNiBAQAorIGluc3RhbGwtc2hhcmVkOgorIAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGluc3RfbGliZGlyKQorIAorLQkkKElOU1RBTExfREFUQSkgbGliZ2NjX2VoLmEgJChERVNURElSKSQoaW5zdF9saWJkaXIpLworLQljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCistCSQoUkFOTElCKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKy0KKyAJJChzdWJzdCBAbXVsdGlsaWJfZGlyQCwkKE1VTFRJRElSKSwkKHN1YnN0IFwKKyAJCUBzaGxpYl9iYXNlX25hbWVALGxpYmdjY19zLCQoc3Vic3QgXAorIAkJQHNobGliX3NsaWJkaXJfcXVhbEAsJChNVUxUSU9TU1VCRElSKSwkKFNITElCX0lOU1RBTEwpKSkpCitAQCAtOTUzLDYgKzk1MCwxMCBAQAorIAljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjb3YuYQorIAkkKFJBTkxJQikgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjb3YuYQorIAorKwkkKElOU1RBTExfREFUQSkgbGliZ2NjX2VoLmEgJChERVNURElSKSQoaW5zdF9saWJkaXIpLworKwljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCisrCSQoUkFOTElCKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKysKKyAJcGFydHM9IiQoSU5TVEFMTF9QQVJUUykiOwkJCQlcCisgCWZvciBmaWxlIGluICQkcGFydHM7IGRvCQkJCQlcCisgCSAgcm0gLWYgJChERVNURElSKSQoaW5zdF9saWJkaXIpLyQkZmlsZTsJCVwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC41LjMvMTAwLWVjangtaG9zdC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC41LjMvMTAwLWVjangtaG9zdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTZhYTUwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjUuMy8xMDAtZWNqeC1ob3N0LnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK2RpZmYgLWR1ck4gZ2NjLTQuNS4yLm9yaWcvbGliamF2YS9NYWtlZmlsZS5pbiBnY2MtNC41LjIvbGliamF2YS9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjUuMi5vcmlnL2xpYmphdmEvTWFrZWZpbGUuaW4JMjAxMC0xMi0xNiAxMzo0OTowMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC41LjIvbGliamF2YS9NYWtlZmlsZS5pbgkyMDEwLTEyLTI5IDIzOjAyOjQxLjAwMDAwMDAwMCArMDEwMAorQEAgLTk0NjMsNiArOTQ2Myw5IEBACisgZWNqeCQoRVhFRVhUKTogJChlY2p4X09CSkVDVFMpICQoZWNqeF9ERVBFTkRFTkNJRVMpIAorIAlAcm0gLWYgZWNqeCQoRVhFRVhUKQorIAkkKGVjanhfTElOSykgJChlY2p4X09CSkVDVFMpICQoZWNqeF9MREFERCkgJChMSUJTKQorK2VjanguJChPQkpFWFQpOiAkKGVjanhfU09VUkNFUykKKysJQHJtIC1mIGVjanguJChPQkpFWFQpCisrCSQoQ0NfRk9SX0JVSUxEKSAkKEJVSUxEX0NGTEFHUykgLWMgLW8gJEAgJDwKKyBnYXBwbGV0dmlld2VyJChFWEVFWFQpOiAkKGdhcHBsZXR2aWV3ZXJfT0JKRUNUUykgJChnYXBwbGV0dmlld2VyX0RFUEVOREVOQ0lFUykgCisgCUBybSAtZiBnYXBwbGV0dmlld2VyJChFWEVFWFQpCisgCSQoZ2FwcGxldHZpZXdlcl9MSU5LKSAkKGdhcHBsZXR2aWV3ZXJfT0JKRUNUUykgJChnYXBwbGV0dmlld2VyX0xEQUREKSAkKExJQlMpCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNS4zLzExMC1saWJnY2NfZWguYS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC41LjMvMTEwLWxpYmdjY19laC5hLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYzAxOWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNS4zLzExMC1saWJnY2NfZWguYS5wYXRjaApAQCAtMCwwICsxLDM5IEBACitIaWdobHkgaW5zcGlyZWQgYnk6CisgIGh0dHA6Ly9sYW5kbGV5Lm5ldC9oZy9hYm9yaWdpbmFsL2ZpbGUvN2UwNzQ3YTY2NWFiL3NvdXJjZXMvcGF0Y2hlcy9nY2MtY29yZS1saWJnY2NlaC5wYXRjaAorCitkaWZmIC1kdXJOIGdjYy00LjUuMC5vcmlnL2xpYmdjYy9NYWtlZmlsZS5pbiBnY2MtNC41LjAvbGliZ2NjL01ha2VmaWxlLmluCistLS0gZ2NjLTQuNS4wLm9yaWcvbGliZ2NjL01ha2VmaWxlLmluCTIwMTAtMDMtMzAgMTU6MDg6NTIuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjLTQuNS4wL2xpYmdjYy9NYWtlZmlsZS5pbgkyMDExLTA5LTEyIDE3OjQ2OjUxLjM0MjgwMDczMSArMDIwMAorQEAgLTc2NSw4ICs3NjUsOSBAQAorIGxpYmdjY19zJChTSExJQl9FWFQpOiBsaWJ1bndpbmQkKFNITElCX0VYVCkKKyBlbmRpZgorIAorK2FsbDogbGliZ2NjX2VoLmEKKyBpZmVxICgkKGVuYWJsZV9zaGFyZWQpLHllcykKKy1hbGw6IGxpYmdjY19laC5hIGxpYmdjY19zJChTSExJQl9FWFQpCisrYWxsOiBsaWJnY2NfcyQoU0hMSUJfRVhUKQorIGlmbmVxICgkKExJQlVOV0lORCksKQorIGFsbDogbGlidW53aW5kJChTSExJQl9FWFQpCisgZW5kaWYKK0BAIC05MzUsMTAgKzkzNiw2IEBACisgaW5zdGFsbC1zaGFyZWQ6CisgCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQoaW5zdF9saWJkaXIpCisgCistCSQoSU5TVEFMTF9EQVRBKSBsaWJnY2NfZWguYSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvCistCWNobW9kIDY0NCAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKy0JJChSQU5MSUIpICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY2NfZWguYQorLQorIAkkKHN1YnN0IEBtdWx0aWxpYl9kaXJALCQoTVVMVElESVIpLCQoc3Vic3QgXAorIAkJQHNobGliX2Jhc2VfbmFtZUAsbGliZ2NjX3MsJChzdWJzdCBcCisgCQlAc2hsaWJfc2xpYmRpcl9xdWFsQCwkKE1VTFRJT1NTVUJESVIpLCQoU0hMSUJfSU5TVEFMTCkpKSkKK0BAIC05NTMsNiArOTUwLDEwIEBACisgCWNobW9kIDY0NCAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2Nvdi5hCisgCSQoUkFOTElCKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2Nvdi5hCisgCisrCSQoSU5TVEFMTF9EQVRBKSBsaWJnY2NfZWguYSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvCisrCWNobW9kIDY0NCAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKysJJChSQU5MSUIpICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY2NfZWguYQorKworIAlwYXJ0cz0iJChJTlNUQUxMX1BBUlRTKSI7CQkJCVwKKyAJZm9yIGZpbGUgaW4gJCRwYXJ0czsgZG8JCQkJCVwKKyAJICBybSAtZiAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvJCRmaWxlOwkJXApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjYuMC8xMDAtbGliZ2NjX2VoLmEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2NjLzQuNi4wLzEwMC1saWJnY2NfZWguYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGFlODk3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjYuMC8xMDAtbGliZ2NjX2VoLmEucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorSGlnaGx5IGluc3BpcmVkIGJ5OgorICBodHRwOi8vbGFuZGxleS5uZXQvaGcvYWJvcmlnaW5hbC9maWxlLzdlMDc0N2E2NjVhYi9zb3VyY2VzL3BhdGNoZXMvZ2NjLWNvcmUtbGliZ2NjZWgucGF0Y2gKKworZGlmZiAtZHVyTiBnY2MtNC42LjAub3JpZy9saWJnY2MvTWFrZWZpbGUuaW4gZ2NjLTQuNi4wL2xpYmdjYy9NYWtlZmlsZS5pbgorLS0tIGdjYy00LjYuMC5vcmlnL2xpYmdjYy9NYWtlZmlsZS5pbgkyMDExLTAxLTI2IDA1OjE5OjU4LjAwMDAwMDAwMCArMDEwMAorKysrIGdjYy00LjYuMC9saWJnY2MvTWFrZWZpbGUuaW4JMjAxMS0wOS0xMiAxODoxNzoxMi43NDM3MTg5NzQgKzAyMDAKK0BAIC03NzIsOCArNzcyLDkgQEAKKyBsaWJnY2NfcyQoU0hMSUJfRVhUKTogbGlidW53aW5kJChTSExJQl9FWFQpCisgZW5kaWYKKyAKKythbGw6IGxpYmdjY19laC5hCisgaWZlcSAoJChlbmFibGVfc2hhcmVkKSx5ZXMpCistYWxsOiBsaWJnY2NfZWguYSBsaWJnY2NfcyQoU0hMSUJfRVhUKQorK2FsbDogbGliZ2NjX3MkKFNITElCX0VYVCkKKyBpZm5lcSAoJChMSUJVTldJTkQpLCkKKyBhbGw6IGxpYnVud2luZCQoU0hMSUJfRVhUKQorIGVuZGlmCitAQCAtOTUwLDEwICs5NTEsNiBAQAorIGluc3RhbGwtc2hhcmVkOgorIAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGluc3RfbGliZGlyKQorIAorLQkkKElOU1RBTExfREFUQSkgbGliZ2NjX2VoLmEgJChERVNURElSKSQoaW5zdF9saWJkaXIpLworLQljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCistCSQoUkFOTElCKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKy0KKyAJJChzdWJzdCBAbXVsdGlsaWJfZGlyQCwkKE1VTFRJRElSKSwkKHN1YnN0IFwKKyAJCUBzaGxpYl9iYXNlX25hbWVALGxpYmdjY19zLCQoc3Vic3QgXAorIAkJQHNobGliX3NsaWJkaXJfcXVhbEAsJChNVUxUSU9TU1VCRElSKSwkKFNITElCX0lOU1RBTEwpKSkpCitAQCAtOTY4LDYgKzk2NSwxMCBAQAorIAljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjb3YuYQorIAkkKFJBTkxJQikgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjb3YuYQorIAorKwkkKElOU1RBTExfREFUQSkgbGliZ2NjX2VoLmEgJChERVNURElSKSQoaW5zdF9saWJkaXIpLworKwljaG1vZCA2NDQgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCisrCSQoUkFOTElCKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikvbGliZ2NjX2VoLmEKKysKKyAJcGFydHM9IiQoSU5TVEFMTF9QQVJUUykiOwkJCQlcCisgCWZvciBmaWxlIGluICQkcGFydHM7IGRvCQkJCQlcCisgCSAgcm0gLWYgJChERVNURElSKSQoaW5zdF9saWJkaXIpLyQkZmlsZTsJCVwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC42LjEvMTAwLWxpYmdjY19laC5hLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2djYy80LjYuMS8xMDAtbGliZ2NjX2VoLmEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRhZTg5NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nY2MvNC42LjEvMTAwLWxpYmdjY19laC5hLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0hpZ2hseSBpbnNwaXJlZCBieToKKyAgaHR0cDovL2xhbmRsZXkubmV0L2hnL2Fib3JpZ2luYWwvZmlsZS83ZTA3NDdhNjY1YWIvc291cmNlcy9wYXRjaGVzL2djYy1jb3JlLWxpYmdjY2VoLnBhdGNoCisKK2RpZmYgLWR1ck4gZ2NjLTQuNi4wLm9yaWcvbGliZ2NjL01ha2VmaWxlLmluIGdjYy00LjYuMC9saWJnY2MvTWFrZWZpbGUuaW4KKy0tLSBnY2MtNC42LjAub3JpZy9saWJnY2MvTWFrZWZpbGUuaW4JMjAxMS0wMS0yNiAwNToxOTo1OC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MtNC42LjAvbGliZ2NjL01ha2VmaWxlLmluCTIwMTEtMDktMTIgMTg6MTc6MTIuNzQzNzE4OTc0ICswMjAwCitAQCAtNzcyLDggKzc3Miw5IEBACisgbGliZ2NjX3MkKFNITElCX0VYVCk6IGxpYnVud2luZCQoU0hMSUJfRVhUKQorIGVuZGlmCisgCisrYWxsOiBsaWJnY2NfZWguYQorIGlmZXEgKCQoZW5hYmxlX3NoYXJlZCkseWVzKQorLWFsbDogbGliZ2NjX2VoLmEgbGliZ2NjX3MkKFNITElCX0VYVCkKKythbGw6IGxpYmdjY19zJChTSExJQl9FWFQpCisgaWZuZXEgKCQoTElCVU5XSU5EKSwpCisgYWxsOiBsaWJ1bndpbmQkKFNITElCX0VYVCkKKyBlbmRpZgorQEAgLTk1MCwxMCArOTUxLDYgQEAKKyBpbnN0YWxsLXNoYXJlZDoKKyAJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChpbnN0X2xpYmRpcikKKyAKKy0JJChJTlNUQUxMX0RBVEEpIGxpYmdjY19laC5hICQoREVTVERJUikkKGluc3RfbGliZGlyKS8KKy0JY2htb2QgNjQ0ICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY2NfZWguYQorLQkkKFJBTkxJQikgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCistCisgCSQoc3Vic3QgQG11bHRpbGliX2RpckAsJChNVUxUSURJUiksJChzdWJzdCBcCisgCQlAc2hsaWJfYmFzZV9uYW1lQCxsaWJnY2NfcywkKHN1YnN0IFwKKyAJCUBzaGxpYl9zbGliZGlyX3F1YWxALCQoTVVMVElPU1NVQkRJUiksJChTSExJQl9JTlNUQUxMKSkpKQorQEAgLTk2OCw2ICs5NjUsMTAgQEAKKyAJY2htb2QgNjQ0ICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY292LmEKKyAJJChSQU5MSUIpICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY292LmEKKyAKKysJJChJTlNUQUxMX0RBVEEpIGxpYmdjY19laC5hICQoREVTVERJUikkKGluc3RfbGliZGlyKS8KKysJY2htb2QgNjQ0ICQoREVTVERJUikkKGluc3RfbGliZGlyKS9saWJnY2NfZWguYQorKwkkKFJBTkxJQikgJChERVNURElSKSQoaW5zdF9saWJkaXIpL2xpYmdjY19laC5hCisrCisgCXBhcnRzPSIkKElOU1RBTExfUEFSVFMpIjsJCQkJXAorIAlmb3IgZmlsZSBpbiAkJHBhcnRzOyBkbwkJCQkJXAorIAkgIHJtIC1mICQoREVTVERJUikkKGluc3RfbGliZGlyKS8kJGZpbGU7CQlcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2RiLzYuOGEvMTAwLWR3YXJmLXN0YWNrLW92ZXJmbG93LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dkYi82LjhhLzEwMC1kd2FyZi1zdGFjay1vdmVyZmxvdy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDRkNWEzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dkYi82LjhhLzEwMC1kd2FyZi1zdGFjay1vdmVyZmxvdy5wYXRjaApAQCAtMCwwICsxLDUyIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2RiLzYuOC84MF9hbGxfZ2RiLTYuNS1kd2FyZi1zdGFjay1vdmVyZmxvdy5wYXRjaAorLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitodHRwOi8vYnVncy5nZW50b28ub3JnLzE0NDgzMworCitmb3IgZ2RiL0NoYW5nZUxvZzoKKzIwMDYtMDgtMjIgIFdpbGwgRHJld3J5IDx3YWRAZ29vZ2xlLmNvbT4KKwkgICAgVGF2aXMgT3JtYW5keSA8dGF2aXNvQGdvb2dsZS5jb20+CisKKwkqIGR3YXJmMnJlYWQuYyAoZGVjb2RlX2xvY2Rlc2MpOiBFbmZvcmNlIGxvY2F0aW9uIGRlc2NyaXB0aW9uIHN0YWNrCisJYm91bmRhcmllcy4KKwkqIGR3YXJmcmVhZC5jIChsb2N2YWwpOiBMaWtld2lzZS4KKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorZGlmZiAtZHVyTiBnZGItNi44Lm9yaWcvZ2RiL2R3YXJmMnJlYWQuYyBnZGItNi44L2dkYi9kd2FyZjJyZWFkLmMKKy0tLSBnZGItNi44Lm9yaWcvZ2RiL2R3YXJmMnJlYWQuYwkyMDA4LTAzLTEwIDE1OjE4OjEwLjAwMDAwMDAwMCArMDEwMAorKysrIGdkYi02LjgvZ2RiL2R3YXJmMnJlYWQuYwkyMDA4LTA2LTE3IDE2OjA3OjMxLjAwMDAwMDAwMCArMDIwMAorQEAgLTkxMjQsOCArOTEyNCw3IEBACisgICAgY2FsbGVycyB3aWxsIG9ubHkgd2FudCBhIHZlcnkgYmFzaWMgcmVzdWx0IGFuZCB0aGlzIGNhbiBiZWNvbWUgYQorICAgIGNvbXBsYWludC4KKyAKKy0gICBOb3RlIHRoYXQgc3RhY2tbMF0gaXMgdW51c2VkIGV4Y2VwdCBhcyBhIGRlZmF1bHQgZXJyb3IgcmV0dXJuLgorLSAgIE5vdGUgdGhhdCBzdGFjayBvdmVyZmxvdyBpcyBub3QgeWV0IGhhbmRsZWQuICAqLworKyAgIE5vdGUgdGhhdCBzdGFja1swXSBpcyB1bnVzZWQgZXhjZXB0IGFzIGEgZGVmYXVsdCBlcnJvciByZXR1cm4uICovCisgCisgc3RhdGljIENPUkVfQUREUgorIGRlY29kZV9sb2NkZXNjIChzdHJ1Y3QgZHdhcmZfYmxvY2sgKmJsaywgc3RydWN0IGR3YXJmMl9jdSAqY3UpCitAQCAtOTE0Miw3ICs5MTQxLDcgQEAKKyAKKyAgIGkgPSAwOworICAgc3RhY2tpID0gMDsKKy0gIHN0YWNrW3N0YWNraV0gPSAwOworKyAgc3RhY2tbKytzdGFja2ldID0gMDsKKyAKKyAgIHdoaWxlIChpIDwgc2l6ZSkKKyAgICAgeworQEAgLTkzMjQsNiArOTMyMywxNiBAQAorIAkJICAgICBkd2FyZl9zdGFja19vcF9uYW1lIChvcCkpOworIAkgIHJldHVybiAoc3RhY2tbc3RhY2tpXSk7CisgCX0KKysgICAgICAvKiBFbmZvcmNlIG1heGltdW0gc3RhY2sgZGVwdGggb2Ygc2l6ZS0xIHRvIGF2b2lkICsrc3RhY2tpIHdyaXRpbmcKKysgICAgICAgICBvdXRzaWRlIG9mIHRoZSBhbGxvY2F0ZWQgc3BhY2UuIEFsc28gZW5mb3JjZSBtaW5pbXVtID4gMC4KKysgICAgICAgICAtLSB3YWRAZ29vZ2xlLmNvbSAxNCBBdWcgMjAwNiAqLworKyAgICAgIGlmIChzdGFja2kgPj0gc2l6ZW9mIChzdGFjaykgLyBzaXplb2YgKCpzdGFjaykgLSAxKQorKwlpbnRlcm5hbF9lcnJvciAoX19GSUxFX18sIF9fTElORV9fLAorKwkgICAgICAgICAgICAgICAgXygibG9jYXRpb24gZGVzY3JpcHRpb24gc3RhY2sgdG9vIGRlZXA6ICVkIiksCisrCSAgICAgICAgICAgICAgICBzdGFja2kpOworKyAgICAgIGlmIChzdGFja2kgPD0gMCkKKysJaW50ZXJuYWxfZXJyb3IgKF9fRklMRV9fLCBfX0xJTkVfXywKKysJICAgICAgICAgICAgICAgIF8oImxvY2F0aW9uIGRlc2NyaXB0aW9uIHN0YWNrIHRvbyBzaGFsbG93IikpOworICAgICB9CisgICByZXR1cm4gKHN0YWNrW3N0YWNraV0pOworIH0KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nZGIvNi44YS8xMTAtc2VjdXJpdHktZXJyYXRhLTIwMDUwNjEwLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dkYi82LjhhLzExMC1zZWN1cml0eS1lcnJhdGEtMjAwNTA2MTAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdlODE3NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nZGIvNi44YS8xMTAtc2VjdXJpdHktZXJyYXRhLTIwMDUwNjEwLnBhdGNoCkBAIC0wLDAgKzEsMjA1IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2RiLzYuOC8zNV9hbGxfZ2RiLTYuMy1zZWN1cml0eS1lcnJhdGEtMjAwNTA2MTAucGF0Y2gKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorMjAwNS0wNi0wOSAgSmVmZiBKb2huc3RvbiAgPGpqb2huc3RuQHJlZGhhdC5jb20+CisKKyAgICAgICAgKiBnZGIuYmFzZS9nZGJpbml0LmV4cDogTmV3IHRlc3RjYXNlLgorICAgICAgICAqIGdkYi5iYXNlL2dkYmluaXQuc2FtcGxlOiBTYW1wbGUgLmdkYmluaXQgZm9yIGdkYmluaXQuZXhwLgorCisyMDA1LTA2LTA4ICBEYW5pZWwgSmFjb2Jvd2l0eiAgPGRhbkBjb2Rlc291cmNlcnkuY29tPgorICAgICAgICAgICAgSmVmZiBKb2huc3RvbiAgPGpqb2huc3RuQHJlZGhhdC5jb20+CisKKyAgICAgICAgKiBNYWtlZmlsZS5pbiAoY2xpLWNtZHMubyk6IFVwZGF0ZS4KKyAgICAgICAgKiBjb25maWd1cmUuaW46IEFkZCBjaGVjayBmb3IgZ2V0dWlkLgorICAgICAgICAqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCisgICAgICAgICogY29uZmlnLmluOiBEaXR0by4KKyAgICAgICAgKiBtYWluLmMgKGNhcHR1cmVkX21haW4pOiBQYXNzIC0xIHRvIHNvdXJjZV9jb21tYW5kIHdoZW4gbG9hZGluZworICAgICAgICBnZGJpbml0IGZpbGVzLgorICAgICAgICAqIGNsaS9jbGktY21kcy5jOiBJbmNsdWRlICJnZGJfc3RhdC5oIiBhbmQgPGZjbnRsLmg+LgorICAgICAgICAoc291cmNlX2NvbW1hbmQpOiBVcGRhdGUgZG9jdW1lbnRhdGlvbi4gIENoZWNrIHBlcm1pc3Npb25zIGlmCisgICAgICAgIEZST01fVFRZIGlzIC0xLgorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCitkaWZmIC1kdXJOIGdkYi02Ljgub3JpZy9nZGIvTWFrZWZpbGUuaW4gZ2RiLTYuOC9nZGIvTWFrZWZpbGUuaW4KKy0tLSBnZGItNi44Lm9yaWcvZ2RiL01ha2VmaWxlLmluCTIwMDgtMDMtMTcgMTM6MTU6MDguMDAwMDAwMDAwICswMTAwCisrKysgZ2RiLTYuOC9nZGIvTWFrZWZpbGUuaW4JMjAwOC0wNi0xNyAxNjowNzozMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMDA0LDcgKzMwMDQsNyBAQAorIAkkKGV4cHJlc3Npb25faCkgJChmcmFtZV9oKSAkKHZhbHVlX2gpICQobGFuZ3VhZ2VfaCkgJChmaWxlbmFtZXNfaCkgXAorIAkkKG9iamZpbGVzX2gpICQoc291cmNlX2gpICQoZGlzYXNtX2gpICQodWlfb3V0X2gpICQodG9wX2gpIFwKKyAJJChjbGlfZGVjb2RlX2gpICQoY2xpX3NjcmlwdF9oKSAkKGNsaV9zZXRzaG93X2gpICQoY2xpX2NtZHNfaCkgXAorLQkkKHR1aV9oKQorKwkkKHR1aV9oKSAkKGdkYl9zdGF0X2gpCisgCSQoQ0MpIC1jICQoSU5URVJOQUxfQ0ZMQUdTKSAkKHNyY2RpcikvY2xpL2NsaS1jbWRzLmMKKyBjbGktZGVjb2RlLm86ICQoc3JjZGlyKS9jbGkvY2xpLWRlY29kZS5jICQoZGVmc19oKSAkKHN5bXRhYl9oKSBcCisgCSQoZ2RiX3JlZ2V4X2gpICQoZ2RiX3N0cmluZ19oKSAkKGNvbXBsZXRlcl9oKSAkKHVpX291dF9oKSBcCitkaWZmIC1kdXJOIGdkYi02Ljgub3JpZy9nZGIvY2xpL2NsaS1jbWRzLmMgZ2RiLTYuOC9nZGIvY2xpL2NsaS1jbWRzLmMKKy0tLSBnZGItNi44Lm9yaWcvZ2RiL2NsaS9jbGktY21kcy5jCTIwMDgtMDEtMDEgMjM6NTM6MTQuMDAwMDAwMDAwICswMTAwCisrKysgZ2RiLTYuOC9nZGIvY2xpL2NsaS1jbWRzLmMJMjAwOC0wNi0xNyAxNjowNzozMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zNiw2ICszNiw3IEBACisgI2luY2x1ZGUgIm9iamZpbGVzLmgiCisgI2luY2x1ZGUgInNvdXJjZS5oIgorICNpbmNsdWRlICJkaXNhc20uaCIKKysjaW5jbHVkZSAiZ2RiX3N0YXQuaCIKKyAKKyAjaW5jbHVkZSAidWktb3V0LmgiCisgCitAQCAtNDU5LDEyICs0NjAsMzEgQEAKKyAKKyAgIGlmIChmZCA9PSAtMSkKKyAgICAgeworLSAgICAgIGlmIChmcm9tX3R0eSkKKysgICAgICBpZiAoZnJvbV90dHkgPiAwKQorIAlwZXJyb3Jfd2l0aF9uYW1lIChmaWxlKTsKKyAgICAgICBlbHNlCisgCXJldHVybjsKKyAgICAgfQorIAorKyNpZmRlZiBIQVZFX0dFVFVJRAorKyAgaWYgKGZyb21fdHR5ID09IC0xKQorKyAgICB7CisrICAgICAgc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKysgICAgICBpZiAoZnN0YXQgKGZkLCAmc3RhdGJ1ZikgPCAwKQorKwl7CisrCSAgcGVycm9yX3dpdGhfbmFtZSAoZmlsZSk7CisrCSAgY2xvc2UgKGZkKTsKKysJICByZXR1cm47CisrCX0KKysgICAgICBpZiAoc3RhdGJ1Zi5zdF91aWQgIT0gZ2V0dWlkICgpIHx8IChzdGF0YnVmLnN0X21vZGUgJiBTX0lXT1RIKSkKKysJeworKyAgICAgICAgICB3YXJuaW5nIChfKCJub3QgdXNpbmcgdW50cnVzdGVkIGZpbGUgXCIlc1wiIiksIGZpbGUpOworKwkgIGNsb3NlIChmZCk7CisrCSAgcmV0dXJuOworKwl9CisrICAgIH0KKysjZW5kaWYKKysKKyAgIHN0cmVhbSA9IGZkb3BlbiAoZmQsIEZPUEVOX1JUKTsKKyAgIHNjcmlwdF9mcm9tX2ZpbGUgKHN0cmVhbSwgZmlsZSk7CisgCitkaWZmIC1kdXJOIGdkYi02Ljgub3JpZy9nZGIvbWFpbi5jIGdkYi02LjgvZ2RiL21haW4uYworLS0tIGdkYi02Ljgub3JpZy9nZGIvbWFpbi5jCTIwMDgtMDEtMDUgMTc6NDk6NTMuMDAwMDAwMDAwICswMTAwCisrKysgZ2RiLTYuOC9nZGIvbWFpbi5jCTIwMDgtMDYtMTcgMTY6MDc6MzMuMDAwMDAwMDAwICswMjAwCitAQCAtNjkwLDcgKzY5MCw3IEBACisgCisgICAgICAgaWYgKCFpbmhpYml0X2dkYmluaXQpCisgCXsKKy0JICBjYXRjaF9jb21tYW5kX2Vycm9ycyAoc291cmNlX3NjcmlwdCwgaG9tZWluaXQsIDAsIFJFVFVSTl9NQVNLX0FMTCk7CisrCSAgY2F0Y2hfY29tbWFuZF9lcnJvcnMgKHNvdXJjZV9zY3JpcHQsIGhvbWVpbml0LCAtMSwgUkVUVVJOX01BU0tfQUxMKTsKKyAJfQorIAorICAgICAgIC8qIERvIHN0YXRzOyBubyBuZWVkIHRvIGRvIHRoZW0gZWxzZXdoZXJlIHNpbmNlIHdlJ2xsIG9ubHkKK0BAIC03NzgsNyArNzc4LDcgQEAKKyAgICAgICB8fCBtZW1jbXAgKChjaGFyICopICZob21lYnVmLCAoY2hhciAqKSAmY3dkYnVmLCBzaXplb2YgKHN0cnVjdCBzdGF0KSkpCisgICAgIGlmICghaW5oaWJpdF9nZGJpbml0KQorICAgICAgIHsKKy0JY2F0Y2hfY29tbWFuZF9lcnJvcnMgKHNvdXJjZV9zY3JpcHQsIGdkYmluaXQsIDAsIFJFVFVSTl9NQVNLX0FMTCk7CisrCWNhdGNoX2NvbW1hbmRfZXJyb3JzIChzb3VyY2Vfc2NyaXB0LCBnZGJpbml0LCAtMSwgUkVUVVJOX01BU0tfQUxMKTsKKyAgICAgICB9CisgCisgICBmb3IgKGkgPSAwOyBpIDwgbmNtZDsgaSsrKQorZGlmZiAtZHVyTiBnZGItNi44Lm9yaWcvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9nZGJpbml0LmV4cCBnZGItNi44L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvZ2RiaW5pdC5leHAKKy0tLSBnZGItNi44Lm9yaWcvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9nZGJpbml0LmV4cAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdkYi02LjgvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9nZGJpbml0LmV4cAkyMDA4LTA2LTE3IDE2OjA3OjMzLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw5OCBAQAorKyMgICBDb3B5cmlnaHQgMjAwNQorKyMgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrIyAKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrIyAKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gIAorKworKyMgUGxlYXNlIGVtYWlsIGFueSBidWdzLCBjb21tZW50cywgYW5kL29yIGFkZGl0aW9ucyB0byB0aGlzIGZpbGUgdG86CisrIyBidWctZ2RiQHByZXAuYWkubWl0LmVkdQorKworKyMgVGhpcyBmaWxlIHdhcyB3cml0dGVuIGJ5IEplZmYgSm9obnN0b24gPGpqb2huc3RuQHJlZGhhdC5jb20+LgorKworK2lmICR0cmFjZWxldmVsIHRoZW4geworKyAgICBzdHJhY2UgJHRyYWNlbGV2ZWwKKyt9CisrCisrc2V0IHBybXNfaWQgMAorK3NldCBidWdfaWQgMAorKworKyMgYXJlIHdlIG9uIGEgdGFyZ2V0IGJvYXJkCisraWYgW2lzX3JlbW90ZSB0YXJnZXRdIHsKKysgICAgcmV0dXJuCisrfQorKworKworK2dsb2JhbCB2ZXJib3NlCisrZ2xvYmFsIEdEQgorK2dsb2JhbCBHREJGTEFHUworK2dsb2JhbCBnZGJfcHJvbXB0CisrZ2xvYmFsIHRpbWVvdXQKKytnbG9iYWwgZ2RiX3NwYXduX2lkOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisrZ2RiX3N0b3Bfc3VwcHJlc3NpbmdfdGVzdHM7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyt2ZXJib3NlICJTcGF3bmluZyAkR0RCIC1udyIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorK2lmIFtpbmZvIGV4aXN0cyBnZGJfc3Bhd25faWRdIHsKKysgICAgcmV0dXJuIDA7CisrfQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisraWYgIVtpc19yZW1vdGUgaG9zdF0geworKyAgIGlmIHsgW3doaWNoICRHREJdID09IDAgfSB0aGVuIHsKKysgICAgICAgIHBlcnJvciAiJEdEQiBkb2VzIG5vdCBleGlzdC4iCisrICAgICAgICBleGl0IDEKKysgICAgfQorK30KKysKKytzZXQgZW52KEhPTUUpIFtwd2RdCisrcmVtb3RlX2V4ZWMgYnVpbGQgInJtIC5nZGJpbml0IgorK3JlbW90ZV9leGVjIGJ1aWxkICJjcCAke3NyY2Rpcn0vJHtzdWJkaXJ9L2dkYmluaXQuc2FtcGxlIC5nZGJpbml0IgorK3JlbW90ZV9leGVjIGJ1aWxkICJjaG1vZCA2NDYgLmdkYmluaXQiCisrCisrc2V0IHJlcyBbcmVtb3RlX3NwYXduIGhvc3QgIiRHREIgLW53IFtob3N0X2luZm8gZ2RiX29wdHNdIl07CisraWYgeyAkcmVzIDwgMCB8fCAkcmVzID09ICIiIH0geworKyAgICBwZXJyb3IgIlNwYXduaW5nICRHREIgZmFpbGVkLiIKKysgICAgcmV0dXJuIDE7CisrfQorK2dkYl9leHBlY3QgMzYwIHsKKysgICAgLXJlICJ3YXJuaW5nOiBub3QgdXNpbmcgdW50cnVzdGVkIGZpbGUuKlwuZ2RiaW5pdC4qXFtcclxuXF0kZ2RiX3Byb21wdCAkIiB7CisrICAgICAgICBwYXNzICJ1bnRydXN0ZWQgLmdkYmluaXQgY2F1Z2h0LiIKKysgICAgfQorKyAgICAtcmUgIiRnZGJfcHJvbXB0ICQiICAgICB7CisrICAgICAgICBmYWlsICJ1bnRydXN0ZWQgLmdkYmluaXQgY2F1Z2h0LiIKKysgICAgfQorKyAgICB0aW1lb3V0IHsKKysgICAgICAgIGZhaWwgIih0aW1lb3V0KSB1bnRydXN0ZWQgLmdkYmluaXQgY2F1Z2h0LiIKKysgICAgfQorK30KKysKKytyZW1vdGVfZXhlYyBidWlsZCAiY2htb2QgNjQ0IC5nZGJpbml0IgorK3NldCByZXMgW3JlbW90ZV9zcGF3biBob3N0ICIkR0RCIC1udyBbaG9zdF9pbmZvIGdkYl9vcHRzXSJdOworK2lmIHsgJHJlcyA8IDAgfHwgJHJlcyA9PSAiIiB9IHsKKysgICAgcGVycm9yICJTcGF3bmluZyAkR0RCIGZhaWxlZC4iCisrICAgIHJldHVybiAxOworK30KKytnZGJfZXhwZWN0IDM2MCB7CisrICAgIC1yZSAid2FybmluZzogbm90IHVzaW5nIHVudHJ1c3RlZCBmaWxlLipcLmdkYmluaXQuKlxbXHJcblxdJGdkYl9wcm9tcHQgJCIgeworKyAgICAgICAgZmFpbCAidHJ1c3RlZCAuZ2RiaW5pdCBhbGxvd2VkLiIKKysgICAgfQorKyAgICAtcmUgImluIGdkYmluaXQuKiRnZGJfcHJvbXB0ICQiICAgICB7CisrICAgICAgICBwYXNzICJ0cnVzdGVkIC5nZGJpbml0IGFsbG93ZWQuIgorKyAgICB9CisrICAgIHRpbWVvdXQgeworKyAgICAgICAgZmFpbCAiKHRpbWVvdXQpIHRydXN0ZWQgLmdkYmluaXQgYWxsb3dlZC4iCisrICAgIH0KKyt9CisrCisrcmVtb3RlX2V4ZWMgYnVpbGQgInJtIC5nZGJpbml0IgorZGlmZiAtZHVyTiBnZGItNi44Lm9yaWcvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9nZGJpbml0LnNhbXBsZSBnZGItNi44L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvZ2RiaW5pdC5zYW1wbGUKKy0tLSBnZGItNi44Lm9yaWcvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9nZGJpbml0LnNhbXBsZQkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdkYi02LjgvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9nZGJpbml0LnNhbXBsZQkyMDA4LTA2LTE3IDE2OjA3OjMzLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSBAQAorK2VjaG8gIlxuaW4gZ2RiaW5pdCIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nZGIvNi44YS8xMjAtdGRlcC1vcGNvZGUtaW5jbHVkZS13b3JrYXJvdW5kLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dkYi82LjhhLzEyMC10ZGVwLW9wY29kZS1pbmNsdWRlLXdvcmthcm91bmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFmZGVmNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nZGIvNi44YS8xMjAtdGRlcC1vcGNvZGUtaW5jbHVkZS13b3JrYXJvdW5kLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nZGIvNi44LzIwX2FsbF9nZGItdGRlcC1vcGNvZGUtaW5jbHVkZS13b3JrYXJvdW5kLnBhdGNoCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK3dvcmthcm91bmQgYnVpbGQgZmFpbHVyZQorCitodHRwOi8vYnVncy5nZW50b28ub3JnLzIxNjM2OAorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCitkaWZmIC1kdXJOIGdkYi02Ljgub3JpZy9nZGIvZnJ2LXRkZXAuYyBnZGItNi44L2dkYi9mcnYtdGRlcC5jCistLS0gZ2RiLTYuOC5vcmlnL2dkYi9mcnYtdGRlcC5jCTIwMDgtMDEtMTEgMTQ6MTk6NTkuMDAwMDAwMDAwICswMTAwCisrKysgZ2RiLTYuOC9nZGIvZnJ2LXRkZXAuYwkyMDA4LTA2LTE3IDE2OjA3OjM0LjAwMDAwMDAwMCArMDIwMAorQEAgLTMyLDcgKzMyLDcgQEAKKyAjaW5jbHVkZSAiZ2RiX2Fzc2VydC5oIgorICNpbmNsdWRlICJzaW0tcmVnbm8uaCIKKyAjaW5jbHVkZSAiZ2RiL3NpbS1mcnYuaCIKKy0jaW5jbHVkZSAib3Bjb2Rlcy9mcnYtZGVzYy5oIgkvKiBmb3IgdGhlIEhfU1BSXy4uLiBlbnVtcyAqLworKyNpbmNsdWRlICIuLi9vcGNvZGVzL2Zydi1kZXNjLmgiCS8qIGZvciB0aGUgSF9TUFJfLi4uIGVudW1zICovCisgI2luY2x1ZGUgInN5bXRhYi5oIgorICNpbmNsdWRlICJlbGYtYmZkLmgiCisgI2luY2x1ZGUgImVsZi9mcnYuaCIKK2RpZmYgLWR1ck4gZ2RiLTYuOC5vcmlnL2dkYi9tZXAtdGRlcC5jIGdkYi02LjgvZ2RiL21lcC10ZGVwLmMKKy0tLSBnZGItNi44Lm9yaWcvZ2RiL21lcC10ZGVwLmMJMjAwOC0wMS0xMSAxNDoyMDowMi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnZGItNi44L2dkYi9tZXAtdGRlcC5jCTIwMDgtMDYtMTcgMTY6MDc6MzQuMDAwMDAwMDAwICswMjAwCitAQCAtNTMsOCArNTMsOCBAQAorIAorIC8qIEdldCB0aGUgdXNlcidzIGN1c3RvbWl6ZWQgTWVQIGNvcHJvY2Vzc29yIHJlZ2lzdGVyIG5hbWVzIGZyb20KKyAgICBsaWJvcGNvZGVzLiAgKi8KKy0jaW5jbHVkZSAib3Bjb2Rlcy9tZXAtZGVzYy5oIgorLSNpbmNsdWRlICJvcGNvZGVzL21lcC1vcGMuaCIKKysjaW5jbHVkZSAiLi4vb3Bjb2Rlcy9tZXAtZGVzYy5oIgorKyNpbmNsdWRlICIuLi9vcGNvZGVzL21lcC1vcGMuaCIKKyAKKyAMCisgLyogVGhlIGdkYmFyY2hfdGRlcCBzdHJ1Y3R1cmUuICAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dkYi82LjhhLzEzMC1yZWctbm8tbG9uZ2VyLWFjdGl2ZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nZGIvNi44YS8xMzAtcmVnLW5vLWxvbmdlci1hY3RpdmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM3ZTdlMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nZGIvNi44YS8xMzAtcmVnLW5vLWxvbmdlci1hY3RpdmUucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRml4IGJ1ZyByZXBvcnRlZCBieSBUaG9tYXMgUGV0YXp6b25pIDx0aG9tYXMucGV0YXp6b25pQGZyZWUtZWxlY3Ryb25zLmNvbT46CitTZWU6IGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9tbC9jcm9zc2djYy8yMDA5LTA1L21zZzAwMDU1Lmh0bWwKKyAgICAgaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD00MzYwMzcKKworRml4IGZyb206IGh0dHA6Ly9jdnMuZmVkb3JhcHJvamVjdC5vcmcvdmlld3ZjL2RldmVsL2dkYi9nZGItNi44LWJ6NDM2MDM3LXJlZy1uby1sb25nZXItYWN0aXZlLnBhdGNoP3JldmlzaW9uPTEuMQorCitkaWZmIC1kIC11cnBOIHNyYy4wL2dkYi92YWxvcHMuYyBzcmMuMS9nZGIvdmFsb3BzLmMKKy0tLSBzcmMuMC9nZGIvdmFsb3BzLmMJMjAwOC0wNy0yNyAwNDowMDowMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBzcmMuMS9nZGIvdmFsb3BzLmMJMjAwOC0wNy0zMSAxNToxNzo0Mi4wMDAwMDAwMDAgKzAyMDAKK0BAIC04MTMsMTAgKzgxMywxOCBAQCB2YWx1ZV9hc3NpZ24gKHN0cnVjdCB2YWx1ZSAqdG92YWwsIHN0cnVjCisgCXN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZTsKKyAJaW50IHZhbHVlX3JlZzsKKyAKKy0JLyogRmlndXJlIG91dCB3aGljaCBmcmFtZSB0aGlzIGlzIGluIGN1cnJlbnRseS4gICovCistCWZyYW1lID0gZnJhbWVfZmluZF9ieV9pZCAoVkFMVUVfRlJBTUVfSUQgKHRvdmFsKSk7CisgCXZhbHVlX3JlZyA9IFZBTFVFX1JFR05VTSAodG92YWwpOworIAorKwkvKiBGaWd1cmUgb3V0IHdoaWNoIGZyYW1lIHRoaXMgaXMgaW4gY3VycmVudGx5LiAgKi8KKysJZnJhbWUgPSBmcmFtZV9maW5kX2J5X2lkIChWQUxVRV9GUkFNRV9JRCAodG92YWwpKTsKKysJLyogInNldCAkcmVnKz0xIiBzaG91bGQgd29yayBvbiBwcm9ncmFtcyB3aXRoIG5vIGRlYnVnIGluZm8sCisrCSAgIGJ1dCBmcmFtZV9maW5kX2J5X2lkIHJldHVybnMgTlVMTCBoZXJlIChSSCBidWcgNDM2MDM3KS4KKysJICAgVXNlIGN1cnJlbnQgZnJhbWUsIGl0IHJlcHJlc2VudHMgQ1BVIHN0YXRlIGluIHRoaXMgY2FzZS4KKysJICAgSWYgZnJhbWVfZmluZF9ieV9pZCBpcyBjaGFuZ2VkIHRvIGRvIGl0IGludGVybmFsbHkKKysJICAgKGl0IGlzIGNvbnRlbXBsYXRlZCB0aGVyZSksIHJlbW92ZSB0aGlzLiAgKi8KKysJaWYgKCFmcmFtZSkKKysJICBmcmFtZSA9IGdldF9jdXJyZW50X2ZyYW1lICgpOworKwkvKiBQcm9iYWJseSBuZXZlciBoYXBwZW5zLiAgKi8KKyAJaWYgKCFmcmFtZSkKKyAJICBlcnJvciAoXygiVmFsdWUgYmVpbmcgYXNzaWduZWQgdG8gaXMgbm8gbG9uZ2VyIGFjdGl2ZS4iKSk7CisgCQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dkYi82LjhhLzE0MC1zaW0tcHBjLWhhdmUtY29uZmlnLWgucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2RiLzYuOGEvMTQwLXNpbS1wcGMtaGF2ZS1jb25maWctaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzcyM2I1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dkYi82LjhhLzE0MC1zaW0tcHBjLWhhdmUtY29uZmlnLWgucGF0Y2gKQEAgLTAsMCArMSwxODMgQEAKK0ZpeCBmb3IgY2FuYWRpYW4gY3Jvc3MgYnVpbGQgb2Ygc2ltL3BwYworCitPcmlnbmFsIHBhdGNoIGluZm8gc2VlOiBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD05NjM4CisKK2RpZmYgLXVyTiBnZGItNi44LXBsMS9zaW0vcHBjL01ha2VmaWxlLmluIGdkYi02LjgtcGwyL3NpbS9wcGMvTWFrZWZpbGUuaW4KKy0tLSBnZGItNi44LXBsMS9zaW0vcHBjL01ha2VmaWxlLmluCTIwMDYtMDUtMzEgMTc6MTQ6NDUuMDAwMDAwMDAwICswMjAwCisrKysgZ2RiLTYuOC1wbDIvc2ltL3BwYy9NYWtlZmlsZS5pbgkyMDA4LTA5LTMwIDE1OjU2OjMzLjAwMDAwMDAwMCArMDIwMAorQEAgLTYxLDcgKzYxLDcgQEAKKyBBUiA9IEBBUkAKKyBBUl9GTEFHUyA9IHJjCisgQ0MgPSBAQ0NACistQ0ZMQUdTID0gQENGTEFHU0AKKytDRkxBR1MgPSBAQ0ZMQUdTQCAtREhBVkVfQ09ORklHX0gKKyBDQ19GT1JfQlVJTEQgPSBAQ0NfRk9SX0JVSUxEQAorIENGTEFHU19GT1JfQlVJTEQgPSBAQ0ZMQUdTX0ZPUl9CVUlMREAKKyBCSVNPTiA9IGJpc29uCitAQCAtMTE1LDggKzExNSw4IEBACisgICAkKERFVlpFUk9fQ0ZMQUdTKQorIFNJTV9GUFVfQ0ZMQUdTID0gQHNpbV9mcHVfY2ZsYWdzQAorIAorLVNURF9DRkxBR1MJPSAkKENGTEFHUykgJChJTkxJTkVfQ0ZMQUdTKSAkKENPTkZJR19DRkxBR1MpICQoV0FSTklOR19DRkxBR1MpICQoU0lNX0NGTEFHUykgJChIREVGSU5FUykgJChUREVGSU5FUykgJChJTkNMVURFUykgJChJTlRMX0NGTEFHUykgJChTSU1fRlBVX0NGTEFHUykKKy1OT1dBUk5fQ0ZMQUdTCT0gJChDRkxBR1MpICQoSU5MSU5FX0NGTEFHUykgJChDT05GSUdfQ0ZMQUdTKSAkKFNJTV9DRkxBR1MpICQoSERFRklORVMpICQoVERFRklORVMpICQoSU5DTFVERVMpICAkKFNJTV9GUFVfQ0ZMQUdTKQorK1NURF9DRkxBR1MJPSAkKENGTEFHUykgLURIQVZFX0NPTkZJR19IICQoSU5MSU5FX0NGTEFHUykgJChDT05GSUdfQ0ZMQUdTKSAkKFdBUk5JTkdfQ0ZMQUdTKSAkKFNJTV9DRkxBR1MpICQoSERFRklORVMpICQoVERFRklORVMpICQoSU5DTFVERVMpICQoSU5UTF9DRkxBR1MpICQoU0lNX0ZQVV9DRkxBR1MpCisrTk9XQVJOX0NGTEFHUwk9ICQoQ0ZMQUdTKSAtREhBVkVfQ09ORklHX0ggJChJTkxJTkVfQ0ZMQUdTKSAkKENPTkZJR19DRkxBR1MpICQoU0lNX0NGTEFHUykgJChIREVGSU5FUykgJChUREVGSU5FUykgJChJTkNMVURFUykgICQoU0lNX0ZQVV9DRkxBR1MpCisgQlVJTERfQ0ZMQUdTCT0gJChDRkxBR1NfRk9SX0JVSUxEKSAkKElOQ0xVREVTKSAkKFdBUk5JTkdfQ0ZMQUdTKQorIAorIEJVSUxEX0xERkxBR1MJPQorZGlmZiAtdXJOIGdkYi02Ljgtb3JpZy9zaW0vcHBjL2Jhc2ljcy5oIGdkYi02LjgtcGwxL3NpbS9wcGMvYmFzaWNzLmgKKy0tLSBnZGItNi44LW9yaWcvc2ltL3BwYy9iYXNpY3MuaAkxOTk5LTA0LTE2IDAzOjM1OjA4LjAwMDAwMDAwMCArMDIwMAorKysrIGdkYi02LjgtcGwxL3NpbS9wcGMvYmFzaWNzLmgJMjAwOC0wOS0zMCAxNToxMjozMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC04Niw3ICs4Niw5IEBACisgCisgLyogQmFzaWMgY29uZmlndXJhdGlvbiAqLworIAorKyNpZmRlZiBIQVZFX0NPTkZJR19ICisgI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorICNpbmNsdWRlICJwcGMtY29uZmlnLmgiCisgI2luY2x1ZGUgImlubGluZS5oIgorIAorZGlmZiAtdXJOIGdkYi02Ljgtb3JpZy9zaW0vcHBjL2RlYnVnLmMgZ2RiLTYuOC1wbDEvc2ltL3BwYy9kZWJ1Zy5jCistLS0gZ2RiLTYuOC1vcmlnL3NpbS9wcGMvZGVidWcuYwkxOTk5LTA0LTE2IDAzOjM1OjA4LjAwMDAwMDAwMCArMDIwMAorKysrIGdkYi02LjgtcGwxL3NpbS9wcGMvZGVidWcuYwkyMDA4LTA5LTMwIDE1OjEyOjI3LjAwMDAwMDAwMCArMDIwMAorQEAgLTIyLDcgKzIyLDkgQEAKKyAjaWZuZGVmIF9ERUJVR19DXworICNkZWZpbmUgX0RFQlVHX0NfCisgCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgI2luY2x1ZGUgImJhc2ljcy5oIgorIAorICNpZmRlZiBIQVZFX1NURExJQl9ICitkaWZmIC11ck4gZ2RiLTYuOC1vcmlnL3NpbS9wcGMvZGdlbi5jIGdkYi02LjgtcGwxL3NpbS9wcGMvZGdlbi5jCistLS0gZ2RiLTYuOC1vcmlnL3NpbS9wcGMvZGdlbi5jCTE5OTktMDQtMTYgMDM6MzU6MDguMDAwMDAwMDAwICswMjAwCisrKysgZ2RiLTYuOC1wbDEvc2ltL3BwYy9kZ2VuLmMJMjAwOC0wOS0zMCAxNToxMjoyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNyw3ICsyNyw5IEBACisgI2luY2x1ZGUgPGN0eXBlLmg+CisgI2luY2x1ZGUgPHN0ZGFyZy5oPgorIAorKyNpZmRlZiBIQVZFX0NPTkZJR19ICisgI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorICNpbmNsdWRlICJtaXNjLmgiCisgI2luY2x1ZGUgImxmLmgiCisgI2luY2x1ZGUgInRhYmxlLmgiCitkaWZmIC11ck4gZ2RiLTYuOC1vcmlnL3NpbS9wcGMvZmlsdGVyLmMgZ2RiLTYuOC1wbDEvc2ltL3BwYy9maWx0ZXIuYworLS0tIGdkYi02Ljgtb3JpZy9zaW0vcHBjL2ZpbHRlci5jCTE5OTktMDQtMTYgMDM6MzU6MDkuMDAwMDAwMDAwICswMjAwCisrKysgZ2RiLTYuOC1wbDEvc2ltL3BwYy9maWx0ZXIuYwkyMDA4LTA5LTMwIDE1OjEyOjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTIxLDcgKzIxLDkgQEAKKyAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorICNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKyAjaWZkZWYgSEFWRV9TVFJJTkdfSAorICNpbmNsdWRlIDxzdHJpbmcuaD4KK2RpZmYgLXVyTiBnZGItNi44LW9yaWcvc2ltL3BwYy9maWx0ZXJfZmlsZW5hbWUuYyBnZGItNi44LXBsMS9zaW0vcHBjL2ZpbHRlcl9maWxlbmFtZS5jCistLS0gZ2RiLTYuOC1vcmlnL3NpbS9wcGMvZmlsdGVyX2ZpbGVuYW1lLmMJMTk5OS0wNC0xNiAwMzozNTowOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnZGItNi44LXBsMS9zaW0vcHBjL2ZpbHRlcl9maWxlbmFtZS5jCTIwMDgtMDktMzAgMTU6MTI6MTEuMDAwMDAwMDAwICswMjAwCitAQCAtMTgsNyArMTgsOSBAQAorICAKKyAgICAgKi8KKyAKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorICNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAjaW5jbHVkZSAicHBjLWNvbmZpZy5oIgorICNpbmNsdWRlICJmaWx0ZXJfZmlsZW5hbWUuaCIKKyAKK2RpZmYgLXVyTiBnZGItNi44LW9yaWcvc2ltL3BwYy9pZ2VuLmMgZ2RiLTYuOC1wbDEvc2ltL3BwYy9pZ2VuLmMKKy0tLSBnZGItNi44LW9yaWcvc2ltL3BwYy9pZ2VuLmMJMjAwMy0wNi0yMCAwNTo1OTozMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnZGItNi44LXBsMS9zaW0vcHBjL2lnZW4uYwkyMDA4LTA5LTMwIDE1OjEyOjA2LjAwMDAwMDAwMCArMDIwMAorQEAgLTI1LDcgKzI1LDkgQEAKKyAjaW5jbHVkZSAibWlzYy5oIgorICNpbmNsdWRlICJsZi5oIgorICNpbmNsdWRlICJ0YWJsZS5oIgorKyNpZmRlZiBIQVZFX0NPTkZJR19ICisgI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorIAorICNpbmNsdWRlICJmaWx0ZXIuaCIKKyAKK2RpZmYgLXVyTiBnZGItNi44LW9yaWcvc2ltL3BwYy9pbmxpbmUuYyBnZGItNi44LXBsMS9zaW0vcHBjL2lubGluZS5jCistLS0gZ2RiLTYuOC1vcmlnL3NpbS9wcGMvaW5saW5lLmMJMTk5OS0wNC0xNiAwMzozNToxMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnZGItNi44LXBsMS9zaW0vcHBjL2lubGluZS5jCTIwMDgtMDktMzAgMTU6MTE6NTguMDAwMDAwMDAwICswMjAwCitAQCAtMjIsNyArMjIsOSBAQAorICNpZm5kZWYgX0lOTElORV9DXworICNkZWZpbmUgX0lOTElORV9DXworIAorKyNpZmRlZiBIQVZFX0NPTkZJR19ICisgI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorICNpbmNsdWRlICJwcGMtY29uZmlnLmgiCisgCisgI2luY2x1ZGUgImlubGluZS5oIgorZGlmZiAtdXJOIGdkYi02Ljgtb3JpZy9zaW0vcHBjL2xmLmMgZ2RiLTYuOC1wbDEvc2ltL3BwYy9sZi5jCistLS0gZ2RiLTYuOC1vcmlnL3NpbS9wcGMvbGYuYwkyMDAyLTA1LTMwIDE3OjA3OjA2LjAwMDAwMDAwMCArMDIwMAorKysrIGdkYi02LjgtcGwxL3NpbS9wcGMvbGYuYwkyMDA4LTA5LTMwIDE1OjMzOjM1LjAwMDAwMDAwMCArMDIwMAorQEAgLTIzLDcgKzIzLDkgQEAKKyAjaW5jbHVkZSA8c3RkYXJnLmg+CisgI2luY2x1ZGUgPGN0eXBlLmg+CisgCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgI2luY2x1ZGUgIm1pc2MuaCIKKyAjaW5jbHVkZSAibGYuaCIKKyAKK2RpZmYgLXVyTiBnZGItNi44LW9yaWcvc2ltL3BwYy9taXNjLmMgZ2RiLTYuOC1wbDEvc2ltL3BwYy9taXNjLmMKKy0tLSBnZGItNi44LW9yaWcvc2ltL3BwYy9taXNjLmMJMTk5OS0wNC0xNiAwMzozNToxMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnZGItNi44LXBsMS9zaW0vcHBjL21pc2MuYwkyMDA4LTA5LTMwIDE1OjExOjU0LjAwMDAwMDAwMCArMDIwMAorQEAgLTIzLDcgKzIzLDkgQEAKKyAjaW5jbHVkZSA8c3RkYXJnLmg+CisgI2luY2x1ZGUgPGN0eXBlLmg+CisgCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgI2luY2x1ZGUgIm1pc2MuaCIKKyAKKyAjaWZkZWYgSEFWRV9TVERMSUJfSAorZGlmZiAtdXJOIGdkYi02Ljgtb3JpZy9zaW0vcHBjL21pc2MuaCBnZGItNi44LXBsMS9zaW0vcHBjL21pc2MuaAorLS0tIGdkYi02Ljgtb3JpZy9zaW0vcHBjL21pc2MuaAkyMDAyLTAxLTEyIDExOjIxOjEyLjAwMDAwMDAwMCArMDEwMAorKysrIGdkYi02LjgtcGwxL3NpbS9wcGMvbWlzYy5oCTIwMDgtMDktMzAgMTU6MTE6NDkuMDAwMDAwMDAwICswMjAwCitAQCAtMjEsNyArMjEsOSBAQAorIAorIC8qIEZydXN0cmF0aW5nIGhlYWRlciBqdW5rICovCisgCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgCisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPGN0eXBlLmg+CitkaWZmIC11ck4gZ2RiLTYuOC1vcmlnL3NpbS9wcGMvc2ltLWVuZGlhbi5jIGdkYi02LjgtcGwxL3NpbS9wcGMvc2ltLWVuZGlhbi5jCistLS0gZ2RiLTYuOC1vcmlnL3NpbS9wcGMvc2ltLWVuZGlhbi5jCTE5OTktMDQtMTYgMDM6MzU6MTEuMDAwMDAwMDAwICswMjAwCisrKysgZ2RiLTYuOC1wbDEvc2ltL3BwYy9zaW0tZW5kaWFuLmMJMjAwOC0wOS0zMCAxNToxMTo0NC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMiw3ICsyMiw5IEBACisgI2lmbmRlZiBfU0lNX0VORElBTl9DXworICNkZWZpbmUgX1NJTV9FTkRJQU5fQ18KKyAKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorICNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAjaW5jbHVkZSAiYmFzaWNzLmgiCisgCisgCitkaWZmIC11ck4gZ2RiLTYuOC1vcmlnL3NpbS9wcGMvdGFibGUuYyBnZGItNi44LXBsMS9zaW0vcHBjL3RhYmxlLmMKKy0tLSBnZGItNi44LW9yaWcvc2ltL3BwYy90YWJsZS5jCTIwMDItMDEtMTIgMTE6MjE6MTIuMDAwMDAwMDAwICswMTAwCisrKysgZ2RiLTYuOC1wbDEvc2ltL3BwYy90YWJsZS5jCTIwMDgtMDktMzAgMTU6MTE6MzguMDAwMDAwMDAwICswMjAwCitAQCAtMjUsNyArMjUsOSBAQAorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxjdHlwZS5oPgorIAorKyNpZmRlZiBIQVZFX0NPTkZJR19ICisgI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorICNpbmNsdWRlICJtaXNjLmgiCisgI2luY2x1ZGUgImxmLmgiCisgI2luY2x1ZGUgInRhYmxlLmgiCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2RiLzYuOGEvMTUwLWhhbmRsZS1zdHBjcHktZGVmaW5lLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dkYi82LjhhLzE1MC1oYW5kbGUtc3RwY3B5LWRlZmluZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGQ3MDNmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dkYi82LjhhLzE1MC1oYW5kbGUtc3RwY3B5LWRlZmluZS5wYXRjaApAQCAtMCwwICsxLDEyIEBACitkaWZmIC1ydSBnZGItNi44Lm9yaWcvYmZkL3N5c2RlcC5oIGdkYi02LjgvYmZkL3N5c2RlcC5oCistLS0gZ2RiLTYuOC5vcmlnL2JmZC9zeXNkZXAuaAkyMDA3LTA3LTAzIDE2OjI2OjQyLjAwMDAwMDAwMCArMDIwMAorKysrIGdkYi02LjgvYmZkL3N5c2RlcC5oCTIwMTEtMDgtMjEgMTM6MzM6NDcuMDAwMDAwMDAwICswMjAwCitAQCAtMTMxLDcgKzEzMSw3IEBACisgZXh0ZXJuIFBUUiByZWFsbG9jICgpOworICNlbmRpZgorIAorLSNpZiAhSEFWRV9ERUNMX1NUUENQWQorKyNpZiAhSEFWRV9ERUNMX1NUUENQWSAmJiAhZGVmaW5lZChzdHBjcHkpCisgZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqX19kZXN0LCBjb25zdCBjaGFyICpfX3NyYyk7CisgI2VuZGlmCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2RiLzcuMC4xYS8xMDAtc2ltLXBwYy1oYXZlLWNvbmZpZy1oLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dkYi83LjAuMWEvMTAwLXNpbS1wcGMtaGF2ZS1jb25maWctaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzcyM2I1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dkYi83LjAuMWEvMTAwLXNpbS1wcGMtaGF2ZS1jb25maWctaC5wYXRjaApAQCAtMCwwICsxLDE4MyBAQAorRml4IGZvciBjYW5hZGlhbiBjcm9zcyBidWlsZCBvZiBzaW0vcHBjCisKK09yaWduYWwgcGF0Y2ggaW5mbyBzZWU6IGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTk2MzgKKworZGlmZiAtdXJOIGdkYi02LjgtcGwxL3NpbS9wcGMvTWFrZWZpbGUuaW4gZ2RiLTYuOC1wbDIvc2ltL3BwYy9NYWtlZmlsZS5pbgorLS0tIGdkYi02LjgtcGwxL3NpbS9wcGMvTWFrZWZpbGUuaW4JMjAwNi0wNS0zMSAxNzoxNDo0NS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnZGItNi44LXBsMi9zaW0vcHBjL01ha2VmaWxlLmluCTIwMDgtMDktMzAgMTU6NTY6MzMuMDAwMDAwMDAwICswMjAwCitAQCAtNjEsNyArNjEsNyBAQAorIEFSID0gQEFSQAorIEFSX0ZMQUdTID0gcmMKKyBDQyA9IEBDQ0AKKy1DRkxBR1MgPSBAQ0ZMQUdTQAorK0NGTEFHUyA9IEBDRkxBR1NAIC1ESEFWRV9DT05GSUdfSAorIENDX0ZPUl9CVUlMRCA9IEBDQ19GT1JfQlVJTERACisgQ0ZMQUdTX0ZPUl9CVUlMRCA9IEBDRkxBR1NfRk9SX0JVSUxEQAorIEJJU09OID0gYmlzb24KK0BAIC0xMTUsOCArMTE1LDggQEAKKyAgICQoREVWWkVST19DRkxBR1MpCisgU0lNX0ZQVV9DRkxBR1MgPSBAc2ltX2ZwdV9jZmxhZ3NACisgCistU1REX0NGTEFHUwk9ICQoQ0ZMQUdTKSAkKElOTElORV9DRkxBR1MpICQoQ09ORklHX0NGTEFHUykgJChXQVJOSU5HX0NGTEFHUykgJChTSU1fQ0ZMQUdTKSAkKEhERUZJTkVTKSAkKFRERUZJTkVTKSAkKElOQ0xVREVTKSAkKElOVExfQ0ZMQUdTKSAkKFNJTV9GUFVfQ0ZMQUdTKQorLU5PV0FSTl9DRkxBR1MJPSAkKENGTEFHUykgJChJTkxJTkVfQ0ZMQUdTKSAkKENPTkZJR19DRkxBR1MpICQoU0lNX0NGTEFHUykgJChIREVGSU5FUykgJChUREVGSU5FUykgJChJTkNMVURFUykgICQoU0lNX0ZQVV9DRkxBR1MpCisrU1REX0NGTEFHUwk9ICQoQ0ZMQUdTKSAtREhBVkVfQ09ORklHX0ggJChJTkxJTkVfQ0ZMQUdTKSAkKENPTkZJR19DRkxBR1MpICQoV0FSTklOR19DRkxBR1MpICQoU0lNX0NGTEFHUykgJChIREVGSU5FUykgJChUREVGSU5FUykgJChJTkNMVURFUykgJChJTlRMX0NGTEFHUykgJChTSU1fRlBVX0NGTEFHUykKKytOT1dBUk5fQ0ZMQUdTCT0gJChDRkxBR1MpIC1ESEFWRV9DT05GSUdfSCAkKElOTElORV9DRkxBR1MpICQoQ09ORklHX0NGTEFHUykgJChTSU1fQ0ZMQUdTKSAkKEhERUZJTkVTKSAkKFRERUZJTkVTKSAkKElOQ0xVREVTKSAgJChTSU1fRlBVX0NGTEFHUykKKyBCVUlMRF9DRkxBR1MJPSAkKENGTEFHU19GT1JfQlVJTEQpICQoSU5DTFVERVMpICQoV0FSTklOR19DRkxBR1MpCisgCisgQlVJTERfTERGTEFHUwk9CitkaWZmIC11ck4gZ2RiLTYuOC1vcmlnL3NpbS9wcGMvYmFzaWNzLmggZ2RiLTYuOC1wbDEvc2ltL3BwYy9iYXNpY3MuaAorLS0tIGdkYi02Ljgtb3JpZy9zaW0vcHBjL2Jhc2ljcy5oCTE5OTktMDQtMTYgMDM6MzU6MDguMDAwMDAwMDAwICswMjAwCisrKysgZ2RiLTYuOC1wbDEvc2ltL3BwYy9iYXNpY3MuaAkyMDA4LTA5LTMwIDE1OjEyOjMyLjAwMDAwMDAwMCArMDIwMAorQEAgLTg2LDcgKzg2LDkgQEAKKyAKKyAvKiBCYXNpYyBjb25maWd1cmF0aW9uICovCisgCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgI2luY2x1ZGUgInBwYy1jb25maWcuaCIKKyAjaW5jbHVkZSAiaW5saW5lLmgiCisgCitkaWZmIC11ck4gZ2RiLTYuOC1vcmlnL3NpbS9wcGMvZGVidWcuYyBnZGItNi44LXBsMS9zaW0vcHBjL2RlYnVnLmMKKy0tLSBnZGItNi44LW9yaWcvc2ltL3BwYy9kZWJ1Zy5jCTE5OTktMDQtMTYgMDM6MzU6MDguMDAwMDAwMDAwICswMjAwCisrKysgZ2RiLTYuOC1wbDEvc2ltL3BwYy9kZWJ1Zy5jCTIwMDgtMDktMzAgMTU6MTI6MjcuMDAwMDAwMDAwICswMjAwCitAQCAtMjIsNyArMjIsOSBAQAorICNpZm5kZWYgX0RFQlVHX0NfCisgI2RlZmluZSBfREVCVUdfQ18KKyAKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorICNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAjaW5jbHVkZSAiYmFzaWNzLmgiCisgCisgI2lmZGVmIEhBVkVfU1RETElCX0gKK2RpZmYgLXVyTiBnZGItNi44LW9yaWcvc2ltL3BwYy9kZ2VuLmMgZ2RiLTYuOC1wbDEvc2ltL3BwYy9kZ2VuLmMKKy0tLSBnZGItNi44LW9yaWcvc2ltL3BwYy9kZ2VuLmMJMTk5OS0wNC0xNiAwMzozNTowOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnZGItNi44LXBsMS9zaW0vcHBjL2RnZW4uYwkyMDA4LTA5LTMwIDE1OjEyOjIyLjAwMDAwMDAwMCArMDIwMAorQEAgLTI3LDcgKzI3LDkgQEAKKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8c3RkYXJnLmg+CisgCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgI2luY2x1ZGUgIm1pc2MuaCIKKyAjaW5jbHVkZSAibGYuaCIKKyAjaW5jbHVkZSAidGFibGUuaCIKK2RpZmYgLXVyTiBnZGItNi44LW9yaWcvc2ltL3BwYy9maWx0ZXIuYyBnZGItNi44LXBsMS9zaW0vcHBjL2ZpbHRlci5jCistLS0gZ2RiLTYuOC1vcmlnL3NpbS9wcGMvZmlsdGVyLmMJMTk5OS0wNC0xNiAwMzozNTowOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnZGItNi44LXBsMS9zaW0vcHBjL2ZpbHRlci5jCTIwMDgtMDktMzAgMTU6MTI6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMjEsNyArMjEsOSBAQAorIAorICNpbmNsdWRlIDxzdGRpby5oPgorIAorKyNpZmRlZiBIQVZFX0NPTkZJR19ICisgI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorIAorICNpZmRlZiBIQVZFX1NUUklOR19ICisgI2luY2x1ZGUgPHN0cmluZy5oPgorZGlmZiAtdXJOIGdkYi02Ljgtb3JpZy9zaW0vcHBjL2ZpbHRlcl9maWxlbmFtZS5jIGdkYi02LjgtcGwxL3NpbS9wcGMvZmlsdGVyX2ZpbGVuYW1lLmMKKy0tLSBnZGItNi44LW9yaWcvc2ltL3BwYy9maWx0ZXJfZmlsZW5hbWUuYwkxOTk5LTA0LTE2IDAzOjM1OjA4LjAwMDAwMDAwMCArMDIwMAorKysrIGdkYi02LjgtcGwxL3NpbS9wcGMvZmlsdGVyX2ZpbGVuYW1lLmMJMjAwOC0wOS0zMCAxNToxMjoxMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xOCw3ICsxOCw5IEBACisgIAorICAgICAqLworIAorKyNpZmRlZiBIQVZFX0NPTkZJR19ICisgI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorICNpbmNsdWRlICJwcGMtY29uZmlnLmgiCisgI2luY2x1ZGUgImZpbHRlcl9maWxlbmFtZS5oIgorIAorZGlmZiAtdXJOIGdkYi02Ljgtb3JpZy9zaW0vcHBjL2lnZW4uYyBnZGItNi44LXBsMS9zaW0vcHBjL2lnZW4uYworLS0tIGdkYi02Ljgtb3JpZy9zaW0vcHBjL2lnZW4uYwkyMDAzLTA2LTIwIDA1OjU5OjMzLjAwMDAwMDAwMCArMDIwMAorKysrIGdkYi02LjgtcGwxL3NpbS9wcGMvaWdlbi5jCTIwMDgtMDktMzAgMTU6MTI6MDYuMDAwMDAwMDAwICswMjAwCitAQCAtMjUsNyArMjUsOSBAQAorICNpbmNsdWRlICJtaXNjLmgiCisgI2luY2x1ZGUgImxmLmgiCisgI2luY2x1ZGUgInRhYmxlLmgiCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgCisgI2luY2x1ZGUgImZpbHRlci5oIgorIAorZGlmZiAtdXJOIGdkYi02Ljgtb3JpZy9zaW0vcHBjL2lubGluZS5jIGdkYi02LjgtcGwxL3NpbS9wcGMvaW5saW5lLmMKKy0tLSBnZGItNi44LW9yaWcvc2ltL3BwYy9pbmxpbmUuYwkxOTk5LTA0LTE2IDAzOjM1OjEwLjAwMDAwMDAwMCArMDIwMAorKysrIGdkYi02LjgtcGwxL3NpbS9wcGMvaW5saW5lLmMJMjAwOC0wOS0zMCAxNToxMTo1OC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMiw3ICsyMiw5IEBACisgI2lmbmRlZiBfSU5MSU5FX0NfCisgI2RlZmluZSBfSU5MSU5FX0NfCisgCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgI2luY2x1ZGUgInBwYy1jb25maWcuaCIKKyAKKyAjaW5jbHVkZSAiaW5saW5lLmgiCitkaWZmIC11ck4gZ2RiLTYuOC1vcmlnL3NpbS9wcGMvbGYuYyBnZGItNi44LXBsMS9zaW0vcHBjL2xmLmMKKy0tLSBnZGItNi44LW9yaWcvc2ltL3BwYy9sZi5jCTIwMDItMDUtMzAgMTc6MDc6MDYuMDAwMDAwMDAwICswMjAwCisrKysgZ2RiLTYuOC1wbDEvc2ltL3BwYy9sZi5jCTIwMDgtMDktMzAgMTU6MzM6MzUuMDAwMDAwMDAwICswMjAwCitAQCAtMjMsNyArMjMsOSBAQAorICNpbmNsdWRlIDxzdGRhcmcuaD4KKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorICNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAjaW5jbHVkZSAibWlzYy5oIgorICNpbmNsdWRlICJsZi5oIgorIAorZGlmZiAtdXJOIGdkYi02Ljgtb3JpZy9zaW0vcHBjL21pc2MuYyBnZGItNi44LXBsMS9zaW0vcHBjL21pc2MuYworLS0tIGdkYi02Ljgtb3JpZy9zaW0vcHBjL21pc2MuYwkxOTk5LTA0LTE2IDAzOjM1OjExLjAwMDAwMDAwMCArMDIwMAorKysrIGdkYi02LjgtcGwxL3NpbS9wcGMvbWlzYy5jCTIwMDgtMDktMzAgMTU6MTE6NTQuMDAwMDAwMDAwICswMjAwCitAQCAtMjMsNyArMjMsOSBAQAorICNpbmNsdWRlIDxzdGRhcmcuaD4KKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorICNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAjaW5jbHVkZSAibWlzYy5oIgorIAorICNpZmRlZiBIQVZFX1NURExJQl9ICitkaWZmIC11ck4gZ2RiLTYuOC1vcmlnL3NpbS9wcGMvbWlzYy5oIGdkYi02LjgtcGwxL3NpbS9wcGMvbWlzYy5oCistLS0gZ2RiLTYuOC1vcmlnL3NpbS9wcGMvbWlzYy5oCTIwMDItMDEtMTIgMTE6MjE6MTIuMDAwMDAwMDAwICswMTAwCisrKysgZ2RiLTYuOC1wbDEvc2ltL3BwYy9taXNjLmgJMjAwOC0wOS0zMCAxNToxMTo0OS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMSw3ICsyMSw5IEBACisgCisgLyogRnJ1c3RyYXRpbmcgaGVhZGVyIGp1bmsgKi8KKyAKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorICNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8Y3R5cGUuaD4KK2RpZmYgLXVyTiBnZGItNi44LW9yaWcvc2ltL3BwYy9zaW0tZW5kaWFuLmMgZ2RiLTYuOC1wbDEvc2ltL3BwYy9zaW0tZW5kaWFuLmMKKy0tLSBnZGItNi44LW9yaWcvc2ltL3BwYy9zaW0tZW5kaWFuLmMJMTk5OS0wNC0xNiAwMzozNToxMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnZGItNi44LXBsMS9zaW0vcHBjL3NpbS1lbmRpYW4uYwkyMDA4LTA5LTMwIDE1OjExOjQ0LjAwMDAwMDAwMCArMDIwMAorQEAgLTIyLDcgKzIyLDkgQEAKKyAjaWZuZGVmIF9TSU1fRU5ESUFOX0NfCisgI2RlZmluZSBfU0lNX0VORElBTl9DXworIAorKyNpZmRlZiBIQVZFX0NPTkZJR19ICisgI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorICNpbmNsdWRlICJiYXNpY3MuaCIKKyAKKyAKK2RpZmYgLXVyTiBnZGItNi44LW9yaWcvc2ltL3BwYy90YWJsZS5jIGdkYi02LjgtcGwxL3NpbS9wcGMvdGFibGUuYworLS0tIGdkYi02Ljgtb3JpZy9zaW0vcHBjL3RhYmxlLmMJMjAwMi0wMS0xMiAxMToyMToxMi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnZGItNi44LXBsMS9zaW0vcHBjL3RhYmxlLmMJMjAwOC0wOS0zMCAxNToxMTozOC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNSw3ICsyNSw5IEBACisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGN0eXBlLmg+CisgCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgI2luY2x1ZGUgIm1pc2MuaCIKKyAjaW5jbHVkZSAibGYuaCIKKyAjaW5jbHVkZSAidGFibGUuaCIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nZGIvNy4wYS8xMDAtc2ltLXBwYy1oYXZlLWNvbmZpZy1oLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dkYi83LjBhLzEwMC1zaW0tcHBjLWhhdmUtY29uZmlnLWgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM3MjNiNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nZGIvNy4wYS8xMDAtc2ltLXBwYy1oYXZlLWNvbmZpZy1oLnBhdGNoCkBAIC0wLDAgKzEsMTgzIEBACitGaXggZm9yIGNhbmFkaWFuIGNyb3NzIGJ1aWxkIG9mIHNpbS9wcGMKKworT3JpZ25hbCBwYXRjaCBpbmZvIHNlZTogaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9OTYzOAorCitkaWZmIC11ck4gZ2RiLTYuOC1wbDEvc2ltL3BwYy9NYWtlZmlsZS5pbiBnZGItNi44LXBsMi9zaW0vcHBjL01ha2VmaWxlLmluCistLS0gZ2RiLTYuOC1wbDEvc2ltL3BwYy9NYWtlZmlsZS5pbgkyMDA2LTA1LTMxIDE3OjE0OjQ1LjAwMDAwMDAwMCArMDIwMAorKysrIGdkYi02LjgtcGwyL3NpbS9wcGMvTWFrZWZpbGUuaW4JMjAwOC0wOS0zMCAxNTo1NjozMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC02MSw3ICs2MSw3IEBACisgQVIgPSBAQVJACisgQVJfRkxBR1MgPSByYworIENDID0gQENDQAorLUNGTEFHUyA9IEBDRkxBR1NACisrQ0ZMQUdTID0gQENGTEFHU0AgLURIQVZFX0NPTkZJR19ICisgQ0NfRk9SX0JVSUxEID0gQENDX0ZPUl9CVUlMREAKKyBDRkxBR1NfRk9SX0JVSUxEID0gQENGTEFHU19GT1JfQlVJTERACisgQklTT04gPSBiaXNvbgorQEAgLTExNSw4ICsxMTUsOCBAQAorICAgJChERVZaRVJPX0NGTEFHUykKKyBTSU1fRlBVX0NGTEFHUyA9IEBzaW1fZnB1X2NmbGFnc0AKKyAKKy1TVERfQ0ZMQUdTCT0gJChDRkxBR1MpICQoSU5MSU5FX0NGTEFHUykgJChDT05GSUdfQ0ZMQUdTKSAkKFdBUk5JTkdfQ0ZMQUdTKSAkKFNJTV9DRkxBR1MpICQoSERFRklORVMpICQoVERFRklORVMpICQoSU5DTFVERVMpICQoSU5UTF9DRkxBR1MpICQoU0lNX0ZQVV9DRkxBR1MpCistTk9XQVJOX0NGTEFHUwk9ICQoQ0ZMQUdTKSAkKElOTElORV9DRkxBR1MpICQoQ09ORklHX0NGTEFHUykgJChTSU1fQ0ZMQUdTKSAkKEhERUZJTkVTKSAkKFRERUZJTkVTKSAkKElOQ0xVREVTKSAgJChTSU1fRlBVX0NGTEFHUykKKytTVERfQ0ZMQUdTCT0gJChDRkxBR1MpIC1ESEFWRV9DT05GSUdfSCAkKElOTElORV9DRkxBR1MpICQoQ09ORklHX0NGTEFHUykgJChXQVJOSU5HX0NGTEFHUykgJChTSU1fQ0ZMQUdTKSAkKEhERUZJTkVTKSAkKFRERUZJTkVTKSAkKElOQ0xVREVTKSAkKElOVExfQ0ZMQUdTKSAkKFNJTV9GUFVfQ0ZMQUdTKQorK05PV0FSTl9DRkxBR1MJPSAkKENGTEFHUykgLURIQVZFX0NPTkZJR19IICQoSU5MSU5FX0NGTEFHUykgJChDT05GSUdfQ0ZMQUdTKSAkKFNJTV9DRkxBR1MpICQoSERFRklORVMpICQoVERFRklORVMpICQoSU5DTFVERVMpICAkKFNJTV9GUFVfQ0ZMQUdTKQorIEJVSUxEX0NGTEFHUwk9ICQoQ0ZMQUdTX0ZPUl9CVUlMRCkgJChJTkNMVURFUykgJChXQVJOSU5HX0NGTEFHUykKKyAKKyBCVUlMRF9MREZMQUdTCT0KK2RpZmYgLXVyTiBnZGItNi44LW9yaWcvc2ltL3BwYy9iYXNpY3MuaCBnZGItNi44LXBsMS9zaW0vcHBjL2Jhc2ljcy5oCistLS0gZ2RiLTYuOC1vcmlnL3NpbS9wcGMvYmFzaWNzLmgJMTk5OS0wNC0xNiAwMzozNTowOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnZGItNi44LXBsMS9zaW0vcHBjL2Jhc2ljcy5oCTIwMDgtMDktMzAgMTU6MTI6MzIuMDAwMDAwMDAwICswMjAwCitAQCAtODYsNyArODYsOSBAQAorIAorIC8qIEJhc2ljIGNvbmZpZ3VyYXRpb24gKi8KKyAKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorICNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAjaW5jbHVkZSAicHBjLWNvbmZpZy5oIgorICNpbmNsdWRlICJpbmxpbmUuaCIKKyAKK2RpZmYgLXVyTiBnZGItNi44LW9yaWcvc2ltL3BwYy9kZWJ1Zy5jIGdkYi02LjgtcGwxL3NpbS9wcGMvZGVidWcuYworLS0tIGdkYi02Ljgtb3JpZy9zaW0vcHBjL2RlYnVnLmMJMTk5OS0wNC0xNiAwMzozNTowOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnZGItNi44LXBsMS9zaW0vcHBjL2RlYnVnLmMJMjAwOC0wOS0zMCAxNToxMjoyNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMiw3ICsyMiw5IEBACisgI2lmbmRlZiBfREVCVUdfQ18KKyAjZGVmaW5lIF9ERUJVR19DXworIAorKyNpZmRlZiBIQVZFX0NPTkZJR19ICisgI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorICNpbmNsdWRlICJiYXNpY3MuaCIKKyAKKyAjaWZkZWYgSEFWRV9TVERMSUJfSAorZGlmZiAtdXJOIGdkYi02Ljgtb3JpZy9zaW0vcHBjL2RnZW4uYyBnZGItNi44LXBsMS9zaW0vcHBjL2RnZW4uYworLS0tIGdkYi02Ljgtb3JpZy9zaW0vcHBjL2RnZW4uYwkxOTk5LTA0LTE2IDAzOjM1OjA4LjAwMDAwMDAwMCArMDIwMAorKysrIGdkYi02LjgtcGwxL3NpbS9wcGMvZGdlbi5jCTIwMDgtMDktMzAgMTU6MTI6MjIuMDAwMDAwMDAwICswMjAwCitAQCAtMjcsNyArMjcsOSBAQAorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxzdGRhcmcuaD4KKyAKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorICNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAjaW5jbHVkZSAibWlzYy5oIgorICNpbmNsdWRlICJsZi5oIgorICNpbmNsdWRlICJ0YWJsZS5oIgorZGlmZiAtdXJOIGdkYi02Ljgtb3JpZy9zaW0vcHBjL2ZpbHRlci5jIGdkYi02LjgtcGwxL3NpbS9wcGMvZmlsdGVyLmMKKy0tLSBnZGItNi44LW9yaWcvc2ltL3BwYy9maWx0ZXIuYwkxOTk5LTA0LTE2IDAzOjM1OjA5LjAwMDAwMDAwMCArMDIwMAorKysrIGdkYi02LjgtcGwxL3NpbS9wcGMvZmlsdGVyLmMJMjAwOC0wOS0zMCAxNToxMjoxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMSw3ICsyMSw5IEBACisgCisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgCisgI2lmZGVmIEhBVkVfU1RSSU5HX0gKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CitkaWZmIC11ck4gZ2RiLTYuOC1vcmlnL3NpbS9wcGMvZmlsdGVyX2ZpbGVuYW1lLmMgZ2RiLTYuOC1wbDEvc2ltL3BwYy9maWx0ZXJfZmlsZW5hbWUuYworLS0tIGdkYi02Ljgtb3JpZy9zaW0vcHBjL2ZpbHRlcl9maWxlbmFtZS5jCTE5OTktMDQtMTYgMDM6MzU6MDguMDAwMDAwMDAwICswMjAwCisrKysgZ2RiLTYuOC1wbDEvc2ltL3BwYy9maWx0ZXJfZmlsZW5hbWUuYwkyMDA4LTA5LTMwIDE1OjEyOjExLjAwMDAwMDAwMCArMDIwMAorQEAgLTE4LDcgKzE4LDkgQEAKKyAgCisgICAgICovCisgCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgI2luY2x1ZGUgInBwYy1jb25maWcuaCIKKyAjaW5jbHVkZSAiZmlsdGVyX2ZpbGVuYW1lLmgiCisgCitkaWZmIC11ck4gZ2RiLTYuOC1vcmlnL3NpbS9wcGMvaWdlbi5jIGdkYi02LjgtcGwxL3NpbS9wcGMvaWdlbi5jCistLS0gZ2RiLTYuOC1vcmlnL3NpbS9wcGMvaWdlbi5jCTIwMDMtMDYtMjAgMDU6NTk6MzMuMDAwMDAwMDAwICswMjAwCisrKysgZ2RiLTYuOC1wbDEvc2ltL3BwYy9pZ2VuLmMJMjAwOC0wOS0zMCAxNToxMjowNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNSw3ICsyNSw5IEBACisgI2luY2x1ZGUgIm1pc2MuaCIKKyAjaW5jbHVkZSAibGYuaCIKKyAjaW5jbHVkZSAidGFibGUuaCIKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorICNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSAiZmlsdGVyLmgiCisgCitkaWZmIC11ck4gZ2RiLTYuOC1vcmlnL3NpbS9wcGMvaW5saW5lLmMgZ2RiLTYuOC1wbDEvc2ltL3BwYy9pbmxpbmUuYworLS0tIGdkYi02Ljgtb3JpZy9zaW0vcHBjL2lubGluZS5jCTE5OTktMDQtMTYgMDM6MzU6MTAuMDAwMDAwMDAwICswMjAwCisrKysgZ2RiLTYuOC1wbDEvc2ltL3BwYy9pbmxpbmUuYwkyMDA4LTA5LTMwIDE1OjExOjU4LjAwMDAwMDAwMCArMDIwMAorQEAgLTIyLDcgKzIyLDkgQEAKKyAjaWZuZGVmIF9JTkxJTkVfQ18KKyAjZGVmaW5lIF9JTkxJTkVfQ18KKyAKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorICNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAjaW5jbHVkZSAicHBjLWNvbmZpZy5oIgorIAorICNpbmNsdWRlICJpbmxpbmUuaCIKK2RpZmYgLXVyTiBnZGItNi44LW9yaWcvc2ltL3BwYy9sZi5jIGdkYi02LjgtcGwxL3NpbS9wcGMvbGYuYworLS0tIGdkYi02Ljgtb3JpZy9zaW0vcHBjL2xmLmMJMjAwMi0wNS0zMCAxNzowNzowNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBnZGItNi44LXBsMS9zaW0vcHBjL2xmLmMJMjAwOC0wOS0zMCAxNTozMzozNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMyw3ICsyMyw5IEBACisgI2luY2x1ZGUgPHN0ZGFyZy5oPgorICNpbmNsdWRlIDxjdHlwZS5oPgorIAorKyNpZmRlZiBIQVZFX0NPTkZJR19ICisgI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorICNpbmNsdWRlICJtaXNjLmgiCisgI2luY2x1ZGUgImxmLmgiCisgCitkaWZmIC11ck4gZ2RiLTYuOC1vcmlnL3NpbS9wcGMvbWlzYy5jIGdkYi02LjgtcGwxL3NpbS9wcGMvbWlzYy5jCistLS0gZ2RiLTYuOC1vcmlnL3NpbS9wcGMvbWlzYy5jCTE5OTktMDQtMTYgMDM6MzU6MTEuMDAwMDAwMDAwICswMjAwCisrKysgZ2RiLTYuOC1wbDEvc2ltL3BwYy9taXNjLmMJMjAwOC0wOS0zMCAxNToxMTo1NC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMyw3ICsyMyw5IEBACisgI2luY2x1ZGUgPHN0ZGFyZy5oPgorICNpbmNsdWRlIDxjdHlwZS5oPgorIAorKyNpZmRlZiBIQVZFX0NPTkZJR19ICisgI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorICNpbmNsdWRlICJtaXNjLmgiCisgCisgI2lmZGVmIEhBVkVfU1RETElCX0gKK2RpZmYgLXVyTiBnZGItNi44LW9yaWcvc2ltL3BwYy9taXNjLmggZ2RiLTYuOC1wbDEvc2ltL3BwYy9taXNjLmgKKy0tLSBnZGItNi44LW9yaWcvc2ltL3BwYy9taXNjLmgJMjAwMi0wMS0xMiAxMToyMToxMi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnZGItNi44LXBsMS9zaW0vcHBjL21pc2MuaAkyMDA4LTA5LTMwIDE1OjExOjQ5LjAwMDAwMDAwMCArMDIwMAorQEAgLTIxLDcgKzIxLDkgQEAKKyAKKyAvKiBGcnVzdHJhdGluZyBoZWFkZXIganVuayAqLworIAorKyNpZmRlZiBIQVZFX0NPTkZJR19ICisgI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorIAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxjdHlwZS5oPgorZGlmZiAtdXJOIGdkYi02Ljgtb3JpZy9zaW0vcHBjL3NpbS1lbmRpYW4uYyBnZGItNi44LXBsMS9zaW0vcHBjL3NpbS1lbmRpYW4uYworLS0tIGdkYi02Ljgtb3JpZy9zaW0vcHBjL3NpbS1lbmRpYW4uYwkxOTk5LTA0LTE2IDAzOjM1OjExLjAwMDAwMDAwMCArMDIwMAorKysrIGdkYi02LjgtcGwxL3NpbS9wcGMvc2ltLWVuZGlhbi5jCTIwMDgtMDktMzAgMTU6MTE6NDQuMDAwMDAwMDAwICswMjAwCitAQCAtMjIsNyArMjIsOSBAQAorICNpZm5kZWYgX1NJTV9FTkRJQU5fQ18KKyAjZGVmaW5lIF9TSU1fRU5ESUFOX0NfCisgCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgI2luY2x1ZGUgImJhc2ljcy5oIgorIAorIAorZGlmZiAtdXJOIGdkYi02Ljgtb3JpZy9zaW0vcHBjL3RhYmxlLmMgZ2RiLTYuOC1wbDEvc2ltL3BwYy90YWJsZS5jCistLS0gZ2RiLTYuOC1vcmlnL3NpbS9wcGMvdGFibGUuYwkyMDAyLTAxLTEyIDExOjIxOjEyLjAwMDAwMDAwMCArMDEwMAorKysrIGdkYi02LjgtcGwxL3NpbS9wcGMvdGFibGUuYwkyMDA4LTA5LTMwIDE1OjExOjM4LjAwMDAwMDAwMCArMDIwMAorQEAgLTI1LDcgKzI1LDkgQEAKKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorICNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAjaW5jbHVkZSAibWlzYy5oIgorICNpbmNsdWRlICJsZi5oIgorICNpbmNsdWRlICJ0YWJsZS5oIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dkYi83LjJhLzEwMC1zaW0tcHBjLWx6LWZpeC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nZGIvNy4yYS8xMDAtc2ltLXBwYy1sei1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYwOGVmOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nZGIvNy4yYS8xMDAtc2ltLXBwYy1sei1maXgucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorRml4IGZvciBwc2ltIGJ1aWxkIGZhaWx1cmUgZHVlIHRvIC1segorCitTZWUgaHR0cDovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0xMjIwMgorCistLS0gZ2RiLTcuMi5vcmlnL3NpbS9wcGMvTWFrZWZpbGUuaW4KKysrKyBnZGItNy4yL3NpbS9wcGMvTWFrZWZpbGUuaW4KK0BAIC01NTEsNyArNTUxLDcgQEAKKyBQQUNLQUdFX09CSiA9IEBzaW1fcGtfb2JqQAorCisKKy1wc2ltOiAkKFRBUkdFVExJQikgbWFpbi5vICQoTElCSUJFUlRZX0xJQikgJChCRkRfTElCKSAkKExJQlMpICQoTElCSU5UTF9ERVApCisrcHNpbTogJChUQVJHRVRMSUIpIG1haW4ubyAkKExJQklCRVJUWV9MSUIpICQoQkZEX0xJQikgJChMSUJJTlRMX0RFUCkKKyAJJChDQykgJChDRkxBR1MpICQoU0lNX0NGTEFHUykgJChMREZMQUdTKSAtbyBwc2ltJChFWEVFWFQpIG1haW4ubyAkKFRBUkdFVExJQikgJChCRkRfTElCKSAkKExJQklOVEwpICQoTElCSUJFUlRZX0xJQikgJChMSUJTKQorCisgcnVuOiBwc2ltCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi4xMC4xLzkwMC1tYXJjaC1pNjg2LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuMTAuMS85MDAtbWFyY2gtaTY4Ni5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjFjNjJlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuMTAuMS85MDAtbWFyY2gtaTY4Ni5wYXRjaApAQCAtMCwwICsxLDM0IEBACisyMDA3LTAyLTE1ICBLaGVtIFJhaiAgPGtyYWpAeHh4eHh4eHh4eD4KKworICAgICAgICogc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaDogUmUtZGVmaW5lIF9faTY4Ni4KKyAgICAgICAqIG5wdGwvc3lzZGVwcy9wdGhyZWFkL3B0LWluaXRmaW5pLmM6IERpdHRvLgorCitkaWZmIC11ck4gZ2xpYmMtMi4xMC4xLm9yaWcvbnB0bC9zeXNkZXBzL3B0aHJlYWQvcHQtaW5pdGZpbmkuYyBnbGliYy0yLjEwLjEvbnB0bC9zeXNkZXBzL3B0aHJlYWQvcHQtaW5pdGZpbmkuYworLS0tIGdsaWJjLTIuMTAuMS5vcmlnL25wdGwvc3lzZGVwcy9wdGhyZWFkL3B0LWluaXRmaW5pLmMJMjAwOS0xMi0wOCAyMToxMDoyMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEwLjEvbnB0bC9zeXNkZXBzL3B0aHJlYWQvcHQtaW5pdGZpbmkuYwkyMDEwLTEyLTMwIDExOjMzOjMxLjUyMDg1NTU5NSArMDEwMAorQEAgLTQ1LDYgKzQ1LDExIEBACisgLyogRW1iZWQgYW4gI2luY2x1ZGUgdG8gcHVsbCBpbiB0aGUgYWxpZ25tZW50IGFuZCAuZW5kIGRpcmVjdGl2ZXMuICovCisgYXNtICgiXG4jaW5jbHVkZSBcImRlZnMuaFwiIik7CisgCisrYXNtICgiXG4jaWYgZGVmaW5lZCBfX2k2ODYgJiYgZGVmaW5lZCBfX0FTU0VNQkxFUl9fIik7CisrYXNtICgiXG4jdW5kZWYgX19pNjg2Iik7CisrYXNtICgiXG4jZGVmaW5lIF9faTY4NiBfX2k2ODYiKTsKKythc20gKCJcbiNlbmRpZiIpOworKworIC8qIFRoZSBpbml0aWFsIGNvbW1vbiBjb2RlIGVuZHMgaGVyZS4gKi8KKyBhc20gKCJcbi8qQEhFQURFUl9FTkRTKi8iKTsKKyAKK2RpZmYgLXVyTiBnbGliYy0yLjEwLjEub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L3N5c2RlcC5oIGdsaWJjLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L3N5c2RlcC5oCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaAkyMDA5LTEyLTA4IDIxOjEwOjIwLjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L3N5c2RlcC5oCTIwMTAtMTItMzAgMTE6MzM6MzEuNTIwODU1NTk1ICswMTAwCitAQCAtMjksNiArMjksMTAgQEAKKyAjaW5jbHVkZSA8ZGwtc3lzZGVwLmg+CisgI2luY2x1ZGUgPHRscy5oPgorIAorKyNpZiBkZWZpbmVkIF9faTY4NiAmJiBkZWZpbmVkIF9fQVNTRU1CTEVSX18KKysjdW5kZWYgX19pNjg2CisrI2RlZmluZSBfX2k2ODYgX19pNjg2CisrI2VuZGlmCisgCisgLyogRm9yIExpbnV4IHdlIGNhbiB1c2UgdGhlIHN5c3RlbSBjYWxsIHRhYmxlIGluIHRoZSBoZWFkZXIgZmlsZQorIAkvdXNyL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi4xMC4xLzkxMC10eXBlZGVmLWNhZGRyLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuMTAuMS85MTAtdHlwZWRlZi1jYWRkci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDNiNWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuMTAuMS85MTAtdHlwZWRlZi1jYWRkci5wYXRjaApAQCAtMCwwICsxLDI4IEBACitkaWZmIC11ck4gZ2xpYmMtMi4xMC4xLW9yaWcvcG9zaXgvc3lzL3R5cGVzLmggZ2xpYmMtMi4xMC4xL3Bvc2l4L3N5cy90eXBlcy5oCistLS0gZ2xpYmMtMi4xMC4xLW9yaWcvcG9zaXgvc3lzL3R5cGVzLmgJMjAxMC0xMi0xMyAxMTo0NzoyNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEwLjEvcG9zaXgvc3lzL3R5cGVzLmgJMjAxMS0wMy0yOSAxNDoxNjowMC4zNzQwNjQ3MDggKzAyMDAKK0BAIC0xMTQsNyArMTE0LDEwIEBACisgI2lmZGVmCV9fVVNFX0JTRAorICMgaWZuZGVmIF9fZGFkZHJfdF9kZWZpbmVkCisgdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKKysjICBpZiAhIGRlZmluZWQoY2FkZHJfdCkgJiYgISBkZWZpbmVkKF9fY2FkZHJfdF9kZWZpbmVkKQorIHR5cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CisrIyAgIGRlZmluZSBfX2NhZGRyX3RfZGVmaW5lZAorKyMgIGVuZGlmCisgIyAgZGVmaW5lIF9fZGFkZHJfdF9kZWZpbmVkCisgIyBlbmRpZgorICNlbmRpZgorZGlmZiAtdXJOIGdsaWJjLTIuMTAuMS1vcmlnL3N1bnJwYy9ycGMvdHlwZXMuaCBnbGliYy0yLjEwLjEvc3VucnBjL3JwYy90eXBlcy5oCistLS0gZ2xpYmMtMi4xMC4xLW9yaWcvc3VucnBjL3JwYy90eXBlcy5oCTIwMTAtMTItMTMgMTE6NDc6MjYuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMC4xL3N1bnJwYy9ycGMvdHlwZXMuaAkyMDExLTAzLTI5IDE0OjE2OjMyLjk4ODkxMDQzOSArMDIwMAorQEAgLTgwLDcgKzgwLDEwIEBACisgI2VuZGlmCisgI2lmbmRlZiBfX2RhZGRyX3RfZGVmaW5lZAorIHR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CisrIyBpZiAhIGRlZmluZWQoY2FkZHJfdCkgJiYgISBkZWZpbmVkKF9fY2FkZHJfdF9kZWZpbmVkKQorIHR5cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CisrIyAgZGVmaW5lIF9fY2FkZHJfdF9kZWZpbmVkCisrIyBlbmRpZgorICMgZGVmaW5lIF9fZGFkZHJfdF9kZWZpbmVkCisgI2VuZGlmCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi4xMS4xLzkwMC1tYXJjaC1pNjg2LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuMTEuMS85MDAtbWFyY2gtaTY4Ni5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWVjMjc1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuMTEuMS85MDAtbWFyY2gtaTY4Ni5wYXRjaApAQCAtMCwwICsxLDM0IEBACisyMDA3LTAyLTE1ICBLaGVtIFJhaiAgPGtyYWpAeHh4eHh4eHh4eD4KKworICAgICAgICogc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaDogUmUtZGVmaW5lIF9faTY4Ni4KKyAgICAgICAqIG5wdGwvc3lzZGVwcy9wdGhyZWFkL3B0LWluaXRmaW5pLmM6IERpdHRvLgorCitkaWZmIC11ck4gZ2xpYmMtMi4xMS4xLm9yaWcvbnB0bC9zeXNkZXBzL3B0aHJlYWQvcHQtaW5pdGZpbmkuYyBnbGliYy0yLjExLjEvbnB0bC9zeXNkZXBzL3B0aHJlYWQvcHQtaW5pdGZpbmkuYworLS0tIGdsaWJjLTIuMTEuMS5vcmlnL25wdGwvc3lzZGVwcy9wdGhyZWFkL3B0LWluaXRmaW5pLmMJMjAwOS0xMi0wOCAyMToxMDoyMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjExLjEvbnB0bC9zeXNkZXBzL3B0aHJlYWQvcHQtaW5pdGZpbmkuYwkyMDEwLTEyLTMwIDExOjMzOjMxLjUyMDg1NTU5NSArMDEwMAorQEAgLTQ1LDYgKzQ1LDExIEBACisgLyogRW1iZWQgYW4gI2luY2x1ZGUgdG8gcHVsbCBpbiB0aGUgYWxpZ25tZW50IGFuZCAuZW5kIGRpcmVjdGl2ZXMuICovCisgYXNtICgiXG4jaW5jbHVkZSBcImRlZnMuaFwiIik7CisgCisrYXNtICgiXG4jaWYgZGVmaW5lZCBfX2k2ODYgJiYgZGVmaW5lZCBfX0FTU0VNQkxFUl9fIik7CisrYXNtICgiXG4jdW5kZWYgX19pNjg2Iik7CisrYXNtICgiXG4jZGVmaW5lIF9faTY4NiBfX2k2ODYiKTsKKythc20gKCJcbiNlbmRpZiIpOworKworIC8qIFRoZSBpbml0aWFsIGNvbW1vbiBjb2RlIGVuZHMgaGVyZS4gKi8KKyBhc20gKCJcbi8qQEhFQURFUl9FTkRTKi8iKTsKKyAKK2RpZmYgLXVyTiBnbGliYy0yLjExLjEub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L3N5c2RlcC5oIGdsaWJjLTIuMTEuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L3N5c2RlcC5oCistLS0gZ2xpYmMtMi4xMS4xLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaAkyMDA5LTEyLTA4IDIxOjEwOjIwLjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTEuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L3N5c2RlcC5oCTIwMTAtMTItMzAgMTE6MzM6MzEuNTIwODU1NTk1ICswMTAwCitAQCAtMjksNiArMjksMTAgQEAKKyAjaW5jbHVkZSA8ZGwtc3lzZGVwLmg+CisgI2luY2x1ZGUgPHRscy5oPgorIAorKyNpZiBkZWZpbmVkIF9faTY4NiAmJiBkZWZpbmVkIF9fQVNTRU1CTEVSX18KKysjdW5kZWYgX19pNjg2CisrI2RlZmluZSBfX2k2ODYgX19pNjg2CisrI2VuZGlmCisgCisgLyogRm9yIExpbnV4IHdlIGNhbiB1c2UgdGhlIHN5c3RlbSBjYWxsIHRhYmxlIGluIHRoZSBoZWFkZXIgZmlsZQorIAkvdXNyL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi4xMS4xLzkxMC10eXBlZGVmLWNhZGRyLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuMTEuMS85MTAtdHlwZWRlZi1jYWRkci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2RkYmMzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuMTEuMS85MTAtdHlwZWRlZi1jYWRkci5wYXRjaApAQCAtMCwwICsxLDI4IEBACitkaWZmIC11ck4gZ2xpYmMtMi4xMS4xLW9yaWcvcG9zaXgvc3lzL3R5cGVzLmggZ2xpYmMtMi4xMS4xL3Bvc2l4L3N5cy90eXBlcy5oCistLS0gZ2xpYmMtMi4xMS4xLW9yaWcvcG9zaXgvc3lzL3R5cGVzLmgJMjAxMC0xMi0xMyAxMTo0NzoyNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjExLjEvcG9zaXgvc3lzL3R5cGVzLmgJMjAxMS0wMy0yOSAxNDoxNjowMC4zNzQwNjQ3MDggKzAyMDAKK0BAIC0xMTQsNyArMTE0LDEwIEBACisgI2lmZGVmCV9fVVNFX0JTRAorICMgaWZuZGVmIF9fZGFkZHJfdF9kZWZpbmVkCisgdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKKysjICBpZiAhIGRlZmluZWQoY2FkZHJfdCkgJiYgISBkZWZpbmVkKF9fY2FkZHJfdF9kZWZpbmVkKQorIHR5cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CisrIyAgIGRlZmluZSBfX2NhZGRyX3RfZGVmaW5lZAorKyMgIGVuZGlmCisgIyAgZGVmaW5lIF9fZGFkZHJfdF9kZWZpbmVkCisgIyBlbmRpZgorICNlbmRpZgorZGlmZiAtdXJOIGdsaWJjLTIuMTEuMS1vcmlnL3N1bnJwYy9ycGMvdHlwZXMuaCBnbGliYy0yLjExLjEvc3VucnBjL3JwYy90eXBlcy5oCistLS0gZ2xpYmMtMi4xMS4xLW9yaWcvc3VucnBjL3JwYy90eXBlcy5oCTIwMTAtMTItMTMgMTE6NDc6MjYuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMS4xL3N1bnJwYy9ycGMvdHlwZXMuaAkyMDExLTAzLTI5IDE0OjE2OjMyLjk4ODkxMDQzOSArMDIwMAorQEAgLTgwLDcgKzgwLDEwIEBACisgI2VuZGlmCisgI2lmbmRlZiBfX2RhZGRyX3RfZGVmaW5lZAorIHR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CisrIyBpZiAhIGRlZmluZWQoY2FkZHJfdCkgJiYgISBkZWZpbmVkKF9fY2FkZHJfdF9kZWZpbmVkKQorIHR5cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CisrIyAgZGVmaW5lIF9fY2FkZHJfdF9kZWZpbmVkCisrIyBlbmRpZgorICMgZGVmaW5lIF9fZGFkZHJfdF9kZWZpbmVkCisgI2VuZGlmCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi4xMS85MDAtbWFyY2gtaTY4Ni5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjExLzkwMC1tYXJjaC1pNjg2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YzM0NzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi4xMS85MDAtbWFyY2gtaTY4Ni5wYXRjaApAQCAtMCwwICsxLDM0IEBACisyMDA3LTAyLTE1ICBLaGVtIFJhaiAgPGtyYWpAeHh4eHh4eHh4eD4KKworICAgICAgICogc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaDogUmUtZGVmaW5lIF9faTY4Ni4KKyAgICAgICAqIG5wdGwvc3lzZGVwcy9wdGhyZWFkL3B0LWluaXRmaW5pLmM6IERpdHRvLgorCitkaWZmIC11ck4gZ2xpYmMtMi4xMS5vcmlnL25wdGwvc3lzZGVwcy9wdGhyZWFkL3B0LWluaXRmaW5pLmMgZ2xpYmMtMi4xMS9ucHRsL3N5c2RlcHMvcHRocmVhZC9wdC1pbml0ZmluaS5jCistLS0gZ2xpYmMtMi4xMS5vcmlnL25wdGwvc3lzZGVwcy9wdGhyZWFkL3B0LWluaXRmaW5pLmMJMjAwOS0xMi0wOCAyMToxMDoyMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjExL25wdGwvc3lzZGVwcy9wdGhyZWFkL3B0LWluaXRmaW5pLmMJMjAxMC0xMi0zMCAxMTozMzozMS41MjA4NTU1OTUgKzAxMDAKK0BAIC00NSw2ICs0NSwxMSBAQAorIC8qIEVtYmVkIGFuICNpbmNsdWRlIHRvIHB1bGwgaW4gdGhlIGFsaWdubWVudCBhbmQgLmVuZCBkaXJlY3RpdmVzLiAqLworIGFzbSAoIlxuI2luY2x1ZGUgXCJkZWZzLmhcIiIpOworIAorK2FzbSAoIlxuI2lmIGRlZmluZWQgX19pNjg2ICYmIGRlZmluZWQgX19BU1NFTUJMRVJfXyIpOworK2FzbSAoIlxuI3VuZGVmIF9faTY4NiIpOworK2FzbSAoIlxuI2RlZmluZSBfX2k2ODYgX19pNjg2Iik7CisrYXNtICgiXG4jZW5kaWYiKTsKKysKKyAvKiBUaGUgaW5pdGlhbCBjb21tb24gY29kZSBlbmRzIGhlcmUuICovCisgYXNtICgiXG4vKkBIRUFERVJfRU5EUyovIik7CisgCitkaWZmIC11ck4gZ2xpYmMtMi4xMS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvc3lzZGVwLmggZ2xpYmMtMi4xMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L3N5c2RlcC5oCistLS0gZ2xpYmMtMi4xMS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvc3lzZGVwLmgJMjAwOS0xMi0wOCAyMToxMDoyMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjExL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvc3lzZGVwLmgJMjAxMC0xMi0zMCAxMTozMzozMS41MjA4NTU1OTUgKzAxMDAKK0BAIC0yOSw2ICsyOSwxMCBAQAorICNpbmNsdWRlIDxkbC1zeXNkZXAuaD4KKyAjaW5jbHVkZSA8dGxzLmg+CisgCisrI2lmIGRlZmluZWQgX19pNjg2ICYmIGRlZmluZWQgX19BU1NFTUJMRVJfXworKyN1bmRlZiBfX2k2ODYKKysjZGVmaW5lIF9faTY4NiBfX2k2ODYKKysjZW5kaWYKKyAKKyAvKiBGb3IgTGludXggd2UgY2FuIHVzZSB0aGUgc3lzdGVtIGNhbGwgdGFibGUgaW4gdGhlIGhlYWRlciBmaWxlCisgCS91c3IvaW5jbHVkZS9hc20vdW5pc3RkLmgKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjExLzkxMC10eXBlZGVmLWNhZGRyLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuMTEvOTEwLXR5cGVkZWYtY2FkZHIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI2Y2M2ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjExLzkxMC10eXBlZGVmLWNhZGRyLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK2RpZmYgLXVyTiBnbGliYy0yLjExLW9yaWcvcG9zaXgvc3lzL3R5cGVzLmggZ2xpYmMtMi4xMS9wb3NpeC9zeXMvdHlwZXMuaAorLS0tIGdsaWJjLTIuMTEtb3JpZy9wb3NpeC9zeXMvdHlwZXMuaAkyMDEwLTEyLTEzIDExOjQ3OjI2LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTEvcG9zaXgvc3lzL3R5cGVzLmgJMjAxMS0wMy0yOSAxNDoxNjowMC4zNzQwNjQ3MDggKzAyMDAKK0BAIC0xMTQsNyArMTE0LDEwIEBACisgI2lmZGVmCV9fVVNFX0JTRAorICMgaWZuZGVmIF9fZGFkZHJfdF9kZWZpbmVkCisgdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKKysjICBpZiAhIGRlZmluZWQoY2FkZHJfdCkgJiYgISBkZWZpbmVkKF9fY2FkZHJfdF9kZWZpbmVkKQorIHR5cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CisrIyAgIGRlZmluZSBfX2NhZGRyX3RfZGVmaW5lZAorKyMgIGVuZGlmCisgIyAgZGVmaW5lIF9fZGFkZHJfdF9kZWZpbmVkCisgIyBlbmRpZgorICNlbmRpZgorZGlmZiAtdXJOIGdsaWJjLTIuMTEtb3JpZy9zdW5ycGMvcnBjL3R5cGVzLmggZ2xpYmMtMi4xMS9zdW5ycGMvcnBjL3R5cGVzLmgKKy0tLSBnbGliYy0yLjExLW9yaWcvc3VucnBjL3JwYy90eXBlcy5oCTIwMTAtMTItMTMgMTE6NDc6MjYuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMS9zdW5ycGMvcnBjL3R5cGVzLmgJMjAxMS0wMy0yOSAxNDoxNjozMi45ODg5MTA0MzkgKzAyMDAKK0BAIC04MCw3ICs4MCwxMCBAQAorICNlbmRpZgorICNpZm5kZWYgX19kYWRkcl90X2RlZmluZWQKKyB0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90OworKyMgaWYgISBkZWZpbmVkKGNhZGRyX3QpICYmICEgZGVmaW5lZChfX2NhZGRyX3RfZGVmaW5lZCkKKyB0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OworKyMgIGRlZmluZSBfX2NhZGRyX3RfZGVmaW5lZAorKyMgZW5kaWYKKyAjIGRlZmluZSBfX2RhZGRyX3RfZGVmaW5lZAorICNlbmRpZgorIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuMTIuMS85MDAtbWFyY2gtaTY4Ni5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjEyLjEvOTAwLW1hcmNoLWk2ODYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y1YjFjZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjEyLjEvOTAwLW1hcmNoLWk2ODYucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorMjAwNy0wMi0xNSAgS2hlbSBSYWogIDxrcmFqQHh4eHh4eHh4eHg+CisKKyAgICAgICAqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvc3lzZGVwLmg6IFJlLWRlZmluZSBfX2k2ODYuCisgICAgICAgKiBucHRsL3N5c2RlcHMvcHRocmVhZC9wdC1pbml0ZmluaS5jOiBEaXR0by4KKworZGlmZiAtdXJOIGdsaWJjLTIuMTIuMS5vcmlnL25wdGwvc3lzZGVwcy9wdGhyZWFkL3B0LWluaXRmaW5pLmMgZ2xpYmMtMi4xMi4xL25wdGwvc3lzZGVwcy9wdGhyZWFkL3B0LWluaXRmaW5pLmMKKy0tLSBnbGliYy0yLjEyLjEub3JpZy9ucHRsL3N5c2RlcHMvcHRocmVhZC9wdC1pbml0ZmluaS5jCTIwMDktMTAtMzAgMTg6MTc6MDguMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMi4xL25wdGwvc3lzZGVwcy9wdGhyZWFkL3B0LWluaXRmaW5pLmMJMjAxMC0xMi0zMCAxMTozNjoxOS44NTg3MDg1MzQgKzAxMDAKK0BAIC00NSw2ICs0NSwxMSBAQAorIC8qIEVtYmVkIGFuICNpbmNsdWRlIHRvIHB1bGwgaW4gdGhlIGFsaWdubWVudCBhbmQgLmVuZCBkaXJlY3RpdmVzLiAqLworIGFzbSAoIlxuI2luY2x1ZGUgXCJkZWZzLmhcIiIpOworIAorK2FzbSAoIlxuI2lmIGRlZmluZWQgX19pNjg2ICYmIGRlZmluZWQgX19BU1NFTUJMRVJfXyIpOworK2FzbSAoIlxuI3VuZGVmIF9faTY4NiIpOworK2FzbSAoIlxuI2RlZmluZSBfX2k2ODYgX19pNjg2Iik7CisrYXNtICgiXG4jZW5kaWYiKTsKKysKKyAvKiBUaGUgaW5pdGlhbCBjb21tb24gY29kZSBlbmRzIGhlcmUuICovCisgYXNtICgiXG4vKkBIRUFERVJfRU5EUyovIik7CisgCitkaWZmIC11ck4gZ2xpYmMtMi4xMi4xLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaCBnbGliYy0yLjEyLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaAorLS0tIGdsaWJjLTIuMTIuMS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvc3lzZGVwLmgJMjAwOS0xMC0zMCAxODoxNzowOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEyLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaAkyMDEwLTEyLTMwIDExOjM2OjE5Ljg1ODcwODUzNCArMDEwMAorQEAgLTI5LDYgKzI5LDEwIEBACisgI2luY2x1ZGUgPGRsLXN5c2RlcC5oPgorICNpbmNsdWRlIDx0bHMuaD4KKyAKKysjaWYgZGVmaW5lZCBfX2k2ODYgJiYgZGVmaW5lZCBfX0FTU0VNQkxFUl9fCisrI3VuZGVmIF9faTY4NgorKyNkZWZpbmUgX19pNjg2IF9faTY4NgorKyNlbmRpZgorIAorIC8qIEZvciBMaW51eCB3ZSBjYW4gdXNlIHRoZSBzeXN0ZW0gY2FsbCB0YWJsZSBpbiB0aGUgaGVhZGVyIGZpbGUKKyAJL3Vzci9pbmNsdWRlL2FzbS91bmlzdGQuaApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuMTIuMS85MTAtdHlwZWRlZi1jYWRkci5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjEyLjEvOTEwLXR5cGVkZWYtY2FkZHIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI5ZTgxMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjEyLjEvOTEwLXR5cGVkZWYtY2FkZHIucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorZGlmZiAtdXJOIGdsaWJjLTIuMTIuMS1vcmlnL3Bvc2l4L3N5cy90eXBlcy5oIGdsaWJjLTIuMTIuMS9wb3NpeC9zeXMvdHlwZXMuaAorLS0tIGdsaWJjLTIuMTIuMS1vcmlnL3Bvc2l4L3N5cy90eXBlcy5oCTIwMTAtMTItMTMgMTE6NDc6MjYuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMi4xL3Bvc2l4L3N5cy90eXBlcy5oCTIwMTEtMDMtMjkgMTQ6MTY6MDAuMzc0MDY0NzA4ICswMjAwCitAQCAtMTE0LDcgKzExNCwxMCBAQAorICNpZmRlZglfX1VTRV9CU0QKKyAjIGlmbmRlZiBfX2RhZGRyX3RfZGVmaW5lZAorIHR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CisrIyAgaWYgISBkZWZpbmVkKGNhZGRyX3QpICYmICEgZGVmaW5lZChfX2NhZGRyX3RfZGVmaW5lZCkKKyB0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OworKyMgICBkZWZpbmUgX19jYWRkcl90X2RlZmluZWQKKysjICBlbmRpZgorICMgIGRlZmluZSBfX2RhZGRyX3RfZGVmaW5lZAorICMgZW5kaWYKKyAjZW5kaWYKK2RpZmYgLXVyTiBnbGliYy0yLjEyLjEtb3JpZy9zdW5ycGMvcnBjL3R5cGVzLmggZ2xpYmMtMi4xMi4xL3N1bnJwYy9ycGMvdHlwZXMuaAorLS0tIGdsaWJjLTIuMTIuMS1vcmlnL3N1bnJwYy9ycGMvdHlwZXMuaAkyMDEwLTEyLTEzIDExOjQ3OjI2LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTIuMS9zdW5ycGMvcnBjL3R5cGVzLmgJMjAxMS0wMy0yOSAxNDoxNjozMi45ODg5MTA0MzkgKzAyMDAKK0BAIC04MCw3ICs4MCwxMCBAQAorICNlbmRpZgorICNpZm5kZWYgX19kYWRkcl90X2RlZmluZWQKKyB0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90OworKyMgaWYgISBkZWZpbmVkKGNhZGRyX3QpICYmICEgZGVmaW5lZChfX2NhZGRyX3RfZGVmaW5lZCkKKyB0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OworKyMgIGRlZmluZSBfX2NhZGRyX3RfZGVmaW5lZAorKyMgZW5kaWYKKyAjIGRlZmluZSBfX2RhZGRyX3RfZGVmaW5lZAorICNlbmRpZgorIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuMTIuMS85MjAtbWFrZS0zODIucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi4xMi4xLzkyMC1tYWtlLTM4Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGJlMmZlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuMTIuMS85MjAtbWFrZS0zODIucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAoraHR0cDovL2dpdC5mcnVnYWx3YXJlLm9yZy9naXR3ZWIvZ2l0d2ViLmNnaT9wPWZydWdhbHdhcmUtY3VycmVudC5naXQ7YT1ibG9iX3BsYWluO2Y9c291cmNlL2Jhc2UvZ2xpYmMvbWFrZS0zLjgyLWZpeC5wYXRjaDtoYj04MjE3YzMyZWNjMmUxNDk2Mjg0N2JhM2Q4YTI3MmViNjRhM2RiYTRmCisKKy0tLSBnbGliYy0yLjEwLjEuT0xEL21hbnVhbC9NYWtlZmlsZQorKysrIGdsaWJjLTIuMTAuMS5ORVcvbWFudWFsL01ha2VmaWxlCitAQCAtMjMyLDcgKzIzMiw5IEBACisgLlBIT05ZOiBzdHVicworIHN0dWJzOiAkKG9ianBmeClzdHVicworIGVuZGlmCistJChvYmpwZngpc3R1YnMgLi4vcG8vbWFudWFsLnBvdCAkKG9ianBmeClzdGFtcCU6CisrJChvYmpwZngpc3R1YnMgLi4vcG8vbWFudWFsLnBvdDoKKysJdG91Y2ggJEAKKyskKG9ianBmeClzdGFtcCU6CisgCSQobWFrZS10YXJnZXQtZGlyZWN0b3J5KQorIAl0b3VjaCAkQAorIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuMTIuMi85MDAtbWFyY2gtaTY4Ni5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjEyLjIvOTAwLW1hcmNoLWk2ODYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAzMGRlOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjEyLjIvOTAwLW1hcmNoLWk2ODYucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorMjAwNy0wMi0xNSAgS2hlbSBSYWogIDxrcmFqQHh4eHh4eHh4eHg+CisKKyAgICAgICAqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvc3lzZGVwLmg6IFJlLWRlZmluZSBfX2k2ODYuCisgICAgICAgKiBucHRsL3N5c2RlcHMvcHRocmVhZC9wdC1pbml0ZmluaS5jOiBEaXR0by4KKworZGlmZiAtdXJOIGdsaWJjLTIuMTIuMi5vcmlnL25wdGwvc3lzZGVwcy9wdGhyZWFkL3B0LWluaXRmaW5pLmMgZ2xpYmMtMi4xMi4yL25wdGwvc3lzZGVwcy9wdGhyZWFkL3B0LWluaXRmaW5pLmMKKy0tLSBnbGliYy0yLjEyLjIub3JpZy9ucHRsL3N5c2RlcHMvcHRocmVhZC9wdC1pbml0ZmluaS5jCTIwMDktMTAtMzAgMTg6MTc6MDguMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMi4yL25wdGwvc3lzZGVwcy9wdGhyZWFkL3B0LWluaXRmaW5pLmMJMjAxMC0xMi0zMCAxMTozNjoxOS44NTg3MDg1MzQgKzAxMDAKK0BAIC00NSw2ICs0NSwxMSBAQAorIC8qIEVtYmVkIGFuICNpbmNsdWRlIHRvIHB1bGwgaW4gdGhlIGFsaWdubWVudCBhbmQgLmVuZCBkaXJlY3RpdmVzLiAqLworIGFzbSAoIlxuI2luY2x1ZGUgXCJkZWZzLmhcIiIpOworIAorK2FzbSAoIlxuI2lmIGRlZmluZWQgX19pNjg2ICYmIGRlZmluZWQgX19BU1NFTUJMRVJfXyIpOworK2FzbSAoIlxuI3VuZGVmIF9faTY4NiIpOworK2FzbSAoIlxuI2RlZmluZSBfX2k2ODYgX19pNjg2Iik7CisrYXNtICgiXG4jZW5kaWYiKTsKKysKKyAvKiBUaGUgaW5pdGlhbCBjb21tb24gY29kZSBlbmRzIGhlcmUuICovCisgYXNtICgiXG4vKkBIRUFERVJfRU5EUyovIik7CisgCitkaWZmIC11ck4gZ2xpYmMtMi4xMi4yLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaCBnbGliYy0yLjEyLjIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaAorLS0tIGdsaWJjLTIuMTIuMi5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvc3lzZGVwLmgJMjAwOS0xMC0zMCAxODoxNzowOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEyLjIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaAkyMDEwLTEyLTMwIDExOjM2OjE5Ljg1ODcwODUzNCArMDEwMAorQEAgLTI5LDYgKzI5LDEwIEBACisgI2luY2x1ZGUgPGRsLXN5c2RlcC5oPgorICNpbmNsdWRlIDx0bHMuaD4KKyAKKysjaWYgZGVmaW5lZCBfX2k2ODYgJiYgZGVmaW5lZCBfX0FTU0VNQkxFUl9fCisrI3VuZGVmIF9faTY4NgorKyNkZWZpbmUgX19pNjg2IF9faTY4NgorKyNlbmRpZgorIAorIC8qIEZvciBMaW51eCB3ZSBjYW4gdXNlIHRoZSBzeXN0ZW0gY2FsbCB0YWJsZSBpbiB0aGUgaGVhZGVyIGZpbGUKKyAJL3Vzci9pbmNsdWRlL2FzbS91bmlzdGQuaApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuMTIuMi85MTAtdHlwZWRlZi1jYWRkci5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjEyLjIvOTEwLXR5cGVkZWYtY2FkZHIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJjNzVjYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjEyLjIvOTEwLXR5cGVkZWYtY2FkZHIucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorZGlmZiAtdXJOIGdsaWJjLTIuMTIuMi1vcmlnL3Bvc2l4L3N5cy90eXBlcy5oIGdsaWJjLTIuMTIuMi9wb3NpeC9zeXMvdHlwZXMuaAorLS0tIGdsaWJjLTIuMTIuMi1vcmlnL3Bvc2l4L3N5cy90eXBlcy5oCTIwMTAtMTItMTMgMTE6NDc6MjYuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMi4yL3Bvc2l4L3N5cy90eXBlcy5oCTIwMTEtMDMtMjkgMTQ6MTY6MDAuMzc0MDY0NzA4ICswMjAwCitAQCAtMTE0LDcgKzExNCwxMCBAQAorICNpZmRlZglfX1VTRV9CU0QKKyAjIGlmbmRlZiBfX2RhZGRyX3RfZGVmaW5lZAorIHR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CisrIyAgaWYgISBkZWZpbmVkKGNhZGRyX3QpICYmICEgZGVmaW5lZChfX2NhZGRyX3RfZGVmaW5lZCkKKyB0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OworKyMgICBkZWZpbmUgX19jYWRkcl90X2RlZmluZWQKKysjICBlbmRpZgorICMgIGRlZmluZSBfX2RhZGRyX3RfZGVmaW5lZAorICMgZW5kaWYKKyAjZW5kaWYKK2RpZmYgLXVyTiBnbGliYy0yLjEyLjItb3JpZy9zdW5ycGMvcnBjL3R5cGVzLmggZ2xpYmMtMi4xMi4yL3N1bnJwYy9ycGMvdHlwZXMuaAorLS0tIGdsaWJjLTIuMTIuMi1vcmlnL3N1bnJwYy9ycGMvdHlwZXMuaAkyMDEwLTEyLTEzIDExOjQ3OjI2LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTIuMi9zdW5ycGMvcnBjL3R5cGVzLmgJMjAxMS0wMy0yOSAxNDoxNjozMi45ODg5MTA0MzkgKzAyMDAKK0BAIC04MCw3ICs4MCwxMCBAQAorICNlbmRpZgorICNpZm5kZWYgX19kYWRkcl90X2RlZmluZWQKKyB0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90OworKyMgaWYgISBkZWZpbmVkKGNhZGRyX3QpICYmICEgZGVmaW5lZChfX2NhZGRyX3RfZGVmaW5lZCkKKyB0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OworKyMgIGRlZmluZSBfX2NhZGRyX3RfZGVmaW5lZAorKyMgZW5kaWYKKyAjIGRlZmluZSBfX2RhZGRyX3RfZGVmaW5lZAorICNlbmRpZgorIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuMTMvOTAwLW1hcmNoLWk2ODYucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi4xMy85MDAtbWFyY2gtaTY4Ni5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjViMWNlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuMTMvOTAwLW1hcmNoLWk2ODYucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorMjAwNy0wMi0xNSAgS2hlbSBSYWogIDxrcmFqQHh4eHh4eHh4eHg+CisKKyAgICAgICAqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvc3lzZGVwLmg6IFJlLWRlZmluZSBfX2k2ODYuCisgICAgICAgKiBucHRsL3N5c2RlcHMvcHRocmVhZC9wdC1pbml0ZmluaS5jOiBEaXR0by4KKworZGlmZiAtdXJOIGdsaWJjLTIuMTIuMS5vcmlnL25wdGwvc3lzZGVwcy9wdGhyZWFkL3B0LWluaXRmaW5pLmMgZ2xpYmMtMi4xMi4xL25wdGwvc3lzZGVwcy9wdGhyZWFkL3B0LWluaXRmaW5pLmMKKy0tLSBnbGliYy0yLjEyLjEub3JpZy9ucHRsL3N5c2RlcHMvcHRocmVhZC9wdC1pbml0ZmluaS5jCTIwMDktMTAtMzAgMTg6MTc6MDguMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMi4xL25wdGwvc3lzZGVwcy9wdGhyZWFkL3B0LWluaXRmaW5pLmMJMjAxMC0xMi0zMCAxMTozNjoxOS44NTg3MDg1MzQgKzAxMDAKK0BAIC00NSw2ICs0NSwxMSBAQAorIC8qIEVtYmVkIGFuICNpbmNsdWRlIHRvIHB1bGwgaW4gdGhlIGFsaWdubWVudCBhbmQgLmVuZCBkaXJlY3RpdmVzLiAqLworIGFzbSAoIlxuI2luY2x1ZGUgXCJkZWZzLmhcIiIpOworIAorK2FzbSAoIlxuI2lmIGRlZmluZWQgX19pNjg2ICYmIGRlZmluZWQgX19BU1NFTUJMRVJfXyIpOworK2FzbSAoIlxuI3VuZGVmIF9faTY4NiIpOworK2FzbSAoIlxuI2RlZmluZSBfX2k2ODYgX19pNjg2Iik7CisrYXNtICgiXG4jZW5kaWYiKTsKKysKKyAvKiBUaGUgaW5pdGlhbCBjb21tb24gY29kZSBlbmRzIGhlcmUuICovCisgYXNtICgiXG4vKkBIRUFERVJfRU5EUyovIik7CisgCitkaWZmIC11ck4gZ2xpYmMtMi4xMi4xLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaCBnbGliYy0yLjEyLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaAorLS0tIGdsaWJjLTIuMTIuMS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvc3lzZGVwLmgJMjAwOS0xMC0zMCAxODoxNzowOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEyLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaAkyMDEwLTEyLTMwIDExOjM2OjE5Ljg1ODcwODUzNCArMDEwMAorQEAgLTI5LDYgKzI5LDEwIEBACisgI2luY2x1ZGUgPGRsLXN5c2RlcC5oPgorICNpbmNsdWRlIDx0bHMuaD4KKyAKKysjaWYgZGVmaW5lZCBfX2k2ODYgJiYgZGVmaW5lZCBfX0FTU0VNQkxFUl9fCisrI3VuZGVmIF9faTY4NgorKyNkZWZpbmUgX19pNjg2IF9faTY4NgorKyNlbmRpZgorIAorIC8qIEZvciBMaW51eCB3ZSBjYW4gdXNlIHRoZSBzeXN0ZW0gY2FsbCB0YWJsZSBpbiB0aGUgaGVhZGVyIGZpbGUKKyAJL3Vzci9pbmNsdWRlL2FzbS91bmlzdGQuaApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuMTMvOTEwLXR5cGVkZWYtY2FkZHIucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi4xMy85MTAtdHlwZWRlZi1jYWRkci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjllODEwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuMTMvOTEwLXR5cGVkZWYtY2FkZHIucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorZGlmZiAtdXJOIGdsaWJjLTIuMTIuMS1vcmlnL3Bvc2l4L3N5cy90eXBlcy5oIGdsaWJjLTIuMTIuMS9wb3NpeC9zeXMvdHlwZXMuaAorLS0tIGdsaWJjLTIuMTIuMS1vcmlnL3Bvc2l4L3N5cy90eXBlcy5oCTIwMTAtMTItMTMgMTE6NDc6MjYuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMi4xL3Bvc2l4L3N5cy90eXBlcy5oCTIwMTEtMDMtMjkgMTQ6MTY6MDAuMzc0MDY0NzA4ICswMjAwCitAQCAtMTE0LDcgKzExNCwxMCBAQAorICNpZmRlZglfX1VTRV9CU0QKKyAjIGlmbmRlZiBfX2RhZGRyX3RfZGVmaW5lZAorIHR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CisrIyAgaWYgISBkZWZpbmVkKGNhZGRyX3QpICYmICEgZGVmaW5lZChfX2NhZGRyX3RfZGVmaW5lZCkKKyB0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OworKyMgICBkZWZpbmUgX19jYWRkcl90X2RlZmluZWQKKysjICBlbmRpZgorICMgIGRlZmluZSBfX2RhZGRyX3RfZGVmaW5lZAorICMgZW5kaWYKKyAjZW5kaWYKK2RpZmYgLXVyTiBnbGliYy0yLjEyLjEtb3JpZy9zdW5ycGMvcnBjL3R5cGVzLmggZ2xpYmMtMi4xMi4xL3N1bnJwYy9ycGMvdHlwZXMuaAorLS0tIGdsaWJjLTIuMTIuMS1vcmlnL3N1bnJwYy9ycGMvdHlwZXMuaAkyMDEwLTEyLTEzIDExOjQ3OjI2LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTIuMS9zdW5ycGMvcnBjL3R5cGVzLmgJMjAxMS0wMy0yOSAxNDoxNjozMi45ODg5MTA0MzkgKzAyMDAKK0BAIC04MCw3ICs4MCwxMCBAQAorICNlbmRpZgorICNpZm5kZWYgX19kYWRkcl90X2RlZmluZWQKKyB0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90OworKyMgaWYgISBkZWZpbmVkKGNhZGRyX3QpICYmICEgZGVmaW5lZChfX2NhZGRyX3RfZGVmaW5lZCkKKyB0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OworKyMgIGRlZmluZSBfX2NhZGRyX3RfZGVmaW5lZAorKyMgZW5kaWYKKyAjIGRlZmluZSBfX2RhZGRyX3RfZGVmaW5lZAorICNlbmRpZgorIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNS4xLzEwMC1jeWd3aW4ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi41LjEvMTAwLWN5Z3dpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzBjZDdkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNS4xLzEwMC1jeWd3aW4ucGF0Y2gKQEAgLTAsMCArMSwxODcgQEAKK0ZpeGVzCitlbGYvbGlicnRsZC5vczogSW4gZnVuY3Rpb24gYHByb2Nlc3NfZW52dmFycyc6IDogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19hY2Nlc3MnCisuLi4KK3doZW4gYnVpbGRpbmcgZ2xpYmMtMi4zLnggb24gY3lnd2luCisKK0lkZWEgZnJvbQoraHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9tbC9idWctZ2xpYmMvMjAwMi0wMS9tc2cwMDA3MS9nbGliYy0yLjItY3lnaW4tc2hhcmVkLnBhdGNoCitCYXNpY2FsbHksIG1ha2UgZ2xpYmMgdXNlIC5vU1QgYXMgc3VmZml4IGZvciAnb2JqZWN0IHN0YXRpYycKK2luc3RlYWQgb2YgLm9TLCBzaW5jZSBjeWd3aW4gaGFzIHRyb3VibGUgZGlzdGluZ3Vpc2hpbmcgLm9zIGZyb20gLm9TCisoT3JpZ2luYWwgcGF0Y2ggaGFkIC5vbiwgYnV0IC5vU1QgaXMgbW9yZSBtbmVtb25pYyBmb3IgJ29iamVjdCBzdGF0aWMnKQorCitnbGliYy1saW51eHRocmVhZHMtMi4zLjUgYWxzbyByZXF1aXJlcyBhIHBhdGNoLCBzZWUgCisuLi9nbGliYy1saW51eHRocmVhZHMtMi4zLjUvZ2xpYmMtbGludXh0aHJlYWRzLTIuMy41LWN5Z3dpbi5wYXRjaAorCitbIGZvcndhcmQgcG9ydGVkIHRvIGdsaWJjLTIuMy41IGJ5IFBldHIgQ3ZhY2hvdWNlazoKKworTWVzc2FnZS1JRDogPDQyODJGQ0JBLjMwNDAwMDBAdW5pY29udHJvbHMuY3o+CitEYXRlOiBUaHUsIDEyIE1heSAyMDA1IDA4OjUwOjM0ICswMjAwCitGcm9tOiBQZXRyIEN2YWNob3VjZWsgPGN2YWNob3VjZWtAdW5pY29udHJvbHMuY3o+CitUbzogRGFuIEtlZ2VsIDxkYW5rQGtlZ2VsLmNvbT4KK0NDOiAgY3Jvc3NnY2NAc291cmNlcy5yZWRoYXQuY29tCitTdWJqZWN0OiBQYXRjaGVzIHRvIGJ1aWxkIGdjYyAzLjQuMyAvIGdsaWJjIDIuMy41IG9uIGN5Z3dpbgorCitIaSBEYW4sCitmb2xsb3dpbmcgcGF0Y2hlcyBhcmUgbmVlZGVkIHRvIGJ1aWxkIGdjYy0zLjQuMy9nbGliYy0yLjMuNSB0b29sY2hhaW4KK29uIGN5Z3dpbi4gVGVzdGVkIHRvIGJ1aWxkIHRvb2xjaGFpbnMgZm9yIHBvd2VycGMgNjA0IGFuZCA3NTAgdGFyZ2V0cy4KKworLS0gCisgICAgICAgICAgICAgICAgICAgICBQZXRyIEN2YWNob3VjZWsKKyAgICAgICAgICAgICAgICAgICAgIFVuaWNvbnRyb2xzIGEucy4KKyAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudW5pY29udHJvbHMuY3oKK10KKworZGlmZiAtYXVyIGdsaWJjLTIuMy41L01ha2Vjb25maWcgZ2xpYmMtMi4zLjUtY3lnd2luL01ha2Vjb25maWcKKy0tLSBnbGliYy0yLjMuNS9NYWtlY29uZmlnCTIwMDUtMDItMTYgMTE6NTA6MTkuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4zLjUtY3lnd2luL01ha2Vjb25maWcJMjAwNS0wNS0xMSAwODoyNDo1MS4wNDY4NzUwMDAgKzAyMDAKK0BAIC00NzIsNyArNDcyLDcgQEAKKyAjIHJ1biB0aGUgbGlua2VkIHByb2dyYW1zLgorIGxpbmstbGliYyA9IC1XbCwtcnBhdGgtbGluaz0kKHJwYXRoLWxpbmspIFwKKyAJICAgICQoY29tbW9uLW9ianBmeClsaWJjLnNvJChsaWJjLnNvLXZlcnNpb24pIFwKKy0JICAgICQoY29tbW9uLW9ianBmeCkkKHBhdHN1YnN0ICUsJChsaWJ0eXBlLm9TKSxjKSAkKGdudWxpYikKKysJICAgICQoY29tbW9uLW9ianBmeCkkKHBhdHN1YnN0ICUsJChsaWJ0eXBlLm9TVCksYykgJChnbnVsaWIpCisgIyBUaGlzIGlzIGhvdyB0byBmaW5kIGF0IGJ1aWxkLXRpbWUgdGhpbmdzIHRoYXQgd2lsbCBiZSBpbnN0YWxsZWQgdGhlcmUuCisgcnBhdGgtZGlycyA9IG1hdGggZWxmIGRsZmNuIG5zcyBuaXMgcnQgcmVzb2x2IGNyeXB0CisgZW5kaWYKK0BAIC02OTMsNyArNjkzLDcgQEAKKyAjIFRoZSBjb21waWxhdGlvbiBydWxlcyB1c2UgJChDUFBGTEFHUy0ke1NVRkZJWH0pIGFuZCAkKENGTEFHUy0ke1NVRkZJWH0pCisgIyB0byBwYXNzIGRpZmZlcmVudCBmbGFncyBmb3IgZWFjaCBmbGF2b3IuCisgbGlidHlwZXMgPSAkKGZvcmVhY2ggbywkKG9iamVjdC1zdWZmaXhlcy1mb3ItbGliYyksJChsaWJ0eXBlJG8pKQorLWFsbC1vYmplY3Qtc3VmZml4ZXMgOj0gLm8gLm9zIC5vcCAub2cgLm9iIC5vUworK2FsbC1vYmplY3Qtc3VmZml4ZXMgOj0gLm8gLm9zIC5vcCAub2cgLm9iIC5vU1QKKyBvYmplY3Qtc3VmZml4ZXMgOj0KKyBDUFBGTEFHUy0ubyA9ICQocGljLWRlZmF1bHQpCisgQ0ZMQUdTLS5vID0gJChmaWx0ZXIgJWZyYW1lLXBvaW50ZXIsJCgrY2ZsYWdzKSkKK0BAIC03NDksMTQgKzc0OSwxNCBAQAorIAorIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgIyBCdWlsZCBzcGVjaWFsIGxpYnJhcnkgdGhhdCBjb250YWlucyB0aGUgc3RhdGljLW9ubHkgcm91dGluZXMgZm9yIGxpYmMuCistb2JqZWN0LXN1ZmZpeGVzLWZvci1saWJjICs9IC5vUworK29iamVjdC1zdWZmaXhlcy1mb3ItbGliYyArPSAub1NUCisgCisgIyBNdXN0IGJ1aWxkIHRoZSByb3V0aW5lcyBhcyBQSUMsIHRob3VnaCwgYmVjYXVzZSB0aGV5IGNhbiBlbmQgdXAgaW4gKHVzZXJzJykKKyAjIHNoYXJlZCBvYmplY3RzLiAgV2UgZG9uJ3Qgd2FudCB0byB1c2UgQ0ZMQUdTLW9zIGJlY2F1c2UgdXNlcnMgbWF5LCBmb3IKKyAjIGV4YW1wbGUsIG1ha2UgdGhhdCBwcm9jZXNzb3Itc3BlY2lmaWMuCistQ0ZMQUdTLS5vUyA9ICQoQ0ZMQUdTLS5vKSAkKFBJQy1jY2ZsYWcpCistQ1BQRkxBR1MtLm9TID0gJChDUFBGTEFHUy0ubykgLURQSUMgLURMSUJDX05PTlNIQVJFRD0xCistbGlidHlwZS5vUyA9IGxpYiVfbm9uc2hhcmVkLmEKKytDRkxBR1MtLm9TVCA9ICQoQ0ZMQUdTLS5vKSAkKFBJQy1jY2ZsYWcpCisrQ1BQRkxBR1MtLm9TVCA9ICQoQ1BQRkxBR1MtLm8pIC1EUElDIC1ETElCQ19OT05TSEFSRUQ9MQorK2xpYnR5cGUub1NUID0gbGliJV9ub25zaGFyZWQuYQorIGVuZGlmCisgCisgIyBUaGUgYXNzZW1ibGVyIGNhbiBnZW5lcmF0ZSBkZWJ1ZyBpbmZvcm1hdGlvbiB0b28uCitkaWZmIC1hdXIgZ2xpYmMtMi4zLjUvTWFrZXJ1bGVzIGdsaWJjLTIuMy41LWN5Z3dpbi9NYWtlcnVsZXMKKy0tLSBnbGliYy0yLjMuNS9NYWtlcnVsZXMJMjAwNC0xMi0xNSAxOTo1MjozOS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjMuNS1jeWd3aW4vTWFrZXJ1bGVzCTIwMDUtMDUtMTEgMDg6MjU6MzMuNTc4MTI1MDAwICswMjAwCitAQCAtNDE3LDcgKzQxNyw3IEBACisgIyBCb3VuZGVkIHBvaW50ZXIgdGh1bmtzIGFyZSBvbmx5IGJ1aWx0IGZvciAqLm9iCisgZWxpZGUtYnAtdGh1bmtzID0gJChhZGRwcmVmaXggJChicHBmeCksJChicC10aHVua3MpKQorIAorLWVsaWRlLXJvdXRpbmVzLm9TICs9ICQoZmlsdGVyLW91dCAkKHN0YXRpYy1vbmx5LXJvdXRpbmVzKSxcCisrZWxpZGUtcm91dGluZXMub1NUICs9ICQoZmlsdGVyLW91dCAkKHN0YXRpYy1vbmx5LXJvdXRpbmVzKSxcCisgCQkJCSAgJChyb3V0aW5lcykgJChhdXgpICQoc3lzZGVwX3JvdXRpbmVzKSkgXAorIAkJICAgICAkKGVsaWRlLWJwLXRodW5rcykKKyBlbGlkZS1yb3V0aW5lcy5vcyArPSAkKHN0YXRpYy1vbmx5LXJvdXRpbmVzKSAkKGVsaWRlLWJwLXRodW5rcykKK0BAIC05ODEsNyArOTgxLDcgQEAKKyBpbnN0YWxsOiAkKGluc3RfbGliZGlyKS9saWJjLnNvCisgJChpbnN0X2xpYmRpcikvbGliYy5zbzogJChjb21tb24tb2JqcGZ4KWZvcm1hdC5sZHMgXAorIAkJCSQoY29tbW9uLW9ianBmeClsaWJjLnNvJChsaWJjLnNvLXZlcnNpb24pIFwKKy0JCQkkKGluc3RfbGliZGlyKS8kKHBhdHN1YnN0ICUsJChsaWJ0eXBlLm9TKSxcCisrCQkJJChpbnN0X2xpYmRpcikvJChwYXRzdWJzdCAlLCQobGlidHlwZS5vU1QpLFwKKyAJCQkJCQkgICQobGlicHJlZml4KSQobGliYy1uYW1lKSkgXAorIAkJCSQoK2ZvcmNlKQorIAkoZWNobyAnLyogR05VIGxkIHNjcmlwdCc7XAorQEAgLTk4OSw3ICs5ODksNyBAQAorIAkgZWNobyAnICAgdGhlIHN0YXRpYyBsaWJyYXJ5LCBzbyB0cnkgdGhhdCBzZWNvbmRhcmlseS4gICovJztcCisgCSBjYXQgJDw7IFwKKyAJIGVjaG8gJ0dST1VQICggJChzbGliZGlyKS9saWJjLnNvJChsaWJjLnNvLXZlcnNpb24pJyBcCistCSAgICAgICckKGxpYmRpcikvJChwYXRzdWJzdCAlLCQobGlidHlwZS5vUyksJChsaWJwcmVmaXgpJChsaWJjLW5hbWUpKSdcCisrCSAgICAgICckKGxpYmRpcikvJChwYXRzdWJzdCAlLCQobGlidHlwZS5vU1QpLCQobGlicHJlZml4KSQobGliYy1uYW1lKSknXAorCSAgICAgICcgQVNfTkVFREVEICgnICQoc2xpYmRpcikvJChydGxkLWluc3RhbGxlZC1uYW1lKSAnKSApJyBcCisgCSkgPiAkQC5uZXcKKwltdiAtZiAkQC5uZXcgJEAKK2RpZmYgLWF1ciBnbGliYy0yLjMuNS9leHRyYS1saWIubWsgZ2xpYmMtMi4zLjUtY3lnd2luL2V4dHJhLWxpYi5taworLS0tIGdsaWJjLTIuMy41L2V4dHJhLWxpYi5tawkyMDA0LTEyLTAyIDIzOjU0OjQ3LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMy41LWN5Z3dpbi9leHRyYS1saWIubWsJMjAwNS0wNS0xMSAwODoyNzoyOC4xNTYyNTAwMDAgKzAyMDAKK0BAIC0xMyw3ICsxMyw3IEBACisgCisgaWZuZXEgKCwkKCQobGliKS1zdGF0aWMtb25seS1yb3V0aW5lcykpCisgaWZuZXEgKCwkKGZpbHRlciB5ZXN5ZXMlLCQoYnVpbGQtc2hhcmVkKSQoZWxmKSQoJChsaWIpLnNvLXZlcnNpb24pKSkKKy1vYmplY3Qtc3VmZml4ZXMtJChsaWIpICs9ICQoZmlsdGVyLW91dCAkKCQobGliKS1pbmhpYml0LW8pLC5vUykKKytvYmplY3Qtc3VmZml4ZXMtJChsaWIpICs9ICQoZmlsdGVyLW91dCAkKCQobGliKS1pbmhpYml0LW8pLC5vU1QpCisgZW5kaWYKKyBlbmRpZgorIAorQEAgLTI5LDcgKzI5LDcgQEAKKyAKKyAjIEFkZCBlYWNoIGZsYXZvciBvZiBsaWJyYXJ5IHRvIHRoZSBsaXN0cyBvZiB0aGluZ3MgdG8gYnVpbGQgYW5kIGluc3RhbGwuCisgaW5zdGFsbC1saWIgKz0gJChmb3JlYWNoIG8sJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSwkKGxpYjpsaWIlPSQobGlidHlwZSRvKSkpCistZXh0cmEtb2JqcyArPSAkKGZvcmVhY2ggbywkKGZpbHRlci1vdXQgLm9zIC5vUywkKG9iamVjdC1zdWZmaXhlcy0kKGxpYikpKSxcCisrZXh0cmEtb2JqcyArPSAkKGZvcmVhY2ggbywkKGZpbHRlci1vdXQgLm9zIC5vU1QsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSksXAorIAkJCSQocGF0c3Vic3QgJSwlJG8sJChmaWx0ZXItb3V0IFwKKyAJCQkJCSAgICQoJChsaWIpLXNoYXJlZC1vbmx5LXJvdXRpbmVzKSxcCisgCQkJCQkgICAkKGFsbC0kKGxpYiktcm91dGluZXMpKSkpCitAQCAtNTcsNyArNTcsNyBAQAorIAorIAorICMgVXNlIG8taXRlcmF0b3IubWsgdG8gZ2VuZXJhdGUgYSBydWxlIGZvciBlYWNoIGZsYXZvciBvZiBsaWJyYXJ5LgorLWlmbmVxICgsJChmaWx0ZXItb3V0IC5vcyAub1MsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSkpCisraWZuZXEgKCwkKGZpbHRlci1vdXQgLm9zIC5vU1QsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSkpCisgZGVmaW5lIG8taXRlcmF0b3ItZG9pdAorICQob2JqcGZ4KSQocGF0c3Vic3QgJSwkKGxpYnR5cGUkbyksJChsaWI6bGliJT0lKSk6IFwKKyAgICQocGF0c3Vic3QgJSwkKG9ianBmeCklJG8sXAorQEAgLTY1LDcgKzY1LDcgQEAKKyAJCQkgICQoYWxsLSQobGliKS1yb3V0aW5lcykpKTsgXAorIAkkJChidWlsZC1leHRyYS1saWIpCisgZW5kZWYKKy1vYmplY3Qtc3VmZml4ZXMtbGVmdCA9ICQoZmlsdGVyLW91dCAub3MgLm9TLCQob2JqZWN0LXN1ZmZpeGVzLSQobGliKSkpCisrb2JqZWN0LXN1ZmZpeGVzLWxlZnQgPSAkKGZpbHRlci1vdXQgLm9zIC5vU1QsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSkKKyBpbmNsdWRlICQocGF0c3Vic3QgJSwkKC4uKW8taXRlcmF0b3IubWssJChvYmplY3Qtc3VmZml4ZXMtbGVmdCkpCisgZW5kaWYKKyAKK0BAIC03Nyw5ICs3Nyw5IEBACisgCSQoYnVpbGQtZXh0cmEtbGliKQorIGVuZGlmCisgCistaWZuZXEgKCwkKGZpbHRlciAub1MsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSkpCistJChvYmpwZngpJChwYXRzdWJzdCAlLCQobGlidHlwZS5vUyksJChsaWI6bGliJT0lKSk6IFwKKy0gICQocGF0c3Vic3QgJSwkKG9ianBmeCklLm9TLFwKKytpZm5lcSAoLCQoZmlsdGVyIC5vU1QsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSkpCisrJChvYmpwZngpJChwYXRzdWJzdCAlLCQobGlidHlwZS5vU1QpLCQobGliOmxpYiU9JSkpOiBcCisrICAkKHBhdHN1YnN0ICUsJChvYmpwZngpJS5vU1QsXAorIAkgICAgICQoZmlsdGVyICQoJChsaWIpLXN0YXRpYy1vbmx5LXJvdXRpbmVzKSxcCisgCQkgICAgICAkKGFsbC0kKGxpYiktcm91dGluZXMpKSkKKyAJJChidWlsZC1leHRyYS1saWIpCitkaWZmIC1hdXIgZ2xpYmMtMi4zLjUvbnB0bC9NYWtlZmlsZSBnbGliYy0yLjMuNS1jeWd3aW4vbnB0bC9NYWtlZmlsZQorLS0tIGdsaWJjLTIuMy41L25wdGwvTWFrZWZpbGUJMjAwNS0wMi0xNiAwOTo0NTo1Ni4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjMuNS1jeWd3aW4vbnB0bC9NYWtlZmlsZQkyMDA1LTA1LTExIDA4OjI2OjAxLjgxMjUwMDAwMCArMDIwMAorQEAgLTM3NSw3ICszNzUsNyBAQAorIAorICQoaW5zdF9saWJkaXIpL2xpYnB0aHJlYWQuc286ICQoY29tbW9uLW9ianBmeClmb3JtYXQubGRzIFwKKyAJCQkgICAgICAkKG9ianBmeClsaWJwdGhyZWFkLnNvJChsaWJwdGhyZWFkLnNvLXZlcnNpb24pIFwKKy0JCQkgICAgICAkKGluc3RfbGliZGlyKS8kKHBhdHN1YnN0ICUsJChsaWJ0eXBlLm9TKSxcCisrCQkJICAgICAgJChpbnN0X2xpYmRpcikvJChwYXRzdWJzdCAlLCQobGlidHlwZS5vU1QpLFwKKyAJCQkJCQkJJChsaWJwcmVmaXgpcHRocmVhZCkgXAorIAkJCSAgICAgICQoK2ZvcmNlKQorIAkoZWNobyAnLyogR05VIGxkIHNjcmlwdCc7XAorQEAgLTM4Myw3ICszODMsNyBAQAorIAkgZWNobyAnICAgdGhlIHN0YXRpYyBsaWJyYXJ5LCBzbyB0cnkgdGhhdCBzZWNvbmRhcmlseS4gICovJztcCisgCSBjYXQgJDw7IFwKKyAJIGVjaG8gJ0dST1VQICggJChzbGliZGlyKS9saWJwdGhyZWFkLnNvJChsaWJwdGhyZWFkLnNvLXZlcnNpb24pJyBcCistCSAgICAgICckKGxpYmRpcikvJChwYXRzdWJzdCAlLCQobGlidHlwZS5vUyksJChsaWJwcmVmaXgpcHRocmVhZCknXAorKwkgICAgICAnJChsaWJkaXIpLyQocGF0c3Vic3QgJSwkKGxpYnR5cGUub1NUKSwkKGxpYnByZWZpeClwdGhyZWFkKSdcCisgCSAgICAgICcpJyBcCisgCSkgPiAkQC5uZXcKKyAJbXYgLWYgJEAubmV3ICRACitkaWZmIC1hdXIgZ2xpYmMtMi4zLjUvc3lzZGVwcy9zcGFyYy9zcGFyYzMyL3NwYXJjdjkvTWFrZWZpbGUgZ2xpYmMtMi4zLjUtY3lnd2luL3N5c2RlcHMvc3BhcmMvc3BhcmMzMi9zcGFyY3Y5L01ha2VmaWxlCistLS0gZ2xpYmMtMi4zLjUvc3lzZGVwcy9zcGFyYy9zcGFyYzMyL3NwYXJjdjkvTWFrZWZpbGUJMjAwNC0wOC0xNiAwODo0NjoxNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjMuNS1jeWd3aW4vc3lzZGVwcy9zcGFyYy9zcGFyYzMyL3NwYXJjdjkvTWFrZWZpbGUJMjAwNS0wNS0xMSAwODoyNjoyNS45Mzc1MDAwMDAgKzAyMDAKK0BAIC0xMCw0ICsxMCw0IEBACisgQVNGTEFHUy0ub3AgKz0gLVdhLC1BdjlhCisgQVNGTEFHUy0ub2cgKz0gLVdhLC1BdjlhCisgQVNGTEFHUy0ub2IgKz0gLVdhLC1BdjlhCistQVNGTEFHUy0ub1MgKz0gLVdhLC1BdjlhCisrQVNGTEFHUy0ub1NUICs9IC1XYSwtQXY5YQorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgUC4gSi4gRGF5IDxycGpkYXlAbWluZHNwcmluZy5jb20+CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi41LjEvMTEwLWNvbmZpZ3VyZS1hcHBsZS1hcy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjUuMS8xMTAtY29uZmlndXJlLWFwcGxlLWFzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YTEzMjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi41LjEvMTEwLWNvbmZpZ3VyZS1hcHBsZS1hcy5wYXRjaApAQCAtMCwwICsxLDI1IEBACitodHRwOi8vaW4zd3d3LmVwZmwuY2gvfnNjaGFmZm5lL2dsaWJjLWNvbmZpZ3VyZS1hcHBsZS1hcy5wYXRjaAoraHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9tbC9jcm9zc2djYy8yMDA0LTAyL21zZzAwMTUxLmh0bWwKKworVGhlIGZvbGxvd2luZyBtYWtlcyBpdCBwb3NzaWJsZSB0byBjb25maWd1cmUgZ2xpYmMtMi4zLjIgb24gTWFjIE9TIFgsCit3aGVyZSB0aGUgYXNzZW1ibGVyIGJ1dCBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlIC0tdmVyc2lvbiBmbGFnLgorCitGaXhlcyB0aGUgc3ltcHRvbQorY2hlY2tpbmcgd2hldGhlciBsZCBpcyBHTlUgbGQuLi4gbm8KK2NoZWNraW5nIGZvciAvdXNyL2xpYmV4ZWMvZ2NjL2Rhcndpbi9wcGMvYXMuLi4gL3Vzci9saWJleGVjL2djYy9kYXJ3aW4vcHBjL2FzCitjaGVja2luZyB2ZXJzaW9uIG9mIC91c3IvbGliZXhlYy9nY2MvZGFyd2luL3BwYy9hcy4uLiAKKzxQQVVTRVMgSEVSRSBBTkQgSlVTVCBTSVRTIFRIRVJFIERPSU5HIE5PVEhJTkc+CisKKy0tLSBnbGliYy0yLjMuMi9jb25maWd1cmV+CVdlZCBGZWIgMjYgMDk6MjA6NDggMjAwMworKysrIGdsaWJjLTIuMy4yL2NvbmZpZ3VyZQlGcmkgRmViIDI3IDEzOjEyOjUzIDIwMDQKK0BAIC00MDM5LDcgKzQwMzksNyBAQAorICAgIyBGb3VuZCBpdCwgbm93IGNoZWNrIHRoZSB2ZXJzaW9uLgorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHZlcnNpb24gb2YgJEFTIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nIHZlcnNpb24gb2YgJEFTLi4uICRFQ0hPX0MiID4mNgorLSAgYWNfcHJvZ192ZXJzaW9uPWAkQVMgLS12ZXJzaW9uIDI+JjEgfCBzZWQgLW4gJ3MvXi4qR05VIGFzc2VtYmxlci4qIFwoWzAtOV0qXC5bMC05Ll0qXCkuKiQvXDEvcCdgCisrICBhY19wcm9nX3ZlcnNpb249YCRBUyAtdiA8L2Rldi9udWxsIDI+JjEgfCBzZWQgLW4gJ3MvXi4qR05VIGFzc2VtYmxlci4qIFwoWzAtOV0qXC5bMC05Ll0qXCkuKiQvXDEvcCdgCisgICBjYXNlICRhY19wcm9nX3ZlcnNpb24gaW4KKyAgICAgJycpIGFjX3Byb2dfdmVyc2lvbj0idi4gPy4/PywgYmFkIjsgYWNfdmVyY19mYWlsPXllczs7CisgICAgIDIuMVszLTldKikKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFAuIEouIERheSA8cnBqZGF5QG1pbmRzcHJpbmcuY29tPgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNS4xLzEyMC1maXgtcHI2MzEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi41LjEvMTIwLWZpeC1wcjYzMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzY4OGRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNS4xLzEyMC1maXgtcHI2MzEucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorRnJvbSBkYW5rQGtlZ2VsLmNvbQorV2VkIEp1biAxNSAwOToxMjo0MyBQRFQgMjAwNQorCitGaXhlcworCitidWlsZC1nbGliYy9saWJjLmEobnNzd2l0Y2gubykoLmRhdGErMHg2NCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9uc3NfZmlsZXNfZ2V0YWxpYXNlbnRfcicKK2J1aWxkLWdsaWJjL2xpYmMuYShuc3N3aXRjaC5vKSguZGF0YSsweDZjKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX25zc19maWxlc19lbmRhbGlhc2VudCcKKy4uLiA1MyBsaW5lcyBkZWxldGVkIC4uLgorYnVpbGQtZ2xpYmMvbGliYy5hKG5zc3dpdGNoLm8pKC5kYXRhKzB4MjFjKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX25zc19maWxlc19nZXRzcG5hbV9yJworY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKK21ha2VbMl06ICoqKiBbL2J1aWxkL2djYy0zLjQuMy1nbGliYy0yLjMuNS1oZHJzLTIuNi4xMS4yL2k2ODYtdW5rbm93bi1saW51eC1nbnUvYnVpbGQtZ2xpYmMvZWxmL2xkY29uZmlnXSBFcnJvciAxCisKK3doZW4gYnVpbGRpbmcgZ2xpYmMgd2l0aCAtLWVuYWJsZS1zdGF0aWMtbnNzLgorCitTZWUgaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NjMxCisKKy0tLSBnbGliYy0yLjMuNS9NYWtlY29uZmlnLm9sZAlXZWQgSnVuIDE1IDA4OjEzOjEyIDIwMDUKKysrKyBnbGliYy0yLjMuNS9NYWtlY29uZmlnCVdlZCBKdW4gMTUgMDg6MTM6MTQgMjAwNQorQEAgLTUxMCw3ICs1MTAsNyBAQAorIAorICMgVGhlIHN0YXRpYyBsaWJyYXJpZXMuCisgaWZlcSAoeWVzLCQoYnVpbGQtc3RhdGljKSkKKy1saW5rLWxpYmMtc3RhdGljID0gJChjb21tb24tb2JqcGZ4KWxpYmMuYSAkKHN0YXRpYy1nbnVsaWIpICQoY29tbW9uLW9ianBmeClsaWJjLmEKKytsaW5rLWxpYmMtc3RhdGljID0gJChjb21tb24tb2JqcGZ4KWxpYmMuYSAkKHN0YXRpYy1nbnVsaWIpICQob3RoZXJsaWJzKSAkKGNvbW1vbi1vYmpwZngpbGliYy5hCisgZWxzZQorIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgIyBXZSBjYW4gdHJ5IHRvIGxpbmsgdGhlIHByb2dyYW1zIHdpdGggbGliKl9waWMuYS4uLgorLS0tIGdsaWJjLTIuMy41L2VsZi9NYWtlZmlsZS5vbGQJV2VkIEp1biAxNSAwNzo0Njo0OSAyMDA1CisrKysgZ2xpYmMtMi4zLjUvZWxmL01ha2VmaWxlCVdlZCBKdW4gMTUgMDg6MTQ6MDAgMjAwNQorQEAgLTEyMCw2ICsxMjAsMTMgQEAKKyBpbnN0YWxsLWJpbi1zY3JpcHQgPSBsZGQKKyBlbmRpZgorIAorK2lmZXEgKHllcywkKGJ1aWxkLXN0YXRpYy1uc3MpKQorK25zc29iamRpciA6PSAkKHBhdHN1YnN0IC4uLyQoc3ViZGlyKSwuLCQoY29tbW9uLW9ianBmeCluc3MpCisrcmVzb2x2b2JqZGlyIDo9ICQocGF0c3Vic3QgLi4vJChzdWJkaXIpLC4sJChjb21tb24tb2JqcGZ4KXJlc29sdikKKytvdGhlcmxpYnMgKz0gJChuc3NvYmpkaXIpL2xpYm5zc19maWxlcy5hICQocmVzb2x2b2JqZGlyKS9saWJuc3NfZG5zLmEgXAorKwkgICAgICQocmVzb2x2b2JqZGlyKS9saWJyZXNvbHYuYQorK2VuZGlmCisrCisgb3RoZXJzCQk9IHNwcm9mIHNsbgorIGluc3RhbGwtYmluCT0gc3Byb2YKKyBvdGhlcnMtc3RhdGljICAgPSBzbG4KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFAuIEouIERheSA8cnBqZGF5QG1pbmRzcHJpbmcuY29tPgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNS4xLzEzMC1pNjg2LWFzc2VtYmxlci5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjUuMS8xMzAtaTY4Ni1hc3NlbWJsZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkwNGVmYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjUuMS8xMzAtaTY4Ni1hc3NlbWJsZXIucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorMjAwNy0wMi0xNSAgS2hlbSBSYWogIDxrcmFqQHh4eHh4eHh4eHg+CisKKyAgICAgICAqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvc3lzZGVwLmg6IFJlLWRlZmluZSBfX2k2ODYuCisgICAgICAgKiBucHRsL3N5c2RlcHMvcHRocmVhZC9wdC1pbml0ZmluaS5jOiBEaXR0by4KKworCisKK0luZGV4OiBnbGliYy0yLjQvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdsaWJjLTIuNC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L3N5c2RlcC5oCShyZXZpc2lvbiAxNDY5KQorKysrIGdsaWJjLTIuNC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L3N5c2RlcC5oCSh3b3JraW5nIGNvcHkpCitAQCAtMjksNiArMjksMTAgQEAKKyAjaW5jbHVkZSA8ZGwtc3lzZGVwLmg+CisgI2luY2x1ZGUgPHRscy5oPgorIAorKyNpZiBkZWZpbmVkIF9faTY4NiAmJiBkZWZpbmVkIF9fQVNTRU1CTEVSX18KKysjdW5kZWYgX19pNjg2CisrI2RlZmluZSBfX2k2ODYgX19pNjg2CisrI2VuZGlmCisgCisgLyogRm9yIExpbnV4IHdlIGNhbiB1c2UgdGhlIHN5c3RlbSBjYWxsIHRhYmxlIGluIHRoZSBoZWFkZXIgZmlsZQorIAkvdXNyL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCitJbmRleDogZ2xpYmMtMi40L25wdGwvc3lzZGVwcy9wdGhyZWFkL3B0LWluaXRmaW5pLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbGliYy0yLjQvbnB0bC9zeXNkZXBzL3B0aHJlYWQvcHQtaW5pdGZpbmkuYwkocmV2aXNpb24gMTQ2OSkKKysrKyBnbGliYy0yLjQvbnB0bC9zeXNkZXBzL3B0aHJlYWQvcHQtaW5pdGZpbmkuYwkod29ya2luZyBjb3B5KQorQEAgLTQ1LDYgKzQ1LDExIEBACisgLyogRW1iZWQgYW4gI2luY2x1ZGUgdG8gcHVsbCBpbiB0aGUgYWxpZ25tZW50IGFuZCAuZW5kIGRpcmVjdGl2ZXMuICovCisgYXNtICgiXG4jaW5jbHVkZSBcImRlZnMuaFwiIik7CisgCisrYXNtICgiXG4jaWYgZGVmaW5lZCBfX2k2ODYgJiYgZGVmaW5lZCBfX0FTU0VNQkxFUl9fIik7CisrYXNtICgiXG4jdW5kZWYgX19pNjg2Iik7CisrYXNtICgiXG4jZGVmaW5lIF9faTY4NiBfX2k2ODYiKTsKKythc20gKCJcbiNlbmRpZiIpOworKworIC8qIFRoZSBpbml0aWFsIGNvbW1vbiBjb2RlIGVuZHMgaGVyZS4gKi8KKyBhc20gKCJcbi8qQEhFQURFUl9FTkRTKi8iKTsKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjUuMS8xNDAtaTM4Ni1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnkucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi41LjEvMTQwLWkzODYtcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0OTgyMWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi41LjEvMTQwLWkzODYtcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5LnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKKyhDKSAyMDA3IFlhbm4gRS4gTU9SSU4gPHlhbm4ubW9yaW4uMTk5OEBhbmNpZW5zLmVuaWIuZnI+CitMaWNlbnNlOiBMR1BMIHYyLjEKKworU2h1dCBvZmYgYSBzdHVwaWQgd2FybmluZzogcHJlZmZlcmVkLXN0YWNrLWJvdW5kYXJ5IG11c3QgYmUgYmV0d2VlbiA0IGFkIDEyLAorYW5kIDIgaXMgbm90LgorCitkaWZmIC1kdXIgZ2xpYmMtMi41Lm9yaWcvc3lzZGVwcy9pMzg2L01ha2VmaWxlIGdsaWJjLTIuNS9zeXNkZXBzL2kzODYvTWFrZWZpbGUKKy0tLSBnbGliYy0yLjUub3JpZy9zeXNkZXBzL2kzODYvTWFrZWZpbGUJMjAwNS0wMy0wNiAwMToxODoxNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjUvc3lzZGVwcy9pMzg2L01ha2VmaWxlCTIwMDctMDUtMjcgMTc6NDk6MzcuMDAwMDAwMDAwICswMjAwCitAQCAtMzYsNyArMzYsNyBAQAorIGlmZXEgKCQoc3ViZGlyKSxjc3UpCisgc3lzZGVwLUNGTEFHUyArPSAtbXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeT00CisgZWxzZQorLXN5c2RlcC1DRkxBR1MgKz0gLW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9MgorK3N5c2RlcC1DRkxBR1MgKz0gLW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9NAorICMgTGlrZXdpc2UsIGFueSBmdW5jdGlvbiB3aGljaCBjYWxscyB1c2VyIGNhbGxiYWNrcworIHVzZXMtY2FsbGJhY2tzICs9IC1tcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5PTQKKyAjIExpa2V3aXNlLCBhbnkgc3RhY2sgYWxpZ25tZW50IHRlc3RzCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi41LjEvMTUwLWFscGhhLWFzbV9wYWdlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNS4xLzE1MC1hbHBoYS1hc21fcGFnZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTk4YjM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNS4xLzE1MC1hbHBoYS1hc21fcGFnZS5wYXRjaApAQCAtMCwwICsxLDI2IEBACisyMDA4LTA2LTA3ICBNaWtlIEZyeXNpbmdlciAgPHZhcGllckBnZW50b28ub3JnPgorCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXMvdXNlci5oOiBDb3B5IHBhZ2UuaCBkZWZpbml0aW9ucworCWZyb20gdGhlIGtlcm5lbCBoZWFkZXIgdG8gc3lzL3VzZXIuaCBhbmQgcmVtb3ZlIHRoZSAjaW5jbHVkZSBvZgorCXN5cy91c2VyLmguCisKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5cy91c2VyLmgKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5cy91c2VyLmgKK0BAIC0yMyw3ICsyMyw2IEBACisgICAgb25seS4gRG9uJ3QgcmVhZCB0b28gbXVjaCBpbnRvIGl0LiBEb24ndCB1c2UgaXQgZm9yIGFueXRoaW5nIG90aGVyCisgICAgdGhhbiBnZGIvc3RyYWNlIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuICovCisgCistI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisgI2luY2x1ZGUgPGFzbS9yZWcuaD4KKyAKKyBzdHJ1Y3QgdXNlcgorQEAgLTQxLDYgKzQwLDkgQEAgc3RydWN0IHVzZXIKKyAgIGNoYXIgdV9jb21tWzMyXTsJCQkJLyogdXNlciBjb21tYW5kIG5hbWUgKi8KKyB9OworIAorKyNkZWZpbmUgUEFHRV9TSElGVAkJMTMKKysjZGVmaW5lIFBBR0VfU0laRQkJKDEgPDwgUEFHRV9TSElGVCkKKysjZGVmaW5lIFBBR0VfTUFTSwkJKH4oUEFHRV9TSVpFLTEpKQorICNkZWZpbmUgTkJQRwkJCVBBR0VfU0laRQorICNkZWZpbmUgVVBBR0VTCQkJMQorICNkZWZpbmUgSE9TVF9URVhUX1NUQVJUX0FERFIJKHUuc3RhcnRfY29kZSkKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjUuMS8xNjAtdXNlX3Nob3J0X2Zvcl9mbnN0c3cucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi41LjEvMTYwLXVzZV9zaG9ydF9mb3JfZm5zdHN3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlODQ5ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi41LjEvMTYwLXVzZV9zaG9ydF9mb3JfZm5zdHN3LnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK09yaWdpbmFsIHBhdGNoIGZyb20gSC5KLiBMdSwgYXMgcmVwb3J0ZWQgdGhlcmU6CitodHRwOi8vd3d3Lm5hYmJsZS5jb20vUEFUQ0g6LVVzZS1zaG9ydC1mb3ItZm5zdHN3LXRkMTQ3NzUxNzEuaHRtbAorCitmbnN0c3cgc3RvcmVzIDE2Yml0IGludG8gJWF4LiBUaGUgdXBwZXIgMTZiaXQgb2YgJWVheCBpcyB1bmNoYW5nZWQuCitUaGUgbmV3IGFzc2VtYmxlciAoYmludXRpbHMtMi4xOC41MC4wLjQgYW5kIHVwKSB3aWxsIGRpc2FsbG93ICJmbnN0c3cgJWVheCIuCisKK2RpZmYgLWR1ciBnbGliYy0yLjYuMS5vcmlnL3N5c2RlcHMvaTM4Ni9mcHUvZnRlc3RleGNlcHQuYyBnbGliYy0yLjYuMS9zeXNkZXBzL2kzODYvZnB1L2Z0ZXN0ZXhjZXB0LmMKKy0tLSBnbGliYy0yLjYuMS5vcmlnL3N5c2RlcHMvaTM4Ni9mcHUvZnRlc3RleGNlcHQuYwkyMDA0LTAzLTA1IDExOjE0OjQ4LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuNi4xL3N5c2RlcHMvaTM4Ni9mcHUvZnRlc3RleGNlcHQuYwkyMDA4LTA2LTI0IDEwOjU2OjE0LjAwMDAwMDAwMCArMDIwMAorQEAgLTI2LDcgKzI2LDcgQEAKKyBpbnQKKyBmZXRlc3RleGNlcHQgKGludCBleGNlcHRzKQorIHsKKy0gIGludCB0ZW1wOworKyAgc2hvcnQgdGVtcDsKKyAgIGludCB4dGVtcCA9IDA7CisgCisgICAvKiBHZXQgY3VycmVudCBleGNlcHRpb25zLiAgKi8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjUuMS8xNzAtYWxwaGEtYXNtX2VsZi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjUuMS8xNzAtYWxwaGEtYXNtX2VsZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGE1YzhlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNS4xLzE3MC1hbHBoYS1hc21fZWxmLnBhdGNoCkBAIC0wLDAgKzEsMTk0IEBACitzaW5jZSB0aGUga2VybmVsIG5vIGxvbmdlciBwcm92aWRlcyBhc20vZWxmLmgsIHRoZSBzeXMvcHJvY2ZzLmggZnJvbSB0aGUgCitjb21tb24gY29kZSwgYWxwaGEsIGFuZCBzaCBmYWlsIHdoZW4gdXNlZC4gIHRoaXMgc2hvdWxkIHRoaW5ncyB1cC4KKy1taWtlCisKKzIwMDgtMDYtMDcgIE1pa2UgRnJ5c2luZ2VyICA8dmFwaWVyQGdlbnRvby5vcmc+CisKKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5cy9wcm9jZnMuaDogUmVwbGFjZSB3aXRoICNlcnJvciBzdHViLgorCSogc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzL3Byb2Nmcy5oOiBDb3B5IHNvbWUgYXNtL2VsZi5oCisJZGVmaW5pdGlvbnMgZnJvbSB0aGUga2VybmVsIGhlYWRlciB0byBzeXMvcHJvY2ZzLmggYW5kIHJlbW92ZSB0aGUKKwkjaW5jbHVkZSBvZiBhc20vZWxmLmguCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXMvcHJvY2ZzLmg6IExpa2V3aXNlLgorCisqQXR0YWNobWVudDogc2lnbmF0dXJlLmFzYyA8bXNnMDAwMTIvc2lnbmF0dXJlLmFzYz4qCisvRGVzY3JpcHRpb246LyBUaGlzIGlzIGEgZGlnaXRhbGx5IHNpZ25lZCBtZXNzYWdlIHBhcnQuCisKKzIwMDgtMDYtMDcgIE1pa2UgRnJ5c2luZ2VyICA8dmFwaWVyQGdlbnRvby5vcmc+CisKKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5cy9wcm9jZnMuaDogUmVwbGFjZSB3aXRoICNlcnJvciBzdHViLgorCSogc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzL3Byb2Nmcy5oOiBDb3B5IHNvbWUgYXNtL2VsZi5oCisJZGVmaW5pdGlvbnMgZnJvbSB0aGUga2VybmVsIGhlYWRlciB0byBzeXMvcHJvY2ZzLmggYW5kIHJlbW92ZSB0aGUKKwkjaW5jbHVkZSBvZiBhc20vZWxmLmguCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXMvcHJvY2ZzLmg6IExpa2V3aXNlLgorCistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXMvcHJvY2ZzLmgKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5cy9wcm9jZnMuaAorQEAgLTI5LDEwICsyOSwyMyBAQAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3Vjb250ZXh0Lmg+CisgI2luY2x1ZGUgPHN5cy91c2VyLmg+CistI2luY2x1ZGUgPGFzbS9lbGYuaD4KKyAKKyBfX0JFR0lOX0RFQ0xTCisgCisrLyoKKysgKiBUaGUgT1NGLzEgdmVyc2lvbiBvZiA8c3lzL3Byb2Nmcy5oPiBtYWtlcyBncmVnc2V0X3QgNDYgZW50cmllcyBsb25nLgorKyAqIEkgaGF2ZSBubyBpZGVhIHdoeSB0aGF0IGlzIHNvLiAgRm9yIG5vdywgd2UganVzdCBsZWF2ZSBpdCBhdCAzMworKyAqICgzMiBnZW5lcmFsIHJlZ3MgKyBwcm9jZXNzb3Igc3RhdHVzIHdvcmQpLgorKyAqLworKyNkZWZpbmUgRUxGX05HUkVHICAzMworKyNkZWZpbmUgRUxGX05GUFJFRyAzMgorKworK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OworK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisrCisrdHlwZWRlZiBkb3VibGUgZWxmX2ZwcmVnX3Q7CisrdHlwZWRlZiBlbGZfZnByZWdfdCBlbGZfZnByZWdzZXRfdFtFTEZfTkZQUkVHXTsKKysKKyBzdHJ1Y3QgZWxmX3NpZ2luZm8KKyAgIHsKKyAgICAgaW50IHNpX3NpZ25vOwkJCS8qIFNpZ25hbCBudW1iZXIuICAqLworLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzL3Byb2Nmcy5oCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXMvcHJvY2ZzLmgKK0BAIC0yOSwxMCArMjksMTkgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy91Y29udGV4dC5oPgorICNpbmNsdWRlIDxzeXMvdXNlci5oPgorLSNpbmNsdWRlIDxhc20vZWxmLmg+CisgCisgX19CRUdJTl9ERUNMUworIAorKy8qCisrICogRUxGIHJlZ2lzdGVyIGRlZmluaXRpb25zLi4uCisrICovCisrdHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7CisrCisrI2RlZmluZSBFTEZfTkdSRUcgKHNpemVvZiAoc3RydWN0IHB0X3JlZ3MpIC8gc2l6ZW9mKGVsZl9ncmVnX3QpKQorK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisrCisrdHlwZWRlZiBzdHJ1Y3QgdXNlcl9mcHVfc3RydWN0IGVsZl9mcHJlZ3NldF90OworKworIHN0cnVjdCBlbGZfc2lnaW5mbworICAgeworICAgICBpbnQgc2lfc2lnbm87CQkJLyogU2lnbmFsIG51bWJlci4gICovCistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zeXMvcHJvY2ZzLmgKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5cy9wcm9jZnMuaAorQEAgLTEsMTE1ICsxLDIgQEAKKy0vKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCistCistICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCistICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorLSAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorLSAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCistICAgMDIxMTEtMTMwNyBVU0EuICAqLworLQorLSNpZm5kZWYgX1NZU19QUk9DRlNfSAorLSNkZWZpbmUgX1NZU19QUk9DRlNfSAkxCistCistLyogVGhpcyBpcyBzb21laG93IG1vZGVsbGVkIGFmdGVyIHRoZSBmaWxlIG9mIHRoZSBzYW1lIG5hbWUgb24gU3lzVnI0CistICAgc3lzdGVtcy4gIEl0IHByb3ZpZGVzIGEgZGVmaW5pdGlvbiBvZiB0aGUgY29yZSBmaWxlIGZvcm1hdCBmb3IgRUxGCistICAgdXNlZCBvbiBMaW51eC4gICovCistCistI2luY2x1ZGUgPGZlYXR1cmVzLmg+CistI2luY2x1ZGUgPHNpZ25hbC5oPgorLSNpbmNsdWRlIDxzeXMvdGltZS5oPgorLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaW5jbHVkZSA8c3lzL3Vjb250ZXh0Lmg+CistI2luY2x1ZGUgPHN5cy91c2VyLmg+CistI2luY2x1ZGUgPGFzbS9lbGYuaD4KKy0KKy1fX0JFR0lOX0RFQ0xTCistCistc3RydWN0IGVsZl9zaWdpbmZvCistICB7CistICAgIGludCBzaV9zaWdubzsJCQkvKiBTaWduYWwgbnVtYmVyLiAgKi8KKy0gICAgaW50IHNpX2NvZGU7CQkJLyogRXh0cmEgY29kZS4gICovCistICAgIGludCBzaV9lcnJubzsJCQkvKiBFcnJuby4gICovCistICB9OworLQorLS8qIERlZmluaXRpb25zIHRvIGdlbmVyYXRlIEludGVsIFNWUjQtbGlrZSBjb3JlIGZpbGVzLiAgVGhlc2UgbW9zdGx5CistICAgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyB0aGUgU1ZSNCB0eXBlcyB3aXRoICJlbGZfIiB0YWNrZWQgb24gdGhlCistICAgZnJvbnQgdG8gcHJldmVudCBjbGFzaGVzIHdpdGggbGludXggZGVmaW5pdGlvbnMsIGFuZCB0aGUgdHlwZWRlZgorLSAgIGZvcm1zIGhhdmUgYmVlbiBhdm9pZGVkLiAgVGhpcyBpcyBtb3N0bHkgbGlrZSB0aGUgU1ZSNCBzdHJ1Y3R1cmUsCistICAgYnV0IG1vcmUgTGludXh5LCB3aXRoIHRoaW5ncyB0aGF0IExpbnV4IGRvZXMgbm90IHN1cHBvcnQgYW5kIHdoaWNoCistICAgZ2RiIGRvZXNuJ3QgcmVhbGx5IHVzZSBleGNsdWRlZC4gIEZpZWxkcyBwcmVzZW50IGJ1dCBub3QgdXNlZCBhcmUKKy0gICBtYXJrZWQgd2l0aCAiWFhYIi4gICovCistc3RydWN0IGVsZl9wcnN0YXR1cworLSAgeworLSNpZiAwCistICAgIGxvbmcgaW50IHByX2ZsYWdzOwkJCS8qIFhYWCBQcm9jZXNzIGZsYWdzLiAgKi8KKy0gICAgc2hvcnQgaW50IHByX3doeTsJCQkvKiBYWFggUmVhc29uIGZvciBwcm9jZXNzIGhhbHQuICAqLworLSAgICBzaG9ydCBpbnQgcHJfd2hhdDsJCQkvKiBYWFggTW9yZSBkZXRhaWxlZCByZWFzb24uICAqLworLSNlbmRpZgorLSAgICBzdHJ1Y3QgZWxmX3NpZ2luZm8gcHJfaW5mbzsJCS8qIEluZm8gYXNzb2NpYXRlZCB3aXRoIHNpZ25hbC4gICovCistICAgIHNob3J0IGludCBwcl9jdXJzaWc7CQkvKiBDdXJyZW50IHNpZ25hbC4gICovCistICAgIHVuc2lnbmVkIGxvbmcgaW50IHByX3NpZ3BlbmQ7CS8qIFNldCBvZiBwZW5kaW5nIHNpZ25hbHMuICAqLworLSAgICB1bnNpZ25lZCBsb25nIGludCBwcl9zaWdob2xkOwkvKiBTZXQgb2YgaGVsZCBzaWduYWxzLiAgKi8KKy0jaWYgMAorLSAgICBzdHJ1Y3Qgc2lnYWx0c3RhY2sgcHJfYWx0c3RhY2s7CS8qIEFsdGVybmF0ZSBzdGFjayBpbmZvLiAgKi8KKy0gICAgc3RydWN0IHNpZ2FjdGlvbiBwcl9hY3Rpb247CQkvKiBTaWduYWwgYWN0aW9uIGZvciBjdXJyZW50IHNpZy4gICovCistI2VuZGlmCistICAgIF9fcGlkX3QgcHJfcGlkOworLSAgICBfX3BpZF90IHByX3BwaWQ7CistICAgIF9fcGlkX3QgcHJfcGdycDsKKy0gICAgX19waWRfdCBwcl9zaWQ7CistICAgIHN0cnVjdCB0aW1ldmFsIHByX3V0aW1lOwkJLyogVXNlciB0aW1lLiAgKi8KKy0gICAgc3RydWN0IHRpbWV2YWwgcHJfc3RpbWU7CQkvKiBTeXN0ZW0gdGltZS4gICovCistICAgIHN0cnVjdCB0aW1ldmFsIHByX2N1dGltZTsJCS8qIEN1bXVsYXRpdmUgdXNlciB0aW1lLiAgKi8KKy0gICAgc3RydWN0IHRpbWV2YWwgcHJfY3N0aW1lOwkJLyogQ3VtdWxhdGl2ZSBzeXN0ZW0gdGltZS4gICovCistI2lmIDAKKy0gICAgbG9uZyBpbnQgcHJfaW5zdHI7CQkJLyogQ3VycmVudCBpbnN0cnVjdGlvbi4gICovCistI2VuZGlmCistICAgIGVsZl9ncmVnc2V0X3QgcHJfcmVnOwkJLyogR1AgcmVnaXN0ZXJzLiAgKi8KKy0gICAgaW50IHByX2ZwdmFsaWQ7CQkJLyogVHJ1ZSBpZiBtYXRoIGNvcHJvIGJlaW5nIHVzZWQuICAqLworLSAgfTsKKy0KKy0KKy0jZGVmaW5lIEVMRl9QUkFSR1NaICAgICAoODApICAgIC8qIE51bWJlciBvZiBjaGFycyBmb3IgYXJncyAqLworLQorLXN0cnVjdCBlbGZfcHJwc2luZm8KKy0gIHsKKy0gICAgY2hhciBwcl9zdGF0ZTsJCQkvKiBOdW1lcmljIHByb2Nlc3Mgc3RhdGUuICAqLworLSAgICBjaGFyIHByX3NuYW1lOwkJCS8qIENoYXIgZm9yIHByX3N0YXRlLiAgKi8KKy0gICAgY2hhciBwcl96b21iOwkJCS8qIFpvbWJpZS4gICovCistICAgIGNoYXIgcHJfbmljZTsJCQkvKiBOaWNlIHZhbC4gICovCistICAgIHVuc2lnbmVkIGxvbmcgaW50IHByX2ZsYWc7CQkvKiBGbGFncy4gICovCistICAgIHVuc2lnbmVkIHNob3J0IGludCBwcl91aWQ7CistICAgIHVuc2lnbmVkIHNob3J0IGludCBwcl9naWQ7CistICAgIGludCBwcl9waWQsIHByX3BwaWQsIHByX3BncnAsIHByX3NpZDsKKy0gICAgLyogTG90cyBtaXNzaW5nICovCistICAgIGNoYXIgcHJfZm5hbWVbMTZdOwkJCS8qIEZpbGVuYW1lIG9mIGV4ZWN1dGFibGUuICAqLworLSAgICBjaGFyIHByX3BzYXJnc1tFTEZfUFJBUkdTWl07CS8qIEluaXRpYWwgcGFydCBvZiBhcmcgbGlzdC4gICovCistICB9OworLQorLS8qIEFkZHJlc3Nlcy4gICovCistdHlwZWRlZiB2b2lkICpwc2FkZHJfdDsKKy0KKy0vKiBSZWdpc3RlciBzZXRzLiAgTGludXggaGFzIGRpZmZlcmVudCBuYW1lcy4gICovCistdHlwZWRlZiBncmVnc2V0X3QgcHJncmVnc2V0X3Q7CistdHlwZWRlZiBmcHJlZ3NldF90IHByZnByZWdzZXRfdDsKKy0KKy0vKiBXZSBkb24ndCBoYXZlIGFueSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHByb2Nlc3NlcyBhbmQgdGhyZWFkcywKKy0gICB0aGVyZWZvcmUgaGFiZSBvbmx5IGluZSBQSUQgdHlwZS4gICovCistdHlwZWRlZiBfX3BpZF90IGx3cGlkX3Q7CistCistCistdHlwZWRlZiBzdHJ1Y3QgZWxmX3Byc3RhdHVzIHByc3RhdHVzX3Q7CistdHlwZWRlZiBzdHJ1Y3QgZWxmX3BycHNpbmZvIHBycHNpbmZvX3Q7CistCistX19FTkRfREVDTFMKKy0KKy0jZW5kaWYJLyogc3lzL3Byb2Nmcy5oICovCisrLyogc3lzL3Byb2Nmcy5oIGlzIGFyY2hpdGVjdHVyZSBzcGVjaWZpYy4gICovCisrI2Vycm9yICJUaGlzIGZpbGUgbXVzdCBiZSBzdXBwbGllZCBieSBldmVyeSBMaW51eCBhcmNoaXRlY3R1cmUuIgorCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi41LjEvMTgwLWFscGhhLWNmaS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjUuMS8xODAtYWxwaGEtY2ZpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZWZkNzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi41LjEvMTgwLWFscGhhLWNmaS5wYXRjaApAQCAtMCwwICsxLDI1IEBACistLS0gbGliYy9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5c2RlcC1jYW5jZWwuaCAgICAyMDA2LzEwLzI5IDIxOjQ4OjA2ICAgICAxLjYKKysrKyBsaWJjL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzZGVwLWNhbmNlbC5oICAgIDIwMDcvMDMvMTMgMjE6Mjg6MDMgICAgIDEuNworQEAgLTU1LDYgKzU1LDcgQEAKKyAJYm5lCWEzLCBTWVNDQUxMX0VSUk9SX0xBQkVMOwkJCVwKKyBfX0xBQkVMKCRwc2V1ZG9fcmV0KQkJCQkJCVwKKyAJLnN1YnNlY3Rpb24gMjsJCQkJCQlcCisrCWNmaV9zdGFydHByb2M7CQkJCQkJXAorIF9fTEFCRUwoJHBzZXVkb19jYW5jZWwpCQkJCQkJXAorIAlzdWJxCXNwLCA2NCwgc3A7CQkJCQlcCisgCWNmaV9kZWZfY2ZhX29mZnNldCg2NCk7CQkJCQlcCitAQCAtOTAsMTIgKzkxLDEzIEBACisgCWNmaV9kZWZfY2ZhX29mZnNldCgwKTsJCQkJCVwKKyBfX0xBQkVMKCRzeXNjYWxsX2Vycm9yKQkJCQkJCVwKKyAJU1lTQ0FMTF9FUlJPUl9IQU5ETEVSOwkJCQkJXAorKwljZmlfZW5kcHJvYzsJCQkJCQlcCisgCS5wcmV2aW91cworIAorICMgdW5kZWYgUFNFVURPX0VORAorICMgZGVmaW5lIFBTRVVET19FTkQoc3ltKQkJCQkJXAorLQkuc3Vic2VjdGlvbiAyOwkJCQkJCVwKKyAJY2ZpX2VuZHByb2M7CQkJCQkJXAorKwkuc3Vic2VjdGlvbiAyOwkJCQkJCVwKKyAJLnNpemUgc3ltLCAuLXN5bQorIAorICMgZGVmaW5lIFNBVkVfQVJHU18wCS8qIE5vdGhpbmcuICAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNS4xLzE5MC1hbHBoYS1zaWdzdXNwZW5kLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNS4xLzE5MC1hbHBoYS1zaWdzdXNwZW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZjFhNWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi41LjEvMTkwLWFscGhhLXNpZ3N1c3BlbmQucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorLS0tIGdsaWJjLTIuNS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zaWdzdXNwZW5kLlMub3JpZwkyMDA2LTEwLTIyIDIyOjE3OjAxLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuNS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zaWdzdXNwZW5kLlMJMjAwNi0xMC0yMiAyMjoxODowNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMSwzICszMSwyMSBAQAorIGxpYmNfaGlkZGVuX2RlZiAoX19zaWdzdXNwZW5kKQorIHdlYWtfYWxpYXMgKF9fc2lnc3VzcGVuZCwgc2lnc3VzcGVuZCkKKyBzdHJvbmdfYWxpYXMgKF9fc2lnc3VzcGVuZCwgX19saWJjX3NpZ3N1c3BlbmQpCisrCisrI2lmbmRlZiBOT19DQU5DRUxMQVRJT04KKysJLmdsb2JsIF9fc2lnc3VzcGVuZF9ub2NhbmNlbDsKKysJLmFsaWduIDQ7CisrCS50eXBlIF9fc2lnc3VzcGVuZF9ub2NhbmNlbCwgQGZ1bmN0aW9uOworKwkudXNlcHYgX19zaWdzdXNwZW5kX25vY2FuY2VsLCBzdGQ7CisrCWNmaV9zdGFydHByb2M7CisrX19MQUJFTChfX3NpZ3N1c3BlbmRfbm9jYW5jZWwpCisrCWxkZ3AgICAgZ3AsIDAocHYpOworKwlQU0VVRE9fUFJPRjsKKysJUFNFVURPX1BSRVBBUkVfQVJHUworKwlsZGEgICAgIHYwLCBTWVNfaWZ5KHNpZ3N1c3BlbmQpOworKwljYWxsX3BhbCBQQUxfY2FsbHN5czsKKysJYm5lICAgICBhMywgU1lTQ0FMTF9FUlJPUl9MQUJFTDsKKysJcmV0OworKwljZmlfZW5kcHJvYzsKKysJLnNpemUgX19zaWdzdXNwZW5kX25vY2FuY2VsLCAuLV9fc2lnc3VzcGVuZF9ub2NhbmNlbAorKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNS8xMDAtY3lnd2luLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNS8xMDAtY3lnd2luLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMGNkN2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi41LzEwMC1jeWd3aW4ucGF0Y2gKQEAgLTAsMCArMSwxODcgQEAKK0ZpeGVzCitlbGYvbGlicnRsZC5vczogSW4gZnVuY3Rpb24gYHByb2Nlc3NfZW52dmFycyc6IDogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19hY2Nlc3MnCisuLi4KK3doZW4gYnVpbGRpbmcgZ2xpYmMtMi4zLnggb24gY3lnd2luCisKK0lkZWEgZnJvbQoraHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9tbC9idWctZ2xpYmMvMjAwMi0wMS9tc2cwMDA3MS9nbGliYy0yLjItY3lnaW4tc2hhcmVkLnBhdGNoCitCYXNpY2FsbHksIG1ha2UgZ2xpYmMgdXNlIC5vU1QgYXMgc3VmZml4IGZvciAnb2JqZWN0IHN0YXRpYycKK2luc3RlYWQgb2YgLm9TLCBzaW5jZSBjeWd3aW4gaGFzIHRyb3VibGUgZGlzdGluZ3Vpc2hpbmcgLm9zIGZyb20gLm9TCisoT3JpZ2luYWwgcGF0Y2ggaGFkIC5vbiwgYnV0IC5vU1QgaXMgbW9yZSBtbmVtb25pYyBmb3IgJ29iamVjdCBzdGF0aWMnKQorCitnbGliYy1saW51eHRocmVhZHMtMi4zLjUgYWxzbyByZXF1aXJlcyBhIHBhdGNoLCBzZWUgCisuLi9nbGliYy1saW51eHRocmVhZHMtMi4zLjUvZ2xpYmMtbGludXh0aHJlYWRzLTIuMy41LWN5Z3dpbi5wYXRjaAorCitbIGZvcndhcmQgcG9ydGVkIHRvIGdsaWJjLTIuMy41IGJ5IFBldHIgQ3ZhY2hvdWNlazoKKworTWVzc2FnZS1JRDogPDQyODJGQ0JBLjMwNDAwMDBAdW5pY29udHJvbHMuY3o+CitEYXRlOiBUaHUsIDEyIE1heSAyMDA1IDA4OjUwOjM0ICswMjAwCitGcm9tOiBQZXRyIEN2YWNob3VjZWsgPGN2YWNob3VjZWtAdW5pY29udHJvbHMuY3o+CitUbzogRGFuIEtlZ2VsIDxkYW5rQGtlZ2VsLmNvbT4KK0NDOiAgY3Jvc3NnY2NAc291cmNlcy5yZWRoYXQuY29tCitTdWJqZWN0OiBQYXRjaGVzIHRvIGJ1aWxkIGdjYyAzLjQuMyAvIGdsaWJjIDIuMy41IG9uIGN5Z3dpbgorCitIaSBEYW4sCitmb2xsb3dpbmcgcGF0Y2hlcyBhcmUgbmVlZGVkIHRvIGJ1aWxkIGdjYy0zLjQuMy9nbGliYy0yLjMuNSB0b29sY2hhaW4KK29uIGN5Z3dpbi4gVGVzdGVkIHRvIGJ1aWxkIHRvb2xjaGFpbnMgZm9yIHBvd2VycGMgNjA0IGFuZCA3NTAgdGFyZ2V0cy4KKworLS0gCisgICAgICAgICAgICAgICAgICAgICBQZXRyIEN2YWNob3VjZWsKKyAgICAgICAgICAgICAgICAgICAgIFVuaWNvbnRyb2xzIGEucy4KKyAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudW5pY29udHJvbHMuY3oKK10KKworZGlmZiAtYXVyIGdsaWJjLTIuMy41L01ha2Vjb25maWcgZ2xpYmMtMi4zLjUtY3lnd2luL01ha2Vjb25maWcKKy0tLSBnbGliYy0yLjMuNS9NYWtlY29uZmlnCTIwMDUtMDItMTYgMTE6NTA6MTkuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4zLjUtY3lnd2luL01ha2Vjb25maWcJMjAwNS0wNS0xMSAwODoyNDo1MS4wNDY4NzUwMDAgKzAyMDAKK0BAIC00NzIsNyArNDcyLDcgQEAKKyAjIHJ1biB0aGUgbGlua2VkIHByb2dyYW1zLgorIGxpbmstbGliYyA9IC1XbCwtcnBhdGgtbGluaz0kKHJwYXRoLWxpbmspIFwKKyAJICAgICQoY29tbW9uLW9ianBmeClsaWJjLnNvJChsaWJjLnNvLXZlcnNpb24pIFwKKy0JICAgICQoY29tbW9uLW9ianBmeCkkKHBhdHN1YnN0ICUsJChsaWJ0eXBlLm9TKSxjKSAkKGdudWxpYikKKysJICAgICQoY29tbW9uLW9ianBmeCkkKHBhdHN1YnN0ICUsJChsaWJ0eXBlLm9TVCksYykgJChnbnVsaWIpCisgIyBUaGlzIGlzIGhvdyB0byBmaW5kIGF0IGJ1aWxkLXRpbWUgdGhpbmdzIHRoYXQgd2lsbCBiZSBpbnN0YWxsZWQgdGhlcmUuCisgcnBhdGgtZGlycyA9IG1hdGggZWxmIGRsZmNuIG5zcyBuaXMgcnQgcmVzb2x2IGNyeXB0CisgZW5kaWYKK0BAIC02OTMsNyArNjkzLDcgQEAKKyAjIFRoZSBjb21waWxhdGlvbiBydWxlcyB1c2UgJChDUFBGTEFHUy0ke1NVRkZJWH0pIGFuZCAkKENGTEFHUy0ke1NVRkZJWH0pCisgIyB0byBwYXNzIGRpZmZlcmVudCBmbGFncyBmb3IgZWFjaCBmbGF2b3IuCisgbGlidHlwZXMgPSAkKGZvcmVhY2ggbywkKG9iamVjdC1zdWZmaXhlcy1mb3ItbGliYyksJChsaWJ0eXBlJG8pKQorLWFsbC1vYmplY3Qtc3VmZml4ZXMgOj0gLm8gLm9zIC5vcCAub2cgLm9iIC5vUworK2FsbC1vYmplY3Qtc3VmZml4ZXMgOj0gLm8gLm9zIC5vcCAub2cgLm9iIC5vU1QKKyBvYmplY3Qtc3VmZml4ZXMgOj0KKyBDUFBGTEFHUy0ubyA9ICQocGljLWRlZmF1bHQpCisgQ0ZMQUdTLS5vID0gJChmaWx0ZXIgJWZyYW1lLXBvaW50ZXIsJCgrY2ZsYWdzKSkKK0BAIC03NDksMTQgKzc0OSwxNCBAQAorIAorIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgIyBCdWlsZCBzcGVjaWFsIGxpYnJhcnkgdGhhdCBjb250YWlucyB0aGUgc3RhdGljLW9ubHkgcm91dGluZXMgZm9yIGxpYmMuCistb2JqZWN0LXN1ZmZpeGVzLWZvci1saWJjICs9IC5vUworK29iamVjdC1zdWZmaXhlcy1mb3ItbGliYyArPSAub1NUCisgCisgIyBNdXN0IGJ1aWxkIHRoZSByb3V0aW5lcyBhcyBQSUMsIHRob3VnaCwgYmVjYXVzZSB0aGV5IGNhbiBlbmQgdXAgaW4gKHVzZXJzJykKKyAjIHNoYXJlZCBvYmplY3RzLiAgV2UgZG9uJ3Qgd2FudCB0byB1c2UgQ0ZMQUdTLW9zIGJlY2F1c2UgdXNlcnMgbWF5LCBmb3IKKyAjIGV4YW1wbGUsIG1ha2UgdGhhdCBwcm9jZXNzb3Itc3BlY2lmaWMuCistQ0ZMQUdTLS5vUyA9ICQoQ0ZMQUdTLS5vKSAkKFBJQy1jY2ZsYWcpCistQ1BQRkxBR1MtLm9TID0gJChDUFBGTEFHUy0ubykgLURQSUMgLURMSUJDX05PTlNIQVJFRD0xCistbGlidHlwZS5vUyA9IGxpYiVfbm9uc2hhcmVkLmEKKytDRkxBR1MtLm9TVCA9ICQoQ0ZMQUdTLS5vKSAkKFBJQy1jY2ZsYWcpCisrQ1BQRkxBR1MtLm9TVCA9ICQoQ1BQRkxBR1MtLm8pIC1EUElDIC1ETElCQ19OT05TSEFSRUQ9MQorK2xpYnR5cGUub1NUID0gbGliJV9ub25zaGFyZWQuYQorIGVuZGlmCisgCisgIyBUaGUgYXNzZW1ibGVyIGNhbiBnZW5lcmF0ZSBkZWJ1ZyBpbmZvcm1hdGlvbiB0b28uCitkaWZmIC1hdXIgZ2xpYmMtMi4zLjUvTWFrZXJ1bGVzIGdsaWJjLTIuMy41LWN5Z3dpbi9NYWtlcnVsZXMKKy0tLSBnbGliYy0yLjMuNS9NYWtlcnVsZXMJMjAwNC0xMi0xNSAxOTo1MjozOS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjMuNS1jeWd3aW4vTWFrZXJ1bGVzCTIwMDUtMDUtMTEgMDg6MjU6MzMuNTc4MTI1MDAwICswMjAwCitAQCAtNDE3LDcgKzQxNyw3IEBACisgIyBCb3VuZGVkIHBvaW50ZXIgdGh1bmtzIGFyZSBvbmx5IGJ1aWx0IGZvciAqLm9iCisgZWxpZGUtYnAtdGh1bmtzID0gJChhZGRwcmVmaXggJChicHBmeCksJChicC10aHVua3MpKQorIAorLWVsaWRlLXJvdXRpbmVzLm9TICs9ICQoZmlsdGVyLW91dCAkKHN0YXRpYy1vbmx5LXJvdXRpbmVzKSxcCisrZWxpZGUtcm91dGluZXMub1NUICs9ICQoZmlsdGVyLW91dCAkKHN0YXRpYy1vbmx5LXJvdXRpbmVzKSxcCisgCQkJCSAgJChyb3V0aW5lcykgJChhdXgpICQoc3lzZGVwX3JvdXRpbmVzKSkgXAorIAkJICAgICAkKGVsaWRlLWJwLXRodW5rcykKKyBlbGlkZS1yb3V0aW5lcy5vcyArPSAkKHN0YXRpYy1vbmx5LXJvdXRpbmVzKSAkKGVsaWRlLWJwLXRodW5rcykKK0BAIC05ODEsNyArOTgxLDcgQEAKKyBpbnN0YWxsOiAkKGluc3RfbGliZGlyKS9saWJjLnNvCisgJChpbnN0X2xpYmRpcikvbGliYy5zbzogJChjb21tb24tb2JqcGZ4KWZvcm1hdC5sZHMgXAorIAkJCSQoY29tbW9uLW9ianBmeClsaWJjLnNvJChsaWJjLnNvLXZlcnNpb24pIFwKKy0JCQkkKGluc3RfbGliZGlyKS8kKHBhdHN1YnN0ICUsJChsaWJ0eXBlLm9TKSxcCisrCQkJJChpbnN0X2xpYmRpcikvJChwYXRzdWJzdCAlLCQobGlidHlwZS5vU1QpLFwKKyAJCQkJCQkgICQobGlicHJlZml4KSQobGliYy1uYW1lKSkgXAorIAkJCSQoK2ZvcmNlKQorIAkoZWNobyAnLyogR05VIGxkIHNjcmlwdCc7XAorQEAgLTk4OSw3ICs5ODksNyBAQAorIAkgZWNobyAnICAgdGhlIHN0YXRpYyBsaWJyYXJ5LCBzbyB0cnkgdGhhdCBzZWNvbmRhcmlseS4gICovJztcCisgCSBjYXQgJDw7IFwKKyAJIGVjaG8gJ0dST1VQICggJChzbGliZGlyKS9saWJjLnNvJChsaWJjLnNvLXZlcnNpb24pJyBcCistCSAgICAgICckKGxpYmRpcikvJChwYXRzdWJzdCAlLCQobGlidHlwZS5vUyksJChsaWJwcmVmaXgpJChsaWJjLW5hbWUpKSdcCisrCSAgICAgICckKGxpYmRpcikvJChwYXRzdWJzdCAlLCQobGlidHlwZS5vU1QpLCQobGlicHJlZml4KSQobGliYy1uYW1lKSknXAorCSAgICAgICcgQVNfTkVFREVEICgnICQoc2xpYmRpcikvJChydGxkLWluc3RhbGxlZC1uYW1lKSAnKSApJyBcCisgCSkgPiAkQC5uZXcKKwltdiAtZiAkQC5uZXcgJEAKK2RpZmYgLWF1ciBnbGliYy0yLjMuNS9leHRyYS1saWIubWsgZ2xpYmMtMi4zLjUtY3lnd2luL2V4dHJhLWxpYi5taworLS0tIGdsaWJjLTIuMy41L2V4dHJhLWxpYi5tawkyMDA0LTEyLTAyIDIzOjU0OjQ3LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMy41LWN5Z3dpbi9leHRyYS1saWIubWsJMjAwNS0wNS0xMSAwODoyNzoyOC4xNTYyNTAwMDAgKzAyMDAKK0BAIC0xMyw3ICsxMyw3IEBACisgCisgaWZuZXEgKCwkKCQobGliKS1zdGF0aWMtb25seS1yb3V0aW5lcykpCisgaWZuZXEgKCwkKGZpbHRlciB5ZXN5ZXMlLCQoYnVpbGQtc2hhcmVkKSQoZWxmKSQoJChsaWIpLnNvLXZlcnNpb24pKSkKKy1vYmplY3Qtc3VmZml4ZXMtJChsaWIpICs9ICQoZmlsdGVyLW91dCAkKCQobGliKS1pbmhpYml0LW8pLC5vUykKKytvYmplY3Qtc3VmZml4ZXMtJChsaWIpICs9ICQoZmlsdGVyLW91dCAkKCQobGliKS1pbmhpYml0LW8pLC5vU1QpCisgZW5kaWYKKyBlbmRpZgorIAorQEAgLTI5LDcgKzI5LDcgQEAKKyAKKyAjIEFkZCBlYWNoIGZsYXZvciBvZiBsaWJyYXJ5IHRvIHRoZSBsaXN0cyBvZiB0aGluZ3MgdG8gYnVpbGQgYW5kIGluc3RhbGwuCisgaW5zdGFsbC1saWIgKz0gJChmb3JlYWNoIG8sJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSwkKGxpYjpsaWIlPSQobGlidHlwZSRvKSkpCistZXh0cmEtb2JqcyArPSAkKGZvcmVhY2ggbywkKGZpbHRlci1vdXQgLm9zIC5vUywkKG9iamVjdC1zdWZmaXhlcy0kKGxpYikpKSxcCisrZXh0cmEtb2JqcyArPSAkKGZvcmVhY2ggbywkKGZpbHRlci1vdXQgLm9zIC5vU1QsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSksXAorIAkJCSQocGF0c3Vic3QgJSwlJG8sJChmaWx0ZXItb3V0IFwKKyAJCQkJCSAgICQoJChsaWIpLXNoYXJlZC1vbmx5LXJvdXRpbmVzKSxcCisgCQkJCQkgICAkKGFsbC0kKGxpYiktcm91dGluZXMpKSkpCitAQCAtNTcsNyArNTcsNyBAQAorIAorIAorICMgVXNlIG8taXRlcmF0b3IubWsgdG8gZ2VuZXJhdGUgYSBydWxlIGZvciBlYWNoIGZsYXZvciBvZiBsaWJyYXJ5LgorLWlmbmVxICgsJChmaWx0ZXItb3V0IC5vcyAub1MsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSkpCisraWZuZXEgKCwkKGZpbHRlci1vdXQgLm9zIC5vU1QsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSkpCisgZGVmaW5lIG8taXRlcmF0b3ItZG9pdAorICQob2JqcGZ4KSQocGF0c3Vic3QgJSwkKGxpYnR5cGUkbyksJChsaWI6bGliJT0lKSk6IFwKKyAgICQocGF0c3Vic3QgJSwkKG9ianBmeCklJG8sXAorQEAgLTY1LDcgKzY1LDcgQEAKKyAJCQkgICQoYWxsLSQobGliKS1yb3V0aW5lcykpKTsgXAorIAkkJChidWlsZC1leHRyYS1saWIpCisgZW5kZWYKKy1vYmplY3Qtc3VmZml4ZXMtbGVmdCA9ICQoZmlsdGVyLW91dCAub3MgLm9TLCQob2JqZWN0LXN1ZmZpeGVzLSQobGliKSkpCisrb2JqZWN0LXN1ZmZpeGVzLWxlZnQgPSAkKGZpbHRlci1vdXQgLm9zIC5vU1QsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSkKKyBpbmNsdWRlICQocGF0c3Vic3QgJSwkKC4uKW8taXRlcmF0b3IubWssJChvYmplY3Qtc3VmZml4ZXMtbGVmdCkpCisgZW5kaWYKKyAKK0BAIC03Nyw5ICs3Nyw5IEBACisgCSQoYnVpbGQtZXh0cmEtbGliKQorIGVuZGlmCisgCistaWZuZXEgKCwkKGZpbHRlciAub1MsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSkpCistJChvYmpwZngpJChwYXRzdWJzdCAlLCQobGlidHlwZS5vUyksJChsaWI6bGliJT0lKSk6IFwKKy0gICQocGF0c3Vic3QgJSwkKG9ianBmeCklLm9TLFwKKytpZm5lcSAoLCQoZmlsdGVyIC5vU1QsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSkpCisrJChvYmpwZngpJChwYXRzdWJzdCAlLCQobGlidHlwZS5vU1QpLCQobGliOmxpYiU9JSkpOiBcCisrICAkKHBhdHN1YnN0ICUsJChvYmpwZngpJS5vU1QsXAorIAkgICAgICQoZmlsdGVyICQoJChsaWIpLXN0YXRpYy1vbmx5LXJvdXRpbmVzKSxcCisgCQkgICAgICAkKGFsbC0kKGxpYiktcm91dGluZXMpKSkKKyAJJChidWlsZC1leHRyYS1saWIpCitkaWZmIC1hdXIgZ2xpYmMtMi4zLjUvbnB0bC9NYWtlZmlsZSBnbGliYy0yLjMuNS1jeWd3aW4vbnB0bC9NYWtlZmlsZQorLS0tIGdsaWJjLTIuMy41L25wdGwvTWFrZWZpbGUJMjAwNS0wMi0xNiAwOTo0NTo1Ni4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjMuNS1jeWd3aW4vbnB0bC9NYWtlZmlsZQkyMDA1LTA1LTExIDA4OjI2OjAxLjgxMjUwMDAwMCArMDIwMAorQEAgLTM3NSw3ICszNzUsNyBAQAorIAorICQoaW5zdF9saWJkaXIpL2xpYnB0aHJlYWQuc286ICQoY29tbW9uLW9ianBmeClmb3JtYXQubGRzIFwKKyAJCQkgICAgICAkKG9ianBmeClsaWJwdGhyZWFkLnNvJChsaWJwdGhyZWFkLnNvLXZlcnNpb24pIFwKKy0JCQkgICAgICAkKGluc3RfbGliZGlyKS8kKHBhdHN1YnN0ICUsJChsaWJ0eXBlLm9TKSxcCisrCQkJICAgICAgJChpbnN0X2xpYmRpcikvJChwYXRzdWJzdCAlLCQobGlidHlwZS5vU1QpLFwKKyAJCQkJCQkJJChsaWJwcmVmaXgpcHRocmVhZCkgXAorIAkJCSAgICAgICQoK2ZvcmNlKQorIAkoZWNobyAnLyogR05VIGxkIHNjcmlwdCc7XAorQEAgLTM4Myw3ICszODMsNyBAQAorIAkgZWNobyAnICAgdGhlIHN0YXRpYyBsaWJyYXJ5LCBzbyB0cnkgdGhhdCBzZWNvbmRhcmlseS4gICovJztcCisgCSBjYXQgJDw7IFwKKyAJIGVjaG8gJ0dST1VQICggJChzbGliZGlyKS9saWJwdGhyZWFkLnNvJChsaWJwdGhyZWFkLnNvLXZlcnNpb24pJyBcCistCSAgICAgICckKGxpYmRpcikvJChwYXRzdWJzdCAlLCQobGlidHlwZS5vUyksJChsaWJwcmVmaXgpcHRocmVhZCknXAorKwkgICAgICAnJChsaWJkaXIpLyQocGF0c3Vic3QgJSwkKGxpYnR5cGUub1NUKSwkKGxpYnByZWZpeClwdGhyZWFkKSdcCisgCSAgICAgICcpJyBcCisgCSkgPiAkQC5uZXcKKyAJbXYgLWYgJEAubmV3ICRACitkaWZmIC1hdXIgZ2xpYmMtMi4zLjUvc3lzZGVwcy9zcGFyYy9zcGFyYzMyL3NwYXJjdjkvTWFrZWZpbGUgZ2xpYmMtMi4zLjUtY3lnd2luL3N5c2RlcHMvc3BhcmMvc3BhcmMzMi9zcGFyY3Y5L01ha2VmaWxlCistLS0gZ2xpYmMtMi4zLjUvc3lzZGVwcy9zcGFyYy9zcGFyYzMyL3NwYXJjdjkvTWFrZWZpbGUJMjAwNC0wOC0xNiAwODo0NjoxNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjMuNS1jeWd3aW4vc3lzZGVwcy9zcGFyYy9zcGFyYzMyL3NwYXJjdjkvTWFrZWZpbGUJMjAwNS0wNS0xMSAwODoyNjoyNS45Mzc1MDAwMDAgKzAyMDAKK0BAIC0xMCw0ICsxMCw0IEBACisgQVNGTEFHUy0ub3AgKz0gLVdhLC1BdjlhCisgQVNGTEFHUy0ub2cgKz0gLVdhLC1BdjlhCisgQVNGTEFHUy0ub2IgKz0gLVdhLC1BdjlhCistQVNGTEFHUy0ub1MgKz0gLVdhLC1BdjlhCisrQVNGTEFHUy0ub1NUICs9IC1XYSwtQXY5YQorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgUC4gSi4gRGF5IDxycGpkYXlAbWluZHNwcmluZy5jb20+CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi41LzExMC1jb25maWd1cmUtYXBwbGUtYXMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi41LzExMC1jb25maWd1cmUtYXBwbGUtYXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhhMTMyNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjUvMTEwLWNvbmZpZ3VyZS1hcHBsZS1hcy5wYXRjaApAQCAtMCwwICsxLDI1IEBACitodHRwOi8vaW4zd3d3LmVwZmwuY2gvfnNjaGFmZm5lL2dsaWJjLWNvbmZpZ3VyZS1hcHBsZS1hcy5wYXRjaAoraHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9tbC9jcm9zc2djYy8yMDA0LTAyL21zZzAwMTUxLmh0bWwKKworVGhlIGZvbGxvd2luZyBtYWtlcyBpdCBwb3NzaWJsZSB0byBjb25maWd1cmUgZ2xpYmMtMi4zLjIgb24gTWFjIE9TIFgsCit3aGVyZSB0aGUgYXNzZW1ibGVyIGJ1dCBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlIC0tdmVyc2lvbiBmbGFnLgorCitGaXhlcyB0aGUgc3ltcHRvbQorY2hlY2tpbmcgd2hldGhlciBsZCBpcyBHTlUgbGQuLi4gbm8KK2NoZWNraW5nIGZvciAvdXNyL2xpYmV4ZWMvZ2NjL2Rhcndpbi9wcGMvYXMuLi4gL3Vzci9saWJleGVjL2djYy9kYXJ3aW4vcHBjL2FzCitjaGVja2luZyB2ZXJzaW9uIG9mIC91c3IvbGliZXhlYy9nY2MvZGFyd2luL3BwYy9hcy4uLiAKKzxQQVVTRVMgSEVSRSBBTkQgSlVTVCBTSVRTIFRIRVJFIERPSU5HIE5PVEhJTkc+CisKKy0tLSBnbGliYy0yLjMuMi9jb25maWd1cmV+CVdlZCBGZWIgMjYgMDk6MjA6NDggMjAwMworKysrIGdsaWJjLTIuMy4yL2NvbmZpZ3VyZQlGcmkgRmViIDI3IDEzOjEyOjUzIDIwMDQKK0BAIC00MDM5LDcgKzQwMzksNyBAQAorICAgIyBGb3VuZCBpdCwgbm93IGNoZWNrIHRoZSB2ZXJzaW9uLgorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHZlcnNpb24gb2YgJEFTIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nIHZlcnNpb24gb2YgJEFTLi4uICRFQ0hPX0MiID4mNgorLSAgYWNfcHJvZ192ZXJzaW9uPWAkQVMgLS12ZXJzaW9uIDI+JjEgfCBzZWQgLW4gJ3MvXi4qR05VIGFzc2VtYmxlci4qIFwoWzAtOV0qXC5bMC05Ll0qXCkuKiQvXDEvcCdgCisrICBhY19wcm9nX3ZlcnNpb249YCRBUyAtdiA8L2Rldi9udWxsIDI+JjEgfCBzZWQgLW4gJ3MvXi4qR05VIGFzc2VtYmxlci4qIFwoWzAtOV0qXC5bMC05Ll0qXCkuKiQvXDEvcCdgCisgICBjYXNlICRhY19wcm9nX3ZlcnNpb24gaW4KKyAgICAgJycpIGFjX3Byb2dfdmVyc2lvbj0idi4gPy4/PywgYmFkIjsgYWNfdmVyY19mYWlsPXllczs7CisgICAgIDIuMVszLTldKikKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFAuIEouIERheSA8cnBqZGF5QG1pbmRzcHJpbmcuY29tPgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNS8xMjAtZml4LXByNjMxLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNS8xMjAtZml4LXByNjMxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNjg4ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi41LzEyMC1maXgtcHI2MzEucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorRnJvbSBkYW5rQGtlZ2VsLmNvbQorV2VkIEp1biAxNSAwOToxMjo0MyBQRFQgMjAwNQorCitGaXhlcworCitidWlsZC1nbGliYy9saWJjLmEobnNzd2l0Y2gubykoLmRhdGErMHg2NCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9uc3NfZmlsZXNfZ2V0YWxpYXNlbnRfcicKK2J1aWxkLWdsaWJjL2xpYmMuYShuc3N3aXRjaC5vKSguZGF0YSsweDZjKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX25zc19maWxlc19lbmRhbGlhc2VudCcKKy4uLiA1MyBsaW5lcyBkZWxldGVkIC4uLgorYnVpbGQtZ2xpYmMvbGliYy5hKG5zc3dpdGNoLm8pKC5kYXRhKzB4MjFjKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX25zc19maWxlc19nZXRzcG5hbV9yJworY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKK21ha2VbMl06ICoqKiBbL2J1aWxkL2djYy0zLjQuMy1nbGliYy0yLjMuNS1oZHJzLTIuNi4xMS4yL2k2ODYtdW5rbm93bi1saW51eC1nbnUvYnVpbGQtZ2xpYmMvZWxmL2xkY29uZmlnXSBFcnJvciAxCisKK3doZW4gYnVpbGRpbmcgZ2xpYmMgd2l0aCAtLWVuYWJsZS1zdGF0aWMtbnNzLgorCitTZWUgaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NjMxCisKKy0tLSBnbGliYy0yLjMuNS9NYWtlY29uZmlnLm9sZAlXZWQgSnVuIDE1IDA4OjEzOjEyIDIwMDUKKysrKyBnbGliYy0yLjMuNS9NYWtlY29uZmlnCVdlZCBKdW4gMTUgMDg6MTM6MTQgMjAwNQorQEAgLTUxMCw3ICs1MTAsNyBAQAorIAorICMgVGhlIHN0YXRpYyBsaWJyYXJpZXMuCisgaWZlcSAoeWVzLCQoYnVpbGQtc3RhdGljKSkKKy1saW5rLWxpYmMtc3RhdGljID0gJChjb21tb24tb2JqcGZ4KWxpYmMuYSAkKHN0YXRpYy1nbnVsaWIpICQoY29tbW9uLW9ianBmeClsaWJjLmEKKytsaW5rLWxpYmMtc3RhdGljID0gJChjb21tb24tb2JqcGZ4KWxpYmMuYSAkKHN0YXRpYy1nbnVsaWIpICQob3RoZXJsaWJzKSAkKGNvbW1vbi1vYmpwZngpbGliYy5hCisgZWxzZQorIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgIyBXZSBjYW4gdHJ5IHRvIGxpbmsgdGhlIHByb2dyYW1zIHdpdGggbGliKl9waWMuYS4uLgorLS0tIGdsaWJjLTIuMy41L2VsZi9NYWtlZmlsZS5vbGQJV2VkIEp1biAxNSAwNzo0Njo0OSAyMDA1CisrKysgZ2xpYmMtMi4zLjUvZWxmL01ha2VmaWxlCVdlZCBKdW4gMTUgMDg6MTQ6MDAgMjAwNQorQEAgLTEyMCw2ICsxMjAsMTMgQEAKKyBpbnN0YWxsLWJpbi1zY3JpcHQgPSBsZGQKKyBlbmRpZgorIAorK2lmZXEgKHllcywkKGJ1aWxkLXN0YXRpYy1uc3MpKQorK25zc29iamRpciA6PSAkKHBhdHN1YnN0IC4uLyQoc3ViZGlyKSwuLCQoY29tbW9uLW9ianBmeCluc3MpCisrcmVzb2x2b2JqZGlyIDo9ICQocGF0c3Vic3QgLi4vJChzdWJkaXIpLC4sJChjb21tb24tb2JqcGZ4KXJlc29sdikKKytvdGhlcmxpYnMgKz0gJChuc3NvYmpkaXIpL2xpYm5zc19maWxlcy5hICQocmVzb2x2b2JqZGlyKS9saWJuc3NfZG5zLmEgXAorKwkgICAgICQocmVzb2x2b2JqZGlyKS9saWJyZXNvbHYuYQorK2VuZGlmCisrCisgb3RoZXJzCQk9IHNwcm9mIHNsbgorIGluc3RhbGwtYmluCT0gc3Byb2YKKyBvdGhlcnMtc3RhdGljICAgPSBzbG4KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFAuIEouIERheSA8cnBqZGF5QG1pbmRzcHJpbmcuY29tPgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNS8xMzAtaTY4Ni1hc3NlbWJsZXIucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi41LzEzMC1pNjg2LWFzc2VtYmxlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTA0ZWZiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNS8xMzAtaTY4Ni1hc3NlbWJsZXIucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorMjAwNy0wMi0xNSAgS2hlbSBSYWogIDxrcmFqQHh4eHh4eHh4eHg+CisKKyAgICAgICAqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvc3lzZGVwLmg6IFJlLWRlZmluZSBfX2k2ODYuCisgICAgICAgKiBucHRsL3N5c2RlcHMvcHRocmVhZC9wdC1pbml0ZmluaS5jOiBEaXR0by4KKworCisKK0luZGV4OiBnbGliYy0yLjQvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdsaWJjLTIuNC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L3N5c2RlcC5oCShyZXZpc2lvbiAxNDY5KQorKysrIGdsaWJjLTIuNC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L3N5c2RlcC5oCSh3b3JraW5nIGNvcHkpCitAQCAtMjksNiArMjksMTAgQEAKKyAjaW5jbHVkZSA8ZGwtc3lzZGVwLmg+CisgI2luY2x1ZGUgPHRscy5oPgorIAorKyNpZiBkZWZpbmVkIF9faTY4NiAmJiBkZWZpbmVkIF9fQVNTRU1CTEVSX18KKysjdW5kZWYgX19pNjg2CisrI2RlZmluZSBfX2k2ODYgX19pNjg2CisrI2VuZGlmCisgCisgLyogRm9yIExpbnV4IHdlIGNhbiB1c2UgdGhlIHN5c3RlbSBjYWxsIHRhYmxlIGluIHRoZSBoZWFkZXIgZmlsZQorIAkvdXNyL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCitJbmRleDogZ2xpYmMtMi40L25wdGwvc3lzZGVwcy9wdGhyZWFkL3B0LWluaXRmaW5pLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbGliYy0yLjQvbnB0bC9zeXNkZXBzL3B0aHJlYWQvcHQtaW5pdGZpbmkuYwkocmV2aXNpb24gMTQ2OSkKKysrKyBnbGliYy0yLjQvbnB0bC9zeXNkZXBzL3B0aHJlYWQvcHQtaW5pdGZpbmkuYwkod29ya2luZyBjb3B5KQorQEAgLTQ1LDYgKzQ1LDExIEBACisgLyogRW1iZWQgYW4gI2luY2x1ZGUgdG8gcHVsbCBpbiB0aGUgYWxpZ25tZW50IGFuZCAuZW5kIGRpcmVjdGl2ZXMuICovCisgYXNtICgiXG4jaW5jbHVkZSBcImRlZnMuaFwiIik7CisgCisrYXNtICgiXG4jaWYgZGVmaW5lZCBfX2k2ODYgJiYgZGVmaW5lZCBfX0FTU0VNQkxFUl9fIik7CisrYXNtICgiXG4jdW5kZWYgX19pNjg2Iik7CisrYXNtICgiXG4jZGVmaW5lIF9faTY4NiBfX2k2ODYiKTsKKythc20gKCJcbiNlbmRpZiIpOworKworIC8qIFRoZSBpbml0aWFsIGNvbW1vbiBjb2RlIGVuZHMgaGVyZS4gKi8KKyBhc20gKCJcbi8qQEhFQURFUl9FTkRTKi8iKTsKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjUvMTQwLWkzODYtcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNS8xNDAtaTM4Ni1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ5ODIxZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjUvMTQwLWkzODYtcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5LnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKKyhDKSAyMDA3IFlhbm4gRS4gTU9SSU4gPHlhbm4ubW9yaW4uMTk5OEBhbmNpZW5zLmVuaWIuZnI+CitMaWNlbnNlOiBMR1BMIHYyLjEKKworU2h1dCBvZmYgYSBzdHVwaWQgd2FybmluZzogcHJlZmZlcmVkLXN0YWNrLWJvdW5kYXJ5IG11c3QgYmUgYmV0d2VlbiA0IGFkIDEyLAorYW5kIDIgaXMgbm90LgorCitkaWZmIC1kdXIgZ2xpYmMtMi41Lm9yaWcvc3lzZGVwcy9pMzg2L01ha2VmaWxlIGdsaWJjLTIuNS9zeXNkZXBzL2kzODYvTWFrZWZpbGUKKy0tLSBnbGliYy0yLjUub3JpZy9zeXNkZXBzL2kzODYvTWFrZWZpbGUJMjAwNS0wMy0wNiAwMToxODoxNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjUvc3lzZGVwcy9pMzg2L01ha2VmaWxlCTIwMDctMDUtMjcgMTc6NDk6MzcuMDAwMDAwMDAwICswMjAwCitAQCAtMzYsNyArMzYsNyBAQAorIGlmZXEgKCQoc3ViZGlyKSxjc3UpCisgc3lzZGVwLUNGTEFHUyArPSAtbXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeT00CisgZWxzZQorLXN5c2RlcC1DRkxBR1MgKz0gLW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9MgorK3N5c2RlcC1DRkxBR1MgKz0gLW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9NAorICMgTGlrZXdpc2UsIGFueSBmdW5jdGlvbiB3aGljaCBjYWxscyB1c2VyIGNhbGxiYWNrcworIHVzZXMtY2FsbGJhY2tzICs9IC1tcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5PTQKKyAjIExpa2V3aXNlLCBhbnkgc3RhY2sgYWxpZ25tZW50IHRlc3RzCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi41LzE1MC1hbHBoYS1hc21fcGFnZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjUvMTUwLWFscGhhLWFzbV9wYWdlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxOThiMzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi41LzE1MC1hbHBoYS1hc21fcGFnZS5wYXRjaApAQCAtMCwwICsxLDI2IEBACisyMDA4LTA2LTA3ICBNaWtlIEZyeXNpbmdlciAgPHZhcGllckBnZW50b28ub3JnPgorCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXMvdXNlci5oOiBDb3B5IHBhZ2UuaCBkZWZpbml0aW9ucworCWZyb20gdGhlIGtlcm5lbCBoZWFkZXIgdG8gc3lzL3VzZXIuaCBhbmQgcmVtb3ZlIHRoZSAjaW5jbHVkZSBvZgorCXN5cy91c2VyLmguCisKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5cy91c2VyLmgKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5cy91c2VyLmgKK0BAIC0yMyw3ICsyMyw2IEBACisgICAgb25seS4gRG9uJ3QgcmVhZCB0b28gbXVjaCBpbnRvIGl0LiBEb24ndCB1c2UgaXQgZm9yIGFueXRoaW5nIG90aGVyCisgICAgdGhhbiBnZGIvc3RyYWNlIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuICovCisgCistI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisgI2luY2x1ZGUgPGFzbS9yZWcuaD4KKyAKKyBzdHJ1Y3QgdXNlcgorQEAgLTQxLDYgKzQwLDkgQEAgc3RydWN0IHVzZXIKKyAgIGNoYXIgdV9jb21tWzMyXTsJCQkJLyogdXNlciBjb21tYW5kIG5hbWUgKi8KKyB9OworIAorKyNkZWZpbmUgUEFHRV9TSElGVAkJMTMKKysjZGVmaW5lIFBBR0VfU0laRQkJKDEgPDwgUEFHRV9TSElGVCkKKysjZGVmaW5lIFBBR0VfTUFTSwkJKH4oUEFHRV9TSVpFLTEpKQorICNkZWZpbmUgTkJQRwkJCVBBR0VfU0laRQorICNkZWZpbmUgVVBBR0VTCQkJMQorICNkZWZpbmUgSE9TVF9URVhUX1NUQVJUX0FERFIJKHUuc3RhcnRfY29kZSkKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjUvMTYwLXVzZV9zaG9ydF9mb3JfZm5zdHN3LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNS8xNjAtdXNlX3Nob3J0X2Zvcl9mbnN0c3cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU4NDlmYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjUvMTYwLXVzZV9zaG9ydF9mb3JfZm5zdHN3LnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK09yaWdpbmFsIHBhdGNoIGZyb20gSC5KLiBMdSwgYXMgcmVwb3J0ZWQgdGhlcmU6CitodHRwOi8vd3d3Lm5hYmJsZS5jb20vUEFUQ0g6LVVzZS1zaG9ydC1mb3ItZm5zdHN3LXRkMTQ3NzUxNzEuaHRtbAorCitmbnN0c3cgc3RvcmVzIDE2Yml0IGludG8gJWF4LiBUaGUgdXBwZXIgMTZiaXQgb2YgJWVheCBpcyB1bmNoYW5nZWQuCitUaGUgbmV3IGFzc2VtYmxlciAoYmludXRpbHMtMi4xOC41MC4wLjQgYW5kIHVwKSB3aWxsIGRpc2FsbG93ICJmbnN0c3cgJWVheCIuCisKK2RpZmYgLWR1ciBnbGliYy0yLjYuMS5vcmlnL3N5c2RlcHMvaTM4Ni9mcHUvZnRlc3RleGNlcHQuYyBnbGliYy0yLjYuMS9zeXNkZXBzL2kzODYvZnB1L2Z0ZXN0ZXhjZXB0LmMKKy0tLSBnbGliYy0yLjYuMS5vcmlnL3N5c2RlcHMvaTM4Ni9mcHUvZnRlc3RleGNlcHQuYwkyMDA0LTAzLTA1IDExOjE0OjQ4LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuNi4xL3N5c2RlcHMvaTM4Ni9mcHUvZnRlc3RleGNlcHQuYwkyMDA4LTA2LTI0IDEwOjU2OjE0LjAwMDAwMDAwMCArMDIwMAorQEAgLTI2LDcgKzI2LDcgQEAKKyBpbnQKKyBmZXRlc3RleGNlcHQgKGludCBleGNlcHRzKQorIHsKKy0gIGludCB0ZW1wOworKyAgc2hvcnQgdGVtcDsKKyAgIGludCB4dGVtcCA9IDA7CisgCisgICAvKiBHZXQgY3VycmVudCBleGNlcHRpb25zLiAgKi8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjUvMTcwLWFscGhhLWFzbV9lbGYucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi41LzE3MC1hbHBoYS1hc21fZWxmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYTVjOGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi41LzE3MC1hbHBoYS1hc21fZWxmLnBhdGNoCkBAIC0wLDAgKzEsMTk0IEBACitzaW5jZSB0aGUga2VybmVsIG5vIGxvbmdlciBwcm92aWRlcyBhc20vZWxmLmgsIHRoZSBzeXMvcHJvY2ZzLmggZnJvbSB0aGUgCitjb21tb24gY29kZSwgYWxwaGEsIGFuZCBzaCBmYWlsIHdoZW4gdXNlZC4gIHRoaXMgc2hvdWxkIHRoaW5ncyB1cC4KKy1taWtlCisKKzIwMDgtMDYtMDcgIE1pa2UgRnJ5c2luZ2VyICA8dmFwaWVyQGdlbnRvby5vcmc+CisKKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5cy9wcm9jZnMuaDogUmVwbGFjZSB3aXRoICNlcnJvciBzdHViLgorCSogc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzL3Byb2Nmcy5oOiBDb3B5IHNvbWUgYXNtL2VsZi5oCisJZGVmaW5pdGlvbnMgZnJvbSB0aGUga2VybmVsIGhlYWRlciB0byBzeXMvcHJvY2ZzLmggYW5kIHJlbW92ZSB0aGUKKwkjaW5jbHVkZSBvZiBhc20vZWxmLmguCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXMvcHJvY2ZzLmg6IExpa2V3aXNlLgorCisqQXR0YWNobWVudDogc2lnbmF0dXJlLmFzYyA8bXNnMDAwMTIvc2lnbmF0dXJlLmFzYz4qCisvRGVzY3JpcHRpb246LyBUaGlzIGlzIGEgZGlnaXRhbGx5IHNpZ25lZCBtZXNzYWdlIHBhcnQuCisKKzIwMDgtMDYtMDcgIE1pa2UgRnJ5c2luZ2VyICA8dmFwaWVyQGdlbnRvby5vcmc+CisKKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5cy9wcm9jZnMuaDogUmVwbGFjZSB3aXRoICNlcnJvciBzdHViLgorCSogc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzL3Byb2Nmcy5oOiBDb3B5IHNvbWUgYXNtL2VsZi5oCisJZGVmaW5pdGlvbnMgZnJvbSB0aGUga2VybmVsIGhlYWRlciB0byBzeXMvcHJvY2ZzLmggYW5kIHJlbW92ZSB0aGUKKwkjaW5jbHVkZSBvZiBhc20vZWxmLmguCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXMvcHJvY2ZzLmg6IExpa2V3aXNlLgorCistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXMvcHJvY2ZzLmgKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5cy9wcm9jZnMuaAorQEAgLTI5LDEwICsyOSwyMyBAQAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3Vjb250ZXh0Lmg+CisgI2luY2x1ZGUgPHN5cy91c2VyLmg+CistI2luY2x1ZGUgPGFzbS9lbGYuaD4KKyAKKyBfX0JFR0lOX0RFQ0xTCisgCisrLyoKKysgKiBUaGUgT1NGLzEgdmVyc2lvbiBvZiA8c3lzL3Byb2Nmcy5oPiBtYWtlcyBncmVnc2V0X3QgNDYgZW50cmllcyBsb25nLgorKyAqIEkgaGF2ZSBubyBpZGVhIHdoeSB0aGF0IGlzIHNvLiAgRm9yIG5vdywgd2UganVzdCBsZWF2ZSBpdCBhdCAzMworKyAqICgzMiBnZW5lcmFsIHJlZ3MgKyBwcm9jZXNzb3Igc3RhdHVzIHdvcmQpLgorKyAqLworKyNkZWZpbmUgRUxGX05HUkVHICAzMworKyNkZWZpbmUgRUxGX05GUFJFRyAzMgorKworK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OworK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisrCisrdHlwZWRlZiBkb3VibGUgZWxmX2ZwcmVnX3Q7CisrdHlwZWRlZiBlbGZfZnByZWdfdCBlbGZfZnByZWdzZXRfdFtFTEZfTkZQUkVHXTsKKysKKyBzdHJ1Y3QgZWxmX3NpZ2luZm8KKyAgIHsKKyAgICAgaW50IHNpX3NpZ25vOwkJCS8qIFNpZ25hbCBudW1iZXIuICAqLworLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzL3Byb2Nmcy5oCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXMvcHJvY2ZzLmgKK0BAIC0yOSwxMCArMjksMTkgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy91Y29udGV4dC5oPgorICNpbmNsdWRlIDxzeXMvdXNlci5oPgorLSNpbmNsdWRlIDxhc20vZWxmLmg+CisgCisgX19CRUdJTl9ERUNMUworIAorKy8qCisrICogRUxGIHJlZ2lzdGVyIGRlZmluaXRpb25zLi4uCisrICovCisrdHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7CisrCisrI2RlZmluZSBFTEZfTkdSRUcgKHNpemVvZiAoc3RydWN0IHB0X3JlZ3MpIC8gc2l6ZW9mKGVsZl9ncmVnX3QpKQorK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisrCisrdHlwZWRlZiBzdHJ1Y3QgdXNlcl9mcHVfc3RydWN0IGVsZl9mcHJlZ3NldF90OworKworIHN0cnVjdCBlbGZfc2lnaW5mbworICAgeworICAgICBpbnQgc2lfc2lnbm87CQkJLyogU2lnbmFsIG51bWJlci4gICovCistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zeXMvcHJvY2ZzLmgKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5cy9wcm9jZnMuaAorQEAgLTEsMTE1ICsxLDIgQEAKKy0vKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCistCistICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCistICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorLSAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorLSAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCistICAgMDIxMTEtMTMwNyBVU0EuICAqLworLQorLSNpZm5kZWYgX1NZU19QUk9DRlNfSAorLSNkZWZpbmUgX1NZU19QUk9DRlNfSAkxCistCistLyogVGhpcyBpcyBzb21laG93IG1vZGVsbGVkIGFmdGVyIHRoZSBmaWxlIG9mIHRoZSBzYW1lIG5hbWUgb24gU3lzVnI0CistICAgc3lzdGVtcy4gIEl0IHByb3ZpZGVzIGEgZGVmaW5pdGlvbiBvZiB0aGUgY29yZSBmaWxlIGZvcm1hdCBmb3IgRUxGCistICAgdXNlZCBvbiBMaW51eC4gICovCistCistI2luY2x1ZGUgPGZlYXR1cmVzLmg+CistI2luY2x1ZGUgPHNpZ25hbC5oPgorLSNpbmNsdWRlIDxzeXMvdGltZS5oPgorLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaW5jbHVkZSA8c3lzL3Vjb250ZXh0Lmg+CistI2luY2x1ZGUgPHN5cy91c2VyLmg+CistI2luY2x1ZGUgPGFzbS9lbGYuaD4KKy0KKy1fX0JFR0lOX0RFQ0xTCistCistc3RydWN0IGVsZl9zaWdpbmZvCistICB7CistICAgIGludCBzaV9zaWdubzsJCQkvKiBTaWduYWwgbnVtYmVyLiAgKi8KKy0gICAgaW50IHNpX2NvZGU7CQkJLyogRXh0cmEgY29kZS4gICovCistICAgIGludCBzaV9lcnJubzsJCQkvKiBFcnJuby4gICovCistICB9OworLQorLS8qIERlZmluaXRpb25zIHRvIGdlbmVyYXRlIEludGVsIFNWUjQtbGlrZSBjb3JlIGZpbGVzLiAgVGhlc2UgbW9zdGx5CistICAgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyB0aGUgU1ZSNCB0eXBlcyB3aXRoICJlbGZfIiB0YWNrZWQgb24gdGhlCistICAgZnJvbnQgdG8gcHJldmVudCBjbGFzaGVzIHdpdGggbGludXggZGVmaW5pdGlvbnMsIGFuZCB0aGUgdHlwZWRlZgorLSAgIGZvcm1zIGhhdmUgYmVlbiBhdm9pZGVkLiAgVGhpcyBpcyBtb3N0bHkgbGlrZSB0aGUgU1ZSNCBzdHJ1Y3R1cmUsCistICAgYnV0IG1vcmUgTGludXh5LCB3aXRoIHRoaW5ncyB0aGF0IExpbnV4IGRvZXMgbm90IHN1cHBvcnQgYW5kIHdoaWNoCistICAgZ2RiIGRvZXNuJ3QgcmVhbGx5IHVzZSBleGNsdWRlZC4gIEZpZWxkcyBwcmVzZW50IGJ1dCBub3QgdXNlZCBhcmUKKy0gICBtYXJrZWQgd2l0aCAiWFhYIi4gICovCistc3RydWN0IGVsZl9wcnN0YXR1cworLSAgeworLSNpZiAwCistICAgIGxvbmcgaW50IHByX2ZsYWdzOwkJCS8qIFhYWCBQcm9jZXNzIGZsYWdzLiAgKi8KKy0gICAgc2hvcnQgaW50IHByX3doeTsJCQkvKiBYWFggUmVhc29uIGZvciBwcm9jZXNzIGhhbHQuICAqLworLSAgICBzaG9ydCBpbnQgcHJfd2hhdDsJCQkvKiBYWFggTW9yZSBkZXRhaWxlZCByZWFzb24uICAqLworLSNlbmRpZgorLSAgICBzdHJ1Y3QgZWxmX3NpZ2luZm8gcHJfaW5mbzsJCS8qIEluZm8gYXNzb2NpYXRlZCB3aXRoIHNpZ25hbC4gICovCistICAgIHNob3J0IGludCBwcl9jdXJzaWc7CQkvKiBDdXJyZW50IHNpZ25hbC4gICovCistICAgIHVuc2lnbmVkIGxvbmcgaW50IHByX3NpZ3BlbmQ7CS8qIFNldCBvZiBwZW5kaW5nIHNpZ25hbHMuICAqLworLSAgICB1bnNpZ25lZCBsb25nIGludCBwcl9zaWdob2xkOwkvKiBTZXQgb2YgaGVsZCBzaWduYWxzLiAgKi8KKy0jaWYgMAorLSAgICBzdHJ1Y3Qgc2lnYWx0c3RhY2sgcHJfYWx0c3RhY2s7CS8qIEFsdGVybmF0ZSBzdGFjayBpbmZvLiAgKi8KKy0gICAgc3RydWN0IHNpZ2FjdGlvbiBwcl9hY3Rpb247CQkvKiBTaWduYWwgYWN0aW9uIGZvciBjdXJyZW50IHNpZy4gICovCistI2VuZGlmCistICAgIF9fcGlkX3QgcHJfcGlkOworLSAgICBfX3BpZF90IHByX3BwaWQ7CistICAgIF9fcGlkX3QgcHJfcGdycDsKKy0gICAgX19waWRfdCBwcl9zaWQ7CistICAgIHN0cnVjdCB0aW1ldmFsIHByX3V0aW1lOwkJLyogVXNlciB0aW1lLiAgKi8KKy0gICAgc3RydWN0IHRpbWV2YWwgcHJfc3RpbWU7CQkvKiBTeXN0ZW0gdGltZS4gICovCistICAgIHN0cnVjdCB0aW1ldmFsIHByX2N1dGltZTsJCS8qIEN1bXVsYXRpdmUgdXNlciB0aW1lLiAgKi8KKy0gICAgc3RydWN0IHRpbWV2YWwgcHJfY3N0aW1lOwkJLyogQ3VtdWxhdGl2ZSBzeXN0ZW0gdGltZS4gICovCistI2lmIDAKKy0gICAgbG9uZyBpbnQgcHJfaW5zdHI7CQkJLyogQ3VycmVudCBpbnN0cnVjdGlvbi4gICovCistI2VuZGlmCistICAgIGVsZl9ncmVnc2V0X3QgcHJfcmVnOwkJLyogR1AgcmVnaXN0ZXJzLiAgKi8KKy0gICAgaW50IHByX2ZwdmFsaWQ7CQkJLyogVHJ1ZSBpZiBtYXRoIGNvcHJvIGJlaW5nIHVzZWQuICAqLworLSAgfTsKKy0KKy0KKy0jZGVmaW5lIEVMRl9QUkFSR1NaICAgICAoODApICAgIC8qIE51bWJlciBvZiBjaGFycyBmb3IgYXJncyAqLworLQorLXN0cnVjdCBlbGZfcHJwc2luZm8KKy0gIHsKKy0gICAgY2hhciBwcl9zdGF0ZTsJCQkvKiBOdW1lcmljIHByb2Nlc3Mgc3RhdGUuICAqLworLSAgICBjaGFyIHByX3NuYW1lOwkJCS8qIENoYXIgZm9yIHByX3N0YXRlLiAgKi8KKy0gICAgY2hhciBwcl96b21iOwkJCS8qIFpvbWJpZS4gICovCistICAgIGNoYXIgcHJfbmljZTsJCQkvKiBOaWNlIHZhbC4gICovCistICAgIHVuc2lnbmVkIGxvbmcgaW50IHByX2ZsYWc7CQkvKiBGbGFncy4gICovCistICAgIHVuc2lnbmVkIHNob3J0IGludCBwcl91aWQ7CistICAgIHVuc2lnbmVkIHNob3J0IGludCBwcl9naWQ7CistICAgIGludCBwcl9waWQsIHByX3BwaWQsIHByX3BncnAsIHByX3NpZDsKKy0gICAgLyogTG90cyBtaXNzaW5nICovCistICAgIGNoYXIgcHJfZm5hbWVbMTZdOwkJCS8qIEZpbGVuYW1lIG9mIGV4ZWN1dGFibGUuICAqLworLSAgICBjaGFyIHByX3BzYXJnc1tFTEZfUFJBUkdTWl07CS8qIEluaXRpYWwgcGFydCBvZiBhcmcgbGlzdC4gICovCistICB9OworLQorLS8qIEFkZHJlc3Nlcy4gICovCistdHlwZWRlZiB2b2lkICpwc2FkZHJfdDsKKy0KKy0vKiBSZWdpc3RlciBzZXRzLiAgTGludXggaGFzIGRpZmZlcmVudCBuYW1lcy4gICovCistdHlwZWRlZiBncmVnc2V0X3QgcHJncmVnc2V0X3Q7CistdHlwZWRlZiBmcHJlZ3NldF90IHByZnByZWdzZXRfdDsKKy0KKy0vKiBXZSBkb24ndCBoYXZlIGFueSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHByb2Nlc3NlcyBhbmQgdGhyZWFkcywKKy0gICB0aGVyZWZvcmUgaGFiZSBvbmx5IGluZSBQSUQgdHlwZS4gICovCistdHlwZWRlZiBfX3BpZF90IGx3cGlkX3Q7CistCistCistdHlwZWRlZiBzdHJ1Y3QgZWxmX3Byc3RhdHVzIHByc3RhdHVzX3Q7CistdHlwZWRlZiBzdHJ1Y3QgZWxmX3BycHNpbmZvIHBycHNpbmZvX3Q7CistCistX19FTkRfREVDTFMKKy0KKy0jZW5kaWYJLyogc3lzL3Byb2Nmcy5oICovCisrLyogc3lzL3Byb2Nmcy5oIGlzIGFyY2hpdGVjdHVyZSBzcGVjaWZpYy4gICovCisrI2Vycm9yICJUaGlzIGZpbGUgbXVzdCBiZSBzdXBwbGllZCBieSBldmVyeSBMaW51eCBhcmNoaXRlY3R1cmUuIgorCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi41LzE4MC1hbHBoYS1jZmkucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi41LzE4MC1hbHBoYS1jZmkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFlZmQ3NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjUvMTgwLWFscGhhLWNmaS5wYXRjaApAQCAtMCwwICsxLDI1IEBACistLS0gbGliYy9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5c2RlcC1jYW5jZWwuaCAgICAyMDA2LzEwLzI5IDIxOjQ4OjA2ICAgICAxLjYKKysrKyBsaWJjL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzZGVwLWNhbmNlbC5oICAgIDIwMDcvMDMvMTMgMjE6Mjg6MDMgICAgIDEuNworQEAgLTU1LDYgKzU1LDcgQEAKKyAJYm5lCWEzLCBTWVNDQUxMX0VSUk9SX0xBQkVMOwkJCVwKKyBfX0xBQkVMKCRwc2V1ZG9fcmV0KQkJCQkJCVwKKyAJLnN1YnNlY3Rpb24gMjsJCQkJCQlcCisrCWNmaV9zdGFydHByb2M7CQkJCQkJXAorIF9fTEFCRUwoJHBzZXVkb19jYW5jZWwpCQkJCQkJXAorIAlzdWJxCXNwLCA2NCwgc3A7CQkJCQlcCisgCWNmaV9kZWZfY2ZhX29mZnNldCg2NCk7CQkJCQlcCitAQCAtOTAsMTIgKzkxLDEzIEBACisgCWNmaV9kZWZfY2ZhX29mZnNldCgwKTsJCQkJCVwKKyBfX0xBQkVMKCRzeXNjYWxsX2Vycm9yKQkJCQkJCVwKKyAJU1lTQ0FMTF9FUlJPUl9IQU5ETEVSOwkJCQkJXAorKwljZmlfZW5kcHJvYzsJCQkJCQlcCisgCS5wcmV2aW91cworIAorICMgdW5kZWYgUFNFVURPX0VORAorICMgZGVmaW5lIFBTRVVET19FTkQoc3ltKQkJCQkJXAorLQkuc3Vic2VjdGlvbiAyOwkJCQkJCVwKKyAJY2ZpX2VuZHByb2M7CQkJCQkJXAorKwkuc3Vic2VjdGlvbiAyOwkJCQkJCVwKKyAJLnNpemUgc3ltLCAuLXN5bQorIAorICMgZGVmaW5lIFNBVkVfQVJHU18wCS8qIE5vdGhpbmcuICAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNS8xOTAtYWxwaGEtc2lnc3VzcGVuZC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjUvMTkwLWFscGhhLXNpZ3N1c3BlbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFmMWE1ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjUvMTkwLWFscGhhLXNpZ3N1c3BlbmQucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorLS0tIGdsaWJjLTIuNS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zaWdzdXNwZW5kLlMub3JpZwkyMDA2LTEwLTIyIDIyOjE3OjAxLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuNS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zaWdzdXNwZW5kLlMJMjAwNi0xMC0yMiAyMjoxODowNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMSwzICszMSwyMSBAQAorIGxpYmNfaGlkZGVuX2RlZiAoX19zaWdzdXNwZW5kKQorIHdlYWtfYWxpYXMgKF9fc2lnc3VzcGVuZCwgc2lnc3VzcGVuZCkKKyBzdHJvbmdfYWxpYXMgKF9fc2lnc3VzcGVuZCwgX19saWJjX3NpZ3N1c3BlbmQpCisrCisrI2lmbmRlZiBOT19DQU5DRUxMQVRJT04KKysJLmdsb2JsIF9fc2lnc3VzcGVuZF9ub2NhbmNlbDsKKysJLmFsaWduIDQ7CisrCS50eXBlIF9fc2lnc3VzcGVuZF9ub2NhbmNlbCwgQGZ1bmN0aW9uOworKwkudXNlcHYgX19zaWdzdXNwZW5kX25vY2FuY2VsLCBzdGQ7CisrCWNmaV9zdGFydHByb2M7CisrX19MQUJFTChfX3NpZ3N1c3BlbmRfbm9jYW5jZWwpCisrCWxkZ3AgICAgZ3AsIDAocHYpOworKwlQU0VVRE9fUFJPRjsKKysJUFNFVURPX1BSRVBBUkVfQVJHUworKwlsZGEgICAgIHYwLCBTWVNfaWZ5KHNpZ3N1c3BlbmQpOworKwljYWxsX3BhbCBQQUxfY2FsbHN5czsKKysJYm5lICAgICBhMywgU1lTQ0FMTF9FUlJPUl9MQUJFTDsKKysJcmV0OworKwljZmlfZW5kcHJvYzsKKysJLnNpemUgX19zaWdzdXNwZW5kX25vY2FuY2VsLCAuLV9fc2lnc3VzcGVuZF9ub2NhbmNlbAorKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNi4xLzEwMC1jeWd3aW4ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LjEvMTAwLWN5Z3dpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzBjZDdkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNi4xLzEwMC1jeWd3aW4ucGF0Y2gKQEAgLTAsMCArMSwxODcgQEAKK0ZpeGVzCitlbGYvbGlicnRsZC5vczogSW4gZnVuY3Rpb24gYHByb2Nlc3NfZW52dmFycyc6IDogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19hY2Nlc3MnCisuLi4KK3doZW4gYnVpbGRpbmcgZ2xpYmMtMi4zLnggb24gY3lnd2luCisKK0lkZWEgZnJvbQoraHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9tbC9idWctZ2xpYmMvMjAwMi0wMS9tc2cwMDA3MS9nbGliYy0yLjItY3lnaW4tc2hhcmVkLnBhdGNoCitCYXNpY2FsbHksIG1ha2UgZ2xpYmMgdXNlIC5vU1QgYXMgc3VmZml4IGZvciAnb2JqZWN0IHN0YXRpYycKK2luc3RlYWQgb2YgLm9TLCBzaW5jZSBjeWd3aW4gaGFzIHRyb3VibGUgZGlzdGluZ3Vpc2hpbmcgLm9zIGZyb20gLm9TCisoT3JpZ2luYWwgcGF0Y2ggaGFkIC5vbiwgYnV0IC5vU1QgaXMgbW9yZSBtbmVtb25pYyBmb3IgJ29iamVjdCBzdGF0aWMnKQorCitnbGliYy1saW51eHRocmVhZHMtMi4zLjUgYWxzbyByZXF1aXJlcyBhIHBhdGNoLCBzZWUgCisuLi9nbGliYy1saW51eHRocmVhZHMtMi4zLjUvZ2xpYmMtbGludXh0aHJlYWRzLTIuMy41LWN5Z3dpbi5wYXRjaAorCitbIGZvcndhcmQgcG9ydGVkIHRvIGdsaWJjLTIuMy41IGJ5IFBldHIgQ3ZhY2hvdWNlazoKKworTWVzc2FnZS1JRDogPDQyODJGQ0JBLjMwNDAwMDBAdW5pY29udHJvbHMuY3o+CitEYXRlOiBUaHUsIDEyIE1heSAyMDA1IDA4OjUwOjM0ICswMjAwCitGcm9tOiBQZXRyIEN2YWNob3VjZWsgPGN2YWNob3VjZWtAdW5pY29udHJvbHMuY3o+CitUbzogRGFuIEtlZ2VsIDxkYW5rQGtlZ2VsLmNvbT4KK0NDOiAgY3Jvc3NnY2NAc291cmNlcy5yZWRoYXQuY29tCitTdWJqZWN0OiBQYXRjaGVzIHRvIGJ1aWxkIGdjYyAzLjQuMyAvIGdsaWJjIDIuMy41IG9uIGN5Z3dpbgorCitIaSBEYW4sCitmb2xsb3dpbmcgcGF0Y2hlcyBhcmUgbmVlZGVkIHRvIGJ1aWxkIGdjYy0zLjQuMy9nbGliYy0yLjMuNSB0b29sY2hhaW4KK29uIGN5Z3dpbi4gVGVzdGVkIHRvIGJ1aWxkIHRvb2xjaGFpbnMgZm9yIHBvd2VycGMgNjA0IGFuZCA3NTAgdGFyZ2V0cy4KKworLS0gCisgICAgICAgICAgICAgICAgICAgICBQZXRyIEN2YWNob3VjZWsKKyAgICAgICAgICAgICAgICAgICAgIFVuaWNvbnRyb2xzIGEucy4KKyAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudW5pY29udHJvbHMuY3oKK10KKworZGlmZiAtYXVyIGdsaWJjLTIuMy41L01ha2Vjb25maWcgZ2xpYmMtMi4zLjUtY3lnd2luL01ha2Vjb25maWcKKy0tLSBnbGliYy0yLjMuNS9NYWtlY29uZmlnCTIwMDUtMDItMTYgMTE6NTA6MTkuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4zLjUtY3lnd2luL01ha2Vjb25maWcJMjAwNS0wNS0xMSAwODoyNDo1MS4wNDY4NzUwMDAgKzAyMDAKK0BAIC00NzIsNyArNDcyLDcgQEAKKyAjIHJ1biB0aGUgbGlua2VkIHByb2dyYW1zLgorIGxpbmstbGliYyA9IC1XbCwtcnBhdGgtbGluaz0kKHJwYXRoLWxpbmspIFwKKyAJICAgICQoY29tbW9uLW9ianBmeClsaWJjLnNvJChsaWJjLnNvLXZlcnNpb24pIFwKKy0JICAgICQoY29tbW9uLW9ianBmeCkkKHBhdHN1YnN0ICUsJChsaWJ0eXBlLm9TKSxjKSAkKGdudWxpYikKKysJICAgICQoY29tbW9uLW9ianBmeCkkKHBhdHN1YnN0ICUsJChsaWJ0eXBlLm9TVCksYykgJChnbnVsaWIpCisgIyBUaGlzIGlzIGhvdyB0byBmaW5kIGF0IGJ1aWxkLXRpbWUgdGhpbmdzIHRoYXQgd2lsbCBiZSBpbnN0YWxsZWQgdGhlcmUuCisgcnBhdGgtZGlycyA9IG1hdGggZWxmIGRsZmNuIG5zcyBuaXMgcnQgcmVzb2x2IGNyeXB0CisgZW5kaWYKK0BAIC02OTMsNyArNjkzLDcgQEAKKyAjIFRoZSBjb21waWxhdGlvbiBydWxlcyB1c2UgJChDUFBGTEFHUy0ke1NVRkZJWH0pIGFuZCAkKENGTEFHUy0ke1NVRkZJWH0pCisgIyB0byBwYXNzIGRpZmZlcmVudCBmbGFncyBmb3IgZWFjaCBmbGF2b3IuCisgbGlidHlwZXMgPSAkKGZvcmVhY2ggbywkKG9iamVjdC1zdWZmaXhlcy1mb3ItbGliYyksJChsaWJ0eXBlJG8pKQorLWFsbC1vYmplY3Qtc3VmZml4ZXMgOj0gLm8gLm9zIC5vcCAub2cgLm9iIC5vUworK2FsbC1vYmplY3Qtc3VmZml4ZXMgOj0gLm8gLm9zIC5vcCAub2cgLm9iIC5vU1QKKyBvYmplY3Qtc3VmZml4ZXMgOj0KKyBDUFBGTEFHUy0ubyA9ICQocGljLWRlZmF1bHQpCisgQ0ZMQUdTLS5vID0gJChmaWx0ZXIgJWZyYW1lLXBvaW50ZXIsJCgrY2ZsYWdzKSkKK0BAIC03NDksMTQgKzc0OSwxNCBAQAorIAorIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgIyBCdWlsZCBzcGVjaWFsIGxpYnJhcnkgdGhhdCBjb250YWlucyB0aGUgc3RhdGljLW9ubHkgcm91dGluZXMgZm9yIGxpYmMuCistb2JqZWN0LXN1ZmZpeGVzLWZvci1saWJjICs9IC5vUworK29iamVjdC1zdWZmaXhlcy1mb3ItbGliYyArPSAub1NUCisgCisgIyBNdXN0IGJ1aWxkIHRoZSByb3V0aW5lcyBhcyBQSUMsIHRob3VnaCwgYmVjYXVzZSB0aGV5IGNhbiBlbmQgdXAgaW4gKHVzZXJzJykKKyAjIHNoYXJlZCBvYmplY3RzLiAgV2UgZG9uJ3Qgd2FudCB0byB1c2UgQ0ZMQUdTLW9zIGJlY2F1c2UgdXNlcnMgbWF5LCBmb3IKKyAjIGV4YW1wbGUsIG1ha2UgdGhhdCBwcm9jZXNzb3Itc3BlY2lmaWMuCistQ0ZMQUdTLS5vUyA9ICQoQ0ZMQUdTLS5vKSAkKFBJQy1jY2ZsYWcpCistQ1BQRkxBR1MtLm9TID0gJChDUFBGTEFHUy0ubykgLURQSUMgLURMSUJDX05PTlNIQVJFRD0xCistbGlidHlwZS5vUyA9IGxpYiVfbm9uc2hhcmVkLmEKKytDRkxBR1MtLm9TVCA9ICQoQ0ZMQUdTLS5vKSAkKFBJQy1jY2ZsYWcpCisrQ1BQRkxBR1MtLm9TVCA9ICQoQ1BQRkxBR1MtLm8pIC1EUElDIC1ETElCQ19OT05TSEFSRUQ9MQorK2xpYnR5cGUub1NUID0gbGliJV9ub25zaGFyZWQuYQorIGVuZGlmCisgCisgIyBUaGUgYXNzZW1ibGVyIGNhbiBnZW5lcmF0ZSBkZWJ1ZyBpbmZvcm1hdGlvbiB0b28uCitkaWZmIC1hdXIgZ2xpYmMtMi4zLjUvTWFrZXJ1bGVzIGdsaWJjLTIuMy41LWN5Z3dpbi9NYWtlcnVsZXMKKy0tLSBnbGliYy0yLjMuNS9NYWtlcnVsZXMJMjAwNC0xMi0xNSAxOTo1MjozOS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjMuNS1jeWd3aW4vTWFrZXJ1bGVzCTIwMDUtMDUtMTEgMDg6MjU6MzMuNTc4MTI1MDAwICswMjAwCitAQCAtNDE3LDcgKzQxNyw3IEBACisgIyBCb3VuZGVkIHBvaW50ZXIgdGh1bmtzIGFyZSBvbmx5IGJ1aWx0IGZvciAqLm9iCisgZWxpZGUtYnAtdGh1bmtzID0gJChhZGRwcmVmaXggJChicHBmeCksJChicC10aHVua3MpKQorIAorLWVsaWRlLXJvdXRpbmVzLm9TICs9ICQoZmlsdGVyLW91dCAkKHN0YXRpYy1vbmx5LXJvdXRpbmVzKSxcCisrZWxpZGUtcm91dGluZXMub1NUICs9ICQoZmlsdGVyLW91dCAkKHN0YXRpYy1vbmx5LXJvdXRpbmVzKSxcCisgCQkJCSAgJChyb3V0aW5lcykgJChhdXgpICQoc3lzZGVwX3JvdXRpbmVzKSkgXAorIAkJICAgICAkKGVsaWRlLWJwLXRodW5rcykKKyBlbGlkZS1yb3V0aW5lcy5vcyArPSAkKHN0YXRpYy1vbmx5LXJvdXRpbmVzKSAkKGVsaWRlLWJwLXRodW5rcykKK0BAIC05ODEsNyArOTgxLDcgQEAKKyBpbnN0YWxsOiAkKGluc3RfbGliZGlyKS9saWJjLnNvCisgJChpbnN0X2xpYmRpcikvbGliYy5zbzogJChjb21tb24tb2JqcGZ4KWZvcm1hdC5sZHMgXAorIAkJCSQoY29tbW9uLW9ianBmeClsaWJjLnNvJChsaWJjLnNvLXZlcnNpb24pIFwKKy0JCQkkKGluc3RfbGliZGlyKS8kKHBhdHN1YnN0ICUsJChsaWJ0eXBlLm9TKSxcCisrCQkJJChpbnN0X2xpYmRpcikvJChwYXRzdWJzdCAlLCQobGlidHlwZS5vU1QpLFwKKyAJCQkJCQkgICQobGlicHJlZml4KSQobGliYy1uYW1lKSkgXAorIAkJCSQoK2ZvcmNlKQorIAkoZWNobyAnLyogR05VIGxkIHNjcmlwdCc7XAorQEAgLTk4OSw3ICs5ODksNyBAQAorIAkgZWNobyAnICAgdGhlIHN0YXRpYyBsaWJyYXJ5LCBzbyB0cnkgdGhhdCBzZWNvbmRhcmlseS4gICovJztcCisgCSBjYXQgJDw7IFwKKyAJIGVjaG8gJ0dST1VQICggJChzbGliZGlyKS9saWJjLnNvJChsaWJjLnNvLXZlcnNpb24pJyBcCistCSAgICAgICckKGxpYmRpcikvJChwYXRzdWJzdCAlLCQobGlidHlwZS5vUyksJChsaWJwcmVmaXgpJChsaWJjLW5hbWUpKSdcCisrCSAgICAgICckKGxpYmRpcikvJChwYXRzdWJzdCAlLCQobGlidHlwZS5vU1QpLCQobGlicHJlZml4KSQobGliYy1uYW1lKSknXAorCSAgICAgICcgQVNfTkVFREVEICgnICQoc2xpYmRpcikvJChydGxkLWluc3RhbGxlZC1uYW1lKSAnKSApJyBcCisgCSkgPiAkQC5uZXcKKwltdiAtZiAkQC5uZXcgJEAKK2RpZmYgLWF1ciBnbGliYy0yLjMuNS9leHRyYS1saWIubWsgZ2xpYmMtMi4zLjUtY3lnd2luL2V4dHJhLWxpYi5taworLS0tIGdsaWJjLTIuMy41L2V4dHJhLWxpYi5tawkyMDA0LTEyLTAyIDIzOjU0OjQ3LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMy41LWN5Z3dpbi9leHRyYS1saWIubWsJMjAwNS0wNS0xMSAwODoyNzoyOC4xNTYyNTAwMDAgKzAyMDAKK0BAIC0xMyw3ICsxMyw3IEBACisgCisgaWZuZXEgKCwkKCQobGliKS1zdGF0aWMtb25seS1yb3V0aW5lcykpCisgaWZuZXEgKCwkKGZpbHRlciB5ZXN5ZXMlLCQoYnVpbGQtc2hhcmVkKSQoZWxmKSQoJChsaWIpLnNvLXZlcnNpb24pKSkKKy1vYmplY3Qtc3VmZml4ZXMtJChsaWIpICs9ICQoZmlsdGVyLW91dCAkKCQobGliKS1pbmhpYml0LW8pLC5vUykKKytvYmplY3Qtc3VmZml4ZXMtJChsaWIpICs9ICQoZmlsdGVyLW91dCAkKCQobGliKS1pbmhpYml0LW8pLC5vU1QpCisgZW5kaWYKKyBlbmRpZgorIAorQEAgLTI5LDcgKzI5LDcgQEAKKyAKKyAjIEFkZCBlYWNoIGZsYXZvciBvZiBsaWJyYXJ5IHRvIHRoZSBsaXN0cyBvZiB0aGluZ3MgdG8gYnVpbGQgYW5kIGluc3RhbGwuCisgaW5zdGFsbC1saWIgKz0gJChmb3JlYWNoIG8sJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSwkKGxpYjpsaWIlPSQobGlidHlwZSRvKSkpCistZXh0cmEtb2JqcyArPSAkKGZvcmVhY2ggbywkKGZpbHRlci1vdXQgLm9zIC5vUywkKG9iamVjdC1zdWZmaXhlcy0kKGxpYikpKSxcCisrZXh0cmEtb2JqcyArPSAkKGZvcmVhY2ggbywkKGZpbHRlci1vdXQgLm9zIC5vU1QsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSksXAorIAkJCSQocGF0c3Vic3QgJSwlJG8sJChmaWx0ZXItb3V0IFwKKyAJCQkJCSAgICQoJChsaWIpLXNoYXJlZC1vbmx5LXJvdXRpbmVzKSxcCisgCQkJCQkgICAkKGFsbC0kKGxpYiktcm91dGluZXMpKSkpCitAQCAtNTcsNyArNTcsNyBAQAorIAorIAorICMgVXNlIG8taXRlcmF0b3IubWsgdG8gZ2VuZXJhdGUgYSBydWxlIGZvciBlYWNoIGZsYXZvciBvZiBsaWJyYXJ5LgorLWlmbmVxICgsJChmaWx0ZXItb3V0IC5vcyAub1MsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSkpCisraWZuZXEgKCwkKGZpbHRlci1vdXQgLm9zIC5vU1QsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSkpCisgZGVmaW5lIG8taXRlcmF0b3ItZG9pdAorICQob2JqcGZ4KSQocGF0c3Vic3QgJSwkKGxpYnR5cGUkbyksJChsaWI6bGliJT0lKSk6IFwKKyAgICQocGF0c3Vic3QgJSwkKG9ianBmeCklJG8sXAorQEAgLTY1LDcgKzY1LDcgQEAKKyAJCQkgICQoYWxsLSQobGliKS1yb3V0aW5lcykpKTsgXAorIAkkJChidWlsZC1leHRyYS1saWIpCisgZW5kZWYKKy1vYmplY3Qtc3VmZml4ZXMtbGVmdCA9ICQoZmlsdGVyLW91dCAub3MgLm9TLCQob2JqZWN0LXN1ZmZpeGVzLSQobGliKSkpCisrb2JqZWN0LXN1ZmZpeGVzLWxlZnQgPSAkKGZpbHRlci1vdXQgLm9zIC5vU1QsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSkKKyBpbmNsdWRlICQocGF0c3Vic3QgJSwkKC4uKW8taXRlcmF0b3IubWssJChvYmplY3Qtc3VmZml4ZXMtbGVmdCkpCisgZW5kaWYKKyAKK0BAIC03Nyw5ICs3Nyw5IEBACisgCSQoYnVpbGQtZXh0cmEtbGliKQorIGVuZGlmCisgCistaWZuZXEgKCwkKGZpbHRlciAub1MsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSkpCistJChvYmpwZngpJChwYXRzdWJzdCAlLCQobGlidHlwZS5vUyksJChsaWI6bGliJT0lKSk6IFwKKy0gICQocGF0c3Vic3QgJSwkKG9ianBmeCklLm9TLFwKKytpZm5lcSAoLCQoZmlsdGVyIC5vU1QsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSkpCisrJChvYmpwZngpJChwYXRzdWJzdCAlLCQobGlidHlwZS5vU1QpLCQobGliOmxpYiU9JSkpOiBcCisrICAkKHBhdHN1YnN0ICUsJChvYmpwZngpJS5vU1QsXAorIAkgICAgICQoZmlsdGVyICQoJChsaWIpLXN0YXRpYy1vbmx5LXJvdXRpbmVzKSxcCisgCQkgICAgICAkKGFsbC0kKGxpYiktcm91dGluZXMpKSkKKyAJJChidWlsZC1leHRyYS1saWIpCitkaWZmIC1hdXIgZ2xpYmMtMi4zLjUvbnB0bC9NYWtlZmlsZSBnbGliYy0yLjMuNS1jeWd3aW4vbnB0bC9NYWtlZmlsZQorLS0tIGdsaWJjLTIuMy41L25wdGwvTWFrZWZpbGUJMjAwNS0wMi0xNiAwOTo0NTo1Ni4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjMuNS1jeWd3aW4vbnB0bC9NYWtlZmlsZQkyMDA1LTA1LTExIDA4OjI2OjAxLjgxMjUwMDAwMCArMDIwMAorQEAgLTM3NSw3ICszNzUsNyBAQAorIAorICQoaW5zdF9saWJkaXIpL2xpYnB0aHJlYWQuc286ICQoY29tbW9uLW9ianBmeClmb3JtYXQubGRzIFwKKyAJCQkgICAgICAkKG9ianBmeClsaWJwdGhyZWFkLnNvJChsaWJwdGhyZWFkLnNvLXZlcnNpb24pIFwKKy0JCQkgICAgICAkKGluc3RfbGliZGlyKS8kKHBhdHN1YnN0ICUsJChsaWJ0eXBlLm9TKSxcCisrCQkJICAgICAgJChpbnN0X2xpYmRpcikvJChwYXRzdWJzdCAlLCQobGlidHlwZS5vU1QpLFwKKyAJCQkJCQkJJChsaWJwcmVmaXgpcHRocmVhZCkgXAorIAkJCSAgICAgICQoK2ZvcmNlKQorIAkoZWNobyAnLyogR05VIGxkIHNjcmlwdCc7XAorQEAgLTM4Myw3ICszODMsNyBAQAorIAkgZWNobyAnICAgdGhlIHN0YXRpYyBsaWJyYXJ5LCBzbyB0cnkgdGhhdCBzZWNvbmRhcmlseS4gICovJztcCisgCSBjYXQgJDw7IFwKKyAJIGVjaG8gJ0dST1VQICggJChzbGliZGlyKS9saWJwdGhyZWFkLnNvJChsaWJwdGhyZWFkLnNvLXZlcnNpb24pJyBcCistCSAgICAgICckKGxpYmRpcikvJChwYXRzdWJzdCAlLCQobGlidHlwZS5vUyksJChsaWJwcmVmaXgpcHRocmVhZCknXAorKwkgICAgICAnJChsaWJkaXIpLyQocGF0c3Vic3QgJSwkKGxpYnR5cGUub1NUKSwkKGxpYnByZWZpeClwdGhyZWFkKSdcCisgCSAgICAgICcpJyBcCisgCSkgPiAkQC5uZXcKKyAJbXYgLWYgJEAubmV3ICRACitkaWZmIC1hdXIgZ2xpYmMtMi4zLjUvc3lzZGVwcy9zcGFyYy9zcGFyYzMyL3NwYXJjdjkvTWFrZWZpbGUgZ2xpYmMtMi4zLjUtY3lnd2luL3N5c2RlcHMvc3BhcmMvc3BhcmMzMi9zcGFyY3Y5L01ha2VmaWxlCistLS0gZ2xpYmMtMi4zLjUvc3lzZGVwcy9zcGFyYy9zcGFyYzMyL3NwYXJjdjkvTWFrZWZpbGUJMjAwNC0wOC0xNiAwODo0NjoxNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjMuNS1jeWd3aW4vc3lzZGVwcy9zcGFyYy9zcGFyYzMyL3NwYXJjdjkvTWFrZWZpbGUJMjAwNS0wNS0xMSAwODoyNjoyNS45Mzc1MDAwMDAgKzAyMDAKK0BAIC0xMCw0ICsxMCw0IEBACisgQVNGTEFHUy0ub3AgKz0gLVdhLC1BdjlhCisgQVNGTEFHUy0ub2cgKz0gLVdhLC1BdjlhCisgQVNGTEFHUy0ub2IgKz0gLVdhLC1BdjlhCistQVNGTEFHUy0ub1MgKz0gLVdhLC1BdjlhCisrQVNGTEFHUy0ub1NUICs9IC1XYSwtQXY5YQorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgUC4gSi4gRGF5IDxycGpkYXlAbWluZHNwcmluZy5jb20+CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LjEvMTEwLWNvbmZpZ3VyZS1hcHBsZS1hcy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYuMS8xMTAtY29uZmlndXJlLWFwcGxlLWFzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YTEzMjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LjEvMTEwLWNvbmZpZ3VyZS1hcHBsZS1hcy5wYXRjaApAQCAtMCwwICsxLDI1IEBACitodHRwOi8vaW4zd3d3LmVwZmwuY2gvfnNjaGFmZm5lL2dsaWJjLWNvbmZpZ3VyZS1hcHBsZS1hcy5wYXRjaAoraHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9tbC9jcm9zc2djYy8yMDA0LTAyL21zZzAwMTUxLmh0bWwKKworVGhlIGZvbGxvd2luZyBtYWtlcyBpdCBwb3NzaWJsZSB0byBjb25maWd1cmUgZ2xpYmMtMi4zLjIgb24gTWFjIE9TIFgsCit3aGVyZSB0aGUgYXNzZW1ibGVyIGJ1dCBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlIC0tdmVyc2lvbiBmbGFnLgorCitGaXhlcyB0aGUgc3ltcHRvbQorY2hlY2tpbmcgd2hldGhlciBsZCBpcyBHTlUgbGQuLi4gbm8KK2NoZWNraW5nIGZvciAvdXNyL2xpYmV4ZWMvZ2NjL2Rhcndpbi9wcGMvYXMuLi4gL3Vzci9saWJleGVjL2djYy9kYXJ3aW4vcHBjL2FzCitjaGVja2luZyB2ZXJzaW9uIG9mIC91c3IvbGliZXhlYy9nY2MvZGFyd2luL3BwYy9hcy4uLiAKKzxQQVVTRVMgSEVSRSBBTkQgSlVTVCBTSVRTIFRIRVJFIERPSU5HIE5PVEhJTkc+CisKKy0tLSBnbGliYy0yLjMuMi9jb25maWd1cmV+CVdlZCBGZWIgMjYgMDk6MjA6NDggMjAwMworKysrIGdsaWJjLTIuMy4yL2NvbmZpZ3VyZQlGcmkgRmViIDI3IDEzOjEyOjUzIDIwMDQKK0BAIC00MDM5LDcgKzQwMzksNyBAQAorICAgIyBGb3VuZCBpdCwgbm93IGNoZWNrIHRoZSB2ZXJzaW9uLgorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHZlcnNpb24gb2YgJEFTIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nIHZlcnNpb24gb2YgJEFTLi4uICRFQ0hPX0MiID4mNgorLSAgYWNfcHJvZ192ZXJzaW9uPWAkQVMgLS12ZXJzaW9uIDI+JjEgfCBzZWQgLW4gJ3MvXi4qR05VIGFzc2VtYmxlci4qIFwoWzAtOV0qXC5bMC05Ll0qXCkuKiQvXDEvcCdgCisrICBhY19wcm9nX3ZlcnNpb249YCRBUyAtdiA8L2Rldi9udWxsIDI+JjEgfCBzZWQgLW4gJ3MvXi4qR05VIGFzc2VtYmxlci4qIFwoWzAtOV0qXC5bMC05Ll0qXCkuKiQvXDEvcCdgCisgICBjYXNlICRhY19wcm9nX3ZlcnNpb24gaW4KKyAgICAgJycpIGFjX3Byb2dfdmVyc2lvbj0idi4gPy4/PywgYmFkIjsgYWNfdmVyY19mYWlsPXllczs7CisgICAgIDIuMVszLTldKikKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFAuIEouIERheSA8cnBqZGF5QG1pbmRzcHJpbmcuY29tPgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNi4xLzEyMC1maXgtcHI2MzEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LjEvMTIwLWZpeC1wcjYzMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzY4OGRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNi4xLzEyMC1maXgtcHI2MzEucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorRnJvbSBkYW5rQGtlZ2VsLmNvbQorV2VkIEp1biAxNSAwOToxMjo0MyBQRFQgMjAwNQorCitGaXhlcworCitidWlsZC1nbGliYy9saWJjLmEobnNzd2l0Y2gubykoLmRhdGErMHg2NCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9uc3NfZmlsZXNfZ2V0YWxpYXNlbnRfcicKK2J1aWxkLWdsaWJjL2xpYmMuYShuc3N3aXRjaC5vKSguZGF0YSsweDZjKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX25zc19maWxlc19lbmRhbGlhc2VudCcKKy4uLiA1MyBsaW5lcyBkZWxldGVkIC4uLgorYnVpbGQtZ2xpYmMvbGliYy5hKG5zc3dpdGNoLm8pKC5kYXRhKzB4MjFjKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX25zc19maWxlc19nZXRzcG5hbV9yJworY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKK21ha2VbMl06ICoqKiBbL2J1aWxkL2djYy0zLjQuMy1nbGliYy0yLjMuNS1oZHJzLTIuNi4xMS4yL2k2ODYtdW5rbm93bi1saW51eC1nbnUvYnVpbGQtZ2xpYmMvZWxmL2xkY29uZmlnXSBFcnJvciAxCisKK3doZW4gYnVpbGRpbmcgZ2xpYmMgd2l0aCAtLWVuYWJsZS1zdGF0aWMtbnNzLgorCitTZWUgaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NjMxCisKKy0tLSBnbGliYy0yLjMuNS9NYWtlY29uZmlnLm9sZAlXZWQgSnVuIDE1IDA4OjEzOjEyIDIwMDUKKysrKyBnbGliYy0yLjMuNS9NYWtlY29uZmlnCVdlZCBKdW4gMTUgMDg6MTM6MTQgMjAwNQorQEAgLTUxMCw3ICs1MTAsNyBAQAorIAorICMgVGhlIHN0YXRpYyBsaWJyYXJpZXMuCisgaWZlcSAoeWVzLCQoYnVpbGQtc3RhdGljKSkKKy1saW5rLWxpYmMtc3RhdGljID0gJChjb21tb24tb2JqcGZ4KWxpYmMuYSAkKHN0YXRpYy1nbnVsaWIpICQoY29tbW9uLW9ianBmeClsaWJjLmEKKytsaW5rLWxpYmMtc3RhdGljID0gJChjb21tb24tb2JqcGZ4KWxpYmMuYSAkKHN0YXRpYy1nbnVsaWIpICQob3RoZXJsaWJzKSAkKGNvbW1vbi1vYmpwZngpbGliYy5hCisgZWxzZQorIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgIyBXZSBjYW4gdHJ5IHRvIGxpbmsgdGhlIHByb2dyYW1zIHdpdGggbGliKl9waWMuYS4uLgorLS0tIGdsaWJjLTIuMy41L2VsZi9NYWtlZmlsZS5vbGQJV2VkIEp1biAxNSAwNzo0Njo0OSAyMDA1CisrKysgZ2xpYmMtMi4zLjUvZWxmL01ha2VmaWxlCVdlZCBKdW4gMTUgMDg6MTQ6MDAgMjAwNQorQEAgLTEyMCw2ICsxMjAsMTMgQEAKKyBpbnN0YWxsLWJpbi1zY3JpcHQgPSBsZGQKKyBlbmRpZgorIAorK2lmZXEgKHllcywkKGJ1aWxkLXN0YXRpYy1uc3MpKQorK25zc29iamRpciA6PSAkKHBhdHN1YnN0IC4uLyQoc3ViZGlyKSwuLCQoY29tbW9uLW9ianBmeCluc3MpCisrcmVzb2x2b2JqZGlyIDo9ICQocGF0c3Vic3QgLi4vJChzdWJkaXIpLC4sJChjb21tb24tb2JqcGZ4KXJlc29sdikKKytvdGhlcmxpYnMgKz0gJChuc3NvYmpkaXIpL2xpYm5zc19maWxlcy5hICQocmVzb2x2b2JqZGlyKS9saWJuc3NfZG5zLmEgXAorKwkgICAgICQocmVzb2x2b2JqZGlyKS9saWJyZXNvbHYuYQorK2VuZGlmCisrCisgb3RoZXJzCQk9IHNwcm9mIHNsbgorIGluc3RhbGwtYmluCT0gc3Byb2YKKyBvdGhlcnMtc3RhdGljICAgPSBzbG4KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFAuIEouIERheSA8cnBqZGF5QG1pbmRzcHJpbmcuY29tPgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNi4xLzEzMC1pNjg2LWFzc2VtYmxlci5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYuMS8xMzAtaTY4Ni1hc3NlbWJsZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkwNGVmYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYuMS8xMzAtaTY4Ni1hc3NlbWJsZXIucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorMjAwNy0wMi0xNSAgS2hlbSBSYWogIDxrcmFqQHh4eHh4eHh4eHg+CisKKyAgICAgICAqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvc3lzZGVwLmg6IFJlLWRlZmluZSBfX2k2ODYuCisgICAgICAgKiBucHRsL3N5c2RlcHMvcHRocmVhZC9wdC1pbml0ZmluaS5jOiBEaXR0by4KKworCisKK0luZGV4OiBnbGliYy0yLjQvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdsaWJjLTIuNC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L3N5c2RlcC5oCShyZXZpc2lvbiAxNDY5KQorKysrIGdsaWJjLTIuNC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L3N5c2RlcC5oCSh3b3JraW5nIGNvcHkpCitAQCAtMjksNiArMjksMTAgQEAKKyAjaW5jbHVkZSA8ZGwtc3lzZGVwLmg+CisgI2luY2x1ZGUgPHRscy5oPgorIAorKyNpZiBkZWZpbmVkIF9faTY4NiAmJiBkZWZpbmVkIF9fQVNTRU1CTEVSX18KKysjdW5kZWYgX19pNjg2CisrI2RlZmluZSBfX2k2ODYgX19pNjg2CisrI2VuZGlmCisgCisgLyogRm9yIExpbnV4IHdlIGNhbiB1c2UgdGhlIHN5c3RlbSBjYWxsIHRhYmxlIGluIHRoZSBoZWFkZXIgZmlsZQorIAkvdXNyL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCitJbmRleDogZ2xpYmMtMi40L25wdGwvc3lzZGVwcy9wdGhyZWFkL3B0LWluaXRmaW5pLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbGliYy0yLjQvbnB0bC9zeXNkZXBzL3B0aHJlYWQvcHQtaW5pdGZpbmkuYwkocmV2aXNpb24gMTQ2OSkKKysrKyBnbGliYy0yLjQvbnB0bC9zeXNkZXBzL3B0aHJlYWQvcHQtaW5pdGZpbmkuYwkod29ya2luZyBjb3B5KQorQEAgLTQ1LDYgKzQ1LDExIEBACisgLyogRW1iZWQgYW4gI2luY2x1ZGUgdG8gcHVsbCBpbiB0aGUgYWxpZ25tZW50IGFuZCAuZW5kIGRpcmVjdGl2ZXMuICovCisgYXNtICgiXG4jaW5jbHVkZSBcImRlZnMuaFwiIik7CisgCisrYXNtICgiXG4jaWYgZGVmaW5lZCBfX2k2ODYgJiYgZGVmaW5lZCBfX0FTU0VNQkxFUl9fIik7CisrYXNtICgiXG4jdW5kZWYgX19pNjg2Iik7CisrYXNtICgiXG4jZGVmaW5lIF9faTY4NiBfX2k2ODYiKTsKKythc20gKCJcbiNlbmRpZiIpOworKworIC8qIFRoZSBpbml0aWFsIGNvbW1vbiBjb2RlIGVuZHMgaGVyZS4gKi8KKyBhc20gKCJcbi8qQEhFQURFUl9FTkRTKi8iKTsKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYuMS8xNDAtaTM4Ni1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnkucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LjEvMTQwLWkzODYtcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0OTgyMWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LjEvMTQwLWkzODYtcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5LnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKKyhDKSAyMDA3IFlhbm4gRS4gTU9SSU4gPHlhbm4ubW9yaW4uMTk5OEBhbmNpZW5zLmVuaWIuZnI+CitMaWNlbnNlOiBMR1BMIHYyLjEKKworU2h1dCBvZmYgYSBzdHVwaWQgd2FybmluZzogcHJlZmZlcmVkLXN0YWNrLWJvdW5kYXJ5IG11c3QgYmUgYmV0d2VlbiA0IGFkIDEyLAorYW5kIDIgaXMgbm90LgorCitkaWZmIC1kdXIgZ2xpYmMtMi41Lm9yaWcvc3lzZGVwcy9pMzg2L01ha2VmaWxlIGdsaWJjLTIuNS9zeXNkZXBzL2kzODYvTWFrZWZpbGUKKy0tLSBnbGliYy0yLjUub3JpZy9zeXNkZXBzL2kzODYvTWFrZWZpbGUJMjAwNS0wMy0wNiAwMToxODoxNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjUvc3lzZGVwcy9pMzg2L01ha2VmaWxlCTIwMDctMDUtMjcgMTc6NDk6MzcuMDAwMDAwMDAwICswMjAwCitAQCAtMzYsNyArMzYsNyBAQAorIGlmZXEgKCQoc3ViZGlyKSxjc3UpCisgc3lzZGVwLUNGTEFHUyArPSAtbXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeT00CisgZWxzZQorLXN5c2RlcC1DRkxBR1MgKz0gLW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9MgorK3N5c2RlcC1DRkxBR1MgKz0gLW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9NAorICMgTGlrZXdpc2UsIGFueSBmdW5jdGlvbiB3aGljaCBjYWxscyB1c2VyIGNhbGxiYWNrcworIHVzZXMtY2FsbGJhY2tzICs9IC1tcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5PTQKKyAjIExpa2V3aXNlLCBhbnkgc3RhY2sgYWxpZ25tZW50IHRlc3RzCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LjEvMTUwLWFscGhhLWFzbV9wYWdlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNi4xLzE1MC1hbHBoYS1hc21fcGFnZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTk4YjM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNi4xLzE1MC1hbHBoYS1hc21fcGFnZS5wYXRjaApAQCAtMCwwICsxLDI2IEBACisyMDA4LTA2LTA3ICBNaWtlIEZyeXNpbmdlciAgPHZhcGllckBnZW50b28ub3JnPgorCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXMvdXNlci5oOiBDb3B5IHBhZ2UuaCBkZWZpbml0aW9ucworCWZyb20gdGhlIGtlcm5lbCBoZWFkZXIgdG8gc3lzL3VzZXIuaCBhbmQgcmVtb3ZlIHRoZSAjaW5jbHVkZSBvZgorCXN5cy91c2VyLmguCisKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5cy91c2VyLmgKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5cy91c2VyLmgKK0BAIC0yMyw3ICsyMyw2IEBACisgICAgb25seS4gRG9uJ3QgcmVhZCB0b28gbXVjaCBpbnRvIGl0LiBEb24ndCB1c2UgaXQgZm9yIGFueXRoaW5nIG90aGVyCisgICAgdGhhbiBnZGIvc3RyYWNlIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuICovCisgCistI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisgI2luY2x1ZGUgPGFzbS9yZWcuaD4KKyAKKyBzdHJ1Y3QgdXNlcgorQEAgLTQxLDYgKzQwLDkgQEAgc3RydWN0IHVzZXIKKyAgIGNoYXIgdV9jb21tWzMyXTsJCQkJLyogdXNlciBjb21tYW5kIG5hbWUgKi8KKyB9OworIAorKyNkZWZpbmUgUEFHRV9TSElGVAkJMTMKKysjZGVmaW5lIFBBR0VfU0laRQkJKDEgPDwgUEFHRV9TSElGVCkKKysjZGVmaW5lIFBBR0VfTUFTSwkJKH4oUEFHRV9TSVpFLTEpKQorICNkZWZpbmUgTkJQRwkJCVBBR0VfU0laRQorICNkZWZpbmUgVVBBR0VTCQkJMQorICNkZWZpbmUgSE9TVF9URVhUX1NUQVJUX0FERFIJKHUuc3RhcnRfY29kZSkKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYuMS8xNjAtdXNlX3Nob3J0X2Zvcl9mbnN0c3cucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LjEvMTYwLXVzZV9zaG9ydF9mb3JfZm5zdHN3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlODQ5ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LjEvMTYwLXVzZV9zaG9ydF9mb3JfZm5zdHN3LnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK09yaWdpbmFsIHBhdGNoIGZyb20gSC5KLiBMdSwgYXMgcmVwb3J0ZWQgdGhlcmU6CitodHRwOi8vd3d3Lm5hYmJsZS5jb20vUEFUQ0g6LVVzZS1zaG9ydC1mb3ItZm5zdHN3LXRkMTQ3NzUxNzEuaHRtbAorCitmbnN0c3cgc3RvcmVzIDE2Yml0IGludG8gJWF4LiBUaGUgdXBwZXIgMTZiaXQgb2YgJWVheCBpcyB1bmNoYW5nZWQuCitUaGUgbmV3IGFzc2VtYmxlciAoYmludXRpbHMtMi4xOC41MC4wLjQgYW5kIHVwKSB3aWxsIGRpc2FsbG93ICJmbnN0c3cgJWVheCIuCisKK2RpZmYgLWR1ciBnbGliYy0yLjYuMS5vcmlnL3N5c2RlcHMvaTM4Ni9mcHUvZnRlc3RleGNlcHQuYyBnbGliYy0yLjYuMS9zeXNkZXBzL2kzODYvZnB1L2Z0ZXN0ZXhjZXB0LmMKKy0tLSBnbGliYy0yLjYuMS5vcmlnL3N5c2RlcHMvaTM4Ni9mcHUvZnRlc3RleGNlcHQuYwkyMDA0LTAzLTA1IDExOjE0OjQ4LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuNi4xL3N5c2RlcHMvaTM4Ni9mcHUvZnRlc3RleGNlcHQuYwkyMDA4LTA2LTI0IDEwOjU2OjE0LjAwMDAwMDAwMCArMDIwMAorQEAgLTI2LDcgKzI2LDcgQEAKKyBpbnQKKyBmZXRlc3RleGNlcHQgKGludCBleGNlcHRzKQorIHsKKy0gIGludCB0ZW1wOworKyAgc2hvcnQgdGVtcDsKKyAgIGludCB4dGVtcCA9IDA7CisgCisgICAvKiBHZXQgY3VycmVudCBleGNlcHRpb25zLiAgKi8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYuMS8xNzAtYWxwaGEtYXNtX2VsZi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYuMS8xNzAtYWxwaGEtYXNtX2VsZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGE1YzhlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNi4xLzE3MC1hbHBoYS1hc21fZWxmLnBhdGNoCkBAIC0wLDAgKzEsMTk0IEBACitzaW5jZSB0aGUga2VybmVsIG5vIGxvbmdlciBwcm92aWRlcyBhc20vZWxmLmgsIHRoZSBzeXMvcHJvY2ZzLmggZnJvbSB0aGUgCitjb21tb24gY29kZSwgYWxwaGEsIGFuZCBzaCBmYWlsIHdoZW4gdXNlZC4gIHRoaXMgc2hvdWxkIHRoaW5ncyB1cC4KKy1taWtlCisKKzIwMDgtMDYtMDcgIE1pa2UgRnJ5c2luZ2VyICA8dmFwaWVyQGdlbnRvby5vcmc+CisKKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5cy9wcm9jZnMuaDogUmVwbGFjZSB3aXRoICNlcnJvciBzdHViLgorCSogc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzL3Byb2Nmcy5oOiBDb3B5IHNvbWUgYXNtL2VsZi5oCisJZGVmaW5pdGlvbnMgZnJvbSB0aGUga2VybmVsIGhlYWRlciB0byBzeXMvcHJvY2ZzLmggYW5kIHJlbW92ZSB0aGUKKwkjaW5jbHVkZSBvZiBhc20vZWxmLmguCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXMvcHJvY2ZzLmg6IExpa2V3aXNlLgorCisqQXR0YWNobWVudDogc2lnbmF0dXJlLmFzYyA8bXNnMDAwMTIvc2lnbmF0dXJlLmFzYz4qCisvRGVzY3JpcHRpb246LyBUaGlzIGlzIGEgZGlnaXRhbGx5IHNpZ25lZCBtZXNzYWdlIHBhcnQuCisKKzIwMDgtMDYtMDcgIE1pa2UgRnJ5c2luZ2VyICA8dmFwaWVyQGdlbnRvby5vcmc+CisKKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5cy9wcm9jZnMuaDogUmVwbGFjZSB3aXRoICNlcnJvciBzdHViLgorCSogc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzL3Byb2Nmcy5oOiBDb3B5IHNvbWUgYXNtL2VsZi5oCisJZGVmaW5pdGlvbnMgZnJvbSB0aGUga2VybmVsIGhlYWRlciB0byBzeXMvcHJvY2ZzLmggYW5kIHJlbW92ZSB0aGUKKwkjaW5jbHVkZSBvZiBhc20vZWxmLmguCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXMvcHJvY2ZzLmg6IExpa2V3aXNlLgorCistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXMvcHJvY2ZzLmgKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5cy9wcm9jZnMuaAorQEAgLTI5LDEwICsyOSwyMyBAQAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3Vjb250ZXh0Lmg+CisgI2luY2x1ZGUgPHN5cy91c2VyLmg+CistI2luY2x1ZGUgPGFzbS9lbGYuaD4KKyAKKyBfX0JFR0lOX0RFQ0xTCisgCisrLyoKKysgKiBUaGUgT1NGLzEgdmVyc2lvbiBvZiA8c3lzL3Byb2Nmcy5oPiBtYWtlcyBncmVnc2V0X3QgNDYgZW50cmllcyBsb25nLgorKyAqIEkgaGF2ZSBubyBpZGVhIHdoeSB0aGF0IGlzIHNvLiAgRm9yIG5vdywgd2UganVzdCBsZWF2ZSBpdCBhdCAzMworKyAqICgzMiBnZW5lcmFsIHJlZ3MgKyBwcm9jZXNzb3Igc3RhdHVzIHdvcmQpLgorKyAqLworKyNkZWZpbmUgRUxGX05HUkVHICAzMworKyNkZWZpbmUgRUxGX05GUFJFRyAzMgorKworK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OworK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisrCisrdHlwZWRlZiBkb3VibGUgZWxmX2ZwcmVnX3Q7CisrdHlwZWRlZiBlbGZfZnByZWdfdCBlbGZfZnByZWdzZXRfdFtFTEZfTkZQUkVHXTsKKysKKyBzdHJ1Y3QgZWxmX3NpZ2luZm8KKyAgIHsKKyAgICAgaW50IHNpX3NpZ25vOwkJCS8qIFNpZ25hbCBudW1iZXIuICAqLworLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzL3Byb2Nmcy5oCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXMvcHJvY2ZzLmgKK0BAIC0yOSwxMCArMjksMTkgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy91Y29udGV4dC5oPgorICNpbmNsdWRlIDxzeXMvdXNlci5oPgorLSNpbmNsdWRlIDxhc20vZWxmLmg+CisgCisgX19CRUdJTl9ERUNMUworIAorKy8qCisrICogRUxGIHJlZ2lzdGVyIGRlZmluaXRpb25zLi4uCisrICovCisrdHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7CisrCisrI2RlZmluZSBFTEZfTkdSRUcgKHNpemVvZiAoc3RydWN0IHB0X3JlZ3MpIC8gc2l6ZW9mKGVsZl9ncmVnX3QpKQorK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisrCisrdHlwZWRlZiBzdHJ1Y3QgdXNlcl9mcHVfc3RydWN0IGVsZl9mcHJlZ3NldF90OworKworIHN0cnVjdCBlbGZfc2lnaW5mbworICAgeworICAgICBpbnQgc2lfc2lnbm87CQkJLyogU2lnbmFsIG51bWJlci4gICovCistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zeXMvcHJvY2ZzLmgKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5cy9wcm9jZnMuaAorQEAgLTEsMTE1ICsxLDIgQEAKKy0vKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCistCistICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCistICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorLSAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorLSAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCistICAgMDIxMTEtMTMwNyBVU0EuICAqLworLQorLSNpZm5kZWYgX1NZU19QUk9DRlNfSAorLSNkZWZpbmUgX1NZU19QUk9DRlNfSAkxCistCistLyogVGhpcyBpcyBzb21laG93IG1vZGVsbGVkIGFmdGVyIHRoZSBmaWxlIG9mIHRoZSBzYW1lIG5hbWUgb24gU3lzVnI0CistICAgc3lzdGVtcy4gIEl0IHByb3ZpZGVzIGEgZGVmaW5pdGlvbiBvZiB0aGUgY29yZSBmaWxlIGZvcm1hdCBmb3IgRUxGCistICAgdXNlZCBvbiBMaW51eC4gICovCistCistI2luY2x1ZGUgPGZlYXR1cmVzLmg+CistI2luY2x1ZGUgPHNpZ25hbC5oPgorLSNpbmNsdWRlIDxzeXMvdGltZS5oPgorLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaW5jbHVkZSA8c3lzL3Vjb250ZXh0Lmg+CistI2luY2x1ZGUgPHN5cy91c2VyLmg+CistI2luY2x1ZGUgPGFzbS9lbGYuaD4KKy0KKy1fX0JFR0lOX0RFQ0xTCistCistc3RydWN0IGVsZl9zaWdpbmZvCistICB7CistICAgIGludCBzaV9zaWdubzsJCQkvKiBTaWduYWwgbnVtYmVyLiAgKi8KKy0gICAgaW50IHNpX2NvZGU7CQkJLyogRXh0cmEgY29kZS4gICovCistICAgIGludCBzaV9lcnJubzsJCQkvKiBFcnJuby4gICovCistICB9OworLQorLS8qIERlZmluaXRpb25zIHRvIGdlbmVyYXRlIEludGVsIFNWUjQtbGlrZSBjb3JlIGZpbGVzLiAgVGhlc2UgbW9zdGx5CistICAgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyB0aGUgU1ZSNCB0eXBlcyB3aXRoICJlbGZfIiB0YWNrZWQgb24gdGhlCistICAgZnJvbnQgdG8gcHJldmVudCBjbGFzaGVzIHdpdGggbGludXggZGVmaW5pdGlvbnMsIGFuZCB0aGUgdHlwZWRlZgorLSAgIGZvcm1zIGhhdmUgYmVlbiBhdm9pZGVkLiAgVGhpcyBpcyBtb3N0bHkgbGlrZSB0aGUgU1ZSNCBzdHJ1Y3R1cmUsCistICAgYnV0IG1vcmUgTGludXh5LCB3aXRoIHRoaW5ncyB0aGF0IExpbnV4IGRvZXMgbm90IHN1cHBvcnQgYW5kIHdoaWNoCistICAgZ2RiIGRvZXNuJ3QgcmVhbGx5IHVzZSBleGNsdWRlZC4gIEZpZWxkcyBwcmVzZW50IGJ1dCBub3QgdXNlZCBhcmUKKy0gICBtYXJrZWQgd2l0aCAiWFhYIi4gICovCistc3RydWN0IGVsZl9wcnN0YXR1cworLSAgeworLSNpZiAwCistICAgIGxvbmcgaW50IHByX2ZsYWdzOwkJCS8qIFhYWCBQcm9jZXNzIGZsYWdzLiAgKi8KKy0gICAgc2hvcnQgaW50IHByX3doeTsJCQkvKiBYWFggUmVhc29uIGZvciBwcm9jZXNzIGhhbHQuICAqLworLSAgICBzaG9ydCBpbnQgcHJfd2hhdDsJCQkvKiBYWFggTW9yZSBkZXRhaWxlZCByZWFzb24uICAqLworLSNlbmRpZgorLSAgICBzdHJ1Y3QgZWxmX3NpZ2luZm8gcHJfaW5mbzsJCS8qIEluZm8gYXNzb2NpYXRlZCB3aXRoIHNpZ25hbC4gICovCistICAgIHNob3J0IGludCBwcl9jdXJzaWc7CQkvKiBDdXJyZW50IHNpZ25hbC4gICovCistICAgIHVuc2lnbmVkIGxvbmcgaW50IHByX3NpZ3BlbmQ7CS8qIFNldCBvZiBwZW5kaW5nIHNpZ25hbHMuICAqLworLSAgICB1bnNpZ25lZCBsb25nIGludCBwcl9zaWdob2xkOwkvKiBTZXQgb2YgaGVsZCBzaWduYWxzLiAgKi8KKy0jaWYgMAorLSAgICBzdHJ1Y3Qgc2lnYWx0c3RhY2sgcHJfYWx0c3RhY2s7CS8qIEFsdGVybmF0ZSBzdGFjayBpbmZvLiAgKi8KKy0gICAgc3RydWN0IHNpZ2FjdGlvbiBwcl9hY3Rpb247CQkvKiBTaWduYWwgYWN0aW9uIGZvciBjdXJyZW50IHNpZy4gICovCistI2VuZGlmCistICAgIF9fcGlkX3QgcHJfcGlkOworLSAgICBfX3BpZF90IHByX3BwaWQ7CistICAgIF9fcGlkX3QgcHJfcGdycDsKKy0gICAgX19waWRfdCBwcl9zaWQ7CistICAgIHN0cnVjdCB0aW1ldmFsIHByX3V0aW1lOwkJLyogVXNlciB0aW1lLiAgKi8KKy0gICAgc3RydWN0IHRpbWV2YWwgcHJfc3RpbWU7CQkvKiBTeXN0ZW0gdGltZS4gICovCistICAgIHN0cnVjdCB0aW1ldmFsIHByX2N1dGltZTsJCS8qIEN1bXVsYXRpdmUgdXNlciB0aW1lLiAgKi8KKy0gICAgc3RydWN0IHRpbWV2YWwgcHJfY3N0aW1lOwkJLyogQ3VtdWxhdGl2ZSBzeXN0ZW0gdGltZS4gICovCistI2lmIDAKKy0gICAgbG9uZyBpbnQgcHJfaW5zdHI7CQkJLyogQ3VycmVudCBpbnN0cnVjdGlvbi4gICovCistI2VuZGlmCistICAgIGVsZl9ncmVnc2V0X3QgcHJfcmVnOwkJLyogR1AgcmVnaXN0ZXJzLiAgKi8KKy0gICAgaW50IHByX2ZwdmFsaWQ7CQkJLyogVHJ1ZSBpZiBtYXRoIGNvcHJvIGJlaW5nIHVzZWQuICAqLworLSAgfTsKKy0KKy0KKy0jZGVmaW5lIEVMRl9QUkFSR1NaICAgICAoODApICAgIC8qIE51bWJlciBvZiBjaGFycyBmb3IgYXJncyAqLworLQorLXN0cnVjdCBlbGZfcHJwc2luZm8KKy0gIHsKKy0gICAgY2hhciBwcl9zdGF0ZTsJCQkvKiBOdW1lcmljIHByb2Nlc3Mgc3RhdGUuICAqLworLSAgICBjaGFyIHByX3NuYW1lOwkJCS8qIENoYXIgZm9yIHByX3N0YXRlLiAgKi8KKy0gICAgY2hhciBwcl96b21iOwkJCS8qIFpvbWJpZS4gICovCistICAgIGNoYXIgcHJfbmljZTsJCQkvKiBOaWNlIHZhbC4gICovCistICAgIHVuc2lnbmVkIGxvbmcgaW50IHByX2ZsYWc7CQkvKiBGbGFncy4gICovCistICAgIHVuc2lnbmVkIHNob3J0IGludCBwcl91aWQ7CistICAgIHVuc2lnbmVkIHNob3J0IGludCBwcl9naWQ7CistICAgIGludCBwcl9waWQsIHByX3BwaWQsIHByX3BncnAsIHByX3NpZDsKKy0gICAgLyogTG90cyBtaXNzaW5nICovCistICAgIGNoYXIgcHJfZm5hbWVbMTZdOwkJCS8qIEZpbGVuYW1lIG9mIGV4ZWN1dGFibGUuICAqLworLSAgICBjaGFyIHByX3BzYXJnc1tFTEZfUFJBUkdTWl07CS8qIEluaXRpYWwgcGFydCBvZiBhcmcgbGlzdC4gICovCistICB9OworLQorLS8qIEFkZHJlc3Nlcy4gICovCistdHlwZWRlZiB2b2lkICpwc2FkZHJfdDsKKy0KKy0vKiBSZWdpc3RlciBzZXRzLiAgTGludXggaGFzIGRpZmZlcmVudCBuYW1lcy4gICovCistdHlwZWRlZiBncmVnc2V0X3QgcHJncmVnc2V0X3Q7CistdHlwZWRlZiBmcHJlZ3NldF90IHByZnByZWdzZXRfdDsKKy0KKy0vKiBXZSBkb24ndCBoYXZlIGFueSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHByb2Nlc3NlcyBhbmQgdGhyZWFkcywKKy0gICB0aGVyZWZvcmUgaGFiZSBvbmx5IGluZSBQSUQgdHlwZS4gICovCistdHlwZWRlZiBfX3BpZF90IGx3cGlkX3Q7CistCistCistdHlwZWRlZiBzdHJ1Y3QgZWxmX3Byc3RhdHVzIHByc3RhdHVzX3Q7CistdHlwZWRlZiBzdHJ1Y3QgZWxmX3BycHNpbmZvIHBycHNpbmZvX3Q7CistCistX19FTkRfREVDTFMKKy0KKy0jZW5kaWYJLyogc3lzL3Byb2Nmcy5oICovCisrLyogc3lzL3Byb2Nmcy5oIGlzIGFyY2hpdGVjdHVyZSBzcGVjaWZpYy4gICovCisrI2Vycm9yICJUaGlzIGZpbGUgbXVzdCBiZSBzdXBwbGllZCBieSBldmVyeSBMaW51eCBhcmNoaXRlY3R1cmUuIgorCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LjEvMTgwLWdjYy00LjMtc3lzaW5jbHVkZS1wYXRoLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNi4xLzE4MC1nY2MtNC4zLXN5c2luY2x1ZGUtcGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjY1MGE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNi4xLzE4MC1nY2MtNC4zLXN5c2luY2x1ZGUtcGF0aC5wYXRjaApAQCAtMCwwICsxLDUwIEBACitQYXRjaCBwb2ludGVkIHRvIGJ5IFJ5YW4gQVJOT0xEIG9uIHRoZSBsaWJjLWhlbHAgTUwuCitTZWU6IGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9tbC9saWJjLWhlbHAvMjAwOC0wNi9tc2cwMDA2My5odG1sCisKK0ZvcndhcmRlZCB0byBjcm9zc3Rvb2wtTkcgYnkgSW9hbm5pcyBFLiBWRU5FVElTOgorU2VlOiBodHRwOi8vc291cmNld2FyZS5vcmcvbWwvbGliYy1oZWxwLzIwMDgtMDYvbXNnMDAwNjMuaHRtbAorCitHQ0MgNC4zIGNoYW5nZWQgdGhlIGxvY2F0aW9uIG9mIHNvbWUgb2YgdGhlIGhlYWRlciBmaWxlcy4gIEkgZG9uJ3QKK3VuZGVyc3RhbmQgd2h5IHlvdSdkIGJlIGdldHRpbmcgdGhlc2UgZXJyb3JzIHdoaWxlIGJ1aWxkaW5nIEdDQyBzaW5jZQoraXQgcHJvdmlkZXMgdGhlbS4KKworV2l0aCByZWdhcmQgdG8gR0xJQkMsIFJvbGFuZCBjaGVja2VkIGluIHNvbWUgY2hhbmdlcyBzbyB0aGF0IHRoZSBHTElCQworYnVpbGQgc3lzdGVtIGNvdWxkIGZpbmQgdGhlIG5ldyBsb2NhdGlvbnMgb2YgdGhlIEdDQyBwcm92aWRlZCBoZWFkZXIKK2ZpbGVzLgorCitkaWZmIC1kdXJOIGdsaWJjLTIuNi4xLm9yaWcvY29uZmlndXJlLmluIGdsaWJjLTIuNi4xL2NvbmZpZ3VyZS5pbgorLS0tIGdsaWJjLTIuNi4xLm9yaWcvY29uZmlndXJlLmluCTIwMDctMDYtMDggMDU6MTY6MzYuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi42LjEvY29uZmlndXJlLmluCTIwMDgtMDYtMjQgMTg6Mzg6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtOTExLDggKzkxMSwxMiBAQAorICMgaGVhZGVyIGRpcmVjdG9yeSBhbmQgYWRkIHRoYXQgdG8gdGhlIGxpc3QuICBOT1RFOiBPbmx5IGRvZXMgdGhlIHJpZ2h0CisgIyB0aGluZyBvbiBhIHN5c3RlbSB0aGF0IGRvZXNuJ3QgbmVlZCBmaXhpbmNsdWRlcy4gIChOb3QgcHJlc2VudGx5IGEgcHJvYmxlbS4pCisgaWYgdGVzdCAtbiAiJHN5c2hlYWRlcnMiOyB0aGVuCistICBjY2hlYWRlcnM9YCRDQyAtcHJpbnQtZmlsZS1uYW1lPWluY2x1ZGVgCistICBTWVNJTkNMVURFUz0iLW5vc3RkaW5jIC1pc3lzdGVtICRjY2hlYWRlcnMgXAorKyAgU1lTSU5DTFVERVM9LW5vc3RkaW5jCisrICBmb3IgZCBpbiBpbmNsdWRlIGluY2x1ZGUtZml4ZWQ7IGRvCisrICAgIGk9YCRDQyAtcHJpbnQtZmlsZS1uYW1lPSIkZCJgICYmIHRlc3QgIngkaSIgIT0geCAmJiB0ZXN0ICJ4JGkiICE9ICJ4JGQiICYmCisrICAgIFNZU0lOQ0xVREVTPSIkU1lTSU5DTFVERVMgLWlzeXN0ZW0gJGkiCisrICBkb25lCisrICBTWVNJTkNMVURFUz0iJFNZU0lOQ0xVREVTIFwKKyAtaXN5c3RlbSBgZWNobyAkc3lzaGVhZGVycyB8IHNlZCAncy86LyAtaXN5c3RlbSAvZydgIgorICAgaWYgdGVzdCAtbiAiJENYWCI7IHRoZW4KKyAgICAgY3h4dmVyc2lvbj1gJENYWCAtZHVtcHZlcnNpb24gMj4mQVNfTUVTU0FHRV9MT0dfRkRgICYmCitkaWZmIC1kdXJOIGdsaWJjLTIuNi4xLm9yaWcvY29uZmlndXJlIGdsaWJjLTIuNi4xL2NvbmZpZ3VyZQorLS0tIGdsaWJjLTIuNi4xLm9yaWcvY29uZmlndXJlCTIwMDgtMDYtMjQgMTg6MzU6MzQuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi42LjEvY29uZmlndXJlCTIwMDgtMDYtMjQgMTg6Mzg6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtNDU2Miw4ICs0NTYyLDEyIEBACisgIyBoZWFkZXIgZGlyZWN0b3J5IGFuZCBhZGQgdGhhdCB0byB0aGUgbGlzdC4gIE5PVEU6IE9ubHkgZG9lcyB0aGUgcmlnaHQKKyAjIHRoaW5nIG9uIGEgc3lzdGVtIHRoYXQgZG9lc24ndCBuZWVkIGZpeGluY2x1ZGVzLiAgKE5vdCBwcmVzZW50bHkgYSBwcm9ibGVtLikKKyBpZiB0ZXN0IC1uICIkc3lzaGVhZGVycyI7IHRoZW4KKy0gIGNjaGVhZGVycz1gJENDIC1wcmludC1maWxlLW5hbWU9aW5jbHVkZWAKKy0gIFNZU0lOQ0xVREVTPSItbm9zdGRpbmMgLWlzeXN0ZW0gJGNjaGVhZGVycyBcCisrICBTWVNJTkNMVURFUz0tbm9zdGRpbmMKKysgIGZvciBkIGluIGluY2x1ZGUgaW5jbHVkZS1maXhlZDsgZG8KKysgICAgaT1gJENDIC1wcmludC1maWxlLW5hbWU9IiRkImAgJiYgdGVzdCAieCRpIiAhPSAieCRkIiAmJgorKyAgICBTWVNJTkNMVURFUz0iJFNZU0lOQ0xVREVTIC1pc3lzdGVtICRpIgorKyAgZG9uZQorKyAgU1lTSU5DTFVERVM9IiRTWVNJTkNMVURFUyBcCisgLWlzeXN0ZW0gYGVjaG8gJHN5c2hlYWRlcnMgfCBzZWQgJ3MvOi8gLWlzeXN0ZW0gL2cnYCIKKyAgIGlmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCisgICAgIGN4eHZlcnNpb249YCRDWFggLWR1bXB2ZXJzaW9uIDI+JjVgICYmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LjEvMTkwLWFscGhhLWF0ZmN0cy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYuMS8xOTAtYWxwaGEtYXRmY3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYTI0NzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LjEvMTkwLWFscGhhLWF0ZmN0cy5wYXRjaApAQCAtMCwwICsxLDExIEBACistLS0gZ2xpYmMtMi42LjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgva2VybmVsLWZlYXR1cmVzLmgJMjAwNi0wNy0yOSAwNzo0MzoyNy4wMDAwMDAwMDAgKzAzMDAKKysrKyBnbGliYy0yLjYuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9rZXJuZWwtZmVhdHVyZXMuaC5uZXcJMjAwOC0wNy0yNiAwODo0NTowNi4wMDAwMDAwMDAgKzAzMDAKK0BAIC00NDUsNyArNDQ1LDcgQEAKKyAvKiBUaGUgKmF0IHN5c2NhbGxzIHdlcmUgaW50cm9kdWNlZCBqdXN0IGFmdGVyIDIuNi4xNi1yYzEuICBEdWUgdG8gdGhlIHdheSB0aGUKKyAgICBrZXJuZWwgdmVyc2lvbnMgYXJlIGFkdmVydGlzZWQgd2UgY2FuIG9ubHkgcmVseSBvbiAyLjYuMTcgdG8gaGF2ZQorICAgIHRoZSBjb2RlLiAgKi8KKy0jaWYgX19MSU5VWF9LRVJORUxfVkVSU0lPTiA+PSAweDAyMDYxMQorKyNpZiBfX0xJTlVYX0tFUk5FTF9WRVJTSU9OID49IDB4MDIwNjExICYmICFkZWZpbmVkIF9fYWxwaGFfXworICMgZGVmaW5lIF9fQVNTVU1FX0FURkNUUwkxCisgI2VuZGlmCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LjEvMjAwLWFscGhhLXB0cl9tYW5nbGUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LjEvMjAwLWFscGhhLXB0cl9tYW5nbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQxNzU2MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYuMS8yMDAtYWxwaGEtcHRyX21hbmdsZS5wYXRjaApAQCAtMCwwICsxLDEwMyBAQAorLS0tIGdsaWJjLTIuNi4xLm9yaWcvc3lzZGVwcy91bml4L2FscGhhL3N5c2RlcC5oCisrKysgZ2xpYmMtMi42LjEvc3lzZGVwcy91bml4L2FscGhhL3N5c2RlcC5oCitAQCAtMzk3LDQyICszOTcsNCBAQAorIAlfc2NfcmV0ID0gX3NjXzAsIF9zY19lcnIgPSBfc2NfMTk7CQkJXAorIH0KKyAKKy0vKiBQb2ludGVyIG1hbmdsaW5nIHN1cHBvcnQuICBOb3RlIHRoYXQgdGxzIGFjY2VzcyBpcyBzbG93IGVub3VnaCB0aGF0CistICAgd2UgZG9uJ3QgZGVvcHRpbWl6ZSB0aGluZ3MgYnkgcGxhY2luZyB0aGUgcG9pbnRlciBjaGVjayB2YWx1ZSB0aGVyZS4gICovCistCistI2luY2x1ZGUgPHN0ZGludC5oPgorLQorLSNpZiBkZWZpbmVkIE5PVF9JTl9saWJjICYmIGRlZmluZWQgSVNfSU5fcnRsZAorLSMgaWZkZWYgX19BU1NFTUJMRVJfXworLSMgIGRlZmluZSBQVFJfTUFOR0xFKGRzdCwgc3JjLCB0bXApCQkJCVwKKy0JbGRhaAl0bXAsIF9fcG9pbnRlcl9jaGtfZ3VhcmRfbG9jYWwoJDI5KSAhZ3ByZWxoaWdoOwlcCistCWxkcQl0bXAsIF9fcG9pbnRlcl9jaGtfZ3VhcmRfbG9jYWwodG1wKSAhZ3ByZWxsb3c7CVwKKy0JeG9yCXNyYywgdG1wLCBkc3QKKy0jICBkZWZpbmUgUFRSX01BTkdMRTIoZHN0LCBzcmMsIHRtcCkJCQkJXAorLQl4b3IJc3JjLCB0bXAsIGRzdAorLSMgIGRlZmluZSBQVFJfREVNQU5HTEUoZHN0LCB0bXApICAgUFRSX01BTkdMRShkc3QsIGRzdCwgdG1wKQorLSMgIGRlZmluZSBQVFJfREVNQU5HTEUyKGRzdCwgdG1wKSAgUFRSX01BTkdMRTIoZHN0LCBkc3QsIHRtcCkKKy0jIGVsc2UKKy1leHRlcm4gdWludHB0cl90IF9fcG9pbnRlcl9jaGtfZ3VhcmRfbG9jYWwgYXR0cmlidXRlX3JlbHJvIGF0dHJpYnV0ZV9oaWRkZW47CistIyAgZGVmaW5lIFBUUl9NQU5HTEUodmFyKQlcCistICAodmFyKSA9IChfX3R5cGVvZiAodmFyKSkgKCh1aW50cHRyX3QpICh2YXIpIF4gX19wb2ludGVyX2Noa19ndWFyZF9sb2NhbCkKKy0jICBkZWZpbmUgUFRSX0RFTUFOR0xFKHZhcikgIFBUUl9NQU5HTEUodmFyKQorLSMgZW5kaWYKKy0jZWxpZiBkZWZpbmVkIFBJQworLSMgaWZkZWYgX19BU1NFTUJMRVJfXworLSMgIGRlZmluZSBQVFJfTUFOR0xFKGRzdCwgc3JjLCB0bXApCQlcCistCWxkcQl0bXAsIF9fcG9pbnRlcl9jaGtfZ3VhcmQ7CVwKKy0JeG9yCXNyYywgdG1wLCBkc3QKKy0jICBkZWZpbmUgUFRSX01BTkdMRTIoZHN0LCBzcmMsIHRtcCkJCVwKKy0JeG9yCXNyYywgdG1wLCBkc3QKKy0jICBkZWZpbmUgUFRSX0RFTUFOR0xFKGRzdCwgdG1wKSAgIFBUUl9NQU5HTEUoZHN0LCBkc3QsIHRtcCkKKy0jICBkZWZpbmUgUFRSX0RFTUFOR0xFMihkc3QsIHRtcCkgIFBUUl9NQU5HTEUyKGRzdCwgZHN0LCB0bXApCistIyBlbHNlCistZXh0ZXJuIHVpbnRwdHJfdCBfX3BvaW50ZXJfY2hrX2d1YXJkIGF0dHJpYnV0ZV9yZWxybzsKKy0jICBkZWZpbmUgUFRSX01BTkdMRSh2YXIpCVwKKy0JKHZhcikgPSAodm9pZCAqKSAoKHVpbnRwdHJfdCkgKHZhcikgXiBfX3BvaW50ZXJfY2hrX2d1YXJkKQorLSMgIGRlZmluZSBQVFJfREVNQU5HTEUodmFyKSAgUFRSX01BTkdMRSh2YXIpCistIyBlbmRpZgorLSNlbmRpZgorLQorICNlbmRpZiAvKiBBU1NFTUJMRVIgKi8KKy0tLSBnbGliYy0yLjYuMS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5c2RlcC5oCisrKysgZ2xpYmMtMi42LjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzZGVwLmgKK0BAIC0yOSw2ICsyOSw4IEBACisgLyogVGhlcmUgaXMgc29tZSBjb21tb25hbGl0eS4gICovCisgI2luY2x1ZGUgPHN5c2RlcHMvdW5peC9hbHBoYS9zeXNkZXAuaD4KKyAKKysjaW5jbHVkZSA8dGxzLmg+CisrCisgLyogRm9yIExpbnV4IHdlIGNhbiB1c2UgdGhlIHN5c3RlbSBjYWxsIHRhYmxlIGluIHRoZSBoZWFkZXIgZmlsZQorIAkvdXNyL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisgICAgb2YgdGhlIGtlcm5lbC4gIEJ1dCB0aGVzZSBzeW1ib2xzIGRvIG5vdCBmb2xsb3cgdGhlIFNZU18qIHN5bnRheAorQEAgLTk2LDQgKzk2LDQ2IEBACisgCUlOVEVSTkFMX1NZU0NBTEwxKG5hbWUsIGVycl9vdXQsIG5yLCBhcmdzKTsJCQlcCisgfSkKKyAKKysvKiBQb2ludGVyIG1hbmdsaW5nIHN1cHBvcnQuICBOb3RlIHRoYXQgdGxzIGFjY2VzcyBpcyBzbG93IGVub3VnaCB0aGF0CisrICAgd2UgZG9uJ3QgZGVvcHRpbWl6ZSB0aGluZ3MgYnkgcGxhY2luZyB0aGUgcG9pbnRlciBjaGVjayB2YWx1ZSB0aGVyZS4gICovCisrCisrI2lmIGRlZmluZWQgTk9UX0lOX2xpYmMgJiYgZGVmaW5lZCBJU19JTl9ydGxkCisrIyBpZmRlZiBfX0FTU0VNQkxFUl9fCisrIyAgZGVmaW5lIFBUUl9NQU5HTEUoZHN0LCBzcmMsIHRtcCkJCQkJXAorKwlsZGFoCXRtcCwgX19wb2ludGVyX2Noa19ndWFyZF9sb2NhbCgkMjkpICFncHJlbGhpZ2g7CVwKKysJbGRxCXRtcCwgX19wb2ludGVyX2Noa19ndWFyZF9sb2NhbCh0bXApICFncHJlbGxvdzsJXAorKwl4b3IJc3JjLCB0bXAsIGRzdAorKyMgIGRlZmluZSBQVFJfTUFOR0xFMihkc3QsIHNyYywgdG1wKQkJCQlcCisrCXhvcglzcmMsIHRtcCwgZHN0CisrIyAgZGVmaW5lIFBUUl9ERU1BTkdMRShkc3QsIHRtcCkgICBQVFJfTUFOR0xFKGRzdCwgZHN0LCB0bXApCisrIyAgZGVmaW5lIFBUUl9ERU1BTkdMRTIoZHN0LCB0bXApICBQVFJfTUFOR0xFMihkc3QsIGRzdCwgdG1wKQorKyMgZWxzZQorK2V4dGVybiB1aW50cHRyX3QgX19wb2ludGVyX2Noa19ndWFyZF9sb2NhbCBhdHRyaWJ1dGVfcmVscm8gYXR0cmlidXRlX2hpZGRlbjsKKysjICBkZWZpbmUgUFRSX01BTkdMRSh2YXIpCVwKKysgICh2YXIpID0gKF9fdHlwZW9mICh2YXIpKSAoKHVpbnRwdHJfdCkgKHZhcikgXiBfX3BvaW50ZXJfY2hrX2d1YXJkX2xvY2FsKQorKyMgIGRlZmluZSBQVFJfREVNQU5HTEUodmFyKSAgUFRSX01BTkdMRSh2YXIpCisrIyBlbmRpZgorKyNlbGlmIGRlZmluZWQgUElDCisrIyBpZmRlZiBfX0FTU0VNQkxFUl9fCisrIyAgZGVmaW5lIFBUUl9NQU5HTEUoZHN0LCBzcmMsIHRtcCkJCVwKKysJbGRxCXRtcCwgX19wb2ludGVyX2Noa19ndWFyZDsJXAorKwl4b3IJc3JjLCB0bXAsIGRzdAorKyMgIGRlZmluZSBQVFJfTUFOR0xFMihkc3QsIHNyYywgdG1wKQkJXAorKwl4b3IJc3JjLCB0bXAsIGRzdAorKyMgIGRlZmluZSBQVFJfREVNQU5HTEUoZHN0LCB0bXApICAgUFRSX01BTkdMRShkc3QsIGRzdCwgdG1wKQorKyMgIGRlZmluZSBQVFJfREVNQU5HTEUyKGRzdCwgdG1wKSAgUFRSX01BTkdMRTIoZHN0LCBkc3QsIHRtcCkKKysjIGVsc2UKKytleHRlcm4gdWludHB0cl90IF9fcG9pbnRlcl9jaGtfZ3VhcmQgYXR0cmlidXRlX3JlbHJvOworKyMgIGRlZmluZSBQVFJfTUFOR0xFKHZhcikJXAorKwkodmFyKSA9ICh2b2lkICopICgodWludHB0cl90KSAodmFyKSBeIF9fcG9pbnRlcl9jaGtfZ3VhcmQpCisrIyAgZGVmaW5lIFBUUl9ERU1BTkdMRSh2YXIpICBQVFJfTUFOR0xFKHZhcikKKysjIGVuZGlmCisrI2Vsc2UKKysvKiBQb2ludGVyIG1hbmdsaW5nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciBzdGF0aWMgbGliYyBvbiBhbHBoYS4gICovCisrIyBpZm5kZWYgX19BU1NFTUJMRVJfXworKyMgIGRlZmluZSBQVFJfTUFOR0xFKHZhcikgICAodm9pZCkgKHZhcikKKysjICBkZWZpbmUgUFRSX0RFTUFOR0xFKHZhcikgKHZvaWQpICh2YXIpCisrIyBlbmRpZgorKyNlbmRpZgorKworICNlbmRpZiAvKiBfTElOVVhfQUxQSEFfU1lTREVQX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYuMS8yMTAtbGxsX2xvY2tfdC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYuMS8yMTAtbGxsX2xvY2tfdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDU5NzMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNi4xLzIxMC1sbGxfbG9ja190LnBhdGNoCkBAIC0wLDAgKzEsMjM3IEBACitQYXRjaCBwcm92aWRlZCBidSBJb2FubmlzIEUuIFZFTkVUSVMKKworVXNpbmc6CisKK3R5cGVkZWYgaW50IGxsbF9sb2NrX3Q7CisKK2NyZWF0ZXMgcHJvYmxlbXMgZHVyaW5nIGNvbXBpbGF0aW9uLiBTaW5jZSBnbGliYyAyLjcgZ290IHJpZCBvZiB0aGUgJ3R5cGVkZWYnIGFuZAordXNlcyBkaXJlY3RseSAnaW50Jywgd2UgZG8gdGhlIHNhbWUgaGVyZS4KKworZGlmZiAtTmF1ciBnbGliYy0yLjYuMS9ucHRsL2FsbG9jYXRlc3RhY2suYyBnbGliYy0yLjYuMS5uZXcvbnB0bC9hbGxvY2F0ZXN0YWNrLmMKKy0tLSBnbGliYy0yLjYuMS9ucHRsL2FsbG9jYXRlc3RhY2suYwkyMDA2LTA4LTIzIDIwOjM5OjQ3LjAwMDAwMDAwMCArMDMwMAorKysrIGdsaWJjLTIuNi4xLm5ldy9ucHRsL2FsbG9jYXRlc3RhY2suYwkyMDA4LTA3LTI3IDIwOjU2OjE5LjAwMDAwMDAwMCArMDMwMAorQEAgLTEwMyw3ICsxMDMsNyBAQAorIHN0YXRpYyBzaXplX3Qgc3RhY2tfY2FjaGVfYWN0c2l6ZTsKKyAKKyAvKiBNdXRleCBwcm90ZWN0aW5nIHRoaXMgdmFyaWFibGUuICAqLworLXN0YXRpYyBsbGxfbG9ja190IHN0YWNrX2NhY2hlX2xvY2sgPSBMTExfTE9DS19JTklUSUFMSVpFUjsKKytzdGF0aWMgaW50IHN0YWNrX2NhY2hlX2xvY2sgPSBMTExfTE9DS19JTklUSUFMSVpFUjsKKyAKKyAvKiBMaXN0IG9mIHF1ZXVlZCBzdGFjayBmcmFtZXMuICAqLworIHN0YXRpYyBMSVNUX0hFQUQgKHN0YWNrX2NhY2hlKTsKK2RpZmYgLU5hdXIgZ2xpYmMtMi42LjEvbnB0bC9kZXNjci5oIGdsaWJjLTIuNi4xLm5ldy9ucHRsL2Rlc2NyLmgKKy0tLSBnbGliYy0yLjYuMS9ucHRsL2Rlc2NyLmgJMjAwNi0wOS0yNCAyMDoxMDo1NS4wMDAwMDAwMDAgKzAzMDAKKysrKyBnbGliYy0yLjYuMS5uZXcvbnB0bC9kZXNjci5oCTIwMDgtMDctMjcgMjA6NTQ6NDEuMDAwMDAwMDAwICswMzAwCitAQCAtMzA1LDEwICszMDUsMTAgQEAKKyAgIGludCBwYXJlbnRfY2FuY2VsaGFuZGxpbmc7CisgCisgICAvKiBMb2NrIHRvIHN5bmNocm9uaXplIGFjY2VzcyB0byB0aGUgZGVzY3JpcHRvci4gICovCistICBsbGxfbG9ja190IGxvY2s7CisrICBpbnQgbG9jazsKKyAKKyAgIC8qIExvY2sgZm9yIHN5bmNocm9uaXppbmcgc2V0eGlkIGNhbGxzLiAgKi8KKy0gIGxsbF9sb2NrX3Qgc2V0eGlkX2Z1dGV4OworKyAgaW50IHNldHhpZF9mdXRleDsKKyAKKyAjaWYgSFBfVElNSU5HX0FWQUlMCisgICAvKiBPZmZzZXQgb2YgdGhlIENQVSBjbG9jayBhdCBzdGFydCB0aHJlYWQgc3RhcnQgdGltZS4gICovCitkaWZmIC1OYXVyIGdsaWJjLTIuNi4xL25wdGwvcHRocmVhZF9hdHRyX2luaXQuYyBnbGliYy0yLjYuMS5uZXcvbnB0bC9wdGhyZWFkX2F0dHJfaW5pdC5jCistLS0gZ2xpYmMtMi42LjEvbnB0bC9wdGhyZWFkX2F0dHJfaW5pdC5jCTIwMDQtMDMtMTkgMDE6NTY6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi42LjEubmV3L25wdGwvcHRocmVhZF9hdHRyX2luaXQuYwkyMDA4LTA3LTI3IDIwOjU1OjAzLjAwMDAwMDAwMCArMDMwMAorQEAgLTI3LDcgKzI3LDcgQEAKKyAKKyAKKyBzdHJ1Y3QgcHRocmVhZF9hdHRyICpfX2F0dHJfbGlzdDsKKy1sbGxfbG9ja190IF9fYXR0cl9saXN0X2xvY2sgPSBMTExfTE9DS19JTklUSUFMSVpFUjsKKytpbnQgX19hdHRyX2xpc3RfbG9jayA9IExMTF9MT0NLX0lOSVRJQUxJWkVSOworIAorIAorIGludAorZGlmZiAtTmF1ciBnbGliYy0yLjYuMS9ucHRsL3B0aHJlYWRQLmggZ2xpYmMtMi42LjEubmV3L25wdGwvcHRocmVhZFAuaAorLS0tIGdsaWJjLTIuNi4xL25wdGwvcHRocmVhZFAuaAkyMDA2LTA4LTIzIDIwOjQyOjUyLjAwMDAwMDAwMCArMDMwMAorKysrIGdsaWJjLTIuNi4xLm5ldy9ucHRsL3B0aHJlYWRQLmgJMjAwOC0wNy0yNyAyMDo1Njo0MC4wMDAwMDAwMDAgKzAzMDAKK0BAIC0xNDMsNyArMTQzLDcgQEAKKyAKKyAvKiBBdHRyaWJ1dGUgaGFuZGxpbmcuICAqLworIGV4dGVybiBzdHJ1Y3QgcHRocmVhZF9hdHRyICpfX2F0dHJfbGlzdCBhdHRyaWJ1dGVfaGlkZGVuOworLWV4dGVybiBsbGxfbG9ja190IF9fYXR0cl9saXN0X2xvY2sgYXR0cmlidXRlX2hpZGRlbjsKKytleHRlcm4gaW50IF9fYXR0cl9saXN0X2xvY2sgYXR0cmlidXRlX2hpZGRlbjsKKyAKKyAvKiBGaXJzdCBhdmFpbGFibGUgUlQgc2lnbmFsLiAgKi8KKyBleHRlcm4gaW50IF9fY3VycmVudF9zaWdydG1pbiBhdHRyaWJ1dGVfaGlkZGVuOworZGlmZiAtTmF1ciBnbGliYy0yLjYuMS9ucHRsL3NlbWFwaG9yZVAuaCBnbGliYy0yLjYuMS5uZXcvbnB0bC9zZW1hcGhvcmVQLmgKKy0tLSBnbGliYy0yLjYuMS9ucHRsL3NlbWFwaG9yZVAuaAkyMDA2LTA1LTExIDIwOjA4OjM3LjAwMDAwMDAwMCArMDMwMAorKysrIGdsaWJjLTIuNi4xLm5ldy9ucHRsL3NlbWFwaG9yZVAuaAkyMDA4LTA3LTI3IDIwOjU1OjQyLjAwMDAwMDAwMCArMDMwMAorQEAgLTQ4LDcgKzQ4LDcgQEAKKyBleHRlcm4gdm9pZCAqX19zZW1fbWFwcGluZ3MgYXR0cmlidXRlX2hpZGRlbjsKKyAKKyAvKiBMb2NrIHRvIHByb3RlY3QgdGhlIHNlYXJjaCB0cmVlLiAgKi8KKy1leHRlcm4gbGxsX2xvY2tfdCBfX3NlbV9tYXBwaW5nc19sb2NrIGF0dHJpYnV0ZV9oaWRkZW47CisrZXh0ZXJuIGludCBfX3NlbV9tYXBwaW5nc19sb2NrIGF0dHJpYnV0ZV9oaWRkZW47CisgCisgCisgLyogSW5pdGlhbGl6ZXIgZm9yIG1vdW50cG9pbnQuICAqLworZGlmZiAtTmF1ciBnbGliYy0yLjYuMS9ucHRsL3NlbV9vcGVuLmMgZ2xpYmMtMi42LjEubmV3L25wdGwvc2VtX29wZW4uYworLS0tIGdsaWJjLTIuNi4xL25wdGwvc2VtX29wZW4uYwkyMDA2LTA1LTExIDIwOjA5OjQzLjAwMDAwMDAwMCArMDMwMAorKysrIGdsaWJjLTIuNi4xLm5ldy9ucHRsL3NlbV9vcGVuLmMJMjAwOC0wNy0yNyAyMDo1NToyMi4wMDAwMDAwMDAgKzAzMDAKK0BAIC0xNDcsNyArMTQ3LDcgQEAKKyB2b2lkICpfX3NlbV9tYXBwaW5ncyBhdHRyaWJ1dGVfaGlkZGVuOworIAorIC8qIExvY2sgdG8gcHJvdGVjdCB0aGUgc2VhcmNoIHRyZWUuICAqLworLWxsbF9sb2NrX3QgX19zZW1fbWFwcGluZ3NfbG9jayBhdHRyaWJ1dGVfaGlkZGVuID0gTExMX0xPQ0tfSU5JVElBTElaRVI7CisraW50IF9fc2VtX21hcHBpbmdzX2xvY2sgYXR0cmlidXRlX2hpZGRlbiA9IExMTF9MT0NLX0lOSVRJQUxJWkVSOworIAorIAorIC8qIFNlYXJjaCBmb3IgZXhpc3RpbmcgbWFwcGluZyBhbmQgaWYgcG9zc2libGUgYWRkIHRoZSBvbmUgcHJvdmlkZWQuICAqLworZGlmZiAtTmF1ciBnbGliYy0yLjYuMS9ucHRsL3B0aHJlYWRfb25jZS5jIGdsaWJjLTIuNi4xLm5ldy9ucHRsL3B0aHJlYWRfb25jZS5jCistLS0gZ2xpYmMtMi42LjEvbnB0bC9wdGhyZWFkX29uY2UuYwkyMDAyLTExLTI3IDAwOjUwOjMxLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuNi4xLm5ldy9ucHRsL3B0aHJlYWRfb25jZS5jCTIwMDgtMDctMjcgMjA6NTc6MTIuMDAwMDAwMDAwICswMzAwCitAQCAtMjIsNyArMjIsNyBAQAorIAorIAorIAorLXN0YXRpYyBsbGxfbG9ja190IG9uY2VfbG9jayA9IExMTF9MT0NLX0lOSVRJQUxJWkVSOworK3N0YXRpYyBpbnQgb25jZV9sb2NrID0gTExMX0xPQ0tfSU5JVElBTElaRVI7CisgCisgCisgaW50CitkaWZmIC1OYXVyIGdsaWJjLTIuNi4xL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvbG93bGV2ZWxsb2NrLmggZ2xpYmMtMi42LjEubmV3L25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvbG93bGV2ZWxsb2NrLmgKKy0tLSBnbGliYy0yLjYuMS9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2xvd2xldmVsbG9jay5oCTIwMDYtMDctMjkgMDg6MDY6MDcuMDAwMDAwMDAwICswMzAwCisrKysgZ2xpYmMtMi42LjEubmV3L25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvbG93bGV2ZWxsb2NrLmgJMjAwOC0wNy0yNyAyMDo1OToxNS4wMDAwMDAwMDAgKzAzMDAKK0BAIC0yMzAsOSArMjMwLDYgQEAKKyAvKiBPdXIgaW50ZXJuYWwgbG9jayBpbXBsZW1lbnRhdGlvbiBpcyBpZGVudGljYWwgdG8gdGhlIGJpbmFyeS1jb21wYXRpYmxlCisgICAgbXV0ZXggaW1wbGVtZW50YXRpb24uICovCisgCistLyogVHlwZSBmb3IgbG9jayBvYmplY3QuICAqLworLXR5cGVkZWYgaW50IGxsbF9sb2NrX3Q7CistCisgLyogSW5pdGlhbGl6ZXJzIGZvciBsb2NrLiAgKi8KKyAjZGVmaW5lIExMTF9MT0NLX0lOSVRJQUxJWkVSCQkoMCkKKyAjZGVmaW5lIExMTF9MT0NLX0lOSVRJQUxJWkVSX0xPQ0tFRAkoMSkKK2RpZmYgLU5hdXIgZ2xpYmMtMi42LjEvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9mb3JrLmMgZ2xpYmMtMi42LjEubmV3L25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZm9yay5jCistLS0gZ2xpYmMtMi42LjEvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9mb3JrLmMJMjAwMy0xMi0yMSAwMTozNzoxMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjYuMS5uZXcvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9mb3JrLmMJMjAwOC0wNy0yNyAyMTowMDowMS4wMDAwMDAwMDAgKzAzMDAKK0BAIC0xODMsNyArMTgzLDcgQEAKKyAJfQorIAorICAgICAgIC8qIEluaXRpYWxpemUgdGhlIGZvcmsgbG9jay4gICovCistICAgICAgX19mb3JrX2xvY2sgPSAobGxsX2xvY2tfdCkgTExMX0xPQ0tfSU5JVElBTElaRVI7CisrICAgICAgX19mb3JrX2xvY2sgPSAoaW50KSBMTExfTE9DS19JTklUSUFMSVpFUjsKKyAgICAgfQorICAgZWxzZQorICAgICB7CitkaWZmIC1OYXVyIGdsaWJjLTIuNi4xL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZm9yay5oIGdsaWJjLTIuNi4xLm5ldy9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2ZvcmsuaAorLS0tIGdsaWJjLTIuNi4xL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZm9yay5oCTIwMDYtMDUtMTUgMjM6MTk6NDMuMDAwMDAwMDAwICswMzAwCisrKysgZ2xpYmMtMi42LjEubmV3L25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZm9yay5oCTIwMDgtMDctMjcgMjA6NTg6NDkuMDAwMDAwMDAwICswMzAwCitAQCAtMjYsNyArMjYsNyBAQAorIGV4dGVybiB1bnNpZ25lZCBsb25nIGludCAqX19mb3JrX2dlbmVyYXRpb25fcG9pbnRlciBhdHRyaWJ1dGVfaGlkZGVuOworIAorIC8qIExvY2sgdG8gcHJvdGVjdCBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gb2YgZm9yayBoYW5kbGVycy4gICovCistZXh0ZXJuIGxsbF9sb2NrX3QgX19mb3JrX2xvY2sgYXR0cmlidXRlX2hpZGRlbjsKKytleHRlcm4gaW50IF9fZm9ya19sb2NrIGF0dHJpYnV0ZV9oaWRkZW47CisgCisgLyogRWxlbWVudHMgb2YgdGhlIGZvcmsgaGFuZGxlciBsaXN0cy4gICovCisgc3RydWN0IGZvcmtfaGFuZGxlcgorZGlmZiAtTmF1ciBnbGliYy0yLjYuMS9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvbG93bGV2ZWxsb2NrLmggZ2xpYmMtMi42LjEubmV3L25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9sb3dsZXZlbGxvY2suaAorLS0tIGdsaWJjLTIuNi4xL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9sb3dsZXZlbGxvY2suaAkyMDA2LTA5LTA1IDE3OjQ0OjI1LjAwMDAwMDAwMCArMDMwMAorKysrIGdsaWJjLTIuNi4xLm5ldy9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvbG93bGV2ZWxsb2NrLmgJMjAwOC0wNy0yNyAyMTowMDoxOS4wMDAwMDAwMDAgKzAzMDAKK0BAIC00MzYsOSArNDM2LDYgQEAKKyAvKiBXZSBoYXZlIGEgc2VwYXJhdGUgaW50ZXJuYWwgbG9jayBpbXBsZW1lbnRhdGlvbiB3aGljaCBpcyBub3QgdGllZAorICAgIHRvIGJpbmFyeSBjb21wYXRpYmlsaXR5LiAgKi8KKyAKKy0vKiBUeXBlIGZvciBsb2NrIG9iamVjdC4gICovCistdHlwZWRlZiBpbnQgbGxsX2xvY2tfdDsKKy0KKyAvKiBJbml0aWFsaXplcnMgZm9yIGxvY2suICAqLworICNkZWZpbmUgTExMX0xPQ0tfSU5JVElBTElaRVIJCSgwKQorICNkZWZpbmUgTExMX0xPQ0tfSU5JVElBTElaRVJfTE9DS0VECSgxKQorZGlmZiAtTmF1ciBnbGliYy0yLjYuMS9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2lhNjQvbG93bGV2ZWxsb2NrLmggZ2xpYmMtMi42LjEubmV3L25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaWE2NC9sb3dsZXZlbGxvY2suaAorLS0tIGdsaWJjLTIuNi4xL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaWE2NC9sb3dsZXZlbGxvY2suaAkyMDA2LTA3LTI5IDA4OjA2OjA3LjAwMDAwMDAwMCArMDMwMAorKysrIGdsaWJjLTIuNi4xLm5ldy9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2lhNjQvbG93bGV2ZWxsb2NrLmgJMjAwOC0wNy0yNyAyMDo1ODoxNi4wMDAwMDAwMDAgKzAzMDAKK0BAIC0yMjMsOSArMjIzLDYgQEAKKyAvKiBXZSBoYXZlIGEgc2VwYXJhdGUgaW50ZXJuYWwgbG9jayBpbXBsZW1lbnRhdGlvbiB3aGljaCBpcyBub3QgdGllZAorICAgIHRvIGJpbmFyeSBjb21wYXRpYmlsaXR5LiAgV2UgY2FuIHVzZSB0aGUgbGxsX211dGV4XyouICAqLworIAorLS8qIFR5cGUgZm9yIGxvY2sgb2JqZWN0LiAgKi8KKy10eXBlZGVmIGludCBsbGxfbG9ja190OworLQorIGV4dGVybiBpbnQgbGxsX3VubG9ja193YWtlX2NiIChpbnQgKl9fZnV0ZXgpIGF0dHJpYnV0ZV9oaWRkZW47CisgCisgLyogSW5pdGlhbGl6ZXJzIGZvciBsb2NrLiAgKi8KK2RpZmYgLU5hdXIgZ2xpYmMtMi42LjEvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2xvd2xldmVsbG9jay5oIGdsaWJjLTIuNi4xLm5ldy9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvbG93bGV2ZWxsb2NrLmgKKy0tLSBnbGliYy0yLjYuMS9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvbG93bGV2ZWxsb2NrLmgJMjAwNi0wNy0yOSAwODowNjowNy4wMDAwMDAwMDAgKzAzMDAKKysrKyBnbGliYy0yLjYuMS5uZXcvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2xvd2xldmVsbG9jay5oCTIwMDgtMDctMjcgMjE6MDA6MzYuMDAwMDAwMDAwICswMzAwCitAQCAtMjU0LDkgKzI1NCw2IEBACisgLyogT3VyIGludGVybmFsIGxvY2sgaW1wbGVtZW50YXRpb24gaXMgaWRlbnRpY2FsIHRvIHRoZSBiaW5hcnktY29tcGF0aWJsZQorICAgIG11dGV4IGltcGxlbWVudGF0aW9uLiAqLworIAorLS8qIFR5cGUgZm9yIGxvY2sgb2JqZWN0LiAgKi8KKy10eXBlZGVmIGludCBsbGxfbG9ja190OworLQorIC8qIEluaXRpYWxpemVycyBmb3IgbG9jay4gICovCisgI2RlZmluZSBMTExfTE9DS19JTklUSUFMSVpFUgkJKDApCisgI2RlZmluZSBMTExfTE9DS19JTklUSUFMSVpFUl9MT0NLRUQJKDEpCitkaWZmIC1OYXVyIGdsaWJjLTIuNi4xL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcmVnaXN0ZXItYXRmb3JrLmMgZ2xpYmMtMi42LjEubmV3L25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcmVnaXN0ZXItYXRmb3JrLmMKKy0tLSBnbGliYy0yLjYuMS9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3JlZ2lzdGVyLWF0Zm9yay5jCTIwMDUtMTItMjIgMDA6MTc6MjEuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi42LjEubmV3L25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcmVnaXN0ZXItYXRmb3JrLmMJMjAwOC0wNy0yNyAyMTowMDo1NS4wMDAwMDAwMDAgKzAzMDAKK0BAIC0yNCw3ICsyNCw3IEBACisgCisgCisgLyogTG9jayB0byBwcm90ZWN0IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZiBmb3JrIGhhbmRsZXJzLiAgKi8KKy1sbGxfbG9ja190IF9fZm9ya19sb2NrID0gTExMX0xPQ0tfSU5JVElBTElaRVI7CisraW50IF9fZm9ya19sb2NrID0gTExMX0xPQ0tfSU5JVElBTElaRVI7CisgCisgCisgLyogTnVtYmVyIG9mIHByZS1hbGxvY2F0ZWQgaGFuZGxlciBlbnRyaWVzLiAgKi8KK2RpZmYgLU5hdXIgZ2xpYmMtMi42LjEvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zMzkwL2xvd2xldmVsbG9jay5oIGdsaWJjLTIuNi4xLm5ldy9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3MzOTAvbG93bGV2ZWxsb2NrLmgKKy0tLSBnbGliYy0yLjYuMS9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3MzOTAvbG93bGV2ZWxsb2NrLmgJMjAwNi0wNy0yOSAwODowNjowNy4wMDAwMDAwMDAgKzAzMDAKKysrKyBnbGliYy0yLjYuMS5uZXcvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zMzkwL2xvd2xldmVsbG9jay5oCTIwMDgtMDctMjcgMjE6MDE6MTQuMDAwMDAwMDAwICswMzAwCitAQCAtMzA5LDkgKzMwOSw2IEBACisgLyogV2UgaGF2ZSBhIHNlcGFyYXRlIGludGVybmFsIGxvY2sgaW1wbGVtZW50YXRpb24gd2hpY2ggaXMgbm90IHRpZWQKKyAgICB0byBiaW5hcnkgY29tcGF0aWJpbGl0eS4gIFdlIGNhbiB1c2UgdGhlIGxsbF9tdXRleF8qLiAgKi8KKyAKKy0vKiBUeXBlIGZvciBsb2NrIG9iamVjdC4gICovCistdHlwZWRlZiBpbnQgbGxsX2xvY2tfdDsKKy0KKyAvKiBJbml0aWFsaXplcnMgZm9yIGxvY2suICAqLworICNkZWZpbmUgTExMX0xPQ0tfSU5JVElBTElaRVIJCSgwKQorICNkZWZpbmUgTExMX0xPQ0tfSU5JVElBTElaRVJfTE9DS0VECSgxKQorZGlmZiAtTmF1ciBnbGliYy0yLjYuMS9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL2xvd2xldmVsbG9jay5oIGdsaWJjLTIuNi4xLm5ldy9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL2xvd2xldmVsbG9jay5oCistLS0gZ2xpYmMtMi42LjEvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9sb3dsZXZlbGxvY2suaAkyMDA2LTA3LTI5IDA4OjA2OjA2LjAwMDAwMDAwMCArMDMwMAorKysrIGdsaWJjLTIuNi4xLm5ldy9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL2xvd2xldmVsbG9jay5oCTIwMDgtMDctMjcgMjA6NTg6MDAuMDAwMDAwMDAwICswMzAwCitAQCAtMjc4LDkgKzI3OCw2IEBACisgLyogV2UgaGF2ZSBhIHNlcGFyYXRlIGludGVybmFsIGxvY2sgaW1wbGVtZW50YXRpb24gd2hpY2ggaXMgbm90IHRpZWQKKyAgICB0byBiaW5hcnkgY29tcGF0aWJpbGl0eS4gICovCisgCistLyogVHlwZSBmb3IgbG9jayBvYmplY3QuICAqLworLXR5cGVkZWYgaW50IGxsbF9sb2NrX3Q7CistCisgLyogSW5pdGlhbGl6ZXJzIGZvciBsb2NrLiAgKi8KKyAjZGVmaW5lIExMTF9MT0NLX0lOSVRJQUxJWkVSCQkoMCkKKyAjZGVmaW5lIExMTF9MT0NLX0lOSVRJQUxJWkVSX0xPQ0tFRAkoMSkKK2RpZmYgLU5hdXIgZ2xpYmMtMi42LjEvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zcGFyYy9sb3dsZXZlbGxvY2suaCBnbGliYy0yLjYuMS5uZXcvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zcGFyYy9sb3dsZXZlbGxvY2suaAorLS0tIGdsaWJjLTIuNi4xL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc3BhcmMvbG93bGV2ZWxsb2NrLmgJMjAwNi0wNy0yOSAwODowNjowNi4wMDAwMDAwMDAgKzAzMDAKKysrKyBnbGliYy0yLjYuMS5uZXcvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zcGFyYy9sb3dsZXZlbGxvY2suaAkyMDA4LTA3LTI3IDIwOjU5OjM5LjAwMDAwMDAwMCArMDMwMAorQEAgLTIzNyw5ICsyMzcsNiBAQAorIC8qIFdlIGhhdmUgYSBzZXBhcmF0ZSBpbnRlcm5hbCBsb2NrIGltcGxlbWVudGF0aW9uIHdoaWNoIGlzIG5vdCB0aWVkCisgICAgdG8gYmluYXJ5IGNvbXBhdGliaWxpdHkuICBXZSBjYW4gdXNlIHRoZSBsbGxfbXV0ZXhfKi4gICovCisgCistLyogVHlwZSBmb3IgbG9jayBvYmplY3QuICAqLworLXR5cGVkZWYgaW50IGxsbF9sb2NrX3Q7CistCisgZXh0ZXJuIGludCBsbGxfdW5sb2NrX3dha2VfY2IgKGludCAqX19mdXRleCkgYXR0cmlidXRlX2hpZGRlbjsKKyAKKyAvKiBJbml0aWFsaXplcnMgZm9yIGxvY2suICAqLworZGlmZiAtTmF1ciBnbGliYy0yLjYuMS9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3g4Nl82NC9sb3dsZXZlbGxvY2suaCBnbGliYy0yLjYuMS5uZXcvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC94ODZfNjQvbG93bGV2ZWxsb2NrLmgKKy0tLSBnbGliYy0yLjYuMS9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3g4Nl82NC9sb3dsZXZlbGxvY2suaAkyMDA2LTA5LTA1IDE3OjQ1OjM0LjAwMDAwMDAwMCArMDMwMAorKysrIGdsaWJjLTIuNi4xLm5ldy9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3g4Nl82NC9sb3dsZXZlbGxvY2suaAkyMDA4LTA3LTI3IDIwOjU4OjMzLjAwMDAwMDAwMCArMDMwMAorQEAgLTQ0Niw5ICs0NDYsNiBAQAorIC8qIFdlIGhhdmUgYSBzZXBhcmF0ZSBpbnRlcm5hbCBsb2NrIGltcGxlbWVudGF0aW9uIHdoaWNoIGlzIG5vdCB0aWVkCisgICAgdG8gYmluYXJ5IGNvbXBhdGliaWxpdHkuICAqLworIAorLS8qIFR5cGUgZm9yIGxvY2sgb2JqZWN0LiAgKi8KKy10eXBlZGVmIGludCBsbGxfbG9ja190OworLQorIC8qIEluaXRpYWxpemVycyBmb3IgbG9jay4gICovCisgI2RlZmluZSBMTExfTE9DS19JTklUSUFMSVpFUgkJKDApCisgI2RlZmluZSBMTExfTE9DS19JTklUSUFMSVpFUl9MT0NLRUQJKDEpCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LjEvMjIwLWNyb3NzLXBvc2l4X21ha2VmaWxlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNi4xLzIyMC1jcm9zcy1wb3NpeF9tYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTYyM2RiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNi4xLzIyMC1jcm9zcy1wb3NpeF9tYWtlZmlsZS5wYXRjaApAQCAtMCwwICsxLDY1IEBACitPbiAyMDA5MDExMS4xMTUxKzAxMDAsIFRob21hcyBKb3VyZGFuIDx0am91cmRhbkBuZXVmLmZyPiB3cm90ZToKKworICBJJ20gc3RpbGwgd29ya2luZyBvbiB0aGUgc29sYXJpcyBwb3J0IGFuIEkgaGF2ZSB0aGUgc2FtZSBpc3N1ZSBoZXJlLgorICBXaGlsZSB0cnlpbmcgdG8gYnVpbGQgdGhlIGk2ODYtbnB0bC1saW51eC1nbnUgdG9vbGNoYWluIHVuZGVyCisgIE9wZW5Tb2xhcmlzLCB0aGUgcHJvYmxlbXMgYXBwZWFycyBkdXJpbmcgdGhlIG1ha2UgaW5zdGFsbCBydWxlIG9mIHRoZQorICBsaWJjIGZ1bmN0aW9uLgorCisgIFRoZSBwcm9ibGVtIGlzIHRoYXQgc29sYXJpcyB0cmllcyB0byBleGVjdXRlIGxkLWxpbnV4LnNvLjIsIHdoaWNoIGlzIGFuCisgIGVsZiAzMiBiaXRzIGR5biBsaWIsIGFuZCBpdCBmYWlscyB3aXRoIGEgbWVtb3J5IGZhdWx0LCBub3QgYSAiY2Fubm90CisgIGV4ZWN1dGUgYmluYXJ5IGZpbGUiLiBIZW5jZSB0aGUgYnVpbGQgc3RvcHMgb24gdGhpcyBlcnJvci4KKworQW5kIG9uIDIwMDkwMTExLjEzMzkrMDEwMCwgaGUgcmVwbGllZCB3aXRoOgorCisgIEFmdGVyIGRpZ2dpbmcgYSBsaXR0bGUsIHRoZSBwcm9ibGVtIGNvbWVzIGZyb20gdGhlCisgIGdsaWJjLTIuNi4xL3Bvc2l4L01ha2VmaWxlLiBJdCBoYXMgYmVlbiBzb2x2ZWQgc3RhcnRpbmcgZnJvbSBnbGliYyAyLjcKKyAgc28gSSBleHRyYWN0ZWQgYSBwYXRjaCBmb3IgZ2xpYmMgMi42LjEuCisKKy0tLSBnbGliYy0yLjYuMS9wb3NpeC9NYWtlZmlsZQkyMDA3LTA0LTA0IDAxOjI4OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuNy9wb3NpeC9NYWtlZmlsZQkyMDA3LTA5LTEyIDAxOjU3OjIyLjAwMDAwMDAwMCArMDIwMAorQEAgLTk4LDcgKzk4LDcgQEAKKyBlbmRpZgorIG90aGVycwkJOj0gZ2V0Y29uZgorIGluc3RhbGwtYmluCTo9IGdldGNvbmYKKy1pbnN0YWxsLW90aGVycwk6PSAkKGluc3RfbGliZXhlY2RpcikvZ2V0Y29uZgorK2luc3RhbGwtb3RoZXJzLXByb2dyYW1zCTo9ICQoaW5zdF9saWJleGVjZGlyKS9nZXRjb25mCisgCisgYmVmb3JlLWNvbXBpbGUJOj0gdGVzdGNhc2VzLmggcHRlc3RjYXNlcy5oCisgCitAQCAtMTEwLDcgKzExMCw3IEBACisgCSAgICAgdHN0LXJ4c3BlbmNlci1tZW0gdHN0LXJ4c3BlbmNlci5tdHJhY2UgdHN0LWdldGNvbmYub3V0IFwKKyAJICAgICB0c3QtcGNyZS1tZW0gdHN0LXBjcmUubXRyYWNlIHRzdC1ib29zdC1tZW0gdHN0LWJvb3N0Lm10cmFjZSBcCisgCSAgICAgYnVnLWdhMi5tdHJhY2UgYnVnLWdhMi1tZW0gYnVnLWdsb2IyLm10cmFjZSBidWctZ2xvYjItbWVtIFwKKy0JICAgICB0c3QtdmZvcmszLW1lbSB0c3QtdmZvcmszLm10cmFjZQorKwkgICAgIHRzdC12Zm9yazMtbWVtIHRzdC12Zm9yazMubXRyYWNlIGdldGNvbmYuc3BlY2xpc3QKKyAKKyBpbmNsdWRlIC4uL1J1bGVzCisgCitAQCAtMjkxLDEyICsyOTEsMjAgQEAKKyAkKG9ianBmeClidWctZ2xvYjItbWVtOiAkKG9ianBmeClidWctZ2xvYjIub3V0CisgCSQoY29tbW9uLW9ianBmeCltYWxsb2MvbXRyYWNlICQob2JqcGZ4KWJ1Zy1nbG9iMi5tdHJhY2UgPiAkQAorIAorLSQoaW5zdF9saWJleGVjZGlyKS9nZXRjb25mOiAkKG9ianBmeClnZXRjb25mIEZPUkNFCisrJChpbnN0X2xpYmV4ZWNkaXIpL2dldGNvbmY6ICQoaW5zdF9iaW5kaXIpL2dldGNvbmYgXAorKwkJCSAgICAkKG9ianBmeClnZXRjb25mLnNwZWNsaXN0IEZPUkNFCisgCSQoYWRkcHJlZml4ICQoLi4pLi9zY3JpcHRzL21raW5zdGFsbGRpcnMgLFwKKyAJCSAgICAkKGZpbHRlci1vdXQgJCh3aWxkY2FyZCAkQCksJEApKQorLQlmb3Igc3BlYyBpbiBgTENfQUxMPUMgR0VUQ09ORl9ESVI9L2Rldi9udWxsIFwKKy0JCSAgICAgJChydW4tcHJvZ3JhbS1wcmVmaXgpICQ8IFwKKy0JCSAgICAgX1BPU0lYX1Y2X1dJRFRIX1JFU1RSSUNURURfRU5WU2A7IGRvIFwKKy0JCSQoSU5TVEFMTF9QUk9HUkFNKSAkPCAkQC8kJHNwZWMubmV3OyBcCistCQltdiAtZiAkQC8kJHNwZWMubmV3ICRALyQkc3BlYzsgXAorLQlkb25lCisrCXdoaWxlIHJlYWQgc3BlYzsgZG8gXAorKwkgIGxuIC1mICQ8ICRALyQkc3BlYy5uZXcgfHwgJChJTlNUQUxMX1BST0dSQU0pICQ8ICRALyQkc3BlYy5uZXc7IFwKKysJICBtdiAtZiAkQC8kJHNwZWMubmV3ICRALyQkc3BlYzsgXAorKwlkb25lIDwgJChvYmpwZngpZ2V0Y29uZi5zcGVjbGlzdAorKworKyQob2JqcGZ4KWdldGNvbmYuc3BlY2xpc3Q6ICQob2JqcGZ4KWdldGNvbmYKKytpZmVxIChubywkKGNyb3NzLWNvbXBpbGluZykpCisrCUxDX0FMTD1DIEdFVENPTkZfRElSPS9kZXYvbnVsbCBcCisrCSQocnVuLXByb2dyYW0tcHJlZml4KSAkPCBfUE9TSVhfVjZfV0lEVEhfUkVTVFJJQ1RFRF9FTlZTID4gJEAubmV3CisrZWxzZQorKwk+ICRALm5ldworK2VuZGlmCisrCW12IC1mICRALm5ldyAkQApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNi8xMDAtY3lnd2luLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNi8xMDAtY3lnd2luLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMGNkN2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LzEwMC1jeWd3aW4ucGF0Y2gKQEAgLTAsMCArMSwxODcgQEAKK0ZpeGVzCitlbGYvbGlicnRsZC5vczogSW4gZnVuY3Rpb24gYHByb2Nlc3NfZW52dmFycyc6IDogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19hY2Nlc3MnCisuLi4KK3doZW4gYnVpbGRpbmcgZ2xpYmMtMi4zLnggb24gY3lnd2luCisKK0lkZWEgZnJvbQoraHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9tbC9idWctZ2xpYmMvMjAwMi0wMS9tc2cwMDA3MS9nbGliYy0yLjItY3lnaW4tc2hhcmVkLnBhdGNoCitCYXNpY2FsbHksIG1ha2UgZ2xpYmMgdXNlIC5vU1QgYXMgc3VmZml4IGZvciAnb2JqZWN0IHN0YXRpYycKK2luc3RlYWQgb2YgLm9TLCBzaW5jZSBjeWd3aW4gaGFzIHRyb3VibGUgZGlzdGluZ3Vpc2hpbmcgLm9zIGZyb20gLm9TCisoT3JpZ2luYWwgcGF0Y2ggaGFkIC5vbiwgYnV0IC5vU1QgaXMgbW9yZSBtbmVtb25pYyBmb3IgJ29iamVjdCBzdGF0aWMnKQorCitnbGliYy1saW51eHRocmVhZHMtMi4zLjUgYWxzbyByZXF1aXJlcyBhIHBhdGNoLCBzZWUgCisuLi9nbGliYy1saW51eHRocmVhZHMtMi4zLjUvZ2xpYmMtbGludXh0aHJlYWRzLTIuMy41LWN5Z3dpbi5wYXRjaAorCitbIGZvcndhcmQgcG9ydGVkIHRvIGdsaWJjLTIuMy41IGJ5IFBldHIgQ3ZhY2hvdWNlazoKKworTWVzc2FnZS1JRDogPDQyODJGQ0JBLjMwNDAwMDBAdW5pY29udHJvbHMuY3o+CitEYXRlOiBUaHUsIDEyIE1heSAyMDA1IDA4OjUwOjM0ICswMjAwCitGcm9tOiBQZXRyIEN2YWNob3VjZWsgPGN2YWNob3VjZWtAdW5pY29udHJvbHMuY3o+CitUbzogRGFuIEtlZ2VsIDxkYW5rQGtlZ2VsLmNvbT4KK0NDOiAgY3Jvc3NnY2NAc291cmNlcy5yZWRoYXQuY29tCitTdWJqZWN0OiBQYXRjaGVzIHRvIGJ1aWxkIGdjYyAzLjQuMyAvIGdsaWJjIDIuMy41IG9uIGN5Z3dpbgorCitIaSBEYW4sCitmb2xsb3dpbmcgcGF0Y2hlcyBhcmUgbmVlZGVkIHRvIGJ1aWxkIGdjYy0zLjQuMy9nbGliYy0yLjMuNSB0b29sY2hhaW4KK29uIGN5Z3dpbi4gVGVzdGVkIHRvIGJ1aWxkIHRvb2xjaGFpbnMgZm9yIHBvd2VycGMgNjA0IGFuZCA3NTAgdGFyZ2V0cy4KKworLS0gCisgICAgICAgICAgICAgICAgICAgICBQZXRyIEN2YWNob3VjZWsKKyAgICAgICAgICAgICAgICAgICAgIFVuaWNvbnRyb2xzIGEucy4KKyAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudW5pY29udHJvbHMuY3oKK10KKworZGlmZiAtYXVyIGdsaWJjLTIuMy41L01ha2Vjb25maWcgZ2xpYmMtMi4zLjUtY3lnd2luL01ha2Vjb25maWcKKy0tLSBnbGliYy0yLjMuNS9NYWtlY29uZmlnCTIwMDUtMDItMTYgMTE6NTA6MTkuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4zLjUtY3lnd2luL01ha2Vjb25maWcJMjAwNS0wNS0xMSAwODoyNDo1MS4wNDY4NzUwMDAgKzAyMDAKK0BAIC00NzIsNyArNDcyLDcgQEAKKyAjIHJ1biB0aGUgbGlua2VkIHByb2dyYW1zLgorIGxpbmstbGliYyA9IC1XbCwtcnBhdGgtbGluaz0kKHJwYXRoLWxpbmspIFwKKyAJICAgICQoY29tbW9uLW9ianBmeClsaWJjLnNvJChsaWJjLnNvLXZlcnNpb24pIFwKKy0JICAgICQoY29tbW9uLW9ianBmeCkkKHBhdHN1YnN0ICUsJChsaWJ0eXBlLm9TKSxjKSAkKGdudWxpYikKKysJICAgICQoY29tbW9uLW9ianBmeCkkKHBhdHN1YnN0ICUsJChsaWJ0eXBlLm9TVCksYykgJChnbnVsaWIpCisgIyBUaGlzIGlzIGhvdyB0byBmaW5kIGF0IGJ1aWxkLXRpbWUgdGhpbmdzIHRoYXQgd2lsbCBiZSBpbnN0YWxsZWQgdGhlcmUuCisgcnBhdGgtZGlycyA9IG1hdGggZWxmIGRsZmNuIG5zcyBuaXMgcnQgcmVzb2x2IGNyeXB0CisgZW5kaWYKK0BAIC02OTMsNyArNjkzLDcgQEAKKyAjIFRoZSBjb21waWxhdGlvbiBydWxlcyB1c2UgJChDUFBGTEFHUy0ke1NVRkZJWH0pIGFuZCAkKENGTEFHUy0ke1NVRkZJWH0pCisgIyB0byBwYXNzIGRpZmZlcmVudCBmbGFncyBmb3IgZWFjaCBmbGF2b3IuCisgbGlidHlwZXMgPSAkKGZvcmVhY2ggbywkKG9iamVjdC1zdWZmaXhlcy1mb3ItbGliYyksJChsaWJ0eXBlJG8pKQorLWFsbC1vYmplY3Qtc3VmZml4ZXMgOj0gLm8gLm9zIC5vcCAub2cgLm9iIC5vUworK2FsbC1vYmplY3Qtc3VmZml4ZXMgOj0gLm8gLm9zIC5vcCAub2cgLm9iIC5vU1QKKyBvYmplY3Qtc3VmZml4ZXMgOj0KKyBDUFBGTEFHUy0ubyA9ICQocGljLWRlZmF1bHQpCisgQ0ZMQUdTLS5vID0gJChmaWx0ZXIgJWZyYW1lLXBvaW50ZXIsJCgrY2ZsYWdzKSkKK0BAIC03NDksMTQgKzc0OSwxNCBAQAorIAorIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgIyBCdWlsZCBzcGVjaWFsIGxpYnJhcnkgdGhhdCBjb250YWlucyB0aGUgc3RhdGljLW9ubHkgcm91dGluZXMgZm9yIGxpYmMuCistb2JqZWN0LXN1ZmZpeGVzLWZvci1saWJjICs9IC5vUworK29iamVjdC1zdWZmaXhlcy1mb3ItbGliYyArPSAub1NUCisgCisgIyBNdXN0IGJ1aWxkIHRoZSByb3V0aW5lcyBhcyBQSUMsIHRob3VnaCwgYmVjYXVzZSB0aGV5IGNhbiBlbmQgdXAgaW4gKHVzZXJzJykKKyAjIHNoYXJlZCBvYmplY3RzLiAgV2UgZG9uJ3Qgd2FudCB0byB1c2UgQ0ZMQUdTLW9zIGJlY2F1c2UgdXNlcnMgbWF5LCBmb3IKKyAjIGV4YW1wbGUsIG1ha2UgdGhhdCBwcm9jZXNzb3Itc3BlY2lmaWMuCistQ0ZMQUdTLS5vUyA9ICQoQ0ZMQUdTLS5vKSAkKFBJQy1jY2ZsYWcpCistQ1BQRkxBR1MtLm9TID0gJChDUFBGTEFHUy0ubykgLURQSUMgLURMSUJDX05PTlNIQVJFRD0xCistbGlidHlwZS5vUyA9IGxpYiVfbm9uc2hhcmVkLmEKKytDRkxBR1MtLm9TVCA9ICQoQ0ZMQUdTLS5vKSAkKFBJQy1jY2ZsYWcpCisrQ1BQRkxBR1MtLm9TVCA9ICQoQ1BQRkxBR1MtLm8pIC1EUElDIC1ETElCQ19OT05TSEFSRUQ9MQorK2xpYnR5cGUub1NUID0gbGliJV9ub25zaGFyZWQuYQorIGVuZGlmCisgCisgIyBUaGUgYXNzZW1ibGVyIGNhbiBnZW5lcmF0ZSBkZWJ1ZyBpbmZvcm1hdGlvbiB0b28uCitkaWZmIC1hdXIgZ2xpYmMtMi4zLjUvTWFrZXJ1bGVzIGdsaWJjLTIuMy41LWN5Z3dpbi9NYWtlcnVsZXMKKy0tLSBnbGliYy0yLjMuNS9NYWtlcnVsZXMJMjAwNC0xMi0xNSAxOTo1MjozOS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjMuNS1jeWd3aW4vTWFrZXJ1bGVzCTIwMDUtMDUtMTEgMDg6MjU6MzMuNTc4MTI1MDAwICswMjAwCitAQCAtNDE3LDcgKzQxNyw3IEBACisgIyBCb3VuZGVkIHBvaW50ZXIgdGh1bmtzIGFyZSBvbmx5IGJ1aWx0IGZvciAqLm9iCisgZWxpZGUtYnAtdGh1bmtzID0gJChhZGRwcmVmaXggJChicHBmeCksJChicC10aHVua3MpKQorIAorLWVsaWRlLXJvdXRpbmVzLm9TICs9ICQoZmlsdGVyLW91dCAkKHN0YXRpYy1vbmx5LXJvdXRpbmVzKSxcCisrZWxpZGUtcm91dGluZXMub1NUICs9ICQoZmlsdGVyLW91dCAkKHN0YXRpYy1vbmx5LXJvdXRpbmVzKSxcCisgCQkJCSAgJChyb3V0aW5lcykgJChhdXgpICQoc3lzZGVwX3JvdXRpbmVzKSkgXAorIAkJICAgICAkKGVsaWRlLWJwLXRodW5rcykKKyBlbGlkZS1yb3V0aW5lcy5vcyArPSAkKHN0YXRpYy1vbmx5LXJvdXRpbmVzKSAkKGVsaWRlLWJwLXRodW5rcykKK0BAIC05ODEsNyArOTgxLDcgQEAKKyBpbnN0YWxsOiAkKGluc3RfbGliZGlyKS9saWJjLnNvCisgJChpbnN0X2xpYmRpcikvbGliYy5zbzogJChjb21tb24tb2JqcGZ4KWZvcm1hdC5sZHMgXAorIAkJCSQoY29tbW9uLW9ianBmeClsaWJjLnNvJChsaWJjLnNvLXZlcnNpb24pIFwKKy0JCQkkKGluc3RfbGliZGlyKS8kKHBhdHN1YnN0ICUsJChsaWJ0eXBlLm9TKSxcCisrCQkJJChpbnN0X2xpYmRpcikvJChwYXRzdWJzdCAlLCQobGlidHlwZS5vU1QpLFwKKyAJCQkJCQkgICQobGlicHJlZml4KSQobGliYy1uYW1lKSkgXAorIAkJCSQoK2ZvcmNlKQorIAkoZWNobyAnLyogR05VIGxkIHNjcmlwdCc7XAorQEAgLTk4OSw3ICs5ODksNyBAQAorIAkgZWNobyAnICAgdGhlIHN0YXRpYyBsaWJyYXJ5LCBzbyB0cnkgdGhhdCBzZWNvbmRhcmlseS4gICovJztcCisgCSBjYXQgJDw7IFwKKyAJIGVjaG8gJ0dST1VQICggJChzbGliZGlyKS9saWJjLnNvJChsaWJjLnNvLXZlcnNpb24pJyBcCistCSAgICAgICckKGxpYmRpcikvJChwYXRzdWJzdCAlLCQobGlidHlwZS5vUyksJChsaWJwcmVmaXgpJChsaWJjLW5hbWUpKSdcCisrCSAgICAgICckKGxpYmRpcikvJChwYXRzdWJzdCAlLCQobGlidHlwZS5vU1QpLCQobGlicHJlZml4KSQobGliYy1uYW1lKSknXAorCSAgICAgICcgQVNfTkVFREVEICgnICQoc2xpYmRpcikvJChydGxkLWluc3RhbGxlZC1uYW1lKSAnKSApJyBcCisgCSkgPiAkQC5uZXcKKwltdiAtZiAkQC5uZXcgJEAKK2RpZmYgLWF1ciBnbGliYy0yLjMuNS9leHRyYS1saWIubWsgZ2xpYmMtMi4zLjUtY3lnd2luL2V4dHJhLWxpYi5taworLS0tIGdsaWJjLTIuMy41L2V4dHJhLWxpYi5tawkyMDA0LTEyLTAyIDIzOjU0OjQ3LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMy41LWN5Z3dpbi9leHRyYS1saWIubWsJMjAwNS0wNS0xMSAwODoyNzoyOC4xNTYyNTAwMDAgKzAyMDAKK0BAIC0xMyw3ICsxMyw3IEBACisgCisgaWZuZXEgKCwkKCQobGliKS1zdGF0aWMtb25seS1yb3V0aW5lcykpCisgaWZuZXEgKCwkKGZpbHRlciB5ZXN5ZXMlLCQoYnVpbGQtc2hhcmVkKSQoZWxmKSQoJChsaWIpLnNvLXZlcnNpb24pKSkKKy1vYmplY3Qtc3VmZml4ZXMtJChsaWIpICs9ICQoZmlsdGVyLW91dCAkKCQobGliKS1pbmhpYml0LW8pLC5vUykKKytvYmplY3Qtc3VmZml4ZXMtJChsaWIpICs9ICQoZmlsdGVyLW91dCAkKCQobGliKS1pbmhpYml0LW8pLC5vU1QpCisgZW5kaWYKKyBlbmRpZgorIAorQEAgLTI5LDcgKzI5LDcgQEAKKyAKKyAjIEFkZCBlYWNoIGZsYXZvciBvZiBsaWJyYXJ5IHRvIHRoZSBsaXN0cyBvZiB0aGluZ3MgdG8gYnVpbGQgYW5kIGluc3RhbGwuCisgaW5zdGFsbC1saWIgKz0gJChmb3JlYWNoIG8sJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSwkKGxpYjpsaWIlPSQobGlidHlwZSRvKSkpCistZXh0cmEtb2JqcyArPSAkKGZvcmVhY2ggbywkKGZpbHRlci1vdXQgLm9zIC5vUywkKG9iamVjdC1zdWZmaXhlcy0kKGxpYikpKSxcCisrZXh0cmEtb2JqcyArPSAkKGZvcmVhY2ggbywkKGZpbHRlci1vdXQgLm9zIC5vU1QsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSksXAorIAkJCSQocGF0c3Vic3QgJSwlJG8sJChmaWx0ZXItb3V0IFwKKyAJCQkJCSAgICQoJChsaWIpLXNoYXJlZC1vbmx5LXJvdXRpbmVzKSxcCisgCQkJCQkgICAkKGFsbC0kKGxpYiktcm91dGluZXMpKSkpCitAQCAtNTcsNyArNTcsNyBAQAorIAorIAorICMgVXNlIG8taXRlcmF0b3IubWsgdG8gZ2VuZXJhdGUgYSBydWxlIGZvciBlYWNoIGZsYXZvciBvZiBsaWJyYXJ5LgorLWlmbmVxICgsJChmaWx0ZXItb3V0IC5vcyAub1MsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSkpCisraWZuZXEgKCwkKGZpbHRlci1vdXQgLm9zIC5vU1QsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSkpCisgZGVmaW5lIG8taXRlcmF0b3ItZG9pdAorICQob2JqcGZ4KSQocGF0c3Vic3QgJSwkKGxpYnR5cGUkbyksJChsaWI6bGliJT0lKSk6IFwKKyAgICQocGF0c3Vic3QgJSwkKG9ianBmeCklJG8sXAorQEAgLTY1LDcgKzY1LDcgQEAKKyAJCQkgICQoYWxsLSQobGliKS1yb3V0aW5lcykpKTsgXAorIAkkJChidWlsZC1leHRyYS1saWIpCisgZW5kZWYKKy1vYmplY3Qtc3VmZml4ZXMtbGVmdCA9ICQoZmlsdGVyLW91dCAub3MgLm9TLCQob2JqZWN0LXN1ZmZpeGVzLSQobGliKSkpCisrb2JqZWN0LXN1ZmZpeGVzLWxlZnQgPSAkKGZpbHRlci1vdXQgLm9zIC5vU1QsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSkKKyBpbmNsdWRlICQocGF0c3Vic3QgJSwkKC4uKW8taXRlcmF0b3IubWssJChvYmplY3Qtc3VmZml4ZXMtbGVmdCkpCisgZW5kaWYKKyAKK0BAIC03Nyw5ICs3Nyw5IEBACisgCSQoYnVpbGQtZXh0cmEtbGliKQorIGVuZGlmCisgCistaWZuZXEgKCwkKGZpbHRlciAub1MsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSkpCistJChvYmpwZngpJChwYXRzdWJzdCAlLCQobGlidHlwZS5vUyksJChsaWI6bGliJT0lKSk6IFwKKy0gICQocGF0c3Vic3QgJSwkKG9ianBmeCklLm9TLFwKKytpZm5lcSAoLCQoZmlsdGVyIC5vU1QsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSkpCisrJChvYmpwZngpJChwYXRzdWJzdCAlLCQobGlidHlwZS5vU1QpLCQobGliOmxpYiU9JSkpOiBcCisrICAkKHBhdHN1YnN0ICUsJChvYmpwZngpJS5vU1QsXAorIAkgICAgICQoZmlsdGVyICQoJChsaWIpLXN0YXRpYy1vbmx5LXJvdXRpbmVzKSxcCisgCQkgICAgICAkKGFsbC0kKGxpYiktcm91dGluZXMpKSkKKyAJJChidWlsZC1leHRyYS1saWIpCitkaWZmIC1hdXIgZ2xpYmMtMi4zLjUvbnB0bC9NYWtlZmlsZSBnbGliYy0yLjMuNS1jeWd3aW4vbnB0bC9NYWtlZmlsZQorLS0tIGdsaWJjLTIuMy41L25wdGwvTWFrZWZpbGUJMjAwNS0wMi0xNiAwOTo0NTo1Ni4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjMuNS1jeWd3aW4vbnB0bC9NYWtlZmlsZQkyMDA1LTA1LTExIDA4OjI2OjAxLjgxMjUwMDAwMCArMDIwMAorQEAgLTM3NSw3ICszNzUsNyBAQAorIAorICQoaW5zdF9saWJkaXIpL2xpYnB0aHJlYWQuc286ICQoY29tbW9uLW9ianBmeClmb3JtYXQubGRzIFwKKyAJCQkgICAgICAkKG9ianBmeClsaWJwdGhyZWFkLnNvJChsaWJwdGhyZWFkLnNvLXZlcnNpb24pIFwKKy0JCQkgICAgICAkKGluc3RfbGliZGlyKS8kKHBhdHN1YnN0ICUsJChsaWJ0eXBlLm9TKSxcCisrCQkJICAgICAgJChpbnN0X2xpYmRpcikvJChwYXRzdWJzdCAlLCQobGlidHlwZS5vU1QpLFwKKyAJCQkJCQkJJChsaWJwcmVmaXgpcHRocmVhZCkgXAorIAkJCSAgICAgICQoK2ZvcmNlKQorIAkoZWNobyAnLyogR05VIGxkIHNjcmlwdCc7XAorQEAgLTM4Myw3ICszODMsNyBAQAorIAkgZWNobyAnICAgdGhlIHN0YXRpYyBsaWJyYXJ5LCBzbyB0cnkgdGhhdCBzZWNvbmRhcmlseS4gICovJztcCisgCSBjYXQgJDw7IFwKKyAJIGVjaG8gJ0dST1VQICggJChzbGliZGlyKS9saWJwdGhyZWFkLnNvJChsaWJwdGhyZWFkLnNvLXZlcnNpb24pJyBcCistCSAgICAgICckKGxpYmRpcikvJChwYXRzdWJzdCAlLCQobGlidHlwZS5vUyksJChsaWJwcmVmaXgpcHRocmVhZCknXAorKwkgICAgICAnJChsaWJkaXIpLyQocGF0c3Vic3QgJSwkKGxpYnR5cGUub1NUKSwkKGxpYnByZWZpeClwdGhyZWFkKSdcCisgCSAgICAgICcpJyBcCisgCSkgPiAkQC5uZXcKKyAJbXYgLWYgJEAubmV3ICRACitkaWZmIC1hdXIgZ2xpYmMtMi4zLjUvc3lzZGVwcy9zcGFyYy9zcGFyYzMyL3NwYXJjdjkvTWFrZWZpbGUgZ2xpYmMtMi4zLjUtY3lnd2luL3N5c2RlcHMvc3BhcmMvc3BhcmMzMi9zcGFyY3Y5L01ha2VmaWxlCistLS0gZ2xpYmMtMi4zLjUvc3lzZGVwcy9zcGFyYy9zcGFyYzMyL3NwYXJjdjkvTWFrZWZpbGUJMjAwNC0wOC0xNiAwODo0NjoxNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjMuNS1jeWd3aW4vc3lzZGVwcy9zcGFyYy9zcGFyYzMyL3NwYXJjdjkvTWFrZWZpbGUJMjAwNS0wNS0xMSAwODoyNjoyNS45Mzc1MDAwMDAgKzAyMDAKK0BAIC0xMCw0ICsxMCw0IEBACisgQVNGTEFHUy0ub3AgKz0gLVdhLC1BdjlhCisgQVNGTEFHUy0ub2cgKz0gLVdhLC1BdjlhCisgQVNGTEFHUy0ub2IgKz0gLVdhLC1BdjlhCistQVNGTEFHUy0ub1MgKz0gLVdhLC1BdjlhCisrQVNGTEFHUy0ub1NUICs9IC1XYSwtQXY5YQorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgUC4gSi4gRGF5IDxycGpkYXlAbWluZHNwcmluZy5jb20+CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LzExMC1jb25maWd1cmUtYXBwbGUtYXMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LzExMC1jb25maWd1cmUtYXBwbGUtYXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhhMTMyNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYvMTEwLWNvbmZpZ3VyZS1hcHBsZS1hcy5wYXRjaApAQCAtMCwwICsxLDI1IEBACitodHRwOi8vaW4zd3d3LmVwZmwuY2gvfnNjaGFmZm5lL2dsaWJjLWNvbmZpZ3VyZS1hcHBsZS1hcy5wYXRjaAoraHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9tbC9jcm9zc2djYy8yMDA0LTAyL21zZzAwMTUxLmh0bWwKKworVGhlIGZvbGxvd2luZyBtYWtlcyBpdCBwb3NzaWJsZSB0byBjb25maWd1cmUgZ2xpYmMtMi4zLjIgb24gTWFjIE9TIFgsCit3aGVyZSB0aGUgYXNzZW1ibGVyIGJ1dCBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlIC0tdmVyc2lvbiBmbGFnLgorCitGaXhlcyB0aGUgc3ltcHRvbQorY2hlY2tpbmcgd2hldGhlciBsZCBpcyBHTlUgbGQuLi4gbm8KK2NoZWNraW5nIGZvciAvdXNyL2xpYmV4ZWMvZ2NjL2Rhcndpbi9wcGMvYXMuLi4gL3Vzci9saWJleGVjL2djYy9kYXJ3aW4vcHBjL2FzCitjaGVja2luZyB2ZXJzaW9uIG9mIC91c3IvbGliZXhlYy9nY2MvZGFyd2luL3BwYy9hcy4uLiAKKzxQQVVTRVMgSEVSRSBBTkQgSlVTVCBTSVRTIFRIRVJFIERPSU5HIE5PVEhJTkc+CisKKy0tLSBnbGliYy0yLjMuMi9jb25maWd1cmV+CVdlZCBGZWIgMjYgMDk6MjA6NDggMjAwMworKysrIGdsaWJjLTIuMy4yL2NvbmZpZ3VyZQlGcmkgRmViIDI3IDEzOjEyOjUzIDIwMDQKK0BAIC00MDM5LDcgKzQwMzksNyBAQAorICAgIyBGb3VuZCBpdCwgbm93IGNoZWNrIHRoZSB2ZXJzaW9uLgorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHZlcnNpb24gb2YgJEFTIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nIHZlcnNpb24gb2YgJEFTLi4uICRFQ0hPX0MiID4mNgorLSAgYWNfcHJvZ192ZXJzaW9uPWAkQVMgLS12ZXJzaW9uIDI+JjEgfCBzZWQgLW4gJ3MvXi4qR05VIGFzc2VtYmxlci4qIFwoWzAtOV0qXC5bMC05Ll0qXCkuKiQvXDEvcCdgCisrICBhY19wcm9nX3ZlcnNpb249YCRBUyAtdiA8L2Rldi9udWxsIDI+JjEgfCBzZWQgLW4gJ3MvXi4qR05VIGFzc2VtYmxlci4qIFwoWzAtOV0qXC5bMC05Ll0qXCkuKiQvXDEvcCdgCisgICBjYXNlICRhY19wcm9nX3ZlcnNpb24gaW4KKyAgICAgJycpIGFjX3Byb2dfdmVyc2lvbj0idi4gPy4/PywgYmFkIjsgYWNfdmVyY19mYWlsPXllczs7CisgICAgIDIuMVszLTldKikKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFAuIEouIERheSA8cnBqZGF5QG1pbmRzcHJpbmcuY29tPgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNi8xMjAtZml4LXByNjMxLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNi8xMjAtZml4LXByNjMxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNjg4ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LzEyMC1maXgtcHI2MzEucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorRnJvbSBkYW5rQGtlZ2VsLmNvbQorV2VkIEp1biAxNSAwOToxMjo0MyBQRFQgMjAwNQorCitGaXhlcworCitidWlsZC1nbGliYy9saWJjLmEobnNzd2l0Y2gubykoLmRhdGErMHg2NCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9uc3NfZmlsZXNfZ2V0YWxpYXNlbnRfcicKK2J1aWxkLWdsaWJjL2xpYmMuYShuc3N3aXRjaC5vKSguZGF0YSsweDZjKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX25zc19maWxlc19lbmRhbGlhc2VudCcKKy4uLiA1MyBsaW5lcyBkZWxldGVkIC4uLgorYnVpbGQtZ2xpYmMvbGliYy5hKG5zc3dpdGNoLm8pKC5kYXRhKzB4MjFjKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX25zc19maWxlc19nZXRzcG5hbV9yJworY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKK21ha2VbMl06ICoqKiBbL2J1aWxkL2djYy0zLjQuMy1nbGliYy0yLjMuNS1oZHJzLTIuNi4xMS4yL2k2ODYtdW5rbm93bi1saW51eC1nbnUvYnVpbGQtZ2xpYmMvZWxmL2xkY29uZmlnXSBFcnJvciAxCisKK3doZW4gYnVpbGRpbmcgZ2xpYmMgd2l0aCAtLWVuYWJsZS1zdGF0aWMtbnNzLgorCitTZWUgaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NjMxCisKKy0tLSBnbGliYy0yLjMuNS9NYWtlY29uZmlnLm9sZAlXZWQgSnVuIDE1IDA4OjEzOjEyIDIwMDUKKysrKyBnbGliYy0yLjMuNS9NYWtlY29uZmlnCVdlZCBKdW4gMTUgMDg6MTM6MTQgMjAwNQorQEAgLTUxMCw3ICs1MTAsNyBAQAorIAorICMgVGhlIHN0YXRpYyBsaWJyYXJpZXMuCisgaWZlcSAoeWVzLCQoYnVpbGQtc3RhdGljKSkKKy1saW5rLWxpYmMtc3RhdGljID0gJChjb21tb24tb2JqcGZ4KWxpYmMuYSAkKHN0YXRpYy1nbnVsaWIpICQoY29tbW9uLW9ianBmeClsaWJjLmEKKytsaW5rLWxpYmMtc3RhdGljID0gJChjb21tb24tb2JqcGZ4KWxpYmMuYSAkKHN0YXRpYy1nbnVsaWIpICQob3RoZXJsaWJzKSAkKGNvbW1vbi1vYmpwZngpbGliYy5hCisgZWxzZQorIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgIyBXZSBjYW4gdHJ5IHRvIGxpbmsgdGhlIHByb2dyYW1zIHdpdGggbGliKl9waWMuYS4uLgorLS0tIGdsaWJjLTIuMy41L2VsZi9NYWtlZmlsZS5vbGQJV2VkIEp1biAxNSAwNzo0Njo0OSAyMDA1CisrKysgZ2xpYmMtMi4zLjUvZWxmL01ha2VmaWxlCVdlZCBKdW4gMTUgMDg6MTQ6MDAgMjAwNQorQEAgLTEyMCw2ICsxMjAsMTMgQEAKKyBpbnN0YWxsLWJpbi1zY3JpcHQgPSBsZGQKKyBlbmRpZgorIAorK2lmZXEgKHllcywkKGJ1aWxkLXN0YXRpYy1uc3MpKQorK25zc29iamRpciA6PSAkKHBhdHN1YnN0IC4uLyQoc3ViZGlyKSwuLCQoY29tbW9uLW9ianBmeCluc3MpCisrcmVzb2x2b2JqZGlyIDo9ICQocGF0c3Vic3QgLi4vJChzdWJkaXIpLC4sJChjb21tb24tb2JqcGZ4KXJlc29sdikKKytvdGhlcmxpYnMgKz0gJChuc3NvYmpkaXIpL2xpYm5zc19maWxlcy5hICQocmVzb2x2b2JqZGlyKS9saWJuc3NfZG5zLmEgXAorKwkgICAgICQocmVzb2x2b2JqZGlyKS9saWJyZXNvbHYuYQorK2VuZGlmCisrCisgb3RoZXJzCQk9IHNwcm9mIHNsbgorIGluc3RhbGwtYmluCT0gc3Byb2YKKyBvdGhlcnMtc3RhdGljICAgPSBzbG4KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFAuIEouIERheSA8cnBqZGF5QG1pbmRzcHJpbmcuY29tPgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNi8xMzAtaTY4Ni1hc3NlbWJsZXIucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LzEzMC1pNjg2LWFzc2VtYmxlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTA0ZWZiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNi8xMzAtaTY4Ni1hc3NlbWJsZXIucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorMjAwNy0wMi0xNSAgS2hlbSBSYWogIDxrcmFqQHh4eHh4eHh4eHg+CisKKyAgICAgICAqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvc3lzZGVwLmg6IFJlLWRlZmluZSBfX2k2ODYuCisgICAgICAgKiBucHRsL3N5c2RlcHMvcHRocmVhZC9wdC1pbml0ZmluaS5jOiBEaXR0by4KKworCisKK0luZGV4OiBnbGliYy0yLjQvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdsaWJjLTIuNC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L3N5c2RlcC5oCShyZXZpc2lvbiAxNDY5KQorKysrIGdsaWJjLTIuNC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L3N5c2RlcC5oCSh3b3JraW5nIGNvcHkpCitAQCAtMjksNiArMjksMTAgQEAKKyAjaW5jbHVkZSA8ZGwtc3lzZGVwLmg+CisgI2luY2x1ZGUgPHRscy5oPgorIAorKyNpZiBkZWZpbmVkIF9faTY4NiAmJiBkZWZpbmVkIF9fQVNTRU1CTEVSX18KKysjdW5kZWYgX19pNjg2CisrI2RlZmluZSBfX2k2ODYgX19pNjg2CisrI2VuZGlmCisgCisgLyogRm9yIExpbnV4IHdlIGNhbiB1c2UgdGhlIHN5c3RlbSBjYWxsIHRhYmxlIGluIHRoZSBoZWFkZXIgZmlsZQorIAkvdXNyL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCitJbmRleDogZ2xpYmMtMi40L25wdGwvc3lzZGVwcy9wdGhyZWFkL3B0LWluaXRmaW5pLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbGliYy0yLjQvbnB0bC9zeXNkZXBzL3B0aHJlYWQvcHQtaW5pdGZpbmkuYwkocmV2aXNpb24gMTQ2OSkKKysrKyBnbGliYy0yLjQvbnB0bC9zeXNkZXBzL3B0aHJlYWQvcHQtaW5pdGZpbmkuYwkod29ya2luZyBjb3B5KQorQEAgLTQ1LDYgKzQ1LDExIEBACisgLyogRW1iZWQgYW4gI2luY2x1ZGUgdG8gcHVsbCBpbiB0aGUgYWxpZ25tZW50IGFuZCAuZW5kIGRpcmVjdGl2ZXMuICovCisgYXNtICgiXG4jaW5jbHVkZSBcImRlZnMuaFwiIik7CisgCisrYXNtICgiXG4jaWYgZGVmaW5lZCBfX2k2ODYgJiYgZGVmaW5lZCBfX0FTU0VNQkxFUl9fIik7CisrYXNtICgiXG4jdW5kZWYgX19pNjg2Iik7CisrYXNtICgiXG4jZGVmaW5lIF9faTY4NiBfX2k2ODYiKTsKKythc20gKCJcbiNlbmRpZiIpOworKworIC8qIFRoZSBpbml0aWFsIGNvbW1vbiBjb2RlIGVuZHMgaGVyZS4gKi8KKyBhc20gKCJcbi8qQEhFQURFUl9FTkRTKi8iKTsKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYvMTQwLWkzODYtcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNi8xNDAtaTM4Ni1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ5ODIxZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYvMTQwLWkzODYtcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5LnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKKyhDKSAyMDA3IFlhbm4gRS4gTU9SSU4gPHlhbm4ubW9yaW4uMTk5OEBhbmNpZW5zLmVuaWIuZnI+CitMaWNlbnNlOiBMR1BMIHYyLjEKKworU2h1dCBvZmYgYSBzdHVwaWQgd2FybmluZzogcHJlZmZlcmVkLXN0YWNrLWJvdW5kYXJ5IG11c3QgYmUgYmV0d2VlbiA0IGFkIDEyLAorYW5kIDIgaXMgbm90LgorCitkaWZmIC1kdXIgZ2xpYmMtMi41Lm9yaWcvc3lzZGVwcy9pMzg2L01ha2VmaWxlIGdsaWJjLTIuNS9zeXNkZXBzL2kzODYvTWFrZWZpbGUKKy0tLSBnbGliYy0yLjUub3JpZy9zeXNkZXBzL2kzODYvTWFrZWZpbGUJMjAwNS0wMy0wNiAwMToxODoxNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjUvc3lzZGVwcy9pMzg2L01ha2VmaWxlCTIwMDctMDUtMjcgMTc6NDk6MzcuMDAwMDAwMDAwICswMjAwCitAQCAtMzYsNyArMzYsNyBAQAorIGlmZXEgKCQoc3ViZGlyKSxjc3UpCisgc3lzZGVwLUNGTEFHUyArPSAtbXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeT00CisgZWxzZQorLXN5c2RlcC1DRkxBR1MgKz0gLW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9MgorK3N5c2RlcC1DRkxBR1MgKz0gLW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9NAorICMgTGlrZXdpc2UsIGFueSBmdW5jdGlvbiB3aGljaCBjYWxscyB1c2VyIGNhbGxiYWNrcworIHVzZXMtY2FsbGJhY2tzICs9IC1tcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5PTQKKyAjIExpa2V3aXNlLCBhbnkgc3RhY2sgYWxpZ25tZW50IHRlc3RzCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LzE1MC1hbHBoYS1hc21fcGFnZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYvMTUwLWFscGhhLWFzbV9wYWdlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxOThiMzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LzE1MC1hbHBoYS1hc21fcGFnZS5wYXRjaApAQCAtMCwwICsxLDI2IEBACisyMDA4LTA2LTA3ICBNaWtlIEZyeXNpbmdlciAgPHZhcGllckBnZW50b28ub3JnPgorCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXMvdXNlci5oOiBDb3B5IHBhZ2UuaCBkZWZpbml0aW9ucworCWZyb20gdGhlIGtlcm5lbCBoZWFkZXIgdG8gc3lzL3VzZXIuaCBhbmQgcmVtb3ZlIHRoZSAjaW5jbHVkZSBvZgorCXN5cy91c2VyLmguCisKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5cy91c2VyLmgKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5cy91c2VyLmgKK0BAIC0yMyw3ICsyMyw2IEBACisgICAgb25seS4gRG9uJ3QgcmVhZCB0b28gbXVjaCBpbnRvIGl0LiBEb24ndCB1c2UgaXQgZm9yIGFueXRoaW5nIG90aGVyCisgICAgdGhhbiBnZGIvc3RyYWNlIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuICovCisgCistI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisgI2luY2x1ZGUgPGFzbS9yZWcuaD4KKyAKKyBzdHJ1Y3QgdXNlcgorQEAgLTQxLDYgKzQwLDkgQEAgc3RydWN0IHVzZXIKKyAgIGNoYXIgdV9jb21tWzMyXTsJCQkJLyogdXNlciBjb21tYW5kIG5hbWUgKi8KKyB9OworIAorKyNkZWZpbmUgUEFHRV9TSElGVAkJMTMKKysjZGVmaW5lIFBBR0VfU0laRQkJKDEgPDwgUEFHRV9TSElGVCkKKysjZGVmaW5lIFBBR0VfTUFTSwkJKH4oUEFHRV9TSVpFLTEpKQorICNkZWZpbmUgTkJQRwkJCVBBR0VfU0laRQorICNkZWZpbmUgVVBBR0VTCQkJMQorICNkZWZpbmUgSE9TVF9URVhUX1NUQVJUX0FERFIJKHUuc3RhcnRfY29kZSkKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYvMTYwLXVzZV9zaG9ydF9mb3JfZm5zdHN3LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNi8xNjAtdXNlX3Nob3J0X2Zvcl9mbnN0c3cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU4NDlmYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYvMTYwLXVzZV9zaG9ydF9mb3JfZm5zdHN3LnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK09yaWdpbmFsIHBhdGNoIGZyb20gSC5KLiBMdSwgYXMgcmVwb3J0ZWQgdGhlcmU6CitodHRwOi8vd3d3Lm5hYmJsZS5jb20vUEFUQ0g6LVVzZS1zaG9ydC1mb3ItZm5zdHN3LXRkMTQ3NzUxNzEuaHRtbAorCitmbnN0c3cgc3RvcmVzIDE2Yml0IGludG8gJWF4LiBUaGUgdXBwZXIgMTZiaXQgb2YgJWVheCBpcyB1bmNoYW5nZWQuCitUaGUgbmV3IGFzc2VtYmxlciAoYmludXRpbHMtMi4xOC41MC4wLjQgYW5kIHVwKSB3aWxsIGRpc2FsbG93ICJmbnN0c3cgJWVheCIuCisKK2RpZmYgLWR1ciBnbGliYy0yLjYuMS5vcmlnL3N5c2RlcHMvaTM4Ni9mcHUvZnRlc3RleGNlcHQuYyBnbGliYy0yLjYuMS9zeXNkZXBzL2kzODYvZnB1L2Z0ZXN0ZXhjZXB0LmMKKy0tLSBnbGliYy0yLjYuMS5vcmlnL3N5c2RlcHMvaTM4Ni9mcHUvZnRlc3RleGNlcHQuYwkyMDA0LTAzLTA1IDExOjE0OjQ4LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuNi4xL3N5c2RlcHMvaTM4Ni9mcHUvZnRlc3RleGNlcHQuYwkyMDA4LTA2LTI0IDEwOjU2OjE0LjAwMDAwMDAwMCArMDIwMAorQEAgLTI2LDcgKzI2LDcgQEAKKyBpbnQKKyBmZXRlc3RleGNlcHQgKGludCBleGNlcHRzKQorIHsKKy0gIGludCB0ZW1wOworKyAgc2hvcnQgdGVtcDsKKyAgIGludCB4dGVtcCA9IDA7CisgCisgICAvKiBHZXQgY3VycmVudCBleGNlcHRpb25zLiAgKi8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYvMTcwLWFscGhhLWFzbV9lbGYucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LzE3MC1hbHBoYS1hc21fZWxmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYTVjOGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LzE3MC1hbHBoYS1hc21fZWxmLnBhdGNoCkBAIC0wLDAgKzEsMTk0IEBACitzaW5jZSB0aGUga2VybmVsIG5vIGxvbmdlciBwcm92aWRlcyBhc20vZWxmLmgsIHRoZSBzeXMvcHJvY2ZzLmggZnJvbSB0aGUgCitjb21tb24gY29kZSwgYWxwaGEsIGFuZCBzaCBmYWlsIHdoZW4gdXNlZC4gIHRoaXMgc2hvdWxkIHRoaW5ncyB1cC4KKy1taWtlCisKKzIwMDgtMDYtMDcgIE1pa2UgRnJ5c2luZ2VyICA8dmFwaWVyQGdlbnRvby5vcmc+CisKKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5cy9wcm9jZnMuaDogUmVwbGFjZSB3aXRoICNlcnJvciBzdHViLgorCSogc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzL3Byb2Nmcy5oOiBDb3B5IHNvbWUgYXNtL2VsZi5oCisJZGVmaW5pdGlvbnMgZnJvbSB0aGUga2VybmVsIGhlYWRlciB0byBzeXMvcHJvY2ZzLmggYW5kIHJlbW92ZSB0aGUKKwkjaW5jbHVkZSBvZiBhc20vZWxmLmguCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXMvcHJvY2ZzLmg6IExpa2V3aXNlLgorCisqQXR0YWNobWVudDogc2lnbmF0dXJlLmFzYyA8bXNnMDAwMTIvc2lnbmF0dXJlLmFzYz4qCisvRGVzY3JpcHRpb246LyBUaGlzIGlzIGEgZGlnaXRhbGx5IHNpZ25lZCBtZXNzYWdlIHBhcnQuCisKKzIwMDgtMDYtMDcgIE1pa2UgRnJ5c2luZ2VyICA8dmFwaWVyQGdlbnRvby5vcmc+CisKKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5cy9wcm9jZnMuaDogUmVwbGFjZSB3aXRoICNlcnJvciBzdHViLgorCSogc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzL3Byb2Nmcy5oOiBDb3B5IHNvbWUgYXNtL2VsZi5oCisJZGVmaW5pdGlvbnMgZnJvbSB0aGUga2VybmVsIGhlYWRlciB0byBzeXMvcHJvY2ZzLmggYW5kIHJlbW92ZSB0aGUKKwkjaW5jbHVkZSBvZiBhc20vZWxmLmguCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXMvcHJvY2ZzLmg6IExpa2V3aXNlLgorCistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXMvcHJvY2ZzLmgKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5cy9wcm9jZnMuaAorQEAgLTI5LDEwICsyOSwyMyBAQAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3Vjb250ZXh0Lmg+CisgI2luY2x1ZGUgPHN5cy91c2VyLmg+CistI2luY2x1ZGUgPGFzbS9lbGYuaD4KKyAKKyBfX0JFR0lOX0RFQ0xTCisgCisrLyoKKysgKiBUaGUgT1NGLzEgdmVyc2lvbiBvZiA8c3lzL3Byb2Nmcy5oPiBtYWtlcyBncmVnc2V0X3QgNDYgZW50cmllcyBsb25nLgorKyAqIEkgaGF2ZSBubyBpZGVhIHdoeSB0aGF0IGlzIHNvLiAgRm9yIG5vdywgd2UganVzdCBsZWF2ZSBpdCBhdCAzMworKyAqICgzMiBnZW5lcmFsIHJlZ3MgKyBwcm9jZXNzb3Igc3RhdHVzIHdvcmQpLgorKyAqLworKyNkZWZpbmUgRUxGX05HUkVHICAzMworKyNkZWZpbmUgRUxGX05GUFJFRyAzMgorKworK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OworK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisrCisrdHlwZWRlZiBkb3VibGUgZWxmX2ZwcmVnX3Q7CisrdHlwZWRlZiBlbGZfZnByZWdfdCBlbGZfZnByZWdzZXRfdFtFTEZfTkZQUkVHXTsKKysKKyBzdHJ1Y3QgZWxmX3NpZ2luZm8KKyAgIHsKKyAgICAgaW50IHNpX3NpZ25vOwkJCS8qIFNpZ25hbCBudW1iZXIuICAqLworLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzL3Byb2Nmcy5oCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXMvcHJvY2ZzLmgKK0BAIC0yOSwxMCArMjksMTkgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy91Y29udGV4dC5oPgorICNpbmNsdWRlIDxzeXMvdXNlci5oPgorLSNpbmNsdWRlIDxhc20vZWxmLmg+CisgCisgX19CRUdJTl9ERUNMUworIAorKy8qCisrICogRUxGIHJlZ2lzdGVyIGRlZmluaXRpb25zLi4uCisrICovCisrdHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7CisrCisrI2RlZmluZSBFTEZfTkdSRUcgKHNpemVvZiAoc3RydWN0IHB0X3JlZ3MpIC8gc2l6ZW9mKGVsZl9ncmVnX3QpKQorK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisrCisrdHlwZWRlZiBzdHJ1Y3QgdXNlcl9mcHVfc3RydWN0IGVsZl9mcHJlZ3NldF90OworKworIHN0cnVjdCBlbGZfc2lnaW5mbworICAgeworICAgICBpbnQgc2lfc2lnbm87CQkJLyogU2lnbmFsIG51bWJlci4gICovCistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zeXMvcHJvY2ZzLmgKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5cy9wcm9jZnMuaAorQEAgLTEsMTE1ICsxLDIgQEAKKy0vKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCistCistICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCistICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorLSAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorLSAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCistICAgMDIxMTEtMTMwNyBVU0EuICAqLworLQorLSNpZm5kZWYgX1NZU19QUk9DRlNfSAorLSNkZWZpbmUgX1NZU19QUk9DRlNfSAkxCistCistLyogVGhpcyBpcyBzb21laG93IG1vZGVsbGVkIGFmdGVyIHRoZSBmaWxlIG9mIHRoZSBzYW1lIG5hbWUgb24gU3lzVnI0CistICAgc3lzdGVtcy4gIEl0IHByb3ZpZGVzIGEgZGVmaW5pdGlvbiBvZiB0aGUgY29yZSBmaWxlIGZvcm1hdCBmb3IgRUxGCistICAgdXNlZCBvbiBMaW51eC4gICovCistCistI2luY2x1ZGUgPGZlYXR1cmVzLmg+CistI2luY2x1ZGUgPHNpZ25hbC5oPgorLSNpbmNsdWRlIDxzeXMvdGltZS5oPgorLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaW5jbHVkZSA8c3lzL3Vjb250ZXh0Lmg+CistI2luY2x1ZGUgPHN5cy91c2VyLmg+CistI2luY2x1ZGUgPGFzbS9lbGYuaD4KKy0KKy1fX0JFR0lOX0RFQ0xTCistCistc3RydWN0IGVsZl9zaWdpbmZvCistICB7CistICAgIGludCBzaV9zaWdubzsJCQkvKiBTaWduYWwgbnVtYmVyLiAgKi8KKy0gICAgaW50IHNpX2NvZGU7CQkJLyogRXh0cmEgY29kZS4gICovCistICAgIGludCBzaV9lcnJubzsJCQkvKiBFcnJuby4gICovCistICB9OworLQorLS8qIERlZmluaXRpb25zIHRvIGdlbmVyYXRlIEludGVsIFNWUjQtbGlrZSBjb3JlIGZpbGVzLiAgVGhlc2UgbW9zdGx5CistICAgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyB0aGUgU1ZSNCB0eXBlcyB3aXRoICJlbGZfIiB0YWNrZWQgb24gdGhlCistICAgZnJvbnQgdG8gcHJldmVudCBjbGFzaGVzIHdpdGggbGludXggZGVmaW5pdGlvbnMsIGFuZCB0aGUgdHlwZWRlZgorLSAgIGZvcm1zIGhhdmUgYmVlbiBhdm9pZGVkLiAgVGhpcyBpcyBtb3N0bHkgbGlrZSB0aGUgU1ZSNCBzdHJ1Y3R1cmUsCistICAgYnV0IG1vcmUgTGludXh5LCB3aXRoIHRoaW5ncyB0aGF0IExpbnV4IGRvZXMgbm90IHN1cHBvcnQgYW5kIHdoaWNoCistICAgZ2RiIGRvZXNuJ3QgcmVhbGx5IHVzZSBleGNsdWRlZC4gIEZpZWxkcyBwcmVzZW50IGJ1dCBub3QgdXNlZCBhcmUKKy0gICBtYXJrZWQgd2l0aCAiWFhYIi4gICovCistc3RydWN0IGVsZl9wcnN0YXR1cworLSAgeworLSNpZiAwCistICAgIGxvbmcgaW50IHByX2ZsYWdzOwkJCS8qIFhYWCBQcm9jZXNzIGZsYWdzLiAgKi8KKy0gICAgc2hvcnQgaW50IHByX3doeTsJCQkvKiBYWFggUmVhc29uIGZvciBwcm9jZXNzIGhhbHQuICAqLworLSAgICBzaG9ydCBpbnQgcHJfd2hhdDsJCQkvKiBYWFggTW9yZSBkZXRhaWxlZCByZWFzb24uICAqLworLSNlbmRpZgorLSAgICBzdHJ1Y3QgZWxmX3NpZ2luZm8gcHJfaW5mbzsJCS8qIEluZm8gYXNzb2NpYXRlZCB3aXRoIHNpZ25hbC4gICovCistICAgIHNob3J0IGludCBwcl9jdXJzaWc7CQkvKiBDdXJyZW50IHNpZ25hbC4gICovCistICAgIHVuc2lnbmVkIGxvbmcgaW50IHByX3NpZ3BlbmQ7CS8qIFNldCBvZiBwZW5kaW5nIHNpZ25hbHMuICAqLworLSAgICB1bnNpZ25lZCBsb25nIGludCBwcl9zaWdob2xkOwkvKiBTZXQgb2YgaGVsZCBzaWduYWxzLiAgKi8KKy0jaWYgMAorLSAgICBzdHJ1Y3Qgc2lnYWx0c3RhY2sgcHJfYWx0c3RhY2s7CS8qIEFsdGVybmF0ZSBzdGFjayBpbmZvLiAgKi8KKy0gICAgc3RydWN0IHNpZ2FjdGlvbiBwcl9hY3Rpb247CQkvKiBTaWduYWwgYWN0aW9uIGZvciBjdXJyZW50IHNpZy4gICovCistI2VuZGlmCistICAgIF9fcGlkX3QgcHJfcGlkOworLSAgICBfX3BpZF90IHByX3BwaWQ7CistICAgIF9fcGlkX3QgcHJfcGdycDsKKy0gICAgX19waWRfdCBwcl9zaWQ7CistICAgIHN0cnVjdCB0aW1ldmFsIHByX3V0aW1lOwkJLyogVXNlciB0aW1lLiAgKi8KKy0gICAgc3RydWN0IHRpbWV2YWwgcHJfc3RpbWU7CQkvKiBTeXN0ZW0gdGltZS4gICovCistICAgIHN0cnVjdCB0aW1ldmFsIHByX2N1dGltZTsJCS8qIEN1bXVsYXRpdmUgdXNlciB0aW1lLiAgKi8KKy0gICAgc3RydWN0IHRpbWV2YWwgcHJfY3N0aW1lOwkJLyogQ3VtdWxhdGl2ZSBzeXN0ZW0gdGltZS4gICovCistI2lmIDAKKy0gICAgbG9uZyBpbnQgcHJfaW5zdHI7CQkJLyogQ3VycmVudCBpbnN0cnVjdGlvbi4gICovCistI2VuZGlmCistICAgIGVsZl9ncmVnc2V0X3QgcHJfcmVnOwkJLyogR1AgcmVnaXN0ZXJzLiAgKi8KKy0gICAgaW50IHByX2ZwdmFsaWQ7CQkJLyogVHJ1ZSBpZiBtYXRoIGNvcHJvIGJlaW5nIHVzZWQuICAqLworLSAgfTsKKy0KKy0KKy0jZGVmaW5lIEVMRl9QUkFSR1NaICAgICAoODApICAgIC8qIE51bWJlciBvZiBjaGFycyBmb3IgYXJncyAqLworLQorLXN0cnVjdCBlbGZfcHJwc2luZm8KKy0gIHsKKy0gICAgY2hhciBwcl9zdGF0ZTsJCQkvKiBOdW1lcmljIHByb2Nlc3Mgc3RhdGUuICAqLworLSAgICBjaGFyIHByX3NuYW1lOwkJCS8qIENoYXIgZm9yIHByX3N0YXRlLiAgKi8KKy0gICAgY2hhciBwcl96b21iOwkJCS8qIFpvbWJpZS4gICovCistICAgIGNoYXIgcHJfbmljZTsJCQkvKiBOaWNlIHZhbC4gICovCistICAgIHVuc2lnbmVkIGxvbmcgaW50IHByX2ZsYWc7CQkvKiBGbGFncy4gICovCistICAgIHVuc2lnbmVkIHNob3J0IGludCBwcl91aWQ7CistICAgIHVuc2lnbmVkIHNob3J0IGludCBwcl9naWQ7CistICAgIGludCBwcl9waWQsIHByX3BwaWQsIHByX3BncnAsIHByX3NpZDsKKy0gICAgLyogTG90cyBtaXNzaW5nICovCistICAgIGNoYXIgcHJfZm5hbWVbMTZdOwkJCS8qIEZpbGVuYW1lIG9mIGV4ZWN1dGFibGUuICAqLworLSAgICBjaGFyIHByX3BzYXJnc1tFTEZfUFJBUkdTWl07CS8qIEluaXRpYWwgcGFydCBvZiBhcmcgbGlzdC4gICovCistICB9OworLQorLS8qIEFkZHJlc3Nlcy4gICovCistdHlwZWRlZiB2b2lkICpwc2FkZHJfdDsKKy0KKy0vKiBSZWdpc3RlciBzZXRzLiAgTGludXggaGFzIGRpZmZlcmVudCBuYW1lcy4gICovCistdHlwZWRlZiBncmVnc2V0X3QgcHJncmVnc2V0X3Q7CistdHlwZWRlZiBmcHJlZ3NldF90IHByZnByZWdzZXRfdDsKKy0KKy0vKiBXZSBkb24ndCBoYXZlIGFueSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHByb2Nlc3NlcyBhbmQgdGhyZWFkcywKKy0gICB0aGVyZWZvcmUgaGFiZSBvbmx5IGluZSBQSUQgdHlwZS4gICovCistdHlwZWRlZiBfX3BpZF90IGx3cGlkX3Q7CistCistCistdHlwZWRlZiBzdHJ1Y3QgZWxmX3Byc3RhdHVzIHByc3RhdHVzX3Q7CistdHlwZWRlZiBzdHJ1Y3QgZWxmX3BycHNpbmZvIHBycHNpbmZvX3Q7CistCistX19FTkRfREVDTFMKKy0KKy0jZW5kaWYJLyogc3lzL3Byb2Nmcy5oICovCisrLyogc3lzL3Byb2Nmcy5oIGlzIGFyY2hpdGVjdHVyZSBzcGVjaWZpYy4gICovCisrI2Vycm9yICJUaGlzIGZpbGUgbXVzdCBiZSBzdXBwbGllZCBieSBldmVyeSBMaW51eCBhcmNoaXRlY3R1cmUuIgorCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LzE4MC1nY2MtNC4zLXN5c2luY2x1ZGUtcGF0aC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYvMTgwLWdjYy00LjMtc3lzaW5jbHVkZS1wYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2M2NkMjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi42LzE4MC1nY2MtNC4zLXN5c2luY2x1ZGUtcGF0aC5wYXRjaApAQCAtMCwwICsxLDUwIEBACitQYXRjaCBwb2ludGVkIHRvIGJ5IFJ5YW4gQVJOT0xEIG9uIHRoZSBsaWJjLWhlbHAgTUwuCitTZWU6IGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9tbC9saWJjLWhlbHAvMjAwOC0wNi9tc2cwMDA2My5odG1sCisKK0ZvcndhcmRlZCB0byBjcm9zc3Rvb2wtTkcgYnkgSW9hbm5pcyBFLiBWRU5FVElTOgorU2VlOiBodHRwOi8vc291cmNld2FyZS5vcmcvbWwvbGliYy1oZWxwLzIwMDgtMDYvbXNnMDAwNjMuaHRtbAorCitHQ0MgNC4zIGNoYW5nZWQgdGhlIGxvY2F0aW9uIG9mIHNvbWUgb2YgdGhlIGhlYWRlciBmaWxlcy4gIEkgZG9uJ3QKK3VuZGVyc3RhbmQgd2h5IHlvdSdkIGJlIGdldHRpbmcgdGhlc2UgZXJyb3JzIHdoaWxlIGJ1aWxkaW5nIEdDQyBzaW5jZQoraXQgcHJvdmlkZXMgdGhlbS4KKworV2l0aCByZWdhcmQgdG8gR0xJQkMsIFJvbGFuZCBjaGVja2VkIGluIHNvbWUgY2hhbmdlcyBzbyB0aGF0IHRoZSBHTElCQworYnVpbGQgc3lzdGVtIGNvdWxkIGZpbmQgdGhlIG5ldyBsb2NhdGlvbnMgb2YgdGhlIEdDQyBwcm92aWRlZCBoZWFkZXIKK2ZpbGVzLgorCitkaWZmIC1kdXJOIGdsaWJjLTIuNi5vcmlnL2NvbmZpZ3VyZS5pbiBnbGliYy0yLjYvY29uZmlndXJlLmluCistLS0gZ2xpYmMtMi42Lm9yaWcvY29uZmlndXJlLmluCTIwMDctMDYtMDggMDU6MTY6MzYuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi42L2NvbmZpZ3VyZS5pbgkyMDA4LTA2LTI0IDE4OjM4OjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTkxMSw4ICs5MTEsMTIgQEAKKyAjIGhlYWRlciBkaXJlY3RvcnkgYW5kIGFkZCB0aGF0IHRvIHRoZSBsaXN0LiAgTk9URTogT25seSBkb2VzIHRoZSByaWdodAorICMgdGhpbmcgb24gYSBzeXN0ZW0gdGhhdCBkb2Vzbid0IG5lZWQgZml4aW5jbHVkZXMuICAoTm90IHByZXNlbnRseSBhIHByb2JsZW0uKQorIGlmIHRlc3QgLW4gIiRzeXNoZWFkZXJzIjsgdGhlbgorLSAgY2NoZWFkZXJzPWAkQ0MgLXByaW50LWZpbGUtbmFtZT1pbmNsdWRlYAorLSAgU1lTSU5DTFVERVM9Ii1ub3N0ZGluYyAtaXN5c3RlbSAkY2NoZWFkZXJzIFwKKysgIFNZU0lOQ0xVREVTPS1ub3N0ZGluYworKyAgZm9yIGQgaW4gaW5jbHVkZSBpbmNsdWRlLWZpeGVkOyBkbworKyAgICBpPWAkQ0MgLXByaW50LWZpbGUtbmFtZT0iJGQiYCAmJiB0ZXN0ICJ4JGkiICE9IHggJiYgdGVzdCAieCRpIiAhPSAieCRkIiAmJgorKyAgICBTWVNJTkNMVURFUz0iJFNZU0lOQ0xVREVTIC1pc3lzdGVtICRpIgorKyAgZG9uZQorKyAgU1lTSU5DTFVERVM9IiRTWVNJTkNMVURFUyBcCisgLWlzeXN0ZW0gYGVjaG8gJHN5c2hlYWRlcnMgfCBzZWQgJ3MvOi8gLWlzeXN0ZW0gL2cnYCIKKyAgIGlmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCisgICAgIGN4eHZlcnNpb249YCRDWFggLWR1bXB2ZXJzaW9uIDI+JkFTX01FU1NBR0VfTE9HX0ZEYCAmJgorZGlmZiAtZHVyTiBnbGliYy0yLjYub3JpZy9jb25maWd1cmUgZ2xpYmMtMi42L2NvbmZpZ3VyZQorLS0tIGdsaWJjLTIuNi5vcmlnL2NvbmZpZ3VyZQkyMDA4LTA2LTI0IDE4OjM1OjM0LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuNi9jb25maWd1cmUJMjAwOC0wNi0yNCAxODozODo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC00NTYyLDggKzQ1NjIsMTIgQEAKKyAjIGhlYWRlciBkaXJlY3RvcnkgYW5kIGFkZCB0aGF0IHRvIHRoZSBsaXN0LiAgTk9URTogT25seSBkb2VzIHRoZSByaWdodAorICMgdGhpbmcgb24gYSBzeXN0ZW0gdGhhdCBkb2Vzbid0IG5lZWQgZml4aW5jbHVkZXMuICAoTm90IHByZXNlbnRseSBhIHByb2JsZW0uKQorIGlmIHRlc3QgLW4gIiRzeXNoZWFkZXJzIjsgdGhlbgorLSAgY2NoZWFkZXJzPWAkQ0MgLXByaW50LWZpbGUtbmFtZT1pbmNsdWRlYAorLSAgU1lTSU5DTFVERVM9Ii1ub3N0ZGluYyAtaXN5c3RlbSAkY2NoZWFkZXJzIFwKKysgIFNZU0lOQ0xVREVTPS1ub3N0ZGluYworKyAgZm9yIGQgaW4gaW5jbHVkZSBpbmNsdWRlLWZpeGVkOyBkbworKyAgICBpPWAkQ0MgLXByaW50LWZpbGUtbmFtZT0iJGQiYCAmJiB0ZXN0ICJ4JGkiICE9ICJ4JGQiICYmCisrICAgIFNZU0lOQ0xVREVTPSIkU1lTSU5DTFVERVMgLWlzeXN0ZW0gJGkiCisrICBkb25lCisrICBTWVNJTkNMVURFUz0iJFNZU0lOQ0xVREVTIFwKKyAtaXN5c3RlbSBgZWNobyAkc3lzaGVhZGVycyB8IHNlZCAncy86LyAtaXN5c3RlbSAvZydgIgorICAgaWYgdGVzdCAtbiAiJENYWCI7IHRoZW4KKyAgICAgY3h4dmVyc2lvbj1gJENYWCAtZHVtcHZlcnNpb24gMj4mNWAgJiYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYvMTkwLWFscGhhLWF0ZmN0cy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYvMTkwLWFscGhhLWF0ZmN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2NkYWUyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNi8xOTAtYWxwaGEtYXRmY3RzLnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKKy0tLSBnbGliYy0yLjYvc3lzZGVwcy91bml4L3N5c3YvbGludXgva2VybmVsLWZlYXR1cmVzLmgJMjAwNi0wNy0yOSAwNzo0MzoyNy4wMDAwMDAwMDAgKzAzMDAKKysrKyBnbGliYy0yLjYvc3lzZGVwcy91bml4L3N5c3YvbGludXgva2VybmVsLWZlYXR1cmVzLmgubmV3CTIwMDgtMDctMjYgMDg6NDU6MDYuMDAwMDAwMDAwICswMzAwCitAQCAtNDQ1LDcgKzQ0NSw3IEBACisgLyogVGhlICphdCBzeXNjYWxscyB3ZXJlIGludHJvZHVjZWQganVzdCBhZnRlciAyLjYuMTYtcmMxLiAgRHVlIHRvIHRoZSB3YXkgdGhlCisgICAga2VybmVsIHZlcnNpb25zIGFyZSBhZHZlcnRpc2VkIHdlIGNhbiBvbmx5IHJlbHkgb24gMi42LjE3IHRvIGhhdmUKKyAgICB0aGUgY29kZS4gICovCistI2lmIF9fTElOVVhfS0VSTkVMX1ZFUlNJT04gPj0gMHgwMjA2MTEKKysjaWYgX19MSU5VWF9LRVJORUxfVkVSU0lPTiA+PSAweDAyMDYxMSAmJiAhZGVmaW5lZCBfX2FscGhhX18KKyAjIGRlZmluZSBfX0FTU1VNRV9BVEZDVFMJMQorICNlbmRpZgorIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNi8yMDAtYWxwaGEtcHRyX21hbmdsZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYvMjAwLWFscGhhLXB0cl9tYW5nbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RlNGJhYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYvMjAwLWFscGhhLXB0cl9tYW5nbGUucGF0Y2gKQEAgLTAsMCArMSwxMDMgQEAKKy0tLSBnbGliYy0yLjYub3JpZy9zeXNkZXBzL3VuaXgvYWxwaGEvc3lzZGVwLmgKKysrKyBnbGliYy0yLjYvc3lzZGVwcy91bml4L2FscGhhL3N5c2RlcC5oCitAQCAtMzk3LDQyICszOTcsNCBAQAorIAlfc2NfcmV0ID0gX3NjXzAsIF9zY19lcnIgPSBfc2NfMTk7CQkJXAorIH0KKyAKKy0vKiBQb2ludGVyIG1hbmdsaW5nIHN1cHBvcnQuICBOb3RlIHRoYXQgdGxzIGFjY2VzcyBpcyBzbG93IGVub3VnaCB0aGF0CistICAgd2UgZG9uJ3QgZGVvcHRpbWl6ZSB0aGluZ3MgYnkgcGxhY2luZyB0aGUgcG9pbnRlciBjaGVjayB2YWx1ZSB0aGVyZS4gICovCistCistI2luY2x1ZGUgPHN0ZGludC5oPgorLQorLSNpZiBkZWZpbmVkIE5PVF9JTl9saWJjICYmIGRlZmluZWQgSVNfSU5fcnRsZAorLSMgaWZkZWYgX19BU1NFTUJMRVJfXworLSMgIGRlZmluZSBQVFJfTUFOR0xFKGRzdCwgc3JjLCB0bXApCQkJCVwKKy0JbGRhaAl0bXAsIF9fcG9pbnRlcl9jaGtfZ3VhcmRfbG9jYWwoJDI5KSAhZ3ByZWxoaWdoOwlcCistCWxkcQl0bXAsIF9fcG9pbnRlcl9jaGtfZ3VhcmRfbG9jYWwodG1wKSAhZ3ByZWxsb3c7CVwKKy0JeG9yCXNyYywgdG1wLCBkc3QKKy0jICBkZWZpbmUgUFRSX01BTkdMRTIoZHN0LCBzcmMsIHRtcCkJCQkJXAorLQl4b3IJc3JjLCB0bXAsIGRzdAorLSMgIGRlZmluZSBQVFJfREVNQU5HTEUoZHN0LCB0bXApICAgUFRSX01BTkdMRShkc3QsIGRzdCwgdG1wKQorLSMgIGRlZmluZSBQVFJfREVNQU5HTEUyKGRzdCwgdG1wKSAgUFRSX01BTkdMRTIoZHN0LCBkc3QsIHRtcCkKKy0jIGVsc2UKKy1leHRlcm4gdWludHB0cl90IF9fcG9pbnRlcl9jaGtfZ3VhcmRfbG9jYWwgYXR0cmlidXRlX3JlbHJvIGF0dHJpYnV0ZV9oaWRkZW47CistIyAgZGVmaW5lIFBUUl9NQU5HTEUodmFyKQlcCistICAodmFyKSA9IChfX3R5cGVvZiAodmFyKSkgKCh1aW50cHRyX3QpICh2YXIpIF4gX19wb2ludGVyX2Noa19ndWFyZF9sb2NhbCkKKy0jICBkZWZpbmUgUFRSX0RFTUFOR0xFKHZhcikgIFBUUl9NQU5HTEUodmFyKQorLSMgZW5kaWYKKy0jZWxpZiBkZWZpbmVkIFBJQworLSMgaWZkZWYgX19BU1NFTUJMRVJfXworLSMgIGRlZmluZSBQVFJfTUFOR0xFKGRzdCwgc3JjLCB0bXApCQlcCistCWxkcQl0bXAsIF9fcG9pbnRlcl9jaGtfZ3VhcmQ7CVwKKy0JeG9yCXNyYywgdG1wLCBkc3QKKy0jICBkZWZpbmUgUFRSX01BTkdMRTIoZHN0LCBzcmMsIHRtcCkJCVwKKy0JeG9yCXNyYywgdG1wLCBkc3QKKy0jICBkZWZpbmUgUFRSX0RFTUFOR0xFKGRzdCwgdG1wKSAgIFBUUl9NQU5HTEUoZHN0LCBkc3QsIHRtcCkKKy0jICBkZWZpbmUgUFRSX0RFTUFOR0xFMihkc3QsIHRtcCkgIFBUUl9NQU5HTEUyKGRzdCwgZHN0LCB0bXApCistIyBlbHNlCistZXh0ZXJuIHVpbnRwdHJfdCBfX3BvaW50ZXJfY2hrX2d1YXJkIGF0dHJpYnV0ZV9yZWxybzsKKy0jICBkZWZpbmUgUFRSX01BTkdMRSh2YXIpCVwKKy0JKHZhcikgPSAodm9pZCAqKSAoKHVpbnRwdHJfdCkgKHZhcikgXiBfX3BvaW50ZXJfY2hrX2d1YXJkKQorLSMgIGRlZmluZSBQVFJfREVNQU5HTEUodmFyKSAgUFRSX01BTkdMRSh2YXIpCistIyBlbmRpZgorLSNlbmRpZgorLQorICNlbmRpZiAvKiBBU1NFTUJMRVIgKi8KKy0tLSBnbGliYy0yLjYub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXNkZXAuaAorKysrIGdsaWJjLTIuNi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXNkZXAuaAorQEAgLTI5LDYgKzI5LDggQEAKKyAvKiBUaGVyZSBpcyBzb21lIGNvbW1vbmFsaXR5LiAgKi8KKyAjaW5jbHVkZSA8c3lzZGVwcy91bml4L2FscGhhL3N5c2RlcC5oPgorIAorKyNpbmNsdWRlIDx0bHMuaD4KKysKKyAvKiBGb3IgTGludXggd2UgY2FuIHVzZSB0aGUgc3lzdGVtIGNhbGwgdGFibGUgaW4gdGhlIGhlYWRlciBmaWxlCisgCS91c3IvaW5jbHVkZS9hc20vdW5pc3RkLmgKKyAgICBvZiB0aGUga2VybmVsLiAgQnV0IHRoZXNlIHN5bWJvbHMgZG8gbm90IGZvbGxvdyB0aGUgU1lTXyogc3ludGF4CitAQCAtOTYsNCArOTYsNDYgQEAKKyAJSU5URVJOQUxfU1lTQ0FMTDEobmFtZSwgZXJyX291dCwgbnIsIGFyZ3MpOwkJCVwKKyB9KQorIAorKy8qIFBvaW50ZXIgbWFuZ2xpbmcgc3VwcG9ydC4gIE5vdGUgdGhhdCB0bHMgYWNjZXNzIGlzIHNsb3cgZW5vdWdoIHRoYXQKKysgICB3ZSBkb24ndCBkZW9wdGltaXplIHRoaW5ncyBieSBwbGFjaW5nIHRoZSBwb2ludGVyIGNoZWNrIHZhbHVlIHRoZXJlLiAgKi8KKysKKysjaWYgZGVmaW5lZCBOT1RfSU5fbGliYyAmJiBkZWZpbmVkIElTX0lOX3J0bGQKKysjIGlmZGVmIF9fQVNTRU1CTEVSX18KKysjICBkZWZpbmUgUFRSX01BTkdMRShkc3QsIHNyYywgdG1wKQkJCQlcCisrCWxkYWgJdG1wLCBfX3BvaW50ZXJfY2hrX2d1YXJkX2xvY2FsKCQyOSkgIWdwcmVsaGlnaDsJXAorKwlsZHEJdG1wLCBfX3BvaW50ZXJfY2hrX2d1YXJkX2xvY2FsKHRtcCkgIWdwcmVsbG93OwlcCisrCXhvcglzcmMsIHRtcCwgZHN0CisrIyAgZGVmaW5lIFBUUl9NQU5HTEUyKGRzdCwgc3JjLCB0bXApCQkJCVwKKysJeG9yCXNyYywgdG1wLCBkc3QKKysjICBkZWZpbmUgUFRSX0RFTUFOR0xFKGRzdCwgdG1wKSAgIFBUUl9NQU5HTEUoZHN0LCBkc3QsIHRtcCkKKysjICBkZWZpbmUgUFRSX0RFTUFOR0xFMihkc3QsIHRtcCkgIFBUUl9NQU5HTEUyKGRzdCwgZHN0LCB0bXApCisrIyBlbHNlCisrZXh0ZXJuIHVpbnRwdHJfdCBfX3BvaW50ZXJfY2hrX2d1YXJkX2xvY2FsIGF0dHJpYnV0ZV9yZWxybyBhdHRyaWJ1dGVfaGlkZGVuOworKyMgIGRlZmluZSBQVFJfTUFOR0xFKHZhcikJXAorKyAgKHZhcikgPSAoX190eXBlb2YgKHZhcikpICgodWludHB0cl90KSAodmFyKSBeIF9fcG9pbnRlcl9jaGtfZ3VhcmRfbG9jYWwpCisrIyAgZGVmaW5lIFBUUl9ERU1BTkdMRSh2YXIpICBQVFJfTUFOR0xFKHZhcikKKysjIGVuZGlmCisrI2VsaWYgZGVmaW5lZCBQSUMKKysjIGlmZGVmIF9fQVNTRU1CTEVSX18KKysjICBkZWZpbmUgUFRSX01BTkdMRShkc3QsIHNyYywgdG1wKQkJXAorKwlsZHEJdG1wLCBfX3BvaW50ZXJfY2hrX2d1YXJkOwlcCisrCXhvcglzcmMsIHRtcCwgZHN0CisrIyAgZGVmaW5lIFBUUl9NQU5HTEUyKGRzdCwgc3JjLCB0bXApCQlcCisrCXhvcglzcmMsIHRtcCwgZHN0CisrIyAgZGVmaW5lIFBUUl9ERU1BTkdMRShkc3QsIHRtcCkgICBQVFJfTUFOR0xFKGRzdCwgZHN0LCB0bXApCisrIyAgZGVmaW5lIFBUUl9ERU1BTkdMRTIoZHN0LCB0bXApICBQVFJfTUFOR0xFMihkc3QsIGRzdCwgdG1wKQorKyMgZWxzZQorK2V4dGVybiB1aW50cHRyX3QgX19wb2ludGVyX2Noa19ndWFyZCBhdHRyaWJ1dGVfcmVscm87CisrIyAgZGVmaW5lIFBUUl9NQU5HTEUodmFyKQlcCisrCSh2YXIpID0gKHZvaWQgKikgKCh1aW50cHRyX3QpICh2YXIpIF4gX19wb2ludGVyX2Noa19ndWFyZCkKKysjICBkZWZpbmUgUFRSX0RFTUFOR0xFKHZhcikgIFBUUl9NQU5HTEUodmFyKQorKyMgZW5kaWYKKysjZWxzZQorKy8qIFBvaW50ZXIgbWFuZ2xpbmcgaXMgbm90IHlldCBzdXBwb3J0ZWQgZm9yIHN0YXRpYyBsaWJjIG9uIGFscGhhLiAgKi8KKysjIGlmbmRlZiBfX0FTU0VNQkxFUl9fCisrIyAgZGVmaW5lIFBUUl9NQU5HTEUodmFyKSAgICh2b2lkKSAodmFyKQorKyMgIGRlZmluZSBQVFJfREVNQU5HTEUodmFyKSAodm9pZCkgKHZhcikKKysjIGVuZGlmCisrI2VuZGlmCisrCisgI2VuZGlmIC8qIF9MSU5VWF9BTFBIQV9TWVNERVBfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNi8yMTAtbGxsX2xvY2tfdC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYvMjEwLWxsbF9sb2NrX3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI0M2Q5NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYvMjEwLWxsbF9sb2NrX3QucGF0Y2gKQEAgLTAsMCArMSwyMzcgQEAKK1BhdGNoIHByb3ZpZGVkIGJ1IElvYW5uaXMgRS4gVkVORVRJUworCitVc2luZzoKKwordHlwZWRlZiBpbnQgbGxsX2xvY2tfdDsKKworY3JlYXRlcyBwcm9ibGVtcyBkdXJpbmcgY29tcGlsYXRpb24uIFNpbmNlIGdsaWJjIDIuNyBnb3QgcmlkIG9mIHRoZSAndHlwZWRlZicgYW5kCit1c2VzIGRpcmVjdGx5ICdpbnQnLCB3ZSBkbyB0aGUgc2FtZSBoZXJlLgorCitkaWZmIC1OYXVyIGdsaWJjLTIuNi9ucHRsL2FsbG9jYXRlc3RhY2suYyBnbGliYy0yLjYubmV3L25wdGwvYWxsb2NhdGVzdGFjay5jCistLS0gZ2xpYmMtMi42L25wdGwvYWxsb2NhdGVzdGFjay5jCTIwMDYtMDgtMjMgMjA6Mzk6NDcuMDAwMDAwMDAwICswMzAwCisrKysgZ2xpYmMtMi42Lm5ldy9ucHRsL2FsbG9jYXRlc3RhY2suYwkyMDA4LTA3LTI3IDIwOjU2OjE5LjAwMDAwMDAwMCArMDMwMAorQEAgLTEwMyw3ICsxMDMsNyBAQAorIHN0YXRpYyBzaXplX3Qgc3RhY2tfY2FjaGVfYWN0c2l6ZTsKKyAKKyAvKiBNdXRleCBwcm90ZWN0aW5nIHRoaXMgdmFyaWFibGUuICAqLworLXN0YXRpYyBsbGxfbG9ja190IHN0YWNrX2NhY2hlX2xvY2sgPSBMTExfTE9DS19JTklUSUFMSVpFUjsKKytzdGF0aWMgaW50IHN0YWNrX2NhY2hlX2xvY2sgPSBMTExfTE9DS19JTklUSUFMSVpFUjsKKyAKKyAvKiBMaXN0IG9mIHF1ZXVlZCBzdGFjayBmcmFtZXMuICAqLworIHN0YXRpYyBMSVNUX0hFQUQgKHN0YWNrX2NhY2hlKTsKK2RpZmYgLU5hdXIgZ2xpYmMtMi42L25wdGwvZGVzY3IuaCBnbGliYy0yLjYubmV3L25wdGwvZGVzY3IuaAorLS0tIGdsaWJjLTIuNi9ucHRsL2Rlc2NyLmgJMjAwNi0wOS0yNCAyMDoxMDo1NS4wMDAwMDAwMDAgKzAzMDAKKysrKyBnbGliYy0yLjYubmV3L25wdGwvZGVzY3IuaAkyMDA4LTA3LTI3IDIwOjU0OjQxLjAwMDAwMDAwMCArMDMwMAorQEAgLTMwNCwxMCArMzA0LDEwIEBACisgICBpbnQgcGFyZW50X2NhbmNlbGhhbmRsaW5nOworIAorICAgLyogTG9jayB0byBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gdGhlIGRlc2NyaXB0b3IuICAqLworLSAgbGxsX2xvY2tfdCBsb2NrOworKyAgaW50IGxvY2s7CisgCisgICAvKiBMb2NrIGZvciBzeW5jaHJvbml6aW5nIHNldHhpZCBjYWxscy4gICovCistICBsbGxfbG9ja190IHNldHhpZF9mdXRleDsKKysgIGludCBzZXR4aWRfZnV0ZXg7CisgCisgI2lmIEhQX1RJTUlOR19BVkFJTAorICAgLyogT2Zmc2V0IG9mIHRoZSBDUFUgY2xvY2sgYXQgc3RhcnQgdGhyZWFkIHN0YXJ0IHRpbWUuICAqLworZGlmZiAtTmF1ciBnbGliYy0yLjYvbnB0bC9wdGhyZWFkX2F0dHJfaW5pdC5jIGdsaWJjLTIuNi5uZXcvbnB0bC9wdGhyZWFkX2F0dHJfaW5pdC5jCistLS0gZ2xpYmMtMi42L25wdGwvcHRocmVhZF9hdHRyX2luaXQuYwkyMDA0LTAzLTE5IDAxOjU2OjMxLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuNi5uZXcvbnB0bC9wdGhyZWFkX2F0dHJfaW5pdC5jCTIwMDgtMDctMjcgMjA6NTU6MDMuMDAwMDAwMDAwICswMzAwCitAQCAtMjcsNyArMjcsNyBAQAorIAorIAorIHN0cnVjdCBwdGhyZWFkX2F0dHIgKl9fYXR0cl9saXN0OworLWxsbF9sb2NrX3QgX19hdHRyX2xpc3RfbG9jayA9IExMTF9MT0NLX0lOSVRJQUxJWkVSOworK2ludCBfX2F0dHJfbGlzdF9sb2NrID0gTExMX0xPQ0tfSU5JVElBTElaRVI7CisgCisgCisgaW50CitkaWZmIC1OYXVyIGdsaWJjLTIuNi9ucHRsL3B0aHJlYWRQLmggZ2xpYmMtMi42Lm5ldy9ucHRsL3B0aHJlYWRQLmgKKy0tLSBnbGliYy0yLjYvbnB0bC9wdGhyZWFkUC5oCTIwMDYtMDgtMjMgMjA6NDI6NTIuMDAwMDAwMDAwICswMzAwCisrKysgZ2xpYmMtMi42Lm5ldy9ucHRsL3B0aHJlYWRQLmgJMjAwOC0wNy0yNyAyMDo1Njo0MC4wMDAwMDAwMDAgKzAzMDAKK0BAIC0xNDMsNyArMTQzLDcgQEAKKyAKKyAvKiBBdHRyaWJ1dGUgaGFuZGxpbmcuICAqLworIGV4dGVybiBzdHJ1Y3QgcHRocmVhZF9hdHRyICpfX2F0dHJfbGlzdCBhdHRyaWJ1dGVfaGlkZGVuOworLWV4dGVybiBsbGxfbG9ja190IF9fYXR0cl9saXN0X2xvY2sgYXR0cmlidXRlX2hpZGRlbjsKKytleHRlcm4gaW50IF9fYXR0cl9saXN0X2xvY2sgYXR0cmlidXRlX2hpZGRlbjsKKyAKKyAvKiBGaXJzdCBhdmFpbGFibGUgUlQgc2lnbmFsLiAgKi8KKyBleHRlcm4gaW50IF9fY3VycmVudF9zaWdydG1pbiBhdHRyaWJ1dGVfaGlkZGVuOworZGlmZiAtTmF1ciBnbGliYy0yLjYvbnB0bC9zZW1hcGhvcmVQLmggZ2xpYmMtMi42Lm5ldy9ucHRsL3NlbWFwaG9yZVAuaAorLS0tIGdsaWJjLTIuNi9ucHRsL3NlbWFwaG9yZVAuaAkyMDA2LTA1LTExIDIwOjA4OjM3LjAwMDAwMDAwMCArMDMwMAorKysrIGdsaWJjLTIuNi5uZXcvbnB0bC9zZW1hcGhvcmVQLmgJMjAwOC0wNy0yNyAyMDo1NTo0Mi4wMDAwMDAwMDAgKzAzMDAKK0BAIC00OCw3ICs0OCw3IEBACisgZXh0ZXJuIHZvaWQgKl9fc2VtX21hcHBpbmdzIGF0dHJpYnV0ZV9oaWRkZW47CisgCisgLyogTG9jayB0byBwcm90ZWN0IHRoZSBzZWFyY2ggdHJlZS4gICovCistZXh0ZXJuIGxsbF9sb2NrX3QgX19zZW1fbWFwcGluZ3NfbG9jayBhdHRyaWJ1dGVfaGlkZGVuOworK2V4dGVybiBpbnQgX19zZW1fbWFwcGluZ3NfbG9jayBhdHRyaWJ1dGVfaGlkZGVuOworIAorIAorIC8qIEluaXRpYWxpemVyIGZvciBtb3VudHBvaW50LiAgKi8KK2RpZmYgLU5hdXIgZ2xpYmMtMi42L25wdGwvc2VtX29wZW4uYyBnbGliYy0yLjYubmV3L25wdGwvc2VtX29wZW4uYworLS0tIGdsaWJjLTIuNi9ucHRsL3NlbV9vcGVuLmMJMjAwNi0wNS0xMSAyMDowOTo0My4wMDAwMDAwMDAgKzAzMDAKKysrKyBnbGliYy0yLjYubmV3L25wdGwvc2VtX29wZW4uYwkyMDA4LTA3LTI3IDIwOjU1OjIyLjAwMDAwMDAwMCArMDMwMAorQEAgLTE0Nyw3ICsxNDcsNyBAQAorIHZvaWQgKl9fc2VtX21hcHBpbmdzIGF0dHJpYnV0ZV9oaWRkZW47CisgCisgLyogTG9jayB0byBwcm90ZWN0IHRoZSBzZWFyY2ggdHJlZS4gICovCistbGxsX2xvY2tfdCBfX3NlbV9tYXBwaW5nc19sb2NrIGF0dHJpYnV0ZV9oaWRkZW4gPSBMTExfTE9DS19JTklUSUFMSVpFUjsKKytpbnQgX19zZW1fbWFwcGluZ3NfbG9jayBhdHRyaWJ1dGVfaGlkZGVuID0gTExMX0xPQ0tfSU5JVElBTElaRVI7CisgCisgCisgLyogU2VhcmNoIGZvciBleGlzdGluZyBtYXBwaW5nIGFuZCBpZiBwb3NzaWJsZSBhZGQgdGhlIG9uZSBwcm92aWRlZC4gICovCitkaWZmIC1OYXVyIGdsaWJjLTIuNi9ucHRsL3B0aHJlYWRfb25jZS5jIGdsaWJjLTIuNi5uZXcvbnB0bC9wdGhyZWFkX29uY2UuYworLS0tIGdsaWJjLTIuNi9ucHRsL3B0aHJlYWRfb25jZS5jCTIwMDItMTEtMjcgMDA6NTA6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi42Lm5ldy9ucHRsL3B0aHJlYWRfb25jZS5jCTIwMDgtMDctMjcgMjA6NTc6MTIuMDAwMDAwMDAwICswMzAwCitAQCAtMjIsNyArMjIsNyBAQAorIAorIAorIAorLXN0YXRpYyBsbGxfbG9ja190IG9uY2VfbG9jayA9IExMTF9MT0NLX0lOSVRJQUxJWkVSOworK3N0YXRpYyBpbnQgb25jZV9sb2NrID0gTExMX0xPQ0tfSU5JVElBTElaRVI7CisgCisgCisgaW50CitkaWZmIC1OYXVyIGdsaWJjLTIuNi9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2xvd2xldmVsbG9jay5oIGdsaWJjLTIuNi5uZXcvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9sb3dsZXZlbGxvY2suaAorLS0tIGdsaWJjLTIuNi9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2xvd2xldmVsbG9jay5oCTIwMDYtMDctMjkgMDg6MDY6MDcuMDAwMDAwMDAwICswMzAwCisrKysgZ2xpYmMtMi42Lm5ldy9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2xvd2xldmVsbG9jay5oCTIwMDgtMDctMjcgMjA6NTk6MTUuMDAwMDAwMDAwICswMzAwCitAQCAtMjMwLDkgKzIzMCw2IEBACisgLyogT3VyIGludGVybmFsIGxvY2sgaW1wbGVtZW50YXRpb24gaXMgaWRlbnRpY2FsIHRvIHRoZSBiaW5hcnktY29tcGF0aWJsZQorICAgIG11dGV4IGltcGxlbWVudGF0aW9uLiAqLworIAorLS8qIFR5cGUgZm9yIGxvY2sgb2JqZWN0LiAgKi8KKy10eXBlZGVmIGludCBsbGxfbG9ja190OworLQorIC8qIEluaXRpYWxpemVycyBmb3IgbG9jay4gICovCisgI2RlZmluZSBMTExfTE9DS19JTklUSUFMSVpFUgkJKDApCisgI2RlZmluZSBMTExfTE9DS19JTklUSUFMSVpFUl9MT0NLRUQJKDEpCitkaWZmIC1OYXVyIGdsaWJjLTIuNi9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2ZvcmsuYyBnbGliYy0yLjYubmV3L25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZm9yay5jCistLS0gZ2xpYmMtMi42L25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZm9yay5jCTIwMDMtMTItMjEgMDE6Mzc6MTMuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi42Lm5ldy9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2ZvcmsuYwkyMDA4LTA3LTI3IDIxOjAwOjAxLjAwMDAwMDAwMCArMDMwMAorQEAgLTE4Myw3ICsxODMsNyBAQAorIAl9CisgCisgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgZm9yayBsb2NrLiAgKi8KKy0gICAgICBfX2ZvcmtfbG9jayA9IChsbGxfbG9ja190KSBMTExfTE9DS19JTklUSUFMSVpFUjsKKysgICAgICBfX2ZvcmtfbG9jayA9IChpbnQpIExMTF9MT0NLX0lOSVRJQUxJWkVSOworICAgICB9CisgICBlbHNlCisgICAgIHsKK2RpZmYgLU5hdXIgZ2xpYmMtMi42L25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZm9yay5oIGdsaWJjLTIuNi5uZXcvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9mb3JrLmgKKy0tLSBnbGliYy0yLjYvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9mb3JrLmgJMjAwNi0wNS0xNSAyMzoxOTo0My4wMDAwMDAwMDAgKzAzMDAKKysrKyBnbGliYy0yLjYubmV3L25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZm9yay5oCTIwMDgtMDctMjcgMjA6NTg6NDkuMDAwMDAwMDAwICswMzAwCitAQCAtMjYsNyArMjYsNyBAQAorIGV4dGVybiB1bnNpZ25lZCBsb25nIGludCAqX19mb3JrX2dlbmVyYXRpb25fcG9pbnRlciBhdHRyaWJ1dGVfaGlkZGVuOworIAorIC8qIExvY2sgdG8gcHJvdGVjdCBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gb2YgZm9yayBoYW5kbGVycy4gICovCistZXh0ZXJuIGxsbF9sb2NrX3QgX19mb3JrX2xvY2sgYXR0cmlidXRlX2hpZGRlbjsKKytleHRlcm4gaW50IF9fZm9ya19sb2NrIGF0dHJpYnV0ZV9oaWRkZW47CisgCisgLyogRWxlbWVudHMgb2YgdGhlIGZvcmsgaGFuZGxlciBsaXN0cy4gICovCisgc3RydWN0IGZvcmtfaGFuZGxlcgorZGlmZiAtTmF1ciBnbGliYy0yLjYvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L2xvd2xldmVsbG9jay5oIGdsaWJjLTIuNi5uZXcvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L2xvd2xldmVsbG9jay5oCistLS0gZ2xpYmMtMi42L25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9sb3dsZXZlbGxvY2suaAkyMDA2LTA5LTA1IDE3OjQ0OjI1LjAwMDAwMDAwMCArMDMwMAorKysrIGdsaWJjLTIuNi5uZXcvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L2xvd2xldmVsbG9jay5oCTIwMDgtMDctMjcgMjE6MDA6MTkuMDAwMDAwMDAwICswMzAwCitAQCAtNDM2LDkgKzQzNiw2IEBACisgLyogV2UgaGF2ZSBhIHNlcGFyYXRlIGludGVybmFsIGxvY2sgaW1wbGVtZW50YXRpb24gd2hpY2ggaXMgbm90IHRpZWQKKyAgICB0byBiaW5hcnkgY29tcGF0aWJpbGl0eS4gICovCisgCistLyogVHlwZSBmb3IgbG9jayBvYmplY3QuICAqLworLXR5cGVkZWYgaW50IGxsbF9sb2NrX3Q7CistCisgLyogSW5pdGlhbGl6ZXJzIGZvciBsb2NrLiAgKi8KKyAjZGVmaW5lIExMTF9MT0NLX0lOSVRJQUxJWkVSCQkoMCkKKyAjZGVmaW5lIExMTF9MT0NLX0lOSVRJQUxJWkVSX0xPQ0tFRAkoMSkKK2RpZmYgLU5hdXIgZ2xpYmMtMi42L25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaWE2NC9sb3dsZXZlbGxvY2suaCBnbGliYy0yLjYubmV3L25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaWE2NC9sb3dsZXZlbGxvY2suaAorLS0tIGdsaWJjLTIuNi9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2lhNjQvbG93bGV2ZWxsb2NrLmgJMjAwNi0wNy0yOSAwODowNjowNy4wMDAwMDAwMDAgKzAzMDAKKysrKyBnbGliYy0yLjYubmV3L25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaWE2NC9sb3dsZXZlbGxvY2suaAkyMDA4LTA3LTI3IDIwOjU4OjE2LjAwMDAwMDAwMCArMDMwMAorQEAgLTIyMyw5ICsyMjMsNiBAQAorIC8qIFdlIGhhdmUgYSBzZXBhcmF0ZSBpbnRlcm5hbCBsb2NrIGltcGxlbWVudGF0aW9uIHdoaWNoIGlzIG5vdCB0aWVkCisgICAgdG8gYmluYXJ5IGNvbXBhdGliaWxpdHkuICBXZSBjYW4gdXNlIHRoZSBsbGxfbXV0ZXhfKi4gICovCisgCistLyogVHlwZSBmb3IgbG9jayBvYmplY3QuICAqLworLXR5cGVkZWYgaW50IGxsbF9sb2NrX3Q7CistCisgZXh0ZXJuIGludCBsbGxfdW5sb2NrX3dha2VfY2IgKGludCAqX19mdXRleCkgYXR0cmlidXRlX2hpZGRlbjsKKyAKKyAvKiBJbml0aWFsaXplcnMgZm9yIGxvY2suICAqLworZGlmZiAtTmF1ciBnbGliYy0yLjYvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2xvd2xldmVsbG9jay5oIGdsaWJjLTIuNi5uZXcvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2xvd2xldmVsbG9jay5oCistLS0gZ2xpYmMtMi42L25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9sb3dsZXZlbGxvY2suaAkyMDA2LTA3LTI5IDA4OjA2OjA3LjAwMDAwMDAwMCArMDMwMAorKysrIGdsaWJjLTIuNi5uZXcvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2xvd2xldmVsbG9jay5oCTIwMDgtMDctMjcgMjE6MDA6MzYuMDAwMDAwMDAwICswMzAwCitAQCAtMjU0LDkgKzI1NCw2IEBACisgLyogT3VyIGludGVybmFsIGxvY2sgaW1wbGVtZW50YXRpb24gaXMgaWRlbnRpY2FsIHRvIHRoZSBiaW5hcnktY29tcGF0aWJsZQorICAgIG11dGV4IGltcGxlbWVudGF0aW9uLiAqLworIAorLS8qIFR5cGUgZm9yIGxvY2sgb2JqZWN0LiAgKi8KKy10eXBlZGVmIGludCBsbGxfbG9ja190OworLQorIC8qIEluaXRpYWxpemVycyBmb3IgbG9jay4gICovCisgI2RlZmluZSBMTExfTE9DS19JTklUSUFMSVpFUgkJKDApCisgI2RlZmluZSBMTExfTE9DS19JTklUSUFMSVpFUl9MT0NLRUQJKDEpCitkaWZmIC1OYXVyIGdsaWJjLTIuNi9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3JlZ2lzdGVyLWF0Zm9yay5jIGdsaWJjLTIuNi5uZXcvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9yZWdpc3Rlci1hdGZvcmsuYworLS0tIGdsaWJjLTIuNi9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3JlZ2lzdGVyLWF0Zm9yay5jCTIwMDUtMTItMjIgMDA6MTc6MjEuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi42Lm5ldy9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3JlZ2lzdGVyLWF0Zm9yay5jCTIwMDgtMDctMjcgMjE6MDA6NTUuMDAwMDAwMDAwICswMzAwCitAQCAtMjQsNyArMjQsNyBAQAorIAorIAorIC8qIExvY2sgdG8gcHJvdGVjdCBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gb2YgZm9yayBoYW5kbGVycy4gICovCistbGxsX2xvY2tfdCBfX2ZvcmtfbG9jayA9IExMTF9MT0NLX0lOSVRJQUxJWkVSOworK2ludCBfX2ZvcmtfbG9jayA9IExMTF9MT0NLX0lOSVRJQUxJWkVSOworIAorIAorIC8qIE51bWJlciBvZiBwcmUtYWxsb2NhdGVkIGhhbmRsZXIgZW50cmllcy4gICovCitkaWZmIC1OYXVyIGdsaWJjLTIuNi9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3MzOTAvbG93bGV2ZWxsb2NrLmggZ2xpYmMtMi42Lm5ldy9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3MzOTAvbG93bGV2ZWxsb2NrLmgKKy0tLSBnbGliYy0yLjYvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zMzkwL2xvd2xldmVsbG9jay5oCTIwMDYtMDctMjkgMDg6MDY6MDcuMDAwMDAwMDAwICswMzAwCisrKysgZ2xpYmMtMi42Lm5ldy9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3MzOTAvbG93bGV2ZWxsb2NrLmgJMjAwOC0wNy0yNyAyMTowMToxNC4wMDAwMDAwMDAgKzAzMDAKK0BAIC0zMDksOSArMzA5LDYgQEAKKyAvKiBXZSBoYXZlIGEgc2VwYXJhdGUgaW50ZXJuYWwgbG9jayBpbXBsZW1lbnRhdGlvbiB3aGljaCBpcyBub3QgdGllZAorICAgIHRvIGJpbmFyeSBjb21wYXRpYmlsaXR5LiAgV2UgY2FuIHVzZSB0aGUgbGxsX211dGV4XyouICAqLworIAorLS8qIFR5cGUgZm9yIGxvY2sgb2JqZWN0LiAgKi8KKy10eXBlZGVmIGludCBsbGxfbG9ja190OworLQorIC8qIEluaXRpYWxpemVycyBmb3IgbG9jay4gICovCisgI2RlZmluZSBMTExfTE9DS19JTklUSUFMSVpFUgkJKDApCisgI2RlZmluZSBMTExfTE9DS19JTklUSUFMSVpFUl9MT0NLRUQJKDEpCitkaWZmIC1OYXVyIGdsaWJjLTIuNi9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL2xvd2xldmVsbG9jay5oIGdsaWJjLTIuNi5uZXcvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9sb3dsZXZlbGxvY2suaAorLS0tIGdsaWJjLTIuNi9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL2xvd2xldmVsbG9jay5oCTIwMDYtMDctMjkgMDg6MDY6MDYuMDAwMDAwMDAwICswMzAwCisrKysgZ2xpYmMtMi42Lm5ldy9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL2xvd2xldmVsbG9jay5oCTIwMDgtMDctMjcgMjA6NTg6MDAuMDAwMDAwMDAwICswMzAwCitAQCAtMjc4LDkgKzI3OCw2IEBACisgLyogV2UgaGF2ZSBhIHNlcGFyYXRlIGludGVybmFsIGxvY2sgaW1wbGVtZW50YXRpb24gd2hpY2ggaXMgbm90IHRpZWQKKyAgICB0byBiaW5hcnkgY29tcGF0aWJpbGl0eS4gICovCisgCistLyogVHlwZSBmb3IgbG9jayBvYmplY3QuICAqLworLXR5cGVkZWYgaW50IGxsbF9sb2NrX3Q7CistCisgLyogSW5pdGlhbGl6ZXJzIGZvciBsb2NrLiAgKi8KKyAjZGVmaW5lIExMTF9MT0NLX0lOSVRJQUxJWkVSCQkoMCkKKyAjZGVmaW5lIExMTF9MT0NLX0lOSVRJQUxJWkVSX0xPQ0tFRAkoMSkKK2RpZmYgLU5hdXIgZ2xpYmMtMi42L25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc3BhcmMvbG93bGV2ZWxsb2NrLmggZ2xpYmMtMi42Lm5ldy9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NwYXJjL2xvd2xldmVsbG9jay5oCistLS0gZ2xpYmMtMi42L25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc3BhcmMvbG93bGV2ZWxsb2NrLmgJMjAwNi0wNy0yOSAwODowNjowNi4wMDAwMDAwMDAgKzAzMDAKKysrKyBnbGliYy0yLjYubmV3L25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc3BhcmMvbG93bGV2ZWxsb2NrLmgJMjAwOC0wNy0yNyAyMDo1OTozOS4wMDAwMDAwMDAgKzAzMDAKK0BAIC0yMzcsOSArMjM3LDYgQEAKKyAvKiBXZSBoYXZlIGEgc2VwYXJhdGUgaW50ZXJuYWwgbG9jayBpbXBsZW1lbnRhdGlvbiB3aGljaCBpcyBub3QgdGllZAorICAgIHRvIGJpbmFyeSBjb21wYXRpYmlsaXR5LiAgV2UgY2FuIHVzZSB0aGUgbGxsX211dGV4XyouICAqLworIAorLS8qIFR5cGUgZm9yIGxvY2sgb2JqZWN0LiAgKi8KKy10eXBlZGVmIGludCBsbGxfbG9ja190OworLQorIGV4dGVybiBpbnQgbGxsX3VubG9ja193YWtlX2NiIChpbnQgKl9fZnV0ZXgpIGF0dHJpYnV0ZV9oaWRkZW47CisgCisgLyogSW5pdGlhbGl6ZXJzIGZvciBsb2NrLiAgKi8KK2RpZmYgLU5hdXIgZ2xpYmMtMi42L25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgveDg2XzY0L2xvd2xldmVsbG9jay5oIGdsaWJjLTIuNi5uZXcvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC94ODZfNjQvbG93bGV2ZWxsb2NrLmgKKy0tLSBnbGliYy0yLjYvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC94ODZfNjQvbG93bGV2ZWxsb2NrLmgJMjAwNi0wOS0wNSAxNzo0NTozNC4wMDAwMDAwMDAgKzAzMDAKKysrKyBnbGliYy0yLjYubmV3L25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgveDg2XzY0L2xvd2xldmVsbG9jay5oCTIwMDgtMDctMjcgMjA6NTg6MzMuMDAwMDAwMDAwICswMzAwCitAQCAtNDQ2LDkgKzQ0Niw2IEBACisgLyogV2UgaGF2ZSBhIHNlcGFyYXRlIGludGVybmFsIGxvY2sgaW1wbGVtZW50YXRpb24gd2hpY2ggaXMgbm90IHRpZWQKKyAgICB0byBiaW5hcnkgY29tcGF0aWJpbGl0eS4gICovCisgCistLyogVHlwZSBmb3IgbG9jayBvYmplY3QuICAqLworLXR5cGVkZWYgaW50IGxsbF9sb2NrX3Q7CistCisgLyogSW5pdGlhbGl6ZXJzIGZvciBsb2NrLiAgKi8KKyAjZGVmaW5lIExMTF9MT0NLX0lOSVRJQUxJWkVSCQkoMCkKKyAjZGVmaW5lIExMTF9MT0NLX0lOSVRJQUxJWkVSX0xPQ0tFRAkoMSkKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYvMjIwLWNyb3NzLXBvc2l4X21ha2VmaWxlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNi8yMjAtY3Jvc3MtcG9zaXhfbWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU2MjNkYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjYvMjIwLWNyb3NzLXBvc2l4X21ha2VmaWxlLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK09uIDIwMDkwMTExLjExNTErMDEwMCwgVGhvbWFzIEpvdXJkYW4gPHRqb3VyZGFuQG5ldWYuZnI+IHdyb3RlOgorCisgIEknbSBzdGlsbCB3b3JraW5nIG9uIHRoZSBzb2xhcmlzIHBvcnQgYW4gSSBoYXZlIHRoZSBzYW1lIGlzc3VlIGhlcmUuCisgIFdoaWxlIHRyeWluZyB0byBidWlsZCB0aGUgaTY4Ni1ucHRsLWxpbnV4LWdudSB0b29sY2hhaW4gdW5kZXIKKyAgT3BlblNvbGFyaXMsIHRoZSBwcm9ibGVtcyBhcHBlYXJzIGR1cmluZyB0aGUgbWFrZSBpbnN0YWxsIHJ1bGUgb2YgdGhlCisgIGxpYmMgZnVuY3Rpb24uCisKKyAgVGhlIHByb2JsZW0gaXMgdGhhdCBzb2xhcmlzIHRyaWVzIHRvIGV4ZWN1dGUgbGQtbGludXguc28uMiwgd2hpY2ggaXMgYW4KKyAgZWxmIDMyIGJpdHMgZHluIGxpYiwgYW5kIGl0IGZhaWxzIHdpdGggYSBtZW1vcnkgZmF1bHQsIG5vdCBhICJjYW5ub3QKKyAgZXhlY3V0ZSBiaW5hcnkgZmlsZSIuIEhlbmNlIHRoZSBidWlsZCBzdG9wcyBvbiB0aGlzIGVycm9yLgorCitBbmQgb24gMjAwOTAxMTEuMTMzOSswMTAwLCBoZSByZXBsaWVkIHdpdGg6CisKKyAgQWZ0ZXIgZGlnZ2luZyBhIGxpdHRsZSwgdGhlIHByb2JsZW0gY29tZXMgZnJvbSB0aGUKKyAgZ2xpYmMtMi42LjEvcG9zaXgvTWFrZWZpbGUuIEl0IGhhcyBiZWVuIHNvbHZlZCBzdGFydGluZyBmcm9tIGdsaWJjIDIuNworICBzbyBJIGV4dHJhY3RlZCBhIHBhdGNoIGZvciBnbGliYyAyLjYuMS4KKworLS0tIGdsaWJjLTIuNi4xL3Bvc2l4L01ha2VmaWxlCTIwMDctMDQtMDQgMDE6Mjg6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi43L3Bvc2l4L01ha2VmaWxlCTIwMDctMDktMTIgMDE6NTc6MjIuMDAwMDAwMDAwICswMjAwCitAQCAtOTgsNyArOTgsNyBAQAorIGVuZGlmCisgb3RoZXJzCQk6PSBnZXRjb25mCisgaW5zdGFsbC1iaW4JOj0gZ2V0Y29uZgorLWluc3RhbGwtb3RoZXJzCTo9ICQoaW5zdF9saWJleGVjZGlyKS9nZXRjb25mCisraW5zdGFsbC1vdGhlcnMtcHJvZ3JhbXMJOj0gJChpbnN0X2xpYmV4ZWNkaXIpL2dldGNvbmYKKyAKKyBiZWZvcmUtY29tcGlsZQk6PSB0ZXN0Y2FzZXMuaCBwdGVzdGNhc2VzLmgKKyAKK0BAIC0xMTAsNyArMTEwLDcgQEAKKyAJICAgICB0c3QtcnhzcGVuY2VyLW1lbSB0c3QtcnhzcGVuY2VyLm10cmFjZSB0c3QtZ2V0Y29uZi5vdXQgXAorIAkgICAgIHRzdC1wY3JlLW1lbSB0c3QtcGNyZS5tdHJhY2UgdHN0LWJvb3N0LW1lbSB0c3QtYm9vc3QubXRyYWNlIFwKKyAJICAgICBidWctZ2EyLm10cmFjZSBidWctZ2EyLW1lbSBidWctZ2xvYjIubXRyYWNlIGJ1Zy1nbG9iMi1tZW0gXAorLQkgICAgIHRzdC12Zm9yazMtbWVtIHRzdC12Zm9yazMubXRyYWNlCisrCSAgICAgdHN0LXZmb3JrMy1tZW0gdHN0LXZmb3JrMy5tdHJhY2UgZ2V0Y29uZi5zcGVjbGlzdAorIAorIGluY2x1ZGUgLi4vUnVsZXMKKyAKK0BAIC0yOTEsMTIgKzI5MSwyMCBAQAorICQob2JqcGZ4KWJ1Zy1nbG9iMi1tZW06ICQob2JqcGZ4KWJ1Zy1nbG9iMi5vdXQKKyAJJChjb21tb24tb2JqcGZ4KW1hbGxvYy9tdHJhY2UgJChvYmpwZngpYnVnLWdsb2IyLm10cmFjZSA+ICRACisgCistJChpbnN0X2xpYmV4ZWNkaXIpL2dldGNvbmY6ICQob2JqcGZ4KWdldGNvbmYgRk9SQ0UKKyskKGluc3RfbGliZXhlY2RpcikvZ2V0Y29uZjogJChpbnN0X2JpbmRpcikvZ2V0Y29uZiBcCisrCQkJICAgICQob2JqcGZ4KWdldGNvbmYuc3BlY2xpc3QgRk9SQ0UKKyAJJChhZGRwcmVmaXggJCguLikuL3NjcmlwdHMvbWtpbnN0YWxsZGlycyAsXAorIAkJICAgICQoZmlsdGVyLW91dCAkKHdpbGRjYXJkICRAKSwkQCkpCistCWZvciBzcGVjIGluIGBMQ19BTEw9QyBHRVRDT05GX0RJUj0vZGV2L251bGwgXAorLQkJICAgICAkKHJ1bi1wcm9ncmFtLXByZWZpeCkgJDwgXAorLQkJICAgICBfUE9TSVhfVjZfV0lEVEhfUkVTVFJJQ1RFRF9FTlZTYDsgZG8gXAorLQkJJChJTlNUQUxMX1BST0dSQU0pICQ8ICRALyQkc3BlYy5uZXc7IFwKKy0JCW12IC1mICRALyQkc3BlYy5uZXcgJEAvJCRzcGVjOyBcCistCWRvbmUKKysJd2hpbGUgcmVhZCBzcGVjOyBkbyBcCisrCSAgbG4gLWYgJDwgJEAvJCRzcGVjLm5ldyB8fCAkKElOU1RBTExfUFJPR1JBTSkgJDwgJEAvJCRzcGVjLm5ldzsgXAorKwkgIG12IC1mICRALyQkc3BlYy5uZXcgJEAvJCRzcGVjOyBcCisrCWRvbmUgPCAkKG9ianBmeClnZXRjb25mLnNwZWNsaXN0CisrCisrJChvYmpwZngpZ2V0Y29uZi5zcGVjbGlzdDogJChvYmpwZngpZ2V0Y29uZgorK2lmZXEgKG5vLCQoY3Jvc3MtY29tcGlsaW5nKSkKKysJTENfQUxMPUMgR0VUQ09ORl9ESVI9L2Rldi9udWxsIFwKKysJJChydW4tcHJvZ3JhbS1wcmVmaXgpICQ8IF9QT1NJWF9WNl9XSURUSF9SRVNUUklDVEVEX0VOVlMgPiAkQC5uZXcKKytlbHNlCisrCT4gJEAubmV3CisrZW5kaWYKKysJbXYgLWYgJEAubmV3ICRACmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi43LzEwMC1jeWd3aW4ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi43LzEwMC1jeWd3aW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwMzYxZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjcvMTAwLWN5Z3dpbi5wYXRjaApAQCAtMCwwICsxLDE4NSBAQAorRml4ZXMKK2VsZi9saWJydGxkLm9zOiBJbiBmdW5jdGlvbiBgcHJvY2Vzc19lbnZ2YXJzJzogOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX2FjY2VzcycKKy4uLgord2hlbiBidWlsZGluZyBnbGliYy0yLjMueCBvbiBjeWd3aW4KKworSWRlYSBmcm9tCitodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL21sL2J1Zy1nbGliYy8yMDAyLTAxL21zZzAwMDcxL2dsaWJjLTIuMi1jeWdpbi1zaGFyZWQucGF0Y2gKK0Jhc2ljYWxseSwgbWFrZSBnbGliYyB1c2UgLm9TVCBhcyBzdWZmaXggZm9yICdvYmplY3Qgc3RhdGljJworaW5zdGVhZCBvZiAub1MsIHNpbmNlIGN5Z3dpbiBoYXMgdHJvdWJsZSBkaXN0aW5ndWlzaGluZyAub3MgZnJvbSAub1MKKyhPcmlnaW5hbCBwYXRjaCBoYWQgLm9uLCBidXQgLm9TVCBpcyBtb3JlIG1uZW1vbmljIGZvciAnb2JqZWN0IHN0YXRpYycpCisKK2dsaWJjLWxpbnV4dGhyZWFkcy0yLjMuNSBhbHNvIHJlcXVpcmVzIGEgcGF0Y2gsIHNlZQorLi4vZ2xpYmMtbGludXh0aHJlYWRzLTIuMy41L2dsaWJjLWxpbnV4dGhyZWFkcy0yLjMuNS1jeWd3aW4ucGF0Y2gKKworWyBmb3J3YXJkIHBvcnRlZCB0byBnbGliYy0yLjMuNSBieSBQZXRyIEN2YWNob3VjZWs6CisKK01lc3NhZ2UtSUQ6IDw0MjgyRkNCQS4zMDQwMDAwQHVuaWNvbnRyb2xzLmN6PgorRGF0ZTogVGh1LCAxMiBNYXkgMjAwNSAwODo1MDozNCArMDIwMAorRnJvbTogUGV0ciBDdmFjaG91Y2VrIDxjdmFjaG91Y2VrQHVuaWNvbnRyb2xzLmN6PgorVG86IERhbiBLZWdlbCA8ZGFua0BrZWdlbC5jb20+CitDQzogIGNyb3NzZ2NjQHNvdXJjZXMucmVkaGF0LmNvbQorU3ViamVjdDogUGF0Y2hlcyB0byBidWlsZCBnY2MgMy40LjMgLyBnbGliYyAyLjMuNSBvbiBjeWd3aW4KKworSGkgRGFuLAorZm9sbG93aW5nIHBhdGNoZXMgYXJlIG5lZWRlZCB0byBidWlsZCBnY2MtMy40LjMvZ2xpYmMtMi4zLjUgdG9vbGNoYWluCitvbiBjeWd3aW4uIFRlc3RlZCB0byBidWlsZCB0b29sY2hhaW5zIGZvciBwb3dlcnBjIDYwNCBhbmQgNzUwIHRhcmdldHMuCisKKy0tCisgICAgICAgICAgICAgICAgICAgICBQZXRyIEN2YWNob3VjZWsKKyAgICAgICAgICAgICAgICAgICAgIFVuaWNvbnRyb2xzIGEucy4KKyAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudW5pY29udHJvbHMuY3oKK10KKworZGlmZiAtYXVyIGdsaWJjLTIuMy41L01ha2Vjb25maWcgZ2xpYmMtMi4zLjUtY3lnd2luL01ha2Vjb25maWcKKy0tLSBnbGliYy0yLjMuNS9NYWtlY29uZmlnCTIwMDUtMDItMTYgMTE6NTA6MTkuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4zLjUtY3lnd2luL01ha2Vjb25maWcJMjAwNS0wNS0xMSAwODoyNDo1MS4wNDY4NzUwMDAgKzAyMDAKK0BAIC00NzAsNyArNDcwLDcgQEAKKyAjIHJ1biB0aGUgbGlua2VkIHByb2dyYW1zLgorIGxpbmstbGliYyA9IC1XbCwtcnBhdGgtbGluaz0kKHJwYXRoLWxpbmspIFwKKyAJICAgICQoY29tbW9uLW9ianBmeClsaWJjLnNvJChsaWJjLnNvLXZlcnNpb24pIFwKKy0JICAgICQoY29tbW9uLW9ianBmeCkkKHBhdHN1YnN0ICUsJChsaWJ0eXBlLm9TKSxjKSAkKGdudWxpYikKKysJICAgICQoY29tbW9uLW9ianBmeCkkKHBhdHN1YnN0ICUsJChsaWJ0eXBlLm9TVCksYykgJChnbnVsaWIpCisgIyBUaGlzIGlzIGhvdyB0byBmaW5kIGF0IGJ1aWxkLXRpbWUgdGhpbmdzIHRoYXQgd2lsbCBiZSBpbnN0YWxsZWQgdGhlcmUuCisgcnBhdGgtZGlycyA9IG1hdGggZWxmIGRsZmNuIG5zcyBuaXMgcnQgcmVzb2x2IGNyeXB0CisgZW5kaWYKK0BAIC02OTEsNyArNjkxLDcgQEAKKyAjIFRoZSBjb21waWxhdGlvbiBydWxlcyB1c2UgJChDUFBGTEFHUy0ke1NVRkZJWH0pIGFuZCAkKENGTEFHUy0ke1NVRkZJWH0pCisgIyB0byBwYXNzIGRpZmZlcmVudCBmbGFncyBmb3IgZWFjaCBmbGF2b3IuCisgbGlidHlwZXMgPSAkKGZvcmVhY2ggbywkKG9iamVjdC1zdWZmaXhlcy1mb3ItbGliYyksJChsaWJ0eXBlJG8pKQorLWFsbC1vYmplY3Qtc3VmZml4ZXMgOj0gLm8gLm9zIC5vcCAub2cgLm9iIC5vUworK2FsbC1vYmplY3Qtc3VmZml4ZXMgOj0gLm8gLm9zIC5vcCAub2cgLm9iIC5vU1QKKyBvYmplY3Qtc3VmZml4ZXMgOj0KKyBDUFBGTEFHUy0ubyA9ICQocGljLWRlZmF1bHQpCisgQ0ZMQUdTLS5vID0gJChmaWx0ZXIgJWZyYW1lLXBvaW50ZXIsJCgrY2ZsYWdzKSkKK0BAIC03NDcsMTQgKzc0NywxNCBAQAorCisgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKyAjIEJ1aWxkIHNwZWNpYWwgbGlicmFyeSB0aGF0IGNvbnRhaW5zIHRoZSBzdGF0aWMtb25seSByb3V0aW5lcyBmb3IgbGliYy4KKy1vYmplY3Qtc3VmZml4ZXMtZm9yLWxpYmMgKz0gLm9TCisrb2JqZWN0LXN1ZmZpeGVzLWZvci1saWJjICs9IC5vU1QKKworICMgTXVzdCBidWlsZCB0aGUgcm91dGluZXMgYXMgUElDLCB0aG91Z2gsIGJlY2F1c2UgdGhleSBjYW4gZW5kIHVwIGluICh1c2VycycpCisgIyBzaGFyZWQgb2JqZWN0cy4gIFdlIGRvbid0IHdhbnQgdG8gdXNlIENGTEFHUy1vcyBiZWNhdXNlIHVzZXJzIG1heSwgZm9yCisgIyBleGFtcGxlLCBtYWtlIHRoYXQgcHJvY2Vzc29yLXNwZWNpZmljLgorLUNGTEFHUy0ub1MgPSAkKENGTEFHUy0ubykgJChQSUMtY2NmbGFnKQorLUNQUEZMQUdTLS5vUyA9ICQoQ1BQRkxBR1MtLm8pIC1EUElDIC1ETElCQ19OT05TSEFSRUQ9MQorLWxpYnR5cGUub1MgPSBsaWIlX25vbnNoYXJlZC5hCisrQ0ZMQUdTLS5vU1QgPSAkKENGTEFHUy0ubykgJChQSUMtY2NmbGFnKQorK0NQUEZMQUdTLS5vU1QgPSAkKENQUEZMQUdTLS5vKSAtRFBJQyAtRExJQkNfTk9OU0hBUkVEPTEKKytsaWJ0eXBlLm9TVCA9IGxpYiVfbm9uc2hhcmVkLmEKKyBlbmRpZgorCisgIyBUaGUgYXNzZW1ibGVyIGNhbiBnZW5lcmF0ZSBkZWJ1ZyBpbmZvcm1hdGlvbiB0b28uCitkaWZmIC1hdXIgZ2xpYmMtMi4zLjUvTWFrZXJ1bGVzIGdsaWJjLTIuMy41LWN5Z3dpbi9NYWtlcnVsZXMKKy0tLSBnbGliYy0yLjMuNS9NYWtlcnVsZXMJMjAwNC0xMi0xNSAxOTo1MjozOS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjMuNS1jeWd3aW4vTWFrZXJ1bGVzCTIwMDUtMDUtMTEgMDg6MjU6MzMuNTc4MTI1MDAwICswMjAwCitAQCAtNDE3LDcgKzQxNyw3IEBACisgIyBCb3VuZGVkIHBvaW50ZXIgdGh1bmtzIGFyZSBvbmx5IGJ1aWx0IGZvciAqLm9iCisgZWxpZGUtYnAtdGh1bmtzID0gJChhZGRwcmVmaXggJChicHBmeCksJChicC10aHVua3MpKQorCistZWxpZGUtcm91dGluZXMub1MgKz0gJChmaWx0ZXItb3V0ICQoc3RhdGljLW9ubHktcm91dGluZXMpLFwKKytlbGlkZS1yb3V0aW5lcy5vU1QgKz0gJChmaWx0ZXItb3V0ICQoc3RhdGljLW9ubHktcm91dGluZXMpLFwKKyAJCQkJICAkKHJvdXRpbmVzKSAkKGF1eCkgJChzeXNkZXBfcm91dGluZXMpKSBcCisgCQkgICAgICQoZWxpZGUtYnAtdGh1bmtzKQorIGVsaWRlLXJvdXRpbmVzLm9zICs9ICQoc3RhdGljLW9ubHktcm91dGluZXMpICQoZWxpZGUtYnAtdGh1bmtzKQorQEAgLTk4NCw3ICs5ODQsNyBAQAorIGluc3RhbGw6ICQoaW5zdF9saWJkaXIpL2xpYmMuc28KKyAkKGluc3RfbGliZGlyKS9saWJjLnNvOiAkKGNvbW1vbi1vYmpwZngpZm9ybWF0LmxkcyBcCisgCQkJJChjb21tb24tb2JqcGZ4KWxpYmMuc28kKGxpYmMuc28tdmVyc2lvbikgXAorLQkJCSQoaW5zdF9saWJkaXIpLyQocGF0c3Vic3QgJSwkKGxpYnR5cGUub1MpLFwKKysJCQkkKGluc3RfbGliZGlyKS8kKHBhdHN1YnN0ICUsJChsaWJ0eXBlLm9TVCksXAorIAkJCQkJCSAgJChsaWJwcmVmaXgpJChsaWJjLW5hbWUpKSBcCisgCQkJJCgrZm9yY2UpCisgCShlY2hvICcvKiBHTlUgbGQgc2NyaXB0JztcCitAQCAtOTkyLDcgKzk5Miw3IEBACisgCSBlY2hvICcgICB0aGUgc3RhdGljIGxpYnJhcnksIHNvIHRyeSB0aGF0IHNlY29uZGFyaWx5LiAgKi8nO1wKKyAJIGNhdCAkPDsgXAorIAkgZWNobyAnR1JPVVAgKCAkKHNsaWJkaXIpL2xpYmMuc28kKGxpYmMuc28tdmVyc2lvbiknIFwKKy0JICAgICAgJyQobGliZGlyKS8kKHBhdHN1YnN0ICUsJChsaWJ0eXBlLm9TKSwkKGxpYnByZWZpeCkkKGxpYmMtbmFtZSkpJ1wKKysJICAgICAgJyQobGliZGlyKS8kKHBhdHN1YnN0ICUsJChsaWJ0eXBlLm9TVCksJChsaWJwcmVmaXgpJChsaWJjLW5hbWUpKSdcCisJICAgICAgJyBBU19ORUVERUQgKCcgJChzbGliZGlyKS8kKHJ0bGQtaW5zdGFsbGVkLW5hbWUpICcpICknIFwKKyAJKSA+ICRALm5ldworCW12IC1mICRALm5ldyAkQAorZGlmZiAtYXVyIGdsaWJjLTIuMy41L2V4dHJhLWxpYi5tayBnbGliYy0yLjMuNS1jeWd3aW4vZXh0cmEtbGliLm1rCistLS0gZ2xpYmMtMi4zLjUvZXh0cmEtbGliLm1rCTIwMDQtMTItMDIgMjM6NTQ6NDcuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4zLjUtY3lnd2luL2V4dHJhLWxpYi5tawkyMDA1LTA1LTExIDA4OjI3OjI4LjE1NjI1MDAwMCArMDIwMAorQEAgLTEzLDcgKzEzLDcgQEAKKworIGlmbmVxICgsJCgkKGxpYiktc3RhdGljLW9ubHktcm91dGluZXMpKQorIGlmbmVxICgsJChmaWx0ZXIgeWVzeWVzJSwkKGJ1aWxkLXNoYXJlZCkkKGVsZikkKCQobGliKS5zby12ZXJzaW9uKSkpCistb2JqZWN0LXN1ZmZpeGVzLSQobGliKSArPSAkKGZpbHRlci1vdXQgJCgkKGxpYiktaW5oaWJpdC1vKSwub1MpCisrb2JqZWN0LXN1ZmZpeGVzLSQobGliKSArPSAkKGZpbHRlci1vdXQgJCgkKGxpYiktaW5oaWJpdC1vKSwub1NUKQorIGVuZGlmCisgZW5kaWYKKworQEAgLTI5LDcgKzI5LDcgQEAKKworICMgQWRkIGVhY2ggZmxhdm9yIG9mIGxpYnJhcnkgdG8gdGhlIGxpc3RzIG9mIHRoaW5ncyB0byBidWlsZCBhbmQgaW5zdGFsbC4KKyBpbnN0YWxsLWxpYiArPSAkKGZvcmVhY2ggbywkKG9iamVjdC1zdWZmaXhlcy0kKGxpYikpLCQobGliOmxpYiU9JChsaWJ0eXBlJG8pKSkKKy1leHRyYS1vYmpzICs9ICQoZm9yZWFjaCBvLCQoZmlsdGVyLW91dCAub3MgLm9TLCQob2JqZWN0LXN1ZmZpeGVzLSQobGliKSkpLFwKKytleHRyYS1vYmpzICs9ICQoZm9yZWFjaCBvLCQoZmlsdGVyLW91dCAub3MgLm9TVCwkKG9iamVjdC1zdWZmaXhlcy0kKGxpYikpKSxcCisgCQkJJChwYXRzdWJzdCAlLCUkbywkKGZpbHRlci1vdXQgXAorIAkJCQkJICAgJCgkKGxpYiktc2hhcmVkLW9ubHktcm91dGluZXMpLFwKKyAJCQkJCSAgICQoYWxsLSQobGliKS1yb3V0aW5lcykpKSkKK0BAIC01Nyw3ICs1Nyw3IEBACisKKworICMgVXNlIG8taXRlcmF0b3IubWsgdG8gZ2VuZXJhdGUgYSBydWxlIGZvciBlYWNoIGZsYXZvciBvZiBsaWJyYXJ5LgorLWlmbmVxICgsJChmaWx0ZXItb3V0IC5vcyAub1MsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSkpCisraWZuZXEgKCwkKGZpbHRlci1vdXQgLm9zIC5vU1QsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSkpCisgZGVmaW5lIG8taXRlcmF0b3ItZG9pdAorICQob2JqcGZ4KSQocGF0c3Vic3QgJSwkKGxpYnR5cGUkbyksJChsaWI6bGliJT0lKSk6IFwKKyAgICQocGF0c3Vic3QgJSwkKG9ianBmeCklJG8sXAorQEAgLTY1LDcgKzY1LDcgQEAKKyAJCQkgICQoYWxsLSQobGliKS1yb3V0aW5lcykpKTsgXAorIAkkJChidWlsZC1leHRyYS1saWIpCisgZW5kZWYKKy1vYmplY3Qtc3VmZml4ZXMtbGVmdCA9ICQoZmlsdGVyLW91dCAub3MgLm9TLCQob2JqZWN0LXN1ZmZpeGVzLSQobGliKSkpCisrb2JqZWN0LXN1ZmZpeGVzLWxlZnQgPSAkKGZpbHRlci1vdXQgLm9zIC5vU1QsJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSkKKyBpbmNsdWRlICQocGF0c3Vic3QgJSwkKC4uKW8taXRlcmF0b3IubWssJChvYmplY3Qtc3VmZml4ZXMtbGVmdCkpCisgZW5kaWYKKworQEAgLTc3LDkgKzc3LDkgQEAKKyAJJChidWlsZC1leHRyYS1saWIpCisgZW5kaWYKKworLWlmbmVxICgsJChmaWx0ZXIgLm9TLCQob2JqZWN0LXN1ZmZpeGVzLSQobGliKSkpKQorLSQob2JqcGZ4KSQocGF0c3Vic3QgJSwkKGxpYnR5cGUub1MpLCQobGliOmxpYiU9JSkpOiBcCistICAkKHBhdHN1YnN0ICUsJChvYmpwZngpJS5vUyxcCisraWZuZXEgKCwkKGZpbHRlciAub1NULCQob2JqZWN0LXN1ZmZpeGVzLSQobGliKSkpKQorKyQob2JqcGZ4KSQocGF0c3Vic3QgJSwkKGxpYnR5cGUub1NUKSwkKGxpYjpsaWIlPSUpKTogXAorKyAgJChwYXRzdWJzdCAlLCQob2JqcGZ4KSUub1NULFwKKyAJICAgICAkKGZpbHRlciAkKCQobGliKS1zdGF0aWMtb25seS1yb3V0aW5lcyksXAorIAkJICAgICAgJChhbGwtJChsaWIpLXJvdXRpbmVzKSkpCisgCSQoYnVpbGQtZXh0cmEtbGliKQorZGlmZiAtYXVyIGdsaWJjLTIuMy41L25wdGwvTWFrZWZpbGUgZ2xpYmMtMi4zLjUtY3lnd2luL25wdGwvTWFrZWZpbGUKKy0tLSBnbGliYy0yLjMuNS9ucHRsL01ha2VmaWxlCTIwMDUtMDItMTYgMDk6NDU6NTYuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4zLjUtY3lnd2luL25wdGwvTWFrZWZpbGUJMjAwNS0wNS0xMSAwODoyNjowMS44MTI1MDAwMDAgKzAyMDAKK0BAIC0zNzUsNyArMzc1LDcgQEAKKworICQoaW5zdF9saWJkaXIpL2xpYnB0aHJlYWQuc286ICQoY29tbW9uLW9ianBmeClmb3JtYXQubGRzIFwKKyAJCQkgICAgICAkKG9ianBmeClsaWJwdGhyZWFkLnNvJChsaWJwdGhyZWFkLnNvLXZlcnNpb24pIFwKKy0JCQkgICAgICAkKGluc3RfbGliZGlyKS8kKHBhdHN1YnN0ICUsJChsaWJ0eXBlLm9TKSxcCisrCQkJICAgICAgJChpbnN0X2xpYmRpcikvJChwYXRzdWJzdCAlLCQobGlidHlwZS5vU1QpLFwKKyAJCQkJCQkJJChsaWJwcmVmaXgpcHRocmVhZCkgXAorIAkJCSAgICAgICQoK2ZvcmNlKQorIAkoZWNobyAnLyogR05VIGxkIHNjcmlwdCc7XAorQEAgLTM4Myw3ICszODMsNyBAQAorIAkgZWNobyAnICAgdGhlIHN0YXRpYyBsaWJyYXJ5LCBzbyB0cnkgdGhhdCBzZWNvbmRhcmlseS4gICovJztcCisgCSBjYXQgJDw7IFwKKyAJIGVjaG8gJ0dST1VQICggJChzbGliZGlyKS9saWJwdGhyZWFkLnNvJChsaWJwdGhyZWFkLnNvLXZlcnNpb24pJyBcCistCSAgICAgICckKGxpYmRpcikvJChwYXRzdWJzdCAlLCQobGlidHlwZS5vUyksJChsaWJwcmVmaXgpcHRocmVhZCknXAorKwkgICAgICAnJChsaWJkaXIpLyQocGF0c3Vic3QgJSwkKGxpYnR5cGUub1NUKSwkKGxpYnByZWZpeClwdGhyZWFkKSdcCisgCSAgICAgICcpJyBcCisgCSkgPiAkQC5uZXcKKyAJbXYgLWYgJEAubmV3ICRACitkaWZmIC1hdXIgZ2xpYmMtMi4zLjUvc3lzZGVwcy9zcGFyYy9zcGFyYzMyL3NwYXJjdjkvTWFrZWZpbGUgZ2xpYmMtMi4zLjUtY3lnd2luL3N5c2RlcHMvc3BhcmMvc3BhcmMzMi9zcGFyY3Y5L01ha2VmaWxlCistLS0gZ2xpYmMtMi4zLjUvc3lzZGVwcy9zcGFyYy9zcGFyYzMyL3NwYXJjdjkvTWFrZWZpbGUJMjAwNC0wOC0xNiAwODo0NjoxNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjMuNS1jeWd3aW4vc3lzZGVwcy9zcGFyYy9zcGFyYzMyL3NwYXJjdjkvTWFrZWZpbGUJMjAwNS0wNS0xMSAwODoyNjoyNS45Mzc1MDAwMDAgKzAyMDAKK0BAIC0xMCw0ICsxMCw0IEBACisgQVNGTEFHUy0ub3AgKz0gLVdhLC1BdjlhCisgQVNGTEFHUy0ub2cgKz0gLVdhLC1BdjlhCisgQVNGTEFHUy0ub2IgKz0gLVdhLC1BdjlhCistQVNGTEFHUy0ub1MgKz0gLVdhLC1BdjlhCisrQVNGTEFHUy0ub1NUICs9IC1XYSwtQXY5YQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNy8xMTAtY29uZmlndXJlLWFwcGxlLWFzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNy8xMTAtY29uZmlndXJlLWFwcGxlLWFzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NGE1ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi43LzExMC1jb25maWd1cmUtYXBwbGUtYXMucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAoraHR0cDovL2luM3d3dy5lcGZsLmNoL35zY2hhZmZuZS9nbGliYy1jb25maWd1cmUtYXBwbGUtYXMucGF0Y2gKK2h0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vbWwvY3Jvc3NnY2MvMjAwNC0wMi9tc2cwMDE1MS5odG1sCisKK1RoZSBmb2xsb3dpbmcgbWFrZXMgaXQgcG9zc2libGUgdG8gY29uZmlndXJlIGdsaWJjLTIuMy4yIG9uIE1hYyBPUyBYLAord2hlcmUgdGhlIGFzc2VtYmxlciBidXQgZG9lc24ndCB1bmRlcnN0YW5kIHRoZSAtLXZlcnNpb24gZmxhZy4KKworRml4ZXMgdGhlIHN5bXB0b20KK2NoZWNraW5nIHdoZXRoZXIgbGQgaXMgR05VIGxkLi4uIG5vCitjaGVja2luZyBmb3IgL3Vzci9saWJleGVjL2djYy9kYXJ3aW4vcHBjL2FzLi4uIC91c3IvbGliZXhlYy9nY2MvZGFyd2luL3BwYy9hcworY2hlY2tpbmcgdmVyc2lvbiBvZiAvdXNyL2xpYmV4ZWMvZ2NjL2Rhcndpbi9wcGMvYXMuLi4KKzxQQVVTRVMgSEVSRSBBTkQgSlVTVCBTSVRTIFRIRVJFIERPSU5HIE5PVEhJTkc+CisKK05PVEU6ICBUaGlzIHBhdGNoIHNob3VsZCBhcHBhcmVudGx5IGJlIHB1c2hlZCB1cHN0cmVhbSBzbyB3ZSBkb24ndCBuZWVkIHRvCitrZWVwIGFkZGluZyBpdCBoZXJlLgorCistLS0gZ2xpYmMtMi4zLjIvY29uZmlndXJlfglXZWQgRmViIDI2IDA5OjIwOjQ4IDIwMDMKKysrKyBnbGliYy0yLjMuMi9jb25maWd1cmUJRnJpIEZlYiAyNyAxMzoxMjo1MyAyMDA0CitAQCAtNDUyNCw3ICs0NTI0LDcgQEAKKyAgICMgRm91bmQgaXQsIG5vdyBjaGVjayB0aGUgdmVyc2lvbi4KKyAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHZlcnNpb24gb2YgJEFTIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nIHZlcnNpb24gb2YgJEFTLi4uICRFQ0hPX0MiID4mNjsgfQorLSAgYWNfcHJvZ192ZXJzaW9uPWAkQVMgLS12ZXJzaW9uIDI+JjEgfCBzZWQgLW4gJ3MvXi4qR05VIGFzc2VtYmxlci4qIFwoWzAtOV0qXC5bMC05Ll0qXCkuKiQvXDEvcCdgCisrICBhY19wcm9nX3ZlcnNpb249YCRBUyAtdiA8L2Rldi9udWxsIDI+JjEgfCBzZWQgLW4gJ3MvXi4qR05VIGFzc2VtYmxlci4qIFwoWzAtOV0qXC5bMC05Ll0qXCkuKiQvXDEvcCdgCisgICBjYXNlICRhY19wcm9nX3ZlcnNpb24gaW4KKyAgICAgJycpIGFjX3Byb2dfdmVyc2lvbj0idi4gPy4/PywgYmFkIjsgYWNfdmVyY19mYWlsPXllczs7CisgICAgIDIuMVszLTldKikKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjcvMTIwLWZpeC1wcjYzMS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjcvMTIwLWZpeC1wcjYzMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTU0OWZkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNy8xMjAtZml4LXByNjMxLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0Zyb20gZGFua0BrZWdlbC5jb20KK1dlZCBKdW4gMTUgMDk6MTI6NDMgUERUIDIwMDUKKworRml4ZXMKKworYnVpbGQtZ2xpYmMvbGliYy5hKG5zc3dpdGNoLm8pKC5kYXRhKzB4NjQpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfbnNzX2ZpbGVzX2dldGFsaWFzZW50X3InCitidWlsZC1nbGliYy9saWJjLmEobnNzd2l0Y2gubykoLmRhdGErMHg2Yyk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9uc3NfZmlsZXNfZW5kYWxpYXNlbnQnCisuLi4gNTMgbGluZXMgZGVsZXRlZCAuLi4KK2J1aWxkLWdsaWJjL2xpYmMuYShuc3N3aXRjaC5vKSguZGF0YSsweDIxYyk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9uc3NfZmlsZXNfZ2V0c3BuYW1fcicKK2NvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCittYWtlWzJdOiAqKiogWy9idWlsZC9nY2MtMy40LjMtZ2xpYmMtMi4zLjUtaGRycy0yLjYuMTEuMi9pNjg2LXVua25vd24tbGludXgtZ251L2J1aWxkLWdsaWJjL2VsZi9sZGNvbmZpZ10gRXJyb3IgMQorCit3aGVuIGJ1aWxkaW5nIGdsaWJjIHdpdGggLS1lbmFibGUtc3RhdGljLW5zcy4KKworU2VlIGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTYzMQorCistLS0gZ2xpYmMtMi4zLjUvTWFrZWNvbmZpZy5vbGQJV2VkIEp1biAxNSAwODoxMzoxMiAyMDA1CisrKysgZ2xpYmMtMi4zLjUvTWFrZWNvbmZpZwlXZWQgSnVuIDE1IDA4OjEzOjE0IDIwMDUKK0BAIC01MDgsNyArNTA4LDcgQEAKKworICMgVGhlIHN0YXRpYyBsaWJyYXJpZXMuCisgaWZlcSAoeWVzLCQoYnVpbGQtc3RhdGljKSkKKy1saW5rLWxpYmMtc3RhdGljID0gJChjb21tb24tb2JqcGZ4KWxpYmMuYSAkKHN0YXRpYy1nbnVsaWIpICQoY29tbW9uLW9ianBmeClsaWJjLmEKKytsaW5rLWxpYmMtc3RhdGljID0gJChjb21tb24tb2JqcGZ4KWxpYmMuYSAkKHN0YXRpYy1nbnVsaWIpICQob3RoZXJsaWJzKSAkKGNvbW1vbi1vYmpwZngpbGliYy5hCisgZWxzZQorIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgIyBXZSBjYW4gdHJ5IHRvIGxpbmsgdGhlIHByb2dyYW1zIHdpdGggbGliKl9waWMuYS4uLgorLS0tIGdsaWJjLTIuMy41L2VsZi9NYWtlZmlsZS5vbGQJV2VkIEp1biAxNSAwNzo0Njo0OSAyMDA1CisrKysgZ2xpYmMtMi4zLjUvZWxmL01ha2VmaWxlCVdlZCBKdW4gMTUgMDg6MTQ6MDAgMjAwNQorQEAgLTEyMCw2ICsxMjAsMTMgQEAKKyBpbnN0YWxsLWJpbi1zY3JpcHQgPSBsZGQKKyBlbmRpZgorCisraWZlcSAoeWVzLCQoYnVpbGQtc3RhdGljLW5zcykpCisrbnNzb2JqZGlyIDo9ICQocGF0c3Vic3QgLi4vJChzdWJkaXIpLC4sJChjb21tb24tb2JqcGZ4KW5zcykKKytyZXNvbHZvYmpkaXIgOj0gJChwYXRzdWJzdCAuLi8kKHN1YmRpciksLiwkKGNvbW1vbi1vYmpwZngpcmVzb2x2KQorK290aGVybGlicyArPSAkKG5zc29iamRpcikvbGlibnNzX2ZpbGVzLmEgJChyZXNvbHZvYmpkaXIpL2xpYm5zc19kbnMuYSBcCisrCSAgICAgJChyZXNvbHZvYmpkaXIpL2xpYnJlc29sdi5hCisrZW5kaWYKKysKKyBvdGhlcnMJCT0gc3Byb2Ygc2xuCisgaW5zdGFsbC1iaW4JPSBzcHJvZgorIG90aGVycy1zdGF0aWMgICA9IHNsbgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNy8xMzAtaTY4Ni1hc3NlbWJsZXIucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi43LzEzMC1pNjg2LWFzc2VtYmxlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWM4NzU0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNy8xMzAtaTY4Ni1hc3NlbWJsZXIucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorSWYgZ2NjIGlzIGNvbmZpZ3VyZWQgdG8gZ2VuZXJhdGUgaTY4NiBjb2RlIG9yIGJldHRlciBieSBkZWZhdWx0IChsaWtlCit3aGVuIHVzaW5nIHRoZSAtLXdpdGgtYXJjaD1wZW50aXVtMyBjb25maWd1cmUgb3B0aW9uKSwgdGhlbiB0aGUgX19pNjg2CittYWNybyB3aWxsIGFsd2F5cyBiZSBkZWZpbmVkIGF1dG9tYXRpY2FsbHkgYW5kIHRodXMgc2NyZXcgdXAgdGhlCitjb21waWxhdGlvbiBvZiBzb21lIC5TIGZpbGVzLgorCitodHRwOi8vYnVncy5nZW50b28ub3JnLzEzMTEwOAoraHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2xpYmMtYWxwaGEvMjAwNi0wNC9tc2cwMDA5MC5odG1sCisKKzIwMDYtMDQtMjUgIE1pa2UgRnJ5c2luZ2VyICA8dmFwaWVyQGdlbnRvby5vcmc+CisKKwkqIHN5c2RlcHMvaTM4Ni9zeXNkZXAuaCAoX19pNjg2KTogVW5kZWZpbmUuCisKK0luZGV4OiBnbGliYy0yLjQvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdsaWJjLTIuNC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L3N5c2RlcC5oCShyZXZpc2lvbiAxNDY5KQorKysrIGdsaWJjLTIuNC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L3N5c2RlcC5oCSh3b3JraW5nIGNvcHkpCitAQCAtMjksNiArMjksMTAgQEAKKyAjaW5jbHVkZSA8ZGwtc3lzZGVwLmg+CisgI2luY2x1ZGUgPHRscy5oPgorCisrI2lmIGRlZmluZWQgX19pNjg2ICYmIGRlZmluZWQgX19BU1NFTUJMRVJfXworKyN1bmRlZiBfX2k2ODYKKysjZGVmaW5lIF9faTY4NiBfX2k2ODYKKysjZW5kaWYKKworIC8qIEZvciBMaW51eCB3ZSBjYW4gdXNlIHRoZSBzeXN0ZW0gY2FsbCB0YWJsZSBpbiB0aGUgaGVhZGVyIGZpbGUKKyAJL3Vzci9pbmNsdWRlL2FzbS91bmlzdGQuaAorSW5kZXg6IGdsaWJjLTIuNC9ucHRsL3N5c2RlcHMvcHRocmVhZC9wdC1pbml0ZmluaS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2xpYmMtMi40L25wdGwvc3lzZGVwcy9wdGhyZWFkL3B0LWluaXRmaW5pLmMJKHJldmlzaW9uIDE0NjkpCisrKysgZ2xpYmMtMi40L25wdGwvc3lzZGVwcy9wdGhyZWFkL3B0LWluaXRmaW5pLmMJKHdvcmtpbmcgY29weSkKK0BAIC00NSw2ICs0NSwxMSBAQAorIC8qIEVtYmVkIGFuICNpbmNsdWRlIHRvIHB1bGwgaW4gdGhlIGFsaWdubWVudCBhbmQgLmVuZCBkaXJlY3RpdmVzLiAqLworIGFzbSAoIlxuI2luY2x1ZGUgXCJkZWZzLmhcIiIpOworCisrYXNtICgiXG4jaWYgZGVmaW5lZCBfX2k2ODYgJiYgZGVmaW5lZCBfX0FTU0VNQkxFUl9fIik7CisrYXNtICgiXG4jdW5kZWYgX19pNjg2Iik7CisrYXNtICgiXG4jZGVmaW5lIF9faTY4NiBfX2k2ODYiKTsKKythc20gKCJcbiNlbmRpZiIpOworKworIC8qIFRoZSBpbml0aWFsIGNvbW1vbiBjb2RlIGVuZHMgaGVyZS4gKi8KKyBhc20gKCJcbi8qQEhFQURFUl9FTkRTKi8iKTsKKwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNy8xNDAtaTM4Ni1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnkucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi43LzE0MC1pMzg2LXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDk4MjFkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNy8xNDAtaTM4Ni1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnkucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorKEMpIDIwMDcgWWFubiBFLiBNT1JJTiA8eWFubi5tb3Jpbi4xOTk4QGFuY2llbnMuZW5pYi5mcj4KK0xpY2Vuc2U6IExHUEwgdjIuMQorCitTaHV0IG9mZiBhIHN0dXBpZCB3YXJuaW5nOiBwcmVmZmVyZWQtc3RhY2stYm91bmRhcnkgbXVzdCBiZSBiZXR3ZWVuIDQgYWQgMTIsCithbmQgMiBpcyBub3QuCisKK2RpZmYgLWR1ciBnbGliYy0yLjUub3JpZy9zeXNkZXBzL2kzODYvTWFrZWZpbGUgZ2xpYmMtMi41L3N5c2RlcHMvaTM4Ni9NYWtlZmlsZQorLS0tIGdsaWJjLTIuNS5vcmlnL3N5c2RlcHMvaTM4Ni9NYWtlZmlsZQkyMDA1LTAzLTA2IDAxOjE4OjE2LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuNS9zeXNkZXBzL2kzODYvTWFrZWZpbGUJMjAwNy0wNS0yNyAxNzo0OTozNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zNiw3ICszNiw3IEBACisgaWZlcSAoJChzdWJkaXIpLGNzdSkKKyBzeXNkZXAtQ0ZMQUdTICs9IC1tcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5PTQKKyBlbHNlCistc3lzZGVwLUNGTEFHUyArPSAtbXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeT0yCisrc3lzZGVwLUNGTEFHUyArPSAtbXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeT00CisgIyBMaWtld2lzZSwgYW55IGZ1bmN0aW9uIHdoaWNoIGNhbGxzIHVzZXIgY2FsbGJhY2tzCisgdXNlcy1jYWxsYmFja3MgKz0gLW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9NAorICMgTGlrZXdpc2UsIGFueSBzdGFjayBhbGlnbm1lbnQgdGVzdHMKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjcvMTUwLWFscGhhLWFzbV9wYWdlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNy8xNTAtYWxwaGEtYXNtX3BhZ2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE5OGIzNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjcvMTUwLWFscGhhLWFzbV9wYWdlLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKKzIwMDgtMDYtMDcgIE1pa2UgRnJ5c2luZ2VyICA8dmFwaWVyQGdlbnRvby5vcmc+CisKKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5cy91c2VyLmg6IENvcHkgcGFnZS5oIGRlZmluaXRpb25zCisJZnJvbSB0aGUga2VybmVsIGhlYWRlciB0byBzeXMvdXNlci5oIGFuZCByZW1vdmUgdGhlICNpbmNsdWRlIG9mCisJc3lzL3VzZXIuaC4KKworLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzL3VzZXIuaAorKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzL3VzZXIuaAorQEAgLTIzLDcgKzIzLDYgQEAKKyAgICBvbmx5LiBEb24ndCByZWFkIHRvbyBtdWNoIGludG8gaXQuIERvbid0IHVzZSBpdCBmb3IgYW55dGhpbmcgb3RoZXIKKyAgICB0aGFuIGdkYi9zdHJhY2UgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4gKi8KKyAKKy0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyAjaW5jbHVkZSA8YXNtL3JlZy5oPgorIAorIHN0cnVjdCB1c2VyCitAQCAtNDEsNiArNDAsOSBAQCBzdHJ1Y3QgdXNlcgorICAgY2hhciB1X2NvbW1bMzJdOwkJCQkvKiB1c2VyIGNvbW1hbmQgbmFtZSAqLworIH07CisgCisrI2RlZmluZSBQQUdFX1NISUZUCQkxMworKyNkZWZpbmUgUEFHRV9TSVpFCQkoMSA8PCBQQUdFX1NISUZUKQorKyNkZWZpbmUgUEFHRV9NQVNLCQkofihQQUdFX1NJWkUtMSkpCisgI2RlZmluZSBOQlBHCQkJUEFHRV9TSVpFCisgI2RlZmluZSBVUEFHRVMJCQkxCisgI2RlZmluZSBIT1NUX1RFWFRfU1RBUlRfQUREUgkodS5zdGFydF9jb2RlKQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNy8xNjAtYnVpbGRfd2NzX3VwcGVyX2J1ZmZlci5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjcvMTYwLWJ1aWxkX3djc191cHBlcl9idWZmZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJjZGU5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjcvMTYwLWJ1aWxkX3djc191cHBlcl9idWZmZXIucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorTWF0dGhpYXMgS2FlaGxja2UgPG1hdHRoaWFzIGF0IGthZWhsY2tlIGRvdCBuZXQ+IHdyaXRlczoKKworQSBjb21waWxhdGlvbiBvZiBhbiBBUk0gdG9vbGNoYWluIHdpdGggZ2xpYmMgMi43IHVzaW5nIGNyb3NzdG9vbC1uZworZmFpbGVkIHdpdGggYSBnY2MgZXJyb3IgaW4gZ2xpYmMtMi43L3Bvc2l4L3JlZ2V4X2ludGVybmFsLmMsIG1vcmUKK2NvbmNyZXRseSBpbiB0aGUgZnVuY3Rpb24gYnVpbGRfd2NzX3VwcGVyX2J1ZmZlcigpLiBUaGUgcmV0dXJuIHR5cGUgb2YKK3RoZSBmdW5jdGlvbiBwcm90b3R5cGUgaW4gcmVnZXhfaW50ZXJuYWwuaCBkb2Vzbid0IGNvcnJlc3BvbmQgd2l0aCB0aGUKK3JldHVybiB0eXBlIG9mIHRoaXMgZnVuY3Rpb24gaW4gcmVnZXhfaW50ZXJuYWwuYy4KKworVGhlIGF0dGFjaGVkIHBhdGNoIGNvcnJlY3RzIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24gcHJvdG90eXBlCitpbiByZWdleF9pbnRlcm5hbC5oCisKKy0tLSBnbGliYy0yLjcvcG9zaXgvcmVnZXhfaW50ZXJuYWwuaC5vcmcJMjAwOC0wNS0zMCAxMToxNjowMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjcvcG9zaXgvcmVnZXhfaW50ZXJuYWwuaAkyMDA4LTA1LTMwIDExOjE2OjM1LjAwMDAwMDAwMCArMDIwMAorQEAgLTM5MSw3ICszOTEsNyBAQAorICAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisgIyBpZmRlZiBSRV9FTkFCTEVfSTE4TgorIHN0YXRpYyB2b2lkIGJ1aWxkX3djc19idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKSBpbnRlcm5hbF9mdW5jdGlvbjsKKy1zdGF0aWMgaW50IGJ1aWxkX3djc191cHBlcl9idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKSBpbnRlcm5hbF9mdW5jdGlvbjsKKytzdGF0aWMgcmVnX2VycmNvZGVfdCBidWlsZF93Y3NfdXBwZXJfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikgaW50ZXJuYWxfZnVuY3Rpb247CisgIyBlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworIHN0YXRpYyB2b2lkIGJ1aWxkX3VwcGVyX2J1ZmZlciAocmVfc3RyaW5nX3QgKnBzdHIpIGludGVybmFsX2Z1bmN0aW9uOworIHN0YXRpYyB2b2lkIHJlX3N0cmluZ190cmFuc2xhdGVfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikgaW50ZXJuYWxfZnVuY3Rpb247CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi43LzE3MC11c2Vfc2hvcnRfZm9yX2Zuc3Rzdy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjcvMTcwLXVzZV9zaG9ydF9mb3JfZm5zdHN3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMmY4ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi43LzE3MC11c2Vfc2hvcnRfZm9yX2Zuc3Rzdy5wYXRjaApAQCAtMCwwICsxLDE4IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIEguSi4gTHUsIGFzIHJlcG9ydGVkIHRoZXJlOgoraHR0cDovL3d3dy5uYWJibGUuY29tL1BBVENIOi1Vc2Utc2hvcnQtZm9yLWZuc3Rzdy10ZDE0Nzc1MTcxLmh0bWwKKworZm5zdHN3IHN0b3JlcyAxNmJpdCBpbnRvICVheC4gVGhlIHVwcGVyIDE2Yml0IG9mICVlYXggaXMgdW5jaGFuZ2VkLgorVGhlIG5ldyBhc3NlbWJsZXIgKGJpbnV0aWxzLTIuMTguNTAuMC40IGFuZCB1cCkgd2lsbCBkaXNhbGxvdyAiZm5zdHN3ICVlYXgiLgorCitkaWZmIC1kdXIgZ2xpYmMtMi43Lm9yaWcvc3lzZGVwcy9pMzg2L2ZwdS9mdGVzdGV4Y2VwdC5jIGdsaWJjLTIuNy9zeXNkZXBzL2kzODYvZnB1L2Z0ZXN0ZXhjZXB0LmMKKy0tLSBnbGliYy0yLjcub3JpZy9zeXNkZXBzL2kzODYvZnB1L2Z0ZXN0ZXhjZXB0LmMJMjAwNC0wMy0wNSAxMToxNDo0OC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjcvc3lzZGVwcy9pMzg2L2ZwdS9mdGVzdGV4Y2VwdC5jCTIwMDgtMDYtMjQgMTA6NTQ6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtMjYsNyArMjYsNyBAQAorIGludAorIGZldGVzdGV4Y2VwdCAoaW50IGV4Y2VwdHMpCisgeworLSAgaW50IHRlbXA7CisrICBzaG9ydCB0ZW1wOworICAgaW50IHh0ZW1wID0gMDsKKyAKKyAgIC8qIEdldCBjdXJyZW50IGV4Y2VwdGlvbnMuICAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNy8xODAtZ2NjLTQuMy1zeXNpbmNsdWRlLXBhdGgucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi43LzE4MC1nY2MtNC4zLXN5c2luY2x1ZGUtcGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWYwOWE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNy8xODAtZ2NjLTQuMy1zeXNpbmNsdWRlLXBhdGgucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorUGF0Y2ggcG9pbnRlZCB0byBieSBSeWFuIEFSTk9MRCBvbiB0aGUgbGliYy1oZWxwIE1MLgorU2VlOiBodHRwOi8vc291cmNld2FyZS5vcmcvbWwvbGliYy1oZWxwLzIwMDgtMDYvbXNnMDAwNjMuaHRtbAorCitGb3J3YXJkZWQgdG8gY3Jvc3N0b29sLU5HIGJ5IElvYW5uaXMgRS4gVkVORVRJUzoKK1NlZTogaHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2xpYmMtaGVscC8yMDA4LTA2L21zZzAwMDYzLmh0bWwKKworR0NDIDQuMyBjaGFuZ2VkIHRoZSBsb2NhdGlvbiBvZiBzb21lIG9mIHRoZSBoZWFkZXIgZmlsZXMuICBJIGRvbid0Cit1bmRlcnN0YW5kIHdoeSB5b3UnZCBiZSBnZXR0aW5nIHRoZXNlIGVycm9ycyB3aGlsZSBidWlsZGluZyBHQ0Mgc2luY2UKK2l0IHByb3ZpZGVzIHRoZW0uCisKK1dpdGggcmVnYXJkIHRvIEdMSUJDLCBSb2xhbmQgY2hlY2tlZCBpbiBzb21lIGNoYW5nZXMgc28gdGhhdCB0aGUgR0xJQkMKK2J1aWxkIHN5c3RlbSBjb3VsZCBmaW5kIHRoZSBuZXcgbG9jYXRpb25zIG9mIHRoZSBHQ0MgcHJvdmlkZWQgaGVhZGVyCitmaWxlcy4KKworZGlmZiAtZHVyTiBnbGliYy0yLjcub3JpZy9jb25maWd1cmUuaW4gZ2xpYmMtMi43L2NvbmZpZ3VyZS5pbgorLS0tIGdsaWJjLTIuNy5vcmlnL2NvbmZpZ3VyZS5pbgkyMDA3LTA2LTA4IDA1OjE2OjM2LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuNy9jb25maWd1cmUuaW4JMjAwOC0wNi0yNCAxODozODo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC05MTEsOCArOTExLDEyIEBACisgIyBoZWFkZXIgZGlyZWN0b3J5IGFuZCBhZGQgdGhhdCB0byB0aGUgbGlzdC4gIE5PVEU6IE9ubHkgZG9lcyB0aGUgcmlnaHQKKyAjIHRoaW5nIG9uIGEgc3lzdGVtIHRoYXQgZG9lc24ndCBuZWVkIGZpeGluY2x1ZGVzLiAgKE5vdCBwcmVzZW50bHkgYSBwcm9ibGVtLikKKyBpZiB0ZXN0IC1uICIkc3lzaGVhZGVycyI7IHRoZW4KKy0gIGNjaGVhZGVycz1gJENDIC1wcmludC1maWxlLW5hbWU9aW5jbHVkZWAKKy0gIFNZU0lOQ0xVREVTPSItbm9zdGRpbmMgLWlzeXN0ZW0gJGNjaGVhZGVycyBcCisrICBTWVNJTkNMVURFUz0tbm9zdGRpbmMKKysgIGZvciBkIGluIGluY2x1ZGUgaW5jbHVkZS1maXhlZDsgZG8KKysgICAgaT1gJENDIC1wcmludC1maWxlLW5hbWU9IiRkImAgJiYgdGVzdCAieCRpIiAhPSB4ICYmIHRlc3QgIngkaSIgIT0gIngkZCIgJiYKKysgICAgU1lTSU5DTFVERVM9IiRTWVNJTkNMVURFUyAtaXN5c3RlbSAkaSIKKysgIGRvbmUKKysgIFNZU0lOQ0xVREVTPSIkU1lTSU5DTFVERVMgXAorIC1pc3lzdGVtIGBlY2hvICRzeXNoZWFkZXJzIHwgc2VkICdzLzovIC1pc3lzdGVtIC9nJ2AiCisgICBpZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgorICAgICBjeHh2ZXJzaW9uPWAkQ1hYIC1kdW1wdmVyc2lvbiAyPiZBU19NRVNTQUdFX0xPR19GRGAgJiYKK2RpZmYgLWR1ck4gZ2xpYmMtMi43Lm9yaWcvY29uZmlndXJlIGdsaWJjLTIuNy9jb25maWd1cmUKKy0tLSBnbGliYy0yLjcub3JpZy9jb25maWd1cmUJMjAwOC0wNi0yNCAxODozNTozNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjcvY29uZmlndXJlCTIwMDgtMDYtMjQgMTg6Mzg6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtNTA2Miw4ICs1MDYyLDEyIEBACisgIyBoZWFkZXIgZGlyZWN0b3J5IGFuZCBhZGQgdGhhdCB0byB0aGUgbGlzdC4gIE5PVEU6IE9ubHkgZG9lcyB0aGUgcmlnaHQKKyAjIHRoaW5nIG9uIGEgc3lzdGVtIHRoYXQgZG9lc24ndCBuZWVkIGZpeGluY2x1ZGVzLiAgKE5vdCBwcmVzZW50bHkgYSBwcm9ibGVtLikKKyBpZiB0ZXN0IC1uICIkc3lzaGVhZGVycyI7IHRoZW4KKy0gIGNjaGVhZGVycz1gJENDIC1wcmludC1maWxlLW5hbWU9aW5jbHVkZWAKKy0gIFNZU0lOQ0xVREVTPSItbm9zdGRpbmMgLWlzeXN0ZW0gJGNjaGVhZGVycyBcCisrICBTWVNJTkNMVURFUz0tbm9zdGRpbmMKKysgIGZvciBkIGluIGluY2x1ZGUgaW5jbHVkZS1maXhlZDsgZG8KKysgICAgaT1gJENDIC1wcmludC1maWxlLW5hbWU9IiRkImAgJiYgdGVzdCAieCRpIiAhPSAieCRkIiAmJgorKyAgICBTWVNJTkNMVURFUz0iJFNZU0lOQ0xVREVTIC1pc3lzdGVtICRpIgorKyAgZG9uZQorKyAgU1lTSU5DTFVERVM9IiRTWVNJTkNMVURFUyBcCisgLWlzeXN0ZW0gYGVjaG8gJHN5c2hlYWRlcnMgfCBzZWQgJ3MvOi8gLWlzeXN0ZW0gL2cnYCIKKyAgIGlmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCisgICAgIGN4eHZlcnNpb249YCRDWFggLWR1bXB2ZXJzaW9uIDI+JjVgICYmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi43LzE5MC1hbHBoYS1hc21fZWxmLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNy8xOTAtYWxwaGEtYXNtX2VsZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWQ3MDllCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNy8xOTAtYWxwaGEtYXNtX2VsZi5wYXRjaApAQCAtMCwwICsxLDE3MSBAQAorc2luY2UgdGhlIGtlcm5lbCBubyBsb25nZXIgcHJvdmlkZXMgYXNtL2VsZi5oLCB0aGUgc3lzL3Byb2Nmcy5oIGZyb20gdGhlIAorY29tbW9uIGNvZGUsIGFscGhhLCBhbmQgc2ggZmFpbCB3aGVuIHVzZWQuICB0aGlzIHNob3VsZCB0aGluZ3MgdXAuCistbWlrZQorCisyMDA4LTA2LTA3ICBNaWtlIEZyeXNpbmdlciAgPHZhcGllckBnZW50b28ub3JnPgorCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zeXMvcHJvY2ZzLmg6IFJlcGxhY2Ugd2l0aCAjZXJyb3Igc3R1Yi4KKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5cy9wcm9jZnMuaDogQ29weSBzb21lIGFzbS9lbGYuaAorCWRlZmluaXRpb25zIGZyb20gdGhlIGtlcm5lbCBoZWFkZXIgdG8gc3lzL3Byb2Nmcy5oIGFuZCByZW1vdmUgdGhlCisJI2luY2x1ZGUgb2YgYXNtL2VsZi5oLgorCSogc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzL3Byb2Nmcy5oOiBMaWtld2lzZS4KKworKkF0dGFjaG1lbnQ6IHNpZ25hdHVyZS5hc2MgPG1zZzAwMDEyL3NpZ25hdHVyZS5hc2M+KgorL0Rlc2NyaXB0aW9uOi8gVGhpcyBpcyBhIGRpZ2l0YWxseSBzaWduZWQgbWVzc2FnZSBwYXJ0LgorCisyMDA4LTA2LTA3ICBNaWtlIEZyeXNpbmdlciAgPHZhcGllckBnZW50b28ub3JnPgorCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zeXMvcHJvY2ZzLmg6IFJlcGxhY2Ugd2l0aCAjZXJyb3Igc3R1Yi4KKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5cy9wcm9jZnMuaDogQ29weSBzb21lIGFzbS9lbGYuaAorCWRlZmluaXRpb25zIGZyb20gdGhlIGtlcm5lbCBoZWFkZXIgdG8gc3lzL3Byb2Nmcy5oIGFuZCByZW1vdmUgdGhlCisJI2luY2x1ZGUgb2YgYXNtL2VsZi5oLgorCSogc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzL3Byb2Nmcy5oOiBMaWtld2lzZS4KKworLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzL3Byb2Nmcy5oCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXMvcHJvY2ZzLmgKK0BAIC0yOSwxMCArMjksMjMgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy91Y29udGV4dC5oPgorICNpbmNsdWRlIDxzeXMvdXNlci5oPgorLSNpbmNsdWRlIDxhc20vZWxmLmg+CisgCisgX19CRUdJTl9ERUNMUworIAorKy8qCisrICogVGhlIE9TRi8xIHZlcnNpb24gb2YgPHN5cy9wcm9jZnMuaD4gbWFrZXMgZ3JlZ3NldF90IDQ2IGVudHJpZXMgbG9uZy4KKysgKiBJIGhhdmUgbm8gaWRlYSB3aHkgdGhhdCBpcyBzby4gIEZvciBub3csIHdlIGp1c3QgbGVhdmUgaXQgYXQgMzMKKysgKiAoMzIgZ2VuZXJhbCByZWdzICsgcHJvY2Vzc29yIHN0YXR1cyB3b3JkKS4KKysgKi8KKysjZGVmaW5lIEVMRl9OR1JFRyAgMzMKKysjZGVmaW5lIEVMRl9ORlBSRUcgMzIKKysKKyt0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZWxmX2dyZWdfdDsKKyt0eXBlZGVmIGVsZl9ncmVnX3QgZWxmX2dyZWdzZXRfdFtFTEZfTkdSRUddOworKworK3R5cGVkZWYgZG91YmxlIGVsZl9mcHJlZ190OworK3R5cGVkZWYgZWxmX2ZwcmVnX3QgZWxmX2ZwcmVnc2V0X3RbRUxGX05GUFJFR107CisrCisgc3RydWN0IGVsZl9zaWdpbmZvCisgICB7CisgICAgIGludCBzaV9zaWdubzsJCQkvKiBTaWduYWwgbnVtYmVyLiAgKi8KKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5cy9wcm9jZnMuaAorKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc3lzL3Byb2Nmcy5oCitAQCAtMSwxMTUgKzEsMiBAQAorLS8qIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0gICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKy0KKy0gICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKy0gICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCistICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCistICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCistICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKy0gICAwMjExMS0xMzA3IFVTQS4gICovCistCistI2lmbmRlZiBfU1lTX1BST0NGU19ICistI2RlZmluZSBfU1lTX1BST0NGU19ICTEKKy0KKy0vKiBUaGlzIGlzIHNvbWVob3cgbW9kZWxsZWQgYWZ0ZXIgdGhlIGZpbGUgb2YgdGhlIHNhbWUgbmFtZSBvbiBTeXNWcjQKKy0gICBzeXN0ZW1zLiAgSXQgcHJvdmlkZXMgYSBkZWZpbml0aW9uIG9mIHRoZSBjb3JlIGZpbGUgZm9ybWF0IGZvciBFTEYKKy0gICB1c2VkIG9uIExpbnV4LiAgKi8KKy0KKy0jaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKy0jaW5jbHVkZSA8c2lnbmFsLmg+CistI2luY2x1ZGUgPHN5cy90aW1lLmg+CistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNpbmNsdWRlIDxzeXMvdWNvbnRleHQuaD4KKy0jaW5jbHVkZSA8c3lzL3VzZXIuaD4KKy0jaW5jbHVkZSA8YXNtL2VsZi5oPgorLQorLV9fQkVHSU5fREVDTFMKKy0KKy1zdHJ1Y3QgZWxmX3NpZ2luZm8KKy0gIHsKKy0gICAgaW50IHNpX3NpZ25vOwkJCS8qIFNpZ25hbCBudW1iZXIuICAqLworLSAgICBpbnQgc2lfY29kZTsJCQkvKiBFeHRyYSBjb2RlLiAgKi8KKy0gICAgaW50IHNpX2Vycm5vOwkJCS8qIEVycm5vLiAgKi8KKy0gIH07CistCistLyogRGVmaW5pdGlvbnMgdG8gZ2VuZXJhdGUgSW50ZWwgU1ZSNC1saWtlIGNvcmUgZmlsZXMuICBUaGVzZSBtb3N0bHkKKy0gICBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRoZSBTVlI0IHR5cGVzIHdpdGggImVsZl8iIHRhY2tlZCBvbiB0aGUKKy0gICBmcm9udCB0byBwcmV2ZW50IGNsYXNoZXMgd2l0aCBsaW51eCBkZWZpbml0aW9ucywgYW5kIHRoZSB0eXBlZGVmCistICAgZm9ybXMgaGF2ZSBiZWVuIGF2b2lkZWQuICBUaGlzIGlzIG1vc3RseSBsaWtlIHRoZSBTVlI0IHN0cnVjdHVyZSwKKy0gICBidXQgbW9yZSBMaW51eHksIHdpdGggdGhpbmdzIHRoYXQgTGludXggZG9lcyBub3Qgc3VwcG9ydCBhbmQgd2hpY2gKKy0gICBnZGIgZG9lc24ndCByZWFsbHkgdXNlIGV4Y2x1ZGVkLiAgRmllbGRzIHByZXNlbnQgYnV0IG5vdCB1c2VkIGFyZQorLSAgIG1hcmtlZCB3aXRoICJYWFgiLiAgKi8KKy1zdHJ1Y3QgZWxmX3Byc3RhdHVzCistICB7CistI2lmIDAKKy0gICAgbG9uZyBpbnQgcHJfZmxhZ3M7CQkJLyogWFhYIFByb2Nlc3MgZmxhZ3MuICAqLworLSAgICBzaG9ydCBpbnQgcHJfd2h5OwkJCS8qIFhYWCBSZWFzb24gZm9yIHByb2Nlc3MgaGFsdC4gICovCistICAgIHNob3J0IGludCBwcl93aGF0OwkJCS8qIFhYWCBNb3JlIGRldGFpbGVkIHJlYXNvbi4gICovCistI2VuZGlmCistICAgIHN0cnVjdCBlbGZfc2lnaW5mbyBwcl9pbmZvOwkJLyogSW5mbyBhc3NvY2lhdGVkIHdpdGggc2lnbmFsLiAgKi8KKy0gICAgc2hvcnQgaW50IHByX2N1cnNpZzsJCS8qIEN1cnJlbnQgc2lnbmFsLiAgKi8KKy0gICAgdW5zaWduZWQgbG9uZyBpbnQgcHJfc2lncGVuZDsJLyogU2V0IG9mIHBlbmRpbmcgc2lnbmFscy4gICovCistICAgIHVuc2lnbmVkIGxvbmcgaW50IHByX3NpZ2hvbGQ7CS8qIFNldCBvZiBoZWxkIHNpZ25hbHMuICAqLworLSNpZiAwCistICAgIHN0cnVjdCBzaWdhbHRzdGFjayBwcl9hbHRzdGFjazsJLyogQWx0ZXJuYXRlIHN0YWNrIGluZm8uICAqLworLSAgICBzdHJ1Y3Qgc2lnYWN0aW9uIHByX2FjdGlvbjsJCS8qIFNpZ25hbCBhY3Rpb24gZm9yIGN1cnJlbnQgc2lnLiAgKi8KKy0jZW5kaWYKKy0gICAgX19waWRfdCBwcl9waWQ7CistICAgIF9fcGlkX3QgcHJfcHBpZDsKKy0gICAgX19waWRfdCBwcl9wZ3JwOworLSAgICBfX3BpZF90IHByX3NpZDsKKy0gICAgc3RydWN0IHRpbWV2YWwgcHJfdXRpbWU7CQkvKiBVc2VyIHRpbWUuICAqLworLSAgICBzdHJ1Y3QgdGltZXZhbCBwcl9zdGltZTsJCS8qIFN5c3RlbSB0aW1lLiAgKi8KKy0gICAgc3RydWN0IHRpbWV2YWwgcHJfY3V0aW1lOwkJLyogQ3VtdWxhdGl2ZSB1c2VyIHRpbWUuICAqLworLSAgICBzdHJ1Y3QgdGltZXZhbCBwcl9jc3RpbWU7CQkvKiBDdW11bGF0aXZlIHN5c3RlbSB0aW1lLiAgKi8KKy0jaWYgMAorLSAgICBsb25nIGludCBwcl9pbnN0cjsJCQkvKiBDdXJyZW50IGluc3RydWN0aW9uLiAgKi8KKy0jZW5kaWYKKy0gICAgZWxmX2dyZWdzZXRfdCBwcl9yZWc7CQkvKiBHUCByZWdpc3RlcnMuICAqLworLSAgICBpbnQgcHJfZnB2YWxpZDsJCQkvKiBUcnVlIGlmIG1hdGggY29wcm8gYmVpbmcgdXNlZC4gICovCistICB9OworLQorLQorLSNkZWZpbmUgRUxGX1BSQVJHU1ogICAgICg4MCkgICAgLyogTnVtYmVyIG9mIGNoYXJzIGZvciBhcmdzICovCistCistc3RydWN0IGVsZl9wcnBzaW5mbworLSAgeworLSAgICBjaGFyIHByX3N0YXRlOwkJCS8qIE51bWVyaWMgcHJvY2VzcyBzdGF0ZS4gICovCistICAgIGNoYXIgcHJfc25hbWU7CQkJLyogQ2hhciBmb3IgcHJfc3RhdGUuICAqLworLSAgICBjaGFyIHByX3pvbWI7CQkJLyogWm9tYmllLiAgKi8KKy0gICAgY2hhciBwcl9uaWNlOwkJCS8qIE5pY2UgdmFsLiAgKi8KKy0gICAgdW5zaWduZWQgbG9uZyBpbnQgcHJfZmxhZzsJCS8qIEZsYWdzLiAgKi8KKy0gICAgdW5zaWduZWQgc2hvcnQgaW50IHByX3VpZDsKKy0gICAgdW5zaWduZWQgc2hvcnQgaW50IHByX2dpZDsKKy0gICAgaW50IHByX3BpZCwgcHJfcHBpZCwgcHJfcGdycCwgcHJfc2lkOworLSAgICAvKiBMb3RzIG1pc3NpbmcgKi8KKy0gICAgY2hhciBwcl9mbmFtZVsxNl07CQkJLyogRmlsZW5hbWUgb2YgZXhlY3V0YWJsZS4gICovCistICAgIGNoYXIgcHJfcHNhcmdzW0VMRl9QUkFSR1NaXTsJLyogSW5pdGlhbCBwYXJ0IG9mIGFyZyBsaXN0LiAgKi8KKy0gIH07CistCistLyogQWRkcmVzc2VzLiAgKi8KKy10eXBlZGVmIHZvaWQgKnBzYWRkcl90OworLQorLS8qIFJlZ2lzdGVyIHNldHMuICBMaW51eCBoYXMgZGlmZmVyZW50IG5hbWVzLiAgKi8KKy10eXBlZGVmIGdyZWdzZXRfdCBwcmdyZWdzZXRfdDsKKy10eXBlZGVmIGZwcmVnc2V0X3QgcHJmcHJlZ3NldF90OworLQorLS8qIFdlIGRvbid0IGhhdmUgYW55IGRpZmZlcmVuY2VzIGJldHdlZW4gcHJvY2Vzc2VzIGFuZCB0aHJlYWRzLAorLSAgIHRoZXJlZm9yZSBoYWJlIG9ubHkgaW5lIFBJRCB0eXBlLiAgKi8KKy10eXBlZGVmIF9fcGlkX3QgbHdwaWRfdDsKKy0KKy0KKy10eXBlZGVmIHN0cnVjdCBlbGZfcHJzdGF0dXMgcHJzdGF0dXNfdDsKKy10eXBlZGVmIHN0cnVjdCBlbGZfcHJwc2luZm8gcHJwc2luZm9fdDsKKy0KKy1fX0VORF9ERUNMUworLQorLSNlbmRpZgkvKiBzeXMvcHJvY2ZzLmggKi8KKysvKiBzeXMvcHJvY2ZzLmggaXMgYXJjaGl0ZWN0dXJlIHNwZWNpZmljLiAgKi8KKysjZXJyb3IgIlRoaXMgZmlsZSBtdXN0IGJlIHN1cHBsaWVkIGJ5IGV2ZXJ5IExpbnV4IGFyY2hpdGVjdHVyZS4iCisKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjcvMjAwLWFscGhhLWF0ZmN0cy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjcvMjAwLWFscGhhLWF0ZmN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmM3ZDhmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNy8yMDAtYWxwaGEtYXRmY3RzLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKKy0tLSBnbGliYy0yLjcvc3lzZGVwcy91bml4L3N5c3YvbGludXgva2VybmVsLWZlYXR1cmVzLmgJMjAwNy0wOC0xNCAwNjoyMTowOS4wMDAwMDAwMDAgKzAzMDAKKysrKyBnbGliYy0yLjcvc3lzZGVwcy91bml4L3N5c3YvbGludXgva2VybmVsLWZlYXR1cmVzLmgubmV3CTIwMDgtMDctMjMgMDc6MDU6MjAuMDAwMDAwMDAwICswMzAwCitAQCAtNDQ5LDggKzQ0OSw3IEBACisgICAgYW5kIG9uIEFscGhhIGp1c3QgYWZ0ZXIgMi42LjIyLXJjMS4gICovCisgI2lmIF9fTElOVVhfS0VSTkVMX1ZFUlNJT04gPj0gMHgwMjA2MTEgXAorICAgICAmJiAoKCFkZWZpbmVkIF9fc2hfXyAmJiAhZGVmaW5lZCBfX2FscGhhX18pIFwKKy0JfHwgKF9fTElOVVhfS0VSTkVMX1ZFUlNJT04gPj0gMHgwMjA2MTMgJiYgZGVmaW5lZCBfX3NoX18pIFwKKy0JfHwgKF9fTElOVVhfS0VSTkVMX1ZFUlNJT04gPj0gMHgwMjA2MTcgJiYgZGVmaW5lZCBfX2FscGhhX18pKQorKwl8fCAoX19MSU5VWF9LRVJORUxfVkVSU0lPTiA+PSAweDAyMDYxMyAmJiBkZWZpbmVkIF9fc2hfXykpCisgIyBkZWZpbmUgX19BU1NVTUVfQVRGQ1RTCTEKKyAjZW5kaWYKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjcvMjEwLWFscGhhLXB0cl9tYW5nbGUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi43LzIxMC1hbHBoYS1wdHJfbWFuZ2xlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMjI4MzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi43LzIxMC1hbHBoYS1wdHJfbWFuZ2xlLnBhdGNoCkBAIC0wLDAgKzEsOTQgQEAKKy0tLSBnbGliYy0yLjcub3JpZy9zeXNkZXBzL3VuaXgvYWxwaGEvc3lzZGVwLmgKKysrKyBnbGliYy0yLjcvc3lzZGVwcy91bml4L2FscGhhL3N5c2RlcC5oCitAQCAtMzk3LDQyICszOTcsNCBAQAorIAlfc2NfcmV0ID0gX3NjXzAsIF9zY19lcnIgPSBfc2NfMTk7CQkJXAorIH0KKyAKKy0vKiBQb2ludGVyIG1hbmdsaW5nIHN1cHBvcnQuICBOb3RlIHRoYXQgdGxzIGFjY2VzcyBpcyBzbG93IGVub3VnaCB0aGF0CistICAgd2UgZG9uJ3QgZGVvcHRpbWl6ZSB0aGluZ3MgYnkgcGxhY2luZyB0aGUgcG9pbnRlciBjaGVjayB2YWx1ZSB0aGVyZS4gICovCistCistI2luY2x1ZGUgPHN0ZGludC5oPgorLQorLSNpZiBkZWZpbmVkIE5PVF9JTl9saWJjICYmIGRlZmluZWQgSVNfSU5fcnRsZAorLSMgaWZkZWYgX19BU1NFTUJMRVJfXworLSMgIGRlZmluZSBQVFJfTUFOR0xFKGRzdCwgc3JjLCB0bXApCQkJCVwKKy0JbGRhaAl0bXAsIF9fcG9pbnRlcl9jaGtfZ3VhcmRfbG9jYWwoJDI5KSAhZ3ByZWxoaWdoOwlcCistCWxkcQl0bXAsIF9fcG9pbnRlcl9jaGtfZ3VhcmRfbG9jYWwodG1wKSAhZ3ByZWxsb3c7CVwKKy0JeG9yCXNyYywgdG1wLCBkc3QKKy0jICBkZWZpbmUgUFRSX01BTkdMRTIoZHN0LCBzcmMsIHRtcCkJCQkJXAorLQl4b3IJc3JjLCB0bXAsIGRzdAorLSMgIGRlZmluZSBQVFJfREVNQU5HTEUoZHN0LCB0bXApICAgUFRSX01BTkdMRShkc3QsIGRzdCwgdG1wKQorLSMgIGRlZmluZSBQVFJfREVNQU5HTEUyKGRzdCwgdG1wKSAgUFRSX01BTkdMRTIoZHN0LCBkc3QsIHRtcCkKKy0jIGVsc2UKKy1leHRlcm4gdWludHB0cl90IF9fcG9pbnRlcl9jaGtfZ3VhcmRfbG9jYWwgYXR0cmlidXRlX3JlbHJvIGF0dHJpYnV0ZV9oaWRkZW47CistIyAgZGVmaW5lIFBUUl9NQU5HTEUodmFyKQlcCistICAodmFyKSA9IChfX3R5cGVvZiAodmFyKSkgKCh1aW50cHRyX3QpICh2YXIpIF4gX19wb2ludGVyX2Noa19ndWFyZF9sb2NhbCkKKy0jICBkZWZpbmUgUFRSX0RFTUFOR0xFKHZhcikgIFBUUl9NQU5HTEUodmFyKQorLSMgZW5kaWYKKy0jZWxpZiBkZWZpbmVkIFBJQworLSMgaWZkZWYgX19BU1NFTUJMRVJfXworLSMgIGRlZmluZSBQVFJfTUFOR0xFKGRzdCwgc3JjLCB0bXApCQlcCistCWxkcQl0bXAsIF9fcG9pbnRlcl9jaGtfZ3VhcmQ7CVwKKy0JeG9yCXNyYywgdG1wLCBkc3QKKy0jICBkZWZpbmUgUFRSX01BTkdMRTIoZHN0LCBzcmMsIHRtcCkJCVwKKy0JeG9yCXNyYywgdG1wLCBkc3QKKy0jICBkZWZpbmUgUFRSX0RFTUFOR0xFKGRzdCwgdG1wKSAgIFBUUl9NQU5HTEUoZHN0LCBkc3QsIHRtcCkKKy0jICBkZWZpbmUgUFRSX0RFTUFOR0xFMihkc3QsIHRtcCkgIFBUUl9NQU5HTEUyKGRzdCwgZHN0LCB0bXApCistIyBlbHNlCistZXh0ZXJuIHVpbnRwdHJfdCBfX3BvaW50ZXJfY2hrX2d1YXJkIGF0dHJpYnV0ZV9yZWxybzsKKy0jICBkZWZpbmUgUFRSX01BTkdMRSh2YXIpCVwKKy0JKHZhcikgPSAodm9pZCAqKSAoKHVpbnRwdHJfdCkgKHZhcikgXiBfX3BvaW50ZXJfY2hrX2d1YXJkKQorLSMgIGRlZmluZSBQVFJfREVNQU5HTEUodmFyKSAgUFRSX01BTkdMRSh2YXIpCistIyBlbmRpZgorLSNlbmRpZgorLQorICNlbmRpZiAvKiBBU1NFTUJMRVIgKi8KKy0tLSBnbGliYy0yLjcub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXNkZXAuaAorKysrIGdsaWJjLTIuNy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXNkZXAuaAorQEAgLTk4LDQgKzk4LDQ2IEBACisgCUlOVEVSTkFMX1NZU0NBTEwxKG5hbWUsIGVycl9vdXQsIG5yLCBhcmdzKTsJCQlcCisgfSkKKyAKKysvKiBQb2ludGVyIG1hbmdsaW5nIHN1cHBvcnQuICBOb3RlIHRoYXQgdGxzIGFjY2VzcyBpcyBzbG93IGVub3VnaCB0aGF0CisrICAgd2UgZG9uJ3QgZGVvcHRpbWl6ZSB0aGluZ3MgYnkgcGxhY2luZyB0aGUgcG9pbnRlciBjaGVjayB2YWx1ZSB0aGVyZS4gICovCisrCisrI2lmIGRlZmluZWQgTk9UX0lOX2xpYmMgJiYgZGVmaW5lZCBJU19JTl9ydGxkCisrIyBpZmRlZiBfX0FTU0VNQkxFUl9fCisrIyAgZGVmaW5lIFBUUl9NQU5HTEUoZHN0LCBzcmMsIHRtcCkJCQkJXAorKwlsZGFoCXRtcCwgX19wb2ludGVyX2Noa19ndWFyZF9sb2NhbCgkMjkpICFncHJlbGhpZ2g7CVwKKysJbGRxCXRtcCwgX19wb2ludGVyX2Noa19ndWFyZF9sb2NhbCh0bXApICFncHJlbGxvdzsJXAorKwl4b3IJc3JjLCB0bXAsIGRzdAorKyMgIGRlZmluZSBQVFJfTUFOR0xFMihkc3QsIHNyYywgdG1wKQkJCQlcCisrCXhvcglzcmMsIHRtcCwgZHN0CisrIyAgZGVmaW5lIFBUUl9ERU1BTkdMRShkc3QsIHRtcCkgICBQVFJfTUFOR0xFKGRzdCwgZHN0LCB0bXApCisrIyAgZGVmaW5lIFBUUl9ERU1BTkdMRTIoZHN0LCB0bXApICBQVFJfTUFOR0xFMihkc3QsIGRzdCwgdG1wKQorKyMgZWxzZQorK2V4dGVybiB1aW50cHRyX3QgX19wb2ludGVyX2Noa19ndWFyZF9sb2NhbCBhdHRyaWJ1dGVfcmVscm8gYXR0cmlidXRlX2hpZGRlbjsKKysjICBkZWZpbmUgUFRSX01BTkdMRSh2YXIpCVwKKysgICh2YXIpID0gKF9fdHlwZW9mICh2YXIpKSAoKHVpbnRwdHJfdCkgKHZhcikgXiBfX3BvaW50ZXJfY2hrX2d1YXJkX2xvY2FsKQorKyMgIGRlZmluZSBQVFJfREVNQU5HTEUodmFyKSAgUFRSX01BTkdMRSh2YXIpCisrIyBlbmRpZgorKyNlbGlmIGRlZmluZWQgUElDCisrIyBpZmRlZiBfX0FTU0VNQkxFUl9fCisrIyAgZGVmaW5lIFBUUl9NQU5HTEUoZHN0LCBzcmMsIHRtcCkJCVwKKysJbGRxCXRtcCwgX19wb2ludGVyX2Noa19ndWFyZDsJXAorKwl4b3IJc3JjLCB0bXAsIGRzdAorKyMgIGRlZmluZSBQVFJfTUFOR0xFMihkc3QsIHNyYywgdG1wKQkJXAorKwl4b3IJc3JjLCB0bXAsIGRzdAorKyMgIGRlZmluZSBQVFJfREVNQU5HTEUoZHN0LCB0bXApICAgUFRSX01BTkdMRShkc3QsIGRzdCwgdG1wKQorKyMgIGRlZmluZSBQVFJfREVNQU5HTEUyKGRzdCwgdG1wKSAgUFRSX01BTkdMRTIoZHN0LCBkc3QsIHRtcCkKKysjIGVsc2UKKytleHRlcm4gdWludHB0cl90IF9fcG9pbnRlcl9jaGtfZ3VhcmQgYXR0cmlidXRlX3JlbHJvOworKyMgIGRlZmluZSBQVFJfTUFOR0xFKHZhcikJXAorKwkodmFyKSA9ICh2b2lkICopICgodWludHB0cl90KSAodmFyKSBeIF9fcG9pbnRlcl9jaGtfZ3VhcmQpCisrIyAgZGVmaW5lIFBUUl9ERU1BTkdMRSh2YXIpICBQVFJfTUFOR0xFKHZhcikKKysjIGVuZGlmCisrI2Vsc2UKKysvKiBQb2ludGVyIG1hbmdsaW5nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciBzdGF0aWMgbGliYyBvbiBhbHBoYS4gICovCisrIyBpZm5kZWYgX19BU1NFTUJMRVJfXworKyMgIGRlZmluZSBQVFJfTUFOR0xFKHZhcikgICAodm9pZCkgKHZhcikKKysjICBkZWZpbmUgUFRSX0RFTUFOR0xFKHZhcikgKHZvaWQpICh2YXIpCisrIyBlbmRpZgorKyNlbmRpZgorKworICNlbmRpZiAvKiBfTElOVVhfQUxQSEFfU1lTREVQX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjcvMjIwLW9iamR1bXBfZm9yX2hvc3QucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi43LzIyMC1vYmpkdW1wX2Zvcl9ob3N0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MzBiYzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi43LzIyMC1vYmpkdW1wX2Zvcl9ob3N0LnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK2RpZmYgLWR1ck4gZ2xpYmMtMi43Lm9yaWcvTWFrZXJ1bGVzIGdsaWJjLTIuNy9NYWtlcnVsZXMKKy0tLSBnbGliYy0yLjcub3JpZy9NYWtlcnVsZXMJMjAwNy0wOC0yNiAwNDoxODowMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjcvTWFrZXJ1bGVzCTIwMDgtMDctMjggMTU6MTc6MjcuMDAwMDAwMDAwICswMjAwCitAQCAtMTIwMyw2ICsxMjAzLDkgQEAKKyAjIFRoZSBpbmNsdWRlIG1hZ2ljIGFib3ZlIGNhdXNlcyB0aG9zZSBmaWxlcyB0byB1c2UgdGhpcyB2YXJpYWJsZSBmb3IgZmxhZ3MuCisgQ1BQRkxBR1Mtbm9ubGliID0gLUROT1RfSU5fbGliYz0xCisgCisraWZuZXEgKCQoT0JKRFVNUF9GT1JfSE9TVCksKQorK09CSkRVTVAgPSAkKE9CSkRVTVBfRk9SX0hPU1QpCisrZW5kaWYKKyAKKyBpZmVxICgkKHZlcnNpb25pbmcpLHllcykKKyAjIEdlbmVyYXRlIG5vcm1hbGl6ZWQgbGlzdHMgb2Ygc3ltYm9scywgdmVyc2lvbnMsIGFuZCBkYXRhIHNpemVzLgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNy8yMzAtcG93ZXJwYy1wcml2YXRlX2Z1dGV4LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNy8yMzAtcG93ZXJwYy1wcml2YXRlX2Z1dGV4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMTY1MjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi43LzIzMC1wb3dlcnBjLXByaXZhdGVfZnV0ZXgucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorMjAwOC0wNC0yOCAgSGlyb2tpIEthbWluYWdhICA8a2FtaW5hZ2FAc20uc29ueS5jby5qcD4KKworCVtCWiA2NzQwXQorCW5wdGwvc3lzZGVwcy9wb3dlcnBjL3RjYi1vZmZzZXRzLnN5bSAoUFJJVkFURV9GVVRFWF9PRkZTRVQpOgorCUd1YXJkIHN5bSBkZWZpbml0aW9uIHdpdGggI2lmbmRlZiBfX0FTU1VNRV9QUklWQVRFX0ZVVEVYLgorCistLS0gYS9ucHRsL3N5c2RlcHMvcG93ZXJwYy90Y2Itb2Zmc2V0cy5zeW0KKysrKyBiL25wdGwvc3lzZGVwcy9wb3dlcnBjL3RjYi1vZmZzZXRzLnN5bQorQEAgLTE1LDQgKzE1LDYgQEAKKyBQSUQJCQkJdGhyZWFkX29mZnNldG9mIChwaWQpCisgVElECQkJCXRocmVhZF9vZmZzZXRvZiAodGlkKQorIFBPSU5URVJfR1VBUkQJCQkob2Zmc2V0b2YgKHRjYmhlYWRfdCwgcG9pbnRlcl9ndWFyZCkgLSBUTFNfVENCX09GRlNFVCAtIHNpemVvZiAodGNiaGVhZF90KSkKKysjaWZuZGVmIF9fQVNTVU1FX1BSSVZBVEVfRlVURVgKKyBQUklWQVRFX0ZVVEVYX09GRlNFVAkJdGhyZWFkX29mZnNldG9mIChoZWFkZXIucHJpdmF0ZV9mdXRleCkKKysjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjcvMjQwLXNoLWxvd2xldmVsbG9jay1hc20ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi43LzI0MC1zaC1sb3dsZXZlbGxvY2stYXNtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYzAzOTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi43LzI0MC1zaC1sb3dsZXZlbGxvY2stYXNtLnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKKy0tLSBnbGliYy0yLjcvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9sb3dsZXZlbGxvY2suUy5vcmlnCTIwMDctMDgtMDMgMTY6NDQ6MTUuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi43L25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvbG93bGV2ZWxsb2NrLlMJMjAwOC0wOC0xOSAyMTowODoxOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC03Niw3ICs3Niw3IEBACisgCWFkZAl0bXAyLCB0bXAgCTsgXAorIAltb3YubAlAdG1wLCB0bXAyCTsgXAorIAlicmEJOThmCQk7IFwKKy0JIG1vdgkjRlVURVhfUFJJVkFURV9GTEFHLCB0bXAKKysJIG1vdgkjRlVURVhfUFJJVkFURV9GTEFHLCB0bXAgOyBcCisgOTk6CS53b3JkCVBSSVZBVEVfRlVURVggLSBUTFNfUFJFX1RDQl9TSVpFIDsgXAorIDk4OglleHR1LmIJdG1wLCB0bXAJOyBcCisgCXhvcgl0bXAsIHJlZwk7IFwKK0BAIC04OCw3ICs4OCw3IEBACisgCWFkZAl0bXAyLCB0bXAgCTsgXAorIAltb3YubAlAdG1wLCB0bXAyCTsgXAorIAlicmEJOThmCQk7IFwKKy0JIG1vdgkjRlVURVhfUFJJVkFURV9GTEFHLCB0bXAKKysJIG1vdgkjRlVURVhfUFJJVkFURV9GTEFHLCB0bXAgOyBcCisgOTk6CS53b3JkCVBSSVZBVEVfRlVURVggLSBUTFNfUFJFX1RDQl9TSVpFIDsgXAorIDk4OglleHR1LmIJdG1wLCB0bXAJOyBcCisgCXhvcgl0bXAsIHJlZwk7IFwKK0BAIC05NiwxMyArOTYsMTMgQEAKKyAJbW92CSNGVVRFWF9XQUlULCB0bXAgOyBcCisgCW9yCXRtcCwgcmVnCisgIyBlbmRpZgorLSMgZGVmaW5lIExPQURfRlVURVhfV0FLRShyZWcsdG1wKSBcCisrIyBkZWZpbmUgTE9BRF9GVVRFWF9XQUtFKHJlZyx0bXAsdG1wMikgXAorIAlzdGMJZ2JyLCB0bXAJOyBcCisgCW1vdi53CTk5ZiwgdG1wMgk7IFwKKyAJYWRkCXRtcDIsIHRtcCAJOyBcCisgCW1vdi5sCUB0bXAsIHRtcDIJOyBcCisgCWJyYQk5OGYJCTsgXAorLQkgbW92CSNGVVRFWF9QUklWQVRFX0ZMQUcsIHRtcAorKwkgbW92CSNGVVRFWF9QUklWQVRFX0ZMQUcsIHRtcCA7IFwKKyA5OToJLndvcmQJUFJJVkFURV9GVVRFWCAtIFRMU19QUkVfVENCX1NJWkUgOyBcCisgOTg6CWV4dHUuYgl0bXAsIHRtcAk7IFwKKyAJeG9yCXRtcCwgcmVnCTsgXAorLS0tIGdsaWJjLTIuNy9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL2xvd2xldmVscm9idXN0bG9jay5TLm9yaWcJMjAwNy0wOC0wMyAxNjo0NDo1Ny4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjcvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9sb3dsZXZlbHJvYnVzdGxvY2suUwkyMDA4LTA4LTE5IDIxOjA4OjIyLjAwMDAwMDAwMCArMDEwMAorQEAgLTQyLDcgKzQyLDcgQEAKKyAJYWRkCXRtcDIsIHRtcCAJOyBcCisgCW1vdi5sCUB0bXAsIHRtcDIJOyBcCisgCWJyYQk5OGYJCTsgXAorLQkgbW92CSNGVVRFWF9QUklWQVRFX0ZMQUcsIHRtcAorKwkgbW92CSNGVVRFWF9QUklWQVRFX0ZMQUcsIHRtcCA7IFwKKyA5OToJLndvcmQJUFJJVkFURV9GVVRFWCAtIFRMU19QUkVfVENCX1NJWkUgOyBcCisgOTg6CWV4dHUuYgl0bXAsIHRtcAk7IFwKKyAJeG9yCXRtcCwgcmVnCTsgXAorQEAgLTU0LDcgKzU0LDcgQEAKKyAJYWRkCXRtcDIsIHRtcCAJOyBcCisgCW1vdi5sCUB0bXAsIHRtcDIJOyBcCisgCWJyYQk5OGYJCTsgXAorLQkgbW92CSNGVVRFWF9QUklWQVRFX0ZMQUcsIHRtcAorKwkgbW92CSNGVVRFWF9QUklWQVRFX0ZMQUcsIHRtcCA7IFwKKyA5OToJLndvcmQJUFJJVkFURV9GVVRFWCAtIFRMU19QUkVfVENCX1NJWkUgOyBcCisgOTg6CWV4dHUuYgl0bXAsIHRtcAk7IFwKKyAJeG9yCXRtcCwgcmVnCTsgXApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNy8yNTAtc2gtY2hvcC1saW51eC12ZXJzaW9uLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNy8yNTAtc2gtY2hvcC1saW51eC12ZXJzaW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMDA2MmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi43LzI1MC1zaC1jaG9wLWxpbnV4LXZlcnNpb24ucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorLS0tIGdsaWJjLTIuNy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9kbC1vc2luZm8uaC5vcmlnCTIwMDctMDktMTUgMjM6NTQ6MDguMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi43L3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2RsLW9zaW5mby5oCTIwMDgtMDgtMjAgMDk6MjY6MjYuMDAwMDAwMDAwICswMTAwCitAQCAtODMsNiArODMsMTAgQEAKKyAgIGludCBwYXJ0czsKKyAgIGNoYXIgKmNwOworICAgc3RydWN0IHV0c25hbWUgdXRzOworKyAgaW50IGRvdHNmb3VuZCA9IDA7CisrICBpbnQgdmVyc2lvbmluZGV4ID0gMDsKKysgIGNoYXIgKmNob3Bwb2ludDsKKysKKyAKKyAgIC8qIFRyeSB0aGUgdW5hbWUgc3lzdGVtIGNhbGwuICAqLworICAgaWYgKF9fdW5hbWUgKCZ1dHMpKQorQEAgLTEwMiw4ICsxMDYsMzQgQEAKKyAgIGVsc2UKKyAgICAgYnVmID0gdXRzLnJlbGVhc2U7CisgCisrICAvKiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSBmaXJzdCB0aHJlZSBrZXJuZWwgbnVtYmVycywgc28gKi8KKysgIC8qIGNob3Agb2ZmIGFueXRoaW5nIHBhc3QgdGhhdDogKi8KKysKKysgIGNob3Bwb2ludCA9IGJ1ZjsKKysgIHdoaWxlICgxKQorKyAgICB7CisrICAgICAgdmVyc2lvbmluZGV4Kys7CisrICAgICAgaWYgKHZlcnNpb25pbmRleCA9PSA2MykgYnJlYWs7CisrICAgICAgaWYgKCpjaG9wcG9pbnQgPT0gJy4nKSBkb3RzZm91bmQrKzsKKysgICAgICBjaG9wcG9pbnQrKzsKKysgICAgICBpZiAoZG90c2ZvdW5kID09IDIpCisrICAgICAgeworKyAgICAgICAgaWYgKCpjaG9wcG9pbnQgPT0gJzAnIHx8ICpjaG9wcG9pbnQgPT0gJzEnCisrICAgICAgICAgIHx8ICpjaG9wcG9pbnQgPT0gJzInIHx8ICpjaG9wcG9pbnQgPT0gJzMnCisrICAgICAgICAgIHx8ICpjaG9wcG9pbnQgPT0gJzQnIHx8ICpjaG9wcG9pbnQgPT0gJzUnCisrICAgICAgICAgIHx8ICpjaG9wcG9pbnQgPT0gJzYnIHx8ICpjaG9wcG9pbnQgPT0gJzcnCisrICAgICAgICAgIHx8ICpjaG9wcG9pbnQgPT0gJzgnIHx8ICpjaG9wcG9pbnQgPT0gJzknKQorKyAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgeworKyAgICAgICAgICAgICpjaG9wcG9pbnQgPSAwOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICB9CisrICAgICAgfQorKyAgICB9CisrCisgICAvKiBOb3cgY29udmVydCBpdCBpbnRvIGEgbnVtYmVyLiAgVGhlIHN0cmluZyBjb25zaXN0cyBvZiBhdCBtb3N0CistICAgICB0aHJlZSBwYXJ0cy4gICovCisrICAgICB0aHJlZSBwYXJ0cy4gIE5vdyBpdCBkb2VzLCBhbnl3YXkuICA7LSkgICovCisgICB2ZXJzaW9uID0gMDsKKyAgIHBhcnRzID0gMDsKKyAgIGNwID0gYnVmOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNy8yNjAtc2gtc3lzY2FsbC1lcnJvci1wYXRoLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNy8yNjAtc2gtc3lzY2FsbC1lcnJvci1wYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOTNiYmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi43LzI2MC1zaC1zeXNjYWxsLWVycm9yLXBhdGgucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorLS0tIGdsaWJjLTIuNy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXNkZXAuUy5vcmlnCTIwMDUtMTItMzAgMjI6MTY6NDMuMDAwMDAwMDAwICswMDAwCisrKysgZ2xpYmMtMi43L3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5c2RlcC5TCTIwMDgtMDgtMTkgMjI6MzM6MTQuMDAwMDAwMDAwICswMTAwCitAQCAtMzIsMyArMzIsMTMgQEAKKyAKKyAjZGVmaW5lIF9fc3lzY2FsbF9lcnJvciBfX3N5c2NhbGxfZXJyb3JfMQorICNpbmNsdWRlIDxzeXNkZXBzL3VuaXgvc2gvc3lzZGVwLlM+CisrCisrCS5kYXRhCisrCS5hbGlnbiAzCisrCS5nbG9ibCBfX19mcHNjcl92YWx1ZXMKKysJLnR5cGUgX19fZnBzY3JfdmFsdWVzLCBAb2JqZWN0CisrCS5zaXplIF9fX2Zwc2NyX3ZhbHVlcywgOAorK19fX2Zwc2NyX3ZhbHVlczoKKysJLmxvbmcJMAorKwkubG9uZwkweDgwMDAwCisrd2Vha19hbGlhcyAoX19fZnBzY3JfdmFsdWVzLCBfX2Zwc2NyX3ZhbHVlcykKKy0tLSBnbGliYy0yLjcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvVmVyc2lvbnMub3JpZwkyMDAzLTA5LTAxIDA1OjA1OjA5LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuNy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9WZXJzaW9ucwkyMDA4LTA4LTE5IDIyOjMzOjE0LjAwMDAwMDAwMCArMDEwMAorQEAgLTIsNiArMiw3IEBACisgICBHTElCQ18yLjIgeworICAgICAjIGZ1bmN0aW9ucyB1c2VkIGluIG90aGVyIGxpYnJhcmllcworICAgICBfX3hzdGF0NjQ7IF9fZnhzdGF0NjQ7IF9fbHhzdGF0NjQ7CisrICAgIF9fZnBzY3JfdmFsdWVzOworIAorICAgICAjIGEqCisgICAgIGFscGhhc29ydDY0OwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNy8yNzAtc2gtZml4LXByb2Nmcy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjcvMjcwLXNoLWZpeC1wcm9jZnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVmOGJiMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjcvMjcwLXNoLWZpeC1wcm9jZnMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorZGlmZiAtZHVyTiBnbGliYy0yLjcub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXMvcHJvY2ZzLmggZ2xpYmMtMi43L3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5cy9wcm9jZnMuaAorLS0tIGdsaWJjLTIuNy5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5cy9wcm9jZnMuaAkyMDA0LTExLTIwIDE4OjU2OjE2LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuNy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXMvcHJvY2ZzLmgJMjAwOC0xMC0yNCAxMToyMToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yOSwxMCArMjksMzIgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy91Y29udGV4dC5oPgorICNpbmNsdWRlIDxzeXMvdXNlci5oPgorLSNpbmNsdWRlIDxhc20vZWxmLmg+CisgCisgX19CRUdJTl9ERUNMUworIAorKy8qIEJFR0lOIC0gVUdMWSBIQUNLIC0gWUVNCisrICogVGhlc2UgZGVmaW5pdGlvbnMgYXJlIGNvcGllZCBmcm9tIHRoZSBBbHBoYSBmaWxlLAorKyAqIGFuZCB0aGUgcmVnaXN0ZXIgbnVtYmVycyBhcmUgc2V0IGFjY29yZGluZ2x5IHRvCisrICogd2hhdCBJIGNvdWxkIGZpbmQgaW4gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2VzCisrICogSGlnaGx5IGR1YmlvdXMgISEhIQorKyAqIEJJRyBGQVQgV0FSTklORyAhISEKKysgKi8KKysKKysvKiBMaW51eCBrZXJuZWwgc2F5cyAxNiAoc3RhbmRhcmRzPykgcmVnaXN0ZXJzICovCisrI2RlZmluZSBFTEZfTkdSRUcgIDE2CisrLyogTGludXgga2VybmVsIHNheXMgMTYgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzICovCisrI2RlZmluZSBFTEZfTkZQUkVHIDE2CisrCisrLyogQ29waWVkIGZyb20gQWxwaGEgYXMgaXMgKi8KKyt0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZWxmX2dyZWdfdDsKKyt0eXBlZGVmIGVsZl9ncmVnX3QgZWxmX2dyZWdzZXRfdFtFTEZfTkdSRUddOworKworKy8qIERpdHRvICovCisrdHlwZWRlZiBkb3VibGUgZWxmX2ZwcmVnX3Q7CisrdHlwZWRlZiBlbGZfZnByZWdfdCBlbGZfZnByZWdzZXRfdFtFTEZfTkZQUkVHXTsKKysKKysvKiBFTkQgLSBVR0xZIEhBQ0sgLSBZRU0gKi8KKysKKyBzdHJ1Y3QgZWxmX3NpZ2luZm8KKyAgIHsKKyAgICAgaW50IHNpX3NpZ25vOwkJCS8qIFNpZ25hbCBudW1iZXIuICAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNy8yODAtc2gtZml4LWtlcm5lbC1oZWFkZXJzLWxvY2F0aW9uLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuNy8yODAtc2gtZml4LWtlcm5lbC1oZWFkZXJzLWxvY2F0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNWNhYTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi43LzI4MC1zaC1maXgta2VybmVsLWhlYWRlcnMtbG9jYXRpb24ucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorZGlmZiAtZHVyTiBnbGliYy0yLjcub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXMvcHJvY2ZzLmggZ2xpYmMtMi43L3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5cy9wcm9jZnMuaAorLS0tIGdsaWJjLTIuNy5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5cy9wcm9jZnMuaAkyMDA4LTEwLTIyIDIxOjIzOjMyLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuNy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXMvcHJvY2ZzLmgJMjAwOC0xMC0yMiAyMTo0MTo1NC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yOSw2ICsyOSw3IEBACisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvdWNvbnRleHQuaD4KKyAjaW5jbHVkZSA8c3lzL3VzZXIuaD4KKysjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorIAorIF9fQkVHSU5fREVDTFMKKyAKK2RpZmYgLWR1ck4gZ2xpYmMtMi43Lm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzL3VzZXIuaCBnbGliYy0yLjcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzL3VzZXIuaAorLS0tIGdsaWJjLTIuNy5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5cy91c2VyLmgJMjAwOC0xMC0yMiAyMToyMzozMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzL3VzZXIuaAkyMDA4LTEwLTIyIDIxOjMzOjM0LjAwMDAwMDAwMCArMDIwMAorQEAgLTIxLDggKzIxLDYgQEAKKyAKKyAjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyAKKy0jaW5jbHVkZSA8YXNtL3VzZXIuaD4KKy0KKyAjdW5kZWYgc3RhcnRfdGhyZWFkCisgCisgI2VuZGlmICAvKiBzeXMvdXNlci5oICovCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi43LzI5MC1wb3dlcnBjLTh4eC1DUFUxNS1lcnJhdGEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi43LzI5MC1wb3dlcnBjLTh4eC1DUFUxNS1lcnJhdGEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQwNjQzYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjcvMjkwLXBvd2VycGMtOHh4LUNQVTE1LWVycmF0YS5wYXRjaApAQCAtMCwwICsxLDU2IEBACitGaXggbWVtc2V0IG9uIFBvd2VyUEMgOHh4LCBieSBOeWUgTGl1OgoraHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2Nyb3NzZ2NjLzIwMDgtMTAvbXNnMDAwNjcuaHRtbAorCitRdW90ZToKKyBJIGFtIHdvcmtpbmcgb24gYSBwb3dlcnBjIDg2MCB0b29sY2hhaW4sIGJ1dCBJIGFtIGhhdmluZyBwcm9ibGVtcyAgCisgY29udmluY2luZyBnbGliYyB0byBub3QgZW1pdCBjb2RlIHRoYXQgdXNlcyB0aGUgZGNieiBpbnN0cnVjdGlvbiAoQ1BVMTUgIAorIGRjYlggYnVnKS4gVGhlIHNvdXJjZSBvZiB0aGUgcHJvYmxlbSBpcyBzeXNkZXBzL3Bvd2VycGMvcG93ZXIzL21lbXNldC5TCisKKy0tLSBnbGliYy0yLjcvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9tZW1zZXQuUwkyMDA3LTAzLTI2IDEzOjA5OjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGdsaWJjLTIuNy9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL21lbXNldC5TLm5ldwkyMDA4LTEwLTIzIDIwOjI4OjUyLjAwMDAwMDAwMCAtMDcwMAorQEAgLTExMiwxMSArMTEyLDEzIEBACisgCWNscnJ3aS4JckFMSUdOLCByTEVOLCA1CisgCW10Y3JmCTB4MDEsIHJMRU4JLyogNDB0aCBpbnN0cnVjdGlvbiBmcm9tIC5hbGlnbiAqLworIAorKyNpZm5kZWYgQlJPS0VOX1BQQ184eHhfQ1BVMTUKKyAvKiBDaGVjayBpZiB3ZSBjYW4gdXNlIHRoZSBzcGVjaWFsIGNhc2UgZm9yIGNsZWFyaW5nIG1lbW9yeSB1c2luZyBkY2J6LgorICAgIFRoaXMgcmVxdWlyZXMgdGhhdCB3ZSBrbm93IHRoZSBjb3JyZWN0IGNhY2hlIGxpbmUgc2l6ZSBmb3IgdGhpcworICAgIHByb2Nlc3Nvci4gIEdldHRpbmcgdGhlIF9fY2FjaGVfbGluZV9zaXplIG1heSByZXF1aXJlIGVzdGFibGlzaGluZyBHT1QKKyAgICBhZGRyZXNzYWJpbGl0eSwgc28gYnJhbmNoIG91dCBvZiBsaW5lIHRvIHNldCB0aGlzIHVwLiAgKi8KKyAJYmVxCWNyMSwgTChjaGVja2xpbmVzaXplKQorKyNlbmRpZgorIAorIC8qIFN0b3JlIGJsb2NrcyBvZiAzMi1ieXRlcyAoMjU2LWJpdHMpIHN0YXJ0aW5nIG9uIGEgMzItYnl0ZSBib3VuZGFyeS4KKyAgICBDYW4ndCBhc3N1bWUgdGhhdCByQ0hSIGlzIHplcm8gb3IgdGhhdCB0aGUgY2FjaGUgbGluZSBzaXplIGlzIGVpdGhlcgorQEAgLTE1OCw2ICsxNjAsNyBAQAorIAlhZGQJck1FTVAsIHJNRU1QLCByQUxJR04KKyAJYglMKG1lZGl1bV90YWlsMikJLyogNzJuZCBpbnN0cnVjdGlvbiBmcm9tIC5hbGlnbiAqLworIAorKyNpZm5kZWYgQlJPS0VOX1BQQ184eHhfQ1BVMTUKKyAJLmFsaWduCTUKKyAJbm9wCisgLyogQ2xlYXIgY2FjaGUgbGluZXMgb2YgbWVtb3J5IGluIDEyOC1ieXRlIGNodW5rcy4KK0BAIC0xOTEsNiArMTk0LDcgQEAKKyAJYmRueglMKHpsb29wKQorIAliZXFscgljcjUKKyAJYglMKG1lZGl1bV90YWlsMikKKysjZW5kaWYgLyogISBCUk9LRU5fUFBDXzh4eF9DUFUxNSAqLworIAorIAkuYWxpZ24JNQorIEwoc21hbGwpOgorQEAgLTI0OCw2ICsyNTIsNyBAQAorIAlzdHcJckNIUiwgLTgock1FTVApCisgCWJscgorIAorKyNpZm5kZWYgQlJPS0VOX1BQQ184eHhfQ1BVMTUKKyBMKGNoZWNrbGluZXNpemUpOgorICNpZmRlZiBTSEFSRUQKKyAJbWZscglyVE1QCitAQCAtMzI5LDYgKzMzNCw3IEBACisgTChoYW5kbGV0YWlsMzIpOgorIAljbHJyd2kuCXJBTElHTiwgckxFTiwgNQorIAliCUwobm9uZGNieikKKysjZW5kaWYgLyogISBCUk9LRU5fUFBDXzh4eF9DUFUxNSAqLworIAorIEVORCAoQlBfU1lNIChtZW1zZXQpKQorIGxpYmNfaGlkZGVuX2J1aWx0aW5fZGVmIChtZW1zZXQpCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi43LzMwMC1iaW51dGlscy1fYmVnaW4ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi43LzMwMC1iaW51dGlscy1fYmVnaW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY3MGQyOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjcvMzAwLWJpbnV0aWxzLV9iZWdpbi5wYXRjaApAQCAtMCwwICsxLDE5MCBAQAorLS0tIGdsaWJjLTIuNy5PTEQvZWxmL01ha2VmaWxlCTIwMDktMDQtMjIgMTc6MDg6NTUuMDAwMDAwMDAwICswMzAwCisrKysgZ2xpYmMtMi43L2VsZi9NYWtlZmlsZQkyMDA5LTA0LTIyIDE4OjA5OjE4LjAwMDAwMDAwMCArMDMwMAorQEAgLTEsNCArMSw0IEBACistIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIENvcHlyaWdodCAoQykgMTk5NS0yMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisgCisgIyBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK0BAIC0yMyw3ICsyMyw3IEBACisgaGVhZGVycwkJPSBlbGYuaCBiaXRzL2VsZmNsYXNzLmggbGluay5oIGJpdHMvbGluay5oCisgcm91dGluZXMJPSAkKGRsLXJvdXRpbmVzKSBkbC1zdXBwb3J0IGRsLWl0ZXJhdGVwaGRyIFwKKyAJCSAgZGwtYWRkciBlbmJsLXNlY3VyZSBkbC1wcm9mc3R1YiBcCistCQkgIGRsLW9yaWdpbiBkbC1saWJjIGRsLXN5bSBkbC10c2QKKysJCSAgZGwtb3JpZ2luIGRsLWxpYmMgZGwtc3ltIGRsLXRzZCBkbC1zeXNkZXAKKyAKKyAjIFRoZSBjb3JlIGR5bmFtaWMgbGlua2luZyBmdW5jdGlvbnMgYXJlIGluIGxpYmMgZm9yIHRoZSBzdGF0aWMgYW5kCisgIyBwcm9maWxlZCBsaWJyYXJpZXMuCitAQCAtMzMsNyArMzMsOCBAQAorIAkJCQkgIGV4ZWNzdGFjayBjYWxsZXIgb3BlbiBjbG9zZSB0cmFtcG9saW5lKQorIGFsbC1kbC1yb3V0aW5lcyA9ICQoZGwtcm91dGluZXMpICQoc3lzZGVwLWRsLXJvdXRpbmVzKQorICMgQnV0IHRoZXkgYXJlIGFic2VudCBmcm9tIHRoZSBzaGFyZWQgbGliYywgYmVjYXVzZSB0aGF0IGNvZGUgaXMgaW4gbGQuc28uCistZWxpZGUtcm91dGluZXMub3MgPSAkKGFsbC1kbC1yb3V0aW5lcykgZGwtc3VwcG9ydCBlbmJsLXNlY3VyZSBkbC1vcmlnaW4KKytlbGlkZS1yb3V0aW5lcy5vcyA9ICQoYWxsLWRsLXJvdXRpbmVzKSBkbC1zdXBwb3J0IGVuYmwtc2VjdXJlIGRsLW9yaWdpbiBcCisrCQkgICAgZGwtc3lzZGVwCisgc2hhcmVkLW9ubHktcm91dGluZXMgKz0gZGwtY2FsbGVyCisgCisgIyBsZC5zbyB1c2VzIHRob3NlIHJvdXRpbmVzLCBwbHVzIHNvbWUgc3BlY2lhbCBzdHVmZiBmb3IgYmVpbmcgdGhlIHByb2dyYW0KK0BAIC0xMjAsMTMgKzEyMSw2IEBACisgaW5zdGFsbC1iaW4tc2NyaXB0ID0gbGRkCisgZW5kaWYKKyAKKy1pZmVxICh5ZXMsJChidWlsZC1zdGF0aWMtbnNzKSkKKy1uc3NvYmpkaXIgOj0gJChwYXRzdWJzdCAuLi8kKHN1YmRpciksLiwkKGNvbW1vbi1vYmpwZngpbnNzKQorLXJlc29sdm9iamRpciA6PSAkKHBhdHN1YnN0IC4uLyQoc3ViZGlyKSwuLCQoY29tbW9uLW9ianBmeClyZXNvbHYpCistb3RoZXJsaWJzICs9ICQobnNzb2JqZGlyKS9saWJuc3NfZmlsZXMuYSAkKHJlc29sdm9iamRpcikvbGlibnNzX2Rucy5hIFwKKy0JICAgICAkKHJlc29sdm9iamRpcikvbGlicmVzb2x2LmEKKy1lbmRpZgorLQorIG90aGVycwkJPSBzcHJvZiBzbG4KKyBpbnN0YWxsLWJpbgk9IHNwcm9mCisgb3RoZXJzLXN0YXRpYyAgID0gc2xuCitAQCAtMTY1LDE0ICsxNTksMTQgQEAKKyBlbmRpZgorIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgdGVzdHMgKz0gbG9hZHRlc3QgcmVzdGVzdDEgcHJlbG9hZHRlc3QgbG9hZGZhaWwgbXVsdGlsb2FkIG9yaWd0ZXN0IHJlc29sdmZhaWwgXAorLQkgY29uc3Rsb2FkMSBvcmRlciAkKHRlc3RzLXZpcy0kKGhhdmUtcHJvdGVjdGVkKSkgbm9sb2FkIGZpbHRlciB1bmxvYWQgXAorKwkgY29uc3Rsb2FkMSBvcmRlciB2aXNtYWluIG5vbG9hZCBmaWx0ZXIgdW5sb2FkIFwKKyAJIHJlbGRlcCByZWxkZXAyIHJlbGRlcDMgcmVsZGVwNCBub2RlbGV0ZSBub2RlbGV0ZTIgXAorIAkgbm9kbG9wZW4gbm9kbG9wZW4yIG5lZWRlZHRlc3QgbmVlZGVkdGVzdDIgXAorIAkgbmVlZGVkdGVzdDMgbmVlZGVkdGVzdDQgdW5sb2FkMiBsYXRlZ2xvYmFsIGluaXRmaXJzdCBnbG9iYWwgXAorIAkgcmVzdGVzdDIgbmV4dCBkYmxsb2FkIGRibHVubG9hZCByZWxkZXA1IHJlbGRlcDYgcmVsZGVwNyByZWxkZXA4IFwKKyAJIGNpcmNsZWxvYWQxIHRzdC10bHMzIHRzdC10bHM0IHRzdC10bHM1IHRzdC10bHM2IHRzdC10bHM3IHRzdC10bHM4IFwKKyAJIHRzdC10bHMxMCB0c3QtdGxzMTEgdHN0LXRsczEyIHRzdC10bHMxMyB0c3QtdGxzMTQgdHN0LXRsczE1IFwKKy0JIHRzdC10bHMtZGxpbmZvIFwKKysJIHRzdC10bHMxNiB0c3QtdGxzMTcgdHN0LXRsczE4IHRzdC10bHMtZGxpbmZvIFwKKyAJIHRzdC1hbGlnbiB0c3QtYWxpZ24yICQodGVzdHMtZXhlY3N0YWNrLSQoaGF2ZS16LWV4ZWNzdGFjaykpIFwKKyAJIHRzdC1kbG1vZGNvdW50IHRzdC1kbG9wZW5ycGF0aCB0c3QtZGVlcDEgXAorIAkgdHN0LWRsbW9wZW4xIHRzdC1kbG1vcGVuMiB0c3QtZGxtb3BlbjMgXAorQEAgLTE4MSwxNiArMTc1LDE3IEBACisgCSB0c3Qtc3RhY2tndWFyZDEgdHN0LWFkZHIxIHRzdC10aHJsb2NrCisgIwkgcmVsZGVwOQorIHRlc3Qtc3JjcyA9IHRzdC1wYXRob3B0CistdGVzdHMtdmlzLXllcyA9IHZpc21haW4KKyB0ZXN0cy1leGVjc3RhY2steWVzID0gdHN0LWV4ZWNzdGFjayB0c3QtZXhlY3N0YWNrLW5lZWRlZCB0c3QtZXhlY3N0YWNrLXByb2cKKyBlbmRpZgorIGlmZXEgKHllc3llcywkKGhhdmUtZnBpZSkkKGJ1aWxkLXNoYXJlZCkpCisgdGVzdHM6ICQob2JqcGZ4KXRzdC1waWUxLm91dAorIGVuZGlmCisgdGVzdHM6ICQob2JqcGZ4KXRzdC1sZWFrczEtbWVtCisrdGxzbW9kMTdhLXN1ZmZpeGVzID0gMCAxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAxOCAxOQorK3Rsc21vZDE4YS1zdWZmaXhlcyA9IDAgMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcgMTggMTkKKyBtb2R1bGVzLW5hbWVzID0gdGVzdG9iajEgdGVzdG9iajIgdGVzdG9iajMgdGVzdG9iajQgdGVzdG9iajUgdGVzdG9iajYgXAorIAkJdGVzdG9iajFfMSBmYWlsb2JqIGNvbnN0bG9hZDIgY29uc3Rsb2FkMyB1bmxvYWRtb2QgXAorLQkJZGVwMSBkZXAyIGRlcDMgZGVwNCAkKG1vZHVsZXMtdmlzLSQoaGF2ZS1wcm90ZWN0ZWQpKSBcCisrCQlkZXAxIGRlcDIgZGVwMyBkZXA0IHZpc21vZDEgdmlzbW9kMiB2aXNtb2QzIFwKKyAJCW5vZGVsbW9kMSBub2RlbG1vZDIgbm9kZWxtb2QzIG5vZGVsbW9kNCBcCisgCQlub2RlbDJtb2QxIG5vZGVsMm1vZDIgbm9kZWwybW9kMyBcCisgCQlub2Rsb3Blbm1vZCBub2Rsb3Blbm1vZDIgZmlsdG1vZDEgZmlsdG1vZDIgXAorQEAgLTIwNiw3ICsyMDEsMTAgQEAKKyAJCXRzdC10bHNtb2Q1IHRzdC10bHNtb2Q2IHRzdC10bHNtb2Q3IHRzdC10bHNtb2Q4IFwKKyAJCXRzdC10bHNtb2Q5IHRzdC10bHNtb2QxMCB0c3QtdGxzbW9kMTEgdHN0LXRsc21vZDEyIFwKKyAJCXRzdC10bHNtb2QxMyB0c3QtdGxzbW9kMTNhIHRzdC10bHNtb2QxNGEgdHN0LXRsc21vZDE0YiBcCistCQl0c3QtdGxzbW9kMTVhIHRzdC10bHNtb2QxNWIgXAorKwkJdHN0LXRsc21vZDE1YSB0c3QtdGxzbW9kMTViIHRzdC10bHNtb2QxNmEgdHN0LXRsc21vZDE2YiBcCisrCQkkKHBhdHN1YnN0ICUsdHN0LXRsc21vZDE3YSUsJCh0bHNtb2QxN2Etc3VmZml4ZXMpKSBcCisrCQl0c3QtdGxzbW9kMTdiIFwKKysJCSQocGF0c3Vic3QgJSx0c3QtdGxzbW9kMThhJSwkKHRsc21vZDE4YS1zdWZmaXhlcykpIFwKKyAJCWNpcmNsZW1vZDEgY2lyY2xlbW9kMWEgY2lyY2xlbW9kMiBjaXJjbGVtb2QyYSBcCisgCQljaXJjbGVtb2QzIGNpcmNsZW1vZDNhIFwKKyAJCXJlbGRlcDhtb2QxIHJlbGRlcDhtb2QyIHJlbGRlcDhtb2QzIFwKK0BAIC0yMjYsNyArMjI0LDYgQEAKKyBpZmVxICh5ZXN5ZXMsJChoYXZlLWZwaWUpJChidWlsZC1zaGFyZWQpKQorIG1vZHVsZXMtbmFtZXMgKz0gdHN0LXBpZW1vZDEKKyBlbmRpZgorLW1vZHVsZXMtdmlzLXllcyA9IHZpc21vZDEgdmlzbW9kMiB2aXNtb2QzCisgbW9kdWxlcy1leGVjc3RhY2steWVzID0gdHN0LWV4ZWNzdGFjay1tb2QKKyBleHRyYS10ZXN0LW9ianMgKz0gJChhZGRzdWZmaXggLm9zLCQoc3RyaXAgJChtb2R1bGVzLW5hbWVzKSkpCisgIyBXZSBuZWVkIHRoaXMgdmFyaWFibGUgdG8gYmUgc3VyZSB0aGUgdGVzdCBtb2R1bGVzIGdldCB0aGUgcmlnaHQgQ1BQRkxBR1MuCitAQCAtMzA3LDcgKzMwNCw3IEBACisgCQkgICQoTERGTEFHUy1ydGxkKSAtV2wsLXosZGVmcyAtV2wsLS12ZXJib3NlIDI+JjEgfAlcCisgCQkgIExDX0FMTD1DIFwKKyAJCSAgc2VkIC1lICcvXj09PT09PT09PS8sL149PT09PT09PT0vIWQ7L149PT09PT09PT0vZCcJXAorLQkJICAgICAgLWUgJ3MvXC4gPSAwICsgU0laRU9GX0hFQURFUlM7LyYgX2JlZ2luID0gLiAtIFNJWkVPRl9IRUFERVJTOy8nIFwKKysJCSAgICAgIC1lICdzL1wuID0gLiogKyBTSVpFT0ZfSEVBREVSUzsvJiBfYmVnaW4gPSAuIC0gU0laRU9GX0hFQURFUlM7LycgXAorIAkJICA+ICRALmxkcworIAkkKExJTksubykgLW5vc3RkbGliIC1ub3N0YXJ0ZmlsZXMgLXNoYXJlZCAtbyAkQAkJCVwKKyAJCSAgJChMREZMQUdTLXJ0bGQpIC1XbCwteixkZWZzICQoei1ub3ctJChiaW5kLW5vdykpCVwKK0BAIC0zMTUsNyArMzEyLDcgQEAKKyAJCSAgLVdsLC1zb25hbWU9JChydGxkLWluc3RhbGxlZC1uYW1lKSAtVCAkQC5sZHMKKyAJcm0gLWYgJEAubGRzCisgCXJlYWRlbGYgLXMgJEAgXAorLQkgIHwgYXdrICcoJCQ3IH4gL15VTkQofEVGKSQkLyAmJiAkJDEgIT0gIjA6IiAmJiAkJDQgIT0gIlJFR0lTVEVSIikgeyBwcmludDsgcD0xIH0gRU5EIHsgZXhpdCBwICE9IDAgfScKKysJICB8ICQoQVdLKSAnKCQkNyB+IC9eVU5EKHxFRikkJC8gJiYgJCQxICE9ICIwOiIgJiYgJCQ0ICE9ICJSRUdJU1RFUiIpIHsgcHJpbnQ7IHA9MSB9IEVORCB7IGV4aXQgcCAhPSAwIH0nCisgCisgIyBpbnRlcnAuYyBleGlzdHMganVzdCB0byBnZXQgdGhpcyBzdHJpbmcgaW50byB0aGUgbGlicmFyaWVzLgorIENGTEFHUy1pbnRlcnAuYyA9IC1EJ1JVTlRJTUVfTElOS0VSPSIkKHNsaWJkaXIpLyQocnRsZC1pbnN0YWxsZWQtbmFtZSkiJyBcCitAQCAtNDk5LDYgKzQ5Niw3IEBACisgdHN0LXRsc21vZDE0YS5zby1uby16LWRlZnMgPSB5ZXMKKyB0c3QtdGxzbW9kMTRiLnNvLW5vLXotZGVmcyA9IHllcworIHRzdC10bHNtb2QxNWEuc28tbm8tei1kZWZzID0geWVzCisrdHN0LXRsc21vZDE2Yi5zby1uby16LWRlZnMgPSB5ZXMKKyBjaXJjbGVtb2QyLnNvLW5vLXotZGVmcyA9IHllcworIGNpcmNsZW1vZDMuc28tbm8tei1kZWZzID0geWVzCisgY2lyY2xlbW9kM2Euc28tbm8tei1kZWZzID0geWVzCitAQCAtNzE4LDYgKzcxNiwyMiBAQAorIAorIAorIAorKyQob2JqcGZ4KXRzdC10bHMxNjogJChsaWJkbCkKKyskKG9ianBmeCl0c3QtdGxzMTYub3V0OiAkKG9ianBmeCl0c3QtdGxzbW9kMTZhLnNvICQob2JqcGZ4KXRzdC10bHNtb2QxNmIuc28KKysKKyskKG9ianBmeCl0c3QtdGxzMTc6ICQobGliZGwpCisrJChvYmpwZngpdHN0LXRsczE3Lm91dDogJChvYmpwZngpdHN0LXRsc21vZDE3Yi5zbworKyQocGF0c3Vic3QgJSwkKG9ianBmeCl0c3QtdGxzbW9kMTdhJS5vcywkKHRsc21vZDE3YS1zdWZmaXhlcykpOiAkKG9ianBmeCl0c3QtdGxzbW9kMTdhJS5vcyA6IHRzdC10bHNtb2QxN2EuYworKwkkKENDKSAkKENGTEFHUykgJChDUFBGTEFHUykgLWMgLW8gJEAgLUROPSQqIC1ETk9UX0lOX2xpYmM9MSAkPAorKyQocGF0c3Vic3QgJSwkKG9ianBmeCl0c3QtdGxzbW9kMTdhJS5zbywkKHRsc21vZDE3YS1zdWZmaXhlcykpOiAkKG9ianBmeCl0c3QtdGxzbW9kMTdhJS5zbzogJChvYmpwZngpbGQuc28KKyskKG9ianBmeCl0c3QtdGxzbW9kMTdiLnNvOiAkKHBhdHN1YnN0ICUsJChvYmpwZngpdHN0LXRsc21vZDE3YSUuc28sJCh0bHNtb2QxN2Etc3VmZml4ZXMpKQorKworKyQob2JqcGZ4KXRzdC10bHMxODogJChsaWJkbCkKKyskKG9ianBmeCl0c3QtdGxzMTgub3V0OiAkKHBhdHN1YnN0ICUsJChvYmpwZngpdHN0LXRsc21vZDE4YSUuc28sJCh0bHNtb2QxOGEtc3VmZml4ZXMpKQorKyQocGF0c3Vic3QgJSwkKG9ianBmeCl0c3QtdGxzbW9kMThhJS5vcywkKHRsc21vZDE4YS1zdWZmaXhlcykpOiAkKG9ianBmeCl0c3QtdGxzbW9kMThhJS5vcyA6IHRzdC10bHNtb2QxOGEuYworKwkkKENDKSAkKENGTEFHUykgJChDUFBGTEFHUykgLWMgLW8gJEAgLUROPSQqIC1ETk9UX0lOX2xpYmM9MSAkPAorKyQocGF0c3Vic3QgJSwkKG9ianBmeCl0c3QtdGxzbW9kMThhJS5zbywkKHRsc21vZDE4YS1zdWZmaXhlcykpOiAkKG9ianBmeCl0c3QtdGxzbW9kMThhJS5zbzogJChvYmpwZngpbGQuc28KKysKKyBDRkxBR1MtdHN0LWFsaWduLmMgPSAkKHN0YWNrLWFsaWduLXRlc3QtZmxhZ3MpCisgQ0ZMQUdTLXRzdC1hbGlnbjIuYyA9ICQoc3RhY2stYWxpZ24tdGVzdC1mbGFncykKKyBDRkxBR1MtdHN0LWFsaWdubW9kLmMgPSAkKHN0YWNrLWFsaWduLXRlc3QtZmxhZ3MpCitAQCAtODA0LDcgKzgxOCw3IEBACisgCWNtcCAkQCB0c3QtYXJyYXk1LXN0YXRpYy5leHAgPiAvZGV2L251bGwKKyAKKyBpZmVxICh5ZXN5ZXMsJChoYXZlLWZwaWUpJChidWlsZC1zaGFyZWQpKQorLUNGTEFHUy10c3QtcGllMS5jICs9IC1mcGllCisrQ0ZMQUdTLXRzdC1waWUxLmMgKz0gJChwaWUtY2NmbGFnKQorIAorICQob2JqcGZ4KXRzdC1waWUxLm91dDogJChvYmpwZngpdHN0LXBpZTEKKyAJJChlbGYtb2JqcGZ4KSQocnRsZC1pbnN0YWxsZWQtbmFtZSkgXAorQEAgLTg0NSwxMCArODU5LDE0IEBACisgJChvYmpwZngpdHN0LWRsbW9kY291bnQub3V0OiAkKHRlc3QtbW9kdWxlcykKKyAKKyBjaGVjay1kYXRhIDo9ICQoZmlyc3R3b3JkICQod2lsZGNhcmQgXAorLQkgICAgICAgICQocGF0c3Vic3QgJSwuLi9zY3JpcHRzL2RhdGEvbG9jYWxwbHQtJS5kYXRhLFwKKy0JCQkgICAkKGFkZHN1ZmZpeCAtJChjb25maWctb3MpLFwKKy0JCQkgICAJICAgICAgICQoY29uZmlnLW1hY2hpbmUpICQoYmFzZS1tYWNoaW5lKSlcCistCQkJICAgZ2VuZXJpYykpKQorKwkgICAgICAgICQoZm9yZWFjaCBELCQoYWRkLW9ucykgc2NyaXB0cyxcCisrCSAgICAgICAgCSAgJChwYXRzdWJzdCAlLCQoLi4pJEQvZGF0YS9sb2NhbHBsdC0lLmRhdGEsXAorKwkJCSAgIAkgICAgICQoYWJpLW5hbWUpIFwKKysJCQkgICAJICAgICAkKGFkZHN1ZmZpeCAtJChjb25maWctb3MpLFwKKysJCQkJICAgICAJCSAkKGNvbmZpZy1tYWNoaW5lKSBcCisrCQkJCQkJICQoYmFzZS1tYWNoaW5lKSkgXAorKwkJCSAgIGdlbmVyaWMpKSkpCisrCisgdGVzdHM6ICQob2JqcGZ4KWNoZWNrLWxvY2FscGx0Lm91dAorIAorIGlmZXEgKCQoaGF2ZS10aHJlYWQtbGlicmFyeSkseWVzKQorQEAgLTg1Nyw5ICs4NzUsMTEgQEAKKyAKKyAkKG9ianBmeCljaGVjay1sb2NhbHBsdC5vdXQ6ICQob2JqcGZ4KWNoZWNrLWxvY2FscGx0IFwKKyAJCQkgICAgICQoY29tbW9uLW9ianBmeClsaWJjLnNvIFwKKy0gCQkgICAgCSAgICAgJChjb21tb24tb2JqcGZ4KW1hdGgvbGlibS5zbyAkKHRocmVhZC1kc28pIFwKKy0gCQkgICAgCSAgICAgJChjb21tb24tb2JqcGZ4KXJ0L2xpYnJ0LnNvIFwKKy0gCQkgICAgCSAgICAgJChjb21tb24tb2JqcGZ4KWRsZmNuL2xpYmRsLnNvIFwKKysJCSAgICAJICAgICAkKGNvbW1vbi1vYmpwZngpbWF0aC9saWJtLnNvICQodGhyZWFkLWRzbykgXAorKwkJICAgIAkgICAgICQoY29tbW9uLW9ianBmeClydC9saWJydC5zbyBcCisrCQkgICAgCSAgICAgJChjb21tb24tb2JqcGZ4KWRsZmNuL2xpYmRsLnNvIFwKKysJCQkgICAgICQoY29tbW9uLW9ianBmeClyZXNvbHYvbGlicmVzb2x2LnNvIFwKKysJCQkgICAgICQoY29tbW9uLW9ianBmeCljcnlwdC9saWJjcnlwdC5zbyBcCisgCQkJICAgICAkKGNoZWNrLWRhdGEpCisgCSQoZGlyICQ8KSQobm90ZGlyICQ8KSAkKGZpbHRlci1vdXQgJDwgJChjaGVjay1kYXRhKSwkXikgfCBcCisgCSAgTENfQUxMPUMgc29ydCB8IFwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMTAwLXNzcC1jb21wYXQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzEwMC1zc3AtY29tcGF0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MWJjMzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzEwMC1zc3AtY29tcGF0LnBhdGNoCkBAIC0wLDAgKzEsMTkzIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nbGliYy8yLjkvMDAxMF9hbGxfZ2xpYmMtMi43LXNzcC1jb21wYXQucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitBZGQgYmFja3dhcmRzIGNvbXBhdCBzdXBwb3J0IGZvciBnY2MtMy54IHNzcCAuLi4gb2xkZXIgc3NwIHZlcnNpb25zCit1c2VkIF9fZ3VhcmQgYW5kIF9fc3RhY2tfc21hc2hfaGFuZGxlciBzeW1ib2xzIHdoaWxlIGdjYy00LjEgYW5kIG5ld2VyCit1c2VzIF9fc3RhY2tfY2hrX2d1YXJkIGFuZCBfX3N0YWNrX2Noa19mYWlsLgorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2xpYmMtMl85Lm9yaWcvVmVyc2lvbnMuZGVmIGdsaWJjLTJfOS9WZXJzaW9ucy5kZWYKKy0tLSBnbGliYy0yXzkub3JpZy9WZXJzaW9ucy5kZWYJMjAwOC0wOC0wMSAxOToxMzo0MC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yXzkvVmVyc2lvbnMuZGVmCTIwMDktMDItMDIgMjI6MDA6MzMuMDAwMDAwMDAwICswMTAwCitAQCAtMTEzLDYgKzExMyw5IEBACisgICBHTElCQ18yLjAKKyAgIEdMSUJDXzIuMQorICAgR0xJQkNfMi4zCisrJWlmZGVmIEVOQUJMRV9PTERfU1NQX0NPTVBBVAorKyAgR0xJQkNfMi4zLjIKKyslZW5kaWYKKyAgIEdMSUJDXzIuNAorICAgR0xJQkNfUFJJVkFURQorIH0KK2RpZmYgLWR1ck4gZ2xpYmMtMl85Lm9yaWcvY29uZmlnLmguaW4gZ2xpYmMtMl85L2NvbmZpZy5oLmluCistLS0gZ2xpYmMtMl85Lm9yaWcvY29uZmlnLmguaW4JMjAwNy0wMy0yNiAyMjo0MDowOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yXzkvY29uZmlnLmguaW4JMjAwOS0wMi0wMiAyMjowMDozMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC00Miw2ICs0Miw5IEBACisgICAgYXNzZW1ibGVyIGluc3RydWN0aW9ucyBwZXIgbGluZS4gIERlZmF1bHQgaXMgYDsnICAqLworICN1bmRlZiBBU01fTElORV9TRVAKKyAKKysvKiBEZWZpbmUgaWYgd2Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3Igb2xkIHNzcCBzeW1ib2xzICovCisrI3VuZGVmCUVOQUJMRV9PTERfU1NQX0NPTVBBVAorKworIC8qIERlZmluZSBpZiBub3QgdXNpbmcgRUxGLCBidXQgYC5pbml0JyBhbmQgYC5maW5pJyBzZWN0aW9ucyBhcmUgYXZhaWxhYmxlLiAgKi8KKyAjdW5kZWYJSEFWRV9JTklURklOSQorIAorZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9jb25maWd1cmUgZ2xpYmMtMl85L2NvbmZpZ3VyZQorLS0tIGdsaWJjLTJfOS5vcmlnL2NvbmZpZ3VyZQkyMDA4LTExLTExIDEwOjUwOjExLjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTJfOS9jb25maWd1cmUJMjAwOS0wMi0wMiAyMjowMDozMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMzgwLDYgKzEzODAsOSBAQAorICAgLS1lbmFibGUta2VybmVsPVZFUlNJT04gY29tcGlsZSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGtlcm5lbCBub3Qgb2xkZXIgdGhhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgVkVSU0lPTgorICAgLS1lbmFibGUtYWxsLXdhcm5pbmdzICAgZW5hYmxlIGFsbCB1c2VmdWwgd2FybmluZ3MgZ2NjIGNhbiBpc3N1ZQorKyAgLS1kaXNhYmxlLW9sZC1zc3AtY29tcGF0CisrICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGUgc3VwcG9ydCBmb3Igb2xkZXIgc3NwIHN5bWJvbHMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZWZhdWx0PW5vXQorIAorIE9wdGlvbmFsIFBhY2thZ2VzOgorICAgLS13aXRoLVBBQ0tBR0VbPUFSR10gICAgdXNlIFBBQ0tBR0UgW0FSRz15ZXNdCitAQCAtNjQ3MCw2ICs2NDczLDIwIEBACisgZWNobyAiJHtFQ0hPX1R9JGxpYmNfY3Zfc3NwIiA+JjY7IH0KKyAKKyAKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtb2xkLXNzcC1jb21wYXQgb3IgLS1kaXNhYmxlLW9sZC1zc3AtY29tcGF0IHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke2VuYWJsZV9vbGRfc3NwX2NvbXBhdCtzZXR9IiA9IHNldDsgdGhlbgorKyAgZW5hYmxldmFsPSIkZW5hYmxlX29sZF9zc3BfY29tcGF0IgorKyAgZW5hYmxlX29sZF9zc3BfY29tcGF0PSRlbmFibGV2YWwKKytlbHNlCisrICBlbmFibGVfb2xkX3NzcF9jb21wYXQ9bm8KKytmaTsKKytpZiB0ZXN0ICJ4JGVuYWJsZV9vbGRfc3NwX2NvbXBhdCIgPSAieHllcyI7IHRoZW4KKysgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisrI2RlZmluZSBFTkFCTEVfT0xEX1NTUF9DT01QQVQgMQorK19BQ0VPRgorKworK2ZpCisrCisgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIC1mZ251ODktaW5saW5lIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAtZmdudTg5LWlubGluZS4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2xpYmNfY3ZfZ251ODlfaW5saW5lK3NldH0iID0gc2V0OyB0aGVuCitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL2NvbmZpZ3VyZS5pbiBnbGliYy0yXzkvY29uZmlndXJlLmluCistLS0gZ2xpYmMtMl85Lm9yaWcvY29uZmlndXJlLmluCTIwMDgtMTEtMTEgMTA6NTA6MTEuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMl85L2NvbmZpZ3VyZS5pbgkyMDA5LTAyLTAyIDIyOjAwOjMyLjAwMDAwMDAwMCArMDEwMAorQEAgLTE2NDcsNiArMTY0NywxNSBAQAorIHJtIC1mIGNvbmZ0ZXN0Kl0pCisgQUNfU1VCU1QobGliY19jdl9zc3ApCisgCisrQUNfQVJHX0VOQUJMRShbb2xkLXNzcC1jb21wYXRdLAorKwkgICAgICBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtb2xkLXNzcC1jb21wYXRdLAorKwkgICAgICAgICAgICAgICAgICAgICBbZW5hYmxlIHN1cHBvcnQgZm9yIG9sZGVyIHNzcCBzeW1ib2xzIEA8OkBkZWZhdWx0PW5vQDo+QF0pLAorKwkgICAgICBbZW5hYmxlX29sZF9zc3BfY29tcGF0PSRlbmFibGV2YWxdLAorKwkgICAgICBbZW5hYmxlX29sZF9zc3BfY29tcGF0PW5vXSkKKytpZiB0ZXN0ICJ4JGVuYWJsZV9vbGRfc3NwX2NvbXBhdCIgPSAieHllcyI7IHRoZW4KKysgIEFDX0RFRklORShFTkFCTEVfT0xEX1NTUF9DT01QQVQpCisrZmkKKysKKyBBQ19DQUNIRV9DSEVDSyhmb3IgLWZnbnU4OS1pbmxpbmUsIGxpYmNfY3ZfZ251ODlfaW5saW5lLCBbZG5sCisgY2F0ID4gY29uZnRlc3QuYyA8PEVPRgorIGludCBmb287CitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL2NzdS9WZXJzaW9ucyBnbGliYy0yXzkvY3N1L1ZlcnNpb25zCistLS0gZ2xpYmMtMl85Lm9yaWcvY3N1L1ZlcnNpb25zCTIwMDYtMTAtMjggMDE6MTE6NDEuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMl85L2NzdS9WZXJzaW9ucwkyMDA5LTAyLTAyIDIyOjAwOjMyLjAwMDAwMDAwMCArMDEwMAorQEAgLTE3LDYgKzE3LDEyIEBACisgICAgICMgTmV3IHNwZWNpYWwgZ2xpYmMgZnVuY3Rpb25zLgorICAgICBnbnVfZ2V0X2xpYmNfcmVsZWFzZTsgZ251X2dldF9saWJjX3ZlcnNpb247CisgICB9CisrICBHTElCQ18yLjMuMiB7CisrJWlmZGVmIEVOQUJMRV9PTERfU1NQX0NPTVBBVAorKyAgICAjIGdsb2JhbCBvYmplY3RzIGFuZCBmdW5jdGlvbnMgZm9yIHRoZSBvbGQgcHJvcG9saWNlIHBhdGNoIGluIGdjYworKyAgICBfX2d1YXJkOworKyVlbmRpZgorKyAgfQorICAgR0xJQkNfUFJJVkFURSB7CisgJWlmIEhBVkVfX19USFJFQUQKKyAgICAgIyBUaGlzIHZlcnNpb24gaXMgZm9yIHRoZSBUTFMgc3ltYm9sLCBHTElCQ18yLjAgaXMgdGhlIG9sZCBvYmplY3Qgc3ltYm9sLgorZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9jc3UvbGliYy1zdGFydC5jIGdsaWJjLTJfOS9jc3UvbGliYy1zdGFydC5jCistLS0gZ2xpYmMtMl85Lm9yaWcvY3N1L2xpYmMtc3RhcnQuYwkyMDA3LTA4LTIxIDAwOjI3OjUwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTJfOS9jc3UvbGliYy1zdGFydC5jCTIwMDktMDItMDIgMjI6MDA6MzIuMDAwMDAwMDAwICswMTAwCitAQCAtMzcsNiArMzcsOSBAQAorIHVpbnRwdHJfdCBfX3N0YWNrX2Noa19ndWFyZCBhdHRyaWJ1dGVfcmVscm87CisgIyBlbmRpZgorICNlbmRpZgorKyNpZmRlZiBFTkFCTEVfT0xEX1NTUF9DT01QQVQKKyt1aW50cHRyX3QgX19ndWFyZCBhdHRyaWJ1dGVfcmVscm87CisrI2VuZGlmCisgCisgI2lmZGVmIEhBVkVfUFRSX05USFJFQURTCisgLyogV2UgbmVlZCBhdG9taWMgb3BlcmF0aW9ucy4gICovCitAQCAtMTQxLDYgKzE0NCw5IEBACisgCisgICAvKiBTZXQgdXAgdGhlIHN0YWNrIGNoZWNrZXIncyBjYW5hcnkuICAqLworICAgdWludHB0cl90IHN0YWNrX2Noa19ndWFyZCA9IF9kbF9zZXR1cF9zdGFja19jaGtfZ3VhcmQgKCk7CisrI2lmZGVmIEVOQUJMRV9PTERfU1NQX0NPTVBBVAorKyAgX19ndWFyZCA9IHN0YWNrX2Noa19ndWFyZDsKKysjZW5kaWYKKyAjIGlmZGVmIFRIUkVBRF9TRVRfU1RBQ0tfR1VBUkQKKyAgIFRIUkVBRF9TRVRfU1RBQ0tfR1VBUkQgKHN0YWNrX2Noa19ndWFyZCk7CisgIyBlbHNlCitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL2RlYnVnL1ZlcnNpb25zIGdsaWJjLTJfOS9kZWJ1Zy9WZXJzaW9ucworLS0tIGdsaWJjLTJfOS5vcmlnL2RlYnVnL1ZlcnNpb25zCTIwMDgtMDMtMDUgMDc6NTM6NDEuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMl85L2RlYnVnL1ZlcnNpb25zCTIwMDktMDItMDIgMjI6MDA6MzIuMDAwMDAwMDAwICswMTAwCitAQCAtMTAsNiArMTAsMTIgQEAKKyAgICAgIyBUaGVzZSBhcmUgdG8gc3VwcG9ydCBzb21lIGdjYyBmZWF0dXJlcy4KKyAgICAgX19jeWdfcHJvZmlsZV9mdW5jX2VudGVyOyBfX2N5Z19wcm9maWxlX2Z1bmNfZXhpdDsKKyAgIH0KKyslaWZkZWYgRU5BQkxFX09MRF9TU1BfQ09NUEFUCisrICBHTElCQ18yLjMuMiB7CisrICAgICMgYmFja3dhcmRzIHNzcCBjb21wYXQgc3VwcG9ydDsgYWxpYXMgdG8gX19zdGFja19jaGtfZmFpbAorKyAgICBfX3N0YWNrX3NtYXNoX2hhbmRsZXI7CisrICB9CisrJWVuZGlmCisgICBHTElCQ18yLjMuNCB7CisgICAgIF9fY2hrX2ZhaWw7CisgICAgIF9fbWVtY3B5X2NoazsgX19tZW1tb3ZlX2NoazsgX19tZW1wY3B5X2NoazsgX19tZW1zZXRfY2hrOyBfX3N0cGNweV9jaGs7CitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL2RlYnVnL3N0YWNrX2Noa19mYWlsLmMgZ2xpYmMtMl85L2RlYnVnL3N0YWNrX2Noa19mYWlsLmMKKy0tLSBnbGliYy0yXzkub3JpZy9kZWJ1Zy9zdGFja19jaGtfZmFpbC5jCTIwMDctMDUtMjUgMDE6NDc6MDguMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMl85L2RlYnVnL3N0YWNrX2Noa19mYWlsLmMJMjAwOS0wMi0wMiAyMjowMDozMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yOCwzICsyOCw3IEBACisgeworICAgX19mb3J0aWZ5X2ZhaWwgKCJzdGFjayBzbWFzaGluZyBkZXRlY3RlZCIpOworIH0KKysKKysjaWZkZWYgRU5BQkxFX09MRF9TU1BfQ09NUEFUCisrc3Ryb25nX2FsaWFzIChfX3N0YWNrX2Noa19mYWlsLCBfX3N0YWNrX3NtYXNoX2hhbmRsZXIpCisrI2VuZGlmCitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL2VsZi9WZXJzaW9ucyBnbGliYy0yXzkvZWxmL1ZlcnNpb25zCistLS0gZ2xpYmMtMl85Lm9yaWcvZWxmL1ZlcnNpb25zCTIwMDgtMDMtMDggMDY6NDI6MjYuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMl85L2VsZi9WZXJzaW9ucwkyMDA5LTAyLTAyIDIyOjAwOjMzLjAwMDAwMDAwMCArMDEwMAorQEAgLTQzLDYgKzQzLDEyIEBACisgICAgICMgcnVudGltZSBpbnRlcmZhY2UgdG8gVExTCisgICAgIF9fdGxzX2dldF9hZGRyOworICAgfQorKyVpZmRlZiBFTkFCTEVfT0xEX1NTUF9DT01QQVQKKysgIEdMSUJDXzIuMy4yIHsKKysgICAgIyBiYWNrd2FyZHMgc3NwIGNvbXBhdCBzdXBwb3J0CisrICAgIF9fZ3VhcmQ7CisrICB9CisrJWVuZGlmCisgICBHTElCQ18yLjQgeworICAgICAjIHN0YWNrIGNhbmFyeQorICAgICBfX3N0YWNrX2Noa19ndWFyZDsKK2RpZmYgLWR1ck4gZ2xpYmMtMl85Lm9yaWcvZWxmL3J0bGQuYyBnbGliYy0yXzkvZWxmL3J0bGQuYworLS0tIGdsaWJjLTJfOS5vcmlnL2VsZi9ydGxkLmMJMjAwOC0wOC0xNCAxOTowMTo1Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yXzkvZWxmL3J0bGQuYwkyMDA5LTAyLTAyIDIyOjAwOjMyLjAwMDAwMDAwMCArMDEwMAorQEAgLTg5LDYgKzg5LDkgQEAKKyAgICBpbiB0aHJlYWQgbG9jYWwgYXJlYS4gICovCisgdWludHB0cl90IF9fc3RhY2tfY2hrX2d1YXJkIGF0dHJpYnV0ZV9yZWxybzsKKyAjZW5kaWYKKysjaWZkZWYgRU5BQkxFX09MRF9TU1BfQ09NUEFUCisrdWludHB0cl90IF9fZ3VhcmQgYXR0cmlidXRlX3JlbHJvOworKyNlbmRpZgorIAorIC8qIE9ubHkgZXhwb3J0ZWQgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBzdG9yZSB0aGUgcG9pbnRlciBndWFyZAorICAgIHZhbHVlIGluIHRocmVhZCBsb2NhbCBhcmVhLiAgKi8KK0BAIC04NDIsNiArODQ1LDkgQEAKKyB7CisgICAvKiBTZXQgdXAgdGhlIHN0YWNrIGNoZWNrZXIncyBjYW5hcnkuICAqLworICAgdWludHB0cl90IHN0YWNrX2Noa19ndWFyZCA9IF9kbF9zZXR1cF9zdGFja19jaGtfZ3VhcmQgKCk7CisrI2lmZGVmIEVOQUJMRV9PTERfU1NQX0NPTVBBVAorKyAgX19ndWFyZCA9IHN0YWNrX2Noa19ndWFyZDsKKysjZW5kaWYKKyAjaWZkZWYgVEhSRUFEX1NFVF9TVEFDS19HVUFSRAorICAgVEhSRUFEX1NFVF9TVEFDS19HVUFSRCAoc3RhY2tfY2hrX2d1YXJkKTsKKyAjZWxzZQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8xMTAtcmVzcGVjdC1lbnYtQ1BQRkxBR1MucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzExMC1yZXNwZWN0LWVudi1DUFBGTEFHUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODAzM2IyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8xMTAtcmVzcGVjdC1lbnYtQ1BQRkxBR1MucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2xpYmMvMi45LzAwMzBfYWxsX2dsaWJjLXJlc3BlY3QtZW52LUNQUEZMQUdTLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorUmVzcGVjdCBlbnZpcm9ubWVudCBDUFBGTEFHUyB3aGVuIHdlIHJ1biAuL2NvbmZpZ3VyZSBzbyB3ZSBjYW4gaW5qZWN0CityYW5kb20gLUQgdGhpbmdzIHdpdGhvdXQgaGF2aW5nIHRvIHNldCBDRkxBR1MvQVNGTEFHUworCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2xpYmMtMl85Lm9yaWcvTWFrZWNvbmZpZyBnbGliYy0yXzkvTWFrZWNvbmZpZworLS0tIGdsaWJjLTJfOS5vcmlnL01ha2Vjb25maWcJMjAwOC0wOC0xOCAxMTo0MjoxNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yXzkvTWFrZWNvbmZpZwkyMDA5LTAyLTAyIDIyOjAwOjM1LjAwMDAwMDAwMCArMDEwMAorQEAgLTY3Myw2ICs2NzMsNyBAQAorIAkgICAkKGZvcmVhY2ggbGliLCQobGlib2YtJChiYXNlbmFtZSAkKEBGKSkpIFwKKyAJCSAgICAgICAgICQobGlib2YtJCg8RikpICQobGlib2YtJChARikpLCQoQ1BQRkxBR1MtJChsaWIpKSkgXAorIAkgICAkKENQUEZMQUdTLSQoPEYpKSAkKENQUEZMQUdTLSQoQEYpKSAkKENQUEZMQUdTLSQoYmFzZW5hbWUgJChARikpKQorK0NQUEZMQUdTICs9ICQoQ1BQRkxBR1MtY29uZmlnKQorIG92ZXJyaWRlIENGTEFHUwk9IC1zdGQ9Z251OTkgJChnbnU4OS1pbmxpbmUtQ0ZMQUdTKSBcCisgCQkgICQoZmlsdGVyLW91dCAlZnJhbWUtcG9pbnRlciwkKCtjZmxhZ3MpKSAkKCtnY2N3YXJuLWMpIFwKKyAJCSAgJChzeXNkZXAtQ0ZMQUdTKSAkKENGTEFHUy0kKHN1ZmZpeCAkQCkpICQoQ0ZMQUdTLSQoPEYpKSBcCitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL2NvbmZpZy5tYWtlLmluIGdsaWJjLTJfOS9jb25maWcubWFrZS5pbgorLS0tIGdsaWJjLTJfOS5vcmlnL2NvbmZpZy5tYWtlLmluCTIwMDgtMDgtMTggMTE6NDI6MTcuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMl85L2NvbmZpZy5tYWtlLmluCTIwMDktMDItMDIgMjI6MDA6MzUuMDAwMDAwMDAwICswMTAwCitAQCAtOTcsNiArOTcsNyBAQAorIENYWCA9IEBDWFhACisgQlVJTERfQ0MgPSBAQlVJTERfQ0NACisgQ0ZMQUdTID0gQENGTEFHU0AKKytDUFBGTEFHUy1jb25maWcgPSBAQ1BQRkxBR1NACisgQVNGTEFHUy1jb25maWcgPSBAQVNGTEFHU19jb25maWdACisgQVIgPSBAQVJACisgUkFOTElCID0gQFJBTkxJQkAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMTIwLV9uc3NfZG5zX2dldGhvc3RieWFkZHIyX3ItY2hlY2stYW5kLWFkanVzdC10aGUtYnVmZmVyLWFsaWdubWVudC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMTIwLV9uc3NfZG5zX2dldGhvc3RieWFkZHIyX3ItY2hlY2stYW5kLWFkanVzdC10aGUtYnVmZmVyLWFsaWdubWVudC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWRiMDNmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8xMjAtX25zc19kbnNfZ2V0aG9zdGJ5YWRkcjJfci1jaGVjay1hbmQtYWRqdXN0LXRoZS1idWZmZXItYWxpZ25tZW50LnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2dsaWJjLzIuOS8wMDUwX2FsbF9nbGliYy1fbnNzX2Ruc19nZXRob3N0YnlhZGRyMl9yLWNoZWNrLWFuZC1hZGp1c3QtdGhlLWJ1ZmZlci1hbGlnbm1lbnQucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitodHRwOi8vc291cmNld2FyZS5vcmcvbWwvbGliYy1hbHBoYS8yMDA5LTAxL21zZzAwMDAwLmh0bWwKKworRnJvbSA4YWQ3MDMwODgwZWFhMThkY2FiZjhlMjg0ZTc5MDI2MzAxZmQzZmE0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4KK0RhdGU6IFRodSwgOCBKYW4gMjAwOSAwMDowMjozOCArMDAwMAorU3ViamVjdDogW1BBVENIXSAoX25zc19kbnNfZ2V0aG9zdGJ5YWRkcjJfcik6IENoZWNrIGFuZCBhZGp1c3QgdGhlIGJ1ZmZlciBhbGlnbm1lbnQuCisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9yZXNvbHYvbnNzX2Rucy9kbnMtaG9zdC5jIGdsaWJjLTJfOS9yZXNvbHYvbnNzX2Rucy9kbnMtaG9zdC5jCistLS0gZ2xpYmMtMl85Lm9yaWcvcmVzb2x2L25zc19kbnMvZG5zLWhvc3QuYwkyMDA4LTExLTEyIDA4OjUyOjIwLjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTJfOS9yZXNvbHYvbnNzX2Rucy9kbnMtaG9zdC5jCTIwMDktMDItMDIgMjI6MDA6MzYuMDAwMDAwMDAwICswMTAwCitAQCAtMzY0LDYgKzM2NCwxOSBAQAorICAgaW50IG4sIHN0YXR1czsKKyAgIGludCBvbGRlcnIgPSBlcnJubzsKKyAKKysgdWludHB0cl90IHBhZCA9IC0odWludHB0cl90KSBidWZmZXIgJSBfX2FsaWdub2ZfXyAoc3RydWN0IGhvc3RfZGF0YSk7CisrIGJ1ZmZlciArPSBwYWQ7CisrIGJ1ZmxlbiA9IGJ1ZmxlbiA+IHBhZCA/IGJ1ZmxlbiAtIHBhZCA6IDA7CisrCisrIGlmIChfX2J1aWx0aW5fZXhwZWN0IChidWZsZW4gPCBzaXplb2YgKHN0cnVjdCBob3N0X2RhdGEpLCAwKSkKKysgICB7CisrICAgICAqZXJybm9wID0gRVJBTkdFOworKyAgICAgKmhfZXJybm9wID0gTkVUREJfSU5URVJOQUw7CisrICAgICByZXR1cm4gTlNTX1NUQVRVU19UUllBR0FJTjsKKysgICB9CisrCisrIGhvc3RfZGF0YSA9IChzdHJ1Y3QgaG9zdF9kYXRhICopIGJ1ZmZlcjsKKysKKyAgIGlmIChfX3Jlc19tYXliZV9pbml0ICgmX3JlcywgMCkgPT0gLTEpCisgICAgIHJldHVybiBOU1NfU1RBVFVTX1VOQVZBSUw7CisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzEzMC1hZGRfcHJpby1tYWNyb3MucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzEzMC1hZGRfcHJpby1tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY1YmY1YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMTMwLWFkZF9wcmlvLW1hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nbGliYy8yLjkvMDA1MV9hbGxfZ2xpYmMtMi45LWFkZF9wcmlvLW1hY3Jvcy5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK2h0dHA6Ly9zb3VyY2V3YXJlLm9yZy9tbC9saWJjLWFscGhhLzIwMDktMDEvbXNnMDAwMDMuaHRtbAorCitGcm9tIGExNzM3OTU4ZTA3NGU4Zjk5MDc2MGFjYzhhYmViMGMyMzcxNWE4NTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2xhbmQgTWNHcmF0aCA8cm9sYW5kQGdudS5vcmc+CitEYXRlOiBTYXQsIDMgSmFuIDIwMDkgMjE6MDQ6MDEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gMjAwOS0wMS0wMyAgU2FtdWVsIFRoaWJhdWx0ICA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4KKworCSogYml0cy9yZXNvdXJjZS5oIChQUklPX1BST0NFU1MsIFBSSU9fUEdSUCwgUFJJT19VU0VSKTogQWRkIG1hY3Jvcy4KKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9iaXRzL3Jlc291cmNlLmggZ2xpYmMtMl85L2JpdHMvcmVzb3VyY2UuaAorLS0tIGdsaWJjLTJfOS5vcmlnL2JpdHMvcmVzb3VyY2UuaAkyMDA2LTAzLTA1IDIzOjQ4OjEwLjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTJfOS9iaXRzL3Jlc291cmNlLmgJMjAwOS0wMi0wMiAyMjowMDozOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xODUsNiArMTg1LDkgQEAKKyBlbnVtIF9fcHJpb3JpdHlfd2hpY2gKKyAgIHsKKyAgICAgUFJJT19QUk9DRVNTID0gMCwgICAgICAgICAgIC8qIFdITyBpcyBhIHByb2Nlc3MgSUQuICAqLworKyNkZWZpbmUgUFJJT19QUk9DRVNTIFBSSU9fUFJPQ0VTUworICAgICBQUklPX1BHUlAgPSAxLCAgICAgICAgICAgICAgLyogV0hPIGlzIGEgcHJvY2VzcyBncm91cCBJRC4gICovCisrI2RlZmluZSBQUklPX1BHUlAgUFJJT19QR1JQCisgICAgIFBSSU9fVVNFUiA9IDIgICAgICAgICAgICAgICAvKiBXSE8gaXMgYSB1c2VyIElELiAgKi8KKysjZGVmaW5lIFBSSU9fVVNFUiBQUklPX1VTRVIKKyAgIH07CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzE0MC1yZWdleC1CWjk2OTcucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzE0MC1yZWdleC1CWjk2OTcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNiMGMyMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMTQwLXJlZ2V4LUJaOTY5Ny5wYXRjaApAQCAtMCwwICsxLDExMSBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2xpYmMvMi45LzAwNTJfYWxsX2dsaWJjLTIuOS1yZWdleC1CWjk2OTcucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitodHRwOi8vc291cmNld2FyZS5vcmcvbWwvbGliYy1hbHBoYS8yMDA5LTAxL21zZzAwMDA1Lmh0bWwKKworRnJvbSBlYThjYTBkZmNiZjI3MjFiY2YyYzA4Y2UzYzAxZDU3NjRiODI3NTcyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4KK0RhdGU6IFRodSwgOCBKYW4gMjAwOSAwMDo0MjoyOCArMDAwMAorU3ViamVjdDogW1BBVENIXSAocmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIpOiBSZXdyaXRlIENPTVBMRVhfQlJBQ0tFVCBoYW5kbGluZy4KKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL3Bvc2l4L3JlZ2NvbXAuYyBnbGliYy0yXzkvcG9zaXgvcmVnY29tcC5jCistLS0gZ2xpYmMtMl85Lm9yaWcvcG9zaXgvcmVnY29tcC5jCTIwMDgtMDUtMTUgMDU6MDc6MjEuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMl85L3Bvc2l4L3JlZ2NvbXAuYwkyMDA5LTAyLTAyIDIyOjAwOjQxLjAwMDAwMDAwMCArMDEwMAorQEAgLTM1MCw0NyArMzUwLDY3IEBACisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICAgZWxzZSBpZiAodHlwZSA9PSBDT01QTEVYX0JSQUNLRVQpCisgCXsKKy0JICBpbnQgaTsKKyAJICByZV9jaGFyc2V0X3QgKmNzZXQgPSBkZmEtPm5vZGVzW25vZGVdLm9wci5tYmNzZXQ7CistCSAgaWYgKGNzZXQtPm5vbl9tYXRjaCB8fCBjc2V0LT5uY29sbF9zeW1zIHx8IGNzZXQtPm5lcXVpdl9jbGFzc2VzCistCSAgICAgIHx8IGNzZXQtPm5yYW5nZXMgfHwgY3NldC0+bmNoYXJfY2xhc3NlcykKKy0JICAgIHsKKysJICBpbnQgaTsKKysKKyAjIGlmZGVmIF9MSUJDCistCSAgICAgIGlmIChfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpICE9IDApCisrCSAgLyogU2VlIGlmIHdlIGhhdmUgdG8gdHJ5IGFsbCBieXRlcyB3aGljaCBzdGFydCBtdWx0aXBsZSBjb2xsYXRpb24KKysJICAgICBlbGVtZW50cy4KKysJICAgICBlLmcuIEluIGRhX0RLLCB3ZSB3YW50IHRvIGNhdGNoICdhJyBzaW5jZSAiYWEiIGlzIGEgdmFsaWQKKysJCSAgY29sbGF0aW9uIGVsZW1lbnQsIGFuZCBkb24ndCBjYXRjaCAnYicgc2luY2UgJ2InIGlzCisrCQkgIHRoZSBvbmx5IGNvbGxhdGlvbiBlbGVtZW50IHdoaWNoIHN0YXJ0cyBmcm9tICdiJyAoYW5kCisrCQkgIGl0IGlzIGNhdWdodCBieSBTSU1QTEVfQlJBQ0tFVCkuICAqLworKwkgICAgICBpZiAoX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKSAhPSAwCisrCQkgICYmIChjc2V0LT5uY29sbF9zeW1zIHx8IGNzZXQtPm5yYW5nZXMpKQorIAkJeworLQkJICAvKiBJbiB0aGlzIGNhc2Ugd2Ugd2FudCB0byBjYXRjaCB0aGUgYnl0ZXMgd2hpY2ggYXJlCistCQkgICAgIHRoZSBmaXJzdCBieXRlIG9mIGFueSBjb2xsYXRpb24gZWxlbWVudHMuCistCQkgICAgIGUuZy4gSW4gZGFfREssIHdlIHdhbnQgdG8gY2F0Y2ggJ2EnIHNpbmNlICJhYSIKKy0JCQkgIGlzIGEgdmFsaWQgY29sbGF0aW9uIGVsZW1lbnQsIGFuZCBkb24ndCBjYXRjaAorLQkJCSAgJ2InIHNpbmNlICdiJyBpcyB0aGUgb25seSBjb2xsYXRpb24gZWxlbWVudAorLQkJCSAgd2hpY2ggc3RhcnRzIGZyb20gJ2InLiAgKi8KKyAJCSAgY29uc3QgaW50MzJfdCAqdGFibGUgPSAoY29uc3QgaW50MzJfdCAqKQorIAkJICAgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9UQUJMRU1CKTsKKyAJCSAgZm9yIChpID0gMDsgaSA8IFNCQ19NQVg7ICsraSkKKyAJCSAgICBpZiAodGFibGVbaV0gPCAwKQorIAkJICAgICAgcmVfc2V0X2Zhc3RtYXAgKGZhc3RtYXAsIGljYXNlLCBpKTsKKyAJCX0KKy0jIGVsc2UKKy0JICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCistCQlmb3IgKGkgPSAwOyBpIDwgU0JDX01BWDsgKytpKQorLQkJICBpZiAoX19idG93YyAoaSkgPT0gV0VPRikKKy0JCSAgICByZV9zZXRfZmFzdG1hcCAoZmFzdG1hcCwgaWNhc2UsIGkpOworLSMgZW5kaWYgLyogbm90IF9MSUJDICovCistCSAgICB9CistCSAgZm9yIChpID0gMDsgaSA8IGNzZXQtPm5tYmNoYXJzOyArK2kpCisrIyBlbmRpZiAvKiBfTElCQyAqLworKworKwkgIC8qIFNlZSBpZiB3ZSBoYXZlIHRvIHN0YXJ0IHRoZSBtYXRjaCBhdCBhbGwgbXVsdGlieXRlIGNoYXJhY3RlcnMsCisrCSAgICAgaS5lLiB3aGVyZSB3ZSB3b3VsZCBub3QgZmluZCBhbiBpbnZhbGlkIHNlcXVlbmNlLiAgVGhpcyBvbmx5CisrCSAgICAgYXBwbGllcyB0byBtdWx0aWJ5dGUgY2hhcmFjdGVyIHNldHM7IGZvciBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIKKysJICAgICBzZXRzLCB0aGUgU0lNUExFX0JSQUNLRVQgYWdhaW4gc3VmZmljZXMuICAqLworKwkgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxCisrCSAgICAgICYmIChjc2V0LT5uY2hhcl9jbGFzc2VzIHx8IGNzZXQtPm5vbl9tYXRjaAorKyMgaWZkZWYgX0xJQkMKKysJCSAgfHwgY3NldC0+bmVxdWl2X2NsYXNzZXMKKysjIGVuZGlmIC8qIF9MSUJDICovCisrCQkgKSkKKyAJICAgIHsKKy0JICAgICAgY2hhciBidWZbMjU2XTsKKy0JICAgICAgbWJzdGF0ZV90IHN0YXRlOworLQkgICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChzdGF0ZSkpOworLQkgICAgICBpZiAoX193Y3J0b21iIChidWYsIGNzZXQtPm1iY2hhcnNbaV0sICZzdGF0ZSkgIT0gKHNpemVfdCkgLTEpCistCQlyZV9zZXRfZmFzdG1hcCAoZmFzdG1hcCwgaWNhc2UsICoodW5zaWduZWQgY2hhciAqKSBidWYpOworLQkgICAgICBpZiAoKGJ1ZnAtPnN5bnRheCAmIFJFX0lDQVNFKSAmJiBkZmEtPm1iX2N1cl9tYXggPiAxKQorKwkgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAwOworKwkgICAgICBkbworIAkJeworLQkJICBpZiAoX193Y3J0b21iIChidWYsIHRvd2xvd2VyIChjc2V0LT5tYmNoYXJzW2ldKSwgJnN0YXRlKQorLQkJICAgICAgIT0gKHNpemVfdCkgLTEpCistCQkgICAgcmVfc2V0X2Zhc3RtYXAgKGZhc3RtYXAsIDAsICoodW5zaWduZWQgY2hhciAqKSBidWYpOworKwkJICBtYnN0YXRlX3QgbWJzOworKwkJICBtZW1zZXQgKCZtYnMsIDAsIHNpemVvZiAobWJzKSk7CisrCQkgIGlmIChfX21icnRvd2MgKE5VTEwsIChjaGFyICopICZjLCAxLCAmbWJzKSA9PSAoc2l6ZV90KSAtMikKKysJCSAgICByZV9zZXRfZmFzdG1hcCAoZmFzdG1hcCwgZmFsc2UsIChpbnQpIGMpOworIAkJfQorKwkgICAgICB3aGlsZSAoKytjICE9IDApOworIAkgICAgfQorKworKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgLyogLi4uIEVsc2UgY2F0Y2ggYWxsIGJ5dGVzIHdoaWNoIGNhbiBzdGFydCB0aGUgbWJjaGFycy4gICovCisrCSAgICAgIGZvciAoaSA9IDA7IGkgPCBjc2V0LT5ubWJjaGFyczsgKytpKQorKwkJeworKwkJICBjaGFyIGJ1ZlsyNTZdOworKwkJICBtYnN0YXRlX3Qgc3RhdGU7CisrCQkgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YgKHN0YXRlKSk7CisrCQkgIGlmIChfX3djcnRvbWIgKGJ1ZiwgY3NldC0+bWJjaGFyc1tpXSwgJnN0YXRlKSAhPSAoc2l6ZV90KSAtMSkKKysJCSAgICByZV9zZXRfZmFzdG1hcCAoZmFzdG1hcCwgaWNhc2UsICoodW5zaWduZWQgY2hhciAqKSBidWYpOworKwkJICBpZiAoKGJ1ZnAtPnN5bnRheCAmIFJFX0lDQVNFKSAmJiBkZmEtPm1iX2N1cl9tYXggPiAxKQorKwkJICAgIHsKKysJCSAgICAgIGlmIChfX3djcnRvbWIgKGJ1ZiwgdG93bG93ZXIgKGNzZXQtPm1iY2hhcnNbaV0pLCAmc3RhdGUpCisrCQkJICAhPSAoc2l6ZV90KSAtMSkKKysJCQlyZV9zZXRfZmFzdG1hcCAoZmFzdG1hcCwgZmFsc2UsICoodW5zaWduZWQgY2hhciAqKSBidWYpOworKwkJICAgIH0KKysgCQl9CisrIAkgICAgfQorIAl9CisgI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICAgICAgZWxzZSBpZiAodHlwZSA9PSBPUF9QRVJJT0QKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMTUwLXJlZ2V4LUJaNjk3LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8xNTAtcmVnZXgtQlo2OTcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI3MDYyOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMTUwLXJlZ2V4LUJaNjk3LnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2dsaWJjLzIuOS8wMDUzX2FsbF9nbGliYy0yLjktcmVnZXgtQlo2OTcucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitodHRwOi8vc291cmNld2FyZS5vcmcvbWwvbGliYy1hbHBoYS8yMDA5LTAxL21zZzAwMDA2Lmh0bWwKKworRnJvbSAzN2JkYzA1NWNlZWI2YjExNDRjMDc0NDhhNzIxMGQ5YWIzZmJiMmY1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4KK0RhdGU6IFRodSwgOCBKYW4gMjAwOSAwMDo0NzowNSArMDAwMAorU3ViamVjdDogW1BBVENIXSAocHJ1bmVfaW1wb3NzaWJsZV9ub2Rlcyk6IEhhbmRsZSBzaWZ0ZWRfc3RhdGVzWzBdIGJlaW5nIE5VTEwgYWxzbyBpZgorIHRoZXJlIGFyZSBubyBiYWNrcmVmZXJlbmNlcy4KKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL3Bvc2l4L3JlZ2V4ZWMuYyBnbGliYy0yXzkvcG9zaXgvcmVnZXhlYy5jCistLS0gZ2xpYmMtMl85Lm9yaWcvcG9zaXgvcmVnZXhlYy5jCTIwMDctMTAtMTIgMTk6NDc6MTMuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMl85L3Bvc2l4L3JlZ2V4ZWMuYwkyMDA5LTAyLTAyIDIyOjAwOjQzLjAwMDAwMDAwMCArMDEwMAorQEAgLTEwMDQsNiArMTAwNCwxMSBAQAorICAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZzY3R4LmxpbWl0cyk7CisgICAgICAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorIAlnb3RvIGZyZWVfcmV0dXJuOworKyAgICAgIGlmIChzaWZ0ZWRfc3RhdGVzWzBdID09IE5VTEwpCisrCXsKKysJICByZXQgPSBSRUdfTk9NQVRDSDsKKysJICBnb3RvIGZyZWVfcmV0dXJuOworKwl9CisgICAgIH0KKyAgIHJlX2ZyZWUgKG1jdHgtPnN0YXRlX2xvZyk7CisgICBtY3R4LT5zdGF0ZV9sb2cgPSBzaWZ0ZWRfc3RhdGVzOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8xNjAtaTM4Ni14ODZfNjQtcmV2ZXJ0LWNsb25lLWNmaS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMTYwLWkzODYteDg2XzY0LXJldmVydC1jbG9uZS1jZmkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFlOWE1OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMTYwLWkzODYteDg2XzY0LXJldmVydC1jbG9uZS1jZmkucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2xpYmMvMi45LzAwNzBfYWxsX2dsaWJjLWkzODYteDg2XzY0LXJldmVydC1jbG9uZS1jZmkucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCityZXZlcnQgY2ZpIGFkZGl0aW9ucyB0byBjbG9uZSBvbiBpMzg2L3g4Nl82NCB0byB3b3JrYXJvdW5kIHByb2JsZW1zIGluCitnY2MncyB1bndpbmRlciBjb2RlLiAgdGhpcyBpcyBub3QgYSBidWcgaW4gZ2xpYmMsIGl0IHRyaWdnZXJzIHByb2JsZW1zCitlbHNld2hlcmUuICB0aGlzIGNmaSBjb2RlIGRvZXMgbm90IGdhaW4gdXMgYSB3aG9sZSBsb3QgYW55d2F5cy4KKworaHR0cDovL2djYy5nbnUub3JnL21sL2djYy8yMDA2LTEyL21zZzAwMjkzLmh0bWwKKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvY2xvbmUuUyBnbGliYy0yXzkvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9jbG9uZS5TCistLS0gZ2xpYmMtMl85Lm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9jbG9uZS5TCTIwMDYtMTItMDQgMDA6MTI6MzYuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMl85L3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvY2xvbmUuUwkyMDA5LTAyLTAyIDIyOjAwOjQ1LjAwMDAwMDAwMCArMDEwMAorQEAgLTEyMCw5ICsxMjAsNiBAQAorIAlyZXQKKyAKKyBMKHRocmVhZF9zdGFydCk6CistCWNmaV9zdGFydHByb2M7CistCS8qIENsZWFyaW5nIGZyYW1lIHBvaW50ZXIgaXMgaW5zdWZmaWNpZW50LCB1c2UgQ0ZJLiAgKi8KKy0JY2ZpX3VuZGVmaW5lZCAoZWlwKTsKKyAJLyogTm90ZTogJWVzaSBpcyB6ZXJvLiAgKi8KKyAJbW92bAklZXNpLCVlYnAJLyogdGVybWluYXRlIHRoZSBzdGFjayBmcmFtZSAqLworICNpZmRlZiBSRVNFVF9QSUQKK0BAIC0xNTUsNyArMTUyLDYgQEAKKyAJam1wCUwoaGFzcGlkKQorIAkucHJldmlvdXMKKyAjZW5kaWYKKy0JY2ZpX2VuZHByb2M7CisgCisgCWNmaV9zdGFydHByb2MKKyBQU0VVRE9fRU5EIChCUF9TWU0gKF9fY2xvbmUpKQorZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC94ODZfNjQvY2xvbmUuUyBnbGliYy0yXzkvc3lzZGVwcy91bml4L3N5c3YvbGludXgveDg2XzY0L2Nsb25lLlMKKy0tLSBnbGliYy0yXzkub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC94ODZfNjQvY2xvbmUuUwkyMDA2LTEyLTA0IDAwOjEyOjM2LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTJfOS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC94ODZfNjQvY2xvbmUuUwkyMDA5LTAyLTAyIDIyOjAwOjQ1LjAwMDAwMDAwMCArMDEwMAorQEAgLTg5LDkgKzg5LDYgQEAKKyAJcmV0CisgCisgTCh0aHJlYWRfc3RhcnQpOgorLQljZmlfc3RhcnRwcm9jOworLQkvKiBDbGVhcmluZyBmcmFtZSBwb2ludGVyIGlzIGluc3VmZmljaWVudCwgdXNlIENGSS4gICovCistCWNmaV91bmRlZmluZWQgKHJpcCk7CisgCS8qIENsZWFyIHRoZSBmcmFtZSBwb2ludGVyLiAgVGhlIEFCSSBzdWdnZXN0cyB0aGlzIGJlIGRvbmUsIHRvIG1hcmsKKyAJICAgdGhlIG91dGVybW9zdCBmcmFtZSBvYnZpb3VzbHkuICAqLworIAl4b3JsCSVlYnAsICVlYnAKK0BAIC0xMTYsNyArMTEzLDYgQEAKKyAJLyogQ2FsbCBleGl0IHdpdGggcmV0dXJuIHZhbHVlIGZyb20gZnVuY3Rpb24gY2FsbC4gKi8KKyAJbW92cQklcmF4LCAlcmRpCisgCWNhbGwJSElEREVOX0pVTVBUQVJHRVQgKF9leGl0KQorLQljZmlfZW5kcHJvYzsKKyAKKyAJY2ZpX3N0YXJ0cHJvYzsKKyBQU0VVRE9fRU5EIChCUF9TWU0gKF9fY2xvbmUpKQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8xNzAtMi4xMC1kbnMtbm8tZ2V0aG9zdGJ5bmFtZTQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzE3MC0yLjEwLWRucy1uby1nZXRob3N0YnluYW1lNC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTRmOTIzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8xNzAtMi4xMC1kbnMtbm8tZ2V0aG9zdGJ5bmFtZTQucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2xpYmMvMi45LzAwODBfYWxsX2dsaWJjLTIuMTAtZG5zLW5vLWdldGhvc3RieW5hbWU0LnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQoraHR0cDovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD03MDYwCitodHRwOi8vYnVncy5nZW50b28ub3JnLzI1MDQ2OAorCitUaGUgZ2V0aG9zdGJ5bmFtZTQoKSBsb29rdXAgbWV0aG9kIGlzIHByb2JsZW1hdGljIHNpbmNlIGl0IGZpcmVzIG91dCBib3RoCit0aGUgQSBhbmQgQUFBQSBETlMgcXVlcmllcyBpbiBwYXJhbGxlbCBhbmQgb3ZlciB0aGUgc2FtZSBzb2NrZXQuIFRoaXMKK3Nob3VsZCB3b3JrIGluIHRoZW9yeSwgYnV0IGl0IHR1cm5zIG91dCB0aGF0IG1hbnkgY2hlYXAgRFNMIG1vZGVtcyBhbmQKK3NpbWlsYXIgZGV2aWNlcyBoYXZlIGJ1Z2d5IEROUyBzZXJ2ZXJzIC0gaWYgdGhlIEFBQUEgcXVlcnkgYXJyaXZlcyB0b28KK3F1aWNrbHkgYWZ0ZXIgdGhlIEEgcXVlcnksIHRoZSBzZXJ2ZXIgd2lsbCBnZW5lcmF0ZSBvbmx5IGEgc2luZ2xlIHJlcGx5Cit3aXRoIHRoZSBBIHF1ZXJ5IGlkIGJ1dCByZXR1cm5pbmcgYW4gZXJyb3IgZm9yIHRoZSBBQUFBIHF1ZXJ5OyB3ZSBnZXQKK3N0dWNrIHdhaXRpbmcgZm9yIHRoZSBzZWNvbmQgcmVwbHkuCisKK0ZvciBnZXRob3N0YnluYW1lNCgpIHVzZXJzIGFmZmVjdGVkLCBkaXNhYmxpbmcgSVB2NiBpbiB0aGUgc3lzdGVtIG1pZ2h0Cit3b3JrIGFyb3VuZCB0aGUgaXNzdWUsIHVuZm9ydHVuYXRlbHkgaXQgb25seSBoZWxwcyB3aXRoIGFwcGxpY2F0aW9ucwordXNpbmcgQUlfQUREUkNPTkZJRyAoZS5nLiBGaXJlZm94KTsgc29tZSAobm90YWJseSBlLmcuIFBpZGdpbikgbmVnbGVjdAordG8gZG8gdGhhdC4KKworUmVhbCBmaXggc2hvdWxkIGJlIHVzaW5nIHNlcGFyYXRlIHBvcnRzIGZvciB0aGUgQSBhbmQgQUFBQSBxdWVyaWVzLgorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2xpYmMtMl85Lm9yaWcvcmVzb2x2L1ZlcnNpb25zIGdsaWJjLTJfOS9yZXNvbHYvVmVyc2lvbnMKKy0tLSBnbGliYy0yXzkub3JpZy9yZXNvbHYvVmVyc2lvbnMJMjAwOC0wOC0wMSAxOToxNTozNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yXzkvcmVzb2x2L1ZlcnNpb25zCTIwMDktMDItMDIgMjI6MDA6NDYuMDAwMDAwMDAwICswMTAwCitAQCAtMTAyLDcgKzEwMiw3IEBACisgICAgIF9uc3NfZG5zX2dldGhvc3RieW5hbWVfcjsgX25zc19kbnNfZ2V0bmV0YnlhZGRyX3I7CisgICAgIF9uc3NfZG5zX2dldG5ldGJ5bmFtZV9yOyBfbnNzX2Ruc19nZXRjYW5vbm5hbWVfcjsKKyAgICAgX25zc19kbnNfZ2V0aG9zdGJ5YWRkcjJfcjsKKy0gICAgX25zc19kbnNfZ2V0aG9zdGJ5bmFtZTRfcjsKKysjICAgIF9uc3NfZG5zX2dldGhvc3RieW5hbWU0X3I7CisgICB9CisgfQorIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8xODAtbWF0aC10ZXN0cy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMTgwLW1hdGgtdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUwZWQxYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMTgwLW1hdGgtdGVzdHMucGF0Y2gKQEAgLTAsMCArMSw3MiBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2xpYmMvMi45LzAwOTBfYWxsX2dsaWJjLW1hdGgtdGVzdHMucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitGcm9tOiAiSm9zZXBoIFMuIE15ZXJzIiA8am9zZXBoIGF0IGNvZGVzb3VyY2VyeSBkb3QgY29tPgorVG86IGxpYmMtYWxwaGEgYXQgc291cmNld2FyZSBkb3Qgb3JnCitEYXRlOiBUdWUsIDE1IEp1bCAyMDA4IDE0OjQzOjA0ICswMDAwIChVVEMpCitTdWJqZWN0OiBleHBtMSB1bHBzCisKK0lmIHlvdSB0ZXN0IGdsaWJjIG9uIGk2ODYgd2l0aCBHQ0MgNC4zLCB5b3UgZ2V0IGEgdGVzdC1pbGRvdWJsIGZhaWx1cmU6CisKK0ZhaWx1cmU6IFRlc3Q6IGV4cG0xICgxKSA9PSBNX0VsIC0gMS4wCitSZXN1bHQ6CisgaXM6ICAgICAgICAgIDEuNzE4MjgxODI4NDU5MDQ1MjM1MzJlKzAwICAgMHhkLmJmMGE4YjE0NTc2OTUzNTAwMDAwcC0zCisgc2hvdWxkIGJlOiAgIDEuNzE4MjgxODI4NDU5MDQ1MjM1NDNlKzAwICAgMHhkLmJmMGE4YjE0NTc2OTUzNjAwMDAwcC0zCisgZGlmZmVyZW5jZTogIDEuMDg0MjAyMTcyNDg1NTA0NDM0MDFlLTE5ICAgMHg4LjAwMDAwMDAwMDAwMDAwMDAwMDAwcC02NgorIHVscCAgICAgICA6ICAxLjAwMDAKKyBtYXgudWxwICAgOiAgMC4wMDAwCitNYXhpbWFsIGVycm9yIG9mIGBleHBtMScKKyBpcyAgICAgIDogMSB1bHAKKyBhY2NlcHRlZDogMCB1bHAKKworV2hhdCBoYXBwZW5zIGlzIHRoYXQgdGhlIGlubGluZSBleHBhbnNpb24gb2YgZXhwbTFsIHVzZXMgX19idWlsdGluX2V4cG0xbCwKK2FuZCBHQ0MgNC4zIG9wdGltaXplcyBjYWxscyB0byBfX2J1aWx0aW5fZXhwbTFsIHdpdGggY29uc3RhbnQgYXJndW1lbnQgdG8KK2EgY29ycmVjdGx5IHJvdW5kZWQgcmVzdWx0IHVzaW5nIE1QRlIuICBUaGUgcmVzdWx0IHJldHVybmVkIGlzIHRodXMgdGhlCit2YWx1ZSBvZiBlLTEgcm91bmRlZCBvbmNlIHRvIGxvbmcgZG91YmxlIHByZWNpc2lvbi4gIEhvd2V2ZXIsIHRoZSB0ZXN0CitleHBlY3RzIE1fRWwgLSAxLjAsIGFuZCB0aGUgcmVzdWx0IG9mIHJvdW5kaW5nIGUgdG8gbG9uZyBkb3VibGUgcHJlY2lzaW9uLAordGhlbiBzdWJ0cmFjdGluZyAxLCBkaWZmZXJzIGluIHRoZSBsYXN0IHBsYWNlIGZyb20gdGhlIHJlc3VsdCBvZiByb3VuZGluZworZS0xIHRvIGxvbmcgZG91YmxlIHByZWNpc2lvbiAodGhlIGxhdHRlciBoYXMgc21hbGxlciBleHBvbmVudCwgYW5kIHRoZQorbGFzdCBiaXQgaXMgMSkuCisKK1RoZXJlIGFyZSB0d28gb2J2aW91cyBhcHByb2FjaGVzIHBvc3NpYmxlIHRvIGZpeGluZyB0aGlzLiAgVGhlIGZpcnN0IHBhdGNoCitiZWxvdyBjaGFuZ2VzIHRoZSBleHBlY3RhdGlvbiB0byBhIGRlY2ltYWwgZXhwYW5zaW9uIGZvciBlLTEgKHRha2VuIGZyb20KK3RoYXQgb2YgTV9FbCkgcmF0aGVyIHRoYW4gZG9pbmcgYXJpdGhtZXRpYyBpbiB0aGUgZXhwZWN0ZWQgdmFsdWUuICBUaGlzIGluCit0dXJuIHJlcXVpcmVzIHVscHMgdG8gYmUgc2V0IGZvciB0aGUgb3V0LW9mLWxpbmUgdmVyc2lvbiBvZiBleHBtMS4gIEl0CittaWdodCBhbHNvIG5lZWQgdWxwcyB0byBiZSBzZXQgZm9yIHRoZSBpbmxpbmUgdmVyc2lvbiBmb3Igb2xkZXIgY29tcGlsZXJzCitpZiB0aGV5IHNob3VsZCBjb250aW51ZSB0byBwYXNzIHRoZSB0ZXN0LCBhbmQgcG9zc2libHkgZm9yIG90aGVyIHRhcmdldHMuCitUaGUgc2Vjb25kIHBhdGNoIGJlbG93IHRha2VzIHRoZSBhbHRlcm5hdGl2ZSBhcHByb2FjaCBvZiBrZWVwaW5nIHRoZQorZXhpc3RpbmcgZXhwZWN0YXRpb24gKHdoaWNoIGhhcyB0aGUgd3JvbmcgYml0IGluIHRoZSBsYXN0IHBsYWNlKSBhbmQKK3NldHRpbmcgdWxwcyBmb3IgdGhlIGlubGluZSBleHBhbnNpb24gb2YgZXhwbTEsIHdoaWNoIGF2b2lkcyB0aGUgcmlzayBvZgorYnJlYWtpbmcgdGhlIHRlc3QgZm9yIG90aGVyIHRhcmdldHMuCisKKzIwMDgtMDctMTUgIEpvc2VwaCBNeWVycyAgPGpvc2VwaEBjb2Rlc291cmNlcnkuY29tPgorCisgICAgICAgICogc3lzZGVwcy9pMzg2L2ZwdS9saWJtLXRlc3QtdWxwczogQWRkIGlubGluZSBsb25nIGRvdWJsZSB1bHBzIGZvcgorICAgICAgICBleHBtMS4KKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL3N5c2RlcHMvaTM4Ni9mcHUvbGlibS10ZXN0LXVscHMgZ2xpYmMtMl85L3N5c2RlcHMvaTM4Ni9mcHUvbGlibS10ZXN0LXVscHMKKy0tLSBnbGliYy0yXzkub3JpZy9zeXNkZXBzL2kzODYvZnB1L2xpYm0tdGVzdC11bHBzCTIwMDYtMDEtMTUgMTg6NTk6MzcuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMl85L3N5c2RlcHMvaTM4Ni9mcHUvbGlibS10ZXN0LXVscHMJMjAwOS0wMi0wMiAyMjowMDo0Ny4wMDAwMDAwMDAgKzAxMDAKK0BAIC00NTMsNiArNDUzLDEwIEBACisgaWxkb3VibGU6IDgKKyBsZG91YmxlOiA4CisgCisrIyBleHBtMQorK1Rlc3QgImV4cG0xICgxKSA9PSBNX0VsIC0gMS4wIjoKKytpbGRvdWJsZTogMQorKworICMgZ2FtbWEKKyBUZXN0ICJnYW1tYSAoLTAuNSkgPT0gbG9nKDIqc3FydChwaSkpIjoKKyBkb3VibGU6IDEKK0BAIC0xMTM0LDYgKzExMzgsOSBAQAorIGlsZG91YmxlOiA4CisgbGRvdWJsZTogOAorIAorK0Z1bmN0aW9uOiAiZXhwbTEiOgorK2lsZG91YmxlOiAxCisrCisgRnVuY3Rpb246ICJnYW1tYSI6CisgZG91YmxlOiAxCisgaWRvdWJsZTogMQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8xOTAtcXVldWUtaGVhZGVyLXVwZGF0ZXMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzE5MC1xdWV1ZS1oZWFkZXItdXBkYXRlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDYyNjFkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8xOTAtcXVldWUtaGVhZGVyLXVwZGF0ZXMucGF0Y2gKQEAgLTAsMCArMSw4OSBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2xpYmMvMi45LzEwMTBfYWxsX2dsaWJjLXF1ZXVlLWhlYWRlci11cGRhdGVzLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorZ3JhYiBzb21lIHVwZGF0ZXMgZnJvbSBGcmVlQlNECisKK2h0dHA6Ly9idWdzLmdlbnRvby5vcmcvMjAxOTc5CisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9taXNjL3N5cy9xdWV1ZS5oIGdsaWJjLTJfOS9taXNjL3N5cy9xdWV1ZS5oCistLS0gZ2xpYmMtMl85Lm9yaWcvbWlzYy9zeXMvcXVldWUuaAkyMDA4LTAzLTA1IDA2OjUwOjMwLjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTJfOS9taXNjL3N5cy9xdWV1ZS5oCTIwMDktMDItMDIgMjI6MDA6NDguMDAwMDAwMDAwICswMTAwCitAQCAtMTM2LDYgKzEzNiwxMSBAQAorIAkJKHZhcik7CQkJCQkJCVwKKyAJCSh2YXIpID0gKCh2YXIpLT5maWVsZC5sZV9uZXh0KSkKKyAKKysjZGVmaW5lCUxJU1RfRk9SRUFDSF9TQUZFKHZhciwgaGVhZCwgZmllbGQsIHR2YXIpCQkJXAorKwlmb3IgKCh2YXIpID0gTElTVF9GSVJTVCgoaGVhZCkpOwkJCQlcCisrCSAgICAodmFyKSAmJiAoKHR2YXIpID0gTElTVF9ORVhUKCh2YXIpLCBmaWVsZCksIDEpOwkJXAorKwkgICAgKHZhcikgPSAodHZhcikpCisrCisgLyoKKyAgKiBMaXN0IGFjY2VzcyBtZXRob2RzLgorICAqLworQEAgLTE5Nyw2ICsyMDIsMTYgQEAKKyAjZGVmaW5lCVNMSVNUX0ZPUkVBQ0godmFyLCBoZWFkLCBmaWVsZCkJCQkJCVwKKyAJZm9yKCh2YXIpID0gKGhlYWQpLT5zbGhfZmlyc3Q7ICh2YXIpOyAodmFyKSA9ICh2YXIpLT5maWVsZC5zbGVfbmV4dCkKKyAKKysjZGVmaW5lCVNMSVNUX0ZPUkVBQ0hfU0FGRSh2YXIsIGhlYWQsIGZpZWxkLCB0dmFyKQkJCVwKKysJZm9yICgodmFyKSA9IFNMSVNUX0ZJUlNUKChoZWFkKSk7CQkJCVwKKysJICAgICh2YXIpICYmICgodHZhcikgPSBTTElTVF9ORVhUKCh2YXIpLCBmaWVsZCksIDEpOwkJXAorKwkgICAgKHZhcikgPSAodHZhcikpCisrCisrI2RlZmluZQlTTElTVF9GT1JFQUNIX1BSRVZQVFIodmFyLCB2YXJwLCBoZWFkLCBmaWVsZCkJCQlcCisrCWZvciAoKHZhcnApID0gJlNMSVNUX0ZJUlNUKChoZWFkKSk7CQkJCVwKKysJICAgICgodmFyKSA9ICoodmFycCkpICE9IE5VTEw7CQkJCQlcCisrCSAgICAodmFycCkgPSAmU0xJU1RfTkVYVCgodmFyKSwgZmllbGQpKQorKworIC8qCisgICogU2luZ2x5LWxpbmtlZCBMaXN0IGFjY2VzcyBtZXRob2RzLgorICAqLworQEAgLTI0Miw2ICsyNTcsMTIgQEAKKyAJKGhlYWQpLT5zdHFoX2xhc3QgPSAmKGVsbSktPmZpZWxkLnN0cWVfbmV4dDsJCQlcCisgfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisgCisrI2RlZmluZQlTVEFJTFFfTEFTVChoZWFkLCB0eXBlLCBmaWVsZCkJCQkJCVwKKysJKFNUQUlMUV9FTVBUWSgoaGVhZCkpID8JCQkJCQlcCisrCQlOVUxMIDoJCQkJCQkJXAorKwkgICAgICAgICgoc3RydWN0IHR5cGUgKikodm9pZCAqKQkJCQlcCisrCQkoKGNoYXIgKikoKGhlYWQpLT5zdHFoX2xhc3QpIC0gX19vZmZzZXRvZihzdHJ1Y3QgdHlwZSwgZmllbGQpKSkpCisrCisgI2RlZmluZQlTVEFJTFFfSU5TRVJUX0FGVEVSKGhlYWQsIGxpc3RlbG0sIGVsbSwgZmllbGQpIGRvIHsJCVwKKyAJaWYgKCgoZWxtKS0+ZmllbGQuc3RxZV9uZXh0ID0gKGxpc3RlbG0pLT5maWVsZC5zdHFlX25leHQpID09IE5VTEwpXAorIAkJKGhlYWQpLT5zdHFoX2xhc3QgPSAmKGVsbSktPmZpZWxkLnN0cWVfbmV4dDsJCVwKK0BAIC0yODYsNiArMzA3LDExIEBACisgI2RlZmluZQlTVEFJTFFfRklSU1QoaGVhZCkJKChoZWFkKS0+c3RxaF9maXJzdCkKKyAjZGVmaW5lCVNUQUlMUV9ORVhUKGVsbSwgZmllbGQpCSgoZWxtKS0+ZmllbGQuc3RxZV9uZXh0KQorIAorKyNkZWZpbmUJU1RBSUxRX0ZPUkVBQ0hfU0FGRSh2YXIsIGhlYWQsIGZpZWxkLCB0dmFyKQkJCVwKKysJZm9yICgodmFyKSA9IFNUQUlMUV9GSVJTVCgoaGVhZCkpOwkJCQlcCisrCSAgICAodmFyKSAmJiAoKHR2YXIpID0gU1RBSUxRX05FWFQoKHZhciksIGZpZWxkKSwgMSk7CQlcCisrCSAgICAodmFyKSA9ICh0dmFyKSkKKysKKyAKKyAvKgorICAqIFNpbXBsZSBxdWV1ZSBkZWZpbml0aW9ucy4KK0BAIC00MzcsMTEgKzQ2MywyMiBAQAorIAkJKHZhcik7CQkJCQkJCVwKKyAJCSh2YXIpID0gKCh2YXIpLT5maWVsZC50cWVfbmV4dCkpCisgCisrI2RlZmluZQlUQUlMUV9GT1JFQUNIX1NBRkUodmFyLCBoZWFkLCBmaWVsZCwgdHZhcikJCQlcCisrCWZvciAoKHZhcikgPSBUQUlMUV9GSVJTVCgoaGVhZCkpOwkJCQlcCisrCSAgICAodmFyKSAmJiAoKHR2YXIpID0gVEFJTFFfTkVYVCgodmFyKSwgZmllbGQpLCAxKTsJCVwKKysJICAgICh2YXIpID0gKHR2YXIpKQorKworICNkZWZpbmUJVEFJTFFfRk9SRUFDSF9SRVZFUlNFKHZhciwgaGVhZCwgaGVhZG5hbWUsIGZpZWxkKQkJXAorIAlmb3IgKCh2YXIpID0gKCooKChzdHJ1Y3QgaGVhZG5hbWUgKikoKGhlYWQpLT50cWhfbGFzdCkpLT50cWhfbGFzdCkpOwlcCisgCQkodmFyKTsJCQkJCQkJXAorIAkJKHZhcikgPSAoKigoKHN0cnVjdCBoZWFkbmFtZSAqKSgodmFyKS0+ZmllbGQudHFlX3ByZXYpKS0+dHFoX2xhc3QpKSkKKyAKKysjZGVmaW5lCVRBSUxRX0ZPUkVBQ0hfUkVWRVJTRV9TQUZFKHZhciwgaGVhZCwgaGVhZG5hbWUsIGZpZWxkLCB0dmFyKQlcCisrCWZvciAoKHZhcikgPSBUQUlMUV9MQVNUKChoZWFkKSwgaGVhZG5hbWUpOwkJCVwKKysJICAgICh2YXIpICYmICgodHZhcikgPSBUQUlMUV9QUkVWKCh2YXIpLCBoZWFkbmFtZSwgZmllbGQpLCAxKTsJXAorKwkgICAgKHZhcikgPSAodHZhcikpCisrCisrCisgI2RlZmluZQlUQUlMUV9DT05DQVQoaGVhZDEsIGhlYWQyLCBmaWVsZCkgZG8gewkJCQlcCisgCWlmICghVEFJTFFfRU1QVFkoaGVhZDIpKSB7CQkJCQlcCisgCQkqKGhlYWQxKS0+dHFoX2xhc3QgPSAoaGVhZDIpLT50cWhfZmlyc3Q7CQlcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzIwMC1hd2staW4tQy1sb2NhbGUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzIwMC1hd2staW4tQy1sb2NhbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRjYjlhZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMjAwLWF3ay1pbi1DLWxvY2FsZS5wYXRjaApAQCAtMCwwICsxLDIzIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nbGliYy8yLjkvMTAxOF9hbGxfZ2xpYmMtYXdrLWluLUMtbG9jYWxlLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQoraHR0cDovL2J1Z3MuZ2VudG9vLm9yZy8yNTI4MDIKKworMjAwOC0xMi0yOSAgTWlrZSBGcnlzaW5nZXIgIDx2YXBpZXJAZ2VudG9vLm9yZz4KKworCSogaWNvbnZkYXRhL01ha2VmaWxlIChpY29udi1ydWxlcyk6IFVzZSBMQ19BTEw9QyB3aGVuIHJ1bm5pbmcgYXdrIHNjcmlwdC4KKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL2ljb252ZGF0YS9NYWtlZmlsZSBnbGliYy0yXzkvaWNvbnZkYXRhL01ha2VmaWxlCistLS0gZ2xpYmMtMl85Lm9yaWcvaWNvbnZkYXRhL01ha2VmaWxlCTIwMDgtMDUtMTUgMDM6NTQ6MzEuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMl85L2ljb252ZGF0YS9NYWtlZmlsZQkyMDA5LTAyLTAyIDIyOjAwOjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTI4Niw3ICsyODYsNyBAQAorIAl7IGVjaG8gJChmaWx0ZXItb3V0IGxpYiUsICQobW9kdWxlcykpOyBcCisgCSAgZWNobyA4Yml0ICQoZ2VuLThiaXQtbW9kdWxlcyk7IFwKKyAJICBlY2hvIDhiaXQtZ2FwICQoZ2VuLThiaXQtZ2FwLW1vZHVsZXMpOyB9IHwgXAorLQkkKEFXSykgJ05SID09IDEgeyBcCisrCUxDX0FMTD1DICQoQVdLKSAnTlIgPT0gMSB7IFwKKyAJCSAgZm9yIChpID0gMTsgaSA8PSBORjsgaSsrKSB7IFwKKyAJCSAgICBwcmludGYgIiVzLXJvdXRpbmVzIDo9ICVzXG4iLCAkJGksIHRvbG93ZXIoJCRpKTsgXAorIAkJICAgIHByaW50ZiAiJXMtbWFwIDo9IGdjb252Lm1hcFxuIiwgJCRpOyBcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzIxMC0yLjktc3RybGVuLWhhY2sucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzIxMC0yLjktc3RybGVuLWhhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA3MTcyNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMjEwLTIuOS1zdHJsZW4taGFjay5wYXRjaApAQCAtMCwwICsxLDEwOSBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2xpYmMvMi45LzEwMjBfYWxsX2dsaWJjLTIuOS1zdHJsZW4taGFjay5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK2h0dHA6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTgwNworaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfmFtMjEvcHJvZ3RyaWNrcy5odG1sCisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9zdHJpbmcvc3RybGVuLmMgZ2xpYmMtMl85L3N0cmluZy9zdHJsZW4uYworLS0tIGdsaWJjLTJfOS5vcmlnL3N0cmluZy9zdHJsZW4uYwkyMDA1LTEyLTE0IDEyOjA5OjA3LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTJfOS9zdHJpbmcvc3RybGVuLmMJMjAwOS0wMi0wMiAyMjowMDo1MS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zMiw3ICszMiw3IEBACisgeworICAgY29uc3QgY2hhciAqY2hhcl9wdHI7CisgICBjb25zdCB1bnNpZ25lZCBsb25nIGludCAqbG9uZ3dvcmRfcHRyOworLSAgdW5zaWduZWQgbG9uZyBpbnQgbG9uZ3dvcmQsIG1hZ2ljX2JpdHMsIGhpbWFnaWMsIGxvbWFnaWM7CisrICB1bnNpZ25lZCBsb25nIGludCBsb25nd29yZCwgaGltYWdpYywgbG9tYWdpYzsKKyAKKyAgIC8qIEhhbmRsZSB0aGUgZmlyc3QgZmV3IGNoYXJhY3RlcnMgYnkgcmVhZGluZyBvbmUgY2hhcmFjdGVyIGF0IGEgdGltZS4KKyAgICAgIERvIHRoaXMgdW50aWwgQ0hBUl9QVFIgaXMgYWxpZ25lZCBvbiBhIGxvbmd3b3JkIGJvdW5kYXJ5LiAgKi8KK0BAIC00MiwyOCArNDIsMTQgQEAKKyAgICAgaWYgKCpjaGFyX3B0ciA9PSAnXDAnKQorICAgICAgIHJldHVybiBjaGFyX3B0ciAtIHN0cjsKKyAKKy0gIC8qIEFsbCB0aGVzZSBlbHVjaWRhdG9yeSBjb21tZW50cyByZWZlciB0byA0LWJ5dGUgbG9uZ3dvcmRzLAorLSAgICAgYnV0IHRoZSB0aGVvcnkgYXBwbGllcyBlcXVhbGx5IHdlbGwgdG8gOC1ieXRlIGxvbmd3b3Jkcy4gICovCistCisgICBsb25nd29yZF9wdHIgPSAodW5zaWduZWQgbG9uZyBpbnQgKikgY2hhcl9wdHI7CisgCistICAvKiBCaXRzIDMxLCAyNCwgMTYsIGFuZCA4IG9mIHRoaXMgbnVtYmVyIGFyZSB6ZXJvLiAgQ2FsbCB0aGVzZSBiaXRzCistICAgICB0aGUgImhvbGVzLiIgIE5vdGUgdGhhdCB0aGVyZSBpcyBhIGhvbGUganVzdCB0byB0aGUgbGVmdCBvZgorLSAgICAgZWFjaCBieXRlLCB3aXRoIGFuIGV4dHJhIGF0IHRoZSBlbmQ6CistCistICAgICBiaXRzOiAgMDExMTExMTAgMTExMTExMTAgMTExMTExMTAgMTExMTExMTEKKy0gICAgIGJ5dGVzOiBBQUFBQUFBQSBCQkJCQkJCQiBDQ0NDQ0NDQyBERERERERERAorLQorLSAgICAgVGhlIDEtYml0cyBtYWtlIHN1cmUgdGhhdCBjYXJyaWVzIHByb3BhZ2F0ZSB0byB0aGUgbmV4dCAwLWJpdC4KKy0gICAgIFRoZSAwLWJpdHMgcHJvdmlkZSBob2xlcyBmb3IgY2FycmllcyB0byBmYWxsIGludG8uICAqLworLSAgbWFnaWNfYml0cyA9IDB4N2VmZWZlZmZMOworICAgaGltYWdpYyA9IDB4ODA4MDgwODBMOworICAgbG9tYWdpYyA9IDB4MDEwMTAxMDFMOworICAgaWYgKHNpemVvZiAobG9uZ3dvcmQpID4gNCkKKyAgICAgeworICAgICAgIC8qIDY0LWJpdCB2ZXJzaW9uIG9mIHRoZSBtYWdpYy4gICovCisgICAgICAgLyogRG8gdGhlIHNoaWZ0IGluIHR3byBzdGVwcyB0byBhdm9pZCBhIHdhcm5pbmcgaWYgbG9uZyBoYXMgMzIgYml0cy4gICovCistICAgICAgbWFnaWNfYml0cyA9ICgoMHg3ZWZlZmVmZUwgPDwgMTYpIDw8IDE2KSB8IDB4ZmVmZWZlZmZMOworICAgICAgIGhpbWFnaWMgPSAoKGhpbWFnaWMgPDwgMTYpIDw8IDE2KSB8IGhpbWFnaWM7CisgICAgICAgbG9tYWdpYyA9ICgobG9tYWdpYyA8PCAxNikgPDwgMTYpIHwgbG9tYWdpYzsKKyAgICAgfQorQEAgLTc1LDU2ICs2MSwxMiBAQAorICAgICAgaWYgKmFueSBvZiB0aGUgZm91ciogYnl0ZXMgaW4gdGhlIGxvbmd3b3JkIGluIHF1ZXN0aW9uIGFyZSB6ZXJvLiAgKi8KKyAgIGZvciAoOzspCisgICAgIHsKKy0gICAgICAvKiBXZSB0ZW50YXRpdmVseSBleGl0IHRoZSBsb29wIGlmIGFkZGluZyBNQUdJQ19CSVRTIHRvCistCSBMT05HV09SRCBmYWlscyB0byBjaGFuZ2UgYW55IG9mIHRoZSBob2xlIGJpdHMgb2YgTE9OR1dPUkQuCistCistCSAxKSBJcyB0aGlzIHNhZmU/ICBXaWxsIGl0IGNhdGNoIGFsbCB0aGUgemVybyBieXRlcz8KKy0JIFN1cHBvc2UgdGhlcmUgaXMgYSBieXRlIHdpdGggYWxsIHplcm9zLiAgQW55IGNhcnJ5IGJpdHMKKy0JIHByb3BhZ2F0aW5nIGZyb20gaXRzIGxlZnQgd2lsbCBmYWxsIGludG8gdGhlIGhvbGUgYXQgaXRzCistCSBsZWFzdCBzaWduaWZpY2FudCBiaXQgYW5kIHN0b3AuICBTaW5jZSB0aGVyZSB3aWxsIGJlIG5vCistCSBjYXJyeSBmcm9tIGl0cyBtb3N0IHNpZ25pZmljYW50IGJpdCwgdGhlIExTQiBvZiB0aGUKKy0JIGJ5dGUgdG8gdGhlIGxlZnQgd2lsbCBiZSB1bmNoYW5nZWQsIGFuZCB0aGUgemVybyB3aWxsIGJlCistCSBkZXRlY3RlZC4KKy0KKy0JIDIpIElzIHRoaXMgd29ydGh3aGlsZT8gIFdpbGwgaXQgaWdub3JlIGV2ZXJ5dGhpbmcgZXhjZXB0CistCSB6ZXJvIGJ5dGVzPyAgU3VwcG9zZSBldmVyeSBieXRlIG9mIExPTkdXT1JEIGhhcyBhIGJpdCBzZXQKKy0JIHNvbWV3aGVyZS4gIFRoZXJlIHdpbGwgYmUgYSBjYXJyeSBpbnRvIGJpdCA4LiAgSWYgYml0IDgKKy0JIGlzIHNldCwgdGhpcyB3aWxsIGNhcnJ5IGludG8gYml0IDE2LiAgSWYgYml0IDggaXMgY2xlYXIsCistCSBvbmUgb2YgYml0cyA5LTE1IG11c3QgYmUgc2V0LCBzbyB0aGVyZSB3aWxsIGJlIGEgY2FycnkKKy0JIGludG8gYml0IDE2LiAgU2ltaWxhcmx5LCB0aGVyZSB3aWxsIGJlIGEgY2FycnkgaW50byBiaXQKKy0JIDI0LiAgSWYgb25lIG9mIGJpdHMgMjQtMzAgaXMgc2V0LCB0aGVyZSB3aWxsIGJlIGEgY2FycnkKKy0JIGludG8gYml0IDMxLCBzbyBhbGwgb2YgdGhlIGhvbGUgYml0cyB3aWxsIGJlIGNoYW5nZWQuCistCistCSBUaGUgb25lIG1pc2ZpcmUgb2NjdXJzIHdoZW4gYml0cyAyNC0zMCBhcmUgY2xlYXIgYW5kIGJpdAorLQkgMzEgaXMgc2V0OyBpbiB0aGlzIGNhc2UsIHRoZSBob2xlIGF0IGJpdCAzMSBpcyBub3QKKy0JIGNoYW5nZWQuICBJZiB3ZSBoYWQgYWNjZXNzIHRvIHRoZSBwcm9jZXNzb3IgY2FycnkgZmxhZywKKy0JIHdlIGNvdWxkIGNsb3NlIHRoaXMgbG9vcGhvbGUgYnkgcHV0dGluZyB0aGUgZm91cnRoIGhvbGUKKy0JIGF0IGJpdCAzMiEKKy0KKy0JIFNvIGl0IGlnbm9yZXMgZXZlcnl0aGluZyBleGNlcHQgMTI4J3MsIHdoZW4gdGhleSdyZSBhbGlnbmVkCistCSBwcm9wZXJseS4gICovCistCisgICAgICAgbG9uZ3dvcmQgPSAqbG9uZ3dvcmRfcHRyKys7CisgCistICAgICAgaWYgKAorLSNpZiAwCistCSAgLyogQWRkIE1BR0lDX0JJVFMgdG8gTE9OR1dPUkQuICAqLworLQkgICgoKGxvbmd3b3JkICsgbWFnaWNfYml0cykKKy0KKy0JICAgIC8qIFNldCB0aG9zZSBiaXRzIHRoYXQgd2VyZSB1bmNoYW5nZWQgYnkgdGhlIGFkZGl0aW9uLiAgKi8KKy0JICAgIF4gfmxvbmd3b3JkKQorLQorLQkgICAvKiBMb29rIGF0IG9ubHkgdGhlIGhvbGUgYml0cy4gIElmIGFueSBvZiB0aGUgaG9sZSBiaXRzCistCSAgICAgIGFyZSB1bmNoYW5nZWQsIG1vc3QgbGlrZWx5IG9uZSBvZiB0aGUgYnl0ZXMgd2FzIGEKKy0JICAgICAgemVyby4gICovCistCSAgICYgfm1hZ2ljX2JpdHMpCistI2Vsc2UKKy0JICAoKGxvbmd3b3JkIC0gbG9tYWdpYykgJiBoaW1hZ2ljKQorLSNlbmRpZgorLQkgICE9IDApCisrICAgICAgLyogVGhpcyBoYWNrIHRha2VuIGZyb20gQWxhbiBNeWNyb2Z0J3MgSEFLTUVNQyBwb3N0aW5ncy4KKysgICAgICAgICBTZWU6IGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35hbTIxL3Byb2d0cmlja3MuaHRtbCAqLworKyAgICAgIGlmICgoKGxvbmd3b3JkIC0gbG9tYWdpYykgJiB+bG9uZ3dvcmQgJiBoaW1hZ2ljKSAhPSAwKQorIAl7CistCSAgLyogV2hpY2ggb2YgdGhlIGJ5dGVzIHdhcyB0aGUgemVybz8gIElmIG5vbmUgb2YgdGhlbSB3ZXJlLCBpdCB3YXMKKy0JICAgICBhIG1pc2ZpcmU7IGNvbnRpbnVlIHRoZSBzZWFyY2guICAqLworIAorIAkgIGNvbnN0IGNoYXIgKmNwID0gKGNvbnN0IGNoYXIgKikgKGxvbmd3b3JkX3B0ciAtIDEpOworIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8yMjAtbWFudWFsLW5vLXBlcmwucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzIyMC1tYW51YWwtbm8tcGVybC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzEzY2E5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8yMjAtbWFudWFsLW5vLXBlcmwucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2xpYmMvMi45LzEwMzBfYWxsX2dsaWJjLW1hbnVhbC1uby1wZXJsLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorSWYgd2UncmUgdXNpbmcgYSBjdnMgc25hcHNob3Qgd2hpY2ggdXBkYXRlcyB0aGUgc291cmNlIGZpbGVzLCBhbmQKK3BlcmwgaXNuJ3QgaW5zdGFsbGVkIHlldCwgdGhlbiB3ZSBjYW4ndCByZWdlbiB0aGUgZG9jcy4gIE5vdCBhIGJpZworZGVhbCwgc28ganVzdCB3aGluZSBhIGxpdHRsZSBhbmQgY29udGludWUgb24gb3VyIG1lcnJ5IHdheS4KKworaHR0cDovL2J1Z3MuZ2VudG9vLm9yZy82MDEzMgorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2xpYmMtMl85Lm9yaWcvbWFudWFsL01ha2VmaWxlIGdsaWJjLTJfOS9tYW51YWwvTWFrZWZpbGUKKy0tLSBnbGliYy0yXzkub3JpZy9tYW51YWwvTWFrZWZpbGUJMjAwNi0wMS0wOCAwNzo0Mzo0Ny4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yXzkvbWFudWFsL01ha2VmaWxlCTIwMDktMDItMDIgMjI6MDA6NTMuMDAwMDAwMDAwICswMTAwCitAQCAtMTA0LDkgKzEwNCwxNCBAQAorIGxpYm0tZXJyLnRleGk6IHN0YW1wLWxpYm0tZXJyCisgc3RhbXAtbGlibS1lcnI6IGxpYm0tZXJyLXRhYi5wbCAkKHdpbGRjYXJkICQoZm9yZWFjaCBkaXIsJChzeXNkaXJzKSxcCisgCQkJCQkJICAgICAkKGRpcikvbGlibS10ZXN0LXVscHMpKQorK2lmbmVxICgkKFBFUkwpLG5vKQorIAlwd2Q9YHB3ZGA7IFwKKyAJJChQRVJMKSAkPCAkJHB3ZC8uLiA+IGxpYm0tZXJyLXRtcAorIAkkKG1vdmUtaWYtY2hhbmdlKSBsaWJtLWVyci10bXAgbGlibS1lcnIudGV4aQorK2Vsc2UKKysJZWNobyAiVW5hYmxlIHRvIHJlYnVpbGQgbWF0aCBkb2NzLCBubyBwZXJsIGluc3RhbGxlZCIKKysJdG91Y2ggbGlibS1lcnIudGV4aQorK2VuZGlmCisgCXRvdWNoICRACisgCisgIyBHZW5lcmF0ZSBUZXhpbmZvIGZpbGVzIGZyb20gdGhlIEMgc291cmNlIGZvciB0aGUgZXhhbXBsZSBwcm9ncmFtcy4KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMjMwLTIuMy4zLWxvY2FsZWRlZi1maXgtdHJhbXBvbGluZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMjMwLTIuMy4zLWxvY2FsZWRlZi1maXgtdHJhbXBvbGluZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWU5NTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8yMzAtMi4zLjMtbG9jYWxlZGVmLWZpeC10cmFtcG9saW5lLnBhdGNoCkBAIC0wLDAgKzEsNzQgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2dsaWJjLzIuOS8xMDQwX2FsbF8yLjMuMy1sb2NhbGVkZWYtZml4LXRyYW1wb2xpbmUucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCisjISAvYmluL3NoIC1lCisKKyMgRFA6IERlc2NyaXB0aW9uOiBGaXggbG9jYWxlZGVmIHNlZ2ZhdWx0IHdoZW4gcnVuIHVuZGVyIGV4ZWMtc2hpZWxkLAorIyAgICAgICAgUGFYIG9yIHNpbWlsYXIuICgjMjMxNDM4LCAjMTk4MDk5KQorIyBEUDogRHBhdGNoIEF1dGhvcjogSmFtZXMgVHJvdXAgPGphbWVzQG5vY3Jldy5vcmc+CisjIERQOiBQYXRjaCBBdXRob3I6IChwcm9iYWJseSkgSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4KKyMgRFA6IFVwc3RyZWFtIHN0YXR1czogVW5rbm93bgorIyBEUDogU3RhdHVzIERldGFpbHM6IFVua25vd24KKyMgRFA6IERhdGU6IDIwMDQtMDMtMTYKKworaWYgWyAkIyAtbmUgMiBdOyB0aGVuCisgICAgZWNobyA+JjIgImBiYXNlbmFtZSAkMGA6IHNjcmlwdCBleHBlY3RzIC1wYXRjaHwtdW5wYXRjaCBhcyBhcmd1bWVudCIKKyAgICBleGl0IDEKK2ZpCitjYXNlICIkMSIgaW4KKyAgICAtcGF0Y2gpIHBhdGNoIC1kICIkMiIgLWYgLS1uby1iYWNrdXAtaWYtbWlzbWF0Y2ggLXAxIDwgJDA7OworICAgIC11bnBhdGNoKSBwYXRjaCAtZCAiJDIiIC1mIC0tbm8tYmFja3VwLWlmLW1pc21hdGNoIC1SIC1wMSA8ICQwOzsKKyAgICAqKQorCWVjaG8gPiYyICJgYmFzZW5hbWUgJDBgOiBzY3JpcHQgZXhwZWN0cyAtcGF0Y2h8LXVucGF0Y2ggYXMgYXJndW1lbnQiCisJZXhpdCAxCitlc2FjCitleGl0IDAKKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL2xvY2FsZS9wcm9ncmFtcy8zbGV2ZWwuaCBnbGliYy0yXzkvbG9jYWxlL3Byb2dyYW1zLzNsZXZlbC5oCistLS0gZ2xpYmMtMl85Lm9yaWcvbG9jYWxlL3Byb2dyYW1zLzNsZXZlbC5oCTIwMDctMDctMTYgMDI6NTQ6NTkuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMl85L2xvY2FsZS9wcm9ncmFtcy8zbGV2ZWwuaAkyMDA5LTAyLTAyIDIyOjAwOjU0LjAwMDAwMDAwMCArMDEwMAorQEAgLTIwMyw2ICsyMDMsNDIgQEAKKyAJfQorICAgICB9CisgfQorKworKy8qIEdDQyBBVE0gc2VlbXMgdG8gZG8gYSBwb29yIGpvYiB3aXRoIHBvaW50ZXJzIHRvIG5lc3RlZCBmdW5jdGlvbnMgcGFzc2VkCisrICAgdG8gaW5saW5lZCBmdW5jdGlvbnMuICBIZWxwIGl0IGEgbGl0dGxlIGJpdCB3aXRoIHRoaXMgaGFjay4gICovCisrI2RlZmluZSB3Y2hlYWRfdGFibGVfaXRlcmF0ZSh0cCwgZm4pIFwKKytkbwkJCQkJCQkJCSAgICAgIFwKKysgIHsJCQkJCQkJCQkgICAgICBcCisrICAgIHN0cnVjdCB3Y2hlYWRfdGFibGUgKnQgPSAodHApOwkJCQkJICAgICAgXAorKyAgICB1aW50MzJfdCBpbmRleDE7CQkJCQkJCSAgICAgIFwKKysgICAgZm9yIChpbmRleDEgPSAwOyBpbmRleDEgPCB0LT5sZXZlbDFfc2l6ZTsgaW5kZXgxKyspCQkJICAgICAgXAorKyAgICAgIHsJCQkJCQkJCQkgICAgICBcCisrCXVpbnQzMl90IGxvb2t1cDEgPSB0LT5sZXZlbDFbaW5kZXgxXTsJCQkJICAgICAgXAorKwlpZiAobG9va3VwMSAhPSAoKHVpbnQzMl90KSB+MCkpCQkJCQkgICAgICBcCisrCSAgewkJCQkJCQkJICAgICAgXAorKwkgICAgdWludDMyX3QgbG9va3VwMV9zaGlmdGVkID0gbG9va3VwMSA8PCB0LT5xOwkJCSAgICAgIFwKKysJICAgIHVpbnQzMl90IGluZGV4MjsJCQkJCQkgICAgICBcCisrCSAgICBmb3IgKGluZGV4MiA9IDA7IGluZGV4MiA8ICgxIDw8IHQtPnEpOyBpbmRleDIrKykJCSAgICAgIFwKKysJICAgICAgewkJCQkJCQkJICAgICAgXAorKwkJdWludDMyX3QgbG9va3VwMiA9IHQtPmxldmVsMltpbmRleDIgKyBsb29rdXAxX3NoaWZ0ZWRdOwkgICAgICBcCisrCQlpZiAobG9va3VwMiAhPSAoKHVpbnQzMl90KSB+MCkpCQkJCSAgICAgIFwKKysJCSAgewkJCQkJCQkgICAgICBcCisrCQkgICAgdWludDMyX3QgbG9va3VwMl9zaGlmdGVkID0gbG9va3VwMiA8PCB0LT5wOwkJICAgICAgXAorKwkJICAgIHVpbnQzMl90IGluZGV4MzsJCQkJCSAgICAgIFwKKysJCSAgICBmb3IgKGluZGV4MyA9IDA7IGluZGV4MyA8ICgxIDw8IHQtPnApOyBpbmRleDMrKykJICAgICAgXAorKwkJICAgICAgewkJCQkJCQkgICAgICBcCisrCQkJc3RydWN0IGVsZW1lbnRfdCAqbG9va3VwMwkJCSAgICAgIFwKKysJCQkgID0gdC0+bGV2ZWwzW2luZGV4MyArIGxvb2t1cDJfc2hpZnRlZF07CSAgICAgIFwKKysJCQlpZiAobG9va3VwMyAhPSBOVUxMKQkJCQkgICAgICBcCisrCQkJICBmbiAoKCgoaW5kZXgxIDw8IHQtPnEpICsgaW5kZXgyKSA8PCB0LT5wKSArIGluZGV4MywgXAorKwkJCSAgICAgIGxvb2t1cDMpOwkJCQkJICAgICAgXAorKwkJICAgICAgfQkJCQkJCQkgICAgICBcCisrCQkgIH0JCQkJCQkJICAgICAgXAorKwkgICAgICB9CQkJCQkJCQkgICAgICBcCisrCSAgfQkJCQkJCQkJICAgICAgXAorKyAgICAgIH0JCQkJCQkJCQkgICAgICBcCisrICB9IHdoaWxlICgwKQorKworICNlbmRpZgorIAorICNpZm5kZWYgTk9fRklOQUxJWkUKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMjQwLWkzODYtTE9BRF9QSUNfUkVHLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8yNDAtaTM4Ni1MT0FEX1BJQ19SRUcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM2OTY5MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMjQwLWkzODYtTE9BRF9QSUNfUkVHLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2dsaWJjLzIuOS8xMDUwX2FsbF9nbGliYy1pMzg2LUxPQURfUElDX1JFRy5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK0Zyb20gZTQxMTc3ZWExOGE3N2E3ZjYyMzI4MjkzYjRmZDQ5YWUxNzQ4MmU3NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+CitEYXRlOiBTYXQsIDYgRGVjIDIwMDggMDA6MTU6MTcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gKF9kbF90bHNkZXNjX2R5bmFtaWMpOiBVc2UgTE9BRF9QSUNfUkVHIGluc3RlYWQgb2YgZG9pbmcgdGhpbmdzIG1hbnVhbGx5LgorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2xpYmMtMl85Lm9yaWcvc3lzZGVwcy9pMzg2L2RsLXRsc2Rlc2MuUyBnbGliYy0yXzkvc3lzZGVwcy9pMzg2L2RsLXRsc2Rlc2MuUworLS0tIGdsaWJjLTJfOS5vcmlnL3N5c2RlcHMvaTM4Ni9kbC10bHNkZXNjLlMJMjAwOC0wNS0xMyAwNzozMzowNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yXzkvc3lzZGVwcy9pMzg2L2RsLXRsc2Rlc2MuUwkyMDA5LTAyLTAyIDIyOjAwOjU2LjAwMDAwMDAwMCArMDEwMAorQEAgLTEyOCw4ICsxMjgsNyBAQAorIC5Mc2xvdzoKKyAJY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICgyOCkKKyAJbW92bAklZWJ4LCAxNiglZXNwKQorLQljYWxsCV9faTY4Ni5nZXRfcGNfdGh1bmsuYngKKy0JYWRkbAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4CisrCUxPQURfUElDX1JFRyAoYngpCisgCWNhbGwJX19fdGxzX2dldF9hZGRyQFBMVAorIAltb3ZsCTE2KCVlc3ApLCAlZWJ4CisgCWptcAkuTHJldApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8yNTAtcmVzb2x2LWR5bmFtaWMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzI1MC1yZXNvbHYtZHluYW1pYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmMzMzcwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8yNTAtcmVzb2x2LWR5bmFtaWMucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2xpYmMvMi45LzEwNTVfYWxsX2dsaWJjLXJlc29sdi1keW5hbWljLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorcmlwcGVkIGZyb20gU3VTRQorCitpZiAvZXRjL3Jlc29sdi5jb25mIGlzIHVwZGF0ZWQsIHRoZW4gbWFrZSBzdXJlIGFwcGxpY2F0aW9ucworYWxyZWFkeSBydW5uaW5nIGdldCB0aGUgdXBkYXRlZCBpbmZvcm1hdGlvbi4KKworaHR0cDovL2J1Z3MuZ2VudG9vLm9yZy8xNzc0MTYKKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL3Jlc29sdi9yZXNfbGliYy5jIGdsaWJjLTJfOS9yZXNvbHYvcmVzX2xpYmMuYworLS0tIGdsaWJjLTJfOS5vcmlnL3Jlc29sdi9yZXNfbGliYy5jCTIwMDYtMTAtMTEgMTA6NTk6MjguMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMl85L3Jlc29sdi9yZXNfbGliYy5jCTIwMDktMDItMDIgMjI6MDA6NTcuMDAwMDAwMDAwICswMTAwCitAQCAtMjIsNiArMjIsNyBAQAorICNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKyAjaW5jbHVkZSA8cmVzb2x2Lmg+CisgI2luY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgCisgCisgLyogVGhlIGZvbGxvd2luZyBiaXQgaXMgY29waWVkIGZyb20gcmVzX2RhdGEuYyAod2hlcmUgaXQgaXMgI2lmZGVmJ2VkCitAQCAtOTUsNiArOTYsMjAgQEAKKyBfX3Jlc19tYXliZV9pbml0IChyZXNfc3RhdGUgcmVzcCwgaW50IHByZWluaXQpCisgeworIAlpZiAocmVzcC0+b3B0aW9ucyAmIFJFU19JTklUKSB7CisrCQlzdGF0aWMgdGltZV90IGxhc3RfbXRpbWUsIGxhc3RfY2hlY2s7CisrCQl0aW1lX3Qgbm93OworKwkJc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKysJCQorKwkJdGltZSAoJm5vdyk7CisrCQlpZiAobm93ICE9IGxhc3RfY2hlY2spIHsKKysJCQlsYXN0X2NoZWNrID0gbm93OworKwkJCWlmIChzdGF0IChfUEFUSF9SRVNDT05GLCAmc3RhdGJ1ZikgPT0gMCAmJiBsYXN0X210aW1lICE9IHN0YXRidWYuc3RfbXRpbWUpIHsKKysJCQkJbGFzdF9tdGltZSA9IHN0YXRidWYuc3RfbXRpbWU7CisrCQkJCWF0b21pY2luY2xvY2sgKGxvY2spOworKwkJCQlhdG9taWNpbmMgKF9fcmVzX2luaXRzdGFtcCk7CisrCQkJCWF0b21pY2luY3VubG9jayAobG9jayk7CisrCQkJfQorKwkJfQorIAkJaWYgKF9fcmVzX2luaXRzdGFtcCAhPSByZXNwLT5fdS5fZXh0LmluaXRzdGFtcCkgeworIAkJCWlmIChyZXNwLT5uc2NvdW50ID4gMCkgeworIAkJCQlfX3Jlc19pY2xvc2UgKHJlc3AsIHRydWUpOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8yNjAtZmFkdmlzZTY0XzY0LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8yNjAtZmFkdmlzZTY0XzY0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZDAwMjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzI2MC1mYWR2aXNlNjRfNjQucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2xpYmMvMi45LzEwNzBfYWxsX2dsaWJjLWZhZHZpc2U2NF82NC5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK3JpcHBlZCBmcm9tIERlYmlhbgorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2xpYmMtMl85Lm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG9zaXhfZmFkdmlzZS5jIGdsaWJjLTJfOS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3NpeF9mYWR2aXNlLmMKKy0tLSBnbGliYy0yXzkub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3NpeF9mYWR2aXNlLmMJMjAwMy0wOC0xNyAwMjozNjoyMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yXzkvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG9zaXhfZmFkdmlzZS5jCTIwMDktMDItMDIgMjI6MDA6NTguMDAwMDAwMDAwICswMTAwCitAQCAtMzUsNiArMzUsMTkgQEAKKyAgICAgcmV0dXJuIElOVEVSTkFMX1NZU0NBTExfRVJSTk8gKHJldCwgZXJyKTsKKyAgIHJldHVybiAwOworICNlbHNlCisrIyBpZmRlZiBfX05SX2ZhZHZpc2U2NF82NAorKyAgSU5URVJOQUxfU1lTQ0FMTF9ERUNMIChlcnIpOyAgCisrICBpbnQgcmV0ID0gSU5URVJOQUxfU1lTQ0FMTCAoZmFkdmlzZTY0XzY0LCBlcnIsIDYsIGZkLAorKwkJCSAgICAgIF9fTE9OR19MT05HX1BBSVIgKChsb25nKSAob2Zmc2V0ID4+IDMxKSwKKysJCQkJCQkobG9uZykgb2Zmc2V0KSwKKysJCQkgICAgICBfX0xPTkdfTE9OR19QQUlSICgobG9uZykgKGxlbiA+PiAzMSksCisrCQkJCQkJKGxvbmcpIGxlbiksCisrCQkJICAgICAgYWR2aXNlKTsKKysgIGlmIChJTlRFUk5BTF9TWVNDQUxMX0VSUk9SX1AgKHJldCwgZXJyKSkKKysgICAgcmV0dXJuIElOVEVSTkFMX1NZU0NBTExfRVJSTk8gKHJldCwgZXJyKTsKKysgIHJldHVybiAwOworKyMgZWxzZQorICAgcmV0dXJuIEVOT1NZUzsKKysjIGVuZGlmCisgI2VuZGlmCisgfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8yNzAtbGRibC1uZXh0dG93YXJkZi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMjcwLWxkYmwtbmV4dHRvd2FyZGYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBmZmRmOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMjcwLWxkYmwtbmV4dHRvd2FyZGYucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2xpYmMvMi45LzEwNzNfYWxsX2dsaWJjLWxkYmwtbmV4dHRvd2FyZGYucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCityaXBwZWQgZnJvbSBEZWJpYW4KKwordGhpcyBjaGFuZ2Ugd2FzIG1hZGUgdG8gZ2VuZXJpYyBfX25leHR0b3dhcmRmLCBidXQgbm90IHRoZSBsb25nIGRvdWJsZSB2ZXJzaW9uCisKKzIwMDgtMDUtMDUgIEF1cmVsaWVuIEphcm5vICA8YXVyZWxpZW5AYXVyZWwzMi5uZXQ+CisKKwkqIHN5c2RlcHMvaWVlZTc1NC9sZGJsLTEyOC9zX25leHR0b3dhcmRmLmM6IEluY2x1ZGUgZmxvYXQuaC4KKwkoX19uZXh0dG93YXJkZik6IFVzZSBtYXRoX29wdF9iYXJyaWVyIGFuZAorCW1hdGhfZm9yY2VfZXZhbCBtYWNyb3MuICBJZiBGTFRfRVZBTF9NRVRIT0QgaXMgbm90IDAsIGZvcmNlCisJeCB0byBmbG9hdCB1c2luZyBhc20uCisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9zeXNkZXBzL2llZWU3NTQvbGRibC0xMjgvc19uZXh0dG93YXJkZi5jIGdsaWJjLTJfOS9zeXNkZXBzL2llZWU3NTQvbGRibC0xMjgvc19uZXh0dG93YXJkZi5jCistLS0gZ2xpYmMtMl85Lm9yaWcvc3lzZGVwcy9pZWVlNzU0L2xkYmwtMTI4L3NfbmV4dHRvd2FyZGYuYwkxOTk5LTA3LTE0IDAyOjA5OjQyLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTJfOS9zeXNkZXBzL2llZWU3NTQvbGRibC0xMjgvc19uZXh0dG93YXJkZi5jCTIwMDktMDItMDIgMjI6MDA6NTkuMDAwMDAwMDAwICswMTAwCitAQCAtMTksNyArMTksOCBAQAorICNlbmRpZgorIAorICNpbmNsdWRlICJtYXRoLmgiCistI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorKyNpbmNsdWRlIDxtYXRoX3ByaXZhdGUuaD4KKysjaW5jbHVkZSA8ZmxvYXQuaD4KKyAKKyAjaWZkZWYgX19TVERDX18KKyAJZmxvYXQgX19uZXh0dG93YXJkZihmbG9hdCB4LCBsb25nIGRvdWJsZSB5KQorQEAgLTQ0LDEwICs0NSwxMiBAQAorIAkgICByZXR1cm4geCt5OworIAlpZigobG9uZyBkb3VibGUpIHg9PXkpIHJldHVybiB5OwkvKiB4PXksIHJldHVybiB5ICovCisgCWlmKGl4PT0wKSB7CQkJCS8qIHggPT0gMCAqLworLQkgICAgZmxvYXQgeDI7CisrCSAgICBmbG9hdCB1OworIAkgICAgU0VUX0ZMT0FUX1dPUkQoeCwodV9pbnQzMl90KSgoaHk+PjMyKSYweDgwMDAwMDAwKXwxKTsvKiByZXR1cm4gKy1taW5zdWIqLworLQkgICAgeDIgPSB4Kng7CistCSAgICBpZih4Mj09eCkgcmV0dXJuIHgyOyBlbHNlIHJldHVybiB4OwkvKiByYWlzZSB1bmRlcmZsb3cgZmxhZyAqLworKwkgICAgdSA9IG1hdGhfb3B0X2JhcnJpZXIgKHgpOworKwkgICAgdSA9IHUgKiB1OworKwkgICAgbWF0aF9mb3JjZV9ldmFsICh1KTsJCS8qIHJhaXNlIHVuZGVyZmxvdyBmbGFnICovCisrCSAgICByZXR1cm4geDsKKyAJfQorIAlpZihoeD49MCkgewkJCQkvKiB4ID4gMCAqLworIAkgICAgaWYoaHk8MHx8KGl4Pj4yMyk+KGl5Pj40OCktMHgzZjgwCitAQCAtNjcsMTMgKzcwLDE2IEBACisgCSAgICB9CisgCX0KKyAJaHkgPSBoeCYweDdmODAwMDAwOworLQlpZihoeT49MHg3ZjgwMDAwMCkgcmV0dXJuIHgreDsJLyogb3ZlcmZsb3cgICovCisrCWlmKGh5Pj0weDdmODAwMDAwKSB7CisrCSAgeCA9IHgreDsJLyogb3ZlcmZsb3cgICovCisrCSAgaWYgKEZMVF9FVkFMX01FVEhPRCAhPSAwKQorKwkgICAgLyogRm9yY2UgY29udmVyc2lvbiB0byBmbG9hdC4gICovCisrCSAgICBhc20gKCIiIDogIittIih4KSk7CisrCSAgcmV0dXJuIHg7CisrCX0KKyAJaWYoaHk8MHgwMDgwMDAwMCkgewkJLyogdW5kZXJmbG93ICovCistCSAgICBmbG9hdCB4MiA9IHgqeDsKKy0JICAgIGlmKHgyIT14KSB7CQkvKiByYWlzZSB1bmRlcmZsb3cgZmxhZyAqLworLQkgICAgICAgIFNFVF9GTE9BVF9XT1JEKHgyLGh4KTsKKy0JCXJldHVybiB4MjsKKy0JICAgIH0KKysJICAgIGZsb2F0IHUgPSB4Kng7CisrCSAgICBtYXRoX2ZvcmNlX2V2YWwgKHUpOwkvKiByYWlzZSB1bmRlcmZsb3cgZmxhZyAqLworIAl9CisgCVNFVF9GTE9BVF9XT1JEKHgsaHgpOworIAlyZXR1cm4geDsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMjgwLXNlY3Rpb24tY29tbWVudHMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzI4MC1zZWN0aW9uLWNvbW1lbnRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYjMwOWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzI4MC1zZWN0aW9uLWNvbW1lbnRzLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2dsaWJjLzIuOS8xMDc1X2FsbF9nbGliYy1zZWN0aW9uLWNvbW1lbnRzLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQoraHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9tbC9iaW51dGlscy8yMDA0LTA0L21zZzAwNjY1Lmh0bWwKKworZml4ZXMgYnVpbGRpbmcgb24gc29tZSBhcmNoaXRlY3R1cmVzIChsaWtlIG02OGsvYXJtL2NyaXMvZXRjLi4uKSBiZWNhdXNlCitpdCBkb2VzIHRoZSByaWdodCB0aGluZworCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2xpYmMtMl85Lm9yaWcvaW5jbHVkZS9saWJjLXN5bWJvbHMuaCBnbGliYy0yXzkvaW5jbHVkZS9saWJjLXN5bWJvbHMuaAorLS0tIGdsaWJjLTJfOS5vcmlnL2luY2x1ZGUvbGliYy1zeW1ib2xzLmgJMjAwNi0xMS0wOSAxNjo1NzoxMi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yXzkvaW5jbHVkZS9saWJjLXN5bWJvbHMuaAkyMDA5LTAyLTAyIDIyOjAxOjAwLjAwMDAwMDAwMCArMDEwMAorQEAgLTI0MCwxMiArMjQwLDEyIEBACisgIyAgZGVmaW5lIF9fbWFrZV9zZWN0aW9uX3VuYWxsb2NhdGVkKHNlY3Rpb25fc3RyaW5nKQorICMgZW5kaWYKKyAKKy0vKiBUYWNraW5nIG9uICJcblx0IyIgdG8gdGhlIHNlY3Rpb24gbmFtZSBtYWtlcyBnY2MgcHV0IGl0J3MgYm9ndXMKKysvKiBUYWNraW5nIG9uICJcbiNBUFBcblx0IyIgdG8gdGhlIHNlY3Rpb24gbmFtZSBtYWtlcyBnY2MgcHV0IGl0J3MgYm9ndXMKKyAgICBzZWN0aW9uIGF0dHJpYnV0ZXMgb24gd2hhdCBsb29rcyBsaWtlIGEgY29tbWVudCB0byB0aGUgYXNzZW1ibGVyLiAgKi8KKyAjIGlmZGVmIEhBVkVfU0VDVElPTl9RVU9URVMKKy0jICBkZWZpbmUgX19zZWNfY29tbWVudCAiXCJcblx0I1wiIgorKyMgIGRlZmluZSBfX3NlY19jb21tZW50ICJcIlxuI0FQUFxuXHQjXCIiCisgIyBlbHNlCistIyAgZGVmaW5lIF9fc2VjX2NvbW1lbnQgIlxuXHQjIgorKyMgIGRlZmluZSBfX3NlY19jb21tZW50ICJcbiNBUFBcblx0IyIKKyAjIGVuZGlmCisgIyBkZWZpbmUgbGlua193YXJuaW5nKHN5bWJvbCwgbXNnKSBcCisgICBfX21ha2Vfc2VjdGlvbl91bmFsbG9jYXRlZCAoIi5nbnUud2FybmluZy4iICNzeW1ib2wpIFwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMjkwLW5vLWlubGluZS1nbW9uLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8yOTAtbm8taW5saW5lLWdtb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlkZjU2NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMjkwLW5vLWlubGluZS1nbW9uLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2dsaWJjLzIuOS8xMDgwX2FsbF9nbGliYy1uby1pbmxpbmUtZ21vbi5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK2h0dHA6Ly9idWdzLmdlbnRvby5vcmcvMTk2MjQ1CitodHRwOi8vc291cmNld2FyZS5vcmcvbWwvbGliYy1hbHBoYS8yMDA2LTA1L21zZzAwMDE3Lmh0bWwKKworQXR0YWNoZWQgaXMgYSBwYXRjaCB0byBhZGQgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkgdG8KK2NhbGxfZ21vbl9zdGFydC4KKworV2l0aG91dCB0aGlzIHBhdGNoLCB0aGUgc2VjIHNjcmlwdCB0aGF0IHByb2Nlc3NlZCBpbml0ZmluaS5zIHJlbW92ZXMgYQorcGFydCBvZiBpbmxpbmVkIGNhbGxfZ21vbl9zdGFydCwgY2F1c2luZyB1bmRlZmluZWQgbGFiZWwgZXJyb3JzLgorCitUaGlzIHBhdGNoIHNvbHZlcyB0aGUgcHJvYmxlbSBieSBmb3JjaW5nIGdjYyBub3QgdG8gaW5saW5lCitjYWxsX2dtb25fc3RhcnQgd2l0aCBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKS4KKworVGVzdGVkIGJ5IGJ1aWxkaW5nIGZvciBhcm0tbm9uZS1saXh1eC1nbnVlYWJpLiAgT0sgdG8gYXBwbHk/CisKK0thenUgSGlyYXRhCisKKzIwMDYtMDUtMDcgIEthenUgSGlyYXRhICAmbHQ7a2F6dUBjb2Rlc291cmNlcnkuY29tJmd0OworCisJKiBzeXNkZXBzL2dlbmVyaWMvaW5pdGZpbmkuYyAoY2FsbF9nbW9uX3N0YXJ0KTogQWRkCisJX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkuCisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9zeXNkZXBzL2dlbmVyaWMvaW5pdGZpbmkuYyBnbGliYy0yXzkvc3lzZGVwcy9nZW5lcmljL2luaXRmaW5pLmMKKy0tLSBnbGliYy0yXzkub3JpZy9zeXNkZXBzL2dlbmVyaWMvaW5pdGZpbmkuYwkyMDA3LTA2LTE3IDIwOjAyOjQwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTJfOS9zeXNkZXBzL2dlbmVyaWMvaW5pdGZpbmkuYwkyMDA5LTAyLTAyIDIyOjAxOjAxLjAwMDAwMDAwMCArMDEwMAorQEAgLTcwLDcgKzcwLDcgQEAKKyAvKiBUaGUgYmVnaW5uaW5nIG9mIF9pbml0OiAgKi8KKyBhc20gKCJcbi8qQF9pbml0X1BST0xPR19CRUdJTlMqLyIpOworIAorLXN0YXRpYyB2b2lkCisrc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKKyBjYWxsX2dtb25fc3RhcnQodm9pZCkKKyB7CisgICBleHRlcm4gdm9pZCBfX2dtb25fc3RhcnRfXyAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKHdlYWspKTsgLyp3ZWFrX2V4dGVybiAoX19nbW9uX3N0YXJ0X18pOyovCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzMwMC0yLjktY2hlY2tfbmF0aXZlLWhlYWRlcnMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzMwMC0yLjktY2hlY2tfbmF0aXZlLWhlYWRlcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNiNjQ4YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMzAwLTIuOS1jaGVja19uYXRpdmUtaGVhZGVycy5wYXRjaApAQCAtMCwwICsxLDIyIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nbGliYy8yLjkvMTA4NV9hbGxfZ2xpYmMtMi45LWNoZWNrX25hdGl2ZS1oZWFkZXJzLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorbWFueSBwb3J0cyBoaXQgdGhpcyB3YXJuaW5nOgorLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvY2hlY2tfbmF0aXZlLmM6NDY6IHdhcm5pbmc6IGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9uICdtZW1zZXQnCisuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9jaGVja19uYXRpdmUuYzo0Njogd2FybmluZzogaW1wbGljaXQgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb24gJ21lbXNldCcKKworc25pcHBlZCBmcm9tIHN1c2UKKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2NoZWNrX25hdGl2ZS5jIGdsaWJjLTJfOS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9jaGVja19uYXRpdmUuYworLS0tIGdsaWJjLTJfOS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2NoZWNrX25hdGl2ZS5jCTIwMDctMTEtMjQgMDQ6MTI6MTcuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMl85L3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2NoZWNrX25hdGl2ZS5jCTIwMDktMDItMDIgMjI6MDE6MDMuMDAwMDAwMDAwICswMTAwCitAQCAtMjMsNiArMjMsNyBAQAorICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8dGltZS5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8bmV0L2lmLmg+CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzMxMC0yLjMuNi1maXgtcHI2MzEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzMxMC0yLjMuNi1maXgtcHI2MzEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE0N2E2ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMzEwLTIuMy42LWZpeC1wcjYzMS5wYXRjaApAQCAtMCwwICsxLDUwIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nbGliYy8yLjkvMTA5MF9hbGxfZ2xpYmMtMi4zLjYtZml4LXByNjMxLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorRnJvbSBkYW5rQGtlZ2VsLmNvbQorV2VkIEp1biAxNSAwOToxMjo0MyBQRFQgMjAwNQorCitGaXhlcworCitidWlsZC1nbGliYy9saWJjLmEobnNzd2l0Y2gubykoLmRhdGErMHg2NCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9uc3NfZmlsZXNfZ2V0YWxpYXNlbnRfcicKK2J1aWxkLWdsaWJjL2xpYmMuYShuc3N3aXRjaC5vKSguZGF0YSsweDZjKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX25zc19maWxlc19lbmRhbGlhc2VudCcKKy4uLiA1MyBsaW5lcyBkZWxldGVkIC4uLgorYnVpbGQtZ2xpYmMvbGliYy5hKG5zc3dpdGNoLm8pKC5kYXRhKzB4MjFjKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX25zc19maWxlc19nZXRzcG5hbV9yJworY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKK21ha2VbMl06ICoqKiBbL2J1aWxkL2djYy0zLjQuMy1nbGliYy0yLjMuNS1oZHJzLTIuNi4xMS4yL2k2ODYtdW5rbm93bi1saW51eC1nbnUvYnVpbGQtZ2xpYmMvZWxmL2xkY29uZmlnXSBFcnJvciAxCisKK3doZW4gYnVpbGRpbmcgZ2xpYmMgd2l0aCAtLWVuYWJsZS1zdGF0aWMtbnNzLgorCitTZWUgaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NjMxCisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9NYWtlY29uZmlnIGdsaWJjLTJfOS9NYWtlY29uZmlnCistLS0gZ2xpYmMtMl85Lm9yaWcvTWFrZWNvbmZpZwkyMDA5LTAyLTAyIDIyOjAwOjM2LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTJfOS9NYWtlY29uZmlnCTIwMDktMDItMDIgMjI6MDE6MDQuMDAwMDAwMDAwICswMTAwCitAQCAtNTA5LDcgKzUwOSw3IEBACisgCisgIyBUaGUgc3RhdGljIGxpYnJhcmllcy4KKyBpZmVxICh5ZXMsJChidWlsZC1zdGF0aWMpKQorLWxpbmstbGliYy1zdGF0aWMgPSAkKGNvbW1vbi1vYmpwZngpbGliYy5hICQoc3RhdGljLWdudWxpYikgJChjb21tb24tb2JqcGZ4KWxpYmMuYQorK2xpbmstbGliYy1zdGF0aWMgPSAkKGNvbW1vbi1vYmpwZngpbGliYy5hICQoc3RhdGljLWdudWxpYikgJChvdGhlcmxpYnMpICQoY29tbW9uLW9ianBmeClsaWJjLmEKKyBlbHNlCisgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKyAjIFdlIGNhbiB0cnkgdG8gbGluayB0aGUgcHJvZ3JhbXMgd2l0aCBsaWIqX3BpYy5hLi4uCitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL2VsZi9NYWtlZmlsZSBnbGliYy0yXzkvZWxmL01ha2VmaWxlCistLS0gZ2xpYmMtMl85Lm9yaWcvZWxmL01ha2VmaWxlCTIwMDgtMTAtMzEgMjE6MzU6MTEuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMl85L2VsZi9NYWtlZmlsZQkyMDA5LTAyLTAyIDIyOjAxOjA0LjAwMDAwMDAwMCArMDEwMAorQEAgLTEyMSw2ICsxMjEsMTMgQEAKKyBpbnN0YWxsLWJpbi1zY3JpcHQgPSBsZGQKKyBlbmRpZgorIAorK2lmZXEgKHllcywkKGJ1aWxkLXN0YXRpYy1uc3MpKQorK25zc29iamRpciA6PSAkKHBhdHN1YnN0IC4uLyQoc3ViZGlyKSwuLCQoY29tbW9uLW9ianBmeCluc3MpCisrcmVzb2x2b2JqZGlyIDo9ICQocGF0c3Vic3QgLi4vJChzdWJkaXIpLC4sJChjb21tb24tb2JqcGZ4KXJlc29sdikKKytvdGhlcmxpYnMgKz0gJChuc3NvYmpkaXIpL2xpYm5zc19maWxlcy5hICQocmVzb2x2b2JqZGlyKS9saWJuc3NfZG5zLmEgXAorKwkgICAgICQocmVzb2x2b2JqZGlyKS9saWJyZXNvbHYuYQorK2VuZGlmCisrCisgb3RoZXJzCQk9IHNwcm9mIHNsbgorIGluc3RhbGwtYmluCT0gc3Byb2YKKyBvdGhlcnMtc3RhdGljICAgPSBzbG4KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMzIwLTIuOS1hc3N1bWUtcGlwZTIucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzMyMC0yLjktYXNzdW1lLXBpcGUyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMGZhOTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzMyMC0yLjktYXNzdW1lLXBpcGUyLnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2dsaWJjLzIuOS8xMDk1X2FsbF9nbGliYy0yLjktYXNzdW1lLXBpcGUyLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQoraHR0cDovL2J1Z3MuZ2VudG9vLm9yZy8yNTAzNDIKK2h0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTk2ODUKKword2UgY2FudCBhc3N1bWUgc29ja19jbG9leGVjIGFuZCBwaXBlMiBhcmUgYm91bmQgdG9nZXRoZXIgYXMgdGhlIGZvcm1lciBkZWZpbmVzCithcmUgZm91bmQgaW4gZ2xpYmMgb25seSB3aGlsZSB0aGUgbGF0dGVyIGFyZSBhIGNvbWJvIG9mIGtlcm5lbCBoZWFkZXJzIGFuZAorZ2xpYmMuICBzbyBpZiB3ZSBkbyBhIHJ1bnRpbWUgZGV0ZWN0aW9uIG9mIFNPQ0tfQ0xPRVhFQywgYnV0IHBpcGUyKCkgaXMgYSBzdHViCitpbnNpZGUgb2YgZ2xpYmMsIHdlIGhpdCBhIHByb2JsZW0uICBmb3IgZXhhbXBsZToKKworI2luY2x1ZGUgPGdycC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CittYWluKCkKK3sKKwlnZXRncm5hbSgicG9ydGFnZSIpOworCWlmICghcG9wZW4oImxzIiwgInIiKSkKKwkJcGVycm9yKCJwb3BlbigpIik7Cit9CisKK2dldGdybmFtKCkgd2lsbCBkZXRlY3QgdGhhdCB0aGUga2VybmVsIHN1cHBvcnRzIFNPQ0tfQ0xPRVhFQyBhbmQgdGhlbiBzZXQgYm90aAorX19oYXZlX3NvY2tfY2xvZXhlYyBhbmQgX19oYXZlX3BpcGUyIHRvIHRydWUuICBidXQgaWYgZ2xpYmMgd2FzIGJ1aWx0IGFnYWluc3QKK29sZGVyIGtlcm5lbCBoZWFkZXJzIHdoZXJlIF9fTlJfcGlwZTIgZG9lcyBub3QgZXhpc3QsIGdsaWJjIHdpbGwgaGF2ZSBhIEVOT1NZUworc3R1YiBmb3IgaXQuICBzbyBwb3BlbigpIHdpbGwgYWx3YXlzIGZhaWwgYXMgZ2xpYmMgYXNzdW1lcyBwaXBlMigpIHdvcmtzLgorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2xpYmMtMl85Lm9yaWcvaW5jbHVkZS91bmlzdGQuaCBnbGliYy0yXzkvaW5jbHVkZS91bmlzdGQuaAorLS0tIGdsaWJjLTJfOS5vcmlnL2luY2x1ZGUvdW5pc3RkLmgJMjAwOC0wNy0yNyAyMDoyMzoxNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yXzkvaW5jbHVkZS91bmlzdGQuaAkyMDA5LTAyLTAyIDIyOjAxOjA1LjAwMDAwMDAwMCArMDEwMAorQEAgLTE2Nyw5ICsxNjcsNiBAQAorIGV4dGVybiBpbnQgX19wYXVzZV9ub2NhbmNlbCAodm9pZCkgYXR0cmlidXRlX2hpZGRlbjsKKyAKKyBleHRlcm4gaW50IF9faGF2ZV9zb2NrX2Nsb2V4ZWM7CistLyogQXQgbG90IG9mIG90aGVyIGZ1bmN0aW9uYWxpdHkgYmVjYW1lIGF2YWlsYWJsZSBhdCB0aGUgc2FtZSB0aW1lIGFzCistICAgU09DS19DTE9FWEVDLiAgQXZvaWQgZGVmaW5pbmcgc2VwYXJhdGUgdmFyaWFibGVzIGZvciBhbGwgb2YgdGhlbQorLSAgIHVubGVzcyBpdCBpcyByZWFsbHkgbmVjZXNzYXJ5LiAgKi8KKy0jZGVmaW5lIF9faGF2ZV9waXBlMiBfX2hhdmVfc29ja19jbG9leGVjCisrZXh0ZXJuIGludCBfX2hhdmVfcGlwZTI7CisgCisgI2VuZGlmCitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL3NvY2tldC9oYXZlX3NvY2tfY2xvZXhlYy5jIGdsaWJjLTJfOS9zb2NrZXQvaGF2ZV9zb2NrX2Nsb2V4ZWMuYworLS0tIGdsaWJjLTJfOS5vcmlnL3NvY2tldC9oYXZlX3NvY2tfY2xvZXhlYy5jCTIwMDgtMDctMjUgMTg6NDY6MjMuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMl85L3NvY2tldC9oYXZlX3NvY2tfY2xvZXhlYy5jCTIwMDktMDItMDIgMjI6MDE6MDUuMDAwMDAwMDAwICswMTAwCitAQCAtMTYsOSArMTYsMTQgQEAKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKyAKKysjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICNpbmNsdWRlIDxrZXJuZWwtZmVhdHVyZXMuaD4KKyAKKyAjaWYgZGVmaW5lZCBTT0NLX0NMT0VYRUMgJiYgIWRlZmluZWQgX19BU1NVTUVfU09DS19DTE9FWEVDCisgaW50IF9faGF2ZV9zb2NrX2Nsb2V4ZWM7CisgI2VuZGlmCisrCisrI2lmIGRlZmluZWQgT19DTE9FWEVDICYmICFkZWZpbmVkIF9fQVNTVU1FX1BJUEUyCisraW50IF9faGF2ZV9waXBlMjsKKysjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMzMwLTIuMy4zLWNoaW5hLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8zMzAtMi4zLjMtY2hpbmEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUwY2M4MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMzMwLTIuMy4zLWNoaW5hLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2dsaWJjLzIuOS8xMTAwX2FsbF9nbGliYy0yLjMuMy1jaGluYS5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9sb2NhbGVkYXRhL2xvY2FsZXMvemhfVFcgZ2xpYmMtMl85L2xvY2FsZWRhdGEvbG9jYWxlcy96aF9UVworLS0tIGdsaWJjLTJfOS5vcmlnL2xvY2FsZWRhdGEvbG9jYWxlcy96aF9UVwkyMDA0LTExLTAxIDAwOjQyOjI4LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTJfOS9sb2NhbGVkYXRhL2xvY2FsZXMvemhfVFcJMjAwOS0wMi0wMiAyMjowMTowNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xLDcgKzEsNyBAQAorIGNvbW1lbnRfY2hhciAlCisgZXNjYXBlX2NoYXIgLworICUKKy0lIENoaW5lc2UgbGFuZ3VhZ2UgbG9jYWxlIGZvciBUYWl3YW4gUi5PLkMuCisrJSBDaGluZXNlIGxhbmd1YWdlIGxvY2FsZSBmb3IgVGFpd2FuCisgJSBjaGFybWFwOiBCSUc1LUNQOTUwCisgJQorICUgT3JpZ2luYWwgQXV0aG9yOgorQEAgLTE3LDcgKzE3LDcgQEAKKyAlIFJlZmVyZW5jZToJaHR0cDovL3d3d29sZC5ka3V1Zy5kay9KVEMxL1NDMjIvV0cyMC9kb2NzL242OTAucGRmCisgCisgTENfSURFTlRJRklDQVRJT04KKy10aXRsZSAgICAgICJDaGluZXNlIGxvY2FsZSBmb3IgVGFpd2FuIFIuTy5DLiIKKyt0aXRsZSAgICAgICJDaGluZXNlIGxvY2FsZSBmb3IgVGFpd2FuIgorIHNvdXJjZSAgICAgIiIKKyBhZGRyZXNzICAgICIiCisgY29udGFjdCAgICAiIgorQEAgLTI1LDcgKzI1LDcgQEAKKyB0ZWwgICAgICAgICIiCisgZmF4ICAgICAgICAiIgorIGxhbmd1YWdlICAgIkNoaW5lc2UiCistdGVycml0b3J5ICAiVGFpd2FuIFIuTy5DLiIKKyt0ZXJyaXRvcnkgICJUYWl3YW4iCisgcmV2aXNpb24gICAiMC4yIgorIGRhdGUgICAgICAgIjIwMDAtMDgtMDIiCisgJQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8zNDAtbmV3LXZhbGVuY2lhbi1sb2NhbGUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzM0MC1uZXctdmFsZW5jaWFuLWxvY2FsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWE2Y2FhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8zNDAtbmV3LXZhbGVuY2lhbi1sb2NhbGUucGF0Y2gKQEAgLTAsMCArMSwxMjAgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2dsaWJjLzIuOS8xMTAzX2FsbF9nbGliYy1uZXctdmFsZW5jaWFuLWxvY2FsZS5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK2h0dHA6Ly9idWdzLmdlbnRvby5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTgxNQoraHR0cDovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0yNTIyCisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9sb2NhbGVkYXRhL1NVUFBPUlRFRCBnbGliYy0yXzkvbG9jYWxlZGF0YS9TVVBQT1JURUQKKy0tLSBnbGliYy0yXzkub3JpZy9sb2NhbGVkYXRhL1NVUFBPUlRFRAkyMDA4LTA5LTE2IDIzOjI0OjU3LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTJfOS9sb2NhbGVkYXRhL1NVUFBPUlRFRAkyMDA5LTAyLTAyIDIyOjAxOjA4LjAwMDAwMDAwMCArMDEwMAorQEAgLTcyLDYgKzcyLDggQEAKKyBjYV9FUy5VVEYtOC9VVEYtOCBcCisgY2FfRVMvSVNPLTg4NTktMSBcCisgY2FfRVNAZXVyby9JU08tODg1OS0xNSBcCisrY2FfRVMuVVRGLThAdmFsZW5jaWEvVVRGLTggXAorK2NhX0VTQHZhbGVuY2lhL0lTTy04ODU5LTE1IFwKKyBjYV9GUi5VVEYtOC9VVEYtOCBcCisgY2FfRlIvSVNPLTg4NTktMTUgXAorIGNhX0lULlVURi04L1VURi04IFwKK2RpZmYgLWR1ck4gZ2xpYmMtMl85Lm9yaWcvbG9jYWxlZGF0YS9sb2NhbGVzL2NhX0VTQHZhbGVuY2lhIGdsaWJjLTJfOS9sb2NhbGVkYXRhL2xvY2FsZXMvY2FfRVNAdmFsZW5jaWEKKy0tLSBnbGliYy0yXzkub3JpZy9sb2NhbGVkYXRhL2xvY2FsZXMvY2FfRVNAdmFsZW5jaWEJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yXzkvbG9jYWxlZGF0YS9sb2NhbGVzL2NhX0VTQHZhbGVuY2lhCTIwMDktMDItMDIgMjI6MDE6MDguMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDk2IEBACisrY29tbWVudF9jaGFyICUKKytlc2NhcGVfY2hhciAgLworKyUKKyslIFZhbGVuY2lhbiAoc291dGhlcm4gQ2F0YWxhbikgbG9jYWxlIGZvciBTcGFpbiB3aXRoIEV1cm8KKyslCisrJSBOb3RlIHRoYXQgdGhpcyBsb2NhbGUgaXMgYWxtb3N0IHRoZSBzYW1lIGFzIGNhX0VTQGV1cm8uICBUaGUgcG9pbnQgb2YgaGF2aW5nCisrJSBhIHNlcGFyYXRlIGxvY2FsZSBpcyBvbmx5IGZvciBQTyB0cmFuc2xhdGlvbnMsIHdoaWNoIGhhdmUgYSBsb3Qgb2Ygc29jaWFsCisrJSBzdXBwb3J0IGFuZCBhcmUgdmVyeSBhcHByZWNpYXRlZCBieSB0aGUgVmFsZW5jaWFuLXNwZWFraW5nIGNvbW11bml0eS4KKyslCisrJSBDb250YWN0OiBKb3JkaSBNYWxsYWNoCisrJSBFbWFpbDogam9yZGlAZ251Lm9yZworKyUgVGVsOgorKyUgRmF4OgorKyUgTGFuZ3VhZ2U6IGNhCisrJSBUZXJyaXRvcnk6IEVTCisrJSBPcHRpb246IGV1cm8KKyslIFJldmlzaW9uOiAxLjAKKyslIERhdGU6IDIwMDYtMDQtMDYKKyslIEFwcGxpY2F0aW9uOiBnZW5lcmFsCisrJSBVc2VyczogZ2VuZXJhbAorKyUgUmVwZXJ0b2lyZW1hcDogbW5lbW9uaWMsZHMKKyslIENoYXJzZXQ6IElTTy04ODU5LTE1CisrJSBEaXN0cmlidXRpb24gYW5kIHVzZSBpcyBmcmVlLCBhbHNvCisrJSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKysKKytMQ19JREVOVElGSUNBVElPTgorK3RpdGxlICAgICAgIlZhbGVuY2lhbiAoc291dGhlcm4gQ2F0YWxhbikgbG9jYWxlIGZvciBTcGFpbiB3aXRoIEV1cm8iCisrc291cmNlICAgICAiIgorK2FkZHJlc3MgICAgIiIKKytjb250YWN0ICAgICJKb3JkaSBNYWxsYWNoIgorK2VtYWlsICAgICAgImpvcmRpQGdudS5vcmciCisrdGVsICAgICAgICAiIgorK2ZheCAgICAgICAgIiIKKytsYW5ndWFnZSAgICJDYXRhbGFuIgorK3RlcnJpdG9yeSAgIlNwYWluIgorK3JldmlzaW9uICAgIjEuMCIKKytkYXRlICAgICAgICIyMDA2LTA0LTA2IgorKyUKKytjYXRlZ29yeSAgImNhX0VTQHZhbGVuY2lhOjIwMDYiO0xDX0lERU5USUZJQ0FUSU9OCisrY2F0ZWdvcnkgICJjYV9FU0B2YWxlbmNpYToyMDA2IjtMQ19DVFlQRQorK2NhdGVnb3J5ICAiY2FfRVNAdmFsZW5jaWE6MjAwNiI7TENfQ09MTEFURQorK2NhdGVnb3J5ICAiY2FfRVNAdmFsZW5jaWE6MjAwNiI7TENfTU9ORVRBUlkKKytjYXRlZ29yeSAgImNhX0VTQHZhbGVuY2lhOjIwMDYiO0xDX05VTUVSSUMKKytjYXRlZ29yeSAgImNhX0VTQHZhbGVuY2lhOjIwMDYiO0xDX1RJTUUKKytjYXRlZ29yeSAgImNhX0VTQHZhbGVuY2lhOjIwMDYiO0xDX01FU1NBR0VTCisrY2F0ZWdvcnkgICJjYV9FU0B2YWxlbmNpYToyMDA2IjtMQ19QQVBFUgorK2NhdGVnb3J5ICAiY2FfRVNAdmFsZW5jaWE6MjAwNiI7TENfTkFNRQorK2NhdGVnb3J5ICAiY2FfRVNAdmFsZW5jaWE6MjAwNiI7TENfQUREUkVTUworK2NhdGVnb3J5ICAiY2FfRVNAdmFsZW5jaWE6MjAwNiI7TENfVEVMRVBIT05FCisrY2F0ZWdvcnkgICJjYV9FU0B2YWxlbmNpYToyMDA2IjtMQ19NRUFTVVJFTUVOVAorKworK0VORCBMQ19JREVOVElGSUNBVElPTgorKworK0xDX0NUWVBFCisrY29weSAiaTE4biIKKytFTkQgTENfQ1RZUEUKKysKKytMQ19DT0xMQVRFCisrY29weSAiY2FfRVMiCisrRU5EIExDX0NPTExBVEUKKysKKytMQ19NT05FVEFSWQorK2NvcHkgImNhX0VTIgorK0VORCBMQ19NT05FVEFSWQorKworK0xDX05VTUVSSUMKKytjb3B5ICJjYV9FUyIKKytFTkQgTENfTlVNRVJJQworKworK0xDX1RJTUUKKytjb3B5ICJjYV9FUyIKKytFTkQgTENfVElNRQorKworK0xDX01FU1NBR0VTCisrY29weSAiY2FfRVMiCisrRU5EIExDX01FU1NBR0VTCisrCisrTENfUEFQRVIKKytjb3B5ICJjYV9FUyIKKytFTkQgTENfUEFQRVIKKysKKytMQ19OQU1FCisrY29weSAiY2FfRVMiCisrRU5EIExDX05BTUUKKysKKytMQ19BRERSRVNTCisrY29weSAiY2FfRVMiCisrRU5EIExDX0FERFJFU1MKKysKKytMQ19URUxFUEhPTkUKKytjb3B5ICJjYV9FUyIKKytFTkQgTENfVEVMRVBIT05FCisrCisrTENfTUVBU1VSRU1FTlQKKytjb3B5ICJjYV9FUyIKKytFTkQgTENfTUVBU1VSRU1FTlQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMzYwLTIuOC1uc2NkLW9uZS1mb3JrLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8zNjAtMi44LW5zY2Qtb25lLWZvcmsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzliZjAxNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMzYwLTIuOC1uc2NkLW9uZS1mb3JrLnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2dsaWJjLzIuOS8xMTYwX2FsbF9nbGliYy0yLjgtbnNjZC1vbmUtZm9yay5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK29ubHkgZm9yayBvbmUgdG8gYXNzaXN0IGluIHN0b3Atc3RhcnQtZGFlbW9uIGFzc3VtcHRpb25zIGFib3V0IGRhZW1vbiBiZWhhdmlvcgorCitodHRwOi8vYnVncy5nZW50b28ub3JnLzE5MDc4NQorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2xpYmMtMl85Lm9yaWcvbnNjZC9uc2NkLmMgZ2xpYmMtMl85L25zY2QvbnNjZC5jCistLS0gZ2xpYmMtMl85Lm9yaWcvbnNjZC9uc2NkLmMJMjAwOC0wMy0yOSAxOTowODoxMi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yXzkvbnNjZC9uc2NkLmMJMjAwOS0wMi0wMiAyMjowMToxMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNzksNiArMTc5LDkgQEAKKyAgICAgICBpZiAocGlkICE9IDApCisgCWV4aXQgKDApOworIAorKyAgICAgICBpZiAod3JpdGVfcGlkIChfUEFUSF9OU0NEUElEKSA8IDApCisrCWRiZ19sb2cgKCIlczogJXMiLCBfUEFUSF9OU0NEUElELCBzdHJlcnJvciAoZXJybm8pKTsKKysKKyAgICAgICBpbnQgbnVsbGZkID0gb3BlbiAoX1BBVEhfREVWTlVMTCwgT19SRFdSKTsKKyAgICAgICBpZiAobnVsbGZkICE9IC0xKQorIAl7CitAQCAtMjI4LDEyICsyMzEsNiBAQAorIAlmb3IgKGkgPSBtaW5fY2xvc2VfZmQ7IGkgPCBnZXRkdGFibGVzaXplICgpOyBpKyspCisgCSAgY2xvc2UgKGkpOworIAorLSAgICAgIHBpZCA9IGZvcmsgKCk7CistICAgICAgaWYgKHBpZCA9PSAtMSkKKy0JZXJyb3IgKEVYSVRfRkFJTFVSRSwgZXJybm8sIF8oImNhbm5vdCBmb3JrIikpOworLSAgICAgIGlmIChwaWQgIT0gMCkKKy0JZXhpdCAoMCk7CistCisgICAgICAgc2V0c2lkICgpOworIAorICAgICAgIGlmIChjaGRpciAoIi8iKSAhPSAwKQorQEAgLTI0Miw5ICsyMzksNiBAQAorIAorICAgICAgIG9wZW5sb2cgKCJuc2NkIiwgTE9HX0NPTlMgfCBMT0dfT0RFTEFZLCBMT0dfREFFTU9OKTsKKyAKKy0gICAgICBpZiAod3JpdGVfcGlkIChfUEFUSF9OU0NEUElEKSA8IDApCistICAgICAgICBkYmdfbG9nICgiJXM6ICVzIiwgX1BBVEhfTlNDRFBJRCwgc3RyZXJyb3IgKGVycm5vKSk7CistCisgICAgICAgaWYgKCFpbml0X2xvZ2ZpbGUgKCkpCisgCWRiZ19sb2cgKF8oIkNvdWxkIG5vdCBjcmVhdGUgbG9nIGZpbGUiKSk7CisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzM3MC1ocHBhX2dsaWJjLTIuNy1ocHBhLW5wdGwtY2FybG9zLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8zNzAtaHBwYV9nbGliYy0yLjctaHBwYS1ucHRsLWNhcmxvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjQ0MWQyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8zNzAtaHBwYV9nbGliYy0yLjctaHBwYS1ucHRsLWNhcmxvcy5wYXRjaApAQCAtMCwwICsxLDI0OSBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2xpYmMvMi45LzE1MDNfaHBwYV9nbGliYy0yLjctaHBwYS1ucHRsLWNhcmxvcy5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9lbGYvcnRsZC5jIGdsaWJjLTJfOS9lbGYvcnRsZC5jCistLS0gZ2xpYmMtMl85Lm9yaWcvZWxmL3J0bGQuYwkyMDA5LTAyLTAyIDIyOjAwOjM0LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTJfOS9lbGYvcnRsZC5jCTIwMDktMDItMDIgMjI6MDE6MTIuMDAwMDAwMDAwICswMTAwCitAQCAtMzg2LDE0ICszODYsMTQgQEAKKyAgICAgIGtub3cgaXQgaXMgYXZhaWxhYmxlLiAgV2UgZG8gbm90IGhhdmUgdG8gY2xlYXIgdGhlIG1lbW9yeSBpZiB3ZQorICAgICAgZG8gbm90IGhhdmUgdG8gdXNlIHRoZSB0ZW1wb3JhcnkgYm9vdHN0cmFwX21hcC4gIEdsb2JhbCB2YXJpYWJsZXMKKyAgICAgIGFyZSBpbml0aWFsaXplZCB0byB6ZXJvIGJ5IGRlZmF1bHQuICAqLworLSNpZm5kZWYgRE9OVF9VU0VfQk9PVFNUUkFQX01BUAorKyNpZiAhZGVmaW5lZCBET05UX1VTRV9CT09UU1RSQVBfTUFQCisgIyBpZmRlZiBIQVZFX0JVSUxUSU5fTUVNU0VUCisgICBfX2J1aWx0aW5fbWVtc2V0IChib290c3RyYXBfbWFwLmxfaW5mbywgJ1wwJywgc2l6ZW9mIChib290c3RyYXBfbWFwLmxfaW5mbykpOworICMgZWxzZQorLSAgZm9yIChzaXplX3QgY250ID0gMDsKKy0gICAgICAgY250IDwgc2l6ZW9mIChib290c3RyYXBfbWFwLmxfaW5mbykgLyBzaXplb2YgKGJvb3RzdHJhcF9tYXAubF9pbmZvWzBdKTsKKy0gICAgICAgKytjbnQpCistICAgIGJvb3RzdHJhcF9tYXAubF9pbmZvW2NudF0gPSAwOworKyAgLyogQ2xlYXIgdGhlIHdob2xlIGJvb3RzdHJhcF9tYXAgc3RydWN0dXJlICovCisrICBmb3IgKGNoYXIgKmNudCA9IChjaGFyICopJihib290c3RyYXBfbWFwKTsKKysgICAgICAgY250IDwgKChjaGFyICopJihib290c3RyYXBfbWFwKSArIHNpemVvZiAoYm9vdHN0cmFwX21hcCkpOworKyAgICAgICAqY250KysgPSAnXDAnKTsKKyAjIGVuZGlmCisgIyBpZiBVU0VfX19USFJFQUQKKyAgIGJvb3RzdHJhcF9tYXAubF90bHNfbW9kaWQgPSAwOworZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9pbmNsdWRlL2F0b21pYy5oIGdsaWJjLTJfOS9pbmNsdWRlL2F0b21pYy5oCistLS0gZ2xpYmMtMl85Lm9yaWcvaW5jbHVkZS9hdG9taWMuaAkyMDA2LTEyLTIxIDIyOjQ0OjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTJfOS9pbmNsdWRlL2F0b21pYy5oCTIwMDktMDItMDIgMjI6MDE6MTIuMDAwMDAwMDAwICswMTAwCitAQCAtMTc0LDcgKzE3NCw3IEBACisgICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX2F0ZzVfdmFsdWUgPSAobmV3dmFsdWUpOwkJCSAgICAgIFwKKyAJCQkJCQkJCQkgICAgICBcCisgICAgICBkbwkJCQkJCQkJCSAgICAgIFwKKy0gICAgICAgX19hdGc1X29sZHZhbCA9ICpfX2F0ZzVfbWVtcDsJCQkJCSAgICAgIFwKKysgICAgICAgX19hdGc1X29sZHZhbCA9ICoodm9sYXRpbGUgX190eXBlb2YgKG1lbSkpX19hdGc1X21lbXA7CQkgICAgICBcCisgICAgICB3aGlsZSAoX19idWlsdGluX2V4cGVjdAkJCQkJCSAgICAgIFwKKyAJICAgIChhdG9taWNfY29tcGFyZV9hbmRfZXhjaGFuZ2VfYm9vbF9hY3EgKF9fYXRnNV9tZW1wLCBfX2F0ZzVfdmFsdWUsIFwKKyAJCQkJCQkgICBfX2F0ZzVfb2xkdmFsKSwgMCkpOwkgICAgICBcCitAQCAtMTk1LDcgKzE5NSw3IEBACisgICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX2F0ZzZfdmFsdWUgPSAodmFsdWUpOwkJCQkgICAgICBcCisgCQkJCQkJCQkJICAgICAgXAorICAgICAgZG8JCQkJCQkJCQkgICAgICBcCistICAgICAgIF9fYXRnNl9vbGR2YWwgPSAqX19hdGc2X21lbXA7CQkJCQkgICAgICBcCisrICAgICAgIF9fYXRnNl9vbGR2YWwgPSAqKHZvbGF0aWxlIF9fdHlwZW9mIChtZW0pKV9fYXRnNl9tZW1wOwkJICAgICAgXAorICAgICAgd2hpbGUgKF9fYnVpbHRpbl9leHBlY3QJCQkJCQkgICAgICBcCisgCSAgICAoYXRvbWljX2NvbXBhcmVfYW5kX2V4Y2hhbmdlX2Jvb2xfYWNxIChfX2F0ZzZfbWVtcCwJCSAgICAgIFwKKyAJCQkJCQkgICBfX2F0ZzZfb2xkdmFsCSAgICAgIFwKK0BAIC0yMTMsNyArMjEzLDcgQEAKKyAgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fYXRnN192YWx1ZSA9ICh2YWx1ZSk7CQkJCSAgICAgIFwKKyAJCQkJCQkJCQkgICAgICBcCisgICAgICBkbwkJCQkJCQkJCSAgICAgIFwKKy0gICAgICAgX19hdGc3X29sZHYgPSAqX19hdGc3X21lbXA7CQkJCQkgICAgICBcCisrICAgICAgIF9fYXRnN19vbGR2ID0gKih2b2xhdGlsZSBfX3R5cGVvZiAobWVtKSlfX2F0ZzdfbWVtcDsJCSAgICAgIFwKKyAgICAgIHdoaWxlIChfX2J1aWx0aW5fZXhwZWN0CQkJCQkJICAgICAgXAorIAkgICAgKGNhdG9taWNfY29tcGFyZV9hbmRfZXhjaGFuZ2VfYm9vbF9hY3EgKF9fYXRnN19tZW1wLAkgICAgICBcCisgCQkJCQkJICAgIF9fYXRnN19vbGR2CQkgICAgICBcCitAQCAtMjMxLDcgKzIzMSw3IEBACisgICAgIF9fdHlwZW9mIChtZW0pIF9fYXRnOF9tZW1wID0gKG1lbSk7CQkJCQkgICAgICBcCisgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fYXRnOF92YWx1ZSA9ICh2YWx1ZSk7CQkJCSAgICAgIFwKKyAgICAgZG8gewkJCQkJCQkJICAgICAgXAorLSAgICAgIF9fYXRnOF9vbGR2YWwgPSAqX19hdGc4X21lbXA7CQkJCQkgICAgICBcCisrICAgICAgX19hdGc4X29sZHZhbCA9ICoodm9sYXRpbGUgX190eXBlb2YgKG1lbSkpX19hdGc4X21lbXA7CQkgICAgICBcCisgICAgICAgaWYgKF9fYXRnOF9vbGR2YWwgPj0gX19hdGc4X3ZhbHVlKQkJCQkgICAgICBcCisgCWJyZWFrOwkJCQkJCQkJICAgICAgXAorICAgICB9IHdoaWxlIChfX2J1aWx0aW5fZXhwZWN0CQkJCQkJICAgICAgXAorQEAgLTI0OCw3ICsyNDgsNyBAQAorICAgICBfX3R5cGVvZiAobWVtKSBfX2F0ZzlfbWVtcCA9IChtZW0pOwkJCQkJICAgICAgXAorICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX2F0ZzlfdmFsdWUgPSAodmFsdWUpOwkJCQkgICAgICBcCisgICAgIGRvIHsJCQkJCQkJCSAgICAgIFwKKy0gICAgICBfX2F0Zzlfb2xkdiA9ICpfX2F0ZzlfbWVtcDsJCQkJCSAgICAgIFwKKysgICAgICBfX2F0Zzlfb2xkdiA9ICoodm9sYXRpbGUgX190eXBlb2YgKG1lbSkpX19hdGc5X21lbXA7CQkgICAgICBcCisgICAgICAgaWYgKF9fYXRnOV9vbGR2ID49IF9fYXRnOV92YWx1ZSkJCQkJCSAgICAgIFwKKyAJYnJlYWs7CQkJCQkJCQkgICAgICBcCisgICAgIH0gd2hpbGUgKF9fYnVpbHRpbl9leHBlY3QJCQkJCQkgICAgICBcCitAQCAtMjY2LDcgKzI2Niw3IEBACisgICAgIF9fdHlwZW9mIChtZW0pIF9fYXRnMTBfbWVtcCA9IChtZW0pOwkJCQkgICAgICBcCisgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fYXRnMTBfdmFsdWUgPSAodmFsdWUpOwkJCQkgICAgICBcCisgICAgIGRvIHsJCQkJCQkJCSAgICAgIFwKKy0gICAgICBfX2F0ZzEwX29sZHZhbCA9ICpfX2F0ZzEwX21lbXA7CQkJCQkgICAgICBcCisrICAgICAgX19hdGcxMF9vbGR2YWwgPSAqKHZvbGF0aWxlIF9fdHlwZW9mIChtZW0pKV9fYXRnMTBfbWVtcDsJCSAgICAgIFwKKyAgICAgICBpZiAoX19hdGcxMF9vbGR2YWwgPD0gX19hdGcxMF92YWx1ZSkJCQkJICAgICAgXAorIAlicmVhazsJCQkJCQkJCSAgICAgIFwKKyAgICAgfSB3aGlsZSAoX19idWlsdGluX2V4cGVjdAkJCQkJCSAgICAgIFwKK0BAIC0zNTAsNyArMzUwLDcgQEAKKyAJCQkJCQkJCQkgICAgICBcCisgICAgICBkbwkJCQkJCQkJCSAgICAgIFwKKyAgICAgICAgewkJCQkJCQkJICAgICAgXAorLQkgX19hdGcxMV9vbGR2YWwgPSAqX19hdGcxMV9tZW1wOwkJCQkgICAgICBcCisrCSBfX2F0ZzExX29sZHZhbCA9ICoodm9sYXRpbGUgX190eXBlb2YgKG1lbSkpX19hdGcxMV9tZW1wOwkgICAgICBcCisgCSBpZiAoX19idWlsdGluX2V4cGVjdCAoX19hdGcxMV9vbGR2YWwgPD0gMCwgMCkpCQkJICAgICAgXAorIAkgICBicmVhazsJCQkJCQkJICAgICAgXAorICAgICAgICB9CQkJCQkJCQkgICAgICBcCitAQCAtMzg5LDcgKzM4OSw3IEBACisgICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX2F0ZzE0X21hc2sgPSAoKF9fdHlwZW9mICgqKG1lbSkpKSAxIDw8IChiaXQpKTsJICAgICAgXAorIAkJCQkJCQkJCSAgICAgIFwKKyAgICAgIGRvCQkJCQkJCQkJICAgICAgXAorLSAgICAgICBfX2F0ZzE0X29sZCA9ICgqX19hdGcxNF9tZW1wKTsJCQkJCSAgICAgIFwKKysgICAgICAgX19hdGcxNF9vbGQgPSAoKih2b2xhdGlsZSBfX3R5cGVvZiAobWVtKSlfX2F0ZzE0X21lbXApOwkJICAgICAgXAorICAgICAgd2hpbGUgKF9fYnVpbHRpbl9leHBlY3QJCQkJCQkgICAgICBcCisgCSAgICAoYXRvbWljX2NvbXBhcmVfYW5kX2V4Y2hhbmdlX2Jvb2xfYWNxIChfX2F0ZzE0X21lbXAsCSAgICAgIFwKKyAJCQkJCQkgICBfX2F0ZzE0X29sZCB8IF9fYXRnMTRfbWFzayxcCitAQCAtNDA3LDcgKzQwNyw3IEBACisgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fYXRnMTVfbWFzayA9IChtYXNrKTsJCQkJICAgICAgXAorIAkJCQkJCQkJCSAgICAgIFwKKyAgICAgZG8JCQkJCQkJCQkgICAgICBcCistICAgICAgX19hdGcxNV9vbGQgPSAoKl9fYXRnMTVfbWVtcCk7CQkJCQkgICAgICBcCisrICAgICAgX19hdGcxNV9vbGQgPSAoKih2b2xhdGlsZSBfX3R5cGVvZiAobWVtKSlfX2F0ZzE1X21lbXApOwkJICAgICAgXAorICAgICB3aGlsZSAoX19idWlsdGluX2V4cGVjdAkJCQkJCSAgICAgIFwKKyAJICAgKGF0b21pY19jb21wYXJlX2FuZF9leGNoYW5nZV9ib29sX2FjcSAoX19hdGcxNV9tZW1wLAkJICAgICAgXAorIAkJCQkJCSAgX19hdGcxNV9vbGQgJiBfX2F0ZzE1X21hc2ssIFwKK0BAIC00MjMsNyArNDIzLDcgQEAKKyAgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fYXRnMTZfbWFzayA9IChtYXNrKTsJCQkJICAgICAgXAorIAkJCQkJCQkJCSAgICAgIFwKKyAgICAgIGRvCQkJCQkJCQkJICAgICAgXAorLSAgICAgICBfX2F0ZzE2X29sZCA9ICgqX19hdGcxNl9tZW1wKTsJCQkJCSAgICAgIFwKKysgICAgICAgX19hdGcxNl9vbGQgPSAoKih2b2xhdGlsZSBfX3R5cGVvZiAobWVtKSlfX2F0ZzE2X21lbXApOwkJICAgICAgXAorICAgICAgd2hpbGUgKF9fYnVpbHRpbl9leHBlY3QJCQkJCQkgICAgICBcCisgCSAgICAoYXRvbWljX2NvbXBhcmVfYW5kX2V4Y2hhbmdlX2Jvb2xfYWNxIChfX2F0ZzE2X21lbXAsCSAgICAgIFwKKyAJCQkJCQkgICBfX2F0ZzE2X29sZCAmIF9fYXRnMTZfbWFzayxcCitAQCAtNDQxLDcgKzQ0MSw3IEBACisgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fYXRnMTdfbWFzayA9IChtYXNrKTsJCQkJICAgICAgXAorIAkJCQkJCQkJCSAgICAgIFwKKyAgICAgZG8JCQkJCQkJCQkgICAgICBcCistICAgICAgX19hdGcxN19vbGQgPSAoKl9fYXRnMTdfbWVtcCk7CQkJCQkgICAgICBcCisrICAgICAgX19hdGcxN19vbGQgPSAoKih2b2xhdGlsZSBfX3R5cGVvZiAobWVtKSlfX2F0ZzE3X21lbXApOwkJICAgICAgXAorICAgICB3aGlsZSAoX19idWlsdGluX2V4cGVjdAkJCQkJCSAgICAgIFwKKyAJICAgKGF0b21pY19jb21wYXJlX2FuZF9leGNoYW5nZV9ib29sX2FjcSAoX19hdGcxN19tZW1wLAkJICAgICAgXAorIAkJCQkJCSAgX19hdGcxN19vbGQgfCBfX2F0ZzE3X21hc2ssIFwKK0BAIC00NTcsNyArNDU3LDcgQEAKKyAgICAgX190eXBlb2YgKCoobWVtKSkgX19hdGcxOF9tYXNrID0gKG1hc2spOwkJCQkgICAgICBcCisgCQkJCQkJCQkJICAgICAgXAorICAgICBkbwkJCQkJCQkJCSAgICAgIFwKKy0gICAgICBfX2F0ZzE4X29sZCA9ICgqX19hdGcxOF9tZW1wKTsJCQkJCSAgICAgIFwKKysgICAgICBfX2F0ZzE4X29sZCA9ICgqKHZvbGF0aWxlIF9fdHlwZW9mIChtZW0pKV9fYXRnMThfbWVtcCk7CQkgICAgICBcCisgICAgIHdoaWxlIChfX2J1aWx0aW5fZXhwZWN0CQkJCQkJICAgICAgXAorIAkgICAoY2F0b21pY19jb21wYXJlX2FuZF9leGNoYW5nZV9ib29sX2FjcSAoX19hdGcxOF9tZW1wLAkgICAgICBcCisgCQkJCQkJICAgX19hdGcxOF9vbGQgfCBfX2F0ZzE4X21hc2ssXAorQEAgLTQ3Myw3ICs0NzMsNyBAQAorICAgICAgX190eXBlb2YgKCoobWVtKSkgX19hdGcxOV9tYXNrID0gKG1hc2spOwkJCQkgICAgICBcCisgCQkJCQkJCQkJICAgICAgXAorICAgICAgZG8JCQkJCQkJCQkgICAgICBcCistICAgICAgIF9fYXRnMTlfb2xkID0gKCpfX2F0ZzE5X21lbXApOwkJCQkJICAgICAgXAorKyAgICAgICBfX2F0ZzE5X29sZCA9ICgqKHZvbGF0aWxlIF9fdHlwZW9mIChtZW0pKV9fYXRnMTlfbWVtcCk7CQkgICAgICBcCisgICAgICB3aGlsZSAoX19idWlsdGluX2V4cGVjdAkJCQkJCSAgICAgIFwKKyAJICAgIChhdG9taWNfY29tcGFyZV9hbmRfZXhjaGFuZ2VfYm9vbF9hY3EgKF9fYXRnMTlfbWVtcCwJICAgICAgXAorIAkJCQkJCSAgIF9fYXRnMTlfb2xkIHwgX19hdGcxOV9tYXNrLFwKK2RpZmYgLWR1ck4gZ2xpYmMtMl85Lm9yaWcvbnB0bC9NYWtlZmlsZSBnbGliYy0yXzkvbnB0bC9NYWtlZmlsZQorLS0tIGdsaWJjLTJfOS5vcmlnL25wdGwvTWFrZWZpbGUJMjAwOC0xMS0xMiAxNDozODoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yXzkvbnB0bC9NYWtlZmlsZQkyMDA5LTAyLTAyIDIyOjAxOjEyLjAwMDAwMDAwMCArMDEwMAorQEAgLTI2Miw5ICsyNjIsOSBAQAorICMgRmlsZXMgd2hpY2ggbXVzdCBub3QgYmUgbGlua2VkIHdpdGggbGlicHRocmVhZC4KKyB0ZXN0cy1ub2xpYnB0aHJlYWQgPSB0c3QtdW5sb2FkCisgCistIyBUaGlzIHNldHMgdGhlIHN0YWNrIHJlc291cmNlIGxpbWl0IHRvIDEwMjNrYiwgd2hpY2ggaXMgbm90IGEgbXVsdGlwbGUKKy0jIG9mIHRoZSBwYWdlIHNpemUgc2luY2UgZXZlcnkgYXJjaGl0ZWN0dXJlJ3MgcGFnZSBzaXplIGlzID4gMWsuCistdHN0LW9kZHN0YWNrbGltaXQtRU5WID0gOyB1bGltaXQgLXMgMTAyMzsKKysjIFRoaXMgc2V0cyB0aGUgc3RhY2sgcmVzb3VyY2UgbGltaXQgdG8gODE5M2tiLCB3aGljaCBpcyBub3QgYSBtdWx0aXBsZQorKyMgb2YgdGhlIHBhZ2Ugc2l6ZSBzaW5jZSBldmVyeSBhcmNoaXRlY3R1cmUncyBwYWdlIHNpemUgaXMgNDA5NiBieXRlcy4KKyt0c3Qtb2Rkc3RhY2tsaW1pdC1FTlYgPSA7IHVsaW1pdCAtcyA4MTkzOworIAorIGRpc3RyaWJ1dGUgPSBlaW50ci5jIHRzdC1jbGVhbnVwNGF1eC5jCisgCitAQCAtNDIzLDYgKzQyMywzNSBAQAorIENGTEFHUy10c3QtY2xlYW51cHg0LmMgKz0gLWZleGNlcHRpb25zCisgQ0ZMQUdTLXRzdC1vbmNleDMuYyArPSAtZmV4Y2VwdGlvbnMKKyBDRkxBR1MtdHN0LW9uY2V4NC5jICs9IC1mZXhjZXB0aW9ucworKworK2xkZmxhZ3MtbGliZ2NjX3MgPSAtLWFzLW5lZWRlZCAtbGdjY19zIC0tbm8tYXMtbmVlZGVkCisrTERGTEFHUy10c3QtY2FuY2VseDIgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNhbmNlbHgzICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4NCArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2FuY2VseDUgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNhbmNlbHg2ICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4NyArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2FuY2VseDggKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNhbmNlbHg5ICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4MTAgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNhbmNlbHgxMSArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2FuY2VseDEyICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4MTMgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNhbmNlbHgxNCArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2FuY2VseDE1ICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4MTYgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNhbmNlbHgxNyArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2FuY2VseDE4ICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4MjAgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNhbmNlbHgyMSArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2xlYW51cHgwICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jbGVhbnVweDEgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNsZWFudXB4MiArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2xlYW51cHgzICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jbGVhbnVweDQgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LW9uY2V4MyArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3Qtb25jZXg0ICs9ICQobGRmbGFncy1saWJnY2NfcykKKysKKyBDRkxBR1MtdHN0LWFsaWduLmMgKz0gJChzdGFjay1hbGlnbi10ZXN0LWZsYWdzKQorIENGTEFHUy10c3QtYWxpZ24zLmMgKz0gJChzdGFjay1hbGlnbi10ZXN0LWZsYWdzKQorIENGTEFHUy10c3QtaW5pdGlhbGl6ZXJzMS5jID0gLVcgLVdhbGwgLVdlcnJvcgorZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9ucHRsL3B0aHJlYWRfYmFycmllcl93YWl0LmMgZ2xpYmMtMl85L25wdGwvcHRocmVhZF9iYXJyaWVyX3dhaXQuYworLS0tIGdsaWJjLTJfOS5vcmlnL25wdGwvcHRocmVhZF9iYXJyaWVyX3dhaXQuYwkyMDA3LTA4LTAxIDA2OjE4OjUwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTJfOS9ucHRsL3B0aHJlYWRfYmFycmllcl93YWl0LmMJMjAwOS0wMi0wMiAyMjowMToxMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC02NCw3ICs2NCw3IEBACisgICAgICAgZG8KKyAJbGxsX2Z1dGV4X3dhaXQgKCZpYmFycmllci0+Y3Vycl9ldmVudCwgZXZlbnQsCisgCQkJaWJhcnJpZXItPnByaXZhdGUgXiBGVVRFWF9QUklWQVRFX0ZMQUcpOworLSAgICAgIHdoaWxlIChldmVudCA9PSBpYmFycmllci0+Y3Vycl9ldmVudCk7CisrICAgICAgd2hpbGUgKGV2ZW50ID09ICoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopJmliYXJyaWVyLT5jdXJyX2V2ZW50KTsKKyAgICAgfQorIAorICAgLyogTWFrZSBzdXJlIHRoZSBpbml0X2NvdW50IGlzIHN0b3JlZCBsb2NhbGx5IG9yIGluIGEgcmVnaXN0ZXIuICAqLworZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9ucHRsL3N5c2RlcHMvcHRocmVhZC9NYWtlZmlsZSBnbGliYy0yXzkvbnB0bC9zeXNkZXBzL3B0aHJlYWQvTWFrZWZpbGUKKy0tLSBnbGliYy0yXzkub3JpZy9ucHRsL3N5c2RlcHMvcHRocmVhZC9NYWtlZmlsZQkyMDA2LTAyLTI4IDA4OjA5OjQxLjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTJfOS9ucHRsL3N5c2RlcHMvcHRocmVhZC9NYWtlZmlsZQkyMDA5LTAyLTAyIDIyOjAxOjEyLjAwMDAwMDAwMCArMDEwMAorQEAgLTQxLDcgKzQxLDkgQEAKKyAKKyBpZmVxICgkKGhhdmUtZm9yY2VkLXVud2luZCkseWVzKQorIHRlc3RzICs9IHRzdC1tcXVldWU4eAorK2xkZmxhZ3MtbGliZ2NjX3MgPSAtLWFzLW5lZWRlZCAtbGdjY19zIC0tbm8tYXMtbmVlZGVkCisgQ0ZMQUdTLXRzdC1tcXVldWU4eC5jICs9IC1mZXhjZXB0aW9ucworK0xERkxBR1MtdHN0LW1xdWV1ZTh4ICs9ICQobGRmbGFncy1saWJnY2NfcykgCisgZW5kaWYKKyBlbmRpZgorIAorZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9zdGRpby1jb21tb24vTWFrZWZpbGUgZ2xpYmMtMl85L3N0ZGlvLWNvbW1vbi9NYWtlZmlsZQorLS0tIGdsaWJjLTJfOS5vcmlnL3N0ZGlvLWNvbW1vbi9NYWtlZmlsZQkyMDA4LTA3LTA4IDE4OjMyOjI4LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTJfOS9zdGRpby1jb21tb24vTWFrZWZpbGUJMjAwOS0wMi0wMiAyMjowMToxMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC04MCw3ICs4MCw3IEBACisgCSQoU0hFTEwpIC1lIHRzdC1wcmludGYuc2ggJChjb21tb24tb2JqcGZ4KSAnJChydW4tcHJvZ3JhbS1wcmVmaXgpJworIGVuZGlmCisgCistQ0ZMQUdTLXZmcHJpbnRmLmMgPSAtV25vLXVuaW5pdGlhbGl6ZWQKKytDRkxBR1MtdmZwcmludGYuYyA9IC1Xbm8tdW5pbml0aWFsaXplZCAtZm5vLWRlbGF5ZWQtYnJhbmNoCisgQ0ZMQUdTLXZmd3ByaW50Zi5jID0gLVduby11bmluaXRpYWxpemVkCisgQ0ZMQUdTLXRzdC1wcmludGYuYyA9IC1Xbm8tZm9ybWF0CisgQ0ZMQUdTLXRzdGRpb21pc2MuYyA9IC1Xbm8tZm9ybWF0CitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL3N1bnJwYy9jbG50X3VkcC5jIGdsaWJjLTJfOS9zdW5ycGMvY2xudF91ZHAuYworLS0tIGdsaWJjLTJfOS5vcmlnL3N1bnJwYy9jbG50X3VkcC5jCTIwMDgtMDctMjYgMTA6NDI6NDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMl85L3N1bnJwYy9jbG50X3VkcC5jCTIwMDktMDItMDIgMjI6MDE6MTIuMDAwMDAwMDAwICswMTAwCitAQCAtNDYyLDcgKzQ2Miw3IEBACisgICAgICAgd2hpbGUgKGlubGVuIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7CisgICAgICAgaWYgKGlubGVuIDwgMCkKKyAJeworLQkgIGlmIChlcnJubyA9PSBFV09VTERCTE9DSykKKysJICBpZiAoZXJybm8gPT0gRVdPVUxEQkxPQ0sgfHwgZXJybm8gPT0gRUFHQUlOKQorIAkgICAgY29udGludWU7CisgCSAgY3UtPmN1X2Vycm9yLnJlX2Vycm5vID0gZXJybm87CisgCSAgcmV0dXJuIChjdS0+Y3VfZXJyb3IucmVfc3RhdHVzID0gUlBDX0NBTlRSRUNWKTsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMzgwLTIuMy42LWRsX2V4ZWNzdGFjay1QYVgtc3VwcG9ydC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMzgwLTIuMy42LWRsX2V4ZWNzdGFjay1QYVgtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTI5ZTkwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS8zODAtMi4zLjYtZGxfZXhlY3N0YWNrLVBhWC1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2dsaWJjLzIuOS8zMDAwX2FsbF8yLjMuNi1kbF9leGVjc3RhY2stUGFYLXN1cHBvcnQucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCisJV2l0aCBsYXRlc3QgdmVyc2lvbnMgb2YgZ2xpYmMsIGEgbG90IG9mIGFwcHMgZmFpbGVkIG9uIGEgUGFYIGVuYWJsZWQKKwlzeXN0ZW0gd2l0aDoKKwkJIGNhbm5vdCBlbmFibGUgZXhlY3V0YWJsZSBzdGFjayBhcyBzaGFyZWQgb2JqZWN0IHJlcXVpcmVzOiBQZXJtaXNzaW9uIGRlbmllZAorCQorCVRoaXMgaXMgZHVlIHRvIFBhWCAnZXhlYy1wcm90ZWN0aW5nJyB0aGUgc3RhY2ssIGFuZCBsZC5zbyB0aGVuIHRyeWluZworCXRvIG1ha2UgdGhlIHN0YWNrIGV4ZWN1dGFibGUgZHVlIHRvIHNvbWUgbGlicmFyaWVzIG5vdCBjb250YWluaW5nIHRoZQorCVBUX0dOVV9TVEFDSyBzZWN0aW9uLiAgQnVnICMzMjk2MC4gIDxhemFyYWhAZ2VudG9vLm9yZz4gKDEyIE5vdiAyMDAzKS4KKworCVBhdGNoIGFsc28gTlBUTC4gQnVnICMxMTYwODYuIDxrZXZxdWlubkBnZW50b28ub3JnPiAoMjAgRGVjIDIwMDUpLgorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2xpYmMtMl85Lm9yaWcvbnB0bC9hbGxvY2F0ZXN0YWNrLmMgZ2xpYmMtMl85L25wdGwvYWxsb2NhdGVzdGFjay5jCistLS0gZ2xpYmMtMl85Lm9yaWcvbnB0bC9hbGxvY2F0ZXN0YWNrLmMJMjAwOC0wOC0xNiAwMDozNToyNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yXzkvbnB0bC9hbGxvY2F0ZXN0YWNrLmMJMjAwOS0wMi0wMiAyMjowMToyMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yOTksNyArMjk5LDggQEAKKyAjIGVycm9yICJEZWZpbmUgZWl0aGVyIF9TVEFDS19HUk9XU19ET1dOIG9yIF9TVEFDS19HUk9XU19VUCIKKyAjZW5kaWYKKyAgIGlmIChtcHJvdGVjdCAoc3RhY2ssIGxlbiwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSB8IFBST1RfRVhFQykgIT0gMCkKKy0gICAgcmV0dXJuIGVycm5vOworKyAgICBpZiAoZXJybm8gIT0gRUFDQ0VTKSAvKiBQQVggaXMgZW5hYmxlZCAqLworKyAgICAJcmV0dXJuIGVycm5vOworIAorICAgcmV0dXJuIDA7CisgfQorZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9kbC1leGVjc3RhY2suYyBnbGliYy0yXzkvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZGwtZXhlY3N0YWNrLmMKKy0tLSBnbGliYy0yXzkub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9kbC1leGVjc3RhY2suYwkyMDA2LTAxLTA4IDA5OjIxOjE1LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTJfOS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9kbC1leGVjc3RhY2suYwkyMDA5LTAyLTAyIDIyOjAxOjIwLjAwMDAwMDAwMCArMDEwMAorQEAgLTYzLDcgKzYzLDEwIEBACisgICAgICAgZWxzZQorICMgZW5kaWYKKyAJeworLQkgIHJlc3VsdCA9IGVycm5vOworKwkgIGlmIChlcnJubyA9PSBFQUNDRVMpICAvKiBQQVggaXMgZW5hYmxlZCAqLworKwkgICAgcmVzdWx0ID0gMDsKKysJICBlbHNlCisrCSAgICByZXN1bHQgPSBlcnJubzsKKyAJICBnb3RvIG91dDsKKyAJfQorICAgICB9CitAQCAtODksNyArOTIsMTIgQEAKKyAJcGFnZSAtPSBzaXplOworICAgICAgIGVsc2UKKyAJeworLQkgIGlmIChlcnJubyAhPSBFTk9NRU0pCS8qIFVuZXhwZWN0ZWQgZmFpbHVyZSBtb2RlLiAgKi8KKysJICBpZiAoZXJybm8gPT0gRUFDQ0VTKQkJLyogUEFYIGlzIGVuYWJsZWQgKi8KKysJICAgIHsKKysJICAgICAgcmVzdWx0ID0gMDsKKysJICAgICAgZ290byBvdXQ7CisrCSAgICB9CisrCSAgZWxzZSBpZiAoZXJybm8gIT0gRU5PTUVNKQkvKiBVbmV4cGVjdGVkIGZhaWx1cmUgbW9kZS4gICovCisgCSAgICB7CisgCSAgICAgIHJlc3VsdCA9IGVycm5vOworIAkgICAgICBnb3RvIG91dDsKK0BAIC0xMTUsNyArMTIzLDEyIEBACisgCXBhZ2UgKz0gc2l6ZTsKKyAgICAgICBlbHNlCisgCXsKKy0JICBpZiAoZXJybm8gIT0gRU5PTUVNKQkvKiBVbmV4cGVjdGVkIGZhaWx1cmUgbW9kZS4gICovCisrCSAgaWYgKGVycm5vID09IEVBQ0NFUykJCS8qIFBBWCBpcyBlbmFibGVkICovCisrCSAgICB7CisrCSAgICAgIHJlc3VsdCA9IDA7CisrCSAgICAgIGdvdG8gb3V0OworKwkgICAgfQorKwkgIGVsc2UgaWYgKGVycm5vICE9IEVOT01FTSkJLyogVW5leHBlY3RlZCBmYWlsdXJlIG1vZGUuICAqLworIAkgICAgeworIAkgICAgICByZXN1bHQgPSBlcnJubzsKKyAJICAgICAgZ290byBvdXQ7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzM5MC0yLjMuM19wcmUyMDA0MDExNy1wdF9wYXgucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzM5MC0yLjMuM19wcmUyMDA0MDExNy1wdF9wYXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMzOThiNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvMzkwLTIuMy4zX3ByZTIwMDQwMTE3LXB0X3BheC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nbGliYy8yLjkvMzAxMF9hbGxfMi4zLjNfcHJlMjAwNDAxMTctcHRfcGF4LnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL2VsZi9lbGYuaCBnbGliYy0yXzkvZWxmL2VsZi5oCistLS0gZ2xpYmMtMl85Lm9yaWcvZWxmL2VsZi5oCTIwMDgtMTAtMDEgMjE6NDE6MzQuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMl85L2VsZi9lbGYuaAkyMDA5LTAyLTAyIDIyOjAxOjIxLjAwMDAwMDAwMCArMDEwMAorQEAgLTU3MSw2ICs1NzEsNyBAQAorICNkZWZpbmUgUFRfR05VX0VIX0ZSQU1FCTB4NjQ3NGU1NTAJLyogR0NDIC5laF9mcmFtZV9oZHIgc2VnbWVudCAqLworICNkZWZpbmUgUFRfR05VX1NUQUNLCTB4NjQ3NGU1NTEJLyogSW5kaWNhdGVzIHN0YWNrIGV4ZWN1dGFiaWxpdHkgKi8KKyAjZGVmaW5lIFBUX0dOVV9SRUxSTwkweDY0NzRlNTUyCS8qIFJlYWQtb25seSBhZnRlciByZWxvY2F0aW9uICovCisrI2RlZmluZSBQVF9QQVhfRkxBR1MJMHg2NTA0MTU4MAkvKiBJbmRpY2F0ZXMgUGFYIGZsYWcgbWFya2luZ3MgKi8KKyAjZGVmaW5lIFBUX0xPU1VOVwkweDZmZmZmZmZhCisgI2RlZmluZSBQVF9TVU5XQlNTCTB4NmZmZmZmZmEJLyogU3VuIFNwZWNpZmljIHNlZ21lbnQgKi8KKyAjZGVmaW5lIFBUX1NVTldTVEFDSwkweDZmZmZmZmZiCS8qIFN0YWNrIHNlZ21lbnQgKi8KK0BAIC01ODQsNiArNTg1LDE4IEBACisgI2RlZmluZSBQRl9YCQkoMSA8PCAwKQkvKiBTZWdtZW50IGlzIGV4ZWN1dGFibGUgKi8KKyAjZGVmaW5lIFBGX1cJCSgxIDw8IDEpCS8qIFNlZ21lbnQgaXMgd3JpdGFibGUgKi8KKyAjZGVmaW5lIFBGX1IJCSgxIDw8IDIpCS8qIFNlZ21lbnQgaXMgcmVhZGFibGUgKi8KKysjZGVmaW5lIFBGX1BBR0VFWEVDCSgxIDw8IDQpCS8qIEVuYWJsZSAgUEFHRUVYRUMgKi8KKysjZGVmaW5lIFBGX05PUEFHRUVYRUMJKDEgPDwgNSkJLyogRGlzYWJsZSBQQUdFRVhFQyAqLworKyNkZWZpbmUgUEZfU0VHTUVYRUMJKDEgPDwgNikJLyogRW5hYmxlICBTRUdNRVhFQyAqLworKyNkZWZpbmUgUEZfTk9TRUdNRVhFQwkoMSA8PCA3KQkvKiBEaXNhYmxlIFNFR01FWEVDICovCisrI2RlZmluZSBQRl9NUFJPVEVDVAkoMSA8PCA4KQkvKiBFbmFibGUgIE1QUk9URUNUICovCisrI2RlZmluZSBQRl9OT01QUk9URUNUCSgxIDw8IDkpCS8qIERpc2FibGUgTVBST1RFQ1QgKi8KKysjZGVmaW5lIFBGX1JBTkRFWEVDCSgxIDw8IDEwKQkvKiBFbmFibGUgIFJBTkRFWEVDICovCisrI2RlZmluZSBQRl9OT1JBTkRFWEVDCSgxIDw8IDExKQkvKiBEaXNhYmxlIFJBTkRFWEVDICovCisrI2RlZmluZSBQRl9FTVVUUkFNUAkoMSA8PCAxMikJLyogRW5hYmxlICBFTVVUUkFNUCAqLworKyNkZWZpbmUgUEZfTk9FTVVUUkFNUAkoMSA8PCAxMykJLyogRGlzYWJsZSBFTVVUUkFNUCAqLworKyNkZWZpbmUgUEZfUkFORE1NQVAJKDEgPDwgMTQpCS8qIEVuYWJsZSAgUkFORE1NQVAgKi8KKysjZGVmaW5lIFBGX05PUkFORE1NQVAJKDEgPDwgMTUpCS8qIERpc2FibGUgUkFORE1NQVAgKi8KKyAjZGVmaW5lIFBGX01BU0tPUwkweDBmZjAwMDAwCS8qIE9TLXNwZWNpZmljICovCisgI2RlZmluZSBQRl9NQVNLUFJPQwkweGYwMDAwMDAwCS8qIFByb2Nlc3Nvci1zcGVjaWZpYyAqLworIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS80MDAtdGVzdHMtc2FuZGJveC1saWJkbC1wYXRocy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvNDAwLXRlc3RzLXNhbmRib3gtbGliZGwtcGF0aHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQzZGRhNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvNDAwLXRlc3RzLXNhbmRib3gtbGliZGwtcGF0aHMucGF0Y2gKQEAgLTAsMCArMSwxOTggQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2dsaWJjLzIuOS8zMDIwX2FsbF9nbGliYy10ZXN0cy1zYW5kYm94LWxpYmRsLXBhdGhzLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQord2hlbiBnbGliYyBydW5zIGl0cyB0ZXN0cywgaXQgZG9lcyBzbyBieSBpbnZva2luZyB0aGUgbG9jYWwgbGlicmFyeSBsb2FkZXIuCitpbiBHZW50b28sIHdlIGJ1aWxkL3J1biBpbnNpZGUgb2Ygb3VyICJzYW5kYm94IiB3aGljaCBpdHNlbGYgaXMgbGlua2VkIGFnYWluc3QKK2xpYmRsIChzbyB0aGF0IGl0IGNhbiBsb2FkIGxpYnJhcmllcyBhbmQgcHVsbCBvdXQgc3ltYm9scykuICB0aGUgdHJvdWJsZQoraXMgdGhhdCB3aGVuIHlvdSB1cGdyYWRlIGZyb20gYW4gb2xkZXIgZ2xpYmMgdG8gdGhlIG5ldyBvbmUsIG9mdGVuIHRpbWVzCitpbnRlcm5hbCBzeW1ib2xzIGNoYW5nZSBuYW1lIG9yIGFiaS4gIHRoaXMgaXMgbm9ybWFsbHkgT0sgYXMgeW91IGNhbm5vdCB1c2UKK2xpYmMuc28gZnJvbSBzYXkgdmVyc2lvbiAyLjMuNiBidXQgbGlicHRocmVhZC5zbyBmcm9tIHNheSB2ZXJzaW9uIDIuNSwgc28KK3dlIGFsd2F5cyBzYXkgImtlZXAgYWxsIG9mIHRoZSBnbGliYyBsaWJyYXJpZXMgZnJvbSB0aGUgc2FtZSBidWlsZCIuICBidXQKK3doZW4gZ2xpYmMgcnVucyBpdHMgdGVzdHMsIGl0IHVzZXMgZHluYW1pYyBwYXRocyB0byBwb2ludCB0byBpdHMgbmV3IGxvY2FsCitjb3BpZXMgb2YgbGlicmFyaWVzLiAgaWYgdGhlIHRlc3QgZG9lc250IHVzZSBsaWJkbCwgdGhlbiBnbGliYyBkb2VzbnQgYWRkCitpdHMgcGF0aCwgYW5kIHdoZW4gc2FuZGJveCB0cmlnZ2VycyB0aGUgbG9hZGluZyBvZiBsaWJkbCwgZ2xpYmMgZG9lcyBzbworZnJvbSB0aGUgaG9zdCBzeXN0ZW0gc3lzdGVtLiAgdGhpcyBnZXRzIHVzIGludG8gdGhlIGNhc2Ugb2YgYWxsIGxpYnJhcmllcworYXJlIGZyb20gdGhlIGxvY2FsbHkgY29tcGlsZWQgdmVyc2lvbiBvZiBnbGliYyBleGNlcHQgZm9yIGxpYmRsLnNvLgorCitGaXggYnkgV29ybW8KKworaHR0cDovL2J1Z3MuZ2VudG9vLm9yZy81Njg5OAorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2xpYmMtMl85Lm9yaWcvZ3JwL3RzdF9mZ2V0Z3JlbnQuc2ggZ2xpYmMtMl85L2dycC90c3RfZmdldGdyZW50LnNoCistLS0gZ2xpYmMtMl85Lm9yaWcvZ3JwL3RzdF9mZ2V0Z3JlbnQuc2gJMjAwMS0wNy0wNiAwNjo1NDo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yXzkvZ3JwL3RzdF9mZ2V0Z3JlbnQuc2gJMjAwOS0wMi0wMiAyMjowMToyMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNCw3ICsyNCw4IEBACisgcnRsZF9pbnN0YWxsZWRfbmFtZT0kMTsgc2hpZnQKKyAKKyB0ZXN0b3V0PSR7Y29tbW9uX29ianBmeH0vZ3JwL3RzdF9mZ2V0Z3JlbnQub3V0CistbGlicmFyeV9wYXRoPSR7Y29tbW9uX29ianBmeH0KKysjIG1ha2Ugc3VyZSBsaWJkbCBpcyBhbHNvIGluIHBhdGggaW4gY2FzZSBzYW5kYm94IGlzIGluIHVzZQorK2xpYnJhcnlfcGF0aD0ke2NvbW1vbl9vYmpwZnh9OiR7Y29tbW9uX29ianBmeH0vZGxmY24KKyAKKyByZXN1bHQ9MAorIAorZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9pY29udmRhdGEvcnVuLWljb252LXRlc3Quc2ggZ2xpYmMtMl85L2ljb252ZGF0YS9ydW4taWNvbnYtdGVzdC5zaAorLS0tIGdsaWJjLTJfOS5vcmlnL2ljb252ZGF0YS9ydW4taWNvbnYtdGVzdC5zaAkyMDA4LTA1LTE1IDAzOjU5OjQ0LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTJfOS9pY29udmRhdGEvcnVuLWljb252LXRlc3Quc2gJMjAwOS0wMi0wMiAyMjowMToyMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zNCw3ICszNCw3IEBACisgZXhwb3J0IEdDT05WX1BBVEgKKyAKKyAjIFdlIGhhdmUgdG8gaGF2ZSBzb21lIGRpcmVjdG9yaWVzIGluIHRoZSBsaWJyYXJ5IHBhdGguCistTElCUEFUSD0kY29kaXI6JGNvZGlyL2ljb252ZGF0YQorK0xJQlBBVEg9JGNvZGlyOiRjb2Rpci9pY29udmRhdGE6JGNvZGlyL2RsZmNuCisgCisgIyBIb3cgdGhlIHN0YXJ0IHRoZSBpY29udigxKSBwcm9ncmFtLgorIElDT05WPSckY29kaXIvZWxmL2xkLnNvIC0tbGlicmFyeS1wYXRoICRMSUJQQVRIIC0taW5oaWJpdC1ycGF0aCAke2Zyb219LnNvIFwKK2RpZmYgLWR1ck4gZ2xpYmMtMl85Lm9yaWcvaWNvbnZkYXRhL3RzdC10YWJsZS5zaCBnbGliYy0yXzkvaWNvbnZkYXRhL3RzdC10YWJsZS5zaAorLS0tIGdsaWJjLTJfOS5vcmlnL2ljb252ZGF0YS90c3QtdGFibGUuc2gJMjAwMi0wNC0yNCAyMzozOTozNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yXzkvaWNvbnZkYXRhL3RzdC10YWJsZS5zaAkyMDA5LTAyLTAyIDIyOjAxOjIzLjAwMDAwMDAwMCArMDEwMAorQEAgLTU5LDggKzU5LDExIEBACisgICBpcnJldmVyc2libGU9JHtjaGFyc2V0fS5pcnJldmVyc2libGUKKyBmaQorIAorKyMgbWFrZSBzdXJlIGxpYmRsIGlzIGFsc28gaW4gcGF0aCBpbiBjYXNlIHNhbmRib3ggaXMgaW4gdXNlCisrbGlicmFyeV9wYXRoPSR7Y29tbW9uX29ianBmeH06JHtjb21tb25fb2JqcGZ4fS9kbGZjbgorKworICMgaWNvbnYgaW4gb25lIGRpcmVjdGlvbi4KKy0ke2NvbW1vbl9vYmpwZnh9ZWxmL2xkLnNvIC0tbGlicmFyeS1wYXRoICRjb21tb25fb2JqcGZ4IFwKKyske2NvbW1vbl9vYmpwZnh9ZWxmL2xkLnNvIC0tbGlicmFyeS1wYXRoICRsaWJyYXJ5X3BhdGggXAorICR7b2JqcGZ4fXRzdC10YWJsZS1mcm9tICR7Y2hhcnNldH0gXAorICAgPiAke29ianBmeH10c3QtJHtjaGFyc2V0fS50YWJsZQorIAorZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9pbnRsL3RzdC1jb2Rlc2V0LnNoIGdsaWJjLTJfOS9pbnRsL3RzdC1jb2Rlc2V0LnNoCistLS0gZ2xpYmMtMl85Lm9yaWcvaW50bC90c3QtY29kZXNldC5zaAkyMDA1LTA0LTA2IDA0OjE4OjM1LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTJfOS9pbnRsL3RzdC1jb2Rlc2V0LnNoCTIwMDktMDItMDIgMjI6MDE6MjMuMDAwMDAwMDAwICswMTAwCitAQCAtMzcsNiArMzcsOSBAQAorIExPQ1BBVEg9JHtjb21tb25fb2JqcGZ4fWxvY2FsZWRhdGEKKyBleHBvcnQgTE9DUEFUSAorIAorKyMgbWFrZSBzdXJlIGxpYmRsIGlzIGFsc28gaW4gcGF0aCBpbiBjYXNlIHNhbmRib3ggaXMgaW4gdXNlCisrbGlicmFyeV9wYXRoPSR7Y29tbW9uX29ianBmeH06JHtjb21tb25fb2JqcGZ4fS9kbGZjbgorKworICR7Y29tbW9uX29ianBmeH1lbGYvbGQuc28gLS1saWJyYXJ5LXBhdGggJGNvbW1vbl9vYmpwZnggXAorICR7b2JqcGZ4fXRzdC1jb2Rlc2V0ID4gJHtvYmpwZnh9dHN0LWNvZGVzZXQub3V0CisgCitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL2ludGwvdHN0LWdldHRleHQuc2ggZ2xpYmMtMl85L2ludGwvdHN0LWdldHRleHQuc2gKKy0tLSBnbGliYy0yXzkub3JpZy9pbnRsL3RzdC1nZXR0ZXh0LnNoCTIwMDQtMDgtMTUgMjE6Mjg6MTguMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMl85L2ludGwvdHN0LWdldHRleHQuc2gJMjAwOS0wMi0wMiAyMjowMToyMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC01MSw5ICs1MSwxMiBAQAorIExPQ1BBVEg9JHtjb21tb25fb2JqcGZ4fWxvY2FsZWRhdGEKKyBleHBvcnQgTE9DUEFUSAorIAorKyMgbWFrZSBzdXJlIGxpYmRsIGlzIGFsc28gaW4gcGF0aCBpbiBjYXNlIHNhbmRib3ggaXMgaW4gdXNlCisrbGlicmFyeV9wYXRoPSR7Y29tbW9uX29ianBmeH06JHtjb21tb25fb2JqcGZ4fS9kbGZjbgorKworICMgTm93IHJ1biB0aGUgdGVzdC4KKyBNQUxMT0NfVFJBQ0U9JG1hbGxvY190cmFjZSBMT0NQQVRIPSR7b2JqcGZ4fWxvY2FsZWRpcjokTE9DUEFUSCBcCistJHtjb21tb25fb2JqcGZ4fWVsZi9sZC5zbyAtLWxpYnJhcnktcGF0aCAkY29tbW9uX29ianBmeCBcCisrJHtjb21tb25fb2JqcGZ4fWVsZi9sZC5zbyAtLWxpYnJhcnktcGF0aCAkbGlicmFyeV9wYXRoIFwKKyAke29ianBmeH10c3QtZ2V0dGV4dCA+ICR7b2JqcGZ4fXRzdC1nZXR0ZXh0Lm91dCAke29ianBmeH1kb21haW5kaXIKKyAKKyBleGl0ICQ/CitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL2ludGwvdHN0LWdldHRleHQyLnNoIGdsaWJjLTJfOS9pbnRsL3RzdC1nZXR0ZXh0Mi5zaAorLS0tIGdsaWJjLTJfOS5vcmlnL2ludGwvdHN0LWdldHRleHQyLnNoCTIwMDUtMDUtMDQgMTk6NTQ6NDguMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMl85L2ludGwvdHN0LWdldHRleHQyLnNoCTIwMDktMDItMDIgMjI6MDE6MjMuMDAwMDAwMDAwICswMTAwCitAQCAtNjUsOCArNjUsMTEgQEAKKyBMT0NQQVRIPSR7b2JqcGZ4fWRvbWFpbmRpcgorIGV4cG9ydCBMT0NQQVRICisgCisrIyBtYWtlIHN1cmUgbGliZGwgaXMgYWxzbyBpbiBwYXRoIGluIGNhc2Ugc2FuZGJveCBpcyBpbiB1c2UKKytsaWJyYXJ5X3BhdGg9JHtjb21tb25fb2JqcGZ4fToke2NvbW1vbl9vYmpwZnh9L2RsZmNuCisrCisgIyBOb3cgcnVuIHRoZSB0ZXN0LgorLSR7Y29tbW9uX29ianBmeH1lbGYvbGQuc28gLS1saWJyYXJ5LXBhdGggJGNvbW1vbl9vYmpwZnggXAorKyR7Y29tbW9uX29ianBmeH1lbGYvbGQuc28gLS1saWJyYXJ5LXBhdGggJGxpYnJhcnlfcGF0aCBcCisgJHtvYmpwZnh9dHN0LWdldHRleHQyID4gJHtvYmpwZnh9dHN0LWdldHRleHQyLm91dCAke29ianBmeH1kb21haW5kaXIgJiYKKyBjbXAgJHtvYmpwZnh9dHN0LWdldHRleHQyLm91dCAtIDw8RU9GCisgU3RyaW5nMSAtIExhbmcxOiAxc3Qgc3RyaW5nCitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL2ludGwvdHN0LXRyYW5zbGl0LnNoIGdsaWJjLTJfOS9pbnRsL3RzdC10cmFuc2xpdC5zaAorLS0tIGdsaWJjLTJfOS5vcmlnL2ludGwvdHN0LXRyYW5zbGl0LnNoCTIwMDUtMDUtMDQgMTk6NTY6MTAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMl85L2ludGwvdHN0LXRyYW5zbGl0LnNoCTIwMDktMDItMDIgMjI6MDE6MjMuMDAwMDAwMDAwICswMTAwCitAQCAtMzYsNyArMzYsMTAgQEAKKyBMT0NQQVRIPSR7Y29tbW9uX29ianBmeH1sb2NhbGVkYXRhCisgZXhwb3J0IExPQ1BBVEgKKyAKKy0ke2NvbW1vbl9vYmpwZnh9ZWxmL2xkLnNvIC0tbGlicmFyeS1wYXRoICRjb21tb25fb2JqcGZ4IFwKKysjIG1ha2Ugc3VyZSBsaWJkbCBpcyBhbHNvIGluIHBhdGggaW4gY2FzZSBzYW5kYm94IGlzIGluIHVzZQorK2xpYnJhcnlfcGF0aD0ke2NvbW1vbl9vYmpwZnh9OiR7Y29tbW9uX29ianBmeH0vZGxmY24KKysKKyske2NvbW1vbl9vYmpwZnh9ZWxmL2xkLnNvIC0tbGlicmFyeS1wYXRoICRsaWJyYXJ5X3BhdGggXAorICR7b2JqcGZ4fXRzdC10cmFuc2xpdCA+ICR7b2JqcGZ4fXRzdC10cmFuc2xpdC5vdXQgJHtvYmpwZnh9ZG9tYWluZGlyCisgCisgZXhpdCAkPworZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9tYWxsb2MvdHN0LW10cmFjZS5zaCBnbGliYy0yXzkvbWFsbG9jL3RzdC1tdHJhY2Uuc2gKKy0tLSBnbGliYy0yXzkub3JpZy9tYWxsb2MvdHN0LW10cmFjZS5zaAkyMDA1LTEwLTE1IDAxOjQwOjM1LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTJfOS9tYWxsb2MvdHN0LW10cmFjZS5zaAkyMDA5LTAyLTAyIDIyOjAxOjIzLjAwMDAwMDAwMCArMDEwMAorQEAgLTI0LDkgKzI0LDEyIEBACisgc3RhdHVzPTAKKyB0cmFwICJybSAtZiAke2NvbW1vbl9vYmpwZnh9bWFsbG9jL3RzdC1tdHJhY2UubGVhazsgZXhpdCAxIiAxIDIgMTUKKyAKKysjIG1ha2Ugc3VyZSBsaWJkbCBpcyBhbHNvIGluIHBhdGggaW4gY2FzZSBzYW5kYm94IGlzIGluIHVzZQorK2xpYnJhcnlfcGF0aD0ke2NvbW1vbl9vYmpwZnh9OiR7Y29tbW9uX29ianBmeH0vZGxmY24KKysKKyBNQUxMT0NfVFJBQ0U9JHtjb21tb25fb2JqcGZ4fW1hbGxvYy90c3QtbXRyYWNlLmxlYWsgXAorIExPQ1BBVEg9JHtjb21tb25fb2JqcGZ4fWxvY2FsZWRhdGEgR0NPTlZfUEFUSD0ke2NvbW1vbl9vYmpwZnh9aWNvbnZkYXRhIFwKKy0ke2NvbW1vbl9vYmpwZnh9ZWxmL2xkLnNvIC0tbGlicmFyeS1wYXRoICRjb21tb25fb2JqcGZ4IFwKKyske2NvbW1vbl9vYmpwZnh9ZWxmL2xkLnNvIC0tbGlicmFyeS1wYXRoICRsaWJyYXJ5X3BhdGggXAorICAgJHtjb21tb25fb2JqcGZ4fW1hbGxvYy90c3QtbXRyYWNlIHx8IHN0YXR1cz0xCisgCisgaWYgdGVzdCAkc3RhdHVzIC1lcSAwICYmIHRlc3QgLWYgJHtjb21tb25fb2JqcGZ4fW1hbGxvYy9tdHJhY2U7IHRoZW4KK2RpZmYgLWR1ck4gZ2xpYmMtMl85Lm9yaWcvbnB0bC90c3QtdGxzNi5zaCBnbGliYy0yXzkvbnB0bC90c3QtdGxzNi5zaAorLS0tIGdsaWJjLTJfOS5vcmlnL25wdGwvdHN0LXRsczYuc2gJMjAwMy0wOS0wMyAwMDowMjo1OS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yXzkvbnB0bC90c3QtdGxzNi5zaAkyMDA5LTAyLTAyIDIyOjAxOjIzLjAwMDAwMDAwMCArMDEwMAorQEAgLTUsOCArNSw4IEBACisgcnRsZF9pbnN0YWxsZWRfbmFtZT0kMTsgc2hpZnQKKyBsb2dmaWxlPSRjb21tb25fb2JqcGZ4L25wdGwvdHN0LXRsczYub3V0CisgCistIyBXZSBoYXZlIHRvIGZpbmQgbGliYyBhbmQgbnB0bAorLWxpYnJhcnlfcGF0aD0ke2NvbW1vbl9vYmpwZnh9OiR7Y29tbW9uX29ianBmeH1ucHRsCisrIyBXZSBoYXZlIHRvIGZpbmQgbGliYyBhbmQgbnB0bCAoYWxzbyBsaWJkbCBpbiBjYXNlIHNhbmRib3ggaXMgaW4gdXNlKQorK2xpYnJhcnlfcGF0aD0ke2NvbW1vbl9vYmpwZnh9OiR7Y29tbW9uX29ianBmeH1ucHRsOiR7Y29tbW9uX29ianBmeH0vZGxmY24KKyB0c3RfdGxzNT0iJHtlbGZfb2JqcGZ4fSR7cnRsZF9pbnN0YWxsZWRfbmFtZX0gLS1saWJyYXJ5LXBhdGggJHtsaWJyYXJ5X3BhdGh9IFwKKyAJICAke2NvbW1vbl9vYmpwZnh9L25wdGwvdHN0LXRsczUiCisgCitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL3Bvc2l4L2dsb2J0ZXN0LnNoIGdsaWJjLTJfOS9wb3NpeC9nbG9idGVzdC5zaAorLS0tIGdsaWJjLTJfOS5vcmlnL3Bvc2l4L2dsb2J0ZXN0LnNoCTIwMDctMDItMTQgMjA6NTI6MzMuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMl85L3Bvc2l4L2dsb2J0ZXN0LnNoCTIwMDktMDItMDIgMjI6MDE6MjMuMDAwMDAwMDAwICswMTAwCitAQCAtMTgsNyArMTgsNyBAQAorIGVzYWMKKyAKKyAjIFdlIGhhdmUgdG8gZmluZCB0aGUgbGliYyBhbmQgdGhlIE5TUyBtb2R1bGVzLgorLWxpYnJhcnlfcGF0aD0ke2NvbW1vbl9vYmpwZnh9OiR7Y29tbW9uX29ianBmeH1uc3M6JHtjb21tb25fb2JqcGZ4fW5pczoke2NvbW1vbl9vYmpwZnh9ZGIyOiR7Y29tbW9uX29ianBmeH1oZXNpb2QKKytsaWJyYXJ5X3BhdGg9JHtjb21tb25fb2JqcGZ4fToke2NvbW1vbl9vYmpwZnh9bnNzOiR7Y29tbW9uX29ianBmeH1uaXM6JHtjb21tb25fb2JqcGZ4fWRiMjoke2NvbW1vbl9vYmpwZnh9aGVzaW9kOiR7Y29tbW9uX29ianBmeH0vZGxmY24KKyAKKyAjIFNpbmNlIHdlIHVzZSBgc29ydCcgd2UgbXVzdCBtYWtlIHN1cmUgdG8gdXNlIHRoZSBzYW1lIGxvY2FsZSBldmVyeXdoZXJlLgorIExDX0FMTD1DCitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL3Bvc2l4L3RzdC1nZXRjb25mLnNoIGdsaWJjLTJfOS9wb3NpeC90c3QtZ2V0Y29uZi5zaAorLS0tIGdsaWJjLTJfOS5vcmlnL3Bvc2l4L3RzdC1nZXRjb25mLnNoCTIwMDItMDktMDEgMTM6MTE6MjUuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMl85L3Bvc2l4L3RzdC1nZXRjb25mLnNoCTIwMDktMDItMDIgMjI6MDE6MjMuMDAwMDAwMDAwICswMTAwCitAQCAtMTAsNyArMTAsMTAgQEAKKyBlbHNlCisgICBydGxkX2luc3RhbGxlZF9uYW1lPSQxOyBzaGlmdAorICAgcnVuaXQoKSB7CistICAgICR7ZWxmX29ianBmeH0ke3J0bGRfaW5zdGFsbGVkX25hbWV9IC0tbGlicmFyeS1wYXRoICR7Y29tbW9uX29ianBmeH0gIiRAIgorKyAgICAKKysgICMgbWFrZSBzdXJlIGxpYmRsIGlzIGFsc28gaW4gcGF0aCBpbiBjYXNlIHNhbmRib3ggaXMgaW4gdXNlCisrICBsaWJyYXJ5X3BhdGg9JHtjb21tb25fb2JqcGZ4fToke2NvbW1vbl9vYmpwZnh9L2RsZmNuCisrICAgICR7ZWxmX29ianBmeH0ke3J0bGRfaW5zdGFsbGVkX25hbWV9IC0tbGlicmFyeS1wYXRoICR7bGlicmFyeV9wYXRofSAiJEAiCisgICB9CisgZmkKKyAKK2RpZmYgLWR1ck4gZ2xpYmMtMl85Lm9yaWcvcG9zaXgvd29yZGV4cC10c3Quc2ggZ2xpYmMtMl85L3Bvc2l4L3dvcmRleHAtdHN0LnNoCistLS0gZ2xpYmMtMl85Lm9yaWcvcG9zaXgvd29yZGV4cC10c3Quc2gJMjAwMC0xMC0yMCAxODoyMzozMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yXzkvcG9zaXgvd29yZGV4cC10c3Quc2gJMjAwOS0wMi0wMiAyMjowMToyMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xOSw4ICsxOSwxMSBAQAorICIKKyBleHBvcnQgSUZTCisgCisrIyBtYWtlIHN1cmUgbGliZGwgaXMgYWxzbyBpbiBwYXRoIGluIGNhc2Ugc2FuZGJveCBpcyBpbiB1c2UKKytsaWJyYXJ5X3BhdGg9JHtjb21tb25fb2JqcGZ4fToke2NvbW1vbl9vYmpwZnh9L2RsZmNuCisrCisgZmFpbGVkPTAKKy0ke2VsZl9vYmpwZnh9JHtydGxkX2luc3RhbGxlZF9uYW1lfSAtLWxpYnJhcnktcGF0aCAke2NvbW1vbl9vYmpwZnh9IFwKKyske2VsZl9vYmpwZnh9JHtydGxkX2luc3RhbGxlZF9uYW1lfSAtLWxpYnJhcnktcGF0aCAke2xpYnJhcnlfcGF0aH0gXAorICR7Y29tbW9uX29ianBmeH1wb3NpeC93b3JkZXhwLXRlc3QgJyQqJyA+ICR7dGVzdG91dH0xCisgY2F0IDw8IkVPRiIgfCBjbXAgLSAke3Rlc3RvdXR9MSA+PiAkbG9nZmlsZSB8fCBmYWlsZWQ9MQorIHdvcmRleHAgcmV0dXJuZWQgMApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS80MTAtMi45LWZubWF0Y2gucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzQxMC0yLjktZm5tYXRjaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODY1ZWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS80MTAtMi45LWZubWF0Y2gucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2xpYmMvMi45LzUwMjFfYWxsXzIuOS1mbm1hdGNoLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQoraHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2xpYmMtaGFja2VyLzIwMDItMTEvbXNnMDAwNzEuaHRtbAorCitXaGVuIGZubWF0Y2ggZGV0ZWN0cyBhbiBpbnZhbGlkIG11bHRpYnl0ZSBjaGFyYWN0ZXIgaXQgc2hvdWxkIGZhbGwgYmFjayB0bworc2luZ2xlIGJ5dGUgbWF0Y2hpbmcsIHNvIHRoYXQgIioiIGhhcyBhIGNoYW5jZSB0byBtYXRjaCBzdWNoIGEgc3RyaW5nLgorCitBbmRyZWFzLgorCisyMDA1LTA0LTEyICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgorCisJKiBwb3NpeC9mbm1hdGNoLmMgKGZubWF0Y2gpOiBJZiBjb252ZXJzaW9uIHRvIHdpZGUgY2hhcmFjdGVyCisJZmFpbHMgZmFsbCBiYWNrIHRvIHNpbmdsZSBieXRlIG1hdGNoaW5nLgorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2xpYmMtMl85Lm9yaWcvcG9zaXgvZm5tYXRjaC5jIGdsaWJjLTJfOS9wb3NpeC9mbm1hdGNoLmMKKy0tLSBnbGliYy0yXzkub3JpZy9wb3NpeC9mbm1hdGNoLmMJMjAwNy0wNy0yOCAyMjozNTowMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yXzkvcG9zaXgvZm5tYXRjaC5jCTIwMDktMDItMDIgMjI6MDE6MjUuMDAwMDAwMDAwICswMTAwCitAQCAtMzI3LDYgKzMyNyw3IEBACisgIyBpZiBIQU5ETEVfTVVMVElCWVRFCisgICBpZiAoX19idWlsdGluX2V4cGVjdCAoTUJfQ1VSX01BWCwgMSkgIT0gMSkKKyAgICAgeworKyAgICAgIGNvbnN0IGNoYXIgKm9yaWdfcGF0dGVybiA9IHBhdHRlcm47CisgICAgICAgbWJzdGF0ZV90IHBzOworICAgICAgIHNpemVfdCBuOworICAgICAgIGNvbnN0IGNoYXIgKnA7CitAQCAtMzgyLDEwICszODMsOCBAQAorIAkgIHdzdHJpbmcgPSAod2NoYXJfdCAqKSBhbGxvY2EgKChuICsgMSkgKiBzaXplb2YgKHdjaGFyX3QpKTsKKyAJICBuID0gbWJzcnRvd2NzICh3c3RyaW5nLCAmcCwgbiArIDEsICZwcyk7CisgCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKG4gPT0gKHNpemVfdCkgLTEsIDApKQorLQkgICAgLyogU29tZXRoaW5nIHdyb25nLgorLQkgICAgICAgWFhYIERvIHdlIGhhdmUgdG8gc2V0IGBlcnJubycgdG8gc29tZXRoaW5nIHdoaWNoIG1ic3J0b3dzIGhhc24ndAorLQkgICAgICAgYWxyZWFkeSBkb25lPyAgKi8KKy0JICAgIHJldHVybiAtMTsKKysJICAgIC8qIFNvbWV0aGluZyB3cm9uZy4gIEZhbGwgYmFjayB0byBzaW5nbGUgYnl0ZSBtYXRjaGluZy4gICovCisrCSAgICBnb3RvIHRyeV9zaW5nbGVieXRlOworIAkgIGlmIChwKQorIAkgICAgeworIAkgICAgICBtZW1zZXQgKCZwcywgJ1wwJywgc2l6ZW9mIChwcykpOworQEAgLTM5NywxMCArMzk2LDggQEAKKyAJcHJlcGFyZV93c3RyaW5nOgorIAkgIG4gPSBtYnNydG93Y3MgKE5VTEwsICZzdHJpbmcsIDAsICZwcyk7CisgCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKG4gPT0gKHNpemVfdCkgLTEsIDApKQorLQkgICAgLyogU29tZXRoaW5nIHdyb25nLgorLQkgICAgICAgWFhYIERvIHdlIGhhdmUgdG8gc2V0IGBlcnJubycgdG8gc29tZXRoaW5nIHdoaWNoIG1ic3J0b3dzIGhhc24ndAorLQkgICAgICAgYWxyZWFkeSBkb25lPyAgKi8KKy0JICAgIHJldHVybiAtMTsKKysJICAgIC8qIFNvbWV0aGluZyB3cm9uZy4gIEZhbGwgYmFjayB0byBzaW5nbGUgYnl0ZSBtYXRjaGluZy4gICovCisrCSAgICBnb3RvIHRyeV9zaW5nbGVieXRlOworIAkgIHdzdHJpbmcgPSAod2NoYXJfdCAqKSBhbGxvY2EgKChuICsgMSkgKiBzaXplb2YgKHdjaGFyX3QpKTsKKyAJICBhc3NlcnQgKG1ic2luaXQgKCZwcykpOworIAkgICh2b2lkKSBtYnNydG93Y3MgKHdzdHJpbmcsICZzdHJpbmcsIG4gKyAxLCAmcHMpOworQEAgLTQwOCw2ICs0MDUsOSBAQAorIAorICAgICAgIHJldHVybiBpbnRlcm5hbF9mbndtYXRjaCAod3BhdHRlcm4sIHdzdHJpbmcsIHdzdHJpbmcgKyBuLAorIAkJCQlmbGFncyAmIEZOTV9QRVJJT0QsIGZsYWdzLCBOVUxMKTsKKysKKysgICAgdHJ5X3NpbmdsZWJ5dGU6CisrICAgICAgcGF0dGVybiA9IG9yaWdfcGF0dGVybjsKKyAgICAgfQorICMgZW5kaWYgIC8qIG1ic3RhdGVfdCBhbmQgbWJzcnRvd2NzIG9yIF9MSUJDLiAgKi8KKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvNDIwLWRvbnQtYnVpbGQtdGltZXpvbmUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzQyMC1kb250LWJ1aWxkLXRpbWV6b25lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YWViODIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzQyMC1kb250LWJ1aWxkLXRpbWV6b25lLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2dsaWJjLzIuOS81MDYzX2FsbF9nbGliYy1kb250LWJ1aWxkLXRpbWV6b25lLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQordGltZXpvbmUgZGF0YSBoYXMgYmVlbiBzcGxpdCBpbnRvIHRoZSBwYWNrYWdlIHN5cy1saWJzL3RpbWV6b25lLWRhdGEKKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL01ha2Vjb25maWcgZ2xpYmMtMl85L01ha2Vjb25maWcKKy0tLSBnbGliYy0yXzkub3JpZy9NYWtlY29uZmlnCTIwMDktMDItMDIgMjI6MDE6MDUuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMl85L01ha2Vjb25maWcJMjAwOS0wMi0wMiAyMjowMToyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC05MTksNyArOTE5LDcgQEAKKyAJICAgICAgc3RkbGliIHN0ZGlvLWNvbW1vbiBsaWJpbyBtYWxsb2Mgc3RyaW5nIHdjc21icyB0aW1lIGRpcmVudCAgICBcCisgCSAgICAgIGdycCBwd2QgcG9zaXggaW8gdGVybWlvcyByZXNvdXJjZSBtaXNjIHNvY2tldCBzeXN2aXBjIGdtb24gICAgXAorIAkgICAgICBnbnVsaWIgaWNvbnYgaWNvbnZkYXRhIHdjdHlwZSBtYW51YWwgc2hhZG93IHBvIGFyZ3AJICAgIFwKKy0JICAgICAgY3J5cHQgbnNzIGxvY2FsZWRhdGEgdGltZXpvbmUgcnQgY29uZm9ybSBkZWJ1ZwkJICAgIFwKKysJICAgICAgY3J5cHQgbnNzIGxvY2FsZWRhdGEgcnQgY29uZm9ybSBkZWJ1ZwkJICAgIFwKKyAJICAgICAgJChhZGQtb24tc3ViZGlycykgJChkbGZjbikgJChiaW5mbXQtc3ViZGlyKQorIAorIGlmbmRlZiBhdm9pZC1nZW5lcmF0ZWQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvNDMwLTIuNy1jcm9zcy1jb21waWxlLW5wdGwucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzQzMC0yLjctY3Jvc3MtY29tcGlsZS1ucHRsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YzU1NGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzQzMC0yLjctY3Jvc3MtY29tcGlsZS1ucHRsLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2dsaWJjLzIuOS81MDcwX2FsbF9nbGliYy0yLjctY3Jvc3MtY29tcGlsZS1ucHRsLnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorQSBsaXR0bGUgaGFjayBmb3IgY3Jvc3MtY29tcGlsaW5nIE5QVEwKKworaHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2xpYmMtYWxwaGEvMjAwNS0wMi9tc2cwMDA0My5odG1sCisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9ucHRsL3N5c2RlcHMvcHRocmVhZC9jb25maWd1cmUgZ2xpYmMtMl85L25wdGwvc3lzZGVwcy9wdGhyZWFkL2NvbmZpZ3VyZQorLS0tIGdsaWJjLTJfOS5vcmlnL25wdGwvc3lzZGVwcy9wdGhyZWFkL2NvbmZpZ3VyZQkyMDA3LTEwLTE3IDAwOjI0OjMwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTJfOS9ucHRsL3N5c2RlcHMvcHRocmVhZC9jb25maWd1cmUJMjAwOS0wMi0wMiAyMjowMToyOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC03OCw2ICs3OCwxMCBAQAorIGZpCisgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGliY19jdl9mb3JjZWRfdW53aW5kIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kbGliY19jdl9mb3JjZWRfdW53aW5kIiA+JjY7IH0KKytpZiB0ZXN0ICRsaWJjX2N2X2ZvcmNlZF91bndpbmQgPSBubyAtYSAkYnVpbGRfY3B1ICE9ICRob3N0X2NwdTsgdGhlbgorKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvcmNpbmcgbGliY19jdl9mb3JjZWRfdW53aW5kID0geWVzIGZvciBjcm9zcy1jb21waWxlIgorKyAgbGliY19jdl9mb3JjZWRfdW53aW5kPXllcworK2ZpCisgaWYgdGVzdCAkbGliY19jdl9mb3JjZWRfdW53aW5kID0geWVzOyB0aGVuCisgICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorICNkZWZpbmUgSEFWRV9GT1JDRURfVU5XSU5EIDEKK0BAIC0xNDEsNiArMTQ1LDEwIEBACisgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGliY19jdl9jX2NsZWFudXAiID4mNQorIGVjaG8gIiR7RUNIT19UfSRsaWJjX2N2X2NfY2xlYW51cCIgPiY2OyB9CisgICBDRkxBR1M9IiRvbGRfQ0ZMQUdTIgorKyAgaWYgdGVzdCAkbGliY19jdl9jX2NsZWFudXAgPSBubyAtYSAkYnVpbGRfY3B1ICE9ICRob3N0X2NwdTsgdGhlbgorKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBmb3JjaW5nIGxpYmNfY3ZfY19jbGVhbnVwID0geWVzIGZvciBjcm9zcy1jb21waWxlIgorKyAgICBsaWJjX2N2X2NfY2xlYW51cD15ZXMKKysgIGZpCisgICBpZiB0ZXN0ICRsaWJjX2N2X2NfY2xlYW51cCA9IG5vOyB0aGVuCisgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHRoZSBjb21waWxlciBtdXN0IHN1cHBvcnQgQyBjbGVhbnVwIGhhbmRsaW5nIiA+JjUKKyBlY2hvICIkYXNfbWU6IGVycm9yOiB0aGUgY29tcGlsZXIgbXVzdCBzdXBwb3J0IEMgY2xlYW51cCBoYW5kbGluZyIgPiYyO30KK2RpZmYgLWR1ck4gZ2xpYmMtMl85Lm9yaWcvbnB0bC9zeXNkZXBzL3B0aHJlYWQvY29uZmlndXJlLmluIGdsaWJjLTJfOS9ucHRsL3N5c2RlcHMvcHRocmVhZC9jb25maWd1cmUuaW4KKy0tLSBnbGliYy0yXzkub3JpZy9ucHRsL3N5c2RlcHMvcHRocmVhZC9jb25maWd1cmUuaW4JMjAwMy0xMi0wMyAwNzo1MDowMS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yXzkvbnB0bC9zeXNkZXBzL3B0aHJlYWQvY29uZmlndXJlLmluCTIwMDktMDItMDIgMjI6MDE6MjguMDAwMDAwMDAwICswMTAwCitAQCAtMjgsNiArMjgsOSBAQAorIHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKmNvbnRleHQ7CisgX1Vud2luZF9HZXRDRkEgKGNvbnRleHQpXSwKKyBsaWJjX2N2X2ZvcmNlZF91bndpbmQ9eWVzLCBsaWJjX2N2X2ZvcmNlZF91bndpbmQ9bm8pXSkKKytpZiB0ZXN0ICRsaWJjX2N2X2ZvcmNlZF91bndpbmQgPSBubyAtYSAkYnVpbGRfY3B1ICE9ICRob3N0X2NwdTsgdGhlbgorKyAgbGliY19jdl9mb3JjZWRfdW53aW5kPXllcworK2ZpCisgaWYgdGVzdCAkbGliY19jdl9mb3JjZWRfdW53aW5kID0geWVzOyB0aGVuCisgICBBQ19ERUZJTkUoSEFWRV9GT1JDRURfVU5XSU5EKQorIGRubCBDaGVjayBmb3IgQyBjbGVhbnVwIGhhbmRsaW5nLgorQEAgLTQxLDYgKzQ0LDkgQEAKKyAgIHB1dHMgKCJ0ZXN0IildLAorIGxpYmNfY3ZfY19jbGVhbnVwPXllcywgbGliY19jdl9jX2NsZWFudXA9bm8pXSkKKyAgIENGTEFHUz0iJG9sZF9DRkxBR1MiCisrICBpZiB0ZXN0ICRsaWJjX2N2X2NfY2xlYW51cCA9IG5vIC1hICRidWlsZF9jcHUgIT0gJGhvc3RfY3B1OyB0aGVuCisrICAgIGxpYmNfY3ZfY19jbGVhbnVwPXllcworKyAgZmkKKyAgIGlmIHRlc3QgJGxpYmNfY3ZfY19jbGVhbnVwID0gbm87IHRoZW4KKyAgICAgQUNfTVNHX0VSUk9SKFt0aGUgY29tcGlsZXIgbXVzdCBzdXBwb3J0IEMgY2xlYW51cCBoYW5kbGluZ10pCisgICBmaQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS80NDAtYWxwaGEtZ2xpYmMtMi40LXhzdGF0LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS80NDAtYWxwaGEtZ2xpYmMtMi40LXhzdGF0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNTk1NGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzQ0MC1hbHBoYS1nbGliYy0yLjQteHN0YXQucGF0Y2gKQEAgLTAsMCArMSwyNDkgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2dsaWJjLzIuOS82MDAxX2FsbF9hbHBoYS1nbGliYy0yLjQteHN0YXQucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0xMDI2CitodHRwOi8vc291cmNld2FyZS5vcmcvbWwvbGliYy1hbHBoYS8yMDA1LTAyL21zZzAwMTIyLmh0bWwKKworMjAwNS0wMi0yNiAgR09UTyBNYXNhbm9yaSAgPGdvdG9tQGRlYmlhbi5vci5qcD4KKworCSogc3lzZGVwcy91bml4L3N5c3YvbGludXgva2VybmVsLWZlYXR1cmVzLmg6IERlZmluZQorCV9fQVNTVU1FX1NUQVQ2NF9TWVNDQUxMLgorCSogc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvZnhzdGF0LmM6IENoZWNrCisJX19BU1NVTUVfU1RBVDY0X1NZU0NBTEwuCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9meHN0YXRhdC5jOiBMaWtld2lzZS4KKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2x4c3RhdC5jOiBMaWtld2lzZS4KKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3hzdGF0LmM6IExpa2V3aXNlLgorCSogc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEveHN0YXRjb252LmM6IERvbid0IGRlZmluZQorCV9fbGliY19taXNzaW5nX2F4cF9zdGF0NjQgd2hlbiBpdCdzIG5vdCBuZWVkZWQuCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS94c3RhdGNvbnYuaDogTGlrZXdpc2UuCisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9meHN0YXQuYyBnbGliYy0yXzkvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvZnhzdGF0LmMKKy0tLSBnbGliYy0yXzkub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9meHN0YXQuYwkyMDA0LTAzLTExIDAzOjU4OjQ0LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTJfOS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9meHN0YXQuYwkyMDA5LTAyLTAyIDIyOjAxOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTM1LDI3ICszNSwzOSBAQAorIF9fZnhzdGF0IChpbnQgdmVycywgaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqYnVmKQorIHsKKyAgIElOVEVSTkFMX1NZU0NBTExfREVDTCAoZXJyKTsKKy0gIGludCByZXN1bHQsIGVycm5vX291dDsKKysgIGludCByZXN1bHQ7CisgICBzdHJ1Y3Qga2VybmVsX3N0YXQga2J1ZjsKKyAKKysjaWYgX19BU1NVTUVfU1RBVDY0X1NZU0NBTEwgPiAwCisrICBpZiAodmVycyA9PSBfU1RBVF9WRVJfS0VSTkVMNjQpCisrICAgIHsKKysgICAgICByZXN1bHQgPSBJTlRFUk5BTF9TWVNDQUxMIChmc3RhdDY0LCBlcnIsIDIsIGZkLCBidWYpOworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICghSU5URVJOQUxfU1lTQ0FMTF9FUlJPUl9QIChyZXN1bHQsIGVyciksIDEpKQorKwlyZXR1cm4gcmVzdWx0OworKyAgICAgIF9fc2V0X2Vycm5vIChJTlRFUk5BTF9TWVNDQUxMX0VSUk5PIChyZXN1bHQsIGVycikpOworKyAgICAgIHJldHVybiAtMTsKKysgICAgfQorKyNlbGlmIGRlZmluZWQgX19OUl9mc3RhdDY0CisgICBpZiAodmVycyA9PSBfU1RBVF9WRVJfS0VSTkVMNjQgJiYgIV9fbGliY19taXNzaW5nX2F4cF9zdGF0NjQpCisgICAgIHsKKysgICAgICBpbnQgZXJybm9fb3V0OworICAgICAgIHJlc3VsdCA9IElOVEVSTkFMX1NZU0NBTEwgKGZzdGF0NjQsIGVyciwgMiwgZmQsIGJ1Zik7CisgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCFJTlRFUk5BTF9TWVNDQUxMX0VSUk9SX1AgKHJlc3VsdCwgZXJyKSwgMSkpCisgCXJldHVybiByZXN1bHQ7CisgICAgICAgZXJybm9fb3V0ID0gSU5URVJOQUxfU1lTQ0FMTF9FUlJOTyAocmVzdWx0LCBlcnIpOworICAgICAgIGlmIChlcnJub19vdXQgIT0gRU5PU1lTKQorLQlnb3RvIGZhaWw7CisrCXsKKysJICBfX3NldF9lcnJubyAoZXJybm9fb3V0KTsKKysJICByZXR1cm4gLTE7CisrCX0KKyAgICAgICBfX2xpYmNfbWlzc2luZ19heHBfc3RhdDY0ID0gMTsKKyAgICAgfQorKyNlbmRpZgorIAorICAgcmVzdWx0ID0gSU5URVJOQUxfU1lTQ0FMTCAoZnN0YXQsIGVyciwgMiwgZmQsICZrYnVmKTsKKyAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICghSU5URVJOQUxfU1lTQ0FMTF9FUlJPUl9QIChyZXN1bHQsIGVyciksIDEpKQorICAgICByZXR1cm4gX194c3RhdF9jb252ICh2ZXJzLCAma2J1ZiwgYnVmKTsKKy0gIGVycm5vX291dCA9IElOVEVSTkFMX1NZU0NBTExfRVJSTk8gKHJlc3VsdCwgZXJyKTsKKy0gIAorLSBmYWlsOgorLSAgX19zZXRfZXJybm8gKGVycm5vX291dCk7CisrICBfX3NldF9lcnJubyAoSU5URVJOQUxfU1lTQ0FMTF9FUlJOTyAocmVzdWx0LCBlcnIpKTsKKyAgIHJldHVybiAtMTsKKyB9CisgaGlkZGVuX2RlZiAoX19meHN0YXQpCitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2Z4c3RhdGF0LmMgZ2xpYmMtMl85L3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2Z4c3RhdGF0LmMKKy0tLSBnbGliYy0yXzkub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9meHN0YXRhdC5jCTIwMDYtMDItMjAgMjM6NTE6NDguMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMl85L3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2Z4c3RhdGF0LmMJMjAwOS0wMi0wMiAyMjowMTozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC02NSw2ICs2NSwyMCBAQAorICAgaW50IHJlc3VsdCwgZXJybm9fb3V0OworICAgc3RydWN0IGtlcm5lbF9zdGF0IGtzdDsKKyAKKysjaWYgX19BU1NVTUVfU1RBVDY0X1NZU0NBTEwgPiAwCisrICBpZiAodmVycyA9PSBfU1RBVF9WRVJfS0VSTkVMNjQpCisrICAgIHsKKysgICAgICBpZiAoZmxhZyAmIEFUX1NZTUxJTktfTk9GT0xMT1cpCisrCXJlc3VsdCA9IElOVEVSTkFMX1NZU0NBTEwgKGxzdGF0NjQsIGVyciwgMiwgZmlsZSwgc3QpOworKyAgICAgIGVsc2UKKysJcmVzdWx0ID0gSU5URVJOQUxfU1lTQ0FMTCAoc3RhdDY0LCBlcnIsIDIsIGZpbGUsIHN0KTsKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoIUlOVEVSTkFMX1NZU0NBTExfRVJST1JfUCAocmVzdWx0LCBlcnIpLCAxKSkKKysJcmV0dXJuIHJlc3VsdDsKKysgICAgICBlcnJub19vdXQgPSBJTlRFUk5BTF9TWVNDQUxMX0VSUk5PIChyZXN1bHQsIGVycik7CisrICAgICAgZ290byBmYWlsOworKyAgICB9CisrI2VsaWYgZGVmaW5lZCBfX05SX3N0YXQ2NAorICAgaWYgKHZlcnMgPT0gX1NUQVRfVkVSX0tFUk5FTDY0ICYmICFfX2xpYmNfbWlzc2luZ19heHBfc3RhdDY0KQorICAgICB7CisgICAgICAgaWYgKGZsYWcgJiBBVF9TWU1MSU5LX05PRk9MTE9XKQorQEAgLTc5LDYgKzkzLDcgQEAKKyAJZ290byBmYWlsOworICAgICAgIF9fbGliY19taXNzaW5nX2F4cF9zdGF0NjQgPSAxOworICAgICB9CisrI2VuZGlmCisgCisgICBpZiAoZmxhZyAmIEFUX1NZTUxJTktfTk9GT0xMT1cpCisgICAgIHJlc3VsdCA9IElOVEVSTkFMX1NZU0NBTEwgKGxzdGF0LCBlcnIsIDIsIGZpbGUsICZrc3QpOworZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9seHN0YXQuYyBnbGliYy0yXzkvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvbHhzdGF0LmMKKy0tLSBnbGliYy0yXzkub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9seHN0YXQuYwkyMDA0LTAzLTExIDAzOjU4OjQ0LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTJfOS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9seHN0YXQuYwkyMDA5LTAyLTAyIDIyOjAxOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTM1LDI3ICszNSwzOSBAQAorIF9fbHhzdGF0IChpbnQgdmVycywgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKmJ1ZikKKyB7CisgICBJTlRFUk5BTF9TWVNDQUxMX0RFQ0wgKGVycik7CistICBpbnQgcmVzdWx0LCBlcnJub19vdXQ7CisrICBpbnQgcmVzdWx0OworICAgc3RydWN0IGtlcm5lbF9zdGF0IGtidWY7CisgCisrI2lmIF9fQVNTVU1FX1NUQVQ2NF9TWVNDQUxMID4gMAorKyAgaWYgKHZlcnMgPT0gX1NUQVRfVkVSX0tFUk5FTDY0KQorKyAgICB7CisrICAgICAgcmVzdWx0ID0gSU5URVJOQUxfU1lTQ0FMTCAobHN0YXQ2NCwgZXJyLCAyLCBuYW1lLCBidWYpOworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICghSU5URVJOQUxfU1lTQ0FMTF9FUlJPUl9QIChyZXN1bHQsIGVyciksIDEpKQorKwlyZXR1cm4gcmVzdWx0OworKyAgICAgIF9fc2V0X2Vycm5vIChJTlRFUk5BTF9TWVNDQUxMX0VSUk5PIChyZXN1bHQsIGVycikpOworKyAgICAgIHJldHVybiAtMTsKKysgICAgfQorKyNlbGlmIGRlZmluZWQgX19OUl9sc3RhdDY0CisgICBpZiAodmVycyA9PSBfU1RBVF9WRVJfS0VSTkVMNjQgJiYgIV9fbGliY19taXNzaW5nX2F4cF9zdGF0NjQpCisgICAgIHsKKysgICAgICBpbnQgZXJybm9fb3V0OworICAgICAgIHJlc3VsdCA9IElOVEVSTkFMX1NZU0NBTEwgKGxzdGF0NjQsIGVyciwgMiwgbmFtZSwgYnVmKTsKKyAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoIUlOVEVSTkFMX1NZU0NBTExfRVJST1JfUCAocmVzdWx0LCBlcnIpLCAxKSkKKyAJcmV0dXJuIHJlc3VsdDsKKyAgICAgICBlcnJub19vdXQgPSBJTlRFUk5BTF9TWVNDQUxMX0VSUk5PIChyZXN1bHQsIGVycik7CisgICAgICAgaWYgKGVycm5vX291dCAhPSBFTk9TWVMpCistCWdvdG8gZmFpbDsKKysJeworKwkgIF9fc2V0X2Vycm5vIChlcnJub19vdXQpOworKwkgIHJldHVybiAtMTsKKysJfQorICAgICAgIF9fbGliY19taXNzaW5nX2F4cF9zdGF0NjQgPSAxOworICAgICB9CisrI2VuZGlmCisgCisgICByZXN1bHQgPSBJTlRFUk5BTF9TWVNDQUxMIChsc3RhdCwgZXJyLCAyLCBuYW1lLCAma2J1Zik7CisgICBpZiAoX19idWlsdGluX2V4cGVjdCAoIUlOVEVSTkFMX1NZU0NBTExfRVJST1JfUCAocmVzdWx0LCBlcnIpLCAxKSkKKyAgICAgcmV0dXJuIF9feHN0YXRfY29udiAodmVycywgJmtidWYsIGJ1Zik7CistICBlcnJub19vdXQgPSBJTlRFUk5BTF9TWVNDQUxMX0VSUk5PIChyZXN1bHQsIGVycik7CistICAKKy0gZmFpbDoKKy0gIF9fc2V0X2Vycm5vIChlcnJub19vdXQpOworKyAgX19zZXRfZXJybm8gKElOVEVSTkFMX1NZU0NBTExfRVJSTk8gKHJlc3VsdCwgZXJyKSk7CisgICByZXR1cm4gLTE7CisgfQorIGhpZGRlbl9kZWYgKF9fbHhzdGF0KQorZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS94c3RhdC5jIGdsaWJjLTJfOS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS94c3RhdC5jCistLS0gZ2xpYmMtMl85Lm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEveHN0YXQuYwkyMDA0LTAzLTExIDAzOjU4OjQ0LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTJfOS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS94c3RhdC5jCTIwMDktMDItMDIgMjI6MDE6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMzUsMjcgKzM1LDM5IEBACisgX194c3RhdCAoaW50IHZlcnMsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpidWYpCisgeworICAgSU5URVJOQUxfU1lTQ0FMTF9ERUNMIChlcnIpOworLSAgaW50IHJlc3VsdCwgZXJybm9fb3V0OworKyAgaW50IHJlc3VsdDsKKyAgIHN0cnVjdCBrZXJuZWxfc3RhdCBrYnVmOworIAorKyNpZiBfX0FTU1VNRV9TVEFUNjRfU1lTQ0FMTCA+IDAKKysgIGlmICh2ZXJzID09IF9TVEFUX1ZFUl9LRVJORUw2NCkKKysgICAgeworKyAgICAgIHJlc3VsdCA9IElOVEVSTkFMX1NZU0NBTEwgKHN0YXQ2NCwgZXJyLCAyLCBuYW1lLCBidWYpOworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICghSU5URVJOQUxfU1lTQ0FMTF9FUlJPUl9QIChyZXN1bHQsIGVyciksIDEpKQorKwlyZXR1cm4gcmVzdWx0OworKyAgICAgIF9fc2V0X2Vycm5vIChJTlRFUk5BTF9TWVNDQUxMX0VSUk5PIChyZXN1bHQsIGVycikpOworKyAgICAgIHJldHVybiAtMTsKKysgICAgfQorKyNlbGlmIGRlZmluZWQgX19OUl9zdGF0NjQKKyAgIGlmICh2ZXJzID09IF9TVEFUX1ZFUl9LRVJORUw2NCAmJiAhX19saWJjX21pc3NpbmdfYXhwX3N0YXQ2NCkKKyAgICAgeworKyAgICAgIGludCBlcnJub19vdXQ7CisgICAgICAgcmVzdWx0ID0gSU5URVJOQUxfU1lTQ0FMTCAoc3RhdDY0LCBlcnIsIDIsIG5hbWUsIGJ1Zik7CisgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCFJTlRFUk5BTF9TWVNDQUxMX0VSUk9SX1AgKHJlc3VsdCwgZXJyKSwgMSkpCisgCXJldHVybiByZXN1bHQ7CisgICAgICAgZXJybm9fb3V0ID0gSU5URVJOQUxfU1lTQ0FMTF9FUlJOTyAocmVzdWx0LCBlcnIpOworICAgICAgIGlmIChlcnJub19vdXQgIT0gRU5PU1lTKQorLQlnb3RvIGZhaWw7CisrCXsKKysJICBfX3NldF9lcnJubyAoZXJybm9fb3V0KTsKKysJICByZXR1cm4gLTE7CisrCX0KKyAgICAgICBfX2xpYmNfbWlzc2luZ19heHBfc3RhdDY0ID0gMTsKKyAgICAgfQorKyNlbmRpZgorIAorICAgcmVzdWx0ID0gSU5URVJOQUxfU1lTQ0FMTCAoc3RhdCwgZXJyLCAyLCBuYW1lLCAma2J1Zik7CisgICBpZiAoX19idWlsdGluX2V4cGVjdCAoIUlOVEVSTkFMX1NZU0NBTExfRVJST1JfUCAocmVzdWx0LCBlcnIpLCAxKSkKKyAgICAgcmV0dXJuIF9feHN0YXRfY29udiAodmVycywgJmtidWYsIGJ1Zik7CistICBlcnJub19vdXQgPSBJTlRFUk5BTF9TWVNDQUxMX0VSUk5PIChyZXN1bHQsIGVycik7CistICAKKy0gZmFpbDoKKy0gIF9fc2V0X2Vycm5vIChlcnJub19vdXQpOworKyAgX19zZXRfZXJybm8gKElOVEVSTkFMX1NZU0NBTExfRVJSTk8gKHJlc3VsdCwgZXJyKSk7CisgICByZXR1cm4gLTE7CisgfQorIGhpZGRlbl9kZWYgKF9feHN0YXQpCitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3hzdGF0Y29udi5jIGdsaWJjLTJfOS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS94c3RhdGNvbnYuYworLS0tIGdsaWJjLTJfOS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3hzdGF0Y29udi5jCTIwMDQtMDMtMTEgMDM6NTg6NDQuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMl85L3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3hzdGF0Y29udi5jCTIwMDktMDItMDIgMjI6MDE6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMjIsOSArMjIsMTQgQEAKKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAjaW5jbHVkZSA8a2VybmVsX3N0YXQuaD4KKyAjaW5jbHVkZSA8eHN0YXRjb252Lmg+CisrI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisgCisgCisrI2lmZGVmIF9fTlJfc3RhdDY0CisrIyBpZiBfX0FTU1VNRV9TVEFUNjRfU1lTQ0FMTCA9PSAwCisgaW50IF9fbGliY19taXNzaW5nX2F4cF9zdGF0NjQ7CisrIyBlbmRpZgorKyNlbmRpZgorIAorIGludAorIF9feHN0YXRfY29udiAoaW50IHZlcnMsIHN0cnVjdCBrZXJuZWxfc3RhdCAqa2J1Ziwgdm9pZCAqdWJ1ZikKK2RpZmYgLWR1ck4gZ2xpYmMtMl85Lm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEveHN0YXRjb252LmggZ2xpYmMtMl85L3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3hzdGF0Y29udi5oCistLS0gZ2xpYmMtMl85Lm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEveHN0YXRjb252LmgJMjAwNi0wMS0wOCAwOToyMToxNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yXzkvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEveHN0YXRjb252LmgJMjAwOS0wMi0wMiAyMjowMTozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xOCw3ICsxOCwxMiBAQAorICAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKyAKKyAjaW5jbHVkZSA8a2VybmVsLWZlYXR1cmVzLmg+CisrI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisgCisrI2lmZGVmIF9fTlJfc3RhdDY0CisrIyBpZiBfX0FTU1VNRV9TVEFUNjRfU1lTQ0FMTCA9PSAwCisgZXh0ZXJuIGludCBfX2xpYmNfbWlzc2luZ19heHBfc3RhdDY0IGF0dHJpYnV0ZV9oaWRkZW47CisrIyBlbmRpZgorKyNlbmRpZgorIGV4dGVybiBpbnQgX194c3RhdF9jb252IChpbnQgdmVycywgc3RydWN0IGtlcm5lbF9zdGF0ICprYnVmLCB2b2lkICp1YnVmKQorICAgYXR0cmlidXRlX2hpZGRlbjsKK2RpZmYgLWR1ck4gZ2xpYmMtMl85Lm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgva2VybmVsLWZlYXR1cmVzLmggZ2xpYmMtMl85L3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2tlcm5lbC1mZWF0dXJlcy5oCistLS0gZ2xpYmMtMl85Lm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgva2VybmVsLWZlYXR1cmVzLmgJMjAwOC0wOC0wMSAyMzo1MTowNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yXzkvc3lzZGVwcy91bml4L3N5c3YvbGludXgva2VybmVsLWZlYXR1cmVzLmgJMjAwOS0wMi0wMiAyMjowMTozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zOTUsNiArMzk1LDExIEBACisgIyBkZWZpbmUgX19BU1NVTUVfR0VUREVOVFMzMl9EX1RZUEUJMQorICNlbmRpZgorIAorKy8qIFN0YXJ0aW5nIHdpdGggdmVyc2lvbiAyLjYuNCwgYWxwaGEgc3RhdDY0IHN5c2NhbGxzIGFyZSBhdmFpbGFibGUuICAqLworKyNpZiBfX0xJTlVYX0tFUk5FTF9WRVJTSU9OID49IDB4MDIwNjA0ICYmIGRlZmluZWQgX19hbHBoYV9fCisrIyBkZWZpbmUgX19BU1NVTUVfU1RBVDY0X1NZU0NBTEwJMQorKyNlbmRpZgorKworIC8qIFN0YXJ0aW5nIHdpdGggdmVyc2lvbiAyLjUuMywgdGhlIGluaXRpYWwgbG9jYXRpb24gcmV0dXJuZWQgYnkgYGJyaycKKyAgICBhZnRlciBleGVjIGlzIGFsd2F5cyByb3VuZGVkIHVwIHRvIHRoZSBuZXh0IHBhZ2UuICAqLworICNpZiBfX0xJTlVYX0tFUk5FTF9WRVJTSU9OID49IDEzMjM1NQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS80NTAtYWxwaGEtZ2xpYmMtMi41LW5vLXBhZ2UtaGVhZGVyLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS80NTAtYWxwaGEtZ2xpYmMtMi41LW5vLXBhZ2UtaGVhZGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMWQ1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzQ1MC1hbHBoYS1nbGliYy0yLjUtbm8tcGFnZS1oZWFkZXIucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2xpYmMvMi45LzYwMTVfYWxsX2FscGhhLWdsaWJjLTIuNS1uby1wYWdlLWhlYWRlci5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KKzIwMDgtMDYtMDcgIE1pa2UgRnJ5c2luZ2VyICA8dmFwaWVyQGdlbnRvby5vcmc+CisKKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5cy91c2VyLmg6IENvcHkgcGFnZS5oIGRlZmluaXRpb25zCisJZnJvbSB0aGUga2VybmVsIGhlYWRlciB0byBzeXMvdXNlci5oIGFuZCByZW1vdmUgdGhlICNpbmNsdWRlIG9mCisJc3lzL3VzZXIuaC4KKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5cy91c2VyLmggZ2xpYmMtMl85L3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5cy91c2VyLmgKKy0tLSBnbGliYy0yXzkub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXMvdXNlci5oCTIwMDEtMDctMDYgMDY6NTY6MTMuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMl85L3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5cy91c2VyLmgJMjAwOS0wMi0wMiAyMjowMTozMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMyw3ICsyMyw2IEBACisgICAgb25seS4gRG9uJ3QgcmVhZCB0b28gbXVjaCBpbnRvIGl0LiBEb24ndCB1c2UgaXQgZm9yIGFueXRoaW5nIG90aGVyCisgICAgdGhhbiBnZGIvc3RyYWNlIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuICovCisgCistI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisgI2luY2x1ZGUgPGFzbS9yZWcuaD4KKyAKKyBzdHJ1Y3QgdXNlcgorQEAgLTQxLDYgKzQwLDkgQEAKKyAgIGNoYXIgdV9jb21tWzMyXTsJCQkJLyogdXNlciBjb21tYW5kIG5hbWUgKi8KKyB9OworIAorKyNkZWZpbmUgUEFHRV9TSElGVAkJMTMKKysjZGVmaW5lIFBBR0VfU0laRQkJKDEgPDwgUEFHRV9TSElGVCkKKysjZGVmaW5lIFBBR0VfTUFTSwkJKH4oUEFHRV9TSVpFLTEpKQorICNkZWZpbmUgTkJQRwkJCVBBR0VfU0laRQorICNkZWZpbmUgVVBBR0VTCQkJMQorICNkZWZpbmUgSE9TVF9URVhUX1NUQVJUX0FERFIJKHUuc3RhcnRfY29kZSkKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvNDYwLWFscGhhLWdsaWJjLTIuNS1uby1hc20tZWxmLWhlYWRlci5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvNDYwLWFscGhhLWdsaWJjLTIuNS1uby1hc20tZWxmLWhlYWRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzJhMGRlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS80NjAtYWxwaGEtZ2xpYmMtMi41LW5vLWFzbS1lbGYtaGVhZGVyLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2dsaWJjLzIuOS82MDE2X2FsbF9hbHBoYS1nbGliYy0yLjUtbm8tYXNtLWVsZi1oZWFkZXIucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCisyMDA3LTAzLTEzICBNaWtlIEZyeXNpbmdlciAgPHZhcGllckBnZW50b28ub3JnPgorCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXMvcHJvY2ZzLmg6IENvcHkgc29tZSBkZWZpbmVzCisJZnJvbSBhbHBoYSdzIGFzbS9lbGYuaAorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2xpYmMtMl85Lm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzL3Byb2Nmcy5oIGdsaWJjLTJfOS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXMvcHJvY2ZzLmgKKy0tLSBnbGliYy0yXzkub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXMvcHJvY2ZzLmgJMjAwMS0wNy0wNiAwNjo1NjoxMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yXzkvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzL3Byb2Nmcy5oCTIwMDktMDItMDIgMjI6MDE6MzMuMDAwMDAwMDAwICswMTAwCitAQCAtMjksMTAgKzI5LDIzIEBACisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvdWNvbnRleHQuaD4KKyAjaW5jbHVkZSA8c3lzL3VzZXIuaD4KKy0jaW5jbHVkZSA8YXNtL2VsZi5oPgorIAorIF9fQkVHSU5fREVDTFMKKyAKKysvKgorKyAqIFRoZSBPU0YvMSB2ZXJzaW9uIG9mIDxzeXMvcHJvY2ZzLmg+IG1ha2VzIGdyZWdzZXRfdCA0NiBlbnRyaWVzIGxvbmcuCisrICogSSBoYXZlIG5vIGlkZWEgd2h5IHRoYXQgaXMgc28uICBGb3Igbm93LCB3ZSBqdXN0IGxlYXZlIGl0IGF0IDMzCisrICogKDMyIGdlbmVyYWwgcmVncyArIHByb2Nlc3NvciBzdGF0dXMgd29yZCkuIAorKyAqLworKyNkZWZpbmUgRUxGX05HUkVHCTMzCisrI2RlZmluZSBFTEZfTkZQUkVHCTMyCisrCisrdHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7CisrdHlwZWRlZiBlbGZfZ3JlZ190IGVsZl9ncmVnc2V0X3RbRUxGX05HUkVHXTsKKysKKyt0eXBlZGVmIGRvdWJsZSBlbGZfZnByZWdfdDsKKyt0eXBlZGVmIGVsZl9mcHJlZ190IGVsZl9mcHJlZ3NldF90W0VMRl9ORlBSRUddOworKworIHN0cnVjdCBlbGZfc2lnaW5mbworICAgeworICAgICBpbnQgc2lfc2lnbm87CQkJLyogU2lnbmFsIG51bWJlci4gICovCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzQ3MC1hbHBoYS1nbGliYy0yLjgtY3JlYXQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzQ3MC1hbHBoYS1nbGliYy0yLjgtY3JlYXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFkYTRkMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvNDcwLWFscGhhLWdsaWJjLTIuOC1jcmVhdC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiBnZW50b28vc3JjL3BhdGNoc2V0cy9nbGliYy8yLjkvNjAxN19hbGxfYWxwaGEtZ2xpYmMtMi44LWNyZWF0LnBhdGNoCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorYWxwaGEgZG9lcyBub3QgaGF2ZSBhIF9fTlJfY3JlYXQKKworaHR0cDovL2J1Z3MuZ2VudG9vLm9yZy8yMjcyNzUKK2h0dHA6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NjY1MAorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2xpYmMtMl85Lm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvd29yZHNpemUtNjQvY3JlYXQ2NC5jIGdsaWJjLTJfOS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC93b3Jkc2l6ZS02NC9jcmVhdDY0LmMKKy0tLSBnbGliYy0yXzkub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC93b3Jkc2l6ZS02NC9jcmVhdDY0LmMJMjAwNy0xMS0xMCAyMDozNDoyNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yXzkvc3lzZGVwcy91bml4L3N5c3YvbGludXgvd29yZHNpemUtNjQvY3JlYXQ2NC5jCTIwMDktMDItMDIgMjI6MDE6MzUuMDAwMDAwMDAwICswMTAwCitAQCAtMSArMSw1IEBACisgLyogRGVmaW5lZCBhcyBhbGlhcyBmb3IgdGhlIHN5c2NhbGwuICAqLworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaWZuZGVmIF9fTlJfY3JlYXQKKysjaW5jbHVkZSAiLi4vLi4vLi4vLi4vLi4vaW8vY3JlYXQ2NC5jIgorKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS80ODAtYWxwaGEtZ2xpYmMtMi44LWNhY2hlLXNoYXBlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS80ODAtYWxwaGEtZ2xpYmMtMi44LWNhY2hlLXNoYXBlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZWZlOTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzQ4MC1hbHBoYS1nbGliYy0yLjgtY2FjaGUtc2hhcGUucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogZ2VudG9vL3NyYy9wYXRjaHNldHMvZ2xpYmMvMi45LzYwMThfYWxsX2FscGhhLWdsaWJjLTIuOC1jYWNoZS1zaGFwZS5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK29sZGVyIHZlcmlzb25zIG9mIGdsaWJjIHdvdWxkIGJ1aWxkIGRsLXN5c2RlcCBhcyBzaGFyZWQtb25seSBhbmQgZGwtc3VwcG9ydCBhcworc3RhdGljLW9ubHkuICBhbHBoYSBob29rcyBpbiBhIGNhY2hlIHZhcmlhYmxlIHZpYSBkbC1hdXh2LmguICBuZXdlciB2ZXJzaW9ucyBvZgorZ2xpYmMgYnVpbGQgZGwtc3lzZGVwIGFzIGJvdGggc2hhcmVkIGFuZCBzdGF0aWMgd2hpY2ggbWVhbnMgd2Ugbm93IGhhdmUgc3ltYm9sCitkdXBsaWNhdGlvbiBmb3Igc3RhdGljIGJ1aWxkcyB3aXRoIGRsLXN5c2RlcCBhbmQgZGwtc3VwcG9ydC4gIHNpbmNlIGRsLXN5c2RlcAoraXMgYm90aCBzaGFyZWQvc3RhdGljLCB0aGVyZSBpcyBubyBwb2ludCBpbiBob29raW5nIGRsLXN1cHBvcnQgYW55bW9yZSwgc28gd2UKK2NhbiBwdW50IGl0LgorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ2xpYmMtMl85Lm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvZGwtc3VwcG9ydC5jIGdsaWJjLTJfOS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9kbC1zdXBwb3J0LmMKKy0tLSBnbGliYy0yXzkub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9kbC1zdXBwb3J0LmMJMjAwNy0wMy0xMyAyMjoyNToxNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yXzkvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvZGwtc3VwcG9ydC5jCTIwMDktMDItMDIgMjI6MDE6MzcuMDAwMDAwMDAwICswMTAwCitAQCAtMSwxICsxLDAgQEAKKy0jaW5jbHVkZSAiZGwtYXV4di5oIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS80OTAtcHRyLW1hbmdsaW5nLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS80OTAtcHRyLW1hbmdsaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NmI1ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzQ5MC1wdHItbWFuZ2xpbmcucGF0Y2gKQEAgLTAsMCArMSwxMTQgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2dsaWJjLzIuOS82MDE4X2FsbF9nbGliYy1wdHItbWFuZ2xpbmcucGF0Y2gKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitodHRwOi8vYnVncy5nZW50b28ub3JnLzIwMTkxMAorCitGb3IgZXZlcnkgYXJjaCwgUFRSX01BTkdMRSBhbmQgUFRSX0RFTUFOR0xFIGRlZmluZXMgYXJlIGluCitzeXNkZXBzL3VuaXgvc3lzdi9saW51eC88YXJjaD4vc3lzZGVwLmguIEJ1dCBmb3IgYWxwaGEgdGhpcyBpcyBub3QgdHJ1ZS4gVGhlCitkZWZpbmVzIGFyZSBpbiBzeXNkZXBzL3VuaXgvYWxwaGEvc3lzZGVwLmggYW5kIHVuaXgvc3lzdi9saW51eC9hbHBoYS9zeXNkZXAuaAoraW5jbHVkZXMgdGhlIGZpcnN0LgorCitUaGlzIGlzIGEgcGF0Y2ggdGhhdCBmaXhlcyB0aGUgaXNzdWUgYW5kIGxldCBhbHBoYSBidWlsZCwgYXQgdGhlIGV4cGVuc2Ugb2YKK2Rpc2FibGluZyBNQU5HTElORyBpbiB0aGUgbm9uIFBJQyBjYXNlLCBidXQgZ29vZ2xpbmcgc2hvd2VkIHRoYXQgdGhlIGlzc3VlIGlzCitrbm93biwgYW5kIHRoYXQgbm9ib2R5IHJlYWxseSBjYXJlcyBhYm91dCBpdC4gCisKK0luZm8gZnJvbTogaHR0cDovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01MjE2CisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9zeXNkZXBzL3VuaXgvYWxwaGEvc3lzZGVwLmggZ2xpYmMtMl85L3N5c2RlcHMvdW5peC9hbHBoYS9zeXNkZXAuaAorLS0tIGdsaWJjLTJfOS5vcmlnL3N5c2RlcHMvdW5peC9hbHBoYS9zeXNkZXAuaAkyMDA2LTAzLTAzIDEyOjIxOjI4LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTJfOS9zeXNkZXBzL3VuaXgvYWxwaGEvc3lzZGVwLmgJMjAwOS0wMi0wMiAyMjowMTozOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zOTcsNDIgKzM5Nyw0IEBACisgCV9zY19yZXQgPSBfc2NfMCwgX3NjX2VyciA9IF9zY18xOTsJCQlcCisgfQorIAorLS8qIFBvaW50ZXIgbWFuZ2xpbmcgc3VwcG9ydC4gIE5vdGUgdGhhdCB0bHMgYWNjZXNzIGlzIHNsb3cgZW5vdWdoIHRoYXQKKy0gICB3ZSBkb24ndCBkZW9wdGltaXplIHRoaW5ncyBieSBwbGFjaW5nIHRoZSBwb2ludGVyIGNoZWNrIHZhbHVlIHRoZXJlLiAgKi8KKy0KKy0jaW5jbHVkZSA8c3RkaW50Lmg+CistCistI2lmIGRlZmluZWQgTk9UX0lOX2xpYmMgJiYgZGVmaW5lZCBJU19JTl9ydGxkCistIyBpZmRlZiBfX0FTU0VNQkxFUl9fCistIyAgZGVmaW5lIFBUUl9NQU5HTEUoZHN0LCBzcmMsIHRtcCkJCQkJXAorLQlsZGFoCXRtcCwgX19wb2ludGVyX2Noa19ndWFyZF9sb2NhbCgkMjkpICFncHJlbGhpZ2g7CVwKKy0JbGRxCXRtcCwgX19wb2ludGVyX2Noa19ndWFyZF9sb2NhbCh0bXApICFncHJlbGxvdzsJXAorLQl4b3IJc3JjLCB0bXAsIGRzdAorLSMgIGRlZmluZSBQVFJfTUFOR0xFMihkc3QsIHNyYywgdG1wKQkJCQlcCistCXhvcglzcmMsIHRtcCwgZHN0CistIyAgZGVmaW5lIFBUUl9ERU1BTkdMRShkc3QsIHRtcCkgICBQVFJfTUFOR0xFKGRzdCwgZHN0LCB0bXApCistIyAgZGVmaW5lIFBUUl9ERU1BTkdMRTIoZHN0LCB0bXApICBQVFJfTUFOR0xFMihkc3QsIGRzdCwgdG1wKQorLSMgZWxzZQorLWV4dGVybiB1aW50cHRyX3QgX19wb2ludGVyX2Noa19ndWFyZF9sb2NhbCBhdHRyaWJ1dGVfcmVscm8gYXR0cmlidXRlX2hpZGRlbjsKKy0jICBkZWZpbmUgUFRSX01BTkdMRSh2YXIpCVwKKy0gICh2YXIpID0gKF9fdHlwZW9mICh2YXIpKSAoKHVpbnRwdHJfdCkgKHZhcikgXiBfX3BvaW50ZXJfY2hrX2d1YXJkX2xvY2FsKQorLSMgIGRlZmluZSBQVFJfREVNQU5HTEUodmFyKSAgUFRSX01BTkdMRSh2YXIpCistIyBlbmRpZgorLSNlbGlmIGRlZmluZWQgUElDCistIyBpZmRlZiBfX0FTU0VNQkxFUl9fCistIyAgZGVmaW5lIFBUUl9NQU5HTEUoZHN0LCBzcmMsIHRtcCkJCVwKKy0JbGRxCXRtcCwgX19wb2ludGVyX2Noa19ndWFyZDsJXAorLQl4b3IJc3JjLCB0bXAsIGRzdAorLSMgIGRlZmluZSBQVFJfTUFOR0xFMihkc3QsIHNyYywgdG1wKQkJXAorLQl4b3IJc3JjLCB0bXAsIGRzdAorLSMgIGRlZmluZSBQVFJfREVNQU5HTEUoZHN0LCB0bXApICAgUFRSX01BTkdMRShkc3QsIGRzdCwgdG1wKQorLSMgIGRlZmluZSBQVFJfREVNQU5HTEUyKGRzdCwgdG1wKSAgUFRSX01BTkdMRTIoZHN0LCBkc3QsIHRtcCkKKy0jIGVsc2UKKy1leHRlcm4gdWludHB0cl90IF9fcG9pbnRlcl9jaGtfZ3VhcmQgYXR0cmlidXRlX3JlbHJvOworLSMgIGRlZmluZSBQVFJfTUFOR0xFKHZhcikJXAorLQkodmFyKSA9ICh2b2lkICopICgodWludHB0cl90KSAodmFyKSBeIF9fcG9pbnRlcl9jaGtfZ3VhcmQpCistIyAgZGVmaW5lIFBUUl9ERU1BTkdMRSh2YXIpICBQVFJfTUFOR0xFKHZhcikKKy0jIGVuZGlmCistI2VuZGlmCistCisgI2VuZGlmIC8qIEFTU0VNQkxFUiAqLworZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXNkZXAuaCBnbGliYy0yXzkvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzZGVwLmgKKy0tLSBnbGliYy0yXzkub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXNkZXAuaAkyMDA3LTA4LTIxIDEwOjA3OjI4LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTJfOS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXNkZXAuaAkyMDA5LTAyLTAyIDIyOjAxOjM5LjAwMDAwMDAwMCArMDEwMAorQEAgLTk4LDQgKzk4LDQ2IEBACisgCUlOVEVSTkFMX1NZU0NBTEwxKG5hbWUsIGVycl9vdXQsIG5yLCBhcmdzKTsJCQlcCisgfSkKKyAKKysvKiBQb2ludGVyIG1hbmdsaW5nIHN1cHBvcnQuICBOb3RlIHRoYXQgdGxzIGFjY2VzcyBpcyBzbG93IGVub3VnaCB0aGF0CisrICAgd2UgZG9uJ3QgZGVvcHRpbWl6ZSB0aGluZ3MgYnkgcGxhY2luZyB0aGUgcG9pbnRlciBjaGVjayB2YWx1ZSB0aGVyZS4gICovCisrCisrI2lmIGRlZmluZWQgTk9UX0lOX2xpYmMgJiYgZGVmaW5lZCBJU19JTl9ydGxkCisrIyBpZmRlZiBfX0FTU0VNQkxFUl9fCisrIyAgZGVmaW5lIFBUUl9NQU5HTEUoZHN0LCBzcmMsIHRtcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICBsZGFoICAgIHRtcCwgX19wb2ludGVyX2Noa19ndWFyZF9sb2NhbCgkMjkpICFncHJlbGhpZ2g7IFwKKysgICAgICAgbGRxICAgICB0bXAsIF9fcG9pbnRlcl9jaGtfZ3VhcmRfbG9jYWwodG1wKSAhZ3ByZWxsb3c7ICBcCisrICAgICAgIHhvciAgICAgc3JjLCB0bXAsIGRzdAorKyMgIGRlZmluZSBQVFJfTUFOR0xFMihkc3QsIHNyYywgdG1wKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgeG9yICAgICBzcmMsIHRtcCwgZHN0CisrIyAgZGVmaW5lIFBUUl9ERU1BTkdMRShkc3QsIHRtcCkgICBQVFJfTUFOR0xFKGRzdCwgZHN0LCB0bXApCisrIyAgZGVmaW5lIFBUUl9ERU1BTkdMRTIoZHN0LCB0bXApICBQVFJfTUFOR0xFMihkc3QsIGRzdCwgdG1wKQorKyMgZWxzZQorK2V4dGVybiB1aW50cHRyX3QgX19wb2ludGVyX2Noa19ndWFyZF9sb2NhbCBhdHRyaWJ1dGVfcmVscm8gYXR0cmlidXRlX2hpZGRlbjsKKysjICBkZWZpbmUgUFRSX01BTkdMRSh2YXIpICAgICAgXAorKyAgKHZhcikgPSAoX190eXBlb2YgKHZhcikpICgodWludHB0cl90KSAodmFyKSBeIF9fcG9pbnRlcl9jaGtfZ3VhcmRfbG9jYWwpCisrIyAgZGVmaW5lIFBUUl9ERU1BTkdMRSh2YXIpICBQVFJfTUFOR0xFKHZhcikKKysjIGVuZGlmCisrI2VsaWYgZGVmaW5lZCBQSUMKKysjIGlmZGVmIF9fQVNTRU1CTEVSX18KKysjICBkZWZpbmUgUFRSX01BTkdMRShkc3QsIHNyYywgdG1wKSAgICAgICAgICAgIFwKKysgICAgICAgbGRxICAgICB0bXAsIF9fcG9pbnRlcl9jaGtfZ3VhcmQ7ICAgICAgIFwKKysgICAgICAgeG9yICAgICBzcmMsIHRtcCwgZHN0CisrIyAgZGVmaW5lIFBUUl9NQU5HTEUyKGRzdCwgc3JjLCB0bXApICAgICAgICAgICBcCisrICAgICAgIHhvciAgICAgc3JjLCB0bXAsIGRzdAorKyMgIGRlZmluZSBQVFJfREVNQU5HTEUoZHN0LCB0bXApICAgUFRSX01BTkdMRShkc3QsIGRzdCwgdG1wKQorKyMgIGRlZmluZSBQVFJfREVNQU5HTEUyKGRzdCwgdG1wKSAgUFRSX01BTkdMRTIoZHN0LCBkc3QsIHRtcCkKKysjIGVsc2UKKytleHRlcm4gdWludHB0cl90IF9fcG9pbnRlcl9jaGtfZ3VhcmQgYXR0cmlidXRlX3JlbHJvOworKyMgIGRlZmluZSBQVFJfTUFOR0xFKHZhcikgICAgICBcCisrICAgICAgICh2YXIpID0gKHZvaWQgKikgKCh1aW50cHRyX3QpICh2YXIpIF4gX19wb2ludGVyX2Noa19ndWFyZCkKKysjICBkZWZpbmUgUFRSX0RFTUFOR0xFKHZhcikgIFBUUl9NQU5HTEUodmFyKQorKyMgZW5kaWYKKysjZWxzZQorKy8qIFBvaW50ZXIgbWFuZ2xpbmcgaXMgbm90IHlldCBzdXBwb3J0ZWQgZm9yIHN0YXRpYyBsaWJjIG9uIGFscGhhLiAgKi8KKysjIGlmbmRlZiBfX0FTU0VNQkxFUl9fCisrIyAgZGVmaW5lIFBUUl9NQU5HTEUodmFyKSAgICh2b2lkKSAodmFyKQorKyMgIGRlZmluZSBQVFJfREVNQU5HTEUodmFyKSAodm9pZCkgKHZhcikKKysjIGVuZGlmCisrI2VuZGlmCisrCisgI2VuZGlmIC8qIF9MSU5VWF9BTFBIQV9TWVNERVBfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS81MDAtcHBjLWdsaWJjLTIuOS1hdG9taWMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzUwMC1wcGMtZ2xpYmMtMi45LWF0b21pYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjAzM2FhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS81MDAtcHBjLWdsaWJjLTIuOS1hdG9taWMucGF0Y2gKQEAgLTAsMCArMSw0MTQgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IGdlbnRvby9zcmMvcGF0Y2hzZXRzL2dsaWJjLzIuOS82MTIwX2FsbF9wcGMtZ2xpYmMtMi45LWF0b21pYy5wYXRjaAorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK3NuaXBlZCBmcm9tIHN1c2UKKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL3N5c2RlcHMvcG93ZXJwYy9iaXRzL2F0b21pYy5oIGdsaWJjLTJfOS9zeXNkZXBzL3Bvd2VycGMvYml0cy9hdG9taWMuaAorLS0tIGdsaWJjLTJfOS5vcmlnL3N5c2RlcHMvcG93ZXJwYy9iaXRzL2F0b21pYy5oCTIwMDctMDMtMjYgMjI6MTU6MjguMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMl85L3N5c2RlcHMvcG93ZXJwYy9iaXRzL2F0b21pYy5oCTIwMDktMDItMDIgMjI6MDE6NDAuMDAwMDAwMDAwICswMTAwCitAQCAtODUsMTQgKzg1LDE0IEBACisgICAgICAgX190eXBlb2YgKCoobWVtKSkgX190bXA7CQkJCQkJICAgICAgXAorICAgICAgIF9fdHlwZW9mIChtZW0pICBfX21lbXAgPSAobWVtKTsJCQkJCSAgICAgIFwKKyAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgJCQkJCQkgICAgICBcCistCQkgICAgICAgICIxOglsd2FyeAklMCwwLCUxIiBNVVRFWF9ISU5UX0FDUSAiXG4iCSAgICAgIFwKKysJCSAgICAgICAgIjE6CWx3YXJ4CSUwLCV5MSIgTVVURVhfSElOVF9BQ1EgIlxuIgkgICAgICBcCisgCQkgICAgICAgICIJY21wdwklMCwlMlxuIgkJCSAgICAgIFwKKyAJCSAgICAgICAgIglibmUJMmZcbiIJCQkJICAgICAgXAorLQkJICAgICAgICAiCXN0d2N4LgklMywwLCUxXG4iCQkJICAgICAgXAorKwkJICAgICAgICAiCXN0d2N4LgklMywleTFcbiIJCQkgICAgICBcCisgCQkgICAgICAgICIJYm5lLQkxYlxuIgkJCQkgICAgICBcCisgCQkgICAgICAgICIyOgkiIF9fQVJDSF9BQ1FfSU5TVFIJCQkgICAgICBcCistCQkgICAgICAgIDogIj0mciIgKF9fdG1wKQkJCQkJICAgICAgXAorLQkJICAgICAgICA6ICJiIiAoX19tZW1wKSwgInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJICAgICAgXAorKwkJICAgICAgICA6ICI9JnIiIChfX3RtcCksICIrWiIgKCpfX21lbXApCQkJICAgICAgXAorKwkJICAgICAgICA6ICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkJICAgICAgXAorIAkJICAgICAgICA6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgICBfX3RtcDsJCQkJCQkJCSAgICAgIFwKKyAgIH0pCitAQCAtMTAyLDE0ICsxMDIsMTQgQEAKKyAgICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX3RtcDsJCQkJCQkgICAgICBcCisgICAgICAgX190eXBlb2YgKG1lbSkgIF9fbWVtcCA9IChtZW0pOwkJCQkJICAgICAgXAorICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKF9fQVJDSF9SRUxfSU5TVFIgIlxuIgkJCQkgICAgICBcCistCQkgICAgICAgICIxOglsd2FyeAklMCwwLCUxIiBNVVRFWF9ISU5UX1JFTCAiXG4iCSAgICAgIFwKKysJCSAgICAgICAgIjE6CWx3YXJ4CSUwLCV5MSIgTVVURVhfSElOVF9SRUwgIlxuIgkgICAgICBcCisgCQkgICAgICAgICIJY21wdwklMCwlMlxuIgkJCSAgICAgIFwKKyAJCSAgICAgICAgIglibmUJMmZcbiIJCQkJICAgICAgXAorLQkJICAgICAgICAiCXN0d2N4LgklMywwLCUxXG4iCQkJICAgICAgXAorKwkJICAgICAgICAiCXN0d2N4LgklMywleTFcbiIJCQkgICAgICBcCisgCQkgICAgICAgICIJYm5lLQkxYlxuIgkJCQkgICAgICBcCisgCQkgICAgICAgICIyOgkiCQkJCQkgICAgICBcCistCQkgICAgICAgIDogIj0mciIgKF9fdG1wKQkJCQkJICAgICAgXAorLQkJICAgICAgICA6ICJiIiAoX19tZW1wKSwgInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJICAgICAgXAorKwkJICAgICAgICA6ICI9JnIiIChfX3RtcCksICIrWiIgKF9fbWVtcCkJCQkgICAgICBcCisrCQkgICAgICAgIDogInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCQkgICAgICBcCisgCQkgICAgICAgIDogImNyMCIsICJtZW1vcnkiKTsJCQkJICAgICAgXAorICAgICAgIF9fdG1wOwkJCQkJCQkJICAgICAgXAorICAgfSkKK0BAIC0xMTgsMTIgKzExOCwxMiBAQAorICAgKHsJCQkJCQkJCQkgICAgICBcCisgICAgIF9fdHlwZW9mICgqbWVtKSBfX3ZhbDsJCQkJCQkgICAgICBcCisgICAgIF9fYXNtIF9fdm9sYXRpbGUgKAkJCQkJCQkgICAgICBcCistCQkgICAgICAiMToJbHdhcngJJTAsMCwlMiIgTVVURVhfSElOVF9BQ1EgIlxuIgkgICAgICBcCistCQkgICAgICAiCQlzdHdjeC4JJTMsMCwlMlxuIgkJCSAgICAgIFwKKysJCSAgICAgICIxOglsd2FyeAklMCwleTEiIE1VVEVYX0hJTlRfQUNRICJcbiIJICAgICAgXAorKwkJICAgICAgIgkJc3R3Y3guCSUyLCV5MVxuIgkJCSAgICAgIFwKKyAJCSAgICAgICIJCWJuZS0JMWJcbiIJCQkJICAgICAgXAorIAkJICAgICAgIiAgICIgX19BUkNIX0FDUV9JTlNUUgkJCQkgICAgICBcCistCQkgICAgICA6ICI9JnIiIChfX3ZhbCksICI9bSIgKCptZW0pCQkJICAgICAgXAorLQkJICAgICAgOiAiYiIgKG1lbSksICJyIiAodmFsdWUpLCAibSIgKCptZW0pCQkgICAgICBcCisrCQkgICAgICA6ICI9JnIiIChfX3ZhbCksICIrWiIgKCptZW0pCQkJICAgICAgXAorKwkJICAgICAgOiAiciIgKHZhbHVlKQkJCQkJICAgICAgXAorIAkJICAgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkgICAgICBcCisgICAgIF9fdmFsOwkJCQkJCQkJICAgICAgXAorICAgfSkKK0BAIC0xMzIsMTEgKzEzMiwxMSBAQAorICAgKHsJCQkJCQkJCQkgICAgICBcCisgICAgIF9fdHlwZW9mICgqbWVtKSBfX3ZhbDsJCQkJCQkgICAgICBcCisgICAgIF9fYXNtIF9fdm9sYXRpbGUgKF9fQVJDSF9SRUxfSU5TVFIgIlxuIgkJCQkgICAgICBcCistCQkgICAgICAiMToJbHdhcngJJTAsMCwlMiIgTVVURVhfSElOVF9SRUwgIlxuIgkgICAgICBcCistCQkgICAgICAiCQlzdHdjeC4JJTMsMCwlMlxuIgkJCSAgICAgIFwKKysJCSAgICAgICIxOglsd2FyeAklMCwleTEiIE1VVEVYX0hJTlRfUkVMICJcbiIJICAgICAgXAorKwkJICAgICAgIgkJc3R3Y3guCSUyLCV5MVxuIgkJCSAgICAgIFwKKyAJCSAgICAgICIJCWJuZS0JMWIiCQkJCSAgICAgIFwKKy0JCSAgICAgIDogIj0mciIgKF9fdmFsKSwgIj1tIiAoKm1lbSkJCQkgICAgICBcCistCQkgICAgICA6ICJiIiAobWVtKSwgInIiICh2YWx1ZSksICJtIiAoKm1lbSkJCSAgICAgIFwKKysJCSAgICAgIDogIj0mciIgKF9fdmFsKSwgIitaIiAoKm1lbSkJCQkgICAgICBcCisrCQkgICAgICA6ICJyIiAodmFsdWUpCQkJCQkgICAgICBcCisgCQkgICAgICA6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgX192YWw7CQkJCQkJCQkgICAgICBcCisgICB9KQorQEAgLTE0NCwxMiArMTQ0LDEyIEBACisgI2RlZmluZSBfX2FyY2hfYXRvbWljX2V4Y2hhbmdlX2FuZF9hZGRfMzIobWVtLCB2YWx1ZSkgXAorICAgKHsJCQkJCQkJCQkgICAgICBcCisgICAgIF9fdHlwZW9mICgqbWVtKSBfX3ZhbCwgX190bXA7CQkJCQkgICAgICBcCistICAgIF9fYXNtIF9fdm9sYXRpbGUgKCIxOglsd2FyeAklMCwwLCUzXG4iCQkJICAgICAgXAorLQkJICAgICAgIgkJYWRkCSUxLCUwLCU0XG4iCQkJICAgICAgXAorLQkJICAgICAgIgkJc3R3Y3guCSUxLDAsJTNcbiIJCQkgICAgICBcCisrICAgIF9fYXNtIF9fdm9sYXRpbGUgKCIxOglsd2FyeAklMCwleTJcbiIJCQkgICAgICBcCisrCQkgICAgICAiCQlhZGQJJTEsJTAsJTNcbiIJCQkgICAgICBcCisrCQkgICAgICAiCQlzdHdjeC4JJTEsJXkyXG4iCQkJICAgICAgXAorIAkJICAgICAgIgkJYm5lLQkxYiIJCQkJICAgICAgXAorLQkJICAgICAgOiAiPSZiIiAoX192YWwpLCAiPSZyIiAoX190bXApLCAiPW0iICgqbWVtKQkgICAgICBcCistCQkgICAgICA6ICJiIiAobWVtKSwgInIiICh2YWx1ZSksICJtIiAoKm1lbSkJCSAgICAgIFwKKysJCSAgICAgIDogIj0mYiIgKF9fdmFsKSwgIj0mciIgKF9fdG1wKSwgIitaIiAoKm1lbSkJICAgICAgXAorKwkJICAgICAgOiAiciIgKHZhbHVlKQkJCQkJICAgICAgXAorIAkJICAgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkgICAgICBcCisgICAgIF9fdmFsOwkJCQkJCQkJICAgICAgXAorICAgfSkKK0BAIC0xNTcsMTIgKzE1NywxMiBAQAorICNkZWZpbmUgX19hcmNoX2F0b21pY19pbmNyZW1lbnRfdmFsXzMyKG1lbSkgXAorICAgKHsJCQkJCQkJCQkgICAgICBcCisgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fdmFsOwkJCQkJCSAgICAgIFwKKy0gICAgX19hc20gX192b2xhdGlsZSAoIjE6CWx3YXJ4CSUwLDAsJTJcbiIJCQkgICAgICBcCisrICAgIF9fYXNtIF9fdm9sYXRpbGUgKCIxOglsd2FyeAklMCwleTFcbiIJCQkgICAgICBcCisgCQkgICAgICAiCQlhZGRpCSUwLCUwLDFcbiIJCQkgICAgICBcCistCQkgICAgICAiCQlzdHdjeC4JJTAsMCwlMlxuIgkJCSAgICAgIFwKKysJCSAgICAgICIJCXN0d2N4LgklMCwleTFcbiIJCQkgICAgICBcCisgCQkgICAgICAiCQlibmUtCTFiIgkJCQkgICAgICBcCistCQkgICAgICA6ICI9JmIiIChfX3ZhbCksICI9bSIgKCptZW0pCQkJICAgICAgXAorLQkJICAgICAgOiAiYiIgKG1lbSksICJtIiAoKm1lbSkJCQkJICAgICAgXAorKwkJICAgICAgOiAiPSZiIiAoX192YWwpLCAiK1oiICgqbWVtKQkJCSAgICAgIFwKKysJCSAgICAgIDoJCQkJCQkJICAgICAgXAorIAkJICAgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkgICAgICBcCisgICAgIF9fdmFsOwkJCQkJCQkJICAgICAgXAorICAgfSkKK0BAIC0xNzAsMjcgKzE3MCwyNyBAQAorICNkZWZpbmUgX19hcmNoX2F0b21pY19kZWNyZW1lbnRfdmFsXzMyKG1lbSkgXAorICAgKHsJCQkJCQkJCQkgICAgICBcCisgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fdmFsOwkJCQkJCSAgICAgIFwKKy0gICAgX19hc20gX192b2xhdGlsZSAoIjE6CWx3YXJ4CSUwLDAsJTJcbiIJCQkgICAgICBcCisrICAgIF9fYXNtIF9fdm9sYXRpbGUgKCIxOglsd2FyeAklMCwleTFcbiIJCQkgICAgICBcCisgCQkgICAgICAiCQlzdWJpCSUwLCUwLDFcbiIJCQkgICAgICBcCistCQkgICAgICAiCQlzdHdjeC4JJTAsMCwlMlxuIgkJCSAgICAgIFwKKysJCSAgICAgICIJCXN0d2N4LgklMCwleTFcbiIJCQkgICAgICBcCisgCQkgICAgICAiCQlibmUtCTFiIgkJCQkgICAgICBcCistCQkgICAgICA6ICI9JmIiIChfX3ZhbCksICI9bSIgKCptZW0pCQkJICAgICAgXAorLQkJICAgICAgOiAiYiIgKG1lbSksICJtIiAoKm1lbSkJCQkJICAgICAgXAorKwkJICAgICAgOiAiPSZiIiAoX192YWwpLCAiK1oiICgqbWVtKQkJCSAgICAgIFwKKysJCSAgICAgIDoJCQkJCQkJICAgICAgXAorIAkJICAgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkgICAgICBcCisgICAgIF9fdmFsOwkJCQkJCQkJICAgICAgXAorICAgfSkKKyAKKyAjZGVmaW5lIF9fYXJjaF9hdG9taWNfZGVjcmVtZW50X2lmX3Bvc2l0aXZlXzMyKG1lbSkgXAorICAgKHsgaW50IF9fdmFsLCBfX3RtcDsJCQkJCQkJICAgICAgXAorLSAgICAgX19hc20gX192b2xhdGlsZSAoIjE6CWx3YXJ4CSUwLDAsJTNcbiIJCQkgICAgICBcCisrICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbHdhcngJJTAsJXkyXG4iCQkJICAgICAgXAorIAkJICAgICAgICIJY21wd2kJMCwlMCwwXG4iCQkJICAgICAgXAorIAkJICAgICAgICIJYWRkaQklMSwlMCwtMVxuIgkJCSAgICAgIFwKKyAJCSAgICAgICAiCWJsZQkyZlxuIgkJCQkgICAgICBcCistCQkgICAgICAgIglzdHdjeC4JJTEsMCwlM1xuIgkJCSAgICAgIFwKKysJCSAgICAgICAiCXN0d2N4LgklMSwleTJcbiIJCQkgICAgICBcCisgCQkgICAgICAgIglibmUtCTFiXG4iCQkJCSAgICAgIFwKKyAJCSAgICAgICAiMjoJIiBfX0FSQ0hfQUNRX0lOU1RSCQkJICAgICAgXAorLQkJICAgICAgIDogIj0mYiIgKF9fdmFsKSwgIj0mciIgKF9fdG1wKSwgIj1tIiAoKm1lbSkJICAgICAgXAorLQkJICAgICAgIDogImIiIChtZW0pLCAibSIgKCptZW0pCQkJCSAgICAgIFwKKysJCSAgICAgICA6ICI9JmIiIChfX3ZhbCksICI9JnIiIChfX3RtcCksICIrWiIgKCptZW0pCSAgICAgIFwKKysJCSAgICAgICA6CQkJCQkJICAgICAgXAorIAkJICAgICAgIDogImNyMCIsICJtZW1vcnkiKTsJCQkJICAgICAgXAorICAgICAgX192YWw7CQkJCQkJCQkgICAgICBcCisgICB9KQorZGlmZiAtZHVyTiBnbGliYy0yXzkub3JpZy9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2JpdHMvYXRvbWljLmggZ2xpYmMtMl85L3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvYml0cy9hdG9taWMuaAorLS0tIGdsaWJjLTJfOS5vcmlnL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvYml0cy9hdG9taWMuaAkyMDA3LTAzLTI2IDIyOjE1OjQ1LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTJfOS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2JpdHMvYXRvbWljLmgJMjAwOS0wMi0wMiAyMjowMTo0MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC00NCwxNCArNDQsMTQgQEAKKyAoewkJCQkJCQkJCSAgICAgIFwKKyAgIHVuc2lnbmVkIGludCBfX3RtcDsJCQkJCQkJICAgICAgXAorICAgX19hc20gX192b2xhdGlsZSAoCQkJCQkJCSAgICAgIFwKKy0JCSAgICAiMToJbHdhcngJJTAsMCwlMSIgTVVURVhfSElOVF9BQ1EgIlxuIgkJICAgICAgXAorKwkJICAgICIxOglsd2FyeAklMCwleTEiIE1VVEVYX0hJTlRfQUNRICJcbiIJCSAgICAgIFwKKyAJCSAgICAiCXN1YmYuCSUwLCUyLCUwXG4iCQkJCSAgICAgIFwKKyAJCSAgICAiCWJuZQkyZlxuIgkJCQkJICAgICAgXAorLQkJICAgICIJc3R3Y3guCSUzLDAsJTFcbiIJCQkJICAgICAgXAorKwkJICAgICIJc3R3Y3guCSUzLCV5MVxuIgkJCQkgICAgICBcCisgCQkgICAgIglibmUtCTFiXG4iCQkJCQkgICAgICBcCisgCQkgICAgIjI6CSIgX19BUkNIX0FDUV9JTlNUUgkJCQkgICAgICBcCistCQkgICAgOiAiPSZyIiAoX190bXApCQkJCQkgICAgICBcCistCQkgICAgOiAiYiIgKG1lbSksICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkgICAgICBcCisrCQkgICAgOiAiPSZyIiAoX190bXApLCAiK1oiICgqKG1lbSkpCQkJICAgICAgXAorKwkJICAgIDogInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCQkgICAgICBcCisgCQkgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkJICAgICAgXAorICAgX190bXAgIT0gMDsJCQkJCQkJCSAgICAgIFwKKyB9KQorQEAgLTYwLDE0ICs2MCwxNCBAQAorICh7CQkJCQkJCQkJICAgICAgXAorICAgdW5zaWduZWQgaW50IF9fdG1wOwkJCQkJCQkgICAgICBcCisgICBfX2FzbSBfX3ZvbGF0aWxlIChfX0FSQ0hfUkVMX0lOU1RSICJcbiIJCQkJICAgICAgXAorLQkJICAgICIxOglsd2FyeAklMCwwLCUxIiBNVVRFWF9ISU5UX1JFTCAiXG4iCQkgICAgICBcCisrCQkgICAgIjE6CWx3YXJ4CSUwLCV5MSIgTVVURVhfSElOVF9SRUwgIlxuIgkJICAgICAgXAorIAkJICAgICIJc3ViZi4JJTAsJTIsJTBcbiIJCQkJICAgICAgXAorIAkJICAgICIJYm5lCTJmXG4iCQkJCQkgICAgICBcCistCQkgICAgIglzdHdjeC4JJTMsMCwlMVxuIgkJCQkgICAgICBcCisrCQkgICAgIglzdHdjeC4JJTMsJXkxXG4iCQkJCSAgICAgIFwKKyAJCSAgICAiCWJuZS0JMWJcbiIJCQkJCSAgICAgIFwKKyAJCSAgICAiMjoJIgkJCQkJCSAgICAgIFwKKy0JCSAgICA6ICI9JnIiIChfX3RtcCkJCQkJCSAgICAgIFwKKy0JCSAgICA6ICJiIiAobWVtKSwgInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCSAgICAgIFwKKysJCSAgICA6ICI9JnIiIChfX3RtcCksICIrWiIgKCoobWVtKSkJCQkgICAgICBcCisrCQkgICAgOiAiciIgKG9sZHZhbCksICJyIiAobmV3dmFsKQkJCSAgICAgIFwKKyAJCSAgICA6ICJjcjAiLCAibWVtb3J5Iik7CQkJCQkgICAgICBcCisgICBfX3RtcCAhPSAwOwkJCQkJCQkJICAgICAgXAorIH0pCitkaWZmIC1kdXJOIGdsaWJjLTJfOS5vcmlnL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvYml0cy9hdG9taWMuaCBnbGliYy0yXzkvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9iaXRzL2F0b21pYy5oCistLS0gZ2xpYmMtMl85Lm9yaWcvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9iaXRzL2F0b21pYy5oCTIwMDctMDMtMjYgMjI6MTY6MDMuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMl85L3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvYml0cy9hdG9taWMuaAkyMDA5LTAyLTAyIDIyOjAxOjQwLjAwMDAwMDAwMCArMDEwMAorQEAgLTQ0LDE0ICs0NCwxNCBAQAorICh7CQkJCQkJCQkJICAgICAgXAorICAgdW5zaWduZWQgaW50IF9fdG1wLCBfX3RtcDI7CQkJCQkJICAgICAgXAorICAgX19hc20gX192b2xhdGlsZSAoIiAgIGNscmxkaSAgJTEsJTEsMzJcbiIJCQkJICAgICAgXAorLQkJICAgICIxOglsd2FyeAklMCwwLCUyIiBNVVRFWF9ISU5UX0FDUSAiXG4iCSAJICAgICAgXAorKwkJICAgICIxOglsd2FyeAklMCwleTIiIE1VVEVYX0hJTlRfQUNRICJcbiIJIAkgICAgICBcCisgCQkgICAgIglzdWJmLgklMCwlMSwlMFxuIgkJCQkgICAgICBcCisgCQkgICAgIglibmUJMmZcbiIJCQkJCSAgICAgIFwKKy0JCSAgICAiCXN0d2N4LgklNCwwLCUyXG4iCQkJCSAgICAgIFwKKysJCSAgICAiCXN0d2N4LgklNCwleTJcbiIJCQkJICAgICAgXAorIAkJICAgICIJYm5lLQkxYlxuIgkJCQkJICAgICAgXAorIAkJICAgICIyOgkiIF9fQVJDSF9BQ1FfSU5TVFIJCQkJICAgICAgXAorLQkJICAgIDogIj0mciIgKF9fdG1wKSwgIj1yIiAoX190bXAyKQkJCSAgICAgIFwKKy0JCSAgICA6ICJiIiAobWVtKSwgIjEiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCSAgICAgIFwKKysJCSAgICA6ICI9JnIiIChfX3RtcCksICI9ciIgKF9fdG1wMiksICIrWiIgKCoobWVtKSkJICAgICAgXAorKwkJICAgIDogIjEiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCQkgICAgICBcCisgCQkgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkJICAgICAgXAorICAgX190bXAgIT0gMDsJCQkJCQkJCSAgICAgIFwKKyB9KQorQEAgLTYxLDE0ICs2MSwxNCBAQAorICAgdW5zaWduZWQgaW50IF9fdG1wLCBfX3RtcDI7CQkJCQkJICAgICAgXAorICAgX19hc20gX192b2xhdGlsZSAoX19BUkNIX1JFTF9JTlNUUiAiXG4iCQkJCSAgICAgIFwKKyAJCSAgICAiICAgY2xybGRpICAlMSwlMSwzMlxuIgkJCQkgICAgICBcCistCQkgICAgIjE6CWx3YXJ4CSUwLDAsJTIiIE1VVEVYX0hJTlRfUkVMICJcbiIJCSAgICAgIFwKKysJCSAgICAiMToJbHdhcngJJTAsJXkyIiBNVVRFWF9ISU5UX1JFTCAiXG4iCQkgICAgICBcCisgCQkgICAgIglzdWJmLgklMCwlMSwlMFxuIgkJCQkgICAgICBcCisgCQkgICAgIglibmUJMmZcbiIJCQkJCSAgICAgIFwKKy0JCSAgICAiCXN0d2N4LgklNCwwLCUyXG4iCQkJCSAgICAgIFwKKysJCSAgICAiCXN0d2N4LgklNCwleTJcbiIJCQkJICAgICAgXAorIAkJICAgICIJYm5lLQkxYlxuIgkJCQkJICAgICAgXAorIAkJICAgICIyOgkiCQkJCQkJICAgICAgXAorLQkJICAgIDogIj0mciIgKF9fdG1wKSwgIj1yIiAoX190bXAyKQkJCSAgICAgIFwKKy0JCSAgICA6ICJiIiAobWVtKSwgIjEiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCSAgICAgIFwKKysJCSAgICA6ICI9JnIiIChfX3RtcCksICI9ciIgKF9fdG1wMiksICIrWiIgKCoobWVtKSkJICAgICAgXAorKwkJICAgIDogIjEiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCQkgICAgICBcCisgCQkgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkJICAgICAgXAorICAgX190bXAgIT0gMDsJCQkJCQkJCSAgICAgIFwKKyB9KQorQEAgLTgyLDE0ICs4MiwxNCBAQAorICh7CQkJCQkJCQkJICAgICAgXAorICAgdW5zaWduZWQgbG9uZwlfX3RtcDsJCQkJCQkJICAgICAgXAorICAgX19hc20gX192b2xhdGlsZSAoCQkJCQkJCSAgICAgIFwKKy0JCSAgICAiMToJbGRhcngJJTAsMCwlMSIgTVVURVhfSElOVF9BQ1EgIlxuIgkJICAgICAgXAorKwkJICAgICIxOglsZGFyeAklMCwleTEiIE1VVEVYX0hJTlRfQUNRICJcbiIJCSAgICAgIFwKKyAJCSAgICAiCXN1YmYuCSUwLCUyLCUwXG4iCQkJCSAgICAgIFwKKyAJCSAgICAiCWJuZQkyZlxuIgkJCQkJICAgICAgXAorLQkJICAgICIJc3RkY3guCSUzLDAsJTFcbiIJCQkJICAgICAgXAorKwkJICAgICIJc3RkY3guCSUzLCV5MVxuIgkJCQkgICAgICBcCisgCQkgICAgIglibmUtCTFiXG4iCQkJCQkgICAgICBcCisgCQkgICAgIjI6CSIgX19BUkNIX0FDUV9JTlNUUgkJCQkgICAgICBcCistCQkgICAgOiAiPSZyIiAoX190bXApCQkJCQkgICAgICBcCistCQkgICAgOiAiYiIgKG1lbSksICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkgICAgICBcCisrCQkgICAgOiAiPSZyIiAoX190bXApLCAiK1oiICgqKG1lbSkpCQkJICAgICAgXAorKwkJICAgIDogInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCQkgICAgICBcCisgCQkgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkJICAgICAgXAorICAgX190bXAgIT0gMDsJCQkJCQkJCSAgICAgIFwKKyB9KQorQEAgLTk4LDE0ICs5OCwxNCBAQAorICh7CQkJCQkJCQkJICAgICAgXAorICAgdW5zaWduZWQgbG9uZwlfX3RtcDsJCQkJCQkJICAgICAgXAorICAgX19hc20gX192b2xhdGlsZSAoX19BUkNIX1JFTF9JTlNUUiAiXG4iCQkJCSAgICAgIFwKKy0JCSAgICAiMToJbGRhcngJJTAsMCwlMiIgTVVURVhfSElOVF9SRUwgIlxuIgkJICAgICAgXAorKwkJICAgICIxOglsZGFyeAklMCwleTEiIE1VVEVYX0hJTlRfUkVMICJcbiIJCSAgICAgIFwKKyAJCSAgICAiCXN1YmYuCSUwLCUyLCUwXG4iCQkJCSAgICAgIFwKKyAJCSAgICAiCWJuZQkyZlxuIgkJCQkJICAgICAgXAorLQkJICAgICIJc3RkY3guCSUzLDAsJTFcbiIJCQkJICAgICAgXAorKwkJICAgICIJc3RkY3guCSUzLCV5MVxuIgkJCQkgICAgICBcCisgCQkgICAgIglibmUtCTFiXG4iCQkJCQkgICAgICBcCisgCQkgICAgIjI6CSIJCQkJCQkgICAgICBcCistCQkgICAgOiAiPSZyIiAoX190bXApCQkJCQkgICAgICBcCistCQkgICAgOiAiYiIgKG1lbSksICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkgICAgICBcCisrCQkgICAgOiAiPSZyIiAoX190bXApLCAiK1oiICgqKG1lbSkpCQkJICAgICAgXAorKwkJICAgIDogInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCQkgICAgICBcCisgCQkgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkJICAgICAgXAorICAgX190bXAgIT0gMDsJCQkJCQkJCSAgICAgIFwKKyB9KQorQEAgLTExNSwxNCArMTE1LDE0IEBACisgICAgICAgX190eXBlb2YgKCoobWVtKSkgX190bXA7CQkJCQkJICAgICAgXAorICAgICAgIF9fdHlwZW9mIChtZW0pICBfX21lbXAgPSAobWVtKTsJCQkJCSAgICAgIFwKKyAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgJCQkJCQkgICAgICBcCistCQkgICAgICAgICIxOglsZGFyeAklMCwwLCUxIiBNVVRFWF9ISU5UX0FDUSAiXG4iCSAgICAgIFwKKysJCSAgICAgICAgIjE6CWxkYXJ4CSUwLCV5MSIgTVVURVhfSElOVF9BQ1EgIlxuIgkgICAgICBcCisgCQkgICAgICAgICIJY21wZAklMCwlMlxuIgkJCSAgICAgIFwKKyAJCSAgICAgICAgIglibmUJMmZcbiIJCQkJICAgICAgXAorLQkJICAgICAgICAiCXN0ZGN4LgklMywwLCUxXG4iCQkJICAgICAgXAorKwkJICAgICAgICAiCXN0ZGN4LgklMywleTFcbiIJCQkgICAgICBcCisgCQkgICAgICAgICIJYm5lLQkxYlxuIgkJCQkgICAgICBcCisgCQkgICAgICAgICIyOgkiIF9fQVJDSF9BQ1FfSU5TVFIJCQkgICAgICBcCistCQkgICAgICAgIDogIj0mciIgKF9fdG1wKQkJCQkJICAgICAgXAorLQkJICAgICAgICA6ICJiIiAoX19tZW1wKSwgInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJICAgICAgXAorKwkJICAgICAgICA6ICI9JnIiIChfX3RtcCksICIrWiIgKCpfX21lbXApCQkJICAgICAgXAorKwkJICAgICAgICA6ICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkJICAgICAgXAorIAkJICAgICAgICA6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgICBfX3RtcDsJCQkJCQkJCSAgICAgIFwKKyAgIH0pCitAQCAtMTMyLDE0ICsxMzIsMTQgQEAKKyAgICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX3RtcDsJCQkJCQkgICAgICBcCisgICAgICAgX190eXBlb2YgKG1lbSkgIF9fbWVtcCA9IChtZW0pOwkJCQkJICAgICAgXAorICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKF9fQVJDSF9SRUxfSU5TVFIgIlxuIgkJCQkgICAgICBcCistCQkgICAgICAgICIxOglsZGFyeAklMCwwLCUxIiBNVVRFWF9ISU5UX1JFTCAiXG4iCSAgICAgIFwKKysJCSAgICAgICAgIjE6CWxkYXJ4CSUwLCV5MSIgTVVURVhfSElOVF9SRUwgIlxuIgkgICAgICBcCisgCQkgICAgICAgICIJY21wZAklMCwlMlxuIgkJCSAgICAgIFwKKyAJCSAgICAgICAgIglibmUJMmZcbiIJCQkJICAgICAgXAorLQkJICAgICAgICAiCXN0ZGN4LgklMywwLCUxXG4iCQkJICAgICAgXAorKwkJICAgICAgICAiCXN0ZGN4LgklMywleTFcbiIJCQkgICAgICBcCisgCQkgICAgICAgICIJYm5lLQkxYlxuIgkJCQkgICAgICBcCisgCQkgICAgICAgICIyOgkiCQkJCQkgICAgICBcCistCQkgICAgICAgIDogIj0mciIgKF9fdG1wKQkJCQkJICAgICAgXAorLQkJICAgICAgICA6ICJiIiAoX19tZW1wKSwgInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJICAgICAgXAorKwkJICAgICAgICA6ICI9JnIiIChfX3RtcCksICIrWiIgKCpfX21lbXApCQkJICAgICAgXAorKwkJICAgICAgICA6ICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkJICAgICAgXAorIAkJICAgICAgICA6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgICBfX3RtcDsJCQkJCQkJCSAgICAgIFwKKyAgIH0pCitAQCAtMTQ4LDEyICsxNDgsMTIgQEAKKyAgICAgKHsJCQkJCQkJCQkgICAgICBcCisgICAgICAgX190eXBlb2YgKCptZW0pIF9fdmFsOwkJCQkJCSAgICAgIFwKKyAgICAgICBfX2FzbSBfX3ZvbGF0aWxlIChfX0FSQ0hfUkVMX0lOU1RSICJcbiIJCQkJICAgICAgXAorLQkJCSIxOglsZGFyeAklMCwwLCUyIiBNVVRFWF9ISU5UX0FDUSAiXG4iCSAgICAgIFwKKy0JCQkiCXN0ZGN4LgklMywwLCUyXG4iCQkJICAgICAgXAorKwkJCSIxOglsZGFyeAklMCwleTEiIE1VVEVYX0hJTlRfQUNRICJcbiIJICAgICAgXAorKwkJCSIJc3RkY3guCSUyLCV5MVxuIgkJCSAgICAgIFwKKyAJCQkiCWJuZS0JMWJcbiIJCQkJICAgICAgXAorIAkJICAiICIgX19BUkNIX0FDUV9JTlNUUgkJCQkJICAgICAgXAorLQkJCTogIj0mciIgKF9fdmFsKSwgIj1tIiAoKm1lbSkJCQkgICAgICBcCistCQkJOiAiYiIgKG1lbSksICJyIiAodmFsdWUpLCAibSIgKCptZW0pCQkgICAgICBcCisrCQkJOiAiPSZyIiAoX192YWwpLCAiK1oiICgqKG1lbSkpCQkJICAgICAgXAorKwkJCTogInIiICh2YWx1ZSkJCQkJCSAgICAgIFwKKyAJCQk6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgICBfX3ZhbDsJCQkJCQkJCSAgICAgIFwKKyAgICAgfSkKK0BAIC0xNjIsMTEgKzE2MiwxMSBAQAorICAgICAoewkJCQkJCQkJCSAgICAgIFwKKyAgICAgICBfX3R5cGVvZiAoKm1lbSkgX192YWw7CQkJCQkJICAgICAgXAorICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKF9fQVJDSF9SRUxfSU5TVFIgIlxuIgkJCQkgICAgICBcCistCQkJIjE6CWxkYXJ4CSUwLDAsJTIiIE1VVEVYX0hJTlRfUkVMICJcbiIJICAgICAgXAorLQkJCSIJc3RkY3guCSUzLDAsJTJcbiIJCQkgICAgICBcCisrCQkJIjE6CWxkYXJ4CSUwLCV5MSIgTVVURVhfSElOVF9SRUwgIlxuIgkgICAgICBcCisrCQkJIglzdGRjeC4JJTIsJXkxXG4iCQkJICAgICAgXAorIAkJCSIJYm5lLQkxYiIJCQkJICAgICAgXAorLQkJCTogIj0mciIgKF9fdmFsKSwgIj1tIiAoKm1lbSkJCQkgICAgICBcCistCQkJOiAiYiIgKG1lbSksICJyIiAodmFsdWUpLCAibSIgKCptZW0pCQkgICAgICBcCisrCQkJOiAiPSZyIiAoX192YWwpLCAiK1oiICgqKG1lbSkpCQkJICAgICAgXAorKwkJCTogInIiICh2YWx1ZSkJCQkJCSAgICAgIFwKKyAJCQk6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgICBfX3ZhbDsJCQkJCQkJCSAgICAgIFwKKyAgICAgfSkKK0BAIC0xNzQsMTIgKzE3NCwxMiBAQAorICNkZWZpbmUgX19hcmNoX2F0b21pY19leGNoYW5nZV9hbmRfYWRkXzY0KG1lbSwgdmFsdWUpIFwKKyAgICAgKHsJCQkJCQkJCQkgICAgICBcCisgICAgICAgX190eXBlb2YgKCptZW0pIF9fdmFsLCBfX3RtcDsJCQkJCSAgICAgIFwKKy0gICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbGRhcngJJTAsMCwlM1xuIgkJCSAgICAgIFwKKy0JCQkiCWFkZAklMSwlMCwlNFxuIgkJCSAgICAgIFwKKy0JCQkiCXN0ZGN4LgklMSwwLCUzXG4iCQkJICAgICAgXAorKyAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCIxOglsZGFyeAklMCwleTJcbiIJCQkgICAgICBcCisrCQkJIglhZGQJJTEsJTAsJTNcbiIJCQkgICAgICBcCisrCQkJIglzdGRjeC4JJTEsJXkyXG4iCQkJICAgICAgXAorIAkJCSIJYm5lLQkxYiIJCQkJICAgICAgXAorLQkJCTogIj0mYiIgKF9fdmFsKSwgIj0mciIgKF9fdG1wKSwgIj1tIiAoKm1lbSkJICAgICAgXAorLQkJCTogImIiIChtZW0pLCAiciIgKHZhbHVlKSwgIm0iICgqbWVtKQkJICAgICAgXAorKwkJCTogIj0mYiIgKF9fdmFsKSwgIj0mciIgKF9fdG1wKSwgIitaIiAoKihtZW0pKQkgICAgICBcCisrCQkJOiAiciIgKHZhbHVlKQkJCQkJICAgICAgXAorIAkJCTogImNyMCIsICJtZW1vcnkiKTsJCQkJICAgICAgXAorICAgICAgIF9fdmFsOwkJCQkJCQkJICAgICAgXAorICAgICB9KQorQEAgLTE4NywxMiArMTg3LDEyIEBACisgI2RlZmluZSBfX2FyY2hfYXRvbWljX2luY3JlbWVudF92YWxfNjQobWVtKSBcCisgICAgICh7CQkJCQkJCQkJICAgICAgXAorICAgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fdmFsOwkJCQkJCSAgICAgIFwKKy0gICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbGRhcngJJTAsMCwlMlxuIgkJCSAgICAgIFwKKysgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbGRhcngJJTAsJXkxXG4iCQkJICAgICAgXAorIAkJCSIJYWRkaQklMCwlMCwxXG4iCQkJICAgICAgXAorLQkJCSIJc3RkY3guCSUwLDAsJTJcbiIJCQkgICAgICBcCisrCQkJIglzdGRjeC4JJTAsJXkxXG4iCQkJICAgICAgXAorIAkJCSIJYm5lLQkxYiIJCQkJICAgICAgXAorLQkJCTogIj0mYiIgKF9fdmFsKSwgIj1tIiAoKm1lbSkJCQkgICAgICBcCistCQkJOiAiYiIgKG1lbSksICJtIiAoKm1lbSkJCQkJICAgICAgXAorKwkJCTogIj0mYiIgKF9fdmFsKSwgIitaIiAoKihtZW0pKQkJCSAgICAgIFwKKysJCQk6CQkJCQkJICAgICAgXAorIAkJCTogImNyMCIsICJtZW1vcnkiKTsJCQkJICAgICAgXAorICAgICAgIF9fdmFsOwkJCQkJCQkJICAgICAgXAorICAgICB9KQorQEAgLTIwMCwyNyArMjAwLDI3IEBACisgI2RlZmluZSBfX2FyY2hfYXRvbWljX2RlY3JlbWVudF92YWxfNjQobWVtKSBcCisgICAgICh7CQkJCQkJCQkJICAgICAgXAorICAgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fdmFsOwkJCQkJCSAgICAgIFwKKy0gICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbGRhcngJJTAsMCwlMlxuIgkJCSAgICAgIFwKKysgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbGRhcngJJTAsJXkxXG4iCQkJICAgICAgXAorIAkJCSIJc3ViaQklMCwlMCwxXG4iCQkJICAgICAgXAorLQkJCSIJc3RkY3guCSUwLDAsJTJcbiIJCQkgICAgICBcCisrCQkJIglzdGRjeC4JJTAsJXkxXG4iCQkJICAgICAgXAorIAkJCSIJYm5lLQkxYiIJCQkJICAgICAgXAorLQkJCTogIj0mYiIgKF9fdmFsKSwgIj1tIiAoKm1lbSkJCQkgICAgICBcCistCQkJOiAiYiIgKG1lbSksICJtIiAoKm1lbSkJCQkJICAgICAgXAorKwkJCTogIj0mYiIgKF9fdmFsKSwgIitaIiAoKihtZW0pKQkJCSAgICAgIFwKKysJCQk6CQkJCQkJICAgICAgXAorIAkJCTogImNyMCIsICJtZW1vcnkiKTsJCQkJICAgICAgXAorICAgICAgIF9fdmFsOwkJCQkJCQkJICAgICAgXAorICAgICB9KQorIAorICNkZWZpbmUgX19hcmNoX2F0b21pY19kZWNyZW1lbnRfaWZfcG9zaXRpdmVfNjQobWVtKSBcCisgICAoeyBpbnQgX192YWwsIF9fdG1wOwkJCQkJCQkgICAgICBcCistICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbGRhcngJJTAsMCwlM1xuIgkJCSAgICAgIFwKKysgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCIxOglsZGFyeAklMCwleTJcbiIJCQkgICAgICBcCisgCQkgICAgICAgIgljbXBkaQkwLCUwLDBcbiIJCQkgICAgICBcCisgCQkgICAgICAgIglhZGRpCSUxLCUwLC0xXG4iCQkJICAgICAgXAorIAkJICAgICAgICIJYmxlCTJmXG4iCQkJCSAgICAgIFwKKy0JCSAgICAgICAiCXN0ZGN4LgklMSwwLCUzXG4iCQkJICAgICAgXAorKwkJICAgICAgICIJc3RkY3guCSUxLCV5MlxuIgkJCSAgICAgIFwKKyAJCSAgICAgICAiCWJuZS0JMWJcbiIJCQkJICAgICAgXAorIAkJICAgICAgICIyOgkiIF9fQVJDSF9BQ1FfSU5TVFIJCQkgICAgICBcCistCQkgICAgICAgOiAiPSZiIiAoX192YWwpLCAiPSZyIiAoX190bXApLCAiPW0iICgqbWVtKQkgICAgICBcCistCQkgICAgICAgOiAiYiIgKG1lbSksICJtIiAoKm1lbSkJCQkJICAgICAgXAorKwkJICAgICAgIDogIj0mYiIgKF9fdmFsKSwgIj0mciIgKF9fdG1wKSwgIitaIiAoKihtZW0pKQkgICAgICBcCisrCQkgICAgICAgOgkJCQkJCSAgICAgIFwKKyAJCSAgICAgICA6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgIF9fdmFsOwkJCQkJCQkJICAgICAgXAorICAgfSkKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvNTEwLXNoLW5vLWFzbS11c2VyLWhlYWRlci5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvNTEwLXNoLW5vLWFzbS11c2VyLWhlYWRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGQ1YWNhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS81MTAtc2gtbm8tYXNtLXVzZXItaGVhZGVyLnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKKzIwMDctMDMtMTMgIE1pa2UgRnJ5c2luZ2VyICA8dmFwaWVyQGdlbnRvby5vcmc+CisKKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5cy91c2VyLmg6IENvcHkgTGludXgncyBhc20tc2gvdXNlci5oLgorCistLS0gZ2xpYmMtMl85L3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5cy91c2VyLmgKKysrKyBnbGliYy0yXzkvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzL3VzZXIuaAorQEAgLTE5LDEwICsxOSw2MCBAQAorICNpZm5kZWYgX1NZU19VU0VSX0gKKyAjZGVmaW5lIF9TWVNfVVNFUl9ICTEKKyAKKy0jaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyAKKy0jaW5jbHVkZSA8YXNtL3VzZXIuaD4KKysvKgorKyAqIENvcmUgZmlsZSBmb3JtYXQ6IFRoZSBjb3JlIGZpbGUgaXMgd3JpdHRlbiBpbiBzdWNoIGEgd2F5IHRoYXQgZ2RiCisrICogY2FuIHVuZGVyc3RhbmQgaXQgYW5kIHByb3ZpZGUgdXNlZnVsIGluZm9ybWF0aW9uIHRvIHRoZSB1c2VyICh1bmRlcgorKyAqIGxpbnV4IHdlIHVzZSB0aGUgYHRyYWQtY29yZScgYmZkKS4gIFRoZSBmaWxlIGNvbnRlbnRzIGFyZSBhcyBmb2xsb3dzOgorKyAqCisrICogIHVwYWdlOiAxIHBhZ2UgY29uc2lzdGluZyBvZiBhIHVzZXIgc3RydWN0IHRoYXQgdGVsbHMgZ2RiCisrICoJd2hhdCBpcyBwcmVzZW50IGluIHRoZSBmaWxlLiAgRGlyZWN0bHkgYWZ0ZXIgdGhpcyBpcyBhCisrICoJY29weSBvZiB0aGUgdGFza19zdHJ1Y3QsIHdoaWNoIGlzIGN1cnJlbnRseSBub3QgdXNlZCBieSBnZGIsCisrICoJYnV0IGl0IG1heSBjb21lIGluIGhhbmR5IGF0IHNvbWUgcG9pbnQuICBBbGwgb2YgdGhlIHJlZ2lzdGVycworKyAqCWFyZSBzdG9yZWQgYXMgcGFydCBvZiB0aGUgdXBhZ2UuICBUaGUgdXBhZ2Ugc2hvdWxkIGFsd2F5cyBiZQorKyAqCW9ubHkgb25lIHBhZ2UgbG9uZy4KKysgKiAgZGF0YTogVGhlIGRhdGEgc2VnbWVudCBmb2xsb3dzIG5leHQuICBXZSB1c2UgY3VycmVudC0+ZW5kX3RleHQgdG8KKysgKgljdXJyZW50LT5icmsgdG8gcGljayB1cCBhbGwgb2YgdGhlIHVzZXIgdmFyaWFibGVzLCBwbHVzIGFueSBtZW1vcnkKKysgKgl0aGF0IG1heSBoYXZlIGJlZW4gc2JyaydlZC4gIE5vIGF0dGVtcHQgaXMgbWFkZSB0byBkZXRlcm1pbmUgaWYgYQorKyAqCXBhZ2UgaXMgZGVtYW5kLXplcm8gb3IgaWYgYSBwYWdlIGlzIHRvdGFsbHkgdW51c2VkLCB3ZSBqdXN0IGNvdmVyCisrICoJdGhlIGVudGlyZSByYW5nZS4gIEFsbCBvZiB0aGUgYWRkcmVzc2VzIGFyZSByb3VuZGVkIGluIHN1Y2ggYSB3YXkKKysgKgl0aGF0IGFuIGludGVncmFsIG51bWJlciBvZiBwYWdlcyBpcyB3cml0dGVuLgorKyAqICBzdGFjazogV2UgbmVlZCB0aGUgc3RhY2sgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG8gZ2V0IGEgbWVhbmluZ2Z1bAorKyAqCWJhY2t0cmFjZS4gIFdlIG5lZWQgdG8gd3JpdGUgdGhlIGRhdGEgZnJvbSB1c3AgdG8KKysgKgljdXJyZW50LT5zdGFydF9zdGFjaywgc28gd2Ugcm91bmQgZWFjaCBvZiB0aGVzZSBpbiBvcmRlciB0byBiZSBhYmxlCisrICoJdG8gd3JpdGUgYW4gaW50ZWdlciBudW1iZXIgb2YgcGFnZXMuCisrICovCisgCistI3VuZGVmIHN0YXJ0X3RocmVhZAorK3N0cnVjdCB1c2VyX2ZwdV9zdHJ1Y3QgeworKwl1bnNpZ25lZCBsb25nIGZwX3JlZ3NbMTZdOworKwl1bnNpZ25lZCBsb25nIHhmcF9yZWdzWzE2XTsKKysJdW5zaWduZWQgbG9uZyBmcHNjcjsKKysJdW5zaWduZWQgbG9uZyBmcHVsOworK307CisrCisrc3RydWN0IHVzZXIgeworKwlzdHJ1Y3QgcHRfcmVncwlyZWdzOwkJCS8qIGVudGlyZSBtYWNoaW5lIHN0YXRlICovCisrCXN0cnVjdCB1c2VyX2ZwdV9zdHJ1Y3QgZnB1OwkvKiBNYXRoIENvLXByb2Nlc3NvciByZWdpc3RlcnMgICovCisrCWludCB1X2ZwdmFsaWQ7CQkvKiBUcnVlIGlmIG1hdGggY28tcHJvY2Vzc29yIGJlaW5nIHVzZWQgKi8KKysJc2l6ZV90CQl1X3RzaXplOwkJLyogdGV4dCBzaXplIChwYWdlcykgKi8KKysJc2l6ZV90CQl1X2RzaXplOwkJLyogZGF0YSBzaXplIChwYWdlcykgKi8KKysJc2l6ZV90CQl1X3NzaXplOwkJLyogc3RhY2sgc2l6ZSAocGFnZXMpICovCisrCXVuc2lnbmVkIGxvbmcJc3RhcnRfY29kZTsJCS8qIHRleHQgc3RhcnRpbmcgYWRkcmVzcyAqLworKwl1bnNpZ25lZCBsb25nCXN0YXJ0X2RhdGE7CQkvKiBkYXRhIHN0YXJ0aW5nIGFkZHJlc3MgKi8KKysJdW5zaWduZWQgbG9uZwlzdGFydF9zdGFjazsJCS8qIHN0YWNrIHN0YXJ0aW5nIGFkZHJlc3MgKi8KKysJbG9uZyBpbnQJc2lnbmFsOwkJCS8qIHNpZ25hbCBjYXVzaW5nIGNvcmUgZHVtcCAqLworKwlzdHJ1Y3QgcmVncyAqCXVfYXIwOwkJCS8qIGhlbHAgZ2RiIGZpbmQgcmVnaXN0ZXJzICovCisrCXN0cnVjdCB1c2VyX2ZwdV9zdHJ1Y3QqIHVfZnBzdGF0ZTsJLyogTWF0aCBDby1wcm9jZXNzb3IgcG9pbnRlciAqLworKwl1bnNpZ25lZCBsb25nCW1hZ2ljOwkJCS8qIGlkZW50aWZpZXMgYSBjb3JlIGZpbGUgKi8KKysJY2hhcgkJdV9jb21tWzMyXTsJCS8qIHVzZXIgY29tbWFuZCBuYW1lICovCisrfTsKKysKKysjZGVmaW5lIE5CUEcJCQlnZXRwYWdlc2l6ZSgpCisrI2RlZmluZSBVUEFHRVMJCQkxCisrI2RlZmluZSBIT1NUX1RFWFRfU1RBUlRfQUREUgkodS5zdGFydF9jb2RlKQorKyNkZWZpbmUgSE9TVF9EQVRBX1NUQVJUX0FERFIJKHUuc3RhcnRfZGF0YSkKKysjZGVmaW5lIEhPU1RfU1RBQ0tfRU5EX0FERFIJKHUuc3RhcnRfc3RhY2sgKyB1LnVfc3NpemUgKiBOQlBHKQorIAorICNlbmRpZiAgLyogc3lzL3VzZXIuaCAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS81MjAtc2gtbm8tYXNtLWVsZi1oZWFkZXIucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzUyMC1zaC1uby1hc20tZWxmLWhlYWRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmNlYjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS81MjAtc2gtbm8tYXNtLWVsZi1oZWFkZXIucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorMjAwNy0wMy0xMyAgTWlrZSBGcnlzaW5nZXIgIDx2YXBpZXJAZ2VudG9vLm9yZz4KKworCSogc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzL3Byb2Nmcy5oOiBDb3B5IExpbnV4J3MgYXNtLXNoL2VsZi5oIHR5cGVzLgorCistLS0gZ2xpYmMtMl85L3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5cy9wcm9jZnMuaAorKysrIGdsaWJjLTJfOS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXMvcHJvY2ZzLmgKK0BAIC0yOSwxMCArMjksMTkgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy91Y29udGV4dC5oPgorICNpbmNsdWRlIDxzeXMvdXNlci5oPgorLSNpbmNsdWRlIDxhc20vZWxmLmg+CisgCisgX19CRUdJTl9ERUNMUworIAorKy8qCisrICogRUxGIHJlZ2lzdGVyIGRlZmluaXRpb25zLi4uCisrICovCisrdHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7CisrCisrI2RlZmluZSBFTEZfTkdSRUcgKHNpemVvZiAoc3RydWN0IHB0X3JlZ3MpIC8gc2l6ZW9mKGVsZl9ncmVnX3QpKQorK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisrCisrdHlwZWRlZiBzdHJ1Y3QgdXNlcl9mcHVfc3RydWN0IGVsZl9mcHJlZ3NldF90OworKworIHN0cnVjdCBlbGZfc2lnaW5mbworICAgeworICAgICBpbnQgc2lfc2lnbm87CQkJLyogU2lnbmFsIG51bWJlci4gICovCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzUzMC1wb3dlcnBjLTh4eC1DUFUxNS1lcnJhdGEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzUzMC1wb3dlcnBjLTh4eC1DUFUxNS1lcnJhdGEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQwNjQzYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvNTMwLXBvd2VycGMtOHh4LUNQVTE1LWVycmF0YS5wYXRjaApAQCAtMCwwICsxLDU2IEBACitGaXggbWVtc2V0IG9uIFBvd2VyUEMgOHh4LCBieSBOeWUgTGl1OgoraHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2Nyb3NzZ2NjLzIwMDgtMTAvbXNnMDAwNjcuaHRtbAorCitRdW90ZToKKyBJIGFtIHdvcmtpbmcgb24gYSBwb3dlcnBjIDg2MCB0b29sY2hhaW4sIGJ1dCBJIGFtIGhhdmluZyBwcm9ibGVtcyAgCisgY29udmluY2luZyBnbGliYyB0byBub3QgZW1pdCBjb2RlIHRoYXQgdXNlcyB0aGUgZGNieiBpbnN0cnVjdGlvbiAoQ1BVMTUgIAorIGRjYlggYnVnKS4gVGhlIHNvdXJjZSBvZiB0aGUgcHJvYmxlbSBpcyBzeXNkZXBzL3Bvd2VycGMvcG93ZXIzL21lbXNldC5TCisKKy0tLSBnbGliYy0yLjcvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9tZW1zZXQuUwkyMDA3LTAzLTI2IDEzOjA5OjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGdsaWJjLTIuNy9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL21lbXNldC5TLm5ldwkyMDA4LTEwLTIzIDIwOjI4OjUyLjAwMDAwMDAwMCAtMDcwMAorQEAgLTExMiwxMSArMTEyLDEzIEBACisgCWNscnJ3aS4JckFMSUdOLCByTEVOLCA1CisgCW10Y3JmCTB4MDEsIHJMRU4JLyogNDB0aCBpbnN0cnVjdGlvbiBmcm9tIC5hbGlnbiAqLworIAorKyNpZm5kZWYgQlJPS0VOX1BQQ184eHhfQ1BVMTUKKyAvKiBDaGVjayBpZiB3ZSBjYW4gdXNlIHRoZSBzcGVjaWFsIGNhc2UgZm9yIGNsZWFyaW5nIG1lbW9yeSB1c2luZyBkY2J6LgorICAgIFRoaXMgcmVxdWlyZXMgdGhhdCB3ZSBrbm93IHRoZSBjb3JyZWN0IGNhY2hlIGxpbmUgc2l6ZSBmb3IgdGhpcworICAgIHByb2Nlc3Nvci4gIEdldHRpbmcgdGhlIF9fY2FjaGVfbGluZV9zaXplIG1heSByZXF1aXJlIGVzdGFibGlzaGluZyBHT1QKKyAgICBhZGRyZXNzYWJpbGl0eSwgc28gYnJhbmNoIG91dCBvZiBsaW5lIHRvIHNldCB0aGlzIHVwLiAgKi8KKyAJYmVxCWNyMSwgTChjaGVja2xpbmVzaXplKQorKyNlbmRpZgorIAorIC8qIFN0b3JlIGJsb2NrcyBvZiAzMi1ieXRlcyAoMjU2LWJpdHMpIHN0YXJ0aW5nIG9uIGEgMzItYnl0ZSBib3VuZGFyeS4KKyAgICBDYW4ndCBhc3N1bWUgdGhhdCByQ0hSIGlzIHplcm8gb3IgdGhhdCB0aGUgY2FjaGUgbGluZSBzaXplIGlzIGVpdGhlcgorQEAgLTE1OCw2ICsxNjAsNyBAQAorIAlhZGQJck1FTVAsIHJNRU1QLCByQUxJR04KKyAJYglMKG1lZGl1bV90YWlsMikJLyogNzJuZCBpbnN0cnVjdGlvbiBmcm9tIC5hbGlnbiAqLworIAorKyNpZm5kZWYgQlJPS0VOX1BQQ184eHhfQ1BVMTUKKyAJLmFsaWduCTUKKyAJbm9wCisgLyogQ2xlYXIgY2FjaGUgbGluZXMgb2YgbWVtb3J5IGluIDEyOC1ieXRlIGNodW5rcy4KK0BAIC0xOTEsNiArMTk0LDcgQEAKKyAJYmRueglMKHpsb29wKQorIAliZXFscgljcjUKKyAJYglMKG1lZGl1bV90YWlsMikKKysjZW5kaWYgLyogISBCUk9LRU5fUFBDXzh4eF9DUFUxNSAqLworIAorIAkuYWxpZ24JNQorIEwoc21hbGwpOgorQEAgLTI0OCw2ICsyNTIsNyBAQAorIAlzdHcJckNIUiwgLTgock1FTVApCisgCWJscgorIAorKyNpZm5kZWYgQlJPS0VOX1BQQ184eHhfQ1BVMTUKKyBMKGNoZWNrbGluZXNpemUpOgorICNpZmRlZiBTSEFSRUQKKyAJbWZscglyVE1QCitAQCAtMzI5LDYgKzMzNCw3IEBACisgTChoYW5kbGV0YWlsMzIpOgorIAljbHJyd2kuCXJBTElHTiwgckxFTiwgNQorIAliCUwobm9uZGNieikKKysjZW5kaWYgLyogISBCUk9LRU5fUFBDXzh4eF9DUFUxNSAqLworIAorIEVORCAoQlBfU1lNIChtZW1zZXQpKQorIGxpYmNfaGlkZGVuX2J1aWx0aW5fZGVmIChtZW1zZXQpCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzU0MC1hbHBoYS1hdGZjdHMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzU0MC1hbHBoYS1hdGZjdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNhZGJjZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvNTQwLWFscGhhLWF0ZmN0cy5wYXRjaApAQCAtMCwwICsxLDEyIEBACistLS0gZ2xpYmMtMi43L3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2tlcm5lbC1mZWF0dXJlcy5oCTIwMDctMDgtMTQgMDY6MjE6MDkuMDAwMDAwMDAwICswMzAwCisrKysgZ2xpYmMtMi43L3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2tlcm5lbC1mZWF0dXJlcy5oLm5ldwkyMDA4LTA3LTIzIDA3OjA1OjIwLjAwMDAwMDAwMCArMDMwMAorQEAgLTQ1NCw4ICs0NTQsNyBAQAorICAgIGFuZCBvbiBBbHBoYSBqdXN0IGFmdGVyIDIuNi4yMi1yYzEuICAqLworICNpZiBfX0xJTlVYX0tFUk5FTF9WRVJTSU9OID49IDB4MDIwNjExIFwKKyAgICAgJiYgKCghZGVmaW5lZCBfX3NoX18gJiYgIWRlZmluZWQgX19hbHBoYV9fKSBcCistCXx8IChfX0xJTlVYX0tFUk5FTF9WRVJTSU9OID49IDB4MDIwNjEzICYmIGRlZmluZWQgX19zaF9fKSBcCistCXx8IChfX0xJTlVYX0tFUk5FTF9WRVJTSU9OID49IDB4MDIwNjE3ICYmIGRlZmluZWQgX19hbHBoYV9fKSkKKysJfHwgKF9fTElOVVhfS0VSTkVMX1ZFUlNJT04gPj0gMHgwMjA2MTMgJiYgZGVmaW5lZCBfX3NoX18pKQorICMgZGVmaW5lIF9fQVNTVU1FX0FURkNUUwkxCisgI2VuZGlmCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzU1MC0yLjktZWxmLWJlZ2luLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS81NTAtMi45LWVsZi1iZWdpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGM1MjMzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS81NTAtMi45LWVsZi1iZWdpbi5wYXRjaApAQCAtMCwwICsxLDI5IEBACitbQUxMICBdICAgIHBvd2VycGMtODYwLWxpbnV4LWdudS1nY2MgICAgICAgLW5vc3RkbGliIC1ub3N0YXJ0ZmlsZXMgLXNoYXJlZCAgICAgICAgICAgICAgICAgICAgICAgIC1XbCwteixjb21icmVsb2MgLVdsLC16LHJlbHJvIC1XbCwtLWhhc2gtc3R5bGU9Ym90aCAtV2wsLXosZGVmcyAtV2wsLS12ZXJib3NlIDI+JjEgfCAgICAgICAgICAgICAgICAgICAgTENfQUxMPUMgICAgICAgICAgICAgICAgc2VkIC1lICcvXj09PT09PT09PS8sL149PT09PT09PT0vIWQ7L149PT09PT09PT0vZCcgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzLy4gPSAwICsgU0laRU9GX0hFQURFUlM7LyYgX2JlZ2luID0gLiAtIFNJWkVPRl9IRUFERVJTOy8nICAgICAgICAgICAgICA+IC9sb2NhbC9ueWV0LWJ1aWxkL2Nyb3NzdG9vbC1uZy1zdm4vdGFyZ2V0cy9wb3dlcnBjLTg2MC1saW51eC1nbnUvYnVpbGQvYnVpbGQtbGliYy9lbGYvbGQuc28ubGRzCitbQUxMICBdICAgIHBvd2VycGMtODYwLWxpbnV4LWdudS1nY2MgICAgICAgLW5vc3RkbGliIC1ub3N0YXJ0ZmlsZXMgLXNoYXJlZCAtbyAvbG9jYWwvbnlldC1idWlsZC9jcm9zc3Rvb2wtbmctc3ZuL3RhcmdldHMvcG93ZXJwYy04NjAtbGludXgtZ251L2J1aWxkL2J1aWxkLWxpYmMvZWxmL2xkLnNvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtV2wsLXosY29tYnJlbG9jIC1XbCwteixyZWxybyAtV2wsLS1oYXNoLXN0eWxlPWJvdGggLVdsLC16LGRlZnMgICAgICAgICAgICAgICAgICAgICAgICAgL2xvY2FsL255ZXQtYnVpbGQvY3Jvc3N0b29sLW5nLXN2bi90YXJnZXRzL3Bvd2VycGMtODYwLWxpbnV4LWdudS9idWlsZC9idWlsZC1saWJjL2VsZi9saWJydGxkLm9zIC1XbCwtLXZlcnNpb24tc2NyaXB0PS9sb2NhbC9ueWV0LWJ1aWxkL2Nyb3NzdG9vbC1uZy1zdm4vdGFyZ2V0cy9wb3dlcnBjLTg2MC1saW51eC1nbnUvYnVpbGQvYnVpbGQtbGliYy9sZC5tYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVdsLC1zb25hbWU9bGQuc28uMSAtVCAvbG9jYWwvbnlldC1idWlsZC9jcm9zc3Rvb2wtbmctc3ZuL3RhcmdldHMvcG93ZXJwYy04NjAtbGludXgtZ251L2J1aWxkL2J1aWxkLWxpYmMvZWxmL2xkLnNvLmxkcworW0FMTCAgXSAgICAvbG9jYWwvbnlldC1idWlsZC9jcm9zc3Rvb2wtbmctc3ZuL3RhcmdldHMvcG93ZXJwYy04NjAtbGludXgtZ251L2J1aWxkL2J1aWxkLWxpYmMvZWxmL2xpYnJ0bGQub3M6IEluIGZ1bmN0aW9uIGBfZGxfc3RhcnRfZmluYWwnOgorW0FMTCAgXSAgICBydGxkLmM6KC50ZXh0KzB4MmZlKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX2JlZ2luJworW0FMTCAgXSAgICAvbG9jYWwvbnlldC1idWlsZC9jcm9zc3Rvb2wtbmctc3ZuL3RhcmdldHMvcG93ZXJwYy04NjAtbGludXgtZ251L2J1aWxkL2djYy1jb3JlLXNoYXJlZC9saWIvZ2NjL3Bvd2VycGMtODYwLWxpbnV4LWdudS80LjMuMy8uLi8uLi8uLi8uLi9wb3dlcnBjLTg2MC1saW51eC1nbnUvYmluL2xkOiAvbG9jYWwvbnlldC1idWlsZC9jcm9zc3Rvb2wtbmctc3ZuL3RhcmdldHMvcG93ZXJwYy04NjAtbGludXgtZ251L2J1aWxkL2J1aWxkLWxpYmMvZWxmL2xkLnNvOiBoaWRkZW4gc3ltYm9sIGBfYmVnaW4nIGlzbid0IGRlZmluZWQKK1tBTEwgIF0gICAgL2xvY2FsL255ZXQtYnVpbGQvY3Jvc3N0b29sLW5nLXN2bi90YXJnZXRzL3Bvd2VycGMtODYwLWxpbnV4LWdudS9idWlsZC9nY2MtY29yZS1zaGFyZWQvbGliL2djYy9wb3dlcnBjLTg2MC1saW51eC1nbnUvNC4zLjMvLi4vLi4vLi4vLi4vcG93ZXJwYy04NjAtbGludXgtZ251L2Jpbi9sZDogZmluYWwgbGluayBmYWlsZWQ6IE5vbnJlcHJlc2VudGFibGUgc2VjdGlvbiBvbiBvdXRwdXQKK1tBTEwgIF0gICAgY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKK1tFUlJPUl0gICAgbWFrZVszXTogKioqIFsvbG9jYWwvbnlldC1idWlsZC9jcm9zc3Rvb2wtbmctc3ZuL3RhcmdldHMvcG93ZXJwYy04NjAtbGludXgtZ251L2J1aWxkL2J1aWxkLWxpYmMvZWxmL2xkLnNvXSBFcnJvciAxCitbQUxMICBdICAgIG1ha2VbM106IExlYXZpbmcgZGlyZWN0b3J5IGAvbG9jYWwvbnlldC1idWlsZC9jcm9zc3Rvb2wtbmctc3ZuL3RhcmdldHMvc3JjL2dsaWJjLTIuOS9lbGYnCitbRVJST1JdICAgIG1ha2VbMl06ICoqKiBbZWxmL3N1YmRpcl9saWJdIEVycm9yIDIKK1tBTEwgIF0gICAgbWFrZVsyXTogTGVhdmluZyBkaXJlY3RvcnkgYC9sb2NhbC9ueWV0LWJ1aWxkL2Nyb3NzdG9vbC1uZy1zdm4vdGFyZ2V0cy9zcmMvZ2xpYmMtMi45JworW0VSUk9SXSAgICBtYWtlWzFdOiAqKiogW2FsbF0gRXJyb3IgMgorW0FMTCAgXSAgICBtYWtlWzFdOiBMZWF2aW5nIGRpcmVjdG9yeSBgL2xvY2FsL255ZXQtYnVpbGQvY3Jvc3N0b29sLW5nLXN2bi90YXJnZXRzL3Bvd2VycGMtODYwLWxpbnV4LWdudS9idWlsZC9idWlsZC1saWJjJworW0VSUk9SXSAgICBCdWlsZCBmYWlsZWQgaW4gc3RlcCAnSW5zdGFsbGluZyBDIGxpYnJhcnknCitbRVJST1JdICAgIEVycm9yIGhhcHBlbmVkIGluICcvbG9jYWwvbnlldC1idWlsZC9jcm9zc3Rvb2wtbmctc3ZuL3NjcmlwdHMvZnVuY3Rpb25zJyBpbiBmdW5jdGlvbiAnQ1RfRG9FeGVjTG9nJyAobGluZSB1bmtub3duLCBzb3JyeSkKK1tFUlJPUl0gICAgICAgICAgY2FsbGVkIGZyb20gJy9sb2NhbC9ueWV0LWJ1aWxkL2Nyb3NzdG9vbC1uZy1zdm4vc2NyaXB0cy9idWlsZC9saWJjL2dsaWJjLnNoJyBhdCBsaW5lICMgNTA0IGluIGZ1bmN0aW9uICdkb19saWJjJworW0VSUk9SXSAgICAgICAgICBjYWxsZWQgZnJvbSAnL2xvY2FsL255ZXQtYnVpbGQvY3Jvc3N0b29sLW5nLXN2bi9zY3JpcHRzL2Nyb3NzdG9vbC1ORy5zaCcgYXQgbGluZSAjIDQ3OCBpbiBmdW5jdGlvbiAnbWFpbicKKworLS0tIGdsaWJjLTIuOV9vcmlnL2VsZi9NYWtlZmlsZQkyMDA5LTAzLTI2IDIwOjI2OjQyLjAwMDAwMDAwMCAtMDcwMAorKysrIGdsaWJjLTIuOS9lbGYvTWFrZWZpbGUJMjAwOS0wMy0yNiAyMDoxNDoxMS4wMDAwMDAwMDAgLTA3MDAKK0BAIC0zMDQsNyArMzA0LDcgQEAKKyAJCSAgJChMREZMQUdTLXJ0bGQpIC1XbCwteixkZWZzIC1XbCwtLXZlcmJvc2UgMj4mMSB8CVwKKyAJCSAgTENfQUxMPUMgXAorIAkJICBzZWQgLWUgJy9ePT09PT09PT09LywvXj09PT09PT09PS8hZDsvXj09PT09PT09PS9kJwlcCistCQkgICAgICAtZSAncy9cLiA9IDAgKyBTSVpFT0ZfSEVBREVSUzsvJiBfYmVnaW4gPSAuIC0gU0laRU9GX0hFQURFUlM7LycgXAorKwkJICAgICAgLWUgJ3MvXC4gPSAuKiArIFNJWkVPRl9IRUFERVJTOy8mIF9iZWdpbiA9IC4gLSBTSVpFT0ZfSEVBREVSUzsvJyBcCisgCQkgID4gJEAubGRzCisgCSQoTElOSy5vKSAtbm9zdGRsaWIgLW5vc3RhcnRmaWxlcyAtc2hhcmVkIC1vICRACQkJXAorIAkJICAkKExERkxBR1MtcnRsZCkgLVdsLC16LGRlZnMgJCh6LW5vdy0kKGJpbmQtbm93KSkJXApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS81NjAtc3lzbG9nLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS81NjAtc3lzbG9nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMGNhZmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzU2MC1zeXNsb2cucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorZGlmZiAtZHVyTiBnbGliYy1jdnMtMi45Lm9yaWcvbWlzYy9zeXNsb2cuYyBnbGliYy1jdnMtMi45L21pc2Mvc3lzbG9nLmMKKy0tLSBnbGliYy1jdnMtMi45Lm9yaWcvbWlzYy9zeXNsb2cuYwkyMDA5LTA2LTAxIDEwOjE2OjUwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLWN2cy0yLjkvbWlzYy9zeXNsb2cuYwkyMDA5LTA2LTAxIDEwOjE3OjIwLjAwMDAwMDAwMCArMDIwMAorQEAgLTE1Miw3ICsxNTIsNyBAQAorICNkZWZpbmUJSU5URVJOQUxMT0cJTE9HX0VSUnxMT0dfQ09OU3xMT0dfUEVSUk9SfExPR19QSUQKKyAJLyogQ2hlY2sgZm9yIGludmFsaWQgYml0cy4gKi8KKyAJaWYgKHByaSAmIH4oTE9HX1BSSU1BU0t8TE9HX0ZBQ01BU0spKSB7CistCQlzeXNsb2coSU5URVJOQUxMT0csCisrCQlfX3N5c2xvZyhJTlRFUk5BTExPRywKKyAJCSAgICAic3lzbG9nOiB1bmtub3duIGZhY2lsaXR5L3ByaW9yaXR5OiAleCIsIHByaSk7CisgCQlwcmkgJj0gTE9HX1BSSU1BU0t8TE9HX0ZBQ01BU0s7CisgCX0KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvNTcwLWRlYnVnLXJlYWRsaW5rX2Noay1yZWFka2xpbmthdF9jaGsucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzU3MC1kZWJ1Zy1yZWFkbGlua19jaGstcmVhZGtsaW5rYXRfY2hrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YTcwNTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzU3MC1kZWJ1Zy1yZWFkbGlua19jaGstcmVhZGtsaW5rYXRfY2hrLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK2RpZmYgLWR1ciBnbGliYy1jdnMtMi45Lm9yaWcvZGVidWcvcmVhZGxpbmtfY2hrLmMgZ2xpYmMtY3ZzLTIuOS9kZWJ1Zy9yZWFkbGlua19jaGsuYworLS0tIGdsaWJjLWN2cy0yLjkub3JpZy9kZWJ1Zy9yZWFkbGlua19jaGsuYwkyMDA1LTAzLTAxIDAxOjQxOjE1LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLWN2cy0yLjkvZGVidWcvcmVhZGxpbmtfY2hrLmMJMjAwOS0wNi0wMSAxMDo1OTozNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNSw3ICsyNSw3IEBACisgCisgCisgc3NpemVfdAorLV9fcmVhZGxpbmtfY2hrIChjb25zdCBjaGFyICpwYXRoLCB2b2lkICpidWYsIHNpemVfdCBsZW4sIHNpemVfdCBidWZsZW4pCisrX19yZWFkbGlua19jaGsgKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgc2l6ZV90IGJ1ZmxlbikKKyB7CisgICBpZiAobGVuID4gYnVmbGVuKQorICAgICBfX2Noa19mYWlsICgpOworZGlmZiAtZHVyIGdsaWJjLWN2cy0yLjkub3JpZy9kZWJ1Zy9yZWFkbGlua2F0X2Noay5jIGdsaWJjLWN2cy0yLjkvZGVidWcvcmVhZGxpbmthdF9jaGsuYworLS0tIGdsaWJjLWN2cy0yLjkub3JpZy9kZWJ1Zy9yZWFkbGlua2F0X2Noay5jCTIwMDYtMDQtMjQgMTg6NTY6MTIuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtY3ZzLTIuOS9kZWJ1Zy9yZWFkbGlua2F0X2Noay5jCTIwMDktMDYtMDEgMTE6MDc6MjYuMDAwMDAwMDAwICswMjAwCitAQCAtMjEsNyArMjEsNyBAQAorIAorIAorIHNzaXplX3QKKy1fX3JlYWRsaW5rYXRfY2hrIChpbnQgZmQsIGNvbnN0IGNoYXIgKnBhdGgsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwKKytfX3JlYWRsaW5rYXRfY2hrIChpbnQgZmQsIGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwKKyAJCSAgc2l6ZV90IGJ1ZmxlbikKKyB7CisgICBpZiAobGVuID4gYnVmbGVuKQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS82MDAtcmVjZW50LWJpbnV0aWxzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS82MDAtcmVjZW50LWJpbnV0aWxzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZDI5N2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzYwMC1yZWNlbnQtYmludXRpbHMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorZGlmZiAtZHVyTiBnbGliYy0yLjkub3JpZy9jb25maWd1cmUgZ2xpYmMtMi45L2NvbmZpZ3VyZQorLS0tIGdsaWJjLTIuOS5vcmlnL2NvbmZpZ3VyZQkyMDEwLTA1LTE4IDIzOjQ3OjIzLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuOS9jb25maWd1cmUJMjAxMC0wNS0xOCAyMzo1MDowNC4wMDAwMDAwMDAgKzAyMDAKK0BAIC00NTM0LDcgKzQ1MzQsNyBAQAorICAgYWNfcHJvZ192ZXJzaW9uPWAkQVMgLS12ZXJzaW9uIDI+JjEgfCBzZWQgLW4gJ3MvXi4qR05VIGFzc2VtYmxlci4qIFwoWzAtOV0qXC5bMC05Ll0qXCkuKiQvXDEvcCdgCisgICBjYXNlICRhY19wcm9nX3ZlcnNpb24gaW4KKyAgICAgJycpIGFjX3Byb2dfdmVyc2lvbj0idi4gPy4/PywgYmFkIjsgYWNfdmVyY19mYWlsPXllczs7CistICAgIDIuMVszLTldKikKKysgICAgMi4xWzMtOV0qfDIuMVswLTldWzAtOV0qfDIuWzItOV1bMC05XSp8WzMtOV0uKnxbMS05XVswLTldKikKKyAgICAgICAgYWNfcHJvZ192ZXJzaW9uPSIkYWNfcHJvZ192ZXJzaW9uLCBvayI7IGFjX3ZlcmNfZmFpbD1ubzs7CisgICAgICopIGFjX3Byb2dfdmVyc2lvbj0iJGFjX3Byb2dfdmVyc2lvbiwgYmFkIjsgYWNfdmVyY19mYWlsPXllczs7CisgCitAQCAtNDU5Nyw3ICs0NTk3LDcgQEAKKyAgIGFjX3Byb2dfdmVyc2lvbj1gJExEIC0tdmVyc2lvbiAyPiYxIHwgc2VkIC1uICdzL14uKkdOVSBsZC4qIFwoWzAtOV1bMC05XSpcLlswLTkuXSpcKS4qJC9cMS9wJ2AKKyAgIGNhc2UgJGFjX3Byb2dfdmVyc2lvbiBpbgorICAgICAnJykgYWNfcHJvZ192ZXJzaW9uPSJ2LiA/Lj8/LCBiYWQiOyBhY192ZXJjX2ZhaWw9eWVzOzsKKy0gICAgMi4xWzMtOV0qKQorKyAgICAyLjFbMy05XSp8Mi4xWzAtOV1bMC05XSp8Mi5bMi05XVswLTldKnxbMy05XS4qfFsxLTldWzAtOV0qKQorICAgICAgICBhY19wcm9nX3ZlcnNpb249IiRhY19wcm9nX3ZlcnNpb24sIG9rIjsgYWNfdmVyY19mYWlsPW5vOzsKKyAgICAgKikgYWNfcHJvZ192ZXJzaW9uPSIkYWNfcHJvZ192ZXJzaW9uLCBiYWQiOyBhY192ZXJjX2ZhaWw9eWVzOzsKKyAKK2RpZmYgLWR1ck4gZ2xpYmMtMi45Lm9yaWcvY29uZmlndXJlLmluIGdsaWJjLTIuOS9jb25maWd1cmUuaW4KKy0tLSBnbGliYy0yLjkub3JpZy9jb25maWd1cmUuaW4JMjAxMC0wNS0xOCAyMzo0NzoyMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjkvY29uZmlndXJlLmluCTIwMTAtMDUtMTggMjM6NTE6MjUuMDAwMDAwMDAwICswMjAwCitAQCAtODQ0LDEwICs4NDQsMTAgQEAKKyAjIEFjY2VwdCBiaW51dGlscyAyLjEzIG9yIG5ld2VyLgorIEFDX0NIRUNLX1BST0dfVkVSKEFTLCAkQVMsIC0tdmVyc2lvbiwKKyAJCSAgW0dOVSBhc3NlbWJsZXIuKiBcKFswLTldKlwuWzAtOS5dKlwpXSwKKy0JCSAgWzIuMVszLTldKl0sIEFTPTogY3JpdGljX21pc3Npbmc9IiRjcml0aWNfbWlzc2luZyBhcyIpCisrCQkgIFsyLjFbMy05XSp8Mi4xWzAtOV1bMC05XSp8Mi5bMi05XVswLTldKnxbMy05XS4qfFsxLTldWzAtOV0qXSwgQVM9OiBjcml0aWNfbWlzc2luZz0iJGNyaXRpY19taXNzaW5nIGFzIikKKyBBQ19DSEVDS19QUk9HX1ZFUihMRCwgJExELCAtLXZlcnNpb24sCisgCQkgIFtHTlUgbGQuKiBcKFswLTldWzAtOV0qXC5bMC05Ll0qXCldLAorLQkJICBbMi4xWzMtOV0qXSwgTEQ9OiBjcml0aWNfbWlzc2luZz0iJGNyaXRpY19taXNzaW5nIGxkIikKKysJCSAgWzIuMVszLTldKnwyLjFbMC05XVswLTldKnwyLlsyLTldWzAtOV0qfFszLTldLip8WzEtOV1bMC05XSpdLCBMRD06IGNyaXRpY19taXNzaW5nPSIkY3JpdGljX21pc3NpbmcgbGQiKQorIAorICMgV2UgbmVlZCB0aGUgcGh5c2ljYWwgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gIFdlIGNhbm5vdCB1c2UgdGhlCisgIyAicHdkIC1QIiBzaGVsbCBidWlsdGluIHNpbmNlIHRoYXQncyBub3QgcG9ydGFibGUuICBJbnN0ZWFkIHdlIHRyeSB0bwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS82MTAtZml4LW5wdGwtaW5pdC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvNjEwLWZpeC1ucHRsLWluaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI1ZDZhZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy8yLjkvNjEwLWZpeC1ucHRsLWluaXQucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorLS0tIGdsaWJjLTJfOS5vcmlnL25wdGwvaW5pdC5jCTIwMDctMTAtMTUgMjI6MjU6MjUuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMl85L25wdGwvaW5pdC5jCTIwMTAtMDgtMTggMTA6NDY6MDYuMTA5MDk4NjQ2ICswMjAwCitAQCAtMjM2LDcgKzIzNiw3IEBACisgCisgCisgLyogVGhpcyBjYW4gYmUgc2V0IGJ5IHRoZSBkZWJ1Z2dlciBiZWZvcmUgaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUuICAqLworLXN0YXRpYyBib29sIF9fbnB0bF9pbml0aWFsX3JlcG9ydF9ldmVudHM7Cisrc3RhdGljIGJvb2wgX19ucHRsX2luaXRpYWxfcmVwb3J0X2V2ZW50cyBfX2F0dHJpYnV0ZV91c2VkX187CisgCisgdm9pZAorIF9fcHRocmVhZF9pbml0aWFsaXplX21pbmltYWxfaW50ZXJuYWwgKHZvaWQpCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzkwMC1tYXJjaC1pNjg2LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS85MDAtbWFyY2gtaTY4Ni5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzQ4MDdlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS85MDAtbWFyY2gtaTY4Ni5wYXRjaApAQCAtMCwwICsxLDM0IEBACisyMDA3LTAyLTE1ICBLaGVtIFJhaiAgPGtyYWpAeHh4eHh4eHh4eD4KKworICAgICAgICogc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaDogUmUtZGVmaW5lIF9faTY4Ni4KKyAgICAgICAqIG5wdGwvc3lzZGVwcy9wdGhyZWFkL3B0LWluaXRmaW5pLmM6IERpdHRvLgorCitkaWZmIC11ck4gZ2xpYmMtMi45Lm9yaWcvbnB0bC9zeXNkZXBzL3B0aHJlYWQvcHQtaW5pdGZpbmkuYyBnbGliYy0yLjkvbnB0bC9zeXNkZXBzL3B0aHJlYWQvcHQtaW5pdGZpbmkuYworLS0tIGdsaWJjLTIuOS5vcmlnL25wdGwvc3lzZGVwcy9wdGhyZWFkL3B0LWluaXRmaW5pLmMJMjAwOS0xMi0wOCAyMToxMDoyMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjkvbnB0bC9zeXNkZXBzL3B0aHJlYWQvcHQtaW5pdGZpbmkuYwkyMDEwLTEyLTMwIDExOjMzOjMxLjUyMDg1NTU5NSArMDEwMAorQEAgLTQ1LDYgKzQ1LDExIEBACisgLyogRW1iZWQgYW4gI2luY2x1ZGUgdG8gcHVsbCBpbiB0aGUgYWxpZ25tZW50IGFuZCAuZW5kIGRpcmVjdGl2ZXMuICovCisgYXNtICgiXG4jaW5jbHVkZSBcImRlZnMuaFwiIik7CisgCisrYXNtICgiXG4jaWYgZGVmaW5lZCBfX2k2ODYgJiYgZGVmaW5lZCBfX0FTU0VNQkxFUl9fIik7CisrYXNtICgiXG4jdW5kZWYgX19pNjg2Iik7CisrYXNtICgiXG4jZGVmaW5lIF9faTY4NiBfX2k2ODYiKTsKKythc20gKCJcbiNlbmRpZiIpOworKworIC8qIFRoZSBpbml0aWFsIGNvbW1vbiBjb2RlIGVuZHMgaGVyZS4gKi8KKyBhc20gKCJcbi8qQEhFQURFUl9FTkRTKi8iKTsKKyAKK2RpZmYgLXVyTiBnbGliYy0yLjkub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L3N5c2RlcC5oIGdsaWJjLTIuOS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L3N5c2RlcC5oCistLS0gZ2xpYmMtMi45Lm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaAkyMDA5LTEyLTA4IDIxOjEwOjIwLjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuOS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L3N5c2RlcC5oCTIwMTAtMTItMzAgMTE6MzM6MzEuNTIwODU1NTk1ICswMTAwCitAQCAtMjksNiArMjksMTAgQEAKKyAjaW5jbHVkZSA8ZGwtc3lzZGVwLmg+CisgI2luY2x1ZGUgPHRscy5oPgorIAorKyNpZiBkZWZpbmVkIF9faTY4NiAmJiBkZWZpbmVkIF9fQVNTRU1CTEVSX18KKysjdW5kZWYgX19pNjg2CisrI2RlZmluZSBfX2k2ODYgX19pNjg2CisrI2VuZGlmCisgCisgLyogRm9yIExpbnV4IHdlIGNhbiB1c2UgdGhlIHN5c3RlbSBjYWxsIHRhYmxlIGluIHRoZSBoZWFkZXIgZmlsZQorIAkvdXNyL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvMi45LzkxMC10eXBlZGVmLWNhZGRyLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS85MTAtdHlwZWRlZi1jYWRkci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDc1Yzc0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjLzIuOS85MTAtdHlwZWRlZi1jYWRkci5wYXRjaApAQCAtMCwwICsxLDI4IEBACitkaWZmIC11ck4gZ2xpYmMtMi45LW9yaWcvcG9zaXgvc3lzL3R5cGVzLmggZ2xpYmMtMi45L3Bvc2l4L3N5cy90eXBlcy5oCistLS0gZ2xpYmMtMi45LW9yaWcvcG9zaXgvc3lzL3R5cGVzLmgJMjAxMC0xMi0xMyAxMTo0NzoyNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjkvcG9zaXgvc3lzL3R5cGVzLmgJMjAxMS0wMy0yOSAxNDoxNjowMC4zNzQwNjQ3MDggKzAyMDAKK0BAIC0xMTQsNyArMTE0LDEwIEBACisgI2lmZGVmCV9fVVNFX0JTRAorICMgaWZuZGVmIF9fZGFkZHJfdF9kZWZpbmVkCisgdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKKysjICBpZiAhIGRlZmluZWQoY2FkZHJfdCkgJiYgISBkZWZpbmVkKF9fY2FkZHJfdF9kZWZpbmVkKQorIHR5cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CisrIyAgIGRlZmluZSBfX2NhZGRyX3RfZGVmaW5lZAorKyMgIGVuZGlmCisgIyAgZGVmaW5lIF9fZGFkZHJfdF9kZWZpbmVkCisgIyBlbmRpZgorICNlbmRpZgorZGlmZiAtdXJOIGdsaWJjLTIuOS1vcmlnL3N1bnJwYy9ycGMvdHlwZXMuaCBnbGliYy0yLjkvc3VucnBjL3JwYy90eXBlcy5oCistLS0gZ2xpYmMtMi45LW9yaWcvc3VucnBjL3JwYy90eXBlcy5oCTIwMTAtMTItMTMgMTE6NDc6MjYuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi45L3N1bnJwYy9ycGMvdHlwZXMuaAkyMDExLTAzLTI5IDE0OjE2OjMyLjk4ODkxMDQzOSArMDIwMAorQEAgLTgwLDcgKzgwLDEwIEBACisgI2VuZGlmCisgI2lmbmRlZiBfX2RhZGRyX3RfZGVmaW5lZAorIHR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CisrIyBpZiAhIGRlZmluZWQoY2FkZHJfdCkgJiYgISBkZWZpbmVkKF9fY2FkZHJfdF9kZWZpbmVkKQorIHR5cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CisrIyAgZGVmaW5lIF9fY2FkZHJfdF9kZWZpbmVkCisrIyBlbmRpZgorICMgZGVmaW5lIF9fZGFkZHJfdF9kZWZpbmVkCisgI2VuZGlmCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvbGludXh0aHJlYWRzLTIuMy42LzEwMC1jeWd3aW4ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvbGludXh0aHJlYWRzLTIuMy42LzEwMC1jeWd3aW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMwZGFjMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9saW51eHRocmVhZHMtMi4zLjYvMTAwLWN5Z3dpbi5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGaXhlcworZWxmL2xpYnJ0bGQub3M6IEluIGZ1bmN0aW9uIGBwcm9jZXNzX2VudnZhcnMnOiA6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fYWNjZXNzJworLi4uCit3aGVuIGJ1aWxkaW5nIGdsaWJjLTIuMy4zIG9uIGN5Z3dpbgorCitJZGVhIGZyb20KK2h0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vbWwvYnVnLWdsaWJjLzIwMDItMDEvbXNnMDAwNzEvZ2xpYmMtMi4yLWN5Z2luLXNoYXJlZC5wYXRjaAorQmFzaWNhbGx5LCBtYWtlIGdsaWJjIHVzZSAub1NUIGFzIHN1ZmZpeCBmb3IgJ29iamVjdCBzdGF0aWMnCitpbnN0ZWFkIG9mIC5vUywgc2luY2UgY3lnd2luIGhhcyB0cm91YmxlIGRpc3Rpbmd1aXNoaW5nIC5vcyBmcm9tIC5vUworKE9yaWdpbmFsIHBhdGNoIGhhZCAub24sIGJ1dCAub1NUIGlzIG1vcmUgbW5lbW9uaWMgZm9yICdvYmplY3Qgc3RhdGljJykKKworZ2xpYmMtbGludXh0aHJlYWRzLTIuMy4zIGFsc28gcmVxdWlyZXMgYSBwYXRjaCwgc2VlIAorLi4vZ2xpYmMtbGludXh0aHJlYWRzLTIuMy4zL2dsaWJjLWxpbnV4dGhyZWFkcy0yLjMuMy1jeWd3aW4ucGF0Y2gKKworWyByZWRpZmZlZCBhZ2FpbnN0IGdsaWJjLTIuMy41IF0KKworZGlmZiAtYXVyIGdsaWJjLTIuMy41L2xpbnV4dGhyZWFkcy9NYWtlZmlsZSBnbGliYy0yLjMuNS1jeWd3aW4vbGludXh0aHJlYWRzL01ha2VmaWxlCistLS0gZ2xpYmMtMi4zLjUvbGludXh0aHJlYWRzL01ha2VmaWxlCTIwMDUtMDItMTYgMTI6MjY6MzguMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4zLjUtY3lnd2luL2xpbnV4dGhyZWFkcy9NYWtlZmlsZQkyMDA1LTA1LTExIDA4OjMyOjUwLjQ1MzEyNTAwMCArMDIwMAorQEAgLTE1OSw3ICsxNTksNyBAQAorIGluc3RhbGw6ICQoaW5zdF9saWJkaXIpL2xpYnB0aHJlYWQuc28KKyAkKGluc3RfbGliZGlyKS9saWJwdGhyZWFkLnNvOiAkKGNvbW1vbi1vYmpwZngpZm9ybWF0LmxkcyBcCisgCQkJICAgICAgJChvYmpwZngpbGlicHRocmVhZC5zbyQobGlicHRocmVhZC5zby12ZXJzaW9uKSBcCistCQkJICAgICAgJChpbnN0X2xpYmRpcikvJChwYXRzdWJzdCAlLCQobGlidHlwZS5vUyksXAorKwkJCSAgICAgICQoaW5zdF9saWJkaXIpLyQocGF0c3Vic3QgJSwkKGxpYnR5cGUub1NUKSxcCisgCQkJCQkJCSQobGlicHJlZml4KXB0aHJlYWQpIFwKKyAJCQkgICAgICAkKCtmb3JjZSkKKyAJKGVjaG8gJy8qIEdOVSBsZCBzY3JpcHQnO1wKK0BAIC0xNjcsNyArMTY3LDcgQEAKKyAJIGVjaG8gJyAgIHRoZSBzdGF0aWMgbGlicmFyeSwgc28gdHJ5IHRoYXQgc2Vjb25kYXJpbHkuICAqLyc7XAorIAkgY2F0ICQ8OyBcCisgCSBlY2hvICdHUk9VUCAoICQoc2xpYmRpcikvbGlicHRocmVhZC5zbyQobGlicHRocmVhZC5zby12ZXJzaW9uKScgXAorLQkgICAgICAnJChsaWJkaXIpLyQocGF0c3Vic3QgJSwkKGxpYnR5cGUub1MpLCQobGlicHJlZml4KXB0aHJlYWQpJ1wKKysJICAgICAgJyQobGliZGlyKS8kKHBhdHN1YnN0ICUsJChsaWJ0eXBlLm9TVCksJChsaWJwcmVmaXgpcHRocmVhZCknXAorIAkgICAgICAnKScgXAorIAkpID4gJEAubmV3CisgCW12IC1mICRALm5ldyAkQApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL2xpbnV4dGhyZWFkcy0yLjMuNi8xMTAtYWxwaGEtY2ZpLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL2xpbnV4dGhyZWFkcy0yLjMuNi8xMTAtYWxwaGEtY2ZpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YzE1MmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvbGludXh0aHJlYWRzLTIuMy42LzExMC1hbHBoYS1jZmkucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorLS0tIGdsaWJjLTIuMy42L2xpbnV4dGhyZWFkcy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXNkZXAtY2FuY2VsLmgub3JpZwkyMDA4LTA2LTE5IDE1OjMxOjQ1LjAwMDAwMDAwMCArMDMwMAorKysrIGdsaWJjLTIuMy42L2xpbnV4dGhyZWFkcy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXNkZXAtY2FuY2VsLmgJMjAwOC0wNi0xOSAxNTozNjoxMC4wMDAwMDAwMDAgKzAzMDAKK0BAIC01NCw2ICs1NCw3IEBACisgCWJuZQlhMywgU1lTQ0FMTF9FUlJPUl9MQUJFTDsJCQlcCisgX19MQUJFTCgkcHNldWRvX3JldCkJCQkJCQlcCisgCS5zdWJzZWN0aW9uIDI7CQkJCQkJXAorKwljZmlfc3RhcnRwcm9jOwkJCQkJCVwKKyBfX0xBQkVMKCRwc2V1ZG9fY2FuY2VsKQkJCQkJCVwKKyAJc3VicQlzcCwgNjQsIHNwOwkJCQkJXAorIAljZmlfZGVmX2NmYV9vZmZzZXQoNjQpOwkJCQkJXAorQEAgLTg0LDEyICs4NSwxMyBAQAorIAljZmlfZGVmX2NmYV9vZmZzZXQoMCk7CQkJCQlcCisgX19MQUJFTCgkc3lzY2FsbF9lcnJvcikJCQkJCQlcCisgCVNZU0NBTExfRVJST1JfSEFORExFUjsJCQkJCVwKKysJY2ZpX2VuZHByb2M7CQkJCQkJXAorIAkucHJldmlvdXMKKyAKKyAjIHVuZGVmIFBTRVVET19FTkQKKyAjIGRlZmluZSBQU0VVRE9fRU5EKHN5bSkJCQkJCVwKKy0JLnN1YnNlY3Rpb24gMjsJCQkJCQlcCisgCWNmaV9lbmRwcm9jOwkJCQkJCVwKKysJLnN1YnNlY3Rpb24gMjsJCQkJCQlcCisgCS5zaXplIHN5bSwgLi1zeW0KKyAKKyAjIGRlZmluZSBTQVZFX0FSR1NfMAkvKiBOb3RoaW5nLiAgKi8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMTAwLXJlc3BlY3QtZW52LUNQUEZMQUdTLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8xMDAtcmVzcGVjdC1lbnYtQ1BQRkxBR1MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUyM2FlMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMTAwLXJlc3BlY3QtZW52LUNQUEZMQUdTLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1Jlc3BlY3QgZW52aXJvbm1lbnQgQ1BQRkxBR1Mgd2hlbiB3ZSBydW4gLi9jb25maWd1cmUgc28gd2UgY2FuIGluamVjdAorcmFuZG9tIC1EIHRoaW5ncyB3aXRob3V0IGhhdmluZyB0byBzZXQgQ0ZMQUdTL0FTRkxBR1MKKworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9NYWtlY29uZmlnIGdsaWJjLTIuMTAuMS9NYWtlY29uZmlnCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvTWFrZWNvbmZpZwkyMDA5LTA1LTA5IDIzOjU3OjU2LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9NYWtlY29uZmlnCTIwMDktMTEtMTMgMDA6NDk6NDEuMDAwMDAwMDAwICswMTAwCitAQCAtNjcyLDYgKzY3Miw3IEBACisgCSAgICQoZm9yZWFjaCBsaWIsJChsaWJvZi0kKGJhc2VuYW1lICQoQEYpKSkgXAorIAkJICAgICAgICAgJChsaWJvZi0kKDxGKSkgJChsaWJvZi0kKEBGKSksJChDUFBGTEFHUy0kKGxpYikpKSBcCisgCSAgICQoQ1BQRkxBR1MtJCg8RikpICQoQ1BQRkxBR1MtJChARikpICQoQ1BQRkxBR1MtJChiYXNlbmFtZSAkKEBGKSkpCisrQ1BQRkxBR1MgKz0gJChDUFBGTEFHUy1jb25maWcpCisgb3ZlcnJpZGUgQ0ZMQUdTCT0gLXN0ZD1nbnU5OSAkKGdudTg5LWlubGluZS1DRkxBR1MpIFwKKyAJCSAgJChmaWx0ZXItb3V0ICVmcmFtZS1wb2ludGVyLCQoK2NmbGFncykpICQoK2djY3dhcm4tYykgXAorIAkJICAkKHN5c2RlcC1DRkxBR1MpICQoQ0ZMQUdTLSQoc3VmZml4ICRAKSkgJChDRkxBR1MtJCg8RikpIFwKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvY29uZmlnLm1ha2UuaW4gZ2xpYmMtMi4xMC4xL2NvbmZpZy5tYWtlLmluCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvY29uZmlnLm1ha2UuaW4JMjAwOS0wNS0wOSAxNzo1OTozOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvY29uZmlnLm1ha2UuaW4JMjAwOS0xMS0xMyAwMDo0OTo0MS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMDMsNiArMTAzLDcgQEAKKyBDWFggPSBAQ1hYQAorIEJVSUxEX0NDID0gQEJVSUxEX0NDQAorIENGTEFHUyA9IEBDRkxBR1NACisrQ1BQRkxBR1MtY29uZmlnID0gQENQUEZMQUdTQAorIEFTRkxBR1MtY29uZmlnID0gQEFTRkxBR1NfY29uZmlnQAorIEFSID0gQEFSQAorIFJBTkxJQiA9IEBSQU5MSUJACmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzExMC1iaW51dGlscy0yLjIwLWNvbXBhdC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMTEwLWJpbnV0aWxzLTIuMjAtY29tcGF0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyODE2NTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzExMC1iaW51dGlscy0yLjIwLWNvbXBhdC5wYXRjaApAQCAtMCwwICsxLDM5IEBACisKKworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9jb25maWd1cmUgZ2xpYmMtMi4xMC4xL2NvbmZpZ3VyZQorLS0tIGdsaWJjLTIuMTAuMS5vcmlnL2NvbmZpZ3VyZQkyMDA5LTA1LTE3IDE0OjE5OjMxLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9jb25maWd1cmUJMjAwOS0xMS0xMyAwMDo0OTo0My4wMDAwMDAwMDAgKzAxMDAKK0BAIC00ODM5LDcgKzQ4MzksNyBAQAorICAgYWNfcHJvZ192ZXJzaW9uPWAkQVMgLS12ZXJzaW9uIDI+JjEgfCBzZWQgLW4gJ3MvXi4qR05VIGFzc2VtYmxlci4qIFwoWzAtOV0qXC5bMC05Ll0qXCkuKiQvXDEvcCdgCisgICBjYXNlICRhY19wcm9nX3ZlcnNpb24gaW4KKyAgICAgJycpIGFjX3Byb2dfdmVyc2lvbj0idi4gPy4/PywgYmFkIjsgYWNfdmVyY19mYWlsPXllczs7CistICAgIDIuMVszLTldKikKKysgICAgMi4xWzMtOV0qfFsyLTldLlsyLTldKikKKyAgICAgICAgYWNfcHJvZ192ZXJzaW9uPSIkYWNfcHJvZ192ZXJzaW9uLCBvayI7IGFjX3ZlcmNfZmFpbD1ubzs7CisgICAgICopIGFjX3Byb2dfdmVyc2lvbj0iJGFjX3Byb2dfdmVyc2lvbiwgYmFkIjsgYWNfdmVyY19mYWlsPXllczs7CisgCitAQCAtNDkwMiw3ICs0OTAyLDcgQEAKKyAgIGFjX3Byb2dfdmVyc2lvbj1gJExEIC0tdmVyc2lvbiAyPiYxIHwgc2VkIC1uICdzL14uKkdOVSBsZC4qIFwoWzAtOV1bMC05XSpcLlswLTkuXSpcKS4qJC9cMS9wJ2AKKyAgIGNhc2UgJGFjX3Byb2dfdmVyc2lvbiBpbgorICAgICAnJykgYWNfcHJvZ192ZXJzaW9uPSJ2LiA/Lj8/LCBiYWQiOyBhY192ZXJjX2ZhaWw9eWVzOzsKKy0gICAgMi4xWzMtOV0qKQorKyAgICAyLjFbMy05XSp8WzItOV0uWzItOV0qKQorICAgICAgICBhY19wcm9nX3ZlcnNpb249IiRhY19wcm9nX3ZlcnNpb24sIG9rIjsgYWNfdmVyY19mYWlsPW5vOzsKKyAgICAgKikgYWNfcHJvZ192ZXJzaW9uPSIkYWNfcHJvZ192ZXJzaW9uLCBiYWQiOyBhY192ZXJjX2ZhaWw9eWVzOzsKKyAKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvY29uZmlndXJlLmluIGdsaWJjLTIuMTAuMS9jb25maWd1cmUuaW4KKy0tLSBnbGliYy0yLjEwLjEub3JpZy9jb25maWd1cmUuaW4JMjAwOS0wNC0wNCAwMTo1MTo0Ny4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvY29uZmlndXJlLmluCTIwMDktMTEtMTMgMDA6NDk6NDMuMDAwMDAwMDAwICswMTAwCitAQCAtODk3LDEwICs4OTcsMTAgQEAKKyAjIEFjY2VwdCBiaW51dGlscyAyLjEzIG9yIG5ld2VyLgorIEFDX0NIRUNLX1BST0dfVkVSKEFTLCAkQVMsIC0tdmVyc2lvbiwKKyAJCSAgW0dOVSBhc3NlbWJsZXIuKiBcKFswLTldKlwuWzAtOS5dKlwpXSwKKy0JCSAgWzIuMVszLTldKl0sIEFTPTogY3JpdGljX21pc3Npbmc9IiRjcml0aWNfbWlzc2luZyBhcyIpCisrCQkgIFsyLjFbMy05XSp8WzItOV0uWzItOV0qXSwgQVM9OiBjcml0aWNfbWlzc2luZz0iJGNyaXRpY19taXNzaW5nIGFzIikKKyBBQ19DSEVDS19QUk9HX1ZFUihMRCwgJExELCAtLXZlcnNpb24sCisgCQkgIFtHTlUgbGQuKiBcKFswLTldWzAtOV0qXC5bMC05Ll0qXCldLAorLQkJICBbMi4xWzMtOV0qXSwgTEQ9OiBjcml0aWNfbWlzc2luZz0iJGNyaXRpY19taXNzaW5nIGxkIikKKysJCSAgWzIuMVszLTldKnxbMi05XS5bMi05XSpdLCBMRD06IGNyaXRpY19taXNzaW5nPSIkY3JpdGljX21pc3NpbmcgbGQiKQorIAorICMgV2UgbmVlZCB0aGUgcGh5c2ljYWwgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gIFdlIGNhbm5vdCB1c2UgdGhlCisgIyAicHdkIC1QIiBzaGVsbCBidWlsdGluIHNpbmNlIHRoYXQncyBub3QgcG9ydGFibGUuICBJbnN0ZWFkIHdlIHRyeSB0bwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8xMjAtaTM4Ni14ODZfNjQtcmV2ZXJ0LWNsb25lLWNmaS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMTIwLWkzODYteDg2XzY0LXJldmVydC1jbG9uZS1jZmkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM1MWI4MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMTIwLWkzODYteDg2XzY0LXJldmVydC1jbG9uZS1jZmkucGF0Y2gKQEAgLTAsMCArMSw1NSBAQAorcmV2ZXJ0IGNmaSBhZGRpdGlvbnMgdG8gY2xvbmUgb24gaTM4Ni94ODZfNjQgdG8gd29ya2Fyb3VuZCBwcm9ibGVtcyBpbgorZ2NjJ3MgdW53aW5kZXIgY29kZS4gIHRoaXMgaXMgbm90IGEgYnVnIGluIGdsaWJjLCBpdCB0cmlnZ2VycyBwcm9ibGVtcworZWxzZXdoZXJlLiAgdGhpcyBjZmkgY29kZSBkb2VzIG5vdCBnYWluIHVzIGEgd2hvbGUgbG90IGFueXdheXMuCisKK2h0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MvMjAwNi0xMi9tc2cwMDI5My5odG1sCisKK0luZGV4OiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L2Nsb25lLlMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JDUyBmaWxlOiAvY3ZzL2dsaWJjL2xpYmMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9jbG9uZS5TLHYKK3JldHJpZXZpbmcgcmV2aXNpb24gMS4yNworcmV0cmlldmluZyByZXZpc2lvbiAxLjI2CitkaWZmIC11IC1wIC1yMS4yNyAtcjEuMjYKKworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L2Nsb25lLlMgZ2xpYmMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvY2xvbmUuUworLS0tIGdsaWJjLTIuMTAuMS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvY2xvbmUuUwkyMDA2LTEyLTA0IDAwOjEyOjM2LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L2Nsb25lLlMJMjAwOS0xMS0xMyAwMDo0OTo0NS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMjAsOSArMTIwLDYgQEAKKyAJcmV0CisgCisgTCh0aHJlYWRfc3RhcnQpOgorLQljZmlfc3RhcnRwcm9jOworLQkvKiBDbGVhcmluZyBmcmFtZSBwb2ludGVyIGlzIGluc3VmZmljaWVudCwgdXNlIENGSS4gICovCistCWNmaV91bmRlZmluZWQgKGVpcCk7CisgCS8qIE5vdGU6ICVlc2kgaXMgemVyby4gICovCisgCW1vdmwJJWVzaSwlZWJwCS8qIHRlcm1pbmF0ZSB0aGUgc3RhY2sgZnJhbWUgKi8KKyAjaWZkZWYgUkVTRVRfUElECitAQCAtMTU1LDcgKzE1Miw2IEBACisgCWptcAlMKGhhc3BpZCkKKyAJLnByZXZpb3VzCisgI2VuZGlmCistCWNmaV9lbmRwcm9jOworIAorIAljZmlfc3RhcnRwcm9jCisgUFNFVURPX0VORCAoQlBfU1lNIChfX2Nsb25lKSkKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgveDg2XzY0L2Nsb25lLlMgZ2xpYmMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3g4Nl82NC9jbG9uZS5TCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgveDg2XzY0L2Nsb25lLlMJMjAwNi0xMi0wNCAwMDoxMjozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgveDg2XzY0L2Nsb25lLlMJMjAwOS0xMS0xMyAwMDo0OTo0NS4wMDAwMDAwMDAgKzAxMDAKK0BAIC04OSw5ICs4OSw2IEBACisgCXJldAorIAorIEwodGhyZWFkX3N0YXJ0KToKKy0JY2ZpX3N0YXJ0cHJvYzsKKy0JLyogQ2xlYXJpbmcgZnJhbWUgcG9pbnRlciBpcyBpbnN1ZmZpY2llbnQsIHVzZSBDRkkuICAqLworLQljZmlfdW5kZWZpbmVkIChyaXApOworIAkvKiBDbGVhciB0aGUgZnJhbWUgcG9pbnRlci4gIFRoZSBBQkkgc3VnZ2VzdHMgdGhpcyBiZSBkb25lLCB0byBtYXJrCisgCSAgIHRoZSBvdXRlcm1vc3QgZnJhbWUgb2J2aW91c2x5LiAgKi8KKyAJeG9ybAklZWJwLCAlZWJwCitAQCAtMTE2LDcgKzExMyw2IEBACisgCS8qIENhbGwgZXhpdCB3aXRoIHJldHVybiB2YWx1ZSBmcm9tIGZ1bmN0aW9uIGNhbGwuICovCisgCW1vdnEJJXJheCwgJXJkaQorIAljYWxsCUhJRERFTl9KVU1QVEFSR0VUIChfZXhpdCkKKy0JY2ZpX2VuZHByb2M7CisgCisgCWNmaV9zdGFydHByb2M7CisgUFNFVURPX0VORCAoQlBfU1lNIChfX2Nsb25lKSkKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMTMwLWkzODYtbm8tZmFsbG9jYXRlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8xMzAtaTM4Ni1uby1mYWxsb2NhdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk3MzYyZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMTMwLWkzODYtbm8tZmFsbG9jYXRlLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK0ZpeCBidWlsZGluZyBvbiB4ODYgd2hlbiBvbGRlciBsaW51eCBoZWFkZXJzIGxhY2sgX19OUl9mYWxsb2NhdGUgZGVmaW5lLgorCitVUkw6IGh0dHA6Ly9idWdzLmdlbnRvby5vcmcvMjc0MjY5CitSZXBvcnRlZC1ieTogTWlrYWVsIE1hZ251c3NvbiA8bWlrYWNodUBnbWFpbC5jb20+CisKKzIwMDktMTEtMDkgIE1pa2UgRnJ5c2luZ2VyICA8dmFwaWVyQGdlbnRvby5vcmc+CisKKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvZmFsbG9jYXRlLmM6IEluY2x1ZGUgZXJybm8uaC4KKwkoZmFsbG9jYXRlKTogUmV0dXJuIEVOT1NZUyBpZiBfX05SX2ZhbGxvY2F0ZSBpcyBub3QgZGVmaW5lZC4KKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvZmFsbG9jYXRlNjQuYzogTGlrZXdpc2UuCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9mYWxsb2NhdGUuYyBnbGliYy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9mYWxsb2NhdGUuYworLS0tIGdsaWJjLTIuMTAuMS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvZmFsbG9jYXRlLmMJMjAwOS0wMy0wMiAxNzoxMTowNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9mYWxsb2NhdGUuYwkyMDA5LTExLTEzIDAwOjQ5OjQ3LjAwMDAwMDAwMCArMDEwMAorQEAgLTE2LDYgKzE2LDcgQEAKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKyAKKysjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8c3lzZGVwLmg+CisgCitAQCAtMjgsNSArMjksMTAgQEAKKyBpbnQKKyBmYWxsb2NhdGUgKGludCBmZCwgaW50IG1vZGUsIF9fb2ZmX3Qgb2Zmc2V0LCBfX29mZl90IGxlbikKKyB7CisrI2lmZGVmIF9fTlJfZmFsbG9jYXRlCisgICByZXR1cm4gX19jYWxsX2ZhbGxvY2F0ZSAoZmQsIG1vZGUsIG9mZnNldCwgbGVuKTsKKysjZWxzZQorKyAgX19zZXRfZXJybm8gKEVOT1NZUyk7CisrICByZXR1cm4gLTE7CisrI2VuZGlmCisgfQorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L2ZhbGxvY2F0ZTY0LmMgZ2xpYmMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvZmFsbG9jYXRlNjQuYworLS0tIGdsaWJjLTIuMTAuMS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvZmFsbG9jYXRlNjQuYwkyMDA5LTAzLTAyIDE3OjEwOjI5LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L2ZhbGxvY2F0ZTY0LmMJMjAwOS0xMS0xMyAwMDo0OTo0Ny4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNiw2ICsxNiw3IEBACisgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgICAwMjExMS0xMzA3IFVTQS4gICovCisgCisrI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPHN5c2RlcC5oPgorIAorQEAgLTI4LDUgKzI5LDEwIEBACisgaW50CisgX19mYWxsb2NhdGU2NF9sNjQgKGludCBmZCwgaW50IG1vZGUsIF9fb2ZmNjRfdCBvZmZzZXQsIF9fb2ZmNjRfdCBsZW4pCisgeworKyNpZmRlZiBfX05SX2ZhbGxvY2F0ZQorICAgcmV0dXJuIF9fY2FsbF9mYWxsb2NhdGUgKGZkLCBtb2RlLCBvZmZzZXQsIGxlbik7CisrI2Vsc2UKKysgIF9fc2V0X2Vycm5vIChFTk9TWVMpOworKyAgcmV0dXJuIC0xOworKyNlbmRpZgorIH0KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMTQwLWRpc2FibGUtbGRjb25maWcucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzE0MC1kaXNhYmxlLWxkY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMmRkMTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzE0MC1kaXNhYmxlLWxkY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKK2RvIG5vdCBib3RoZXIgcnVubmluZyBsZGNvbmZpZyBvbiBERVNURElSLiAgaXQgd2FudHMgdG8gd3JpdGUgdGhlIHRlbXAgY2FjaGUKK2ZpbGUgb3V0c2lkZSBvZiB0aGUgY2hyb290LiAgZG9lc250IG1hdHRlciBhbnl3YXlzIGFzIHdlIHdvbnQgdXNlIHRoZSBjYWNoZQorcmVzdWx0cyAocG9ydGFnZSB3aWxsIHJlYnVpbGQgY2FjaGUpLCBzbyBydW5uaW5nIGxkY29uZmlnIGlzIHNpbXBseSBhIHdhc3RlCitvZiB0aW1lLgorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL01ha2VmaWxlIGdsaWJjLTIuMTAuMS9NYWtlZmlsZQorLS0tIGdsaWJjLTIuMTAuMS5vcmlnL01ha2VmaWxlCTIwMDktMDQtMjMgMjA6MjM6MDMuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL01ha2VmaWxlCTIwMDktMTEtMTMgMDA6NDk6NDkuMDAwMDAwMDAwICswMTAwCitAQCAtMTE2LDYgKzExNiw3IEBACisgCXJtIC1mICQoc3ltYm9saWMtbGluay1saXN0KQorIAorIGluc3RhbGw6CisrZG9udC1ib3RoZXItd2l0aC1kZXN0ZGlyOgorIAktdGVzdCAhIC14ICQoY29tbW9uLW9ianBmeCllbGYvbGRjb25maWcgfHwgTENfQUxMPUMgTEFOR1VBR0U9QyBcCisgCSAgJChjb21tb24tb2JqcGZ4KWVsZi9sZGNvbmZpZyAkKGFkZHByZWZpeCAtciAsJChpbnN0YWxsX3Jvb3QpKSBcCisgCQkJCSAgICAgICAkKHNsaWJkaXIpICQobGliZGlyKQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8xNTAtcXVldWUtaGVhZGVyLXVwZGF0ZXMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzE1MC1xdWV1ZS1oZWFkZXItdXBkYXRlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDAwMDdkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8xNTAtcXVldWUtaGVhZGVyLXVwZGF0ZXMucGF0Y2gKQEAgLTAsMCArMSw4NSBAQAorZ3JhYiBzb21lIHVwZGF0ZXMgZnJvbSBGcmVlQlNECisKK2h0dHA6Ly9idWdzLmdlbnRvby5vcmcvMjAxOTc5CisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvbWlzYy9zeXMvcXVldWUuaCBnbGliYy0yLjEwLjEvbWlzYy9zeXMvcXVldWUuaAorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL21pc2Mvc3lzL3F1ZXVlLmggZ2xpYmMtMi4xMC4xL21pc2Mvc3lzL3F1ZXVlLmgKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9taXNjL3N5cy9xdWV1ZS5oCTIwMDgtMDMtMDUgMDY6NTA6MzAuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMC4xL21pc2Mvc3lzL3F1ZXVlLmgJMjAwOS0xMS0xMyAwMDo0OTo1MS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMzYsNiArMTM2LDExIEBACisgCQkodmFyKTsJCQkJCQkJXAorIAkJKHZhcikgPSAoKHZhciktPmZpZWxkLmxlX25leHQpKQorIAorKyNkZWZpbmUJTElTVF9GT1JFQUNIX1NBRkUodmFyLCBoZWFkLCBmaWVsZCwgdHZhcikJCQlcCisrCWZvciAoKHZhcikgPSBMSVNUX0ZJUlNUKChoZWFkKSk7CQkJCVwKKysJICAgICh2YXIpICYmICgodHZhcikgPSBMSVNUX05FWFQoKHZhciksIGZpZWxkKSwgMSk7CQlcCisrCSAgICAodmFyKSA9ICh0dmFyKSkKKysKKyAvKgorICAqIExpc3QgYWNjZXNzIG1ldGhvZHMuCisgICovCitAQCAtMTk3LDYgKzIwMiwxNiBAQAorICNkZWZpbmUJU0xJU1RfRk9SRUFDSCh2YXIsIGhlYWQsIGZpZWxkKQkJCQkJXAorIAlmb3IoKHZhcikgPSAoaGVhZCktPnNsaF9maXJzdDsgKHZhcik7ICh2YXIpID0gKHZhciktPmZpZWxkLnNsZV9uZXh0KQorIAorKyNkZWZpbmUJU0xJU1RfRk9SRUFDSF9TQUZFKHZhciwgaGVhZCwgZmllbGQsIHR2YXIpCQkJXAorKwlmb3IgKCh2YXIpID0gU0xJU1RfRklSU1QoKGhlYWQpKTsJCQkJXAorKwkgICAgKHZhcikgJiYgKCh0dmFyKSA9IFNMSVNUX05FWFQoKHZhciksIGZpZWxkKSwgMSk7CQlcCisrCSAgICAodmFyKSA9ICh0dmFyKSkKKysKKysjZGVmaW5lCVNMSVNUX0ZPUkVBQ0hfUFJFVlBUUih2YXIsIHZhcnAsIGhlYWQsIGZpZWxkKQkJCVwKKysJZm9yICgodmFycCkgPSAmU0xJU1RfRklSU1QoKGhlYWQpKTsJCQkJXAorKwkgICAgKCh2YXIpID0gKih2YXJwKSkgIT0gTlVMTDsJCQkJCVwKKysJICAgICh2YXJwKSA9ICZTTElTVF9ORVhUKCh2YXIpLCBmaWVsZCkpCisrCisgLyoKKyAgKiBTaW5nbHktbGlua2VkIExpc3QgYWNjZXNzIG1ldGhvZHMuCisgICovCitAQCAtMjQyLDYgKzI1NywxMiBAQAorIAkoaGVhZCktPnN0cWhfbGFzdCA9ICYoZWxtKS0+ZmllbGQuc3RxZV9uZXh0OwkJCVwKKyB9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKyAKKysjZGVmaW5lCVNUQUlMUV9MQVNUKGhlYWQsIHR5cGUsIGZpZWxkKQkJCQkJXAorKwkoU1RBSUxRX0VNUFRZKChoZWFkKSkgPwkJCQkJCVwKKysJCU5VTEwgOgkJCQkJCQlcCisrCSAgICAgICAgKChzdHJ1Y3QgdHlwZSAqKSh2b2lkICopCQkJCVwKKysJCSgoY2hhciAqKSgoaGVhZCktPnN0cWhfbGFzdCkgLSBfX29mZnNldG9mKHN0cnVjdCB0eXBlLCBmaWVsZCkpKSkKKysKKyAjZGVmaW5lCVNUQUlMUV9JTlNFUlRfQUZURVIoaGVhZCwgbGlzdGVsbSwgZWxtLCBmaWVsZCkgZG8gewkJXAorIAlpZiAoKChlbG0pLT5maWVsZC5zdHFlX25leHQgPSAobGlzdGVsbSktPmZpZWxkLnN0cWVfbmV4dCkgPT0gTlVMTClcCisgCQkoaGVhZCktPnN0cWhfbGFzdCA9ICYoZWxtKS0+ZmllbGQuc3RxZV9uZXh0OwkJXAorQEAgLTI3MSw2ICsyOTIsMTEgQEAKKyAJCSh2YXIpOwkJCQkJCQlcCisgCQkodmFyKSA9ICgodmFyKS0+ZmllbGQuc3RxZV9uZXh0KSkKKyAKKysjZGVmaW5lIFNUQUlMUV9GT1JFQUNIX1NBRkUodmFyLCBoZWFkLCBmaWVsZCwgdHZhcikJCQlcCisrCWZvciAoKHZhcikgPSBTVEFJTFFfRklSU1QoKGhlYWQpKTsJCQkJXAorKwkJKHZhcikgJiYgKCh0dmFyKSA9IFNUQUlMUV9ORVhUKCh2YXIpLCBmaWVsZCksIDEpOwlcCisrCQkodmFyKSA9ICh0dmFyKSkKKysKKyAjZGVmaW5lCVNUQUlMUV9DT05DQVQoaGVhZDEsIGhlYWQyKSBkbyB7CQkJCVwKKyAJaWYgKCFTVEFJTFFfRU1QVFkoKGhlYWQyKSkpIHsJCQkJCVwKKyAJCSooaGVhZDEpLT5zdHFoX2xhc3QgPSAoaGVhZDIpLT5zdHFoX2ZpcnN0OwkJXAorQEAgLTQzNywxMSArNDYzLDIxIEBACisgCQkodmFyKTsJCQkJCQkJXAorIAkJKHZhcikgPSAoKHZhciktPmZpZWxkLnRxZV9uZXh0KSkKKyAKKysjZGVmaW5lIFRBSUxRX0ZPUkVBQ0hfU0FGRSh2YXIsIGhlYWQsIGZpZWxkLCB0dmFyKQkJCVwKKysJZm9yICgodmFyKSA9IFRBSUxRX0ZJUlNUKChoZWFkKSk7CQkJCVwKKysJCSh2YXIpICYmICgodHZhcikgPSBUQUlMUV9ORVhUKCh2YXIpLCBmaWVsZCksIDEpOwlcCisrCQkodmFyKSA9ICh0dmFyKSkKKysKKyAjZGVmaW5lCVRBSUxRX0ZPUkVBQ0hfUkVWRVJTRSh2YXIsIGhlYWQsIGhlYWRuYW1lLCBmaWVsZCkJCVwKKyAJZm9yICgodmFyKSA9ICgqKCgoc3RydWN0IGhlYWRuYW1lICopKChoZWFkKS0+dHFoX2xhc3QpKS0+dHFoX2xhc3QpKTsJXAorIAkJKHZhcik7CQkJCQkJCVwKKyAJCSh2YXIpID0gKCooKChzdHJ1Y3QgaGVhZG5hbWUgKikoKHZhciktPmZpZWxkLnRxZV9wcmV2KSktPnRxaF9sYXN0KSkpCisgCisrI2RlZmluZSBUQUlMUV9GT1JFQUNIX1JFVkVSU0VfU0FGRSh2YXIsIGhlYWQsIGhlYWRuYW1lLCBmaWVsZCwgdHZhcikJXAorKwlmb3IgKCh2YXIpID0gVEFJTFFfTEFTVCgoaGVhZCksIGhlYWRuYW1lKTsJCQlcCisrCQkodmFyKSAmJiAoKHR2YXIpID0gVEFJTFFfUFJFVigodmFyKSwgaGVhZG5hbWUsIGZpZWxkKSwgMSk7CVwKKysJCSh2YXIpID0gKHR2YXIpKQorKworICNkZWZpbmUJVEFJTFFfQ09OQ0FUKGhlYWQxLCBoZWFkMiwgZmllbGQpIGRvIHsJCQkJXAorIAlpZiAoIVRBSUxRX0VNUFRZKGhlYWQyKSkgewkJCQkJXAorIAkJKihoZWFkMSktPnRxaF9sYXN0ID0gKGhlYWQyKS0+dHFoX2ZpcnN0OwkJXApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8xNjAtbWFudWFsLW5vLXBlcmwucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzE2MC1tYW51YWwtbm8tcGVybC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGExNzQyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8xNjAtbWFudWFsLW5vLXBlcmwucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorSWYgd2UncmUgdXNpbmcgYSBjdnMgc25hcHNob3Qgd2hpY2ggdXBkYXRlcyB0aGUgc291cmNlIGZpbGVzLCBhbmQKK3BlcmwgaXNuJ3QgaW5zdGFsbGVkIHlldCwgdGhlbiB3ZSBjYW4ndCByZWdlbiB0aGUgZG9jcy4gIE5vdCBhIGJpZworZGVhbCwgc28ganVzdCB3aGluZSBhIGxpdHRsZSBhbmQgY29udGludWUgb24gb3VyIG1lcnJ5IHdheS4KKworaHR0cDovL2J1Z3MuZ2VudG9vLm9yZy82MDEzMgorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL21hbnVhbC9NYWtlZmlsZSBnbGliYy0yLjEwLjEvbWFudWFsL01ha2VmaWxlCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvbWFudWFsL01ha2VmaWxlCTIwMDYtMDEtMDggMDc6NDM6NDcuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMC4xL21hbnVhbC9NYWtlZmlsZQkyMDA5LTExLTEzIDAwOjQ5OjU0LjAwMDAwMDAwMCArMDEwMAorQEAgLTEwNCw5ICsxMDQsMTQgQEAKKyBsaWJtLWVyci50ZXhpOiBzdGFtcC1saWJtLWVycgorIHN0YW1wLWxpYm0tZXJyOiBsaWJtLWVyci10YWIucGwgJCh3aWxkY2FyZCAkKGZvcmVhY2ggZGlyLCQoc3lzZGlycyksXAorIAkJCQkJCSAgICAgJChkaXIpL2xpYm0tdGVzdC11bHBzKSkKKytpZm5lcSAoJChQRVJMKSxubykKKyAJcHdkPWBwd2RgOyBcCisgCSQoUEVSTCkgJDwgJCRwd2QvLi4gPiBsaWJtLWVyci10bXAKKyAJJChtb3ZlLWlmLWNoYW5nZSkgbGlibS1lcnItdG1wIGxpYm0tZXJyLnRleGkKKytlbHNlCisrCWVjaG8gIlVuYWJsZSB0byByZWJ1aWxkIG1hdGggZG9jcywgbm8gcGVybCBpbnN0YWxsZWQiCisrCXRvdWNoIGxpYm0tZXJyLnRleGkKKytlbmRpZgorIAl0b3VjaCAkQAorIAorICMgR2VuZXJhdGUgVGV4aW5mbyBmaWxlcyBmcm9tIHRoZSBDIHNvdXJjZSBmb3IgdGhlIGV4YW1wbGUgcHJvZ3JhbXMuCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzE3MC1sb2NhbGVkZWYtZml4LXRyYW1wb2xpbmUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzE3MC1sb2NhbGVkZWYtZml4LXRyYW1wb2xpbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY3MmM1YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMTcwLWxvY2FsZWRlZi1maXgtdHJhbXBvbGluZS5wYXRjaApAQCAtMCwwICsxLDY5IEBACisjISAvYmluL3NoIC1lCisKKyMgRFA6IERlc2NyaXB0aW9uOiBGaXggbG9jYWxlZGVmIHNlZ2ZhdWx0IHdoZW4gcnVuIHVuZGVyIGV4ZWMtc2hpZWxkLAorIyAgICAgICAgUGFYIG9yIHNpbWlsYXIuICgjMjMxNDM4LCAjMTk4MDk5KQorIyBEUDogRHBhdGNoIEF1dGhvcjogSmFtZXMgVHJvdXAgPGphbWVzQG5vY3Jldy5vcmc+CisjIERQOiBQYXRjaCBBdXRob3I6IChwcm9iYWJseSkgSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4KKyMgRFA6IFVwc3RyZWFtIHN0YXR1czogVW5rbm93bgorIyBEUDogU3RhdHVzIERldGFpbHM6IFVua25vd24KKyMgRFA6IERhdGU6IDIwMDQtMDMtMTYKKworaWYgWyAkIyAtbmUgMiBdOyB0aGVuCisgICAgZWNobyA+JjIgImBiYXNlbmFtZSAkMGA6IHNjcmlwdCBleHBlY3RzIC1wYXRjaHwtdW5wYXRjaCBhcyBhcmd1bWVudCIKKyAgICBleGl0IDEKK2ZpCitjYXNlICIkMSIgaW4KKyAgICAtcGF0Y2gpIHBhdGNoIC1kICIkMiIgLWYgLS1uby1iYWNrdXAtaWYtbWlzbWF0Y2ggLXAxIDwgJDA7OworICAgIC11bnBhdGNoKSBwYXRjaCAtZCAiJDIiIC1mIC0tbm8tYmFja3VwLWlmLW1pc21hdGNoIC1SIC1wMSA8ICQwOzsKKyAgICAqKQorCWVjaG8gPiYyICJgYmFzZW5hbWUgJDBgOiBzY3JpcHQgZXhwZWN0cyAtcGF0Y2h8LXVucGF0Y2ggYXMgYXJndW1lbnQiCisJZXhpdCAxCitlc2FjCitleGl0IDAKKworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9sb2NhbGUvcHJvZ3JhbXMvM2xldmVsLmggZ2xpYmMtMi4xMC4xL2xvY2FsZS9wcm9ncmFtcy8zbGV2ZWwuaAorLS0tIGdsaWJjLTIuMTAuMS5vcmlnL2xvY2FsZS9wcm9ncmFtcy8zbGV2ZWwuaAkyMDA3LTA3LTE2IDAyOjU0OjU5LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9sb2NhbGUvcHJvZ3JhbXMvM2xldmVsLmgJMjAwOS0xMS0xMyAwMDo0OTo1Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMDMsNiArMjAzLDQyIEBACisgCX0KKyAgICAgfQorIH0KKysKKysvKiBHQ0MgQVRNIHNlZW1zIHRvIGRvIGEgcG9vciBqb2Igd2l0aCBwb2ludGVycyB0byBuZXN0ZWQgZnVuY3Rpb25zIHBhc3NlZAorKyAgIHRvIGlubGluZWQgZnVuY3Rpb25zLiAgSGVscCBpdCBhIGxpdHRsZSBiaXQgd2l0aCB0aGlzIGhhY2suICAqLworKyNkZWZpbmUgd2NoZWFkX3RhYmxlX2l0ZXJhdGUodHAsIGZuKSBcCisrZG8JCQkJCQkJCQkgICAgICBcCisrICB7CQkJCQkJCQkJICAgICAgXAorKyAgICBzdHJ1Y3Qgd2NoZWFkX3RhYmxlICp0ID0gKHRwKTsJCQkJCSAgICAgIFwKKysgICAgdWludDMyX3QgaW5kZXgxOwkJCQkJCQkgICAgICBcCisrICAgIGZvciAoaW5kZXgxID0gMDsgaW5kZXgxIDwgdC0+bGV2ZWwxX3NpemU7IGluZGV4MSsrKQkJCSAgICAgIFwKKysgICAgICB7CQkJCQkJCQkJICAgICAgXAorKwl1aW50MzJfdCBsb29rdXAxID0gdC0+bGV2ZWwxW2luZGV4MV07CQkJCSAgICAgIFwKKysJaWYgKGxvb2t1cDEgIT0gKCh1aW50MzJfdCkgfjApKQkJCQkJICAgICAgXAorKwkgIHsJCQkJCQkJCSAgICAgIFwKKysJICAgIHVpbnQzMl90IGxvb2t1cDFfc2hpZnRlZCA9IGxvb2t1cDEgPDwgdC0+cTsJCQkgICAgICBcCisrCSAgICB1aW50MzJfdCBpbmRleDI7CQkJCQkJICAgICAgXAorKwkgICAgZm9yIChpbmRleDIgPSAwOyBpbmRleDIgPCAoMSA8PCB0LT5xKTsgaW5kZXgyKyspCQkgICAgICBcCisrCSAgICAgIHsJCQkJCQkJCSAgICAgIFwKKysJCXVpbnQzMl90IGxvb2t1cDIgPSB0LT5sZXZlbDJbaW5kZXgyICsgbG9va3VwMV9zaGlmdGVkXTsJICAgICAgXAorKwkJaWYgKGxvb2t1cDIgIT0gKCh1aW50MzJfdCkgfjApKQkJCQkgICAgICBcCisrCQkgIHsJCQkJCQkJICAgICAgXAorKwkJICAgIHVpbnQzMl90IGxvb2t1cDJfc2hpZnRlZCA9IGxvb2t1cDIgPDwgdC0+cDsJCSAgICAgIFwKKysJCSAgICB1aW50MzJfdCBpbmRleDM7CQkJCQkgICAgICBcCisrCQkgICAgZm9yIChpbmRleDMgPSAwOyBpbmRleDMgPCAoMSA8PCB0LT5wKTsgaW5kZXgzKyspCSAgICAgIFwKKysJCSAgICAgIHsJCQkJCQkJICAgICAgXAorKwkJCXN0cnVjdCBlbGVtZW50X3QgKmxvb2t1cDMJCQkgICAgICBcCisrCQkJICA9IHQtPmxldmVsM1tpbmRleDMgKyBsb29rdXAyX3NoaWZ0ZWRdOwkgICAgICBcCisrCQkJaWYgKGxvb2t1cDMgIT0gTlVMTCkJCQkJICAgICAgXAorKwkJCSAgZm4gKCgoKGluZGV4MSA8PCB0LT5xKSArIGluZGV4MikgPDwgdC0+cCkgKyBpbmRleDMsIFwKKysJCQkgICAgICBsb29rdXAzKTsJCQkJCSAgICAgIFwKKysJCSAgICAgIH0JCQkJCQkJICAgICAgXAorKwkJICB9CQkJCQkJCSAgICAgIFwKKysJICAgICAgfQkJCQkJCQkJICAgICAgXAorKwkgIH0JCQkJCQkJCSAgICAgIFwKKysgICAgICB9CQkJCQkJCQkJICAgICAgXAorKyAgfSB3aGlsZSAoMCkKKysKKyAjZW5kaWYKKyAKKyAjaWZuZGVmIE5PX0ZJTkFMSVpFCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzE4MC1yZXNvbHYtZHluYW1pYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMTgwLXJlc29sdi1keW5hbWljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhODhmYTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzE4MC1yZXNvbHYtZHluYW1pYy5wYXRjaApAQCAtMCwwICsxLDM5IEBACityaXBwZWQgZnJvbSBTdVNFCisKK2lmIC9ldGMvcmVzb2x2LmNvbmYgaXMgdXBkYXRlZCwgdGhlbiBtYWtlIHN1cmUgYXBwbGljYXRpb25zCithbHJlYWR5IHJ1bm5pbmcgZ2V0IHRoZSB1cGRhdGVkIGluZm9ybWF0aW9uLgorCitodHRwOi8vYnVncy5nZW50b28ub3JnLzE3NzQxNgorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3Jlc29sdi9yZXNfbGliYy5jIGdsaWJjLTIuMTAuMS9yZXNvbHYvcmVzX2xpYmMuYworLS0tIGdsaWJjLTIuMTAuMS5vcmlnL3Jlc29sdi9yZXNfbGliYy5jCTIwMDktMDItMDcgMDU6Mjc6NDIuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMC4xL3Jlc29sdi9yZXNfbGliYy5jCTIwMDktMTEtMTMgMDA6NDk6NTkuMDAwMDAwMDAwICswMTAwCitAQCAtMjIsNiArMjIsNyBAQAorICNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKyAjaW5jbHVkZSA8cmVzb2x2Lmg+CisgI2luY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgCisgCisgLyogVGhlIGZvbGxvd2luZyBiaXQgaXMgY29waWVkIGZyb20gcmVzX2RhdGEuYyAod2hlcmUgaXQgaXMgI2lmZGVmJ2VkCitAQCAtOTUsNiArOTYsMjAgQEAKKyBfX3Jlc19tYXliZV9pbml0IChyZXNfc3RhdGUgcmVzcCwgaW50IHByZWluaXQpCisgeworIAlpZiAocmVzcC0+b3B0aW9ucyAmIFJFU19JTklUKSB7CisrCQlzdGF0aWMgdGltZV90IGxhc3RfbXRpbWUsIGxhc3RfY2hlY2s7CisrCQl0aW1lX3Qgbm93OworKwkJc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKysJCQorKwkJdGltZSAoJm5vdyk7CisrCQlpZiAobm93ICE9IGxhc3RfY2hlY2spIHsKKysJCQlsYXN0X2NoZWNrID0gbm93OworKwkJCWlmIChzdGF0IChfUEFUSF9SRVNDT05GLCAmc3RhdGJ1ZikgPT0gMCAmJiBsYXN0X210aW1lICE9IHN0YXRidWYuc3RfbXRpbWUpIHsKKysJCQkJbGFzdF9tdGltZSA9IHN0YXRidWYuc3RfbXRpbWU7CisrCQkJCWF0b21pY2luY2xvY2sgKGxvY2spOworKwkJCQlhdG9taWNpbmMgKF9fcmVzX2luaXRzdGFtcCk7CisrCQkJCWF0b21pY2luY3VubG9jayAobG9jayk7CisrCQkJfQorKwkJfQorIAkJaWYgKF9fcmVzX2luaXRzdGFtcCAhPSByZXNwLT5fdS5fZXh0LmluaXRzdGFtcCkgeworIAkJCWlmIChyZXNwLT5uc2NvdW50ID4gMCkKKyAJCQkJX19yZXNfaWNsb3NlIChyZXNwLCB0cnVlKTsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMTkwLWxvY2FsZWRlZi1tbWFwLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8xOTAtbG9jYWxlZGVmLW1tYXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcwYjhjMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMTkwLWxvY2FsZWRlZi1tbWFwLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK3NuaXBlZCBmcm9tIERlYmlhbgoraHR0cDovL2J1Z3MuZ2VudG9vLm9yZy8yODk2MTUKKworMjAwOS0xMC0yNyAgQXVyZWxpZW4gSmFybm8gIDxhdXJlbGllbkBhdXJlbDMyLm5ldD4KKworCSogbG9jYWxlL3Byb2dyYW1zL2xvY2FyY2hpdmUuYzogdXNlIE1NQVBfU0hBUkVEIHRvIHJlc2VydmUgbWVtb3J5CisJdXNlZCBsYXRlciB3aXRoIE1NQVBfRklYRUQgfCBNTUFQX1NIQVJFRCB0byBjb3BlIHdpdGggZGlmZmVyZW50CisJYWxpZ25tZW50IHJlc3RyaWN0aW9ucy4KKworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9sb2NhbGUvcHJvZ3JhbXMvbG9jYXJjaGl2ZS5jIGdsaWJjLTIuMTAuMS9sb2NhbGUvcHJvZ3JhbXMvbG9jYXJjaGl2ZS5jCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvbG9jYWxlL3Byb2dyYW1zL2xvY2FyY2hpdmUuYwkyMDA5LTA0LTI3IDE2OjA3OjQ3LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9sb2NhbGUvcHJvZ3JhbXMvbG9jYXJjaGl2ZS5jCTIwMDktMTEtMTMgMDA6NTA6MDEuMDAwMDAwMDAwICswMTAwCitAQCAtMTM0LDcgKzEzNCw3IEBACisgICBzaXplX3QgcmVzZXJ2ZWQgPSBSRVNFUlZFX01NQVBfU0laRTsKKyAgIGludCB4ZmxhZ3MgPSAwOworICAgaWYgKHRvdGFsIDwgcmVzZXJ2ZWQKKy0gICAgICAmJiAoKHAgPSBtbWFwNjQgKE5VTEwsIHJlc2VydmVkLCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sCisrICAgICAgJiYgKChwID0gbW1hcDY0IChOVUxMLCByZXNlcnZlZCwgUFJPVF9OT05FLCBNQVBfU0hBUkVEIHwgTUFQX0FOT04sCisgCQkgICAgICAgLTEsIDApKSAhPSBNQVBfRkFJTEVEKSkKKyAgICAgeGZsYWdzID0gTUFQX0ZJWEVEOworICAgZWxzZQorQEAgLTM5Niw3ICszOTYsNyBAQAorICAgc2l6ZV90IHJlc2VydmVkID0gUkVTRVJWRV9NTUFQX1NJWkU7CisgICBpbnQgeGZsYWdzID0gMDsKKyAgIGlmICh0b3RhbCA8IHJlc2VydmVkCistICAgICAgJiYgKChwID0gbW1hcDY0IChOVUxMLCByZXNlcnZlZCwgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLAorKyAgICAgICYmICgocCA9IG1tYXA2NCAoTlVMTCwgcmVzZXJ2ZWQsIFBST1RfTk9ORSwgTUFQX1NIQVJFRCB8IE1BUF9BTk9OLAorIAkJICAgICAgIC0xLCAwKSkgIT0gTUFQX0ZBSUxFRCkpCisgICAgIHhmbGFncyA9IE1BUF9GSVhFRDsKKyAgIGVsc2UKK0BAIC02MTQsNyArNjE0LDcgQEAKKyAgIGludCB4ZmxhZ3MgPSAwOworICAgdm9pZCAqcDsKKyAgIGlmIChzdC5zdF9zaXplIDwgcmVzZXJ2ZWQKKy0gICAgICAmJiAoKHAgPSBtbWFwNjQgKE5VTEwsIHJlc2VydmVkLCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sCisrICAgICAgJiYgKChwID0gbW1hcDY0IChOVUxMLCByZXNlcnZlZCwgUFJPVF9OT05FLCBNQVBfU0hBUkVEIHwgTUFQX0FOT04sCisgCQkgICAgICAgLTEsIDApKSAhPSBNQVBfRkFJTEVEKSkKKyAgICAgeGZsYWdzID0gTUFQX0ZJWEVEOworICAgZWxzZQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8yMDAtZmFkdmlzZTY0XzY0LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8yMDAtZmFkdmlzZTY0XzY0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMjIxODgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzIwMC1mYWR2aXNlNjRfNjQucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorcmlwcGVkIGZyb20gRGViaWFuCisKKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3NpeF9mYWR2aXNlLmMgfCAgIDEzICsrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvc2l4X2ZhZHZpc2UuYyBnbGliYy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG9zaXhfZmFkdmlzZS5jCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG9zaXhfZmFkdmlzZS5jCTIwMDMtMDgtMTcgMDI6MzY6MjIuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvc2l4X2ZhZHZpc2UuYwkyMDA5LTExLTEzIDAwOjUwOjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTM1LDYgKzM1LDE5IEBACisgICAgIHJldHVybiBJTlRFUk5BTF9TWVNDQUxMX0VSUk5PIChyZXQsIGVycik7CisgICByZXR1cm4gMDsKKyAjZWxzZQorKyMgaWZkZWYgX19OUl9mYWR2aXNlNjRfNjQKKysgIElOVEVSTkFMX1NZU0NBTExfREVDTCAoZXJyKTsgIAorKyAgaW50IHJldCA9IElOVEVSTkFMX1NZU0NBTEwgKGZhZHZpc2U2NF82NCwgZXJyLCA2LCBmZCwKKysJCQkgICAgICBfX0xPTkdfTE9OR19QQUlSICgobG9uZykgKG9mZnNldCA+PiAzMSksCisrCQkJCQkJKGxvbmcpIG9mZnNldCksCisrCQkJICAgICAgX19MT05HX0xPTkdfUEFJUiAoKGxvbmcpIChsZW4gPj4gMzEpLAorKwkJCQkJCShsb25nKSBsZW4pLAorKwkJCSAgICAgIGFkdmlzZSk7CisrICBpZiAoSU5URVJOQUxfU1lTQ0FMTF9FUlJPUl9QIChyZXQsIGVycikpCisrICAgIHJldHVybiBJTlRFUk5BTF9TWVNDQUxMX0VSUk5PIChyZXQsIGVycik7CisrICByZXR1cm4gMDsKKysjIGVsc2UKKyAgIHJldHVybiBFTk9TWVM7CisrIyBlbmRpZgorICNlbmRpZgorIH0KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMjEwLWxkYmwtbmV4dHRvd2FyZGYucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzIxMC1sZGJsLW5leHR0b3dhcmRmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZjBkZWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzIxMC1sZGJsLW5leHR0b3dhcmRmLnBhdGNoCkBAIC0wLDAgKzEsNjYgQEAKK3JpcHBlZCBmcm9tIERlYmlhbgorCit0aGlzIGNoYW5nZSB3YXMgbWFkZSB0byBnZW5lcmljIF9fbmV4dHRvd2FyZGYsIGJ1dCBub3QgdGhlIGxvbmcgZG91YmxlIHZlcnNpb24KKworMjAwOC0wNS0wNSAgQXVyZWxpZW4gSmFybm8gIDxhdXJlbGllbkBhdXJlbDMyLm5ldD4KKworCSogc3lzZGVwcy9pZWVlNzU0L2xkYmwtMTI4L3NfbmV4dHRvd2FyZGYuYzogSW5jbHVkZSBmbG9hdC5oLgorCShfX25leHR0b3dhcmRmKTogVXNlIG1hdGhfb3B0X2JhcnJpZXIgYW5kCisJbWF0aF9mb3JjZV9ldmFsIG1hY3Jvcy4gIElmIEZMVF9FVkFMX01FVEhPRCBpcyBub3QgMCwgZm9yY2UKKwl4IHRvIGZsb2F0IHVzaW5nIGFzbS4KKworIHN5c2RlcHMvaWVlZTc1NC9sZGJsLTEyOC9zX25leHR0b3dhcmRmLmMgfCAgIDI2ICsrKysrKysrKysrKysrKystLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3N5c2RlcHMvaWVlZTc1NC9sZGJsLTEyOC9zX25leHR0b3dhcmRmLmMgZ2xpYmMtMi4xMC4xL3N5c2RlcHMvaWVlZTc1NC9sZGJsLTEyOC9zX25leHR0b3dhcmRmLmMKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9zeXNkZXBzL2llZWU3NTQvbGRibC0xMjgvc19uZXh0dG93YXJkZi5jCTE5OTktMDctMTQgMDI6MDk6NDIuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL3N5c2RlcHMvaWVlZTc1NC9sZGJsLTEyOC9zX25leHR0b3dhcmRmLmMJMjAwOS0xMS0xMyAwMDo1MDowNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xOSw3ICsxOSw4IEBACisgI2VuZGlmCisgCisgI2luY2x1ZGUgIm1hdGguaCIKKy0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisrI2luY2x1ZGUgPG1hdGhfcHJpdmF0ZS5oPgorKyNpbmNsdWRlIDxmbG9hdC5oPgorIAorICNpZmRlZiBfX1NURENfXworIAlmbG9hdCBfX25leHR0b3dhcmRmKGZsb2F0IHgsIGxvbmcgZG91YmxlIHkpCitAQCAtNDQsMTAgKzQ1LDEyIEBACisgCSAgIHJldHVybiB4K3k7CisgCWlmKChsb25nIGRvdWJsZSkgeD09eSkgcmV0dXJuIHk7CS8qIHg9eSwgcmV0dXJuIHkgKi8KKyAJaWYoaXg9PTApIHsJCQkJLyogeCA9PSAwICovCistCSAgICBmbG9hdCB4MjsKKysJICAgIGZsb2F0IHU7CisgCSAgICBTRVRfRkxPQVRfV09SRCh4LCh1X2ludDMyX3QpKChoeT4+MzIpJjB4ODAwMDAwMDApfDEpOy8qIHJldHVybiArLW1pbnN1YiovCistCSAgICB4MiA9IHgqeDsKKy0JICAgIGlmKHgyPT14KSByZXR1cm4geDI7IGVsc2UgcmV0dXJuIHg7CS8qIHJhaXNlIHVuZGVyZmxvdyBmbGFnICovCisrCSAgICB1ID0gbWF0aF9vcHRfYmFycmllciAoeCk7CisrCSAgICB1ID0gdSAqIHU7CisrCSAgICBtYXRoX2ZvcmNlX2V2YWwgKHUpOwkJLyogcmFpc2UgdW5kZXJmbG93IGZsYWcgKi8KKysJICAgIHJldHVybiB4OworIAl9CisgCWlmKGh4Pj0wKSB7CQkJCS8qIHggPiAwICovCisgCSAgICBpZihoeTwwfHwoaXg+PjIzKT4oaXk+PjQ4KS0weDNmODAKK0BAIC02NywxMyArNzAsMTYgQEAKKyAJICAgIH0KKyAJfQorIAloeSA9IGh4JjB4N2Y4MDAwMDA7CistCWlmKGh5Pj0weDdmODAwMDAwKSByZXR1cm4geCt4OwkvKiBvdmVyZmxvdyAgKi8KKysJaWYoaHk+PTB4N2Y4MDAwMDApIHsKKysJICB4ID0geCt4OwkvKiBvdmVyZmxvdyAgKi8KKysJICBpZiAoRkxUX0VWQUxfTUVUSE9EICE9IDApCisrCSAgICAvKiBGb3JjZSBjb252ZXJzaW9uIHRvIGZsb2F0LiAgKi8KKysJICAgIGFzbSAoIiIgOiAiK20iKHgpKTsKKysJICByZXR1cm4geDsKKysJfQorIAlpZihoeTwweDAwODAwMDAwKSB7CQkvKiB1bmRlcmZsb3cgKi8KKy0JICAgIGZsb2F0IHgyID0geCp4OworLQkgICAgaWYoeDIhPXgpIHsJCS8qIHJhaXNlIHVuZGVyZmxvdyBmbGFnICovCistCSAgICAgICAgU0VUX0ZMT0FUX1dPUkQoeDIsaHgpOworLQkJcmV0dXJuIHgyOworLQkgICAgfQorKwkgICAgZmxvYXQgdSA9IHgqeDsKKysJICAgIG1hdGhfZm9yY2VfZXZhbCAodSk7CS8qIHJhaXNlIHVuZGVyZmxvdyBmbGFnICovCisgCX0KKyAJU0VUX0ZMT0FUX1dPUkQoeCxoeCk7CisgCXJldHVybiB4OwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8yMjAtc2VjdGlvbi1jb21tZW50cy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMjIwLXNlY3Rpb24tY29tbWVudHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRmMDhlNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMjIwLXNlY3Rpb24tY29tbWVudHMucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAoraHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9tbC9iaW51dGlscy8yMDA0LTA0L21zZzAwNjY1Lmh0bWwKKworZml4ZXMgYnVpbGRpbmcgb24gc29tZSBhcmNoaXRlY3R1cmVzIChsaWtlIG02OGsvYXJtL2NyaXMvZXRjLi4uKSBiZWNhdXNlCitpdCBkb2VzIHRoZSByaWdodCB0aGluZworCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2luY2x1ZGUvbGliYy1zeW1ib2xzLmggZ2xpYmMtMi4xMC4xL2luY2x1ZGUvbGliYy1zeW1ib2xzLmgKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9pbmNsdWRlL2xpYmMtc3ltYm9scy5oCTIwMDktMDMtMTQgMDA6NTE6NDYuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMC4xL2luY2x1ZGUvbGliYy1zeW1ib2xzLmgJMjAwOS0xMS0xMyAwMDo1MDowNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMzksMTIgKzIzOSwxMiBAQAorICMgIGRlZmluZSBfX21ha2Vfc2VjdGlvbl91bmFsbG9jYXRlZChzZWN0aW9uX3N0cmluZykKKyAjIGVuZGlmCisgCistLyogVGFja2luZyBvbiAiXG5cdCMiIHRvIHRoZSBzZWN0aW9uIG5hbWUgbWFrZXMgZ2NjIHB1dCBpdCdzIGJvZ3VzCisrLyogVGFja2luZyBvbiAiXG4jQVBQXG5cdCMiIHRvIHRoZSBzZWN0aW9uIG5hbWUgbWFrZXMgZ2NjIHB1dCBpdCdzIGJvZ3VzCisgICAgc2VjdGlvbiBhdHRyaWJ1dGVzIG9uIHdoYXQgbG9va3MgbGlrZSBhIGNvbW1lbnQgdG8gdGhlIGFzc2VtYmxlci4gICovCisgIyBpZmRlZiBIQVZFX1NFQ1RJT05fUVVPVEVTCistIyAgZGVmaW5lIF9fc2VjX2NvbW1lbnQgIlwiXG5cdCNcIiIKKysjICBkZWZpbmUgX19zZWNfY29tbWVudCAiXCJcbiNBUFBcblx0I1wiIgorICMgZWxzZQorLSMgIGRlZmluZSBfX3NlY19jb21tZW50ICJcblx0IyIKKysjICBkZWZpbmUgX19zZWNfY29tbWVudCAiXG4jQVBQXG5cdCMiCisgIyBlbmRpZgorICMgZGVmaW5lIGxpbmtfd2FybmluZyhzeW1ib2wsIG1zZykgXAorICAgX19tYWtlX3NlY3Rpb25fdW5hbGxvY2F0ZWQgKCIuZ251Lndhcm5pbmcuIiAjc3ltYm9sKSBcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzIzMC1uby1pbmxpbmUtZ21vbi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMjMwLW5vLWlubGluZS1nbW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZjU4YzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzIzMC1uby1pbmxpbmUtZ21vbi5wYXRjaApAQCAtMCwwICsxLDM2IEBACitodHRwOi8vYnVncy5nZW50b28ub3JnLzE5NjI0NQoraHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2xpYmMtYWxwaGEvMjAwNi0wNS9tc2cwMDAxNy5odG1sCisKK0F0dGFjaGVkIGlzIGEgcGF0Y2ggdG8gYWRkIF9fYXR0cmlidXRlX18gKChub2lubGluZSkpIHRvCitjYWxsX2dtb25fc3RhcnQuCisKK1dpdGhvdXQgdGhpcyBwYXRjaCwgdGhlIHNlYyBzY3JpcHQgdGhhdCBwcm9jZXNzZWQgaW5pdGZpbmkucyByZW1vdmVzIGEKK3BhcnQgb2YgaW5saW5lZCBjYWxsX2dtb25fc3RhcnQsIGNhdXNpbmcgdW5kZWZpbmVkIGxhYmVsIGVycm9ycy4KKworVGhpcyBwYXRjaCBzb2x2ZXMgdGhlIHByb2JsZW0gYnkgZm9yY2luZyBnY2Mgbm90IHRvIGlubGluZQorY2FsbF9nbW9uX3N0YXJ0IHdpdGggX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkuCisKK1Rlc3RlZCBieSBidWlsZGluZyBmb3IgYXJtLW5vbmUtbGl4dXgtZ251ZWFiaS4gIE9LIHRvIGFwcGx5PworCitLYXp1IEhpcmF0YQorCisyMDA2LTA1LTA3ICBLYXp1IEhpcmF0YSAgJmx0O2thenVAY29kZXNvdXJjZXJ5LmNvbSZndDsKKworCSogc3lzZGVwcy9nZW5lcmljL2luaXRmaW5pLmMgKGNhbGxfZ21vbl9zdGFydCk6IEFkZAorCV9fYXR0cmlidXRlX18gKChub2lubGluZSkpLgorCitJbmRleDogc3lzZGVwcy9nZW5lcmljL2luaXRmaW5pLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9zeXNkZXBzL2dlbmVyaWMvaW5pdGZpbmkuYyBnbGliYy0yLjEwLjEvc3lzZGVwcy9nZW5lcmljL2luaXRmaW5pLmMKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9zeXNkZXBzL2dlbmVyaWMvaW5pdGZpbmkuYwkyMDA3LTA2LTE3IDIwOjAyOjQwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9zeXNkZXBzL2dlbmVyaWMvaW5pdGZpbmkuYwkyMDA5LTExLTEzIDAwOjUwOjA5LjAwMDAwMDAwMCArMDEwMAorQEAgLTcwLDcgKzcwLDcgQEAKKyAvKiBUaGUgYmVnaW5uaW5nIG9mIF9pbml0OiAgKi8KKyBhc20gKCJcbi8qQF9pbml0X1BST0xPR19CRUdJTlMqLyIpOworIAorLXN0YXRpYyB2b2lkCisrc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKKyBjYWxsX2dtb25fc3RhcnQodm9pZCkKKyB7CisgICBleHRlcm4gdm9pZCBfX2dtb25fc3RhcnRfXyAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKHdlYWspKTsgLyp3ZWFrX2V4dGVybiAoX19nbW9uX3N0YXJ0X18pOyovCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzI0MC1jaGVja19uYXRpdmUtaGVhZGVycy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMjQwLWNoZWNrX25hdGl2ZS1oZWFkZXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZmNhNmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzI0MC1jaGVja19uYXRpdmUtaGVhZGVycy5wYXRjaApAQCAtMCwwICsxLDE3IEBACittYW55IHBvcnRzIGhpdCB0aGlzIHdhcm5pbmc6CisuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9jaGVja19uYXRpdmUuYzo0Njogd2FybmluZzogaW1wbGljaXQgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb24gJ21lbXNldCcKKy4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2NoZWNrX25hdGl2ZS5jOjQ2OiB3YXJuaW5nOiBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbiAnbWVtc2V0JworCitzbmlwcGVkIGZyb20gc3VzZQorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2NoZWNrX25hdGl2ZS5jIGdsaWJjLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9jaGVja19uYXRpdmUuYworLS0tIGdsaWJjLTIuMTAuMS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2NoZWNrX25hdGl2ZS5jCTIwMDctMTEtMjQgMDQ6MTI6MTcuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2NoZWNrX25hdGl2ZS5jCTIwMDktMTEtMTMgMDA6NTA6MTEuMDAwMDAwMDAwICswMTAwCitAQCAtMjMsNiArMjMsNyBAQAorICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8dGltZS5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8bmV0L2lmLmg+CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzI1MC1maXgtcHI2MzEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzI1MC1maXgtcHI2MzEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRiMzVlZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMjUwLWZpeC1wcjYzMS5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitGcm9tIGRhbmtAa2VnZWwuY29tCitXZWQgSnVuIDE1IDA5OjEyOjQzIFBEVCAyMDA1CisKK0ZpeGVzCisKK2J1aWxkLWdsaWJjL2xpYmMuYShuc3N3aXRjaC5vKSguZGF0YSsweDY0KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX25zc19maWxlc19nZXRhbGlhc2VudF9yJworYnVpbGQtZ2xpYmMvbGliYy5hKG5zc3dpdGNoLm8pKC5kYXRhKzB4NmMpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfbnNzX2ZpbGVzX2VuZGFsaWFzZW50JworLi4uIDUzIGxpbmVzIGRlbGV0ZWQgLi4uCitidWlsZC1nbGliYy9saWJjLmEobnNzd2l0Y2gubykoLmRhdGErMHgyMWMpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfbnNzX2ZpbGVzX2dldHNwbmFtX3InCitjb2xsZWN0MjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworbWFrZVsyXTogKioqIFsvYnVpbGQvZ2NjLTMuNC4zLWdsaWJjLTIuMy41LWhkcnMtMi42LjExLjIvaTY4Ni11bmtub3duLWxpbnV4LWdudS9idWlsZC1nbGliYy9lbGYvbGRjb25maWddIEVycm9yIDEKKword2hlbiBidWlsZGluZyBnbGliYyB3aXRoIC0tZW5hYmxlLXN0YXRpYy1uc3MuCisKK1NlZSBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD02MzEKKworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9NYWtlY29uZmlnIGdsaWJjLTIuMTAuMS9NYWtlY29uZmlnCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvTWFrZWNvbmZpZwkyMDA5LTExLTEzIDAwOjQ5OjQxLjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTAuMS9NYWtlY29uZmlnCTIwMDktMTEtMTMgMDA6NTA6MTMuMDAwMDAwMDAwICswMTAwCitAQCAtNTA5LDcgKzUwOSw3IEBACisgCisgIyBUaGUgc3RhdGljIGxpYnJhcmllcy4KKyBpZmVxICh5ZXMsJChidWlsZC1zdGF0aWMpKQorLWxpbmstbGliYy1zdGF0aWMgPSAkKGNvbW1vbi1vYmpwZngpbGliYy5hICQoc3RhdGljLWdudWxpYikgJChjb21tb24tb2JqcGZ4KWxpYmMuYQorK2xpbmstbGliYy1zdGF0aWMgPSAkKGNvbW1vbi1vYmpwZngpbGliYy5hICQoc3RhdGljLWdudWxpYikgJChvdGhlcmxpYnMpICQoY29tbW9uLW9ianBmeClsaWJjLmEKKyBlbHNlCisgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKyAjIFdlIGNhbiB0cnkgdG8gbGluayB0aGUgcHJvZ3JhbXMgd2l0aCBsaWIqX3BpYy5hLi4uCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2VsZi9NYWtlZmlsZSBnbGliYy0yLjEwLjEvZWxmL01ha2VmaWxlCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvZWxmL01ha2VmaWxlCTIwMDktMDEtMzEgMDE6MjA6NTUuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMC4xL2VsZi9NYWtlZmlsZQkyMDA5LTExLTEzIDAwOjUwOjEzLjAwMDAwMDAwMCArMDEwMAorQEAgLTEyMSw2ICsxMjEsMTMgQEAKKyBpbnN0YWxsLWJpbi1zY3JpcHQgPSBsZGQKKyBlbmRpZgorIAorK2lmZXEgKHllcywkKGJ1aWxkLXN0YXRpYy1uc3MpKQorK25zc29iamRpciA6PSAkKHBhdHN1YnN0IC4uLyQoc3ViZGlyKSwuLCQoY29tbW9uLW9ianBmeCluc3MpCisrcmVzb2x2b2JqZGlyIDo9ICQocGF0c3Vic3QgLi4vJChzdWJkaXIpLC4sJChjb21tb24tb2JqcGZ4KXJlc29sdikKKytvdGhlcmxpYnMgKz0gJChuc3NvYmpkaXIpL2xpYm5zc19maWxlcy5hICQocmVzb2x2b2JqZGlyKS9saWJuc3NfZG5zLmEgXAorKwkgICAgICQocmVzb2x2b2JqZGlyKS9saWJyZXNvbHYuYQorK2VuZGlmCisrCisgb3RoZXJzCQk9IHNwcm9mIHNsbgorIGluc3RhbGwtYmluCT0gc3Byb2YKKyBvdGhlcnMtc3RhdGljICAgPSBzbG4KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMjYwLWFzc3VtZS1waXBlMi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMjYwLWFzc3VtZS1waXBlMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODRiNWUwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8yNjAtYXNzdW1lLXBpcGUyLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK2h0dHA6Ly9idWdzLmdlbnRvby5vcmcvMjUwMzQyCitodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD05Njg1CisKK3dlIGNhbnQgYXNzdW1lIHNvY2tfY2xvZXhlYyBhbmQgcGlwZTIgYXJlIGJvdW5kIHRvZ2V0aGVyIGFzIHRoZSBmb3JtZXIgZGVmaW5lcworYXJlIGZvdW5kIGluIGdsaWJjIG9ubHkgd2hpbGUgdGhlIGxhdHRlciBhcmUgYSBjb21ibyBvZiBrZXJuZWwgaGVhZGVycyBhbmQKK2dsaWJjLiAgc28gaWYgd2UgZG8gYSBydW50aW1lIGRldGVjdGlvbiBvZiBTT0NLX0NMT0VYRUMsIGJ1dCBwaXBlMigpIGlzIGEgc3R1YgoraW5zaWRlIG9mIGdsaWJjLCB3ZSBoaXQgYSBwcm9ibGVtLiAgZm9yIGV4YW1wbGU6CisKKyNpbmNsdWRlIDxncnAuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorbWFpbigpCit7CisJZ2V0Z3JuYW0oInBvcnRhZ2UiKTsKKwlpZiAoIXBvcGVuKCJscyIsICJyIikpCisJCXBlcnJvcigicG9wZW4oKSIpOworfQorCitnZXRncm5hbSgpIHdpbGwgZGV0ZWN0IHRoYXQgdGhlIGtlcm5lbCBzdXBwb3J0cyBTT0NLX0NMT0VYRUMgYW5kIHRoZW4gc2V0IGJvdGgKK19faGF2ZV9zb2NrX2Nsb2V4ZWMgYW5kIF9faGF2ZV9waXBlMiB0byB0cnVlLiAgYnV0IGlmIGdsaWJjIHdhcyBidWlsdCBhZ2FpbnN0CitvbGRlciBrZXJuZWwgaGVhZGVycyB3aGVyZSBfX05SX3BpcGUyIGRvZXMgbm90IGV4aXN0LCBnbGliYyB3aWxsIGhhdmUgYSBFTk9TWVMKK3N0dWIgZm9yIGl0LiAgc28gcG9wZW4oKSB3aWxsIGFsd2F5cyBmYWlsIGFzIGdsaWJjIGFzc3VtZXMgcGlwZTIoKSB3b3Jrcy4KKworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9pbmNsdWRlL3VuaXN0ZC5oIGdsaWJjLTIuMTAuMS9pbmNsdWRlL3VuaXN0ZC5oCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvaW5jbHVkZS91bmlzdGQuaAkyMDA4LTA3LTI3IDIwOjIzOjE3LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9pbmNsdWRlL3VuaXN0ZC5oCTIwMDktMTEtMTMgMDA6NTA6MTUuMDAwMDAwMDAwICswMTAwCitAQCAtMTY3LDkgKzE2Nyw2IEBACisgZXh0ZXJuIGludCBfX3BhdXNlX25vY2FuY2VsICh2b2lkKSBhdHRyaWJ1dGVfaGlkZGVuOworIAorIGV4dGVybiBpbnQgX19oYXZlX3NvY2tfY2xvZXhlYzsKKy0vKiBBdCBsb3Qgb2Ygb3RoZXIgZnVuY3Rpb25hbGl0eSBiZWNhbWUgYXZhaWxhYmxlIGF0IHRoZSBzYW1lIHRpbWUgYXMKKy0gICBTT0NLX0NMT0VYRUMuICBBdm9pZCBkZWZpbmluZyBzZXBhcmF0ZSB2YXJpYWJsZXMgZm9yIGFsbCBvZiB0aGVtCistICAgdW5sZXNzIGl0IGlzIHJlYWxseSBuZWNlc3NhcnkuICAqLworLSNkZWZpbmUgX19oYXZlX3BpcGUyIF9faGF2ZV9zb2NrX2Nsb2V4ZWMKKytleHRlcm4gaW50IF9faGF2ZV9waXBlMjsKKyAKKyAjZW5kaWYKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvc29ja2V0L2hhdmVfc29ja19jbG9leGVjLmMgZ2xpYmMtMi4xMC4xL3NvY2tldC9oYXZlX3NvY2tfY2xvZXhlYy5jCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvc29ja2V0L2hhdmVfc29ja19jbG9leGVjLmMJMjAwOC0wNy0yNSAxODo0NjoyMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvc29ja2V0L2hhdmVfc29ja19jbG9leGVjLmMJMjAwOS0xMS0xMyAwMDo1MDoxNS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNiw5ICsxNiwxNCBAQAorICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAgMDIxMTEtMTMwNyBVU0EuICAqLworIAorKyNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgI2luY2x1ZGUgPGtlcm5lbC1mZWF0dXJlcy5oPgorIAorICNpZiBkZWZpbmVkIFNPQ0tfQ0xPRVhFQyAmJiAhZGVmaW5lZCBfX0FTU1VNRV9TT0NLX0NMT0VYRUMKKyBpbnQgX19oYXZlX3NvY2tfY2xvZXhlYzsKKyAjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBPX0NMT0VYRUMgJiYgIWRlZmluZWQgX19BU1NVTUVfUElQRTIKKytpbnQgX19oYXZlX3BpcGUyOworKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8yNzAtY2hpbmEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzI3MC1jaGluYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDZjMmVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8yNzAtY2hpbmEucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvbG9jYWxlZGF0YS9sb2NhbGVzL3poX1RXIGdsaWJjLTIuMTAuMS9sb2NhbGVkYXRhL2xvY2FsZXMvemhfVFcKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9sb2NhbGVkYXRhL2xvY2FsZXMvemhfVFcJMjAwNC0xMS0wMSAwMDo0MjoyOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEwLjEvbG9jYWxlZGF0YS9sb2NhbGVzL3poX1RXCTIwMDktMTEtMTMgMDA6NTA6MTcuMDAwMDAwMDAwICswMTAwCitAQCAtMSw3ICsxLDcgQEAKKyBjb21tZW50X2NoYXIgJQorIGVzY2FwZV9jaGFyIC8KKyAlCistJSBDaGluZXNlIGxhbmd1YWdlIGxvY2FsZSBmb3IgVGFpd2FuIFIuTy5DLgorKyUgQ2hpbmVzZSBsYW5ndWFnZSBsb2NhbGUgZm9yIFRhaXdhbgorICUgY2hhcm1hcDogQklHNS1DUDk1MAorICUKKyAlIE9yaWdpbmFsIEF1dGhvcjoKK0BAIC0xNyw3ICsxNyw3IEBACisgJSBSZWZlcmVuY2U6CWh0dHA6Ly93d3dvbGQuZGt1dWcuZGsvSlRDMS9TQzIyL1dHMjAvZG9jcy9uNjkwLnBkZgorIAorIExDX0lERU5USUZJQ0FUSU9OCistdGl0bGUgICAgICAiQ2hpbmVzZSBsb2NhbGUgZm9yIFRhaXdhbiBSLk8uQy4iCisrdGl0bGUgICAgICAiQ2hpbmVzZSBsb2NhbGUgZm9yIFRhaXdhbiIKKyBzb3VyY2UgICAgICIiCisgYWRkcmVzcyAgICAiIgorIGNvbnRhY3QgICAgIiIKK0BAIC0yNSw3ICsyNSw3IEBACisgdGVsICAgICAgICAiIgorIGZheCAgICAgICAgIiIKKyBsYW5ndWFnZSAgICJDaGluZXNlIgorLXRlcnJpdG9yeSAgIlRhaXdhbiBSLk8uQy4iCisrdGVycml0b3J5ICAiVGFpd2FuIgorIHJldmlzaW9uICAgIjAuMiIKKyBkYXRlICAgICAgICIyMDAwLTA4LTAyIgorICUKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMjgwLW5ldy12YWxlbmNpYW4tbG9jYWxlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8yODAtbmV3LXZhbGVuY2lhbi1sb2NhbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZhZmQ2OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMjgwLW5ldy12YWxlbmNpYW4tbG9jYWxlLnBhdGNoCkBAIC0wLDAgKzEsMTE1IEBACitodHRwOi8vYnVncy5nZW50b28ub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE4MTUKK2h0dHA6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MjUyMgorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2xvY2FsZWRhdGEvU1VQUE9SVEVEIGdsaWJjLTIuMTAuMS9sb2NhbGVkYXRhL1NVUFBPUlRFRAorLS0tIGdsaWJjLTIuMTAuMS5vcmlnL2xvY2FsZWRhdGEvU1VQUE9SVEVECTIwMDktMDQtMTggMTA6NDM6NTIuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL2xvY2FsZWRhdGEvU1VQUE9SVEVECTIwMDktMTEtMTMgMDA6NTA6MjAuMDAwMDAwMDAwICswMTAwCitAQCAtNzIsNiArNzIsOCBAQAorIGNhX0VTLlVURi04L1VURi04IFwKKyBjYV9FUy9JU08tODg1OS0xIFwKKyBjYV9FU0BldXJvL0lTTy04ODU5LTE1IFwKKytjYV9FUy5VVEYtOEB2YWxlbmNpYS9VVEYtOCBcCisrY2FfRVNAdmFsZW5jaWEvSVNPLTg4NTktMTUgXAorIGNhX0ZSLlVURi04L1VURi04IFwKKyBjYV9GUi9JU08tODg1OS0xNSBcCisgY2FfSVQuVVRGLTgvVVRGLTggXAorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9sb2NhbGVkYXRhL2xvY2FsZXMvY2FfRVNAdmFsZW5jaWEgZ2xpYmMtMi4xMC4xL2xvY2FsZWRhdGEvbG9jYWxlcy9jYV9FU0B2YWxlbmNpYQorLS0tIGdsaWJjLTIuMTAuMS5vcmlnL2xvY2FsZWRhdGEvbG9jYWxlcy9jYV9FU0B2YWxlbmNpYQkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTAuMS9sb2NhbGVkYXRhL2xvY2FsZXMvY2FfRVNAdmFsZW5jaWEJMjAwOS0xMS0xMyAwMDo1MDoyMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsOTYgQEAKKytjb21tZW50X2NoYXIgJQorK2VzY2FwZV9jaGFyICAvCisrJQorKyUgVmFsZW5jaWFuIChzb3V0aGVybiBDYXRhbGFuKSBsb2NhbGUgZm9yIFNwYWluIHdpdGggRXVybworKyUKKyslIE5vdGUgdGhhdCB0aGlzIGxvY2FsZSBpcyBhbG1vc3QgdGhlIHNhbWUgYXMgY2FfRVNAZXVyby4gIFRoZSBwb2ludCBvZiBoYXZpbmcKKyslIGEgc2VwYXJhdGUgbG9jYWxlIGlzIG9ubHkgZm9yIFBPIHRyYW5zbGF0aW9ucywgd2hpY2ggaGF2ZSBhIGxvdCBvZiBzb2NpYWwKKyslIHN1cHBvcnQgYW5kIGFyZSB2ZXJ5IGFwcHJlY2lhdGVkIGJ5IHRoZSBWYWxlbmNpYW4tc3BlYWtpbmcgY29tbXVuaXR5LgorKyUKKyslIENvbnRhY3Q6IEpvcmRpIE1hbGxhY2gKKyslIEVtYWlsOiBqb3JkaUBnbnUub3JnCisrJSBUZWw6CisrJSBGYXg6CisrJSBMYW5ndWFnZTogY2EKKyslIFRlcnJpdG9yeTogRVMKKyslIE9wdGlvbjogZXVybworKyUgUmV2aXNpb246IDEuMAorKyUgRGF0ZTogMjAwNi0wNC0wNgorKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyslIFVzZXJzOiBnZW5lcmFsCisrJSBSZXBlcnRvaXJlbWFwOiBtbmVtb25pYyxkcworKyUgQ2hhcnNldDogSVNPLTg4NTktMTUKKyslIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyslIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorKworK0xDX0lERU5USUZJQ0FUSU9OCisrdGl0bGUgICAgICAiVmFsZW5jaWFuIChzb3V0aGVybiBDYXRhbGFuKSBsb2NhbGUgZm9yIFNwYWluIHdpdGggRXVybyIKKytzb3VyY2UgICAgICIiCisrYWRkcmVzcyAgICAiIgorK2NvbnRhY3QgICAgIkpvcmRpIE1hbGxhY2giCisrZW1haWwgICAgICAiam9yZGlAZ251Lm9yZyIKKyt0ZWwgICAgICAgICIiCisrZmF4ICAgICAgICAiIgorK2xhbmd1YWdlICAgIkNhdGFsYW4iCisrdGVycml0b3J5ICAiU3BhaW4iCisrcmV2aXNpb24gICAiMS4wIgorK2RhdGUgICAgICAgIjIwMDYtMDQtMDYiCisrJQorK2NhdGVnb3J5ICAiY2FfRVNAdmFsZW5jaWE6MjAwNiI7TENfSURFTlRJRklDQVRJT04KKytjYXRlZ29yeSAgImNhX0VTQHZhbGVuY2lhOjIwMDYiO0xDX0NUWVBFCisrY2F0ZWdvcnkgICJjYV9FU0B2YWxlbmNpYToyMDA2IjtMQ19DT0xMQVRFCisrY2F0ZWdvcnkgICJjYV9FU0B2YWxlbmNpYToyMDA2IjtMQ19NT05FVEFSWQorK2NhdGVnb3J5ICAiY2FfRVNAdmFsZW5jaWE6MjAwNiI7TENfTlVNRVJJQworK2NhdGVnb3J5ICAiY2FfRVNAdmFsZW5jaWE6MjAwNiI7TENfVElNRQorK2NhdGVnb3J5ICAiY2FfRVNAdmFsZW5jaWE6MjAwNiI7TENfTUVTU0FHRVMKKytjYXRlZ29yeSAgImNhX0VTQHZhbGVuY2lhOjIwMDYiO0xDX1BBUEVSCisrY2F0ZWdvcnkgICJjYV9FU0B2YWxlbmNpYToyMDA2IjtMQ19OQU1FCisrY2F0ZWdvcnkgICJjYV9FU0B2YWxlbmNpYToyMDA2IjtMQ19BRERSRVNTCisrY2F0ZWdvcnkgICJjYV9FU0B2YWxlbmNpYToyMDA2IjtMQ19URUxFUEhPTkUKKytjYXRlZ29yeSAgImNhX0VTQHZhbGVuY2lhOjIwMDYiO0xDX01FQVNVUkVNRU5UCisrCisrRU5EIExDX0lERU5USUZJQ0FUSU9OCisrCisrTENfQ1RZUEUKKytjb3B5ICJpMThuIgorK0VORCBMQ19DVFlQRQorKworK0xDX0NPTExBVEUKKytjb3B5ICJjYV9FUyIKKytFTkQgTENfQ09MTEFURQorKworK0xDX01PTkVUQVJZCisrY29weSAiY2FfRVMiCisrRU5EIExDX01PTkVUQVJZCisrCisrTENfTlVNRVJJQworK2NvcHkgImNhX0VTIgorK0VORCBMQ19OVU1FUklDCisrCisrTENfVElNRQorK2NvcHkgImNhX0VTIgorK0VORCBMQ19USU1FCisrCisrTENfTUVTU0FHRVMKKytjb3B5ICJjYV9FUyIKKytFTkQgTENfTUVTU0FHRVMKKysKKytMQ19QQVBFUgorK2NvcHkgImNhX0VTIgorK0VORCBMQ19QQVBFUgorKworK0xDX05BTUUKKytjb3B5ICJjYV9FUyIKKytFTkQgTENfTkFNRQorKworK0xDX0FERFJFU1MKKytjb3B5ICJjYV9FUyIKKytFTkQgTENfQUREUkVTUworKworK0xDX1RFTEVQSE9ORQorK2NvcHkgImNhX0VTIgorK0VORCBMQ19URUxFUEhPTkUKKysKKytMQ19NRUFTVVJFTUVOVAorK2NvcHkgImNhX0VTIgorK0VORCBMQ19NRUFTVVJFTUVOVApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8zMDAtbnNjZC1vbmUtZm9yay5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMzAwLW5zY2Qtb25lLWZvcmsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNjMTU0MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMzAwLW5zY2Qtb25lLWZvcmsucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorb25seSBmb3JrIG9uZSB0byBhc3Npc3QgaW4gc3RvcC1zdGFydC1kYWVtb24gYXNzdW1wdGlvbnMgYWJvdXQgZGFlbW9uIGJlaGF2aW9yCisKK2h0dHA6Ly9idWdzLmdlbnRvby5vcmcvMTkwNzg1CisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvbnNjZC9uc2NkLmMgZ2xpYmMtMi4xMC4xL25zY2QvbnNjZC5jCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvbnNjZC9uc2NkLmMJMjAwOS0wMi0wNiAyMToxMDoyNy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEwLjEvbnNjZC9uc2NkLmMJMjAwOS0xMS0xMyAwMDo1MDoyNC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xODIsNiArMTgyLDkgQEAKKyAgICAgICBpZiAocGlkICE9IDApCisgCWV4aXQgKDApOworIAorKyAgICAgICBpZiAod3JpdGVfcGlkIChfUEFUSF9OU0NEUElEKSA8IDApCisrCWRiZ19sb2cgKCIlczogJXMiLCBfUEFUSF9OU0NEUElELCBzdHJlcnJvciAoZXJybm8pKTsKKysKKyAgICAgICBpbnQgbnVsbGZkID0gb3BlbiAoX1BBVEhfREVWTlVMTCwgT19SRFdSKTsKKyAgICAgICBpZiAobnVsbGZkICE9IC0xKQorIAl7CitAQCAtMjMxLDEyICsyMzQsNiBAQAorIAlmb3IgKGkgPSBtaW5fY2xvc2VfZmQ7IGkgPCBnZXRkdGFibGVzaXplICgpOyBpKyspCisgCSAgY2xvc2UgKGkpOworIAorLSAgICAgIHBpZCA9IGZvcmsgKCk7CistICAgICAgaWYgKHBpZCA9PSAtMSkKKy0JZXJyb3IgKEVYSVRfRkFJTFVSRSwgZXJybm8sIF8oImNhbm5vdCBmb3JrIikpOworLSAgICAgIGlmIChwaWQgIT0gMCkKKy0JZXhpdCAoMCk7CistCisgICAgICAgc2V0c2lkICgpOworIAorICAgICAgIGlmIChjaGRpciAoIi8iKSAhPSAwKQorQEAgLTI0NSw5ICsyNDIsNiBAQAorIAorICAgICAgIG9wZW5sb2cgKCJuc2NkIiwgTE9HX0NPTlMgfCBMT0dfT0RFTEFZLCBMT0dfREFFTU9OKTsKKyAKKy0gICAgICBpZiAod3JpdGVfcGlkIChfUEFUSF9OU0NEUElEKSA8IDApCistICAgICAgICBkYmdfbG9nICgiJXM6ICVzIiwgX1BBVEhfTlNDRFBJRCwgc3RyZXJyb3IgKGVycm5vKSk7CistCisgICAgICAgaWYgKCFpbml0X2xvZ2ZpbGUgKCkpCisgCWRiZ19sb2cgKF8oIkNvdWxkIG5vdCBjcmVhdGUgbG9nIGZpbGUiKSk7CisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzMxMC1ocHBhLW5wdGwtY2FybG9zLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8zMTAtaHBwYS1ucHRsLWNhcmxvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmVkMmEwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8zMTAtaHBwYS1ucHRsLWNhcmxvcy5wYXRjaApAQCAtMCwwICsxLDI0NiBAQAorCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvZWxmL3J0bGQuYyBnbGliYy0yLjEwLjEvZWxmL3J0bGQuYworLS0tIGdsaWJjLTIuMTAuMS5vcmlnL2VsZi9ydGxkLmMJMjAwOS0wNC0xNyAwMjowMDowOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvZWxmL3J0bGQuYwkyMDA5LTExLTEzIDAwOjUwOjI2LjAwMDAwMDAwMCArMDEwMAorQEAgLTM4NCwxNCArMzg0LDE0IEBACisgICAgICBrbm93IGl0IGlzIGF2YWlsYWJsZS4gIFdlIGRvIG5vdCBoYXZlIHRvIGNsZWFyIHRoZSBtZW1vcnkgaWYgd2UKKyAgICAgIGRvIG5vdCBoYXZlIHRvIHVzZSB0aGUgdGVtcG9yYXJ5IGJvb3RzdHJhcF9tYXAuICBHbG9iYWwgdmFyaWFibGVzCisgICAgICBhcmUgaW5pdGlhbGl6ZWQgdG8gemVybyBieSBkZWZhdWx0LiAgKi8KKy0jaWZuZGVmIERPTlRfVVNFX0JPT1RTVFJBUF9NQVAKKysjaWYgIWRlZmluZWQgRE9OVF9VU0VfQk9PVFNUUkFQX01BUAorICMgaWZkZWYgSEFWRV9CVUlMVElOX01FTVNFVAorICAgX19idWlsdGluX21lbXNldCAoYm9vdHN0cmFwX21hcC5sX2luZm8sICdcMCcsIHNpemVvZiAoYm9vdHN0cmFwX21hcC5sX2luZm8pKTsKKyAjIGVsc2UKKy0gIGZvciAoc2l6ZV90IGNudCA9IDA7CistICAgICAgIGNudCA8IHNpemVvZiAoYm9vdHN0cmFwX21hcC5sX2luZm8pIC8gc2l6ZW9mIChib290c3RyYXBfbWFwLmxfaW5mb1swXSk7CistICAgICAgICsrY250KQorLSAgICBib290c3RyYXBfbWFwLmxfaW5mb1tjbnRdID0gMDsKKysgIC8qIENsZWFyIHRoZSB3aG9sZSBib290c3RyYXBfbWFwIHN0cnVjdHVyZSAqLworKyAgZm9yIChjaGFyICpjbnQgPSAoY2hhciAqKSYoYm9vdHN0cmFwX21hcCk7CisrICAgICAgIGNudCA8ICgoY2hhciAqKSYoYm9vdHN0cmFwX21hcCkgKyBzaXplb2YgKGJvb3RzdHJhcF9tYXApKTsKKysgICAgICAgKmNudCsrID0gJ1wwJyk7CisgIyBlbmRpZgorICMgaWYgVVNFX19fVEhSRUFECisgICBib290c3RyYXBfbWFwLmxfdGxzX21vZGlkID0gMDsKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvaW5jbHVkZS9hdG9taWMuaCBnbGliYy0yLjEwLjEvaW5jbHVkZS9hdG9taWMuaAorLS0tIGdsaWJjLTIuMTAuMS5vcmlnL2luY2x1ZGUvYXRvbWljLmgJMjAwOS0wMi0wOSAwMDo0OTo1My4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEwLjEvaW5jbHVkZS9hdG9taWMuaAkyMDA5LTExLTEzIDAwOjUwOjI2LjAwMDAwMDAwMCArMDEwMAorQEAgLTE3NCw3ICsxNzQsNyBAQAorICAgICAgX190eXBlb2YgKCoobWVtKSkgX19hdGc1X3ZhbHVlID0gKG5ld3ZhbHVlKTsJCQkgICAgICBcCisgCQkJCQkJCQkJICAgICAgXAorICAgICAgZG8JCQkJCQkJCQkgICAgICBcCistICAgICAgIF9fYXRnNV9vbGR2YWwgPSAqX19hdGc1X21lbXA7CQkJCQkgICAgICBcCisrICAgICAgIF9fYXRnNV9vbGR2YWwgPSAqKHZvbGF0aWxlIF9fdHlwZW9mIChtZW0pKV9fYXRnNV9tZW1wOwkJICAgICAgXAorICAgICAgd2hpbGUgKF9fYnVpbHRpbl9leHBlY3QJCQkJCQkgICAgICBcCisgCSAgICAoYXRvbWljX2NvbXBhcmVfYW5kX2V4Y2hhbmdlX2Jvb2xfYWNxIChfX2F0ZzVfbWVtcCwgX19hdGc1X3ZhbHVlLCBcCisgCQkJCQkJICAgX19hdGc1X29sZHZhbCksIDApKTsJICAgICAgXAorQEAgLTE5NSw3ICsxOTUsNyBAQAorICAgICAgX190eXBlb2YgKCoobWVtKSkgX19hdGc2X3ZhbHVlID0gKHZhbHVlKTsJCQkJICAgICAgXAorIAkJCQkJCQkJCSAgICAgIFwKKyAgICAgIGRvCQkJCQkJCQkJICAgICAgXAorLSAgICAgICBfX2F0ZzZfb2xkdmFsID0gKl9fYXRnNl9tZW1wOwkJCQkJICAgICAgXAorKyAgICAgICBfX2F0ZzZfb2xkdmFsID0gKih2b2xhdGlsZSBfX3R5cGVvZiAobWVtKSlfX2F0ZzZfbWVtcDsJCSAgICAgIFwKKyAgICAgIHdoaWxlIChfX2J1aWx0aW5fZXhwZWN0CQkJCQkJICAgICAgXAorIAkgICAgKGF0b21pY19jb21wYXJlX2FuZF9leGNoYW5nZV9ib29sX2FjcSAoX19hdGc2X21lbXAsCQkgICAgICBcCisgCQkJCQkJICAgX19hdGc2X29sZHZhbAkgICAgICBcCitAQCAtMjEzLDcgKzIxMyw3IEBACisgICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX2F0ZzdfdmFsdWUgPSAodmFsdWUpOwkJCQkgICAgICBcCisgCQkJCQkJCQkJICAgICAgXAorICAgICAgZG8JCQkJCQkJCQkgICAgICBcCistICAgICAgIF9fYXRnN19vbGR2ID0gKl9fYXRnN19tZW1wOwkJCQkJICAgICAgXAorKyAgICAgICBfX2F0Zzdfb2xkdiA9ICoodm9sYXRpbGUgX190eXBlb2YgKG1lbSkpX19hdGc3X21lbXA7CQkgICAgICBcCisgICAgICB3aGlsZSAoX19idWlsdGluX2V4cGVjdAkJCQkJCSAgICAgIFwKKyAJICAgIChjYXRvbWljX2NvbXBhcmVfYW5kX2V4Y2hhbmdlX2Jvb2xfYWNxIChfX2F0ZzdfbWVtcCwJICAgICAgXAorIAkJCQkJCSAgICBfX2F0Zzdfb2xkdgkJICAgICAgXAorQEAgLTIzMSw3ICsyMzEsNyBAQAorICAgICBfX3R5cGVvZiAobWVtKSBfX2F0ZzhfbWVtcCA9IChtZW0pOwkJCQkJICAgICAgXAorICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX2F0ZzhfdmFsdWUgPSAodmFsdWUpOwkJCQkgICAgICBcCisgICAgIGRvIHsJCQkJCQkJCSAgICAgIFwKKy0gICAgICBfX2F0Zzhfb2xkdmFsID0gKl9fYXRnOF9tZW1wOwkJCQkJICAgICAgXAorKyAgICAgIF9fYXRnOF9vbGR2YWwgPSAqKHZvbGF0aWxlIF9fdHlwZW9mIChtZW0pKV9fYXRnOF9tZW1wOwkJICAgICAgXAorICAgICAgIGlmIChfX2F0Zzhfb2xkdmFsID49IF9fYXRnOF92YWx1ZSkJCQkJICAgICAgXAorIAlicmVhazsJCQkJCQkJCSAgICAgIFwKKyAgICAgfSB3aGlsZSAoX19idWlsdGluX2V4cGVjdAkJCQkJCSAgICAgIFwKK0BAIC0yNDgsNyArMjQ4LDcgQEAKKyAgICAgX190eXBlb2YgKG1lbSkgX19hdGc5X21lbXAgPSAobWVtKTsJCQkJCSAgICAgIFwKKyAgICAgX190eXBlb2YgKCoobWVtKSkgX19hdGc5X3ZhbHVlID0gKHZhbHVlKTsJCQkJICAgICAgXAorICAgICBkbyB7CQkJCQkJCQkgICAgICBcCistICAgICAgX19hdGc5X29sZHYgPSAqX19hdGc5X21lbXA7CQkJCQkgICAgICBcCisrICAgICAgX19hdGc5X29sZHYgPSAqKHZvbGF0aWxlIF9fdHlwZW9mIChtZW0pKV9fYXRnOV9tZW1wOwkJICAgICAgXAorICAgICAgIGlmIChfX2F0Zzlfb2xkdiA+PSBfX2F0ZzlfdmFsdWUpCQkJCQkgICAgICBcCisgCWJyZWFrOwkJCQkJCQkJICAgICAgXAorICAgICB9IHdoaWxlIChfX2J1aWx0aW5fZXhwZWN0CQkJCQkJICAgICAgXAorQEAgLTI2Niw3ICsyNjYsNyBAQAorICAgICBfX3R5cGVvZiAobWVtKSBfX2F0ZzEwX21lbXAgPSAobWVtKTsJCQkJICAgICAgXAorICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX2F0ZzEwX3ZhbHVlID0gKHZhbHVlKTsJCQkJICAgICAgXAorICAgICBkbyB7CQkJCQkJCQkgICAgICBcCistICAgICAgX19hdGcxMF9vbGR2YWwgPSAqX19hdGcxMF9tZW1wOwkJCQkJICAgICAgXAorKyAgICAgIF9fYXRnMTBfb2xkdmFsID0gKih2b2xhdGlsZSBfX3R5cGVvZiAobWVtKSlfX2F0ZzEwX21lbXA7CQkgICAgICBcCisgICAgICAgaWYgKF9fYXRnMTBfb2xkdmFsIDw9IF9fYXRnMTBfdmFsdWUpCQkJCSAgICAgIFwKKyAJYnJlYWs7CQkJCQkJCQkgICAgICBcCisgICAgIH0gd2hpbGUgKF9fYnVpbHRpbl9leHBlY3QJCQkJCQkgICAgICBcCitAQCAtMzUwLDcgKzM1MCw3IEBACisgCQkJCQkJCQkJICAgICAgXAorICAgICAgZG8JCQkJCQkJCQkgICAgICBcCisgICAgICAgIHsJCQkJCQkJCSAgICAgIFwKKy0JIF9fYXRnMTFfb2xkdmFsID0gKl9fYXRnMTFfbWVtcDsJCQkJICAgICAgXAorKwkgX19hdGcxMV9vbGR2YWwgPSAqKHZvbGF0aWxlIF9fdHlwZW9mIChtZW0pKV9fYXRnMTFfbWVtcDsJICAgICAgXAorIAkgaWYgKF9fYnVpbHRpbl9leHBlY3QgKF9fYXRnMTFfb2xkdmFsIDw9IDAsIDApKQkJCSAgICAgIFwKKyAJICAgYnJlYWs7CQkJCQkJCSAgICAgIFwKKyAgICAgICAgfQkJCQkJCQkJICAgICAgXAorQEAgLTM4OSw3ICszODksNyBAQAorICAgICAgX190eXBlb2YgKCoobWVtKSkgX19hdGcxNF9tYXNrID0gKChfX3R5cGVvZiAoKihtZW0pKSkgMSA8PCAoYml0KSk7CSAgICAgIFwKKyAJCQkJCQkJCQkgICAgICBcCisgICAgICBkbwkJCQkJCQkJCSAgICAgIFwKKy0gICAgICAgX19hdGcxNF9vbGQgPSAoKl9fYXRnMTRfbWVtcCk7CQkJCQkgICAgICBcCisrICAgICAgIF9fYXRnMTRfb2xkID0gKCoodm9sYXRpbGUgX190eXBlb2YgKG1lbSkpX19hdGcxNF9tZW1wKTsJCSAgICAgIFwKKyAgICAgIHdoaWxlIChfX2J1aWx0aW5fZXhwZWN0CQkJCQkJICAgICAgXAorIAkgICAgKGF0b21pY19jb21wYXJlX2FuZF9leGNoYW5nZV9ib29sX2FjcSAoX19hdGcxNF9tZW1wLAkgICAgICBcCisgCQkJCQkJICAgX19hdGcxNF9vbGQgfCBfX2F0ZzE0X21hc2ssXAorQEAgLTQwNyw3ICs0MDcsNyBAQAorICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX2F0ZzE1X21hc2sgPSAobWFzayk7CQkJCSAgICAgIFwKKyAJCQkJCQkJCQkgICAgICBcCisgICAgIGRvCQkJCQkJCQkJICAgICAgXAorLSAgICAgIF9fYXRnMTVfb2xkID0gKCpfX2F0ZzE1X21lbXApOwkJCQkJICAgICAgXAorKyAgICAgIF9fYXRnMTVfb2xkID0gKCoodm9sYXRpbGUgX190eXBlb2YgKG1lbSkpX19hdGcxNV9tZW1wKTsJCSAgICAgIFwKKyAgICAgd2hpbGUgKF9fYnVpbHRpbl9leHBlY3QJCQkJCQkgICAgICBcCisgCSAgIChhdG9taWNfY29tcGFyZV9hbmRfZXhjaGFuZ2VfYm9vbF9hY3EgKF9fYXRnMTVfbWVtcCwJCSAgICAgIFwKKyAJCQkJCQkgIF9fYXRnMTVfb2xkICYgX19hdGcxNV9tYXNrLCBcCitAQCAtNDM5LDcgKzQzOSw3IEBACisgICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX2F0ZzE2X21hc2sgPSAobWFzayk7CQkJCSAgICAgIFwKKyAJCQkJCQkJCQkgICAgICBcCisgICAgICBkbwkJCQkJCQkJCSAgICAgIFwKKy0gICAgICAgX19hdGcxNl9vbGQgPSAoKl9fYXRnMTZfbWVtcCk7CQkJCQkgICAgICBcCisrICAgICAgIF9fYXRnMTZfb2xkID0gKCoodm9sYXRpbGUgX190eXBlb2YgKG1lbSkpX19hdGcxNl9tZW1wKTsJCSAgICAgIFwKKyAgICAgIHdoaWxlIChfX2J1aWx0aW5fZXhwZWN0CQkJCQkJICAgICAgXAorIAkgICAgKGF0b21pY19jb21wYXJlX2FuZF9leGNoYW5nZV9ib29sX2FjcSAoX19hdGcxNl9tZW1wLAkgICAgICBcCisgCQkJCQkJICAgX19hdGcxNl9vbGQgJiBfX2F0ZzE2X21hc2ssXAorQEAgLTQ1Nyw3ICs0NTcsNyBAQAorICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX2F0ZzE3X21hc2sgPSAobWFzayk7CQkJCSAgICAgIFwKKyAJCQkJCQkJCQkgICAgICBcCisgICAgIGRvCQkJCQkJCQkJICAgICAgXAorLSAgICAgIF9fYXRnMTdfb2xkID0gKCpfX2F0ZzE3X21lbXApOwkJCQkJICAgICAgXAorKyAgICAgIF9fYXRnMTdfb2xkID0gKCoodm9sYXRpbGUgX190eXBlb2YgKG1lbSkpX19hdGcxN19tZW1wKTsJCSAgICAgIFwKKyAgICAgd2hpbGUgKF9fYnVpbHRpbl9leHBlY3QJCQkJCQkgICAgICBcCisgCSAgIChhdG9taWNfY29tcGFyZV9hbmRfZXhjaGFuZ2VfYm9vbF9hY3EgKF9fYXRnMTdfbWVtcCwJCSAgICAgIFwKKyAJCQkJCQkgIF9fYXRnMTdfb2xkIHwgX19hdGcxN19tYXNrLCBcCitAQCAtNDczLDcgKzQ3Myw3IEBACisgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fYXRnMThfbWFzayA9IChtYXNrKTsJCQkJICAgICAgXAorIAkJCQkJCQkJCSAgICAgIFwKKyAgICAgZG8JCQkJCQkJCQkgICAgICBcCistICAgICAgX19hdGcxOF9vbGQgPSAoKl9fYXRnMThfbWVtcCk7CQkJCQkgICAgICBcCisrICAgICAgX19hdGcxOF9vbGQgPSAoKih2b2xhdGlsZSBfX3R5cGVvZiAobWVtKSlfX2F0ZzE4X21lbXApOwkJICAgICAgXAorICAgICB3aGlsZSAoX19idWlsdGluX2V4cGVjdAkJCQkJCSAgICAgIFwKKyAJICAgKGNhdG9taWNfY29tcGFyZV9hbmRfZXhjaGFuZ2VfYm9vbF9hY3EgKF9fYXRnMThfbWVtcCwJICAgICAgXAorIAkJCQkJCSAgIF9fYXRnMThfb2xkIHwgX19hdGcxOF9tYXNrLFwKK0BAIC00ODksNyArNDg5LDcgQEAKKyAgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fYXRnMTlfbWFzayA9IChtYXNrKTsJCQkJICAgICAgXAorIAkJCQkJCQkJCSAgICAgIFwKKyAgICAgIGRvCQkJCQkJCQkJICAgICAgXAorLSAgICAgICBfX2F0ZzE5X29sZCA9ICgqX19hdGcxOV9tZW1wKTsJCQkJCSAgICAgIFwKKysgICAgICAgX19hdGcxOV9vbGQgPSAoKih2b2xhdGlsZSBfX3R5cGVvZiAobWVtKSlfX2F0ZzE5X21lbXApOwkJICAgICAgXAorICAgICAgd2hpbGUgKF9fYnVpbHRpbl9leHBlY3QJCQkJCQkgICAgICBcCisgCSAgICAoYXRvbWljX2NvbXBhcmVfYW5kX2V4Y2hhbmdlX2Jvb2xfYWNxIChfX2F0ZzE5X21lbXAsCSAgICAgIFwKKyAJCQkJCQkgICBfX2F0ZzE5X29sZCB8IF9fYXRnMTlfbWFzayxcCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL25wdGwvTWFrZWZpbGUgZ2xpYmMtMi4xMC4xL25wdGwvTWFrZWZpbGUKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9ucHRsL01ha2VmaWxlCTIwMDgtMTEtMTIgMTQ6Mzg6MjMuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMC4xL25wdGwvTWFrZWZpbGUJMjAwOS0xMS0xMyAwMDo1MDoyNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNjIsOSArMjYyLDkgQEAKKyAjIEZpbGVzIHdoaWNoIG11c3Qgbm90IGJlIGxpbmtlZCB3aXRoIGxpYnB0aHJlYWQuCisgdGVzdHMtbm9saWJwdGhyZWFkID0gdHN0LXVubG9hZAorIAorLSMgVGhpcyBzZXRzIHRoZSBzdGFjayByZXNvdXJjZSBsaW1pdCB0byAxMDIza2IsIHdoaWNoIGlzIG5vdCBhIG11bHRpcGxlCistIyBvZiB0aGUgcGFnZSBzaXplIHNpbmNlIGV2ZXJ5IGFyY2hpdGVjdHVyZSdzIHBhZ2Ugc2l6ZSBpcyA+IDFrLgorLXRzdC1vZGRzdGFja2xpbWl0LUVOViA9IDsgdWxpbWl0IC1zIDEwMjM7CisrIyBUaGlzIHNldHMgdGhlIHN0YWNrIHJlc291cmNlIGxpbWl0IHRvIDgxOTNrYiwgd2hpY2ggaXMgbm90IGEgbXVsdGlwbGUKKysjIG9mIHRoZSBwYWdlIHNpemUgc2luY2UgZXZlcnkgYXJjaGl0ZWN0dXJlJ3MgcGFnZSBzaXplIGlzIDQwOTYgYnl0ZXMuCisrdHN0LW9kZHN0YWNrbGltaXQtRU5WID0gOyB1bGltaXQgLXMgODE5MzsKKyAKKyBkaXN0cmlidXRlID0gZWludHIuYyB0c3QtY2xlYW51cDRhdXguYworIAorQEAgLTQyMyw2ICs0MjMsMzUgQEAKKyBDRkxBR1MtdHN0LWNsZWFudXB4NC5jICs9IC1mZXhjZXB0aW9ucworIENGTEFHUy10c3Qtb25jZXgzLmMgKz0gLWZleGNlcHRpb25zCisgQ0ZMQUdTLXRzdC1vbmNleDQuYyArPSAtZmV4Y2VwdGlvbnMKKysKKytsZGZsYWdzLWxpYmdjY19zID0gLS1hcy1uZWVkZWQgLWxnY2NfcyAtLW5vLWFzLW5lZWRlZAorK0xERkxBR1MtdHN0LWNhbmNlbHgyICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4MyArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2FuY2VseDQgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNhbmNlbHg1ICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4NiArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2FuY2VseDcgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNhbmNlbHg4ICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4OSArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2FuY2VseDEwICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4MTEgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNhbmNlbHgxMiArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2FuY2VseDEzICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4MTQgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNhbmNlbHgxNSArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2FuY2VseDE2ICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4MTcgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNhbmNlbHgxOCArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2FuY2VseDIwICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4MjEgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNsZWFudXB4MCArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2xlYW51cHgxICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jbGVhbnVweDIgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNsZWFudXB4MyArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2xlYW51cHg0ICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1vbmNleDMgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LW9uY2V4NCArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrCisgQ0ZMQUdTLXRzdC1hbGlnbi5jICs9ICQoc3RhY2stYWxpZ24tdGVzdC1mbGFncykKKyBDRkxBR1MtdHN0LWFsaWduMy5jICs9ICQoc3RhY2stYWxpZ24tdGVzdC1mbGFncykKKyBDRkxBR1MtdHN0LWluaXRpYWxpemVyczEuYyA9IC1XIC1XYWxsIC1XZXJyb3IKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvbnB0bC9wdGhyZWFkX2JhcnJpZXJfd2FpdC5jIGdsaWJjLTIuMTAuMS9ucHRsL3B0aHJlYWRfYmFycmllcl93YWl0LmMKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9ucHRsL3B0aHJlYWRfYmFycmllcl93YWl0LmMJMjAwNy0wOC0wMSAwNjoxODo1MC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvbnB0bC9wdGhyZWFkX2JhcnJpZXJfd2FpdC5jCTIwMDktMTEtMTMgMDA6NTA6MjYuMDAwMDAwMDAwICswMTAwCitAQCAtNjQsNyArNjQsNyBAQAorICAgICAgIGRvCisgCWxsbF9mdXRleF93YWl0ICgmaWJhcnJpZXItPmN1cnJfZXZlbnQsIGV2ZW50LAorIAkJCWliYXJyaWVyLT5wcml2YXRlIF4gRlVURVhfUFJJVkFURV9GTEFHKTsKKy0gICAgICB3aGlsZSAoZXZlbnQgPT0gaWJhcnJpZXItPmN1cnJfZXZlbnQpOworKyAgICAgIHdoaWxlIChldmVudCA9PSAqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSZpYmFycmllci0+Y3Vycl9ldmVudCk7CisgICAgIH0KKyAKKyAgIC8qIE1ha2Ugc3VyZSB0aGUgaW5pdF9jb3VudCBpcyBzdG9yZWQgbG9jYWxseSBvciBpbiBhIHJlZ2lzdGVyLiAgKi8KK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvbnB0bC9zeXNkZXBzL3B0aHJlYWQvTWFrZWZpbGUgZ2xpYmMtMi4xMC4xL25wdGwvc3lzZGVwcy9wdGhyZWFkL01ha2VmaWxlCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvbnB0bC9zeXNkZXBzL3B0aHJlYWQvTWFrZWZpbGUJMjAwNi0wMi0yOCAwODowOTo0MS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEwLjEvbnB0bC9zeXNkZXBzL3B0aHJlYWQvTWFrZWZpbGUJMjAwOS0xMS0xMyAwMDo1MDoyNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC00MSw3ICs0MSw5IEBACisgCisgaWZlcSAoJChoYXZlLWZvcmNlZC11bndpbmQpLHllcykKKyB0ZXN0cyArPSB0c3QtbXF1ZXVlOHgKKytsZGZsYWdzLWxpYmdjY19zID0gLS1hcy1uZWVkZWQgLWxnY2NfcyAtLW5vLWFzLW5lZWRlZAorIENGTEFHUy10c3QtbXF1ZXVlOHguYyArPSAtZmV4Y2VwdGlvbnMKKytMREZMQUdTLXRzdC1tcXVldWU4eCArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpIAorIGVuZGlmCisgZW5kaWYKKyAKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvc3RkaW8tY29tbW9uL01ha2VmaWxlIGdsaWJjLTIuMTAuMS9zdGRpby1jb21tb24vTWFrZWZpbGUKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9zdGRpby1jb21tb24vTWFrZWZpbGUJMjAwOS0wNC0xMSAwNzoyOTo1Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvc3RkaW8tY29tbW9uL01ha2VmaWxlCTIwMDktMTEtMTMgMDA6NTA6MjYuMDAwMDAwMDAwICswMTAwCitAQCAtODIsNyArODIsNyBAQAorIAkkKFNIRUxMKSAtZSB0c3QtcHJpbnRmLnNoICQoY29tbW9uLW9ianBmeCkgJyQocnVuLXByb2dyYW0tcHJlZml4KScKKyBlbmRpZgorIAorLUNGTEFHUy12ZnByaW50Zi5jID0gLVduby11bmluaXRpYWxpemVkCisrQ0ZMQUdTLXZmcHJpbnRmLmMgPSAtV25vLXVuaW5pdGlhbGl6ZWQgLWZuby1kZWxheWVkLWJyYW5jaAorIENGTEFHUy12ZndwcmludGYuYyA9IC1Xbm8tdW5pbml0aWFsaXplZAorIENGTEFHUy10c3QtcHJpbnRmLmMgPSAtV25vLWZvcm1hdAorIENGTEFHUy10c3RkaW9taXNjLmMgPSAtV25vLWZvcm1hdAorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9zdW5ycGMvY2xudF91ZHAuYyBnbGliYy0yLjEwLjEvc3VucnBjL2NsbnRfdWRwLmMKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9zdW5ycGMvY2xudF91ZHAuYwkyMDA4LTA3LTI2IDEwOjQyOjQ0LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9zdW5ycGMvY2xudF91ZHAuYwkyMDA5LTExLTEzIDAwOjUwOjI2LjAwMDAwMDAwMCArMDEwMAorQEAgLTQ2Miw3ICs0NjIsNyBAQAorICAgICAgIHdoaWxlIChpbmxlbiA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOworICAgICAgIGlmIChpbmxlbiA8IDApCisgCXsKKy0JICBpZiAoZXJybm8gPT0gRVdPVUxEQkxPQ0spCisrCSAgaWYgKGVycm5vID09IEVXT1VMREJMT0NLIHx8IGVycm5vID09IEVBR0FJTikKKyAJICAgIGNvbnRpbnVlOworIAkgIGN1LT5jdV9lcnJvci5yZV9lcnJubyA9IGVycm5vOworIAkgIHJldHVybiAoY3UtPmN1X2Vycm9yLnJlX3N0YXR1cyA9IFJQQ19DQU5UUkVDVik7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzMyMC1ocHBhLXBpZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMzIwLWhwcGEtcGllLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNzUwN2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzMyMC1ocHBhLXBpZS5wYXRjaApAQCAtMCwwICsxLDI5IEBACisKKworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9ocHBhL2VsZi9zdGFydC5TIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9ocHBhL2VsZi9zdGFydC5TCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvaHBwYS9lbGYvc3RhcnQuUwkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9ocHBhL2VsZi9zdGFydC5TCTIwMDktMTEtMTMgMDA6NTA6MjguMDAwMDAwMDAwICswMTAwCitAQCAtOTYsMTYgKzk2LDE2IEBACisgCisgI2lmIFNIQVJFRAorIAkvKiBsb2FkIG1haW4gKDFzdCBhcmd1bWVudCkgKi8KKy0JYWRkaWwJTFInLkxwbWFpbiwgJXIxOQorLQlsZHcJUlInLkxwbWFpbiglcjEpLCAlcjI2CisrCWFkZGlsCUxUJy5McG1haW4sICVyMTkKKysJbGR3CVJUJy5McG1haW4oJXIxKSwgJXIyNgorIAlsZHcJMCglcjI2KSwlcjI2CisgCS8qIHZvaWQgKCppbml0KSAodm9pZCkgKDR0aCBhcmd1bWVudCkgKi8KKy0JYWRkaWwJTFInLkxwX19saWJjX2NzdV9pbml0LCAlcjE5CistCWxkdwlSUicuTHBfX2xpYmNfY3N1X2luaXQoJXIxKSwgJXIyMworKwlhZGRpbAlMVCcuTHBfX2xpYmNfY3N1X2luaXQsICVyMTkKKysJbGR3CVJUJy5McF9fbGliY19jc3VfaW5pdCglcjEpLCAlcjIzCisgCWxkdwkwKCVyMjMpLCAlcjIzCisgCS8qIHZvaWQgKCpmaW5pKSAodm9pZCkgKDV0aCBhcmd1bWVudCkgKi8KKy0JYWRkaWwJTFInLkxwX19saWJjX2NzdV9maW5pLCAlcjE5CistCWxkdwlSUicuTHBfX2xpYmNfY3N1X2ZpbmkoJXIxKSwgJXIyMgorKwlhZGRpbAlMVCcuTHBfX2xpYmNfY3N1X2ZpbmksICVyMTkKKysJbGR3CVJUJy5McF9fbGliY19jc3VfZmluaSglcjEpLCAlcjIyCisgCWxkdwkwKCVyMjIpLCAlcjIyCisgI2Vsc2UKKyAJLyogbG9hZCBtYWluICgxc3QgYXJndW1lbnQpICovCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3BvcnRzL3N5c2RlcHMvaHBwYS9lbGYvc3RhcnQuUyBnbGliYy0yLjEwLjEvcG9ydHMvc3lzZGVwcy9ocHBhL2VsZi9zdGFydC5TCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzMzMC1tNjhrLXN5cy11c2VyLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8zMzAtbTY4ay1zeXMtdXNlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTA3ZmNhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8zMzAtbTY4ay1zeXMtdXNlci5wYXRjaApAQCAtMCwwICsxLDk3IEBACitjb3BpZWQgZnJvbSBrZXJuZWwgYXMgaXQgaXMgc2FuaXRpemVkIG5vdworCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9tNjhrL3N5cy91c2VyLmggZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9tNjhrL3N5cy91c2VyLmgKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbTY4ay9zeXMvdXNlci5oCTIwMDktMDUtMTYgMTA6MzY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9tNjhrL3N5cy91c2VyLmgJMjAwOS0xMS0xMyAwMDo1MDozMS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xLDMgKzEsOTAgQEAKKysjaWZuZGVmIF9TWVNfVVNFUl9ICisrI2RlZmluZSBfU1lTX1VTRVJfSAorKworKy8qIENvcmUgZmlsZSBmb3JtYXQ6IFRoZSBjb3JlIGZpbGUgaXMgd3JpdHRlbiBpbiBzdWNoIGEgd2F5IHRoYXQgZ2RiCisrICAgY2FuIHVuZGVyc3RhbmQgaXQgYW5kIHByb3ZpZGUgdXNlZnVsIGluZm9ybWF0aW9uIHRvIHRoZSB1c2VyICh1bmRlcgorKyAgIGxpbnV4IHdlIHVzZSB0aGUgJ3RyYWQtY29yZScgYmZkKS4gIFRoZXJlIGFyZSBxdWl0ZSBhIG51bWJlciBvZgorKyAgIG9ic3RhY2xlcyB0byBiZWluZyBhYmxlIHRvIHZpZXcgdGhlIGNvbnRlbnRzIG9mIHRoZSBmbG9hdGluZyBwb2ludAorKyAgIHJlZ2lzdGVycywgYW5kIHVudGlsIHRoZXNlIGFyZSBzb2x2ZWQgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gdmlldyB0aGUKKysgICBjb250ZW50cyBvZiB0aGVtLiAgQWN0dWFsbHksIHlvdSBjYW4gcmVhZCBpbiB0aGUgY29yZSBmaWxlIGFuZCBsb29rIGF0CisrICAgdGhlIGNvbnRlbnRzIG9mIHRoZSB1c2VyIHN0cnVjdCB0byBmaW5kIG91dCB3aGF0IHRoZSBmbG9hdGluZyBwb2ludAorKyAgIHJlZ2lzdGVycyBjb250YWluLgorKyAgIFRoZSBhY3R1YWwgZmlsZSBjb250ZW50cyBhcmUgYXMgZm9sbG93czoKKysgICBVUEFHRTogMSBwYWdlIGNvbnNpc3Rpbmcgb2YgYSB1c2VyIHN0cnVjdCB0aGF0IHRlbGxzIGdkYiB3aGF0IGlzIHByZXNlbnQKKysgICBpbiB0aGUgZmlsZS4gIERpcmVjdGx5IGFmdGVyIHRoaXMgaXMgYSBjb3B5IG9mIHRoZSB0YXNrX3N0cnVjdCwgd2hpY2gKKysgICBpcyBjdXJyZW50bHkgbm90IHVzZWQgYnkgZ2RiLCBidXQgaXQgbWF5IGNvbWUgaW4gdXNlZnVsIGF0IHNvbWUgcG9pbnQuCisrICAgQWxsIG9mIHRoZSByZWdpc3RlcnMgYXJlIHN0b3JlZCBhcyBwYXJ0IG9mIHRoZSB1cGFnZS4gIFRoZSB1cGFnZSBzaG91bGQKKysgICBhbHdheXMgYmUgb25seSBvbmUgcGFnZS4KKysgICBEQVRBOiBUaGUgZGF0YSBhcmVhIGlzIHN0b3JlZC4gIFdlIHVzZSBjdXJyZW50LT5lbmRfdGV4dCB0bworKyAgIGN1cnJlbnQtPmJyayB0byBwaWNrIHVwIGFsbCBvZiB0aGUgdXNlciB2YXJpYWJsZXMsIHBsdXMgYW55IG1lbW9yeQorKyAgIHRoYXQgbWF5IGhhdmUgYmVlbiBtYWxsb2NlZC4gIE5vIGF0dGVtcHQgaXMgbWFkZSB0byBkZXRlcm1pbmUgaWYgYSBwYWdlCisrICAgaXMgZGVtYW5kLXplcm8gb3IgaWYgYSBwYWdlIGlzIHRvdGFsbHkgdW51c2VkLCB3ZSBqdXN0IGNvdmVyIHRoZSBlbnRpcmUKKysgICByYW5nZS4gIEFsbCBvZiB0aGUgYWRkcmVzc2VzIGFyZSByb3VuZGVkIGluIHN1Y2ggYSB3YXkgdGhhdCBhbiBpbnRlZ3JhbAorKyAgIG51bWJlciBvZiBwYWdlcyBpcyB3cml0dGVuLgorKyAgIFNUQUNLOiBXZSBuZWVkIHRoZSBzdGFjayBpbmZvcm1hdGlvbiBpbiBvcmRlciB0byBnZXQgYSBtZWFuaW5nZnVsCisrICAgYmFja3RyYWNlLiAgV2UgbmVlZCB0byB3cml0ZSB0aGUgZGF0YSBmcm9tIChlc3ApIHRvCisrICAgY3VycmVudC0+c3RhcnRfc3RhY2ssIHNvIHdlIHJvdW5kIGVhY2ggb2YgdGhlc2Ugb2ZmIGluIG9yZGVyIHRvIGJlIGFibGUKKysgICB0byB3cml0ZSBhbiBpbnRlZ2VyIG51bWJlciBvZiBwYWdlcy4KKysgICBUaGUgbWluaW11bSBjb3JlIGZpbGUgc2l6ZSBpcyAzIHBhZ2VzLCBvciAxMjI4OCBieXRlcy4KKysqLworKworK3N0cnVjdCB1c2VyX202OGtmcF9zdHJ1Y3QgeworKwl1bnNpZ25lZCBsb25nICBmcHJlZ3NbOCozXTsJLyogZnAwLWZwNyByZWdpc3RlcnMgKi8KKysJdW5zaWduZWQgbG9uZyAgZnBjbnRsWzNdOwkvKiBmcCBjb250cm9sIHJlZ3MgKi8KKyt9OworKworKy8qIFRoaXMgaXMgdGhlIG9sZCBsYXlvdXQgb2YgInN0cnVjdCBwdF9yZWdzIiBhcyBvZiBMaW51eCAxLngsIGFuZAorKyAgIGlzIHN0aWxsIHRoZSBsYXlvdXQgdXNlZCBieSB1c2VyICh0aGUgbmV3IHB0X3JlZ3MgZG9lc24ndCBoYXZlCisrICAgYWxsIHJlZ2lzdGVycykuICovCisrc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QgeworKwlsb25nIGQxLGQyLGQzLGQ0LGQ1LGQ2LGQ3OworKwlsb25nIGEwLGExLGEyLGEzLGE0LGE1LGE2OworKwlsb25nIGQwOworKwlsb25nIHVzcDsKKysJbG9uZyBvcmlnX2QwOworKwlzaG9ydCBzdGthZGo7CisrCXNob3J0IHNyOworKwlsb25nIHBjOworKwlzaG9ydCBmbXR2ZWM7CisrCXNob3J0IF9fZmlsbDsKKyt9OworKworKworKy8qIFdoZW4gdGhlIGtlcm5lbCBkdW1wcyBjb3JlLCBpdCBzdGFydHMgYnkgZHVtcGluZyB0aGUgdXNlciBzdHJ1Y3QgLQorKyAgIHRoaXMgd2lsbCBiZSB1c2VkIGJ5IGdkYiB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBkYXRhIGFuZCBzdGFjayBzZWdtZW50cworKyAgIGFyZSB3aXRoaW4gdGhlIGZpbGUsIGFuZCB3aGF0IHZpcnR1YWwgYWRkcmVzc2VzIHRvIHVzZS4gKi8KKytzdHJ1Y3QgdXNlcnsKKysvKiBXZSBzdGFydCB3aXRoIHRoZSByZWdpc3RlcnMsIHRvIG1pbWljIHRoZSB3YXkgdGhhdCAibWVtb3J5IiBpcyByZXR1cm5lZAorKyAgIGZyb20gdGhlIHB0cmFjZSgzLC4uLikgZnVuY3Rpb24uICAqLworKyAgc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QgcmVnczsJLyogV2hlcmUgdGhlIHJlZ2lzdGVycyBhcmUgYWN0dWFsbHkgc3RvcmVkICovCisrLyogcHRyYWNlIGRvZXMgbm90IHlldCBzdXBwbHkgdGhlc2UuICBTb21lZGF5Li4uLiAqLworKyAgaW50IHVfZnB2YWxpZDsJCS8qIFRydWUgaWYgbWF0aCBjby1wcm9jZXNzb3IgYmVpbmcgdXNlZC4gKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciB0aGlzIG1lc3MuIE5vdCB5ZXQgdXNlZC4gKi8KKysgIHN0cnVjdCB1c2VyX202OGtmcF9zdHJ1Y3QgbTY4a2ZwOyAvKiBNYXRoIENvLXByb2Nlc3NvciByZWdpc3RlcnMuICovCisrLyogVGhlIHJlc3Qgb2YgdGhpcyBqdW5rIGlzIHRvIGhlbHAgZ2RiIGZpZ3VyZSBvdXQgd2hhdCBnb2VzIHdoZXJlICovCisrICB1bnNpZ25lZCBsb25nIGludCB1X3RzaXplOwkvKiBUZXh0IHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLworKyAgdW5zaWduZWQgbG9uZyBpbnQgdV9kc2l6ZTsJLyogRGF0YSBzZWdtZW50IHNpemUgKHBhZ2VzKS4gKi8KKysgIHVuc2lnbmVkIGxvbmcgaW50IHVfc3NpemU7CS8qIFN0YWNrIHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLworKyAgdW5zaWduZWQgbG9uZyBzdGFydF9jb2RlOyAgICAgLyogU3RhcnRpbmcgdmlydHVhbCBhZGRyZXNzIG9mIHRleHQuICovCisrICB1bnNpZ25lZCBsb25nIHN0YXJ0X3N0YWNrOwkvKiBTdGFydGluZyB2aXJ0dWFsIGFkZHJlc3Mgb2Ygc3RhY2sgYXJlYS4KKysJCQkJICAgVGhpcyBpcyBhY3R1YWxseSB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKKysJCQkJICAgdGhlIHRvcCBvZiB0aGUgc3RhY2sgaXMgYWx3YXlzIGZvdW5kIGluIHRoZQorKwkJCQkgICBlc3AgcmVnaXN0ZXIuICAqLworKyAgbG9uZyBpbnQgc2lnbmFsOwkJLyogU2lnbmFsIHRoYXQgY2F1c2VkIHRoZSBjb3JlIGR1bXAuICovCisrICBpbnQgcmVzZXJ2ZWQ7CQkJLyogTm8gbG9uZ2VyIHVzZWQgKi8KKysgIHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0ICp1X2FyMDsKKysJCQkJLyogVXNlZCBieSBnZGIgdG8gaGVscCBmaW5kIHRoZSB2YWx1ZXMgZm9yICovCisrCQkJCS8qIHRoZSByZWdpc3RlcnMuICovCisrICBzdHJ1Y3QgdXNlcl9tNjhrZnBfc3RydWN0KiB1X2Zwc3RhdGU7CS8qIE1hdGggQ28tcHJvY2Vzc29yIHBvaW50ZXIuICovCisrICB1bnNpZ25lZCBsb25nIG1hZ2ljOwkJLyogVG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBjb3JlIGZpbGUgKi8KKysgIGNoYXIgdV9jb21tWzMyXTsJCS8qIFVzZXIgY29tbWFuZCB0aGF0IHdhcyByZXNwb25zaWJsZSAqLworK307CisrI2RlZmluZSBOQlBHIDQwOTYKKysjZGVmaW5lIFVQQUdFUyAxCisrI2RlZmluZSBIT1NUX1RFWFRfU1RBUlRfQUREUiAodS5zdGFydF9jb2RlKQorKyNkZWZpbmUgSE9TVF9TVEFDS19FTkRfQUREUiAodS5zdGFydF9zdGFjayArIHUudV9zc2l6ZSAqIE5CUEcpCisrCisrI2VuZGlmCisgLyogQ29weXJpZ2h0IChDKSAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorIAorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9tNjhrL3N5cy91c2VyLmggZ2xpYmMtMi4xMC4xL3BvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L202OGsvc3lzL3VzZXIuaApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8zNDAtZGxfZXhlY3N0YWNrLVBhWC1zdXBwb3J0LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8zNDAtZGxfZXhlY3N0YWNrLVBhWC1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYTk3NTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzM0MC1kbF9leGVjc3RhY2stUGFYLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSw2NiBAQAorCVdpdGggbGF0ZXN0IHZlcnNpb25zIG9mIGdsaWJjLCBhIGxvdCBvZiBhcHBzIGZhaWxlZCBvbiBhIFBhWCBlbmFibGVkCisJc3lzdGVtIHdpdGg6CisJCSBjYW5ub3QgZW5hYmxlIGV4ZWN1dGFibGUgc3RhY2sgYXMgc2hhcmVkIG9iamVjdCByZXF1aXJlczogUGVybWlzc2lvbiBkZW5pZWQKKwkKKwlUaGlzIGlzIGR1ZSB0byBQYVggJ2V4ZWMtcHJvdGVjdGluZycgdGhlIHN0YWNrLCBhbmQgbGQuc28gdGhlbiB0cnlpbmcKKwl0byBtYWtlIHRoZSBzdGFjayBleGVjdXRhYmxlIGR1ZSB0byBzb21lIGxpYnJhcmllcyBub3QgY29udGFpbmluZyB0aGUKKwlQVF9HTlVfU1RBQ0sgc2VjdGlvbi4gIEJ1ZyAjMzI5NjAuICA8YXphcmFoQGdlbnRvby5vcmc+ICgxMiBOb3YgMjAwMykuCisKKwlQYXRjaCBhbHNvIE5QVEwuIEJ1ZyAjMTE2MDg2LiA8a2V2cXVpbm5AZ2VudG9vLm9yZz4gKDIwIERlYyAyMDA1KS4KKworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9ucHRsL2FsbG9jYXRlc3RhY2suYyBnbGliYy0yLjEwLjEvbnB0bC9hbGxvY2F0ZXN0YWNrLmMKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9ucHRsL2FsbG9jYXRlc3RhY2suYwkyMDA5LTAxLTI5IDIxOjM0OjE2LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTAuMS9ucHRsL2FsbG9jYXRlc3RhY2suYwkyMDA5LTExLTEzIDAwOjUwOjMzLjAwMDAwMDAwMCArMDEwMAorQEAgLTMyNiw3ICszMjYsOCBAQAorICMgZXJyb3IgIkRlZmluZSBlaXRoZXIgX1NUQUNLX0dST1dTX0RPV04gb3IgX1NUQUNLX0dST1dTX1VQIgorICNlbmRpZgorICAgaWYgKG1wcm90ZWN0IChzdGFjaywgbGVuLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIHwgUFJPVF9FWEVDKSAhPSAwKQorLSAgICByZXR1cm4gZXJybm87CisrICAgIGlmIChlcnJubyAhPSBFQUNDRVMpIC8qIFBBWCBpcyBlbmFibGVkICovCisrICAgIAlyZXR1cm4gZXJybm87CisgCisgICByZXR1cm4gMDsKKyB9CitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2RsLWV4ZWNzdGFjay5jIGdsaWJjLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9kbC1leGVjc3RhY2suYworLS0tIGdsaWJjLTIuMTAuMS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2RsLWV4ZWNzdGFjay5jCTIwMDYtMDEtMDggMDk6MjE6MTUuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2RsLWV4ZWNzdGFjay5jCTIwMDktMTEtMTMgMDA6NTA6MzMuMDAwMDAwMDAwICswMTAwCitAQCAtNjMsNyArNjMsMTAgQEAKKyAgICAgICBlbHNlCisgIyBlbmRpZgorIAl7CistCSAgcmVzdWx0ID0gZXJybm87CisrCSAgaWYgKGVycm5vID09IEVBQ0NFUykgIC8qIFBBWCBpcyBlbmFibGVkICovCisrCSAgICByZXN1bHQgPSAwOworKwkgIGVsc2UKKysJICAgIHJlc3VsdCA9IGVycm5vOworIAkgIGdvdG8gb3V0OworIAl9CisgICAgIH0KK0BAIC04OSw3ICs5MiwxMiBAQAorIAlwYWdlIC09IHNpemU7CisgICAgICAgZWxzZQorIAl7CistCSAgaWYgKGVycm5vICE9IEVOT01FTSkJLyogVW5leHBlY3RlZCBmYWlsdXJlIG1vZGUuICAqLworKwkgIGlmIChlcnJubyA9PSBFQUNDRVMpCQkvKiBQQVggaXMgZW5hYmxlZCAqLworKwkgICAgeworKwkgICAgICByZXN1bHQgPSAwOworKwkgICAgICBnb3RvIG91dDsKKysJICAgIH0KKysJICBlbHNlIGlmIChlcnJubyAhPSBFTk9NRU0pCS8qIFVuZXhwZWN0ZWQgZmFpbHVyZSBtb2RlLiAgKi8KKyAJICAgIHsKKyAJICAgICAgcmVzdWx0ID0gZXJybm87CisgCSAgICAgIGdvdG8gb3V0OworQEAgLTExNSw3ICsxMjMsMTIgQEAKKyAJcGFnZSArPSBzaXplOworICAgICAgIGVsc2UKKyAJeworLQkgIGlmIChlcnJubyAhPSBFTk9NRU0pCS8qIFVuZXhwZWN0ZWQgZmFpbHVyZSBtb2RlLiAgKi8KKysJICBpZiAoZXJybm8gPT0gRUFDQ0VTKQkJLyogUEFYIGlzIGVuYWJsZWQgKi8KKysJICAgIHsKKysJICAgICAgcmVzdWx0ID0gMDsKKysJICAgICAgZ290byBvdXQ7CisrCSAgICB9CisrCSAgZWxzZSBpZiAoZXJybm8gIT0gRU5PTUVNKQkvKiBVbmV4cGVjdGVkIGZhaWx1cmUgbW9kZS4gICovCisgCSAgICB7CisgCSAgICAgIHJlc3VsdCA9IGVycm5vOworIAkgICAgICBnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMzUwLXByZTIwMDQwMTE3LXB0X3BheC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMzUwLXByZTIwMDQwMTE3LXB0X3BheC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGNlZDM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8zNTAtcHJlMjAwNDAxMTctcHRfcGF4LnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKKworCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2VsZi9lbGYuaCBnbGliYy0yLjEwLjEvZWxmL2VsZi5oCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvZWxmL2VsZi5oCTIwMDktMDQtMTUgMDI6MTU6NTQuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL2VsZi9lbGYuaAkyMDA5LTExLTEzIDAwOjUwOjM1LjAwMDAwMDAwMCArMDEwMAorQEAgLTU3Miw2ICs1NzIsNyBAQAorICNkZWZpbmUgUFRfR05VX0VIX0ZSQU1FCTB4NjQ3NGU1NTAJLyogR0NDIC5laF9mcmFtZV9oZHIgc2VnbWVudCAqLworICNkZWZpbmUgUFRfR05VX1NUQUNLCTB4NjQ3NGU1NTEJLyogSW5kaWNhdGVzIHN0YWNrIGV4ZWN1dGFiaWxpdHkgKi8KKyAjZGVmaW5lIFBUX0dOVV9SRUxSTwkweDY0NzRlNTUyCS8qIFJlYWQtb25seSBhZnRlciByZWxvY2F0aW9uICovCisrI2RlZmluZSBQVF9QQVhfRkxBR1MJMHg2NTA0MTU4MAkvKiBJbmRpY2F0ZXMgUGFYIGZsYWcgbWFya2luZ3MgKi8KKyAjZGVmaW5lIFBUX0xPU1VOVwkweDZmZmZmZmZhCisgI2RlZmluZSBQVF9TVU5XQlNTCTB4NmZmZmZmZmEJLyogU3VuIFNwZWNpZmljIHNlZ21lbnQgKi8KKyAjZGVmaW5lIFBUX1NVTldTVEFDSwkweDZmZmZmZmZiCS8qIFN0YWNrIHNlZ21lbnQgKi8KK0BAIC01ODUsNiArNTg2LDE4IEBACisgI2RlZmluZSBQRl9YCQkoMSA8PCAwKQkvKiBTZWdtZW50IGlzIGV4ZWN1dGFibGUgKi8KKyAjZGVmaW5lIFBGX1cJCSgxIDw8IDEpCS8qIFNlZ21lbnQgaXMgd3JpdGFibGUgKi8KKyAjZGVmaW5lIFBGX1IJCSgxIDw8IDIpCS8qIFNlZ21lbnQgaXMgcmVhZGFibGUgKi8KKysjZGVmaW5lIFBGX1BBR0VFWEVDCSgxIDw8IDQpCS8qIEVuYWJsZSAgUEFHRUVYRUMgKi8KKysjZGVmaW5lIFBGX05PUEFHRUVYRUMJKDEgPDwgNSkJLyogRGlzYWJsZSBQQUdFRVhFQyAqLworKyNkZWZpbmUgUEZfU0VHTUVYRUMJKDEgPDwgNikJLyogRW5hYmxlICBTRUdNRVhFQyAqLworKyNkZWZpbmUgUEZfTk9TRUdNRVhFQwkoMSA8PCA3KQkvKiBEaXNhYmxlIFNFR01FWEVDICovCisrI2RlZmluZSBQRl9NUFJPVEVDVAkoMSA8PCA4KQkvKiBFbmFibGUgIE1QUk9URUNUICovCisrI2RlZmluZSBQRl9OT01QUk9URUNUCSgxIDw8IDkpCS8qIERpc2FibGUgTVBST1RFQ1QgKi8KKysjZGVmaW5lIFBGX1JBTkRFWEVDCSgxIDw8IDEwKQkvKiBFbmFibGUgIFJBTkRFWEVDICovCisrI2RlZmluZSBQRl9OT1JBTkRFWEVDCSgxIDw8IDExKQkvKiBEaXNhYmxlIFJBTkRFWEVDICovCisrI2RlZmluZSBQRl9FTVVUUkFNUAkoMSA8PCAxMikJLyogRW5hYmxlICBFTVVUUkFNUCAqLworKyNkZWZpbmUgUEZfTk9FTVVUUkFNUAkoMSA8PCAxMykJLyogRGlzYWJsZSBFTVVUUkFNUCAqLworKyNkZWZpbmUgUEZfUkFORE1NQVAJKDEgPDwgMTQpCS8qIEVuYWJsZSAgUkFORE1NQVAgKi8KKysjZGVmaW5lIFBGX05PUkFORE1NQVAJKDEgPDwgMTUpCS8qIERpc2FibGUgUkFORE1NQVAgKi8KKyAjZGVmaW5lIFBGX01BU0tPUwkweDBmZjAwMDAwCS8qIE9TLXNwZWNpZmljICovCisgI2RlZmluZSBQRl9NQVNLUFJPQwkweGYwMDAwMDAwCS8qIFByb2Nlc3Nvci1zcGVjaWZpYyAqLworIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8zNjAtdGVzdHMtc2FuZGJveC1saWJkbC1wYXRocy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMzYwLXRlc3RzLXNhbmRib3gtbGliZGwtcGF0aHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFjOWRkYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMzYwLXRlc3RzLXNhbmRib3gtbGliZGwtcGF0aHMucGF0Y2gKQEAgLTAsMCArMSwxOTMgQEAKK3doZW4gZ2xpYmMgcnVucyBpdHMgdGVzdHMsIGl0IGRvZXMgc28gYnkgaW52b2tpbmcgdGhlIGxvY2FsIGxpYnJhcnkgbG9hZGVyLgoraW4gR2VudG9vLCB3ZSBidWlsZC9ydW4gaW5zaWRlIG9mIG91ciAic2FuZGJveCIgd2hpY2ggaXRzZWxmIGlzIGxpbmtlZCBhZ2FpbnN0CitsaWJkbCAoc28gdGhhdCBpdCBjYW4gbG9hZCBsaWJyYXJpZXMgYW5kIHB1bGwgb3V0IHN5bWJvbHMpLiAgdGhlIHRyb3VibGUKK2lzIHRoYXQgd2hlbiB5b3UgdXBncmFkZSBmcm9tIGFuIG9sZGVyIGdsaWJjIHRvIHRoZSBuZXcgb25lLCBvZnRlbiB0aW1lcworaW50ZXJuYWwgc3ltYm9scyBjaGFuZ2UgbmFtZSBvciBhYmkuICB0aGlzIGlzIG5vcm1hbGx5IE9LIGFzIHlvdSBjYW5ub3QgdXNlCitsaWJjLnNvIGZyb20gc2F5IHZlcnNpb24gMi4zLjYgYnV0IGxpYnB0aHJlYWQuc28gZnJvbSBzYXkgdmVyc2lvbiAyLjUsIHNvCit3ZSBhbHdheXMgc2F5ICJrZWVwIGFsbCBvZiB0aGUgZ2xpYmMgbGlicmFyaWVzIGZyb20gdGhlIHNhbWUgYnVpbGQiLiAgYnV0Cit3aGVuIGdsaWJjIHJ1bnMgaXRzIHRlc3RzLCBpdCB1c2VzIGR5bmFtaWMgcGF0aHMgdG8gcG9pbnQgdG8gaXRzIG5ldyBsb2NhbAorY29waWVzIG9mIGxpYnJhcmllcy4gIGlmIHRoZSB0ZXN0IGRvZXNudCB1c2UgbGliZGwsIHRoZW4gZ2xpYmMgZG9lc250IGFkZAoraXRzIHBhdGgsIGFuZCB3aGVuIHNhbmRib3ggdHJpZ2dlcnMgdGhlIGxvYWRpbmcgb2YgbGliZGwsIGdsaWJjIGRvZXMgc28KK2Zyb20gdGhlIGhvc3Qgc3lzdGVtIHN5c3RlbS4gIHRoaXMgZ2V0cyB1cyBpbnRvIHRoZSBjYXNlIG9mIGFsbCBsaWJyYXJpZXMKK2FyZSBmcm9tIHRoZSBsb2NhbGx5IGNvbXBpbGVkIHZlcnNpb24gb2YgZ2xpYmMgZXhjZXB0IGZvciBsaWJkbC5zby4KKworRml4IGJ5IFdvcm1vCisKK2h0dHA6Ly9idWdzLmdlbnRvby5vcmcvNTY4OTgKKworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9ncnAvdHN0X2ZnZXRncmVudC5zaCBnbGliYy0yLjEwLjEvZ3JwL3RzdF9mZ2V0Z3JlbnQuc2gKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9ncnAvdHN0X2ZnZXRncmVudC5zaAkyMDAxLTA3LTA2IDA2OjU0OjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9ncnAvdHN0X2ZnZXRncmVudC5zaAkyMDA5LTExLTEzIDAwOjUwOjM3LjAwMDAwMDAwMCArMDEwMAorQEAgLTI0LDcgKzI0LDggQEAKKyBydGxkX2luc3RhbGxlZF9uYW1lPSQxOyBzaGlmdAorIAorIHRlc3RvdXQ9JHtjb21tb25fb2JqcGZ4fS9ncnAvdHN0X2ZnZXRncmVudC5vdXQKKy1saWJyYXJ5X3BhdGg9JHtjb21tb25fb2JqcGZ4fQorKyMgbWFrZSBzdXJlIGxpYmRsIGlzIGFsc28gaW4gcGF0aCBpbiBjYXNlIHNhbmRib3ggaXMgaW4gdXNlCisrbGlicmFyeV9wYXRoPSR7Y29tbW9uX29ianBmeH06JHtjb21tb25fb2JqcGZ4fS9kbGZjbgorIAorIHJlc3VsdD0wCisgCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2ljb252ZGF0YS9ydW4taWNvbnYtdGVzdC5zaCBnbGliYy0yLjEwLjEvaWNvbnZkYXRhL3J1bi1pY29udi10ZXN0LnNoCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvaWNvbnZkYXRhL3J1bi1pY29udi10ZXN0LnNoCTIwMDgtMDUtMTUgMDM6NTk6NDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL2ljb252ZGF0YS9ydW4taWNvbnYtdGVzdC5zaAkyMDA5LTExLTEzIDAwOjUwOjM3LjAwMDAwMDAwMCArMDEwMAorQEAgLTM0LDcgKzM0LDcgQEAKKyBleHBvcnQgR0NPTlZfUEFUSAorIAorICMgV2UgaGF2ZSB0byBoYXZlIHNvbWUgZGlyZWN0b3JpZXMgaW4gdGhlIGxpYnJhcnkgcGF0aC4KKy1MSUJQQVRIPSRjb2RpcjokY29kaXIvaWNvbnZkYXRhCisrTElCUEFUSD0kY29kaXI6JGNvZGlyL2ljb252ZGF0YTokY29kaXIvZGxmY24KKyAKKyAjIEhvdyB0aGUgc3RhcnQgdGhlIGljb252KDEpIHByb2dyYW0uCisgSUNPTlY9JyRjb2Rpci9lbGYvbGQuc28gLS1saWJyYXJ5LXBhdGggJExJQlBBVEggLS1pbmhpYml0LXJwYXRoICR7ZnJvbX0uc28gXAorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9pY29udmRhdGEvdHN0LXRhYmxlLnNoIGdsaWJjLTIuMTAuMS9pY29udmRhdGEvdHN0LXRhYmxlLnNoCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvaWNvbnZkYXRhL3RzdC10YWJsZS5zaAkyMDAyLTA0LTI0IDIzOjM5OjM1LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9pY29udmRhdGEvdHN0LXRhYmxlLnNoCTIwMDktMTEtMTMgMDA6NTA6MzcuMDAwMDAwMDAwICswMTAwCitAQCAtNTksOCArNTksMTEgQEAKKyAgIGlycmV2ZXJzaWJsZT0ke2NoYXJzZXR9LmlycmV2ZXJzaWJsZQorIGZpCisgCisrIyBtYWtlIHN1cmUgbGliZGwgaXMgYWxzbyBpbiBwYXRoIGluIGNhc2Ugc2FuZGJveCBpcyBpbiB1c2UKKytsaWJyYXJ5X3BhdGg9JHtjb21tb25fb2JqcGZ4fToke2NvbW1vbl9vYmpwZnh9L2RsZmNuCisrCisgIyBpY29udiBpbiBvbmUgZGlyZWN0aW9uLgorLSR7Y29tbW9uX29ianBmeH1lbGYvbGQuc28gLS1saWJyYXJ5LXBhdGggJGNvbW1vbl9vYmpwZnggXAorKyR7Y29tbW9uX29ianBmeH1lbGYvbGQuc28gLS1saWJyYXJ5LXBhdGggJGxpYnJhcnlfcGF0aCBcCisgJHtvYmpwZnh9dHN0LXRhYmxlLWZyb20gJHtjaGFyc2V0fSBcCisgICA+ICR7b2JqcGZ4fXRzdC0ke2NoYXJzZXR9LnRhYmxlCisgCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2ludGwvdHN0LWNvZGVzZXQuc2ggZ2xpYmMtMi4xMC4xL2ludGwvdHN0LWNvZGVzZXQuc2gKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9pbnRsL3RzdC1jb2Rlc2V0LnNoCTIwMDUtMDQtMDYgMDQ6MTg6MzUuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL2ludGwvdHN0LWNvZGVzZXQuc2gJMjAwOS0xMS0xMyAwMDo1MDozNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zNyw2ICszNyw5IEBACisgTE9DUEFUSD0ke2NvbW1vbl9vYmpwZnh9bG9jYWxlZGF0YQorIGV4cG9ydCBMT0NQQVRICisgCisrIyBtYWtlIHN1cmUgbGliZGwgaXMgYWxzbyBpbiBwYXRoIGluIGNhc2Ugc2FuZGJveCBpcyBpbiB1c2UKKytsaWJyYXJ5X3BhdGg9JHtjb21tb25fb2JqcGZ4fToke2NvbW1vbl9vYmpwZnh9L2RsZmNuCisrCisgJHtjb21tb25fb2JqcGZ4fWVsZi9sZC5zbyAtLWxpYnJhcnktcGF0aCAkY29tbW9uX29ianBmeCBcCisgJHtvYmpwZnh9dHN0LWNvZGVzZXQgPiAke29ianBmeH10c3QtY29kZXNldC5vdXQKKyAKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvaW50bC90c3QtZ2V0dGV4dC5zaCBnbGliYy0yLjEwLjEvaW50bC90c3QtZ2V0dGV4dC5zaAorLS0tIGdsaWJjLTIuMTAuMS5vcmlnL2ludGwvdHN0LWdldHRleHQuc2gJMjAwNC0wOC0xNSAyMToyODoxOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvaW50bC90c3QtZ2V0dGV4dC5zaAkyMDA5LTExLTEzIDAwOjUwOjM3LjAwMDAwMDAwMCArMDEwMAorQEAgLTUxLDkgKzUxLDEyIEBACisgTE9DUEFUSD0ke2NvbW1vbl9vYmpwZnh9bG9jYWxlZGF0YQorIGV4cG9ydCBMT0NQQVRICisgCisrIyBtYWtlIHN1cmUgbGliZGwgaXMgYWxzbyBpbiBwYXRoIGluIGNhc2Ugc2FuZGJveCBpcyBpbiB1c2UKKytsaWJyYXJ5X3BhdGg9JHtjb21tb25fb2JqcGZ4fToke2NvbW1vbl9vYmpwZnh9L2RsZmNuCisrCisgIyBOb3cgcnVuIHRoZSB0ZXN0LgorIE1BTExPQ19UUkFDRT0kbWFsbG9jX3RyYWNlIExPQ1BBVEg9JHtvYmpwZnh9bG9jYWxlZGlyOiRMT0NQQVRIIFwKKy0ke2NvbW1vbl9vYmpwZnh9ZWxmL2xkLnNvIC0tbGlicmFyeS1wYXRoICRjb21tb25fb2JqcGZ4IFwKKyske2NvbW1vbl9vYmpwZnh9ZWxmL2xkLnNvIC0tbGlicmFyeS1wYXRoICRsaWJyYXJ5X3BhdGggXAorICR7b2JqcGZ4fXRzdC1nZXR0ZXh0ID4gJHtvYmpwZnh9dHN0LWdldHRleHQub3V0ICR7b2JqcGZ4fWRvbWFpbmRpcgorIAorIGV4aXQgJD8KK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvaW50bC90c3QtZ2V0dGV4dDIuc2ggZ2xpYmMtMi4xMC4xL2ludGwvdHN0LWdldHRleHQyLnNoCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvaW50bC90c3QtZ2V0dGV4dDIuc2gJMjAwNS0wNS0wNCAxOTo1NDo0OC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvaW50bC90c3QtZ2V0dGV4dDIuc2gJMjAwOS0xMS0xMyAwMDo1MDozNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC02NSw4ICs2NSwxMSBAQAorIExPQ1BBVEg9JHtvYmpwZnh9ZG9tYWluZGlyCisgZXhwb3J0IExPQ1BBVEgKKyAKKysjIG1ha2Ugc3VyZSBsaWJkbCBpcyBhbHNvIGluIHBhdGggaW4gY2FzZSBzYW5kYm94IGlzIGluIHVzZQorK2xpYnJhcnlfcGF0aD0ke2NvbW1vbl9vYmpwZnh9OiR7Y29tbW9uX29ianBmeH0vZGxmY24KKysKKyAjIE5vdyBydW4gdGhlIHRlc3QuCistJHtjb21tb25fb2JqcGZ4fWVsZi9sZC5zbyAtLWxpYnJhcnktcGF0aCAkY29tbW9uX29ianBmeCBcCisrJHtjb21tb25fb2JqcGZ4fWVsZi9sZC5zbyAtLWxpYnJhcnktcGF0aCAkbGlicmFyeV9wYXRoIFwKKyAke29ianBmeH10c3QtZ2V0dGV4dDIgPiAke29ianBmeH10c3QtZ2V0dGV4dDIub3V0ICR7b2JqcGZ4fWRvbWFpbmRpciAmJgorIGNtcCAke29ianBmeH10c3QtZ2V0dGV4dDIub3V0IC0gPDxFT0YKKyBTdHJpbmcxIC0gTGFuZzE6IDFzdCBzdHJpbmcKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvaW50bC90c3QtdHJhbnNsaXQuc2ggZ2xpYmMtMi4xMC4xL2ludGwvdHN0LXRyYW5zbGl0LnNoCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvaW50bC90c3QtdHJhbnNsaXQuc2gJMjAwNS0wNS0wNCAxOTo1NjoxMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvaW50bC90c3QtdHJhbnNsaXQuc2gJMjAwOS0xMS0xMyAwMDo1MDozNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zNiw3ICszNiwxMCBAQAorIExPQ1BBVEg9JHtjb21tb25fb2JqcGZ4fWxvY2FsZWRhdGEKKyBleHBvcnQgTE9DUEFUSAorIAorLSR7Y29tbW9uX29ianBmeH1lbGYvbGQuc28gLS1saWJyYXJ5LXBhdGggJGNvbW1vbl9vYmpwZnggXAorKyMgbWFrZSBzdXJlIGxpYmRsIGlzIGFsc28gaW4gcGF0aCBpbiBjYXNlIHNhbmRib3ggaXMgaW4gdXNlCisrbGlicmFyeV9wYXRoPSR7Y29tbW9uX29ianBmeH06JHtjb21tb25fb2JqcGZ4fS9kbGZjbgorKworKyR7Y29tbW9uX29ianBmeH1lbGYvbGQuc28gLS1saWJyYXJ5LXBhdGggJGxpYnJhcnlfcGF0aCBcCisgJHtvYmpwZnh9dHN0LXRyYW5zbGl0ID4gJHtvYmpwZnh9dHN0LXRyYW5zbGl0Lm91dCAke29ianBmeH1kb21haW5kaXIKKyAKKyBleGl0ICQ/CitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL21hbGxvYy90c3QtbXRyYWNlLnNoIGdsaWJjLTIuMTAuMS9tYWxsb2MvdHN0LW10cmFjZS5zaAorLS0tIGdsaWJjLTIuMTAuMS5vcmlnL21hbGxvYy90c3QtbXRyYWNlLnNoCTIwMDUtMTAtMTUgMDE6NDA6MzUuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL21hbGxvYy90c3QtbXRyYWNlLnNoCTIwMDktMTEtMTMgMDA6NTA6MzcuMDAwMDAwMDAwICswMTAwCitAQCAtMjQsOSArMjQsMTIgQEAKKyBzdGF0dXM9MAorIHRyYXAgInJtIC1mICR7Y29tbW9uX29ianBmeH1tYWxsb2MvdHN0LW10cmFjZS5sZWFrOyBleGl0IDEiIDEgMiAxNQorIAorKyMgbWFrZSBzdXJlIGxpYmRsIGlzIGFsc28gaW4gcGF0aCBpbiBjYXNlIHNhbmRib3ggaXMgaW4gdXNlCisrbGlicmFyeV9wYXRoPSR7Y29tbW9uX29ianBmeH06JHtjb21tb25fb2JqcGZ4fS9kbGZjbgorKworIE1BTExPQ19UUkFDRT0ke2NvbW1vbl9vYmpwZnh9bWFsbG9jL3RzdC1tdHJhY2UubGVhayBcCisgTE9DUEFUSD0ke2NvbW1vbl9vYmpwZnh9bG9jYWxlZGF0YSBHQ09OVl9QQVRIPSR7Y29tbW9uX29ianBmeH1pY29udmRhdGEgXAorLSR7Y29tbW9uX29ianBmeH1lbGYvbGQuc28gLS1saWJyYXJ5LXBhdGggJGNvbW1vbl9vYmpwZnggXAorKyR7Y29tbW9uX29ianBmeH1lbGYvbGQuc28gLS1saWJyYXJ5LXBhdGggJGxpYnJhcnlfcGF0aCBcCisgICAke2NvbW1vbl9vYmpwZnh9bWFsbG9jL3RzdC1tdHJhY2UgfHwgc3RhdHVzPTEKKyAKKyBpZiB0ZXN0ICRzdGF0dXMgLWVxIDAgJiYgdGVzdCAtZiAke2NvbW1vbl9vYmpwZnh9bWFsbG9jL210cmFjZTsgdGhlbgorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9ucHRsL3RzdC10bHM2LnNoIGdsaWJjLTIuMTAuMS9ucHRsL3RzdC10bHM2LnNoCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvbnB0bC90c3QtdGxzNi5zaAkyMDAzLTA5LTAzIDAwOjAyOjU5LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9ucHRsL3RzdC10bHM2LnNoCTIwMDktMTEtMTMgMDA6NTA6MzcuMDAwMDAwMDAwICswMTAwCitAQCAtNSw4ICs1LDggQEAKKyBydGxkX2luc3RhbGxlZF9uYW1lPSQxOyBzaGlmdAorIGxvZ2ZpbGU9JGNvbW1vbl9vYmpwZngvbnB0bC90c3QtdGxzNi5vdXQKKyAKKy0jIFdlIGhhdmUgdG8gZmluZCBsaWJjIGFuZCBucHRsCistbGlicmFyeV9wYXRoPSR7Y29tbW9uX29ianBmeH06JHtjb21tb25fb2JqcGZ4fW5wdGwKKysjIFdlIGhhdmUgdG8gZmluZCBsaWJjIGFuZCBucHRsIChhbHNvIGxpYmRsIGluIGNhc2Ugc2FuZGJveCBpcyBpbiB1c2UpCisrbGlicmFyeV9wYXRoPSR7Y29tbW9uX29ianBmeH06JHtjb21tb25fb2JqcGZ4fW5wdGw6JHtjb21tb25fb2JqcGZ4fS9kbGZjbgorIHRzdF90bHM1PSIke2VsZl9vYmpwZnh9JHtydGxkX2luc3RhbGxlZF9uYW1lfSAtLWxpYnJhcnktcGF0aCAke2xpYnJhcnlfcGF0aH0gXAorIAkgICR7Y29tbW9uX29ianBmeH0vbnB0bC90c3QtdGxzNSIKKyAKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvcG9zaXgvZ2xvYnRlc3Quc2ggZ2xpYmMtMi4xMC4xL3Bvc2l4L2dsb2J0ZXN0LnNoCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvcG9zaXgvZ2xvYnRlc3Quc2gJMjAwOC0xMi0wNiAwNzowNTozOS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEwLjEvcG9zaXgvZ2xvYnRlc3Quc2gJMjAwOS0xMS0xMyAwMDo1MDozNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xOCw3ICsxOCw3IEBACisgZXNhYworIAorICMgV2UgaGF2ZSB0byBmaW5kIHRoZSBsaWJjIGFuZCB0aGUgTlNTIG1vZHVsZXMuCistbGlicmFyeV9wYXRoPSR7Y29tbW9uX29ianBmeH06JHtjb21tb25fb2JqcGZ4fW5zczoke2NvbW1vbl9vYmpwZnh9bmlzOiR7Y29tbW9uX29ianBmeH1kYjI6JHtjb21tb25fb2JqcGZ4fWhlc2lvZAorK2xpYnJhcnlfcGF0aD0ke2NvbW1vbl9vYmpwZnh9OiR7Y29tbW9uX29ianBmeH1uc3M6JHtjb21tb25fb2JqcGZ4fW5pczoke2NvbW1vbl9vYmpwZnh9ZGIyOiR7Y29tbW9uX29ianBmeH1oZXNpb2Q6JHtjb21tb25fb2JqcGZ4fS9kbGZjbgorIAorICMgU2luY2Ugd2UgdXNlIGBzb3J0JyB3ZSBtdXN0IG1ha2Ugc3VyZSB0byB1c2UgdGhlIHNhbWUgbG9jYWxlIGV2ZXJ5d2hlcmUuCisgTENfQUxMPUMKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvcG9zaXgvdHN0LWdldGNvbmYuc2ggZ2xpYmMtMi4xMC4xL3Bvc2l4L3RzdC1nZXRjb25mLnNoCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvcG9zaXgvdHN0LWdldGNvbmYuc2gJMjAwMi0wOS0wMSAxMzoxMToyNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvcG9zaXgvdHN0LWdldGNvbmYuc2gJMjAwOS0xMS0xMyAwMDo1MDozNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMCw3ICsxMCwxMCBAQAorIGVsc2UKKyAgIHJ0bGRfaW5zdGFsbGVkX25hbWU9JDE7IHNoaWZ0CisgICBydW5pdCgpIHsKKy0gICAgJHtlbGZfb2JqcGZ4fSR7cnRsZF9pbnN0YWxsZWRfbmFtZX0gLS1saWJyYXJ5LXBhdGggJHtjb21tb25fb2JqcGZ4fSAiJEAiCisrICAgIAorKyAgIyBtYWtlIHN1cmUgbGliZGwgaXMgYWxzbyBpbiBwYXRoIGluIGNhc2Ugc2FuZGJveCBpcyBpbiB1c2UKKysgIGxpYnJhcnlfcGF0aD0ke2NvbW1vbl9vYmpwZnh9OiR7Y29tbW9uX29ianBmeH0vZGxmY24KKysgICAgJHtlbGZfb2JqcGZ4fSR7cnRsZF9pbnN0YWxsZWRfbmFtZX0gLS1saWJyYXJ5LXBhdGggJHtsaWJyYXJ5X3BhdGh9ICIkQCIKKyAgIH0KKyBmaQorIAorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3NpeC93b3JkZXhwLXRzdC5zaCBnbGliYy0yLjEwLjEvcG9zaXgvd29yZGV4cC10c3Quc2gKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9wb3NpeC93b3JkZXhwLXRzdC5zaAkyMDAwLTEwLTIwIDE4OjIzOjMwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9wb3NpeC93b3JkZXhwLXRzdC5zaAkyMDA5LTExLTEzIDAwOjUwOjM3LjAwMDAwMDAwMCArMDEwMAorQEAgLTE5LDggKzE5LDExIEBACisgIgorIGV4cG9ydCBJRlMKKyAKKysjIG1ha2Ugc3VyZSBsaWJkbCBpcyBhbHNvIGluIHBhdGggaW4gY2FzZSBzYW5kYm94IGlzIGluIHVzZQorK2xpYnJhcnlfcGF0aD0ke2NvbW1vbl9vYmpwZnh9OiR7Y29tbW9uX29ianBmeH0vZGxmY24KKysKKyBmYWlsZWQ9MAorLSR7ZWxmX29ianBmeH0ke3J0bGRfaW5zdGFsbGVkX25hbWV9IC0tbGlicmFyeS1wYXRoICR7Y29tbW9uX29ianBmeH0gXAorKyR7ZWxmX29ianBmeH0ke3J0bGRfaW5zdGFsbGVkX25hbWV9IC0tbGlicmFyeS1wYXRoICR7bGlicmFyeV9wYXRofSBcCisgJHtjb21tb25fb2JqcGZ4fXBvc2l4L3dvcmRleHAtdGVzdCAnJConID4gJHt0ZXN0b3V0fTEKKyBjYXQgPDwiRU9GIiB8IGNtcCAtICR7dGVzdG91dH0xID4+ICRsb2dmaWxlIHx8IGZhaWxlZD0xCisgd29yZGV4cCByZXR1cm5lZCAwCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzM3MC1mbm1hdGNoLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8zNzAtZm5tYXRjaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzFmMWRjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8zNzAtZm5tYXRjaC5wYXRjaApAQCAtMCwwICsxLDYyIEBACitodHRwOi8vc291cmNld2FyZS5vcmcvbWwvbGliYy1oYWNrZXIvMjAwMi0xMS9tc2cwMDA3MS5odG1sCisKK1doZW4gZm5tYXRjaCBkZXRlY3RzIGFuIGludmFsaWQgbXVsdGlieXRlIGNoYXJhY3RlciBpdCBzaG91bGQgZmFsbCBiYWNrIHRvCitzaW5nbGUgYnl0ZSBtYXRjaGluZywgc28gdGhhdCAiKiIgaGFzIGEgY2hhbmNlIHRvIG1hdGNoIHN1Y2ggYSBzdHJpbmcuCisKK0FuZHJlYXMuCisKKzIwMDUtMDQtMTIgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQHN1c2UuZGU+CisKKwkqIHBvc2l4L2ZubWF0Y2guYyAoZm5tYXRjaCk6IElmIGNvbnZlcnNpb24gdG8gd2lkZSBjaGFyYWN0ZXIKKwlmYWlscyBmYWxsIGJhY2sgdG8gc2luZ2xlIGJ5dGUgbWF0Y2hpbmcuCisKK0luZGV4OiBwb3NpeC9mbm1hdGNoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3NpeC9mbm1hdGNoLmMgZ2xpYmMtMi4xMC4xL3Bvc2l4L2ZubWF0Y2guYworLS0tIGdsaWJjLTIuMTAuMS5vcmlnL3Bvc2l4L2ZubWF0Y2guYwkyMDA3LTA3LTI4IDIyOjM1OjAwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9wb3NpeC9mbm1hdGNoLmMJMjAwOS0xMS0xMyAwMDo1MDozOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zMjcsNiArMzI3LDcgQEAKKyAjIGlmIEhBTkRMRV9NVUxUSUJZVEUKKyAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChNQl9DVVJfTUFYLCAxKSAhPSAxKQorICAgICB7CisrICAgICAgY29uc3QgY2hhciAqb3JpZ19wYXR0ZXJuID0gcGF0dGVybjsKKyAgICAgICBtYnN0YXRlX3QgcHM7CisgICAgICAgc2l6ZV90IG47CisgICAgICAgY29uc3QgY2hhciAqcDsKK0BAIC0zODIsMTAgKzM4Myw4IEBACisgCSAgd3N0cmluZyA9ICh3Y2hhcl90ICopIGFsbG9jYSAoKG4gKyAxKSAqIHNpemVvZiAod2NoYXJfdCkpOworIAkgIG4gPSBtYnNydG93Y3MgKHdzdHJpbmcsICZwLCBuICsgMSwgJnBzKTsKKyAJICBpZiAoX19idWlsdGluX2V4cGVjdCAobiA9PSAoc2l6ZV90KSAtMSwgMCkpCistCSAgICAvKiBTb21ldGhpbmcgd3JvbmcuCistCSAgICAgICBYWFggRG8gd2UgaGF2ZSB0byBzZXQgYGVycm5vJyB0byBzb21ldGhpbmcgd2hpY2ggbWJzcnRvd3MgaGFzbid0CistCSAgICAgICBhbHJlYWR5IGRvbmU/ICAqLworLQkgICAgcmV0dXJuIC0xOworKwkgICAgLyogU29tZXRoaW5nIHdyb25nLiAgRmFsbCBiYWNrIHRvIHNpbmdsZSBieXRlIG1hdGNoaW5nLiAgKi8KKysJICAgIGdvdG8gdHJ5X3NpbmdsZWJ5dGU7CisgCSAgaWYgKHApCisgCSAgICB7CisgCSAgICAgIG1lbXNldCAoJnBzLCAnXDAnLCBzaXplb2YgKHBzKSk7CitAQCAtMzk3LDEwICszOTYsOCBAQAorIAlwcmVwYXJlX3dzdHJpbmc6CisgCSAgbiA9IG1ic3J0b3djcyAoTlVMTCwgJnN0cmluZywgMCwgJnBzKTsKKyAJICBpZiAoX19idWlsdGluX2V4cGVjdCAobiA9PSAoc2l6ZV90KSAtMSwgMCkpCistCSAgICAvKiBTb21ldGhpbmcgd3JvbmcuCistCSAgICAgICBYWFggRG8gd2UgaGF2ZSB0byBzZXQgYGVycm5vJyB0byBzb21ldGhpbmcgd2hpY2ggbWJzcnRvd3MgaGFzbid0CistCSAgICAgICBhbHJlYWR5IGRvbmU/ICAqLworLQkgICAgcmV0dXJuIC0xOworKwkgICAgLyogU29tZXRoaW5nIHdyb25nLiAgRmFsbCBiYWNrIHRvIHNpbmdsZSBieXRlIG1hdGNoaW5nLiAgKi8KKysJICAgIGdvdG8gdHJ5X3NpbmdsZWJ5dGU7CisgCSAgd3N0cmluZyA9ICh3Y2hhcl90ICopIGFsbG9jYSAoKG4gKyAxKSAqIHNpemVvZiAod2NoYXJfdCkpOworIAkgIGFzc2VydCAobWJzaW5pdCAoJnBzKSk7CisgCSAgKHZvaWQpIG1ic3J0b3djcyAod3N0cmluZywgJnN0cmluZywgbiArIDEsICZwcyk7CitAQCAtNDA4LDYgKzQwNSw5IEBACisgCisgICAgICAgcmV0dXJuIGludGVybmFsX2Zud21hdGNoICh3cGF0dGVybiwgd3N0cmluZywgd3N0cmluZyArIG4sCisgCQkJCWZsYWdzICYgRk5NX1BFUklPRCwgZmxhZ3MsIE5VTEwpOworKworKyAgICB0cnlfc2luZ2xlYnl0ZToKKysgICAgICBwYXR0ZXJuID0gb3JpZ19wYXR0ZXJuOworICAgICB9CisgIyBlbmRpZiAgLyogbWJzdGF0ZV90IGFuZCBtYnNydG93Y3Mgb3IgX0xJQkMuICAqLworIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS8zODAtZG9udC1idWlsZC10aW1lem9uZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMzgwLWRvbnQtYnVpbGQtdGltZXpvbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg5N2M2MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMzgwLWRvbnQtYnVpbGQtdGltZXpvbmUucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAordGltZXpvbmUgZGF0YSBoYXMgYmVlbiBzcGxpdCBpbnRvIHRoZSBwYWNrYWdlIHN5cy1saWJzL3RpbWV6b25lLWRhdGEKKworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9NYWtlY29uZmlnIGdsaWJjLTIuMTAuMS9NYWtlY29uZmlnCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvTWFrZWNvbmZpZwkyMDA5LTExLTEzIDAwOjUwOjEzLjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTAuMS9NYWtlY29uZmlnCTIwMDktMTEtMTMgMDA6NTA6NDEuMDAwMDAwMDAwICswMTAwCitAQCAtOTE5LDcgKzkxOSw3IEBACisgCSAgICAgIHN0ZGxpYiBzdGRpby1jb21tb24gbGliaW8gbWFsbG9jIHN0cmluZyB3Y3NtYnMgdGltZSBkaXJlbnQgICAgXAorIAkgICAgICBncnAgcHdkIHBvc2l4IGlvIHRlcm1pb3MgcmVzb3VyY2UgbWlzYyBzb2NrZXQgc3lzdmlwYyBnbW9uICAgIFwKKyAJICAgICAgZ251bGliIGljb252IGljb252ZGF0YSB3Y3R5cGUgbWFudWFsIHNoYWRvdyBnc2hhZG93IHBvIGFyZ3AgICBcCistCSAgICAgIGNyeXB0IG5zcyBsb2NhbGVkYXRhIHRpbWV6b25lIHJ0IGNvbmZvcm0gZGVidWcJCSAgICBcCisrCSAgICAgIGNyeXB0IG5zcyBsb2NhbGVkYXRhIHJ0IGNvbmZvcm0gZGVidWcJCSAgICBcCisgCSAgICAgICQoYWRkLW9uLXN1YmRpcnMpICQoZGxmY24pICQoYmluZm10LXN1YmRpcikKKyAKKyBpZm5kZWYgYXZvaWQtZ2VuZXJhdGVkCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzM5MC1jcm9zcy1jb21waWxlLW5wdGwucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzM5MC1jcm9zcy1jb21waWxlLW5wdGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkOTZmNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvMzkwLWNyb3NzLWNvbXBpbGUtbnB0bC5wYXRjaApAQCAtMCwwICsxLDUyIEBACitBIGxpdHRsZSBoYWNrIGZvciBjcm9zcy1jb21waWxpbmcgTlBUTAorCitodHRwOi8vc291cmNld2FyZS5vcmcvbWwvbGliYy1hbHBoYS8yMDA1LTAyL21zZzAwMDQzLmh0bWwKKworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9ucHRsL3N5c2RlcHMvcHRocmVhZC9jb25maWd1cmUgZ2xpYmMtMi4xMC4xL25wdGwvc3lzZGVwcy9wdGhyZWFkL2NvbmZpZ3VyZQorLS0tIGdsaWJjLTIuMTAuMS5vcmlnL25wdGwvc3lzZGVwcy9wdGhyZWFkL2NvbmZpZ3VyZQkyMDA5LTA1LTE3IDE0OjE5OjMxLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9ucHRsL3N5c2RlcHMvcHRocmVhZC9jb25maWd1cmUJMjAwOS0xMS0xMyAwMDo1MDo0My4wMDAwMDAwMDAgKzAxMDAKK0BAIC03OCw2ICs3OCwxMCBAQAorIGZpCisgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGliY19jdl9mb3JjZWRfdW53aW5kIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kbGliY19jdl9mb3JjZWRfdW53aW5kIiA+JjY7IH0KKytpZiB0ZXN0ICRsaWJjX2N2X2ZvcmNlZF91bndpbmQgPSBubyAtYSAkYnVpbGRfY3B1ICE9ICRob3N0X2NwdTsgdGhlbgorKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvcmNpbmcgbGliY19jdl9mb3JjZWRfdW53aW5kID0geWVzIGZvciBjcm9zcy1jb21waWxlIgorKyAgbGliY19jdl9mb3JjZWRfdW53aW5kPXllcworK2ZpCisgaWYgdGVzdCAkbGliY19jdl9mb3JjZWRfdW53aW5kID0geWVzOyB0aGVuCisgICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorICNkZWZpbmUgSEFWRV9GT1JDRURfVU5XSU5EIDEKK0BAIC0xNDEsNiArMTQ1LDEwIEBACisgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGliY19jdl9jX2NsZWFudXAiID4mNQorIGVjaG8gIiR7RUNIT19UfSRsaWJjX2N2X2NfY2xlYW51cCIgPiY2OyB9CisgICBDRkxBR1M9IiRvbGRfQ0ZMQUdTIgorKyAgaWYgdGVzdCAkbGliY19jdl9jX2NsZWFudXAgPSBubyAtYSAkYnVpbGRfY3B1ICE9ICRob3N0X2NwdTsgdGhlbgorKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBmb3JjaW5nIGxpYmNfY3ZfY19jbGVhbnVwID0geWVzIGZvciBjcm9zcy1jb21waWxlIgorKyAgICBsaWJjX2N2X2NfY2xlYW51cD15ZXMKKysgIGZpCisgICBpZiB0ZXN0ICRsaWJjX2N2X2NfY2xlYW51cCA9IG5vOyB0aGVuCisgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHRoZSBjb21waWxlciBtdXN0IHN1cHBvcnQgQyBjbGVhbnVwIGhhbmRsaW5nIiA+JjUKKyBlY2hvICIkYXNfbWU6IGVycm9yOiB0aGUgY29tcGlsZXIgbXVzdCBzdXBwb3J0IEMgY2xlYW51cCBoYW5kbGluZyIgPiYyO30KK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvbnB0bC9zeXNkZXBzL3B0aHJlYWQvY29uZmlndXJlLmluIGdsaWJjLTIuMTAuMS9ucHRsL3N5c2RlcHMvcHRocmVhZC9jb25maWd1cmUuaW4KKy0tLSBnbGliYy0yLjEwLjEub3JpZy9ucHRsL3N5c2RlcHMvcHRocmVhZC9jb25maWd1cmUuaW4JMjAwMy0xMi0wMyAwNzo1MDowMS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEwLjEvbnB0bC9zeXNkZXBzL3B0aHJlYWQvY29uZmlndXJlLmluCTIwMDktMTEtMTMgMDA6NTA6NDMuMDAwMDAwMDAwICswMTAwCitAQCAtMjgsNiArMjgsOSBAQAorIHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKmNvbnRleHQ7CisgX1Vud2luZF9HZXRDRkEgKGNvbnRleHQpXSwKKyBsaWJjX2N2X2ZvcmNlZF91bndpbmQ9eWVzLCBsaWJjX2N2X2ZvcmNlZF91bndpbmQ9bm8pXSkKKytpZiB0ZXN0ICRsaWJjX2N2X2ZvcmNlZF91bndpbmQgPSBubyAtYSAkYnVpbGRfY3B1ICE9ICRob3N0X2NwdTsgdGhlbgorKyAgbGliY19jdl9mb3JjZWRfdW53aW5kPXllcworK2ZpCisgaWYgdGVzdCAkbGliY19jdl9mb3JjZWRfdW53aW5kID0geWVzOyB0aGVuCisgICBBQ19ERUZJTkUoSEFWRV9GT1JDRURfVU5XSU5EKQorIGRubCBDaGVjayBmb3IgQyBjbGVhbnVwIGhhbmRsaW5nLgorQEAgLTQxLDYgKzQ0LDkgQEAKKyAgIHB1dHMgKCJ0ZXN0IildLAorIGxpYmNfY3ZfY19jbGVhbnVwPXllcywgbGliY19jdl9jX2NsZWFudXA9bm8pXSkKKyAgIENGTEFHUz0iJG9sZF9DRkxBR1MiCisrICBpZiB0ZXN0ICRsaWJjX2N2X2NfY2xlYW51cCA9IG5vIC1hICRidWlsZF9jcHUgIT0gJGhvc3RfY3B1OyB0aGVuCisrICAgIGxpYmNfY3ZfY19jbGVhbnVwPXllcworKyAgZmkKKyAgIGlmIHRlc3QgJGxpYmNfY3ZfY19jbGVhbnVwID0gbm87IHRoZW4KKyAgICAgQUNfTVNHX0VSUk9SKFt0aGUgY29tcGlsZXIgbXVzdCBzdXBwb3J0IEMgY2xlYW51cCBoYW5kbGluZ10pCisgICBmaQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS80MDAtYWxwaGEteHN0YXQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzQwMC1hbHBoYS14c3RhdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDQyYjYzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS80MDAtYWxwaGEteHN0YXQucGF0Y2gKQEAgLTAsMCArMSwyNTAgQEAKK2h0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTEwMjYKK2h0dHA6Ly9zb3VyY2V3YXJlLm9yZy9tbC9saWJjLWFscGhhLzIwMDUtMDIvbXNnMDAxMjIuaHRtbAorCisyMDA1LTAyLTI2ICBHT1RPIE1hc2Fub3JpICA8Z290b21AZGViaWFuLm9yLmpwPgorCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9rZXJuZWwtZmVhdHVyZXMuaDogRGVmaW5lCisJX19BU1NVTUVfU1RBVDY0X1NZU0NBTEwuCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9meHN0YXQuYzogQ2hlY2sKKwlfX0FTU1VNRV9TVEFUNjRfU1lTQ0FMTC4KKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2Z4c3RhdGF0LmM6IExpa2V3aXNlLgorCSogc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvbHhzdGF0LmM6IExpa2V3aXNlLgorCSogc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEveHN0YXQuYzogTGlrZXdpc2UuCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS94c3RhdGNvbnYuYzogRG9uJ3QgZGVmaW5lCisJX19saWJjX21pc3NpbmdfYXhwX3N0YXQ2NCB3aGVuIGl0J3Mgbm90IG5lZWRlZC4KKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3hzdGF0Y29udi5oOiBMaWtld2lzZS4KKworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvZnhzdGF0LmMgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9meHN0YXQuYworLS0tIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9meHN0YXQuYwkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvZnhzdGF0LmMJMjAwOS0xMS0xMyAwMDo1MDo0NS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zNSwyNyArMzUsMzkgQEAKKyBfX2Z4c3RhdCAoaW50IHZlcnMsIGludCBmZCwgc3RydWN0IHN0YXQgKmJ1ZikKKyB7CisgICBJTlRFUk5BTF9TWVNDQUxMX0RFQ0wgKGVycik7CistICBpbnQgcmVzdWx0LCBlcnJub19vdXQ7CisrICBpbnQgcmVzdWx0OworICAgc3RydWN0IGtlcm5lbF9zdGF0IGtidWY7CisgCisrI2lmIF9fQVNTVU1FX1NUQVQ2NF9TWVNDQUxMID4gMAorKyAgaWYgKHZlcnMgPT0gX1NUQVRfVkVSX0tFUk5FTDY0KQorKyAgICB7CisrICAgICAgcmVzdWx0ID0gSU5URVJOQUxfU1lTQ0FMTCAoZnN0YXQ2NCwgZXJyLCAyLCBmZCwgYnVmKTsKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoIUlOVEVSTkFMX1NZU0NBTExfRVJST1JfUCAocmVzdWx0LCBlcnIpLCAxKSkKKysJcmV0dXJuIHJlc3VsdDsKKysgICAgICBfX3NldF9lcnJubyAoSU5URVJOQUxfU1lTQ0FMTF9FUlJOTyAocmVzdWx0LCBlcnIpKTsKKysgICAgICByZXR1cm4gLTE7CisrICAgIH0KKysjZWxpZiBkZWZpbmVkIF9fTlJfZnN0YXQ2NAorICAgaWYgKHZlcnMgPT0gX1NUQVRfVkVSX0tFUk5FTDY0ICYmICFfX2xpYmNfbWlzc2luZ19heHBfc3RhdDY0KQorICAgICB7CisrICAgICAgaW50IGVycm5vX291dDsKKyAgICAgICByZXN1bHQgPSBJTlRFUk5BTF9TWVNDQUxMIChmc3RhdDY0LCBlcnIsIDIsIGZkLCBidWYpOworICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICghSU5URVJOQUxfU1lTQ0FMTF9FUlJPUl9QIChyZXN1bHQsIGVyciksIDEpKQorIAlyZXR1cm4gcmVzdWx0OworICAgICAgIGVycm5vX291dCA9IElOVEVSTkFMX1NZU0NBTExfRVJSTk8gKHJlc3VsdCwgZXJyKTsKKyAgICAgICBpZiAoZXJybm9fb3V0ICE9IEVOT1NZUykKKy0JZ290byBmYWlsOworKwl7CisrCSAgX19zZXRfZXJybm8gKGVycm5vX291dCk7CisrCSAgcmV0dXJuIC0xOworKwl9CisgICAgICAgX19saWJjX21pc3NpbmdfYXhwX3N0YXQ2NCA9IDE7CisgICAgIH0KKysjZW5kaWYKKyAKKyAgIHJlc3VsdCA9IElOVEVSTkFMX1NZU0NBTEwgKGZzdGF0LCBlcnIsIDIsIGZkLCAma2J1Zik7CisgICBpZiAoX19idWlsdGluX2V4cGVjdCAoIUlOVEVSTkFMX1NZU0NBTExfRVJST1JfUCAocmVzdWx0LCBlcnIpLCAxKSkKKyAgICAgcmV0dXJuIF9feHN0YXRfY29udiAodmVycywgJmtidWYsIGJ1Zik7CistICBlcnJub19vdXQgPSBJTlRFUk5BTF9TWVNDQUxMX0VSUk5PIChyZXN1bHQsIGVycik7CistICAKKy0gZmFpbDoKKy0gIF9fc2V0X2Vycm5vIChlcnJub19vdXQpOworKyAgX19zZXRfZXJybm8gKElOVEVSTkFMX1NZU0NBTExfRVJSTk8gKHJlc3VsdCwgZXJyKSk7CisgICByZXR1cm4gLTE7CisgfQorIGhpZGRlbl9kZWYgKF9fZnhzdGF0KQorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvZnhzdGF0YXQuYyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2Z4c3RhdGF0LmMKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvZnhzdGF0YXQuYwkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvZnhzdGF0YXQuYwkyMDA5LTExLTEzIDAwOjUwOjQ1LjAwMDAwMDAwMCArMDEwMAorQEAgLTY1LDYgKzY1LDIwIEBACisgICBpbnQgcmVzdWx0LCBlcnJub19vdXQ7CisgICBzdHJ1Y3Qga2VybmVsX3N0YXQga3N0OworIAorKyNpZiBfX0FTU1VNRV9TVEFUNjRfU1lTQ0FMTCA+IDAKKysgIGlmICh2ZXJzID09IF9TVEFUX1ZFUl9LRVJORUw2NCkKKysgICAgeworKyAgICAgIGlmIChmbGFnICYgQVRfU1lNTElOS19OT0ZPTExPVykKKysJcmVzdWx0ID0gSU5URVJOQUxfU1lTQ0FMTCAobHN0YXQ2NCwgZXJyLCAyLCBmaWxlLCBzdCk7CisrICAgICAgZWxzZQorKwlyZXN1bHQgPSBJTlRFUk5BTF9TWVNDQUxMIChzdGF0NjQsIGVyciwgMiwgZmlsZSwgc3QpOworKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICghSU5URVJOQUxfU1lTQ0FMTF9FUlJPUl9QIChyZXN1bHQsIGVyciksIDEpKQorKwlyZXR1cm4gcmVzdWx0OworKyAgICAgIGVycm5vX291dCA9IElOVEVSTkFMX1NZU0NBTExfRVJSTk8gKHJlc3VsdCwgZXJyKTsKKysgICAgICBnb3RvIGZhaWw7CisrICAgIH0KKysjZWxpZiBkZWZpbmVkIF9fTlJfc3RhdDY0CisgICBpZiAodmVycyA9PSBfU1RBVF9WRVJfS0VSTkVMNjQgJiYgIV9fbGliY19taXNzaW5nX2F4cF9zdGF0NjQpCisgICAgIHsKKyAgICAgICBpZiAoZmxhZyAmIEFUX1NZTUxJTktfTk9GT0xMT1cpCitAQCAtNzksNiArOTMsNyBAQAorIAlnb3RvIGZhaWw7CisgICAgICAgX19saWJjX21pc3NpbmdfYXhwX3N0YXQ2NCA9IDE7CisgICAgIH0KKysjZW5kaWYKKyAKKyAgIGlmIChmbGFnICYgQVRfU1lNTElOS19OT0ZPTExPVykKKyAgICAgcmVzdWx0ID0gSU5URVJOQUxfU1lTQ0FMTCAobHN0YXQsIGVyciwgMiwgZmlsZSwgJmtzdCk7CitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9seHN0YXQuYyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2x4c3RhdC5jCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2x4c3RhdC5jCTIwMDktMDUtMTYgMTA6MzY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9seHN0YXQuYwkyMDA5LTExLTEzIDAwOjUwOjQ1LjAwMDAwMDAwMCArMDEwMAorQEAgLTM1LDI3ICszNSwzOSBAQAorIF9fbHhzdGF0IChpbnQgdmVycywgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKmJ1ZikKKyB7CisgICBJTlRFUk5BTF9TWVNDQUxMX0RFQ0wgKGVycik7CistICBpbnQgcmVzdWx0LCBlcnJub19vdXQ7CisrICBpbnQgcmVzdWx0OworICAgc3RydWN0IGtlcm5lbF9zdGF0IGtidWY7CisgCisrI2lmIF9fQVNTVU1FX1NUQVQ2NF9TWVNDQUxMID4gMAorKyAgaWYgKHZlcnMgPT0gX1NUQVRfVkVSX0tFUk5FTDY0KQorKyAgICB7CisrICAgICAgcmVzdWx0ID0gSU5URVJOQUxfU1lTQ0FMTCAobHN0YXQ2NCwgZXJyLCAyLCBuYW1lLCBidWYpOworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICghSU5URVJOQUxfU1lTQ0FMTF9FUlJPUl9QIChyZXN1bHQsIGVyciksIDEpKQorKwlyZXR1cm4gcmVzdWx0OworKyAgICAgIF9fc2V0X2Vycm5vIChJTlRFUk5BTF9TWVNDQUxMX0VSUk5PIChyZXN1bHQsIGVycikpOworKyAgICAgIHJldHVybiAtMTsKKysgICAgfQorKyNlbGlmIGRlZmluZWQgX19OUl9sc3RhdDY0CisgICBpZiAodmVycyA9PSBfU1RBVF9WRVJfS0VSTkVMNjQgJiYgIV9fbGliY19taXNzaW5nX2F4cF9zdGF0NjQpCisgICAgIHsKKysgICAgICBpbnQgZXJybm9fb3V0OworICAgICAgIHJlc3VsdCA9IElOVEVSTkFMX1NZU0NBTEwgKGxzdGF0NjQsIGVyciwgMiwgbmFtZSwgYnVmKTsKKyAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoIUlOVEVSTkFMX1NZU0NBTExfRVJST1JfUCAocmVzdWx0LCBlcnIpLCAxKSkKKyAJcmV0dXJuIHJlc3VsdDsKKyAgICAgICBlcnJub19vdXQgPSBJTlRFUk5BTF9TWVNDQUxMX0VSUk5PIChyZXN1bHQsIGVycik7CisgICAgICAgaWYgKGVycm5vX291dCAhPSBFTk9TWVMpCistCWdvdG8gZmFpbDsKKysJeworKwkgIF9fc2V0X2Vycm5vIChlcnJub19vdXQpOworKwkgIHJldHVybiAtMTsKKysJfQorICAgICAgIF9fbGliY19taXNzaW5nX2F4cF9zdGF0NjQgPSAxOworICAgICB9CisrI2VuZGlmCisgCisgICByZXN1bHQgPSBJTlRFUk5BTF9TWVNDQUxMIChsc3RhdCwgZXJyLCAyLCBuYW1lLCAma2J1Zik7CisgICBpZiAoX19idWlsdGluX2V4cGVjdCAoIUlOVEVSTkFMX1NZU0NBTExfRVJST1JfUCAocmVzdWx0LCBlcnIpLCAxKSkKKyAgICAgcmV0dXJuIF9feHN0YXRfY29udiAodmVycywgJmtidWYsIGJ1Zik7CistICBlcnJub19vdXQgPSBJTlRFUk5BTF9TWVNDQUxMX0VSUk5PIChyZXN1bHQsIGVycik7CistICAKKy0gZmFpbDoKKy0gIF9fc2V0X2Vycm5vIChlcnJub19vdXQpOworKyAgX19zZXRfZXJybm8gKElOVEVSTkFMX1NZU0NBTExfRVJSTk8gKHJlc3VsdCwgZXJyKSk7CisgICByZXR1cm4gLTE7CisgfQorIGhpZGRlbl9kZWYgKF9fbHhzdGF0KQorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEveHN0YXQuYyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3hzdGF0LmMKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEveHN0YXQuYwkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEveHN0YXQuYwkyMDA5LTExLTEzIDAwOjUwOjQ1LjAwMDAwMDAwMCArMDEwMAorQEAgLTM1LDI3ICszNSwzOSBAQAorIF9feHN0YXQgKGludCB2ZXJzLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqYnVmKQorIHsKKyAgIElOVEVSTkFMX1NZU0NBTExfREVDTCAoZXJyKTsKKy0gIGludCByZXN1bHQsIGVycm5vX291dDsKKysgIGludCByZXN1bHQ7CisgICBzdHJ1Y3Qga2VybmVsX3N0YXQga2J1ZjsKKyAKKysjaWYgX19BU1NVTUVfU1RBVDY0X1NZU0NBTEwgPiAwCisrICBpZiAodmVycyA9PSBfU1RBVF9WRVJfS0VSTkVMNjQpCisrICAgIHsKKysgICAgICByZXN1bHQgPSBJTlRFUk5BTF9TWVNDQUxMIChzdGF0NjQsIGVyciwgMiwgbmFtZSwgYnVmKTsKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoIUlOVEVSTkFMX1NZU0NBTExfRVJST1JfUCAocmVzdWx0LCBlcnIpLCAxKSkKKysJcmV0dXJuIHJlc3VsdDsKKysgICAgICBfX3NldF9lcnJubyAoSU5URVJOQUxfU1lTQ0FMTF9FUlJOTyAocmVzdWx0LCBlcnIpKTsKKysgICAgICByZXR1cm4gLTE7CisrICAgIH0KKysjZWxpZiBkZWZpbmVkIF9fTlJfc3RhdDY0CisgICBpZiAodmVycyA9PSBfU1RBVF9WRVJfS0VSTkVMNjQgJiYgIV9fbGliY19taXNzaW5nX2F4cF9zdGF0NjQpCisgICAgIHsKKysgICAgICBpbnQgZXJybm9fb3V0OworICAgICAgIHJlc3VsdCA9IElOVEVSTkFMX1NZU0NBTEwgKHN0YXQ2NCwgZXJyLCAyLCBuYW1lLCBidWYpOworICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICghSU5URVJOQUxfU1lTQ0FMTF9FUlJPUl9QIChyZXN1bHQsIGVyciksIDEpKQorIAlyZXR1cm4gcmVzdWx0OworICAgICAgIGVycm5vX291dCA9IElOVEVSTkFMX1NZU0NBTExfRVJSTk8gKHJlc3VsdCwgZXJyKTsKKyAgICAgICBpZiAoZXJybm9fb3V0ICE9IEVOT1NZUykKKy0JZ290byBmYWlsOworKwl7CisrCSAgX19zZXRfZXJybm8gKGVycm5vX291dCk7CisrCSAgcmV0dXJuIC0xOworKwl9CisgICAgICAgX19saWJjX21pc3NpbmdfYXhwX3N0YXQ2NCA9IDE7CisgICAgIH0KKysjZW5kaWYKKyAKKyAgIHJlc3VsdCA9IElOVEVSTkFMX1NZU0NBTEwgKHN0YXQsIGVyciwgMiwgbmFtZSwgJmtidWYpOworICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCFJTlRFUk5BTF9TWVNDQUxMX0VSUk9SX1AgKHJlc3VsdCwgZXJyKSwgMSkpCisgICAgIHJldHVybiBfX3hzdGF0X2NvbnYgKHZlcnMsICZrYnVmLCBidWYpOworLSAgZXJybm9fb3V0ID0gSU5URVJOQUxfU1lTQ0FMTF9FUlJOTyAocmVzdWx0LCBlcnIpOworLSAgCistIGZhaWw6CistICBfX3NldF9lcnJubyAoZXJybm9fb3V0KTsKKysgIF9fc2V0X2Vycm5vIChJTlRFUk5BTF9TWVNDQUxMX0VSUk5PIChyZXN1bHQsIGVycikpOworICAgcmV0dXJuIC0xOworIH0KKyBoaWRkZW5fZGVmIChfX3hzdGF0KQorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEveHN0YXRjb252LmMgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS94c3RhdGNvbnYuYworLS0tIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS94c3RhdGNvbnYuYwkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEveHN0YXRjb252LmMJMjAwOS0xMS0xMyAwMDo1MDo0NS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMiw5ICsyMiwxNCBAQAorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxrZXJuZWxfc3RhdC5oPgorICNpbmNsdWRlIDx4c3RhdGNvbnYuaD4KKysjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKyAKKyAKKysjaWZkZWYgX19OUl9zdGF0NjQKKysjIGlmIF9fQVNTVU1FX1NUQVQ2NF9TWVNDQUxMID09IDAKKyBpbnQgX19saWJjX21pc3NpbmdfYXhwX3N0YXQ2NDsKKysjIGVuZGlmCisrI2VuZGlmCisgCisgaW50CisgX194c3RhdF9jb252IChpbnQgdmVycywgc3RydWN0IGtlcm5lbF9zdGF0ICprYnVmLCB2b2lkICp1YnVmKQorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEveHN0YXRjb252LmggZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS94c3RhdGNvbnYuaAorLS0tIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS94c3RhdGNvbnYuaAkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEveHN0YXRjb252LmgJMjAwOS0xMS0xMyAwMDo1MDo0NS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xOCw3ICsxOCwxMiBAQAorICAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKyAKKyAjaW5jbHVkZSA8a2VybmVsLWZlYXR1cmVzLmg+CisrI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisgCisrI2lmZGVmIF9fTlJfc3RhdDY0CisrIyBpZiBfX0FTU1VNRV9TVEFUNjRfU1lTQ0FMTCA9PSAwCisgZXh0ZXJuIGludCBfX2xpYmNfbWlzc2luZ19heHBfc3RhdDY0IGF0dHJpYnV0ZV9oaWRkZW47CisrIyBlbmRpZgorKyNlbmRpZgorIGV4dGVybiBpbnQgX194c3RhdF9jb252IChpbnQgdmVycywgc3RydWN0IGtlcm5lbF9zdGF0ICprYnVmLCB2b2lkICp1YnVmKQorICAgYXR0cmlidXRlX2hpZGRlbjsKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvZnhzdGF0LmMgZ2xpYmMtMi4xMC4xL3BvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2Z4c3RhdC5jCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3BvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2Z4c3RhdGF0LmMgZ2xpYmMtMi4xMC4xL3BvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2Z4c3RhdGF0LmMKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvbHhzdGF0LmMgZ2xpYmMtMi4xMC4xL3BvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2x4c3RhdC5jCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3BvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3hzdGF0LmMgZ2xpYmMtMi4xMC4xL3BvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3hzdGF0LmMKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEveHN0YXRjb252LmMgZ2xpYmMtMi4xMC4xL3BvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3hzdGF0Y29udi5jCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3BvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3hzdGF0Y29udi5oIGdsaWJjLTIuMTAuMS9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS94c3RhdGNvbnYuaAorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9rZXJuZWwtZmVhdHVyZXMuaCBnbGliYy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgva2VybmVsLWZlYXR1cmVzLmgKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9rZXJuZWwtZmVhdHVyZXMuaAkyMDA5LTA1LTA5IDA4OjU0OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9rZXJuZWwtZmVhdHVyZXMuaAkyMDA5LTExLTEzIDAwOjUwOjQ1LjAwMDAwMDAwMCArMDEwMAorQEAgLTM5NSw2ICszOTUsMTEgQEAKKyAjIGRlZmluZSBfX0FTU1VNRV9HRVRERU5UUzMyX0RfVFlQRQkxCisgI2VuZGlmCisgCisrLyogU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDIuNi40LCBhbHBoYSBzdGF0NjQgc3lzY2FsbHMgYXJlIGF2YWlsYWJsZS4gICovCisrI2lmIF9fTElOVVhfS0VSTkVMX1ZFUlNJT04gPj0gMHgwMjA2MDQgJiYgZGVmaW5lZCBfX2FscGhhX18KKysjIGRlZmluZSBfX0FTU1VNRV9TVEFUNjRfU1lTQ0FMTAkxCisrI2VuZGlmCisrCisgLyogU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDIuNS4zLCB0aGUgaW5pdGlhbCBsb2NhdGlvbiByZXR1cm5lZCBieSBgYnJrJworICAgIGFmdGVyIGV4ZWMgaXMgYWx3YXlzIHJvdW5kZWQgdXAgdG8gdGhlIG5leHQgcGFnZS4gICovCisgI2lmIF9fTElOVVhfS0VSTkVMX1ZFUlNJT04gPj0gMTMyMzU1CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzQxMC1hbHBoYS1uby1wYWdlLWhlYWRlci5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNDEwLWFscGhhLW5vLXBhZ2UtaGVhZGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMzk3ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzQxMC1hbHBoYS1uby1wYWdlLWhlYWRlci5wYXRjaApAQCAtMCwwICsxLDI4IEBACisyMDA4LTA2LTA3ICBNaWtlIEZyeXNpbmdlciAgPHZhcGllckBnZW50b28ub3JnPgorCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXMvdXNlci5oOiBDb3B5IHBhZ2UuaCBkZWZpbml0aW9ucworCWZyb20gdGhlIGtlcm5lbCBoZWFkZXIgdG8gc3lzL3VzZXIuaCBhbmQgcmVtb3ZlIHRoZSAjaW5jbHVkZSBvZgorCXN5cy91c2VyLmguCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5cy91c2VyLmggZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXMvdXNlci5oCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5cy91c2VyLmgJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5cy91c2VyLmgJMjAwOS0xMS0xMyAwMDo1MDo0Ny4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMyw3ICsyMyw2IEBACisgICAgb25seS4gRG9uJ3QgcmVhZCB0b28gbXVjaCBpbnRvIGl0LiBEb24ndCB1c2UgaXQgZm9yIGFueXRoaW5nIG90aGVyCisgICAgdGhhbiBnZGIvc3RyYWNlIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuICovCisgCistI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisgI2luY2x1ZGUgPGFzbS9yZWcuaD4KKyAKKyBzdHJ1Y3QgdXNlcgorQEAgLTQxLDYgKzQwLDkgQEAKKyAgIGNoYXIgdV9jb21tWzMyXTsJCQkJLyogdXNlciBjb21tYW5kIG5hbWUgKi8KKyB9OworIAorKyNkZWZpbmUgUEFHRV9TSElGVAkJMTMKKysjZGVmaW5lIFBBR0VfU0laRQkJKDEgPDwgUEFHRV9TSElGVCkKKysjZGVmaW5lIFBBR0VfTUFTSwkJKH4oUEFHRV9TSVpFLTEpKQorICNkZWZpbmUgTkJQRwkJCVBBR0VfU0laRQorICNkZWZpbmUgVVBBR0VTCQkJMQorICNkZWZpbmUgSE9TVF9URVhUX1NUQVJUX0FERFIJKHUuc3RhcnRfY29kZSkKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzL3VzZXIuaCBnbGliYy0yLjEwLjEvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzL3VzZXIuaApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS80MjAtYWxwaGEtbm8tYXNtLWVsZi1oZWFkZXIucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzQyMC1hbHBoYS1uby1hc20tZWxmLWhlYWRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGUyOGFkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS80MjAtYWxwaGEtbm8tYXNtLWVsZi1oZWFkZXIucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorMjAwNy0wMy0xMyAgTWlrZSBGcnlzaW5nZXIgIDx2YXBpZXJAZ2VudG9vLm9yZz4KKworCSogc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzL3Byb2Nmcy5oOiBDb3B5IHNvbWUgZGVmaW5lcworCWZyb20gYWxwaGEncyBhc20vZWxmLmgKKworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzL3Byb2Nmcy5oIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzL3Byb2Nmcy5oCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5cy9wcm9jZnMuaAkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzL3Byb2Nmcy5oCTIwMDktMTEtMTMgMDA6NTA6NDkuMDAwMDAwMDAwICswMTAwCitAQCAtMjksMTAgKzI5LDIzIEBACisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvdWNvbnRleHQuaD4KKyAjaW5jbHVkZSA8c3lzL3VzZXIuaD4KKy0jaW5jbHVkZSA8YXNtL2VsZi5oPgorIAorIF9fQkVHSU5fREVDTFMKKyAKKysvKgorKyAqIFRoZSBPU0YvMSB2ZXJzaW9uIG9mIDxzeXMvcHJvY2ZzLmg+IG1ha2VzIGdyZWdzZXRfdCA0NiBlbnRyaWVzIGxvbmcuCisrICogSSBoYXZlIG5vIGlkZWEgd2h5IHRoYXQgaXMgc28uICBGb3Igbm93LCB3ZSBqdXN0IGxlYXZlIGl0IGF0IDMzCisrICogKDMyIGdlbmVyYWwgcmVncyArIHByb2Nlc3NvciBzdGF0dXMgd29yZCkuIAorKyAqLworKyNkZWZpbmUgRUxGX05HUkVHCTMzCisrI2RlZmluZSBFTEZfTkZQUkVHCTMyCisrCisrdHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7CisrdHlwZWRlZiBlbGZfZ3JlZ190IGVsZl9ncmVnc2V0X3RbRUxGX05HUkVHXTsKKysKKyt0eXBlZGVmIGRvdWJsZSBlbGZfZnByZWdfdDsKKyt0eXBlZGVmIGVsZl9mcHJlZ190IGVsZl9mcHJlZ3NldF90W0VMRl9ORlBSRUddOworKworIHN0cnVjdCBlbGZfc2lnaW5mbworICAgeworICAgICBpbnQgc2lfc2lnbm87CQkJLyogU2lnbmFsIG51bWJlci4gICovCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3BvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5cy9wcm9jZnMuaCBnbGliYy0yLjEwLjEvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzL3Byb2Nmcy5oCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzQzMC1hbHBoYS1jcmVhdC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNDMwLWFscGhhLWNyZWF0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MDI5NGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzQzMC1hbHBoYS1jcmVhdC5wYXRjaApAQCAtMCwwICsxLDE0IEBACithbHBoYSBkb2VzIG5vdCBoYXZlIGEgX19OUl9jcmVhdAorCitodHRwOi8vYnVncy5nZW50b28ub3JnLzIyNzI3NQoraHR0cDovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD02NjUwCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvd29yZHNpemUtNjQvY3JlYXQ2NC5jIGdsaWJjLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC93b3Jkc2l6ZS02NC9jcmVhdDY0LmMKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC93b3Jkc2l6ZS02NC9jcmVhdDY0LmMJMjAwNy0xMS0xMCAyMDozNDoyNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvd29yZHNpemUtNjQvY3JlYXQ2NC5jCTIwMDktMTEtMTMgMDA6NTA6NTEuMDAwMDAwMDAwICswMTAwCitAQCAtMSArMSw1IEBACisgLyogRGVmaW5lZCBhcyBhbGlhcyBmb3IgdGhlIHN5c2NhbGwuICAqLworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaWZuZGVmIF9fTlJfY3JlYXQKKysjaW5jbHVkZSAiLi4vLi4vLi4vLi4vLi4vaW8vY3JlYXQ2NC5jIgorKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS80NDAtYWxwaGEtY2FjaGUtc2hhcGUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzQ0MC1hbHBoYS1jYWNoZS1zaGFwZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2QwNzUzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS80NDAtYWxwaGEtY2FjaGUtc2hhcGUucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorb2xkZXIgdmVyaXNvbnMgb2YgZ2xpYmMgd291bGQgYnVpbGQgZGwtc3lzZGVwIGFzIHNoYXJlZC1vbmx5IGFuZCBkbC1zdXBwb3J0IGFzCitzdGF0aWMtb25seS4gIGFscGhhIGhvb2tzIGluIGEgY2FjaGUgdmFyaWFibGUgdmlhIGRsLWF1eHYuaC4gIG5ld2VyIHZlcnNpb25zIG9mCitnbGliYyBidWlsZCBkbC1zeXNkZXAgYXMgYm90aCBzaGFyZWQgYW5kIHN0YXRpYyB3aGljaCBtZWFucyB3ZSBub3cgaGF2ZSBzeW1ib2wKK2R1cGxpY2F0aW9uIGZvciBzdGF0aWMgYnVpbGRzIHdpdGggZGwtc3lzZGVwIGFuZCBkbC1zdXBwb3J0LiAgc2luY2UgZGwtc3lzZGVwCitpcyBib3RoIHNoYXJlZC9zdGF0aWMsIHRoZXJlIGlzIG5vIHBvaW50IGluIGhvb2tpbmcgZGwtc3VwcG9ydCBhbnltb3JlLCBzbyB3ZQorY2FuIHB1bnQgaXQuCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2RsLXN1cHBvcnQuYyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2RsLXN1cHBvcnQuYworLS0tIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9kbC1zdXBwb3J0LmMJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2RsLXN1cHBvcnQuYwkyMDA5LTExLTEzIDAwOjUwOjUzLjAwMDAwMDAwMCArMDEwMAorQEAgLTEsMiArMSwxIEBACistI2luY2x1ZGUgImRsLWF1eHYuaCIKKyAjaW5jbHVkZSA8ZWxmL2RsLXN1cHBvcnQuYz4KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNDUwLWFscGhhLXB0ci1tYW5nbGluZy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNDUwLWFscGhhLXB0ci1tYW5nbGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDgzNjU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS80NTAtYWxwaGEtcHRyLW1hbmdsaW5nLnBhdGNoCkBAIC0wLDAgKzEsMTExIEBACitodHRwOi8vYnVncy5nZW50b28ub3JnLzIwMTkxMAorCitGb3IgZXZlcnkgYXJjaCwgUFRSX01BTkdMRSBhbmQgUFRSX0RFTUFOR0xFIGRlZmluZXMgYXJlIGluCitzeXNkZXBzL3VuaXgvc3lzdi9saW51eC88YXJjaD4vc3lzZGVwLmguIEJ1dCBmb3IgYWxwaGEgdGhpcyBpcyBub3QgdHJ1ZS4gVGhlCitkZWZpbmVzIGFyZSBpbiBzeXNkZXBzL3VuaXgvYWxwaGEvc3lzZGVwLmggYW5kIHVuaXgvc3lzdi9saW51eC9hbHBoYS9zeXNkZXAuaAoraW5jbHVkZXMgdGhlIGZpcnN0LgorCitUaGlzIGlzIGEgcGF0Y2ggdGhhdCBmaXhlcyB0aGUgaXNzdWUgYW5kIGxldCBhbHBoYSBidWlsZCwgYXQgdGhlIGV4cGVuc2Ugb2YKK2Rpc2FibGluZyBNQU5HTElORyBpbiB0aGUgbm9uIFBJQyBjYXNlLCBidXQgZ29vZ2xpbmcgc2hvd2VkIHRoYXQgdGhlIGlzc3VlIGlzCitrbm93biwgYW5kIHRoYXQgbm9ib2R5IHJlYWxseSBjYXJlcyBhYm91dCBpdC4gCisKK0luZm8gZnJvbTogaHR0cDovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01MjE2CisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9hbHBoYS9zeXNkZXAuaCBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9hbHBoYS9zeXNkZXAuaAorLS0tIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvYWxwaGEvc3lzZGVwLmgJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9hbHBoYS9zeXNkZXAuaAkyMDA5LTExLTEzIDAwOjUwOjU1LjAwMDAwMDAwMCArMDEwMAorQEAgLTM5Nyw0MiArMzk3LDQgQEAKKyAJX3NjX3JldCA9IF9zY18wLCBfc2NfZXJyID0gX3NjXzE5OwkJCVwKKyB9CisgCistLyogUG9pbnRlciBtYW5nbGluZyBzdXBwb3J0LiAgTm90ZSB0aGF0IHRscyBhY2Nlc3MgaXMgc2xvdyBlbm91Z2ggdGhhdAorLSAgIHdlIGRvbid0IGRlb3B0aW1pemUgdGhpbmdzIGJ5IHBsYWNpbmcgdGhlIHBvaW50ZXIgY2hlY2sgdmFsdWUgdGhlcmUuICAqLworLQorLSNpbmNsdWRlIDxzdGRpbnQuaD4KKy0KKy0jaWYgZGVmaW5lZCBOT1RfSU5fbGliYyAmJiBkZWZpbmVkIElTX0lOX3J0bGQKKy0jIGlmZGVmIF9fQVNTRU1CTEVSX18KKy0jICBkZWZpbmUgUFRSX01BTkdMRShkc3QsIHNyYywgdG1wKQkJCQlcCistCWxkYWgJdG1wLCBfX3BvaW50ZXJfY2hrX2d1YXJkX2xvY2FsKCQyOSkgIWdwcmVsaGlnaDsJXAorLQlsZHEJdG1wLCBfX3BvaW50ZXJfY2hrX2d1YXJkX2xvY2FsKHRtcCkgIWdwcmVsbG93OwlcCistCXhvcglzcmMsIHRtcCwgZHN0CistIyAgZGVmaW5lIFBUUl9NQU5HTEUyKGRzdCwgc3JjLCB0bXApCQkJCVwKKy0JeG9yCXNyYywgdG1wLCBkc3QKKy0jICBkZWZpbmUgUFRSX0RFTUFOR0xFKGRzdCwgdG1wKSAgIFBUUl9NQU5HTEUoZHN0LCBkc3QsIHRtcCkKKy0jICBkZWZpbmUgUFRSX0RFTUFOR0xFMihkc3QsIHRtcCkgIFBUUl9NQU5HTEUyKGRzdCwgZHN0LCB0bXApCistIyBlbHNlCistZXh0ZXJuIHVpbnRwdHJfdCBfX3BvaW50ZXJfY2hrX2d1YXJkX2xvY2FsIGF0dHJpYnV0ZV9yZWxybyBhdHRyaWJ1dGVfaGlkZGVuOworLSMgIGRlZmluZSBQVFJfTUFOR0xFKHZhcikJXAorLSAgKHZhcikgPSAoX190eXBlb2YgKHZhcikpICgodWludHB0cl90KSAodmFyKSBeIF9fcG9pbnRlcl9jaGtfZ3VhcmRfbG9jYWwpCistIyAgZGVmaW5lIFBUUl9ERU1BTkdMRSh2YXIpICBQVFJfTUFOR0xFKHZhcikKKy0jIGVuZGlmCistI2VsaWYgZGVmaW5lZCBQSUMKKy0jIGlmZGVmIF9fQVNTRU1CTEVSX18KKy0jICBkZWZpbmUgUFRSX01BTkdMRShkc3QsIHNyYywgdG1wKQkJXAorLQlsZHEJdG1wLCBfX3BvaW50ZXJfY2hrX2d1YXJkOwlcCistCXhvcglzcmMsIHRtcCwgZHN0CistIyAgZGVmaW5lIFBUUl9NQU5HTEUyKGRzdCwgc3JjLCB0bXApCQlcCistCXhvcglzcmMsIHRtcCwgZHN0CistIyAgZGVmaW5lIFBUUl9ERU1BTkdMRShkc3QsIHRtcCkgICBQVFJfTUFOR0xFKGRzdCwgZHN0LCB0bXApCistIyAgZGVmaW5lIFBUUl9ERU1BTkdMRTIoZHN0LCB0bXApICBQVFJfTUFOR0xFMihkc3QsIGRzdCwgdG1wKQorLSMgZWxzZQorLWV4dGVybiB1aW50cHRyX3QgX19wb2ludGVyX2Noa19ndWFyZCBhdHRyaWJ1dGVfcmVscm87CistIyAgZGVmaW5lIFBUUl9NQU5HTEUodmFyKQlcCistCSh2YXIpID0gKHZvaWQgKikgKCh1aW50cHRyX3QpICh2YXIpIF4gX19wb2ludGVyX2Noa19ndWFyZCkKKy0jICBkZWZpbmUgUFRSX0RFTUFOR0xFKHZhcikgIFBUUl9NQU5HTEUodmFyKQorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKyAjZW5kaWYgLyogQVNTRU1CTEVSICovCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXNkZXAuaCBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5c2RlcC5oCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL3N5c2RlcC5oCTIwMDktMDUtMTYgMTA6MzY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXNkZXAuaAkyMDA5LTExLTEzIDAwOjUwOjU1LjAwMDAwMDAwMCArMDEwMAorQEAgLTk4LDQgKzk4LDQ2IEBACisgCUlOVEVSTkFMX1NZU0NBTEwxKG5hbWUsIGVycl9vdXQsIG5yLCBhcmdzKTsJCQlcCisgfSkKKyAKKysvKiBQb2ludGVyIG1hbmdsaW5nIHN1cHBvcnQuICBOb3RlIHRoYXQgdGxzIGFjY2VzcyBpcyBzbG93IGVub3VnaCB0aGF0CisrICAgd2UgZG9uJ3QgZGVvcHRpbWl6ZSB0aGluZ3MgYnkgcGxhY2luZyB0aGUgcG9pbnRlciBjaGVjayB2YWx1ZSB0aGVyZS4gICovCisrCisrI2lmIGRlZmluZWQgTk9UX0lOX2xpYmMgJiYgZGVmaW5lZCBJU19JTl9ydGxkCisrIyBpZmRlZiBfX0FTU0VNQkxFUl9fCisrIyAgZGVmaW5lIFBUUl9NQU5HTEUoZHN0LCBzcmMsIHRtcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICBsZGFoICAgIHRtcCwgX19wb2ludGVyX2Noa19ndWFyZF9sb2NhbCgkMjkpICFncHJlbGhpZ2g7IFwKKysgICAgICAgbGRxICAgICB0bXAsIF9fcG9pbnRlcl9jaGtfZ3VhcmRfbG9jYWwodG1wKSAhZ3ByZWxsb3c7ICBcCisrICAgICAgIHhvciAgICAgc3JjLCB0bXAsIGRzdAorKyMgIGRlZmluZSBQVFJfTUFOR0xFMihkc3QsIHNyYywgdG1wKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgeG9yICAgICBzcmMsIHRtcCwgZHN0CisrIyAgZGVmaW5lIFBUUl9ERU1BTkdMRShkc3QsIHRtcCkgICBQVFJfTUFOR0xFKGRzdCwgZHN0LCB0bXApCisrIyAgZGVmaW5lIFBUUl9ERU1BTkdMRTIoZHN0LCB0bXApICBQVFJfTUFOR0xFMihkc3QsIGRzdCwgdG1wKQorKyMgZWxzZQorK2V4dGVybiB1aW50cHRyX3QgX19wb2ludGVyX2Noa19ndWFyZF9sb2NhbCBhdHRyaWJ1dGVfcmVscm8gYXR0cmlidXRlX2hpZGRlbjsKKysjICBkZWZpbmUgUFRSX01BTkdMRSh2YXIpICAgICAgXAorKyAgKHZhcikgPSAoX190eXBlb2YgKHZhcikpICgodWludHB0cl90KSAodmFyKSBeIF9fcG9pbnRlcl9jaGtfZ3VhcmRfbG9jYWwpCisrIyAgZGVmaW5lIFBUUl9ERU1BTkdMRSh2YXIpICBQVFJfTUFOR0xFKHZhcikKKysjIGVuZGlmCisrI2VsaWYgZGVmaW5lZCBQSUMKKysjIGlmZGVmIF9fQVNTRU1CTEVSX18KKysjICBkZWZpbmUgUFRSX01BTkdMRShkc3QsIHNyYywgdG1wKSAgICAgICAgICAgIFwKKysgICAgICAgbGRxICAgICB0bXAsIF9fcG9pbnRlcl9jaGtfZ3VhcmQ7ICAgICAgIFwKKysgICAgICAgeG9yICAgICBzcmMsIHRtcCwgZHN0CisrIyAgZGVmaW5lIFBUUl9NQU5HTEUyKGRzdCwgc3JjLCB0bXApICAgICAgICAgICBcCisrICAgICAgIHhvciAgICAgc3JjLCB0bXAsIGRzdAorKyMgIGRlZmluZSBQVFJfREVNQU5HTEUoZHN0LCB0bXApICAgUFRSX01BTkdMRShkc3QsIGRzdCwgdG1wKQorKyMgIGRlZmluZSBQVFJfREVNQU5HTEUyKGRzdCwgdG1wKSAgUFRSX01BTkdMRTIoZHN0LCBkc3QsIHRtcCkKKysjIGVsc2UKKytleHRlcm4gdWludHB0cl90IF9fcG9pbnRlcl9jaGtfZ3VhcmQgYXR0cmlidXRlX3JlbHJvOworKyMgIGRlZmluZSBQVFJfTUFOR0xFKHZhcikgICAgICBcCisrICAgICAgICh2YXIpID0gKHZvaWQgKikgKCh1aW50cHRyX3QpICh2YXIpIF4gX19wb2ludGVyX2Noa19ndWFyZCkKKysjICBkZWZpbmUgUFRSX0RFTUFOR0xFKHZhcikgIFBUUl9NQU5HTEUodmFyKQorKyMgZW5kaWYKKysjZWxzZQorKy8qIFBvaW50ZXIgbWFuZ2xpbmcgaXMgbm90IHlldCBzdXBwb3J0ZWQgZm9yIHN0YXRpYyBsaWJjIG9uIGFscGhhLiAgKi8KKysjIGlmbmRlZiBfX0FTU0VNQkxFUl9fCisrIyAgZGVmaW5lIFBUUl9NQU5HTEUodmFyKSAgICh2b2lkKSAodmFyKQorKyMgIGRlZmluZSBQVFJfREVNQU5HTEUodmFyKSAodm9pZCkgKHZhcikKKysjIGVuZGlmCisrI2VuZGlmCisrCisgI2VuZGlmIC8qIF9MSU5VWF9BTFBIQV9TWVNERVBfSCAqLworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3J0cy9zeXNkZXBzL3VuaXgvYWxwaGEvc3lzZGVwLmggZ2xpYmMtMi4xMC4xL3BvcnRzL3N5c2RlcHMvdW5peC9hbHBoYS9zeXNkZXAuaAorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXNkZXAuaCBnbGliYy0yLjEwLjEvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzZGVwLmgKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNDYwLWFscGhhLWZpeC1nY2MtNC4xLXdhcm5pbmdzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS80NjAtYWxwaGEtZml4LWdjYy00LjEtd2FybmluZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY1NzIzMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNDYwLWFscGhhLWZpeC1nY2MtNC4xLXdhcm5pbmdzLnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKKzIwMDYtMDUtMzAgIEZhbGsgSHVlZmZuZXIgPGZhbGtAZGViaWFuLm9yZz4KKworCSogc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvaW9wZXJtLmM6IGZvcmNlIHRoZSBhcmNoaXRlY3R1cmUKKwkgIHRvIGV2NiBpbiBhc3NlbWJseSBjb2RlLgorCit7c3RhbmRhcmQgaW5wdXR9OiBBc3NlbWJsZXIgbWVzc2FnZXM6Cit7c3RhbmRhcmQgaW5wdXR9OjM0MTogRXJyb3I6IG1hY3JvIHJlcXVpcmVzICRhdCByZWdpc3RlciB3aGlsZSBub2F0IGluIGVmZmVjdAore3N0YW5kYXJkIGlucHV0fTozNzQ6IEVycm9yOiBtYWNybyByZXF1aXJlcyAkYXQgcmVnaXN0ZXIgd2hpbGUgbm9hdCBpbiBlZmZlY3QKK3tzdGFuZGFyZCBpbnB1dH06NDM4OiBFcnJvcjogbWFjcm8gcmVxdWlyZXMgJGF0IHJlZ2lzdGVyIHdoaWxlIG5vYXQgaW4gZWZmZWN0Cit7c3RhbmRhcmQgaW5wdXR9OjQ3MTogRXJyb3I6IG1hY3JvIHJlcXVpcmVzICRhdCByZWdpc3RlciB3aGlsZSBub2F0IGluIGVmZmVjdAorbWFrZVszXTogKioqIFsvdG1wL2J1aWxkZC9nbGliYy0yLjMuNi9idWlsZC10cmVlL2FscGhhLWxpYmMvbWlzYy9pb3Blcm0ub10gRXJyb3IgMQorCitIcm0uIGdjYyBwdXRzIC5hcmNoIGV2NCBpbnRvIHRoZSAucywgYW5kIHRoaXMgb3ZlcnJpZGVzIC1tZXY2IGZvciBhcy4KK0kgY2Fubm90IHJlYWxseSB0aGluayBvZiBhbnl0aGluZyBiZXR0ZXIgdGhhbgorCisgcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvaW9wZXJtLmMgfCAgICA4ICsrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvaW9wZXJtLmMgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9pb3Blcm0uYworLS0tIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9pb3Blcm0uYwkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvaW9wZXJtLmMJMjAwOS0xMS0xMyAwMDo1MDo1Ny4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNzgsMTMgKzE3OCwxMyBAQAorIHN0YXRpYyBpbmxpbmUgdm9pZAorIHN0Yl9tYih1bnNpZ25lZCBjaGFyIHZhbCwgdW5zaWduZWQgbG9uZyBhZGRyKQorIHsKKy0gIF9fYXNtX18oInN0YiAlMSwlMDsgbWIiIDogIj1tIigqKHZ1Y3ApYWRkcikgOiAiciIodmFsKSk7CisrICBfX2FzbV9fKCIuYXJjaCBldjY7IHN0YiAlMSwlMDsgbWIiIDogIj1tIigqKHZ1Y3ApYWRkcikgOiAiciIodmFsKSk7CisgfQorIAorIHN0YXRpYyBpbmxpbmUgdm9pZAorIHN0d19tYih1bnNpZ25lZCBzaG9ydCB2YWwsIHVuc2lnbmVkIGxvbmcgYWRkcikKKyB7CistICBfX2FzbV9fKCJzdHcgJTEsJTA7IG1iIiA6ICI9bSIoKih2dXNwKWFkZHIpIDogInIiKHZhbCkpOworKyAgX19hc21fXygiLmFyY2ggZXY2OyBzdHcgJTEsJTA7IG1iIiA6ICI9bSIoKih2dXNwKWFkZHIpIDogInIiKHZhbCkpOworIH0KKyAKKyBzdGF0aWMgaW5saW5lIHZvaWQKK0BAIC0zNTYsNyArMzU2LDcgQEAKKyAgIHVuc2lnbmVkIGxvbmcgaW50IGFkZHIgPSBkZW5zZV9wb3J0X3RvX2NwdV9hZGRyIChwb3J0KTsKKyAgIHVuc2lnbmVkIGNoYXIgcjsKKyAKKy0gIF9fYXNtX18gKCJsZGJ1ICUwLCUxIiA6ICI9ciIocikgOiAibSIoKih2dWNwKWFkZHIpKTsKKysgIF9fYXNtX18gKCIuYXJjaCBldjY7IGxkYnUgJTAsJTEiIDogIj1yIihyKSA6ICJtIigqKHZ1Y3ApYWRkcikpOworICAgcmV0dXJuIHI7CisgfQorIAorQEAgLTM2Niw3ICszNjYsNyBAQAorICAgdW5zaWduZWQgbG9uZyBpbnQgYWRkciA9IGRlbnNlX3BvcnRfdG9fY3B1X2FkZHIgKHBvcnQpOworICAgdW5zaWduZWQgc2hvcnQgcjsKKyAKKy0gIF9fYXNtX18gKCJsZHd1ICUwLCUxIiA6ICI9ciIocikgOiAibSIoKih2dXNwKWFkZHIpKTsKKysgIF9fYXNtX18gKCIuYXJjaCBldjY7IGxkd3UgJTAsJTEiIDogIj1yIihyKSA6ICJtIigqKHZ1c3ApYWRkcikpOworICAgcmV0dXJuIHI7CisgfQorIAorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9pb3Blcm0uYyBnbGliYy0yLjEwLjEvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvaW9wZXJtLmMKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNDcwLWFscGhhLWZsb29yX2NlaWxfZml4LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS80NzAtYWxwaGEtZmxvb3JfY2VpbF9maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcxZTFmYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNDcwLWFscGhhLWZsb29yX2NlaWxfZml4LnBhdGNoCkBAIC0wLDAgKzEsMjcwIEBACitodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01MzUwCitodHRwczovL2J1Z3MuZ2VudG9vLm9yZy8yNjQzMzUKKworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hbHBoYS9mcHUvc19jZWlsLmMgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FscGhhL2ZwdS9zX2NlaWwuYworLS0tIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FscGhhL2ZwdS9zX2NlaWwuYwkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hbHBoYS9mcHUvc19jZWlsLmMJMjAwOS0xMS0xMyAwMDo1MDo1OS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNywyMCArMjcsMjUgQEAKKyBkb3VibGUKKyBfX2NlaWwgKGRvdWJsZSB4KQorIHsKKy0gIGRvdWJsZSB0d281MiA9IGNvcHlzaWduICgweDEuMHA1MiwgeCk7CistICBkb3VibGUgciwgdG1wOworLSAgCistICBfX2FzbSAoCisrICBpZiAoaXNsZXNzIChmYWJzICh4KSwgOTAwNzE5OTI1NDc0MDk5Mi4wKSkJLyogMSA8PCBEQkxfTUFOVF9ESUcgKi8KKysgICAgeworKyAgICAgIGRvdWJsZSB0bXAxLCBuZXdfeDsKKysKKysgICAgICBuZXdfeCA9IC14OworKyAgICAgIF9fYXNtICgKKyAjaWZkZWYgX0lFRUVfRlBfSU5FWEFDVAorLQkgImFkZHQvc3VpbSAlMiwgJTMsICUxXG5cdHN1YnQvc3VpbSAlMSwgJTMsICUwIgorKwkgICAgICJjdnR0cS9zdmltICUyLCUxXG5cdCIKKyAjZWxzZQorLQkgImFkZHQvc3VtICUyLCAlMywgJTFcblx0c3VidC9zdW0gJTEsICUzLCAlMCIKKysJICAgICAiY3Z0dHEvc3ZtICUyLCUxXG5cdCIKKyAjZW5kaWYKKy0JIDogIj0mZiIociksICI9JmYiKHRtcCkKKy0JIDogImYiKC14KSwgImYiKC10d281MikpOworKwkgICAgICJjdnRxdC9tICUxLCUwXG5cdCIKKysJICAgICA6ICI9ZiIobmV3X3gpLCAiPSZmIih0bXAxKQorKwkgICAgIDogImYiKG5ld194KSk7CisgCistICAvKiBGaXggdXAgdGhlIG5lZ2F0aW9uIHdlIGRpZCBhYm92ZSwgYXMgd2VsbCBhcyBoYW5kbGluZyAtMCBwcm9wZXJseS4gKi8KKy0gIHJldHVybiBjb3B5c2lnbiAociwgeCk7CisrICAgICAgLyogRml4IHVwIHRoZSBuZWdhdGlvbiB3ZSBkaWQgYWJvdmUsIGFzIHdlbGwgYXMgaGFuZGxpbmcgLTAgcHJvcGVybHkuICovCisrICAgICAgeCA9IGNvcHlzaWduKG5ld194LCB4KTsKKysgICAgfQorKyAgcmV0dXJuIHg7CisgfQorIAorIHdlYWtfYWxpYXMgKF9fY2VpbCwgY2VpbCkKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYWxwaGEvZnB1L3NfY2VpbGYuYyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYWxwaGEvZnB1L3NfY2VpbGYuYworLS0tIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FscGhhL2ZwdS9zX2NlaWxmLmMJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYWxwaGEvZnB1L3NfY2VpbGYuYwkyMDA5LTExLTEzIDAwOjUwOjU5LjAwMDAwMDAwMCArMDEwMAorQEAgLTI2LDIwICsyNiwzMCBAQAorIGZsb2F0CisgX19jZWlsZiAoZmxvYXQgeCkKKyB7CistICBmbG9hdCB0d28yMyA9IGNvcHlzaWduZiAoMHgxLjBwMjMsIHgpOworLSAgZmxvYXQgciwgdG1wOworLSAgCistICBfX2FzbSAoCisrICBpZiAoaXNsZXNzIChmYWJzZiAoeCksIDE2Nzc3MjE2LjBmKSkJLyogMSA8PCBGTFRfTUFOVF9ESUcgKi8KKysgICAgeworKyAgICAgIC8qIE5vdGUgdGhhdCBBbHBoYSBTX0Zsb2F0aW5nIGlzIHN0b3JlZCBpbiByZWdpc3RlcnMgaW4gYQorKwkgcmVzdHJpY3RlZCBUX0Zsb2F0aW5nIGZvcm1hdCwgc28gd2UgZG9uJ3QgZXZlbiBuZWVkIHRvCisrCSBjb252ZXJ0IGJhY2sgdG8gU19GbG9hdGluZyBpbiB0aGUgZW5kLiAgVGhlIGluaXRpYWwKKysJIGNvbnZlcnNpb24gdG8gVF9GbG9hdGluZyBpcyBuZWVkZWQgdG8gaGFuZGxlIGRlbm9ybWFscy4gICovCisrCisrICAgICAgZmxvYXQgdG1wMSwgdG1wMiwgbmV3X3g7CisrCisrICAgICAgbmV3X3ggPSAteDsKKysgICAgICBfX2FzbSAoImN2dHN0L3MgJTMsJTJcblx0IgorICNpZmRlZiBfSUVFRV9GUF9JTkVYQUNUCistCSAiYWRkcy9zdWltICUyLCAlMywgJTFcblx0c3Vicy9zdWltICUxLCAlMywgJTAiCisrCSAgICAgImN2dHRxL3N2aW0gJTIsJTFcblx0IgorICNlbHNlCistCSAiYWRkcy9zdW0gJTIsICUzLCAlMVxuXHRzdWJzL3N1bSAlMSwgJTMsICUwIgorKwkgICAgICJjdnR0cS9zdm0gJTIsJTFcblx0IgorICNlbmRpZgorLQkgOiAiPSZmIihyKSwgIj0mZiIodG1wKQorLQkgOiAiZiIoLXgpLCAiZiIoLXR3bzIzKSk7CisrCSAgICAgImN2dHF0L20gJTEsJTBcblx0IgorKwkgICAgIDogIj1mIihuZXdfeCksICI9JmYiKHRtcDEpLCAiPSZmIih0bXAyKQorKwkgICAgIDogImYiKG5ld194KSk7CisgCistICAvKiBGaXggdXAgdGhlIG5lZ2F0aW9uIHdlIGRpZCBhYm92ZSwgYXMgd2VsbCBhcyBoYW5kbGluZyAtMCBwcm9wZXJseS4gKi8KKy0gIHJldHVybiBjb3B5c2lnbmYgKHIsIHgpOworKyAgICAgIC8qIEZpeCB1cCB0aGUgbmVnYXRpb24gd2UgZGlkIGFib3ZlLCBhcyB3ZWxsIGFzIGhhbmRsaW5nIC0wIHByb3Blcmx5LiAqLworKyAgICAgIHggPSBjb3B5c2lnbmYobmV3X3gsIHgpOworKyAgICB9CisrICByZXR1cm4geDsKKyB9CisgCisgd2Vha19hbGlhcyAoX19jZWlsZiwgY2VpbGYpCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FscGhhL2ZwdS9zX2Zsb29yLmMgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FscGhhL2ZwdS9zX2Zsb29yLmMKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hbHBoYS9mcHUvc19mbG9vci5jCTIwMDktMDUtMTYgMTA6MzY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FscGhhL2ZwdS9zX2Zsb29yLmMJMjAwOS0xMS0xMyAwMDo1MDo1OS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMSwyNiArMjEsMzIgQEAKKyAjaW5jbHVkZSA8bWF0aF9sZGJsX29wdC5oPgorIAorIAorLS8qIFVzZSB0aGUgLWluZiByb3VuZGluZyBtb2RlIGNvbnZlcnNpb24gaW5zdHJ1Y3Rpb25zIHRvIGltcGxlbWVudCBmbG9vci4gICovCisrLyogVXNlIHRoZSAtaW5mIHJvdW5kaW5nIG1vZGUgY29udmVyc2lvbiBpbnN0cnVjdGlvbnMgdG8gaW1wbGVtZW50CisrICAgZmxvb3IuICBXZSBub3RlIHdoZW4gdGhlIGV4cG9uZW50IGlzIGxhcmdlIGVub3VnaCB0aGF0IHRoZSB2YWx1ZQorKyAgIG11c3QgYmUgaW50ZWdyYWwsIGFzIHRoaXMgYXZvaWRzIHVucGxlYXNhbnQgaW50ZWdlciBvdmVyZmxvd3MuICAqLworIAorIGRvdWJsZQorIF9fZmxvb3IgKGRvdWJsZSB4KQorIHsKKy0gIGRvdWJsZSB0d281MiA9IGNvcHlzaWduICgweDEuMHA1MiwgeCk7CistICBkb3VibGUgciwgdG1wOworLSAgCistICBfX2FzbSAoCisrICBpZiAoaXNsZXNzIChmYWJzICh4KSwgOTAwNzE5OTI1NDc0MDk5Mi4wKSkJLyogMSA8PCBEQkxfTUFOVF9ESUcgKi8KKysgICAgeworKyAgICAgIGRvdWJsZSB0bXAxLCBuZXdfeDsKKysKKysgICAgICBfX2FzbSAoCisgI2lmZGVmIF9JRUVFX0ZQX0lORVhBQ1QKKy0JICJhZGR0L3N1aW0gJTIsICUzLCAlMVxuXHRzdWJ0L3N1aW0gJTEsICUzLCAlMCIKKysJICAgICAiY3Z0dHEvc3ZpbSAlMiwlMVxuXHQiCisgI2Vsc2UKKy0JICJhZGR0L3N1bSAlMiwgJTMsICUxXG5cdHN1YnQvc3VtICUxLCAlMywgJTAiCisrCSAgICAgImN2dHRxL3N2bSAlMiwlMVxuXHQiCisgI2VuZGlmCistCSA6ICI9JmYiKHIpLCAiPSZmIih0bXApCistCSA6ICJmIih4KSwgImYiKHR3bzUyKSk7CisrCSAgICAgImN2dHF0L20gJTEsJTBcblx0IgorKwkgICAgIDogIj1mIihuZXdfeCksICI9JmYiKHRtcDEpCisrCSAgICAgOiAiZiIoeCkpOworIAorLSAgLyogZmxvb3IoLTApID09IC0wLCBhbmQgaW4gZ2VuZXJhbCB3ZSdsbCBhbHdheXMgaGF2ZSB0aGUgc2FtZQorLSAgICAgc2lnbiBhcyBvdXIgaW5wdXQuICAqLworLSAgcmV0dXJuIGNvcHlzaWduIChyLCB4KTsKKysgICAgICAvKiBmbG9vcigtMCkgPT0gLTAsIGFuZCBpbiBnZW5lcmFsIHdlJ2xsIGFsd2F5cyBoYXZlIHRoZSBzYW1lCisrCSBzaWduIGFzIG91ciBpbnB1dC4gICovCisrICAgICAgeCA9IGNvcHlzaWduKG5ld194LCB4KTsKKysgICAgfQorKyAgcmV0dXJuIHg7CisgfQorIAorIHdlYWtfYWxpYXMgKF9fZmxvb3IsIGZsb29yKQorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hbHBoYS9mcHUvc19mbG9vcmYuYyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYWxwaGEvZnB1L3NfZmxvb3JmLmMKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hbHBoYS9mcHUvc19mbG9vcmYuYwkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hbHBoYS9mcHUvc19mbG9vcmYuYwkyMDA5LTExLTEzIDAwOjUwOjU5LjAwMDAwMDAwMCArMDEwMAorQEAgLTIwLDI2ICsyMCwzNyBAQAorICNpbmNsdWRlIDxtYXRoLmg+CisgCisgCistLyogVXNlIHRoZSAtaW5mIHJvdW5kaW5nIG1vZGUgY29udmVyc2lvbiBpbnN0cnVjdGlvbnMgdG8gaW1wbGVtZW50IGZsb29yLiAgKi8KKysvKiBVc2UgdGhlIC1pbmYgcm91bmRpbmcgbW9kZSBjb252ZXJzaW9uIGluc3RydWN0aW9ucyB0byBpbXBsZW1lbnQKKysgICBmbG9vci4gIFdlIG5vdGUgd2hlbiB0aGUgZXhwb25lbnQgaXMgbGFyZ2UgZW5vdWdoIHRoYXQgdGhlIHZhbHVlCisrICAgbXVzdCBiZSBpbnRlZ3JhbCwgYXMgdGhpcyBhdm9pZHMgdW5wbGVhc2FudCBpbnRlZ2VyIG92ZXJmbG93cy4gICovCisgCisgZmxvYXQKKyBfX2Zsb29yZiAoZmxvYXQgeCkKKyB7CistICBmbG9hdCB0d28yMyA9IGNvcHlzaWduZiAoMHgxLjBwMjMsIHgpOworLSAgZmxvYXQgciwgdG1wOworLSAgCistICBfX2FzbSAoCisrICBpZiAoaXNsZXNzIChmYWJzZiAoeCksIDE2Nzc3MjE2LjBmKSkJLyogMSA8PCBGTFRfTUFOVF9ESUcgKi8KKysgICAgeworKyAgICAgIC8qIE5vdGUgdGhhdCBBbHBoYSBTX0Zsb2F0aW5nIGlzIHN0b3JlZCBpbiByZWdpc3RlcnMgaW4gYQorKwkgcmVzdHJpY3RlZCBUX0Zsb2F0aW5nIGZvcm1hdCwgc28gd2UgZG9uJ3QgZXZlbiBuZWVkIHRvCisrCSBjb252ZXJ0IGJhY2sgdG8gU19GbG9hdGluZyBpbiB0aGUgZW5kLiAgVGhlIGluaXRpYWwKKysJIGNvbnZlcnNpb24gdG8gVF9GbG9hdGluZyBpcyBuZWVkZWQgdG8gaGFuZGxlIGRlbm9ybWFscy4gICovCisrCisrICAgICAgZmxvYXQgdG1wMSwgdG1wMiwgbmV3X3g7CisrCisrICAgICAgX19hc20gKCJjdnRzdC9zICUzLCUyXG5cdCIKKyAjaWZkZWYgX0lFRUVfRlBfSU5FWEFDVAorLQkgImFkZHMvc3VpbSAlMiwgJTMsICUxXG5cdHN1YnMvc3VpbSAlMSwgJTMsICUwIgorKwkgICAgICJjdnR0cS9zdmltICUyLCUxXG5cdCIKKyAjZWxzZQorLQkgImFkZHMvc3VtICUyLCAlMywgJTFcblx0c3Vicy9zdW0gJTEsICUzLCAlMCIKKysJICAgICAiY3Z0dHEvc3ZtICUyLCUxXG5cdCIKKyAjZW5kaWYKKy0JIDogIj0mZiIociksICI9JmYiKHRtcCkKKy0JIDogImYiKHgpLCAiZiIodHdvMjMpKTsKKysJICAgICAiY3Z0cXQvbSAlMSwlMFxuXHQiCisrCSAgICAgOiAiPWYiKG5ld194KSwgIj0mZiIodG1wMSksICI9JmYiKHRtcDIpCisrCSAgICAgOiAiZiIoeCkpOworIAorLSAgLyogZmxvb3IoLTApID09IC0wLCBhbmQgaW4gZ2VuZXJhbCB3ZSdsbCBhbHdheXMgaGF2ZSB0aGUgc2FtZQorLSAgICAgc2lnbiBhcyBvdXIgaW5wdXQuICAqLworLSAgcmV0dXJuIGNvcHlzaWduZiAociwgeCk7CisrICAgICAgLyogZmxvb3IoLTApID09IC0wLCBhbmQgaW4gZ2VuZXJhbCB3ZSdsbCBhbHdheXMgaGF2ZSB0aGUgc2FtZQorKwkgc2lnbiBhcyBvdXIgaW5wdXQuICAqLworKyAgICAgIHggPSBjb3B5c2lnbmYobmV3X3gsIHgpOworKyAgICB9CisrICByZXR1cm4geDsKKyB9CisgCisgd2Vha19hbGlhcyAoX19mbG9vcmYsIGZsb29yZikKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYWxwaGEvZnB1L3NfcmludC5jIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hbHBoYS9mcHUvc19yaW50LmMKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hbHBoYS9mcHUvc19yaW50LmMJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYWxwaGEvZnB1L3NfcmludC5jCTIwMDktMTEtMTMgMDA6NTA6NTkuMDAwMDAwMDAwICswMTAwCitAQCAtMjQsMTUgKzI0LDI0IEBACisgZG91YmxlCisgX19yaW50IChkb3VibGUgeCkKKyB7CistICBkb3VibGUgdHdvNTIgPSBjb3B5c2lnbiAoMHgxLjBwNTIsIHgpOworLSAgZG91YmxlIHI7CistICAKKy0gIHIgPSB4ICsgdHdvNTI7CistICByID0gciAtIHR3bzUyOworKyAgaWYgKGlzbGVzcyAoZmFicyAoeCksIDkwMDcxOTkyNTQ3NDA5OTIuMCkpCS8qIDEgPDwgREJMX01BTlRfRElHICovCisrICAgIHsKKysgICAgICBkb3VibGUgdG1wMSwgbmV3X3g7CisrICAgICAgX19hc20gKAorKyNpZmRlZiBfSUVFRV9GUF9JTkVYQUNUCisrCSAgICAgImN2dHRxL3N2aWQgJTIsJTFcblx0IgorKyNlbHNlCisrCSAgICAgImN2dHRxL3N2ZCAlMiwlMVxuXHQiCisrI2VuZGlmCisrCSAgICAgImN2dHF0L2QgJTEsJTBcblx0IgorKwkgICAgIDogIj1mIihuZXdfeCksICI9JmYiKHRtcDEpCisrCSAgICAgOiAiZiIoeCkpOworIAorLSAgLyogcmludCgtMC4xKSA9PSAtMCwgYW5kIGluIGdlbmVyYWwgd2UnbGwgYWx3YXlzIGhhdmUgdGhlIHNhbWUgc2lnbgorLSAgICAgYXMgb3VyIGlucHV0LiAgKi8KKy0gIHJldHVybiBjb3B5c2lnbiAociwgeCk7CisrICAgICAgLyogcmludCgtMC4xKSA9PSAtMCwgYW5kIGluIGdlbmVyYWwgd2UnbGwgYWx3YXlzIGhhdmUgdGhlIHNhbWUKKysJIHNpZ24gYXMgb3VyIGlucHV0LiAgKi8KKysgICAgICB4ID0gY29weXNpZ24obmV3X3gsIHgpOworKyAgICB9CisrICByZXR1cm4geDsKKyB9CisgCisgd2Vha19hbGlhcyAoX19yaW50LCByaW50KQorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hbHBoYS9mcHUvc19yaW50Zi5jIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hbHBoYS9mcHUvc19yaW50Zi5jCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYWxwaGEvZnB1L3NfcmludGYuYwkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hbHBoYS9mcHUvc19yaW50Zi5jCTIwMDktMTEtMTMgMDA6NTA6NTkuMDAwMDAwMDAwICswMTAwCitAQCAtMjMsMTUgKzIzLDMwIEBACisgZmxvYXQKKyBfX3JpbnRmIChmbG9hdCB4KQorIHsKKy0gIGZsb2F0IHR3bzIzID0gY29weXNpZ25mICgweDEuMHAyMywgeCk7CistICBmbG9hdCByOworKyAgaWYgKGlzbGVzcyAoZmFic2YgKHgpLCAxNjc3NzIxNi4wZikpCS8qIDEgPDwgRkxUX01BTlRfRElHICovCisrICAgIHsKKysgICAgICAvKiBOb3RlIHRoYXQgQWxwaGEgU19GbG9hdGluZyBpcyBzdG9yZWQgaW4gcmVnaXN0ZXJzIGluIGEKKysJIHJlc3RyaWN0ZWQgVF9GbG9hdGluZyBmb3JtYXQsIHNvIHdlIGRvbid0IGV2ZW4gbmVlZCB0bworKwkgY29udmVydCBiYWNrIHRvIFNfRmxvYXRpbmcgaW4gdGhlIGVuZC4gIFRoZSBpbml0aWFsCisrCSBjb252ZXJzaW9uIHRvIFRfRmxvYXRpbmcgaXMgbmVlZGVkIHRvIGhhbmRsZSBkZW5vcm1hbHMuICAqLworIAorLSAgciA9IHggKyB0d28yMzsKKy0gIHIgPSByIC0gdHdvMjM7CisrICAgICAgZmxvYXQgdG1wMSwgdG1wMiwgbmV3X3g7CisgCistICAvKiByaW50KC0wLjEpID09IC0wLCBhbmQgaW4gZ2VuZXJhbCB3ZSdsbCBhbHdheXMgaGF2ZSB0aGUgc2FtZSBzaWduCistICAgICBhcyBvdXIgaW5wdXQuICAqLworLSAgcmV0dXJuIGNvcHlzaWduIChyLCB4KTsKKysgICAgICBfX2FzbSAoImN2dHN0L3MgJTMsJTJcblx0IgorKyNpZmRlZiBfSUVFRV9GUF9JTkVYQUNUCisrCSAgICAgImN2dHRxL3N2aWQgJTIsJTFcblx0IgorKyNlbHNlCisrCSAgICAgImN2dHRxL3N2ZCAlMiwlMVxuXHQiCisrI2VuZGlmCisrCSAgICAgImN2dHF0L2QgJTEsJTBcblx0IgorKwkgICAgIDogIj1mIihuZXdfeCksICI9JmYiKHRtcDEpLCAiPSZmIih0bXAyKQorKwkgICAgIDogImYiKHgpKTsKKysKKysgICAgICAvKiByaW50KC0wLjEpID09IC0wLCBhbmQgaW4gZ2VuZXJhbCB3ZSdsbCBhbHdheXMgaGF2ZSB0aGUgc2FtZQorKwkgc2lnbiBhcyBvdXIgaW5wdXQuICAqLworKyAgICAgIHggPSBjb3B5c2lnbmYobmV3X3gsIHgpOworKyAgICB9CisrICByZXR1cm4geDsKKyB9CisgCisgd2Vha19hbGlhcyAoX19yaW50ZiwgcmludGYpCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3BvcnRzL3N5c2RlcHMvYWxwaGEvZnB1L3NfY2VpbC5jIGdsaWJjLTIuMTAuMS9wb3J0cy9zeXNkZXBzL2FscGhhL2ZwdS9zX2NlaWwuYworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3J0cy9zeXNkZXBzL2FscGhhL2ZwdS9zX2NlaWxmLmMgZ2xpYmMtMi4xMC4xL3BvcnRzL3N5c2RlcHMvYWxwaGEvZnB1L3NfY2VpbGYuYworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3J0cy9zeXNkZXBzL2FscGhhL2ZwdS9zX2Zsb29yLmMgZ2xpYmMtMi4xMC4xL3BvcnRzL3N5c2RlcHMvYWxwaGEvZnB1L3NfZmxvb3IuYworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3J0cy9zeXNkZXBzL2FscGhhL2ZwdS9zX2Zsb29yZi5jIGdsaWJjLTIuMTAuMS9wb3J0cy9zeXNkZXBzL2FscGhhL2ZwdS9zX2Zsb29yZi5jCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3BvcnRzL3N5c2RlcHMvYWxwaGEvZnB1L3NfcmludC5jIGdsaWJjLTIuMTAuMS9wb3J0cy9zeXNkZXBzL2FscGhhL2ZwdS9zX3JpbnQuYworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3J0cy9zeXNkZXBzL2FscGhhL2ZwdS9zX3JpbnRmLmMgZ2xpYmMtMi4xMC4xL3BvcnRzL3N5c2RlcHMvYWxwaGEvZnB1L3NfcmludGYuYwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS80ODAtYWxwaGEtYWRkLWRsLXByb2NpbmZvLXN1cHBvcnQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzQ4MC1hbHBoYS1hZGQtZGwtcHJvY2luZm8tc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2NlNzU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS80ODAtYWxwaGEtYWRkLWRsLXByb2NpbmZvLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxNzAgQEAKKyBwb3J0cy9zeXNkZXBzL2FscGhhL2RsLW1hY2hpbmUuaCAgfCAgIDEyICsrKysrKworIHBvcnRzL3N5c2RlcHMvYWxwaGEvZGwtcHJvY2luZm8uYyB8ICAgNjQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBwb3J0cy9zeXNkZXBzL2FscGhhL2RsLXByb2NpbmZvLmggfCAgIDY4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCAxNDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FscGhhL2RsLW1hY2hpbmUuaCBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYWxwaGEvZGwtbWFjaGluZS5oCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYWxwaGEvZGwtbWFjaGluZS5oCTIwMDktMDUtMTYgMTA6MzY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FscGhhL2RsLW1hY2hpbmUuaAkyMDA5LTExLTEzIDAwOjUxOjAyLjAwMDAwMDAwMCArMDEwMAorQEAgLTI0OSw2ICsyNDksMTggQEAKKyAvKiBUaGUgYWxwaGEgbmV2ZXIgdXNlcyBFbGY2NF9SZWwgcmVsb2NhdGlvbnMuICAqLworICNkZWZpbmUgRUxGX01BQ0hJTkVfTk9fUkVMIDEKKyAKKysvKiBXZSBkZWZpbmUgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zLiAgVGhpcyBpcyBjYWxsZWQgdmVyeSBlYXJseSBpbgorKyAqICAgIF9kbF9zeXNkZXBfc3RhcnQuICAqLworKyNkZWZpbmUgRExfUExBVEZPUk1fSU5JVCBkbF9wbGF0Zm9ybV9pbml0ICgpCisrCisrc3RhdGljIGlubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKQorK2RsX3BsYXRmb3JtX2luaXQgKHZvaWQpCisreworKwlpZiAoR0xSTyhkbF9wbGF0Zm9ybSkgIT0gTlVMTCAmJiAqR0xSTyhkbF9wbGF0Zm9ybSkgPT0gJ1wwJykKKysJLyogQXZvaWQgYW4gZW1wdHkgc3RyaW5nIHdoaWNoIHdvdWxkIGRpc3R1cmIgdXMuICAqLworKwkJR0xSTyhkbF9wbGF0Zm9ybSkgPSBOVUxMOworK30KKysJCisgLyogRml4IHVwIHRoZSBpbnN0cnVjdGlvbnMgb2YgYSBQTFQgZW50cnkgdG8gaW52b2tlIHRoZSBmdW5jdGlvbgorICAgIHJhdGhlciB0aGFuIHRoZSBkeW5hbWljIGxpbmtlci4gICovCisgc3RhdGljIGlubGluZSBFbGY2NF9BZGRyCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FscGhhL2RsLXByb2NpbmZvLmMgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FscGhhL2RsLXByb2NpbmZvLmMKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hbHBoYS9kbC1wcm9jaW5mby5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FscGhhL2RsLXByb2NpbmZvLmMJMjAwOS0xMS0xMyAwMDo1MTowMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsNjQgQEAKKysvKiBEYXRhIGZvciBBbHBoYSB2ZXJzaW9uIG9mIHByb2Nlc3NvciBjYXBhYmlsaXR5IGluZm9ybWF0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBDb250cmlidXRlZCBieSBBdXJlbGllbiBKYXJubyA8YXVyZWxpZW5AYXVyZWwzMi5uZXQ+LCAyMDA3LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysvKiBUaGlzIGluZm9ybWF0aW9uIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIF9ETF9QTEFURk9STV9DT1VOVCAKKysgICBkZWZpbml0aW9ucyBpbiBwcm9jaW5mby5oLgorKworKyAgIElmIGFueXRoaW5nIHNob3VsZCBiZSBhZGRlZCBoZXJlIGNoZWNrIHdoZXRoZXIgdGhlIHNpemUgb2YgZWFjaCBzdHJpbmcKKysgICBpcyBzdGlsbCBvayB3aXRoIHRoZSBnaXZlbiBhcnJheSBzaXplLgorKworKyAgIEFsbCB0aGUgI2lmZGVmcyBpbiB0aGUgZGVmaW5pdGlvbnMgYXJlIHF1aXRlIGlycml0YXRpbmcgYnV0CisrICAgbmVjZXNzYXJ5IGlmIHdlIHdhbnQgdG8gYXZvaWQgZHVwbGljYXRpbmcgdGhlIGluZm9ybWF0aW9uLiAgVGhlcmUKKysgICBhcmUgdGhyZWUgZGlmZmVyZW50IG1vZGVzOgorKworKyAgIC0gUFJPQ0lORk9fREVDTCBpcyBkZWZpbmVkLiAgVGhpcyBtZWFucyB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGluCisrICAgICBkZWNsYXJhdGlvbnMuCisrCisrICAgLSBQUk9DSU5GT19ERUNMIGlzIG5vdCBkZWZpbmVkOgorKworKyAgICAgKyBpZiBTSEFSRUQgaXMgZGVmaW5lZCB0aGUgZmlsZSBpcyBpbmNsdWRlZCBpbiBhbiBhcnJheQorKyAgICAgICBpbml0aWFsaXplci4gIFRoZSAuZWxlbWVudCA9IHsgLi4uIH0gc3ludGF4IGlzIG5lZWRlZC4KKysKKysgICAgICsgaWYgU0hBUkVEIGlzIG5vdCBkZWZpbmVkIGEgbm9ybWFsIGFycmF5IGluaXRpYWxpemF0aW9uIGlzCisrICAgICAgIG5lZWRlZC4KKysgICovCisrCisrI2lmbmRlZiBQUk9DSU5GT19DTEFTUworKyNkZWZpbmUgUFJPQ0lORk9fQ0xBU1MKKysjZW5kaWYKKysKKysjaWYgIWRlZmluZWQgUFJPQ0lORk9fREVDTCAmJiBkZWZpbmVkIFNIQVJFRAorKyAgLl9kbF9hbHBoYV9wbGF0Zm9ybXMKKysjZWxzZQorK1BST0NJTkZPX0NMQVNTIGNvbnN0IGNoYXIgX2RsX2FscGhhX3BsYXRmb3Jtc1s1XVs1XQorKyNlbmRpZgorKyNpZm5kZWYgUFJPQ0lORk9fREVDTAorKz0geworKyAgICAiZXY0IiwgImV2NSIsICJldjU2IiwgImV2NiIsICJldjY3IgorKyAgfQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBQUk9DSU5GT19ERUNMCisrOworKyNlbHNlCisrLAorKyNlbmRpZgorKworKyN1bmRlZiBQUk9DSU5GT19ERUNMCisrI3VuZGVmIFBST0NJTkZPX0NMQVNTCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FscGhhL2RsLXByb2NpbmZvLmggZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FscGhhL2RsLXByb2NpbmZvLmgKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hbHBoYS9kbC1wcm9jaW5mby5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FscGhhL2RsLXByb2NpbmZvLmgJMjAwOS0xMS0xMyAwMDo1MTowMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsNjggQEAKKysvKiBBbHBoYSB2ZXJzaW9uIG9mIHByb2Nlc3NvciBjYXBhYmlsaXR5IGluZm9ybWF0aW9uIGhhbmRsaW5nIG1hY3Jvcy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgQ29udHJpYnV0ZWQgYnkgQXVyZWxpZW4gSmFybm8gPGF1cmVsaWVuQGF1cmVsMzIubmV0PiwgMjAwNy4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2lmbmRlZiBfRExfUFJPQ0lORk9fSAorKyNkZWZpbmUgX0RMX1BST0NJTkZPX0gJMQorKworKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKworKworKy8qIE1hc2sgdG8gZmlsdGVyIG91dCBwbGF0Zm9ybXMuICAqLworKyNkZWZpbmUgX0RMX0hXQ0FQX1BMQVRGT1JNICAgICgtMVVMTCkKKysKKysjZGVmaW5lIF9ETF9QTEFURk9STVNfQ09VTlQgICA1CisrCisrc3RhdGljIGlubGluZSBjb25zdCBjaGFyICoKKytfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKKytfZGxfcGxhdGZvcm1fc3RyaW5nIChpbnQgaWR4KQorK3sKKysgIHJldHVybiBHTFJPKGRsX2FscGhhX3BsYXRmb3JtcylbaWR4XTsKKyt9OworKworK3N0YXRpYyBpbmxpbmUgaW50CisrX19hdHRyaWJ1dGVfXyAoKHVudXNlZCwgYWx3YXlzX2lubGluZSkpCisrX2RsX3N0cmluZ19wbGF0Zm9ybSAoY29uc3QgY2hhciAqc3RyKQorK3sKKysgIGludCBpOworKworKyAgaWYgKHN0ciAhPSBOVUxMKQorKyAgICBmb3IgKGkgPSAwOyBpIDwgX0RMX1BMQVRGT1JNU19DT1VOVDsgKytpKQorKyAgICAgIHsKKysgICAgICAgIGlmIChzdHJjbXAgKHN0ciwgX2RsX3BsYXRmb3JtX3N0cmluZyAoaSkpID09IDApCisrICAgICAgICAgIHJldHVybiBpOworKyAgICAgIH0KKysgIHJldHVybiAtMTsKKyt9OworKworKy8qIFdlIGNhbm5vdCBwcm92aWRlIGEgZ2VuZXJhbCBwcmludGluZyBmdW5jdGlvbi4gICovCisrI2RlZmluZSBfZGxfcHJvY2luZm8od29yZCkgLTEKKysKKysvKiBUaGVyZSBhcmUgbm8gaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGRlZmluZWQuICAqLworKyNkZWZpbmUgX2RsX2h3Y2FwX3N0cmluZyhpZHgpICIiCisrCisrLyogQnkgZGVmYXVsdCB0aGVyZSBpcyBubyBpbXBvcnRhbnQgaGFyZHdhcmUgY2FwYWJpbGl0eS4gICovCisrI2RlZmluZSBIV0NBUF9JTVBPUlRBTlQgKDApCisrCisrLyogV2UgZG9uJ3QgaGF2ZSBhbnkgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLiAgKi8KKysjZGVmaW5lIF9ETF9IV0NBUF9DT1VOVAkwCisrCisrI2RlZmluZSBfZGxfc3RyaW5nX2h3Y2FwKHN0cikgKC0xKQorKworKyNlbmRpZiAvKiBkbC1wcm9jaW5mby5oICovCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3BvcnRzL3N5c2RlcHMvYWxwaGEvZGwtbWFjaGluZS5oIGdsaWJjLTIuMTAuMS9wb3J0cy9zeXNkZXBzL2FscGhhL2RsLW1hY2hpbmUuaAorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3J0cy9zeXNkZXBzL2FscGhhL2RsLXByb2NpbmZvLmMgZ2xpYmMtMi4xMC4xL3BvcnRzL3N5c2RlcHMvYWxwaGEvZGwtcHJvY2luZm8uYworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3J0cy9zeXNkZXBzL2FscGhhL2RsLXByb2NpbmZvLmggZ2xpYmMtMi4xMC4xL3BvcnRzL3N5c2RlcHMvYWxwaGEvZGwtcHJvY2luZm8uaApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS80OTAtYWxwaGFfYWxwaGEtYWRkLWZkYXRhc3luYy1zdXBwb3J0LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS80OTAtYWxwaGFfYWxwaGEtYWRkLWZkYXRhc3luYy1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjOGQ1N2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzQ5MC1hbHBoYV9hbHBoYS1hZGQtZmRhdGFzeW5jLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxMjYgQEAKKzIwMDktMDctMjUgIEF1cmVsaWVuIEphcm5vICA8YXVyZWxpZW5AYXVyZWwzMi5uZXQ+CisKKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2tlcm5lbC1mZWF0dXJlcy5oOiBkZWZpbmUgCisJX19BU1NVTUVfRkRBVEFTWU5DLiAKKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2ZkYXRhc3luYy5jOiBOZXcgZmlsZS4KKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L01ha2VmaWxlOiBjb21waWxlIGZkYXRhc3luYy5jIHdpdGgKKwktZmV4Y2VwdGlvbnMuCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zeXNjYWxscy5saXN0OiBSZW1vdmUgZmRhdGFzeW5jLgorCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgvTWFrZWZpbGUgICAgICAgICAgfCAgICAxIAorIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2ZkYXRhc3luYy5jICAgICAgIHwgICA2OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9rZXJuZWwtZmVhdHVyZXMuaCB8ICAgIDYgKysKKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zeXNjYWxscy5saXN0ICAgICB8ICAgIDEgCisgNCBmaWxlcyBjaGFuZ2VkLCA3NiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvTWFrZWZpbGUgZ2xpYmMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L01ha2VmaWxlCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvTWFrZWZpbGUJMjAwOS0wMy0wMiAxNzoxNToxMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvTWFrZWZpbGUJMjAwOS0xMS0xMyAwMDo1MTowNC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNiw2ICsxNiw3IEBACisgCQkgICBzZXRmc3VpZCBzZXRmc2dpZCBtYWtlZGV2IGVwb2xsX3B3YWl0IHNpZ25hbGZkIFwKKyAJCSAgIGV2ZW50ZmQgZXZlbnRmZF9yZWFkIGV2ZW50ZmRfd3JpdGUKKyAKKytDRkxBR1MtZmRhdGFzeW5jLmMgPSAtZmV4Y2VwdGlvbnMKKyBDRkxBR1MtZ2V0aG9zdGlkLmMgPSAtZmV4Y2VwdGlvbnMKKyAKKyBzeXNkZXBfaGVhZGVycyArPSBzeXMvbW91bnQuaCBzeXMvYWNjdC5oIHN5cy9zeXNjdGwuaCBcCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2ZkYXRhc3luYy5jIGdsaWJjLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9mZGF0YXN5bmMuYworLS0tIGdsaWJjLTIuMTAuMS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2ZkYXRhc3luYy5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2ZkYXRhc3luYy5jCTIwMDktMTEtMTMgMDA6NTE6MDQuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDY5IEBACisrLyogZmRhdGFzeW5jIC0tIHN5bmNocm9uaXplIGF0IGxlYXN0IHRoZSBkYXRhIHBhcnQgb2YgYSBmaWxlIHdpdGggCisrICAgdGhlIHVuZGVybHlpbmcgbWVkaWEuIExpbnV4IHZlcnNpb24uIAorKworKyAgIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPHVuaXN0ZC5oPgorKworKyNpbmNsdWRlIDxzeXNkZXAtY2FuY2VsLmg+CisrI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisrI2luY2x1ZGUgPGJwLWNoZWNrcy5oPgorKworKyNpbmNsdWRlIDxrZXJuZWwtZmVhdHVyZXMuaD4KKysKKysjaWYgZGVmaW5lZCBfX05SX2ZkYXRhc3luYyAmJiAhZGVmaW5lZCBfX0FTU1VNRV9GREFUQVNZTkMKKytzdGF0aWMgaW50IF9faGF2ZV9ub19mZGF0YXN5bmM7CisrI2VuZGlmCisrCisrc3RhdGljIGludAorK2RvX2ZkYXRhc3luYyAoaW50IGZkKQorK3sKKysjaWZkZWYgX19BU1NVTUVfRkRBVEFTWU5DCisrICByZXR1cm4gSU5MSU5FX1NZU0NBTEwgKGZkYXRhc3luYywgMSwgZmQpOworKyNlbGlmIGRlZmluZWQgX19OUl9mZGF0YXN5bmMKKysgIGlmICghX19idWlsdGluX2V4cGVjdCAoX19oYXZlX25vX2ZkYXRhc3luYywgMCkpCisrICAgIHsKKysgICAgICBpbnQgcmVzdWx0ID0gSU5MSU5FX1NZU0NBTEwgKGZkYXRhc3luYywgMSwgZmQpOworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChyZXN1bHQsIDApICE9IC0xIHx8IGVycm5vICE9IEVOT1NZUykKKysJcmV0dXJuIHJlc3VsdDsKKysKKysgICAgICBfX2hhdmVfbm9fZmRhdGFzeW5jID0gMTsKKysgICAgfQorKyNlbmRpZgorKyAgcmV0dXJuIElOTElORV9TWVNDQUxMIChmc3luYywgMSwgZmQpOworK30KKysKKytpbnQKKytfX2ZkYXRhc3luYyAoaW50IGZkKQorK3sKKysgIGlmIChTSU5HTEVfVEhSRUFEX1ApCisrICAgIHJldHVybiBkb19mZGF0YXN5bmMgKGZkKTsKKysKKysgIGludCBvbGR0eXBlID0gTElCQ19DQU5DRUxfQVNZTkMgKCk7CisrCisrICBpbnQgcmVzdWx0ID0gZG9fZmRhdGFzeW5jIChmZCk7CisrCisrICBMSUJDX0NBTkNFTF9SRVNFVCAob2xkdHlwZSk7CisrCisrICByZXR1cm4gcmVzdWx0OworK30KKysKKyt3ZWFrX2FsaWFzIChfX2ZkYXRhc3luYywgZmRhdGFzeW5jKQorKworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9rZXJuZWwtZmVhdHVyZXMuaCBnbGliYy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgva2VybmVsLWZlYXR1cmVzLmgKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9rZXJuZWwtZmVhdHVyZXMuaAkyMDA5LTExLTEzIDAwOjUwOjQ1LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9rZXJuZWwtZmVhdHVyZXMuaAkyMDA5LTExLTEzIDAwOjUxOjA0LjAwMDAwMDAwMCArMDEwMAorQEAgLTQ3OSw2ICs0NzksMTIgQEAKKyAjIGRlZmluZSBfX0FTU1VNRV9GVVRFWF9MT0NLX1BJCTEKKyAjZW5kaWYKKyAKKysvKiBTdXBwb3J0IGZvciBmc3luY2RhdGEgc3lzY2FsbCB3YXMgYWRkZWQgaW4gMi42LjIyIG9uIGFscGhhLCBidXQgaXQKKysgICB3YXMgYWxyZWFkeSBwcmVzZW50IGluIDIuMCBrZXJuZWxzIG9uIG90aGVyIGFyY2hpdGVjdHVyZXMuICAqLworKyNpZiAoIWRlZmluZWQgX19hbHBoYSB8fCBfX0xJTlVYX0tFUk5FTF9WRVJTSU9OID49IDB4MDIwNjE2KQorKyMgZGVmaW5lIF9fQVNTVU1FX0ZEQVRBU1lOQwkxCisrI2VuZGlmCisrCisgLyogU3VwcG9ydCBmb3IgdXRpbWVuc2F0IHN5c2NhbGwgd2FzIGFkZGVkIGluIDIuNi4yMiwgb24gYWxwaGEgYW5kIHMzOTAKKyAgICBvbmx5IGFmdGVyIDIuNi4yMi1yYzEuICAqLworICNpZiBfX0xJTlVYX0tFUk5FTF9WRVJTSU9OID49IDB4MDIwNjE2IFwKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc3lzY2FsbHMubGlzdCBnbGliYy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc3lzY2FsbHMubGlzdAorLS0tIGdsaWJjLTIuMTAuMS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5c2NhbGxzLmxpc3QJMjAwOC0wOC0wMiAwMToyOTowOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc3lzY2FsbHMubGlzdAkyMDA5LTExLTEzIDAwOjUxOjA0LjAwMDAwMDAwMCArMDEwMAorQEAgLTExLDcgKzExLDYgQEAKKyBlcG9sbF9jcmVhdGUxCUVYVFJBCWVwb2xsX2NyZWF0ZTEJaTppCWVwb2xsX2NyZWF0ZTEKKyBlcG9sbF9jdGwJRVhUUkEJZXBvbGxfY3RsCWk6aWlpcAllcG9sbF9jdGwKKyBlcG9sbF93YWl0CUVYVFJBCWVwb2xsX3dhaXQJQ2k6aXBpaQllcG9sbF93YWl0CistZmRhdGFzeW5jCS0JZmRhdGFzeW5jCUNpOmkJZmRhdGFzeW5jCisgZmxvY2sJCS0JZmxvY2sJCWk6aWkJX19mbG9jawkJZmxvY2sKKyBmb3JrCQktCWZvcmsJCWk6CV9fbGliY19mb3JrCV9fZm9yayBmb3JrCisgZ2V0X2tlcm5lbF9zeW1zCUVYVFJBCWdldF9rZXJuZWxfc3ltcwlpOnAJZ2V0X2tlcm5lbF9zeW1zCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzUwMC1hbHBoYS1hZGQtZ2V0c3lzdGF0cy1zdXBwb3J0LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS81MDAtYWxwaGEtYWRkLWdldHN5c3RhdHMtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjY5YzZkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS81MDAtYWxwaGEtYWRkLWdldHN5c3RhdHMtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDMxIEBACisyMDA5LTA1LTE2ICBBdXJlbGllbiBKYXJubyAgPGF1cmVsaWVuQGF1cmVsMzIubmV0PgorCisgICAgICAgICogc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvZ2V0c3lzc3RhdHMuYyAoR0VUX05QUk9DU19QQVJTRVIpOgorICAgICAgICBDaGFuZ2UgcGFyYW1ldGVycyBhbmQgdXNlIG5leHRfbGluZS4KKworIHBvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2dldHN5c3N0YXRzLmMgfCAgICA1ICsrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvZ2V0c3lzc3RhdHMuYyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2dldHN5c3N0YXRzLmMKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvZ2V0c3lzc3RhdHMuYwkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvZ2V0c3lzc3RhdHMuYwkyMDA5LTExLTEzIDAwOjUxOjA3LjAwMDAwMDAwMCArMDEwMAorQEAgLTIwLDE1ICsyMCwxNiBAQAorIAorIAorIC8qIFdlIG5lZWQgdG8gZGVmaW5lIGEgc3BlY2lhbCBwYXJzZXIgZm9yIC9wcm9jL2NwdWluZm8uICAqLworLSNkZWZpbmUgR0VUX05QUk9DU19QQVJTRVIoRlAsIEJVRkZFUiwgUkVTVUxUKQkJCQkgICBcCisrI2RlZmluZSBHRVRfTlBST0NTX1BBUlNFUihGRCwgQlVGRkVSLCBDUCwgUkUsIEJVRkZFUl9FTkQsIFJFU1VMVCkJICAgXAorICAgZG8JCQkJCQkJCQkgICBcCisgICAgIHsJCQkJCQkJCQkgICBcCisgICAgICAgLyogRmluZCB0aGUgbGluZSB0aGF0IGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbnVtYmVyIG9mICAgXAorIAkgYWN0aXZlIGNwdXMuICBXZSBkb24ndCBoYXZlIHRvIGZlYXIgZXh0cmVtZWx5IGxvbmcgbGluZXMgc2luY2UJICAgXAorIAkgdGhlIGtlcm5lbCB3aWxsIG5vdCBnZW5lcmF0ZSB0aGVtLiAgODE5MiBieXRlcyBhcmUgcmVhbGx5IGVub3VnaC4gXAorIAkgSWYgdGhlcmUgaXMgbm8gIkNQVXMgLi4uIiBsaW5lIHRoZW4gd2UgYXJlIG9uIGEgVVAgc3lzdGVtLiAgKi8JICAgXAorKyAgICAgIGNoYXIgKmw7CQkJCQkJCQkgICBcCisgICAgICAgKFJFU1VMVCkgPSAxOwkJCQkJCQkgICBcCistICAgICAgd2hpbGUgKGZnZXRzX3VubG9ja2VkIChCVUZGRVIsIHNpemVvZiAoQlVGRkVSKSwgRlApICE9IE5VTEwpCSAgIFwKKysgICAgICB3aGlsZSAoKGwgPSBuZXh0X2xpbmUgKEZELCBCVUZGRVIsICZDUCwgJlJFLCBCVUZGRVJfRU5EKSkgIT0gTlVMTCkgIFwKKyAJaWYgKChzc2NhbmYgKEJVRkZFUiwgImNwdXMgYWN0aXZlIDogJWQiLCAmKFJFU1VMVCkpID09IDEpCSAgIFwKKyAJICAgIHx8IChzc2NhbmYgKEJVRkZFUiwgIkNQVXMgcHJvYmVkICUqZCBhY3RpdmUgJWQiLAkJICAgXAorIAkJCSYoUkVTVUxUKSkgPT0gMSkpICAJCQkJICAgXAorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9nZXRzeXNzdGF0cy5jIGdsaWJjLTIuMTAuMS9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9nZXRzeXNzdGF0cy5jCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzUxMC1hbHBoYS1maXgtaW5jbHVkZXMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzUxMC1hbHBoYS1maXgtaW5jbHVkZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwNGQ1MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNTEwLWFscGhhLWZpeC1pbmNsdWRlcy5wYXRjaApAQCAtMCwwICsxLDk1IEBACisyMDA5LTA1LTE1ICBBdXJlbGllbiBKYXJubyAgPGF1cmVsaWVuQGF1cmVsMzIubmV0PgorCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9nZXRkZW50czY0LmM6IEFkanVzdCBpbmNsdWRlIHBhdGguCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL2ZvcmsuYzogTGlrZXdpc2UuCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL3NlbV9wb3N0LmM6IExpa2V3aXNlLgorCSogc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvbnB0bC90aW1lcl9jcmVhdGUuYzogTGlrZXdpc2UuCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL3RpbWVyX2RlbGV0ZS5jOiBMaWtld2lzZS4KKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL25wdGwvdGltZXJfZ2V0b3ZlcnIuYzogTGlrZXdpc2UuCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL3RpbWVyX2dldHRpbWUuYzogTGlrZXdpc2UuCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL3RpbWVyX3NldHRpbWUuYzogTGlrZXdpc2UuCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXNjb25mLmM6IExpa2V3aXNlLgorCisgcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvZ2V0ZGVudHM2NC5jICAgICAgICAgIHwgICAgMiArLQorIHBvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL25wdGwvZm9yay5jICAgICAgICAgICB8ICAgIDIgKy0KKyBwb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL3NlbV9wb3N0LmMgICAgICAgfCAgICAyICstCisgcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvbnB0bC90aW1lcl9jcmVhdGUuYyAgIHwgICAgMiArLQorIHBvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL25wdGwvdGltZXJfZGVsZXRlLmMgICB8ICAgIDIgKy0KKyBwb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL3RpbWVyX2dldG92ZXJyLmMgfCAgICAyICstCisgcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvbnB0bC90aW1lcl9nZXR0aW1lLmMgIHwgICAgMiArLQorIHBvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL25wdGwvdGltZXJfc2V0dGltZS5jICB8ICAgIDIgKy0KKyBwb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXNjb25mLmMgICAgICAgICAgICAgfCAgICAyICstCisgOSBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2dldGRlbnRzNjQuYyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2dldGRlbnRzNjQuYworLS0tIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9nZXRkZW50czY0LmMJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2dldGRlbnRzNjQuYwkyMDA5LTExLTEzIDAwOjUxOjA4LjAwMDAwMDAwMCArMDEwMAorQEAgLTEgKzEgQEAKKy0jaW5jbHVkZSAiLi4vZ2V0ZGVudHM2NC5jIgorKyNpbmNsdWRlIDxzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9nZXRkZW50czY0LmM+CitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL2ZvcmsuYyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL25wdGwvZm9yay5jCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL25wdGwvZm9yay5jCTIwMDktMDUtMTYgMTA6MzY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL2ZvcmsuYwkyMDA5LTExLTEzIDAwOjUxOjA4LjAwMDAwMDAwMCArMDEwMAorQEAgLTI3LDQgKzI3LDQgQEAKKyAJCSAgQ0xPTkVfQ0hJTERfU0VUVElEIHwgQ0xPTkVfQ0hJTERfQ0xFQVJUSUQgfCBTSUdDSExELAlcCisgCQkgIE5VTEwsIE5VTEwsICZUSFJFQURfU0VMRi0+dGlkLCBOVUxMKQorIAorLSNpbmNsdWRlICIuLi9mb3JrLmMiCisrI2luY2x1ZGUgPHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2ZvcmsuYz4KK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL25wdGwvc2VtX3Bvc3QuYyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL25wdGwvc2VtX3Bvc3QuYworLS0tIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL3NlbV9wb3N0LmMJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL25wdGwvc2VtX3Bvc3QuYwkyMDA5LTExLTEzIDAwOjUxOjA4LjAwMDAwMDAwMCArMDEwMAorQEAgLTIsNCArMiw0IEBACisgICAgdGhlIGFjcXVpcmUvcmVsZWFzZSBzZW1hbnRpY3Mgb2YgYXRvbWljX2V4Y2hhbmdlX2FuZF9hZGQuICBBbmQgZXZlbiBpZgorICAgIHdlIGRvbid0IGRvIHRoaXMsIHdlIHNob3VsZCBiZSB1c2luZyBhdG9taWNfZnVsbF9iYXJyaWVyIG9yIG90aGVyd2lzZS4gICovCisgI2RlZmluZSBfX2xsbF9yZWxfaW5zdHIgICJtYiIKKy0jaW5jbHVkZSAiLi4vc2VtX3Bvc3QuYyIKKysjaW5jbHVkZSA8bnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zZW1fcG9zdC5jPgorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvbnB0bC90aW1lcl9jcmVhdGUuYyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL25wdGwvdGltZXJfY3JlYXRlLmMKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvbnB0bC90aW1lcl9jcmVhdGUuYwkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvbnB0bC90aW1lcl9jcmVhdGUuYwkyMDA5LTExLTEzIDAwOjUxOjA4LjAwMDAwMDAwMCArMDEwMAorQEAgLTEgKzEgQEAKKy0jaW5jbHVkZSAiLi4veDg2XzY0L3RpbWVyX2NyZWF0ZS5jIgorKyNpbmNsdWRlIDxucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3g4Nl82NC90aW1lcl9jcmVhdGUuYz4KK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL25wdGwvdGltZXJfZGVsZXRlLmMgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL3RpbWVyX2RlbGV0ZS5jCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL25wdGwvdGltZXJfZGVsZXRlLmMJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL25wdGwvdGltZXJfZGVsZXRlLmMJMjAwOS0xMS0xMyAwMDo1MTowOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xICsxIEBACistI2luY2x1ZGUgIi4uL3g4Nl82NC90aW1lcl9kZWxldGUuYyIKKysjaW5jbHVkZSA8bnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC94ODZfNjQvdGltZXJfZGVsZXRlLmM+CitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL3RpbWVyX2dldG92ZXJyLmMgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL3RpbWVyX2dldG92ZXJyLmMKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvbnB0bC90aW1lcl9nZXRvdmVyci5jCTIwMDktMDUtMTYgMTA6MzY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL3RpbWVyX2dldG92ZXJyLmMJMjAwOS0xMS0xMyAwMDo1MTowOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xICsxIEBACistI2luY2x1ZGUgIi4uL3g4Nl82NC90aW1lcl9nZXRvdmVyci5jIgorKyNpbmNsdWRlIDxucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3g4Nl82NC90aW1lcl9nZXRvdmVyci5jPgorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvbnB0bC90aW1lcl9nZXR0aW1lLmMgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL3RpbWVyX2dldHRpbWUuYworLS0tIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL3RpbWVyX2dldHRpbWUuYwkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvbnB0bC90aW1lcl9nZXR0aW1lLmMJMjAwOS0xMS0xMyAwMDo1MTowOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xICsxIEBACistI2luY2x1ZGUgIi4uL3g4Nl82NC90aW1lcl9nZXR0aW1lLmMiCisrI2luY2x1ZGUgPG5wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgveDg2XzY0L3RpbWVyX2dldHRpbWUuYz4KK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL25wdGwvdGltZXJfc2V0dGltZS5jIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvbnB0bC90aW1lcl9zZXR0aW1lLmMKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvbnB0bC90aW1lcl9zZXR0aW1lLmMJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL25wdGwvdGltZXJfc2V0dGltZS5jCTIwMDktMTEtMTMgMDA6NTE6MDguMDAwMDAwMDAwICswMTAwCitAQCAtMSArMSBAQAorLSNpbmNsdWRlICIuLi94ODZfNjQvdGltZXJfc2V0dGltZS5jIgorKyNpbmNsdWRlIDxucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3g4Nl82NC90aW1lcl9zZXR0aW1lLmM+CitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXNjb25mLmMgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXNjb25mLmMKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzY29uZi5jCTIwMDktMDUtMTYgMTA6MzY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXNjb25mLmMJMjAwOS0xMS0xMyAwMDo1MTowOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNDksNCArMTQ5LDQgQEAKKyAvKiBOb3cgdGhlIGdlbmVyaWMgTGludXggdmVyc2lvbi4gICovCisgI3VuZGVmIF9fc3lzY29uZgorICNkZWZpbmUgX19zeXNjb25mIHN0YXRpYyBsaW51eF9zeXNjb25mCistI2luY2x1ZGUgIi4uL3N5c2NvbmYuYyIKKysjaW5jbHVkZSA8c3lzZGVwcy91bml4L3N5c3YvbGludXgvc3lzY29uZi5jPgorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9nZXRkZW50czY0LmMgZ2xpYmMtMi4xMC4xL3BvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2dldGRlbnRzNjQuYworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL2ZvcmsuYyBnbGliYy0yLjEwLjEvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvbnB0bC9mb3JrLmMKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvbnB0bC9zZW1fcG9zdC5jIGdsaWJjLTIuMTAuMS9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL3NlbV9wb3N0LmMKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvbnB0bC90aW1lcl9jcmVhdGUuYyBnbGliYy0yLjEwLjEvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvbnB0bC90aW1lcl9jcmVhdGUuYworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL3RpbWVyX2RlbGV0ZS5jIGdsaWJjLTIuMTAuMS9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL3RpbWVyX2RlbGV0ZS5jCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3BvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL25wdGwvdGltZXJfZ2V0b3ZlcnIuYyBnbGliYy0yLjEwLjEvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvbnB0bC90aW1lcl9nZXRvdmVyci5jCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3BvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL25wdGwvdGltZXJfZ2V0dGltZS5jIGdsaWJjLTIuMTAuMS9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL3RpbWVyX2dldHRpbWUuYworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL3RpbWVyX3NldHRpbWUuYyBnbGliYy0yLjEwLjEvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvbnB0bC90aW1lcl9zZXR0aW1lLmMKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvc3lzY29uZi5jIGdsaWJjLTIuMTAuMS9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9zeXNjb25mLmMKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNTIwLWFscGhhLWFkZC1mdXRleC1kZWZpbmVzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS81MjAtYWxwaGEtYWRkLWZ1dGV4LWRlZmluZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJlMTQ5OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNTIwLWFscGhhLWFkZC1mdXRleC1kZWZpbmVzLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKKzIwMDktMDUtMTkgIEF1cmVsaWVuIEphcm5vICA8YXVyZWxpZW5AYXVyZWwzMi5uZXQ+CisKKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL25wdGwvbG93bGV2ZWxsb2NrLmg6IERlZmluZQorCUZVVEVYX1dBSVRfQklUU0VULCBGVVRFWF9XQUtFX0JJVFNFVCwgRlVURVhfQ0xPQ0tfUkVBTFRJTUUgYW5kCisJRlVURVhfQklUU0VUX01BVENIX0FOWS4KKworIHBvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL25wdGwvbG93bGV2ZWxsb2NrLmggfCAgICA1ICsrKysrCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL2xvd2xldmVsbG9jay5oIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvbnB0bC9sb3dsZXZlbGxvY2suaAorLS0tIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL2xvd2xldmVsbG9jay5oCTIwMDktMDUtMTYgMTA6MzY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL2xvd2xldmVsbG9jay5oCTIwMDktMTEtMTMgMDA6NTE6MTEuMDAwMDAwMDAwICswMTAwCitAQCAtMzcsNyArMzcsMTIgQEAKKyAjZGVmaW5lIEZVVEVYX0xPQ0tfUEkJCTYKKyAjZGVmaW5lIEZVVEVYX1VOTE9DS19QSQkJNworICNkZWZpbmUgRlVURVhfVFJZTE9DS19QSQk4CisrI2RlZmluZSBGVVRFWF9XQUlUX0JJVFNFVAk5CisrI2RlZmluZSBGVVRFWF9XQUtFX0JJVFNFVAkxMAorICNkZWZpbmUgRlVURVhfUFJJVkFURV9GTEFHCTEyOAorKyNkZWZpbmUgRlVURVhfQ0xPQ0tfUkVBTFRJTUUJMjU2CisrCisrI2RlZmluZSBGVVRFWF9CSVRTRVRfTUFUQ0hfQU5ZCTB4ZmZmZmZmZmYKKyAKKyAvKiBWYWx1ZXMgZm9yICdwcml2YXRlJyBwYXJhbWV0ZXIgb2YgbG9ja2luZyBtYWNyb3MuICBZZXMsIHRoZQorICAgIGRlZmluaXRpb24gc2VlbXMgdG8gYmUgYmFja3dhcmRzLiAgQnV0IGl0IGlzIG5vdC4gIFRoZSBiaXQgd2lsbCBiZQorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL2xvd2xldmVsbG9jay5oIGdsaWJjLTIuMTAuMS9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9ucHRsL2xvd2xldmVsbG9jay5oCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzUzMC1hbHBoYS1maXgtcnRsZC1mUElDLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS81MzAtYWxwaGEtZml4LXJ0bGQtZlBJQy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGVjNmJhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS81MzAtYWxwaGEtZml4LXJ0bGQtZlBJQy5wYXRjaApAQCAtMCwwICsxLDIxIEBACisyMDA5LTA1LTI2ICBBdXJlbGllbiBKYXJubyAgPGF1cmVsaWVuQGF1cmVsMzIubmV0PgorCisJKiBzeXNkZXBzL2FscGhhL01ha2VmaWxlIChDRkxBR1MtcnRsZC5jKTogYWRkICQoUElDLWNjZmxhZykuCisKKyBwb3J0cy9zeXNkZXBzL2FscGhhL01ha2VmaWxlIHwgICAgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYWxwaGEvTWFrZWZpbGUgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FscGhhL01ha2VmaWxlCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYWxwaGEvTWFrZWZpbGUJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYWxwaGEvTWFrZWZpbGUJMjAwOS0xMS0xMyAwMDo1MToxMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zNSw3ICszNSw4IEBACisgCisgaWZlcSAoJChzdWJkaXIpLGVsZikKKyAjIFRoZSBsZC5zbyBzdGFydHVwIGNvZGUgY2Fubm90IHVzZSBsaXRlcmFscyB1bnRpbCBpdCBzZWxmLXJlbG9jYXRlcy4KKy1DRkxBR1MtcnRsZC5jID0gLW1idWlsZC1jb25zdGFudHMKKysjIEl0IHVzZXMgbW9yZSB0aGFuIDY0ayBmb3IgdGhlIHNtYWxsIGRhdGEgYXJlYS4KKytDRkxBR1MtcnRsZC5jID0gLW1idWlsZC1jb25zdGFudHMgJChQSUMtY2NmbGFnKQorIGVuZGlmCisgCisgIyBCdWlsZCBldmVyeXRoaW5nIHdpdGggZnVsbCBJRUVFIG1hdGggc3VwcG9ydCwgYW5kIHdpdGggZHluYW1pYyByb3VuZGluZzsKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvcG9ydHMvc3lzZGVwcy9hbHBoYS9NYWtlZmlsZSBnbGliYy0yLjEwLjEvcG9ydHMvc3lzZGVwcy9hbHBoYS9NYWtlZmlsZQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS81NDAtYWxwaGEtZml4LW1lbWNoci5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNTQwLWFscGhhLWZpeC1tZW1jaHIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ5OTlkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNTQwLWFscGhhLWZpeC1tZW1jaHIucGF0Y2gKQEAgLTAsMCArMSwxMjEgQEAKKzIwMDktMDctMjcgIEF1cmVsaWVuIEphcm5vICA8YXVyZWxpZW5AYXVyZWwzMi5uZXQ+CisKKwkqIHN5c2RlcHMvYWxwaGEvbWVtY2hyLlM6IFVzZSBwcmVmZXRjaCBsb2FkLgorCSogc3lzZGVwcy9hbHBoYS9hbHBoYWV2Ni9tZW1jaHIuUzogTGlrZXdpc2UuCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYWxwaGEvYWxwaGFldjYvbWVtY2hyLlMgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FscGhhL2FscGhhZXY2L21lbWNoci5TCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYWxwaGEvYWxwaGFldjYvbWVtY2hyLlMJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYWxwaGEvYWxwaGFldjYvbWVtY2hyLlMJMjAwOS0xMS0xMyAwMDo1MToxNS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMjcsNyArMTI3LDcgQEAKKyAgICAgICAgIGNtcGJnZSAgJDMxLCAkMSwgJDIJIyBFIDoKKyAgICAgICAgIGJuZSAgICAgJDIsICRmb3VuZF9pdAkjIFUgOgorIAkjIEF0IGxlYXN0IG9uZSBieXRlIGxlZnQgdG8gcHJvY2Vzcy4KKy0JbGRxCSQxLCA4KCQwKQkjIEwgOgorKwlsZHEJJDMxLCA4KCQwKQkjIEwgOgorIAlzdWJxCSQ1LCAxLCAkMTgJIyBFIDogVSBMIFUgTAorIAorIAlhZGRxCSQwLCA4LCAkMAkjIEUgOgorQEAgLTE0MywzOCArMTQzLDM4IEBACisgCWFuZAkkNCwgOCwgJDQJIyBFIDogb2RkIG51bWJlciBvZiBxdWFkcz8KKyAJYm5lCSQ0LCAkb2RkX3F1YWRfY291bnQgIyBVIDoKKyAJIyBBdCBsZWFzdCB0aHJlZSBxdWFkcyByZW1haW4gdG8gYmUgYWNjZXNzZWQKKy0JbW92CSQxLCAkNAkJIyBFIDogTCBVIEwgVSA6IG1vdmUgcHJlZmV0Y2hlZCB2YWx1ZSB0byBjb3JyZWN0IHJlZworKwlub3AJCQkjIEUgOiBMIFUgTCBVIDogbW92ZSBwcmVmZXRjaGVkIHZhbHVlIHRvIGNvcnJlY3QgcmVnCisgCisgCS5hbGlnbgk0CisgJHVucm9sbGVkX2xvb3A6CistCWxkcQkkMSwgOCgkMCkJIyBMIDogcHJlZmV0Y2ggJDEKKy0JeG9yCSQxNywgJDQsICQyCSMgRSA6CistCWNtcGJnZQkkMzEsICQyLCAkMgkjIEUgOgorLQlibmUJJDIsICRmb3VuZF9pdAkjIFUgOiBVIEwgVSBMCisrCWxkcQkkMSwgMCgkMCkJIyBMIDogbG9hZCBxdWFkCisrCXhvcgkkMTcsICQxLCAkMgkjIEUgOgorKwlsZHEJJDMxLCA4KCQwKQkjIEwgOiBwcmVmZXRjaCBuZXh0IHF1YWQKKysJY21wYmdlCSQzMSwgJDIsICQyCSMgRSA6IFUgTCBVIEwKKyAKKysJYm5lCSQyLCAkZm91bmRfaXQJIyBVIDoKKyAJYWRkcQkkMCwgOCwgJDAJIyBFIDoKKyAJbm9wCQkJIyBFIDoKKyAJbm9wCQkJIyBFIDoKKy0Jbm9wCQkJIyBFIDoKKyAKKyAkb2RkX3F1YWRfY291bnQ6CisrCWxkcQkkMSwgMCgkMCkJIyBMIDogbG9hZCBxdWFkCisgCXhvcgkkMTcsICQxLCAkMgkjIEUgOgorLQlsZHEJJDQsIDgoJDApCSMgTCA6IHByZWZldGNoICQ0CisrCWxkcQkkMzEsIDgoJDApCSMgTCA6IHByZWZldGNoICQ0CisgCWNtcGJnZQkkMzEsICQyLCAkMgkjIEUgOgorLQlhZGRxCSQwLCA4LCAkNgkjIEUgOgorIAorKwlhZGRxCSQwLCA4LCAkNgkjIEUgOgorIAlibmUJJDIsICRmb3VuZF9pdAkjIFUgOgorIAljbXB1bHQJJDYsICQxOCwgJDYJIyBFIDoKKyAJYWRkcQkkMCwgOCwgJDAJIyBFIDoKKy0Jbm9wCQkJIyBFIDoKKyAKKyAJYm5lCSQ2LCAkdW5yb2xsZWRfbG9vcCAjIFUgOgorLQltb3YJJDQsICQxCQkjIEUgOiBtb3ZlIHByZWZldGNoZWQgdmFsdWUgaW50byAkMQorIAlub3AJCQkjIEUgOgorIAlub3AJCQkjIEUgOgorLQorLSRmaW5hbDoJc3VicQkkNSwgJDAsICQxOAkjIEUgOiAkMTggPC0gbnVtYmVyIG9mIGJ5dGVzIGxlZnQgdG8gZG8KKyAJbm9wCQkJIyBFIDoKKysKKyskZmluYWw6CWxkcQkkMSwgMCgkMCkJIyBMIDogbG9hZCBsYXN0IHF1YWQKKysJc3VicQkkNSwgJDAsICQxOAkjIEUgOiAkMTggPC0gbnVtYmVyIG9mIGJ5dGVzIGxlZnQgdG8gZG8KKyAJbm9wCQkJIyBFIDoKKyAJYm5lCSQxOCwgJGxhc3RfcXVhZAkjIFUgOgorIAorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hbHBoYS9tZW1jaHIuUyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYWxwaGEvbWVtY2hyLlMKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hbHBoYS9tZW1jaHIuUwkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hbHBoYS9tZW1jaHIuUwkyMDA5LTExLTEzIDAwOjUxOjE1LjAwMDAwMDAwMCArMDEwMAorQEAgLTExOSw3ICsxMTksNyBAQAorIAorIAkjIEF0IGxlYXN0IG9uZSBieXRlIGxlZnQgdG8gcHJvY2Vzcy4KKyAKKy0JbGRxCXQwLCA4KHYwKQkjIGUwCToKKysJbGRxCXplcm8sIDgodjApCSMgZTAJOiBwcmVmZXRjaCBuZXh0IHF1YWQKKyAJc3VicQl0NCwgMSwgYTIJIyAuLiBlMSA6CisgCWFkZHEJdjAsIDgsIHYwCSMtZTAJOgorIAorQEAgLTEzOCwxOSArMTM4LDE5IEBACisgCisgCSMgQXQgbGVhc3QgdGhyZWUgcXVhZHMgcmVtYWluIHRvIGJlIGFjY2Vzc2VkCisgCistCW1vdgl0MCwgdDMJCSMgZTAJOiBtb3ZlIHByZWZldGNoZWQgdmFsdWUgdG8gY29ycmVjdCByZWcKKy0KKyAJLmFsaWduCTQKKyAkdW5yb2xsZWRfbG9vcDoKKy0JbGRxCXQwLCA4KHYwKQkjLWUwCTogcHJlZmV0Y2ggdDAKKy0JeG9yCWExLCB0MywgdDEJIyAuLiBlMSA6CistCWNtcGJnZQl6ZXJvLCB0MSwgdDEJIyBlMAk6CistCWJuZQl0MSwgJGZvdW5kX2l0CSMgLi4gZTEgOgorKwlsZHEJdDAsIDAodjApCSMgZTAJOiBsb2FkIHF1YWQKKysJeG9yCWExLCB0MCwgdDEJIyAuLiBlMSA6CisrCWxkcQl6ZXJvLCA4KHYwKQkjIGUwCTogcHJlZmV0Y2ggbmV4dCBxdWFkCisrCWNtcGJnZQl6ZXJvLCB0MSwgdDEJIyAuLiBlMToKKysJYm5lCXQxLCAkZm91bmRfaXQJIyBlMCAgICA6CisgCistCWFkZHEJdjAsIDgsIHYwCSMtZTAJOgorKwlhZGRxCXYwLCA4LCB2MAkjICAgIGUxCToKKyAkb2RkX3F1YWRfY291bnQ6CisrCWxkcQl0MCwgMCh2MCkJIyBlMAk6IGxvYWQgcXVhZAorIAl4b3IJYTEsIHQwLCB0MQkjIC4uIGUxIDoKKy0JbGRxCXQzLCA4KHYwKQkjIGUwCTogcHJlZmV0Y2ggdDMKKysJbGRxCXplcm8sIDgodjApCSMgZTAJOiBwcmVmZXRjaCBuZXh0IHF1YWQKKyAJY21wYmdlCXplcm8sIHQxLCB0MQkjIC4uIGUxIDoKKyAJYWRkcQl2MCwgOCwgdDUJIy1lMAk6CisgCWJuZQl0MSwgJGZvdW5kX2l0CSMgLi4gZTEJOgorQEAgLTE1OSw4ICsxNTksOCBAQAorIAlhZGRxCXYwLCA4LCB2MAkjIC4uIGUxIDoKKyAJYm5lCXQ1LCAkdW5yb2xsZWRfbG9vcCAjLWUxIDoKKyAKKy0JbW92CXQzLCB0MAkJIyBlMAk6IG1vdmUgcHJlZmV0Y2hlZCB2YWx1ZSBpbnRvIHQwCistJGZpbmFsOglzdWJxCXQ0LCB2MCwgYTIJIyAuLiBlMQk6IGEyIDwtIG51bWJlciBvZiBieXRlcyBsZWZ0IHRvIGRvCisrJGZpbmFsOglsZHEJdDAsIDAodjApCSMgZTAJOiBsb2FkIGxhc3QgcXVhZAorKwlzdWJxCXQ0LCB2MCwgYTIJIyAuLiBlMQk6IGEyIDwtIG51bWJlciBvZiBieXRlcyBsZWZ0IHRvIGRvCisgCWJuZQlhMiwgJGxhc3RfcXVhZAkjIGUxCToKKyAKKyAkbm90X2ZvdW5kOgorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3J0cy9zeXNkZXBzL2FscGhhL2FscGhhZXY2L21lbWNoci5TIGdsaWJjLTIuMTAuMS9wb3J0cy9zeXNkZXBzL2FscGhhL2FscGhhZXY2L21lbWNoci5TCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3BvcnRzL3N5c2RlcHMvYWxwaGEvbWVtY2hyLlMgZ2xpYmMtMi4xMC4xL3BvcnRzL3N5c2RlcHMvYWxwaGEvbWVtY2hyLlMKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNTUwLWFscGhhLWZpeC1TT0NLX05PTkJMT0NLLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS81NTAtYWxwaGEtZml4LVNPQ0tfTk9OQkxPQ0sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEzZTczMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNTUwLWFscGhhLWZpeC1TT0NLX05PTkJMT0NLLnBhdGNoCkBAIC0wLDAgKzEsNDE3IEBACisyMDA5LTA4LTE2ICBBdXJlbGllbiBKYXJubyAgPGF1cmVsaWVuQGF1cmVsMzIubmV0PgorCisJKiBwb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9iaXRzL3NvY2tldC5oOiBOZXcgZmlsZSBiYXNlZCBvbgorCXRoZSBnZW5lcmljIHZlcnNpb24sIHdpdGggU09DS19OT05CTE9DSyBtYXRjaGluZyB0aGUga2VybmVsIHZhbHVlLgorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9iaXRzL3NvY2tldC5oIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvYml0cy9zb2NrZXQuaAorLS0tIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9iaXRzL3NvY2tldC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9iaXRzL3NvY2tldC5oCTIwMDktMTEtMTMgMDA6NTE6MTcuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDQwNyBAQAorKy8qIFN5c3RlbS1zcGVjaWZpYyBzb2NrZXQgY29uc3RhbnRzIGFuZCB0eXBlcy4gIExpbnV4IHZlcnNpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTk0LTIwMDEsIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2lmbmRlZiBfX0JJVFNfU09DS0VUX0gKKysjZGVmaW5lIF9fQklUU19TT0NLRVRfSAorKworKyNpZm5kZWYgX1NZU19TT0NLRVRfSAorKyMgZXJyb3IgIk5ldmVyIGluY2x1ZGUgPGJpdHMvc29ja2V0Lmg+IGRpcmVjdGx5OyB1c2UgPHN5cy9zb2NrZXQuaD4gaW5zdGVhZC4iCisrI2VuZGlmCisrCisrI2RlZmluZQlfX25lZWRfc2l6ZV90CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKworKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysKKysvKiBUeXBlIGZvciBsZW5ndGggYXJndW1lbnRzIGluIHNvY2tldCBjYWxscy4gICovCisrI2lmbmRlZiBfX3NvY2tsZW5fdF9kZWZpbmVkCisrdHlwZWRlZiBfX3NvY2tsZW5fdCBzb2NrbGVuX3Q7CisrIyBkZWZpbmUgX19zb2NrbGVuX3RfZGVmaW5lZAorKyNlbmRpZgorKworKy8qIFR5cGVzIG9mIHNvY2tldHMuICAqLworK2VudW0gX19zb2NrZXRfdHlwZQorK3sKKysgIFNPQ0tfU1RSRUFNID0gMSwJCS8qIFNlcXVlbmNlZCwgcmVsaWFibGUsIGNvbm5lY3Rpb24tYmFzZWQKKysJCQkJICAgYnl0ZSBzdHJlYW1zLiAgKi8KKysjZGVmaW5lIFNPQ0tfU1RSRUFNIFNPQ0tfU1RSRUFNCisrICBTT0NLX0RHUkFNID0gMiwJCS8qIENvbm5lY3Rpb25sZXNzLCB1bnJlbGlhYmxlIGRhdGFncmFtcworKwkJCQkgICBvZiBmaXhlZCBtYXhpbXVtIGxlbmd0aC4gICovCisrI2RlZmluZSBTT0NLX0RHUkFNIFNPQ0tfREdSQU0KKysgIFNPQ0tfUkFXID0gMywJCQkvKiBSYXcgcHJvdG9jb2wgaW50ZXJmYWNlLiAgKi8KKysjZGVmaW5lIFNPQ0tfUkFXIFNPQ0tfUkFXCisrICBTT0NLX1JETSA9IDQsCQkJLyogUmVsaWFibHktZGVsaXZlcmVkIG1lc3NhZ2VzLiAgKi8KKysjZGVmaW5lIFNPQ0tfUkRNIFNPQ0tfUkRNCisrICBTT0NLX1NFUVBBQ0tFVCA9IDUsCQkvKiBTZXF1ZW5jZWQsIHJlbGlhYmxlLCBjb25uZWN0aW9uLWJhc2VkLAorKwkJCQkgICBkYXRhZ3JhbXMgb2YgZml4ZWQgbWF4aW11bSBsZW5ndGguICAqLworKyNkZWZpbmUgU09DS19TRVFQQUNLRVQgU09DS19TRVFQQUNLRVQKKysgIFNPQ0tfRENDUCA9IDYsCQkvKiBEYXRhZ3JhbSBDb25nZXN0aW9uIENvbnRyb2wgUHJvdG9jb2wuICAqLworKyNkZWZpbmUgU09DS19EQ0NQIFNPQ0tfRENDUAorKyAgU09DS19QQUNLRVQgPSAxMCwJCS8qIExpbnV4IHNwZWNpZmljIHdheSBvZiBnZXR0aW5nIHBhY2tldHMKKysJCQkJICAgYXQgdGhlIGRldiBsZXZlbC4gIEZvciB3cml0aW5nIHJhcnAgYW5kCisrCQkJCSAgIG90aGVyIHNpbWlsYXIgdGhpbmdzIG9uIHRoZSB1c2VyIGxldmVsLiAqLworKyNkZWZpbmUgU09DS19QQUNLRVQgU09DS19QQUNLRVQKKysKKysgIC8qIEZsYWdzIHRvIGJlIE9SZWQgaW50byB0aGUgdHlwZSBwYXJhbWV0ZXIgb2Ygc29ja2V0IGFuZCBzb2NrZXRwYWlyIGFuZAorKyAgICAgdXNlZCBmb3IgdGhlIGZsYWdzIHBhcmFtZXRlciBvZiBwYWNjZXB0LiAgKi8KKysKKysgIFNPQ0tfQ0xPRVhFQyA9IDAyMDAwMDAwLAkvKiBBdG9taWNhbGx5IHNldCBjbG9zZS1vbi1leGVjIGZsYWcgZm9yIHRoZQorKwkJCQkgICBuZXcgZGVzY3JpcHRvcihzKS4gICovCisrI2RlZmluZSBTT0NLX0NMT0VYRUMgU09DS19DTE9FWEVDCisrI3VuZGVmIFNPQ0tfTk9OQkxPQ0sKKysgIFNPQ0tfTk9OQkxPQ0sgPSAweDQwMDAwMDAwCS8qIEF0b21pY2FsbHkgbWFyayBkZXNjcmlwdG9yKHMpIGFzCisrCQkJCSAgIG5vbi1ibG9ja2luZy4gICovCisrI2RlZmluZSBTT0NLX05PTkJMT0NLIFNPQ0tfTk9OQkxPQ0sKKyt9OworKworKy8qIFByb3RvY29sIGZhbWlsaWVzLiAgKi8KKysjZGVmaW5lCVBGX1VOU1BFQwkwCS8qIFVuc3BlY2lmaWVkLiAgKi8KKysjZGVmaW5lCVBGX0xPQ0FMCTEJLyogTG9jYWwgdG8gaG9zdCAocGlwZXMgYW5kIGZpbGUtZG9tYWluKS4gICovCisrI2RlZmluZQlQRl9VTklYCQlQRl9MT0NBTCAvKiBQT1NJWCBuYW1lIGZvciBQRl9MT0NBTC4gICovCisrI2RlZmluZQlQRl9GSUxFCQlQRl9MT0NBTCAvKiBBbm90aGVyIG5vbi1zdGFuZGFyZCBuYW1lIGZvciBQRl9MT0NBTC4gICovCisrI2RlZmluZQlQRl9JTkVUCQkyCS8qIElQIHByb3RvY29sIGZhbWlseS4gICovCisrI2RlZmluZQlQRl9BWDI1CQkzCS8qIEFtYXRldXIgUmFkaW8gQVguMjUuICAqLworKyNkZWZpbmUJUEZfSVBYCQk0CS8qIE5vdmVsbCBJbnRlcm5ldCBQcm90b2NvbC4gICovCisrI2RlZmluZQlQRl9BUFBMRVRBTEsJNQkvKiBBcHBsZXRhbGsgRERQLiAgKi8KKysjZGVmaW5lCVBGX05FVFJPTQk2CS8qIEFtYXRldXIgcmFkaW8gTmV0Uk9NLiAgKi8KKysjZGVmaW5lCVBGX0JSSURHRQk3CS8qIE11bHRpcHJvdG9jb2wgYnJpZGdlLiAgKi8KKysjZGVmaW5lCVBGX0FUTVBWQwk4CS8qIEFUTSBQVkNzLiAgKi8KKysjZGVmaW5lCVBGX1gyNQkJOQkvKiBSZXNlcnZlZCBmb3IgWC4yNSBwcm9qZWN0LiAgKi8KKysjZGVmaW5lCVBGX0lORVQ2CTEwCS8qIElQIHZlcnNpb24gNi4gICovCisrI2RlZmluZQlQRl9ST1NFCQkxMQkvKiBBbWF0ZXVyIFJhZGlvIFguMjUgUExQLiAgKi8KKysjZGVmaW5lCVBGX0RFQ25ldAkxMgkvKiBSZXNlcnZlZCBmb3IgREVDbmV0IHByb2plY3QuICAqLworKyNkZWZpbmUJUEZfTkVUQkVVSQkxMwkvKiBSZXNlcnZlZCBmb3IgODAyLjJMTEMgcHJvamVjdC4gICovCisrI2RlZmluZQlQRl9TRUNVUklUWQkxNAkvKiBTZWN1cml0eSBjYWxsYmFjayBwc2V1ZG8gQUYuICAqLworKyNkZWZpbmUJUEZfS0VZCQkxNQkvKiBQRl9LRVkga2V5IG1hbmFnZW1lbnQgQVBJLiAgKi8KKysjZGVmaW5lCVBGX05FVExJTksJMTYKKysjZGVmaW5lCVBGX1JPVVRFCVBGX05FVExJTksgLyogQWxpYXMgdG8gZW11bGF0ZSA0LjRCU0QuICAqLworKyNkZWZpbmUJUEZfUEFDS0VUCTE3CS8qIFBhY2tldCBmYW1pbHkuICAqLworKyNkZWZpbmUJUEZfQVNICQkxOAkvKiBBc2guICAqLworKyNkZWZpbmUJUEZfRUNPTkVUCTE5CS8qIEFjb3JuIEVjb25ldC4gICovCisrI2RlZmluZQlQRl9BVE1TVkMJMjAJLyogQVRNIFNWQ3MuICAqLworKyNkZWZpbmUgUEZfUkRTCQkyMQkvKiBSRFMgc29ja2V0cy4gICovCisrI2RlZmluZQlQRl9TTkEJCTIyCS8qIExpbnV4IFNOQSBQcm9qZWN0ICovCisrI2RlZmluZQlQRl9JUkRBCQkyMwkvKiBJUkRBIHNvY2tldHMuICAqLworKyNkZWZpbmUJUEZfUFBQT1gJMjQJLyogUFBQb1ggc29ja2V0cy4gICovCisrI2RlZmluZQlQRl9XQU5QSVBFCTI1CS8qIFdhbnBpcGUgQVBJIHNvY2tldHMuICAqLworKyNkZWZpbmUgUEZfTExDCQkyNgkvKiBMaW51eCBMTEMuICAqLworKyNkZWZpbmUgUEZfQ0FOCQkyOQkvKiBDb250cm9sbGVyIEFyZWEgTmV0d29yay4gICovCisrI2RlZmluZSBQRl9USVBDCQkzMAkvKiBUSVBDIHNvY2tldHMuICAqLworKyNkZWZpbmUJUEZfQkxVRVRPT1RICTMxCS8qIEJsdWV0b290aCBzb2NrZXRzLiAgKi8KKysjZGVmaW5lCVBGX0lVQ1YJCTMyCS8qIElVQ1Ygc29ja2V0cy4gICovCisrI2RlZmluZSBQRl9SWFJQQwkzMwkvKiBSeFJQQyBzb2NrZXRzLiAgKi8KKysjZGVmaW5lIFBGX0lTRE4JCTM0CS8qIG1JU0ROIHNvY2tldHMuICAqLworKyNkZWZpbmUgUEZfUEhPTkVUCTM1CS8qIFBob25ldCBzb2NrZXRzLiAgKi8KKysjZGVmaW5lIFBGX0lFRUU4MDIxNTQJMzYJLyogSUVFRSA4MDIuMTUuNCBzb2NrZXRzLiAgKi8KKysjZGVmaW5lCVBGX01BWAkJMzcJLyogRm9yIG5vdy4uICAqLworKworKy8qIEFkZHJlc3MgZmFtaWxpZXMuICAqLworKyNkZWZpbmUJQUZfVU5TUEVDCVBGX1VOU1BFQworKyNkZWZpbmUJQUZfTE9DQUwJUEZfTE9DQUwKKysjZGVmaW5lCUFGX1VOSVgJCVBGX1VOSVgKKysjZGVmaW5lCUFGX0ZJTEUJCVBGX0ZJTEUKKysjZGVmaW5lCUFGX0lORVQJCVBGX0lORVQKKysjZGVmaW5lCUFGX0FYMjUJCVBGX0FYMjUKKysjZGVmaW5lCUFGX0lQWAkJUEZfSVBYCisrI2RlZmluZQlBRl9BUFBMRVRBTEsJUEZfQVBQTEVUQUxLCisrI2RlZmluZQlBRl9ORVRST00JUEZfTkVUUk9NCisrI2RlZmluZQlBRl9CUklER0UJUEZfQlJJREdFCisrI2RlZmluZQlBRl9BVE1QVkMJUEZfQVRNUFZDCisrI2RlZmluZQlBRl9YMjUJCVBGX1gyNQorKyNkZWZpbmUJQUZfSU5FVDYJUEZfSU5FVDYKKysjZGVmaW5lCUFGX1JPU0UJCVBGX1JPU0UKKysjZGVmaW5lCUFGX0RFQ25ldAlQRl9ERUNuZXQKKysjZGVmaW5lCUFGX05FVEJFVUkJUEZfTkVUQkVVSQorKyNkZWZpbmUJQUZfU0VDVVJJVFkJUEZfU0VDVVJJVFkKKysjZGVmaW5lCUFGX0tFWQkJUEZfS0VZCisrI2RlZmluZQlBRl9ORVRMSU5LCVBGX05FVExJTksKKysjZGVmaW5lCUFGX1JPVVRFCVBGX1JPVVRFCisrI2RlZmluZQlBRl9QQUNLRVQJUEZfUEFDS0VUCisrI2RlZmluZQlBRl9BU0gJCVBGX0FTSAorKyNkZWZpbmUJQUZfRUNPTkVUCVBGX0VDT05FVAorKyNkZWZpbmUJQUZfQVRNU1ZDCVBGX0FUTVNWQworKyNkZWZpbmUgQUZfUkRTCQlQRl9SRFMKKysjZGVmaW5lCUFGX1NOQQkJUEZfU05BCisrI2RlZmluZQlBRl9JUkRBCQlQRl9JUkRBCisrI2RlZmluZQlBRl9QUFBPWAlQRl9QUFBPWAorKyNkZWZpbmUJQUZfV0FOUElQRQlQRl9XQU5QSVBFCisrI2RlZmluZSBBRl9MTEMJCVBGX0xMQworKyNkZWZpbmUgQUZfQ0FOCQlQRl9DQU4KKysjZGVmaW5lIEFGX1RJUEMJCVBGX1RJUEMKKysjZGVmaW5lCUFGX0JMVUVUT09USAlQRl9CTFVFVE9PVEgKKysjZGVmaW5lCUFGX0lVQ1YJCVBGX0lVQ1YKKysjZGVmaW5lIEFGX1JYUlBDCVBGX1JYUlBDCisrI2RlZmluZSBBRl9JU0ROCQlQRl9JU0ROCisrI2RlZmluZSBBRl9QSE9ORVQJUEZfUEhPTkVUCisrI2RlZmluZSBBRl9JRUVFODAyMTU0CVBGX0lFRUU4MDIxNTQKKysjZGVmaW5lCUFGX01BWAkJUEZfTUFYCisrCisrLyogU29ja2V0IGxldmVsIHZhbHVlcy4gIE90aGVycyBhcmUgZGVmaW5lZCBpbiB0aGUgYXBwcm9wcmlhdGUgaGVhZGVycy4KKysKKysgICBYWFggVGhlc2UgZGVmaW5pdGlvbnMgYWxzbyBzaG91bGQgZ28gaW50byB0aGUgYXBwcm9wcmlhdGUgaGVhZGVycyBhcworKyAgIGZhciBhcyB0aGV5IGFyZSBhdmFpbGFibGUuICAqLworKyNkZWZpbmUgU09MX1JBVwkJMjU1CisrI2RlZmluZSBTT0xfREVDTkVUICAgICAgMjYxCisrI2RlZmluZSBTT0xfWDI1ICAgICAgICAgMjYyCisrI2RlZmluZSBTT0xfUEFDS0VUCTI2MworKyNkZWZpbmUgU09MX0FUTQkJMjY0CS8qIEFUTSBsYXllciAoY2VsbCBsZXZlbCkuICAqLworKyNkZWZpbmUgU09MX0FBTAkJMjY1CS8qIEFUTSBBZGFwdGlvbiBMYXllciAocGFja2V0IGxldmVsKS4gICovCisrI2RlZmluZSBTT0xfSVJEQQkyNjYKKysKKysvKiBNYXhpbXVtIHF1ZXVlIGxlbmd0aCBzcGVjaWZpYWJsZSBieSBsaXN0ZW4uICAqLworKyNkZWZpbmUgU09NQVhDT05OCTEyOAorKworKy8qIEdldCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgbWFjcm8gdG8gZGVmaW5lIHRoZSBjb21tb24gc29ja2FkZHIgbWVtYmVycy4gICovCisrI2luY2x1ZGUgPGJpdHMvc29ja2FkZHIuaD4KKysKKysvKiBTdHJ1Y3R1cmUgZGVzY3JpYmluZyBhIGdlbmVyaWMgc29ja2V0IGFkZHJlc3MuICAqLworK3N0cnVjdCBzb2NrYWRkcgorKyAgeworKyAgICBfX1NPQ0tBRERSX0NPTU1PTiAoc2FfKTsJLyogQ29tbW9uIGRhdGE6IGFkZHJlc3MgZmFtaWx5IGFuZCBsZW5ndGguICAqLworKyAgICBjaGFyIHNhX2RhdGFbMTRdOwkJLyogQWRkcmVzcyBkYXRhLiAgKi8KKysgIH07CisrCisrCisrLyogU3RydWN0dXJlIGxhcmdlIGVub3VnaCB0byBob2xkIGFueSBzb2NrZXQgYWRkcmVzcyAod2l0aCB0aGUgaGlzdG9yaWNhbAorKyAgIGV4Y2VwdGlvbiBvZiBBRl9VTklYKS4gIFdlIHJlc2VydmUgMTI4IGJ5dGVzLiAgKi8KKysjZGVmaW5lIF9fc3NfYWxpZ250eXBlCXVuc2lnbmVkIGxvbmcgaW50CisrI2RlZmluZSBfU1NfU0laRQkxMjgKKysjZGVmaW5lIF9TU19QQURTSVpFCShfU1NfU0laRSAtICgyICogc2l6ZW9mIChfX3NzX2FsaWdudHlwZSkpKQorKworK3N0cnVjdCBzb2NrYWRkcl9zdG9yYWdlCisrICB7CisrICAgIF9fU09DS0FERFJfQ09NTU9OIChzc18pOwkvKiBBZGRyZXNzIGZhbWlseSwgZXRjLiAgKi8KKysgICAgX19zc19hbGlnbnR5cGUgX19zc19hbGlnbjsJLyogRm9yY2UgZGVzaXJlZCBhbGlnbm1lbnQuICAqLworKyAgICBjaGFyIF9fc3NfcGFkZGluZ1tfU1NfUEFEU0laRV07CisrICB9OworKworKworKy8qIEJpdHMgaW4gdGhlIEZMQUdTIGFyZ3VtZW50IHRvIGBzZW5kJywgYHJlY3YnLCBldCBhbC4gICovCisrZW51bQorKyAgeworKyAgICBNU0dfT09CCQk9IDB4MDEsCS8qIFByb2Nlc3Mgb3V0LW9mLWJhbmQgZGF0YS4gICovCisrI2RlZmluZSBNU0dfT09CCQlNU0dfT09CCisrICAgIE1TR19QRUVLCQk9IDB4MDIsCS8qIFBlZWsgYXQgaW5jb21pbmcgbWVzc2FnZXMuICAqLworKyNkZWZpbmUgTVNHX1BFRUsJTVNHX1BFRUsKKysgICAgTVNHX0RPTlRST1VURQk9IDB4MDQsCS8qIERvbid0IHVzZSBsb2NhbCByb3V0aW5nLiAgKi8KKysjZGVmaW5lIE1TR19ET05UUk9VVEUJTVNHX0RPTlRST1VURQorKyNpZmRlZiBfX1VTRV9HTlUKKysgICAgLyogREVDbmV0IHVzZXMgYSBkaWZmZXJlbnQgbmFtZS4gICovCisrICAgIE1TR19UUllIQVJECQk9IE1TR19ET05UUk9VVEUsCisrIyBkZWZpbmUgTVNHX1RSWUhBUkQJTVNHX0RPTlRST1VURQorKyNlbmRpZgorKyAgICBNU0dfQ1RSVU5DCQk9IDB4MDgsCS8qIENvbnRyb2wgZGF0YSBsb3N0IGJlZm9yZSBkZWxpdmVyeS4gICovCisrI2RlZmluZSBNU0dfQ1RSVU5DCU1TR19DVFJVTkMKKysgICAgTVNHX1BST1hZCQk9IDB4MTAsCS8qIFN1cHBseSBvciBhc2sgc2Vjb25kIGFkZHJlc3MuICAqLworKyNkZWZpbmUgTVNHX1BST1hZCU1TR19QUk9YWQorKyAgICBNU0dfVFJVTkMJCT0gMHgyMCwKKysjZGVmaW5lCU1TR19UUlVOQwlNU0dfVFJVTkMKKysgICAgTVNHX0RPTlRXQUlUCT0gMHg0MCwgLyogTm9uYmxvY2tpbmcgSU8uICAqLworKyNkZWZpbmUJTVNHX0RPTlRXQUlUCU1TR19ET05UV0FJVAorKyAgICBNU0dfRU9SCQk9IDB4ODAsIC8qIEVuZCBvZiByZWNvcmQuICAqLworKyNkZWZpbmUJTVNHX0VPUgkJTVNHX0VPUgorKyAgICBNU0dfV0FJVEFMTAkJPSAweDEwMCwgLyogV2FpdCBmb3IgYSBmdWxsIHJlcXVlc3QuICAqLworKyNkZWZpbmUJTVNHX1dBSVRBTEwJTVNHX1dBSVRBTEwKKysgICAgTVNHX0ZJTgkJPSAweDIwMCwKKysjZGVmaW5lCU1TR19GSU4JCU1TR19GSU4KKysgICAgTVNHX1NZTgkJPSAweDQwMCwKKysjZGVmaW5lCU1TR19TWU4JCU1TR19TWU4KKysgICAgTVNHX0NPTkZJUk0JCT0gMHg4MDAsIC8qIENvbmZpcm0gcGF0aCB2YWxpZGl0eS4gICovCisrI2RlZmluZQlNU0dfQ09ORklSTQlNU0dfQ09ORklSTQorKyAgICBNU0dfUlNUCQk9IDB4MTAwMCwKKysjZGVmaW5lCU1TR19SU1QJCU1TR19SU1QKKysgICAgTVNHX0VSUlFVRVVFCT0gMHgyMDAwLCAvKiBGZXRjaCBtZXNzYWdlIGZyb20gZXJyb3IgcXVldWUuICAqLworKyNkZWZpbmUJTVNHX0VSUlFVRVVFCU1TR19FUlJRVUVVRQorKyAgICBNU0dfTk9TSUdOQUwJPSAweDQwMDAsIC8qIERvIG5vdCBnZW5lcmF0ZSBTSUdQSVBFLiAgKi8KKysjZGVmaW5lCU1TR19OT1NJR05BTAlNU0dfTk9TSUdOQUwKKysgICAgTVNHX01PUkUJCT0gMHg4MDAwLCAgLyogU2VuZGVyIHdpbGwgc2VuZCBtb3JlLiAgKi8KKysjZGVmaW5lCU1TR19NT1JFCU1TR19NT1JFCisrCisrICAgIE1TR19DTVNHX0NMT0VYRUMJPSAweDQwMDAwMDAwCS8qIFNldCBjbG9zZV9vbl9leGl0IGZvciBmaWxlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IgcmVjZWl2ZWQgdGhyb3VnaAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ01fUklHSFRTLiAgKi8KKysjZGVmaW5lIE1TR19DTVNHX0NMT0VYRUMgTVNHX0NNU0dfQ0xPRVhFQworKyAgfTsKKysKKysKKysvKiBTdHJ1Y3R1cmUgZGVzY3JpYmluZyBtZXNzYWdlcyBzZW50IGJ5CisrICAgYHNlbmRtc2cnIGFuZCByZWNlaXZlZCBieSBgcmVjdm1zZycuICAqLworK3N0cnVjdCBtc2doZHIKKysgIHsKKysgICAgdm9pZCAqbXNnX25hbWU7CQkvKiBBZGRyZXNzIHRvIHNlbmQgdG8vcmVjZWl2ZSBmcm9tLiAgKi8KKysgICAgc29ja2xlbl90IG1zZ19uYW1lbGVuOwkvKiBMZW5ndGggb2YgYWRkcmVzcyBkYXRhLiAgKi8KKysKKysgICAgc3RydWN0IGlvdmVjICptc2dfaW92OwkvKiBWZWN0b3Igb2YgZGF0YSB0byBzZW5kL3JlY2VpdmUgaW50by4gICovCisrICAgIHNpemVfdCBtc2dfaW92bGVuOwkJLyogTnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSB2ZWN0b3IuICAqLworKworKyAgICB2b2lkICptc2dfY29udHJvbDsJCS8qIEFuY2lsbGFyeSBkYXRhIChlZyBCU0QgZmlsZWRlc2MgcGFzc2luZykuICovCisrICAgIHNpemVfdCBtc2dfY29udHJvbGxlbjsJLyogQW5jaWxsYXJ5IGRhdGEgYnVmZmVyIGxlbmd0aC4KKysJCQkJICAgISEgVGhlIHR5cGUgc2hvdWxkIGJlIHNvY2tsZW5fdCBidXQgdGhlCisrCQkJCSAgIGRlZmluaXRpb24gb2YgdGhlIGtlcm5lbCBpcyBpbmNvbXBhdGlibGUKKysJCQkJICAgd2l0aCB0aGlzLiAgKi8KKysKKysgICAgaW50IG1zZ19mbGFnczsJCS8qIEZsYWdzIG9uIHJlY2VpdmVkIG1lc3NhZ2UuICAqLworKyAgfTsKKysKKysvKiBTdHJ1Y3R1cmUgdXNlZCBmb3Igc3RvcmFnZSBvZiBhbmNpbGxhcnkgZGF0YSBvYmplY3QgaW5mb3JtYXRpb24uICAqLworK3N0cnVjdCBjbXNnaGRyCisrICB7CisrICAgIHNpemVfdCBjbXNnX2xlbjsJCS8qIExlbmd0aCBvZiBkYXRhIGluIGNtc2dfZGF0YSBwbHVzIGxlbmd0aAorKwkJCQkgICBvZiBjbXNnaGRyIHN0cnVjdHVyZS4KKysJCQkJICAgISEgVGhlIHR5cGUgc2hvdWxkIGJlIHNvY2tsZW5fdCBidXQgdGhlCisrCQkJCSAgIGRlZmluaXRpb24gb2YgdGhlIGtlcm5lbCBpcyBpbmNvbXBhdGlibGUKKysJCQkJICAgd2l0aCB0aGlzLiAgKi8KKysgICAgaW50IGNtc2dfbGV2ZWw7CQkvKiBPcmlnaW5hdGluZyBwcm90b2NvbC4gICovCisrICAgIGludCBjbXNnX3R5cGU7CQkvKiBQcm90b2NvbCBzcGVjaWZpYyB0eXBlLiAgKi8KKysjaWYgKCFkZWZpbmVkIF9fU1RSSUNUX0FOU0lfXyAmJiBfX0dOVUNfXyA+PSAyKSB8fCBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKysgICAgX19leHRlbnNpb25fXyB1bnNpZ25lZCBjaGFyIF9fY21zZ19kYXRhIF9fZmxleGFycjsgLyogQW5jaWxsYXJ5IGRhdGEuICAqLworKyNlbmRpZgorKyAgfTsKKysKKysvKiBBbmNpbGxhcnkgZGF0YSBvYmplY3QgbWFuaXB1bGF0aW9uIG1hY3Jvcy4gICovCisrI2lmICghZGVmaW5lZCBfX1NUUklDVF9BTlNJX18gJiYgX19HTlVDX18gPj0gMikgfHwgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCisrIyBkZWZpbmUgQ01TR19EQVRBKGNtc2cpICgoY21zZyktPl9fY21zZ19kYXRhKQorKyNlbHNlCisrIyBkZWZpbmUgQ01TR19EQVRBKGNtc2cpICgodW5zaWduZWQgY2hhciAqKSAoKHN0cnVjdCBjbXNnaGRyICopIChjbXNnKSArIDEpKQorKyNlbmRpZgorKyNkZWZpbmUgQ01TR19OWFRIRFIobWhkciwgY21zZykgX19jbXNnX254dGhkciAobWhkciwgY21zZykKKysjZGVmaW5lIENNU0dfRklSU1RIRFIobWhkcikgXAorKyAgKChzaXplX3QpIChtaGRyKS0+bXNnX2NvbnRyb2xsZW4gPj0gc2l6ZW9mIChzdHJ1Y3QgY21zZ2hkcikJCSAgICAgIFwKKysgICA/IChzdHJ1Y3QgY21zZ2hkciAqKSAobWhkciktPm1zZ19jb250cm9sIDogKHN0cnVjdCBjbXNnaGRyICopIDApCisrI2RlZmluZSBDTVNHX0FMSUdOKGxlbikgKCgobGVuKSArIHNpemVvZiAoc2l6ZV90KSAtIDEpIFwKKysJCQkgJiAoc2l6ZV90KSB+KHNpemVvZiAoc2l6ZV90KSAtIDEpKQorKyNkZWZpbmUgQ01TR19TUEFDRShsZW4pIChDTVNHX0FMSUdOIChsZW4pIFwKKysJCQkgKyBDTVNHX0FMSUdOIChzaXplb2YgKHN0cnVjdCBjbXNnaGRyKSkpCisrI2RlZmluZSBDTVNHX0xFTihsZW4pICAgKENNU0dfQUxJR04gKHNpemVvZiAoc3RydWN0IGNtc2doZHIpKSArIChsZW4pKQorKworK2V4dGVybiBzdHJ1Y3QgY21zZ2hkciAqX19jbXNnX254dGhkciAoc3RydWN0IG1zZ2hkciAqX19taGRyLAorKwkJCQkgICAgICBzdHJ1Y3QgY21zZ2hkciAqX19jbXNnKSBfX1RIUk9XOworKyNpZmRlZiBfX1VTRV9FWFRFUk5fSU5MSU5FUworKyMgaWZuZGVmIF9FWFRFUk5fSU5MSU5FCisrIyAgZGVmaW5lIF9FWFRFUk5fSU5MSU5FIF9fZXh0ZXJuX2lubGluZQorKyMgZW5kaWYKKytfRVhURVJOX0lOTElORSBzdHJ1Y3QgY21zZ2hkciAqCisrX19OVEggKF9fY21zZ19ueHRoZHIgKHN0cnVjdCBtc2doZHIgKl9fbWhkciwgc3RydWN0IGNtc2doZHIgKl9fY21zZykpCisreworKyAgaWYgKChzaXplX3QpIF9fY21zZy0+Y21zZ19sZW4gPCBzaXplb2YgKHN0cnVjdCBjbXNnaGRyKSkKKysgICAgLyogVGhlIGtlcm5lbCBoZWFkZXIgZG9lcyB0aGlzIHNvIHRoZXJlIG1heSBiZSBhIHJlYXNvbi4gICovCisrICAgIHJldHVybiAwOworKworKyAgX19jbXNnID0gKHN0cnVjdCBjbXNnaGRyICopICgodW5zaWduZWQgY2hhciAqKSBfX2Ntc2cKKysJCQkgICAgICAgKyBDTVNHX0FMSUdOIChfX2Ntc2ctPmNtc2dfbGVuKSk7CisrICBpZiAoKHVuc2lnbmVkIGNoYXIgKikgKF9fY21zZyArIDEpID4gKCh1bnNpZ25lZCBjaGFyICopIF9fbWhkci0+bXNnX2NvbnRyb2wKKysJCQkJCSsgX19taGRyLT5tc2dfY29udHJvbGxlbikKKysgICAgICB8fCAoKHVuc2lnbmVkIGNoYXIgKikgX19jbXNnICsgQ01TR19BTElHTiAoX19jbXNnLT5jbXNnX2xlbikKKysJICA+ICgodW5zaWduZWQgY2hhciAqKSBfX21oZHItPm1zZ19jb250cm9sICsgX19taGRyLT5tc2dfY29udHJvbGxlbikpKQorKyAgICAvKiBObyBtb3JlIGVudHJpZXMuICAqLworKyAgICByZXR1cm4gMDsKKysgIHJldHVybiBfX2Ntc2c7CisrfQorKyNlbmRpZgkvKiBVc2UgYGV4dGVybiBpbmxpbmUnLiAgKi8KKysKKysvKiBTb2NrZXQgbGV2ZWwgbWVzc2FnZSB0eXBlcy4gIFRoaXMgbXVzdCBtYXRjaCB0aGUgZGVmaW5pdGlvbnMgaW4KKysgICA8bGludXgvc29ja2V0Lmg+LiAgKi8KKytlbnVtCisrICB7CisrICAgIFNDTV9SSUdIVFMgPSAweDAxCQkvKiBUcmFuc2ZlciBmaWxlIGRlc2NyaXB0b3JzLiAgKi8KKysjZGVmaW5lIFNDTV9SSUdIVFMgU0NNX1JJR0hUUworKyNpZmRlZiBfX1VTRV9HTlUKKysgICAgLCBTQ01fQ1JFREVOVElBTFMgPSAweDAyCS8qIENyZWRlbnRpYWxzIHBhc3NpbmcuICAqLworKyMgZGVmaW5lIFNDTV9DUkVERU5USUFMUyBTQ01fQ1JFREVOVElBTFMKKysjZW5kaWYKKysgIH07CisrCisrI2lmZGVmIF9fVVNFX0dOVQorKy8qIFVzZXIgdmlzaWJsZSBzdHJ1Y3R1cmUgZm9yIFNDTV9DUkVERU5USUFMUyBtZXNzYWdlICovCisrc3RydWN0IHVjcmVkCisreworKyAgcGlkX3QgcGlkOwkJCS8qIFBJRCBvZiBzZW5kaW5nIHByb2Nlc3MuICAqLworKyAgdWlkX3QgdWlkOwkJCS8qIFVJRCBvZiBzZW5kaW5nIHByb2Nlc3MuICAqLworKyAgZ2lkX3QgZ2lkOwkJCS8qIEdJRCBvZiBzZW5kaW5nIHByb2Nlc3MuICAqLworK307CisrI2VuZGlmCisrCisrLyogVWdseSB3b3JrYXJvdW5kIGZvciB1bmNsZWFuIGtlcm5lbCBoZWFkZXJzLiAgKi8KKysjaWYgIWRlZmluZWQgX19VU0VfTUlTQyAmJiAhZGVmaW5lZCBfX1VTRV9HTlUKKysjIGlmbmRlZiBGSU9HRVRPV04KKysjICBkZWZpbmUgX19TWVNfU09DS0VUX0hfdW5kZWZfRklPR0VUT1dOCisrIyBlbmRpZgorKyMgaWZuZGVmIEZJT1NFVE9XTgorKyMgIGRlZmluZSBfX1NZU19TT0NLRVRfSF91bmRlZl9GSU9TRVRPV04KKysjIGVuZGlmCisrIyBpZm5kZWYgU0lPQ0FUTUFSSworKyMgIGRlZmluZSBfX1NZU19TT0NLRVRfSF91bmRlZl9TSU9DQVRNQVJLCisrIyBlbmRpZgorKyMgaWZuZGVmIFNJT0NHUEdSUAorKyMgIGRlZmluZSBfX1NZU19TT0NLRVRfSF91bmRlZl9TSU9DR1BHUlAKKysjIGVuZGlmCisrIyBpZm5kZWYgU0lPQ0dTVEFNUAorKyMgIGRlZmluZSBfX1NZU19TT0NLRVRfSF91bmRlZl9TSU9DR1NUQU1QCisrIyBlbmRpZgorKyMgaWZuZGVmIFNJT0NHU1RBTVBOUworKyMgIGRlZmluZSBfX1NZU19TT0NLRVRfSF91bmRlZl9TSU9DR1NUQU1QTlMKKysjIGVuZGlmCisrIyBpZm5kZWYgU0lPQ1NQR1JQCisrIyAgZGVmaW5lIF9fU1lTX1NPQ0tFVF9IX3VuZGVmX1NJT0NTUEdSUAorKyMgZW5kaWYKKysjZW5kaWYKKysKKysvKiBHZXQgc29ja2V0IG1hbmlwdWxhdGlvbiByZWxhdGVkIGluZm9ybWF0aW9ucyBmcm9tIGtlcm5lbCBoZWFkZXJzLiAgKi8KKysjaW5jbHVkZSA8YXNtL3NvY2tldC5oPgorKworKyNpZiAhZGVmaW5lZCBfX1VTRV9NSVNDICYmICFkZWZpbmVkIF9fVVNFX0dOVQorKyMgaWZkZWYgX19TWVNfU09DS0VUX0hfdW5kZWZfRklPR0VUT1dOCisrIyAgdW5kZWYgX19TWVNfU09DS0VUX0hfdW5kZWZfRklPR0VUT1dOCisrIyAgdW5kZWYgRklPR0VUT1dOCisrIyBlbmRpZgorKyMgaWZkZWYgX19TWVNfU09DS0VUX0hfdW5kZWZfRklPU0VUT1dOCisrIyAgdW5kZWYgX19TWVNfU09DS0VUX0hfdW5kZWZfRklPU0VUT1dOCisrIyAgdW5kZWYgRklPU0VUT1dOCisrIyBlbmRpZgorKyMgaWZkZWYgX19TWVNfU09DS0VUX0hfdW5kZWZfU0lPQ0FUTUFSSworKyMgIHVuZGVmIF9fU1lTX1NPQ0tFVF9IX3VuZGVmX1NJT0NBVE1BUksKKysjICB1bmRlZiBTSU9DQVRNQVJLCisrIyBlbmRpZgorKyMgaWZkZWYgX19TWVNfU09DS0VUX0hfdW5kZWZfU0lPQ0dQR1JQCisrIyAgdW5kZWYgX19TWVNfU09DS0VUX0hfdW5kZWZfU0lPQ0dQR1JQCisrIyAgdW5kZWYgU0lPQ0dQR1JQCisrIyBlbmRpZgorKyMgaWZkZWYgX19TWVNfU09DS0VUX0hfdW5kZWZfU0lPQ0dTVEFNUAorKyMgIHVuZGVmIF9fU1lTX1NPQ0tFVF9IX3VuZGVmX1NJT0NHU1RBTVAKKysjICB1bmRlZiBTSU9DR1NUQU1QCisrIyBlbmRpZgorKyMgaWZkZWYgX19TWVNfU09DS0VUX0hfdW5kZWZfU0lPQ0dTVEFNUE5TCisrIyAgdW5kZWYgX19TWVNfU09DS0VUX0hfdW5kZWZfU0lPQ0dTVEFNUE5TCisrIyAgdW5kZWYgU0lPQ0dTVEFNUE5TCisrIyBlbmRpZgorKyMgaWZkZWYgX19TWVNfU09DS0VUX0hfdW5kZWZfU0lPQ1NQR1JQCisrIyAgdW5kZWYgX19TWVNfU09DS0VUX0hfdW5kZWZfU0lPQ1NQR1JQCisrIyAgdW5kZWYgU0lPQ1NQR1JQCisrIyBlbmRpZgorKyNlbmRpZgorKworKy8qIFN0cnVjdHVyZSB1c2VkIHRvIG1hbmlwdWxhdGUgdGhlIFNPX0xJTkdFUiBvcHRpb24uICAqLworK3N0cnVjdCBsaW5nZXIKKysgIHsKKysgICAgaW50IGxfb25vZmY7CQkvKiBOb256ZXJvIHRvIGxpbmdlciBvbiBjbG9zZS4gICovCisrICAgIGludCBsX2xpbmdlcjsJCS8qIFRpbWUgdG8gbGluZ2VyLiAgKi8KKysgIH07CisrCisrI2VuZGlmCS8qIGJpdHMvc29ja2V0LmggKi8KK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvYml0cy9zb2NrZXQuaCBnbGliYy0yLjEwLjEvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvYml0cy9zb2NrZXQuaApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS81NjAtcHBjLWF0b21pYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNTYwLXBwYy1hdG9taWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ0MzUwYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNTYwLXBwYy1hdG9taWMucGF0Y2gKQEAgLTAsMCArMSw0MTUgQEAKK3NuaXBlZCBmcm9tIHN1c2UKKworSW5kZXg6IHN5c2RlcHMvcG93ZXJwYy9iaXRzL2F0b21pYy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSQ1MgZmlsZTogL2N2cy9nbGliYy9saWJjL3N5c2RlcHMvcG93ZXJwYy9iaXRzL2F0b21pYy5oLHYKK3JldHJpZXZpbmcgcmV2aXNpb24gMS4xNworZGlmZiAtdSAtYSAtcCAtcjEuMTcgYXRvbWljLmgKKworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9zeXNkZXBzL3Bvd2VycGMvYml0cy9hdG9taWMuaCBnbGliYy0yLjEwLjEvc3lzZGVwcy9wb3dlcnBjL2JpdHMvYXRvbWljLmgKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9zeXNkZXBzL3Bvd2VycGMvYml0cy9hdG9taWMuaAkyMDA3LTAzLTI2IDIyOjE1OjI4LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9zeXNkZXBzL3Bvd2VycGMvYml0cy9hdG9taWMuaAkyMDA5LTExLTEzIDAwOjUxOjE5LjAwMDAwMDAwMCArMDEwMAorQEAgLTg1LDE0ICs4NSwxNCBAQAorICAgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fdG1wOwkJCQkJCSAgICAgIFwKKyAgICAgICBfX3R5cGVvZiAobWVtKSAgX19tZW1wID0gKG1lbSk7CQkJCQkgICAgICBcCisgICAgICAgX19hc20gX192b2xhdGlsZSAoCQkJCQkJICAgICAgXAorLQkJICAgICAgICAiMToJbHdhcngJJTAsMCwlMSIgTVVURVhfSElOVF9BQ1EgIlxuIgkgICAgICBcCisrCQkgICAgICAgICIxOglsd2FyeAklMCwleTEiIE1VVEVYX0hJTlRfQUNRICJcbiIJICAgICAgXAorIAkJICAgICAgICAiCWNtcHcJJTAsJTJcbiIJCQkgICAgICBcCisgCQkgICAgICAgICIJYm5lCTJmXG4iCQkJCSAgICAgIFwKKy0JCSAgICAgICAgIglzdHdjeC4JJTMsMCwlMVxuIgkJCSAgICAgIFwKKysJCSAgICAgICAgIglzdHdjeC4JJTMsJXkxXG4iCQkJICAgICAgXAorIAkJICAgICAgICAiCWJuZS0JMWJcbiIJCQkJICAgICAgXAorIAkJICAgICAgICAiMjoJIiBfX0FSQ0hfQUNRX0lOU1RSCQkJICAgICAgXAorLQkJICAgICAgICA6ICI9JnIiIChfX3RtcCkJCQkJCSAgICAgIFwKKy0JCSAgICAgICAgOiAiYiIgKF9fbWVtcCksICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCSAgICAgIFwKKysJCSAgICAgICAgOiAiPSZyIiAoX190bXApLCAiK1oiICgqX19tZW1wKQkJCSAgICAgIFwKKysJCSAgICAgICAgOiAiciIgKG9sZHZhbCksICJyIiAobmV3dmFsKQkJCSAgICAgIFwKKyAJCSAgICAgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkgICAgICBcCisgICAgICAgX190bXA7CQkJCQkJCQkgICAgICBcCisgICB9KQorQEAgLTEwMiwxNCArMTAyLDE0IEBACisgICAgICAgX190eXBlb2YgKCoobWVtKSkgX190bXA7CQkJCQkJICAgICAgXAorICAgICAgIF9fdHlwZW9mIChtZW0pICBfX21lbXAgPSAobWVtKTsJCQkJCSAgICAgIFwKKyAgICAgICBfX2FzbSBfX3ZvbGF0aWxlIChfX0FSQ0hfUkVMX0lOU1RSICJcbiIJCQkJICAgICAgXAorLQkJICAgICAgICAiMToJbHdhcngJJTAsMCwlMSIgTVVURVhfSElOVF9SRUwgIlxuIgkgICAgICBcCisrCQkgICAgICAgICIxOglsd2FyeAklMCwleTEiIE1VVEVYX0hJTlRfUkVMICJcbiIJICAgICAgXAorIAkJICAgICAgICAiCWNtcHcJJTAsJTJcbiIJCQkgICAgICBcCisgCQkgICAgICAgICIJYm5lCTJmXG4iCQkJCSAgICAgIFwKKy0JCSAgICAgICAgIglzdHdjeC4JJTMsMCwlMVxuIgkJCSAgICAgIFwKKysJCSAgICAgICAgIglzdHdjeC4JJTMsJXkxXG4iCQkJICAgICAgXAorIAkJICAgICAgICAiCWJuZS0JMWJcbiIJCQkJICAgICAgXAorIAkJICAgICAgICAiMjoJIgkJCQkJICAgICAgXAorLQkJICAgICAgICA6ICI9JnIiIChfX3RtcCkJCQkJCSAgICAgIFwKKy0JCSAgICAgICAgOiAiYiIgKF9fbWVtcCksICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCSAgICAgIFwKKysJCSAgICAgICAgOiAiPSZyIiAoX190bXApLCAiK1oiIChfX21lbXApCQkJICAgICAgXAorKwkJICAgICAgICA6ICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkJICAgICAgXAorIAkJICAgICAgICA6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgICBfX3RtcDsJCQkJCQkJCSAgICAgIFwKKyAgIH0pCitAQCAtMTE4LDEyICsxMTgsMTIgQEAKKyAgICh7CQkJCQkJCQkJICAgICAgXAorICAgICBfX3R5cGVvZiAoKm1lbSkgX192YWw7CQkJCQkJICAgICAgXAorICAgICBfX2FzbSBfX3ZvbGF0aWxlICgJCQkJCQkJICAgICAgXAorLQkJICAgICAgIjE6CWx3YXJ4CSUwLDAsJTIiIE1VVEVYX0hJTlRfQUNRICJcbiIJICAgICAgXAorLQkJICAgICAgIgkJc3R3Y3guCSUzLDAsJTJcbiIJCQkgICAgICBcCisrCQkgICAgICAiMToJbHdhcngJJTAsJXkxIiBNVVRFWF9ISU5UX0FDUSAiXG4iCSAgICAgIFwKKysJCSAgICAgICIJCXN0d2N4LgklMiwleTFcbiIJCQkgICAgICBcCisgCQkgICAgICAiCQlibmUtCTFiXG4iCQkJCSAgICAgIFwKKyAJCSAgICAgICIgICAiIF9fQVJDSF9BQ1FfSU5TVFIJCQkJICAgICAgXAorLQkJICAgICAgOiAiPSZyIiAoX192YWwpLCAiPW0iICgqbWVtKQkJCSAgICAgIFwKKy0JCSAgICAgIDogImIiIChtZW0pLCAiciIgKHZhbHVlKSwgIm0iICgqbWVtKQkJICAgICAgXAorKwkJICAgICAgOiAiPSZyIiAoX192YWwpLCAiK1oiICgqbWVtKQkJCSAgICAgIFwKKysJCSAgICAgIDogInIiICh2YWx1ZSkJCQkJCSAgICAgIFwKKyAJCSAgICAgIDogImNyMCIsICJtZW1vcnkiKTsJCQkJICAgICAgXAorICAgICBfX3ZhbDsJCQkJCQkJCSAgICAgIFwKKyAgIH0pCitAQCAtMTMyLDExICsxMzIsMTEgQEAKKyAgICh7CQkJCQkJCQkJICAgICAgXAorICAgICBfX3R5cGVvZiAoKm1lbSkgX192YWw7CQkJCQkJICAgICAgXAorICAgICBfX2FzbSBfX3ZvbGF0aWxlIChfX0FSQ0hfUkVMX0lOU1RSICJcbiIJCQkJICAgICAgXAorLQkJICAgICAgIjE6CWx3YXJ4CSUwLDAsJTIiIE1VVEVYX0hJTlRfUkVMICJcbiIJICAgICAgXAorLQkJICAgICAgIgkJc3R3Y3guCSUzLDAsJTJcbiIJCQkgICAgICBcCisrCQkgICAgICAiMToJbHdhcngJJTAsJXkxIiBNVVRFWF9ISU5UX1JFTCAiXG4iCSAgICAgIFwKKysJCSAgICAgICIJCXN0d2N4LgklMiwleTFcbiIJCQkgICAgICBcCisgCQkgICAgICAiCQlibmUtCTFiIgkJCQkgICAgICBcCistCQkgICAgICA6ICI9JnIiIChfX3ZhbCksICI9bSIgKCptZW0pCQkJICAgICAgXAorLQkJICAgICAgOiAiYiIgKG1lbSksICJyIiAodmFsdWUpLCAibSIgKCptZW0pCQkgICAgICBcCisrCQkgICAgICA6ICI9JnIiIChfX3ZhbCksICIrWiIgKCptZW0pCQkJICAgICAgXAorKwkJICAgICAgOiAiciIgKHZhbHVlKQkJCQkJICAgICAgXAorIAkJICAgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkgICAgICBcCisgICAgIF9fdmFsOwkJCQkJCQkJICAgICAgXAorICAgfSkKK0BAIC0xNDQsMTIgKzE0NCwxMiBAQAorICNkZWZpbmUgX19hcmNoX2F0b21pY19leGNoYW5nZV9hbmRfYWRkXzMyKG1lbSwgdmFsdWUpIFwKKyAgICh7CQkJCQkJCQkJICAgICAgXAorICAgICBfX3R5cGVvZiAoKm1lbSkgX192YWwsIF9fdG1wOwkJCQkJICAgICAgXAorLSAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbHdhcngJJTAsMCwlM1xuIgkJCSAgICAgIFwKKy0JCSAgICAgICIJCWFkZAklMSwlMCwlNFxuIgkJCSAgICAgIFwKKy0JCSAgICAgICIJCXN0d2N4LgklMSwwLCUzXG4iCQkJICAgICAgXAorKyAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbHdhcngJJTAsJXkyXG4iCQkJICAgICAgXAorKwkJICAgICAgIgkJYWRkCSUxLCUwLCUzXG4iCQkJICAgICAgXAorKwkJICAgICAgIgkJc3R3Y3guCSUxLCV5MlxuIgkJCSAgICAgIFwKKyAJCSAgICAgICIJCWJuZS0JMWIiCQkJCSAgICAgIFwKKy0JCSAgICAgIDogIj0mYiIgKF9fdmFsKSwgIj0mciIgKF9fdG1wKSwgIj1tIiAoKm1lbSkJICAgICAgXAorLQkJICAgICAgOiAiYiIgKG1lbSksICJyIiAodmFsdWUpLCAibSIgKCptZW0pCQkgICAgICBcCisrCQkgICAgICA6ICI9JmIiIChfX3ZhbCksICI9JnIiIChfX3RtcCksICIrWiIgKCptZW0pCSAgICAgIFwKKysJCSAgICAgIDogInIiICh2YWx1ZSkJCQkJCSAgICAgIFwKKyAJCSAgICAgIDogImNyMCIsICJtZW1vcnkiKTsJCQkJICAgICAgXAorICAgICBfX3ZhbDsJCQkJCQkJCSAgICAgIFwKKyAgIH0pCitAQCAtMTU3LDEyICsxNTcsMTIgQEAKKyAjZGVmaW5lIF9fYXJjaF9hdG9taWNfaW5jcmVtZW50X3ZhbF8zMihtZW0pIFwKKyAgICh7CQkJCQkJCQkJICAgICAgXAorICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX3ZhbDsJCQkJCQkgICAgICBcCistICAgIF9fYXNtIF9fdm9sYXRpbGUgKCIxOglsd2FyeAklMCwwLCUyXG4iCQkJICAgICAgXAorKyAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbHdhcngJJTAsJXkxXG4iCQkJICAgICAgXAorIAkJICAgICAgIgkJYWRkaQklMCwlMCwxXG4iCQkJICAgICAgXAorLQkJICAgICAgIgkJc3R3Y3guCSUwLDAsJTJcbiIJCQkgICAgICBcCisrCQkgICAgICAiCQlzdHdjeC4JJTAsJXkxXG4iCQkJICAgICAgXAorIAkJICAgICAgIgkJYm5lLQkxYiIJCQkJICAgICAgXAorLQkJICAgICAgOiAiPSZiIiAoX192YWwpLCAiPW0iICgqbWVtKQkJCSAgICAgIFwKKy0JCSAgICAgIDogImIiIChtZW0pLCAibSIgKCptZW0pCQkJCSAgICAgIFwKKysJCSAgICAgIDogIj0mYiIgKF9fdmFsKSwgIitaIiAoKm1lbSkJCQkgICAgICBcCisrCQkgICAgICA6CQkJCQkJCSAgICAgIFwKKyAJCSAgICAgIDogImNyMCIsICJtZW1vcnkiKTsJCQkJICAgICAgXAorICAgICBfX3ZhbDsJCQkJCQkJCSAgICAgIFwKKyAgIH0pCitAQCAtMTcwLDI3ICsxNzAsMjcgQEAKKyAjZGVmaW5lIF9fYXJjaF9hdG9taWNfZGVjcmVtZW50X3ZhbF8zMihtZW0pIFwKKyAgICh7CQkJCQkJCQkJICAgICAgXAorICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX3ZhbDsJCQkJCQkgICAgICBcCistICAgIF9fYXNtIF9fdm9sYXRpbGUgKCIxOglsd2FyeAklMCwwLCUyXG4iCQkJICAgICAgXAorKyAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbHdhcngJJTAsJXkxXG4iCQkJICAgICAgXAorIAkJICAgICAgIgkJc3ViaQklMCwlMCwxXG4iCQkJICAgICAgXAorLQkJICAgICAgIgkJc3R3Y3guCSUwLDAsJTJcbiIJCQkgICAgICBcCisrCQkgICAgICAiCQlzdHdjeC4JJTAsJXkxXG4iCQkJICAgICAgXAorIAkJICAgICAgIgkJYm5lLQkxYiIJCQkJICAgICAgXAorLQkJICAgICAgOiAiPSZiIiAoX192YWwpLCAiPW0iICgqbWVtKQkJCSAgICAgIFwKKy0JCSAgICAgIDogImIiIChtZW0pLCAibSIgKCptZW0pCQkJCSAgICAgIFwKKysJCSAgICAgIDogIj0mYiIgKF9fdmFsKSwgIitaIiAoKm1lbSkJCQkgICAgICBcCisrCQkgICAgICA6CQkJCQkJCSAgICAgIFwKKyAJCSAgICAgIDogImNyMCIsICJtZW1vcnkiKTsJCQkJICAgICAgXAorICAgICBfX3ZhbDsJCQkJCQkJCSAgICAgIFwKKyAgIH0pCisgCisgI2RlZmluZSBfX2FyY2hfYXRvbWljX2RlY3JlbWVudF9pZl9wb3NpdGl2ZV8zMihtZW0pIFwKKyAgICh7IGludCBfX3ZhbCwgX190bXA7CQkJCQkJCSAgICAgIFwKKy0gICAgIF9fYXNtIF9fdm9sYXRpbGUgKCIxOglsd2FyeAklMCwwLCUzXG4iCQkJICAgICAgXAorKyAgICAgX19hc20gX192b2xhdGlsZSAoIjE6CWx3YXJ4CSUwLCV5MlxuIgkJCSAgICAgIFwKKyAJCSAgICAgICAiCWNtcHdpCTAsJTAsMFxuIgkJCSAgICAgIFwKKyAJCSAgICAgICAiCWFkZGkJJTEsJTAsLTFcbiIJCQkgICAgICBcCisgCQkgICAgICAgIglibGUJMmZcbiIJCQkJICAgICAgXAorLQkJICAgICAgICIJc3R3Y3guCSUxLDAsJTNcbiIJCQkgICAgICBcCisrCQkgICAgICAgIglzdHdjeC4JJTEsJXkyXG4iCQkJICAgICAgXAorIAkJICAgICAgICIJYm5lLQkxYlxuIgkJCQkgICAgICBcCisgCQkgICAgICAgIjI6CSIgX19BUkNIX0FDUV9JTlNUUgkJCSAgICAgIFwKKy0JCSAgICAgICA6ICI9JmIiIChfX3ZhbCksICI9JnIiIChfX3RtcCksICI9bSIgKCptZW0pCSAgICAgIFwKKy0JCSAgICAgICA6ICJiIiAobWVtKSwgIm0iICgqbWVtKQkJCQkgICAgICBcCisrCQkgICAgICAgOiAiPSZiIiAoX192YWwpLCAiPSZyIiAoX190bXApLCAiK1oiICgqbWVtKQkgICAgICBcCisrCQkgICAgICAgOgkJCQkJCSAgICAgIFwKKyAJCSAgICAgICA6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgIF9fdmFsOwkJCQkJCQkJICAgICAgXAorICAgfSkKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9iaXRzL2F0b21pYy5oIGdsaWJjLTIuMTAuMS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2JpdHMvYXRvbWljLmgKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2JpdHMvYXRvbWljLmgJMjAwNy0wMy0yNiAyMjoxNTo0NS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9iaXRzL2F0b21pYy5oCTIwMDktMTEtMTMgMDA6NTE6MTkuMDAwMDAwMDAwICswMTAwCitAQCAtNDQsMTQgKzQ0LDE0IEBACisgKHsJCQkJCQkJCQkgICAgICBcCisgICB1bnNpZ25lZCBpbnQgX190bXA7CQkJCQkJCSAgICAgIFwKKyAgIF9fYXNtIF9fdm9sYXRpbGUgKAkJCQkJCQkgICAgICBcCistCQkgICAgIjE6CWx3YXJ4CSUwLDAsJTEiIE1VVEVYX0hJTlRfQUNRICJcbiIJCSAgICAgIFwKKysJCSAgICAiMToJbHdhcngJJTAsJXkxIiBNVVRFWF9ISU5UX0FDUSAiXG4iCQkgICAgICBcCisgCQkgICAgIglzdWJmLgklMCwlMiwlMFxuIgkJCQkgICAgICBcCisgCQkgICAgIglibmUJMmZcbiIJCQkJCSAgICAgIFwKKy0JCSAgICAiCXN0d2N4LgklMywwLCUxXG4iCQkJCSAgICAgIFwKKysJCSAgICAiCXN0d2N4LgklMywleTFcbiIJCQkJICAgICAgXAorIAkJICAgICIJYm5lLQkxYlxuIgkJCQkJICAgICAgXAorIAkJICAgICIyOgkiIF9fQVJDSF9BQ1FfSU5TVFIJCQkJICAgICAgXAorLQkJICAgIDogIj0mciIgKF9fdG1wKQkJCQkJICAgICAgXAorLQkJICAgIDogImIiIChtZW0pLCAiciIgKG9sZHZhbCksICJyIiAobmV3dmFsKQkJICAgICAgXAorKwkJICAgIDogIj0mciIgKF9fdG1wKSwgIitaIiAoKihtZW0pKQkJCSAgICAgIFwKKysJCSAgICA6ICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkJICAgICAgXAorIAkJICAgIDogImNyMCIsICJtZW1vcnkiKTsJCQkJCSAgICAgIFwKKyAgIF9fdG1wICE9IDA7CQkJCQkJCQkgICAgICBcCisgfSkKK0BAIC02MCwxNCArNjAsMTQgQEAKKyAoewkJCQkJCQkJCSAgICAgIFwKKyAgIHVuc2lnbmVkIGludCBfX3RtcDsJCQkJCQkJICAgICAgXAorICAgX19hc20gX192b2xhdGlsZSAoX19BUkNIX1JFTF9JTlNUUiAiXG4iCQkJCSAgICAgIFwKKy0JCSAgICAiMToJbHdhcngJJTAsMCwlMSIgTVVURVhfSElOVF9SRUwgIlxuIgkJICAgICAgXAorKwkJICAgICIxOglsd2FyeAklMCwleTEiIE1VVEVYX0hJTlRfUkVMICJcbiIJCSAgICAgIFwKKyAJCSAgICAiCXN1YmYuCSUwLCUyLCUwXG4iCQkJCSAgICAgIFwKKyAJCSAgICAiCWJuZQkyZlxuIgkJCQkJICAgICAgXAorLQkJICAgICIJc3R3Y3guCSUzLDAsJTFcbiIJCQkJICAgICAgXAorKwkJICAgICIJc3R3Y3guCSUzLCV5MVxuIgkJCQkgICAgICBcCisgCQkgICAgIglibmUtCTFiXG4iCQkJCQkgICAgICBcCisgCQkgICAgIjI6CSIJCQkJCQkgICAgICBcCistCQkgICAgOiAiPSZyIiAoX190bXApCQkJCQkgICAgICBcCistCQkgICAgOiAiYiIgKG1lbSksICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkgICAgICBcCisrCQkgICAgOiAiPSZyIiAoX190bXApLCAiK1oiICgqKG1lbSkpCQkJICAgICAgXAorKwkJICAgIDogInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCQkgICAgICBcCisgCQkgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkJICAgICAgXAorICAgX190bXAgIT0gMDsJCQkJCQkJCSAgICAgIFwKKyB9KQorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2JpdHMvYXRvbWljLmggZ2xpYmMtMi4xMC4xL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvYml0cy9hdG9taWMuaAorLS0tIGdsaWJjLTIuMTAuMS5vcmlnL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvYml0cy9hdG9taWMuaAkyMDA3LTAzLTI2IDIyOjE2OjAzLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTAuMS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2JpdHMvYXRvbWljLmgJMjAwOS0xMS0xMyAwMDo1MToxOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC00NCwxNCArNDQsMTQgQEAKKyAoewkJCQkJCQkJCSAgICAgIFwKKyAgIHVuc2lnbmVkIGludCBfX3RtcCwgX190bXAyOwkJCQkJCSAgICAgIFwKKyAgIF9fYXNtIF9fdm9sYXRpbGUgKCIgICBjbHJsZGkgICUxLCUxLDMyXG4iCQkJCSAgICAgIFwKKy0JCSAgICAiMToJbHdhcngJJTAsMCwlMiIgTVVURVhfSElOVF9BQ1EgIlxuIgkgCSAgICAgIFwKKysJCSAgICAiMToJbHdhcngJJTAsJXkyIiBNVVRFWF9ISU5UX0FDUSAiXG4iCSAJICAgICAgXAorIAkJICAgICIJc3ViZi4JJTAsJTEsJTBcbiIJCQkJICAgICAgXAorIAkJICAgICIJYm5lCTJmXG4iCQkJCQkgICAgICBcCistCQkgICAgIglzdHdjeC4JJTQsMCwlMlxuIgkJCQkgICAgICBcCisrCQkgICAgIglzdHdjeC4JJTQsJXkyXG4iCQkJCSAgICAgIFwKKyAJCSAgICAiCWJuZS0JMWJcbiIJCQkJCSAgICAgIFwKKyAJCSAgICAiMjoJIiBfX0FSQ0hfQUNRX0lOU1RSCQkJCSAgICAgIFwKKy0JCSAgICA6ICI9JnIiIChfX3RtcCksICI9ciIgKF9fdG1wMikJCQkgICAgICBcCistCQkgICAgOiAiYiIgKG1lbSksICIxIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkgICAgICBcCisrCQkgICAgOiAiPSZyIiAoX190bXApLCAiPXIiIChfX3RtcDIpLCAiK1oiICgqKG1lbSkpCSAgICAgIFwKKysJCSAgICA6ICIxIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkJICAgICAgXAorIAkJICAgIDogImNyMCIsICJtZW1vcnkiKTsJCQkJCSAgICAgIFwKKyAgIF9fdG1wICE9IDA7CQkJCQkJCQkgICAgICBcCisgfSkKK0BAIC02MSwxNCArNjEsMTQgQEAKKyAgIHVuc2lnbmVkIGludCBfX3RtcCwgX190bXAyOwkJCQkJCSAgICAgIFwKKyAgIF9fYXNtIF9fdm9sYXRpbGUgKF9fQVJDSF9SRUxfSU5TVFIgIlxuIgkJCQkgICAgICBcCisgCQkgICAgIiAgIGNscmxkaSAgJTEsJTEsMzJcbiIJCQkJICAgICAgXAorLQkJICAgICIxOglsd2FyeAklMCwwLCUyIiBNVVRFWF9ISU5UX1JFTCAiXG4iCQkgICAgICBcCisrCQkgICAgIjE6CWx3YXJ4CSUwLCV5MiIgTVVURVhfSElOVF9SRUwgIlxuIgkJICAgICAgXAorIAkJICAgICIJc3ViZi4JJTAsJTEsJTBcbiIJCQkJICAgICAgXAorIAkJICAgICIJYm5lCTJmXG4iCQkJCQkgICAgICBcCistCQkgICAgIglzdHdjeC4JJTQsMCwlMlxuIgkJCQkgICAgICBcCisrCQkgICAgIglzdHdjeC4JJTQsJXkyXG4iCQkJCSAgICAgIFwKKyAJCSAgICAiCWJuZS0JMWJcbiIJCQkJCSAgICAgIFwKKyAJCSAgICAiMjoJIgkJCQkJCSAgICAgIFwKKy0JCSAgICA6ICI9JnIiIChfX3RtcCksICI9ciIgKF9fdG1wMikJCQkgICAgICBcCistCQkgICAgOiAiYiIgKG1lbSksICIxIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkgICAgICBcCisrCQkgICAgOiAiPSZyIiAoX190bXApLCAiPXIiIChfX3RtcDIpLCAiK1oiICgqKG1lbSkpCSAgICAgIFwKKysJCSAgICA6ICIxIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkJICAgICAgXAorIAkJICAgIDogImNyMCIsICJtZW1vcnkiKTsJCQkJCSAgICAgIFwKKyAgIF9fdG1wICE9IDA7CQkJCQkJCQkgICAgICBcCisgfSkKK0BAIC04MiwxNCArODIsMTQgQEAKKyAoewkJCQkJCQkJCSAgICAgIFwKKyAgIHVuc2lnbmVkIGxvbmcJX190bXA7CQkJCQkJCSAgICAgIFwKKyAgIF9fYXNtIF9fdm9sYXRpbGUgKAkJCQkJCQkgICAgICBcCistCQkgICAgIjE6CWxkYXJ4CSUwLDAsJTEiIE1VVEVYX0hJTlRfQUNRICJcbiIJCSAgICAgIFwKKysJCSAgICAiMToJbGRhcngJJTAsJXkxIiBNVVRFWF9ISU5UX0FDUSAiXG4iCQkgICAgICBcCisgCQkgICAgIglzdWJmLgklMCwlMiwlMFxuIgkJCQkgICAgICBcCisgCQkgICAgIglibmUJMmZcbiIJCQkJCSAgICAgIFwKKy0JCSAgICAiCXN0ZGN4LgklMywwLCUxXG4iCQkJCSAgICAgIFwKKysJCSAgICAiCXN0ZGN4LgklMywleTFcbiIJCQkJICAgICAgXAorIAkJICAgICIJYm5lLQkxYlxuIgkJCQkJICAgICAgXAorIAkJICAgICIyOgkiIF9fQVJDSF9BQ1FfSU5TVFIJCQkJICAgICAgXAorLQkJICAgIDogIj0mciIgKF9fdG1wKQkJCQkJICAgICAgXAorLQkJICAgIDogImIiIChtZW0pLCAiciIgKG9sZHZhbCksICJyIiAobmV3dmFsKQkJICAgICAgXAorKwkJICAgIDogIj0mciIgKF9fdG1wKSwgIitaIiAoKihtZW0pKQkJCSAgICAgIFwKKysJCSAgICA6ICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkJICAgICAgXAorIAkJICAgIDogImNyMCIsICJtZW1vcnkiKTsJCQkJCSAgICAgIFwKKyAgIF9fdG1wICE9IDA7CQkJCQkJCQkgICAgICBcCisgfSkKK0BAIC05OCwxNCArOTgsMTQgQEAKKyAoewkJCQkJCQkJCSAgICAgIFwKKyAgIHVuc2lnbmVkIGxvbmcJX190bXA7CQkJCQkJCSAgICAgIFwKKyAgIF9fYXNtIF9fdm9sYXRpbGUgKF9fQVJDSF9SRUxfSU5TVFIgIlxuIgkJCQkgICAgICBcCistCQkgICAgIjE6CWxkYXJ4CSUwLDAsJTIiIE1VVEVYX0hJTlRfUkVMICJcbiIJCSAgICAgIFwKKysJCSAgICAiMToJbGRhcngJJTAsJXkxIiBNVVRFWF9ISU5UX1JFTCAiXG4iCQkgICAgICBcCisgCQkgICAgIglzdWJmLgklMCwlMiwlMFxuIgkJCQkgICAgICBcCisgCQkgICAgIglibmUJMmZcbiIJCQkJCSAgICAgIFwKKy0JCSAgICAiCXN0ZGN4LgklMywwLCUxXG4iCQkJCSAgICAgIFwKKysJCSAgICAiCXN0ZGN4LgklMywleTFcbiIJCQkJICAgICAgXAorIAkJICAgICIJYm5lLQkxYlxuIgkJCQkJICAgICAgXAorIAkJICAgICIyOgkiCQkJCQkJICAgICAgXAorLQkJICAgIDogIj0mciIgKF9fdG1wKQkJCQkJICAgICAgXAorLQkJICAgIDogImIiIChtZW0pLCAiciIgKG9sZHZhbCksICJyIiAobmV3dmFsKQkJICAgICAgXAorKwkJICAgIDogIj0mciIgKF9fdG1wKSwgIitaIiAoKihtZW0pKQkJCSAgICAgIFwKKysJCSAgICA6ICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkJICAgICAgXAorIAkJICAgIDogImNyMCIsICJtZW1vcnkiKTsJCQkJCSAgICAgIFwKKyAgIF9fdG1wICE9IDA7CQkJCQkJCQkgICAgICBcCisgfSkKK0BAIC0xMTUsMTQgKzExNSwxNCBAQAorICAgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fdG1wOwkJCQkJCSAgICAgIFwKKyAgICAgICBfX3R5cGVvZiAobWVtKSAgX19tZW1wID0gKG1lbSk7CQkJCQkgICAgICBcCisgICAgICAgX19hc20gX192b2xhdGlsZSAoCQkJCQkJICAgICAgXAorLQkJICAgICAgICAiMToJbGRhcngJJTAsMCwlMSIgTVVURVhfSElOVF9BQ1EgIlxuIgkgICAgICBcCisrCQkgICAgICAgICIxOglsZGFyeAklMCwleTEiIE1VVEVYX0hJTlRfQUNRICJcbiIJICAgICAgXAorIAkJICAgICAgICAiCWNtcGQJJTAsJTJcbiIJCQkgICAgICBcCisgCQkgICAgICAgICIJYm5lCTJmXG4iCQkJCSAgICAgIFwKKy0JCSAgICAgICAgIglzdGRjeC4JJTMsMCwlMVxuIgkJCSAgICAgIFwKKysJCSAgICAgICAgIglzdGRjeC4JJTMsJXkxXG4iCQkJICAgICAgXAorIAkJICAgICAgICAiCWJuZS0JMWJcbiIJCQkJICAgICAgXAorIAkJICAgICAgICAiMjoJIiBfX0FSQ0hfQUNRX0lOU1RSCQkJICAgICAgXAorLQkJICAgICAgICA6ICI9JnIiIChfX3RtcCkJCQkJCSAgICAgIFwKKy0JCSAgICAgICAgOiAiYiIgKF9fbWVtcCksICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCSAgICAgIFwKKysJCSAgICAgICAgOiAiPSZyIiAoX190bXApLCAiK1oiICgqX19tZW1wKQkJCSAgICAgIFwKKysJCSAgICAgICAgOiAiciIgKG9sZHZhbCksICJyIiAobmV3dmFsKQkJCSAgICAgIFwKKyAJCSAgICAgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkgICAgICBcCisgICAgICAgX190bXA7CQkJCQkJCQkgICAgICBcCisgICB9KQorQEAgLTEzMiwxNCArMTMyLDE0IEBACisgICAgICAgX190eXBlb2YgKCoobWVtKSkgX190bXA7CQkJCQkJICAgICAgXAorICAgICAgIF9fdHlwZW9mIChtZW0pICBfX21lbXAgPSAobWVtKTsJCQkJCSAgICAgIFwKKyAgICAgICBfX2FzbSBfX3ZvbGF0aWxlIChfX0FSQ0hfUkVMX0lOU1RSICJcbiIJCQkJICAgICAgXAorLQkJICAgICAgICAiMToJbGRhcngJJTAsMCwlMSIgTVVURVhfSElOVF9SRUwgIlxuIgkgICAgICBcCisrCQkgICAgICAgICIxOglsZGFyeAklMCwleTEiIE1VVEVYX0hJTlRfUkVMICJcbiIJICAgICAgXAorIAkJICAgICAgICAiCWNtcGQJJTAsJTJcbiIJCQkgICAgICBcCisgCQkgICAgICAgICIJYm5lCTJmXG4iCQkJCSAgICAgIFwKKy0JCSAgICAgICAgIglzdGRjeC4JJTMsMCwlMVxuIgkJCSAgICAgIFwKKysJCSAgICAgICAgIglzdGRjeC4JJTMsJXkxXG4iCQkJICAgICAgXAorIAkJICAgICAgICAiCWJuZS0JMWJcbiIJCQkJICAgICAgXAorIAkJICAgICAgICAiMjoJIgkJCQkJICAgICAgXAorLQkJICAgICAgICA6ICI9JnIiIChfX3RtcCkJCQkJCSAgICAgIFwKKy0JCSAgICAgICAgOiAiYiIgKF9fbWVtcCksICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCSAgICAgIFwKKysJCSAgICAgICAgOiAiPSZyIiAoX190bXApLCAiK1oiICgqX19tZW1wKQkJCSAgICAgIFwKKysJCSAgICAgICAgOiAiciIgKG9sZHZhbCksICJyIiAobmV3dmFsKQkJCSAgICAgIFwKKyAJCSAgICAgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkgICAgICBcCisgICAgICAgX190bXA7CQkJCQkJCQkgICAgICBcCisgICB9KQorQEAgLTE0OCwxMiArMTQ4LDEyIEBACisgICAgICh7CQkJCQkJCQkJICAgICAgXAorICAgICAgIF9fdHlwZW9mICgqbWVtKSBfX3ZhbDsJCQkJCQkgICAgICBcCisgICAgICAgX19hc20gX192b2xhdGlsZSAoX19BUkNIX1JFTF9JTlNUUiAiXG4iCQkJCSAgICAgIFwKKy0JCQkiMToJbGRhcngJJTAsMCwlMiIgTVVURVhfSElOVF9BQ1EgIlxuIgkgICAgICBcCistCQkJIglzdGRjeC4JJTMsMCwlMlxuIgkJCSAgICAgIFwKKysJCQkiMToJbGRhcngJJTAsJXkxIiBNVVRFWF9ISU5UX0FDUSAiXG4iCSAgICAgIFwKKysJCQkiCXN0ZGN4LgklMiwleTFcbiIJCQkgICAgICBcCisgCQkJIglibmUtCTFiXG4iCQkJCSAgICAgIFwKKyAJCSAgIiAiIF9fQVJDSF9BQ1FfSU5TVFIJCQkJCSAgICAgIFwKKy0JCQk6ICI9JnIiIChfX3ZhbCksICI9bSIgKCptZW0pCQkJICAgICAgXAorLQkJCTogImIiIChtZW0pLCAiciIgKHZhbHVlKSwgIm0iICgqbWVtKQkJICAgICAgXAorKwkJCTogIj0mciIgKF9fdmFsKSwgIitaIiAoKihtZW0pKQkJCSAgICAgIFwKKysJCQk6ICJyIiAodmFsdWUpCQkJCQkgICAgICBcCisgCQkJOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkgICAgICBcCisgICAgICAgX192YWw7CQkJCQkJCQkgICAgICBcCisgICAgIH0pCitAQCAtMTYyLDExICsxNjIsMTEgQEAKKyAgICAgKHsJCQkJCQkJCQkgICAgICBcCisgICAgICAgX190eXBlb2YgKCptZW0pIF9fdmFsOwkJCQkJCSAgICAgIFwKKyAgICAgICBfX2FzbSBfX3ZvbGF0aWxlIChfX0FSQ0hfUkVMX0lOU1RSICJcbiIJCQkJICAgICAgXAorLQkJCSIxOglsZGFyeAklMCwwLCUyIiBNVVRFWF9ISU5UX1JFTCAiXG4iCSAgICAgIFwKKy0JCQkiCXN0ZGN4LgklMywwLCUyXG4iCQkJICAgICAgXAorKwkJCSIxOglsZGFyeAklMCwleTEiIE1VVEVYX0hJTlRfUkVMICJcbiIJICAgICAgXAorKwkJCSIJc3RkY3guCSUyLCV5MVxuIgkJCSAgICAgIFwKKyAJCQkiCWJuZS0JMWIiCQkJCSAgICAgIFwKKy0JCQk6ICI9JnIiIChfX3ZhbCksICI9bSIgKCptZW0pCQkJICAgICAgXAorLQkJCTogImIiIChtZW0pLCAiciIgKHZhbHVlKSwgIm0iICgqbWVtKQkJICAgICAgXAorKwkJCTogIj0mciIgKF9fdmFsKSwgIitaIiAoKihtZW0pKQkJCSAgICAgIFwKKysJCQk6ICJyIiAodmFsdWUpCQkJCQkgICAgICBcCisgCQkJOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkgICAgICBcCisgICAgICAgX192YWw7CQkJCQkJCQkgICAgICBcCisgICAgIH0pCitAQCAtMTc0LDEyICsxNzQsMTIgQEAKKyAjZGVmaW5lIF9fYXJjaF9hdG9taWNfZXhjaGFuZ2VfYW5kX2FkZF82NChtZW0sIHZhbHVlKSBcCisgICAgICh7CQkJCQkJCQkJICAgICAgXAorICAgICAgIF9fdHlwZW9mICgqbWVtKSBfX3ZhbCwgX190bXA7CQkJCQkgICAgICBcCistICAgICAgX19hc20gX192b2xhdGlsZSAoIjE6CWxkYXJ4CSUwLDAsJTNcbiIJCQkgICAgICBcCistCQkJIglhZGQJJTEsJTAsJTRcbiIJCQkgICAgICBcCistCQkJIglzdGRjeC4JJTEsMCwlM1xuIgkJCSAgICAgIFwKKysgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbGRhcngJJTAsJXkyXG4iCQkJICAgICAgXAorKwkJCSIJYWRkCSUxLCUwLCUzXG4iCQkJICAgICAgXAorKwkJCSIJc3RkY3guCSUxLCV5MlxuIgkJCSAgICAgIFwKKyAJCQkiCWJuZS0JMWIiCQkJCSAgICAgIFwKKy0JCQk6ICI9JmIiIChfX3ZhbCksICI9JnIiIChfX3RtcCksICI9bSIgKCptZW0pCSAgICAgIFwKKy0JCQk6ICJiIiAobWVtKSwgInIiICh2YWx1ZSksICJtIiAoKm1lbSkJCSAgICAgIFwKKysJCQk6ICI9JmIiIChfX3ZhbCksICI9JnIiIChfX3RtcCksICIrWiIgKCoobWVtKSkJICAgICAgXAorKwkJCTogInIiICh2YWx1ZSkJCQkJCSAgICAgIFwKKyAJCQk6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgICBfX3ZhbDsJCQkJCQkJCSAgICAgIFwKKyAgICAgfSkKK0BAIC0xODcsMTIgKzE4NywxMiBAQAorICNkZWZpbmUgX19hcmNoX2F0b21pY19pbmNyZW1lbnRfdmFsXzY0KG1lbSkgXAorICAgICAoewkJCQkJCQkJCSAgICAgIFwKKyAgICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX3ZhbDsJCQkJCQkgICAgICBcCistICAgICAgX19hc20gX192b2xhdGlsZSAoIjE6CWxkYXJ4CSUwLDAsJTJcbiIJCQkgICAgICBcCisrICAgICAgX19hc20gX192b2xhdGlsZSAoIjE6CWxkYXJ4CSUwLCV5MVxuIgkJCSAgICAgIFwKKyAJCQkiCWFkZGkJJTAsJTAsMVxuIgkJCSAgICAgIFwKKy0JCQkiCXN0ZGN4LgklMCwwLCUyXG4iCQkJICAgICAgXAorKwkJCSIJc3RkY3guCSUwLCV5MVxuIgkJCSAgICAgIFwKKyAJCQkiCWJuZS0JMWIiCQkJCSAgICAgIFwKKy0JCQk6ICI9JmIiIChfX3ZhbCksICI9bSIgKCptZW0pCQkJICAgICAgXAorLQkJCTogImIiIChtZW0pLCAibSIgKCptZW0pCQkJCSAgICAgIFwKKysJCQk6ICI9JmIiIChfX3ZhbCksICIrWiIgKCoobWVtKSkJCQkgICAgICBcCisrCQkJOgkJCQkJCSAgICAgIFwKKyAJCQk6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgICBfX3ZhbDsJCQkJCQkJCSAgICAgIFwKKyAgICAgfSkKK0BAIC0yMDAsMjcgKzIwMCwyNyBAQAorICNkZWZpbmUgX19hcmNoX2F0b21pY19kZWNyZW1lbnRfdmFsXzY0KG1lbSkgXAorICAgICAoewkJCQkJCQkJCSAgICAgIFwKKyAgICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX3ZhbDsJCQkJCQkgICAgICBcCistICAgICAgX19hc20gX192b2xhdGlsZSAoIjE6CWxkYXJ4CSUwLDAsJTJcbiIJCQkgICAgICBcCisrICAgICAgX19hc20gX192b2xhdGlsZSAoIjE6CWxkYXJ4CSUwLCV5MVxuIgkJCSAgICAgIFwKKyAJCQkiCXN1YmkJJTAsJTAsMVxuIgkJCSAgICAgIFwKKy0JCQkiCXN0ZGN4LgklMCwwLCUyXG4iCQkJICAgICAgXAorKwkJCSIJc3RkY3guCSUwLCV5MVxuIgkJCSAgICAgIFwKKyAJCQkiCWJuZS0JMWIiCQkJCSAgICAgIFwKKy0JCQk6ICI9JmIiIChfX3ZhbCksICI9bSIgKCptZW0pCQkJICAgICAgXAorLQkJCTogImIiIChtZW0pLCAibSIgKCptZW0pCQkJCSAgICAgIFwKKysJCQk6ICI9JmIiIChfX3ZhbCksICIrWiIgKCoobWVtKSkJCQkgICAgICBcCisrCQkJOgkJCQkJCSAgICAgIFwKKyAJCQk6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgICBfX3ZhbDsJCQkJCQkJCSAgICAgIFwKKyAgICAgfSkKKyAKKyAjZGVmaW5lIF9fYXJjaF9hdG9taWNfZGVjcmVtZW50X2lmX3Bvc2l0aXZlXzY0KG1lbSkgXAorICAgKHsgaW50IF9fdmFsLCBfX3RtcDsJCQkJCQkJICAgICAgXAorLSAgICAgX19hc20gX192b2xhdGlsZSAoIjE6CWxkYXJ4CSUwLDAsJTNcbiIJCQkgICAgICBcCisrICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbGRhcngJJTAsJXkyXG4iCQkJICAgICAgXAorIAkJICAgICAgICIJY21wZGkJMCwlMCwwXG4iCQkJICAgICAgXAorIAkJICAgICAgICIJYWRkaQklMSwlMCwtMVxuIgkJCSAgICAgIFwKKyAJCSAgICAgICAiCWJsZQkyZlxuIgkJCQkgICAgICBcCistCQkgICAgICAgIglzdGRjeC4JJTEsMCwlM1xuIgkJCSAgICAgIFwKKysJCSAgICAgICAiCXN0ZGN4LgklMSwleTJcbiIJCQkgICAgICBcCisgCQkgICAgICAgIglibmUtCTFiXG4iCQkJCSAgICAgIFwKKyAJCSAgICAgICAiMjoJIiBfX0FSQ0hfQUNRX0lOU1RSCQkJICAgICAgXAorLQkJICAgICAgIDogIj0mYiIgKF9fdmFsKSwgIj0mciIgKF9fdG1wKSwgIj1tIiAoKm1lbSkJICAgICAgXAorLQkJICAgICAgIDogImIiIChtZW0pLCAibSIgKCptZW0pCQkJCSAgICAgIFwKKysJCSAgICAgICA6ICI9JmIiIChfX3ZhbCksICI9JnIiIChfX3RtcCksICIrWiIgKCoobWVtKSkJICAgICAgXAorKwkJICAgICAgIDoJCQkJCQkgICAgICBcCisgCQkgICAgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkgICAgICBcCisgICAgICBfX3ZhbDsJCQkJCQkJCSAgICAgIFwKKyAgIH0pCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzU3MC1hcm0tY2lycnVzLWVwOTN4eC1tYXZlcmljay1jcnVuY2gtZnB1LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS81NzAtYXJtLWNpcnJ1cy1lcDkzeHgtbWF2ZXJpY2stY3J1bmNoLWZwdS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzdjYjhjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS81NzAtYXJtLWNpcnJ1cy1lcDkzeHgtbWF2ZXJpY2stY3J1bmNoLWZwdS5wYXRjaApAQCAtMCwwICsxLDM3NCBAQAoraHR0cDovL3lhbm4ucG91cGV0LmZyZWUuZnIvZXA5M3h4LworQWRkIHN1cHBvcnQgZm9yIHRoZSBNYXZlcmljayBDcnVuY2ggRlBVIG9uIENpcnJ1cyBFUDkzWFggcHJvY2Vzc29yIHNlcmllcworCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FybS9iaXRzL2VuZGlhbi5oIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hcm0vYml0cy9lbmRpYW4uaAorLS0tIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FybS9iaXRzL2VuZGlhbi5oCTIwMDktMDUtMTYgMTA6MzY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FybS9iaXRzL2VuZGlhbi5oCTIwMDktMTEtMTMgMDA6NTE6MjIuMDAwMDAwMDAwICswMTAwCitAQCAtMTIsNyArMTIsNyBAQAorIC8qIEZQQSBmbG9hdGluZyBwb2ludCB1bml0cyBhcmUgYWx3YXlzIGJpZy1lbmRpYW4sIGlycmVzcGVjdGl2ZSBvZiB0aGUKKyAgICBDUFUgZW5kaWFubmVzcy4gIFZGUCBmbG9hdGluZyBwb2ludCB1bml0cyB1c2UgdGhlIHNhbWUgZW5kaWFubmVzcworICAgIGFzIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uICAqLworLSNpZmRlZiBfX1ZGUF9GUF9fCisrI2lmIGRlZmluZWQgX19WRlBfRlBfXyB8fCBkZWZpbmVkIF9fTUFWRVJJQ0tfXworICNkZWZpbmUgX19GTE9BVF9XT1JEX09SREVSIF9fQllURV9PUkRFUgorICNlbHNlCisgI2RlZmluZSBfX0ZMT0FUX1dPUkRfT1JERVIgX19CSUdfRU5ESUFOCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FybS9mcHUvX19sb25nam1wLlMgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FybS9mcHUvX19sb25nam1wLlMKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hcm0vZnB1L19fbG9uZ2ptcC5TCTIwMDktMDUtMTYgMTA6MzY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FybS9mcHUvX19sb25nam1wLlMJMjAwOS0xMS0xMyAwMDo1MToyMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zMCw3ICszMCwzMyBAQAorIAltb3ZzCXIwLCByMQkJLyogZ2V0IHRoZSByZXR1cm4gdmFsdWUgaW4gcGxhY2UgKi8KKyAJbW92ZXEJcjAsICMxCQkvKiBjYW4ndCBsZXQgc2V0am1wKCkgcmV0dXJuIHplcm8hICovCisgCisrI2lmZGVmIF9fTUFWRVJJQ0tfXworKwljZmxkcmQJbXZkNCwgIFtpcF0sICM4CisrCW5vcAorKwljZmxkcmQJbXZkNSwgIFtpcF0sICM4CisrCW5vcAorKwljZmxkcmQJbXZkNiwgIFtpcF0sICM4CisrCW5vcAorKwljZmxkcmQJbXZkNywgIFtpcF0sICM4CisrCW5vcAorKwljZmxkcmQJbXZkOCwgIFtpcF0sICM4CisrCW5vcAorKwljZmxkcmQJbXZkOSwgIFtpcF0sICM4CisrCW5vcAorKwljZmxkcmQJbXZkMTAsIFtpcF0sICM4CisrCW5vcAorKwljZmxkcmQJbXZkMTEsIFtpcF0sICM4CisrCW5vcAorKwljZmxkcmQJbXZkMTIsIFtpcF0sICM4CisrCW5vcAorKwljZmxkcmQJbXZkMTMsIFtpcF0sICM4CisrCW5vcAorKwljZmxkcmQJbXZkMTQsIFtpcF0sICM4CisrCW5vcAorKwljZmxkcmQJbXZkMTUsIFtpcF0sICM4CisrI2Vsc2UKKyAJbGZtZmQJZjQsIDQsIFtpcF0gIQkvKiBsb2FkIHRoZSBmbG9hdGluZyBwb2ludCByZWdzICovCisrI2VuZGlmCisgCisgCUxPQURSRUdTKGlhLCBpcCwge3YxLXY2LCBzbCwgZnAsIHNwLCBwY30pCisgRU5EIChfX2xvbmdqbXApCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FybS9mcHUvYml0cy9mZW52LmggZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FybS9mcHUvYml0cy9mZW52LmgKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hcm0vZnB1L2JpdHMvZmVudi5oCTIwMDktMDUtMTYgMTA6MzY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FybS9mcHUvYml0cy9mZW52LmgJMjAwOS0xMS0xMyAwMDo1MToyMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMCw2ICsyMCw0NSBAQAorICMgZXJyb3IgIk5ldmVyIHVzZSA8Yml0cy9mZW52Lmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxmZW52Lmg+IGluc3RlYWQuIgorICNlbmRpZgorIAorKyNpZiBkZWZpbmVkKF9fTUFWRVJJQ0tfXykKKysKKysvKiBEZWZpbmUgYml0cyByZXByZXNlbnRpbmcgZXhjZXB0aW9ucyBpbiB0aGUgRlBVIHN0YXR1cyB3b3JkLiAgKi8KKytlbnVtCisrICB7CisrICAgIEZFX0lOVkFMSUQgPSAxLAorKyNkZWZpbmUgRkVfSU5WQUxJRCBGRV9JTlZBTElECisrICAgIEZFX09WRVJGTE9XID0gNCwKKysjZGVmaW5lIEZFX09WRVJGTE9XIEZFX09WRVJGTE9XCisrICAgIEZFX1VOREVSRkxPVyA9IDgsCisrI2RlZmluZSBGRV9VTkRFUkZMT1cgRkVfVU5ERVJGTE9XCisrICAgIEZFX0lORVhBQ1QgPSAxNiwKKysjZGVmaW5lIEZFX0lORVhBQ1QgRkVfSU5FWEFDVAorKyAgfTsKKysKKysvKiBBbW91bnQgdG8gc2hpZnQgYnkgdG8gY29udmVydCBhbiBleGNlcHRpb24gdG8gYSBtYXNrIGJpdC4gICovCisrI2RlZmluZSBGRV9FWENFUFRfU0hJRlQJNQorKworKy8qIEFsbCBzdXBwb3J0ZWQgZXhjZXB0aW9ucy4gICovCisrI2RlZmluZSBGRV9BTExfRVhDRVBUCVwKKysJKEZFX0lOVkFMSUQgfCBGRV9PVkVSRkxPVyB8IEZFX1VOREVSRkxPVyB8IEZFX0lORVhBQ1QpCisrCisrLyogSUVFRSByb3VuZGluZyBtb2Rlcy4gICovCisrZW51bQorKyAgeworKyAgICBGRV9UT05FQVJFU1QgPSAwLAorKyNkZWZpbmUgRkVfVE9ORUFSRVNUICAgIEZFX1RPTkVBUkVTVAorKyAgICBGRV9UT1dBUkRaRVJPID0gMHg0MDAsCisrI2RlZmluZSBGRV9UT1dBUkRaRVJPICAgRkVfVE9XQVJEWkVSTworKyAgICBGRV9ET1dOV0FSRCA9IDB4ODAwLAorKyNkZWZpbmUgRkVfRE9XTldBUkQgICAgIEZFX0RPV05XQVJECisrICAgIEZFX1VQV0FSRCA9IDB4YzAwLAorKyNkZWZpbmUgRkVfVVBXQVJEICAgICAgIEZFX1VQV0FSRAorKyAgfTsKKysKKysjZGVmaW5lIEZFX1JPVU5EX01BU0sgKEZFX1VQV0FSRCkKKysKKysjZWxzZSAvKiBGUEEgKi8KKysKKyAvKiBEZWZpbmUgYml0cyByZXByZXNlbnRpbmcgZXhjZXB0aW9ucyBpbiB0aGUgRlBVIHN0YXR1cyB3b3JkLiAgKi8KKyBlbnVtCisgICB7CitAQCAtNDQsNiArODMsOCBAQAorICAgIG1vZGVzIGV4aXN0LCBidXQgeW91IGhhdmUgdG8gZW5jb2RlIHRoZW0gaW4gdGhlIGFjdHVhbCBpbnN0cnVjdGlvbi4gICovCisgI2RlZmluZSBGRV9UT05FQVJFU1QJMAorIAorKyNlbmRpZgorKworIC8qIFR5cGUgcmVwcmVzZW50aW5nIGV4Y2VwdGlvbiBmbGFncy4gKi8KKyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IGZleGNlcHRfdDsKKyAKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYXJtL2ZwdS9iaXRzL3NldGptcC5oIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hcm0vZnB1L2JpdHMvc2V0am1wLmgKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hcm0vZnB1L2JpdHMvc2V0am1wLmgJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYXJtL2ZwdS9iaXRzL3NldGptcC5oCTIwMDktMTEtMTMgMDA6NTE6MjIuMDAwMDAwMDAwICswMTAwCitAQCAtMjgsNyArMjgsMTEgQEAKKyAjaWZuZGVmIF9BU00KKyAvKiBKdW1wIGJ1ZmZlciBjb250YWlucyB2MS12Niwgc2wsIGZwLCBzcCBhbmQgcGMuICBPdGhlciByZWdpc3RlcnMgYXJlIG5vdAorICAgIHNhdmVkLiAgKi8KKysjaWZkZWYgX19NQVZFUklDS19fCisrdHlwZWRlZiBpbnQgX19qbXBfYnVmWzM0XTsKKysjZWxzZQorIHR5cGVkZWYgaW50IF9fam1wX2J1ZlsyMl07CisgI2VuZGlmCisrI2VuZGlmCisgCisgI2VuZGlmCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FybS9mcHUvZmVnZXRyb3VuZC5jIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hcm0vZnB1L2ZlZ2V0cm91bmQuYworLS0tIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FybS9mcHUvZmVnZXRyb3VuZC5jCTIwMDktMDUtMTYgMTA6MzY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FybS9mcHUvZmVnZXRyb3VuZC5jCTIwMDktMTEtMTMgMDA6NTE6MjIuMDAwMDAwMDAwICswMTAwCitAQCAtMTgsOSArMTgsMjEgQEAKKyAgICAwMjExMS0xMzA3IFVTQS4gICovCisgCisgI2luY2x1ZGUgPGZlbnYuaD4KKysjaW5jbHVkZSA8ZnB1X2NvbnRyb2wuaD4KKyAKKyBpbnQKKyBmZWdldHJvdW5kICh2b2lkKQorIHsKKysjaWYgZGVmaW5lZChfX01BVkVSSUNLX18pCisrCisrICB1bnNpZ25lZCBsb25nIHRlbXA7CisrCisrICBfRlBVX0dFVENXICh0ZW1wKTsKKysgIHJldHVybiB0ZW1wICYgRkVfUk9VTkRfTUFTSzsKKysKKysjZWxzZSAvKiBGUEEgKi8KKysKKyAgIHJldHVybiBGRV9UT05FQVJFU1Q7CQkvKiBFYXN5LiA6LSkgKi8KKysKKysjZW5kaWYKKyB9CitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FybS9mcHUvZmVzZXRyb3VuZC5jIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hcm0vZnB1L2Zlc2V0cm91bmQuYworLS0tIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FybS9mcHUvZmVzZXRyb3VuZC5jCTIwMDktMDUtMTYgMTA6MzY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FybS9mcHUvZmVzZXRyb3VuZC5jCTIwMDktMTEtMTMgMDA6NTE6MjIuMDAwMDAwMDAwICswMTAwCitAQCAtMTgsMTIgKzE4LDI4IEBACisgICAgMDIxMTEtMTMwNyBVU0EuICAqLworIAorICNpbmNsdWRlIDxmZW52Lmg+CisrI2luY2x1ZGUgPGZwdV9jb250cm9sLmg+CisgCisgaW50CisgZmVzZXRyb3VuZCAoaW50IHJvdW5kKQorIHsKKysjaWYgZGVmaW5lZChfX01BVkVSSUNLX18pCisrICB1bnNpZ25lZCBsb25nIHRlbXA7CisrCisrICBpZiAocm91bmQgJiB+RkVfUk9VTkRfTUFTSykKKysgICAgcmV0dXJuIDE7CisrCisrICBfRlBVX0dFVENXICh0ZW1wKTsKKysgIHRlbXAgPSAodGVtcCAmIH5GRV9ST1VORF9NQVNLKSB8IHJvdW5kOworKyAgX0ZQVV9TRVRDVyAodGVtcCk7CisrICByZXR1cm4gMDsKKysKKysjZWxzZSAvKiBGUEEgKi8KKysKKyAgIC8qIFdlIG9ubHkgc3VwcG9ydCBGRV9UT05FQVJFU1QsIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGFueSB3b3JrLiAgKi8KKyAgIHJldHVybiAocm91bmQgPT0gRkVfVE9ORUFSRVNUKT8wOjE7CisrCisrI2VuZGlmCisgfQorIAorIGxpYm1faGlkZGVuX2RlZiAoZmVzZXRyb3VuZCkKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYXJtL2ZwdS9mcHVfY29udHJvbC5oIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hcm0vZnB1L2ZwdV9jb250cm9sLmgKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hcm0vZnB1L2ZwdV9jb250cm9sLmgJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYXJtL2ZwdS9mcHVfY29udHJvbC5oCTIwMDktMTEtMTMgMDA6NTE6MjIuMDAwMDAwMDAwICswMTAwCitAQCAtMSw1ICsxLDYgQEAKKyAvKiBGUFUgY29udHJvbCB3b3JkIGRlZmluaXRpb25zLiAgQVJNIHZlcnNpb24uCistICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMjAwMCwgMjAwNQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorIAorICAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorQEAgLTIwLDYgKzIxLDc5IEBACisgI2lmbmRlZiBfRlBVX0NPTlRST0xfSAorICNkZWZpbmUgX0ZQVV9DT05UUk9MX0gKKyAKKysjaWYgZGVmaW5lZChfX01BVkVSSUNLX18pCisrCisrLyogRFNQU0MgcmVnaXN0ZXI6IChmcm9tIEVQOTMxMiBVc2VyJ3MgR3VpZGUpCisrICoKKysgKiBiaXRzIDMxLi4yOQktIERBSUQKKysgKiBiaXRzIDI4Li4yNgktIEhWSUQKKysgKiBiaXRzIDI1Li4yNAktIFJTVkQKKysgKiBiaXQgIDIzCS0gSVNBVAorKyAqIGJpdCAgMjIJLSBVSQorKyAqIGJpdCAgMjEJLSBJTlQKKysgKiBiaXQgIDIwCS0gQUVYQworKyAqIGJpdHMgMTkuLjE4CS0gU0FUCisrICogYml0cyAxNy4uMTYJLSBGQ0MKKysgKiBiaXQgIDE1CS0gVgorKyAqIGJpdCAgMTQJLSBGV0RFTgorKyAqIGJpdCAgMTMJLSBJbnZhbGlkCisrICogYml0CTEyCS0gRGVub3JtCisrICogYml0cyAxMS4uMTAJLSBSTQorKyAqIGJpdHMgOS4uNQktIElYRSwgVUZFLCBPRkUsIFJTVkQsIElPRQorKyAqIGJpdHMgNC4uMAktIElYLCBVRiwgT0YsIFJTVkQsIElPCisrICovCisrCisrLyogbWFza2luZyBvZiBpbnRlcnJ1cHRzICovCisrI2RlZmluZSBfRlBVX01BU0tfSU0JKDEgPDwgNSkJLyogaW52YWxpZCBvcGVyYXRpb24gKi8KKysjZGVmaW5lIF9GUFVfTUFTS19aTQkwCQkvKiBkaXZpZGUgYnkgemVybyAqLworKyNkZWZpbmUgX0ZQVV9NQVNLX09NCSgxIDw8IDcpCS8qIG92ZXJmbG93ICovCisrI2RlZmluZSBfRlBVX01BU0tfVU0JKDEgPDwgOCkJLyogdW5kZXJmbG93ICovCisrI2RlZmluZSBfRlBVX01BU0tfUE0JKDEgPDwgOSkJLyogaW5leGFjdCAqLworKyNkZWZpbmUgX0ZQVV9NQVNLX0RNCTAJCS8qIGRlbm9ybWFsaXplZCBvcGVyYXRpb24gKi8KKysKKysjZGVmaW5lIF9GUFVfUkVTRVJWRUQJMHhmZmZmZjAwMAkvKiBUaGVzZSBiaXRzIGFyZSByZXNlcnZlZC4gICovCisrCisrI2RlZmluZSBfRlBVX0RFRkFVTFQJMHgwMGIwMDAwMAkvKiBEZWZhdWx0IHZhbHVlLiAgKi8KKysjZGVmaW5lIF9GUFVfSUVFRQkweDAwYjAwM2EwCS8qIERlZmF1bHQgKyBleGNlcHRpb25zIGVuYWJsZWQuICovCisrCisrLyogVHlwZSBvZiB0aGUgY29udHJvbCB3b3JkLiAgKi8KKyt0eXBlZGVmIHVuc2lnbmVkIGludCBmcHVfY29udHJvbF90OworKworKy8qIE1hY3JvcyBmb3IgYWNjZXNzaW5nIHRoZSBoYXJkd2FyZSBjb250cm9sIHdvcmQuICAqLworKyNkZWZpbmUgX0ZQVV9HRVRDVyhjdykgKHsJCQlcCisrCXJlZ2lzdGVyIGludCBfX3QxLCBfX3QyOwkJXAorKwkJCQkJCVwKKysJX19hc21fXyB2b2xhdGlsZSAoCQkJXAorKwkiY2ZtdnI2NGwJJTEsIG12ZHgwXG5cdCIJCVwKKysJImNmbXZyNjRoCSUyLCBtdmR4MFxuXHQiCQlcCisrCSJjZm12MzJzYwltdmR4MCwgZHNwc2Ncblx0IglcCisrCSJjZm12cjY0bAklMCwgbXZkeDBcblx0IgkJXAorKwkiY2ZtdjY0bHIJbXZkeDAsICUxXG5cdCIJCVwKKysJImNmbXY2NGhyCW12ZHgwLCAlMiIJCVwKKysJOiAiPXIiIChjdyksICI9ciIgKF9fdDEpLCAiPXIiIChfX3QyKQlcCisrCSk7CQkJCQlcCisrfSkKKysKKysjZGVmaW5lIF9GUFVfU0VUQ1coY3cpICh7CQkJXAorKwlyZWdpc3RlciBpbnQgX190MCwgX190MSwgX190MjsJCVwKKysJCQkJCQlcCisrCV9fYXNtX18gdm9sYXRpbGUgKAkJCVwKKysJImNmbXZyNjRsCSUxLCBtdmR4MFxuXHQiCQlcCisrCSJjZm12cjY0aAklMiwgbXZkeDBcblx0IgkJXAorKwkiY2ZtdjY0bHIJbXZkeDAsICUwXG5cdCIJCVwKKysJImNmbXZzYzMyCWRzcHNjLCBtdmR4MFxuXHQiCVwKKysJImNmbXY2NGxyCW12ZHgwLCAlMVxuXHQiCQlcCisrCSJjZm12NjRocgltdmR4MCwgJTIiCQlcCisrCTogIj1yIiAoX190MCksICI9ciIgKF9fdDEpLCAiPXIiIChfX3QyKQlcCisrCTogIjAiIChjdykJCQkJXAorKwkpOwkJCQkJXAorK30pCisrCisrLyogRGVmYXVsdCBjb250cm9sIHdvcmQgc2V0IGF0IHN0YXJ0dXAuICAqLworK2V4dGVybiBmcHVfY29udHJvbF90IF9fZnB1X2NvbnRyb2w7CisrCisrI2Vsc2UgLyogRlBBICovCisrCisgLyogV2UgaGF2ZSBhIHNsaWdodCB0ZXJtaW5vbG9neSBjb25mdXNpb24gaGVyZS4gIE9uIHRoZSBBUk0sIHRoZSByZWdpc3RlcgorICAqIHdlJ3JlIGludGVyZXN0ZWQgaW4gaXMgYWN0dWFsbHkgdGhlIEZQVSBzdGF0dXMgd29yZCAtIHRoZSBGUFUgY29udHJvbAorICAqIHdvcmQgaXMgc29tZXRoaW5nIGRpZmZlcmVudCAod2hpY2ggaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZCBhbmQgb25seQorQEAgLTk5LDQgKzE3Myw2IEBACisgLyogRGVmYXVsdCBjb250cm9sIHdvcmQgc2V0IGF0IHN0YXJ0dXAuICAqLworIGV4dGVybiBmcHVfY29udHJvbF90IF9fZnB1X2NvbnRyb2w7CisgCisrI2VuZGlmCisrCisgI2VuZGlmIC8qIF9GUFVfQ09OVFJPTF9IICovCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FybS9mcHUvam1wYnVmLW9mZnNldHMuaCBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYXJtL2ZwdS9qbXBidWYtb2Zmc2V0cy5oCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYXJtL2ZwdS9qbXBidWYtb2Zmc2V0cy5oCTIwMDktMDUtMTYgMTA6MzY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FybS9mcHUvam1wYnVmLW9mZnNldHMuaAkyMDA5LTExLTEzIDAwOjUxOjIyLjAwMDAwMDAwMCArMDEwMAorQEAgLTE3LDQgKzE3LDggQEAKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKyAKKysjaWZkZWYgX19NQVZFUklDS19fCisrI2RlZmluZSBfX0pNUF9CVUZfU1AJCTMyCisrI2Vsc2UKKyAjZGVmaW5lIF9fSk1QX0JVRl9TUAkJMjAKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYXJtL2ZwdS9zZXRqbXAuUyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYXJtL2ZwdS9zZXRqbXAuUworLS0tIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FybS9mcHUvc2V0am1wLlMJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYXJtL2ZwdS9zZXRqbXAuUwkyMDA5LTExLTEzIDAwOjUxOjIyLjAwMDAwMDAwMCArMDEwMAorQEAgLTI0LDExICsyNCw0MSBAQAorIAorIEVOVFJZIChfX3NpZ3NldGptcCkKKyAJLyogU2F2ZSByZWdpc3RlcnMgKi8KKysjaWZkZWYgX19NQVZFUklDS19fCisrCWNmc3RyZAltdmQ0LCAgW3IwXSwgIzgKKysJbm9wCisrCWNmc3RyZAltdmQ1LCAgW3IwXSwgIzgKKysJbm9wCisrCWNmc3RyZAltdmQ2LCAgW3IwXSwgIzgKKysJbm9wCisrCWNmc3RyZAltdmQ3LCAgW3IwXSwgIzgKKysJbm9wCisrCWNmc3RyZAltdmQ4LCAgW3IwXSwgIzgKKysJbm9wCisrCWNmc3RyZAltdmQ5LCAgW3IwXSwgIzgKKysJbm9wCisrCWNmc3RyZAltdmQxMCwgW3IwXSwgIzgKKysJbm9wCisrCWNmc3RyZAltdmQxMSwgW3IwXSwgIzgKKysJbm9wCisrCWNmc3RyZAltdmQxMiwgW3IwXSwgIzgKKysJbm9wCisrCWNmc3RyZAltdmQxMywgW3IwXSwgIzgKKysJbm9wCisrCWNmc3RyZAltdmQxNCwgW3IwXSwgIzgKKysJbm9wCisrCWNmc3RyZAltdmQxNSwgW3IwXSwgIzgKKysjZWxzZQorIAlzZm1lYQlmNCwgNCwgW3IwXSEKKysjZW5kaWYKKyAJc3RtaWEJcjAsIHt2MS12Niwgc2wsIGZwLCBzcCwgbHJ9CisgCisgCS8qIFJlc3RvcmUgcG9pbnRlciB0byBqbXBfYnVmICovCisrI2lmZGVmIF9fTUFWRVJJQ0tfXworKwlzdWIJcjAsIHIwLCAjOTYKKysjZWxzZQorIAlzdWIJcjAsIHIwLCAjNDgKKysjZW5kaWYKKyAKKyAJLyogTWFrZSBhIHRhaWwgY2FsbCB0byBfX3NpZ2ptcF9zYXZlOyBpdCB0YWtlcyB0aGUgc2FtZSBhcmdzLiAgKi8KKyAJQglQTFRKTVAoQ19TWU1CT0xfTkFNRShfX3NpZ2ptcF9zYXZlKSkKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYXJtL2djY2ZyYW1lLmggZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FybS9nY2NmcmFtZS5oCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYXJtL2djY2ZyYW1lLmgJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvYXJtL2djY2ZyYW1lLmgJMjAwOS0xMS0xMyAwMDo1MToyMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNyw2ICsxNywxMCBAQAorICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAgMDIxMTEtMTMwNyBVU0EuICAqLworIAorKyNpZmRlZiBfX01BVkVSSUNLX18KKysjZGVmaW5lIEZJUlNUX1BTRVVET19SRUdJU1RFUiA0MworKyNlbHNlCisgI2RlZmluZSBGSVJTVF9QU0VVRE9fUkVHSVNURVIgMjcKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3lzZGVwcy9nZW5lcmljL2djY2ZyYW1lLmg+CitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FybS9nbXAtbXBhcmFtLmggZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FybS9nbXAtbXBhcmFtLmgKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9hcm0vZ21wLW1wYXJhbS5oCTIwMDktMDUtMTYgMTA6MzY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL2FybS9nbXAtbXBhcmFtLmgJMjAwOS0xMS0xMyAwMDo1MToyMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yOSw3ICsyOSw3IEBACisgI2lmIGRlZmluZWQoX19BUk1FQl9fKQorICMgZGVmaW5lIElFRUVfRE9VQkxFX01JWEVEX0VORElBTiAwCisgIyBkZWZpbmUgSUVFRV9ET1VCTEVfQklHX0VORElBTiAxCistI2VsaWYgZGVmaW5lZChfX1ZGUF9GUF9fKQorKyNlbGlmIGRlZmluZWQoX19WRlBfRlBfXykgfHwgZGVmaW5lZChfX01BVkVSSUNLX18pCisgIyBkZWZpbmUgSUVFRV9ET1VCTEVfTUlYRURfRU5ESUFOIDAKKyAjIGRlZmluZSBJRUVFX0RPVUJMRV9CSUdfRU5ESUFOIDAKKyAjZWxzZQorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3J0cy9zeXNkZXBzL2FybS9iaXRzL2VuZGlhbi5oIGdsaWJjLTIuMTAuMS9wb3J0cy9zeXNkZXBzL2FybS9iaXRzL2VuZGlhbi5oCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3BvcnRzL3N5c2RlcHMvYXJtL2ZwdS9fX2xvbmdqbXAuUyBnbGliYy0yLjEwLjEvcG9ydHMvc3lzZGVwcy9hcm0vZnB1L19fbG9uZ2ptcC5TCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3BvcnRzL3N5c2RlcHMvYXJtL2ZwdS9iaXRzL2ZlbnYuaCBnbGliYy0yLjEwLjEvcG9ydHMvc3lzZGVwcy9hcm0vZnB1L2JpdHMvZmVudi5oCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3BvcnRzL3N5c2RlcHMvYXJtL2ZwdS9iaXRzL3NldGptcC5oIGdsaWJjLTIuMTAuMS9wb3J0cy9zeXNkZXBzL2FybS9mcHUvYml0cy9zZXRqbXAuaAorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3J0cy9zeXNkZXBzL2FybS9mcHUvZmVnZXRyb3VuZC5jIGdsaWJjLTIuMTAuMS9wb3J0cy9zeXNkZXBzL2FybS9mcHUvZmVnZXRyb3VuZC5jCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3BvcnRzL3N5c2RlcHMvYXJtL2ZwdS9mZXNldHJvdW5kLmMgZ2xpYmMtMi4xMC4xL3BvcnRzL3N5c2RlcHMvYXJtL2ZwdS9mZXNldHJvdW5kLmMKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvcG9ydHMvc3lzZGVwcy9hcm0vZnB1L2ZwdV9jb250cm9sLmggZ2xpYmMtMi4xMC4xL3BvcnRzL3N5c2RlcHMvYXJtL2ZwdS9mcHVfY29udHJvbC5oCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3BvcnRzL3N5c2RlcHMvYXJtL2ZwdS9qbXBidWYtb2Zmc2V0cy5oIGdsaWJjLTIuMTAuMS9wb3J0cy9zeXNkZXBzL2FybS9mcHUvam1wYnVmLW9mZnNldHMuaAorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3J0cy9zeXNkZXBzL2FybS9mcHUvc2V0am1wLlMgZ2xpYmMtMi4xMC4xL3BvcnRzL3N5c2RlcHMvYXJtL2ZwdS9zZXRqbXAuUworZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3J0cy9zeXNkZXBzL2FybS9nY2NmcmFtZS5oIGdsaWJjLTIuMTAuMS9wb3J0cy9zeXNkZXBzL2FybS9nY2NmcmFtZS5oCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3BvcnRzL3N5c2RlcHMvYXJtL2dtcC1tcGFyYW0uaCBnbGliYy0yLjEwLjEvcG9ydHMvc3lzZGVwcy9hcm0vZ21wLW1wYXJhbS5oCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzU4MC1ucHRsLWxvd2xldmVsbG9jay5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNTgwLW5wdGwtbG93bGV2ZWxsb2NrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYjZjZGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzU4MC1ucHRsLWxvd2xldmVsbG9jay5wYXRjaApAQCAtMCwwICsxLDIzIEBACitmaXggYnVpbGQgZXJyb3Igb24gYXJtIGxpa2Ugb24gaHBwYToKKworYXJtLXVua25vd24tbGludXgtZ251LWdjYyAuLi9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2xpYmMtbG93bGV2ZWxsb2NrLmMgLWMgLXN0ZD1nbnU5OSAtZmdudTg5LWlubGluZSAtTzIgLVdhbGwgLVdpbmxpbmUgLVd3cml0ZS1zdHJpbmdzIC1mbWVyZ2UtYWxsLWNvbnN0YW50cyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZyAtcGlwZSAtV3N0cmljdC1wcm90b3R5cGVzICAgLWZQSUMgICAgLUkuLi9pbmNsdWRlIC1JL3Zhci90bXAvcG9ydGFnZS9jcm9zcy1hcm0tdW5rbm93bi1saW51eC1nbnUvZ2xpYmMtMi44X3AyMDA4MDYwMi93b3JrL2J1aWxkLWRlZmF1bHQtYXJtLXVua25vd24tbGludXgtZ251LW5wdGwvbnB0bCAtSS92YXIvdG1wL3BvcnRhZ2UvY3Jvc3MtYXJtLXVua25vd24tbGludXgtZ251L2dsaWJjLTIuOF9wMjAwODA2MDIvd29yay9idWlsZC1kZWZhdWx0LWFybS11bmtub3duLWxpbnV4LWdudS1ucHRsIC1JLi4vcG9ydHMvc3lzZGVwcy9hcm0vZWxmIC1JLi4vcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL25wdGwgLUkuLi9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hcm0gLUkuLi9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4IC1JLi4vbnB0bC9zeXNkZXBzL3B0aHJlYWQgLUkuLi9zeXNkZXBzL3B0aHJlYWQgLUkuLi9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eCAtSS4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4IC1JLi4vc3lzZGVwcy9nbnUgLUkuLi9zeXNkZXBzL3VuaXgvY29tbW9uIC1JLi4vc3lzZGVwcy91bml4L21tYW4gLUkuLi9zeXNkZXBzL3VuaXgvaW5ldCAtSS4uL25wdGwvc3lzZGVwcy91bml4L3N5c3YgLUkuLi9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdiAtSS4uL3N5c2RlcHMvdW5peC9zeXN2IC1JLi4vcG9ydHMvc3lzZGVwcy91bml4L2FybSAtSS4uL25wdGwvc3lzZGVwcy91bml4IC1JLi4vcG9ydHMvc3lzZGVwcy91bml4IC1JLi4vc3lzZGVwcy91bml4IC1JLi4vc3lzZGVwcy9wb3NpeCAtSS4uL3BvcnRzL3N5c2RlcHMvYXJtL2ZwdSAtSS4uL3BvcnRzL3N5c2RlcHMvYXJtL25wdGwgLUkuLi9wb3J0cy9zeXNkZXBzL2FybSAtSS4uL3N5c2RlcHMvd29yZHNpemUtMzIgLUkuLi9zeXNkZXBzL2llZWU3NTQvZmx0LTMyIC1JLi4vc3lzZGVwcy9pZWVlNzU0L2RibC02NCAtSS4uL3N5c2RlcHMvaWVlZTc1NCAtSS4uL3N5c2RlcHMvZ2VuZXJpYy9lbGYgLUkuLi9zeXNkZXBzL2dlbmVyaWMgLUkuLi9ucHRsIC1JLi4vcG9ydHMgIC1JLi4gLUkuLi9saWJpbyAtSS4gLW5vc3RkaW5jIC1pc3lzdGVtIC91c3IvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnUvNC4zLjIvaW5jbHVkZSAtaXN5c3RlbSAvdXNyL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251LzQuMy4yL2luY2x1ZGUtZml4ZWQgLWlzeXN0ZW0gL3Vzci9hcm0tdW5rbm93bi1saW51eC1nbnUvdXNyL2luY2x1ZGUgLURfTElCQ19SRUVOVFJBTlQgLWluY2x1ZGUgLi4vaW5jbHVkZS9saWJjLXN5bWJvbHMuaCAgLURQSUMgLURTSEFSRUQgICAgICAtbyAvdmFyL3RtcC9wb3J0YWdlL2Nyb3NzLWFybS11bmtub3duLWxpbnV4LWdudS9nbGliYy0yLjhfcDIwMDgwNjAyL3dvcmsvYnVpbGQtZGVmYXVsdC1hcm0tdW5rbm93bi1saW51eC1nbnUtbnB0bC9ucHRsL3J0bGQtbGliYy1sb3dsZXZlbGxvY2sub3MgLU1EIC1NUCAtTUYgL3Zhci90bXAvcG9ydGFnZS9jcm9zcy1hcm0tdW5rbm93bi1saW51eC1nbnUvZ2xpYmMtMi44X3AyMDA4MDYwMi93b3JrL2J1aWxkLWRlZmF1bHQtYXJtLXVua25vd24tbGludXgtZ251LW5wdGwvbnB0bC9ydGxkLWxpYmMtbG93bGV2ZWxsb2NrLm9zLmR0IC1NVCAvdmFyL3RtcC9wb3J0YWdlL2Nyb3NzLWFybS11bmtub3duLWxpbnV4LWdudS9nbGliYy0yLjhfcDIwMDgwNjAyL3dvcmsvYnVpbGQtZGVmYXVsdC1hcm0tdW5rbm93bi1saW51eC1nbnUtbnB0bC9ucHRsL3J0bGQtbGliYy1sb3dsZXZlbGxvY2sub3MgLUROT1RfSU5fbGliYz0xIC1ESVNfSU5fcnRsZD0xCitJbiBmaWxlIGluY2x1ZGVkIGZyb20gLi4vbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9saWJjLWxvd2xldmVsbG9jay5jOjIxOgorLi4vbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9sb3dsZXZlbGxvY2suYzogSW4gZnVuY3Rpb24gJ19fbGxsX2xvY2tfd2FpdF9wcml2YXRlJzoKKy4uL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbG93bGV2ZWxsb2NrLmM6MzE6IHdhcm5pbmc6IGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9uICdUSFJFQURfR0VUTUVNJworLi4vbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9sb3dsZXZlbGxvY2suYzozMTogZXJyb3I6ICdUSFJFQURfU0VMRicgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCisuLi9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2xvd2xldmVsbG9jay5jOjMxOiBlcnJvcjogKEVhY2ggdW5kZWNsYXJlZCBpZGVudGlmaWVyIGlzIHJlcG9ydGVkIG9ubHkgb25jZQorLi4vbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9sb3dsZXZlbGxvY2suYzozMTogZXJyb3I6IGZvciBlYWNoIGZ1bmN0aW9uIGl0IGFwcGVhcnMgaW4uKQorLi4vbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9sb3dsZXZlbGxvY2suYzozMTogZXJyb3I6ICdoZWFkZXInIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hcm0vbnB0bC9sb3dsZXZlbGxvY2suaCBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FybS9ucHRsL2xvd2xldmVsbG9jay5oCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FybS9ucHRsL2xvd2xldmVsbG9jay5oCTIwMDktMDUtMTYgMTA6MzY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hcm0vbnB0bC9sb3dsZXZlbGxvY2suaAkyMDA5LTExLTEzIDAwOjUxOjIzLjAwMDAwMDAwMCArMDEwMAorQEAgLTI1LDYgKzI1LDcgQEAKKyAjaW5jbHVkZSA8YXRvbWljLmg+CisgI2luY2x1ZGUgPHN5c2RlcC5oPgorICNpbmNsdWRlIDxrZXJuZWwtZmVhdHVyZXMuaD4KKysjaW5jbHVkZSA8dGxzLmg+CQkvKiBOZWVkIFRIUkVBRF8qLCBhbmQgaGVhZGVyLiouICAqLworIAorICNkZWZpbmUgRlVURVhfV0FJVAkJMAorICNkZWZpbmUgRlVURVhfV0FLRQkJMQorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hcm0vbnB0bC9sb3dsZXZlbGxvY2suaCBnbGliYy0yLjEwLjEvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL25wdGwvbG93bGV2ZWxsb2NrLmgKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNTkwLXNoLXNldC1mcHNjci1wcm90by5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNTkwLXNoLXNldC1mcHNjci1wcm90by5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjhmN2FhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS81OTAtc2gtc2V0LWZwc2NyLXByb3RvLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKKworCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3N5c2RlcHMvc2gvc2g0L2ZwdS9mcHVfY29udHJvbC5oIGdsaWJjLTIuMTAuMS9zeXNkZXBzL3NoL3NoNC9mcHUvZnB1X2NvbnRyb2wuaAorLS0tIGdsaWJjLTIuMTAuMS5vcmlnL3N5c2RlcHMvc2gvc2g0L2ZwdS9mcHVfY29udHJvbC5oCTIwMDEtMDctMDYgMDY6NTY6MDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL3N5c2RlcHMvc2gvc2g0L2ZwdS9mcHVfY29udHJvbC5oCTIwMDktMTEtMTMgMDA6NTE6MjYuMDAwMDAwMDAwICswMTAwCitAQCAtNDUsNiArNDUsNyBAQAorICNkZWZpbmUgX0ZQVV9HRVRDVyhjdykgX19hc21fXyAoInN0cyBmcHNjciwlMCIgOiAiPXIiIChjdykpCisgCisgI2lmIGRlZmluZWQgX19HTlVDX18KKytleHRlcm4gdm9pZCBfX3NldF9mcHNjcih1bnNpZ25lZCBsb25nKTsKKyAjZGVmaW5lIF9GUFVfU0VUQ1coY3cpIF9fc2V0X2Zwc2NyICgoY3cpKQorICNlbHNlCisgI2RlZmluZSBfRlBVX1NFVENXKGN3KSBfX2FzbV9fICgibGRzICUwLGZwc2NyIiA6IDogInIiIChjdykpCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzYwMC1taXBzX2xpYnJ0LW1pcHMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzYwMC1taXBzX2xpYnJ0LW1pcHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU4Yzg1OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNjAwLW1pcHNfbGlicnQtbWlwcy5wYXRjaApAQCAtMCwwICsxLDk0IEBACit3ZSBraW5kIG9mIHNjcmV3ZWQgb3Vyc2VsdmVzIGludG8gYSBjb3JuZXIgYnkgaGF2aW5nIHRoZSBjbG9jayBzeW1ib2xzCitleHBvcnRlZCBvbmx5IHdpdGggdGhlIGdsaWJjLTIuMCB2ZXJzaW9uIC4uLiB0aGlzIHBhdGNoIGZpeGVzIHRoZQorZXhwb3J0IHNvIGFsbCBuZXcgYmluYXJpZXMgYnVpbHQgYWdhaW5zdCBsaWJydCB3aWxsIHVzZSB0aGUgY29ycmVjdAorZ2xpYmMtMi4yIHN5bWJvbCB2ZXJzaW9uCisKK29uZSBkYXksIHdlJ2xsIGp1c3QgZHJvcCB0aGlzIG9uIHRoZSBmbG9vciAobWF5YmUgYWZ0ZXIgMjAwNi4xKQorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL1ZlcnNpb25zLmRlZiBnbGliYy0yLjEwLjEvVmVyc2lvbnMuZGVmCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvVmVyc2lvbnMuZGVmCTIwMDgtMTItMDMgMDU6MTk6MDYuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMC4xL1ZlcnNpb25zLmRlZgkyMDA5LTExLTEzIDAwOjUxOjI3LjAwMDAwMDAwMCArMDEwMAorQEAgLTk4LDYgKzk4LDcgQEAKKyAgIEdMSUJDX1BSSVZBVEUKKyB9CisgbGlicnQgeworKyAgR0xJQkNfMi4wCisgICBHTElCQ18yLjEKKyAgIEdMSUJDXzIuMgorICAgR0xJQkNfMi4zCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL1ZlcnNpb25zIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9WZXJzaW9ucworLS0tIGdsaWJjLTIuMTAuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL1ZlcnNpb25zCTIwMDktMDUtMTYgMTA6MzY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL2dsaWJjLXBvcnRzLTIuMTAuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL1ZlcnNpb25zCTIwMDktMTEtMTMgMDA6NTE6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtMzUsMyArMzUsOSBAQAorICAgICBfdGVzdF9hbmRfc2V0OworICAgfQorIH0KKytsaWJydCB7CisrICBHTElCQ18yLjAgeworKyAgICAjIGMqCisrICAgIGNsb2NrX2dldHRpbWU7IGNsb2NrX3NldHRpbWU7CisrICB9CisrfQorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL1ZlcnNpb25zIGdsaWJjLTIuMTAuMS9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL1ZlcnNpb25zCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3N5c2RlcHMvdW5peC9jbG9ja19nZXR0aW1lLmMgZ2xpYmMtMi4xMC4xL3N5c2RlcHMvdW5peC9jbG9ja19nZXR0aW1lLmMKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9zeXNkZXBzL3VuaXgvY2xvY2tfZ2V0dGltZS5jCTIwMDctMDctMjggMjI6MzY6MDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL3N5c2RlcHMvdW5peC9jbG9ja19nZXR0aW1lLmMJMjAwOS0xMS0xMyAwMDo1MToyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMyw2ICsyMyw3IEBACisgI2luY2x1ZGUgPHN5cy90aW1lLmg+CisgI2luY2x1ZGUgPGxpYmMtaW50ZXJuYWwuaD4KKyAjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysjaW5jbHVkZSA8c2hsaWItY29tcGF0Lmg+CisgCisgCisgI2lmIEhQX1RJTUlOR19BVkFJTAorQEAgLTkwLDcgKzkxLDcgQEAKKyAKKyAvKiBHZXQgY3VycmVudCB2YWx1ZSBvZiBDTE9DSyBhbmQgc3RvcmUgaXQgaW4gVFAuICAqLworIGludAorLWNsb2NrX2dldHRpbWUgKGNsb2NraWRfdCBjbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICp0cCkKKytfX2Nsb2NrX2dldHRpbWUgKGNsb2NraWRfdCBjbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICp0cCkKKyB7CisgICBpbnQgcmV0dmFsID0gLTE7CisgCitAQCAtMTMzLDQgKzEzNCwxMCBAQAorIAorICAgcmV0dXJuIHJldHZhbDsKKyB9CistbGlicnRfaGlkZGVuX2RlZiAoY2xvY2tfZ2V0dGltZSkKKyt2ZXJzaW9uZWRfc3ltYm9sIChsaWJydCwgX19jbG9ja19nZXR0aW1lLCBjbG9ja19nZXR0aW1lLCBHTElCQ18yXzIpOworK2xpYnJ0X2hpZGRlbl92ZXIgKF9fY2xvY2tfZ2V0dGltZSwgY2xvY2tfZ2V0dGltZSkKKysKKysjaWYgZGVmaW5lZCBfX21pcHNfXyAmJiBkZWZpbmVkIFNIQVJFRAorK3N0cm9uZ19hbGlhcyAoX19jbG9ja19nZXR0aW1lLCBfX21pcHNfY2xvY2tfZ2V0dGltZSkKKytjb21wYXRfc3ltYm9sIChsaWJydCwgX19taXBzX2Nsb2NrX2dldHRpbWUsIGNsb2NrX2dldHRpbWUsIEdMSUJDXzJfMCk7CisrI2VuZGlmCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL3N5c2RlcHMvdW5peC9jbG9ja19zZXR0aW1lLmMgZ2xpYmMtMi4xMC4xL3N5c2RlcHMvdW5peC9jbG9ja19zZXR0aW1lLmMKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9zeXNkZXBzL3VuaXgvY2xvY2tfc2V0dGltZS5jCTIwMDctMDgtMTQgMDU6MTk6MzMuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL3N5c2RlcHMvdW5peC9jbG9ja19zZXR0aW1lLmMJMjAwOS0xMS0xMyAwMDo1MToyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMSw2ICsyMSw3IEBACisgI2luY2x1ZGUgPHN5cy90aW1lLmg+CisgI2luY2x1ZGUgPGxpYmMtaW50ZXJuYWwuaD4KKyAjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysjaW5jbHVkZSA8c2hsaWItY29tcGF0Lmg+CisgCisgCisgI2lmIEhQX1RJTUlOR19BVkFJTCAmJiAhZGVmaW5lZCBIQU5ETEVEX0NQVVRJTUUKK0BAIC03Myw3ICs3NCw3IEBACisgCisgLyogU2V0IENMT0NLIHRvIHZhbHVlIFRQLiAgKi8KKyBpbnQKKy1jbG9ja19zZXR0aW1lIChjbG9ja2lkX3QgY2xvY2tfaWQsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdHApCisrX19jbG9ja19zZXR0aW1lIChjbG9ja2lkX3QgY2xvY2tfaWQsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdHApCisgeworICAgaW50IHJldHZhbDsKKyAKK0BAIC0xMjUsMyArMTI2LDkgQEAKKyAKKyAgIHJldHVybiByZXR2YWw7CisgfQorK3ZlcnNpb25lZF9zeW1ib2wgKGxpYnJ0LCBfX2Nsb2NrX3NldHRpbWUsIGNsb2NrX3NldHRpbWUsIEdMSUJDXzJfMik7CisrCisrI2lmIGRlZmluZWQgX19taXBzX18gJiYgZGVmaW5lZCBTSEFSRUQKKytzdHJvbmdfYWxpYXMgKF9fY2xvY2tfc2V0dGltZSwgX19taXBzX2Nsb2NrX3NldHRpbWUpCisrY29tcGF0X3N5bWJvbCAobGlicnQsIF9fbWlwc19jbG9ja19zZXR0aW1lLCBjbG9ja19zZXR0aW1lLCBHTElCQ18yXzApOworKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS82MTAtZnB1LWN3LW1pcHMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzYxMC1mcHUtY3ctbWlwcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjRlMTk5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS82MTAtZnB1LWN3LW1pcHMucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAoraHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2xpYmMtYWxwaGEvMjAwMi0xMC9tc2cwMDM5Mi5odG1sCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvbWlwcy9mcHVfY29udHJvbC5oIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9taXBzL2ZwdV9jb250cm9sLmgKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9taXBzL2ZwdV9jb250cm9sLmgJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvbWlwcy9mcHVfY29udHJvbC5oCTIwMDktMTEtMTMgMDA6NTE6MzEuMDAwMDAwMDAwICswMTAwCitAQCAtODYsNyArODYsNyBAQAorICNkZWZpbmUgX0ZQVV9SQ19VUCAgICAgIDB4MgorICNkZWZpbmUgX0ZQVV9SQ19ET1dOICAgIDB4MworIAorLSNkZWZpbmUgX0ZQVV9SRVNFUlZFRCAweGZlM2MwMDAwICAvKiBSZXNlcnZlZCBiaXRzIGluIGN3ICovCisrI2RlZmluZSBfRlBVX1JFU0VSVkVEIDB4ZmViYzAwMDAgIC8qIFJlc2VydmVkIGJpdHMgaW4gY3cgKi8KKyAKKyAKKyAvKiBUaGUgZmRsaWJtIGNvZGUgcmVxdWlyZXMgc3RyaWN0IElFRUUgZG91YmxlIHByZWNpc2lvbiBhcml0aG1ldGljLAorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3J0cy9zeXNkZXBzL21pcHMvZnB1X2NvbnRyb2wuaCBnbGliYy0yLjEwLjEvcG9ydHMvc3lzZGVwcy9taXBzL2ZwdV9jb250cm9sLmgKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNjIwLXIxMGstd29ya2Fyb3VuZHMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzYyMC1yMTBrLXdvcmthcm91bmRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYTQzMWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzYyMC1yMTBrLXdvcmthcm91bmRzLnBhdGNoCkBAIC0wLDAgKzEsNjcgQEAKK3JpcHBlZCBmcm9tIERlYmlhbgorCit0aGUgUjEwMDAwIG5lZWRzIGFuIExML1NDIFdvcmthcm91bmQuIElmIG5vdCBhcHBsaWVkIGFsbCBSMTBrIGJlZm9yZQorcmV2IDMuMCBtaXNiZWhhdmUgb24gYXRvbWljIG9wcyBhbmQgcmV2IDIuNiBhbmQgbG93ZXIgKGUuZy4gU0dJIElQMjgpCitkaWUgYWZ0ZXIgdmVyeSBmZXcgc2Vjb25kcyB3aXRoIGEgZGVhZGxvY2sgZHVlIHRvIGV2ZW4gbW9yZSBlcnJhdGFzLgorCisgcG9ydHMvc3lzZGVwcy9taXBzL2JpdHMvYXRvbWljLmggfCAgIDEyICsrKysrKy0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMC4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvbWlwcy9iaXRzL2F0b21pYy5oIGdsaWJjLTIuMTAuMS9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9taXBzL2JpdHMvYXRvbWljLmgKKy0tLSBnbGliYy0yLjEwLjEub3JpZy9nbGliYy1wb3J0cy0yLjEwLjEvc3lzZGVwcy9taXBzL2JpdHMvYXRvbWljLmgJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEwLjEvZ2xpYmMtcG9ydHMtMi4xMC4xL3N5c2RlcHMvbWlwcy9iaXRzL2F0b21pYy5oCTIwMDktMTEtMTMgMDA6NTE6MzQuMDAwMDAwMDAwICswMTAwCitAQCAtNzQsNyArNzQsNyBAQAorICAgICAgImJuZQklMCwlMiwyZlxuXHQiCQkJCQkJICAgICAgXAorICAgICAgIm1vdmUJJTEsJTNcblx0IgkJCQkJCSAgICAgIFwKKyAgICAgICJzYwklMSwlNFxuXHQiCQkJCQkJICAgICAgXAorLSAgICAgImJlcXoJJTEsMWJcbiIJCQkJCQkgICAgICBcCisrICAgICAiYmVxemwJJTEsMWJcbiIJCQkJCQkgICAgICBcCisgICAgICBhY3EJIlxuXHQiCQkJCQkJCSAgICAgIFwKKyAgICAgICIuc2V0CXBvcFxuIgkJCQkJCQkgICAgICBcCisgICAgICAiMjpcblx0IgkJCQkJCQkJICAgICAgXAorQEAgLTk4LDcgKzk4LDcgQEAKKyAgICAgICJibmUJJTAsJTIsMmZcblx0IgkJCQkJCSAgICAgIFwKKyAgICAgICJtb3ZlCSUxLCUzXG5cdCIJCQkJCQkgICAgICBcCisgICAgICAic2NkCSUxLCU0XG5cdCIJCQkJCQkgICAgICBcCistICAgICAiYmVxegklMSwxYlxuIgkJCQkJCSAgICAgIFwKKysgICAgICJiZXF6bAklMSwxYlxuIgkJCQkJCSAgICAgIFwKKyAgICAgIGFjcQkiXG5cdCIJCQkJCQkJICAgICAgXAorICAgICAgIi5zZXQJcG9wXG4iCQkJCQkJCSAgICAgIFwKKyAgICAgICIyOlxuXHQiCQkJCQkJCQkgICAgICBcCitAQCAtMTkyLDcgKzE5Miw3IEBACisgICAgICAibGwJJTAsJTNcblx0IgkJCQkJCSAgICAgIFwKKyAgICAgICJtb3ZlCSUxLCUyXG5cdCIJCQkJCQkgICAgICBcCisgICAgICAic2MJJTEsJTNcblx0IgkJCQkJCSAgICAgIFwKKy0gICAgICJiZXF6CSUxLDFiXG4iCQkJCQkJICAgICAgXAorKyAgICAgImJlcXpsCSUxLDFiXG4iCQkJCQkJICAgICAgXAorICAgICAgYWNxCSJcblx0IgkJCQkJCQkgICAgICBcCisgICAgICAiLnNldAlwb3BcbiIJCQkJCQkJICAgICAgXAorICAgICAgIjI6XG5cdCIJCQkJCQkJCSAgICAgIFwKK0BAIC0yMTYsNyArMjE2LDcgQEAKKyAgICAgICJsbGQJJTAsJTNcblx0IgkJCQkJCSAgICAgIFwKKyAgICAgICJtb3ZlCSUxLCUyXG5cdCIJCQkJCQkgICAgICBcCisgICAgICAic2NkCSUxLCUzXG5cdCIJCQkJCQkgICAgICBcCistICAgICAiYmVxegklMSwxYlxuIgkJCQkJCSAgICAgIFwKKysgICAgICJiZXF6bAklMSwxYlxuIgkJCQkJCSAgICAgIFwKKyAgICAgIGFjcQkiXG5cdCIJCQkJCQkJICAgICAgXAorICAgICAgIi5zZXQJcG9wXG4iCQkJCQkJCSAgICAgIFwKKyAgICAgICIyOlxuXHQiCQkJCQkJCQkgICAgICBcCitAQCAtMjUxLDcgKzI1MSw3IEBACisgICAgICAibGwJJTAsJTNcblx0IgkJCQkJCSAgICAgIFwKKyAgICAgICJhZGR1CSUxLCUwLCUyXG5cdCIJCQkJCQkgICAgICBcCisgICAgICAic2MJJTEsJTNcblx0IgkJCQkJCSAgICAgIFwKKy0gICAgICJiZXF6CSUxLDFiXG4iCQkJCQkJICAgICAgXAorKyAgICAgImJlcXpsCSUxLDFiXG4iCQkJCQkJICAgICAgXAorICAgICAgYWNxCSJcblx0IgkJCQkJCQkgICAgICBcCisgICAgICAiLnNldAlwb3BcbiIJCQkJCQkJICAgICAgXAorICAgICAgIjI6XG5cdCIJCQkJCQkJCSAgICAgIFwKK0BAIC0yNzUsNyArMjc1LDcgQEAKKyAgICAgICJsbGQJJTAsJTNcblx0IgkJCQkJCSAgICAgIFwKKyAgICAgICJkYWRkdQklMSwlMCwlMlxuXHQiCQkJCQkJICAgICAgXAorICAgICAgInNjZAklMSwlM1xuXHQiCQkJCQkJICAgICAgXAorLSAgICAgImJlcXoJJTEsMWJcbiIJCQkJCQkgICAgICBcCisrICAgICAiYmVxemwJJTEsMWJcbiIJCQkJCQkgICAgICBcCisgICAgICBhY3EJIlxuXHQiCQkJCQkJCSAgICAgIFwKKyAgICAgICIuc2V0CXBvcFxuIgkJCQkJCQkgICAgICBcCisgICAgICAiMjpcblx0IgkJCQkJCQkJICAgICAgXAorZGlmZiAtZHVyTiBnbGliYy0yLjEwLjEub3JpZy9wb3J0cy9zeXNkZXBzL21pcHMvYml0cy9hdG9taWMuaCBnbGliYy0yLjEwLjEvcG9ydHMvc3lzZGVwcy9taXBzL2JpdHMvYXRvbWljLmgKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNjMwLW1pcHNfc2huX3VuZGVmLWhhY2sucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzYzMC1taXBzX3Nobl91bmRlZi1oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZjBlZTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzYzMC1taXBzX3Nobl91bmRlZi1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKKwlIYWNrIGZyb20gRGViaWFuIHRvIGhvcGVmdWxseSBnZXQgc2FuZGJveCB3b3JraW5nIG9uIG1pcHMKKworPGBLdW1iYT4gdGhzOiBnaXZlbiB0aGUgU0hOX1VOREVGIHRoaW5nIGlzIGEgaGFjaywgd2hhdCdzIHRoZSBwcmVmZXJyZWQgc29sdXRpb24/Cis8dGhzPiBGb3IgZmFrZXJvb3QgdGhlIHNpbXBsZXN0IHRyaWdnZXIgaXMgImZha2Vyb290IGZpbGUgL2Jpbi9scyIuCis8dGhzPiBgS3VtYmE6IEkgaGF2ZW4ndCBmb3VuZCBhIGJldHRlciBvbmUgeWV0LgorPHRocz4gUHJvYmFibHkgbWFya2VyIHN5bWJvbHMgYXJvdW5kIHRoZSBzdHViIHNlY3Rpb24sIGFuZCB0aGVuIGV4Y2x1ZGUgaXQgZnJvbSB0aGUgbGluayBtYXAuCis8dGhzPiBUaGlzIG5lZWRzIGEgbGQgY2hhbmdlLgorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTAuMS5vcmlnL2VsZi9kby1sb29rdXAuaCBnbGliYy0yLjEwLjEvZWxmL2RvLWxvb2t1cC5oCistLS0gZ2xpYmMtMi4xMC4xLm9yaWcvZWxmL2RvLWxvb2t1cC5oCTIwMDktMDMtMzAgMjM6MTQ6MzIuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMC4xL2VsZi9kby1sb29rdXAuaAkyMDA5LTExLTEzIDAwOjUxOjM2LjAwMDAwMDAwMCArMDEwMAorQEAgLTI0OCw2ICsyNDgsMTIgQEAKKyAJCX0KKyAJICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAJICAgIGNhc2UgU1RCX0dMT0JBTDoKKysjaWZkZWYgX19taXBzX18KKysJICAgICAgLyogSEFDSzogTUlQUyBtYXJrcyBpdHMgbGF6eSBldmFsdWF0aW9uIHN0dWJzIHdpdGggU0hOX1VOREVGCisrCQkgc3ltYm9scywgd2Ugc2tpcCB0aGVtLiAqLworKwkgICAgICBpZiAoc3ltLT5zdF9zaG5keCA9PSBTSE5fVU5ERUYpCisrCQlicmVhazsKKysjZW5kaWYKKyAJICAgICAgLyogR2xvYmFsIGRlZmluaXRpb24uICBKdXN0IHdoYXQgd2UgbmVlZC4gICovCisgCSAgICAgIHJlc3VsdC0+cyA9IHN5bTsKKyAJICAgICAgcmVzdWx0LT5tID0gKHN0cnVjdCBsaW5rX21hcCAqKSBtYXA7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzY0MC1hbHBoYS1hdGZjdHMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzY0MC1hbHBoYS1hdGZjdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNhZGJjZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNjQwLWFscGhhLWF0ZmN0cy5wYXRjaApAQCAtMCwwICsxLDEyIEBACistLS0gZ2xpYmMtMi43L3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2tlcm5lbC1mZWF0dXJlcy5oCTIwMDctMDgtMTQgMDY6MjE6MDkuMDAwMDAwMDAwICswMzAwCisrKysgZ2xpYmMtMi43L3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2tlcm5lbC1mZWF0dXJlcy5oLm5ldwkyMDA4LTA3LTIzIDA3OjA1OjIwLjAwMDAwMDAwMCArMDMwMAorQEAgLTQ1NCw4ICs0NTQsNyBAQAorICAgIGFuZCBvbiBBbHBoYSBqdXN0IGFmdGVyIDIuNi4yMi1yYzEuICAqLworICNpZiBfX0xJTlVYX0tFUk5FTF9WRVJTSU9OID49IDB4MDIwNjExIFwKKyAgICAgJiYgKCghZGVmaW5lZCBfX3NoX18gJiYgIWRlZmluZWQgX19hbHBoYV9fKSBcCistCXx8IChfX0xJTlVYX0tFUk5FTF9WRVJTSU9OID49IDB4MDIwNjEzICYmIGRlZmluZWQgX19zaF9fKSBcCistCXx8IChfX0xJTlVYX0tFUk5FTF9WRVJTSU9OID49IDB4MDIwNjE3ICYmIGRlZmluZWQgX19hbHBoYV9fKSkKKysJfHwgKF9fTElOVVhfS0VSTkVMX1ZFUlNJT04gPj0gMHgwMjA2MTMgJiYgZGVmaW5lZCBfX3NoX18pKQorICMgZGVmaW5lIF9fQVNTVU1FX0FURkNUUwkxCisgI2VuZGlmCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzY1MC1zeXNsb2cucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMC4xLzY1MC1zeXNsb2cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwY2FmYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNjUwLXN5c2xvZy5wYXRjaApAQCAtMCwwICsxLDEyIEBACitkaWZmIC1kdXJOIGdsaWJjLWN2cy0yLjkub3JpZy9taXNjL3N5c2xvZy5jIGdsaWJjLWN2cy0yLjkvbWlzYy9zeXNsb2cuYworLS0tIGdsaWJjLWN2cy0yLjkub3JpZy9taXNjL3N5c2xvZy5jCTIwMDktMDYtMDEgMTA6MTY6NTAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtY3ZzLTIuOS9taXNjL3N5c2xvZy5jCTIwMDktMDYtMDEgMTA6MTc6MjAuMDAwMDAwMDAwICswMjAwCitAQCAtMTUyLDcgKzE1Miw3IEBACisgI2RlZmluZQlJTlRFUk5BTExPRwlMT0dfRVJSfExPR19DT05TfExPR19QRVJST1J8TE9HX1BJRAorIAkvKiBDaGVjayBmb3IgaW52YWxpZCBiaXRzLiAqLworIAlpZiAocHJpICYgfihMT0dfUFJJTUFTS3xMT0dfRkFDTUFTSykpIHsKKy0JCXN5c2xvZyhJTlRFUk5BTExPRywKKysJCV9fc3lzbG9nKElOVEVSTkFMTE9HLAorIAkJICAgICJzeXNsb2c6IHVua25vd24gZmFjaWxpdHkvcHJpb3JpdHk6ICV4IiwgcHJpKTsKKyAJCXByaSAmPSBMT0dfUFJJTUFTS3xMT0dfRkFDTUFTSzsKKyAJfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTAuMS82NjAtZGVidWctcmVhZGxpbmtfY2hrLXJlYWRrbGlua2F0X2Noay5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNjYwLWRlYnVnLXJlYWRsaW5rX2Noay1yZWFka2xpbmthdF9jaGsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVhNzA1MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEwLjEvNjYwLWRlYnVnLXJlYWRsaW5rX2Noay1yZWFka2xpbmthdF9jaGsucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorZGlmZiAtZHVyIGdsaWJjLWN2cy0yLjkub3JpZy9kZWJ1Zy9yZWFkbGlua19jaGsuYyBnbGliYy1jdnMtMi45L2RlYnVnL3JlYWRsaW5rX2Noay5jCistLS0gZ2xpYmMtY3ZzLTIuOS5vcmlnL2RlYnVnL3JlYWRsaW5rX2Noay5jCTIwMDUtMDMtMDEgMDE6NDE6MTUuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtY3ZzLTIuOS9kZWJ1Zy9yZWFkbGlua19jaGsuYwkyMDA5LTA2LTAxIDEwOjU5OjM3LjAwMDAwMDAwMCArMDIwMAorQEAgLTI1LDcgKzI1LDcgQEAKKyAKKyAKKyBzc2l6ZV90CistX19yZWFkbGlua19jaGsgKGNvbnN0IGNoYXIgKnBhdGgsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgc2l6ZV90IGJ1ZmxlbikKKytfX3JlYWRsaW5rX2NoayAoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgbGVuLCBzaXplX3QgYnVmbGVuKQorIHsKKyAgIGlmIChsZW4gPiBidWZsZW4pCisgICAgIF9fY2hrX2ZhaWwgKCk7CitkaWZmIC1kdXIgZ2xpYmMtY3ZzLTIuOS5vcmlnL2RlYnVnL3JlYWRsaW5rYXRfY2hrLmMgZ2xpYmMtY3ZzLTIuOS9kZWJ1Zy9yZWFkbGlua2F0X2Noay5jCistLS0gZ2xpYmMtY3ZzLTIuOS5vcmlnL2RlYnVnL3JlYWRsaW5rYXRfY2hrLmMJMjAwNi0wNC0yNCAxODo1NjoxMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy1jdnMtMi45L2RlYnVnL3JlYWRsaW5rYXRfY2hrLmMJMjAwOS0wNi0wMSAxMTowNzoyNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMSw3ICsyMSw3IEBACisgCisgCisgc3NpemVfdAorLV9fcmVhZGxpbmthdF9jaGsgKGludCBmZCwgY29uc3QgY2hhciAqcGF0aCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuLAorK19fcmVhZGxpbmthdF9jaGsgKGludCBmZCwgY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgbGVuLAorIAkJICBzaXplX3QgYnVmbGVuKQorIHsKKyAgIGlmIChsZW4gPiBidWZsZW4pCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzEwMC1yZXNwZWN0LWVudi1DUFBGTEFHUy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvMTAwLXJlc3BlY3QtZW52LUNQUEZMQUdTLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMDIyYmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzEwMC1yZXNwZWN0LWVudi1DUFBGTEFHUy5wYXRjaApAQCAtMCwwICsxLDI1IEBACitSZXNwZWN0IGVudmlyb25tZW50IENQUEZMQUdTIHdoZW4gd2UgcnVuIC4vY29uZmlndXJlIHNvIHdlIGNhbiBpbmplY3QKK3JhbmRvbSAtRCB0aGluZ3Mgd2l0aG91dCBoYXZpbmcgdG8gc2V0IENGTEFHUy9BU0ZMQUdTCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvTWFrZWNvbmZpZyBnbGliYy0yLjEyLjEvTWFrZWNvbmZpZworLS0tIGdsaWJjLTIuMTIuMS5vcmlnL01ha2Vjb25maWcJMjAwOS0wNS0wOSAyMzo1Nzo1Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEyLjEvTWFrZWNvbmZpZwkyMDA5LTExLTEzIDAwOjQ5OjQxLjAwMDAwMDAwMCArMDEwMAorQEAgLTY5Nyw2ICs2OTcsNyBAQAorIAkgICAkKGZvcmVhY2ggbGliLCQobGlib2YtJChiYXNlbmFtZSAkKEBGKSkpIFwKKyAJCSAgICAgICAgICQobGlib2YtJCg8RikpICQobGlib2YtJChARikpLCQoQ1BQRkxBR1MtJChsaWIpKSkgXAorIAkgICAkKENQUEZMQUdTLSQoPEYpKSAkKENQUEZMQUdTLSQoQEYpKSAkKENQUEZMQUdTLSQoYmFzZW5hbWUgJChARikpKQorK0NQUEZMQUdTICs9ICQoQ1BQRkxBR1MtY29uZmlnKQorIG92ZXJyaWRlIENGTEFHUwk9IC1zdGQ9Z251OTkgJChnbnU4OS1pbmxpbmUtQ0ZMQUdTKSBcCisgCQkgICQoZmlsdGVyLW91dCAlZnJhbWUtcG9pbnRlciwkKCtjZmxhZ3MpKSAkKCtnY2N3YXJuLWMpIFwKKyAJCSAgJChzeXNkZXAtQ0ZMQUdTKSAkKENGTEFHUy0kKHN1ZmZpeCAkQCkpICQoQ0ZMQUdTLSQoPEYpKSBcCitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL2NvbmZpZy5tYWtlLmluIGdsaWJjLTIuMTIuMS9jb25maWcubWFrZS5pbgorLS0tIGdsaWJjLTIuMTIuMS5vcmlnL2NvbmZpZy5tYWtlLmluCTIwMDktMDUtMDkgMTc6NTk6MzguMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMi4xL2NvbmZpZy5tYWtlLmluCTIwMDktMTEtMTMgMDA6NDk6NDEuMDAwMDAwMDAwICswMTAwCitAQCAtMTA3LDYgKzEwNyw3IEBACisgQ1hYID0gQENYWEAKKyBCVUlMRF9DQyA9IEBCVUlMRF9DQ0AKKyBDRkxBR1MgPSBAQ0ZMQUdTQAorK0NQUEZMQUdTLWNvbmZpZyA9IEBDUFBGTEFHU0AKKyBBU0ZMQUdTLWNvbmZpZyA9IEBBU0ZMQUdTX2NvbmZpZ0AKKyBBUiA9IEBBUkAKKyBSQU5MSUIgPSBAUkFOTElCQApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS8xMjAtaTM4Ni14ODZfNjQtcmV2ZXJ0LWNsb25lLWNmaS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvMTIwLWkzODYteDg2XzY0LXJldmVydC1jbG9uZS1jZmkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVmNWFjZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvMTIwLWkzODYteDg2XzY0LXJldmVydC1jbG9uZS1jZmkucGF0Y2gKQEAgLTAsMCArMSw1NSBAQAorcmV2ZXJ0IGNmaSBhZGRpdGlvbnMgdG8gY2xvbmUgb24gaTM4Ni94ODZfNjQgdG8gd29ya2Fyb3VuZCBwcm9ibGVtcyBpbgorZ2NjJ3MgdW53aW5kZXIgY29kZS4gIHRoaXMgaXMgbm90IGEgYnVnIGluIGdsaWJjLCBpdCB0cmlnZ2VycyBwcm9ibGVtcworZWxzZXdoZXJlLiAgdGhpcyBjZmkgY29kZSBkb2VzIG5vdCBnYWluIHVzIGEgd2hvbGUgbG90IGFueXdheXMuCisKK2h0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MvMjAwNi0xMi9tc2cwMDI5My5odG1sCisKK0luZGV4OiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L2Nsb25lLlMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JDUyBmaWxlOiAvY3ZzL2dsaWJjL2xpYmMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9jbG9uZS5TLHYKK3JldHJpZXZpbmcgcmV2aXNpb24gMS4yNworcmV0cmlldmluZyByZXZpc2lvbiAxLjI2CitkaWZmIC11IC1wIC1yMS4yNyAtcjEuMjYKKworZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L2Nsb25lLlMgZ2xpYmMtMi4xMi4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvY2xvbmUuUworLS0tIGdsaWJjLTIuMTIuMS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvY2xvbmUuUwkyMDA2LTEyLTA0IDAwOjEyOjM2LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTIuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L2Nsb25lLlMJMjAwOS0xMS0xMyAwMDo0OTo0NS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMjAsOSArMTIwLDYgQEAKKyAJcmV0CisgCisgTCh0aHJlYWRfc3RhcnQpOgorLQljZmlfc3RhcnRwcm9jOworLQkvKiBDbGVhcmluZyBmcmFtZSBwb2ludGVyIGlzIGluc3VmZmljaWVudCwgdXNlIENGSS4gICovCistCWNmaV91bmRlZmluZWQgKGVpcCk7CisgCS8qIE5vdGU6ICVlc2kgaXMgemVyby4gICovCisgCW1vdmwJJWVzaSwlZWJwCS8qIHRlcm1pbmF0ZSB0aGUgc3RhY2sgZnJhbWUgKi8KKyAjaWZkZWYgUkVTRVRfUElECitAQCAtMTU1LDcgKzE1Miw2IEBACisgCWptcAlMKGhhc3BpZCkKKyAJLnByZXZpb3VzCisgI2VuZGlmCistCWNmaV9lbmRwcm9jOworIAorIAljZmlfc3RhcnRwcm9jCisgUFNFVURPX0VORCAoQlBfU1lNIChfX2Nsb25lKSkKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgveDg2XzY0L2Nsb25lLlMgZ2xpYmMtMi4xMi4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3g4Nl82NC9jbG9uZS5TCistLS0gZ2xpYmMtMi4xMi4xLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgveDg2XzY0L2Nsb25lLlMJMjAwNi0xMi0wNCAwMDoxMjozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEyLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgveDg2XzY0L2Nsb25lLlMJMjAwOS0xMS0xMyAwMDo0OTo0NS4wMDAwMDAwMDAgKzAxMDAKK0BAIC04OSw5ICs4OSw2IEBACisgCXJldAorIAorIEwodGhyZWFkX3N0YXJ0KToKKy0JY2ZpX3N0YXJ0cHJvYzsKKy0JLyogQ2xlYXJpbmcgZnJhbWUgcG9pbnRlciBpcyBpbnN1ZmZpY2llbnQsIHVzZSBDRkkuICAqLworLQljZmlfdW5kZWZpbmVkIChyaXApOworIAkvKiBDbGVhciB0aGUgZnJhbWUgcG9pbnRlci4gIFRoZSBBQkkgc3VnZ2VzdHMgdGhpcyBiZSBkb25lLCB0byBtYXJrCisgCSAgIHRoZSBvdXRlcm1vc3QgZnJhbWUgb2J2aW91c2x5LiAgKi8KKyAJeG9ybAklZWJwLCAlZWJwCitAQCAtMTE2LDcgKzExMyw2IEBACisgCS8qIENhbGwgZXhpdCB3aXRoIHJldHVybiB2YWx1ZSBmcm9tIGZ1bmN0aW9uIGNhbGwuICovCisgCW1vdnEJJXJheCwgJXJkaQorIAljYWxsCUhJRERFTl9KVU1QVEFSR0VUIChfZXhpdCkKKy0JY2ZpX2VuZHByb2M7CisgCisgCWNmaV9zdGFydHByb2M7CisgUFNFVURPX0VORCAoQlBfU1lNIChfX2Nsb25lKSkKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvMTQwLWRpc2FibGUtbGRjb25maWcucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzE0MC1kaXNhYmxlLWxkY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMzMwYjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzE0MC1kaXNhYmxlLWxkY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKK2RvIG5vdCBib3RoZXIgcnVubmluZyBsZGNvbmZpZyBvbiBERVNURElSLiAgaXQgd2FudHMgdG8gd3JpdGUgdGhlIHRlbXAgY2FjaGUKK2ZpbGUgb3V0c2lkZSBvZiB0aGUgY2hyb290LiAgZG9lc250IG1hdHRlciBhbnl3YXlzIGFzIHdlIHdvbnQgdXNlIHRoZSBjYWNoZQorcmVzdWx0cyAocG9ydGFnZSB3aWxsIHJlYnVpbGQgY2FjaGUpLCBzbyBydW5uaW5nIGxkY29uZmlnIGlzIHNpbXBseSBhIHdhc3RlCitvZiB0aW1lLgorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL01ha2VmaWxlIGdsaWJjLTIuMTIuMS9NYWtlZmlsZQorLS0tIGdsaWJjLTIuMTIuMS5vcmlnL01ha2VmaWxlCTIwMDktMDQtMjMgMjA6MjM6MDMuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMi4xL01ha2VmaWxlCTIwMDktMTEtMTMgMDA6NDk6NDkuMDAwMDAwMDAwICswMTAwCitAQCAtMTE2LDYgKzExNiw3IEBACisgCXJtIC1mICQoc3ltYm9saWMtbGluay1saXN0KQorIAorIGluc3RhbGw6CisrZG9udC1ib3RoZXItd2l0aC1kZXN0ZGlyOgorIAktdGVzdCAhIC14ICQoY29tbW9uLW9ianBmeCllbGYvbGRjb25maWcgfHwgTENfQUxMPUMgTEFOR1VBR0U9QyBcCisgCSAgJChjb21tb24tb2JqcGZ4KWVsZi9sZGNvbmZpZyAkKGFkZHByZWZpeCAtciAsJChpbnN0YWxsX3Jvb3QpKSBcCisgCQkJCSAgICAgICAkKHNsaWJkaXIpICQobGliZGlyKQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS8xNTAtcXVldWUtaGVhZGVyLXVwZGF0ZXMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzE1MC1xdWV1ZS1oZWFkZXItdXBkYXRlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTYyNWUxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS8xNTAtcXVldWUtaGVhZGVyLXVwZGF0ZXMucGF0Y2gKQEAgLTAsMCArMSw4NSBAQAorZ3JhYiBzb21lIHVwZGF0ZXMgZnJvbSBGcmVlQlNECisKK2h0dHA6Ly9idWdzLmdlbnRvby5vcmcvMjAxOTc5CisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvbWlzYy9zeXMvcXVldWUuaCBnbGliYy0yLjEyLjEvbWlzYy9zeXMvcXVldWUuaAorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL21pc2Mvc3lzL3F1ZXVlLmggZ2xpYmMtMi4xMi4xL21pc2Mvc3lzL3F1ZXVlLmgKKy0tLSBnbGliYy0yLjEyLjEub3JpZy9taXNjL3N5cy9xdWV1ZS5oCTIwMDgtMDMtMDUgMDY6NTA6MzAuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMi4xL21pc2Mvc3lzL3F1ZXVlLmgJMjAwOS0xMS0xMyAwMDo0OTo1MS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMzYsNiArMTM2LDExIEBACisgCQkodmFyKTsJCQkJCQkJXAorIAkJKHZhcikgPSAoKHZhciktPmZpZWxkLmxlX25leHQpKQorIAorKyNkZWZpbmUJTElTVF9GT1JFQUNIX1NBRkUodmFyLCBoZWFkLCBmaWVsZCwgdHZhcikJCQlcCisrCWZvciAoKHZhcikgPSBMSVNUX0ZJUlNUKChoZWFkKSk7CQkJCVwKKysJICAgICh2YXIpICYmICgodHZhcikgPSBMSVNUX05FWFQoKHZhciksIGZpZWxkKSwgMSk7CQlcCisrCSAgICAodmFyKSA9ICh0dmFyKSkKKysKKyAvKgorICAqIExpc3QgYWNjZXNzIG1ldGhvZHMuCisgICovCitAQCAtMTk3LDYgKzIwMiwxNiBAQAorICNkZWZpbmUJU0xJU1RfRk9SRUFDSCh2YXIsIGhlYWQsIGZpZWxkKQkJCQkJXAorIAlmb3IoKHZhcikgPSAoaGVhZCktPnNsaF9maXJzdDsgKHZhcik7ICh2YXIpID0gKHZhciktPmZpZWxkLnNsZV9uZXh0KQorIAorKyNkZWZpbmUJU0xJU1RfRk9SRUFDSF9TQUZFKHZhciwgaGVhZCwgZmllbGQsIHR2YXIpCQkJXAorKwlmb3IgKCh2YXIpID0gU0xJU1RfRklSU1QoKGhlYWQpKTsJCQkJXAorKwkgICAgKHZhcikgJiYgKCh0dmFyKSA9IFNMSVNUX05FWFQoKHZhciksIGZpZWxkKSwgMSk7CQlcCisrCSAgICAodmFyKSA9ICh0dmFyKSkKKysKKysjZGVmaW5lCVNMSVNUX0ZPUkVBQ0hfUFJFVlBUUih2YXIsIHZhcnAsIGhlYWQsIGZpZWxkKQkJCVwKKysJZm9yICgodmFycCkgPSAmU0xJU1RfRklSU1QoKGhlYWQpKTsJCQkJXAorKwkgICAgKCh2YXIpID0gKih2YXJwKSkgIT0gTlVMTDsJCQkJCVwKKysJICAgICh2YXJwKSA9ICZTTElTVF9ORVhUKCh2YXIpLCBmaWVsZCkpCisrCisgLyoKKyAgKiBTaW5nbHktbGlua2VkIExpc3QgYWNjZXNzIG1ldGhvZHMuCisgICovCitAQCAtMjQyLDYgKzI1NywxMiBAQAorIAkoaGVhZCktPnN0cWhfbGFzdCA9ICYoZWxtKS0+ZmllbGQuc3RxZV9uZXh0OwkJCVwKKyB9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKyAKKysjZGVmaW5lCVNUQUlMUV9MQVNUKGhlYWQsIHR5cGUsIGZpZWxkKQkJCQkJXAorKwkoU1RBSUxRX0VNUFRZKChoZWFkKSkgPwkJCQkJCVwKKysJCU5VTEwgOgkJCQkJCQlcCisrCSAgICAgICAgKChzdHJ1Y3QgdHlwZSAqKSh2b2lkICopCQkJCVwKKysJCSgoY2hhciAqKSgoaGVhZCktPnN0cWhfbGFzdCkgLSBfX29mZnNldG9mKHN0cnVjdCB0eXBlLCBmaWVsZCkpKSkKKysKKyAjZGVmaW5lCVNUQUlMUV9JTlNFUlRfQUZURVIoaGVhZCwgbGlzdGVsbSwgZWxtLCBmaWVsZCkgZG8gewkJXAorIAlpZiAoKChlbG0pLT5maWVsZC5zdHFlX25leHQgPSAobGlzdGVsbSktPmZpZWxkLnN0cWVfbmV4dCkgPT0gTlVMTClcCisgCQkoaGVhZCktPnN0cWhfbGFzdCA9ICYoZWxtKS0+ZmllbGQuc3RxZV9uZXh0OwkJXAorQEAgLTI3MSw2ICsyOTIsMTEgQEAKKyAJCSh2YXIpOwkJCQkJCQlcCisgCQkodmFyKSA9ICgodmFyKS0+ZmllbGQuc3RxZV9uZXh0KSkKKyAKKysjZGVmaW5lIFNUQUlMUV9GT1JFQUNIX1NBRkUodmFyLCBoZWFkLCBmaWVsZCwgdHZhcikJCQlcCisrCWZvciAoKHZhcikgPSBTVEFJTFFfRklSU1QoKGhlYWQpKTsJCQkJXAorKwkJKHZhcikgJiYgKCh0dmFyKSA9IFNUQUlMUV9ORVhUKCh2YXIpLCBmaWVsZCksIDEpOwlcCisrCQkodmFyKSA9ICh0dmFyKSkKKysKKyAjZGVmaW5lCVNUQUlMUV9DT05DQVQoaGVhZDEsIGhlYWQyKSBkbyB7CQkJCVwKKyAJaWYgKCFTVEFJTFFfRU1QVFkoKGhlYWQyKSkpIHsJCQkJCVwKKyAJCSooaGVhZDEpLT5zdHFoX2xhc3QgPSAoaGVhZDIpLT5zdHFoX2ZpcnN0OwkJXAorQEAgLTQzNywxMSArNDYzLDIxIEBACisgCQkodmFyKTsJCQkJCQkJXAorIAkJKHZhcikgPSAoKHZhciktPmZpZWxkLnRxZV9uZXh0KSkKKyAKKysjZGVmaW5lIFRBSUxRX0ZPUkVBQ0hfU0FGRSh2YXIsIGhlYWQsIGZpZWxkLCB0dmFyKQkJCVwKKysJZm9yICgodmFyKSA9IFRBSUxRX0ZJUlNUKChoZWFkKSk7CQkJCVwKKysJCSh2YXIpICYmICgodHZhcikgPSBUQUlMUV9ORVhUKCh2YXIpLCBmaWVsZCksIDEpOwlcCisrCQkodmFyKSA9ICh0dmFyKSkKKysKKyAjZGVmaW5lCVRBSUxRX0ZPUkVBQ0hfUkVWRVJTRSh2YXIsIGhlYWQsIGhlYWRuYW1lLCBmaWVsZCkJCVwKKyAJZm9yICgodmFyKSA9ICgqKCgoc3RydWN0IGhlYWRuYW1lICopKChoZWFkKS0+dHFoX2xhc3QpKS0+dHFoX2xhc3QpKTsJXAorIAkJKHZhcik7CQkJCQkJCVwKKyAJCSh2YXIpID0gKCooKChzdHJ1Y3QgaGVhZG5hbWUgKikoKHZhciktPmZpZWxkLnRxZV9wcmV2KSktPnRxaF9sYXN0KSkpCisgCisrI2RlZmluZSBUQUlMUV9GT1JFQUNIX1JFVkVSU0VfU0FGRSh2YXIsIGhlYWQsIGhlYWRuYW1lLCBmaWVsZCwgdHZhcikJXAorKwlmb3IgKCh2YXIpID0gVEFJTFFfTEFTVCgoaGVhZCksIGhlYWRuYW1lKTsJCQlcCisrCQkodmFyKSAmJiAoKHR2YXIpID0gVEFJTFFfUFJFVigodmFyKSwgaGVhZG5hbWUsIGZpZWxkKSwgMSk7CVwKKysJCSh2YXIpID0gKHR2YXIpKQorKworICNkZWZpbmUJVEFJTFFfQ09OQ0FUKGhlYWQxLCBoZWFkMiwgZmllbGQpIGRvIHsJCQkJXAorIAlpZiAoIVRBSUxRX0VNUFRZKGhlYWQyKSkgewkJCQkJXAorIAkJKihoZWFkMSktPnRxaF9sYXN0ID0gKGhlYWQyKS0+dHFoX2ZpcnN0OwkJXApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS8xNjAtbWFudWFsLW5vLXBlcmwucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzE2MC1tYW51YWwtbm8tcGVybC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWI1NDE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS8xNjAtbWFudWFsLW5vLXBlcmwucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorSWYgd2UncmUgdXNpbmcgYSBjdnMgc25hcHNob3Qgd2hpY2ggdXBkYXRlcyB0aGUgc291cmNlIGZpbGVzLCBhbmQKK3BlcmwgaXNuJ3QgaW5zdGFsbGVkIHlldCwgdGhlbiB3ZSBjYW4ndCByZWdlbiB0aGUgZG9jcy4gIE5vdCBhIGJpZworZGVhbCwgc28ganVzdCB3aGluZSBhIGxpdHRsZSBhbmQgY29udGludWUgb24gb3VyIG1lcnJ5IHdheS4KKworaHR0cDovL2J1Z3MuZ2VudG9vLm9yZy82MDEzMgorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL21hbnVhbC9NYWtlZmlsZSBnbGliYy0yLjEyLjEvbWFudWFsL01ha2VmaWxlCistLS0gZ2xpYmMtMi4xMi4xLm9yaWcvbWFudWFsL01ha2VmaWxlCTIwMDYtMDEtMDggMDc6NDM6NDcuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMi4xL21hbnVhbC9NYWtlZmlsZQkyMDA5LTExLTEzIDAwOjQ5OjU0LjAwMDAwMDAwMCArMDEwMAorQEAgLTEwNCw5ICsxMDQsMTQgQEAKKyBsaWJtLWVyci50ZXhpOiBzdGFtcC1saWJtLWVycgorIHN0YW1wLWxpYm0tZXJyOiBsaWJtLWVyci10YWIucGwgJCh3aWxkY2FyZCAkKGZvcmVhY2ggZGlyLCQoc3lzZGlycyksXAorIAkJCQkJCSAgICAgJChkaXIpL2xpYm0tdGVzdC11bHBzKSkKKytpZm5lcSAoJChQRVJMKSxubykKKyAJcHdkPWBwd2RgOyBcCisgCSQoUEVSTCkgJDwgJCRwd2QvLi4gPiBsaWJtLWVyci10bXAKKyAJJChtb3ZlLWlmLWNoYW5nZSkgbGlibS1lcnItdG1wIGxpYm0tZXJyLnRleGkKKytlbHNlCisrCWVjaG8gIlVuYWJsZSB0byByZWJ1aWxkIG1hdGggZG9jcywgbm8gcGVybCBpbnN0YWxsZWQiCisrCXRvdWNoIGxpYm0tZXJyLnRleGkKKytlbmRpZgorIAl0b3VjaCAkQAorIAorICMgR2VuZXJhdGUgVGV4aW5mbyBmaWxlcyBmcm9tIHRoZSBDIHNvdXJjZSBmb3IgdGhlIGV4YW1wbGUgcHJvZ3JhbXMuCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzE3MC1sb2NhbGVkZWYtZml4LXRyYW1wb2xpbmUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzE3MC1sb2NhbGVkZWYtZml4LXRyYW1wb2xpbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUwNTg0NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvMTcwLWxvY2FsZWRlZi1maXgtdHJhbXBvbGluZS5wYXRjaApAQCAtMCwwICsxLDY5IEBACisjISAvYmluL3NoIC1lCisKKyMgRFA6IERlc2NyaXB0aW9uOiBGaXggbG9jYWxlZGVmIHNlZ2ZhdWx0IHdoZW4gcnVuIHVuZGVyIGV4ZWMtc2hpZWxkLAorIyAgICAgICAgUGFYIG9yIHNpbWlsYXIuICgjMjMxNDM4LCAjMTk4MDk5KQorIyBEUDogRHBhdGNoIEF1dGhvcjogSmFtZXMgVHJvdXAgPGphbWVzQG5vY3Jldy5vcmc+CisjIERQOiBQYXRjaCBBdXRob3I6IChwcm9iYWJseSkgSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4KKyMgRFA6IFVwc3RyZWFtIHN0YXR1czogVW5rbm93bgorIyBEUDogU3RhdHVzIERldGFpbHM6IFVua25vd24KKyMgRFA6IERhdGU6IDIwMDQtMDMtMTYKKworaWYgWyAkIyAtbmUgMiBdOyB0aGVuCisgICAgZWNobyA+JjIgImBiYXNlbmFtZSAkMGA6IHNjcmlwdCBleHBlY3RzIC1wYXRjaHwtdW5wYXRjaCBhcyBhcmd1bWVudCIKKyAgICBleGl0IDEKK2ZpCitjYXNlICIkMSIgaW4KKyAgICAtcGF0Y2gpIHBhdGNoIC1kICIkMiIgLWYgLS1uby1iYWNrdXAtaWYtbWlzbWF0Y2ggLXAxIDwgJDA7OworICAgIC11bnBhdGNoKSBwYXRjaCAtZCAiJDIiIC1mIC0tbm8tYmFja3VwLWlmLW1pc21hdGNoIC1SIC1wMSA8ICQwOzsKKyAgICAqKQorCWVjaG8gPiYyICJgYmFzZW5hbWUgJDBgOiBzY3JpcHQgZXhwZWN0cyAtcGF0Y2h8LXVucGF0Y2ggYXMgYXJndW1lbnQiCisJZXhpdCAxCitlc2FjCitleGl0IDAKKworZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9sb2NhbGUvcHJvZ3JhbXMvM2xldmVsLmggZ2xpYmMtMi4xMi4xL2xvY2FsZS9wcm9ncmFtcy8zbGV2ZWwuaAorLS0tIGdsaWJjLTIuMTIuMS5vcmlnL2xvY2FsZS9wcm9ncmFtcy8zbGV2ZWwuaAkyMDA3LTA3LTE2IDAyOjU0OjU5LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTIuMS9sb2NhbGUvcHJvZ3JhbXMvM2xldmVsLmgJMjAwOS0xMS0xMyAwMDo0OTo1Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMDMsNiArMjAzLDQyIEBACisgCX0KKyAgICAgfQorIH0KKysKKysvKiBHQ0MgQVRNIHNlZW1zIHRvIGRvIGEgcG9vciBqb2Igd2l0aCBwb2ludGVycyB0byBuZXN0ZWQgZnVuY3Rpb25zIHBhc3NlZAorKyAgIHRvIGlubGluZWQgZnVuY3Rpb25zLiAgSGVscCBpdCBhIGxpdHRsZSBiaXQgd2l0aCB0aGlzIGhhY2suICAqLworKyNkZWZpbmUgd2NoZWFkX3RhYmxlX2l0ZXJhdGUodHAsIGZuKSBcCisrZG8JCQkJCQkJCQkgICAgICBcCisrICB7CQkJCQkJCQkJICAgICAgXAorKyAgICBzdHJ1Y3Qgd2NoZWFkX3RhYmxlICp0ID0gKHRwKTsJCQkJCSAgICAgIFwKKysgICAgdWludDMyX3QgaW5kZXgxOwkJCQkJCQkgICAgICBcCisrICAgIGZvciAoaW5kZXgxID0gMDsgaW5kZXgxIDwgdC0+bGV2ZWwxX3NpemU7IGluZGV4MSsrKQkJCSAgICAgIFwKKysgICAgICB7CQkJCQkJCQkJICAgICAgXAorKwl1aW50MzJfdCBsb29rdXAxID0gdC0+bGV2ZWwxW2luZGV4MV07CQkJCSAgICAgIFwKKysJaWYgKGxvb2t1cDEgIT0gKCh1aW50MzJfdCkgfjApKQkJCQkJICAgICAgXAorKwkgIHsJCQkJCQkJCSAgICAgIFwKKysJICAgIHVpbnQzMl90IGxvb2t1cDFfc2hpZnRlZCA9IGxvb2t1cDEgPDwgdC0+cTsJCQkgICAgICBcCisrCSAgICB1aW50MzJfdCBpbmRleDI7CQkJCQkJICAgICAgXAorKwkgICAgZm9yIChpbmRleDIgPSAwOyBpbmRleDIgPCAoMSA8PCB0LT5xKTsgaW5kZXgyKyspCQkgICAgICBcCisrCSAgICAgIHsJCQkJCQkJCSAgICAgIFwKKysJCXVpbnQzMl90IGxvb2t1cDIgPSB0LT5sZXZlbDJbaW5kZXgyICsgbG9va3VwMV9zaGlmdGVkXTsJICAgICAgXAorKwkJaWYgKGxvb2t1cDIgIT0gKCh1aW50MzJfdCkgfjApKQkJCQkgICAgICBcCisrCQkgIHsJCQkJCQkJICAgICAgXAorKwkJICAgIHVpbnQzMl90IGxvb2t1cDJfc2hpZnRlZCA9IGxvb2t1cDIgPDwgdC0+cDsJCSAgICAgIFwKKysJCSAgICB1aW50MzJfdCBpbmRleDM7CQkJCQkgICAgICBcCisrCQkgICAgZm9yIChpbmRleDMgPSAwOyBpbmRleDMgPCAoMSA8PCB0LT5wKTsgaW5kZXgzKyspCSAgICAgIFwKKysJCSAgICAgIHsJCQkJCQkJICAgICAgXAorKwkJCXN0cnVjdCBlbGVtZW50X3QgKmxvb2t1cDMJCQkgICAgICBcCisrCQkJICA9IHQtPmxldmVsM1tpbmRleDMgKyBsb29rdXAyX3NoaWZ0ZWRdOwkgICAgICBcCisrCQkJaWYgKGxvb2t1cDMgIT0gTlVMTCkJCQkJICAgICAgXAorKwkJCSAgZm4gKCgoKGluZGV4MSA8PCB0LT5xKSArIGluZGV4MikgPDwgdC0+cCkgKyBpbmRleDMsIFwKKysJCQkgICAgICBsb29rdXAzKTsJCQkJCSAgICAgIFwKKysJCSAgICAgIH0JCQkJCQkJICAgICAgXAorKwkJICB9CQkJCQkJCSAgICAgIFwKKysJICAgICAgfQkJCQkJCQkJICAgICAgXAorKwkgIH0JCQkJCQkJCSAgICAgIFwKKysgICAgICB9CQkJCQkJCQkJICAgICAgXAorKyAgfSB3aGlsZSAoMCkKKysKKyAjZW5kaWYKKyAKKyAjaWZuZGVmIE5PX0ZJTkFMSVpFCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzE4MC1yZXNvbHYtZHluYW1pYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvMTgwLXJlc29sdi1keW5hbWljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNzRhNTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzE4MC1yZXNvbHYtZHluYW1pYy5wYXRjaApAQCAtMCwwICsxLDM5IEBACityaXBwZWQgZnJvbSBTdVNFCisKK2lmIC9ldGMvcmVzb2x2LmNvbmYgaXMgdXBkYXRlZCwgdGhlbiBtYWtlIHN1cmUgYXBwbGljYXRpb25zCithbHJlYWR5IHJ1bm5pbmcgZ2V0IHRoZSB1cGRhdGVkIGluZm9ybWF0aW9uLgorCitodHRwOi8vYnVncy5nZW50b28ub3JnLzE3NzQxNgorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL3Jlc29sdi9yZXNfbGliYy5jIGdsaWJjLTIuMTIuMS9yZXNvbHYvcmVzX2xpYmMuYworLS0tIGdsaWJjLTIuMTIuMS5vcmlnL3Jlc29sdi9yZXNfbGliYy5jCTIwMDktMDItMDcgMDU6Mjc6NDIuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMi4xL3Jlc29sdi9yZXNfbGliYy5jCTIwMDktMTEtMTMgMDA6NDk6NTkuMDAwMDAwMDAwICswMTAwCitAQCAtMjIsNiArMjIsNyBAQAorICNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKyAjaW5jbHVkZSA8cmVzb2x2Lmg+CisgI2luY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgCisgCisgLyogVGhlIGZvbGxvd2luZyBiaXQgaXMgY29waWVkIGZyb20gcmVzX2RhdGEuYyAod2hlcmUgaXQgaXMgI2lmZGVmJ2VkCitAQCAtOTUsNiArOTYsMjAgQEAKKyBfX3Jlc19tYXliZV9pbml0IChyZXNfc3RhdGUgcmVzcCwgaW50IHByZWluaXQpCisgeworIAlpZiAocmVzcC0+b3B0aW9ucyAmIFJFU19JTklUKSB7CisrCQlzdGF0aWMgdGltZV90IGxhc3RfbXRpbWUsIGxhc3RfY2hlY2s7CisrCQl0aW1lX3Qgbm93OworKwkJc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKysJCQorKwkJdGltZSAoJm5vdyk7CisrCQlpZiAobm93ICE9IGxhc3RfY2hlY2spIHsKKysJCQlsYXN0X2NoZWNrID0gbm93OworKwkJCWlmIChzdGF0IChfUEFUSF9SRVNDT05GLCAmc3RhdGJ1ZikgPT0gMCAmJiBsYXN0X210aW1lICE9IHN0YXRidWYuc3RfbXRpbWUpIHsKKysJCQkJbGFzdF9tdGltZSA9IHN0YXRidWYuc3RfbXRpbWU7CisrCQkJCWF0b21pY2luY2xvY2sgKGxvY2spOworKwkJCQlhdG9taWNpbmMgKF9fcmVzX2luaXRzdGFtcCk7CisrCQkJCWF0b21pY2luY3VubG9jayAobG9jayk7CisrCQkJfQorKwkJfQorIAkJaWYgKF9fcmVzX2luaXRzdGFtcCAhPSByZXNwLT5fdS5fZXh0LmluaXRzdGFtcCkgeworIAkJCWlmIChyZXNwLT5uc2NvdW50ID4gMCkKKyAJCQkJX19yZXNfaWNsb3NlIChyZXNwLCB0cnVlKTsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvMTkwLWxvY2FsZWRlZi1tbWFwLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS8xOTAtbG9jYWxlZGVmLW1tYXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI0ZWQ4MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvMTkwLWxvY2FsZWRlZi1tbWFwLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK3NuaXBlZCBmcm9tIERlYmlhbgoraHR0cDovL2J1Z3MuZ2VudG9vLm9yZy8yODk2MTUKKworMjAwOS0xMC0yNyAgQXVyZWxpZW4gSmFybm8gIDxhdXJlbGllbkBhdXJlbDMyLm5ldD4KKworCSogbG9jYWxlL3Byb2dyYW1zL2xvY2FyY2hpdmUuYzogdXNlIE1NQVBfU0hBUkVEIHRvIHJlc2VydmUgbWVtb3J5CisJdXNlZCBsYXRlciB3aXRoIE1NQVBfRklYRUQgfCBNTUFQX1NIQVJFRCB0byBjb3BlIHdpdGggZGlmZmVyZW50CisJYWxpZ25tZW50IHJlc3RyaWN0aW9ucy4KKworZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9sb2NhbGUvcHJvZ3JhbXMvbG9jYXJjaGl2ZS5jIGdsaWJjLTIuMTIuMS9sb2NhbGUvcHJvZ3JhbXMvbG9jYXJjaGl2ZS5jCistLS0gZ2xpYmMtMi4xMi4xLm9yaWcvbG9jYWxlL3Byb2dyYW1zL2xvY2FyY2hpdmUuYwkyMDA5LTA0LTI3IDE2OjA3OjQ3LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTIuMS9sb2NhbGUvcHJvZ3JhbXMvbG9jYXJjaGl2ZS5jCTIwMDktMTEtMTMgMDA6NTA6MDEuMDAwMDAwMDAwICswMTAwCitAQCAtMTM0LDcgKzEzNCw3IEBACisgICBzaXplX3QgcmVzZXJ2ZWQgPSBSRVNFUlZFX01NQVBfU0laRTsKKyAgIGludCB4ZmxhZ3MgPSAwOworICAgaWYgKHRvdGFsIDwgcmVzZXJ2ZWQKKy0gICAgICAmJiAoKHAgPSBtbWFwNjQgKE5VTEwsIHJlc2VydmVkLCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sCisrICAgICAgJiYgKChwID0gbW1hcDY0IChOVUxMLCByZXNlcnZlZCwgUFJPVF9OT05FLCBNQVBfU0hBUkVEIHwgTUFQX0FOT04sCisgCQkgICAgICAgLTEsIDApKSAhPSBNQVBfRkFJTEVEKSkKKyAgICAgeGZsYWdzID0gTUFQX0ZJWEVEOworICAgZWxzZQorQEAgLTM5Niw3ICszOTYsNyBAQAorICAgc2l6ZV90IHJlc2VydmVkID0gUkVTRVJWRV9NTUFQX1NJWkU7CisgICBpbnQgeGZsYWdzID0gMDsKKyAgIGlmICh0b3RhbCA8IHJlc2VydmVkCistICAgICAgJiYgKChwID0gbW1hcDY0IChOVUxMLCByZXNlcnZlZCwgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLAorKyAgICAgICYmICgocCA9IG1tYXA2NCAoTlVMTCwgcmVzZXJ2ZWQsIFBST1RfTk9ORSwgTUFQX1NIQVJFRCB8IE1BUF9BTk9OLAorIAkJICAgICAgIC0xLCAwKSkgIT0gTUFQX0ZBSUxFRCkpCisgICAgIHhmbGFncyA9IE1BUF9GSVhFRDsKKyAgIGVsc2UKK0BAIC02MTQsNyArNjE0LDcgQEAKKyAgIGludCB4ZmxhZ3MgPSAwOworICAgdm9pZCAqcDsKKyAgIGlmIChzdC5zdF9zaXplIDwgcmVzZXJ2ZWQKKy0gICAgICAmJiAoKHAgPSBtbWFwNjQgKE5VTEwsIHJlc2VydmVkLCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sCisrICAgICAgJiYgKChwID0gbW1hcDY0IChOVUxMLCByZXNlcnZlZCwgUFJPVF9OT05FLCBNQVBfU0hBUkVEIHwgTUFQX0FOT04sCisgCQkgICAgICAgLTEsIDApKSAhPSBNQVBfRkFJTEVEKSkKKyAgICAgeGZsYWdzID0gTUFQX0ZJWEVEOworICAgZWxzZQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS8yMDAtZmFkdmlzZTY0XzY0LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS8yMDAtZmFkdmlzZTY0XzY0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZjEwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzIwMC1mYWR2aXNlNjRfNjQucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorcmlwcGVkIGZyb20gRGViaWFuCisKKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3NpeF9mYWR2aXNlLmMgfCAgIDEzICsrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvc2l4X2ZhZHZpc2UuYyBnbGliYy0yLjEyLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG9zaXhfZmFkdmlzZS5jCistLS0gZ2xpYmMtMi4xMi4xLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG9zaXhfZmFkdmlzZS5jCTIwMDMtMDgtMTcgMDI6MzY6MjIuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMi4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvc2l4X2ZhZHZpc2UuYwkyMDA5LTExLTEzIDAwOjUwOjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTM1LDYgKzM1LDE5IEBACisgICAgIHJldHVybiBJTlRFUk5BTF9TWVNDQUxMX0VSUk5PIChyZXQsIGVycik7CisgICByZXR1cm4gMDsKKyAjZWxzZQorKyMgaWZkZWYgX19OUl9mYWR2aXNlNjRfNjQKKysgIElOVEVSTkFMX1NZU0NBTExfREVDTCAoZXJyKTsgIAorKyAgaW50IHJldCA9IElOVEVSTkFMX1NZU0NBTEwgKGZhZHZpc2U2NF82NCwgZXJyLCA2LCBmZCwKKysJCQkgICAgICBfX0xPTkdfTE9OR19QQUlSICgobG9uZykgKG9mZnNldCA+PiAzMSksCisrCQkJCQkJKGxvbmcpIG9mZnNldCksCisrCQkJICAgICAgX19MT05HX0xPTkdfUEFJUiAoKGxvbmcpIChsZW4gPj4gMzEpLAorKwkJCQkJCShsb25nKSBsZW4pLAorKwkJCSAgICAgIGFkdmlzZSk7CisrICBpZiAoSU5URVJOQUxfU1lTQ0FMTF9FUlJPUl9QIChyZXQsIGVycikpCisrICAgIHJldHVybiBJTlRFUk5BTF9TWVNDQUxMX0VSUk5PIChyZXQsIGVycik7CisrICByZXR1cm4gMDsKKysjIGVsc2UKKyAgIHJldHVybiBFTk9TWVM7CisrIyBlbmRpZgorICNlbmRpZgorIH0KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvMjIwLXNlY3Rpb24tY29tbWVudHMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzIyMC1zZWN0aW9uLWNvbW1lbnRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMzU1MzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzIyMC1zZWN0aW9uLWNvbW1lbnRzLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK2h0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vbWwvYmludXRpbHMvMjAwNC0wNC9tc2cwMDY2NS5odG1sCisKK2ZpeGVzIGJ1aWxkaW5nIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcyAobGlrZSBtNjhrL2FybS9jcmlzL2V0Yy4uLikgYmVjYXVzZQoraXQgZG9lcyB0aGUgcmlnaHQgdGhpbmcKKworZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9pbmNsdWRlL2xpYmMtc3ltYm9scy5oIGdsaWJjLTIuMTIuMS9pbmNsdWRlL2xpYmMtc3ltYm9scy5oCistLS0gZ2xpYmMtMi4xMi4xLm9yaWcvaW5jbHVkZS9saWJjLXN5bWJvbHMuaAkyMDA5LTAzLTE0IDAwOjUxOjQ2LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTIuMS9pbmNsdWRlL2xpYmMtc3ltYm9scy5oCTIwMDktMTEtMTMgMDA6NTA6MDcuMDAwMDAwMDAwICswMTAwCitAQCAtMjM5LDEyICsyMzksMTIgQEAKKyAjICBkZWZpbmUgX19tYWtlX3NlY3Rpb25fdW5hbGxvY2F0ZWQoc2VjdGlvbl9zdHJpbmcpCisgIyBlbmRpZgorIAorLS8qIFRhY2tpbmcgb24gIlxuXHQjIiB0byB0aGUgc2VjdGlvbiBuYW1lIG1ha2VzIGdjYyBwdXQgaXQncyBib2d1cworKy8qIFRhY2tpbmcgb24gIlxuI0FQUFxuXHQjIiB0byB0aGUgc2VjdGlvbiBuYW1lIG1ha2VzIGdjYyBwdXQgaXQncyBib2d1cworICAgIHNlY3Rpb24gYXR0cmlidXRlcyBvbiB3aGF0IGxvb2tzIGxpa2UgYSBjb21tZW50IHRvIHRoZSBhc3NlbWJsZXIuICAqLworICMgaWZkZWYgSEFWRV9TRUNUSU9OX1FVT1RFUworLSMgIGRlZmluZSBfX3NlY19jb21tZW50ICJcIlxuXHQjXCIiCisrIyAgZGVmaW5lIF9fc2VjX2NvbW1lbnQgIlwiXG4jQVBQXG5cdCNcIiIKKyAjIGVsc2UKKy0jICBkZWZpbmUgX19zZWNfY29tbWVudCAiXG5cdCMiCisrIyAgZGVmaW5lIF9fc2VjX2NvbW1lbnQgIlxuI0FQUFxuXHQjIgorICMgZW5kaWYKKyAjIGRlZmluZSBsaW5rX3dhcm5pbmcoc3ltYm9sLCBtc2cpIFwKKyAgIF9fbWFrZV9zZWN0aW9uX3VuYWxsb2NhdGVkICgiLmdudS53YXJuaW5nLiIgI3N5bWJvbCkgXApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS8yMzAtbm8taW5saW5lLWdtb24ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzIzMC1uby1pbmxpbmUtZ21vbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTRmYjc5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS8yMzAtbm8taW5saW5lLWdtb24ucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAoraHR0cDovL2J1Z3MuZ2VudG9vLm9yZy8xOTYyNDUKK2h0dHA6Ly9zb3VyY2V3YXJlLm9yZy9tbC9saWJjLWFscGhhLzIwMDYtMDUvbXNnMDAwMTcuaHRtbAorCitBdHRhY2hlZCBpcyBhIHBhdGNoIHRvIGFkZCBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKSB0bworY2FsbF9nbW9uX3N0YXJ0LgorCitXaXRob3V0IHRoaXMgcGF0Y2gsIHRoZSBzZWMgc2NyaXB0IHRoYXQgcHJvY2Vzc2VkIGluaXRmaW5pLnMgcmVtb3ZlcyBhCitwYXJ0IG9mIGlubGluZWQgY2FsbF9nbW9uX3N0YXJ0LCBjYXVzaW5nIHVuZGVmaW5lZCBsYWJlbCBlcnJvcnMuCisKK1RoaXMgcGF0Y2ggc29sdmVzIHRoZSBwcm9ibGVtIGJ5IGZvcmNpbmcgZ2NjIG5vdCB0byBpbmxpbmUKK2NhbGxfZ21vbl9zdGFydCB3aXRoIF9fYXR0cmlidXRlX18gKChub2lubGluZSkpLgorCitUZXN0ZWQgYnkgYnVpbGRpbmcgZm9yIGFybS1ub25lLWxpeHV4LWdudWVhYmkuICBPSyB0byBhcHBseT8KKworS2F6dSBIaXJhdGEKKworMjAwNi0wNS0wNyAgS2F6dSBIaXJhdGEgICZsdDtrYXp1QGNvZGVzb3VyY2VyeS5jb20mZ3Q7CisKKwkqIHN5c2RlcHMvZ2VuZXJpYy9pbml0ZmluaS5jIChjYWxsX2dtb25fc3RhcnQpOiBBZGQKKwlfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKS4KKworSW5kZXg6IHN5c2RlcHMvZ2VuZXJpYy9pbml0ZmluaS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvc3lzZGVwcy9nZW5lcmljL2luaXRmaW5pLmMgZ2xpYmMtMi4xMi4xL3N5c2RlcHMvZ2VuZXJpYy9pbml0ZmluaS5jCistLS0gZ2xpYmMtMi4xMi4xLm9yaWcvc3lzZGVwcy9nZW5lcmljL2luaXRmaW5pLmMJMjAwNy0wNi0xNyAyMDowMjo0MC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEyLjEvc3lzZGVwcy9nZW5lcmljL2luaXRmaW5pLmMJMjAwOS0xMS0xMyAwMDo1MDowOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC03MCw3ICs3MCw3IEBACisgLyogVGhlIGJlZ2lubmluZyBvZiBfaW5pdDogICovCisgYXNtICgiXG4vKkBfaW5pdF9QUk9MT0dfQkVHSU5TKi8iKTsKKyAKKy1zdGF0aWMgdm9pZAorK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18gKChub2lubGluZSkpCisgY2FsbF9nbW9uX3N0YXJ0KHZvaWQpCisgeworICAgZXh0ZXJuIHZvaWQgX19nbW9uX3N0YXJ0X18gKHZvaWQpIF9fYXR0cmlidXRlX18gKCh3ZWFrKSk7IC8qd2Vha19leHRlcm4gKF9fZ21vbl9zdGFydF9fKTsqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS8yNDAtY2hlY2tfbmF0aXZlLWhlYWRlcnMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzI0MC1jaGVja19uYXRpdmUtaGVhZGVycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTBjYjViCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS8yNDAtY2hlY2tfbmF0aXZlLWhlYWRlcnMucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorbWFueSBwb3J0cyBoaXQgdGhpcyB3YXJuaW5nOgorLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvY2hlY2tfbmF0aXZlLmM6NDY6IHdhcm5pbmc6IGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9uICdtZW1zZXQnCisuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9jaGVja19uYXRpdmUuYzo0Njogd2FybmluZzogaW1wbGljaXQgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb24gJ21lbXNldCcKKworc25pcHBlZCBmcm9tIHN1c2UKKworZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9jaGVja19uYXRpdmUuYyBnbGliYy0yLjEyLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvY2hlY2tfbmF0aXZlLmMKKy0tLSBnbGliYy0yLjEyLjEub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9jaGVja19uYXRpdmUuYwkyMDA3LTExLTI0IDA0OjEyOjE3LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTIuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9jaGVja19uYXRpdmUuYwkyMDA5LTExLTEzIDAwOjUwOjExLjAwMDAwMDAwMCArMDEwMAorQEAgLTIzLDYgKzIzLDcgQEAKKyAjaW5jbHVkZSA8c3RkZGVmLmg+CisgI2luY2x1ZGUgPHN0ZGludC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHRpbWUuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPG5ldC9pZi5oPgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS8yNTAtZml4LXByNjMxLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS8yNTAtZml4LXByNjMxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNWIzNDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzI1MC1maXgtcHI2MzEucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorRnJvbSBkYW5rQGtlZ2VsLmNvbQorV2VkIEp1biAxNSAwOToxMjo0MyBQRFQgMjAwNQorCitGaXhlcworCitidWlsZC1nbGliYy9saWJjLmEobnNzd2l0Y2gubykoLmRhdGErMHg2NCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9uc3NfZmlsZXNfZ2V0YWxpYXNlbnRfcicKK2J1aWxkLWdsaWJjL2xpYmMuYShuc3N3aXRjaC5vKSguZGF0YSsweDZjKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX25zc19maWxlc19lbmRhbGlhc2VudCcKKy4uLiA1MyBsaW5lcyBkZWxldGVkIC4uLgorYnVpbGQtZ2xpYmMvbGliYy5hKG5zc3dpdGNoLm8pKC5kYXRhKzB4MjFjKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX25zc19maWxlc19nZXRzcG5hbV9yJworY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKK21ha2VbMl06ICoqKiBbL2J1aWxkL2djYy0zLjQuMy1nbGliYy0yLjMuNS1oZHJzLTIuNi4xMS4yL2k2ODYtdW5rbm93bi1saW51eC1nbnUvYnVpbGQtZ2xpYmMvZWxmL2xkY29uZmlnXSBFcnJvciAxCisKK3doZW4gYnVpbGRpbmcgZ2xpYmMgd2l0aCAtLWVuYWJsZS1zdGF0aWMtbnNzLgorCitTZWUgaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NjMxCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvTWFrZWNvbmZpZyBnbGliYy0yLjEyLjEvTWFrZWNvbmZpZworLS0tIGdsaWJjLTIuMTIuMS5vcmlnL01ha2Vjb25maWcJMjAwOS0xMS0xMyAwMDo0OTo0MS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEyLjEvTWFrZWNvbmZpZwkyMDA5LTExLTEzIDAwOjUwOjEzLjAwMDAwMDAwMCArMDEwMAorQEAgLTUzMSw3ICs1MzEsNyBAQAorIAorICMgVGhlIHN0YXRpYyBsaWJyYXJpZXMuCisgaWZlcSAoeWVzLCQoYnVpbGQtc3RhdGljKSkKKy1saW5rLWxpYmMtc3RhdGljID0gJChjb21tb24tb2JqcGZ4KWxpYmMuYSAkKHN0YXRpYy1nbnVsaWIpICQoY29tbW9uLW9ianBmeClsaWJjLmEKKytsaW5rLWxpYmMtc3RhdGljID0gJChjb21tb24tb2JqcGZ4KWxpYmMuYSAkKHN0YXRpYy1nbnVsaWIpICQob3RoZXJsaWJzKSAkKGNvbW1vbi1vYmpwZngpbGliYy5hCisgZWxzZQorIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgIyBXZSBjYW4gdHJ5IHRvIGxpbmsgdGhlIHByb2dyYW1zIHdpdGggbGliKl9waWMuYS4uLgorZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9lbGYvTWFrZWZpbGUgZ2xpYmMtMi4xMi4xL2VsZi9NYWtlZmlsZQorLS0tIGdsaWJjLTIuMTIuMS5vcmlnL2VsZi9NYWtlZmlsZQkyMDA5LTAxLTMxIDAxOjIwOjU1LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTIuMS9lbGYvTWFrZWZpbGUJMjAwOS0xMS0xMyAwMDo1MDoxMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNDYsNiArMTQ2LDEzIEBACisgaW5zdGFsbC1iaW4tc2NyaXB0ID0gbGRkCisgZW5kaWYKKyAKKytpZmVxICh5ZXMsJChidWlsZC1zdGF0aWMtbnNzKSkKKytuc3NvYmpkaXIgOj0gJChwYXRzdWJzdCAuLi8kKHN1YmRpciksLiwkKGNvbW1vbi1vYmpwZngpbnNzKQorK3Jlc29sdm9iamRpciA6PSAkKHBhdHN1YnN0IC4uLyQoc3ViZGlyKSwuLCQoY29tbW9uLW9ianBmeClyZXNvbHYpCisrb3RoZXJsaWJzICs9ICQobnNzb2JqZGlyKS9saWJuc3NfZmlsZXMuYSAkKHJlc29sdm9iamRpcikvbGlibnNzX2Rucy5hIFwKKysJICAgICAkKHJlc29sdm9iamRpcikvbGlicmVzb2x2LmEKKytlbmRpZgorKworIG90aGVycwkJPSBzcHJvZiBzbG4KKyBpbnN0YWxsLWJpbgk9IHNwcm9mCisgb3RoZXJzLXN0YXRpYyAgID0gc2xuCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzI2MC1hc3N1bWUtcGlwZTIucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzI2MC1hc3N1bWUtcGlwZTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg0Zjg4MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvMjYwLWFzc3VtZS1waXBlMi5wYXRjaApAQCAtMCwwICsxLDQwIEBACitodHRwOi8vYnVncy5nZW50b28ub3JnLzI1MDM0MgoraHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9OTY4NQorCit3ZSBjYW50IGFzc3VtZSBzb2NrX2Nsb2V4ZWMgYW5kIHBpcGUyIGFyZSBib3VuZCB0b2dldGhlciBhcyB0aGUgZm9ybWVyIGRlZmluZXMKK2FyZSBmb3VuZCBpbiBnbGliYyBvbmx5IHdoaWxlIHRoZSBsYXR0ZXIgYXJlIGEgY29tYm8gb2Yga2VybmVsIGhlYWRlcnMgYW5kCitnbGliYy4gIHNvIGlmIHdlIGRvIGEgcnVudGltZSBkZXRlY3Rpb24gb2YgU09DS19DTE9FWEVDLCBidXQgcGlwZTIoKSBpcyBhIHN0dWIKK2luc2lkZSBvZiBnbGliYywgd2UgaGl0IGEgcHJvYmxlbS4gIGZvciBleGFtcGxlOgorCisjaW5jbHVkZSA8Z3JwLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KK21haW4oKQoreworCWdldGdybmFtKCJwb3J0YWdlIik7CisJaWYgKCFwb3BlbigibHMiLCAiciIpKQorCQlwZXJyb3IoInBvcGVuKCkiKTsKK30KKworZ2V0Z3JuYW0oKSB3aWxsIGRldGVjdCB0aGF0IHRoZSBrZXJuZWwgc3VwcG9ydHMgU09DS19DTE9FWEVDIGFuZCB0aGVuIHNldCBib3RoCitfX2hhdmVfc29ja19jbG9leGVjIGFuZCBfX2hhdmVfcGlwZTIgdG8gdHJ1ZS4gIGJ1dCBpZiBnbGliYyB3YXMgYnVpbHQgYWdhaW5zdAorb2xkZXIga2VybmVsIGhlYWRlcnMgd2hlcmUgX19OUl9waXBlMiBkb2VzIG5vdCBleGlzdCwgZ2xpYmMgd2lsbCBoYXZlIGEgRU5PU1lTCitzdHViIGZvciBpdC4gIHNvIHBvcGVuKCkgd2lsbCBhbHdheXMgZmFpbCBhcyBnbGliYyBhc3N1bWVzIHBpcGUyKCkgd29ya3MuCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvc29ja2V0L2hhdmVfc29ja19jbG9leGVjLmMgZ2xpYmMtMi4xMi4xL3NvY2tldC9oYXZlX3NvY2tfY2xvZXhlYy5jCistLS0gZ2xpYmMtMi4xMi4xLm9yaWcvc29ja2V0L2hhdmVfc29ja19jbG9leGVjLmMJMjAwOC0wNy0yNSAxODo0NjoyMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEyLjEvc29ja2V0L2hhdmVfc29ja19jbG9leGVjLmMJMjAwOS0xMS0xMyAwMDo1MDoxNS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNiw5ICsxNiwxNCBAQAorICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAgMDIxMTEtMTMwNyBVU0EuICAqLworIAorKyNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgI2luY2x1ZGUgPGtlcm5lbC1mZWF0dXJlcy5oPgorIAorICNpZiBkZWZpbmVkIFNPQ0tfQ0xPRVhFQyAmJiAhZGVmaW5lZCBfX0FTU1VNRV9TT0NLX0NMT0VYRUMKKyBpbnQgX19oYXZlX3NvY2tfY2xvZXhlYzsKKyAjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBPX0NMT0VYRUMgJiYgIWRlZmluZWQgX19BU1NVTUVfUElQRTIKKytpbnQgX19oYXZlX3BpcGUyOworKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS8yNzAtY2hpbmEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzI3MC1jaGluYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2RlMWNmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS8yNzAtY2hpbmEucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvbG9jYWxlZGF0YS9sb2NhbGVzL3poX1RXIGdsaWJjLTIuMTIuMS9sb2NhbGVkYXRhL2xvY2FsZXMvemhfVFcKKy0tLSBnbGliYy0yLjEyLjEub3JpZy9sb2NhbGVkYXRhL2xvY2FsZXMvemhfVFcJMjAwNC0xMS0wMSAwMDo0MjoyOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEyLjEvbG9jYWxlZGF0YS9sb2NhbGVzL3poX1RXCTIwMDktMTEtMTMgMDA6NTA6MTcuMDAwMDAwMDAwICswMTAwCitAQCAtMSw3ICsxLDcgQEAKKyBjb21tZW50X2NoYXIgJQorIGVzY2FwZV9jaGFyIC8KKyAlCistJSBDaGluZXNlIGxhbmd1YWdlIGxvY2FsZSBmb3IgVGFpd2FuIFIuTy5DLgorKyUgQ2hpbmVzZSBsYW5ndWFnZSBsb2NhbGUgZm9yIFRhaXdhbgorICUgY2hhcm1hcDogQklHNS1DUDk1MAorICUKKyAlIE9yaWdpbmFsIEF1dGhvcjoKK0BAIC0xNyw3ICsxNyw3IEBACisgJSBSZWZlcmVuY2U6CWh0dHA6Ly93d3dvbGQuZGt1dWcuZGsvSlRDMS9TQzIyL1dHMjAvZG9jcy9uNjkwLnBkZgorIAorIExDX0lERU5USUZJQ0FUSU9OCistdGl0bGUgICAgICAiQ2hpbmVzZSBsb2NhbGUgZm9yIFRhaXdhbiBSLk8uQy4iCisrdGl0bGUgICAgICAiQ2hpbmVzZSBsb2NhbGUgZm9yIFRhaXdhbiIKKyBzb3VyY2UgICAgICIiCisgYWRkcmVzcyAgICAiIgorIGNvbnRhY3QgICAgIiIKK0BAIC0yNSw3ICsyNSw3IEBACisgdGVsICAgICAgICAiIgorIGZheCAgICAgICAgIiIKKyBsYW5ndWFnZSAgICJDaGluZXNlIgorLXRlcnJpdG9yeSAgIlRhaXdhbiBSLk8uQy4iCisrdGVycml0b3J5ICAiVGFpd2FuIgorIHJldmlzaW9uICAgIjAuMiIKKyBkYXRlICAgICAgICIyMDAwLTA4LTAyIgorICUKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvMjgwLW5ldy12YWxlbmNpYW4tbG9jYWxlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS8yODAtbmV3LXZhbGVuY2lhbi1sb2NhbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0NmI0NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvMjgwLW5ldy12YWxlbmNpYW4tbG9jYWxlLnBhdGNoCkBAIC0wLDAgKzEsMTE1IEBACitodHRwOi8vYnVncy5nZW50b28ub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE4MTUKK2h0dHA6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MjUyMgorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL2xvY2FsZWRhdGEvU1VQUE9SVEVEIGdsaWJjLTIuMTIuMS9sb2NhbGVkYXRhL1NVUFBPUlRFRAorLS0tIGdsaWJjLTIuMTIuMS5vcmlnL2xvY2FsZWRhdGEvU1VQUE9SVEVECTIwMDktMDQtMTggMTA6NDM6NTIuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMi4xL2xvY2FsZWRhdGEvU1VQUE9SVEVECTIwMDktMTEtMTMgMDA6NTA6MjAuMDAwMDAwMDAwICswMTAwCitAQCAtNzIsNiArNzIsOCBAQAorIGNhX0VTLlVURi04L1VURi04IFwKKyBjYV9FUy9JU08tODg1OS0xIFwKKyBjYV9FU0BldXJvL0lTTy04ODU5LTE1IFwKKytjYV9FUy5VVEYtOEB2YWxlbmNpYS9VVEYtOCBcCisrY2FfRVNAdmFsZW5jaWEvSVNPLTg4NTktMTUgXAorIGNhX0ZSLlVURi04L1VURi04IFwKKyBjYV9GUi9JU08tODg1OS0xNSBcCisgY2FfSVQuVVRGLTgvVVRGLTggXAorZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9sb2NhbGVkYXRhL2xvY2FsZXMvY2FfRVNAdmFsZW5jaWEgZ2xpYmMtMi4xMi4xL2xvY2FsZWRhdGEvbG9jYWxlcy9jYV9FU0B2YWxlbmNpYQorLS0tIGdsaWJjLTIuMTIuMS5vcmlnL2xvY2FsZWRhdGEvbG9jYWxlcy9jYV9FU0B2YWxlbmNpYQkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTIuMS9sb2NhbGVkYXRhL2xvY2FsZXMvY2FfRVNAdmFsZW5jaWEJMjAwOS0xMS0xMyAwMDo1MDoyMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsOTYgQEAKKytjb21tZW50X2NoYXIgJQorK2VzY2FwZV9jaGFyICAvCisrJQorKyUgVmFsZW5jaWFuIChzb3V0aGVybiBDYXRhbGFuKSBsb2NhbGUgZm9yIFNwYWluIHdpdGggRXVybworKyUKKyslIE5vdGUgdGhhdCB0aGlzIGxvY2FsZSBpcyBhbG1vc3QgdGhlIHNhbWUgYXMgY2FfRVNAZXVyby4gIFRoZSBwb2ludCBvZiBoYXZpbmcKKyslIGEgc2VwYXJhdGUgbG9jYWxlIGlzIG9ubHkgZm9yIFBPIHRyYW5zbGF0aW9ucywgd2hpY2ggaGF2ZSBhIGxvdCBvZiBzb2NpYWwKKyslIHN1cHBvcnQgYW5kIGFyZSB2ZXJ5IGFwcHJlY2lhdGVkIGJ5IHRoZSBWYWxlbmNpYW4tc3BlYWtpbmcgY29tbXVuaXR5LgorKyUKKyslIENvbnRhY3Q6IEpvcmRpIE1hbGxhY2gKKyslIEVtYWlsOiBqb3JkaUBnbnUub3JnCisrJSBUZWw6CisrJSBGYXg6CisrJSBMYW5ndWFnZTogY2EKKyslIFRlcnJpdG9yeTogRVMKKyslIE9wdGlvbjogZXVybworKyUgUmV2aXNpb246IDEuMAorKyUgRGF0ZTogMjAwNi0wNC0wNgorKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyslIFVzZXJzOiBnZW5lcmFsCisrJSBSZXBlcnRvaXJlbWFwOiBtbmVtb25pYyxkcworKyUgQ2hhcnNldDogSVNPLTg4NTktMTUKKyslIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyslIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorKworK0xDX0lERU5USUZJQ0FUSU9OCisrdGl0bGUgICAgICAiVmFsZW5jaWFuIChzb3V0aGVybiBDYXRhbGFuKSBsb2NhbGUgZm9yIFNwYWluIHdpdGggRXVybyIKKytzb3VyY2UgICAgICIiCisrYWRkcmVzcyAgICAiIgorK2NvbnRhY3QgICAgIkpvcmRpIE1hbGxhY2giCisrZW1haWwgICAgICAiam9yZGlAZ251Lm9yZyIKKyt0ZWwgICAgICAgICIiCisrZmF4ICAgICAgICAiIgorK2xhbmd1YWdlICAgIkNhdGFsYW4iCisrdGVycml0b3J5ICAiU3BhaW4iCisrcmV2aXNpb24gICAiMS4wIgorK2RhdGUgICAgICAgIjIwMDYtMDQtMDYiCisrJQorK2NhdGVnb3J5ICAiY2FfRVNAdmFsZW5jaWE6MjAwNiI7TENfSURFTlRJRklDQVRJT04KKytjYXRlZ29yeSAgImNhX0VTQHZhbGVuY2lhOjIwMDYiO0xDX0NUWVBFCisrY2F0ZWdvcnkgICJjYV9FU0B2YWxlbmNpYToyMDA2IjtMQ19DT0xMQVRFCisrY2F0ZWdvcnkgICJjYV9FU0B2YWxlbmNpYToyMDA2IjtMQ19NT05FVEFSWQorK2NhdGVnb3J5ICAiY2FfRVNAdmFsZW5jaWE6MjAwNiI7TENfTlVNRVJJQworK2NhdGVnb3J5ICAiY2FfRVNAdmFsZW5jaWE6MjAwNiI7TENfVElNRQorK2NhdGVnb3J5ICAiY2FfRVNAdmFsZW5jaWE6MjAwNiI7TENfTUVTU0FHRVMKKytjYXRlZ29yeSAgImNhX0VTQHZhbGVuY2lhOjIwMDYiO0xDX1BBUEVSCisrY2F0ZWdvcnkgICJjYV9FU0B2YWxlbmNpYToyMDA2IjtMQ19OQU1FCisrY2F0ZWdvcnkgICJjYV9FU0B2YWxlbmNpYToyMDA2IjtMQ19BRERSRVNTCisrY2F0ZWdvcnkgICJjYV9FU0B2YWxlbmNpYToyMDA2IjtMQ19URUxFUEhPTkUKKytjYXRlZ29yeSAgImNhX0VTQHZhbGVuY2lhOjIwMDYiO0xDX01FQVNVUkVNRU5UCisrCisrRU5EIExDX0lERU5USUZJQ0FUSU9OCisrCisrTENfQ1RZUEUKKytjb3B5ICJpMThuIgorK0VORCBMQ19DVFlQRQorKworK0xDX0NPTExBVEUKKytjb3B5ICJjYV9FUyIKKytFTkQgTENfQ09MTEFURQorKworK0xDX01PTkVUQVJZCisrY29weSAiY2FfRVMiCisrRU5EIExDX01PTkVUQVJZCisrCisrTENfTlVNRVJJQworK2NvcHkgImNhX0VTIgorK0VORCBMQ19OVU1FUklDCisrCisrTENfVElNRQorK2NvcHkgImNhX0VTIgorK0VORCBMQ19USU1FCisrCisrTENfTUVTU0FHRVMKKytjb3B5ICJjYV9FUyIKKytFTkQgTENfTUVTU0FHRVMKKysKKytMQ19QQVBFUgorK2NvcHkgImNhX0VTIgorK0VORCBMQ19QQVBFUgorKworK0xDX05BTUUKKytjb3B5ICJjYV9FUyIKKytFTkQgTENfTkFNRQorKworK0xDX0FERFJFU1MKKytjb3B5ICJjYV9FUyIKKytFTkQgTENfQUREUkVTUworKworK0xDX1RFTEVQSE9ORQorK2NvcHkgImNhX0VTIgorK0VORCBMQ19URUxFUEhPTkUKKysKKytMQ19NRUFTVVJFTUVOVAorK2NvcHkgImNhX0VTIgorK0VORCBMQ19NRUFTVVJFTUVOVApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS8zMDAtbnNjZC1vbmUtZm9yay5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvMzAwLW5zY2Qtb25lLWZvcmsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdlYWU1MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvMzAwLW5zY2Qtb25lLWZvcmsucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorb25seSBmb3JrIG9uZSB0byBhc3Npc3QgaW4gc3RvcC1zdGFydC1kYWVtb24gYXNzdW1wdGlvbnMgYWJvdXQgZGFlbW9uIGJlaGF2aW9yCisKK2h0dHA6Ly9idWdzLmdlbnRvby5vcmcvMTkwNzg1CisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvbnNjZC9uc2NkLmMgZ2xpYmMtMi4xMi4xL25zY2QvbnNjZC5jCistLS0gZ2xpYmMtMi4xMi4xLm9yaWcvbnNjZC9uc2NkLmMJMjAwOS0wMi0wNiAyMToxMDoyNy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEyLjEvbnNjZC9uc2NkLmMJMjAwOS0xMS0xMyAwMDo1MDoyNC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xODIsNiArMTgyLDkgQEAKKyAgICAgICBpZiAocGlkICE9IDApCisgCWV4aXQgKDApOworIAorKyAgICAgICBpZiAod3JpdGVfcGlkIChfUEFUSF9OU0NEUElEKSA8IDApCisrCWRiZ19sb2cgKCIlczogJXMiLCBfUEFUSF9OU0NEUElELCBzdHJlcnJvciAoZXJybm8pKTsKKysKKyAgICAgICBpbnQgbnVsbGZkID0gb3BlbiAoX1BBVEhfREVWTlVMTCwgT19SRFdSKTsKKyAgICAgICBpZiAobnVsbGZkICE9IC0xKQorIAl7CitAQCAtMjMxLDEyICsyMzQsNiBAQAorIAlmb3IgKGkgPSBtaW5fY2xvc2VfZmQ7IGkgPCBnZXRkdGFibGVzaXplICgpOyBpKyspCisgCSAgY2xvc2UgKGkpOworIAorLSAgICAgIHBpZCA9IGZvcmsgKCk7CistICAgICAgaWYgKHBpZCA9PSAtMSkKKy0JZXJyb3IgKEVYSVRfRkFJTFVSRSwgZXJybm8sIF8oImNhbm5vdCBmb3JrIikpOworLSAgICAgIGlmIChwaWQgIT0gMCkKKy0JZXhpdCAoMCk7CistCisgICAgICAgc2V0c2lkICgpOworIAorICAgICAgIGlmIChjaGRpciAoIi8iKSAhPSAwKQorQEAgLTI0NSw5ICsyNDIsNiBAQAorIAorICAgICAgIG9wZW5sb2cgKCJuc2NkIiwgTE9HX0NPTlMgfCBMT0dfT0RFTEFZLCBMT0dfREFFTU9OKTsKKyAKKy0gICAgICBpZiAod3JpdGVfcGlkIChfUEFUSF9OU0NEUElEKSA8IDApCistCWRiZ19sb2cgKCIlczogJXMiLCBfUEFUSF9OU0NEUElELCBzdHJlcnJvciAoZXJybm8pKTsKKy0KKyAgICAgICBpZiAoIWluaXRfbG9nZmlsZSAoKSkKKyAJZGJnX2xvZyAoXygiQ291bGQgbm90IGNyZWF0ZSBsb2cgZmlsZSIpKTsKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvMzEwLWhwcGEtbnB0bC1jYXJsb3MucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzMxMC1ocHBhLW5wdGwtY2FybG9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0N2JiNTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzMxMC1ocHBhLW5wdGwtY2FybG9zLnBhdGNoCkBAIC0wLDAgKzEsMjQ2IEBACisKKworZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9lbGYvcnRsZC5jIGdsaWJjLTIuMTIuMS9lbGYvcnRsZC5jCistLS0gZ2xpYmMtMi4xMi4xLm9yaWcvZWxmL3J0bGQuYwkyMDA5LTA0LTE3IDAyOjAwOjA4LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTIuMS9lbGYvcnRsZC5jCTIwMDktMTEtMTMgMDA6NTA6MjYuMDAwMDAwMDAwICswMTAwCitAQCAtMzkwLDE0ICszOTAsMTQgQEAKKyAgICAgIGtub3cgaXQgaXMgYXZhaWxhYmxlLiAgV2UgZG8gbm90IGhhdmUgdG8gY2xlYXIgdGhlIG1lbW9yeSBpZiB3ZQorICAgICAgZG8gbm90IGhhdmUgdG8gdXNlIHRoZSB0ZW1wb3JhcnkgYm9vdHN0cmFwX21hcC4gIEdsb2JhbCB2YXJpYWJsZXMKKyAgICAgIGFyZSBpbml0aWFsaXplZCB0byB6ZXJvIGJ5IGRlZmF1bHQuICAqLworLSNpZm5kZWYgRE9OVF9VU0VfQk9PVFNUUkFQX01BUAorKyNpZiAhZGVmaW5lZCBET05UX1VTRV9CT09UU1RSQVBfTUFQCisgIyBpZmRlZiBIQVZFX0JVSUxUSU5fTUVNU0VUCisgICBfX2J1aWx0aW5fbWVtc2V0IChib290c3RyYXBfbWFwLmxfaW5mbywgJ1wwJywgc2l6ZW9mIChib290c3RyYXBfbWFwLmxfaW5mbykpOworICMgZWxzZQorLSAgZm9yIChzaXplX3QgY250ID0gMDsKKy0gICAgICAgY250IDwgc2l6ZW9mIChib290c3RyYXBfbWFwLmxfaW5mbykgLyBzaXplb2YgKGJvb3RzdHJhcF9tYXAubF9pbmZvWzBdKTsKKy0gICAgICAgKytjbnQpCistICAgIGJvb3RzdHJhcF9tYXAubF9pbmZvW2NudF0gPSAwOworKyAgLyogQ2xlYXIgdGhlIHdob2xlIGJvb3RzdHJhcF9tYXAgc3RydWN0dXJlICovCisrICBmb3IgKGNoYXIgKmNudCA9IChjaGFyICopJihib290c3RyYXBfbWFwKTsKKysgICAgICAgY250IDwgKChjaGFyICopJihib290c3RyYXBfbWFwKSArIHNpemVvZiAoYm9vdHN0cmFwX21hcCkpOworKyAgICAgICAqY250KysgPSAnXDAnKTsKKyAjIGVuZGlmCisgIyBpZiBVU0VfX19USFJFQUQKKyAgIGJvb3RzdHJhcF9tYXAubF90bHNfbW9kaWQgPSAwOworZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9pbmNsdWRlL2F0b21pYy5oIGdsaWJjLTIuMTIuMS9pbmNsdWRlL2F0b21pYy5oCistLS0gZ2xpYmMtMi4xMi4xLm9yaWcvaW5jbHVkZS9hdG9taWMuaAkyMDA5LTAyLTA5IDAwOjQ5OjUzLjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTIuMS9pbmNsdWRlL2F0b21pYy5oCTIwMDktMTEtMTMgMDA6NTA6MjYuMDAwMDAwMDAwICswMTAwCitAQCAtMTg1LDcgKzE4NSw3IEBACisgICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX2F0ZzVfdmFsdWUgPSAobmV3dmFsdWUpOwkJCSAgICAgIFwKKyAJCQkJCQkJCQkgICAgICBcCisgICAgICBkbwkJCQkJCQkJCSAgICAgIFwKKy0gICAgICAgX19hdGc1X29sZHZhbCA9ICpfX2F0ZzVfbWVtcDsJCQkJCSAgICAgIFwKKysgICAgICAgX19hdGc1X29sZHZhbCA9ICoodm9sYXRpbGUgX190eXBlb2YgKG1lbSkpX19hdGc1X21lbXA7CQkgICAgICBcCisgICAgICB3aGlsZSAoX19idWlsdGluX2V4cGVjdAkJCQkJCSAgICAgIFwKKyAJICAgIChhdG9taWNfY29tcGFyZV9hbmRfZXhjaGFuZ2VfYm9vbF9hY3EgKF9fYXRnNV9tZW1wLCBfX2F0ZzVfdmFsdWUsIFwKKyAJCQkJCQkgICBfX2F0ZzVfb2xkdmFsKSwgMCkpOwkgICAgICBcCitAQCAtMjA2LDcgKzIwNiw3IEBACisgICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX2F0ZzZfdmFsdWUgPSAodmFsdWUpOwkJCQkgICAgICBcCisgCQkJCQkJCQkJICAgICAgXAorICAgICAgZG8JCQkJCQkJCQkgICAgICBcCistICAgICAgIF9fYXRnNl9vbGR2YWwgPSAqX19hdGc2X21lbXA7CQkJCQkgICAgICBcCisrICAgICAgIF9fYXRnNl9vbGR2YWwgPSAqKHZvbGF0aWxlIF9fdHlwZW9mIChtZW0pKV9fYXRnNl9tZW1wOwkJICAgICAgXAorICAgICAgd2hpbGUgKF9fYnVpbHRpbl9leHBlY3QJCQkJCQkgICAgICBcCisgCSAgICAoYXRvbWljX2NvbXBhcmVfYW5kX2V4Y2hhbmdlX2Jvb2xfYWNxIChfX2F0ZzZfbWVtcCwJCSAgICAgIFwKKyAJCQkJCQkgICBfX2F0ZzZfb2xkdmFsCSAgICAgIFwKK0BAIC0yMjQsNyArMjI0LDcgQEAKKyAgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fYXRnN192YWx1ZSA9ICh2YWx1ZSk7CQkJCSAgICAgIFwKKyAJCQkJCQkJCQkgICAgICBcCisgICAgICBkbwkJCQkJCQkJCSAgICAgIFwKKy0gICAgICAgX19hdGc3X29sZHYgPSAqX19hdGc3X21lbXA7CQkJCQkgICAgICBcCisrICAgICAgIF9fYXRnN19vbGR2ID0gKih2b2xhdGlsZSBfX3R5cGVvZiAobWVtKSlfX2F0ZzdfbWVtcDsJCSAgICAgIFwKKyAgICAgIHdoaWxlIChfX2J1aWx0aW5fZXhwZWN0CQkJCQkJICAgICAgXAorIAkgICAgKGNhdG9taWNfY29tcGFyZV9hbmRfZXhjaGFuZ2VfYm9vbF9hY3EgKF9fYXRnN19tZW1wLAkgICAgICBcCisgCQkJCQkJICAgIF9fYXRnN19vbGR2CQkgICAgICBcCitAQCAtMjQyLDcgKzI0Miw3IEBACisgICAgIF9fdHlwZW9mIChtZW0pIF9fYXRnOF9tZW1wID0gKG1lbSk7CQkJCQkgICAgICBcCisgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fYXRnOF92YWx1ZSA9ICh2YWx1ZSk7CQkJCSAgICAgIFwKKyAgICAgZG8gewkJCQkJCQkJICAgICAgXAorLSAgICAgIF9fYXRnOF9vbGR2YWwgPSAqX19hdGc4X21lbXA7CQkJCQkgICAgICBcCisrICAgICAgX19hdGc4X29sZHZhbCA9ICoodm9sYXRpbGUgX190eXBlb2YgKG1lbSkpX19hdGc4X21lbXA7CQkgICAgICBcCisgICAgICAgaWYgKF9fYXRnOF9vbGR2YWwgPj0gX19hdGc4X3ZhbHVlKQkJCQkgICAgICBcCisgCWJyZWFrOwkJCQkJCQkJICAgICAgXAorICAgICB9IHdoaWxlIChfX2J1aWx0aW5fZXhwZWN0CQkJCQkJICAgICAgXAorQEAgLTI1OSw3ICsyNTksNyBAQAorICAgICBfX3R5cGVvZiAobWVtKSBfX2F0ZzlfbWVtcCA9IChtZW0pOwkJCQkJICAgICAgXAorICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX2F0ZzlfdmFsdWUgPSAodmFsdWUpOwkJCQkgICAgICBcCisgICAgIGRvIHsJCQkJCQkJCSAgICAgIFwKKy0gICAgICBfX2F0Zzlfb2xkdiA9ICpfX2F0ZzlfbWVtcDsJCQkJCSAgICAgIFwKKysgICAgICBfX2F0Zzlfb2xkdiA9ICoodm9sYXRpbGUgX190eXBlb2YgKG1lbSkpX19hdGc5X21lbXA7CQkgICAgICBcCisgICAgICAgaWYgKF9fYXRnOV9vbGR2ID49IF9fYXRnOV92YWx1ZSkJCQkJCSAgICAgIFwKKyAJYnJlYWs7CQkJCQkJCQkgICAgICBcCisgICAgIH0gd2hpbGUgKF9fYnVpbHRpbl9leHBlY3QJCQkJCQkgICAgICBcCitAQCAtMjc3LDcgKzI3Nyw3IEBACisgICAgIF9fdHlwZW9mIChtZW0pIF9fYXRnMTBfbWVtcCA9IChtZW0pOwkJCQkgICAgICBcCisgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fYXRnMTBfdmFsdWUgPSAodmFsdWUpOwkJCQkgICAgICBcCisgICAgIGRvIHsJCQkJCQkJCSAgICAgIFwKKy0gICAgICBfX2F0ZzEwX29sZHZhbCA9ICpfX2F0ZzEwX21lbXA7CQkJCQkgICAgICBcCisrICAgICAgX19hdGcxMF9vbGR2YWwgPSAqKHZvbGF0aWxlIF9fdHlwZW9mIChtZW0pKV9fYXRnMTBfbWVtcDsJCSAgICAgIFwKKyAgICAgICBpZiAoX19hdGcxMF9vbGR2YWwgPD0gX19hdGcxMF92YWx1ZSkJCQkJICAgICAgXAorIAlicmVhazsJCQkJCQkJCSAgICAgIFwKKyAgICAgfSB3aGlsZSAoX19idWlsdGluX2V4cGVjdAkJCQkJCSAgICAgIFwKK0BAIC0zNjEsNyArMzYxLDcgQEAKKyAJCQkJCQkJCQkgICAgICBcCisgICAgICBkbwkJCQkJCQkJCSAgICAgIFwKKyAgICAgICAgewkJCQkJCQkJICAgICAgXAorLQkgX19hdGcxMV9vbGR2YWwgPSAqX19hdGcxMV9tZW1wOwkJCQkgICAgICBcCisrCSBfX2F0ZzExX29sZHZhbCA9ICoodm9sYXRpbGUgX190eXBlb2YgKG1lbSkpX19hdGcxMV9tZW1wOwkgICAgICBcCisgCSBpZiAoX19idWlsdGluX2V4cGVjdCAoX19hdGcxMV9vbGR2YWwgPD0gMCwgMCkpCQkJICAgICAgXAorIAkgICBicmVhazsJCQkJCQkJICAgICAgXAorICAgICAgICB9CQkJCQkJCQkgICAgICBcCitAQCAtNDAwLDcgKzQwMCw3IEBACisgICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX2F0ZzE0X21hc2sgPSAoKF9fdHlwZW9mICgqKG1lbSkpKSAxIDw8IChiaXQpKTsJICAgICAgXAorIAkJCQkJCQkJCSAgICAgIFwKKyAgICAgIGRvCQkJCQkJCQkJICAgICAgXAorLSAgICAgICBfX2F0ZzE0X29sZCA9ICgqX19hdGcxNF9tZW1wKTsJCQkJCSAgICAgIFwKKysgICAgICAgX19hdGcxNF9vbGQgPSAoKih2b2xhdGlsZSBfX3R5cGVvZiAobWVtKSlfX2F0ZzE0X21lbXApOwkJICAgICAgXAorICAgICAgd2hpbGUgKF9fYnVpbHRpbl9leHBlY3QJCQkJCQkgICAgICBcCisgCSAgICAoYXRvbWljX2NvbXBhcmVfYW5kX2V4Y2hhbmdlX2Jvb2xfYWNxIChfX2F0ZzE0X21lbXAsCSAgICAgIFwKKyAJCQkJCQkgICBfX2F0ZzE0X29sZCB8IF9fYXRnMTRfbWFzayxcCitAQCAtNDE4LDcgKzQxOCw3IEBACisgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fYXRnMTVfbWFzayA9IChtYXNrKTsJCQkJICAgICAgXAorIAkJCQkJCQkJCSAgICAgIFwKKyAgICAgZG8JCQkJCQkJCQkgICAgICBcCistICAgICAgX19hdGcxNV9vbGQgPSAoKl9fYXRnMTVfbWVtcCk7CQkJCQkgICAgICBcCisrICAgICAgX19hdGcxNV9vbGQgPSAoKih2b2xhdGlsZSBfX3R5cGVvZiAobWVtKSlfX2F0ZzE1X21lbXApOwkJICAgICAgXAorICAgICB3aGlsZSAoX19idWlsdGluX2V4cGVjdAkJCQkJCSAgICAgIFwKKyAJICAgKGF0b21pY19jb21wYXJlX2FuZF9leGNoYW5nZV9ib29sX2FjcSAoX19hdGcxNV9tZW1wLAkJICAgICAgXAorIAkJCQkJCSAgX19hdGcxNV9vbGQgJiBfX2F0ZzE1X21hc2ssIFwKK0BAIC00NTAsNyArNDUwLDcgQEAKKyAgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fYXRnMTZfbWFzayA9IChtYXNrKTsJCQkJICAgICAgXAorIAkJCQkJCQkJCSAgICAgIFwKKyAgICAgIGRvCQkJCQkJCQkJICAgICAgXAorLSAgICAgICBfX2F0ZzE2X29sZCA9ICgqX19hdGcxNl9tZW1wKTsJCQkJCSAgICAgIFwKKysgICAgICAgX19hdGcxNl9vbGQgPSAoKih2b2xhdGlsZSBfX3R5cGVvZiAobWVtKSlfX2F0ZzE2X21lbXApOwkJICAgICAgXAorICAgICAgd2hpbGUgKF9fYnVpbHRpbl9leHBlY3QJCQkJCQkgICAgICBcCisgCSAgICAoYXRvbWljX2NvbXBhcmVfYW5kX2V4Y2hhbmdlX2Jvb2xfYWNxIChfX2F0ZzE2X21lbXAsCSAgICAgIFwKKyAJCQkJCQkgICBfX2F0ZzE2X29sZCAmIF9fYXRnMTZfbWFzayxcCitAQCAtNDY4LDcgKzQ2OCw3IEBACisgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fYXRnMTdfbWFzayA9IChtYXNrKTsJCQkJICAgICAgXAorIAkJCQkJCQkJCSAgICAgIFwKKyAgICAgZG8JCQkJCQkJCQkgICAgICBcCistICAgICAgX19hdGcxN19vbGQgPSAoKl9fYXRnMTdfbWVtcCk7CQkJCQkgICAgICBcCisrICAgICAgX19hdGcxN19vbGQgPSAoKih2b2xhdGlsZSBfX3R5cGVvZiAobWVtKSlfX2F0ZzE3X21lbXApOwkJICAgICAgXAorICAgICB3aGlsZSAoX19idWlsdGluX2V4cGVjdAkJCQkJCSAgICAgIFwKKyAJICAgKGF0b21pY19jb21wYXJlX2FuZF9leGNoYW5nZV9ib29sX2FjcSAoX19hdGcxN19tZW1wLAkJICAgICAgXAorIAkJCQkJCSAgX19hdGcxN19vbGQgfCBfX2F0ZzE3X21hc2ssIFwKK0BAIC00ODQsNyArNDg0LDcgQEAKKyAgICAgX190eXBlb2YgKCoobWVtKSkgX19hdGcxOF9tYXNrID0gKG1hc2spOwkJCQkgICAgICBcCisgCQkJCQkJCQkJICAgICAgXAorICAgICBkbwkJCQkJCQkJCSAgICAgIFwKKy0gICAgICBfX2F0ZzE4X29sZCA9ICgqX19hdGcxOF9tZW1wKTsJCQkJCSAgICAgIFwKKysgICAgICBfX2F0ZzE4X29sZCA9ICgqKHZvbGF0aWxlIF9fdHlwZW9mIChtZW0pKV9fYXRnMThfbWVtcCk7CQkgICAgICBcCisgICAgIHdoaWxlIChfX2J1aWx0aW5fZXhwZWN0CQkJCQkJICAgICAgXAorIAkgICAoY2F0b21pY19jb21wYXJlX2FuZF9leGNoYW5nZV9ib29sX2FjcSAoX19hdGcxOF9tZW1wLAkgICAgICBcCisgCQkJCQkJICAgX19hdGcxOF9vbGQgfCBfX2F0ZzE4X21hc2ssXAorQEAgLTUwMCw3ICs1MDAsNyBAQAorICAgICAgX190eXBlb2YgKCoobWVtKSkgX19hdGcxOV9tYXNrID0gKG1hc2spOwkJCQkgICAgICBcCisgCQkJCQkJCQkJICAgICAgXAorICAgICAgZG8JCQkJCQkJCQkgICAgICBcCistICAgICAgIF9fYXRnMTlfb2xkID0gKCpfX2F0ZzE5X21lbXApOwkJCQkJICAgICAgXAorKyAgICAgICBfX2F0ZzE5X29sZCA9ICgqKHZvbGF0aWxlIF9fdHlwZW9mIChtZW0pKV9fYXRnMTlfbWVtcCk7CQkgICAgICBcCisgICAgICB3aGlsZSAoX19idWlsdGluX2V4cGVjdAkJCQkJCSAgICAgIFwKKyAJICAgIChhdG9taWNfY29tcGFyZV9hbmRfZXhjaGFuZ2VfYm9vbF9hY3EgKF9fYXRnMTlfbWVtcCwJICAgICAgXAorIAkJCQkJCSAgIF9fYXRnMTlfb2xkIHwgX19hdGcxOV9tYXNrLFwKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvbnB0bC9NYWtlZmlsZSBnbGliYy0yLjEyLjEvbnB0bC9NYWtlZmlsZQorLS0tIGdsaWJjLTIuMTIuMS5vcmlnL25wdGwvTWFrZWZpbGUJMjAwOC0xMS0xMiAxNDozODoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEyLjEvbnB0bC9NYWtlZmlsZQkyMDA5LTExLTEzIDAwOjUwOjI2LjAwMDAwMDAwMCArMDEwMAorQEAgLTI2NCw5ICsyNjQsOSBAQAorICMgRmlsZXMgd2hpY2ggbXVzdCBub3QgYmUgbGlua2VkIHdpdGggbGlicHRocmVhZC4KKyB0ZXN0cy1ub2xpYnB0aHJlYWQgPSB0c3QtdW5sb2FkCisgCistIyBUaGlzIHNldHMgdGhlIHN0YWNrIHJlc291cmNlIGxpbWl0IHRvIDEwMjNrYiwgd2hpY2ggaXMgbm90IGEgbXVsdGlwbGUKKy0jIG9mIHRoZSBwYWdlIHNpemUgc2luY2UgZXZlcnkgYXJjaGl0ZWN0dXJlJ3MgcGFnZSBzaXplIGlzID4gMWsuCistdHN0LW9kZHN0YWNrbGltaXQtRU5WID0gOyB1bGltaXQgLXMgMTAyMzsKKysjIFRoaXMgc2V0cyB0aGUgc3RhY2sgcmVzb3VyY2UgbGltaXQgdG8gODE5M2tiLCB3aGljaCBpcyBub3QgYSBtdWx0aXBsZQorKyMgb2YgdGhlIHBhZ2Ugc2l6ZSBzaW5jZSBldmVyeSBhcmNoaXRlY3R1cmUncyBwYWdlIHNpemUgaXMgNDA5NiBieXRlcy4KKyt0c3Qtb2Rkc3RhY2tsaW1pdC1FTlYgPSA7IHVsaW1pdCAtcyA4MTkzOworIAorIGRpc3RyaWJ1dGUgPSBlaW50ci5jIHRzdC1jbGVhbnVwNGF1eC5jCisgCitAQCAtNDI1LDYgKzQyNSwzNSBAQAorIENGTEFHUy10c3QtY2xlYW51cHg0LmMgKz0gLWZleGNlcHRpb25zCisgQ0ZMQUdTLXRzdC1vbmNleDMuYyArPSAtZmV4Y2VwdGlvbnMKKyBDRkxBR1MtdHN0LW9uY2V4NC5jICs9IC1mZXhjZXB0aW9ucworKworK2xkZmxhZ3MtbGliZ2NjX3MgPSAtLWFzLW5lZWRlZCAtbGdjY19zIC0tbm8tYXMtbmVlZGVkCisrTERGTEFHUy10c3QtY2FuY2VseDIgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNhbmNlbHgzICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4NCArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2FuY2VseDUgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNhbmNlbHg2ICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4NyArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2FuY2VseDggKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNhbmNlbHg5ICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4MTAgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNhbmNlbHgxMSArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2FuY2VseDEyICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4MTMgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNhbmNlbHgxNCArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2FuY2VseDE1ICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4MTYgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNhbmNlbHgxNyArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2FuY2VseDE4ICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4MjAgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNhbmNlbHgyMSArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2xlYW51cHgwICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jbGVhbnVweDEgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNsZWFudXB4MiArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2xlYW51cHgzICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jbGVhbnVweDQgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LW9uY2V4MyArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3Qtb25jZXg0ICs9ICQobGRmbGFncy1saWJnY2NfcykKKysKKyBDRkxBR1MtdHN0LWFsaWduLmMgKz0gJChzdGFjay1hbGlnbi10ZXN0LWZsYWdzKQorIENGTEFHUy10c3QtYWxpZ24zLmMgKz0gJChzdGFjay1hbGlnbi10ZXN0LWZsYWdzKQorIENGTEFHUy10c3QtaW5pdGlhbGl6ZXJzMS5jID0gLVcgLVdhbGwgLVdlcnJvcgorZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9ucHRsL3B0aHJlYWRfYmFycmllcl93YWl0LmMgZ2xpYmMtMi4xMi4xL25wdGwvcHRocmVhZF9iYXJyaWVyX3dhaXQuYworLS0tIGdsaWJjLTIuMTIuMS5vcmlnL25wdGwvcHRocmVhZF9iYXJyaWVyX3dhaXQuYwkyMDA3LTA4LTAxIDA2OjE4OjUwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTIuMS9ucHRsL3B0aHJlYWRfYmFycmllcl93YWl0LmMJMjAwOS0xMS0xMyAwMDo1MDoyNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC02NCw3ICs2NCw3IEBACisgICAgICAgZG8KKyAJbGxsX2Z1dGV4X3dhaXQgKCZpYmFycmllci0+Y3Vycl9ldmVudCwgZXZlbnQsCisgCQkJaWJhcnJpZXItPnByaXZhdGUgXiBGVVRFWF9QUklWQVRFX0ZMQUcpOworLSAgICAgIHdoaWxlIChldmVudCA9PSBpYmFycmllci0+Y3Vycl9ldmVudCk7CisrICAgICAgd2hpbGUgKGV2ZW50ID09ICoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopJmliYXJyaWVyLT5jdXJyX2V2ZW50KTsKKyAgICAgfQorIAorICAgLyogTWFrZSBzdXJlIHRoZSBpbml0X2NvdW50IGlzIHN0b3JlZCBsb2NhbGx5IG9yIGluIGEgcmVnaXN0ZXIuICAqLworZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9ucHRsL3N5c2RlcHMvcHRocmVhZC9NYWtlZmlsZSBnbGliYy0yLjEyLjEvbnB0bC9zeXNkZXBzL3B0aHJlYWQvTWFrZWZpbGUKKy0tLSBnbGliYy0yLjEyLjEub3JpZy9ucHRsL3N5c2RlcHMvcHRocmVhZC9NYWtlZmlsZQkyMDA2LTAyLTI4IDA4OjA5OjQxLjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTIuMS9ucHRsL3N5c2RlcHMvcHRocmVhZC9NYWtlZmlsZQkyMDA5LTExLTEzIDAwOjUwOjI2LjAwMDAwMDAwMCArMDEwMAorQEAgLTMzLDcgKzMzLDkgQEAKKyAKKyBpZmVxICgkKGhhdmUtZm9yY2VkLXVud2luZCkseWVzKQorIHRlc3RzICs9IHRzdC1tcXVldWU4eAorK2xkZmxhZ3MtbGliZ2NjX3MgPSAtLWFzLW5lZWRlZCAtbGdjY19zIC0tbm8tYXMtbmVlZGVkCisgQ0ZMQUdTLXRzdC1tcXVldWU4eC5jICs9IC1mZXhjZXB0aW9ucworK0xERkxBR1MtdHN0LW1xdWV1ZTh4ICs9ICQobGRmbGFncy1saWJnY2NfcykgCisgZW5kaWYKKyBlbmRpZgorIAorZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9zdGRpby1jb21tb24vTWFrZWZpbGUgZ2xpYmMtMi4xMi4xL3N0ZGlvLWNvbW1vbi9NYWtlZmlsZQorLS0tIGdsaWJjLTIuMTIuMS5vcmlnL3N0ZGlvLWNvbW1vbi9NYWtlZmlsZQkyMDA5LTA0LTExIDA3OjI5OjU2LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTIuMS9zdGRpby1jb21tb24vTWFrZWZpbGUJMjAwOS0xMS0xMyAwMDo1MDoyNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC04Miw3ICs4Miw3IEBACisgCSQoU0hFTEwpIC1lIHRzdC1wcmludGYuc2ggJChjb21tb24tb2JqcGZ4KSAnJChydW4tcHJvZ3JhbS1wcmVmaXgpJworIGVuZGlmCisgCistQ0ZMQUdTLXZmcHJpbnRmLmMgPSAtV25vLXVuaW5pdGlhbGl6ZWQKKytDRkxBR1MtdmZwcmludGYuYyA9IC1Xbm8tdW5pbml0aWFsaXplZCAtZm5vLWRlbGF5ZWQtYnJhbmNoCisgQ0ZMQUdTLXZmd3ByaW50Zi5jID0gLVduby11bmluaXRpYWxpemVkCisgQ0ZMQUdTLXRzdC1wcmludGYuYyA9IC1Xbm8tZm9ybWF0CisgQ0ZMQUdTLXRzdGRpb21pc2MuYyA9IC1Xbm8tZm9ybWF0CitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL3N1bnJwYy9jbG50X3VkcC5jIGdsaWJjLTIuMTIuMS9zdW5ycGMvY2xudF91ZHAuYworLS0tIGdsaWJjLTIuMTIuMS5vcmlnL3N1bnJwYy9jbG50X3VkcC5jCTIwMDgtMDctMjYgMTA6NDI6NDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMi4xL3N1bnJwYy9jbG50X3VkcC5jCTIwMDktMTEtMTMgMDA6NTA6MjYuMDAwMDAwMDAwICswMTAwCitAQCAtNDU2LDcgKzQ1Niw3IEBACisgICAgICAgd2hpbGUgKGlubGVuIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7CisgICAgICAgaWYgKGlubGVuIDwgMCkKKyAJeworLQkgIGlmIChlcnJubyA9PSBFV09VTERCTE9DSykKKysJICBpZiAoZXJybm8gPT0gRVdPVUxEQkxPQ0sgfHwgZXJybm8gPT0gRUFHQUlOKQorIAkgICAgY29udGludWU7CisgCSAgY3UtPmN1X2Vycm9yLnJlX2Vycm5vID0gZXJybm87CisgCSAgcmV0dXJuIChjdS0+Y3VfZXJyb3IucmVfc3RhdHVzID0gUlBDX0NBTlRSRUNWKTsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvMzMwLW02OGstc3lzLXVzZXIucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzMzMC1tNjhrLXN5cy11c2VyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NDE2OTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzMzMC1tNjhrLXN5cy11c2VyLnBhdGNoCkBAIC0wLDAgKzEsOTcgQEAKK2NvcGllZCBmcm9tIGtlcm5lbCBhcyBpdCBpcyBzYW5pdGl6ZWQgbm93CisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L202OGsvc3lzL3VzZXIuaCBnbGliYy0yLjEyLjEvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L202OGsvc3lzL3VzZXIuaAorLS0tIGdsaWJjLTIuMTIuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTIuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9tNjhrL3N5cy91c2VyLmgJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEyLjEvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L202OGsvc3lzL3VzZXIuaAkyMDA5LTExLTEzIDAwOjUwOjMxLjAwMDAwMDAwMCArMDEwMAorQEAgLTEsMyArMSw5MCBAQAorKyNpZm5kZWYgX1NZU19VU0VSX0gKKysjZGVmaW5lIF9TWVNfVVNFUl9ICisrCisrLyogQ29yZSBmaWxlIGZvcm1hdDogVGhlIGNvcmUgZmlsZSBpcyB3cml0dGVuIGluIHN1Y2ggYSB3YXkgdGhhdCBnZGIKKysgICBjYW4gdW5kZXJzdGFuZCBpdCBhbmQgcHJvdmlkZSB1c2VmdWwgaW5mb3JtYXRpb24gdG8gdGhlIHVzZXIgKHVuZGVyCisrICAgbGludXggd2UgdXNlIHRoZSAndHJhZC1jb3JlJyBiZmQpLiAgVGhlcmUgYXJlIHF1aXRlIGEgbnVtYmVyIG9mCisrICAgb2JzdGFjbGVzIHRvIGJlaW5nIGFibGUgdG8gdmlldyB0aGUgY29udGVudHMgb2YgdGhlIGZsb2F0aW5nIHBvaW50CisrICAgcmVnaXN0ZXJzLCBhbmQgdW50aWwgdGhlc2UgYXJlIHNvbHZlZCB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byB2aWV3IHRoZQorKyAgIGNvbnRlbnRzIG9mIHRoZW0uICBBY3R1YWxseSwgeW91IGNhbiByZWFkIGluIHRoZSBjb3JlIGZpbGUgYW5kIGxvb2sgYXQKKysgICB0aGUgY29udGVudHMgb2YgdGhlIHVzZXIgc3RydWN0IHRvIGZpbmQgb3V0IHdoYXQgdGhlIGZsb2F0aW5nIHBvaW50CisrICAgcmVnaXN0ZXJzIGNvbnRhaW4uCisrICAgVGhlIGFjdHVhbCBmaWxlIGNvbnRlbnRzIGFyZSBhcyBmb2xsb3dzOgorKyAgIFVQQUdFOiAxIHBhZ2UgY29uc2lzdGluZyBvZiBhIHVzZXIgc3RydWN0IHRoYXQgdGVsbHMgZ2RiIHdoYXQgaXMgcHJlc2VudAorKyAgIGluIHRoZSBmaWxlLiAgRGlyZWN0bHkgYWZ0ZXIgdGhpcyBpcyBhIGNvcHkgb2YgdGhlIHRhc2tfc3RydWN0LCB3aGljaAorKyAgIGlzIGN1cnJlbnRseSBub3QgdXNlZCBieSBnZGIsIGJ1dCBpdCBtYXkgY29tZSBpbiB1c2VmdWwgYXQgc29tZSBwb2ludC4KKysgICBBbGwgb2YgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIHVwYWdlLiAgVGhlIHVwYWdlIHNob3VsZAorKyAgIGFsd2F5cyBiZSBvbmx5IG9uZSBwYWdlLgorKyAgIERBVEE6IFRoZSBkYXRhIGFyZWEgaXMgc3RvcmVkLiAgV2UgdXNlIGN1cnJlbnQtPmVuZF90ZXh0IHRvCisrICAgY3VycmVudC0+YnJrIHRvIHBpY2sgdXAgYWxsIG9mIHRoZSB1c2VyIHZhcmlhYmxlcywgcGx1cyBhbnkgbWVtb3J5CisrICAgdGhhdCBtYXkgaGF2ZSBiZWVuIG1hbGxvY2VkLiAgTm8gYXR0ZW1wdCBpcyBtYWRlIHRvIGRldGVybWluZSBpZiBhIHBhZ2UKKysgICBpcyBkZW1hbmQtemVybyBvciBpZiBhIHBhZ2UgaXMgdG90YWxseSB1bnVzZWQsIHdlIGp1c3QgY292ZXIgdGhlIGVudGlyZQorKyAgIHJhbmdlLiAgQWxsIG9mIHRoZSBhZGRyZXNzZXMgYXJlIHJvdW5kZWQgaW4gc3VjaCBhIHdheSB0aGF0IGFuIGludGVncmFsCisrICAgbnVtYmVyIG9mIHBhZ2VzIGlzIHdyaXR0ZW4uCisrICAgU1RBQ0s6IFdlIG5lZWQgdGhlIHN0YWNrIGluZm9ybWF0aW9uIGluIG9yZGVyIHRvIGdldCBhIG1lYW5pbmdmdWwKKysgICBiYWNrdHJhY2UuICBXZSBuZWVkIHRvIHdyaXRlIHRoZSBkYXRhIGZyb20gKGVzcCkgdG8KKysgICBjdXJyZW50LT5zdGFydF9zdGFjaywgc28gd2Ugcm91bmQgZWFjaCBvZiB0aGVzZSBvZmYgaW4gb3JkZXIgdG8gYmUgYWJsZQorKyAgIHRvIHdyaXRlIGFuIGludGVnZXIgbnVtYmVyIG9mIHBhZ2VzLgorKyAgIFRoZSBtaW5pbXVtIGNvcmUgZmlsZSBzaXplIGlzIDMgcGFnZXMsIG9yIDEyMjg4IGJ5dGVzLgorKyovCisrCisrc3RydWN0IHVzZXJfbTY4a2ZwX3N0cnVjdCB7CisrCXVuc2lnbmVkIGxvbmcgIGZwcmVnc1s4KjNdOwkvKiBmcDAtZnA3IHJlZ2lzdGVycyAqLworKwl1bnNpZ25lZCBsb25nICBmcGNudGxbM107CS8qIGZwIGNvbnRyb2wgcmVncyAqLworK307CisrCisrLyogVGhpcyBpcyB0aGUgb2xkIGxheW91dCBvZiAic3RydWN0IHB0X3JlZ3MiIGFzIG9mIExpbnV4IDEueCwgYW5kCisrICAgaXMgc3RpbGwgdGhlIGxheW91dCB1c2VkIGJ5IHVzZXIgKHRoZSBuZXcgcHRfcmVncyBkb2Vzbid0IGhhdmUKKysgICBhbGwgcmVnaXN0ZXJzKS4gKi8KKytzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCB7CisrCWxvbmcgZDEsZDIsZDMsZDQsZDUsZDYsZDc7CisrCWxvbmcgYTAsYTEsYTIsYTMsYTQsYTUsYTY7CisrCWxvbmcgZDA7CisrCWxvbmcgdXNwOworKwlsb25nIG9yaWdfZDA7CisrCXNob3J0IHN0a2FkajsKKysJc2hvcnQgc3I7CisrCWxvbmcgcGM7CisrCXNob3J0IGZtdHZlYzsKKysJc2hvcnQgX19maWxsOworK307CisrCisrCisrLyogV2hlbiB0aGUga2VybmVsIGR1bXBzIGNvcmUsIGl0IHN0YXJ0cyBieSBkdW1waW5nIHRoZSB1c2VyIHN0cnVjdCAtCisrICAgdGhpcyB3aWxsIGJlIHVzZWQgYnkgZ2RiIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGRhdGEgYW5kIHN0YWNrIHNlZ21lbnRzCisrICAgYXJlIHdpdGhpbiB0aGUgZmlsZSwgYW5kIHdoYXQgdmlydHVhbCBhZGRyZXNzZXMgdG8gdXNlLiAqLworK3N0cnVjdCB1c2VyeworKy8qIFdlIHN0YXJ0IHdpdGggdGhlIHJlZ2lzdGVycywgdG8gbWltaWMgdGhlIHdheSB0aGF0ICJtZW1vcnkiIGlzIHJldHVybmVkCisrICAgZnJvbSB0aGUgcHRyYWNlKDMsLi4uKSBmdW5jdGlvbi4gICovCisrICBzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCByZWdzOwkvKiBXaGVyZSB0aGUgcmVnaXN0ZXJzIGFyZSBhY3R1YWxseSBzdG9yZWQgKi8KKysvKiBwdHJhY2UgZG9lcyBub3QgeWV0IHN1cHBseSB0aGVzZS4gIFNvbWVkYXkuLi4uICovCisrICBpbnQgdV9mcHZhbGlkOwkJLyogVHJ1ZSBpZiBtYXRoIGNvLXByb2Nlc3NvciBiZWluZyB1c2VkLiAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHRoaXMgbWVzcy4gTm90IHlldCB1c2VkLiAqLworKyAgc3RydWN0IHVzZXJfbTY4a2ZwX3N0cnVjdCBtNjhrZnA7IC8qIE1hdGggQ28tcHJvY2Vzc29yIHJlZ2lzdGVycy4gKi8KKysvKiBUaGUgcmVzdCBvZiB0aGlzIGp1bmsgaXMgdG8gaGVscCBnZGIgZmlndXJlIG91dCB3aGF0IGdvZXMgd2hlcmUgKi8KKysgIHVuc2lnbmVkIGxvbmcgaW50IHVfdHNpemU7CS8qIFRleHQgc2VnbWVudCBzaXplIChwYWdlcykuICovCisrICB1bnNpZ25lZCBsb25nIGludCB1X2RzaXplOwkvKiBEYXRhIHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLworKyAgdW5zaWduZWQgbG9uZyBpbnQgdV9zc2l6ZTsJLyogU3RhY2sgc2VnbWVudCBzaXplIChwYWdlcykuICovCisrICB1bnNpZ25lZCBsb25nIHN0YXJ0X2NvZGU7ICAgICAvKiBTdGFydGluZyB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGV4dC4gKi8KKysgIHVuc2lnbmVkIGxvbmcgc3RhcnRfc3RhY2s7CS8qIFN0YXJ0aW5nIHZpcnR1YWwgYWRkcmVzcyBvZiBzdGFjayBhcmVhLgorKwkJCQkgICBUaGlzIGlzIGFjdHVhbGx5IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLAorKwkJCQkgICB0aGUgdG9wIG9mIHRoZSBzdGFjayBpcyBhbHdheXMgZm91bmQgaW4gdGhlCisrCQkJCSAgIGVzcCByZWdpc3Rlci4gICovCisrICBsb25nIGludCBzaWduYWw7CQkvKiBTaWduYWwgdGhhdCBjYXVzZWQgdGhlIGNvcmUgZHVtcC4gKi8KKysgIGludCByZXNlcnZlZDsJCQkvKiBObyBsb25nZXIgdXNlZCAqLworKyAgc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QgKnVfYXIwOworKwkJCQkvKiBVc2VkIGJ5IGdkYiB0byBoZWxwIGZpbmQgdGhlIHZhbHVlcyBmb3IgKi8KKysJCQkJLyogdGhlIHJlZ2lzdGVycy4gKi8KKysgIHN0cnVjdCB1c2VyX202OGtmcF9zdHJ1Y3QqIHVfZnBzdGF0ZTsJLyogTWF0aCBDby1wcm9jZXNzb3IgcG9pbnRlci4gKi8KKysgIHVuc2lnbmVkIGxvbmcgbWFnaWM7CQkvKiBUbyB1bmlxdWVseSBpZGVudGlmeSBhIGNvcmUgZmlsZSAqLworKyAgY2hhciB1X2NvbW1bMzJdOwkJLyogVXNlciBjb21tYW5kIHRoYXQgd2FzIHJlc3BvbnNpYmxlICovCisrfTsKKysjZGVmaW5lIE5CUEcgNDA5NgorKyNkZWZpbmUgVVBBR0VTIDEKKysjZGVmaW5lIEhPU1RfVEVYVF9TVEFSVF9BRERSICh1LnN0YXJ0X2NvZGUpCisrI2RlZmluZSBIT1NUX1NUQUNLX0VORF9BRERSICh1LnN0YXJ0X3N0YWNrICsgdS51X3NzaXplICogTkJQRykKKysKKysjZW5kaWYKKyAvKiBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisgCitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL3BvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L202OGsvc3lzL3VzZXIuaCBnbGliYy0yLjEyLjEvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbTY4ay9zeXMvdXNlci5oCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzM0MC1kbF9leGVjc3RhY2stUGFYLXN1cHBvcnQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzM0MC1kbF9leGVjc3RhY2stUGFYLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZkYjM5YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvMzQwLWRsX2V4ZWNzdGFjay1QYVgtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDY2IEBACisJV2l0aCBsYXRlc3QgdmVyc2lvbnMgb2YgZ2xpYmMsIGEgbG90IG9mIGFwcHMgZmFpbGVkIG9uIGEgUGFYIGVuYWJsZWQKKwlzeXN0ZW0gd2l0aDoKKwkJIGNhbm5vdCBlbmFibGUgZXhlY3V0YWJsZSBzdGFjayBhcyBzaGFyZWQgb2JqZWN0IHJlcXVpcmVzOiBQZXJtaXNzaW9uIGRlbmllZAorCQorCVRoaXMgaXMgZHVlIHRvIFBhWCAnZXhlYy1wcm90ZWN0aW5nJyB0aGUgc3RhY2ssIGFuZCBsZC5zbyB0aGVuIHRyeWluZworCXRvIG1ha2UgdGhlIHN0YWNrIGV4ZWN1dGFibGUgZHVlIHRvIHNvbWUgbGlicmFyaWVzIG5vdCBjb250YWluaW5nIHRoZQorCVBUX0dOVV9TVEFDSyBzZWN0aW9uLiAgQnVnICMzMjk2MC4gIDxhemFyYWhAZ2VudG9vLm9yZz4gKDEyIE5vdiAyMDAzKS4KKworCVBhdGNoIGFsc28gTlBUTC4gQnVnICMxMTYwODYuIDxrZXZxdWlubkBnZW50b28ub3JnPiAoMjAgRGVjIDIwMDUpLgorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL25wdGwvYWxsb2NhdGVzdGFjay5jIGdsaWJjLTIuMTIuMS9ucHRsL2FsbG9jYXRlc3RhY2suYworLS0tIGdsaWJjLTIuMTIuMS5vcmlnL25wdGwvYWxsb2NhdGVzdGFjay5jCTIwMDktMDEtMjkgMjE6MzQ6MTYuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMi4xL25wdGwvYWxsb2NhdGVzdGFjay5jCTIwMDktMTEtMTMgMDA6NTA6MzMuMDAwMDAwMDAwICswMTAwCitAQCAtMzI5LDcgKzMyOSw4IEBACisgIyBlcnJvciAiRGVmaW5lIGVpdGhlciBfU1RBQ0tfR1JPV1NfRE9XTiBvciBfU1RBQ0tfR1JPV1NfVVAiCisgI2VuZGlmCisgICBpZiAobXByb3RlY3QgKHN0YWNrLCBsZW4sIFBST1RfUkVBRCB8IFBST1RfV1JJVEUgfCBQUk9UX0VYRUMpICE9IDApCistICAgIHJldHVybiBlcnJubzsKKysgICAgaWYgKGVycm5vICE9IEVBQ0NFUykgLyogUEFYIGlzIGVuYWJsZWQgKi8KKysgICAgCXJldHVybiBlcnJubzsKKyAKKyAgIHJldHVybiAwOworIH0KK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZGwtZXhlY3N0YWNrLmMgZ2xpYmMtMi4xMi4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2RsLWV4ZWNzdGFjay5jCistLS0gZ2xpYmMtMi4xMi4xLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZGwtZXhlY3N0YWNrLmMJMjAwNi0wMS0wOCAwOToyMToxNS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEyLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZGwtZXhlY3N0YWNrLmMJMjAwOS0xMS0xMyAwMDo1MDozMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC02Myw3ICs2MywxMCBAQAorICAgICAgIGVsc2UKKyAjIGVuZGlmCisgCXsKKy0JICByZXN1bHQgPSBlcnJubzsKKysJICBpZiAoZXJybm8gPT0gRUFDQ0VTKSAgLyogUEFYIGlzIGVuYWJsZWQgKi8KKysJICAgIHJlc3VsdCA9IDA7CisrCSAgZWxzZQorKwkgICAgcmVzdWx0ID0gZXJybm87CisgCSAgZ290byBvdXQ7CisgCX0KKyAgICAgfQorQEAgLTg5LDcgKzkyLDEyIEBACisgCXBhZ2UgLT0gc2l6ZTsKKyAgICAgICBlbHNlCisgCXsKKy0JICBpZiAoZXJybm8gIT0gRU5PTUVNKQkvKiBVbmV4cGVjdGVkIGZhaWx1cmUgbW9kZS4gICovCisrCSAgaWYgKGVycm5vID09IEVBQ0NFUykJCS8qIFBBWCBpcyBlbmFibGVkICovCisrCSAgICB7CisrCSAgICAgIHJlc3VsdCA9IDA7CisrCSAgICAgIGdvdG8gb3V0OworKwkgICAgfQorKwkgIGVsc2UgaWYgKGVycm5vICE9IEVOT01FTSkJLyogVW5leHBlY3RlZCBmYWlsdXJlIG1vZGUuICAqLworIAkgICAgeworIAkgICAgICByZXN1bHQgPSBlcnJubzsKKyAJICAgICAgZ290byBvdXQ7CitAQCAtMTE1LDcgKzEyMywxMiBAQAorIAlwYWdlICs9IHNpemU7CisgICAgICAgZWxzZQorIAl7CistCSAgaWYgKGVycm5vICE9IEVOT01FTSkJLyogVW5leHBlY3RlZCBmYWlsdXJlIG1vZGUuICAqLworKwkgIGlmIChlcnJubyA9PSBFQUNDRVMpCQkvKiBQQVggaXMgZW5hYmxlZCAqLworKwkgICAgeworKwkgICAgICByZXN1bHQgPSAwOworKwkgICAgICBnb3RvIG91dDsKKysJICAgIH0KKysJICBlbHNlIGlmIChlcnJubyAhPSBFTk9NRU0pCS8qIFVuZXhwZWN0ZWQgZmFpbHVyZSBtb2RlLiAgKi8KKyAJICAgIHsKKyAJICAgICAgcmVzdWx0ID0gZXJybm87CisgCSAgICAgIGdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS8zNTAtcHJlMjAwNDAxMTctcHRfcGF4LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS8zNTAtcHJlMjAwNDAxMTctcHRfcGF4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMDMxNjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzM1MC1wcmUyMDA0MDExNy1wdF9wYXgucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvZWxmL2VsZi5oIGdsaWJjLTIuMTIuMS9lbGYvZWxmLmgKKy0tLSBnbGliYy0yLjEyLjEub3JpZy9lbGYvZWxmLmgJMjAwOS0wNC0xNSAwMjoxNTo1NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEyLjEvZWxmL2VsZi5oCTIwMDktMTEtMTMgMDA6NTA6MzUuMDAwMDAwMDAwICswMTAwCitAQCAtNTgwLDYgKzU4MCw3IEBACisgI2RlZmluZSBQVF9HTlVfRUhfRlJBTUUJMHg2NDc0ZTU1MAkvKiBHQ0MgLmVoX2ZyYW1lX2hkciBzZWdtZW50ICovCisgI2RlZmluZSBQVF9HTlVfU1RBQ0sJMHg2NDc0ZTU1MQkvKiBJbmRpY2F0ZXMgc3RhY2sgZXhlY3V0YWJpbGl0eSAqLworICNkZWZpbmUgUFRfR05VX1JFTFJPCTB4NjQ3NGU1NTIJLyogUmVhZC1vbmx5IGFmdGVyIHJlbG9jYXRpb24gKi8KKysjZGVmaW5lIFBUX1BBWF9GTEFHUwkweDY1MDQxNTgwCS8qIEluZGljYXRlcyBQYVggZmxhZyBtYXJraW5ncyAqLworICNkZWZpbmUgUFRfTE9TVU5XCTB4NmZmZmZmZmEKKyAjZGVmaW5lIFBUX1NVTldCU1MJMHg2ZmZmZmZmYQkvKiBTdW4gU3BlY2lmaWMgc2VnbWVudCAqLworICNkZWZpbmUgUFRfU1VOV1NUQUNLCTB4NmZmZmZmZmIJLyogU3RhY2sgc2VnbWVudCAqLworQEAgLTU5Myw2ICs1OTQsMTggQEAKKyAjZGVmaW5lIFBGX1gJCSgxIDw8IDApCS8qIFNlZ21lbnQgaXMgZXhlY3V0YWJsZSAqLworICNkZWZpbmUgUEZfVwkJKDEgPDwgMSkJLyogU2VnbWVudCBpcyB3cml0YWJsZSAqLworICNkZWZpbmUgUEZfUgkJKDEgPDwgMikJLyogU2VnbWVudCBpcyByZWFkYWJsZSAqLworKyNkZWZpbmUgUEZfUEFHRUVYRUMJKDEgPDwgNCkJLyogRW5hYmxlICBQQUdFRVhFQyAqLworKyNkZWZpbmUgUEZfTk9QQUdFRVhFQwkoMSA8PCA1KQkvKiBEaXNhYmxlIFBBR0VFWEVDICovCisrI2RlZmluZSBQRl9TRUdNRVhFQwkoMSA8PCA2KQkvKiBFbmFibGUgIFNFR01FWEVDICovCisrI2RlZmluZSBQRl9OT1NFR01FWEVDCSgxIDw8IDcpCS8qIERpc2FibGUgU0VHTUVYRUMgKi8KKysjZGVmaW5lIFBGX01QUk9URUNUCSgxIDw8IDgpCS8qIEVuYWJsZSAgTVBST1RFQ1QgKi8KKysjZGVmaW5lIFBGX05PTVBST1RFQ1QJKDEgPDwgOSkJLyogRGlzYWJsZSBNUFJPVEVDVCAqLworKyNkZWZpbmUgUEZfUkFOREVYRUMJKDEgPDwgMTApCS8qIEVuYWJsZSAgUkFOREVYRUMgKi8KKysjZGVmaW5lIFBGX05PUkFOREVYRUMJKDEgPDwgMTEpCS8qIERpc2FibGUgUkFOREVYRUMgKi8KKysjZGVmaW5lIFBGX0VNVVRSQU1QCSgxIDw8IDEyKQkvKiBFbmFibGUgIEVNVVRSQU1QICovCisrI2RlZmluZSBQRl9OT0VNVVRSQU1QCSgxIDw8IDEzKQkvKiBEaXNhYmxlIEVNVVRSQU1QICovCisrI2RlZmluZSBQRl9SQU5ETU1BUAkoMSA8PCAxNCkJLyogRW5hYmxlICBSQU5ETU1BUCAqLworKyNkZWZpbmUgUEZfTk9SQU5ETU1BUAkoMSA8PCAxNSkJLyogRGlzYWJsZSBSQU5ETU1BUCAqLworICNkZWZpbmUgUEZfTUFTS09TCTB4MGZmMDAwMDAJLyogT1Mtc3BlY2lmaWMgKi8KKyAjZGVmaW5lIFBGX01BU0tQUk9DCTB4ZjAwMDAwMDAJLyogUHJvY2Vzc29yLXNwZWNpZmljICovCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzM2MC10ZXN0cy1zYW5kYm94LWxpYmRsLXBhdGhzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS8zNjAtdGVzdHMtc2FuZGJveC1saWJkbC1wYXRocy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODQ3Y2RiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS8zNjAtdGVzdHMtc2FuZGJveC1saWJkbC1wYXRocy5wYXRjaApAQCAtMCwwICsxLDE5MyBAQAord2hlbiBnbGliYyBydW5zIGl0cyB0ZXN0cywgaXQgZG9lcyBzbyBieSBpbnZva2luZyB0aGUgbG9jYWwgbGlicmFyeSBsb2FkZXIuCitpbiBHZW50b28sIHdlIGJ1aWxkL3J1biBpbnNpZGUgb2Ygb3VyICJzYW5kYm94IiB3aGljaCBpdHNlbGYgaXMgbGlua2VkIGFnYWluc3QKK2xpYmRsIChzbyB0aGF0IGl0IGNhbiBsb2FkIGxpYnJhcmllcyBhbmQgcHVsbCBvdXQgc3ltYm9scykuICB0aGUgdHJvdWJsZQoraXMgdGhhdCB3aGVuIHlvdSB1cGdyYWRlIGZyb20gYW4gb2xkZXIgZ2xpYmMgdG8gdGhlIG5ldyBvbmUsIG9mdGVuIHRpbWVzCitpbnRlcm5hbCBzeW1ib2xzIGNoYW5nZSBuYW1lIG9yIGFiaS4gIHRoaXMgaXMgbm9ybWFsbHkgT0sgYXMgeW91IGNhbm5vdCB1c2UKK2xpYmMuc28gZnJvbSBzYXkgdmVyc2lvbiAyLjMuNiBidXQgbGlicHRocmVhZC5zbyBmcm9tIHNheSB2ZXJzaW9uIDIuNSwgc28KK3dlIGFsd2F5cyBzYXkgImtlZXAgYWxsIG9mIHRoZSBnbGliYyBsaWJyYXJpZXMgZnJvbSB0aGUgc2FtZSBidWlsZCIuICBidXQKK3doZW4gZ2xpYmMgcnVucyBpdHMgdGVzdHMsIGl0IHVzZXMgZHluYW1pYyBwYXRocyB0byBwb2ludCB0byBpdHMgbmV3IGxvY2FsCitjb3BpZXMgb2YgbGlicmFyaWVzLiAgaWYgdGhlIHRlc3QgZG9lc250IHVzZSBsaWJkbCwgdGhlbiBnbGliYyBkb2VzbnQgYWRkCitpdHMgcGF0aCwgYW5kIHdoZW4gc2FuZGJveCB0cmlnZ2VycyB0aGUgbG9hZGluZyBvZiBsaWJkbCwgZ2xpYmMgZG9lcyBzbworZnJvbSB0aGUgaG9zdCBzeXN0ZW0gc3lzdGVtLiAgdGhpcyBnZXRzIHVzIGludG8gdGhlIGNhc2Ugb2YgYWxsIGxpYnJhcmllcworYXJlIGZyb20gdGhlIGxvY2FsbHkgY29tcGlsZWQgdmVyc2lvbiBvZiBnbGliYyBleGNlcHQgZm9yIGxpYmRsLnNvLgorCitGaXggYnkgV29ybW8KKworaHR0cDovL2J1Z3MuZ2VudG9vLm9yZy81Njg5OAorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL2dycC90c3RfZmdldGdyZW50LnNoIGdsaWJjLTIuMTIuMS9ncnAvdHN0X2ZnZXRncmVudC5zaAorLS0tIGdsaWJjLTIuMTIuMS5vcmlnL2dycC90c3RfZmdldGdyZW50LnNoCTIwMDEtMDctMDYgMDY6NTQ6NDYuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMi4xL2dycC90c3RfZmdldGdyZW50LnNoCTIwMDktMTEtMTMgMDA6NTA6MzcuMDAwMDAwMDAwICswMTAwCitAQCAtMjQsNyArMjQsOCBAQAorIHJ0bGRfaW5zdGFsbGVkX25hbWU9JDE7IHNoaWZ0CisgCisgdGVzdG91dD0ke2NvbW1vbl9vYmpwZnh9L2dycC90c3RfZmdldGdyZW50Lm91dAorLWxpYnJhcnlfcGF0aD0ke2NvbW1vbl9vYmpwZnh9CisrIyBtYWtlIHN1cmUgbGliZGwgaXMgYWxzbyBpbiBwYXRoIGluIGNhc2Ugc2FuZGJveCBpcyBpbiB1c2UKKytsaWJyYXJ5X3BhdGg9JHtjb21tb25fb2JqcGZ4fToke2NvbW1vbl9vYmpwZnh9L2RsZmNuCisgCisgcmVzdWx0PTAKKyAKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvaWNvbnZkYXRhL3J1bi1pY29udi10ZXN0LnNoIGdsaWJjLTIuMTIuMS9pY29udmRhdGEvcnVuLWljb252LXRlc3Quc2gKKy0tLSBnbGliYy0yLjEyLjEub3JpZy9pY29udmRhdGEvcnVuLWljb252LXRlc3Quc2gJMjAwOC0wNS0xNSAwMzo1OTo0NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEyLjEvaWNvbnZkYXRhL3J1bi1pY29udi10ZXN0LnNoCTIwMDktMTEtMTMgMDA6NTA6MzcuMDAwMDAwMDAwICswMTAwCitAQCAtMzQsNyArMzQsNyBAQAorIGV4cG9ydCBHQ09OVl9QQVRICisgCisgIyBXZSBoYXZlIHRvIGhhdmUgc29tZSBkaXJlY3RvcmllcyBpbiB0aGUgbGlicmFyeSBwYXRoLgorLUxJQlBBVEg9JGNvZGlyOiRjb2Rpci9pY29udmRhdGEKKytMSUJQQVRIPSRjb2RpcjokY29kaXIvaWNvbnZkYXRhOiRjb2Rpci9kbGZjbgorIAorICMgSG93IHRoZSBzdGFydCB0aGUgaWNvbnYoMSkgcHJvZ3JhbS4KKyBJQ09OVj0nJGNvZGlyL2VsZi9sZC5zbyAtLWxpYnJhcnktcGF0aCAkTElCUEFUSCAtLWluaGliaXQtcnBhdGggJHtmcm9tfS5zbyBcCitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL2ljb252ZGF0YS90c3QtdGFibGUuc2ggZ2xpYmMtMi4xMi4xL2ljb252ZGF0YS90c3QtdGFibGUuc2gKKy0tLSBnbGliYy0yLjEyLjEub3JpZy9pY29udmRhdGEvdHN0LXRhYmxlLnNoCTIwMDItMDQtMjQgMjM6Mzk6MzUuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMi4xL2ljb252ZGF0YS90c3QtdGFibGUuc2gJMjAwOS0xMS0xMyAwMDo1MDozNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC01OSw4ICs1OSwxMSBAQAorICAgaXJyZXZlcnNpYmxlPSR7Y2hhcnNldH0uaXJyZXZlcnNpYmxlCisgZmkKKyAKKysjIG1ha2Ugc3VyZSBsaWJkbCBpcyBhbHNvIGluIHBhdGggaW4gY2FzZSBzYW5kYm94IGlzIGluIHVzZQorK2xpYnJhcnlfcGF0aD0ke2NvbW1vbl9vYmpwZnh9OiR7Y29tbW9uX29ianBmeH0vZGxmY24KKysKKyAjIGljb252IGluIG9uZSBkaXJlY3Rpb24uCistJHtjb21tb25fb2JqcGZ4fWVsZi9sZC5zbyAtLWxpYnJhcnktcGF0aCAkY29tbW9uX29ianBmeCBcCisrJHtjb21tb25fb2JqcGZ4fWVsZi9sZC5zbyAtLWxpYnJhcnktcGF0aCAkbGlicmFyeV9wYXRoIFwKKyAke29ianBmeH10c3QtdGFibGUtZnJvbSAke2NoYXJzZXR9IFwKKyAgID4gJHtvYmpwZnh9dHN0LSR7Y2hhcnNldH0udGFibGUKKyAKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvaW50bC90c3QtY29kZXNldC5zaCBnbGliYy0yLjEyLjEvaW50bC90c3QtY29kZXNldC5zaAorLS0tIGdsaWJjLTIuMTIuMS5vcmlnL2ludGwvdHN0LWNvZGVzZXQuc2gJMjAwNS0wNC0wNiAwNDoxODozNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEyLjEvaW50bC90c3QtY29kZXNldC5zaAkyMDA5LTExLTEzIDAwOjUwOjM3LjAwMDAwMDAwMCArMDEwMAorQEAgLTM3LDYgKzM3LDkgQEAKKyBMT0NQQVRIPSR7Y29tbW9uX29ianBmeH1sb2NhbGVkYXRhCisgZXhwb3J0IExPQ1BBVEgKKyAKKysjIG1ha2Ugc3VyZSBsaWJkbCBpcyBhbHNvIGluIHBhdGggaW4gY2FzZSBzYW5kYm94IGlzIGluIHVzZQorK2xpYnJhcnlfcGF0aD0ke2NvbW1vbl9vYmpwZnh9OiR7Y29tbW9uX29ianBmeH0vZGxmY24KKysKKyAke2NvbW1vbl9vYmpwZnh9ZWxmL2xkLnNvIC0tbGlicmFyeS1wYXRoICRjb21tb25fb2JqcGZ4IFwKKyAke29ianBmeH10c3QtY29kZXNldCA+ICR7b2JqcGZ4fXRzdC1jb2Rlc2V0Lm91dAorIAorZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9pbnRsL3RzdC1nZXR0ZXh0LnNoIGdsaWJjLTIuMTIuMS9pbnRsL3RzdC1nZXR0ZXh0LnNoCistLS0gZ2xpYmMtMi4xMi4xLm9yaWcvaW50bC90c3QtZ2V0dGV4dC5zaAkyMDA0LTA4LTE1IDIxOjI4OjE4LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTIuMS9pbnRsL3RzdC1nZXR0ZXh0LnNoCTIwMDktMTEtMTMgMDA6NTA6MzcuMDAwMDAwMDAwICswMTAwCitAQCAtNTEsOSArNTEsMTIgQEAKKyBMT0NQQVRIPSR7Y29tbW9uX29ianBmeH1sb2NhbGVkYXRhCisgZXhwb3J0IExPQ1BBVEgKKyAKKysjIG1ha2Ugc3VyZSBsaWJkbCBpcyBhbHNvIGluIHBhdGggaW4gY2FzZSBzYW5kYm94IGlzIGluIHVzZQorK2xpYnJhcnlfcGF0aD0ke2NvbW1vbl9vYmpwZnh9OiR7Y29tbW9uX29ianBmeH0vZGxmY24KKysKKyAjIE5vdyBydW4gdGhlIHRlc3QuCisgTUFMTE9DX1RSQUNFPSRtYWxsb2NfdHJhY2UgTE9DUEFUSD0ke29ianBmeH1sb2NhbGVkaXI6JExPQ1BBVEggXAorLSR7Y29tbW9uX29ianBmeH1lbGYvbGQuc28gLS1saWJyYXJ5LXBhdGggJGNvbW1vbl9vYmpwZnggXAorKyR7Y29tbW9uX29ianBmeH1lbGYvbGQuc28gLS1saWJyYXJ5LXBhdGggJGxpYnJhcnlfcGF0aCBcCisgJHtvYmpwZnh9dHN0LWdldHRleHQgPiAke29ianBmeH10c3QtZ2V0dGV4dC5vdXQgJHtvYmpwZnh9ZG9tYWluZGlyCisgCisgZXhpdCAkPworZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9pbnRsL3RzdC1nZXR0ZXh0Mi5zaCBnbGliYy0yLjEyLjEvaW50bC90c3QtZ2V0dGV4dDIuc2gKKy0tLSBnbGliYy0yLjEyLjEub3JpZy9pbnRsL3RzdC1nZXR0ZXh0Mi5zaAkyMDA1LTA1LTA0IDE5OjU0OjQ4LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTIuMS9pbnRsL3RzdC1nZXR0ZXh0Mi5zaAkyMDA5LTExLTEzIDAwOjUwOjM3LjAwMDAwMDAwMCArMDEwMAorQEAgLTY1LDggKzY1LDExIEBACisgTE9DUEFUSD0ke29ianBmeH1kb21haW5kaXIKKyBleHBvcnQgTE9DUEFUSAorIAorKyMgbWFrZSBzdXJlIGxpYmRsIGlzIGFsc28gaW4gcGF0aCBpbiBjYXNlIHNhbmRib3ggaXMgaW4gdXNlCisrbGlicmFyeV9wYXRoPSR7Y29tbW9uX29ianBmeH06JHtjb21tb25fb2JqcGZ4fS9kbGZjbgorKworICMgTm93IHJ1biB0aGUgdGVzdC4KKy0ke2NvbW1vbl9vYmpwZnh9ZWxmL2xkLnNvIC0tbGlicmFyeS1wYXRoICRjb21tb25fb2JqcGZ4IFwKKyske2NvbW1vbl9vYmpwZnh9ZWxmL2xkLnNvIC0tbGlicmFyeS1wYXRoICRsaWJyYXJ5X3BhdGggXAorICR7b2JqcGZ4fXRzdC1nZXR0ZXh0MiA+ICR7b2JqcGZ4fXRzdC1nZXR0ZXh0Mi5vdXQgJHtvYmpwZnh9ZG9tYWluZGlyICYmCisgY21wICR7b2JqcGZ4fXRzdC1nZXR0ZXh0Mi5vdXQgLSA8PEVPRgorIFN0cmluZzEgLSBMYW5nMTogMXN0IHN0cmluZworZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9pbnRsL3RzdC10cmFuc2xpdC5zaCBnbGliYy0yLjEyLjEvaW50bC90c3QtdHJhbnNsaXQuc2gKKy0tLSBnbGliYy0yLjEyLjEub3JpZy9pbnRsL3RzdC10cmFuc2xpdC5zaAkyMDA1LTA1LTA0IDE5OjU2OjEwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTIuMS9pbnRsL3RzdC10cmFuc2xpdC5zaAkyMDA5LTExLTEzIDAwOjUwOjM3LjAwMDAwMDAwMCArMDEwMAorQEAgLTM2LDcgKzM2LDEwIEBACisgTE9DUEFUSD0ke2NvbW1vbl9vYmpwZnh9bG9jYWxlZGF0YQorIGV4cG9ydCBMT0NQQVRICisgCistJHtjb21tb25fb2JqcGZ4fWVsZi9sZC5zbyAtLWxpYnJhcnktcGF0aCAkY29tbW9uX29ianBmeCBcCisrIyBtYWtlIHN1cmUgbGliZGwgaXMgYWxzbyBpbiBwYXRoIGluIGNhc2Ugc2FuZGJveCBpcyBpbiB1c2UKKytsaWJyYXJ5X3BhdGg9JHtjb21tb25fb2JqcGZ4fToke2NvbW1vbl9vYmpwZnh9L2RsZmNuCisrCisrJHtjb21tb25fb2JqcGZ4fWVsZi9sZC5zbyAtLWxpYnJhcnktcGF0aCAkbGlicmFyeV9wYXRoIFwKKyAke29ianBmeH10c3QtdHJhbnNsaXQgPiAke29ianBmeH10c3QtdHJhbnNsaXQub3V0ICR7b2JqcGZ4fWRvbWFpbmRpcgorIAorIGV4aXQgJD8KK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvbWFsbG9jL3RzdC1tdHJhY2Uuc2ggZ2xpYmMtMi4xMi4xL21hbGxvYy90c3QtbXRyYWNlLnNoCistLS0gZ2xpYmMtMi4xMi4xLm9yaWcvbWFsbG9jL3RzdC1tdHJhY2Uuc2gJMjAwNS0xMC0xNSAwMTo0MDozNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEyLjEvbWFsbG9jL3RzdC1tdHJhY2Uuc2gJMjAwOS0xMS0xMyAwMDo1MDozNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNCw5ICsyNCwxMiBAQAorIHN0YXR1cz0wCisgdHJhcCAicm0gLWYgJHtjb21tb25fb2JqcGZ4fW1hbGxvYy90c3QtbXRyYWNlLmxlYWs7IGV4aXQgMSIgMSAyIDE1CisgCisrIyBtYWtlIHN1cmUgbGliZGwgaXMgYWxzbyBpbiBwYXRoIGluIGNhc2Ugc2FuZGJveCBpcyBpbiB1c2UKKytsaWJyYXJ5X3BhdGg9JHtjb21tb25fb2JqcGZ4fToke2NvbW1vbl9vYmpwZnh9L2RsZmNuCisrCisgTUFMTE9DX1RSQUNFPSR7Y29tbW9uX29ianBmeH1tYWxsb2MvdHN0LW10cmFjZS5sZWFrIFwKKyBMT0NQQVRIPSR7Y29tbW9uX29ianBmeH1sb2NhbGVkYXRhIEdDT05WX1BBVEg9JHtjb21tb25fb2JqcGZ4fWljb252ZGF0YSBcCistJHtjb21tb25fb2JqcGZ4fWVsZi9sZC5zbyAtLWxpYnJhcnktcGF0aCAkY29tbW9uX29ianBmeCBcCisrJHtjb21tb25fb2JqcGZ4fWVsZi9sZC5zbyAtLWxpYnJhcnktcGF0aCAkbGlicmFyeV9wYXRoIFwKKyAgICR7Y29tbW9uX29ianBmeH1tYWxsb2MvdHN0LW10cmFjZSB8fCBzdGF0dXM9MQorIAorIGlmIHRlc3QgJHN0YXR1cyAtZXEgMCAmJiB0ZXN0IC1mICR7Y29tbW9uX29ianBmeH1tYWxsb2MvbXRyYWNlOyB0aGVuCitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL25wdGwvdHN0LXRsczYuc2ggZ2xpYmMtMi4xMi4xL25wdGwvdHN0LXRsczYuc2gKKy0tLSBnbGliYy0yLjEyLjEub3JpZy9ucHRsL3RzdC10bHM2LnNoCTIwMDMtMDktMDMgMDA6MDI6NTkuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMi4xL25wdGwvdHN0LXRsczYuc2gJMjAwOS0xMS0xMyAwMDo1MDozNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC01LDggKzUsOCBAQAorIHJ0bGRfaW5zdGFsbGVkX25hbWU9JDE7IHNoaWZ0CisgbG9nZmlsZT0kY29tbW9uX29ianBmeC9ucHRsL3RzdC10bHM2Lm91dAorIAorLSMgV2UgaGF2ZSB0byBmaW5kIGxpYmMgYW5kIG5wdGwKKy1saWJyYXJ5X3BhdGg9JHtjb21tb25fb2JqcGZ4fToke2NvbW1vbl9vYmpwZnh9bnB0bAorKyMgV2UgaGF2ZSB0byBmaW5kIGxpYmMgYW5kIG5wdGwgKGFsc28gbGliZGwgaW4gY2FzZSBzYW5kYm94IGlzIGluIHVzZSkKKytsaWJyYXJ5X3BhdGg9JHtjb21tb25fb2JqcGZ4fToke2NvbW1vbl9vYmpwZnh9bnB0bDoke2NvbW1vbl9vYmpwZnh9L2RsZmNuCisgdHN0X3RsczU9IiR7ZWxmX29ianBmeH0ke3J0bGRfaW5zdGFsbGVkX25hbWV9IC0tbGlicmFyeS1wYXRoICR7bGlicmFyeV9wYXRofSBcCisgCSAgJHtjb21tb25fb2JqcGZ4fS9ucHRsL3RzdC10bHM1IgorIAorZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9wb3NpeC9nbG9idGVzdC5zaCBnbGliYy0yLjEyLjEvcG9zaXgvZ2xvYnRlc3Quc2gKKy0tLSBnbGliYy0yLjEyLjEub3JpZy9wb3NpeC9nbG9idGVzdC5zaAkyMDA4LTEyLTA2IDA3OjA1OjM5LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTIuMS9wb3NpeC9nbG9idGVzdC5zaAkyMDA5LTExLTEzIDAwOjUwOjM3LjAwMDAwMDAwMCArMDEwMAorQEAgLTE4LDcgKzE4LDcgQEAKKyBlc2FjCisgCisgIyBXZSBoYXZlIHRvIGZpbmQgdGhlIGxpYmMgYW5kIHRoZSBOU1MgbW9kdWxlcy4KKy1saWJyYXJ5X3BhdGg9JHtjb21tb25fb2JqcGZ4fToke2NvbW1vbl9vYmpwZnh9bnNzOiR7Y29tbW9uX29ianBmeH1uaXM6JHtjb21tb25fb2JqcGZ4fWRiMjoke2NvbW1vbl9vYmpwZnh9aGVzaW9kCisrbGlicmFyeV9wYXRoPSR7Y29tbW9uX29ianBmeH06JHtjb21tb25fb2JqcGZ4fW5zczoke2NvbW1vbl9vYmpwZnh9bmlzOiR7Y29tbW9uX29ianBmeH1kYjI6JHtjb21tb25fb2JqcGZ4fWhlc2lvZDoke2NvbW1vbl9vYmpwZnh9L2RsZmNuCisgCisgIyBTaW5jZSB3ZSB1c2UgYHNvcnQnIHdlIG11c3QgbWFrZSBzdXJlIHRvIHVzZSB0aGUgc2FtZSBsb2NhbGUgZXZlcnl3aGVyZS4KKyBMQ19BTEw9QworZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9wb3NpeC90c3QtZ2V0Y29uZi5zaCBnbGliYy0yLjEyLjEvcG9zaXgvdHN0LWdldGNvbmYuc2gKKy0tLSBnbGliYy0yLjEyLjEub3JpZy9wb3NpeC90c3QtZ2V0Y29uZi5zaAkyMDAyLTA5LTAxIDEzOjExOjI1LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTIuMS9wb3NpeC90c3QtZ2V0Y29uZi5zaAkyMDA5LTExLTEzIDAwOjUwOjM3LjAwMDAwMDAwMCArMDEwMAorQEAgLTEwLDcgKzEwLDEwIEBACisgZWxzZQorICAgcnRsZF9pbnN0YWxsZWRfbmFtZT0kMTsgc2hpZnQKKyAgIHJ1bml0KCkgeworLSAgICAke2VsZl9vYmpwZnh9JHtydGxkX2luc3RhbGxlZF9uYW1lfSAtLWxpYnJhcnktcGF0aCAke2NvbW1vbl9vYmpwZnh9ICIkQCIKKysgICAgCisrICAjIG1ha2Ugc3VyZSBsaWJkbCBpcyBhbHNvIGluIHBhdGggaW4gY2FzZSBzYW5kYm94IGlzIGluIHVzZQorKyAgbGlicmFyeV9wYXRoPSR7Y29tbW9uX29ianBmeH06JHtjb21tb25fb2JqcGZ4fS9kbGZjbgorKyAgICAke2VsZl9vYmpwZnh9JHtydGxkX2luc3RhbGxlZF9uYW1lfSAtLWxpYnJhcnktcGF0aCAke2xpYnJhcnlfcGF0aH0gIiRAIgorICAgfQorIGZpCisgCitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL3Bvc2l4L3dvcmRleHAtdHN0LnNoIGdsaWJjLTIuMTIuMS9wb3NpeC93b3JkZXhwLXRzdC5zaAorLS0tIGdsaWJjLTIuMTIuMS5vcmlnL3Bvc2l4L3dvcmRleHAtdHN0LnNoCTIwMDAtMTAtMjAgMTg6MjM6MzAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMi4xL3Bvc2l4L3dvcmRleHAtdHN0LnNoCTIwMDktMTEtMTMgMDA6NTA6MzcuMDAwMDAwMDAwICswMTAwCitAQCAtMTksOCArMTksMTEgQEAKKyAiCisgZXhwb3J0IElGUworIAorKyMgbWFrZSBzdXJlIGxpYmRsIGlzIGFsc28gaW4gcGF0aCBpbiBjYXNlIHNhbmRib3ggaXMgaW4gdXNlCisrbGlicmFyeV9wYXRoPSR7Y29tbW9uX29ianBmeH06JHtjb21tb25fb2JqcGZ4fS9kbGZjbgorKworIGZhaWxlZD0wCistJHtlbGZfb2JqcGZ4fSR7cnRsZF9pbnN0YWxsZWRfbmFtZX0gLS1saWJyYXJ5LXBhdGggJHtjb21tb25fb2JqcGZ4fSBcCisrJHtlbGZfb2JqcGZ4fSR7cnRsZF9pbnN0YWxsZWRfbmFtZX0gLS1saWJyYXJ5LXBhdGggJHtsaWJyYXJ5X3BhdGh9IFwKKyAke2NvbW1vbl9vYmpwZnh9cG9zaXgvd29yZGV4cC10ZXN0ICckKicgPiAke3Rlc3RvdXR9MQorIGNhdCA8PCJFT0YiIHwgY21wIC0gJHt0ZXN0b3V0fTEgPj4gJGxvZ2ZpbGUgfHwgZmFpbGVkPTEKKyB3b3JkZXhwIHJldHVybmVkIDAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvMzcwLWZubWF0Y2gucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzM3MC1mbm1hdGNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNDViMzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzM3MC1mbm1hdGNoLnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKK2h0dHA6Ly9zb3VyY2V3YXJlLm9yZy9tbC9saWJjLWhhY2tlci8yMDAyLTExL21zZzAwMDcxLmh0bWwKKworV2hlbiBmbm1hdGNoIGRldGVjdHMgYW4gaW52YWxpZCBtdWx0aWJ5dGUgY2hhcmFjdGVyIGl0IHNob3VsZCBmYWxsIGJhY2sgdG8KK3NpbmdsZSBieXRlIG1hdGNoaW5nLCBzbyB0aGF0ICIqIiBoYXMgYSBjaGFuY2UgdG8gbWF0Y2ggc3VjaCBhIHN0cmluZy4KKworQW5kcmVhcy4KKworMjAwNS0wNC0xMiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAc3VzZS5kZT4KKworCSogcG9zaXgvZm5tYXRjaC5jIChmbm1hdGNoKTogSWYgY29udmVyc2lvbiB0byB3aWRlIGNoYXJhY3RlcgorCWZhaWxzIGZhbGwgYmFjayB0byBzaW5nbGUgYnl0ZSBtYXRjaGluZy4KKworSW5kZXg6IHBvc2l4L2ZubWF0Y2guYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL3Bvc2l4L2ZubWF0Y2guYyBnbGliYy0yLjEyLjEvcG9zaXgvZm5tYXRjaC5jCistLS0gZ2xpYmMtMi4xMi4xLm9yaWcvcG9zaXgvZm5tYXRjaC5jCTIwMDctMDctMjggMjI6MzU6MDAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMi4xL3Bvc2l4L2ZubWF0Y2guYwkyMDA5LTExLTEzIDAwOjUwOjM5LjAwMDAwMDAwMCArMDEwMAorQEAgLTMyNyw2ICszMjcsNyBAQAorICMgaWYgSEFORExFX01VTFRJQllURQorICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKE1CX0NVUl9NQVgsIDEpICE9IDEpCisgICAgIHsKKysgICAgICBjb25zdCBjaGFyICpvcmlnX3BhdHRlcm4gPSBwYXR0ZXJuOworICAgICAgIG1ic3RhdGVfdCBwczsKKyAgICAgICBzaXplX3QgbjsKKyAgICAgICBjb25zdCBjaGFyICpwOworQEAgLTM4MiwxMCArMzgzLDggQEAKKyAJICB3c3RyaW5nID0gKHdjaGFyX3QgKikgYWxsb2NhICgobiArIDEpICogc2l6ZW9mICh3Y2hhcl90KSk7CisgCSAgbiA9IG1ic3J0b3djcyAod3N0cmluZywgJnAsIG4gKyAxLCAmcHMpOworIAkgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChuID09IChzaXplX3QpIC0xLCAwKSkKKy0JICAgIC8qIFNvbWV0aGluZyB3cm9uZy4KKy0JICAgICAgIFhYWCBEbyB3ZSBoYXZlIHRvIHNldCBgZXJybm8nIHRvIHNvbWV0aGluZyB3aGljaCBtYnNydG93cyBoYXNuJ3QKKy0JICAgICAgIGFscmVhZHkgZG9uZT8gICovCistCSAgICByZXR1cm4gLTE7CisrCSAgICAvKiBTb21ldGhpbmcgd3JvbmcuICBGYWxsIGJhY2sgdG8gc2luZ2xlIGJ5dGUgbWF0Y2hpbmcuICAqLworKwkgICAgZ290byB0cnlfc2luZ2xlYnl0ZTsKKyAJICBpZiAocCkKKyAJICAgIHsKKyAJICAgICAgbWVtc2V0ICgmcHMsICdcMCcsIHNpemVvZiAocHMpKTsKK0BAIC0zOTcsMTAgKzM5Niw4IEBACisgCXByZXBhcmVfd3N0cmluZzoKKyAJICBuID0gbWJzcnRvd2NzIChOVUxMLCAmc3RyaW5nLCAwLCAmcHMpOworIAkgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChuID09IChzaXplX3QpIC0xLCAwKSkKKy0JICAgIC8qIFNvbWV0aGluZyB3cm9uZy4KKy0JICAgICAgIFhYWCBEbyB3ZSBoYXZlIHRvIHNldCBgZXJybm8nIHRvIHNvbWV0aGluZyB3aGljaCBtYnNydG93cyBoYXNuJ3QKKy0JICAgICAgIGFscmVhZHkgZG9uZT8gICovCistCSAgICByZXR1cm4gLTE7CisrCSAgICAvKiBTb21ldGhpbmcgd3JvbmcuICBGYWxsIGJhY2sgdG8gc2luZ2xlIGJ5dGUgbWF0Y2hpbmcuICAqLworKwkgICAgZ290byB0cnlfc2luZ2xlYnl0ZTsKKyAJICB3c3RyaW5nID0gKHdjaGFyX3QgKikgYWxsb2NhICgobiArIDEpICogc2l6ZW9mICh3Y2hhcl90KSk7CisgCSAgYXNzZXJ0IChtYnNpbml0ICgmcHMpKTsKKyAJICAodm9pZCkgbWJzcnRvd2NzICh3c3RyaW5nLCAmc3RyaW5nLCBuICsgMSwgJnBzKTsKK0BAIC00MDgsNiArNDA1LDkgQEAKKyAKKyAgICAgICByZXR1cm4gaW50ZXJuYWxfZm53bWF0Y2ggKHdwYXR0ZXJuLCB3c3RyaW5nLCB3c3RyaW5nICsgbiwKKyAJCQkJZmxhZ3MgJiBGTk1fUEVSSU9ELCBmbGFncywgTlVMTCk7CisrCisrICAgIHRyeV9zaW5nbGVieXRlOgorKyAgICAgIHBhdHRlcm4gPSBvcmlnX3BhdHRlcm47CisgICAgIH0KKyAjIGVuZGlmICAvKiBtYnN0YXRlX3QgYW5kIG1ic3J0b3djcyBvciBfTElCQy4gICovCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzM4MC1kb250LWJ1aWxkLXRpbWV6b25lLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS8zODAtZG9udC1idWlsZC10aW1lem9uZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTMwNDM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS8zODAtZG9udC1idWlsZC10aW1lem9uZS5wYXRjaApAQCAtMCwwICsxLDE0IEBACit0aW1lem9uZSBkYXRhIGhhcyBiZWVuIHNwbGl0IGludG8gdGhlIHBhY2thZ2Ugc3lzLWxpYnMvdGltZXpvbmUtZGF0YQorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL01ha2Vjb25maWcgZ2xpYmMtMi4xMi4xL01ha2Vjb25maWcKKy0tLSBnbGliYy0yLjEyLjEub3JpZy9NYWtlY29uZmlnCTIwMDktMTEtMTMgMDA6NTA6MTMuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMi4xL01ha2Vjb25maWcJMjAwOS0xMS0xMyAwMDo1MDo0MS4wMDAwMDAwMDAgKzAxMDAKK0BAIC05NDQsNyArOTQ0LDcgQEAKKyAJICAgICAgc3RkbGliIHN0ZGlvLWNvbW1vbiBsaWJpbyBtYWxsb2Mgc3RyaW5nIHdjc21icyB0aW1lIGRpcmVudCAgICBcCisgCSAgICAgIGdycCBwd2QgcG9zaXggaW8gdGVybWlvcyByZXNvdXJjZSBtaXNjIHNvY2tldCBzeXN2aXBjIGdtb24gICAgXAorIAkgICAgICBnbnVsaWIgaWNvbnYgaWNvbnZkYXRhIHdjdHlwZSBtYW51YWwgc2hhZG93IGdzaGFkb3cgcG8gYXJncCAgIFwKKy0JICAgICAgY3J5cHQgbnNzIGxvY2FsZWRhdGEgdGltZXpvbmUgcnQgY29uZm9ybSBkZWJ1ZwkJICAgIFwKKysJICAgICAgY3J5cHQgbnNzIGxvY2FsZWRhdGEgcnQgY29uZm9ybSBkZWJ1ZwkJICAgIFwKKyAJICAgICAgJChhZGQtb24tc3ViZGlycykgJChkbGZjbikgJChiaW5mbXQtc3ViZGlyKQorIAorIGlmbmRlZiBhdm9pZC1nZW5lcmF0ZWQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvNDAwLWFscGhhLXhzdGF0LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS80MDAtYWxwaGEteHN0YXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdiZWE5OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvNDAwLWFscGhhLXhzdGF0LnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgva2VybmVsLWZlYXR1cmVzLmggZ2xpYmMtMi4xMi4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2tlcm5lbC1mZWF0dXJlcy5oCistLS0gZ2xpYmMtMi4xMi4xLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgva2VybmVsLWZlYXR1cmVzLmgJMjAwOS0wNS0wOSAwODo1NDoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEyLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgva2VybmVsLWZlYXR1cmVzLmgJMjAwOS0xMS0xMyAwMDo1MDo0NS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zODYsNiArMzg2LDExIEBACisgIyBkZWZpbmUgX19BU1NVTUVfR0VUREVOVFMzMl9EX1RZUEUJMQorICNlbmRpZgorIAorKy8qIFN0YXJ0aW5nIHdpdGggdmVyc2lvbiAyLjYuNCwgYWxwaGEgc3RhdDY0IHN5c2NhbGxzIGFyZSBhdmFpbGFibGUuICAqLworKyNpZiBfX0xJTlVYX0tFUk5FTF9WRVJTSU9OID49IDB4MDIwNjA0ICYmIGRlZmluZWQgX19hbHBoYV9fCisrIyBkZWZpbmUgX19BU1NVTUVfU1RBVDY0X1NZU0NBTEwJMQorKyNlbmRpZgorKworIC8qIFN0YXJ0aW5nIHdpdGggdmVyc2lvbiAyLjUuMywgdGhlIGluaXRpYWwgbG9jYXRpb24gcmV0dXJuZWQgYnkgYGJyaycKKyAgICBhZnRlciBleGVjIGlzIGFsd2F5cyByb3VuZGVkIHVwIHRvIHRoZSBuZXh0IHBhZ2UuICAqLworICNpZiBfX0xJTlVYX0tFUk5FTF9WRVJTSU9OID49IDEzMjM1NQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS80MzAtYWxwaGEtY3JlYXQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzQzMC1hbHBoYS1jcmVhdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmI3MmQwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS80MzAtYWxwaGEtY3JlYXQucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorYWxwaGEgZG9lcyBub3QgaGF2ZSBhIF9fTlJfY3JlYXQKKworaHR0cDovL2J1Z3MuZ2VudG9vLm9yZy8yMjcyNzUKK2h0dHA6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NjY1MAorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3dvcmRzaXplLTY0L2NyZWF0NjQuYyBnbGliYy0yLjEyLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvd29yZHNpemUtNjQvY3JlYXQ2NC5jCistLS0gZ2xpYmMtMi4xMi4xLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvd29yZHNpemUtNjQvY3JlYXQ2NC5jCTIwMDctMTEtMTAgMjA6MzQ6MjYuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMi4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3dvcmRzaXplLTY0L2NyZWF0NjQuYwkyMDA5LTExLTEzIDAwOjUwOjUxLjAwMDAwMDAwMCArMDEwMAorQEAgLTEgKzEsNSBAQAorIC8qIERlZmluZWQgYXMgYWxpYXMgZm9yIHRoZSBzeXNjYWxsLiAgKi8KKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2lmbmRlZiBfX05SX2NyZWF0CisrI2luY2x1ZGUgIi4uLy4uLy4uLy4uLy4uL2lvL2NyZWF0NjQuYyIKKysjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvNDQwLWFscGhhLWNhY2hlLXNoYXBlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS80NDAtYWxwaGEtY2FjaGUtc2hhcGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE4NWU5OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvNDQwLWFscGhhLWNhY2hlLXNoYXBlLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK29sZGVyIHZlcmlzb25zIG9mIGdsaWJjIHdvdWxkIGJ1aWxkIGRsLXN5c2RlcCBhcyBzaGFyZWQtb25seSBhbmQgZGwtc3VwcG9ydCBhcworc3RhdGljLW9ubHkuICBhbHBoYSBob29rcyBpbiBhIGNhY2hlIHZhcmlhYmxlIHZpYSBkbC1hdXh2LmguICBuZXdlciB2ZXJzaW9ucyBvZgorZ2xpYmMgYnVpbGQgZGwtc3lzZGVwIGFzIGJvdGggc2hhcmVkIGFuZCBzdGF0aWMgd2hpY2ggbWVhbnMgd2Ugbm93IGhhdmUgc3ltYm9sCitkdXBsaWNhdGlvbiBmb3Igc3RhdGljIGJ1aWxkcyB3aXRoIGRsLXN5c2RlcCBhbmQgZGwtc3VwcG9ydC4gIHNpbmNlIGRsLXN5c2RlcAoraXMgYm90aCBzaGFyZWQvc3RhdGljLCB0aGVyZSBpcyBubyBwb2ludCBpbiBob29raW5nIGRsLXN1cHBvcnQgYW55bW9yZSwgc28gd2UKK2NhbiBwdW50IGl0LgorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTIuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9kbC1zdXBwb3J0LmMgZ2xpYmMtMi4xMi4xL2dsaWJjLXBvcnRzLTIuMTIuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9kbC1zdXBwb3J0LmMKKy0tLSBnbGliYy0yLjEyLjEub3JpZy9nbGliYy1wb3J0cy0yLjEyLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvZGwtc3VwcG9ydC5jCTIwMDktMDUtMTYgMTA6MzY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMi4xL2dsaWJjLXBvcnRzLTIuMTIuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9kbC1zdXBwb3J0LmMJMjAwOS0xMS0xMyAwMDo1MDo1My4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xLDIgKzEsMSBAQAorLSNpbmNsdWRlICJkbC1hdXh2LmgiCisgI2luY2x1ZGUgPGVsZi9kbC1zdXBwb3J0LmM+CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzQ2MC1hbHBoYS1maXgtZ2NjLTQuMS13YXJuaW5ncy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvNDYwLWFscGhhLWZpeC1nY2MtNC4xLXdhcm5pbmdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MzgyNjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzQ2MC1hbHBoYS1maXgtZ2NjLTQuMS13YXJuaW5ncy5wYXRjaApAQCAtMCwwICsxLDU2IEBACisyMDA2LTA1LTMwICBGYWxrIEh1ZWZmbmVyIDxmYWxrQGRlYmlhbi5vcmc+CisKKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2lvcGVybS5jOiBmb3JjZSB0aGUgYXJjaGl0ZWN0dXJlCisJICB0byBldjYgaW4gYXNzZW1ibHkgY29kZS4KKwore3N0YW5kYXJkIGlucHV0fTogQXNzZW1ibGVyIG1lc3NhZ2VzOgore3N0YW5kYXJkIGlucHV0fTozNDE6IEVycm9yOiBtYWNybyByZXF1aXJlcyAkYXQgcmVnaXN0ZXIgd2hpbGUgbm9hdCBpbiBlZmZlY3QKK3tzdGFuZGFyZCBpbnB1dH06Mzc0OiBFcnJvcjogbWFjcm8gcmVxdWlyZXMgJGF0IHJlZ2lzdGVyIHdoaWxlIG5vYXQgaW4gZWZmZWN0Cit7c3RhbmRhcmQgaW5wdXR9OjQzODogRXJyb3I6IG1hY3JvIHJlcXVpcmVzICRhdCByZWdpc3RlciB3aGlsZSBub2F0IGluIGVmZmVjdAore3N0YW5kYXJkIGlucHV0fTo0NzE6IEVycm9yOiBtYWNybyByZXF1aXJlcyAkYXQgcmVnaXN0ZXIgd2hpbGUgbm9hdCBpbiBlZmZlY3QKK21ha2VbM106ICoqKiBbL3RtcC9idWlsZGQvZ2xpYmMtMi4zLjYvYnVpbGQtdHJlZS9hbHBoYS1saWJjL21pc2MvaW9wZXJtLm9dIEVycm9yIDEKKworSHJtLiBnY2MgcHV0cyAuYXJjaCBldjQgaW50byB0aGUgLnMsIGFuZCB0aGlzIG92ZXJyaWRlcyAtbWV2NiBmb3IgYXMuCitJIGNhbm5vdCByZWFsbHkgdGhpbmsgb2YgYW55dGhpbmcgYmV0dGVyIHRoYW4KKworIHBvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2lvcGVybS5jIHwgICAgOCArKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2lvcGVybS5jIGdsaWJjLTIuMTIuMS9nbGliYy1wb3J0cy0yLjEyLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvaW9wZXJtLmMKKy0tLSBnbGliYy0yLjEyLjEub3JpZy9nbGliYy1wb3J0cy0yLjEyLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvaW9wZXJtLmMJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEyLjEvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2lvcGVybS5jCTIwMDktMTEtMTMgMDA6NTA6NTcuMDAwMDAwMDAwICswMTAwCitAQCAtMTc4LDEzICsxNzgsMTMgQEAKKyBzdGF0aWMgaW5saW5lIHZvaWQKKyBzdGJfbWIodW5zaWduZWQgY2hhciB2YWwsIHVuc2lnbmVkIGxvbmcgYWRkcikKKyB7CistICBfX2FzbV9fKCJzdGIgJTEsJTA7IG1iIiA6ICI9bSIoKih2dWNwKWFkZHIpIDogInIiKHZhbCkpOworKyAgX19hc21fXygiLmFyY2ggZXY2OyBzdGIgJTEsJTA7IG1iIiA6ICI9bSIoKih2dWNwKWFkZHIpIDogInIiKHZhbCkpOworIH0KKyAKKyBzdGF0aWMgaW5saW5lIHZvaWQKKyBzdHdfbWIodW5zaWduZWQgc2hvcnQgdmFsLCB1bnNpZ25lZCBsb25nIGFkZHIpCisgeworLSAgX19hc21fXygic3R3ICUxLCUwOyBtYiIgOiAiPW0iKCoodnVzcClhZGRyKSA6ICJyIih2YWwpKTsKKysgIF9fYXNtX18oIi5hcmNoIGV2Njsgc3R3ICUxLCUwOyBtYiIgOiAiPW0iKCoodnVzcClhZGRyKSA6ICJyIih2YWwpKTsKKyB9CisgCisgc3RhdGljIGlubGluZSB2b2lkCitAQCAtMzU2LDcgKzM1Niw3IEBACisgICB1bnNpZ25lZCBsb25nIGludCBhZGRyID0gZGVuc2VfcG9ydF90b19jcHVfYWRkciAocG9ydCk7CisgICB1bnNpZ25lZCBjaGFyIHI7CisgCistICBfX2FzbV9fICgibGRidSAlMCwlMSIgOiAiPXIiKHIpIDogIm0iKCoodnVjcClhZGRyKSk7CisrICBfX2FzbV9fICgiLmFyY2ggZXY2OyBsZGJ1ICUwLCUxIiA6ICI9ciIocikgOiAibSIoKih2dWNwKWFkZHIpKTsKKyAgIHJldHVybiByOworIH0KKyAKK0BAIC0zNjYsNyArMzY2LDcgQEAKKyAgIHVuc2lnbmVkIGxvbmcgaW50IGFkZHIgPSBkZW5zZV9wb3J0X3RvX2NwdV9hZGRyIChwb3J0KTsKKyAgIHVuc2lnbmVkIHNob3J0IHI7CisgCistICBfX2FzbV9fICgibGR3dSAlMCwlMSIgOiAiPXIiKHIpIDogIm0iKCoodnVzcClhZGRyKSk7CisrICBfX2FzbV9fICgiLmFyY2ggZXY2OyBsZHd1ICUwLCUxIiA6ICI9ciIocikgOiAibSIoKih2dXNwKWFkZHIpKTsKKyAgIHJldHVybiByOworIH0KKyAKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvaW9wZXJtLmMgZ2xpYmMtMi4xMi4xL3BvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2lvcGVybS5jCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzQ5MC1hbHBoYV9hbHBoYS1hZGQtZmRhdGFzeW5jLXN1cHBvcnQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzQ5MC1hbHBoYV9hbHBoYS1hZGQtZmRhdGFzeW5jLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQzNWViZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvNDkwLWFscGhhX2FscGhhLWFkZC1mZGF0YXN5bmMtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDEyNiBAQAorMjAwOS0wNy0yNSAgQXVyZWxpZW4gSmFybm8gIDxhdXJlbGllbkBhdXJlbDMyLm5ldD4KKworCSogc3lzZGVwcy91bml4L3N5c3YvbGludXgva2VybmVsLWZlYXR1cmVzLmg6IGRlZmluZSAKKwlfX0FTU1VNRV9GREFUQVNZTkMuIAorCSogc3lzZGVwcy91bml4L3N5c3YvbGludXgvZmRhdGFzeW5jLmM6IE5ldyBmaWxlLgorCSogc3lzZGVwcy91bml4L3N5c3YvbGludXgvTWFrZWZpbGU6IGNvbXBpbGUgZmRhdGFzeW5jLmMgd2l0aAorCS1mZXhjZXB0aW9ucy4KKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5c2NhbGxzLmxpc3Q6IFJlbW92ZSBmZGF0YXN5bmMuCisKKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9NYWtlZmlsZSAgICAgICAgICB8ICAgIDEgCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgvZmRhdGFzeW5jLmMgICAgICAgfCAgIDY5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2tlcm5lbC1mZWF0dXJlcy5oIHwgICAgNiArKworIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5c2NhbGxzLmxpc3QgICAgIHwgICAgMSAKKyA0IGZpbGVzIGNoYW5nZWQsIDc2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9NYWtlZmlsZSBnbGliYy0yLjEyLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvTWFrZWZpbGUKKy0tLSBnbGliYy0yLjEyLjEub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9NYWtlZmlsZQkyMDA5LTAzLTAyIDE3OjE1OjEzLjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTIuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9NYWtlZmlsZQkyMDA5LTExLTEzIDAwOjUxOjA0LjAwMDAwMDAwMCArMDEwMAorQEAgLTIwLDYgKzIwLDcgQEAKKyAJCSAgIHNldGZzdWlkIHNldGZzZ2lkIG1ha2VkZXYgZXBvbGxfcHdhaXQgc2lnbmFsZmQgXAorIAkJICAgZXZlbnRmZCBldmVudGZkX3JlYWQgZXZlbnRmZF93cml0ZQorIAorK0NGTEFHUy1mZGF0YXN5bmMuYyA9IC1mZXhjZXB0aW9ucworIENGTEFHUy1nZXRob3N0aWQuYyA9IC1mZXhjZXB0aW9ucworIAorIHN5c2RlcF9oZWFkZXJzICs9IHN5cy9tb3VudC5oIHN5cy9hY2N0Lmggc3lzL3N5c2N0bC5oIFwKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZmRhdGFzeW5jLmMgZ2xpYmMtMi4xMi4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2ZkYXRhc3luYy5jCistLS0gZ2xpYmMtMi4xMi4xLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZmRhdGFzeW5jLmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEyLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZmRhdGFzeW5jLmMJMjAwOS0xMS0xMyAwMDo1MTowNC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsNjkgQEAKKysvKiBmZGF0YXN5bmMgLS0gc3luY2hyb25pemUgYXQgbGVhc3QgdGhlIGRhdGEgcGFydCBvZiBhIGZpbGUgd2l0aCAKKysgICB0aGUgdW5kZXJseWluZyBtZWRpYS4gTGludXggdmVyc2lvbi4gCisrCisrICAgQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC1jYW5jZWwuaD4KKysjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKysjaW5jbHVkZSA8YnAtY2hlY2tzLmg+CisrCisrI2luY2x1ZGUgPGtlcm5lbC1mZWF0dXJlcy5oPgorKworKyNpZiBkZWZpbmVkIF9fTlJfZmRhdGFzeW5jICYmICFkZWZpbmVkIF9fQVNTVU1FX0ZEQVRBU1lOQworK3N0YXRpYyBpbnQgX19oYXZlX25vX2ZkYXRhc3luYzsKKysjZW5kaWYKKysKKytzdGF0aWMgaW50CisrZG9fZmRhdGFzeW5jIChpbnQgZmQpCisreworKyNpZmRlZiBfX0FTU1VNRV9GREFUQVNZTkMKKysgIHJldHVybiBJTkxJTkVfU1lTQ0FMTCAoZmRhdGFzeW5jLCAxLCBmZCk7CisrI2VsaWYgZGVmaW5lZCBfX05SX2ZkYXRhc3luYworKyAgaWYgKCFfX2J1aWx0aW5fZXhwZWN0IChfX2hhdmVfbm9fZmRhdGFzeW5jLCAwKSkKKysgICAgeworKyAgICAgIGludCByZXN1bHQgPSBJTkxJTkVfU1lTQ0FMTCAoZmRhdGFzeW5jLCAxLCBmZCk7CisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCwgMCkgIT0gLTEgfHwgZXJybm8gIT0gRU5PU1lTKQorKwlyZXR1cm4gcmVzdWx0OworKworKyAgICAgIF9faGF2ZV9ub19mZGF0YXN5bmMgPSAxOworKyAgICB9CisrI2VuZGlmCisrICByZXR1cm4gSU5MSU5FX1NZU0NBTEwgKGZzeW5jLCAxLCBmZCk7CisrfQorKworK2ludAorK19fZmRhdGFzeW5jIChpbnQgZmQpCisreworKyAgaWYgKFNJTkdMRV9USFJFQURfUCkKKysgICAgcmV0dXJuIGRvX2ZkYXRhc3luYyAoZmQpOworKworKyAgaW50IG9sZHR5cGUgPSBMSUJDX0NBTkNFTF9BU1lOQyAoKTsKKysKKysgIGludCByZXN1bHQgPSBkb19mZGF0YXN5bmMgKGZkKTsKKysKKysgIExJQkNfQ0FOQ0VMX1JFU0VUIChvbGR0eXBlKTsKKysKKysgIHJldHVybiByZXN1bHQ7CisrfQorKworK3dlYWtfYWxpYXMgKF9fZmRhdGFzeW5jLCBmZGF0YXN5bmMpCisrCitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2tlcm5lbC1mZWF0dXJlcy5oIGdsaWJjLTIuMTIuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9rZXJuZWwtZmVhdHVyZXMuaAorLS0tIGdsaWJjLTIuMTIuMS5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2tlcm5lbC1mZWF0dXJlcy5oCTIwMDktMTEtMTMgMDA6NTA6NDUuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMi4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2tlcm5lbC1mZWF0dXJlcy5oCTIwMDktMTEtMTMgMDA6NTE6MDQuMDAwMDAwMDAwICswMTAwCitAQCAtNDU5LDYgKzQ1OSwxMiBAQAorICMgZGVmaW5lIF9fQVNTVU1FX0ZVVEVYX0xPQ0tfUEkJMQorICNlbmRpZgorIAorKy8qIFN1cHBvcnQgZm9yIGZzeW5jZGF0YSBzeXNjYWxsIHdhcyBhZGRlZCBpbiAyLjYuMjIgb24gYWxwaGEsIGJ1dCBpdAorKyAgIHdhcyBhbHJlYWR5IHByZXNlbnQgaW4gMi4wIGtlcm5lbHMgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcy4gICovCisrI2lmICghZGVmaW5lZCBfX2FscGhhIHx8IF9fTElOVVhfS0VSTkVMX1ZFUlNJT04gPj0gMHgwMjA2MTYpCisrIyBkZWZpbmUgX19BU1NVTUVfRkRBVEFTWU5DCTEKKysjZW5kaWYKKysKKyAvKiBTdXBwb3J0IGZvciB1dGltZW5zYXQgc3lzY2FsbCB3YXMgYWRkZWQgaW4gMi42LjIyLCBvbiBTSAorICAgIG9ubHkgYWZ0ZXIgMi42LjIyLXJjMS4gICovCisgI2lmIF9fTElOVVhfS0VSTkVMX1ZFUlNJT04gPj0gMHgwMjA2MTYgXAorZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zeXNjYWxscy5saXN0IGdsaWJjLTIuMTIuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zeXNjYWxscy5saXN0CistLS0gZ2xpYmMtMi4xMi4xLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc3lzY2FsbHMubGlzdAkyMDA4LTA4LTAyIDAxOjI5OjA4LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTIuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zeXNjYWxscy5saXN0CTIwMDktMTEtMTMgMDA6NTE6MDQuMDAwMDAwMDAwICswMTAwCitAQCAtMTEsNyArMTEsNiBAQAorIGVwb2xsX2NyZWF0ZTEJRVhUUkEJZXBvbGxfY3JlYXRlMQlpOmkJZXBvbGxfY3JlYXRlMQorIGVwb2xsX2N0bAlFWFRSQQllcG9sbF9jdGwJaTppaWlwCWVwb2xsX2N0bAorIGVwb2xsX3dhaXQJRVhUUkEJZXBvbGxfd2FpdAlDaTppcGlpCWVwb2xsX3dhaXQKKy1mZGF0YXN5bmMJLQlmZGF0YXN5bmMJQ2k6aQlmZGF0YXN5bmMKKyBmbG9jawkJLQlmbG9jawkJaTppaQlfX2Zsb2NrCQlmbG9jaworIGZvcmsJCS0JZm9yawkJaToJX19saWJjX2ZvcmsJX19mb3JrIGZvcmsKKyBnZXRfa2VybmVsX3N5bXMJRVhUUkEJZ2V0X2tlcm5lbF9zeW1zCWk6cAlnZXRfa2VybmVsX3N5bXMKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvNTMwLWFscGhhLWZpeC1ydGxkLWZQSUMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzUzMC1hbHBoYS1maXgtcnRsZC1mUElDLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMWE2ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzUzMC1hbHBoYS1maXgtcnRsZC1mUElDLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKKzIwMDktMDUtMjYgIEF1cmVsaWVuIEphcm5vICA8YXVyZWxpZW5AYXVyZWwzMi5uZXQ+CisKKwkqIHN5c2RlcHMvYWxwaGEvTWFrZWZpbGUgKENGTEFHUy1ydGxkLmMpOiBhZGQgJChQSUMtY2NmbGFnKS4KKworIHBvcnRzL3N5c2RlcHMvYWxwaGEvTWFrZWZpbGUgfCAgICAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9nbGliYy1wb3J0cy0yLjEyLjEvc3lzZGVwcy9hbHBoYS9NYWtlZmlsZSBnbGliYy0yLjEyLjEvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvYWxwaGEvTWFrZWZpbGUKKy0tLSBnbGliYy0yLjEyLjEub3JpZy9nbGliYy1wb3J0cy0yLjEyLjEvc3lzZGVwcy9hbHBoYS9NYWtlZmlsZQkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTIuMS9nbGliYy1wb3J0cy0yLjEyLjEvc3lzZGVwcy9hbHBoYS9NYWtlZmlsZQkyMDA5LTExLTEzIDAwOjUxOjEzLjAwMDAwMDAwMCArMDEwMAorQEAgLTM1LDcgKzM1LDggQEAKKyAKKyBpZmVxICgkKHN1YmRpciksZWxmKQorICMgVGhlIGxkLnNvIHN0YXJ0dXAgY29kZSBjYW5ub3QgdXNlIGxpdGVyYWxzIHVudGlsIGl0IHNlbGYtcmVsb2NhdGVzLgorLUNGTEFHUy1ydGxkLmMgPSAtbWJ1aWxkLWNvbnN0YW50cworKyMgSXQgdXNlcyBtb3JlIHRoYW4gNjRrIGZvciB0aGUgc21hbGwgZGF0YSBhcmVhLgorK0NGTEFHUy1ydGxkLmMgPSAtbWJ1aWxkLWNvbnN0YW50cyAkKFBJQy1jY2ZsYWcpCisgZW5kaWYKKyAKKyAjIEJ1aWxkIGV2ZXJ5dGhpbmcgd2l0aCBmdWxsIElFRUUgbWF0aCBzdXBwb3J0LCBhbmQgd2l0aCBkeW5hbWljIHJvdW5kaW5nOworZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9wb3J0cy9zeXNkZXBzL2FscGhhL01ha2VmaWxlIGdsaWJjLTIuMTIuMS9wb3J0cy9zeXNkZXBzL2FscGhhL01ha2VmaWxlCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzU2MC1wcGMtYXRvbWljLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS81NjAtcHBjLWF0b21pYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzllZjE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS81NjAtcHBjLWF0b21pYy5wYXRjaApAQCAtMCwwICsxLDQxNSBAQAorc25pcGVkIGZyb20gc3VzZQorCitJbmRleDogc3lzZGVwcy9wb3dlcnBjL2JpdHMvYXRvbWljLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JDUyBmaWxlOiAvY3ZzL2dsaWJjL2xpYmMvc3lzZGVwcy9wb3dlcnBjL2JpdHMvYXRvbWljLmgsdgorcmV0cmlldmluZyByZXZpc2lvbiAxLjE3CitkaWZmIC11IC1hIC1wIC1yMS4xNyBhdG9taWMuaAorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL3N5c2RlcHMvcG93ZXJwYy9iaXRzL2F0b21pYy5oIGdsaWJjLTIuMTIuMS9zeXNkZXBzL3Bvd2VycGMvYml0cy9hdG9taWMuaAorLS0tIGdsaWJjLTIuMTIuMS5vcmlnL3N5c2RlcHMvcG93ZXJwYy9iaXRzL2F0b21pYy5oCTIwMDctMDMtMjYgMjI6MTU6MjguMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMi4xL3N5c2RlcHMvcG93ZXJwYy9iaXRzL2F0b21pYy5oCTIwMDktMTEtMTMgMDA6NTE6MTkuMDAwMDAwMDAwICswMTAwCitAQCAtODUsMTQgKzg1LDE0IEBACisgICAgICAgX190eXBlb2YgKCoobWVtKSkgX190bXA7CQkJCQkJICAgICAgXAorICAgICAgIF9fdHlwZW9mIChtZW0pICBfX21lbXAgPSAobWVtKTsJCQkJCSAgICAgIFwKKyAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgJCQkJCQkgICAgICBcCistCQkgICAgICAgICIxOglsd2FyeAklMCwwLCUxIiBNVVRFWF9ISU5UX0FDUSAiXG4iCSAgICAgIFwKKysJCSAgICAgICAgIjE6CWx3YXJ4CSUwLCV5MSIgTVVURVhfSElOVF9BQ1EgIlxuIgkgICAgICBcCisgCQkgICAgICAgICIJY21wdwklMCwlMlxuIgkJCSAgICAgIFwKKyAJCSAgICAgICAgIglibmUJMmZcbiIJCQkJICAgICAgXAorLQkJICAgICAgICAiCXN0d2N4LgklMywwLCUxXG4iCQkJICAgICAgXAorKwkJICAgICAgICAiCXN0d2N4LgklMywleTFcbiIJCQkgICAgICBcCisgCQkgICAgICAgICIJYm5lLQkxYlxuIgkJCQkgICAgICBcCisgCQkgICAgICAgICIyOgkiIF9fQVJDSF9BQ1FfSU5TVFIJCQkgICAgICBcCistCQkgICAgICAgIDogIj0mciIgKF9fdG1wKQkJCQkJICAgICAgXAorLQkJICAgICAgICA6ICJiIiAoX19tZW1wKSwgInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJICAgICAgXAorKwkJICAgICAgICA6ICI9JnIiIChfX3RtcCksICIrWiIgKCpfX21lbXApCQkJICAgICAgXAorKwkJICAgICAgICA6ICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkJICAgICAgXAorIAkJICAgICAgICA6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgICBfX3RtcDsJCQkJCQkJCSAgICAgIFwKKyAgIH0pCitAQCAtMTAyLDE0ICsxMDIsMTQgQEAKKyAgICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX3RtcDsJCQkJCQkgICAgICBcCisgICAgICAgX190eXBlb2YgKG1lbSkgIF9fbWVtcCA9IChtZW0pOwkJCQkJICAgICAgXAorICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKF9fQVJDSF9SRUxfSU5TVFIgIlxuIgkJCQkgICAgICBcCistCQkgICAgICAgICIxOglsd2FyeAklMCwwLCUxIiBNVVRFWF9ISU5UX1JFTCAiXG4iCSAgICAgIFwKKysJCSAgICAgICAgIjE6CWx3YXJ4CSUwLCV5MSIgTVVURVhfSElOVF9SRUwgIlxuIgkgICAgICBcCisgCQkgICAgICAgICIJY21wdwklMCwlMlxuIgkJCSAgICAgIFwKKyAJCSAgICAgICAgIglibmUJMmZcbiIJCQkJICAgICAgXAorLQkJICAgICAgICAiCXN0d2N4LgklMywwLCUxXG4iCQkJICAgICAgXAorKwkJICAgICAgICAiCXN0d2N4LgklMywleTFcbiIJCQkgICAgICBcCisgCQkgICAgICAgICIJYm5lLQkxYlxuIgkJCQkgICAgICBcCisgCQkgICAgICAgICIyOgkiCQkJCQkgICAgICBcCistCQkgICAgICAgIDogIj0mciIgKF9fdG1wKQkJCQkJICAgICAgXAorLQkJICAgICAgICA6ICJiIiAoX19tZW1wKSwgInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJICAgICAgXAorKwkJICAgICAgICA6ICI9JnIiIChfX3RtcCksICIrWiIgKF9fbWVtcCkJCQkgICAgICBcCisrCQkgICAgICAgIDogInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCQkgICAgICBcCisgCQkgICAgICAgIDogImNyMCIsICJtZW1vcnkiKTsJCQkJICAgICAgXAorICAgICAgIF9fdG1wOwkJCQkJCQkJICAgICAgXAorICAgfSkKK0BAIC0xMTgsMTIgKzExOCwxMiBAQAorICAgKHsJCQkJCQkJCQkgICAgICBcCisgICAgIF9fdHlwZW9mICgqbWVtKSBfX3ZhbDsJCQkJCQkgICAgICBcCisgICAgIF9fYXNtIF9fdm9sYXRpbGUgKAkJCQkJCQkgICAgICBcCistCQkgICAgICAiMToJbHdhcngJJTAsMCwlMiIgTVVURVhfSElOVF9BQ1EgIlxuIgkgICAgICBcCistCQkgICAgICAiCQlzdHdjeC4JJTMsMCwlMlxuIgkJCSAgICAgIFwKKysJCSAgICAgICIxOglsd2FyeAklMCwleTEiIE1VVEVYX0hJTlRfQUNRICJcbiIJICAgICAgXAorKwkJICAgICAgIgkJc3R3Y3guCSUyLCV5MVxuIgkJCSAgICAgIFwKKyAJCSAgICAgICIJCWJuZS0JMWJcbiIJCQkJICAgICAgXAorIAkJICAgICAgIiAgICIgX19BUkNIX0FDUV9JTlNUUgkJCQkgICAgICBcCistCQkgICAgICA6ICI9JnIiIChfX3ZhbCksICI9bSIgKCptZW0pCQkJICAgICAgXAorLQkJICAgICAgOiAiYiIgKG1lbSksICJyIiAodmFsdWUpLCAibSIgKCptZW0pCQkgICAgICBcCisrCQkgICAgICA6ICI9JnIiIChfX3ZhbCksICIrWiIgKCptZW0pCQkJICAgICAgXAorKwkJICAgICAgOiAiciIgKHZhbHVlKQkJCQkJICAgICAgXAorIAkJICAgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkgICAgICBcCisgICAgIF9fdmFsOwkJCQkJCQkJICAgICAgXAorICAgfSkKK0BAIC0xMzIsMTEgKzEzMiwxMSBAQAorICAgKHsJCQkJCQkJCQkgICAgICBcCisgICAgIF9fdHlwZW9mICgqbWVtKSBfX3ZhbDsJCQkJCQkgICAgICBcCisgICAgIF9fYXNtIF9fdm9sYXRpbGUgKF9fQVJDSF9SRUxfSU5TVFIgIlxuIgkJCQkgICAgICBcCistCQkgICAgICAiMToJbHdhcngJJTAsMCwlMiIgTVVURVhfSElOVF9SRUwgIlxuIgkgICAgICBcCistCQkgICAgICAiCQlzdHdjeC4JJTMsMCwlMlxuIgkJCSAgICAgIFwKKysJCSAgICAgICIxOglsd2FyeAklMCwleTEiIE1VVEVYX0hJTlRfUkVMICJcbiIJICAgICAgXAorKwkJICAgICAgIgkJc3R3Y3guCSUyLCV5MVxuIgkJCSAgICAgIFwKKyAJCSAgICAgICIJCWJuZS0JMWIiCQkJCSAgICAgIFwKKy0JCSAgICAgIDogIj0mciIgKF9fdmFsKSwgIj1tIiAoKm1lbSkJCQkgICAgICBcCistCQkgICAgICA6ICJiIiAobWVtKSwgInIiICh2YWx1ZSksICJtIiAoKm1lbSkJCSAgICAgIFwKKysJCSAgICAgIDogIj0mciIgKF9fdmFsKSwgIitaIiAoKm1lbSkJCQkgICAgICBcCisrCQkgICAgICA6ICJyIiAodmFsdWUpCQkJCQkgICAgICBcCisgCQkgICAgICA6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgX192YWw7CQkJCQkJCQkgICAgICBcCisgICB9KQorQEAgLTE0NCwxMiArMTQ0LDEyIEBACisgI2RlZmluZSBfX2FyY2hfYXRvbWljX2V4Y2hhbmdlX2FuZF9hZGRfMzIobWVtLCB2YWx1ZSkgXAorICAgKHsJCQkJCQkJCQkgICAgICBcCisgICAgIF9fdHlwZW9mICgqbWVtKSBfX3ZhbCwgX190bXA7CQkJCQkgICAgICBcCistICAgIF9fYXNtIF9fdm9sYXRpbGUgKCIxOglsd2FyeAklMCwwLCUzXG4iCQkJICAgICAgXAorLQkJICAgICAgIgkJYWRkCSUxLCUwLCU0XG4iCQkJICAgICAgXAorLQkJICAgICAgIgkJc3R3Y3guCSUxLDAsJTNcbiIJCQkgICAgICBcCisrICAgIF9fYXNtIF9fdm9sYXRpbGUgKCIxOglsd2FyeAklMCwleTJcbiIJCQkgICAgICBcCisrCQkgICAgICAiCQlhZGQJJTEsJTAsJTNcbiIJCQkgICAgICBcCisrCQkgICAgICAiCQlzdHdjeC4JJTEsJXkyXG4iCQkJICAgICAgXAorIAkJICAgICAgIgkJYm5lLQkxYiIJCQkJICAgICAgXAorLQkJICAgICAgOiAiPSZiIiAoX192YWwpLCAiPSZyIiAoX190bXApLCAiPW0iICgqbWVtKQkgICAgICBcCistCQkgICAgICA6ICJiIiAobWVtKSwgInIiICh2YWx1ZSksICJtIiAoKm1lbSkJCSAgICAgIFwKKysJCSAgICAgIDogIj0mYiIgKF9fdmFsKSwgIj0mciIgKF9fdG1wKSwgIitaIiAoKm1lbSkJICAgICAgXAorKwkJICAgICAgOiAiciIgKHZhbHVlKQkJCQkJICAgICAgXAorIAkJICAgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkgICAgICBcCisgICAgIF9fdmFsOwkJCQkJCQkJICAgICAgXAorICAgfSkKK0BAIC0xNTcsMTIgKzE1NywxMiBAQAorICNkZWZpbmUgX19hcmNoX2F0b21pY19pbmNyZW1lbnRfdmFsXzMyKG1lbSkgXAorICAgKHsJCQkJCQkJCQkgICAgICBcCisgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fdmFsOwkJCQkJCSAgICAgIFwKKy0gICAgX19hc20gX192b2xhdGlsZSAoIjE6CWx3YXJ4CSUwLDAsJTJcbiIJCQkgICAgICBcCisrICAgIF9fYXNtIF9fdm9sYXRpbGUgKCIxOglsd2FyeAklMCwleTFcbiIJCQkgICAgICBcCisgCQkgICAgICAiCQlhZGRpCSUwLCUwLDFcbiIJCQkgICAgICBcCistCQkgICAgICAiCQlzdHdjeC4JJTAsMCwlMlxuIgkJCSAgICAgIFwKKysJCSAgICAgICIJCXN0d2N4LgklMCwleTFcbiIJCQkgICAgICBcCisgCQkgICAgICAiCQlibmUtCTFiIgkJCQkgICAgICBcCistCQkgICAgICA6ICI9JmIiIChfX3ZhbCksICI9bSIgKCptZW0pCQkJICAgICAgXAorLQkJICAgICAgOiAiYiIgKG1lbSksICJtIiAoKm1lbSkJCQkJICAgICAgXAorKwkJICAgICAgOiAiPSZiIiAoX192YWwpLCAiK1oiICgqbWVtKQkJCSAgICAgIFwKKysJCSAgICAgIDoJCQkJCQkJICAgICAgXAorIAkJICAgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkgICAgICBcCisgICAgIF9fdmFsOwkJCQkJCQkJICAgICAgXAorICAgfSkKK0BAIC0xNzAsMjcgKzE3MCwyNyBAQAorICNkZWZpbmUgX19hcmNoX2F0b21pY19kZWNyZW1lbnRfdmFsXzMyKG1lbSkgXAorICAgKHsJCQkJCQkJCQkgICAgICBcCisgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fdmFsOwkJCQkJCSAgICAgIFwKKy0gICAgX19hc20gX192b2xhdGlsZSAoIjE6CWx3YXJ4CSUwLDAsJTJcbiIJCQkgICAgICBcCisrICAgIF9fYXNtIF9fdm9sYXRpbGUgKCIxOglsd2FyeAklMCwleTFcbiIJCQkgICAgICBcCisgCQkgICAgICAiCQlzdWJpCSUwLCUwLDFcbiIJCQkgICAgICBcCistCQkgICAgICAiCQlzdHdjeC4JJTAsMCwlMlxuIgkJCSAgICAgIFwKKysJCSAgICAgICIJCXN0d2N4LgklMCwleTFcbiIJCQkgICAgICBcCisgCQkgICAgICAiCQlibmUtCTFiIgkJCQkgICAgICBcCistCQkgICAgICA6ICI9JmIiIChfX3ZhbCksICI9bSIgKCptZW0pCQkJICAgICAgXAorLQkJICAgICAgOiAiYiIgKG1lbSksICJtIiAoKm1lbSkJCQkJICAgICAgXAorKwkJICAgICAgOiAiPSZiIiAoX192YWwpLCAiK1oiICgqbWVtKQkJCSAgICAgIFwKKysJCSAgICAgIDoJCQkJCQkJICAgICAgXAorIAkJICAgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkgICAgICBcCisgICAgIF9fdmFsOwkJCQkJCQkJICAgICAgXAorICAgfSkKKyAKKyAjZGVmaW5lIF9fYXJjaF9hdG9taWNfZGVjcmVtZW50X2lmX3Bvc2l0aXZlXzMyKG1lbSkgXAorICAgKHsgaW50IF9fdmFsLCBfX3RtcDsJCQkJCQkJICAgICAgXAorLSAgICAgX19hc20gX192b2xhdGlsZSAoIjE6CWx3YXJ4CSUwLDAsJTNcbiIJCQkgICAgICBcCisrICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbHdhcngJJTAsJXkyXG4iCQkJICAgICAgXAorIAkJICAgICAgICIJY21wd2kJMCwlMCwwXG4iCQkJICAgICAgXAorIAkJICAgICAgICIJYWRkaQklMSwlMCwtMVxuIgkJCSAgICAgIFwKKyAJCSAgICAgICAiCWJsZQkyZlxuIgkJCQkgICAgICBcCistCQkgICAgICAgIglzdHdjeC4JJTEsMCwlM1xuIgkJCSAgICAgIFwKKysJCSAgICAgICAiCXN0d2N4LgklMSwleTJcbiIJCQkgICAgICBcCisgCQkgICAgICAgIglibmUtCTFiXG4iCQkJCSAgICAgIFwKKyAJCSAgICAgICAiMjoJIiBfX0FSQ0hfQUNRX0lOU1RSCQkJICAgICAgXAorLQkJICAgICAgIDogIj0mYiIgKF9fdmFsKSwgIj0mciIgKF9fdG1wKSwgIj1tIiAoKm1lbSkJICAgICAgXAorLQkJICAgICAgIDogImIiIChtZW0pLCAibSIgKCptZW0pCQkJCSAgICAgIFwKKysJCSAgICAgICA6ICI9JmIiIChfX3ZhbCksICI9JnIiIChfX3RtcCksICIrWiIgKCptZW0pCSAgICAgIFwKKysJCSAgICAgICA6CQkJCQkJICAgICAgXAorIAkJICAgICAgIDogImNyMCIsICJtZW1vcnkiKTsJCQkJICAgICAgXAorICAgICAgX192YWw7CQkJCQkJCQkgICAgICBcCisgICB9KQorZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2JpdHMvYXRvbWljLmggZ2xpYmMtMi4xMi4xL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvYml0cy9hdG9taWMuaAorLS0tIGdsaWJjLTIuMTIuMS5vcmlnL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvYml0cy9hdG9taWMuaAkyMDA3LTAzLTI2IDIyOjE1OjQ1LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTIuMS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2JpdHMvYXRvbWljLmgJMjAwOS0xMS0xMyAwMDo1MToxOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC00NCwxNCArNDQsMTQgQEAKKyAoewkJCQkJCQkJCSAgICAgIFwKKyAgIHVuc2lnbmVkIGludCBfX3RtcDsJCQkJCQkJICAgICAgXAorICAgX19hc20gX192b2xhdGlsZSAoCQkJCQkJCSAgICAgIFwKKy0JCSAgICAiMToJbHdhcngJJTAsMCwlMSIgTVVURVhfSElOVF9BQ1EgIlxuIgkJICAgICAgXAorKwkJICAgICIxOglsd2FyeAklMCwleTEiIE1VVEVYX0hJTlRfQUNRICJcbiIJCSAgICAgIFwKKyAJCSAgICAiCXN1YmYuCSUwLCUyLCUwXG4iCQkJCSAgICAgIFwKKyAJCSAgICAiCWJuZQkyZlxuIgkJCQkJICAgICAgXAorLQkJICAgICIJc3R3Y3guCSUzLDAsJTFcbiIJCQkJICAgICAgXAorKwkJICAgICIJc3R3Y3guCSUzLCV5MVxuIgkJCQkgICAgICBcCisgCQkgICAgIglibmUtCTFiXG4iCQkJCQkgICAgICBcCisgCQkgICAgIjI6CSIgX19BUkNIX0FDUV9JTlNUUgkJCQkgICAgICBcCistCQkgICAgOiAiPSZyIiAoX190bXApCQkJCQkgICAgICBcCistCQkgICAgOiAiYiIgKG1lbSksICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkgICAgICBcCisrCQkgICAgOiAiPSZyIiAoX190bXApLCAiK1oiICgqKG1lbSkpCQkJICAgICAgXAorKwkJICAgIDogInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCQkgICAgICBcCisgCQkgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkJICAgICAgXAorICAgX190bXAgIT0gMDsJCQkJCQkJCSAgICAgIFwKKyB9KQorQEAgLTYwLDE0ICs2MCwxNCBAQAorICh7CQkJCQkJCQkJICAgICAgXAorICAgdW5zaWduZWQgaW50IF9fdG1wOwkJCQkJCQkgICAgICBcCisgICBfX2FzbSBfX3ZvbGF0aWxlIChfX0FSQ0hfUkVMX0lOU1RSICJcbiIJCQkJICAgICAgXAorLQkJICAgICIxOglsd2FyeAklMCwwLCUxIiBNVVRFWF9ISU5UX1JFTCAiXG4iCQkgICAgICBcCisrCQkgICAgIjE6CWx3YXJ4CSUwLCV5MSIgTVVURVhfSElOVF9SRUwgIlxuIgkJICAgICAgXAorIAkJICAgICIJc3ViZi4JJTAsJTIsJTBcbiIJCQkJICAgICAgXAorIAkJICAgICIJYm5lCTJmXG4iCQkJCQkgICAgICBcCistCQkgICAgIglzdHdjeC4JJTMsMCwlMVxuIgkJCQkgICAgICBcCisrCQkgICAgIglzdHdjeC4JJTMsJXkxXG4iCQkJCSAgICAgIFwKKyAJCSAgICAiCWJuZS0JMWJcbiIJCQkJCSAgICAgIFwKKyAJCSAgICAiMjoJIgkJCQkJCSAgICAgIFwKKy0JCSAgICA6ICI9JnIiIChfX3RtcCkJCQkJCSAgICAgIFwKKy0JCSAgICA6ICJiIiAobWVtKSwgInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCSAgICAgIFwKKysJCSAgICA6ICI9JnIiIChfX3RtcCksICIrWiIgKCoobWVtKSkJCQkgICAgICBcCisrCQkgICAgOiAiciIgKG9sZHZhbCksICJyIiAobmV3dmFsKQkJCSAgICAgIFwKKyAJCSAgICA6ICJjcjAiLCAibWVtb3J5Iik7CQkJCQkgICAgICBcCisgICBfX3RtcCAhPSAwOwkJCQkJCQkJICAgICAgXAorIH0pCitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvYml0cy9hdG9taWMuaCBnbGliYy0yLjEyLjEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9iaXRzL2F0b21pYy5oCistLS0gZ2xpYmMtMi4xMi4xLm9yaWcvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9iaXRzL2F0b21pYy5oCTIwMDctMDMtMjYgMjI6MTY6MDMuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMi4xL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvYml0cy9hdG9taWMuaAkyMDA5LTExLTEzIDAwOjUxOjE5LjAwMDAwMDAwMCArMDEwMAorQEAgLTQ0LDE0ICs0NCwxNCBAQAorICh7CQkJCQkJCQkJICAgICAgXAorICAgdW5zaWduZWQgaW50IF9fdG1wLCBfX3RtcDI7CQkJCQkJICAgICAgXAorICAgX19hc20gX192b2xhdGlsZSAoIiAgIGNscmxkaSAgJTEsJTEsMzJcbiIJCQkJICAgICAgXAorLQkJICAgICIxOglsd2FyeAklMCwwLCUyIiBNVVRFWF9ISU5UX0FDUSAiXG4iCSAJICAgICAgXAorKwkJICAgICIxOglsd2FyeAklMCwleTIiIE1VVEVYX0hJTlRfQUNRICJcbiIJIAkgICAgICBcCisgCQkgICAgIglzdWJmLgklMCwlMSwlMFxuIgkJCQkgICAgICBcCisgCQkgICAgIglibmUJMmZcbiIJCQkJCSAgICAgIFwKKy0JCSAgICAiCXN0d2N4LgklNCwwLCUyXG4iCQkJCSAgICAgIFwKKysJCSAgICAiCXN0d2N4LgklNCwleTJcbiIJCQkJICAgICAgXAorIAkJICAgICIJYm5lLQkxYlxuIgkJCQkJICAgICAgXAorIAkJICAgICIyOgkiIF9fQVJDSF9BQ1FfSU5TVFIJCQkJICAgICAgXAorLQkJICAgIDogIj0mciIgKF9fdG1wKSwgIj1yIiAoX190bXAyKQkJCSAgICAgIFwKKy0JCSAgICA6ICJiIiAobWVtKSwgIjEiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCSAgICAgIFwKKysJCSAgICA6ICI9JnIiIChfX3RtcCksICI9ciIgKF9fdG1wMiksICIrWiIgKCoobWVtKSkJICAgICAgXAorKwkJICAgIDogIjEiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCQkgICAgICBcCisgCQkgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkJICAgICAgXAorICAgX190bXAgIT0gMDsJCQkJCQkJCSAgICAgIFwKKyB9KQorQEAgLTYxLDE0ICs2MSwxNCBAQAorICAgdW5zaWduZWQgaW50IF9fdG1wLCBfX3RtcDI7CQkJCQkJICAgICAgXAorICAgX19hc20gX192b2xhdGlsZSAoX19BUkNIX1JFTF9JTlNUUiAiXG4iCQkJCSAgICAgIFwKKyAJCSAgICAiICAgY2xybGRpICAlMSwlMSwzMlxuIgkJCQkgICAgICBcCistCQkgICAgIjE6CWx3YXJ4CSUwLDAsJTIiIE1VVEVYX0hJTlRfUkVMICJcbiIJCSAgICAgIFwKKysJCSAgICAiMToJbHdhcngJJTAsJXkyIiBNVVRFWF9ISU5UX1JFTCAiXG4iCQkgICAgICBcCisgCQkgICAgIglzdWJmLgklMCwlMSwlMFxuIgkJCQkgICAgICBcCisgCQkgICAgIglibmUJMmZcbiIJCQkJCSAgICAgIFwKKy0JCSAgICAiCXN0d2N4LgklNCwwLCUyXG4iCQkJCSAgICAgIFwKKysJCSAgICAiCXN0d2N4LgklNCwleTJcbiIJCQkJICAgICAgXAorIAkJICAgICIJYm5lLQkxYlxuIgkJCQkJICAgICAgXAorIAkJICAgICIyOgkiCQkJCQkJICAgICAgXAorLQkJICAgIDogIj0mciIgKF9fdG1wKSwgIj1yIiAoX190bXAyKQkJCSAgICAgIFwKKy0JCSAgICA6ICJiIiAobWVtKSwgIjEiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCSAgICAgIFwKKysJCSAgICA6ICI9JnIiIChfX3RtcCksICI9ciIgKF9fdG1wMiksICIrWiIgKCoobWVtKSkJICAgICAgXAorKwkJICAgIDogIjEiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCQkgICAgICBcCisgCQkgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkJICAgICAgXAorICAgX190bXAgIT0gMDsJCQkJCQkJCSAgICAgIFwKKyB9KQorQEAgLTgyLDE0ICs4MiwxNCBAQAorICh7CQkJCQkJCQkJICAgICAgXAorICAgdW5zaWduZWQgbG9uZwlfX3RtcDsJCQkJCQkJICAgICAgXAorICAgX19hc20gX192b2xhdGlsZSAoCQkJCQkJCSAgICAgIFwKKy0JCSAgICAiMToJbGRhcngJJTAsMCwlMSIgTVVURVhfSElOVF9BQ1EgIlxuIgkJICAgICAgXAorKwkJICAgICIxOglsZGFyeAklMCwleTEiIE1VVEVYX0hJTlRfQUNRICJcbiIJCSAgICAgIFwKKyAJCSAgICAiCXN1YmYuCSUwLCUyLCUwXG4iCQkJCSAgICAgIFwKKyAJCSAgICAiCWJuZQkyZlxuIgkJCQkJICAgICAgXAorLQkJICAgICIJc3RkY3guCSUzLDAsJTFcbiIJCQkJICAgICAgXAorKwkJICAgICIJc3RkY3guCSUzLCV5MVxuIgkJCQkgICAgICBcCisgCQkgICAgIglibmUtCTFiXG4iCQkJCQkgICAgICBcCisgCQkgICAgIjI6CSIgX19BUkNIX0FDUV9JTlNUUgkJCQkgICAgICBcCistCQkgICAgOiAiPSZyIiAoX190bXApCQkJCQkgICAgICBcCistCQkgICAgOiAiYiIgKG1lbSksICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkgICAgICBcCisrCQkgICAgOiAiPSZyIiAoX190bXApLCAiK1oiICgqKG1lbSkpCQkJICAgICAgXAorKwkJICAgIDogInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCQkgICAgICBcCisgCQkgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkJICAgICAgXAorICAgX190bXAgIT0gMDsJCQkJCQkJCSAgICAgIFwKKyB9KQorQEAgLTk4LDE0ICs5OCwxNCBAQAorICh7CQkJCQkJCQkJICAgICAgXAorICAgdW5zaWduZWQgbG9uZwlfX3RtcDsJCQkJCQkJICAgICAgXAorICAgX19hc20gX192b2xhdGlsZSAoX19BUkNIX1JFTF9JTlNUUiAiXG4iCQkJCSAgICAgIFwKKy0JCSAgICAiMToJbGRhcngJJTAsMCwlMiIgTVVURVhfSElOVF9SRUwgIlxuIgkJICAgICAgXAorKwkJICAgICIxOglsZGFyeAklMCwleTEiIE1VVEVYX0hJTlRfUkVMICJcbiIJCSAgICAgIFwKKyAJCSAgICAiCXN1YmYuCSUwLCUyLCUwXG4iCQkJCSAgICAgIFwKKyAJCSAgICAiCWJuZQkyZlxuIgkJCQkJICAgICAgXAorLQkJICAgICIJc3RkY3guCSUzLDAsJTFcbiIJCQkJICAgICAgXAorKwkJICAgICIJc3RkY3guCSUzLCV5MVxuIgkJCQkgICAgICBcCisgCQkgICAgIglibmUtCTFiXG4iCQkJCQkgICAgICBcCisgCQkgICAgIjI6CSIJCQkJCQkgICAgICBcCistCQkgICAgOiAiPSZyIiAoX190bXApCQkJCQkgICAgICBcCistCQkgICAgOiAiYiIgKG1lbSksICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkgICAgICBcCisrCQkgICAgOiAiPSZyIiAoX190bXApLCAiK1oiICgqKG1lbSkpCQkJICAgICAgXAorKwkJICAgIDogInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCQkgICAgICBcCisgCQkgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkJICAgICAgXAorICAgX190bXAgIT0gMDsJCQkJCQkJCSAgICAgIFwKKyB9KQorQEAgLTExNSwxNCArMTE1LDE0IEBACisgICAgICAgX190eXBlb2YgKCoobWVtKSkgX190bXA7CQkJCQkJICAgICAgXAorICAgICAgIF9fdHlwZW9mIChtZW0pICBfX21lbXAgPSAobWVtKTsJCQkJCSAgICAgIFwKKyAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgJCQkJCQkgICAgICBcCistCQkgICAgICAgICIxOglsZGFyeAklMCwwLCUxIiBNVVRFWF9ISU5UX0FDUSAiXG4iCSAgICAgIFwKKysJCSAgICAgICAgIjE6CWxkYXJ4CSUwLCV5MSIgTVVURVhfSElOVF9BQ1EgIlxuIgkgICAgICBcCisgCQkgICAgICAgICIJY21wZAklMCwlMlxuIgkJCSAgICAgIFwKKyAJCSAgICAgICAgIglibmUJMmZcbiIJCQkJICAgICAgXAorLQkJICAgICAgICAiCXN0ZGN4LgklMywwLCUxXG4iCQkJICAgICAgXAorKwkJICAgICAgICAiCXN0ZGN4LgklMywleTFcbiIJCQkgICAgICBcCisgCQkgICAgICAgICIJYm5lLQkxYlxuIgkJCQkgICAgICBcCisgCQkgICAgICAgICIyOgkiIF9fQVJDSF9BQ1FfSU5TVFIJCQkgICAgICBcCistCQkgICAgICAgIDogIj0mciIgKF9fdG1wKQkJCQkJICAgICAgXAorLQkJICAgICAgICA6ICJiIiAoX19tZW1wKSwgInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJICAgICAgXAorKwkJICAgICAgICA6ICI9JnIiIChfX3RtcCksICIrWiIgKCpfX21lbXApCQkJICAgICAgXAorKwkJICAgICAgICA6ICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkJICAgICAgXAorIAkJICAgICAgICA6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgICBfX3RtcDsJCQkJCQkJCSAgICAgIFwKKyAgIH0pCitAQCAtMTMyLDE0ICsxMzIsMTQgQEAKKyAgICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX3RtcDsJCQkJCQkgICAgICBcCisgICAgICAgX190eXBlb2YgKG1lbSkgIF9fbWVtcCA9IChtZW0pOwkJCQkJICAgICAgXAorICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKF9fQVJDSF9SRUxfSU5TVFIgIlxuIgkJCQkgICAgICBcCistCQkgICAgICAgICIxOglsZGFyeAklMCwwLCUxIiBNVVRFWF9ISU5UX1JFTCAiXG4iCSAgICAgIFwKKysJCSAgICAgICAgIjE6CWxkYXJ4CSUwLCV5MSIgTVVURVhfSElOVF9SRUwgIlxuIgkgICAgICBcCisgCQkgICAgICAgICIJY21wZAklMCwlMlxuIgkJCSAgICAgIFwKKyAJCSAgICAgICAgIglibmUJMmZcbiIJCQkJICAgICAgXAorLQkJICAgICAgICAiCXN0ZGN4LgklMywwLCUxXG4iCQkJICAgICAgXAorKwkJICAgICAgICAiCXN0ZGN4LgklMywleTFcbiIJCQkgICAgICBcCisgCQkgICAgICAgICIJYm5lLQkxYlxuIgkJCQkgICAgICBcCisgCQkgICAgICAgICIyOgkiCQkJCQkgICAgICBcCistCQkgICAgICAgIDogIj0mciIgKF9fdG1wKQkJCQkJICAgICAgXAorLQkJICAgICAgICA6ICJiIiAoX19tZW1wKSwgInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJICAgICAgXAorKwkJICAgICAgICA6ICI9JnIiIChfX3RtcCksICIrWiIgKCpfX21lbXApCQkJICAgICAgXAorKwkJICAgICAgICA6ICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkJICAgICAgXAorIAkJICAgICAgICA6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgICBfX3RtcDsJCQkJCQkJCSAgICAgIFwKKyAgIH0pCitAQCAtMTQ4LDEyICsxNDgsMTIgQEAKKyAgICAgKHsJCQkJCQkJCQkgICAgICBcCisgICAgICAgX190eXBlb2YgKCptZW0pIF9fdmFsOwkJCQkJCSAgICAgIFwKKyAgICAgICBfX2FzbSBfX3ZvbGF0aWxlIChfX0FSQ0hfUkVMX0lOU1RSICJcbiIJCQkJICAgICAgXAorLQkJCSIxOglsZGFyeAklMCwwLCUyIiBNVVRFWF9ISU5UX0FDUSAiXG4iCSAgICAgIFwKKy0JCQkiCXN0ZGN4LgklMywwLCUyXG4iCQkJICAgICAgXAorKwkJCSIxOglsZGFyeAklMCwleTEiIE1VVEVYX0hJTlRfQUNRICJcbiIJICAgICAgXAorKwkJCSIJc3RkY3guCSUyLCV5MVxuIgkJCSAgICAgIFwKKyAJCQkiCWJuZS0JMWJcbiIJCQkJICAgICAgXAorIAkJICAiICIgX19BUkNIX0FDUV9JTlNUUgkJCQkJICAgICAgXAorLQkJCTogIj0mciIgKF9fdmFsKSwgIj1tIiAoKm1lbSkJCQkgICAgICBcCistCQkJOiAiYiIgKG1lbSksICJyIiAodmFsdWUpLCAibSIgKCptZW0pCQkgICAgICBcCisrCQkJOiAiPSZyIiAoX192YWwpLCAiK1oiICgqKG1lbSkpCQkJICAgICAgXAorKwkJCTogInIiICh2YWx1ZSkJCQkJCSAgICAgIFwKKyAJCQk6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgICBfX3ZhbDsJCQkJCQkJCSAgICAgIFwKKyAgICAgfSkKK0BAIC0xNjIsMTEgKzE2MiwxMSBAQAorICAgICAoewkJCQkJCQkJCSAgICAgIFwKKyAgICAgICBfX3R5cGVvZiAoKm1lbSkgX192YWw7CQkJCQkJICAgICAgXAorICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKF9fQVJDSF9SRUxfSU5TVFIgIlxuIgkJCQkgICAgICBcCistCQkJIjE6CWxkYXJ4CSUwLDAsJTIiIE1VVEVYX0hJTlRfUkVMICJcbiIJICAgICAgXAorLQkJCSIJc3RkY3guCSUzLDAsJTJcbiIJCQkgICAgICBcCisrCQkJIjE6CWxkYXJ4CSUwLCV5MSIgTVVURVhfSElOVF9SRUwgIlxuIgkgICAgICBcCisrCQkJIglzdGRjeC4JJTIsJXkxXG4iCQkJICAgICAgXAorIAkJCSIJYm5lLQkxYiIJCQkJICAgICAgXAorLQkJCTogIj0mciIgKF9fdmFsKSwgIj1tIiAoKm1lbSkJCQkgICAgICBcCistCQkJOiAiYiIgKG1lbSksICJyIiAodmFsdWUpLCAibSIgKCptZW0pCQkgICAgICBcCisrCQkJOiAiPSZyIiAoX192YWwpLCAiK1oiICgqKG1lbSkpCQkJICAgICAgXAorKwkJCTogInIiICh2YWx1ZSkJCQkJCSAgICAgIFwKKyAJCQk6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgICBfX3ZhbDsJCQkJCQkJCSAgICAgIFwKKyAgICAgfSkKK0BAIC0xNzQsMTIgKzE3NCwxMiBAQAorICNkZWZpbmUgX19hcmNoX2F0b21pY19leGNoYW5nZV9hbmRfYWRkXzY0KG1lbSwgdmFsdWUpIFwKKyAgICAgKHsJCQkJCQkJCQkgICAgICBcCisgICAgICAgX190eXBlb2YgKCptZW0pIF9fdmFsLCBfX3RtcDsJCQkJCSAgICAgIFwKKy0gICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbGRhcngJJTAsMCwlM1xuIgkJCSAgICAgIFwKKy0JCQkiCWFkZAklMSwlMCwlNFxuIgkJCSAgICAgIFwKKy0JCQkiCXN0ZGN4LgklMSwwLCUzXG4iCQkJICAgICAgXAorKyAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCIxOglsZGFyeAklMCwleTJcbiIJCQkgICAgICBcCisrCQkJIglhZGQJJTEsJTAsJTNcbiIJCQkgICAgICBcCisrCQkJIglzdGRjeC4JJTEsJXkyXG4iCQkJICAgICAgXAorIAkJCSIJYm5lLQkxYiIJCQkJICAgICAgXAorLQkJCTogIj0mYiIgKF9fdmFsKSwgIj0mciIgKF9fdG1wKSwgIj1tIiAoKm1lbSkJICAgICAgXAorLQkJCTogImIiIChtZW0pLCAiciIgKHZhbHVlKSwgIm0iICgqbWVtKQkJICAgICAgXAorKwkJCTogIj0mYiIgKF9fdmFsKSwgIj0mciIgKF9fdG1wKSwgIitaIiAoKihtZW0pKQkgICAgICBcCisrCQkJOiAiciIgKHZhbHVlKQkJCQkJICAgICAgXAorIAkJCTogImNyMCIsICJtZW1vcnkiKTsJCQkJICAgICAgXAorICAgICAgIF9fdmFsOwkJCQkJCQkJICAgICAgXAorICAgICB9KQorQEAgLTE4NywxMiArMTg3LDEyIEBACisgI2RlZmluZSBfX2FyY2hfYXRvbWljX2luY3JlbWVudF92YWxfNjQobWVtKSBcCisgICAgICh7CQkJCQkJCQkJICAgICAgXAorICAgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fdmFsOwkJCQkJCSAgICAgIFwKKy0gICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbGRhcngJJTAsMCwlMlxuIgkJCSAgICAgIFwKKysgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbGRhcngJJTAsJXkxXG4iCQkJICAgICAgXAorIAkJCSIJYWRkaQklMCwlMCwxXG4iCQkJICAgICAgXAorLQkJCSIJc3RkY3guCSUwLDAsJTJcbiIJCQkgICAgICBcCisrCQkJIglzdGRjeC4JJTAsJXkxXG4iCQkJICAgICAgXAorIAkJCSIJYm5lLQkxYiIJCQkJICAgICAgXAorLQkJCTogIj0mYiIgKF9fdmFsKSwgIj1tIiAoKm1lbSkJCQkgICAgICBcCistCQkJOiAiYiIgKG1lbSksICJtIiAoKm1lbSkJCQkJICAgICAgXAorKwkJCTogIj0mYiIgKF9fdmFsKSwgIitaIiAoKihtZW0pKQkJCSAgICAgIFwKKysJCQk6CQkJCQkJICAgICAgXAorIAkJCTogImNyMCIsICJtZW1vcnkiKTsJCQkJICAgICAgXAorICAgICAgIF9fdmFsOwkJCQkJCQkJICAgICAgXAorICAgICB9KQorQEAgLTIwMCwyNyArMjAwLDI3IEBACisgI2RlZmluZSBfX2FyY2hfYXRvbWljX2RlY3JlbWVudF92YWxfNjQobWVtKSBcCisgICAgICh7CQkJCQkJCQkJICAgICAgXAorICAgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fdmFsOwkJCQkJCSAgICAgIFwKKy0gICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbGRhcngJJTAsMCwlMlxuIgkJCSAgICAgIFwKKysgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbGRhcngJJTAsJXkxXG4iCQkJICAgICAgXAorIAkJCSIJc3ViaQklMCwlMCwxXG4iCQkJICAgICAgXAorLQkJCSIJc3RkY3guCSUwLDAsJTJcbiIJCQkgICAgICBcCisrCQkJIglzdGRjeC4JJTAsJXkxXG4iCQkJICAgICAgXAorIAkJCSIJYm5lLQkxYiIJCQkJICAgICAgXAorLQkJCTogIj0mYiIgKF9fdmFsKSwgIj1tIiAoKm1lbSkJCQkgICAgICBcCistCQkJOiAiYiIgKG1lbSksICJtIiAoKm1lbSkJCQkJICAgICAgXAorKwkJCTogIj0mYiIgKF9fdmFsKSwgIitaIiAoKihtZW0pKQkJCSAgICAgIFwKKysJCQk6CQkJCQkJICAgICAgXAorIAkJCTogImNyMCIsICJtZW1vcnkiKTsJCQkJICAgICAgXAorICAgICAgIF9fdmFsOwkJCQkJCQkJICAgICAgXAorICAgICB9KQorIAorICNkZWZpbmUgX19hcmNoX2F0b21pY19kZWNyZW1lbnRfaWZfcG9zaXRpdmVfNjQobWVtKSBcCisgICAoeyBpbnQgX192YWwsIF9fdG1wOwkJCQkJCQkgICAgICBcCistICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbGRhcngJJTAsMCwlM1xuIgkJCSAgICAgIFwKKysgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCIxOglsZGFyeAklMCwleTJcbiIJCQkgICAgICBcCisgCQkgICAgICAgIgljbXBkaQkwLCUwLDBcbiIJCQkgICAgICBcCisgCQkgICAgICAgIglhZGRpCSUxLCUwLC0xXG4iCQkJICAgICAgXAorIAkJICAgICAgICIJYmxlCTJmXG4iCQkJCSAgICAgIFwKKy0JCSAgICAgICAiCXN0ZGN4LgklMSwwLCUzXG4iCQkJICAgICAgXAorKwkJICAgICAgICIJc3RkY3guCSUxLCV5MlxuIgkJCSAgICAgIFwKKyAJCSAgICAgICAiCWJuZS0JMWJcbiIJCQkJICAgICAgXAorIAkJICAgICAgICIyOgkiIF9fQVJDSF9BQ1FfSU5TVFIJCQkgICAgICBcCistCQkgICAgICAgOiAiPSZiIiAoX192YWwpLCAiPSZyIiAoX190bXApLCAiPW0iICgqbWVtKQkgICAgICBcCistCQkgICAgICAgOiAiYiIgKG1lbSksICJtIiAoKm1lbSkJCQkJICAgICAgXAorKwkJICAgICAgIDogIj0mYiIgKF9fdmFsKSwgIj0mciIgKF9fdG1wKSwgIitaIiAoKihtZW0pKQkgICAgICBcCisrCQkgICAgICAgOgkJCQkJCSAgICAgIFwKKyAJCSAgICAgICA6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgIF9fdmFsOwkJCQkJCQkJICAgICAgXAorICAgfSkKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvNTcwLWFybS1jaXJydXMtZXA5M3h4LW1hdmVyaWNrLWNydW5jaC1mcHUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzU3MC1hcm0tY2lycnVzLWVwOTN4eC1tYXZlcmljay1jcnVuY2gtZnB1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNDJhOTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzU3MC1hcm0tY2lycnVzLWVwOTN4eC1tYXZlcmljay1jcnVuY2gtZnB1LnBhdGNoCkBAIC0wLDAgKzEsMzc0IEBACitodHRwOi8veWFubi5wb3VwZXQuZnJlZS5mci9lcDkzeHgvCitBZGQgc3VwcG9ydCBmb3IgdGhlIE1hdmVyaWNrIENydW5jaCBGUFUgb24gQ2lycnVzIEVQOTNYWCBwcm9jZXNzb3Igc2VyaWVzCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvYXJtL2JpdHMvZW5kaWFuLmggZ2xpYmMtMi4xMi4xL2dsaWJjLXBvcnRzLTIuMTIuMS9zeXNkZXBzL2FybS9iaXRzL2VuZGlhbi5oCistLS0gZ2xpYmMtMi4xMi4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvYXJtL2JpdHMvZW5kaWFuLmgJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEyLjEvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvYXJtL2JpdHMvZW5kaWFuLmgJMjAwOS0xMS0xMyAwMDo1MToyMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMiw3ICsxMiw3IEBACisgLyogRlBBIGZsb2F0aW5nIHBvaW50IHVuaXRzIGFyZSBhbHdheXMgYmlnLWVuZGlhbiwgaXJyZXNwZWN0aXZlIG9mIHRoZQorICAgIENQVSBlbmRpYW5uZXNzLiAgVkZQIGZsb2F0aW5nIHBvaW50IHVuaXRzIHVzZSB0aGUgc2FtZSBlbmRpYW5uZXNzCisgICAgYXMgdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gICovCistI2lmZGVmIF9fVkZQX0ZQX18KKysjaWYgZGVmaW5lZCBfX1ZGUF9GUF9fIHx8IGRlZmluZWQgX19NQVZFUklDS19fCisgI2RlZmluZSBfX0ZMT0FUX1dPUkRfT1JERVIgX19CWVRFX09SREVSCisgI2Vsc2UKKyAjZGVmaW5lIF9fRkxPQVRfV09SRF9PUkRFUiBfX0JJR19FTkRJQU4KK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvYXJtL2ZwdS9fX2xvbmdqbXAuUyBnbGliYy0yLjEyLjEvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvYXJtL2ZwdS9fX2xvbmdqbXAuUworLS0tIGdsaWJjLTIuMTIuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTIuMS9zeXNkZXBzL2FybS9mcHUvX19sb25nam1wLlMJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEyLjEvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvYXJtL2ZwdS9fX2xvbmdqbXAuUwkyMDA5LTExLTEzIDAwOjUxOjIyLjAwMDAwMDAwMCArMDEwMAorQEAgLTMwLDcgKzMwLDMzIEBACisgCW1vdnMJcjAsIHIxCQkvKiBnZXQgdGhlIHJldHVybiB2YWx1ZSBpbiBwbGFjZSAqLworIAltb3ZlcQlyMCwgIzEJCS8qIGNhbid0IGxldCBzZXRqbXAoKSByZXR1cm4gemVybyEgKi8KKyAKKysjaWZkZWYgX19NQVZFUklDS19fCisrCWNmbGRyZAltdmQ0LCAgW2lwXSwgIzgKKysJbm9wCisrCWNmbGRyZAltdmQ1LCAgW2lwXSwgIzgKKysJbm9wCisrCWNmbGRyZAltdmQ2LCAgW2lwXSwgIzgKKysJbm9wCisrCWNmbGRyZAltdmQ3LCAgW2lwXSwgIzgKKysJbm9wCisrCWNmbGRyZAltdmQ4LCAgW2lwXSwgIzgKKysJbm9wCisrCWNmbGRyZAltdmQ5LCAgW2lwXSwgIzgKKysJbm9wCisrCWNmbGRyZAltdmQxMCwgW2lwXSwgIzgKKysJbm9wCisrCWNmbGRyZAltdmQxMSwgW2lwXSwgIzgKKysJbm9wCisrCWNmbGRyZAltdmQxMiwgW2lwXSwgIzgKKysJbm9wCisrCWNmbGRyZAltdmQxMywgW2lwXSwgIzgKKysJbm9wCisrCWNmbGRyZAltdmQxNCwgW2lwXSwgIzgKKysJbm9wCisrCWNmbGRyZAltdmQxNSwgW2lwXSwgIzgKKysjZWxzZQorIAlsZm1mZAlmNCwgNCwgW2lwXSAhCS8qIGxvYWQgdGhlIGZsb2F0aW5nIHBvaW50IHJlZ3MgKi8KKysjZW5kaWYKKyAKKyAJTE9BRFJFR1MoaWEsIGlwLCB7djEtdjYsIHNsLCBmcCwgc3AsIHBjfSkKKyBFTkQgKF9fbG9uZ2ptcCkKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvYXJtL2ZwdS9iaXRzL2ZlbnYuaCBnbGliYy0yLjEyLjEvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvYXJtL2ZwdS9iaXRzL2ZlbnYuaAorLS0tIGdsaWJjLTIuMTIuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTIuMS9zeXNkZXBzL2FybS9mcHUvYml0cy9mZW52LmgJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEyLjEvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvYXJtL2ZwdS9iaXRzL2ZlbnYuaAkyMDA5LTExLTEzIDAwOjUxOjIyLjAwMDAwMDAwMCArMDEwMAorQEAgLTIwLDYgKzIwLDQ1IEBACisgIyBlcnJvciAiTmV2ZXIgdXNlIDxiaXRzL2ZlbnYuaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGZlbnYuaD4gaW5zdGVhZC4iCisgI2VuZGlmCisgCisrI2lmIGRlZmluZWQoX19NQVZFUklDS19fKQorKworKy8qIERlZmluZSBiaXRzIHJlcHJlc2VudGluZyBleGNlcHRpb25zIGluIHRoZSBGUFUgc3RhdHVzIHdvcmQuICAqLworK2VudW0KKysgIHsKKysgICAgRkVfSU5WQUxJRCA9IDEsCisrI2RlZmluZSBGRV9JTlZBTElEIEZFX0lOVkFMSUQKKysgICAgRkVfT1ZFUkZMT1cgPSA0LAorKyNkZWZpbmUgRkVfT1ZFUkZMT1cgRkVfT1ZFUkZMT1cKKysgICAgRkVfVU5ERVJGTE9XID0gOCwKKysjZGVmaW5lIEZFX1VOREVSRkxPVyBGRV9VTkRFUkZMT1cKKysgICAgRkVfSU5FWEFDVCA9IDE2LAorKyNkZWZpbmUgRkVfSU5FWEFDVCBGRV9JTkVYQUNUCisrICB9OworKworKy8qIEFtb3VudCB0byBzaGlmdCBieSB0byBjb252ZXJ0IGFuIGV4Y2VwdGlvbiB0byBhIG1hc2sgYml0LiAgKi8KKysjZGVmaW5lIEZFX0VYQ0VQVF9TSElGVAk1CisrCisrLyogQWxsIHN1cHBvcnRlZCBleGNlcHRpb25zLiAgKi8KKysjZGVmaW5lIEZFX0FMTF9FWENFUFQJXAorKwkoRkVfSU5WQUxJRCB8IEZFX09WRVJGTE9XIHwgRkVfVU5ERVJGTE9XIHwgRkVfSU5FWEFDVCkKKysKKysvKiBJRUVFIHJvdW5kaW5nIG1vZGVzLiAgKi8KKytlbnVtCisrICB7CisrICAgIEZFX1RPTkVBUkVTVCA9IDAsCisrI2RlZmluZSBGRV9UT05FQVJFU1QgICAgRkVfVE9ORUFSRVNUCisrICAgIEZFX1RPV0FSRFpFUk8gPSAweDQwMCwKKysjZGVmaW5lIEZFX1RPV0FSRFpFUk8gICBGRV9UT1dBUkRaRVJPCisrICAgIEZFX0RPV05XQVJEID0gMHg4MDAsCisrI2RlZmluZSBGRV9ET1dOV0FSRCAgICAgRkVfRE9XTldBUkQKKysgICAgRkVfVVBXQVJEID0gMHhjMDAsCisrI2RlZmluZSBGRV9VUFdBUkQgICAgICAgRkVfVVBXQVJECisrICB9OworKworKyNkZWZpbmUgRkVfUk9VTkRfTUFTSyAoRkVfVVBXQVJEKQorKworKyNlbHNlIC8qIEZQQSAqLworKworIC8qIERlZmluZSBiaXRzIHJlcHJlc2VudGluZyBleGNlcHRpb25zIGluIHRoZSBGUFUgc3RhdHVzIHdvcmQuICAqLworIGVudW0KKyAgIHsKK0BAIC00NCw2ICs4Myw4IEBACisgICAgbW9kZXMgZXhpc3QsIGJ1dCB5b3UgaGF2ZSB0byBlbmNvZGUgdGhlbSBpbiB0aGUgYWN0dWFsIGluc3RydWN0aW9uLiAgKi8KKyAjZGVmaW5lIEZFX1RPTkVBUkVTVAkwCisgCisrI2VuZGlmCisrCisgLyogVHlwZSByZXByZXNlbnRpbmcgZXhjZXB0aW9uIGZsYWdzLiAqLworIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgZmV4Y2VwdF90OworIAorZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9nbGliYy1wb3J0cy0yLjEyLjEvc3lzZGVwcy9hcm0vZnB1L2JpdHMvc2V0am1wLmggZ2xpYmMtMi4xMi4xL2dsaWJjLXBvcnRzLTIuMTIuMS9zeXNkZXBzL2FybS9mcHUvYml0cy9zZXRqbXAuaAorLS0tIGdsaWJjLTIuMTIuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTIuMS9zeXNkZXBzL2FybS9mcHUvYml0cy9zZXRqbXAuaAkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTIuMS9nbGliYy1wb3J0cy0yLjEyLjEvc3lzZGVwcy9hcm0vZnB1L2JpdHMvc2V0am1wLmgJMjAwOS0xMS0xMyAwMDo1MToyMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yOCw3ICsyOCwxMSBAQAorICNpZm5kZWYgX0FTTQorIC8qIEp1bXAgYnVmZmVyIGNvbnRhaW5zIHYxLXY2LCBzbCwgZnAsIHNwIGFuZCBwYy4gIE90aGVyIHJlZ2lzdGVycyBhcmUgbm90CisgICAgc2F2ZWQuICAqLworKyNpZmRlZiBfX01BVkVSSUNLX18KKyt0eXBlZGVmIGludCBfX2ptcF9idWZbMzRdOworKyNlbHNlCisgdHlwZWRlZiBpbnQgX19qbXBfYnVmWzIyXTsKKyAjZW5kaWYKKysjZW5kaWYKKyAKKyAjZW5kaWYKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvYXJtL2ZwdS9mZWdldHJvdW5kLmMgZ2xpYmMtMi4xMi4xL2dsaWJjLXBvcnRzLTIuMTIuMS9zeXNkZXBzL2FybS9mcHUvZmVnZXRyb3VuZC5jCistLS0gZ2xpYmMtMi4xMi4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvYXJtL2ZwdS9mZWdldHJvdW5kLmMJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEyLjEvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvYXJtL2ZwdS9mZWdldHJvdW5kLmMJMjAwOS0xMS0xMyAwMDo1MToyMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xOCw5ICsxOCwyMSBAQAorICAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKyAKKyAjaW5jbHVkZSA8ZmVudi5oPgorKyNpbmNsdWRlIDxmcHVfY29udHJvbC5oPgorIAorIGludAorIGZlZ2V0cm91bmQgKHZvaWQpCisgeworKyNpZiBkZWZpbmVkKF9fTUFWRVJJQ0tfXykKKysKKysgIHVuc2lnbmVkIGxvbmcgdGVtcDsKKysKKysgIF9GUFVfR0VUQ1cgKHRlbXApOworKyAgcmV0dXJuIHRlbXAgJiBGRV9ST1VORF9NQVNLOworKworKyNlbHNlIC8qIEZQQSAqLworKworICAgcmV0dXJuIEZFX1RPTkVBUkVTVDsJCS8qIEVhc3kuIDotKSAqLworKworKyNlbmRpZgorIH0KK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvYXJtL2ZwdS9mZXNldHJvdW5kLmMgZ2xpYmMtMi4xMi4xL2dsaWJjLXBvcnRzLTIuMTIuMS9zeXNkZXBzL2FybS9mcHUvZmVzZXRyb3VuZC5jCistLS0gZ2xpYmMtMi4xMi4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvYXJtL2ZwdS9mZXNldHJvdW5kLmMJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEyLjEvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvYXJtL2ZwdS9mZXNldHJvdW5kLmMJMjAwOS0xMS0xMyAwMDo1MToyMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xOCwxMiArMTgsMjggQEAKKyAgICAwMjExMS0xMzA3IFVTQS4gICovCisgCisgI2luY2x1ZGUgPGZlbnYuaD4KKysjaW5jbHVkZSA8ZnB1X2NvbnRyb2wuaD4KKyAKKyBpbnQKKyBmZXNldHJvdW5kIChpbnQgcm91bmQpCisgeworKyNpZiBkZWZpbmVkKF9fTUFWRVJJQ0tfXykKKysgIHVuc2lnbmVkIGxvbmcgdGVtcDsKKysKKysgIGlmIChyb3VuZCAmIH5GRV9ST1VORF9NQVNLKQorKyAgICByZXR1cm4gMTsKKysKKysgIF9GUFVfR0VUQ1cgKHRlbXApOworKyAgdGVtcCA9ICh0ZW1wICYgfkZFX1JPVU5EX01BU0spIHwgcm91bmQ7CisrICBfRlBVX1NFVENXICh0ZW1wKTsKKysgIHJldHVybiAwOworKworKyNlbHNlIC8qIEZQQSAqLworKworICAgLyogV2Ugb25seSBzdXBwb3J0IEZFX1RPTkVBUkVTVCwgc28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgYW55IHdvcmsuICAqLworICAgcmV0dXJuIChyb3VuZCA9PSBGRV9UT05FQVJFU1QpPzA6MTsKKysKKysjZW5kaWYKKyB9CisgCisgbGlibV9oaWRkZW5fZGVmIChmZXNldHJvdW5kKQorZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9nbGliYy1wb3J0cy0yLjEyLjEvc3lzZGVwcy9hcm0vZnB1L2ZwdV9jb250cm9sLmggZ2xpYmMtMi4xMi4xL2dsaWJjLXBvcnRzLTIuMTIuMS9zeXNkZXBzL2FybS9mcHUvZnB1X2NvbnRyb2wuaAorLS0tIGdsaWJjLTIuMTIuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTIuMS9zeXNkZXBzL2FybS9mcHUvZnB1X2NvbnRyb2wuaAkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTIuMS9nbGliYy1wb3J0cy0yLjEyLjEvc3lzZGVwcy9hcm0vZnB1L2ZwdV9jb250cm9sLmgJMjAwOS0xMS0xMyAwMDo1MToyMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xLDUgKzEsNiBAQAorIC8qIEZQVSBjb250cm9sIHdvcmQgZGVmaW5pdGlvbnMuICBBUk0gdmVyc2lvbi4KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAyMDAwLCAyMDA1CisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisgCisgICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCitAQCAtMjAsNiArMjEsNzkgQEAKKyAjaWZuZGVmIF9GUFVfQ09OVFJPTF9ICisgI2RlZmluZSBfRlBVX0NPTlRST0xfSAorIAorKyNpZiBkZWZpbmVkKF9fTUFWRVJJQ0tfXykKKysKKysvKiBEU1BTQyByZWdpc3RlcjogKGZyb20gRVA5MzEyIFVzZXIncyBHdWlkZSkKKysgKgorKyAqIGJpdHMgMzEuLjI5CS0gREFJRAorKyAqIGJpdHMgMjguLjI2CS0gSFZJRAorKyAqIGJpdHMgMjUuLjI0CS0gUlNWRAorKyAqIGJpdCAgMjMJLSBJU0FUCisrICogYml0ICAyMgktIFVJCisrICogYml0ICAyMQktIElOVAorKyAqIGJpdCAgMjAJLSBBRVhDCisrICogYml0cyAxOS4uMTgJLSBTQVQKKysgKiBiaXRzIDE3Li4xNgktIEZDQworKyAqIGJpdCAgMTUJLSBWCisrICogYml0ICAxNAktIEZXREVOCisrICogYml0ICAxMwktIEludmFsaWQKKysgKiBiaXQJMTIJLSBEZW5vcm0KKysgKiBiaXRzIDExLi4xMAktIFJNCisrICogYml0cyA5Li41CS0gSVhFLCBVRkUsIE9GRSwgUlNWRCwgSU9FCisrICogYml0cyA0Li4wCS0gSVgsIFVGLCBPRiwgUlNWRCwgSU8KKysgKi8KKysKKysvKiBtYXNraW5nIG9mIGludGVycnVwdHMgKi8KKysjZGVmaW5lIF9GUFVfTUFTS19JTQkoMSA8PCA1KQkvKiBpbnZhbGlkIG9wZXJhdGlvbiAqLworKyNkZWZpbmUgX0ZQVV9NQVNLX1pNCTAJCS8qIGRpdmlkZSBieSB6ZXJvICovCisrI2RlZmluZSBfRlBVX01BU0tfT00JKDEgPDwgNykJLyogb3ZlcmZsb3cgKi8KKysjZGVmaW5lIF9GUFVfTUFTS19VTQkoMSA8PCA4KQkvKiB1bmRlcmZsb3cgKi8KKysjZGVmaW5lIF9GUFVfTUFTS19QTQkoMSA8PCA5KQkvKiBpbmV4YWN0ICovCisrI2RlZmluZSBfRlBVX01BU0tfRE0JMAkJLyogZGVub3JtYWxpemVkIG9wZXJhdGlvbiAqLworKworKyNkZWZpbmUgX0ZQVV9SRVNFUlZFRAkweGZmZmZmMDAwCS8qIFRoZXNlIGJpdHMgYXJlIHJlc2VydmVkLiAgKi8KKysKKysjZGVmaW5lIF9GUFVfREVGQVVMVAkweDAwYjAwMDAwCS8qIERlZmF1bHQgdmFsdWUuICAqLworKyNkZWZpbmUgX0ZQVV9JRUVFCTB4MDBiMDAzYTAJLyogRGVmYXVsdCArIGV4Y2VwdGlvbnMgZW5hYmxlZC4gKi8KKysKKysvKiBUeXBlIG9mIHRoZSBjb250cm9sIHdvcmQuICAqLworK3R5cGVkZWYgdW5zaWduZWQgaW50IGZwdV9jb250cm9sX3Q7CisrCisrLyogTWFjcm9zIGZvciBhY2Nlc3NpbmcgdGhlIGhhcmR3YXJlIGNvbnRyb2wgd29yZC4gICovCisrI2RlZmluZSBfRlBVX0dFVENXKGN3KSAoewkJCVwKKysJcmVnaXN0ZXIgaW50IF9fdDEsIF9fdDI7CQlcCisrCQkJCQkJXAorKwlfX2FzbV9fIHZvbGF0aWxlICgJCQlcCisrCSJjZm12cjY0bAklMSwgbXZkeDBcblx0IgkJXAorKwkiY2ZtdnI2NGgJJTIsIG12ZHgwXG5cdCIJCVwKKysJImNmbXYzMnNjCW12ZHgwLCBkc3BzY1xuXHQiCVwKKysJImNmbXZyNjRsCSUwLCBtdmR4MFxuXHQiCQlcCisrCSJjZm12NjRscgltdmR4MCwgJTFcblx0IgkJXAorKwkiY2ZtdjY0aHIJbXZkeDAsICUyIgkJXAorKwk6ICI9ciIgKGN3KSwgIj1yIiAoX190MSksICI9ciIgKF9fdDIpCVwKKysJKTsJCQkJCVwKKyt9KQorKworKyNkZWZpbmUgX0ZQVV9TRVRDVyhjdykgKHsJCQlcCisrCXJlZ2lzdGVyIGludCBfX3QwLCBfX3QxLCBfX3QyOwkJXAorKwkJCQkJCVwKKysJX19hc21fXyB2b2xhdGlsZSAoCQkJXAorKwkiY2ZtdnI2NGwJJTEsIG12ZHgwXG5cdCIJCVwKKysJImNmbXZyNjRoCSUyLCBtdmR4MFxuXHQiCQlcCisrCSJjZm12NjRscgltdmR4MCwgJTBcblx0IgkJXAorKwkiY2ZtdnNjMzIJZHNwc2MsIG12ZHgwXG5cdCIJXAorKwkiY2ZtdjY0bHIJbXZkeDAsICUxXG5cdCIJCVwKKysJImNmbXY2NGhyCW12ZHgwLCAlMiIJCVwKKysJOiAiPXIiIChfX3QwKSwgIj1yIiAoX190MSksICI9ciIgKF9fdDIpCVwKKysJOiAiMCIgKGN3KQkJCQlcCisrCSk7CQkJCQlcCisrfSkKKysKKysvKiBEZWZhdWx0IGNvbnRyb2wgd29yZCBzZXQgYXQgc3RhcnR1cC4gICovCisrZXh0ZXJuIGZwdV9jb250cm9sX3QgX19mcHVfY29udHJvbDsKKysKKysjZWxzZSAvKiBGUEEgKi8KKysKKyAvKiBXZSBoYXZlIGEgc2xpZ2h0IHRlcm1pbm9sb2d5IGNvbmZ1c2lvbiBoZXJlLiAgT24gdGhlIEFSTSwgdGhlIHJlZ2lzdGVyCisgICogd2UncmUgaW50ZXJlc3RlZCBpbiBpcyBhY3R1YWxseSB0aGUgRlBVIHN0YXR1cyB3b3JkIC0gdGhlIEZQVSBjb250cm9sCisgICogd29yZCBpcyBzb21ldGhpbmcgZGlmZmVyZW50ICh3aGljaCBpcyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGFuZCBvbmx5CitAQCAtOTksNCArMTczLDYgQEAKKyAvKiBEZWZhdWx0IGNvbnRyb2wgd29yZCBzZXQgYXQgc3RhcnR1cC4gICovCisgZXh0ZXJuIGZwdV9jb250cm9sX3QgX19mcHVfY29udHJvbDsKKyAKKysjZW5kaWYKKysKKyAjZW5kaWYgLyogX0ZQVV9DT05UUk9MX0ggKi8KK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvYXJtL2ZwdS9qbXBidWYtb2Zmc2V0cy5oIGdsaWJjLTIuMTIuMS9nbGliYy1wb3J0cy0yLjEyLjEvc3lzZGVwcy9hcm0vZnB1L2ptcGJ1Zi1vZmZzZXRzLmgKKy0tLSBnbGliYy0yLjEyLjEub3JpZy9nbGliYy1wb3J0cy0yLjEyLjEvc3lzZGVwcy9hcm0vZnB1L2ptcGJ1Zi1vZmZzZXRzLmgJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEyLjEvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvYXJtL2ZwdS9qbXBidWYtb2Zmc2V0cy5oCTIwMDktMTEtMTMgMDA6NTE6MjIuMDAwMDAwMDAwICswMTAwCitAQCAtMTcsNCArMTcsOCBAQAorICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAgMDIxMTEtMTMwNyBVU0EuICAqLworIAorKyNpZmRlZiBfX01BVkVSSUNLX18KKysjZGVmaW5lIF9fSk1QX0JVRl9TUAkJMzIKKysjZWxzZQorICNkZWZpbmUgX19KTVBfQlVGX1NQCQkyMAorKyNlbmRpZgorZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9nbGliYy1wb3J0cy0yLjEyLjEvc3lzZGVwcy9hcm0vZnB1L3NldGptcC5TIGdsaWJjLTIuMTIuMS9nbGliYy1wb3J0cy0yLjEyLjEvc3lzZGVwcy9hcm0vZnB1L3NldGptcC5TCistLS0gZ2xpYmMtMi4xMi4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvYXJtL2ZwdS9zZXRqbXAuUwkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTIuMS9nbGliYy1wb3J0cy0yLjEyLjEvc3lzZGVwcy9hcm0vZnB1L3NldGptcC5TCTIwMDktMTEtMTMgMDA6NTE6MjIuMDAwMDAwMDAwICswMTAwCitAQCAtMjQsMTEgKzI0LDQxIEBACisgCisgRU5UUlkgKF9fc2lnc2V0am1wKQorIAkvKiBTYXZlIHJlZ2lzdGVycyAqLworKyNpZmRlZiBfX01BVkVSSUNLX18KKysJY2ZzdHJkCW12ZDQsICBbcjBdLCAjOAorKwlub3AKKysJY2ZzdHJkCW12ZDUsICBbcjBdLCAjOAorKwlub3AKKysJY2ZzdHJkCW12ZDYsICBbcjBdLCAjOAorKwlub3AKKysJY2ZzdHJkCW12ZDcsICBbcjBdLCAjOAorKwlub3AKKysJY2ZzdHJkCW12ZDgsICBbcjBdLCAjOAorKwlub3AKKysJY2ZzdHJkCW12ZDksICBbcjBdLCAjOAorKwlub3AKKysJY2ZzdHJkCW12ZDEwLCBbcjBdLCAjOAorKwlub3AKKysJY2ZzdHJkCW12ZDExLCBbcjBdLCAjOAorKwlub3AKKysJY2ZzdHJkCW12ZDEyLCBbcjBdLCAjOAorKwlub3AKKysJY2ZzdHJkCW12ZDEzLCBbcjBdLCAjOAorKwlub3AKKysJY2ZzdHJkCW12ZDE0LCBbcjBdLCAjOAorKwlub3AKKysJY2ZzdHJkCW12ZDE1LCBbcjBdLCAjOAorKyNlbHNlCisgCXNmbWVhCWY0LCA0LCBbcjBdIQorKyNlbmRpZgorIAlzdG1pYQlyMCwge3YxLXY2LCBzbCwgZnAsIHNwLCBscn0KKyAKKyAJLyogUmVzdG9yZSBwb2ludGVyIHRvIGptcF9idWYgKi8KKysjaWZkZWYgX19NQVZFUklDS19fCisrCXN1YglyMCwgcjAsICM5NgorKyNlbHNlCisgCXN1YglyMCwgcjAsICM0OAorKyNlbmRpZgorIAorIAkvKiBNYWtlIGEgdGFpbCBjYWxsIHRvIF9fc2lnam1wX3NhdmU7IGl0IHRha2VzIHRoZSBzYW1lIGFyZ3MuICAqLworIAlCCVBMVEpNUChDX1NZTUJPTF9OQU1FKF9fc2lnam1wX3NhdmUpKQorZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9nbGliYy1wb3J0cy0yLjEyLjEvc3lzZGVwcy9hcm0vZ2NjZnJhbWUuaCBnbGliYy0yLjEyLjEvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvYXJtL2djY2ZyYW1lLmgKKy0tLSBnbGliYy0yLjEyLjEub3JpZy9nbGliYy1wb3J0cy0yLjEyLjEvc3lzZGVwcy9hcm0vZ2NjZnJhbWUuaAkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTIuMS9nbGliYy1wb3J0cy0yLjEyLjEvc3lzZGVwcy9hcm0vZ2NjZnJhbWUuaAkyMDA5LTExLTEzIDAwOjUxOjIyLjAwMDAwMDAwMCArMDEwMAorQEAgLTE3LDYgKzE3LDEwIEBACisgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgICAwMjExMS0xMzA3IFVTQS4gICovCisgCisrI2lmZGVmIF9fTUFWRVJJQ0tfXworKyNkZWZpbmUgRklSU1RfUFNFVURPX1JFR0lTVEVSIDQzCisrI2Vsc2UKKyAjZGVmaW5lIEZJUlNUX1BTRVVET19SRUdJU1RFUiAyNworKyNlbmRpZgorIAorICNpbmNsdWRlIDxzeXNkZXBzL2dlbmVyaWMvZ2NjZnJhbWUuaD4KK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvYXJtL2dtcC1tcGFyYW0uaCBnbGliYy0yLjEyLjEvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvYXJtL2dtcC1tcGFyYW0uaAorLS0tIGdsaWJjLTIuMTIuMS5vcmlnL2dsaWJjLXBvcnRzLTIuMTIuMS9zeXNkZXBzL2FybS9nbXAtbXBhcmFtLmgJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEyLjEvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvYXJtL2dtcC1tcGFyYW0uaAkyMDA5LTExLTEzIDAwOjUxOjIyLjAwMDAwMDAwMCArMDEwMAorQEAgLTI5LDcgKzI5LDcgQEAKKyAjaWYgZGVmaW5lZChfX0FSTUVCX18pCisgIyBkZWZpbmUgSUVFRV9ET1VCTEVfTUlYRURfRU5ESUFOIDAKKyAjIGRlZmluZSBJRUVFX0RPVUJMRV9CSUdfRU5ESUFOIDEKKy0jZWxpZiBkZWZpbmVkKF9fVkZQX0ZQX18pCisrI2VsaWYgZGVmaW5lZChfX1ZGUF9GUF9fKSB8fCBkZWZpbmVkKF9fTUFWRVJJQ0tfXykKKyAjIGRlZmluZSBJRUVFX0RPVUJMRV9NSVhFRF9FTkRJQU4gMAorICMgZGVmaW5lIElFRUVfRE9VQkxFX0JJR19FTkRJQU4gMAorICNlbHNlCitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL3BvcnRzL3N5c2RlcHMvYXJtL2JpdHMvZW5kaWFuLmggZ2xpYmMtMi4xMi4xL3BvcnRzL3N5c2RlcHMvYXJtL2JpdHMvZW5kaWFuLmgKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvcG9ydHMvc3lzZGVwcy9hcm0vZnB1L19fbG9uZ2ptcC5TIGdsaWJjLTIuMTIuMS9wb3J0cy9zeXNkZXBzL2FybS9mcHUvX19sb25nam1wLlMKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvcG9ydHMvc3lzZGVwcy9hcm0vZnB1L2JpdHMvZmVudi5oIGdsaWJjLTIuMTIuMS9wb3J0cy9zeXNkZXBzL2FybS9mcHUvYml0cy9mZW52LmgKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvcG9ydHMvc3lzZGVwcy9hcm0vZnB1L2JpdHMvc2V0am1wLmggZ2xpYmMtMi4xMi4xL3BvcnRzL3N5c2RlcHMvYXJtL2ZwdS9iaXRzL3NldGptcC5oCitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL3BvcnRzL3N5c2RlcHMvYXJtL2ZwdS9mZWdldHJvdW5kLmMgZ2xpYmMtMi4xMi4xL3BvcnRzL3N5c2RlcHMvYXJtL2ZwdS9mZWdldHJvdW5kLmMKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvcG9ydHMvc3lzZGVwcy9hcm0vZnB1L2Zlc2V0cm91bmQuYyBnbGliYy0yLjEyLjEvcG9ydHMvc3lzZGVwcy9hcm0vZnB1L2Zlc2V0cm91bmQuYworZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9wb3J0cy9zeXNkZXBzL2FybS9mcHUvZnB1X2NvbnRyb2wuaCBnbGliYy0yLjEyLjEvcG9ydHMvc3lzZGVwcy9hcm0vZnB1L2ZwdV9jb250cm9sLmgKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvcG9ydHMvc3lzZGVwcy9hcm0vZnB1L2ptcGJ1Zi1vZmZzZXRzLmggZ2xpYmMtMi4xMi4xL3BvcnRzL3N5c2RlcHMvYXJtL2ZwdS9qbXBidWYtb2Zmc2V0cy5oCitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL3BvcnRzL3N5c2RlcHMvYXJtL2ZwdS9zZXRqbXAuUyBnbGliYy0yLjEyLjEvcG9ydHMvc3lzZGVwcy9hcm0vZnB1L3NldGptcC5TCitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL3BvcnRzL3N5c2RlcHMvYXJtL2djY2ZyYW1lLmggZ2xpYmMtMi4xMi4xL3BvcnRzL3N5c2RlcHMvYXJtL2djY2ZyYW1lLmgKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvcG9ydHMvc3lzZGVwcy9hcm0vZ21wLW1wYXJhbS5oIGdsaWJjLTIuMTIuMS9wb3J0cy9zeXNkZXBzL2FybS9nbXAtbXBhcmFtLmgKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvNTgwLW5wdGwtbG93bGV2ZWxsb2NrLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS81ODAtbnB0bC1sb3dsZXZlbGxvY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI0M2E3NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvNTgwLW5wdGwtbG93bGV2ZWxsb2NrLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK2ZpeCBidWlsZCBlcnJvciBvbiBhcm0gbGlrZSBvbiBocHBhOgorCithcm0tdW5rbm93bi1saW51eC1nbnUtZ2NjIC4uL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbGliYy1sb3dsZXZlbGxvY2suYyAtYyAtc3RkPWdudTk5IC1mZ251ODktaW5saW5lIC1PMiAtV2FsbCAtV2lubGluZSAtV3dyaXRlLXN0cmluZ3MgLWZtZXJnZS1hbGwtY29uc3RhbnRzIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1nIC1waXBlIC1Xc3RyaWN0LXByb3RvdHlwZXMgICAtZlBJQyAgICAtSS4uL2luY2x1ZGUgLUkvdmFyL3RtcC9wb3J0YWdlL2Nyb3NzLWFybS11bmtub3duLWxpbnV4LWdudS9nbGliYy0yLjhfcDIwMDgwNjAyL3dvcmsvYnVpbGQtZGVmYXVsdC1hcm0tdW5rbm93bi1saW51eC1nbnUtbnB0bC9ucHRsIC1JL3Zhci90bXAvcG9ydGFnZS9jcm9zcy1hcm0tdW5rbm93bi1saW51eC1nbnUvZ2xpYmMtMi44X3AyMDA4MDYwMi93b3JrL2J1aWxkLWRlZmF1bHQtYXJtLXVua25vd24tbGludXgtZ251LW5wdGwgLUkuLi9wb3J0cy9zeXNkZXBzL2FybS9lbGYgLUkuLi9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hcm0vbnB0bCAtSS4uL3BvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FybSAtSS4uL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXggLUkuLi9ucHRsL3N5c2RlcHMvcHRocmVhZCAtSS4uL3N5c2RlcHMvcHRocmVhZCAtSS4uL3BvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4IC1JLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXggLUkuLi9zeXNkZXBzL2dudSAtSS4uL3N5c2RlcHMvdW5peC9jb21tb24gLUkuLi9zeXNkZXBzL3VuaXgvbW1hbiAtSS4uL3N5c2RlcHMvdW5peC9pbmV0IC1JLi4vbnB0bC9zeXNkZXBzL3VuaXgvc3lzdiAtSS4uL3BvcnRzL3N5c2RlcHMvdW5peC9zeXN2IC1JLi4vc3lzZGVwcy91bml4L3N5c3YgLUkuLi9wb3J0cy9zeXNkZXBzL3VuaXgvYXJtIC1JLi4vbnB0bC9zeXNkZXBzL3VuaXggLUkuLi9wb3J0cy9zeXNkZXBzL3VuaXggLUkuLi9zeXNkZXBzL3VuaXggLUkuLi9zeXNkZXBzL3Bvc2l4IC1JLi4vcG9ydHMvc3lzZGVwcy9hcm0vZnB1IC1JLi4vcG9ydHMvc3lzZGVwcy9hcm0vbnB0bCAtSS4uL3BvcnRzL3N5c2RlcHMvYXJtIC1JLi4vc3lzZGVwcy93b3Jkc2l6ZS0zMiAtSS4uL3N5c2RlcHMvaWVlZTc1NC9mbHQtMzIgLUkuLi9zeXNkZXBzL2llZWU3NTQvZGJsLTY0IC1JLi4vc3lzZGVwcy9pZWVlNzU0IC1JLi4vc3lzZGVwcy9nZW5lcmljL2VsZiAtSS4uL3N5c2RlcHMvZ2VuZXJpYyAtSS4uL25wdGwgLUkuLi9wb3J0cyAgLUkuLiAtSS4uL2xpYmlvIC1JLiAtbm9zdGRpbmMgLWlzeXN0ZW0gL3Vzci9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudS80LjMuMi9pbmNsdWRlIC1pc3lzdGVtIC91c3IvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnUvNC4zLjIvaW5jbHVkZS1maXhlZCAtaXN5c3RlbSAvdXNyL2FybS11bmtub3duLWxpbnV4LWdudS91c3IvaW5jbHVkZSAtRF9MSUJDX1JFRU5UUkFOVCAtaW5jbHVkZSAuLi9pbmNsdWRlL2xpYmMtc3ltYm9scy5oICAtRFBJQyAtRFNIQVJFRCAgICAgIC1vIC92YXIvdG1wL3BvcnRhZ2UvY3Jvc3MtYXJtLXVua25vd24tbGludXgtZ251L2dsaWJjLTIuOF9wMjAwODA2MDIvd29yay9idWlsZC1kZWZhdWx0LWFybS11bmtub3duLWxpbnV4LWdudS1ucHRsL25wdGwvcnRsZC1saWJjLWxvd2xldmVsbG9jay5vcyAtTUQgLU1QIC1NRiAvdmFyL3RtcC9wb3J0YWdlL2Nyb3NzLWFybS11bmtub3duLWxpbnV4LWdudS9nbGliYy0yLjhfcDIwMDgwNjAyL3dvcmsvYnVpbGQtZGVmYXVsdC1hcm0tdW5rbm93bi1saW51eC1nbnUtbnB0bC9ucHRsL3J0bGQtbGliYy1sb3dsZXZlbGxvY2sub3MuZHQgLU1UIC92YXIvdG1wL3BvcnRhZ2UvY3Jvc3MtYXJtLXVua25vd24tbGludXgtZ251L2dsaWJjLTIuOF9wMjAwODA2MDIvd29yay9idWlsZC1kZWZhdWx0LWFybS11bmtub3duLWxpbnV4LWdudS1ucHRsL25wdGwvcnRsZC1saWJjLWxvd2xldmVsbG9jay5vcyAtRE5PVF9JTl9saWJjPTEgLURJU19JTl9ydGxkPTEKK0luIGZpbGUgaW5jbHVkZWQgZnJvbSAuLi9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2xpYmMtbG93bGV2ZWxsb2NrLmM6MjE6CisuLi9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2xvd2xldmVsbG9jay5jOiBJbiBmdW5jdGlvbiAnX19sbGxfbG9ja193YWl0X3ByaXZhdGUnOgorLi4vbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9sb3dsZXZlbGxvY2suYzozMTogd2FybmluZzogaW1wbGljaXQgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb24gJ1RIUkVBRF9HRVRNRU0nCisuLi9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2xvd2xldmVsbG9jay5jOjMxOiBlcnJvcjogJ1RIUkVBRF9TRUxGJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikKKy4uL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbG93bGV2ZWxsb2NrLmM6MzE6IGVycm9yOiAoRWFjaCB1bmRlY2xhcmVkIGlkZW50aWZpZXIgaXMgcmVwb3J0ZWQgb25seSBvbmNlCisuLi9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2xvd2xldmVsbG9jay5jOjMxOiBlcnJvcjogZm9yIGVhY2ggZnVuY3Rpb24gaXQgYXBwZWFycyBpbi4pCisuLi9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2xvd2xldmVsbG9jay5jOjMxOiBlcnJvcjogJ2hlYWRlcicgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FybS9ucHRsL2xvd2xldmVsbG9jay5oIGdsaWJjLTIuMTIuMS9nbGliYy1wb3J0cy0yLjEyLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL25wdGwvbG93bGV2ZWxsb2NrLmgKKy0tLSBnbGliYy0yLjEyLjEub3JpZy9nbGliYy1wb3J0cy0yLjEyLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL25wdGwvbG93bGV2ZWxsb2NrLmgJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEyLjEvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FybS9ucHRsL2xvd2xldmVsbG9jay5oCTIwMDktMTEtMTMgMDA6NTE6MjMuMDAwMDAwMDAwICswMTAwCitAQCAtMjUsNiArMjUsNyBAQAorICNpbmNsdWRlIDxhdG9taWMuaD4KKyAjaW5jbHVkZSA8c3lzZGVwLmg+CisgI2luY2x1ZGUgPGtlcm5lbC1mZWF0dXJlcy5oPgorKyNpbmNsdWRlIDx0bHMuaD4JCS8qIE5lZWQgVEhSRUFEXyosIGFuZCBoZWFkZXIuKi4gICovCisgCisgI2RlZmluZSBGVVRFWF9XQUlUCQkwCisgI2RlZmluZSBGVVRFWF9XQUtFCQkxCitkaWZmIC1kdXJOIGdsaWJjLTIuMTIuMS5vcmlnL3BvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FybS9ucHRsL2xvd2xldmVsbG9jay5oIGdsaWJjLTIuMTIuMS9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hcm0vbnB0bC9sb3dsZXZlbGxvY2suaApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS82MTAtZnB1LWN3LW1pcHMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzYxMC1mcHUtY3ctbWlwcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDk5MGRlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS82MTAtZnB1LWN3LW1pcHMucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAoraHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2xpYmMtYWxwaGEvMjAwMi0xMC9tc2cwMDM5Mi5odG1sCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvbWlwcy9mcHVfY29udHJvbC5oIGdsaWJjLTIuMTIuMS9nbGliYy1wb3J0cy0yLjEyLjEvc3lzZGVwcy9taXBzL2ZwdV9jb250cm9sLmgKKy0tLSBnbGliYy0yLjEyLjEub3JpZy9nbGliYy1wb3J0cy0yLjEyLjEvc3lzZGVwcy9taXBzL2ZwdV9jb250cm9sLmgJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEyLjEvZ2xpYmMtcG9ydHMtMi4xMi4xL3N5c2RlcHMvbWlwcy9mcHVfY29udHJvbC5oCTIwMDktMTEtMTMgMDA6NTE6MzEuMDAwMDAwMDAwICswMTAwCitAQCAtODYsNyArODYsNyBAQAorICNkZWZpbmUgX0ZQVV9SQ19VUCAgICAgIDB4MgorICNkZWZpbmUgX0ZQVV9SQ19ET1dOICAgIDB4MworIAorLSNkZWZpbmUgX0ZQVV9SRVNFUlZFRCAweGZlM2MwMDAwICAvKiBSZXNlcnZlZCBiaXRzIGluIGN3ICovCisrI2RlZmluZSBfRlBVX1JFU0VSVkVEIDB4ZmViYzAwMDAgIC8qIFJlc2VydmVkIGJpdHMgaW4gY3cgKi8KKyAKKyAKKyAvKiBUaGUgZmRsaWJtIGNvZGUgcmVxdWlyZXMgc3RyaWN0IElFRUUgZG91YmxlIHByZWNpc2lvbiBhcml0aG1ldGljLAorZGlmZiAtZHVyTiBnbGliYy0yLjEyLjEub3JpZy9wb3J0cy9zeXNkZXBzL21pcHMvZnB1X2NvbnRyb2wuaCBnbGliYy0yLjEyLjEvcG9ydHMvc3lzZGVwcy9taXBzL2ZwdV9jb250cm9sLmgKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvNjMwLW1pcHNfc2huX3VuZGVmLWhhY2sucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzYzMC1taXBzX3Nobl91bmRlZi1oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YTVlYjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzYzMC1taXBzX3Nobl91bmRlZi1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMi4xLm9yaWcvZWxmL2RsLWxvb2t1cC5jIGdsaWJjLTIuMTIuMS9lbGYvZGwtbG9va3VwLmMKKy0tLSBnbGliYy0yLjEyLjEub3JpZy9lbGYvZGwtbG9va3VwLmMJMjAwOS0wMy0zMCAyMzoxNDozMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEyLjEvZWxmL2RsLWxvb2t1cC5jCTIwMDktMTEtMTMgMDA6NTE6MzYuMDAwMDAwMDAwICswMTAwCitAQCAtMzAxLDYgKzMwMSwxMiBAQAorIAkgICAgICAvKiBGQUxMVEhST1VHSCAqLworIAkgICAgY2FzZSBTVEJfR0xPQkFMOgorCSAgICBzdWNjZXNzOgorKyNpZmRlZiBfX21pcHNfXworKwkgICAgICAvKiBIQUNLOiBNSVBTIG1hcmtzIGl0cyBsYXp5IGV2YWx1YXRpb24gc3R1YnMgd2l0aCBTSE5fVU5ERUYKKysJCSBzeW1ib2xzLCB3ZSBza2lwIHRoZW0uICovCisrCSAgICAgIGlmIChzeW0tPnN0X3NobmR4ID09IFNITl9VTkRFRikKKysJCWJyZWFrOworKyNlbmRpZgorIAkgICAgICAvKiBHbG9iYWwgZGVmaW5pdGlvbi4gIEp1c3Qgd2hhdCB3ZSBuZWVkLiAgKi8KKyAJICAgICAgcmVzdWx0LT5zID0gc3ltOworIAkgICAgICByZXN1bHQtPm0gPSAoc3RydWN0IGxpbmtfbWFwICopIG1hcDsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvNjQwLWFscGhhLWF0ZmN0cy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvNjQwLWFscGhhLWF0ZmN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGE5ZDBkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS82NDAtYWxwaGEtYXRmY3RzLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKKy0tLSBnbGliYy0yLjEyLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgva2VybmVsLWZlYXR1cmVzLmgJMjAxMC0wNy0yNyAxNDozNDozOS4wMDAwMDAwMDAgKzAzMDAKKysrKyBnbGliYy0yLjEyLjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgva2VybmVsLWZlYXR1cmVzLmgubmV3CTIwMTEtMDMtMTAgMTg6NTQ6MzcuNjg2Nzk1OTc5ICswMjAwCitAQCAtNDM3LDcgKzQzNyw4IEBACisgICAgdGhlIGNvZGUuICBPbiBQUEMgdGhleSB3ZXJlIGludHJvZHVjZWQgaW4gMi42LjE3LXJjMSwKKyAgICBvbiBTSCBpbiAyLjYuMTktcmMxLiAgKi8KKyAjaWYgX19MSU5VWF9LRVJORUxfVkVSU0lPTiA+PSAweDAyMDYxMSBcCistICAgICYmICghZGVmaW5lZCBfX3NoX18gfHwgX19MSU5VWF9LRVJORUxfVkVSU0lPTiA+PSAweDAyMDYxMykKKysgICAgJiYgKCFkZWZpbmVkIF9fc2hfXyB8fCBfX0xJTlVYX0tFUk5FTF9WRVJTSU9OID49IDB4MDIwNjEzKSBcCisrICAgICYmICghZGVmaW5lZCBfX2FscGhhX18pCisgIyBkZWZpbmUgX19BU1NVTUVfQVRGQ1RTCTEKKyAjZW5kaWYKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvNjUwLXN5c2xvZy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEyLjEvNjUwLXN5c2xvZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjBjYWZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS82NTAtc3lzbG9nLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK2RpZmYgLWR1ck4gZ2xpYmMtY3ZzLTIuOS5vcmlnL21pc2Mvc3lzbG9nLmMgZ2xpYmMtY3ZzLTIuOS9taXNjL3N5c2xvZy5jCistLS0gZ2xpYmMtY3ZzLTIuOS5vcmlnL21pc2Mvc3lzbG9nLmMJMjAwOS0wNi0wMSAxMDoxNjo1MC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy1jdnMtMi45L21pc2Mvc3lzbG9nLmMJMjAwOS0wNi0wMSAxMDoxNzoyMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNTIsNyArMTUyLDcgQEAKKyAjZGVmaW5lCUlOVEVSTkFMTE9HCUxPR19FUlJ8TE9HX0NPTlN8TE9HX1BFUlJPUnxMT0dfUElECisgCS8qIENoZWNrIGZvciBpbnZhbGlkIGJpdHMuICovCisgCWlmIChwcmkgJiB+KExPR19QUklNQVNLfExPR19GQUNNQVNLKSkgeworLQkJc3lzbG9nKElOVEVSTkFMTE9HLAorKwkJX19zeXNsb2coSU5URVJOQUxMT0csCisgCQkgICAgInN5c2xvZzogdW5rbm93biBmYWNpbGl0eS9wcmlvcml0eTogJXgiLCBwcmkpOworIAkJcHJpICY9IExPR19QUklNQVNLfExPR19GQUNNQVNLOworIAl9CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMi4xLzY2MC1kZWJ1Zy1yZWFkbGlua19jaGstcmVhZGtsaW5rYXRfY2hrLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS82NjAtZGVidWctcmVhZGxpbmtfY2hrLXJlYWRrbGlua2F0X2Noay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWE3MDUyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTIuMS82NjAtZGVidWctcmVhZGxpbmtfY2hrLXJlYWRrbGlua2F0X2Noay5wYXRjaApAQCAtMCwwICsxLDI0IEBACitkaWZmIC1kdXIgZ2xpYmMtY3ZzLTIuOS5vcmlnL2RlYnVnL3JlYWRsaW5rX2Noay5jIGdsaWJjLWN2cy0yLjkvZGVidWcvcmVhZGxpbmtfY2hrLmMKKy0tLSBnbGliYy1jdnMtMi45Lm9yaWcvZGVidWcvcmVhZGxpbmtfY2hrLmMJMjAwNS0wMy0wMSAwMTo0MToxNS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy1jdnMtMi45L2RlYnVnL3JlYWRsaW5rX2Noay5jCTIwMDktMDYtMDEgMTA6NTk6MzcuMDAwMDAwMDAwICswMjAwCitAQCAtMjUsNyArMjUsNyBAQAorIAorIAorIHNzaXplX3QKKy1fX3JlYWRsaW5rX2NoayAoY29uc3QgY2hhciAqcGF0aCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuLCBzaXplX3QgYnVmbGVuKQorK19fcmVhZGxpbmtfY2hrIChjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBsZW4sIHNpemVfdCBidWZsZW4pCisgeworICAgaWYgKGxlbiA+IGJ1ZmxlbikKKyAgICAgX19jaGtfZmFpbCAoKTsKK2RpZmYgLWR1ciBnbGliYy1jdnMtMi45Lm9yaWcvZGVidWcvcmVhZGxpbmthdF9jaGsuYyBnbGliYy1jdnMtMi45L2RlYnVnL3JlYWRsaW5rYXRfY2hrLmMKKy0tLSBnbGliYy1jdnMtMi45Lm9yaWcvZGVidWcvcmVhZGxpbmthdF9jaGsuYwkyMDA2LTA0LTI0IDE4OjU2OjEyLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLWN2cy0yLjkvZGVidWcvcmVhZGxpbmthdF9jaGsuYwkyMDA5LTA2LTAxIDExOjA3OjI2LjAwMDAwMDAwMCArMDIwMAorQEAgLTIxLDcgKzIxLDcgQEAKKyAKKyAKKyBzc2l6ZV90CistX19yZWFkbGlua2F0X2NoayAoaW50IGZkLCBjb25zdCBjaGFyICpwYXRoLCB2b2lkICpidWYsIHNpemVfdCBsZW4sCisrX19yZWFkbGlua2F0X2NoayAoaW50IGZkLCBjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBsZW4sCisgCQkgIHNpemVfdCBidWZsZW4pCisgeworICAgaWYgKGxlbiA+IGJ1ZmxlbikKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzEwMC1yZXNwZWN0LWVudi1DUFBGTEFHUy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzEwMC1yZXNwZWN0LWVudi1DUFBGTEFHUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzk4Y2IyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvMTAwLXJlc3BlY3QtZW52LUNQUEZMQUdTLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK1Jlc3BlY3QgZW52aXJvbm1lbnQgQ1BQRkxBR1Mgd2hlbiB3ZSBydW4gLi9jb25maWd1cmUgc28gd2UgY2FuIGluamVjdAorcmFuZG9tIC1EIHRoaW5ncyB3aXRob3V0IGhhdmluZyB0byBzZXQgQ0ZMQUdTL0FTRkxBR1MKKworZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvTWFrZWNvbmZpZyBnbGliYy0yLjEzL01ha2Vjb25maWcKKy0tLSBnbGliYy0yLjEzLm9yaWcvTWFrZWNvbmZpZwkyMDA5LTA1LTA5IDIzOjU3OjU2LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTMvTWFrZWNvbmZpZwkyMDA5LTExLTEzIDAwOjQ5OjQxLjAwMDAwMDAwMCArMDEwMAorQEAgLTY5Nyw2ICs2OTcsNyBAQAorIAkgICAkKGZvcmVhY2ggbGliLCQobGlib2YtJChiYXNlbmFtZSAkKEBGKSkpIFwKKyAJCQkgJChsaWJvZi0kKDxGKSkgJChsaWJvZi0kKEBGKSksJChDUFBGTEFHUy0kKGxpYikpKSBcCisgCSAgICQoQ1BQRkxBR1MtJCg8RikpICQoQ1BQRkxBR1MtJChARikpICQoQ1BQRkxBR1MtJChiYXNlbmFtZSAkKEBGKSkpCisrQ1BQRkxBR1MgKz0gJChDUFBGTEFHUy1jb25maWcpCisgb3ZlcnJpZGUgQ0ZMQUdTCT0gLXN0ZD1nbnU5OSAkKGdudTg5LWlubGluZS1DRkxBR1MpIFwKKyAJCSAgJChmaWx0ZXItb3V0ICVmcmFtZS1wb2ludGVyLCQoK2NmbGFncykpICQoK2djY3dhcm4tYykgXAorIAkJICAkKHN5c2RlcC1DRkxBR1MpICQoQ0ZMQUdTLSQoc3VmZml4ICRAKSkgJChDRkxBR1MtJCg8RikpIFwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzEyMC1pMzg2LXg4Nl82NC1yZXZlcnQtY2xvbmUtY2ZpLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvMTIwLWkzODYteDg2XzY0LXJldmVydC1jbG9uZS1jZmkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdmNjE4MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzEyMC1pMzg2LXg4Nl82NC1yZXZlcnQtY2xvbmUtY2ZpLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK3JldmVydCBjZmkgYWRkaXRpb25zIHRvIGNsb25lIG9uIGkzODYveDg2XzY0IHRvIHdvcmthcm91bmQgcHJvYmxlbXMgaW4KK2djYydzIHVud2luZGVyIGNvZGUuICB0aGlzIGlzIG5vdCBhIGJ1ZyBpbiBnbGliYywgaXQgdHJpZ2dlcnMgcHJvYmxlbXMKK2Vsc2V3aGVyZS4gIHRoaXMgY2ZpIGNvZGUgZG9lcyBub3QgZ2FpbiB1cyBhIHdob2xlIGxvdCBhbnl3YXlzLgorCitodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLzIwMDYtMTIvbXNnMDAyOTMuaHRtbAorCitJbmRleDogc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9jbG9uZS5TCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSQ1MgZmlsZTogL2N2cy9nbGliYy9saWJjL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvY2xvbmUuUyx2CityZXRyaWV2aW5nIHJldmlzaW9uIDEuMjcKK3JldHJpZXZpbmcgcmV2aXNpb24gMS4yNgorZGlmZiAtdSAtcCAtcjEuMjcgLXIxLjI2CisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvY2xvbmUuUyBnbGliYy0yLjEzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvY2xvbmUuUworLS0tIGdsaWJjLTIuMTMub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L2Nsb25lLlMJMjAwNi0xMi0wNCAwMDoxMjozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvY2xvbmUuUwkyMDA5LTExLTEzIDAwOjQ5OjQ1LjAwMDAwMDAwMCArMDEwMAorQEAgLTEyMCw5ICsxMjAsNiBAQAorIAlyZXQKKyAKKyBMKHRocmVhZF9zdGFydCk6CistCWNmaV9zdGFydHByb2M7CistCS8qIENsZWFyaW5nIGZyYW1lIHBvaW50ZXIgaXMgaW5zdWZmaWNpZW50LCB1c2UgQ0ZJLiAgKi8KKy0JY2ZpX3VuZGVmaW5lZCAoZWlwKTsKKyAJLyogTm90ZTogJWVzaSBpcyB6ZXJvLiAgKi8KKyAJbW92bAklZXNpLCVlYnAJLyogdGVybWluYXRlIHRoZSBzdGFjayBmcmFtZSAqLworICNpZmRlZiBSRVNFVF9QSUQKK0BAIC0xNTUsNyArMTUyLDYgQEAKKyAJam1wCUwoaGFzcGlkKQorIAkucHJldmlvdXMKKyAjZW5kaWYKKy0JY2ZpX2VuZHByb2M7CisgCisgCWNmaV9zdGFydHByb2MKKyBQU0VVRE9fRU5EIChCUF9TWU0gKF9fY2xvbmUpKQorZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgveDg2XzY0L2Nsb25lLlMgZ2xpYmMtMi4xMy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC94ODZfNjQvY2xvbmUuUworLS0tIGdsaWJjLTIuMTMub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC94ODZfNjQvY2xvbmUuUwkyMDA2LTEyLTA0IDAwOjEyOjM2LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTMvc3lzZGVwcy91bml4L3N5c3YvbGludXgveDg2XzY0L2Nsb25lLlMJMjAwOS0xMS0xMyAwMDo0OTo0NS4wMDAwMDAwMDAgKzAxMDAKK0BAIC04OSw5ICs4OSw2IEBACisgCXJldAorIAorIEwodGhyZWFkX3N0YXJ0KToKKy0JY2ZpX3N0YXJ0cHJvYzsKKy0JLyogQ2xlYXJpbmcgZnJhbWUgcG9pbnRlciBpcyBpbnN1ZmZpY2llbnQsIHVzZSBDRkkuICAqLworLQljZmlfdW5kZWZpbmVkIChyaXApOworIAkvKiBDbGVhciB0aGUgZnJhbWUgcG9pbnRlci4gIFRoZSBBQkkgc3VnZ2VzdHMgdGhpcyBiZSBkb25lLCB0byBtYXJrCisgCSAgIHRoZSBvdXRlcm1vc3QgZnJhbWUgb2J2aW91c2x5LiAgKi8KKyAJeG9ybAklZWJwLCAlZWJwCitAQCAtMTE2LDcgKzExMyw2IEBACisgCS8qIENhbGwgZXhpdCB3aXRoIHJldHVybiB2YWx1ZSBmcm9tIGZ1bmN0aW9uIGNhbGwuICovCisgCW1vdnEJJXJheCwgJXJkaQorIAljYWxsCUhJRERFTl9KVU1QVEFSR0VUIChfZXhpdCkKKy0JY2ZpX2VuZHByb2M7CisgCisgCWNmaV9zdGFydHByb2M7CisgUFNFVURPX0VORCAoQlBfU1lNIChfX2Nsb25lKSkKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzE0MC1kaXNhYmxlLWxkY29uZmlnLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvMTQwLWRpc2FibGUtbGRjb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc4ZTFkZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzE0MC1kaXNhYmxlLWxkY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKK2RvIG5vdCBib3RoZXIgcnVubmluZyBsZGNvbmZpZyBvbiBERVNURElSLiAgaXQgd2FudHMgdG8gd3JpdGUgdGhlIHRlbXAgY2FjaGUKK2ZpbGUgb3V0c2lkZSBvZiB0aGUgY2hyb290LiAgZG9lc250IG1hdHRlciBhbnl3YXlzIGFzIHdlIHdvbnQgdXNlIHRoZSBjYWNoZQorcmVzdWx0cyAocG9ydGFnZSB3aWxsIHJlYnVpbGQgY2FjaGUpLCBzbyBydW5uaW5nIGxkY29uZmlnIGlzIHNpbXBseSBhIHdhc3RlCitvZiB0aW1lLgorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9NYWtlZmlsZSBnbGliYy0yLjEzL01ha2VmaWxlCistLS0gZ2xpYmMtMi4xMy5vcmlnL01ha2VmaWxlCTIwMDktMDQtMjMgMjA6MjM6MDMuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMy9NYWtlZmlsZQkyMDA5LTExLTEzIDAwOjQ5OjQ5LjAwMDAwMDAwMCArMDEwMAorQEAgLTExNiw2ICsxMTYsNyBAQAorIAlybSAtZiAkKHN5bWJvbGljLWxpbmstbGlzdCkKKyAKKyBpbnN0YWxsOgorK2RvbnQtYm90aGVyLXdpdGgtZGVzdGRpcjoKKyAJLXRlc3QgISAteCAkKGNvbW1vbi1vYmpwZngpZWxmL2xkY29uZmlnIHx8IExDX0FMTD1DIExBTkdVQUdFPUMgXAorIAkgICQoY29tbW9uLW9ianBmeCllbGYvbGRjb25maWcgJChhZGRwcmVmaXggLXIgLCQoaW5zdGFsbF9yb290KSkgXAorIAkJCQkgICAgICAgJChzbGliZGlyKSAkKGxpYmRpcikKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzE1MC1xdWV1ZS1oZWFkZXItdXBkYXRlcy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzE1MC1xdWV1ZS1oZWFkZXItdXBkYXRlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2JlNzBlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvMTUwLXF1ZXVlLWhlYWRlci11cGRhdGVzLnBhdGNoCkBAIC0wLDAgKzEsODUgQEAKK2dyYWIgc29tZSB1cGRhdGVzIGZyb20gRnJlZUJTRAorCitodHRwOi8vYnVncy5nZW50b28ub3JnLzIwMTk3OQorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9taXNjL3N5cy9xdWV1ZS5oIGdsaWJjLTIuMTMvbWlzYy9zeXMvcXVldWUuaAorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9taXNjL3N5cy9xdWV1ZS5oIGdsaWJjLTIuMTMvbWlzYy9zeXMvcXVldWUuaAorLS0tIGdsaWJjLTIuMTMub3JpZy9taXNjL3N5cy9xdWV1ZS5oCTIwMDgtMDMtMDUgMDY6NTA6MzAuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMy9taXNjL3N5cy9xdWV1ZS5oCTIwMDktMTEtMTMgMDA6NDk6NTEuMDAwMDAwMDAwICswMTAwCitAQCAtMTM2LDYgKzEzNiwxMSBAQAorIAkJKHZhcik7CQkJCQkJCVwKKyAJCSh2YXIpID0gKCh2YXIpLT5maWVsZC5sZV9uZXh0KSkKKyAKKysjZGVmaW5lCUxJU1RfRk9SRUFDSF9TQUZFKHZhciwgaGVhZCwgZmllbGQsIHR2YXIpCQkJXAorKwlmb3IgKCh2YXIpID0gTElTVF9GSVJTVCgoaGVhZCkpOwkJCQlcCisrCSAgICAodmFyKSAmJiAoKHR2YXIpID0gTElTVF9ORVhUKCh2YXIpLCBmaWVsZCksIDEpOwkJXAorKwkgICAgKHZhcikgPSAodHZhcikpCisrCisgLyoKKyAgKiBMaXN0IGFjY2VzcyBtZXRob2RzLgorICAqLworQEAgLTE5Nyw2ICsyMDIsMTYgQEAKKyAjZGVmaW5lCVNMSVNUX0ZPUkVBQ0godmFyLCBoZWFkLCBmaWVsZCkJCQkJCVwKKyAJZm9yKCh2YXIpID0gKGhlYWQpLT5zbGhfZmlyc3Q7ICh2YXIpOyAodmFyKSA9ICh2YXIpLT5maWVsZC5zbGVfbmV4dCkKKyAKKysjZGVmaW5lCVNMSVNUX0ZPUkVBQ0hfU0FGRSh2YXIsIGhlYWQsIGZpZWxkLCB0dmFyKQkJCVwKKysJZm9yICgodmFyKSA9IFNMSVNUX0ZJUlNUKChoZWFkKSk7CQkJCVwKKysJICAgICh2YXIpICYmICgodHZhcikgPSBTTElTVF9ORVhUKCh2YXIpLCBmaWVsZCksIDEpOwkJXAorKwkgICAgKHZhcikgPSAodHZhcikpCisrCisrI2RlZmluZQlTTElTVF9GT1JFQUNIX1BSRVZQVFIodmFyLCB2YXJwLCBoZWFkLCBmaWVsZCkJCQlcCisrCWZvciAoKHZhcnApID0gJlNMSVNUX0ZJUlNUKChoZWFkKSk7CQkJCVwKKysJICAgICgodmFyKSA9ICoodmFycCkpICE9IE5VTEw7CQkJCQlcCisrCSAgICAodmFycCkgPSAmU0xJU1RfTkVYVCgodmFyKSwgZmllbGQpKQorKworIC8qCisgICogU2luZ2x5LWxpbmtlZCBMaXN0IGFjY2VzcyBtZXRob2RzLgorICAqLworQEAgLTI0Miw2ICsyNTcsMTIgQEAKKyAJKGhlYWQpLT5zdHFoX2xhc3QgPSAmKGVsbSktPmZpZWxkLnN0cWVfbmV4dDsJCQlcCisgfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisgCisrI2RlZmluZQlTVEFJTFFfTEFTVChoZWFkLCB0eXBlLCBmaWVsZCkJCQkJCVwKKysJKFNUQUlMUV9FTVBUWSgoaGVhZCkpID8JCQkJCQlcCisrCQlOVUxMIDoJCQkJCQkJXAorKwkgICAgICAgICgoc3RydWN0IHR5cGUgKikodm9pZCAqKQkJCQlcCisrCQkoKGNoYXIgKikoKGhlYWQpLT5zdHFoX2xhc3QpIC0gX19vZmZzZXRvZihzdHJ1Y3QgdHlwZSwgZmllbGQpKSkpCisrCisgI2RlZmluZQlTVEFJTFFfSU5TRVJUX0FGVEVSKGhlYWQsIGxpc3RlbG0sIGVsbSwgZmllbGQpIGRvIHsJCVwKKyAJaWYgKCgoZWxtKS0+ZmllbGQuc3RxZV9uZXh0ID0gKGxpc3RlbG0pLT5maWVsZC5zdHFlX25leHQpID09IE5VTEwpXAorIAkJKGhlYWQpLT5zdHFoX2xhc3QgPSAmKGVsbSktPmZpZWxkLnN0cWVfbmV4dDsJCVwKK0BAIC0yNzEsNiArMjkyLDExIEBACisgCQkodmFyKTsJCQkJCQkJXAorIAkJKHZhcikgPSAoKHZhciktPmZpZWxkLnN0cWVfbmV4dCkpCisgCisrI2RlZmluZSBTVEFJTFFfRk9SRUFDSF9TQUZFKHZhciwgaGVhZCwgZmllbGQsIHR2YXIpCQkJXAorKwlmb3IgKCh2YXIpID0gU1RBSUxRX0ZJUlNUKChoZWFkKSk7CQkJCVwKKysJCSh2YXIpICYmICgodHZhcikgPSBTVEFJTFFfTkVYVCgodmFyKSwgZmllbGQpLCAxKTsJXAorKwkJKHZhcikgPSAodHZhcikpCisrCisgI2RlZmluZQlTVEFJTFFfQ09OQ0FUKGhlYWQxLCBoZWFkMikgZG8gewkJCQlcCisgCWlmICghU1RBSUxRX0VNUFRZKChoZWFkMikpKSB7CQkJCQlcCisgCQkqKGhlYWQxKS0+c3RxaF9sYXN0ID0gKGhlYWQyKS0+c3RxaF9maXJzdDsJCVwKK0BAIC00MzcsMTEgKzQ2MywyMSBAQAorIAkJKHZhcik7CQkJCQkJCVwKKyAJCSh2YXIpID0gKCh2YXIpLT5maWVsZC50cWVfbmV4dCkpCisgCisrI2RlZmluZSBUQUlMUV9GT1JFQUNIX1NBRkUodmFyLCBoZWFkLCBmaWVsZCwgdHZhcikJCQlcCisrCWZvciAoKHZhcikgPSBUQUlMUV9GSVJTVCgoaGVhZCkpOwkJCQlcCisrCQkodmFyKSAmJiAoKHR2YXIpID0gVEFJTFFfTkVYVCgodmFyKSwgZmllbGQpLCAxKTsJXAorKwkJKHZhcikgPSAodHZhcikpCisrCisgI2RlZmluZQlUQUlMUV9GT1JFQUNIX1JFVkVSU0UodmFyLCBoZWFkLCBoZWFkbmFtZSwgZmllbGQpCQlcCisgCWZvciAoKHZhcikgPSAoKigoKHN0cnVjdCBoZWFkbmFtZSAqKSgoaGVhZCktPnRxaF9sYXN0KSktPnRxaF9sYXN0KSk7CVwKKyAJCSh2YXIpOwkJCQkJCQlcCisgCQkodmFyKSA9ICgqKCgoc3RydWN0IGhlYWRuYW1lICopKCh2YXIpLT5maWVsZC50cWVfcHJldikpLT50cWhfbGFzdCkpKQorIAorKyNkZWZpbmUgVEFJTFFfRk9SRUFDSF9SRVZFUlNFX1NBRkUodmFyLCBoZWFkLCBoZWFkbmFtZSwgZmllbGQsIHR2YXIpCVwKKysJZm9yICgodmFyKSA9IFRBSUxRX0xBU1QoKGhlYWQpLCBoZWFkbmFtZSk7CQkJXAorKwkJKHZhcikgJiYgKCh0dmFyKSA9IFRBSUxRX1BSRVYoKHZhciksIGhlYWRuYW1lLCBmaWVsZCksIDEpOwlcCisrCQkodmFyKSA9ICh0dmFyKSkKKysKKyAjZGVmaW5lCVRBSUxRX0NPTkNBVChoZWFkMSwgaGVhZDIsIGZpZWxkKSBkbyB7CQkJCVwKKyAJaWYgKCFUQUlMUV9FTVBUWShoZWFkMikpIHsJCQkJCVwKKyAJCSooaGVhZDEpLT50cWhfbGFzdCA9IChoZWFkMiktPnRxaF9maXJzdDsJCVwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzE2MC1tYW51YWwtbm8tcGVybC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzE2MC1tYW51YWwtbm8tcGVybC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTJiODA3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvMTYwLW1hbnVhbC1uby1wZXJsLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK0lmIHdlJ3JlIHVzaW5nIGEgY3ZzIHNuYXBzaG90IHdoaWNoIHVwZGF0ZXMgdGhlIHNvdXJjZSBmaWxlcywgYW5kCitwZXJsIGlzbid0IGluc3RhbGxlZCB5ZXQsIHRoZW4gd2UgY2FuJ3QgcmVnZW4gdGhlIGRvY3MuICBOb3QgYSBiaWcKK2RlYWwsIHNvIGp1c3Qgd2hpbmUgYSBsaXR0bGUgYW5kIGNvbnRpbnVlIG9uIG91ciBtZXJyeSB3YXkuCisKK2h0dHA6Ly9idWdzLmdlbnRvby5vcmcvNjAxMzIKKworZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvbWFudWFsL01ha2VmaWxlIGdsaWJjLTIuMTMvbWFudWFsL01ha2VmaWxlCistLS0gZ2xpYmMtMi4xMy5vcmlnL21hbnVhbC9NYWtlZmlsZQkyMDA2LTAxLTA4IDA3OjQzOjQ3LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTMvbWFudWFsL01ha2VmaWxlCTIwMDktMTEtMTMgMDA6NDk6NTQuMDAwMDAwMDAwICswMTAwCitAQCAtMTA0LDkgKzEwNCwxNCBAQAorIGxpYm0tZXJyLnRleGk6IHN0YW1wLWxpYm0tZXJyCisgc3RhbXAtbGlibS1lcnI6IGxpYm0tZXJyLXRhYi5wbCAkKHdpbGRjYXJkICQoZm9yZWFjaCBkaXIsJChzeXNkaXJzKSxcCisgCQkJCQkJICAgICAkKGRpcikvbGlibS10ZXN0LXVscHMpKQorK2lmbmVxICgkKFBFUkwpLG5vKQorIAlwd2Q9YHB3ZGA7IFwKKyAJJChQRVJMKSAkPCAkJHB3ZC8uLiA+IGxpYm0tZXJyLXRtcAorIAkkKG1vdmUtaWYtY2hhbmdlKSBsaWJtLWVyci10bXAgbGlibS1lcnIudGV4aQorK2Vsc2UKKysJZWNobyAiVW5hYmxlIHRvIHJlYnVpbGQgbWF0aCBkb2NzLCBubyBwZXJsIGluc3RhbGxlZCIKKysJdG91Y2ggbGlibS1lcnIudGV4aQorK2VuZGlmCisgCXRvdWNoICRACisgCisgIyBHZW5lcmF0ZSBUZXhpbmZvIGZpbGVzIGZyb20gdGhlIEMgc291cmNlIGZvciB0aGUgZXhhbXBsZSBwcm9ncmFtcy4KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzE3MC1sb2NhbGVkZWYtZml4LXRyYW1wb2xpbmUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy8xNzAtbG9jYWxlZGVmLWZpeC10cmFtcG9saW5lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ODRhMDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy8xNzAtbG9jYWxlZGVmLWZpeC10cmFtcG9saW5lLnBhdGNoCkBAIC0wLDAgKzEsNjkgQEAKKyMhIC9iaW4vc2ggLWUKKworIyBEUDogRGVzY3JpcHRpb246IEZpeCBsb2NhbGVkZWYgc2VnZmF1bHQgd2hlbiBydW4gdW5kZXIgZXhlYy1zaGllbGQsCisjICAgICAgICBQYVggb3Igc2ltaWxhci4gKCMyMzE0MzgsICMxOTgwOTkpCisjIERQOiBEcGF0Y2ggQXV0aG9yOiBKYW1lcyBUcm91cCA8amFtZXNAbm9jcmV3Lm9yZz4KKyMgRFA6IFBhdGNoIEF1dGhvcjogKHByb2JhYmx5KSBKYWt1YiBKZWxpbmVrIDxqYWt1YkByZWRoYXQuY29tPgorIyBEUDogVXBzdHJlYW0gc3RhdHVzOiBVbmtub3duCisjIERQOiBTdGF0dXMgRGV0YWlsczogVW5rbm93bgorIyBEUDogRGF0ZTogMjAwNC0wMy0xNgorCitpZiBbICQjIC1uZSAyIF07IHRoZW4KKyAgICBlY2hvID4mMiAiYGJhc2VuYW1lICQwYDogc2NyaXB0IGV4cGVjdHMgLXBhdGNofC11bnBhdGNoIGFzIGFyZ3VtZW50IgorICAgIGV4aXQgMQorZmkKK2Nhc2UgIiQxIiBpbgorICAgIC1wYXRjaCkgcGF0Y2ggLWQgIiQyIiAtZiAtLW5vLWJhY2t1cC1pZi1taXNtYXRjaCAtcDEgPCAkMDs7CisgICAgLXVucGF0Y2gpIHBhdGNoIC1kICIkMiIgLWYgLS1uby1iYWNrdXAtaWYtbWlzbWF0Y2ggLVIgLXAxIDwgJDA7OworICAgICopCisJZWNobyA+JjIgImBiYXNlbmFtZSAkMGA6IHNjcmlwdCBleHBlY3RzIC1wYXRjaHwtdW5wYXRjaCBhcyBhcmd1bWVudCIKKwlleGl0IDEKK2VzYWMKK2V4aXQgMAorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9sb2NhbGUvcHJvZ3JhbXMvM2xldmVsLmggZ2xpYmMtMi4xMy9sb2NhbGUvcHJvZ3JhbXMvM2xldmVsLmgKKy0tLSBnbGliYy0yLjEzLm9yaWcvbG9jYWxlL3Byb2dyYW1zLzNsZXZlbC5oCTIwMDctMDctMTYgMDI6NTQ6NTkuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMy9sb2NhbGUvcHJvZ3JhbXMvM2xldmVsLmgJMjAwOS0xMS0xMyAwMDo0OTo1Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMDMsNiArMjAzLDQyIEBACisgCX0KKyAgICAgfQorIH0KKysKKysvKiBHQ0MgQVRNIHNlZW1zIHRvIGRvIGEgcG9vciBqb2Igd2l0aCBwb2ludGVycyB0byBuZXN0ZWQgZnVuY3Rpb25zIHBhc3NlZAorKyAgIHRvIGlubGluZWQgZnVuY3Rpb25zLiAgSGVscCBpdCBhIGxpdHRsZSBiaXQgd2l0aCB0aGlzIGhhY2suICAqLworKyNkZWZpbmUgd2NoZWFkX3RhYmxlX2l0ZXJhdGUodHAsIGZuKSBcCisrZG8JCQkJCQkJCQkgICAgICBcCisrICB7CQkJCQkJCQkJICAgICAgXAorKyAgICBzdHJ1Y3Qgd2NoZWFkX3RhYmxlICp0ID0gKHRwKTsJCQkJCSAgICAgIFwKKysgICAgdWludDMyX3QgaW5kZXgxOwkJCQkJCQkgICAgICBcCisrICAgIGZvciAoaW5kZXgxID0gMDsgaW5kZXgxIDwgdC0+bGV2ZWwxX3NpemU7IGluZGV4MSsrKQkJCSAgICAgIFwKKysgICAgICB7CQkJCQkJCQkJICAgICAgXAorKwl1aW50MzJfdCBsb29rdXAxID0gdC0+bGV2ZWwxW2luZGV4MV07CQkJCSAgICAgIFwKKysJaWYgKGxvb2t1cDEgIT0gKCh1aW50MzJfdCkgfjApKQkJCQkJICAgICAgXAorKwkgIHsJCQkJCQkJCSAgICAgIFwKKysJICAgIHVpbnQzMl90IGxvb2t1cDFfc2hpZnRlZCA9IGxvb2t1cDEgPDwgdC0+cTsJCQkgICAgICBcCisrCSAgICB1aW50MzJfdCBpbmRleDI7CQkJCQkJICAgICAgXAorKwkgICAgZm9yIChpbmRleDIgPSAwOyBpbmRleDIgPCAoMSA8PCB0LT5xKTsgaW5kZXgyKyspCQkgICAgICBcCisrCSAgICAgIHsJCQkJCQkJCSAgICAgIFwKKysJCXVpbnQzMl90IGxvb2t1cDIgPSB0LT5sZXZlbDJbaW5kZXgyICsgbG9va3VwMV9zaGlmdGVkXTsJICAgICAgXAorKwkJaWYgKGxvb2t1cDIgIT0gKCh1aW50MzJfdCkgfjApKQkJCQkgICAgICBcCisrCQkgIHsJCQkJCQkJICAgICAgXAorKwkJICAgIHVpbnQzMl90IGxvb2t1cDJfc2hpZnRlZCA9IGxvb2t1cDIgPDwgdC0+cDsJCSAgICAgIFwKKysJCSAgICB1aW50MzJfdCBpbmRleDM7CQkJCQkgICAgICBcCisrCQkgICAgZm9yIChpbmRleDMgPSAwOyBpbmRleDMgPCAoMSA8PCB0LT5wKTsgaW5kZXgzKyspCSAgICAgIFwKKysJCSAgICAgIHsJCQkJCQkJICAgICAgXAorKwkJCXN0cnVjdCBlbGVtZW50X3QgKmxvb2t1cDMJCQkgICAgICBcCisrCQkJICA9IHQtPmxldmVsM1tpbmRleDMgKyBsb29rdXAyX3NoaWZ0ZWRdOwkgICAgICBcCisrCQkJaWYgKGxvb2t1cDMgIT0gTlVMTCkJCQkJICAgICAgXAorKwkJCSAgZm4gKCgoKGluZGV4MSA8PCB0LT5xKSArIGluZGV4MikgPDwgdC0+cCkgKyBpbmRleDMsIFwKKysJCQkgICAgICBsb29rdXAzKTsJCQkJCSAgICAgIFwKKysJCSAgICAgIH0JCQkJCQkJICAgICAgXAorKwkJICB9CQkJCQkJCSAgICAgIFwKKysJICAgICAgfQkJCQkJCQkJICAgICAgXAorKwkgIH0JCQkJCQkJCSAgICAgIFwKKysgICAgICB9CQkJCQkJCQkJICAgICAgXAorKyAgfSB3aGlsZSAoMCkKKysKKyAjZW5kaWYKKyAKKyAjaWZuZGVmIE5PX0ZJTkFMSVpFCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy8xODAtcmVzb2x2LWR5bmFtaWMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy8xODAtcmVzb2x2LWR5bmFtaWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkxNmJjZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzE4MC1yZXNvbHYtZHluYW1pYy5wYXRjaApAQCAtMCwwICsxLDM5IEBACityaXBwZWQgZnJvbSBTdVNFCisKK2lmIC9ldGMvcmVzb2x2LmNvbmYgaXMgdXBkYXRlZCwgdGhlbiBtYWtlIHN1cmUgYXBwbGljYXRpb25zCithbHJlYWR5IHJ1bm5pbmcgZ2V0IHRoZSB1cGRhdGVkIGluZm9ybWF0aW9uLgorCitodHRwOi8vYnVncy5nZW50b28ub3JnLzE3NzQxNgorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9yZXNvbHYvcmVzX2xpYmMuYyBnbGliYy0yLjEzL3Jlc29sdi9yZXNfbGliYy5jCistLS0gZ2xpYmMtMi4xMy5vcmlnL3Jlc29sdi9yZXNfbGliYy5jCTIwMDktMDItMDcgMDU6Mjc6NDIuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMy9yZXNvbHYvcmVzX2xpYmMuYwkyMDA5LTExLTEzIDAwOjQ5OjU5LjAwMDAwMDAwMCArMDEwMAorQEAgLTIyLDYgKzIyLDcgQEAKKyAjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisgI2luY2x1ZGUgPHJlc29sdi5oPgorICNpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorIAorIAorIC8qIFRoZSBmb2xsb3dpbmcgYml0IGlzIGNvcGllZCBmcm9tIHJlc19kYXRhLmMgKHdoZXJlIGl0IGlzICNpZmRlZidlZAorQEAgLTk1LDYgKzk2LDIwIEBACisgX19yZXNfbWF5YmVfaW5pdCAocmVzX3N0YXRlIHJlc3AsIGludCBwcmVpbml0KQorIHsKKyAJaWYgKHJlc3AtPm9wdGlvbnMgJiBSRVNfSU5JVCkgeworKwkJc3RhdGljIHRpbWVfdCBsYXN0X210aW1lLCBsYXN0X2NoZWNrOworKwkJdGltZV90IG5vdzsKKysJCXN0cnVjdCBzdGF0IHN0YXRidWY7CisrCQkKKysJCXRpbWUgKCZub3cpOworKwkJaWYgKG5vdyAhPSBsYXN0X2NoZWNrKSB7CisrCQkJbGFzdF9jaGVjayA9IG5vdzsKKysJCQlpZiAoc3RhdCAoX1BBVEhfUkVTQ09ORiwgJnN0YXRidWYpID09IDAgJiYgbGFzdF9tdGltZSAhPSBzdGF0YnVmLnN0X210aW1lKSB7CisrCQkJCWxhc3RfbXRpbWUgPSBzdGF0YnVmLnN0X210aW1lOworKwkJCQlhdG9taWNpbmNsb2NrIChsb2NrKTsKKysJCQkJYXRvbWljaW5jIChfX3Jlc19pbml0c3RhbXApOworKwkJCQlhdG9taWNpbmN1bmxvY2sgKGxvY2spOworKwkJCX0KKysJCX0KKyAJCWlmIChfX3Jlc19pbml0c3RhbXAgIT0gcmVzcC0+X3UuX2V4dC5pbml0c3RhbXApIHsKKyAJCQlpZiAocmVzcC0+bnNjb3VudCA+IDApCisgCQkJCV9fcmVzX2ljbG9zZSAocmVzcCwgdHJ1ZSk7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy8xOTAtbG9jYWxlZGVmLW1tYXAucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy8xOTAtbG9jYWxlZGVmLW1tYXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM5MTRjZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzE5MC1sb2NhbGVkZWYtbW1hcC5wYXRjaApAQCAtMCwwICsxLDM5IEBACitzbmlwZWQgZnJvbSBEZWJpYW4KK2h0dHA6Ly9idWdzLmdlbnRvby5vcmcvMjg5NjE1CisKKzIwMDktMTAtMjcgIEF1cmVsaWVuIEphcm5vICA8YXVyZWxpZW5AYXVyZWwzMi5uZXQ+CisKKwkqIGxvY2FsZS9wcm9ncmFtcy9sb2NhcmNoaXZlLmM6IHVzZSBNTUFQX1NIQVJFRCB0byByZXNlcnZlIG1lbW9yeQorCXVzZWQgbGF0ZXIgd2l0aCBNTUFQX0ZJWEVEIHwgTU1BUF9TSEFSRUQgdG8gY29wZSB3aXRoIGRpZmZlcmVudAorCWFsaWdubWVudCByZXN0cmljdGlvbnMuCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL2xvY2FsZS9wcm9ncmFtcy9sb2NhcmNoaXZlLmMgZ2xpYmMtMi4xMy9sb2NhbGUvcHJvZ3JhbXMvbG9jYXJjaGl2ZS5jCistLS0gZ2xpYmMtMi4xMy5vcmlnL2xvY2FsZS9wcm9ncmFtcy9sb2NhcmNoaXZlLmMJMjAwOS0wNC0yNyAxNjowNzo0Ny4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEzL2xvY2FsZS9wcm9ncmFtcy9sb2NhcmNoaXZlLmMJMjAwOS0xMS0xMyAwMDo1MDowMS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMzQsNyArMTM0LDcgQEAKKyAgIHNpemVfdCByZXNlcnZlZCA9IFJFU0VSVkVfTU1BUF9TSVpFOworICAgaW50IHhmbGFncyA9IDA7CisgICBpZiAodG90YWwgPCByZXNlcnZlZAorLSAgICAgICYmICgocCA9IG1tYXA2NCAoTlVMTCwgcmVzZXJ2ZWQsIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwKKysgICAgICAmJiAoKHAgPSBtbWFwNjQgKE5VTEwsIHJlc2VydmVkLCBQUk9UX05PTkUsIE1BUF9TSEFSRUQgfCBNQVBfQU5PTiwKKyAJCSAgICAgICAtMSwgMCkpICE9IE1BUF9GQUlMRUQpKQorICAgICB4ZmxhZ3MgPSBNQVBfRklYRUQ7CisgICBlbHNlCitAQCAtMzk2LDcgKzM5Niw3IEBACisgICBzaXplX3QgcmVzZXJ2ZWQgPSBSRVNFUlZFX01NQVBfU0laRTsKKyAgIGludCB4ZmxhZ3MgPSAwOworICAgaWYgKHRvdGFsIDwgcmVzZXJ2ZWQKKy0gICAgICAmJiAoKHAgPSBtbWFwNjQgKE5VTEwsIHJlc2VydmVkLCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sCisrICAgICAgJiYgKChwID0gbW1hcDY0IChOVUxMLCByZXNlcnZlZCwgUFJPVF9OT05FLCBNQVBfU0hBUkVEIHwgTUFQX0FOT04sCisgCQkgICAgICAgLTEsIDApKSAhPSBNQVBfRkFJTEVEKSkKKyAgICAgeGZsYWdzID0gTUFQX0ZJWEVEOworICAgZWxzZQorQEAgLTYxNCw3ICs2MTQsNyBAQAorICAgaW50IHhmbGFncyA9IDA7CisgICB2b2lkICpwOworICAgaWYgKHN0LnN0X3NpemUgPCByZXNlcnZlZAorLSAgICAgICYmICgocCA9IG1tYXA2NCAoTlVMTCwgcmVzZXJ2ZWQsIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwKKysgICAgICAmJiAoKHAgPSBtbWFwNjQgKE5VTEwsIHJlc2VydmVkLCBQUk9UX05PTkUsIE1BUF9TSEFSRUQgfCBNQVBfQU5PTiwKKyAJCSAgICAgICAtMSwgMCkpICE9IE1BUF9GQUlMRUQpKQorICAgICB4ZmxhZ3MgPSBNQVBfRklYRUQ7CisgICBlbHNlCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy8yMDAtZmFkdmlzZTY0XzY0LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvMjAwLWZhZHZpc2U2NF82NC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWJjYTM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvMjAwLWZhZHZpc2U2NF82NC5wYXRjaApAQCAtMCwwICsxLDI4IEBACityaXBwZWQgZnJvbSBEZWJpYW4KKworIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvc2l4X2ZhZHZpc2UuYyB8ICAgMTMgKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvc2l4X2ZhZHZpc2UuYyBnbGliYy0yLjEzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvc2l4X2ZhZHZpc2UuYworLS0tIGdsaWJjLTIuMTMub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3NpeF9mYWR2aXNlLmMJMjAwMy0wOC0xNyAwMjozNjoyMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvc2l4X2ZhZHZpc2UuYwkyMDA5LTExLTEzIDAwOjUwOjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTM1LDYgKzM1LDE5IEBACisgICAgIHJldHVybiBJTlRFUk5BTF9TWVNDQUxMX0VSUk5PIChyZXQsIGVycik7CisgICByZXR1cm4gMDsKKyAjZWxzZQorKyMgaWZkZWYgX19OUl9mYWR2aXNlNjRfNjQKKysgIElOVEVSTkFMX1NZU0NBTExfREVDTCAoZXJyKTsgIAorKyAgaW50IHJldCA9IElOVEVSTkFMX1NZU0NBTEwgKGZhZHZpc2U2NF82NCwgZXJyLCA2LCBmZCwKKysJCQkgICAgICBfX0xPTkdfTE9OR19QQUlSICgobG9uZykgKG9mZnNldCA+PiAzMSksCisrCQkJCQkJKGxvbmcpIG9mZnNldCksCisrCQkJICAgICAgX19MT05HX0xPTkdfUEFJUiAoKGxvbmcpIChsZW4gPj4gMzEpLAorKwkJCQkJCShsb25nKSBsZW4pLAorKwkJCSAgICAgIGFkdmlzZSk7CisrICBpZiAoSU5URVJOQUxfU1lTQ0FMTF9FUlJPUl9QIChyZXQsIGVycikpCisrICAgIHJldHVybiBJTlRFUk5BTF9TWVNDQUxMX0VSUk5PIChyZXQsIGVycik7CisrICByZXR1cm4gMDsKKysjIGVsc2UKKyAgIHJldHVybiBFTk9TWVM7CisrIyBlbmRpZgorICNlbmRpZgorIH0KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzIyMC1zZWN0aW9uLWNvbW1lbnRzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvMjIwLXNlY3Rpb24tY29tbWVudHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcxNzgyOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzIyMC1zZWN0aW9uLWNvbW1lbnRzLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK2h0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vbWwvYmludXRpbHMvMjAwNC0wNC9tc2cwMDY2NS5odG1sCisKK2ZpeGVzIGJ1aWxkaW5nIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcyAobGlrZSBtNjhrL2FybS9jcmlzL2V0Yy4uLikgYmVjYXVzZQoraXQgZG9lcyB0aGUgcmlnaHQgdGhpbmcKKworZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvaW5jbHVkZS9saWJjLXN5bWJvbHMuaCBnbGliYy0yLjEzL2luY2x1ZGUvbGliYy1zeW1ib2xzLmgKKy0tLSBnbGliYy0yLjEzLm9yaWcvaW5jbHVkZS9saWJjLXN5bWJvbHMuaAkyMDA5LTAzLTE0IDAwOjUxOjQ2LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTMvaW5jbHVkZS9saWJjLXN5bWJvbHMuaAkyMDA5LTExLTEzIDAwOjUwOjA3LjAwMDAwMDAwMCArMDEwMAorQEAgLTIzOSwxMiArMjM5LDEyIEBACisgIyAgZGVmaW5lIF9fbWFrZV9zZWN0aW9uX3VuYWxsb2NhdGVkKHNlY3Rpb25fc3RyaW5nKQorICMgZW5kaWYKKyAKKy0vKiBUYWNraW5nIG9uICJcblx0IyIgdG8gdGhlIHNlY3Rpb24gbmFtZSBtYWtlcyBnY2MgcHV0IGl0J3MgYm9ndXMKKysvKiBUYWNraW5nIG9uICJcbiNBUFBcblx0IyIgdG8gdGhlIHNlY3Rpb24gbmFtZSBtYWtlcyBnY2MgcHV0IGl0J3MgYm9ndXMKKyAgICBzZWN0aW9uIGF0dHJpYnV0ZXMgb24gd2hhdCBsb29rcyBsaWtlIGEgY29tbWVudCB0byB0aGUgYXNzZW1ibGVyLiAgKi8KKyAjIGlmZGVmIEhBVkVfU0VDVElPTl9RVU9URVMKKy0jICBkZWZpbmUgX19zZWNfY29tbWVudCAiXCJcblx0I1wiIgorKyMgIGRlZmluZSBfX3NlY19jb21tZW50ICJcIlxuI0FQUFxuXHQjXCIiCisgIyBlbHNlCistIyAgZGVmaW5lIF9fc2VjX2NvbW1lbnQgIlxuXHQjIgorKyMgIGRlZmluZSBfX3NlY19jb21tZW50ICJcbiNBUFBcblx0IyIKKyAjIGVuZGlmCisgIyBkZWZpbmUgbGlua193YXJuaW5nKHN5bWJvbCwgbXNnKSBcCisgICBfX21ha2Vfc2VjdGlvbl91bmFsbG9jYXRlZCAoIi5nbnUud2FybmluZy4iICNzeW1ib2wpIFwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzIzMC1uby1pbmxpbmUtZ21vbi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzIzMC1uby1pbmxpbmUtZ21vbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTMzYzJiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvMjMwLW5vLWlubGluZS1nbW9uLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK2h0dHA6Ly9idWdzLmdlbnRvby5vcmcvMTk2MjQ1CitodHRwOi8vc291cmNld2FyZS5vcmcvbWwvbGliYy1hbHBoYS8yMDA2LTA1L21zZzAwMDE3Lmh0bWwKKworQXR0YWNoZWQgaXMgYSBwYXRjaCB0byBhZGQgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkgdG8KK2NhbGxfZ21vbl9zdGFydC4KKworV2l0aG91dCB0aGlzIHBhdGNoLCB0aGUgc2VjIHNjcmlwdCB0aGF0IHByb2Nlc3NlZCBpbml0ZmluaS5zIHJlbW92ZXMgYQorcGFydCBvZiBpbmxpbmVkIGNhbGxfZ21vbl9zdGFydCwgY2F1c2luZyB1bmRlZmluZWQgbGFiZWwgZXJyb3JzLgorCitUaGlzIHBhdGNoIHNvbHZlcyB0aGUgcHJvYmxlbSBieSBmb3JjaW5nIGdjYyBub3QgdG8gaW5saW5lCitjYWxsX2dtb25fc3RhcnQgd2l0aCBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKS4KKworVGVzdGVkIGJ5IGJ1aWxkaW5nIGZvciBhcm0tbm9uZS1saXh1eC1nbnVlYWJpLiAgT0sgdG8gYXBwbHk/CisKK0thenUgSGlyYXRhCisKKzIwMDYtMDUtMDcgIEthenUgSGlyYXRhICAmbHQ7a2F6dUBjb2Rlc291cmNlcnkuY29tJmd0OworCisJKiBzeXNkZXBzL2dlbmVyaWMvaW5pdGZpbmkuYyAoY2FsbF9nbW9uX3N0YXJ0KTogQWRkCisJX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkuCisKK0luZGV4OiBzeXNkZXBzL2dlbmVyaWMvaW5pdGZpbmkuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9zeXNkZXBzL2dlbmVyaWMvaW5pdGZpbmkuYyBnbGliYy0yLjEzL3N5c2RlcHMvZ2VuZXJpYy9pbml0ZmluaS5jCistLS0gZ2xpYmMtMi4xMy5vcmlnL3N5c2RlcHMvZ2VuZXJpYy9pbml0ZmluaS5jCTIwMDctMDYtMTcgMjA6MDI6NDAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMy9zeXNkZXBzL2dlbmVyaWMvaW5pdGZpbmkuYwkyMDA5LTExLTEzIDAwOjUwOjA5LjAwMDAwMDAwMCArMDEwMAorQEAgLTcwLDcgKzcwLDcgQEAKKyAvKiBUaGUgYmVnaW5uaW5nIG9mIF9pbml0OiAgKi8KKyBhc20gKCJcbi8qQF9pbml0X1BST0xPR19CRUdJTlMqLyIpOworIAorLXN0YXRpYyB2b2lkCisrc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKKyBjYWxsX2dtb25fc3RhcnQodm9pZCkKKyB7CisgICBleHRlcm4gdm9pZCBfX2dtb25fc3RhcnRfXyAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKHdlYWspKTsgLyp3ZWFrX2V4dGVybiAoX19nbW9uX3N0YXJ0X18pOyovCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy8yNDAtY2hlY2tfbmF0aXZlLWhlYWRlcnMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy8yNDAtY2hlY2tfbmF0aXZlLWhlYWRlcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkzNmY3MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzI0MC1jaGVja19uYXRpdmUtaGVhZGVycy5wYXRjaApAQCAtMCwwICsxLDE3IEBACittYW55IHBvcnRzIGhpdCB0aGlzIHdhcm5pbmc6CisuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9jaGVja19uYXRpdmUuYzo0Njogd2FybmluZzogaW1wbGljaXQgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb24gJ21lbXNldCcKKy4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2NoZWNrX25hdGl2ZS5jOjQ2OiB3YXJuaW5nOiBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbiAnbWVtc2V0JworCitzbmlwcGVkIGZyb20gc3VzZQorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9jaGVja19uYXRpdmUuYyBnbGliYy0yLjEzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2NoZWNrX25hdGl2ZS5jCistLS0gZ2xpYmMtMi4xMy5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2NoZWNrX25hdGl2ZS5jCTIwMDctMTEtMjQgMDQ6MTI6MTcuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9jaGVja19uYXRpdmUuYwkyMDA5LTExLTEzIDAwOjUwOjExLjAwMDAwMDAwMCArMDEwMAorQEAgLTIzLDYgKzIzLDcgQEAKKyAjaW5jbHVkZSA8c3RkZGVmLmg+CisgI2luY2x1ZGUgPHN0ZGludC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHRpbWUuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPG5ldC9pZi5oPgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvMjUwLWZpeC1wcjYzMS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzI1MC1maXgtcHI2MzEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ4OTEyZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzI1MC1maXgtcHI2MzEucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorRnJvbSBkYW5rQGtlZ2VsLmNvbQorV2VkIEp1biAxNSAwOToxMjo0MyBQRFQgMjAwNQorCitGaXhlcworCitidWlsZC1nbGliYy9saWJjLmEobnNzd2l0Y2gubykoLmRhdGErMHg2NCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9uc3NfZmlsZXNfZ2V0YWxpYXNlbnRfcicKK2J1aWxkLWdsaWJjL2xpYmMuYShuc3N3aXRjaC5vKSguZGF0YSsweDZjKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX25zc19maWxlc19lbmRhbGlhc2VudCcKKy4uLiA1MyBsaW5lcyBkZWxldGVkIC4uLgorYnVpbGQtZ2xpYmMvbGliYy5hKG5zc3dpdGNoLm8pKC5kYXRhKzB4MjFjKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX25zc19maWxlc19nZXRzcG5hbV9yJworY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKK21ha2VbMl06ICoqKiBbL2J1aWxkL2djYy0zLjQuMy1nbGliYy0yLjMuNS1oZHJzLTIuNi4xMS4yL2k2ODYtdW5rbm93bi1saW51eC1nbnUvYnVpbGQtZ2xpYmMvZWxmL2xkY29uZmlnXSBFcnJvciAxCisKK3doZW4gYnVpbGRpbmcgZ2xpYmMgd2l0aCAtLWVuYWJsZS1zdGF0aWMtbnNzLgorCitTZWUgaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NjMxCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL01ha2Vjb25maWcgZ2xpYmMtMi4xMy9NYWtlY29uZmlnCistLS0gZ2xpYmMtMi4xMy5vcmlnL01ha2Vjb25maWcJMjAwOS0xMS0xMyAwMDo0OTo0MS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEzL01ha2Vjb25maWcJMjAwOS0xMS0xMyAwMDo1MDoxMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC01MzEsNyArNTMxLDcgQEAKKyAKKyAjIFRoZSBzdGF0aWMgbGlicmFyaWVzLgorIGlmZXEgKHllcywkKGJ1aWxkLXN0YXRpYykpCistbGluay1saWJjLXN0YXRpYyA9ICQoY29tbW9uLW9ianBmeClsaWJjLmEgJChzdGF0aWMtZ251bGliKSAkKGNvbW1vbi1vYmpwZngpbGliYy5hCisrbGluay1saWJjLXN0YXRpYyA9ICQoY29tbW9uLW9ianBmeClsaWJjLmEgJChzdGF0aWMtZ251bGliKSAkKG90aGVybGlicykgJChjb21tb24tb2JqcGZ4KWxpYmMuYQorIGVsc2UKKyBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorICMgV2UgY2FuIHRyeSB0byBsaW5rIHRoZSBwcm9ncmFtcyB3aXRoIGxpYipfcGljLmEuLi4KK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL2VsZi9NYWtlZmlsZSBnbGliYy0yLjEzL2VsZi9NYWtlZmlsZQorLS0tIGdsaWJjLTIuMTMub3JpZy9lbGYvTWFrZWZpbGUJMjAwOS0wMS0zMSAwMToyMDo1NS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEzL2VsZi9NYWtlZmlsZQkyMDA5LTExLTEzIDAwOjUwOjEzLjAwMDAwMDAwMCArMDEwMAorQEAgLTE0Niw2ICsxNDYsMTMgQEAKKyBpbnN0YWxsLWJpbi1zY3JpcHQgPSBsZGQKKyBlbmRpZgorIAorK2lmZXEgKHllcywkKGJ1aWxkLXN0YXRpYy1uc3MpKQorK25zc29iamRpciA6PSAkKHBhdHN1YnN0IC4uLyQoc3ViZGlyKSwuLCQoY29tbW9uLW9ianBmeCluc3MpCisrcmVzb2x2b2JqZGlyIDo9ICQocGF0c3Vic3QgLi4vJChzdWJkaXIpLC4sJChjb21tb24tb2JqcGZ4KXJlc29sdikKKytvdGhlcmxpYnMgKz0gJChuc3NvYmpkaXIpL2xpYm5zc19maWxlcy5hICQocmVzb2x2b2JqZGlyKS9saWJuc3NfZG5zLmEgXAorKwkgICAgICQocmVzb2x2b2JqZGlyKS9saWJyZXNvbHYuYQorK2VuZGlmCisrCisgb3RoZXJzCQk9IHNwcm9mIHNsbgorIGluc3RhbGwtYmluCT0gc3Byb2YKKyBvdGhlcnMtc3RhdGljICAgPSBzbG4KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzI2MC1hc3N1bWUtcGlwZTIucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy8yNjAtYXNzdW1lLXBpcGUyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZThmNGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy8yNjAtYXNzdW1lLXBpcGUyLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK2h0dHA6Ly9idWdzLmdlbnRvby5vcmcvMjUwMzQyCitodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD05Njg1CisKK3dlIGNhbnQgYXNzdW1lIHNvY2tfY2xvZXhlYyBhbmQgcGlwZTIgYXJlIGJvdW5kIHRvZ2V0aGVyIGFzIHRoZSBmb3JtZXIgZGVmaW5lcworYXJlIGZvdW5kIGluIGdsaWJjIG9ubHkgd2hpbGUgdGhlIGxhdHRlciBhcmUgYSBjb21ibyBvZiBrZXJuZWwgaGVhZGVycyBhbmQKK2dsaWJjLiAgc28gaWYgd2UgZG8gYSBydW50aW1lIGRldGVjdGlvbiBvZiBTT0NLX0NMT0VYRUMsIGJ1dCBwaXBlMigpIGlzIGEgc3R1YgoraW5zaWRlIG9mIGdsaWJjLCB3ZSBoaXQgYSBwcm9ibGVtLiAgZm9yIGV4YW1wbGU6CisKKyNpbmNsdWRlIDxncnAuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorbWFpbigpCit7CisJZ2V0Z3JuYW0oInBvcnRhZ2UiKTsKKwlpZiAoIXBvcGVuKCJscyIsICJyIikpCisJCXBlcnJvcigicG9wZW4oKSIpOworfQorCitnZXRncm5hbSgpIHdpbGwgZGV0ZWN0IHRoYXQgdGhlIGtlcm5lbCBzdXBwb3J0cyBTT0NLX0NMT0VYRUMgYW5kIHRoZW4gc2V0IGJvdGgKK19faGF2ZV9zb2NrX2Nsb2V4ZWMgYW5kIF9faGF2ZV9waXBlMiB0byB0cnVlLiAgYnV0IGlmIGdsaWJjIHdhcyBidWlsdCBhZ2FpbnN0CitvbGRlciBrZXJuZWwgaGVhZGVycyB3aGVyZSBfX05SX3BpcGUyIGRvZXMgbm90IGV4aXN0LCBnbGliYyB3aWxsIGhhdmUgYSBFTk9TWVMKK3N0dWIgZm9yIGl0LiAgc28gcG9wZW4oKSB3aWxsIGFsd2F5cyBmYWlsIGFzIGdsaWJjIGFzc3VtZXMgcGlwZTIoKSB3b3Jrcy4KKworZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvc29ja2V0L2hhdmVfc29ja19jbG9leGVjLmMgZ2xpYmMtMi4xMy9zb2NrZXQvaGF2ZV9zb2NrX2Nsb2V4ZWMuYworLS0tIGdsaWJjLTIuMTMub3JpZy9zb2NrZXQvaGF2ZV9zb2NrX2Nsb2V4ZWMuYwkyMDA4LTA3LTI1IDE4OjQ2OjIzLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTMvc29ja2V0L2hhdmVfc29ja19jbG9leGVjLmMJMjAwOS0xMS0xMyAwMDo1MDoxNS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNiw5ICsxNiwxNCBAQAorICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAgMDIxMTEtMTMwNyBVU0EuICAqLworIAorKyNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgI2luY2x1ZGUgPGtlcm5lbC1mZWF0dXJlcy5oPgorIAorICNpZiBkZWZpbmVkIFNPQ0tfQ0xPRVhFQyAmJiAhZGVmaW5lZCBfX0FTU1VNRV9TT0NLX0NMT0VYRUMKKyBpbnQgX19oYXZlX3NvY2tfY2xvZXhlYzsKKyAjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBPX0NMT0VYRUMgJiYgIWRlZmluZWQgX19BU1NVTUVfUElQRTIKKytpbnQgX19oYXZlX3BpcGUyOworKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvMjcwLWNoaW5hLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvMjcwLWNoaW5hLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZDc3NTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy8yNzAtY2hpbmEucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL2xvY2FsZWRhdGEvbG9jYWxlcy96aF9UVyBnbGliYy0yLjEzL2xvY2FsZWRhdGEvbG9jYWxlcy96aF9UVworLS0tIGdsaWJjLTIuMTMub3JpZy9sb2NhbGVkYXRhL2xvY2FsZXMvemhfVFcJMjAwNC0xMS0wMSAwMDo0MjoyOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEzL2xvY2FsZWRhdGEvbG9jYWxlcy96aF9UVwkyMDA5LTExLTEzIDAwOjUwOjE3LjAwMDAwMDAwMCArMDEwMAorQEAgLTEsNyArMSw3IEBACisgY29tbWVudF9jaGFyICUKKyBlc2NhcGVfY2hhciAvCisgJQorLSUgQ2hpbmVzZSBsYW5ndWFnZSBsb2NhbGUgZm9yIFRhaXdhbiBSLk8uQy4KKyslIENoaW5lc2UgbGFuZ3VhZ2UgbG9jYWxlIGZvciBUYWl3YW4KKyAlIGNoYXJtYXA6IEJJRzUtQ1A5NTAKKyAlCisgJSBPcmlnaW5hbCBBdXRob3I6CitAQCAtMTcsNyArMTcsNyBAQAorICUgUmVmZXJlbmNlOglodHRwOi8vd3d3b2xkLmRrdXVnLmRrL0pUQzEvU0MyMi9XRzIwL2RvY3MvbjY5MC5wZGYKKyAKKyBMQ19JREVOVElGSUNBVElPTgorLXRpdGxlICAgICAgIkNoaW5lc2UgbG9jYWxlIGZvciBUYWl3YW4gUi5PLkMuIgorK3RpdGxlICAgICAgIkNoaW5lc2UgbG9jYWxlIGZvciBUYWl3YW4iCisgc291cmNlICAgICAiIgorIGFkZHJlc3MgICAgIiIKKyBjb250YWN0ICAgICIiCitAQCAtMjUsNyArMjUsNyBAQAorIHRlbCAgICAgICAgIiIKKyBmYXggICAgICAgICIiCisgbGFuZ3VhZ2UgICAiQ2hpbmVzZSIKKy10ZXJyaXRvcnkgICJUYWl3YW4gUi5PLkMuIgorK3RlcnJpdG9yeSAgIlRhaXdhbiIKKyByZXZpc2lvbiAgICIwLjIiCisgZGF0ZSAgICAgICAiMjAwMC0wOC0wMiIKKyAlCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy8yODAtbmV3LXZhbGVuY2lhbi1sb2NhbGUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy8yODAtbmV3LXZhbGVuY2lhbi1sb2NhbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNkZDEwOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzI4MC1uZXctdmFsZW5jaWFuLWxvY2FsZS5wYXRjaApAQCAtMCwwICsxLDExNSBAQAoraHR0cDovL2J1Z3MuZ2VudG9vLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxODE1CitodHRwOi8vc291cmNld2FyZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTI1MjIKKworZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvbG9jYWxlZGF0YS9TVVBQT1JURUQgZ2xpYmMtMi4xMy9sb2NhbGVkYXRhL1NVUFBPUlRFRAorLS0tIGdsaWJjLTIuMTMub3JpZy9sb2NhbGVkYXRhL1NVUFBPUlRFRAkyMDA5LTA0LTE4IDEwOjQzOjUyLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTMvbG9jYWxlZGF0YS9TVVBQT1JURUQJMjAwOS0xMS0xMyAwMDo1MDoyMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC03Miw2ICs3Miw4IEBACisgY2FfRVMuVVRGLTgvVVRGLTggXAorIGNhX0VTL0lTTy04ODU5LTEgXAorIGNhX0VTQGV1cm8vSVNPLTg4NTktMTUgXAorK2NhX0VTLlVURi04QHZhbGVuY2lhL1VURi04IFwKKytjYV9FU0B2YWxlbmNpYS9JU08tODg1OS0xNSBcCisgY2FfRlIuVVRGLTgvVVRGLTggXAorIGNhX0ZSL0lTTy04ODU5LTE1IFwKKyBjYV9JVC5VVEYtOC9VVEYtOCBcCitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9sb2NhbGVkYXRhL2xvY2FsZXMvY2FfRVNAdmFsZW5jaWEgZ2xpYmMtMi4xMy9sb2NhbGVkYXRhL2xvY2FsZXMvY2FfRVNAdmFsZW5jaWEKKy0tLSBnbGliYy0yLjEzLm9yaWcvbG9jYWxlZGF0YS9sb2NhbGVzL2NhX0VTQHZhbGVuY2lhCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMy9sb2NhbGVkYXRhL2xvY2FsZXMvY2FfRVNAdmFsZW5jaWEJMjAwOS0xMS0xMyAwMDo1MDoyMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsOTYgQEAKKytjb21tZW50X2NoYXIgJQorK2VzY2FwZV9jaGFyICAvCisrJQorKyUgVmFsZW5jaWFuIChzb3V0aGVybiBDYXRhbGFuKSBsb2NhbGUgZm9yIFNwYWluIHdpdGggRXVybworKyUKKyslIE5vdGUgdGhhdCB0aGlzIGxvY2FsZSBpcyBhbG1vc3QgdGhlIHNhbWUgYXMgY2FfRVNAZXVyby4gIFRoZSBwb2ludCBvZiBoYXZpbmcKKyslIGEgc2VwYXJhdGUgbG9jYWxlIGlzIG9ubHkgZm9yIFBPIHRyYW5zbGF0aW9ucywgd2hpY2ggaGF2ZSBhIGxvdCBvZiBzb2NpYWwKKyslIHN1cHBvcnQgYW5kIGFyZSB2ZXJ5IGFwcHJlY2lhdGVkIGJ5IHRoZSBWYWxlbmNpYW4tc3BlYWtpbmcgY29tbXVuaXR5LgorKyUKKyslIENvbnRhY3Q6IEpvcmRpIE1hbGxhY2gKKyslIEVtYWlsOiBqb3JkaUBnbnUub3JnCisrJSBUZWw6CisrJSBGYXg6CisrJSBMYW5ndWFnZTogY2EKKyslIFRlcnJpdG9yeTogRVMKKyslIE9wdGlvbjogZXVybworKyUgUmV2aXNpb246IDEuMAorKyUgRGF0ZTogMjAwNi0wNC0wNgorKyUgQXBwbGljYXRpb246IGdlbmVyYWwKKyslIFVzZXJzOiBnZW5lcmFsCisrJSBSZXBlcnRvaXJlbWFwOiBtbmVtb25pYyxkcworKyUgQ2hhcnNldDogSVNPLTg4NTktMTUKKyslIERpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGZyZWUsIGFsc28KKyslIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorKworK0xDX0lERU5USUZJQ0FUSU9OCisrdGl0bGUgICAgICAiVmFsZW5jaWFuIChzb3V0aGVybiBDYXRhbGFuKSBsb2NhbGUgZm9yIFNwYWluIHdpdGggRXVybyIKKytzb3VyY2UgICAgICIiCisrYWRkcmVzcyAgICAiIgorK2NvbnRhY3QgICAgIkpvcmRpIE1hbGxhY2giCisrZW1haWwgICAgICAiam9yZGlAZ251Lm9yZyIKKyt0ZWwgICAgICAgICIiCisrZmF4ICAgICAgICAiIgorK2xhbmd1YWdlICAgIkNhdGFsYW4iCisrdGVycml0b3J5ICAiU3BhaW4iCisrcmV2aXNpb24gICAiMS4wIgorK2RhdGUgICAgICAgIjIwMDYtMDQtMDYiCisrJQorK2NhdGVnb3J5ICAiY2FfRVNAdmFsZW5jaWE6MjAwNiI7TENfSURFTlRJRklDQVRJT04KKytjYXRlZ29yeSAgImNhX0VTQHZhbGVuY2lhOjIwMDYiO0xDX0NUWVBFCisrY2F0ZWdvcnkgICJjYV9FU0B2YWxlbmNpYToyMDA2IjtMQ19DT0xMQVRFCisrY2F0ZWdvcnkgICJjYV9FU0B2YWxlbmNpYToyMDA2IjtMQ19NT05FVEFSWQorK2NhdGVnb3J5ICAiY2FfRVNAdmFsZW5jaWE6MjAwNiI7TENfTlVNRVJJQworK2NhdGVnb3J5ICAiY2FfRVNAdmFsZW5jaWE6MjAwNiI7TENfVElNRQorK2NhdGVnb3J5ICAiY2FfRVNAdmFsZW5jaWE6MjAwNiI7TENfTUVTU0FHRVMKKytjYXRlZ29yeSAgImNhX0VTQHZhbGVuY2lhOjIwMDYiO0xDX1BBUEVSCisrY2F0ZWdvcnkgICJjYV9FU0B2YWxlbmNpYToyMDA2IjtMQ19OQU1FCisrY2F0ZWdvcnkgICJjYV9FU0B2YWxlbmNpYToyMDA2IjtMQ19BRERSRVNTCisrY2F0ZWdvcnkgICJjYV9FU0B2YWxlbmNpYToyMDA2IjtMQ19URUxFUEhPTkUKKytjYXRlZ29yeSAgImNhX0VTQHZhbGVuY2lhOjIwMDYiO0xDX01FQVNVUkVNRU5UCisrCisrRU5EIExDX0lERU5USUZJQ0FUSU9OCisrCisrTENfQ1RZUEUKKytjb3B5ICJpMThuIgorK0VORCBMQ19DVFlQRQorKworK0xDX0NPTExBVEUKKytjb3B5ICJjYV9FUyIKKytFTkQgTENfQ09MTEFURQorKworK0xDX01PTkVUQVJZCisrY29weSAiY2FfRVMiCisrRU5EIExDX01PTkVUQVJZCisrCisrTENfTlVNRVJJQworK2NvcHkgImNhX0VTIgorK0VORCBMQ19OVU1FUklDCisrCisrTENfVElNRQorK2NvcHkgImNhX0VTIgorK0VORCBMQ19USU1FCisrCisrTENfTUVTU0FHRVMKKytjb3B5ICJjYV9FUyIKKytFTkQgTENfTUVTU0FHRVMKKysKKytMQ19QQVBFUgorK2NvcHkgImNhX0VTIgorK0VORCBMQ19QQVBFUgorKworK0xDX05BTUUKKytjb3B5ICJjYV9FUyIKKytFTkQgTENfTkFNRQorKworK0xDX0FERFJFU1MKKytjb3B5ICJjYV9FUyIKKytFTkQgTENfQUREUkVTUworKworK0xDX1RFTEVQSE9ORQorK2NvcHkgImNhX0VTIgorK0VORCBMQ19URUxFUEhPTkUKKysKKytMQ19NRUFTVVJFTUVOVAorK2NvcHkgImNhX0VTIgorK0VORCBMQ19NRUFTVVJFTUVOVApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvMzAwLW5zY2Qtb25lLWZvcmsucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy8zMDAtbnNjZC1vbmUtZm9yay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGM5YjNmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvMzAwLW5zY2Qtb25lLWZvcmsucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorb25seSBmb3JrIG9uZSB0byBhc3Npc3QgaW4gc3RvcC1zdGFydC1kYWVtb24gYXNzdW1wdGlvbnMgYWJvdXQgZGFlbW9uIGJlaGF2aW9yCisKK2h0dHA6Ly9idWdzLmdlbnRvby5vcmcvMTkwNzg1CisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL25zY2QvbnNjZC5jIGdsaWJjLTIuMTMvbnNjZC9uc2NkLmMKKy0tLSBnbGliYy0yLjEzLm9yaWcvbnNjZC9uc2NkLmMJMjAwOS0wMi0wNiAyMToxMDoyNy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEzL25zY2QvbnNjZC5jCTIwMDktMTEtMTMgMDA6NTA6MjQuMDAwMDAwMDAwICswMTAwCitAQCAtMTgyLDYgKzE4Miw5IEBACisgICAgICAgaWYgKHBpZCAhPSAwKQorIAlleGl0ICgwKTsKKyAKKysgICAgICAgaWYgKHdyaXRlX3BpZCAoX1BBVEhfTlNDRFBJRCkgPCAwKQorKwlkYmdfbG9nICgiJXM6ICVzIiwgX1BBVEhfTlNDRFBJRCwgc3RyZXJyb3IgKGVycm5vKSk7CisrCisgICAgICAgaW50IG51bGxmZCA9IG9wZW4gKF9QQVRIX0RFVk5VTEwsIE9fUkRXUik7CisgICAgICAgaWYgKG51bGxmZCAhPSAtMSkKKyAJeworQEAgLTIzMSwxMiArMjM0LDYgQEAKKyAJZm9yIChpID0gbWluX2Nsb3NlX2ZkOyBpIDwgZ2V0ZHRhYmxlc2l6ZSAoKTsgaSsrKQorIAkgIGNsb3NlIChpKTsKKyAKKy0gICAgICBwaWQgPSBmb3JrICgpOworLSAgICAgIGlmIChwaWQgPT0gLTEpCistCWVycm9yIChFWElUX0ZBSUxVUkUsIGVycm5vLCBfKCJjYW5ub3QgZm9yayIpKTsKKy0gICAgICBpZiAocGlkICE9IDApCistCWV4aXQgKDApOworLQorICAgICAgIHNldHNpZCAoKTsKKyAKKyAgICAgICBpZiAoY2hkaXIgKCIvIikgIT0gMCkKK0BAIC0yNDUsOSArMjQyLDYgQEAKKyAKKyAgICAgICBvcGVubG9nICgibnNjZCIsIExPR19DT05TIHwgTE9HX09ERUxBWSwgTE9HX0RBRU1PTik7CisgCistICAgICAgaWYgKHdyaXRlX3BpZCAoX1BBVEhfTlNDRFBJRCkgPCAwKQorLQlkYmdfbG9nICgiJXM6ICVzIiwgX1BBVEhfTlNDRFBJRCwgc3RyZXJyb3IgKGVycm5vKSk7CistCisgICAgICAgaWYgKCFpbml0X2xvZ2ZpbGUgKCkpCisgCWRiZ19sb2cgKF8oIkNvdWxkIG5vdCBjcmVhdGUgbG9nIGZpbGUiKSk7CisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy8zMTAtaHBwYS1ucHRsLWNhcmxvcy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzMxMC1ocHBhLW5wdGwtY2FybG9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMDI4YjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy8zMTAtaHBwYS1ucHRsLWNhcmxvcy5wYXRjaApAQCAtMCwwICsxLDI0NiBAQAorCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL2VsZi9ydGxkLmMgZ2xpYmMtMi4xMy9lbGYvcnRsZC5jCistLS0gZ2xpYmMtMi4xMy5vcmlnL2VsZi9ydGxkLmMJMjAwOS0wNC0xNyAwMjowMDowOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEzL2VsZi9ydGxkLmMJMjAwOS0xMS0xMyAwMDo1MDoyNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zOTIsMTQgKzM5MiwxNCBAQAorICAgICAga25vdyBpdCBpcyBhdmFpbGFibGUuICBXZSBkbyBub3QgaGF2ZSB0byBjbGVhciB0aGUgbWVtb3J5IGlmIHdlCisgICAgICBkbyBub3QgaGF2ZSB0byB1c2UgdGhlIHRlbXBvcmFyeSBib290c3RyYXBfbWFwLiAgR2xvYmFsIHZhcmlhYmxlcworICAgICAgYXJlIGluaXRpYWxpemVkIHRvIHplcm8gYnkgZGVmYXVsdC4gICovCistI2lmbmRlZiBET05UX1VTRV9CT09UU1RSQVBfTUFQCisrI2lmICFkZWZpbmVkIERPTlRfVVNFX0JPT1RTVFJBUF9NQVAKKyAjIGlmZGVmIEhBVkVfQlVJTFRJTl9NRU1TRVQKKyAgIF9fYnVpbHRpbl9tZW1zZXQgKGJvb3RzdHJhcF9tYXAubF9pbmZvLCAnXDAnLCBzaXplb2YgKGJvb3RzdHJhcF9tYXAubF9pbmZvKSk7CisgIyBlbHNlCistICBmb3IgKHNpemVfdCBjbnQgPSAwOworLSAgICAgICBjbnQgPCBzaXplb2YgKGJvb3RzdHJhcF9tYXAubF9pbmZvKSAvIHNpemVvZiAoYm9vdHN0cmFwX21hcC5sX2luZm9bMF0pOworLSAgICAgICArK2NudCkKKy0gICAgYm9vdHN0cmFwX21hcC5sX2luZm9bY250XSA9IDA7CisrICAvKiBDbGVhciB0aGUgd2hvbGUgYm9vdHN0cmFwX21hcCBzdHJ1Y3R1cmUgKi8KKysgIGZvciAoY2hhciAqY250ID0gKGNoYXIgKikmKGJvb3RzdHJhcF9tYXApOworKyAgICAgICBjbnQgPCAoKGNoYXIgKikmKGJvb3RzdHJhcF9tYXApICsgc2l6ZW9mIChib290c3RyYXBfbWFwKSk7CisrICAgICAgICpjbnQrKyA9ICdcMCcpOworICMgZW5kaWYKKyAjIGlmIFVTRV9fX1RIUkVBRAorICAgYm9vdHN0cmFwX21hcC5sX3Rsc19tb2RpZCA9IDA7CitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9pbmNsdWRlL2F0b21pYy5oIGdsaWJjLTIuMTMvaW5jbHVkZS9hdG9taWMuaAorLS0tIGdsaWJjLTIuMTMub3JpZy9pbmNsdWRlL2F0b21pYy5oCTIwMDktMDItMDkgMDA6NDk6NTMuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMy9pbmNsdWRlL2F0b21pYy5oCTIwMDktMTEtMTMgMDA6NTA6MjYuMDAwMDAwMDAwICswMTAwCitAQCAtMTg1LDcgKzE4NSw3IEBACisgICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX2F0ZzVfdmFsdWUgPSAobmV3dmFsdWUpOwkJCSAgICAgIFwKKyAJCQkJCQkJCQkgICAgICBcCisgICAgICBkbwkJCQkJCQkJCSAgICAgIFwKKy0gICAgICAgX19hdGc1X29sZHZhbCA9ICpfX2F0ZzVfbWVtcDsJCQkJCSAgICAgIFwKKysgICAgICAgX19hdGc1X29sZHZhbCA9ICoodm9sYXRpbGUgX190eXBlb2YgKG1lbSkpX19hdGc1X21lbXA7CQkgICAgICBcCisgICAgICB3aGlsZSAoX19idWlsdGluX2V4cGVjdAkJCQkJCSAgICAgIFwKKyAJICAgIChhdG9taWNfY29tcGFyZV9hbmRfZXhjaGFuZ2VfYm9vbF9hY3EgKF9fYXRnNV9tZW1wLCBfX2F0ZzVfdmFsdWUsIFwKKyAJCQkJCQkgICBfX2F0ZzVfb2xkdmFsKSwgMCkpOwkgICAgICBcCitAQCAtMjA2LDcgKzIwNiw3IEBACisgICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX2F0ZzZfdmFsdWUgPSAodmFsdWUpOwkJCQkgICAgICBcCisgCQkJCQkJCQkJICAgICAgXAorICAgICAgZG8JCQkJCQkJCQkgICAgICBcCistICAgICAgIF9fYXRnNl9vbGR2YWwgPSAqX19hdGc2X21lbXA7CQkJCQkgICAgICBcCisrICAgICAgIF9fYXRnNl9vbGR2YWwgPSAqKHZvbGF0aWxlIF9fdHlwZW9mIChtZW0pKV9fYXRnNl9tZW1wOwkJICAgICAgXAorICAgICAgd2hpbGUgKF9fYnVpbHRpbl9leHBlY3QJCQkJCQkgICAgICBcCisgCSAgICAoYXRvbWljX2NvbXBhcmVfYW5kX2V4Y2hhbmdlX2Jvb2xfYWNxIChfX2F0ZzZfbWVtcCwJCSAgICAgIFwKKyAJCQkJCQkgICBfX2F0ZzZfb2xkdmFsCSAgICAgIFwKK0BAIC0yMjQsNyArMjI0LDcgQEAKKyAgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fYXRnN192YWx1ZSA9ICh2YWx1ZSk7CQkJCSAgICAgIFwKKyAJCQkJCQkJCQkgICAgICBcCisgICAgICBkbwkJCQkJCQkJCSAgICAgIFwKKy0gICAgICAgX19hdGc3X29sZHYgPSAqX19hdGc3X21lbXA7CQkJCQkgICAgICBcCisrICAgICAgIF9fYXRnN19vbGR2ID0gKih2b2xhdGlsZSBfX3R5cGVvZiAobWVtKSlfX2F0ZzdfbWVtcDsJCSAgICAgIFwKKyAgICAgIHdoaWxlIChfX2J1aWx0aW5fZXhwZWN0CQkJCQkJICAgICAgXAorIAkgICAgKGNhdG9taWNfY29tcGFyZV9hbmRfZXhjaGFuZ2VfYm9vbF9hY3EgKF9fYXRnN19tZW1wLAkgICAgICBcCisgCQkJCQkJICAgIF9fYXRnN19vbGR2CQkgICAgICBcCitAQCAtMjQyLDcgKzI0Miw3IEBACisgICAgIF9fdHlwZW9mIChtZW0pIF9fYXRnOF9tZW1wID0gKG1lbSk7CQkJCQkgICAgICBcCisgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fYXRnOF92YWx1ZSA9ICh2YWx1ZSk7CQkJCSAgICAgIFwKKyAgICAgZG8gewkJCQkJCQkJICAgICAgXAorLSAgICAgIF9fYXRnOF9vbGR2YWwgPSAqX19hdGc4X21lbXA7CQkJCQkgICAgICBcCisrICAgICAgX19hdGc4X29sZHZhbCA9ICoodm9sYXRpbGUgX190eXBlb2YgKG1lbSkpX19hdGc4X21lbXA7CQkgICAgICBcCisgICAgICAgaWYgKF9fYXRnOF9vbGR2YWwgPj0gX19hdGc4X3ZhbHVlKQkJCQkgICAgICBcCisgCWJyZWFrOwkJCQkJCQkJICAgICAgXAorICAgICB9IHdoaWxlIChfX2J1aWx0aW5fZXhwZWN0CQkJCQkJICAgICAgXAorQEAgLTI1OSw3ICsyNTksNyBAQAorICAgICBfX3R5cGVvZiAobWVtKSBfX2F0ZzlfbWVtcCA9IChtZW0pOwkJCQkJICAgICAgXAorICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX2F0ZzlfdmFsdWUgPSAodmFsdWUpOwkJCQkgICAgICBcCisgICAgIGRvIHsJCQkJCQkJCSAgICAgIFwKKy0gICAgICBfX2F0Zzlfb2xkdiA9ICpfX2F0ZzlfbWVtcDsJCQkJCSAgICAgIFwKKysgICAgICBfX2F0Zzlfb2xkdiA9ICoodm9sYXRpbGUgX190eXBlb2YgKG1lbSkpX19hdGc5X21lbXA7CQkgICAgICBcCisgICAgICAgaWYgKF9fYXRnOV9vbGR2ID49IF9fYXRnOV92YWx1ZSkJCQkJCSAgICAgIFwKKyAJYnJlYWs7CQkJCQkJCQkgICAgICBcCisgICAgIH0gd2hpbGUgKF9fYnVpbHRpbl9leHBlY3QJCQkJCQkgICAgICBcCitAQCAtMjc3LDcgKzI3Nyw3IEBACisgICAgIF9fdHlwZW9mIChtZW0pIF9fYXRnMTBfbWVtcCA9IChtZW0pOwkJCQkgICAgICBcCisgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fYXRnMTBfdmFsdWUgPSAodmFsdWUpOwkJCQkgICAgICBcCisgICAgIGRvIHsJCQkJCQkJCSAgICAgIFwKKy0gICAgICBfX2F0ZzEwX29sZHZhbCA9ICpfX2F0ZzEwX21lbXA7CQkJCQkgICAgICBcCisrICAgICAgX19hdGcxMF9vbGR2YWwgPSAqKHZvbGF0aWxlIF9fdHlwZW9mIChtZW0pKV9fYXRnMTBfbWVtcDsJCSAgICAgIFwKKyAgICAgICBpZiAoX19hdGcxMF9vbGR2YWwgPD0gX19hdGcxMF92YWx1ZSkJCQkJICAgICAgXAorIAlicmVhazsJCQkJCQkJCSAgICAgIFwKKyAgICAgfSB3aGlsZSAoX19idWlsdGluX2V4cGVjdAkJCQkJCSAgICAgIFwKK0BAIC0zNjEsNyArMzYxLDcgQEAKKyAJCQkJCQkJCQkgICAgICBcCisgICAgICBkbwkJCQkJCQkJCSAgICAgIFwKKyAgICAgICAgewkJCQkJCQkJICAgICAgXAorLQkgX19hdGcxMV9vbGR2YWwgPSAqX19hdGcxMV9tZW1wOwkJCQkgICAgICBcCisrCSBfX2F0ZzExX29sZHZhbCA9ICoodm9sYXRpbGUgX190eXBlb2YgKG1lbSkpX19hdGcxMV9tZW1wOwkgICAgICBcCisgCSBpZiAoX19idWlsdGluX2V4cGVjdCAoX19hdGcxMV9vbGR2YWwgPD0gMCwgMCkpCQkJICAgICAgXAorIAkgICBicmVhazsJCQkJCQkJICAgICAgXAorICAgICAgICB9CQkJCQkJCQkgICAgICBcCitAQCAtNDAwLDcgKzQwMCw3IEBACisgICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX2F0ZzE0X21hc2sgPSAoKF9fdHlwZW9mICgqKG1lbSkpKSAxIDw8IChiaXQpKTsJICAgICAgXAorIAkJCQkJCQkJCSAgICAgIFwKKyAgICAgIGRvCQkJCQkJCQkJICAgICAgXAorLSAgICAgICBfX2F0ZzE0X29sZCA9ICgqX19hdGcxNF9tZW1wKTsJCQkJCSAgICAgIFwKKysgICAgICAgX19hdGcxNF9vbGQgPSAoKih2b2xhdGlsZSBfX3R5cGVvZiAobWVtKSlfX2F0ZzE0X21lbXApOwkJICAgICAgXAorICAgICAgd2hpbGUgKF9fYnVpbHRpbl9leHBlY3QJCQkJCQkgICAgICBcCisgCSAgICAoYXRvbWljX2NvbXBhcmVfYW5kX2V4Y2hhbmdlX2Jvb2xfYWNxIChfX2F0ZzE0X21lbXAsCSAgICAgIFwKKyAJCQkJCQkgICBfX2F0ZzE0X29sZCB8IF9fYXRnMTRfbWFzayxcCitAQCAtNDE4LDcgKzQxOCw3IEBACisgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fYXRnMTVfbWFzayA9IChtYXNrKTsJCQkJICAgICAgXAorIAkJCQkJCQkJCSAgICAgIFwKKyAgICAgZG8JCQkJCQkJCQkgICAgICBcCistICAgICAgX19hdGcxNV9vbGQgPSAoKl9fYXRnMTVfbWVtcCk7CQkJCQkgICAgICBcCisrICAgICAgX19hdGcxNV9vbGQgPSAoKih2b2xhdGlsZSBfX3R5cGVvZiAobWVtKSlfX2F0ZzE1X21lbXApOwkJICAgICAgXAorICAgICB3aGlsZSAoX19idWlsdGluX2V4cGVjdAkJCQkJCSAgICAgIFwKKyAJICAgKGF0b21pY19jb21wYXJlX2FuZF9leGNoYW5nZV9ib29sX2FjcSAoX19hdGcxNV9tZW1wLAkJICAgICAgXAorIAkJCQkJCSAgX19hdGcxNV9vbGQgJiBfX2F0ZzE1X21hc2ssIFwKK0BAIC00NTAsNyArNDUwLDcgQEAKKyAgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fYXRnMTZfbWFzayA9IChtYXNrKTsJCQkJICAgICAgXAorIAkJCQkJCQkJCSAgICAgIFwKKyAgICAgIGRvCQkJCQkJCQkJICAgICAgXAorLSAgICAgICBfX2F0ZzE2X29sZCA9ICgqX19hdGcxNl9tZW1wKTsJCQkJCSAgICAgIFwKKysgICAgICAgX19hdGcxNl9vbGQgPSAoKih2b2xhdGlsZSBfX3R5cGVvZiAobWVtKSlfX2F0ZzE2X21lbXApOwkJICAgICAgXAorICAgICAgd2hpbGUgKF9fYnVpbHRpbl9leHBlY3QJCQkJCQkgICAgICBcCisgCSAgICAoYXRvbWljX2NvbXBhcmVfYW5kX2V4Y2hhbmdlX2Jvb2xfYWNxIChfX2F0ZzE2X21lbXAsCSAgICAgIFwKKyAJCQkJCQkgICBfX2F0ZzE2X29sZCAmIF9fYXRnMTZfbWFzayxcCitAQCAtNDY4LDcgKzQ2OCw3IEBACisgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fYXRnMTdfbWFzayA9IChtYXNrKTsJCQkJICAgICAgXAorIAkJCQkJCQkJCSAgICAgIFwKKyAgICAgZG8JCQkJCQkJCQkgICAgICBcCistICAgICAgX19hdGcxN19vbGQgPSAoKl9fYXRnMTdfbWVtcCk7CQkJCQkgICAgICBcCisrICAgICAgX19hdGcxN19vbGQgPSAoKih2b2xhdGlsZSBfX3R5cGVvZiAobWVtKSlfX2F0ZzE3X21lbXApOwkJICAgICAgXAorICAgICB3aGlsZSAoX19idWlsdGluX2V4cGVjdAkJCQkJCSAgICAgIFwKKyAJICAgKGF0b21pY19jb21wYXJlX2FuZF9leGNoYW5nZV9ib29sX2FjcSAoX19hdGcxN19tZW1wLAkJICAgICAgXAorIAkJCQkJCSAgX19hdGcxN19vbGQgfCBfX2F0ZzE3X21hc2ssIFwKK0BAIC00ODQsNyArNDg0LDcgQEAKKyAgICAgX190eXBlb2YgKCoobWVtKSkgX19hdGcxOF9tYXNrID0gKG1hc2spOwkJCQkgICAgICBcCisgCQkJCQkJCQkJICAgICAgXAorICAgICBkbwkJCQkJCQkJCSAgICAgIFwKKy0gICAgICBfX2F0ZzE4X29sZCA9ICgqX19hdGcxOF9tZW1wKTsJCQkJCSAgICAgIFwKKysgICAgICBfX2F0ZzE4X29sZCA9ICgqKHZvbGF0aWxlIF9fdHlwZW9mIChtZW0pKV9fYXRnMThfbWVtcCk7CQkgICAgICBcCisgICAgIHdoaWxlIChfX2J1aWx0aW5fZXhwZWN0CQkJCQkJICAgICAgXAorIAkgICAoY2F0b21pY19jb21wYXJlX2FuZF9leGNoYW5nZV9ib29sX2FjcSAoX19hdGcxOF9tZW1wLAkgICAgICBcCisgCQkJCQkJICAgX19hdGcxOF9vbGQgfCBfX2F0ZzE4X21hc2ssXAorQEAgLTUwMCw3ICs1MDAsNyBAQAorICAgICAgX190eXBlb2YgKCoobWVtKSkgX19hdGcxOV9tYXNrID0gKG1hc2spOwkJCQkgICAgICBcCisgCQkJCQkJCQkJICAgICAgXAorICAgICAgZG8JCQkJCQkJCQkgICAgICBcCistICAgICAgIF9fYXRnMTlfb2xkID0gKCpfX2F0ZzE5X21lbXApOwkJCQkJICAgICAgXAorKyAgICAgICBfX2F0ZzE5X29sZCA9ICgqKHZvbGF0aWxlIF9fdHlwZW9mIChtZW0pKV9fYXRnMTlfbWVtcCk7CQkgICAgICBcCisgICAgICB3aGlsZSAoX19idWlsdGluX2V4cGVjdAkJCQkJCSAgICAgIFwKKyAJICAgIChhdG9taWNfY29tcGFyZV9hbmRfZXhjaGFuZ2VfYm9vbF9hY3EgKF9fYXRnMTlfbWVtcCwJICAgICAgXAorIAkJCQkJCSAgIF9fYXRnMTlfb2xkIHwgX19hdGcxOV9tYXNrLFwKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL25wdGwvTWFrZWZpbGUgZ2xpYmMtMi4xMy9ucHRsL01ha2VmaWxlCistLS0gZ2xpYmMtMi4xMy5vcmlnL25wdGwvTWFrZWZpbGUJMjAwOC0xMS0xMiAxNDozODoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEzL25wdGwvTWFrZWZpbGUJMjAwOS0xMS0xMyAwMDo1MDoyNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNjUsOSArMjY1LDkgQEAKKyAjIEZpbGVzIHdoaWNoIG11c3Qgbm90IGJlIGxpbmtlZCB3aXRoIGxpYnB0aHJlYWQuCisgdGVzdHMtbm9saWJwdGhyZWFkID0gdHN0LXVubG9hZAorIAorLSMgVGhpcyBzZXRzIHRoZSBzdGFjayByZXNvdXJjZSBsaW1pdCB0byAxMDIza2IsIHdoaWNoIGlzIG5vdCBhIG11bHRpcGxlCistIyBvZiB0aGUgcGFnZSBzaXplIHNpbmNlIGV2ZXJ5IGFyY2hpdGVjdHVyZSdzIHBhZ2Ugc2l6ZSBpcyA+IDFrLgorLXRzdC1vZGRzdGFja2xpbWl0LUVOViA9IDsgdWxpbWl0IC1zIDEwMjM7CisrIyBUaGlzIHNldHMgdGhlIHN0YWNrIHJlc291cmNlIGxpbWl0IHRvIDgxOTNrYiwgd2hpY2ggaXMgbm90IGEgbXVsdGlwbGUKKysjIG9mIHRoZSBwYWdlIHNpemUgc2luY2UgZXZlcnkgYXJjaGl0ZWN0dXJlJ3MgcGFnZSBzaXplIGlzIDQwOTYgYnl0ZXMuCisrdHN0LW9kZHN0YWNrbGltaXQtRU5WID0gOyB1bGltaXQgLXMgODE5MzsKKyAKKyBkaXN0cmlidXRlID0gZWludHIuYyB0c3QtY2xlYW51cDRhdXguYworIAorQEAgLTQyNiw2ICs0MjYsMzUgQEAKKyBDRkxBR1MtdHN0LWNsZWFudXB4NC5jICs9IC1mZXhjZXB0aW9ucworIENGTEFHUy10c3Qtb25jZXgzLmMgKz0gLWZleGNlcHRpb25zCisgQ0ZMQUdTLXRzdC1vbmNleDQuYyArPSAtZmV4Y2VwdGlvbnMKKysKKytsZGZsYWdzLWxpYmdjY19zID0gLS1hcy1uZWVkZWQgLWxnY2NfcyAtLW5vLWFzLW5lZWRlZAorK0xERkxBR1MtdHN0LWNhbmNlbHgyICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4MyArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2FuY2VseDQgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNhbmNlbHg1ICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4NiArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2FuY2VseDcgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNhbmNlbHg4ICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4OSArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2FuY2VseDEwICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4MTEgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNhbmNlbHgxMiArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2FuY2VseDEzICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4MTQgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNhbmNlbHgxNSArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2FuY2VseDE2ICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4MTcgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNhbmNlbHgxOCArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2FuY2VseDIwICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jYW5jZWx4MjEgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNsZWFudXB4MCArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2xlYW51cHgxICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1jbGVhbnVweDIgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LWNsZWFudXB4MyArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrTERGTEFHUy10c3QtY2xlYW51cHg0ICs9ICQobGRmbGFncy1saWJnY2NfcykKKytMREZMQUdTLXRzdC1vbmNleDMgKz0gJChsZGZsYWdzLWxpYmdjY19zKQorK0xERkxBR1MtdHN0LW9uY2V4NCArPSAkKGxkZmxhZ3MtbGliZ2NjX3MpCisrCisgQ0ZMQUdTLXRzdC1hbGlnbi5jICs9ICQoc3RhY2stYWxpZ24tdGVzdC1mbGFncykKKyBDRkxBR1MtdHN0LWFsaWduMy5jICs9ICQoc3RhY2stYWxpZ24tdGVzdC1mbGFncykKKyBDRkxBR1MtdHN0LWluaXRpYWxpemVyczEuYyA9IC1XIC1XYWxsIC1XZXJyb3IKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL25wdGwvcHRocmVhZF9iYXJyaWVyX3dhaXQuYyBnbGliYy0yLjEzL25wdGwvcHRocmVhZF9iYXJyaWVyX3dhaXQuYworLS0tIGdsaWJjLTIuMTMub3JpZy9ucHRsL3B0aHJlYWRfYmFycmllcl93YWl0LmMJMjAwNy0wOC0wMSAwNjoxODo1MC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEzL25wdGwvcHRocmVhZF9iYXJyaWVyX3dhaXQuYwkyMDA5LTExLTEzIDAwOjUwOjI2LjAwMDAwMDAwMCArMDEwMAorQEAgLTY0LDcgKzY0LDcgQEAKKyAgICAgICBkbworIAlsbGxfZnV0ZXhfd2FpdCAoJmliYXJyaWVyLT5jdXJyX2V2ZW50LCBldmVudCwKKyAJCQlpYmFycmllci0+cHJpdmF0ZSBeIEZVVEVYX1BSSVZBVEVfRkxBRyk7CistICAgICAgd2hpbGUgKGV2ZW50ID09IGliYXJyaWVyLT5jdXJyX2V2ZW50KTsKKysgICAgICB3aGlsZSAoZXZlbnQgPT0gKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikmaWJhcnJpZXItPmN1cnJfZXZlbnQpOworICAgICB9CisgCisgICAvKiBNYWtlIHN1cmUgdGhlIGluaXRfY291bnQgaXMgc3RvcmVkIGxvY2FsbHkgb3IgaW4gYSByZWdpc3Rlci4gICovCitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9ucHRsL3N5c2RlcHMvcHRocmVhZC9NYWtlZmlsZSBnbGliYy0yLjEzL25wdGwvc3lzZGVwcy9wdGhyZWFkL01ha2VmaWxlCistLS0gZ2xpYmMtMi4xMy5vcmlnL25wdGwvc3lzZGVwcy9wdGhyZWFkL01ha2VmaWxlCTIwMDYtMDItMjggMDg6MDk6NDEuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMy9ucHRsL3N5c2RlcHMvcHRocmVhZC9NYWtlZmlsZQkyMDA5LTExLTEzIDAwOjUwOjI2LjAwMDAwMDAwMCArMDEwMAorQEAgLTMzLDcgKzMzLDkgQEAKKyAKKyBpZmVxICgkKGhhdmUtZm9yY2VkLXVud2luZCkseWVzKQorIHRlc3RzICs9IHRzdC1tcXVldWU4eAorK2xkZmxhZ3MtbGliZ2NjX3MgPSAtLWFzLW5lZWRlZCAtbGdjY19zIC0tbm8tYXMtbmVlZGVkCisgQ0ZMQUdTLXRzdC1tcXVldWU4eC5jICs9IC1mZXhjZXB0aW9ucworK0xERkxBR1MtdHN0LW1xdWV1ZTh4ICs9ICQobGRmbGFncy1saWJnY2NfcykgCisgZW5kaWYKKyBlbmRpZgorIAorZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvc3RkaW8tY29tbW9uL01ha2VmaWxlIGdsaWJjLTIuMTMvc3RkaW8tY29tbW9uL01ha2VmaWxlCistLS0gZ2xpYmMtMi4xMy5vcmlnL3N0ZGlvLWNvbW1vbi9NYWtlZmlsZQkyMDA5LTA0LTExIDA3OjI5OjU2LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTMvc3RkaW8tY29tbW9uL01ha2VmaWxlCTIwMDktMTEtMTMgMDA6NTA6MjYuMDAwMDAwMDAwICswMTAwCitAQCAtODIsNyArODIsNyBAQAorIAkkKFNIRUxMKSAtZSB0c3QtcHJpbnRmLnNoICQoY29tbW9uLW9ianBmeCkgJyQocnVuLXByb2dyYW0tcHJlZml4KScKKyBlbmRpZgorIAorLUNGTEFHUy12ZnByaW50Zi5jID0gLVduby11bmluaXRpYWxpemVkCisrQ0ZMQUdTLXZmcHJpbnRmLmMgPSAtV25vLXVuaW5pdGlhbGl6ZWQgLWZuby1kZWxheWVkLWJyYW5jaAorIENGTEFHUy12ZndwcmludGYuYyA9IC1Xbm8tdW5pbml0aWFsaXplZAorIENGTEFHUy10c3QtcHJpbnRmLmMgPSAtV25vLWZvcm1hdAorIENGTEFHUy10c3RkaW9taXNjLmMgPSAtV25vLWZvcm1hdAorZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvc3VucnBjL2NsbnRfdWRwLmMgZ2xpYmMtMi4xMy9zdW5ycGMvY2xudF91ZHAuYworLS0tIGdsaWJjLTIuMTMub3JpZy9zdW5ycGMvY2xudF91ZHAuYwkyMDA4LTA3LTI2IDEwOjQyOjQ0LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTMvc3VucnBjL2NsbnRfdWRwLmMJMjAwOS0xMS0xMyAwMDo1MDoyNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC00NTYsNyArNDU2LDcgQEAKKyAgICAgICB3aGlsZSAoaW5sZW4gPCAwICYmIGVycm5vID09IEVJTlRSKTsKKyAgICAgICBpZiAoaW5sZW4gPCAwKQorIAl7CistCSAgaWYgKGVycm5vID09IEVXT1VMREJMT0NLKQorKwkgIGlmIChlcnJubyA9PSBFV09VTERCTE9DSyB8fCBlcnJubyA9PSBFQUdBSU4pCisgCSAgICBjb250aW51ZTsKKyAJICBjdS0+Y3VfZXJyb3IucmVfZXJybm8gPSBlcnJubzsKKyAJICByZXR1cm4gKGN1LT5jdV9lcnJvci5yZV9zdGF0dXMgPSBSUENfQ0FOVFJFQ1YpOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvMzMwLW02OGstc3lzLXVzZXIucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy8zMzAtbTY4ay1zeXMtdXNlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTFlMGM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvMzMwLW02OGstc3lzLXVzZXIucGF0Y2gKQEAgLTAsMCArMSw5NyBAQAorY29waWVkIGZyb20ga2VybmVsIGFzIGl0IGlzIHNhbml0aXplZCBub3cKKworZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9tNjhrL3N5cy91c2VyLmggZ2xpYmMtMi4xMy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L202OGsvc3lzL3VzZXIuaAorLS0tIGdsaWJjLTIuMTMub3JpZy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L202OGsvc3lzL3VzZXIuaAkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTMvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9tNjhrL3N5cy91c2VyLmgJMjAwOS0xMS0xMyAwMDo1MDozMS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xLDMgKzEsOTAgQEAKKysjaWZuZGVmIF9TWVNfVVNFUl9ICisrI2RlZmluZSBfU1lTX1VTRVJfSAorKworKy8qIENvcmUgZmlsZSBmb3JtYXQ6IFRoZSBjb3JlIGZpbGUgaXMgd3JpdHRlbiBpbiBzdWNoIGEgd2F5IHRoYXQgZ2RiCisrICAgY2FuIHVuZGVyc3RhbmQgaXQgYW5kIHByb3ZpZGUgdXNlZnVsIGluZm9ybWF0aW9uIHRvIHRoZSB1c2VyICh1bmRlcgorKyAgIGxpbnV4IHdlIHVzZSB0aGUgJ3RyYWQtY29yZScgYmZkKS4gIFRoZXJlIGFyZSBxdWl0ZSBhIG51bWJlciBvZgorKyAgIG9ic3RhY2xlcyB0byBiZWluZyBhYmxlIHRvIHZpZXcgdGhlIGNvbnRlbnRzIG9mIHRoZSBmbG9hdGluZyBwb2ludAorKyAgIHJlZ2lzdGVycywgYW5kIHVudGlsIHRoZXNlIGFyZSBzb2x2ZWQgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gdmlldyB0aGUKKysgICBjb250ZW50cyBvZiB0aGVtLiAgQWN0dWFsbHksIHlvdSBjYW4gcmVhZCBpbiB0aGUgY29yZSBmaWxlIGFuZCBsb29rIGF0CisrICAgdGhlIGNvbnRlbnRzIG9mIHRoZSB1c2VyIHN0cnVjdCB0byBmaW5kIG91dCB3aGF0IHRoZSBmbG9hdGluZyBwb2ludAorKyAgIHJlZ2lzdGVycyBjb250YWluLgorKyAgIFRoZSBhY3R1YWwgZmlsZSBjb250ZW50cyBhcmUgYXMgZm9sbG93czoKKysgICBVUEFHRTogMSBwYWdlIGNvbnNpc3Rpbmcgb2YgYSB1c2VyIHN0cnVjdCB0aGF0IHRlbGxzIGdkYiB3aGF0IGlzIHByZXNlbnQKKysgICBpbiB0aGUgZmlsZS4gIERpcmVjdGx5IGFmdGVyIHRoaXMgaXMgYSBjb3B5IG9mIHRoZSB0YXNrX3N0cnVjdCwgd2hpY2gKKysgICBpcyBjdXJyZW50bHkgbm90IHVzZWQgYnkgZ2RiLCBidXQgaXQgbWF5IGNvbWUgaW4gdXNlZnVsIGF0IHNvbWUgcG9pbnQuCisrICAgQWxsIG9mIHRoZSByZWdpc3RlcnMgYXJlIHN0b3JlZCBhcyBwYXJ0IG9mIHRoZSB1cGFnZS4gIFRoZSB1cGFnZSBzaG91bGQKKysgICBhbHdheXMgYmUgb25seSBvbmUgcGFnZS4KKysgICBEQVRBOiBUaGUgZGF0YSBhcmVhIGlzIHN0b3JlZC4gIFdlIHVzZSBjdXJyZW50LT5lbmRfdGV4dCB0bworKyAgIGN1cnJlbnQtPmJyayB0byBwaWNrIHVwIGFsbCBvZiB0aGUgdXNlciB2YXJpYWJsZXMsIHBsdXMgYW55IG1lbW9yeQorKyAgIHRoYXQgbWF5IGhhdmUgYmVlbiBtYWxsb2NlZC4gIE5vIGF0dGVtcHQgaXMgbWFkZSB0byBkZXRlcm1pbmUgaWYgYSBwYWdlCisrICAgaXMgZGVtYW5kLXplcm8gb3IgaWYgYSBwYWdlIGlzIHRvdGFsbHkgdW51c2VkLCB3ZSBqdXN0IGNvdmVyIHRoZSBlbnRpcmUKKysgICByYW5nZS4gIEFsbCBvZiB0aGUgYWRkcmVzc2VzIGFyZSByb3VuZGVkIGluIHN1Y2ggYSB3YXkgdGhhdCBhbiBpbnRlZ3JhbAorKyAgIG51bWJlciBvZiBwYWdlcyBpcyB3cml0dGVuLgorKyAgIFNUQUNLOiBXZSBuZWVkIHRoZSBzdGFjayBpbmZvcm1hdGlvbiBpbiBvcmRlciB0byBnZXQgYSBtZWFuaW5nZnVsCisrICAgYmFja3RyYWNlLiAgV2UgbmVlZCB0byB3cml0ZSB0aGUgZGF0YSBmcm9tIChlc3ApIHRvCisrICAgY3VycmVudC0+c3RhcnRfc3RhY2ssIHNvIHdlIHJvdW5kIGVhY2ggb2YgdGhlc2Ugb2ZmIGluIG9yZGVyIHRvIGJlIGFibGUKKysgICB0byB3cml0ZSBhbiBpbnRlZ2VyIG51bWJlciBvZiBwYWdlcy4KKysgICBUaGUgbWluaW11bSBjb3JlIGZpbGUgc2l6ZSBpcyAzIHBhZ2VzLCBvciAxMjI4OCBieXRlcy4KKysqLworKworK3N0cnVjdCB1c2VyX202OGtmcF9zdHJ1Y3QgeworKwl1bnNpZ25lZCBsb25nICBmcHJlZ3NbOCozXTsJLyogZnAwLWZwNyByZWdpc3RlcnMgKi8KKysJdW5zaWduZWQgbG9uZyAgZnBjbnRsWzNdOwkvKiBmcCBjb250cm9sIHJlZ3MgKi8KKyt9OworKworKy8qIFRoaXMgaXMgdGhlIG9sZCBsYXlvdXQgb2YgInN0cnVjdCBwdF9yZWdzIiBhcyBvZiBMaW51eCAxLngsIGFuZAorKyAgIGlzIHN0aWxsIHRoZSBsYXlvdXQgdXNlZCBieSB1c2VyICh0aGUgbmV3IHB0X3JlZ3MgZG9lc24ndCBoYXZlCisrICAgYWxsIHJlZ2lzdGVycykuICovCisrc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QgeworKwlsb25nIGQxLGQyLGQzLGQ0LGQ1LGQ2LGQ3OworKwlsb25nIGEwLGExLGEyLGEzLGE0LGE1LGE2OworKwlsb25nIGQwOworKwlsb25nIHVzcDsKKysJbG9uZyBvcmlnX2QwOworKwlzaG9ydCBzdGthZGo7CisrCXNob3J0IHNyOworKwlsb25nIHBjOworKwlzaG9ydCBmbXR2ZWM7CisrCXNob3J0IF9fZmlsbDsKKyt9OworKworKworKy8qIFdoZW4gdGhlIGtlcm5lbCBkdW1wcyBjb3JlLCBpdCBzdGFydHMgYnkgZHVtcGluZyB0aGUgdXNlciBzdHJ1Y3QgLQorKyAgIHRoaXMgd2lsbCBiZSB1c2VkIGJ5IGdkYiB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBkYXRhIGFuZCBzdGFjayBzZWdtZW50cworKyAgIGFyZSB3aXRoaW4gdGhlIGZpbGUsIGFuZCB3aGF0IHZpcnR1YWwgYWRkcmVzc2VzIHRvIHVzZS4gKi8KKytzdHJ1Y3QgdXNlcnsKKysvKiBXZSBzdGFydCB3aXRoIHRoZSByZWdpc3RlcnMsIHRvIG1pbWljIHRoZSB3YXkgdGhhdCAibWVtb3J5IiBpcyByZXR1cm5lZAorKyAgIGZyb20gdGhlIHB0cmFjZSgzLC4uLikgZnVuY3Rpb24uICAqLworKyAgc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QgcmVnczsJLyogV2hlcmUgdGhlIHJlZ2lzdGVycyBhcmUgYWN0dWFsbHkgc3RvcmVkICovCisrLyogcHRyYWNlIGRvZXMgbm90IHlldCBzdXBwbHkgdGhlc2UuICBTb21lZGF5Li4uLiAqLworKyAgaW50IHVfZnB2YWxpZDsJCS8qIFRydWUgaWYgbWF0aCBjby1wcm9jZXNzb3IgYmVpbmcgdXNlZC4gKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciB0aGlzIG1lc3MuIE5vdCB5ZXQgdXNlZC4gKi8KKysgIHN0cnVjdCB1c2VyX202OGtmcF9zdHJ1Y3QgbTY4a2ZwOyAvKiBNYXRoIENvLXByb2Nlc3NvciByZWdpc3RlcnMuICovCisrLyogVGhlIHJlc3Qgb2YgdGhpcyBqdW5rIGlzIHRvIGhlbHAgZ2RiIGZpZ3VyZSBvdXQgd2hhdCBnb2VzIHdoZXJlICovCisrICB1bnNpZ25lZCBsb25nIGludCB1X3RzaXplOwkvKiBUZXh0IHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLworKyAgdW5zaWduZWQgbG9uZyBpbnQgdV9kc2l6ZTsJLyogRGF0YSBzZWdtZW50IHNpemUgKHBhZ2VzKS4gKi8KKysgIHVuc2lnbmVkIGxvbmcgaW50IHVfc3NpemU7CS8qIFN0YWNrIHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLworKyAgdW5zaWduZWQgbG9uZyBzdGFydF9jb2RlOyAgICAgLyogU3RhcnRpbmcgdmlydHVhbCBhZGRyZXNzIG9mIHRleHQuICovCisrICB1bnNpZ25lZCBsb25nIHN0YXJ0X3N0YWNrOwkvKiBTdGFydGluZyB2aXJ0dWFsIGFkZHJlc3Mgb2Ygc3RhY2sgYXJlYS4KKysJCQkJICAgVGhpcyBpcyBhY3R1YWxseSB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKKysJCQkJICAgdGhlIHRvcCBvZiB0aGUgc3RhY2sgaXMgYWx3YXlzIGZvdW5kIGluIHRoZQorKwkJCQkgICBlc3AgcmVnaXN0ZXIuICAqLworKyAgbG9uZyBpbnQgc2lnbmFsOwkJLyogU2lnbmFsIHRoYXQgY2F1c2VkIHRoZSBjb3JlIGR1bXAuICovCisrICBpbnQgcmVzZXJ2ZWQ7CQkJLyogTm8gbG9uZ2VyIHVzZWQgKi8KKysgIHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0ICp1X2FyMDsKKysJCQkJLyogVXNlZCBieSBnZGIgdG8gaGVscCBmaW5kIHRoZSB2YWx1ZXMgZm9yICovCisrCQkJCS8qIHRoZSByZWdpc3RlcnMuICovCisrICBzdHJ1Y3QgdXNlcl9tNjhrZnBfc3RydWN0KiB1X2Zwc3RhdGU7CS8qIE1hdGggQ28tcHJvY2Vzc29yIHBvaW50ZXIuICovCisrICB1bnNpZ25lZCBsb25nIG1hZ2ljOwkJLyogVG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBjb3JlIGZpbGUgKi8KKysgIGNoYXIgdV9jb21tWzMyXTsJCS8qIFVzZXIgY29tbWFuZCB0aGF0IHdhcyByZXNwb25zaWJsZSAqLworK307CisrI2RlZmluZSBOQlBHIDQwOTYKKysjZGVmaW5lIFVQQUdFUyAxCisrI2RlZmluZSBIT1NUX1RFWFRfU1RBUlRfQUREUiAodS5zdGFydF9jb2RlKQorKyNkZWZpbmUgSE9TVF9TVEFDS19FTkRfQUREUiAodS5zdGFydF9zdGFjayArIHUudV9zc2l6ZSAqIE5CUEcpCisrCisrI2VuZGlmCisgLyogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorIAorZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbTY4ay9zeXMvdXNlci5oIGdsaWJjLTIuMTMvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbTY4ay9zeXMvdXNlci5oCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy8zNDAtZGxfZXhlY3N0YWNrLVBhWC1zdXBwb3J0LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvMzQwLWRsX2V4ZWNzdGFjay1QYVgtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDAyYWYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvMzQwLWRsX2V4ZWNzdGFjay1QYVgtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDY2IEBACisJV2l0aCBsYXRlc3QgdmVyc2lvbnMgb2YgZ2xpYmMsIGEgbG90IG9mIGFwcHMgZmFpbGVkIG9uIGEgUGFYIGVuYWJsZWQKKwlzeXN0ZW0gd2l0aDoKKwkJIGNhbm5vdCBlbmFibGUgZXhlY3V0YWJsZSBzdGFjayBhcyBzaGFyZWQgb2JqZWN0IHJlcXVpcmVzOiBQZXJtaXNzaW9uIGRlbmllZAorCQorCVRoaXMgaXMgZHVlIHRvIFBhWCAnZXhlYy1wcm90ZWN0aW5nJyB0aGUgc3RhY2ssIGFuZCBsZC5zbyB0aGVuIHRyeWluZworCXRvIG1ha2UgdGhlIHN0YWNrIGV4ZWN1dGFibGUgZHVlIHRvIHNvbWUgbGlicmFyaWVzIG5vdCBjb250YWluaW5nIHRoZQorCVBUX0dOVV9TVEFDSyBzZWN0aW9uLiAgQnVnICMzMjk2MC4gIDxhemFyYWhAZ2VudG9vLm9yZz4gKDEyIE5vdiAyMDAzKS4KKworCVBhdGNoIGFsc28gTlBUTC4gQnVnICMxMTYwODYuIDxrZXZxdWlubkBnZW50b28ub3JnPiAoMjAgRGVjIDIwMDUpLgorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9ucHRsL2FsbG9jYXRlc3RhY2suYyBnbGliYy0yLjEzL25wdGwvYWxsb2NhdGVzdGFjay5jCistLS0gZ2xpYmMtMi4xMy5vcmlnL25wdGwvYWxsb2NhdGVzdGFjay5jCTIwMDktMDEtMjkgMjE6MzQ6MTYuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMy9ucHRsL2FsbG9jYXRlc3RhY2suYwkyMDA5LTExLTEzIDAwOjUwOjMzLjAwMDAwMDAwMCArMDEwMAorQEAgLTMyOSw3ICszMjksOCBAQAorICMgZXJyb3IgIkRlZmluZSBlaXRoZXIgX1NUQUNLX0dST1dTX0RPV04gb3IgX1NUQUNLX0dST1dTX1VQIgorICNlbmRpZgorICAgaWYgKG1wcm90ZWN0IChzdGFjaywgbGVuLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIHwgUFJPVF9FWEVDKSAhPSAwKQorLSAgICByZXR1cm4gZXJybm87CisrICAgIGlmIChlcnJubyAhPSBFQUNDRVMpIC8qIFBBWCBpcyBlbmFibGVkICovCisrICAgIAlyZXR1cm4gZXJybm87CisgCisgICByZXR1cm4gMDsKKyB9CitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9kbC1leGVjc3RhY2suYyBnbGliYy0yLjEzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2RsLWV4ZWNzdGFjay5jCistLS0gZ2xpYmMtMi4xMy5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2RsLWV4ZWNzdGFjay5jCTIwMDYtMDEtMDggMDk6MjE6MTUuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9kbC1leGVjc3RhY2suYwkyMDA5LTExLTEzIDAwOjUwOjMzLjAwMDAwMDAwMCArMDEwMAorQEAgLTYzLDcgKzYzLDEwIEBACisgICAgICAgZWxzZQorICMgZW5kaWYKKyAJeworLQkgIHJlc3VsdCA9IGVycm5vOworKwkgIGlmIChlcnJubyA9PSBFQUNDRVMpICAvKiBQQVggaXMgZW5hYmxlZCAqLworKwkgICAgcmVzdWx0ID0gMDsKKysJICBlbHNlCisrCSAgICByZXN1bHQgPSBlcnJubzsKKyAJICBnb3RvIG91dDsKKyAJfQorICAgICB9CitAQCAtODksNyArOTIsMTIgQEAKKyAJcGFnZSAtPSBzaXplOworICAgICAgIGVsc2UKKyAJeworLQkgIGlmIChlcnJubyAhPSBFTk9NRU0pCS8qIFVuZXhwZWN0ZWQgZmFpbHVyZSBtb2RlLiAgKi8KKysJICBpZiAoZXJybm8gPT0gRUFDQ0VTKQkJLyogUEFYIGlzIGVuYWJsZWQgKi8KKysJICAgIHsKKysJICAgICAgcmVzdWx0ID0gMDsKKysJICAgICAgZ290byBvdXQ7CisrCSAgICB9CisrCSAgZWxzZSBpZiAoZXJybm8gIT0gRU5PTUVNKQkvKiBVbmV4cGVjdGVkIGZhaWx1cmUgbW9kZS4gICovCisgCSAgICB7CisgCSAgICAgIHJlc3VsdCA9IGVycm5vOworIAkgICAgICBnb3RvIG91dDsKK0BAIC0xMTUsNyArMTIzLDEyIEBACisgCXBhZ2UgKz0gc2l6ZTsKKyAgICAgICBlbHNlCisgCXsKKy0JICBpZiAoZXJybm8gIT0gRU5PTUVNKQkvKiBVbmV4cGVjdGVkIGZhaWx1cmUgbW9kZS4gICovCisrCSAgaWYgKGVycm5vID09IEVBQ0NFUykJCS8qIFBBWCBpcyBlbmFibGVkICovCisrCSAgICB7CisrCSAgICAgIHJlc3VsdCA9IDA7CisrCSAgICAgIGdvdG8gb3V0OworKwkgICAgfQorKwkgIGVsc2UgaWYgKGVycm5vICE9IEVOT01FTSkJLyogVW5leHBlY3RlZCBmYWlsdXJlIG1vZGUuICAqLworIAkgICAgeworIAkgICAgICByZXN1bHQgPSBlcnJubzsKKyAJICAgICAgZ290byBvdXQ7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy8zNTAtcHJlMjAwNDAxMTctcHRfcGF4LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvMzUwLXByZTIwMDQwMTE3LXB0X3BheC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGY2YjgzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvMzUwLXByZTIwMDQwMTE3LXB0X3BheC5wYXRjaApAQCAtMCwwICsxLDMyIEBACisKKworZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvZWxmL2VsZi5oIGdsaWJjLTIuMTMvZWxmL2VsZi5oCistLS0gZ2xpYmMtMi4xMy5vcmlnL2VsZi9lbGYuaAkyMDA5LTA0LTE1IDAyOjE1OjU0LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTMvZWxmL2VsZi5oCTIwMDktMTEtMTMgMDA6NTA6MzUuMDAwMDAwMDAwICswMTAwCitAQCAtNTgwLDYgKzU4MCw3IEBACisgI2RlZmluZSBQVF9HTlVfRUhfRlJBTUUJMHg2NDc0ZTU1MAkvKiBHQ0MgLmVoX2ZyYW1lX2hkciBzZWdtZW50ICovCisgI2RlZmluZSBQVF9HTlVfU1RBQ0sJMHg2NDc0ZTU1MQkvKiBJbmRpY2F0ZXMgc3RhY2sgZXhlY3V0YWJpbGl0eSAqLworICNkZWZpbmUgUFRfR05VX1JFTFJPCTB4NjQ3NGU1NTIJLyogUmVhZC1vbmx5IGFmdGVyIHJlbG9jYXRpb24gKi8KKysjZGVmaW5lIFBUX1BBWF9GTEFHUwkweDY1MDQxNTgwCS8qIEluZGljYXRlcyBQYVggZmxhZyBtYXJraW5ncyAqLworICNkZWZpbmUgUFRfTE9TVU5XCTB4NmZmZmZmZmEKKyAjZGVmaW5lIFBUX1NVTldCU1MJMHg2ZmZmZmZmYQkvKiBTdW4gU3BlY2lmaWMgc2VnbWVudCAqLworICNkZWZpbmUgUFRfU1VOV1NUQUNLCTB4NmZmZmZmZmIJLyogU3RhY2sgc2VnbWVudCAqLworQEAgLTU5Myw2ICs1OTQsMTggQEAKKyAjZGVmaW5lIFBGX1gJCSgxIDw8IDApCS8qIFNlZ21lbnQgaXMgZXhlY3V0YWJsZSAqLworICNkZWZpbmUgUEZfVwkJKDEgPDwgMSkJLyogU2VnbWVudCBpcyB3cml0YWJsZSAqLworICNkZWZpbmUgUEZfUgkJKDEgPDwgMikJLyogU2VnbWVudCBpcyByZWFkYWJsZSAqLworKyNkZWZpbmUgUEZfUEFHRUVYRUMJKDEgPDwgNCkJLyogRW5hYmxlICBQQUdFRVhFQyAqLworKyNkZWZpbmUgUEZfTk9QQUdFRVhFQwkoMSA8PCA1KQkvKiBEaXNhYmxlIFBBR0VFWEVDICovCisrI2RlZmluZSBQRl9TRUdNRVhFQwkoMSA8PCA2KQkvKiBFbmFibGUgIFNFR01FWEVDICovCisrI2RlZmluZSBQRl9OT1NFR01FWEVDCSgxIDw8IDcpCS8qIERpc2FibGUgU0VHTUVYRUMgKi8KKysjZGVmaW5lIFBGX01QUk9URUNUCSgxIDw8IDgpCS8qIEVuYWJsZSAgTVBST1RFQ1QgKi8KKysjZGVmaW5lIFBGX05PTVBST1RFQ1QJKDEgPDwgOSkJLyogRGlzYWJsZSBNUFJPVEVDVCAqLworKyNkZWZpbmUgUEZfUkFOREVYRUMJKDEgPDwgMTApCS8qIEVuYWJsZSAgUkFOREVYRUMgKi8KKysjZGVmaW5lIFBGX05PUkFOREVYRUMJKDEgPDwgMTEpCS8qIERpc2FibGUgUkFOREVYRUMgKi8KKysjZGVmaW5lIFBGX0VNVVRSQU1QCSgxIDw8IDEyKQkvKiBFbmFibGUgIEVNVVRSQU1QICovCisrI2RlZmluZSBQRl9OT0VNVVRSQU1QCSgxIDw8IDEzKQkvKiBEaXNhYmxlIEVNVVRSQU1QICovCisrI2RlZmluZSBQRl9SQU5ETU1BUAkoMSA8PCAxNCkJLyogRW5hYmxlICBSQU5ETU1BUCAqLworKyNkZWZpbmUgUEZfTk9SQU5ETU1BUAkoMSA8PCAxNSkJLyogRGlzYWJsZSBSQU5ETU1BUCAqLworICNkZWZpbmUgUEZfTUFTS09TCTB4MGZmMDAwMDAJLyogT1Mtc3BlY2lmaWMgKi8KKyAjZGVmaW5lIFBGX01BU0tQUk9DCTB4ZjAwMDAwMDAJLyogUHJvY2Vzc29yLXNwZWNpZmljICovCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy8zNjAtdGVzdHMtc2FuZGJveC1saWJkbC1wYXRocy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzM2MC10ZXN0cy1zYW5kYm94LWxpYmRsLXBhdGhzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNzhjNTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy8zNjAtdGVzdHMtc2FuZGJveC1saWJkbC1wYXRocy5wYXRjaApAQCAtMCwwICsxLDE5MyBAQAord2hlbiBnbGliYyBydW5zIGl0cyB0ZXN0cywgaXQgZG9lcyBzbyBieSBpbnZva2luZyB0aGUgbG9jYWwgbGlicmFyeSBsb2FkZXIuCitpbiBHZW50b28sIHdlIGJ1aWxkL3J1biBpbnNpZGUgb2Ygb3VyICJzYW5kYm94IiB3aGljaCBpdHNlbGYgaXMgbGlua2VkIGFnYWluc3QKK2xpYmRsIChzbyB0aGF0IGl0IGNhbiBsb2FkIGxpYnJhcmllcyBhbmQgcHVsbCBvdXQgc3ltYm9scykuICB0aGUgdHJvdWJsZQoraXMgdGhhdCB3aGVuIHlvdSB1cGdyYWRlIGZyb20gYW4gb2xkZXIgZ2xpYmMgdG8gdGhlIG5ldyBvbmUsIG9mdGVuIHRpbWVzCitpbnRlcm5hbCBzeW1ib2xzIGNoYW5nZSBuYW1lIG9yIGFiaS4gIHRoaXMgaXMgbm9ybWFsbHkgT0sgYXMgeW91IGNhbm5vdCB1c2UKK2xpYmMuc28gZnJvbSBzYXkgdmVyc2lvbiAyLjMuNiBidXQgbGlicHRocmVhZC5zbyBmcm9tIHNheSB2ZXJzaW9uIDIuNSwgc28KK3dlIGFsd2F5cyBzYXkgImtlZXAgYWxsIG9mIHRoZSBnbGliYyBsaWJyYXJpZXMgZnJvbSB0aGUgc2FtZSBidWlsZCIuICBidXQKK3doZW4gZ2xpYmMgcnVucyBpdHMgdGVzdHMsIGl0IHVzZXMgZHluYW1pYyBwYXRocyB0byBwb2ludCB0byBpdHMgbmV3IGxvY2FsCitjb3BpZXMgb2YgbGlicmFyaWVzLiAgaWYgdGhlIHRlc3QgZG9lc250IHVzZSBsaWJkbCwgdGhlbiBnbGliYyBkb2VzbnQgYWRkCitpdHMgcGF0aCwgYW5kIHdoZW4gc2FuZGJveCB0cmlnZ2VycyB0aGUgbG9hZGluZyBvZiBsaWJkbCwgZ2xpYmMgZG9lcyBzbworZnJvbSB0aGUgaG9zdCBzeXN0ZW0gc3lzdGVtLiAgdGhpcyBnZXRzIHVzIGludG8gdGhlIGNhc2Ugb2YgYWxsIGxpYnJhcmllcworYXJlIGZyb20gdGhlIGxvY2FsbHkgY29tcGlsZWQgdmVyc2lvbiBvZiBnbGliYyBleGNlcHQgZm9yIGxpYmRsLnNvLgorCitGaXggYnkgV29ybW8KKworaHR0cDovL2J1Z3MuZ2VudG9vLm9yZy81Njg5OAorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9ncnAvdHN0X2ZnZXRncmVudC5zaCBnbGliYy0yLjEzL2dycC90c3RfZmdldGdyZW50LnNoCistLS0gZ2xpYmMtMi4xMy5vcmlnL2dycC90c3RfZmdldGdyZW50LnNoCTIwMDEtMDctMDYgMDY6NTQ6NDYuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMy9ncnAvdHN0X2ZnZXRncmVudC5zaAkyMDA5LTExLTEzIDAwOjUwOjM3LjAwMDAwMDAwMCArMDEwMAorQEAgLTI0LDcgKzI0LDggQEAKKyBydGxkX2luc3RhbGxlZF9uYW1lPSQxOyBzaGlmdAorIAorIHRlc3RvdXQ9JHtjb21tb25fb2JqcGZ4fS9ncnAvdHN0X2ZnZXRncmVudC5vdXQKKy1saWJyYXJ5X3BhdGg9JHtjb21tb25fb2JqcGZ4fQorKyMgbWFrZSBzdXJlIGxpYmRsIGlzIGFsc28gaW4gcGF0aCBpbiBjYXNlIHNhbmRib3ggaXMgaW4gdXNlCisrbGlicmFyeV9wYXRoPSR7Y29tbW9uX29ianBmeH06JHtjb21tb25fb2JqcGZ4fS9kbGZjbgorIAorIHJlc3VsdD0wCisgCitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9pY29udmRhdGEvcnVuLWljb252LXRlc3Quc2ggZ2xpYmMtMi4xMy9pY29udmRhdGEvcnVuLWljb252LXRlc3Quc2gKKy0tLSBnbGliYy0yLjEzLm9yaWcvaWNvbnZkYXRhL3J1bi1pY29udi10ZXN0LnNoCTIwMDgtMDUtMTUgMDM6NTk6NDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMy9pY29udmRhdGEvcnVuLWljb252LXRlc3Quc2gJMjAwOS0xMS0xMyAwMDo1MDozNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zNCw3ICszNCw3IEBACisgZXhwb3J0IEdDT05WX1BBVEgKKyAKKyAjIFdlIGhhdmUgdG8gaGF2ZSBzb21lIGRpcmVjdG9yaWVzIGluIHRoZSBsaWJyYXJ5IHBhdGguCistTElCUEFUSD0kY29kaXI6JGNvZGlyL2ljb252ZGF0YQorK0xJQlBBVEg9JGNvZGlyOiRjb2Rpci9pY29udmRhdGE6JGNvZGlyL2RsZmNuCisgCisgIyBIb3cgdGhlIHN0YXJ0IHRoZSBpY29udigxKSBwcm9ncmFtLgorIElDT05WPSckY29kaXIvZWxmL2xkLnNvIC0tbGlicmFyeS1wYXRoICRMSUJQQVRIIC0taW5oaWJpdC1ycGF0aCAke2Zyb219LnNvIFwKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL2ljb252ZGF0YS90c3QtdGFibGUuc2ggZ2xpYmMtMi4xMy9pY29udmRhdGEvdHN0LXRhYmxlLnNoCistLS0gZ2xpYmMtMi4xMy5vcmlnL2ljb252ZGF0YS90c3QtdGFibGUuc2gJMjAwMi0wNC0yNCAyMzozOTozNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEzL2ljb252ZGF0YS90c3QtdGFibGUuc2gJMjAwOS0xMS0xMyAwMDo1MDozNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC01OSw4ICs1OSwxMSBAQAorICAgaXJyZXZlcnNpYmxlPSR7Y2hhcnNldH0uaXJyZXZlcnNpYmxlCisgZmkKKyAKKysjIG1ha2Ugc3VyZSBsaWJkbCBpcyBhbHNvIGluIHBhdGggaW4gY2FzZSBzYW5kYm94IGlzIGluIHVzZQorK2xpYnJhcnlfcGF0aD0ke2NvbW1vbl9vYmpwZnh9OiR7Y29tbW9uX29ianBmeH0vZGxmY24KKysKKyAjIGljb252IGluIG9uZSBkaXJlY3Rpb24uCistJHtjb21tb25fb2JqcGZ4fWVsZi9sZC5zbyAtLWxpYnJhcnktcGF0aCAkY29tbW9uX29ianBmeCBcCisrJHtjb21tb25fb2JqcGZ4fWVsZi9sZC5zbyAtLWxpYnJhcnktcGF0aCAkbGlicmFyeV9wYXRoIFwKKyAke29ianBmeH10c3QtdGFibGUtZnJvbSAke2NoYXJzZXR9IFwKKyAgID4gJHtvYmpwZnh9dHN0LSR7Y2hhcnNldH0udGFibGUKKyAKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL2ludGwvdHN0LWNvZGVzZXQuc2ggZ2xpYmMtMi4xMy9pbnRsL3RzdC1jb2Rlc2V0LnNoCistLS0gZ2xpYmMtMi4xMy5vcmlnL2ludGwvdHN0LWNvZGVzZXQuc2gJMjAwNS0wNC0wNiAwNDoxODozNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEzL2ludGwvdHN0LWNvZGVzZXQuc2gJMjAwOS0xMS0xMyAwMDo1MDozNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zNyw2ICszNyw5IEBACisgTE9DUEFUSD0ke2NvbW1vbl9vYmpwZnh9bG9jYWxlZGF0YQorIGV4cG9ydCBMT0NQQVRICisgCisrIyBtYWtlIHN1cmUgbGliZGwgaXMgYWxzbyBpbiBwYXRoIGluIGNhc2Ugc2FuZGJveCBpcyBpbiB1c2UKKytsaWJyYXJ5X3BhdGg9JHtjb21tb25fb2JqcGZ4fToke2NvbW1vbl9vYmpwZnh9L2RsZmNuCisrCisgJHtjb21tb25fb2JqcGZ4fWVsZi9sZC5zbyAtLWxpYnJhcnktcGF0aCAkY29tbW9uX29ianBmeCBcCisgJHtvYmpwZnh9dHN0LWNvZGVzZXQgPiAke29ianBmeH10c3QtY29kZXNldC5vdXQKKyAKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL2ludGwvdHN0LWdldHRleHQuc2ggZ2xpYmMtMi4xMy9pbnRsL3RzdC1nZXR0ZXh0LnNoCistLS0gZ2xpYmMtMi4xMy5vcmlnL2ludGwvdHN0LWdldHRleHQuc2gJMjAwNC0wOC0xNSAyMToyODoxOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEzL2ludGwvdHN0LWdldHRleHQuc2gJMjAwOS0xMS0xMyAwMDo1MDozNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC01MSw5ICs1MSwxMiBAQAorIExPQ1BBVEg9JHtjb21tb25fb2JqcGZ4fWxvY2FsZWRhdGEKKyBleHBvcnQgTE9DUEFUSAorIAorKyMgbWFrZSBzdXJlIGxpYmRsIGlzIGFsc28gaW4gcGF0aCBpbiBjYXNlIHNhbmRib3ggaXMgaW4gdXNlCisrbGlicmFyeV9wYXRoPSR7Y29tbW9uX29ianBmeH06JHtjb21tb25fb2JqcGZ4fS9kbGZjbgorKworICMgTm93IHJ1biB0aGUgdGVzdC4KKyBNQUxMT0NfVFJBQ0U9JG1hbGxvY190cmFjZSBMT0NQQVRIPSR7b2JqcGZ4fWxvY2FsZWRpcjokTE9DUEFUSCBcCistJHtjb21tb25fb2JqcGZ4fWVsZi9sZC5zbyAtLWxpYnJhcnktcGF0aCAkY29tbW9uX29ianBmeCBcCisrJHtjb21tb25fb2JqcGZ4fWVsZi9sZC5zbyAtLWxpYnJhcnktcGF0aCAkbGlicmFyeV9wYXRoIFwKKyAke29ianBmeH10c3QtZ2V0dGV4dCA+ICR7b2JqcGZ4fXRzdC1nZXR0ZXh0Lm91dCAke29ianBmeH1kb21haW5kaXIKKyAKKyBleGl0ICQ/CitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9pbnRsL3RzdC1nZXR0ZXh0Mi5zaCBnbGliYy0yLjEzL2ludGwvdHN0LWdldHRleHQyLnNoCistLS0gZ2xpYmMtMi4xMy5vcmlnL2ludGwvdHN0LWdldHRleHQyLnNoCTIwMDUtMDUtMDQgMTk6NTQ6NDguMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMy9pbnRsL3RzdC1nZXR0ZXh0Mi5zaAkyMDA5LTExLTEzIDAwOjUwOjM3LjAwMDAwMDAwMCArMDEwMAorQEAgLTY1LDggKzY1LDExIEBACisgTE9DUEFUSD0ke29ianBmeH1kb21haW5kaXIKKyBleHBvcnQgTE9DUEFUSAorIAorKyMgbWFrZSBzdXJlIGxpYmRsIGlzIGFsc28gaW4gcGF0aCBpbiBjYXNlIHNhbmRib3ggaXMgaW4gdXNlCisrbGlicmFyeV9wYXRoPSR7Y29tbW9uX29ianBmeH06JHtjb21tb25fb2JqcGZ4fS9kbGZjbgorKworICMgTm93IHJ1biB0aGUgdGVzdC4KKy0ke2NvbW1vbl9vYmpwZnh9ZWxmL2xkLnNvIC0tbGlicmFyeS1wYXRoICRjb21tb25fb2JqcGZ4IFwKKyske2NvbW1vbl9vYmpwZnh9ZWxmL2xkLnNvIC0tbGlicmFyeS1wYXRoICRsaWJyYXJ5X3BhdGggXAorICR7b2JqcGZ4fXRzdC1nZXR0ZXh0MiA+ICR7b2JqcGZ4fXRzdC1nZXR0ZXh0Mi5vdXQgJHtvYmpwZnh9ZG9tYWluZGlyICYmCisgY21wICR7b2JqcGZ4fXRzdC1nZXR0ZXh0Mi5vdXQgLSA8PEVPRgorIFN0cmluZzEgLSBMYW5nMTogMXN0IHN0cmluZworZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvaW50bC90c3QtdHJhbnNsaXQuc2ggZ2xpYmMtMi4xMy9pbnRsL3RzdC10cmFuc2xpdC5zaAorLS0tIGdsaWJjLTIuMTMub3JpZy9pbnRsL3RzdC10cmFuc2xpdC5zaAkyMDA1LTA1LTA0IDE5OjU2OjEwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTMvaW50bC90c3QtdHJhbnNsaXQuc2gJMjAwOS0xMS0xMyAwMDo1MDozNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zNiw3ICszNiwxMCBAQAorIExPQ1BBVEg9JHtjb21tb25fb2JqcGZ4fWxvY2FsZWRhdGEKKyBleHBvcnQgTE9DUEFUSAorIAorLSR7Y29tbW9uX29ianBmeH1lbGYvbGQuc28gLS1saWJyYXJ5LXBhdGggJGNvbW1vbl9vYmpwZnggXAorKyMgbWFrZSBzdXJlIGxpYmRsIGlzIGFsc28gaW4gcGF0aCBpbiBjYXNlIHNhbmRib3ggaXMgaW4gdXNlCisrbGlicmFyeV9wYXRoPSR7Y29tbW9uX29ianBmeH06JHtjb21tb25fb2JqcGZ4fS9kbGZjbgorKworKyR7Y29tbW9uX29ianBmeH1lbGYvbGQuc28gLS1saWJyYXJ5LXBhdGggJGxpYnJhcnlfcGF0aCBcCisgJHtvYmpwZnh9dHN0LXRyYW5zbGl0ID4gJHtvYmpwZnh9dHN0LXRyYW5zbGl0Lm91dCAke29ianBmeH1kb21haW5kaXIKKyAKKyBleGl0ICQ/CitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9tYWxsb2MvdHN0LW10cmFjZS5zaCBnbGliYy0yLjEzL21hbGxvYy90c3QtbXRyYWNlLnNoCistLS0gZ2xpYmMtMi4xMy5vcmlnL21hbGxvYy90c3QtbXRyYWNlLnNoCTIwMDUtMTAtMTUgMDE6NDA6MzUuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMy9tYWxsb2MvdHN0LW10cmFjZS5zaAkyMDA5LTExLTEzIDAwOjUwOjM3LjAwMDAwMDAwMCArMDEwMAorQEAgLTI0LDkgKzI0LDEyIEBACisgc3RhdHVzPTAKKyB0cmFwICJybSAtZiAke2NvbW1vbl9vYmpwZnh9bWFsbG9jL3RzdC1tdHJhY2UubGVhazsgZXhpdCAxIiAxIDIgMTUKKyAKKysjIG1ha2Ugc3VyZSBsaWJkbCBpcyBhbHNvIGluIHBhdGggaW4gY2FzZSBzYW5kYm94IGlzIGluIHVzZQorK2xpYnJhcnlfcGF0aD0ke2NvbW1vbl9vYmpwZnh9OiR7Y29tbW9uX29ianBmeH0vZGxmY24KKysKKyBNQUxMT0NfVFJBQ0U9JHtjb21tb25fb2JqcGZ4fW1hbGxvYy90c3QtbXRyYWNlLmxlYWsgXAorIExPQ1BBVEg9JHtjb21tb25fb2JqcGZ4fWxvY2FsZWRhdGEgR0NPTlZfUEFUSD0ke2NvbW1vbl9vYmpwZnh9aWNvbnZkYXRhIFwKKy0ke2NvbW1vbl9vYmpwZnh9ZWxmL2xkLnNvIC0tbGlicmFyeS1wYXRoICRjb21tb25fb2JqcGZ4IFwKKyske2NvbW1vbl9vYmpwZnh9ZWxmL2xkLnNvIC0tbGlicmFyeS1wYXRoICRsaWJyYXJ5X3BhdGggXAorICAgJHtjb21tb25fb2JqcGZ4fW1hbGxvYy90c3QtbXRyYWNlIHx8IHN0YXR1cz0xCisgCisgaWYgdGVzdCAkc3RhdHVzIC1lcSAwICYmIHRlc3QgLWYgJHtjb21tb25fb2JqcGZ4fW1hbGxvYy9tdHJhY2U7IHRoZW4KK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL25wdGwvdHN0LXRsczYuc2ggZ2xpYmMtMi4xMy9ucHRsL3RzdC10bHM2LnNoCistLS0gZ2xpYmMtMi4xMy5vcmlnL25wdGwvdHN0LXRsczYuc2gJMjAwMy0wOS0wMyAwMDowMjo1OS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEzL25wdGwvdHN0LXRsczYuc2gJMjAwOS0xMS0xMyAwMDo1MDozNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC01LDggKzUsOCBAQAorIHJ0bGRfaW5zdGFsbGVkX25hbWU9JDE7IHNoaWZ0CisgbG9nZmlsZT0kY29tbW9uX29ianBmeC9ucHRsL3RzdC10bHM2Lm91dAorIAorLSMgV2UgaGF2ZSB0byBmaW5kIGxpYmMgYW5kIG5wdGwKKy1saWJyYXJ5X3BhdGg9JHtjb21tb25fb2JqcGZ4fToke2NvbW1vbl9vYmpwZnh9bnB0bAorKyMgV2UgaGF2ZSB0byBmaW5kIGxpYmMgYW5kIG5wdGwgKGFsc28gbGliZGwgaW4gY2FzZSBzYW5kYm94IGlzIGluIHVzZSkKKytsaWJyYXJ5X3BhdGg9JHtjb21tb25fb2JqcGZ4fToke2NvbW1vbl9vYmpwZnh9bnB0bDoke2NvbW1vbl9vYmpwZnh9L2RsZmNuCisgdHN0X3RsczU9IiR7ZWxmX29ianBmeH0ke3J0bGRfaW5zdGFsbGVkX25hbWV9IC0tbGlicmFyeS1wYXRoICR7bGlicmFyeV9wYXRofSBcCisgCSAgJHtjb21tb25fb2JqcGZ4fS9ucHRsL3RzdC10bHM1IgorIAorZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvcG9zaXgvZ2xvYnRlc3Quc2ggZ2xpYmMtMi4xMy9wb3NpeC9nbG9idGVzdC5zaAorLS0tIGdsaWJjLTIuMTMub3JpZy9wb3NpeC9nbG9idGVzdC5zaAkyMDA4LTEyLTA2IDA3OjA1OjM5LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTMvcG9zaXgvZ2xvYnRlc3Quc2gJMjAwOS0xMS0xMyAwMDo1MDozNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xOCw3ICsxOCw3IEBACisgZXNhYworIAorICMgV2UgaGF2ZSB0byBmaW5kIHRoZSBsaWJjIGFuZCB0aGUgTlNTIG1vZHVsZXMuCistbGlicmFyeV9wYXRoPSR7Y29tbW9uX29ianBmeH06JHtjb21tb25fb2JqcGZ4fW5zczoke2NvbW1vbl9vYmpwZnh9bmlzOiR7Y29tbW9uX29ianBmeH1kYjI6JHtjb21tb25fb2JqcGZ4fWhlc2lvZAorK2xpYnJhcnlfcGF0aD0ke2NvbW1vbl9vYmpwZnh9OiR7Y29tbW9uX29ianBmeH1uc3M6JHtjb21tb25fb2JqcGZ4fW5pczoke2NvbW1vbl9vYmpwZnh9ZGIyOiR7Y29tbW9uX29ianBmeH1oZXNpb2Q6JHtjb21tb25fb2JqcGZ4fS9kbGZjbgorIAorICMgU2luY2Ugd2UgdXNlIGBzb3J0JyB3ZSBtdXN0IG1ha2Ugc3VyZSB0byB1c2UgdGhlIHNhbWUgbG9jYWxlIGV2ZXJ5d2hlcmUuCisgTENfQUxMPUMKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL3Bvc2l4L3RzdC1nZXRjb25mLnNoIGdsaWJjLTIuMTMvcG9zaXgvdHN0LWdldGNvbmYuc2gKKy0tLSBnbGliYy0yLjEzLm9yaWcvcG9zaXgvdHN0LWdldGNvbmYuc2gJMjAwMi0wOS0wMSAxMzoxMToyNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEzL3Bvc2l4L3RzdC1nZXRjb25mLnNoCTIwMDktMTEtMTMgMDA6NTA6MzcuMDAwMDAwMDAwICswMTAwCitAQCAtMTAsNyArMTAsMTAgQEAKKyBlbHNlCisgICBydGxkX2luc3RhbGxlZF9uYW1lPSQxOyBzaGlmdAorICAgcnVuaXQoKSB7CistICAgICR7ZWxmX29ianBmeH0ke3J0bGRfaW5zdGFsbGVkX25hbWV9IC0tbGlicmFyeS1wYXRoICR7Y29tbW9uX29ianBmeH0gIiRAIgorKyAgICAKKysgICMgbWFrZSBzdXJlIGxpYmRsIGlzIGFsc28gaW4gcGF0aCBpbiBjYXNlIHNhbmRib3ggaXMgaW4gdXNlCisrICBsaWJyYXJ5X3BhdGg9JHtjb21tb25fb2JqcGZ4fToke2NvbW1vbl9vYmpwZnh9L2RsZmNuCisrICAgICR7ZWxmX29ianBmeH0ke3J0bGRfaW5zdGFsbGVkX25hbWV9IC0tbGlicmFyeS1wYXRoICR7bGlicmFyeV9wYXRofSAiJEAiCisgICB9CisgZmkKKyAKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL3Bvc2l4L3dvcmRleHAtdHN0LnNoIGdsaWJjLTIuMTMvcG9zaXgvd29yZGV4cC10c3Quc2gKKy0tLSBnbGliYy0yLjEzLm9yaWcvcG9zaXgvd29yZGV4cC10c3Quc2gJMjAwMC0xMC0yMCAxODoyMzozMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEzL3Bvc2l4L3dvcmRleHAtdHN0LnNoCTIwMDktMTEtMTMgMDA6NTA6MzcuMDAwMDAwMDAwICswMTAwCitAQCAtMTksOCArMTksMTEgQEAKKyAiCisgZXhwb3J0IElGUworIAorKyMgbWFrZSBzdXJlIGxpYmRsIGlzIGFsc28gaW4gcGF0aCBpbiBjYXNlIHNhbmRib3ggaXMgaW4gdXNlCisrbGlicmFyeV9wYXRoPSR7Y29tbW9uX29ianBmeH06JHtjb21tb25fb2JqcGZ4fS9kbGZjbgorKworIGZhaWxlZD0wCistJHtlbGZfb2JqcGZ4fSR7cnRsZF9pbnN0YWxsZWRfbmFtZX0gLS1saWJyYXJ5LXBhdGggJHtjb21tb25fb2JqcGZ4fSBcCisrJHtlbGZfb2JqcGZ4fSR7cnRsZF9pbnN0YWxsZWRfbmFtZX0gLS1saWJyYXJ5LXBhdGggJHtsaWJyYXJ5X3BhdGh9IFwKKyAke2NvbW1vbl9vYmpwZnh9cG9zaXgvd29yZGV4cC10ZXN0ICckKicgPiAke3Rlc3RvdXR9MQorIGNhdCA8PCJFT0YiIHwgY21wIC0gJHt0ZXN0b3V0fTEgPj4gJGxvZ2ZpbGUgfHwgZmFpbGVkPTEKKyB3b3JkZXhwIHJldHVybmVkIDAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzM4MC1kb250LWJ1aWxkLXRpbWV6b25lLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvMzgwLWRvbnQtYnVpbGQtdGltZXpvbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFjMzU4ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzM4MC1kb250LWJ1aWxkLXRpbWV6b25lLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK3RpbWV6b25lIGRhdGEgaGFzIGJlZW4gc3BsaXQgaW50byB0aGUgcGFja2FnZSBzeXMtbGlicy90aW1lem9uZS1kYXRhCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL01ha2Vjb25maWcgZ2xpYmMtMi4xMy9NYWtlY29uZmlnCistLS0gZ2xpYmMtMi4xMy5vcmlnL01ha2Vjb25maWcJMjAwOS0xMS0xMyAwMDo1MDoxMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEzL01ha2Vjb25maWcJMjAwOS0xMS0xMyAwMDo1MDo0MS4wMDAwMDAwMDAgKzAxMDAKK0BAIC05NDQsNyArOTQ0LDcgQEAKKyAJICAgICAgc3RkbGliIHN0ZGlvLWNvbW1vbiBsaWJpbyBtYWxsb2Mgc3RyaW5nIHdjc21icyB0aW1lIGRpcmVudCAgICBcCisgCSAgICAgIGdycCBwd2QgcG9zaXggaW8gdGVybWlvcyByZXNvdXJjZSBtaXNjIHNvY2tldCBzeXN2aXBjIGdtb24gICAgXAorIAkgICAgICBnbnVsaWIgaWNvbnYgaWNvbnZkYXRhIHdjdHlwZSBtYW51YWwgc2hhZG93IGdzaGFkb3cgcG8gYXJncCAgIFwKKy0JICAgICAgY3J5cHQgbnNzIGxvY2FsZWRhdGEgdGltZXpvbmUgcnQgY29uZm9ybSBkZWJ1ZwkJICAgIFwKKysJICAgICAgY3J5cHQgbnNzIGxvY2FsZWRhdGEgcnQgY29uZm9ybSBkZWJ1ZwkJICAgIFwKKyAJICAgICAgJChhZGQtb24tc3ViZGlycykgJChkbGZjbikgJChiaW5mbXQtc3ViZGlyKQorIAorIGlmbmRlZiBhdm9pZC1nZW5lcmF0ZWQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzQwMC1hbHBoYS14c3RhdC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzQwMC1hbHBoYS14c3RhdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTRhYjhmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvNDAwLWFscGhhLXhzdGF0LnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2tlcm5lbC1mZWF0dXJlcy5oIGdsaWJjLTIuMTMvc3lzZGVwcy91bml4L3N5c3YvbGludXgva2VybmVsLWZlYXR1cmVzLmgKKy0tLSBnbGliYy0yLjEzLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgva2VybmVsLWZlYXR1cmVzLmgJMjAwOS0wNS0wOSAwODo1NDoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2tlcm5lbC1mZWF0dXJlcy5oCTIwMDktMTEtMTMgMDA6NTA6NDUuMDAwMDAwMDAwICswMTAwCitAQCAtMzg2LDYgKzM4NiwxMSBAQAorICMgZGVmaW5lIF9fQVNTVU1FX0dFVERFTlRTMzJfRF9UWVBFCTEKKyAjZW5kaWYKKyAKKysvKiBTdGFydGluZyB3aXRoIHZlcnNpb24gMi42LjQsIGFscGhhIHN0YXQ2NCBzeXNjYWxscyBhcmUgYXZhaWxhYmxlLiAgKi8KKysjaWYgX19MSU5VWF9LRVJORUxfVkVSU0lPTiA+PSAweDAyMDYwNCAmJiBkZWZpbmVkIF9fYWxwaGFfXworKyMgZGVmaW5lIF9fQVNTVU1FX1NUQVQ2NF9TWVNDQUxMCTEKKysjZW5kaWYKKysKKyAvKiBTdGFydGluZyB3aXRoIHZlcnNpb24gMi41LjMsIHRoZSBpbml0aWFsIGxvY2F0aW9uIHJldHVybmVkIGJ5IGBicmsnCisgICAgYWZ0ZXIgZXhlYyBpcyBhbHdheXMgcm91bmRlZCB1cCB0byB0aGUgbmV4dCBwYWdlLiAgKi8KKyAjaWYgX19MSU5VWF9LRVJORUxfVkVSU0lPTiA+PSAxMzIzNTUKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzQxMC1hbHBoYS1TRVRQSVBFLUdFVFBJUEUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy80MTAtYWxwaGEtU0VUUElQRS1HRVRQSVBFLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNTU1MzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy80MTAtYWxwaGEtU0VUUElQRS1HRVRQSVBFLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKKzIwMTEtMDItMjggIEF1cmVsaWVuIEphcm5vICA8YXVyZWxpZW5AYXVyZWwzMi5uZXQ+CisKKwkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2JpdHMvZmNudGwuaCAoRl9TRVRQSVBFX1NaLAorCUZfR0VUUElQRV9TWik6IERlZmluZS4KKworZGlmZiAtLWdpdCBnbGliYy0yLjEzL2dsaWJjLXBvcnRzLTIuMTMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvYml0cy9mY250bC5oIGdsaWJjLTIuMTMvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9iaXRzL2ZjbnRsLmgKK2luZGV4IDg2MGU5YWMuLmU1ZTcyNmIgMTAwNjQ0CistLS0gZ2xpYmMtMi4xMy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2JpdHMvZmNudGwuaAorKysrIGdsaWJjLTIuMTMvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9iaXRzL2ZjbnRsLmgKK0BAIC05Nyw2ICs5Nyw4IEBACisgIyBkZWZpbmUgRl9TRVRMRUFTRQkxMDI0CS8qIFNldCBhIGxlYXNlLgkgKi8KKyAjIGRlZmluZSBGX0dFVExFQVNFCTEwMjUJLyogRW5xdWlyZSB3aGF0IGxlYXNlIGlzIGFjdGl2ZS4gICovCisgIyBkZWZpbmUgRl9OT1RJRlkJMTAyNgkvKiBSZXF1ZXN0IG5vdGZpY2F0aW9ucyBvbiBhIGRpcmVjdG9yeS4JICovCisrIyBkZWZpbmUgRl9TRVRQSVBFX1NaCTEwMzEgICAgLyogU2V0IHBpcGUgcGFnZSBzaXplIGFycmF5LiAgKi8KKysjIGRlZmluZSBGX0dFVFBJUEVfU1oJMTAzMiAgICAvKiBTZXQgcGlwZSBwYWdlIHNpemUgYXJyYXkuICAqLworICNlbmRpZgorICNpZmRlZiBfX1VTRV9YT1BFTjJLOAorICMgZGVmaW5lIEZfRFVQRkRfQ0xPRVhFQyAxMDMwCS8qIER1cGxpY2F0ZSBmaWxlIGRlc2NyaXB0b3Igd2l0aAorCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy80MjAtYWxwaGEtc3RhdGZzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvNDIwLWFscGhhLXN0YXRmcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWM5MjVhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvNDIwLWFscGhhLXN0YXRmcy5wYXRjaApAQCAtMCwwICsxLDI5IEBACisyMDExLTAyLTI4ICBBdXJlbGllbiBKYXJubyAgPGF1cmVsaWVuQGF1cmVsMzIubmV0PgorCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2JpdHMvc3RhdGZzLmggKHN0cnVjdCBzdGF0ZnMsCisJc3RydWN0IHN0YXRmczY0KTogQWRkIGZfZmxhZ3MgZmllbGQuCisKK2RpZmYgLS1naXQgZ2xpYmMtMi4xMy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2JpdHMvc3RhdGZzLmggZ2xpYmMtMi4xMy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2JpdHMvc3RhdGZzLmgKK2luZGV4IGQ4MzhlNmIuLjE1NzU5MWQgMTAwNjQ0CistLS0gZ2xpYmMtMi4xMy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2JpdHMvc3RhdGZzLmgKKysrKyBnbGliYy0yLjEzL2dsaWJjLXBvcnRzLTIuMTMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvYml0cy9zdGF0ZnMuaAorQEAgLTQyLDcgKzQyLDggQEAgc3RydWN0IHN0YXRmcworICAgICBfX2ZzaWRfdCBmX2ZzaWQ7CisgICAgIGludCBmX25hbWVsZW47CisgICAgIGludCBmX2Zyc2l6ZTsKKy0gICAgaW50IGZfc3BhcmVbNV07CisrICAgIGludCBmX2ZsYWdzOworKyAgICBpbnQgZl9zcGFyZVs0XTsKKyAgIH07CisgCisgI2lmZGVmIF9fVVNFX0xBUkdFRklMRTY0CitAQCAtNTgsNyArNTksOCBAQCBzdHJ1Y3Qgc3RhdGZzNjQKKyAgICAgX19mc2lkX3QgZl9mc2lkOworICAgICBpbnQgZl9uYW1lbGVuOworICAgICBpbnQgZl9mcnNpemU7CistICAgIGludCBmX3NwYXJlWzVdOworKyAgICBpbnQgZl9mbGFnczsKKysgICAgaW50IGZfc3BhcmVbNF07CisgICB9OworICNlbmRpZgorCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy80MzAtYWxwaGEtY3JlYXQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy80MzAtYWxwaGEtY3JlYXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE2ZGRkYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzQzMC1hbHBoYS1jcmVhdC5wYXRjaApAQCAtMCwwICsxLDE0IEBACithbHBoYSBkb2VzIG5vdCBoYXZlIGEgX19OUl9jcmVhdAorCitodHRwOi8vYnVncy5nZW50b28ub3JnLzIyNzI3NQoraHR0cDovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD02NjUwCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3dvcmRzaXplLTY0L2NyZWF0NjQuYyBnbGliYy0yLjEzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3dvcmRzaXplLTY0L2NyZWF0NjQuYworLS0tIGdsaWJjLTIuMTMub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC93b3Jkc2l6ZS02NC9jcmVhdDY0LmMJMjAwNy0xMS0xMCAyMDozNDoyNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliYy0yLjEzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3dvcmRzaXplLTY0L2NyZWF0NjQuYwkyMDA5LTExLTEzIDAwOjUwOjUxLjAwMDAwMDAwMCArMDEwMAorQEAgLTEgKzEsNSBAQAorIC8qIERlZmluZWQgYXMgYWxpYXMgZm9yIHRoZSBzeXNjYWxsLiAgKi8KKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2lmbmRlZiBfX05SX2NyZWF0CisrI2luY2x1ZGUgIi4uLy4uLy4uLy4uLy4uL2lvL2NyZWF0NjQuYyIKKysjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzQ0MC1hbHBoYS1jYWNoZS1zaGFwZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzQ0MC1hbHBoYS1jYWNoZS1zaGFwZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmFkZTdiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvNDQwLWFscGhhLWNhY2hlLXNoYXBlLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK29sZGVyIHZlcmlzb25zIG9mIGdsaWJjIHdvdWxkIGJ1aWxkIGRsLXN5c2RlcCBhcyBzaGFyZWQtb25seSBhbmQgZGwtc3VwcG9ydCBhcworc3RhdGljLW9ubHkuICBhbHBoYSBob29rcyBpbiBhIGNhY2hlIHZhcmlhYmxlIHZpYSBkbC1hdXh2LmguICBuZXdlciB2ZXJzaW9ucyBvZgorZ2xpYmMgYnVpbGQgZGwtc3lzZGVwIGFzIGJvdGggc2hhcmVkIGFuZCBzdGF0aWMgd2hpY2ggbWVhbnMgd2Ugbm93IGhhdmUgc3ltYm9sCitkdXBsaWNhdGlvbiBmb3Igc3RhdGljIGJ1aWxkcyB3aXRoIGRsLXN5c2RlcCBhbmQgZGwtc3VwcG9ydC4gIHNpbmNlIGRsLXN5c2RlcAoraXMgYm90aCBzaGFyZWQvc3RhdGljLCB0aGVyZSBpcyBubyBwb2ludCBpbiBob29raW5nIGRsLXN1cHBvcnQgYW55bW9yZSwgc28gd2UKK2NhbiBwdW50IGl0LgorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2RsLXN1cHBvcnQuYyBnbGliYy0yLjEzL2dsaWJjLXBvcnRzLTIuMTMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvZGwtc3VwcG9ydC5jCistLS0gZ2xpYmMtMi4xMy5vcmlnL2dsaWJjLXBvcnRzLTIuMTMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvZGwtc3VwcG9ydC5jCTIwMDktMDUtMTYgMTA6MzY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2RsLXN1cHBvcnQuYwkyMDA5LTExLTEzIDAwOjUwOjUzLjAwMDAwMDAwMCArMDEwMAorQEAgLTEsMiArMSwxIEBACistI2luY2x1ZGUgImRsLWF1eHYuaCIKKyAjaW5jbHVkZSA8ZWxmL2RsLXN1cHBvcnQuYz4KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzQ1MC1hbHBoYS1ERUZBVUxUX1NUQUNLX1BFUk1TLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvNDUwLWFscGhhLURFRkFVTFRfU1RBQ0tfUEVSTVMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMzZWE5YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzQ1MC1hbHBoYS1ERUZBVUxUX1NUQUNLX1BFUk1TLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKKzIwMTEtMDItMjggIEF1cmVsaWVuIEphcm5vICA8YXVyZWxpZW5AYXVyZWwzMi5uZXQ+CisKKwkqIHN5c2RlcHMvYWxwaGEvc3RhY2tpbmZvLmg6IERlZmluZSBERUZBVUxUX1NUQUNLX1BFUk1TIHdpdGggUEZfWC4KKworZGlmZiAtLWdpdCBnbGliYy0yLjEzL2dsaWJjLXBvcnRzLTIuMTMvc3lzZGVwcy9hbHBoYS9zdGFja2luZm8uaCBnbGliYy0yLjEzL2dsaWJjLXBvcnRzLTIuMTMvc3lzZGVwcy9hbHBoYS9zdGFja2luZm8uaAoraW5kZXggMGEyODFiZC4uZDlkYmMzNSAxMDA2NDQKKy0tLSBnbGliYy0yLjEzL2dsaWJjLXBvcnRzLTIuMTMvc3lzZGVwcy9hbHBoYS9zdGFja2luZm8uaAorKysrIGdsaWJjLTIuMTMvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL2FscGhhL3N0YWNraW5mby5oCitAQCAtMjIsNyArMjIsMTMgQEAKKyAjaWZuZGVmIF9TVEFDS0lORk9fSAorICNkZWZpbmUgX1NUQUNLSU5GT19ICTEKKyAKKysjaW5jbHVkZSA8ZWxmLmg+CisrCisgLyogT24gQWxwaGEgdGhlIHN0YWNrIGdyb3dzIGRvd24uICAqLworICNkZWZpbmUgX1NUQUNLX0dST1dTX0RPV04JMQorIAorKy8qIERlZmF1bHQgdG8gYW4gZXhlY3V0YWJsZSBzdGFjay4gIFBGX1ggY2FuIGJlIG92ZXJyaWRkZW4gaWYgUFRfR05VX1NUQUNLIGlzCisrICogcHJlc2VudCwgYnV0IGl0IGlzIHByZXN1bWVkIGFic2VudC4gICovCisrI2RlZmluZSBERUZBVUxUX1NUQUNLX1BFUk1TIChQRl9SfFBGX1d8UEZfWCkKKysKKyAjZW5kaWYJLyogc3RhY2tpbmZvLmggKi8KKwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvNDYwLWFscGhhLWZpeC1nY2MtNC4xLXdhcm5pbmdzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvNDYwLWFscGhhLWZpeC1nY2MtNC4xLXdhcm5pbmdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxM2UwZTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy80NjAtYWxwaGEtZml4LWdjYy00LjEtd2FybmluZ3MucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorMjAwNi0wNS0zMCAgRmFsayBIdWVmZm5lciA8ZmFsa0BkZWJpYW4ub3JnPgorCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9pb3Blcm0uYzogZm9yY2UgdGhlIGFyY2hpdGVjdHVyZQorCSAgdG8gZXY2IGluIGFzc2VtYmx5IGNvZGUuCisKK3tzdGFuZGFyZCBpbnB1dH06IEFzc2VtYmxlciBtZXNzYWdlczoKK3tzdGFuZGFyZCBpbnB1dH06MzQxOiBFcnJvcjogbWFjcm8gcmVxdWlyZXMgJGF0IHJlZ2lzdGVyIHdoaWxlIG5vYXQgaW4gZWZmZWN0Cit7c3RhbmRhcmQgaW5wdXR9OjM3NDogRXJyb3I6IG1hY3JvIHJlcXVpcmVzICRhdCByZWdpc3RlciB3aGlsZSBub2F0IGluIGVmZmVjdAore3N0YW5kYXJkIGlucHV0fTo0Mzg6IEVycm9yOiBtYWNybyByZXF1aXJlcyAkYXQgcmVnaXN0ZXIgd2hpbGUgbm9hdCBpbiBlZmZlY3QKK3tzdGFuZGFyZCBpbnB1dH06NDcxOiBFcnJvcjogbWFjcm8gcmVxdWlyZXMgJGF0IHJlZ2lzdGVyIHdoaWxlIG5vYXQgaW4gZWZmZWN0CittYWtlWzNdOiAqKiogWy90bXAvYnVpbGRkL2dsaWJjLTIuMy42L2J1aWxkLXRyZWUvYWxwaGEtbGliYy9taXNjL2lvcGVybS5vXSBFcnJvciAxCisKK0hybS4gZ2NjIHB1dHMgLmFyY2ggZXY0IGludG8gdGhlIC5zLCBhbmQgdGhpcyBvdmVycmlkZXMgLW1ldjYgZm9yIGFzLgorSSBjYW5ub3QgcmVhbGx5IHRoaW5rIG9mIGFueXRoaW5nIGJldHRlciB0aGFuCisKKyBwb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9pb3Blcm0uYyB8ICAgIDggKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2lvcGVybS5jIGdsaWJjLTIuMTMvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbHBoYS9pb3Blcm0uYworLS0tIGdsaWJjLTIuMTMub3JpZy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2lvcGVybS5jCTIwMDktMDUtMTYgMTA6MzY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2lvcGVybS5jCTIwMDktMTEtMTMgMDA6NTA6NTcuMDAwMDAwMDAwICswMTAwCitAQCAtMTc4LDEzICsxNzgsMTMgQEAKKyBzdGF0aWMgaW5saW5lIHZvaWQKKyBzdGJfbWIodW5zaWduZWQgY2hhciB2YWwsIHVuc2lnbmVkIGxvbmcgYWRkcikKKyB7CistICBfX2FzbV9fKCJzdGIgJTEsJTA7IG1iIiA6ICI9bSIoKih2dWNwKWFkZHIpIDogInIiKHZhbCkpOworKyAgX19hc21fXygiLmFyY2ggZXY2OyBzdGIgJTEsJTA7IG1iIiA6ICI9bSIoKih2dWNwKWFkZHIpIDogInIiKHZhbCkpOworIH0KKyAKKyBzdGF0aWMgaW5saW5lIHZvaWQKKyBzdHdfbWIodW5zaWduZWQgc2hvcnQgdmFsLCB1bnNpZ25lZCBsb25nIGFkZHIpCisgeworLSAgX19hc21fXygic3R3ICUxLCUwOyBtYiIgOiAiPW0iKCoodnVzcClhZGRyKSA6ICJyIih2YWwpKTsKKysgIF9fYXNtX18oIi5hcmNoIGV2Njsgc3R3ICUxLCUwOyBtYiIgOiAiPW0iKCoodnVzcClhZGRyKSA6ICJyIih2YWwpKTsKKyB9CisgCisgc3RhdGljIGlubGluZSB2b2lkCitAQCAtMzU2LDcgKzM1Niw3IEBACisgICB1bnNpZ25lZCBsb25nIGludCBhZGRyID0gZGVuc2VfcG9ydF90b19jcHVfYWRkciAocG9ydCk7CisgICB1bnNpZ25lZCBjaGFyIHI7CisgCistICBfX2FzbV9fICgibGRidSAlMCwlMSIgOiAiPXIiKHIpIDogIm0iKCoodnVjcClhZGRyKSk7CisrICBfX2FzbV9fICgiLmFyY2ggZXY2OyBsZGJ1ICUwLCUxIiA6ICI9ciIocikgOiAibSIoKih2dWNwKWFkZHIpKTsKKyAgIHJldHVybiByOworIH0KKyAKK0BAIC0zNjYsNyArMzY2LDcgQEAKKyAgIHVuc2lnbmVkIGxvbmcgaW50IGFkZHIgPSBkZW5zZV9wb3J0X3RvX2NwdV9hZGRyIChwb3J0KTsKKyAgIHVuc2lnbmVkIHNob3J0IHI7CisgCistICBfX2FzbV9fICgibGR3dSAlMCwlMSIgOiAiPXIiKHIpIDogIm0iKCoodnVzcClhZGRyKSk7CisrICBfX2FzbV9fICgiLmFyY2ggZXY2OyBsZHd1ICUwLCUxIiA6ICI9ciIocikgOiAibSIoKih2dXNwKWFkZHIpKTsKKyAgIHJldHVybiByOworIH0KKyAKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL3BvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FscGhhL2lvcGVybS5jIGdsaWJjLTIuMTMvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWxwaGEvaW9wZXJtLmMKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzQ3MC1hbHBoYS1mZXVwZGF0ZWVudi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzQ3MC1hbHBoYS1mZXVwZGF0ZWVudi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWE3MDUxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvNDcwLWFscGhhLWZldXBkYXRlZW52LnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKKzIwMTEtMDMtMDEgIEF1cmVsaWVuIEphcm5vICA8YXVyZWxpZW5AYXVyZWwzMi5uZXQ+CisKKwkqIHN5c2RlcHMvYWxwaGEvZnB1L2ZldXBkYXRlZW52LmMgKGZldXBkYXRlZW52KTogQWRkCisJbGlibV9oaWRkZW5fZGVmLgorCSogc3lzZGVwcy9hbHBoYS9mcHUvZnRlc3RleGNlcHQuYyAoZmV0ZXN0ZXhjZXB0KTogTGlrZXdpc2UuCisKK2RpZmYgLS1naXQgZ2xpYmMtMi4xMy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvYWxwaGEvZnB1L2ZldXBkYXRlZW52LmMgZ2xpYmMtMi4xMy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvYWxwaGEvZnB1L2ZldXBkYXRlZW52LmMKK2luZGV4IGM3OTgwNzAuLjlhYmJmMTEgMTAwNjQ0CistLS0gZ2xpYmMtMi4xMy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvYWxwaGEvZnB1L2ZldXBkYXRlZW52LmMKKysrKyBnbGliYy0yLjEzL2dsaWJjLXBvcnRzLTIuMTMvc3lzZGVwcy9hbHBoYS9mcHUvZmV1cGRhdGVlbnYuYworQEAgLTQ2LDQgKzQ2LDUgQEAgc3Ryb25nX2FsaWFzIChfX2ZldXBkYXRlZW52LCBfX29sZF9mZXVwZGF0ZWVudikKKyBjb21wYXRfc3ltYm9sIChsaWJtLCBfX29sZF9mZXVwZGF0ZWVudiwgZmV1cGRhdGVlbnYsIEdMSUJDXzJfMSk7CisgI2VuZGlmCisgCisrbGlibV9oaWRkZW5fdmVyIChfX2ZldXBkYXRlZW52LCBmZXVwZGF0ZWVudikKKyB2ZXJzaW9uZWRfc3ltYm9sIChsaWJtLCBfX2ZldXBkYXRlZW52LCBmZXVwZGF0ZWVudiwgR0xJQkNfMl8yKTsKK2RpZmYgLS1naXQgZ2xpYmMtMi4xMy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvYWxwaGEvZnB1L2Z0ZXN0ZXhjZXB0LmMgZ2xpYmMtMi4xMy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvYWxwaGEvZnB1L2Z0ZXN0ZXhjZXB0LmMKK2luZGV4IGE0YjMwODEuLjM0ZDgxMTMgMTAwNjQ0CistLS0gZ2xpYmMtMi4xMy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvYWxwaGEvZnB1L2Z0ZXN0ZXhjZXB0LmMKKysrKyBnbGliYy0yLjEzL2dsaWJjLXBvcnRzLTIuMTMvc3lzZGVwcy9hbHBoYS9mcHUvZnRlc3RleGNlcHQuYworQEAgLTMwLDMgKzMwLDQgQEAgZmV0ZXN0ZXhjZXB0IChpbnQgZXhjZXB0cykKKyAKKyAgIHJldHVybiB0bXAgJiBleGNlcHRzICYgU1dDUl9TVEFUVVNfTUFTSzsKKyB9CisrbGlibV9oaWRkZW5fZGVmIChmZXRlc3RleGNlcHQpCisKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzQ5MC1hbHBoYV9hbHBoYS1hZGQtZmRhdGFzeW5jLXN1cHBvcnQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy80OTAtYWxwaGFfYWxwaGEtYWRkLWZkYXRhc3luYy1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MmYzNGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy80OTAtYWxwaGFfYWxwaGEtYWRkLWZkYXRhc3luYy1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMTI2IEBACisyMDA5LTA3LTI1ICBBdXJlbGllbiBKYXJubyAgPGF1cmVsaWVuQGF1cmVsMzIubmV0PgorCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9rZXJuZWwtZmVhdHVyZXMuaDogZGVmaW5lIAorCV9fQVNTVU1FX0ZEQVRBU1lOQy4gCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9mZGF0YXN5bmMuYzogTmV3IGZpbGUuCisJKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9NYWtlZmlsZTogY29tcGlsZSBmZGF0YXN5bmMuYyB3aXRoCisJLWZleGNlcHRpb25zLgorCSogc3lzZGVwcy91bml4L3N5c3YvbGludXgvc3lzY2FsbHMubGlzdDogUmVtb3ZlIGZkYXRhc3luYy4KKworIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L01ha2VmaWxlICAgICAgICAgIHwgICAgMSAKKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9mZGF0YXN5bmMuYyAgICAgICB8ICAgNjkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgva2VybmVsLWZlYXR1cmVzLmggfCAgICA2ICsrCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgvc3lzY2FsbHMubGlzdCAgICAgfCAgICAxIAorIDQgZmlsZXMgY2hhbmdlZCwgNzYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9NYWtlZmlsZSBnbGliYy0yLjEzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L01ha2VmaWxlCistLS0gZ2xpYmMtMi4xMy5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L01ha2VmaWxlCTIwMDktMDMtMDIgMTc6MTU6MTMuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9NYWtlZmlsZQkyMDA5LTExLTEzIDAwOjUxOjA0LjAwMDAwMDAwMCArMDEwMAorQEAgLTIwLDYgKzIwLDcgQEAKKyAJCSAgIHNldGZzdWlkIHNldGZzZ2lkIG1ha2VkZXYgZXBvbGxfcHdhaXQgc2lnbmFsZmQgXAorIAkJICAgZXZlbnRmZCBldmVudGZkX3JlYWQgZXZlbnRmZF93cml0ZSBwcmxpbWl0CisgCisrQ0ZMQUdTLWZkYXRhc3luYy5jID0gLWZleGNlcHRpb25zCisgQ0ZMQUdTLWdldGhvc3RpZC5jID0gLWZleGNlcHRpb25zCisgCisgc3lzZGVwX2hlYWRlcnMgKz0gc3lzL21vdW50Lmggc3lzL2FjY3QuaCBzeXMvc3lzY3RsLmggXAorZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZmRhdGFzeW5jLmMgZ2xpYmMtMi4xMy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9mZGF0YXN5bmMuYworLS0tIGdsaWJjLTIuMTMub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9mZGF0YXN5bmMuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWJjLTIuMTMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZmRhdGFzeW5jLmMJMjAwOS0xMS0xMyAwMDo1MTowNC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsNjkgQEAKKysvKiBmZGF0YXN5bmMgLS0gc3luY2hyb25pemUgYXQgbGVhc3QgdGhlIGRhdGEgcGFydCBvZiBhIGZpbGUgd2l0aCAKKysgICB0aGUgdW5kZXJseWluZyBtZWRpYS4gTGludXggdmVyc2lvbi4gCisrCisrICAgQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC1jYW5jZWwuaD4KKysjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKysjaW5jbHVkZSA8YnAtY2hlY2tzLmg+CisrCisrI2luY2x1ZGUgPGtlcm5lbC1mZWF0dXJlcy5oPgorKworKyNpZiBkZWZpbmVkIF9fTlJfZmRhdGFzeW5jICYmICFkZWZpbmVkIF9fQVNTVU1FX0ZEQVRBU1lOQworK3N0YXRpYyBpbnQgX19oYXZlX25vX2ZkYXRhc3luYzsKKysjZW5kaWYKKysKKytzdGF0aWMgaW50CisrZG9fZmRhdGFzeW5jIChpbnQgZmQpCisreworKyNpZmRlZiBfX0FTU1VNRV9GREFUQVNZTkMKKysgIHJldHVybiBJTkxJTkVfU1lTQ0FMTCAoZmRhdGFzeW5jLCAxLCBmZCk7CisrI2VsaWYgZGVmaW5lZCBfX05SX2ZkYXRhc3luYworKyAgaWYgKCFfX2J1aWx0aW5fZXhwZWN0IChfX2hhdmVfbm9fZmRhdGFzeW5jLCAwKSkKKysgICAgeworKyAgICAgIGludCByZXN1bHQgPSBJTkxJTkVfU1lTQ0FMTCAoZmRhdGFzeW5jLCAxLCBmZCk7CisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCwgMCkgIT0gLTEgfHwgZXJybm8gIT0gRU5PU1lTKQorKwlyZXR1cm4gcmVzdWx0OworKworKyAgICAgIF9faGF2ZV9ub19mZGF0YXN5bmMgPSAxOworKyAgICB9CisrI2VuZGlmCisrICByZXR1cm4gSU5MSU5FX1NZU0NBTEwgKGZzeW5jLCAxLCBmZCk7CisrfQorKworK2ludAorK19fZmRhdGFzeW5jIChpbnQgZmQpCisreworKyAgaWYgKFNJTkdMRV9USFJFQURfUCkKKysgICAgcmV0dXJuIGRvX2ZkYXRhc3luYyAoZmQpOworKworKyAgaW50IG9sZHR5cGUgPSBMSUJDX0NBTkNFTF9BU1lOQyAoKTsKKysKKysgIGludCByZXN1bHQgPSBkb19mZGF0YXN5bmMgKGZkKTsKKysKKysgIExJQkNfQ0FOQ0VMX1JFU0VUIChvbGR0eXBlKTsKKysKKysgIHJldHVybiByZXN1bHQ7CisrfQorKworK3dlYWtfYWxpYXMgKF9fZmRhdGFzeW5jLCBmZGF0YXN5bmMpCisrCitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9rZXJuZWwtZmVhdHVyZXMuaCBnbGliYy0yLjEzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2tlcm5lbC1mZWF0dXJlcy5oCistLS0gZ2xpYmMtMi4xMy5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2tlcm5lbC1mZWF0dXJlcy5oCTIwMDktMTEtMTMgMDA6NTA6NDUuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi4xMy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9rZXJuZWwtZmVhdHVyZXMuaAkyMDA5LTExLTEzIDAwOjUxOjA0LjAwMDAwMDAwMCArMDEwMAorQEAgLTQ1OSw2ICs0NTksMTIgQEAKKyAjIGRlZmluZSBfX0FTU1VNRV9GVVRFWF9MT0NLX1BJCTEKKyAjZW5kaWYKKyAKKysvKiBTdXBwb3J0IGZvciBmc3luY2RhdGEgc3lzY2FsbCB3YXMgYWRkZWQgaW4gMi42LjIyIG9uIGFscGhhLCBidXQgaXQKKysgICB3YXMgYWxyZWFkeSBwcmVzZW50IGluIDIuMCBrZXJuZWxzIG9uIG90aGVyIGFyY2hpdGVjdHVyZXMuICAqLworKyNpZiAoIWRlZmluZWQgX19hbHBoYSB8fCBfX0xJTlVYX0tFUk5FTF9WRVJTSU9OID49IDB4MDIwNjE2KQorKyMgZGVmaW5lIF9fQVNTVU1FX0ZEQVRBU1lOQwkxCisrI2VuZGlmCisrCisgLyogU3VwcG9ydCBmb3IgdXRpbWVuc2F0IHN5c2NhbGwgd2FzIGFkZGVkIGluIDIuNi4yMiwgb24gU0gKKyAgICBvbmx5IGFmdGVyIDIuNi4yMi1yYzEuICAqLworICNpZiBfX0xJTlVYX0tFUk5FTF9WRVJTSU9OID49IDB4MDIwNjE2IFwKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5c2NhbGxzLmxpc3QgZ2xpYmMtMi4xMy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zeXNjYWxscy5saXN0CistLS0gZ2xpYmMtMi4xMy5vcmlnL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5c2NhbGxzLmxpc3QJMjAwOC0wOC0wMiAwMToyOTowOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5c2NhbGxzLmxpc3QJMjAwOS0xMS0xMyAwMDo1MTowNC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMSw3ICsxMSw2IEBACisgZXBvbGxfY3JlYXRlMQlFWFRSQQllcG9sbF9jcmVhdGUxCWk6aQllcG9sbF9jcmVhdGUxCisgZXBvbGxfY3RsCUVYVFJBCWVwb2xsX2N0bAlpOmlpaXAJZXBvbGxfY3RsCisgZXBvbGxfd2FpdAlFWFRSQQllcG9sbF93YWl0CUNpOmlwaWkJZXBvbGxfd2FpdAorLWZkYXRhc3luYwktCWZkYXRhc3luYwlDaTppCWZkYXRhc3luYworIGZsb2NrCQktCWZsb2NrCQlpOmlpCV9fZmxvY2sJCWZsb2NrCisgZm9yawkJLQlmb3JrCQlpOglfX2xpYmNfZm9yawlfX2ZvcmsgZm9yaworIGdldF9rZXJuZWxfc3ltcwlFWFRSQQlnZXRfa2VybmVsX3N5bXMJaTpwCWdldF9rZXJuZWxfc3ltcwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvNTMwLWFscGhhLWZpeC1ydGxkLWZQSUMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy81MzAtYWxwaGEtZml4LXJ0bGQtZlBJQy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmFlOWI1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvNTMwLWFscGhhLWZpeC1ydGxkLWZQSUMucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorMjAwOS0wNS0yNiAgQXVyZWxpZW4gSmFybm8gIDxhdXJlbGllbkBhdXJlbDMyLm5ldD4KKworCSogc3lzZGVwcy9hbHBoYS9NYWtlZmlsZSAoQ0ZMQUdTLXJ0bGQuYyk6IGFkZCAkKFBJQy1jY2ZsYWcpLgorCisgcG9ydHMvc3lzZGVwcy9hbHBoYS9NYWtlZmlsZSB8ICAgIDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvYWxwaGEvTWFrZWZpbGUgZ2xpYmMtMi4xMy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvYWxwaGEvTWFrZWZpbGUKKy0tLSBnbGliYy0yLjEzLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL2FscGhhL01ha2VmaWxlCTIwMDktMDUtMTYgMTA6MzY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvYWxwaGEvTWFrZWZpbGUJMjAwOS0xMS0xMyAwMDo1MToxMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zNSw3ICszNSw4IEBACisgCisgaWZlcSAoJChzdWJkaXIpLGVsZikKKyAjIFRoZSBsZC5zbyBzdGFydHVwIGNvZGUgY2Fubm90IHVzZSBsaXRlcmFscyB1bnRpbCBpdCBzZWxmLXJlbG9jYXRlcy4KKy1DRkxBR1MtcnRsZC5jID0gLW1idWlsZC1jb25zdGFudHMKKysjIEl0IHVzZXMgbW9yZSB0aGFuIDY0ayBmb3IgdGhlIHNtYWxsIGRhdGEgYXJlYS4KKytDRkxBR1MtcnRsZC5jID0gLW1idWlsZC1jb25zdGFudHMgJChQSUMtY2NmbGFnKQorIGVuZGlmCisgCisgIyBCdWlsZCBldmVyeXRoaW5nIHdpdGggZnVsbCBJRUVFIG1hdGggc3VwcG9ydCwgYW5kIHdpdGggZHluYW1pYyByb3VuZGluZzsKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL3BvcnRzL3N5c2RlcHMvYWxwaGEvTWFrZWZpbGUgZ2xpYmMtMi4xMy9wb3J0cy9zeXNkZXBzL2FscGhhL01ha2VmaWxlCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy81NjAtcHBjLWF0b21pYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzU2MC1wcGMtYXRvbWljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMWNiOTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy81NjAtcHBjLWF0b21pYy5wYXRjaApAQCAtMCwwICsxLDQxNSBAQAorc25pcGVkIGZyb20gc3VzZQorCitJbmRleDogc3lzZGVwcy9wb3dlcnBjL2JpdHMvYXRvbWljLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JDUyBmaWxlOiAvY3ZzL2dsaWJjL2xpYmMvc3lzZGVwcy9wb3dlcnBjL2JpdHMvYXRvbWljLmgsdgorcmV0cmlldmluZyByZXZpc2lvbiAxLjE3CitkaWZmIC11IC1hIC1wIC1yMS4xNyBhdG9taWMuaAorCitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9zeXNkZXBzL3Bvd2VycGMvYml0cy9hdG9taWMuaCBnbGliYy0yLjEzL3N5c2RlcHMvcG93ZXJwYy9iaXRzL2F0b21pYy5oCistLS0gZ2xpYmMtMi4xMy5vcmlnL3N5c2RlcHMvcG93ZXJwYy9iaXRzL2F0b21pYy5oCTIwMDctMDMtMjYgMjI6MTU6MjguMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMy9zeXNkZXBzL3Bvd2VycGMvYml0cy9hdG9taWMuaAkyMDA5LTExLTEzIDAwOjUxOjE5LjAwMDAwMDAwMCArMDEwMAorQEAgLTg1LDE0ICs4NSwxNCBAQAorICAgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fdG1wOwkJCQkJCSAgICAgIFwKKyAgICAgICBfX3R5cGVvZiAobWVtKSAgX19tZW1wID0gKG1lbSk7CQkJCQkgICAgICBcCisgICAgICAgX19hc20gX192b2xhdGlsZSAoCQkJCQkJICAgICAgXAorLQkJICAgICAgICAiMToJbHdhcngJJTAsMCwlMSIgTVVURVhfSElOVF9BQ1EgIlxuIgkgICAgICBcCisrCQkgICAgICAgICIxOglsd2FyeAklMCwleTEiIE1VVEVYX0hJTlRfQUNRICJcbiIJICAgICAgXAorIAkJICAgICAgICAiCWNtcHcJJTAsJTJcbiIJCQkgICAgICBcCisgCQkgICAgICAgICIJYm5lCTJmXG4iCQkJCSAgICAgIFwKKy0JCSAgICAgICAgIglzdHdjeC4JJTMsMCwlMVxuIgkJCSAgICAgIFwKKysJCSAgICAgICAgIglzdHdjeC4JJTMsJXkxXG4iCQkJICAgICAgXAorIAkJICAgICAgICAiCWJuZS0JMWJcbiIJCQkJICAgICAgXAorIAkJICAgICAgICAiMjoJIiBfX0FSQ0hfQUNRX0lOU1RSCQkJICAgICAgXAorLQkJICAgICAgICA6ICI9JnIiIChfX3RtcCkJCQkJCSAgICAgIFwKKy0JCSAgICAgICAgOiAiYiIgKF9fbWVtcCksICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCSAgICAgIFwKKysJCSAgICAgICAgOiAiPSZyIiAoX190bXApLCAiK1oiICgqX19tZW1wKQkJCSAgICAgIFwKKysJCSAgICAgICAgOiAiciIgKG9sZHZhbCksICJyIiAobmV3dmFsKQkJCSAgICAgIFwKKyAJCSAgICAgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkgICAgICBcCisgICAgICAgX190bXA7CQkJCQkJCQkgICAgICBcCisgICB9KQorQEAgLTEwMiwxNCArMTAyLDE0IEBACisgICAgICAgX190eXBlb2YgKCoobWVtKSkgX190bXA7CQkJCQkJICAgICAgXAorICAgICAgIF9fdHlwZW9mIChtZW0pICBfX21lbXAgPSAobWVtKTsJCQkJCSAgICAgIFwKKyAgICAgICBfX2FzbSBfX3ZvbGF0aWxlIChfX0FSQ0hfUkVMX0lOU1RSICJcbiIJCQkJICAgICAgXAorLQkJICAgICAgICAiMToJbHdhcngJJTAsMCwlMSIgTVVURVhfSElOVF9SRUwgIlxuIgkgICAgICBcCisrCQkgICAgICAgICIxOglsd2FyeAklMCwleTEiIE1VVEVYX0hJTlRfUkVMICJcbiIJICAgICAgXAorIAkJICAgICAgICAiCWNtcHcJJTAsJTJcbiIJCQkgICAgICBcCisgCQkgICAgICAgICIJYm5lCTJmXG4iCQkJCSAgICAgIFwKKy0JCSAgICAgICAgIglzdHdjeC4JJTMsMCwlMVxuIgkJCSAgICAgIFwKKysJCSAgICAgICAgIglzdHdjeC4JJTMsJXkxXG4iCQkJICAgICAgXAorIAkJICAgICAgICAiCWJuZS0JMWJcbiIJCQkJICAgICAgXAorIAkJICAgICAgICAiMjoJIgkJCQkJICAgICAgXAorLQkJICAgICAgICA6ICI9JnIiIChfX3RtcCkJCQkJCSAgICAgIFwKKy0JCSAgICAgICAgOiAiYiIgKF9fbWVtcCksICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCSAgICAgIFwKKysJCSAgICAgICAgOiAiPSZyIiAoX190bXApLCAiK1oiIChfX21lbXApCQkJICAgICAgXAorKwkJICAgICAgICA6ICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkJICAgICAgXAorIAkJICAgICAgICA6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgICBfX3RtcDsJCQkJCQkJCSAgICAgIFwKKyAgIH0pCitAQCAtMTE4LDEyICsxMTgsMTIgQEAKKyAgICh7CQkJCQkJCQkJICAgICAgXAorICAgICBfX3R5cGVvZiAoKm1lbSkgX192YWw7CQkJCQkJICAgICAgXAorICAgICBfX2FzbSBfX3ZvbGF0aWxlICgJCQkJCQkJICAgICAgXAorLQkJICAgICAgIjE6CWx3YXJ4CSUwLDAsJTIiIE1VVEVYX0hJTlRfQUNRICJcbiIJICAgICAgXAorLQkJICAgICAgIgkJc3R3Y3guCSUzLDAsJTJcbiIJCQkgICAgICBcCisrCQkgICAgICAiMToJbHdhcngJJTAsJXkxIiBNVVRFWF9ISU5UX0FDUSAiXG4iCSAgICAgIFwKKysJCSAgICAgICIJCXN0d2N4LgklMiwleTFcbiIJCQkgICAgICBcCisgCQkgICAgICAiCQlibmUtCTFiXG4iCQkJCSAgICAgIFwKKyAJCSAgICAgICIgICAiIF9fQVJDSF9BQ1FfSU5TVFIJCQkJICAgICAgXAorLQkJICAgICAgOiAiPSZyIiAoX192YWwpLCAiPW0iICgqbWVtKQkJCSAgICAgIFwKKy0JCSAgICAgIDogImIiIChtZW0pLCAiciIgKHZhbHVlKSwgIm0iICgqbWVtKQkJICAgICAgXAorKwkJICAgICAgOiAiPSZyIiAoX192YWwpLCAiK1oiICgqbWVtKQkJCSAgICAgIFwKKysJCSAgICAgIDogInIiICh2YWx1ZSkJCQkJCSAgICAgIFwKKyAJCSAgICAgIDogImNyMCIsICJtZW1vcnkiKTsJCQkJICAgICAgXAorICAgICBfX3ZhbDsJCQkJCQkJCSAgICAgIFwKKyAgIH0pCitAQCAtMTMyLDExICsxMzIsMTEgQEAKKyAgICh7CQkJCQkJCQkJICAgICAgXAorICAgICBfX3R5cGVvZiAoKm1lbSkgX192YWw7CQkJCQkJICAgICAgXAorICAgICBfX2FzbSBfX3ZvbGF0aWxlIChfX0FSQ0hfUkVMX0lOU1RSICJcbiIJCQkJICAgICAgXAorLQkJICAgICAgIjE6CWx3YXJ4CSUwLDAsJTIiIE1VVEVYX0hJTlRfUkVMICJcbiIJICAgICAgXAorLQkJICAgICAgIgkJc3R3Y3guCSUzLDAsJTJcbiIJCQkgICAgICBcCisrCQkgICAgICAiMToJbHdhcngJJTAsJXkxIiBNVVRFWF9ISU5UX1JFTCAiXG4iCSAgICAgIFwKKysJCSAgICAgICIJCXN0d2N4LgklMiwleTFcbiIJCQkgICAgICBcCisgCQkgICAgICAiCQlibmUtCTFiIgkJCQkgICAgICBcCistCQkgICAgICA6ICI9JnIiIChfX3ZhbCksICI9bSIgKCptZW0pCQkJICAgICAgXAorLQkJICAgICAgOiAiYiIgKG1lbSksICJyIiAodmFsdWUpLCAibSIgKCptZW0pCQkgICAgICBcCisrCQkgICAgICA6ICI9JnIiIChfX3ZhbCksICIrWiIgKCptZW0pCQkJICAgICAgXAorKwkJICAgICAgOiAiciIgKHZhbHVlKQkJCQkJICAgICAgXAorIAkJICAgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkgICAgICBcCisgICAgIF9fdmFsOwkJCQkJCQkJICAgICAgXAorICAgfSkKK0BAIC0xNDQsMTIgKzE0NCwxMiBAQAorICNkZWZpbmUgX19hcmNoX2F0b21pY19leGNoYW5nZV9hbmRfYWRkXzMyKG1lbSwgdmFsdWUpIFwKKyAgICh7CQkJCQkJCQkJICAgICAgXAorICAgICBfX3R5cGVvZiAoKm1lbSkgX192YWwsIF9fdG1wOwkJCQkJICAgICAgXAorLSAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbHdhcngJJTAsMCwlM1xuIgkJCSAgICAgIFwKKy0JCSAgICAgICIJCWFkZAklMSwlMCwlNFxuIgkJCSAgICAgIFwKKy0JCSAgICAgICIJCXN0d2N4LgklMSwwLCUzXG4iCQkJICAgICAgXAorKyAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbHdhcngJJTAsJXkyXG4iCQkJICAgICAgXAorKwkJICAgICAgIgkJYWRkCSUxLCUwLCUzXG4iCQkJICAgICAgXAorKwkJICAgICAgIgkJc3R3Y3guCSUxLCV5MlxuIgkJCSAgICAgIFwKKyAJCSAgICAgICIJCWJuZS0JMWIiCQkJCSAgICAgIFwKKy0JCSAgICAgIDogIj0mYiIgKF9fdmFsKSwgIj0mciIgKF9fdG1wKSwgIj1tIiAoKm1lbSkJICAgICAgXAorLQkJICAgICAgOiAiYiIgKG1lbSksICJyIiAodmFsdWUpLCAibSIgKCptZW0pCQkgICAgICBcCisrCQkgICAgICA6ICI9JmIiIChfX3ZhbCksICI9JnIiIChfX3RtcCksICIrWiIgKCptZW0pCSAgICAgIFwKKysJCSAgICAgIDogInIiICh2YWx1ZSkJCQkJCSAgICAgIFwKKyAJCSAgICAgIDogImNyMCIsICJtZW1vcnkiKTsJCQkJICAgICAgXAorICAgICBfX3ZhbDsJCQkJCQkJCSAgICAgIFwKKyAgIH0pCitAQCAtMTU3LDEyICsxNTcsMTIgQEAKKyAjZGVmaW5lIF9fYXJjaF9hdG9taWNfaW5jcmVtZW50X3ZhbF8zMihtZW0pIFwKKyAgICh7CQkJCQkJCQkJICAgICAgXAorICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX3ZhbDsJCQkJCQkgICAgICBcCistICAgIF9fYXNtIF9fdm9sYXRpbGUgKCIxOglsd2FyeAklMCwwLCUyXG4iCQkJICAgICAgXAorKyAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbHdhcngJJTAsJXkxXG4iCQkJICAgICAgXAorIAkJICAgICAgIgkJYWRkaQklMCwlMCwxXG4iCQkJICAgICAgXAorLQkJICAgICAgIgkJc3R3Y3guCSUwLDAsJTJcbiIJCQkgICAgICBcCisrCQkgICAgICAiCQlzdHdjeC4JJTAsJXkxXG4iCQkJICAgICAgXAorIAkJICAgICAgIgkJYm5lLQkxYiIJCQkJICAgICAgXAorLQkJICAgICAgOiAiPSZiIiAoX192YWwpLCAiPW0iICgqbWVtKQkJCSAgICAgIFwKKy0JCSAgICAgIDogImIiIChtZW0pLCAibSIgKCptZW0pCQkJCSAgICAgIFwKKysJCSAgICAgIDogIj0mYiIgKF9fdmFsKSwgIitaIiAoKm1lbSkJCQkgICAgICBcCisrCQkgICAgICA6CQkJCQkJCSAgICAgIFwKKyAJCSAgICAgIDogImNyMCIsICJtZW1vcnkiKTsJCQkJICAgICAgXAorICAgICBfX3ZhbDsJCQkJCQkJCSAgICAgIFwKKyAgIH0pCitAQCAtMTcwLDI3ICsxNzAsMjcgQEAKKyAjZGVmaW5lIF9fYXJjaF9hdG9taWNfZGVjcmVtZW50X3ZhbF8zMihtZW0pIFwKKyAgICh7CQkJCQkJCQkJICAgICAgXAorICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX3ZhbDsJCQkJCQkgICAgICBcCistICAgIF9fYXNtIF9fdm9sYXRpbGUgKCIxOglsd2FyeAklMCwwLCUyXG4iCQkJICAgICAgXAorKyAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbHdhcngJJTAsJXkxXG4iCQkJICAgICAgXAorIAkJICAgICAgIgkJc3ViaQklMCwlMCwxXG4iCQkJICAgICAgXAorLQkJICAgICAgIgkJc3R3Y3guCSUwLDAsJTJcbiIJCQkgICAgICBcCisrCQkgICAgICAiCQlzdHdjeC4JJTAsJXkxXG4iCQkJICAgICAgXAorIAkJICAgICAgIgkJYm5lLQkxYiIJCQkJICAgICAgXAorLQkJICAgICAgOiAiPSZiIiAoX192YWwpLCAiPW0iICgqbWVtKQkJCSAgICAgIFwKKy0JCSAgICAgIDogImIiIChtZW0pLCAibSIgKCptZW0pCQkJCSAgICAgIFwKKysJCSAgICAgIDogIj0mYiIgKF9fdmFsKSwgIitaIiAoKm1lbSkJCQkgICAgICBcCisrCQkgICAgICA6CQkJCQkJCSAgICAgIFwKKyAJCSAgICAgIDogImNyMCIsICJtZW1vcnkiKTsJCQkJICAgICAgXAorICAgICBfX3ZhbDsJCQkJCQkJCSAgICAgIFwKKyAgIH0pCisgCisgI2RlZmluZSBfX2FyY2hfYXRvbWljX2RlY3JlbWVudF9pZl9wb3NpdGl2ZV8zMihtZW0pIFwKKyAgICh7IGludCBfX3ZhbCwgX190bXA7CQkJCQkJCSAgICAgIFwKKy0gICAgIF9fYXNtIF9fdm9sYXRpbGUgKCIxOglsd2FyeAklMCwwLCUzXG4iCQkJICAgICAgXAorKyAgICAgX19hc20gX192b2xhdGlsZSAoIjE6CWx3YXJ4CSUwLCV5MlxuIgkJCSAgICAgIFwKKyAJCSAgICAgICAiCWNtcHdpCTAsJTAsMFxuIgkJCSAgICAgIFwKKyAJCSAgICAgICAiCWFkZGkJJTEsJTAsLTFcbiIJCQkgICAgICBcCisgCQkgICAgICAgIglibGUJMmZcbiIJCQkJICAgICAgXAorLQkJICAgICAgICIJc3R3Y3guCSUxLDAsJTNcbiIJCQkgICAgICBcCisrCQkgICAgICAgIglzdHdjeC4JJTEsJXkyXG4iCQkJICAgICAgXAorIAkJICAgICAgICIJYm5lLQkxYlxuIgkJCQkgICAgICBcCisgCQkgICAgICAgIjI6CSIgX19BUkNIX0FDUV9JTlNUUgkJCSAgICAgIFwKKy0JCSAgICAgICA6ICI9JmIiIChfX3ZhbCksICI9JnIiIChfX3RtcCksICI9bSIgKCptZW0pCSAgICAgIFwKKy0JCSAgICAgICA6ICJiIiAobWVtKSwgIm0iICgqbWVtKQkJCQkgICAgICBcCisrCQkgICAgICAgOiAiPSZiIiAoX192YWwpLCAiPSZyIiAoX190bXApLCAiK1oiICgqbWVtKQkgICAgICBcCisrCQkgICAgICAgOgkJCQkJCSAgICAgIFwKKyAJCSAgICAgICA6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgIF9fdmFsOwkJCQkJCQkJICAgICAgXAorICAgfSkKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvYml0cy9hdG9taWMuaCBnbGliYy0yLjEzL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvYml0cy9hdG9taWMuaAorLS0tIGdsaWJjLTIuMTMub3JpZy9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2JpdHMvYXRvbWljLmgJMjAwNy0wMy0yNiAyMjoxNTo0NS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEzL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvYml0cy9hdG9taWMuaAkyMDA5LTExLTEzIDAwOjUxOjE5LjAwMDAwMDAwMCArMDEwMAorQEAgLTQ0LDE0ICs0NCwxNCBAQAorICh7CQkJCQkJCQkJICAgICAgXAorICAgdW5zaWduZWQgaW50IF9fdG1wOwkJCQkJCQkgICAgICBcCisgICBfX2FzbSBfX3ZvbGF0aWxlICgJCQkJCQkJICAgICAgXAorLQkJICAgICIxOglsd2FyeAklMCwwLCUxIiBNVVRFWF9ISU5UX0FDUSAiXG4iCQkgICAgICBcCisrCQkgICAgIjE6CWx3YXJ4CSUwLCV5MSIgTVVURVhfSElOVF9BQ1EgIlxuIgkJICAgICAgXAorIAkJICAgICIJc3ViZi4JJTAsJTIsJTBcbiIJCQkJICAgICAgXAorIAkJICAgICIJYm5lCTJmXG4iCQkJCQkgICAgICBcCistCQkgICAgIglzdHdjeC4JJTMsMCwlMVxuIgkJCQkgICAgICBcCisrCQkgICAgIglzdHdjeC4JJTMsJXkxXG4iCQkJCSAgICAgIFwKKyAJCSAgICAiCWJuZS0JMWJcbiIJCQkJCSAgICAgIFwKKyAJCSAgICAiMjoJIiBfX0FSQ0hfQUNRX0lOU1RSCQkJCSAgICAgIFwKKy0JCSAgICA6ICI9JnIiIChfX3RtcCkJCQkJCSAgICAgIFwKKy0JCSAgICA6ICJiIiAobWVtKSwgInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCSAgICAgIFwKKysJCSAgICA6ICI9JnIiIChfX3RtcCksICIrWiIgKCoobWVtKSkJCQkgICAgICBcCisrCQkgICAgOiAiciIgKG9sZHZhbCksICJyIiAobmV3dmFsKQkJCSAgICAgIFwKKyAJCSAgICA6ICJjcjAiLCAibWVtb3J5Iik7CQkJCQkgICAgICBcCisgICBfX3RtcCAhPSAwOwkJCQkJCQkJICAgICAgXAorIH0pCitAQCAtNjAsMTQgKzYwLDE0IEBACisgKHsJCQkJCQkJCQkgICAgICBcCisgICB1bnNpZ25lZCBpbnQgX190bXA7CQkJCQkJCSAgICAgIFwKKyAgIF9fYXNtIF9fdm9sYXRpbGUgKF9fQVJDSF9SRUxfSU5TVFIgIlxuIgkJCQkgICAgICBcCistCQkgICAgIjE6CWx3YXJ4CSUwLDAsJTEiIE1VVEVYX0hJTlRfUkVMICJcbiIJCSAgICAgIFwKKysJCSAgICAiMToJbHdhcngJJTAsJXkxIiBNVVRFWF9ISU5UX1JFTCAiXG4iCQkgICAgICBcCisgCQkgICAgIglzdWJmLgklMCwlMiwlMFxuIgkJCQkgICAgICBcCisgCQkgICAgIglibmUJMmZcbiIJCQkJCSAgICAgIFwKKy0JCSAgICAiCXN0d2N4LgklMywwLCUxXG4iCQkJCSAgICAgIFwKKysJCSAgICAiCXN0d2N4LgklMywleTFcbiIJCQkJICAgICAgXAorIAkJICAgICIJYm5lLQkxYlxuIgkJCQkJICAgICAgXAorIAkJICAgICIyOgkiCQkJCQkJICAgICAgXAorLQkJICAgIDogIj0mciIgKF9fdG1wKQkJCQkJICAgICAgXAorLQkJICAgIDogImIiIChtZW0pLCAiciIgKG9sZHZhbCksICJyIiAobmV3dmFsKQkJICAgICAgXAorKwkJICAgIDogIj0mciIgKF9fdG1wKSwgIitaIiAoKihtZW0pKQkJCSAgICAgIFwKKysJCSAgICA6ICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkJICAgICAgXAorIAkJICAgIDogImNyMCIsICJtZW1vcnkiKTsJCQkJCSAgICAgIFwKKyAgIF9fdG1wICE9IDA7CQkJCQkJCQkgICAgICBcCisgfSkKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvYml0cy9hdG9taWMuaCBnbGliYy0yLjEzL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvYml0cy9hdG9taWMuaAorLS0tIGdsaWJjLTIuMTMub3JpZy9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2JpdHMvYXRvbWljLmgJMjAwNy0wMy0yNiAyMjoxNjowMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEzL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvYml0cy9hdG9taWMuaAkyMDA5LTExLTEzIDAwOjUxOjE5LjAwMDAwMDAwMCArMDEwMAorQEAgLTQ0LDE0ICs0NCwxNCBAQAorICh7CQkJCQkJCQkJICAgICAgXAorICAgdW5zaWduZWQgaW50IF9fdG1wLCBfX3RtcDI7CQkJCQkJICAgICAgXAorICAgX19hc20gX192b2xhdGlsZSAoIiAgIGNscmxkaSAgJTEsJTEsMzJcbiIJCQkJICAgICAgXAorLQkJICAgICIxOglsd2FyeAklMCwwLCUyIiBNVVRFWF9ISU5UX0FDUSAiXG4iCSAJICAgICAgXAorKwkJICAgICIxOglsd2FyeAklMCwleTIiIE1VVEVYX0hJTlRfQUNRICJcbiIJIAkgICAgICBcCisgCQkgICAgIglzdWJmLgklMCwlMSwlMFxuIgkJCQkgICAgICBcCisgCQkgICAgIglibmUJMmZcbiIJCQkJCSAgICAgIFwKKy0JCSAgICAiCXN0d2N4LgklNCwwLCUyXG4iCQkJCSAgICAgIFwKKysJCSAgICAiCXN0d2N4LgklNCwleTJcbiIJCQkJICAgICAgXAorIAkJICAgICIJYm5lLQkxYlxuIgkJCQkJICAgICAgXAorIAkJICAgICIyOgkiIF9fQVJDSF9BQ1FfSU5TVFIJCQkJICAgICAgXAorLQkJICAgIDogIj0mciIgKF9fdG1wKSwgIj1yIiAoX190bXAyKQkJCSAgICAgIFwKKy0JCSAgICA6ICJiIiAobWVtKSwgIjEiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCSAgICAgIFwKKysJCSAgICA6ICI9JnIiIChfX3RtcCksICI9ciIgKF9fdG1wMiksICIrWiIgKCoobWVtKSkJICAgICAgXAorKwkJICAgIDogIjEiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCQkgICAgICBcCisgCQkgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkJICAgICAgXAorICAgX190bXAgIT0gMDsJCQkJCQkJCSAgICAgIFwKKyB9KQorQEAgLTYxLDE0ICs2MSwxNCBAQAorICAgdW5zaWduZWQgaW50IF9fdG1wLCBfX3RtcDI7CQkJCQkJICAgICAgXAorICAgX19hc20gX192b2xhdGlsZSAoX19BUkNIX1JFTF9JTlNUUiAiXG4iCQkJCSAgICAgIFwKKyAJCSAgICAiICAgY2xybGRpICAlMSwlMSwzMlxuIgkJCQkgICAgICBcCistCQkgICAgIjE6CWx3YXJ4CSUwLDAsJTIiIE1VVEVYX0hJTlRfUkVMICJcbiIJCSAgICAgIFwKKysJCSAgICAiMToJbHdhcngJJTAsJXkyIiBNVVRFWF9ISU5UX1JFTCAiXG4iCQkgICAgICBcCisgCQkgICAgIglzdWJmLgklMCwlMSwlMFxuIgkJCQkgICAgICBcCisgCQkgICAgIglibmUJMmZcbiIJCQkJCSAgICAgIFwKKy0JCSAgICAiCXN0d2N4LgklNCwwLCUyXG4iCQkJCSAgICAgIFwKKysJCSAgICAiCXN0d2N4LgklNCwleTJcbiIJCQkJICAgICAgXAorIAkJICAgICIJYm5lLQkxYlxuIgkJCQkJICAgICAgXAorIAkJICAgICIyOgkiCQkJCQkJICAgICAgXAorLQkJICAgIDogIj0mciIgKF9fdG1wKSwgIj1yIiAoX190bXAyKQkJCSAgICAgIFwKKy0JCSAgICA6ICJiIiAobWVtKSwgIjEiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCSAgICAgIFwKKysJCSAgICA6ICI9JnIiIChfX3RtcCksICI9ciIgKF9fdG1wMiksICIrWiIgKCoobWVtKSkJICAgICAgXAorKwkJICAgIDogIjEiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCQkgICAgICBcCisgCQkgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkJICAgICAgXAorICAgX190bXAgIT0gMDsJCQkJCQkJCSAgICAgIFwKKyB9KQorQEAgLTgyLDE0ICs4MiwxNCBAQAorICh7CQkJCQkJCQkJICAgICAgXAorICAgdW5zaWduZWQgbG9uZwlfX3RtcDsJCQkJCQkJICAgICAgXAorICAgX19hc20gX192b2xhdGlsZSAoCQkJCQkJCSAgICAgIFwKKy0JCSAgICAiMToJbGRhcngJJTAsMCwlMSIgTVVURVhfSElOVF9BQ1EgIlxuIgkJICAgICAgXAorKwkJICAgICIxOglsZGFyeAklMCwleTEiIE1VVEVYX0hJTlRfQUNRICJcbiIJCSAgICAgIFwKKyAJCSAgICAiCXN1YmYuCSUwLCUyLCUwXG4iCQkJCSAgICAgIFwKKyAJCSAgICAiCWJuZQkyZlxuIgkJCQkJICAgICAgXAorLQkJICAgICIJc3RkY3guCSUzLDAsJTFcbiIJCQkJICAgICAgXAorKwkJICAgICIJc3RkY3guCSUzLCV5MVxuIgkJCQkgICAgICBcCisgCQkgICAgIglibmUtCTFiXG4iCQkJCQkgICAgICBcCisgCQkgICAgIjI6CSIgX19BUkNIX0FDUV9JTlNUUgkJCQkgICAgICBcCistCQkgICAgOiAiPSZyIiAoX190bXApCQkJCQkgICAgICBcCistCQkgICAgOiAiYiIgKG1lbSksICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkgICAgICBcCisrCQkgICAgOiAiPSZyIiAoX190bXApLCAiK1oiICgqKG1lbSkpCQkJICAgICAgXAorKwkJICAgIDogInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCQkgICAgICBcCisgCQkgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkJICAgICAgXAorICAgX190bXAgIT0gMDsJCQkJCQkJCSAgICAgIFwKKyB9KQorQEAgLTk4LDE0ICs5OCwxNCBAQAorICh7CQkJCQkJCQkJICAgICAgXAorICAgdW5zaWduZWQgbG9uZwlfX3RtcDsJCQkJCQkJICAgICAgXAorICAgX19hc20gX192b2xhdGlsZSAoX19BUkNIX1JFTF9JTlNUUiAiXG4iCQkJCSAgICAgIFwKKy0JCSAgICAiMToJbGRhcngJJTAsMCwlMiIgTVVURVhfSElOVF9SRUwgIlxuIgkJICAgICAgXAorKwkJICAgICIxOglsZGFyeAklMCwleTEiIE1VVEVYX0hJTlRfUkVMICJcbiIJCSAgICAgIFwKKyAJCSAgICAiCXN1YmYuCSUwLCUyLCUwXG4iCQkJCSAgICAgIFwKKyAJCSAgICAiCWJuZQkyZlxuIgkJCQkJICAgICAgXAorLQkJICAgICIJc3RkY3guCSUzLDAsJTFcbiIJCQkJICAgICAgXAorKwkJICAgICIJc3RkY3guCSUzLCV5MVxuIgkJCQkgICAgICBcCisgCQkgICAgIglibmUtCTFiXG4iCQkJCQkgICAgICBcCisgCQkgICAgIjI6CSIJCQkJCQkgICAgICBcCistCQkgICAgOiAiPSZyIiAoX190bXApCQkJCQkgICAgICBcCistCQkgICAgOiAiYiIgKG1lbSksICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkgICAgICBcCisrCQkgICAgOiAiPSZyIiAoX190bXApLCAiK1oiICgqKG1lbSkpCQkJICAgICAgXAorKwkJICAgIDogInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJCQkgICAgICBcCisgCQkgICAgOiAiY3IwIiwgIm1lbW9yeSIpOwkJCQkJICAgICAgXAorICAgX190bXAgIT0gMDsJCQkJCQkJCSAgICAgIFwKKyB9KQorQEAgLTExNSwxNCArMTE1LDE0IEBACisgICAgICAgX190eXBlb2YgKCoobWVtKSkgX190bXA7CQkJCQkJICAgICAgXAorICAgICAgIF9fdHlwZW9mIChtZW0pICBfX21lbXAgPSAobWVtKTsJCQkJCSAgICAgIFwKKyAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgJCQkJCQkgICAgICBcCistCQkgICAgICAgICIxOglsZGFyeAklMCwwLCUxIiBNVVRFWF9ISU5UX0FDUSAiXG4iCSAgICAgIFwKKysJCSAgICAgICAgIjE6CWxkYXJ4CSUwLCV5MSIgTVVURVhfSElOVF9BQ1EgIlxuIgkgICAgICBcCisgCQkgICAgICAgICIJY21wZAklMCwlMlxuIgkJCSAgICAgIFwKKyAJCSAgICAgICAgIglibmUJMmZcbiIJCQkJICAgICAgXAorLQkJICAgICAgICAiCXN0ZGN4LgklMywwLCUxXG4iCQkJICAgICAgXAorKwkJICAgICAgICAiCXN0ZGN4LgklMywleTFcbiIJCQkgICAgICBcCisgCQkgICAgICAgICIJYm5lLQkxYlxuIgkJCQkgICAgICBcCisgCQkgICAgICAgICIyOgkiIF9fQVJDSF9BQ1FfSU5TVFIJCQkgICAgICBcCistCQkgICAgICAgIDogIj0mciIgKF9fdG1wKQkJCQkJICAgICAgXAorLQkJICAgICAgICA6ICJiIiAoX19tZW1wKSwgInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJICAgICAgXAorKwkJICAgICAgICA6ICI9JnIiIChfX3RtcCksICIrWiIgKCpfX21lbXApCQkJICAgICAgXAorKwkJICAgICAgICA6ICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkJICAgICAgXAorIAkJICAgICAgICA6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgICBfX3RtcDsJCQkJCQkJCSAgICAgIFwKKyAgIH0pCitAQCAtMTMyLDE0ICsxMzIsMTQgQEAKKyAgICAgICBfX3R5cGVvZiAoKihtZW0pKSBfX3RtcDsJCQkJCQkgICAgICBcCisgICAgICAgX190eXBlb2YgKG1lbSkgIF9fbWVtcCA9IChtZW0pOwkJCQkJICAgICAgXAorICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKF9fQVJDSF9SRUxfSU5TVFIgIlxuIgkJCQkgICAgICBcCistCQkgICAgICAgICIxOglsZGFyeAklMCwwLCUxIiBNVVRFWF9ISU5UX1JFTCAiXG4iCSAgICAgIFwKKysJCSAgICAgICAgIjE6CWxkYXJ4CSUwLCV5MSIgTVVURVhfSElOVF9SRUwgIlxuIgkgICAgICBcCisgCQkgICAgICAgICIJY21wZAklMCwlMlxuIgkJCSAgICAgIFwKKyAJCSAgICAgICAgIglibmUJMmZcbiIJCQkJICAgICAgXAorLQkJICAgICAgICAiCXN0ZGN4LgklMywwLCUxXG4iCQkJICAgICAgXAorKwkJICAgICAgICAiCXN0ZGN4LgklMywleTFcbiIJCQkgICAgICBcCisgCQkgICAgICAgICIJYm5lLQkxYlxuIgkJCQkgICAgICBcCisgCQkgICAgICAgICIyOgkiCQkJCQkgICAgICBcCistCQkgICAgICAgIDogIj0mciIgKF9fdG1wKQkJCQkJICAgICAgXAorLQkJICAgICAgICA6ICJiIiAoX19tZW1wKSwgInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCkJICAgICAgXAorKwkJICAgICAgICA6ICI9JnIiIChfX3RtcCksICIrWiIgKCpfX21lbXApCQkJICAgICAgXAorKwkJICAgICAgICA6ICJyIiAob2xkdmFsKSwgInIiIChuZXd2YWwpCQkJICAgICAgXAorIAkJICAgICAgICA6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgICBfX3RtcDsJCQkJCQkJCSAgICAgIFwKKyAgIH0pCitAQCAtMTQ4LDEyICsxNDgsMTIgQEAKKyAgICAgKHsJCQkJCQkJCQkgICAgICBcCisgICAgICAgX190eXBlb2YgKCptZW0pIF9fdmFsOwkJCQkJCSAgICAgIFwKKyAgICAgICBfX2FzbSBfX3ZvbGF0aWxlIChfX0FSQ0hfUkVMX0lOU1RSICJcbiIJCQkJICAgICAgXAorLQkJCSIxOglsZGFyeAklMCwwLCUyIiBNVVRFWF9ISU5UX0FDUSAiXG4iCSAgICAgIFwKKy0JCQkiCXN0ZGN4LgklMywwLCUyXG4iCQkJICAgICAgXAorKwkJCSIxOglsZGFyeAklMCwleTEiIE1VVEVYX0hJTlRfQUNRICJcbiIJICAgICAgXAorKwkJCSIJc3RkY3guCSUyLCV5MVxuIgkJCSAgICAgIFwKKyAJCQkiCWJuZS0JMWJcbiIJCQkJICAgICAgXAorIAkJICAiICIgX19BUkNIX0FDUV9JTlNUUgkJCQkJICAgICAgXAorLQkJCTogIj0mciIgKF9fdmFsKSwgIj1tIiAoKm1lbSkJCQkgICAgICBcCistCQkJOiAiYiIgKG1lbSksICJyIiAodmFsdWUpLCAibSIgKCptZW0pCQkgICAgICBcCisrCQkJOiAiPSZyIiAoX192YWwpLCAiK1oiICgqKG1lbSkpCQkJICAgICAgXAorKwkJCTogInIiICh2YWx1ZSkJCQkJCSAgICAgIFwKKyAJCQk6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgICBfX3ZhbDsJCQkJCQkJCSAgICAgIFwKKyAgICAgfSkKK0BAIC0xNjIsMTEgKzE2MiwxMSBAQAorICAgICAoewkJCQkJCQkJCSAgICAgIFwKKyAgICAgICBfX3R5cGVvZiAoKm1lbSkgX192YWw7CQkJCQkJICAgICAgXAorICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKF9fQVJDSF9SRUxfSU5TVFIgIlxuIgkJCQkgICAgICBcCistCQkJIjE6CWxkYXJ4CSUwLDAsJTIiIE1VVEVYX0hJTlRfUkVMICJcbiIJICAgICAgXAorLQkJCSIJc3RkY3guCSUzLDAsJTJcbiIJCQkgICAgICBcCisrCQkJIjE6CWxkYXJ4CSUwLCV5MSIgTVVURVhfSElOVF9SRUwgIlxuIgkgICAgICBcCisrCQkJIglzdGRjeC4JJTIsJXkxXG4iCQkJICAgICAgXAorIAkJCSIJYm5lLQkxYiIJCQkJICAgICAgXAorLQkJCTogIj0mciIgKF9fdmFsKSwgIj1tIiAoKm1lbSkJCQkgICAgICBcCistCQkJOiAiYiIgKG1lbSksICJyIiAodmFsdWUpLCAibSIgKCptZW0pCQkgICAgICBcCisrCQkJOiAiPSZyIiAoX192YWwpLCAiK1oiICgqKG1lbSkpCQkJICAgICAgXAorKwkJCTogInIiICh2YWx1ZSkJCQkJCSAgICAgIFwKKyAJCQk6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgICBfX3ZhbDsJCQkJCQkJCSAgICAgIFwKKyAgICAgfSkKK0BAIC0xNzQsMTIgKzE3NCwxMiBAQAorICNkZWZpbmUgX19hcmNoX2F0b21pY19leGNoYW5nZV9hbmRfYWRkXzY0KG1lbSwgdmFsdWUpIFwKKyAgICAgKHsJCQkJCQkJCQkgICAgICBcCisgICAgICAgX190eXBlb2YgKCptZW0pIF9fdmFsLCBfX3RtcDsJCQkJCSAgICAgIFwKKy0gICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbGRhcngJJTAsMCwlM1xuIgkJCSAgICAgIFwKKy0JCQkiCWFkZAklMSwlMCwlNFxuIgkJCSAgICAgIFwKKy0JCQkiCXN0ZGN4LgklMSwwLCUzXG4iCQkJICAgICAgXAorKyAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCIxOglsZGFyeAklMCwleTJcbiIJCQkgICAgICBcCisrCQkJIglhZGQJJTEsJTAsJTNcbiIJCQkgICAgICBcCisrCQkJIglzdGRjeC4JJTEsJXkyXG4iCQkJICAgICAgXAorIAkJCSIJYm5lLQkxYiIJCQkJICAgICAgXAorLQkJCTogIj0mYiIgKF9fdmFsKSwgIj0mciIgKF9fdG1wKSwgIj1tIiAoKm1lbSkJICAgICAgXAorLQkJCTogImIiIChtZW0pLCAiciIgKHZhbHVlKSwgIm0iICgqbWVtKQkJICAgICAgXAorKwkJCTogIj0mYiIgKF9fdmFsKSwgIj0mciIgKF9fdG1wKSwgIitaIiAoKihtZW0pKQkgICAgICBcCisrCQkJOiAiciIgKHZhbHVlKQkJCQkJICAgICAgXAorIAkJCTogImNyMCIsICJtZW1vcnkiKTsJCQkJICAgICAgXAorICAgICAgIF9fdmFsOwkJCQkJCQkJICAgICAgXAorICAgICB9KQorQEAgLTE4NywxMiArMTg3LDEyIEBACisgI2RlZmluZSBfX2FyY2hfYXRvbWljX2luY3JlbWVudF92YWxfNjQobWVtKSBcCisgICAgICh7CQkJCQkJCQkJICAgICAgXAorICAgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fdmFsOwkJCQkJCSAgICAgIFwKKy0gICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbGRhcngJJTAsMCwlMlxuIgkJCSAgICAgIFwKKysgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbGRhcngJJTAsJXkxXG4iCQkJICAgICAgXAorIAkJCSIJYWRkaQklMCwlMCwxXG4iCQkJICAgICAgXAorLQkJCSIJc3RkY3guCSUwLDAsJTJcbiIJCQkgICAgICBcCisrCQkJIglzdGRjeC4JJTAsJXkxXG4iCQkJICAgICAgXAorIAkJCSIJYm5lLQkxYiIJCQkJICAgICAgXAorLQkJCTogIj0mYiIgKF9fdmFsKSwgIj1tIiAoKm1lbSkJCQkgICAgICBcCistCQkJOiAiYiIgKG1lbSksICJtIiAoKm1lbSkJCQkJICAgICAgXAorKwkJCTogIj0mYiIgKF9fdmFsKSwgIitaIiAoKihtZW0pKQkJCSAgICAgIFwKKysJCQk6CQkJCQkJICAgICAgXAorIAkJCTogImNyMCIsICJtZW1vcnkiKTsJCQkJICAgICAgXAorICAgICAgIF9fdmFsOwkJCQkJCQkJICAgICAgXAorICAgICB9KQorQEAgLTIwMCwyNyArMjAwLDI3IEBACisgI2RlZmluZSBfX2FyY2hfYXRvbWljX2RlY3JlbWVudF92YWxfNjQobWVtKSBcCisgICAgICh7CQkJCQkJCQkJICAgICAgXAorICAgICAgIF9fdHlwZW9mICgqKG1lbSkpIF9fdmFsOwkJCQkJCSAgICAgIFwKKy0gICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbGRhcngJJTAsMCwlMlxuIgkJCSAgICAgIFwKKysgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbGRhcngJJTAsJXkxXG4iCQkJICAgICAgXAorIAkJCSIJc3ViaQklMCwlMCwxXG4iCQkJICAgICAgXAorLQkJCSIJc3RkY3guCSUwLDAsJTJcbiIJCQkgICAgICBcCisrCQkJIglzdGRjeC4JJTAsJXkxXG4iCQkJICAgICAgXAorIAkJCSIJYm5lLQkxYiIJCQkJICAgICAgXAorLQkJCTogIj0mYiIgKF9fdmFsKSwgIj1tIiAoKm1lbSkJCQkgICAgICBcCistCQkJOiAiYiIgKG1lbSksICJtIiAoKm1lbSkJCQkJICAgICAgXAorKwkJCTogIj0mYiIgKF9fdmFsKSwgIitaIiAoKihtZW0pKQkJCSAgICAgIFwKKysJCQk6CQkJCQkJICAgICAgXAorIAkJCTogImNyMCIsICJtZW1vcnkiKTsJCQkJICAgICAgXAorICAgICAgIF9fdmFsOwkJCQkJCQkJICAgICAgXAorICAgICB9KQorIAorICNkZWZpbmUgX19hcmNoX2F0b21pY19kZWNyZW1lbnRfaWZfcG9zaXRpdmVfNjQobWVtKSBcCisgICAoeyBpbnQgX192YWwsIF9fdG1wOwkJCQkJCQkgICAgICBcCistICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiMToJbGRhcngJJTAsMCwlM1xuIgkJCSAgICAgIFwKKysgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCIxOglsZGFyeAklMCwleTJcbiIJCQkgICAgICBcCisgCQkgICAgICAgIgljbXBkaQkwLCUwLDBcbiIJCQkgICAgICBcCisgCQkgICAgICAgIglhZGRpCSUxLCUwLC0xXG4iCQkJICAgICAgXAorIAkJICAgICAgICIJYmxlCTJmXG4iCQkJCSAgICAgIFwKKy0JCSAgICAgICAiCXN0ZGN4LgklMSwwLCUzXG4iCQkJICAgICAgXAorKwkJICAgICAgICIJc3RkY3guCSUxLCV5MlxuIgkJCSAgICAgIFwKKyAJCSAgICAgICAiCWJuZS0JMWJcbiIJCQkJICAgICAgXAorIAkJICAgICAgICIyOgkiIF9fQVJDSF9BQ1FfSU5TVFIJCQkgICAgICBcCistCQkgICAgICAgOiAiPSZiIiAoX192YWwpLCAiPSZyIiAoX190bXApLCAiPW0iICgqbWVtKQkgICAgICBcCistCQkgICAgICAgOiAiYiIgKG1lbSksICJtIiAoKm1lbSkJCQkJICAgICAgXAorKwkJICAgICAgIDogIj0mYiIgKF9fdmFsKSwgIj0mciIgKF9fdG1wKSwgIitaIiAoKihtZW0pKQkgICAgICBcCisrCQkgICAgICAgOgkJCQkJCSAgICAgIFwKKyAJCSAgICAgICA6ICJjcjAiLCAibWVtb3J5Iik7CQkJCSAgICAgIFwKKyAgICAgIF9fdmFsOwkJCQkJCQkJICAgICAgXAorICAgfSkKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzU3MC1hcm0tY2lycnVzLWVwOTN4eC1tYXZlcmljay1jcnVuY2gtZnB1LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvNTcwLWFybS1jaXJydXMtZXA5M3h4LW1hdmVyaWNrLWNydW5jaC1mcHUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY0ZGJlYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzU3MC1hcm0tY2lycnVzLWVwOTN4eC1tYXZlcmljay1jcnVuY2gtZnB1LnBhdGNoCkBAIC0wLDAgKzEsMzc0IEBACitodHRwOi8veWFubi5wb3VwZXQuZnJlZS5mci9lcDkzeHgvCitBZGQgc3VwcG9ydCBmb3IgdGhlIE1hdmVyaWNrIENydW5jaCBGUFUgb24gQ2lycnVzIEVQOTNYWCBwcm9jZXNzb3Igc2VyaWVzCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL2dsaWJjLXBvcnRzLTIuMTMvc3lzZGVwcy9hcm0vYml0cy9lbmRpYW4uaCBnbGliYy0yLjEzL2dsaWJjLXBvcnRzLTIuMTMvc3lzZGVwcy9hcm0vYml0cy9lbmRpYW4uaAorLS0tIGdsaWJjLTIuMTMub3JpZy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvYXJtL2JpdHMvZW5kaWFuLmgJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEzL2dsaWJjLXBvcnRzLTIuMTMvc3lzZGVwcy9hcm0vYml0cy9lbmRpYW4uaAkyMDA5LTExLTEzIDAwOjUxOjIyLjAwMDAwMDAwMCArMDEwMAorQEAgLTEyLDcgKzEyLDcgQEAKKyAvKiBGUEEgZmxvYXRpbmcgcG9pbnQgdW5pdHMgYXJlIGFsd2F5cyBiaWctZW5kaWFuLCBpcnJlc3BlY3RpdmUgb2YgdGhlCisgICAgQ1BVIGVuZGlhbm5lc3MuICBWRlAgZmxvYXRpbmcgcG9pbnQgdW5pdHMgdXNlIHRoZSBzYW1lIGVuZGlhbm5lc3MKKyAgICBhcyB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiAgKi8KKy0jaWZkZWYgX19WRlBfRlBfXworKyNpZiBkZWZpbmVkIF9fVkZQX0ZQX18gfHwgZGVmaW5lZCBfX01BVkVSSUNLX18KKyAjZGVmaW5lIF9fRkxPQVRfV09SRF9PUkRFUiBfX0JZVEVfT1JERVIKKyAjZWxzZQorICNkZWZpbmUgX19GTE9BVF9XT1JEX09SREVSIF9fQklHX0VORElBTgorZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL2FybS9mcHUvX19sb25nam1wLlMgZ2xpYmMtMi4xMy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvYXJtL2ZwdS9fX2xvbmdqbXAuUworLS0tIGdsaWJjLTIuMTMub3JpZy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvYXJtL2ZwdS9fX2xvbmdqbXAuUwkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTMvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL2FybS9mcHUvX19sb25nam1wLlMJMjAwOS0xMS0xMyAwMDo1MToyMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zMCw3ICszMCwzMyBAQAorIAltb3ZzCXIwLCByMQkJLyogZ2V0IHRoZSByZXR1cm4gdmFsdWUgaW4gcGxhY2UgKi8KKyAJbW92ZXEJcjAsICMxCQkvKiBjYW4ndCBsZXQgc2V0am1wKCkgcmV0dXJuIHplcm8hICovCisgCisrI2lmZGVmIF9fTUFWRVJJQ0tfXworKwljZmxkcmQJbXZkNCwgIFtpcF0sICM4CisrCW5vcAorKwljZmxkcmQJbXZkNSwgIFtpcF0sICM4CisrCW5vcAorKwljZmxkcmQJbXZkNiwgIFtpcF0sICM4CisrCW5vcAorKwljZmxkcmQJbXZkNywgIFtpcF0sICM4CisrCW5vcAorKwljZmxkcmQJbXZkOCwgIFtpcF0sICM4CisrCW5vcAorKwljZmxkcmQJbXZkOSwgIFtpcF0sICM4CisrCW5vcAorKwljZmxkcmQJbXZkMTAsIFtpcF0sICM4CisrCW5vcAorKwljZmxkcmQJbXZkMTEsIFtpcF0sICM4CisrCW5vcAorKwljZmxkcmQJbXZkMTIsIFtpcF0sICM4CisrCW5vcAorKwljZmxkcmQJbXZkMTMsIFtpcF0sICM4CisrCW5vcAorKwljZmxkcmQJbXZkMTQsIFtpcF0sICM4CisrCW5vcAorKwljZmxkcmQJbXZkMTUsIFtpcF0sICM4CisrI2Vsc2UKKyAJbGZtZmQJZjQsIDQsIFtpcF0gIQkvKiBsb2FkIHRoZSBmbG9hdGluZyBwb2ludCByZWdzICovCisrI2VuZGlmCisgCisgCUxPQURSRUdTKGlhLCBpcCwge3YxLXY2LCBzbCwgZnAsIHNwLCBwY30pCisgRU5EIChfX2xvbmdqbXApCitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvYXJtL2ZwdS9iaXRzL2ZlbnYuaCBnbGliYy0yLjEzL2dsaWJjLXBvcnRzLTIuMTMvc3lzZGVwcy9hcm0vZnB1L2JpdHMvZmVudi5oCistLS0gZ2xpYmMtMi4xMy5vcmlnL2dsaWJjLXBvcnRzLTIuMTMvc3lzZGVwcy9hcm0vZnB1L2JpdHMvZmVudi5oCTIwMDktMDUtMTYgMTA6MzY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvYXJtL2ZwdS9iaXRzL2ZlbnYuaAkyMDA5LTExLTEzIDAwOjUxOjIyLjAwMDAwMDAwMCArMDEwMAorQEAgLTIwLDYgKzIwLDQ1IEBACisgIyBlcnJvciAiTmV2ZXIgdXNlIDxiaXRzL2ZlbnYuaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGZlbnYuaD4gaW5zdGVhZC4iCisgI2VuZGlmCisgCisrI2lmIGRlZmluZWQoX19NQVZFUklDS19fKQorKworKy8qIERlZmluZSBiaXRzIHJlcHJlc2VudGluZyBleGNlcHRpb25zIGluIHRoZSBGUFUgc3RhdHVzIHdvcmQuICAqLworK2VudW0KKysgIHsKKysgICAgRkVfSU5WQUxJRCA9IDEsCisrI2RlZmluZSBGRV9JTlZBTElEIEZFX0lOVkFMSUQKKysgICAgRkVfT1ZFUkZMT1cgPSA0LAorKyNkZWZpbmUgRkVfT1ZFUkZMT1cgRkVfT1ZFUkZMT1cKKysgICAgRkVfVU5ERVJGTE9XID0gOCwKKysjZGVmaW5lIEZFX1VOREVSRkxPVyBGRV9VTkRFUkZMT1cKKysgICAgRkVfSU5FWEFDVCA9IDE2LAorKyNkZWZpbmUgRkVfSU5FWEFDVCBGRV9JTkVYQUNUCisrICB9OworKworKy8qIEFtb3VudCB0byBzaGlmdCBieSB0byBjb252ZXJ0IGFuIGV4Y2VwdGlvbiB0byBhIG1hc2sgYml0LiAgKi8KKysjZGVmaW5lIEZFX0VYQ0VQVF9TSElGVAk1CisrCisrLyogQWxsIHN1cHBvcnRlZCBleGNlcHRpb25zLiAgKi8KKysjZGVmaW5lIEZFX0FMTF9FWENFUFQJXAorKwkoRkVfSU5WQUxJRCB8IEZFX09WRVJGTE9XIHwgRkVfVU5ERVJGTE9XIHwgRkVfSU5FWEFDVCkKKysKKysvKiBJRUVFIHJvdW5kaW5nIG1vZGVzLiAgKi8KKytlbnVtCisrICB7CisrICAgIEZFX1RPTkVBUkVTVCA9IDAsCisrI2RlZmluZSBGRV9UT05FQVJFU1QgICAgRkVfVE9ORUFSRVNUCisrICAgIEZFX1RPV0FSRFpFUk8gPSAweDQwMCwKKysjZGVmaW5lIEZFX1RPV0FSRFpFUk8gICBGRV9UT1dBUkRaRVJPCisrICAgIEZFX0RPV05XQVJEID0gMHg4MDAsCisrI2RlZmluZSBGRV9ET1dOV0FSRCAgICAgRkVfRE9XTldBUkQKKysgICAgRkVfVVBXQVJEID0gMHhjMDAsCisrI2RlZmluZSBGRV9VUFdBUkQgICAgICAgRkVfVVBXQVJECisrICB9OworKworKyNkZWZpbmUgRkVfUk9VTkRfTUFTSyAoRkVfVVBXQVJEKQorKworKyNlbHNlIC8qIEZQQSAqLworKworIC8qIERlZmluZSBiaXRzIHJlcHJlc2VudGluZyBleGNlcHRpb25zIGluIHRoZSBGUFUgc3RhdHVzIHdvcmQuICAqLworIGVudW0KKyAgIHsKK0BAIC00NCw2ICs4Myw4IEBACisgICAgbW9kZXMgZXhpc3QsIGJ1dCB5b3UgaGF2ZSB0byBlbmNvZGUgdGhlbSBpbiB0aGUgYWN0dWFsIGluc3RydWN0aW9uLiAgKi8KKyAjZGVmaW5lIEZFX1RPTkVBUkVTVAkwCisgCisrI2VuZGlmCisrCisgLyogVHlwZSByZXByZXNlbnRpbmcgZXhjZXB0aW9uIGZsYWdzLiAqLworIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgZmV4Y2VwdF90OworIAorZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL2FybS9mcHUvYml0cy9zZXRqbXAuaCBnbGliYy0yLjEzL2dsaWJjLXBvcnRzLTIuMTMvc3lzZGVwcy9hcm0vZnB1L2JpdHMvc2V0am1wLmgKKy0tLSBnbGliYy0yLjEzLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL2FybS9mcHUvYml0cy9zZXRqbXAuaAkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTMvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL2FybS9mcHUvYml0cy9zZXRqbXAuaAkyMDA5LTExLTEzIDAwOjUxOjIyLjAwMDAwMDAwMCArMDEwMAorQEAgLTI4LDcgKzI4LDExIEBACisgI2lmbmRlZiBfQVNNCisgLyogSnVtcCBidWZmZXIgY29udGFpbnMgdjEtdjYsIHNsLCBmcCwgc3AgYW5kIHBjLiAgT3RoZXIgcmVnaXN0ZXJzIGFyZSBub3QKKyAgICBzYXZlZC4gICovCisrI2lmZGVmIF9fTUFWRVJJQ0tfXworK3R5cGVkZWYgaW50IF9fam1wX2J1ZlszNF07CisrI2Vsc2UKKyB0eXBlZGVmIGludCBfX2ptcF9idWZbMjJdOworICNlbmRpZgorKyNlbmRpZgorIAorICNlbmRpZgorZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL2FybS9mcHUvZmVnZXRyb3VuZC5jIGdsaWJjLTIuMTMvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL2FybS9mcHUvZmVnZXRyb3VuZC5jCistLS0gZ2xpYmMtMi4xMy5vcmlnL2dsaWJjLXBvcnRzLTIuMTMvc3lzZGVwcy9hcm0vZnB1L2ZlZ2V0cm91bmQuYwkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTMvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL2FybS9mcHUvZmVnZXRyb3VuZC5jCTIwMDktMTEtMTMgMDA6NTE6MjIuMDAwMDAwMDAwICswMTAwCitAQCAtMTgsOSArMTgsMjEgQEAKKyAgICAwMjExMS0xMzA3IFVTQS4gICovCisgCisgI2luY2x1ZGUgPGZlbnYuaD4KKysjaW5jbHVkZSA8ZnB1X2NvbnRyb2wuaD4KKyAKKyBpbnQKKyBmZWdldHJvdW5kICh2b2lkKQorIHsKKysjaWYgZGVmaW5lZChfX01BVkVSSUNLX18pCisrCisrICB1bnNpZ25lZCBsb25nIHRlbXA7CisrCisrICBfRlBVX0dFVENXICh0ZW1wKTsKKysgIHJldHVybiB0ZW1wICYgRkVfUk9VTkRfTUFTSzsKKysKKysjZWxzZSAvKiBGUEEgKi8KKysKKyAgIHJldHVybiBGRV9UT05FQVJFU1Q7CQkvKiBFYXN5LiA6LSkgKi8KKysKKysjZW5kaWYKKyB9CitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvYXJtL2ZwdS9mZXNldHJvdW5kLmMgZ2xpYmMtMi4xMy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvYXJtL2ZwdS9mZXNldHJvdW5kLmMKKy0tLSBnbGliYy0yLjEzLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL2FybS9mcHUvZmVzZXRyb3VuZC5jCTIwMDktMDUtMTYgMTA6MzY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvYXJtL2ZwdS9mZXNldHJvdW5kLmMJMjAwOS0xMS0xMyAwMDo1MToyMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xOCwxMiArMTgsMjggQEAKKyAgICAwMjExMS0xMzA3IFVTQS4gICovCisgCisgI2luY2x1ZGUgPGZlbnYuaD4KKysjaW5jbHVkZSA8ZnB1X2NvbnRyb2wuaD4KKyAKKyBpbnQKKyBmZXNldHJvdW5kIChpbnQgcm91bmQpCisgeworKyNpZiBkZWZpbmVkKF9fTUFWRVJJQ0tfXykKKysgIHVuc2lnbmVkIGxvbmcgdGVtcDsKKysKKysgIGlmIChyb3VuZCAmIH5GRV9ST1VORF9NQVNLKQorKyAgICByZXR1cm4gMTsKKysKKysgIF9GUFVfR0VUQ1cgKHRlbXApOworKyAgdGVtcCA9ICh0ZW1wICYgfkZFX1JPVU5EX01BU0spIHwgcm91bmQ7CisrICBfRlBVX1NFVENXICh0ZW1wKTsKKysgIHJldHVybiAwOworKworKyNlbHNlIC8qIEZQQSAqLworKworICAgLyogV2Ugb25seSBzdXBwb3J0IEZFX1RPTkVBUkVTVCwgc28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgYW55IHdvcmsuICAqLworICAgcmV0dXJuIChyb3VuZCA9PSBGRV9UT05FQVJFU1QpPzA6MTsKKysKKysjZW5kaWYKKyB9CisgCisgbGlibV9oaWRkZW5fZGVmIChmZXNldHJvdW5kKQorZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL2FybS9mcHUvZnB1X2NvbnRyb2wuaCBnbGliYy0yLjEzL2dsaWJjLXBvcnRzLTIuMTMvc3lzZGVwcy9hcm0vZnB1L2ZwdV9jb250cm9sLmgKKy0tLSBnbGliYy0yLjEzLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL2FybS9mcHUvZnB1X2NvbnRyb2wuaAkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTMvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL2FybS9mcHUvZnB1X2NvbnRyb2wuaAkyMDA5LTExLTEzIDAwOjUxOjIyLjAwMDAwMDAwMCArMDEwMAorQEAgLTEsNSArMSw2IEBACisgLyogRlBVIGNvbnRyb2wgd29yZCBkZWZpbml0aW9ucy4gIEFSTSB2ZXJzaW9uLgorLSAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDIwMDAsIDIwMDUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAKKyAgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK0BAIC0yMCw2ICsyMSw3OSBAQAorICNpZm5kZWYgX0ZQVV9DT05UUk9MX0gKKyAjZGVmaW5lIF9GUFVfQ09OVFJPTF9ICisgCisrI2lmIGRlZmluZWQoX19NQVZFUklDS19fKQorKworKy8qIERTUFNDIHJlZ2lzdGVyOiAoZnJvbSBFUDkzMTIgVXNlcidzIEd1aWRlKQorKyAqCisrICogYml0cyAzMS4uMjkJLSBEQUlECisrICogYml0cyAyOC4uMjYJLSBIVklECisrICogYml0cyAyNS4uMjQJLSBSU1ZECisrICogYml0ICAyMwktIElTQVQKKysgKiBiaXQgIDIyCS0gVUkKKysgKiBiaXQgIDIxCS0gSU5UCisrICogYml0ICAyMAktIEFFWEMKKysgKiBiaXRzIDE5Li4xOAktIFNBVAorKyAqIGJpdHMgMTcuLjE2CS0gRkNDCisrICogYml0ICAxNQktIFYKKysgKiBiaXQgIDE0CS0gRldERU4KKysgKiBiaXQgIDEzCS0gSW52YWxpZAorKyAqIGJpdAkxMgktIERlbm9ybQorKyAqIGJpdHMgMTEuLjEwCS0gUk0KKysgKiBiaXRzIDkuLjUJLSBJWEUsIFVGRSwgT0ZFLCBSU1ZELCBJT0UKKysgKiBiaXRzIDQuLjAJLSBJWCwgVUYsIE9GLCBSU1ZELCBJTworKyAqLworKworKy8qIG1hc2tpbmcgb2YgaW50ZXJydXB0cyAqLworKyNkZWZpbmUgX0ZQVV9NQVNLX0lNCSgxIDw8IDUpCS8qIGludmFsaWQgb3BlcmF0aW9uICovCisrI2RlZmluZSBfRlBVX01BU0tfWk0JMAkJLyogZGl2aWRlIGJ5IHplcm8gKi8KKysjZGVmaW5lIF9GUFVfTUFTS19PTQkoMSA8PCA3KQkvKiBvdmVyZmxvdyAqLworKyNkZWZpbmUgX0ZQVV9NQVNLX1VNCSgxIDw8IDgpCS8qIHVuZGVyZmxvdyAqLworKyNkZWZpbmUgX0ZQVV9NQVNLX1BNCSgxIDw8IDkpCS8qIGluZXhhY3QgKi8KKysjZGVmaW5lIF9GUFVfTUFTS19ETQkwCQkvKiBkZW5vcm1hbGl6ZWQgb3BlcmF0aW9uICovCisrCisrI2RlZmluZSBfRlBVX1JFU0VSVkVECTB4ZmZmZmYwMDAJLyogVGhlc2UgYml0cyBhcmUgcmVzZXJ2ZWQuICAqLworKworKyNkZWZpbmUgX0ZQVV9ERUZBVUxUCTB4MDBiMDAwMDAJLyogRGVmYXVsdCB2YWx1ZS4gICovCisrI2RlZmluZSBfRlBVX0lFRUUJMHgwMGIwMDNhMAkvKiBEZWZhdWx0ICsgZXhjZXB0aW9ucyBlbmFibGVkLiAqLworKworKy8qIFR5cGUgb2YgdGhlIGNvbnRyb2wgd29yZC4gICovCisrdHlwZWRlZiB1bnNpZ25lZCBpbnQgZnB1X2NvbnRyb2xfdDsKKysKKysvKiBNYWNyb3MgZm9yIGFjY2Vzc2luZyB0aGUgaGFyZHdhcmUgY29udHJvbCB3b3JkLiAgKi8KKysjZGVmaW5lIF9GUFVfR0VUQ1coY3cpICh7CQkJXAorKwlyZWdpc3RlciBpbnQgX190MSwgX190MjsJCVwKKysJCQkJCQlcCisrCV9fYXNtX18gdm9sYXRpbGUgKAkJCVwKKysJImNmbXZyNjRsCSUxLCBtdmR4MFxuXHQiCQlcCisrCSJjZm12cjY0aAklMiwgbXZkeDBcblx0IgkJXAorKwkiY2ZtdjMyc2MJbXZkeDAsIGRzcHNjXG5cdCIJXAorKwkiY2ZtdnI2NGwJJTAsIG12ZHgwXG5cdCIJCVwKKysJImNmbXY2NGxyCW12ZHgwLCAlMVxuXHQiCQlcCisrCSJjZm12NjRocgltdmR4MCwgJTIiCQlcCisrCTogIj1yIiAoY3cpLCAiPXIiIChfX3QxKSwgIj1yIiAoX190MikJXAorKwkpOwkJCQkJXAorK30pCisrCisrI2RlZmluZSBfRlBVX1NFVENXKGN3KSAoewkJCVwKKysJcmVnaXN0ZXIgaW50IF9fdDAsIF9fdDEsIF9fdDI7CQlcCisrCQkJCQkJXAorKwlfX2FzbV9fIHZvbGF0aWxlICgJCQlcCisrCSJjZm12cjY0bAklMSwgbXZkeDBcblx0IgkJXAorKwkiY2ZtdnI2NGgJJTIsIG12ZHgwXG5cdCIJCVwKKysJImNmbXY2NGxyCW12ZHgwLCAlMFxuXHQiCQlcCisrCSJjZm12c2MzMglkc3BzYywgbXZkeDBcblx0IglcCisrCSJjZm12NjRscgltdmR4MCwgJTFcblx0IgkJXAorKwkiY2ZtdjY0aHIJbXZkeDAsICUyIgkJXAorKwk6ICI9ciIgKF9fdDApLCAiPXIiIChfX3QxKSwgIj1yIiAoX190MikJXAorKwk6ICIwIiAoY3cpCQkJCVwKKysJKTsJCQkJCVwKKyt9KQorKworKy8qIERlZmF1bHQgY29udHJvbCB3b3JkIHNldCBhdCBzdGFydHVwLiAgKi8KKytleHRlcm4gZnB1X2NvbnRyb2xfdCBfX2ZwdV9jb250cm9sOworKworKyNlbHNlIC8qIEZQQSAqLworKworIC8qIFdlIGhhdmUgYSBzbGlnaHQgdGVybWlub2xvZ3kgY29uZnVzaW9uIGhlcmUuICBPbiB0aGUgQVJNLCB0aGUgcmVnaXN0ZXIKKyAgKiB3ZSdyZSBpbnRlcmVzdGVkIGluIGlzIGFjdHVhbGx5IHRoZSBGUFUgc3RhdHVzIHdvcmQgLSB0aGUgRlBVIGNvbnRyb2wKKyAgKiB3b3JkIGlzIHNvbWV0aGluZyBkaWZmZXJlbnQgKHdoaWNoIGlzIGltcGxlbWVudGF0aW9uLWRlZmluZWQgYW5kIG9ubHkKK0BAIC05OSw0ICsxNzMsNiBAQAorIC8qIERlZmF1bHQgY29udHJvbCB3b3JkIHNldCBhdCBzdGFydHVwLiAgKi8KKyBleHRlcm4gZnB1X2NvbnRyb2xfdCBfX2ZwdV9jb250cm9sOworIAorKyNlbmRpZgorKworICNlbmRpZiAvKiBfRlBVX0NPTlRST0xfSCAqLworZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL2FybS9mcHUvam1wYnVmLW9mZnNldHMuaCBnbGliYy0yLjEzL2dsaWJjLXBvcnRzLTIuMTMvc3lzZGVwcy9hcm0vZnB1L2ptcGJ1Zi1vZmZzZXRzLmgKKy0tLSBnbGliYy0yLjEzLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL2FybS9mcHUvam1wYnVmLW9mZnNldHMuaAkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTMvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL2FybS9mcHUvam1wYnVmLW9mZnNldHMuaAkyMDA5LTExLTEzIDAwOjUxOjIyLjAwMDAwMDAwMCArMDEwMAorQEAgLTE3LDQgKzE3LDggQEAKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKyAKKysjaWZkZWYgX19NQVZFUklDS19fCisrI2RlZmluZSBfX0pNUF9CVUZfU1AJCTMyCisrI2Vsc2UKKyAjZGVmaW5lIF9fSk1QX0JVRl9TUAkJMjAKKysjZW5kaWYKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL2dsaWJjLXBvcnRzLTIuMTMvc3lzZGVwcy9hcm0vZnB1L3NldGptcC5TIGdsaWJjLTIuMTMvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL2FybS9mcHUvc2V0am1wLlMKKy0tLSBnbGliYy0yLjEzLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL2FybS9mcHUvc2V0am1wLlMJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEzL2dsaWJjLXBvcnRzLTIuMTMvc3lzZGVwcy9hcm0vZnB1L3NldGptcC5TCTIwMDktMTEtMTMgMDA6NTE6MjIuMDAwMDAwMDAwICswMTAwCitAQCAtMjQsMTEgKzI0LDQxIEBACisgCisgRU5UUlkgKF9fc2lnc2V0am1wKQorIAkvKiBTYXZlIHJlZ2lzdGVycyAqLworKyNpZmRlZiBfX01BVkVSSUNLX18KKysJY2ZzdHJkCW12ZDQsICBbcjBdLCAjOAorKwlub3AKKysJY2ZzdHJkCW12ZDUsICBbcjBdLCAjOAorKwlub3AKKysJY2ZzdHJkCW12ZDYsICBbcjBdLCAjOAorKwlub3AKKysJY2ZzdHJkCW12ZDcsICBbcjBdLCAjOAorKwlub3AKKysJY2ZzdHJkCW12ZDgsICBbcjBdLCAjOAorKwlub3AKKysJY2ZzdHJkCW12ZDksICBbcjBdLCAjOAorKwlub3AKKysJY2ZzdHJkCW12ZDEwLCBbcjBdLCAjOAorKwlub3AKKysJY2ZzdHJkCW12ZDExLCBbcjBdLCAjOAorKwlub3AKKysJY2ZzdHJkCW12ZDEyLCBbcjBdLCAjOAorKwlub3AKKysJY2ZzdHJkCW12ZDEzLCBbcjBdLCAjOAorKwlub3AKKysJY2ZzdHJkCW12ZDE0LCBbcjBdLCAjOAorKwlub3AKKysJY2ZzdHJkCW12ZDE1LCBbcjBdLCAjOAorKyNlbHNlCisgCXNmbWVhCWY0LCA0LCBbcjBdIQorKyNlbmRpZgorIAlzdG1pYQlyMCwge3YxLXY2LCBzbCwgZnAsIHNwLCBscn0KKyAKKyAJLyogUmVzdG9yZSBwb2ludGVyIHRvIGptcF9idWYgKi8KKysjaWZkZWYgX19NQVZFUklDS19fCisrCXN1YglyMCwgcjAsICM5NgorKyNlbHNlCisgCXN1YglyMCwgcjAsICM0OAorKyNlbmRpZgorIAorIAkvKiBNYWtlIGEgdGFpbCBjYWxsIHRvIF9fc2lnam1wX3NhdmU7IGl0IHRha2VzIHRoZSBzYW1lIGFyZ3MuICAqLworIAlCCVBMVEpNUChDX1NZTUJPTF9OQU1FKF9fc2lnam1wX3NhdmUpKQorZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL2FybS9nY2NmcmFtZS5oIGdsaWJjLTIuMTMvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL2FybS9nY2NmcmFtZS5oCistLS0gZ2xpYmMtMi4xMy5vcmlnL2dsaWJjLXBvcnRzLTIuMTMvc3lzZGVwcy9hcm0vZ2NjZnJhbWUuaAkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTMvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL2FybS9nY2NmcmFtZS5oCTIwMDktMTEtMTMgMDA6NTE6MjIuMDAwMDAwMDAwICswMTAwCitAQCAtMTcsNiArMTcsMTAgQEAKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKyAKKysjaWZkZWYgX19NQVZFUklDS19fCisrI2RlZmluZSBGSVJTVF9QU0VVRE9fUkVHSVNURVIgNDMKKysjZWxzZQorICNkZWZpbmUgRklSU1RfUFNFVURPX1JFR0lTVEVSIDI3CisrI2VuZGlmCisgCisgI2luY2x1ZGUgPHN5c2RlcHMvZ2VuZXJpYy9nY2NmcmFtZS5oPgorZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL2FybS9nbXAtbXBhcmFtLmggZ2xpYmMtMi4xMy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvYXJtL2dtcC1tcGFyYW0uaAorLS0tIGdsaWJjLTIuMTMub3JpZy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvYXJtL2dtcC1tcGFyYW0uaAkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTMvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL2FybS9nbXAtbXBhcmFtLmgJMjAwOS0xMS0xMyAwMDo1MToyMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yOSw3ICsyOSw3IEBACisgI2lmIGRlZmluZWQoX19BUk1FQl9fKQorICMgZGVmaW5lIElFRUVfRE9VQkxFX01JWEVEX0VORElBTiAwCisgIyBkZWZpbmUgSUVFRV9ET1VCTEVfQklHX0VORElBTiAxCistI2VsaWYgZGVmaW5lZChfX1ZGUF9GUF9fKQorKyNlbGlmIGRlZmluZWQoX19WRlBfRlBfXykgfHwgZGVmaW5lZChfX01BVkVSSUNLX18pCisgIyBkZWZpbmUgSUVFRV9ET1VCTEVfTUlYRURfRU5ESUFOIDAKKyAjIGRlZmluZSBJRUVFX0RPVUJMRV9CSUdfRU5ESUFOIDAKKyAjZWxzZQorZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvcG9ydHMvc3lzZGVwcy9hcm0vYml0cy9lbmRpYW4uaCBnbGliYy0yLjEzL3BvcnRzL3N5c2RlcHMvYXJtL2JpdHMvZW5kaWFuLmgKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL3BvcnRzL3N5c2RlcHMvYXJtL2ZwdS9fX2xvbmdqbXAuUyBnbGliYy0yLjEzL3BvcnRzL3N5c2RlcHMvYXJtL2ZwdS9fX2xvbmdqbXAuUworZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvcG9ydHMvc3lzZGVwcy9hcm0vZnB1L2JpdHMvZmVudi5oIGdsaWJjLTIuMTMvcG9ydHMvc3lzZGVwcy9hcm0vZnB1L2JpdHMvZmVudi5oCitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9wb3J0cy9zeXNkZXBzL2FybS9mcHUvYml0cy9zZXRqbXAuaCBnbGliYy0yLjEzL3BvcnRzL3N5c2RlcHMvYXJtL2ZwdS9iaXRzL3NldGptcC5oCitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9wb3J0cy9zeXNkZXBzL2FybS9mcHUvZmVnZXRyb3VuZC5jIGdsaWJjLTIuMTMvcG9ydHMvc3lzZGVwcy9hcm0vZnB1L2ZlZ2V0cm91bmQuYworZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvcG9ydHMvc3lzZGVwcy9hcm0vZnB1L2Zlc2V0cm91bmQuYyBnbGliYy0yLjEzL3BvcnRzL3N5c2RlcHMvYXJtL2ZwdS9mZXNldHJvdW5kLmMKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL3BvcnRzL3N5c2RlcHMvYXJtL2ZwdS9mcHVfY29udHJvbC5oIGdsaWJjLTIuMTMvcG9ydHMvc3lzZGVwcy9hcm0vZnB1L2ZwdV9jb250cm9sLmgKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL3BvcnRzL3N5c2RlcHMvYXJtL2ZwdS9qbXBidWYtb2Zmc2V0cy5oIGdsaWJjLTIuMTMvcG9ydHMvc3lzZGVwcy9hcm0vZnB1L2ptcGJ1Zi1vZmZzZXRzLmgKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL3BvcnRzL3N5c2RlcHMvYXJtL2ZwdS9zZXRqbXAuUyBnbGliYy0yLjEzL3BvcnRzL3N5c2RlcHMvYXJtL2ZwdS9zZXRqbXAuUworZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvcG9ydHMvc3lzZGVwcy9hcm0vZ2NjZnJhbWUuaCBnbGliYy0yLjEzL3BvcnRzL3N5c2RlcHMvYXJtL2djY2ZyYW1lLmgKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL3BvcnRzL3N5c2RlcHMvYXJtL2dtcC1tcGFyYW0uaCBnbGliYy0yLjEzL3BvcnRzL3N5c2RlcHMvYXJtL2dtcC1tcGFyYW0uaApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvNTgwLW5wdGwtbG93bGV2ZWxsb2NrLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvNTgwLW5wdGwtbG93bGV2ZWxsb2NrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NTE4ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy81ODAtbnB0bC1sb3dsZXZlbGxvY2sucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorZml4IGJ1aWxkIGVycm9yIG9uIGFybSBsaWtlIG9uIGhwcGE6CisKK2FybS11bmtub3duLWxpbnV4LWdudS1nY2MgLi4vbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9saWJjLWxvd2xldmVsbG9jay5jIC1jIC1zdGQ9Z251OTkgLWZnbnU4OS1pbmxpbmUgLU8yIC1XYWxsIC1XaW5saW5lIC1Xd3JpdGUtc3RyaW5ncyAtZm1lcmdlLWFsbC1jb25zdGFudHMgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWcgLXBpcGUgLVdzdHJpY3QtcHJvdG90eXBlcyAgIC1mUElDICAgIC1JLi4vaW5jbHVkZSAtSS92YXIvdG1wL3BvcnRhZ2UvY3Jvc3MtYXJtLXVua25vd24tbGludXgtZ251L2dsaWJjLTIuOF9wMjAwODA2MDIvd29yay9idWlsZC1kZWZhdWx0LWFybS11bmtub3duLWxpbnV4LWdudS1ucHRsL25wdGwgLUkvdmFyL3RtcC9wb3J0YWdlL2Nyb3NzLWFybS11bmtub3duLWxpbnV4LWdudS9nbGliYy0yLjhfcDIwMDgwNjAyL3dvcmsvYnVpbGQtZGVmYXVsdC1hcm0tdW5rbm93bi1saW51eC1nbnUtbnB0bCAtSS4uL3BvcnRzL3N5c2RlcHMvYXJtL2VsZiAtSS4uL3BvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FybS9ucHRsIC1JLi4vcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtIC1JLi4vbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eCAtSS4uL25wdGwvc3lzZGVwcy9wdGhyZWFkIC1JLi4vc3lzZGVwcy9wdGhyZWFkIC1JLi4vcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXggLUkuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eCAtSS4uL3N5c2RlcHMvZ251IC1JLi4vc3lzZGVwcy91bml4L2NvbW1vbiAtSS4uL3N5c2RlcHMvdW5peC9tbWFuIC1JLi4vc3lzZGVwcy91bml4L2luZXQgLUkuLi9ucHRsL3N5c2RlcHMvdW5peC9zeXN2IC1JLi4vcG9ydHMvc3lzZGVwcy91bml4L3N5c3YgLUkuLi9zeXNkZXBzL3VuaXgvc3lzdiAtSS4uL3BvcnRzL3N5c2RlcHMvdW5peC9hcm0gLUkuLi9ucHRsL3N5c2RlcHMvdW5peCAtSS4uL3BvcnRzL3N5c2RlcHMvdW5peCAtSS4uL3N5c2RlcHMvdW5peCAtSS4uL3N5c2RlcHMvcG9zaXggLUkuLi9wb3J0cy9zeXNkZXBzL2FybS9mcHUgLUkuLi9wb3J0cy9zeXNkZXBzL2FybS9ucHRsIC1JLi4vcG9ydHMvc3lzZGVwcy9hcm0gLUkuLi9zeXNkZXBzL3dvcmRzaXplLTMyIC1JLi4vc3lzZGVwcy9pZWVlNzU0L2ZsdC0zMiAtSS4uL3N5c2RlcHMvaWVlZTc1NC9kYmwtNjQgLUkuLi9zeXNkZXBzL2llZWU3NTQgLUkuLi9zeXNkZXBzL2dlbmVyaWMvZWxmIC1JLi4vc3lzZGVwcy9nZW5lcmljIC1JLi4vbnB0bCAtSS4uL3BvcnRzICAtSS4uIC1JLi4vbGliaW8gLUkuIC1ub3N0ZGluYyAtaXN5c3RlbSAvdXNyL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251LzQuMy4yL2luY2x1ZGUgLWlzeXN0ZW0gL3Vzci9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudS80LjMuMi9pbmNsdWRlLWZpeGVkIC1pc3lzdGVtIC91c3IvYXJtLXVua25vd24tbGludXgtZ251L3Vzci9pbmNsdWRlIC1EX0xJQkNfUkVFTlRSQU5UIC1pbmNsdWRlIC4uL2luY2x1ZGUvbGliYy1zeW1ib2xzLmggIC1EUElDIC1EU0hBUkVEICAgICAgLW8gL3Zhci90bXAvcG9ydGFnZS9jcm9zcy1hcm0tdW5rbm93bi1saW51eC1nbnUvZ2xpYmMtMi44X3AyMDA4MDYwMi93b3JrL2J1aWxkLWRlZmF1bHQtYXJtLXVua25vd24tbGludXgtZ251LW5wdGwvbnB0bC9ydGxkLWxpYmMtbG93bGV2ZWxsb2NrLm9zIC1NRCAtTVAgLU1GIC92YXIvdG1wL3BvcnRhZ2UvY3Jvc3MtYXJtLXVua25vd24tbGludXgtZ251L2dsaWJjLTIuOF9wMjAwODA2MDIvd29yay9idWlsZC1kZWZhdWx0LWFybS11bmtub3duLWxpbnV4LWdudS1ucHRsL25wdGwvcnRsZC1saWJjLWxvd2xldmVsbG9jay5vcy5kdCAtTVQgL3Zhci90bXAvcG9ydGFnZS9jcm9zcy1hcm0tdW5rbm93bi1saW51eC1nbnUvZ2xpYmMtMi44X3AyMDA4MDYwMi93b3JrL2J1aWxkLWRlZmF1bHQtYXJtLXVua25vd24tbGludXgtZ251LW5wdGwvbnB0bC9ydGxkLWxpYmMtbG93bGV2ZWxsb2NrLm9zIC1ETk9UX0lOX2xpYmM9MSAtRElTX0lOX3J0bGQ9MQorSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC4uL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbGliYy1sb3dsZXZlbGxvY2suYzoyMToKKy4uL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbG93bGV2ZWxsb2NrLmM6IEluIGZ1bmN0aW9uICdfX2xsbF9sb2NrX3dhaXRfcHJpdmF0ZSc6CisuLi9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2xvd2xldmVsbG9jay5jOjMxOiB3YXJuaW5nOiBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbiAnVEhSRUFEX0dFVE1FTScKKy4uL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbG93bGV2ZWxsb2NrLmM6MzE6IGVycm9yOiAnVEhSRUFEX1NFTEYnIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQorLi4vbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9sb3dsZXZlbGxvY2suYzozMTogZXJyb3I6IChFYWNoIHVuZGVjbGFyZWQgaWRlbnRpZmllciBpcyByZXBvcnRlZCBvbmx5IG9uY2UKKy4uL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbG93bGV2ZWxsb2NrLmM6MzE6IGVycm9yOiBmb3IgZWFjaCBmdW5jdGlvbiBpdCBhcHBlYXJzIGluLikKKy4uL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbG93bGV2ZWxsb2NrLmM6MzE6IGVycm9yOiAnaGVhZGVyJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikKKworZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hcm0vbnB0bC9sb3dsZXZlbGxvY2suaCBnbGliYy0yLjEzL2dsaWJjLXBvcnRzLTIuMTMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL25wdGwvbG93bGV2ZWxsb2NrLmgKKy0tLSBnbGliYy0yLjEzLm9yaWcvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hcm0vbnB0bC9sb3dsZXZlbGxvY2suaAkyMDA5LTA1LTE2IDEwOjM2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuMTMvZ2xpYmMtcG9ydHMtMi4xMy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hcm0vbnB0bC9sb3dsZXZlbGxvY2suaAkyMDA5LTExLTEzIDAwOjUxOjIzLjAwMDAwMDAwMCArMDEwMAorQEAgLTI1LDYgKzI1LDcgQEAKKyAjaW5jbHVkZSA8YXRvbWljLmg+CisgI2luY2x1ZGUgPHN5c2RlcC5oPgorICNpbmNsdWRlIDxrZXJuZWwtZmVhdHVyZXMuaD4KKysjaW5jbHVkZSA8dGxzLmg+CQkvKiBOZWVkIFRIUkVBRF8qLCBhbmQgaGVhZGVyLiouICAqLworIAorICNkZWZpbmUgRlVURVhfV0FJVAkJMAorICNkZWZpbmUgRlVURVhfV0FLRQkJMQorZGlmZiAtZHVyTiBnbGliYy0yLjEzLm9yaWcvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL25wdGwvbG93bGV2ZWxsb2NrLmggZ2xpYmMtMi4xMy9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hcm0vbnB0bC9sb3dsZXZlbGxvY2suaApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvNjEwLWZwdS1jdy1taXBzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvNjEwLWZwdS1jdy1taXBzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMmI0ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy82MTAtZnB1LWN3LW1pcHMucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAoraHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2xpYmMtYWxwaGEvMjAwMi0xMC9tc2cwMDM5Mi5odG1sCisKK2RpZmYgLWR1ck4gZ2xpYmMtMi4xMy5vcmlnL2dsaWJjLXBvcnRzLTIuMTMvc3lzZGVwcy9taXBzL2ZwdV9jb250cm9sLmggZ2xpYmMtMi4xMy9nbGliYy1wb3J0cy0yLjEzL3N5c2RlcHMvbWlwcy9mcHVfY29udHJvbC5oCistLS0gZ2xpYmMtMi4xMy5vcmlnL2dsaWJjLXBvcnRzLTIuMTMvc3lzZGVwcy9taXBzL2ZwdV9jb250cm9sLmgJMjAwOS0wNS0xNiAxMDozNjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjEzL2dsaWJjLXBvcnRzLTIuMTMvc3lzZGVwcy9taXBzL2ZwdV9jb250cm9sLmgJMjAwOS0xMS0xMyAwMDo1MTozMS4wMDAwMDAwMDAgKzAxMDAKK0BAIC04Niw3ICs4Niw3IEBACisgI2RlZmluZSBfRlBVX1JDX1VQICAgICAgMHgyCisgI2RlZmluZSBfRlBVX1JDX0RPV04gICAgMHgzCisgCistI2RlZmluZSBfRlBVX1JFU0VSVkVEIDB4ZmUzYzAwMDAgIC8qIFJlc2VydmVkIGJpdHMgaW4gY3cgKi8KKysjZGVmaW5lIF9GUFVfUkVTRVJWRUQgMHhmZWJjMDAwMCAgLyogUmVzZXJ2ZWQgYml0cyBpbiBjdyAqLworIAorIAorIC8qIFRoZSBmZGxpYm0gY29kZSByZXF1aXJlcyBzdHJpY3QgSUVFRSBkb3VibGUgcHJlY2lzaW9uIGFyaXRobWV0aWMsCitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9wb3J0cy9zeXNkZXBzL21pcHMvZnB1X2NvbnRyb2wuaCBnbGliYy0yLjEzL3BvcnRzL3N5c2RlcHMvbWlwcy9mcHVfY29udHJvbC5oCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy82MzAtbWlwc19zaG5fdW5kZWYtaGFjay5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzYzMC1taXBzX3Nobl91bmRlZi1oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MWQ3NmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy82MzAtbWlwc19zaG5fdW5kZWYtaGFjay5wYXRjaApAQCAtMCwwICsxLDE2IEBACitkaWZmIC1kdXJOIGdsaWJjLTIuMTMub3JpZy9lbGYvZGwtbG9va3VwLmMgZ2xpYmMtMi4xMy9lbGYvZGwtbG9va3VwLmMKKy0tLSBnbGliYy0yLjEzLm9yaWcvZWxmL2RsLWxvb2t1cC5jCTIwMDktMDMtMzAgMjM6MTQ6MzIuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi4xMy9lbGYvZGwtbG9va3VwLmMJMjAwOS0xMS0xMyAwMDo1MTozNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zMDEsNiArMzAxLDEyIEBACisgCSAgICAgIC8qIEZBTExUSFJPVUdIICovCisgCSAgICBjYXNlIFNUQl9HTE9CQUw6CisJICAgIHN1Y2Nlc3M6CisrI2lmZGVmIF9fbWlwc19fCisrCSAgICAgIC8qIEhBQ0s6IE1JUFMgbWFya3MgaXRzIGxhenkgZXZhbHVhdGlvbiBzdHVicyB3aXRoIFNITl9VTkRFRgorKwkJIHN5bWJvbHMsIHdlIHNraXAgdGhlbS4gKi8KKysJICAgICAgaWYgKHN5bS0+c3Rfc2huZHggPT0gU0hOX1VOREVGKQorKwkJYnJlYWs7CisrI2VuZGlmCisgCSAgICAgIC8qIEdsb2JhbCBkZWZpbml0aW9uLiAgSnVzdCB3aGF0IHdlIG5lZWQuICAqLworIAkgICAgICByZXN1bHQtPnMgPSBzeW07CisgCSAgICAgIHJlc3VsdC0+bSA9IChzdHJ1Y3QgbGlua19tYXAgKikgbWFwOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvNjQwLWFscGhhLWF0ZmN0cy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzY0MC1hbHBoYS1hdGZjdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E4YTk0YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjEzLzY0MC1hbHBoYS1hdGZjdHMucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorLS0tIGdsaWJjLTIuMTMvc3lzZGVwcy91bml4L3N5c3YvbGludXgva2VybmVsLWZlYXR1cmVzLmgJMjAxMC0wNy0yNyAxNDozNDozOS4wMDAwMDAwMDAgKzAzMDAKKysrKyBnbGliYy0yLjEzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2tlcm5lbC1mZWF0dXJlcy5oLm5ldwkyMDExLTAzLTEwIDE4OjU0OjM3LjY4Njc5NTk3OSArMDIwMAorQEAgLTQzNyw3ICs0MzcsOCBAQAorICAgIHRoZSBjb2RlLiAgT24gUFBDIHRoZXkgd2VyZSBpbnRyb2R1Y2VkIGluIDIuNi4xNy1yYzEsCisgICAgb24gU0ggaW4gMi42LjE5LXJjMS4gICovCisgI2lmIF9fTElOVVhfS0VSTkVMX1ZFUlNJT04gPj0gMHgwMjA2MTEgXAorLSAgICAmJiAoIWRlZmluZWQgX19zaF9fIHx8IF9fTElOVVhfS0VSTkVMX1ZFUlNJT04gPj0gMHgwMjA2MTMpCisrICAgICYmICghZGVmaW5lZCBfX3NoX18gfHwgX19MSU5VWF9LRVJORUxfVkVSU0lPTiA+PSAweDAyMDYxMykgXAorKyAgICAmJiAoIWRlZmluZWQgX19hbHBoYV9fKQorICMgZGVmaW5lIF9fQVNTVU1FX0FURkNUUwkxCisgI2VuZGlmCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy82NTAtc3lzbG9nLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvNjUwLXN5c2xvZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjBjYWZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvNjUwLXN5c2xvZy5wYXRjaApAQCAtMCwwICsxLDEyIEBACitkaWZmIC1kdXJOIGdsaWJjLWN2cy0yLjkub3JpZy9taXNjL3N5c2xvZy5jIGdsaWJjLWN2cy0yLjkvbWlzYy9zeXNsb2cuYworLS0tIGdsaWJjLWN2cy0yLjkub3JpZy9taXNjL3N5c2xvZy5jCTIwMDktMDYtMDEgMTA6MTY6NTAuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtY3ZzLTIuOS9taXNjL3N5c2xvZy5jCTIwMDktMDYtMDEgMTA6MTc6MjAuMDAwMDAwMDAwICswMjAwCitAQCAtMTUyLDcgKzE1Miw3IEBACisgI2RlZmluZQlJTlRFUk5BTExPRwlMT0dfRVJSfExPR19DT05TfExPR19QRVJST1J8TE9HX1BJRAorIAkvKiBDaGVjayBmb3IgaW52YWxpZCBiaXRzLiAqLworIAlpZiAocHJpICYgfihMT0dfUFJJTUFTS3xMT0dfRkFDTUFTSykpIHsKKy0JCXN5c2xvZyhJTlRFUk5BTExPRywKKysJCV9fc3lzbG9nKElOVEVSTkFMTE9HLAorIAkJICAgICJzeXNsb2c6IHVua25vd24gZmFjaWxpdHkvcHJpb3JpdHk6ICV4IiwgcHJpKTsKKyAJCXByaSAmPSBMT0dfUFJJTUFTS3xMT0dfRkFDTUFTSzsKKyAJfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvNjYwLWRlYnVnLXJlYWRsaW5rX2Noay1yZWFka2xpbmthdF9jaGsucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi4xMy82NjAtZGVidWctcmVhZGxpbmtfY2hrLXJlYWRrbGlua2F0X2Noay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWE3MDUyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuMTMvNjYwLWRlYnVnLXJlYWRsaW5rX2Noay1yZWFka2xpbmthdF9jaGsucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorZGlmZiAtZHVyIGdsaWJjLWN2cy0yLjkub3JpZy9kZWJ1Zy9yZWFkbGlua19jaGsuYyBnbGliYy1jdnMtMi45L2RlYnVnL3JlYWRsaW5rX2Noay5jCistLS0gZ2xpYmMtY3ZzLTIuOS5vcmlnL2RlYnVnL3JlYWRsaW5rX2Noay5jCTIwMDUtMDMtMDEgMDE6NDE6MTUuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtY3ZzLTIuOS9kZWJ1Zy9yZWFkbGlua19jaGsuYwkyMDA5LTA2LTAxIDEwOjU5OjM3LjAwMDAwMDAwMCArMDIwMAorQEAgLTI1LDcgKzI1LDcgQEAKKyAKKyAKKyBzc2l6ZV90CistX19yZWFkbGlua19jaGsgKGNvbnN0IGNoYXIgKnBhdGgsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgc2l6ZV90IGJ1ZmxlbikKKytfX3JlYWRsaW5rX2NoayAoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgbGVuLCBzaXplX3QgYnVmbGVuKQorIHsKKyAgIGlmIChsZW4gPiBidWZsZW4pCisgICAgIF9fY2hrX2ZhaWwgKCk7CitkaWZmIC1kdXIgZ2xpYmMtY3ZzLTIuOS5vcmlnL2RlYnVnL3JlYWRsaW5rYXRfY2hrLmMgZ2xpYmMtY3ZzLTIuOS9kZWJ1Zy9yZWFkbGlua2F0X2Noay5jCistLS0gZ2xpYmMtY3ZzLTIuOS5vcmlnL2RlYnVnL3JlYWRsaW5rYXRfY2hrLmMJMjAwNi0wNC0yNCAxODo1NjoxMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy1jdnMtMi45L2RlYnVnL3JlYWRsaW5rYXRfY2hrLmMJMjAwOS0wNi0wMSAxMTowNzoyNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMSw3ICsyMSw3IEBACisgCisgCisgc3NpemVfdAorLV9fcmVhZGxpbmthdF9jaGsgKGludCBmZCwgY29uc3QgY2hhciAqcGF0aCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuLAorK19fcmVhZGxpbmthdF9jaGsgKGludCBmZCwgY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgbGVuLAorIAkJICBzaXplX3QgYnVmbGVuKQorIHsKKyAgIGlmIChsZW4gPiBidWZsZW4pCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi42LjEvMTAwLUFSTS1OUFRMLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuNi4xLzEwMC1BUk0tTlBUTC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWRlODIzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuNi4xLzEwMC1BUk0tTlBUTC5wYXRjaApAQCAtMCwwICsxLDEzIEBACitkaWZmIC1kdXJOIGdsaWJjLTIuNi4xLm9yaWcvZ2xpYmMtcG9ydHMtMi42LjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL25wdGwvc3lzZGVwLWNhbmNlbC5oIGdsaWJjLTIuNi4xL2dsaWJjLXBvcnRzLTIuNi4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FybS9ucHRsL3N5c2RlcC1jYW5jZWwuaAorLS0tIGdsaWJjLTIuNi4xLm9yaWcvZ2xpYmMtcG9ydHMtMi42LjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL25wdGwvc3lzZGVwLWNhbmNlbC5oCTIwMDUtMTEtMTYgMjA6MjI6NTkuMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYmMtMi42LjEvZ2xpYmMtcG9ydHMtMi42LjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL25wdGwvc3lzZGVwLWNhbmNlbC5oCTIwMDctMDktMDYgMTM6NTM6MTYuMDAwMDAwMDAwICswMjAwCitAQCAtMTI2LDMgKzEyNiw5IEBACisgIyBkZWZpbmUgTk9fQ0FOQ0VMTEFUSU9OIDEKKyAKKyAjZW5kaWYKKysKKysjaWZuZGVmIF9fQVNTRU1CTEVSX18KKysjIGRlZmluZSBSVExEX1NJTkdMRV9USFJFQURfUCBcCisrICBfX2J1aWx0aW5fZXhwZWN0IChUSFJFQURfR0VUTUVNIChUSFJFQURfU0VMRiwgXAorKyAgICAgICAgICAgICAgICAgICBoZWFkZXIubXVsdGlwbGVfdGhyZWFkcykgPT0gMCwgMSkKKysjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjYuMS8xMTAtQVJNLWFzbV9wYWdlX2gucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi42LjEvMTEwLUFSTS1hc21fcGFnZV9oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlODgyYWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi42LjEvMTEwLUFSTS1hc21fcGFnZV9oLnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKK2RpZmYgLWR1ck4gZ2xpYmMtcG9ydHMtMi43Lm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL2lvcGVybS5jIGdsaWJjLXBvcnRzLTIuNy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hcm0vaW9wZXJtLmMKKy0tLSBnbGliYy0yLjYuMS5vcmlnL2dsaWJjLXBvcnRzLTIuNi4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FybS9pb3Blcm0uYwkyMDA1LTA2LTEwIDEzOjEyOjA5LjAwMDAwMDAwMCArMDIwMAorKysrIGdsaWJjLTIuNi4xL2dsaWJjLXBvcnRzLTIuNi4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FybS9pb3Blcm0uYwkyMDA4LTA1LTE4IDE2OjE5OjQ1LjAwMDAwMDAwMCArMDIwMAorQEAgLTQ1LDcgKzQ1LDYgQEAKKyAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyAKKyAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisgCisgI2RlZmluZSBQQVRIX0FSTV9TWVNUWVBFCSIvZXRjL2FybV9zeXN0eXBlIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuNi4xLzEyMC1sbGxfbG9ja190LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuNi4xLzEyMC1sbGxfbG9ja190LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NzQzMzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi42LjEvMTIwLWxsbF9sb2NrX3QucGF0Y2gKQEAgLTAsMCArMSwxNTYgQEAKK1Byb3BhZ2F0ZSB0aGUgcGF0Y2ggZnJvbSBiYXNlIGdsaWJjIHRoYXQgY2hhbmdlcyBsbGxfbG9ja190IGludG8gYSBwbGFpbiBpbnQsCit3aXRob3V0IHVzaW5nIGEgdHlwZWRlZiwgYXMgZ2xpYmMtMi43IG5vdyBkb2VzLgorCitkaWZmIC1kdXJOIGdsaWJjLTIuNi4xLm9yaWcvZ2xpYmMtcG9ydHMtMi42LjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL25wdGwvbG93bGV2ZWxsb2NrLmggZ2xpYmMtMi42LjEvZ2xpYmMtcG9ydHMtMi42LjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL25wdGwvbG93bGV2ZWxsb2NrLmgKKy0tLSBnbGliYy0yLjYuMS5vcmlnL2dsaWJjLXBvcnRzLTIuNi4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FybS9ucHRsL2xvd2xldmVsbG9jay5oCTIwMDYtMDgtMDQgMjA6NTY6MTUuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi42LjEvZ2xpYmMtcG9ydHMtMi42LjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL25wdGwvbG93bGV2ZWxsb2NrLmgJMjAwOC0wNy0yOCAyMzo0OToyOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNjAsOSArMjYwLDYgQEAKKyAvKiBPdXIgaW50ZXJuYWwgbG9jayBpbXBsZW1lbnRhdGlvbiBpcyBpZGVudGljYWwgdG8gdGhlIGJpbmFyeS1jb21wYXRpYmxlCisgICAgbXV0ZXggaW1wbGVtZW50YXRpb24uICovCisgCistLyogVHlwZSBmb3IgbG9jayBvYmplY3QuICAqLworLXR5cGVkZWYgaW50IGxsbF9sb2NrX3Q7CistCisgLyogSW5pdGlhbGl6ZXJzIGZvciBsb2NrLiAgKi8KKyAjZGVmaW5lIExMTF9MT0NLX0lOSVRJQUxJWkVSCQkoMCkKKyAjZGVmaW5lIExMTF9MT0NLX0lOSVRJQUxJWkVSX0xPQ0tFRAkoMSkKK2RpZmYgLWR1ck4gZ2xpYmMtMi42LjEub3JpZy9nbGliYy1wb3J0cy0yLjYuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9ocHBhL25wdGwvbG93bGV2ZWxsb2NrLmMgZ2xpYmMtMi42LjEvZ2xpYmMtcG9ydHMtMi42LjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaHBwYS9ucHRsL2xvd2xldmVsbG9jay5jCistLS0gZ2xpYmMtMi42LjEub3JpZy9nbGliYy1wb3J0cy0yLjYuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9ocHBhL25wdGwvbG93bGV2ZWxsb2NrLmMJMjAwNi0wNy0xNCAxNTo1MToyNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjYuMS9nbGliYy1wb3J0cy0yLjYuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9ocHBhL25wdGwvbG93bGV2ZWxsb2NrLmMJMjAwOC0wNy0yOCAyMzo0OTo1Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNSw3ICsyNSw3IEBACisgCisgCisgdm9pZAorLV9fbGxsX2xvY2tfd2FpdCAobGxsX2xvY2tfdCAqZnV0ZXgpCisrX19sbGxfbG9ja193YWl0IChpbnQgKmZ1dGV4KQorIHsKKyAgIGRvCisgICAgIHsKK0BAIC0zOCw3ICszOCw3IEBACisgCisgCisgaW50CistX19sbGxfdGltZWRsb2NrX3dhaXQgKGxsbF9sb2NrX3QgKmZ1dGV4LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKmFic3RpbWUpCisrX19sbGxfdGltZWRsb2NrX3dhaXQgKGludCAqZnV0ZXgsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqYWJzdGltZSkKKyB7CisgICAvKiBSZWplY3QgaW52YWxpZCB0aW1lb3V0cy4gICovCisgICBpZiAoYWJzdGltZS0+dHZfbnNlYyA8IDAgfHwgYWJzdGltZS0+dHZfbnNlYyA+PSAxMDAwMDAwMDAwKQorQEAgLTc4LDcgKzc4LDcgQEAKKyAvKiBUaGVzZSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gbGliYy5zbyAgKi8KKyAjaWZkZWYgSVNfSU5fbGlicHRocmVhZAorIGludAorLWxsbF91bmxvY2tfd2FrZV9jYiAobGxsX2xvY2tfdCAqZnV0ZXgpCisrbGxsX3VubG9ja193YWtlX2NiIChpbnQgKmZ1dGV4KQorIHsKKyAgIGludCB2YWwgPSBhdG9taWNfZXhjaGFuZ2VfcmVsIChmdXRleCwgMCk7CisgCitkaWZmIC1kdXJOIGdsaWJjLTIuNi4xLm9yaWcvZ2xpYmMtcG9ydHMtMi42LjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaHBwYS9ucHRsL2xvd2xldmVsbG9jay5oIGdsaWJjLTIuNi4xL2dsaWJjLXBvcnRzLTIuNi4xL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2hwcGEvbnB0bC9sb3dsZXZlbGxvY2suaAorLS0tIGdsaWJjLTIuNi4xLm9yaWcvZ2xpYmMtcG9ydHMtMi42LjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaHBwYS9ucHRsL2xvd2xldmVsbG9jay5oCTIwMDYtMDktMDcgMTg6MzQ6NDMuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi42LjEvZ2xpYmMtcG9ydHMtMi42LjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaHBwYS9ucHRsL2xvd2xldmVsbG9jay5oCTIwMDgtMDctMjggMjM6NTA6NTQuMDAwMDAwMDAwICswMjAwCitAQCAtNDMsMTEgKzQzLDYgQEAKKyAvKiBJbml0aWFsaXplIGxvY2tzIHRvIHplcm8uICAqLworICNkZWZpbmUgTExMX01VVEVYX0xPQ0tfSU5JVElBTElaRVIgKDApCisgCistCistLyogVHlwZSBmb3IgbG9jayBvYmplY3QuICAqLworLXR5cGVkZWYgaW50IGxsbF9sb2NrX3Q7CistCistCisgI2RlZmluZSBsbGxfZnV0ZXhfd2FpdChmdXRleHAsIHZhbCkgXAorICAgKHsJCQkJCQkJCQkgICAgICBcCisgICAgIElOVEVSTkFMX1NZU0NBTExfREVDTCAoX19lcnIpOwkJCQkJICAgICAgXAorQEAgLTEwOCw3ICsxMDMsNyBAQAorICAgfSkKKyAKKyBzdGF0aWMgaW5saW5lIGludCBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKKy1fX2xsbF9tdXRleF90cnlsb2NrKGxsbF9sb2NrX3QgKmZ1dGV4KQorK19fbGxsX211dGV4X3RyeWxvY2soaW50ICpmdXRleCkKKyB7CisgICByZXR1cm4gYXRvbWljX2NvbXBhcmVfYW5kX2V4Y2hhbmdlX3ZhbF9hY3EgKGZ1dGV4LCAxLCAwKSAhPSAwOworIH0KK0BAIC0xMjQsMTcgKzExOSwxNyBAQAorIAorIAorIHN0YXRpYyBpbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQorLV9fbGxsX211dGV4X2NvbmRfdHJ5bG9jayhsbGxfbG9ja190ICpmdXRleCkKKytfX2xsbF9tdXRleF9jb25kX3RyeWxvY2soaW50ICpmdXRleCkKKyB7CisgICByZXR1cm4gYXRvbWljX2NvbXBhcmVfYW5kX2V4Y2hhbmdlX3ZhbF9hY3EgKGZ1dGV4LCAyLCAwKSAhPSAwOworIH0KKyAjZGVmaW5lIGxsbF9tdXRleF9jb25kX3RyeWxvY2sobG9jaykJX19sbGxfbXV0ZXhfY29uZF90cnlsb2NrICgmKGxvY2spKQorIAorIAorLWV4dGVybiB2b2lkIF9fbGxsX2xvY2tfd2FpdCAobGxsX2xvY2tfdCAqZnV0ZXgpIGF0dHJpYnV0ZV9oaWRkZW47CisrZXh0ZXJuIHZvaWQgX19sbGxfbG9ja193YWl0IChpbnQgKmZ1dGV4KSBhdHRyaWJ1dGVfaGlkZGVuOworIAorIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKKy1fX2xsbF9tdXRleF9sb2NrKGxsbF9sb2NrX3QgKmZ1dGV4KQorK19fbGxsX211dGV4X2xvY2soaW50ICpmdXRleCkKKyB7CisgICBpZiAoYXRvbWljX2NvbXBhcmVfYW5kX2V4Y2hhbmdlX2Jvb2xfYWNxIChmdXRleCwgMSwgMCkgIT0gMCkKKyAgICAgX19sbGxfbG9ja193YWl0IChmdXRleCk7CitAQCAtMTU1LDcgKzE1MCw3IEBACisgICBfX2xsbF9yb2J1c3RfbXV0ZXhfbG9jayAoJihmdXRleCksIGlkKQorIAorIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoYWx3YXlzX2lubGluZSkpCistX19sbGxfbXV0ZXhfY29uZF9sb2NrIChsbGxfbG9ja190ICpmdXRleCkKKytfX2xsbF9tdXRleF9jb25kX2xvY2sgKGludCAqZnV0ZXgpCisgeworICAgaWYgKGF0b21pY19jb21wYXJlX2FuZF9leGNoYW5nZV9ib29sX2FjcSAoZnV0ZXgsIDIsIDApICE9IDApCisgICAgIF9fbGxsX2xvY2tfd2FpdCAoZnV0ZXgpOworQEAgLTE2NywxMyArMTYyLDEzIEBACisgICBfX2xsbF9yb2J1c3RfbXV0ZXhfbG9jayAoJihmdXRleCksIChpZCkgfCBGVVRFWF9XQUlURVJTKQorIAorIAorLWV4dGVybiBpbnQgX19sbGxfdGltZWRsb2NrX3dhaXQgKGxsbF9sb2NrX3QgKmZ1dGV4LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKikKKytleHRlcm4gaW50IF9fbGxsX3RpbWVkbG9ja193YWl0IChpbnQgKmZ1dGV4LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKikKKyAJYXR0cmlidXRlX2hpZGRlbjsKKyBleHRlcm4gaW50IF9fbGxsX3JvYnVzdF90aW1lZGxvY2tfd2FpdCAoaW50ICpmdXRleCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICopCisgCWF0dHJpYnV0ZV9oaWRkZW47CisgCisgc3RhdGljIGlubGluZSBpbnQgX19hdHRyaWJ1dGVfXyAoKGFsd2F5c19pbmxpbmUpKQorLV9fbGxsX211dGV4X3RpbWVkbG9jayAobGxsX2xvY2tfdCAqZnV0ZXgsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqYWJzdGltZSkKKytfX2xsbF9tdXRleF90aW1lZGxvY2sgKGludCAqZnV0ZXgsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqYWJzdGltZSkKKyB7CisgICBpbnQgcmVzdWx0ID0gMDsKKyAgIGlmIChhdG9taWNfY29tcGFyZV9hbmRfZXhjaGFuZ2VfYm9vbF9hY3EgKGZ1dGV4LCAxLCAwKSAhPSAwKQorQEAgLTE5Nyw3ICsxOTIsNyBAQAorIAorIAorIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoYWx3YXlzX2lubGluZSkpCistX19sbGxfbXV0ZXhfdW5sb2NrIChsbGxfbG9ja190ICpmdXRleCkKKytfX2xsbF9tdXRleF91bmxvY2sgKGludCAqZnV0ZXgpCisgeworICAgaW50IHZhbCA9IGF0b21pY19leGNoYW5nZV9yZWwgKGZ1dGV4LCAwKTsKKyAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICh2YWwgPiAxLCAwKSkKK0BAIC0yMTgsNyArMjEzLDcgQEAKKyAKKyAKKyBzdGF0aWMgaW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKGFsd2F5c19pbmxpbmUpKQorLV9fbGxsX211dGV4X3VubG9ja19mb3JjZSAobGxsX2xvY2tfdCAqZnV0ZXgpCisrX19sbGxfbXV0ZXhfdW5sb2NrX2ZvcmNlIChpbnQgKmZ1dGV4KQorIHsKKyAgICh2b2lkKSBhdG9taWNfZXhjaGFuZ2VfcmVsIChmdXRleCwgMCk7CisgICBsbGxfZnV0ZXhfd2FrZSAoZnV0ZXgsIDEpOworQEAgLTIzOSw3ICsyMzQsNyBAQAorICNkZWZpbmUgVEhSRUFEX0lOSVRfTE9DSyhQRCwgTE9DSykgXAorICAgKFBEKS0+TE9DSyA9IExMTF9MT0NLX0lOSVRJQUxJWkVSCisgCistZXh0ZXJuIGludCBsbGxfdW5sb2NrX3dha2VfY2IgKGxsbF9sb2NrX3QgKl9fZnV0ZXgpIGF0dHJpYnV0ZV9oaWRkZW47CisrZXh0ZXJuIGludCBsbGxfdW5sb2NrX3dha2VfY2IgKGludCAqX19mdXRleCkgYXR0cmlidXRlX2hpZGRlbjsKKyAKKyAvKiBUaGUgc3RhdGVzIG9mIGEgbG9jayBhcmU6CisgICAgIDAgIC0gIHVudGFrZW4KK2RpZmYgLWR1ck4gZ2xpYmMtMi42LjEub3JpZy9nbGliYy1wb3J0cy0yLjYuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL25wdGwvbG93bGV2ZWxsb2NrLmggZ2xpYmMtMi42LjEvZ2xpYmMtcG9ydHMtMi42LjEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9ucHRsL2xvd2xldmVsbG9jay5oCistLS0gZ2xpYmMtMi42LjEub3JpZy9nbGliYy1wb3J0cy0yLjYuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL25wdGwvbG93bGV2ZWxsb2NrLmgJMjAwNi0wOC0wNCAyMDo1NDo1Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbGliYy0yLjYuMS9nbGliYy1wb3J0cy0yLjYuMS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL25wdGwvbG93bGV2ZWxsb2NrLmgJMjAwOC0wNy0yOCAyMzo1MToxNC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMjcsOSArMjI3LDYgQEAKKyAvKiBPdXIgaW50ZXJuYWwgbG9jayBpbXBsZW1lbnRhdGlvbiBpcyBpZGVudGljYWwgdG8gdGhlIGJpbmFyeS1jb21wYXRpYmxlCisgICAgbXV0ZXggaW1wbGVtZW50YXRpb24uICovCisgCistLyogVHlwZSBmb3IgbG9jayBvYmplY3QuICAqLworLXR5cGVkZWYgaW50IGxsbF9sb2NrX3Q7CistCisgLyogSW5pdGlhbGl6ZXJzIGZvciBsb2NrLiAgKi8KKyAjZGVmaW5lIExMTF9MT0NLX0lOSVRJQUxJWkVSCQkoMCkKKyAjZGVmaW5lIExMTF9MT0NLX0lOSVRJQUxJWkVSX0xPQ0tFRAkoMSkKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjYuMS8xMzAtcG93ZXJwYy1zb2Z0ZmxvYXQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi42LjEvMTMwLXBvd2VycGMtc29mdGZsb2F0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YWVkZDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi42LjEvMTMwLXBvd2VycGMtc29mdGZsb2F0LnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK0Zyb206IGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9tbC9jcm9zc2djYy8yMDA4LTEwL21zZzAwMDQ0Lmh0bWwKK0Zyb206IGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vbWwvbGliYy1wb3J0cy8yMDA3LTA2L21zZzAwMDA1Lmh0bWwKKworMjAwNy0wNi0wNyAgU3RldmVuIE11bnJvZSAgPHNqbXVucm9lQHVzLmlibS5jb20+CisKKyAgICAqIHN5c2RlcHMvcG93ZXJwYy9ub2ZwdS9NYWtlZmlsZTogUmVtb3ZlIGZlX25vbWFzayBmcm9tIGxpYm0tc3VwcG9ydC4KKworZGlmZiAtdXJOIGdsaWJjLTIuNi5vcmlnL2dsaWJjLXBvcnRzLTIuNi4xL3N5c2RlcHMvcG93ZXJwYy9ub2ZwdS9NYWtlZmlsZSBnbGliYy0yLjYvZ2xpYmMtcG9ydHMtMi42LjEvc3lzZGVwcy9wb3dlcnBjL25vZnB1L01ha2VmaWxlCistLS0gZ2xpYmMtMi42Lm9yaWcvZ2xpYmMtcG9ydHMtMi42LjEvc3lzZGVwcy9wb3dlcnBjL25vZnB1L01ha2VmaWxlCTIwMDYtMTEtMjIgMDk6MTM6MTEuMDAwMDAwMDAwIC0wNjAwCisrKysgZ2xpYmMtMi42L2dsaWJjLXBvcnRzLTIuNi4xL3N5c2RlcHMvcG93ZXJwYy9ub2ZwdS9NYWtlZmlsZQkyMDA3LTA2LTA3IDA5OjUzOjA1LjcwODI0MDk3NiAtMDUwMAorQEAgLTYsNyArNiw3IEBACisgZW5kaWYKKyAKKyBpZmVxICgkKHN1YmRpciksbWF0aCkKKy1saWJtLXN1cHBvcnQgKz0gZmVudl9jb25zdCBmZV9ub21hc2sKKytsaWJtLXN1cHBvcnQgKz0gZmVudl9jb25zdAorIENQUEZMQUdTICs9IC1JLi4vc29mdC1mcC8KKyAjIFRoZSBmb2xsb3cgQ0ZMQUdTIGFyZSBhIHdvcmsgYXJvdW5kIGZvciBHQ0MgQnVnemlsbGEgQnVnIDI5MjUzCisgIyAiZXhwYW5kX2FicyB3cm9uZyBkZWZhdWx0IGNvZGUgZm9yIGZsb2F0aW5nIHBvaW50IgorCisKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjcvMTAwLUFSTS1hc21fcGFnZV9oLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuNy8xMDAtQVJNLWFzbV9wYWdlX2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAwNzlkMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjcvMTAwLUFSTS1hc21fcGFnZV9oLnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKK2RpZmYgLWR1ck4gZ2xpYmMtcG9ydHMtMi43Lm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL2lvcGVybS5jIGdsaWJjLXBvcnRzLTIuNy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hcm0vaW9wZXJtLmMKKy0tLSBnbGliYy0yLjcub3JpZy9nbGliYy1wb3J0cy0yLjcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL2lvcGVybS5jCTIwMDUtMDYtMTAgMTM6MTI6MDkuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi43L2dsaWJjLXBvcnRzLTIuNy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hcm0vaW9wZXJtLmMJMjAwOC0wNS0xOCAxNjoxOTo0NS4wMDAwMDAwMDAgKzAyMDAKK0BAIC00NSw3ICs0NSw2IEBACisgI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisgCisgI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKy0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyAjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorIAorICNkZWZpbmUgUEFUSF9BUk1fU1lTVFlQRQkiL2V0Yy9hcm1fc3lzdHlwZSIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjcvMTEwLUFSTS1OUFRMLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuNy8xMTAtQVJNLU5QVEwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI4MDFiNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjcvMTEwLUFSTS1OUFRMLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKKy0tLSBnbGliYy0yLjcvZ2xpYmMtcG9ydHMtMi43Lm9yaWcvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL25wdGwvc3lzZGVwLWNhbmNlbC5oCTIwMDctMDYtMDYgMTk6Mjc6MDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2xpYmMtMi43L2dsaWJjLXBvcnRzLTIuNy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hcm0vbnB0bC9zeXNkZXAtY2FuY2VsLmgJMjAwOC0wNS0xOCAxNjo1NzoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC03Myw2ICs3Myw5IEBACisgIyBkZWZpbmUgRE9DQVJHU181CURPQ0FSR1NfNAorICMgZGVmaW5lIFVORE9DQVJHU181CVVORE9DQVJHU180CisgCisrIyBkZWZpbmUgRE9DQVJHU182ICAgIERPQ0FSR1NfNQorKyMgZGVmaW5lIFVORE9DQVJHU182ICBVTkRPQ0FSR1NfNQorKworICMgaWZkZWYgSVNfSU5fbGlicHRocmVhZAorICMgIGRlZmluZSBDRU5BQkxFCWJsIFBMVEpNUChfX3B0aHJlYWRfZW5hYmxlX2FzeW5jY2FuY2VsKQorICMgIGRlZmluZSBDRElTQUJMRQlibCBQTFRKTVAoX19wdGhyZWFkX2Rpc2FibGVfYXN5bmNjYW5jZWwpCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi45LzEwMC1hcm1fbGludXhfdGxzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuOS8xMDAtYXJtX2xpbnV4X3Rscy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjlkNGFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dsaWJjL3BvcnRzLTIuOS8xMDAtYXJtX2xpbnV4X3Rscy5wYXRjaApAQCAtMCwwICsxLDE0IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIGh0dHA6Ly93d3cubmFiYmxlLmNvbS9hcm0tbGludXgtY29tcGlsYXRpb24tZmFpbHVyZS1hbmQtcG9zc2libGUtZml4LXRkMTkyMjkwNzQuaHRtbAorCitkaWZmIC1kdXJOIGdsaWJjLTIuOS5vcmlnL3BvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FybS9zeXNkZXAuaCBnbGliYy0yLjkvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL3N5c2RlcC5oCistLS0gZ2xpYmMtMi45Lm9yaWcvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL3N5c2RlcC5oIDI1IE5vdiAyMDA4IDE2OjM3OjI2IC0wMDAwIDEuMzMKKysrKyBnbGliYy0yLjkvcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL3N5c2RlcC5oIDI3IEphbiAyMDA5IDE1OjM1OjM4IC0wMDAwCitAQCAtMjgsNiArMjgsOCBAQAorIC8qIERlZmluZXMgUlRMRF9QUklWQVRFX0VSUk5PIGFuZCBVU0VfRExfU1lTSU5GTy4gICovCisgI2luY2x1ZGUgPGRsLXN5c2RlcC5oPgorIAorKyNpbmNsdWRlIDx0bHMuaD4KKysKKyAvKiBGb3IgTGludXggd2UgY2FuIHVzZSB0aGUgc3lzdGVtIGNhbGwgdGFibGUgaW4gdGhlIGhlYWRlciBmaWxlCisJL3Vzci9pbmNsdWRlL2FzbS91bmlzdGQuaAorICAgIG9mIHRoZSBrZXJuZWwuICBCdXQgdGhlc2Ugc3ltYm9scyBkbyBub3QgZm9sbG93IHRoZSBTWVNfKiBzeW50YXggCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi45LzExMC1hcm0tZml4LXNqbGotZm9yLWZwdS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbGliYy9wb3J0cy0yLjkvMTEwLWFybS1maXgtc2psai1mb3ItZnB1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmN2MxZjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ2xpYmMvcG9ydHMtMi45LzExMC1hcm0tZml4LXNqbGotZm9yLWZwdS5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tOiBNaWtlIEZyeXNpbmdlciA8dmFwaWVyIGF0IGdlbnRvbyBkb3Qgb3JnPgorVG86IGxpYmMtcG9ydHMgYXQgc291cmNld2FyZSBkb3Qgb3JnCitTdWJqZWN0OiBbUEFUQ0hdIGFybS9mcHUvc2V0am1wLlM6IGFkZCBtaXNzaW5nIGhpZGRlbiBkZWYKK0RhdGU6IFRodSwgMjUgRGVjIDIwMDggMjM6MDg6NTYgLTA1MDAKKworQWxsIHRoZSBvdGhlciBhcm0gc2V0am1wLlMgZmlsZXMgcHJvdmlkZSBhIGhpZGRlbiBhbGlhcyBmb3IgX19zaWdzZXRqbXAuCitXaXRob3V0IHRoaXMsIHdlIGdldCBhIG5pY2UgYnVpbGQgZmFpbHVyZSBsaWtlIHNvOgorCisvdmFyL3RtcC9jcm9zcy9hcm12NGwtdW5rbm93bi1saW51eC1nbnUvcG9ydGFnZS9jcm9zcy1hcm12NGwtdW5rbm93bi1saW51eC1nbnUvZ2xpYmMtMi45X3AyMDA4MTIwMS93b3JrL2J1aWxkLWRlZmF1bHQtYXJtdjRsLXVua25vd24tbGludXgtZ251LW5wdGwvbGliY19waWMub3M6IEluIGZ1bmN0aW9uIGBzZXRqbXAnOgordW53aW5kLXBlLmM6KC50ZXh0KzB4MTVhNTQpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX0dJX19fc2lnc2V0am1wJworL3Zhci90bXAvY3Jvc3MvYXJtdjRsLXVua25vd24tbGludXgtZ251L3BvcnRhZ2UvY3Jvc3MtYXJtdjRsLXVua25vd24tbGludXgtZ251L2dsaWJjLTIuOV9wMjAwODEyMDEvd29yay9idWlsZC1kZWZhdWx0LWFybXY0bC11bmtub3duLWxpbnV4LWdudS1ucHRsL2xpYmNfcGljLm9zOiBJbiBmdW5jdGlvbiBgX19HSV9fc2V0am1wJzoKK3Vud2luZC1wZS5jOigudGV4dCsweDE1YTY0KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19HSV9fX3NpZ3NldGptcCcKK2NvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCittYWtlWzFdOiAqKiogWy92YXIvdG1wL2Nyb3NzL2FybXY0bC11bmtub3duLWxpbnV4LWdudS9wb3J0YWdlL2Nyb3NzLWFybXY0bC11bmtub3duLWxpbnV4LWdudS9nbGliYy0yLjlfcDIwMDgxMjAxL3dvcmsvYnVpbGQtZGVmYXVsdC1hcm12NGwtdW5rbm93bi1saW51eC1nbnUtbnB0bC9saWJjLnNvXSBFcnJvciAxCisKK1NpZ25lZC1vZmYtYnk6IE1pa2UgRnJ5c2luZ2VyIDx2YXBpZXJAZ2VudG9vLm9yZz4KKy0tLQorIHN5c2RlcHMvYXJtL2ZwdS9zZXRqbXAuUyB8ICAgIDIgKysKKyAxIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3N5c2RlcHMvYXJtL2ZwdS9zZXRqbXAuUyBiL3N5c2RlcHMvYXJtL2ZwdS9zZXRqbXAuUworaW5kZXggODQzMjgzNi4uODJhN2UxOSAxMDA2NDQKKy0tLSBhL3BvcnRzL3N5c2RlcHMvYXJtL2ZwdS9zZXRqbXAuUworKysrIGIvcG9ydHMvc3lzZGVwcy9hcm0vZnB1L3NldGptcC5TCitAQCAtMzMsMyArMzMsNSBAQCBFTlRSWSAoX19zaWdzZXRqbXApCisgCS8qIE1ha2UgYSB0YWlsIGNhbGwgdG8gX19zaWdqbXBfc2F2ZTsgaXQgdGFrZXMgdGhlIHNhbWUgYXJncy4gICovCisgCUIJUExUSk1QKENfU1lNQk9MX05BTUUoX19zaWdqbXBfc2F2ZSkpCisgRU5EIChfX3NpZ3NldGptcCkKKysKKytoaWRkZW5fZGVmIChfX3NpZ3NldGptcCkKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbXAvNC4yLjIvMTAwLW1wZl9zZXRfc3RyLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dtcC80LjIuMi8xMDAtbXBmX3NldF9zdHIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ5YWMwNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbXAvNC4yLjIvMTAwLW1wZl9zZXRfc3RyLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK09yaWdpbmFsIHBhdGNoIGZyb20gaHR0cDovL2dtcGxpYi5vcmcvcGF0Y2hlcy9tcGZfc2V0X3N0ci5jLmRpZmYKK1JlLWRpZmZlZCB0byBtYXRjaCBjcm9zc3Rvb2wtTkcgY29udmVudGlvbnMuCisKK2RpZmYgLWR1ciBnbXAtNC4yLjIub3JpZy9tcGYvc2V0X3N0ci5jIGdtcC00LjIuMi9tcGYvc2V0X3N0ci5jCistLS0gZ21wLTQuMi4yLm9yaWcvbXBmL3NldF9zdHIuYwkyMDA3LTA4LTMwIDIwOjMxOjQwLjAwMDAwMDAwMCArMDIwMAorKysrIGdtcC00LjIuMi9tcGYvc2V0X3N0ci5jCTIwMDgtMDEtMjggMjM6MDU6MjkuMDAwMDAwMDAwICswMTAwCitAQCAtMjcxLDggKzI3MSwyOSBAQAorICAgICAgIH0KKyAKKyAgICAgaWYgKGV4cHB0ciAhPSAwKQorLSAgICAgIC8qIEZJWE1FOiBTaG91bGQgZG8gc29tZSBlcnJvciBjaGVja2luZyBoZXJlLiAgKi8KKy0gICAgICBleHBfaW5fYmFzZSA9IHN0cnRvbCAoZXhwcHRyLCAoY2hhciAqKikgMCwgZXhwX2Jhc2UpOworKyAgICAgIHsKKysJLyogU2NhbiBhbmQgY29udmVydCB0aGUgZXhwb25lbnQsIGluIGJhc2UgZXhwX2Jhc2UuICAqLworKwlsb25nIGRpZywgbmVnID0gLShsb25nKSAoJy0nID09IGV4cHB0clswXSk7CisrCWV4cHB0ciAtPSBuZWc7CQkJLyogY29uZGl0aW9uYWwgaW5jcmVtZW50ICovCisrCWMgPSAodW5zaWduZWQgY2hhcikgKmV4cHB0cisrOworKwlkaWcgPSBkaWdpdF92YWx1ZVtjXTsKKysJaWYgKGRpZyA+PSBleHBfYmFzZSkKKysJICB7CisrCSAgICBUTVBfRlJFRTsKKysJICAgIHJldHVybiAtMTsKKysJICB9CisrCWV4cF9pbl9iYXNlID0gZGlnOworKwljID0gKHVuc2lnbmVkIGNoYXIpICpleHBwdHIrKzsKKysJZGlnID0gZGlnaXRfdmFsdWVbY107CisrCXdoaWxlIChkaWcgPCBleHBfYmFzZSkKKysJICB7CisrCSAgICBleHBfaW5fYmFzZSA9IGV4cF9pbl9iYXNlICogZXhwX2Jhc2U7CisrCSAgICBleHBfaW5fYmFzZSArPSBkaWc7CisrCSAgICBjID0gKHVuc2lnbmVkIGNoYXIpICpleHBwdHIrKzsKKysJICAgIGRpZyA9IGRpZ2l0X3ZhbHVlW2NdOworKwkgIH0KKysJZXhwX2luX2Jhc2UgPSAoZXhwX2luX2Jhc2UgXiBuZWcpIC0gbmVnOyAvKiBjb25kaXRpb25hbCBuZWdhdGlvbiAqLworKyAgICAgIH0KKyAgICAgZWxzZQorICAgICAgIGV4cF9pbl9iYXNlID0gMDsKKyAgICAgaWYgKGRvdHBvcyAhPSAwKQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dtcC80LjIuNC8xMDAtbXBmX2VxLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dtcC80LjIuNC8xMDAtbXBmX2VxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MmY3ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ21wLzQuMi40LzEwMC1tcGZfZXEucGF0Y2gKQEAgLTAsMCArMSwyMTkgQEAKK09yaWdpbmFsIHBhdGNoIGZyb206IG1wZl9lcS5kaWZmCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIGdtcC00LjIuNC5vcmlnL2RvYy9nbXAudGV4aSBnbXAtNC4yLjQvZG9jL2dtcC50ZXhpCistLS0gZ21wLTQuMi40Lm9yaWcvZG9jL2dtcC50ZXhpCTIwMDgtMDktMTggMTc6MzY6MTQuMDAwMDAwMDAwICswMjAwCisrKysgZ21wLTQuMi40L2RvYy9nbXAudGV4aQkyMDA5LTAzLTA4IDE4OjM2OjE2LjAwMDAwMDAwMCArMDEwMAorQEAgLTQ4NDksOSArNDg0OSwxMiBAQAorIGVxdWFsLCB6ZXJvIG90aGVyd2lzZS4gIEkuZS4sIHRlc3QgaWYgQHZhcntvcDF9IGFuZCBAdmFye29wMn0gYXJlIGFwcHJveGltYXRlbHkKKyBlcXVhbC4KKyAKKy1DYXV0aW9uOiBDdXJyZW50bHkgb25seSB3aG9sZSBsaW1icyBhcmUgY29tcGFyZWQsIGFuZCBvbmx5IGluIGFuIGV4YWN0CistZmFzaGlvbi4gIEluIHRoZSBmdXR1cmUgdmFsdWVzIGxpa2UgMTAwMCBhbmQgMDExMSBtYXkgYmUgY29uc2lkZXJlZCB0aGUgc2FtZQorLXRvIDMgYml0cyAob24gdGhlIGJhc2lzIHRoYXQgdGhlaXIgZGlmZmVyZW5jZSBpcyB0aGF0IHNtYWxsKS4KKytDYXV0aW9uIDE6IEFsbCB2ZXJzaW9uIG9mIEdNUCB1cCB0byB2ZXJzaW9uIDQuMi40IGNvbXBhcmVkIGp1c3Qgd2hvbGUgbGltYnMsCisrbWVhbmluZyBzb21ldGltZXMgbW9yZSB0aGFuIEB2YXJ7b3AzfSBiaXRzLCBzb21ldGltZXMgZmV3ZXIuCisrCisrQ2F1dGlvbiAyOiBUaGlzIGZ1bmN0aW9uIHdpbGwgY29uc2lkZXIgWFhYMTEuLi4xMTEgYW5kIFhYMTAwLi4uMDAwIGRpZmZlcmVudCwKKytldmVuIGlmIC4uLiBpcyByZXBsYWNlZCBieSBhIHNlbWktaW5maW5pdGUgbnVtYmVyIG9mIGJpdHMuICBTdWNoIG51bWJlcnMgYXJlCisrcmVhbGx5IGp1c3Qgb25lIHVscCBvZmYsIGFuZCBzaG91bGQgYmUgY29uc2lkZXJlZCBlcXVhbC4KKyBAZW5kIGRlZnR5cGVmdW4KKyAKKyBAZGVmdHlwZWZ1biB2b2lkIG1wZl9yZWxkaWZmIChtcGZfdCBAdmFye3JvcH0sIG1wZl90IEB2YXJ7b3AxfSwgbXBmX3QgQHZhcntvcDJ9KQorZGlmZiAtZHVyTiBnbXAtNC4yLjQub3JpZy9tcGYvZXEuYyBnbXAtNC4yLjQvbXBmL2VxLmMKKy0tLSBnbXAtNC4yLjQub3JpZy9tcGYvZXEuYwkyMDA3LTA4LTMwIDIwOjMxOjQwLjAwMDAwMDAwMCArMDIwMAorKysrIGdtcC00LjIuNC9tcGYvZXEuYwkyMDA5LTAzLTA4IDE4OjM2OjE2LjAwMDAwMDAwMCArMDEwMAorQEAgLTEsNiArMSw2IEBACisgLyogbXBmX2VxIC0tIENvbXBhcmUgdHdvIGZsb2F0cyB1cCB0byBhIHNwZWNpZmllZCBiaXQgIy4KKyAKKy1Db3B5cmlnaHQgMTk5MywgMTk5NSwgMTk5NiwgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytDb3B5cmlnaHQgMTk5MywgMTk5NSwgMTk5NiwgMjAwMSwgMjAwMiwgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisgCitAQCAtMTksNiArMTksNyBAQAorIAorICNpbmNsdWRlICJnbXAuaCIKKyAjaW5jbHVkZSAiZ21wLWltcGwuaCIKKysjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKyAKKyBpbnQKKyBtcGZfZXEgKG1wZl9zcmNwdHIgdSwgbXBmX3NyY3B0ciB2LCB1bnNpZ25lZCBsb25nIGludCBuX2JpdHMpCitAQCAtMjYsNiArMjcsOCBAQAorICAgbXBfc3JjcHRyIHVwLCB2cDsKKyAgIG1wX3NpemVfdCB1c2l6ZSwgdnNpemUsIHNpemUsIGk7CisgICBtcF9leHBfdCB1ZXhwLCB2ZXhwOworKyAgbXBfbGltYl90IGRpZmY7CisrICBpbnQgY250OworIAorICAgdWV4cCA9IHUtPl9tcF9leHA7CisgICB2ZXhwID0gdi0+X21wX2V4cDsKK0BAIC01MywxMCArNTYsOCBAQAorICAgLyogVSBhbmQgViBoYXZlIHRoZSBzYW1lIHNpZ24gYW5kIGFyZSBib3RoIG5vbi16ZXJvLiAgKi8KKyAKKyAgIC8qIDIuIEFyZSB0aGUgZXhwb25lbnRzIGRpZmZlcmVudD8gICovCistICBpZiAodWV4cCA+IHZleHApCistICAgIHJldHVybiAwOwkJCS8qID8/PyBoYW5kbGUgKHVleHAgPSB2ZXhwICsgMSkgICAqLworLSAgaWYgKHZleHAgPiB1ZXhwKQorLSAgICByZXR1cm4gMDsJCQkvKiA/Pz8gaGFuZGxlICh2ZXhwID0gdWV4cCArIDEpICAgKi8KKysgIGlmICh1ZXhwICE9IHZleHApCisrICAgIHJldHVybiAwOworIAorICAgdXNpemUgPSBBQlMgKHVzaXplKTsKKyAgIHZzaXplID0gQUJTICh2c2l6ZSk7CitAQCAtOTMsMTcgKzk0LDI2IEBACisgICAgICAgc2l6ZSA9IHVzaXplOworICAgICB9CisgCistICBpZiAoc2l6ZSA+IChuX2JpdHMgKyBHTVBfTlVNQl9CSVRTIC0gMSkgLyBHTVBfTlVNQl9CSVRTKQorLSAgICBzaXplID0gKG5fYml0cyArIEdNUF9OVU1CX0JJVFMgLSAxKSAvIEdNUF9OVU1CX0JJVFM7CisrICB1cCArPSB1c2l6ZTsJCQkvKiBwb2ludCBqdXN0IGFib3ZlIG1vc3Qgc2lnbmlmaWNhbnQgbGltYiAqLworKyAgdnAgKz0gdnNpemU7CQkJLyogcG9pbnQganVzdCBhYm92ZSBtb3N0IHNpZ25pZmljYW50IGxpbWIgKi8KKyAKKy0gIHVwICs9IHVzaXplIC0gc2l6ZTsKKy0gIHZwICs9IHZzaXplIC0gc2l6ZTsKKysgIGNvdW50X2xlYWRpbmdfemVyb3MgKGNudCwgdXBbLTFdKTsKKysgIGlmICgodnBbLTFdID4+IChHTVBfTElNQl9CSVRTIC0gMSAtIGNudCkpICE9IDEpCisrICAgIHJldHVybiAwOwkJCS8qIG1zYiBwb3NpdGlvbnMgZGlmZmVyZW50ICovCisgCistICBmb3IgKGkgPSBzaXplIC0gMTsgaSA+PSAwOyBpLS0pCisrICBuX2JpdHMgKz0gY250IC0gR01QX05BSUxfQklUUzsKKysKKysgIHNpemUgPSBNSU4gKHNpemUsIChuX2JpdHMgKyBHTVBfTlVNQl9CSVRTIC0gMSkgLyBHTVBfTlVNQl9CSVRTKTsKKysKKysgIHVwIC09IHNpemU7CQkJLyogcG9pbnQgYXQgbGVhc3Qgc2lnbmlmaWNhbnQgcmVsZXZhbnQgbGltYiAqLworKyAgdnAgLT0gc2l6ZTsJCQkvKiBwb2ludCBhdCBsZWFzdCBzaWduaWZpY2FudCByZWxldmFudCBsaW1iICovCisrCisrICBmb3IgKGkgPSBzaXplIC0gMTsgaSA+IDA7IGktLSkKKyAgICAgeworICAgICAgIGlmICh1cFtpXSAhPSB2cFtpXSkKKyAJcmV0dXJuIDA7CisgICAgIH0KKyAKKy0gIHJldHVybiAxOworKyAgZGlmZiA9ICh1cFswXSBeIHZwWzBdKSA+PiBHTVBfTlVNQl9CSVRTIC0gMSAtIChuX2JpdHMgLSAxKSAlIEdNUF9OVU1CX0JJVFM7CisrICByZXR1cm4gZGlmZiA9PSAwOworIH0KK2RpZmYgLWR1ck4gZ21wLTQuMi40Lm9yaWcvdGVzdHMvY3h4L3QtcHJlYy5jYyBnbXAtNC4yLjQvdGVzdHMvY3h4L3QtcHJlYy5jYworLS0tIGdtcC00LjIuNC5vcmlnL3Rlc3RzL2N4eC90LXByZWMuY2MJMjAwNy0wOS0wMSAxMjowOTowMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbXAtNC4yLjQvdGVzdHMvY3h4L3QtcHJlYy5jYwkyMDA5LTAzLTA4IDE4OjM2OjE2LjAwMDAwMDAwMCArMDEwMAorQEAgLTEsNiArMSw2IEBACisgLyogVGVzdCBwcmVjaXNpb24gb2YgbXBmX2NsYXNzIGV4cHJlc3Npb25zLgorIAorLUNvcHlyaWdodCAyMDAxLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK0NvcHlyaWdodCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKyAKK0BAIC02MSw3ICs2MSw3IEBACisgICAgIGcgPSAxIC8gZjsKKyAgICAgQVNTRVJUX0FMV0FZU19QUkVDCisgICAgICAgKGcsICIwLjExMTExIDExMTExIDExMTExIDExMTExIDExMTExIDExMTExIDExMTExIDExMTExIDExMTExIDExMTExIgorLSAgICAgICAiICAgICAxMTExMSAxMTExMSAxMTExMSAxMTExMSAxMTExMSAxMSIsIHZlcnlfbGFyZ2VfcHJlYyk7CisrICAgICAgICIgICAgIDExMTExIDExMTExIDExMTExIDExMTExIDExMTExIDExMSIsIHZlcnlfbGFyZ2VfcHJlYyk7CisgICB9CisgICB7CisgICAgIG1wZl9jbGFzcyBmKDE1LjAsIGxhcmdlX3ByZWMpOworQEAgLTY5LDcgKzY5LDcgQEAKKyAgICAgZyA9IDEgLyBmOworICAgICBBU1NFUlRfQUxXQVlTX1BSRUMKKyAgICAgICAoZywgIjAuMDY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYiCistICAgICAgICIgICAgIDY2NjY2IDY2NjY2IDY2NjY2IDY2NjY2IDY2NjY2IDY3IiwgdmVyeV9sYXJnZV9wcmVjKTsKKysgICAgICAgIiAgICAgNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY3IiwgdmVyeV9sYXJnZV9wcmVjKTsKKyAgIH0KKyAKKyAgIC8vIGNvbXBvdW5kIGV4cHJlc3Npb25zCitAQCAtOTQsMTQgKzk0LDE0IEBACisgICAgIGkgPSBmIC8gZyArIGg7CisgICAgIEFTU0VSVF9BTFdBWVNfUFJFQworICAgICAgIChpLCAiMTUuMzMzMzMgMzMzMzMgMzMzMzMgMzMzMzMgMzMzMzMgMzMzMzMgMzMzMzMgMzMzMzMgMzMzMzMgMzMzMzMiCistICAgICAgICIgICAgICAzMzMzMyAzMzMzMyAzMzMzMyAzMzMiLCB2ZXJ5X2xhcmdlX3ByZWMpOworKyAgICAgICAiICAgICAgMzMzMzMgMzMzMzMgMzMzMzMgMzMzMzMgMzMzMzMgMyIsIHZlcnlfbGFyZ2VfcHJlYyk7CisgICB9CisgICB7CisgICAgIG1wZl9jbGFzcyBmKDMuMCwgc21hbGxfcHJlYyk7CisgICAgIG1wZl9jbGFzcyBnKC0oMSArIGYpIC8gMywgdmVyeV9sYXJnZV9wcmVjKTsKKyAgICAgQVNTRVJUX0FMV0FZU19QUkVDCisgICAgICAgKGcsICItMS4zMzMzMyAzMzMzMyAzMzMzMyAzMzMzMyAzMzMzMyAzMzMzMyAzMzMzMyAzMzMzMyAzMzMzMyAzMzMzMyIKKy0gICAgICAgIiAgICAgIDMzMzMzIDMzMzMzIDMzMzMzIDMzMyIsIHZlcnlfbGFyZ2VfcHJlYyk7CisrICAgICAgICIgICAgICAzMzMzMyAzMzMzMyAzMzMzMyAzMzMzMyAzMzMzMyAzMyIsIHZlcnlfbGFyZ2VfcHJlYyk7CisgICB9CisgICB7CisgICAgIG1wZl9jbGFzcyBmKDkuMCwgbWVkaXVtX3ByZWMpOworQEAgLTExNyw3ICsxMTcsNyBAQAorICAgICBnID0gaHlwb3QoMSArIDUgLyBmLCAxLjApOworICAgICBBU1NFUlRfQUxXQVlTX1BSRUMKKyAgICAgICAoZywgIjEuNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYiCistICAgICAgICIgICAgIDY2NjY2IDY2NjY2IDY2NjY2IDY2NyIsIHZlcnlfbGFyZ2VfcHJlYyk7CisrICAgICAgICIgICAgIDY2NjY2IDY2NjY2IDY2NjY2IDY2NjY2IDY2NjY2IDY3IiwgdmVyeV9sYXJnZV9wcmVjKTsKKyAgIH0KKyAKKyAgIC8vIGNvbXBvdW5kIGFzc2lnbm1lbnRzCitAQCAtMTQyLDcgKzE0Miw3IEBACisgICAgIG1wZl9jbGFzcyBnKDAuMCwgdmVyeV9sYXJnZV9wcmVjKTsKKyAgICAgZyA9IG1wZl9jbGFzcygxIC8gZik7CisgICAgIEFTU0VSVF9BTFdBWVNfUFJFQworLSAgICAgIChnLCAiMC4xMTExMSAxMTExMSAxMTExMSAxMTExMSAxMTExMSAxMTExMSAxMTExMSAxMTEiLCBtZWRpdW1fcHJlYyk7CisrICAgICAgKGcsICIwLjExMTExIDExMTExIDExMTExIDExMTExIDExMTExIDExMTExIDExMTExIDExMTEiLCBtZWRpdW1fcHJlYyk7CisgICB9CisgICB7CisgICAgIG1wZl9jbGFzcyBmKDE1LjAsIGxhcmdlX3ByZWMpOworQEAgLTE1MCw3ICsxNTAsNyBAQAorICAgICBnID0gbXBmX2NsYXNzKDEgLyBmKTsKKyAgICAgQVNTRVJUX0FMV0FZU19QUkVDCisgICAgICAgKGcsICIwLjA2NjY2IDY2NjY2IDY2NjY2IDY2NjY2IDY2NjY2IDY2NjY2IDY2NjY2IDY2NjY2IDY2NjY2IDY2NjY2IgorLSAgICAgICAiICAgICA2NjY2NiA2NjciLCBsYXJnZV9wcmVjKTsKKysgICAgICAgIiAgICAgNjY2NjYgNjY2NyIsIGxhcmdlX3ByZWMpOworICAgfQorIAorICAgeworQEAgLTE1OCw3ICsxNTgsOCBAQAorICAgICBtcGZfY2xhc3MgaCgwLjAsIHZlcnlfbGFyZ2VfcHJlYyk7CisgICAgIGggPSBtcGZfY2xhc3MoZiAvIGcgKyAxLCBsYXJnZV9wcmVjKTsKKyAgICAgQVNTRVJUX0FMV0FZU19QUkVDCistICAgICAgKGgsICIxLjMzMzMzIDMzMzMzIDMzMzMzIDMzMzMzIDMzMzMzIDMzMzMzIDMzMzMzIDMzMzMzIDMzMzMzIDMzMzMiLAorKyAgICAgIChoLCAiMS4zMzMzMyAzMzMzMyAzMzMzMyAzMzMzMyAzMzMzMyAzMzMzMyAzMzMzMyAzMzMzMyAzMzMzMyAzMzMzMyIKKysgICAgICAgIiAgICAgMzMzMzMgMzMzIiwKKyAgICAgICAgbGFyZ2VfcHJlYyk7CisgICB9CisgCitAQCAtMTcwLDcgKzE3MSw3IEBACisgICAgIGcgPSBmIC0gcTsKKyAgICAgQVNTRVJUX0FMV0FZU19QUkVDCisgICAgICAgKGcsICIyLjY2NjY2IDY2NjY2IDY2NjY2IDY2NjY2IDY2NjY2IDY2NjY2IDY2NjY2IDY2NjY2IDY2NjY2IDY2NjY2IgorLSAgICAgICAiICAgICA2NjY2NiA2NjY2NiA2NjY2NiA2NjciLCB2ZXJ5X2xhcmdlX3ByZWMpOworKyAgICAgICAiICAgICA2NjY2NiA2NjY2NiA2NjY2NiA2NjY2NiA2NjY2NiA2NyIsIHZlcnlfbGFyZ2VfcHJlYyk7CisgICB9CisgCisgICB7CitAQCAtMTc5LDcgKzE4MCw4IEBACisgICAgIG1wZl9jbGFzcyBnKDAuMCwgdmVyeV9sYXJnZV9wcmVjKTsKKyAgICAgZyA9IG1wZl9jbGFzcyhmIC0gcSwgbGFyZ2VfcHJlYyk7CisgICAgIEFTU0VSVF9BTFdBWVNfUFJFQworLSAgICAgIChnLCAiMi42NjY2NiA2NjY2NiA2NjY2NiA2NjY2NiA2NjY2NiA2NjY2NiA2NjY2NiA2NjY2NiA2NjY2NiA2NjY3IiwKKysgICAgICAoZywgIjIuNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYiCisrICAgICAgICIgICAgIDY2NjY2IDY2NyIsCisgICAgICAgIGxhcmdlX3ByZWMpOworICAgfQorICAgeworQEAgLTE4OCw3ICsxOTAsNyBAQAorICAgICBtcGZfY2xhc3MgZygwLjAsIHZlcnlfbGFyZ2VfcHJlYyk7CisgICAgIGcgPSBtcGZfY2xhc3MoZiAtIHEpOworICAgICBBU1NFUlRfQUxXQVlTX1BSRUMKKy0gICAgICAoZywgIjIuNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY2NyIsIG1lZGl1bV9wcmVjKTsKKysgICAgICAoZywgIjIuNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY2NjYgNjY3IiwgbWVkaXVtX3ByZWMpOworICAgfQorICAgeworICAgICBtcGZfY2xhc3MgZigxNS4wLCBsYXJnZV9wcmVjKTsKK0BAIC0xOTYsNyArMTk4LDggQEAKKyAgICAgbXBmX2NsYXNzIGcoMC4wLCB2ZXJ5X2xhcmdlX3ByZWMpOworICAgICBnID0gbXBmX2NsYXNzKGYgKyBxKTsKKyAgICAgQVNTRVJUX0FMV0FZU19QUkVDCistICAgICAgKGcsICIxNS4zMzMzMyAzMzMzMyAzMzMzMyAzMzMzMyAzMzMzMyAzMzMzMyAzMzMzMyAzMzMzMyAzMzMzMyAzMzMzIiwKKysgICAgICAoZywgIjE1LjMzMzMzIDMzMzMzIDMzMzMzIDMzMzMzIDMzMzMzIDMzMzMzIDMzMzMzIDMzMzMzIDMzMzMzIDMzMzMzIgorKyAgICAgICAiICAgICAgMzMzMzMgMzMiLAorICAgICAgICBsYXJnZV9wcmVjKTsKKyAgIH0KKyB9CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ21wLzQuMi40LzExMC1tcGZfc2V0X3N0ci5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbXAvNC4yLjQvMTEwLW1wZl9zZXRfc3RyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYjYwMGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ21wLzQuMi40LzExMC1tcGZfc2V0X3N0ci5wYXRjaApAQCAtMCwwICsxLDMyIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tOiBtcGZfc2V0X3N0ci5jLjQuZGlmZgorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiBnbXAtNC4yLjQub3JpZy9tcGYvc2V0X3N0ci5jIGdtcC00LjIuNC9tcGYvc2V0X3N0ci5jCistLS0gZ21wLTQuMi40Lm9yaWcvbXBmL3NldF9zdHIuYwkyMDA4LTA4LTI1IDE2OjExOjM3LjAwMDAwMDAwMCArMDIwMAorKysrIGdtcC00LjIuNC9tcGYvc2V0X3N0ci5jCTIwMDktMDMtMDggMTg6MzY6MTYuMDAwMDAwMDAwICswMTAwCitAQCAtMTM3LDcgKzEzNywxMiBAQAorICAgICAgIGMgPSAodW5zaWduZWQgY2hhcikgKisrc3RyOworICAgICB9CisgCisrICAvKiBEZWZhdWx0IGJhc2UgdG8gZGVjaW1hbC4gICovCisrICBpZiAoYmFzZSA9PSAwKQorKyAgICBiYXNlID0gMTA7CisrCisgICBleHBfYmFzZSA9IGJhc2U7CisrCisgICBpZiAoYmFzZSA8IDApCisgICAgIHsKKyAgICAgICBleHBfYmFzZSA9IDEwOworQEAgLTE2NSwxMCArMTcwLDYgQEAKKyAJcmV0dXJuIC0xOworICAgICB9CisgCistICAvKiBEZWZhdWx0IGJhc2UgdG8gZGVjaW1hbC4gICovCistICBpZiAoYmFzZSA9PSAwKQorLSAgICBiYXNlID0gMTA7CistCisgICAvKiBMb2NhdGUgZXhwb25lbnQgcGFydCBvZiB0aGUgaW5wdXQuICBMb29rIGZyb20gdGhlIHJpZ2h0IG9mIHRoZSBzdHJpbmcsCisgICAgICBzaW5jZSB0aGUgZXhwb25lbnQgaXMgdXN1YWxseSBhIGxvdCBzaG9ydGVyIHRoYW4gdGhlIG1hbnRpc3NhLiAgKi8KKyAgIGV4cHB0ciA9IE5VTEw7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ21wLzQuMi40LzEyMC1wZXJmcG93LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dtcC80LjIuNC8xMjAtcGVyZnBvdy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDYyYjIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dtcC80LjIuNC8xMjAtcGVyZnBvdy5wYXRjaApAQCAtMCwwICsxLDE0OSBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbTogcGVyZnBvdy5jLmRpZmYKKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitDb3B5cmlnaHQgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwNSwgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gZ21wLTQuMi40Lm9yaWcvbXB6L3BlcmZwb3cuYyBnbXAtNC4yLjQvbXB6L3BlcmZwb3cuYworLS0tIGdtcC00LjIuNC5vcmlnL21wei9wZXJmcG93LmMJMjAwNy0wOC0zMCAyMDozMTo0MS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnbXAtNC4yLjQvbXB6L3BlcmZwb3cuYwkyMDA5LTAzLTA4IDE4OjM2OjE2LjAwMDAwMDAwMCArMDEwMAorQEAgLTEsNyArMSw3IEBACisgLyogbXB6X3BlcmZlY3RfcG93ZXJfcChhcmcpIC0tIFJldHVybiBub24temVybyBpZiBBUkcgaXMgYSBwZXJmZWN0IHBvd2VyLAorICAgIHplcm8gb3RoZXJ3aXNlLgorIAorLUNvcHlyaWdodCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK0NvcHlyaWdodCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDA1LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKyAKK0BAIC01OSw2ICs1OSw4IEBACisgI2RlZmluZSBTTUFMTEVTVF9PTUlUVEVEX1BSSU1FIDEwMDkKKyAKKyAKKysjZGVmaW5lIFBPVzJQKGEpICgoKGEpICYgKChhKSAtIDEpKSA9PSAwKQorKworIGludAorIG1wel9wZXJmZWN0X3Bvd2VyX3AgKG1wel9zcmNwdHIgdSkKKyB7CitAQCAtNzIsMTYgKzc0LDEzIEBACisgICBtcF9zaXplX3QgdXNpemUgPSBTSVogKHUpOworICAgVE1QX0RFQ0w7CisgCistICBpZiAodXNpemUgPT0gMCkKKy0gICAgcmV0dXJuIDE7CQkJLyogY29uc2lkZXIgMCBhIHBlcmZlY3QgcG93ZXIgKi8KKysgIGlmIChtcHpfY21wYWJzX3VpICh1LCAxKSA8PSAwKQorKyAgICByZXR1cm4gMTsJCQkvKiAtMSwgMCwgYW5kICsxIGFyZSBwZXJmZWN0IHBvd2VycyAqLworIAorICAgbjIgPSBtcHpfc2NhbjEgKHUsIDApOworICAgaWYgKG4yID09IDEpCisgICAgIHJldHVybiAwOwkJCS8qIDIgZGl2aWRlcyBleGFjdGx5IG9uY2UuICAqLworIAorLSAgaWYgKG4yICE9IDAgJiYgKG4yICYgMSkgPT0gMCAmJiB1c2l6ZSA8IDApCistICAgIHJldHVybiAwOwkJCS8qIDIgaGFzIGV2ZW4gbXVsdGlwbGljaXR5IHdpdGggbmVnYXRpdmUgVSAqLworLQorICAgVE1QX01BUks7CisgCisgICB1bnMgPSBBQlMgKHVzaXplKSAtIG4yIC8gQklUU19QRVJfTVBfTElNQjsKK0BAIC04OSw2ICs4OCwxNCBAQAorICAgTVBaX1RNUF9JTklUICh1MiwgdW5zKTsKKyAKKyAgIG1wel90ZGl2X3FfMmV4cCAodTIsIHUsIG4yKTsKKysgIG1wel9hYnMgKHUyLCB1Mik7CisrCisrICBpZiAobXB6X2NtcF91aSAodTIsIDEpID09IDApCisrICAgIHsKKysgICAgICBUTVBfRlJFRTsKKysgICAgICAvKiBmYWN0b3JpbmcgY29tcGxldGVkOyBjb25zaXN0ZW50IHBvd2VyICovCisrICAgICAgcmV0dXJuICEgKHVzaXplIDwgMCAmJiBQT1cyUChuMikpOworKyAgICB9CisgCisgICBpZiAoaXNwcmltZSAobjIpKQorICAgICBnb3RvIG4ycHJpbWU7CitAQCAtOTcsNiArMTA0LDkgQEAKKyAgICAgeworICAgICAgIHByaW1lID0gcHJpbWVzW2ldOworIAorKyAgICAgIGlmIChtcHpfY21wX3VpICh1MiwgcHJpbWUpIDwgMCkKKysJYnJlYWs7CisrCisgICAgICAgaWYgKG1wel9kaXZpc2libGVfdWlfcCAodTIsIHByaW1lKSkJLyogZGl2aXNpYmxlIGJ5IHRoaXMgcHJpbWU/ICovCisgCXsKKyAJICByZW0gPSBtcHpfdGRpdl9xX3VpIChxLCB1MiwgcHJpbWUgKiBwcmltZSk7CitAQCAtMTE1LDEyICsxMjUsNiBAQAorIAkgICAgICBuKys7CisgCSAgICB9CisgCistCSAgaWYgKChuICYgMSkgPT0gMCAmJiB1c2l6ZSA8IDApCistCSAgICB7CistCSAgICAgIFRNUF9GUkVFOworLQkgICAgICByZXR1cm4gMDsJCS8qIGV2ZW4gbXVsdGlwbGljaXR5IHdpdGggbmVnYXRpdmUgVSwgcmVqZWN0ICovCistCSAgICB9CistCisgCSAgbjIgPSBnY2QgKG4yLCBuKTsKKyAJICBpZiAobjIgPT0gMSkKKyAJICAgIHsKK0BAIC0xMjgsMTAgKzEzMiwxMSBAQAorIAkgICAgICByZXR1cm4gMDsJCS8qIHdlIGhhdmUgbXVsdGlwbGljaXR5IDEgb2Ygc29tZSBmYWN0b3IgKi8KKyAJICAgIH0KKyAKKy0JICBpZiAobXB6X2NtcGFic191aSAodTIsIDEpID09IDApCisrCSAgaWYgKG1wel9jbXBfdWkgKHUyLCAxKSA9PSAwKQorIAkgICAgeworIAkgICAgICBUTVBfRlJFRTsKKy0JICAgICAgcmV0dXJuIDE7CQkvKiBmYWN0b3JpbmcgY29tcGxldGVkOyBjb25zaXN0ZW50IHBvd2VyICovCisrCSAgICAgIC8qIGZhY3RvcmluZyBjb21wbGV0ZWQ7IGNvbnNpc3RlbnQgcG93ZXIgKi8KKysJICAgICAgcmV0dXJuICEgKHVzaXplIDwgMCAmJiBQT1cyUChuMikpOworIAkgICAgfQorIAorIAkgIC8qIEFzIHNvb24gYXMgbjIgYmVjb21lcyBhIHByaW1lIG51bWJlciwgc3RvcCBmYWN0b3JpbmcuCitAQCAtMTY5LDYgKzE3NCwxMCBAQAorICAgZWxzZQorICAgICB7CisgICAgICAgdW5zaWduZWQgbG9uZyBpbnQgbnRoOworKworKyAgICAgIGlmICh1c2l6ZSA8IDAgJiYgUE9XMlAobjIpKQorKwlyZXR1cm4gMDsKKysKKyAgICAgICAvKiBXZSBmb3VuZCBzb21lIGZhY3RvcnMgYWJvdmUuICBXZSBqdXN0IG5lZWQgdG8gY29uc2lkZXIgdmFsdWVzIG9mIG4KKyAJIHRoYXQgZGl2aWRlcyBuMi4gICovCisgICAgICAgZm9yIChudGggPSAyOyBudGggPD0gbjI7IG50aCsrKQorQEAgLTE4NCw4ICsxOTMsMTEgQEAKKyAJICAgIGV4YWN0ID0gbXB6X3Jvb3QgKHEsIHUyLCBudGgpOworIAkgIGlmIChleGFjdCkKKyAJICAgIHsKKy0JICAgICAgVE1QX0ZSRUU7CistCSAgICAgIHJldHVybiAxOworKwkgICAgICBpZiAoISAodXNpemUgPCAwICYmIFBPVzJQKG50aCkpKQorKwkJeworKwkJICBUTVBfRlJFRTsKKysJCSAgcmV0dXJuIDE7CisrCQl9CisgCSAgICB9CisgCSAgaWYgKG1wel9jbXBfdWkgKHEsIFNNQUxMRVNUX09NSVRURURfUFJJTUUpIDwgMCkKKyAJICAgIHsKK0BAIC0xOTksNiArMjExLDkgQEAKKyAgICAgfQorIAorIG4ycHJpbWU6CisrICBpZiAodXNpemUgPCAwICYmIFBPVzJQKG4yKSkKKysgICAgcmV0dXJuIDA7CisrCisgICBleGFjdCA9IG1wel9yb290IChOVUxMLCB1MiwgbjIpOworICAgVE1QX0ZSRUU7CisgICByZXR1cm4gZXhhY3Q7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ21wLzQuMy4xLzEwMC1tdWx0aXBsaWNpdHktdGhhdC1kb2VzLW5vdC1maXQtYW4taW50LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dtcC80LjMuMS8xMDAtbXVsdGlwbGljaXR5LXRoYXQtZG9lcy1ub3QtZml0LWFuLWludC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjBlODhmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dtcC80LjMuMS8xMDAtbXVsdGlwbGljaXR5LXRoYXQtZG9lcy1ub3QtZml0LWFuLWludC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitkaWZmIC0tZ2l0IGEvbXB6L3JlbW92ZS5jIGIvbXB6L3JlbW92ZS5jCistLS0gYS9tcHovcmVtb3ZlLmMKKysrKyBiL21wei9yZW1vdmUuYworQEAgLTIzLDcgKzIzLDcgQEAKKyB1bnNpZ25lZCBsb25nIGludAorIG1wel9yZW1vdmUgKG1wel9wdHIgZGVzdCwgbXB6X3NyY3B0ciBzcmMsIG1wel9zcmNwdHIgZikKKyB7CistICBtcHpfdCBmcG93WzQwXTsJCS8qIGluZXhoYXVzdGlibGUuLi51bnRpbCB5ZWFyIDIwMjAgb3Igc28gKi8KKysgIG1wel90IGZwb3dbR01QX0xJTUJfQklUU107CQkvKiBSZWFsbHkgTVBfU0laRV9UX0JJVFMgKi8KKyAgIG1wel90IHgsIHJlbTsKKyAgIHVuc2lnbmVkIGxvbmcgaW50IHB3cjsKKyAgIGludCBwOworQEAgLTY5LDcgKzY5LDcgQEAKKyAgICAgICBtcHpfc2V0IChkZXN0LCB4KTsKKyAgICAgfQorIAorLSAgcHdyID0gKDEgPDwgcCkgLSAxOworKyAgcHdyID0gKDFMIDw8IHApIC0gMTsKKyAKKyAgIG1wel9jbGVhciAoZnBvd1twXSk7CisgCitkaWZmIC0tZ2l0IGEvbXB6L3JlbW92ZS5jIGIvbXB6L3JlbW92ZS5jCistLS0gYS9tcHovcmVtb3ZlLmMKKysrKyBiL21wei9yZW1vdmUuYworQEAgLTgwLDcgKzgwLDcgQEAKKyAgICAgICBtcHpfdGRpdl9xciAoeCwgcmVtLCBkZXN0LCBmcG93W3BdKTsKKyAgICAgICBpZiAoU0laIChyZW0pID09IDApCisgCXsKKy0JICBwd3IgKz0gMSA8PCBwOworKwkgIHB3ciArPSAxTCA8PCBwOworIAkgIG1wel9zZXQgKGRlc3QsIHgpOworIAl9CisgICAgICAgbXB6X2NsZWFyIChmcG93W3BdKTsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbXAvNC4zLjEvMTEwLXVuYm91bmRlZC1hbGxvYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbXAvNC4zLjEvMTEwLXVuYm91bmRlZC1hbGxvYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGUwNTg4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2dtcC80LjMuMS8xMTAtdW5ib3VuZGVkLWFsbG9jLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK2RpZmYgLS1naXQgYS9tcG4vZ2VuZXJpYy90b29tNDRfbXVsLmMgYi9tcG4vZ2VuZXJpYy90b29tNDRfbXVsLmMKKy0tLSBhL21wbi9nZW5lcmljL3Rvb200NF9tdWwuYworKysrIGIvbXBuL2dlbmVyaWMvdG9vbTQ0X211bC5jCitAQCAtMTE2LDE3ICsxMTYsMTYgQEAKKyAKKyAgIFRNUF9NQVJLOworIAorLSAgYXMxICA9IFRNUF9TQUxMT0NfTElNQlMgKG4gKyAxKTsKKy0gIGFzbTEgPSBUTVBfU0FMTE9DX0xJTUJTIChuICsgMSk7CistICBhczIgID0gVE1QX1NBTExPQ19MSU1CUyAobiArIDEpOworLSAgYXNoICA9IFRNUF9TQUxMT0NfTElNQlMgKG4gKyAxKTsKKy0gIGFzbWggPSBUTVBfU0FMTE9DX0xJTUJTIChuICsgMSk7CistCistICBiczEgID0gVE1QX1NBTExPQ19MSU1CUyAobiArIDEpOworLSAgYnNtMSA9IFRNUF9TQUxMT0NfTElNQlMgKG4gKyAxKTsKKy0gIGJzMiAgPSBUTVBfU0FMTE9DX0xJTUJTIChuICsgMSk7CistICBic2ggID0gVE1QX1NBTExPQ19MSU1CUyAobiArIDEpOworLSAgYnNtaCA9IFRNUF9TQUxMT0NfTElNQlMgKG4gKyAxKTsKKysgIGFzMSAgPSBUTVBfQUxMT0NfTElNQlMgKDEwICogbiArIDEwKTsKKysgIGFzbTEgPSBhczEgICsgbiArIDE7CisrICBhczIgID0gYXNtMSArIG4gKyAxOworKyAgYXNoICA9IGFzMiAgKyBuICsgMTsKKysgIGFzbWggPSBhc2ggICsgbiArIDE7CisrICBiczEgID0gYXNtaCArIG4gKyAxOworKyAgYnNtMSA9IGJzMSAgKyBuICsgMTsKKysgIGJzMiAgPSBic20xICsgbiArIDE7CisrICBic2ggID0gYnMyICArIG4gKyAxOworKyAgYnNtaCA9IGJzaCAgKyBuICsgMTsKKyAKKyAgIGdwID0gcHA7CisgICBocCA9IHBwICsgbiArIDE7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ21wLzUuMC4xLzEwMC1maXgtdGVzdHMtQUJJLWxvbmctbG9uZy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9nbXAvNS4wLjEvMTAwLWZpeC10ZXN0cy1BQkktbG9uZy1sb25nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZTMwM2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvZ21wLzUuMC4xLzEwMC1maXgtdGVzdHMtQUJJLWxvbmctbG9uZy5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tOiBodHRwOi8vZ21wbGliLm9yZzo4MDAwL2dtcC01LjAvcmF3LXJldi83OTQ0MTAxNTFmNWYKKworVHdlYWtlZCB0byByZW1vdmUgdGhlIGh1bmsgaW4gdGhlIENoYW5nZWxvZywgYXMgaXQgZGlkIG5vdCBhcHBseSBjbGVhbmx5CisoIGFuZCB3aG8gbmVlZHMgQ2hhbmdlbG9ncz8gOy0pICkKKworIyBIRyBjaGFuZ2VzZXQgcGF0Y2gKKyMgVXNlciBUb3Jiam9ybiBHcmFubHVuZCA8dGVnZUBnbXBsaWIub3JnPgorIyBEYXRlIDEyNjcxMjI1MzIgLTM2MDAKKyMgTm9kZSBJRCA3OTQ0MTAxNTFmNWY5NjZiY2I1YzM0ODliNjQ0MTYxNDk5MGVmZTdjCisjIFBhcmVudCAgOTQ4NjYwZTJlNTZkOWNmYWFlMDM1MDgyYjhmZDQ3Mzk4NTUwNWZiNgorRml4IGEgdGVzdCBjYXNlIHRvIHdvcmsgZm9yIGxvbmcgbG9uZyBsaW1icy4KKworZGlmZiAtciA5NDg2NjBlMmU1NmQgLXIgNzk0NDEwMTUxZjVmIHRlc3RzL21wei90LXBlcmZwb3cuYworLS0tIGEvdGVzdHMvbXB6L3QtcGVyZnBvdy5jCVRodSBGZWIgMjUgMTY6MDg6MjEgMjAxMCArMDEwMAorKysrIGIvdGVzdHMvbXB6L3QtcGVyZnBvdy5jCVRodSBGZWIgMjUgMTk6Mjg6NTIgMjAxMCArMDEwMAorQEAgLTIsNyArMiw3IEBACisgCisgICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kIGFuZCBNYXJ0aW4gQm9pai4KKyAKKy1Db3B5cmlnaHQgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytDb3B5cmlnaHQgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisgCitAQCAtMTA5LDcgKzEwOSw4IEBACisgeworICAgbXB6X3QgbiwgbnAsIHRlbXAsIHByaW1lc1tOUlBdOworICAgaW50IGksIGosIGssIHVuaXF1ZSwgZGVzdHJveSwgcmVzOworLSAgdW5zaWduZWQgbG9uZyBpbnQgbnJwcmltZXMsIHByaW1lYml0cywgZywgZXhwW05SUF0sIGU7CisrICB1bnNpZ25lZCBsb25nIGludCBucnByaW1lcywgcHJpbWViaXRzOworKyAgbXBfbGltYl90IGcsIGV4cFtOUlBdLCBlOworICAgZ21wX3JhbmRzdGF0ZV9wdHIgcmFuZHM7CisgCisgICByYW5kcyA9IFJBTkRTOworCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbGliZWxmLzAuOC4xMC8xMDAtZml4LTY0LWJpdC1kZXRlY3Rpb24ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbGliZWxmLzAuOC4xMC8xMDAtZml4LTY0LWJpdC1kZXRlY3Rpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk5NTQ0MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9saWJlbGYvMC44LjEwLzEwMC1maXgtNjQtYml0LWRldGVjdGlvbi5wYXRjaApAQCAtMCwwICsxLDI0IEBACitkaWZmIC1kdXIgbGliZWxmLTAuOC4xMC5vcmlnL2NvbmZpZ3VyZSBsaWJlbGYtMC44LjEwL2NvbmZpZ3VyZQorLS0tIGxpYmVsZi0wLjguMTAub3JpZy9jb25maWd1cmUJMjAwNy0wOS0wNyAxNDowODowNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBsaWJlbGYtMC44LjEwL2NvbmZpZ3VyZQkyMDA4LTEwLTIzIDIyOjQzOjE5LjAwMDAwMDAwMCArMDIwMAorQEAgLTE1OTUsNyArMTU5NSw3IEBACisgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorIGVsc2UKKyAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCistICBhY19jdl9zaXplb2ZfbG9uZ19sb25nPTAKKysgIGFjX2N2X3NpemVvZl9sb25nX2xvbmc9OAorIGVsc2UKKyAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyAjbGluZSAxNjAyICJjb25maWd1cmUiCitkaWZmIC1kdXIgbGliZWxmLTAuOC4xMC5vcmlnL2NvbmZpZ3VyZS5pbiBsaWJlbGYtMC44LjEwL2NvbmZpZ3VyZS5pbgorLS0tIGxpYmVsZi0wLjguMTAub3JpZy9jb25maWd1cmUuaW4JMjAwNy0wOS0wNyAxNDowNzo1OS4wMDAwMDAwMDAgKzAyMDAKKysrKyBsaWJlbGYtMC44LjEwL2NvbmZpZ3VyZS5pbgkyMDA4LTEwLTIzIDIyOjQzOjEwLjAwMDAwMDAwMCArMDIwMAorQEAgLTkwLDcgKzkwLDcgQEAKKyBBQ19DSEVDS19TSVpFT0Yoc2hvcnQsMikKKyBBQ19DSEVDS19TSVpFT0YoaW50LDQpCisgQUNfQ0hFQ0tfU0laRU9GKGxvbmcsNCkKKy1BQ19DSEVDS19TSVpFT0YobG9uZyBsb25nLDApCisrQUNfQ0hFQ0tfU0laRU9GKGxvbmcgbG9uZyw4KQorICMgV2luZG93cyBwb3J0CisgQUNfQ0hFQ0tfU0laRU9GKF9faW50NjQsIDApCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbGliZWxmLzAuOC4xMS8xMDAtZml4LTY0LWJpdC1kZXRlY3Rpb24ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbGliZWxmLzAuOC4xMS8xMDAtZml4LTY0LWJpdC1kZXRlY3Rpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk5NTQ0MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9saWJlbGYvMC44LjExLzEwMC1maXgtNjQtYml0LWRldGVjdGlvbi5wYXRjaApAQCAtMCwwICsxLDI0IEBACitkaWZmIC1kdXIgbGliZWxmLTAuOC4xMC5vcmlnL2NvbmZpZ3VyZSBsaWJlbGYtMC44LjEwL2NvbmZpZ3VyZQorLS0tIGxpYmVsZi0wLjguMTAub3JpZy9jb25maWd1cmUJMjAwNy0wOS0wNyAxNDowODowNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBsaWJlbGYtMC44LjEwL2NvbmZpZ3VyZQkyMDA4LTEwLTIzIDIyOjQzOjE5LjAwMDAwMDAwMCArMDIwMAorQEAgLTE1OTUsNyArMTU5NSw3IEBACisgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorIGVsc2UKKyAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCistICBhY19jdl9zaXplb2ZfbG9uZ19sb25nPTAKKysgIGFjX2N2X3NpemVvZl9sb25nX2xvbmc9OAorIGVsc2UKKyAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyAjbGluZSAxNjAyICJjb25maWd1cmUiCitkaWZmIC1kdXIgbGliZWxmLTAuOC4xMC5vcmlnL2NvbmZpZ3VyZS5pbiBsaWJlbGYtMC44LjEwL2NvbmZpZ3VyZS5pbgorLS0tIGxpYmVsZi0wLjguMTAub3JpZy9jb25maWd1cmUuaW4JMjAwNy0wOS0wNyAxNDowNzo1OS4wMDAwMDAwMDAgKzAyMDAKKysrKyBsaWJlbGYtMC44LjEwL2NvbmZpZ3VyZS5pbgkyMDA4LTEwLTIzIDIyOjQzOjEwLjAwMDAwMDAwMCArMDIwMAorQEAgLTkwLDcgKzkwLDcgQEAKKyBBQ19DSEVDS19TSVpFT0Yoc2hvcnQsMikKKyBBQ19DSEVDS19TSVpFT0YoaW50LDQpCisgQUNfQ0hFQ0tfU0laRU9GKGxvbmcsNCkKKy1BQ19DSEVDS19TSVpFT0YobG9uZyBsb25nLDApCisrQUNfQ0hFQ0tfU0laRU9GKGxvbmcgbG9uZyw4KQorICMgV2luZG93cyBwb3J0CisgQUNfQ0hFQ0tfU0laRU9GKF9faW50NjQsIDApCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbGliZWxmLzAuOC4xMi8xMDAtZml4LTY0LWJpdC1kZXRlY3Rpb24ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbGliZWxmLzAuOC4xMi8xMDAtZml4LTY0LWJpdC1kZXRlY3Rpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk5NTQ0MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9saWJlbGYvMC44LjEyLzEwMC1maXgtNjQtYml0LWRldGVjdGlvbi5wYXRjaApAQCAtMCwwICsxLDI0IEBACitkaWZmIC1kdXIgbGliZWxmLTAuOC4xMC5vcmlnL2NvbmZpZ3VyZSBsaWJlbGYtMC44LjEwL2NvbmZpZ3VyZQorLS0tIGxpYmVsZi0wLjguMTAub3JpZy9jb25maWd1cmUJMjAwNy0wOS0wNyAxNDowODowNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBsaWJlbGYtMC44LjEwL2NvbmZpZ3VyZQkyMDA4LTEwLTIzIDIyOjQzOjE5LjAwMDAwMDAwMCArMDIwMAorQEAgLTE1OTUsNyArMTU5NSw3IEBACisgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorIGVsc2UKKyAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCistICBhY19jdl9zaXplb2ZfbG9uZ19sb25nPTAKKysgIGFjX2N2X3NpemVvZl9sb25nX2xvbmc9OAorIGVsc2UKKyAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyAjbGluZSAxNjAyICJjb25maWd1cmUiCitkaWZmIC1kdXIgbGliZWxmLTAuOC4xMC5vcmlnL2NvbmZpZ3VyZS5pbiBsaWJlbGYtMC44LjEwL2NvbmZpZ3VyZS5pbgorLS0tIGxpYmVsZi0wLjguMTAub3JpZy9jb25maWd1cmUuaW4JMjAwNy0wOS0wNyAxNDowNzo1OS4wMDAwMDAwMDAgKzAyMDAKKysrKyBsaWJlbGYtMC44LjEwL2NvbmZpZ3VyZS5pbgkyMDA4LTEwLTIzIDIyOjQzOjEwLjAwMDAwMDAwMCArMDIwMAorQEAgLTkwLDcgKzkwLDcgQEAKKyBBQ19DSEVDS19TSVpFT0Yoc2hvcnQsMikKKyBBQ19DSEVDS19TSVpFT0YoaW50LDQpCisgQUNfQ0hFQ0tfU0laRU9GKGxvbmcsNCkKKy1BQ19DSEVDS19TSVpFT0YobG9uZyBsb25nLDApCisrQUNfQ0hFQ0tfU0laRU9GKGxvbmcgbG9uZyw4KQorICMgV2luZG93cyBwb3J0CisgQUNfQ0hFQ0tfU0laRU9GKF9faW50NjQsIDApCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbGliZWxmLzAuOC4xMy8xMDAtZml4LTY0LWJpdC1kZXRlY3Rpb24ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbGliZWxmLzAuOC4xMy8xMDAtZml4LTY0LWJpdC1kZXRlY3Rpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk5NTQ0MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9saWJlbGYvMC44LjEzLzEwMC1maXgtNjQtYml0LWRldGVjdGlvbi5wYXRjaApAQCAtMCwwICsxLDI0IEBACitkaWZmIC1kdXIgbGliZWxmLTAuOC4xMC5vcmlnL2NvbmZpZ3VyZSBsaWJlbGYtMC44LjEwL2NvbmZpZ3VyZQorLS0tIGxpYmVsZi0wLjguMTAub3JpZy9jb25maWd1cmUJMjAwNy0wOS0wNyAxNDowODowNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBsaWJlbGYtMC44LjEwL2NvbmZpZ3VyZQkyMDA4LTEwLTIzIDIyOjQzOjE5LjAwMDAwMDAwMCArMDIwMAorQEAgLTE1OTUsNyArMTU5NSw3IEBACisgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorIGVsc2UKKyAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCistICBhY19jdl9zaXplb2ZfbG9uZ19sb25nPTAKKysgIGFjX2N2X3NpemVvZl9sb25nX2xvbmc9OAorIGVsc2UKKyAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyAjbGluZSAxNjAyICJjb25maWd1cmUiCitkaWZmIC1kdXIgbGliZWxmLTAuOC4xMC5vcmlnL2NvbmZpZ3VyZS5pbiBsaWJlbGYtMC44LjEwL2NvbmZpZ3VyZS5pbgorLS0tIGxpYmVsZi0wLjguMTAub3JpZy9jb25maWd1cmUuaW4JMjAwNy0wOS0wNyAxNDowNzo1OS4wMDAwMDAwMDAgKzAyMDAKKysrKyBsaWJlbGYtMC44LjEwL2NvbmZpZ3VyZS5pbgkyMDA4LTEwLTIzIDIyOjQzOjEwLjAwMDAwMDAwMCArMDIwMAorQEAgLTkwLDcgKzkwLDcgQEAKKyBBQ19DSEVDS19TSVpFT0Yoc2hvcnQsMikKKyBBQ19DSEVDS19TSVpFT0YoaW50LDQpCisgQUNfQ0hFQ0tfU0laRU9GKGxvbmcsNCkKKy1BQ19DSEVDS19TSVpFT0YobG9uZyBsb25nLDApCisrQUNfQ0hFQ0tfU0laRU9GKGxvbmcgbG9uZyw4KQorICMgV2luZG93cyBwb3J0CisgQUNfQ0hFQ0tfU0laRU9GKF9faW50NjQsIDApCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbGludXgvMy4wLjEvMTAwLWhlYWRlcnNfaW5zdGFsbC1maXgtX19wYWNrZWQtaW4tZXhwb3J0ZWQta2VybmVsLWhlYWQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbGludXgvMy4wLjEvMTAwLWhlYWRlcnNfaW5zdGFsbC1maXgtX19wYWNrZWQtaW4tZXhwb3J0ZWQta2VybmVsLWhlYWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMxODdjNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9saW51eC8zLjAuMS8xMDAtaGVhZGVyc19pbnN0YWxsLWZpeC1fX3BhY2tlZC1pbi1leHBvcnRlZC1rZXJuZWwtaGVhZC5wYXRjaApAQCAtMCwwICsxLDM4IEBACitjb21taXQgZjIxMDczNWZlMmYxN2E2MjI1NDMyZWUzZDEyMzliY2YyM2E4NjU5YworQXV0aG9yOiBNYXJrdXMgVHJpcHBlbHNkb3JmIDxtYXJrdXNAdHJpcHBlbHNkb3JmLmRlPgorRGF0ZTogICBGcmkgSnVuIDI0IDE1OjUxOjAwIDIwMTEgKzAyMDAKKworICAgIGhlYWRlcnNfaW5zdGFsbDogZml4IF9fcGFja2VkIGluIGV4cG9ydGVkIGtlcm5lbCBoZWFkZXJzCisgICAgCisgICAgY2hlY2twYXRjaC5wbCB3YXJucyBhYm91dCB1c2luZyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBpbiBrZXJuZWwKKyAgICBoZWFkZXJzOiAiX19wYWNrZWQgaXMgcHJlZmVycmVkIG92ZXIgX19hdHRyaWJ1dGVfXygocGFja2VkKSkiLiBJZiBvbmUKKyAgICBmb2xsb3dzIHRoYXQgYWR2aWNlIGl0IGNvdWxkIGNhdXNlIHByb2JsZW1zIGluIHRoZSBleHBvcnRlZCBoZWFkZXIKKyAgICBmaWxlcywgYmVjYXVzZSB0aGUgb3V0c2lkZSB3b3JsZCBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyBzaG9ydGN1dC4KKyAgICAKKyAgICBGb3IgZXhhbXBsZSBidXN5Ym94IHdpbGwgZmFpbCB0byBjb21waWxlOgorICAgICBDQyAgICAgIG1pc2N1dGlscy91YmlfYXR0YWNoX2RldGFjaC5vCisgICAgIEluIGZpbGUgaW5jbHVkZWQgZnJvbSBtaXNjdXRpbHMvdWJpX2F0dGFjaF9kZXRhY2guYzoyNzowOgorICAgICAvdXNyL2luY2x1ZGUvbXRkL3ViaS11c2VyLmg6MzMwOjM6IGVycm9yOiBjb25mbGljdGluZyB0eXBlcyBmb3Ig4oCYX19wYWNrZWTigJkKKyAgICAgL3Vzci9pbmNsdWRlL210ZC91YmktdXNlci5oOjMxNDozOiBub3RlOiBwcmV2aW91cyBkZWNsYXJhdGlvbiBvZiDigJhfX3BhY2tlZOKAmSB3YXMgaGVyZQorICAgIC4uLgorICAgIAorICAgIEZpeCB0aGUgcHJvYmxlbSBieSBzdWJzdGl0dXRpbmcgX19wYWNrZWQgd2l0aCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBpbgorICAgIHRoZSBoZWFkZXJfaW5zdGFsbC5wbCBzY3JpcHQuCisgICAgCisgICAgQ2M6IEFydGVtIEJpdHl1dHNraXkgPEFydGVtLkJpdHl1dHNraXlAbm9raWEuY29tPgorICAgIENDOiBKb2UgUGVyY2hlcyA8am9lQHBlcmNoZXMuY29tPgorICAgIFNpZ25lZC1vZmYtYnk6IE1hcmt1cyBUcmlwcGVsc2RvcmYgPG1hcmt1c0B0cmlwcGVsc2RvcmYuZGU+CisgICAgU2lnbmVkLW9mZi1ieTogTWljaGFsIE1hcmVrIDxtbWFyZWtAc3VzZS5jej4KKworZGlmZiAtLWdpdCBhL3NjcmlwdHMvaGVhZGVyc19pbnN0YWxsLnBsIGIvc2NyaXB0cy9oZWFkZXJzX2luc3RhbGwucGwKK2luZGV4IGVmYjNiZTEuLjQ4NDYyYmUgMTAwNjQ0CistLS0gYS9zY3JpcHRzL2hlYWRlcnNfaW5zdGFsbC5wbAorKysrIGIvc2NyaXB0cy9oZWFkZXJzX2luc3RhbGwucGwKK0BAIC0zNSw2ICszNSw3IEBAIGZvcmVhY2ggbXkgJGZpbGUgKEBmaWxlcykgeworIAkJJGxpbmUgPX4gcy8oW1xzKF0pX19pb21lbVxzLyQxL2c7CisgCQkkbGluZSA9fiBzL1xzX19hdHRyaWJ1dGVfY29uc3RfX1xzLyAvZzsKKyAJCSRsaW5lID1+IHMvXHNfX2F0dHJpYnV0ZV9jb25zdF9fJC8vZzsKKysJCSRsaW5lID1+IHMvXGJfX3BhY2tlZFxiL19fYXR0cmlidXRlX18oKHBhY2tlZCkpL2c7CisgCQkkbGluZSA9fiBzL14jaW5jbHVkZSA8bGludXhcL2NvbXBpbGVyLmg+Ly87CisgCQkkbGluZSA9fiBzLyhefFxzKShpbmxpbmUpXGIvJDFfXyQyX18vZzsKKyAJCSRsaW5lID1+IHMvKF58XHMpKGFzbSlcYihcc3xbKF18JCkvJDFfXyQyX18kMy9nOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2xpbnV4LzMuMC4yLzEwMC1oZWFkZXJzX2luc3RhbGwtZml4LV9fcGFja2VkLWluLWV4cG9ydGVkLWtlcm5lbC1oZWFkLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2xpbnV4LzMuMC4yLzEwMC1oZWFkZXJzX2luc3RhbGwtZml4LV9fcGFja2VkLWluLWV4cG9ydGVkLWtlcm5lbC1oZWFkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMTg3YzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbGludXgvMy4wLjIvMTAwLWhlYWRlcnNfaW5zdGFsbC1maXgtX19wYWNrZWQtaW4tZXhwb3J0ZWQta2VybmVsLWhlYWQucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorY29tbWl0IGYyMTA3MzVmZTJmMTdhNjIyNTQzMmVlM2QxMjM5YmNmMjNhODY1OWMKK0F1dGhvcjogTWFya3VzIFRyaXBwZWxzZG9yZiA8bWFya3VzQHRyaXBwZWxzZG9yZi5kZT4KK0RhdGU6ICAgRnJpIEp1biAyNCAxNTo1MTowMCAyMDExICswMjAwCisKKyAgICBoZWFkZXJzX2luc3RhbGw6IGZpeCBfX3BhY2tlZCBpbiBleHBvcnRlZCBrZXJuZWwgaGVhZGVycworICAgIAorICAgIGNoZWNrcGF0Y2gucGwgd2FybnMgYWJvdXQgdXNpbmcgX19hdHRyaWJ1dGVfXygocGFja2VkKSkgaW4ga2VybmVsCisgICAgaGVhZGVyczogIl9fcGFja2VkIGlzIHByZWZlcnJlZCBvdmVyIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIi4gSWYgb25lCisgICAgZm9sbG93cyB0aGF0IGFkdmljZSBpdCBjb3VsZCBjYXVzZSBwcm9ibGVtcyBpbiB0aGUgZXhwb3J0ZWQgaGVhZGVyCisgICAgZmlsZXMsIGJlY2F1c2UgdGhlIG91dHNpZGUgd29ybGQgZG9lc24ndCBrbm93IGFib3V0IHRoaXMgc2hvcnRjdXQuCisgICAgCisgICAgRm9yIGV4YW1wbGUgYnVzeWJveCB3aWxsIGZhaWwgdG8gY29tcGlsZToKKyAgICAgQ0MgICAgICBtaXNjdXRpbHMvdWJpX2F0dGFjaF9kZXRhY2gubworICAgICBJbiBmaWxlIGluY2x1ZGVkIGZyb20gbWlzY3V0aWxzL3ViaV9hdHRhY2hfZGV0YWNoLmM6Mjc6MDoKKyAgICAgL3Vzci9pbmNsdWRlL210ZC91YmktdXNlci5oOjMzMDozOiBlcnJvcjogY29uZmxpY3RpbmcgdHlwZXMgZm9yIOKAmF9fcGFja2Vk4oCZCisgICAgIC91c3IvaW5jbHVkZS9tdGQvdWJpLXVzZXIuaDozMTQ6Mzogbm90ZTogcHJldmlvdXMgZGVjbGFyYXRpb24gb2Yg4oCYX19wYWNrZWTigJkgd2FzIGhlcmUKKyAgICAuLi4KKyAgICAKKyAgICBGaXggdGhlIHByb2JsZW0gYnkgc3Vic3RpdHV0aW5nIF9fcGFja2VkIHdpdGggX19hdHRyaWJ1dGVfXygocGFja2VkKSkgaW4KKyAgICB0aGUgaGVhZGVyX2luc3RhbGwucGwgc2NyaXB0LgorICAgIAorICAgIENjOiBBcnRlbSBCaXR5dXRza2l5IDxBcnRlbS5CaXR5dXRza2l5QG5va2lhLmNvbT4KKyAgICBDQzogSm9lIFBlcmNoZXMgPGpvZUBwZXJjaGVzLmNvbT4KKyAgICBTaWduZWQtb2ZmLWJ5OiBNYXJrdXMgVHJpcHBlbHNkb3JmIDxtYXJrdXNAdHJpcHBlbHNkb3JmLmRlPgorICAgIFNpZ25lZC1vZmYtYnk6IE1pY2hhbCBNYXJlayA8bW1hcmVrQHN1c2UuY3o+CisKK2RpZmYgLS1naXQgYS9zY3JpcHRzL2hlYWRlcnNfaW5zdGFsbC5wbCBiL3NjcmlwdHMvaGVhZGVyc19pbnN0YWxsLnBsCitpbmRleCBlZmIzYmUxLi40ODQ2MmJlIDEwMDY0NAorLS0tIGEvc2NyaXB0cy9oZWFkZXJzX2luc3RhbGwucGwKKysrKyBiL3NjcmlwdHMvaGVhZGVyc19pbnN0YWxsLnBsCitAQCAtMzUsNiArMzUsNyBAQCBmb3JlYWNoIG15ICRmaWxlIChAZmlsZXMpIHsKKyAJCSRsaW5lID1+IHMvKFtccyhdKV9faW9tZW1ccy8kMS9nOworIAkJJGxpbmUgPX4gcy9cc19fYXR0cmlidXRlX2NvbnN0X19ccy8gL2c7CisgCQkkbGluZSA9fiBzL1xzX19hdHRyaWJ1dGVfY29uc3RfXyQvL2c7CisrCQkkbGluZSA9fiBzL1xiX19wYWNrZWRcYi9fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKS9nOworIAkJJGxpbmUgPX4gcy9eI2luY2x1ZGUgPGxpbnV4XC9jb21waWxlci5oPi8vOworIAkJJGxpbmUgPX4gcy8oXnxccykoaW5saW5lKVxiLyQxX18kMl9fL2c7CisgCQkkbGluZSA9fiBzLyhefFxzKShhc20pXGIoXHN8WyhdfCQpLyQxX18kMl9fJDMvZzsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9saW51eC8zLjAuMy8xMDAtaGVhZGVyc19pbnN0YWxsLWZpeC1fX3BhY2tlZC1pbi1leHBvcnRlZC1rZXJuZWwtaGVhZC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9saW51eC8zLjAuMy8xMDAtaGVhZGVyc19pbnN0YWxsLWZpeC1fX3BhY2tlZC1pbi1leHBvcnRlZC1rZXJuZWwtaGVhZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzE4N2M1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2xpbnV4LzMuMC4zLzEwMC1oZWFkZXJzX2luc3RhbGwtZml4LV9fcGFja2VkLWluLWV4cG9ydGVkLWtlcm5lbC1oZWFkLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK2NvbW1pdCBmMjEwNzM1ZmUyZjE3YTYyMjU0MzJlZTNkMTIzOWJjZjIzYTg2NTljCitBdXRob3I6IE1hcmt1cyBUcmlwcGVsc2RvcmYgPG1hcmt1c0B0cmlwcGVsc2RvcmYuZGU+CitEYXRlOiAgIEZyaSBKdW4gMjQgMTU6NTE6MDAgMjAxMSArMDIwMAorCisgICAgaGVhZGVyc19pbnN0YWxsOiBmaXggX19wYWNrZWQgaW4gZXhwb3J0ZWQga2VybmVsIGhlYWRlcnMKKyAgICAKKyAgICBjaGVja3BhdGNoLnBsIHdhcm5zIGFib3V0IHVzaW5nIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGluIGtlcm5lbAorICAgIGhlYWRlcnM6ICJfX3BhY2tlZCBpcyBwcmVmZXJyZWQgb3ZlciBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSIuIElmIG9uZQorICAgIGZvbGxvd3MgdGhhdCBhZHZpY2UgaXQgY291bGQgY2F1c2UgcHJvYmxlbXMgaW4gdGhlIGV4cG9ydGVkIGhlYWRlcgorICAgIGZpbGVzLCBiZWNhdXNlIHRoZSBvdXRzaWRlIHdvcmxkIGRvZXNuJ3Qga25vdyBhYm91dCB0aGlzIHNob3J0Y3V0LgorICAgIAorICAgIEZvciBleGFtcGxlIGJ1c3lib3ggd2lsbCBmYWlsIHRvIGNvbXBpbGU6CisgICAgIENDICAgICAgbWlzY3V0aWxzL3ViaV9hdHRhY2hfZGV0YWNoLm8KKyAgICAgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIG1pc2N1dGlscy91YmlfYXR0YWNoX2RldGFjaC5jOjI3OjA6CisgICAgIC91c3IvaW5jbHVkZS9tdGQvdWJpLXVzZXIuaDozMzA6MzogZXJyb3I6IGNvbmZsaWN0aW5nIHR5cGVzIGZvciDigJhfX3BhY2tlZOKAmQorICAgICAvdXNyL2luY2x1ZGUvbXRkL3ViaS11c2VyLmg6MzE0OjM6IG5vdGU6IHByZXZpb3VzIGRlY2xhcmF0aW9uIG9mIOKAmF9fcGFja2Vk4oCZIHdhcyBoZXJlCisgICAgLi4uCisgICAgCisgICAgRml4IHRoZSBwcm9ibGVtIGJ5IHN1YnN0aXR1dGluZyBfX3BhY2tlZCB3aXRoIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGluCisgICAgdGhlIGhlYWRlcl9pbnN0YWxsLnBsIHNjcmlwdC4KKyAgICAKKyAgICBDYzogQXJ0ZW0gQml0eXV0c2tpeSA8QXJ0ZW0uQml0eXV0c2tpeUBub2tpYS5jb20+CisgICAgQ0M6IEpvZSBQZXJjaGVzIDxqb2VAcGVyY2hlcy5jb20+CisgICAgU2lnbmVkLW9mZi1ieTogTWFya3VzIFRyaXBwZWxzZG9yZiA8bWFya3VzQHRyaXBwZWxzZG9yZi5kZT4KKyAgICBTaWduZWQtb2ZmLWJ5OiBNaWNoYWwgTWFyZWsgPG1tYXJla0BzdXNlLmN6PgorCitkaWZmIC0tZ2l0IGEvc2NyaXB0cy9oZWFkZXJzX2luc3RhbGwucGwgYi9zY3JpcHRzL2hlYWRlcnNfaW5zdGFsbC5wbAoraW5kZXggZWZiM2JlMS4uNDg0NjJiZSAxMDA2NDQKKy0tLSBhL3NjcmlwdHMvaGVhZGVyc19pbnN0YWxsLnBsCisrKysgYi9zY3JpcHRzL2hlYWRlcnNfaW5zdGFsbC5wbAorQEAgLTM1LDYgKzM1LDcgQEAgZm9yZWFjaCBteSAkZmlsZSAoQGZpbGVzKSB7CisgCQkkbGluZSA9fiBzLyhbXHMoXSlfX2lvbWVtXHMvJDEvZzsKKyAJCSRsaW5lID1+IHMvXHNfX2F0dHJpYnV0ZV9jb25zdF9fXHMvIC9nOworIAkJJGxpbmUgPX4gcy9cc19fYXR0cmlidXRlX2NvbnN0X18kLy9nOworKwkJJGxpbmUgPX4gcy9cYl9fcGFja2VkXGIvX19hdHRyaWJ1dGVfXygocGFja2VkKSkvZzsKKyAJCSRsaW5lID1+IHMvXiNpbmNsdWRlIDxsaW51eFwvY29tcGlsZXIuaD4vLzsKKyAJCSRsaW5lID1+IHMvKF58XHMpKGlubGluZSlcYi8kMV9fJDJfXy9nOworIAkJJGxpbmUgPX4gcy8oXnxccykoYXNtKVxiKFxzfFsoXXwkKS8kMV9fJDJfXyQzL2c7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbGludXgvMy4wLjQvMTAwLWhlYWRlcnNfaW5zdGFsbC1maXgtX19wYWNrZWQtaW4tZXhwb3J0ZWQta2VybmVsLWhlYWQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbGludXgvMy4wLjQvMTAwLWhlYWRlcnNfaW5zdGFsbC1maXgtX19wYWNrZWQtaW4tZXhwb3J0ZWQta2VybmVsLWhlYWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMxODdjNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9saW51eC8zLjAuNC8xMDAtaGVhZGVyc19pbnN0YWxsLWZpeC1fX3BhY2tlZC1pbi1leHBvcnRlZC1rZXJuZWwtaGVhZC5wYXRjaApAQCAtMCwwICsxLDM4IEBACitjb21taXQgZjIxMDczNWZlMmYxN2E2MjI1NDMyZWUzZDEyMzliY2YyM2E4NjU5YworQXV0aG9yOiBNYXJrdXMgVHJpcHBlbHNkb3JmIDxtYXJrdXNAdHJpcHBlbHNkb3JmLmRlPgorRGF0ZTogICBGcmkgSnVuIDI0IDE1OjUxOjAwIDIwMTEgKzAyMDAKKworICAgIGhlYWRlcnNfaW5zdGFsbDogZml4IF9fcGFja2VkIGluIGV4cG9ydGVkIGtlcm5lbCBoZWFkZXJzCisgICAgCisgICAgY2hlY2twYXRjaC5wbCB3YXJucyBhYm91dCB1c2luZyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBpbiBrZXJuZWwKKyAgICBoZWFkZXJzOiAiX19wYWNrZWQgaXMgcHJlZmVycmVkIG92ZXIgX19hdHRyaWJ1dGVfXygocGFja2VkKSkiLiBJZiBvbmUKKyAgICBmb2xsb3dzIHRoYXQgYWR2aWNlIGl0IGNvdWxkIGNhdXNlIHByb2JsZW1zIGluIHRoZSBleHBvcnRlZCBoZWFkZXIKKyAgICBmaWxlcywgYmVjYXVzZSB0aGUgb3V0c2lkZSB3b3JsZCBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyBzaG9ydGN1dC4KKyAgICAKKyAgICBGb3IgZXhhbXBsZSBidXN5Ym94IHdpbGwgZmFpbCB0byBjb21waWxlOgorICAgICBDQyAgICAgIG1pc2N1dGlscy91YmlfYXR0YWNoX2RldGFjaC5vCisgICAgIEluIGZpbGUgaW5jbHVkZWQgZnJvbSBtaXNjdXRpbHMvdWJpX2F0dGFjaF9kZXRhY2guYzoyNzowOgorICAgICAvdXNyL2luY2x1ZGUvbXRkL3ViaS11c2VyLmg6MzMwOjM6IGVycm9yOiBjb25mbGljdGluZyB0eXBlcyBmb3Ig4oCYX19wYWNrZWTigJkKKyAgICAgL3Vzci9pbmNsdWRlL210ZC91YmktdXNlci5oOjMxNDozOiBub3RlOiBwcmV2aW91cyBkZWNsYXJhdGlvbiBvZiDigJhfX3BhY2tlZOKAmSB3YXMgaGVyZQorICAgIC4uLgorICAgIAorICAgIEZpeCB0aGUgcHJvYmxlbSBieSBzdWJzdGl0dXRpbmcgX19wYWNrZWQgd2l0aCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBpbgorICAgIHRoZSBoZWFkZXJfaW5zdGFsbC5wbCBzY3JpcHQuCisgICAgCisgICAgQ2M6IEFydGVtIEJpdHl1dHNraXkgPEFydGVtLkJpdHl1dHNraXlAbm9raWEuY29tPgorICAgIENDOiBKb2UgUGVyY2hlcyA8am9lQHBlcmNoZXMuY29tPgorICAgIFNpZ25lZC1vZmYtYnk6IE1hcmt1cyBUcmlwcGVsc2RvcmYgPG1hcmt1c0B0cmlwcGVsc2RvcmYuZGU+CisgICAgU2lnbmVkLW9mZi1ieTogTWljaGFsIE1hcmVrIDxtbWFyZWtAc3VzZS5jej4KKworZGlmZiAtLWdpdCBhL3NjcmlwdHMvaGVhZGVyc19pbnN0YWxsLnBsIGIvc2NyaXB0cy9oZWFkZXJzX2luc3RhbGwucGwKK2luZGV4IGVmYjNiZTEuLjQ4NDYyYmUgMTAwNjQ0CistLS0gYS9zY3JpcHRzL2hlYWRlcnNfaW5zdGFsbC5wbAorKysrIGIvc2NyaXB0cy9oZWFkZXJzX2luc3RhbGwucGwKK0BAIC0zNSw2ICszNSw3IEBAIGZvcmVhY2ggbXkgJGZpbGUgKEBmaWxlcykgeworIAkJJGxpbmUgPX4gcy8oW1xzKF0pX19pb21lbVxzLyQxL2c7CisgCQkkbGluZSA9fiBzL1xzX19hdHRyaWJ1dGVfY29uc3RfX1xzLyAvZzsKKyAJCSRsaW5lID1+IHMvXHNfX2F0dHJpYnV0ZV9jb25zdF9fJC8vZzsKKysJCSRsaW5lID1+IHMvXGJfX3BhY2tlZFxiL19fYXR0cmlidXRlX18oKHBhY2tlZCkpL2c7CisgCQkkbGluZSA9fiBzL14jaW5jbHVkZSA8bGludXhcL2NvbXBpbGVyLmg+Ly87CisgCQkkbGluZSA9fiBzLyhefFxzKShpbmxpbmUpXGIvJDFfXyQyX18vZzsKKyAJCSRsaW5lID1+IHMvKF58XHMpKGFzbSlcYihcc3xbKF18JCkvJDFfXyQyX18kMy9nOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2xpbnV4LzMuMC8xMDAtaGVhZGVyc19pbnN0YWxsLWZpeC1fX3BhY2tlZC1pbi1leHBvcnRlZC1rZXJuZWwtaGVhZC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9saW51eC8zLjAvMTAwLWhlYWRlcnNfaW5zdGFsbC1maXgtX19wYWNrZWQtaW4tZXhwb3J0ZWQta2VybmVsLWhlYWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMxODdjNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9saW51eC8zLjAvMTAwLWhlYWRlcnNfaW5zdGFsbC1maXgtX19wYWNrZWQtaW4tZXhwb3J0ZWQta2VybmVsLWhlYWQucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorY29tbWl0IGYyMTA3MzVmZTJmMTdhNjIyNTQzMmVlM2QxMjM5YmNmMjNhODY1OWMKK0F1dGhvcjogTWFya3VzIFRyaXBwZWxzZG9yZiA8bWFya3VzQHRyaXBwZWxzZG9yZi5kZT4KK0RhdGU6ICAgRnJpIEp1biAyNCAxNTo1MTowMCAyMDExICswMjAwCisKKyAgICBoZWFkZXJzX2luc3RhbGw6IGZpeCBfX3BhY2tlZCBpbiBleHBvcnRlZCBrZXJuZWwgaGVhZGVycworICAgIAorICAgIGNoZWNrcGF0Y2gucGwgd2FybnMgYWJvdXQgdXNpbmcgX19hdHRyaWJ1dGVfXygocGFja2VkKSkgaW4ga2VybmVsCisgICAgaGVhZGVyczogIl9fcGFja2VkIGlzIHByZWZlcnJlZCBvdmVyIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIi4gSWYgb25lCisgICAgZm9sbG93cyB0aGF0IGFkdmljZSBpdCBjb3VsZCBjYXVzZSBwcm9ibGVtcyBpbiB0aGUgZXhwb3J0ZWQgaGVhZGVyCisgICAgZmlsZXMsIGJlY2F1c2UgdGhlIG91dHNpZGUgd29ybGQgZG9lc24ndCBrbm93IGFib3V0IHRoaXMgc2hvcnRjdXQuCisgICAgCisgICAgRm9yIGV4YW1wbGUgYnVzeWJveCB3aWxsIGZhaWwgdG8gY29tcGlsZToKKyAgICAgQ0MgICAgICBtaXNjdXRpbHMvdWJpX2F0dGFjaF9kZXRhY2gubworICAgICBJbiBmaWxlIGluY2x1ZGVkIGZyb20gbWlzY3V0aWxzL3ViaV9hdHRhY2hfZGV0YWNoLmM6Mjc6MDoKKyAgICAgL3Vzci9pbmNsdWRlL210ZC91YmktdXNlci5oOjMzMDozOiBlcnJvcjogY29uZmxpY3RpbmcgdHlwZXMgZm9yIOKAmF9fcGFja2Vk4oCZCisgICAgIC91c3IvaW5jbHVkZS9tdGQvdWJpLXVzZXIuaDozMTQ6Mzogbm90ZTogcHJldmlvdXMgZGVjbGFyYXRpb24gb2Yg4oCYX19wYWNrZWTigJkgd2FzIGhlcmUKKyAgICAuLi4KKyAgICAKKyAgICBGaXggdGhlIHByb2JsZW0gYnkgc3Vic3RpdHV0aW5nIF9fcGFja2VkIHdpdGggX19hdHRyaWJ1dGVfXygocGFja2VkKSkgaW4KKyAgICB0aGUgaGVhZGVyX2luc3RhbGwucGwgc2NyaXB0LgorICAgIAorICAgIENjOiBBcnRlbSBCaXR5dXRza2l5IDxBcnRlbS5CaXR5dXRza2l5QG5va2lhLmNvbT4KKyAgICBDQzogSm9lIFBlcmNoZXMgPGpvZUBwZXJjaGVzLmNvbT4KKyAgICBTaWduZWQtb2ZmLWJ5OiBNYXJrdXMgVHJpcHBlbHNkb3JmIDxtYXJrdXNAdHJpcHBlbHNkb3JmLmRlPgorICAgIFNpZ25lZC1vZmYtYnk6IE1pY2hhbCBNYXJlayA8bW1hcmVrQHN1c2UuY3o+CisKK2RpZmYgLS1naXQgYS9zY3JpcHRzL2hlYWRlcnNfaW5zdGFsbC5wbCBiL3NjcmlwdHMvaGVhZGVyc19pbnN0YWxsLnBsCitpbmRleCBlZmIzYmUxLi40ODQ2MmJlIDEwMDY0NAorLS0tIGEvc2NyaXB0cy9oZWFkZXJzX2luc3RhbGwucGwKKysrKyBiL3NjcmlwdHMvaGVhZGVyc19pbnN0YWxsLnBsCitAQCAtMzUsNiArMzUsNyBAQCBmb3JlYWNoIG15ICRmaWxlIChAZmlsZXMpIHsKKyAJCSRsaW5lID1+IHMvKFtccyhdKV9faW9tZW1ccy8kMS9nOworIAkJJGxpbmUgPX4gcy9cc19fYXR0cmlidXRlX2NvbnN0X19ccy8gL2c7CisgCQkkbGluZSA9fiBzL1xzX19hdHRyaWJ1dGVfY29uc3RfXyQvL2c7CisrCQkkbGluZSA9fiBzL1xiX19wYWNrZWRcYi9fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKS9nOworIAkJJGxpbmUgPX4gcy9eI2luY2x1ZGUgPGxpbnV4XC9jb21waWxlci5oPi8vOworIAkJJGxpbmUgPX4gcy8oXnxccykoaW5saW5lKVxiLyQxX18kMl9fL2c7CisgCQkkbGluZSA9fiBzLyhefFxzKShhc20pXGIoXHN8WyhdfCQpLyQxX18kMl9fJDMvZzsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC40LzEwMC1maXgtYnVpbGQtd2l0aC1leG90aWMtbGludXgtaG9zdC1PUy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC40LzEwMC1maXgtYnVpbGQtd2l0aC1leG90aWMtbGludXgtaG9zdC1PUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmExMTdhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2x0cmFjZS8wLjQvMTAwLWZpeC1idWlsZC13aXRoLWV4b3RpYy1saW51eC1ob3N0LU9TLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK2RpZmYgLWR1ck4gbHRyYWNlLTAuNC5vcmlnL2NvbmZpZ3VyZSBsdHJhY2UtMC40L2NvbmZpZ3VyZQorLS0tIGx0cmFjZS0wLjQub3JpZy9jb25maWd1cmUJMjAwOC0xMC0yMyAyMzoxOTozOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBsdHJhY2UtMC40L2NvbmZpZ3VyZQkyMDA4LTEwLTIzIDIzOjE5OjA2LjAwMDAwMDAwMCArMDIwMAorQEAgLTEzOTIsNiArMTM5Miw5IEBACisgCisgCisgSE9TVF9PUz0iJGhvc3Rfb3MiCisrY2FzZSAiJHtIT1NUX09TfSIgaW4KKysgIGxpbnV4LSopIEhPU1RfT1M9bGludXgtZ251OzsKKytlc2FjCisgCisgCisgYWNfZXh0PWMKK2RpZmYgLWR1ck4gbHRyYWNlLTAuNC5vcmlnL2NvbmZpZ3VyZS5hYyBsdHJhY2UtMC40L2NvbmZpZ3VyZS5hYworLS0tIGx0cmFjZS0wLjQub3JpZy9jb25maWd1cmUuYWMJMjAwOC0xMC0yMyAyMzoxOTo0My4wMDAwMDAwMDAgKzAyMDAKKysrKyBsdHJhY2UtMC40L2NvbmZpZ3VyZS5hYwkyMDA4LTEwLTIzIDIzOjE4OjQ0LjAwMDAwMDAwMCArMDIwMAorQEAgLTcsNiArNyw5IEBACisgZG5sIENoZWNrIGhvc3Qgc3lzdGVtIHR5cGUKKyBBQ19DQU5PTklDQUxfSE9TVAorIEhPU1RfT1M9IiRob3N0X29zIgorK2Nhc2UgIiR7SE9TVF9PU30iIGluCisrICBsaW51eC0qKSBIT1NUX09TPWxpbnV4LWdudTs7CisrZXNhYworIEFDX1NVQlNUKEhPU1RfT1MpCisgCisgZG5sIENoZWNrcyBmb3IgcHJvZ3JhbXMuCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbHRyYWNlLzAuNC8xMTAtYWxsb3ctY3Jvc3MtY29tcGlsZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC40LzExMC1hbGxvdy1jcm9zcy1jb21waWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4M2Y3ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbHRyYWNlLzAuNC8xMTAtYWxsb3ctY3Jvc3MtY29tcGlsZS5wYXRjaApAQCAtMCwwICsxLDg5IEBACitkaWZmIC1kdXJOIGx0cmFjZS0wLjQub3JpZy9NYWtlZmlsZS5pbiBsdHJhY2UtMC40L01ha2VmaWxlLmluCistLS0gbHRyYWNlLTAuNC5vcmlnL01ha2VmaWxlLmluCTIwMDYtMDMtMDUgMjM6MjE6MDcuMDAwMDAwMDAwICswMTAwCisrKysgbHRyYWNlLTAuNC9NYWtlZmlsZS5pbgkyMDA4LTEwLTI0IDEwOjMxOjUxLjAwMDAwMDAwMCArMDIwMAorQEAgLTIsOCArMiwxNCBAQAorICMgbHRyYWNlJ3MgTWFrZWZpbGUuaW4KKyAjCisgCistI09TCQk6PSAkKHNoZWxsIHVuYW1lIC1zKQorIE9TCQk6PSBASE9TVF9PU0AKKytBUkNICQk6PSAkKHNoZWxsIGVjaG8gIkBIT1NUX0FSQ0hAIiB8c2VkIC1lIHMvaS44Ni9pMzg2LyAgICAgIFwKKysJCQkJCQkgICAtZSBzL3N1bjR1L3NwYXJjNjQvICBcCisrCQkJCQkJICAgLWUgcy9hcm0uKi9hcm0vICAgICAgXAorKwkJCQkJCSAgIC1lIHMvc2ExMTAvYXJtLyAgICAgIFwKKysJCQkJCQkgICAtZSBzL3BwYzY0L3BwYy8gICAgICBcCisrCQkJCQkJICAgLWUgcy9zMzkweC9zMzkwLykKKytleHBvcnQgQVJDSAorIAorIFRPUERJUgkJPSAkKHNoZWxsIHB3ZCkKKyAKK0BAIC0yMCwxMCArMjYsMTAgQEAKKyBMSUJTCQk9CUBMSUJTQAorIAorIElOU1RBTEwJCT0JQElOU1RBTExACistSU5TVEFMTF9GSUxFCT0JJChJTlNUQUxMKSAtcCAgICAtbyByb290IC1nIHJvb3QgIC1tICA2NDQKKy1JTlNUQUxMX1BST0dSQU0JPQkkKElOU1RBTEwpIC1wICAgIC1vIHJvb3QgLWcgcm9vdCAgLW0gIDc1NQorLUlOU1RBTExfU0NSSVBUCT0JJChJTlNUQUxMKSAtcCAgICAtbyByb290IC1nIHJvb3QgIC1tICA3NTUKKy1JTlNUQUxMX0RJUgk9CSQoSU5TVEFMTCkgLXAgLWQgLW8gcm9vdCAtZyByb290ICAtbSAgNzU1CisrSU5TVEFMTF9GSUxFCT0JJChJTlNUQUxMKSAtcCAgICAtbSAgNjQ0CisrSU5TVEFMTF9QUk9HUkFNCT0JJChJTlNUQUxMKSAtcCAgICAtbSAgNzU1CisrSU5TVEFMTF9TQ1JJUFQJPQkkKElOU1RBTEwpIC1wICAgIC1tICA3NTUKKytJTlNUQUxMX0RJUgk9CSQoSU5TVEFMTCkgLXAgLWQgLW0gIDc1NQorIAorIE9CSgk9CWx0cmFjZS5vIG9wdGlvbnMubyBlbGYubyBvdXRwdXQubyByZWFkX2NvbmZpZ19maWxlLm8JXAorIAkJZXhlY3V0ZV9wcm9ncmFtLm8gd2FpdF9mb3Jfc29tZXRoaW5nLm8gcHJvY2Vzc19ldmVudC5vCVwKK2RpZmYgLWR1ck4gbHRyYWNlLTAuNC5vcmlnL2NvbmZpZ3VyZSBsdHJhY2UtMC40L2NvbmZpZ3VyZQorLS0tIGx0cmFjZS0wLjQub3JpZy9jb25maWd1cmUJMjAwOC0xMC0yMyAyMzozNTozOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBsdHJhY2UtMC40L2NvbmZpZ3VyZQkyMDA4LTEwLTI0IDEwOjI3OjIwLjAwMDAwMDAwMCArMDIwMAorQEAgLTMxMSw3ICszMTEsNyBAQAorICMgaW5jbHVkZSA8dW5pc3RkLmg+CisgI2VuZGlmIgorIAorLWFjX3N1YnN0X3ZhcnM9J1NIRUxMIFBBVEhfU0VQQVJBVE9SIFBBQ0tBR0VfTkFNRSBQQUNLQUdFX1RBUk5BTUUgUEFDS0FHRV9WRVJTSU9OIFBBQ0tBR0VfU1RSSU5HIFBBQ0tBR0VfQlVHUkVQT1JUIGV4ZWNfcHJlZml4IHByZWZpeCBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgbGliZGlyIGluY2x1ZGVkaXIgb2xkaW5jbHVkZWRpciBpbmZvZGlyIG1hbmRpciBidWlsZF9hbGlhcyBob3N0X2FsaWFzIHRhcmdldF9hbGlhcyBERUZTIEVDSE9fQyBFQ0hPX04gRUNIT19UIExJQlMgYnVpbGQgYnVpbGRfY3B1IGJ1aWxkX3ZlbmRvciBidWlsZF9vcyBob3N0IGhvc3RfY3B1IGhvc3RfdmVuZG9yIGhvc3Rfb3MgSE9TVF9PUyBDQyBDRkxBR1MgTERGTEFHUyBDUFBGTEFHUyBhY19jdF9DQyBFWEVFWFQgT0JKRVhUIElOU1RBTExfUFJPR1JBTSBJTlNUQUxMX1NDUklQVCBJTlNUQUxMX0RBVEEgQ1BQIEVHUkVQIGlxdW90ZSBpcXVvdGVlbmQgTElCT0JKUyBMVExJQk9CSlMnCisrYWNfc3Vic3RfdmFycz0nU0hFTEwgUEFUSF9TRVBBUkFUT1IgUEFDS0FHRV9OQU1FIFBBQ0tBR0VfVEFSTkFNRSBQQUNLQUdFX1ZFUlNJT04gUEFDS0FHRV9TVFJJTkcgUEFDS0FHRV9CVUdSRVBPUlQgZXhlY19wcmVmaXggcHJlZml4IHByb2dyYW1fdHJhbnNmb3JtX25hbWUgYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgbG9jYWxzdGF0ZWRpciBsaWJkaXIgaW5jbHVkZWRpciBvbGRpbmNsdWRlZGlyIGluZm9kaXIgbWFuZGlyIGJ1aWxkX2FsaWFzIGhvc3RfYWxpYXMgdGFyZ2V0X2FsaWFzIERFRlMgRUNIT19DIEVDSE9fTiBFQ0hPX1QgTElCUyBidWlsZCBidWlsZF9jcHUgYnVpbGRfdmVuZG9yIGJ1aWxkX29zIGhvc3QgaG9zdF9jcHUgaG9zdF92ZW5kb3IgaG9zdF9vcyBIT1NUX0FSQ0ggSE9TVF9PUyBDQyBDRkxBR1MgTERGTEFHUyBDUFBGTEFHUyBhY19jdF9DQyBFWEVFWFQgT0JKRVhUIElOU1RBTExfUFJPR1JBTSBJTlNUQUxMX1NDUklQVCBJTlNUQUxMX0RBVEEgQ1BQIEVHUkVQIGlxdW90ZSBpcXVvdGVlbmQgTElCT0JKUyBMVExJQk9CSlMnCisgYWNfc3Vic3RfZmlsZXM9JycKKyAKKyAjIEluaXRpYWxpemUgc29tZSB2YXJpYWJsZXMgc2V0IGJ5IG9wdGlvbnMuCitAQCAtMTM5MCw3ICsxMzkwLDcgQEAKKyBob3N0X3ZlbmRvcj1gZWNobyAkYWNfY3ZfaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wyLydgCisgaG9zdF9vcz1gZWNobyAkYWNfY3ZfaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisgCistCisrSE9TVF9BUkNIPSIkaG9zdF9jcHUiCisgSE9TVF9PUz0iJGhvc3Rfb3MiCisgY2FzZSAiJHtIT1NUX09TfSIgaW4KKyAgIGxpbnV4LSopIEhPU1RfT1M9bGludXgtZ251OzsKK0BAIC00ODE4LDYgKzQ4MTgsNyBAQAorIHMsQGhvc3RfY3B1QCwkaG9zdF9jcHUsO3QgdAorIHMsQGhvc3RfdmVuZG9yQCwkaG9zdF92ZW5kb3IsO3QgdAorIHMsQGhvc3Rfb3NALCRob3N0X29zLDt0IHQKKytzLEBIT1NUX0FSQ0hALCRIT1NUX0FSQ0gsO3QgdAorIHMsQEhPU1RfT1NALCRIT1NUX09TLDt0IHQKKyBzLEBDQ0AsJENDLDt0IHQKKyBzLEBDRkxBR1NALCRDRkxBR1MsO3QgdAorZGlmZiAtZHVyTiBsdHJhY2UtMC40Lm9yaWcvY29uZmlndXJlLmFjIGx0cmFjZS0wLjQvY29uZmlndXJlLmFjCistLS0gbHRyYWNlLTAuNC5vcmlnL2NvbmZpZ3VyZS5hYwkyMDA4LTEwLTIzIDIzOjM1OjM5LjAwMDAwMDAwMCArMDIwMAorKysrIGx0cmFjZS0wLjQvY29uZmlndXJlLmFjCTIwMDgtMTAtMjQgMTA6MTk6NDcuMDAwMDAwMDAwICswMjAwCitAQCAtNiwxMCArNiwxMiBAQAorIAorIGRubCBDaGVjayBob3N0IHN5c3RlbSB0eXBlCisgQUNfQ0FOT05JQ0FMX0hPU1QKKytIT1NUX0FSQ0g9IiRob3N0X2NwdSIKKyBIT1NUX09TPSIkaG9zdF9vcyIKKyBjYXNlICIke0hPU1RfT1N9IiBpbgorICAgbGludXgtKikgSE9TVF9PUz1saW51eC1nbnU7OworIGVzYWMKKytBQ19TVUJTVChIT1NUX0FSQ0gpCisgQUNfU1VCU1QoSE9TVF9PUykKKyAKKyBkbmwgQ2hlY2tzIGZvciBwcm9ncmFtcy4KK2RpZmYgLWR1ck4gbHRyYWNlLTAuNC5vcmlnL3N5c2RlcHMvbGludXgtZ251L01ha2VmaWxlIGx0cmFjZS0wLjQvc3lzZGVwcy9saW51eC1nbnUvTWFrZWZpbGUKKy0tLSBsdHJhY2UtMC40Lm9yaWcvc3lzZGVwcy9saW51eC1nbnUvTWFrZWZpbGUJMjAwNi0wMi0yMCAyMjo0NDo0NS4wMDAwMDAwMDAgKzAxMDAKKysrKyBsdHJhY2UtMC40L3N5c2RlcHMvbGludXgtZ251L01ha2VmaWxlCTIwMDgtMTAtMjQgMTA6MjQ6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtMSw2ICsxLDMgQEAKKy1BUkNICQk6PQkkKHNoZWxsIHVuYW1lIC1tIHwgc2VkIC1lIHMvaS44Ni9pMzg2LyAtZSBzL3N1bjR1L3NwYXJjNjQvIFwKKy0JCQktZSBzL2FybS4qL2FybS8gLWUgcy9zYTExMC9hcm0vIC1lIHMvcHBjNjQvcHBjLyAtZSBzL3MzOTB4L3MzOTAvKQorLQorIENQUEZMQUdTCSs9CS1JJChUT1BESVIpL3N5c2RlcHMvbGludXgtZ251LyQoQVJDSCkKKyAKKyBPQkoJCT0JdHJhY2UubyBwcm9jLm8gYnJlYWtwb2ludC5vCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbHRyYWNlLzAuNC8xMjAtYWxwaGEtc3VwcG9ydC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC40LzEyMC1hbHBoYS1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNTk0ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbHRyYWNlLzAuNC8xMjAtYWxwaGEtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDExIEBACitkaWZmIC1kdXJOIGx0cmFjZS0wLjQub3JpZy9NYWtlZmlsZS5pbiBsdHJhY2UtMC40L01ha2VmaWxlLmluCistLS0gbHRyYWNlLTAuNC5vcmlnL01ha2VmaWxlLmluCTIwMDgtMTAtMjYgMTU6MzQ6MjEuMDAwMDAwMDAwICswMTAwCisrKysgbHRyYWNlLTAuNC9NYWtlZmlsZS5pbgkyMDA4LTEwLTI2IDE1OjM3OjQwLjAwMDAwMDAwMCArMDEwMAorQEAgLTUsNiArNSw3IEBACisgT1MJCTo9IEBIT1NUX09TQAorIEFSQ0gJCTo9ICQoc2hlbGwgZWNobyAiQEhPU1RfQVJDSEAiIHxzZWQgLWUgcy9pLjg2L2kzODYvICAgICAgXAorIAkJCQkJCSAgIC1lIHMvc3VuNHUvc3BhcmM2NC8gIFwKKysJCQkJCQkgICAtZSBzL2FscGhhLiovYWxwaGEvICBcCisgCQkJCQkJICAgLWUgcy9hcm0uKi9hcm0vICAgICAgXAorIAkJCQkJCSAgIC1lIHMvc2ExMTAvYXJtLyAgICAgIFwKKyAJCQkJCQkgICAtZSBzL3BwYzY0L3BwYy8gICAgICBcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbHRyYWNlLzAuNS4xLzEwMC1hbGxvdy1jcm9zcy1jb21waWxlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2x0cmFjZS8wLjUuMS8xMDAtYWxsb3ctY3Jvc3MtY29tcGlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGE0ZjE1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2x0cmFjZS8wLjUuMS8xMDAtYWxsb3ctY3Jvc3MtY29tcGlsZS5wYXRjaApAQCAtMCwwICsxLDc3IEBACitkaWZmIC1kdXJOIGx0cmFjZS0wLjUuMS5vcmlnL01ha2VmaWxlLmluIGx0cmFjZS0wLjUuMS9NYWtlZmlsZS5pbgorLS0tIGx0cmFjZS0wLjUuMS5vcmlnL01ha2VmaWxlLmluCTIwMDgtMTItMTAgMTg6NDM6NDEuMDAwMDAwMDAwICswMTAwCisrKysgbHRyYWNlLTAuNS4xL01ha2VmaWxlLmluCTIwMDktMDMtMTYgMTc6MjM6MjYuMDAwMDAwMDAwICswMTAwCitAQCAtMiw4ICsyLDE0IEBACisgIyBsdHJhY2UncyBNYWtlZmlsZS5pbgorICMKKyAKKy0jT1MJCTo9ICQoc2hlbGwgdW5hbWUgLXMpCisgT1MJCTo9IEBIT1NUX09TQAorK0FSQ0gJCTo9ICQoc2hlbGwgZWNobyAiQEhPU1RfQVJDSEAiIHxzZWQgLWUgcy9pLjg2L2kzODYvICAgICAgXAorKwkJCQkJCSAgIC1lIHMvc3VuNHUvc3BhcmM2NC8gIFwKKysJCQkJCQkgICAtZSBzL2FybS4qL2FybS8gICAgICBcCisrCQkJCQkJICAgLWUgcy9zYTExMC9hcm0vICAgICAgXAorKwkJCQkJCSAgIC1lIHMvcHBjNjQvcHBjLyAgICAgIFwKKysJCQkJCQkgICAtZSBzL3MzOTB4L3MzOTAvKQorK2V4cG9ydCBBUkNICisgCisgVE9QRElSCQk9ICQoc2hlbGwgcHdkKQorIAorZGlmZiAtZHVyTiBsdHJhY2UtMC41LjEub3JpZy9jb25maWd1cmUgbHRyYWNlLTAuNS4xL2NvbmZpZ3VyZQorLS0tIGx0cmFjZS0wLjUuMS5vcmlnL2NvbmZpZ3VyZQkyMDA4LTEyLTEwIDE4OjQzOjQzLjAwMDAwMDAwMCArMDEwMAorKysrIGx0cmFjZS0wLjUuMS9jb25maWd1cmUJMjAwOS0wMy0xNiAxNzoyMDoxMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC02NjAsNiArNjYwLDcgQEAKKyBob3N0X2NwdQorIGhvc3RfdmVuZG9yCisgaG9zdF9vcworK0hPU1RfQVJDSAorIEhPU1RfT1MKKyBDQworIENGTEFHUworQEAgLTE4MjMsNiArMTgyNCw3IEBACisgY2FzZSAkaG9zdF9vcyBpbiAqXCAqKSBob3N0X29zPWBlY2hvICIkaG9zdF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKKyAKKyAKKytIT1NUX0FSQ0g9IiRob3N0X2NwdSIKKyBjYXNlICIkaG9zdF9vcyIgaW4KKyAgIGxpbnV4LWdudSopIGhvc3Rfb3M9bGludXgtZ251CisgZXNhYworQEAgLTU0MDYsNiArNTQwOCw3IEBACisgaG9zdF9jcHUhJGhvc3RfY3B1JGFjX2RlbGltCisgaG9zdF92ZW5kb3IhJGhvc3RfdmVuZG9yJGFjX2RlbGltCisgaG9zdF9vcyEkaG9zdF9vcyRhY19kZWxpbQorK0hPU1RfQVJDSCEkSE9TVF9BUkNIJGFjX2RlbGltCisgSE9TVF9PUyEkSE9TVF9PUyRhY19kZWxpbQorIENDISRDQyRhY19kZWxpbQorIENGTEFHUyEkQ0ZMQUdTJGFjX2RlbGltCitAQCAtNTQyNiw3ICs1NDI5LDcgQEAKKyBMVExJQk9CSlMhJExUTElCT0JKUyRhY19kZWxpbQorIF9BQ0VPRgorIAorLSAgaWYgdGVzdCBgc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLnNlZCB8IGdyZXAgLWMgWGAgPSA2MzsgdGhlbgorKyAgaWYgdGVzdCBgc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLnNlZCB8IGdyZXAgLWMgWGAgPSA2NDsgdGhlbgorICAgICBicmVhaworICAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKyAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mNQorZGlmZiAtZHVyTiBsdHJhY2UtMC41LjEub3JpZy9jb25maWd1cmUuYWMgbHRyYWNlLTAuNS4xL2NvbmZpZ3VyZS5hYworLS0tIGx0cmFjZS0wLjUuMS5vcmlnL2NvbmZpZ3VyZS5hYwkyMDA4LTEyLTEwIDE4OjQzOjQxLjAwMDAwMDAwMCArMDEwMAorKysrIGx0cmFjZS0wLjUuMS9jb25maWd1cmUuYWMJMjAwOS0wMy0xNiAxNzoyMToyNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMSw2ICsxMSw4IEBACisgZXNhYworIEhPU1RfT1M9IiRob3N0X29zIgorIEFDX1NVQlNUKEhPU1RfT1MpCisrSE9TVF9BUkNIPSIkaG9zdF9jcHUiCisrQUNfU1VCU1QoSE9TVF9BUkNIKQorIAorIGRubCBDaGVja3MgZm9yIHByb2dyYW1zLgorIEFDX1BST0dfQ0MKK2RpZmYgLWR1ck4gbHRyYWNlLTAuNS4xLm9yaWcvc3lzZGVwcy9saW51eC1nbnUvTWFrZWZpbGUgbHRyYWNlLTAuNS4xL3N5c2RlcHMvbGludXgtZ251L01ha2VmaWxlCistLS0gbHRyYWNlLTAuNS4xLm9yaWcvc3lzZGVwcy9saW51eC1nbnUvTWFrZWZpbGUJMjAwOC0xMi0xMCAxODo0Mzo0MS4wMDAwMDAwMDAgKzAxMDAKKysrKyBsdHJhY2UtMC41LjEvc3lzZGVwcy9saW51eC1nbnUvTWFrZWZpbGUJMjAwOS0wMy0xNiAxNzoyMTo0OS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xLDYgKzEsMyBAQAorLUFSQ0gJCTo9CSQoc2hlbGwgdW5hbWUgLW0gfCBzZWQgLWUgcy9pLjg2L2kzODYvIC1lIHMvc3VuNHUvc3BhcmM2NC8gXAorLQkJCS1lIHMvYXJtLiovYXJtLyAtZSBzL3NhMTEwL2FybS8gLWUgcy9wcGM2NC9wcGMvIC1lIHMvczM5MHgvczM5MC8pCistCisgQ1BQRkxBR1MJKz0JLUkkKFRPUERJUikvc3lzZGVwcy9saW51eC1nbnUvJChBUkNIKQorIAorIE9CSgkJPQl0cmFjZS5vIHByb2MubyBicmVha3BvaW50Lm8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LjEvMTEwLWFscGhhLXN1cHBvcnQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbHRyYWNlLzAuNS4xLzExMC1hbHBoYS1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlN2E1YzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbHRyYWNlLzAuNS4xLzExMC1hbHBoYS1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKK2RpZmYgLWR1ck4gbHRyYWNlLTAuNS4xLm9yaWcvTWFrZWZpbGUuaW4gbHRyYWNlLTAuNS4xL01ha2VmaWxlLmluCistLS0gbHRyYWNlLTAuNS4xLm9yaWcvTWFrZWZpbGUuaW4JMjAwOS0wMy0xNiAxNzoyNDowOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBsdHJhY2UtMC41LjEvTWFrZWZpbGUuaW4JMjAwOS0wMy0xNiAxNzo0MzowOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC01LDYgKzUsNyBAQAorIE9TCQk6PSBASE9TVF9PU0AKKyBBUkNICQk6PSAkKHNoZWxsIGVjaG8gIkBIT1NUX0FSQ0hAIiB8c2VkIC1lIHMvaS44Ni9pMzg2LyAgICAgIFwKKyAJCQkJCQkgICAtZSBzL3N1bjR1L3NwYXJjNjQvICBcCisrCQkJCQkJICAgLWUgcy9hbHBoYS4qL2FscGhhLyAgXAorIAkJCQkJCSAgIC1lIHMvYXJtLiovYXJtLyAgICAgIFwKKyAJCQkJCQkgICAtZSBzL3NhMTEwL2FybS8gICAgICBcCisgCQkJCQkJICAgLWUgcy9wcGM2NC9wcGMvICAgICAgXApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2x0cmFjZS8wLjUuMi8xMDAtYWxsb3ctY3Jvc3MtY29tcGlsZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LjIvMTAwLWFsbG93LWNyb3NzLWNvbXBpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA0NDBhZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LjIvMTAwLWFsbG93LWNyb3NzLWNvbXBpbGUucGF0Y2gKQEAgLTAsMCArMSw3NyBAQAorZGlmZiAtZHVyTiBsdHJhY2UtMC41LjIub3JpZy9NYWtlZmlsZS5pbiBsdHJhY2UtMC41LjIvTWFrZWZpbGUuaW4KKy0tLSBsdHJhY2UtMC41LjIub3JpZy9NYWtlZmlsZS5pbgkyMDA5LTA1LTIxIDE5OjE0OjU0LjAwMDAwMDAwMCArMDIwMAorKysrIGx0cmFjZS0wLjUuMi9NYWtlZmlsZS5pbgkyMDA5LTA2LTI3IDE1OjMwOjM0LjAwMDAwMDAwMCArMDIwMAorQEAgLTIsOCArMiwxNCBAQAorICMgbHRyYWNlJ3MgTWFrZWZpbGUuaW4KKyAjCisgCistI09TCQk6PSAkKHNoZWxsIHVuYW1lIC1zKQorIE9TCQk6PSBASE9TVF9PU0AKKytBUkNICQk6PSAkKHNoZWxsIGVjaG8gIkBIT1NUX0FSQ0hAIiB8c2VkIC1lIHMvaS44Ni9pMzg2LyAgICAgIFwKKysJCQkJCQkgICAtZSBzL3N1bjR1L3NwYXJjNjQvICBcCisrCQkJCQkJICAgLWUgcy9hcm0uKi9hcm0vICAgICAgXAorKwkJCQkJCSAgIC1lIHMvc2ExMTAvYXJtLyAgICAgIFwKKysJCQkJCQkgICAtZSBzL3BwYzY0L3BwYy8gICAgICBcCisrCQkJCQkJICAgLWUgcy9zMzkweC9zMzkwLykKKytleHBvcnQgQVJDSAorIAorIFRPUERJUgkJPSAkKHNoZWxsIHB3ZCkKKyAKK2RpZmYgLWR1ck4gbHRyYWNlLTAuNS4yLm9yaWcvY29uZmlndXJlIGx0cmFjZS0wLjUuMi9jb25maWd1cmUKKy0tLSBsdHJhY2UtMC41LjIub3JpZy9jb25maWd1cmUJMjAwOS0wNS0yMSAxOToxNDo1Ny4wMDAwMDAwMDAgKzAyMDAKKysrKyBsdHJhY2UtMC41LjIvY29uZmlndXJlCTIwMDktMDYtMjcgMTU6MzA6MzQuMDAwMDAwMDAwICswMjAwCitAQCAtNjYwLDYgKzY2MCw3IEBACisgaG9zdF9jcHUKKyBob3N0X3ZlbmRvcgorIGhvc3Rfb3MKKytIT1NUX0FSQ0gKKyBIT1NUX09TCisgQ0MKKyBDRkxBR1MKK0BAIC0xODIzLDYgKzE4MjQsNyBAQAorIGNhc2UgJGhvc3Rfb3MgaW4gKlwgKikgaG9zdF9vcz1gZWNobyAiJGhvc3Rfb3MiIHwgc2VkICdzLyAvLS9nJ2A7OyBlc2FjCisgCisgCisrSE9TVF9BUkNIPSIkaG9zdF9jcHUiCisgY2FzZSAiJGhvc3Rfb3MiIGluCisgICBsaW51eC1nbnUqKSBob3N0X29zPWxpbnV4LWdudQorIGVzYWMKK0BAIC01NDA2LDYgKzU0MDgsNyBAQAorIGhvc3RfY3B1ISRob3N0X2NwdSRhY19kZWxpbQorIGhvc3RfdmVuZG9yISRob3N0X3ZlbmRvciRhY19kZWxpbQorIGhvc3Rfb3MhJGhvc3Rfb3MkYWNfZGVsaW0KKytIT1NUX0FSQ0ghJEhPU1RfQVJDSCRhY19kZWxpbQorIEhPU1RfT1MhJEhPU1RfT1MkYWNfZGVsaW0KKyBDQyEkQ0MkYWNfZGVsaW0KKyBDRkxBR1MhJENGTEFHUyRhY19kZWxpbQorQEAgLTU0MjYsNyArNTQyOSw3IEBACisgTFRMSUJPQkpTISRMVExJQk9CSlMkYWNfZGVsaW0KKyBfQUNFT0YKKyAKKy0gIGlmIHRlc3QgYHNlZCAtbiAicy8uKiRhY19kZWxpbVwkL1gvcCIgY29uZiQkc3Vicy5zZWQgfCBncmVwIC1jIFhgID0gNjM7IHRoZW4KKysgIGlmIHRlc3QgYHNlZCAtbiAicy8uKiRhY19kZWxpbVwkL1gvcCIgY29uZiQkc3Vicy5zZWQgfCBncmVwIC1jIFhgID0gNjQ7IHRoZW4KKyAgICAgYnJlYWsKKyAgIGVsaWYgJGFjX2xhc3RfdHJ5OyB0aGVuCisgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiA+JjUKK2RpZmYgLWR1ck4gbHRyYWNlLTAuNS4yLm9yaWcvY29uZmlndXJlLmFjIGx0cmFjZS0wLjUuMi9jb25maWd1cmUuYWMKKy0tLSBsdHJhY2UtMC41LjIub3JpZy9jb25maWd1cmUuYWMJMjAwOS0wNS0yMSAxOToxNDo1NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBsdHJhY2UtMC41LjIvY29uZmlndXJlLmFjCTIwMDktMDYtMjcgMTU6MzA6MzQuMDAwMDAwMDAwICswMjAwCitAQCAtMTEsNiArMTEsOCBAQAorIGVzYWMKKyBIT1NUX09TPSIkaG9zdF9vcyIKKyBBQ19TVUJTVChIT1NUX09TKQorK0hPU1RfQVJDSD0iJGhvc3RfY3B1IgorK0FDX1NVQlNUKEhPU1RfQVJDSCkKKyAKKyBkbmwgQ2hlY2tzIGZvciBwcm9ncmFtcy4KKyBBQ19QUk9HX0NDCitkaWZmIC1kdXJOIGx0cmFjZS0wLjUuMi5vcmlnL3N5c2RlcHMvbGludXgtZ251L01ha2VmaWxlIGx0cmFjZS0wLjUuMi9zeXNkZXBzL2xpbnV4LWdudS9NYWtlZmlsZQorLS0tIGx0cmFjZS0wLjUuMi5vcmlnL3N5c2RlcHMvbGludXgtZ251L01ha2VmaWxlCTIwMDktMDUtMjEgMTk6MTQ6NTQuMDAwMDAwMDAwICswMjAwCisrKysgbHRyYWNlLTAuNS4yL3N5c2RlcHMvbGludXgtZ251L01ha2VmaWxlCTIwMDktMDYtMjcgMTU6MzA6MzQuMDAwMDAwMDAwICswMjAwCitAQCAtMSw2ICsxLDMgQEAKKy1BUkNICQk6PQkkKHNoZWxsIHVuYW1lIC1tIHwgc2VkIC1lIHMvaS44Ni9pMzg2LyAtZSBzL3N1bjR1L3NwYXJjNjQvIFwKKy0JCQktZSBzL2FybS4qL2FybS8gLWUgcy9zYTExMC9hcm0vIC1lIHMvcHBjNjQvcHBjLyAtZSBzL3MzOTB4L3MzOTAvKQorLQorIENQUEZMQUdTCSs9CS1JJChUT1BESVIpL3N5c2RlcHMvbGludXgtZ251LyQoQVJDSCkKKyAKKyBPQkoJCT0JZXZlbnRzLm8gdHJhY2UubyBwcm9jLm8gYnJlYWtwb2ludC5vCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbHRyYWNlLzAuNS4yLzExMC1hbHBoYS1zdXBwb3J0LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2x0cmFjZS8wLjUuMi8xMTAtYWxwaGEtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTIxY2ExCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2x0cmFjZS8wLjUuMi8xMTAtYWxwaGEtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDExIEBACitkaWZmIC1kdXJOIGx0cmFjZS0wLjUuMi5vcmlnL01ha2VmaWxlLmluIGx0cmFjZS0wLjUuMi9NYWtlZmlsZS5pbgorLS0tIGx0cmFjZS0wLjUuMi5vcmlnL01ha2VmaWxlLmluCTIwMDktMDYtMjcgMTU6MzQ6MDQuMDAwMDAwMDAwICswMjAwCisrKysgbHRyYWNlLTAuNS4yL01ha2VmaWxlLmluCTIwMDktMDYtMjcgMTU6MzQ6MjcuMDAwMDAwMDAwICswMjAwCitAQCAtNSw2ICs1LDcgQEAKKyBPUwkJOj0gQEhPU1RfT1NACisgQVJDSAkJOj0gJChzaGVsbCBlY2hvICJASE9TVF9BUkNIQCIgfHNlZCAtZSBzL2kuODYvaTM4Ni8gICAgICBcCisgCQkJCQkJICAgLWUgcy9zdW40dS9zcGFyYzY0LyAgXAorKwkJCQkJCSAgIC1lIHMvYWxwaGEuKi9hbHBoYS8gIFwKKyAJCQkJCQkgICAtZSBzL2FybS4qL2FybS8gICAgICBcCisgCQkJCQkJICAgLWUgcy9zYTExMC9hcm0vICAgICAgXAorIAkJCQkJCSAgIC1lIHMvcHBjNjQvcHBjLyAgICAgIFwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LjIvMTIwLWRlYmlhbi1sdHJhY2UtMC41LjItMi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LjIvMTIwLWRlYmlhbi1sdHJhY2UtMC41LjItMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDYyMzE1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2x0cmFjZS8wLjUuMi8xMjAtZGViaWFuLWx0cmFjZS0wLjUuMi0yLnBhdGNoCkBAIC0wLDAgKzEsMjQwIEBACistLS0gbHRyYWNlLTAuNS4yLm9yaWcvVE9ETworKysrIGx0cmFjZS0wLjUuMi9UT0RPCitAQCAtMzcsMyArMzcsNCBAQAorICogZGVidWc6IGNoYW5nZSAiLWQiIG9wdGlvbiB0byBiZSBzb21ldGhpbmcgbGlrZSAiLWQgZWxmLGV2ZW50cyIsIG9yICItZCBicmVha3BvaW50cyIKKyAqIEZpbmQgb3V0IGlmIGEgcHJvY2VzcyBpcyBzaGFyaW5nIG1lbW9yeSB3aXRoIGl0cyBwYXJlbnQ/CisgKiBXaGVuIHVzaW5nIC1wLCBmaW5kIG91dCBpZiB0aGF0IHByb2Nlc3MgaXMgc2hhcmluZyBtZW1vcnkgd2l0aCBvdGhlciBwcm9jcworKyogQWZ0ZXIgYSBjbG9uZSgpLCBzeXNjYWxscyBtYXkgYmUgc2VlbiBhcyBzeXNyZXRzIGluIHMzOTAgKHNlZSB0cmFjZS5jOnN5c2NhbGxfcCgpKQorLS0tIGx0cmFjZS0wLjUuMi5vcmlnL3Byb2Nlc3NfZXZlbnQuYworKysrIGx0cmFjZS0wLjUuMi9wcm9jZXNzX2V2ZW50LmMKK0BAIC0xNzAsNyArMTcwLDcgQEAKKyAJCQllbmFibGVfYnJlYWtwb2ludChwcm9jLT5waWQsIHByb2MtPmJyZWFrcG9pbnRfYmVpbmdfZW5hYmxlZCk7CisgCQkJcHJvYy0+YnJlYWtwb2ludF9iZWluZ19lbmFibGVkID0gTlVMTDsKKyAJCX0KKy0JCWlmIChwcm9jLT5wYXJlbnQtPnN0YXRlID09IFNUQVRFX0FUVEFDSEVEICYmIG9wdGlvbnMuZm9sbG93KSB7CisrCQlpZiAob3B0aW9ucy5mb2xsb3cpIHsKKyAJCQlwcm9jLT5zdGF0ZSA9IFNUQVRFX0FUVEFDSEVEOworIAkJfSBlbHNlIHsKKyAJCQlwcm9jLT5zdGF0ZSA9IFNUQVRFX0lHTk9SRUQ7CistLS0gbHRyYWNlLTAuNS4yLm9yaWcvc3lzZGVwcy9saW51eC1nbnUvcHBjL3RyYWNlLmMKKysrKyBsdHJhY2UtMC41LjIvc3lzZGVwcy9saW51eC1nbnUvcHBjL3RyYWNlLmMKK0BAIC01MCw5ICs1MCw5IEBACisgCQkJKnN5c251bSA9CisgCQkJICAgIChpbnQpcHRyYWNlKFBUUkFDRV9QRUVLVVNFUiwgcHJvYy0+cGlkLAorIAkJCQkJc2l6ZW9mKGxvbmcpICogUFRfUjAsIDApOworLQkJCWlmIChwcm9jLT5jYWxsc3RhY2tfZGVwdGggPiAwCistCQkJICAgICYmIHByb2MtPmNhbGxzdGFja1twcm9jLT5jYWxsc3RhY2tfZGVwdGggLQorLQkJCQkJICAgICAgIDFdLmlzX3N5c2NhbGwpIHsKKysJCQlpZiAocHJvYy0+Y2FsbHN0YWNrX2RlcHRoID4gMCAmJgorKwkJCQkJcHJvYy0+Y2FsbHN0YWNrW3Byb2MtPmNhbGxzdGFja19kZXB0aCAtIDFdLmlzX3N5c2NhbGwgJiYKKysJCQkJCXByb2MtPmNhbGxzdGFja1twcm9jLT5jYWxsc3RhY2tfZGVwdGggLSAxXS5jX3VuLnN5c2NhbGwgPT0gKnN5c251bSkgeworIAkJCQlyZXR1cm4gMjsKKyAJCQl9CisgCQkJcmV0dXJuIDE7CistLS0gbHRyYWNlLTAuNS4yLm9yaWcvc3lzZGVwcy9saW51eC1nbnUvaTM4Ni90cmFjZS5jCisrKysgbHRyYWNlLTAuNS4yL3N5c2RlcHMvbGludXgtZ251L2kzODYvdHJhY2UuYworQEAgLTMyLDcgKzMyLDggQEAKKyAJCSpzeXNudW0gPSBwdHJhY2UoUFRSQUNFX1BFRUtVU0VSLCBwcm9jLT5waWQsIDQgKiBPUklHX0VBWCwgMCk7CisgCisgCQlpZiAocHJvYy0+Y2FsbHN0YWNrX2RlcHRoID4gMCAmJgorLQkJICAgIHByb2MtPmNhbGxzdGFja1twcm9jLT5jYWxsc3RhY2tfZGVwdGggLSAxXS5pc19zeXNjYWxsKSB7CisrCQkJCXByb2MtPmNhbGxzdGFja1twcm9jLT5jYWxsc3RhY2tfZGVwdGggLSAxXS5pc19zeXNjYWxsICYmCisrCQkJCXByb2MtPmNhbGxzdGFja1twcm9jLT5jYWxsc3RhY2tfZGVwdGggLSAxXS5jX3VuLnN5c2NhbGwgPT0gKnN5c251bSkgeworIAkJCXJldHVybiAyOworIAkJfQorIAorLS0tIGx0cmFjZS0wLjUuMi5vcmlnL3N5c2RlcHMvbGludXgtZ251L2lhNjQvdHJhY2UuYworKysrIGx0cmFjZS0wLjUuMi9zeXNkZXBzL2xpbnV4LWdudS9pYTY0L3RyYWNlLmMKK0BAIC0xMDYsOCArMTA2LDggQEAKKyAJCWlmIChpbnNuID09IDB4MTAwMDAwMDAwMCB8fCBpbnNuID09IDB4MWZmZmZmZmZmZmYpIHsKKyAJCQkqc3lzbnVtID0gcjE1OworIAkJCWlmIChwcm9jLT5jYWxsc3RhY2tfZGVwdGggPiAwICYmCistCQkJICAgIHByb2MtPmNhbGxzdGFja1twcm9jLT5jYWxsc3RhY2tfZGVwdGggLQorLQkJCQkJICAgIDFdLmlzX3N5c2NhbGwpIHsKKysJCQkJcHJvYy0+Y2FsbHN0YWNrW3Byb2MtPmNhbGxzdGFja19kZXB0aCAtIDFdLmlzX3N5c2NhbGwgJiYKKysJCQkJcHJvYy0+Y2FsbHN0YWNrW3Byb2MtPmNhbGxzdGFja19kZXB0aCAtIDFdLmNfdW4uc3lzY2FsbCA9PSAqc3lzbnVtKSB7CisgCQkJCXJldHVybiAyOworIAkJCX0KKyAJCQlyZXR1cm4gMTsKKy0tLSBsdHJhY2UtMC41LjIub3JpZy9zeXNkZXBzL2xpbnV4LWdudS9tNjhrL3RyYWNlLmMKKysrKyBsdHJhY2UtMC41LjIvc3lzZGVwcy9saW51eC1nbnUvbTY4ay90cmFjZS5jCitAQCAtMzYsOSArMzYsOCBAQAorIAkJaWYgKCpzeXNudW0gPj0gMCkgeworIAkJCWRlcHRoID0gcHJvYy0+Y2FsbHN0YWNrX2RlcHRoOworIAkJCWlmIChkZXB0aCA+IDAgJiYKKy0JCQkgICAgcHJvYy0+Y2FsbHN0YWNrW2RlcHRoIC0gMV0uaXNfc3lzY2FsbCAmJgorLQkJCSAgICBwcm9jLT5jYWxsc3RhY2tbZGVwdGggLSAxXS5jX3VuLnN5c2NhbGwgPT0KKy0JCQkgICAgKnN5c251bSkgeworKwkJCQkJcHJvYy0+Y2FsbHN0YWNrW2RlcHRoIC0gMV0uaXNfc3lzY2FsbCAmJgorKwkJCQkJcHJvYy0+Y2FsbHN0YWNrW2RlcHRoIC0gMV0uY191bi5zeXNjYWxsID09ICpzeXNudW0pIHsKKyAJCQkJcmV0dXJuIDI7CisgCQkJfSBlbHNlIHsKKyAJCQkJcmV0dXJuIDE7CistLS0gbHRyYWNlLTAuNS4yLm9yaWcvc3lzZGVwcy9saW51eC1nbnUvYWxwaGEvdHJhY2UuYworKysrIGx0cmFjZS0wLjUuMi9zeXNkZXBzL2xpbnV4LWdudS9hbHBoYS90cmFjZS5jCitAQCAtMzYsOCArMzYsOSBAQAorIAkJCXJldHVybiAwOworIAkJKnN5c251bSA9CisgCQkgICAgcHRyYWNlKFBUUkFDRV9QRUVLVVNFUiwgcHJvYy0+cGlkLCAwIC8qIFJFR19SMCAqLyAsIDApOworLQkJaWYgKHByb2MtPmNhbGxzdGFja19kZXB0aCA+IDAKKy0JCSAgICAmJiBwcm9jLT5jYWxsc3RhY2tbcHJvYy0+Y2FsbHN0YWNrX2RlcHRoIC0gMV0uaXNfc3lzY2FsbCkgeworKwkJaWYgKHByb2MtPmNhbGxzdGFja19kZXB0aCA+IDAgJiYKKysJCSAgICBwcm9jLT5jYWxsc3RhY2tbcHJvYy0+Y2FsbHN0YWNrX2RlcHRoIC0gMV0uaXNfc3lzY2FsbCAmJgorKwkJCXByb2MtPmNhbGxzdGFja1twcm9jLT5jYWxsc3RhY2tfZGVwdGggLSAxXS5jX3VuLnN5c2NhbGwgPT0gKnN5c251bSkgeworIAkJCXJldHVybiAyOworIAkJfQorIAkJaWYgKCpzeXNudW0gPj0gMCAmJiAqc3lzbnVtIDwgNTAwKSB7CistLS0gbHRyYWNlLTAuNS4yLm9yaWcvc3lzZGVwcy9saW51eC1nbnUvc3BhcmMvdHJhY2UuYworKysrIGx0cmFjZS0wLjUuMi9zeXNkZXBzL2xpbnV4LWdudS9zcGFyYy90cmFjZS5jCitAQCAtMzMsOSArMzMsOSBAQAorIAkJaW5zbiA9IHB0cmFjZShQVFJBQ0VfUEVFS1RFWFQsIHByb2MtPnBpZCwgaXAsIDApOworIAkJaWYgKChpbnNuICYgMHhjMWY4MDA3ZikgPT0gMHg4MWQwMDAxMCkgeworIAkJCSpzeXNudW0gPSAoKHByb2NfYXJjaGRlcCAqKSBwcm9jLT5hcmNoX3B0ciktPnJlZ3Mucl9nMTsKKy0JCQlpZiAoKHByb2MtPmNhbGxzdGFja19kZXB0aCA+IDApCistCQkJICAgICYmIHByb2MtPmNhbGxzdGFja1twcm9jLT5jYWxsc3RhY2tfZGVwdGggLQorLQkJCQkJICAgICAgIDFdLmlzX3N5c2NhbGwpIHsKKysJCQlpZiAocHJvYy0+Y2FsbHN0YWNrX2RlcHRoID4gMCAmJgorKwkJCQkJcHJvYy0+Y2FsbHN0YWNrW3Byb2MtPmNhbGxzdGFja19kZXB0aCAtIDFdLmlzX3N5c2NhbGwgJiYKKysJCQkJCXByb2MtPmNhbGxzdGFja1twcm9jLT5jYWxsc3RhY2tfZGVwdGggLSAxXS5jX3VuLnN5c2NhbGwgPT0gKnN5c251bSkgeworIAkJCQlyZXR1cm4gMjsKKyAJCQl9IGVsc2UgaWYgKCpzeXNudW0gPj0gMCkgeworIAkJCQlyZXR1cm4gMTsKKy0tLSBsdHJhY2UtMC41LjIub3JpZy9zeXNkZXBzL2xpbnV4LWdudS9taXBzZWwvdHJhY2UuYworKysrIGx0cmFjZS0wLjUuMi9zeXNkZXBzL2xpbnV4LWdudS9taXBzZWwvdHJhY2UuYworQEAgLTYwLDMzICs2MCwzNCBAQAorIGludAorIHN5c2NhbGxfcChQcm9jZXNzICpwcm9jLCBpbnQgc3RhdHVzLCBpbnQgKnN5c251bSkgeworIAlpZiAoV0lGU1RPUFBFRChzdGF0dXMpCistCSAgICAmJiBXU1RPUFNJRyhzdGF0dXMpID09IChTSUdUUkFQIHwgcHJvYy0+dHJhY2VzeXNnb29kKSkgeworLSAgICAgICAvKiBnZXQgdGhlIHVzZXIncyBwYyAocGx1cyA4KSAqLworLSAgICAgICBsb25nIHBjID0gKGxvbmcpZ2V0X2luc3RydWN0aW9uX3BvaW50ZXIocHJvYyk7CistICAgICAgIC8qIGZldGNoIHRoZSBTV0kgaW5zdHJ1Y3Rpb24gKi8KKy0gICAgICAgaW50IGluc24gPSBwdHJhY2UoUFRSQUNFX1BFRUtURVhULCBwcm9jLT5waWQsIHBjIC0gNCwgMCk7CistICAgICAgIGludCBudW0gPSBwdHJhY2UoUFRSQUNFX1BFRUtURVhULCBwcm9jLT5waWQsIHBjIC0gOCwgMCk7CistICAgICAgIAorLS8qCistICBPbiBhIG1pcHNlbCwgIHN5c2NhbGwgbG9va3MgbGlrZToKKy0gIDI0MDQwZmExICAgIGxpIHYwLCAweDBmYTEgICAjIDQwMDEgLS0+IF9leGl0IHN5c2NhbGwKKy0gIDAwMDAwMDBjICAgIHN5c2NhbGwKKy0gKi8KKy0gICAgICBpZihpbnNuIT0weDAwMDAwMDBjKXsKKy0gICAgICAgICAgcmV0dXJuIDA7CistICAgICAgfQorLQorLSAgICAgICpzeXNudW0gPSAobnVtICYgMHhGRkZGKSAtIDQwMDA7CistICAgICAgLyogaWYgaXQgaXMgYSBzeXNjYWxsLCByZXR1cm4gMSBvciAyICovCistICAgICAgaWYgKHByb2MtPmNhbGxzdGFja19kZXB0aCA+IDAgJiYKKy0gICAgICAgICAgcHJvYy0+Y2FsbHN0YWNrW3Byb2MtPmNhbGxzdGFja19kZXB0aCAtIDFdLmlzX3N5c2NhbGwpIHsKKy0gICAgICAgICAgcmV0dXJuIDI7CistICAgICAgfQorLSAgICAgIAorLSAgICAgIGlmICgqc3lzbnVtID49IDApIHsKKy0gICAgICAgICAgcmV0dXJuIDE7CistICAgICAgfQorLSAgIH0KKysJCQkmJiBXU1RPUFNJRyhzdGF0dXMpID09IChTSUdUUkFQIHwgcHJvYy0+dHJhY2VzeXNnb29kKSkgeworKwkJLyogZ2V0IHRoZSB1c2VyJ3MgcGMgKHBsdXMgOCkgKi8KKysJCWxvbmcgcGMgPSAobG9uZylnZXRfaW5zdHJ1Y3Rpb25fcG9pbnRlcihwcm9jKTsKKysJCS8qIGZldGNoIHRoZSBTV0kgaW5zdHJ1Y3Rpb24gKi8KKysJCWludCBpbnNuID0gcHRyYWNlKFBUUkFDRV9QRUVLVEVYVCwgcHJvYy0+cGlkLCBwYyAtIDQsIDApOworKwkJaW50IG51bSA9IHB0cmFjZShQVFJBQ0VfUEVFS1RFWFQsIHByb2MtPnBpZCwgcGMgLSA4LCAwKTsKKysKKysJCS8qCisrCQkgICBPbiBhIG1pcHNlbCwgIHN5c2NhbGwgbG9va3MgbGlrZToKKysJCSAgIDI0MDQwZmExICAgIGxpIHYwLCAweDBmYTEgICAjIDQwMDEgLS0+IF9leGl0IHN5c2NhbGwKKysJCSAgIDAwMDAwMDBjICAgIHN5c2NhbGwKKysJCSAqLworKwkJaWYoaW5zbiE9MHgwMDAwMDAwYyl7CisrCQkJcmV0dXJuIDA7CisrCQl9CisrCisrCQkqc3lzbnVtID0gKG51bSAmIDB4RkZGRikgLSA0MDAwOworKwkJLyogaWYgaXQgaXMgYSBzeXNjYWxsLCByZXR1cm4gMSBvciAyICovCisrCQlpZiAocHJvYy0+Y2FsbHN0YWNrX2RlcHRoID4gMCAmJgorKwkJCQlwcm9jLT5jYWxsc3RhY2tbcHJvYy0+Y2FsbHN0YWNrX2RlcHRoIC0gMV0uaXNfc3lzY2FsbCAmJgorKwkJCQlwcm9jLT5jYWxsc3RhY2tbcHJvYy0+Y2FsbHN0YWNrX2RlcHRoIC0gMV0uY191bi5zeXNjYWxsID09ICpzeXNudW0pIHsKKysJCQlyZXR1cm4gMjsKKysJCX0KKysKKysJCWlmICgqc3lzbnVtID49IDApIHsKKysJCQlyZXR1cm4gMTsKKysJCX0KKysJfQorIAlyZXR1cm4gMDsKKyB9CisgLyoqCitAQCAtMTE5LDM0ICsxMjAsMzQgQEAKKyAqLworIGxvbmcKKyBnaW1tZV9hcmcoZW51bSB0b2YgdHlwZSwgUHJvY2VzcyAqcHJvYywgaW50IGFyZ19udW0sIGFyZ190eXBlX2luZm8gKmluZm8pIHsKKy0gICAgbG9uZyByZXQ7CistICAgIGRlYnVnKDIsInR5cGUgJWQgYXJnICVkIix0eXBlLGFyZ19udW0pOworLSAgICBpZiAodHlwZSA9PSBMVF9UT0ZfRlVOQ1RJT04gfHwgdHlwZSA9PSBMVF9UT0ZfU1lTQ0FMTCl7CistICAgICAgICBpZihhcmdfbnVtIDw0KXsKKy0gICAgICAgICAgICByZXQ9cHRyYWNlKFBUUkFDRV9QRUVLVVNFUixwcm9jLT5waWQsb2ZmX2EwK2FyZ19udW0sMCk7CistICAgICAgICAgICAgZGVidWcoMiwicmV0ID0gJSNseCIscmV0KTsKKy0gICAgICAgICAgICByZXR1cm4gcmV0OworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICAvLyBJZiB3ZSBuZWVkIHRoaXMsIEkgdGhpbmsgd2UgY2FuIGxvb2sgYXQgW3NwKzE2XSBmb3IgYXJnX251bT09NC4KKy0gICAgICAgICAgICBDUDsKKy0gICAgICAgICAgICByZXR1cm4gMDsKKy0gICAgICAgIH0KKy0gICAgfSAKKy0gICAgaWYoYXJnX251bT49MCl7CistICAgICAgIGZwcmludGYoc3RkZXJyLCJhcmdzIG9uIHJldHVybj8iKTsKKy0gICAgfQorLSAgICBpZih0eXBlID09IExUX1RPRl9GVU5DVElPTlIpIHsKKy0gICAgICAgIHJldHVybiAgcHRyYWNlKFBUUkFDRV9QRUVLVVNFUixwcm9jLT5waWQsb2ZmX3YwLDApOworLSAgICB9CistICAgIGlmICh0eXBlID09IExUX1RPRl9TWVNDQUxMUikgeworLSAgICAgICAgdW5zaWduZWQgYTM9cHRyYWNlKFBUUkFDRV9QRUVLVVNFUiwgcHJvYy0+cGlkLG9mZl9hMywwKTsKKy0gICAgICAgIHVuc2lnbmVkIHYwPXB0cmFjZShQVFJBQ0VfUEVFS1VTRVIsIHByb2MtPnBpZCxvZmZfdjAsMCk7CistICAgICAgICBpZighYTMpeworLSAgICAgICAgICAgIHJldHVybiB2MDsKKy0gICAgICAgIH0KKy0gICAgICAgIHJldHVybiAtMTsKKy0gICAgfQorLSAgICBmcHJpbnRmKHN0ZGVyciwgImdpbW1lX2FyZyBjYWxsZWQgd2l0aCB3cm9uZyBhcmd1bWVudHNcbiIpOworKwlsb25nIHJldDsKKysJZGVidWcoMiwidHlwZSAlZCBhcmcgJWQiLHR5cGUsYXJnX251bSk7CisrCWlmICh0eXBlID09IExUX1RPRl9GVU5DVElPTiB8fCB0eXBlID09IExUX1RPRl9TWVNDQUxMKXsKKysJCWlmKGFyZ19udW0gPDQpeworKwkJCXJldD1wdHJhY2UoUFRSQUNFX1BFRUtVU0VSLHByb2MtPnBpZCxvZmZfYTArYXJnX251bSwwKTsKKysJCQlkZWJ1ZygyLCJyZXQgPSAlI2x4IixyZXQpOworKwkJCXJldHVybiByZXQ7CisrCQl9IGVsc2UgeworKwkJCS8vIElmIHdlIG5lZWQgdGhpcywgSSB0aGluayB3ZSBjYW4gbG9vayBhdCBbc3ArMTZdIGZvciBhcmdfbnVtPT00LgorKwkJCUNQOworKwkJCXJldHVybiAwOworKwkJfQorKwl9IAorKwlpZihhcmdfbnVtPj0wKXsKKysJCWZwcmludGYoc3RkZXJyLCJhcmdzIG9uIHJldHVybj8iKTsKKysJfQorKwlpZih0eXBlID09IExUX1RPRl9GVU5DVElPTlIpIHsKKysJCXJldHVybiAgcHRyYWNlKFBUUkFDRV9QRUVLVVNFUixwcm9jLT5waWQsb2ZmX3YwLDApOworKwl9CisrCWlmICh0eXBlID09IExUX1RPRl9TWVNDQUxMUikgeworKwkJdW5zaWduZWQgYTM9cHRyYWNlKFBUUkFDRV9QRUVLVVNFUiwgcHJvYy0+cGlkLG9mZl9hMywwKTsKKysJCXVuc2lnbmVkIHYwPXB0cmFjZShQVFJBQ0VfUEVFS1VTRVIsIHByb2MtPnBpZCxvZmZfdjAsMCk7CisrCQlpZighYTMpeworKwkJCXJldHVybiB2MDsKKysJCX0KKysJCXJldHVybiAtMTsKKysJfQorKwlmcHJpbnRmKHN0ZGVyciwgImdpbW1lX2FyZyBjYWxsZWQgd2l0aCB3cm9uZyBhcmd1bWVudHNcbiIpOworIAlyZXR1cm4gMDsKKyB9CisgCistLS0gbHRyYWNlLTAuNS4yLm9yaWcvc3lzZGVwcy9saW51eC1nbnUveDg2XzY0L3RyYWNlLmMKKysrKyBsdHJhY2UtMC41LjIvc3lzZGVwcy9saW51eC1nbnUveDg2XzY0L3RyYWNlLmMKK0BAIC00MSw3ICs0MSw4IEBACisgCQkqc3lzbnVtID0gcHRyYWNlKFBUUkFDRV9QRUVLVVNFUiwgcHJvYy0+cGlkLCA4ICogT1JJR19SQVgsIDApOworIAorIAkJaWYgKHByb2MtPmNhbGxzdGFja19kZXB0aCA+IDAgJiYKKy0JCSAgICBwcm9jLT5jYWxsc3RhY2tbcHJvYy0+Y2FsbHN0YWNrX2RlcHRoIC0gMV0uaXNfc3lzY2FsbCkgeworKwkJCQlwcm9jLT5jYWxsc3RhY2tbcHJvYy0+Y2FsbHN0YWNrX2RlcHRoIC0gMV0uaXNfc3lzY2FsbCAmJgorKwkJCQlwcm9jLT5jYWxsc3RhY2tbcHJvYy0+Y2FsbHN0YWNrX2RlcHRoIC0gMV0uY191bi5zeXNjYWxsID09ICpzeXNudW0pIHsKKyAJCQlyZXR1cm4gMjsKKyAJCX0KKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LjIvMTMwLWZpeC1idWlsZC13aXRoLWV4b3RpYy1saW51eC1ob3N0LU9TLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2x0cmFjZS8wLjUuMi8xMzAtZml4LWJ1aWxkLXdpdGgtZXhvdGljLWxpbnV4LWhvc3QtT1MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAzOTZkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LjIvMTMwLWZpeC1idWlsZC13aXRoLWV4b3RpYy1saW51eC1ob3N0LU9TLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK2RpZmYgLWR1ck4gbHRyYWNlLTAuNS4yLm9yaWcvY29uZmlndXJlIGx0cmFjZS0wLjUuMi9jb25maWd1cmUKKy0tLSBsdHJhY2UtMC41LjIub3JpZy9jb25maWd1cmUJMjAwOS0wOS0xNCAxODo0Nzo0NS4wMDAwMDAwMDAgKzAyMDAKKysrKyBsdHJhY2UtMC41LjIvY29uZmlndXJlCTIwMDktMDktMTQgMTg6NDk6MTguMDAwMDAwMDAwICswMjAwCitAQCAtMTgyOSw2ICsxODI5LDkgQEAKKyAgIGxpbnV4LWdudSopIGhvc3Rfb3M9bGludXgtZ251CisgZXNhYworIEhPU1RfT1M9IiRob3N0X29zIgorK2Nhc2UgIiR7SE9TVF9PU30iIGluCisrICBsaW51eC0qKSBIT1NUX09TPWxpbnV4LWdudTs7CisrZXNhYworIAorIAorIGFjX2V4dD1jCitkaWZmIC1kdXJOIGx0cmFjZS0wLjUuMi5vcmlnL2NvbmZpZ3VyZS5hYyBsdHJhY2UtMC41LjIvY29uZmlndXJlLmFjCistLS0gbHRyYWNlLTAuNS4yLm9yaWcvY29uZmlndXJlLmFjCTIwMDktMDktMTQgMTg6NDc6NDUuMDAwMDAwMDAwICswMjAwCisrKysgbHRyYWNlLTAuNS4yL2NvbmZpZ3VyZS5hYwkyMDA5LTA5LTE0IDE4OjQ5OjE4LjAwMDAwMDAwMCArMDIwMAorQEAgLTEwLDYgKzEwLDkgQEAKKyAgIGxpbnV4LWdudSopIGhvc3Rfb3M9bGludXgtZ251CisgZXNhYworIEhPU1RfT1M9IiRob3N0X29zIgorK2Nhc2UgIiR7SE9TVF9PU30iIGluCisrICBsaW51eC0qKSBIT1NUX09TPWxpbnV4LWdudTs7CisrZXNhYworIEFDX1NVQlNUKEhPU1RfT1MpCisgSE9TVF9BUkNIPSIkaG9zdF9jcHUiCisgQUNfU1VCU1QoSE9TVF9BUkNIKQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2x0cmFjZS8wLjUuMy8xMDAtYWxsb3ctY3Jvc3MtY29tcGlsZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LjMvMTAwLWFsbG93LWNyb3NzLWNvbXBpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg1NzJjZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LjMvMTAwLWFsbG93LWNyb3NzLWNvbXBpbGUucGF0Y2gKQEAgLTAsMCArMSw4NCBAQAorVGhpcyBwYXRjaCBpcyBjb3VydGVzeSBvZiBPcGVuRW1iZWRkZWQsIGJ5IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK2h0dHA6Ly9jZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvY2dpdC5jZ2kvb3BlbmVtYmVkZGVkL2NvbW1pdC8/aWQ9Yjg1Yjc3OTY4OGYwYWJjMzg5ZTNjMjVkMDZiNTRkZThiODYzODVjMQorCitJbmRleDogbHRyYWNlLTAuNS4zL2NvbW1vbi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbHRyYWNlLTAuNS4zLm9yaWcvY29tbW9uLmgJMjAwOS0xMC0yMyAyMzoxMzo0NS43MDAyODI1NzggLTA3MDAKKysrKyBsdHJhY2UtMC41LjMvY29tbW9uLmgJMjAwOS0xMC0yMyAyMzoxNDoxMy41NTAzNzE1NTMgLTA3MDAKK0BAIC0xLDMgKzEsNSBAQAorKyNpZm5kZWYgQ09NTU9OX0gKKysjZGVmaW5lIENPTU1PTl9ICisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvdGltZS5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorQEAgLTI1MSwzICsyNTMsNSBAQCBleHRlcm4gdm9pZCAqIHN5bTJhZGRyKFByb2Nlc3MgKiwgc3RydWN0CisgI2lmIDAJCQkJLyogbm90IHlldCAqLworIGV4dGVybiBpbnQgdW1vdmVuKFByb2Nlc3MgKiBwcm9jLCB2b2lkICogYWRkciwgaW50IGxlbiwgdm9pZCAqIGxhZGRyKTsKKyAjZW5kaWYKKysjZW5kaWYKKysKK0luZGV4OiBsdHJhY2UtMC41LjMvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbHRyYWNlLTAuNS4zLm9yaWcvY29uZmlndXJlCTIwMDktMTAtMjMgMjM6MTM6NDUuNjMwMzE2NDk0IC0wNzAwCisrKysgbHRyYWNlLTAuNS4zL2NvbmZpZ3VyZQkyMDA5LTEwLTIzIDIzOjEzOjU5LjY3Mjg2OTUyNyAtMDcwMAorQEAgLTMwLDcgKzMwLDcgQEAgaW50IG1haW4gKCkgeworICAgcmV0dXJuIGNwbHVzX2RlbWFuZ2xlKCk7CisgfQorIEVPRgorLWlmIGdjYyBjb25mdGVzdC5jIC1saWJlcnR5IDI+L2Rldi9udWxsCisraWYgJENDIGNvbmZ0ZXN0LmMgLWxpYmVydHkgMj4vZGV2L251bGwKKyB0aGVuCisgICBIQVZFX0xJQklCRVJUWT0xCisgICBlY2hvICJ5ZXMiCitAQCAtNDgsNyArNDgsNyBAQCBpbnQgbWFpbiAoKSB7CisgICByZXR1cm4gX19jeGFfZGVtYW5nbGUoKTsKKyB9CisgRU9GCistaWYgZ2NjIGNvbmZ0ZXN0LmMgLWxzdXBjKysgMj4vZGV2L251bGwKKytpZiAkQ0MgY29uZnRlc3QuYyAtbHN1cGMrKyAyPi9kZXYvbnVsbAorIHRoZW4KKyAgIEhBVkVfTElCU1VQQ19fPTEKKyAgIGVjaG8gInllcyIKK0BAIC02Nyw3ICs2Nyw3IEBAIGludCBtYWluICgpIHsKKyAgIHJldHVybiAwOworIH0KKyBFT0YKKy1pZiBnY2MgY29uZnRlc3QuYyAyPi9kZXYvbnVsbAorK2lmICRDQyBjb25mdGVzdC5jIDI+L2Rldi9udWxsCisgdGhlbgorICAgSEFWRV9FTEZfQ19SRUFEX01NQVA9MQorICAgZWNobyAieWVzIgorQEAgLTc3LDE1ICs3NywxMiBAQCBlbHNlCisgZmkKKyBybSAtZiBjb25mdGVzdC5jIGEub3V0CisgCistQ0M9Z2NjCistQ1BQRkxBR1M9JyAtSSAvdXNyL2luY2x1ZGUvbGliZWxmJworIENGTEFHUz0nLWcgLU8yJworIExJQlM9Jy1sZWxmIC1sc3VwYysrIC1saWJlcnR5ICcKKy1JTlNUQUxMPScvdXNyL2Jpbi9pbnN0YWxsIC1jJworK0lOU1RBTEw9J2luc3RhbGwgLWMnCisgaXF1b3RlPSctaXF1b3RlICcKKyBpcXVvdGVlbmQ9JycKKyAKKy1wcmVmaXg9L3Vzci9sb2NhbAorIHN5c2NvbmZkaXI9JyR7cHJlZml4fS9ldGMnCisgYmluZGlyPScke3ByZWZpeH0vYmluJworIG1hbmRpcj0nJHtwcmVmaXh9L3NoYXJlL21hbicKK0luZGV4OiBsdHJhY2UtMC41LjMvZGVidWcuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGx0cmFjZS0wLjUuMy5vcmlnL2RlYnVnLmgJMjAwOS0xMC0yMyAyMzoxMzo0NS42NzAyNzY4MDkgLTA3MDAKKysrKyBsdHJhY2UtMC41LjMvZGVidWcuaAkyMDA5LTEwLTIzIDIzOjE0OjI2LjQ0MDMxOTc4NSAtMDcwMAorQEAgLTEsMyArMSw1IEBACisrI2lmbmRlZiBERUJVR19ICisrI2RlZmluZSBERUJVR19ICisgI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisgCisgLyogZGVidWcgbGV2ZWxzOgorQEAgLTE0LDQgKzE2LDQgQEAgdm9pZCBkZWJ1Z18oaW50IGxldmVsLCBjb25zdCBjaGFyICpmaWxlLAorIGludCB4aW5mZHVtcChsb25nLCB2b2lkICosIGludCk7CisgCisgIyBkZWZpbmUgZGVidWcobGV2ZWwsIGV4cHIuLi4pIGRlYnVnXyhsZXZlbCwgX19GSUxFX18sIF9fTElORV9fLCBleHByKQorLQorKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2x0cmFjZS8wLjUuMy8xMTAtYWxwaGEtc3VwcG9ydC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LjMvMTEwLWFscGhhLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM4Yjg0YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LjMvMTEwLWFscGhhLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorZGlmZiAtcnUgbHRyYWNlLTAuNS4zLm9yaWcvc3lzZGVwcy9saW51eC1nbnUvTWFrZWZpbGUgbHRyYWNlLTAuNS4zL3N5c2RlcHMvbGludXgtZ251L01ha2VmaWxlCistLS0gbHRyYWNlLTAuNS4zLm9yaWcvc3lzZGVwcy9saW51eC1nbnUvTWFrZWZpbGUJMjAwOS0wNy0yNSAxNzoxMzowMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBsdHJhY2UtMC41LjMvc3lzZGVwcy9saW51eC1nbnUvTWFrZWZpbGUJMjAxMC0wMS0wMSAyMjoyMDo0NS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yLDYgKzIsNyBAQAorIAkJCQktZSBzL2kuODYvaTM4Ni8gXAorIAkJCQktZSBzL3N1bjR1L3NwYXJjNjQvIFwKKyAJCQkJLWUgcy9zcGFyYzY0L3NwYXJjLyBcCisrCQkJCS1lIHMvYWxwaGEuKi9hbHBoYS8gXAorIAkJCQktZSBzL2FybS4qL2FybS8gXAorIAkJCQktZSBzL3NhMTEwL2FybS8gXAorIAkJCQktZSBzL3BwYzY0L3BwYy8gXApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2x0cmFjZS8wLjUuMy8xMjAtZGViaWFuLWx0cmFjZV8wLjUuMy0yLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2x0cmFjZS8wLjUuMy8xMjAtZGViaWFuLWx0cmFjZV8wLjUuMy0yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4M2M3NDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbHRyYWNlLzAuNS4zLzEyMC1kZWJpYW4tbHRyYWNlXzAuNS4zLTIucGF0Y2gKQEAgLTAsMCArMSw3OCBAQAorRGViaWFuIHBhdGNoIGNvdXJ0ZXN5IG9mIHRoZSBEZWJpYW4gbHRyYWNlIG1haW50YWluZXIgSnVhbiBDZXNwZWRlcyA8Y2VzcGVkZXNAZGViaWFuLm9yZz4KKworLS0tIGx0cmFjZS0wLjUuMy5vcmlnL3N5c2RlcHMvbGludXgtZ251L2JyZWFrcG9pbnQuYworKysrIGx0cmFjZS0wLjUuMy9zeXNkZXBzL2xpbnV4LWdudS9icmVha3BvaW50LmMKK0BAIC02LDggKzYsNiBAQAorICNpbmNsdWRlICJjb21tb24uaCIKKyAjaW5jbHVkZSAiYXJjaC5oIgorIAorLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGJyZWFrX2luc25bXSA9IEJSRUFLUE9JTlRfVkFMVUU7CistCisgI2lmZGVmIEFSQ0hfSEFWRV9FTkFCTEVfQlJFQUtQT0lOVAorIGV4dGVybiB2b2lkIGFyY2hfZW5hYmxlX2JyZWFrcG9pbnQocGlkX3QsIEJyZWFrcG9pbnQgKik7Cisgdm9pZAorQEAgLTIwLDYgKzE4LDkgQEAKKyAJYXJjaF9lbmFibGVfYnJlYWtwb2ludChwaWQsIHNicCk7CisgfQorICNlbHNlCisrCisrc3RhdGljIHVuc2lnbmVkIGNoYXIgYnJlYWtfaW5zbltdID0gQlJFQUtQT0lOVF9WQUxVRTsKKysKKyB2b2lkCisgZW5hYmxlX2JyZWFrcG9pbnQocGlkX3QgcGlkLCBCcmVha3BvaW50ICpzYnApIHsKKyAJdW5zaWduZWQgaW50IGksIGo7CistLS0gbHRyYWNlLTAuNS4zLm9yaWcvc3lzZGVwcy9saW51eC1nbnUvYXJtL2JyZWFrcG9pbnQuYworKysrIGx0cmFjZS0wLjUuMy9zeXNkZXBzL2xpbnV4LWdudS9hcm0vYnJlYWtwb2ludC5jCitAQCAtMjQsMTAgKzI0LDcgQEAKKyAKKyAjaW5jbHVkZSA8c3lzL3B0cmFjZS5oPgorICNpbmNsdWRlICJjb25maWcuaCIKKy0jaW5jbHVkZSAiYXJjaC5oIgorLSNpbmNsdWRlICJvcHRpb25zLmgiCistI2luY2x1ZGUgIm91dHB1dC5oIgorLSNpbmNsdWRlICJkZWJ1Zy5oIgorKyNpbmNsdWRlICJjb21tb24uaCIKKyAKKyB2b2lkCisgYXJjaF9lbmFibGVfYnJlYWtwb2ludChwaWRfdCBwaWQsIEJyZWFrcG9pbnQgKnNicCkgeworQEAgLTU5LDggKzU2LDYgQEAKKyB2b2lkCisgYXJjaF9kaXNhYmxlX2JyZWFrcG9pbnQocGlkX3QgcGlkLCBjb25zdCBCcmVha3BvaW50ICpzYnApIHsKKyAJdW5zaWduZWQgaW50IGksIGo7CistCWNvbnN0IHVuc2lnbmVkIGNoYXIgYnJlYWtfaW5zbltdID0gQlJFQUtQT0lOVF9WQUxVRTsKKy0JY29uc3QgdW5zaWduZWQgY2hhciB0aHVtYl9icmVha19pbnNuW10gPSBUSFVNQl9CUkVBS1BPSU5UX1ZBTFVFOworIAorIAlkZWJ1ZygxLCAiYXJjaF9kaXNhYmxlX2JyZWFrcG9pbnQoJWQsJXApIiwgcGlkLCBzYnAtPmFkZHIpOworIAorLS0tIGx0cmFjZS0wLjUuMy5vcmlnL3N5c2RlcHMvbGludXgtZ251L2lhNjQvcGx0LmMKKysrKyBsdHJhY2UtMC41LjMvc3lzZGVwcy9saW51eC1nbnUvaWE2NC9wbHQuYworQEAgLTEsNCArMSw1IEBACisgI2luY2x1ZGUgPGdlbGYuaD4KKysjaW5jbHVkZSA8c3lzL3B0cmFjZS5oPgorICNpbmNsdWRlICJjb21tb24uaCIKKyAKKyAvKiBBIGJ1bmRsZSBpcyAxMjggYml0cyAqLworLS0tIGx0cmFjZS0wLjUuMy5vcmlnL3N5c2RlcHMvbGludXgtZ251L2lhNjQvYnJlYWtwb2ludC5jCisrKysgbHRyYWNlLTAuNS4zL3N5c2RlcHMvbGludXgtZ251L2lhNjQvYnJlYWtwb2ludC5jCitAQCAtNiwxMCArNiw3IEBACisgCisgI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CistI2luY2x1ZGUgImFyY2guaCIKKy0jaW5jbHVkZSAib3B0aW9ucy5oIgorLSNpbmNsdWRlICJvdXRwdXQuaCIKKy0jaW5jbHVkZSAiZGVidWcuaCIKKysjaW5jbHVkZSAiY29tbW9uLmgiCisgCisgc3RhdGljIGxvbmcgbG9uZworIGV4dHJhY3RfYml0X2ZpZWxkKGNoYXIgKmJ1bmRsZSwgaW50IGZyb20sIGludCBsZW4pIHsKKy0tLSBsdHJhY2UtMC41LjMub3JpZy9zeXNkZXBzL2xpbnV4LWdudS9pYTY0L3JlZ3MuYworKysrIGx0cmFjZS0wLjUuMy9zeXNkZXBzL2xpbnV4LWdudS9pYTY0L3JlZ3MuYworQEAgLTcsNyArNyw2IEBACisgI2luY2x1ZGUgPGFzbS9yc2UuaD4KKyAKKyAjaW5jbHVkZSA8c3RkZGVmLmg+CistI2luY2x1ZGUgImRlYnVnLmgiCisgI2luY2x1ZGUgImNvbW1vbi5oIgorIAorIHZvaWQgKgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2x0cmFjZS8wLjUuMy8xMzAtYWRkLXN5c2RlcC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LjMvMTMwLWFkZC1zeXNkZXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZkOGQyNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LjMvMTMwLWFkZC1zeXNkZXAucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVGhpcyBwYXRjaCBpcyBjb3VydGVzeSBvZiBPcGVuRW1iZWRkZWQsIGJ5IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK2h0dHA6Ly9jZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvY2dpdC5jZ2kvb3BlbmVtYmVkZGVkL2NvbW1pdC8/aWQ9Yjg1Yjc3OTY4OGYwYWJjMzg5ZTNjMjVkMDZiNTRkZThiODYzODVjMQorCitJbmRleDogbHRyYWNlLTAuNS4zL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbHRyYWNlLTAuNS4zLm9yaWcvTWFrZWZpbGUuaW4JMjAwOS0xMC0yMyAyMjowNjowOC4xMzAzMDQ2OTEgLTA3MDAKKysrKyBsdHJhY2UtMC41LjMvTWFrZWZpbGUuaW4JMjAwOS0xMC0yMyAyMjowNjo1My4xNjAzNjk2MTQgLTA3MDAKK0BAIC0zOSw2ICszOSw4IEBAIGx0cmFjZToJCW1haW4ubyBsaWJsdHJhY2UuYQorIGxpYmx0cmFjZS5hOiAJc3lzZGVwcy9zeXNkZXAubyAkKE9CSikKKyAJCSQoQVIpIHJjdiAkQCAkXgorIAorKyQoT0JKKToJCXN5c2RlcHMvc3lzZGVwLm8KKysKKyBzeXNkZXBzL3N5c2RlcC5vOiBkdW1teQorIAkJJChNQUtFKSAtQyBzeXNkZXBzLyQoT1MpCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbHRyYWNlLzAuNS4zLzE0MC1taXBzLXJlbW92ZS1DUC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LjMvMTQwLW1pcHMtcmVtb3ZlLUNQLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MzJhOGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbHRyYWNlLzAuNS4zLzE0MC1taXBzLXJlbW92ZS1DUC5wYXRjaApAQCAtMCwwICsxLDE2IEBACitUaGlzIHBhdGNoIGlzIGNvdXJ0ZXN5IG9mIE9wZW5FbWJlZGRlZCwgYnkgS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworaHR0cDovL2NnaXQub3BlbmVtYmVkZGVkLm9yZy9jZ2l0LmNnaS9vcGVuZW1iZWRkZWQvY29tbWl0Lz9pZD1iODViNzc5Njg4ZjBhYmMzODllM2MyNWQwNmI1NGRlOGI4NjM4NWMxCisKK0luZGV4OiBsdHJhY2UtMC41LjMvc3lzZGVwcy9saW51eC1nbnUvbWlwc2VsL3RyYWNlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsdHJhY2UtMC41LjMub3JpZy9zeXNkZXBzL2xpbnV4LWdudS9taXBzZWwvdHJhY2UuYwkyMDA5LTEwLTIzIDIzOjE1OjU5LjgyMjc4MzEyOCAtMDcwMAorKysrIGx0cmFjZS0wLjUuMy9zeXNkZXBzL2xpbnV4LWdudS9taXBzZWwvdHJhY2UuYwkyMDA5LTEwLTIzIDIzOjE2OjEwLjQ0MTI2ODc4OCAtMDcwMAorQEAgLTEyNyw3ICsxMjcsNiBAQCBnaW1tZV9hcmcoZW51bSB0b2YgdHlwZSwgUHJvY2VzcyAqcHJvYywgCisgCQkJcmV0dXJuIHJldDsKKyAJCX0gZWxzZSB7CisgCQkJLy8gSWYgd2UgbmVlZCB0aGlzLCBJIHRoaW5rIHdlIGNhbiBsb29rIGF0IFtzcCsxNl0gZm9yIGFyZ19udW09PTQuCistCQkJQ1A7CisgCQkJcmV0dXJuIDA7CisgCQl9CisgCX0KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LjMvMTQwLW1pcHMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbHRyYWNlLzAuNS4zLzE0MC1taXBzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMWI3YTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbHRyYWNlLzAuNS4zLzE0MC1taXBzLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK1RoaXMgcGF0Y2ggaXMgY291cnRlc3kgb2YgT3BlbkVtYmVkZGVkLCBieSBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitodHRwOi8vY2dpdC5vcGVuZW1iZWRkZWQub3JnL2NnaXQuY2dpL29wZW5lbWJlZGRlZC9jb21taXQvP2lkPWI4NWI3Nzk2ODhmMGFiYzM4OWUzYzI1ZDA2YjU0ZGU4Yjg2Mzg1YzEKKworSW5kZXg6IGx0cmFjZS0wLjUuMy9zeXNkZXBzL2xpbnV4LWdudS9taXBzZWwvcGx0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsdHJhY2UtMC41LjMub3JpZy9zeXNkZXBzL2xpbnV4LWdudS9taXBzZWwvcGx0LmMJMjAwOS0xMC0yMyAyMzoyNTo1OS4yOTI3ODA1NzQgLTA3MDAKKysrKyBsdHJhY2UtMC41LjMvc3lzZGVwcy9saW51eC1nbnUvbWlwc2VsL3BsdC5jCTIwMDktMTAtMjMgMjM6MjY6MjIuNjcxNTIyMjIwIC0wNzAwCitAQCAtMSw0ICsxLDQgQEAKKy0jaW5jbHVkZSA8ZGVidWcuaD4KKysjaW5jbHVkZSAiZGVidWcuaCIKKyAjaW5jbHVkZSA8Z2VsZi5oPgorICNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CisgI2luY2x1ZGUgImNvbW1vbi5oIgorSW5kZXg6IGx0cmFjZS0wLjUuMy9zeXNkZXBzL2xpbnV4LWdudS9taXBzZWwvcmVncy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbHRyYWNlLTAuNS4zLm9yaWcvc3lzZGVwcy9saW51eC1nbnUvbWlwc2VsL3JlZ3MuYwkyMDA5LTEwLTIzIDIzOjI1OjU5LjMxMjc3NzUyOSAtMDcwMAorKysrIGx0cmFjZS0wLjUuMy9zeXNkZXBzL2xpbnV4LWdudS9taXBzZWwvcmVncy5jCTIwMDktMTAtMjMgMjM6MjY6MDguMTkwMzExODk2IC0wNzAwCitAQCAtNCw3ICs0LDYgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KKyAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorLSNpbmNsdWRlIDxsaW51eC91c2VyLmg+CisgCisgI2luY2x1ZGUgImNvbW1vbi5oIgorICNpbmNsdWRlICJtaXBzZWwuaCIKK0luZGV4OiBsdHJhY2UtMC41LjMvaGFuZGxlX2V2ZW50LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsdHJhY2UtMC41LjMub3JpZy9oYW5kbGVfZXZlbnQuYwkyMDA5LTEwLTIzIDIzOjI5OjQ4Ljc4MDI3NDQ0NSAtMDcwMAorKysrIGx0cmFjZS0wLjUuMy9oYW5kbGVfZXZlbnQuYwkyMDA5LTEwLTIzIDIzOjM3OjMyLjI2MDI4NDA1NSAtMDcwMAorQEAgLTU3Myw3ICs1NzMsOCBAQCBoYW5kbGVfYnJlYWtwb2ludChFdmVudCAqZXZlbnQpIHsKKyAJCQl2b2lkICpvbGRfYWRkcjsKKyAJCQlzdHJ1Y3QgbGlicmFyeV9zeW1ib2wgKnN5bT0gZXZlbnQtPnByb2MtPmNhbGxzdGFja1tpXS5jX3VuLmxpYmZ1bmM7CisgCQkJYXNzZXJ0KHN5bSk7CistCQkJb2xkX2FkZHIgPSBkaWN0X2ZpbmRfZW50cnkoZXZlbnQtPnByb2MtPmJyZWFrcG9pbnRzLCBzeW0yYWRkcihldmVudC0+cHJvYywgc3ltKSktPmFkZHI7CisrCQkJc3RydWN0IEJyZWFrcG9pbnQgKnRicCA9IGRpY3RfZmluZF9lbnRyeShldmVudC0+cHJvYy0+YnJlYWtwb2ludHMsIHN5bTJhZGRyKGV2ZW50LT5wcm9jLCBzeW0pKTsKKysJCQlvbGRfYWRkciA9IHRicC0+YWRkcjsKKyAJCQlhZGRyPXN5bTJhZGRyKGV2ZW50LT5wcm9jLHN5bSk7CisgCQkJYXNzZXJ0KG9sZF9hZGRyICE9MCAmJiBhZGRyICE9MCk7CisgCQkJaWYoYWRkciAhPSBvbGRfYWRkcil7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbHRyYWNlLzAuNS4zLzE1MC1hbGxvdy1jb25maWd1cmFibGUtYXJjaC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LjMvMTUwLWFsbG93LWNvbmZpZ3VyYWJsZS1hcmNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMDhjYTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbHRyYWNlLzAuNS4zLzE1MC1hbGxvdy1jb25maWd1cmFibGUtYXJjaC5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitUaGlzIHBhdGNoIGlzIHRvIGVuc3VyZSB0aGUgcHJvcGVyIEFSQ0ggaXMgc2VsZWN0ZWQgd2hlbiBjcm9zcyBjb21waWxpbmcuICBNYWtlCitzdXJlIHRvIGNhbGwgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgd2l0aCwgZS5nLiwgSE9TVD1hcm0gLi9jb25maWd1cmUgdG8gc2VsZWN0IAordGhlIGFybSBzeXNkZXBzLgorCisJSm9hY2hpbSBOaWxzc29uIDxqb2NrZUB2bWxpbnV4Lm9yZz4KKworZGlmZiAtcnUgbHRyYWNlLTAuNS4zLm9yaWcvY29uZmlndXJlIGx0cmFjZS0wLjUuMy9jb25maWd1cmUKKy0tLSBsdHJhY2UtMC41LjMub3JpZy9jb25maWd1cmUJMjAxMC0wMS0wMiAxMTowNTo1NS4wMDAwMDAwMDAgKzAxMDAKKysrKyBsdHJhY2UtMC41LjMvY29uZmlndXJlCTIwMTAtMDEtMDIgMjA6NDk6MTEuMDAwMDAwMDAwICswMTAwCitAQCAtMTEwLDcgKzExMCw3IEBACisgIworICMgTWFrZWZpbGUuaW4gLT4gTWFrZWZpbGUKKyAjCisteF9zdWJzdF92YXJzPSdQQUNLQUdFX1ZFUlNJT04gSE9TVF9PUyBJTlNUQUxMIENDIENQUEZMQUdTIENGTEFHUyBMREZMQUdTIExJQlMgaXF1b3RlIGlxdW90ZWVuZCBwcmVmaXggc3lzY29uZmRpciBtYW5kaXIgZG9jZGlyJworK3hfc3Vic3RfdmFycz0nUEFDS0FHRV9WRVJTSU9OIEhPU1QgSE9TVF9PUyBJTlNUQUxMIENDIENQUEZMQUdTIENGTEFHUyBMREZMQUdTIExJQlMgaXF1b3RlIGlxdW90ZWVuZCBwcmVmaXggc3lzY29uZmRpciBtYW5kaXIgZG9jZGlyJworIAorIGZvciBpIGluICR4X3N1YnN0X3ZhcnMKKyBkbworT25seSBpbiBsdHJhY2UtMC41LjM6IGNvbmZpZ3VyZX4KK2RpZmYgLXJ1IGx0cmFjZS0wLjUuMy5vcmlnL01ha2VmaWxlLmluIGx0cmFjZS0wLjUuMy9NYWtlZmlsZS5pbgorLS0tIGx0cmFjZS0wLjUuMy5vcmlnL01ha2VmaWxlLmluCTIwMTAtMDEtMDIgMTE6MDU6NTUuMDAwMDAwMDAwICswMTAwCisrKysgbHRyYWNlLTAuNS4zL01ha2VmaWxlLmluCTIwMTAtMDEtMDMgMDE6Mjg6NDEuMDAwMDAwMDAwICswMTAwCitAQCAtMSwxMCArMSwxMiBAQAorICMKKyAjIGx0cmFjZSdzIE1ha2VmaWxlLmluCisgIworLQorK01ZX1RBUkdFVCAgICAgICA9IEBIT1NUQAorK2lmZGVmIE1ZX1RBUkdFVAorK0FSQ0ggICAgICAgICAgICA9ICQoTVlfVEFSR0VUKQorK2VuZGlmCisgI09TCQk6PSAkKHNoZWxsIHVuYW1lIC1zKQorIE9TCQk6PSBASE9TVF9PU0AKKy0KKyBUT1BESVIJCT0gJChzaGVsbCBwd2QpCisgCisgcHJlZml4CQk9IEBwcmVmaXhACitPbmx5IGluIGx0cmFjZS0wLjUuMzogTWFrZWZpbGUuaW5+CitkaWZmIC1ydSBsdHJhY2UtMC41LjMub3JpZy9zeXNkZXBzL2xpbnV4LWdudS9NYWtlZmlsZSBsdHJhY2UtMC41LjMvc3lzZGVwcy9saW51eC1nbnUvTWFrZWZpbGUKKy0tLSBsdHJhY2UtMC41LjMub3JpZy9zeXNkZXBzL2xpbnV4LWdudS9NYWtlZmlsZQkyMDEwLTAxLTAyIDExOjA1OjU1LjAwMDAwMDAwMCArMDEwMAorKysrIGx0cmFjZS0wLjUuMy9zeXNkZXBzL2xpbnV4LWdudS9NYWtlZmlsZQkyMDEwLTAxLTAyIDIwOjQ5OjUxLjAwMDAwMDAwMCArMDEwMAorQEAgLTEsNCArMSw0IEBACistQVJDSAkJOj0JJChzaGVsbCB1bmFtZSAtbSB8IHNlZCBcCisrQVJDSAkJPz0JJChzaGVsbCB1bmFtZSAtbSB8IHNlZCBcCisgCQkJCS1lIHMvaS44Ni9pMzg2LyBcCisgCQkJCS1lIHMvc3VuNHUvc3BhcmM2NC8gXAorIAkJCQktZSBzL3NwYXJjNjQvc3BhcmMvIFwKK09ubHkgaW4gbHRyYWNlLTAuNS4zL3N5c2RlcHMvbGludXgtZ251OiBNYWtlZmlsZX4KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LjMvMTYwLWZpeC1taXNzaW5nLXB0cmFjZS1kZWZpbmVzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2x0cmFjZS8wLjUuMy8xNjAtZml4LW1pc3NpbmctcHRyYWNlLWRlZmluZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU3YTE2NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LjMvMTYwLWZpeC1taXNzaW5nLXB0cmFjZS1kZWZpbmVzLnBhdGNoCkBAIC0wLDAgKzEsODEgQEAKK1RoaXMgcGF0Y2ggdHJpZXMgdG8gZml4IHRoZSBpc3N1ZSB3aGVuIFBUUkFDRV9FVkVOVF9GT1JLIGlzIG5vdCBmb3VuZCBpbiB0aGUgc3RhbmRhcmQKK3N5c3RlbSBoZWFkZXJzLiAgVGhlIGJlZ2luaW5uZ3Mgb2YgdGhpcyB3YXMgYWxyZWFkeSBpbiBwbGFjZSBpbiB0cmFjZS5jLCB0aGlzIHBhdGNoCitvbmx5IHRha2VzIHRoYXQgaWRlYSBhbmQgcHV0cyBpdCBpbiBhIHNoYXJlZCBpbmNsdWRlIGZpbGUgZm9yIHRyYWNlLmMgKmFuZCogZXZlbnRzLmMuCitUaGUgbGF0dGVyIG9mIHdoaWNoIG90aGVyd2lzZSBmYWlscyB0byBidWlsZCBvbiBBcm0uCisKKwlKb2FjaGltIE5pbHNzb24gPGpvY2tlQHZtbGludXgub3JnPgorCitkaWZmIC1ydU4gbHRyYWNlLTAuNS4zLm9yaWcvc3lzZGVwcy9saW51eC1nbnUvZXZlbnRzLmMgbHRyYWNlLTAuNS4zL3N5c2RlcHMvbGludXgtZ251L2V2ZW50cy5jCistLS0gbHRyYWNlLTAuNS4zLm9yaWcvc3lzZGVwcy9saW51eC1nbnUvZXZlbnRzLmMJMjAwOS0wNy0yNSAxNzoxMzowMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBsdHJhY2UtMC41LjMvc3lzZGVwcy9saW51eC1nbnUvZXZlbnRzLmMJMjAxMC0wMS0wMyAxNDozMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC03LDkgKzcsOCBAQAorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxzaWduYWwuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CistI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KKyAKKy0jaW5jbHVkZSAiY29tbW9uLmgiCisrI2luY2x1ZGUgInRyYWNlLmgiCisgCisgc3RhdGljIEV2ZW50IGV2ZW50OworIAorZGlmZiAtcnVOIGx0cmFjZS0wLjUuMy5vcmlnL3N5c2RlcHMvbGludXgtZ251L3RyYWNlLmMgbHRyYWNlLTAuNS4zL3N5c2RlcHMvbGludXgtZ251L3RyYWNlLmMKKy0tLSBsdHJhY2UtMC41LjMub3JpZy9zeXNkZXBzL2xpbnV4LWdudS90cmFjZS5jCTIwMDktMDctMjUgMTc6MTM6MDIuMDAwMDAwMDAwICswMjAwCisrKysgbHRyYWNlLTAuNS4zL3N5c2RlcHMvbGludXgtZ251L3RyYWNlLmMJMjAxMC0wMS0wMyAxNDozMzozOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC01LDEwICs1LDkgQEAKKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvd2FpdC5oPgorLSNpbmNsdWRlICJwdHJhY2UuaCIKKyAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorIAorLSNpbmNsdWRlICJjb21tb24uaCIKKysjaW5jbHVkZSAidHJhY2UuaCIKKyAKKyAvKiBJZiB0aGUgc3lzdGVtIGhlYWRlcnMgZGlkIG5vdCBwcm92aWRlIHRoZSBjb25zdGFudHMsIGhhcmQtY29kZSB0aGUgbm9ybWFsCisgICAgdmFsdWVzLiAgKi8KK2RpZmYgLXJ1TiBsdHJhY2UtMC41LjMub3JpZy9zeXNkZXBzL2xpbnV4LWdudS90cmFjZS5oIGx0cmFjZS0wLjUuMy9zeXNkZXBzL2xpbnV4LWdudS90cmFjZS5oCistLS0gbHRyYWNlLTAuNS4zLm9yaWcvc3lzZGVwcy9saW51eC1nbnUvdHJhY2UuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGx0cmFjZS0wLjUuMy9zeXNkZXBzL2xpbnV4LWdudS90cmFjZS5oCTIwMTAtMDEtMDMgMTQ6MzM6MjYuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDMyIEBACisrLyogSWYgdGhlIHN5c3RlbSBoZWFkZXJzIGRpZCBub3QgcHJvdmlkZSB0aGUgY29uc3RhbnRzLCBoYXJkLWNvZGUgdGhlIG5vcm1hbCB2YWx1ZXMuICovCisrI2lmbmRlZiBfX1NZU0RFUFNfVFJBQ0VfSF9fCisrI2RlZmluZSBfX1NZU0RFUFNfVFJBQ0VfSF9fCisrCisrI2luY2x1ZGUgInB0cmFjZS5oIgorKyNpbmNsdWRlICJjb21tb24uaCIKKysKKysjaWZuZGVmIFBUUkFDRV9FVkVOVF9GT1JLCisrI3dhcm5pbmcgIFBUUkFDRV9FVkVOVF9GT1JLIG5vdCBmb3VuZC4uLiByZWRlZmluaW5nLgorKyNkZWZpbmUgUFRSQUNFX09MRFNFVE9QVElPTlMgICAgMjEKKysjZGVmaW5lIFBUUkFDRV9TRVRPUFRJT05TICAgICAgIDB4NDIwMAorKyNkZWZpbmUgUFRSQUNFX0dFVEVWRU5UTVNHICAgICAgMHg0MjAxCisrCisrLyogb3B0aW9ucyBzZXQgdXNpbmcgUFRSQUNFX1NFVE9QVElPTlMgKi8KKysjZGVmaW5lIFBUUkFDRV9PX1RSQUNFU1lTR09PRCAgIDB4MDAwMDAwMDEKKysjZGVmaW5lIFBUUkFDRV9PX1RSQUNFRk9SSyAgICAgIDB4MDAwMDAwMDIKKysjZGVmaW5lIFBUUkFDRV9PX1RSQUNFVkZPUksgICAgIDB4MDAwMDAwMDQKKysjZGVmaW5lIFBUUkFDRV9PX1RSQUNFQ0xPTkUgICAgIDB4MDAwMDAwMDgKKysjZGVmaW5lIFBUUkFDRV9PX1RSQUNFRVhFQyAgICAgIDB4MDAwMDAwMTAKKysjZGVmaW5lIFBUUkFDRV9PX1RSQUNFVkZPUktET05FIDB4MDAwMDAwMjAKKysjZGVmaW5lIFBUUkFDRV9PX1RSQUNFRVhJVCAgICAgIDB4MDAwMDAwNDAKKysKKysvKiBXYWl0IGV4dGVuZGVkIHJlc3VsdCBjb2RlcyBmb3IgdGhlIGFib3ZlIHRyYWNlIG9wdGlvbnMuICAqLworKyNkZWZpbmUgUFRSQUNFX0VWRU5UX0ZPUksgICAgICAgMQorKyNkZWZpbmUgUFRSQUNFX0VWRU5UX1ZGT1JLICAgICAgMgorKyNkZWZpbmUgUFRSQUNFX0VWRU5UX0NMT05FICAgICAgMworKyNkZWZpbmUgUFRSQUNFX0VWRU5UX0VYRUMgICAgICAgNAorKyNkZWZpbmUgUFRSQUNFX0VWRU5UX1ZGT1JLX0RPTkUgNQorKyNkZWZpbmUgUFRSQUNFX0VWRU5UX0VYSVQgICAgICAgNgorKworKyNlbmRpZiAvKiBQVFJBQ0VfRVZFTlRfRk9SSyAqLworKyNlbmRpZiAvKiBfX1NZU0RFUFNfVFJBQ0VfSF9fICovCistLS0gbHRyYWNlLTAuNS4zLm9yaWcvc3lzZGVwcy9saW51eC1nbnUvcHBjL3BsdC5jCTIwMDktMDctMjUgMDk6MTM6MDIuMDAwMDAwMDAwIC0wNjAwCisrKysgbHRyYWNlLTAuNS4zL3N5c2RlcHMvbGludXgtZ251L3BwYy9wbHQuYwkyMDEwLTA5LTI4IDE4OjMwOjA3LjA5MTYxODE5MCAtMDYwMAorQEAgLTEsNSArMSw2IEBACisgI2luY2x1ZGUgPGdlbGYuaD4KKyAjaW5jbHVkZSAiY29tbW9uLmgiCisrI2luY2x1ZGUgInB0cmFjZS5oIgorIAorIEdFbGZfQWRkcgorIGFyY2hfcGx0X3N5bV92YWwoc3RydWN0IGx0ZWxmICpsdGUsIHNpemVfdCBuZHgsIEdFbGZfUmVsYSAqIHJlbGEpIHsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LjMvMTcwLWxpYi1zdXBjYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LjMvMTcwLWxpYi1zdXBjYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODQyYjkxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2x0cmFjZS8wLjUuMy8xNzAtbGliLXN1cGNjLnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKK0luZGV4OiBsdHJhY2UtMC41LjMvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbHRyYWNlLTAuNS4zL2NvbmZpZ3VyZQorKysrIGx0cmFjZS0wLjUuMy9jb25maWd1cmUKK0BAIC03OCw3ICs3OCwxMCBAQCBmaQorIHJtIC1mIGNvbmZ0ZXN0LmMgYS5vdXQKKyAKKyBDRkxBR1M9Jy1nIC1PMicKKy1MSUJTPSctbGVsZiAtbHN1cGMrKyAtbGliZXJ0eSAnCisrTElCUz0nLWxlbGYnCisrWyAtbiAiJEhBVkVfTElCU1VQQ19fIiBdICYmIExJQlM9IiRMSUJTIC1sc3VwYysrIgorK1sgLW4gIiRIQVZFX0xJQklCRVJUWSIgXSAmJiBMSUJTPSIkTElCUyAtbGliZXJ0eSIKKysKKyBJTlNUQUxMPSdpbnN0YWxsIC1jJworIGlxdW90ZT0nLWlxdW90ZSAnCisgaXF1b3RlZW5kPScnCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbHRyYWNlLzAuNS4zLzE4MC1saWJsdHJhY2UtZ2VuaW5kZXgucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbHRyYWNlLzAuNS4zLzE4MC1saWJsdHJhY2UtZ2VuaW5kZXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIxNjI5YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LjMvMTgwLWxpYmx0cmFjZS1nZW5pbmRleC5wYXRjaApAQCAtMCwwICsxLDEyIEBACitkaWZmIC1ydSBsdHJhY2UtMC41LjMub3JnL01ha2VmaWxlLmluIGx0cmFjZS0wLjUuMy9NYWtlZmlsZS5pbgorLS0tIGx0cmFjZS0wLjUuMy5vcmcvTWFrZWZpbGUuaW4JMjAxMS0wOC0yMSAxODo1NToxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBsdHJhY2UtMC41LjMvTWFrZWZpbGUuaW4JMjAxMS0wOC0yMSAxODo0MDo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zOSw3ICs0MCw3IEBACisgCQkkKENDKSAkKExERkxBR1MpICReICQoTElCUykgLW8gJEAKKyAKKyBsaWJsdHJhY2UuYTogCXN5c2RlcHMvc3lzZGVwLm8gJChPQkopCistCQkkKEFSKSByY3YgJEAgJF4KKysJCSQoQVIpIHJzY3YgJEAgJF4KKyAKKyAkKE9CSik6CQlzeXNkZXBzL3N5c2RlcC5vCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbHRyYWNlLzAuNS4zLzE5MC1hci1jb25maWd1cmFibGUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbHRyYWNlLzAuNS4zLzE5MC1hci1jb25maWd1cmFibGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg4NTZhMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LjMvMTkwLWFyLWNvbmZpZ3VyYWJsZS5wYXRjaApAQCAtMCwwICsxLDI0IEBACitkaWZmIC1ydSBsdHJhY2UtMC41LjMub3JnL01ha2VmaWxlLmluIGx0cmFjZS0wLjUuMy9NYWtlZmlsZS5pbgorLS0tIGx0cmFjZS0wLjUuMy5vcmcvTWFrZWZpbGUuaW4JMjAxMS0wOC0yMSAxODo1NToxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBsdHJhY2UtMC41LjMvTWFrZWZpbGUuaW4JMjAxMS0wOC0yMSAxODo0MDo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNSw2ICsxNSw3IEBACisgbWFuZGlyCQk9IEBtYW5kaXJACisgZG9jZGlyCQk9ICQocHJlZml4KS9zaGFyZS9kb2MvbHRyYWNlCisgCisrQVIJCT0JQEFSQAorIENDCQk9CUBDQ0AKKyBDRkxBR1MJCT0JLVdhbGwgQENGTEFHU0AKKyBDUFBGTEFHUwk9CS1pcXVvdGUgJChUT1BESVIpIC1pcXVvdGUgJChUT1BESVIpL3N5c2RlcHMvJChPUykgLURTWVNDT05GRElSPVwiJChzeXNjb25mZGlyKVwiIEBDUFBGTEFHU0AKKworZGlmZiAtcnUgbHRyYWNlLTAuNS4zLm9yZy9jb25maWd1cmUgbHRyYWNlLTAuNS4zL2NvbmZpZ3VyZQorLS0tIGx0cmFjZS0wLjUuMy5vcmcvY29uZmlndXJlCTIwMTEtMDgtMjEgMTg6NTU6MTUuMDAwMDAwMDAwICswMjAwCisrKysgbHRyYWNlLTAuNS4zL2NvbmZpZ3VyZQkyMDExLTA4LTIxIDE4OjU0OjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTExMyw3ICsxMTcsNyBAQAorICMKKyAjIE1ha2VmaWxlLmluIC0+IE1ha2VmaWxlCisgIworLXhfc3Vic3RfdmFycz0nUEFDS0FHRV9WRVJTSU9OIEhPU1QgSE9TVF9PUyBJTlNUQUxMIENDIENQUEZMQUdTIENGTEFHUyBMREZMQUdTIExJQlMgaXF1b3RlIGlxdW90ZWVuZCBwcmVmaXggc3lzY29uZmRpciBtYW5kaXIgZG9jZGlyJworK3hfc3Vic3RfdmFycz0nUEFDS0FHRV9WRVJTSU9OIEhPU1QgSE9TVF9PUyBJTlNUQUxMIEFSIENDIENQUEZMQUdTIENGTEFHUyBMREZMQUdTIExJQlMgaXF1b3RlIGlxdW90ZWVuZCBwcmVmaXggc3lzY29uZmRpciBtYW5kaXIgZG9jZGlyJworIAorIGZvciBpIGluICR4X3N1YnN0X3ZhcnMKKyBkbwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2x0cmFjZS8wLjUuMy8yMDAtY29uZmlndXJlLWhvc3Rvcy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LjMvMjAwLWNvbmZpZ3VyZS1ob3N0b3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY1NjNmNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LjMvMjAwLWNvbmZpZ3VyZS1ob3N0b3MucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorZGlmZiAtcnUgbHRyYWNlLTAuNS4zLm9yZy9jb25maWd1cmUgbHRyYWNlLTAuNS4zL2NvbmZpZ3VyZQorLS0tIGx0cmFjZS0wLjUuMy5vcmcvY29uZmlndXJlCTIwMTEtMDgtMjEgMTg6NTU6MTUuMDAwMDAwMDAwICswMjAwCisrKysgbHRyYWNlLTAuNS4zL2NvbmZpZ3VyZQkyMDExLTA4LTIxIDE4OjU0OjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTE1LDggKzE1LDEyIEBACisgZWNobyAkUEFDS0FHRV9WRVJTSU9OCisgCisgZWNobyAtbiAiY2hlY2tpbmcgSE9TVF9PUy4uLiAiCistSE9TVF9PUz0kKCB1bmFtZSAtcyApCistaWYgWyAiJEhPU1RfT1MiID0gIkxpbnV4IiBdCisraWYgWyAteiAiJEhPU1RfT1MiIF0gOyB0aGVuCisrICBIT1NUX09TPSQoIHVuYW1lIC1zICkKKytlbHNlCisrICBlY2hvIC1uICJ1c2luZyBwcmVzZXQ6ICIKKytmaQorK2lmIFsgIiRIT1NUX09TIiA9ICJMaW51eCIgLW8gIiRIT1NUX09TIiA9ICJsaW51eCIgXQorIHRoZW4KKyAgIEhPU1RfT1M9ImxpbnV4LWdudSIKKyBmaQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2x0cmFjZS8wLjUvMTAwLWZpeC1idWlsZC13aXRoLWV4b3RpYy1saW51eC1ob3N0LU9TLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2x0cmFjZS8wLjUvMTAwLWZpeC1idWlsZC13aXRoLWV4b3RpYy1saW51eC1ob3N0LU9TLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYTExN2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbHRyYWNlLzAuNS8xMDAtZml4LWJ1aWxkLXdpdGgtZXhvdGljLWxpbnV4LWhvc3QtT1MucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorZGlmZiAtZHVyTiBsdHJhY2UtMC40Lm9yaWcvY29uZmlndXJlIGx0cmFjZS0wLjQvY29uZmlndXJlCistLS0gbHRyYWNlLTAuNC5vcmlnL2NvbmZpZ3VyZQkyMDA4LTEwLTIzIDIzOjE5OjM4LjAwMDAwMDAwMCArMDIwMAorKysrIGx0cmFjZS0wLjQvY29uZmlndXJlCTIwMDgtMTAtMjMgMjM6MTk6MDYuMDAwMDAwMDAwICswMjAwCitAQCAtMTM5Miw2ICsxMzkyLDkgQEAKKyAKKyAKKyBIT1NUX09TPSIkaG9zdF9vcyIKKytjYXNlICIke0hPU1RfT1N9IiBpbgorKyAgbGludXgtKikgSE9TVF9PUz1saW51eC1nbnU7OworK2VzYWMKKyAKKyAKKyBhY19leHQ9YworZGlmZiAtZHVyTiBsdHJhY2UtMC40Lm9yaWcvY29uZmlndXJlLmFjIGx0cmFjZS0wLjQvY29uZmlndXJlLmFjCistLS0gbHRyYWNlLTAuNC5vcmlnL2NvbmZpZ3VyZS5hYwkyMDA4LTEwLTIzIDIzOjE5OjQzLjAwMDAwMDAwMCArMDIwMAorKysrIGx0cmFjZS0wLjQvY29uZmlndXJlLmFjCTIwMDgtMTAtMjMgMjM6MTg6NDQuMDAwMDAwMDAwICswMjAwCitAQCAtNyw2ICs3LDkgQEAKKyBkbmwgQ2hlY2sgaG9zdCBzeXN0ZW0gdHlwZQorIEFDX0NBTk9OSUNBTF9IT1NUCisgSE9TVF9PUz0iJGhvc3Rfb3MiCisrY2FzZSAiJHtIT1NUX09TfSIgaW4KKysgIGxpbnV4LSopIEhPU1RfT1M9bGludXgtZ251OzsKKytlc2FjCisgQUNfU1VCU1QoSE9TVF9PUykKKyAKKyBkbmwgQ2hlY2tzIGZvciBwcm9ncmFtcy4KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LzExMC1hbGxvdy1jcm9zcy1jb21waWxlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2x0cmFjZS8wLjUvMTEwLWFsbG93LWNyb3NzLWNvbXBpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkyNzNiNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LzExMC1hbGxvdy1jcm9zcy1jb21waWxlLnBhdGNoCkBAIC0wLDAgKzEsODkgQEAKK2RpZmYgLWR1ck4gbHRyYWNlLTAuNS5vcmlnL01ha2VmaWxlLmluIGx0cmFjZS0wLjUvTWFrZWZpbGUuaW4KKy0tLSBsdHJhY2UtMC41Lm9yaWcvTWFrZWZpbGUuaW4JMjAwNi0wMy0xNCAwMDoxMjowMS4wMDAwMDAwMDAgKzAxMDAKKysrKyBsdHJhY2UtMC41L01ha2VmaWxlLmluCTIwMDgtMTEtMDQgMTk6MjM6MDUuMDAwMDAwMDAwICswMTAwCitAQCAtMiw4ICsyLDE0IEBACisgIyBsdHJhY2UncyBNYWtlZmlsZS5pbgorICMKKyAKKy0jT1MJCTo9ICQoc2hlbGwgdW5hbWUgLXMpCisgT1MJCTo9IEBIT1NUX09TQAorK0FSQ0gJCTo9ICQoc2hlbGwgZWNobyAiQEhPU1RfQVJDSEAiIHxzZWQgLWUgcy9pLjg2L2kzODYvICAgICAgXAorKwkJCQkJCSAgIC1lIHMvc3VuNHUvc3BhcmM2NC8gIFwKKysJCQkJCQkgICAtZSBzL2FybS4qL2FybS8gICAgICBcCisrCQkJCQkJICAgLWUgcy9zYTExMC9hcm0vICAgICAgXAorKwkJCQkJCSAgIC1lIHMvcHBjNjQvcHBjLyAgICAgIFwKKysJCQkJCQkgICAtZSBzL3MzOTB4L3MzOTAvKQorK2V4cG9ydCBBUkNICisgCisgVE9QRElSCQk9ICQoc2hlbGwgcHdkKQorIAorQEAgLTIwLDEwICsyNiwxMCBAQAorIExJQlMJCT0JQExJQlNACisgCisgSU5TVEFMTAkJPQlASU5TVEFMTEAKKy1JTlNUQUxMX0ZJTEUJPQkkKElOU1RBTEwpIC1wICAgIC1vIHJvb3QgLWcgcm9vdCAgLW0gIDY0NAorLUlOU1RBTExfUFJPR1JBTQk9CSQoSU5TVEFMTCkgLXAgICAgLW8gcm9vdCAtZyByb290ICAtbSAgNzU1CistSU5TVEFMTF9TQ1JJUFQJPQkkKElOU1RBTEwpIC1wICAgIC1vIHJvb3QgLWcgcm9vdCAgLW0gIDc1NQorLUlOU1RBTExfRElSCT0JJChJTlNUQUxMKSAtcCAtZCAtbyByb290IC1nIHJvb3QgIC1tICA3NTUKKytJTlNUQUxMX0ZJTEUJPQkkKElOU1RBTEwpIC1wICAgIC1tICA2NDQKKytJTlNUQUxMX1BST0dSQU0JPQkkKElOU1RBTEwpIC1wICAgIC1tICA3NTUKKytJTlNUQUxMX1NDUklQVAk9CSQoSU5TVEFMTCkgLXAgICAgLW0gIDc1NQorK0lOU1RBTExfRElSCT0JJChJTlNUQUxMKSAtcCAtZCAtbSAgNzU1CisgCisgT0JKCT0JbHRyYWNlLm8gb3B0aW9ucy5vIGVsZi5vIG91dHB1dC5vIHJlYWRfY29uZmlnX2ZpbGUubwlcCisgCQlleGVjdXRlX3Byb2dyYW0ubyB3YWl0X2Zvcl9zb21ldGhpbmcubyBwcm9jZXNzX2V2ZW50Lm8JXAorZGlmZiAtZHVyTiBsdHJhY2UtMC41Lm9yaWcvY29uZmlndXJlIGx0cmFjZS0wLjUvY29uZmlndXJlCistLS0gbHRyYWNlLTAuNS5vcmlnL2NvbmZpZ3VyZQkyMDA4LTExLTA0IDE5OjIzOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGx0cmFjZS0wLjUvY29uZmlndXJlCTIwMDgtMTEtMDQgMTk6MjM6MDUuMDAwMDAwMDAwICswMTAwCitAQCAtMzExLDcgKzMxMSw3IEBACisgIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyAjZW5kaWYiCisgCistYWNfc3Vic3RfdmFycz0nU0hFTEwgUEFUSF9TRVBBUkFUT1IgUEFDS0FHRV9OQU1FIFBBQ0tBR0VfVEFSTkFNRSBQQUNLQUdFX1ZFUlNJT04gUEFDS0FHRV9TVFJJTkcgUEFDS0FHRV9CVUdSRVBPUlQgZXhlY19wcmVmaXggcHJlZml4IHByb2dyYW1fdHJhbnNmb3JtX25hbWUgYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgbG9jYWxzdGF0ZWRpciBsaWJkaXIgaW5jbHVkZWRpciBvbGRpbmNsdWRlZGlyIGluZm9kaXIgbWFuZGlyIGJ1aWxkX2FsaWFzIGhvc3RfYWxpYXMgdGFyZ2V0X2FsaWFzIERFRlMgRUNIT19DIEVDSE9fTiBFQ0hPX1QgTElCUyBidWlsZCBidWlsZF9jcHUgYnVpbGRfdmVuZG9yIGJ1aWxkX29zIGhvc3QgaG9zdF9jcHUgaG9zdF92ZW5kb3IgaG9zdF9vcyBIT1NUX09TIENDIENGTEFHUyBMREZMQUdTIENQUEZMQUdTIGFjX2N0X0NDIEVYRUVYVCBPQkpFWFQgSU5TVEFMTF9QUk9HUkFNIElOU1RBTExfU0NSSVBUIElOU1RBTExfREFUQSBDUFAgRUdSRVAgaXF1b3RlIGlxdW90ZWVuZCBMSUJPQkpTIExUTElCT0JKUycKKythY19zdWJzdF92YXJzPSdTSEVMTCBQQVRIX1NFUEFSQVRPUiBQQUNLQUdFX05BTUUgUEFDS0FHRV9UQVJOQU1FIFBBQ0tBR0VfVkVSU0lPTiBQQUNLQUdFX1NUUklORyBQQUNLQUdFX0JVR1JFUE9SVCBleGVjX3ByZWZpeCBwcmVmaXggcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBsb2NhbHN0YXRlZGlyIGxpYmRpciBpbmNsdWRlZGlyIG9sZGluY2x1ZGVkaXIgaW5mb2RpciBtYW5kaXIgYnVpbGRfYWxpYXMgaG9zdF9hbGlhcyB0YXJnZXRfYWxpYXMgREVGUyBFQ0hPX0MgRUNIT19OIEVDSE9fVCBMSUJTIGJ1aWxkIGJ1aWxkX2NwdSBidWlsZF92ZW5kb3IgYnVpbGRfb3MgaG9zdCBob3N0X2NwdSBob3N0X3ZlbmRvciBob3N0X29zIEhPU1RfQVJDSCBIT1NUX09TIENDIENGTEFHUyBMREZMQUdTIENQUEZMQUdTIGFjX2N0X0NDIEVYRUVYVCBPQkpFWFQgSU5TVEFMTF9QUk9HUkFNIElOU1RBTExfU0NSSVBUIElOU1RBTExfREFUQSBDUFAgRUdSRVAgaXF1b3RlIGlxdW90ZWVuZCBMSUJPQkpTIExUTElCT0JKUycKKyBhY19zdWJzdF9maWxlcz0nJworIAorICMgSW5pdGlhbGl6ZSBzb21lIHZhcmlhYmxlcyBzZXQgYnkgb3B0aW9ucy4KK0BAIC0xMzkwLDcgKzEzOTAsNyBAQAorIGhvc3RfdmVuZG9yPWBlY2hvICRhY19jdl9ob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDIvJ2AKKyBob3N0X29zPWBlY2hvICRhY19jdl9ob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKKyAKKy0KKytIT1NUX0FSQ0g9IiRob3N0X2NwdSIKKyBIT1NUX09TPSIkaG9zdF9vcyIKKyBjYXNlICIke0hPU1RfT1N9IiBpbgorICAgbGludXgtKikgSE9TVF9PUz1saW51eC1nbnU7OworQEAgLTQ4NDYsNiArNDg0Niw3IEBACisgcyxAaG9zdF9jcHVALCRob3N0X2NwdSw7dCB0CisgcyxAaG9zdF92ZW5kb3JALCRob3N0X3ZlbmRvciw7dCB0CisgcyxAaG9zdF9vc0AsJGhvc3Rfb3MsO3QgdAorK3MsQEhPU1RfQVJDSEAsJEhPU1RfQVJDSCw7dCB0CisgcyxASE9TVF9PU0AsJEhPU1RfT1MsO3QgdAorIHMsQENDQCwkQ0MsO3QgdAorIHMsQENGTEFHU0AsJENGTEFHUyw7dCB0CitkaWZmIC1kdXJOIGx0cmFjZS0wLjUub3JpZy9jb25maWd1cmUuYWMgbHRyYWNlLTAuNS9jb25maWd1cmUuYWMKKy0tLSBsdHJhY2UtMC41Lm9yaWcvY29uZmlndXJlLmFjCTIwMDgtMTEtMDQgMTk6MjM6MDAuMDAwMDAwMDAwICswMTAwCisrKysgbHRyYWNlLTAuNS9jb25maWd1cmUuYWMJMjAwOC0xMS0wNCAxOToyMzowNS4wMDAwMDAwMDAgKzAxMDAKK0BAIC02LDEwICs2LDEyIEBACisgCisgZG5sIENoZWNrIGhvc3Qgc3lzdGVtIHR5cGUKKyBBQ19DQU5PTklDQUxfSE9TVAorK0hPU1RfQVJDSD0iJGhvc3RfY3B1IgorIEhPU1RfT1M9IiRob3N0X29zIgorIGNhc2UgIiR7SE9TVF9PU30iIGluCisgICBsaW51eC0qKSBIT1NUX09TPWxpbnV4LWdudTs7CisgZXNhYworK0FDX1NVQlNUKEhPU1RfQVJDSCkKKyBBQ19TVUJTVChIT1NUX09TKQorIAorIGRubCBDaGVja3MgZm9yIHByb2dyYW1zLgorZGlmZiAtZHVyTiBsdHJhY2UtMC41Lm9yaWcvc3lzZGVwcy9saW51eC1nbnUvTWFrZWZpbGUgbHRyYWNlLTAuNS9zeXNkZXBzL2xpbnV4LWdudS9NYWtlZmlsZQorLS0tIGx0cmFjZS0wLjUub3JpZy9zeXNkZXBzL2xpbnV4LWdudS9NYWtlZmlsZQkyMDA2LTAyLTIwIDIyOjQ0OjQ1LjAwMDAwMDAwMCArMDEwMAorKysrIGx0cmFjZS0wLjUvc3lzZGVwcy9saW51eC1nbnUvTWFrZWZpbGUJMjAwOC0xMS0wNCAxOToyMzowNS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xLDYgKzEsMyBAQAorLUFSQ0gJCTo9CSQoc2hlbGwgdW5hbWUgLW0gfCBzZWQgLWUgcy9pLjg2L2kzODYvIC1lIHMvc3VuNHUvc3BhcmM2NC8gXAorLQkJCS1lIHMvYXJtLiovYXJtLyAtZSBzL3NhMTEwL2FybS8gLWUgcy9wcGM2NC9wcGMvIC1lIHMvczM5MHgvczM5MC8pCistCisgQ1BQRkxBR1MJKz0JLUkkKFRPUERJUikvc3lzZGVwcy9saW51eC1nbnUvJChBUkNIKQorIAorIE9CSgkJPQl0cmFjZS5vIHByb2MubyBicmVha3BvaW50Lm8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LzEyMC1hbHBoYS1zdXBwb3J0LnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL2x0cmFjZS8wLjUvMTIwLWFscGhhLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA1OTRkNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LzEyMC1hbHBoYS1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKK2RpZmYgLWR1ck4gbHRyYWNlLTAuNC5vcmlnL01ha2VmaWxlLmluIGx0cmFjZS0wLjQvTWFrZWZpbGUuaW4KKy0tLSBsdHJhY2UtMC40Lm9yaWcvTWFrZWZpbGUuaW4JMjAwOC0xMC0yNiAxNTozNDoyMS4wMDAwMDAwMDAgKzAxMDAKKysrKyBsdHJhY2UtMC40L01ha2VmaWxlLmluCTIwMDgtMTAtMjYgMTU6Mzc6NDAuMDAwMDAwMDAwICswMTAwCitAQCAtNSw2ICs1LDcgQEAKKyBPUwkJOj0gQEhPU1RfT1NACisgQVJDSAkJOj0gJChzaGVsbCBlY2hvICJASE9TVF9BUkNIQCIgfHNlZCAtZSBzL2kuODYvaTM4Ni8gICAgICBcCisgCQkJCQkJICAgLWUgcy9zdW40dS9zcGFyYzY0LyAgXAorKwkJCQkJCSAgIC1lIHMvYWxwaGEuKi9hbHBoYS8gIFwKKyAJCQkJCQkgICAtZSBzL2FybS4qL2FybS8gICAgICBcCisgCQkJCQkJICAgLWUgcy9zYTExMC9hcm0vICAgICAgXAorIAkJCQkJCSAgIC1lIHMvcHBjNjQvcHBjLyAgICAgIFwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9sdHJhY2UvMC41LzEzMC1maXhlcy1ieS1kZWJpYW4ucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbHRyYWNlLzAuNS8xMzAtZml4ZXMtYnktZGViaWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZWJkYWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbHRyYWNlLzAuNS8xMzAtZml4ZXMtYnktZGViaWFuLnBhdGNoCkBAIC0wLDAgKzEsODEyIEBACitUaGlzIHBhdGNoIHdhcyB2YW1waXJpc2VkIGZyb20gdGhlIDAuNS0zLjEgRGViaWFuLXBhY2thZ2VkIHZlcnNpb24gb2YgbHRyYWNlLAorYW5kIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZml4ZXMgKGV4ZXJwdCBmcm9tIHRoZSBEZWJpYW4gY2hhbmdlbG9nKS4gTW9yZW92ZXIsCit5b3Ugd2lsbCBhbHNvIGZpbmQgYW4gZXhlcnB0IG9mIHRoZSBEZWJpYW4gY29weXJpZ2h0IGZpbGUgd2l0aCBwcm9wZXIKK2F0dHJpYnV0aW9uLgorCis9PT09PT09PT09PT09PT09IERlYmlhbiBjaGFuZ2Vsb2cgZXhlcnB0ID09PT09PT09PT09PT09PT0KK2x0cmFjZSAoMC41LTMuMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBOb24tbWFpbnRhaW5lciB1cGxvYWQuCisgICogQmlnIHRoYW5rcyBmb3IgQW5kZXJzb24gTGl6YXJkbyBmb3IgcHJvdmlkaW5nIHBhdGNoZXMhCisgICogQWRkIGdlbmVyaWMgc3VwcG9ydCBmb3IgYXJtIHRhcmdldHMsIENsb3NlczogIzE3NjQxMworICAqIFNhdmUgZnVudGlvbiBhcmd1bWVudHMgb24gYXJtLCBDbG9zZXM6ICM0NjI1MzAKKyAgKiBBZGQgdGh1bWIgaW5zdHJ1Y3Rpb24gc3VwcG9ydCwgQ2xvc2VzOiAjNDYyNTMxCisgICogQWRkIGJhc2ljIGFybS9lYWJpIHN1cHBvcnQsIENsb3NlczogIzQ1MDkzMQorICAqIGZpeCBleGVjKCkgdGVzdGNhc2UgY2xlYW51cCwgQ2xvc2VzOiAjNDYyNTMyCisgICogZml4IG1lbW9yeSBjb3JydXB0aW9uIGluIGNsb25lKCkgdGVzdCwgQ2xvc2VzOiAjNDYyNTMzCisgICogZml4IHRyYWNpbmcgY2hpbGQgd2l0aCAiLXAiIG9wdGlvbiwgQ2xvc2VzOiAjNDYyNTM1CisgICogVXBkYXRlIHN0YW5kYXJkLCBubyBjaGFuZ2VzCisKKyAtLSBSaWt1IFZvaXBpbyA8cmlrdS52b2lwaW9AaWtpLmZpPiAgVHVlLCAyOSBKYW4gMjAwOCAwMDoyNjo1MCArMDIwMAorCitsdHJhY2UgKDAuNS0zKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIFJlYWxseSBmaXggY29tcGlsYXRpb24gcHJvYmxlbXMgaW4gcHBjICghKQorCisgLS0gSnVhbiBDZXNwZWRlcyA8Y2VzcGVkZXNAZGViaWFuLm9yZz4gIEZyaSwgMzEgQXVnIDIwMDcgMTk6MDQ6MDMgKzAyMDAKKworbHRyYWNlICgwLjUtMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBGaXhlZCBjb21waWxhdGlvbiBpc3N1ZSBpbiBwcGMKKworIC0tIEp1YW4gQ2VzcGVkZXMgPGNlc3BlZGVzQGRlYmlhbi5vcmc+ICBGcmksIDMxIEF1ZyAyMDA3IDEzOjUzOjI3ICswMjAwCisKK2x0cmFjZSAoMC41LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIHZlcnNpb24KKyAgKiBSZW1vdmUgc29tZSB1bm5lZWRlZCBmaWxlcyBpbiAvdXNyL3NoYXJlL2RvYyAoQ2hhbmdlTG9nLCBDT1BZSU5HLi4uKQorICAqIEZpeCBzZXZlcmFsIHR5cG9zIChjbG9zZXM6IEJ1ZyMzNzI5MjgpCisgICogQWRkZWQgbW9yZSBzeXN0ZW0gY2FsbHMgdG8gbHRyYWNlLmNvbmYKKworIC0tIEp1YW4gQ2VzcGVkZXMgPGNlc3BlZGVzQGRlYmlhbi5vcmc+ICBUaHUsIDMwIEF1ZyAyMDA3IDE0OjU0OjQ0ICswMjAwCis9PT09PT09PT09PT09PSBFbmQgRGViaWFuIGNoYW5nZWxvZyBleGVycHQgPT09PT09PT09PT09PT0KKworPT09PT09PT09PT09PT09PSBEZWJpYW4gY29weXJpZ2h0IGV4ZXJwdCA9PT09PT09PT09PT09PT09CitDb3B5cmlnaHRzCistLS0tLS0tLS0tCitDb3B5cmlnaHQgKEMpIDE5OTctMjAwNyBKdWFuIENlc3BlZGVzIDxjZXNwZWRlc0BkZWJpYW4ub3JnPgorCitBUk1MaW51eCBwb3J0OiBDb3B5cmlnaHQgKEMpIDE5OTggUGF0IEJlaXJuZSA8cGJlaXJuZUBob21lLmNvbT4KK202OGsgcG9ydDogQ29weXJpZ2h0IChDKSAxOTk4IFJvbWFuIEhvZGVrIDxSb21hbi5Ib2Rla0BpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KK01pc2MgZml4ZXM6IENvcHlyaWdodCAoQykgMTk5OSBNb3J0ZW4gRXJpa3NlbiA8bW9ydGVuZUBzaW0ubm8+CitzMzkwIHBvcnQ6IENvcHlyaWdodCAoQykgMjAwMSBJQk0gUG91Z2hrZWVwc2llLCBJQk0gQ29yb3JhdGlvbiA8c2xhdGVAdXMuaWJtLmNvbT4KK0VMRiBoYWNraW5nOiBDb3B5cmlnaHQgKEMpIDE5OTkgU2lsdmlvIENlc2FyZSA8c2lsdmlvQGJpZy5uZXQuYXU+CitQb3dlclBDIHBvcnQ6IENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEFudG9uIEJsYW5jaGFyZCA8YW50b25Ac2FtYmEub3JnPgorU1BBUkMgcG9ydDogQ29weXJpZ2h0IChDKSAxOTk5IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+CisKK0F1dG9jb25mIHN0dWZmOiBDb3B5cmlnaHQgMTk5Mi0xOTk2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgoraW5zdGFsbC1zaDogQ29weXJpZ2h0IDE5OTEgYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kKK0MrKyBkZW1hbmdsZTogQ29weXJpZ2h0IDE5ODktMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKz09PT09PT09PT09PT09IEVuZCBEZWJpYW4gY29weXJpZ2h0IGV4ZXJwdCA9PT09PT09PT09PT09PQorCitkaWZmIC1kdXJOIGx0cmFjZS0wLjUub3JpZy9icmVha3BvaW50cy5jIGx0cmFjZS0wLjUvYnJlYWtwb2ludHMuYworLS0tIGx0cmFjZS0wLjUub3JpZy9icmVha3BvaW50cy5jCTIwMDYtMDYtMTQgMDY6NTU6MjEuMDAwMDAwMDAwICswMjAwCisrKysgbHRyYWNlLTAuNS9icmVha3BvaW50cy5jCTIwMDgtMTEtMDQgMTk6MjU6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtNTMsNiArNTMsMTAgQEAKKyAJCWlmIChsaWJzeW0pCisgCQkJbGlic3ltLT5icmtwbnQgPSBzYnA7CisgCX0KKysjaWZkZWYgX19hcm1fXworKwlzYnAtPnRodW1iX21vZGUgPSBwcm9jLT50aHVtYl9tb2RlOworKwlwcm9jLT50aHVtYl9tb2RlID0gMDsKKysjZW5kaWYKKyAJc2JwLT5lbmFibGVkKys7CisgCWlmIChzYnAtPmVuYWJsZWQgPT0gMSAmJiBwcm9jLT5waWQpCisgCQllbmFibGVfYnJlYWtwb2ludChwcm9jLT5waWQsIHNicCk7CitkaWZmIC1kdXJOIGx0cmFjZS0wLjUub3JpZy9lbGYuYyBsdHJhY2UtMC41L2VsZi5jCistLS0gbHRyYWNlLTAuNS5vcmlnL2VsZi5jCTIwMDYtMDYtMTQgMDY6NTU6MjEuMDAwMDAwMDAwICswMjAwCisrKysgbHRyYWNlLTAuNS9lbGYuYwkyMDA4LTExLTA0IDE5OjI1OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTQ2NCw4ICs0NjQsNyBAQAorIAkJCWlmIChzdHJjbXAoeHB0ci0+bmFtZSwgUExUc19pbml0aWFsaXplZF9ieV9oZXJlKSA9PSAwKSB7CisgCQkJCWlmIChsdGUtPmVoZHIuZV9lbnRyeSkgeworIAkJCQkJYWRkX2xpYnJhcnlfc3ltYm9sICgKKy0JCQkJCQllbGZfcGx0MmFkZHIgKGx0ZSwgKHZvaWQqKShsb25nKQorLQkJCQkJCQlsdGUtPmVoZHIuZV9lbnRyeSksCisrCQkJCQkJb3BkMmFkZHIgKGx0ZSwgbHRlLT5laGRyLmVfZW50cnkpLAorIAkJCQkJCVBMVHNfaW5pdGlhbGl6ZWRfYnlfaGVyZSwKKyAJCQkJCQlsaWJfdGFpbCwgMSwgMCk7CisgCQkJCQlmcHJpbnRmIChzdGRlcnIsICJXQVJOSU5HOiBVc2luZyBlX2VudCIKK2RpZmYgLWR1ck4gbHRyYWNlLTAuNS5vcmlnL2V0Yy9sdHJhY2UuY29uZiBsdHJhY2UtMC41L2V0Yy9sdHJhY2UuY29uZgorLS0tIGx0cmFjZS0wLjUub3JpZy9ldGMvbHRyYWNlLmNvbmYJMjAwNi0wMi0yMCAyMjo1NTo0Ny4wMDAwMDAwMDAgKzAxMDAKKysrKyBsdHJhY2UtMC41L2V0Yy9sdHJhY2UuY29uZgkyMDA4LTExLTA0IDE5OjI1OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTQ0NCwzICs0NDQsODEgQEAKKyBpbnQgICBTWVNfcmVtb3ZleGF0dHIoc3RyaW5nLHN0cmluZyk7CisgaW50ICAgU1lTX2xyZW1vdmV4YXR0cihzdHJpbmcsc3RyaW5nKTsKKyBpbnQgICBTWVNfZnJlbW92ZXhhdHRyKGludCxzdHJpbmcpOworK2ludCAgIFNZU19jaGRpcihzdHJpbmcpOworK2ludCAgIFNZU19mY2hkaXIoaW50KTsKKytpbnQgICBTWVNfY2htb2Qoc3RyaW5nLG9jdGFsKTsKKytpbnQgICBTWVNfZmNobW9kKGludCxvY3RhbCk7CisraW50ICAgU1lTX2Nob3duKHN0cmluZyxpbnQsaW50KTsKKytpbnQgICBTWVNfZmNob3duKGludCxpbnQsaW50KTsKKytpbnQgICBTWVNfbGNob3duKHN0cmluZyxpbnQsaW50KTsKKytpbnQgICBTWVNfY2hyb290KHN0cmluZyk7CisraW50ICAgU1lTX2R1cChpbnQpOworK2ludCAgIFNZU19kdXAyKGludCxpbnQpOworK2ludCAgIFNZU19mZGF0YXN5bmMoaW50KTsKKytpbnQgICBTWVNfZnN5bmMoaW50KTsKKytpbnQgICBTWVNfZ2V0cHJpb3JpdHkoaW50LGludCk7CisraW50ICAgU1lTX3NldHByaW9yaXR5KGludCxpbnQsaW50KTsKKytpbnQgICBTWVNfZ2V0cmxpbWl0KGludCxhZGRyKTsKKytpbnQgICBTWVNfc2V0cmxpbWl0KGludCxhZGRyKTsKKytpbnQgICBTWVNfZ2V0dGltZW9mZGF5KGFkZHIsYWRkcik7CisraW50ICAgU1lTX3NldHRpbWVvZmRheShhZGRyLGFkZHIpOworK2ludCAgIFNZU19zZXRmc2dpZChpbnQpOworK2ludCAgIFNZU19zZXRmc3VpZChpbnQpOworK2ludCAgIFNZU19nZXR1aWQodm9pZCk7CisraW50ICAgU1lTX3NldHVpZChpbnQpOworK2ludCAgIFNZU19nZXRnaWQodm9pZCk7CisraW50ICAgU1lTX3NldGdpZChpbnQpOworK2ludCAgIFNZU19nZXRzaWQoaW50KTsKKytpbnQgICBTWVNfc2V0c2lkKGludCk7CisraW50ICAgU1lTX3NldHJldWlkKGludCxpbnQpOworK2ludCAgIFNZU19zZXRyZWdpZChpbnQsaW50KTsKKytpbnQgICBTWVNfZ2V0ZXVpZCh2b2lkKTsKKytpbnQgICBTWVNfZ2V0ZWdpZCh2b2lkKTsKKytpbnQgICBTWVNfc2V0cGdpZChpbnQsaW50KTsKKytpbnQgICBTWVNfZ2V0cmVzdWlkKGFkZHIsYWRkcixhZGRyKTsKKytpbnQgICBTWVNfc2V0cmVzdWlkKGludCxpbnQsaW50KTsKKytpbnQgICBTWVNfZ2V0cmVzZ2lkKGFkZHIsYWRkcixhZGRyKTsKKytpbnQgICBTWVNfc2V0cmVzZ2lkKGludCxpbnQsaW50KTsKKytpbnQgICBTWVNfa2lsbChpbnQsaW50KTsKKytpbnQgICBTWVNfbGluayhzdHJpbmcsc3RyaW5nKTsKKytpbnQgICBTWVNfbWFkdmlzZShhZGRyLHVsb25nLGludCk7CisraW50ICAgU1lTX21rZGlyKHN0cmluZyxvY3RhbCk7CisraW50ICAgU1lTX21rbm9kKHN0cmluZyxvY3RhbCxpbnQpOworK2ludCAgIFNZU19tc3luYyhhZGRyLHVsb25nLGludCk7CisraW50ICAgU1lTX25pY2UoaW50KTsKKytpbnQgICBTWVNfcG9sbChhZGRyLHVpbnQsaW50KTsKKytpbnQgICBTWVNfcmVhZGRpcih1aW50LGFkZHIsdWludCk7CisraW50ICAgU1lTX3JlYWRsaW5rKHN0cmluZyxzdHJpbmcsdWxvbmcpOworK2ludCAgIFNZU19yZWJvb3QoaW50LGludCxpbnQsYWRkcik7CisraW50ICAgU1lTX3JlbmFtZShzdHJpbmcsc3RyaW5nKTsKKytpbnQgICBTWVNfcm1kaXIoc3RyaW5nKTsKKytpbnQgICBTWVNfc2lnYWx0c3RhY2soYWRkcixhZGRyKTsKKytpbnQgICBTWVNfc3RhdGZzKHN0cmluZyxhZGRyKTsKKytpbnQgICBTWVNfZnN0YXRmcyhpbnQsYWRkcik7CisraW50ICAgU1lTX2ZzdGF0KGludCxhZGRyKTsKKytpbnQgICBTWVNfbHN0YXQoc3RyaW5nLGFkZHIpOworK2ludCAgIFNZU19zdGltZShhZGRyKTsKKytpbnQgICBTWVNfc3ltbGluayhzdHJpbmcsIHN0cmluZyk7CisraW50ICAgU1lTX3N5c2luZm8oYWRkcik7CisraW50ICAgU1lTX3N5c2xvZyhpbnQsc3RyaW5nLGludCk7CisraW50ICAgU1lTX3RydW5jYXRlKHN0cmluZyxsb25nKTsKKytpbnQgICBTWVNfZnRydW5jYXRlKGludCxsb25nKTsKKytpbnQgICBTWVNfbW91bnQoc3RyaW5nLHN0cmluZyxzdHJpbmcsdWxvbmcsYWRkcik7CisraW50ICAgU1lTX3Vtb3VudChzdHJpbmcpOworK2ludCAgIFNZU191bW91bnQyKHN0cmluZyxpbnQpOworK2ludCAgIFNZU191bmxpbmsoc3RyaW5nKTsKKytpbnQgICBTWVNfdXRpbWUoc3RyaW5nLGFkZHIpOworK2xvbmcgIFNZU19sc2VlayhpbnQsbG9uZyxpbnQpOworK2FkZHIgIFNZU19zaWduYWwoaW50LGFkZHIpOworK2ludCAgIFNZU19zaWdhY3Rpb24oaW50LGFkZHIsYWRkcik7CisraW50ICAgU1lTX3BhdXNlKHZvaWQpOworK2ludCAgIFNZU19zaWdwZW5kaW5nKGFkZHIpOworK2ludCAgIFNZU19zaWdwcm9jbWFzayhpbnQsYWRkcixhZGRyKTsKKytpbnQgICBTWVNfc2lncXVldWUoaW50LGludCxhZGRyKTsKKytpbnQgICBTWVNfc2lnc3VzcGVuZChhZGRyKTsKKytpbnQgICBTWVNfd2FpdChhZGRyKTsKKytpbnQgICBTWVNfd2FpdHBpZChpbnQsYWRkcixpbnQpOworK3Vsb25nIFNZU19yZWFkdihpbnQsYWRkcixpbnQpOworK3Vsb25nIFNZU193cml0ZXYoaW50LGFkZHIsaW50KTsKKytpbnQgICBTWVNfbXByb3RlY3QoYWRkcixpbnQsaW50KTsKKytpbnQgICBTWVNfYWNjZXNzKHN0cmluZyxvY3RhbCk7CitkaWZmIC1kdXJOIGx0cmFjZS0wLjUub3JpZy9sdHJhY2UuMSBsdHJhY2UtMC41L2x0cmFjZS4xCistLS0gbHRyYWNlLTAuNS5vcmlnL2x0cmFjZS4xCTIwMDYtMDYtMTYgMDM6MTU6MTguMDAwMDAwMDAwICswMjAwCisrKysgbHRyYWNlLTAuNS9sdHJhY2UuMQkyMDA4LTExLTA0IDE5OjI1OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTMwLDcgKzMwLDcgQEAKKyAuVFAKKyAuSSBcLUMsIFwtXC1kZW1hbmdsZQorIERlY29kZSAoZGVtYW5nbGUpIGxvdy1sZXZlbCBzeW1ib2wgbmFtZXMgaW50byB1c2VyLWxldmVsIG5hbWVzLgorLUJlc2lkZXMgcmVtb3ZpbmcgYW55IGluaXRpYWwgdW5kZXJzY29yZSBwcmVwZW5kZWQgYnkgdGhlIHN5c3RlbSwKKytCZXNpZGVzIHJlbW92aW5nIGFueSBpbml0aWFsIHVuZGVyc2NvcmUgcHJlZml4IHVzZWQgYnkgdGhlIHN5c3RlbSwKKyB0aGlzIG1ha2VzIEMrKyBmdW5jdGlvbiBuYW1lcyByZWFkYWJsZS4KKyAuVFAKKyAuSSBcLWQsIFwtXC1kZWJ1ZworZGlmZiAtZHVyTiBsdHJhY2UtMC41Lm9yaWcvbHRyYWNlLmMgbHRyYWNlLTAuNS9sdHJhY2UuYworLS0tIGx0cmFjZS0wLjUub3JpZy9sdHJhY2UuYwkyMDA2LTAyLTIwIDIyOjQ4OjA3LjAwMDAwMDAwMCArMDEwMAorKysrIGx0cmFjZS0wLjUvbHRyYWNlLmMJMjAwOC0xMS0wNCAxOToyNTo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC01NCw2ICs1NCw5IEBACisgeworIAlleGl0aW5nID0gMTsKKyAJZGVidWcoMSwgIlJlY2VpdmVkIGludGVycnVwdCBzaWduYWw7IGV4aXRpbmcuLi4iKTsKKysJaWYgKG9wdF9vKSB7CisrCQlmY2xvc2Uob3V0cHV0KTsKKysJfQorIAlzaWduYWwoU0lHSU5ULCBTSUdfSUdOKTsKKyAJc2lnbmFsKFNJR1RFUk0sIFNJR19JR04pOworIAlzaWduYWwoU0lHQUxSTSwgc2lnbmFsX2FsYXJtKTsKK0BAIC03NCw2ICs3Nyw5IEBACisgCWlmIChvcHRfYykgeworIAkJc2hvd19zdW1tYXJ5KCk7CisgCX0KKysJaWYgKG9wdF9vKSB7CisrCQlmY2xvc2Uob3V0cHV0KTsKKysJfQorIH0KKyAKKyBzdGF0aWMgdm9pZCBndWVzc19jb2xzKHZvaWQpCitkaWZmIC1kdXJOIGx0cmFjZS0wLjUub3JpZy9sdHJhY2UuaCBsdHJhY2UtMC41L2x0cmFjZS5oCistLS0gbHRyYWNlLTAuNS5vcmlnL2x0cmFjZS5oCTIwMDYtMDYtMTQgMDY6NTU6MjEuMDAwMDAwMDAwICswMjAwCisrKysgbHRyYWNlLTAuNS9sdHJhY2UuaAkyMDA4LTExLTA0IDE5OjI1OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTI2LDYgKzI2LDkgQEAKKyAJdW5zaWduZWQgY2hhciBvcmlnX3ZhbHVlW0JSRUFLUE9JTlRfTEVOR1RIXTsKKyAJaW50IGVuYWJsZWQ7CisgCXN0cnVjdCBsaWJyYXJ5X3N5bWJvbCAqbGlic3ltOworKyNpZmRlZiBfX2FybV9fCisrCWludCB0aHVtYl9tb2RlOworKyNlbmRpZgorIH07CisgCisgZW51bSBhcmdfdHlwZSB7CitAQCAtMTE5LDYgKzEyMiw5IEBACisgCXZvaWQgKmFyY2hfcHRyOworIAlzaG9ydCBlX21hY2hpbmU7CisgCXNob3J0IG5lZWRfdG9fcmVpbml0aWFsaXplX2JyZWFrcG9pbnRzOworKyNpZmRlZiBfX2FybV9fCisrCWludCB0aHVtYl9tb2RlOyAvKiBBUk0gZXhlY3V0aW9uIG1vZGU6IDA6IEFSTSBtb2RlLCAxOiBUaHVtYiBtb2RlICovCisrI2VuZGlmCisgCisgCS8qIG91dHB1dDogKi8KKyAJZW51bSB0b2YgdHlwZV9iZWluZ19kaXNwbGF5ZWQ7CitAQCAtMTM2LDEyICsxNDIsMTQgQEAKKyAJCUxUX0VWX0VYSVRfU0lHTkFMLAorIAkJTFRfRVZfU1lTQ0FMTCwKKyAJCUxUX0VWX1NZU1JFVCwKKysJCUxUX0VWX0FSQ0hfU1lTQ0FMTCwKKysJCUxUX0VWX0FSQ0hfU1lTUkVULAorIAkJTFRfRVZfQlJFQUtQT0lOVAorIAl9IHRoaW5nOworIAl1bmlvbiB7CisgCQlpbnQgcmV0X3ZhbDsJLyogX0VWX0VYSVQgKi8KKyAJCWludCBzaWdudW07CS8qIF9FVl9TSUdOQUwsIF9FVl9FWElUX1NJR05BTCAqLworLQkJaW50IHN5c251bTsJLyogX0VWX1NZU0NBTEwsIF9FVl9TWVNSRVQgKi8KKysJCWludCBzeXNudW07CS8qIF9FVl9TWVNDQUxMLCBfRVZfU1lTUkVULCBfRVZfQVJDSF9TWVNDQUxMLCBfRVZfQVJDSF9TWVNSRVQgKi8KKyAJCXZvaWQgKmJya19hZGRyOwkvKiBfRVZfQlJFQUtQT0lOVCAqLworIAl9IGVfdW47CisgfTsKK2RpZmYgLWR1ck4gbHRyYWNlLTAuNS5vcmlnL29wdGlvbnMuYyBsdHJhY2UtMC41L29wdGlvbnMuYworLS0tIGx0cmFjZS0wLjUub3JpZy9vcHRpb25zLmMJMjAwNi0wNC0yNCAyMjowNjoyMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBsdHJhY2UtMC41L29wdGlvbnMuYwkyMDA4LTExLTA0IDE5OjI1OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTQyLDYgKzQyLDcgQEAKKyAjZW5kaWYKKyBpbnQgb3B0X24gPSAwOwkJCS8qIGluZGVudCB0cmFjZSBvdXRwdXQgYWNjb3JkaW5nIHRvIHByb2dyYW0gZmxvdyAqLworIGludCBvcHRfVCA9IDA7CQkJLyogc2hvdyB0aGUgdGltZSBzcGVudCBpbnNpZGUgZWFjaCBjYWxsICovCisraW50IG9wdF9vID0gMDsJCQkvKiBvdXRwdXQgdG8gYSBzcGVjaWZpYyBmaWxlICovCisgCisgLyogTGlzdCBvZiBwaWRzIGdpdmVuIHRvIG9wdGlvbiAtcDogKi8KKyBzdHJ1Y3Qgb3B0X3BfdCAqb3B0X3AgPSBOVUxMOwkvKiBhdHRhY2ggdG8gcHJvY2VzcyB3aXRoIGEgZ2l2ZW4gcGlkICovCitAQCAtMjc0LDYgKzI3NSw3IEBACisgCQkJb3B0X24gPSBhdG9pKG9wdGFyZyk7CisgCQkJYnJlYWs7CisgCQljYXNlICdvJzoKKysJCQlvcHRfbysrOworIAkJCW91dHB1dCA9IGZvcGVuKG9wdGFyZywgInciKTsKKyAJCQlpZiAoIW91dHB1dCkgeworIAkJCQlmcHJpbnRmKHN0ZGVyciwKK2RpZmYgLWR1ck4gbHRyYWNlLTAuNS5vcmlnL29wdGlvbnMuaCBsdHJhY2UtMC41L29wdGlvbnMuaAorLS0tIGx0cmFjZS0wLjUub3JpZy9vcHRpb25zLmgJMjAwNi0wMy0xMyAxODo0MzoxMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBsdHJhY2UtMC41L29wdGlvbnMuaAkyMDA4LTExLTA0IDE5OjI1OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTIwLDYgKzIwLDcgQEAKKyBleHRlcm4gaW50IG9wdF9DOwkJLyogRGVtYW5nbGVsb3ctbGV2ZWwgc3ltYm9sIG5hbWVzIGludG8gdXNlci1sZXZlbCBuYW1lcyAqLworIGV4dGVybiBpbnQgb3B0X247CQkvKiBpbmRlbnQgdHJhY2Ugb3V0cHV0IGFjY29yZGluZyB0byBwcm9ncmFtIGZsb3cgKi8KKyBleHRlcm4gaW50IG9wdF9UOwkJLyogc2hvdyB0aGUgdGltZSBzcGVudCBpbnNpZGUgZWFjaCBjYWxsICovCisrZXh0ZXJuIGludCBvcHRfbzsJCS8qIG91dHB1dCB0byBhIHNwZWNpZmljIGZpbGUgKi8KKyAKKyBzdHJ1Y3Qgb3B0X3BfdCB7CisgCXBpZF90IHBpZDsKK2RpZmYgLWR1ck4gbHRyYWNlLTAuNS5vcmlnL3Byb2Nlc3NfZXZlbnQuYyBsdHJhY2UtMC41L3Byb2Nlc3NfZXZlbnQuYworLS0tIGx0cmFjZS0wLjUub3JpZy9wcm9jZXNzX2V2ZW50LmMJMjAwNi0wNi0xNCAwNjo1NToyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBsdHJhY2UtMC41L3Byb2Nlc3NfZXZlbnQuYwkyMDA4LTExLTA0IDE5OjI1OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTI0LDcgKzI0LDkgQEAKKyBzdGF0aWMgdm9pZCBwcm9jZXNzX2V4aXQoc3RydWN0IGV2ZW50ICpldmVudCk7Cisgc3RhdGljIHZvaWQgcHJvY2Vzc19leGl0X3NpZ25hbChzdHJ1Y3QgZXZlbnQgKmV2ZW50KTsKKyBzdGF0aWMgdm9pZCBwcm9jZXNzX3N5c2NhbGwoc3RydWN0IGV2ZW50ICpldmVudCk7Cisrc3RhdGljIHZvaWQgcHJvY2Vzc19hcmNoX3N5c2NhbGwoc3RydWN0IGV2ZW50ICpldmVudCk7Cisgc3RhdGljIHZvaWQgcHJvY2Vzc19zeXNyZXQoc3RydWN0IGV2ZW50ICpldmVudCk7Cisrc3RhdGljIHZvaWQgcHJvY2Vzc19hcmNoX3N5c3JldChzdHJ1Y3QgZXZlbnQgKmV2ZW50KTsKKyBzdGF0aWMgdm9pZCBwcm9jZXNzX2JyZWFrcG9pbnQoc3RydWN0IGV2ZW50ICpldmVudCk7Cisgc3RhdGljIHZvaWQgcmVtb3ZlX3Byb2Moc3RydWN0IHByb2Nlc3MgKnByb2MpOworIAorQEAgLTgxLDYgKzgzLDI0IEBACisgCX0KKyB9CisgCisrc3RhdGljIGNoYXIgKmFyY2hfc3lzbmFtZShzdHJ1Y3QgcHJvY2VzcyAqcHJvYywgaW50IHN5c251bSkKKyt7CisrCXN0YXRpYyBjaGFyIHJlc3VsdFsxMjhdOworKwlzdGF0aWMgY2hhciAqYXJjaF9zeXNjYWxlbnRbXSA9IHsKKysjaW5jbHVkZSAiYXJjaF9zeXNjYWxsZW50LmgiCisrCX07CisrCWludCBuc3lzY2FscyA9IHNpemVvZiBhcmNoX3N5c2NhbGVudCAvIHNpemVvZiBhcmNoX3N5c2NhbGVudFswXTsKKysKKysJaWYgKHN5c251bSA8IDAgfHwgc3lzbnVtID49IG5zeXNjYWxzKSB7CisrCQlzcHJpbnRmKHJlc3VsdCwgIkFSQ0hfJWQiLCBzeXNudW0pOworKwkJcmV0dXJuIHJlc3VsdDsKKysJfSBlbHNlIHsKKysJCXNwcmludGYocmVzdWx0LCAiQVJDSF8lcyIsCisrCQkJYXJjaF9zeXNjYWxlbnRbc3lzbnVtXSk7CisrCQlyZXR1cm4gcmVzdWx0OworKwl9CisrfQorKworIHZvaWQgcHJvY2Vzc19ldmVudChzdHJ1Y3QgZXZlbnQgKmV2ZW50KQorIHsKKyAJc3dpdGNoIChldmVudC0+dGhpbmcpIHsKK0BAIC0xMTUsNiArMTM1LDE4IEBACisgCQkgICAgICBldmVudC0+ZV91bi5zeXNudW0pOworIAkJcHJvY2Vzc19zeXNyZXQoZXZlbnQpOworIAkJcmV0dXJuOworKwljYXNlIExUX0VWX0FSQ0hfU1lTQ0FMTDoKKysJCWRlYnVnKDEsICJldmVudDogYXJjaF9zeXNjYWxsICglcyBbJWRdKSIsCisrCQkgICAgICBhcmNoX3N5c25hbWUoZXZlbnQtPnByb2MsIGV2ZW50LT5lX3VuLnN5c251bSksCisrCQkgICAgICBldmVudC0+ZV91bi5zeXNudW0pOworKwkJcHJvY2Vzc19hcmNoX3N5c2NhbGwoZXZlbnQpOworKwkJcmV0dXJuOworKwljYXNlIExUX0VWX0FSQ0hfU1lTUkVUOgorKwkJZGVidWcoMSwgImV2ZW50OiBhcmNoX3N5c3JldCAoJXMgWyVkXSkiLAorKwkJICAgICAgYXJjaF9zeXNuYW1lKGV2ZW50LT5wcm9jLCBldmVudC0+ZV91bi5zeXNudW0pLAorKwkJICAgICAgZXZlbnQtPmVfdW4uc3lzbnVtKTsKKysJCXByb2Nlc3NfYXJjaF9zeXNyZXQoZXZlbnQpOworKwkJcmV0dXJuOworIAljYXNlIExUX0VWX0JSRUFLUE9JTlQ6CisgCQlkZWJ1ZygxLCAiZXZlbnQ6IGJyZWFrcG9pbnQiKTsKKyAJCXByb2Nlc3NfYnJlYWtwb2ludChldmVudCk7CitAQCAtMTk1LDYgKzIyNywxOSBAQAorIAljb250aW51ZV9wcm9jZXNzKGV2ZW50LT5wcm9jLT5waWQpOworIH0KKyAKKytzdGF0aWMgdm9pZCBwcm9jZXNzX2FyY2hfc3lzY2FsbChzdHJ1Y3QgZXZlbnQgKmV2ZW50KQorK3sKKysJaWYgKG9wdF9TKSB7CisrCQlvdXRwdXRfbGVmdChMVF9UT0ZfU1lTQ0FMTCwgZXZlbnQtPnByb2MsCisrCQkJICAgIGFyY2hfc3lzbmFtZShldmVudC0+cHJvYywgZXZlbnQtPmVfdW4uc3lzbnVtKSk7CisrCX0KKysJaWYgKGV2ZW50LT5wcm9jLT5icmVha3BvaW50c19lbmFibGVkID09IDApIHsKKysJCWVuYWJsZV9hbGxfYnJlYWtwb2ludHMoZXZlbnQtPnByb2MpOworKwl9CisrCWNhbGxzdGFja19wdXNoX3N5c2NhbGwoZXZlbnQtPnByb2MsIDB4ZjAwMDAgKyBldmVudC0+ZV91bi5zeXNudW0pOworKwljb250aW51ZV9wcm9jZXNzKGV2ZW50LT5wcm9jLT5waWQpOworK30KKysKKyBzdHJ1Y3QgdGltZXZhbCBjdXJyZW50X3RpbWVfc3BlbnQ7CisgCisgc3RhdGljIHZvaWQgY2FsY190aW1lX3NwZW50KHN0cnVjdCBwcm9jZXNzICpwcm9jKQorQEAgLTI1Nyw2ICszMDIsMTkgQEAKKyAJY29udGludWVfcHJvY2VzcyhldmVudC0+cHJvYy0+cGlkKTsKKyB9CisgCisrc3RhdGljIHZvaWQgcHJvY2Vzc19hcmNoX3N5c3JldChzdHJ1Y3QgZXZlbnQgKmV2ZW50KQorK3sKKysJaWYgKG9wdF9UIHx8IG9wdF9jKSB7CisrCQljYWxjX3RpbWVfc3BlbnQoZXZlbnQtPnByb2MpOworKwl9CisrCWNhbGxzdGFja19wb3AoZXZlbnQtPnByb2MpOworKwlpZiAob3B0X1MpIHsKKysJCW91dHB1dF9yaWdodChMVF9UT0ZfU1lTQ0FMTFIsIGV2ZW50LT5wcm9jLAorKwkJCSAgICAgYXJjaF9zeXNuYW1lKGV2ZW50LT5wcm9jLCBldmVudC0+ZV91bi5zeXNudW0pKTsKKysJfQorKwljb250aW51ZV9wcm9jZXNzKGV2ZW50LT5wcm9jLT5waWQpOworK30KKysKKyBzdGF0aWMgdm9pZCBwcm9jZXNzX2JyZWFrcG9pbnQoc3RydWN0IGV2ZW50ICpldmVudCkKKyB7CisgCWludCBpLCBqOworZGlmZiAtZHVyTiBsdHJhY2UtMC41Lm9yaWcvc3lzZGVwcy9saW51eC1nbnUvTWFrZWZpbGUgbHRyYWNlLTAuNS9zeXNkZXBzL2xpbnV4LWdudS9NYWtlZmlsZQorLS0tIGx0cmFjZS0wLjUub3JpZy9zeXNkZXBzL2xpbnV4LWdudS9NYWtlZmlsZQkyMDA4LTExLTA0IDE5OjI1OjExLjAwMDAwMDAwMCArMDEwMAorKysrIGx0cmFjZS0wLjUvc3lzZGVwcy9saW51eC1nbnUvTWFrZWZpbGUJMjAwOC0xMS0wNCAxOToyNTo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yLDcgKzIsNyBAQAorIAorIE9CSgkJPQl0cmFjZS5vIHByb2MubyBicmVha3BvaW50Lm8KKyAKKy1hbGw6CQlzeXNkZXAuaCBzaWduYWxlbnQuaCBzeXNjYWxsZW50Lmggc2lnbmFsZW50MS5oIHN5c2NhbGxlbnQxLmggLi4vc3lzZGVwLm8KKythbGw6CQlzeXNkZXAuaCBzaWduYWxlbnQuaCBzeXNjYWxsZW50LmggYXJjaF9zeXNjYWxsZW50Lmggc2lnbmFsZW50MS5oIHN5c2NhbGxlbnQxLmggLi4vc3lzZGVwLm8KKyAKKyBzeXNkZXAuaDoJJChBUkNIKS9hcmNoLmgKKyAJCWNhdCAkKEFSQ0gpL2FyY2guaCA+IHN5c2RlcC5oCitAQCAtMjYsNiArMjYsMTMgQEAKKyAJCQk+IHN5c2NhbGxlbnQxLmg7IFwKKyAJCWZpCisgCisrYXJjaF9zeXNjYWxsZW50Lmg6CisrCQlpZiBbIC1mICQoQVJDSCkvYXJjaF9zeXNjYWxsZW50LmggXTsgdGhlbiBcCisrCQkJY3AgJChBUkNIKS9hcmNoX3N5c2NhbGxlbnQuaCBhcmNoX3N5c2NhbGxlbnQuaDsgXAorKwkJZWxzZSBcCisrCQkJPiBhcmNoX3N5c2NhbGxlbnQuaDsgXAorKwkJZmkKKysKKyAuLi9zeXNkZXAubzoJb3MubyAkKEFSQ0gpL2FyY2gubworIAkJJChDQykgLW5vc3RkbGliIC1yIC1vIC4uL3N5c2RlcC5vIG9zLm8gJChBUkNIKS9hcmNoLm8KKyAKK0BAIC0zNyw3ICs0NCw3IEBACisgCisgY2xlYW46CisgCQkkKE1BS0UpIC1DICQoQVJDSCkgY2xlYW4KKy0JCXJtIC1mICQoT0JKKSBzeXNkZXAuaCBzaWduYWxlbnQuaCBzaWduYWxlbnQxLmggc3lzY2FsbGVudC5oCisrCQlybSAtZiAkKE9CSikgc3lzZGVwLmggc2lnbmFsZW50Lmggc2lnbmFsZW50MS5oIHN5c2NhbGxlbnQuaCBhcmNoX3N5c2NhbGxlbnQuaAorIAkJcm0gLWYgc3lzY2FsbGVudDEuaCBvcy5vIHN5c2RlcC5vIC4uL3N5c2RlcC5vCisgCisgZHVtbXk6CitkaWZmIC1kdXJOIGx0cmFjZS0wLjUub3JpZy9zeXNkZXBzL2xpbnV4LWdudS9hcmNoX21rc3lzY2FsbGVudCBsdHJhY2UtMC41L3N5c2RlcHMvbGludXgtZ251L2FyY2hfbWtzeXNjYWxsZW50CistLS0gbHRyYWNlLTAuNS5vcmlnL3N5c2RlcHMvbGludXgtZ251L2FyY2hfbWtzeXNjYWxsZW50CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgbHRyYWNlLTAuNS9zeXNkZXBzL2xpbnV4LWdudS9hcmNoX21rc3lzY2FsbGVudAkyMDA4LTExLTA0IDE5OjI1OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSw0MyBAQAorKyMhL3Vzci9iaW4vYXdrIC1mCisrCisrIyBoYWNrIGV4cHJlc3Npb24gdG8gZ2VuZXJhdGUgYXJjaF9zeXNjYWxsZW50LmggZnJvbSA8YXNtL3VuaXN0ZC5oPgorKyMgSXQgcmVhZHMgZnJvbSBzdGRpbiBhbmQgd3JpdGVzIHRvIHN0ZG91dAorKyMgQ3VycmVudGx5IChsaW51eC0yLjYuMTYpLCBpdCB3b3JrcyBPSyBvbiBhcm0KKysjIEl0IGlzIHVudGVzdGVkIGluIG90aGVyIGFyY2hpdGVjdHVyZXMKKysKKytCRUdJTiB7CisrCW1heD0wOworKwlGUz0iWyBcdFxuKCkrXSsiOworK30KKysKKyt7CisrIwlwcmludGYoIi8lcy8lcy8lcy8lcy9cbiIsICQxLCAkMiwgJDMsICQ0KTsKKysJaWYgKCgkMSB+IC9eI2RlZmluZSQvKSAmJiAoJDIgfiAvXl9fW0EtWl0rX05SXy8pKSB7CisrCQlzdWIoL15fX1tBLVpdK19OUl8vLCIiLCQyKTsKKysJCWlmICgoJDM+PTApICYmICgkMzw9MTAwMCkpIHsKKysJCQlTWVNDQUxMWyQzXT0kMjsKKysJCQlpZiAoJDMgPiBtYXgpIHsKKysJCQkJbWF4PSQzOworKwkJCX0KKysJCX0gZWxzZSBpZiAoKCQzIH4gL15fX1tBLVpdK19OUl9CQVNFJC8pICYmICgkND49MCkgJiYgKCQ0PD0xMDAwKSkgeworKwkJCVNZU0NBTExbJDRdPSQyOworKwkJCWlmICgkNCA+IG1heCkgeworKwkJCQltYXg9JDQ7CisrCQkJfQorKwkJfQorKwl9CisrfQorKworK0VORCB7CisrCWZvcihpPTA7IGk8PW1heDsgaSsrKSB7CisrCQlpZiAoIVNZU0NBTExbaV0pIHsKKysJCQlTWVNDQUxMW2ldID0gaTsKKysJCX0KKysJCXBhZCA9IDMyIC0gbGVuZ3RoKFNZU0NBTExbaV0pOworKwkJaWYgKHBhZDwxKSB7CisrCQkJcGFkPTE7CisrCQl9CisrCQlwcmludGYoIlx0XCIlc1wiLCUqcy8qICVkICovXG4iLCBTWVNDQUxMW2ldLCBwYWQsICIiLCBpKTsKKysJfQorK30KKysKK2RpZmYgLWR1ck4gbHRyYWNlLTAuNS5vcmlnL3N5c2RlcHMvbGludXgtZ251L2FybS9NYWtlZmlsZSBsdHJhY2UtMC41L3N5c2RlcHMvbGludXgtZ251L2FybS9NYWtlZmlsZQorLS0tIGx0cmFjZS0wLjUub3JpZy9zeXNkZXBzL2xpbnV4LWdudS9hcm0vTWFrZWZpbGUJMjAwNi0wMi0yMCAyMjo0NDo0NS4wMDAwMDAwMDAgKzAxMDAKKysrKyBsdHJhY2UtMC41L3N5c2RlcHMvbGludXgtZ251L2FybS9NYWtlZmlsZQkyMDA4LTExLTA0IDE5OjI1OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTEsNCArMSw0IEBACistT0JKCT0JdHJhY2UubyByZWdzLm8gcGx0Lm8KKytPQkoJPQl0cmFjZS5vIHJlZ3MubyBwbHQubyBicmVha3BvaW50Lm8KKyAKKyBhbGw6CQlhcmNoLm8KKyAKK2RpZmYgLWR1ck4gbHRyYWNlLTAuNS5vcmlnL3N5c2RlcHMvbGludXgtZ251L2FybS9hcmNoLmggbHRyYWNlLTAuNS9zeXNkZXBzL2xpbnV4LWdudS9hcm0vYXJjaC5oCistLS0gbHRyYWNlLTAuNS5vcmlnL3N5c2RlcHMvbGludXgtZ251L2FybS9hcmNoLmgJMjAwNi0wNC0yNCAyMjowNjoyMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBsdHJhY2UtMC41L3N5c2RlcHMvbGludXgtZ251L2FybS9hcmNoLmgJMjAwOC0xMS0wNCAxOToyNTo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xLDUgKzEsMTAgQEAKKy0jZGVmaW5lIEJSRUFLUE9JTlRfVkFMVUUgeyAweDAxLCAweDAwLCAweDlmLCAweGVmIH0KKysjZGVmaW5lIEFSQ0hfSEFWRV9FTkFCTEVfQlJFQUtQT0lOVCAxCisrI2RlZmluZSBBUkNIX0hBVkVfRElTQUJMRV9CUkVBS1BPSU5UIDEKKysKKysjZGVmaW5lIEJSRUFLUE9JTlRfVkFMVUUgeyAweGYwLCAweDAxLCAweGYwLCAweGU3IH0KKyAjZGVmaW5lIEJSRUFLUE9JTlRfTEVOR1RIIDQKKysjZGVmaW5lIFRIVU1CX0JSRUFLUE9JTlRfVkFMVUUgeyAweDAxLCAweGRlIH0KKysjZGVmaW5lIFRIVU1CX0JSRUFLUE9JTlRfTEVOR1RIIDIKKyAjZGVmaW5lIERFQ1JfUENfQUZURVJfQlJFQUsgMAorIAorICNkZWZpbmUgTFRfRUxGQ0xBU1MJRUxGQ0xBU1MzMgorZGlmZiAtZHVyTiBsdHJhY2UtMC41Lm9yaWcvc3lzZGVwcy9saW51eC1nbnUvYXJtL2FyY2hfc3lzY2FsbGVudC5oIGx0cmFjZS0wLjUvc3lzZGVwcy9saW51eC1nbnUvYXJtL2FyY2hfc3lzY2FsbGVudC5oCistLS0gbHRyYWNlLTAuNS5vcmlnL3N5c2RlcHMvbGludXgtZ251L2FybS9hcmNoX3N5c2NhbGxlbnQuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGx0cmFjZS0wLjUvc3lzZGVwcy9saW51eC1nbnUvYXJtL2FyY2hfc3lzY2FsbGVudC5oCTIwMDgtMTEtMDQgMTk6MjU6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDYgQEAKKysJIjAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAwICovCisrCSJicmVha3BvaW50IiwgICAgICAgICAgICAgICAgICAgICAgLyogMSAqLworKwkiY2FjaGVmbHVzaCIsICAgICAgICAgICAgICAgICAgICAgIC8qIDIgKi8KKysJInVzcjI2IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzICovCisrCSJ1c3IzMiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNCAqLworKwkic2V0X3RscyIsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDUgKi8KK2RpZmYgLWR1ck4gbHRyYWNlLTAuNS5vcmlnL3N5c2RlcHMvbGludXgtZ251L2FybS9icmVha3BvaW50LmMgbHRyYWNlLTAuNS9zeXNkZXBzL2xpbnV4LWdudS9hcm0vYnJlYWtwb2ludC5jCistLS0gbHRyYWNlLTAuNS5vcmlnL3N5c2RlcHMvbGludXgtZ251L2FybS9icmVha3BvaW50LmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBsdHJhY2UtMC41L3N5c2RlcHMvbGludXgtZ251L2FybS9icmVha3BvaW50LmMJMjAwOC0xMS0wNCAxOToyNTo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsODYgQEAKKysvKgorKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGx0cmFjZS4KKysgKgorKyAqIENvcHlyaWdodCAoQykgMjAwNyBieSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYSAoSU5kVCkKKysgKgorKyAqIEF1dGhvcjogQW5kZXJzb24gTGl6YXJkbyA8YW5kZXJzb24ubGl6YXJkb0BpbmR0Lm9yZy5icj4KKysgKgorKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKysgKgorKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisrICogMDIxMTAtMTMwMSBVU0EKKysgKgorKyAqIE1vZGlmaWVkIGZyb20gc3lzZGVwcy9saW51eC1nbnUvYnJlYWtwb2ludC5jIGFuZCBhZGRlZCBBUk0gVGh1bWIgc3VwcG9ydC4KKysqLworKworKyNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNpbmNsdWRlICJhcmNoLmgiCisrI2luY2x1ZGUgIm9wdGlvbnMuaCIKKysjaW5jbHVkZSAib3V0cHV0LmgiCisrI2luY2x1ZGUgImRlYnVnLmgiCisrCisrdm9pZCBhcmNoX2VuYWJsZV9icmVha3BvaW50KHBpZF90IHBpZCwgc3RydWN0IGJyZWFrcG9pbnQgKnNicCkKKyt7CisrCXVuc2lnbmVkIGludCBpLCBqOworKwljb25zdCB1bnNpZ25lZCBjaGFyIGJyZWFrX2luc25bXSA9IEJSRUFLUE9JTlRfVkFMVUU7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgdGh1bWJfYnJlYWtfaW5zbltdID0gVEhVTUJfQlJFQUtQT0lOVF9WQUxVRTsKKysKKysJZGVidWcoMSwgImFyY2hfZW5hYmxlX2JyZWFrcG9pbnQoJWQsJXApIiwgcGlkLCBzYnAtPmFkZHIpOworKworKwlmb3IgKGkgPSAwOyBpIDwgMSArICgoQlJFQUtQT0lOVF9MRU5HVEggLSAxKSAvIHNpemVvZihsb25nKSk7IGkrKykgeworKwkJbG9uZyBhID0KKysJCSAgICBwdHJhY2UoUFRSQUNFX1BFRUtURVhULCBwaWQsIHNicC0+YWRkciArIGkgKiBzaXplb2YobG9uZyksCisrCQkJICAgMCk7CisrCQl1bnNpZ25lZCBjaGFyICpieXRlcyA9ICh1bnNpZ25lZCBjaGFyICopJmE7CisrCisrCQlkZWJ1ZygyLCAiY3VycmVudCA9IDB4JWx4LCBvcmlnX3ZhbHVlID0gMHglbHgsIHRodW1iX21vZGUgPSAlZCIsIGEsICoobG9uZyAqKSZzYnAtPm9yaWdfdmFsdWUsIHNicC0+dGh1bWJfbW9kZSk7CisrCQlmb3IgKGogPSAwOworKwkJICAgICBqIDwgc2l6ZW9mKGxvbmcpCisrCQkgICAgICYmIGkgKiBzaXplb2YobG9uZykgKyBqIDwgQlJFQUtQT0lOVF9MRU5HVEg7IGorKykgeworKworKwkJCXNicC0+b3JpZ192YWx1ZVtpICogc2l6ZW9mKGxvbmcpICsgal0gPSBieXRlc1tqXTsKKysJCQlpZiAoIXNicC0+dGh1bWJfbW9kZSkgeworKwkJCQlieXRlc1tqXSA9IGJyZWFrX2luc25baSAqIHNpemVvZihsb25nKSArIGpdOworKwkJCX0KKysJCQllbHNlIGlmIChqIDwgVEhVTUJfQlJFQUtQT0lOVF9MRU5HVEgpIHsKKysJCQkJYnl0ZXNbal0gPSB0aHVtYl9icmVha19pbnNuW2kgKiBzaXplb2YobG9uZykgKyBqXTsKKysJCQl9CisrCQl9CisrCQlwdHJhY2UoUFRSQUNFX1BPS0VURVhULCBwaWQsIHNicC0+YWRkciArIGkgKiBzaXplb2YobG9uZyksIGEpOworKwl9CisrfQorKworK3ZvaWQgYXJjaF9kaXNhYmxlX2JyZWFrcG9pbnQocGlkX3QgcGlkLCBjb25zdCBzdHJ1Y3QgYnJlYWtwb2ludCAqc2JwKQorK3sKKysJdW5zaWduZWQgaW50IGksIGo7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgYnJlYWtfaW5zbltdID0gQlJFQUtQT0lOVF9WQUxVRTsKKysJY29uc3QgdW5zaWduZWQgY2hhciB0aHVtYl9icmVha19pbnNuW10gPSBUSFVNQl9CUkVBS1BPSU5UX1ZBTFVFOworKworKwlkZWJ1ZygxLCAiYXJjaF9kaXNhYmxlX2JyZWFrcG9pbnQoJWQsJXApIiwgcGlkLCBzYnAtPmFkZHIpOworKworKwlmb3IgKGkgPSAwOyBpIDwgMSArICgoQlJFQUtQT0lOVF9MRU5HVEggLSAxKSAvIHNpemVvZihsb25nKSk7IGkrKykgeworKwkJbG9uZyBhID0KKysJCSAgICBwdHJhY2UoUFRSQUNFX1BFRUtURVhULCBwaWQsIHNicC0+YWRkciArIGkgKiBzaXplb2YobG9uZyksCisrCQkJICAgMCk7CisrCQl1bnNpZ25lZCBjaGFyICpieXRlcyA9ICh1bnNpZ25lZCBjaGFyICopJmE7CisrCisrCQlkZWJ1ZygyLCAiY3VycmVudCA9IDB4JWx4LCBvcmlnX3ZhbHVlID0gMHglbHgsIHRodW1iX21vZGUgPSAlZCIsIGEsICoobG9uZyAqKSZzYnAtPm9yaWdfdmFsdWUsIHNicC0+dGh1bWJfbW9kZSk7CisrCQlmb3IgKGogPSAwOworKwkJICAgICBqIDwgc2l6ZW9mKGxvbmcpCisrCQkgICAgICYmIGkgKiBzaXplb2YobG9uZykgKyBqIDwgQlJFQUtQT0lOVF9MRU5HVEg7IGorKykgeworKworKwkJCWJ5dGVzW2pdID0gc2JwLT5vcmlnX3ZhbHVlW2kgKiBzaXplb2YobG9uZykgKyBqXTsKKysJCX0KKysJCXB0cmFjZShQVFJBQ0VfUE9LRVRFWFQsIHBpZCwgc2JwLT5hZGRyICsgaSAqIHNpemVvZihsb25nKSwgYSk7CisrCX0KKyt9CitkaWZmIC1kdXJOIGx0cmFjZS0wLjUub3JpZy9zeXNkZXBzL2xpbnV4LWdudS9hcm0vcHRyYWNlLmggbHRyYWNlLTAuNS9zeXNkZXBzL2xpbnV4LWdudS9hcm0vcHRyYWNlLmgKKy0tLSBsdHJhY2UtMC41Lm9yaWcvc3lzZGVwcy9saW51eC1nbnUvYXJtL3B0cmFjZS5oCTIwMDYtMDItMjAgMjI6NDQ6NDUuMDAwMDAwMDAwICswMTAwCisrKysgbHRyYWNlLTAuNS9zeXNkZXBzL2xpbnV4LWdudS9hcm0vcHRyYWNlLmgJMjAwOC0xMS0wNCAxOToyNTo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xICsxLDkgQEAKKyAjaW5jbHVkZSA8c3lzL3B0cmFjZS5oPgorKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisrCisrdHlwZWRlZiBzdHJ1Y3QgeworKwlpbnQgdmFsaWQ7CisrCXN0cnVjdCBwdF9yZWdzIHJlZ3M7CisrCWxvbmcgZnVuY19hcmdbNV07CisrCWxvbmcgc3lzY19hcmdbNV07CisrfSBwcm9jX2FyY2hkZXA7CitkaWZmIC1kdXJOIGx0cmFjZS0wLjUub3JpZy9zeXNkZXBzL2xpbnV4LWdudS9hcm0vcmVncy5jIGx0cmFjZS0wLjUvc3lzZGVwcy9saW51eC1nbnUvYXJtL3JlZ3MuYworLS0tIGx0cmFjZS0wLjUub3JpZy9zeXNkZXBzL2xpbnV4LWdudS9hcm0vcmVncy5jCTIwMDYtMDItMjAgMjI6NDg6MDcuMDAwMDAwMDAwICswMTAwCisrKysgbHRyYWNlLTAuNS9zeXNkZXBzL2xpbnV4LWdudS9hcm0vcmVncy5jCTIwMDgtMTEtMDQgMTk6MjU6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMzksNSArMzksMTAgQEAKKyAgKiBhIENJU0MgYXJjaGl0ZWN0dXJlOyBpbiBvdXIgY2FzZSwgd2UgZG9uJ3QgbmVlZCB0aGF0ICovCisgdm9pZCAqZ2V0X3JldHVybl9hZGRyKHN0cnVjdCBwcm9jZXNzICpwcm9jLCB2b2lkICpzdGFja19wb2ludGVyKQorIHsKKy0JcmV0dXJuICh2b2lkICopcHRyYWNlKFBUUkFDRV9QRUVLVVNFUiwgcHJvYy0+cGlkLCBvZmZfbHIsIDApOworKwlsb25nIGFkZHIgPSBwdHJhY2UoUFRSQUNFX1BFRUtVU0VSLCBwcm9jLT5waWQsIG9mZl9sciwgMCk7CisrCisrCXByb2MtPnRodW1iX21vZGUgPSBhZGRyICYgMTsKKysJaWYgKHByb2MtPnRodW1iX21vZGUpCisrCQlhZGRyICY9IH4xOworKwlyZXR1cm4gKHZvaWQgKilhZGRyOworIH0KK2RpZmYgLWR1ck4gbHRyYWNlLTAuNS5vcmlnL3N5c2RlcHMvbGludXgtZ251L2FybS90cmFjZS5jIGx0cmFjZS0wLjUvc3lzZGVwcy9saW51eC1nbnUvYXJtL3RyYWNlLmMKKy0tLSBsdHJhY2UtMC41Lm9yaWcvc3lzZGVwcy9saW51eC1nbnUvYXJtL3RyYWNlLmMJMjAwNi0wMi0yMCAyMjo0ODowNy4wMDAwMDAwMDAgKzAxMDAKKysrKyBsdHJhY2UtMC41L3N5c2RlcHMvbGludXgtZ251L2FybS90cmFjZS5jCTIwMDgtMTEtMDQgMTk6MjU6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMiw2ICsyLDcgQEAKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisgI2VuZGlmCisgCisrI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyAjaW5jbHVkZSA8c2lnbmFsLmg+CitAQCAtOSw2ICsxMCw4IEBACisgI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyAKKyAjaW5jbHVkZSAibHRyYWNlLmgiCisrI2luY2x1ZGUgIm91dHB1dC5oIgorKyNpbmNsdWRlICJwdHJhY2UuaCIKKyAKKyAjaWYgKCFkZWZpbmVkKFBUUkFDRV9QRUVLVVNFUikgJiYgZGVmaW5lZChQVFJBQ0VfUEVFS1VTUikpCisgIyBkZWZpbmUgUFRSQUNFX1BFRUtVU0VSIFBUUkFDRV9QRUVLVVNSCitAQCAtMTgsMTkgKzIxLDI1IEBACisgIyBkZWZpbmUgUFRSQUNFX1BPS0VVU0VSIFBUUkFDRV9QT0tFVVNSCisgI2VuZGlmCisgCistLyogc3lzY2FsbCB0cmFjaW5nIHByb3RvY29sOiBBcm1MaW51eAorLSBvbiB0aGUgd2F5IGluLCBpcCBpcyAwCistIG9uIHRoZSB3YXkgb3V0LCBpcCBpcyBub24temVybworLSovCisgI2RlZmluZSBvZmZfcjAgMAorKyNkZWZpbmUgb2ZmX3I3IDI4CisgI2RlZmluZSBvZmZfaXAgNDgKKyAjZGVmaW5lIG9mZl9wYyA2MAorIAorIHZvaWQgZ2V0X2FyY2hfZGVwKHN0cnVjdCBwcm9jZXNzICpwcm9jKQorIHsKKysJcHJvY19hcmNoZGVwICphOworKworKwlpZiAoIXByb2MtPmFyY2hfcHRyKQorKwkJcHJvYy0+YXJjaF9wdHIgPSAodm9pZCAqKW1hbGxvYyhzaXplb2YocHJvY19hcmNoZGVwKSk7CisrCWEgPSAocHJvY19hcmNoZGVwICopIChwcm9jLT5hcmNoX3B0cik7CisrCWEtPnZhbGlkID0gKHB0cmFjZShQVFJBQ0VfR0VUUkVHUywgcHJvYy0+cGlkLCAwLCAmYS0+cmVncykgPj0gMCk7CisgfQorIAorLS8qIFJldHVybnMgMSBpZiBzeXNjYWxsLCAyIGlmIHN5c3JldCwgMCBvdGhlcndpc2UuCisrLyogUmV0dXJucyAwIGlmIG5vdCBhIHN5c2NhbGwsCisrICogICAgICAgICAxIGlmIHN5c2NhbGwgZW50cnksIDIgaWYgc3lzY2FsbCBleGl0LAorKyAqICAgICAgICAgMyBpZiBhcmNoLXNwZWNpZmljIHN5c2NhbGwgZW50cnksIDQgaWYgYXJjaC1zcGVjaWZpYyBzeXNjYWxsIGV4aXQsCisrICogICAgICAgICAtMSBvbiBlcnJvci4KKyAgKi8KKyBpbnQgc3lzY2FsbF9wKHN0cnVjdCBwcm9jZXNzICpwcm9jLCBpbnQgc3RhdHVzLCBpbnQgKnN5c251bSkKKyB7CitAQCAtNDAsMTkgKzQ5LDM5IEBACisgCQlpbnQgcGMgPSBwdHJhY2UoUFRSQUNFX1BFRUtVU0VSLCBwcm9jLT5waWQsIG9mZl9wYywgMCk7CisgCQkvKiBmZXRjaCB0aGUgU1dJIGluc3RydWN0aW9uICovCisgCQlpbnQgaW5zbiA9IHB0cmFjZShQVFJBQ0VfUEVFS1RFWFQsIHByb2MtPnBpZCwgcGMgLSA0LCAwKTsKKysJCWludCBpcCA9IHB0cmFjZShQVFJBQ0VfUEVFS1VTRVIsIHByb2MtPnBpZCwgb2ZmX2lwLCAwKTsKKyAKKy0JCSpzeXNudW0gPSBpbnNuICYgMHhGRkZGOworLQkJLyogaWYgaXQgaXMgYSBzeXNjYWxsLCByZXR1cm4gMSBvciAyICovCistCQlpZiAoKGluc24gJiAweEZGRkYwMDAwKSA9PSAweGVmOTAwMDAwKSB7CistCQkJcmV0dXJuIHB0cmFjZShQVFJBQ0VfUEVFS1VTRVIsIHByb2MtPnBpZCwgb2ZmX2lwLAorLQkJCQkgICAgICAwKSA/IDIgOiAxOworKwkJaWYgKGluc24gPT0gMHhlZjAwMDAwMCB8fCBpbnNuID09IDB4MGYwMDAwMDApIHsKKysJCQkvKiBFQUJJIHN5c2NhbGwgKi8KKysJCQkqc3lzbnVtID0gcHRyYWNlKFBUUkFDRV9QRUVLVVNFUiwgcHJvYy0+cGlkLCBvZmZfcjcsIDApOworKwkJfSBlbHNlIGlmICgoaW5zbiAmIDB4ZmZmMDAwMDApID09IDB4ZWY5MDAwMDApIHsKKysJCQkvKiBvbGQgQUJJIHN5c2NhbGwgKi8KKysJCQkqc3lzbnVtID0gaW5zbiAmIDB4ZmZmZmY7CisrCQl9IGVsc2UgeworKwkJCS8qIFRPRE86IGhhbmRsZSBzd2k8Y29uZD4gdmFyaWF0aW9ucyAqLworKwkJCS8qIG9uZSBwb3NzaWJsZSByZWFzb24gZm9yIGdldHRpbmcgaW4gaGVyZSBpcyB0aGF0IHdlCisrCQkJICogYXJlIGNvbWluZyBmcm9tIGEgc2lnbmFsIGhhbmRsZXIsIHNvIHRoZSBjdXJyZW50CisrCQkJICogUEMgZG9lcyBub3QgcG9pbnQgdG8gdGhlIGluc3RydWN0aW9uIGp1c3QgYWZ0ZXIgdGhlCisrCQkJICogInN3aSIgb25lLiAqLworKwkJCW91dHB1dF9saW5lKHByb2MsICJ1bmV4cGVjdGVkIGluc3RydWN0aW9uIDB4JXggYXQgJXAiLCBpbnNuLCBwYyAtIDQpOworKwkJCXJldHVybiAtMTsKKysJCX0KKysJCWlmICgoKnN5c251bSAmIDB4ZjAwMDApID09IDB4ZjAwMDApIHsKKysJCQkvKiBhcmNoLXNwZWNpZmljIHN5c2NhbGwgKi8KKysJCQkqc3lzbnVtICY9IH4weGYwMDAwOworKwkJCXJldHVybiBpcCA/IDQgOiAzOworIAkJfQorKwkJLyogQVJNIHN5c2NhbGwgY29udmVudGlvbjogb24gc3lzY2FsbCBlbnRyeSwgaXAgaXMgemVybzsKKysJCSAqIG9uIHN5c2NhbGwgZXhpdCwgaXAgaXMgbm9uLXplcm8gKi8KKysJCXJldHVybiBpcCA/IDIgOiAxOworIAl9CisgCXJldHVybiAwOworIH0KKyAKKyBsb25nIGdpbW1lX2FyZyhlbnVtIHRvZiB0eXBlLCBzdHJ1Y3QgcHJvY2VzcyAqcHJvYywgaW50IGFyZ19udW0pCisgeworKwlwcm9jX2FyY2hkZXAgKmEgPSAocHJvY19hcmNoZGVwICopIHByb2MtPmFyY2hfcHRyOworKworIAlpZiAoYXJnX251bSA9PSAtMSkgewkvKiByZXR1cm4gdmFsdWUgKi8KKyAJCXJldHVybiBwdHJhY2UoUFRSQUNFX1BFRUtVU0VSLCBwcm9jLT5waWQsIG9mZl9yMCwgMCk7CisgCX0KK0BAIC02MCw2ICs4OSwxMCBAQAorIAkvKiBkZWFsIHdpdGggdGhlIEFSTSBjYWxsaW5nIGNvbnZlbnRpb25zICovCisgCWlmICh0eXBlID09IExUX1RPRl9GVU5DVElPTiB8fCB0eXBlID09IExUX1RPRl9GVU5DVElPTlIpIHsKKyAJCWlmIChhcmdfbnVtIDwgNCkgeworKwkJCWlmIChhLT52YWxpZCAmJiB0eXBlID09IExUX1RPRl9GVU5DVElPTikKKysJCQkJcmV0dXJuIGEtPnJlZ3MudXJlZ3NbYXJnX251bV07CisrCQkJaWYgKGEtPnZhbGlkICYmIHR5cGUgPT0gTFRfVE9GX0ZVTkNUSU9OUikKKysJCQkJcmV0dXJuIGEtPmZ1bmNfYXJnW2FyZ19udW1dOworIAkJCXJldHVybiBwdHJhY2UoUFRSQUNFX1BFRUtVU0VSLCBwcm9jLT5waWQsIDQgKiBhcmdfbnVtLAorIAkJCQkgICAgICAwKTsKKyAJCX0gZWxzZSB7CitAQCAtNjksNiArMTAyLDEwIEBACisgCQl9CisgCX0gZWxzZSBpZiAodHlwZSA9PSBMVF9UT0ZfU1lTQ0FMTCB8fCB0eXBlID09IExUX1RPRl9TWVNDQUxMUikgeworIAkJaWYgKGFyZ19udW0gPCA1KSB7CisrCQkJaWYgKGEtPnZhbGlkICYmIHR5cGUgPT0gTFRfVE9GX1NZU0NBTEwpCisrCQkJCXJldHVybiBhLT5yZWdzLnVyZWdzW2FyZ19udW1dOworKwkJCWlmIChhLT52YWxpZCAmJiB0eXBlID09IExUX1RPRl9TWVNDQUxMUikKKysJCQkJcmV0dXJuIGEtPnN5c2NfYXJnW2FyZ19udW1dOworIAkJCXJldHVybiBwdHJhY2UoUFRSQUNFX1BFRUtVU0VSLCBwcm9jLT5waWQsIDQgKiBhcmdfbnVtLAorIAkJCQkgICAgICAwKTsKKyAJCX0gZWxzZSB7CitAQCAtODYsNCArMTIzLDExIEBACisgCisgdm9pZCBzYXZlX3JlZ2lzdGVyX2FyZ3MoZW51bSB0b2YgdHlwZSwgc3RydWN0IHByb2Nlc3MgKnByb2MpCisgeworKwlwcm9jX2FyY2hkZXAgKmEgPSAocHJvY19hcmNoZGVwICopIHByb2MtPmFyY2hfcHRyOworKwlpZiAoYS0+dmFsaWQpIHsKKysJCWlmICh0eXBlID09IExUX1RPRl9GVU5DVElPTikKKysJCQltZW1jcHkoYS0+ZnVuY19hcmcsIGEtPnJlZ3MudXJlZ3MsIHNpemVvZihhLT5mdW5jX2FyZykpOworKwkJZWxzZQorKwkJCW1lbWNweShhLT5zeXNjX2FyZywgYS0+cmVncy51cmVncywgc2l6ZW9mKGEtPnN5c2NfYXJnKSk7CisrCX0KKyB9CitkaWZmIC1kdXJOIGx0cmFjZS0wLjUub3JpZy9zeXNkZXBzL2xpbnV4LWdudS9wcGMvYXJjaC5oIGx0cmFjZS0wLjUvc3lzZGVwcy9saW51eC1nbnUvcHBjL2FyY2guaAorLS0tIGx0cmFjZS0wLjUub3JpZy9zeXNkZXBzL2xpbnV4LWdudS9wcGMvYXJjaC5oCTIwMDYtMDYtMTQgMDY6NTU6MjEuMDAwMDAwMDAwICswMjAwCisrKysgbHRyYWNlLTAuNS9zeXNkZXBzL2xpbnV4LWdudS9wcGMvYXJjaC5oCTIwMDgtMTEtMDQgMTk6MjU6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtNCw5ICs0LDEyIEBACisgCisgI2RlZmluZSBMVF9FTEZDTEFTUwlFTEZDTEFTUzMyCisgI2RlZmluZSBMVF9FTEZfTUFDSElORQlFTV9QUEMKKysKKyAjaWZkZWYgX19wb3dlcnBjNjRfXyAvLyBTYXlzICdsdHJhY2UnIGlzIDY0IGJpdHMsIHNheXMgbm90aGluZyBhYm91dCB0YXJnZXQuCisgI2RlZmluZSBMVF9FTEZDTEFTUzIJRUxGQ0xBU1M2NAorICNkZWZpbmUgTFRfRUxGX01BQ0hJTkUyCUVNX1BQQzY0CisrI2RlZmluZSBBUkNIX1NVUFBPUlRTX09QRAorKyNlbmRpZgorIAorICNkZWZpbmUgUExUX1JFSU5JVEFMSVNBVElPTl9CUCAgICAiX3N0YXJ0IgorIAorQEAgLTE2LDYgKzE5LDMgQEAKKyAjaWYgKFBQQ19OT1BfTEVOR1RIICE9IEJSRUFLUE9JTlRfTEVOR1RIKQorICNlcnJvciAiTGVuZ3RoIG9mIHRoZSBicmVha3BvaW50IHZhbHVlIG5vdCBlcXVhbCB0byB0aGUgbGVuZ3RoIG9mIGEgbm9wIGluc3RydWN0aW9uIgorICNlbmRpZgorLQorLQorLSNlbmRpZgorZGlmZiAtZHVyTiBsdHJhY2UtMC41Lm9yaWcvdGVzdHN1aXRlL2x0cmFjZS5taW5vci9NYWtlZmlsZS5pbiBsdHJhY2UtMC41L3Rlc3RzdWl0ZS9sdHJhY2UubWlub3IvTWFrZWZpbGUuaW4KKy0tLSBsdHJhY2UtMC41Lm9yaWcvdGVzdHN1aXRlL2x0cmFjZS5taW5vci9NYWtlZmlsZS5pbgkyMDA2LTAzLTE0IDAwOjEyOjAxLjAwMDAwMDAwMCArMDEwMAorKysrIGx0cmFjZS0wLjUvdGVzdHN1aXRlL2x0cmFjZS5taW5vci9NYWtlZmlsZS5pbgkyMDA4LTExLTA0IDE5OjI1OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTE5LDcgKzE5LDcgQEAKKyAKKyAuU1VGRklYRVM6CQorIGNsZWFuOgorLQktcm0gLWYgZGVtYW5nbGUgdHJhY2UtZm9yayB0cmFjZS1jbG9uZSAKKysJLXJtIC1mIGRlbWFuZ2xlIHRyYWNlLWZvcmsgdHJhY2UtY2xvbmUgdHJhY2UtZXhlYyB0cmFjZS1leGVjMQorIAktcm0gLWYgdGltZS1yZWNvcmQtdHQgdGltZS1yZWNvcmQtdHR0IHRpbWUtcmVjb3JkLVQKKyAJLXJtIC1mIGF0dGFjaC1wcm9jZXNzIGNvdW50LXJlY29yZAorIAktcm0gLWYgcHJpbnQtaW5zdHJ1Y3Rpb24tcG9pbnRlcgorZGlmZiAtZHVyTiBsdHJhY2UtMC41Lm9yaWcvdGVzdHN1aXRlL2x0cmFjZS5taW5vci90cmFjZS1jbG9uZS5jIGx0cmFjZS0wLjUvdGVzdHN1aXRlL2x0cmFjZS5taW5vci90cmFjZS1jbG9uZS5jCistLS0gbHRyYWNlLTAuNS5vcmlnL3Rlc3RzdWl0ZS9sdHJhY2UubWlub3IvdHJhY2UtY2xvbmUuYwkyMDA2LTAzLTE2IDAxOjM4OjQ3LjAwMDAwMDAwMCArMDEwMAorKysrIGx0cmFjZS0wLjUvdGVzdHN1aXRlL2x0cmFjZS5taW5vci90cmFjZS1jbG9uZS5jCTIwMDgtMTEtMDQgMTk6MjU6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMjEsMTEgKzIxLDExIEBACisgaW50IG1haW4gKCkKKyB7CisgICBwaWRfdCBwaWQ7CistICBzdGF0aWMgY2hhciBzdGFja1tTVEFDS19TSVpFXTsKKysgIGNoYXIgc3RhY2tbU1RBQ0tfU0laRV07CisgI2lmZGVmIF9faWE2NF9fCisgICBwaWQgPSBfX2Nsb25lMigobXlmdW5jKSZjaGlsZCwgc3RhY2ssIFNUQUNLX1NJWkUsIENMT05FX0ZTLCBOVUxMKTsKKyAjZWxzZQorLSAgcGlkID0gY2xvbmUoKG15ZnVuYykmY2hpbGQsIHN0YWNrLENMT05FX0ZTLCBOVUxMICk7CisrICBwaWQgPSBjbG9uZSgobXlmdW5jKSZjaGlsZCwgc3RhY2sgKyBTVEFDS19TSVpFLENMT05FX0ZTLCBOVUxMICk7CisgI2VuZGlmCisgICBpZiAocGlkIDwgMCkKKyAgICAgeworZGlmZiAtZHVyTiBsdHJhY2UtMC41Lm9yaWcvd2FpdF9mb3Jfc29tZXRoaW5nLmMgbHRyYWNlLTAuNS93YWl0X2Zvcl9zb21ldGhpbmcuYworLS0tIGx0cmFjZS0wLjUub3JpZy93YWl0X2Zvcl9zb21ldGhpbmcuYwkyMDA2LTAyLTIwIDIyOjQ4OjA3LjAwMDAwMDAwMCArMDEwMAorKysrIGx0cmFjZS0wLjUvd2FpdF9mb3Jfc29tZXRoaW5nLmMJMjAwOC0xMS0wNCAxOToyNTo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC03MSw2ICs3MSwxOCBAQAorIAkJZXZlbnQudGhpbmcgPSBMVF9FVl9TWVNSRVQ7CisgCQlldmVudC5lX3VuLnN5c251bSA9IHRtcDsKKyAJCXJldHVybiAmZXZlbnQ7CisrCWNhc2UgMzoKKysJCWV2ZW50LnRoaW5nID0gTFRfRVZfQVJDSF9TWVNDQUxMOworKwkJZXZlbnQuZV91bi5zeXNudW0gPSB0bXA7CisrCQlyZXR1cm4gJmV2ZW50OworKwljYXNlIDQ6CisrCQlldmVudC50aGluZyA9IExUX0VWX0FSQ0hfU1lTUkVUOworKwkJZXZlbnQuZV91bi5zeXNudW0gPSB0bXA7CisrCQlyZXR1cm4gJmV2ZW50OworKwljYXNlIC0xOgorKwkJZXZlbnQudGhpbmcgPSBMVF9FVl9OT05FOworKwkJY29udGludWVfcHJvY2VzcyhldmVudC5wcm9jLT5waWQpOworKwkJcmV0dXJuICZldmVudDsKKyAJfQorIAlpZiAoV0lGRVhJVEVEKHN0YXR1cykpIHsKKyAJCWV2ZW50LnRoaW5nID0gTFRfRVZfRVhJVDsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9taW5ndy1saWJnbnVyeC8yLjUuMS9idWlsZC1zdGF0aWMtbGlicmFyeS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9taW5ndy1saWJnbnVyeC8yLjUuMS9idWlsZC1zdGF0aWMtbGlicmFyeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTdhYjE2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL21pbmd3LWxpYmdudXJ4LzIuNS4xL2J1aWxkLXN0YXRpYy1saWJyYXJ5LnBhdGNoCkBAIC0wLDAgKzEsMTAzIEBACistLS0gbWluZ3ctbGliZ251cngtMi41LjEub3JpZy9jb25maWd1cmUJMjAwOS0xMS0wMyAwODoxOToxNS4wMDAwMDAwMDAgKzAxMDAKKysrKyBtaW5ndy1saWJnbnVyeC0yLjUuMS9jb25maWd1cmUJMjAwOS0xMS0wMyAwODozMTozNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNzMsNyArMjczLDcgQEAKKyBQQUNLQUdFX1NUUklORz0nTWluR1cgbGliZ251cnggMi41LjEnCisgUEFDS0FHRV9CVUdSRVBPUlQ9J2h0dHBzOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTI0MzUmYXRpZD0xMDI0MzUnCisKKy1hY19zdWJzdF92YXJzPSdTSEVMTCBQQVRIX1NFUEFSQVRPUiBQQUNLQUdFX05BTUUgUEFDS0FHRV9UQVJOQU1FIFBBQ0tBR0VfVkVSU0lPTiBQQUNLQUdFX1NUUklORyBQQUNLQUdFX0JVR1JFUE9SVCBleGVjX3ByZWZpeCBwcmVmaXggcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBsb2NhbHN0YXRlZGlyIGxpYmRpciBpbmNsdWRlZGlyIG9sZGluY2x1ZGVkaXIgaW5mb2RpciBtYW5kaXIgYnVpbGRfYWxpYXMgaG9zdF9hbGlhcyB0YXJnZXRfYWxpYXMgREVGUyBFQ0hPX0MgRUNIT19OIEVDSE9fVCBMSUJTIENDIENGTEFHUyBMREZMQUdTIENQUEZMQUdTIGFjX2N0X0NDIEVYRUVYVCBPQkpFWFQgQ0NfUVVBTElGSUVEIERMTFZFUlNJT04gWklQQ01EIFpJUEVYVCBNU1ZDTElCIGFjX2N0X01TVkNMSUIgR05VUlhfTElCIGluc3RhbGxfZGV2IExJQk9CSlMgTFRMSUJPQkpTJworK2FjX3N1YnN0X3ZhcnM9J1NIRUxMIFBBVEhfU0VQQVJBVE9SIFBBQ0tBR0VfTkFNRSBQQUNLQUdFX1RBUk5BTUUgUEFDS0FHRV9WRVJTSU9OIFBBQ0tBR0VfU1RSSU5HIFBBQ0tBR0VfQlVHUkVQT1JUIGV4ZWNfcHJlZml4IHByZWZpeCBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgbGliZGlyIGluY2x1ZGVkaXIgb2xkaW5jbHVkZWRpciBpbmZvZGlyIG1hbmRpciBidWlsZF9hbGlhcyBob3N0X2FsaWFzIHRhcmdldF9hbGlhcyBERUZTIEVDSE9fQyBFQ0hPX04gRUNIT19UIExJQlMgQ0MgQ0ZMQUdTIExERkxBR1MgQ1BQRkxBR1MgYWNfY3RfQ0MgRVhFRVhUIE9CSkVYVCBDQ19RVUFMSUZJRUQgQVIgRExMVkVSU0lPTiBaSVBDTUQgWklQRVhUIE1TVkNMSUIgYWNfY3RfTVNWQ0xJQiBHTlVSWF9MSUIgaW5zdGFsbF9kZXYgTElCT0JKUyBMVExJQk9CSlMnCisgYWNfc3Vic3RfZmlsZXM9JycKKworICMgSW5pdGlhbGl6ZSBzb21lIHZhcmlhYmxlcyBzZXQgYnkgb3B0aW9ucy4KK0BAIC0yMTkwLDIxICsyMTkwLDU0IEBACisKKyBmaQorIHJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1hY19leHQ9YworLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCistYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCistYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCistICBhY19leHQ9YworKworK2ZvciBhY19wcm9nIGluIGFyOyBkbworK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fSRhY19wcm9nOyBhY193b3JkPSQyCisrZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisraWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKysgIGFjX2N2X3Byb2dfQVI9IiRBUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICAgIGFjX2N2X3Byb2dfQVI9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorK2RvbmUKKysKKysgIHRlc3QgLXogIiRhY19jdl9wcm9nX0FSIiAmJiBhY19jdl9wcm9nX0FSPSJhciIKKytmaQorK2ZpCisrQVI9JGFjX2N2X3Byb2dfQVIKKytpZiB0ZXN0IC1uICIkQVIiOyB0aGVuCisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQVIiID4mNQorK2VjaG8gIiR7RUNIT19UfSRBUiIgPiY2CisrZWxzZQorKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKKytmaQorK2RvbmUKKysKKythY19leHQ9YworIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCisgYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworIGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisgYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCistIHBvcENGTEFHUz0kQ0ZMQUdTCistIGVjaG8gJ2ludCBtYWluKHZvaWQpe3JldHVybiAwO30nID4gY29uZnRlc3QuJGFjX2V4dAorLSBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyB0aGUgLW10aHJlYWRzIG9wdGlvbiIgPiY1CisrcG9wQ0ZMQUdTPSRDRkxBR1MKKytlY2hvICdpbnQgbWFpbih2b2lkKXtyZXR1cm4gMDt9JyA+IGNvbmZ0ZXN0LiRhY19leHQKKytlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyB0aGUgLW10aHJlYWRzIG9wdGlvbiIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIHRoZSAtbXRocmVhZHMgb3B0aW9uLi4uICRFQ0hPX0MiID4mNgorICAgIENGTEFHUz0iJHBvcENGTEFHUyAkQ0NfUVVBTElGSUVEIC1tdGhyZWFkcyIKKyAgICBpZiAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgdGhlbgorQEAgLTMwMzgsNiArMzA2OSw3IEBACisgcyxARVhFRVhUQCwkRVhFRVhULDt0IHQKKyBzLEBPQkpFWFRALCRPQkpFWFQsO3QgdAorIHMsQENDX1FVQUxJRklFREAsJENDX1FVQUxJRklFRCw7dCB0CisrcyxAQVJALCRBUiw7dCB0CisgcyxARExMVkVSU0lPTkAsJERMTFZFUlNJT04sO3QgdAorIHMsQFpJUENNREAsJFpJUENNRCw7dCB0CisgcyxAWklQRVhUQCwkWklQRVhULDt0IHQKKy0tLSBtaW5ndy1saWJnbnVyeC0yLjUuMS5vcmlnL01ha2VmaWxlLmluCTIwMDktMTEtMDMgMDg6MTc6NDkuMDAwMDAwMDAwICswMTAwCisrKysgbWluZ3ctbGliZ251cngtMi41LjEvTWFrZWZpbGUuaW4JMjAwOS0xMS0wMyAwODo1NzozNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zOSw2ICszOSw3IEBACisgbWFuZGlyID0gQG1hbmRpckAKKworIENDID0gQENDX1FVQUxJRklFREAKKytBUiA9IEBBUkAKKyBDRkxBR1MgPSBAQ0ZMQUdTQCAtSSAke3NyY2Rpcn0KKyBMREZMQUdTID0gQExERkxBR1NACisKK0BAIC02Nyw4ICs2OCw4IEBACisgbGliZ251cngtJChETExWRVJTSU9OKS5kbGwgbGliZ251cnguZGxsLmE6ICQoT0JKRUNUUykKKyAJJChDQykgJChDRkxBR1MpIC1zaGFyZWQgLW8gbGliZ251cngtJChETExWRVJTSU9OKS5kbGwgJChMREZMQUdTKSAkKE9CSkVDVFMpCisKKy1saWJyZWdleC5hOiBsaWJnbnVyeC5kbGwuYQorLQljcCAtcCBsaWJnbnVyeC5kbGwuYSAkQAorK2xpYnJlZ2V4LmE6ICQoT0JKRUNUUykKKysJJChBUikgY3J1ICRAICQoT0JKRUNUUykKKworIGdudXJ4LmxpYjogbGliZ251cngtJChETExWRVJTSU9OKS5kbGwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9tcGMvMC44LjEvMTAwLWZpeC1idWlsZC13aXRoLW1wZnItM18wXzkuZGlmZiBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9tcGMvMC44LjEvMTAwLWZpeC1idWlsZC13aXRoLW1wZnItM18wXzkuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGUxNTE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL21wYy8wLjguMS8xMDAtZml4LWJ1aWxkLXdpdGgtbXBmci0zXzBfOS5kaWZmCkBAIC0wLDAgKzEsMTQgQEAKKy0tLSB0cnVuay9zcmMvYWNvcy5jCTIwMDkvMTIvMDggMTY6NDk6NDMJNzMzCisrKysgdHJ1bmsvc3JjL2Fjb3MuYwkyMDA5LzEyLzA5IDIwOjUxOjM4CTczNAorQEAgLTE4OCwxMCArMTg4LDcgQEAKKyAgIGVsc2UKKyAgICAgcm5kX2ltID0gcm5kX2ltID09IEdNUF9STkRVID8gR01QX1JOREQKKyAgICAgICA6IHJuZF9pbSA9PSBHTVBfUk5ERCA/IEdNUF9STkRVCistI2lmIE1QRlJfVkVSU0lPTl9NQUpPUiA+PSAzCistICAgICAgOiBybmRfaW0gPT0gR01QX1JOREEgPyBHTVBfUk5EWgorLSNlbmRpZgorLSAgICAgIDogcm5kX2ltOworKyAgICAgIDogcm5kX2ltOyAvKiBib3RoIFJORFogYW5kIFJOREEgbWFwIHRvIHRoZW1zZWx2ZXMgZm9yIC1hc2luKHopICovCisgICBybmQxID0gUk5EQyhHTVBfUk5ETiwgcm5kX2ltKTsKKyAgIG1wZnJfaW5pdDIgKHBpX292ZXJfMiwgcCk7CisgICBmb3IgKDs7KQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL21wZnIvMi4zLjEvMTAwLXRocmVhZC1zYWZlLWNvbmZpZ3VyZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9tcGZyLzIuMy4xLzEwMC10aHJlYWQtc2FmZS1jb25maWd1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MxNmMxYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9tcGZyLzIuMy4xLzEwMC10aHJlYWQtc2FmZS1jb25maWd1cmUucGF0Y2gKQEAgLTAsMCArMSwyMDkgQEAKK2RpZmYgLU5hdXJkIG1wZnItMi4zLjEtYS9hY2luY2x1ZGUubTQgbXBmci0yLjMuMS1iL2FjaW5jbHVkZS5tNAorLS0tIG1wZnItMi4zLjEtYS9hY2luY2x1ZGUubTQJMjAwOC0wMS0yMyAxMzozNjo0Ni4wMDAwMDAwMDAgKzAwMDAKKysrKyBtcGZyLTIuMy4xLWIvYWNpbmNsdWRlLm00CTIwMDgtMDEtMjMgMTM6MzY6NDYuMDAwMDAwMDAwICswMDAwCitAQCAtMjg2LDYgKzI4Niw5IEBACisgZG5sICAgIGltcG9ydGFudCB0byBydW4gdGhlIHRlc3QgYmVsb3cuCisgaWYgdGVzdCAiJGVuYWJsZV90aHJlYWRfc2FmZSIgPSB5ZXM7IHRoZW4KKyBBQ19DQUNIRV9DSEVDSyhbZm9yIFRMUyBzdXBwb3J0XSwgbXBmcl9jdl93b3JraW5nX3RscywgWworK3NhdmVkX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisrIyBUaGUgLUkkc3JjZGlyIGlzIG5lY2Vzc2FyeSB3aGVuIG9iamRpciBpcyBkaWZmZXJlbnQgZnJvbSBzcmNkaXIuCisrQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSSRzcmNkaXIiCisgQUNfUlVOX0lGRUxTRShbCisgI2RlZmluZSBNUEZSX1VTRV9USFJFQURfU0FGRSAxCisgI2luY2x1ZGUgIm1wZnItdGhyZWFkLmgiCitAQCAtMjk3LDYgKzMwMCw3IEBACisgICAgICBbQUNfTVNHX1JFU1VMVChubykKKyAgICAgICBBQ19NU0dfRVJST1IoW3BsZWFzZSBjb25maWd1cmUgd2l0aCAtLWRpc2FibGUtdGhyZWFkLXNhZmVdKV0sCisgICAgICBbbXBmcl9jdl93b3JraW5nX3Rscz0iY2Fubm90IHRlc3QsIGFzc3VtZSB5ZXMiXSkKKytDUFBGTEFHUz0iJHNhdmVkX0NQUEZMQUdTIgorIF0pCisgZmkKKyBdKQorZGlmZiAtTmF1cmQgbXBmci0yLjMuMS1hL2NvbmZpZ3VyZSBtcGZyLTIuMy4xLWIvY29uZmlndXJlCistLS0gbXBmci0yLjMuMS1hL2NvbmZpZ3VyZQkyMDA4LTAxLTI5IDA4OjUxOjA3LjAwMDAwMDAwMCArMDAwMAorKysrIG1wZnItMi4zLjEtYi9jb25maWd1cmUJMjAwOC0wNS0xMCAyMzo0OTozNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC03NTI4LDYgKzc1MjgsOSBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgCisrc2F2ZWRfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKysjIFRoZSAtSSRzcmNkaXIgaXMgbmVjZXNzYXJ5IHdoZW4gb2JqZGlyIGlzIGRpZmZlcmVudCBmcm9tIHNyY2Rpci4KKytDUFBGTEFHUz0iJENQUEZMQUdTIC1JJHNyY2RpciIKKyBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAgbXBmcl9jdl93b3JraW5nX3Rscz0iY2Fubm90IHRlc3QsIGFzc3VtZSB5ZXMiCisgZWxzZQorQEAgLTc1NzgsNiArNzU4MSw3IEBACisgZmkKKyAKKyAKKytDUFBGTEFHUz0iJHNhdmVkX0NQUEZMQUdTIgorIAorIGZpCisgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbXBmcl9jdl93b3JraW5nX3RscyIgPiY1CitAQCAtOTI3OCw3ICs5MjgyLDcgQEAKKyAgIDs7CisgKi0qLWlyaXg2KikKKyAgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKy0gIGVjaG8gJyNsaW5lIDkyODEgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorKyAgZWNobyAnI2xpbmUgOTI4NSAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0CisgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0xMTEwMywxMSArMTExMDcsMTEgQEAKKyAgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCistICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjExMTA2OiAkbHRfY29tcGlsZVwiIiA+JjUpCisrICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjExMTEwOiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgICBhY19zdGF0dXM9JD8KKyAgICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgIGVjaG8gIiRhc19tZToxMTExMDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAgZWNobyAiJGFzX21lOjExMTE0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorQEAgLTExMzkzLDExICsxMTM5NywxMSBAQAorICAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKy0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTEzOTY6ICRsdF9jb21waWxlXCIiID4mNSkKKysgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTE0MDA6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgIGFjX3N0YXR1cz0kPworICAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICAgZWNobyAiJGFzX21lOjExNDAwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgICBlY2hvICIkYXNfbWU6MTE0MDQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgorICAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCitAQCAtMTE0OTcsMTEgKzExNTAxLDExIEBACisgICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxMTUwMDogJGx0X2NvbXBpbGVcIiIgPiY1KQorKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxMTUwNDogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgIGFjX3N0YXR1cz0kPworICAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQorLSAgIGVjaG8gIiRhc19tZToxMTUwNDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAgZWNobyAiJGFzX21lOjExNTA4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgIHRoZW4KKyAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCitAQCAtMTM4NTksNyArMTM4NjMsNyBAQAorICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAxMzg2MiAiY29uZmlndXJlIgorKyNsaW5lIDEzODY2ICJjb25maWd1cmUiCisgI2luY2x1ZGUgImNvbmZkZWZzLmgiCisgCisgI2lmIEhBVkVfRExGQ05fSAorQEAgLTEzOTU5LDcgKzEzOTYzLDcgQEAKKyAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMTM5NjIgImNvbmZpZ3VyZSIKKysjbGluZSAxMzk2NiAiY29uZmlndXJlIgorICNpbmNsdWRlICJjb25mZGVmcy5oIgorIAorICNpZiBIQVZFX0RMRkNOX0gKK0BAIC0xNjM3OSwxMSArMTYzODMsMTEgQEAKKyAgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCistICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjE2MzgyOiAkbHRfY29tcGlsZVwiIiA+JjUpCisrICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjE2Mzg2OiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgICBhY19zdGF0dXM9JD8KKyAgICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgIGVjaG8gIiRhc19tZToxNjM4NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAgZWNobyAiJGFzX21lOjE2MzkwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorQEAgLTE2NDgzLDExICsxNjQ4NywxMSBAQAorICAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKy0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTY0ODY6ICRsdF9jb21waWxlXCIiID4mNSkKKysgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTY0OTA6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgICBhY19zdGF0dXM9JD8KKyAgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKy0gICBlY2hvICIkYXNfbWU6MTY0OTA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgIGVjaG8gIiRhc19tZToxNjQ5NDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKyAgICB0aGVuCisgICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorQEAgLTE4MDYwLDExICsxODA2NCwxMSBAQAorICAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKy0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTgwNjM6ICRsdF9jb21waWxlXCIiID4mNSkKKysgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTgwNjc6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgIGFjX3N0YXR1cz0kPworICAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICAgZWNobyAiJGFzX21lOjE4MDY3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgICBlY2hvICIkYXNfbWU6MTgwNzE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgorICAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCitAQCAtMTgxNjQsMTEgKzE4MTY4LDExIEBACisgICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxODE2NzogJGx0X2NvbXBpbGVcIiIgPiY1KQorKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxODE3MTogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgIGFjX3N0YXR1cz0kPworICAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQorLSAgIGVjaG8gIiRhc19tZToxODE3MTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAgZWNobyAiJGFzX21lOjE4MTc1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgIHRoZW4KKyAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCitAQCAtMjAzNjQsMTEgKzIwMzY4LDExIEBACisgICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZToyMDM2NzogJGx0X2NvbXBpbGVcIiIgPiY1KQorKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZToyMDM3MTogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgICAgYWNfc3RhdHVzPSQ/CisgICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gICBlY2hvICIkYXNfbWU6MjAzNzE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgIGVjaG8gIiRhc19tZToyMDM3NTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCisgICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KK0BAIC0yMDY1NCwxMSArMjA2NTgsMTEgQEAKKyAgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCistICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjIwNjU3OiAkbHRfY29tcGlsZVwiIiA+JjUpCisrICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjIwNjYxOiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgICBhY19zdGF0dXM9JD8KKyAgICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgIGVjaG8gIiRhc19tZToyMDY2MTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAgZWNobyAiJGFzX21lOjIwNjY1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorQEAgLTIwNzU4LDExICsyMDc2MiwxMSBAQAorICAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKy0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MjA3NjE6ICRsdF9jb21waWxlXCIiID4mNSkKKysgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MjA3NjU6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgICBhY19zdGF0dXM9JD8KKyAgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKy0gICBlY2hvICIkYXNfbWU6MjA3NjU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgIGVjaG8gIiRhc19tZToyMDc2OTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKyAgICB0aGVuCisgICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL21wZnIvMi40LjAvMTAwLXByaW50Zi1oaC1sbC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9tcGZyLzIuNC4wLzEwMC1wcmludGYtaGgtbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJhOWY4MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9tcGZyLzIuNC4wLzEwMC1wcmludGYtaGgtbGwucGF0Y2gKQEAgLTAsMCArMSwzNTkgQEAKK2RpZmYgLU5hdXJkIG1wZnItMi40LjAtYS9QQVRDSEVTIG1wZnItMi40LjAtYi9QQVRDSEVTCistLS0gbXBmci0yLjQuMC1hL1BBVENIRVMJMjAwOS0wMS0yNiAxMjo1MjowMS4wMDAwMDAwMDAgKzAwMDAKKysrKyBtcGZyLTIuNC4wLWIvUEFUQ0hFUwkyMDA5LTAyLTIwIDE3OjI3OjQ0LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSBAQAorK3ByaW50Zi1oaC1sbAorZGlmZiAtTmF1cmQgbXBmci0yLjQuMC1hL1ZFUlNJT04gbXBmci0yLjQuMC1iL1ZFUlNJT04KKy0tLSBtcGZyLTIuNC4wLWEvVkVSU0lPTgkyMDA5LTAxLTI2IDEyOjUyOjAxLjAwMDAwMDAwMCArMDAwMAorKysrIG1wZnItMi40LjAtYi9WRVJTSU9OCTIwMDktMDItMjAgMTc6Mjc6NDQuMDAwMDAwMDAwICswMDAwCitAQCAtMSArMSBAQAorLTIuNC4wCisrMi40LjAtcDEKK2RpZmYgLU5hdXJkIG1wZnItMi40LjAtYS9hY2luY2x1ZGUubTQgbXBmci0yLjQuMC1iL2FjaW5jbHVkZS5tNAorLS0tIG1wZnItMi40LjAtYS9hY2luY2x1ZGUubTQJMjAwOS0wMS0yNiAxMjo1MjowMS4wMDAwMDAwMDAgKzAwMDAKKysrKyBtcGZyLTIuNC4wLWIvYWNpbmNsdWRlLm00CTIwMDktMDEtMjYgMTI6NTI6MDEuMDAwMDAwMDAwICswMDAwCitAQCAtNzIyLDYgKzcyMiwxNiBAQAorICAgICAgICAgIFtBQ19ERUZJTkUoW05QUklOVEZfSl0sIDEsIFtnbXBfcHJpbnRmIGNhbm5vdCByZWFkIGludG1heF90XSldKQorIGZpCisgCisrTVBGUl9GVU5DX1BSSU5URl9TUEVDKFslaGhkXSwgW2NoYXJdLCBbCisrI2luY2x1ZGUgPGdtcC5oPgorKyAgICAgICAgIF0sIFtnbXBfXSwsCisrICAgICAgICAgW0FDX0RFRklORShbTlBSSU5URl9ISF0sIDEsIFtnbXBfcHJpbnRmIGNhbm5vdCB1c2UgJ2hoJyBsZW5ndGggbW9kaWZpZXJdKV0pCisrCisrTVBGUl9GVU5DX1BSSU5URl9TUEVDKFslbGxkXSwgW2xvbmcgbG9uZyBpbnRdLCBbCisrI2luY2x1ZGUgPGdtcC5oPgorKyAgICAgICAgIF0sIFtnbXBfXSwsCisrICAgICAgICAgW0FDX0RFRklORShbTlBSSU5URl9MTF0sIDEsIFtnbXBfcHJpbnRmIGNhbm5vdCByZWFkIGxvbmcgbG9uZyBpbnRdKV0pCisrCisgTVBGUl9GVU5DX1BSSU5URl9TUEVDKFslLjBMZl0sIFtsb25nIGRvdWJsZV0sIFsKKyAjaW5jbHVkZSA8Z21wLmg+CisgICAgICAgICAgXSwgW2dtcF9dLCwKK2RpZmYgLU5hdXJkIG1wZnItMi40LjAtYS9jb25maWd1cmUgbXBmci0yLjQuMC1iL2NvbmZpZ3VyZQorLS0tIG1wZnItMi40LjAtYS9jb25maWd1cmUJMjAwOS0wMS0yNiAxMjo1NDozNi4wMDAwMDAwMDAgKzAwMDAKKysrKyBtcGZyLTIuNC4wLWIvY29uZmlndXJlCTIwMDktMDItMjAgMTc6Mzg6MzYuMDAwMDAwMDAwICswMDAwCitAQCAtMjQ4NzQsNiArMjQ4NzQsMTcwIEBACisgZmkKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgZ21wX3ByaW50ZiBzdXBwb3J0cyBcIiVoaGRcIiIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ21wX3ByaW50ZiBzdXBwb3J0cyBcIiVoaGRcIi4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisrICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KKyt7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCisrU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgcnVuIHRlc3QgcHJvZ3JhbSB3aGlsZSBjcm9zcyBjb21waWxpbmcKKytTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKytlbHNlCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKworKyNpbmNsdWRlIDxnbXAuaD4KKysKKysKKytpbnQKKyttYWluICgpCisreworKworKyAgY2hhciBzWzI1Nl07CisrICBjaGFyIGEgPSAwOworKyAgcmV0dXJuIChnbXBfc3ByaW50ZiAocywgIiVoaGQiLCBhKSAhPSAxKSA/IDEgOiAwOworKworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysgIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorKworK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysoIGV4aXQgJGFjX3N0YXR1cyApCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKysjZGVmaW5lIE5QUklOVEZfSEggMQorK19BQ0VPRgorKworK2ZpCisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytmaQorKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiBnbXBfcHJpbnRmIHN1cHBvcnRzIFwiJWxsZFwiIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBpZiBnbXBfcHJpbnRmIHN1cHBvcnRzIFwiJWxsZFwiLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKysgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorK3sgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuIHRlc3QgcHJvZ3JhbSB3aGlsZSBjcm9zcyBjb21waWxpbmcKKytTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBydW4gdGVzdCBwcm9ncmFtIHdoaWxlIGNyb3NzIGNvbXBpbGluZworK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisrI2luY2x1ZGUgPGdtcC5oPgorKworKworK2ludAorK21haW4gKCkKKyt7CisrCisrICBjaGFyIHNbMjU2XTsKKysgIGxvbmcgbG9uZyBpbnQgYSA9IDA7CisrICByZXR1cm4gKGdtcF9zcHJpbnRmIChzLCAiJWxsZCIsIGEpICE9IDEpID8gMSA6IDA7CisrCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworKyAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfdHJ5IikgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CisrJGFzX2VjaG8gInllcyIgPiY2OyB9CisrCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKyggZXhpdCAkYWNfc3RhdHVzICkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKysKKytjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorKyNkZWZpbmUgTlBSSU5URl9MTCAxCisrX0FDRU9GCisrCisrZmkKKytybSAtcmYgY29uZnRlc3QuZFNZTQorK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2ZpCisrCisrCisrCisrCisrCisgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIGdtcF9wcmludGYgc3VwcG9ydHMgXCIlLjBMZlwiIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBpZiBnbXBfcHJpbnRmIHN1cHBvcnRzIFwiJS4wTGZcIi4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCitkaWZmIC1OYXVyZCBtcGZyLTIuNC4wLWEvbXBmci5oIG1wZnItMi40LjAtYi9tcGZyLmgKKy0tLSBtcGZyLTIuNC4wLWEvbXBmci5oCTIwMDktMDEtMjYgMTI6NTI6MDEuMDAwMDAwMDAwICswMDAwCisrKysgbXBmci0yLjQuMC1iL21wZnIuaAkyMDA5LTAyLTIwIDE3OjI3OjQ0LjAwMDAwMDAwMCArMDAwMAorQEAgLTI3LDcgKzI3LDcgQEAKKyAjZGVmaW5lIE1QRlJfVkVSU0lPTl9NQUpPUiAyCisgI2RlZmluZSBNUEZSX1ZFUlNJT05fTUlOT1IgNAorICNkZWZpbmUgTVBGUl9WRVJTSU9OX1BBVENITEVWRUwgMAorLSNkZWZpbmUgTVBGUl9WRVJTSU9OX1NUUklORyAiMi40LjAiCisrI2RlZmluZSBNUEZSX1ZFUlNJT05fU1RSSU5HICIyLjQuMC1wMSIKKyAKKyAvKiBNYWNyb3MgZGVhbGluZyB3aXRoIE1QRlIgVkVSU0lPTiAqLworICNkZWZpbmUgTVBGUl9WRVJTSU9OX05VTShhLGIsYykgKCgoYSkgPDwgMTZMKSB8ICgoYikgPDwgOCkgfCAoYykpCitkaWZmIC1OYXVyZCBtcGZyLTIuNC4wLWEvdGVzdHMvdGZwcmludGYuYyBtcGZyLTIuNC4wLWIvdGVzdHMvdGZwcmludGYuYworLS0tIG1wZnItMi40LjAtYS90ZXN0cy90ZnByaW50Zi5jCTIwMDktMDEtMjYgMTI6NTI6MDAuMDAwMDAwMDAwICswMDAwCisrKysgbXBmci0yLjQuMC1iL3Rlc3RzL3RmcHJpbnRmLmMJMjAwOS0wMi0yMCAxNjozMTowMi4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNDYsNiArMTQ2LDcgQEAKKyAgIHNob3J0IHNoID0gLTE7CisgICB1bnNpZ25lZCBzaG9ydCB1c2ggPSAxOworICAgaW50IGkgPSAtMTsKKysgIGludCBqID0gMTsKKyAgIHVuc2lnbmVkIGludCB1aSA9IDE7CisgICBsb25nIGxvID0gLTE7CisgICB1bnNpZ25lZCBsb25nIHVsbyA9IDE7CitAQCAtMTc5LDEyICsxODAsMTEgQEAKKyAKKyAgIGxpbWJbMF0gPSBsaW1iWzFdID0gbGltYlsyXSA9IH4gKG1wX2xpbWJfdCkgMDsKKyAKKy0gIGNoZWNrX3ZmcHJpbnRmIChmb3V0LCAiYS4gJVJhLCBiLiAlaGh1LCBjLiAldSwgZC4gJWx4JWhobiIsIG1wZnIsIHVjaCwgdWksCistICAgICAgICAgICAgICAgICAgdWxvLCAmdWNoKTsKKy0gIGNoZWNrX2xlbmd0aCAoMSwgdWNoLCAyOCwgaGh1KTsKKy0gIGNoZWNrX3ZmcHJpbnRmIChmb3V0LCAiYS4gJWhoaSwgYi4gJVJiLCBjLiAldSwgZC4gJWxpJWxuIiwgc2NoLCBtcGZyLCBpLAorKyAgY2hlY2tfdmZwcmludGYgKGZvdXQsICJhLiAlUmEsIGIuICV1LCBjLiAlbHglbiIsIG1wZnIsIHVpLCB1bG8sICZqKTsKKysgIGNoZWNrX2xlbmd0aCAoMSwgaiwgMjIsIGQpOworKyAgY2hlY2tfdmZwcmludGYgKGZvdXQsICJhLiAlYywgYi4gJVJiLCBjLiAldSwgZC4gJWxpJWxuIiwgaSwgbXBmciwgaSwKKyAgICAgICAgICAgICAgICAgICBsbywgJnVsbyk7CistICBjaGVja19sZW5ndGggKDIsIHVsbywgMzcsIGx1KTsKKysgIGNoZWNrX2xlbmd0aCAoMiwgdWxvLCAzNiwgbHUpOworICAgY2hlY2tfdmZwcmludGYgKGZvdXQsICJhLiAlaGksIGIuICUqZiwgYy4gJVJlJWhuIiwgdXNoLCAzLCBmLCBtcGZyLCAmdXNoKTsKKyAgIGNoZWNrX2xlbmd0aCAoMywgdXNoLCAyOSwgaHUpOworICAgY2hlY2tfdmZwcmludGYgKGZvdXQsICJhLiAlaGksIGIuICVmLCBjLiAlIy4yUmYlbiIsIHNoLCBkLCBtcGZyLCAmaSk7CitAQCAtMjA4LDEzICsyMDgsMTggQEAKKyAgIGNoZWNrX2xlbmd0aCAoOSwgc3osIDMwLCB6dSk7CisgI2VuZGlmCisgCisrI2lmbmRlZiBOUFJJTlRGX0hICisrICBjaGVja192ZnByaW50ZiAoZm91dCwgImEuICVoaGksIGIuJVJBLCBjLiAlaGh1JWhobiIsIHNjaCwgbXBmciwgdWNoLCAmdWNoKTsKKysgIGNoZWNrX2xlbmd0aCAoMTAsIHVjaCwgMjEsIGhodSk7CisrI2VuZGlmCisrCisgI2lmIChfX0dOVV9NUF9WRVJTSU9OICogMTAgKyBfX0dOVV9NUF9WRVJTSU9OX01JTk9SKSA+PSA0MgorICAgLyogVGhlICdNJyBzcGVjaWZpZXIgd2FzIGFkZGVkIGluIGdtcCA0LjIuMCAqLworICAgY2hlY2tfdmZwcmludGYgKGZvdXQsICJhLiAlTXggYi4gJVJlJU1uIiwgbGltYlswXSwgbXBmciwgJmxpbWJbMF0pOworICAgaWYgKGxpbWJbMF0gIT0gMTQgKyBCSVRTX1BFUl9NUF9MSU1CIC8gNCB8fCBsaW1iWzFdICE9IH4gKG1wX2xpbWJfdCkgMAorICAgICAgIHx8IGxpbWJbMl0gIT0gfiAobXBfbGltYl90KSAwKQorICAgICB7CistICAgICAgcHJpbnRmICgiRXJyb3IgaW4gdGVzdCAjMTA6IG1wZnJfdmZwcmludGYgZGlkIG5vdCBwcmludCAlZCBjaGFyYWN0ZXJzIgorKyAgICAgIHByaW50ZiAoIkVycm9yIGluIHRlc3QgIzExOiBtcGZyX3ZmcHJpbnRmIGRpZCBub3QgcHJpbnQgJWQgY2hhcmFjdGVycyIKKyAgICAgICAgICAgICAgICIgYXMgZXhwZWN0ZWRcbiIsIDE0ICsgKGludCkgQklUU19QRVJfTVBfTElNQiAvIDQpOworICAgICAgIGV4aXQgKDEpOworICAgICB9CitAQCAtMjI3LDEzICsyMzIsMTMgQEAKKyAgIGlmIChsaW1iWzBdICE9IDE0ICsgMyAqIEJJVFNfUEVSX01QX0xJTUIgLyA0IHx8IGxpbWJbMV0gIT0gKG1wX2xpbWJfdCkgMAorICAgICAgIHx8IGxpbWJbMl0gIT0gfiAobXBfbGltYl90KSAwKQorICAgICB7CistICAgICAgcHJpbnRmICgiRXJyb3IgaW4gdGVzdCAjMTE6IG1wZnJfdmZwcmludGYgZGlkIG5vdCBwcmludCAlZCBjaGFyYWN0ZXJzIgorKyAgICAgIHByaW50ZiAoIkVycm9yIGluIHRlc3QgIzEyOiBtcGZyX3ZmcHJpbnRmIGRpZCBub3QgcHJpbnQgJWQgY2hhcmFjdGVycyIKKyAgICAgICAgICAgICAgICIgYXMgZXhwZWN0ZWRcbiIsIDE0ICsgKGludCkgQklUU19QRVJfTVBfTElNQiAvIDQpOworICAgICAgIGV4aXQgKDEpOworICAgICB9CisgI2VuZGlmCisgCistI2lmZGVmIEhBVkVfTE9OR19MT05HCisrI2lmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpICYmICFkZWZpbmVkKE5QUklOVEZfTEwpCisgICB7CisgICAgIGxvbmcgbG9uZyBsbG8gPSAtMTsKKyAgICAgdW5zaWduZWQgbG9uZyBsb25nIHVsbG8gPSAxOworZGlmZiAtTmF1cmQgbXBmci0yLjQuMC1hL3Rlc3RzL3RwcmludGYuYyBtcGZyLTIuNC4wLWIvdGVzdHMvdHByaW50Zi5jCistLS0gbXBmci0yLjQuMC1hL3Rlc3RzL3RwcmludGYuYwkyMDA5LTAxLTI2IDEyOjUyOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIG1wZnItMi40LjAtYi90ZXN0cy90cHJpbnRmLmMJMjAwOS0wMi0yMCAxNjozMTowMi4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNTAsNiArMTUwLDcgQEAKKyAgIHNob3J0IHNoID0gLTE7CisgICB1bnNpZ25lZCBzaG9ydCB1c2ggPSAxOworICAgaW50IGkgPSAtMTsKKysgIGludCBqID0gMTsKKyAgIHVuc2lnbmVkIGludCB1aSA9IDE7CisgICBsb25nIGxvID0gLTE7CisgICB1bnNpZ25lZCBsb25nIHVsbyA9IDE7CitAQCAtMTc4LDExICsxNzksMTAgQEAKKyAgIG1wZnJfc2V0X2YgKG1wZnIsIG1wZiwgR01QX1JORE4pOworICAgcHJlYyA9IG1wZnJfZ2V0X3ByZWMgKG1wZnIpOworIAorLSAgY2hlY2tfdnByaW50ZiAoImEuICVSYSwgYi4gJWhodSwgYy4gJXUsIGQuICVseCVoaG4iLCBtcGZyLCB1Y2gsIHVpLCB1bG8sCistICAgICAgICAgICAgICAgICAmdWNoKTsKKy0gIGNoZWNrX2xlbmd0aCAoMSwgdWNoLCAyOCwgaGh1KTsKKy0gIGNoZWNrX3ZwcmludGYgKCJhLiAlaGhpLCBiLiAlUmIsIGMuICV1LCBkLiAlbGklbG4iLCBzY2gsIG1wZnIsIGksIGxvLCAmdWxvKTsKKy0gIGNoZWNrX2xlbmd0aCAoMiwgdWxvLCAzNywgbHUpOworKyAgY2hlY2tfdnByaW50ZiAoImEuICVSYSwgYi4gJXUsIGMuICVseCVuIiwgbXBmciwgdWksIHVsbywgJmopOworKyAgY2hlY2tfbGVuZ3RoICgxLCBqLCAyMiwgZCk7CisrICBjaGVja192cHJpbnRmICgiYS4gJWMsIGIuICVSYiwgYy4gJXUsIGQuICVsaSVsbiIsIGksIG1wZnIsIGksIGxvLCAmdWxvKTsKKysgIGNoZWNrX2xlbmd0aCAoMiwgdWxvLCAzNiwgbHUpOworICAgY2hlY2tfdnByaW50ZiAoImEuICVoaSwgYi4gJSpmLCBjLiAlUmUlaG4iLCB1c2gsIDMsIGYsIG1wZnIsICZ1c2gpOworICAgY2hlY2tfbGVuZ3RoICgzLCB1c2gsIDI5LCBodSk7CisgICBjaGVja192cHJpbnRmICgiYS4gJWhpLCBiLiAlZiwgYy4gJSMuMlJmJW4iLCBzaCwgZCwgbXBmciwgJmkpOworQEAgLTIwNCw3ICsyMDQsMTIgQEAKKyAgIGNoZWNrX2xlbmd0aCAoOSwgc3osIDMwLCB6dSk7CisgI2VuZGlmCisgCistI2lmZGVmIEhBVkVfTE9OR19MT05HCisrI2lmbmRlZiBOUFJJTlRGX0hICisrICBjaGVja192cHJpbnRmICgiYS4gJWhoaSwgYi4gJVJhLCBjLiAlaGh1JWhobiIsIHNjaCwgbXBmciwgdWNoLCAmdWNoKTsKKysgIGNoZWNrX2xlbmd0aCAoMTAsIHVjaCwgMjIsIGhodSk7CisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpICYmICFkZWZpbmVkKE5QUklOVEZfTEwpCisgICB7CisgICAgIGxvbmcgbG9uZyBsbG8gPSAtMTsKKyAgICAgdW5zaWduZWQgbG9uZyBsb25nIHVsbG8gPSAxOworZGlmZiAtTmF1cmQgbXBmci0yLjQuMC1hL3Zhc3ByaW50Zi5jIG1wZnItMi40LjAtYi92YXNwcmludGYuYworLS0tIG1wZnItMi40LjAtYS92YXNwcmludGYuYwkyMDA5LTAxLTI2IDEyOjUyOjAxLjAwMDAwMDAwMCArMDAwMAorKysrIG1wZnItMi40LjAtYi92YXNwcmludGYuYwkyMDA5LTAyLTIwIDE2OjMxOjAyLjAwMDAwMDAwMCArMDAwMAorQEAgLTIzNSwxMCArMjM1LDE0IEBACisgICAgICAgYnJlYWs7CisgICAgIGNhc2UgJ2gnOgorICAgICAgIGlmICgqKytmb3JtYXQgPT0gJ2gnKQorKyNpZm5kZWYgTlBSSU5URl9ISAorICAgICAgICAgeworICAgICAgICAgICArK2Zvcm1hdDsKKyAgICAgICAgICAgc3BlY2luZm8tPmFyZ190eXBlID0gQ0hBUl9BUkc7CisgICAgICAgICB9CisrI2Vsc2UKKysgICAgICAgIHNwZWNpbmZvLT5hcmdfdHlwZSA9IFVOU1VQUE9SVEVEOworKyNlbmRpZgorICAgICAgIGVsc2UKKyAgICAgICAgIHNwZWNpbmZvLT5hcmdfdHlwZSA9IFNIT1JUX0FSRzsKKyAgICAgICBicmVhazsKK0BAIC0yNDYsNyArMjUwLDcgQEAKKyAgICAgICBpZiAoKisrZm9ybWF0ID09ICdsJykKKyAgICAgICAgIHsKKyAgICAgICAgICAgKytmb3JtYXQ7CistI2lmZGVmIEhBVkVfTE9OR19MT05HCisrI2lmIGRlZmluZWQgKEhBVkVfTE9OR19MT05HKSAmJiAhZGVmaW5lZChOUFJJTlRGX0xMKQorICAgICAgICAgICBzcGVjaW5mby0+YXJnX3R5cGUgPSBMT05HX0xPTkdfQVJHOworICNlbHNlCisgICAgICAgICAgIHNwZWNpbmZvLT5hcmdfdHlwZSA9IFVOU1VQUE9SVEVEOworZGlmZiAtTmF1cmQgbXBmci0yLjQuMC1hL3ZlcnNpb24uYyBtcGZyLTIuNC4wLWIvdmVyc2lvbi5jCistLS0gbXBmci0yLjQuMC1hL3ZlcnNpb24uYwkyMDA5LTAxLTI2IDEyOjUyOjAxLjAwMDAwMDAwMCArMDAwMAorKysrIG1wZnItMi40LjAtYi92ZXJzaW9uLmMJMjAwOS0wMi0yMCAxNzoyNzo0NC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yNSw1ICsyNSw1IEBACisgY29uc3QgY2hhciAqCisgbXBmcl9nZXRfdmVyc2lvbiAodm9pZCkKKyB7CistICByZXR1cm4gIjIuNC4wIjsKKysgIHJldHVybiAiMi40LjAtcDEiOworIH0KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9tcGZyLzIuNC4wLzExMC1tcGZyX3NucHJpbnRmLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL21wZnIvMi40LjAvMTEwLW1wZnJfc25wcmludGYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJhZjEzNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9tcGZyLzIuNC4wLzExMC1tcGZyX3NucHJpbnRmLnBhdGNoCkBAIC0wLDAgKzEsMTc2IEBACitkaWZmIC1OYXVyZCBtcGZyLTIuNC4wLWEvUEFUQ0hFUyBtcGZyLTIuNC4wLWIvUEFUQ0hFUworLS0tIG1wZnItMi40LjAtYS9QQVRDSEVTCTIwMDktMDItMjUgMTM6Mjc6MzguMDAwMDAwMDAwICswMDAwCisrKysgbXBmci0yLjQuMC1iL1BBVENIRVMJMjAwOS0wMi0yNSAxMzo0MjoyNi4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEgQEAKKyttcGZyX3NucHJpbnRmCitkaWZmIC1OYXVyZCBtcGZyLTIuNC4wLWEvVkVSU0lPTiBtcGZyLTIuNC4wLWIvVkVSU0lPTgorLS0tIG1wZnItMi40LjAtYS9WRVJTSU9OCTIwMDktMDItMjAgMTc6Mjc6NDQuMDAwMDAwMDAwICswMDAwCisrKysgbXBmci0yLjQuMC1iL1ZFUlNJT04JMjAwOS0wMi0yNSAxMzo0MTozMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xICsxIEBACistMi40LjAtcDEKKysyLjQuMC1wMgorZGlmZiAtTmF1cmQgbXBmci0yLjQuMC1hL21wZnIuaCBtcGZyLTIuNC4wLWIvbXBmci5oCistLS0gbXBmci0yLjQuMC1hL21wZnIuaAkyMDA5LTAyLTIwIDE3OjI3OjQ0LjAwMDAwMDAwMCArMDAwMAorKysrIG1wZnItMi40LjAtYi9tcGZyLmgJMjAwOS0wMi0yNSAxMzo0MTozMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yNyw3ICsyNyw3IEBACisgI2RlZmluZSBNUEZSX1ZFUlNJT05fTUFKT1IgMgorICNkZWZpbmUgTVBGUl9WRVJTSU9OX01JTk9SIDQKKyAjZGVmaW5lIE1QRlJfVkVSU0lPTl9QQVRDSExFVkVMIDAKKy0jZGVmaW5lIE1QRlJfVkVSU0lPTl9TVFJJTkcgIjIuNC4wLXAxIgorKyNkZWZpbmUgTVBGUl9WRVJTSU9OX1NUUklORyAiMi40LjAtcDIiCisgCisgLyogTWFjcm9zIGRlYWxpbmcgd2l0aCBNUEZSIFZFUlNJT04gKi8KKyAjZGVmaW5lIE1QRlJfVkVSU0lPTl9OVU0oYSxiLGMpICgoKGEpIDw8IDE2TCkgfCAoKGIpIDw8IDgpIHwgKGMpKQorZGlmZiAtTmF1cmQgbXBmci0yLjQuMC1hL3ByaW50Zi5jIG1wZnItMi40LjAtYi9wcmludGYuYworLS0tIG1wZnItMi40LjAtYS9wcmludGYuYwkyMDA5LTAxLTI2IDEyOjUyOjAxLjAwMDAwMDAwMCArMDAwMAorKysrIG1wZnItMi40LjAtYi9wcmludGYuYwkyMDA5LTAyLTI1IDEzOjQxOjIyLjAwMDAwMDAwMCArMDAwMAorQEAgLTE1NCwxNiArMTU0LDE2IEBACisgICBpbnQgcmV0OworICAgc2l6ZV90IG1pbl9zaXplOworIAorLSAgLyogQzk5IGFsbG93cyBTSVpFIHRvIGJlIG51bGwgKi8KKy0gIGlmIChzaXplID09IDApCistICAgIHJldHVybiAwOworLQorLSAgTVBGUl9BU1NFUlREIChidWYgIT0gTlVMTCk7CistCisgICBHRVRfU1RSIChyZXQsIHN0ciwgZm10KTsKKy0gIG1pbl9zaXplID0gKHNpemVfdClyZXQgPCBzaXplID8gKHNpemVfdClyZXQgOiBzaXplIC0gMTsKKy0gIHN0cm5jcHkgKGJ1Ziwgc3RyLCBtaW5fc2l6ZSk7CistICBidWZbbWluX3NpemUgKyAxXSA9ICdcMCc7CisrCisrICAvKiBDOTkgYWxsb3dzIFNJWkUgdG8gYmUgemVybyAqLworKyAgaWYgKHNpemUgIT0gMCkKKysgICAgeworKyAgICAgIE1QRlJfQVNTRVJUTiAoYnVmICE9IE5VTEwpOworKyAgICAgIG1pbl9zaXplID0gKHNpemVfdClyZXQgPCBzaXplID8gKHNpemVfdClyZXQgOiBzaXplIC0gMTsKKysgICAgICBzdHJuY3B5IChidWYsIHN0ciwgbWluX3NpemUpOworKyAgICAgIGJ1ZlttaW5fc2l6ZV0gPSAnXDAnOworKyAgICB9CisgCisgICBtcGZyX2ZyZWVfc3RyIChzdHIpOworICAgcmV0dXJuIHJldDsKK0BAIC0xNzYsMTYgKzE3NiwxNyBAQAorICAgaW50IHJldDsKKyAgIGludCBtaW5fc2l6ZTsKKyAKKy0gIC8qIEM5OSBhbGxvd3MgU0laRSB0byBiZSBudWxsICovCistICBpZiAoc2l6ZSA9PSAwKQorLSAgICByZXR1cm4gMDsKKysgIEdFVF9TVFJfVkEgKHJldCwgc3RyLCBmbXQsIGFwKTsKKyAKKy0gIE1QRlJfQVNTRVJURCAoYnVmICE9IE5VTEwpOworKyAgLyogQzk5IGFsbG93cyBTSVpFIHRvIGJlIHplcm8gKi8KKysgIGlmIChzaXplICE9IDApCisrICAgIHsKKysgICAgICBNUEZSX0FTU0VSVE4gKGJ1ZiAhPSBOVUxMKTsKKysgICAgICBtaW5fc2l6ZSA9IChzaXplX3QpcmV0IDwgc2l6ZSA/IChzaXplX3QpcmV0IDogc2l6ZSAtIDE7CisrICAgICAgc3RybmNweSAoYnVmLCBzdHIsIG1pbl9zaXplKTsKKysgICAgICBidWZbbWluX3NpemVdID0gJ1wwJzsKKysgICAgfQorIAorLSAgR0VUX1NUUl9WQSAocmV0LCBzdHIsIGZtdCwgYXApOworLSAgbWluX3NpemUgPSAoc2l6ZV90KXJldCA8IHNpemUgPyAoc2l6ZV90KXJldCA6IHNpemUgLSAxOworLSAgc3RybmNweSAoYnVmLCBzdHIsIG1pbl9zaXplKTsKKy0gIGJ1ZlttaW5fc2l6ZSArIDFdID0gJ1wwJzsKKyAgIG1wZnJfZnJlZV9zdHIgKHN0cik7CisgICByZXR1cm4gcmV0OworIH0KK2RpZmYgLU5hdXJkIG1wZnItMi40LjAtYS90ZXN0cy90c3ByaW50Zi5jIG1wZnItMi40LjAtYi90ZXN0cy90c3ByaW50Zi5jCistLS0gbXBmci0yLjQuMC1hL3Rlc3RzL3RzcHJpbnRmLmMJMjAwOS0wMS0yNiAxMjo1MjowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBtcGZyLTIuNC4wLWIvdGVzdHMvdHNwcmludGYuYwkyMDA5LTAyLTI1IDEzOjQxOjIyLjAwMDAwMDAwMCArMDAwMAorQEAgLTcyLDIxICs3MiwzNyBAQAorIAorICAgLyogdGVzdCBtcGZyX3NucHJpbnRmICovCisgICBwID0gKGludCkgKHJhbmRsaW1iICgpICUgbjApOworLSAgbjEgPSBtcGZyX3NucHJpbnRmIChidWZmZXIsIHAsIGZtdCwgeCk7CistICBpZiAoKHAgIT0gMCAmJiBuMCAhPSBuMSkgfHwgKHAgPT0gMCAmJiBuMSAhPSAwKSkKKysgIGlmIChwID09IDAgJiYgKHJhbmRsaW1iICgpICYgMSkgPT0gMCkKKysgICAgeworKyAgICAgIG4xID0gbXBmcl9zbnByaW50ZiAoTlVMTCwgMCwgZm10LCB4KTsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgYnVmZmVyW3BdID0gMTc7CisrICAgICAgbjEgPSBtcGZyX3NucHJpbnRmIChidWZmZXIsIHAsIGZtdCwgeCk7CisrICAgICAgaWYgKGJ1ZmZlcltwXSAhPSAxNykKKysgICAgICAgIHsKKysgICAgICAgICAgcHJpbnRmICgiQnVmZmVyIG92ZXJmbG93IGluIG1wZnJfc25wcmludGYgZm9yIHAgPSAlZCFcbiIsIHApOworKyAgICAgICAgICBleGl0ICgxKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgaWYgKG4wICE9IG4xKQorICAgICB7CisgICAgICAgcHJpbnRmICgiRXJyb3IgaW4gbXBmcl9zbnByaW50ZiAocywgJWQsIFwiJXNcIiwgeCkgcmV0dXJuIHZhbHVlXG4iLAorICAgICAgICAgICAgICAgcCwgZm10KTsKKyAgICAgICBwcmludGYgKCJleHBlY3RlZDogJWRcbmdvdDogICAgICAlZFxuIiwgbjAsIG4xKTsKKyAgICAgICBleGl0ICgxKTsKKyAgICAgfQorLSAgaWYgKHN0cm5jbXAgKGV4cGVjdGVkLCBidWZmZXIsIHApICE9IDApCisrICBpZiAoKHAgPiAxICYmIHN0cm5jbXAgKGV4cGVjdGVkLCBidWZmZXIsIHAtMSkgIT0gMCkKKysgICAgICB8fCAocCA9PSAxICYmIGJ1ZmZlclswXSAhPSAnXDAnKSkKKyAgICAgeworLSAgICAgIHByaW50ZiAoIkVycm9yIGluIG1wZnJfc25wcmludGYgKHMsICVkLCBcIiVzXCIsIHgpO1xuIiwgcCwgZm10KTsKKy0gICAgICBwcmludGYgKCJleHBlY3RlZDogXCIlc1wiXG5nb3Q6ICAgICAgXCIlc1wiXG4iLCBleHBlY3RlZCwgYnVmZmVyKTsKKysgICAgICBjaGFyIHBhcnRfZXhwZWN0ZWRbcF07CisrICAgICAgc3RybmNweSAocGFydF9leHBlY3RlZCwgZXhwZWN0ZWQsIHApOworKyAgICAgIHBhcnRfZXhwZWN0ZWRbcC0xXSA9ICdcMCc7CisrICAgICAgcHJpbnRmICgiRXJyb3IgaW4gbXBmcl92c25wcmludGYgKHMsICVkLCBcIiVzXCIsIC4uLik7XG4iLCBwLCBmbXQpOworKyAgICAgIHByaW50ZiAoImV4cGVjdGVkOiBcIiVzXCJcbmdvdDogICAgICBcIiVzXCJcbiIsIHBhcnRfZXhwZWN0ZWQsIGJ1ZmZlcik7CisgICAgICAgZXhpdCAoMSk7CisgICAgIH0KKy0KKyAgIHJldHVybiBuMDsKKyB9CisgCitAQCAtMTE2LDggKzEzMiwyMSBAQAorIAorICAgLyogdGVzdCBtcGZyX3NucHJpbnRmICovCisgICBwID0gKGludCkgKHJhbmRsaW1iICgpICUgbjApOworLSAgbjEgPSBtcGZyX3ZzbnByaW50ZiAoYnVmZmVyLCBwLCBmbXQsIGFwMSk7CistICBpZiAoKHAgIT0gMCAmJiBuMCAhPSBuMSkgfHwgKHAgPT0gMCAmJiBuMSAhPSAwKSkKKysgIGlmIChwID09IDAgJiYgKHJhbmRsaW1iICgpICYgMSkgPT0gMCkKKysgICAgeworKyAgICAgIG4xID0gbXBmcl92c25wcmludGYgKE5VTEwsIDAsIGZtdCwgYXAxKTsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgYnVmZmVyW3BdID0gMTc7CisrICAgICAgbjEgPSBtcGZyX3ZzbnByaW50ZiAoYnVmZmVyLCBwLCBmbXQsIGFwMSk7CisrICAgICAgaWYgKGJ1ZmZlcltwXSAhPSAxNykKKysgICAgICAgIHsKKysgICAgICAgICAgcHJpbnRmICgiQnVmZmVyIG92ZXJmbG93IGluIG1wZnJfdnNucHJpbnRmIGZvciBwID0gJWQhXG4iLCBwKTsKKysgICAgICAgICAgZXhpdCAoMSk7CisrICAgICAgICB9CisrICAgIH0KKysgIGlmIChuMCAhPSBuMSkKKyAgICAgeworICAgICAgIHByaW50ZiAoIkVycm9yIGluIG1wZnJfdnNucHJpbnRmIChzLCAlZCwgXCIlc1wiLCAuLi4pIHJldHVybiB2YWx1ZVxuIiwKKyAgICAgICAgICAgICAgIHAsIGZtdCk7CitAQCAtMTI2LDEwICsxNTUsMTQgQEAKKyAgICAgICB2YV9lbmQgKGFwMSk7CisgICAgICAgZXhpdCAoMSk7CisgICAgIH0KKy0gIGlmIChzdHJuY21wIChleHBlY3RlZCwgYnVmZmVyLCBwKSAhPSAwKQorKyAgaWYgKChwID4gMSAmJiBzdHJuY21wIChleHBlY3RlZCwgYnVmZmVyLCBwLTEpICE9IDApCisrICAgICAgfHwgKHAgPT0gMSAmJiBidWZmZXJbMF0gIT0gJ1wwJykpCisgICAgIHsKKysgICAgICBjaGFyIHBhcnRfZXhwZWN0ZWRbcF07CisrICAgICAgc3RybmNweSAocGFydF9leHBlY3RlZCwgZXhwZWN0ZWQsIHApOworKyAgICAgIHBhcnRfZXhwZWN0ZWRbcC0xXSA9ICdcMCc7CisgICAgICAgcHJpbnRmICgiRXJyb3IgaW4gbXBmcl92c25wcmludGYgKHMsICVkLCBcIiVzXCIsIC4uLik7XG4iLCBwLCBmbXQpOworLSAgICAgIHByaW50ZiAoImV4cGVjdGVkOiBcIiVzXCJcbmdvdDogICAgICBcIiVzXCJcbiIsIGV4cGVjdGVkLCBidWZmZXIpOworKyAgICAgIHByaW50ZiAoImV4cGVjdGVkOiBcIiVzXCJcbmdvdDogICAgICBcIiVzXCJcbiIsIHBhcnRfZXhwZWN0ZWQsIGJ1ZmZlcik7CisgCisgICAgICAgdmFfZW5kIChhcDEpOworICAgICAgIGV4aXQgKDEpOworZGlmZiAtTmF1cmQgbXBmci0yLjQuMC1hL3ZlcnNpb24uYyBtcGZyLTIuNC4wLWIvdmVyc2lvbi5jCistLS0gbXBmci0yLjQuMC1hL3ZlcnNpb24uYwkyMDA5LTAyLTIwIDE3OjI3OjQ0LjAwMDAwMDAwMCArMDAwMAorKysrIG1wZnItMi40LjAtYi92ZXJzaW9uLmMJMjAwOS0wMi0yNSAxMzo0MTozMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yNSw1ICsyNSw1IEBACisgY29uc3QgY2hhciAqCisgbXBmcl9nZXRfdmVyc2lvbiAodm9pZCkKKyB7CistICByZXR1cm4gIjIuNC4wLXAxIjsKKysgIHJldHVybiAiMi40LjAtcDIiOworIH0KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9tcGZyLzIuNC4xLzEwMC1yZW1haW5kZXItbmVnLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL21wZnIvMi40LjEvMTAwLXJlbWFpbmRlci1uZWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU5Mjc4OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9tcGZyLzIuNC4xLzEwMC1yZW1haW5kZXItbmVnLnBhdGNoCkBAIC0wLDAgKzEsMTIzIEBACitkaWZmIC1OYXVyZCBtcGZyLTIuNC4xLWEvUEFUQ0hFUyBtcGZyLTIuNC4xLWIvUEFUQ0hFUworLS0tIG1wZnItMi40LjEtYS9QQVRDSEVTCTIwMDktMDItMjAgMDk6NDM6MTcuMDAwMDAwMDAwICswMDAwCisrKysgbXBmci0yLjQuMS1iL1BBVENIRVMJMjAwOS0wMi0yNyAxNjo1NjoyOS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEgQEAKKytyZW1haW5kZXItbmVnCitkaWZmIC1OYXVyZCBtcGZyLTIuNC4xLWEvVkVSU0lPTiBtcGZyLTIuNC4xLWIvVkVSU0lPTgorLS0tIG1wZnItMi40LjEtYS9WRVJTSU9OCTIwMDktMDItMjUgMTY6MTY6MDguMDAwMDAwMDAwICswMDAwCisrKysgbXBmci0yLjQuMS1iL1ZFUlNJT04JMjAwOS0wMi0yNyAxNjo1NTozNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xICsxIEBACistMi40LjEKKysyLjQuMS1wMQorZGlmZiAtTmF1cmQgbXBmci0yLjQuMS1hL21wZnIuaCBtcGZyLTIuNC4xLWIvbXBmci5oCistLS0gbXBmci0yLjQuMS1hL21wZnIuaAkyMDA5LTAyLTI1IDE2OjE2OjA4LjAwMDAwMDAwMCArMDAwMAorKysrIG1wZnItMi40LjEtYi9tcGZyLmgJMjAwOS0wMi0yNyAxNjo1NTozOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yNyw3ICsyNyw3IEBACisgI2RlZmluZSBNUEZSX1ZFUlNJT05fTUFKT1IgMgorICNkZWZpbmUgTVBGUl9WRVJTSU9OX01JTk9SIDQKKyAjZGVmaW5lIE1QRlJfVkVSU0lPTl9QQVRDSExFVkVMIDEKKy0jZGVmaW5lIE1QRlJfVkVSU0lPTl9TVFJJTkcgIjIuNC4xIgorKyNkZWZpbmUgTVBGUl9WRVJTSU9OX1NUUklORyAiMi40LjEtcDEiCisgCisgLyogTWFjcm9zIGRlYWxpbmcgd2l0aCBNUEZSIFZFUlNJT04gKi8KKyAjZGVmaW5lIE1QRlJfVkVSU0lPTl9OVU0oYSxiLGMpICgoKGEpIDw8IDE2TCkgfCAoKGIpIDw8IDgpIHwgKGMpKQorZGlmZiAtTmF1cmQgbXBmci0yLjQuMS1hL3JlbTEuYyBtcGZyLTIuNC4xLWIvcmVtMS5jCistLS0gbXBmci0yLjQuMS1hL3JlbTEuYwkyMDA5LTAyLTIwIDA5OjQzOjE3LjAwMDAwMDAwMCArMDAwMAorKysrIG1wZnItMi40LjEtYi9yZW0xLmMJMjAwOS0wMi0yNyAxNjo1NToxNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNzAsNyArMTcwLDEyIEBACisgICAgIH0KKyAKKyAgIGlmIChtcHpfY21wX3VpIChyLCAwKSA9PSAwKQorLSAgICBpbmV4ID0gbXBmcl9zZXRfdWkgKHJlbSwgMCwgR01QX1JORE4pOworKyAgICB7CisrICAgICAgaW5leCA9IG1wZnJfc2V0X3VpIChyZW0sIDAsIEdNUF9STkROKTsKKysgICAgICAvKiB0YWtlIGludG8gYWNjb3VudCBzaWduIG9mIHggKi8KKysgICAgICBpZiAoc2lnbnggPCAwKQorKyAgICAgICAgbXBmcl9uZWcgKHJlbSwgcmVtLCBHTVBfUk5ETik7CisrICAgIH0KKyAgIGVsc2UKKyAgICAgeworICAgICAgIGlmIChybmRfcSA9PSBHTVBfUk5ETikKK0BAIC0xOTAsNiArMTk1LDkgQEAKKyAgICAgICAgICAgICAgICAgKnF1byArPSAxOworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKysgICAgICAvKiB0YWtlIGludG8gYWNjb3VudCBzaWduIG9mIHggKi8KKysgICAgICBpZiAoc2lnbnggPCAwKQorKyAgICAgICAgbXB6X25lZyAociwgcik7CisgICAgICAgaW5leCA9IG1wZnJfc2V0X3ogKHJlbSwgciwgcm5kKTsKKyAgICAgICAvKiBpZiBleCA+IGV5LCByZW0gc2hvdWxkIGJlIG11bHRpcGxpZWQgYnkgMl5leSwgZWxzZSBieSAyXmV4ICovCisgICAgICAgTVBGUl9FWFAgKHJlbSkgKz0gKGV4ID4gZXkpID8gZXkgOiBleDsKK0BAIC0xOTgsMTMgKzIwNiw2IEBACisgICBpZiAocXVvKQorICAgICAqcXVvICo9IHNpZ247CisgCistICAvKiB0YWtlIGludG8gYWNjb3VudCBzaWduIG9mIHggKi8KKy0gIGlmIChzaWdueCA8IDApCistICAgIHsKKy0gICAgICBtcGZyX25lZyAocmVtLCByZW0sIEdNUF9STkROKTsKKy0gICAgICBpbmV4ID0gLWluZXg7CistICAgIH0KKy0KKyAgIG1wel9jbGVhciAobXgpOworICAgbXB6X2NsZWFyIChteSk7CisgICBtcHpfY2xlYXIgKHIpOworZGlmZiAtTmF1cmQgbXBmci0yLjQuMS1hL3Rlc3RzL3RyZW1xdW8uYyBtcGZyLTIuNC4xLWIvdGVzdHMvdHJlbXF1by5jCistLS0gbXBmci0yLjQuMS1hL3Rlc3RzL3RyZW1xdW8uYwkyMDA5LTAyLTIwIDA5OjQzOjE1LjAwMDAwMDAwMCArMDAwMAorKysrIG1wZnItMi40LjEtYi90ZXN0cy90cmVtcXVvLmMJMjAwOS0wMi0yNyAxNjo1NToxNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yNSw2ICsyNSwzNiBAQAorIAorICNpbmNsdWRlICJtcGZyLXRlc3QuaCIKKyAKKytzdGF0aWMgdm9pZAorK2J1ZzIwMDkwMjI3ICh2b2lkKQorK3sKKysgIG1wZnJfdCB4LCB5LCByMSwgcjI7CisrICBpbnQgaW5leDEsIGluZXgyOworKworKyAgbXBmcl9pbml0MiAoeCwgMTE4KTsKKysgIG1wZnJfaW5pdDIgKHksIDE4MSk7CisrICBtcGZyX2luaXQyIChyMSwgMTQwKTsKKysgIG1wZnJfaW5pdDIgKHIyLCAxNDApOworKyAgbXBmcl9zZXRfc2kgKHgsIC0xLCBHTVBfUk5ETik7CisrICBtcGZyX3NldF9zdHJfYmluYXJ5ICh5LCAiMS4xMDAxMDAxMDAwMDExMTExMTAxMTAxMDEwMTAwMDEwMDAxMDAwMDEwMTEwMTAwMDExMDAwMDEwMDAxMTAxMDAxMTAwMDEwMDExMDAwMTEwMDExMDAwMTAxMDAwMTAxMTEwMDAwMDAwMTEwMTExMDAwMDAxMTEwMDExMDEwMDAxMDAxMDEwMDEwMDAwMDAxMDAxMDAxMTEwMDAwMDEwMDAxMDAwMTAxMDAxMTAwMTExMTEwMTAiKTsKKysgIGluZXgxID0gbXBmcl9yZW1haW5kZXIgKHIxLCB4LCB5LCBHTVBfUk5EVSk7CisrICAvKiBzaW5jZSB0aGUgcXVvdGllbnQgaXMgLTEsIHIxIGlzIHRoZSByb3VuZGluZyBvZiB4K3kgKi8KKysgIGluZXgyID0gbXBmcl9hZGQgKHIyLCB4LCB5LCBHTVBfUk5EVSk7CisrICBpZiAobXBmcl9jbXAgKHIxLCByMikpCisrICAgIHsKKysgICAgICBwcmludGYgKCJFcnJvciBpbiBtcGZyX3JlbWFpbmRlciAoYnVnMjAwOTAyMjcpXG4iKTsKKysgICAgICBwcmludGYgKCJFeHBlY3RlZCAiKTsKKysgICAgICBtcGZyX2R1bXAgKHIyKTsKKysgICAgICBwcmludGYgKCJHb3QgICAgICAiKTsKKysgICAgICBtcGZyX2R1bXAgKHIxKTsKKysgICAgICBleGl0ICgxKTsKKysgICAgfQorKyAgbXBmcl9jbGVhciAoeCk7CisrICBtcGZyX2NsZWFyICh5KTsKKysgIG1wZnJfY2xlYXIgKHIxKTsKKysgIG1wZnJfY2xlYXIgKHIyKTsKKyt9CisrCisgaW50CisgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB7CitAQCAtNTAsNiArODAsOCBAQAorIAorICAgdGVzdHNfc3RhcnRfbXBmciAoKTsKKyAKKysgIGJ1ZzIwMDkwMjI3ICgpOworKworICAgbXBmcl9pbml0ICh4KTsKKyAgIG1wZnJfaW5pdCAoeSk7CisgICBtcGZyX2luaXQgKHIpOworZGlmZiAtTmF1cmQgbXBmci0yLjQuMS1hL3ZlcnNpb24uYyBtcGZyLTIuNC4xLWIvdmVyc2lvbi5jCistLS0gbXBmci0yLjQuMS1hL3ZlcnNpb24uYwkyMDA5LTAyLTI1IDE2OjE2OjA4LjAwMDAwMDAwMCArMDAwMAorKysrIG1wZnItMi40LjEtYi92ZXJzaW9uLmMJMjAwOS0wMi0yNyAxNjo1NTozOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yNSw1ICsyNSw1IEBACisgY29uc3QgY2hhciAqCisgbXBmcl9nZXRfdmVyc2lvbiAodm9pZCkKKyB7CistICByZXR1cm4gIjIuNC4xIjsKKysgIHJldHVybiAiMi40LjEtcDEiOworIH0KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9tcGZyLzIuNC4xLzExMC1hc3NlcnQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbXBmci8yLjQuMS8xMTAtYXNzZXJ0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YjZhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbXBmci8yLjQuMS8xMTAtYXNzZXJ0LnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK2RpZmYgLU5hdXJkIG1wZnItMi40LjEtYS9QQVRDSEVTIG1wZnItMi40LjEtYi9QQVRDSEVTCistLS0gbXBmci0yLjQuMS1hL1BBVENIRVMJMjAwOS0wMy0wNCAxMzoxNTowNS4wMDAwMDAwMDAgKzAwMDAKKysrKyBtcGZyLTIuNC4xLWIvUEFUQ0hFUwkyMDA5LTAzLTA0IDEzOjE3OjA0LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSBAQAorK2Fzc2VydAorZGlmZiAtTmF1cmQgbXBmci0yLjQuMS1hL1ZFUlNJT04gbXBmci0yLjQuMS1iL1ZFUlNJT04KKy0tLSBtcGZyLTIuNC4xLWEvVkVSU0lPTgkyMDA5LTAyLTI3IDE2OjU1OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIG1wZnItMi40LjEtYi9WRVJTSU9OCTIwMDktMDMtMDQgMTM6MTY6NDYuMDAwMDAwMDAwICswMDAwCitAQCAtMSArMSBAQAorLTIuNC4xLXAxCisrMi40LjEtcDIKK2RpZmYgLU5hdXJkIG1wZnItMi40LjEtYS9tcGZyLWdtcC5jIG1wZnItMi40LjEtYi9tcGZyLWdtcC5jCistLS0gbXBmci0yLjQuMS1hL21wZnItZ21wLmMJMjAwOS0wMi0yMCAwOTo0MzoxNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBtcGZyLTIuNC4xLWIvbXBmci1nbXAuYwkyMDA5LTAzLTA0IDEzOjE2OjM5LjAwMDAwMDAwMCArMDAwMAorQEAgLTMwMSw3ICszMDEsNyBAQAorICAgICAgIGlmIChsaW5lbnVtICE9IC0xKQorICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJWQ6ICIsIGxpbmVudW0pOworICAgICB9CistICBmcHJpbnRmIChzdGRlcnIsICIgYXNzZXJ0aW9uIGZhaWxlZDogJXNcbiIsIGV4cHIpOworKyAgZnByaW50ZiAoc3RkZXJyLCAiTVBGUiBhc3NlcnRpb24gZmFpbGVkOiAlc1xuIiwgZXhwcik7CisgICBhYm9ydCgpOworIH0KKyAKK2RpZmYgLU5hdXJkIG1wZnItMi40LjEtYS9tcGZyLmggbXBmci0yLjQuMS1iL21wZnIuaAorLS0tIG1wZnItMi40LjEtYS9tcGZyLmgJMjAwOS0wMi0yNyAxNjo1NTozOC4wMDAwMDAwMDAgKzAwMDAKKysrKyBtcGZyLTIuNC4xLWIvbXBmci5oCTIwMDktMDMtMDQgMTM6MTY6NDYuMDAwMDAwMDAwICswMDAwCitAQCAtMjcsNyArMjcsNyBAQAorICNkZWZpbmUgTVBGUl9WRVJTSU9OX01BSk9SIDIKKyAjZGVmaW5lIE1QRlJfVkVSU0lPTl9NSU5PUiA0CisgI2RlZmluZSBNUEZSX1ZFUlNJT05fUEFUQ0hMRVZFTCAxCistI2RlZmluZSBNUEZSX1ZFUlNJT05fU1RSSU5HICIyLjQuMS1wMSIKKysjZGVmaW5lIE1QRlJfVkVSU0lPTl9TVFJJTkcgIjIuNC4xLXAyIgorIAorIC8qIE1hY3JvcyBkZWFsaW5nIHdpdGggTVBGUiBWRVJTSU9OICovCisgI2RlZmluZSBNUEZSX1ZFUlNJT05fTlVNKGEsYixjKSAoKChhKSA8PCAxNkwpIHwgKChiKSA8PCA4KSB8IChjKSkKK2RpZmYgLU5hdXJkIG1wZnItMi40LjEtYS92ZXJzaW9uLmMgbXBmci0yLjQuMS1iL3ZlcnNpb24uYworLS0tIG1wZnItMi40LjEtYS92ZXJzaW9uLmMJMjAwOS0wMi0yNyAxNjo1NTozOC4wMDAwMDAwMDAgKzAwMDAKKysrKyBtcGZyLTIuNC4xLWIvdmVyc2lvbi5jCTIwMDktMDMtMDQgMTM6MTY6NDYuMDAwMDAwMDAwICswMDAwCitAQCAtMjUsNSArMjUsNSBAQAorIGNvbnN0IGNoYXIgKgorIG1wZnJfZ2V0X3ZlcnNpb24gKHZvaWQpCisgeworLSAgcmV0dXJuICIyLjQuMS1wMSI7CisrICByZXR1cm4gIjIuNC4xLXAyIjsKKyB9CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbXBmci8yLjQuMS8xMjAtY2FzdC10by12b2lkLXB0ci5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9tcGZyLzIuNC4xLzEyMC1jYXN0LXRvLXZvaWQtcHRyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NTEzNmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbXBmci8yLjQuMS8xMjAtY2FzdC10by12b2lkLXB0ci5wYXRjaApAQCAtMCwwICsxLDI1IEBACitkaWZmIC1OYXVyZCBtcGZyLTIuNC4xLWEvdGVzdHMvdGZwcmludGYuYyBtcGZyLTIuNC4xLWIvdGVzdHMvdGZwcmludGYuYworLS0tIG1wZnItMi40LjEtYS90ZXN0cy90ZnByaW50Zi5jCTIwMDktMDItMjAgMDk6NDM6MTUuMDAwMDAwMDAwICswMDAwCisrKysgbXBmci0yLjQuMS1iL3Rlc3RzL3RmcHJpbnRmLmMJMjAwOS0wMy0xMCAwMToxMjo0NS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xOTUsNyArMTk1LDcgQEAKKyAgIGNoZWNrX3ZmcHJpbnRmIChmb3V0LCAiYS4gJVB1LCBiLiAlYywgYy4gJVppJVpuIiwgcHJlYywgY2gsIG1weiwgJm1weik7CisgICBjaGVja19sZW5ndGhfd2l0aF9jbXAgKDYsIG1weiwgMTcsIG1wel9jbXBfdWkgKG1weiwgMTcpLCBaaSk7CisgICBjaGVja192ZnByaW50ZiAoZm91dCwgIiUlIGEuICUjLjBSTmcsIGIuICVReCVSbiwgYy4gJXAiLCBtcGZyLCBtcHEsICZtcGZyLAorLSAgICAgICAgICAgICAgICAgICZpKTsKKysgICAgICAgICAgICAgICAgICAodm9pZCAqKSAmaSk7CisgICBjaGVja19sZW5ndGhfd2l0aF9jbXAgKDcsIG1wZnIsIDE2LCBtcGZyX2NtcF91aSAobXBmciwgMTYpLCBSZyk7CisgCisgI2lmbmRlZiBOUFJJTlRGX1QKK2RpZmYgLU5hdXJkIG1wZnItMi40LjEtYS90ZXN0cy90cHJpbnRmLmMgbXBmci0yLjQuMS1iL3Rlc3RzL3RwcmludGYuYworLS0tIG1wZnItMi40LjEtYS90ZXN0cy90cHJpbnRmLmMJMjAwOS0wMi0yMCAwOTo0MzoxNS4wMDAwMDAwMDAgKzAwMDAKKysrKyBtcGZyLTIuNC4xLWIvdGVzdHMvdHByaW50Zi5jCTIwMDktMDMtMTAgMDE6MTI6NDUuMDAwMDAwMDAwICswMDAwCitAQCAtMTkxLDcgKzE5MSw4IEBACisgICBjaGVja19sZW5ndGggKDUsIHN6LCAzNCwgenUpOworICAgY2hlY2tfdnByaW50ZiAoImEuICVQdSwgYi4gJWMsIGMuICVSVUcsIGQuICVaaSVabiIsIHByZWMsIGNoLCBtcGZyLCBtcHosICZtcHopOworICAgY2hlY2tfbGVuZ3RoX3dpdGhfY21wICg2LCBtcHosIDI0LCBtcHpfY21wX3VpIChtcHosIDI0KSwgWmkpOworLSAgY2hlY2tfdnByaW50ZiAoIiUlIGEuICUjLjBSTmcsIGIuICVReCVSbiBjLiAlcCIsIG1wZnIsIG1wcSwgJm1wZnIsICZpKTsKKysgIGNoZWNrX3ZwcmludGYgKCIlJSBhLiAlIy4wUk5nLCBiLiAlUXglUm4gYy4gJXAiLAorKyAgICAgICAgICAgICAgICAgbXBmciwgbXBxLCAmbXBmciwgKHZvaWQgKikgJmkpOworICAgY2hlY2tfbGVuZ3RoX3dpdGhfY21wICg3LCBtcGZyLCAxNiwgbXBmcl9jbXBfdWkgKG1wZnIsIDE2KSwgUmcpOworIAorICNpZm5kZWYgTlBSSU5URl9UCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbXBmci8yLjQuMS8xMzAtdmFzcHJpbnRmLW1wX2xpbWJfdC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9tcGZyLzIuNC4xLzEzMC12YXNwcmludGYtbXBfbGltYl90LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZTIxZjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbXBmci8yLjQuMS8xMzAtdmFzcHJpbnRmLW1wX2xpbWJfdC5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitkaWZmIC1OYXVyZCBtcGZyLTIuNC4xLWEvUEFUQ0hFUyBtcGZyLTIuNC4xLWIvUEFUQ0hFUworLS0tIG1wZnItMi40LjEtYS9QQVRDSEVTCTIwMDktMDMtMTAgMDE6NDQ6MzkuMDAwMDAwMDAwICswMDAwCisrKysgbXBmci0yLjQuMS1iL1BBVENIRVMJMjAwOS0wMy0xMCAwMTo0NDo0MC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEgQEAKKyt2YXNwcmludGYtbXBfbGltYl90CitkaWZmIC1OYXVyZCBtcGZyLTIuNC4xLWEvVkVSU0lPTiBtcGZyLTIuNC4xLWIvVkVSU0lPTgorLS0tIG1wZnItMi40LjEtYS9WRVJTSU9OCTIwMDktMDMtMDQgMTM6MTY6NDYuMDAwMDAwMDAwICswMDAwCisrKysgbXBmci0yLjQuMS1iL1ZFUlNJT04JMjAwOS0wMy0xMCAwMTo0NDo0MC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xICsxIEBACistMi40LjEtcDIKKysyLjQuMS1wNAorZGlmZiAtTmF1cmQgbXBmci0yLjQuMS1hL21wZnIuaCBtcGZyLTIuNC4xLWIvbXBmci5oCistLS0gbXBmci0yLjQuMS1hL21wZnIuaAkyMDA5LTAzLTA0IDEzOjE2OjQ2LjAwMDAwMDAwMCArMDAwMAorKysrIG1wZnItMi40LjEtYi9tcGZyLmgJMjAwOS0wMy0xMCAwMTo0NDo0MC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yNyw3ICsyNyw3IEBACisgI2RlZmluZSBNUEZSX1ZFUlNJT05fTUFKT1IgMgorICNkZWZpbmUgTVBGUl9WRVJTSU9OX01JTk9SIDQKKyAjZGVmaW5lIE1QRlJfVkVSU0lPTl9QQVRDSExFVkVMIDEKKy0jZGVmaW5lIE1QRlJfVkVSU0lPTl9TVFJJTkcgIjIuNC4xLXAyIgorKyNkZWZpbmUgTVBGUl9WRVJTSU9OX1NUUklORyAiMi40LjEtcDQiCisgCisgLyogTWFjcm9zIGRlYWxpbmcgd2l0aCBNUEZSIFZFUlNJT04gKi8KKyAjZGVmaW5lIE1QRlJfVkVSU0lPTl9OVU0oYSxiLGMpICgoKGEpIDw8IDE2TCkgfCAoKGIpIDw8IDgpIHwgKGMpKQorZGlmZiAtTmF1cmQgbXBmci0yLjQuMS1hL3Zhc3ByaW50Zi5jIG1wZnItMi40LjEtYi92YXNwcmludGYuYworLS0tIG1wZnItMi40LjEtYS92YXNwcmludGYuYwkyMDA5LTAyLTIwIDA5OjQzOjE3LjAwMDAwMDAwMCArMDAwMAorKysrIG1wZnItMi40LjEtYi92YXNwcmludGYuYwkyMDA5LTAzLTEwIDAxOjQ0OjQwLjAwMDAwMDAwMCArMDAwMAorQEAgLTM5OCw3ICszOTgsNyBAQAorICAgICAgICAgKHZvaWQpIHZhX2FyZyAoKGFwKSwgbXBxX3NyY3B0cik7ICAgICAgIFwKKyAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgY2FzZSBNUF9MSU1CX0FSRzogICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgKHZvaWQpIHZhX2FyZyAoKGFwKSwgbXBfcHRyKTsgICAgICAgICAgIFwKKysgICAgICAgICh2b2lkKSB2YV9hcmcgKChhcCksIG1wX2xpbWJfdCk7ICAgICAgICBcCisgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGNhc2UgTVBfTElNQl9BUlJBWV9BUkc6ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICh2b2lkKSB2YV9hcmcgKChhcCksIG1wX3B0cik7ICAgICAgICAgICBcCitkaWZmIC1OYXVyZCBtcGZyLTIuNC4xLWEvdmVyc2lvbi5jIG1wZnItMi40LjEtYi92ZXJzaW9uLmMKKy0tLSBtcGZyLTIuNC4xLWEvdmVyc2lvbi5jCTIwMDktMDMtMDQgMTM6MTY6NDYuMDAwMDAwMDAwICswMDAwCisrKysgbXBmci0yLjQuMS1iL3ZlcnNpb24uYwkyMDA5LTAzLTEwIDAxOjQ0OjQwLjAwMDAwMDAwMCArMDAwMAorQEAgLTI1LDUgKzI1LDUgQEAKKyBjb25zdCBjaGFyICoKKyBtcGZyX2dldF92ZXJzaW9uICh2b2lkKQorIHsKKy0gIHJldHVybiAiMi40LjEtcDIiOworKyAgcmV0dXJuICIyLjQuMS1wNCI7CisgfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL21wZnIvMi40LjEvMTQwLXpldGFfdWktc2hpZnQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbXBmci8yLjQuMS8xNDAtemV0YV91aS1zaGlmdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTBjNjk4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL21wZnIvMi40LjEvMTQwLXpldGFfdWktc2hpZnQucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorZGlmZiAtTmF1cmQgbXBmci0yLjQuMS1hL1BBVENIRVMgbXBmci0yLjQuMS1iL1BBVENIRVMKKy0tLSBtcGZyLTIuNC4xLWEvUEFUQ0hFUwkyMDA5LTAzLTEzIDAyOjUwOjQ3LjAwMDAwMDAwMCArMDAwMAorKysrIG1wZnItMi40LjEtYi9QQVRDSEVTCTIwMDktMDMtMTMgMDI6NTA6NDguMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxIEBACisremV0YV91aS1zaGlmdAorZGlmZiAtTmF1cmQgbXBmci0yLjQuMS1hL1ZFUlNJT04gbXBmci0yLjQuMS1iL1ZFUlNJT04KKy0tLSBtcGZyLTIuNC4xLWEvVkVSU0lPTgkyMDA5LTAzLTEwIDAxOjQ0OjQwLjAwMDAwMDAwMCArMDAwMAorKysrIG1wZnItMi40LjEtYi9WRVJTSU9OCTIwMDktMDMtMTMgMDI6NTA6NDguMDAwMDAwMDAwICswMDAwCitAQCAtMSArMSBAQAorLTIuNC4xLXA0CisrMi40LjEtcDUKK2RpZmYgLU5hdXJkIG1wZnItMi40LjEtYS9tcGZyLmggbXBmci0yLjQuMS1iL21wZnIuaAorLS0tIG1wZnItMi40LjEtYS9tcGZyLmgJMjAwOS0wMy0xMCAwMTo0NDo0MC4wMDAwMDAwMDAgKzAwMDAKKysrKyBtcGZyLTIuNC4xLWIvbXBmci5oCTIwMDktMDMtMTMgMDI6NTA6NDguMDAwMDAwMDAwICswMDAwCitAQCAtMjcsNyArMjcsNyBAQAorICNkZWZpbmUgTVBGUl9WRVJTSU9OX01BSk9SIDIKKyAjZGVmaW5lIE1QRlJfVkVSU0lPTl9NSU5PUiA0CisgI2RlZmluZSBNUEZSX1ZFUlNJT05fUEFUQ0hMRVZFTCAxCistI2RlZmluZSBNUEZSX1ZFUlNJT05fU1RSSU5HICIyLjQuMS1wNCIKKysjZGVmaW5lIE1QRlJfVkVSU0lPTl9TVFJJTkcgIjIuNC4xLXA1IgorIAorIC8qIE1hY3JvcyBkZWFsaW5nIHdpdGggTVBGUiBWRVJTSU9OICovCisgI2RlZmluZSBNUEZSX1ZFUlNJT05fTlVNKGEsYixjKSAoKChhKSA8PCAxNkwpIHwgKChiKSA8PCA4KSB8IChjKSkKK2RpZmYgLU5hdXJkIG1wZnItMi40LjEtYS92ZXJzaW9uLmMgbXBmci0yLjQuMS1iL3ZlcnNpb24uYworLS0tIG1wZnItMi40LjEtYS92ZXJzaW9uLmMJMjAwOS0wMy0xMCAwMTo0NDo0MC4wMDAwMDAwMDAgKzAwMDAKKysrKyBtcGZyLTIuNC4xLWIvdmVyc2lvbi5jCTIwMDktMDMtMTMgMDI6NTA6NDguMDAwMDAwMDAwICswMDAwCitAQCAtMjUsNSArMjUsNSBAQAorIGNvbnN0IGNoYXIgKgorIG1wZnJfZ2V0X3ZlcnNpb24gKHZvaWQpCisgeworLSAgcmV0dXJuICIyLjQuMS1wNCI7CisrICByZXR1cm4gIjIuNC4xLXA1IjsKKyB9CitkaWZmIC1OYXVyZCBtcGZyLTIuNC4xLWEvemV0YV91aS5jIG1wZnItMi40LjEtYi96ZXRhX3VpLmMKKy0tLSBtcGZyLTIuNC4xLWEvemV0YV91aS5jCTIwMDktMDItMjAgMDk6NDM6MTcuMDAwMDAwMDAwICswMDAwCisrKysgbXBmci0yLjQuMS1iL3pldGFfdWkuYwkyMDA5LTAzLTEzIDAyOjUwOjQ4LjAwMDAwMDAwMCArMDAwMAorQEAgLTE3Nyw3ICsxNzcsOSBAQAorICAgICAgICAgICAgICAgICAgIG1wel9tdWxfdWkgKHQsIHQsIDIgKiBrIC0gMSk7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIG1wel9kaXZfMmV4cCAodCwgdCwgMSk7CistICAgICAgICAgICAgICBpZiAobiA8IDFVTCA8PCAoQklUU19QRVJfTVBfTElNQiAvIDIpKQorKyAgICAgICAgICAgICAgLyogV2FybmluZzogdGhlIHRlc3QgYmVsb3cgYXNzdW1lcyB0aGF0IGFuIHVuc2lnbmVkIGxvbmcKKysgICAgICAgICAgICAgICAgIGhhcyBubyBwYWRkaW5nIGJpdHMuICovCisrICAgICAgICAgICAgICBpZiAobiA8IDFVTCA8PCAoKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIENIQVJfQklUKSAvIDIpKQorICAgICAgICAgICAgICAgICAvKiAobiAtIGsgKyAxKSAqIChuICsgayAtIDEpIDwgbl4yICovCisgICAgICAgICAgICAgICAgIG1wel9kaXZleGFjdF91aSAodCwgdCwgKG4gLSBrICsgMSkgKiAobiArIGsgLSAxKSk7CisgICAgICAgICAgICAgICBlbHNlCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbXBmci8yLjQuMS8xNTAtdGVzdC10bXVsLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL21wZnIvMi40LjEvMTUwLXRlc3QtdG11bC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yjc1N2QzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL21wZnIvMi40LjEvMTUwLXRlc3QtdG11bC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitkaWZmIC11cCAuL3Rlc3RzL01ha2VmaWxlLmFtLm9yaWcgLi90ZXN0cy9NYWtlZmlsZS5hbQorLS0tIC4vdGVzdHMvTWFrZWZpbGUuYW0ub3JpZwkyMDA5LTA3LTI4IDE2OjI4OjU1LjM3NzA1OTAyMSArMDMwMAorKysrIC4vdGVzdHMvTWFrZWZpbGUuYW0JMjAwOS0wNy0yOCAxNjozMTowMS4xMzY4MTA3MzQgKzAzMDAKK0BAIC0yMCw3ICsyMCw3IEBAIGNoZWNrX1BST0dSQU1TID0gdHZlcnNpb24gdGludGVybmFscyB0aW4KKyAKKyBFWFRSQV9ESVNUID0gdGdlbmVyaWMuYyB0Z2VuZXJpY191aS5jIG1wZl9jb21wYXQuaCBpbnBfc3RyLmRhdGEgdG11bC5kYXQKKyAKKy10bXVsX0NQUEZMQUdTID0gLURNUEZSX1NSQ0RJUj0kKHNyY2RpcikKKyt0bXVsX0NQUEZMQUdTID0gLURNUEZSX1NSQ0RJUj1cIiQoc3JjZGlyKVwiCisgCisgTERBREQgPSBsaWJmcnRlc3RzLmxhICQoTVBGUl9MSUJNKSAkKHRvcF9idWlsZGRpcikvbGlibXBmci5sYQorIElOQ0xVREVTID0gLUkkKHRvcF9zcmNkaXIpIC1JJCh0b3BfYnVpbGRkaXIpCitkaWZmIC11cCAuL3Rlc3RzL3RtdWwuYy5vcmlnIC4vdGVzdHMvdG11bC5jCistLS0gLi90ZXN0cy90bXVsLmMub3JpZwkyMDA5LTA3LTI4IDE2OjI5OjAzLjc2MTA1ODkxOSArMDMwMAorKysrIC4vdGVzdHMvdG11bC5jCTIwMDktMDctMjggMTY6MzA6NDYuMzY5ODEyMjE1ICswMzAwCitAQCAtMjYsMTAgKzI2LDggQEAgTUEgMDIxMTAtMTMwMSwgVVNBLiAqLworICNpbmNsdWRlICJtcGZyLXRlc3QuaCIKKyAKKyAjaWZuZGVmIE1QRlJfU1JDRElSCistI2RlZmluZSBNUEZSX1NSQ0RJUiAuCisrI2RlZmluZSBNUEZSX1NSQ0RJUiAiLiIKKyAjZW5kaWYKKy0jZGVmaW5lIFFVT1RFKFgpIE5BTUUoWCkKKy0jZGVmaW5lIE5BTUUoWCkgI1gKKyAKKyAjaWZkZWYgQ0hFQ0tfRVhURVJOQUwKKyBzdGF0aWMgaW50CitAQCAtNDgyLDEwICs0ODAsMTAgQEAgY2hlY2tfcmVncmVzc2lvbiAodm9pZCkKKyAgIG1wZnJfaW5pdHMyICg2MTc3LCB4LCB5LCB6LCAobXBmcl9wdHIpIDApOworICAgLyogd2UgcmVhZCBsb25nIHN0cmluZ3MgZnJvbSBhIGZpbGUgc2luY2UgSVNPIEM5MCBkb2VzIG5vdCBzdXBwb3J0IHN0cmluZ3Mgb2YKKyAgICAgIGxlbmd0aCA+IDUwOSAqLworLSAgZnAgPSBmb3BlbiAoUVVPVEUgKE1QRlJfU1JDRElSKSIvdG11bC5kYXQiLCAiciIpOworKyAgZnAgPSBmb3BlbiAoTVBGUl9TUkNESVIgIi90bXVsLmRhdCIsICJyIik7CisgICBpZiAoZnAgPT0gTlVMTCkKKyAgICAgeworLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIkVycm9yLCBjYW5ub3Qgb3BlbiAiUVVPVEUgKE1QRlJfU1JDRElSKSIvdG11bC5kYXRcbiIpOworKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIkVycm9yLCBjYW5ub3Qgb3BlbiAiIE1QRlJfU1JDRElSICIvdG11bC5kYXRcbiIpOworICAgICAgIGV4aXQgKDEpOworICAgICB9CisgICBnZXRfc3RyaW5nIChzLCBmcCk7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbXBmci8yLjQuMi8xMDAtc2luX2Nvc191bmRlcmZsb3cucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbXBmci8yLjQuMi8xMDAtc2luX2Nvc191bmRlcmZsb3cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcyMTUxNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9tcGZyLzIuNC4yLzEwMC1zaW5fY29zX3VuZGVyZmxvdy5wYXRjaApAQCAtMCwwICsxLDE4NCBAQAorZGlmZiAtTmF1cmQgbXBmci0yLjQuMi1hL1BBVENIRVMgbXBmci0yLjQuMi1iL1BBVENIRVMKKy0tLSBtcGZyLTIuNC4yLWEvUEFUQ0hFUwkyMDA5LTEyLTA3IDEzOjM3OjEyLjAwMDAwMDAwMCArMDAwMAorKysrIG1wZnItMi40LjItYi9QQVRDSEVTCTIwMDktMTItMDcgMTM6Mzc6MTIuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxIEBACisrc2luX2Nvc191bmRlcmZsb3cKK2RpZmYgLU5hdXJkIG1wZnItMi40LjItYS9WRVJTSU9OIG1wZnItMi40LjItYi9WRVJTSU9OCistLS0gbXBmci0yLjQuMi1hL1ZFUlNJT04JMjAwOS0xMS0zMCAwMjo0MzowOC4wMDAwMDAwMDAgKzAwMDAKKysrKyBtcGZyLTIuNC4yLWIvVkVSU0lPTgkyMDA5LTEyLTA3IDEzOjM3OjEyLjAwMDAwMDAwMCArMDAwMAorQEAgLTEgKzEgQEAKKy0yLjQuMgorKzIuNC4yLXAxCitkaWZmIC1OYXVyZCBtcGZyLTIuNC4yLWEvbXBmci5oIG1wZnItMi40LjItYi9tcGZyLmgKKy0tLSBtcGZyLTIuNC4yLWEvbXBmci5oCTIwMDktMTEtMzAgMDI6NDM6MDguMDAwMDAwMDAwICswMDAwCisrKysgbXBmci0yLjQuMi1iL21wZnIuaAkyMDA5LTEyLTA3IDEzOjM3OjEyLjAwMDAwMDAwMCArMDAwMAorQEAgLTI3LDcgKzI3LDcgQEAKKyAjZGVmaW5lIE1QRlJfVkVSU0lPTl9NQUpPUiAyCisgI2RlZmluZSBNUEZSX1ZFUlNJT05fTUlOT1IgNAorICNkZWZpbmUgTVBGUl9WRVJTSU9OX1BBVENITEVWRUwgMgorLSNkZWZpbmUgTVBGUl9WRVJTSU9OX1NUUklORyAiMi40LjIiCisrI2RlZmluZSBNUEZSX1ZFUlNJT05fU1RSSU5HICIyLjQuMi1wMSIKKyAKKyAvKiBNYWNyb3MgZGVhbGluZyB3aXRoIE1QRlIgVkVSU0lPTiAqLworICNkZWZpbmUgTVBGUl9WRVJTSU9OX05VTShhLGIsYykgKCgoYSkgPDwgMTZMKSB8ICgoYikgPDwgOCkgfCAoYykpCitkaWZmIC1OYXVyZCBtcGZyLTIuNC4yLWEvc2luX2Nvcy5jIG1wZnItMi40LjItYi9zaW5fY29zLmMKKy0tLSBtcGZyLTIuNC4yLWEvc2luX2Nvcy5jCTIwMDktMTEtMzAgMDI6NDM6MDkuMDAwMDAwMDAwICswMDAwCisrKysgbXBmci0yLjQuMi1iL3Npbl9jb3MuYwkyMDA5LTEyLTA3IDEzOjM3OjEyLjAwMDAwMDAwMCArMDAwMAorQEAgLTgyLDE3ICs4MiwxOSBAQAorICAgICAgIGlmICh5ICE9IHgpCisgICAgICAgICAvKiB5IGFuZCB4IGRpZmZlciwgdGh1cyB3ZSBjYW4gc2FmZWx5IHRyeSB0byBjb21wdXRlIHkgZmlyc3QgKi8KKyAgICAgICAgIHsKKy0gICAgICAgICAgTVBGUl9GQVNUX0NPTVBVVEVfSUZfU01BTExfSU5QVVQgKHksIHgsIC0yICogZXhweCwgMiwgMCwgcm5kX21vZGUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGluZXh5ID0gX2luZXhhY3Q7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gc21hbGxfaW5wdXQ7IH0pOworKyAgICAgICAgICBNUEZSX0ZBU1RfQ09NUFVURV9JRl9TTUFMTF9JTlBVVCAoCisrICAgICAgICAgICAgeSwgeCwgLTIgKiBleHB4LCAyLCAwLCBybmRfbW9kZSwKKysgICAgICAgICAgICB7IGluZXh5ID0gX2luZXhhY3Q7CisrICAgICAgICAgICAgICBnb3RvIHNtYWxsX2lucHV0OyB9KTsKKyAgICAgICAgICAgaWYgKDApCisgICAgICAgICAgICAgeworICAgICAgICAgICAgIHNtYWxsX2lucHV0OgorICAgICAgICAgICAgICAgLyogd2UgY2FuIGdvIGhlcmUgb25seSBpZiB3ZSBjYW4gcm91bmQgc2luKHgpICovCistICAgICAgICAgICAgICBNUEZSX0ZBU1RfQ09NUFVURV9JRl9TTUFMTF9JTlBVVCAoeiwgX19nbXBmcl9vbmUsIC0yICogZXhweCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAwLCBybmRfbW9kZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGluZXh6ID0gX2luZXhhY3Q7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsgfSk7CisrICAgICAgICAgICAgICBNUEZSX0ZBU1RfQ09NUFVURV9JRl9TTUFMTF9JTlBVVCAoCisrICAgICAgICAgICAgICAgIHosIF9fZ21wZnJfb25lLCAtMiAqIGV4cHgsIDEsIDAsIHJuZF9tb2RlLAorKyAgICAgICAgICAgICAgICB7IGluZXh6ID0gX2luZXhhY3Q7CisrICAgICAgICAgICAgICAgICAgTVBGUl9TQVZFX0VYUE9fVVBEQVRFX0ZMQUdTIChleHBvLCBfX2dtcGZyX2ZsYWdzKTsKKysgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsgfSk7CisgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAvKiBpZiB3ZSBnbyBoZXJlLCBvbmUgb2YgdGhlIHR3byBNUEZSX0ZBU1RfQ09NUFVURV9JRl9TTUFMTF9JTlBVVAorQEAgLTEwMSwxOCArMTAzLDE5IEBACisgICAgICAgZWxzZSAvKiB5IGFuZCB4IGFyZSB0aGUgc2FtZSB2YXJpYWJsZTogdHJ5IHRvIGNvbXB1dGUgeiBmaXJzdCwgd2hpY2gKKyAgICAgICAgICAgICAgIG5lY2Vzc2FyaWx5IGRpZmZlcnMgKi8KKyAgICAgICAgIHsKKy0gICAgICAgICAgTVBGUl9GQVNUX0NPTVBVVEVfSUZfU01BTExfSU5QVVQgKHosIF9fZ21wZnJfb25lLCAtMiAqIGV4cHgsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAwLCBybmRfbW9kZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgaW5leHogPSBfaW5leGFjdDsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBzbWFsbF9pbnB1dDI7IH0pOworKyAgICAgICAgICBNUEZSX0ZBU1RfQ09NUFVURV9JRl9TTUFMTF9JTlBVVCAoCisrICAgICAgICAgICAgeiwgX19nbXBmcl9vbmUsIC0yICogZXhweCwgMSwgMCwgcm5kX21vZGUsCisrICAgICAgICAgICAgeyBpbmV4eiA9IF9pbmV4YWN0OworKyAgICAgICAgICAgICAgZ290byBzbWFsbF9pbnB1dDI7IH0pOworICAgICAgICAgICBpZiAoMCkKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgc21hbGxfaW5wdXQyOgorICAgICAgICAgICAgICAgLyogd2UgY2FuIGdvIGhlcmUgb25seSBpZiB3ZSBjYW4gcm91bmQgY29zKHgpICovCistICAgICAgICAgICAgICBNUEZSX0ZBU1RfQ09NUFVURV9JRl9TTUFMTF9JTlBVVCAoeSwgeCwgLTIgKiBleHB4LCAyLCAwLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJuZF9tb2RlLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgaW5leHkgPSBfaW5leGFjdDsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kOyB9KTsKKysgICAgICAgICAgICAgIE1QRlJfRkFTVF9DT01QVVRFX0lGX1NNQUxMX0lOUFVUICgKKysgICAgICAgICAgICAgICAgeSwgeCwgLTIgKiBleHB4LCAyLCAwLCBybmRfbW9kZSwKKysgICAgICAgICAgICAgICAgeyBpbmV4eSA9IF9pbmV4YWN0OworKyAgICAgICAgICAgICAgICAgIE1QRlJfU0FWRV9FWFBPX1VQREFURV9GTEFHUyAoZXhwbywgX19nbXBmcl9mbGFncyk7CisrICAgICAgICAgICAgICAgICAgZ290byBlbmQ7IH0pOworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgICBtICs9IDIgKiAoLWV4cHgpOworQEAgLTIwNyw3ICsyMTAsNiBAQAorICAgbXBmcl9jbGVhciAoeHIpOworIAorICBlbmQ6CistICAvKiBGSVhNRTogdXBkYXRlIHRoZSB1bmRlcmZsb3cgZmxhZyBpZiBuZWVkIGJlLiAqLworICAgTVBGUl9TQVZFX0VYUE9fRlJFRSAoZXhwbyk7CisgICBtcGZyX2NoZWNrX3JhbmdlICh5LCBpbmV4eSwgcm5kX21vZGUpOworICAgbXBmcl9jaGVja19yYW5nZSAoeiwgaW5leHosIHJuZF9tb2RlKTsKK2RpZmYgLU5hdXJkIG1wZnItMi40LjItYS90ZXN0cy90c2luX2Nvcy5jIG1wZnItMi40LjItYi90ZXN0cy90c2luX2Nvcy5jCistLS0gbXBmci0yLjQuMi1hL3Rlc3RzL3RzaW5fY29zLmMJMjAwOS0xMS0zMCAwMjo0MzowOC4wMDAwMDAwMDAgKzAwMDAKKysrKyBtcGZyLTIuNC4yLWIvdGVzdHMvdHNpbl9jb3MuYwkyMDA5LTEyLTA3IDEzOjM3OjEyLjAwMDAwMDAwMCArMDAwMAorQEAgLTM4MiwyMyArMzgyLDU2IEBACisgY29uc2lzdGVuY3kgKHZvaWQpCisgeworICAgbXBmcl90IHgsIHMxLCBzMiwgYzEsIGMyOworKyAgbXBfZXhwX3QgZW1pbiwgZW1heDsKKyAgIG1wX3JuZF90IHJuZDsKKysgIHVuc2lnbmVkIGludCBmbGFnc19zaW4sIGZsYWdzX2NvcywgZmxhZ3MsIGZsYWdzX2JlZm9yZSwgZmxhZ3NfcmVmOworKyAgaW50IGluZXhfc2luLCBpbmV4X2NvcywgaW5leCwgaW5leF9yZWY7CisgICBpbnQgaTsKKyAKKysgIGVtaW4gPSBtcGZyX2dldF9lbWluICgpOworKyAgZW1heCA9IG1wZnJfZ2V0X2VtYXggKCk7CisrCisgICBmb3IgKGkgPSAwOyBpIDw9IDEwMDAwOyBpKyspCisgICAgIHsKKyAgICAgICBtcGZyX2luaXQyICh4LCBNUEZSX1BSRUNfTUlOICsgKHJhbmRsaW1iICgpICUgOCkpOworICAgICAgIG1wZnJfaW5pdHMyIChNUEZSX1BSRUNfTUlOICsgKHJhbmRsaW1iICgpICUgOCksIHMxLCBzMiwgYzEsIGMyLAorICAgICAgICAgICAgICAgICAgICAobXBmcl9wdHIpIDApOworLSAgICAgIHRlc3RzX2RlZmF1bHRfcmFuZG9tICh4LCAyNTYsIC01LCA1MCk7CistICAgICAgcm5kID0gUk5EX1JBTkQgKCk7CistICAgICAgbXBmcl9zaW4gKHMxLCB4LCBybmQpOworLSAgICAgIG1wZnJfY29zIChjMSwgeCwgcm5kKTsKKy0gICAgICBtcGZyX3Npbl9jb3MgKHMyLCBjMiwgeCwgcm5kKTsKKy0gICAgICBpZiAoIShtcGZyX2VxdWFsX3AgKHMxLCBzMikgJiYgbXBmcl9lcXVhbF9wIChjMSwgYzIpKSkKKysgICAgICBpZiAoaSA8IDggKiBHTVBfUk5EX01BWCkKKyAgICAgICAgIHsKKy0gICAgICAgICAgcHJpbnRmICgibXBmcl9zaW5fY29zIGFuZCBtcGZyX3Npbi9tcGZyX2NvcyBkaXNhZ3JlZSBvbiAlcyxcbnggPSAiLAorLSAgICAgICAgICAgICAgICAgIG1wZnJfcHJpbnRfcm5kX21vZGUgKHJuZCkpOworKyAgICAgICAgICBpbnQgaiA9IGkgLyBHTVBfUk5EX01BWDsKKysgICAgICAgICAgaWYgKGogJiAxKQorKyAgICAgICAgICAgIG1wZnJfc2V0X2VtaW4gKE1QRlJfRU1JTl9NSU4pOworKyAgICAgICAgICBtcGZyX3NldF9zaSAoeCwgKGogJiAyKSA/IDEgOiAtMSwgR01QX1JORE4pOworKyAgICAgICAgICBtcGZyX3NldF9leHAgKHgsIG1wZnJfZ2V0X2VtaW4gKCkpOworKyAgICAgICAgICBybmQgPSAobXBmcl9ybmRfdCkgKGkgJSBHTVBfUk5EX01BWCk7CisrICAgICAgICAgIGZsYWdzX2JlZm9yZSA9IDA7CisrICAgICAgICAgIGlmIChqICYgNCkKKysgICAgICAgICAgICBtcGZyX3NldF9lbWF4ICgtMTcpOworKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgdGVzdHNfZGVmYXVsdF9yYW5kb20gKHgsIDI1NiwgLTUsIDUwKTsKKysgICAgICAgICAgcm5kID0gUk5EX1JBTkQgKCk7CisrICAgICAgICAgIGZsYWdzX2JlZm9yZSA9IChyYW5kbGltYiAoKSAmIDEpID8KKysgICAgICAgICAgICAodW5zaWduZWQgaW50KSAoTVBGUl9GTEFHU19BTEwgXiBNUEZSX0ZMQUdTX0VSQU5HRSkgOgorKyAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpIDA7CisrICAgICAgICB9CisrICAgICAgX19nbXBmcl9mbGFncyA9IGZsYWdzX2JlZm9yZTsKKysgICAgICBpbmV4X3NpbiA9IG1wZnJfc2luIChzMSwgeCwgcm5kKTsKKysgICAgICBmbGFnc19zaW4gPSBfX2dtcGZyX2ZsYWdzOworKyAgICAgIF9fZ21wZnJfZmxhZ3MgPSBmbGFnc19iZWZvcmU7CisrICAgICAgaW5leF9jb3MgPSBtcGZyX2NvcyAoYzEsIHgsIHJuZCk7CisrICAgICAgZmxhZ3NfY29zID0gX19nbXBmcl9mbGFnczsKKysgICAgICBfX2dtcGZyX2ZsYWdzID0gZmxhZ3NfYmVmb3JlOworKyAgICAgIGluZXggPSAhIW1wZnJfc2luX2NvcyAoczIsIGMyLCB4LCBybmQpOworKyAgICAgIGZsYWdzID0gX19nbXBmcl9mbGFnczsKKysgICAgICBpbmV4X3JlZiA9IGluZXhfc2luIHx8IGluZXhfY29zOworKyAgICAgIGZsYWdzX3JlZiA9IGZsYWdzX3NpbiB8IGZsYWdzX2NvczsKKysgICAgICBpZiAoIShtcGZyX2VxdWFsX3AgKHMxLCBzMikgJiYgbXBmcl9lcXVhbF9wIChjMSwgYzIpKSB8fAorKyAgICAgICAgICBpbmV4ICE9IGluZXhfcmVmIHx8IGZsYWdzICE9IGZsYWdzX3JlZikKKysgICAgICAgIHsKKysgICAgICAgICAgcHJpbnRmICgibXBmcl9zaW5fY29zIGFuZCBtcGZyX3Npbi9tcGZyX2NvcyBkaXNhZ3JlZSBvbiAlcywiCisrICAgICAgICAgICAgICAgICAgIiBpID0gJWRcbnggPSAiLCBtcGZyX3ByaW50X3JuZF9tb2RlIChybmQpLCBpKTsKKyAgICAgICAgICAgbXBmcl9kdW1wICh4KTsKKyAgICAgICAgICAgcHJpbnRmICgiczEgPSAiKTsKKyAgICAgICAgICAgbXBmcl9kdW1wIChzMSk7CitAQCAtNDA4LDkgKzQ0MSwxNiBAQAorICAgICAgICAgICBtcGZyX2R1bXAgKGMxKTsKKyAgICAgICAgICAgcHJpbnRmICgiYzIgPSAiKTsKKyAgICAgICAgICAgbXBmcl9kdW1wIChjMik7CisrICAgICAgICAgIHByaW50ZiAoImluZXhfc2luID0gJWQsIGluZXhfY29zID0gJWQsIGluZXggPSAlZCAoZXhwZWN0ZWQgJWQpXG4iLAorKyAgICAgICAgICAgICAgICAgIGluZXhfc2luLCBpbmV4X2NvcywgaW5leCwgaW5leF9yZWYpOworKyAgICAgICAgICBwcmludGYgKCJmbGFnc19zaW4gPSAweCV4LCBmbGFnc19jb3MgPSAweCV4LCAiCisrICAgICAgICAgICAgICAgICAgImZsYWdzID0gMHgleCAoZXhwZWN0ZWQgMHgleClcbiIsCisrICAgICAgICAgICAgICAgICAgZmxhZ3Nfc2luLCBmbGFnc19jb3MsIGZsYWdzLCBmbGFnc19yZWYpOworICAgICAgICAgICBleGl0ICgxKTsKKyAgICAgICAgIH0KKyAgICAgICBtcGZyX2NsZWFycyAoeCwgczEsIHMyLCBjMSwgYzIsIChtcGZyX3B0cikgMCk7CisrICAgICAgbXBmcl9zZXRfZW1pbiAoZW1pbik7CisrICAgICAgbXBmcl9zZXRfZW1heCAoZW1heCk7CisgICAgIH0KKyB9CisgCitkaWZmIC1OYXVyZCBtcGZyLTIuNC4yLWEvdmVyc2lvbi5jIG1wZnItMi40LjItYi92ZXJzaW9uLmMKKy0tLSBtcGZyLTIuNC4yLWEvdmVyc2lvbi5jCTIwMDktMTEtMzAgMDI6NDM6MDguMDAwMDAwMDAwICswMDAwCisrKysgbXBmci0yLjQuMi1iL3ZlcnNpb24uYwkyMDA5LTEyLTA3IDEzOjM3OjEyLjAwMDAwMDAwMCArMDAwMAorQEAgLTI1LDUgKzI1LDUgQEAKKyBjb25zdCBjaGFyICoKKyBtcGZyX2dldF92ZXJzaW9uICh2b2lkKQorIHsKKy0gIHJldHVybiAiMi40LjIiOworKyAgcmV0dXJuICIyLjQuMi1wMSI7CisgfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL21wZnIvMi40LjIvMTEwLWxvbmdsb25nLmgucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbXBmci8yLjQuMi8xMTAtbG9uZ2xvbmcuaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTg1ZDhlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL21wZnIvMi40LjIvMTEwLWxvbmdsb25nLmgucGF0Y2gKQEAgLTAsMCArMSw3MSBAQAorZGlmZiAtTmF1cmQgbXBmci0yLjQuMi1hL1BBVENIRVMgbXBmci0yLjQuMi1iL1BBVENIRVMKKy0tLSBtcGZyLTIuNC4yLWEvUEFUQ0hFUwkyMDA5LTEyLTE4IDEyOjAzOjMwLjAwMDAwMDAwMCArMDAwMAorKysrIG1wZnItMi40LjItYi9QQVRDSEVTCTIwMDktMTItMTggMTI6MDU6MTkuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxIEBACisrbG9uZ2xvbmcuaAorZGlmZiAtTmF1cmQgbXBmci0yLjQuMi1hL1ZFUlNJT04gbXBmci0yLjQuMi1iL1ZFUlNJT04KKy0tLSBtcGZyLTIuNC4yLWEvVkVSU0lPTgkyMDA5LTEyLTA3IDEzOjM3OjEyLjAwMDAwMDAwMCArMDAwMAorKysrIG1wZnItMi40LjItYi9WRVJTSU9OCTIwMDktMTItMTggMTI6MDU6MDkuMDAwMDAwMDAwICswMDAwCitAQCAtMSArMSBAQAorLTIuNC4yLXAxCisrMi40LjItcDIKK2RpZmYgLU5hdXJkIG1wZnItMi40LjItYS9tcGZyLWxvbmdsb25nLmggbXBmci0yLjQuMi1iL21wZnItbG9uZ2xvbmcuaAorLS0tIG1wZnItMi40LjItYS9tcGZyLWxvbmdsb25nLmgJMjAwOS0xMS0zMCAwMjo0MzowOC4wMDAwMDAwMDAgKzAwMDAKKysrKyBtcGZyLTIuNC4yLWIvbXBmci1sb25nbG9uZy5oCTIwMDktMTItMTggMTI6MDQ6MjkuMDAwMDAwMDAwICswMDAwCitAQCAtMTAxMSw3ICsxMDExLDE1IEBACisgI2VuZGlmIC8qIF9fbTg4MDAwX18gKi8KKyAKKyAjaWYgZGVmaW5lZCAoX19taXBzKSAmJiBXX1RZUEVfU0laRSA9PSAzMgorLSNpZiBfX0dOVUNfXyA+IDIgfHwgX19HTlVDX01JTk9SX18gPj0gNworKyNpZiAoX19HTlVDX18gPj0gNSkgfHwgKF9fR05VQ19fID49IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNCkKKysjZGVmaW5lIHVtdWxfcHBtbSh3MSwgdzAsIHUsIHYpIFwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIFVESXR5cGUgX3I7CQkJCQkJCVwKKysgICAgX3IgPSAoVURJdHlwZSkgdSAqIHY7CQkJCQkJXAorKyAgICAodzEpID0gX3IgPj4gMzI7CQkJCQkJCVwKKysgICAgKHcwKSA9IChVU0l0eXBlKSBfcjsJCQkJCQlcCisrICB9IHdoaWxlICgwKQorKyNlbGlmIF9fR05VQ19fID4gMiB8fCBfX0dOVUNfTUlOT1JfXyA+PSA3CisgI2RlZmluZSB1bXVsX3BwbW0odzEsIHcwLCB1LCB2KSBcCisgICBfX2FzbV9fICgibXVsdHUgJTIsJTMiIDogIj1sIiAodzApLCAiPWgiICh3MSkgOiAiZCIgKHUpLCAiZCIgKHYpKQorICNlbHNlCitAQCAtMTAyNCw3ICsxMDMyLDE2IEBACisgI2VuZGlmIC8qIF9fbWlwcyAqLworIAorICNpZiAoZGVmaW5lZCAoX19taXBzKSAmJiBfX21pcHMgPj0gMykgJiYgV19UWVBFX1NJWkUgPT0gNjQKKy0jaWYgX19HTlVDX18gPiAyIHx8IF9fR05VQ19NSU5PUl9fID49IDcKKysjaWYgKF9fR05VQ19fID49IDUpIHx8IChfX0dOVUNfXyA+PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDQpCisrdHlwZWRlZiB1bnNpZ25lZCBpbnQgVVRJdHlwZSBfX2F0dHJpYnV0ZV9fICgobW9kZSAoVEkpKSk7CisrI2RlZmluZSB1bXVsX3BwbW0odzEsIHcwLCB1LCB2KSBcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBVVEl0eXBlIF9yOwkJCQkJCQlcCisrICAgIF9yID0gKFVUSXR5cGUpIHUgKiB2OwkJCQkJCVwKKysgICAgKHcxKSA9IF9yID4+IDY0OwkJCQkJCQlcCisrICAgICh3MCkgPSAoVURJdHlwZSkgX3I7CQkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysjZWxpZiBfX0dOVUNfXyA+IDIgfHwgX19HTlVDX01JTk9SX18gPj0gNworICNkZWZpbmUgdW11bF9wcG1tKHcxLCB3MCwgdSwgdikgXAorICAgX19hc21fXyAoImRtdWx0dSAlMiwlMyIgOiAiPWwiICh3MCksICI9aCIgKHcxKSA6ICJkIiAodSksICJkIiAodikpCisgI2Vsc2UKK2RpZmYgLU5hdXJkIG1wZnItMi40LjItYS9tcGZyLmggbXBmci0yLjQuMi1iL21wZnIuaAorLS0tIG1wZnItMi40LjItYS9tcGZyLmgJMjAwOS0xMi0wNyAxMzozNzoxMi4wMDAwMDAwMDAgKzAwMDAKKysrKyBtcGZyLTIuNC4yLWIvbXBmci5oCTIwMDktMTItMTggMTI6MDU6MDkuMDAwMDAwMDAwICswMDAwCitAQCAtMjcsNyArMjcsNyBAQAorICNkZWZpbmUgTVBGUl9WRVJTSU9OX01BSk9SIDIKKyAjZGVmaW5lIE1QRlJfVkVSU0lPTl9NSU5PUiA0CisgI2RlZmluZSBNUEZSX1ZFUlNJT05fUEFUQ0hMRVZFTCAyCistI2RlZmluZSBNUEZSX1ZFUlNJT05fU1RSSU5HICIyLjQuMi1wMSIKKysjZGVmaW5lIE1QRlJfVkVSU0lPTl9TVFJJTkcgIjIuNC4yLXAyIgorIAorIC8qIE1hY3JvcyBkZWFsaW5nIHdpdGggTVBGUiBWRVJTSU9OICovCisgI2RlZmluZSBNUEZSX1ZFUlNJT05fTlVNKGEsYixjKSAoKChhKSA8PCAxNkwpIHwgKChiKSA8PCA4KSB8IChjKSkKK2RpZmYgLU5hdXJkIG1wZnItMi40LjItYS92ZXJzaW9uLmMgbXBmci0yLjQuMi1iL3ZlcnNpb24uYworLS0tIG1wZnItMi40LjItYS92ZXJzaW9uLmMJMjAwOS0xMi0wNyAxMzozNzoxMi4wMDAwMDAwMDAgKzAwMDAKKysrKyBtcGZyLTIuNC4yLWIvdmVyc2lvbi5jCTIwMDktMTItMTggMTI6MDU6MDkuMDAwMDAwMDAwICswMDAwCitAQCAtMjUsNSArMjUsNSBAQAorIGNvbnN0IGNoYXIgKgorIG1wZnJfZ2V0X3ZlcnNpb24gKHZvaWQpCisgeworLSAgcmV0dXJuICIyLjQuMi1wMSI7CisrICByZXR1cm4gIjIuNC4yLXAyIjsKKyB9CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbmV3bGliLzEuMTcuMC8xMDAtYXZyMzIucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbmV3bGliLzEuMTcuMC8xMDAtYXZyMzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UwNTIwYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9uZXdsaWIvMS4xNy4wLzEwMC1hdnIzMi5wYXRjaApAQCAtMCwwICsxLDMyNDUwIEBACitkaWZmIC1OYXVyIG5ld2xpYi0xLjE3LjAvQ09QWUlORy5MSUJHTE9TUyBuZXdsaWItMS4xNy4wLW5ldy9DT1BZSU5HLkxJQkdMT1NTCistLS0gbmV3bGliLTEuMTcuMC9DT1BZSU5HLkxJQkdMT1NTCTIwMDgtMTItMTggMDA6MTY6MDcuMDAwMDAwMDAwICswMTAwCisrKysgbmV3bGliLTEuMTcuMC1uZXcvQ09QWUlORy5MSUJHTE9TUwkyMDA5LTA1LTIyIDA5OjU3OjQ5LjAwMDAwMDAwMCArMDIwMAorQEAgLTIyOCwzICsyMjgsMzMgQEAKKyAgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgIFNVQ0ggREFNQUdFLgorKworKygxMykgQXRtZWwgQ29ycG9yYXRpb24gIChhdnIzMiB0YXJnZXRzIG9ubHkpCisrQ29weXJpZ2h0IChjKSAyMDA2LCBBdG1lbCBDb3Jwb3JhdGlvbiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKworK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKworKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyt0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKworKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyt0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisrYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisrCisrMy4gVGhlIG5hbWUgb2YgQVRNRUwgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworK2Rlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKworK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVRNRUwgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUworK09SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKKytQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIEVYUFJFU1NMWSBBTkQgU1BFQ0lGSUNBTExZCisrRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVRNRUwgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorK0lORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKytEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKytTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsKKytPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKytUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorK09SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkKKytXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorZGlmZiAtTmF1ciBuZXdsaWItMS4xNy4wL0NPUFlJTkcuTkVXTElCIG5ld2xpYi0xLjE3LjAtbmV3L0NPUFlJTkcuTkVXTElCCistLS0gbmV3bGliLTEuMTcuMC9DT1BZSU5HLk5FV0xJQgkyMDA4LTEyLTE4IDAwOjE2OjA3LjAwMDAwMDAwMCArMDEwMAorKysrIG5ld2xpYi0xLjE3LjAtbmV3L0NPUFlJTkcuTkVXTElCCTIwMDktMDUtMjIgMDk6NTc6NDkuMDAwMDAwMDAwICswMjAwCitAQCAtNzY3LDMgKzc2NywzMyBAQAorICBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAgU1VDSCBEQU1BR0UuCisrCisrKDM1KSBBdG1lbCBDb3Jwb3JhdGlvbiAgKGF2cjMyIHRhcmdldHMgb25seSkKKytDb3B5cmlnaHQgKGMpIDIwMDYsIEF0bWVsIENvcnBvcmF0aW9uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrCisrUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisrCisrMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorK3RoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisrCisrMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorK3RoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKythbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKysKKyszLiBUaGUgbmFtZSBvZiBBVE1FTCBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisrZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisrCisrVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVE1FTCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTCisrT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorK1BBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRVhQUkVTU0xZIEFORCBTUEVDSUZJQ0FMTFkKKytESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBVE1FTCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisrSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOworK09SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisrT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWQorK1dBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisrUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitkaWZmIC1OYXVyIG5ld2xpYi0xLjE3LjAvbmV3bGliL2NvbmZpZ3VyZS5ob3N0IG5ld2xpYi0xLjE3LjAtbmV3L25ld2xpYi9jb25maWd1cmUuaG9zdAorLS0tIG5ld2xpYi0xLjE3LjAvbmV3bGliL2NvbmZpZ3VyZS5ob3N0CTIwMDgtMTItMTggMDA6MDk6MDkuMDAwMDAwMDAwICswMTAwCisrKysgbmV3bGliLTEuMTcuMC1uZXcvbmV3bGliL2NvbmZpZ3VyZS5ob3N0CTIwMDktMDUtMjIgMDk6NTc6NDkuMDAwMDAwMDAwICswMjAwCitAQCAtOTksNiArOTksMTAgQEAKKyAgIGFybSkKKyAJbWFjaGluZV9kaXI9YXJtCisgCTs7CisrICBhdnIzMiopCisrCW1hY2hpbmVfZGlyPWF2cjMyCisrCW5ld2xpYl9jZmxhZ3M9IiR7bmV3bGliX2NmbGFnc30gLWZmdW5jdGlvbi1zZWN0aW9ucyIKKysJOzsKKyAgIGF2ciopCisgCW5ld2xpYl9jZmxhZ3M9IiR7bmV3bGliX2NmbGFnc30gLURQUkVGRVJfU0laRV9PVkVSX1NQRUVEIC1tY2FsbC1wcm9sb2d1ZXMiCisgCTs7CitAQCAtMzY1LDYgKzM2OSw5IEBACisgICBjcngqKQorIAlzeXNfZGlyPQorIAk7OworKyAgYXZyMzItKi0qKQorKwlzeXNfZGlyPWF2cjMyIAorKwk7OworICAgZDEwdiopCisgCXN5c19kaXI9ZDEwdgorIAk7OworQEAgLTU3NSw2ICs1ODIsMTAgQEAKKyAgIGFyYyopCisgCW5ld2xpYl9jZmxhZ3M9IiR7bmV3bGliX2NmbGFnc30gLURSRUVOVFJBTlRfU1lTQ0FMTFNfUFJPVklERUQiCisgCTs7CisrICBhdnIzMiopCisrCXN5c2NhbGxfZGlyPXN5c2NhbGxzCQorKwluZXdsaWJfY2ZsYWdzPSIke25ld2xpYl9jZmxhZ3N9IC1ESEFWRV9TWVNURU0iCisrCTs7CisgICBhdnIqKQorIAluZXdsaWJfY2ZsYWdzPSIke25ld2xpYl9jZmxhZ3N9IC1ETk9fRVhFQyAtRFNNQUxMX01FTU9SWSAtRE1JU1NJTkdfU1lTQ0FMTF9OQU1FUyIKKyAJOzsKK2RpZmYgLU5hdXIgbmV3bGliLTEuMTcuMC9uZXdsaWIvbGliYy9pbmNsdWRlL21hY2hpbmUvaWVlZWZwLmggbmV3bGliLTEuMTcuMC1uZXcvbmV3bGliL2xpYmMvaW5jbHVkZS9tYWNoaW5lL2llZWVmcC5oCistLS0gbmV3bGliLTEuMTcuMC9uZXdsaWIvbGliYy9pbmNsdWRlL21hY2hpbmUvaWVlZWZwLmgJMjAwOC0xMi0xMSAyMTowNTozOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBuZXdsaWItMS4xNy4wLW5ldy9uZXdsaWIvbGliYy9pbmNsdWRlL21hY2hpbmUvaWVlZWZwLmgJMjAwOS0wNS0yMiAwOTo1Nzo0OS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNzUsNiArMjc1LDEwIEBACisgI2RlZmluZSBfRE9VQkxFX0lTXzMyQklUUworICNlbmRpZgorIAorKyNpZmRlZiBfX0FWUjMyX18KKysjZGVmaW5lIF9fSUVFRV9CSUdfRU5ESUFOCisrI2VuZGlmCisrCisgI2lmIGRlZmluZWQoX19vcjMyX18pIHx8IGRlZmluZWQoX19vcjFrX18pIHx8IGRlZmluZWQoX19vcjE2X18pCisgI2RlZmluZSBfX0lFRUVfQklHX0VORElBTgorICNlbmRpZgorZGlmZiAtTmF1ciBuZXdsaWItMS4xNy4wL25ld2xpYi9saWJjL2luY2x1ZGUvbWFjaGluZS9zZXRqbXAuaCBuZXdsaWItMS4xNy4wLW5ldy9uZXdsaWIvbGliYy9pbmNsdWRlL21hY2hpbmUvc2V0am1wLmgKKy0tLSBuZXdsaWItMS4xNy4wL25ld2xpYi9saWJjL2luY2x1ZGUvbWFjaGluZS9zZXRqbXAuaAkyMDA4LTEyLTExIDIxOjA1OjM4LjAwMDAwMDAwMCArMDEwMAorKysrIG5ld2xpYi0xLjE3LjAtbmV3L25ld2xpYi9saWJjL2luY2x1ZGUvbWFjaGluZS9zZXRqbXAuaAkyMDA5LTA1LTIyIDA5OjU3OjQ5LjAwMDAwMDAwMCArMDIwMAorQEAgLTEzLDYgKzEzLDEzIEBACisgI2RlZmluZSBfSkJMRU4gMjQKKyAjZW5kaWYKKyAKKysjaWYgZGVmaW5lZChfX0FWUjMyX18pCisrLyoKKysgIHIwLXI3LCBsciwgc3AKKysgKi8KKysjZGVmaW5lIF9KQkxFTiAxMAorKyNlbmRpZgorKworICNpZmRlZiBfX3NwYXJjX18KKyAvKgorICAqIG9uc3N0YWNrLHNpZ21hc2ssc3AscGMsbnBjLHBzcixnMSxvMCx3YmNudCAoc2lnY29udGV4dCkuCitkaWZmIC1OYXVyIG5ld2xpYi0xLjE3LjAvbmV3bGliL2xpYmMvaW5jbHVkZS9tYWNoaW5lL3RpbWUuaCBuZXdsaWItMS4xNy4wLW5ldy9uZXdsaWIvbGliYy9pbmNsdWRlL21hY2hpbmUvdGltZS5oCistLS0gbmV3bGliLTEuMTcuMC9uZXdsaWIvbGliYy9pbmNsdWRlL21hY2hpbmUvdGltZS5oCTIwMDAtMTItMDQgMjA6MDY6MzcuMDAwMDAwMDAwICswMTAwCisrKysgbmV3bGliLTEuMTcuMC1uZXcvbmV3bGliL2xpYmMvaW5jbHVkZS9tYWNoaW5lL3RpbWUuaAkyMDA5LTA1LTIyIDA5OjU3OjQ5LjAwMDAwMDAwMCArMDIwMAorQEAgLTYsNiArNiwxMCBAQAorICNlbHNlICAvKiAhX19ydGVtc19fICovCisgI2lmIGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX3RodW1iX18pCisgI2RlZmluZSBfQ0xPQ0tTX1BFUl9TRUNfIDEwMAorKyNlbHNlCisrI2lmIGRlZmluZWQoX19BVlIzMl9fKQorKyNkZWZpbmUgX0NMT0NLU19QRVJfU0VDXyAxMDAwMDAwCisrI2VuZGlmCisgI2VuZGlmCisgI2VuZGlmIC8qICFfX3J0ZW1zX18gKi8KKyAKK2RpZmYgLU5hdXIgbmV3bGliLTEuMTcuMC9uZXdsaWIvbGliYy9tYWNoaW5lL2F2cjMyL2FjbG9jYWwubTQgbmV3bGliLTEuMTcuMC1uZXcvbmV3bGliL2xpYmMvbWFjaGluZS9hdnIzMi9hY2xvY2FsLm00CistLS0gbmV3bGliLTEuMTcuMC9uZXdsaWIvbGliYy9tYWNoaW5lL2F2cjMyL2FjbG9jYWwubTQJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBuZXdsaWItMS4xNy4wLW5ldy9uZXdsaWIvbGliYy9tYWNoaW5lL2F2cjMyL2FjbG9jYWwubTQJMjAwOS0wNS0yMiAwOTo1Nzo0OS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMzgyIEBACisrZG5sIGFjbG9jYWwubTQgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgYWNsb2NhbCAxLjQtcDYKKysKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LTgsIDE5OTksIDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisrZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisrZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKysKKytkbmwgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrZG5sIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisrZG5sIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKytkbmwgUEFSVElDVUxBUiBQVVJQT1NFLgorKworK2RubCBUaGlzIHByb3ZpZGVzIGNvbmZpZ3VyZSBkZWZpbml0aW9ucyB1c2VkIGJ5IGFsbCB0aGUgbmV3bGliCisrZG5sIGNvbmZpZ3VyZS5pbiBmaWxlcy4KKysKKytkbmwgQmFzaWMgbmV3bGliIGNvbmZpZ3VyeS4gIFRoaXMgY2FsbHMgYmFzaWMgaW50cm9kdWN0b3J5IHN0dWZmLAorK2RubCBpbmNsdWRpbmcgQU1fSU5JVF9BVVRPTUFLRSBhbmQgQUNfQ0FOT05JQ0FMX0hPU1QuICBJdCBhbHNvIHJ1bnMKKytkbmwgY29uZmlndXJlLmhvc3QuICBUaGUgb25seSBhcmd1bWVudCBpcyB0aGUgcmVsYXRpdmUgcGF0aCB0byB0aGUgdG9wCisrZG5sIG5ld2xpYiBkaXJlY3RvcnkuCisrCisrQUNfREVGVU4oTkVXTElCX0NPTkZJR1VSRSwKKytbCisrZG5sIERlZmF1bHQgdG8gLS1lbmFibGUtbXVsdGlsaWIKKytBQ19BUkdfRU5BQkxFKG11bHRpbGliLAorK1sgIC0tZW5hYmxlLW11bHRpbGliICAgICAgICAgYnVpbGQgbWFueSBsaWJyYXJ5IHZlcnNpb25zIChkZWZhdWx0KV0sCisrW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIHllcykgbXVsdGlsaWI9eWVzIDs7CisrICBubykgIG11bHRpbGliPW5vIDs7CisrICAqKSAgIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciBtdWx0aWxpYiBvcHRpb24pIDs7CisrIGVzYWNdLCBbbXVsdGlsaWI9eWVzXSlkbmwKKysKKytkbmwgU3VwcG9ydCAtLWVuYWJsZS10YXJnZXQtb3B0c3BhY2UKKytBQ19BUkdfRU5BQkxFKHRhcmdldC1vcHRzcGFjZSwKKytbICAtLWVuYWJsZS10YXJnZXQtb3B0c3BhY2UgIG9wdGltaXplIGZvciBzcGFjZV0sCisrW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIHllcykgdGFyZ2V0X29wdHNwYWNlPXllcyA7OworKyAgbm8pICB0YXJnZXRfb3B0c3BhY2U9bm8gOzsKKysgICopICAgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIHRhcmdldC1vcHRzcGFjZSBvcHRpb24pIDs7CisrIGVzYWNdLCBbdGFyZ2V0X29wdHNwYWNlPV0pZG5sCisrCisrZG5sIFN1cHBvcnQgLS1lbmFibGUtbWFsbG9jLWRlYnVnZ2luZyAtIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCBmb3IgQ3lnd2luCisrQUNfQVJHX0VOQUJMRShtYWxsb2MtZGVidWdnaW5nLAorK1sgIC0tZW5hYmxlLW1hbGxvYy1kZWJ1Z2dpbmcgaW5kaWNhdGUgbWFsbG9jIGRlYnVnZ2luZyByZXF1ZXN0ZWRdLAorK1tjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICB5ZXMpIG1hbGxvY19kZWJ1Z2dpbmc9eWVzIDs7CisrICBubykgIG1hbGxvY19kZWJ1Z2dpbmc9bm8gOzsKKysgICopICAgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIG1hbGxvYy1kZWJ1Z2dpbmcgb3B0aW9uKSA7OworKyBlc2FjXSwgW21hbGxvY19kZWJ1Z2dpbmc9XSlkbmwKKysKKytkbmwgU3VwcG9ydCAtLWVuYWJsZS1uZXdsaWItbWIKKytBQ19BUkdfRU5BQkxFKG5ld2xpYi1tYiwKKytbICAtLWVuYWJsZS1uZXdsaWItbWIgICAgICAgIGVuYWJsZSBtdWx0aWJ5dGUgc3VwcG9ydF0sCisrW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIHllcykgbmV3bGliX21iPXllcyA7OworKyAgbm8pICBuZXdsaWJfbWI9bm8gOzsKKysgICopICAgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIG5ld2xpYi1tYiBvcHRpb24pIDs7CisrIGVzYWNdLCBbbmV3bGliX21iPV0pZG5sCisrCisrZG5sIFN1cHBvcnQgLS1lbmFibGUtbmV3bGliLWljb252CisrQUNfQVJHX0VOQUJMRShuZXdsaWItaWNvbnYsCisrWyAgLS1lbmFibGUtbmV3bGliLWljb252ICAgICBlbmFibGUgaWNvbnYgbGlicmFyeSBzdXBwb3J0XSwKKytbY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgeWVzKSBuZXdsaWJfaWNvbnY9eWVzIDs7CisrICBubykgIG5ld2xpYl9pY29udj1ubyA7OworKyAgKikgICBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgbmV3bGliLWljb252IG9wdGlvbikgOzsKKysgZXNhY10sIFtuZXdsaWJfaWNvbnY9XSlkbmwKKysKKytkbmwgU3VwcG9ydCAtLWVuYWJsZS1uZXdsaWItYnVpbHRpbi1jb252ZXJ0ZXJzCisrQUNfQVJHX0VOQUJMRShuZXdsaWItYnVpbHRpbi1jb252ZXJ0ZXJzLAorK1sgIC0tZW5hYmxlLW5ld2xpYi1idWlsdGluLWNvbnZlcnRlcnMgICBlbmFibGUgc3BlY2lmaWMgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgaWNvbnYgY29udmVydGVycyB0byBiZSBidWlsdC1pbl0sCisrW2lmIHRlc3QgeCR7ZW5hYmxldmFsfSA9IHg7IHRoZW4KKysgICBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgbmV3bGliLWJ1aWx0aW4tY29udmVydGVycyBvcHRpb24gLSB1c2UgY29tbWEtc2VwYXJhdGVkIGxpc3QpCisrIGZpCisrIGJ1aWx0aW5fY29udmVydGVycz0ke2VuYWJsZXZhbH0KKysgXSwgW2J1aWx0aW5fY29udmVydGVycz1dKWRubAorKworK2RubCBTdXBwb3J0IC0tZW5hYmxlLW5ld2xpYi1tdWx0aXRocmVhZAorK0FDX0FSR19FTkFCTEUobmV3bGliLW11bHRpdGhyZWFkLAorK1sgIC0tZW5hYmxlLW5ld2xpYi1tdWx0aXRocmVhZCAgICAgICAgZW5hYmxlIHN1cHBvcnQgZm9yIG11bHRpcGxlIHRocmVhZHNdLAorK1tjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICB5ZXMpIG5ld2xpYl9tdWx0aXRocmVhZD15ZXMgOzsKKysgIG5vKSAgbmV3bGliX211bHRpdGhyZWFkPW5vIDs7CisrICAqKSAgIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciBuZXdsaWItbXVsdGl0aHJlYWQgb3B0aW9uKSA7OworKyBlc2FjXSwgW25ld2xpYl9tdWx0aXRocmVhZD15ZXNdKWRubAorKworK2RubCBTdXBwb3J0IC0tZW5hYmxlLW5ld2xpYi1lbGl4LWxldmVsCisrQUNfQVJHX0VOQUJMRShuZXdsaWItZWxpeC1sZXZlbCwKKytbICAtLWVuYWJsZS1uZXdsaWItZWxpeC1sZXZlbCAgICAgICAgIHN1cHBseSBkZXNpcmVkIGVsaXggbGlicmFyeSBsZXZlbCAoMS00KV0sCisrW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIDApICAgbmV3bGliX2VsaXhfbGV2ZWw9MCA7OworKyAgMSkgICBuZXdsaWJfZWxpeF9sZXZlbD0xIDs7CisrICAyKSAgIG5ld2xpYl9lbGl4X2xldmVsPTIgOzsKKysgIDMpICAgbmV3bGliX2VsaXhfbGV2ZWw9MyA7OworKyAgNCkgICBuZXdsaWJfZWxpeF9sZXZlbD00IDs7CisrICAqKSAgIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciBuZXdsaWItZWxpeC1sZXZlbCBvcHRpb24pIDs7CisrIGVzYWNdLCBbbmV3bGliX2VsaXhfbGV2ZWw9MF0pZG5sCisrCisrZG5sIFN1cHBvcnQgLS1kaXNhYmxlLW5ld2xpYi1pby1mbG9hdAorK0FDX0FSR19FTkFCTEUobmV3bGliLWlvLWZsb2F0LAorK1sgIC0tZGlzYWJsZS1uZXdsaWItaW8tZmxvYXQgZGlzYWJsZSBwcmludGYvc2NhbmYgZmFtaWx5IGZsb2F0IHN1cHBvcnRdLAorK1tjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICB5ZXMpIG5ld2xpYl9pb19mbG9hdD15ZXMgOzsKKysgIG5vKSAgbmV3bGliX2lvX2Zsb2F0PW5vIDs7CisrICAqKSAgIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciBuZXdsaWItaW8tZmxvYXQgb3B0aW9uKSA7OworKyBlc2FjXSwgW25ld2xpYl9pb19mbG9hdD15ZXNdKWRubAorKworK2RubCBTdXBwb3J0IC0tZGlzYWJsZS1uZXdsaWItc3VwcGxpZWQtc3lzY2FsbHMKKytBQ19BUkdfRU5BQkxFKG5ld2xpYi1zdXBwbGllZC1zeXNjYWxscywKKytbICAtLWRpc2FibGUtbmV3bGliLXN1cHBsaWVkLXN5c2NhbGxzIGRpc2FibGUgbmV3bGliIGZyb20gc3VwcGx5aW5nIHN5c2NhbGxzXSwKKytbY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgeWVzKSBuZXdsaWJfbWF5X3N1cHBseV9zeXNjYWxscz15ZXMgOzsKKysgIG5vKSAgbmV3bGliX21heV9zdXBwbHlfc3lzY2FsbHM9bm8gOzsKKysgICopICAgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIG5ld2xpYi1zdXBwbGllZC1zeXNjYWxscyBvcHRpb24pIDs7CisrIGVzYWNdLCBbbmV3bGliX21heV9zdXBwbHlfc3lzY2FsbHM9eWVzXSlkbmwKKysKKytBTV9DT05ESVRJT05BTChNQVlfU1VQUExZX1NZU0NBTExTLCB0ZXN0IHhbJF17bmV3bGliX21heV9zdXBwbHlfc3lzY2FsbHN9ID0geHllcykKKysKKytkbmwgV2UgbWF5IGdldCBvdGhlciBvcHRpb25zIHdoaWNoIHdlIGRvbid0IGRvY3VtZW50OgorK2RubCAtLXdpdGgtdGFyZ2V0LXN1YmRpciwgLS13aXRoLW11bHRpc3JjdG9wLCAtLXdpdGgtbXVsdGlzdWJkaXIKKysKKyt0ZXN0IC16ICJbJF17d2l0aF90YXJnZXRfc3ViZGlyfSIgJiYgd2l0aF90YXJnZXRfc3ViZGlyPS4KKysKKytpZiB0ZXN0ICJbJF17c3JjZGlyfSIgPSAiLiI7IHRoZW4KKysgIGlmIHRlc3QgIlskXXt3aXRoX3RhcmdldF9zdWJkaXJ9IiAhPSAiLiI7IHRoZW4KKysgICAgbmV3bGliX2Jhc2VkaXI9IlskXXtzcmNkaXJ9L1skXXt3aXRoX211bHRpc3JjdG9wfS4uLyQxIgorKyAgZWxzZQorKyAgICBuZXdsaWJfYmFzZWRpcj0iWyRde3NyY2Rpcn0vWyRde3dpdGhfbXVsdGlzcmN0b3B9JDEiCisrICBmaQorK2Vsc2UKKysgIG5ld2xpYl9iYXNlZGlyPSJbJF17c3JjZGlyfS8kMSIKKytmaQorK0FDX1NVQlNUKG5ld2xpYl9iYXNlZGlyKQorKworK0FDX0NBTk9OSUNBTF9TWVNURU0KKysKKytBTV9JTklUX0FVVE9NQUtFKG5ld2xpYiwgMS4xMi4wKQorKworKyMgRklYTUU6IFdlIHRlbXBvcmFyaWx5IGRlZmluZSBvdXIgb3duIHZlcnNpb24gb2YgQUNfUFJPR19DQy4gIFRoaXMgaXMKKysjIGNvcGllZCBmcm9tIGF1dG9jb25mIDIuMTIsIGJ1dCBkb2VzIG5vdCBjYWxsIEFDX1BST0dfQ0NfV09SS1MuICBXZQorKyMgYXJlIHByb2JhYmx5IHVzaW5nIGEgY3Jvc3MgY29tcGlsZXIsIHdoaWNoIHdpbGwgbm90IGJlIGFibGUgdG8gZnVsbHkKKysjIGxpbmsgYW4gZXhlY3V0YWJsZS4gIFRoaXMgc2hvdWxkIHJlYWxseSBiZSBmaXhlZCBpbiBhdXRvY29uZgorKyMgaXRzZWxmLgorKworK0FDX0RFRlVOKExJQl9BQ19QUk9HX0NDLAorK1tBQ19CRUZPUkUoWyQwXSwgW0FDX1BST0dfQ1BQXSlkbmwKKytBQ19DSEVDS19QUk9HKENDLCBnY2MsIGdjYykKKytpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisrICBBQ19DSEVDS19QUk9HKENDLCBjYywgY2MsICwgLCAvdXNyL3VjYi9jYykKKysgIHRlc3QgLXogIiRDQyIgJiYgQUNfTVNHX0VSUk9SKFtubyBhY2NlcHRhYmxlIGNjIGZvdW5kIGluIFwkUEFUSF0pCisrZmkKKysKKytBQ19QUk9HX0NDX0dOVQorKworK2lmIHRlc3QgJGFjX2N2X3Byb2dfZ2NjID0geWVzOyB0aGVuCisrICBHQ0M9eWVzCisrZG5sIENoZWNrIHdoZXRoZXIgLWcgd29ya3MsIGV2ZW4gaWYgQ0ZMQUdTIGlzIHNldCwgaW4gY2FzZSB0aGUgcGFja2FnZQorK2RubCBwbGF5cyBhcm91bmQgd2l0aCBDRkxBR1MgKHN1Y2ggYXMgdG8gYnVpbGQgYm90aCBkZWJ1Z2dpbmcgYW5kCisrZG5sIG5vcm1hbCB2ZXJzaW9ucyBvZiBhIGxpYnJhcnkpLCB0YXN0ZWxlc3MgYXMgdGhhdCBpZGVhIGlzLgorKyAgYWNfdGVzdF9DRkxBR1M9IiR7Q0ZMQUdTK3NldH0iCisrICBhY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKKysgIENGTEFHUz0KKysgIEFDX1BST0dfQ0NfRworKyAgaWYgdGVzdCAiJGFjX3Rlc3RfQ0ZMQUdTIiA9IHNldDsgdGhlbgorKyAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKKysgIGVsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jY19nID0geWVzOyB0aGVuCisrICAgIENGTEFHUz0iLWcgLU8yIgorKyAgZWxzZQorKyAgICBDRkxBR1M9Ii1PMiIKKysgIGZpCisrZWxzZQorKyAgR0NDPQorKyAgdGVzdCAiJHtDRkxBR1Mrc2V0fSIgPSBzZXQgfHwgQ0ZMQUdTPSItZyIKKytmaQorK10pCisrCisrTElCX0FDX1BST0dfQ0MKKysKKytBQ19DSEVDS19UT09MKEFTLCBhcykKKytBQ19DSEVDS19UT09MKEFSLCBhcikKKytBQ19DSEVDS19UT09MKFJBTkxJQiwgcmFubGliLCA6KQorKworK0FDX1BST0dfSU5TVEFMTAorKworK0FNX01BSU5UQUlORVJfTU9ERQorKworKyMgV2UgbmVlZCBBQ19FWEVFWFQgdG8ga2VlcCBhdXRvbWFrZSBoYXBweSBpbiBjeWdudXMgbW9kZS4gIEhvd2V2ZXIsCisrIyBhdCBsZWFzdCBjdXJyZW50bHksIHdlIG5ldmVyIGFjdHVhbGx5IGJ1aWxkIGEgcHJvZ3JhbSwgc28gd2UgbmV2ZXIKKysjIG5lZWQgdG8gdXNlICQoRVhFRVhUKS4gIE1vcmVvdmVyLCB0aGUgdGVzdCBmb3IgRVhFRVhUIG5vcm1hbGx5CisrIyBmYWlscywgYmVjYXVzZSB3ZSBhcmUgcHJvYmFibHkgY29uZmlndXJpbmcgd2l0aCBhIGNyb3NzIGNvbXBpbGVyCisrIyB3aGljaCBjYW4ndCBjcmVhdGUgZXhlY3V0YWJsZXMuICBTbyB3ZSBpbmNsdWRlIEFDX0VYRUVYVCB0byBrZWVwCisrIyBhdXRvbWFrZSBoYXBweSwgYnV0IHdlIGRvbid0IGV4ZWN1dGUgaXQsIHNpbmNlIHdlIGRvbid0IGNhcmUgYWJvdXQKKysjIHRoZSByZXN1bHQuCisraWYgZmFsc2U7IHRoZW4KKysgIEFDX0VYRUVYVAorK2ZpCisrCisrLiBbJF17bmV3bGliX2Jhc2VkaXJ9L2NvbmZpZ3VyZS5ob3N0CisrCisrbmV3bGliX2NmbGFncz0iWyRde25ld2xpYl9jZmxhZ3N9IC1mbm8tYnVpbHRpbiIKKysKKytORVdMSUJfQ0ZMQUdTPSR7bmV3bGliX2NmbGFnc30KKytBQ19TVUJTVChORVdMSUJfQ0ZMQUdTKQorKworK0xERkxBR1M9JHtsZGZsYWdzfQorK0FDX1NVQlNUKExERkxBR1MpCisrCisrQU1fQ09ORElUSU9OQUwoRUxJWF9MRVZFTF8wLCB0ZXN0IHhbJF17bmV3bGliX2VsaXhfbGV2ZWx9ID0geDApCisrQU1fQ09ORElUSU9OQUwoRUxJWF9MRVZFTF8xLCB0ZXN0IHhbJF17bmV3bGliX2VsaXhfbGV2ZWx9ID0geDEpCisrQU1fQ09ORElUSU9OQUwoRUxJWF9MRVZFTF8yLCB0ZXN0IHhbJF17bmV3bGliX2VsaXhfbGV2ZWx9ID0geDIpCisrQU1fQ09ORElUSU9OQUwoRUxJWF9MRVZFTF8zLCB0ZXN0IHhbJF17bmV3bGliX2VsaXhfbGV2ZWx9ID0geDMpCisrQU1fQ09ORElUSU9OQUwoRUxJWF9MRVZFTF80LCB0ZXN0IHhbJF17bmV3bGliX2VsaXhfbGV2ZWx9ID0geDQpCisrCisrQU1fQ09ORElUSU9OQUwoVVNFX0xJQlRPT0wsIHRlc3QgeFskXXt1c2VfbGlidG9vbH0gPSB4eWVzKQorKworKyMgSGFyZC1jb2RlIE9CSkVYVC4gIE5vcm1hbGx5IGl0IGlzIHNldCBieSBBQ19PQkpFWFQsIGJ1dCB3ZQorKyMgdXNlIG9leHQsIHdoaWNoIGlzIHNldCBpbiBjb25maWd1cmUuaG9zdCBiYXNlZCBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLgorK09CSkVYVD0ke29leHR9CisrCisrQUNfU1VCU1QoT0JKRVhUKQorK0FDX1NVQlNUKG9leHQpCisrQUNfU1VCU1QoYWV4dCkKKysKKytBQ19TVUJTVChsaWJtX21hY2hpbmVfZGlyKQorK0FDX1NVQlNUKG1hY2hpbmVfZGlyKQorK0FDX1NVQlNUKHN5c19kaXIpCisrXSkKKysKKysjIERvIGFsbCB0aGUgd29yayBmb3IgQXV0b21ha2UuICBUaGlzIG1hY3JvIGFjdHVhbGx5IGRvZXMgdG9vIG11Y2ggLS0KKysjIHNvbWUgY2hlY2tzIGFyZSBvbmx5IG5lZWRlZCBpZiB5b3VyIHBhY2thZ2UgZG9lcyBjZXJ0YWluIHRoaW5ncy4KKysjIEJ1dCB0aGlzIGlzbid0IHJlYWxseSBhIGJpZyBkZWFsLgorKworKyMgc2VyaWFsIDEKKysKKytkbmwgVXNhZ2U6CisrZG5sIEFNX0lOSVRfQVVUT01BS0UocGFja2FnZSx2ZXJzaW9uLCBbbm8tZGVmaW5lXSkKKysKKytBQ19ERUZVTihbQU1fSU5JVF9BVVRPTUFLRV0sCisrW0FDX1JFUVVJUkUoW0FNX1NFVF9DVVJSRU5UX0FVVE9NQUtFX1ZFUlNJT05dKWRubAorK0FDX1JFUVVJUkUoW0FDX1BST0dfSU5TVEFMTF0pCisrUEFDS0FHRT1bJDFdCisrQUNfU1VCU1QoUEFDS0FHRSkKKytWRVJTSU9OPVskMl0KKytBQ19TVUJTVChWRVJTSU9OKQorK2RubCB0ZXN0IHRvIHNlZSBpZiBzcmNkaXIgYWxyZWFkeSBjb25maWd1cmVkCisraWYgdGVzdCAiYGNkICRzcmNkaXIgJiYgcHdkYCIgIT0gImBwd2RgIiAmJiB0ZXN0IC1mICRzcmNkaXIvY29uZmlnLnN0YXR1czsgdGhlbgorKyAgQUNfTVNHX0VSUk9SKFtzb3VyY2UgZGlyZWN0b3J5IGFscmVhZHkgY29uZmlndXJlZDsgcnVuICJtYWtlIGRpc3RjbGVhbiIgdGhlcmUgZmlyc3RdKQorK2ZpCisraWZlbHNlKFskM10sLAorK0FDX0RFRklORV9VTlFVT1RFRChQQUNLQUdFLCAiJFBBQ0tBR0UiLCBbTmFtZSBvZiBwYWNrYWdlXSkKKytBQ19ERUZJTkVfVU5RVU9URUQoVkVSU0lPTiwgIiRWRVJTSU9OIiwgW1ZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2VdKSkKKytBQ19SRVFVSVJFKFtBTV9TQU5JVFlfQ0hFQ0tdKQorK0FDX1JFUVVJUkUoW0FDX0FSR19QUk9HUkFNXSkKKytkbmwgRklYTUUgVGhpcyBpcyB0cnVseSBncm9zcy4KKyttaXNzaW5nX2Rpcj1gY2QgJGFjX2F1eF9kaXIgJiYgcHdkYAorK0FNX01JU1NJTkdfUFJPRyhBQ0xPQ0FMLCBhY2xvY2FsLSR7YW1fX2FwaV92ZXJzaW9ufSwgJG1pc3NpbmdfZGlyKQorK0FNX01JU1NJTkdfUFJPRyhBVVRPQ09ORiwgYXV0b2NvbmYsICRtaXNzaW5nX2RpcikKKytBTV9NSVNTSU5HX1BST0coQVVUT01BS0UsIGF1dG9tYWtlLSR7YW1fX2FwaV92ZXJzaW9ufSwgJG1pc3NpbmdfZGlyKQorK0FNX01JU1NJTkdfUFJPRyhBVVRPSEVBREVSLCBhdXRvaGVhZGVyLCAkbWlzc2luZ19kaXIpCisrQU1fTUlTU0lOR19QUk9HKE1BS0VJTkZPLCBtYWtlaW5mbywgJG1pc3NpbmdfZGlyKQorK0FDX1JFUVVJUkUoW0FDX1BST0dfTUFLRV9TRVRdKV0pCisrCisrIyBDb3B5cmlnaHQgMjAwMiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysjIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrCisrIyBBTV9BVVRPTUFLRV9WRVJTSU9OKFZFUlNJT04pCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBBdXRvbWFrZSBYLlkgdHJhY2VzIHRoaXMgbWFjcm8gdG8gZW5zdXJlIGFjbG9jYWwubTQgaGFzIGJlZW4KKysjIGdlbmVyYXRlZCBmcm9tIHRoZSBtNCBmaWxlcyBhY2NvbXBhbnlpbmcgQXV0b21ha2UgWC5ZLgorK0FDX0RFRlVOKFtBTV9BVVRPTUFLRV9WRVJTSU9OXSxbYW1fX2FwaV92ZXJzaW9uPSIxLjQiXSkKKysKKysjIEFNX1NFVF9DVVJSRU5UX0FVVE9NQUtFX1ZFUlNJT04KKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIENhbGwgQU1fQVVUT01BS0VfVkVSU0lPTiBzbyBpdCBjYW4gYmUgdHJhY2VkLgorKyMgVGhpcyBmdW5jdGlvbiBpcyBBQ19SRVFVSVJFZCBieSBBQ19JTklUX0FVVE9NQUtFLgorK0FDX0RFRlVOKFtBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OXSwKKysJIFtBTV9BVVRPTUFLRV9WRVJTSU9OKFsxLjQtcDZdKV0pCisrCisrIworKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUuCisrIworKworK0FDX0RFRlVOKFtBTV9TQU5JVFlfQ0hFQ0tdLAorK1tBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZV0pCisrIyBKdXN0IGluIGNhc2UKKytzbGVlcCAxCisrZWNobyB0aW1lc3RhbXAgPiBjb25mdGVzdGZpbGUKKysjIERvIGBzZXQnIGluIGEgc3Vic2hlbGwgc28gd2UgZG9uJ3QgY2xvYmJlciB0aGUgY3VycmVudCBzaGVsbCdzCisrIyBhcmd1bWVudHMuICBNdXN0IHRyeSAtTCBmaXJzdCBpbiBjYXNlIGNvbmZpZ3VyZSBpcyBhY3R1YWxseSBhCisrIyBzeW1saW5rOyBzb21lIHN5c3RlbXMgcGxheSB3ZWlyZCBnYW1lcyB3aXRoIHRoZSBtb2QgdGltZSBvZiBzeW1saW5rcworKyMgKGVnIEZyZWVCU0QgcmV0dXJucyB0aGUgbW9kIHRpbWUgb2YgdGhlIHN5bWxpbmsncyBjb250YWluaW5nCisrIyBkaXJlY3RvcnkpLgorK2lmICgKKysgICBzZXQgWCBgbHMgLUx0ICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0ZmlsZSAyPiAvZGV2L251bGxgCisrICAgaWYgdGVzdCAiWyRdKiIgPSAiWCI7IHRoZW4KKysgICAgICAjIC1MIGRpZG4ndCB3b3JrLgorKyAgICAgIHNldCBYIGBscyAtdCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdGZpbGVgCisrICAgZmkKKysgICBpZiB0ZXN0ICJbJF0qIiAhPSAiWCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdGZpbGUiIFwKKysgICAgICAmJiB0ZXN0ICJbJF0qIiAhPSAiWCBjb25mdGVzdGZpbGUgJHNyY2Rpci9jb25maWd1cmUiOyB0aGVuCisrCisrICAgICAgIyBJZiBuZWl0aGVyIG1hdGNoZWQsIHRoZW4gd2UgaGF2ZSBhIGJyb2tlbiBscy4gIFRoaXMgY2FuIGhhcHBlbgorKyAgICAgICMgaWYsIGZvciBpbnN0YW5jZSwgQ09ORklHX1NIRUxMIGlzIGJhc2ggYW5kIGl0IGluaGVyaXRzIGEKKysgICAgICAjIGJyb2tlbiBscyBhbGlhcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4gIFRoaXMgaGFzIGFjdHVhbGx5CisrICAgICAgIyBoYXBwZW5lZC4gIFN1Y2ggYSBzeXN0ZW0gY291bGQgbm90IGJlIGNvbnNpZGVyZWQgInNhbmUiLgorKyAgICAgIEFDX01TR19FUlJPUihbbHMgLXQgYXBwZWFycyB0byBmYWlsLiAgTWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhIGJyb2tlbgorK2FsaWFzIGluIHlvdXIgZW52aXJvbm1lbnRdKQorKyAgIGZpCisrCisrICAgdGVzdCAiWyRdMiIgPSBjb25mdGVzdGZpbGUKKysgICApCisrdGhlbgorKyAgICMgT2suCisrICAgOgorK2Vsc2UKKysgICBBQ19NU0dfRVJST1IoW25ld2x5IGNyZWF0ZWQgZmlsZSBpcyBvbGRlciB0aGFuIGRpc3RyaWJ1dGVkIGZpbGVzIQorK0NoZWNrIHlvdXIgc3lzdGVtIGNsb2NrXSkKKytmaQorK3JtIC1mIGNvbmZ0ZXN0KgorK0FDX01TR19SRVNVTFQoeWVzKV0pCisrCisrZG5sIEFNX01JU1NJTkdfUFJPRyhOQU1FLCBQUk9HUkFNLCBESVJFQ1RPUlkpCisrZG5sIFRoZSBwcm9ncmFtIG11c3QgcHJvcGVybHkgaW1wbGVtZW50IC0tdmVyc2lvbi4KKytBQ19ERUZVTihbQU1fTUlTU0lOR19QUk9HXSwKKytbQUNfTVNHX0NIRUNLSU5HKGZvciB3b3JraW5nICQyKQorKyMgUnVuIHRlc3QgaW4gYSBzdWJzaGVsbDsgc29tZSB2ZXJzaW9ucyBvZiBzaCB3aWxsIHByaW50IGFuIGVycm9yIGlmCisrIyBhbiBleGVjdXRhYmxlIGlzIG5vdCBmb3VuZCwgZXZlbiBpZiBzdGRlcnIgaXMgcmVkaXJlY3RlZC4KKysjIFJlZGlyZWN0IHN0ZGluIHRvIHBsYWNhdGUgb2xkZXIgdmVyc2lvbnMgb2YgYXV0b2NvbmYuICBTaWdoLgorK2lmICgkMiAtLXZlcnNpb24pIDwgL2Rldi9udWxsID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAkMT0kMgorKyAgIEFDX01TR19SRVNVTFQoZm91bmQpCisrZWxzZQorKyAgICQxPSIkMy9taXNzaW5nICQyIgorKyAgIEFDX01TR19SRVNVTFQobWlzc2luZykKKytmaQorK0FDX1NVQlNUKCQxKV0pCisrCisrIyBEZWZpbmUgYSBjb25kaXRpb25hbC4KKysKKytBQ19ERUZVTihbQU1fQ09ORElUSU9OQUxdLAorK1tBQ19TVUJTVCgkMV9UUlVFKQorK0FDX1NVQlNUKCQxX0ZBTFNFKQorK2lmICQyOyB0aGVuCisrICAkMV9UUlVFPQorKyAgJDFfRkFMU0U9JyMnCisrZWxzZQorKyAgJDFfVFJVRT0nIycKKysgICQxX0ZBTFNFPQorK2ZpXSkKKysKKysjIEFkZCAtLWVuYWJsZS1tYWludGFpbmVyLW1vZGUgb3B0aW9uIHRvIGNvbmZpZ3VyZS4KKysjIEZyb20gSmltIE1leWVyaW5nCisrCisrIyBzZXJpYWwgMQorKworK0FDX0RFRlVOKFtBTV9NQUlOVEFJTkVSX01PREVdLAorK1tBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzXSkKKysgIGRubCBtYWludGFpbmVyLW1vZGUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdAorKyAgQUNfQVJHX0VOQUJMRShtYWludGFpbmVyLW1vZGUsCisrWyAgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlIGVuYWJsZSBtYWtlIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgbm90IHVzZWZ1bAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCBzb21ldGltZXMgY29uZnVzaW5nKSB0byB0aGUgY2FzdWFsIGluc3RhbGxlcl0sCisrICAgICAgVVNFX01BSU5UQUlORVJfTU9ERT0kZW5hYmxldmFsLAorKyAgICAgIFVTRV9NQUlOVEFJTkVSX01PREU9bm8pCisrICBBQ19NU0dfUkVTVUxUKCRVU0VfTUFJTlRBSU5FUl9NT0RFKQorKyAgQU1fQ09ORElUSU9OQUwoTUFJTlRBSU5FUl9NT0RFLCB0ZXN0ICRVU0VfTUFJTlRBSU5FUl9NT0RFID0geWVzKQorKyAgTUFJTlQ9JE1BSU5UQUlORVJfTU9ERV9UUlVFCisrICBBQ19TVUJTVChNQUlOVClkbmwKKytdCisrKQorKworZGlmZiAtTmF1ciBuZXdsaWItMS4xNy4wL25ld2xpYi9saWJjL21hY2hpbmUvYXZyMzIvY29uZmlndXJlIG5ld2xpYi0xLjE3LjAtbmV3L25ld2xpYi9saWJjL21hY2hpbmUvYXZyMzIvY29uZmlndXJlCistLS0gbmV3bGliLTEuMTcuMC9uZXdsaWIvbGliYy9tYWNoaW5lL2F2cjMyL2NvbmZpZ3VyZQkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIG5ld2xpYi0xLjE3LjAtbmV3L25ld2xpYi9saWJjL21hY2hpbmUvYXZyMzIvY29uZmlndXJlCTIwMDktMDUtMjIgMDk6NTc6NDkuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDM5NTAgQEAKKysjISAvYmluL3NoCisrIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLgorKyMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjYxIGZvciBuZXdsaWIgTkVXTElCX1ZFUlNJT04uCisrIworKyMgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLAorKyMgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIFRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisrIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrCisrIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCisrRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgZW11bGF0ZSBzaAorKyAgTlVMTENNRD06CisrICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisrICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorKyAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCisrICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorK2Vsc2UKKysgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbgorKyAgKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7CisrZXNhYworKworK2ZpCisrCisrCisrCisrCisrIyBQQVRIIG5lZWRzIENSCisrIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLgorK2FzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworK2FzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworK2FzX2NyX0xldHRlcnM9JGFzX2NyX2xldHRlcnMkYXNfY3JfTEVUVEVSUworK2FzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKKythc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKKysKKysjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KKytpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorKyAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAorKyAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAorKyAgY2htb2QgK3ggY29uZiQkLnNoCisrICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICBQQVRIX1NFUEFSQVRPUj0nOycKKysgIGVsc2UKKysgICAgUEFUSF9TRVBBUkFUT1I9OgorKyAgZmkKKysgIHJtIC1mIGNvbmYkJC5zaAorK2ZpCisrCisrIyBTdXBwb3J0IHVuc2V0IHdoZW4gcG9zc2libGUuCisraWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBhc191bnNldD11bnNldAorK2Vsc2UKKysgIGFzX3Vuc2V0PWZhbHNlCisrZmkKKysKKysKKysjIElGUworKyMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuICBRdW90aW5nIGlzCisrIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCisrIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCisrIyBzcGxpdHRpbmcgYnkgc2V0dGluZyBJRlMgdG8gZW1wdHkgdmFsdWUuKQorK2FzX25sPScKKysnCisrSUZTPSIgIiIJJGFzX25sIgorKworKyMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIGRpcmVjdG9yeSBzZXBhcmF0b3IuCisrY2FzZSAkMCBpbgorKyAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OworKyAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKysgICAgIDs7CisrZXNhYworKyMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKysjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KKytpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCisrICBhc19teXNlbGY9JDAKKytmaQorK2lmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKysgIGVjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKKysgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorK2ZpCisrCisrIyBXb3JrIGFyb3VuZCBidWdzIGluIHByZS0zLjAgVVdJTiBrc2guCisrZm9yIGFzX3ZhciBpbiBFTlYgTUFJTCBNQUlMUEFUSAorK2RvICgkYXNfdW5zZXQgJGFzX3ZhcikgPi9kZXYvbnVsbCAyPiYxICYmICRhc191bnNldCAkYXNfdmFyCisrZG9uZQorK1BTMT0nJCAnCisrUFMyPSc+ICcKKytQUzQ9JysgJworKworKyMgTkxTIG51aXNhbmNlcy4KKytmb3IgYXNfdmFyIGluIFwKKysgIExBTkcgTEFOR1VBR0UgTENfQUREUkVTUyBMQ19BTEwgTENfQ09MTEFURSBMQ19DVFlQRSBMQ19JREVOVElGSUNBVElPTiBcCisrICBMQ19NRUFTVVJFTUVOVCBMQ19NRVNTQUdFUyBMQ19NT05FVEFSWSBMQ19OQU1FIExDX05VTUVSSUMgTENfUEFQRVIgXAorKyAgTENfVEVMRVBIT05FIExDX1RJTUUKKytkbworKyAgaWYgKHNldCAreDsgdGVzdCAteiAiYChldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIpIDI+JjFgIik7IHRoZW4KKysgICAgZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyCisrICBlbHNlCisrICAgICgkYXNfdW5zZXQgJGFzX3ZhcikgPi9kZXYvbnVsbCAyPiYxICYmICRhc191bnNldCAkYXNfdmFyCisrICBmaQorK2RvbmUKKysKKysjIFJlcXVpcmVkIHRvIHVzZSBiYXNlbmFtZS4KKytpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorKyAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCisrICBhc19leHByPWV4cHIKKytlbHNlCisrICBhc19leHByPWZhbHNlCisrZmkKKysKKytpZiAoYmFzZW5hbWUgLS0gLykgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLS0gLyAyPiYxYCIgPSAiWC8iOyB0aGVuCisrICBhc19iYXNlbmFtZT1iYXNlbmFtZQorK2Vsc2UKKysgIGFzX2Jhc2VuYW1lPWZhbHNlCisrZmkKKysKKysKKysjIE5hbWUgb2YgdGhlIGV4ZWN1dGFibGUuCisrYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8CisrJGFzX2V4cHIgWC8iJDAiIDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwKKysJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCisrCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKytlY2hvIFgvIiQwIiB8CisrICAgIHNlZCAnL14uKlwvXChbXi9dW14vXSpcKVwvKiQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwvXChcL1wvXCkkL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcL1woXC9cKS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICBzLy4qLy4vOyBxJ2AKKysKKysjIENEUEFUSC4KKyskYXNfdW5zZXQgQ0RQQVRICisrCisrCisraWYgdGVzdCAieCRDT05GSUdfU0hFTEwiID0geDsgdGhlbgorKyAgaWYgKGV2YWwgIjoiKSAyPi9kZXYvbnVsbDsgdGhlbgorKyAgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKKytlbHNlCisrICBhc19oYXZlX3JlcXVpcmVkPW5vCisrZmkKKysKKysgIGlmIHRlc3QgJGFzX2hhdmVfcmVxdWlyZWQgPSB5ZXMgJiYgCSAoZXZhbCAiOgorKyhhc19mdW5jX3JldHVybiAoKSB7CisrICAoZXhpdCBcJDEpCisrfQorK2FzX2Z1bmNfc3VjY2VzcyAoKSB7CisrICBhc19mdW5jX3JldHVybiAwCisrfQorK2FzX2Z1bmNfZmFpbHVyZSAoKSB7CisrICBhc19mdW5jX3JldHVybiAxCisrfQorK2FzX2Z1bmNfcmV0X3N1Y2Nlc3MgKCkgeworKyAgcmV0dXJuIDAKKyt9CisrYXNfZnVuY19yZXRfZmFpbHVyZSAoKSB7CisrICByZXR1cm4gMQorK30KKysKKytleGl0Y29kZT0wCisraWYgYXNfZnVuY19zdWNjZXNzOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX3N1Y2Nlc3MgZmFpbGVkLgorK2ZpCisrCisraWYgYXNfZnVuY19mYWlsdXJlOyB0aGVuCisrICBleGl0Y29kZT0xCisrICBlY2hvIGFzX2Z1bmNfZmFpbHVyZSBzdWNjZWVkZWQuCisrZmkKKysKKytpZiBhc19mdW5jX3JldF9zdWNjZXNzOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX3JldF9zdWNjZXNzIGZhaWxlZC4KKytmaQorKworK2lmIGFzX2Z1bmNfcmV0X2ZhaWx1cmU7IHRoZW4KKysgIGV4aXRjb2RlPTEKKysgIGVjaG8gYXNfZnVuY19yZXRfZmFpbHVyZSBzdWNjZWVkZWQuCisrZmkKKysKKytpZiAoIHNldCB4OyBhc19mdW5jX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCisrZmkKKysKKyt0ZXN0IFwkZXhpdGNvZGUgPSAwKSB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKysKKysoCisrICBhc19saW5lbm9fMT1cJExJTkVOTworKyAgYXNfbGluZW5vXzI9XCRMSU5FTk8KKysgIHRlc3QgXCJ4XCRhc19saW5lbm9fMVwiICE9IFwieFwkYXNfbGluZW5vXzJcIiAmJgorKyAgdGVzdCBcInhcYGV4cHIgXCRhc19saW5lbm9fMSArIDFcYFwiID0gXCJ4XCRhc19saW5lbm9fMlwiKSB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKysiKSAyPiAvZGV2L251bGw7IHRoZW4KKysgIDoKKytlbHNlCisrICBhc19jYW5kaWRhdGVfc2hlbGxzPQorKyAgICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAvYmluJFBBVEhfU0VQQVJBVE9SL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgY2FzZSAkYXNfZGlyIGluCisrCSAvKikKKysJICAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbworKwkgICAgIGFzX2NhbmRpZGF0ZV9zaGVsbHM9IiRhc19jYW5kaWRhdGVfc2hlbGxzICRhc19kaXIvJGFzX2Jhc2UiCisrCSAgIGRvbmU7OworKyAgICAgICBlc2FjCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKysKKysgICAgICBmb3IgYXNfc2hlbGwgaW4gJGFzX2NhbmRpZGF0ZV9zaGVsbHMgJFNIRUxMOyBkbworKwkgIyBUcnkgb25seSBzaGVsbHMgdGhhdCBleGlzdCwgdG8gc2F2ZSBzZXZlcmFsIGZvcmtzLgorKwkgaWYgeyB0ZXN0IC1mICIkYXNfc2hlbGwiIHx8IHRlc3QgLWYgIiRhc19zaGVsbC5leGUiOyB9ICYmCisrCQl7ICgiJGFzX3NoZWxsIikgMj4gL2Rldi9udWxsIDw8XF9BU0VPRgorK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgZW11bGF0ZSBzaAorKyAgTlVMTENNRD06CisrICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisrICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorKyAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCisrICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorK2Vsc2UKKysgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbgorKyAgKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7CisrZXNhYworKworK2ZpCisrCisrCisrOgorK19BU0VPRgorK307IHRoZW4KKysgIENPTkZJR19TSEVMTD0kYXNfc2hlbGwKKysJICAgICAgIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCisrCSAgICAgICBpZiB7ICIkYXNfc2hlbGwiIDI+IC9kZXYvbnVsbCA8PFxfQVNFT0YKKytpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgIGVtdWxhdGUgc2gKKysgIE5VTExDTUQ9OgorKyAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKysgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKytlbHNlCisrICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4KKysgICpwb3NpeCopIHNldCAtbyBwb3NpeCA7OworK2VzYWMKKysKKytmaQorKworKworKzoKKysoYXNfZnVuY19yZXR1cm4gKCkgeworKyAgKGV4aXQgJDEpCisrfQorK2FzX2Z1bmNfc3VjY2VzcyAoKSB7CisrICBhc19mdW5jX3JldHVybiAwCisrfQorK2FzX2Z1bmNfZmFpbHVyZSAoKSB7CisrICBhc19mdW5jX3JldHVybiAxCisrfQorK2FzX2Z1bmNfcmV0X3N1Y2Nlc3MgKCkgeworKyAgcmV0dXJuIDAKKyt9CisrYXNfZnVuY19yZXRfZmFpbHVyZSAoKSB7CisrICByZXR1cm4gMQorK30KKysKKytleGl0Y29kZT0wCisraWYgYXNfZnVuY19zdWNjZXNzOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX3N1Y2Nlc3MgZmFpbGVkLgorK2ZpCisrCisraWYgYXNfZnVuY19mYWlsdXJlOyB0aGVuCisrICBleGl0Y29kZT0xCisrICBlY2hvIGFzX2Z1bmNfZmFpbHVyZSBzdWNjZWVkZWQuCisrZmkKKysKKytpZiBhc19mdW5jX3JldF9zdWNjZXNzOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX3JldF9zdWNjZXNzIGZhaWxlZC4KKytmaQorKworK2lmIGFzX2Z1bmNfcmV0X2ZhaWx1cmU7IHRoZW4KKysgIGV4aXRjb2RlPTEKKysgIGVjaG8gYXNfZnVuY19yZXRfZmFpbHVyZSBzdWNjZWVkZWQuCisrZmkKKysKKytpZiAoIHNldCB4OyBhc19mdW5jX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gIiQxIiApOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCisrZmkKKysKKyt0ZXN0ICRleGl0Y29kZSA9IDApIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorKworKygKKysgIGFzX2xpbmVub18xPSRMSU5FTk8KKysgIGFzX2xpbmVub18yPSRMSU5FTk8KKysgIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgorKyAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSArIDFgIiA9ICJ4JGFzX2xpbmVub18yIikgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisrCisrX0FTRU9GCisrfTsgdGhlbgorKyAgYnJlYWsKKytmaQorKworK2ZpCisrCisrICAgICAgZG9uZQorKworKyAgICAgIGlmIHRlc3QgIngkQ09ORklHX1NIRUxMIiAhPSB4OyB0aGVuCisrICBmb3IgYXNfdmFyIGluIEJBU0hfRU5WIEVOVgorKyAgICAgICAgZG8gKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKKysgICAgICAgIGRvbmUKKysgICAgICAgIGV4cG9ydCBDT05GSUdfU0hFTEwKKysgICAgICAgIGV4ZWMgIiRDT05GSUdfU0hFTEwiICIkYXNfbXlzZWxmIiAkezErIiRAIn0KKytmaQorKworKworKyAgICBpZiB0ZXN0ICRhc19oYXZlX3JlcXVpcmVkID0gbm87IHRoZW4KKysgIGVjaG8gVGhpcyBzY3JpcHQgcmVxdWlyZXMgYSBzaGVsbCBtb3JlIG1vZGVybiB0aGFuIGFsbCB0aGUKKysgICAgICBlY2hvIHNoZWxscyB0aGF0IEkgZm91bmQgb24geW91ciBzeXN0ZW0uICBQbGVhc2UgaW5zdGFsbCBhCisrICAgICAgZWNobyBtb2Rlcm4gc2hlbGwsIG9yIG1hbnVhbGx5IHJ1biB0aGUgc2NyaXB0IHVuZGVyIHN1Y2ggYQorKyAgICAgIGVjaG8gc2hlbGwgaWYgeW91IGRvIGhhdmUgb25lLgorKyAgICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorK2ZpCisrCisrCisrZmkKKysKKytmaQorKworKworKworKyhldmFsICJhc19mdW5jX3JldHVybiAoKSB7CisrICAoZXhpdCBcJDEpCisrfQorK2FzX2Z1bmNfc3VjY2VzcyAoKSB7CisrICBhc19mdW5jX3JldHVybiAwCisrfQorK2FzX2Z1bmNfZmFpbHVyZSAoKSB7CisrICBhc19mdW5jX3JldHVybiAxCisrfQorK2FzX2Z1bmNfcmV0X3N1Y2Nlc3MgKCkgeworKyAgcmV0dXJuIDAKKyt9CisrYXNfZnVuY19yZXRfZmFpbHVyZSAoKSB7CisrICByZXR1cm4gMQorK30KKysKKytleGl0Y29kZT0wCisraWYgYXNfZnVuY19zdWNjZXNzOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX3N1Y2Nlc3MgZmFpbGVkLgorK2ZpCisrCisraWYgYXNfZnVuY19mYWlsdXJlOyB0aGVuCisrICBleGl0Y29kZT0xCisrICBlY2hvIGFzX2Z1bmNfZmFpbHVyZSBzdWNjZWVkZWQuCisrZmkKKysKKytpZiBhc19mdW5jX3JldF9zdWNjZXNzOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX3JldF9zdWNjZXNzIGZhaWxlZC4KKytmaQorKworK2lmIGFzX2Z1bmNfcmV0X2ZhaWx1cmU7IHRoZW4KKysgIGV4aXRjb2RlPTEKKysgIGVjaG8gYXNfZnVuY19yZXRfZmFpbHVyZSBzdWNjZWVkZWQuCisrZmkKKysKKytpZiAoIHNldCB4OyBhc19mdW5jX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCisrZmkKKysKKyt0ZXN0IFwkZXhpdGNvZGUgPSAwIikgfHwgeworKyAgZWNobyBObyBzaGVsbCBmb3VuZCB0aGF0IHN1cHBvcnRzIHNoZWxsIGZ1bmN0aW9ucy4KKysgIGVjaG8gUGxlYXNlIHRlbGwgYXV0b2NvbmZAZ251Lm9yZyBhYm91dCB5b3VyIHN5c3RlbSwKKysgIGVjaG8gaW5jbHVkaW5nIGFueSBlcnJvciBwb3NzaWJseSBvdXRwdXQgYmVmb3JlIHRoaXMKKysgIGVjaG8gbWVzc2FnZQorK30KKysKKysKKysKKysgIGFzX2xpbmVub18xPSRMSU5FTk8KKysgIGFzX2xpbmVub18yPSRMSU5FTk8KKysgIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgorKyAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSArIDFgIiA9ICJ4JGFzX2xpbmVub18yIiB8fCB7CisrCisrICAjIENyZWF0ZSAkYXNfbWUubGluZW5vIGFzIGEgY29weSBvZiAkYXNfbXlzZWxmLCBidXQgd2l0aCAkTElORU5PCisrICAjIHVuaWZvcm1seSByZXBsYWNlZCBieSB0aGUgbGluZSBudW1iZXIuICBUaGUgZmlyc3QgJ3NlZCcgaW5zZXJ0cyBhCisrICAjIGxpbmUtbnVtYmVyIGxpbmUgYWZ0ZXIgZWFjaCBsaW5lIHVzaW5nICRMSU5FTk87IHRoZSBzZWNvbmQgJ3NlZCcKKysgICMgZG9lcyB0aGUgcmVhbCB3b3JrLiAgVGhlIHNlY29uZCBzY3JpcHQgdXNlcyAnTicgdG8gcGFpciBlYWNoCisrICAjIGxpbmUtbnVtYmVyIGxpbmUgd2l0aCB0aGUgbGluZSBjb250YWluaW5nICRMSU5FTk8sIGFuZCBhcHBlbmRzCisrICAjIHRyYWlsaW5nICctJyBkdXJpbmcgc3Vic3RpdHV0aW9uIHNvIHRoYXQgJExJTkVOTyBpcyBub3QgYSBzcGVjaWFsCisrICAjIGNhc2UgYXQgbGluZSBlbmQuCisrICAjIChSYWphIFIgSGFyaW5hdGggc3VnZ2VzdGVkIHNlZCAnPScsIGFuZCBQYXVsIEVnZ2VydCB3cm90ZSB0aGUKKysgICMgc2NyaXB0cyB3aXRoIG9wdGltaXphdGlvbiBoZWxwIGZyb20gUGFvbG8gQm9uemluaS4gIEJsYW1lIExlZQorKyAgIyBFLiBNY01haG9uICgxOTMxLTE5ODkpIGZvciBzZWQncyBzeW50YXguICA6LSkKKysgIHNlZCAtbiAnCisrICAgIHAKKysgICAgL1skXUxJTkVOTy89CisrICAnIDwkYXNfbXlzZWxmIHwKKysgICAgc2VkICcKKysgICAgICBzL1skXUxJTkVOTy4qLyYtLworKyAgICAgIHQgbGluZW5vCisrICAgICAgYgorKyAgICAgIDpsaW5lbm8KKysgICAgICBOCisrICAgICAgOmxvb3AKKysgICAgICBzL1skXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dLipcblwpXCguKlwpL1wyXDFcMi8KKysgICAgICB0IGxvb3AKKysgICAgICBzLy1cbi4qLy8KKysgICAgJyA+JGFzX21lLmxpbmVubyAmJgorKyAgY2htb2QgK3ggIiRhc19tZS5saW5lbm8iIHx8CisrICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSAkYXNfbWUubGluZW5vOyByZXJ1biB3aXRoIGEgUE9TSVggc2hlbGwiID4mMgorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKworKyAgIyBEb24ndCB0cnkgdG8gZXhlYyBhcyBpdCBjaGFuZ2VzICRbMF0sIGNhdXNpbmcgYWxsIHNvcnQgb2YgcHJvYmxlbXMKKysgICMgKHRoZSBkaXJuYW1lIG9mICRbMF0gaXMgbm90IHRoZSBwbGFjZSB3aGVyZSB3ZSBtaWdodCBmaW5kIHRoZQorKyAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpdGl2ZSB0byB0aGlzKS4KKysgIC4gIi4vJGFzX21lLmxpbmVubyIKKysgICMgRXhpdCBzdGF0dXMgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kLgorKyAgZXhpdAorK30KKysKKysKKytpZiAoYXNfZGlyPWBkaXJuYW1lIC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgIGFzX2Rpcm5hbWU9ZGlybmFtZQorK2Vsc2UKKysgIGFzX2Rpcm5hbWU9ZmFsc2UKKytmaQorKworK0VDSE9fQz0gRUNIT19OPSBFQ0hPX1Q9CisrY2FzZSBgZWNobyAtbiB4YCBpbgorKy1uKikKKysgIGNhc2UgYGVjaG8gJ3hcYydgIGluCisrICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBzaW5nbGUgdGFiIGNoYXJhY3Rlci4KKysgICopICAgRUNIT19DPSdcYyc7OworKyAgZXNhYzs7CisrKikKKysgIEVDSE9fTj0nLW4nOzsKKytlc2FjCisrCisraWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKKysgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorKyAgYXNfZXhwcj1leHByCisrZWxzZQorKyAgYXNfZXhwcj1mYWxzZQorK2ZpCisrCisrcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKKytpZiB0ZXN0IC1kIGNvbmYkJC5kaXI7IHRoZW4KKysgIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKKytlbHNlCisrICBybSAtZiBjb25mJCQuZGlyCisrICBta2RpciBjb25mJCQuZGlyCisrZmkKKytlY2hvID5jb25mJCQuZmlsZQorK2lmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorKyAgYXNfbG5fcz0nbG4gLXMnCisrICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorKyAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKysgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorKyAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wJy4KKysgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKysgICAgYXNfbG5fcz0nY3AgLXAnCisrZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKysgIGFzX2xuX3M9bG4KKytlbHNlCisrICBhc19sbl9zPSdjcCAtcCcKKytmaQorK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKKytybWRpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCisrCisraWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgorKyAgYXNfbWtkaXJfcD06CisrZWxzZQorKyAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKysgIGFzX21rZGlyX3A9ZmFsc2UKKytmaQorKworK2lmIHRlc3QgLXggLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgIGFzX3Rlc3RfeD0ndGVzdCAteCcKKytlbHNlCisrICBpZiBscyAtZEwgLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgYXNfbHNfTF9vcHRpb249TAorKyAgZWxzZQorKyAgICBhc19sc19MX29wdGlvbj0KKysgIGZpCisrICBhc190ZXN0X3g9JworKyAgICBldmFsIHNoIC1jICdcJycKKysgICAgICBpZiB0ZXN0IC1kICIkMSI7IHRoZW4KKysgICAgICAgIHRlc3QgLWQgIiQxLy4iOworKyAgICAgIGVsc2UKKysJY2FzZSAkMSBpbgorKyAgICAgICAgLSopc2V0ICIuLyQxIjs7CisrCWVzYWM7CisrCWNhc2UgYGxzIC1sZCckYXNfbHNfTF9vcHRpb24nICIkMSIgMj4vZGV2L251bGxgIGluCisrCT8/P1tzeF0qKTo7OyopZmFsc2U7O2VzYWM7ZmkKKysgICAgJ1wnJyBzaAorKyAgJworK2ZpCisrYXNfZXhlY3V0YWJsZV9wPSRhc190ZXN0X3gKKysKKysjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCisrYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKysKKysjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KKythc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorKworKworKworK2V4ZWMgNzwmMCA8L2Rldi9udWxsIDY+JjEKKysKKysjIE5hbWUgb2YgdGhlIGhvc3QuCisrIyBob3N0bmFtZSBvbiBzb21lIHN5c3RlbXMgKFNWUjMuMiwgTGludXgpIHJldHVybnMgYSBib2d1cyBleGl0IHN0YXR1cywKKysjIHNvIHVuYW1lIGdldHMgcnVuIHRvby4KKythY19ob3N0bmFtZT1gKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKKysKKysjCisrIyBJbml0aWFsaXphdGlvbnMuCisrIworK2FjX2RlZmF1bHRfcHJlZml4PS91c3IvbG9jYWwKKythY19jbGVhbl9maWxlcz0KKythY19jb25maWdfbGlib2JqX2Rpcj0uCisrTElCT0JKUz0KKytjcm9zc19jb21waWxpbmc9bm8KKytzdWJkaXJzPQorK01GTEFHUz0KKytNQUtFRkxBR1M9CisrU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KKysKKysjIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KKytQQUNLQUdFX05BTUU9J25ld2xpYicKKytQQUNLQUdFX1RBUk5BTUU9J25ld2xpYicKKytQQUNLQUdFX1ZFUlNJT049J05FV0xJQl9WRVJTSU9OJworK1BBQ0tBR0VfU1RSSU5HPSduZXdsaWIgTkVXTElCX1ZFUlNJT04nCisrUEFDS0FHRV9CVUdSRVBPUlQ9JycKKysKKythY191bmlxdWVfZmlsZT0iTWFrZWZpbGUuYW0iCisrYWNfc3Vic3RfdmFycz0nU0hFTEwKKytQQVRIX1NFUEFSQVRPUgorK1BBQ0tBR0VfTkFNRQorK1BBQ0tBR0VfVEFSTkFNRQorK1BBQ0tBR0VfVkVSU0lPTgorK1BBQ0tBR0VfU1RSSU5HCisrUEFDS0FHRV9CVUdSRVBPUlQKKytleGVjX3ByZWZpeAorK3ByZWZpeAorK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUKKytiaW5kaXIKKytzYmluZGlyCisrbGliZXhlY2RpcgorK2RhdGFyb290ZGlyCisrZGF0YWRpcgorK3N5c2NvbmZkaXIKKytzaGFyZWRzdGF0ZWRpcgorK2xvY2Fsc3RhdGVkaXIKKytpbmNsdWRlZGlyCisrb2xkaW5jbHVkZWRpcgorK2RvY2RpcgorK2luZm9kaXIKKytodG1sZGlyCisrZHZpZGlyCisrcGRmZGlyCisrcHNkaXIKKytsaWJkaXIKKytsb2NhbGVkaXIKKyttYW5kaXIKKytERUZTCisrRUNIT19DCisrRUNIT19OCisrRUNIT19UCisrTElCUworK2J1aWxkX2FsaWFzCisraG9zdF9hbGlhcworK3RhcmdldF9hbGlhcworK01BWV9TVVBQTFlfU1lTQ0FMTFNfVFJVRQorK01BWV9TVVBQTFlfU1lTQ0FMTFNfRkFMU0UKKytuZXdsaWJfYmFzZWRpcgorK2J1aWxkCisrYnVpbGRfY3B1CisrYnVpbGRfdmVuZG9yCisrYnVpbGRfb3MKKytob3N0CisraG9zdF9jcHUKKytob3N0X3ZlbmRvcgorK2hvc3Rfb3MKKyt0YXJnZXQKKyt0YXJnZXRfY3B1CisrdGFyZ2V0X3ZlbmRvcgorK3RhcmdldF9vcworK0lOU1RBTExfUFJPR1JBTQorK0lOU1RBTExfU0NSSVBUCisrSU5TVEFMTF9EQVRBCisrUEFDS0FHRQorK1ZFUlNJT04KKytBQ0xPQ0FMCisrQVVUT0NPTkYKKytBVVRPTUFLRQorK0FVVE9IRUFERVIKKytNQUtFSU5GTworK1NFVF9NQUtFCisrQ0MKKytBUworK0FSCisrUkFOTElCCisrTUFJTlRBSU5FUl9NT0RFX1RSVUUKKytNQUlOVEFJTkVSX01PREVfRkFMU0UKKytNQUlOVAorK05FV0xJQl9DRkxBR1MKKytMREZMQUdTCisrRUxJWF9MRVZFTF8wX1RSVUUKKytFTElYX0xFVkVMXzBfRkFMU0UKKytFTElYX0xFVkVMXzFfVFJVRQorK0VMSVhfTEVWRUxfMV9GQUxTRQorK0VMSVhfTEVWRUxfMl9UUlVFCisrRUxJWF9MRVZFTF8yX0ZBTFNFCisrRUxJWF9MRVZFTF8zX1RSVUUKKytFTElYX0xFVkVMXzNfRkFMU0UKKytFTElYX0xFVkVMXzRfVFJVRQorK0VMSVhfTEVWRUxfNF9GQUxTRQorK1VTRV9MSUJUT09MX1RSVUUKKytVU0VfTElCVE9PTF9GQUxTRQorK09CSkVYVAorK29leHQKKythZXh0CisrbGlibV9tYWNoaW5lX2RpcgorK21hY2hpbmVfZGlyCisrc3lzX2RpcgorK0xJQk9CSlMKKytMVExJQk9CSlMnCisrYWNfc3Vic3RfZmlsZXM9JycKKysgICAgICBhY19wcmVjaW91c192YXJzPSdidWlsZF9hbGlhcworK2hvc3RfYWxpYXMKKyt0YXJnZXRfYWxpYXMnCisrCisrCisrIyBJbml0aWFsaXplIHNvbWUgdmFyaWFibGVzIHNldCBieSBvcHRpb25zLgorK2FjX2luaXRfaGVscD0KKythY19pbml0X3ZlcnNpb249ZmFsc2UKKysjIFRoZSB2YXJpYWJsZXMgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyB0aGUgb3B0aW9ucywgd2l0aAorKyMgZGFzaGVzIGNoYW5nZWQgdG8gdW5kZXJsaW5lcy4KKytjYWNoZV9maWxlPS9kZXYvbnVsbAorK2V4ZWNfcHJlZml4PU5PTkUKKytub19jcmVhdGU9Cisrbm9fcmVjdXJzaW9uPQorK3ByZWZpeD1OT05FCisrcHJvZ3JhbV9wcmVmaXg9Tk9ORQorK3Byb2dyYW1fc3VmZml4PU5PTkUKKytwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPXMseCx4LAorK3NpbGVudD0KKytzaXRlPQorK3NyY2Rpcj0KKyt2ZXJib3NlPQorK3hfaW5jbHVkZXM9Tk9ORQorK3hfbGlicmFyaWVzPU5PTkUKKysKKysjIEluc3RhbGxhdGlvbiBkaXJlY3Rvcnkgb3B0aW9ucy4KKysjIFRoZXNlIGFyZSBsZWZ0IHVuZXhwYW5kZWQgc28gdXNlcnMgY2FuICJtYWtlIGluc3RhbGwgZXhlY19wcmVmaXg9L2ZvbyIKKysjIGFuZCBhbGwgdGhlIHZhcmlhYmxlcyB0aGF0IGFyZSBzdXBwb3NlZCB0byBiZSBiYXNlZCBvbiBleGVjX3ByZWZpeAorKyMgYnkgZGVmYXVsdCB3aWxsIGFjdHVhbGx5IGNoYW5nZS4KKysjIFVzZSBicmFjZXMgaW5zdGVhZCBvZiBwYXJlbnMgYmVjYXVzZSBzaCwgcGVybCwgZXRjLiBhbHNvIGFjY2VwdCB0aGVtLgorKyMgKFRoZSBsaXN0IGZvbGxvd3MgdGhlIHNhbWUgb3JkZXIgYXMgdGhlIEdOVSBDb2RpbmcgU3RhbmRhcmRzLikKKytiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L2JpbicKKytzYmluZGlyPScke2V4ZWNfcHJlZml4fS9zYmluJworK2xpYmV4ZWNkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMnCisrZGF0YXJvb3RkaXI9JyR7cHJlZml4fS9zaGFyZScKKytkYXRhZGlyPScke2RhdGFyb290ZGlyfScKKytzeXNjb25mZGlyPScke3ByZWZpeH0vZXRjJworK3NoYXJlZHN0YXRlZGlyPScke3ByZWZpeH0vY29tJworK2xvY2Fsc3RhdGVkaXI9JyR7cHJlZml4fS92YXInCisraW5jbHVkZWRpcj0nJHtwcmVmaXh9L2luY2x1ZGUnCisrb2xkaW5jbHVkZWRpcj0nL3Vzci9pbmNsdWRlJworK2RvY2Rpcj0nJHtkYXRhcm9vdGRpcn0vZG9jLyR7UEFDS0FHRV9UQVJOQU1FfScKKytpbmZvZGlyPScke2RhdGFyb290ZGlyfS9pbmZvJworK2h0bWxkaXI9JyR7ZG9jZGlyfScKKytkdmlkaXI9JyR7ZG9jZGlyfScKKytwZGZkaXI9JyR7ZG9jZGlyfScKKytwc2Rpcj0nJHtkb2NkaXJ9JworK2xpYmRpcj0nJHtleGVjX3ByZWZpeH0vbGliJworK2xvY2FsZWRpcj0nJHtkYXRhcm9vdGRpcn0vbG9jYWxlJworK21hbmRpcj0nJHtkYXRhcm9vdGRpcn0vbWFuJworKworK2FjX3ByZXY9CisrYWNfZGFzaGRhc2g9CisrZm9yIGFjX29wdGlvbgorK2RvCisrICAjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZHMgYW4gYXJndW1lbnQsIGFzc2lnbiBpdC4KKysgIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorKyAgICBldmFsICRhY19wcmV2PVwkYWNfb3B0aW9uCisrICAgIGFjX3ByZXY9CisrICAgIGNvbnRpbnVlCisrICBmaQorKworKyAgY2FzZSAkYWNfb3B0aW9uIGluCisrICAqPSopCWFjX29wdGFyZz1gZXhwciAiWCRhY19vcHRpb24iIDogJ1tePV0qPVwoLipcKSdgIDs7CisrICAqKQlhY19vcHRhcmc9eWVzIDs7CisrICBlc2FjCisrCisrICAjIEFjY2VwdCB0aGUgaW1wb3J0YW50IEN5Z251cyBjb25maWd1cmUgb3B0aW9ucywgc28gd2UgY2FuIGRpYWdub3NlIHR5cG9zLgorKworKyAgY2FzZSAkYWNfZGFzaGRhc2gkYWNfb3B0aW9uIGluCisrICAtLSkKKysgICAgYWNfZGFzaGRhc2g9eWVzIDs7CisrCisrICAtYmluZGlyIHwgLS1iaW5kaXIgfCAtLWJpbmRpIHwgLS1iaW5kIHwgLS1iaW4gfCAtLWJpKQorKyAgICBhY19wcmV2PWJpbmRpciA7OworKyAgLWJpbmRpcj0qIHwgLS1iaW5kaXI9KiB8IC0tYmluZGk9KiB8IC0tYmluZD0qIHwgLS1iaW49KiB8IC0tYmk9KikKKysgICAgYmluZGlyPSRhY19vcHRhcmcgOzsKKysKKysgIC1idWlsZCB8IC0tYnVpbGQgfCAtLWJ1aWwgfCAtLWJ1aSB8IC0tYnUpCisrICAgIGFjX3ByZXY9YnVpbGRfYWxpYXMgOzsKKysgIC1idWlsZD0qIHwgLS1idWlsZD0qIHwgLS1idWlsPSogfCAtLWJ1aT0qIHwgLS1idT0qKQorKyAgICBidWlsZF9hbGlhcz0kYWNfb3B0YXJnIDs7CisrCisrICAtY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsIHwgLS1jYWNoZS1maSBcCisrICB8IC0tY2FjaGUtZiB8IC0tY2FjaGUtIHwgLS1jYWNoZSB8IC0tY2FjaCB8IC0tY2FjIHwgLS1jYSB8IC0tYykKKysgICAgYWNfcHJldj1jYWNoZV9maWxlIDs7CisrICAtY2FjaGUtZmlsZT0qIHwgLS1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbD0qIHwgLS1jYWNoZS1maT0qIFwKKysgIHwgLS1jYWNoZS1mPSogfCAtLWNhY2hlLT0qIHwgLS1jYWNoZT0qIHwgLS1jYWNoPSogfCAtLWNhYz0qIHwgLS1jYT0qIHwgLS1jPSopCisrICAgIGNhY2hlX2ZpbGU9JGFjX29wdGFyZyA7OworKworKyAgLS1jb25maWctY2FjaGUgfCAtQykKKysgICAgY2FjaGVfZmlsZT1jb25maWcuY2FjaGUgOzsKKysKKysgIC1kYXRhZGlyIHwgLS1kYXRhZGlyIHwgLS1kYXRhZGkgfCAtLWRhdGFkKQorKyAgICBhY19wcmV2PWRhdGFkaXIgOzsKKysgIC1kYXRhZGlyPSogfCAtLWRhdGFkaXI9KiB8IC0tZGF0YWRpPSogfCAtLWRhdGFkPSopCisrICAgIGRhdGFkaXI9JGFjX29wdGFyZyA7OworKworKyAgLWRhdGFyb290ZGlyIHwgLS1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaSB8IC0tZGF0YXJvb3RkIHwgLS1kYXRhcm9vdCBcCisrICB8IC0tZGF0YXJvbyB8IC0tZGF0YXJvIHwgLS1kYXRhcikKKysgICAgYWNfcHJldj1kYXRhcm9vdGRpciA7OworKyAgLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGk9KiB8IC0tZGF0YXJvb3RkPSogXAorKyAgfCAtLWRhdGFyb290PSogfCAtLWRhdGFyb289KiB8IC0tZGF0YXJvPSogfCAtLWRhdGFyPSopCisrICAgIGRhdGFyb290ZGlyPSRhY19vcHRhcmcgOzsKKysKKysgIC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKikKKysgICAgYWNfZmVhdHVyZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmRpc2FibGUtXCguKlwpJ2AKKysgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorKyAgICBleHByICJ4JGFjX2ZlYXR1cmUiIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisrICAgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX2ZlYXR1cmUiID4mMgorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKyAgICBhY19mZWF0dXJlPWBlY2hvICRhY19mZWF0dXJlIHwgc2VkICdzL1stLl0vXy9nJ2AKKysgICAgZXZhbCBlbmFibGVfJGFjX2ZlYXR1cmU9bm8gOzsKKysKKysgIC1kb2NkaXIgfCAtLWRvY2RpciB8IC0tZG9jZGkgfCAtLWRvYyB8IC0tZG8pCisrICAgIGFjX3ByZXY9ZG9jZGlyIDs7CisrICAtZG9jZGlyPSogfCAtLWRvY2Rpcj0qIHwgLS1kb2NkaT0qIHwgLS1kb2M9KiB8IC0tZG89KikKKysgICAgZG9jZGlyPSRhY19vcHRhcmcgOzsKKysKKysgIC1kdmlkaXIgfCAtLWR2aWRpciB8IC0tZHZpZGkgfCAtLWR2aWQgfCAtLWR2aSB8IC0tZHYpCisrICAgIGFjX3ByZXY9ZHZpZGlyIDs7CisrICAtZHZpZGlyPSogfCAtLWR2aWRpcj0qIHwgLS1kdmlkaT0qIHwgLS1kdmlkPSogfCAtLWR2aT0qIHwgLS1kdj0qKQorKyAgICBkdmlkaXI9JGFjX29wdGFyZyA7OworKworKyAgLWVuYWJsZS0qIHwgLS1lbmFibGUtKikKKysgICAgYWNfZmVhdHVyZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmVuYWJsZS1cKFtePV0qXCknYAorKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisrICAgIGV4cHIgIngkYWNfZmVhdHVyZSIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKysgICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfZmVhdHVyZSIgPiYyCisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX2ZlYXR1cmUgfCBzZWQgJ3MvWy0uXS9fL2cnYAorKyAgICBldmFsIGVuYWJsZV8kYWNfZmVhdHVyZT1cJGFjX29wdGFyZyA7OworKworKyAgLWV4ZWMtcHJlZml4IHwgLS1leGVjX3ByZWZpeCB8IC0tZXhlYy1wcmVmaXggfCAtLWV4ZWMtcHJlZmkgXAorKyAgfCAtLWV4ZWMtcHJlZiB8IC0tZXhlYy1wcmUgfCAtLWV4ZWMtcHIgfCAtLWV4ZWMtcCB8IC0tZXhlYy0gXAorKyAgfCAtLWV4ZWMgfCAtLWV4ZSB8IC0tZXgpCisrICAgIGFjX3ByZXY9ZXhlY19wcmVmaXggOzsKKysgIC1leGVjLXByZWZpeD0qIHwgLS1leGVjX3ByZWZpeD0qIHwgLS1leGVjLXByZWZpeD0qIHwgLS1leGVjLXByZWZpPSogXAorKyAgfCAtLWV4ZWMtcHJlZj0qIHwgLS1leGVjLXByZT0qIHwgLS1leGVjLXByPSogfCAtLWV4ZWMtcD0qIHwgLS1leGVjLT0qIFwKKysgIHwgLS1leGVjPSogfCAtLWV4ZT0qIHwgLS1leD0qKQorKyAgICBleGVjX3ByZWZpeD0kYWNfb3B0YXJnIDs7CisrCisrICAtZ2FzIHwgLS1nYXMgfCAtLWdhIHwgLS1nKQorKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLWdhcy4KKysgICAgd2l0aF9nYXM9eWVzIDs7CisrCisrICAtaGVscCB8IC0taGVscCB8IC0taGVsIHwgLS1oZSB8IC1oKQorKyAgICBhY19pbml0X2hlbHA9bG9uZyA7OworKyAgLWhlbHA9ciogfCAtLWhlbHA9ciogfCAtLWhlbD1yKiB8IC0taGU9ciogfCAtaHIqKQorKyAgICBhY19pbml0X2hlbHA9cmVjdXJzaXZlIDs7CisrICAtaGVscD1zKiB8IC0taGVscD1zKiB8IC0taGVsPXMqIHwgLS1oZT1zKiB8IC1ocyopCisrICAgIGFjX2luaXRfaGVscD1zaG9ydCA7OworKworKyAgLWhvc3QgfCAtLWhvc3QgfCAtLWhvcyB8IC0taG8pCisrICAgIGFjX3ByZXY9aG9zdF9hbGlhcyA7OworKyAgLWhvc3Q9KiB8IC0taG9zdD0qIHwgLS1ob3M9KiB8IC0taG89KikKKysgICAgaG9zdF9hbGlhcz0kYWNfb3B0YXJnIDs7CisrCisrICAtaHRtbGRpciB8IC0taHRtbGRpciB8IC0taHRtbGRpIHwgLS1odG1sZCB8IC0taHRtbCB8IC0taHRtIHwgLS1odCkKKysgICAgYWNfcHJldj1odG1sZGlyIDs7CisrICAtaHRtbGRpcj0qIHwgLS1odG1sZGlyPSogfCAtLWh0bWxkaT0qIHwgLS1odG1sZD0qIHwgLS1odG1sPSogfCAtLWh0bT0qIFwKKysgIHwgLS1odD0qKQorKyAgICBodG1sZGlyPSRhY19vcHRhcmcgOzsKKysKKysgIC1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGkgfCAtLWluY2x1ZGVkIHwgLS1pbmNsdWRlIFwKKysgIHwgLS1pbmNsdWQgfCAtLWluY2x1IHwgLS1pbmNsIHwgLS1pbmMpCisrICAgIGFjX3ByZXY9aW5jbHVkZWRpciA7OworKyAgLWluY2x1ZGVkaXI9KiB8IC0taW5jbHVkZWRpcj0qIHwgLS1pbmNsdWRlZGk9KiB8IC0taW5jbHVkZWQ9KiB8IC0taW5jbHVkZT0qIFwKKysgIHwgLS1pbmNsdWQ9KiB8IC0taW5jbHU9KiB8IC0taW5jbD0qIHwgLS1pbmM9KikKKysgICAgaW5jbHVkZWRpcj0kYWNfb3B0YXJnIDs7CisrCisrICAtaW5mb2RpciB8IC0taW5mb2RpciB8IC0taW5mb2RpIHwgLS1pbmZvZCB8IC0taW5mbyB8IC0taW5mKQorKyAgICBhY19wcmV2PWluZm9kaXIgOzsKKysgIC1pbmZvZGlyPSogfCAtLWluZm9kaXI9KiB8IC0taW5mb2RpPSogfCAtLWluZm9kPSogfCAtLWluZm89KiB8IC0taW5mPSopCisrICAgIGluZm9kaXI9JGFjX29wdGFyZyA7OworKworKyAgLWxpYmRpciB8IC0tbGliZGlyIHwgLS1saWJkaSB8IC0tbGliZCkKKysgICAgYWNfcHJldj1saWJkaXIgOzsKKysgIC1saWJkaXI9KiB8IC0tbGliZGlyPSogfCAtLWxpYmRpPSogfCAtLWxpYmQ9KikKKysgICAgbGliZGlyPSRhY19vcHRhcmcgOzsKKysKKysgIC1saWJleGVjZGlyIHwgLS1saWJleGVjZGlyIHwgLS1saWJleGVjZGkgfCAtLWxpYmV4ZWNkIHwgLS1saWJleGVjIFwKKysgIHwgLS1saWJleGUgfCAtLWxpYmV4IHwgLS1saWJlKQorKyAgICBhY19wcmV2PWxpYmV4ZWNkaXIgOzsKKysgIC1saWJleGVjZGlyPSogfCAtLWxpYmV4ZWNkaXI9KiB8IC0tbGliZXhlY2RpPSogfCAtLWxpYmV4ZWNkPSogfCAtLWxpYmV4ZWM9KiBcCisrICB8IC0tbGliZXhlPSogfCAtLWxpYmV4PSogfCAtLWxpYmU9KikKKysgICAgbGliZXhlY2Rpcj0kYWNfb3B0YXJnIDs7CisrCisrICAtbG9jYWxlZGlyIHwgLS1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpIHwgLS1sb2NhbGVkIHwgLS1sb2NhbGUpCisrICAgIGFjX3ByZXY9bG9jYWxlZGlyIDs7CisrICAtbG9jYWxlZGlyPSogfCAtLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaT0qIHwgLS1sb2NhbGVkPSogfCAtLWxvY2FsZT0qKQorKyAgICBsb2NhbGVkaXI9JGFjX29wdGFyZyA7OworKworKyAgLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaSB8IC0tbG9jYWxzdGF0ZWQgXAorKyAgfCAtLWxvY2Fsc3RhdGUgfCAtLWxvY2Fsc3RhdCB8IC0tbG9jYWxzdGEgfCAtLWxvY2Fsc3QgfCAtLWxvY2FscykKKysgICAgYWNfcHJldj1sb2NhbHN0YXRlZGlyIDs7CisrICAtbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaT0qIHwgLS1sb2NhbHN0YXRlZD0qIFwKKysgIHwgLS1sb2NhbHN0YXRlPSogfCAtLWxvY2Fsc3RhdD0qIHwgLS1sb2NhbHN0YT0qIHwgLS1sb2NhbHN0PSogfCAtLWxvY2Fscz0qKQorKyAgICBsb2NhbHN0YXRlZGlyPSRhY19vcHRhcmcgOzsKKysKKysgIC1tYW5kaXIgfCAtLW1hbmRpciB8IC0tbWFuZGkgfCAtLW1hbmQgfCAtLW1hbiB8IC0tbWEgfCAtLW0pCisrICAgIGFjX3ByZXY9bWFuZGlyIDs7CisrICAtbWFuZGlyPSogfCAtLW1hbmRpcj0qIHwgLS1tYW5kaT0qIHwgLS1tYW5kPSogfCAtLW1hbj0qIHwgLS1tYT0qIHwgLS1tPSopCisrICAgIG1hbmRpcj0kYWNfb3B0YXJnIDs7CisrCisrICAtbmZwIHwgLS1uZnAgfCAtLW5mKQorKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRob3V0LWZwLgorKyAgICB3aXRoX2ZwPW5vIDs7CisrCisrICAtbm8tY3JlYXRlIHwgLS1uby1jcmVhdGUgfCAtLW5vLWNyZWF0IHwgLS1uby1jcmVhIHwgLS1uby1jcmUgXAorKyAgfCAtLW5vLWNyIHwgLS1uby1jIHwgLW4pCisrICAgIG5vX2NyZWF0ZT15ZXMgOzsKKysKKysgIC1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW8gfCAtLW5vLXJlY3Vyc2kgXAorKyAgfCAtLW5vLXJlY3VycyB8IC0tbm8tcmVjdXIgfCAtLW5vLXJlY3UgfCAtLW5vLXJlYyB8IC0tbm8tcmUgfCAtLW5vLXIpCisrICAgIG5vX3JlY3Vyc2lvbj15ZXMgOzsKKysKKysgIC1vbGRpbmNsdWRlZGlyIHwgLS1vbGRpbmNsdWRlZGlyIHwgLS1vbGRpbmNsdWRlZGkgfCAtLW9sZGluY2x1ZGVkIFwKKysgIHwgLS1vbGRpbmNsdWRlIHwgLS1vbGRpbmNsdWQgfCAtLW9sZGluY2x1IHwgLS1vbGRpbmNsIHwgLS1vbGRpbmMgXAorKyAgfCAtLW9sZGluIHwgLS1vbGRpIHwgLS1vbGQgfCAtLW9sIHwgLS1vKQorKyAgICBhY19wcmV2PW9sZGluY2x1ZGVkaXIgOzsKKysgIC1vbGRpbmNsdWRlZGlyPSogfCAtLW9sZGluY2x1ZGVkaXI9KiB8IC0tb2xkaW5jbHVkZWRpPSogfCAtLW9sZGluY2x1ZGVkPSogXAorKyAgfCAtLW9sZGluY2x1ZGU9KiB8IC0tb2xkaW5jbHVkPSogfCAtLW9sZGluY2x1PSogfCAtLW9sZGluY2w9KiB8IC0tb2xkaW5jPSogXAorKyAgfCAtLW9sZGluPSogfCAtLW9sZGk9KiB8IC0tb2xkPSogfCAtLW9sPSogfCAtLW89KikKKysgICAgb2xkaW5jbHVkZWRpcj0kYWNfb3B0YXJnIDs7CisrCisrICAtcHJlZml4IHwgLS1wcmVmaXggfCAtLXByZWZpIHwgLS1wcmVmIHwgLS1wcmUgfCAtLXByIHwgLS1wKQorKyAgICBhY19wcmV2PXByZWZpeCA7OworKyAgLXByZWZpeD0qIHwgLS1wcmVmaXg9KiB8IC0tcHJlZmk9KiB8IC0tcHJlZj0qIHwgLS1wcmU9KiB8IC0tcHI9KiB8IC0tcD0qKQorKyAgICBwcmVmaXg9JGFjX29wdGFyZyA7OworKworKyAgLXByb2dyYW0tcHJlZml4IHwgLS1wcm9ncmFtLXByZWZpeCB8IC0tcHJvZ3JhbS1wcmVmaSB8IC0tcHJvZ3JhbS1wcmVmIFwKKysgIHwgLS1wcm9ncmFtLXByZSB8IC0tcHJvZ3JhbS1wciB8IC0tcHJvZ3JhbS1wKQorKyAgICBhY19wcmV2PXByb2dyYW1fcHJlZml4IDs7CisrICAtcHJvZ3JhbS1wcmVmaXg9KiB8IC0tcHJvZ3JhbS1wcmVmaXg9KiB8IC0tcHJvZ3JhbS1wcmVmaT0qIFwKKysgIHwgLS1wcm9ncmFtLXByZWY9KiB8IC0tcHJvZ3JhbS1wcmU9KiB8IC0tcHJvZ3JhbS1wcj0qIHwgLS1wcm9ncmFtLXA9KikKKysgICAgcHJvZ3JhbV9wcmVmaXg9JGFjX29wdGFyZyA7OworKworKyAgLXByb2dyYW0tc3VmZml4IHwgLS1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaSB8IC0tcHJvZ3JhbS1zdWZmIFwKKysgIHwgLS1wcm9ncmFtLXN1ZiB8IC0tcHJvZ3JhbS1zdSB8IC0tcHJvZ3JhbS1zKQorKyAgICBhY19wcmV2PXByb2dyYW1fc3VmZml4IDs7CisrICAtcHJvZ3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaT0qIFwKKysgIHwgLS1wcm9ncmFtLXN1ZmY9KiB8IC0tcHJvZ3JhbS1zdWY9KiB8IC0tcHJvZ3JhbS1zdT0qIHwgLS1wcm9ncmFtLXM9KikKKysgICAgcHJvZ3JhbV9zdWZmaXg9JGFjX29wdGFyZyA7OworKworKyAgLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgXAorKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbSB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmEgXAorKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW4gfCAtLXByb2dyYW0tdHJhbnNmb3JtLSBcCisrICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0gfCAtLXByb2dyYW0tdHJhbnNmb3IgXAorKyAgfCAtLXByb2dyYW0tdHJhbnNmbyB8IC0tcHJvZ3JhbS10cmFuc2YgXAorKyAgfCAtLXByb2dyYW0tdHJhbnMgfCAtLXByb2dyYW0tdHJhbiBcCisrICB8IC0tcHJvZ3ItdHJhIHwgLS1wcm9ncmFtLXRyIHwgLS1wcm9ncmFtLXQpCisrICAgIGFjX3ByZXY9cHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA7OworKyAgLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT0qIFwKKysgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW09KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmE9KiBcCisrICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbj0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS09KiBcCisrICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm09KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcj0qIFwKKysgIHwgLS1wcm9ncmFtLXRyYW5zZm89KiB8IC0tcHJvZ3JhbS10cmFuc2Y9KiBcCisrICB8IC0tcHJvZ3JhbS10cmFucz0qIHwgLS1wcm9ncmFtLXRyYW49KiBcCisrICB8IC0tcHJvZ3ItdHJhPSogfCAtLXByb2dyYW0tdHI9KiB8IC0tcHJvZ3JhbS10PSopCisrICAgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9JGFjX29wdGFyZyA7OworKworKyAgLXBkZmRpciB8IC0tcGRmZGlyIHwgLS1wZGZkaSB8IC0tcGRmZCB8IC0tcGRmIHwgLS1wZCkKKysgICAgYWNfcHJldj1wZGZkaXIgOzsKKysgIC1wZGZkaXI9KiB8IC0tcGRmZGlyPSogfCAtLXBkZmRpPSogfCAtLXBkZmQ9KiB8IC0tcGRmPSogfCAtLXBkPSopCisrICAgIHBkZmRpcj0kYWNfb3B0YXJnIDs7CisrCisrICAtcHNkaXIgfCAtLXBzZGlyIHwgLS1wc2RpIHwgLS1wc2QgfCAtLXBzKQorKyAgICBhY19wcmV2PXBzZGlyIDs7CisrICAtcHNkaXI9KiB8IC0tcHNkaXI9KiB8IC0tcHNkaT0qIHwgLS1wc2Q9KiB8IC0tcHM9KikKKysgICAgcHNkaXI9JGFjX29wdGFyZyA7OworKworKyAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKysgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQorKyAgICBzaWxlbnQ9eWVzIDs7CisrCisrICAtc2JpbmRpciB8IC0tc2JpbmRpciB8IC0tc2JpbmRpIHwgLS1zYmluZCB8IC0tc2JpbiB8IC0tc2JpIHwgLS1zYikKKysgICAgYWNfcHJldj1zYmluZGlyIDs7CisrICAtc2JpbmRpcj0qIHwgLS1zYmluZGlyPSogfCAtLXNiaW5kaT0qIHwgLS1zYmluZD0qIHwgLS1zYmluPSogXAorKyAgfCAtLXNiaT0qIHwgLS1zYj0qKQorKyAgICBzYmluZGlyPSRhY19vcHRhcmcgOzsKKysKKysgIC1zaGFyZWRzdGF0ZWRpciB8IC0tc2hhcmVkc3RhdGVkaXIgfCAtLXNoYXJlZHN0YXRlZGkgXAorKyAgfCAtLXNoYXJlZHN0YXRlZCB8IC0tc2hhcmVkc3RhdGUgfCAtLXNoYXJlZHN0YXQgfCAtLXNoYXJlZHN0YSBcCisrICB8IC0tc2hhcmVkc3QgfCAtLXNoYXJlZHMgfCAtLXNoYXJlZCB8IC0tc2hhcmUgfCAtLXNoYXIgXAorKyAgfCAtLXNoYSB8IC0tc2gpCisrICAgIGFjX3ByZXY9c2hhcmVkc3RhdGVkaXIgOzsKKysgIC1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpPSogXAorKyAgfCAtLXNoYXJlZHN0YXRlZD0qIHwgLS1zaGFyZWRzdGF0ZT0qIHwgLS1zaGFyZWRzdGF0PSogfCAtLXNoYXJlZHN0YT0qIFwKKysgIHwgLS1zaGFyZWRzdD0qIHwgLS1zaGFyZWRzPSogfCAtLXNoYXJlZD0qIHwgLS1zaGFyZT0qIHwgLS1zaGFyPSogXAorKyAgfCAtLXNoYT0qIHwgLS1zaD0qKQorKyAgICBzaGFyZWRzdGF0ZWRpcj0kYWNfb3B0YXJnIDs7CisrCisrICAtc2l0ZSB8IC0tc2l0ZSB8IC0tc2l0KQorKyAgICBhY19wcmV2PXNpdGUgOzsKKysgIC1zaXRlPSogfCAtLXNpdGU9KiB8IC0tc2l0PSopCisrICAgIHNpdGU9JGFjX29wdGFyZyA7OworKworKyAgLXNyY2RpciB8IC0tc3JjZGlyIHwgLS1zcmNkaSB8IC0tc3JjZCB8IC0tc3JjIHwgLS1zcikKKysgICAgYWNfcHJldj1zcmNkaXIgOzsKKysgIC1zcmNkaXI9KiB8IC0tc3JjZGlyPSogfCAtLXNyY2RpPSogfCAtLXNyY2Q9KiB8IC0tc3JjPSogfCAtLXNyPSopCisrICAgIHNyY2Rpcj0kYWNfb3B0YXJnIDs7CisrCisrICAtc3lzY29uZmRpciB8IC0tc3lzY29uZmRpciB8IC0tc3lzY29uZmRpIHwgLS1zeXNjb25mZCB8IC0tc3lzY29uZiBcCisrICB8IC0tc3lzY29uIHwgLS1zeXNjbyB8IC0tc3lzYyB8IC0tc3lzIHwgLS1zeSkKKysgICAgYWNfcHJldj1zeXNjb25mZGlyIDs7CisrICAtc3lzY29uZmRpcj0qIHwgLS1zeXNjb25mZGlyPSogfCAtLXN5c2NvbmZkaT0qIHwgLS1zeXNjb25mZD0qIHwgLS1zeXNjb25mPSogXAorKyAgfCAtLXN5c2Nvbj0qIHwgLS1zeXNjbz0qIHwgLS1zeXNjPSogfCAtLXN5cz0qIHwgLS1zeT0qKQorKyAgICBzeXNjb25mZGlyPSRhY19vcHRhcmcgOzsKKysKKysgIC10YXJnZXQgfCAtLXRhcmdldCB8IC0tdGFyZ2UgfCAtLXRhcmcgfCAtLXRhciB8IC0tdGEgfCAtLXQpCisrICAgIGFjX3ByZXY9dGFyZ2V0X2FsaWFzIDs7CisrICAtdGFyZ2V0PSogfCAtLXRhcmdldD0qIHwgLS10YXJnZT0qIHwgLS10YXJnPSogfCAtLXRhcj0qIHwgLS10YT0qIHwgLS10PSopCisrICAgIHRhcmdldF9hbGlhcz0kYWNfb3B0YXJnIDs7CisrCisrICAtdiB8IC12ZXJib3NlIHwgLS12ZXJib3NlIHwgLS12ZXJib3MgfCAtLXZlcmJvIHwgLS12ZXJiKQorKyAgICB2ZXJib3NlPXllcyA7OworKworKyAgLXZlcnNpb24gfCAtLXZlcnNpb24gfCAtLXZlcnNpbyB8IC0tdmVyc2kgfCAtLXZlcnMgfCAtVikKKysgICAgYWNfaW5pdF92ZXJzaW9uPTogOzsKKysKKysgIC13aXRoLSogfCAtLXdpdGgtKikKKysgICAgYWNfcGFja2FnZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGgtXChbXj1dKlwpJ2AKKysgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorKyAgICBleHByICJ4JGFjX3BhY2thZ2UiIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisrICAgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3BhY2thZ2UiID4mMgorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKyAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlIHwgc2VkICdzL1stLl0vXy9nJ2AKKysgICAgZXZhbCB3aXRoXyRhY19wYWNrYWdlPVwkYWNfb3B0YXJnIDs7CisrCisrICAtd2l0aG91dC0qIHwgLS13aXRob3V0LSopCisrICAgIGFjX3BhY2thZ2U9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRob3V0LVwoLipcKSdgCisrICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKysgICAgZXhwciAieCRhY19wYWNrYWdlIiA6ICIuKlteLS5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorKyAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY19wYWNrYWdlIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysgICAgYWNfcGFja2FnZT1gZWNobyAkYWNfcGFja2FnZSB8IHNlZCAncy9bLS5dL18vZydgCisrICAgIGV2YWwgd2l0aF8kYWNfcGFja2FnZT1ubyA7OworKworKyAgLS14KQorKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLXguCisrICAgIHdpdGhfeD15ZXMgOzsKKysKKysgIC14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGUgfCAtLXgtaW5jbHVkIHwgLS14LWluY2x1IFwKKysgIHwgLS14LWluY2wgfCAtLXgtaW5jIHwgLS14LWluIHwgLS14LWkpCisrICAgIGFjX3ByZXY9eF9pbmNsdWRlcyA7OworKyAgLXgtaW5jbHVkZXM9KiB8IC0teC1pbmNsdWRlcz0qIHwgLS14LWluY2x1ZGU9KiB8IC0teC1pbmNsdWQ9KiB8IC0teC1pbmNsdT0qIFwKKysgIHwgLS14LWluY2w9KiB8IC0teC1pbmM9KiB8IC0teC1pbj0qIHwgLS14LWk9KikKKysgICAgeF9pbmNsdWRlcz0kYWNfb3B0YXJnIDs7CisrCisrICAteC1saWJyYXJpZXMgfCAtLXgtbGlicmFyaWVzIHwgLS14LWxpYnJhcmllIHwgLS14LWxpYnJhcmkgXAorKyAgfCAtLXgtbGlicmFyIHwgLS14LWxpYnJhIHwgLS14LWxpYnIgfCAtLXgtbGliIHwgLS14LWxpIHwgLS14LWwpCisrICAgIGFjX3ByZXY9eF9saWJyYXJpZXMgOzsKKysgIC14LWxpYnJhcmllcz0qIHwgLS14LWxpYnJhcmllcz0qIHwgLS14LWxpYnJhcmllPSogfCAtLXgtbGlicmFyaT0qIFwKKysgIHwgLS14LWxpYnJhcj0qIHwgLS14LWxpYnJhPSogfCAtLXgtbGlicj0qIHwgLS14LWxpYj0qIHwgLS14LWxpPSogfCAtLXgtbD0qKQorKyAgICB4X2xpYnJhcmllcz0kYWNfb3B0YXJnIDs7CisrCisrICAtKikgeyBlY2hvICIkYXNfbWU6IGVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uOiAkYWNfb3B0aW9uCisrVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMgorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKyAgICA7OworKworKyAgKj0qKQorKyAgICBhY19lbnZ2YXI9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4XChbXj1dKlwpPSdgCisrICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKysgICAgZXhwciAieCRhY19lbnZ2YXIiIDogIi4qW15fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorKyAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB2YXJpYWJsZSBuYW1lOiAkYWNfZW52dmFyIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysgICAgZXZhbCAkYWNfZW52dmFyPVwkYWNfb3B0YXJnCisrICAgIGV4cG9ydCAkYWNfZW52dmFyIDs7CisrCisrICAqKQorKyAgICAjIEZJWE1FOiBzaG91bGQgYmUgcmVtb3ZlZCBpbiBhdXRvY29uZiAzLjAuCisrICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogeW91IHNob3VsZCB1c2UgLS1idWlsZCwgLS1ob3N0LCAtLXRhcmdldCIgPiYyCisrICAgIGV4cHIgIngkYWNfb3B0aW9uIiA6ICIuKlteLS5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorKyAgICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogaW52YWxpZCBob3N0IHR5cGU6ICRhY19vcHRpb24iID4mMgorKyAgICA6ICR7YnVpbGRfYWxpYXM9JGFjX29wdGlvbn0gJHtob3N0X2FsaWFzPSRhY19vcHRpb259ICR7dGFyZ2V0X2FsaWFzPSRhY19vcHRpb259CisrICAgIDs7CisrCisrICBlc2FjCisrZG9uZQorKworK2lmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorKyAgYWNfb3B0aW9uPS0tYGVjaG8gJGFjX3ByZXYgfCBzZWQgJ3MvXy8tL2cnYAorKyAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBtaXNzaW5nIGFyZ3VtZW50IHRvICRhY19vcHRpb24iID4mMgorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorK2ZpCisrCisrIyBCZSBzdXJlIHRvIGhhdmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWVzLgorK2ZvciBhY192YXIgaW4JZXhlY19wcmVmaXggcHJlZml4IGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YXJvb3RkaXIgXAorKwkJZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgaW5jbHVkZWRpciBcCisrCQlvbGRpbmNsdWRlZGlyIGRvY2RpciBpbmZvZGlyIGh0bWxkaXIgZHZpZGlyIHBkZmRpciBwc2RpciBcCisrCQlsaWJkaXIgbG9jYWxlZGlyIG1hbmRpcgorK2RvCisrICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKysgIGNhc2UgJGFjX3ZhbCBpbgorKyAgICBbXFwvJF0qIHwgPzpbXFwvXSogKSAgY29udGludWU7OworKyAgICBOT05FIHwgJycgKSBjYXNlICRhY192YXIgaW4gKnByZWZpeCApIGNvbnRpbnVlOzsgZXNhYzs7CisrICBlc2FjCisrICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiID4mMgorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorK2RvbmUKKysKKysjIFRoZXJlIG1pZ2h0IGJlIHBlb3BsZSB3aG8gZGVwZW5kIG9uIHRoZSBvbGQgYnJva2VuIGJlaGF2aW9yOiBgJGhvc3QnCisrIyB1c2VkIHRvIGhvbGQgdGhlIGFyZ3VtZW50IG9mIC0taG9zdCBldGMuCisrIyBGSVhNRTogVG8gcmVtb3ZlIHNvbWUgZGF5LgorK2J1aWxkPSRidWlsZF9hbGlhcworK2hvc3Q9JGhvc3RfYWxpYXMKKyt0YXJnZXQ9JHRhcmdldF9hbGlhcworKworKyMgRklYTUU6IFRvIHJlbW92ZSBzb21lIGRheS4KKytpZiB0ZXN0ICJ4JGhvc3RfYWxpYXMiICE9IHg7IHRoZW4KKysgIGlmIHRlc3QgIngkYnVpbGRfYWxpYXMiID0geDsgdGhlbgorKyAgICBjcm9zc19jb21waWxpbmc9bWF5YmUKKysgICAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJZiB5b3Ugd2FudGVkIHRvIHNldCB0aGUgLS1idWlsZCB0eXBlLCBkb24ndCB1c2UgLS1ob3N0LgorKyAgICBJZiBhIGNyb3NzIGNvbXBpbGVyIGlzIGRldGVjdGVkIHRoZW4gY3Jvc3MgY29tcGlsZSBtb2RlIHdpbGwgYmUgdXNlZC4iID4mMgorKyAgZWxpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiAhPSAieCRob3N0X2FsaWFzIjsgdGhlbgorKyAgICBjcm9zc19jb21waWxpbmc9eWVzCisrICBmaQorK2ZpCisrCisrYWNfdG9vbF9wcmVmaXg9CisrdGVzdCAtbiAiJGhvc3RfYWxpYXMiICYmIGFjX3Rvb2xfcHJlZml4PSRob3N0X2FsaWFzLQorKworK3Rlc3QgIiRzaWxlbnQiID0geWVzICYmIGV4ZWMgNj4vZGV2L251bGwKKysKKysKKythY19wd2Q9YHB3ZGAgJiYgdGVzdCAtbiAiJGFjX3B3ZCIgJiYKKythY19sc19kaT1gbHMgLWRpIC5gICYmCisrYWNfcHdkX2xzX2RpPWBjZCAiJGFjX3B3ZCIgJiYgbHMgLWRpIC5gIHx8CisrICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IFdvcmtpbmcgZGlyZWN0b3J5IGNhbm5vdCBiZSBkZXRlcm1pbmVkIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyt0ZXN0ICJYJGFjX2xzX2RpIiA9ICJYJGFjX3B3ZF9sc19kaSIgfHwKKysgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogcHdkIGRvZXMgbm90IHJlcG9ydCBuYW1lIG9mIHdvcmtpbmcgZGlyZWN0b3J5IiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysKKysKKysjIEZpbmQgdGhlIHNvdXJjZSBmaWxlcywgaWYgbG9jYXRpb24gd2FzIG5vdCBzcGVjaWZpZWQuCisraWYgdGVzdCAteiAiJHNyY2RpciI7IHRoZW4KKysgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9eWVzCisrICAjIFRyeSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBzY3JpcHQsIHRoZW4gdGhlIHBhcmVudCBkaXJlY3RvcnkuCisrICBhY19jb25mZGlyPWAkYXNfZGlybmFtZSAtLSAiJDAiIHx8CisrJGFzX2V4cHIgWCIkMCIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKysJIFgiJDAiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisrCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAorKwkgWCIkMCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CisrZWNobyBYIiQwIiB8CisrICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXChcL1wvXClbXi9dLioveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cL1wpJC97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXChcL1wpLioveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIHMvLiovLi87IHEnYAorKyAgc3JjZGlyPSRhY19jb25mZGlyCisrICBpZiB0ZXN0ICEgLXIgIiRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlIjsgdGhlbgorKyAgICBzcmNkaXI9Li4KKysgIGZpCisrZWxzZQorKyAgYWNfc3JjZGlyX2RlZmF1bHRlZD1ubworK2ZpCisraWYgdGVzdCAhIC1yICIkc3JjZGlyLyRhY191bmlxdWVfZmlsZSI7IHRoZW4KKysgIHRlc3QgIiRhY19zcmNkaXJfZGVmYXVsdGVkIiA9IHllcyAmJiBzcmNkaXI9IiRhY19jb25mZGlyIG9yIC4uIgorKyAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBzb3VyY2VzICgkYWNfdW5pcXVlX2ZpbGUpIGluICRzcmNkaXIiID4mMgorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorK2ZpCisrYWNfbXNnPSJzb3VyY2VzIGFyZSBpbiAkc3JjZGlyLCBidXQgXGBjZCAkc3JjZGlyJyBkb2VzIG5vdCB3b3JrIgorK2FjX2Fic19jb25mZGlyPWAoCisrCWNkICIkc3JjZGlyIiAmJiB0ZXN0IC1yICIuLyRhY191bmlxdWVfZmlsZSIgfHwgeyBlY2hvICIkYXNfbWU6IGVycm9yOiAkYWNfbXNnIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysJcHdkKWAKKysjIFdoZW4gYnVpbGRpbmcgaW4gcGxhY2UsIHNldCBzcmNkaXI9LgorK2lmIHRlc3QgIiRhY19hYnNfY29uZmRpciIgPSAiJGFjX3B3ZCI7IHRoZW4KKysgIHNyY2Rpcj0uCisrZmkKKysjIFJlbW92ZSB1bm5lY2Vzc2FyeSB0cmFpbGluZyBzbGFzaGVzIGZyb20gc3JjZGlyLgorKyMgRG91YmxlIHNsYXNoZXMgaW4gZmlsZSBuYW1lcyBpbiBvYmplY3QgZmlsZSBkZWJ1Z2dpbmcgaW5mbworKyMgbWVzcyB1cCBNLXggZ2RiIGluIEVtYWNzLgorK2Nhc2UgJHNyY2RpciBpbgorKyovKSBzcmNkaXI9YGV4cHIgIlgkc3JjZGlyIiA6ICdYXCguKlteL11cKScgXHwgIlgkc3JjZGlyIiA6ICdYXCguKlwpJ2A7OworK2VzYWMKKytmb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbworKyAgZXZhbCBhY19lbnZfJHthY192YXJ9X3NldD1cJHske2FjX3Zhcn0rc2V0fQorKyAgZXZhbCBhY19lbnZfJHthY192YXJ9X3ZhbHVlPVwkJHthY192YXJ9CisrICBldmFsIGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0PVwkeyR7YWNfdmFyfStzZXR9CisrICBldmFsIGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KKytkb25lCisrCisrIworKyMgUmVwb3J0IHRoZSAtLWhlbHAgbWVzc2FnZS4KKysjCisraWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAibG9uZyI7IHRoZW4KKysgICMgT21pdCBzb21lIGludGVybmFsIG9yIG9ic29sZXRlIG9wdGlvbnMgdG8gbWFrZSB0aGUgbGlzdCBsZXNzIGltcG9zaW5nLgorKyAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgorKyAgY2F0IDw8X0FDRU9GCisrXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgbmV3bGliIE5FV0xJQl9WRVJTSU9OIHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KKysKKytVc2FnZTogJDAgW09QVElPTl0uLi4gW1ZBUj1WQUxVRV0uLi4KKysKKytUbyBhc3NpZ24gZW52aXJvbm1lbnQgdmFyaWFibGVzIChlLmcuLCBDQywgQ0ZMQUdTLi4uKSwgc3BlY2lmeSB0aGVtIGFzCisrVkFSPVZBTFVFLiAgU2VlIGJlbG93IGZvciBkZXNjcmlwdGlvbnMgb2Ygc29tZSBvZiB0aGUgdXNlZnVsIHZhcmlhYmxlcy4KKysKKytEZWZhdWx0cyBmb3IgdGhlIG9wdGlvbnMgYXJlIHNwZWNpZmllZCBpbiBicmFja2V0cy4KKysKKytDb25maWd1cmF0aW9uOgorKyAgLWgsIC0taGVscCAgICAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQKKysgICAgICAtLWhlbHA9c2hvcnQgICAgICAgIGRpc3BsYXkgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGlzIHBhY2thZ2UKKysgICAgICAtLWhlbHA9cmVjdXJzaXZlICAgIGRpc3BsYXkgdGhlIHNob3J0IGhlbHAgb2YgYWxsIHRoZSBpbmNsdWRlZCBwYWNrYWdlcworKyAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgZGlzcGxheSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisrICAtcSwgLS1xdWlldCwgLS1zaWxlbnQgICBkbyBub3QgcHJpbnQgXGBjaGVja2luZy4uLicgbWVzc2FnZXMKKysgICAgICAtLWNhY2hlLWZpbGU9RklMRSAgIGNhY2hlIHRlc3QgcmVzdWx0cyBpbiBGSUxFIFtkaXNhYmxlZF0KKysgIC1DLCAtLWNvbmZpZy1jYWNoZSAgICAgIGFsaWFzIGZvciBcYC0tY2FjaGUtZmlsZT1jb25maWcuY2FjaGUnCisrICAtbiwgLS1uby1jcmVhdGUgICAgICAgICBkbyBub3QgY3JlYXRlIG91dHB1dCBmaWxlcworKyAgICAgIC0tc3JjZGlyPURJUiAgICAgICAgZmluZCB0aGUgc291cmNlcyBpbiBESVIgW2NvbmZpZ3VyZSBkaXIgb3IgXGAuLiddCisrCisrSW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzOgorKyAgLS1wcmVmaXg9UFJFRklYICAgICAgICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMgaW4gUFJFRklYCisrCQkJICBbJGFjX2RlZmF1bHRfcHJlZml4XQorKyAgLS1leGVjLXByZWZpeD1FUFJFRklYICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGZpbGVzIGluIEVQUkVGSVgKKysJCQkgIFtQUkVGSVhdCisrCisrQnkgZGVmYXVsdCwgXGBtYWtlIGluc3RhbGwnIHdpbGwgaW5zdGFsbCBhbGwgdGhlIGZpbGVzIGluCisrXGAkYWNfZGVmYXVsdF9wcmVmaXgvYmluJywgXGAkYWNfZGVmYXVsdF9wcmVmaXgvbGliJyBldGMuICBZb3UgY2FuIHNwZWNpZnkKKythbiBpbnN0YWxsYXRpb24gcHJlZml4IG90aGVyIHRoYW4gXGAkYWNfZGVmYXVsdF9wcmVmaXgnIHVzaW5nIFxgLS1wcmVmaXgnLAorK2ZvciBpbnN0YW5jZSBcYC0tcHJlZml4PVwkSE9NRScuCisrCisrRm9yIGJldHRlciBjb250cm9sLCB1c2UgdGhlIG9wdGlvbnMgYmVsb3cuCisrCisrRmluZSB0dW5pbmcgb2YgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKysgIC0tYmluZGlyPURJUiAgICAgICAgICAgdXNlciBleGVjdXRhYmxlcyBbRVBSRUZJWC9iaW5dCisrICAtLXNiaW5kaXI9RElSICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVjdXRhYmxlcyBbRVBSRUZJWC9zYmluXQorKyAgLS1saWJleGVjZGlyPURJUiAgICAgICBwcm9ncmFtIGV4ZWN1dGFibGVzIFtFUFJFRklYL2xpYmV4ZWNdCisrICAtLXN5c2NvbmZkaXI9RElSICAgICAgIHJlYWQtb25seSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvZXRjXQorKyAgLS1zaGFyZWRzdGF0ZWRpcj1ESVIgICBtb2RpZmlhYmxlIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtQUkVGSVgvY29tXQorKyAgLS1sb2NhbHN0YXRlZGlyPURJUiAgICBtb2RpZmlhYmxlIHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC92YXJdCisrICAtLWxpYmRpcj1ESVIgICAgICAgICAgIG9iamVjdCBjb2RlIGxpYnJhcmllcyBbRVBSRUZJWC9saWJdCisrICAtLWluY2x1ZGVkaXI9RElSICAgICAgIEMgaGVhZGVyIGZpbGVzIFtQUkVGSVgvaW5jbHVkZV0KKysgIC0tb2xkaW5jbHVkZWRpcj1ESVIgICAgQyBoZWFkZXIgZmlsZXMgZm9yIG5vbi1nY2MgWy91c3IvaW5jbHVkZV0KKysgIC0tZGF0YXJvb3RkaXI9RElSICAgICAgcmVhZC1vbmx5IGFyY2guLWluZGVwZW5kZW50IGRhdGEgcm9vdCBbUFJFRklYL3NoYXJlXQorKyAgLS1kYXRhZGlyPURJUiAgICAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSXQorKyAgLS1pbmZvZGlyPURJUiAgICAgICAgICBpbmZvIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL2luZm9dCisrICAtLWxvY2FsZWRpcj1ESVIgICAgICAgIGxvY2FsZS1kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVIvbG9jYWxlXQorKyAgLS1tYW5kaXI9RElSICAgICAgICAgICBtYW4gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvbWFuXQorKyAgLS1kb2NkaXI9RElSICAgICAgICAgICBkb2N1bWVudGF0aW9uIHJvb3QgW0RBVEFST09URElSL2RvYy9uZXdsaWJdCisrICAtLWh0bWxkaXI9RElSICAgICAgICAgIGh0bWwgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorKyAgLS1kdmlkaXI9RElSICAgICAgICAgICBkdmkgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorKyAgLS1wZGZkaXI9RElSICAgICAgICAgICBwZGYgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorKyAgLS1wc2Rpcj1ESVIgICAgICAgICAgICBwcyBkb2N1bWVudGF0aW9uIFtET0NESVJdCisrX0FDRU9GCisrCisrICBjYXQgPDxcX0FDRU9GCisrCisrUHJvZ3JhbSBuYW1lczoKKysgIC0tcHJvZ3JhbS1wcmVmaXg9UFJFRklYICAgICAgICAgICAgcHJlcGVuZCBQUkVGSVggdG8gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKKysgIC0tcHJvZ3JhbS1zdWZmaXg9U1VGRklYICAgICAgICAgICAgYXBwZW5kIFNVRkZJWCB0byBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworKyAgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPVBST0dSQU0gICBydW4gc2VkIFBST0dSQU0gb24gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKKysKKytTeXN0ZW0gdHlwZXM6CisrICAtLWJ1aWxkPUJVSUxEICAgICBjb25maWd1cmUgZm9yIGJ1aWxkaW5nIG9uIEJVSUxEIFtndWVzc2VkXQorKyAgLS1ob3N0PUhPU1QgICAgICAgY3Jvc3MtY29tcGlsZSB0byBidWlsZCBwcm9ncmFtcyB0byBydW4gb24gSE9TVCBbQlVJTERdCisrICAtLXRhcmdldD1UQVJHRVQgICBjb25maWd1cmUgZm9yIGJ1aWxkaW5nIGNvbXBpbGVycyBmb3IgVEFSR0VUIFtIT1NUXQorK19BQ0VPRgorK2ZpCisrCisraWYgdGVzdCAtbiAiJGFjX2luaXRfaGVscCI7IHRoZW4KKysgIGNhc2UgJGFjX2luaXRfaGVscCBpbgorKyAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIG5ld2xpYiBORVdMSUJfVkVSU0lPTjoiOzsKKysgICBlc2FjCisrICBjYXQgPDxcX0FDRU9GCisrCisrT3B0aW9uYWwgRmVhdHVyZXM6CisrICAtLWRpc2FibGUtRkVBVFVSRSAgICAgICBkbyBub3QgaW5jbHVkZSBGRUFUVVJFIChzYW1lIGFzIC0tZW5hYmxlLUZFQVRVUkU9bm8pCisrICAtLWVuYWJsZS1GRUFUVVJFWz1BUkddICBpbmNsdWRlIEZFQVRVUkUgW0FSRz15ZXNdCisrICAtLWVuYWJsZS1tdWx0aWxpYiAgICAgICAgIGJ1aWxkIG1hbnkgbGlicmFyeSB2ZXJzaW9ucyAoZGVmYXVsdCkKKysgIC0tZW5hYmxlLXRhcmdldC1vcHRzcGFjZSAgb3B0aW1pemUgZm9yIHNwYWNlCisrICAtLWVuYWJsZS1tYWxsb2MtZGVidWdnaW5nIGluZGljYXRlIG1hbGxvYyBkZWJ1Z2dpbmcgcmVxdWVzdGVkCisrICAtLWVuYWJsZS1uZXdsaWItbWIgICAgICAgIGVuYWJsZSBtdWx0aWJ5dGUgc3VwcG9ydAorKyAgLS1lbmFibGUtbmV3bGliLWljb252ICAgICBlbmFibGUgaWNvbnYgbGlicmFyeSBzdXBwb3J0CisrICAtLWVuYWJsZS1uZXdsaWItYnVpbHRpbi1jb252ZXJ0ZXJzICAgZW5hYmxlIHNwZWNpZmljIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGljb252IGNvbnZlcnRlcnMgdG8gYmUgYnVpbHQtaW4KKysgIC0tZW5hYmxlLW5ld2xpYi1tdWx0aXRocmVhZCAgICAgICAgZW5hYmxlIHN1cHBvcnQgZm9yIG11bHRpcGxlIHRocmVhZHMKKysgIC0tZW5hYmxlLW5ld2xpYi1lbGl4LWxldmVsICAgICAgICAgc3VwcGx5IGRlc2lyZWQgZWxpeCBsaWJyYXJ5IGxldmVsICgxLTQpCisrICAtLWRpc2FibGUtbmV3bGliLWlvLWZsb2F0IGRpc2FibGUgcHJpbnRmL3NjYW5mIGZhbWlseSBmbG9hdCBzdXBwb3J0CisrICAtLWRpc2FibGUtbmV3bGliLXN1cHBsaWVkLXN5c2NhbGxzIGRpc2FibGUgbmV3bGliIGZyb20gc3VwcGx5aW5nIHN5c2NhbGxzCisrICAtLWVuYWJsZS1tYWludGFpbmVyLW1vZGUgZW5hYmxlIG1ha2UgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBub3QgdXNlZnVsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAoYW5kIHNvbWV0aW1lcyBjb25mdXNpbmcpIHRvIHRoZSBjYXN1YWwgaW5zdGFsbGVyCisrCisrX0FDRU9GCisrYWNfc3RhdHVzPSQ/CisrZmkKKysKKytpZiB0ZXN0ICIkYWNfaW5pdF9oZWxwIiA9ICJyZWN1cnNpdmUiOyB0aGVuCisrICAjIElmIHRoZXJlIGFyZSBzdWJkaXJzLCByZXBvcnQgdGhlaXIgc3BlY2lmaWMgLS1oZWxwLgorKyAgZm9yIGFjX2RpciBpbiA6ICRhY19zdWJkaXJzX2FsbDsgZG8gdGVzdCAieCRhY19kaXIiID0geDogJiYgY29udGludWUKKysgICAgdGVzdCAtZCAiJGFjX2RpciIgfHwgY29udGludWUKKysgICAgYWNfYnVpbGRkaXI9LgorKworK2Nhc2UgIiRhY19kaXIiIGluCisrLikgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisrKikKKysgIGFjX2Rpcl9zdWZmaXg9L2BlY2hvICIkYWNfZGlyIiB8IHNlZCAncyxeXC5bXFwvXSwsJ2AKKysgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKysgIGFjX3RvcF9idWlsZGRpcl9zdWI9YGVjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAncywvW15cXC9dKiwvLi4sZztzLC8sLCdgCisrICBjYXNlICRhY190b3BfYnVpbGRkaXJfc3ViIGluCisrICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisrICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1Yi8gOzsKKysgIGVzYWMgOzsKKytlc2FjCisrYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkCisrYWNfYWJzX2J1aWxkZGlyPSRhY19wd2QkYWNfZGlyX3N1ZmZpeAorKyMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6CisrYWNfdG9wX2J1aWxkZGlyPSRhY190b3BfYnVpbGRfcHJlZml4CisrCisrY2FzZSAkc3JjZGlyIGluCisrICAuKSAgIyBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisrICAgIGFjX3NyY2Rpcj0uCisrICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpcl9zdWIKKysgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZCA7OworKyAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBuYW1lLgorKyAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OworKyAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIKKysgICAgYWNfYWJzX3RvcF9zcmNkaXI9JHNyY2RpciA7OworKyAgKikgIyBSZWxhdGl2ZSBuYW1lLgorKyAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKysgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIKKysgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZC8kc3JjZGlyIDs7CisrZXNhYworK2FjX2Fic19zcmNkaXI9JGFjX2Fic190b3Bfc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKysKKysgICAgY2QgIiRhY19kaXIiIHx8IHsgYWNfc3RhdHVzPSQ/OyBjb250aW51ZTsgfQorKyAgICAjIENoZWNrIGZvciBndWVzdGVkIGNvbmZpZ3VyZS4KKysgICAgaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUuZ251IjsgdGhlbgorKyAgICAgIGVjaG8gJiYKKysgICAgICAkU0hFTEwgIiRhY19zcmNkaXIvY29uZmlndXJlLmdudSIgLS1oZWxwPXJlY3Vyc2l2ZQorKyAgICBlbGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlIjsgdGhlbgorKyAgICAgIGVjaG8gJiYKKysgICAgICAkU0hFTEwgIiRhY19zcmNkaXIvY29uZmlndXJlIiAtLWhlbHA9cmVjdXJzaXZlCisrICAgIGVsc2UKKysgICAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG5vIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaXMgaW4gJGFjX2RpciIgPiYyCisrICAgIGZpIHx8IGFjX3N0YXR1cz0kPworKyAgICBjZCAiJGFjX3B3ZCIgfHwgeyBhY19zdGF0dXM9JD87IGJyZWFrOyB9CisrICBkb25lCisrZmkKKysKKyt0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIiAmJiBleGl0ICRhY19zdGF0dXMKKytpZiAkYWNfaW5pdF92ZXJzaW9uOyB0aGVuCisrICBjYXQgPDxcX0FDRU9GCisrbmV3bGliIGNvbmZpZ3VyZSBORVdMSUJfVkVSU0lPTgorK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MQorKworK0NvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKysyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK1RoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisrZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorK19BQ0VPRgorKyAgZXhpdAorK2ZpCisrY2F0ID5jb25maWcubG9nIDw8X0FDRU9GCisrVGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hpbGUKKytydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgorKworK0l0IHdhcyBjcmVhdGVkIGJ5IG5ld2xpYiAkYXNfbWUgTkVXTElCX1ZFUlNJT04sIHdoaWNoIHdhcworK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworKworKyAgJCAkMCAkQAorKworK19BQ0VPRgorK2V4ZWMgNT4+Y29uZmlnLmxvZworK3sKKytjYXQgPDxfQVNVTkFNRQorKyMjIC0tLS0tLS0tLSAjIworKyMjIFBsYXRmb3JtLiAjIworKyMjIC0tLS0tLS0tLSAjIworKworK2hvc3RuYW1lID0gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCisrdW5hbWUgLW0gPSBgKHVuYW1lIC1tKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisrdW5hbWUgLXIgPSBgKHVuYW1lIC1yKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisrdW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisrdW5hbWUgLXYgPSBgKHVuYW1lIC12KSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisrCisrL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisrL2Jpbi91bmFtZSAtWCAgICAgPSBgKC9iaW4vdW5hbWUgLVgpIDI+L2Rldi9udWxsICAgICB8fCBlY2hvIHVua25vd25gCisrCisrL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbCAgICAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorKy91c3IvYmluL2FyY2ggLWsgICAgICAgPSBgKC91c3IvYmluL2FyY2ggLWspIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKysvdXNyL2NvbnZleC9nZXRzeXNpbmZvID0gYCgvdXNyL2NvbnZleC9nZXRzeXNpbmZvKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisrL3Vzci9iaW4vaG9zdGluZm8gICAgICA9IGAoL3Vzci9iaW4vaG9zdGluZm8pIDI+L2Rldi9udWxsICAgICAgfHwgZWNobyB1bmtub3duYAorKy9iaW4vbWFjaGluZSAgICAgICAgICAgPSBgKC9iaW4vbWFjaGluZSkgMj4vZGV2L251bGwgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKysvdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCisrL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGwgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorKworK19BU1VOQU1FCisrCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgIGVjaG8gIlBBVEg6ICRhc19kaXIiCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKyt9ID4mNQorKworK2NhdCA+JjUgPDxfQUNFT0YKKysKKysKKysjIyAtLS0tLS0tLS0tLSAjIworKyMjIENvcmUgdGVzdHMuICMjCisrIyMgLS0tLS0tLS0tLS0gIyMKKysKKytfQUNFT0YKKysKKysKKysjIEtlZXAgYSB0cmFjZSBvZiB0aGUgY29tbWFuZCBsaW5lLgorKyMgU3RyaXAgb3V0IC0tbm8tY3JlYXRlIGFuZCAtLW5vLXJlY3Vyc2lvbiBzbyB0aGV5IGRvIG5vdCBwaWxlIHVwLgorKyMgU3RyaXAgb3V0IC0tc2lsZW50IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byByZWNvcmQgaXQgZm9yIGZ1dHVyZSBydW5zLgorKyMgQWxzbyBxdW90ZSBhbnkgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGEtY2hhcmFjdGVycy4KKysjIE1ha2UgdHdvIHBhc3NlcyB0byBhbGxvdyBmb3IgcHJvcGVyIGR1cGxpY2F0ZS1hcmd1bWVudCBzdXBwcmVzc2lvbi4KKythY19jb25maWd1cmVfYXJncz0KKythY19jb25maWd1cmVfYXJnczA9CisrYWNfY29uZmlndXJlX2FyZ3MxPQorK2FjX211c3Rfa2VlcF9uZXh0PWZhbHNlCisrZm9yIGFjX3Bhc3MgaW4gMSAyCisrZG8KKysgIGZvciBhY19hcmcKKysgIGRvCisrICAgIGNhc2UgJGFjX2FyZyBpbgorKyAgICAtbm8tY3JlYXRlIHwgLS1uby1jKiB8IC1uIHwgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tciopIGNvbnRpbnVlIDs7CisrICAgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCisrICAgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQorKyAgICAgIGNvbnRpbnVlIDs7CisrICAgICpcJyopCisrICAgICAgYWNfYXJnPWBlY2hvICIkYWNfYXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworKyAgICBlc2FjCisrICAgIGNhc2UgJGFjX3Bhc3MgaW4KKysgICAgMSkgYWNfY29uZmlndXJlX2FyZ3MwPSIkYWNfY29uZmlndXJlX2FyZ3MwICckYWNfYXJnJyIgOzsKKysgICAgMikKKysgICAgICBhY19jb25maWd1cmVfYXJnczE9IiRhY19jb25maWd1cmVfYXJnczEgJyRhY19hcmcnIgorKyAgICAgIGlmIHRlc3QgJGFjX211c3Rfa2VlcF9uZXh0ID0gdHJ1ZTsgdGhlbgorKwlhY19tdXN0X2tlZXBfbmV4dD1mYWxzZSAjIEdvdCB2YWx1ZSwgYmFjayB0byBub3JtYWwuCisrICAgICAgZWxzZQorKwljYXNlICRhY19hcmcgaW4KKysJICAqPSogfCAtLWNvbmZpZy1jYWNoZSB8IC1DIHwgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qIFwKKysJICB8IC1lbmFibGUtKiB8IC0tZW5hYmxlLSogfCAtZ2FzIHwgLS1nKiB8IC1uZnAgfCAtLW5mKiBcCisrCSAgfCAtcSB8IC1xdWlldCB8IC0tcSogfCAtc2lsZW50IHwgLS1zaWwqIHwgLXYgfCAtdmVyYiogXAorKwkgIHwgLXdpdGgtKiB8IC0td2l0aC0qIHwgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qIHwgLS14KQorKwkgICAgY2FzZSAiJGFjX2NvbmZpZ3VyZV9hcmdzMCAiIGluCisrCSAgICAgICIkYWNfY29uZmlndXJlX2FyZ3MxIioiICckYWNfYXJnJyAiKiApIGNvbnRpbnVlIDs7CisrCSAgICBlc2FjCisrCSAgICA7OworKwkgIC0qICkgYWNfbXVzdF9rZWVwX25leHQ9dHJ1ZSA7OworKwllc2FjCisrICAgICAgZmkKKysgICAgICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICckYWNfYXJnJyIKKysgICAgICA7OworKyAgICBlc2FjCisrICBkb25lCisrZG9uZQorKyRhc191bnNldCBhY19jb25maWd1cmVfYXJnczAgfHwgdGVzdCAiJHthY19jb25maWd1cmVfYXJnczArc2V0fSIgIT0gc2V0IHx8IHsgYWNfY29uZmlndXJlX2FyZ3MwPTsgZXhwb3J0IGFjX2NvbmZpZ3VyZV9hcmdzMDsgfQorKyRhc191bnNldCBhY19jb25maWd1cmVfYXJnczEgfHwgdGVzdCAiJHthY19jb25maWd1cmVfYXJnczErc2V0fSIgIT0gc2V0IHx8IHsgYWNfY29uZmlndXJlX2FyZ3MxPTsgZXhwb3J0IGFjX2NvbmZpZ3VyZV9hcmdzMTsgfQorKworKyMgV2hlbiBpbnRlcnJ1cHRlZCBvciBleGl0J2QsIGNsZWFudXAgdGVtcG9yYXJ5IGZpbGVzLCBhbmQgY29tcGxldGUKKysjIGNvbmZpZy5sb2cuICBXZSByZW1vdmUgY29tbWVudHMgYmVjYXVzZSBhbnl3YXkgdGhlIHF1b3RlcyBpbiB0aGVyZQorKyMgd291bGQgY2F1c2UgcHJvYmxlbXMgb3IgbG9vayB1Z2x5LgorKyMgV0FSTklORzogVXNlICdcJycgdG8gcmVwcmVzZW50IGFuIGFwb3N0cm9waGUgd2l0aGluIHRoZSB0cmFwLgorKyMgV0FSTklORzogRG8gbm90IHN0YXJ0IHRoZSB0cmFwIGNvZGUgd2l0aCBhIG5ld2xpbmUsIGR1ZSB0byBhIEZyZWVCU0QgNC4wIGJ1Zy4KKyt0cmFwICdleGl0X3N0YXR1cz0kPworKyAgIyBTYXZlIGludG8gY29uZmlnLmxvZyBzb21lIGluZm9ybWF0aW9uIHRoYXQgbWlnaHQgaGVscCBpbiBkZWJ1Z2dpbmcuCisrICB7CisrICAgIGVjaG8KKysKKysgICAgY2F0IDw8XF9BU0JPWAorKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBDYWNoZSB2YXJpYWJsZXMuICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLSAjIworK19BU0JPWAorKyAgICBlY2hvCisrICAgICMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisrKAorKyAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAnXCcncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdcJydgOyBkbworKyAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKysgICAgY2FzZSAkYWNfdmFsIGluICMoCisrICAgICoke2FzX25sfSopCisrICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisrICAgICAgKl9jdl8qKSB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBDYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZS4iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogQ2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUuIiA+JjI7fSA7OworKyAgICAgIGVzYWMKKysgICAgICBjYXNlICRhY192YXIgaW4gIygKKysgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisrICAgICAgKikgJGFzX3Vuc2V0ICRhY192YXIgOzsKKysgICAgICBlc2FjIDs7CisrICAgIGVzYWMKKysgIGRvbmUKKysgIChzZXQpIDI+JjEgfAorKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9J1wnJyAnXCcnOyBzZXQpIDI+JjFgIGluICMoCisrICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKKysgICAgICBzZWQgLW4gXAorKwkicy8nXCcnLydcJydcXFxcJ1wnJydcJycvZzsKKysJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcJydcXDInXCcnL3AiCisrICAgICAgOzsgIygKKysgICAgKikKKysgICAgICBzZWQgLW4gIi9eW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qPS9wIgorKyAgICAgIDs7CisrICAgIGVzYWMgfAorKyAgICBzb3J0CisrKQorKyAgICBlY2hvCisrCisrICAgIGNhdCA8PFxfQVNCT1gKKysjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIE91dHB1dCB2YXJpYWJsZXMuICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKytfQVNCT1gKKysgICAgZWNobworKyAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF92YXJzCisrICAgIGRvCisrICAgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisrICAgICAgY2FzZSAkYWNfdmFsIGluCisrICAgICAgKlwnXCcnKikgYWNfdmFsPWBlY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CisrICAgICAgZXNhYworKyAgICAgIGVjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgorKyAgICBkb25lIHwgc29ydAorKyAgICBlY2hvCisrCisrICAgIGlmIHRlc3QgLW4gIiRhY19zdWJzdF9maWxlcyI7IHRoZW4KKysgICAgICBjYXQgPDxcX0FTQk9YCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIEZpbGUgc3Vic3RpdHV0aW9ucy4gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrX0FTQk9YCisrICAgICAgZWNobworKyAgICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X2ZpbGVzCisrICAgICAgZG8KKysJZXZhbCBhY192YWw9XCQkYWNfdmFyCisrCWNhc2UgJGFjX3ZhbCBpbgorKwkqXCdcJycqKSBhY192YWw9YGVjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKKysJZXNhYworKwllY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKKysgICAgICBkb25lIHwgc29ydAorKyAgICAgIGVjaG8KKysgICAgZmkKKysKKysgICAgaWYgdGVzdCAtcyBjb25mZGVmcy5oOyB0aGVuCisrICAgICAgY2F0IDw8XF9BU0JPWAorKyMjIC0tLS0tLS0tLS0tICMjCisrIyMgY29uZmRlZnMuaC4gIyMKKysjIyAtLS0tLS0tLS0tLSAjIworK19BU0JPWAorKyAgICAgIGVjaG8KKysgICAgICBjYXQgY29uZmRlZnMuaAorKyAgICAgIGVjaG8KKysgICAgZmkKKysgICAgdGVzdCAiJGFjX3NpZ25hbCIgIT0gMCAmJgorKyAgICAgIGVjaG8gIiRhc19tZTogY2F1Z2h0IHNpZ25hbCAkYWNfc2lnbmFsIgorKyAgICBlY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIgorKyAgfSA+JjUKKysgIHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiAmJgorKyAgICBybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMqIGNvbmYkJCogJGFjX2NsZWFuX2ZpbGVzICYmCisrICAgIGV4aXQgJGV4aXRfc3RhdHVzCisrJyAwCisrZm9yIGFjX3NpZ25hbCBpbiAxIDIgMTMgMTU7IGRvCisrICB0cmFwICdhY19zaWduYWw9JyRhY19zaWduYWwnOyB7IChleGl0IDEpOyBleGl0IDE7IH0nICRhY19zaWduYWwKKytkb25lCisrYWNfc2lnbmFsPTAKKysKKysjIGNvbmZkZWZzLmggYXZvaWRzIE9TIGNvbW1hbmQgbGluZSBsZW5ndGggbGltaXRzIHRoYXQgREVGUyBjYW4gZXhjZWVkLgorK3JtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcy5oCisrCisrIyBQcmVkZWZpbmVkIHByZXByb2Nlc3NvciB2YXJpYWJsZXMuCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgUEFDS0FHRV9OQU1FICIkUEFDS0FHRV9OQU1FIgorK19BQ0VPRgorKworKworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiJFBBQ0tBR0VfVEFSTkFNRSIKKytfQUNFT0YKKysKKysKKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIiRQQUNLQUdFX1ZFUlNJT04iCisrX0FDRU9GCisrCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIiRQQUNLQUdFX1NUUklORyIKKytfQUNFT0YKKysKKysKKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiJFBBQ0tBR0VfQlVHUkVQT1JUIgorK19BQ0VPRgorKworKworKyMgTGV0IHRoZSBzaXRlIGZpbGUgc2VsZWN0IGFuIGFsdGVybmF0ZSBjYWNoZSBmaWxlIGlmIGl0IHdhbnRzIHRvLgorKyMgUHJlZmVyIGV4cGxpY2l0bHkgc2VsZWN0ZWQgZmlsZSB0byBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIG9uZXMuCisraWYgdGVzdCAtbiAiJENPTkZJR19TSVRFIjsgdGhlbgorKyAgc2V0IHggIiRDT05GSUdfU0lURSIKKytlbGlmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgorKyAgc2V0IHggIiRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUiICIkcHJlZml4L2V0Yy9jb25maWcuc2l0ZSIKKytlbHNlCisrICBzZXQgeCAiJGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlIiBcCisrCSIkYWNfZGVmYXVsdF9wcmVmaXgvZXRjL2NvbmZpZy5zaXRlIgorK2ZpCisrc2hpZnQKKytmb3IgYWNfc2l0ZV9maWxlCisrZG8KKysgIGlmIHRlc3QgLXIgIiRhY19zaXRlX2ZpbGUiOyB0aGVuCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY1CisrZWNobyAiJGFzX21lOiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNjt9CisrICAgIHNlZCAncy9eL3wgLycgIiRhY19zaXRlX2ZpbGUiID4mNQorKyAgICAuICIkYWNfc2l0ZV9maWxlIgorKyAgZmkKKytkb25lCisrCisraWYgdGVzdCAtciAiJGNhY2hlX2ZpbGUiOyB0aGVuCisrICAjIFNvbWUgdmVyc2lvbnMgb2YgYmFzaCB3aWxsIGZhaWwgdG8gc291cmNlIC9kZXYvbnVsbCAoc3BlY2lhbAorKyAgIyBmaWxlcyBhY3R1YWxseSksIHNvIHdlIGF2b2lkIGRvaW5nIHRoYXQuCisrICBpZiB0ZXN0IC1mICIkY2FjaGVfZmlsZSI7IHRoZW4KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CisrZWNobyAiJGFzX21lOiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorKyAgICBjYXNlICRjYWNoZV9maWxlIGluCisrICAgICAgW1xcL10qIHwgPzpbXFwvXSogKSAuICIkY2FjaGVfZmlsZSI7OworKyAgICAgICopICAgICAgICAgICAgICAgICAgICAgIC4gIi4vJGNhY2hlX2ZpbGUiOzsKKysgICAgZXNhYworKyAgZmkKKytlbHNlCisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CisrZWNobyAiJGFzX21lOiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKysgID4kY2FjaGVfZmlsZQorK2ZpCisrCisrIyBDaGVjayB0aGF0IHRoZSBwcmVjaW91cyB2YXJpYWJsZXMgc2F2ZWQgaW4gdGhlIGNhY2hlIGhhdmUga2VwdCB0aGUgc2FtZQorKyMgdmFsdWUuCisrYWNfY2FjaGVfY29ycnVwdGVkPWZhbHNlCisrZm9yIGFjX3ZhciBpbiAkYWNfcHJlY2lvdXNfdmFyczsgZG8KKysgIGV2YWwgYWNfb2xkX3NldD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0CisrICBldmFsIGFjX25ld19zZXQ9XCRhY19lbnZfJHthY192YXJ9X3NldAorKyAgZXZhbCBhY19vbGRfdmFsPVwkYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZQorKyAgZXZhbCBhY19uZXdfdmFsPVwkYWNfZW52XyR7YWNfdmFyfV92YWx1ZQorKyAgY2FzZSAkYWNfb2xkX3NldCwkYWNfbmV3X3NldCBpbgorKyAgICBzZXQsKQorKyAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CisrICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPTogOzsKKysgICAgLHNldCkKKysgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CisrICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPTogOzsKKysgICAgLCk7OworKyAgICAqKQorKyAgICAgIGlmIHRlc3QgIngkYWNfb2xkX3ZhbCIgIT0gIngkYWNfbmV3X3ZhbCI7IHRoZW4KKysJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9CisrCXsgZWNobyAiJGFzX21lOiRMSU5FTk86ICAgZm9ybWVyIHZhbHVlOiAgJGFjX29sZF92YWwiID4mNQorK2VjaG8gIiRhc19tZTogICBmb3JtZXIgdmFsdWU6ICAkYWNfb2xkX3ZhbCIgPiYyO30KKysJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogICBjdXJyZW50IHZhbHVlOiAkYWNfbmV3X3ZhbCIgPiY1CisrZWNobyAiJGFzX21lOiAgIGN1cnJlbnQgdmFsdWU6ICRhY19uZXdfdmFsIiA+JjI7fQorKwlhY19jYWNoZV9jb3JydXB0ZWQ9OgorKyAgICAgIGZpOzsKKysgIGVzYWMKKysgICMgUGFzcyBwcmVjaW91cyB2YXJpYWJsZXMgdG8gY29uZmlnLnN0YXR1cy4KKysgIGlmIHRlc3QgIiRhY19uZXdfc2V0IiA9IHNldDsgdGhlbgorKyAgICBjYXNlICRhY19uZXdfdmFsIGluCisrICAgICpcJyopIGFjX2FyZz0kYWNfdmFyPWBlY2hvICIkYWNfbmV3X3ZhbCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKysgICAgKikgYWNfYXJnPSRhY192YXI9JGFjX25ld192YWwgOzsKKysgICAgZXNhYworKyAgICBjYXNlICIgJGFjX2NvbmZpZ3VyZV9hcmdzICIgaW4KKysgICAgICAqIiAnJGFjX2FyZycgIiopIDs7ICMgQXZvaWQgZHVwcy4gIFVzZSBvZiBxdW90ZXMgZW5zdXJlcyBhY2N1cmFjeS4KKysgICAgICAqKSBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICckYWNfYXJnJyIgOzsKKysgICAgZXNhYworKyAgZmkKKytkb25lCisraWYgJGFjX2NhY2hlX2NvcnJ1cHRlZDsgdGhlbgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjI7fQorKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogcnVuIFxgbWFrZSBkaXN0Y2xlYW4nIGFuZC9vciBcYHJtICRjYWNoZV9maWxlJyBhbmQgc3RhcnQgb3ZlciIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogcnVuIFxgbWFrZSBkaXN0Y2xlYW4nIGFuZC9vciBcYHJtICRjYWNoZV9maWxlJyBhbmQgc3RhcnQgb3ZlciIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKytmaQorKworKworKworKworKworKworKworKworKworKworKworKworKworKworKworKworKworKworKworKworKworKworKworKworKworK2FjX2V4dD1jCisrYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKythY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisrYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKythY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisrCisrCisrCisrCisrYWNfYXV4X2Rpcj0KKytmb3IgYWNfZGlyIGluIC4uLy4uLy4uLy4uICIkc3JjZGlyIi8uLi8uLi8uLi8uLjsgZG8KKysgIGlmIHRlc3QgLWYgIiRhY19kaXIvaW5zdGFsbC1zaCI7IHRoZW4KKysgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisrICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwtc2ggLWMiCisrICAgIGJyZWFrCisrICBlbGlmIHRlc3QgLWYgIiRhY19kaXIvaW5zdGFsbC5zaCI7IHRoZW4KKysgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisrICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwuc2ggLWMiCisrICAgIGJyZWFrCisrICBlbGlmIHRlc3QgLWYgIiRhY19kaXIvc2h0b29sIjsgdGhlbgorKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKysgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvc2h0b29sIGluc3RhbGwgLWMiCisrICAgIGJyZWFrCisrICBmaQorK2RvbmUKKytpZiB0ZXN0IC16ICIkYWNfYXV4X2RpciI7IHRoZW4KKysgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGluc3RhbGwtc2ggb3IgaW5zdGFsbC5zaCBpbiAuLi8uLi8uLi8uLiBcIiRzcmNkaXJcIi8uLi8uLi8uLi8uLiIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5zdGFsbC1zaCBvciBpbnN0YWxsLnNoIGluIC4uLy4uLy4uLy4uIFwiJHNyY2RpclwiLy4uLy4uLy4uLy4uIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorK2ZpCisrCisrIyBUaGVzZSB0aHJlZSB2YXJpYWJsZXMgYXJlIHVuZG9jdW1lbnRlZCBhbmQgdW5zdXBwb3J0ZWQsCisrIyBhbmQgYXJlIGludGVuZGVkIHRvIGJlIHdpdGhkcmF3biBpbiBhIGZ1dHVyZSBBdXRvY29uZiByZWxlYXNlLgorKyMgVGhleSBjYW4gY2F1c2Ugc2VyaW91cyBwcm9ibGVtcyBpZiBhIGJ1aWxkZXIncyBzb3VyY2UgdHJlZSBpcyBpbiBhIGRpcmVjdG9yeQorKyMgd2hvc2UgZnVsbCBuYW1lIGNvbnRhaW5zIHVudXN1YWwgY2hhcmFjdGVycy4KKythY19jb25maWdfZ3Vlc3M9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCisrYWNfY29uZmlnX3N1Yj0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCisrYWNfY29uZmlndXJlPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlndXJlIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorKworKworKworKyMgTWFrZSBzdXJlIHdlIGNhbiBydW4gY29uZmlnLnN1Yi4KKyskU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiIHN1bjQgPi9kZXYvbnVsbCAyPiYxIHx8CisrICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgcnVuICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKworK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlLi4uICRFQ0hPX0MiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfYnVpbGQrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgYWNfYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCisrdGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCisrICBhY19idWlsZF9hbGlhcz1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiYAorK3Rlc3QgIngkYWNfYnVpbGRfYWxpYXMiID0geCAmJgorKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrYWNfY3ZfYnVpbGQ9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJGFjX2J1aWxkX2FsaWFzYCB8fAorKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGFjX2J1aWxkX2FsaWFzIGZhaWxlZCIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGFjX2J1aWxkX2FsaWFzIGZhaWxlZCIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysKKytmaQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2J1aWxkIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfYnVpbGQiID4mNjsgfQorK2Nhc2UgJGFjX2N2X2J1aWxkIGluCisrKi0qLSopIDs7CisrKikgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgYnVpbGQiID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGJ1aWxkIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisrZXNhYworK2J1aWxkPSRhY19jdl9idWlsZAorK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKKytzZXQgeCAkYWNfY3ZfYnVpbGQKKytzaGlmdAorK2J1aWxkX2NwdT0kMQorK2J1aWxkX3ZlbmRvcj0kMgorK3NoaWZ0OyBzaGlmdAorKyMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorKyMgZXhjZXB0IHdpdGggb2xkIHNoZWxsczoKKytidWlsZF9vcz0kKgorK0lGUz0kYWNfc2F2ZV9JRlMKKytjYXNlICRidWlsZF9vcyBpbiAqXCAqKSBidWlsZF9vcz1gZWNobyAiJGJ1aWxkX29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYworKworKworK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZS4uLiAkRUNIT19DIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X2hvc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAieCRob3N0X2FsaWFzIiA9IHg7IHRoZW4KKysgIGFjX2N2X2hvc3Q9JGFjX2N2X2J1aWxkCisrZWxzZQorKyAgYWNfY3ZfaG9zdD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkaG9zdF9hbGlhc2AgfHwKKysgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGhvc3RfYWxpYXMgZmFpbGVkIiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkaG9zdF9hbGlhcyBmYWlsZWQiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrZmkKKysKKytmaQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hvc3QiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdl9ob3N0IiA+JjY7IH0KKytjYXNlICRhY19jdl9ob3N0IGluCisrKi0qLSopIDs7CisrKikgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgaG9zdCIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgaG9zdCIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworK2VzYWMKKytob3N0PSRhY19jdl9ob3N0CisrYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJworK3NldCB4ICRhY19jdl9ob3N0Cisrc2hpZnQKKytob3N0X2NwdT0kMQorK2hvc3RfdmVuZG9yPSQyCisrc2hpZnQ7IHNoaWZ0CisrIyBSZW1lbWJlciwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBJRlMgaXMgdXNlZCB0byBjcmVhdGUgJCosCisrIyBleGNlcHQgd2l0aCBvbGQgc2hlbGxzOgorK2hvc3Rfb3M9JCoKKytJRlM9JGFjX3NhdmVfSUZTCisrY2FzZSAkaG9zdF9vcyBpbiAqXCAqKSBob3N0X29zPWBlY2hvICIkaG9zdF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKKysKKysKKythbV9fYXBpX3ZlcnNpb249IjEuNCIKKysjIEZpbmQgYSBnb29kIGluc3RhbGwgcHJvZ3JhbS4gIFdlIHByZWZlciBhIEMgcHJvZ3JhbSAoZmFzdGVyKSwKKysjIHNvIG9uZSBzY3JpcHQgaXMgYXMgZ29vZCBhcyBhbm90aGVyLiAgQnV0IGF2b2lkIHRoZSBicm9rZW4gb3IKKysjIGluY29tcGF0aWJsZSB2ZXJzaW9uczoKKysjIFN5c1YgL2V0Yy9pbnN0YWxsLCAvdXNyL3NiaW4vaW5zdGFsbAorKyMgU3VuT1MgL3Vzci9ldGMvaW5zdGFsbAorKyMgSVJJWCAvc2Jpbi9pbnN0YWxsCisrIyBBSVggL2Jpbi9pbnN0YWxsCisrIyBBbWlnYU9TIC9DL2luc3RhbGwsIHdoaWNoIGluc3RhbGxzIGJvb3RibG9ja3Mgb24gZmxvcHB5IGRpc2NzCisrIyBBSVggNCAvdXNyL2Jpbi9pbnN0YWxsYnNkLCB3aGljaCBkb2Vzbid0IHdvcmsgd2l0aG91dCBhIC1nIGZsYWcKKysjIEFGUyAvdXNyL2Fmc3dzL2Jpbi9pbnN0YWxsLCB3aGljaCBtaXNoYW5kbGVzIG5vbmV4aXN0ZW50IGFyZ3MKKysjIFNWUjQgL3Vzci91Y2IvaW5zdGFsbCwgd2hpY2ggdHJpZXMgdG8gdXNlIHRoZSBub25leGlzdGVudCBncm91cCAic3RhZmYiCisrIyBPUy8yJ3Mgc3lzdGVtIGluc3RhbGwsIHdoaWNoIGhhcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHNlbWFudGljCisrIyAuL2luc3RhbGwsIHdoaWNoIGNhbiBiZSBlcnJvbmVvdXNseSBjcmVhdGVkIGJ5IG1ha2UgZnJvbSAuL2luc3RhbGwuc2guCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsLi4uICRFQ0hPX0MiID4mNjsgfQorK2lmIHRlc3QgLXogIiRJTlNUQUxMIjsgdGhlbgorK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAjIEFjY291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50cy4KKytjYXNlICRhc19kaXIvIGluCisrICAuLyB8IC4vLyB8IC9jQy8qIHwgXAorKyAgL2V0Yy8qIHwgL3Vzci9zYmluLyogfCAvdXNyL2V0Yy8qIHwgL3NiaW4vKiB8IC91c3IvYWZzd3MvYmluLyogfCBcCisrICA/OlxcL29zMlxcL2luc3RhbGxcXC8qIHwgPzpcXC9PUzJcXC9JTlNUQUxMXFwvKiB8IFwKKysgIC91c3IvdWNiLyogKSA7OworKyAgKikKKysgICAgIyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4KKysgICAgIyBEb24ndCB1c2UgaW5zdGFsbGJzZCBmcm9tIE9TRiBzaW5jZSBpdCBpbnN0YWxscyBzdHVmZiBhcyByb290CisrICAgICMgYnkgZGVmYXVsdC4KKysgICAgZm9yIGFjX3Byb2cgaW4gZ2luc3RhbGwgc2NvaW5zdCBpbnN0YWxsOyBkbworKyAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKwlpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB9OyB0aGVuCisrCSAgaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKysJICAgIGdyZXAgZHNwbXNnICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysJICAgICMgQUlYIGluc3RhbGwuICBJdCBoYXMgYW4gaW5jb21wYXRpYmxlIGNhbGxpbmcgY29udmVudGlvbi4KKysJICAgIDoKKysJICBlbGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisrCSAgICBncmVwIHB3cGx1cyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrCSAgICAjIHByb2dyYW0tc3BlY2lmaWMgaW5zdGFsbCBzY3JpcHQgdXNlZCBieSBIUCBwd3BsdXMtLWRvbid0IHVzZS4KKysJICAgIDoKKysJICBlbHNlCisrCSAgICBhY19jdl9wYXRoX2luc3RhbGw9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQgLWMiCisrCSAgICBicmVhayAzCisrCSAgZmkKKysJZmkKKysgICAgICBkb25lCisrICAgIGRvbmUKKysgICAgOzsKKytlc2FjCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKysKKytmaQorKyAgaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KKysgICAgSU5TVEFMTD0kYWNfY3ZfcGF0aF9pbnN0YWxsCisrICBlbHNlCisrICAgICMgQXMgYSBsYXN0IHJlc29ydCwgdXNlIHRoZSBzbG93IHNoZWxsIHNjcmlwdC4gIERvbid0IGNhY2hlIGEKKysgICAgIyB2YWx1ZSBmb3IgSU5TVEFMTCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAorKyAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBjYWNoZSBpZiB0aGF0IGRpcmVjdG9yeSBpcworKyAgICAjIHJlbW92ZWQsIG9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlbGF0aXZlIG5hbWUuCisrICAgIElOU1RBTEw9JGFjX2luc3RhbGxfc2gKKysgIGZpCisrZmkKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRJTlNUQUxMIiA+JjUKKytlY2hvICIke0VDSE9fVH0kSU5TVEFMTCIgPiY2OyB9CisrCisrIyBVc2UgdGVzdCAteiBiZWNhdXNlIFN1bk9TNCBzaCBtaXNoYW5kbGVzIGJyYWNlcyBpbiAke3Zhci12YWx9LgorKyMgSXQgdGhpbmtzIHRoZSBmaXJzdCBjbG9zZSBicmFjZSBlbmRzIHRoZSB2YXJpYWJsZSBzdWJzdGl0dXRpb24uCisrdGVzdCAteiAiJElOU1RBTExfUFJPR1JBTSIgJiYgSU5TVEFMTF9QUk9HUkFNPScke0lOU1RBTEx9JworKworK3Rlc3QgLXogIiRJTlNUQUxMX1NDUklQVCIgJiYgSU5TVEFMTF9TQ1JJUFQ9JyR7SU5TVEFMTH0nCisrCisrdGVzdCAteiAiJElOU1RBTExfREFUQSIgJiYgSU5TVEFMTF9EQVRBPScke0lOU1RBTEx9IC1tIDY0NCcKKysKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lLi4uICRFQ0hPX0MiID4mNjsgfQorKyMgSnVzdCBpbiBjYXNlCisrc2xlZXAgMQorK2VjaG8gdGltZXN0YW1wID4gY29uZnRlc3RmaWxlCisrIyBEbyBgc2V0JyBpbiBhIHN1YnNoZWxsIHNvIHdlIGRvbid0IGNsb2JiZXIgdGhlIGN1cnJlbnQgc2hlbGwncworKyMgYXJndW1lbnRzLiAgTXVzdCB0cnkgLUwgZmlyc3QgaW4gY2FzZSBjb25maWd1cmUgaXMgYWN0dWFsbHkgYQorKyMgc3ltbGluazsgc29tZSBzeXN0ZW1zIHBsYXkgd2VpcmQgZ2FtZXMgd2l0aCB0aGUgbW9kIHRpbWUgb2Ygc3ltbGlua3MKKysjIChlZyBGcmVlQlNEIHJldHVybnMgdGhlIG1vZCB0aW1lIG9mIHRoZSBzeW1saW5rJ3MgY29udGFpbmluZworKyMgZGlyZWN0b3J5KS4KKytpZiAoCisrICAgc2V0IFggYGxzIC1MdCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdGZpbGUgMj4gL2Rldi9udWxsYAorKyAgIGlmIHRlc3QgIiQqIiA9ICJYIjsgdGhlbgorKyAgICAgICMgLUwgZGlkbid0IHdvcmsuCisrICAgICAgc2V0IFggYGxzIC10ICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0ZmlsZWAKKysgICBmaQorKyAgIGlmIHRlc3QgIiQqIiAhPSAiWCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdGZpbGUiIFwKKysgICAgICAmJiB0ZXN0ICIkKiIgIT0gIlggY29uZnRlc3RmaWxlICRzcmNkaXIvY29uZmlndXJlIjsgdGhlbgorKworKyAgICAgICMgSWYgbmVpdGhlciBtYXRjaGVkLCB0aGVuIHdlIGhhdmUgYSBicm9rZW4gbHMuICBUaGlzIGNhbiBoYXBwZW4KKysgICAgICAjIGlmLCBmb3IgaW5zdGFuY2UsIENPTkZJR19TSEVMTCBpcyBiYXNoIGFuZCBpdCBpbmhlcml0cyBhCisrICAgICAgIyBicm9rZW4gbHMgYWxpYXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuICBUaGlzIGhhcyBhY3R1YWxseQorKyAgICAgICMgaGFwcGVuZWQuICBTdWNoIGEgc3lzdGVtIGNvdWxkIG5vdCBiZSBjb25zaWRlcmVkICJzYW5lIi4KKysgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBscyAtdCBhcHBlYXJzIHRvIGZhaWwuICBNYWtlIHN1cmUgdGhlcmUgaXMgbm90IGEgYnJva2VuCisrYWxpYXMgaW4geW91ciBlbnZpcm9ubWVudCIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogbHMgLXQgYXBwZWFycyB0byBmYWlsLiAgTWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhIGJyb2tlbgorK2FsaWFzIGluIHlvdXIgZW52aXJvbm1lbnQiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrICAgZmkKKysKKysgICB0ZXN0ICIkMiIgPSBjb25mdGVzdGZpbGUKKysgICApCisrdGhlbgorKyAgICMgT2suCisrICAgOgorK2Vsc2UKKysgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBuZXdseSBjcmVhdGVkIGZpbGUgaXMgb2xkZXIgdGhhbiBkaXN0cmlidXRlZCBmaWxlcyEKKytDaGVjayB5b3VyIHN5c3RlbSBjbG9jayIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogbmV3bHkgY3JlYXRlZCBmaWxlIGlzIG9sZGVyIHRoYW4gZGlzdHJpYnV0ZWQgZmlsZXMhCisrQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2siID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrZmkKKytybSAtZiBjb25mdGVzdCoKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KKyt0ZXN0ICIkcHJvZ3JhbV9wcmVmaXgiICE9IE5PTkUgJiYKKysgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9InMmXiYkcHJvZ3JhbV9wcmVmaXgmOyRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIgorKyMgVXNlIGEgZG91YmxlICQgc28gbWFrZSBpZ25vcmVzIGl0LgorK3Rlc3QgIiRwcm9ncmFtX3N1ZmZpeCIgIT0gTk9ORSAmJgorKyAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0icyZcJCYkcHJvZ3JhbV9zdWZmaXgmOyRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIgorKyMgRG91YmxlIGFueSBcIG9yICQuICBlY2hvIG1pZ2h0IGludGVycHJldCBiYWNrc2xhc2hlcy4KKysjIEJ5IGRlZmF1bHQgd2FzIGBzLHgseCcsIHJlbW92ZSBpdCBpZiB1c2VsZXNzLgorK2NhdCA8PFxfQUNFT0YgPmNvbmZ0ZXN0LnNlZAorK3MvW1xcJF0vJiYvZztzLztzLHgseCwkLy8KKytfQUNFT0YKKytwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPWBlY2hvICRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIHwgc2VkIC1mIGNvbmZ0ZXN0LnNlZGAKKytybSAtZiBjb25mdGVzdC5zZWQKKysKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkuLi4gJEVDSE9fQyIgPiY2OyB9Cisrc2V0IHggJHtNQUtFLW1ha2V9OyBhY19tYWtlPWBlY2hvICIkMiIgfCBzZWQgJ3MvKy9wL2c7IHMvW15hLXpBLVowLTlfXS9fL2cnYAorK2lmIHsgYXNfdmFyPWFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldDsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKytlbHNlCisrICBjYXQgPmNvbmZ0ZXN0Lm1ha2UgPDxcX0FDRU9GCisrU0hFTEwgPSAvYmluL3NoCisrYWxsOgorKwlAZWNobyAnQEBAJSUlPSQoTUFLRSk9QEBAJSUlJworK19BQ0VPRgorKyMgR05VIG1ha2Ugc29tZXRpbWVzIHByaW50cyAibWFrZVsxXTogRW50ZXJpbmcuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgorK2Nhc2UgYCR7TUFLRS1tYWtlfSAtZiBjb25mdGVzdC5tYWtlIDI+L2Rldi9udWxsYCBpbgorKyAgKkBAQCUlJT0/Kj1AQEAlJSUqKQorKyAgICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD15ZXM7OworKyAgKikKKysgICAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9bm87OworK2VzYWMKKytybSAtZiBjb25mdGVzdC5tYWtlCisrZmkKKytpZiBldmFsIHRlc3QgXCRhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQgPSB5ZXM7IHRoZW4KKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKKytlY2hvICIke0VDSE9fVH15ZXMiID4mNjsgfQorKyAgU0VUX01BS0U9CisrZWxzZQorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorKyAgU0VUX01BS0U9Ik1BS0U9JHtNQUtFLW1ha2V9IgorK2ZpCisrCisrCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW11bHRpbGliIHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke2VuYWJsZV9tdWx0aWxpYitzZXR9IiA9IHNldDsgdGhlbgorKyAgZW5hYmxldmFsPSRlbmFibGVfbXVsdGlsaWI7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIHllcykgbXVsdGlsaWI9eWVzIDs7CisrICBubykgIG11bHRpbGliPW5vIDs7CisrICAqKSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIG11bHRpbGliIG9wdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgbXVsdGlsaWIgb3B0aW9uIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworKyBlc2FjCisrZWxzZQorKyAgbXVsdGlsaWI9eWVzCisrZmkKKysKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdGFyZ2V0LW9wdHNwYWNlIHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke2VuYWJsZV90YXJnZXRfb3B0c3BhY2Urc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX3RhcmdldF9vcHRzcGFjZTsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgeWVzKSB0YXJnZXRfb3B0c3BhY2U9eWVzIDs7CisrICBubykgIHRhcmdldF9vcHRzcGFjZT1ubyA7OworKyAgKikgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciB0YXJnZXQtb3B0c3BhY2Ugb3B0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciB0YXJnZXQtb3B0c3BhY2Ugb3B0aW9uIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworKyBlc2FjCisrZWxzZQorKyAgdGFyZ2V0X29wdHNwYWNlPQorK2ZpCisrCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1hbGxvYy1kZWJ1Z2dpbmcgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7ZW5hYmxlX21hbGxvY19kZWJ1Z2dpbmcrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX21hbGxvY19kZWJ1Z2dpbmc7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIHllcykgbWFsbG9jX2RlYnVnZ2luZz15ZXMgOzsKKysgIG5vKSAgbWFsbG9jX2RlYnVnZ2luZz1ubyA7OworKyAgKikgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciBtYWxsb2MtZGVidWdnaW5nIG9wdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgbWFsbG9jLWRlYnVnZ2luZyBvcHRpb24iID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CisrIGVzYWMKKytlbHNlCisrICBtYWxsb2NfZGVidWdnaW5nPQorK2ZpCisrCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5ld2xpYi1tYiB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfbmV3bGliX21iK3NldH0iID0gc2V0OyB0aGVuCisrICBlbmFibGV2YWw9JGVuYWJsZV9uZXdsaWJfbWI7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIHllcykgbmV3bGliX21iPXllcyA7OworKyAgbm8pICBuZXdsaWJfbWI9bm8gOzsKKysgICopICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgbmV3bGliLW1iIG9wdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgbmV3bGliLW1iIG9wdGlvbiIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKysgZXNhYworK2Vsc2UKKysgIG5ld2xpYl9tYj0KKytmaQorKworKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1uZXdsaWItaWNvbnYgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7ZW5hYmxlX25ld2xpYl9pY29uditzZXR9IiA9IHNldDsgdGhlbgorKyAgZW5hYmxldmFsPSRlbmFibGVfbmV3bGliX2ljb252OyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICB5ZXMpIG5ld2xpYl9pY29udj15ZXMgOzsKKysgIG5vKSAgbmV3bGliX2ljb252PW5vIDs7CisrICAqKSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIG5ld2xpYi1pY29udiBvcHRpb24iID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIG5ld2xpYi1pY29udiBvcHRpb24iID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CisrIGVzYWMKKytlbHNlCisrICBuZXdsaWJfaWNvbnY9CisrZmkKKysKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbmV3bGliLWJ1aWx0aW4tY29udmVydGVycyB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfbmV3bGliX2J1aWx0aW5fY29udmVydGVycytzZXR9IiA9IHNldDsgdGhlbgorKyAgZW5hYmxldmFsPSRlbmFibGVfbmV3bGliX2J1aWx0aW5fY29udmVydGVyczsgaWYgdGVzdCB4JHtlbmFibGV2YWx9ID0geDsgdGhlbgorKyAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIG5ld2xpYi1idWlsdGluLWNvbnZlcnRlcnMgb3B0aW9uIC0gdXNlIGNvbW1hLXNlcGFyYXRlZCBsaXN0IiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciBuZXdsaWItYnVpbHRpbi1jb252ZXJ0ZXJzIG9wdGlvbiAtIHVzZSBjb21tYS1zZXBhcmF0ZWQgbGlzdCIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysgZmkKKysgYnVpbHRpbl9jb252ZXJ0ZXJzPSR7ZW5hYmxldmFsfQorKworK2Vsc2UKKysgIGJ1aWx0aW5fY29udmVydGVycz0KKytmaQorKworKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1uZXdsaWItbXVsdGl0aHJlYWQgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7ZW5hYmxlX25ld2xpYl9tdWx0aXRocmVhZCtzZXR9IiA9IHNldDsgdGhlbgorKyAgZW5hYmxldmFsPSRlbmFibGVfbmV3bGliX211bHRpdGhyZWFkOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICB5ZXMpIG5ld2xpYl9tdWx0aXRocmVhZD15ZXMgOzsKKysgIG5vKSAgbmV3bGliX211bHRpdGhyZWFkPW5vIDs7CisrICAqKSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIG5ld2xpYi1tdWx0aXRocmVhZCBvcHRpb24iID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIG5ld2xpYi1tdWx0aXRocmVhZCBvcHRpb24iID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CisrIGVzYWMKKytlbHNlCisrICBuZXdsaWJfbXVsdGl0aHJlYWQ9eWVzCisrZmkKKysKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbmV3bGliLWVsaXgtbGV2ZWwgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7ZW5hYmxlX25ld2xpYl9lbGl4X2xldmVsK3NldH0iID0gc2V0OyB0aGVuCisrICBlbmFibGV2YWw9JGVuYWJsZV9uZXdsaWJfZWxpeF9sZXZlbDsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgMCkgICBuZXdsaWJfZWxpeF9sZXZlbD0wIDs7CisrICAxKSAgIG5ld2xpYl9lbGl4X2xldmVsPTEgOzsKKysgIDIpICAgbmV3bGliX2VsaXhfbGV2ZWw9MiA7OworKyAgMykgICBuZXdsaWJfZWxpeF9sZXZlbD0zIDs7CisrICA0KSAgIG5ld2xpYl9lbGl4X2xldmVsPTQgOzsKKysgICopICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgbmV3bGliLWVsaXgtbGV2ZWwgb3B0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciBuZXdsaWItZWxpeC1sZXZlbCBvcHRpb24iID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CisrIGVzYWMKKytlbHNlCisrICBuZXdsaWJfZWxpeF9sZXZlbD0wCisrZmkKKysKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbmV3bGliLWlvLWZsb2F0IHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke2VuYWJsZV9uZXdsaWJfaW9fZmxvYXQrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX25ld2xpYl9pb19mbG9hdDsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgeWVzKSBuZXdsaWJfaW9fZmxvYXQ9eWVzIDs7CisrICBubykgIG5ld2xpYl9pb19mbG9hdD1ubyA7OworKyAgKikgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciBuZXdsaWItaW8tZmxvYXQgb3B0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciBuZXdsaWItaW8tZmxvYXQgb3B0aW9uIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworKyBlc2FjCisrZWxzZQorKyAgbmV3bGliX2lvX2Zsb2F0PXllcworK2ZpCisrCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5ld2xpYi1zdXBwbGllZC1zeXNjYWxscyB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfbmV3bGliX3N1cHBsaWVkX3N5c2NhbGxzK3NldH0iID0gc2V0OyB0aGVuCisrICBlbmFibGV2YWw9JGVuYWJsZV9uZXdsaWJfc3VwcGxpZWRfc3lzY2FsbHM7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIHllcykgbmV3bGliX21heV9zdXBwbHlfc3lzY2FsbHM9eWVzIDs7CisrICBubykgIG5ld2xpYl9tYXlfc3VwcGx5X3N5c2NhbGxzPW5vIDs7CisrICAqKSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIG5ld2xpYi1zdXBwbGllZC1zeXNjYWxscyBvcHRpb24iID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIG5ld2xpYi1zdXBwbGllZC1zeXNjYWxscyBvcHRpb24iID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CisrIGVzYWMKKytlbHNlCisrICBuZXdsaWJfbWF5X3N1cHBseV9zeXNjYWxscz15ZXMKKytmaQorKworKworKworK2lmIHRlc3QgeCR7bmV3bGliX21heV9zdXBwbHlfc3lzY2FsbHN9ID0geHllczsgdGhlbgorKyAgTUFZX1NVUFBMWV9TWVNDQUxMU19UUlVFPQorKyAgTUFZX1NVUFBMWV9TWVNDQUxMU19GQUxTRT0nIycKKytlbHNlCisrICBNQVlfU1VQUExZX1NZU0NBTExTX1RSVUU9JyMnCisrICBNQVlfU1VQUExZX1NZU0NBTExTX0ZBTFNFPQorK2ZpCisrCisrCisrdGVzdCAteiAiJHt3aXRoX3RhcmdldF9zdWJkaXJ9IiAmJiB3aXRoX3RhcmdldF9zdWJkaXI9LgorKworK2lmIHRlc3QgIiR7c3JjZGlyfSIgPSAiLiI7IHRoZW4KKysgIGlmIHRlc3QgIiR7d2l0aF90YXJnZXRfc3ViZGlyfSIgIT0gIi4iOyB0aGVuCisrICAgIG5ld2xpYl9iYXNlZGlyPSIke3NyY2Rpcn0vJHt3aXRoX211bHRpc3JjdG9wfS4uLy4uLy4uLy4uIgorKyAgZWxzZQorKyAgICBuZXdsaWJfYmFzZWRpcj0iJHtzcmNkaXJ9LyR7d2l0aF9tdWx0aXNyY3RvcH0uLi8uLi8uLiIKKysgIGZpCisrZWxzZQorKyAgbmV3bGliX2Jhc2VkaXI9IiR7c3JjZGlyfS8uLi8uLi8uLiIKKytmaQorKworKworK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHRhcmdldCBzeXN0ZW0gdHlwZSIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyB0YXJnZXQgc3lzdGVtIHR5cGUuLi4gJEVDSE9fQyIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl90YXJnZXQrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAieCR0YXJnZXRfYWxpYXMiID0geDsgdGhlbgorKyAgYWNfY3ZfdGFyZ2V0PSRhY19jdl9ob3N0CisrZWxzZQorKyAgYWNfY3ZfdGFyZ2V0PWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICR0YXJnZXRfYWxpYXNgIHx8CisrICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICR0YXJnZXRfYWxpYXMgZmFpbGVkIiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkdGFyZ2V0X2FsaWFzIGZhaWxlZCIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKytmaQorKworK2ZpCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdGFyZ2V0IiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfdGFyZ2V0IiA+JjY7IH0KKytjYXNlICRhY19jdl90YXJnZXQgaW4KKysqLSotKikgOzsKKysqKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCB0YXJnZXQiID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIHRhcmdldCIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworK2VzYWMKKyt0YXJnZXQ9JGFjX2N2X3RhcmdldAorK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKKytzZXQgeCAkYWNfY3ZfdGFyZ2V0Cisrc2hpZnQKKyt0YXJnZXRfY3B1PSQxCisrdGFyZ2V0X3ZlbmRvcj0kMgorK3NoaWZ0OyBzaGlmdAorKyMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorKyMgZXhjZXB0IHdpdGggb2xkIHNoZWxsczoKKyt0YXJnZXRfb3M9JCoKKytJRlM9JGFjX3NhdmVfSUZTCisrY2FzZSAkdGFyZ2V0X29zIGluICpcICopIHRhcmdldF9vcz1gZWNobyAiJHRhcmdldF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKKysKKysKKysjIFRoZSBhbGlhc2VzIHNhdmUgdGhlIG5hbWVzIHRoZSB1c2VyIHN1cHBsaWVkLCB3aGlsZSAkaG9zdCBldGMuCisrIyB3aWxsIGdldCBjYW5vbmljYWxpemVkLgorK3Rlc3QgLW4gIiR0YXJnZXRfYWxpYXMiICYmCisrICB0ZXN0ICIkcHJvZ3JhbV9wcmVmaXgkcHJvZ3JhbV9zdWZmaXgkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIgPSBcCisrICAgIE5PTkVOT05Fcyx4LHgsICYmCisrICBwcm9ncmFtX3ByZWZpeD0ke3RhcmdldF9hbGlhc30tCisrCisrCisrUEFDS0FHRT1uZXdsaWIKKysKKytWRVJTSU9OPTEuMTIuMAorKworK2lmIHRlc3QgImBjZCAkc3JjZGlyICYmIHB3ZGAiICE9ICJgcHdkYCIgJiYgdGVzdCAtZiAkc3JjZGlyL2NvbmZpZy5zdGF0dXM7IHRoZW4KKysgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHNvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkOyBydW4gXCJtYWtlIGRpc3RjbGVhblwiIHRoZXJlIGZpcnN0IiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiBzb3VyY2UgZGlyZWN0b3J5IGFscmVhZHkgY29uZmlndXJlZDsgcnVuIFwibWFrZSBkaXN0Y2xlYW5cIiB0aGVyZSBmaXJzdCIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKytmaQorKworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIFBBQ0tBR0UgIiRQQUNLQUdFIgorK19BQ0VPRgorKworKworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIFZFUlNJT04gIiRWRVJTSU9OIgorK19BQ0VPRgorKworKworKworK21pc3NpbmdfZGlyPWBjZCAkYWNfYXV4X2RpciAmJiBwd2RgCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHdvcmtpbmcgYWNsb2NhbC0ke2FtX19hcGlfdmVyc2lvbn0iID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgYWNsb2NhbC0ke2FtX19hcGlfdmVyc2lvbn0uLi4gJEVDSE9fQyIgPiY2OyB9CisrIyBSdW4gdGVzdCBpbiBhIHN1YnNoZWxsOyBzb21lIHZlcnNpb25zIG9mIHNoIHdpbGwgcHJpbnQgYW4gZXJyb3IgaWYKKysjIGFuIGV4ZWN1dGFibGUgaXMgbm90IGZvdW5kLCBldmVuIGlmIHN0ZGVyciBpcyByZWRpcmVjdGVkLgorKyMgUmVkaXJlY3Qgc3RkaW4gdG8gcGxhY2F0ZSBvbGRlciB2ZXJzaW9ucyBvZiBhdXRvY29uZi4gIFNpZ2guCisraWYgKGFjbG9jYWwtJHthbV9fYXBpX3ZlcnNpb259IC0tdmVyc2lvbikgPCAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorKyAgIEFDTE9DQUw9YWNsb2NhbC0ke2FtX19hcGlfdmVyc2lvbn0KKysgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGZvdW5kIiA+JjUKKytlY2hvICIke0VDSE9fVH1mb3VuZCIgPiY2OyB9CisrZWxzZQorKyAgIEFDTE9DQUw9IiRtaXNzaW5nX2Rpci9taXNzaW5nIGFjbG9jYWwtJHthbV9fYXBpX3ZlcnNpb259IgorKyAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbWlzc2luZyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bWlzc2luZyIgPiY2OyB9CisrZmkKKysKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igd29ya2luZyBhdXRvY29uZiIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igd29ya2luZyBhdXRvY29uZi4uLiAkRUNIT19DIiA+JjY7IH0KKysjIFJ1biB0ZXN0IGluIGEgc3Vic2hlbGw7IHNvbWUgdmVyc2lvbnMgb2Ygc2ggd2lsbCBwcmludCBhbiBlcnJvciBpZgorKyMgYW4gZXhlY3V0YWJsZSBpcyBub3QgZm91bmQsIGV2ZW4gaWYgc3RkZXJyIGlzIHJlZGlyZWN0ZWQuCisrIyBSZWRpcmVjdCBzdGRpbiB0byBwbGFjYXRlIG9sZGVyIHZlcnNpb25zIG9mIGF1dG9jb25mLiAgU2lnaC4KKytpZiAoYXV0b2NvbmYgLS12ZXJzaW9uKSA8IC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgQVVUT0NPTkY9YXV0b2NvbmYKKysgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGZvdW5kIiA+JjUKKytlY2hvICIke0VDSE9fVH1mb3VuZCIgPiY2OyB9CisrZWxzZQorKyAgIEFVVE9DT05GPSIkbWlzc2luZ19kaXIvbWlzc2luZyBhdXRvY29uZiIKKysgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG1pc3NpbmciID4mNQorK2VjaG8gIiR7RUNIT19UfW1pc3NpbmciID4mNjsgfQorK2ZpCisrCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHdvcmtpbmcgYXV0b21ha2UtJHthbV9fYXBpX3ZlcnNpb259IiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB3b3JraW5nIGF1dG9tYWtlLSR7YW1fX2FwaV92ZXJzaW9ufS4uLiAkRUNIT19DIiA+JjY7IH0KKysjIFJ1biB0ZXN0IGluIGEgc3Vic2hlbGw7IHNvbWUgdmVyc2lvbnMgb2Ygc2ggd2lsbCBwcmludCBhbiBlcnJvciBpZgorKyMgYW4gZXhlY3V0YWJsZSBpcyBub3QgZm91bmQsIGV2ZW4gaWYgc3RkZXJyIGlzIHJlZGlyZWN0ZWQuCisrIyBSZWRpcmVjdCBzdGRpbiB0byBwbGFjYXRlIG9sZGVyIHZlcnNpb25zIG9mIGF1dG9jb25mLiAgU2lnaC4KKytpZiAoYXV0b21ha2UtJHthbV9fYXBpX3ZlcnNpb259IC0tdmVyc2lvbikgPCAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorKyAgIEFVVE9NQUtFPWF1dG9tYWtlLSR7YW1fX2FwaV92ZXJzaW9ufQorKyAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogZm91bmQiID4mNQorK2VjaG8gIiR7RUNIT19UfWZvdW5kIiA+JjY7IH0KKytlbHNlCisrICAgQVVUT01BS0U9IiRtaXNzaW5nX2Rpci9taXNzaW5nIGF1dG9tYWtlLSR7YW1fX2FwaV92ZXJzaW9ufSIKKysgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG1pc3NpbmciID4mNQorK2VjaG8gIiR7RUNIT19UfW1pc3NpbmciID4mNjsgfQorK2ZpCisrCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHdvcmtpbmcgYXV0b2hlYWRlciIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igd29ya2luZyBhdXRvaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorKyMgUnVuIHRlc3QgaW4gYSBzdWJzaGVsbDsgc29tZSB2ZXJzaW9ucyBvZiBzaCB3aWxsIHByaW50IGFuIGVycm9yIGlmCisrIyBhbiBleGVjdXRhYmxlIGlzIG5vdCBmb3VuZCwgZXZlbiBpZiBzdGRlcnIgaXMgcmVkaXJlY3RlZC4KKysjIFJlZGlyZWN0IHN0ZGluIHRvIHBsYWNhdGUgb2xkZXIgdmVyc2lvbnMgb2YgYXV0b2NvbmYuICBTaWdoLgorK2lmIChhdXRvaGVhZGVyIC0tdmVyc2lvbikgPCAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorKyAgIEFVVE9IRUFERVI9YXV0b2hlYWRlcgorKyAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogZm91bmQiID4mNQorK2VjaG8gIiR7RUNIT19UfWZvdW5kIiA+JjY7IH0KKytlbHNlCisrICAgQVVUT0hFQURFUj0iJG1pc3NpbmdfZGlyL21pc3NpbmcgYXV0b2hlYWRlciIKKysgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG1pc3NpbmciID4mNQorK2VjaG8gIiR7RUNIT19UfW1pc3NpbmciID4mNjsgfQorK2ZpCisrCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHdvcmtpbmcgbWFrZWluZm8iID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgbWFrZWluZm8uLi4gJEVDSE9fQyIgPiY2OyB9CisrIyBSdW4gdGVzdCBpbiBhIHN1YnNoZWxsOyBzb21lIHZlcnNpb25zIG9mIHNoIHdpbGwgcHJpbnQgYW4gZXJyb3IgaWYKKysjIGFuIGV4ZWN1dGFibGUgaXMgbm90IGZvdW5kLCBldmVuIGlmIHN0ZGVyciBpcyByZWRpcmVjdGVkLgorKyMgUmVkaXJlY3Qgc3RkaW4gdG8gcGxhY2F0ZSBvbGRlciB2ZXJzaW9ucyBvZiBhdXRvY29uZi4gIFNpZ2guCisraWYgKG1ha2VpbmZvIC0tdmVyc2lvbikgPCAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorKyAgIE1BS0VJTkZPPW1ha2VpbmZvCisrICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBmb3VuZCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9Zm91bmQiID4mNjsgfQorK2Vsc2UKKysgICBNQUtFSU5GTz0iJG1pc3NpbmdfZGlyL21pc3NpbmcgbWFrZWluZm8iCisrICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBtaXNzaW5nIiA+JjUKKytlY2hvICIke0VDSE9fVH1taXNzaW5nIiA+JjY7IH0KKytmaQorKworKworKworKyMgRklYTUU6IFdlIHRlbXBvcmFyaWx5IGRlZmluZSBvdXIgb3duIHZlcnNpb24gb2YgQUNfUFJPR19DQy4gIFRoaXMgaXMKKysjIGNvcGllZCBmcm9tIGF1dG9jb25mIDIuMTIsIGJ1dCBkb2VzIG5vdCBjYWxsIEFDX1BST0dfQ0NfV09SS1MuICBXZQorKyMgYXJlIHByb2JhYmx5IHVzaW5nIGEgY3Jvc3MgY29tcGlsZXIsIHdoaWNoIHdpbGwgbm90IGJlIGFibGUgdG8gZnVsbHkKKysjIGxpbmsgYW4gZXhlY3V0YWJsZS4gIFRoaXMgc2hvdWxkIHJlYWxseSBiZSBmaXhlZCBpbiBhdXRvY29uZgorKyMgaXRzZWxmLgorKworKworKworKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgZ2NjOyBhY193b3JkPSQyCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX0NDPSJnY2MiCisrICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrQ0M9JGFjX2N2X3Byb2dfQ0MKKytpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JENDIiA+JjY7IH0KKytlbHNlCisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisrZmkKKysKKysKKytpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgY2M7IGFjX3dvcmQ9JDIKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgorKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisrICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKysgIGFjX3Byb2dfcmVqZWN0ZWQ9bm8KKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGlmIHRlc3QgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID0gIi91c3IvdWNiL2NjIjsgdGhlbgorKyAgICAgICBhY19wcm9nX3JlamVjdGVkPXllcworKyAgICAgICBjb250aW51ZQorKyAgICAgZmkKKysgICAgYWNfY3ZfcHJvZ19DQz0iY2MiCisrICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytpZiB0ZXN0ICRhY19wcm9nX3JlamVjdGVkID0geWVzOyB0aGVuCisrICAjIFdlIGZvdW5kIGEgYm9nb24gaW4gdGhlIHBhdGgsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciB1c2UgaXQuCisrICBzZXQgZHVtbXkgJGFjX2N2X3Byb2dfQ0MKKysgIHNoaWZ0CisrICBpZiB0ZXN0ICQjICE9IDA7IHRoZW4KKysgICAgIyBXZSBjaG9zZSBhIGRpZmZlcmVudCBjb21waWxlciBmcm9tIHRoZSBib2d1cyBvbmUuCisrICAgICMgSG93ZXZlciwgaXQgaGFzIHRoZSBzYW1lIGJhc2VuYW1lLCBzbyB0aGUgYm9nb24gd2lsbCBiZSBjaG9zZW4KKysgICAgIyBmaXJzdCBpZiB3ZSBzZXQgQ0MgdG8ganVzdCB0aGUgYmFzZW5hbWU7IHVzZSB0aGUgZnVsbCBmaWxlIG5hbWUuCisrICAgIHNoaWZ0CisrICAgIGFjX2N2X3Byb2dfQ0M9IiRhc19kaXIvJGFjX3dvcmQkezErJyAnfSRAIgorKyAgZmkKKytmaQorK2ZpCisrZmkKKytDQz0kYWNfY3ZfcHJvZ19DQworK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKKytlY2hvICIke0VDSE9fVH0kQ0MiID4mNjsgfQorK2Vsc2UKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKytmaQorKworKworKyAgdGVzdCAteiAiJENDIiAmJiB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBubyBhY2NlcHRhYmxlIGNjIGZvdW5kIGluIFwkUEFUSCIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBjYyBmb3VuZCBpbiBcJFBBVEgiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrZmkKKysKKysjQUNfUFJPR19DQ19HTlUKKysKKytpZiB0ZXN0ICRhY19jdl9jX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgorKyAgR0NDPXllcworKyAgYWNfdGVzdF9DRkxBR1M9IiR7Q0ZMQUdTK3NldH0iCisrICBhY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKKysgIENGTEFHUz0KKysjICBBQ19QUk9HX0NDX0cKKysgIGlmIHRlc3QgIiRhY190ZXN0X0NGTEFHUyIgPSBzZXQ7IHRoZW4KKysgICAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCisrICBlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY2NfZyA9IHllczsgdGhlbgorKyAgICBDRkxBR1M9Ii1nIC1PMiIKKysgIGVsc2UKKysgICAgQ0ZMQUdTPSItTzIiCisrICBmaQorK2Vsc2UKKysgIEdDQz0KKysgIHRlc3QgIiR7Q0ZMQUdTK3NldH0iID0gc2V0IHx8IENGTEFHUz0iLWciCisrZmkKKysKKysKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFzOyBhY193b3JkPSQyCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVMrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJEFTIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19BUz0iJEFTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX0FTPSIke2FjX3Rvb2xfcHJlZml4fWFzIgorKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorK2RvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK0FTPSRhY19jdl9wcm9nX0FTCisraWYgdGVzdCAtbiAiJEFTIjsgdGhlbgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQVMiID4mNQorK2VjaG8gIiR7RUNIT19UfSRBUyIgPiY2OyB9CisrZWxzZQorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUyI7IHRoZW4KKysgIGFjX2N0X0FTPSRBUworKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhcyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IGFzOyBhY193b3JkPSQyCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVMrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0FTIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9BUz0iJGFjX2N0X0FTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0FTPSJhcyIKKysgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9BUz0kYWNfY3ZfcHJvZ19hY19jdF9BUworK2lmIHRlc3QgLW4gIiRhY19jdF9BUyI7IHRoZW4KKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0FTIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3RfQVMiID4mNjsgfQorK2Vsc2UKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9BUyIgPSB4OyB0aGVuCisrICAgIEFTPSIiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBBUz0kYWNfY3RfQVMKKysgIGZpCisrZWxzZQorKyAgQVM9IiRhY19jdl9wcm9nX0FTIgorK2ZpCisrCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hcjsgYWNfd29yZD0kMgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKysgIGFjX2N2X3Byb2dfQVI9IiRBUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKKysgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytBUj0kYWNfY3ZfcHJvZ19BUgorK2lmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJEFSIiA+JjUKKytlY2hvICIke0VDSE9fVH0kQVIiID4mNjsgfQorK2Vsc2UKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCisrICBhY19jdF9BUj0kQVIKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBhcjsgYWNfd29yZD0kMgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19jdF9BUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCisrICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfQVI9JGFjX2N2X3Byb2dfYWNfY3RfQVIKKytpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9BUiIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0FSIiA+JjY7IH0KKytlbHNlCisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorKyAgICBBUj0iIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgQVI9JGFjX2N0X0FSCisrICBmaQorK2Vsc2UKKysgIEFSPSIkYWNfY3ZfcHJvZ19BUiIKKytmaQorKworK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1yYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXJhbmxpYjsgYWNfd29yZD0kMgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX1JBTkxJQitzZXR9IiA9IHNldDsgdGhlbgorKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19SQU5MSUI9IiRSQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfUkFOTElCPSIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIKKysgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytSQU5MSUI9JGFjX2N2X3Byb2dfUkFOTElCCisraWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFJBTkxJQiIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JFJBTkxJQiIgPiY2OyB9CisrZWxzZQorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19SQU5MSUIiOyB0aGVuCisrICBhY19jdF9SQU5MSUI9JFJBTkxJQgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJyYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSByYW5saWI7IGFjX3dvcmQ9JDIKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSIkYWNfY3RfUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0icmFubGliIgorKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorK2RvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X1JBTkxJQj0kYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIKKytpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3RfUkFOTElCIiA+JjY7IH0KKytlbHNlCisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfUkFOTElCIiA9IHg7IHRoZW4KKysgICAgUkFOTElCPSI6IgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgUkFOTElCPSRhY19jdF9SQU5MSUIKKysgIGZpCisrZWxzZQorKyAgUkFOTElCPSIkYWNfY3ZfcHJvZ19SQU5MSUIiCisrZmkKKysKKysKKysjIEZpbmQgYSBnb29kIGluc3RhbGwgcHJvZ3JhbS4gIFdlIHByZWZlciBhIEMgcHJvZ3JhbSAoZmFzdGVyKSwKKysjIHNvIG9uZSBzY3JpcHQgaXMgYXMgZ29vZCBhcyBhbm90aGVyLiAgQnV0IGF2b2lkIHRoZSBicm9rZW4gb3IKKysjIGluY29tcGF0aWJsZSB2ZXJzaW9uczoKKysjIFN5c1YgL2V0Yy9pbnN0YWxsLCAvdXNyL3NiaW4vaW5zdGFsbAorKyMgU3VuT1MgL3Vzci9ldGMvaW5zdGFsbAorKyMgSVJJWCAvc2Jpbi9pbnN0YWxsCisrIyBBSVggL2Jpbi9pbnN0YWxsCisrIyBBbWlnYU9TIC9DL2luc3RhbGwsIHdoaWNoIGluc3RhbGxzIGJvb3RibG9ja3Mgb24gZmxvcHB5IGRpc2NzCisrIyBBSVggNCAvdXNyL2Jpbi9pbnN0YWxsYnNkLCB3aGljaCBkb2Vzbid0IHdvcmsgd2l0aG91dCBhIC1nIGZsYWcKKysjIEFGUyAvdXNyL2Fmc3dzL2Jpbi9pbnN0YWxsLCB3aGljaCBtaXNoYW5kbGVzIG5vbmV4aXN0ZW50IGFyZ3MKKysjIFNWUjQgL3Vzci91Y2IvaW5zdGFsbCwgd2hpY2ggdHJpZXMgdG8gdXNlIHRoZSBub25leGlzdGVudCBncm91cCAic3RhZmYiCisrIyBPUy8yJ3Mgc3lzdGVtIGluc3RhbGwsIHdoaWNoIGhhcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHNlbWFudGljCisrIyAuL2luc3RhbGwsIHdoaWNoIGNhbiBiZSBlcnJvbmVvdXNseSBjcmVhdGVkIGJ5IG1ha2UgZnJvbSAuL2luc3RhbGwuc2guCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsLi4uICRFQ0hPX0MiID4mNjsgfQorK2lmIHRlc3QgLXogIiRJTlNUQUxMIjsgdGhlbgorK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAjIEFjY291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50cy4KKytjYXNlICRhc19kaXIvIGluCisrICAuLyB8IC4vLyB8IC9jQy8qIHwgXAorKyAgL2V0Yy8qIHwgL3Vzci9zYmluLyogfCAvdXNyL2V0Yy8qIHwgL3NiaW4vKiB8IC91c3IvYWZzd3MvYmluLyogfCBcCisrICA/OlxcL29zMlxcL2luc3RhbGxcXC8qIHwgPzpcXC9PUzJcXC9JTlNUQUxMXFwvKiB8IFwKKysgIC91c3IvdWNiLyogKSA7OworKyAgKikKKysgICAgIyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4KKysgICAgIyBEb24ndCB1c2UgaW5zdGFsbGJzZCBmcm9tIE9TRiBzaW5jZSBpdCBpbnN0YWxscyBzdHVmZiBhcyByb290CisrICAgICMgYnkgZGVmYXVsdC4KKysgICAgZm9yIGFjX3Byb2cgaW4gZ2luc3RhbGwgc2NvaW5zdCBpbnN0YWxsOyBkbworKyAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKwlpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB9OyB0aGVuCisrCSAgaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKysJICAgIGdyZXAgZHNwbXNnICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysJICAgICMgQUlYIGluc3RhbGwuICBJdCBoYXMgYW4gaW5jb21wYXRpYmxlIGNhbGxpbmcgY29udmVudGlvbi4KKysJICAgIDoKKysJICBlbGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisrCSAgICBncmVwIHB3cGx1cyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrCSAgICAjIHByb2dyYW0tc3BlY2lmaWMgaW5zdGFsbCBzY3JpcHQgdXNlZCBieSBIUCBwd3BsdXMtLWRvbid0IHVzZS4KKysJICAgIDoKKysJICBlbHNlCisrCSAgICBhY19jdl9wYXRoX2luc3RhbGw9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQgLWMiCisrCSAgICBicmVhayAzCisrCSAgZmkKKysJZmkKKysgICAgICBkb25lCisrICAgIGRvbmUKKysgICAgOzsKKytlc2FjCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKysKKytmaQorKyAgaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KKysgICAgSU5TVEFMTD0kYWNfY3ZfcGF0aF9pbnN0YWxsCisrICBlbHNlCisrICAgICMgQXMgYSBsYXN0IHJlc29ydCwgdXNlIHRoZSBzbG93IHNoZWxsIHNjcmlwdC4gIERvbid0IGNhY2hlIGEKKysgICAgIyB2YWx1ZSBmb3IgSU5TVEFMTCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAorKyAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBjYWNoZSBpZiB0aGF0IGRpcmVjdG9yeSBpcworKyAgICAjIHJlbW92ZWQsIG9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlbGF0aXZlIG5hbWUuCisrICAgIElOU1RBTEw9JGFjX2luc3RhbGxfc2gKKysgIGZpCisrZmkKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRJTlNUQUxMIiA+JjUKKytlY2hvICIke0VDSE9fVH0kSU5TVEFMTCIgPiY2OyB9CisrCisrIyBVc2UgdGVzdCAteiBiZWNhdXNlIFN1bk9TNCBzaCBtaXNoYW5kbGVzIGJyYWNlcyBpbiAke3Zhci12YWx9LgorKyMgSXQgdGhpbmtzIHRoZSBmaXJzdCBjbG9zZSBicmFjZSBlbmRzIHRoZSB2YXJpYWJsZSBzdWJzdGl0dXRpb24uCisrdGVzdCAteiAiJElOU1RBTExfUFJPR1JBTSIgJiYgSU5TVEFMTF9QUk9HUkFNPScke0lOU1RBTEx9JworKworK3Rlc3QgLXogIiRJTlNUQUxMX1NDUklQVCIgJiYgSU5TVEFMTF9TQ1JJUFQ9JyR7SU5TVEFMTH0nCisrCisrdGVzdCAteiAiJElOU1RBTExfREFUQSIgJiYgSU5TVEFMTF9EQVRBPScke0lOU1RBTEx9IC1tIDY0NCcKKysKKysKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlcyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlcy4uLiAkRUNIT19DIiA+JjY7IH0KKysgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfbWFpbnRhaW5lcl9tb2RlK3NldH0iID0gc2V0OyB0aGVuCisrICBlbmFibGV2YWw9JGVuYWJsZV9tYWludGFpbmVyX21vZGU7IFVTRV9NQUlOVEFJTkVSX01PREU9JGVuYWJsZXZhbAorK2Vsc2UKKysgIFVTRV9NQUlOVEFJTkVSX01PREU9bm8KKytmaQorKworKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkVVNFX01BSU5UQUlORVJfTU9ERSIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JFVTRV9NQUlOVEFJTkVSX01PREUiID4mNjsgfQorKworKworK2lmIHRlc3QgJFVTRV9NQUlOVEFJTkVSX01PREUgPSB5ZXM7IHRoZW4KKysgIE1BSU5UQUlORVJfTU9ERV9UUlVFPQorKyAgTUFJTlRBSU5FUl9NT0RFX0ZBTFNFPScjJworK2Vsc2UKKysgIE1BSU5UQUlORVJfTU9ERV9UUlVFPScjJworKyAgTUFJTlRBSU5FUl9NT0RFX0ZBTFNFPQorK2ZpCisrICBNQUlOVD0kTUFJTlRBSU5FUl9NT0RFX1RSVUUKKysKKysKKysKKysjIFdlIG5lZWQgQUNfRVhFRVhUIHRvIGtlZXAgYXV0b21ha2UgaGFwcHkgaW4gY3lnbnVzIG1vZGUuICBIb3dldmVyLAorKyMgYXQgbGVhc3QgY3VycmVudGx5LCB3ZSBuZXZlciBhY3R1YWxseSBidWlsZCBhIHByb2dyYW0sIHNvIHdlIG5ldmVyCisrIyBuZWVkIHRvIHVzZSAkKEVYRUVYVCkuICBNb3Jlb3ZlciwgdGhlIHRlc3QgZm9yIEVYRUVYVCBub3JtYWxseQorKyMgZmFpbHMsIGJlY2F1c2Ugd2UgYXJlIHByb2JhYmx5IGNvbmZpZ3VyaW5nIHdpdGggYSBjcm9zcyBjb21waWxlcgorKyMgd2hpY2ggY2FuJ3QgY3JlYXRlIGV4ZWN1dGFibGVzLiAgU28gd2UgaW5jbHVkZSBBQ19FWEVFWFQgdG8ga2VlcAorKyMgYXV0b21ha2UgaGFwcHksIGJ1dCB3ZSBkb24ndCBleGVjdXRlIGl0LCBzaW5jZSB3ZSBkb24ndCBjYXJlIGFib3V0CisrIyB0aGUgcmVzdWx0LgorKyNpZiBmYWxzZTsgdGhlbgorKyMKKysjZmkKKysKKysuICR7bmV3bGliX2Jhc2VkaXJ9L2NvbmZpZ3VyZS5ob3N0CisrCisrbmV3bGliX2NmbGFncz0iJHtuZXdsaWJfY2ZsYWdzfSAtZm5vLWJ1aWx0aW4iCisrCisrTkVXTElCX0NGTEFHUz0ke25ld2xpYl9jZmxhZ3N9CisrCisrCisrTERGTEFHUz0ke2xkZmxhZ3N9CisrCisrCisrCisrCisraWYgdGVzdCB4JHtuZXdsaWJfZWxpeF9sZXZlbH0gPSB4MDsgdGhlbgorKyAgRUxJWF9MRVZFTF8wX1RSVUU9CisrICBFTElYX0xFVkVMXzBfRkFMU0U9JyMnCisrZWxzZQorKyAgRUxJWF9MRVZFTF8wX1RSVUU9JyMnCisrICBFTElYX0xFVkVMXzBfRkFMU0U9CisrZmkKKysKKysKKytpZiB0ZXN0IHgke25ld2xpYl9lbGl4X2xldmVsfSA9IHgxOyB0aGVuCisrICBFTElYX0xFVkVMXzFfVFJVRT0KKysgIEVMSVhfTEVWRUxfMV9GQUxTRT0nIycKKytlbHNlCisrICBFTElYX0xFVkVMXzFfVFJVRT0nIycKKysgIEVMSVhfTEVWRUxfMV9GQUxTRT0KKytmaQorKworKworK2lmIHRlc3QgeCR7bmV3bGliX2VsaXhfbGV2ZWx9ID0geDI7IHRoZW4KKysgIEVMSVhfTEVWRUxfMl9UUlVFPQorKyAgRUxJWF9MRVZFTF8yX0ZBTFNFPScjJworK2Vsc2UKKysgIEVMSVhfTEVWRUxfMl9UUlVFPScjJworKyAgRUxJWF9MRVZFTF8yX0ZBTFNFPQorK2ZpCisrCisrCisraWYgdGVzdCB4JHtuZXdsaWJfZWxpeF9sZXZlbH0gPSB4MzsgdGhlbgorKyAgRUxJWF9MRVZFTF8zX1RSVUU9CisrICBFTElYX0xFVkVMXzNfRkFMU0U9JyMnCisrZWxzZQorKyAgRUxJWF9MRVZFTF8zX1RSVUU9JyMnCisrICBFTElYX0xFVkVMXzNfRkFMU0U9CisrZmkKKysKKysKKytpZiB0ZXN0IHgke25ld2xpYl9lbGl4X2xldmVsfSA9IHg0OyB0aGVuCisrICBFTElYX0xFVkVMXzRfVFJVRT0KKysgIEVMSVhfTEVWRUxfNF9GQUxTRT0nIycKKytlbHNlCisrICBFTElYX0xFVkVMXzRfVFJVRT0nIycKKysgIEVMSVhfTEVWRUxfNF9GQUxTRT0KKytmaQorKworKworKworK2lmIHRlc3QgeCR7dXNlX2xpYnRvb2x9ID0geHllczsgdGhlbgorKyAgVVNFX0xJQlRPT0xfVFJVRT0KKysgIFVTRV9MSUJUT09MX0ZBTFNFPScjJworK2Vsc2UKKysgIFVTRV9MSUJUT09MX1RSVUU9JyMnCisrICBVU0VfTElCVE9PTF9GQUxTRT0KKytmaQorKworKyMgSGFyZC1jb2RlIE9CSkVYVC4gIE5vcm1hbGx5IGl0IGlzIHNldCBieSBBQ19PQkpFWFQsIGJ1dCB3ZQorKyMgdXNlIG9leHQsIHdoaWNoIGlzIHNldCBpbiBjb25maWd1cmUuaG9zdCBiYXNlZCBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLgorK09CSkVYVD0ke29leHR9CisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1ha2VmaWxlIgorKworK2NhdCA+Y29uZmNhY2hlIDw8XF9BQ0VPRgorKyMgVGhpcyBmaWxlIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQorKyMgdGVzdHMgcnVuIG9uIHRoaXMgc3lzdGVtIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGNvbmZpZ3VyZQorKyMgc2NyaXB0cyBhbmQgY29uZmlndXJlIHJ1bnMsIHNlZSBjb25maWd1cmUncyBvcHRpb24gLS1jb25maWctY2FjaGUuCisrIyBJdCBpcyBub3QgdXNlZnVsIG9uIG90aGVyIHN5c3RlbXMuICBJZiBpdCBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndAorKyMgd2FudCB0byBrZWVwLCB5b3UgbWF5IHJlbW92ZSBvciBlZGl0IGl0LgorKyMKKysjIGNvbmZpZy5zdGF0dXMgb25seSBwYXlzIGF0dGVudGlvbiB0byB0aGUgY2FjaGUgZmlsZSBpZiB5b3UgZ2l2ZSBpdAorKyMgdGhlIC0tcmVjaGVjayBvcHRpb24gdG8gcmVydW4gY29uZmlndXJlLgorKyMKKysjIGBhY19jdl9lbnZfZm9vJyB2YXJpYWJsZXMgKHNldCBvciB1bnNldCkgd2lsbCBiZSBvdmVycmlkZGVuIHdoZW4KKysjIGxvYWRpbmcgdGhpcyBmaWxlLCBvdGhlciAqdW5zZXQqIGBhY19jdl9mb28nIHdpbGwgYmUgYXNzaWduZWQgdGhlCisrIyBmb2xsb3dpbmcgdmFsdWVzLgorKworK19BQ0VPRgorKworKyMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisrIyBidXQgd2Uga25vdyBvZiBubyB3b3JrYXJvdW5kIHRoYXQgaXMgc2ltcGxlLCBwb3J0YWJsZSwgYW5kIGVmZmljaWVudC4KKysjIFNvLCB3ZSBraWxsIHZhcmlhYmxlcyBjb250YWluaW5nIG5ld2xpbmVzLgorKyMgVWx0cml4IHNoIHNldCB3cml0ZXMgdG8gc3RkZXJyIGFuZCBjYW4ndCBiZSByZWRpcmVjdGVkIGRpcmVjdGx5LAorKyMgYW5kIHNldHMgdGhlIGhpZ2ggYml0IGluIHRoZSBjYWNoZSBmaWxlIHVubGVzcyB3ZSBhc3NpZ24gdG8gdGhlIHZhcnMuCisrKAorKyAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdgOyBkbworKyAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKysgICAgY2FzZSAkYWNfdmFsIGluICMoCisrICAgICoke2FzX25sfSopCisrICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisrICAgICAgKl9jdl8qKSB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBDYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZS4iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogQ2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUuIiA+JjI7fSA7OworKyAgICAgIGVzYWMKKysgICAgICBjYXNlICRhY192YXIgaW4gIygKKysgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisrICAgICAgKikgJGFzX3Vuc2V0ICRhY192YXIgOzsKKysgICAgICBlc2FjIDs7CisrICAgIGVzYWMKKysgIGRvbmUKKysKKysgIChzZXQpIDI+JjEgfAorKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9JyAnOyBzZXQpIDI+JjFgIGluICMoCisrICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKKysgICAgICAjIGBzZXQnIGRvZXMgbm90IHF1b3RlIGNvcnJlY3RseSwgc28gYWRkIHF1b3RlcyAoZG91YmxlLXF1b3RlCisrICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXCkuCisrICAgICAgc2VkIC1uIFwKKysJInMvJy8nXFxcXCcnL2c7CisrCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgorKyAgICAgIDs7ICMoCisrICAgICopCisrICAgICAgIyBgc2V0JyBxdW90ZXMgY29ycmVjdGx5IGFzIHJlcXVpcmVkIGJ5IFBPU0lYLCBzbyBkbyBub3QgYWRkIHF1b3Rlcy4KKysgICAgICBzZWQgLW4gIi9eW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qPS9wIgorKyAgICAgIDs7CisrICAgIGVzYWMgfAorKyAgICBzb3J0CisrKSB8CisrICBzZWQgJworKyAgICAgL15hY19jdl9lbnZfL2IgZW5kCisrICAgICB0IGNsZWFyCisrICAgICA6Y2xlYXIKKysgICAgIHMvXlwoW149XSpcKT1cKC4qW3t9XS4qXCkkL3Rlc3QgIiR7XDErc2V0fSIgPSBzZXQgfHwgJi8KKysgICAgIHQgZW5kCisrICAgICBzL15cKFtePV0qXCk9XCguKlwpJC9cMT0ke1wxPVwyfS8KKysgICAgIDplbmQnID4+Y29uZmNhY2hlCisraWYgZGlmZiAiJGNhY2hlX2ZpbGUiIGNvbmZjYWNoZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorKyAgaWYgdGVzdCAtdyAiJGNhY2hlX2ZpbGUiOyB0aGVuCisrICAgIHRlc3QgIngkY2FjaGVfZmlsZSIgIT0gIngvZGV2L251bGwiICYmCisrICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorK2VjaG8gIiRhc19tZTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisrICAgIGNhdCBjb25mY2FjaGUgPiRjYWNoZV9maWxlCisrICBlbHNlCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKytlY2hvICIkYXNfbWU6IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorKyAgZmkKKytmaQorK3JtIC1mIGNvbmZjYWNoZQorKworK3Rlc3QgIngkcHJlZml4IiA9IHhOT05FICYmIHByZWZpeD0kYWNfZGVmYXVsdF9wcmVmaXgKKysjIExldCBtYWtlIGV4cGFuZCBleGVjX3ByZWZpeC4KKyt0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9IHhOT05FICYmIGV4ZWNfcHJlZml4PScke3ByZWZpeH0nCisrCisrIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIERFRlMuCisrIyBQcm90ZWN0IGFnYWluc3Qgc2hlbGwgZXhwYW5zaW9uIHdoaWxlIGV4ZWN1dGluZyBNYWtlZmlsZSBydWxlcy4KKysjIFByb3RlY3QgYWdhaW5zdCBNYWtlZmlsZSBtYWNybyBleHBhbnNpb24uCisrIworKyMgSWYgdGhlIGZpcnN0IHNlZCBzdWJzdGl0dXRpb24gaXMgZXhlY3V0ZWQgKHdoaWNoIGxvb2tzIGZvciBtYWNyb3MgdGhhdAorKyMgdGFrZSBhcmd1bWVudHMpLCB0aGVuIGJyYW5jaCB0byB0aGUgcXVvdGUgc2VjdGlvbi4gIE90aGVyd2lzZSwKKysjIGxvb2sgZm9yIGEgbWFjcm8gdGhhdCBkb2Vzbid0IHRha2UgYXJndW1lbnRzLgorK2FjX3NjcmlwdD0nCisrdCBjbGVhcgorKzpjbGVhcgorK3MvXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qXChbXgkgKF1bXgkgKF0qKFteKV0qKVwpWwkgXSpcKC4qXCkvLURcMT1cMi9nCisrdCBxdW90ZQorK3MvXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qXChbXgkgXVteCSBdKlwpWwkgXSpcKC4qXCkvLURcMT1cMi9nCisrdCBxdW90ZQorK2IgYW55CisrOnF1b3RlCisrcy9bCSBgfiMkXiYqKCl7fVxcfDsnXCcnIjw+P10vXFwmL2cKKytzL1xbL1xcJi9nCisrcy9cXS9cXCYvZworK3MvXCQvJCQvZworK0gKKys6YW55CisrJHsKKysJZworKwlzL15cbi8vCisrCXMvXG4vIC9nCisrCXAKKyt9CisrJworK0RFRlM9YHNlZCAtbiAiJGFjX3NjcmlwdCIgY29uZmRlZnMuaGAKKysKKysKKythY19saWJvYmpzPQorK2FjX2x0bGlib2Jqcz0KKytmb3IgYWNfaSBpbiA6ICRMSUJPQkpTOyBkbyB0ZXN0ICJ4JGFjX2kiID0geDogJiYgY29udGludWUKKysgICMgMS4gUmVtb3ZlIHRoZSBleHRlbnNpb24sIGFuZCAkVSBpZiBhbHJlYWR5IGluc3RhbGxlZC4KKysgIGFjX3NjcmlwdD0ncy9cJFVcLi8uLztzL1wubyQvLztzL1wub2JqJC8vJworKyAgYWNfaT1gZWNobyAiJGFjX2kiIHwgc2VkICIkYWNfc2NyaXB0ImAKKysgICMgMi4gUHJlcGVuZCBMSUJPQkpESVIuICBXaGVuIHVzZWQgd2l0aCBhdXRvbWFrZT49MS4xMCBMSUJPQkpESVIKKysgICMgICAgd2lsbCBiZSBzZXQgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSBMSUJPQkpTIG9iamVjdHMgYXJlIGJ1aWx0LgorKyAgYWNfbGlib2Jqcz0iJGFjX2xpYm9ianMgXCR7TElCT0JKRElSfSRhY19pXCRVLiRhY19vYmpleHQiCisrICBhY19sdGxpYm9ianM9IiRhY19sdGxpYm9ianMgXCR7TElCT0JKRElSfSRhY19pIickVS5sbycKKytkb25lCisrTElCT0JKUz0kYWNfbGlib2JqcworKworK0xUTElCT0JKUz0kYWNfbHRsaWJvYmpzCisrCisrCisrCisrOiAke0NPTkZJR19TVEFUVVM9Li9jb25maWcuc3RhdHVzfQorK2FjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCisrYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyAkQ09ORklHX1NUQVRVUyIKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY1CisrZWNobyAiJGFzX21lOiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY2O30KKytjYXQgPiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisrIyEgJFNIRUxMCisrIyBHZW5lcmF0ZWQgYnkgJGFzX21lLgorKyMgUnVuIHRoaXMgZmlsZSB0byByZWNyZWF0ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgorKyMgQ29tcGlsZXIgb3V0cHV0IHByb2R1Y2VkIGJ5IGNvbmZpZ3VyZSwgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKKysjIGNvbmZpZ3VyZSwgaXMgaW4gY29uZmlnLmxvZyBpZiBpdCBleGlzdHMuCisrCisrZGVidWc9ZmFsc2UKKythY19jc19yZWNoZWNrPWZhbHNlCisrYWNfY3Nfc2lsZW50PWZhbHNlCisrU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KKytfQUNFT0YKKysKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBNNHNoIEluaXRpYWxpemF0aW9uLiAgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysKKysjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKKytEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCisraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBlbXVsYXRlIHNoCisrICBOVUxMQ01EPToKKysgICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKysgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisrICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKysgIHNldG9wdCBOT19HTE9CX1NVQlNUCisrZWxzZQorKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluCisrICAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsKKytlc2FjCisrCisrZmkKKysKKysKKysKKysKKysjIFBBVEggbmVlZHMgQ1IKKysjIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCisrYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCisrYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCisrYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCisrYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JworK2FzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworKworKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgorK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisrICBlY2hvICIjISAvYmluL3NoIiA+Y29uZiQkLnNoCisrICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCisrICBjaG1vZCAreCBjb25mJCQuc2gKKysgIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5zaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgIFBBVEhfU0VQQVJBVE9SPSc7JworKyAgZWxzZQorKyAgICBQQVRIX1NFUEFSQVRPUj06CisrICBmaQorKyAgcm0gLWYgY29uZiQkLnNoCisrZmkKKysKKysjIFN1cHBvcnQgdW5zZXQgd2hlbiBwb3NzaWJsZS4KKytpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgIGFzX3Vuc2V0PXVuc2V0CisrZWxzZQorKyAgYXNfdW5zZXQ9ZmFsc2UKKytmaQorKworKworKyMgSUZTCisrIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4gIFF1b3RpbmcgaXMKKysjIHRoZXJlIHRvIHByZXZlbnQgZWRpdG9ycyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHNwYWNlLXRhYi4KKysjIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKKysjIHNwbGl0dGluZyBieSBzZXR0aW5nIElGUyB0byBlbXB0eSB2YWx1ZS4pCisrYXNfbmw9JworKycKKytJRlM9IiAiIgkkYXNfbmwiCisrCisrIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KKytjYXNlICQwIGluCisrICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7CisrICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworKyAgICAgOzsKKytlc2FjCisrIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworKyMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBwYXRoLgorK2lmIHRlc3QgIngkYXNfbXlzZWxmIiA9IHg7IHRoZW4KKysgIGFzX215c2VsZj0kMAorK2ZpCisraWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgorKyAgZWNobyAiJGFzX215c2VsZjogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUiID4mMgorKyAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisrZmkKKysKKysjIFdvcmsgYXJvdW5kIGJ1Z3MgaW4gcHJlLTMuMCBVV0lOIGtzaC4KKytmb3IgYXNfdmFyIGluIEVOViBNQUlMIE1BSUxQQVRICisrZG8gKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKKytkb25lCisrUFMxPSckICcKKytQUzI9Jz4gJworK1BTND0nKyAnCisrCisrIyBOTFMgbnVpc2FuY2VzLgorK2ZvciBhc192YXIgaW4gXAorKyAgTEFORyBMQU5HVUFHRSBMQ19BRERSRVNTIExDX0FMTCBMQ19DT0xMQVRFIExDX0NUWVBFIExDX0lERU5USUZJQ0FUSU9OIFwKKysgIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBcCisrICBMQ19URUxFUEhPTkUgTENfVElNRQorK2RvCisrICBpZiAoc2V0ICt4OyB0ZXN0IC16ICJgKGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcikgMj4mMWAiKTsgdGhlbgorKyAgICBldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIKKysgIGVsc2UKKysgICAgKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKKysgIGZpCisrZG9uZQorKworKyMgUmVxdWlyZWQgdG8gdXNlIGJhc2VuYW1lLgorK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisrICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KKysgIGFzX2V4cHI9ZXhwcgorK2Vsc2UKKysgIGFzX2V4cHI9ZmFsc2UKKytmaQorKworK2lmIChiYXNlbmFtZSAtLSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAtLSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KKysgIGFzX2Jhc2VuYW1lPWJhc2VuYW1lCisrZWxzZQorKyAgYXNfYmFzZW5hbWU9ZmFsc2UKKytmaQorKworKworKyMgTmFtZSBvZiB0aGUgZXhlY3V0YWJsZS4KKythc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwKKyskYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAorKwkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKysJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorK2VjaG8gWC8iJDAiIHwKKysgICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXC9cKFwvXC9cKSQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwvXChcL1wpLioveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIHMvLiovLi87IHEnYAorKworKyMgQ0RQQVRILgorKyRhc191bnNldCBDRFBBVEgKKysKKysKKysKKysgIGFzX2xpbmVub18xPSRMSU5FTk8KKysgIGFzX2xpbmVub18yPSRMSU5FTk8KKysgIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgorKyAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSArIDFgIiA9ICJ4JGFzX2xpbmVub18yIiB8fCB7CisrCisrICAjIENyZWF0ZSAkYXNfbWUubGluZW5vIGFzIGEgY29weSBvZiAkYXNfbXlzZWxmLCBidXQgd2l0aCAkTElORU5PCisrICAjIHVuaWZvcm1seSByZXBsYWNlZCBieSB0aGUgbGluZSBudW1iZXIuICBUaGUgZmlyc3QgJ3NlZCcgaW5zZXJ0cyBhCisrICAjIGxpbmUtbnVtYmVyIGxpbmUgYWZ0ZXIgZWFjaCBsaW5lIHVzaW5nICRMSU5FTk87IHRoZSBzZWNvbmQgJ3NlZCcKKysgICMgZG9lcyB0aGUgcmVhbCB3b3JrLiAgVGhlIHNlY29uZCBzY3JpcHQgdXNlcyAnTicgdG8gcGFpciBlYWNoCisrICAjIGxpbmUtbnVtYmVyIGxpbmUgd2l0aCB0aGUgbGluZSBjb250YWluaW5nICRMSU5FTk8sIGFuZCBhcHBlbmRzCisrICAjIHRyYWlsaW5nICctJyBkdXJpbmcgc3Vic3RpdHV0aW9uIHNvIHRoYXQgJExJTkVOTyBpcyBub3QgYSBzcGVjaWFsCisrICAjIGNhc2UgYXQgbGluZSBlbmQuCisrICAjIChSYWphIFIgSGFyaW5hdGggc3VnZ2VzdGVkIHNlZCAnPScsIGFuZCBQYXVsIEVnZ2VydCB3cm90ZSB0aGUKKysgICMgc2NyaXB0cyB3aXRoIG9wdGltaXphdGlvbiBoZWxwIGZyb20gUGFvbG8gQm9uemluaS4gIEJsYW1lIExlZQorKyAgIyBFLiBNY01haG9uICgxOTMxLTE5ODkpIGZvciBzZWQncyBzeW50YXguICA6LSkKKysgIHNlZCAtbiAnCisrICAgIHAKKysgICAgL1skXUxJTkVOTy89CisrICAnIDwkYXNfbXlzZWxmIHwKKysgICAgc2VkICcKKysgICAgICBzL1skXUxJTkVOTy4qLyYtLworKyAgICAgIHQgbGluZW5vCisrICAgICAgYgorKyAgICAgIDpsaW5lbm8KKysgICAgICBOCisrICAgICAgOmxvb3AKKysgICAgICBzL1skXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dLipcblwpXCguKlwpL1wyXDFcMi8KKysgICAgICB0IGxvb3AKKysgICAgICBzLy1cbi4qLy8KKysgICAgJyA+JGFzX21lLmxpbmVubyAmJgorKyAgY2htb2QgK3ggIiRhc19tZS5saW5lbm8iIHx8CisrICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSAkYXNfbWUubGluZW5vOyByZXJ1biB3aXRoIGEgUE9TSVggc2hlbGwiID4mMgorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKworKyAgIyBEb24ndCB0cnkgdG8gZXhlYyBhcyBpdCBjaGFuZ2VzICRbMF0sIGNhdXNpbmcgYWxsIHNvcnQgb2YgcHJvYmxlbXMKKysgICMgKHRoZSBkaXJuYW1lIG9mICRbMF0gaXMgbm90IHRoZSBwbGFjZSB3aGVyZSB3ZSBtaWdodCBmaW5kIHRoZQorKyAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpdGl2ZSB0byB0aGlzKS4KKysgIC4gIi4vJGFzX21lLmxpbmVubyIKKysgICMgRXhpdCBzdGF0dXMgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kLgorKyAgZXhpdAorK30KKysKKysKKytpZiAoYXNfZGlyPWBkaXJuYW1lIC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgIGFzX2Rpcm5hbWU9ZGlybmFtZQorK2Vsc2UKKysgIGFzX2Rpcm5hbWU9ZmFsc2UKKytmaQorKworK0VDSE9fQz0gRUNIT19OPSBFQ0hPX1Q9CisrY2FzZSBgZWNobyAtbiB4YCBpbgorKy1uKikKKysgIGNhc2UgYGVjaG8gJ3hcYydgIGluCisrICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBzaW5nbGUgdGFiIGNoYXJhY3Rlci4KKysgICopICAgRUNIT19DPSdcYyc7OworKyAgZXNhYzs7CisrKikKKysgIEVDSE9fTj0nLW4nOzsKKytlc2FjCisrCisraWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKKysgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorKyAgYXNfZXhwcj1leHByCisrZWxzZQorKyAgYXNfZXhwcj1mYWxzZQorK2ZpCisrCisrcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKKytpZiB0ZXN0IC1kIGNvbmYkJC5kaXI7IHRoZW4KKysgIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKKytlbHNlCisrICBybSAtZiBjb25mJCQuZGlyCisrICBta2RpciBjb25mJCQuZGlyCisrZmkKKytlY2hvID5jb25mJCQuZmlsZQorK2lmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorKyAgYXNfbG5fcz0nbG4gLXMnCisrICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorKyAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKysgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorKyAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wJy4KKysgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKysgICAgYXNfbG5fcz0nY3AgLXAnCisrZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKysgIGFzX2xuX3M9bG4KKytlbHNlCisrICBhc19sbl9zPSdjcCAtcCcKKytmaQorK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKKytybWRpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCisrCisraWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgorKyAgYXNfbWtkaXJfcD06CisrZWxzZQorKyAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKysgIGFzX21rZGlyX3A9ZmFsc2UKKytmaQorKworK2lmIHRlc3QgLXggLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgIGFzX3Rlc3RfeD0ndGVzdCAteCcKKytlbHNlCisrICBpZiBscyAtZEwgLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgYXNfbHNfTF9vcHRpb249TAorKyAgZWxzZQorKyAgICBhc19sc19MX29wdGlvbj0KKysgIGZpCisrICBhc190ZXN0X3g9JworKyAgICBldmFsIHNoIC1jICdcJycKKysgICAgICBpZiB0ZXN0IC1kICIkMSI7IHRoZW4KKysgICAgICAgIHRlc3QgLWQgIiQxLy4iOworKyAgICAgIGVsc2UKKysJY2FzZSAkMSBpbgorKyAgICAgICAgLSopc2V0ICIuLyQxIjs7CisrCWVzYWM7CisrCWNhc2UgYGxzIC1sZCckYXNfbHNfTF9vcHRpb24nICIkMSIgMj4vZGV2L251bGxgIGluCisrCT8/P1tzeF0qKTo7OyopZmFsc2U7O2VzYWM7ZmkKKysgICAgJ1wnJyBzaAorKyAgJworK2ZpCisrYXNfZXhlY3V0YWJsZV9wPSRhc190ZXN0X3gKKysKKysjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCisrYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKysKKysjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KKythc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorKworKworK2V4ZWMgNj4mMQorKworKyMgU2F2ZSB0aGUgbG9nIG1lc3NhZ2UsIHRvIGtlZXAgJFswXSBhbmQgc28gb24gbWVhbmluZ2Z1bCwgYW5kIHRvCisrIyByZXBvcnQgYWN0dWFsIGlucHV0IHZhbHVlcyBvZiBDT05GSUdfRklMRVMgZXRjLiBpbnN0ZWFkIG9mIHRoZWlyCisrIyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4KKythY19sb2c9IgorK1RoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgbmV3bGliICRhc19tZSBORVdMSUJfVkVSU0lPTiwgd2hpY2ggd2FzCisrZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjYxLiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisrCisrICBDT05GSUdfRklMRVMgICAgPSAkQ09ORklHX0ZJTEVTCisrICBDT05GSUdfSEVBREVSUyAgPSAkQ09ORklHX0hFQURFUlMKKysgIENPTkZJR19MSU5LUyAgICA9ICRDT05GSUdfTElOS1MKKysgIENPTkZJR19DT01NQU5EUyA9ICRDT05GSUdfQ09NTUFORFMKKysgICQgJDAgJEAKKysKKytvbiBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKKysiCisrCisrX0FDRU9GCisrCisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKysjIEZpbGVzIHRoYXQgY29uZmlnLnN0YXR1cyB3YXMgbWFkZSBmb3IuCisrY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIgorKworK19BQ0VPRgorKworK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorK2FjX2NzX3VzYWdlPSJcCisrXGAkYXNfbWUnIGluc3RhbnRpYXRlcyBmaWxlcyBmcm9tIHRlbXBsYXRlcyBhY2NvcmRpbmcgdG8gdGhlCisrY3VycmVudCBjb25maWd1cmF0aW9uLgorKworK1VzYWdlOiAkMCBbT1BUSU9OU10gW0ZJTEVdLi4uCisrCisrICAtaCwgLS1oZWxwICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisrICAtViwgLS12ZXJzaW9uICAgIHByaW50IHZlcnNpb24gbnVtYmVyIGFuZCBjb25maWd1cmF0aW9uIHNldHRpbmdzLCB0aGVuIGV4aXQKKysgIC1xLCAtLXF1aWV0ICAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCisrICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKysgICAgICAtLXJlY2hlY2sgICAgdXBkYXRlICRhc19tZSBieSByZWNvbmZpZ3VyaW5nIGluIHRoZSBzYW1lIGNvbmRpdGlvbnMKKysgIC0tZmlsZT1GSUxFWzpURU1QTEFURV0KKysJCSAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQorKworK0NvbmZpZ3VyYXRpb24gZmlsZXM6CisrJGNvbmZpZ19maWxlcworKworK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b2NvbmZAZ251Lm9yZz4uIgorKworK19BQ0VPRgorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisrYWNfY3NfdmVyc2lvbj0iXFwKKytuZXdsaWIgY29uZmlnLnN0YXR1cyBORVdMSUJfVkVSU0lPTgorK2NvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MSwKKysgIHdpdGggb3B0aW9ucyBcXCJgZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9eIC8vOyBzL1tcXCIiXGBcJF0vXFxcXCYvZydgXFwiCisrCisrQ29weXJpZ2h0IChDKSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK1RoaXMgY29uZmlnLnN0YXR1cyBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorK2dpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCisrCisrYWNfcHdkPSckYWNfcHdkJworK3NyY2Rpcj0nJHNyY2RpcicKKytJTlNUQUxMPSckSU5TVEFMTCcKKytfQUNFT0YKKysKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKysjIElmIG5vIGZpbGUgYXJlIHNwZWNpZmllZCBieSB0aGUgdXNlciwgdGhlbiB3ZSBuZWVkIHRvIHByb3ZpZGUgZGVmYXVsdAorKyMgdmFsdWUuICBCeSB3ZSBuZWVkIHRvIGtub3cgaWYgZmlsZXMgd2VyZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuCisrYWNfbmVlZF9kZWZhdWx0cz06Cisrd2hpbGUgdGVzdCAkIyAhPSAwCisrZG8KKysgIGNhc2UgJDEgaW4KKysgIC0tKj0qKQorKyAgICBhY19vcHRpb249YGV4cHIgIlgkMSIgOiAnWFwoW149XSpcKT0nYAorKyAgICBhY19vcHRhcmc9YGV4cHIgIlgkMSIgOiAnWFtePV0qPVwoLipcKSdgCisrICAgIGFjX3NoaWZ0PToKKysgICAgOzsKKysgICopCisrICAgIGFjX29wdGlvbj0kMQorKyAgICBhY19vcHRhcmc9JDIKKysgICAgYWNfc2hpZnQ9c2hpZnQKKysgICAgOzsKKysgIGVzYWMKKysKKysgIGNhc2UgJGFjX29wdGlvbiBpbgorKyAgIyBIYW5kbGluZyBvZiB0aGUgb3B0aW9ucy4KKysgIC1yZWNoZWNrIHwgLS1yZWNoZWNrIHwgLS1yZWNoZWMgfCAtLXJlY2hlIHwgLS1yZWNoIHwgLS1yZWMgfCAtLXJlIHwgLS1yKQorKyAgICBhY19jc19yZWNoZWNrPTogOzsKKysgIC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC0tdmVyIHwgLS12ZSB8IC0tdiB8IC1WICkKKysgICAgZWNobyAiJGFjX2NzX3ZlcnNpb24iOyBleGl0IDs7CisrICAtLWRlYnVnIHwgLS1kZWJ1IHwgLS1kZWIgfCAtLWRlIHwgLS1kIHwgLWQgKQorKyAgICBkZWJ1Zz06IDs7CisrICAtLWZpbGUgfCAtLWZpbCB8IC0tZmkgfCAtLWYgKQorKyAgICAkYWNfc2hpZnQKKysgICAgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTICRhY19vcHRhcmciCisrICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworKyAgLS1oZSB8IC0taCB8ICAtLWhlbHAgfCAtLWhlbCB8IC1oICkKKysgICAgZWNobyAiJGFjX2NzX3VzYWdlIjsgZXhpdCA7OworKyAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKysgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsIHwgLS1zaSB8IC0tcykKKysgICAgYWNfY3Nfc2lsZW50PTogOzsKKysKKysgICMgVGhpcyBpcyBhbiBlcnJvci4KKysgIC0qKSB7IGVjaG8gIiRhc19tZTogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb246ICQxCisrVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMgorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworKworKyAgKikgYWNfY29uZmlnX3RhcmdldHM9IiRhY19jb25maWdfdGFyZ2V0cyAkMSIKKysgICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2UgOzsKKysKKysgIGVzYWMKKysgIHNoaWZ0CisrZG9uZQorKworK2FjX2NvbmZpZ3VyZV9leHRyYV9hcmdzPQorKworK2lmICRhY19jc19zaWxlbnQ7IHRoZW4KKysgIGV4ZWMgNj4vZGV2L251bGwKKysgIGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzPSIkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1zaWxlbnQiCisrZmkKKysKKytfQUNFT0YKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorK2lmIFwkYWNfY3NfcmVjaGVjazsgdGhlbgorKyAgZWNobyAicnVubmluZyBDT05GSUdfU0hFTEw9JFNIRUxMICRTSEVMTCAkMCAiJGFjX2NvbmZpZ3VyZV9hcmdzIFwkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgIiAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbiIgPiY2CisrICBDT05GSUdfU0hFTEw9JFNIRUxMCisrICBleHBvcnQgQ09ORklHX1NIRUxMCisrICBleGVjICRTSEVMTCAiJDAiJGFjX2NvbmZpZ3VyZV9hcmdzIFwkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24KKytmaQorKworK19BQ0VPRgorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorK2V4ZWMgNT4+Y29uZmlnLmxvZworK3sKKysgIGVjaG8KKysgIHNlZCAnaDtzLy4vLS9nO3MvXi4uLi8jIyAvO3MvLi4uJC8gIyMvO3A7eDtwO3gnIDw8X0FTQk9YCisrIyMgUnVubmluZyAkYXNfbWUuICMjCisrX0FTQk9YCisrICBlY2hvICIkYWNfbG9nIgorK30gPiY1CisrCisrX0FDRU9GCisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKytfQUNFT0YKKysKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKysKKysjIEhhbmRsaW5nIG9mIGFyZ3VtZW50cy4KKytmb3IgYWNfY29uZmlnX3RhcmdldCBpbiAkYWNfY29uZmlnX3RhcmdldHMKKytkbworKyAgY2FzZSAkYWNfY29uZmlnX3RhcmdldCBpbgorKyAgICAiTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFrZWZpbGUiIDs7CisrCisrICAqKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50OiAkYWNfY29uZmlnX3RhcmdldCIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBhcmd1bWVudDogJGFjX2NvbmZpZ190YXJnZXQiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKysgIGVzYWMKKytkb25lCisrCisrCisrIyBJZiB0aGUgdXNlciBkaWQgbm90IHVzZSB0aGUgYXJndW1lbnRzIHRvIHNwZWNpZnkgdGhlIGl0ZW1zIHRvIGluc3RhbnRpYXRlLAorKyMgdGhlbiB0aGUgZW52dmFyIGludGVyZmFjZSBpcyB1c2VkLiAgU2V0IG9ubHkgdGhvc2UgdGhhdCBhcmUgbm90LgorKyMgV2UgdXNlIHRoZSBsb25nIGZvcm0gZm9yIHRoZSBkZWZhdWx0IGFzc2lnbm1lbnQgYmVjYXVzZSBvZiBhbiBleHRyZW1lbHkKKysjIGJpemFycmUgYnVnIG9uIFN1bk9TIDQuMS4zLgorK2lmICRhY19uZWVkX2RlZmF1bHRzOyB0aGVuCisrICB0ZXN0ICIke0NPTkZJR19GSUxFUytzZXR9IiA9IHNldCB8fCBDT05GSUdfRklMRVM9JGNvbmZpZ19maWxlcworK2ZpCisrCisrIyBIYXZlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmb3IgY29udmVuaWVuY2UuICBNYWtlIGl0IGluIHRoZSBidWlsZCB0cmVlCisrIyBzaW1wbHkgYmVjYXVzZSB0aGVyZSBpcyBubyByZWFzb24gYWdhaW5zdCBoYXZpbmcgaXQgaGVyZSwgYW5kIGluIGFkZGl0aW9uLAorKyMgY3JlYXRpbmcgYW5kIG1vdmluZyBmaWxlcyBmcm9tIC90bXAgY2FuIHNvbWV0aW1lcyBjYXVzZSBwcm9ibGVtcy4KKysjIEhvb2sgZm9yIGl0cyByZW1vdmFsIHVubGVzcyBkZWJ1Z2dpbmcuCisrIyBOb3RlIHRoYXQgdGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaW4gd2hpY2ggdGhlIGRpcmVjdG9yeSB3aWxsIG5vdCBiZSBjbGVhbmVkOgorKyMgYWZ0ZXIgaXRzIGNyZWF0aW9uIGJ1dCBiZWZvcmUgaXRzIG5hbWUgaGFzIGJlZW4gYXNzaWduZWQgdG8gYCR0bXAnLgorKyRkZWJ1ZyB8fAorK3sKKysgIHRtcD0KKysgIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/CisrICB7IHRlc3QgLXogIiR0bXAiIHx8IHRlc3QgISAtZCAiJHRtcCIgfHwgcm0gLWZyICIkdG1wIjsgfSAmJiBleGl0ICRleGl0X3N0YXR1cworKycgMAorKyAgdHJhcCAneyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAxIDIgMTMgMTUKKyt9CisrIyBDcmVhdGUgYSAoc2VjdXJlKSB0bXAgZGlyZWN0b3J5IGZvciB0bXAgZmlsZXMuCisrCisreworKyAgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiLi9jb25mWFhYWFhYIikgMj4vZGV2L251bGxgICYmCisrICB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIgorK30gIHx8CisreworKyAgdG1wPS4vY29uZiQkLSRSQU5ET00KKysgICh1bWFzayAwNzcgJiYgbWtkaXIgIiR0bXAiKQorK30gfHwKKyt7CisrICAgZWNobyAiJG1lOiBjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAuIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH0KKyt9CisrCisrIworKyMgU2V0IHVwIHRoZSBzZWQgc2NyaXB0cyBmb3IgQ09ORklHX0ZJTEVTIHNlY3Rpb24uCisrIworKworKyMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGUgc2NyaXB0cyBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0ZJTEVTLgorKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aGVuIC4vY29uZmlnLnN0YXR1cyBjb25maWcuaAorK2lmIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiOyB0aGVuCisrCisrX0FDRU9GCisrCisrCisrCisrYWNfZGVsaW09JyUhXyEjICcKKytmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgOjsgZG8KKysgIGNhdCA+Y29uZiQkc3Vicy5zZWQgPDxfQUNFT0YKKytTSEVMTCEkU0hFTEwkYWNfZGVsaW0KKytQQVRIX1NFUEFSQVRPUiEkUEFUSF9TRVBBUkFUT1IkYWNfZGVsaW0KKytQQUNLQUdFX05BTUUhJFBBQ0tBR0VfTkFNRSRhY19kZWxpbQorK1BBQ0tBR0VfVEFSTkFNRSEkUEFDS0FHRV9UQVJOQU1FJGFjX2RlbGltCisrUEFDS0FHRV9WRVJTSU9OISRQQUNLQUdFX1ZFUlNJT04kYWNfZGVsaW0KKytQQUNLQUdFX1NUUklORyEkUEFDS0FHRV9TVFJJTkckYWNfZGVsaW0KKytQQUNLQUdFX0JVR1JFUE9SVCEkUEFDS0FHRV9CVUdSRVBPUlQkYWNfZGVsaW0KKytleGVjX3ByZWZpeCEkZXhlY19wcmVmaXgkYWNfZGVsaW0KKytwcmVmaXghJHByZWZpeCRhY19kZWxpbQorK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUhJHByb2dyYW1fdHJhbnNmb3JtX25hbWUkYWNfZGVsaW0KKytiaW5kaXIhJGJpbmRpciRhY19kZWxpbQorK3NiaW5kaXIhJHNiaW5kaXIkYWNfZGVsaW0KKytsaWJleGVjZGlyISRsaWJleGVjZGlyJGFjX2RlbGltCisrZGF0YXJvb3RkaXIhJGRhdGFyb290ZGlyJGFjX2RlbGltCisrZGF0YWRpciEkZGF0YWRpciRhY19kZWxpbQorK3N5c2NvbmZkaXIhJHN5c2NvbmZkaXIkYWNfZGVsaW0KKytzaGFyZWRzdGF0ZWRpciEkc2hhcmVkc3RhdGVkaXIkYWNfZGVsaW0KKytsb2NhbHN0YXRlZGlyISRsb2NhbHN0YXRlZGlyJGFjX2RlbGltCisraW5jbHVkZWRpciEkaW5jbHVkZWRpciRhY19kZWxpbQorK29sZGluY2x1ZGVkaXIhJG9sZGluY2x1ZGVkaXIkYWNfZGVsaW0KKytkb2NkaXIhJGRvY2RpciRhY19kZWxpbQorK2luZm9kaXIhJGluZm9kaXIkYWNfZGVsaW0KKytodG1sZGlyISRodG1sZGlyJGFjX2RlbGltCisrZHZpZGlyISRkdmlkaXIkYWNfZGVsaW0KKytwZGZkaXIhJHBkZmRpciRhY19kZWxpbQorK3BzZGlyISRwc2RpciRhY19kZWxpbQorK2xpYmRpciEkbGliZGlyJGFjX2RlbGltCisrbG9jYWxlZGlyISRsb2NhbGVkaXIkYWNfZGVsaW0KKyttYW5kaXIhJG1hbmRpciRhY19kZWxpbQorK0RFRlMhJERFRlMkYWNfZGVsaW0KKytFQ0hPX0MhJEVDSE9fQyRhY19kZWxpbQorK0VDSE9fTiEkRUNIT19OJGFjX2RlbGltCisrRUNIT19UISRFQ0hPX1QkYWNfZGVsaW0KKytMSUJTISRMSUJTJGFjX2RlbGltCisrYnVpbGRfYWxpYXMhJGJ1aWxkX2FsaWFzJGFjX2RlbGltCisraG9zdF9hbGlhcyEkaG9zdF9hbGlhcyRhY19kZWxpbQorK3RhcmdldF9hbGlhcyEkdGFyZ2V0X2FsaWFzJGFjX2RlbGltCisrTUFZX1NVUFBMWV9TWVNDQUxMU19UUlVFISRNQVlfU1VQUExZX1NZU0NBTExTX1RSVUUkYWNfZGVsaW0KKytNQVlfU1VQUExZX1NZU0NBTExTX0ZBTFNFISRNQVlfU1VQUExZX1NZU0NBTExTX0ZBTFNFJGFjX2RlbGltCisrbmV3bGliX2Jhc2VkaXIhJG5ld2xpYl9iYXNlZGlyJGFjX2RlbGltCisrYnVpbGQhJGJ1aWxkJGFjX2RlbGltCisrYnVpbGRfY3B1ISRidWlsZF9jcHUkYWNfZGVsaW0KKytidWlsZF92ZW5kb3IhJGJ1aWxkX3ZlbmRvciRhY19kZWxpbQorK2J1aWxkX29zISRidWlsZF9vcyRhY19kZWxpbQorK2hvc3QhJGhvc3QkYWNfZGVsaW0KKytob3N0X2NwdSEkaG9zdF9jcHUkYWNfZGVsaW0KKytob3N0X3ZlbmRvciEkaG9zdF92ZW5kb3IkYWNfZGVsaW0KKytob3N0X29zISRob3N0X29zJGFjX2RlbGltCisrdGFyZ2V0ISR0YXJnZXQkYWNfZGVsaW0KKyt0YXJnZXRfY3B1ISR0YXJnZXRfY3B1JGFjX2RlbGltCisrdGFyZ2V0X3ZlbmRvciEkdGFyZ2V0X3ZlbmRvciRhY19kZWxpbQorK3RhcmdldF9vcyEkdGFyZ2V0X29zJGFjX2RlbGltCisrSU5TVEFMTF9QUk9HUkFNISRJTlNUQUxMX1BST0dSQU0kYWNfZGVsaW0KKytJTlNUQUxMX1NDUklQVCEkSU5TVEFMTF9TQ1JJUFQkYWNfZGVsaW0KKytJTlNUQUxMX0RBVEEhJElOU1RBTExfREFUQSRhY19kZWxpbQorK1BBQ0tBR0UhJFBBQ0tBR0UkYWNfZGVsaW0KKytWRVJTSU9OISRWRVJTSU9OJGFjX2RlbGltCisrQUNMT0NBTCEkQUNMT0NBTCRhY19kZWxpbQorK0FVVE9DT05GISRBVVRPQ09ORiRhY19kZWxpbQorK0FVVE9NQUtFISRBVVRPTUFLRSRhY19kZWxpbQorK0FVVE9IRUFERVIhJEFVVE9IRUFERVIkYWNfZGVsaW0KKytNQUtFSU5GTyEkTUFLRUlORk8kYWNfZGVsaW0KKytTRVRfTUFLRSEkU0VUX01BS0UkYWNfZGVsaW0KKytDQyEkQ0MkYWNfZGVsaW0KKytBUyEkQVMkYWNfZGVsaW0KKytBUiEkQVIkYWNfZGVsaW0KKytSQU5MSUIhJFJBTkxJQiRhY19kZWxpbQorK01BSU5UQUlORVJfTU9ERV9UUlVFISRNQUlOVEFJTkVSX01PREVfVFJVRSRhY19kZWxpbQorK01BSU5UQUlORVJfTU9ERV9GQUxTRSEkTUFJTlRBSU5FUl9NT0RFX0ZBTFNFJGFjX2RlbGltCisrTUFJTlQhJE1BSU5UJGFjX2RlbGltCisrTkVXTElCX0NGTEFHUyEkTkVXTElCX0NGTEFHUyRhY19kZWxpbQorK0xERkxBR1MhJExERkxBR1MkYWNfZGVsaW0KKytFTElYX0xFVkVMXzBfVFJVRSEkRUxJWF9MRVZFTF8wX1RSVUUkYWNfZGVsaW0KKytFTElYX0xFVkVMXzBfRkFMU0UhJEVMSVhfTEVWRUxfMF9GQUxTRSRhY19kZWxpbQorK0VMSVhfTEVWRUxfMV9UUlVFISRFTElYX0xFVkVMXzFfVFJVRSRhY19kZWxpbQorK0VMSVhfTEVWRUxfMV9GQUxTRSEkRUxJWF9MRVZFTF8xX0ZBTFNFJGFjX2RlbGltCisrRUxJWF9MRVZFTF8yX1RSVUUhJEVMSVhfTEVWRUxfMl9UUlVFJGFjX2RlbGltCisrRUxJWF9MRVZFTF8yX0ZBTFNFISRFTElYX0xFVkVMXzJfRkFMU0UkYWNfZGVsaW0KKytFTElYX0xFVkVMXzNfVFJVRSEkRUxJWF9MRVZFTF8zX1RSVUUkYWNfZGVsaW0KKytFTElYX0xFVkVMXzNfRkFMU0UhJEVMSVhfTEVWRUxfM19GQUxTRSRhY19kZWxpbQorK0VMSVhfTEVWRUxfNF9UUlVFISRFTElYX0xFVkVMXzRfVFJVRSRhY19kZWxpbQorK0VMSVhfTEVWRUxfNF9GQUxTRSEkRUxJWF9MRVZFTF80X0ZBTFNFJGFjX2RlbGltCisrVVNFX0xJQlRPT0xfVFJVRSEkVVNFX0xJQlRPT0xfVFJVRSRhY19kZWxpbQorK1VTRV9MSUJUT09MX0ZBTFNFISRVU0VfTElCVE9PTF9GQUxTRSRhY19kZWxpbQorK09CSkVYVCEkT0JKRVhUJGFjX2RlbGltCisrb2V4dCEkb2V4dCRhY19kZWxpbQorK2FleHQhJGFleHQkYWNfZGVsaW0KKytsaWJtX21hY2hpbmVfZGlyISRsaWJtX21hY2hpbmVfZGlyJGFjX2RlbGltCisrbWFjaGluZV9kaXIhJG1hY2hpbmVfZGlyJGFjX2RlbGltCisrc3lzX2RpciEkc3lzX2RpciRhY19kZWxpbQorK0xJQk9CSlMhJExJQk9CSlMkYWNfZGVsaW0KKytMVExJQk9CSlMhJExUTElCT0JKUyRhY19kZWxpbQorK19BQ0VPRgorKworKyAgaWYgdGVzdCBgc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLnNlZCB8IGdyZXAgLWMgWGAgPSA5MjsgdGhlbgorKyAgICBicmVhaworKyAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKysgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IGNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKyAgZWxzZQorKyAgICBhY19kZWxpbT0iJGFjX2RlbGltISRhY19kZWxpbSBfJGFjX2RlbGltISEgIgorKyAgZmkKKytkb25lCisrCisrYWNfZW9mPWBzZWQgLW4gJy9eQ0VPRlswLTldKiQvcy9DRU9GLzAvcCcgY29uZiQkc3Vicy5zZWRgCisraWYgdGVzdCAtbiAiJGFjX2VvZiI7IHRoZW4KKysgIGFjX2VvZj1gZWNobyAiJGFjX2VvZiIgfCBzb3J0IC1ucnUgfCBzZWQgMXFgCisrICBhY19lb2Y9YGV4cHIgJGFjX2VvZiArIDFgCisrZmkKKysKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorK2NhdCA+IlwkdG1wL3N1YnMtMS5zZWQiIDw8XENFT0YkYWNfZW9mCisrL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYiBlbmQKKytfQUNFT0YKKytzZWQgJworK3MvWyxcXCZdL1xcJi9nOyBzL0AvQHwjXyEhXyN8L2cKKytzL14vcyxALzsgcy8hL0AsfCNfISFfI3wvCisrOm4KKyt0IG4KKytzLyciJGFjX2RlbGltIickLyxnLzsgdAorK3MvJC9cXC87IHAKKytOOyBzL14uKlxuLy87IHMvWyxcXCZdL1xcJi9nOyBzL0AvQHwjXyEhXyN8L2c7IGIgbgorKycgPj4kQ09ORklHX1NUQVRVUyA8Y29uZiQkc3Vicy5zZWQKKytybSAtZiBjb25mJCRzdWJzLnNlZAorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisrOmVuZAorK3MvfCNfISFfI3wvL2cKKytDRU9GJGFjX2VvZgorK19BQ0VPRgorKworKworKyMgVlBBVEggbWF5IGNhdXNlIHRyb3VibGUgd2l0aCBzb21lIG1ha2VzLCBzbyB3ZSByZW1vdmUgJChzcmNkaXIpLAorKyMgJHtzcmNkaXJ9IGFuZCBAc3JjZGlyQCBmcm9tIFZQQVRIIGlmIHNyY2RpciBpcyAiLiIsIHN0cmlwIGxlYWRpbmcgYW5kCisrIyB0cmFpbGluZyBjb2xvbnMgYW5kIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBsaW5lIGlmIFZQQVRIIGJlY29tZXMgZW1wdHkKKysjIChhY3R1YWxseSB3ZSBsZWF2ZSBhbiBlbXB0eSBsaW5lIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycykuCisraWYgdGVzdCAieCRzcmNkaXIiID0geC47IHRoZW4KKysgIGFjX3Zwc3ViPScvXlsJIF0qVlBBVEhbCSBdKj0veworK3MvOipcJChzcmNkaXIpOiovOi8KKytzLzoqXCR7c3JjZGlyfToqLzovCisrcy86KkBzcmNkaXJAOiovOi8KKytzL15cKFtePV0qPVsJIF0qXCk6Ki9cMS8KKytzLzoqJC8vCisrcy9eW149XSo9WwkgXSokLy8KKyt9JworK2ZpCisrCisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisrZmkgIyB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIgorKworKworK2ZvciBhY190YWcgaW4gIDpGICRDT05GSUdfRklMRVMKKytkbworKyAgY2FzZSAkYWNfdGFnIGluCisrICA6W0ZITENdKSBhY19tb2RlPSRhY190YWc7IGNvbnRpbnVlOzsKKysgIGVzYWMKKysgIGNhc2UgJGFjX21vZGUkYWNfdGFnIGluCisrICA6W0ZITF0qOiopOzsKKysgIDpMKiB8IDpDKjoqKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBJbnZhbGlkIHRhZyAkYWNfdGFnLiIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogSW52YWxpZCB0YWcgJGFjX3RhZy4iID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKysgIDpbRkhdLSkgYWNfdGFnPS06LTs7CisrICA6W0ZIXSopIGFjX3RhZz0kYWNfdGFnOiRhY190YWcuaW47OworKyAgZXNhYworKyAgYWNfc2F2ZV9JRlM9JElGUworKyAgSUZTPToKKysgIHNldCB4ICRhY190YWcKKysgIElGUz0kYWNfc2F2ZV9JRlMKKysgIHNoaWZ0CisrICBhY19maWxlPSQxCisrICBzaGlmdAorKworKyAgY2FzZSAkYWNfbW9kZSBpbgorKyAgOkwpIGFjX3NvdXJjZT0kMTs7CisrICA6W0ZIXSkKKysgICAgYWNfZmlsZV9pbnB1dHM9CisrICAgIGZvciBhY19mCisrICAgIGRvCisrICAgICAgY2FzZSAkYWNfZiBpbgorKyAgICAgIC0pIGFjX2Y9IiR0bXAvc3RkaW4iOzsKKysgICAgICAqKSAjIExvb2sgZm9yIHRoZSBmaWxlIGZpcnN0IGluIHRoZSBidWlsZCB0cmVlLCB0aGVuIGluIHRoZSBzb3VyY2UgdHJlZQorKwkgIyAoaWYgdGhlIHBhdGggaXMgbm90IGFic29sdXRlKS4gIFRoZSBhYnNvbHV0ZSBwYXRoIGNhbm5vdCBiZSBET1Mtc3R5bGUsCisrCSAjIGJlY2F1c2UgJGFjX2YgY2Fubm90IGNvbnRhaW4gYDonLgorKwkgdGVzdCAtZiAiJGFjX2YiIHx8CisrCSAgIGNhc2UgJGFjX2YgaW4KKysJICAgW1xcLyRdKikgZmFsc2U7OworKwkgICAqKSB0ZXN0IC1mICIkc3JjZGlyLyRhY19mIiAmJiBhY19mPSIkc3JjZGlyLyRhY19mIjs7CisrCSAgIGVzYWMgfHwKKysJICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGFjX2YiID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRhY19mIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisrICAgICAgZXNhYworKyAgICAgIGFjX2ZpbGVfaW5wdXRzPSIkYWNfZmlsZV9pbnB1dHMgJGFjX2YiCisrICAgIGRvbmUKKysKKysgICAgIyBMZXQncyBzdGlsbCBwcmV0ZW5kIGl0IGlzIGBjb25maWd1cmUnIHdoaWNoIGluc3RhbnRpYXRlcyAoaS5lLiwgZG9uJ3QKKysgICAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byByZWFkOgorKyAgICAjICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZy5zdGF0dXMuICAqLworKyAgICBjb25maWd1cmVfaW5wdXQ9IkdlbmVyYXRlZCBmcm9tICJgSUZTPToKKysJICBlY2hvICQqIHwgc2VkICdzfF5bXjpdKi98fDtzfDpbXjpdKi98LCB8ZydgIiBieSBjb25maWd1cmUuIgorKyAgICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisrICAgICAgY29uZmlndXJlX2lucHV0PSIkYWNfZmlsZS4gICRjb25maWd1cmVfaW5wdXQiCisrICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQorK2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9CisrICAgIGZpCisrCisrICAgIGNhc2UgJGFjX3RhZyBpbgorKyAgICAqOi06KiB8ICo6LSkgY2F0ID4iJHRtcC9zdGRpbiI7OworKyAgICBlc2FjCisrICAgIDs7CisrICBlc2FjCisrCisrICBhY19kaXI9YCRhc19kaXJuYW1lIC0tICIkYWNfZmlsZSIgfHwKKyskYXNfZXhwciBYIiRhY19maWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKysJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCisrCSBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKytlY2hvIFgiJGFjX2ZpbGUiIHwKKysgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXC9cKVteL10uKi97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXChcL1wvXCkkL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXCkuKi97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgcy8uKi8uLzsgcSdgCisrICB7IGFzX2Rpcj0iJGFjX2RpciIKKysgIGNhc2UgJGFzX2RpciBpbiAjKAorKyAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OworKyAgZXNhYworKyAgdGVzdCAtZCAiJGFzX2RpciIgfHwgeyAkYXNfbWtkaXJfcCAmJiBta2RpciAtcCAiJGFzX2RpciI7IH0gfHwgeworKyAgICBhc19kaXJzPQorKyAgICB3aGlsZSA6OyBkbworKyAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAorKyAgICAgICpcJyopIGFzX3FkaXI9YGVjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIygKKysgICAgICAqKSBhc19xZGlyPSRhc19kaXI7OworKyAgICAgIGVzYWMKKysgICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgorKyAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8CisrJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKytlY2hvIFgiJGFzX2RpciIgfAorKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXC9cKSQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cKS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICBzLy4qLy4vOyBxJ2AKKysgICAgICB0ZXN0IC1kICIkYXNfZGlyIiAmJiBicmVhaworKyAgICBkb25lCisrICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKysgIH0gfHwgdGVzdCAtZCAiJGFzX2RpciIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKysgIGFjX2J1aWxkZGlyPS4KKysKKytjYXNlICIkYWNfZGlyIiBpbgorKy4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKyopCisrICBhY19kaXJfc3VmZml4PS9gZWNobyAiJGFjX2RpciIgfCBzZWQgJ3MsXlwuW1xcL10sLCdgCisrICAjIEEgIi4uIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCisrICBhY190b3BfYnVpbGRkaXJfc3ViPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3MsL1teXFwvXSosLy4uLGc7cywvLCwnYAorKyAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgorKyAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKyAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7CisrICBlc2FjIDs7CisrZXNhYworK2FjX2Fic190b3BfYnVpbGRkaXI9JGFjX3B3ZAorK2FjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKKysjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorK2FjX3RvcF9idWlsZGRpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeAorKworK2Nhc2UgJHNyY2RpciBpbgorKyAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorKyAgICBhY19zcmNkaXI9LgorKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisrICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgbmFtZS4KKysgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKysgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCisrICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKysgICopICMgUmVsYXRpdmUgbmFtZS4KKysgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4CisrICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCisrICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7OworK2VzYWMKKythY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3NyY2RpciRhY19kaXJfc3VmZml4CisrCisrCisrICBjYXNlICRhY19tb2RlIGluCisrICA6RikKKysgICMKKysgICMgQ09ORklHX0ZJTEUKKysgICMKKysKKysgIGNhc2UgJElOU1RBTEwgaW4KKysgIFtcXC8kXSogfCA/OltcXC9dKiApIGFjX0lOU1RBTEw9JElOU1RBTEwgOzsKKysgICopIGFjX0lOU1RBTEw9JGFjX3RvcF9idWlsZF9wcmVmaXgkSU5TVEFMTCA7OworKyAgZXNhYworK19BQ0VPRgorKworK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorKyMgSWYgdGhlIHRlbXBsYXRlIGRvZXMgbm90IGtub3cgYWJvdXQgZGF0YXJvb3RkaXIsIGV4cGFuZCBpdC4KKysjIEZJWE1FOiBUaGlzIGhhY2sgc2hvdWxkIGJlIHJlbW92ZWQgYSBmZXcgeWVhcnMgYWZ0ZXIgMi42MC4KKythY19kYXRhcm9vdGRpcl9oYWNrPTsgYWNfZGF0YXJvb3RkaXJfc2Vlbj0KKysKKytjYXNlIGBzZWQgLW4gJy9kYXRhcm9vdGRpci8geworKyAgcAorKyAgcQorK30KKysvQGRhdGFkaXJAL3AKKysvQGRvY2RpckAvcAorKy9AaW5mb2RpckAvcAorKy9AbG9jYWxlZGlyQC9wCisrL0BtYW5kaXJAL3AKKysnICRhY19maWxlX2lucHV0c2AgaW4KKysqZGF0YXJvb3RkaXIqKSBhY19kYXRhcm9vdGRpcl9zZWVuPXllczs7CisrKkBkYXRhZGlyQCp8KkBkb2NkaXJAKnwqQGluZm9kaXJAKnwqQGxvY2FsZWRpckAqfCpAbWFuZGlyQCopCisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjI7fQorK19BQ0VPRgorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisrICBhY19kYXRhcm9vdGRpcl9oYWNrPScKKysgIHMmQGRhdGFkaXJAJiRkYXRhZGlyJmcKKysgIHMmQGRvY2RpckAmJGRvY2RpciZnCisrICBzJkBpbmZvZGlyQCYkaW5mb2RpciZnCisrICBzJkBsb2NhbGVkaXJAJiRsb2NhbGVkaXImZworKyAgcyZAbWFuZGlyQCYkbWFuZGlyJmcKKysgICAgcyZcXFwke2RhdGFyb290ZGlyfSYkZGF0YXJvb3RkaXImZycgOzsKKytlc2FjCisrX0FDRU9GCisrCisrIyBOZXV0cmFsaXplIFZQQVRIIHdoZW4gYCRzcmNkaXInID0gYC4nLgorKyMgU2hlbGwgY29kZSBpbiBjb25maWd1cmUuYWMgbWlnaHQgc2V0IGV4dHJhc3ViLgorKyMgRklYTUU6IGRvIHdlIHJlYWxseSB3YW50IHRvIG1haW50YWluIHRoaXMgZmVhdHVyZT8KKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorKyAgc2VkICIkYWNfdnBzdWIKKyskZXh0cmFzdWIKKytfQUNFT0YKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKys6dAorKy9AW2EtekEtWl9dW2EtekEtWl8wLTldKkAvIWIKKytzJkBjb25maWd1cmVfaW5wdXRAJiRjb25maWd1cmVfaW5wdXQmO3QgdAorK3MmQHRvcF9idWlsZGRpckAmJGFjX3RvcF9idWlsZGRpcl9zdWImO3QgdAorK3MmQHNyY2RpckAmJGFjX3NyY2RpciY7dCB0CisrcyZAYWJzX3NyY2RpckAmJGFjX2Fic19zcmNkaXImO3QgdAorK3MmQHRvcF9zcmNkaXJAJiRhY190b3Bfc3JjZGlyJjt0IHQKKytzJkBhYnNfdG9wX3NyY2RpckAmJGFjX2Fic190b3Bfc3JjZGlyJjt0IHQKKytzJkBidWlsZGRpckAmJGFjX2J1aWxkZGlyJjt0IHQKKytzJkBhYnNfYnVpbGRkaXJAJiRhY19hYnNfYnVpbGRkaXImO3QgdAorK3MmQGFic190b3BfYnVpbGRkaXJAJiRhY19hYnNfdG9wX2J1aWxkZGlyJjt0IHQKKytzJkBJTlNUQUxMQCYkYWNfSU5TVEFMTCY7dCB0CisrJGFjX2RhdGFyb290ZGlyX2hhY2sKKysiICRhY19maWxlX2lucHV0cyB8IHNlZCAtZiAiJHRtcC9zdWJzLTEuc2VkIiA+JHRtcC9vdXQKKysKKyt0ZXN0IC16ICIkYWNfZGF0YXJvb3RkaXJfaGFjayRhY19kYXRhcm9vdGRpcl9zZWVuIiAmJgorKyAgeyBhY19vdXQ9YHNlZCAtbiAnL1wke2RhdGFyb290ZGlyfS9wJyAiJHRtcC9vdXQiYDsgdGVzdCAtbiAiJGFjX291dCI7IH0gJiYKKysgIHsgYWNfb3V0PWBzZWQgLW4gJy9eWwkgXSpkYXRhcm9vdGRpclsJIF0qOio9L3AnICIkdG1wL291dCJgOyB0ZXN0IC16ICIkYWNfb3V0IjsgfSAmJgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCisrd2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkLiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgXGBkYXRhcm9vdGRpcicKKyt3aGljaCBzZWVtcyB0byBiZSB1bmRlZmluZWQuICBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQuIiA+JjI7fQorKworKyAgcm0gLWYgIiR0bXAvc3RkaW4iCisrICBjYXNlICRhY19maWxlIGluCisrICAtKSBjYXQgIiR0bXAvb3V0Ijsgcm0gLWYgIiR0bXAvb3V0Ijs7CisrICAqKSBybSAtZiAiJGFjX2ZpbGUiOyBtdiAiJHRtcC9vdXQiICRhY19maWxlOzsKKysgIGVzYWMKKysgOzsKKysKKysKKysKKysgIGVzYWMKKysKKytkb25lICMgZm9yIGFjX3RhZworKworKworK3sgKGV4aXQgMCk7IGV4aXQgMDsgfQorK19BQ0VPRgorK2NobW9kICt4ICRDT05GSUdfU1RBVFVTCisrYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKKysKKysKKysjIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGFuZCB0aGVuIGNhbGxzIGNvbmZpZy5zdGF0dXMuCisrIyBjb25maWcuc3RhdHVzIGRvZXMgaXRzIG93biByZWRpcmVjdGlvbiwgYXBwZW5kaW5nIHRvIGNvbmZpZy5sb2cuCisrIyBVbmZvcnR1bmF0ZWx5LCBvbiBET1MgdGhpcyBmYWlscywgYXMgY29uZmlnLmxvZyBpcyBzdGlsbCBrZXB0IG9wZW4KKysjIGJ5IGNvbmZpZ3VyZSwgc28gY29uZmlnLnN0YXR1cyB3b24ndCBiZSBhYmxlIHRvIHdyaXRlIHRvIGl0OyBpdHMKKysjIG91dHB1dCBpcyBzaW1wbHkgZGlzY2FyZGVkLiAgU28gd2UgZXhlYyB0aGUgRkQgdG8gL2Rldi9udWxsLAorKyMgZWZmZWN0aXZlbHkgY2xvc2luZyBjb25maWcubG9nLCBzbyBpdCBjYW4gYmUgcHJvcGVybHkgKHJlKW9wZW5lZCBhbmQKKysjIGFwcGVuZGVkIHRvIGJ5IGNvbmZpZy5zdGF0dXMuICBXaGVuIGNvbWluZyBiYWNrIHRvIGNvbmZpZ3VyZSwgd2UKKysjIG5lZWQgdG8gbWFrZSB0aGUgRkQgYXZhaWxhYmxlIGFnYWluLgorK2lmIHRlc3QgIiRub19jcmVhdGUiICE9IHllczsgdGhlbgorKyAgYWNfY3Nfc3VjY2Vzcz06CisrICBhY19jb25maWdfc3RhdHVzX2FyZ3M9CisrICB0ZXN0ICIkc2lsZW50IiA9IHllcyAmJgorKyAgICBhY19jb25maWdfc3RhdHVzX2FyZ3M9IiRhY19jb25maWdfc3RhdHVzX2FyZ3MgLS1xdWlldCIKKysgIGV4ZWMgNT4vZGV2L251bGwKKysgICRTSEVMTCAkQ09ORklHX1NUQVRVUyAkYWNfY29uZmlnX3N0YXR1c19hcmdzIHx8IGFjX2NzX3N1Y2Nlc3M9ZmFsc2UKKysgIGV4ZWMgNT4+Y29uZmlnLmxvZworKyAgIyBVc2UgfHwsIG5vdCAmJiwgdG8gYXZvaWQgZXhpdGluZyBmcm9tIHRoZSBpZiB3aXRoICQ/ID0gMSwgd2hpY2gKKysgICMgd291bGQgbWFrZSBjb25maWd1cmUgZmFpbCBpZiB0aGlzIGlzIHRoZSBsYXN0IGluc3RydWN0aW9uLgorKyAgJGFjX2NzX3N1Y2Nlc3MgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisrZmkKKysKK2RpZmYgLU5hdXIgbmV3bGliLTEuMTcuMC9uZXdsaWIvbGliYy9tYWNoaW5lL2F2cjMyL2NvbmZpZ3VyZS5pbiBuZXdsaWItMS4xNy4wLW5ldy9uZXdsaWIvbGliYy9tYWNoaW5lL2F2cjMyL2NvbmZpZ3VyZS5pbgorLS0tIG5ld2xpYi0xLjE3LjAvbmV3bGliL2xpYmMvbWFjaGluZS9hdnIzMi9jb25maWd1cmUuaW4JMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBuZXdsaWItMS4xNy4wLW5ldy9uZXdsaWIvbGliYy9tYWNoaW5lL2F2cjMyL2NvbmZpZ3VyZS5pbgkyMDA5LTA1LTIyIDA5OjU3OjUwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxNCBAQAorK2RubCBUaGlzIGlzIHRoZSBuZXdsaWIvbGliYy9tYWNoaW5lL2FybSBjb25maWd1cmUuaW4gZmlsZS4KKytkbmwgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KKysKKytBQ19QUkVSRVEoMi41OSkKKytBQ19JTklUKFtuZXdsaWJdLFtORVdMSUJfVkVSU0lPTl0pCisrQUNfQ09ORklHX1NSQ0RJUihbTWFrZWZpbGUuYW1dKQorKworK2RubCBDYW4ndCBiZSBkb25lIGluIE5FV0xJQl9DT05GSUdVUkUgYmVjYXVzZSB0aGF0IGNvbmZ1c2VzIGF1dG9tYWtlLiAKKytBQ19DT05GSUdfQVVYX0RJUiguLi8uLi8uLi8uLikKKysKKytORVdMSUJfQ09ORklHVVJFKC4uLy4uLy4uKQorKworK0FDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGVdKQorK0FDX09VVFBVVAorZGlmZiAtTmF1ciBuZXdsaWItMS4xNy4wL25ld2xpYi9saWJjL21hY2hpbmUvYXZyMzIvTWFrZWZpbGUuYW0gbmV3bGliLTEuMTcuMC1uZXcvbmV3bGliL2xpYmMvbWFjaGluZS9hdnIzMi9NYWtlZmlsZS5hbQorLS0tIG5ld2xpYi0xLjE3LjAvbmV3bGliL2xpYmMvbWFjaGluZS9hdnIzMi9NYWtlZmlsZS5hbQkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIG5ld2xpYi0xLjE3LjAtbmV3L25ld2xpYi9saWJjL21hY2hpbmUvYXZyMzIvTWFrZWZpbGUuYW0JMjAwOS0wNS0yMiAwOTo1Nzo1MC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTYgQEAKKysjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIGdlbmVyYXRlIE1ha2VmaWxlLmluCisrCisrQVVUT01BS0VfT1BUSU9OUyA9IGN5Z251cworKworK0lOQ0xVREVTID0gJChORVdMSUJfQ0ZMQUdTKSAkKENST1NTX0NGTEFHUykgJChUQVJHRVRfQ0ZMQUdTKQorKworK0FNX0NDQVNGTEFHUyA9ICQoSU5DTFVERVMpCisrCisrbm9pbnN0X0xJQlJBUklFUyA9IGxpYi5hCisrCisrbGliX2FfU09VUkNFUyA9IHN0cmNtcC5TIHN0cm5jcHkuUyBtZW1jcHkuUworK2xpYl9hX0NDQVNGTEFHUz0kKEFNX0NDQVNGTEFHUykKKytsaWJfYV9DRkxBR1MgPSAkKEFNX0NGTEFHUykKKysKKytBQ0xPQ0FMX0FNRkxBR1MgPSAtSSAuLi8uLi8uLgorK0NPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTID0gJChuZXdsaWJfYmFzZWRpcikvY29uZmlndXJlLmhvc3QKK2RpZmYgLU5hdXIgbmV3bGliLTEuMTcuMC9uZXdsaWIvbGliYy9tYWNoaW5lL2F2cjMyL01ha2VmaWxlLmluIG5ld2xpYi0xLjE3LjAtbmV3L25ld2xpYi9saWJjL21hY2hpbmUvYXZyMzIvTWFrZWZpbGUuaW4KKy0tLSBuZXdsaWItMS4xNy4wL25ld2xpYi9saWJjL21hY2hpbmUvYXZyMzIvTWFrZWZpbGUuaW4JMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBuZXdsaWItMS4xNy4wLW5ldy9uZXdsaWIvbGliYy9tYWNoaW5lL2F2cjMyL01ha2VmaWxlLmluCTIwMDktMDUtMjIgMDk6NTc6NTAuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDMyNyBAQAorKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgYXV0b21ha2UgMS40LXA2IGZyb20gTWFrZWZpbGUuYW0KKysKKysjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NS04LCAxOTk5LCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisrIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorKworKworK1NIRUxMID0gQFNIRUxMQAorKworK3NyY2RpciA9IEBzcmNkaXJACisrdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorK1ZQQVRIID0gQHNyY2RpckAKKytwcmVmaXggPSBAcHJlZml4QAorK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorKworK2JpbmRpciA9IEBiaW5kaXJACisrc2JpbmRpciA9IEBzYmluZGlyQAorK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKKytkYXRhZGlyID0gQGRhdGFkaXJACisrc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAorK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKKytsaWJkaXIgPSBAbGliZGlyQAorK2luZm9kaXIgPSBAaW5mb2RpckAKKyttYW5kaXIgPSBAbWFuZGlyQAorK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKKytvbGRpbmNsdWRlZGlyID0gL3Vzci9pbmNsdWRlCisrCisrREVTVERJUiA9CisrCisrcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACisrcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorKworK3RvcF9idWlsZGRpciA9IC4KKysKKytBQ0xPQ0FMID0gQEFDTE9DQUxACisrQVVUT0NPTkYgPSBAQVVUT0NPTkZACisrQVVUT01BS0UgPSBAQVVUT01BS0VACisrQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorKworK0lOU1RBTEwgPSBASU5TVEFMTEAKKytJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQCAkKEFNX0lOU1RBTExfUFJPR1JBTV9GTEFHUykKKytJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorK3RyYW5zZm9ybSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorKworK05PUk1BTF9JTlNUQUxMID0gOgorK1BSRV9JTlNUQUxMID0gOgorK1BPU1RfSU5TVEFMTCA9IDoKKytOT1JNQUxfVU5JTlNUQUxMID0gOgorK1BSRV9VTklOU1RBTEwgPSA6CisrUE9TVF9VTklOU1RBTEwgPSA6CisrYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACisrYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKKytob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACisraG9zdF90cmlwbGV0ID0gQGhvc3RACisrdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKKyt0YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACisrQVIgPSBAQVJACisrQVMgPSBAQVNACisrQ0MgPSBAQ0NACisrQ1BQID0gQENQUEAKKytFWEVFWFQgPSBARVhFRVhUQAorK0xERkxBR1MgPSBATERGTEFHU0AKKytNQUlOVCA9IEBNQUlOVEAKKytNQUtFSU5GTyA9IEBNQUtFSU5GT0AKKytORVdMSUJfQ0ZMQUdTID0gQE5FV0xJQl9DRkxBR1NACisrT0JKRVhUID0gQE9CSkVYVEAKKytQQUNLQUdFID0gQFBBQ0tBR0VACisrUkFOTElCID0gQFJBTkxJQkAKKytWRVJTSU9OID0gQFZFUlNJT05ACisrYWV4dCA9IEBhZXh0QAorK2xpYm1fbWFjaGluZV9kaXIgPSBAbGlibV9tYWNoaW5lX2RpckAKKyttYWNoaW5lX2RpciA9IEBtYWNoaW5lX2RpckAKKytuZXdsaWJfYmFzZWRpciA9IEBuZXdsaWJfYmFzZWRpckAKKytvZXh0ID0gQG9leHRACisrc3lzX2RpciA9IEBzeXNfZGlyQAorKworK0FVVE9NQUtFX09QVElPTlMgPSBjeWdudXMKKysKKytJTkNMVURFUyA9ICQoTkVXTElCX0NGTEFHUykgJChDUk9TU19DRkxBR1MpICQoVEFSR0VUX0NGTEFHUykKKysKKytub2luc3RfTElCUkFSSUVTID0gbGliLmEKKysKKytsaWJfYV9TT1VSQ0VTID0gc3RyY21wLlMgc3RybmNweS5TIG1lbWNweS5TCisrCisrQUNMT0NBTF9BTUZMQUdTID0gLUkgLi4vLi4vLi4KKytDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUyA9ICQobmV3bGliX2Jhc2VkaXIpL2NvbmZpZ3VyZS5ob3N0CisrQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorK21raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpLy4uLy4uLy4uLy4uL21raW5zdGFsbGRpcnMKKytDT05GSUdfQ0xFQU5fRklMRVMgPSAKKytMSUJSQVJJRVMgPSAgJChub2luc3RfTElCUkFSSUVTKQorKworKworK0RFRlMgPSBAREVGU0AgLUkuIC1JJChzcmNkaXIpIAorK0NQUEZMQUdTID0gCisrTElCUyA9IEBMSUJTQAorK2xpYl9hX0xJQkFERCA9IAorK2xpYl9hX09CSkVDVFMgPSAgc3RyY21wLm8gc3RybmNweS5vIG1lbWNweS5vCisrQ0ZMQUdTID0gQENGTEFHU0AKKytDT01QSUxFID0gJChDQykgJChERUZTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCisrQ0NMRCA9ICQoQ0MpCisrTElOSyA9ICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKExERkxBR1MpIC1vICRACisrRElTVF9DT01NT04gPSAgTWFrZWZpbGUuYW0gTWFrZWZpbGUuaW4gYWNsb2NhbC5tNCBjb25maWd1cmUgY29uZmlndXJlLmluCisrCisrCisrRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKKysKKytUQVIgPSBndGFyCisrR1pJUF9FTlYgPSAtLWJlc3QKKytTT1VSQ0VTID0gJChsaWJfYV9TT1VSQ0VTKQorK09CSkVDVFMgPSAkKGxpYl9hX09CSkVDVFMpCisrCisrYWxsOiBhbGwtcmVkaXJlY3QKKysuU1VGRklYRVM6CisrLlNVRkZJWEVTOiAuUyAuYyAubyAucworKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCBNYWtlZmlsZS5hbSAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5pbiAkKEFDTE9DQUxfTTQpIAorKwljZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tY3lnbnVzIE1ha2VmaWxlCisrCisrTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAgJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKysJY2QgJCh0b3BfYnVpbGRkaXIpIFwKKysJICAmJiBDT05GSUdfRklMRVM9JEAgQ09ORklHX0hFQURFUlM9ICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cworKworKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgY29uZmlndXJlLmluICBcCisrCQkuLi8uLi8uLi9hY2luY2x1ZGUubTQgLi4vLi4vLi4vYWNsb2NhbC5tNCBcCisrCQkuLi8uLi8uLi9saWJ0b29sLm00CisrCWNkICQoc3JjZGlyKSAmJiAkKEFDTE9DQUwpICQoQUNMT0NBTF9BTUZMQUdTKQorKworK2NvbmZpZy5zdGF0dXM6ICQoc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKysJJChTSEVMTCkgLi9jb25maWcuc3RhdHVzIC0tcmVjaGVjaworKyQoc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAkKHNyY2RpcikvY29uZmlndXJlLmluICQoQUNMT0NBTF9NNCkgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKQorKwljZCAkKHNyY2RpcikgJiYgJChBVVRPQ09ORikKKysKKyttb3N0bHljbGVhbi1ub2luc3RMSUJSQVJJRVM6CisrCisrY2xlYW4tbm9pbnN0TElCUkFSSUVTOgorKwktdGVzdCAteiAiJChub2luc3RfTElCUkFSSUVTKSIgfHwgcm0gLWYgJChub2luc3RfTElCUkFSSUVTKQorKworK2Rpc3RjbGVhbi1ub2luc3RMSUJSQVJJRVM6CisrCisrbWFpbnRhaW5lci1jbGVhbi1ub2luc3RMSUJSQVJJRVM6CisrCisrLmMubzoKKysJJChDT01QSUxFKSAtYyAkPAorKworKy5zLm86CisrCSQoQ09NUElMRSkgLWMgJDwKKysKKysuUy5vOgorKwkkKENPTVBJTEUpIC1jICQ8CisrCisrbW9zdGx5Y2xlYW4tY29tcGlsZToKKysJLXJtIC1mICoubyBjb3JlICouY29yZQorKworK2NsZWFuLWNvbXBpbGU6CisrCisrZGlzdGNsZWFuLWNvbXBpbGU6CisrCS1ybSAtZiAqLnRhYi5jCisrCisrbWFpbnRhaW5lci1jbGVhbi1jb21waWxlOgorKworK2xpYi5hOiAkKGxpYl9hX09CSkVDVFMpICQobGliX2FfREVQRU5ERU5DSUVTKQorKwktcm0gLWYgbGliLmEKKysJJChBUikgY3J1IGxpYi5hICQobGliX2FfT0JKRUNUUykgJChsaWJfYV9MSUJBREQpCisrCSQoUkFOTElCKSBsaWIuYQorKworK3RhZ3M6IFRBR1MKKysKKytJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkKKysJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpJzsgXAorKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gZWNobyAkJGk7IGRvbmUgfCBcCisrCSAgYXdrICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisrCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorKwloZXJlPWBwd2RgICYmIGNkICQoc3JjZGlyKSBcCisrCSAgJiYgbWtpZCAtZiQkaGVyZS9JRCAkJHVuaXF1ZSAkKExJU1ApCisrCisrVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgJChMSVNQKQorKwl0YWdzPTsgXAorKwloZXJlPWBwd2RgOyBcCisrCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSc7IFwKKysJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRpOyBkb25lIHwgXAorKwkgIGF3ayAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKysJdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdW5pcXVlJChMSVNQKSQkdGFncyIgXAorKwkgIHx8IChjZCAkKHNyY2RpcikgJiYgZXRhZ3MgJChFVEFHU19BUkdTKSAkJHRhZ3MgICQkdW5pcXVlICQoTElTUCkgLW8gJCRoZXJlL1RBR1MpCisrCisrbW9zdGx5Y2xlYW4tdGFnczoKKysKKytjbGVhbi10YWdzOgorKworK2Rpc3RjbGVhbi10YWdzOgorKwktcm0gLWYgVEFHUyBJRAorKworK21haW50YWluZXItY2xlYW4tdGFnczoKKysKKytkaXN0ZGlyID0gJChQQUNLQUdFKS0kKFZFUlNJT04pCisrdG9wX2Rpc3RkaXIgPSAkKGRpc3RkaXIpCisrCisrIyBUaGlzIHRhcmdldCB1bnRhcnMgdGhlIGRpc3QgZmlsZSBhbmQgdHJpZXMgYSBWUEFUSCBjb25maWd1cmF0aW9uLiAgVGhlbgorKyMgaXQgZ3VhcmFudGVlcyB0aGF0IHRoZSBkaXN0cmlidXRpb24gaXMgc2VsZi1jb250YWluZWQgYnkgbWFraW5nIGFub3RoZXIKKysjIHRhcmZpbGUuCisrZGlzdGNoZWNrOiBkaXN0CisrCS1ybSAtcmYgJChkaXN0ZGlyKQorKwlHWklQPSQoR1pJUF9FTlYpICQoVEFSKSB6eGYgJChkaXN0ZGlyKS50YXIuZ3oKKysJbWtkaXIgJChkaXN0ZGlyKS89YnVpbGQKKysJbWtkaXIgJChkaXN0ZGlyKS89aW5zdAorKwlkY19pbnN0YWxsX2Jhc2U9YGNkICQoZGlzdGRpcikvPWluc3QgJiYgcHdkYDsgXAorKwljZCAkKGRpc3RkaXIpLz1idWlsZCBcCisrCSAgJiYgLi4vY29uZmlndXJlIC0tc3JjZGlyPS4uIC0tcHJlZml4PSQkZGNfaW5zdGFsbF9iYXNlIFwKKysJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisrCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZHZpIFwKKysJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjaGVjayBcCisrCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbCBcCisrCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbGNoZWNrIFwKKysJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0CisrCS1ybSAtcmYgJChkaXN0ZGlyKQorKwlAYmFubmVyPSIkKGRpc3RkaXIpLnRhci5neiBpcyByZWFkeSBmb3IgZGlzdHJpYnV0aW9uIjsgXAorKwlkYXNoZXM9YGVjaG8gIiQkYmFubmVyIiB8IHNlZCBzLy4vPS9nYDsgXAorKwllY2hvICIkJGRhc2hlcyI7IFwKKysJZWNobyAiJCRiYW5uZXIiOyBcCisrCWVjaG8gIiQkZGFzaGVzIgorK2Rpc3Q6IGRpc3RkaXIKKysJLWNobW9kIC1SIGErciAkKGRpc3RkaXIpCisrCUdaSVA9JChHWklQX0VOVikgJChUQVIpIGNob3pmICQoZGlzdGRpcikudGFyLmd6ICQoZGlzdGRpcikKKysJLXJtIC1yZiAkKGRpc3RkaXIpCisrZGlzdC1hbGw6IGRpc3RkaXIKKysJLWNobW9kIC1SIGErciAkKGRpc3RkaXIpCisrCUdaSVA9JChHWklQX0VOVikgJChUQVIpIGNob3pmICQoZGlzdGRpcikudGFyLmd6ICQoZGlzdGRpcikKKysJLXJtIC1yZiAkKGRpc3RkaXIpCisrZGlzdGRpcjogJChESVNURklMRVMpCisrCS1ybSAtcmYgJChkaXN0ZGlyKQorKwlta2RpciAkKGRpc3RkaXIpCisrCS1jaG1vZCA3NzcgJChkaXN0ZGlyKQorKwlAZm9yIGZpbGUgaW4gJChESVNURklMRVMpOyBkbyBcCisrCSAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisrCSAgICBjcCAtcHIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZTsgXAorKwkgIGVsc2UgXAorKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisrCSAgICB8fCBsbiAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIDI+IC9kZXYvbnVsbCBcCisrCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIHx8IDo7IFwKKysJICBmaTsgXAorKwlkb25lCisraW5mby1hbToKKytpbmZvOiBpbmZvLWFtCisrZHZpLWFtOgorK2R2aTogZHZpLWFtCisrY2hlY2stYW06CisrY2hlY2s6IGNoZWNrLWFtCisraW5zdGFsbGNoZWNrLWFtOgorK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCisraW5zdGFsbC1pbmZvLWFtOiAKKytpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorK2luc3RhbGwtZXhlYy1hbToKKytpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQorKworK2luc3RhbGwtZGF0YS1hbToKKytpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQorKworK2luc3RhbGwtYW06IGFsbC1hbQorKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorK2luc3RhbGw6IGluc3RhbGwtYW0KKyt1bmluc3RhbGwtYW06CisrdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKythbGwtYW06IE1ha2VmaWxlICQoTElCUkFSSUVTKQorK2FsbC1yZWRpcmVjdDogYWxsLWFtCisraW5zdGFsbC1zdHJpcDoKKysJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgQU1fSU5TVEFMTF9QUk9HUkFNX0ZMQUdTPS1zIGluc3RhbGwKKytpbnN0YWxsZGlyczoKKysKKysKKyttb3N0bHljbGVhbi1nZW5lcmljOgorKworK2NsZWFuLWdlbmVyaWM6CisrCisrZGlzdGNsZWFuLWdlbmVyaWM6CisrCS1ybSAtZiBNYWtlZmlsZSAkKENPTkZJR19DTEVBTl9GSUxFUykKKysJLXJtIC1mIGNvbmZpZy5jYWNoZSBjb25maWcubG9nIHN0YW1wLWggc3RhbXAtaFswLTldKgorKworK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKyttb3N0bHljbGVhbi1hbTogIG1vc3RseWNsZWFuLW5vaW5zdExJQlJBUklFUyBtb3N0bHljbGVhbi1jb21waWxlIFwKKysJCW1vc3RseWNsZWFuLXRhZ3MgbW9zdGx5Y2xlYW4tZ2VuZXJpYworKworK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorKworK2NsZWFuLWFtOiAgY2xlYW4tbm9pbnN0TElCUkFSSUVTIGNsZWFuLWNvbXBpbGUgY2xlYW4tdGFncyBjbGVhbi1nZW5lcmljIFwKKysJCW1vc3RseWNsZWFuLWFtCisrCisrY2xlYW46IGNsZWFuLWFtCisrCisrZGlzdGNsZWFuLWFtOiAgZGlzdGNsZWFuLW5vaW5zdExJQlJBUklFUyBkaXN0Y2xlYW4tY29tcGlsZSBcCisrCQlkaXN0Y2xlYW4tdGFncyBkaXN0Y2xlYW4tZ2VuZXJpYyBjbGVhbi1hbQorKworK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisrCS1ybSAtZiBjb25maWcuc3RhdHVzCisrCisrbWFpbnRhaW5lci1jbGVhbi1hbTogIG1haW50YWluZXItY2xlYW4tbm9pbnN0TElCUkFSSUVTIFwKKysJCW1haW50YWluZXItY2xlYW4tY29tcGlsZSBtYWludGFpbmVyLWNsZWFuLXRhZ3MgXAorKwkJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1hbQorKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2U7IgorKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCisrCisrbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorKwktcm0gLWYgY29uZmlnLnN0YXR1cworKworKy5QSE9OWTogbW9zdGx5Y2xlYW4tbm9pbnN0TElCUkFSSUVTIGRpc3RjbGVhbi1ub2luc3RMSUJSQVJJRVMgXAorK2NsZWFuLW5vaW5zdExJQlJBUklFUyBtYWludGFpbmVyLWNsZWFuLW5vaW5zdExJQlJBUklFUyBcCisrbW9zdGx5Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tY29tcGlsZSBjbGVhbi1jb21waWxlIFwKKyttYWludGFpbmVyLWNsZWFuLWNvbXBpbGUgdGFncyBtb3N0bHljbGVhbi10YWdzIGRpc3RjbGVhbi10YWdzIFwKKytjbGVhbi10YWdzIG1haW50YWluZXItY2xlYW4tdGFncyBkaXN0ZGlyIGluZm8tYW0gaW5mbyBkdmktYW0gZHZpIGNoZWNrIFwKKytjaGVjay1hbSBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGNoZWNrIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLWluZm8gXAorK2luc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWFtIFwKKytpbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwgYWxsLXJlZGlyZWN0IGFsbC1hbSBhbGwgaW5zdGFsbGRpcnMgXAorK21vc3RseWNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWdlbmVyaWMgY2xlYW4tZ2VuZXJpYyBcCisrbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIGNsZWFuIG1vc3RseWNsZWFuIGRpc3RjbGVhbiBtYWludGFpbmVyLWNsZWFuCisrCisrCisrIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKysjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKysuTk9FWFBPUlQ6CitkaWZmIC1OYXVyIG5ld2xpYi0xLjE3LjAvbmV3bGliL2xpYmMvbWFjaGluZS9hdnIzMi9tZW1jcHkuUyBuZXdsaWItMS4xNy4wLW5ldy9uZXdsaWIvbGliYy9tYWNoaW5lL2F2cjMyL21lbWNweS5TCistLS0gbmV3bGliLTEuMTcuMC9uZXdsaWIvbGliYy9tYWNoaW5lL2F2cjMyL21lbWNweS5TCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgbmV3bGliLTEuMTcuMC1uZXcvbmV3bGliL2xpYmMvbWFjaGluZS9hdnIzMi9tZW1jcHkuUwkyMDA5LTA1LTIyIDA5OjU3OjUwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwyNjkgQEAKKysvKgorKyAqIENvcHlyaWdodCAoQykgMjAwNCBBdG1lbCBOb3J3YXkKKysgKi8KKysKKysvKiBEb24ndCB1c2UgcjEyIGFzIGRzdCBzaW5jZSB3ZSBtdXN0IHJldHVybiBpdCB1bm1vZGlmaWVkICovCisrCisrCS50ZXh0CisrCS5nbG9iYWwJbWVtY3B5CisrCS50eXBlCW1lbWNweSwgQGZ1bmN0aW9uCisrI2lmICBkZWZpbmVkKF9fQVZSMzJfSEFTX1VOQUxJR05FRF9XT1JEX18pCisrbWVtY3B5OgkKKysJLyogQ2hlY2sgaWYgc3JjIGFuZCBkc3QgYXJlIGFsaWduZWQKKysJICAgaWYgbm90IGRvIGEgd29yZCBiYXNlZCBjb3B5aW5nLiAqLworKwlvcglyOSwgcjEyLCByMTEKKysJYW5kbAlyOSwgMywgQ09ICisrCWJybmUJLkx1bmFsaWduZWRfY29weQkKKysKKysJcHVzaG0JcjEyLCBscgorKwlzdWIJcjEwLCA4CisrCWJybWkJLkx3b3JkX2NvcHkKKysKKyswOgkKKysJbGQuZAlyOCwgcjExKysKKysJc3ViCXIxMCwgOAkKKysJc3QuZAlyMTIrKywgcjgKKysJYnJwbAkwYgorKwkKKysuTHdvcmRfY29weToJCisrCXN1YglyMTAsIC00CisrCWJybWkJLkxieXRlX2NvcHkKKysKKyswOgkKKysJbGQudwlyOCwgcjExKysKKysJc3ViCXIxMCwgNAkKKysJc3QudwlyMTIrKywgcjgKKysJYnJwbAkwYgorKworKy5MYnl0ZV9jb3B5OgorKwlzdWIJcjEwLCAtNAkKKysJYnJlcQkyZgorKzE6CQorKwlsZC51YglyOCwgcjExKysKKysJc3ViCXIxMCwgMQorKwlzdC5iCXIxMisrLCByOAorKwlicm5lCTFiCisrMjoJCisrCXBvcG0JcjEyLCBwYworKworKy5MdW5hbGlnbmVkX2NvcHk6CisrCW1vdglyOSwgcjEyCisrCXN1YglyMTAsIDQJCisrCisrCWJybWkJLkxieXRlX2NvcHkyCisrCisrMDoJCisrCWxkLncJcjgsIHIxMSsrCisrCXN1YglyMTAsIDQJCisrCXN0LncJcjEyKyssIHI4CisrCWJycGwJMGIKKysKKysuTGJ5dGVfY29weTI6CisrCXN1YglyMTAsIC00CQorKwlyZXRlcQlyOQorKzE6CQorKwlsZC51YglyOCwgcjExKysKKysJc3ViCXIxMCwgMQorKwlzdC5iCXIxMisrLCByOAorKwlicm5lCTFiCisrCisrCXJldAlyOQorKworKwkJCQkJCisrI2Vsc2UJCisrCQorKyNkZWZpbmUgZHN0IHI5CisrI2RlZmluZSBzcmMgcjExCisrI2RlZmluZSBsZW4gcjEwCisrCQorKyNpZiAgZGVmaW5lZChfX0FWUjMyX1VDX18pCQorK21lbWNweToKKysJLyogSWYgd2UgaGF2ZSBsZXNzIHRoYW4gOCBieXRlcywgZG9uJ3QgZG8gYW55dGhpbmcgZmFuY3kgCisrCSAgIGp1c3QgYW4gdW5yb2xsZWQgYnl0ZSBjb3B5ICovCisrCWNwLncJcjEwLCA4CisrCWJybHQJLkxsZXNzX3RoYW5fOAorKwkvKiBDaGVjayBpZiBzcmMgYW5kIGRzdCBhcmUgYWxpZ25lZC4gKi8KKysJb3IJcjksIHIxMiwgcjExCisrCWFuZGwJcjksIDMsIENPSAorKwlicm5lCS5MdW5hbGlnbmVkX2NvcHkJCisrCisrCS8qIENoZWNrIGlmIGxhcmdlciB0aGFuIDMxICovCisrCWNwLncJcjEwLCAzMgorKwlicmdlCS5MbW9yZV90aGFuXzMxOgorKworKwkvKiBMZXNzIHRoYW4gMzIuICovCisrCWFzcglyOCwgcjEwLCAyCisrCXJzdWIJcjksIHI4LCA4CisrCWFkZAlwYywgcGMsIHI5IDw8IDIKKysJLmlycAlvZmZzZXQsMCwxLDIsMyw0LDUsNgorKwlsZC53CXI5LCByMTFbKDYtXG9mZnNldCkqNF0KKysJc3QudwlyMTJbKDYtXG9mZnNldCkqNF0sIHI5CisrCS5lbmRyCisrCQorKwlhZGQJcjExLCByMTEsIHI4IDw8IDIgCisrCWFkZAlyOCwgcjEyLCByOCA8PCAyIAorKwlhbmRsCXIxMCwgMHgzIAorKwlyc3ViCXIxMCwgcjEwLCA0CisrCWFkZAlwYywgcGMsIHIxMCA8PCAyCisrCS5pcnAJb2Zmc2V0LDAsMSwyCisrCWxkLnViCXI5LCByMTFbMi1cb2Zmc2V0XQorKwlzdC5iCXI4WzItXG9mZnNldF0sIHI5CisrCS5lbmRyCisrCQorKwlyZXRhbAlyMTIKKysKKysuTGxlc3NfdGhhbl84OgkKKysJcnN1YglyMTAsIHIxMCwgOQorKwlhZGQJcGMsIHBjLCByMTAgPDwgMgorKwkuaXJwCW9mZnNldCwwLDEsMiwzLDQsNSw2LDcKKysJbGQudWIJcjksIHIxMVs3LVxvZmZzZXRdCisrCXN0LmIJcjEyWzctXG9mZnNldF0sIHI5CisrCS5lbmRyCisrCQorKwlyZXRhbAlyMTIKKysKKysuTG1vcmVfdGhhbl8zMToKKysJc3RtCS0tc3AsIHI2LXI3LCBscgorKwltb3YJcjksIHIxMgorKworKy5MYWxpZ25lZF9jb3B5OgorKwlzdWIJcjEwLCAzMgorKworKzE6CS8qIENvcHkgMzIgYnl0ZXMgYXQgYSB0aW1lICovCisrCWxkLmQJcjYsIHIxMSsrCisrCXN0LmQJcjkrKywgcjYKKysJbGQuZAlyNiwgcjExKysKKysJc3QuZAlyOSsrLCByNgorKwlsZC5kCXI2LCByMTErKworKwlzdC5kCXI5KyssIHI2CisrCWxkLmQJcjYsIHIxMSsrCisrCXN0LmQJcjkrKywgcjYKKysJc3ViCXIxMCwgMzIKKysJYnJnZQkxYgorKwkKKysuTGxlc3NfdGhhbl8zMjoKKysJLyogQ29weSAxNiBtb3JlIGJ5dGVzIGlmIHBvc3NpYmxlICovCisrCXN1YglyMTAsIC0xNgorKwlicmx0CS5MbGVzc190aGFuXzE2CisrCWxkLmQJcjYsIHIxMSsrCisrCXN0LmQJcjkrKywgcjYKKysJbGQuZAlyNiwgcjExKysKKysJc3QuZAlyOSsrLCByNgorKwlzdWIJcjEwLCAxNgorKworKy5MbGVzc190aGFuXzE2OgorKworKwkvKiBEbyB0aGUgcmVtYWluaW5nIGFzIGJ5dGUgY29waWVzICovCisrCW5lZwlyMTAKKysJYWRkCXBjLCBwYywgcjEwIDw8IDMKKysJbm9wCisrCW5vcAorKwkuaXJwCW9mZnNldCwwLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0CisrCWxkLnViCXI2LCByMTFbMTQtXG9mZnNldF0sZQorKwlzdC5iCXI5WzE0LVxvZmZzZXRdLCByNixlCisrCS5lbmRyCisrCQorKwlsZG0Jc3ArKywgcjYtcjcsIHBjCisrCisrLkx1bmFsaWduZWRfY29weToJCisrCS8qIHNyYyBhbmQgZHN0IGFyZSB1bmFsaWduZWQuICovCisrMDoJCisrCXN1YglyMTAsIDEKKysJbGQudWIJcjksIHIxMVtyMTBdCisrCXN0LmIJcjEyW3IxMF0sIHI5CisrCWJybmUJMGIKKysJCisrCXJldGFsCXIxMgkKKysJLnNpemUJbWVtY3B5LCAuIC0gbWVtY3B5CisrCisrI2Vsc2UKKyttZW1jcHk6CisrCXByZWYJc3JjWzBdCisrCW1vdglkc3QsIHIxMgorKworKwkvKiBJZiB3ZSBoYXZlIGxlc3MgdGhhbiAzMiBieXRlcywgZG9uJ3QgZG8gYW55dGhpbmcgZmFuY3kgKi8KKysJY3AudwlsZW4sIDMyCisrCWJyZ2UJLkxtb3JlX3RoYW5fMzEKKysKKysJc3ViCWxlbiwgMQorKwlyZXRsdAlyMTIKKysxOglsZC51YglyOCwgc3JjKysKKysJc3QuYglyMTIsIHI4CisrCXN1YglsZW4sIDEKKysJYnJnZQkxYgorKwlyZXRhbAlyMTIKKysKKysuTG1vcmVfdGhhbl8zMToKKysJcHVzaG0JcjAtcjcsIGxyCisrCisrCS8qIENoZWNrIGFsaWdubWVudCAqLworKwltb3YJcjgsIHNyYworKwlhbmRsCXI4LCAzMSwgQ09ICisrCWJybmUJLkx1bmFsaWduZWRfc3JjCisrCW1vdglyOCwgZHN0CisrCWFuZGwJcjgsIDMsIENPSAorKwlicm5lCS5MdW5hbGlnbmVkX2RzdAorKworKy5MYWxpZ25lZF9jb3B5OgorKwlzdWIJbGVuLCAzMgorKwlicmx0CS5MbGVzc190aGFuXzMyCisrCisrMToJLyogQ29weSAzMiBieXRlcyBhdCBhIHRpbWUgKi8KKysJcHJlZglzcmNbMzJdCisrCWxkbQlzcmMsIHIwLXI3CisrCXN1YglzcmMsIC0zMgorKwlzdG0JZHN0LCByMC1yNworKwlzdWIJZHN0LCAtMzIKKysJc3ViCWxlbiwgMzIKKysJYnJnZQkxYgorKwkKKysuTGxlc3NfdGhhbl8zMjoKKysJLyogQ29weSAxNiBtb3JlIGJ5dGVzIGlmIHBvc3NpYmxlICovCisrCXN1YglsZW4sIC0xNgorKwlicmx0CS5MbGVzc190aGFuXzE2CisrCWxkbQlzcmMsIHIwLXIzCisrCXN1YglzcmMsIC0xNgorKwlzdWIJbGVuLCAxNgorKwlzdG0JZHN0LCByMC1yMworKwlzdWIJZHN0LCAtMTYKKysKKysuTGxlc3NfdGhhbl8xNjoKKysJLyogRG8gdGhlIHJlbWFpbmluZyBhcyBieXRlIGNvcGllcyAqLworKwluZWcJbGVuCisrCWFkZAlwYywgcGMsIGxlbiA8PCAyCisrCS5yZXB0CTE1CisrCWxkLnViCXIwLCBzcmMrKworKwlzdC5iCWRzdCsrLCByMAorKwkuZW5kcgorKworKwlwb3BtCXIwLXI3LCBwYworKworKy5MdW5hbGlnbmVkX3NyYzoKKysJLyogTWFrZSBzcmMgY2FjaGVsaW5lLWFsaWduZWQuIHI4ID0gKHNyYyAmIDMxKSAqLworKwlyc3ViCXI4LCByOCwgMzIKKysJc3ViCWxlbiwgcjgKKysxOglsZC51YglyMCwgc3JjKysKKysJc3QuYglkc3QrKywgcjAKKysJc3ViCXI4LCAxCisrCWJybmUJMWIKKysKKysJLyogSWYgZHN0IGlzIHdvcmQtYWxpZ25lZCwgd2UncmUgcmVhZHkgdG8gZ28gKi8KKysJcHJlZglzcmNbMF0KKysJbW92CXI4LCAzCisrCXRzdAlkc3QsIHI4CisrCWJyZXEJLkxhbGlnbmVkX2NvcHkKKysKKysuTHVuYWxpZ25lZF9kc3Q6CisrCS8qIHNyYyBpcyBhbGlnbmVkLCBidXQgZHN0IGlzIG5vdC4gRXhwZWN0IGJhZCBwZXJmb3JtYW5jZSAqLworKzA6CQorKwlsZC51YglyMCwgc3JjKysKKysJc3QuYglkc3QrKywgcjAKKysJc3ViCWxlbiwgMQorKwlicm5lCTBiCisrCQorKwlwb3BtCXIwLXI3LCBwYworKwkuc2l6ZQltZW1jcHksIC4gLSBtZW1jcHkKKysKKysKKysjZW5kaWYKKysjZW5kaWYKK2RpZmYgLU5hdXIgbmV3bGliLTEuMTcuMC9uZXdsaWIvbGliYy9tYWNoaW5lL2F2cjMyL3N0cmNtcC5TIG5ld2xpYi0xLjE3LjAtbmV3L25ld2xpYi9saWJjL21hY2hpbmUvYXZyMzIvc3RyY21wLlMKKy0tLSBuZXdsaWItMS4xNy4wL25ld2xpYi9saWJjL21hY2hpbmUvYXZyMzIvc3RyY21wLlMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBuZXdsaWItMS4xNy4wLW5ldy9uZXdsaWIvbGliYy9tYWNoaW5lL2F2cjMyL3N0cmNtcC5TCTIwMDktMDUtMjIgMDk6NTc6NTAuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDEzMyBAQAorKwkuYWxpZ24JMgorKwkuZ2xvYmFsIHN0cmNtcAorKworK3N0cmNtcDoJCisrI2lmICFkZWZpbmVkKF9fQVZSMzJfSEFTX1VOQUxJR05FRF9XT1JEX18pCisrI2lmZGVmIF9fQVZSMzJfVUNfXworKwkvKiBDaGVjayBpZiBib3RoIHN0cmluZ3MgYXJlIGFsaWduZWQuICovCisrCW9yCXIxMCwgcjEyLCByMTEKKysJYW5kbAlyMTAsIDMsIENPSAorKwlicm5lCS5MYnl0ZV9zdHJjbXAJCisrMDoJCQorKwlsZC53CXIxMCwgcjEyWzBdCisrCWxkLncJcjksIHIxMVswXQorKwl0bmJ6CXIxMAorKwlicmVxCTFmCisrCWNwLncJcjEwLCByOQorKwlicm5lCTFmCisrCWxkLncJcjEwLCByMTJbNF0KKysJbGQudwlyOSwgcjExWzRdCisrCXRuYnoJcjEwCisrCWJyZXEJMWYKKysJY3AudwlyMTAsIHI5CisrCWJybmUJMWYKKysJbGQudwlyMTAsIHIxMls4XQorKwlsZC53CXI5LCByMTFbOF0KKysJdG5ieglyMTAKKysJYnJlcQkxZgorKwljcC53CXIxMCwgcjkKKysJYnJuZQkxZgorKwlsZC53CXIxMCwgcjEyWzEyXQorKwlsZC53CXI5LCByMTFbMTJdCisrCXRuYnoJcjEwCisrCWJyZXEJMWYKKysJc3ViCXIxMiwgLTE2CisrCXN1YglyMTEsIC0xNgorKwljcC53CXIxMCwgcjkKKysJYnJlcQkwYgorKzE6CisrCWJmZXh0dQlyMTIsIHIxMCwgMjQsIDgKKysJYmZleHR1CXIxMSwgcjksIDI0LCA4CisrCXJldGVxCXIxMgorKwlzdWIJcjEyLCByMTEKKysJcmV0bmUJcjEyCisrCQkKKysJYmZleHR1CXIxMiwgcjEwLCAxNiwgOAorKwliZmV4dHUJcjExLCByOSwgMTYsIDgKKysJcmV0ZXEJcjEyCisrCXN1YglyMTIsIHIxMQorKwlyZXRuZQlyMTIKKysKKysJYmZleHR1CXIxMiwgcjEwLCA4LCA4CisrCWJmZXh0dQlyMTEsIHI5LCA4LCA4CisrCXJldGVxCXIxMgorKwlzdWIJcjEyLCByMTEKKysJcmV0bmUJcjEyCisrCisrCWNhc3R1LmIJcjEwCisrCWNhc3R1LmIJcjkKKysJc3ViCXIxMCwgcjkKKysJcmV0CXIxMAkKKysKKysuTGJ5dGVfc3RyY21wOgkKKyswOgkKKysJbGQudWIJcjEwLCByMTFbMF0KKysJbGQudWIJcjksIHIxMlswXQorKwljcC53CXIxMCwgMAorKwlyZXRlcQlyOQorKwlzdWIJcjksIHIxMAorKwlyZXRuZQlyOQorKwlsZC51YglyMTAsIHIxMVsxXQorKwlsZC51YglyOSwgcjEyWzFdCisrCWNwLncJcjEwLCAwCisrCXJldGVxCXI5CisrCXN1YglyOSwgcjEwCisrCXJldG5lCXI5CisrCWxkLnViCXIxMCwgcjExWzJdCisrCWxkLnViCXI5LCByMTJbMl0KKysJY3AudwlyMTAsIDAKKysJcmV0ZXEJcjkKKysJc3ViCXI5LCByMTAKKysJcmV0bmUJcjkKKysJbGQudWIJcjEwLCByMTFbM10KKysJbGQudWIJcjksIHIxMlszXQorKwljcC53CXIxMCwgMAorKwlyZXRlcQlyOQorKwlzdWIJcjksIHIxMAorKwlyZXRuZQlyOQorKwlzdWIJcjExLCAtNAorKwlzdWIJcjEyLCAtNAorKwlyam1wCTBiCisrI2Vsc2UKKyswOgkKKysJbGQudWIJcjEwLCByMTErKworKwlsZC51YglyOSwgcjEyKysKKysJY3AudwlyMTAsIDAKKysJcmV0ZXEJcjkKKysJc3ViCXI5LCByMTAKKysJYnJlcQkwYgorKwlyZXQJcjkKKysjZW5kaWYKKysjZWxzZQorKzA6CQorKwlsZC53CXIxMCwgcjEyKysKKysJbGQudwlyOSwgcjExKysKKysJdG5ieglyMTAKKysJYnJlcQkxZgorKwljcC53CXIxMCwgcjkKKysJYnJlcQkwYgorKwkKKysxOgorKwliZmV4dHUJcjEyLCByMTAsIDI0LCA4CisrCWJmZXh0dQlyMTEsIHI5LCAyNCwgOAorKwlyZXRlcQlyMTIKKysJc3ViCXIxMiwgcjExCisrCXJldG5lCXIxMgorKwkJCisrCWJmZXh0dQlyMTIsIHIxMCwgMTYsIDgKKysJYmZleHR1CXIxMSwgcjksIDE2LCA4CisrCXJldGVxCXIxMgorKwlzdWIJcjEyLCByMTEKKysJcmV0bmUJcjEyCisrCisrCWJmZXh0dQlyMTIsIHIxMCwgOCwgOAorKwliZmV4dHUJcjExLCByOSwgOCwgOAorKwlyZXRlcQlyMTIKKysJc3ViCXIxMiwgcjExCisrCXJldG5lCXIxMgorKworKwljYXN0dS5iCXIxMAorKwljYXN0dS5iCXI5CisrCXN1YglyMTAsIHI5CisrCXJldAlyMTAJCisrI2VuZGlmCQorZGlmZiAtTmF1ciBuZXdsaWItMS4xNy4wL25ld2xpYi9saWJjL21hY2hpbmUvYXZyMzIvc3RybmNweS5TIG5ld2xpYi0xLjE3LjAtbmV3L25ld2xpYi9saWJjL21hY2hpbmUvYXZyMzIvc3RybmNweS5TCistLS0gbmV3bGliLTEuMTcuMC9uZXdsaWIvbGliYy9tYWNoaW5lL2F2cjMyL3N0cm5jcHkuUwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIG5ld2xpYi0xLjE3LjAtbmV3L25ld2xpYi9saWJjL21hY2hpbmUvYXZyMzIvc3RybmNweS5TCTIwMDktMDUtMjIgMDk6NTc6NTAuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDM5IEBACisrCS5hbGlnbgkyCisrCS5nbG9iYWwgc3RybmNweQorKworK3N0cm5jcHkgOgkKKysjaWZkZWYgX19BVlIzMl9VQ19fCQorKwltb3YJcjgsIDAKKyswOgkKKysJY3AudwlyMTAsIHI4CisrCXJldGVxCXIxMgorKwlsZC51YglyOSwgcjExW3I4XQorKwlzdC5iCXIxMltyOF0sIHI5CisrCXN1YglyOCwgLTEKKysJY3AudwlyOSwgMAorKwlicm5lCTBiCisrCisrMToJCisrCWNwLncJcjEwLCByOAorKwlyZXRlcQlyMTIKKysJc3QuYglyMTJbcjhdLCByOQorKwlzdWIJcjgsIC0xCisrCXJqbXAJMWIKKysjZWxzZQorKwltb3YJcjgsIHIxMgorKzA6CQorKwlzdWIJcjEwLCAxCisrCWxkLnViCXI5LCByMTErKworKwlyZXRtaQlyMTIKKysJc3QuYglyOCsrLCByOQorKwljcC53CXI5LCAwCisrCWJybmUJMGIKKysKKysxOgkKKysJc3ViCXIxMCwgMQorKwlyZXRtaQlyMTIKKysJc3QuYglyOCsrLCByOQorKwlyam1wCTFiCisrCQorKwkKKysjZW5kaWYJCitkaWZmIC1OYXVyIG5ld2xpYi0xLjE3LjAvbmV3bGliL2xpYmMvbWFjaGluZS9jb25maWd1cmUgbmV3bGliLTEuMTcuMC1uZXcvbmV3bGliL2xpYmMvbWFjaGluZS9jb25maWd1cmUKKy0tLSBuZXdsaWItMS4xNy4wL25ld2xpYi9saWJjL21hY2hpbmUvY29uZmlndXJlCTIwMDgtMTItMjIgMjA6NDU6NDEuMDAwMDAwMDAwICswMTAwCisrKysgbmV3bGliLTEuMTcuMC1uZXcvbmV3bGliL2xpYmMvbWFjaGluZS9jb25maWd1cmUJMjAwOS0wNS0yMiAwOTo1Nzo1MC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xLDI1ICsxLDU0IEBACisgIyEgL2Jpbi9zaAorICMgR3Vlc3MgdmFsdWVzIGZvciBzeXN0ZW0tZGVwZW5kZW50IHZhcmlhYmxlcyBhbmQgY3JlYXRlIE1ha2VmaWxlcy4KKy0jIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OSBmb3IgbmV3bGliIDEuMTcuMC4KKysjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MSBmb3IgbmV3bGliIDEuMTcuMC4KKyAjCistIyBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisrIyAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICMgVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKyAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyAjIyBNNHNoIEluaXRpYWxpemF0aW9uLiAgIyMKKyAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyAKKy0jIEJlIEJvdXJuZSBjb21wYXRpYmxlCisrIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCisrRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgZW11bGF0ZSBzaAorICAgTlVMTENNRD06CisgICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCistZWxpZiB0ZXN0IC1uICIke0JBU0hfVkVSU0lPTitzZXR9IiAmJiAoc2V0IC1vIHBvc2l4KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKy0gIHNldCAtbyBwb3NpeAorKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKytlbHNlCisrICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4KKysgICpwb3NpeCopIHNldCAtbyBwb3NpeCA7OworK2VzYWMKKysKKytmaQorKworKworKworKworKyMgUEFUSCBuZWVkcyBDUgorKyMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KKythc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKKythc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKKythc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKKythc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCisrYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCisrCisrIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCisraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKysgIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKysgIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKKysgIGNobW9kICt4IGNvbmYkJC5zaAorKyAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisrICBlbHNlCisrICAgIFBBVEhfU0VQQVJBVE9SPToKKysgIGZpCisrICBybSAtZiBjb25mJCQuc2gKKyBmaQorLURVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKKyAKKyAjIFN1cHBvcnQgdW5zZXQgd2hlbiBwb3NzaWJsZS4KKyBpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KK0BAIC0yOSw4ICs1OCw0MyBAQAorIGZpCisgCisgCisrIyBJRlMKKysjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworKyMgdGhlcmUgdG8gcHJldmVudCBlZGl0b3JzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgc3BhY2UtdGFiLgorKyMgKElmIF9BU19QQVRIX1dBTEsgd2VyZSBjYWxsZWQgd2l0aCBJRlMgdW5zZXQsIGl0IHdvdWxkIGRpc2FibGUgd29yZAorKyMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKKythc19ubD0nCisrJworK0lGUz0iICIiCSRhc19ubCIKKysKKysjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgorK2Nhc2UgJDAgaW4KKysgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKysgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworK2RvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrICAgICA7OworK2VzYWMKKysjIFdlIGRpZCBub3QgZmluZCBvdXJzZWx2ZXMsIG1vc3QgcHJvYmFibHkgd2Ugd2VyZSBydW4gYXMgYHNoIENPTU1BTkQnCisrIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCisraWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgorKyAgYXNfbXlzZWxmPSQwCisrZmkKKytpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCisrICBlY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCisrICB7IChleGl0IDEpOyBleGl0IDE7IH0KKytmaQorKworICMgV29yayBhcm91bmQgYnVncyBpbiBwcmUtMy4wIFVXSU4ga3NoLgorLSRhc191bnNldCBFTlYgTUFJTCBNQUlMUEFUSAorK2ZvciBhc192YXIgaW4gRU5WIE1BSUwgTUFJTFBBVEgKKytkbyAoJGFzX3Vuc2V0ICRhc192YXIpID4vZGV2L251bGwgMj4mMSAmJiAkYXNfdW5zZXQgJGFzX3ZhcgorK2RvbmUKKyBQUzE9JyQgJworIFBTMj0nPiAnCisgUFM0PScrICcKK0BAIC00NCwxOCArMTA4LDE5IEBACisgICBpZiAoc2V0ICt4OyB0ZXN0IC16ICJgKGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcikgMj4mMWAiKTsgdGhlbgorICAgICBldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIKKyAgIGVsc2UKKy0gICAgJGFzX3Vuc2V0ICRhc192YXIKKysgICAgKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKKyAgIGZpCisgZG9uZQorIAorICMgUmVxdWlyZWQgdG8gdXNlIGJhc2VuYW1lLgorLWlmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisraWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKKysgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorICAgYXNfZXhwcj1leHByCisgZWxzZQorICAgYXNfZXhwcj1mYWxzZQorIGZpCisgCistaWYgKGJhc2VuYW1lIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC8gMj4mMWAiID0gIlgvIjsgdGhlbgorK2lmIChiYXNlbmFtZSAtLSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAtLSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KKyAgIGFzX2Jhc2VuYW1lPWJhc2VuYW1lCisgZWxzZQorICAgYXNfYmFzZW5hbWU9ZmFsc2UKK0BAIC02MywxNTcgKzEyOCwzODggQEAKKyAKKyAKKyAjIE5hbWUgb2YgdGhlIGV4ZWN1dGFibGUuCistYXNfbWU9YCRhc19iYXNlbmFtZSAiJDAiIHx8CisrYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8CisgJGFzX2V4cHIgWC8iJDAiIDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwKKyAJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCistCSBYIiQwIiA6ICdYXCgvXCkkJyBcfCBcCistCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKysJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorIGVjaG8gWC8iJDAiIHwKKy0gICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97IHMvL1wxLzsgcTsgfQorLSAgCSAgL15YXC9cKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKy0gIAkgIC9eWFwvXChcL1wpLioveyBzLy9cMS87IHE7IH0KKy0gIAkgIHMvLiovLi87IHEnYAorKyAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcL1woXC9cL1wpJC97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXC9cKFwvXCkuKi97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgcy8uKi8uLzsgcSdgCisgCisrIyBDRFBBVEguCisrJGFzX3Vuc2V0IENEUEFUSAorIAorLSMgUEFUSCBuZWVkcyBDUiwgYW5kIExJTkVOTyBuZWVkcyBDUiBhbmQgUEFUSC4KKy0jIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCistYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCistYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCistYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCistYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JworLWFzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworIAorLSMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgorLWlmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCistICBlY2hvICIjISAvYmluL3NoIiA+Y29uZiQkLnNoCistICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCistICBjaG1vZCAreCBjb25mJCQuc2gKKy0gIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5zaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICAgIFBBVEhfU0VQQVJBVE9SPSc7JworLSAgZWxzZQorLSAgICBQQVRIX1NFUEFSQVRPUj06CistICBmaQorLSAgcm0gLWYgY29uZiQkLnNoCisraWYgdGVzdCAieCRDT05GSUdfU0hFTEwiID0geDsgdGhlbgorKyAgaWYgKGV2YWwgIjoiKSAyPi9kZXYvbnVsbDsgdGhlbgorKyAgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKKytlbHNlCisrICBhc19oYXZlX3JlcXVpcmVkPW5vCisgZmkKKyAKKysgIGlmIHRlc3QgJGFzX2hhdmVfcmVxdWlyZWQgPSB5ZXMgJiYgCSAoZXZhbCAiOgorKyhhc19mdW5jX3JldHVybiAoKSB7CisrICAoZXhpdCBcJDEpCisrfQorK2FzX2Z1bmNfc3VjY2VzcyAoKSB7CisrICBhc19mdW5jX3JldHVybiAwCisrfQorK2FzX2Z1bmNfZmFpbHVyZSAoKSB7CisrICBhc19mdW5jX3JldHVybiAxCisrfQorK2FzX2Z1bmNfcmV0X3N1Y2Nlc3MgKCkgeworKyAgcmV0dXJuIDAKKyt9CisrYXNfZnVuY19yZXRfZmFpbHVyZSAoKSB7CisrICByZXR1cm4gMQorK30KKyAKKy0gIGFzX2xpbmVub18xPSRMSU5FTk8KKy0gIGFzX2xpbmVub18yPSRMSU5FTk8KKy0gIGFzX2xpbmVub18zPWAoZXhwciAkYXNfbGluZW5vXzEgKyAxKSAyPi9kZXYvbnVsbGAKKy0gIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgorLSAgdGVzdCAieCRhc19saW5lbm9fMyIgID0gIngkYXNfbGluZW5vXzIiICB8fCB7CistICAjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBwYXRoIGF0IGFsbAorLSAgIyByZWxhdGl2ZSBvciBub3QuCistICBjYXNlICQwIGluCistICAgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKy0gICAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorLWZvciBhc19kaXIgaW4gJFBBVEgKKy1kbworLSAgSUZTPSRhc19zYXZlX0lGUworLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCistZG9uZQorK2V4aXRjb2RlPTAKKytpZiBhc19mdW5jX3N1Y2Nlc3M7IHRoZW4KKysgIDoKKytlbHNlCisrICBleGl0Y29kZT0xCisrICBlY2hvIGFzX2Z1bmNfc3VjY2VzcyBmYWlsZWQuCisrZmkKKyAKKy0gICAgICAgOzsKKy0gIGVzYWMKKy0gICMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKy0gICMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBwYXRoLgorLSAgaWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgorLSAgICBhc19teXNlbGY9JDAKKy0gIGZpCistICBpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCistICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIHBhdGgiID4mMgorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorLSAgZmkKKy0gIGNhc2UgJENPTkZJR19TSEVMTCBpbgorLSAgJycpCisraWYgYXNfZnVuY19mYWlsdXJlOyB0aGVuCisrICBleGl0Y29kZT0xCisrICBlY2hvIGFzX2Z1bmNfZmFpbHVyZSBzdWNjZWVkZWQuCisrZmkKKysKKytpZiBhc19mdW5jX3JldF9zdWNjZXNzOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX3JldF9zdWNjZXNzIGZhaWxlZC4KKytmaQorKworK2lmIGFzX2Z1bmNfcmV0X2ZhaWx1cmU7IHRoZW4KKysgIGV4aXRjb2RlPTEKKysgIGVjaG8gYXNfZnVuY19yZXRfZmFpbHVyZSBzdWNjZWVkZWQuCisrZmkKKysKKytpZiAoIHNldCB4OyBhc19mdW5jX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCisrZmkKKysKKyt0ZXN0IFwkZXhpdGNvZGUgPSAwKSB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKysKKysoCisrICBhc19saW5lbm9fMT1cJExJTkVOTworKyAgYXNfbGluZW5vXzI9XCRMSU5FTk8KKysgIHRlc3QgXCJ4XCRhc19saW5lbm9fMVwiICE9IFwieFwkYXNfbGluZW5vXzJcIiAmJgorKyAgdGVzdCBcInhcYGV4cHIgXCRhc19saW5lbm9fMSArIDFcYFwiID0gXCJ4XCRhc19saW5lbm9fMlwiKSB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKysiKSAyPiAvZGV2L251bGw7IHRoZW4KKysgIDoKKytlbHNlCisrICBhc19jYW5kaWRhdGVfc2hlbGxzPQorICAgICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgZm9yIGFzX2RpciBpbiAvYmluJFBBVEhfU0VQQVJBVE9SL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSAorIGRvCisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorLSAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbworLQkgY2FzZSAkYXNfZGlyIGluCisrICBjYXNlICRhc19kaXIgaW4KKyAJIC8qKQorLQkgICBpZiAoIiRhc19kaXIvJGFzX2Jhc2UiIC1jICcKKysJICAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbworKwkgICAgIGFzX2NhbmRpZGF0ZV9zaGVsbHM9IiRhc19jYW5kaWRhdGVfc2hlbGxzICRhc19kaXIvJGFzX2Jhc2UiCisrCSAgIGRvbmU7OworKyAgICAgICBlc2FjCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKysKKysgICAgICBmb3IgYXNfc2hlbGwgaW4gJGFzX2NhbmRpZGF0ZV9zaGVsbHMgJFNIRUxMOyBkbworKwkgIyBUcnkgb25seSBzaGVsbHMgdGhhdCBleGlzdCwgdG8gc2F2ZSBzZXZlcmFsIGZvcmtzLgorKwkgaWYgeyB0ZXN0IC1mICIkYXNfc2hlbGwiIHx8IHRlc3QgLWYgIiRhc19zaGVsbC5leGUiOyB9ICYmCisrCQl7ICgiJGFzX3NoZWxsIikgMj4gL2Rldi9udWxsIDw8XF9BU0VPRgorK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgZW11bGF0ZSBzaAorKyAgTlVMTENNRD06CisrICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisrICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorKyAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCisrICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorK2Vsc2UKKysgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbgorKyAgKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7CisrZXNhYworKworK2ZpCisrCisrCisrOgorK19BU0VPRgorK307IHRoZW4KKysgIENPTkZJR19TSEVMTD0kYXNfc2hlbGwKKysJICAgICAgIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCisrCSAgICAgICBpZiB7ICIkYXNfc2hlbGwiIDI+IC9kZXYvbnVsbCA8PFxfQVNFT0YKKytpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgIGVtdWxhdGUgc2gKKysgIE5VTExDTUQ9OgorKyAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKysgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKytlbHNlCisrICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4KKysgICpwb3NpeCopIHNldCAtbyBwb3NpeCA7OworK2VzYWMKKysKKytmaQorKworKworKzoKKysoYXNfZnVuY19yZXR1cm4gKCkgeworKyAgKGV4aXQgJDEpCisrfQorK2FzX2Z1bmNfc3VjY2VzcyAoKSB7CisrICBhc19mdW5jX3JldHVybiAwCisrfQorK2FzX2Z1bmNfZmFpbHVyZSAoKSB7CisrICBhc19mdW5jX3JldHVybiAxCisrfQorK2FzX2Z1bmNfcmV0X3N1Y2Nlc3MgKCkgeworKyAgcmV0dXJuIDAKKyt9CisrYXNfZnVuY19yZXRfZmFpbHVyZSAoKSB7CisrICByZXR1cm4gMQorK30KKysKKytleGl0Y29kZT0wCisraWYgYXNfZnVuY19zdWNjZXNzOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX3N1Y2Nlc3MgZmFpbGVkLgorK2ZpCisrCisraWYgYXNfZnVuY19mYWlsdXJlOyB0aGVuCisrICBleGl0Y29kZT0xCisrICBlY2hvIGFzX2Z1bmNfZmFpbHVyZSBzdWNjZWVkZWQuCisrZmkKKysKKytpZiBhc19mdW5jX3JldF9zdWNjZXNzOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX3JldF9zdWNjZXNzIGZhaWxlZC4KKytmaQorKworK2lmIGFzX2Z1bmNfcmV0X2ZhaWx1cmU7IHRoZW4KKysgIGV4aXRjb2RlPTEKKysgIGVjaG8gYXNfZnVuY19yZXRfZmFpbHVyZSBzdWNjZWVkZWQuCisrZmkKKysKKytpZiAoIHNldCB4OyBhc19mdW5jX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gIiQxIiApOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCisrZmkKKysKKyt0ZXN0ICRleGl0Y29kZSA9IDApIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorKworKygKKyAgIGFzX2xpbmVub18xPSRMSU5FTk8KKyAgIGFzX2xpbmVub18yPSRMSU5FTk8KKy0gIGFzX2xpbmVub18zPWAoZXhwciAkYXNfbGluZW5vXzEgKyAxKSAyPi9kZXYvbnVsbGAKKyAgIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgorLSAgdGVzdCAieCRhc19saW5lbm9fMyIgID0gIngkYXNfbGluZW5vXzIiICcpIDI+L2Rldi9udWxsOyB0aGVuCistCSAgICAgJGFzX3Vuc2V0IEJBU0hfRU5WIHx8IHRlc3QgIiR7QkFTSF9FTlYrc2V0fSIgIT0gc2V0IHx8IHsgQkFTSF9FTlY9OyBleHBvcnQgQkFTSF9FTlY7IH0KKy0JICAgICAkYXNfdW5zZXQgRU5WIHx8IHRlc3QgIiR7RU5WK3NldH0iICE9IHNldCB8fCB7IEVOVj07IGV4cG9ydCBFTlY7IH0KKy0JICAgICBDT05GSUdfU0hFTEw9JGFzX2Rpci8kYXNfYmFzZQorLQkgICAgIGV4cG9ydCBDT05GSUdfU0hFTEwKKy0JICAgICBleGVjICIkQ09ORklHX1NIRUxMIiAiJDAiICR7MSsiJEAifQorLQkgICBmaTs7CistCSBlc2FjCistICAgICAgIGRvbmUKKy1kb25lCistOzsKKy0gIGVzYWMKKysgIHRlc3QgInhgZXhwciAkYXNfbGluZW5vXzEgKyAxYCIgPSAieCRhc19saW5lbm9fMiIpIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorKworK19BU0VPRgorK307IHRoZW4KKysgIGJyZWFrCisrZmkKKysKKytmaQorKworKyAgICAgIGRvbmUKKysKKysgICAgICBpZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgIT0geDsgdGhlbgorKyAgZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYKKysgICAgICAgIGRvICgkYXNfdW5zZXQgJGFzX3ZhcikgPi9kZXYvbnVsbCAyPiYxICYmICRhc191bnNldCAkYXNfdmFyCisrICAgICAgICBkb25lCisrICAgICAgICBleHBvcnQgQ09ORklHX1NIRUxMCisrICAgICAgICBleGVjICIkQ09ORklHX1NIRUxMIiAiJGFzX215c2VsZiIgJHsxKyIkQCJ9CisrZmkKKysKKysKKysgICAgaWYgdGVzdCAkYXNfaGF2ZV9yZXF1aXJlZCA9IG5vOyB0aGVuCisrICBlY2hvIFRoaXMgc2NyaXB0IHJlcXVpcmVzIGEgc2hlbGwgbW9yZSBtb2Rlcm4gdGhhbiBhbGwgdGhlCisrICAgICAgZWNobyBzaGVsbHMgdGhhdCBJIGZvdW5kIG9uIHlvdXIgc3lzdGVtLiAgUGxlYXNlIGluc3RhbGwgYQorKyAgICAgIGVjaG8gbW9kZXJuIHNoZWxsLCBvciBtYW51YWxseSBydW4gdGhlIHNjcmlwdCB1bmRlciBzdWNoIGEKKysgICAgICBlY2hvIHNoZWxsIGlmIHlvdSBkbyBoYXZlIG9uZS4KKysgICAgICB7IChleGl0IDEpOyBleGl0IDE7IH0KKytmaQorKworKworK2ZpCisrCisrZmkKKysKKysKKysKKysoZXZhbCAiYXNfZnVuY19yZXR1cm4gKCkgeworKyAgKGV4aXQgXCQxKQorK30KKythc19mdW5jX3N1Y2Nlc3MgKCkgeworKyAgYXNfZnVuY19yZXR1cm4gMAorK30KKythc19mdW5jX2ZhaWx1cmUgKCkgeworKyAgYXNfZnVuY19yZXR1cm4gMQorK30KKythc19mdW5jX3JldF9zdWNjZXNzICgpIHsKKysgIHJldHVybiAwCisrfQorK2FzX2Z1bmNfcmV0X2ZhaWx1cmUgKCkgeworKyAgcmV0dXJuIDEKKyt9CisrCisrZXhpdGNvZGU9MAorK2lmIGFzX2Z1bmNfc3VjY2VzczsgdGhlbgorKyAgOgorK2Vsc2UKKysgIGV4aXRjb2RlPTEKKysgIGVjaG8gYXNfZnVuY19zdWNjZXNzIGZhaWxlZC4KKytmaQorKworK2lmIGFzX2Z1bmNfZmFpbHVyZTsgdGhlbgorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX2ZhaWx1cmUgc3VjY2VlZGVkLgorK2ZpCisrCisraWYgYXNfZnVuY19yZXRfc3VjY2VzczsgdGhlbgorKyAgOgorK2Vsc2UKKysgIGV4aXRjb2RlPTEKKysgIGVjaG8gYXNfZnVuY19yZXRfc3VjY2VzcyBmYWlsZWQuCisrZmkKKysKKytpZiBhc19mdW5jX3JldF9mYWlsdXJlOyB0aGVuCisrICBleGl0Y29kZT0xCisrICBlY2hvIGFzX2Z1bmNfcmV0X2ZhaWx1cmUgc3VjY2VlZGVkLgorK2ZpCisrCisraWYgKCBzZXQgeDsgYXNfZnVuY19yZXRfc3VjY2VzcyB5ICYmIHRlc3QgeCA9IFwiXCQxXCIgKTsgdGhlbgorKyAgOgorK2Vsc2UKKysgIGV4aXRjb2RlPTEKKysgIGVjaG8gcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgbm90IHNhdmVkLgorK2ZpCisrCisrdGVzdCBcJGV4aXRjb2RlID0gMCIpIHx8IHsKKysgIGVjaG8gTm8gc2hlbGwgZm91bmQgdGhhdCBzdXBwb3J0cyBzaGVsbCBmdW5jdGlvbnMuCisrICBlY2hvIFBsZWFzZSB0ZWxsIGF1dG9jb25mQGdudS5vcmcgYWJvdXQgeW91ciBzeXN0ZW0sCisrICBlY2hvIGluY2x1ZGluZyBhbnkgZXJyb3IgcG9zc2libHkgb3V0cHV0IGJlZm9yZSB0aGlzCisrICBlY2hvIG1lc3NhZ2UKKyt9CisrCisrCisrCisrICBhc19saW5lbm9fMT0kTElORU5PCisrICBhc19saW5lbm9fMj0kTElORU5PCisrICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKKysgIHRlc3QgInhgZXhwciAkYXNfbGluZW5vXzEgKyAxYCIgPSAieCRhc19saW5lbm9fMiIgfHwgeworIAorICAgIyBDcmVhdGUgJGFzX21lLmxpbmVubyBhcyBhIGNvcHkgb2YgJGFzX215c2VsZiwgYnV0IHdpdGggJExJTkVOTworICAgIyB1bmlmb3JtbHkgcmVwbGFjZWQgYnkgdGhlIGxpbmUgbnVtYmVyLiAgVGhlIGZpcnN0ICdzZWQnIGluc2VydHMgYQorLSAgIyBsaW5lLW51bWJlciBsaW5lIGJlZm9yZSBlYWNoIGxpbmU7IHRoZSBzZWNvbmQgJ3NlZCcgZG9lcyB0aGUgcmVhbAorLSAgIyB3b3JrLiAgVGhlIHNlY29uZCBzY3JpcHQgdXNlcyAnTicgdG8gcGFpciBlYWNoIGxpbmUtbnVtYmVyIGxpbmUKKy0gICMgd2l0aCB0aGUgbnVtYmVyZWQgbGluZSwgYW5kIGFwcGVuZHMgdHJhaWxpbmcgJy0nIGR1cmluZworLSAgIyBzdWJzdGl0dXRpb24gc28gdGhhdCAkTElORU5PIGlzIG5vdCBhIHNwZWNpYWwgY2FzZSBhdCBsaW5lIGVuZC4KKysgICMgbGluZS1udW1iZXIgbGluZSBhZnRlciBlYWNoIGxpbmUgdXNpbmcgJExJTkVOTzsgdGhlIHNlY29uZCAnc2VkJworKyAgIyBkb2VzIHRoZSByZWFsIHdvcmsuICBUaGUgc2Vjb25kIHNjcmlwdCB1c2VzICdOJyB0byBwYWlyIGVhY2gKKysgICMgbGluZS1udW1iZXIgbGluZSB3aXRoIHRoZSBsaW5lIGNvbnRhaW5pbmcgJExJTkVOTywgYW5kIGFwcGVuZHMKKysgICMgdHJhaWxpbmcgJy0nIGR1cmluZyBzdWJzdGl0dXRpb24gc28gdGhhdCAkTElORU5PIGlzIG5vdCBhIHNwZWNpYWwKKysgICMgY2FzZSBhdCBsaW5lIGVuZC4KKyAgICMgKFJhamEgUiBIYXJpbmF0aCBzdWdnZXN0ZWQgc2VkICc9JywgYW5kIFBhdWwgRWdnZXJ0IHdyb3RlIHRoZQorLSAgIyBzZWNvbmQgJ3NlZCcgc2NyaXB0LiAgQmxhbWUgTGVlIEUuIE1jTWFob24gZm9yIHNlZCdzIHN5bnRheC4gIDotKQorLSAgc2VkICc9JyA8JGFzX215c2VsZiB8CisrICAjIHNjcmlwdHMgd2l0aCBvcHRpbWl6YXRpb24gaGVscCBmcm9tIFBhb2xvIEJvbnppbmkuICBCbGFtZSBMZWUKKysgICMgRS4gTWNNYWhvbiAoMTkzMS0xOTg5KSBmb3Igc2VkJ3Mgc3ludGF4LiAgOi0pCisrICBzZWQgLW4gJworKyAgICBwCisrICAgIC9bJF1MSU5FTk8vPQorKyAgJyA8JGFzX215c2VsZiB8CisgICAgIHNlZCAnCisrICAgICAgcy9bJF1MSU5FTk8uKi8mLS8KKysgICAgICB0IGxpbmVubworKyAgICAgIGIKKysgICAgICA6bGluZW5vCisgICAgICAgTgorLSAgICAgIHMsJCwtLAorLSAgICAgIDogbG9vcAorLSAgICAgIHMsXlwoWyckYXNfY3JfZGlnaXRzJ10qXClcKC4qXClbJF1MSU5FTk9cKFteJyRhc19jcl9hbG51bSdfXVwpLFwxXDJcMVwzLAorKyAgICAgIDpsb29wCisrICAgICAgcy9bJF1MSU5FTk9cKFteJyRhc19jcl9hbG51bSdfXS4qXG5cKVwoLipcKS9cMlwxXDIvCisgICAgICAgdCBsb29wCistICAgICAgcywtJCwsCistICAgICAgcyxeWyckYXNfY3JfZGlnaXRzJ10qXG4sLAorKyAgICAgIHMvLVxuLiovLworICAgICAnID4kYXNfbWUubGluZW5vICYmCistICBjaG1vZCAreCAkYXNfbWUubGluZW5vIHx8CisrICBjaG1vZCAreCAiJGFzX21lLmxpbmVubyIgfHwKKyAgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyCisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgCisgICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcworICAgIyAodGhlIGRpcm5hbWUgb2YgJFswXSBpcyBub3QgdGhlIHBsYWNlIHdoZXJlIHdlIG1pZ2h0IGZpbmQgdGhlCistICAjIG9yaWdpbmFsIGFuZCBzbyBvbi4gIEF1dG9jb25mIGlzIGVzcGVjaWFsbHkgc2Vuc2libGUgdG8gdGhpcykuCistICAuIC4vJGFzX21lLmxpbmVubworKyAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpdGl2ZSB0byB0aGlzKS4KKysgIC4gIi4vJGFzX21lLmxpbmVubyIKKyAgICMgRXhpdCBzdGF0dXMgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kLgorICAgZXhpdAorIH0KKyAKKyAKKy1jYXNlIGBlY2hvICJ0ZXN0aW5nXGMiOyBlY2hvIDEsMiwzYCxgZWNobyAtbiB0ZXN0aW5nOyBlY2hvIDEsMiwzYCBpbgorLSAgKmMqLC1uKikgRUNIT19OPSBFQ0hPX0M9JworLScgRUNIT19UPScJJyA7OworLSAgKmMqLCogICkgRUNIT19OPS1uIEVDSE9fQz0gRUNIT19UPSA7OworLSAgKikgICAgICAgRUNIT19OPSBFQ0hPX0M9J1xjJyBFQ0hPX1Q9IDs7CisraWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBhc19kaXJuYW1lPWRpcm5hbWUKKytlbHNlCisrICBhc19kaXJuYW1lPWZhbHNlCisrZmkKKysKKytFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQorK2Nhc2UgYGVjaG8gLW4geGAgaW4KKystbiopCisrICBjYXNlIGBlY2hvICd4XGMnYCBpbgorKyAgKmMqKSBFQ0hPX1Q9JwknOzsJIyBFQ0hPX1QgaXMgc2luZ2xlIHRhYiBjaGFyYWN0ZXIuCisrICAqKSAgIEVDSE9fQz0nXGMnOzsKKysgIGVzYWM7OworKyopCisrICBFQ0hPX049Jy1uJzs7CisgZXNhYworIAorLWlmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisraWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKKysgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorICAgYXNfZXhwcj1leHByCisgZWxzZQorICAgYXNfZXhwcj1mYWxzZQorIGZpCisgCisgcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKKytpZiB0ZXN0IC1kIGNvbmYkJC5kaXI7IHRoZW4KKysgIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKKytlbHNlCisrICBybSAtZiBjb25mJCQuZGlyCisrICBta2RpciBjb25mJCQuZGlyCisrZmkKKyBlY2hvID5jb25mJCQuZmlsZQorIGlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorLSAgIyBXZSBjb3VsZCBqdXN0IGNoZWNrIGZvciBESkdQUDsgYnV0IHRoaXMgdGVzdCBhKSB3b3JrcyBiKSBpcyBtb3JlIGdlbmVyaWMKKy0gICMgYW5kIGMpIHdpbGwgcmVtYWluIHZhbGlkIG9uY2UgREpHUFAgc3VwcG9ydHMgc3ltbGlua3MgKERKR1BQIDIuMDQpLgorLSAgaWYgdGVzdCAtZiBjb25mJCQuZXhlOyB0aGVuCistICAgICMgRG9uJ3QgdXNlIGxuIGF0IGFsbDsgd2UgZG9uJ3QgaGF2ZSBhbnkgbGlua3MKKysgIGFzX2xuX3M9J2xuIC1zJworKyAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKysgICMgMSkgT24gTVNZUywgYm90aCBgbG4gLXMgZmlsZSBkaXInIGFuZCBgbG4gZmlsZSBkaXInIGZhaWwuCisrICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KKysgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcCcuCisrICBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQuZGlyIDI+L2Rldi9udWxsICYmIHRlc3QgISAtZiBjb25mJCQuZXhlIHx8CisgICAgIGFzX2xuX3M9J2NwIC1wJworLSAgZWxzZQorLSAgICBhc19sbl9zPSdsbiAtcycKKy0gIGZpCisgZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgIGFzX2xuX3M9bG4KKyBlbHNlCisgICBhc19sbl9zPSdjcCAtcCcKKyBmaQorLXJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCisrcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmRpci9jb25mJCQuZmlsZSBjb25mJCQuZmlsZQorK3JtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKyAKKyBpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCisgICBhc19ta2Rpcl9wPToKK0BAIC0yMjIsNyArNTE4LDI4IEBACisgICBhc19ta2Rpcl9wPWZhbHNlCisgZmkKKyAKKy1hc19leGVjdXRhYmxlX3A9InRlc3QgLWYiCisraWYgdGVzdCAteCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgYXNfdGVzdF94PSd0ZXN0IC14JworK2Vsc2UKKysgIGlmIGxzIC1kTCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICBhc19sc19MX29wdGlvbj1MCisrICBlbHNlCisrICAgIGFzX2xzX0xfb3B0aW9uPQorKyAgZmkKKysgIGFzX3Rlc3RfeD0nCisrICAgIGV2YWwgc2ggLWMgJ1wnJworKyAgICAgIGlmIHRlc3QgLWQgIiQxIjsgdGhlbgorKyAgICAgICAgdGVzdCAtZCAiJDEvLiI7CisrICAgICAgZWxzZQorKwljYXNlICQxIGluCisrICAgICAgICAtKilzZXQgIi4vJDEiOzsKKysJZXNhYzsKKysJY2FzZSBgbHMgLWxkJyRhc19sc19MX29wdGlvbicgIiQxIiAyPi9kZXYvbnVsbGAgaW4KKysJPz8/W3N4XSopOjs7KilmYWxzZTs7ZXNhYztmaQorKyAgICAnXCcnIHNoCisrICAnCisrZmkKKythc19leGVjdXRhYmxlX3A9JGFzX3Rlc3RfeAorIAorICMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KKyBhc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorQEAgLTIzMSwxNSArNTQ4LDYgQEAKKyBhc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorIAorIAorLSMgSUZTCistIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4KKy1hc19ubD0nCistJworLUlGUz0iIAkkYXNfbmwiCistCistIyBDRFBBVEguCistJGFzX3Vuc2V0IENEUEFUSAorLQorIAorIAorICMgQ2hlY2sgdGhhdCB3ZSBhcmUgcnVubmluZyB1bmRlciB0aGUgY29ycmVjdCBzaGVsbC4KK0BAIC0zOTAsMjkgKzY5OCwyNiBAQAorIAorIAorIAorK2V4ZWMgNzwmMCA8L2Rldi9udWxsIDY+JjEKKysKKyAjIE5hbWUgb2YgdGhlIGhvc3QuCisgIyBob3N0bmFtZSBvbiBzb21lIHN5c3RlbXMgKFNWUjMuMiwgTGludXgpIHJldHVybnMgYSBib2d1cyBleGl0IHN0YXR1cywKKyAjIHNvIHVuYW1lIGdldHMgcnVuIHRvby4KKyBhY19ob3N0bmFtZT1gKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKKyAKKy1leGVjIDY+JjEKKy0KKyAjCisgIyBJbml0aWFsaXphdGlvbnMuCisgIworIGFjX2RlZmF1bHRfcHJlZml4PS91c3IvbG9jYWwKKythY19jbGVhbl9maWxlcz0KKyBhY19jb25maWdfbGlib2JqX2Rpcj0uCisrTElCT0JKUz0KKyBjcm9zc19jb21waWxpbmc9bm8KKyBzdWJkaXJzPQorIE1GTEFHUz0KKyBNQUtFRkxBR1M9CisgU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KKyAKKy0jIE1heGltdW0gbnVtYmVyIG9mIGxpbmVzIHRvIHB1dCBpbiBhIHNoZWxsIGhlcmUgZG9jdW1lbnQuCistIyBUaGlzIHZhcmlhYmxlIHNlZW1zIG9ic29sZXRlLiAgSXQgc2hvdWxkIHByb2JhYmx5IGJlIHJlbW92ZWQsIGFuZAorLSMgb25seSBhY19tYXhfc2VkX2xpbmVzIHNob3VsZCBiZSB1c2VkLgorLTogJHthY19tYXhfaGVyZV9saW5lcz0zOH0KKy0KKyAjIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KKyBQQUNLQUdFX05BTUU9J25ld2xpYicKKyBQQUNLQUdFX1RBUk5BTUU9J25ld2xpYicKK0BAIC00MjQsODEgKzcyOSwyMjggQEAKKyAjIEZhY3RvcmluZyBkZWZhdWx0IGhlYWRlcnMgZm9yIG1vc3QgdGVzdHMuCisgYWNfaW5jbHVkZXNfZGVmYXVsdD0iXAorICNpbmNsdWRlIDxzdGRpby5oPgorLSNpZiBIQVZFX1NZU19UWVBFU19ICisrI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyAjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorICNlbmRpZgorLSNpZiBIQVZFX1NZU19TVEFUX0gKKysjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICisgIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNlbmRpZgorLSNpZiBTVERDX0hFQURFUlMKKysjaWZkZWYgU1REQ19IRUFERVJTCisgIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyAjIGluY2x1ZGUgPHN0ZGRlZi5oPgorICNlbHNlCistIyBpZiBIQVZFX1NURExJQl9ICisrIyBpZmRlZiBIQVZFX1NURExJQl9ICisgIyAgaW5jbHVkZSA8c3RkbGliLmg+CisgIyBlbmRpZgorICNlbmRpZgorLSNpZiBIQVZFX1NUUklOR19ICistIyBpZiAhU1REQ19IRUFERVJTICYmIEhBVkVfTUVNT1JZX0gKKysjaWZkZWYgSEFWRV9TVFJJTkdfSAorKyMgaWYgIWRlZmluZWQgU1REQ19IRUFERVJTICYmIGRlZmluZWQgSEFWRV9NRU1PUllfSAorICMgIGluY2x1ZGUgPG1lbW9yeS5oPgorICMgZW5kaWYKKyAjIGluY2x1ZGUgPHN0cmluZy5oPgorICNlbmRpZgorLSNpZiBIQVZFX1NUUklOR1NfSAorKyNpZmRlZiBIQVZFX1NUUklOR1NfSAorICMgaW5jbHVkZSA8c3RyaW5ncy5oPgorICNlbmRpZgorLSNpZiBIQVZFX0lOVFRZUEVTX0gKKysjaWZkZWYgSEFWRV9JTlRUWVBFU19ICisgIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgorLSNlbHNlCistIyBpZiBIQVZFX1NURElOVF9ICistIyAgaW5jbHVkZSA8c3RkaW50Lmg+CistIyBlbmRpZgorICNlbmRpZgorLSNpZiBIQVZFX1VOSVNURF9ICisrI2lmZGVmIEhBVkVfU1RESU5UX0gKKysjIGluY2x1ZGUgPHN0ZGludC5oPgorKyNlbmRpZgorKyNpZmRlZiBIQVZFX1VOSVNURF9ICisgIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyAjZW5kaWYiCisgCistYWNfc3ViZGlyc19hbGw9IiRhY19zdWJkaXJzX2FsbCBhMjlrIgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgYXJtIgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgYmZpbiIKKy1hY19zdWJkaXJzX2FsbD0iJGFjX3N1YmRpcnNfYWxsIGNyaXMiCistYWNfc3ViZGlyc19hbGw9IiRhY19zdWJkaXJzX2FsbCBjcngiCistYWNfc3ViZGlyc19hbGw9IiRhY19zdWJkaXJzX2FsbCBkMTB2IgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgZDMwdiIKKy1hY19zdWJkaXJzX2FsbD0iJGFjX3N1YmRpcnNfYWxsIGZyMzAiCistYWNfc3ViZGlyc19hbGw9IiRhY19zdWJkaXJzX2FsbCBmcnYiCistYWNfc3ViZGlyc19hbGw9IiRhY19zdWJkaXJzX2FsbCBoODMwMCIKKy1hY19zdWJkaXJzX2FsbD0iJGFjX3N1YmRpcnNfYWxsIGg4NTAwIgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgaHBwYSIKKy1hY19zdWJkaXJzX2FsbD0iJGFjX3N1YmRpcnNfYWxsIGkzODYiCistYWNfc3ViZGlyc19hbGw9IiRhY19zdWJkaXJzX2FsbCBpOTYwIgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgaXEyMDAwIgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgbG0zMiIKKy1hY19zdWJkaXJzX2FsbD0iJGFjX3N1YmRpcnNfYWxsIG0zMmMiCistYWNfc3ViZGlyc19hbGw9IiRhY19zdWJkaXJzX2FsbCBtMzJyIgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgbTY4aGMxMSIKKy1hY19zdWJkaXJzX2FsbD0iJGFjX3N1YmRpcnNfYWxsIG02OGsiCistYWNfc3ViZGlyc19hbGw9IiRhY19zdWJkaXJzX2FsbCBtODhrIgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgbWVwIgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgbWlwcyIKKy1hY19zdWJkaXJzX2FsbD0iJGFjX3N1YmRpcnNfYWxsIG1uMTAyMDAiCistYWNfc3ViZGlyc19hbGw9IiRhY19zdWJkaXJzX2FsbCBtbjEwMzAwIgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgbXQiCistYWNfc3ViZGlyc19hbGw9IiRhY19zdWJkaXJzX2FsbCBuZWN2NzAiCistYWNfc3ViZGlyc19hbGw9IiRhY19zdWJkaXJzX2FsbCBwb3dlcnBjIgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgc2giCistYWNfc3ViZGlyc19hbGw9IiRhY19zdWJkaXJzX2FsbCBzcGFyYyIKKy1hY19zdWJkaXJzX2FsbD0iJGFjX3N1YmRpcnNfYWxsIHNwdSIKKy1hY19zdWJkaXJzX2FsbD0iJGFjX3N1YmRpcnNfYWxsIHRpYzR4IgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgdGljODAiCistYWNfc3ViZGlyc19hbGw9IiRhY19zdWJkaXJzX2FsbCB2ODUwIgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgdzY1IgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgeDg2XzY0IgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgeHNjYWxlIgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgeHN0b3JteTE2IgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgejhrIgorLWFjX3N1YnN0X3ZhcnM9J1NIRUxMIFBBVEhfU0VQQVJBVE9SIFBBQ0tBR0VfTkFNRSBQQUNLQUdFX1RBUk5BTUUgUEFDS0FHRV9WRVJTSU9OIFBBQ0tBR0VfU1RSSU5HIFBBQ0tBR0VfQlVHUkVQT1JUIGV4ZWNfcHJlZml4IHByZWZpeCBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgbGliZGlyIGluY2x1ZGVkaXIgb2xkaW5jbHVkZWRpciBpbmZvZGlyIG1hbmRpciBidWlsZF9hbGlhcyBob3N0X2FsaWFzIHRhcmdldF9hbGlhcyBERUZTIEVDSE9fQyBFQ0hPX04gRUNIT19UIExJQlMgTUFZX1NVUFBMWV9TWVNDQUxMU19UUlVFIE1BWV9TVVBQTFlfU1lTQ0FMTFNfRkFMU0UgbmV3bGliX2Jhc2VkaXIgYnVpbGQgYnVpbGRfY3B1IGJ1aWxkX3ZlbmRvciBidWlsZF9vcyBob3N0IGhvc3RfY3B1IGhvc3RfdmVuZG9yIGhvc3Rfb3MgSU5TVEFMTF9QUk9HUkFNIElOU1RBTExfU0NSSVBUIElOU1RBTExfREFUQSBDWUdQQVRIX1cgUEFDS0FHRSBWRVJTSU9OIEFDTE9DQUwgQVVUT0NPTkYgQVVUT01BS0UgQVVUT0hFQURFUiBNQUtFSU5GTyBpbnN0YWxsX3NoIFNUUklQIGFjX2N0X1NUUklQIElOU1RBTExfU1RSSVBfUFJPR1JBTSBta2Rpcl9wIEFXSyBTRVRfTUFLRSBhbV9fbGVhZGluZ19kb3QgQU1UQVIgYW1fX3RhciBhbV9fdW50YXIgQ0MgREVQRElSIGFtX19pbmNsdWRlIGFtX19xdW90ZSBBTURFUF9UUlVFIEFNREVQX0ZBTFNFIEFNREVQQkFDS1NMQVNIIENDREVQTU9ERSBhbV9fZmFzdGRlcENDX1RSVUUgYW1fX2Zhc3RkZXBDQ19GQUxTRSBBUyBhY19jdF9BUyBBUiBhY19jdF9BUiBSQU5MSUIgYWNfY3RfUkFOTElCIFJFQURFTEYgYWNfY3RfUkVBREVMRiBNQUlOVEFJTkVSX01PREVfVFJVRSBNQUlOVEFJTkVSX01PREVfRkFMU0UgTUFJTlQgQ0NBUyBDQ0FTRkxBR1MgTkVXTElCX0NGTEFHUyBMREZMQUdTIEVMSVhfTEVWRUxfMF9UUlVFIEVMSVhfTEVWRUxfMF9GQUxTRSBFTElYX0xFVkVMXzFfVFJVRSBFTElYX0xFVkVMXzFfRkFMU0UgRUxJWF9MRVZFTF8yX1RSVUUgRUxJWF9MRVZFTF8yX0ZBTFNFIEVMSVhfTEVWRUxfM19UUlVFIEVMSVhfTEVWRUxfM19GQUxTRSBFTElYX0xFVkVMXzRfVFJVRSBFTElYX0xFVkVMXzRfRkFMU0UgVVNFX0xJQlRPT0xfVFJVRSBVU0VfTElCVE9PTF9GQUxTRSBPQkpFWFQgb2V4dCBhZXh0IGxwZnggbGlibV9tYWNoaW5lX2RpciBtYWNoaW5lX2RpciBzeXNfZGlyIFNFRCBETExUT09MIGFjX2N0X0RMTFRPT0wgT0JKRFVNUCBhY19jdF9PQkpEVU1QIExJQlRPT0wgQ0ZMQUdTIENQUEZMQUdTIGFjX2N0X0NDIEVYRUVYVCBFR1JFUCBGR1JFUCBHUkVQIExEIERVTVBCSU4gYWNfY3RfRFVNUEJJTiBOTSBMTl9TIGx0X0VDSE8gRFNZTVVUSUwgYWNfY3RfRFNZTVVUSUwgTk1FRElUIGFjX2N0X05NRURJVCBMSVBPIGFjX2N0X0xJUE8gT1RPT0wgYWNfY3RfT1RPT0wgT1RPT0w2NCBhY19jdF9PVE9PTDY0IENQUCBzdWJkaXJzIEhBVkVfTUFDSElORV9ESVJfVFJVRSBIQVZFX01BQ0hJTkVfRElSX0ZBTFNFIExJQk9CSlMgTFRMSUJPQkpTJworK2FjX3N1YnN0X3ZhcnM9J1NIRUxMCisrUEFUSF9TRVBBUkFUT1IKKytQQUNLQUdFX05BTUUKKytQQUNLQUdFX1RBUk5BTUUKKytQQUNLQUdFX1ZFUlNJT04KKytQQUNLQUdFX1NUUklORworK1BBQ0tBR0VfQlVHUkVQT1JUCisrZXhlY19wcmVmaXgKKytwcmVmaXgKKytwcm9ncmFtX3RyYW5zZm9ybV9uYW1lCisrYmluZGlyCisrc2JpbmRpcgorK2xpYmV4ZWNkaXIKKytkYXRhcm9vdGRpcgorK2RhdGFkaXIKKytzeXNjb25mZGlyCisrc2hhcmVkc3RhdGVkaXIKKytsb2NhbHN0YXRlZGlyCisraW5jbHVkZWRpcgorK29sZGluY2x1ZGVkaXIKKytkb2NkaXIKKytpbmZvZGlyCisraHRtbGRpcgorK2R2aWRpcgorK3BkZmRpcgorK3BzZGlyCisrbGliZGlyCisrbG9jYWxlZGlyCisrbWFuZGlyCisrREVGUworK0VDSE9fQworK0VDSE9fTgorK0VDSE9fVAorK0xJQlMKKytidWlsZF9hbGlhcworK2hvc3RfYWxpYXMKKyt0YXJnZXRfYWxpYXMKKytNQVlfU1VQUExZX1NZU0NBTExTX1RSVUUKKytNQVlfU1VQUExZX1NZU0NBTExTX0ZBTFNFCisrbmV3bGliX2Jhc2VkaXIKKytidWlsZAorK2J1aWxkX2NwdQorK2J1aWxkX3ZlbmRvcgorK2J1aWxkX29zCisraG9zdAorK2hvc3RfY3B1CisraG9zdF92ZW5kb3IKKytob3N0X29zCisrSU5TVEFMTF9QUk9HUkFNCisrSU5TVEFMTF9TQ1JJUFQKKytJTlNUQUxMX0RBVEEKKytDWUdQQVRIX1cKKytQQUNLQUdFCisrVkVSU0lPTgorK0FDTE9DQUwKKytBVVRPQ09ORgorK0FVVE9NQUtFCisrQVVUT0hFQURFUgorK01BS0VJTkZPCisraW5zdGFsbF9zaAorK1NUUklQCisrSU5TVEFMTF9TVFJJUF9QUk9HUkFNCisrbWtkaXJfcAorK0FXSworK1NFVF9NQUtFCisrYW1fX2xlYWRpbmdfZG90CisrQU1UQVIKKythbV9fdGFyCisrYW1fX3VudGFyCisrQ0MKKytERVBESVIKKythbV9faW5jbHVkZQorK2FtX19xdW90ZQorK0FNREVQX1RSVUUKKytBTURFUF9GQUxTRQorK0FNREVQQkFDS1NMQVNICisrQ0NERVBNT0RFCisrYW1fX2Zhc3RkZXBDQ19UUlVFCisrYW1fX2Zhc3RkZXBDQ19GQUxTRQorK0FTCisrQVIKKytSQU5MSUIKKytSRUFERUxGCisrTUFJTlRBSU5FUl9NT0RFX1RSVUUKKytNQUlOVEFJTkVSX01PREVfRkFMU0UKKytNQUlOVAorK0NDQVMKKytDQ0FTRkxBR1MKKytORVdMSUJfQ0ZMQUdTCisrTERGTEFHUworK0VMSVhfTEVWRUxfMF9UUlVFCisrRUxJWF9MRVZFTF8wX0ZBTFNFCisrRUxJWF9MRVZFTF8xX1RSVUUKKytFTElYX0xFVkVMXzFfRkFMU0UKKytFTElYX0xFVkVMXzJfVFJVRQorK0VMSVhfTEVWRUxfMl9GQUxTRQorK0VMSVhfTEVWRUxfM19UUlVFCisrRUxJWF9MRVZFTF8zX0ZBTFNFCisrRUxJWF9MRVZFTF80X1RSVUUKKytFTElYX0xFVkVMXzRfRkFMU0UKKytVU0VfTElCVE9PTF9UUlVFCisrVVNFX0xJQlRPT0xfRkFMU0UKKytPQkpFWFQKKytvZXh0CisrYWV4dAorK2xwZngKKytsaWJtX21hY2hpbmVfZGlyCisrbWFjaGluZV9kaXIKKytzeXNfZGlyCisrU0VECisrRExMVE9PTAorK09CSkRVTVAKKytMSUJUT09MCisrQ0ZMQUdTCisrQ1BQRkxBR1MKKythY19jdF9DQworK0VYRUVYVAorK0dSRVAKKytFR1JFUAorK0ZHUkVQCisrTEQKKytEVU1QQklOCisrYWNfY3RfRFVNUEJJTgorK05NCisrTE5fUworK2x0X0VDSE8KKytEU1lNVVRJTAorK05NRURJVAorK0xJUE8KKytPVE9PTAorK09UT09MNjQKKytDUFAKKytzdWJkaXJzCisrSEFWRV9NQUNISU5FX0RJUl9UUlVFCisrSEFWRV9NQUNISU5FX0RJUl9GQUxTRQorK0xJQk9CSlMKKytMVExJQk9CSlMnCisgYWNfc3Vic3RfZmlsZXM9JycKKysgICAgICBhY19wcmVjaW91c192YXJzPSdidWlsZF9hbGlhcworK2hvc3RfYWxpYXMKKyt0YXJnZXRfYWxpYXMKKytDQ0FTCisrQ0NBU0ZMQUdTCisrQ0MKKytDRkxBR1MKKytMREZMQUdTCisrTElCUworK0NQUEZMQUdTCisrQ1BQJworK2FjX3N1YmRpcnNfYWxsPSdhMjlrCisrYXJtCisrYXZyMzIKKytiZmluCisrY3JpcworK2NyeAorK2QxMHYKKytkMzB2CisrZnIzMAorK2ZydgorK2g4MzAwCisraDg1MDAKKytocHBhCisraTM4NgorK2k5NjAKKytpcTIwMDAKKytsbTMyCisrbTMyYworK20zMnIKKyttNjhoYzExCisrbTY4aworK204OGsKKyttZXAKKyttaXBzCisrbW4xMDIwMAorK21uMTAzMDAKKyttdAorK25lY3Y3MAorK3Bvd2VycGMKKytzaAorK3NwYXJjCisrc3B1CisrdGljNHgKKyt0aWM4MAorK3Y4NTAKKyt3NjUKKyt4ODZfNjQKKyt4c2NhbGUKKyt4c3Rvcm15MTYKKyt6OGsnCisgCisgIyBJbml0aWFsaXplIHNvbWUgdmFyaWFibGVzIHNldCBieSBvcHRpb25zLgorIGFjX2luaXRfaGVscD0KK0BAIC01MjUsMzQgKzk3Nyw0OCBAQAorICMgYW5kIGFsbCB0aGUgdmFyaWFibGVzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIGJhc2VkIG9uIGV4ZWNfcHJlZml4CisgIyBieSBkZWZhdWx0IHdpbGwgYWN0dWFsbHkgY2hhbmdlLgorICMgVXNlIGJyYWNlcyBpbnN0ZWFkIG9mIHBhcmVucyBiZWNhdXNlIHNoLCBwZXJsLCBldGMuIGFsc28gYWNjZXB0IHRoZW0uCisrIyAoVGhlIGxpc3QgZm9sbG93cyB0aGUgc2FtZSBvcmRlciBhcyB0aGUgR05VIENvZGluZyBTdGFuZGFyZHMuKQorIGJpbmRpcj0nJHtleGVjX3ByZWZpeH0vYmluJworIHNiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L3NiaW4nCisgbGliZXhlY2Rpcj0nJHtleGVjX3ByZWZpeH0vbGliZXhlYycKKy1kYXRhZGlyPScke3ByZWZpeH0vc2hhcmUnCisrZGF0YXJvb3RkaXI9JyR7cHJlZml4fS9zaGFyZScKKytkYXRhZGlyPScke2RhdGFyb290ZGlyfScKKyBzeXNjb25mZGlyPScke3ByZWZpeH0vZXRjJworIHNoYXJlZHN0YXRlZGlyPScke3ByZWZpeH0vY29tJworIGxvY2Fsc3RhdGVkaXI9JyR7cHJlZml4fS92YXInCistbGliZGlyPScke2V4ZWNfcHJlZml4fS9saWInCisgaW5jbHVkZWRpcj0nJHtwcmVmaXh9L2luY2x1ZGUnCisgb2xkaW5jbHVkZWRpcj0nL3Vzci9pbmNsdWRlJworLWluZm9kaXI9JyR7cHJlZml4fS9pbmZvJworLW1hbmRpcj0nJHtwcmVmaXh9L21hbicKKytkb2NkaXI9JyR7ZGF0YXJvb3RkaXJ9L2RvYy8ke1BBQ0tBR0VfVEFSTkFNRX0nCisraW5mb2Rpcj0nJHtkYXRhcm9vdGRpcn0vaW5mbycKKytodG1sZGlyPScke2RvY2Rpcn0nCisrZHZpZGlyPScke2RvY2Rpcn0nCisrcGRmZGlyPScke2RvY2Rpcn0nCisrcHNkaXI9JyR7ZG9jZGlyfScKKytsaWJkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYicKKytsb2NhbGVkaXI9JyR7ZGF0YXJvb3RkaXJ9L2xvY2FsZScKKyttYW5kaXI9JyR7ZGF0YXJvb3RkaXJ9L21hbicKKyAKKyBhY19wcmV2PQorK2FjX2Rhc2hkYXNoPQorIGZvciBhY19vcHRpb24KKyBkbworICAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCisgICBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKy0gICAgZXZhbCAiJGFjX3ByZXY9XCRhY19vcHRpb24iCisrICAgIGV2YWwgJGFjX3ByZXY9XCRhY19vcHRpb24KKyAgICAgYWNfcHJldj0KKyAgICAgY29udGludWUKKyAgIGZpCisgCistICBhY19vcHRhcmc9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4W149XSo9XCguKlwpJ2AKKysgIGNhc2UgJGFjX29wdGlvbiBpbgorKyAgKj0qKQlhY19vcHRhcmc9YGV4cHIgIlgkYWNfb3B0aW9uIiA6ICdbXj1dKj1cKC4qXCknYCA7OworKyAgKikJYWNfb3B0YXJnPXllcyA7OworKyAgZXNhYworIAorICAgIyBBY2NlcHQgdGhlIGltcG9ydGFudCBDeWdudXMgY29uZmlndXJlIG9wdGlvbnMsIHNvIHdlIGNhbiBkaWFnbm9zZSB0eXBvcy4KKyAKKy0gIGNhc2UgJGFjX29wdGlvbiBpbgorKyAgY2FzZSAkYWNfZGFzaGRhc2gkYWNfb3B0aW9uIGluCisrICAtLSkKKysgICAgYWNfZGFzaGRhc2g9eWVzIDs7CisgCisgICAtYmluZGlyIHwgLS1iaW5kaXIgfCAtLWJpbmRpIHwgLS1iaW5kIHwgLS1iaW4gfCAtLWJpKQorICAgICBhY19wcmV2PWJpbmRpciA7OworQEAgLTU3NCwzMyArMTA0MCw0NSBAQAorICAgLS1jb25maWctY2FjaGUgfCAtQykKKyAgICAgY2FjaGVfZmlsZT1jb25maWcuY2FjaGUgOzsKKyAKKy0gIC1kYXRhZGlyIHwgLS1kYXRhZGlyIHwgLS1kYXRhZGkgfCAtLWRhdGFkIHwgLS1kYXRhIHwgLS1kYXQgfCAtLWRhKQorKyAgLWRhdGFkaXIgfCAtLWRhdGFkaXIgfCAtLWRhdGFkaSB8IC0tZGF0YWQpCisgICAgIGFjX3ByZXY9ZGF0YWRpciA7OworLSAgLWRhdGFkaXI9KiB8IC0tZGF0YWRpcj0qIHwgLS1kYXRhZGk9KiB8IC0tZGF0YWQ9KiB8IC0tZGF0YT0qIHwgLS1kYXQ9KiBcCistICB8IC0tZGE9KikKKysgIC1kYXRhZGlyPSogfCAtLWRhdGFkaXI9KiB8IC0tZGF0YWRpPSogfCAtLWRhdGFkPSopCisgICAgIGRhdGFkaXI9JGFjX29wdGFyZyA7OworIAorKyAgLWRhdGFyb290ZGlyIHwgLS1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaSB8IC0tZGF0YXJvb3RkIHwgLS1kYXRhcm9vdCBcCisrICB8IC0tZGF0YXJvbyB8IC0tZGF0YXJvIHwgLS1kYXRhcikKKysgICAgYWNfcHJldj1kYXRhcm9vdGRpciA7OworKyAgLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGk9KiB8IC0tZGF0YXJvb3RkPSogXAorKyAgfCAtLWRhdGFyb290PSogfCAtLWRhdGFyb289KiB8IC0tZGF0YXJvPSogfCAtLWRhdGFyPSopCisrICAgIGRhdGFyb290ZGlyPSRhY19vcHRhcmcgOzsKKysKKyAgIC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKikKKyAgICAgYWNfZmVhdHVyZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmRpc2FibGUtXCguKlwpJ2AKKyAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorLSAgICBleHByICJ4JGFjX2ZlYXR1cmUiIDogIi4qW14tXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKysgICAgZXhwciAieCRhY19mZWF0dXJlIiA6ICIuKlteLS5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY19mZWF0dXJlIiA+JjIKKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKy0gICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfZmVhdHVyZSB8IHNlZCAncy8tL18vZydgCistICAgIGV2YWwgImVuYWJsZV8kYWNfZmVhdHVyZT1ubyIgOzsKKysgICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfZmVhdHVyZSB8IHNlZCAncy9bLS5dL18vZydgCisrICAgIGV2YWwgZW5hYmxlXyRhY19mZWF0dXJlPW5vIDs7CisrCisrICAtZG9jZGlyIHwgLS1kb2NkaXIgfCAtLWRvY2RpIHwgLS1kb2MgfCAtLWRvKQorKyAgICBhY19wcmV2PWRvY2RpciA7OworKyAgLWRvY2Rpcj0qIHwgLS1kb2NkaXI9KiB8IC0tZG9jZGk9KiB8IC0tZG9jPSogfCAtLWRvPSopCisrICAgIGRvY2Rpcj0kYWNfb3B0YXJnIDs7CisrCisrICAtZHZpZGlyIHwgLS1kdmlkaXIgfCAtLWR2aWRpIHwgLS1kdmlkIHwgLS1kdmkgfCAtLWR2KQorKyAgICBhY19wcmV2PWR2aWRpciA7OworKyAgLWR2aWRpcj0qIHwgLS1kdmlkaXI9KiB8IC0tZHZpZGk9KiB8IC0tZHZpZD0qIHwgLS1kdmk9KiB8IC0tZHY9KikKKysgICAgZHZpZGlyPSRhY19vcHRhcmcgOzsKKyAKKyAgIC1lbmFibGUtKiB8IC0tZW5hYmxlLSopCisgICAgIGFjX2ZlYXR1cmU9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSplbmFibGUtXChbXj1dKlwpJ2AKKyAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorLSAgICBleHByICJ4JGFjX2ZlYXR1cmUiIDogIi4qW14tXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKysgICAgZXhwciAieCRhY19mZWF0dXJlIiA6ICIuKlteLS5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY19mZWF0dXJlIiA+JjIKKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKy0gICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfZmVhdHVyZSB8IHNlZCAncy8tL18vZydgCistICAgIGNhc2UgJGFjX29wdGlvbiBpbgorLSAgICAgICo9KikgYWNfb3B0YXJnPWBlY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7CistICAgICAgKikgYWNfb3B0YXJnPXllcyA7OworLSAgICBlc2FjCistICAgIGV2YWwgImVuYWJsZV8kYWNfZmVhdHVyZT0nJGFjX29wdGFyZyciIDs7CisrICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX2ZlYXR1cmUgfCBzZWQgJ3MvWy0uXS9fL2cnYAorKyAgICBldmFsIGVuYWJsZV8kYWNfZmVhdHVyZT1cJGFjX29wdGFyZyA7OworIAorICAgLWV4ZWMtcHJlZml4IHwgLS1leGVjX3ByZWZpeCB8IC0tZXhlYy1wcmVmaXggfCAtLWV4ZWMtcHJlZmkgXAorICAgfCAtLWV4ZWMtcHJlZiB8IC0tZXhlYy1wcmUgfCAtLWV4ZWMtcHIgfCAtLWV4ZWMtcCB8IC0tZXhlYy0gXAorQEAgLTYyNyw2ICsxMTA1LDEyIEBACisgICAtaG9zdD0qIHwgLS1ob3N0PSogfCAtLWhvcz0qIHwgLS1obz0qKQorICAgICBob3N0X2FsaWFzPSRhY19vcHRhcmcgOzsKKyAKKysgIC1odG1sZGlyIHwgLS1odG1sZGlyIHwgLS1odG1sZGkgfCAtLWh0bWxkIHwgLS1odG1sIHwgLS1odG0gfCAtLWh0KQorKyAgICBhY19wcmV2PWh0bWxkaXIgOzsKKysgIC1odG1sZGlyPSogfCAtLWh0bWxkaXI9KiB8IC0taHRtbGRpPSogfCAtLWh0bWxkPSogfCAtLWh0bWw9KiB8IC0taHRtPSogXAorKyAgfCAtLWh0PSopCisrICAgIGh0bWxkaXI9JGFjX29wdGFyZyA7OworKworICAgLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaSB8IC0taW5jbHVkZWQgfCAtLWluY2x1ZGUgXAorICAgfCAtLWluY2x1ZCB8IC0taW5jbHUgfCAtLWluY2wgfCAtLWluYykKKyAgICAgYWNfcHJldj1pbmNsdWRlZGlyIDs7CitAQCAtNjUxLDEzICsxMTM1LDE2IEBACisgICB8IC0tbGliZXhlPSogfCAtLWxpYmV4PSogfCAtLWxpYmU9KikKKyAgICAgbGliZXhlY2Rpcj0kYWNfb3B0YXJnIDs7CisgCisrICAtbG9jYWxlZGlyIHwgLS1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpIHwgLS1sb2NhbGVkIHwgLS1sb2NhbGUpCisrICAgIGFjX3ByZXY9bG9jYWxlZGlyIDs7CisrICAtbG9jYWxlZGlyPSogfCAtLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaT0qIHwgLS1sb2NhbGVkPSogfCAtLWxvY2FsZT0qKQorKyAgICBsb2NhbGVkaXI9JGFjX29wdGFyZyA7OworKworICAgLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaSB8IC0tbG9jYWxzdGF0ZWQgXAorLSAgfCAtLWxvY2Fsc3RhdGUgfCAtLWxvY2Fsc3RhdCB8IC0tbG9jYWxzdGEgfCAtLWxvY2Fsc3QgXAorLSAgfCAtLWxvY2FscyB8IC0tbG9jYWwgfCAtLWxvY2EgfCAtLWxvYyB8IC0tbG8pCisrICB8IC0tbG9jYWxzdGF0ZSB8IC0tbG9jYWxzdGF0IHwgLS1sb2NhbHN0YSB8IC0tbG9jYWxzdCB8IC0tbG9jYWxzKQorICAgICBhY19wcmV2PWxvY2Fsc3RhdGVkaXIgOzsKKyAgIC1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpPSogfCAtLWxvY2Fsc3RhdGVkPSogXAorLSAgfCAtLWxvY2Fsc3RhdGU9KiB8IC0tbG9jYWxzdGF0PSogfCAtLWxvY2Fsc3RhPSogfCAtLWxvY2Fsc3Q9KiBcCistICB8IC0tbG9jYWxzPSogfCAtLWxvY2FsPSogfCAtLWxvY2E9KiB8IC0tbG9jPSogfCAtLWxvPSopCisrICB8IC0tbG9jYWxzdGF0ZT0qIHwgLS1sb2NhbHN0YXQ9KiB8IC0tbG9jYWxzdGE9KiB8IC0tbG9jYWxzdD0qIHwgLS1sb2NhbHM9KikKKyAgICAgbG9jYWxzdGF0ZWRpcj0kYWNfb3B0YXJnIDs7CisgCisgICAtbWFuZGlyIHwgLS1tYW5kaXIgfCAtLW1hbmRpIHwgLS1tYW5kIHwgLS1tYW4gfCAtLW1hIHwgLS1tKQorQEAgLTcyMiw2ICsxMjA5LDE2IEBACisgICB8IC0tcHJvZ3ItdHJhPSogfCAtLXByb2dyYW0tdHI9KiB8IC0tcHJvZ3JhbS10PSopCisgICAgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9JGFjX29wdGFyZyA7OworIAorKyAgLXBkZmRpciB8IC0tcGRmZGlyIHwgLS1wZGZkaSB8IC0tcGRmZCB8IC0tcGRmIHwgLS1wZCkKKysgICAgYWNfcHJldj1wZGZkaXIgOzsKKysgIC1wZGZkaXI9KiB8IC0tcGRmZGlyPSogfCAtLXBkZmRpPSogfCAtLXBkZmQ9KiB8IC0tcGRmPSogfCAtLXBkPSopCisrICAgIHBkZmRpcj0kYWNfb3B0YXJnIDs7CisrCisrICAtcHNkaXIgfCAtLXBzZGlyIHwgLS1wc2RpIHwgLS1wc2QgfCAtLXBzKQorKyAgICBhY19wcmV2PXBzZGlyIDs7CisrICAtcHNkaXI9KiB8IC0tcHNkaXI9KiB8IC0tcHNkaT0qIHwgLS1wc2Q9KiB8IC0tcHM9KikKKysgICAgcHNkaXI9JGFjX29wdGFyZyA7OworKworICAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQorICAgICBzaWxlbnQ9eWVzIDs7CitAQCAtNzc0LDI0ICsxMjcxLDIwIEBACisgICAtd2l0aC0qIHwgLS13aXRoLSopCisgICAgIGFjX3BhY2thZ2U9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRoLVwoW149XSpcKSdgCisgICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKy0gICAgZXhwciAieCRhY19wYWNrYWdlIiA6ICIuKlteLV8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisrICAgIGV4cHIgIngkYWNfcGFja2FnZSIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfcGFja2FnZSIgPiYyCisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX3BhY2thZ2V8IHNlZCAncy8tL18vZydgCistICAgIGNhc2UgJGFjX29wdGlvbiBpbgorLSAgICAgICo9KikgYWNfb3B0YXJnPWBlY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7CistICAgICAgKikgYWNfb3B0YXJnPXllcyA7OworLSAgICBlc2FjCistICAgIGV2YWwgIndpdGhfJGFjX3BhY2thZ2U9JyRhY19vcHRhcmcnIiA7OworKyAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlIHwgc2VkICdzL1stLl0vXy9nJ2AKKysgICAgZXZhbCB3aXRoXyRhY19wYWNrYWdlPVwkYWNfb3B0YXJnIDs7CisgCisgICAtd2l0aG91dC0qIHwgLS13aXRob3V0LSopCisgICAgIGFjX3BhY2thZ2U9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRob3V0LVwoLipcKSdgCisgICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKy0gICAgZXhwciAieCRhY19wYWNrYWdlIiA6ICIuKlteLV8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisrICAgIGV4cHIgIngkYWNfcGFja2FnZSIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfcGFja2FnZSIgPiYyCisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX3BhY2thZ2UgfCBzZWQgJ3MvLS9fL2cnYAorLSAgICBldmFsICJ3aXRoXyRhY19wYWNrYWdlPW5vIiA7OworKyAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlIHwgc2VkICdzL1stLl0vXy9nJ2AKKysgICAgZXZhbCB3aXRoXyRhY19wYWNrYWdlPW5vIDs7CisgCisgICAtLXgpCisgICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgteC4KK0BAIC04MjIsOCArMTMxNSw3IEBACisgICAgIGV4cHIgIngkYWNfZW52dmFyIiA6ICIuKlteXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgdmFyaWFibGUgbmFtZTogJGFjX2VudnZhciIgPiYyCisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistICAgIGFjX29wdGFyZz1gZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAKKy0gICAgZXZhbCAiJGFjX2VudnZhcj0nJGFjX29wdGFyZyciCisrICAgIGV2YWwgJGFjX2VudnZhcj1cJGFjX29wdGFyZworICAgICBleHBvcnQgJGFjX2VudnZhciA7OworIAorICAgKikKK0BAIC04NDMsMjcgKzEzMzUsMTkgQEAKKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyBmaQorIAorLSMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIHBhdGhzLgorLWZvciBhY192YXIgaW4gZXhlY19wcmVmaXggcHJlZml4CistZG8KKy0gIGV2YWwgYWNfdmFsPSRgZWNobyAkYWNfdmFyYAorLSAgY2FzZSAkYWNfdmFsIGluCistICAgIFtcXC8kXSogfCA/OltcXC9dKiB8IE5PTkUgfCAnJyApIDs7CistICAgICopICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiID4mMgorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CistICBlc2FjCistZG9uZQorLQorLSMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIHBhdGhzLgorLWZvciBhY192YXIgaW4gYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgXAorLQkgICAgICBsb2NhbHN0YXRlZGlyIGxpYmRpciBpbmNsdWRlZGlyIG9sZGluY2x1ZGVkaXIgaW5mb2RpciBtYW5kaXIKKysjIEJlIHN1cmUgdG8gaGF2ZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZXMuCisrZm9yIGFjX3ZhciBpbglleGVjX3ByZWZpeCBwcmVmaXggYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhcm9vdGRpciBcCisrCQlkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgbG9jYWxzdGF0ZWRpciBpbmNsdWRlZGlyIFwKKysJCW9sZGluY2x1ZGVkaXIgZG9jZGlyIGluZm9kaXIgaHRtbGRpciBkdmlkaXIgcGRmZGlyIHBzZGlyIFwKKysJCWxpYmRpciBsb2NhbGVkaXIgbWFuZGlyCisgZG8KKy0gIGV2YWwgYWNfdmFsPSRgZWNobyAkYWNfdmFyYAorKyAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICBjYXNlICRhY192YWwgaW4KKy0gICAgW1xcLyRdKiB8ID86W1xcL10qICkgOzsKKy0gICAgKikgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogZXhwZWN0ZWQgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgZm9yIC0tJGFjX3ZhcjogJGFjX3ZhbCIgPiYyCistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKysgICAgW1xcLyRdKiB8ID86W1xcL10qICkgIGNvbnRpbnVlOzsKKysgICAgTk9ORSB8ICcnICkgY2FzZSAkYWNfdmFyIGluICpwcmVmaXggKSBjb250aW51ZTs7IGVzYWM7OworICAgZXNhYworKyAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBleHBlY3RlZCBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBmb3IgLS0kYWNfdmFyOiAkYWNfdmFsIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyBkb25lCisgCisgIyBUaGVyZSBtaWdodCBiZSBwZW9wbGUgd2hvIGRlcGVuZCBvbiB0aGUgb2xkIGJyb2tlbiBiZWhhdmlvcjogYCRob3N0JworQEAgLTg5MCw4MiArMTM3NCw3NiBAQAorIHRlc3QgIiRzaWxlbnQiID0geWVzICYmIGV4ZWMgNj4vZGV2L251bGwKKyAKKyAKKythY19wd2Q9YHB3ZGAgJiYgdGVzdCAtbiAiJGFjX3B3ZCIgJiYKKythY19sc19kaT1gbHMgLWRpIC5gICYmCisrYWNfcHdkX2xzX2RpPWBjZCAiJGFjX3B3ZCIgJiYgbHMgLWRpIC5gIHx8CisrICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IFdvcmtpbmcgZGlyZWN0b3J5IGNhbm5vdCBiZSBkZXRlcm1pbmVkIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyt0ZXN0ICJYJGFjX2xzX2RpIiA9ICJYJGFjX3B3ZF9sc19kaSIgfHwKKysgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogcHdkIGRvZXMgbm90IHJlcG9ydCBuYW1lIG9mIHdvcmtpbmcgZGlyZWN0b3J5IiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysKKysKKyAjIEZpbmQgdGhlIHNvdXJjZSBmaWxlcywgaWYgbG9jYXRpb24gd2FzIG5vdCBzcGVjaWZpZWQuCisgaWYgdGVzdCAteiAiJHNyY2RpciI7IHRoZW4KKyAgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9eWVzCistICAjIFRyeSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBzY3JpcHQsIHRoZW4gaXRzIHBhcmVudC4KKy0gIGFjX2NvbmZkaXI9YChkaXJuYW1lICIkMCIpIDI+L2Rldi9udWxsIHx8CisrICAjIFRyeSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBzY3JpcHQsIHRoZW4gdGhlIHBhcmVudCBkaXJlY3RvcnkuCisrICBhY19jb25mZGlyPWAkYXNfZGlybmFtZSAtLSAiJDAiIHx8CisgJGFzX2V4cHIgWCIkMCIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKyAJIFgiJDAiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisgCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAorLQkgWCIkMCIgOiAnWFwoL1wpJyBcfCBcCistCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKysJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorIGVjaG8gWCIkMCIgfAorLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKy0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CistICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKy0gIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CistICAJICBzLy4qLy4vOyBxJ2AKKysgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXC9cKVteL10uKi97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXChcL1wvXCkkL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXCkuKi97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgcy8uKi8uLzsgcSdgCisgICBzcmNkaXI9JGFjX2NvbmZkaXIKKy0gIGlmIHRlc3QgISAtciAkc3JjZGlyLyRhY191bmlxdWVfZmlsZTsgdGhlbgorKyAgaWYgdGVzdCAhIC1yICIkc3JjZGlyLyRhY191bmlxdWVfZmlsZSI7IHRoZW4KKyAgICAgc3JjZGlyPS4uCisgICBmaQorIGVsc2UKKyAgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9bm8KKyBmaQorLWlmIHRlc3QgISAtciAkc3JjZGlyLyRhY191bmlxdWVfZmlsZTsgdGhlbgorLSAgaWYgdGVzdCAiJGFjX3NyY2Rpcl9kZWZhdWx0ZWQiID0geWVzOyB0aGVuCistICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkYWNfY29uZmRpciBvciAuLiIgPiYyCistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistICBlbHNlCistICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkc3JjZGlyIiA+JjIKKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKy0gIGZpCistZmkKKy0oY2QgJHNyY2RpciAmJiB0ZXN0IC1yIC4vJGFjX3VuaXF1ZV9maWxlKSAyPi9kZXYvbnVsbCB8fAorLSAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBzb3VyY2VzIGFyZSBpbiAkc3JjZGlyLCBidXQgXGBjZCAkc3JjZGlyJyBkb2VzIG5vdCB3b3JrIiA+JjIKKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKy1zcmNkaXI9YGVjaG8gIiRzcmNkaXIiIHwgc2VkICdzJVwoW15cXC9dXClbXFwvXSokJVwxJSdgCistYWNfZW52X2J1aWxkX2FsaWFzX3NldD0ke2J1aWxkX2FsaWFzK3NldH0KKy1hY19lbnZfYnVpbGRfYWxpYXNfdmFsdWU9JGJ1aWxkX2FsaWFzCistYWNfY3ZfZW52X2J1aWxkX2FsaWFzX3NldD0ke2J1aWxkX2FsaWFzK3NldH0KKy1hY19jdl9lbnZfYnVpbGRfYWxpYXNfdmFsdWU9JGJ1aWxkX2FsaWFzCistYWNfZW52X2hvc3RfYWxpYXNfc2V0PSR7aG9zdF9hbGlhcytzZXR9CistYWNfZW52X2hvc3RfYWxpYXNfdmFsdWU9JGhvc3RfYWxpYXMKKy1hY19jdl9lbnZfaG9zdF9hbGlhc19zZXQ9JHtob3N0X2FsaWFzK3NldH0KKy1hY19jdl9lbnZfaG9zdF9hbGlhc192YWx1ZT0kaG9zdF9hbGlhcworLWFjX2Vudl90YXJnZXRfYWxpYXNfc2V0PSR7dGFyZ2V0X2FsaWFzK3NldH0KKy1hY19lbnZfdGFyZ2V0X2FsaWFzX3ZhbHVlPSR0YXJnZXRfYWxpYXMKKy1hY19jdl9lbnZfdGFyZ2V0X2FsaWFzX3NldD0ke3RhcmdldF9hbGlhcytzZXR9CistYWNfY3ZfZW52X3RhcmdldF9hbGlhc192YWx1ZT0kdGFyZ2V0X2FsaWFzCistYWNfZW52X0NDQVNfc2V0PSR7Q0NBUytzZXR9CistYWNfZW52X0NDQVNfdmFsdWU9JENDQVMKKy1hY19jdl9lbnZfQ0NBU19zZXQ9JHtDQ0FTK3NldH0KKy1hY19jdl9lbnZfQ0NBU192YWx1ZT0kQ0NBUworLWFjX2Vudl9DQ0FTRkxBR1Nfc2V0PSR7Q0NBU0ZMQUdTK3NldH0KKy1hY19lbnZfQ0NBU0ZMQUdTX3ZhbHVlPSRDQ0FTRkxBR1MKKy1hY19jdl9lbnZfQ0NBU0ZMQUdTX3NldD0ke0NDQVNGTEFHUytzZXR9CistYWNfY3ZfZW52X0NDQVNGTEFHU192YWx1ZT0kQ0NBU0ZMQUdTCistYWNfZW52X0NDX3NldD0ke0NDK3NldH0KKy1hY19lbnZfQ0NfdmFsdWU9JENDCistYWNfY3ZfZW52X0NDX3NldD0ke0NDK3NldH0KKy1hY19jdl9lbnZfQ0NfdmFsdWU9JENDCistYWNfZW52X0NGTEFHU19zZXQ9JHtDRkxBR1Mrc2V0fQorLWFjX2Vudl9DRkxBR1NfdmFsdWU9JENGTEFHUworLWFjX2N2X2Vudl9DRkxBR1Nfc2V0PSR7Q0ZMQUdTK3NldH0KKy1hY19jdl9lbnZfQ0ZMQUdTX3ZhbHVlPSRDRkxBR1MKKy1hY19lbnZfTERGTEFHU19zZXQ9JHtMREZMQUdTK3NldH0KKy1hY19lbnZfTERGTEFHU192YWx1ZT0kTERGTEFHUworLWFjX2N2X2Vudl9MREZMQUdTX3NldD0ke0xERkxBR1Mrc2V0fQorLWFjX2N2X2Vudl9MREZMQUdTX3ZhbHVlPSRMREZMQUdTCistYWNfZW52X0NQUEZMQUdTX3NldD0ke0NQUEZMQUdTK3NldH0KKy1hY19lbnZfQ1BQRkxBR1NfdmFsdWU9JENQUEZMQUdTCistYWNfY3ZfZW52X0NQUEZMQUdTX3NldD0ke0NQUEZMQUdTK3NldH0KKy1hY19jdl9lbnZfQ1BQRkxBR1NfdmFsdWU9JENQUEZMQUdTCistYWNfZW52X0NQUF9zZXQ9JHtDUFArc2V0fQorLWFjX2Vudl9DUFBfdmFsdWU9JENQUAorLWFjX2N2X2Vudl9DUFBfc2V0PSR7Q1BQK3NldH0KKy1hY19jdl9lbnZfQ1BQX3ZhbHVlPSRDUFAKKytpZiB0ZXN0ICEgLXIgIiRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlIjsgdGhlbgorKyAgdGVzdCAiJGFjX3NyY2Rpcl9kZWZhdWx0ZWQiID0geWVzICYmIHNyY2Rpcj0iJGFjX2NvbmZkaXIgb3IgLi4iCisrICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4gJHNyY2RpciIgPiYyCisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrZmkKKythY19tc2c9InNvdXJjZXMgYXJlIGluICRzcmNkaXIsIGJ1dCBcYGNkICRzcmNkaXInIGRvZXMgbm90IHdvcmsiCisrYWNfYWJzX2NvbmZkaXI9YCgKKysJY2QgIiRzcmNkaXIiICYmIHRlc3QgLXIgIi4vJGFjX3VuaXF1ZV9maWxlIiB8fCB7IGVjaG8gIiRhc19tZTogZXJyb3I6ICRhY19tc2ciID4mMgorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKwlwd2QpYAorKyMgV2hlbiBidWlsZGluZyBpbiBwbGFjZSwgc2V0IHNyY2Rpcj0uCisraWYgdGVzdCAiJGFjX2Fic19jb25mZGlyIiA9ICIkYWNfcHdkIjsgdGhlbgorKyAgc3JjZGlyPS4KKytmaQorKyMgUmVtb3ZlIHVubmVjZXNzYXJ5IHRyYWlsaW5nIHNsYXNoZXMgZnJvbSBzcmNkaXIuCisrIyBEb3VibGUgc2xhc2hlcyBpbiBmaWxlIG5hbWVzIGluIG9iamVjdCBmaWxlIGRlYnVnZ2luZyBpbmZvCisrIyBtZXNzIHVwIE0teCBnZGIgaW4gRW1hY3MuCisrY2FzZSAkc3JjZGlyIGluCisrKi8pIHNyY2Rpcj1gZXhwciAiWCRzcmNkaXIiIDogJ1hcKC4qW14vXVwpJyBcfCAiWCRzcmNkaXIiIDogJ1hcKC4qXCknYDs7CisrZXNhYworK2ZvciBhY192YXIgaW4gJGFjX3ByZWNpb3VzX3ZhcnM7IGRvCisrICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fc2V0PVwkeyR7YWNfdmFyfStzZXR9CisrICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KKysgIGV2YWwgYWNfY3ZfZW52XyR7YWNfdmFyfV9zZXQ9XCR7JHthY192YXJ9K3NldH0KKysgIGV2YWwgYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZT1cJCR7YWNfdmFyfQorK2RvbmUKKyAKKyAjCisgIyBSZXBvcnQgdGhlIC0taGVscCBtZXNzYWdlLgorQEAgLTk5NCw5ICsxNDcyLDYgQEAKKyAgIC1uLCAtLW5vLWNyZWF0ZSAgICAgICAgIGRvIG5vdCBjcmVhdGUgb3V0cHV0IGZpbGVzCisgICAgICAgLS1zcmNkaXI9RElSICAgICAgICBmaW5kIHRoZSBzb3VyY2VzIGluIERJUiBbY29uZmlndXJlIGRpciBvciBcYC4uJ10KKyAKKy1fQUNFT0YKKy0KKy0gIGNhdCA8PF9BQ0VPRgorIEluc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKyAgIC0tcHJlZml4PVBSRUZJWCAgICAgICAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzIGluIFBSRUZJWAorIAkJCSAgWyRhY19kZWZhdWx0X3ByZWZpeF0KK0BAIC0xMDE0LDE1ICsxNDg5LDIyIEBACisgICAtLWJpbmRpcj1ESVIgICAgICAgICAgIHVzZXIgZXhlY3V0YWJsZXMgW0VQUkVGSVgvYmluXQorICAgLS1zYmluZGlyPURJUiAgICAgICAgICBzeXN0ZW0gYWRtaW4gZXhlY3V0YWJsZXMgW0VQUkVGSVgvc2Jpbl0KKyAgIC0tbGliZXhlY2Rpcj1ESVIgICAgICAgcHJvZ3JhbSBleGVjdXRhYmxlcyBbRVBSRUZJWC9saWJleGVjXQorLSAgLS1kYXRhZGlyPURJUiAgICAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW1BSRUZJWC9zaGFyZV0KKyAgIC0tc3lzY29uZmRpcj1ESVIgICAgICAgcmVhZC1vbmx5IHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC9ldGNdCisgICAtLXNoYXJlZHN0YXRlZGlyPURJUiAgIG1vZGlmaWFibGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW1BSRUZJWC9jb21dCisgICAtLWxvY2Fsc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL3Zhcl0KKyAgIC0tbGliZGlyPURJUiAgICAgICAgICAgb2JqZWN0IGNvZGUgbGlicmFyaWVzIFtFUFJFRklYL2xpYl0KKyAgIC0taW5jbHVkZWRpcj1ESVIgICAgICAgQyBoZWFkZXIgZmlsZXMgW1BSRUZJWC9pbmNsdWRlXQorICAgLS1vbGRpbmNsdWRlZGlyPURJUiAgICBDIGhlYWRlciBmaWxlcyBmb3Igbm9uLWdjYyBbL3Vzci9pbmNsdWRlXQorLSAgLS1pbmZvZGlyPURJUiAgICAgICAgICBpbmZvIGRvY3VtZW50YXRpb24gW1BSRUZJWC9pbmZvXQorLSAgLS1tYW5kaXI9RElSICAgICAgICAgICBtYW4gZG9jdW1lbnRhdGlvbiBbUFJFRklYL21hbl0KKysgIC0tZGF0YXJvb3RkaXI9RElSICAgICAgcmVhZC1vbmx5IGFyY2guLWluZGVwZW5kZW50IGRhdGEgcm9vdCBbUFJFRklYL3NoYXJlXQorKyAgLS1kYXRhZGlyPURJUiAgICAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSXQorKyAgLS1pbmZvZGlyPURJUiAgICAgICAgICBpbmZvIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL2luZm9dCisrICAtLWxvY2FsZWRpcj1ESVIgICAgICAgIGxvY2FsZS1kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVIvbG9jYWxlXQorKyAgLS1tYW5kaXI9RElSICAgICAgICAgICBtYW4gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvbWFuXQorKyAgLS1kb2NkaXI9RElSICAgICAgICAgICBkb2N1bWVudGF0aW9uIHJvb3QgW0RBVEFST09URElSL2RvYy9uZXdsaWJdCisrICAtLWh0bWxkaXI9RElSICAgICAgICAgIGh0bWwgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorKyAgLS1kdmlkaXI9RElSICAgICAgICAgICBkdmkgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorKyAgLS1wZGZkaXI9RElSICAgICAgICAgICBwZGYgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorKyAgLS1wc2Rpcj1ESVIgICAgICAgICAgICBwcyBkb2N1bWVudGF0aW9uIFtET0NESVJdCisgX0FDRU9GCisgCisgICBjYXQgPDxcX0FDRU9GCitAQCAtMTA1OSwxMCArMTU0MSw4IEBACisgICAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICAgZG8gbm90IHJlamVjdCBzbG93IGRlcGVuZGVuY3kgZXh0cmFjdG9ycworICAgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlICBlbmFibGUgbWFrZSBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIG5vdCB1c2VmdWwKKyAJCQkgIChhbmQgc29tZXRpbWVzIGNvbmZ1c2luZykgdG8gdGhlIGNhc3VhbCBpbnN0YWxsZXIKKy0gIC0tZW5hYmxlLXNoYXJlZFs9UEtHU10KKy0gICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgW2RlZmF1bHQ9eWVzXQorLSAgLS1lbmFibGUtc3RhdGljWz1QS0dTXQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3RhdGljIGxpYnJhcmllcyBbZGVmYXVsdD15ZXNdCisrICAtLWVuYWJsZS1zaGFyZWRbPVBLR1NdICBidWlsZCBzaGFyZWQgbGlicmFyaWVzIFtkZWZhdWx0PXllc10KKysgIC0tZW5hYmxlLXN0YXRpY1s9UEtHU10gIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMgW2RlZmF1bHQ9eWVzXQorICAgLS1lbmFibGUtZmFzdC1pbnN0YWxsWz1QS0dTXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uIFtkZWZhdWx0PXllc10KKyAgIC0tZGlzYWJsZS1saWJ0b29sLWxvY2sgIGF2b2lkIGxvY2tpbmcgKG1pZ2h0IGJyZWFrIHBhcmFsbGVsIGJ1aWxkcykKK0BAIC0xMDgxLDEyOCArMTU2MSw5NSBAQAorICAgQ0ZMQUdTICAgICAgQyBjb21waWxlciBmbGFncworICAgTERGTEFHUyAgICAgbGlua2VyIGZsYWdzLCBlLmcuIC1MPGxpYiBkaXI+IGlmIHlvdSBoYXZlIGxpYnJhcmllcyBpbiBhCisgICAgICAgICAgICAgICBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGxpYiBkaXI+CistICBDUFBGTEFHUyAgICBDL0MrKyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmIHlvdSBoYXZlCistICAgICAgICAgICAgICBoZWFkZXJzIGluIGEgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxpbmNsdWRlIGRpcj4KKysgIExJQlMgICAgICAgIGxpYnJhcmllcyB0byBwYXNzIHRvIHRoZSBsaW5rZXIsIGUuZy4gLWw8bGlicmFyeT4KKysgIENQUEZMQUdTICAgIEMvQysrL09iamVjdGl2ZSBDIHByZXByb2Nlc3NvciBmbGFncywgZS5nLiAtSTxpbmNsdWRlIGRpcj4gaWYKKysgICAgICAgICAgICAgIHlvdSBoYXZlIGhlYWRlcnMgaW4gYSBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGluY2x1ZGUgZGlyPgorICAgQ1BQICAgICAgICAgQyBwcmVwcm9jZXNzb3IKKyAKKyBVc2UgdGhlc2UgdmFyaWFibGVzIHRvIG92ZXJyaWRlIHRoZSBjaG9pY2VzIG1hZGUgYnkgYGNvbmZpZ3VyZScgb3IgdG8gaGVscAorIGl0IHRvIGZpbmQgbGlicmFyaWVzIGFuZCBwcm9ncmFtcyB3aXRoIG5vbnN0YW5kYXJkIG5hbWVzL2xvY2F0aW9ucy4KKyAKKyBfQUNFT0YKKythY19zdGF0dXM9JD8KKyBmaQorIAorIGlmIHRlc3QgIiRhY19pbml0X2hlbHAiID0gInJlY3Vyc2l2ZSI7IHRoZW4KKyAgICMgSWYgdGhlcmUgYXJlIHN1YmRpcnMsIHJlcG9ydCB0aGVpciBzcGVjaWZpYyAtLWhlbHAuCistICBhY19wb3BkaXI9YHB3ZGAKKyAgIGZvciBhY19kaXIgaW4gOiAkYWNfc3ViZGlyc19hbGw7IGRvIHRlc3QgIngkYWNfZGlyIiA9IHg6ICYmIGNvbnRpbnVlCistICAgIHRlc3QgLWQgJGFjX2RpciB8fCBjb250aW51ZQorKyAgICB0ZXN0IC1kICIkYWNfZGlyIiB8fCBjb250aW51ZQorICAgICBhY19idWlsZGRpcj0uCisgCistaWYgdGVzdCAiJGFjX2RpciIgIT0gLjsgdGhlbgorK2Nhc2UgIiRhY19kaXIiIGluCisrLikgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisrKikKKyAgIGFjX2Rpcl9zdWZmaXg9L2BlY2hvICIkYWNfZGlyIiB8IHNlZCAncyxeXC5bXFwvXSwsJ2AKKy0gICMgQSAiLi4vIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCistICBhY190b3BfYnVpbGRkaXI9YGVjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAncywvW15cXC9dKiwuLi8sZydgCistZWxzZQorLSAgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyPQorLWZpCisrICAjIEEgIi4uIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCisrICBhY190b3BfYnVpbGRkaXJfc3ViPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3MsL1teXFwvXSosLy4uLGc7cywvLCwnYAorKyAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgorKyAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKyAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7CisrICBlc2FjIDs7CisrZXNhYworK2FjX2Fic190b3BfYnVpbGRkaXI9JGFjX3B3ZAorK2FjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKKysjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorK2FjX3RvcF9idWlsZGRpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeAorIAorIGNhc2UgJHNyY2RpciBpbgorLSAgLikgICMgTm8gLS1zcmNkaXIgb3B0aW9uLiAgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorKyAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorICAgICBhY19zcmNkaXI9LgorLSAgICBpZiB0ZXN0IC16ICIkYWNfdG9wX2J1aWxkZGlyIjsgdGhlbgorLSAgICAgICBhY190b3Bfc3JjZGlyPS4KKy0gICAgZWxzZQorLSAgICAgICBhY190b3Bfc3JjZGlyPWBlY2hvICRhY190b3BfYnVpbGRkaXIgfCBzZWQgJ3MsLyQsLCdgCistICAgIGZpIDs7CistICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIHBhdGguCisrICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpcl9zdWIKKysgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZCA7OworKyAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBuYW1lLgorICAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OworLSAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKy0gICopICMgUmVsYXRpdmUgcGF0aC4KKy0gICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRkaXIkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKy0gICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciA7OworLWVzYWMKKy0KKy0jIERvIG5vdCB1c2UgYGNkIGZvbyAmJiBwd2RgIHRvIGNvbXB1dGUgYWJzb2x1dGUgcGF0aHMsIGJlY2F1c2UKKy0jIHRoZSBkaXJlY3RvcmllcyBtYXkgbm90IGV4aXN0LgorLWNhc2UgYHB3ZGAgaW4KKy0uKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKKy0qKQorLSAgY2FzZSAiJGFjX2RpciIgaW4KKy0gIC4pIGFjX2Fic19idWlsZGRpcj1gcHdkYDs7CistICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OworLSAgKikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgLyIkYWNfZGlyIjs7CistICBlc2FjOzsKKy1lc2FjCistY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCistLikgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKKy0qKQorLSAgY2FzZSAke2FjX3RvcF9idWlsZGRpcn0uIGluCistICAuKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXI7OworLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OworLSAgKikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyLyR7YWNfdG9wX2J1aWxkZGlyfS47OworLSAgZXNhYzs7CistZXNhYworLWNhc2UgJGFjX2Fic19idWlsZGRpciBpbgorLS4pIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7CistKikKKy0gIGNhc2UgJGFjX3NyY2RpciBpbgorLSAgLikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKy0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKKy0gICopIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfc3JjZGlyOzsKKy0gIGVzYWM7OworLWVzYWMKKy1jYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKy0uKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7CistKikKKy0gIGNhc2UgJGFjX3RvcF9zcmNkaXIgaW4KKy0gIC4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OworLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7CistICAqKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY190b3Bfc3JjZGlyOzsKKy0gIGVzYWM7OworKyAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIKKysgICAgYWNfYWJzX3RvcF9zcmNkaXI9JHNyY2RpciA7OworKyAgKikgIyBSZWxhdGl2ZSBuYW1lLgorKyAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKysgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIKKysgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZC8kc3JjZGlyIDs7CisgZXNhYworK2FjX2Fic19zcmNkaXI9JGFjX2Fic190b3Bfc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAKKy0gICAgY2QgJGFjX2RpcgorLSAgICAjIENoZWNrIGZvciBndWVzdGVkIGNvbmZpZ3VyZTsgb3RoZXJ3aXNlIGdldCBDeWdudXMgc3R5bGUgY29uZmlndXJlLgorLSAgICBpZiB0ZXN0IC1mICRhY19zcmNkaXIvY29uZmlndXJlLmdudTsgdGhlbgorLSAgICAgIGVjaG8KKy0gICAgICAkU0hFTEwgJGFjX3NyY2Rpci9jb25maWd1cmUuZ251ICAtLWhlbHA9cmVjdXJzaXZlCistICAgIGVsaWYgdGVzdCAtZiAkYWNfc3JjZGlyL2NvbmZpZ3VyZTsgdGhlbgorLSAgICAgIGVjaG8KKy0gICAgICAkU0hFTEwgJGFjX3NyY2Rpci9jb25maWd1cmUgIC0taGVscD1yZWN1cnNpdmUKKy0gICAgZWxpZiB0ZXN0IC1mICRhY19zcmNkaXIvY29uZmlndXJlLmFjIHx8CistCSAgIHRlc3QgLWYgJGFjX3NyY2Rpci9jb25maWd1cmUuaW47IHRoZW4KKy0gICAgICBlY2hvCistICAgICAgJGFjX2NvbmZpZ3VyZSAtLWhlbHAKKysgICAgY2QgIiRhY19kaXIiIHx8IHsgYWNfc3RhdHVzPSQ/OyBjb250aW51ZTsgfQorKyAgICAjIENoZWNrIGZvciBndWVzdGVkIGNvbmZpZ3VyZS4KKysgICAgaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUuZ251IjsgdGhlbgorKyAgICAgIGVjaG8gJiYKKysgICAgICAkU0hFTEwgIiRhY19zcmNkaXIvY29uZmlndXJlLmdudSIgLS1oZWxwPXJlY3Vyc2l2ZQorKyAgICBlbGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlIjsgdGhlbgorKyAgICAgIGVjaG8gJiYKKysgICAgICAkU0hFTEwgIiRhY19zcmNkaXIvY29uZmlndXJlIiAtLWhlbHA9cmVjdXJzaXZlCisgICAgIGVsc2UKKyAgICAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG5vIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaXMgaW4gJGFjX2RpciIgPiYyCistICAgIGZpCistICAgIGNkICRhY19wb3BkaXIKKysgICAgZmkgfHwgYWNfc3RhdHVzPSQ/CisrICAgIGNkICIkYWNfcHdkIiB8fCB7IGFjX3N0YXR1cz0kPzsgYnJlYWs7IH0KKyAgIGRvbmUKKyBmaQorIAorLXRlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgMAorK3Rlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgJGFjX3N0YXR1cworIGlmICRhY19pbml0X3ZlcnNpb247IHRoZW4KKyAgIGNhdCA8PFxfQUNFT0YKKyBuZXdsaWIgY29uZmlndXJlIDEuMTcuMAorLWdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OQorK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MQorIAorLUNvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisrMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKyBfQUNFT0YKKy0gIGV4aXQgMAorKyAgZXhpdAorIGZpCistZXhlYyA1PmNvbmZpZy5sb2cKKy1jYXQgPiY1IDw8X0FDRU9GCisrY2F0ID5jb25maWcubG9nIDw8X0FDRU9GCisgVGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hpbGUKKyBydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgorIAorIEl0IHdhcyBjcmVhdGVkIGJ5IG5ld2xpYiAkYXNfbWUgMS4xNy4wLCB3aGljaCB3YXMKKy1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKytnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjEuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKyAKKyAgICQgJDAgJEAKKyAKKyBfQUNFT0YKKytleGVjIDU+PmNvbmZpZy5sb2cKKyB7CisgY2F0IDw8X0FTVU5BTUUKKyAjIyAtLS0tLS0tLS0gIyMKK0BAIC0xMjIxLDcgKzE2NjgsNyBAQAorIC9iaW4vYXJjaCAgICAgICAgICAgICAgPSBgKC9iaW4vYXJjaCkgMj4vZGV2L251bGwgICAgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKyAvdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCisgL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyA9IGAoL3Vzci9jb252ZXgvZ2V0c3lzaW5mbykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorLWhvc3RpbmZvICAgICAgICAgICAgICAgPSBgKGhvc3RpbmZvKSAyPi9kZXYvbnVsbCAgICAgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKysvdXNyL2Jpbi9ob3N0aW5mbyAgICAgID0gYCgvdXNyL2Jpbi9ob3N0aW5mbykgMj4vZGV2L251bGwgICAgICB8fCBlY2hvIHVua25vd25gCisgL2Jpbi9tYWNoaW5lICAgICAgICAgICA9IGAoL2Jpbi9tYWNoaW5lKSAyPi9kZXYvbnVsbCAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorIC91c3IvYmluL29zbGV2ZWwgICAgICAgPSBgKC91c3IvYmluL29zbGV2ZWwpIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKyAvYmluL3VuaXZlcnNlICAgICAgICAgID0gYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbCAgICAgICAgICB8fCBlY2hvIHVua25vd25gCitAQCAtMTIzNSw2ICsxNjgyLDcgQEAKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBlY2hvICJQQVRIOiAkYXNfZGlyIgorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCisgfSA+JjUKKyAKK0BAIC0xMjU2LDcgKzE3MDQsNiBAQAorIGFjX2NvbmZpZ3VyZV9hcmdzPQorIGFjX2NvbmZpZ3VyZV9hcmdzMD0KKyBhY19jb25maWd1cmVfYXJnczE9CistYWNfc2VwPQorIGFjX211c3Rfa2VlcF9uZXh0PWZhbHNlCisgZm9yIGFjX3Bhc3MgaW4gMSAyCisgZG8KK0BAIC0xMjY3LDcgKzE3MTQsNyBAQAorICAgICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorICAgICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKKyAgICAgICBjb250aW51ZSA7OworLSAgICAqIiAiKnwqIgkiKnwqW1xbXF1cflwjXCRcXlwmXCpcKFwpXHtcfVxcXHxcO1w8XD5cP1wiXCddKikKKysgICAgKlwnKikKKyAgICAgICBhY19hcmc9YGVjaG8gIiRhY19hcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgIGVzYWMKKyAgICAgY2FzZSAkYWNfcGFzcyBpbgorQEAgLTEyODksOSArMTczNiw3IEBACisgCSAgLSogKSBhY19tdXN0X2tlZXBfbmV4dD10cnVlIDs7CisgCWVzYWMKKyAgICAgICBmaQorLSAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MkYWNfc2VwJyRhY19hcmcnIgorLSAgICAgICMgR2V0IHJpZCBvZiB0aGUgbGVhZGluZyBzcGFjZS4KKy0gICAgICBhY19zZXA9IiAiCisrICAgICAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAnJGFjX2FyZyciCisgICAgICAgOzsKKyAgICAgZXNhYworICAgZG9uZQorQEAgLTEzMDIsOCArMTc0Nyw4IEBACisgIyBXaGVuIGludGVycnVwdGVkIG9yIGV4aXQnZCwgY2xlYW51cCB0ZW1wb3JhcnkgZmlsZXMsIGFuZCBjb21wbGV0ZQorICMgY29uZmlnLmxvZy4gIFdlIHJlbW92ZSBjb21tZW50cyBiZWNhdXNlIGFueXdheSB0aGUgcXVvdGVzIGluIHRoZXJlCisgIyB3b3VsZCBjYXVzZSBwcm9ibGVtcyBvciBsb29rIHVnbHkuCistIyBXQVJOSU5HOiBCZSBzdXJlIG5vdCB0byB1c2Ugc2luZ2xlIHF1b3RlcyBpbiB0aGVyZSwgYXMgc29tZSBzaGVsbHMsCistIyBzdWNoIGFzIG91ciBEVSA1LjAgZnJpZW5kLCB3aWxsIHRoZW4gYGNsb3NlJyB0aGUgdHJhcC4KKysjIFdBUk5JTkc6IFVzZSAnXCcnIHRvIHJlcHJlc2VudCBhbiBhcG9zdHJvcGhlIHdpdGhpbiB0aGUgdHJhcC4KKysjIFdBUk5JTkc6IERvIG5vdCBzdGFydCB0aGUgdHJhcCBjb2RlIHdpdGggYSBuZXdsaW5lLCBkdWUgdG8gYSBGcmVlQlNEIDQuMCBidWcuCisgdHJhcCAnZXhpdF9zdGF0dXM9JD8KKyAgICMgU2F2ZSBpbnRvIGNvbmZpZy5sb2cgc29tZSBpbmZvcm1hdGlvbiB0aGF0IG1pZ2h0IGhlbHAgaW4gZGVidWdnaW5nLgorICAgeworQEAgLTEzMTYsMjAgKzE3NjEsMzQgQEAKKyBfQVNCT1gKKyAgICAgZWNobworICAgICAjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorLXsKKysoCisrICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdcJydzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ1wnJ2A7IGRvCisrICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorKyAgICBjYXNlICRhY192YWwgaW4gIygKKysgICAgKiR7YXNfbmx9KikKKysgICAgICBjYXNlICRhY192YXIgaW4gIygKKysgICAgICAqX2N2XyopIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IENhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lLiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBDYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZS4iID4mMjt9IDs7CisrICAgICAgZXNhYworKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorKyAgICAgIF8gfCBJRlMgfCBhc19ubCkgOzsgIygKKysgICAgICAqKSAkYXNfdW5zZXQgJGFjX3ZhciA7OworKyAgICAgIGVzYWMgOzsKKysgICAgZXNhYworKyAgZG9uZQorICAgKHNldCkgMj4mMSB8CistICAgIGNhc2UgYChhY19zcGFjZT0nIiciJyAnIiciJzsgc2V0IHwgZ3JlcCBhY19zcGFjZSkgMj4mMWAgaW4KKy0gICAgKmFjX3NwYWNlPVwgKikKKysgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPSdcJycgJ1wnJzsgc2V0KSAyPiYxYCBpbiAjKAorKyAgICAqJHthc19ubH1hY19zcGFjZT1cICopCisgICAgICAgc2VkIC1uIFwKKy0JInMvJyInIicvJyInIidcXFxcJyInIicnIiciJy9nOworLQkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9JyInIidcXDInIiciJy9wIgorLSAgICAgIDs7CisrCSJzLydcJycvJ1wnJ1xcXFwnXCcnJ1wnJy9nOworKwkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1wnJ1xcMidcJycvcCIKKysgICAgICA7OyAjKAorICAgICAqKQorLSAgICAgIHNlZCAtbiBcCistCSJzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPVxcMi9wIgorKyAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCisgICAgICAgOzsKKy0gICAgZXNhYzsKKy19CisrICAgIGVzYWMgfAorKyAgICBzb3J0CisrKQorICAgICBlY2hvCisgCisgICAgIGNhdCA8PFxfQVNCT1gKK0BAIC0xMzQwLDIyICsxNzk5LDI4IEBACisgICAgIGVjaG8KKyAgICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfdmFycworICAgICBkbworLSAgICAgIGV2YWwgYWNfdmFsPSRgZWNobyAkYWNfdmFyYAorLSAgICAgIGVjaG8gIiRhY192YXI9JyInIickYWNfdmFsJyInIiciCisrICAgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisrICAgICAgY2FzZSAkYWNfdmFsIGluCisrICAgICAgKlwnXCcnKikgYWNfdmFsPWBlY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CisrICAgICAgZXNhYworKyAgICAgIGVjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgorICAgICBkb25lIHwgc29ydAorICAgICBlY2hvCisgCisgICAgIGlmIHRlc3QgLW4gIiRhY19zdWJzdF9maWxlcyI7IHRoZW4KKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLSAjIworLSMjIE91dHB1dCBmaWxlcy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIEZpbGUgc3Vic3RpdHV0aW9ucy4gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICAgZWNobworICAgICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X2ZpbGVzCisgICAgICAgZG8KKy0JZXZhbCBhY192YWw9JGBlY2hvICRhY192YXJgCistCWVjaG8gIiRhY192YXI9JyInIickYWNfdmFsJyInIiciCisrCWV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorKwljYXNlICRhY192YWwgaW4KKysJKlwnXCcnKikgYWNfdmFsPWBlY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CisrCWVzYWMKKysJZWNobyAiJGFjX3Zhcj0nXCcnJGFjX3ZhbCdcJyciCisgICAgICAgZG9uZSB8IHNvcnQKKyAgICAgICBlY2hvCisgICAgIGZpCitAQCAtMTM2NywyNiArMTgzMiwyNCBAQAorICMjIC0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICAgZWNobworLSAgICAgIHNlZCAiL14kL2QiIGNvbmZkZWZzLmggfCBzb3J0CisrICAgICAgY2F0IGNvbmZkZWZzLmgKKyAgICAgICBlY2hvCisgICAgIGZpCisgICAgIHRlc3QgIiRhY19zaWduYWwiICE9IDAgJiYKKyAgICAgICBlY2hvICIkYXNfbWU6IGNhdWdodCBzaWduYWwgJGFjX3NpZ25hbCIKKyAgICAgZWNobyAiJGFzX21lOiBleGl0ICRleGl0X3N0YXR1cyIKKyAgIH0gPiY1CistICBybSAtZiBjb3JlICouY29yZSAmJgorLSAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mZGVmcyogY29uZiQkKiAkYWNfY2xlYW5fZmlsZXMgJiYKKysgIHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiAmJgorKyAgICBybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMqIGNvbmYkJCogJGFjX2NsZWFuX2ZpbGVzICYmCisgICAgIGV4aXQgJGV4aXRfc3RhdHVzCistICAgICAnIDAKKysnIDAKKyBmb3IgYWNfc2lnbmFsIGluIDEgMiAxMyAxNTsgZG8KKyAgIHRyYXAgJ2FjX3NpZ25hbD0nJGFjX3NpZ25hbCc7IHsgKGV4aXQgMSk7IGV4aXQgMTsgfScgJGFjX3NpZ25hbAorIGRvbmUKKyBhY19zaWduYWw9MAorIAorICMgY29uZmRlZnMuaCBhdm9pZHMgT1MgY29tbWFuZCBsaW5lIGxlbmd0aCBsaW1pdHMgdGhhdCBERUZTIGNhbiBleGNlZWQuCistcm0gLXJmIGNvbmZ0ZXN0KiBjb25mZGVmcy5oCistIyBBSVggY3BwIGxvc2VzIG9uIGFuIGVtcHR5IGZpbGUsIHNvIG1ha2Ugc3VyZSBpdCBjb250YWlucyBhdCBsZWFzdCBhIG5ld2xpbmUuCistZWNobyA+Y29uZmRlZnMuaAorK3JtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcy5oCisgCisgIyBQcmVkZWZpbmVkIHByZXByb2Nlc3NvciB2YXJpYWJsZXMuCisgCitAQCAtMTQxNywxNCArMTg4MCwxNyBAQAorIAorICMgTGV0IHRoZSBzaXRlIGZpbGUgc2VsZWN0IGFuIGFsdGVybmF0ZSBjYWNoZSBmaWxlIGlmIGl0IHdhbnRzIHRvLgorICMgUHJlZmVyIGV4cGxpY2l0bHkgc2VsZWN0ZWQgZmlsZSB0byBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIG9uZXMuCistaWYgdGVzdCAteiAiJENPTkZJR19TSVRFIjsgdGhlbgorLSAgaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCistICAgIENPTkZJR19TSVRFPSIkcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlICRwcmVmaXgvZXRjL2NvbmZpZy5zaXRlIgorLSAgZWxzZQorLSAgICBDT05GSUdfU0lURT0iJGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlICRhY19kZWZhdWx0X3ByZWZpeC9ldGMvY29uZmlnLnNpdGUiCistICBmaQorK2lmIHRlc3QgLW4gIiRDT05GSUdfU0lURSI7IHRoZW4KKysgIHNldCB4ICIkQ09ORklHX1NJVEUiCisrZWxpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKysgIHNldCB4ICIkcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlIiAiJHByZWZpeC9ldGMvY29uZmlnLnNpdGUiCisrZWxzZQorKyAgc2V0IHggIiRhY19kZWZhdWx0X3ByZWZpeC9zaGFyZS9jb25maWcuc2l0ZSIgXAorKwkiJGFjX2RlZmF1bHRfcHJlZml4L2V0Yy9jb25maWcuc2l0ZSIKKyBmaQorLWZvciBhY19zaXRlX2ZpbGUgaW4gJENPTkZJR19TSVRFOyBkbworK3NoaWZ0CisrZm9yIGFjX3NpdGVfZmlsZQorK2RvCisgICBpZiB0ZXN0IC1yICIkYWNfc2l0ZV9maWxlIjsgdGhlbgorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNQorIGVjaG8gIiRhc19tZTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjY7fQorQEAgLTE0NDAsOCArMTkwNiw4IEBACisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorIGVjaG8gIiRhc19tZTogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICAgY2FzZSAkY2FjaGVfZmlsZSBpbgorLSAgICAgIFtcXC9dKiB8ID86W1xcL10qICkgLiAkY2FjaGVfZmlsZTs7CistICAgICAgKikgICAgICAgICAgICAgICAgICAgICAgLiAuLyRjYWNoZV9maWxlOzsKKysgICAgICBbXFwvXSogfCA/OltcXC9dKiApIC4gIiRjYWNoZV9maWxlIjs7CisrICAgICAgKikgICAgICAgICAgICAgICAgICAgICAgLiAiLi8kY2FjaGVfZmlsZSI7OworICAgICBlc2FjCisgICBmaQorIGVsc2UKK0BAIC0xNDUzLDEyICsxOTE5LDExIEBACisgIyBDaGVjayB0aGF0IHRoZSBwcmVjaW91cyB2YXJpYWJsZXMgc2F2ZWQgaW4gdGhlIGNhY2hlIGhhdmUga2VwdCB0aGUgc2FtZQorICMgdmFsdWUuCisgYWNfY2FjaGVfY29ycnVwdGVkPWZhbHNlCistZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8CistCSAgICAgICBzZWQgLW4gJ3MvXmFjX2Vudl9cKFthLXpBLVpfMC05XSpcKV9zZXQ9LiovXDEvcCdgOyBkbworK2ZvciBhY192YXIgaW4gJGFjX3ByZWNpb3VzX3ZhcnM7IGRvCisgICBldmFsIGFjX29sZF9zZXQ9XCRhY19jdl9lbnZfJHthY192YXJ9X3NldAorICAgZXZhbCBhY19uZXdfc2V0PVwkYWNfZW52XyR7YWNfdmFyfV9zZXQKKy0gIGV2YWwgYWNfb2xkX3ZhbD0iXCRhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlIgorLSAgZXZhbCBhY19uZXdfdmFsPSJcJGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWUiCisrICBldmFsIGFjX29sZF92YWw9XCRhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlCisrICBldmFsIGFjX25ld192YWw9XCRhY19lbnZfJHthY192YXJ9X3ZhbHVlCisgICBjYXNlICRhY19vbGRfc2V0LCRhY19uZXdfc2V0IGluCisgICAgIHNldCwpCisgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKK0BAIC0xNDgzLDggKzE5NDgsNyBAQAorICAgIyBQYXNzIHByZWNpb3VzIHZhcmlhYmxlcyB0byBjb25maWcuc3RhdHVzLgorICAgaWYgdGVzdCAiJGFjX25ld19zZXQiID0gc2V0OyB0aGVuCisgICAgIGNhc2UgJGFjX25ld192YWwgaW4KKy0gICAgKiIgIip8KiIJIip8KltcW1xdXH5cI1wkXF5cJlwqXChcKVx7XH1cXFx8XDtcPFw+XD9cIlwnXSopCistICAgICAgYWNfYXJnPSRhY192YXI9YGVjaG8gIiRhY19uZXdfdmFsIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworKyAgICAqXCcqKSBhY19hcmc9JGFjX3Zhcj1gZWNobyAiJGFjX25ld192YWwiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgICopIGFjX2FyZz0kYWNfdmFyPSRhY19uZXdfdmFsIDs7CisgICAgIGVzYWMKKyAgICAgY2FzZSAiICRhY19jb25maWd1cmVfYXJncyAiIGluCitAQCAtMTUwMSwxMiArMTk2NSw2IEBACisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgZmkKKyAKKy1hY19leHQ9YworLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCistYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCistYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorLQorIAorIAorIAorQEAgLTE1MzEsNjcgKzE5ODksOTIgQEAKKyAKKyAKKyAKKythY19leHQ9YworK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCisrYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisrYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorIAorIAorIAorIAorIGFjX2F1eF9kaXI9CistZm9yIGFjX2RpciBpbiAuLi8uLi8uLiAkc3JjZGlyLy4uLy4uLy4uOyBkbworLSAgaWYgdGVzdCAtZiAkYWNfZGlyL2luc3RhbGwtc2g7IHRoZW4KKytmb3IgYWNfZGlyIGluIC4uLy4uLy4uICIkc3JjZGlyIi8uLi8uLi8uLjsgZG8KKysgIGlmIHRlc3QgLWYgIiRhY19kaXIvaW5zdGFsbC1zaCI7IHRoZW4KKyAgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwtc2ggLWMiCisgICAgIGJyZWFrCistICBlbGlmIHRlc3QgLWYgJGFjX2Rpci9pbnN0YWxsLnNoOyB0aGVuCisrICBlbGlmIHRlc3QgLWYgIiRhY19kaXIvaW5zdGFsbC5zaCI7IHRoZW4KKyAgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwuc2ggLWMiCisgICAgIGJyZWFrCistICBlbGlmIHRlc3QgLWYgJGFjX2Rpci9zaHRvb2w7IHRoZW4KKysgIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9zaHRvb2wiOyB0aGVuCisgICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9zaHRvb2wgaW5zdGFsbCAtYyIKKyAgICAgYnJlYWsKKyAgIGZpCisgZG9uZQorIGlmIHRlc3QgLXogIiRhY19hdXhfZGlyIjsgdGhlbgorLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5zdGFsbC1zaCBvciBpbnN0YWxsLnNoIGluIC4uLy4uLy4uICRzcmNkaXIvLi4vLi4vLi4iID4mNQorLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGluc3RhbGwtc2ggb3IgaW5zdGFsbC5zaCBpbiAuLi8uLi8uLiAkc3JjZGlyLy4uLy4uLy4uIiA+JjI7fQorKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5zdGFsbC1zaCBvciBpbnN0YWxsLnNoIGluIC4uLy4uLy4uIFwiJHNyY2RpclwiLy4uLy4uLy4uIiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnN0YWxsLXNoIG9yIGluc3RhbGwuc2ggaW4gLi4vLi4vLi4gXCIkc3JjZGlyXCIvLi4vLi4vLi4iID4mMjt9CisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgZmkKKy1hY19jb25maWdfZ3Vlc3M9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiCistYWNfY29uZmlnX3N1Yj0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiCistYWNfY29uZmlndXJlPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlndXJlIiAjIFRoaXMgc2hvdWxkIGJlIEN5Z251cyBjb25maWd1cmUuCisrCisrIyBUaGVzZSB0aHJlZSB2YXJpYWJsZXMgYXJlIHVuZG9jdW1lbnRlZCBhbmQgdW5zdXBwb3J0ZWQsCisrIyBhbmQgYXJlIGludGVuZGVkIHRvIGJlIHdpdGhkcmF3biBpbiBhIGZ1dHVyZSBBdXRvY29uZiByZWxlYXNlLgorKyMgVGhleSBjYW4gY2F1c2Ugc2VyaW91cyBwcm9ibGVtcyBpZiBhIGJ1aWxkZXIncyBzb3VyY2UgdHJlZSBpcyBpbiBhIGRpcmVjdG9yeQorKyMgd2hvc2UgZnVsbCBuYW1lIGNvbnRhaW5zIHVudXN1YWwgY2hhcmFjdGVycy4KKythY19jb25maWdfZ3Vlc3M9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCisrYWNfY29uZmlnX3N1Yj0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCisrYWNfY29uZmlndXJlPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlndXJlIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorKworIAorIAorIAorICMgTWFrZSBzdXJlIHdlIGNhbiBydW4gY29uZmlnLnN1Yi4KKy0kYWNfY29uZmlnX3N1YiBzdW40ID4vZGV2L251bGwgMj4mMSB8fAorLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IHJ1biAkYWNfY29uZmlnX3N1YiIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biAkYWNfY29uZmlnX3N1YiIgPiYyO30KKyskU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiIHN1bjQgPi9kZXYvbnVsbCAyPiYxIHx8CisrICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgcnVuICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiA+JjI7fQorICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorIAorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZS4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZSIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZS4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X2J1aWxkK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGFjX2N2X2J1aWxkX2FsaWFzPSRidWlsZF9hbGlhcworLXRlc3QgLXogIiRhY19jdl9idWlsZF9hbGlhcyIgJiYKKy0gIGFjX2N2X2J1aWxkX2FsaWFzPWAkYWNfY29uZmlnX2d1ZXNzYAorLXRlc3QgLXogIiRhY19jdl9idWlsZF9hbGlhcyIgJiYKKysgIGFjX2J1aWxkX2FsaWFzPSRidWlsZF9hbGlhcworK3Rlc3QgIngkYWNfYnVpbGRfYWxpYXMiID0geCAmJgorKyAgYWNfYnVpbGRfYWxpYXM9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzImAKKyt0ZXN0ICJ4JGFjX2J1aWxkX2FsaWFzIiA9IHggJiYKKyAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBndWVzcyBidWlsZCB0eXBlOyB5b3UgbXVzdCBzcGVjaWZ5IG9uZSIgPiY1CisgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiA+JjI7fQorICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorLWFjX2N2X2J1aWxkPWAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfYnVpbGRfYWxpYXNgIHx8CistICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfYnVpbGRfYWxpYXMgZmFpbGVkIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfYnVpbGRfYWxpYXMgZmFpbGVkIiA+JjI7fQorK2FjX2N2X2J1aWxkPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICRhY19idWlsZF9hbGlhc2AgfHwKKysgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRhY19idWlsZF9hbGlhcyBmYWlsZWQiID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRhY19idWlsZF9hbGlhcyBmYWlsZWQiID4mMjt9CisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgCisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfYnVpbGQiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9idWlsZCIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfYnVpbGQiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdl9idWlsZCIgPiY2OyB9CisrY2FzZSAkYWNfY3ZfYnVpbGQgaW4KKysqLSotKikgOzsKKysqKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBidWlsZCIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgYnVpbGQiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKytlc2FjCisgYnVpbGQ9JGFjX2N2X2J1aWxkCistYnVpbGRfY3B1PWBlY2hvICRhY19jdl9idWlsZCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCistYnVpbGRfdmVuZG9yPWBlY2hvICRhY19jdl9idWlsZCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wyLydgCistYnVpbGRfb3M9YGVjaG8gJGFjX2N2X2J1aWxkIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKKythY19zYXZlX0lGUz0kSUZTOyBJRlM9Jy0nCisrc2V0IHggJGFjX2N2X2J1aWxkCisrc2hpZnQKKytidWlsZF9jcHU9JDEKKytidWlsZF92ZW5kb3I9JDIKKytzaGlmdDsgc2hpZnQKKysjIFJlbWVtYmVyLCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIElGUyBpcyB1c2VkIHRvIGNyZWF0ZSAkKiwKKysjIGV4Y2VwdCB3aXRoIG9sZCBzaGVsbHM6CisrYnVpbGRfb3M9JCoKKytJRlM9JGFjX3NhdmVfSUZTCisrY2FzZSAkYnVpbGRfb3MgaW4gKlwgKikgYnVpbGRfb3M9YGVjaG8gIiRidWlsZF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKKyAKKyAKKyBhbV9fYXBpX3ZlcnNpb249IjEuOSIKK0BAIC0xNjA4LDggKzIwOTEsOCBAQAorICMgU1ZSNCAvdXNyL3VjYi9pbnN0YWxsLCB3aGljaCB0cmllcyB0byB1c2UgdGhlIG5vbmV4aXN0ZW50IGdyb3VwICJzdGFmZiIKKyAjIE9TLzIncyBzeXN0ZW0gaW5zdGFsbCwgd2hpY2ggaGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc2VtYW50aWMKKyAjIC4vaW5zdGFsbCwgd2hpY2ggY2FuIGJlIGVycm9uZW91c2x5IGNyZWF0ZWQgYnkgbWFrZSBmcm9tIC4vaW5zdGFsbC5zaC4KKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0IC16ICIkSU5TVEFMTCI7IHRoZW4KKyBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK0BAIC0xNjMxLDcgKzIxMTQsNyBAQAorICAgICAjIGJ5IGRlZmF1bHQuCisgICAgIGZvciBhY19wcm9nIGluIGdpbnN0YWxsIHNjb2luc3QgaW5zdGFsbDsgZG8KKyAgICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0JaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCI7IHRoZW4KKysJaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorIAkgIGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisgCSAgICBncmVwIGRzcG1zZyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgCSAgICAjIEFJWCBpbnN0YWxsLiAgSXQgaGFzIGFuIGluY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZlbnRpb24uCitAQCAtMTY1MCwyMSArMjEzMywyMiBAQAorICAgICA7OworIGVzYWMKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorIAorIGZpCisgICBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbgorICAgICBJTlNUQUxMPSRhY19jdl9wYXRoX2luc3RhbGwKKyAgIGVsc2UKKy0gICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgV2UgZG9uJ3QgY2FjaGUgYQorLSAgICAjIHBhdGggZm9yIElOU1RBTEwgd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKysgICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgRG9uJ3QgY2FjaGUgYQorKyAgICAjIHZhbHVlIGZvciBJTlNUQUxMIHdpdGhpbiBhIHNvdXJjZSBkaXJlY3RvcnksIGJlY2F1c2UgdGhhdCB3aWxsCisgICAgICMgYnJlYWsgb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhlIGNhY2hlIGlmIHRoYXQgZGlyZWN0b3J5IGlzCistICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHBhdGggaXMgcmVsYXRpdmUuCisrICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVsYXRpdmUgbmFtZS4KKyAgICAgSU5TVEFMTD0kYWNfaW5zdGFsbF9zaAorICAgZmkKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRJTlNUQUxMIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kSU5TVEFMTCIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkSU5TVEFMTCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JElOU1RBTEwiID4mNjsgfQorIAorICMgVXNlIHRlc3QgLXogYmVjYXVzZSBTdW5PUzQgc2ggbWlzaGFuZGxlcyBicmFjZXMgaW4gJHt2YXItdmFsfS4KKyAjIEl0IHRoaW5rcyB0aGUgZmlyc3QgY2xvc2UgYnJhY2UgZW5kcyB0aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9uLgorQEAgLTE2NzQsOCArMjE1OCw4IEBACisgCisgdGVzdCAteiAiJElOU1RBTExfREFUQSIgJiYgSU5TVEFMTF9EQVRBPScke0lOU1RBTEx9IC1tIDY0NCcKKyAKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZS4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lLi4uICRFQ0hPX0MiID4mNjsgfQorICMgSnVzdCBpbiBjYXNlCisgc2xlZXAgMQorIGVjaG8gdGltZXN0YW1wID4gY29uZnRlc3QuZmlsZQorQEAgLTE3MTcsMjAgKzIyMDEsMjAgQEAKKyBDaGVjayB5b3VyIHN5c3RlbSBjbG9jayIgPiYyO30KKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KKyB0ZXN0ICIkcHJvZ3JhbV9wcmVmaXgiICE9IE5PTkUgJiYKKy0gIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9InMsXiwkcHJvZ3JhbV9wcmVmaXgsOyRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIgorKyAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0icyZeJiRwcm9ncmFtX3ByZWZpeCY7JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiCisgIyBVc2UgYSBkb3VibGUgJCBzbyBtYWtlIGlnbm9yZXMgaXQuCisgdGVzdCAiJHByb2dyYW1fc3VmZml4IiAhPSBOT05FICYmCistICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzLFwkLCRwcm9ncmFtX3N1ZmZpeCw7JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiCisrICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzJlwkJiRwcm9ncmFtX3N1ZmZpeCY7JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiCisgIyBEb3VibGUgYW55IFwgb3IgJC4gIGVjaG8gbWlnaHQgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgorICMgQnkgZGVmYXVsdCB3YXMgYHMseCx4JywgcmVtb3ZlIGl0IGlmIHVzZWxlc3MuCisgY2F0IDw8XF9BQ0VPRiA+Y29uZnRlc3Quc2VkCisgcy9bXFwkXS8mJi9nO3MvO3MseCx4LCQvLworIF9BQ0VPRgorIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9YGVjaG8gJHByb2dyYW1fdHJhbnNmb3JtX25hbWUgfCBzZWQgLWYgY29uZnRlc3Quc2VkYAorLXJtIGNvbmZ0ZXN0LnNlZAorK3JtIC1mIGNvbmZ0ZXN0LnNlZAorIAorICMgZXhwYW5kICRhY19hdXhfZGlyIHRvIGFuIGFic29sdXRlIHBhdGgKKyBhbV9hdXhfZGlyPWBjZCAkYWNfYXV4X2RpciAmJiBwd2RgCitAQCAtMTc4Miw4ICsyMjY2LDggQEAKKyBkbworICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVdLK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0xNzk2LDU0ICsyMjgwLDU3IEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX0FXSz0iJGFjX3Byb2ciCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgQVdLPSRhY19jdl9wcm9nX0FXSworIGlmIHRlc3QgLW4gIiRBV0siOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQVdLIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kQVdLIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJEFXSyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JEFXSyIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorKworICAgdGVzdCAtbiAiJEFXSyIgJiYgYnJlYWsKKyBkb25lCisgCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKS4uLiAkRUNIT19DIiA+JjYKKy1zZXQgZHVtbXkgJHtNQUtFLW1ha2V9OyBhY19tYWtlPWBlY2hvICIkMiIgfCBzZWQgJ3ksOi4vKy0sX19fcF8sJ2AKKy1pZiBldmFsICJ0ZXN0IFwiXCR7YWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0K3NldH1cIiA9IHNldCI7IHRoZW4KKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkuLi4gJEVDSE9fQyIgPiY2OyB9Cisrc2V0IHggJHtNQUtFLW1ha2V9OyBhY19tYWtlPWBlY2hvICIkMiIgfCBzZWQgJ3MvKy9wL2c7IHMvW15hLXpBLVowLTlfXS9fL2cnYAorK2lmIHsgYXNfdmFyPWFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldDsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0Lm1ha2UgPDxcX0FDRU9GCisrU0hFTEwgPSAvYmluL3NoCisgYWxsOgorLQlAZWNobyAnYWNfbWFrZXRlbXA9IiQoTUFLRSkiJworKwlAZWNobyAnQEBAJSUlPSQoTUFLRSk9QEBAJSUlJworIF9BQ0VPRgorICMgR05VIG1ha2Ugc29tZXRpbWVzIHByaW50cyAibWFrZVsxXTogRW50ZXJpbmcuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgorLWV2YWwgYCR7TUFLRS1tYWtlfSAtZiBjb25mdGVzdC5tYWtlIDI+L2Rldi9udWxsIHwgZ3JlcCB0ZW1wPWAKKy1pZiB0ZXN0IC1uICIkYWNfbWFrZXRlbXAiOyB0aGVuCistICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD15ZXMKKy1lbHNlCistICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD1ubworLWZpCisrY2FzZSBgJHtNQUtFLW1ha2V9IC1mIGNvbmZ0ZXN0Lm1ha2UgMj4vZGV2L251bGxgIGluCisrICAqQEBAJSUlPT8qPUBAQCUlJSopCisrICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PXllczs7CisrICAqKQorKyAgICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD1ubzs7CisrZXNhYworIHJtIC1mIGNvbmZ0ZXN0Lm1ha2UKKyBmaQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X3Byb2dfbWFrZV8nJHthY19tYWtlfV9zZXRgXCIgPSB5ZXMiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2CisraWYgZXZhbCB0ZXN0IFwkYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0ID0geWVzOyB0aGVuCisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KKyAgIFNFVF9NQUtFPQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgICBTRVRfTUFLRT0iTUFLRT0ke01BS0UtbWFrZX0iCisgZmkKKyAKK0BAIC0xODU4LDcgKzIzNDUsNyBAQAorIAorIERFUERJUj0iJHthbV9fbGVhZGluZ19kb3R9ZGVwcyIKKyAKKy0gICAgICAgICAgYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIGRlcGZpbGVzIgorK2FjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBkZXBmaWxlcyIKKyAKKyAKKyBhbV9tYWtlPSR7TUFLRS1tYWtlfQorQEAgLTE4NjgsOCArMjM1NSw4IEBACisgLlBIT05ZOiBhbV9fZG9pdAorIEVORAorICMgSWYgd2UgZG9uJ3QgZmluZCBhbiBpbmNsdWRlIGRpcmVjdGl2ZSwganVzdCBjb21tZW50IG91dCB0aGUgY29kZS4KKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdHlsZSBvZiBpbmNsdWRlIHVzZWQgYnkgJGFtX21ha2UiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZS4uLiAkRUNIT19DIiA+JjY7IH0KKyBhbV9faW5jbHVkZT0iIyIKKyBhbV9fcXVvdGU9CisgX2FtX3Jlc3VsdD1ub25lCitAQCAtMTg5NiwxNSArMjM4MywxNSBAQAorIGZpCisgCisgCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJF9hbV9yZXN1bHQiID4mNQorLWVjaG8gIiR7RUNIT19UfSRfYW1fcmVzdWx0IiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRfYW1fcmVzdWx0IiA+JjUKKytlY2hvICIke0VDSE9fVH0kX2FtX3Jlc3VsdCIgPiY2OyB9Cisgcm0gLWYgY29uZmluYyBjb25mbWYKKyAKKy0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyBvciAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyB3YXMgZ2l2ZW4uCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmcrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVuYWJsZXZhbD0iJGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIgorKyAgZW5hYmxldmFsPSRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZzsKKytmaQorIAorLWZpOworIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgorICAgYW1fZGVwY29tcD0iJGFjX2F1eF9kaXIvZGVwY29tcCIKKyAgIEFNREVQQkFDS1NMQVNIPSdcJworQEAgLTE5MjIsMTAgKzI0MDksOSBAQAorIAorIAorIAorLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tdWx0aWxpYiBvciAtLWRpc2FibGUtbXVsdGlsaWIgd2FzIGdpdmVuLgorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tdWx0aWxpYiB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfbXVsdGlsaWIrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVuYWJsZXZhbD0iJGVuYWJsZV9tdWx0aWxpYiIKKy0gIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX211bHRpbGliOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICB5ZXMpIG11bHRpbGliPXllcyA7OworICAgbm8pICBtdWx0aWxpYj1ubyA7OworICAgKikgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciBtdWx0aWxpYiBvcHRpb24iID4mNQorQEAgLTE5MzQsMTEgKzI0MjAsMTEgQEAKKyAgZXNhYworIGVsc2UKKyAgIG11bHRpbGliPXllcworLWZpOworLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10YXJnZXQtb3B0c3BhY2Ugb3IgLS1kaXNhYmxlLXRhcmdldC1vcHRzcGFjZSB3YXMgZ2l2ZW4uCisrZmkKKysKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdGFyZ2V0LW9wdHNwYWNlIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV90YXJnZXRfb3B0c3BhY2Urc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVuYWJsZXZhbD0iJGVuYWJsZV90YXJnZXRfb3B0c3BhY2UiCistICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICBlbmFibGV2YWw9JGVuYWJsZV90YXJnZXRfb3B0c3BhY2U7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgIHllcykgdGFyZ2V0X29wdHNwYWNlPXllcyA7OworICAgbm8pICB0YXJnZXRfb3B0c3BhY2U9bm8gOzsKKyAgICopICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgdGFyZ2V0LW9wdHNwYWNlIG9wdGlvbiIgPiY1CitAQCAtMTk0NywxMSArMjQzMywxMSBAQAorICBlc2FjCisgZWxzZQorICAgdGFyZ2V0X29wdHNwYWNlPQorLWZpOworLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tYWxsb2MtZGVidWdnaW5nIG9yIC0tZGlzYWJsZS1tYWxsb2MtZGVidWdnaW5nIHdhcyBnaXZlbi4KKytmaQorKworKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tYWxsb2MtZGVidWdnaW5nIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9tYWxsb2NfZGVidWdnaW5nK3NldH0iID0gc2V0OyB0aGVuCistICBlbmFibGV2YWw9IiRlbmFibGVfbWFsbG9jX2RlYnVnZ2luZyIKKy0gIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX21hbGxvY19kZWJ1Z2dpbmc7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgIHllcykgbWFsbG9jX2RlYnVnZ2luZz15ZXMgOzsKKyAgIG5vKSAgbWFsbG9jX2RlYnVnZ2luZz1ubyA7OworICAgKikgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciBtYWxsb2MtZGVidWdnaW5nIG9wdGlvbiIgPiY1CitAQCAtMTk2MCwxMSArMjQ0NiwxMSBAQAorICBlc2FjCisgZWxzZQorICAgbWFsbG9jX2RlYnVnZ2luZz0KKy1maTsKKy0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbmV3bGliLW11bHRpdGhyZWFkIG9yIC0tZGlzYWJsZS1uZXdsaWItbXVsdGl0aHJlYWQgd2FzIGdpdmVuLgorK2ZpCisrCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5ld2xpYi1tdWx0aXRocmVhZCB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfbmV3bGliX211bHRpdGhyZWFkK3NldH0iID0gc2V0OyB0aGVuCistICBlbmFibGV2YWw9IiRlbmFibGVfbmV3bGliX211bHRpdGhyZWFkIgorLSAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgZW5hYmxldmFsPSRlbmFibGVfbmV3bGliX211bHRpdGhyZWFkOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICB5ZXMpIG5ld2xpYl9tdWx0aXRocmVhZD15ZXMgOzsKKyAgIG5vKSAgbmV3bGliX211bHRpdGhyZWFkPW5vIDs7CisgICAqKSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIG5ld2xpYi1tdWx0aXRocmVhZCBvcHRpb24iID4mNQorQEAgLTE5NzMsMTEgKzI0NTksMTEgQEAKKyAgZXNhYworIGVsc2UKKyAgIG5ld2xpYl9tdWx0aXRocmVhZD15ZXMKKy1maTsKKy0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbmV3bGliLWljb252IG9yIC0tZGlzYWJsZS1uZXdsaWItaWNvbnYgd2FzIGdpdmVuLgorK2ZpCisrCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5ld2xpYi1pY29udiB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfbmV3bGliX2ljb252K3NldH0iID0gc2V0OyB0aGVuCistICBlbmFibGV2YWw9IiRlbmFibGVfbmV3bGliX2ljb252IgorLSAgaWYgdGVzdCAiJHtuZXdsaWJfaWNvbnYrc2V0fSIgIT0gc2V0OyB0aGVuCisrICBlbmFibGV2YWw9JGVuYWJsZV9uZXdsaWJfaWNvbnY7IGlmIHRlc3QgIiR7bmV3bGliX2ljb252K3NldH0iICE9IHNldDsgdGhlbgorICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgIHllcykgbmV3bGliX2ljb252PXllcyA7OworICAgICAgbm8pICBuZXdsaWJfaWNvbnY9bm8gOzsKK0BAIC0xOTg4LDExICsyNDc0LDExIEBACisgIGZpCisgZWxzZQorICAgbmV3bGliX2ljb252PSR7bmV3bGliX2ljb252fQorLWZpOworLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1uZXdsaWItZWxpeC1sZXZlbCBvciAtLWRpc2FibGUtbmV3bGliLWVsaXgtbGV2ZWwgd2FzIGdpdmVuLgorK2ZpCisrCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5ld2xpYi1lbGl4LWxldmVsIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9uZXdsaWJfZWxpeF9sZXZlbCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSIkZW5hYmxlX25ld2xpYl9lbGl4X2xldmVsIgorLSAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgZW5hYmxldmFsPSRlbmFibGVfbmV3bGliX2VsaXhfbGV2ZWw7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgIDApICAgbmV3bGliX2VsaXhfbGV2ZWw9MCA7OworICAgMSkgICBuZXdsaWJfZWxpeF9sZXZlbD0xIDs7CisgICAyKSAgIG5ld2xpYl9lbGl4X2xldmVsPTIgOzsKK0BAIC0yMDA0LDExICsyNDkwLDExIEBACisgIGVzYWMKKyBlbHNlCisgICBuZXdsaWJfZWxpeF9sZXZlbD0wCistZmk7CistIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5ld2xpYi1pby1mbG9hdCBvciAtLWRpc2FibGUtbmV3bGliLWlvLWZsb2F0IHdhcyBnaXZlbi4KKytmaQorKworKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1uZXdsaWItaW8tZmxvYXQgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX25ld2xpYl9pb19mbG9hdCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSIkZW5hYmxlX25ld2xpYl9pb19mbG9hdCIKKy0gIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX25ld2xpYl9pb19mbG9hdDsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgeWVzKSBuZXdsaWJfaW9fZmxvYXQ9eWVzIDs7CisgICBubykgIG5ld2xpYl9pb19mbG9hdD1ubyA7OworICAgKikgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciBuZXdsaWItaW8tZmxvYXQgb3B0aW9uIiA+JjUKK0BAIC0yMDE3LDExICsyNTAzLDExIEBACisgIGVzYWMKKyBlbHNlCisgICBuZXdsaWJfaW9fZmxvYXQ9eWVzCistZmk7CistIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5ld2xpYi1zdXBwbGllZC1zeXNjYWxscyBvciAtLWRpc2FibGUtbmV3bGliLXN1cHBsaWVkLXN5c2NhbGxzIHdhcyBnaXZlbi4KKytmaQorKworKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1uZXdsaWItc3VwcGxpZWQtc3lzY2FsbHMgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX25ld2xpYl9zdXBwbGllZF9zeXNjYWxscytzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSIkZW5hYmxlX25ld2xpYl9zdXBwbGllZF9zeXNjYWxscyIKKy0gIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX25ld2xpYl9zdXBwbGllZF9zeXNjYWxsczsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgeWVzKSBuZXdsaWJfbWF5X3N1cHBseV9zeXNjYWxscz15ZXMgOzsKKyAgIG5vKSAgbmV3bGliX21heV9zdXBwbHlfc3lzY2FsbHM9bm8gOzsKKyAgICopICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgbmV3bGliLXN1cHBsaWVkLXN5c2NhbGxzIG9wdGlvbiIgPiY1CitAQCAtMjAzMCw3ICsyNTE2LDggQEAKKyAgZXNhYworIGVsc2UKKyAgIG5ld2xpYl9tYXlfc3VwcGx5X3N5c2NhbGxzPXllcworLWZpOworK2ZpCisrCisgCisgCisgaWYgdGVzdCB4JHtuZXdsaWJfbWF5X3N1cHBseV9zeXNjYWxsc30gPSB4eWVzOyB0aGVuCitAQCAtMjA1NiwyNiArMjU0Myw0MSBAQAorIGZpCisgCisgCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZS4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9ob3N0K3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGFjX2N2X2hvc3RfYWxpYXM9JGhvc3RfYWxpYXMKKy10ZXN0IC16ICIkYWNfY3ZfaG9zdF9hbGlhcyIgJiYKKy0gIGFjX2N2X2hvc3RfYWxpYXM9JGFjX2N2X2J1aWxkX2FsaWFzCistYWNfY3ZfaG9zdD1gJGFjX2NvbmZpZ19zdWIgJGFjX2N2X2hvc3RfYWxpYXNgIHx8CistICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfaG9zdF9hbGlhcyBmYWlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogZXJyb3I6ICRhY19jb25maWdfc3ViICRhY19jdl9ob3N0X2FsaWFzIGZhaWxlZCIgPiYyO30KKysgIGlmIHRlc3QgIngkaG9zdF9hbGlhcyIgPSB4OyB0aGVuCisrICBhY19jdl9ob3N0PSRhY19jdl9idWlsZAorK2Vsc2UKKysgIGFjX2N2X2hvc3Q9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJGhvc3RfYWxpYXNgIHx8CisrICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRob3N0X2FsaWFzIGZhaWxlZCIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGhvc3RfYWxpYXMgZmFpbGVkIiA+JjI7fQorICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorK2ZpCisgCisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaG9zdCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hvc3QiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hvc3QiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdl9ob3N0IiA+JjY7IH0KKytjYXNlICRhY19jdl9ob3N0IGluCisrKi0qLSopIDs7CisrKikgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgaG9zdCIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgaG9zdCIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworK2VzYWMKKyBob3N0PSRhY19jdl9ob3N0CistaG9zdF9jcHU9YGVjaG8gJGFjX2N2X2hvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYAorLWhvc3RfdmVuZG9yPWBlY2hvICRhY19jdl9ob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDIvJ2AKKy1ob3N0X29zPWBlY2hvICRhY19jdl9ob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKKythY19zYXZlX0lGUz0kSUZTOyBJRlM9Jy0nCisrc2V0IHggJGFjX2N2X2hvc3QKKytzaGlmdAorK2hvc3RfY3B1PSQxCisraG9zdF92ZW5kb3I9JDIKKytzaGlmdDsgc2hpZnQKKysjIFJlbWVtYmVyLCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIElGUyBpcyB1c2VkIHRvIGNyZWF0ZSAkKiwKKysjIGV4Y2VwdCB3aXRoIG9sZCBzaGVsbHM6CisraG9zdF9vcz0kKgorK0lGUz0kYWNfc2F2ZV9JRlMKKytjYXNlICRob3N0X29zIGluICpcICopIGhvc3Rfb3M9YGVjaG8gIiRob3N0X29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYworIAorIAorIAorQEAgLTIxMjgsOCArMjYzMCw4IEBACisgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTIxNDIsMzIgKzI2NDQsMzQgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfU1RSSVA9IiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgU1RSSVA9JGFjX2N2X3Byb2dfU1RSSVAKKyBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkU1RSSVAiID4mNQorLWVjaG8gIiR7RUNIT19UfSRTVFJJUCIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRTVFJJUCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JFNUUklQIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCisrCisgZmkKKyBpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19TVFJJUCI7IHRoZW4KKyAgIGFjX2N0X1NUUklQPSRTVFJJUAorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJzdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15IHN0cmlwOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTIxODAsMjcgKzI2ODQsNDEgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9InN0cmlwIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCistICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9TVFJJUCIgJiYgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0iOiIKKyBmaQorIGZpCisgYWNfY3RfU1RSSVA9JGFjX2N2X3Byb2dfYWNfY3RfU1RSSVAKKyBpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfU1RSSVAiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdF9TVFJJUCIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9TVFJJUCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N0X1NUUklQIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCistICBTVFJJUD0kYWNfY3RfU1RSSVAKKysgIGlmIHRlc3QgIngkYWNfY3RfU1RSSVAiID0geDsgdGhlbgorKyAgICBTVFJJUD0iOiIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIFNUUklQPSRhY19jdF9TVFJJUAorKyAgZmkKKyBlbHNlCisgICBTVFJJUD0iJGFjX2N2X3Byb2dfU1RSSVAiCisgZmkKK0BAIC0yMjM1LDggKzI3NTMsOCBAQAorIAorICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgZ2NjOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTIyNDksMzAgKzI3NjcsMzIgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfQ0M9ImdjYyIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorIGZpCisgZmkKKyBDQz0kYWNfY3ZfcHJvZ19DQworIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JENDIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKKytlY2hvICIke0VDSE9fVH0kQ0MiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKyAKKysKKyBkZXBjYz0iJENDIiAgIGFtX2NvbXBpbGVyX2xpc3Q9CisgCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTIzNjEsOCArMjg4MSw4IEBACisgZmkKKyAKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjY7IH0KKyBDQ0RFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUKKyAKKyAKK0BAIC0yMzgxLDggKzI5MDEsOCBAQAorIGlmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSBjYzsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0yMzk2LDcgKzI5MTYsNyBAQAorICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICAgaWYgdGVzdCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPSAiL3Vzci91Y2IvY2MiOyB0aGVuCisgICAgICAgIGFjX3Byb2dfcmVqZWN0ZWQ9eWVzCisgICAgICAgIGNvbnRpbnVlCitAQCAtMjQwNyw2ICsyOTI3LDcgQEAKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCisgaWYgdGVzdCAkYWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbgorICAgIyBXZSBmb3VuZCBhIGJvZ29uIGluIHRoZSBwYXRoLCBzbyBtYWtlIHN1cmUgd2UgbmV2ZXIgdXNlIGl0LgorQEAgLTI0MjQsMjAgKzI5NDUsMjEgQEAKKyBmaQorIENDPSRhY19jdl9wcm9nX0NDCisgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kQ0MiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQorK2VjaG8gIiR7RUNIT19UfSRDQyIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorKworICAgdGVzdCAteiAiJENDIiAmJiB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBubyBhY2NlcHRhYmxlIGNjIGZvdW5kIGluIFwkUEFUSCIgPiY1CisgZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBjYyBmb3VuZCBpbiBcJFBBVEgiID4mMjt9CisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgZmkKKyAKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgR05VIEMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgR05VIEMuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgR05VIEMiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgR05VIEMuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9jX2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMjQ1Nyw4ICsyOTc5LDggQEAKKyAgIGFjX2N2X2NfY29tcGlsZXJfZ251PW5vCisgZmkKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjY7IH0KKyAKKyBpZiB0ZXN0ICRhY19jdl9jX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgorICAgR0NDPXllcworQEAgLTI0NjcsMTMgKzI5ODksMTYgQEAKKyAgIENGTEFHUz0KKyAgIGFjX3Rlc3RfQ0ZMQUdTPSR7Q0ZMQUdTK3NldH0KKyBhY19zYXZlX0NGTEFHUz0kQ0ZMQUdTCistQ0ZMQUdTPSItZyIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWciID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZy4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfZytzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysgIGFjX3NhdmVfY193ZXJyb3JfZmxhZz0kYWNfY193ZXJyb3JfZmxhZworKyAgIGFjX2Nfd2Vycm9yX2ZsYWc9eWVzCisrICAgYWNfY3ZfcHJvZ19jY19nPW5vCisrICAgQ0ZMQUdTPSItZyIKKysgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0yNDg5LDM4ICszMDE0LDExOCBAQAorIH0KKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICAgcm0gLWYgY29uZnRlc3QuZXIxCisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgIGFjX2N2X3Byb2dfY2NfZz15ZXMKKytlbHNlCisrICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysJQ0ZMQUdTPSIiCisrICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKytpbnQKKyttYWluICgpCisreworKworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisrICA6CisrZWxzZQorKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrCWFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZworKwkgQ0ZMQUdTPSItZyIKKysJIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgIGFjX2N2X3Byb2dfY2NfZz15ZXMKKyBlbHNlCisgICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKy1hY19jdl9wcm9nX2NjX2c9bm8KKysKKytmaQorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2ZpCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrICAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19nIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19jY19nIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2NjX2ciID4mNjsgfQorIGlmIHRlc3QgIiRhY190ZXN0X0NGTEFHUyIgPSBzZXQ7IHRoZW4KKyAgIENGTEFHUz0kYWNfc2F2ZV9DRkxBR1MKKyBlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY2NfZyA9IHllczsgdGhlbgorQEAgLTI1NTIsOCArMzE1Nyw4IEBACisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFzIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hczsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX0FTK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0yNTY2LDMyICszMTcxLDM0IEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX0FTPSIke2FjX3Rvb2xfcHJlZml4fWFzIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKyBmaQorIEFTPSRhY19jdl9wcm9nX0FTCisgaWYgdGVzdCAtbiAiJEFTIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJEFTIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kQVMiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQVMiID4mNQorK2VjaG8gIiR7RUNIT19UfSRBUyIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorKworIGZpCisgaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVMiOyB0aGVuCisgICBhY19jdF9BUz0kQVMKKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSBhczsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FTK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0yNjA0LDI2ICszMjExLDQxIEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX2FjX2N0X0FTPSJhcyIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorIGZpCisgZmkKKyBhY19jdF9BUz0kYWNfY3ZfcHJvZ19hY19jdF9BUworIGlmIHRlc3QgLW4gIiRhY19jdF9BUyI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9BUyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0FTIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0FTIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3RfQVMiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKy0gIEFTPSRhY19jdF9BUworKyAgaWYgdGVzdCAieCRhY19jdF9BUyIgPSB4OyB0aGVuCisrICAgIEFTPSIiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBBUz0kYWNfY3RfQVMKKysgIGZpCisgZWxzZQorICAgQVM9IiRhY19jdl9wcm9nX0FTIgorIGZpCitAQCAtMjYzMSw4ICszMjUzLDggQEAKKyBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTI2NDUsMzIgKzMyNjcsMzQgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgQVI9JGFjX2N2X3Byb2dfQVIKKyBpZiB0ZXN0IC1uICIkQVIiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQVIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRBUiIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRBUiIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JEFSIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCisrCisgZmkKKyBpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKyAgIGFjX2N0X0FSPSRBUgorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTI2ODMsMjYgKzMzMDcsNDEgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKyBmaQorIGFjX2N0X0FSPSRhY19jdl9wcm9nX2FjX2N0X0FSCisgaWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0FSIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3RfQVIiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQVIiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdF9BUiIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorLSAgQVI9JGFjX2N0X0FSCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KKysgICAgQVI9IiIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIEFSPSRhY19jdF9BUgorKyAgZmkKKyBlbHNlCisgICBBUj0iJGFjX2N2X3Byb2dfQVIiCisgZmkKK0BAIC0yNzEwLDggKzMzNDksOCBAQAorIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1yYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXJhbmxpYjsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX1JBTkxJQitzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMjcyNCwzMiArMzM2MywzNCBAQAorICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICAgYWNfY3ZfcHJvZ19SQU5MSUI9IiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKyBmaQorIFJBTkxJQj0kYWNfY3ZfcHJvZ19SQU5MSUIKKyBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFJBTkxJQiIgPiY1CistZWNobyAiJHtFQ0hPX1R9JFJBTkxJQiIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRSQU5MSUIiID4mNQorK2VjaG8gIiR7RUNIT19UfSRSQU5MSUIiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKysKKyBmaQorIGlmIHRlc3QgLXogIiRhY19jdl9wcm9nX1JBTkxJQiI7IHRoZW4KKyAgIGFjX2N0X1JBTkxJQj0kUkFOTElCCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15IHJhbmxpYjsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1JBTkxJQitzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMjc2MiwyNyArMzQwMyw0MSBAQAorICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9InJhbmxpYiIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorLSAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCIiAmJiBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iOiIKKyBmaQorIGZpCisgYWNfY3RfUkFOTElCPSRhY19jdl9wcm9nX2FjX2N0X1JBTkxJQgorIGlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3RfUkFOTElCIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X1JBTkxJQiIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N0X1JBTkxJQiIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorLSAgUkFOTElCPSRhY19jdF9SQU5MSUIKKysgIGlmIHRlc3QgIngkYWNfY3RfUkFOTElCIiA9IHg7IHRoZW4KKysgICAgUkFOTElCPSI6IgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgUkFOTElCPSRhY19jdF9SQU5MSUIKKysgIGZpCisgZWxzZQorICAgUkFOTElCPSIkYWNfY3ZfcHJvZ19SQU5MSUIiCisgZmkKK0BAIC0yNzkwLDggKzM0NDUsOCBAQAorIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1yZWFkZWxmIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1yZWFkZWxmOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfUkVBREVMRitzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMjgwNCwzMiArMzQ1OSwzNCBAQAorICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICAgYWNfY3ZfcHJvZ19SRUFERUxGPSIke2FjX3Rvb2xfcHJlZml4fXJlYWRlbGYiCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgUkVBREVMRj0kYWNfY3ZfcHJvZ19SRUFERUxGCisgaWYgdGVzdCAtbiAiJFJFQURFTEYiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkUkVBREVMRiIgPiY1CistZWNobyAiJHtFQ0hPX1R9JFJFQURFTEYiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkUkVBREVMRiIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JFJFQURFTEYiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKysKKyBmaQorIGlmIHRlc3QgLXogIiRhY19jdl9wcm9nX1JFQURFTEYiOyB0aGVuCisgICBhY19jdF9SRUFERUxGPSRSRUFERUxGCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInJlYWRlbGYiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSByZWFkZWxmOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfUkVBREVMRitzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMjg0MiwyNyArMzQ5OSw0MSBAQAorICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICAgYWNfY3ZfcHJvZ19hY19jdF9SRUFERUxGPSJyZWFkZWxmIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCistICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9SRUFERUxGIiAmJiBhY19jdl9wcm9nX2FjX2N0X1JFQURFTEY9IjoiCisgZmkKKyBmaQorIGFjX2N0X1JFQURFTEY9JGFjX2N2X3Byb2dfYWNfY3RfUkVBREVMRgorIGlmIHRlc3QgLW4gIiRhY19jdF9SRUFERUxGIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X1JFQURFTEYiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdF9SRUFERUxGIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X1JFQURFTEYiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdF9SRUFERUxGIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCistICBSRUFERUxGPSRhY19jdF9SRUFERUxGCisrICBpZiB0ZXN0ICJ4JGFjX2N0X1JFQURFTEYiID0geDsgdGhlbgorKyAgICBSRUFERUxGPSI6IgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgUkVBREVMRj0kYWNfY3RfUkVBREVMRgorKyAgZmkKKyBlbHNlCisgICBSRUFERUxGPSIkYWNfY3ZfcHJvZ19SRUFERUxGIgorIGZpCitAQCAtMjg4MSw4ICszNTUyLDggQEAKKyAjIFNWUjQgL3Vzci91Y2IvaW5zdGFsbCwgd2hpY2ggdHJpZXMgdG8gdXNlIHRoZSBub25leGlzdGVudCBncm91cCAic3RhZmYiCisgIyBPUy8yJ3Mgc3lzdGVtIGluc3RhbGwsIHdoaWNoIGhhcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHNlbWFudGljCisgIyAuL2luc3RhbGwsIHdoaWNoIGNhbiBiZSBlcnJvbmVvdXNseSBjcmVhdGVkIGJ5IG1ha2UgZnJvbSAuL2luc3RhbGwuc2guCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbC4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAteiAiJElOU1RBTEwiOyB0aGVuCisgaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitAQCAtMjkwNCw3ICszNTc1LDcgQEAKKyAgICAgIyBieSBkZWZhdWx0LgorICAgICBmb3IgYWNfcHJvZyBpbiBnaW5zdGFsbCBzY29pbnN0IGluc3RhbGw7IGRvCisgICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistCWlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB0aGVuCisrCWlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAJICBpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorIAkgICAgZ3JlcCBkc3Btc2cgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorIAkgICAgIyBBSVggaW5zdGFsbC4gIEl0IGhhcyBhbiBpbmNvbXBhdGlibGUgY2FsbGluZyBjb252ZW50aW9uLgorQEAgLTI5MjMsMjEgKzM1OTQsMjIgQEAKKyAgICAgOzsKKyBlc2FjCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKyAKKyBmaQorICAgaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgICAgSU5TVEFMTD0kYWNfY3ZfcGF0aF9pbnN0YWxsCisgICBlbHNlCistICAgICMgQXMgYSBsYXN0IHJlc29ydCwgdXNlIHRoZSBzbG93IHNoZWxsIHNjcmlwdC4gIFdlIGRvbid0IGNhY2hlIGEKKy0gICAgIyBwYXRoIGZvciBJTlNUQUxMIHdpdGhpbiBhIHNvdXJjZSBkaXJlY3RvcnksIGJlY2F1c2UgdGhhdCB3aWxsCisrICAgICMgQXMgYSBsYXN0IHJlc29ydCwgdXNlIHRoZSBzbG93IHNoZWxsIHNjcmlwdC4gIERvbid0IGNhY2hlIGEKKysgICAgIyB2YWx1ZSBmb3IgSU5TVEFMTCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAorICAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBjYWNoZSBpZiB0aGF0IGRpcmVjdG9yeSBpcworLSAgICAjIHJlbW92ZWQsIG9yIGlmIHRoZSBwYXRoIGlzIHJlbGF0aXZlLgorKyAgICAjIHJlbW92ZWQsIG9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlbGF0aXZlIG5hbWUuCisgICAgIElOU1RBTEw9JGFjX2luc3RhbGxfc2gKKyAgIGZpCisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkSU5TVEFMTCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JElOU1RBTEwiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJElOU1RBTEwiID4mNQorK2VjaG8gIiR7RUNIT19UfSRJTlNUQUxMIiA+JjY7IH0KKyAKKyAjIFVzZSB0ZXN0IC16IGJlY2F1c2UgU3VuT1M0IHNoIG1pc2hhbmRsZXMgYnJhY2VzIGluICR7dmFyLXZhbH0uCisgIyBJdCB0aGlua3MgdGhlIGZpcnN0IGNsb3NlIGJyYWNlIGVuZHMgdGhlIHZhcmlhYmxlIHN1YnN0aXR1dGlvbi4KK0BAIC0yOTUxLDE3ICszNjIzLDE3IEBACisgIyBIYWNrIHRvIGVuc3VyZSB0aGF0IElOU1RBTEwgd29uJ3QgYmUgc2V0IHRvICIuLi8iIHdpdGggYXV0b2NvbmYgMi4xMy4gICovCisgYWNfZ2l2ZW5fSU5TVEFMTD0kSU5TVEFMTAorIAorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlcyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlcy4uLiAkRUNIT19DIiA+JjYKKy0gICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSBvciAtLWRpc2FibGUtbWFpbnRhaW5lci1tb2RlIHdhcyBnaXZlbi4KKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlcyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlcy4uLiAkRUNIT19DIiA+JjY7IH0KKysgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfbWFpbnRhaW5lcl9tb2RlK3NldH0iID0gc2V0OyB0aGVuCistICBlbmFibGV2YWw9IiRlbmFibGVfbWFpbnRhaW5lcl9tb2RlIgorLSAgVVNFX01BSU5UQUlORVJfTU9ERT0kZW5hYmxldmFsCisrICBlbmFibGV2YWw9JGVuYWJsZV9tYWludGFpbmVyX21vZGU7IFVTRV9NQUlOVEFJTkVSX01PREU9JGVuYWJsZXZhbAorIGVsc2UKKyAgIFVTRV9NQUlOVEFJTkVSX01PREU9bm8KKy1maTsKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRVU0VfTUFJTlRBSU5FUl9NT0RFIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kVVNFX01BSU5UQUlORVJfTU9ERSIgPiY2CisrZmkKKysKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFVTRV9NQUlOVEFJTkVSX01PREUiID4mNQorK2VjaG8gIiR7RUNIT19UfSRVU0VfTUFJTlRBSU5FUl9NT0RFIiA+JjY7IH0KKyAKKyAKKyBpZiB0ZXN0ICRVU0VfTUFJTlRBSU5FUl9NT0RFID0geWVzOyB0aGVuCitAQCAtMzA4MSw2NCArMzc1Myw4OSBAQAorIAorIAorIAorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0Li4uICRFQ0hPX0MiID4mNgorLWlmIHRlc3QgIiR7bHRfY3ZfcGF0aF9TRUQrc2V0fSIgPSBzZXQ7IHRoZW4KKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0Li4uICRFQ0hPX0MiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9TRUQrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgICAgICAgICAgIGFjX3NjcmlwdD1zL2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhL2JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYi8KKysgICAgIGZvciBhY19pIGluIDEgMiAzIDQgNSA2IDc7IGRvCisrICAgICAgIGFjX3NjcmlwdD0iJGFjX3NjcmlwdCRhc19ubCRhY19zY3JpcHQiCisrICAgICBkb25lCisrICAgICBlY2hvICIkYWNfc2NyaXB0IiB8IHNlZCA5OXEgPmNvbmZ0ZXN0LnNlZAorKyAgICAgJGFzX3Vuc2V0IGFjX3NjcmlwdCB8fCBhY19zY3JpcHQ9CisrICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInNlZCBnc2VkIiB0byB1c2UgaW4gbXNnIG91dHB1dAorK2lmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisrc2V0IGR1bW15IHNlZCBnc2VkOyBhY19wcm9nX25hbWU9JDIKKytpZiB0ZXN0ICIke2FjX2N2X3BhdGhfU0VEK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3Igc2VkIGFuZCBnc2VkLgorLSMgVGhlbiB1c2UgdGhhdCBsaXN0IG9mIHNlZCdzIGFzIG9uZXMgdG8gdGVzdCBmb3IgdHJ1bmNhdGlvbi4KKysgIGFjX3BhdGhfU0VEX2ZvdW5kPWZhbHNlCisrIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgZm9yIGFzX2RpciBpbiAkUEFUSAorIGRvCisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorLSAgZm9yIGx0X2FjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCistICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgICAgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiOyB0aGVuCistICAgICAgICBsdF9hY19zZWRfbGlzdD0iJGx0X2FjX3NlZF9saXN0ICRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiCistICAgICAgZmkKKy0gICAgZG9uZQorLSAgZG9uZQorLWRvbmUKKy1JRlM9JGFzX3NhdmVfSUZTCistbHRfYWNfbWF4PTAKKy1sdF9hY19jb3VudD0wCistIyBBZGQgL3Vzci94cGc0L2Jpbi9zZWQgYXMgaXQgaXMgdHlwaWNhbGx5IGZvdW5kIG9uIFNvbGFyaXMKKy0jIGFsb25nIHdpdGggL2Jpbi9zZWQgdGhhdCB0cnVuY2F0ZXMgb3V0cHV0LgorLWZvciBsdF9hY19zZWQgaW4gJGx0X2FjX3NlZF9saXN0IC91c3IveHBnNC9iaW4vc2VkOyBkbworLSAgdGVzdCAhIC1mICRsdF9hY19zZWQgJiYgY29udGludWUKKy0gIGNhdCAvZGV2L251bGwgPiBjb25mdGVzdC5pbgorLSAgbHRfYWNfY291bnQ9MAorLSAgZWNobyAkRUNIT19OICIwMTIzNDU2Nzg5JEVDSE9fQyIgPmNvbmZ0ZXN0LmluCistICAjIENoZWNrIGZvciBHTlUgc2VkIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCistICBpZiAiJGx0X2FjX3NlZCIgLS12ZXJzaW9uIDI+JjEgPCAvZGV2L251bGwgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCistICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKKy0gICAgYnJlYWsKKy0gIGZpCistICB3aGlsZSB0cnVlOyBkbworLSAgICBjYXQgY29uZnRlc3QuaW4gY29uZnRlc3QuaW4gPmNvbmZ0ZXN0LnRtcAorLSAgICBtdiBjb25mdGVzdC50bXAgY29uZnRlc3QuaW4KKy0gICAgY3AgY29uZnRlc3QuaW4gY29uZnRlc3QubmwKKy0gICAgZWNobyA+PmNvbmZ0ZXN0Lm5sCistICAgICRsdF9hY19zZWQgLWUgJ3MvYSQvLycgPCBjb25mdGVzdC5ubCA+Y29uZnRlc3Qub3V0IHx8IGJyZWFrCistICAgIGNtcCAtcyBjb25mdGVzdC5vdXQgY29uZnRlc3QubmwgfHwgYnJlYWsKKy0gICAgIyAxMDAwMCBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCistICAgIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAxMCAmJiBicmVhaworLSAgICBsdF9hY19jb3VudD1gZXhwciAkbHRfYWNfY291bnQgKyAxYAorLSAgICBpZiB0ZXN0ICRsdF9hY19jb3VudCAtZ3QgJGx0X2FjX21heDsgdGhlbgorLSAgICAgIGx0X2FjX21heD0kbHRfYWNfY291bnQKKy0gICAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCisrICBmb3IgYWNfcHJvZyBpbiBzZWQgZ3NlZDsgZG8KKysgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgICBhY19wYXRoX1NFRD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKysgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9TRUQiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX1NFRCI7IH0gfHwgY29udGludWUKKysgICAgIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfU0VEIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisrICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfU0VECisrY2FzZSBgIiRhY19wYXRoX1NFRCIgLS12ZXJzaW9uIDI+JjFgIGluCisrKkdOVSopCisrICBhY19jdl9wYXRoX1NFRD0iJGFjX3BhdGhfU0VEIiBhY19wYXRoX1NFRF9mb3VuZD06OzsKKysqKQorKyAgYWNfY291bnQ9MAorKyAgZWNobyAkRUNIT19OICIwMTIzNDU2Nzg5JEVDSE9fQyIgPiJjb25mdGVzdC5pbiIKKysgIHdoaWxlIDoKKysgIGRvCisrICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisrICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKysgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisrICAgIGVjaG8gJycgPj4gImNvbmZ0ZXN0Lm5sIgorKyAgICAiJGFjX3BhdGhfU0VEIiAtZiBjb25mdGVzdC5zZWQgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisrICAgIGFjX2NvdW50PWBleHByICRhY19jb3VudCArIDFgCisrICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfU0VEX21heC0wfTsgdGhlbgorKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorKyAgICAgIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiCisrICAgICAgYWNfcGF0aF9TRURfbWF4PSRhY19jb3VudAorICAgICBmaQorKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisrICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworKyAgZG9uZQorKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7CisrZXNhYworKworKworKyAgICAkYWNfcGF0aF9TRURfZm91bmQgJiYgYnJlYWsgMworICAgZG9uZQorIGRvbmUKKyAKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworKworK2ZpCisrCisrU0VEPSIkYWNfY3ZfcGF0aF9TRUQiCisraWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KKysgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIGFjY2VwdGFibGUgJGFjX3Byb2dfbmFtZSBjb3VsZCBiZSBmb3VuZCBpbiBcJFBBVEgiID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IG5vIGFjY2VwdGFibGUgJGFjX3Byb2dfbmFtZSBjb3VsZCBiZSBmb3VuZCBpbiBcJFBBVEgiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgZmkKKyAKKy1TRUQ9JGx0X2N2X3BhdGhfU0VECisrZWxzZQorKyAgYWNfY3ZfcGF0aF9TRUQ9JFNFRAorK2ZpCisgCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFNFRCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JFNFRCIgPiY2CisrZmkKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wYXRoX1NFRCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3BhdGhfU0VEIiA+JjY7IH0KKysgU0VEPSIkYWNfY3ZfcGF0aF9TRUQiCisrICBybSAtZiBjb25mdGVzdC5zZWQKKyAKKyB0ZXN0IC16ICIkU0VEIiAmJiBTRUQ9c2VkCisgWHNlZD0iJFNFRCAtZSAxcy9eWC8vIgorQEAgLTMxNjEsOCArMzg1OCw4IEBACisgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFzOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTMxNzUsMzIgKzM4NzIsMzQgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfQVM9IiR7YWNfdG9vbF9wcmVmaXh9YXMiCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgQVM9JGFjX2N2X3Byb2dfQVMKKyBpZiB0ZXN0IC1uICIkQVMiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQVMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRBUyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRBUyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JEFTIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCisrCisgZmkKKyBpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUyI7IHRoZW4KKyAgIGFjX2N0X0FTPSRBUworICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhcyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15IGFzOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTMyMTMsMjcgKzM5MTIsNDEgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfYWNfY3RfQVM9ImFzIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCistICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9BUyIgJiYgYWNfY3ZfcHJvZ19hY19jdF9BUz0iZmFsc2UiCisgZmkKKyBmaQorIGFjX2N0X0FTPSRhY19jdl9wcm9nX2FjX2N0X0FTCisgaWYgdGVzdCAtbiAiJGFjX2N0X0FTIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0FTIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3RfQVMiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQVMiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdF9BUyIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorLSAgQVM9JGFjX2N0X0FTCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0FTIiA9IHg7IHRoZW4KKysgICAgQVM9ImZhbHNlIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgQVM9JGFjX2N0X0FTCisrICBmaQorIGVsc2UKKyAgIEFTPSIkYWNfY3ZfcHJvZ19BUyIKKyBmaQorQEAgLTMyNDEsOCArMzk1NCw4IEBACisgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTMyNTUsMzIgKzM5NjgsMzQgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKyBmaQorIERMTFRPT0w9JGFjX2N2X3Byb2dfRExMVE9PTAorIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJERMTFRPT0wiID4mNQorLWVjaG8gIiR7RUNIT19UfSRETExUT09MIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJERMTFRPT0wiID4mNQorK2VjaG8gIiR7RUNIT19UfSRETExUT09MIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCisrCisgZmkKKyBpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgorICAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTMyOTMsMjcgKzQwMDgsNDEgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorLSAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCIgJiYgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJmYWxzZSIKKyBmaQorIGZpCisgYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCisgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0RMTFRPT0wiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0RMTFRPT0wiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKy0gIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKysgIGlmIHRlc3QgIngkYWNfY3RfRExMVE9PTCIgPSB4OyB0aGVuCisrICAgIERMTFRPT0w9ImZhbHNlIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAorKyAgZmkKKyBlbHNlCisgICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgorIGZpCitAQCAtMzMyMSw4ICs0MDUwLDggQEAKKyAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vYmpkdW1wOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfT0JKRFVNUCtzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMzMzNSwzMiArNDA2NCwzNCBAQAorICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgT0JKRFVNUD0kYWNfY3ZfcHJvZ19PQkpEVU1QCisgaWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkT0JKRFVNUCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JE9CSkRVTVAiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkT0JKRFVNUCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JE9CSkRVTVAiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKysKKyBmaQorIGlmIHRlc3QgLXogIiRhY19jdl9wcm9nX09CSkRVTVAiOyB0aGVuCisgICBhY19jdF9PQkpEVU1QPSRPQkpEVU1QCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSBvYmpkdW1wOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUCtzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMzM3MywyNyArNDEwNCw0MSBAQAorICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSJvYmpkdW1wIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCistICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QIiAmJiBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9ImZhbHNlIgorIGZpCisgZmkKKyBhY19jdF9PQkpEVU1QPSRhY19jdl9wcm9nX2FjX2N0X09CSkRVTVAKKyBpZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9PQkpEVU1QIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3RfT0JKRFVNUCIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9PQkpEVU1QIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3RfT0JKRFVNUCIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorLSAgT0JKRFVNUD0kYWNfY3RfT0JKRFVNUAorKyAgaWYgdGVzdCAieCRhY19jdF9PQkpEVU1QIiA9IHg7IHRoZW4KKysgICAgT0JKRFVNUD0iZmFsc2UiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBPQkpEVU1QPSRhY19jdF9PQkpEVU1QCisrICBmaQorIGVsc2UKKyAgIE9CSkRVTVA9IiRhY19jdl9wcm9nX09CSkRVTVAiCisgZmkKK0BAIC0zNDU0LDggKzQxOTksOCBAQAorIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1nY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWdjYzsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0zNDY4LDMyICs0MjEzLDM0IEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWdjYyIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorIGZpCisgZmkKKyBDQz0kYWNfY3ZfcHJvZ19DQworIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JENDIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKKytlY2hvICIke0VDSE9fVH0kQ0MiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKysKKyBmaQorIGlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0NDIjsgdGhlbgorICAgYWNfY3RfQ0M9JENDCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15IGdjYzsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0zNTA2LDM2ICs0MjUzLDUxIEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSJnY2MiCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKKyBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdF9DQyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NDIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCistICBDQz0kYWNfY3RfQ0MKKysgIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgorKyAgICBDQz0iIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgQ0M9JGFjX2N0X0NDCisrICBmaQorIGVsc2UKKyAgIENDPSIkYWNfY3ZfcHJvZ19DQyIKKyBmaQorIAorIGlmIHRlc3QgLXogIiRDQyI7IHRoZW4KKy0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1jYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1jYzsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0zNTQ4LDk4ICs0MzEwLDU5IEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWNjIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKyBmaQorIENDPSRhY19jdl9wcm9nX0NDCisgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kQ0MiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQorK2VjaG8gIiR7RUNIT19UfSRDQyIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorKworKyAgZmkKKyBmaQorLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0NDIjsgdGhlbgorLSAgYWNfY3RfQ0M9JENDCisraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15IGNjOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CistaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorLSAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKysgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKysgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgZWxzZQorKyAgYWNfcHJvZ19yZWplY3RlZD1ubworIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyBmb3IgYXNfZGlyIGluICRQQVRICisgZG8KKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCistICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9ImNjIgorLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CistICAgIGJyZWFrIDIKKy0gIGZpCistZG9uZQorLWRvbmUKKy0KKy1maQorLWZpCistYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKKy1pZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdF9DQyIgPiY2CistZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKy1maQorLQorLSAgQ0M9JGFjX2N0X0NDCistZWxzZQorLSAgQ0M9IiRhY19jdl9wcm9nX0NDIgorLWZpCistCistZmkKKy1pZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgY2M7IGFjX3dvcmQ9JDIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKy1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorLSAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKy1lbHNlCistICBhY19wcm9nX3JlamVjdGVkPW5vCistYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorLWZvciBhc19kaXIgaW4gJFBBVEgKKy1kbworLSAgSUZTPSRhc19zYXZlX0lGUworLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKy0gICAgaWYgdGVzdCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPSAiL3Vzci91Y2IvY2MiOyB0aGVuCistICAgICAgIGFjX3Byb2dfcmVqZWN0ZWQ9eWVzCistICAgICAgIGNvbnRpbnVlCistICAgICBmaQorLSAgICBhY19jdl9wcm9nX0NDPSJjYyIKKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgaWYgdGVzdCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPSAiL3Vzci91Y2IvY2MiOyB0aGVuCisrICAgICAgIGFjX3Byb2dfcmVqZWN0ZWQ9eWVzCisrICAgICAgIGNvbnRpbnVlCisrICAgICBmaQorKyAgICBhY19jdl9wcm9nX0NDPSJjYyIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorIGlmIHRlc3QgJGFjX3Byb2dfcmVqZWN0ZWQgPSB5ZXM7IHRoZW4KKyAgICMgV2UgZm91bmQgYSBib2dvbiBpbiB0aGUgcGF0aCwgc28gbWFrZSBzdXJlIHdlIG5ldmVyIHVzZSBpdC4KK0BAIC0zNjU3LDIyICs0MzgwLDIzIEBACisgZmkKKyBDQz0kYWNfY3ZfcHJvZ19DQworIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JENDIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKKytlY2hvICIke0VDSE9fVH0kQ0MiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKysKKyBmaQorIGlmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gIGZvciBhY19wcm9nIGluIGNsCisrICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKKyAgIGRvCisgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0zNjg1LDM2ICs0NDA5LDM4IEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX0NDPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorIGZpCisgZmkKKyBDQz0kYWNfY3ZfcHJvZ19DQworIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JENDIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKKytlY2hvICIke0VDSE9fVH0kQ0MiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKysKKyAgICAgdGVzdCAtbiAiJENDIiAmJiBicmVhaworICAgZG9uZQorIGZpCisgaWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAgYWNfY3RfQ0M9JENDCistICBmb3IgYWNfcHJvZyBpbiBjbAorKyAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCisgZG8KKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0zNzI3LDI5ICs0NDUzLDQ1IEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfcHJvZyIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorIGZpCisgZmkKKyBhY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NDIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3RfQ0MiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKysKKyAgIHRlc3QgLW4gIiRhY19jdF9DQyIgJiYgYnJlYWsKKyBkb25lCisgCistICBDQz0kYWNfY3RfQ0MKKysgIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgorKyAgICBDQz0iIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgQ0M9JGFjX2N0X0NDCisrICBmaQorIGZpCisgCisgZmkKK0BAIC0zNzYyLDIxICs0NTA0LDM1IEBACisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgCisgIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgorLWVjaG8gIiRhc19tZTokTElORU5POiIgXAorLSAgICAgImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQorK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQyBjb21waWxlciB2ZXJzaW9uIiA+JjUKKyBhY19jb21waWxlcj1gc2V0IFggJGFjX2NvbXBpbGU7IGVjaG8gJDJgCisteyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZXIgLS12ZXJzaW9uIDwvZGV2L251bGwgPiY1XCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlciAtLXZlcnNpb24gPC9kZXYvbnVsbCA+JjUpIDI+JjUKKyt7IChhY190cnk9IiRhY19jb21waWxlciAtLXZlcnNpb24gPiY1IgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA+JjUiKSAyPiY1CisgICBhY19zdGF0dXM9JD8KKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9CisteyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZXIgLXYgPC9kZXYvbnVsbCA+JjVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGVyIC12IDwvZGV2L251bGwgPiY1KSAyPiY1CisreyAoYWNfdHJ5PSIkYWNfY29tcGlsZXIgLXYgPiY1IgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGVyIC12ID4mNSIpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKy17IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlciAtViA8L2Rldi9udWxsID4mNVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZXIgLVYgPC9kZXYvbnVsbCA+JjUpIDI+JjUKKyt7IChhY190cnk9IiRhY19jb21waWxlciAtViA+JjUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZXIgLVYgPiY1IikgMj4mNQorICAgYWNfc3RhdHVzPSQ/CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorQEAgLTM4MDEsNDcgKzQ1NTcsNzcgQEAKKyAjIFRyeSB0byBjcmVhdGUgYW4gZXhlY3V0YWJsZSB3aXRob3V0IC1vIGZpcnN0LCBkaXNyZWdhcmQgYS5vdXQuCisgIyBJdCB3aWxsIGhlbHAgdXMgZGlhZ25vc2UgYnJva2VuIGNvbXBpbGVycywgYW5kIGZpbmRpbmcgb3V0IGFuIGludHVpdGlvbgorICMgb2YgZXhlZXh0LgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZSIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUuLi4gJEVDSE9fQyIgPiY2OyB9CisgYWNfbGlua19kZWZhdWx0PWBlY2hvICIkYWNfbGluayIgfCBzZWQgJ3MvIC1vICpjb25mdGVzdFteIF0qLy8nYAorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtfZGVmYXVsdFwiIikgPiY1CistICAoZXZhbCAkYWNfbGlua19kZWZhdWx0KSAyPiY1CisrIworKyMgTGlzdCBvZiBwb3NzaWJsZSBvdXRwdXQgZmlsZXMsIHN0YXJ0aW5nIGZyb20gdGhlIG1vc3QgbGlrZWx5LgorKyMgVGhlIGFsZ29yaXRobSBpcyBub3Qgcm9idXN0IHRvIGp1bmsgaW4gYC4nLCBoZW5jZSBnbyB0byB3aWxkY2FyZHMgKGEuKikKKysjIG9ubHkgYXMgYSBsYXN0IHJlc29ydC4gIGIub3V0IGlzIGNyZWF0ZWQgYnkgaTk2MCBjb21waWxlcnMuCisrYWNfZmlsZXM9J2Ffb3V0LmV4ZSBhLmV4ZSBjb25mdGVzdC5leGUgYS5vdXQgY29uZnRlc3QgYS4qIGNvbmZ0ZXN0LiogYi5vdXQnCisrIworKyMgVGhlIElSSVggNiBsaW5rZXIgd3JpdGVzIGludG8gZXhpc3RpbmcgZmlsZXMgd2hpY2ggbWF5IG5vdCBiZQorKyMgZXhlY3V0YWJsZSwgcmV0YWluaW5nIHRoZWlyIHBlcm1pc3Npb25zLiAgUmVtb3ZlIHRoZW0gZmlyc3Qgc28gYQorKyMgc3Vic2VxdWVudCBleGVjdXRpb24gdGVzdCB3b3Jrcy4KKythY19ybWZpbGVzPQorK2ZvciBhY19maWxlIGluICRhY19maWxlcworK2RvCisrICBjYXNlICRhY19maWxlIGluCisrICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICoubyB8ICoub2JqICkgOzsKKysgICAgKiApIGFjX3JtZmlsZXM9IiRhY19ybWZpbGVzICRhY19maWxlIjs7CisrICBlc2FjCisrZG9uZQorK3JtIC1mICRhY19ybWZpbGVzCisrCisraWYgeyAoYWNfdHJ5PSIkYWNfbGlua19kZWZhdWx0IgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmtfZGVmYXVsdCIpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKy0gICMgRmluZCB0aGUgb3V0cHV0LCBzdGFydGluZyBmcm9tIHRoZSBtb3N0IGxpa2VseS4gIFRoaXMgc2NoZW1lIGlzCistIyBub3Qgcm9idXN0IHRvIGp1bmsgaW4gYC4nLCBoZW5jZSBnbyB0byB3aWxkY2FyZHMgKGEuKikgb25seSBhcyBhIGxhc3QKKy0jIHJlc29ydC4KKy0KKy0jIEJlIGNhcmVmdWwgdG8gaW5pdGlhbGl6ZSB0aGlzIHZhcmlhYmxlLCBzaW5jZSBpdCB1c2VkIHRvIGJlIGNhY2hlZC4KKy0jIE90aGVyd2lzZSBhbiBvbGQgY2FjaGUgdmFsdWUgb2YgYG5vJyBsZWQgdG8gYEVYRUVYVCA9IG5vJyBpbiBhIE1ha2VmaWxlLgorLWFjX2N2X2V4ZWV4dD0KKy0jIGIub3V0IGlzIGNyZWF0ZWQgYnkgaTk2MCBjb21waWxlcnMuCistZm9yIGFjX2ZpbGUgaW4gYV9vdXQuZXhlIGEuZXhlIGNvbmZ0ZXN0LmV4ZSBhLm91dCBjb25mdGVzdCBhLiogY29uZnRlc3QuKiBiLm91dAorKyAgIyBBdXRvY29uZi0yLjEzIGNvdWxkIHNldCB0aGUgYWNfY3ZfZXhlZXh0IHZhcmlhYmxlIHRvIGBubycuCisrIyBTbyBpZ25vcmUgYSB2YWx1ZSBvZiBgbm8nLCBvdGhlcndpc2UgdGhpcyB3b3VsZCBsZWFkIHRvIGBFWEVFWFQgPSBubycKKysjIGluIGEgTWFrZWZpbGUuICBXZSBzaG91bGQgbm90IG92ZXJyaWRlIGFjX2N2X2V4ZWV4dCBpZiBpdCB3YXMgY2FjaGVkLAorKyMgc28gdGhhdCB0aGUgdXNlciBjYW4gc2hvcnQtY2lyY3VpdCB0aGlzIHRlc3QgZm9yIGNvbXBpbGVycyB1bmtub3duIHRvCisrIyBBdXRvY29uZi4KKytmb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMgJycKKyBkbworICAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCisgICBjYXNlICRhY19maWxlIGluCistICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5vIHwgKi5vYmogKQorLQk7OworLSAgICBjb25mdGVzdC4kYWNfZXh0ICkKKy0JIyBUaGlzIGlzIHRoZSBzb3VyY2UgZmlsZS4KKysgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5vIHwgKi5vYmogKQorIAk7OworICAgICBbYWJdLm91dCApCisgCSMgV2UgZm91bmQgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSwgYnV0IGV4ZWV4dD0nJyBpcyBtb3N0CisgCSMgY2VydGFpbmx5IHJpZ2h0LgorIAlicmVhazs7CisgICAgICouKiApCistCWFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorLQkjIEZJWE1FOiBJIGJlbGlldmUgd2UgZXhwb3J0IGFjX2N2X2V4ZWV4dCBmb3IgTGlidG9vbCwKKy0JIyBidXQgaXQgd291bGQgYmUgY29vbCB0byBmaW5kIG91dCBpZiBpdCdzIHRydWUuICBEb2VzIGFueWJvZHkKKy0JIyBtYWludGFpbiBMaWJ0b29sPyAtLWFraW0uCistCWV4cG9ydCBhY19jdl9leGVleHQKKysgICAgICAgIGlmIHRlc3QgIiR7YWNfY3ZfZXhlZXh0K3NldH0iID0gc2V0ICYmIHRlc3QgIiRhY19jdl9leGVleHQiICE9IG5vOworKwl0aGVuIDo7IGVsc2UKKysJICAgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCisrCWZpCisrCSMgV2Ugc2V0IGFjX2N2X2V4ZWV4dCBoZXJlIGJlY2F1c2UgdGhlIGxhdGVyIHRlc3QgZm9yIGl0IGlzIG5vdAorKwkjIHNhZmU6IGNyb3NzIGNvbXBpbGVycyBtYXkgbm90IGFkZCB0aGUgc3VmZml4IGlmIGdpdmVuIGFuIGAtbycKKysJIyBhcmd1bWVudCwgc28gd2UgbWF5IG5lZWQgdG8ga25vdyBpdCBhdCB0aGF0IHBvaW50IGFscmVhZHkuCisrCSMgRXZlbiBpZiB0aGlzIHNlY3Rpb24gbG9va3MgY3J1ZnR5OiBpdCBoYXMgdGhlIGFkdmFudGFnZSBvZgorKwkjIGFjdHVhbGx5IHdvcmtpbmcuCisgCWJyZWFrOzsKKyAgICAgKiApCisgCWJyZWFrOzsKKyAgIGVzYWMKKyBkb25lCisrdGVzdCAiJGFjX2N2X2V4ZWV4dCIgPSBubyAmJiBhY19jdl9leGVleHQ9CisrCisgZWxzZQorKyAgYWNfZmlsZT0nJworK2ZpCisrCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfZmlsZSIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2ZpbGUiID4mNjsgfQorK2lmIHRlc3QgLXogIiRhY19maWxlIjsgdGhlbgorICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCitAQCAtMzg1MywxOSArNDYzOSwyMSBAQAorIGZpCisgCisgYWNfZXhlZXh0PSRhY19jdl9leGVleHQKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfZmlsZSIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2ZpbGUiID4mNgorIAorLSMgQ2hlY2sgdGhlIGNvbXBpbGVyIHByb2R1Y2VzIGV4ZWN1dGFibGVzIHdlIGNhbiBydW4uICBJZiBub3QsIGVpdGhlcgorKyMgQ2hlY2sgdGhhdCB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCisgIyB0aGUgY29tcGlsZXIgaXMgYnJva2VuLCBvciB3ZSBjcm9zcyBjb21waWxlLgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3JrcyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQorICMgRklYTUU6IFRoZXNlIGNyb3NzIGNvbXBpbGVyIGhhY2tzIHNob3VsZCBiZSByZW1vdmVkIGZvciBBdXRvY29uZiAzLjAKKyAjIElmIG5vdCBjcm9zcyBjb21waWxpbmcsIGNoZWNrIHRoYXQgd2UgY2FuIHJ1biBhIHNpbXBsZSBwcm9ncmFtLgorIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IHllczsgdGhlbgorICAgaWYgeyBhY190cnk9Jy4vJGFjX2ZpbGUnCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKysgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICAgYWNfc3RhdHVzPSQ/CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorQEAgLTM4ODQsMjIgKzQ2NzIsMjcgQEAKKyAgICAgZmkKKyAgIGZpCisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CisgCisgcm0gLWYgYS5vdXQgYS5leGUgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGIub3V0CisgYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKKy0jIENoZWNrIHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKKysjIENoZWNrIHRoYXQgdGhlIGNvbXBpbGVyIHByb2R1Y2VzIGV4ZWN1dGFibGVzIHdlIGNhbiBydW4uICBJZiBub3QsIGVpdGhlcgorICMgdGhlIGNvbXBpbGVyIGlzIGJyb2tlbiwgb3Igd2UgY3Jvc3MgY29tcGlsZS4KKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZy4uLiAkRUNIT19DIiA+JjYKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkY3Jvc3NfY29tcGlsaW5nIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kY3Jvc3NfY29tcGlsaW5nIiA+JjYKKy0KKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBleGVjdXRhYmxlcyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzLi4uICRFQ0hPX0MiID4mNgorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmciID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nLi4uICRFQ0hPX0MiID4mNjsgfQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGNyb3NzX2NvbXBpbGluZyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGNyb3NzX2NvbXBpbGluZyIgPiY2OyB9CisrCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBleGVjdXRhYmxlcyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzLi4uICRFQ0hPX0MiID4mNjsgfQorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KK0BAIC0zOTEwLDkgKzQ3MDMsOCBAQAorIGZvciBhY19maWxlIGluIGNvbmZ0ZXN0LmV4ZSBjb25mdGVzdCBjb25mdGVzdC4qOyBkbworICAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCisgICBjYXNlICRhY19maWxlIGluCistICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5vIHwgKi5vYmogKSA7OworKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLm8gfCAqLm9iaiApIDs7CisgICAgICouKiApIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorLQkgIGV4cG9ydCBhY19jdl9leGVleHQKKyAJICBicmVhazs7CisgICAgICogKSBicmVhazs7CisgICBlc2FjCitAQCAtMzkyNiwxNCArNDcxOCwxNCBAQAorIGZpCisgCisgcm0gLWYgY29uZnRlc3QkYWNfY3ZfZXhlZXh0CistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2V4ZWV4dCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2V4ZWV4dCIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZXhlZXh0IiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfZXhlZXh0IiA+JjY7IH0KKyAKKyBybSAtZiBjb25mdGVzdC4kYWNfZXh0CisgRVhFRVhUPSRhY19jdl9leGVleHQKKyBhY19leGVleHQ9JEVYRUVYVAorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcy4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcy4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X29iamV4dCtzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMzk1MywxNCArNDc0NSwyMCBAQAorIH0KKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iagorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPiY1CisgICBhY19zdGF0dXM9JD8KKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCistICBmb3IgYWNfZmlsZSBpbiBgKGxzIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqOyBscyBjb25mdGVzdC4qKSAyPi9kZXYvbnVsbGA7IGRvCisrICBmb3IgYWNfZmlsZSBpbiBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iaiBjb25mdGVzdC4qOyBkbworKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlOworICAgY2FzZSAkYWNfZmlsZSBpbgorLSAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyApIDs7CisrICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiApIDs7CisgICAgICopIGFjX2N2X29iamV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJy4qXC5cKC4qXCknYAorICAgICAgICBicmVhazs7CisgICBlc2FjCitAQCAtMzk3OCwxMiArNDc3NiwxMiBAQAorIAorIHJtIC1mIGNvbmZ0ZXN0LiRhY19jdl9vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X29iamV4dCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X29iamV4dCIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfb2JqZXh0IiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3Zfb2JqZXh0IiA+JjY7IH0KKyBPQkpFWFQ9JGFjX2N2X29iamV4dAorIGFjX29iamV4dD0kT0JKRVhUCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlci4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X2NfY29tcGlsZXJfZ251K3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC00MDA2LDUwICs0ODA0LDQ5IEBACisgfQorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKyAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgICBybSAtZiBjb25mdGVzdC5lcjEKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgICBhY19jb21waWxlcl9nbnU9eWVzCisgZWxzZQorICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistYWNfY29tcGlsZXJfZ251PW5vCisrCWFjX2NvbXBpbGVyX2dudT1ubworIGZpCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGFjX2N2X2NfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKKyAKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjY7IH0KKyBHQ0M9YHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllcyAmJiBlY2hvIHllc2AKKyBhY190ZXN0X0NGTEFHUz0ke0NGTEFHUytzZXR9CisgYWNfc2F2ZV9DRkxBR1M9JENGTEFHUworLUNGTEFHUz0iLWciCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWciID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZy4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWcuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX2crc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrICBhY19zYXZlX2Nfd2Vycm9yX2ZsYWc9JGFjX2Nfd2Vycm9yX2ZsYWcKKysgICBhY19jX3dlcnJvcl9mbGFnPXllcworKyAgIGFjX2N2X3Byb2dfY2NfZz1ubworKyAgIENGTEFHUz0iLWciCisrICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDA2NSwzOCArNDg2MiwxMTggQEAKKyB9CisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisrICBhY19jdl9wcm9nX2NjX2c9eWVzCisrZWxzZQorKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrCUNGTEFHUz0iIgorKyAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorKyAgOgorK2Vsc2UKKysgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKKysJIENGTEFHUz0iLWciCisrCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworK2ludAorK21haW4gKCkKKyt7CisrCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgICBhY19jdl9wcm9nX2NjX2c9eWVzCisgZWxzZQorICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistYWNfY3ZfcHJvZ19jY19nPW5vCisrCisgZmkKKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytmaQorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorKyAgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZworIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfZyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfY2NfZyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19nIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19jY19nIiA+JjY7IH0KKyBpZiB0ZXN0ICIkYWNfdGVzdF9DRkxBR1MiID0gc2V0OyB0aGVuCisgICBDRkxBR1M9JGFjX3NhdmVfQ0ZMQUdTCisgZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2NjX2cgPSB5ZXM7IHRoZW4KK0BAIC00MTEyLDEyICs0OTg5LDEyIEBACisgICAgIENGTEFHUz0KKyAgIGZpCisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IEFOU0kgQyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgQU5TSSBDLi4uICRFQ0hPX0MiID4mNgorLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19zdGRjK3NldH0iID0gc2V0OyB0aGVuCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkuLi4gJEVDSE9fQyIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX2M4OStzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBhY19jdl9wcm9nX2NjX3N0ZGM9bm8KKysgIGFjX2N2X3Byb2dfY2NfYzg5PW5vCisgYWNfc2F2ZV9DQz0kQ0MKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBjb25mZGVmcy5oLiAgKi8KK0BAIC00MTUxLDEyICs1MDI4LDE3IEBACisgLyogT1NGIDQuMCBDb21wYXEgY2MgaXMgc29tZSBzb3J0IG9mIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQuICBJdCBoYXMKKyAgICBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBzdHVmZiwgYnV0IG5vdCAnXHhISCcgaGV4IGNoYXJhY3RlciBjb25zdGFudHMuCisgICAgVGhlc2UgZG9uJ3QgcHJvdm9rZSBhbiBlcnJvciB1bmZvcnR1bmF0ZWx5LCBpbnN0ZWFkIGFyZSBzaWxlbnRseSB0cmVhdGVkCistICAgYXMgJ3gnLiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkMSBpcyBhZGRlZCB0byBnZXQKKysgICBhcyAneCcuICBUaGUgZm9sbG93aW5nIGluZHVjZXMgYW4gZXJyb3IsIHVudGlsIC1zdGQgaXMgYWRkZWQgdG8gZ2V0CisgICAgcHJvcGVyIEFOU0kgbW9kZS4gIEN1cmlvdXNseSAnXHgwMCchPSd4JyBhbHdheXMgY29tZXMgb3V0IHRydWUsIGZvciBhbgorICAgIGFycmF5IHNpemUgYXQgbGVhc3QuICBJdCdzIG5lY2Vzc2FyeSB0byB3cml0ZSAnXHgwMCc9PTAgdG8gZ2V0IHNvbWV0aGluZworLSAgIHRoYXQncyB0cnVlIG9ubHkgd2l0aCAtc3RkMS4gICovCisrICAgdGhhdCdzIHRydWUgb25seSB3aXRoIC1zdGQuICAqLworIGludCBvc2Y0X2NjX2FycmF5IFsnXHgwMCcgPT0gMCA/IDEgOiAtMV07CisgCisrLyogSUJNIEMgNiBmb3IgQUlYIGlzIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQsIGJ1dCBpdCByZXBsYWNlcyBtYWNybyBwYXJhbWV0ZXJzCisrICAgaW5zaWRlIHN0cmluZ3MgYW5kIGNoYXJhY3RlciBjb25zdGFudHMuICAqLworKyNkZWZpbmUgRk9PKHgpICd4JworK2ludCB4bGM2X2NjX2FycmF5W0ZPTyhhKSA9PSAneCcgPyAxIDogLTFdOworKworIGludCB0ZXN0IChpbnQgaSwgZG91YmxlIHgpOworIHN0cnVjdCBzMSB7aW50ICgqZikgKGludCBhKTt9OworIHN0cnVjdCBzMiB7aW50ICgqZikgKGRvdWJsZSBhKTt9OworQEAgLTQxNzEsMjA1ICs1MDUzLDU3IEBACisgICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCistIyBEb24ndCB0cnkgZ2NjIC1hbnNpOyB0aGF0IHR1cm5zIG9mZiB1c2VmdWwgZXh0ZW5zaW9ucyBhbmQKKy0jIGJyZWFrcyBzb21lIHN5c3RlbXMnIGhlYWRlciBmaWxlcy4KKy0jIEFJWAkJCS1xbGFuZ2x2bD1hbnNpCistIyBVbHRyaXggYW5kIE9TRi8xCS1zdGQxCistIyBIUC1VWCAxMC4yMCBhbmQgbGF0ZXIJLUFlCistIyBIUC1VWCBvbGRlciB2ZXJzaW9ucwktQWEgLURfSFBVWF9TT1VSQ0UKKy0jIFNWUjQJCQktWGMgLURfX0VYVEVOU0lPTlNfXworLWZvciBhY19hcmcgaW4gIiIgLXFsYW5nbHZsPWFuc2kgLXN0ZDEgLUFlICItQWEgLURfSFBVWF9TT1VSQ0UiICItWGMgLURfX0VYVEVOU0lPTlNfXyIKKytmb3IgYWNfYXJnIGluICcnIC1xbGFuZ2x2bD1leHRjODkgLXFsYW5nbHZsPWFuc2kgLXN0ZCBcCisrCS1BZSAiLUFhIC1EX0hQVVhfU09VUkNFIiAiLVhjIC1EX19FWFRFTlNJT05TX18iCisgZG8KKyAgIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgorICAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCistICBhY19jdl9wcm9nX2NjX3N0ZGM9JGFjX2FyZworLWJyZWFrCisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgIGFjX2N2X3Byb2dfY2NfYzg5PSRhY19hcmcKKyBlbHNlCisgICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKysKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAorKyAgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0gInhubyIgJiYgYnJlYWsKKyBkb25lCistcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0Cisrcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorIENDPSRhY19zYXZlX0NDCisgCisgZmkKKy0KKy1jYXNlICJ4JGFjX2N2X3Byb2dfY2Nfc3RkYyIgaW4KKy0gIHh8eG5vKQorLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm9uZSBuZWVkZWQiID4mNiA7OworKyMgQUNfQ0FDSEVfVkFMCisrY2FzZSAieCRhY19jdl9wcm9nX2NjX2M4OSIgaW4KKysgIHgpCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQorK2VjaG8gIiR7RUNIT19UfW5vbmUgbmVlZGVkIiA+JjY7IH0gOzsKKysgIHhubykKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1bnN1cHBvcnRlZCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9dW5zdXBwb3J0ZWQiID4mNjsgfSA7OworICAgKikKKy0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfY2Nfc3RkYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfY2Nfc3RkYyIgPiY2CistICAgIENDPSIkQ0MgJGFjX2N2X3Byb2dfY2Nfc3RkYyIgOzsKKysgICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19jODkiCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19jY19jODkiID4mNjsgfSA7OworIGVzYWMKKyAKKy0jIFNvbWUgcGVvcGxlIHVzZSBhIEMrKyBjb21waWxlciB0byBjb21waWxlIEMuICBTaW5jZSB3ZSB1c2UgYGV4aXQnLAorLSMgaW4gQysrIHdlIG5lZWQgdG8gZGVjbGFyZSBpdC4gIEluIGNhc2Ugc29tZW9uZSB1c2VzIHRoZSBzYW1lIGNvbXBpbGVyCistIyBmb3IgYm90aCBjb21waWxpbmcgQyBhbmQgQysrIHdlIG5lZWQgdG8gaGF2ZSB0aGUgQysrIGNvbXBpbGVyIGRlY2lkZQorLSMgdGhlIGRlY2xhcmF0aW9uIG9mIGV4aXQsIHNpbmNlIGl0J3MgdGhlIG1vc3QgZGVtYW5kaW5nIGVudmlyb25tZW50LgorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNpZm5kZWYgX19jcGx1c3BsdXMKKy0gIGNob2tlIG1lCistI2VuZGlmCistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorLSAgZm9yIGFjX2RlY2xhcmF0aW9uIGluIFwKKy0gICAnJyBcCistICAgJ2V4dGVybiAiQyIgdm9pZCBzdGQ6OmV4aXQgKGludCkgdGhyb3cgKCk7IHVzaW5nIHN0ZDo6ZXhpdDsnIFwKKy0gICAnZXh0ZXJuICJDIiB2b2lkIHN0ZDo6ZXhpdCAoaW50KTsgdXNpbmcgc3RkOjpleGl0OycgXAorLSAgICdleHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KSB0aHJvdyAoKTsnIFwKKy0gICAnZXh0ZXJuICJDIiB2b2lkIGV4aXQgKGludCk7JyBcCistICAgJ3ZvaWQgZXhpdCAoaW50KTsnCistZG8KKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2RlY2xhcmF0aW9uCistI2luY2x1ZGUgPHN0ZGxpYi5oPgorLWludAorLW1haW4gKCkKKy17CistZXhpdCAoNDIpOworLSAgOworLSAgcmV0dXJuIDA7CistfQorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKy0gIDoKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKy1jb250aW51ZQorLWZpCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfZGVjbGFyYXRpb24KKy1pbnQKKy1tYWluICgpCisteworLWV4aXQgKDQyKTsKKy0gIDsKKy0gIHJldHVybiAwOworLX0KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCistICBicmVhaworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLWZpCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLWRvbmUKKy1ybSAtZiBjb25mdGVzdCoKKy1pZiB0ZXN0IC1uICIkYWNfZGVjbGFyYXRpb24iOyB0aGVuCistICBlY2hvICcjaWZkZWYgX19jcGx1c3BsdXMnID4+Y29uZmRlZnMuaAorLSAgZWNobyAkYWNfZGVjbGFyYXRpb24gICAgICA+PmNvbmZkZWZzLmgKKy0gIGVjaG8gJyNlbmRpZicgICAgICAgICAgICAgPj5jb25mZGVmcy5oCistZmkKKy0KKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy1maQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBhY19leHQ9YworIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCisgYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworQEAgLTQzNzgsOCArNTExMiw4IEBACisgCisgZGVwY2M9IiRDQyIgICBhbV9jb21waWxlcl9saXN0PQorIAorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC00NDYxLDU4ICs1MTk1LDI3MyBAQAorICAgICBmaQorICAgZG9uZQorIAorLSAgY2QgLi4KKy0gIHJtIC1yZiBjb25mdGVzdC5kaXIKKy1lbHNlCistICBhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCistZmkKKysgIGNkIC4uCisrICBybSAtcmYgY29uZnRlc3QuZGlyCisrZWxzZQorKyAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorK2ZpCisrCisrZmkKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjY7IH0KKytDQ0RFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUKKysKKysKKysKKytpZgorKyAgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vIFwKKysgICYmIHRlc3QgIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzOyB0aGVuCisrICBhbV9fZmFzdGRlcENDX1RSVUU9CisrICBhbV9fZmFzdGRlcENDX0ZBTFNFPScjJworK2Vsc2UKKysgIGFtX19mYXN0ZGVwQ0NfVFJVRT0nIycKKysgIGFtX19mYXN0ZGVwQ0NfRkFMU0U9CisrZmkKKysKKysKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGdyZXAgdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1lLi4uICRFQ0hPX0MiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9HUkVQK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ3JlcCBnZ3JlcCIgdG8gdXNlIGluIG1zZyBvdXRwdXQKKytpZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KKytzZXQgZHVtbXkgZ3JlcCBnZ3JlcDsgYWNfcHJvZ19uYW1lPSQyCisraWYgdGVzdCAiJHthY19jdl9wYXRoX0dSRVArc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgYWNfcGF0aF9HUkVQX2ZvdW5kPWZhbHNlCisrIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgIGZvciBhY19wcm9nIGluIGdyZXAgZ2dyZXA7IGRvCisrICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgICAgYWNfcGF0aF9HUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorKyAgICB7IHRlc3QgLWYgIiRhY19wYXRoX0dSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX0dSRVAiOyB9IHx8IGNvbnRpbnVlCisrICAgICMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0dSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKysgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9HUkVQCisrY2FzZSBgIiRhY19wYXRoX0dSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKypHTlUqKQorKyAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIiBhY19wYXRoX0dSRVBfZm91bmQ9Ojs7CisrKikKKysgIGFjX2NvdW50PTAKKysgIGVjaG8gJEVDSE9fTiAiMDEyMzQ1Njc4OSRFQ0hPX0MiID4iY29uZnRlc3QuaW4iCisrICB3aGlsZSA6CisrICBkbworKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisrICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorKyAgICBlY2hvICdHUkVQJyA+PiAiY29uZnRlc3QubmwiCisrICAgICIkYWNfcGF0aF9HUkVQIiAtZSAnR1JFUCQnIC1lICctKGNhbm5vdCBtYXRjaCktJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisrICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKysgICAgYWNfY291bnQ9YGV4cHIgJGFjX2NvdW50ICsgMWAKKysgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9HUkVQX21heC0wfTsgdGhlbgorKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorKyAgICAgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIKKysgICAgICBhY19wYXRoX0dSRVBfbWF4PSRhY19jb3VudAorKyAgICBmaQorKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisrICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworKyAgZG9uZQorKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7CisrZXNhYworKworKworKyAgICAkYWNfcGF0aF9HUkVQX2ZvdW5kICYmIGJyZWFrIDMKKysgIGRvbmUKKytkb25lCisrCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKysKKytmaQorKworK0dSRVA9IiRhY19jdl9wYXRoX0dSRVAiCisraWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisrICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBubyBhY2NlcHRhYmxlICRhY19wcm9nX25hbWUgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlICRhY19wcm9nX25hbWUgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorK2ZpCisrCisrZWxzZQorKyAgYWNfY3ZfcGF0aF9HUkVQPSRHUkVQCisrZmkKKysKKysKKytmaQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3BhdGhfR1JFUCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3BhdGhfR1JFUCIgPiY2OyB9CisrIEdSRVA9IiRhY19jdl9wYXRoX0dSRVAiCisrCisrCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGVncmVwIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAkRUNIT19DIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3BhdGhfRUdSRVArc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgaWYgZWNobyBhIHwgJEdSRVAgLUUgJyhhfGIpJyA+L2Rldi9udWxsIDI+JjEKKysgICB0aGVuIGFjX2N2X3BhdGhfRUdSRVA9IiRHUkVQIC1FIgorKyAgIGVsc2UKKysgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZWdyZXAiIHRvIHVzZSBpbiBtc2cgb3V0cHV0CisraWYgdGVzdCAteiAiJEVHUkVQIjsgdGhlbgorK3NldCBkdW1teSBlZ3JlcDsgYWNfcHJvZ19uYW1lPSQyCisraWYgdGVzdCAiJHthY19jdl9wYXRoX0VHUkVQK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGFjX3BhdGhfRUdSRVBfZm91bmQ9ZmFsc2UKKysjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGFjX3Byb2cgaW4gZWdyZXA7IGRvCisrICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgICAgYWNfcGF0aF9FR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKysgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9FR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfRUdSRVAiOyB9IHx8IGNvbnRpbnVlCisrICAgICMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0VHUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisrICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfRUdSRVAKKytjYXNlIGAiJGFjX3BhdGhfRUdSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKypHTlUqKQorKyAgYWNfY3ZfcGF0aF9FR1JFUD0iJGFjX3BhdGhfRUdSRVAiIGFjX3BhdGhfRUdSRVBfZm91bmQ9Ojs7CisrKikKKysgIGFjX2NvdW50PTAKKysgIGVjaG8gJEVDSE9fTiAiMDEyMzQ1Njc4OSRFQ0hPX0MiID4iY29uZnRlc3QuaW4iCisrICB3aGlsZSA6CisrICBkbworKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisrICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorKyAgICBlY2hvICdFR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgorKyAgICAiJGFjX3BhdGhfRUdSRVAiICdFR1JFUCQnIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKysgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworKyAgICBhY19jb3VudD1gZXhwciAkYWNfY291bnQgKyAxYAorKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0VHUkVQX21heC0wfTsgdGhlbgorKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorKyAgICAgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIgorKyAgICAgIGFjX3BhdGhfRUdSRVBfbWF4PSRhY19jb3VudAorKyAgICBmaQorKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisrICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworKyAgZG9uZQorKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7CisrZXNhYworKworKworKyAgICAkYWNfcGF0aF9FR1JFUF9mb3VuZCAmJiBicmVhayAzCisrICBkb25lCisrZG9uZQorKworK2RvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrCisrZmkKKysKKytFR1JFUD0iJGFjX2N2X3BhdGhfRUdSRVAiCisraWYgdGVzdCAteiAiJEVHUkVQIjsgdGhlbgorKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSAkYWNfcHJvZ19uYW1lIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSAkYWNfcHJvZ19uYW1lIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKytmaQorKworK2Vsc2UKKysgIGFjX2N2X3BhdGhfRUdSRVA9JEVHUkVQCisrZmkKKysKKysKKysgICBmaQorK2ZpCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcGF0aF9FR1JFUCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3BhdGhfRUdSRVAiID4mNjsgfQorKyBFR1JFUD0iJGFjX2N2X3BhdGhfRUdSRVAiCisrCisrCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGZncmVwIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBmZ3JlcC4uLiAkRUNIT19DIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3BhdGhfRkdSRVArc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgaWYgZWNobyAnYWIqYycgfCAkR1JFUCAtRiAnYWIqYycgPi9kZXYvbnVsbCAyPiYxCisrICAgdGhlbiBhY19jdl9wYXRoX0ZHUkVQPSIkR1JFUCAtRiIKKysgICBlbHNlCisrICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImZncmVwIiB0byB1c2UgaW4gbXNnIG91dHB1dAorK2lmIHRlc3QgLXogIiRGR1JFUCI7IHRoZW4KKytzZXQgZHVtbXkgZmdyZXA7IGFjX3Byb2dfbmFtZT0kMgorK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9GR1JFUCtzZXR9IiA9IHNldDsgdGhlbgorKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKytlbHNlCisrICBhY19wYXRoX0ZHUkVQX2ZvdW5kPWZhbHNlCisrIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgIGZvciBhY19wcm9nIGluIGZncmVwOyBkbworKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICAgIGFjX3BhdGhfRkdSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisrICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfRkdSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX0ZHUkVQIjsgfSB8fCBjb250aW51ZQorKyAgICAjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9GR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0ZHUkVQCisrY2FzZSBgIiRhY19wYXRoX0ZHUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KKysqR05VKikKKysgIGFjX2N2X3BhdGhfRkdSRVA9IiRhY19wYXRoX0ZHUkVQIiBhY19wYXRoX0ZHUkVQX2ZvdW5kPTo7OworKyopCisrICBhY19jb3VudD0wCisrICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+ImNvbmZ0ZXN0LmluIgorKyAgd2hpbGUgOgorKyAgZG8KKysgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKysgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKysgICAgZWNobyAnRkdSRVAnID4+ICJjb25mdGVzdC5ubCIKKysgICAgIiRhY19wYXRoX0ZHUkVQIiBGR1JFUCA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisrICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKysgICAgYWNfY291bnQ9YGV4cHIgJGFjX2NvdW50ICsgMWAKKysgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9GR1JFUF9tYXgtMH07IHRoZW4KKysgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKysgICAgICBhY19jdl9wYXRoX0ZHUkVQPSIkYWNfcGF0aF9GR1JFUCIKKysgICAgICBhY19wYXRoX0ZHUkVQX21heD0kYWNfY291bnQKKysgICAgZmkKKysgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKysgIGRvbmUKKysgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworK2VzYWMKKysKKyAKKy1maQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjYKKy1DQ0RFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUKKysgICAgJGFjX3BhdGhfRkdSRVBfZm91bmQgJiYgYnJlYWsgMworKyAgZG9uZQorK2RvbmUKKyAKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorIAorLWlmCistICB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm8gXAorLSAgJiYgdGVzdCAiJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzM7IHRoZW4KKy0gIGFtX19mYXN0ZGVwQ0NfVFJVRT0KKy0gIGFtX19mYXN0ZGVwQ0NfRkFMU0U9JyMnCistZWxzZQorLSAgYW1fX2Zhc3RkZXBDQ19UUlVFPScjJworLSAgYW1fX2Zhc3RkZXBDQ19GQUxTRT0KKyBmaQorIAorK0ZHUkVQPSIkYWNfY3ZfcGF0aF9GR1JFUCIKKytpZiB0ZXN0IC16ICIkRkdSRVAiOyB0aGVuCisrICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBubyBhY2NlcHRhYmxlICRhY19wcm9nX25hbWUgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlICRhY19wcm9nX25hbWUgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorK2ZpCisgCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZWdyZXAuLi4gJEVDSE9fQyIgPiY2CistaWYgdGVzdCAiJHthY19jdl9wcm9nX2VncmVwK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGlmIGVjaG8gYSB8IChncmVwIC1FICcoYXxiKScpID4vZGV2L251bGwgMj4mMQorLSAgICB0aGVuIGFjX2N2X3Byb2dfZWdyZXA9J2dyZXAgLUUnCistICAgIGVsc2UgYWNfY3ZfcHJvZ19lZ3JlcD0nZWdyZXAnCistICAgIGZpCisrICBhY19jdl9wYXRoX0ZHUkVQPSRGR1JFUAorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfZWdyZXAiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2VncmVwIiA+JjYKKy0gRUdSRVA9JGFjX2N2X3Byb2dfZWdyZXAKKyAKKyAKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGZncmVwIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBmZ3JlcC4uLiAkRUNIT19DIiA+JjYKKy1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfZmdyZXArc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgaWYgZWNobyAnYWIqYycgfCAoZ3JlcCAtRiAnYWIqYycpID4vZGV2L251bGwgMj4mMQorLSAgICB0aGVuIGFjX2N2X3Byb2dfZmdyZXA9J2dyZXAgLUYnCistICAgIGVsc2UgYWNfY3ZfcHJvZ19mZ3JlcD0nZmdyZXAnCistICAgIGZpCisrICAgZmkKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2ZncmVwIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19mZ3JlcCIgPiY2CistIEZHUkVQPSRhY19jdl9wcm9nX2ZncmVwCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcGF0aF9GR1JFUCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3BhdGhfRkdSRVAiID4mNjsgfQorKyBGR1JFUD0iJGFjX2N2X3BhdGhfRkdSRVAiCisgCisgCisgdGVzdCAteiAiJEdSRVAiICYmIEdSRVA9Z3JlcAorQEAgLTQ1MzUsMTggKzU0ODQsMTggQEAKKyAKKyAKKyAKKy0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWdudS1sZCBvciAtLXdpdGhvdXQtZ251LWxkIHdhcyBnaXZlbi4KKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLWdudS1sZCB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHt3aXRoX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbgorLSAgd2l0aHZhbD0iJHdpdGhfZ251X2xkIgorLSAgdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzCisrICB3aXRodmFsPSR3aXRoX2dudV9sZDsgdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzCisgZWxzZQorICAgd2l0aF9nbnVfbGQ9bm8KKy1maTsKKytmaQorKworIGFjX3Byb2c9bGQKKyBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQy4uLiAkRUNIT19DIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MuLi4gJEVDSE9fQyIgPiY2OyB9CisgICBjYXNlICRob3N0IGluCisgICAqLSotbWluZ3cqKQorICAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3CitAQCAtNDU3NSwxMSArNTUyNCwxMSBAQAorICAgICA7OworICAgZXNhYworIGVsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBHTlUgbGQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEdOVSBsZC4uLiAkRUNIT19DIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBHTlUgbGQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEdOVSBsZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gJEVDSE9fQyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igbm9uLUdOVSBsZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igbm9uLUdOVSBsZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBmaQorIGlmIHRlc3QgIiR7bHRfY3ZfcGF0aF9MRCtzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK0BAIC00NjEyLDE3ICs1NTYxLDE3IEBACisgCisgTEQ9IiRsdF9jdl9wYXRoX0xEIgorIGlmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRMRCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JExEIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJExEIiA+JjUKKytlY2hvICIke0VDSE9fVH0kTEQiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyB0ZXN0IC16ICIkTEQiICYmIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIIiA+JjUKKyBlY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgPiYyO30KKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtNDYzNiw4ICs1NTg1LDggQEAKKyAgIDs7CisgZXNhYworIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19nbnVfbGQiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKKytlY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19nbnVfbGQiID4mNjsgfQorIHdpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAorIAorIAorQEAgLTQ2NDgsOCArNTU5Nyw4IEBACisgCisgCisgCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSkuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKS4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X3BhdGhfTk0rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTQ2OTcsOCArNTY0Niw4IEBACisgICA6ICR7bHRfY3ZfcGF0aF9OTT1ub30KKyBmaQorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3BhdGhfTk0iID4mNQorLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wYXRoX05NIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wYXRoX05NIiA+JjUKKytlY2hvICIke0VDSE9fVH0kbHRfY3ZfcGF0aF9OTSIgPiY2OyB9CisgaWYgdGVzdCAiJGx0X2N2X3BhdGhfTk0iICE9ICJubyI7IHRoZW4KKyAgIE5NPSIkbHRfY3ZfcGF0aF9OTSIKKyBlbHNlCitAQCAtNDcwOCw4ICs1NjU3LDggQEAKKyAgIGRvCisgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX0RVTVBCSU4rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTQ3MjIsMjUgKzU2NzEsMjcgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfRFVNUEJJTj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgRFVNUEJJTj0kYWNfY3ZfcHJvZ19EVU1QQklOCisgaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkRFVNUEJJTiIgPiY1CistZWNobyAiJHtFQ0hPX1R9JERVTVBCSU4iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkRFVNUEJJTiIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JERVTVBCSU4iID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKysKKyAgICAgdGVzdCAtbiAiJERVTVBCSU4iICYmIGJyZWFrCisgICBkb25lCisgZmkKK0BAIC00NzUwLDggKzU3MDEsOCBAQAorIGRvCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC00NzY0LDMwICs1NzE1LDQ1IEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX2FjX2N0X0RVTVBCSU49IiRhY19wcm9nIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKyBmaQorIGFjX2N0X0RVTVBCSU49JGFjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTgorIGlmIHRlc3QgLW4gIiRhY19jdF9EVU1QQklOIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0RVTVBCSU4iID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdF9EVU1QQklOIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0RVTVBCSU4iID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdF9EVU1QQklOIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCisrCisgICB0ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiIgJiYgYnJlYWsKKyBkb25lCistdGVzdCAtbiAiJGFjX2N0X0RVTVBCSU4iIHx8IGFjX2N0X0RVTVBCSU49IjoiCisgCistICBEVU1QQklOPSRhY19jdF9EVU1QQklOCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0RVTVBCSU4iID0geDsgdGhlbgorKyAgICBEVU1QQklOPSI6IgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgRFVNUEJJTj0kYWNfY3RfRFVNUEJJTgorKyAgZmkKKyBmaQorIAorIAorQEAgLTQ4MDIsNDMgKzU3NjgsNDMgQEAKKyAKKyAKKyAKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB0aGUgbmFtZSBsaXN0ZXIgKCROTSkgaW50ZXJmYWNlLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHRoZSBuYW1lIGxpc3RlciAoJE5NKSBpbnRlcmZhY2UiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZS4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X25tX2ludGVyZmFjZStzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBsdF9jdl9ubV9pbnRlcmZhY2U9IkJTRCBubSIKKyAgIGVjaG8gImludCBzb21lX3ZhcmlhYmxlID0gMDsiID4gY29uZnRlc3QuJGFjX2V4dAorLSAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjQ4MTI6ICRhY19jb21waWxlXCIiID4mNSkKKysgIChldmFsIGVjaG8gIlwiXCRhc19tZTo1Nzc4OiAkYWNfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGFjX2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIChldmFsIGVjaG8gIlwiXCRhc19tZTo0ODE1OiAkTk0gXFxcImNvbmZ0ZXN0LiRhY19vYmpleHRcXFwiXCIiID4mNSkKKysgIChldmFsIGVjaG8gIlwiXCRhc19tZTo1NzgxOiAkTk0gXFxcImNvbmZ0ZXN0LiRhY19vYmpleHRcXFwiXCIiID4mNSkKKyAgIChldmFsICIkTk0gXCJjb25mdGVzdC4kYWNfb2JqZXh0XCIiIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0KQorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIChldmFsIGVjaG8gIlwiXCRhc19tZTo0ODE4OiBvdXRwdXRcIiIgPiY1KQorKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjU3ODQ6IG91dHB1dFwiIiA+JjUpCisgICBjYXQgY29uZnRlc3Qub3V0ID4mNQorICAgaWYgJEdSRVAgJ0V4dGVybmFsLipzb21lX3ZhcmlhYmxlJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgbHRfY3Zfbm1faW50ZXJmYWNlPSJNUyBkdW1wYmluIgorICAgZmkKKyAgIHJtIC1mIGNvbmZ0ZXN0KgorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X25tX2ludGVyZmFjZSIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X2N2X25tX2ludGVyZmFjZSIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3Zfbm1faW50ZXJmYWNlIiA+JjUKKytlY2hvICIke0VDSE9fVH0kbHRfY3Zfbm1faW50ZXJmYWNlIiA+JjY7IH0KKyAKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3JrcyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3Jrcy4uLiAkRUNIT19DIiA+JjY7IH0KKyBMTl9TPSRhc19sbl9zCisgaWYgdGVzdCAiJExOX1MiID0gImxuIC1zIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH15ZXMiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8sIHVzaW5nICRMTl9TIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubywgdXNpbmcgJExOX1MiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubywgdXNpbmcgJExOX1MiID4mNQorK2VjaG8gIiR7RUNIT19UfW5vLCB1c2luZyAkTE5fUyIgPiY2OyB9CisgZmkKKyAKKyAjIGZpbmQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHtsdF9jdl9zeXNfbWF4X2NtZF9sZW4rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTQ5NTcsMTEgKzU5MjMsMTEgQEAKKyBmaQorIAorIGlmIHRlc3QgLW4gJGx0X2N2X3N5c19tYXhfY21kX2xlbiA7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNQorLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIiA+JjUKKytlY2hvICIke0VDSE9fVH0kbHRfY3Zfc3lzX21heF9jbWRfbGVuIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBub25lIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ub25lIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm9uZSIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm9uZSIgPiY2OyB9CisgZmkKKyBtYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCisgCitAQCAtNDk3NCw4ICs1OTQwLDggQEAKKyA6ICR7TVY9Im12IC1mIn0KKyA6ICR7Uk09InJtIC1mIn0KKyAKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAkRUNIT19DIiA+JjY7IH0KKyAjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworIHhzaV9zaGVsbD1ubworICggX2x0X2R1bW15PSJhL2IvYyIKK0BAIC00OTg0LDE4ICs1OTUwLDE4IEBACisgICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKKyAgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICYmIHhzaV9zaGVsbD15ZXMKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkeHNpX3NoZWxsIiA+JjUKKy1lY2hvICIke0VDSE9fVH0keHNpX3NoZWxsIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICR4c2lfc2hlbGwiID4mNQorK2VjaG8gIiR7RUNIT19UfSR4c2lfc2hlbGwiID4mNjsgfQorIAorIAorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBcIis9XCIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgXCIrPVwiLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIFwiKz1cIiIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBcIis9XCIuLi4gJEVDSE9fQyIgPiY2OyB9CisgbHRfc2hlbGxfYXBwZW5kPW5vCisgKCBmb289YmFyOyBzZXQgZm9vIGJhejsgZXZhbCAiJDErPVwkMiIgJiYgdGVzdCAiJGZvbyIgPSBiYXJiYXogKSBcCisgICAgID4vZGV2L251bGwgMj4mMSBcCisgICAmJiBsdF9zaGVsbF9hcHBlbmQ9eWVzCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3NoZWxsX2FwcGVuZCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X3NoZWxsX2FwcGVuZCIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfc2hlbGxfYXBwZW5kIiA+JjUKKytlY2hvICIke0VDSE9fVH0kbHRfc2hlbGxfYXBwZW5kIiA+JjY7IH0KKyAKKyAKKyBpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KK0BAIC01MDI5LDE1ICs1OTk1LDE1IEBACisgCisgCisgCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBsdF9jdl9sZF9yZWxvYWRfZmxhZz0nLXInCisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfbGRfcmVsb2FkX2ZsYWciID4mNQorLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9sZF9yZWxvYWRfZmxhZyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfbGRfcmVsb2FkX2ZsYWciID4mNQorK2VjaG8gIiR7RUNIT19UfSRsdF9jdl9sZF9yZWxvYWRfZmxhZyIgPiY2OyB9CisgcmVsb2FkX2ZsYWc9JGx0X2N2X2xkX3JlbG9hZF9mbGFnCisgY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyAiIiB8ICIgIiopIDs7CitAQCAtNTA2NSw4ICs2MDMxLDggQEAKKyBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcDsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX09CSkRVTVArc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTUwNzksMzIgKzYwNDUsMzQgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfT0JKRFVNUD0iJHthY190b29sX3ByZWZpeH1vYmpkdW1wIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKyBmaQorIE9CSkRVTVA9JGFjX2N2X3Byb2dfT0JKRFVNUAorIGlmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJE9CSkRVTVAiID4mNQorLWVjaG8gIiR7RUNIT19UfSRPQkpEVU1QIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJE9CSkRVTVAiID4mNQorK2VjaG8gIiR7RUNIT19UfSRPQkpEVU1QIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCisrCisgZmkKKyBpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PQkpEVU1QIjsgdGhlbgorICAgYWNfY3RfT0JKRFVNUD0kT0JKRFVNUAorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgb2JqZHVtcDsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X09CSkRVTVArc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTUxMTcsMjcgKzYwODUsNDEgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0ib2JqZHVtcCIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorLSAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUCIgJiYgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSJmYWxzZSIKKyBmaQorIGZpCisgYWNfY3RfT0JKRFVNUD0kYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QCisgaWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfT0JKRFVNUCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N0X09CSkRVTVAiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfT0JKRFVNUCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N0X09CSkRVTVAiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKy0gIE9CSkRVTVA9JGFjX2N0X09CSkRVTVAKKysgIGlmIHRlc3QgIngkYWNfY3RfT0JKRFVNUCIgPSB4OyB0aGVuCisrICAgIE9CSkRVTVA9ImZhbHNlIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgT0JKRFVNUD0kYWNfY3RfT0JKRFVNUAorKyAgZmkKKyBlbHNlCisgICBPQkpEVU1QPSIkYWNfY3ZfcHJvZ19PQkpEVU1QIgorIGZpCitAQCAtNTE0OSw4ICs2MTMxLDggQEAKKyAKKyAKKyAKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byByZWNvZ25pemUgZGVwZW5kZW50IGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXMiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTUzNDUsOCArNjMyNyw4IEBACisgZXNhYworIAorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKKytlY2hvICIke0VDSE9fVH0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQorIGZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAorIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorQEAgLTUzNjUsOCArNjM0Nyw4IEBACisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hcjsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC01Mzc5LDMyICs2MzYxLDM0IEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX0FSPSIke2FjX3Rvb2xfcHJlZml4fWFyIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKyBmaQorIEFSPSRhY19jdl9wcm9nX0FSCisgaWYgdGVzdCAtbiAiJEFSIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJEFSIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kQVIiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQVIiID4mNQorK2VjaG8gIiR7RUNIT19UfSRBUiIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorKworIGZpCisgaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCisgICBhY19jdF9BUj0kQVIKKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSBhcjsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC01NDE3LDI3ICs2NDAxLDQxIEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorLSAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWNfY3RfQVIiICYmIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImZhbHNlIgorIGZpCisgZmkKKyBhY19jdF9BUj0kYWNfY3ZfcHJvZ19hY19jdF9BUgorIGlmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9BUiIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0FSIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0FSIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3RfQVIiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKy0gIEFSPSRhY19jdF9BUgorKyAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCisrICAgIEFSPSJmYWxzZSIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIEFSPSRhY19jdF9BUgorKyAgZmkKKyBlbHNlCisgICBBUj0iJGFjX2N2X3Byb2dfQVIiCisgZmkKK0BAIC01NDU4LDggKzY0NTYsOCBAQAorIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19TVFJJUCtzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtNTQ3MiwzMiArNjQ3MCwzNCBAQAorICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICAgYWNfY3ZfcHJvZ19TVFJJUD0iJHthY190b29sX3ByZWZpeH1zdHJpcCIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorIGZpCisgZmkKKyBTVFJJUD0kYWNfY3ZfcHJvZ19TVFJJUAorIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRTVFJJUCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JFNUUklQIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFNUUklQIiA+JjUKKytlY2hvICIke0VDSE9fVH0kU1RSSVAiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKysKKyBmaQorIGlmIHRlc3QgLXogIiRhY19jdl9wcm9nX1NUUklQIjsgdGhlbgorICAgYWNfY3RfU1RSSVA9JFNUUklQCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgc3RyaXA7IGFjX3dvcmQ9JDIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9TVFJJUCtzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtNTUxMCwyNyArNjUxMCw0MSBAQAorICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0ic3RyaXAiCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKy0gIHRlc3QgLXogIiRhY19jdl9wcm9nX2FjX2N0X1NUUklQIiAmJiBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSI6IgorIGZpCisgZmkKKyBhY19jdF9TVFJJUD0kYWNfY3ZfcHJvZ19hY19jdF9TVFJJUAorIGlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9TVFJJUCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N0X1NUUklQIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3RfU1RSSVAiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKy0gIFNUUklQPSRhY19jdF9TVFJJUAorKyAgaWYgdGVzdCAieCRhY19jdF9TVFJJUCIgPSB4OyB0aGVuCisrICAgIFNUUklQPSI6IgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgU1RSSVA9JGFjX2N0X1NUUklQCisrICBmaQorIGVsc2UKKyAgIFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKKyBmaQorQEAgLTU1NDUsOCArNjU1OSw4IEBACisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9cmFubGliOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC01NTU5LDMyICs2NTczLDM0IEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX1JBTkxJQj0iJHthY190b29sX3ByZWZpeH1yYW5saWIiCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgUkFOTElCPSRhY19jdl9wcm9nX1JBTkxJQgorIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkUkFOTElCIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kUkFOTElCIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFJBTkxJQiIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JFJBTkxJQiIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorKworIGZpCisgaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkFOTElCIjsgdGhlbgorICAgYWNfY3RfUkFOTElCPSRSQU5MSUIKKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC01NTk3LDI3ICs2NjEzLDQxIEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0icmFubGliIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCistICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIiICYmIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSI6IgorIGZpCisgZmkKKyBhY19jdF9SQU5MSUI9JGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCCisgaWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9SQU5MSUIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdF9SQU5MSUIiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3RfUkFOTElCIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCistICBSQU5MSUI9JGFjX2N0X1JBTkxJQgorKyAgaWYgdGVzdCAieCRhY19jdF9SQU5MSUIiID0geDsgdGhlbgorKyAgICBSQU5MSUI9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBSQU5MSUI9JGFjX2N0X1JBTkxJQgorKyAgZmkKKyBlbHNlCisgICBSQU5MSUI9IiRhY19jdl9wcm9nX1JBTkxJQiIKKyBmaQorQEAgLTU2OTAsOCArNjcyMCw4IEBACisgCisgCisgIyBDaGVjayBmb3IgY29tbWFuZCB0byBncmFiIHRoZSByYXcgc3ltYm9sIG5hbWUgZm9sbG93ZWQgYnkgQyBzeW1ib2wgZnJvbSBubS4KKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0Li4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGNvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3QiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTU5MTAsMTEgKzY5NDAsMTEgQEAKKyAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPQorIGZpCisgaWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBmYWlsZWQiID4mNQorLWVjaG8gIiR7RUNIT19UfWZhaWxlZCIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGZhaWxlZCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9ZmFpbGVkIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBvayIgPiY1CistZWNobyAiJHtFQ0hPX1R9b2siID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBvayIgPiY1CisrZWNobyAiJHtFQ0hPX1R9b2siID4mNjsgfQorIGZpCisgCisgCitAQCAtNTkzOSwxMSArNjk2OSwxMSBAQAorIAorIAorIAorLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgb3IgLS1kaXNhYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfbGlidG9vbF9sb2NrK3NldH0iID0gc2V0OyB0aGVuCistICBlbmFibGV2YWw9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorKyAgZW5hYmxldmFsPSRlbmFibGVfbGlidG9vbF9sb2NrOworK2ZpCisgCistZmk7CisgdGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKKyAKKyAjIFNvbWUgZmxhZ3MgbmVlZCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb21waWxlciBvciBsaW5rZXIgZm9yIGdvb2QKK0BAIC01OTcwLDcgKzcwMDAsNyBAQAorICAgOzsKKyAqLSotaXJpeDYqKQorICAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorLSAgZWNobyAnI2xpbmUgNTk3MyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0CisrICBlY2hvICcjbGluZSA3MDAzICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTYwNjIsOCArNzA5Miw4IEBACisgICAjIE9uIFNDTyBPcGVuU2VydmVyIDUsIHdlIG5lZWQgLWJlbGYgdG8gZ2V0IGZ1bGwtZmVhdHVyZWQgYmluYXJpZXMuCisgICBTQVZFX0NGTEFHUz0iJENGTEFHUyIKKyAgIENGTEFHUz0iJENGTEFHUyAtYmVsZiIKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYuLi4gJEVDSE9fQyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHtsdF9jdl9jY19uZWVkc19iZWxmK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC02MDg5LDM1ICs3MTE5LDMyIEBACisgfQorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICAgcm0gLWYgY29uZnRlc3QuZXIxCisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKysgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgIGx0X2N2X2NjX25lZWRzX2JlbGY9eWVzCisgZWxzZQorICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistbHRfY3ZfY2NfbmVlZHNfYmVsZj1ubworKwlsdF9jdl9jY19uZWVkc19iZWxmPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgYWNfZXh0PWMKKyBhY19jcHA9JyRDUFAgJENQUEZMQUdTJworQEAgLTYxMjYsOCArNzE1Myw4IEBACisgYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorIAorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNQorLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9jY19uZWVkc19iZWxmIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9jY19uZWVkc19iZWxmIiA+JjUKKytlY2hvICIke0VDSE9fVH0kbHRfY3ZfY2NfbmVlZHNfYmVsZiIgPiY2OyB9CisgICBpZiB0ZXN0IHgiJGx0X2N2X2NjX25lZWRzX2JlbGYiICE9IHgieWVzIjsgdGhlbgorICAgICAjIHRoaXMgaXMgcHJvYmFibHkgZ2NjIDIuOC4wLCBlZ2NzIDEuMCBvciBuZXdlcjsgbm8gbmVlZCBmb3IgLWJlbGYKKyAgICAgQ0ZMQUdTPSIkU0FWRV9DRkxBR1MiCitAQCAtNjE2Niw4ICs3MTkzLDggQEAKKyAgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kc3ltdXRpbDsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX0RTWU1VVElMK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC02MTgwLDMyICs3MjA3LDM0IEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX0RTWU1VVElMPSIke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKyBmaQorIERTWU1VVElMPSRhY19jdl9wcm9nX0RTWU1VVElMCisgaWYgdGVzdCAtbiAiJERTWU1VVElMIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJERTWU1VVElMIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kRFNZTVVUSUwiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkRFNZTVVUSUwiID4mNQorK2VjaG8gIiR7RUNIT19UfSREU1lNVVRJTCIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorKworIGZpCisgaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRFNZTVVUSUwiOyB0aGVuCisgICBhY19jdF9EU1lNVVRJTD0kRFNZTVVUSUwKKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZHN5bXV0aWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSBkc3ltdXRpbDsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC02MjE4LDI3ICs3MjQ3LDQxIEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMPSJkc3ltdXRpbCIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorLSAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUwiICYmIGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUw9IjoiCisgZmkKKyBmaQorIGFjX2N0X0RTWU1VVElMPSRhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMCisgaWYgdGVzdCAtbiAiJGFjX2N0X0RTWU1VVElMIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0RTWU1VVElMIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3RfRFNZTVVUSUwiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfRFNZTVVUSUwiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdF9EU1lNVVRJTCIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorLSAgRFNZTVVUSUw9JGFjX2N0X0RTWU1VVElMCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0RTWU1VVElMIiA9IHg7IHRoZW4KKysgICAgRFNZTVVUSUw9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBEU1lNVVRJTD0kYWNfY3RfRFNZTVVUSUwKKysgIGZpCisgZWxzZQorICAgRFNZTVVUSUw9IiRhY19jdl9wcm9nX0RTWU1VVElMIgorIGZpCitAQCAtNjI0Niw4ICs3Mjg5LDggQEAKKyAgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW5tZWRpdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0OyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTk1FRElUK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC02MjYwLDMyICs3MzAzLDM0IEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX05NRURJVD0iJHthY190b29sX3ByZWZpeH1ubWVkaXQiCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgTk1FRElUPSRhY19jdl9wcm9nX05NRURJVAorIGlmIHRlc3QgLW4gIiROTUVESVQiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTk1FRElUIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kTk1FRElUIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJE5NRURJVCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JE5NRURJVCIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorKworIGZpCisgaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTk1FRElUIjsgdGhlbgorICAgYWNfY3RfTk1FRElUPSROTUVESVQKKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibm1lZGl0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgbm1lZGl0OyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTk1FRElUK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC02Mjk4LDI3ICs3MzQzLDQxIEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX2FjX2N0X05NRURJVD0ibm1lZGl0IgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCistICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQiICYmIGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUPSI6IgorIGZpCisgZmkKKyBhY19jdF9OTUVESVQ9JGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUCisgaWYgdGVzdCAtbiAiJGFjX2N0X05NRURJVCI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9OTUVESVQiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdF9OTUVESVQiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfTk1FRElUIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3RfTk1FRElUIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCistICBOTUVESVQ9JGFjX2N0X05NRURJVAorKyAgaWYgdGVzdCAieCRhY19jdF9OTUVESVQiID0geDsgdGhlbgorKyAgICBOTUVESVQ9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBOTUVESVQ9JGFjX2N0X05NRURJVAorKyAgZmkKKyBlbHNlCisgICBOTUVESVQ9IiRhY19jdl9wcm9nX05NRURJVCIKKyBmaQorQEAgLTYzMjYsOCArNzM4NSw4IEBACisgICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1saXBvIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1saXBvOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTElQTytzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtNjM0MCwzMiArNzM5OSwzNCBAQAorICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICAgYWNfY3ZfcHJvZ19MSVBPPSIke2FjX3Rvb2xfcHJlZml4fWxpcG8iCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgTElQTz0kYWNfY3ZfcHJvZ19MSVBPCisgaWYgdGVzdCAtbiAiJExJUE8iOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTElQTyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JExJUE8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTElQTyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JExJUE8iID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKysKKyBmaQorIGlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0xJUE8iOyB0aGVuCisgICBhY19jdF9MSVBPPSRMSVBPCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImxpcG8iLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSBsaXBvOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTElQTytzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtNjM3OCwyNyArNzQzOSw0MSBAQAorICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICAgYWNfY3ZfcHJvZ19hY19jdF9MSVBPPSJsaXBvIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCistICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9MSVBPIiAmJiBhY19jdl9wcm9nX2FjX2N0X0xJUE89IjoiCisgZmkKKyBmaQorIGFjX2N0X0xJUE89JGFjX2N2X3Byb2dfYWNfY3RfTElQTworIGlmIHRlc3QgLW4gIiRhY19jdF9MSVBPIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0xJUE8iID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdF9MSVBPIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0xJUE8iID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdF9MSVBPIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCistICBMSVBPPSRhY19jdF9MSVBPCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0xJUE8iID0geDsgdGhlbgorKyAgICBMSVBPPSI6IgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgTElQTz0kYWNfY3RfTElQTworKyAgZmkKKyBlbHNlCisgICBMSVBPPSIkYWNfY3ZfcHJvZ19MSVBPIgorIGZpCitAQCAtNjQwNiw4ICs3NDgxLDggQEAKKyAgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW90b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vdG9vbDsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX09UT09MK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC02NDIwLDMyICs3NDk1LDM0IEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX09UT09MPSIke2FjX3Rvb2xfcHJlZml4fW90b29sIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKyBmaQorIE9UT09MPSRhY19jdl9wcm9nX09UT09MCisgaWYgdGVzdCAtbiAiJE9UT09MIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJE9UT09MIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kT1RPT0wiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkT1RPT0wiID4mNQorK2VjaG8gIiR7RUNIT19UfSRPVE9PTCIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorKworIGZpCisgaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT1RPT0wiOyB0aGVuCisgICBhY19jdF9PVE9PTD0kT1RPT0wKKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib3Rvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSBvdG9vbDsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X09UT09MK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC02NDU4LDI3ICs3NTM1LDQxIEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX2FjX2N0X09UT09MPSJvdG9vbCIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorLSAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWNfY3RfT1RPT0wiICYmIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w9IjoiCisgZmkKKyBmaQorIGFjX2N0X09UT09MPSRhY19jdl9wcm9nX2FjX2N0X09UT09MCisgaWYgdGVzdCAtbiAiJGFjX2N0X09UT09MIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X09UT09MIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3RfT1RPT0wiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfT1RPT0wiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdF9PVE9PTCIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorLSAgT1RPT0w9JGFjX2N0X09UT09MCisrICBpZiB0ZXN0ICJ4JGFjX2N0X09UT09MIiA9IHg7IHRoZW4KKysgICAgT1RPT0w9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBPVE9PTD0kYWNfY3RfT1RPT0wKKysgIGZpCisgZWxzZQorICAgT1RPT0w9IiRhY19jdl9wcm9nX09UT09MIgorIGZpCitAQCAtNjQ4Niw4ICs3NTc3LDggQEAKKyAgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW90b29sNjQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW90b29sNjQ7IGFjX3dvcmQ9JDIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19PVE9PTDY0K3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC02NTAwLDMyICs3NTkxLDM0IEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX09UT09MNjQ9IiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NCIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorIGZpCisgZmkKKyBPVE9PTDY0PSRhY19jdl9wcm9nX09UT09MNjQKKyBpZiB0ZXN0IC1uICIkT1RPT0w2NCI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRPVE9PTDY0IiA+JjUKKy1lY2hvICIke0VDSE9fVH0kT1RPT0w2NCIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRPVE9PTDY0IiA+JjUKKytlY2hvICIke0VDSE9fVH0kT1RPT0w2NCIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorKworIGZpCisgaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT1RPT0w2NCI7IHRoZW4KKyAgIGFjX2N0X09UT09MNjQ9JE9UT09MNjQKKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib3Rvb2w2NCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15IG90b29sNjQ7IGFjX3dvcmQ9JDIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0K3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC02NTM4LDI3ICs3NjMxLDQxIEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX2FjX2N0X09UT09MNjQ9Im90b29sNjQiCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKy0gIHRlc3QgLXogIiRhY19jdl9wcm9nX2FjX2N0X09UT09MNjQiICYmIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2ND0iOiIKKyBmaQorIGZpCisgYWNfY3RfT1RPT0w2ND0kYWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0CisgaWYgdGVzdCAtbiAiJGFjX2N0X09UT09MNjQiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfT1RPT0w2NCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N0X09UT09MNjQiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfT1RPT0w2NCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N0X09UT09MNjQiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKy0gIE9UT09MNjQ9JGFjX2N0X09UT09MNjQKKysgIGlmIHRlc3QgIngkYWNfY3RfT1RPT0w2NCIgPSB4OyB0aGVuCisrICAgIE9UT09MNjQ9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBPVE9PTDY0PSRhY19jdF9PVE9PTDY0CisrICBmaQorIGVsc2UKKyAgIE9UT09MNjQ9IiRhY19jdl9wcm9nX09UT09MNjQiCisgZmkKK0BAIC02NTg5LDggKzc2OTYsOCBAQAorIAorIAorIAorLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZy4uLiAkRUNIT19DIiA+JjYKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZy4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTY2MTYsMTAgKzc3MjMsMTAgQEAKKyAJcm0gLWYgY29uZnRlc3QuKgorICAgICAgIGZpCisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID4mNgorLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWciID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWcuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID4mNjsgfQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZy4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCtzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtNjY0Myw0MSArNzc1MCwzOCBAQAorIH0KKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisrICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICBsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9eWVzCisgZWxzZQorICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCisrCWx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAJTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID4mNQorLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPiY2OyB9CisgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bMDEyXSkKKyAgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CitAQCAtNjcxOCw4ICs3ODIyLDggQEAKKyBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisgYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKyBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLi4uICRFQ0hPX0MiID4mNjsgfQorICMgT24gU3Vucywgc29tZXRpbWVzICRDUFAgbmFtZXMgYSBkaXJlY3RvcnkuCisgaWYgdGVzdCAtbiAiJENQUCIgJiYgdGVzdCAtZCAiJENQUCI7IHRoZW4KKyAgIENQUD0KK0BAIC02NzUzLDI0ICs3ODU3LDIyIEBACisgI2VuZGlmCisgCQkgICAgIFN5bnRheCBlcnJvcgorIF9BQ0VPRgorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKy0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKKytpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKyAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgICBybSAtZiBjb25mdGVzdC5lcjEKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCistICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCistICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworLSAgZWxzZQorLSAgICBhY19jcHBfZXJyPQorLSAgZmkKKy1lbHNlCistICBhY19jcHBfZXJyPXllcworLWZpCistaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH07IHRoZW4KKyAgIDoKKyBlbHNlCisgICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorQEAgLTY3NzksOSArNzg4MSwxMCBAQAorICAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorIGNvbnRpbnVlCisgZmkKKysKKyBybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorIAorLSAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbi1leGlzdGVudCBoZWFkZXJzCisrICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworICAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGNvbmZkZWZzLmguICAqLworQEAgLTY3OTEsMjQgKzc4OTQsMjIgQEAKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CisgX0FDRU9GCistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorK2lmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisrICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKy0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCistICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKy0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCistICBlbHNlCistICAgIGFjX2NwcF9lcnI9CistICBmaQorLWVsc2UKKy0gIGFjX2NwcF9lcnI9eWVzCistZmkKKy1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKysgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfTsgdGhlbgorICAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KKyBjb250aW51ZQorIGVsc2UKK0BAIC02ODE5LDYgKzc5MjAsNyBAQAorIGFjX3ByZXByb2Nfb2s9OgorIGJyZWFrCisgZmkKKysKKyBybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorIAorIGRvbmUKK0BAIC02ODM2LDggKzc5MzgsOCBAQAorIGVsc2UKKyAgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDUFAiID4mNQorLWVjaG8gIiR7RUNIT19UfSRDUFAiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENQUCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JENQUCIgPiY2OyB9CisgYWNfcHJlcHJvY19vaz1mYWxzZQorIGZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcworIGRvCitAQCAtNjg2MCwyNCArNzk2MiwyMiBAQAorICNlbmRpZgorIAkJICAgICBTeW50YXggZXJyb3IKKyBfQUNFT0YKKy1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CistICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCisraWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKysgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICAgcm0gLWYgY29uZnRlc3QuZXIxCisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKy0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKy0gIGVsc2UKKy0gICAgYWNfY3BwX2Vycj0KKy0gIGZpCistZWxzZQorLSAgYWNfY3BwX2Vycj15ZXMKKy1maQorLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9OyB0aGVuCisgICA6CisgZWxzZQorICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK0BAIC02ODg2LDkgKzc5ODYsMTAgQEAKKyAgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KKyBjb250aW51ZQorIGZpCisrCisgcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKyAKKy0gICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub24tZXhpc3RlbnQgaGVhZGVycworKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBjb25mZGVmcy5oLiAgKi8KK0BAIC02ODk4LDI0ICs3OTk5LDIyIEBACisgLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorIF9BQ0VPRgorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKy0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKKytpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKyAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgICBybSAtZiBjb25mdGVzdC5lcjEKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCistICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCistICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworLSAgZWxzZQorLSAgICBhY19jcHBfZXJyPQorLSAgZmkKKy1lbHNlCistICBhY19jcHBfZXJyPXllcworLWZpCistaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH07IHRoZW4KKyAgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCisgY29udGludWUKKyBlbHNlCitAQCAtNjkyNiw2ICs4MDI1LDcgQEAKKyBhY19wcmVwcm9jX29rPToKKyBicmVhaworIGZpCisrCisgcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKyAKKyBkb25lCitAQCAtNjk0OCw4ICs4MDQ4LDggQEAKKyBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisgCisgCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTY5NzMsMzUgKzgwNzMsMzEgQEAKKyB9CisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgIGFjX2N2X2hlYWRlcl9zdGRjPXllcworIGVsc2UKKyAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLWFjX2N2X2hlYWRlcl9zdGRjPW5vCisrCWFjX2N2X2hlYWRlcl9zdGRjPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgCisgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KK0BAIC03MDU3LDYgKzgxNTMsNyBAQAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpZiAoKCcgJyAmIDB4MEZGKSA9PSAweDAyMCkKKyAjIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCisgIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQorQEAgLTcwNzYsMTggKzgxNzMsMjcgQEAKKyAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQorIAl8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKy0gICAgICBleGl0KDIpOworLSAgZXhpdCAoMCk7CisrICAgICAgcmV0dXJuIDI7CisrICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKysgIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisrICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK0BAIC03MTAwLDEyICs4MjA2LDE0IEBACisgKCBleGl0ICRhY19zdGF0dXMgKQorIGFjX2N2X2hlYWRlcl9zdGRjPW5vCisgZmkKKy1ybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisrCisrCisgZmkKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9zdGRjIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7IH0KKyBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorIAorIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCitAQCAtNzEyOCw5ICs4MjM2LDkgQEAKKyAJCSAgaW50dHlwZXMuaCBzdGRpbnQuaCB1bmlzdGQuaAorIGRvCisgYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgorLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKytpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorQEAgLTcxNDQsMzggKzgyNTIsMzUgQEAKKyAjaW5jbHVkZSA8JGFjX2hlYWRlcj4KKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICAgcm0gLWYgY29uZnRlc3QuZXIxCisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCisgZWxzZQorICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKKysJZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKy1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CisrYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCisrCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorIGlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKyAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyAjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorQEAgLTcxOTAsOSArODI5NSw5IEBACisgZm9yIGFjX2hlYWRlciBpbiBkbGZjbi5oCisgZG8KKyBhc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2CistaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorK2lmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitAQCAtNzIwNiwzOCArODMxMSwzNSBAQAorICNpbmNsdWRlIDwkYWNfaGVhZGVyPgorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKyAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgICBybSAtZiBjb25mdGVzdC5lcjEKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKKyBlbHNlCisgICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKy1ldmFsICIkYXNfYWNfSGVhZGVyPW5vIgorKwlldmFsICIkYXNfYWNfSGVhZGVyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKKythY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKysJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CisgaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorICNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitAQCAtNzI1NywxMCArODM1OSw5IEBACisgCisgCisgCistICAgICAgICAgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNoYXJlZCBvciAtLWRpc2FibGUtc2hhcmVkIHdhcyBnaXZlbi4KKysgICAgICAgICAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2hhcmVkIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9zaGFyZWQrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVuYWJsZXZhbD0iJGVuYWJsZV9zaGFyZWQiCistICBwPSR7UEFDS0FHRS1kZWZhdWx0fQorKyAgZW5hYmxldmFsPSRlbmFibGVfc2hhcmVkOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OworICAgICBubykgZW5hYmxlX3NoYXJlZD1ubyA7OworQEAgLTcyNzksNyArODM4MCw4IEBACisgICAgIGVzYWMKKyBlbHNlCisgICBlbmFibGVfc2hhcmVkPXllcworLWZpOworK2ZpCisrCisgCisgCisgCitAQCAtNzI4OCwxMCArODM5MCw5IEBACisgCisgCisgCistICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3RhdGljIG9yIC0tZGlzYWJsZS1zdGF0aWMgd2FzIGdpdmVuLgorKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN0YXRpYyB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfc3RhdGljK3NldH0iID0gc2V0OyB0aGVuCistICBlbmFibGV2YWw9IiRlbmFibGVfc3RhdGljIgorLSAgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKysgIGVuYWJsZXZhbD0kZW5hYmxlX3N0YXRpYzsgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgIHllcykgZW5hYmxlX3N0YXRpYz15ZXMgOzsKKyAgICAgbm8pIGVuYWJsZV9zdGF0aWM9bm8gOzsKK0BAIC03MzEwLDcgKzg0MTEsOCBAQAorICAgICBlc2FjCisgZWxzZQorICAgZW5hYmxlX3N0YXRpYz15ZXMKKy1maTsKKytmaQorKworIAorIAorIAorQEAgLTczMjAsMTMgKzg0MjIsMTMgQEAKKyAKKyAKKyAKKy0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXBpYyBvciAtLXdpdGhvdXQtcGljIHdhcyBnaXZlbi4KKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLXBpYyB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHt3aXRoX3BpYytzZXR9IiA9IHNldDsgdGhlbgorLSAgd2l0aHZhbD0iJHdpdGhfcGljIgorLSAgcGljX21vZGU9IiR3aXRodmFsIgorKyAgd2l0aHZhbD0kd2l0aF9waWM7IHBpY19tb2RlPSIkd2l0aHZhbCIKKyBlbHNlCisgICBwaWNfbW9kZT1kZWZhdWx0CistZmk7CisrZmkKKysKKyAKKyB0ZXN0IC16ICIkcGljX21vZGUiICYmIHBpY19tb2RlPWRlZmF1bHQKKyAKK0BAIC03MzM2LDEwICs4NDM4LDkgQEAKKyAKKyAKKyAKKy0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1mYXN0LWluc3RhbGwgb3IgLS1kaXNhYmxlLWZhc3QtaW5zdGFsbCB3YXMgZ2l2ZW4uCisrICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZmFzdC1pbnN0YWxsIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9mYXN0X2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVuYWJsZXZhbD0iJGVuYWJsZV9mYXN0X2luc3RhbGwiCistICBwPSR7UEFDS0FHRS1kZWZhdWx0fQorKyAgZW5hYmxldmFsPSRlbmFibGVfZmFzdF9pbnN0YWxsOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICAgeWVzKSBlbmFibGVfZmFzdF9pbnN0YWxsPXllcyA7OworICAgICBubykgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubyA7OworQEAgLTczNTgsNyArODQ1OSw4IEBACisgICAgIGVzYWMKKyBlbHNlCisgICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcworLWZpOworK2ZpCisrCisgCisgCisgCitAQCAtNzQxOCw4ICs4NTIwLDggQEAKKyAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorIGZpCisgCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBvYmpkaXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG9iamRpci4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igb2JqZGlyIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBvYmpkaXIuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHtsdF9jdl9vYmpkaXIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTc0MzMsOCArODUzNSw4IEBACisgZmkKKyBybWRpciAubGlicyAyPi9kZXYvbnVsbAorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X29iamRpciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X2N2X29iamRpciIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3Zfb2JqZGlyIiA+JjUKKytlY2hvICIke0VDSE9fVH0kbHRfY3Zfb2JqZGlyIiA+JjY7IH0KKyBvYmpkaXI9JGx0X2N2X29iamRpcgorIAorIAorQEAgLTc1MjYsOCArODYyOCw4IEBACisgY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKyBmaWxlX21hZ2ljKikKKyAgIGlmIHRlc3QgIiRmaWxlX21hZ2ljX2NtZCIgPSAnJE1BR0lDX0NNRCc7IHRoZW4KKy0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAke2FjX3Rvb2xfcHJlZml4fWZpbGUiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZS4uLiAkRUNIT19DIiA+JjYKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZSIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJHthY190b29sX3ByZWZpeH1maWxlLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfcGF0aF9NQUdJQ19DTUQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTc1NzksMTEgKzg2ODEsMTEgQEAKKyAKKyBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKKyBpZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJE1BR0lDX0NNRCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JE1BR0lDX0NNRCIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQorK2VjaG8gIiR7RUNIT19UfSRNQUdJQ19DTUQiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKyAKK0BAIC03NTkyLDggKzg2OTQsOCBAQAorIAorIGlmIHRlc3QgLXogIiRsdF9jdl9wYXRoX01BR0lDX0NNRCI7IHRoZW4KKyAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBmaWxlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBmaWxlLi4uICRFQ0hPX0MiID4mNgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZmlsZSIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZmlsZS4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X3BhdGhfTUFHSUNfQ01EK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC03NjQ1LDExICs4NzQ3LDExIEBACisgCisgTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCisgaWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQorLWVjaG8gIiR7RUNIT19UfSRNQUdJQ19DTUQiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKKytlY2hvICIke0VDSE9fVH0kTUFHSUNfQ01EIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCisgCitAQCAtNzcyOSw4ICs4ODMxLDggQEAKKyBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9JyAtZm5vLWJ1aWx0aW4nCisgCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMuLi4gJEVDSE9fQyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucy4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC03NzQ3LDExICs4ODQ5LDExIEBACisgICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZTo3NzUwOiAkbHRfY29tcGlsZVwiIiA+JjUpCisrICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjg4NTI6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgIGFjX3N0YXR1cz0kPworICAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICAgZWNobyAiJGFzX21lOjc3NTQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgIGVjaG8gIiRhc19tZTo4ODU2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorQEAgLTc3NjQsOCArODg2Niw4IEBACisgICAgJFJNIGNvbmZ0ZXN0KgorIAorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjUKKytlY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNjsgfQorIAorIGlmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID0geHllczsgdGhlbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiCitAQCAtNzc4NCw4ICs4ODg2LDggQEAKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KKyAKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gJEVDSE9fQyIgPiY2OyB9CisgCisgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworQEAgLTgwNTYsOCArOTE1OCw4IEBACisgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgIDs7CisgZXNhYworLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKyAKKyAKKyAKK0BAIC04MDY4LDggKzkxNzAsOCBAQAorICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyAjCisgaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWMgd29ya3MiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3Jrcy4uLiAkRUNIT19DIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWMgd29ya3MiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3Jrcy4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC04MDg2LDExICs5MTg4LDExIEBACisgICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZTo4MDg5OiAkbHRfY29tcGlsZVwiIiA+JjUpCisrICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjkxOTE6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgIGFjX3N0YXR1cz0kPworICAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICAgZWNobyAiJGFzX21lOjgwOTM6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgIGVjaG8gIiRhc19tZTo5MTk1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorQEAgLTgxMDMsOCArOTIwNSw4IEBACisgICAgJFJNIGNvbmZ0ZXN0KgorIAorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjUKKytlY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID4mNjsgfQorIAorIGlmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID0geHllczsgdGhlbgorICAgICBjYXNlICRsdF9wcm9nX2NvbXBpbGVyX3BpYyBpbgorQEAgLTgxMjcsOCArOTIyOSw4IEBACisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorICMKKyB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTgxNTUsOCArOTI1Nyw4IEBACisgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjY7IH0KKyAKKyBpZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA9IHh5ZXM7IHRoZW4KKyAgICAgOgorQEAgLTgxNzAsOCArOTI3Miw4IEBACisgCisgCisgCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX28rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTgxOTEsMTEgKzkyOTMsMTEgQEAKKyAgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCistICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjgxOTQ6ICRsdF9jb21waWxlXCIiID4mNSkKKysgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6OTI5NjogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgIGFjX3N0YXR1cz0kPworICAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQorLSAgIGVjaG8gIiRhc19tZTo4MTk4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgICBlY2hvICIkYXNfbWU6OTMwMDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKyAgICB0aGVuCisgICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorQEAgLTgyMTcsMTYgKzkzMTksMTYgQEAKKyAgICAkUk0gY29uZnRlc3QqCisgCisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNQorLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNQorK2VjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY2OyB9CisgCisgCisgCisgCisgCisgCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX28rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTgyNDYsMTEgKzkzNDgsMTEgQEAKKyAgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCistICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjgyNDk6ICRsdF9jb21waWxlXCIiID4mNSkKKysgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6OTM1MTogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgIGFjX3N0YXR1cz0kPworICAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQorLSAgIGVjaG8gIiRhc19tZTo4MjUzOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgICBlY2hvICIkYXNfbWU6OTM1NTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKyAgICB0aGVuCisgICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorQEAgLTgyNzIsOCArOTM3NCw4IEBACisgICAgJFJNIGNvbmZ0ZXN0KgorIAorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjUKKytlY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNjsgfQorIAorIAorIAorQEAgLTgyODEsMTYgKzkzODMsMTYgQEAKKyBoYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCisgaWYgdGVzdCAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgorICAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAkRUNIT19DIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MuLi4gJEVDSE9fQyIgPiY2OyB9CisgICBoYXJkX2xpbmtzPXllcworICAgJFJNIGNvbmZ0ZXN0KgorICAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgIHRvdWNoIGNvbmZ0ZXN0LmEKKyAgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KKyAgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGhhcmRfbGlua3MiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGhhcmRfbGlua3MiID4mNjsgfQorICAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjI7fQorQEAgLTgzMDUsOCArOTQwNyw4IEBACisgCisgCisgCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2OyB9CisgCisgICBydW5wYXRoX3Zhcj0KKyAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPQorQEAgLTg3NjMsMjcgKzk4NjUsMjMgQEAKKyB9CisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKyAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgICBybSAtZiBjb25mdGVzdC5lcjEKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorIAorIGx0X2FpeF9saWJwYXRoX3NlZD0nCisgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKK0BAIC04ODAxLDggKzk4OTksMTAgQEAKKyAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorKworIGZpCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKK0BAIC04ODMyLDI3ICs5OTMyLDIzIEBACisgfQorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICAgcm0gLWYgY29uZnRlc3QuZXIxCisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKysgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAKKyBsdF9haXhfbGlicGF0aF9zZWQ9JworICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CitAQCAtODg3MCw4ICs5OTY2LDEwIEBACisgICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKysKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCitAQCAtOTA4OCwzNSArMTAxODYsMzMgQEAKKyBpbnQgZm9vKHZvaWQpIHt9CisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKyAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgICBybSAtZiBjb25mdGVzdC5lcjEKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAKKyBlbHNlCisgICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKysKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorICAgICAgIGVsc2UKK0BAIC05MzczLDggKzEwNDY5LDggQEAKKyAgICAgZmkKKyAgIGZpCisgCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGxkX3NobGlicyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGxkX3NobGlicyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGRfc2hsaWJzIiA+JjUKKytlY2hvICIke0VDSE9fVH0kbGRfc2hsaWJzIiA+JjY7IH0KKyB0ZXN0ICIkbGRfc2hsaWJzIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKyAKKyB3aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKK0BAIC05NDEwLDQ2ICsxMDUwNiw1MiBAQAorICAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKKyAgICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKKyAgICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KKy0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAkRUNIT19DIiA+JjYKKy0gICAgICAkUk0gY29uZnRlc3QqCistICAgICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisrICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAkRUNIT19DIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgICRSTSBjb25mdGVzdCoKKysJZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgCistICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisrCWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gMj5jb25mdGVzdC5lcnI7IHRoZW4KKy0gICAgICAgIHNvbmFtZT1jb25mdGVzdAorLSAgICAgICAgbGliPWNvbmZ0ZXN0CistICAgICAgICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKKy0gICAgICAgIGRlcGxpYnM9CistICAgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bAorLQlwaWNfZmxhZz0kbHRfcHJvZ19jb21waWxlcl9waWMKKy0gICAgICAgIGNvbXBpbGVyX2ZsYWdzPS12CistICAgICAgICBsaW5rZXJfZmxhZ3M9LXYKKy0gICAgICAgIHZlcnN0cmluZz0KKy0gICAgICAgIG91dHB1dF9vYmpkaXI9LgorLSAgICAgICAgbGlibmFtZT1jb25mdGVzdAorLSAgICAgICAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKy0gICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPQorLSAgICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYXJjaGl2ZV9jbWRzIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiKSA+JjUKKysJICBzb25hbWU9Y29uZnRlc3QKKysJICBsaWI9Y29uZnRlc3QKKysJICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKKysJICBkZXBsaWJzPQorKwkgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsCisrCSAgcGljX2ZsYWc9JGx0X3Byb2dfY29tcGlsZXJfcGljCisrCSAgY29tcGlsZXJfZmxhZ3M9LXYKKysJICBsaW5rZXJfZmxhZ3M9LXYKKysJICB2ZXJzdHJpbmc9CisrCSAgb3V0cHV0X29iamRpcj0uCisrCSAgbGlibmFtZT1jb25mdGVzdAorKwkgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnCisrCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9CisrCSAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYXJjaGl2ZV9jbWRzIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiKSA+JjUKKyAgIChldmFsICRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKy0gICAgICAgIHRoZW4KKy0JICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubworLSAgICAgICAgZWxzZQorLQkgIGFyY2hpdmVfY21kc19uZWVkX2xjPXllcworLSAgICAgICAgZmkKKy0gICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCistICAgICAgZWxzZQorLSAgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CistICAgICAgZmkKKy0gICAgICAkUk0gY29uZnRlc3QqCistICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFyY2hpdmVfY21kc19uZWVkX2xjIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYXJjaGl2ZV9jbWRzX25lZWRfbGMiID4mNgorKwkgIHRoZW4KKysJICAgIGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjPW5vCisrCSAgZWxzZQorKwkgICAgbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGM9eWVzCisrCSAgZmkKKysJICBhbGxvd191bmRlZmluZWRfZmxhZz0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZworKwllbHNlCisrCSAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisrCWZpCisrCSRSTSBjb25mdGVzdCoKKysKKytmaQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjIiA+JjUKKytlY2hvICIke0VDSE9fVH0kbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGMiID4mNjsgfQorKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYworICAgICAgIDs7CisgICAgIGVzYWMKKyAgIGZpCitAQCAtOTYxMiw4ICsxMDcxNCw4IEBACisgCisgCisgCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAkRUNIT19DIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MuLi4gJEVDSE9fQyIgPiY2OyB9CisgCisgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIGNhc2UgJGhvc3Rfb3MgaW4KK0BAIC0xMDAyOSwxMiArMTExMzEsMTcgQEAKKyAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCisgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisrCisgICAjIFNvbWUgYmludXRpbHMgbGQgYXJlIHBhdGNoZWQgdG8gc2V0IERUX1JVTlBBVEgKKy0gIHNhdmVfTERGTEFHUz0kTERGTEFHUworLSAgc2F2ZV9saWJkaXI9JGxpYmRpcgorLSAgZXZhbCAibGliZGlyPS9mb287IHdsPVwiJGx0X3Byb2dfY29tcGlsZXJfd2xcIjsgXAorLSAgICAgICBMREZMQUdTPVwiXCRMREZMQUdTICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysgIGlmIHRlc3QgIiR7bHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworKyAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKysgICAgc2F2ZV9saWJkaXI9JGxpYmRpcgorKyAgICBldmFsICJsaWJkaXI9L2Zvbzsgd2w9XCIkbHRfcHJvZ19jb21waWxlcl93bFwiOyBcCisrCSBMREZMQUdTPVwiXCRMREZMQUdTICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCisrICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTEwMDUwLDQwICsxMTE1Nyw0MiBAQAorIH0KKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICAgaWYgICgkT0JKRFVNUCAtcCBjb25mdGVzdCRhY19leGVleHQpIDI+L2Rldi9udWxsIHwgZ3JlcCAiUlVOUEFUSC4qJGxpYmRpciIgPi9kZXYvbnVsbDsgdGhlbgorLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworIGZpCisgCisgZWxzZQorICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisrCisgZmkKKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLSAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCistICBsaWJkaXI9JHNhdmVfbGliZGlyCisrICAgIExERkxBR1M9JHNhdmVfTERGTEFHUworKyAgICBsaWJkaXI9JHNhdmVfbGliZGlyCisrCisrZmkKKysKKysgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCisgCisgICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KKyAgICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAorQEAgLTEwMjkzLDggKzExNDAyLDggQEAKKyAgIGR5bmFtaWNfbGlua2VyPW5vCisgICA7OworIGVzYWMKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRkeW5hbWljX2xpbmtlciIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQorK2VjaG8gIiR7RUNIT19UfSRkeW5hbWljX2xpbmtlciIgPiY2OyB9CisgdGVzdCAiJGR5bmFtaWNfbGlua2VyIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKyAKKyB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCitAQCAtMTAzOTUsOCArMTE1MDQsOCBAQAorIAorIAorIAorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcy4uLiAkRUNIT19DIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcy4uLiAkRUNIT19DIiA+JjY7IH0KKyBoYXJkY29kZV9hY3Rpb249CisgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHx8CisgICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIiB8fAorQEAgLTEwNDIwLDggKzExNTI5LDggQEAKKyAgICMgZGlyZWN0b3JpZXMuCisgICBoYXJkY29kZV9hY3Rpb249dW5zdXBwb3J0ZWQKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRoYXJkY29kZV9hY3Rpb24iID4mNQorLWVjaG8gIiR7RUNIT19UfSRoYXJkY29kZV9hY3Rpb24iID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGhhcmRjb2RlX2FjdGlvbiIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGhhcmRjb2RlX2FjdGlvbiIgPiY2OyB9CisgCisgaWYgdGVzdCAiJGhhcmRjb2RlX2FjdGlvbiIgPSByZWxpbmsgfHwKKyAgICB0ZXN0ICIkaW5oZXJpdF9ycGF0aCIgPSB5ZXM7IHRoZW4KK0BAIC0xMDQ2NSw4ICsxMTU3NCw4IEBACisgCisgICBkYXJ3aW4qKQorICAgIyBpZiBsaWJkbCBpcyBpbnN0YWxsZWQgd2UgbmVlZCB0byBsaW5rIGFnYWluc3QgaXQKKy0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwuLi4gJEVDSE9fQyIgPiY2CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9saWJfZGxfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0xMDQ3OSw1NiArMTE1ODgsNTMgQEAKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisrLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisrICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisrICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCisgI2VuZGlmCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisgY2hhciBkbG9wZW4gKCk7CisgaW50CisgbWFpbiAoKQorIHsKKy1kbG9wZW4gKCk7CisrcmV0dXJuIGRsb3BlbiAoKTsKKyAgIDsKKyAgIHJldHVybiAwOworIH0KKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisrICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICBhY19jdl9saWJfZGxfZGxvcGVuPXllcworIGVsc2UKKyAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLWFjX2N2X2xpYl9kbF9kbG9wZW49bm8KKysJYWNfY3ZfbGliX2RsX2Rsb3Blbj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KKyBpZiB0ZXN0ICRhY19jdl9saWJfZGxfZGxvcGVuID0geWVzOyB0aGVuCisgICBsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiCisgZWxzZQorQEAgLTEwNTQyLDggKzExNjQ4LDggQEAKKyAgICAgOzsKKyAKKyAgICopCistICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc2hsX2xvYWQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNobF9sb2FkLi4uICRFQ0hPX0MiID4mNgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc2hsX2xvYWQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNobF9sb2FkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfZnVuY19zaGxfbG9hZCtzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMTA1NzAsNzMgKzExNjc2LDY0IEBACisgCisgI3VuZGVmIHNobF9sb2FkCisgCistLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKysvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKysgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKysgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKKy17CisgI2VuZGlmCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisgY2hhciBzaGxfbG9hZCAoKTsKKyAvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworLSNpZiBkZWZpbmVkIChfX3N0dWJfc2hsX2xvYWQpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX3NobF9sb2FkKQorKyNpZiBkZWZpbmVkIF9fc3R1Yl9zaGxfbG9hZCB8fCBkZWZpbmVkIF9fc3R1Yl9fX3NobF9sb2FkCisgY2hva2UgbWUKKy0jZWxzZQorLWNoYXIgKCpmKSAoKSA9IHNobF9sb2FkOworLSNlbmRpZgorLSNpZmRlZiBfX2NwbHVzcGx1cworLX0KKyAjZW5kaWYKKyAKKyBpbnQKKyBtYWluICgpCisgeworLXJldHVybiBmICE9IHNobF9sb2FkOworK3JldHVybiBzaGxfbG9hZCAoKTsKKyAgIDsKKyAgIHJldHVybiAwOworIH0KKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisrICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICBhY19jdl9mdW5jX3NobF9sb2FkPXllcworIGVsc2UKKyAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLWFjX2N2X2Z1bmNfc2hsX2xvYWQ9bm8KKysJYWNfY3ZfZnVuY19zaGxfbG9hZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX3NobF9sb2FkIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19zaGxfbG9hZCIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19zaGxfbG9hZCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfc2hsX2xvYWQiID4mNjsgfQorIGlmIHRlc3QgJGFjX2N2X2Z1bmNfc2hsX2xvYWQgPSB5ZXM7IHRoZW4KKyAgIGx0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiCisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQuLi4gJEVDSE9fQyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNobF9sb2FkIGluIC1sZGxkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfbGliX2RsZF9zaGxfbG9hZCtzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMTA2NDksNjEgKzExNzQ2LDU4IEBACisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKy0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorICNlbmRpZgorLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKy0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworIGNoYXIgc2hsX2xvYWQgKCk7CisgaW50CisgbWFpbiAoKQorIHsKKy1zaGxfbG9hZCAoKTsKKytyZXR1cm4gc2hsX2xvYWQgKCk7CisgICA7CisgICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKyAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgICBybSAtZiBjb25mdGVzdC5lcjEKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICAgYWNfY3ZfbGliX2RsZF9zaGxfbG9hZD15ZXMKKyBlbHNlCisgICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKy1hY19jdl9saWJfZGxkX3NobF9sb2FkPW5vCisrCWFjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY2OyB9CisgaWYgdGVzdCAkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCA9IHllczsgdGhlbgorICAgbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIgorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZGxvcGVuIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4uLi4gJEVDSE9fQyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZGxvcGVuIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4uLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9mdW5jX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMTA3MzAsNzMgKzExODI0LDY0IEBACisgCisgI3VuZGVmIGRsb3BlbgorIAorLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisrLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisrICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisrICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCisteworICNlbmRpZgorLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKy0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworIGNoYXIgZGxvcGVuICgpOworIC8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCistI2lmIGRlZmluZWQgKF9fc3R1Yl9kbG9wZW4pIHx8IGRlZmluZWQgKF9fc3R1Yl9fX2Rsb3BlbikKKysjaWYgZGVmaW5lZCBfX3N0dWJfZGxvcGVuIHx8IGRlZmluZWQgX19zdHViX19fZGxvcGVuCisgY2hva2UgbWUKKy0jZWxzZQorLWNoYXIgKCpmKSAoKSA9IGRsb3BlbjsKKy0jZW5kaWYKKy0jaWZkZWYgX19jcGx1c3BsdXMKKy19CisgI2VuZGlmCisgCisgaW50CisgbWFpbiAoKQorIHsKKy1yZXR1cm4gZiAhPSBkbG9wZW47CisrcmV0dXJuIGRsb3BlbiAoKTsKKyAgIDsKKyAgIHJldHVybiAwOworIH0KKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisrICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICBhY19jdl9mdW5jX2Rsb3Blbj15ZXMKKyBlbHNlCisgICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKy1hY19jdl9mdW5jX2Rsb3Blbj1ubworKwlhY19jdl9mdW5jX2Rsb3Blbj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2Rsb3BlbiIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfZGxvcGVuIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2Rsb3BlbiIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfZGxvcGVuIiA+JjY7IH0KKyBpZiB0ZXN0ICRhY19jdl9mdW5jX2Rsb3BlbiA9IHllczsgdGhlbgorICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iCisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwuLi4gJEVDSE9fQyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfbGliX2RsX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMTA4MDksNjEgKzExODk0LDU4IEBACisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKy0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorICNlbmRpZgorLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKy0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworIGNoYXIgZGxvcGVuICgpOworIGludAorIG1haW4gKCkKKyB7CistZGxvcGVuICgpOworK3JldHVybiBkbG9wZW4gKCk7CisgICA7CisgICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKyAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgICBybSAtZiBjb25mdGVzdC5lcjEKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICAgYWNfY3ZfbGliX2RsX2Rsb3Blbj15ZXMKKyBlbHNlCisgICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKy1hY19jdl9saWJfZGxfZGxvcGVuPW5vCisrCWFjX2N2X2xpYl9kbF9kbG9wZW49bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY2OyB9CisgaWYgdGVzdCAkYWNfY3ZfbGliX2RsX2Rsb3BlbiA9IHllczsgdGhlbgorICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIgorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sc3ZsZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sc3ZsZC4uLiAkRUNIT19DIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfbGliX3N2bGRfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0xMDg3Niw2MSArMTE5NTgsNTggQEAKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisrLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisrICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisrICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCisgI2VuZGlmCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisgY2hhciBkbG9wZW4gKCk7CisgaW50CisgbWFpbiAoKQorIHsKKy1kbG9wZW4gKCk7CisrcmV0dXJuIGRsb3BlbiAoKTsKKyAgIDsKKyAgIHJldHVybiAwOworIH0KKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisrICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICBhY19jdl9saWJfc3ZsZF9kbG9wZW49eWVzCisgZWxzZQorICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistYWNfY3ZfbGliX3N2bGRfZGxvcGVuPW5vCisrCWFjX2N2X2xpYl9zdmxkX2Rsb3Blbj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNjsgfQorIGlmIHRlc3QgJGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiA9IHllczsgdGhlbgorICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbHN2bGQiCisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbGRfbGluayBpbiAtbGRsZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQuLi4gJEVDSE9fQyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfbGliX2RsZF9kbGRfbGluaytzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMTA5NDMsNTYgKzEyMDIyLDUzIEBACisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKy0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorICNlbmRpZgorLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKy0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworIGNoYXIgZGxkX2xpbmsgKCk7CisgaW50CisgbWFpbiAoKQorIHsKKy1kbGRfbGluayAoKTsKKytyZXR1cm4gZGxkX2xpbmsgKCk7CisgICA7CisgICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKyAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgICBybSAtZiBjb25mdGVzdC5lcjEKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICAgYWNfY3ZfbGliX2RsZF9kbGRfbGluaz15ZXMKKyBlbHNlCisgICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKy1hY19jdl9saWJfZGxkX2RsZF9saW5rPW5vCisrCWFjX2N2X2xpYl9kbGRfZGxkX2xpbms9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY2OyB9CisgaWYgdGVzdCAkYWNfY3ZfbGliX2RsZF9kbGRfbGluayA9IHllczsgdGhlbgorICAgbHRfY3ZfZGxvcGVuPSJkbGRfbGluayIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIgorIGZpCitAQCAtMTEwMzIsOCArMTIxMDgsOCBAQAorICAgICBzYXZlX0xJQlM9IiRMSUJTIgorICAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCisgCistICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZiIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZi4uLiAkRUNIT19DIiA+JjYKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHtsdF9jdl9kbG9wZW5fc2VsZitzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMTEwNDMsNyArMTIxMTksNyBAQAorICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCistI2xpbmUgMTEwNDYgImNvbmZpZ3VyZSIKKysjbGluZSAxMjEyMiAiY29uZmlndXJlIgorICNpbmNsdWRlICJjb25mZGVmcy5oIgorIAorICNpZiBIQVZFX0RMRkNOX0gKK0BAIC0xMTEyMywxMyArMTIxOTksMTMgQEAKKyAKKyAKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9kbG9wZW5fc2VsZiIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2Rsb3Blbl9zZWxmIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9kbG9wZW5fc2VsZiIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2Rsb3Blbl9zZWxmIiA+JjY7IH0KKyAKKyAgICAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW5fc2VsZiIgPSB4eWVzOyB0aGVuCisgICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCistICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICRFQ0hPX0MiID4mNgorKyAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0xMTEzOSw3ICsxMjIxNSw3IEBACisgICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKy0jbGluZSAxMTE0MiAiY29uZmlndXJlIgorKyNsaW5lIDEyMjE4ICJjb25maWd1cmUiCisgI2luY2x1ZGUgImNvbmZkZWZzLmgiCisgCisgI2lmIEhBVkVfRExGQ05fSAorQEAgLTExMjE5LDggKzEyMjk1LDggQEAKKyAKKyAKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY2OyB9CisgICAgIGZpCisgCisgICAgIENQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKK0BAIC0xMTI1OCwxMyArMTIzMzQsMTMgQEAKKyAKKyBzdHJpcGxpYj0KKyBvbGRfc3RyaXBsaWI9CistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZS4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0IC1uICIkU1RSSVAiICYmICRTVFJJUCAtViAyPiYxIHwgJEdSRVAgIkdOVSBzdHJpcCIgPi9kZXYvbnVsbDsgdGhlbgorICAgdGVzdCAteiAiJG9sZF9zdHJpcGxpYiIgJiYgb2xkX3N0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC1kZWJ1ZyIKKyAgIHRlc3QgLXogIiRzdHJpcGxpYiIgJiYgc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLXVubmVlZGVkIgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH15ZXMiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CisgZWxzZQorICMgRklYTUUgLSBpbnNlcnQgc29tZSByZWFsIHRlc3RzLCBob3N0X29zIGlzbid0IHJlYWxseSBnb29kIGVub3VnaAorICAgY2FzZSAkaG9zdF9vcyBpbgorQEAgLTExMjcyLDE2ICsxMjM0OCwxNiBAQAorICAgICBpZiB0ZXN0IC1uICIkU1RSSVAiIDsgdGhlbgorICAgICAgIHN0cmlwbGliPSIkU1RSSVAgLXgiCisgICAgICAgb2xkX3N0cmlwbGliPSIkU1RSSVAgLVMiCistICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH15ZXMiID4mNgorKyAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKKytlY2hvICIke0VDSE9fVH15ZXMiID4mNjsgfQorICAgICBlbHNlCistICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgICAgIGZpCisgICAgIDs7CisgICAqKQorLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgICAgIDs7CisgICBlc2FjCisgZmkKK0BAIC0xMTI5OCwxMyArMTIzNzQsMTMgQEAKKyAKKyAKKyAgICMgUmVwb3J0IHdoaWNoIGxpYnJhcnkgdHlwZXMgd2lsbCBhY3R1YWxseSBiZSBidWlsdAorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkY2FuX2J1aWxkX3NoYXJlZCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGNhbl9idWlsZF9zaGFyZWQiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjY7IH0KKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGNhbl9idWlsZF9zaGFyZWQiID4mNQorK2VjaG8gIiR7RUNIT19UfSRjYW5fYnVpbGRfc2hhcmVkIiA+JjY7IH0KKyAKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjY7IH0KKyAgIHRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworIAorICAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCitAQCAtMTEzMjQsMTUgKzEyNDAwLDE1IEBACisgICAgIGZpCisgICAgIDs7CisgICBlc2FjCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZW5hYmxlX3NoYXJlZCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGVuYWJsZV9zaGFyZWQiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZW5hYmxlX3NoYXJlZCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGVuYWJsZV9zaGFyZWQiID4mNjsgfQorIAorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQorICAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCisgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVfc3RhdGljIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kZW5hYmxlX3N0YXRpYyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVfc3RhdGljIiA+JjUKKytlY2hvICIke0VDSE9fVH0kZW5hYmxlX3N0YXRpYyIgPiY2OyB9CisgCisgCisgCitAQCAtMTEzNTgsNyArMTI0MzQsNyBAQAorIAorIAorIAorLSAgICAgICAgICAgICAgICAgIGFjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBsaWJ0b29sIgorKyAgICAgICAgYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIGxpYnRvb2wiCisgCisgCisgCitAQCAtMTEzNzAsMTYxICsxMjQ0Niw4NSBAQAorIAorIGlmIHRlc3QgLW4gIiR7bWFjaGluZV9kaXJ9IjsgdGhlbgorICAgY2FzZSAke21hY2hpbmVfZGlyfSBpbgorLQlhMjlrKQorLQorLXN1YmRpcnM9IiRzdWJkaXJzIGEyOWsiCisrCWEyOWspIHN1YmRpcnM9IiRzdWJkaXJzIGEyOWsiCisgIDs7CistCWFybSkKKy0KKy1zdWJkaXJzPSIkc3ViZGlycyBhcm0iCisrCWFybSkgc3ViZGlycz0iJHN1YmRpcnMgYXJtIgorICA7OworLQliZmluKQorLQorLXN1YmRpcnM9IiRzdWJkaXJzIGJmaW4iCisrCWF2cjMyKSBzdWJkaXJzPSIkc3ViZGlycyBhdnIzMiIKKyAgOzsKKy0JY3JpcykKKy0KKy1zdWJkaXJzPSIkc3ViZGlycyBjcmlzIgorKwliZmluKSBzdWJkaXJzPSIkc3ViZGlycyBiZmluIgorICA7OworLQljcngpCistCistc3ViZGlycz0iJHN1YmRpcnMgY3J4IgorKwljcmlzKSBzdWJkaXJzPSIkc3ViZGlycyBjcmlzIgorICA7OworLQlkMTB2KQorLQorLXN1YmRpcnM9IiRzdWJkaXJzIGQxMHYiCisrCWNyeCkgc3ViZGlycz0iJHN1YmRpcnMgY3J4IgorICA7OworLQlkMzB2KQorLQorLXN1YmRpcnM9IiRzdWJkaXJzIGQzMHYiCisrCWQxMHYpIHN1YmRpcnM9IiRzdWJkaXJzIGQxMHYiCisgIDs7CistCWZyMzApCistCistc3ViZGlycz0iJHN1YmRpcnMgZnIzMCIKKysJZDMwdikgc3ViZGlycz0iJHN1YmRpcnMgZDMwdiIKKyAgOzsKKy0JZnJ2KQorLQorLXN1YmRpcnM9IiRzdWJkaXJzIGZydiIKKysJZnIzMCkgc3ViZGlycz0iJHN1YmRpcnMgZnIzMCIKKyAgOzsKKy0JaDgzMDApCistCistc3ViZGlycz0iJHN1YmRpcnMgaDgzMDAiCisrCWZydikgc3ViZGlycz0iJHN1YmRpcnMgZnJ2IgorICA7OworLQloODUwMCkKKy0KKy1zdWJkaXJzPSIkc3ViZGlycyBoODUwMCIKKysJaDgzMDApIHN1YmRpcnM9IiRzdWJkaXJzIGg4MzAwIgorICA7OworLQlocHBhKQorLQorLXN1YmRpcnM9IiRzdWJkaXJzIGhwcGEiCisrCWg4NTAwKSBzdWJkaXJzPSIkc3ViZGlycyBoODUwMCIKKyAgOzsKKy0JaTM4NikKKy0KKy1zdWJkaXJzPSIkc3ViZGlycyBpMzg2IgorKwlocHBhKSBzdWJkaXJzPSIkc3ViZGlycyBocHBhIgorICA7OworLQlpOTYwKQorLQorLXN1YmRpcnM9IiRzdWJkaXJzIGk5NjAiCisrCWkzODYpIHN1YmRpcnM9IiRzdWJkaXJzIGkzODYiCisgIDs7CistCWlxMjAwMCkKKy0KKy1zdWJkaXJzPSIkc3ViZGlycyBpcTIwMDAiCisrCWk5NjApIHN1YmRpcnM9IiRzdWJkaXJzIGk5NjAiCisgIDs7CistCWxtMzIpCistCistc3ViZGlycz0iJHN1YmRpcnMgbG0zMiIKKysJaXEyMDAwKSBzdWJkaXJzPSIkc3ViZGlycyBpcTIwMDAiCisgIDs7CistCW0zMmMpCistCistc3ViZGlycz0iJHN1YmRpcnMgbTMyYyIKKysJbG0zMikgc3ViZGlycz0iJHN1YmRpcnMgbG0zMiIKKyAgOzsKKy0JbTMycikKKy0KKy1zdWJkaXJzPSIkc3ViZGlycyBtMzJyIgorKwltMzJjKSBzdWJkaXJzPSIkc3ViZGlycyBtMzJjIgorICA7OworLQltNjhoYzExKQorLQorLXN1YmRpcnM9IiRzdWJkaXJzIG02OGhjMTEiCisrCW0zMnIpIHN1YmRpcnM9IiRzdWJkaXJzIG0zMnIiCisgIDs7CistCW02OGspCistCistc3ViZGlycz0iJHN1YmRpcnMgbTY4ayIKKysJbTY4aGMxMSkgc3ViZGlycz0iJHN1YmRpcnMgbTY4aGMxMSIKKyAgOzsKKy0JbTg4aykKKy0KKy1zdWJkaXJzPSIkc3ViZGlycyBtODhrIgorKwltNjhrKSBzdWJkaXJzPSIkc3ViZGlycyBtNjhrIgorICA7OworLQltZXAgKQorLQorLXN1YmRpcnM9IiRzdWJkaXJzIG1lcCIKKysJbTg4aykgc3ViZGlycz0iJHN1YmRpcnMgbTg4ayIKKyAgOzsKKy0JbWlwcykKKy0KKy1zdWJkaXJzPSIkc3ViZGlycyBtaXBzIgorKwltZXAgKSBzdWJkaXJzPSIkc3ViZGlycyBtZXAiCisgIDs7CistCW1uMTAyMDApCistCistc3ViZGlycz0iJHN1YmRpcnMgbW4xMDIwMCIKKysJbWlwcykgc3ViZGlycz0iJHN1YmRpcnMgbWlwcyIKKyAgOzsKKy0JbW4xMDMwMCkKKy0KKy1zdWJkaXJzPSIkc3ViZGlycyBtbjEwMzAwIgorKwltbjEwMjAwKSBzdWJkaXJzPSIkc3ViZGlycyBtbjEwMjAwIgorICA7OworLQltdCkKKy0KKy1zdWJkaXJzPSIkc3ViZGlycyBtdCIKKysJbW4xMDMwMCkgc3ViZGlycz0iJHN1YmRpcnMgbW4xMDMwMCIKKyAgOzsKKy0JbmVjdjcwKQorLQorLXN1YmRpcnM9IiRzdWJkaXJzIG5lY3Y3MCIKKysJbXQpIHN1YmRpcnM9IiRzdWJkaXJzIG10IgorICA7OworLQlwb3dlcnBjKQorLQorLXN1YmRpcnM9IiRzdWJkaXJzIHBvd2VycGMiCisrCW5lY3Y3MCkgc3ViZGlycz0iJHN1YmRpcnMgbmVjdjcwIgorICA7OworLQlzaCkKKy0KKy1zdWJkaXJzPSIkc3ViZGlycyBzaCIKKysJcG93ZXJwYykgc3ViZGlycz0iJHN1YmRpcnMgcG93ZXJwYyIKKyAgOzsKKy0Jc3BhcmMpCistCistc3ViZGlycz0iJHN1YmRpcnMgc3BhcmMiCisrCXNoKSBzdWJkaXJzPSIkc3ViZGlycyBzaCIKKyAgOzsKKy0Jc3B1KQorLQorLXN1YmRpcnM9IiRzdWJkaXJzIHNwdSIKKysJc3BhcmMpIHN1YmRpcnM9IiRzdWJkaXJzIHNwYXJjIgorICA7OworLQl0aWM0eCkKKy0KKy1zdWJkaXJzPSIkc3ViZGlycyB0aWM0eCIKKysJc3B1KSBzdWJkaXJzPSIkc3ViZGlycyBzcHUiCisgIDs7CistCXRpYzgwKQorLQorLXN1YmRpcnM9IiRzdWJkaXJzIHRpYzgwIgorKwl0aWM0eCkgc3ViZGlycz0iJHN1YmRpcnMgdGljNHgiCisgIDs7CistCXY4NTApCistCistc3ViZGlycz0iJHN1YmRpcnMgdjg1MCIKKysJdGljODApIHN1YmRpcnM9IiRzdWJkaXJzIHRpYzgwIgorICA7OworLQl3NjUpCistCistc3ViZGlycz0iJHN1YmRpcnMgdzY1IgorKwl2ODUwKSBzdWJkaXJzPSIkc3ViZGlycyB2ODUwIgorICA7OworLQl4ODZfNjQpCistCistc3ViZGlycz0iJHN1YmRpcnMgeDg2XzY0IgorKwl3NjUpIHN1YmRpcnM9IiRzdWJkaXJzIHc2NSIKKyAgOzsKKy0JeHNjYWxlKQorLQorLXN1YmRpcnM9IiRzdWJkaXJzIHhzY2FsZSIKKysJeDg2XzY0KSBzdWJkaXJzPSIkc3ViZGlycyB4ODZfNjQiCisgIDs7CistCXhzdG9ybXkxNikKKy0KKy1zdWJkaXJzPSIkc3ViZGlycyB4c3Rvcm15MTYiCisrCXhzY2FsZSkgc3ViZGlycz0iJHN1YmRpcnMgeHNjYWxlIgorICA7OworLQl6OGspCistCistc3ViZGlycz0iJHN1YmRpcnMgejhrIgorKwl4c3Rvcm15MTYpIHN1YmRpcnM9IiRzdWJkaXJzIHhzdG9ybXkxNiIKKysgOzsKKysJejhrKSBzdWJkaXJzPSIkc3ViZGlycyB6OGsiCisgIDs7CisgICBlc2FjOworIGZpCitAQCAtMTE1NDAsNyArMTI1NDAsNyBAQAorIGZpCisgCisgCistICAgICAgICAgIGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBNYWtlZmlsZSIKKythY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgTWFrZWZpbGUiCisgCisgY2F0ID5jb25mY2FjaGUgPDxcX0FDRU9GCisgIyBUaGlzIGZpbGUgaXMgYSBzaGVsbCBzY3JpcHQgdGhhdCBjYWNoZXMgdGhlIHJlc3VsdHMgb2YgY29uZmlndXJlCitAQCAtMTE1NjAsMzkgKzEyNTYwLDU4IEBACisgCisgIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKKyAjIGJ1dCB3ZSBrbm93IG9mIG5vIHdvcmthcm91bmQgdGhhdCBpcyBzaW1wbGUsIHBvcnRhYmxlLCBhbmQgZWZmaWNpZW50LgorLSMgU28sIGRvbid0IHB1dCBuZXdsaW5lcyBpbiBjYWNoZSB2YXJpYWJsZXMnIHZhbHVlcy4KKysjIFNvLCB3ZSBraWxsIHZhcmlhYmxlcyBjb250YWluaW5nIG5ld2xpbmVzLgorICMgVWx0cml4IHNoIHNldCB3cml0ZXMgdG8gc3RkZXJyIGFuZCBjYW4ndCBiZSByZWRpcmVjdGVkIGRpcmVjdGx5LAorICMgYW5kIHNldHMgdGhlIGhpZ2ggYml0IGluIHRoZSBjYWNoZSBmaWxlIHVubGVzcyB3ZSBhc3NpZ24gdG8gdGhlIHZhcnMuCisteworKygKKysgIGZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfCBzZWQgLW4gJ3MvXlwoW2EtekEtWl9dW2EtekEtWjAtOV9dKlwpPS4qL1wxL3AnYDsgZG8KKysgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisrICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAorKyAgICAqJHthc19ubH0qKQorKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorKyAgICAgICpfY3ZfKikgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogQ2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUuIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6IENhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lLiIgPiYyO30gOzsKKysgICAgICBlc2FjCisrICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisrICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAorKyAgICAgICopICRhc191bnNldCAkYWNfdmFyIDs7CisrICAgICAgZXNhYyA7OworKyAgICBlc2FjCisrICBkb25lCisrCisgICAoc2V0KSAyPiYxIHwKKy0gICAgY2FzZSBgKGFjX3NwYWNlPScgJzsgc2V0IHwgZ3JlcCBhY19zcGFjZSkgMj4mMWAgaW4KKy0gICAgKmFjX3NwYWNlPVwgKikKKysgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPScgJzsgc2V0KSAyPiYxYCBpbiAjKAorKyAgICAqJHthc19ubH1hY19zcGFjZT1cICopCisgICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXMgKGRvdWJsZS1xdW90ZQorICAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwpLgorICAgICAgIHNlZCAtbiBcCisgCSJzLycvJ1xcXFwnJy9nOworIAkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1xcMicvcCIKKy0gICAgICA7OworKyAgICAgIDs7ICMoCisgICAgICopCisgICAgICAgIyBgc2V0JyBxdW90ZXMgY29ycmVjdGx5IGFzIHJlcXVpcmVkIGJ5IFBPU0lYLCBzbyBkbyBub3QgYWRkIHF1b3Rlcy4KKy0gICAgICBzZWQgLW4gXAorLQkicy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT1cXDIvcCIKKysgICAgICBzZWQgLW4gIi9eW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qPS9wIgorICAgICAgIDs7CistICAgIGVzYWM7CistfSB8CisrICAgIGVzYWMgfAorKyAgICBzb3J0CisrKSB8CisgICBzZWQgJworKyAgICAgL15hY19jdl9lbnZfL2IgZW5kCisgICAgICB0IGNsZWFyCistICAgICA6IGNsZWFyCisrICAgICA6Y2xlYXIKKyAgICAgIHMvXlwoW149XSpcKT1cKC4qW3t9XS4qXCkkL3Rlc3QgIiR7XDErc2V0fSIgPSBzZXQgfHwgJi8KKyAgICAgIHQgZW5kCistICAgICAvXmFjX2N2X2Vudi8hcy9eXChbXj1dKlwpPVwoLipcKSQvXDE9JHtcMT1cMn0vCistICAgICA6IGVuZCcgPj5jb25mY2FjaGUKKy1pZiBkaWZmICRjYWNoZV9maWxlIGNvbmZjYWNoZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorLSAgaWYgdGVzdCAtdyAkY2FjaGVfZmlsZTsgdGhlbgorLSAgICB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIiAmJiBlY2hvICJ1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIKKysgICAgIHMvXlwoW149XSpcKT1cKC4qXCkkL1wxPSR7XDE9XDJ9LworKyAgICAgOmVuZCcgPj5jb25mY2FjaGUKKytpZiBkaWZmICIkY2FjaGVfZmlsZSIgY29uZmNhY2hlID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisrICBpZiB0ZXN0IC13ICIkY2FjaGVfZmlsZSI7IHRoZW4KKysgICAgdGVzdCAieCRjYWNoZV9maWxlIiAhPSAieC9kZXYvbnVsbCIgJiYKKysgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CisrZWNobyAiJGFzX21lOiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICAgY2F0IGNvbmZjYWNoZSA+JGNhY2hlX2ZpbGUKKyAgIGVsc2UKKy0gICAgZWNobyAibm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKytlY2hvICIkYXNfbWU6IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICAgZmkKKyBmaQorIHJtIC1mIGNvbmZjYWNoZQorQEAgLTExNjAxLDYzICsxMjYyMCw0OCBAQAorICMgTGV0IG1ha2UgZXhwYW5kIGV4ZWNfcHJlZml4LgorIHRlc3QgIngkZXhlY19wcmVmaXgiID0geE5PTkUgJiYgZXhlY19wcmVmaXg9JyR7cHJlZml4fScKKyAKKy0jIFZQQVRIIG1heSBjYXVzZSB0cm91YmxlIHdpdGggc29tZSBtYWtlcywgc28gd2UgcmVtb3ZlICQoc3JjZGlyKSwKKy0jICR7c3JjZGlyfSBhbmQgQHNyY2RpckAgZnJvbSBWUEFUSCBpZiBzcmNkaXIgaXMgIi4iLCBzdHJpcCBsZWFkaW5nIGFuZAorLSMgdHJhaWxpbmcgY29sb25zIGFuZCB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgbGluZSBpZiBWUEFUSCBiZWNvbWVzIGVtcHR5CistIyAoYWN0dWFsbHkgd2UgbGVhdmUgYW4gZW1wdHkgbGluZSB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMpLgorLWlmIHRlc3QgIngkc3JjZGlyIiA9IHguOyB0aGVuCistICBhY192cHN1Yj0nL15bCSBdKlZQQVRIWwkgXSo9L3sKKy1zLzoqXCQoc3JjZGlyKToqLzovOworLXMvOipcJHtzcmNkaXJ9OiovOi87Cistcy86KkBzcmNkaXJAOiovOi87Cistcy9eXChbXj1dKj1bCSBdKlwpOiovXDEvOworLXMvOiokLy87Cistcy9eW149XSo9WwkgXSokLy87CistfScKKy1maQorLQorICMgVHJhbnNmb3JtIGNvbmZkZWZzLmggaW50byBERUZTLgorICMgUHJvdGVjdCBhZ2FpbnN0IHNoZWxsIGV4cGFuc2lvbiB3aGlsZSBleGVjdXRpbmcgTWFrZWZpbGUgcnVsZXMuCisgIyBQcm90ZWN0IGFnYWluc3QgTWFrZWZpbGUgbWFjcm8gZXhwYW5zaW9uLgorICMKKyAjIElmIHRoZSBmaXJzdCBzZWQgc3Vic3RpdHV0aW9uIGlzIGV4ZWN1dGVkICh3aGljaCBsb29rcyBmb3IgbWFjcm9zIHRoYXQKKy0jIHRha2UgYXJndW1lbnRzKSwgdGhlbiB3ZSBicmFuY2ggdG8gdGhlIHF1b3RlIHNlY3Rpb24uICBPdGhlcndpc2UsCisrIyB0YWtlIGFyZ3VtZW50cyksIHRoZW4gYnJhbmNoIHRvIHRoZSBxdW90ZSBzZWN0aW9uLiAgT3RoZXJ3aXNlLAorICMgbG9vayBmb3IgYSBtYWNybyB0aGF0IGRvZXNuJ3QgdGFrZSBhcmd1bWVudHMuCistY2F0ID5jb25mZGVmMm9wdC5zZWQgPDxcX0FDRU9GCisrYWNfc2NyaXB0PScKKyB0IGNsZWFyCistOiBjbGVhcgorLXMsXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qXChbXgkgKF1bXgkgKF0qKFteKV0qKVwpWwkgXSpcKC4qXCksLURcMT1cMixnCisrOmNsZWFyCisrcy9eWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSpcKFteCSAoXVteCSAoXSooW14pXSopXClbCSBdKlwoLipcKS8tRFwxPVwyL2cKKyB0IHF1b3RlCistcyxeWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSpcKFteCSBdW14JIF0qXClbCSBdKlwoLipcKSwtRFwxPVwyLGcKKytzL15bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKlwoW14JIF1bXgkgXSpcKVsJIF0qXCguKlwpLy1EXDE9XDIvZworIHQgcXVvdGUKKy1kCistOiBxdW90ZQorLXMsWwkgYH4jJF4mKigpe31cXHw7JyI8Pj9dLFxcJixnCistcyxcWyxcXCYsZworLXMsXF0sXFwmLGcKKy1zLFwkLCQkLGcKKy1wCistX0FDRU9GCistIyBXZSB1c2UgZWNobyB0byBhdm9pZCBhc3N1bWluZyBhIHBhcnRpY3VsYXIgbGluZS1icmVha2luZyBjaGFyYWN0ZXIuCistIyBUaGUgZXh0cmEgZG90IGlzIHRvIHByZXZlbnQgdGhlIHNoZWxsIGZyb20gY29uc3VtaW5nIHRyYWlsaW5nCistIyBsaW5lLWJyZWFrcyBmcm9tIHRoZSBzdWItY29tbWFuZCBvdXRwdXQuICBBIGxpbmUtYnJlYWsgd2l0aGluCistIyBzaW5nbGUtcXVvdGVzIGRvZXNuJ3Qgd29yayBiZWNhdXNlLCBpZiB0aGlzIHNjcmlwdCBpcyBjcmVhdGVkIGluIGEKKy0jIHBsYXRmb3JtIHRoYXQgdXNlcyB0d28gY2hhcmFjdGVycyBmb3IgbGluZS1icmVha3MgKGUuZy4sIERPUyksIHRyCistIyB3b3VsZCBicmVhay4KKy1hY19MRl9hbmRfRE9UPWBlY2hvOyBlY2hvIC5gCistREVGUz1gc2VkIC1uIC1mIGNvbmZkZWYyb3B0LnNlZCBjb25mZGVmcy5oIHwgdHIgIiRhY19MRl9hbmRfRE9UIiAnIC4nYAorLXJtIC1mIGNvbmZkZWYyb3B0LnNlZAorK2IgYW55CisrOnF1b3RlCisrcy9bCSBgfiMkXiYqKCl7fVxcfDsnXCcnIjw+P10vXFwmL2cKKytzL1xbL1xcJi9nCisrcy9cXS9cXCYvZworK3MvXCQvJCQvZworK0gKKys6YW55CisrJHsKKysJZworKwlzL15cbi8vCisrCXMvXG4vIC9nCisrCXAKKyt9CisrJworK0RFRlM9YHNlZCAtbiAiJGFjX3NjcmlwdCIgY29uZmRlZnMuaGAKKyAKKyAKKyBhY19saWJvYmpzPQorIGFjX2x0bGlib2Jqcz0KKyBmb3IgYWNfaSBpbiA6ICRMSUJPQkpTOyBkbyB0ZXN0ICJ4JGFjX2kiID0geDogJiYgY29udGludWUKKyAgICMgMS4gUmVtb3ZlIHRoZSBleHRlbnNpb24sIGFuZCAkVSBpZiBhbHJlYWR5IGluc3RhbGxlZC4KKy0gIGFjX2k9YGVjaG8gIiRhY19pIiB8CistCSBzZWQgJ3MvXCRVXC4vLi87cy9cLm8kLy87cy9cLm9iaiQvLydgCistICAjIDIuIEFkZCB0aGVtLgorLSAgYWNfbGlib2Jqcz0iJGFjX2xpYm9ianMgJGFjX2lcJFUuJGFjX29iamV4dCIKKy0gIGFjX2x0bGlib2Jqcz0iJGFjX2x0bGlib2JqcyAkYWNfaSInJFUubG8nCisrICBhY19zY3JpcHQ9J3MvXCRVXC4vLi87cy9cLm8kLy87cy9cLm9iaiQvLycKKysgIGFjX2k9YGVjaG8gIiRhY19pIiB8IHNlZCAiJGFjX3NjcmlwdCJgCisrICAjIDIuIFByZXBlbmQgTElCT0JKRElSLiAgV2hlbiB1c2VkIHdpdGggYXV0b21ha2U+PTEuMTAgTElCT0JKRElSCisrICAjICAgIHdpbGwgYmUgc2V0IHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgTElCT0JKUyBvYmplY3RzIGFyZSBidWlsdC4KKysgIGFjX2xpYm9ianM9IiRhY19saWJvYmpzIFwke0xJQk9CSkRJUn0kYWNfaVwkVS4kYWNfb2JqZXh0IgorKyAgYWNfbHRsaWJvYmpzPSIkYWNfbHRsaWJvYmpzIFwke0xJQk9CSkRJUn0kYWNfaSInJFUubG8nCisgZG9uZQorIExJQk9CSlM9JGFjX2xpYm9ianMKKyAKK0BAIC0xMTc3MiwxNyArMTI3NzYsNDUgQEAKKyAjIyBNNHNoIEluaXRpYWxpemF0aW9uLiAgIyMKKyAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyAKKy0jIEJlIEJvdXJuZSBjb21wYXRpYmxlCisrIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCisrRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgZW11bGF0ZSBzaAorICAgTlVMTENNRD06CisgICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCistZWxpZiB0ZXN0IC1uICIke0JBU0hfVkVSU0lPTitzZXR9IiAmJiAoc2V0IC1vIHBvc2l4KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKy0gIHNldCAtbyBwb3NpeAorKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKytlbHNlCisrICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4KKysgICpwb3NpeCopIHNldCAtbyBwb3NpeCA7OworK2VzYWMKKysKKytmaQorKworKworKworKworKyMgUEFUSCBuZWVkcyBDUgorKyMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KKythc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKKythc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKKythc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKKythc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCisrYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCisrCisrIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCisraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKysgIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKysgIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKKysgIGNobW9kICt4IGNvbmYkJC5zaAorKyAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisrICBlbHNlCisrICAgIFBBVEhfU0VQQVJBVE9SPToKKysgIGZpCisrICBybSAtZiBjb25mJCQuc2gKKyBmaQorLURVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKKyAKKyAjIFN1cHBvcnQgdW5zZXQgd2hlbiBwb3NzaWJsZS4KKyBpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KK0BAIC0xMTc5Miw4ICsxMjgyNCw0MyBAQAorIGZpCisgCisgCisrIyBJRlMKKysjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworKyMgdGhlcmUgdG8gcHJldmVudCBlZGl0b3JzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgc3BhY2UtdGFiLgorKyMgKElmIF9BU19QQVRIX1dBTEsgd2VyZSBjYWxsZWQgd2l0aCBJRlMgdW5zZXQsIGl0IHdvdWxkIGRpc2FibGUgd29yZAorKyMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKKythc19ubD0nCisrJworK0lGUz0iICIiCSRhc19ubCIKKysKKysjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgorK2Nhc2UgJDAgaW4KKysgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKysgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworK2RvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrICAgICA7OworK2VzYWMKKysjIFdlIGRpZCBub3QgZmluZCBvdXJzZWx2ZXMsIG1vc3QgcHJvYmFibHkgd2Ugd2VyZSBydW4gYXMgYHNoIENPTU1BTkQnCisrIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCisraWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgorKyAgYXNfbXlzZWxmPSQwCisrZmkKKytpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCisrICBlY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCisrICB7IChleGl0IDEpOyBleGl0IDE7IH0KKytmaQorKworICMgV29yayBhcm91bmQgYnVncyBpbiBwcmUtMy4wIFVXSU4ga3NoLgorLSRhc191bnNldCBFTlYgTUFJTCBNQUlMUEFUSAorK2ZvciBhc192YXIgaW4gRU5WIE1BSUwgTUFJTFBBVEgKKytkbyAoJGFzX3Vuc2V0ICRhc192YXIpID4vZGV2L251bGwgMj4mMSAmJiAkYXNfdW5zZXQgJGFzX3ZhcgorK2RvbmUKKyBQUzE9JyQgJworIFBTMj0nPiAnCisgUFM0PScrICcKK0BAIC0xMTgwNywxOCArMTI4NzQsMTkgQEAKKyAgIGlmIChzZXQgK3g7IHRlc3QgLXogImAoZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyKSAyPiYxYCIpOyB0aGVuCisgICAgIGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcgorICAgZWxzZQorLSAgICAkYXNfdW5zZXQgJGFzX3ZhcgorKyAgICAoJGFzX3Vuc2V0ICRhc192YXIpID4vZGV2L251bGwgMj4mMSAmJiAkYXNfdW5zZXQgJGFzX3ZhcgorICAgZmkKKyBkb25lCisgCisgIyBSZXF1aXJlZCB0byB1c2UgYmFzZW5hbWUuCistaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKytpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorKyAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCisgICBhc19leHByPWV4cHIKKyBlbHNlCisgICBhc19leHByPWZhbHNlCisgZmkKKyAKKy1pZiAoYmFzZW5hbWUgLykgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLyAyPiYxYCIgPSAiWC8iOyB0aGVuCisraWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgorICAgYXNfYmFzZW5hbWU9YmFzZW5hbWUKKyBlbHNlCisgICBhc19iYXNlbmFtZT1mYWxzZQorQEAgLTExODI2LDE1OSArMTI4OTQsMTIwIEBACisgCisgCisgIyBOYW1lIG9mIHRoZSBleGVjdXRhYmxlLgorLWFzX21lPWAkYXNfYmFzZW5hbWUgIiQwIiB8fAorK2FzX21lPWAkYXNfYmFzZW5hbWUgLS0gIiQwIiB8fAorICRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCisgCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAorLQkgWCIkMCIgOiAnWFwoL1wpJCcgXHwgXAorLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CisrCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyBlY2hvIFgvIiQwIiB8CistICAgIHNlZCAnL14uKlwvXChbXi9dW14vXSpcKVwvKiQveyBzLy9cMS87IHE7IH0KKy0gIAkgIC9eWFwvXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CistICAJICAvXlhcL1woXC9cKS4qL3sgcy8vXDEvOyBxOyB9CistICAJICBzLy4qLy4vOyBxJ2AKKy0KKy0KKy0jIFBBVEggbmVlZHMgQ1IsIGFuZCBMSU5FTk8gbmVlZHMgQ1IgYW5kIFBBVEguCistIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLgorLWFzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworLWFzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworLWFzX2NyX0xldHRlcnM9JGFzX2NyX2xldHRlcnMkYXNfY3JfTEVUVEVSUworLWFzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKKy1hc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKKy0KKy0jIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KKy1pZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorLSAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAorLSAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAorLSAgY2htb2QgK3ggY29uZiQkLnNoCistICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorLSAgICBQQVRIX1NFUEFSQVRPUj0nOycKKy0gIGVsc2UKKy0gICAgUEFUSF9TRVBBUkFUT1I9OgorLSAgZmkKKy0gIHJtIC1mIGNvbmYkJC5zaAorLWZpCisrICAgIHNlZCAnL14uKlwvXChbXi9dW14vXSpcKVwvKiQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwvXChcL1wvXCkkL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcL1woXC9cKS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICBzLy4qLy4vOyBxJ2AKKysKKysjIENEUEFUSC4KKyskYXNfdW5zZXQgQ0RQQVRICisgCisgCistICBhc19saW5lbm9fMT0kTElORU5PCistICBhc19saW5lbm9fMj0kTElORU5PCistICBhc19saW5lbm9fMz1gKGV4cHIgJGFzX2xpbmVub18xICsgMSkgMj4vZGV2L251bGxgCistICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKKy0gIHRlc3QgIngkYXNfbGluZW5vXzMiICA9ICJ4JGFzX2xpbmVub18yIiAgfHwgeworLSAgIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gcGF0aCBhdCBhbGwKKy0gICMgcmVsYXRpdmUgb3Igbm90LgorLSAgY2FzZSAkMCBpbgorLSAgICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7CistICAgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKy1mb3IgYXNfZGlyIGluICRQQVRICistZG8KKy0gIElGUz0kYXNfc2F2ZV9JRlMKKy0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCistICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworLWRvbmUKKyAKKy0gICAgICAgOzsKKy0gIGVzYWMKKy0gICMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKy0gICMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBwYXRoLgorLSAgaWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgorLSAgICBhc19teXNlbGY9JDAKKy0gIGZpCistICBpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCistICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBwYXRoIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgcGF0aCIgPiYyO30KKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKy0gIGZpCistICBjYXNlICRDT05GSUdfU0hFTEwgaW4KKy0gICcnKQorLSAgICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCistZm9yIGFzX2RpciBpbiAvYmluJFBBVEhfU0VQQVJBVE9SL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSAorLWRvCistICBJRlM9JGFzX3NhdmVfSUZTCistICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorLSAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbworLQkgY2FzZSAkYXNfZGlyIGluCistCSAvKikKKy0JICAgaWYgKCIkYXNfZGlyLyRhc19iYXNlIiAtYyAnCisgICBhc19saW5lbm9fMT0kTElORU5PCisgICBhc19saW5lbm9fMj0kTElORU5PCistICBhc19saW5lbm9fMz1gKGV4cHIgJGFzX2xpbmVub18xICsgMSkgMj4vZGV2L251bGxgCisgICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKKy0gIHRlc3QgIngkYXNfbGluZW5vXzMiICA9ICJ4JGFzX2xpbmVub18yIiAnKSAyPi9kZXYvbnVsbDsgdGhlbgorLQkgICAgICRhc191bnNldCBCQVNIX0VOViB8fCB0ZXN0ICIke0JBU0hfRU5WK3NldH0iICE9IHNldCB8fCB7IEJBU0hfRU5WPTsgZXhwb3J0IEJBU0hfRU5WOyB9CistCSAgICAgJGFzX3Vuc2V0IEVOViB8fCB0ZXN0ICIke0VOVitzZXR9IiAhPSBzZXQgfHwgeyBFTlY9OyBleHBvcnQgRU5WOyB9CistCSAgICAgQ09ORklHX1NIRUxMPSRhc19kaXIvJGFzX2Jhc2UKKy0JICAgICBleHBvcnQgQ09ORklHX1NIRUxMCistCSAgICAgZXhlYyAiJENPTkZJR19TSEVMTCIgIiQwIiAkezErIiRAIn0KKy0JICAgZmk7OworLQkgZXNhYworLSAgICAgICBkb25lCistZG9uZQorLTs7CistICBlc2FjCisrICB0ZXN0ICJ4YGV4cHIgJGFzX2xpbmVub18xICsgMWAiID0gIngkYXNfbGluZW5vXzIiIHx8IHsKKyAKKyAgICMgQ3JlYXRlICRhc19tZS5saW5lbm8gYXMgYSBjb3B5IG9mICRhc19teXNlbGYsIGJ1dCB3aXRoICRMSU5FTk8KKyAgICMgdW5pZm9ybWx5IHJlcGxhY2VkIGJ5IHRoZSBsaW5lIG51bWJlci4gIFRoZSBmaXJzdCAnc2VkJyBpbnNlcnRzIGEKKy0gICMgbGluZS1udW1iZXIgbGluZSBiZWZvcmUgZWFjaCBsaW5lOyB0aGUgc2Vjb25kICdzZWQnIGRvZXMgdGhlIHJlYWwKKy0gICMgd29yay4gIFRoZSBzZWNvbmQgc2NyaXB0IHVzZXMgJ04nIHRvIHBhaXIgZWFjaCBsaW5lLW51bWJlciBsaW5lCistICAjIHdpdGggdGhlIG51bWJlcmVkIGxpbmUsIGFuZCBhcHBlbmRzIHRyYWlsaW5nICctJyBkdXJpbmcKKy0gICMgc3Vic3RpdHV0aW9uIHNvIHRoYXQgJExJTkVOTyBpcyBub3QgYSBzcGVjaWFsIGNhc2UgYXQgbGluZSBlbmQuCisrICAjIGxpbmUtbnVtYmVyIGxpbmUgYWZ0ZXIgZWFjaCBsaW5lIHVzaW5nICRMSU5FTk87IHRoZSBzZWNvbmQgJ3NlZCcKKysgICMgZG9lcyB0aGUgcmVhbCB3b3JrLiAgVGhlIHNlY29uZCBzY3JpcHQgdXNlcyAnTicgdG8gcGFpciBlYWNoCisrICAjIGxpbmUtbnVtYmVyIGxpbmUgd2l0aCB0aGUgbGluZSBjb250YWluaW5nICRMSU5FTk8sIGFuZCBhcHBlbmRzCisrICAjIHRyYWlsaW5nICctJyBkdXJpbmcgc3Vic3RpdHV0aW9uIHNvIHRoYXQgJExJTkVOTyBpcyBub3QgYSBzcGVjaWFsCisrICAjIGNhc2UgYXQgbGluZSBlbmQuCisgICAjIChSYWphIFIgSGFyaW5hdGggc3VnZ2VzdGVkIHNlZCAnPScsIGFuZCBQYXVsIEVnZ2VydCB3cm90ZSB0aGUKKy0gICMgc2Vjb25kICdzZWQnIHNjcmlwdC4gIEJsYW1lIExlZSBFLiBNY01haG9uIGZvciBzZWQncyBzeW50YXguICA6LSkKKy0gIHNlZCAnPScgPCRhc19teXNlbGYgfAorKyAgIyBzY3JpcHRzIHdpdGggb3B0aW1pemF0aW9uIGhlbHAgZnJvbSBQYW9sbyBCb256aW5pLiAgQmxhbWUgTGVlCisrICAjIEUuIE1jTWFob24gKDE5MzEtMTk4OSkgZm9yIHNlZCdzIHN5bnRheC4gIDotKQorKyAgc2VkIC1uICcKKysgICAgcAorKyAgICAvWyRdTElORU5PLz0KKysgICcgPCRhc19teXNlbGYgfAorICAgICBzZWQgJworKyAgICAgIHMvWyRdTElORU5PLiovJi0vCisrICAgICAgdCBsaW5lbm8KKysgICAgICBiCisrICAgICAgOmxpbmVubworICAgICAgIE4KKy0gICAgICBzLCQsLSwKKy0gICAgICA6IGxvb3AKKy0gICAgICBzLF5cKFsnJGFzX2NyX2RpZ2l0cyddKlwpXCguKlwpWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX11cKSxcMVwyXDFcMywKKysgICAgICA6bG9vcAorKyAgICAgIHMvWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX10uKlxuXClcKC4qXCkvXDJcMVwyLworICAgICAgIHQgbG9vcAorLSAgICAgIHMsLSQsLAorLSAgICAgIHMsXlsnJGFzX2NyX2RpZ2l0cyddKlxuLCwKKysgICAgICBzLy1cbi4qLy8KKyAgICAgJyA+JGFzX21lLmxpbmVubyAmJgorLSAgY2htb2QgK3ggJGFzX21lLmxpbmVubyB8fAorLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSAkYXNfbWUubGluZW5vOyByZXJ1biB3aXRoIGEgUE9TSVggc2hlbGwiID4mMjt9CisrICBjaG1vZCAreCAiJGFzX21lLmxpbmVubyIgfHwKKysgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyCisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgCisgICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcworICAgIyAodGhlIGRpcm5hbWUgb2YgJFswXSBpcyBub3QgdGhlIHBsYWNlIHdoZXJlIHdlIG1pZ2h0IGZpbmQgdGhlCistICAjIG9yaWdpbmFsIGFuZCBzbyBvbi4gIEF1dG9jb25mIGlzIGVzcGVjaWFsbHkgc2Vuc2libGUgdG8gdGhpcykuCistICAuIC4vJGFzX21lLmxpbmVubworKyAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpdGl2ZSB0byB0aGlzKS4KKysgIC4gIi4vJGFzX21lLmxpbmVubyIKKyAgICMgRXhpdCBzdGF0dXMgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kLgorICAgZXhpdAorIH0KKyAKKyAKKy1jYXNlIGBlY2hvICJ0ZXN0aW5nXGMiOyBlY2hvIDEsMiwzYCxgZWNobyAtbiB0ZXN0aW5nOyBlY2hvIDEsMiwzYCBpbgorLSAgKmMqLC1uKikgRUNIT19OPSBFQ0hPX0M9JworLScgRUNIT19UPScJJyA7OworLSAgKmMqLCogICkgRUNIT19OPS1uIEVDSE9fQz0gRUNIT19UPSA7OworLSAgKikgICAgICAgRUNIT19OPSBFQ0hPX0M9J1xjJyBFQ0hPX1Q9IDs7CisraWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBhc19kaXJuYW1lPWRpcm5hbWUKKytlbHNlCisrICBhc19kaXJuYW1lPWZhbHNlCisrZmkKKysKKytFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQorK2Nhc2UgYGVjaG8gLW4geGAgaW4KKystbiopCisrICBjYXNlIGBlY2hvICd4XGMnYCBpbgorKyAgKmMqKSBFQ0hPX1Q9JwknOzsJIyBFQ0hPX1QgaXMgc2luZ2xlIHRhYiBjaGFyYWN0ZXIuCisrICAqKSAgIEVDSE9fQz0nXGMnOzsKKysgIGVzYWM7OworKyopCisrICBFQ0hPX049Jy1uJzs7CisgZXNhYworIAorLWlmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisraWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKKysgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorICAgYXNfZXhwcj1leHByCisgZWxzZQorICAgYXNfZXhwcj1mYWxzZQorIGZpCisgCisgcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKKytpZiB0ZXN0IC1kIGNvbmYkJC5kaXI7IHRoZW4KKysgIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKKytlbHNlCisrICBybSAtZiBjb25mJCQuZGlyCisrICBta2RpciBjb25mJCQuZGlyCisrZmkKKyBlY2hvID5jb25mJCQuZmlsZQorIGlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorLSAgIyBXZSBjb3VsZCBqdXN0IGNoZWNrIGZvciBESkdQUDsgYnV0IHRoaXMgdGVzdCBhKSB3b3JrcyBiKSBpcyBtb3JlIGdlbmVyaWMKKy0gICMgYW5kIGMpIHdpbGwgcmVtYWluIHZhbGlkIG9uY2UgREpHUFAgc3VwcG9ydHMgc3ltbGlua3MgKERKR1BQIDIuMDQpLgorLSAgaWYgdGVzdCAtZiBjb25mJCQuZXhlOyB0aGVuCistICAgICMgRG9uJ3QgdXNlIGxuIGF0IGFsbDsgd2UgZG9uJ3QgaGF2ZSBhbnkgbGlua3MKKysgIGFzX2xuX3M9J2xuIC1zJworKyAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKysgICMgMSkgT24gTVNZUywgYm90aCBgbG4gLXMgZmlsZSBkaXInIGFuZCBgbG4gZmlsZSBkaXInIGZhaWwuCisrICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KKysgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcCcuCisrICBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQuZGlyIDI+L2Rldi9udWxsICYmIHRlc3QgISAtZiBjb25mJCQuZXhlIHx8CisgICAgIGFzX2xuX3M9J2NwIC1wJworLSAgZWxzZQorLSAgICBhc19sbl9zPSdsbiAtcycKKy0gIGZpCisgZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgIGFzX2xuX3M9bG4KKyBlbHNlCisgICBhc19sbl9zPSdjcCAtcCcKKyBmaQorLXJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCisrcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmRpci9jb25mJCQuZmlsZSBjb25mJCQuZmlsZQorK3JtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKyAKKyBpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCisgICBhc19ta2Rpcl9wPToKK0BAIC0xMTk4Nyw3ICsxMzAxNiwyOCBAQAorICAgYXNfbWtkaXJfcD1mYWxzZQorIGZpCisgCistYXNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgorK2lmIHRlc3QgLXggLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgIGFzX3Rlc3RfeD0ndGVzdCAteCcKKytlbHNlCisrICBpZiBscyAtZEwgLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgYXNfbHNfTF9vcHRpb249TAorKyAgZWxzZQorKyAgICBhc19sc19MX29wdGlvbj0KKysgIGZpCisrICBhc190ZXN0X3g9JworKyAgICBldmFsIHNoIC1jICdcJycKKysgICAgICBpZiB0ZXN0IC1kICIkMSI7IHRoZW4KKysgICAgICAgIHRlc3QgLWQgIiQxLy4iOworKyAgICAgIGVsc2UKKysJY2FzZSAkMSBpbgorKyAgICAgICAgLSopc2V0ICIuLyQxIjs7CisrCWVzYWM7CisrCWNhc2UgYGxzIC1sZCckYXNfbHNfTF9vcHRpb24nICIkMSIgMj4vZGV2L251bGxgIGluCisrCT8/P1tzeF0qKTo7OyopZmFsc2U7O2VzYWM7ZmkKKysgICAgJ1wnJyBzaAorKyAgJworK2ZpCisrYXNfZXhlY3V0YWJsZV9wPSRhc190ZXN0X3gKKyAKKyAjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCisgYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKK0BAIC0xMTk5NiwzMSArMTMwNDYsMTQgQEAKKyBhc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorIAorIAorLSMgSUZTCistIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4KKy1hc19ubD0nCistJworLUlGUz0iIAkkYXNfbmwiCistCistIyBDRFBBVEguCistJGFzX3Vuc2V0IENEUEFUSAorLQorIGV4ZWMgNj4mMQorIAorLSMgT3BlbiB0aGUgbG9nIHJlYWwgc29vbiwgdG8ga2VlcCBcJFswXSBhbmQgc28gb24gbWVhbmluZ2Z1bCwgYW5kIHRvCisrIyBTYXZlIHRoZSBsb2cgbWVzc2FnZSwgdG8ga2VlcCAkWzBdIGFuZCBzbyBvbiBtZWFuaW5nZnVsLCBhbmQgdG8KKyAjIHJlcG9ydCBhY3R1YWwgaW5wdXQgdmFsdWVzIG9mIENPTkZJR19GSUxFUyBldGMuIGluc3RlYWQgb2YgdGhlaXIKKy0jIHZhbHVlcyBhZnRlciBvcHRpb25zIGhhbmRsaW5nLiAgTG9nZ2luZyAtLXZlcnNpb24gZXRjLiBpcyBPSy4KKy1leGVjIDU+PmNvbmZpZy5sb2cKKy17CistICBlY2hvCistICBzZWQgJ2g7cy8uLy0vZztzL14uLi4vIyMgLztzLy4uLiQvICMjLztwO3g7cDt4JyA8PF9BU0JPWAorLSMjIFJ1bm5pbmcgJGFzX21lLiAjIworLV9BU0JPWAorLX0gPiY1CistY2F0ID4mNSA8PF9DU0VPRgorLQorKyMgdmFsdWVzIGFmdGVyIG9wdGlvbnMgaGFuZGxpbmcuCisrYWNfbG9nPSIKKyBUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IG5ld2xpYiAkYXNfbWUgMS4xNy4wLCB3aGljaCB3YXMKKy1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKytnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjEuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKyAKKyAgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKKyAgIENPTkZJR19IRUFERVJTICA9ICRDT05GSUdfSEVBREVSUworQEAgLTEyMDI4LDMwICsxMzA2MSwxOSBAQAorICAgQ09ORklHX0NPTU1BTkRTID0gJENPTkZJR19DT01NQU5EUworICAgJCAkMCAkQAorIAorLV9DU0VPRgorLWVjaG8gIm9uIGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYCIgPiY1CistZWNobyA+JjUKKytvbiBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKKysiCisrCisgX0FDRU9GCisgCisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKyAjIEZpbGVzIHRoYXQgY29uZmlnLnN0YXR1cyB3YXMgbWFkZSBmb3IuCistaWYgdGVzdCAtbiAiJGFjX2NvbmZpZ19maWxlcyI7IHRoZW4KKy0gIGVjaG8gImNvbmZpZ19maWxlcz1cIiRhY19jb25maWdfZmlsZXNcIiIgPj4kQ09ORklHX1NUQVRVUworLWZpCistCistaWYgdGVzdCAtbiAiJGFjX2NvbmZpZ19oZWFkZXJzIjsgdGhlbgorLSAgZWNobyAiY29uZmlnX2hlYWRlcnM9XCIkYWNfY29uZmlnX2hlYWRlcnNcIiIgPj4kQ09ORklHX1NUQVRVUworLWZpCistCistaWYgdGVzdCAtbiAiJGFjX2NvbmZpZ19saW5rcyI7IHRoZW4KKy0gIGVjaG8gImNvbmZpZ19saW5rcz1cIiRhY19jb25maWdfbGlua3NcIiIgPj4kQ09ORklHX1NUQVRVUworLWZpCisrY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIgorK2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyIKKyAKKy1pZiB0ZXN0IC1uICIkYWNfY29uZmlnX2NvbW1hbmRzIjsgdGhlbgorLSAgZWNobyAiY29uZmlnX2NvbW1hbmRzPVwiJGFjX2NvbmZpZ19jb21tYW5kc1wiIiA+PiRDT05GSUdfU1RBVFVTCistZmkKKytfQUNFT0YKKyAKKyBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKy0KKyBhY19jc191c2FnZT0iXAorIFxgJGFzX21lJyBpbnN0YW50aWF0ZXMgZmlsZXMgZnJvbSB0ZW1wbGF0ZXMgYWNjb3JkaW5nIHRvIHRoZQorIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KK0BAIC0xMjA1OSw3ICsxMzA4MSw3IEBACisgVXNhZ2U6ICQwIFtPUFRJT05TXSBbRklMRV0uLi4KKyAKKyAgIC1oLCAtLWhlbHAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKy0gIC1WLCAtLXZlcnNpb24gICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorKyAgLVYsIC0tdmVyc2lvbiAgICBwcmludCB2ZXJzaW9uIG51bWJlciBhbmQgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgdGhlbiBleGl0CisgICAtcSwgLS1xdWlldCAgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcworICAgLWQsIC0tZGVidWcgICAgICBkb24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCisgICAgICAgLS1yZWNoZWNrICAgIHVwZGF0ZSAkYXNfbWUgYnkgcmVjb25maWd1cmluZyBpbiB0aGUgc2FtZSBjb25kaXRpb25zCitAQCAtMTIwNzMsMTkgKzEzMDk1LDIxIEBACisgJGNvbmZpZ19jb21tYW5kcworIAorIFJlcG9ydCBidWdzIHRvIDxidWctYXV0b2NvbmZAZ251Lm9yZz4uIgorLV9BQ0VPRgorIAorK19BQ0VPRgorIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisgYWNfY3NfdmVyc2lvbj0iXFwKKyBuZXdsaWIgY29uZmlnLnN0YXR1cyAxLjE3LjAKKy1jb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTksCistICB3aXRoIG9wdGlvbnMgXFwiYGVjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvW1xcIiJcYFwkXS9cXFxcJi9nJ2BcXCIKKytjb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjEsCisrICB3aXRoIG9wdGlvbnMgXFwiYGVjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvXiAvLzsgcy9bXFwiIlxgXCRdL1xcXFwmL2cnYFxcIgorIAorLUNvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytDb3B5cmlnaHQgKEMpIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgVGhpcyBjb25maWcuc3RhdHVzIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKKy1zcmNkaXI9JHNyY2RpcgorLUlOU1RBTEw9IiRJTlNUQUxMIgorKworK2FjX3B3ZD0nJGFjX3B3ZCcKKytzcmNkaXI9JyRzcmNkaXInCisrSU5TVEFMTD0nJElOU1RBTEwnCisgX0FDRU9GCisgCisgY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCitAQCAtMTIwOTYsNjAgKzEzMTIwLDQyIEBACisgZG8KKyAgIGNhc2UgJDEgaW4KKyAgIC0tKj0qKQorLSAgICBhY19vcHRpb249YGV4cHIgIngkMSIgOiAneFwoW149XSpcKT0nYAorLSAgICBhY19vcHRhcmc9YGV4cHIgIngkMSIgOiAneFtePV0qPVwoLipcKSdgCisrICAgIGFjX29wdGlvbj1gZXhwciAiWCQxIiA6ICdYXChbXj1dKlwpPSdgCisrICAgIGFjX29wdGFyZz1gZXhwciAiWCQxIiA6ICdYW149XSo9XCguKlwpJ2AKKyAgICAgYWNfc2hpZnQ9OgorICAgICA7OworLSAgLSopCisrICAqKQorICAgICBhY19vcHRpb249JDEKKyAgICAgYWNfb3B0YXJnPSQyCisgICAgIGFjX3NoaWZ0PXNoaWZ0CisgICAgIDs7CistICAqKSAjIFRoaXMgaXMgbm90IGFuIG9wdGlvbiwgc28gdGhlIHVzZXIgaGFzIHByb2JhYmx5IGdpdmVuIGV4cGxpY2l0CistICAgICAjIGFyZ3VtZW50cy4KKy0gICAgIGFjX29wdGlvbj0kMQorLSAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CisgICBlc2FjCisgCisgICBjYXNlICRhY19vcHRpb24gaW4KKyAgICMgSGFuZGxpbmcgb2YgdGhlIG9wdGlvbnMuCistX0FDRU9GCistY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisgICAtcmVjaGVjayB8IC0tcmVjaGVjayB8IC0tcmVjaGVjIHwgLS1yZWNoZSB8IC0tcmVjaCB8IC0tcmVjIHwgLS1yZSB8IC0tcikKKyAgICAgYWNfY3NfcmVjaGVjaz06IDs7CistICAtLXZlcnNpb24gfCAtLXZlcnMqIHwgLVYgKQorLSAgICBlY2hvICIkYWNfY3NfdmVyc2lvbiI7IGV4aXQgMCA7OworLSAgLS1oZSB8IC0taCkKKy0gICAgIyBDb25mbGljdCBiZXR3ZWVuIC0taGVscCBhbmQgLS1oZWFkZXIKKy0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYW1iaWd1b3VzIG9wdGlvbjogJDEKKy1UcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogYW1iaWd1b3VzIG9wdGlvbjogJDEKKy1UcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyO30KKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworLSAgLS1oZWxwIHwgLS1oZWwgfCAtaCApCistICAgIGVjaG8gIiRhY19jc191c2FnZSI7IGV4aXQgMCA7OworLSAgLS1kZWJ1ZyB8IC0tZCogfCAtZCApCisrICAtLXZlcnNpb24gfCAtLXZlcnNpbyB8IC0tdmVyc2kgfCAtLXZlcnMgfCAtLXZlciB8IC0tdmUgfCAtLXYgfCAtViApCisrICAgIGVjaG8gIiRhY19jc192ZXJzaW9uIjsgZXhpdCA7OworKyAgLS1kZWJ1ZyB8IC0tZGVidSB8IC0tZGViIHwgLS1kZSB8IC0tZCB8IC1kICkKKyAgICAgZGVidWc9OiA7OworICAgLS1maWxlIHwgLS1maWwgfCAtLWZpIHwgLS1mICkKKyAgICAgJGFjX3NoaWZ0CisgICAgIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyAkYWNfb3B0YXJnIgorICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKy0gIC0taGVhZGVyIHwgLS1oZWFkZSB8IC0taGVhZCB8IC0taGVhICkKKy0gICAgJGFjX3NoaWZ0CistICAgIENPTkZJR19IRUFERVJTPSIkQ09ORklHX0hFQURFUlMgJGFjX29wdGFyZyIKKy0gICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CisrICAtLWhlIHwgLS1oIHwgIC0taGVscCB8IC0taGVsIHwgLWggKQorKyAgICBlY2hvICIkYWNfY3NfdXNhZ2UiOyBleGl0IDs7CisgICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorICAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwgfCAtLXNpIHwgLS1zKQorICAgICBhY19jc19zaWxlbnQ9OiA7OworIAorICAgIyBUaGlzIGlzIGFuIGVycm9yLgorLSAgLSopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb246ICQxCistVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mNQorLWVjaG8gIiRhc19tZTogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb246ICQxCistVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMjt9CisrICAtKikgeyBlY2hvICIkYXNfbWU6IGVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uOiAkMQorK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjIKKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKyAKKy0gICopIGFjX2NvbmZpZ190YXJnZXRzPSIkYWNfY29uZmlnX3RhcmdldHMgJDEiIDs7CisrICAqKSBhY19jb25maWdfdGFyZ2V0cz0iJGFjX2NvbmZpZ190YXJnZXRzICQxIgorKyAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZSA7OworIAorICAgZXNhYworICAgc2hpZnQKK0BAIC0xMjE2NSwxNyArMTMxNzEsMjggQEAKKyBfQUNFT0YKKyBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorIGlmIFwkYWNfY3NfcmVjaGVjazsgdGhlbgorLSAgZWNobyAicnVubmluZyAkU0hFTEwgJDAgIiAkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAiIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uIiA+JjYKKy0gIGV4ZWMgJFNIRUxMICQwICRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uCisrICBlY2hvICJydW5uaW5nIENPTkZJR19TSEVMTD0kU0hFTEwgJFNIRUxMICQwICIkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAiIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uIiA+JjYKKysgIENPTkZJR19TSEVMTD0kU0hFTEwKKysgIGV4cG9ydCBDT05GSUdfU0hFTEwKKysgIGV4ZWMgJFNIRUxMICIkMCIkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbgorIGZpCisgCisgX0FDRU9GCisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisrZXhlYyA1Pj5jb25maWcubG9nCisreworKyAgZWNobworKyAgc2VkICdoO3MvLi8tL2c7cy9eLi4uLyMjIC87cy8uLi4kLyAjIy87cDt4O3A7eCcgPDxfQVNCT1gKKysjIyBSdW5uaW5nICRhc19tZS4gIyMKKytfQVNCT1gKKysgIGVjaG8gIiRhY19sb2ciCisrfSA+JjUKKyAKKytfQUNFT0YKKyBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorICMKKy0jIElOSVQtQ09NTUFORFMgc2VjdGlvbi4KKysjIElOSVQtQ09NTUFORFMKKyAjCistCisgQU1ERVBfVFJVRT0iJEFNREVQX1RSVUUiIGFjX2F1eF9kaXI9IiRhY19hdXhfZGlyIgorIAorIAorQEAgLTEyNDM2LDIyICsxMzQ1MywyMyBAQAorIAorIF9BQ0VPRgorIAorLQorLQorIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorKworKyMgSGFuZGxpbmcgb2YgYXJndW1lbnRzLgorIGZvciBhY19jb25maWdfdGFyZ2V0IGluICRhY19jb25maWdfdGFyZ2V0cworIGRvCistICBjYXNlICIkYWNfY29uZmlnX3RhcmdldCIgaW4KKy0gICMgSGFuZGxpbmcgb2YgYXJndW1lbnRzLgorLSAgIk1ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNYWtlZmlsZSIgOzsKKy0gICJkZXBmaWxlcyIgKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgZGVwZmlsZXMiIDs7CistICAibGlidG9vbCIgKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgbGlidG9vbCIgOzsKKysgIGNhc2UgJGFjX2NvbmZpZ190YXJnZXQgaW4KKysgICAgImRlcGZpbGVzIikgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTIGRlcGZpbGVzIiA7OworKyAgICAibGlidG9vbCIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBsaWJ0b29sIiA7OworKyAgICAiTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFrZWZpbGUiIDs7CisrCisgICAqKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50OiAkYWNfY29uZmlnX3RhcmdldCIgPiY1CisgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBhcmd1bWVudDogJGFjX2NvbmZpZ190YXJnZXQiID4mMjt9CisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKyAgIGVzYWMKKyBkb25lCisgCisrCisgIyBJZiB0aGUgdXNlciBkaWQgbm90IHVzZSB0aGUgYXJndW1lbnRzIHRvIHNwZWNpZnkgdGhlIGl0ZW1zIHRvIGluc3RhbnRpYXRlLAorICMgdGhlbiB0aGUgZW52dmFyIGludGVyZmFjZSBpcyB1c2VkLiAgU2V0IG9ubHkgdGhvc2UgdGhhdCBhcmUgbm90LgorICMgV2UgdXNlIHRoZSBsb25nIGZvcm0gZm9yIHRoZSBkZWZhdWx0IGFzc2lnbm1lbnQgYmVjYXVzZSBvZiBhbiBleHRyZW1lbHkKK0BAIC0xMjQ2MiwzOTYgKzEzNDgwLDQ5MiBAQAorIGZpCisgCisgIyBIYXZlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmb3IgY29udmVuaWVuY2UuICBNYWtlIGl0IGluIHRoZSBidWlsZCB0cmVlCistIyBzaW1wbHkgYmVjYXVzZSB0aGVyZSBpcyBubyByZWFzb24gdG8gcHV0IGl0IGhlcmUsIGFuZCBpbiBhZGRpdGlvbiwKKysjIHNpbXBseSBiZWNhdXNlIHRoZXJlIGlzIG5vIHJlYXNvbiBhZ2FpbnN0IGhhdmluZyBpdCBoZXJlLCBhbmQgaW4gYWRkaXRpb24sCisgIyBjcmVhdGluZyBhbmQgbW92aW5nIGZpbGVzIGZyb20gL3RtcCBjYW4gc29tZXRpbWVzIGNhdXNlIHByb2JsZW1zLgorLSMgQ3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSwgYW5kIGhvb2sgZm9yIGl0cyByZW1vdmFsIHVubGVzcyBkZWJ1Z2dpbmcuCisrIyBIb29rIGZvciBpdHMgcmVtb3ZhbCB1bmxlc3MgZGVidWdnaW5nLgorKyMgTm90ZSB0aGF0IHRoZXJlIGlzIGEgc21hbGwgd2luZG93IGluIHdoaWNoIHRoZSBkaXJlY3Rvcnkgd2lsbCBub3QgYmUgY2xlYW5lZDoKKysjIGFmdGVyIGl0cyBjcmVhdGlvbiBidXQgYmVmb3JlIGl0cyBuYW1lIGhhcyBiZWVuIGFzc2lnbmVkIHRvIGAkdG1wJy4KKyAkZGVidWcgfHwKKyB7CistICB0cmFwICdleGl0X3N0YXR1cz0kPzsgcm0gLXJmICR0bXAgJiYgZXhpdCAkZXhpdF9zdGF0dXMnIDAKKysgIHRtcD0KKysgIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/CisrICB7IHRlc3QgLXogIiR0bXAiIHx8IHRlc3QgISAtZCAiJHRtcCIgfHwgcm0gLWZyICIkdG1wIjsgfSAmJiBleGl0ICRleGl0X3N0YXR1cworKycgMAorICAgdHJhcCAneyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAxIDIgMTMgMTUKKyB9CistCisgIyBDcmVhdGUgYSAoc2VjdXJlKSB0bXAgZGlyZWN0b3J5IGZvciB0bXAgZmlsZXMuCisgCisgeworLSAgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAtcSAiLi9jb25mc3RhdFhYWFhYWCIpIDI+L2Rldi9udWxsYCAmJgorKyAgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiLi9jb25mWFhYWFhYIikgMj4vZGV2L251bGxgICYmCisgICB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIgorIH0gIHx8CisgeworLSAgdG1wPS4vY29uZnN0YXQkJC0kUkFORE9NCistICAodW1hc2sgMDc3ICYmIG1rZGlyICR0bXApCisrICB0bXA9Li9jb25mJCQtJFJBTkRPTQorKyAgKHVtYXNrIDA3NyAmJiBta2RpciAiJHRtcCIpCisgfSB8fAorIHsKKyAgICBlY2hvICIkbWU6IGNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluIC4iID4mMgorICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorIH0KKyAKKy1fQUNFT0YKKy0KKy1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorLQorICMKKy0jIENPTkZJR19GSUxFUyBzZWN0aW9uLgorKyMgU2V0IHVwIHRoZSBzZWQgc2NyaXB0cyBmb3IgQ09ORklHX0ZJTEVTIHNlY3Rpb24uCisgIworIAorICMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGUgc2NyaXB0cyBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0ZJTEVTLgorICMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aGVuIC4vY29uZmlnLnN0YXR1cyBjb25maWcuaAorLWlmIHRlc3QgLW4gIlwkQ09ORklHX0ZJTEVTIjsgdGhlbgorLSAgIyBQcm90ZWN0IGFnYWluc3QgYmVpbmcgb24gdGhlIHJpZ2h0IHNpZGUgb2YgYSBzZWQgc3Vic3QgaW4gY29uZmlnLnN0YXR1cy4KKy0gIHNlZCAncy8sQC9AQC87IHMvQCwvQEAvOyBzLyw7dCB0XCQvQDt0IHQvOyAvQDt0IHRcJC9zL1tcXFxcJixdL1xcXFwmL2c7CistICAgcy9AQC8sQC87IHMvQEAvQCwvOyBzL0A7dCB0XCQvLDt0IHQvJyA+XCR0bXAvc3Vicy5zZWQgPDxcXENFT0YKKy1zLEBTSEVMTEAsJFNIRUxMLDt0IHQKKy1zLEBQQVRIX1NFUEFSQVRPUkAsJFBBVEhfU0VQQVJBVE9SLDt0IHQKKy1zLEBQQUNLQUdFX05BTUVALCRQQUNLQUdFX05BTUUsO3QgdAorLXMsQFBBQ0tBR0VfVEFSTkFNRUAsJFBBQ0tBR0VfVEFSTkFNRSw7dCB0CistcyxAUEFDS0FHRV9WRVJTSU9OQCwkUEFDS0FHRV9WRVJTSU9OLDt0IHQKKy1zLEBQQUNLQUdFX1NUUklOR0AsJFBBQ0tBR0VfU1RSSU5HLDt0IHQKKy1zLEBQQUNLQUdFX0JVR1JFUE9SVEAsJFBBQ0tBR0VfQlVHUkVQT1JULDt0IHQKKy1zLEBleGVjX3ByZWZpeEAsJGV4ZWNfcHJlZml4LDt0IHQKKy1zLEBwcmVmaXhALCRwcmVmaXgsO3QgdAorLXMsQHByb2dyYW1fdHJhbnNmb3JtX25hbWVALCRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lLDt0IHQKKy1zLEBiaW5kaXJALCRiaW5kaXIsO3QgdAorLXMsQHNiaW5kaXJALCRzYmluZGlyLDt0IHQKKy1zLEBsaWJleGVjZGlyQCwkbGliZXhlY2Rpciw7dCB0CistcyxAZGF0YWRpckAsJGRhdGFkaXIsO3QgdAorLXMsQHN5c2NvbmZkaXJALCRzeXNjb25mZGlyLDt0IHQKKy1zLEBzaGFyZWRzdGF0ZWRpckAsJHNoYXJlZHN0YXRlZGlyLDt0IHQKKy1zLEBsb2NhbHN0YXRlZGlyQCwkbG9jYWxzdGF0ZWRpciw7dCB0CistcyxAbGliZGlyQCwkbGliZGlyLDt0IHQKKy1zLEBpbmNsdWRlZGlyQCwkaW5jbHVkZWRpciw7dCB0CistcyxAb2xkaW5jbHVkZWRpckAsJG9sZGluY2x1ZGVkaXIsO3QgdAorLXMsQGluZm9kaXJALCRpbmZvZGlyLDt0IHQKKy1zLEBtYW5kaXJALCRtYW5kaXIsO3QgdAorLXMsQGJ1aWxkX2FsaWFzQCwkYnVpbGRfYWxpYXMsO3QgdAorLXMsQGhvc3RfYWxpYXNALCRob3N0X2FsaWFzLDt0IHQKKy1zLEB0YXJnZXRfYWxpYXNALCR0YXJnZXRfYWxpYXMsO3QgdAorLXMsQERFRlNALCRERUZTLDt0IHQKKy1zLEBFQ0hPX0NALCRFQ0hPX0MsO3QgdAorLXMsQEVDSE9fTkAsJEVDSE9fTiw7dCB0CistcyxARUNIT19UQCwkRUNIT19ULDt0IHQKKy1zLEBMSUJTQCwkTElCUyw7dCB0CistcyxATUFZX1NVUFBMWV9TWVNDQUxMU19UUlVFQCwkTUFZX1NVUFBMWV9TWVNDQUxMU19UUlVFLDt0IHQKKy1zLEBNQVlfU1VQUExZX1NZU0NBTExTX0ZBTFNFQCwkTUFZX1NVUFBMWV9TWVNDQUxMU19GQUxTRSw7dCB0CistcyxAbmV3bGliX2Jhc2VkaXJALCRuZXdsaWJfYmFzZWRpciw7dCB0CistcyxAYnVpbGRALCRidWlsZCw7dCB0CistcyxAYnVpbGRfY3B1QCwkYnVpbGRfY3B1LDt0IHQKKy1zLEBidWlsZF92ZW5kb3JALCRidWlsZF92ZW5kb3IsO3QgdAorLXMsQGJ1aWxkX29zQCwkYnVpbGRfb3MsO3QgdAorLXMsQGhvc3RALCRob3N0LDt0IHQKKy1zLEBob3N0X2NwdUAsJGhvc3RfY3B1LDt0IHQKKy1zLEBob3N0X3ZlbmRvckAsJGhvc3RfdmVuZG9yLDt0IHQKKy1zLEBob3N0X29zQCwkaG9zdF9vcyw7dCB0CistcyxASU5TVEFMTF9QUk9HUkFNQCwkSU5TVEFMTF9QUk9HUkFNLDt0IHQKKy1zLEBJTlNUQUxMX1NDUklQVEAsJElOU1RBTExfU0NSSVBULDt0IHQKKy1zLEBJTlNUQUxMX0RBVEFALCRJTlNUQUxMX0RBVEEsO3QgdAorLXMsQENZR1BBVEhfV0AsJENZR1BBVEhfVyw7dCB0CistcyxAUEFDS0FHRUAsJFBBQ0tBR0UsO3QgdAorLXMsQFZFUlNJT05ALCRWRVJTSU9OLDt0IHQKKy1zLEBBQ0xPQ0FMQCwkQUNMT0NBTCw7dCB0CistcyxAQVVUT0NPTkZALCRBVVRPQ09ORiw7dCB0CistcyxAQVVUT01BS0VALCRBVVRPTUFLRSw7dCB0CistcyxAQVVUT0hFQURFUkAsJEFVVE9IRUFERVIsO3QgdAorLXMsQE1BS0VJTkZPQCwkTUFLRUlORk8sO3QgdAorLXMsQGluc3RhbGxfc2hALCRpbnN0YWxsX3NoLDt0IHQKKy1zLEBTVFJJUEAsJFNUUklQLDt0IHQKKy1zLEBhY19jdF9TVFJJUEAsJGFjX2N0X1NUUklQLDt0IHQKKy1zLEBJTlNUQUxMX1NUUklQX1BST0dSQU1ALCRJTlNUQUxMX1NUUklQX1BST0dSQU0sO3QgdAorLXMsQG1rZGlyX3BALCRta2Rpcl9wLDt0IHQKKy1zLEBBV0tALCRBV0ssO3QgdAorLXMsQFNFVF9NQUtFQCwkU0VUX01BS0UsO3QgdAorLXMsQGFtX19sZWFkaW5nX2RvdEAsJGFtX19sZWFkaW5nX2RvdCw7dCB0CistcyxAQU1UQVJALCRBTVRBUiw7dCB0CistcyxAYW1fX3RhckAsJGFtX190YXIsO3QgdAorLXMsQGFtX191bnRhckAsJGFtX191bnRhciw7dCB0CistcyxAQ0NALCRDQyw7dCB0CistcyxAREVQRElSQCwkREVQRElSLDt0IHQKKy1zLEBhbV9faW5jbHVkZUAsJGFtX19pbmNsdWRlLDt0IHQKKy1zLEBhbV9fcXVvdGVALCRhbV9fcXVvdGUsO3QgdAorLXMsQEFNREVQX1RSVUVALCRBTURFUF9UUlVFLDt0IHQKKy1zLEBBTURFUF9GQUxTRUAsJEFNREVQX0ZBTFNFLDt0IHQKKy1zLEBBTURFUEJBQ0tTTEFTSEAsJEFNREVQQkFDS1NMQVNILDt0IHQKKy1zLEBDQ0RFUE1PREVALCRDQ0RFUE1PREUsO3QgdAorLXMsQGFtX19mYXN0ZGVwQ0NfVFJVRUAsJGFtX19mYXN0ZGVwQ0NfVFJVRSw7dCB0CistcyxAYW1fX2Zhc3RkZXBDQ19GQUxTRUAsJGFtX19mYXN0ZGVwQ0NfRkFMU0UsO3QgdAorLXMsQEFTQCwkQVMsO3QgdAorLXMsQGFjX2N0X0FTQCwkYWNfY3RfQVMsO3QgdAorLXMsQEFSQCwkQVIsO3QgdAorLXMsQGFjX2N0X0FSQCwkYWNfY3RfQVIsO3QgdAorLXMsQFJBTkxJQkAsJFJBTkxJQiw7dCB0CistcyxAYWNfY3RfUkFOTElCQCwkYWNfY3RfUkFOTElCLDt0IHQKKy1zLEBSRUFERUxGQCwkUkVBREVMRiw7dCB0CistcyxAYWNfY3RfUkVBREVMRkAsJGFjX2N0X1JFQURFTEYsO3QgdAorLXMsQE1BSU5UQUlORVJfTU9ERV9UUlVFQCwkTUFJTlRBSU5FUl9NT0RFX1RSVUUsO3QgdAorLXMsQE1BSU5UQUlORVJfTU9ERV9GQUxTRUAsJE1BSU5UQUlORVJfTU9ERV9GQUxTRSw7dCB0CistcyxATUFJTlRALCRNQUlOVCw7dCB0CistcyxAQ0NBU0AsJENDQVMsO3QgdAorLXMsQENDQVNGTEFHU0AsJENDQVNGTEFHUyw7dCB0CistcyxATkVXTElCX0NGTEFHU0AsJE5FV0xJQl9DRkxBR1MsO3QgdAorLXMsQExERkxBR1NALCRMREZMQUdTLDt0IHQKKy1zLEBFTElYX0xFVkVMXzBfVFJVRUAsJEVMSVhfTEVWRUxfMF9UUlVFLDt0IHQKKy1zLEBFTElYX0xFVkVMXzBfRkFMU0VALCRFTElYX0xFVkVMXzBfRkFMU0UsO3QgdAorLXMsQEVMSVhfTEVWRUxfMV9UUlVFQCwkRUxJWF9MRVZFTF8xX1RSVUUsO3QgdAorLXMsQEVMSVhfTEVWRUxfMV9GQUxTRUAsJEVMSVhfTEVWRUxfMV9GQUxTRSw7dCB0CistcyxARUxJWF9MRVZFTF8yX1RSVUVALCRFTElYX0xFVkVMXzJfVFJVRSw7dCB0CistcyxARUxJWF9MRVZFTF8yX0ZBTFNFQCwkRUxJWF9MRVZFTF8yX0ZBTFNFLDt0IHQKKy1zLEBFTElYX0xFVkVMXzNfVFJVRUAsJEVMSVhfTEVWRUxfM19UUlVFLDt0IHQKKy1zLEBFTElYX0xFVkVMXzNfRkFMU0VALCRFTElYX0xFVkVMXzNfRkFMU0UsO3QgdAorLXMsQEVMSVhfTEVWRUxfNF9UUlVFQCwkRUxJWF9MRVZFTF80X1RSVUUsO3QgdAorLXMsQEVMSVhfTEVWRUxfNF9GQUxTRUAsJEVMSVhfTEVWRUxfNF9GQUxTRSw7dCB0CistcyxAVVNFX0xJQlRPT0xfVFJVRUAsJFVTRV9MSUJUT09MX1RSVUUsO3QgdAorLXMsQFVTRV9MSUJUT09MX0ZBTFNFQCwkVVNFX0xJQlRPT0xfRkFMU0UsO3QgdAorLXMsQE9CSkVYVEAsJE9CSkVYVCw7dCB0CistcyxAb2V4dEAsJG9leHQsO3QgdAorLXMsQGFleHRALCRhZXh0LDt0IHQKKy1zLEBscGZ4QCwkbHBmeCw7dCB0CistcyxAbGlibV9tYWNoaW5lX2RpckAsJGxpYm1fbWFjaGluZV9kaXIsO3QgdAorLXMsQG1hY2hpbmVfZGlyQCwkbWFjaGluZV9kaXIsO3QgdAorLXMsQHN5c19kaXJALCRzeXNfZGlyLDt0IHQKKy1zLEBTRURALCRTRUQsO3QgdAorLXMsQERMTFRPT0xALCRETExUT09MLDt0IHQKKy1zLEBhY19jdF9ETExUT09MQCwkYWNfY3RfRExMVE9PTCw7dCB0CistcyxAT0JKRFVNUEAsJE9CSkRVTVAsO3QgdAorLXMsQGFjX2N0X09CSkRVTVBALCRhY19jdF9PQkpEVU1QLDt0IHQKKy1zLEBMSUJUT09MQCwkTElCVE9PTCw7dCB0CistcyxAQ0ZMQUdTQCwkQ0ZMQUdTLDt0IHQKKy1zLEBDUFBGTEFHU0AsJENQUEZMQUdTLDt0IHQKKy1zLEBhY19jdF9DQ0AsJGFjX2N0X0NDLDt0IHQKKy1zLEBFWEVFWFRALCRFWEVFWFQsO3QgdAorLXMsQEVHUkVQQCwkRUdSRVAsO3QgdAorLXMsQEZHUkVQQCwkRkdSRVAsO3QgdAorLXMsQEdSRVBALCRHUkVQLDt0IHQKKy1zLEBMREAsJExELDt0IHQKKy1zLEBEVU1QQklOQCwkRFVNUEJJTiw7dCB0CistcyxAYWNfY3RfRFVNUEJJTkAsJGFjX2N0X0RVTVBCSU4sO3QgdAorLXMsQE5NQCwkTk0sO3QgdAorLXMsQExOX1NALCRMTl9TLDt0IHQKKy1zLEBsdF9FQ0hPQCwkbHRfRUNITyw7dCB0CistcyxARFNZTVVUSUxALCREU1lNVVRJTCw7dCB0CistcyxAYWNfY3RfRFNZTVVUSUxALCRhY19jdF9EU1lNVVRJTCw7dCB0CistcyxATk1FRElUQCwkTk1FRElULDt0IHQKKy1zLEBhY19jdF9OTUVESVRALCRhY19jdF9OTUVESVQsO3QgdAorLXMsQExJUE9ALCRMSVBPLDt0IHQKKy1zLEBhY19jdF9MSVBPQCwkYWNfY3RfTElQTyw7dCB0CistcyxAT1RPT0xALCRPVE9PTCw7dCB0CistcyxAYWNfY3RfT1RPT0xALCRhY19jdF9PVE9PTCw7dCB0CistcyxAT1RPT0w2NEAsJE9UT09MNjQsO3QgdAorLXMsQGFjX2N0X09UT09MNjRALCRhY19jdF9PVE9PTDY0LDt0IHQKKy1zLEBDUFBALCRDUFAsO3QgdAorLXMsQHN1YmRpcnNALCRzdWJkaXJzLDt0IHQKKy1zLEBIQVZFX01BQ0hJTkVfRElSX1RSVUVALCRIQVZFX01BQ0hJTkVfRElSX1RSVUUsO3QgdAorLXMsQEhBVkVfTUFDSElORV9ESVJfRkFMU0VALCRIQVZFX01BQ0hJTkVfRElSX0ZBTFNFLDt0IHQKKy1zLEBMSUJPQkpTQCwkTElCT0JKUyw7dCB0CistcyxATFRMSUJPQkpTQCwkTFRMSUJPQkpTLDt0IHQKKy1DRU9GCistCistX0FDRU9GCistCistICBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKy0gICMgU3BsaXQgdGhlIHN1YnN0aXR1dGlvbnMgaW50byBiaXRlLXNpemVkIHBpZWNlcyBmb3Igc2VkcyB3aXRoCistICAjIHNtYWxsIGNvbW1hbmQgbnVtYmVyIGxpbWl0cywgbGlrZSBvbiBEaWdpdGFsIE9TRi8xIGFuZCBIUC1VWC4KKy0gIGFjX21heF9zZWRfbGluZXM9NDgKKy0gIGFjX3NlZF9mcmFnPTEgIyBOdW1iZXIgb2YgY3VycmVudCBmaWxlLgorLSAgYWNfYmVnPTEgIyBGaXJzdCBsaW5lIGZvciBjdXJyZW50IGZpbGUuCistICBhY19lbmQ9JGFjX21heF9zZWRfbGluZXMgIyBMaW5lIGFmdGVyIGxhc3QgbGluZSBmb3IgY3VycmVudCBmaWxlLgorLSAgYWNfbW9yZV9saW5lcz06CistICBhY19zZWRfY21kcz0KKy0gIHdoaWxlICRhY19tb3JlX2xpbmVzOyBkbworLSAgICBpZiB0ZXN0ICRhY19iZWcgLWd0IDE7IHRoZW4KKy0gICAgICBzZWQgIjEsJHthY19iZWd9ZDsgJHthY19lbmR9cSIgJHRtcC9zdWJzLnNlZCA+JHRtcC9zdWJzLmZyYWcKKy0gICAgZWxzZQorLSAgICAgIHNlZCAiJHthY19lbmR9cSIgJHRtcC9zdWJzLnNlZCA+JHRtcC9zdWJzLmZyYWcKKy0gICAgZmkKKy0gICAgaWYgdGVzdCAhIC1zICR0bXAvc3Vicy5mcmFnOyB0aGVuCistICAgICAgYWNfbW9yZV9saW5lcz1mYWxzZQorLSAgICBlbHNlCistICAgICAgIyBUaGUgcHVycG9zZSBvZiB0aGUgbGFiZWwgYW5kIG9mIHRoZSBicmFuY2hpbmcgY29uZGl0aW9uIGlzIHRvCistICAgICAgIyBzcGVlZCB1cCB0aGUgc2VkIHByb2Nlc3NpbmcgKGlmIHRoZXJlIGFyZSBubyBgQCcgYXQgYWxsLCB0aGVyZQorLSAgICAgICMgaXMgbm8gbmVlZCB0byBicm93c2UgYW55IG9mIHRoZSBzdWJzdGl0dXRpb25zKS4KKy0gICAgICAjIFRoZXNlIGFyZSB0aGUgdHdvIGV4dHJhIHNlZCBjb21tYW5kcyBtZW50aW9uZWQgYWJvdmUuCistICAgICAgKGVjaG8gJzp0CistICAvQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiJyAmJiBjYXQgJHRtcC9zdWJzLmZyYWcpID4kdG1wL3N1YnMtJGFjX3NlZF9mcmFnLnNlZAorLSAgICAgIGlmIHRlc3QgLXogIiRhY19zZWRfY21kcyI7IHRoZW4KKy0JYWNfc2VkX2NtZHM9InNlZCAtZiAkdG1wL3N1YnMtJGFjX3NlZF9mcmFnLnNlZCIKKy0gICAgICBlbHNlCistCWFjX3NlZF9jbWRzPSIkYWNfc2VkX2NtZHMgfCBzZWQgLWYgJHRtcC9zdWJzLSRhY19zZWRfZnJhZy5zZWQiCistICAgICAgZmkKKy0gICAgICBhY19zZWRfZnJhZz1gZXhwciAkYWNfc2VkX2ZyYWcgKyAxYAorLSAgICAgIGFjX2JlZz0kYWNfZW5kCistICAgICAgYWNfZW5kPWBleHByICRhY19lbmQgKyAkYWNfbWF4X3NlZF9saW5lc2AKKy0gICAgZmkKKy0gIGRvbmUKKy0gIGlmIHRlc3QgLXogIiRhY19zZWRfY21kcyI7IHRoZW4KKy0gICAgYWNfc2VkX2NtZHM9Y2F0CisraWYgdGVzdCAtbiAiJENPTkZJR19GSUxFUyI7IHRoZW4KKysKKytfQUNFT0YKKysKKysKKysKKythY19kZWxpbT0nJSFfISMgJworK2ZvciBhY19sYXN0X3RyeSBpbiBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSA6OyBkbworKyAgY2F0ID5jb25mJCRzdWJzLnNlZCA8PF9BQ0VPRgorK1NIRUxMISRTSEVMTCRhY19kZWxpbQorK1BBVEhfU0VQQVJBVE9SISRQQVRIX1NFUEFSQVRPUiRhY19kZWxpbQorK1BBQ0tBR0VfTkFNRSEkUEFDS0FHRV9OQU1FJGFjX2RlbGltCisrUEFDS0FHRV9UQVJOQU1FISRQQUNLQUdFX1RBUk5BTUUkYWNfZGVsaW0KKytQQUNLQUdFX1ZFUlNJT04hJFBBQ0tBR0VfVkVSU0lPTiRhY19kZWxpbQorK1BBQ0tBR0VfU1RSSU5HISRQQUNLQUdFX1NUUklORyRhY19kZWxpbQorK1BBQ0tBR0VfQlVHUkVQT1JUISRQQUNLQUdFX0JVR1JFUE9SVCRhY19kZWxpbQorK2V4ZWNfcHJlZml4ISRleGVjX3ByZWZpeCRhY19kZWxpbQorK3ByZWZpeCEkcHJlZml4JGFjX2RlbGltCisrcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSEkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSRhY19kZWxpbQorK2JpbmRpciEkYmluZGlyJGFjX2RlbGltCisrc2JpbmRpciEkc2JpbmRpciRhY19kZWxpbQorK2xpYmV4ZWNkaXIhJGxpYmV4ZWNkaXIkYWNfZGVsaW0KKytkYXRhcm9vdGRpciEkZGF0YXJvb3RkaXIkYWNfZGVsaW0KKytkYXRhZGlyISRkYXRhZGlyJGFjX2RlbGltCisrc3lzY29uZmRpciEkc3lzY29uZmRpciRhY19kZWxpbQorK3NoYXJlZHN0YXRlZGlyISRzaGFyZWRzdGF0ZWRpciRhY19kZWxpbQorK2xvY2Fsc3RhdGVkaXIhJGxvY2Fsc3RhdGVkaXIkYWNfZGVsaW0KKytpbmNsdWRlZGlyISRpbmNsdWRlZGlyJGFjX2RlbGltCisrb2xkaW5jbHVkZWRpciEkb2xkaW5jbHVkZWRpciRhY19kZWxpbQorK2RvY2RpciEkZG9jZGlyJGFjX2RlbGltCisraW5mb2RpciEkaW5mb2RpciRhY19kZWxpbQorK2h0bWxkaXIhJGh0bWxkaXIkYWNfZGVsaW0KKytkdmlkaXIhJGR2aWRpciRhY19kZWxpbQorK3BkZmRpciEkcGRmZGlyJGFjX2RlbGltCisrcHNkaXIhJHBzZGlyJGFjX2RlbGltCisrbGliZGlyISRsaWJkaXIkYWNfZGVsaW0KKytsb2NhbGVkaXIhJGxvY2FsZWRpciRhY19kZWxpbQorK21hbmRpciEkbWFuZGlyJGFjX2RlbGltCisrREVGUyEkREVGUyRhY19kZWxpbQorK0VDSE9fQyEkRUNIT19DJGFjX2RlbGltCisrRUNIT19OISRFQ0hPX04kYWNfZGVsaW0KKytFQ0hPX1QhJEVDSE9fVCRhY19kZWxpbQorK0xJQlMhJExJQlMkYWNfZGVsaW0KKytidWlsZF9hbGlhcyEkYnVpbGRfYWxpYXMkYWNfZGVsaW0KKytob3N0X2FsaWFzISRob3N0X2FsaWFzJGFjX2RlbGltCisrdGFyZ2V0X2FsaWFzISR0YXJnZXRfYWxpYXMkYWNfZGVsaW0KKytNQVlfU1VQUExZX1NZU0NBTExTX1RSVUUhJE1BWV9TVVBQTFlfU1lTQ0FMTFNfVFJVRSRhY19kZWxpbQorK01BWV9TVVBQTFlfU1lTQ0FMTFNfRkFMU0UhJE1BWV9TVVBQTFlfU1lTQ0FMTFNfRkFMU0UkYWNfZGVsaW0KKytuZXdsaWJfYmFzZWRpciEkbmV3bGliX2Jhc2VkaXIkYWNfZGVsaW0KKytidWlsZCEkYnVpbGQkYWNfZGVsaW0KKytidWlsZF9jcHUhJGJ1aWxkX2NwdSRhY19kZWxpbQorK2J1aWxkX3ZlbmRvciEkYnVpbGRfdmVuZG9yJGFjX2RlbGltCisrYnVpbGRfb3MhJGJ1aWxkX29zJGFjX2RlbGltCisraG9zdCEkaG9zdCRhY19kZWxpbQorK2hvc3RfY3B1ISRob3N0X2NwdSRhY19kZWxpbQorK2hvc3RfdmVuZG9yISRob3N0X3ZlbmRvciRhY19kZWxpbQorK2hvc3Rfb3MhJGhvc3Rfb3MkYWNfZGVsaW0KKytJTlNUQUxMX1BST0dSQU0hJElOU1RBTExfUFJPR1JBTSRhY19kZWxpbQorK0lOU1RBTExfU0NSSVBUISRJTlNUQUxMX1NDUklQVCRhY19kZWxpbQorK0lOU1RBTExfREFUQSEkSU5TVEFMTF9EQVRBJGFjX2RlbGltCisrQ1lHUEFUSF9XISRDWUdQQVRIX1ckYWNfZGVsaW0KKytQQUNLQUdFISRQQUNLQUdFJGFjX2RlbGltCisrVkVSU0lPTiEkVkVSU0lPTiRhY19kZWxpbQorK0FDTE9DQUwhJEFDTE9DQUwkYWNfZGVsaW0KKytBVVRPQ09ORiEkQVVUT0NPTkYkYWNfZGVsaW0KKytBVVRPTUFLRSEkQVVUT01BS0UkYWNfZGVsaW0KKytBVVRPSEVBREVSISRBVVRPSEVBREVSJGFjX2RlbGltCisrTUFLRUlORk8hJE1BS0VJTkZPJGFjX2RlbGltCisraW5zdGFsbF9zaCEkaW5zdGFsbF9zaCRhY19kZWxpbQorK1NUUklQISRTVFJJUCRhY19kZWxpbQorK0lOU1RBTExfU1RSSVBfUFJPR1JBTSEkSU5TVEFMTF9TVFJJUF9QUk9HUkFNJGFjX2RlbGltCisrbWtkaXJfcCEkbWtkaXJfcCRhY19kZWxpbQorK0FXSyEkQVdLJGFjX2RlbGltCisrU0VUX01BS0UhJFNFVF9NQUtFJGFjX2RlbGltCisrYW1fX2xlYWRpbmdfZG90ISRhbV9fbGVhZGluZ19kb3QkYWNfZGVsaW0KKytBTVRBUiEkQU1UQVIkYWNfZGVsaW0KKythbV9fdGFyISRhbV9fdGFyJGFjX2RlbGltCisrYW1fX3VudGFyISRhbV9fdW50YXIkYWNfZGVsaW0KKytDQyEkQ0MkYWNfZGVsaW0KKytERVBESVIhJERFUERJUiRhY19kZWxpbQorK2FtX19pbmNsdWRlISRhbV9faW5jbHVkZSRhY19kZWxpbQorK2FtX19xdW90ZSEkYW1fX3F1b3RlJGFjX2RlbGltCisrQU1ERVBfVFJVRSEkQU1ERVBfVFJVRSRhY19kZWxpbQorK0FNREVQX0ZBTFNFISRBTURFUF9GQUxTRSRhY19kZWxpbQorK0FNREVQQkFDS1NMQVNIISRBTURFUEJBQ0tTTEFTSCRhY19kZWxpbQorK0NDREVQTU9ERSEkQ0NERVBNT0RFJGFjX2RlbGltCisrYW1fX2Zhc3RkZXBDQ19UUlVFISRhbV9fZmFzdGRlcENDX1RSVUUkYWNfZGVsaW0KKythbV9fZmFzdGRlcENDX0ZBTFNFISRhbV9fZmFzdGRlcENDX0ZBTFNFJGFjX2RlbGltCisrQVMhJEFTJGFjX2RlbGltCisrQVIhJEFSJGFjX2RlbGltCisrUkFOTElCISRSQU5MSUIkYWNfZGVsaW0KKytSRUFERUxGISRSRUFERUxGJGFjX2RlbGltCisrTUFJTlRBSU5FUl9NT0RFX1RSVUUhJE1BSU5UQUlORVJfTU9ERV9UUlVFJGFjX2RlbGltCisrTUFJTlRBSU5FUl9NT0RFX0ZBTFNFISRNQUlOVEFJTkVSX01PREVfRkFMU0UkYWNfZGVsaW0KKytNQUlOVCEkTUFJTlQkYWNfZGVsaW0KKytDQ0FTISRDQ0FTJGFjX2RlbGltCisrQ0NBU0ZMQUdTISRDQ0FTRkxBR1MkYWNfZGVsaW0KKytORVdMSUJfQ0ZMQUdTISRORVdMSUJfQ0ZMQUdTJGFjX2RlbGltCisrTERGTEFHUyEkTERGTEFHUyRhY19kZWxpbQorK0VMSVhfTEVWRUxfMF9UUlVFISRFTElYX0xFVkVMXzBfVFJVRSRhY19kZWxpbQorK0VMSVhfTEVWRUxfMF9GQUxTRSEkRUxJWF9MRVZFTF8wX0ZBTFNFJGFjX2RlbGltCisrRUxJWF9MRVZFTF8xX1RSVUUhJEVMSVhfTEVWRUxfMV9UUlVFJGFjX2RlbGltCisrRUxJWF9MRVZFTF8xX0ZBTFNFISRFTElYX0xFVkVMXzFfRkFMU0UkYWNfZGVsaW0KKytFTElYX0xFVkVMXzJfVFJVRSEkRUxJWF9MRVZFTF8yX1RSVUUkYWNfZGVsaW0KKytFTElYX0xFVkVMXzJfRkFMU0UhJEVMSVhfTEVWRUxfMl9GQUxTRSRhY19kZWxpbQorK0VMSVhfTEVWRUxfM19UUlVFISRFTElYX0xFVkVMXzNfVFJVRSRhY19kZWxpbQorK19BQ0VPRgorKworKyAgaWYgdGVzdCBgc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLnNlZCB8IGdyZXAgLWMgWGAgPSA5NzsgdGhlbgorKyAgICBicmVhaworKyAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKysgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IGNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKyAgZWxzZQorKyAgICBhY19kZWxpbT0iJGFjX2RlbGltISRhY19kZWxpbSBfJGFjX2RlbGltISEgIgorICAgZmkKKy1maSAjIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiCisrZG9uZQorKworK2FjX2VvZj1gc2VkIC1uICcvXkNFT0ZbMC05XSokL3MvQ0VPRi8wL3AnIGNvbmYkJHN1YnMuc2VkYAorK2lmIHRlc3QgLW4gIiRhY19lb2YiOyB0aGVuCisrICBhY19lb2Y9YGVjaG8gIiRhY19lb2YiIHwgc29ydCAtbnJ1IHwgc2VkIDFxYAorKyAgYWNfZW9mPWBleHByICRhY19lb2YgKyAxYAorK2ZpCisrCisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKytjYXQgPiJcJHRtcC9zdWJzLTEuc2VkIiA8PFxDRU9GJGFjX2VvZgorKy9AW2EtekEtWl9dW2EtekEtWl8wLTldKkAvIWIKKytfQUNFT0YKKytzZWQgJworK3MvWyxcXCZdL1xcJi9nOyBzL0AvQHwjXyEhXyN8L2cKKytzL14vcyxALzsgcy8hL0AsfCNfISFfI3wvCisrOm4KKyt0IG4KKytzLyciJGFjX2RlbGltIickLyxnLzsgdAorK3MvJC9cXC87IHAKKytOOyBzL14uKlxuLy87IHMvWyxcXCZdL1xcJi9nOyBzL0AvQHwjXyEhXyN8L2c7IGIgbgorKycgPj4kQ09ORklHX1NUQVRVUyA8Y29uZiQkc3Vicy5zZWQKKytybSAtZiBjb25mJCRzdWJzLnNlZAorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisrQ0VPRiRhY19lb2YKKytfQUNFT0YKKysKKysKKythY19kZWxpbT0nJSFfISMgJworK2ZvciBhY19sYXN0X3RyeSBpbiBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSA6OyBkbworKyAgY2F0ID5jb25mJCRzdWJzLnNlZCA8PF9BQ0VPRgorK0VMSVhfTEVWRUxfM19GQUxTRSEkRUxJWF9MRVZFTF8zX0ZBTFNFJGFjX2RlbGltCisrRUxJWF9MRVZFTF80X1RSVUUhJEVMSVhfTEVWRUxfNF9UUlVFJGFjX2RlbGltCisrRUxJWF9MRVZFTF80X0ZBTFNFISRFTElYX0xFVkVMXzRfRkFMU0UkYWNfZGVsaW0KKytVU0VfTElCVE9PTF9UUlVFISRVU0VfTElCVE9PTF9UUlVFJGFjX2RlbGltCisrVVNFX0xJQlRPT0xfRkFMU0UhJFVTRV9MSUJUT09MX0ZBTFNFJGFjX2RlbGltCisrT0JKRVhUISRPQkpFWFQkYWNfZGVsaW0KKytvZXh0ISRvZXh0JGFjX2RlbGltCisrYWV4dCEkYWV4dCRhY19kZWxpbQorK2xwZnghJGxwZngkYWNfZGVsaW0KKytsaWJtX21hY2hpbmVfZGlyISRsaWJtX21hY2hpbmVfZGlyJGFjX2RlbGltCisrbWFjaGluZV9kaXIhJG1hY2hpbmVfZGlyJGFjX2RlbGltCisrc3lzX2RpciEkc3lzX2RpciRhY19kZWxpbQorK1NFRCEkU0VEJGFjX2RlbGltCisrRExMVE9PTCEkRExMVE9PTCRhY19kZWxpbQorK09CSkRVTVAhJE9CSkRVTVAkYWNfZGVsaW0KKytMSUJUT09MISRMSUJUT09MJGFjX2RlbGltCisrQ0ZMQUdTISRDRkxBR1MkYWNfZGVsaW0KKytDUFBGTEFHUyEkQ1BQRkxBR1MkYWNfZGVsaW0KKythY19jdF9DQyEkYWNfY3RfQ0MkYWNfZGVsaW0KKytFWEVFWFQhJEVYRUVYVCRhY19kZWxpbQorK0dSRVAhJEdSRVAkYWNfZGVsaW0KKytFR1JFUCEkRUdSRVAkYWNfZGVsaW0KKytGR1JFUCEkRkdSRVAkYWNfZGVsaW0KKytMRCEkTEQkYWNfZGVsaW0KKytEVU1QQklOISREVU1QQklOJGFjX2RlbGltCisrYWNfY3RfRFVNUEJJTiEkYWNfY3RfRFVNUEJJTiRhY19kZWxpbQorK05NISROTSRhY19kZWxpbQorK0xOX1MhJExOX1MkYWNfZGVsaW0KKytsdF9FQ0hPISRsdF9FQ0hPJGFjX2RlbGltCisrRFNZTVVUSUwhJERTWU1VVElMJGFjX2RlbGltCisrTk1FRElUISROTUVESVQkYWNfZGVsaW0KKytMSVBPISRMSVBPJGFjX2RlbGltCisrT1RPT0whJE9UT09MJGFjX2RlbGltCisrT1RPT0w2NCEkT1RPT0w2NCRhY19kZWxpbQorK0NQUCEkQ1BQJGFjX2RlbGltCisrc3ViZGlycyEkc3ViZGlycyRhY19kZWxpbQorK0hBVkVfTUFDSElORV9ESVJfVFJVRSEkSEFWRV9NQUNISU5FX0RJUl9UUlVFJGFjX2RlbGltCisrSEFWRV9NQUNISU5FX0RJUl9GQUxTRSEkSEFWRV9NQUNISU5FX0RJUl9GQUxTRSRhY19kZWxpbQorK0xJQk9CSlMhJExJQk9CSlMkYWNfZGVsaW0KKytMVExJQk9CSlMhJExUTElCT0JKUyRhY19kZWxpbQorK19BQ0VPRgorKworKyAgaWYgdGVzdCBgc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLnNlZCB8IGdyZXAgLWMgWGAgPSA0MDsgdGhlbgorKyAgICBicmVhaworKyAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKysgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IGNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKyAgZWxzZQorKyAgICBhY19kZWxpbT0iJGFjX2RlbGltISRhY19kZWxpbSBfJGFjX2RlbGltISEgIgorKyAgZmkKKytkb25lCisrCisrYWNfZW9mPWBzZWQgLW4gJy9eQ0VPRlswLTldKiQvcy9DRU9GLzAvcCcgY29uZiQkc3Vicy5zZWRgCisraWYgdGVzdCAtbiAiJGFjX2VvZiI7IHRoZW4KKysgIGFjX2VvZj1gZWNobyAiJGFjX2VvZiIgfCBzb3J0IC1ucnUgfCBzZWQgMXFgCisrICBhY19lb2Y9YGV4cHIgJGFjX2VvZiArIDFgCisrZmkKKyAKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorK2NhdCA+IlwkdG1wL3N1YnMtMi5zZWQiIDw8XENFT0YkYWNfZW9mCisrL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYiBlbmQKKytfQUNFT0YKKytzZWQgJworK3MvWyxcXCZdL1xcJi9nOyBzL0AvQHwjXyEhXyN8L2cKKytzL14vcyxALzsgcy8hL0AsfCNfISFfI3wvCisrOm4KKyt0IG4KKytzLyciJGFjX2RlbGltIickLyxnLzsgdAorK3MvJC9cXC87IHAKKytOOyBzL14uKlxuLy87IHMvWyxcXCZdL1xcJi9nOyBzL0AvQHwjXyEhXyN8L2c7IGIgbgorKycgPj4kQ09ORklHX1NUQVRVUyA8Y29uZiQkc3Vicy5zZWQKKytybSAtZiBjb25mJCRzdWJzLnNlZAorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisrOmVuZAorK3MvfCNfISFfI3wvL2cKKytDRU9GJGFjX2VvZgorIF9BQ0VPRgorKworKworKyMgVlBBVEggbWF5IGNhdXNlIHRyb3VibGUgd2l0aCBzb21lIG1ha2VzLCBzbyB3ZSByZW1vdmUgJChzcmNkaXIpLAorKyMgJHtzcmNkaXJ9IGFuZCBAc3JjZGlyQCBmcm9tIFZQQVRIIGlmIHNyY2RpciBpcyAiLiIsIHN0cmlwIGxlYWRpbmcgYW5kCisrIyB0cmFpbGluZyBjb2xvbnMgYW5kIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBsaW5lIGlmIFZQQVRIIGJlY29tZXMgZW1wdHkKKysjIChhY3R1YWxseSB3ZSBsZWF2ZSBhbiBlbXB0eSBsaW5lIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycykuCisraWYgdGVzdCAieCRzcmNkaXIiID0geC47IHRoZW4KKysgIGFjX3Zwc3ViPScvXlsJIF0qVlBBVEhbCSBdKj0veworK3MvOipcJChzcmNkaXIpOiovOi8KKytzLzoqXCR7c3JjZGlyfToqLzovCisrcy86KkBzcmNkaXJAOiovOi8KKytzL15cKFtePV0qPVsJIF0qXCk6Ki9cMS8KKytzLzoqJC8vCisrcy9eW149XSo9WwkgXSokLy8KKyt9JworK2ZpCisrCisgY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCistZm9yIGFjX2ZpbGUgaW4gOiAkQ09ORklHX0ZJTEVTOyBkbyB0ZXN0ICJ4JGFjX2ZpbGUiID0geDogJiYgY29udGludWUKKy0gICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIsIGRlZmF1bHRpbmcgaW5maWxlPSJvdXRmaWxlLmluIi4KKy0gIGNhc2UgJGFjX2ZpbGUgaW4KKy0gIC0gfCAqOi0gfCAqOi06KiApICMgaW5wdXQgZnJvbSBzdGRpbgorLQljYXQgPiR0bXAvc3RkaW4KKy0JYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKy0JYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKKy0gICo6KiApIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCistCWFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7CistICAqICkgICBhY19maWxlX2luPSRhY19maWxlLmluIDs7CisrZmkgIyB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIgorKworKworK2ZvciBhY190YWcgaW4gIDpGICRDT05GSUdfRklMRVMgICAgICA6QyAkQ09ORklHX0NPTU1BTkRTCisrZG8KKysgIGNhc2UgJGFjX3RhZyBpbgorKyAgOltGSExDXSkgYWNfbW9kZT0kYWNfdGFnOyBjb250aW51ZTs7CisrICBlc2FjCisrICBjYXNlICRhY19tb2RlJGFjX3RhZyBpbgorKyAgOltGSExdKjoqKTs7CisrICA6TCogfCA6Qyo6KikgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogSW52YWxpZCB0YWcgJGFjX3RhZy4iID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IEludmFsaWQgdGFnICRhY190YWcuIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisrICA6W0ZIXS0pIGFjX3RhZz0tOi07OworKyAgOltGSF0qKSBhY190YWc9JGFjX3RhZzokYWNfdGFnLmluOzsKKysgIGVzYWMKKysgIGFjX3NhdmVfSUZTPSRJRlMKKysgIElGUz06CisrICBzZXQgeCAkYWNfdGFnCisrICBJRlM9JGFjX3NhdmVfSUZTCisrICBzaGlmdAorKyAgYWNfZmlsZT0kMQorKyAgc2hpZnQKKysKKysgIGNhc2UgJGFjX21vZGUgaW4KKysgIDpMKSBhY19zb3VyY2U9JDE7OworKyAgOltGSF0pCisrICAgIGFjX2ZpbGVfaW5wdXRzPQorKyAgICBmb3IgYWNfZgorKyAgICBkbworKyAgICAgIGNhc2UgJGFjX2YgaW4KKysgICAgICAtKSBhY19mPSIkdG1wL3N0ZGluIjs7CisrICAgICAgKikgIyBMb29rIGZvciB0aGUgZmlsZSBmaXJzdCBpbiB0aGUgYnVpbGQgdHJlZSwgdGhlbiBpbiB0aGUgc291cmNlIHRyZWUKKysJICMgKGlmIHRoZSBwYXRoIGlzIG5vdCBhYnNvbHV0ZSkuICBUaGUgYWJzb2x1dGUgcGF0aCBjYW5ub3QgYmUgRE9TLXN0eWxlLAorKwkgIyBiZWNhdXNlICRhY19mIGNhbm5vdCBjb250YWluIGA6Jy4KKysJIHRlc3QgLWYgIiRhY19mIiB8fAorKwkgICBjYXNlICRhY19mIGluCisrCSAgIFtcXC8kXSopIGZhbHNlOzsKKysJICAgKikgdGVzdCAtZiAiJHNyY2Rpci8kYWNfZiIgJiYgYWNfZj0iJHNyY2Rpci8kYWNfZiI7OworKwkgICBlc2FjIHx8CisrCSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRhY19mIiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkYWNfZiIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworKyAgICAgIGVzYWMKKysgICAgICBhY19maWxlX2lucHV0cz0iJGFjX2ZpbGVfaW5wdXRzICRhY19mIgorKyAgICBkb25lCisrCisrICAgICMgTGV0J3Mgc3RpbGwgcHJldGVuZCBpdCBpcyBgY29uZmlndXJlJyB3aGljaCBpbnN0YW50aWF0ZXMgKGkuZS4sIGRvbid0CisrICAgICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKKysgICAgIyAgICAvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBieSBjb25maWcuc3RhdHVzLiAgKi8KKysgICAgY29uZmlndXJlX2lucHV0PSJHZW5lcmF0ZWQgZnJvbSAiYElGUz06CisrCSAgZWNobyAkKiB8IHNlZCAnc3xeW146XSovfHw7c3w6W146XSovfCwgfGcnYCIgYnkgY29uZmlndXJlLiIKKysgICAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorKyAgICAgIGNvbmZpZ3VyZV9pbnB1dD0iJGFjX2ZpbGUuICAkY29uZmlndXJlX2lucHV0IgorKyAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRhY19maWxlIiA+JjUKKytlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQorKyAgICBmaQorKworKyAgICBjYXNlICRhY190YWcgaW4KKysgICAgKjotOiogfCAqOi0pIGNhdCA+IiR0bXAvc3RkaW4iOzsKKysgICAgZXNhYworKyAgICA7OworICAgZXNhYworIAorLSAgIyBDb21wdXRlIEBzcmNkaXJALCBAdG9wX3NyY2RpckAsIGFuZCBASU5TVEFMTEAgZm9yIHN1YmRpcmVjdG9yaWVzLgorLSAgYWNfZGlyPWAoZGlybmFtZSAiJGFjX2ZpbGUiKSAyPi9kZXYvbnVsbCB8fAorKyAgYWNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFjX2ZpbGUiIHx8CisgJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKyAJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisgCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpJCcgXHwgXAorLQkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCBcCistCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKysJIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorIGVjaG8gWCIkYWNfZmlsZSIgfAorLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKy0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CistICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKy0gIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CistICAJICBzLy4qLy4vOyBxJ2AKKy0gIHsgaWYgJGFzX21rZGlyX3A7IHRoZW4KKy0gICAgbWtkaXIgLXAgIiRhY19kaXIiCistICBlbHNlCistICAgIGFzX2Rpcj0iJGFjX2RpciIKKysgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXC9cKVteL10uKi97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXChcL1wvXCkkL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXCkuKi97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgcy8uKi8uLzsgcSdgCisrICB7IGFzX2Rpcj0iJGFjX2RpciIKKysgIGNhc2UgJGFzX2RpciBpbiAjKAorKyAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OworKyAgZXNhYworKyAgdGVzdCAtZCAiJGFzX2RpciIgfHwgeyAkYXNfbWtkaXJfcCAmJiBta2RpciAtcCAiJGFzX2RpciI7IH0gfHwgeworICAgICBhc19kaXJzPQorLSAgICB3aGlsZSB0ZXN0ICEgLWQgIiRhc19kaXIiOyBkbworLSAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCistICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8CisrICAgIHdoaWxlIDo7IGRvCisrICAgICAgY2FzZSAkYXNfZGlyIGluICMoCisrICAgICAgKlwnKikgYXNfcWRpcj1gZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjKAorKyAgICAgICopIGFzX3FkaXI9JGFzX2Rpcjs7CisrICAgICAgZXNhYworKyAgICAgIGFzX2RpcnM9IickYXNfcWRpcicgJGFzX2RpcnMiCisrICAgICAgYXNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX2RpciIgfHwKKyAkYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisgCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisgCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCistCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CisrCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorIGVjaG8gWCIkYXNfZGlyIiB8CistICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorLSAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKy0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKy0gIAkgIHMvLiovLi87IHEnYAorKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXC9cKSQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cKS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICBzLy4qLy4vOyBxJ2AKKysgICAgICB0ZXN0IC1kICIkYXNfZGlyIiAmJiBicmVhaworICAgICBkb25lCistICAgIHRlc3QgISAtbiAiJGFzX2RpcnMiIHx8IG1rZGlyICRhc19kaXJzCistICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mMjt9CisrICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKysgIH0gfHwgdGVzdCAtZCAiJGFzX2RpciIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIgPiYyO30KKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKy0KKyAgIGFjX2J1aWxkZGlyPS4KKyAKKy1pZiB0ZXN0ICIkYWNfZGlyIiAhPSAuOyB0aGVuCisrY2FzZSAiJGFjX2RpciIgaW4KKysuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKysqKQorICAgYWNfZGlyX3N1ZmZpeD0vYGVjaG8gIiRhY19kaXIiIHwgc2VkICdzLF5cLltcXC9dLCwnYAorLSAgIyBBICIuLi8iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKy0gIGFjX3RvcF9idWlsZGRpcj1gZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzLC9bXlxcL10qLC4uLyxnJ2AKKy1lbHNlCistICBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXI9CistZmkKKysgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKysgIGFjX3RvcF9idWlsZGRpcl9zdWI9YGVjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAncywvW15cXC9dKiwvLi4sZztzLC8sLCdgCisrICBjYXNlICRhY190b3BfYnVpbGRkaXJfc3ViIGluCisrICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisrICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1Yi8gOzsKKysgIGVzYWMgOzsKKytlc2FjCisrYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkCisrYWNfYWJzX2J1aWxkZGlyPSRhY19wd2QkYWNfZGlyX3N1ZmZpeAorKyMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6CisrYWNfdG9wX2J1aWxkZGlyPSRhY190b3BfYnVpbGRfcHJlZml4CisgCisgY2FzZSAkc3JjZGlyIGluCistICAuKSAgIyBObyAtLXNyY2RpciBvcHRpb24uICBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisrICAuKSAgIyBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisgICAgIGFjX3NyY2Rpcj0uCistICAgIGlmIHRlc3QgLXogIiRhY190b3BfYnVpbGRkaXIiOyB0aGVuCistICAgICAgIGFjX3RvcF9zcmNkaXI9LgorLSAgICBlbHNlCistICAgICAgIGFjX3RvcF9zcmNkaXI9YGVjaG8gJGFjX3RvcF9idWlsZGRpciB8IHNlZCAncywvJCwsJ2AKKy0gICAgZmkgOzsKKy0gIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgcGF0aC4KKysgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyX3N1YgorKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkIDs7CisrICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuCisgICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7CistICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpciA7OworLSAgKikgIyBSZWxhdGl2ZSBwYXRoLgorLSAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorLSAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXIkc3JjZGlyIDs7CistZXNhYworKyAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIKKysgICAgYWNfYWJzX3RvcF9zcmNkaXI9JHNyY2RpciA7OworKyAgKikgIyBSZWxhdGl2ZSBuYW1lLgorKyAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKysgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIKKysgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZC8kc3JjZGlyIDs7CisrZXNhYworK2FjX2Fic19zcmNkaXI9JGFjX2Fic190b3Bfc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAKKy0jIERvIG5vdCB1c2UgYGNkIGZvbyAmJiBwd2RgIHRvIGNvbXB1dGUgYWJzb2x1dGUgcGF0aHMsIGJlY2F1c2UKKy0jIHRoZSBkaXJlY3RvcmllcyBtYXkgbm90IGV4aXN0LgorLWNhc2UgYHB3ZGAgaW4KKy0uKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKKy0qKQorLSAgY2FzZSAiJGFjX2RpciIgaW4KKy0gIC4pIGFjX2Fic19idWlsZGRpcj1gcHdkYDs7CistICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OworLSAgKikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgLyIkYWNfZGlyIjs7CistICBlc2FjOzsKKy1lc2FjCistY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCistLikgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKKy0qKQorLSAgY2FzZSAke2FjX3RvcF9idWlsZGRpcn0uIGluCistICAuKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXI7OworLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OworLSAgKikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyLyR7YWNfdG9wX2J1aWxkZGlyfS47OworLSAgZXNhYzs7CistZXNhYworLWNhc2UgJGFjX2Fic19idWlsZGRpciBpbgorLS4pIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7CistKikKKy0gIGNhc2UgJGFjX3NyY2RpciBpbgorLSAgLikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKy0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKKy0gICopIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfc3JjZGlyOzsKKy0gIGVzYWM7OworLWVzYWMKKy1jYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKy0uKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7CistKikKKy0gIGNhc2UgJGFjX3RvcF9zcmNkaXIgaW4KKy0gIC4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OworLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7CistICAqKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY190b3Bfc3JjZGlyOzsKKy0gIGVzYWM7OworLWVzYWMKKyAKKysgIGNhc2UgJGFjX21vZGUgaW4KKysgIDpGKQorKyAgIworKyAgIyBDT05GSUdfRklMRQorKyAgIworIAorICAgY2FzZSAkSU5TVEFMTCBpbgorICAgW1xcLyRdKiB8ID86W1xcL10qICkgYWNfSU5TVEFMTD0kSU5TVEFMTCA7OworLSAgKikgYWNfSU5TVEFMTD0kYWNfdG9wX2J1aWxkZGlyJElOU1RBTEwgOzsKKysgICopIGFjX0lOU1RBTEw9JGFjX3RvcF9idWlsZF9wcmVmaXgkSU5TVEFMTCA7OworICAgZXNhYworK19BQ0VPRgorIAorLSAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkYWNfZmlsZSIgPiY1CistZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZmlsZSIgPiY2O30KKy0gICAgcm0gLWYgIiRhY19maWxlIgorLSAgZmkKKy0gICMgTGV0J3Mgc3RpbGwgcHJldGVuZCBpdCBpcyBgY29uZmlndXJlJyB3aGljaCBpbnN0YW50aWF0ZXMgKGkuZS4sIGRvbid0CistICAjIHVzZSAkYXNfbWUpLCBwZW9wbGUgd291bGQgYmUgc3VycHJpc2VkIHRvIHJlYWQ6CistICAjICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZy5zdGF0dXMuICAqLworLSAgaWYgdGVzdCB4IiRhY19maWxlIiA9IHgtOyB0aGVuCistICAgIGNvbmZpZ3VyZV9pbnB1dD0KKy0gIGVsc2UKKy0gICAgY29uZmlndXJlX2lucHV0PSIkYWNfZmlsZS4gICIKKy0gIGZpCistICBjb25maWd1cmVfaW5wdXQ9JGNvbmZpZ3VyZV9pbnB1dCJHZW5lcmF0ZWQgZnJvbSBgZWNobyAkYWNfZmlsZV9pbiB8CistCQkJCSAgICAgc2VkICdzLC4qLywsJ2AgYnkgY29uZmlndXJlLiIKKy0KKy0gICMgRmlyc3QgbG9vayBmb3IgdGhlIGlucHV0IGZpbGVzIGluIHRoZSBidWlsZCB0cmVlLCBvdGhlcndpc2UgaW4gdGhlCistICAjIHNyYyB0cmVlLgorLSAgYWNfZmlsZV9pbnB1dHM9YElGUz06CistICAgIGZvciBmIGluICRhY19maWxlX2luOyBkbworLSAgICAgIGNhc2UgJGYgaW4KKy0gICAgICAtKSBlY2hvICR0bXAvc3RkaW4gOzsKKy0gICAgICBbXFwvJF0qKQorLQkgIyBBYnNvbHV0ZSAoY2FuJ3QgYmUgRE9TLXN0eWxlLCBhcyBJRlM9OikKKy0JIHRlc3QgLWYgIiRmIiB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistCSBlY2hvICIkZiI7OworLSAgICAgICopICMgUmVsYXRpdmUKKy0JIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgorLQkgICAjIEJ1aWxkIHRyZWUKKy0JICAgZWNobyAiJGYiCistCSBlbGlmIHRlc3QgLWYgIiRzcmNkaXIvJGYiOyB0aGVuCistCSAgICMgU291cmNlIHRyZWUKKy0JICAgZWNobyAiJHNyY2Rpci8kZiIKKy0JIGVsc2UKKy0JICAgIyAvZGV2L251bGwgdHJlZQorLQkgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistCSBmaTs7CistICAgICAgZXNhYworLSAgICBkb25lYCB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKysjIElmIHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBrbm93IGFib3V0IGRhdGFyb290ZGlyLCBleHBhbmQgaXQuCisrIyBGSVhNRTogVGhpcyBoYWNrIHNob3VsZCBiZSByZW1vdmVkIGEgZmV3IHllYXJzIGFmdGVyIDIuNjAuCisrYWNfZGF0YXJvb3RkaXJfaGFjaz07IGFjX2RhdGFyb290ZGlyX3NlZW49CisrCisrY2FzZSBgc2VkIC1uICcvZGF0YXJvb3RkaXIvIHsKKysgIHAKKysgIHEKKyt9CisrL0BkYXRhZGlyQC9wCisrL0Bkb2NkaXJAL3AKKysvQGluZm9kaXJAL3AKKysvQGxvY2FsZWRpckAvcAorKy9AbWFuZGlyQC9wCisrJyAkYWNfZmlsZV9pbnB1dHNgIGluCisrKmRhdGFyb290ZGlyKikgYWNfZGF0YXJvb3RkaXJfc2Vlbj15ZXM7OworKypAZGF0YWRpckAqfCpAZG9jZGlyQCp8KkBpbmZvZGlyQCp8KkBsb2NhbGVkaXJAKnwqQG1hbmRpckAqKQorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlX2lucHV0cyBzZWVtcyB0byBpZ25vcmUgdGhlIC0tZGF0YXJvb3RkaXIgc2V0dGluZyIgPiYyO30KKytfQUNFT0YKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorKyAgYWNfZGF0YXJvb3RkaXJfaGFjaz0nCisrICBzJkBkYXRhZGlyQCYkZGF0YWRpciZnCisrICBzJkBkb2NkaXJAJiRkb2NkaXImZworKyAgcyZAaW5mb2RpckAmJGluZm9kaXImZworKyAgcyZAbG9jYWxlZGlyQCYkbG9jYWxlZGlyJmcKKysgIHMmQG1hbmRpckAmJG1hbmRpciZnCisrICAgIHMmXFxcJHtkYXRhcm9vdGRpcn0mJGRhdGFyb290ZGlyJmcnIDs7CisrZXNhYworIF9BQ0VPRgorKworKyMgTmV1dHJhbGl6ZSBWUEFUSCB3aGVuIGAkc3JjZGlyJyA9IGAuJy4KKysjIFNoZWxsIGNvZGUgaW4gY29uZmlndXJlLmFjIG1pZ2h0IHNldCBleHRyYXN1Yi4KKysjIEZJWE1FOiBkbyB3ZSByZWFsbHkgd2FudCB0byBtYWludGFpbiB0aGlzIGZlYXR1cmU/CisgY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKyAgIHNlZCAiJGFjX3Zwc3ViCisgJGV4dHJhc3ViCitAQCAtMTI4NTksMTQyICsxMzk3Myw0MyBAQAorIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorIDp0CisgL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYgorLXMsQGNvbmZpZ3VyZV9pbnB1dEAsJGNvbmZpZ3VyZV9pbnB1dCw7dCB0CistcyxAc3JjZGlyQCwkYWNfc3JjZGlyLDt0IHQKKy1zLEBhYnNfc3JjZGlyQCwkYWNfYWJzX3NyY2Rpciw7dCB0CistcyxAdG9wX3NyY2RpckAsJGFjX3RvcF9zcmNkaXIsO3QgdAorLXMsQGFic190b3Bfc3JjZGlyQCwkYWNfYWJzX3RvcF9zcmNkaXIsO3QgdAorLXMsQGJ1aWxkZGlyQCwkYWNfYnVpbGRkaXIsO3QgdAorLXMsQGFic19idWlsZGRpckAsJGFjX2Fic19idWlsZGRpciw7dCB0CistcyxAdG9wX2J1aWxkZGlyQCwkYWNfdG9wX2J1aWxkZGlyLDt0IHQKKy1zLEBhYnNfdG9wX2J1aWxkZGlyQCwkYWNfYWJzX3RvcF9idWlsZGRpciw7dCB0CistcyxASU5TVEFMTEAsJGFjX0lOU1RBTEwsO3QgdAorLSIgJGFjX2ZpbGVfaW5wdXRzIHwgKGV2YWwgIiRhY19zZWRfY21kcyIpID4kdG1wL291dAorLSAgcm0gLWYgJHRtcC9zdGRpbgorLSAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorLSAgICBtdiAkdG1wL291dCAkYWNfZmlsZQorLSAgZWxzZQorLSAgICBjYXQgJHRtcC9vdXQKKy0gICAgcm0gLWYgJHRtcC9vdXQKKy0gIGZpCistCistZG9uZQorLV9BQ0VPRgorLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorLQorLSMKKy0jIENPTkZJR19DT01NQU5EUyBzZWN0aW9uLgorLSMKKy1mb3IgYWNfZmlsZSBpbiA6ICRDT05GSUdfQ09NTUFORFM7IGRvIHRlc3QgIngkYWNfZmlsZSIgPSB4OiAmJiBjb250aW51ZQorLSAgYWNfZGVzdD1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AKKy0gIGFjX3NvdXJjZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKy0gIGFjX2Rpcj1gKGRpcm5hbWUgIiRhY19kZXN0IikgMj4vZGV2L251bGwgfHwKKy0kYXNfZXhwciBYIiRhY19kZXN0IiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorLQkgWCIkYWNfZGVzdCIgOiAnWFwoLy9cKVteL10nIFx8IFwKKy0JIFgiJGFjX2Rlc3QiIDogJ1hcKC8vXCkkJyBcfCBcCistCSBYIiRhY19kZXN0IiA6ICdYXCgvXCknIFx8IFwKKy0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorLWVjaG8gWCIkYWNfZGVzdCIgfAorLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKy0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CistICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKy0gIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CistICAJICBzLy4qLy4vOyBxJ2AKKy0gIHsgaWYgJGFzX21rZGlyX3A7IHRoZW4KKy0gICAgbWtkaXIgLXAgIiRhY19kaXIiCistICBlbHNlCistICAgIGFzX2Rpcj0iJGFjX2RpciIKKy0gICAgYXNfZGlycz0KKy0gICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KKy0gICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgorLSAgICAgIGFzX2Rpcj1gKGRpcm5hbWUgIiRhc19kaXIiKSAyPi9kZXYvbnVsbCB8fAorLSRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKy0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKy0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKy0JIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCistCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKy1lY2hvIFgiJGFzX2RpciIgfAorLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKy0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CistICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKy0gIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CistICAJICBzLy4qLy4vOyBxJ2AKKy0gICAgZG9uZQorLSAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycworLSAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mNQorLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IFwiJGFjX2RpclwiIiA+JjI7fQorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorK3MmQGNvbmZpZ3VyZV9pbnB1dEAmJGNvbmZpZ3VyZV9pbnB1dCY7dCB0CisrcyZAdG9wX2J1aWxkZGlyQCYkYWNfdG9wX2J1aWxkZGlyX3N1YiY7dCB0CisrcyZAc3JjZGlyQCYkYWNfc3JjZGlyJjt0IHQKKytzJkBhYnNfc3JjZGlyQCYkYWNfYWJzX3NyY2RpciY7dCB0CisrcyZAdG9wX3NyY2RpckAmJGFjX3RvcF9zcmNkaXImO3QgdAorK3MmQGFic190b3Bfc3JjZGlyQCYkYWNfYWJzX3RvcF9zcmNkaXImO3QgdAorK3MmQGJ1aWxkZGlyQCYkYWNfYnVpbGRkaXImO3QgdAorK3MmQGFic19idWlsZGRpckAmJGFjX2Fic19idWlsZGRpciY7dCB0CisrcyZAYWJzX3RvcF9idWlsZGRpckAmJGFjX2Fic190b3BfYnVpbGRkaXImO3QgdAorK3MmQElOU1RBTExAJiRhY19JTlNUQUxMJjt0IHQKKyskYWNfZGF0YXJvb3RkaXJfaGFjaworKyIgJGFjX2ZpbGVfaW5wdXRzIHwgc2VkIC1mICIkdG1wL3N1YnMtMS5zZWQiIHwgc2VkIC1mICIkdG1wL3N1YnMtMi5zZWQiID4kdG1wL291dAorKworK3Rlc3QgLXogIiRhY19kYXRhcm9vdGRpcl9oYWNrJGFjX2RhdGFyb290ZGlyX3NlZW4iICYmCisrICB7IGFjX291dD1gc2VkIC1uICcvXCR7ZGF0YXJvb3RkaXJ9L3AnICIkdG1wL291dCJgOyB0ZXN0IC1uICIkYWNfb3V0IjsgfSAmJgorKyAgeyBhY19vdXQ9YHNlZCAtbiAnL15bCSBdKmRhdGFyb290ZGlyWwkgXSo6Kj0vcCcgIiR0bXAvb3V0ImA7IHRlc3QgLXogIiRhY19vdXQiOyB9ICYmCisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgXGBkYXRhcm9vdGRpcicKKyt3aGljaCBzZWVtcyB0byBiZSB1bmRlZmluZWQuICBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQuIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJworK3doaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZC4iID4mMjt9CisgCistICBhY19idWlsZGRpcj0uCistCistaWYgdGVzdCAiJGFjX2RpciIgIT0gLjsgdGhlbgorLSAgYWNfZGlyX3N1ZmZpeD0vYGVjaG8gIiRhY19kaXIiIHwgc2VkICdzLF5cLltcXC9dLCwnYAorLSAgIyBBICIuLi8iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKy0gIGFjX3RvcF9idWlsZGRpcj1gZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzLC9bXlxcL10qLC4uLyxnJ2AKKy1lbHNlCistICBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXI9CistZmkKKysgIHJtIC1mICIkdG1wL3N0ZGluIgorKyAgY2FzZSAkYWNfZmlsZSBpbgorKyAgLSkgY2F0ICIkdG1wL291dCI7IHJtIC1mICIkdG1wL291dCI7OworKyAgKikgcm0gLWYgIiRhY19maWxlIjsgbXYgIiR0bXAvb3V0IiAkYWNfZmlsZTs7CisrICBlc2FjCisrIDs7CisgCistY2FzZSAkc3JjZGlyIGluCistICAuKSAgIyBObyAtLXNyY2RpciBvcHRpb24uICBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCistICAgIGFjX3NyY2Rpcj0uCistICAgIGlmIHRlc3QgLXogIiRhY190b3BfYnVpbGRkaXIiOyB0aGVuCistICAgICAgIGFjX3RvcF9zcmNkaXI9LgorLSAgICBlbHNlCistICAgICAgIGFjX3RvcF9zcmNkaXI9YGVjaG8gJGFjX3RvcF9idWlsZGRpciB8IHNlZCAncywvJCwsJ2AKKy0gICAgZmkgOzsKKy0gIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgcGF0aC4KKy0gICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKy0gICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7CistICAqKSAjIFJlbGF0aXZlIHBhdGguCistICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciRhY19kaXJfc3VmZml4CistICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIgOzsKKy1lc2FjCisgCistIyBEbyBub3QgdXNlIGBjZCBmb28gJiYgcHdkYCB0byBjb21wdXRlIGFic29sdXRlIHBhdGhzLCBiZWNhdXNlCistIyB0aGUgZGlyZWN0b3JpZXMgbWF5IG5vdCBleGlzdC4KKy1jYXNlIGBwd2RgIGluCistLikgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7CistKikKKy0gIGNhc2UgIiRhY19kaXIiIGluCistICAuKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGA7OworLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKKy0gICopIGFjX2Fic19idWlsZGRpcj1gcHdkYC8iJGFjX2RpciI7OworLSAgZXNhYzs7CistZXNhYworLWNhc2UgJGFjX2Fic19idWlsZGRpciBpbgorLS4pIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7CistKikKKy0gIGNhc2UgJHthY190b3BfYnVpbGRkaXJ9LiBpbgorLSAgLikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKy0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKKy0gICopIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpci8ke2FjX3RvcF9idWlsZGRpcn0uOzsKKy0gIGVzYWM7OworLWVzYWMKKy1jYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKy0uKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OworLSopCistICBjYXNlICRhY19zcmNkaXIgaW4KKy0gIC4pIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7CistICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7CistICAqKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3NyY2Rpcjs7CistICBlc2FjOzsKKy1lc2FjCistY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCistLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OworLSopCistICBjYXNlICRhY190b3Bfc3JjZGlyIGluCistICAuKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKy0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OworLSAgKikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfdG9wX3NyY2Rpcjs7CistICBlc2FjOzsKKy1lc2FjCisrICA6QykgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGV4ZWN1dGluZyAkYWNfZmlsZSBjb21tYW5kcyIgPiY1CisrZWNobyAiJGFzX21lOiBleGVjdXRpbmcgJGFjX2ZpbGUgY29tbWFuZHMiID4mNjt9CisrIDs7CisrICBlc2FjCisgCisgCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBleGVjdXRpbmcgJGFjX2Rlc3QgY29tbWFuZHMiID4mNQorLWVjaG8gIiRhc19tZTogZXhlY3V0aW5nICRhY19kZXN0IGNvbW1hbmRzIiA+JjY7fQorLSAgY2FzZSAkYWNfZGVzdCBpbgorLSAgICBkZXBmaWxlcyApIHRlc3QgeCIkQU1ERVBfVFJVRSIgIT0geCIiIHx8IGZvciBtZiBpbiAkQ09ORklHX0ZJTEVTOyBkbworKyAgY2FzZSAkYWNfZmlsZSRhY19tb2RlIGluCisrICAgICJkZXBmaWxlcyI6QykgdGVzdCB4IiRBTURFUF9UUlVFIiAhPSB4IiIgfHwgZm9yIG1mIGluICRDT05GSUdfRklMRVM7IGRvCisgICAjIFN0cmlwIE1GIHNvIHdlIGVuZCB1cCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgorICAgbWY9YGVjaG8gIiRtZiIgfCBzZWQgLWUgJ3MvOi4qJC8vJ2AKKyAgICMgQ2hlY2sgd2hldGhlciB0aGlzIGlzIGFuIEF1dG9tYWtlIGdlbmVyYXRlZCBNYWtlZmlsZSBvciBub3QuCitAQCAtMTMwMDQsMTggKzE0MDE5LDI5IEBACisgICAjIGVhY2ggTWFrZWZpbGUuaW4gYW5kIGFkZCBhIG5ldyBsaW5lIG9uIHRvcCBvZiBlYWNoIGZpbGUgdG8gc2F5IHNvLgorICAgIyBTbyBsZXQncyBncmVwIHdob2xlIGZpbGUuCisgICBpZiBncmVwICdeIy4qZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlJyAkbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorLSAgICBkaXJwYXJ0PWAoZGlybmFtZSAiJG1mIikgMj4vZGV2L251bGwgfHwKKysgICAgZGlycGFydD1gJGFzX2Rpcm5hbWUgLS0gIiRtZiIgfHwKKyAkYXNfZXhwciBYIiRtZiIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKyAJIFgiJG1mIiA6ICdYXCgvL1wpW14vXScgXHwgXAorIAkgWCIkbWYiIDogJ1hcKC8vXCkkJyBcfCBcCistCSBYIiRtZiIgOiAnWFwoL1wpJyBcfCBcCistCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKysJIFgiJG1mIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyBlY2hvIFgiJG1mIiB8CistICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorLSAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKy0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKy0gIAkgIHMvLiovLi87IHEnYAorKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXC9cKSQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cKS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICBzLy4qLy4vOyBxJ2AKKyAgIGVsc2UKKyAgICAgY29udGludWUKKyAgIGZpCitAQCAtMTMwMzcsNDkgKzE0MDYzLDc2IEBACisgICAgICAgIHNlZCAtZSAncy9cJChERVBESVIpLyciJERFUERJUiInL2cnIC1lICdzL1wkVS8nIiRVIicvZydgOyBkbworICAgICAjIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cy4KKyAgICAgdGVzdCAtZiAiJGRpcnBhcnQvJGZpbGUiICYmIGNvbnRpbnVlCistICAgIGZkaXI9YChkaXJuYW1lICIkZmlsZSIpIDI+L2Rldi9udWxsIHx8CisrICAgIGZkaXI9YCRhc19kaXJuYW1lIC0tICIkZmlsZSIgfHwKKyAkYXNfZXhwciBYIiRmaWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorIAkgWCIkZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKyAJIFgiJGZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCistCSBYIiRmaWxlIiA6ICdYXCgvXCknIFx8IFwKKy0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorKwkgWCIkZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CisgZWNobyBYIiRmaWxlIiB8CistICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorLSAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKy0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKy0gIAkgIHMvLiovLi87IHEnYAorLSAgICB7IGlmICRhc19ta2Rpcl9wOyB0aGVuCistICAgIG1rZGlyIC1wICRkaXJwYXJ0LyRmZGlyCistICBlbHNlCistICAgIGFzX2Rpcj0kZGlycGFydC8kZmRpcgorKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXC9cKSQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cKS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICBzLy4qLy4vOyBxJ2AKKysgICAgeyBhc19kaXI9JGRpcnBhcnQvJGZkaXIKKysgIGNhc2UgJGFzX2RpciBpbiAjKAorKyAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OworKyAgZXNhYworKyAgdGVzdCAtZCAiJGFzX2RpciIgfHwgeyAkYXNfbWtkaXJfcCAmJiBta2RpciAtcCAiJGFzX2RpciI7IH0gfHwgeworICAgICBhc19kaXJzPQorLSAgICB3aGlsZSB0ZXN0ICEgLWQgIiRhc19kaXIiOyBkbworLSAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCistICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8CisrICAgIHdoaWxlIDo7IGRvCisrICAgICAgY2FzZSAkYXNfZGlyIGluICMoCisrICAgICAgKlwnKikgYXNfcWRpcj1gZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjKAorKyAgICAgICopIGFzX3FkaXI9JGFzX2Rpcjs7CisrICAgICAgZXNhYworKyAgICAgIGFzX2RpcnM9IickYXNfcWRpcicgJGFzX2RpcnMiCisrICAgICAgYXNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX2RpciIgfHwKKyAkYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisgCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisgCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCistCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CisrCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorIGVjaG8gWCIkYXNfZGlyIiB8CistICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorLSAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKy0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKy0gIAkgIHMvLiovLi87IHEnYAorKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXC9cKSQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cKS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICBzLy4qLy4vOyBxJ2AKKysgICAgICB0ZXN0IC1kICIkYXNfZGlyIiAmJiBicmVhaworICAgICBkb25lCistICAgIHRlc3QgISAtbiAiJGFzX2RpcnMiIHx8IG1rZGlyICRhc19kaXJzCistICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkZGlycGFydC8kZmRpciIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGRpcnBhcnQvJGZkaXIiID4mMjt9CisrICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKysgIH0gfHwgdGVzdCAtZCAiJGFzX2RpciIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIgPiYyO30KKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKy0KKyAgICAgIyBlY2hvICJjcmVhdGluZyAkZGlycGFydC8kZmlsZSIKKyAgICAgZWNobyAnIyBkdW1teScgPiAiJGRpcnBhcnQvJGZpbGUiCisgICBkb25lCisgZG9uZQorICA7OworLSAgICBsaWJ0b29sICkKKysgICAgImxpYnRvb2wiOkMpCisgCisgICAgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyAgICAgIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCitAQCAtMTM3MjAsMTEgKzE0NzczLDEwIEBACisgICBjaG1vZCAreCAiJG9maWxlIgorIAorICA7OworKworICAgZXNhYworLWRvbmUKKy1fQUNFT0YKKytkb25lICMgZm9yIGFjX3RhZworIAorLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorIAorIHsgKGV4aXQgMCk7IGV4aXQgMDsgfQorIF9BQ0VPRgorQEAgLTEzNzU0LDcgKzE0ODA2LDcgQEAKKyBmaQorIAorICMKKy0jIENPTkZJR19TVUJESVJTIHNlY3Rpb24sIGFzIGZpeGVkIGluIGNvbmZzdWJkaXIubTQuCisrIyBDT05GSUdfU1VCRElSUyBzZWN0aW9uLgorICMKKyBpZiB0ZXN0ICIkbm9fcmVjdXJzaW9uIiAhPSB5ZXM7IHRoZW4KKyAKK0BAIC0xMzgwMSw3ICsxNDg1MywxMiBAQAorICAgY2FzZSAkYWNfYXJnIGluCisgICAqXCcqKSBhY19hcmc9YGVjaG8gIiRhY19hcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICBlc2FjCistICBhY19zdWJfY29uZmlndXJlX2FyZ3M9IiRhY19hcmcgJGFjX3N1Yl9jb25maWd1cmVfYXJncyIKKysgIGFjX3N1Yl9jb25maWd1cmVfYXJncz0iJyRhY19hcmcnICRhY19zdWJfY29uZmlndXJlX2FyZ3MiCisrCisrICAjIFBhc3MgLS1zaWxlbnQKKysgIGlmIHRlc3QgIiRzaWxlbnQiID0geWVzOyB0aGVuCisrICAgIGFjX3N1Yl9jb25maWd1cmVfYXJncz0iLS1zaWxlbnQgJGFjX3N1Yl9jb25maWd1cmVfYXJncyIKKysgIGZpCisgCisgICBhY19wb3BkaXI9YHB3ZGAKKyAgIGZvciBhY19kaXIgaW4gOiAkc3ViZGlyczsgZG8gdGVzdCAieCRhY19kaXIiID0geDogJiYgY29udGludWUKK0BAIC0xMzgxMCw5NyArMTQ4NjcsODMgQEAKKyAgICAgIyBwYXJ0cyBvZiBhIGxhcmdlIHNvdXJjZSB0cmVlIGFyZSBwcmVzZW50LgorICAgICB0ZXN0IC1kICIkc3JjZGlyLyRhY19kaXIiIHx8IGNvbnRpbnVlCisgCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNvbmZpZ3VyaW5nIGluICRhY19kaXIiID4mNQorLWVjaG8gIiRhc19tZTogY29uZmlndXJpbmcgaW4gJGFjX2RpciIgPiY2O30KKy0gICAgeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgorLSAgICBta2RpciAtcCAiJGFjX2RpciIKKy0gIGVsc2UKKy0gICAgYXNfZGlyPSIkYWNfZGlyIgorKyAgICBhY19tc2c9Ij09PSBjb25maWd1cmluZyBpbiAkYWNfZGlyIChgcHdkYC8kYWNfZGlyKSIKKysgICAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRhY19tc2ciID4mNQorKyAgICBlY2hvICIkYWNfbXNnIiA+JjYKKysgICAgeyBhc19kaXI9IiRhY19kaXIiCisrICBjYXNlICRhc19kaXIgaW4gIygKKysgIC0qKSBhc19kaXI9Li8kYXNfZGlyOzsKKysgIGVzYWMKKysgIHRlc3QgLWQgIiRhc19kaXIiIHx8IHsgJGFzX21rZGlyX3AgJiYgbWtkaXIgLXAgIiRhc19kaXIiOyB9IHx8IHsKKyAgICAgYXNfZGlycz0KKy0gICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KKy0gICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgorLSAgICAgIGFzX2Rpcj1gKGRpcm5hbWUgIiRhc19kaXIiKSAyPi9kZXYvbnVsbCB8fAorKyAgICB3aGlsZSA6OyBkbworKyAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAorKyAgICAgICpcJyopIGFzX3FkaXI9YGVjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIygKKysgICAgICAqKSBhc19xZGlyPSRhc19kaXI7OworKyAgICAgIGVzYWMKKysgICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgorKyAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8CisgJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorIAkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorIAkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorLQkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKKy0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyBlY2hvIFgiJGFzX2RpciIgfAorLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKy0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CistICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKy0gIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CistICAJICBzLy4qLy4vOyBxJ2AKKysgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXC9cKVteL10uKi97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXChcL1wvXCkkL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXCkuKi97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgcy8uKi8uLzsgcSdgCisrICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKKyAgICAgZG9uZQorLSAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycworLSAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mNQorLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IFwiJGFjX2RpclwiIiA+JjI7fQorKyAgICB0ZXN0IC16ICIkYXNfZGlycyIgfHwgZXZhbCAibWtkaXIgJGFzX2RpcnMiCisrICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiID4mMjt9CisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CistCisgICAgIGFjX2J1aWxkZGlyPS4KKyAKKy1pZiB0ZXN0ICIkYWNfZGlyIiAhPSAuOyB0aGVuCisrY2FzZSAiJGFjX2RpciIgaW4KKysuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKysqKQorICAgYWNfZGlyX3N1ZmZpeD0vYGVjaG8gIiRhY19kaXIiIHwgc2VkICdzLF5cLltcXC9dLCwnYAorLSAgIyBBICIuLi8iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKy0gIGFjX3RvcF9idWlsZGRpcj1gZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzLC9bXlxcL10qLC4uLyxnJ2AKKy1lbHNlCistICBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXI9CistZmkKKysgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKysgIGFjX3RvcF9idWlsZGRpcl9zdWI9YGVjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAncywvW15cXC9dKiwvLi4sZztzLC8sLCdgCisrICBjYXNlICRhY190b3BfYnVpbGRkaXJfc3ViIGluCisrICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisrICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1Yi8gOzsKKysgIGVzYWMgOzsKKytlc2FjCisrYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkCisrYWNfYWJzX2J1aWxkZGlyPSRhY19wd2QkYWNfZGlyX3N1ZmZpeAorKyMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6CisrYWNfdG9wX2J1aWxkZGlyPSRhY190b3BfYnVpbGRfcHJlZml4CisgCisgY2FzZSAkc3JjZGlyIGluCistICAuKSAgIyBObyAtLXNyY2RpciBvcHRpb24uICBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisrICAuKSAgIyBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisgICAgIGFjX3NyY2Rpcj0uCistICAgIGlmIHRlc3QgLXogIiRhY190b3BfYnVpbGRkaXIiOyB0aGVuCistICAgICAgIGFjX3RvcF9zcmNkaXI9LgorLSAgICBlbHNlCistICAgICAgIGFjX3RvcF9zcmNkaXI9YGVjaG8gJGFjX3RvcF9idWlsZGRpciB8IHNlZCAncywvJCwsJ2AKKy0gICAgZmkgOzsKKy0gIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgcGF0aC4KKysgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyX3N1YgorKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkIDs7CisrICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuCisgICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7CistICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpciA7OworLSAgKikgIyBSZWxhdGl2ZSBwYXRoLgorLSAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorLSAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXIkc3JjZGlyIDs7CistZXNhYworLQorLSMgRG8gbm90IHVzZSBgY2QgZm9vICYmIHB3ZGAgdG8gY29tcHV0ZSBhYnNvbHV0ZSBwYXRocywgYmVjYXVzZQorLSMgdGhlIGRpcmVjdG9yaWVzIG1heSBub3QgZXhpc3QuCistY2FzZSBgcHdkYCBpbgorLS4pIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OworLSopCistICBjYXNlICIkYWNfZGlyIiBpbgorLSAgLikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgOzsKKy0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7CistICAqKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGAvIiRhY19kaXIiOzsKKy0gIGVzYWM7OworLWVzYWMKKy1jYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKy0uKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OworLSopCistICBjYXNlICR7YWNfdG9wX2J1aWxkZGlyfS4gaW4KKy0gIC4pIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpcjs7CistICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7CistICAqKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXIvJHthY190b3BfYnVpbGRkaXJ9Ljs7CistICBlc2FjOzsKKy1lc2FjCistY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCistLikgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKKy0qKQorLSAgY2FzZSAkYWNfc3JjZGlyIGluCistICAuKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OworLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OworLSAgKikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY19zcmNkaXI7OworLSAgZXNhYzs7CistZXNhYworLWNhc2UgJGFjX2Fic19idWlsZGRpciBpbgorLS4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKKy0qKQorLSAgY2FzZSAkYWNfdG9wX3NyY2RpciBpbgorLSAgLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7CistICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKKy0gICopIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3RvcF9zcmNkaXI7OworLSAgZXNhYzs7CisrICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpcgorKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7CisrICAqKSAjIFJlbGF0aXZlIG5hbWUuCisrICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpcgorKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkLyRzcmNkaXIgOzsKKyBlc2FjCisrYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAorIAorIAorICAgICBjZCAiJGFjX2RpciIKK0BAIC0xMzkyNCw4ICsxNDk2Nyw4IEBACisgICAgICAgIyBNYWtlIHRoZSBjYWNoZSBmaWxlIG5hbWUgY29ycmVjdCByZWxhdGl2ZSB0byB0aGUgc3ViZGlyZWN0b3J5LgorICAgICAgIGNhc2UgJGNhY2hlX2ZpbGUgaW4KKyAgICAgICBbXFwvXSogfCA/OltcXC9dKiApIGFjX3N1Yl9jYWNoZV9maWxlPSRjYWNoZV9maWxlIDs7CistICAgICAgKikgIyBSZWxhdGl2ZSBwYXRoLgorLQlhY19zdWJfY2FjaGVfZmlsZT0kYWNfdG9wX2J1aWxkZGlyJGNhY2hlX2ZpbGUgOzsKKysgICAgICAqKSAjIFJlbGF0aXZlIG5hbWUuCisrCWFjX3N1Yl9jYWNoZV9maWxlPSRhY190b3BfYnVpbGRfcHJlZml4JGNhY2hlX2ZpbGUgOzsKKyAgICAgICBlc2FjCisgCisgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcnVubmluZyAkU0hFTEwgJGFjX3N1Yl9jb25maWd1cmUgJGFjX3N1Yl9jb25maWd1cmVfYXJncyAtLWNhY2hlLWZpbGU9JGFjX3N1Yl9jYWNoZV9maWxlIC0tc3JjZGlyPSRhY19zcmNkaXIiID4mNQorZGlmZiAtTmF1ciBuZXdsaWItMS4xNy4wL25ld2xpYi9saWJjL21hY2hpbmUvY29uZmlndXJlLmluIG5ld2xpYi0xLjE3LjAtbmV3L25ld2xpYi9saWJjL21hY2hpbmUvY29uZmlndXJlLmluCistLS0gbmV3bGliLTEuMTcuMC9uZXdsaWIvbGliYy9tYWNoaW5lL2NvbmZpZ3VyZS5pbgkyMDA4LTEyLTExIDIxOjA1OjM4LjAwMDAwMDAwMCArMDEwMAorKysrIG5ld2xpYi0xLjE3LjAtbmV3L25ld2xpYi9saWJjL21hY2hpbmUvY29uZmlndXJlLmluCTIwMDktMDUtMjIgMDk6NTc6NTAuMDAwMDAwMDAwICswMjAwCitAQCAtMjQsNiArMjQsNyBAQAorICAgY2FzZSAke21hY2hpbmVfZGlyfSBpbgorIAlhMjlrKSBBQ19DT05GSUdfU1VCRElSUyhhMjlrKSA7OworIAlhcm0pIEFDX0NPTkZJR19TVUJESVJTKGFybSkgOzsKKysJYXZyMzIpIEFDX0NPTkZJR19TVUJESVJTKGF2cjMyKSA7OworIAliZmluKSBBQ19DT05GSUdfU1VCRElSUyhiZmluKSA7OworIAljcmlzKSBBQ19DT05GSUdfU1VCRElSUyhjcmlzKSA7OworIAljcngpIEFDX0NPTkZJR19TVUJESVJTKGNyeCkgOzsKK2RpZmYgLU5hdXIgbmV3bGliLTEuMTcuMC9uZXdsaWIvbGliYy9zeXMvYXZyMzIvYWNsb2NhbC5tNCBuZXdsaWItMS4xNy4wLW5ldy9uZXdsaWIvbGliYy9zeXMvYXZyMzIvYWNsb2NhbC5tNAorLS0tIG5ld2xpYi0xLjE3LjAvbmV3bGliL2xpYmMvc3lzL2F2cjMyL2FjbG9jYWwubTQJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBuZXdsaWItMS4xNy4wLW5ldy9uZXdsaWIvbGliYy9zeXMvYXZyMzIvYWNsb2NhbC5tNAkyMDA5LTA1LTIyIDA5OjU3OjUwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwzNjYgQEAKKytkbmwgYWNsb2NhbC5tNCBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBhY2xvY2FsIDEuNC1wNgorKworK2RubCBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUtOCwgMTk5OSwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKytkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKytkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorKworK2RubCBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKytkbmwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKytkbmwgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorK2RubCBQQVJUSUNVTEFSIFBVUlBPU0UuCisrCisrZG5sIFRoaXMgcHJvdmlkZXMgY29uZmlndXJlIGRlZmluaXRpb25zIHVzZWQgYnkgYWxsIHRoZSBuZXdsaWIKKytkbmwgY29uZmlndXJlLmluIGZpbGVzLgorKworK2RubCBCYXNpYyBuZXdsaWIgY29uZmlndXJ5LiAgVGhpcyBjYWxscyBiYXNpYyBpbnRyb2R1Y3Rvcnkgc3R1ZmYsCisrZG5sIGluY2x1ZGluZyBBTV9JTklUX0FVVE9NQUtFIGFuZCBBQ19DQU5PTklDQUxfSE9TVC4gIEl0IGFsc28gcnVucworK2RubCBjb25maWd1cmUuaG9zdC4gIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSByZWxhdGl2ZSBwYXRoIHRvIHRoZSB0b3AKKytkbmwgbmV3bGliIGRpcmVjdG9yeS4KKysKKytBQ19ERUZVTihORVdMSUJfQ09ORklHVVJFLAorK1sKKytkbmwgRGVmYXVsdCB0byAtLWVuYWJsZS1tdWx0aWxpYgorK0FDX0FSR19FTkFCTEUobXVsdGlsaWIsCisrWyAgLS1lbmFibGUtbXVsdGlsaWIgICAgICAgICBidWlsZCBtYW55IGxpYnJhcnkgdmVyc2lvbnMgKGRlZmF1bHQpXSwKKytbY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgeWVzKSBtdWx0aWxpYj15ZXMgOzsKKysgIG5vKSAgbXVsdGlsaWI9bm8gOzsKKysgICopICAgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIG11bHRpbGliIG9wdGlvbikgOzsKKysgZXNhY10sIFttdWx0aWxpYj15ZXNdKWRubAorKworK2RubCBTdXBwb3J0IC0tZW5hYmxlLXRhcmdldC1vcHRzcGFjZQorK0FDX0FSR19FTkFCTEUodGFyZ2V0LW9wdHNwYWNlLAorK1sgIC0tZW5hYmxlLXRhcmdldC1vcHRzcGFjZSAgb3B0aW1pemUgZm9yIHNwYWNlXSwKKytbY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgeWVzKSB0YXJnZXRfb3B0c3BhY2U9eWVzIDs7CisrICBubykgIHRhcmdldF9vcHRzcGFjZT1ubyA7OworKyAgKikgICBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgdGFyZ2V0LW9wdHNwYWNlIG9wdGlvbikgOzsKKysgZXNhY10sIFt0YXJnZXRfb3B0c3BhY2U9XSlkbmwKKysKKytkbmwgU3VwcG9ydCAtLWVuYWJsZS1tYWxsb2MtZGVidWdnaW5nIC0gY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIGZvciBDeWd3aW4KKytBQ19BUkdfRU5BQkxFKG1hbGxvYy1kZWJ1Z2dpbmcsCisrWyAgLS1lbmFibGUtbWFsbG9jLWRlYnVnZ2luZyBpbmRpY2F0ZSBtYWxsb2MgZGVidWdnaW5nIHJlcXVlc3RlZF0sCisrW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIHllcykgbWFsbG9jX2RlYnVnZ2luZz15ZXMgOzsKKysgIG5vKSAgbWFsbG9jX2RlYnVnZ2luZz1ubyA7OworKyAgKikgICBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgbWFsbG9jLWRlYnVnZ2luZyBvcHRpb24pIDs7CisrIGVzYWNdLCBbbWFsbG9jX2RlYnVnZ2luZz1dKWRubAorKworK2RubCBTdXBwb3J0IC0tZW5hYmxlLW5ld2xpYi1tdWx0aXRocmVhZAorK0FDX0FSR19FTkFCTEUobmV3bGliLW11bHRpdGhyZWFkLAorK1sgIC0tZW5hYmxlLW5ld2xpYi1tdWx0aXRocmVhZCAgICAgICAgZW5hYmxlIHN1cHBvcnQgZm9yIG11bHRpcGxlIHRocmVhZHNdLAorK1tjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICB5ZXMpIG5ld2xpYl9tdWx0aXRocmVhZD15ZXMgOzsKKysgIG5vKSAgbmV3bGliX211bHRpdGhyZWFkPW5vIDs7CisrICAqKSAgIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciBuZXdsaWItbXVsdGl0aHJlYWQgb3B0aW9uKSA7OworKyBlc2FjXSwgW25ld2xpYl9tdWx0aXRocmVhZD15ZXNdKWRubAorKworK2RubCBTdXBwb3J0IC0tZW5hYmxlLW5ld2xpYi1pY29udgorK0FDX0FSR19FTkFCTEUobmV3bGliLWljb252LAorK1sgIC0tZW5hYmxlLW5ld2xpYi1pY29udiAgICAgZW5hYmxlIGljb252IGxpYnJhcnkgc3VwcG9ydF0sCisrW2lmIHRlc3QgIiR7bmV3bGliX2ljb252K3NldH0iICE9IHNldDsgdGhlbgorKyAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgICAgIHllcykgbmV3bGliX2ljb252PXllcyA7OworKyAgICAgbm8pICBuZXdsaWJfaWNvbnY9bm8gOzsKKysgICAgICopICAgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIG5ld2xpYi1pY29udiBvcHRpb24pIDs7CisrICAgZXNhYworKyBmaV0sIFtuZXdsaWJfaWNvbnY9JHtuZXdsaWJfaWNvbnZ9XSlkbmwKKysKKytkbmwgU3VwcG9ydCAtLWVuYWJsZS1uZXdsaWItZWxpeC1sZXZlbAorK0FDX0FSR19FTkFCTEUobmV3bGliLWVsaXgtbGV2ZWwsCisrWyAgLS1lbmFibGUtbmV3bGliLWVsaXgtbGV2ZWwgICAgICAgICBzdXBwbHkgZGVzaXJlZCBlbGl4IGxpYnJhcnkgbGV2ZWwgKDEtNCldLAorK1tjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICAwKSAgIG5ld2xpYl9lbGl4X2xldmVsPTAgOzsKKysgIDEpICAgbmV3bGliX2VsaXhfbGV2ZWw9MSA7OworKyAgMikgICBuZXdsaWJfZWxpeF9sZXZlbD0yIDs7CisrICAzKSAgIG5ld2xpYl9lbGl4X2xldmVsPTMgOzsKKysgIDQpICAgbmV3bGliX2VsaXhfbGV2ZWw9NCA7OworKyAgKikgICBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgbmV3bGliLWVsaXgtbGV2ZWwgb3B0aW9uKSA7OworKyBlc2FjXSwgW25ld2xpYl9lbGl4X2xldmVsPTBdKWRubAorKworK2RubCBTdXBwb3J0IC0tZGlzYWJsZS1uZXdsaWItaW8tZmxvYXQKKytBQ19BUkdfRU5BQkxFKG5ld2xpYi1pby1mbG9hdCwKKytbICAtLWRpc2FibGUtbmV3bGliLWlvLWZsb2F0IGRpc2FibGUgcHJpbnRmL3NjYW5mIGZhbWlseSBmbG9hdCBzdXBwb3J0XSwKKytbY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgeWVzKSBuZXdsaWJfaW9fZmxvYXQ9eWVzIDs7CisrICBubykgIG5ld2xpYl9pb19mbG9hdD1ubyA7OworKyAgKikgICBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgbmV3bGliLWlvLWZsb2F0IG9wdGlvbikgOzsKKysgZXNhY10sIFtuZXdsaWJfaW9fZmxvYXQ9eWVzXSlkbmwKKysKKytkbmwgU3VwcG9ydCAtLWRpc2FibGUtbmV3bGliLXN1cHBsaWVkLXN5c2NhbGxzCisrQUNfQVJHX0VOQUJMRShuZXdsaWItc3VwcGxpZWQtc3lzY2FsbHMsCisrWyAgLS1kaXNhYmxlLW5ld2xpYi1zdXBwbGllZC1zeXNjYWxscyBkaXNhYmxlIG5ld2xpYiBmcm9tIHN1cHBseWluZyBzeXNjYWxsc10sCisrW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIHllcykgbmV3bGliX21heV9zdXBwbHlfc3lzY2FsbHM9eWVzIDs7CisrICBubykgIG5ld2xpYl9tYXlfc3VwcGx5X3N5c2NhbGxzPW5vIDs7CisrICAqKSAgIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciBuZXdsaWItc3VwcGxpZWQtc3lzY2FsbHMgb3B0aW9uKSA7OworKyBlc2FjXSwgW25ld2xpYl9tYXlfc3VwcGx5X3N5c2NhbGxzPXllc10pZG5sCisrCisrQU1fQ09ORElUSU9OQUwoTUFZX1NVUFBMWV9TWVNDQUxMUywgdGVzdCB4WyRde25ld2xpYl9tYXlfc3VwcGx5X3N5c2NhbGxzfSA9IHh5ZXMpCisrCisrZG5sIFdlIG1heSBnZXQgb3RoZXIgb3B0aW9ucyB3aGljaCB3ZSBkb24ndCBkb2N1bWVudDoKKytkbmwgLS13aXRoLXRhcmdldC1zdWJkaXIsIC0td2l0aC1tdWx0aXNyY3RvcCwgLS13aXRoLW11bHRpc3ViZGlyCisrCisrdGVzdCAteiAiWyRde3dpdGhfdGFyZ2V0X3N1YmRpcn0iICYmIHdpdGhfdGFyZ2V0X3N1YmRpcj0uCisrCisraWYgdGVzdCAiWyRde3NyY2Rpcn0iID0gIi4iOyB0aGVuCisrICBpZiB0ZXN0ICJbJF17d2l0aF90YXJnZXRfc3ViZGlyfSIgIT0gIi4iOyB0aGVuCisrICAgIG5ld2xpYl9iYXNlZGlyPSJbJF17c3JjZGlyfS9bJF17d2l0aF9tdWx0aXNyY3RvcH0uLi8kMSIKKysgIGVsc2UKKysgICAgbmV3bGliX2Jhc2VkaXI9IlskXXtzcmNkaXJ9L1skXXt3aXRoX211bHRpc3JjdG9wfSQxIgorKyAgZmkKKytlbHNlCisrICBuZXdsaWJfYmFzZWRpcj0iWyRde3NyY2Rpcn0vJDEiCisrZmkKKytBQ19TVUJTVChuZXdsaWJfYmFzZWRpcikKKysKKytBQ19DQU5PTklDQUxfU1lTVEVNCisrCisrQU1fSU5JVF9BVVRPTUFLRShuZXdsaWIsIDEuMTQuMC5hdG1lbC4xLjAuMSkKKysKKysjIEZJWE1FOiBXZSB0ZW1wb3JhcmlseSBkZWZpbmUgb3VyIG93biB2ZXJzaW9uIG9mIEFDX1BST0dfQ0MuICBUaGlzIGlzCisrIyBjb3BpZWQgZnJvbSBhdXRvY29uZiAyLjEyLCBidXQgZG9lcyBub3QgY2FsbCBBQ19QUk9HX0NDX1dPUktTLiAgV2UKKysjIGFyZSBwcm9iYWJseSB1c2luZyBhIGNyb3NzIGNvbXBpbGVyLCB3aGljaCB3aWxsIG5vdCBiZSBhYmxlIHRvIGZ1bGx5CisrIyBsaW5rIGFuIGV4ZWN1dGFibGUuICBUaGlzIHNob3VsZCByZWFsbHkgYmUgZml4ZWQgaW4gYXV0b2NvbmYKKysjIGl0c2VsZi4KKysKKytBQ19ERUZVTihMSUJfQUNfUFJPR19DQywKKytbQUNfQkVGT1JFKFskMF0sIFtBQ19QUk9HX0NQUF0pZG5sCisrQUNfQ0hFQ0tfUFJPRyhDQywgZ2NjLCBnY2MpCisraWYgdGVzdCAteiAiJENDIjsgdGhlbgorKyAgQUNfQ0hFQ0tfUFJPRyhDQywgY2MsIGNjLCAsICwgL3Vzci91Y2IvY2MpCisrICB0ZXN0IC16ICIkQ0MiICYmIEFDX01TR19FUlJPUihbbm8gYWNjZXB0YWJsZSBjYyBmb3VuZCBpbiBcJFBBVEhdKQorK2ZpCisrCisrQUNfUFJPR19DQ19HTlUKKysKKytpZiB0ZXN0ICRhY19jdl9wcm9nX2djYyA9IHllczsgdGhlbgorKyAgR0NDPXllcworK2RubCBDaGVjayB3aGV0aGVyIC1nIHdvcmtzLCBldmVuIGlmIENGTEFHUyBpcyBzZXQsIGluIGNhc2UgdGhlIHBhY2thZ2UKKytkbmwgcGxheXMgYXJvdW5kIHdpdGggQ0ZMQUdTIChzdWNoIGFzIHRvIGJ1aWxkIGJvdGggZGVidWdnaW5nIGFuZAorK2RubCBub3JtYWwgdmVyc2lvbnMgb2YgYSBsaWJyYXJ5KSwgdGFzdGVsZXNzIGFzIHRoYXQgaWRlYSBpcy4KKysgIGFjX3Rlc3RfQ0ZMQUdTPSIke0NGTEFHUytzZXR9IgorKyAgYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisrICBDRkxBR1M9CisrICBBQ19QUk9HX0NDX0cKKysgIGlmIHRlc3QgIiRhY190ZXN0X0NGTEFHUyIgPSBzZXQ7IHRoZW4KKysgICAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCisrICBlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY2NfZyA9IHllczsgdGhlbgorKyAgICBDRkxBR1M9Ii1nIC1PMiIKKysgIGVsc2UKKysgICAgQ0ZMQUdTPSItTzIiCisrICBmaQorK2Vsc2UKKysgIEdDQz0KKysgIHRlc3QgIiR7Q0ZMQUdTK3NldH0iID0gc2V0IHx8IENGTEFHUz0iLWciCisrZmkKKytdKQorKworK0xJQl9BQ19QUk9HX0NDCisrCisrQUNfQ0hFQ0tfVE9PTChBUywgYXMpCisrQUNfQ0hFQ0tfVE9PTChBUiwgYXIpCisrQUNfQ0hFQ0tfVE9PTChSQU5MSUIsIHJhbmxpYiwgOikKKysKKytBQ19QUk9HX0lOU1RBTEwKKysKKytBTV9NQUlOVEFJTkVSX01PREUKKysKKysjIFdlIG5lZWQgQUNfRVhFRVhUIHRvIGtlZXAgYXV0b21ha2UgaGFwcHkgaW4gY3lnbnVzIG1vZGUuICBIb3dldmVyLAorKyMgYXQgbGVhc3QgY3VycmVudGx5LCB3ZSBuZXZlciBhY3R1YWxseSBidWlsZCBhIHByb2dyYW0sIHNvIHdlIG5ldmVyCisrIyBuZWVkIHRvIHVzZSAkKEVYRUVYVCkuICBNb3Jlb3ZlciwgdGhlIHRlc3QgZm9yIEVYRUVYVCBub3JtYWxseQorKyMgZmFpbHMsIGJlY2F1c2Ugd2UgYXJlIHByb2JhYmx5IGNvbmZpZ3VyaW5nIHdpdGggYSBjcm9zcyBjb21waWxlcgorKyMgd2hpY2ggY2FuJ3QgY3JlYXRlIGV4ZWN1dGFibGVzLiAgU28gd2UgaW5jbHVkZSBBQ19FWEVFWFQgdG8ga2VlcAorKyMgYXV0b21ha2UgaGFwcHksIGJ1dCB3ZSBkb24ndCBleGVjdXRlIGl0LCBzaW5jZSB3ZSBkb24ndCBjYXJlIGFib3V0CisrIyB0aGUgcmVzdWx0LgorK2lmIGZhbHNlOyB0aGVuCisrICBBQ19FWEVFWFQKKytmaQorKworKy4gWyRde25ld2xpYl9iYXNlZGlyfS9jb25maWd1cmUuaG9zdAorKworK25ld2xpYl9jZmxhZ3M9IlskXXtuZXdsaWJfY2ZsYWdzfSAtZm5vLWJ1aWx0aW4iCisrCisrTkVXTElCX0NGTEFHUz0ke25ld2xpYl9jZmxhZ3N9CisrQUNfU1VCU1QoTkVXTElCX0NGTEFHUykKKysKKytMREZMQUdTPSR7bGRmbGFnc30KKytBQ19TVUJTVChMREZMQUdTKQorKworK0FNX0NPTkRJVElPTkFMKEVMSVhfTEVWRUxfMCwgdGVzdCB4WyRde25ld2xpYl9lbGl4X2xldmVsfSA9IHgwKQorK0FNX0NPTkRJVElPTkFMKEVMSVhfTEVWRUxfMSwgdGVzdCB4WyRde25ld2xpYl9lbGl4X2xldmVsfSA9IHgxKQorK0FNX0NPTkRJVElPTkFMKEVMSVhfTEVWRUxfMiwgdGVzdCB4WyRde25ld2xpYl9lbGl4X2xldmVsfSA9IHgyKQorK0FNX0NPTkRJVElPTkFMKEVMSVhfTEVWRUxfMywgdGVzdCB4WyRde25ld2xpYl9lbGl4X2xldmVsfSA9IHgzKQorK0FNX0NPTkRJVElPTkFMKEVMSVhfTEVWRUxfNCwgdGVzdCB4WyRde25ld2xpYl9lbGl4X2xldmVsfSA9IHg0KQorKworK0FNX0NPTkRJVElPTkFMKFVTRV9MSUJUT09MLCB0ZXN0IHhbJF17dXNlX2xpYnRvb2x9ID0geHllcykKKysKKysjIEhhcmQtY29kZSBPQkpFWFQuICBOb3JtYWxseSBpdCBpcyBzZXQgYnkgQUNfT0JKRVhULCBidXQgd2UKKysjIHVzZSBvZXh0LCB3aGljaCBpcyBzZXQgaW4gY29uZmlndXJlLmhvc3QgYmFzZWQgb24gdGhlIHRhcmdldCBwbGF0Zm9ybS4KKytPQkpFWFQ9JHtvZXh0fQorKworK0FDX1NVQlNUKE9CSkVYVCkKKytBQ19TVUJTVChvZXh0KQorK0FDX1NVQlNUKGFleHQpCisrCisrQUNfU1VCU1QobGlibV9tYWNoaW5lX2RpcikKKytBQ19TVUJTVChtYWNoaW5lX2RpcikKKytBQ19TVUJTVChzeXNfZGlyKQorK10pCisrCisrIyBEbyBhbGwgdGhlIHdvcmsgZm9yIEF1dG9tYWtlLiAgVGhpcyBtYWNybyBhY3R1YWxseSBkb2VzIHRvbyBtdWNoIC0tCisrIyBzb21lIGNoZWNrcyBhcmUgb25seSBuZWVkZWQgaWYgeW91ciBwYWNrYWdlIGRvZXMgY2VydGFpbiB0aGluZ3MuCisrIyBCdXQgdGhpcyBpc24ndCByZWFsbHkgYSBiaWcgZGVhbC4KKysKKysjIHNlcmlhbCAxCisrCisrZG5sIFVzYWdlOgorK2RubCBBTV9JTklUX0FVVE9NQUtFKHBhY2thZ2UsdmVyc2lvbiwgW25vLWRlZmluZV0pCisrCisrQUNfREVGVU4oW0FNX0lOSVRfQVVUT01BS0VdLAorK1tBQ19SRVFVSVJFKFtBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OXSlkbmwKKytBQ19SRVFVSVJFKFtBQ19QUk9HX0lOU1RBTExdKQorK1BBQ0tBR0U9WyQxXQorK0FDX1NVQlNUKFBBQ0tBR0UpCisrVkVSU0lPTj1bJDJdCisrQUNfU1VCU1QoVkVSU0lPTikKKytkbmwgdGVzdCB0byBzZWUgaWYgc3JjZGlyIGFscmVhZHkgY29uZmlndXJlZAorK2lmIHRlc3QgImBjZCAkc3JjZGlyICYmIHB3ZGAiICE9ICJgcHdkYCIgJiYgdGVzdCAtZiAkc3JjZGlyL2NvbmZpZy5zdGF0dXM7IHRoZW4KKysgIEFDX01TR19FUlJPUihbc291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQ7IHJ1biAibWFrZSBkaXN0Y2xlYW4iIHRoZXJlIGZpcnN0XSkKKytmaQorK2lmZWxzZShbJDNdLCwKKytBQ19ERUZJTkVfVU5RVU9URUQoUEFDS0FHRSwgIiRQQUNLQUdFIiwgW05hbWUgb2YgcGFja2FnZV0pCisrQUNfREVGSU5FX1VOUVVPVEVEKFZFUlNJT04sICIkVkVSU0lPTiIsIFtWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlXSkpCisrQUNfUkVRVUlSRShbQU1fU0FOSVRZX0NIRUNLXSkKKytBQ19SRVFVSVJFKFtBQ19BUkdfUFJPR1JBTV0pCisrZG5sIEZJWE1FIFRoaXMgaXMgdHJ1bHkgZ3Jvc3MuCisrbWlzc2luZ19kaXI9YGNkICRhY19hdXhfZGlyICYmIHB3ZGAKKytBTV9NSVNTSU5HX1BST0coQUNMT0NBTCwgYWNsb2NhbC0ke2FtX19hcGlfdmVyc2lvbn0sICRtaXNzaW5nX2RpcikKKytBTV9NSVNTSU5HX1BST0coQVVUT0NPTkYsIGF1dG9jb25mLCAkbWlzc2luZ19kaXIpCisrQU1fTUlTU0lOR19QUk9HKEFVVE9NQUtFLCBhdXRvbWFrZS0ke2FtX19hcGlfdmVyc2lvbn0sICRtaXNzaW5nX2RpcikKKytBTV9NSVNTSU5HX1BST0coQVVUT0hFQURFUiwgYXV0b2hlYWRlciwgJG1pc3NpbmdfZGlyKQorK0FNX01JU1NJTkdfUFJPRyhNQUtFSU5GTywgbWFrZWluZm8sICRtaXNzaW5nX2RpcikKKytBQ19SRVFVSVJFKFtBQ19QUk9HX01BS0VfU0VUXSldKQorKworKyMgQ29weXJpZ2h0IDIwMDIgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKworKyMgQU1fQVVUT01BS0VfVkVSU0lPTihWRVJTSU9OKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgQXV0b21ha2UgWC5ZIHRyYWNlcyB0aGlzIG1hY3JvIHRvIGVuc3VyZSBhY2xvY2FsLm00IGhhcyBiZWVuCisrIyBnZW5lcmF0ZWQgZnJvbSB0aGUgbTQgZmlsZXMgYWNjb21wYW55aW5nIEF1dG9tYWtlIFguWS4KKytBQ19ERUZVTihbQU1fQVVUT01BS0VfVkVSU0lPTl0sW2FtX19hcGlfdmVyc2lvbj0iMS40Il0pCisrCisrIyBBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBDYWxsIEFNX0FVVE9NQUtFX1ZFUlNJT04gc28gaXQgY2FuIGJlIHRyYWNlZC4KKysjIFRoaXMgZnVuY3Rpb24gaXMgQUNfUkVRVUlSRWQgYnkgQUNfSU5JVF9BVVRPTUFLRS4KKytBQ19ERUZVTihbQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTl0sCisrCSBbQU1fQVVUT01BS0VfVkVSU0lPTihbMS40LXA2XSldKQorKworKyMKKysjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lLgorKyMKKysKKytBQ19ERUZVTihbQU1fU0FOSVRZX0NIRUNLXSwKKytbQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmVdKQorKyMgSnVzdCBpbiBjYXNlCisrc2xlZXAgMQorK2VjaG8gdGltZXN0YW1wID4gY29uZnRlc3RmaWxlCisrIyBEbyBgc2V0JyBpbiBhIHN1YnNoZWxsIHNvIHdlIGRvbid0IGNsb2JiZXIgdGhlIGN1cnJlbnQgc2hlbGwncworKyMgYXJndW1lbnRzLiAgTXVzdCB0cnkgLUwgZmlyc3QgaW4gY2FzZSBjb25maWd1cmUgaXMgYWN0dWFsbHkgYQorKyMgc3ltbGluazsgc29tZSBzeXN0ZW1zIHBsYXkgd2VpcmQgZ2FtZXMgd2l0aCB0aGUgbW9kIHRpbWUgb2Ygc3ltbGlua3MKKysjIChlZyBGcmVlQlNEIHJldHVybnMgdGhlIG1vZCB0aW1lIG9mIHRoZSBzeW1saW5rJ3MgY29udGFpbmluZworKyMgZGlyZWN0b3J5KS4KKytpZiAoCisrICAgc2V0IFggYGxzIC1MdCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdGZpbGUgMj4gL2Rldi9udWxsYAorKyAgIGlmIHRlc3QgIlskXSoiID0gIlgiOyB0aGVuCisrICAgICAgIyAtTCBkaWRuJ3Qgd29yay4KKysgICAgICBzZXQgWCBgbHMgLXQgJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3RmaWxlYAorKyAgIGZpCisrICAgaWYgdGVzdCAiWyRdKiIgIT0gIlggJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3RmaWxlIiBcCisrICAgICAgJiYgdGVzdCAiWyRdKiIgIT0gIlggY29uZnRlc3RmaWxlICRzcmNkaXIvY29uZmlndXJlIjsgdGhlbgorKworKyAgICAgICMgSWYgbmVpdGhlciBtYXRjaGVkLCB0aGVuIHdlIGhhdmUgYSBicm9rZW4gbHMuICBUaGlzIGNhbiBoYXBwZW4KKysgICAgICAjIGlmLCBmb3IgaW5zdGFuY2UsIENPTkZJR19TSEVMTCBpcyBiYXNoIGFuZCBpdCBpbmhlcml0cyBhCisrICAgICAgIyBicm9rZW4gbHMgYWxpYXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuICBUaGlzIGhhcyBhY3R1YWxseQorKyAgICAgICMgaGFwcGVuZWQuICBTdWNoIGEgc3lzdGVtIGNvdWxkIG5vdCBiZSBjb25zaWRlcmVkICJzYW5lIi4KKysgICAgICBBQ19NU0dfRVJST1IoW2xzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KKythbGlhcyBpbiB5b3VyIGVudmlyb25tZW50XSkKKysgICBmaQorKworKyAgIHRlc3QgIlskXTIiID0gY29uZnRlc3RmaWxlCisrICAgKQorK3RoZW4KKysgICAjIE9rLgorKyAgIDoKKytlbHNlCisrICAgQUNfTVNHX0VSUk9SKFtuZXdseSBjcmVhdGVkIGZpbGUgaXMgb2xkZXIgdGhhbiBkaXN0cmlidXRlZCBmaWxlcyEKKytDaGVjayB5b3VyIHN5c3RlbSBjbG9ja10pCisrZmkKKytybSAtZiBjb25mdGVzdCoKKytBQ19NU0dfUkVTVUxUKHllcyldKQorKworK2RubCBBTV9NSVNTSU5HX1BST0coTkFNRSwgUFJPR1JBTSwgRElSRUNUT1JZKQorK2RubCBUaGUgcHJvZ3JhbSBtdXN0IHByb3Blcmx5IGltcGxlbWVudCAtLXZlcnNpb24uCisrQUNfREVGVU4oW0FNX01JU1NJTkdfUFJPR10sCisrW0FDX01TR19DSEVDS0lORyhmb3Igd29ya2luZyAkMikKKysjIFJ1biB0ZXN0IGluIGEgc3Vic2hlbGw7IHNvbWUgdmVyc2lvbnMgb2Ygc2ggd2lsbCBwcmludCBhbiBlcnJvciBpZgorKyMgYW4gZXhlY3V0YWJsZSBpcyBub3QgZm91bmQsIGV2ZW4gaWYgc3RkZXJyIGlzIHJlZGlyZWN0ZWQuCisrIyBSZWRpcmVjdCBzdGRpbiB0byBwbGFjYXRlIG9sZGVyIHZlcnNpb25zIG9mIGF1dG9jb25mLiAgU2lnaC4KKytpZiAoJDIgLS12ZXJzaW9uKSA8IC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgJDE9JDIKKysgICBBQ19NU0dfUkVTVUxUKGZvdW5kKQorK2Vsc2UKKysgICAkMT0iJDMvbWlzc2luZyAkMiIKKysgICBBQ19NU0dfUkVTVUxUKG1pc3NpbmcpCisrZmkKKytBQ19TVUJTVCgkMSldKQorKworKyMgRGVmaW5lIGEgY29uZGl0aW9uYWwuCisrCisrQUNfREVGVU4oW0FNX0NPTkRJVElPTkFMXSwKKytbQUNfU1VCU1QoJDFfVFJVRSkKKytBQ19TVUJTVCgkMV9GQUxTRSkKKytpZiAkMjsgdGhlbgorKyAgJDFfVFJVRT0KKysgICQxX0ZBTFNFPScjJworK2Vsc2UKKysgICQxX1RSVUU9JyMnCisrICAkMV9GQUxTRT0KKytmaV0pCisrCisrIyBBZGQgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlIG9wdGlvbiB0byBjb25maWd1cmUuCisrIyBGcm9tIEppbSBNZXllcmluZworKworKyMgc2VyaWFsIDEKKysKKytBQ19ERUZVTihbQU1fTUFJTlRBSU5FUl9NT0RFXSwKKytbQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlc10pCisrICBkbmwgbWFpbnRhaW5lci1tb2RlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQKKysgIEFDX0FSR19FTkFCTEUobWFpbnRhaW5lci1tb2RlLAorK1sgIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSBlbmFibGUgbWFrZSBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIG5vdCB1c2VmdWwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChhbmQgc29tZXRpbWVzIGNvbmZ1c2luZykgdG8gdGhlIGNhc3VhbCBpbnN0YWxsZXJdLAorKyAgICAgIFVTRV9NQUlOVEFJTkVSX01PREU9JGVuYWJsZXZhbCwKKysgICAgICBVU0VfTUFJTlRBSU5FUl9NT0RFPW5vKQorKyAgQUNfTVNHX1JFU1VMVCgkVVNFX01BSU5UQUlORVJfTU9ERSkKKysgIEFNX0NPTkRJVElPTkFMKE1BSU5UQUlORVJfTU9ERSwgdGVzdCAkVVNFX01BSU5UQUlORVJfTU9ERSA9IHllcykKKysgIE1BSU5UPSRNQUlOVEFJTkVSX01PREVfVFJVRQorKyAgQUNfU1VCU1QoTUFJTlQpZG5sCisrXQorKykKKysKK2RpZmYgLU5hdXIgbmV3bGliLTEuMTcuMC9uZXdsaWIvbGliYy9zeXMvYXZyMzIvY29uZmRlZnMuaCBuZXdsaWItMS4xNy4wLW5ldy9uZXdsaWIvbGliYy9zeXMvYXZyMzIvY29uZmRlZnMuaAorLS0tIG5ld2xpYi0xLjE3LjAvbmV3bGliL2xpYmMvc3lzL2F2cjMyL2NvbmZkZWZzLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBuZXdsaWItMS4xNy4wLW5ldy9uZXdsaWIvbGliYy9zeXMvYXZyMzIvY29uZmRlZnMuaAkyMDA5LTA1LTIyIDA5OjU3OjUwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSBAQAorKworZGlmZiAtTmF1ciBuZXdsaWItMS4xNy4wL25ld2xpYi9saWJjL3N5cy9hdnIzMi9jb25maWd1cmUgbmV3bGliLTEuMTcuMC1uZXcvbmV3bGliL2xpYmMvc3lzL2F2cjMyL2NvbmZpZ3VyZQorLS0tIG5ld2xpYi0xLjE3LjAvbmV3bGliL2xpYmMvc3lzL2F2cjMyL2NvbmZpZ3VyZQkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIG5ld2xpYi0xLjE3LjAtbmV3L25ld2xpYi9saWJjL3N5cy9hdnIzMi9jb25maWd1cmUJMjAwOS0wNS0yMiAwOTo1Nzo1MC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMzkyMiBAQAorKyMhIC9iaW4vc2gKKysjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCisrIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjEgZm9yIG5ld2xpYiBORVdMSUJfVkVSU0lPTi4KKysjCisrIyBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisrIyAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKysjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBNNHNoIEluaXRpYWxpemF0aW9uLiAgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysKKysjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKKytEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCisraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBlbXVsYXRlIHNoCisrICBOVUxMQ01EPToKKysgICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKysgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisrICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKysgIHNldG9wdCBOT19HTE9CX1NVQlNUCisrZWxzZQorKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluCisrICAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsKKytlc2FjCisrCisrZmkKKysKKysKKysKKysKKysjIFBBVEggbmVlZHMgQ1IKKysjIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCisrYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCisrYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCisrYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCisrYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JworK2FzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworKworKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgorK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisrICBlY2hvICIjISAvYmluL3NoIiA+Y29uZiQkLnNoCisrICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCisrICBjaG1vZCAreCBjb25mJCQuc2gKKysgIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5zaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgIFBBVEhfU0VQQVJBVE9SPSc7JworKyAgZWxzZQorKyAgICBQQVRIX1NFUEFSQVRPUj06CisrICBmaQorKyAgcm0gLWYgY29uZiQkLnNoCisrZmkKKysKKysjIFN1cHBvcnQgdW5zZXQgd2hlbiBwb3NzaWJsZS4KKytpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgIGFzX3Vuc2V0PXVuc2V0CisrZWxzZQorKyAgYXNfdW5zZXQ9ZmFsc2UKKytmaQorKworKworKyMgSUZTCisrIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4gIFF1b3RpbmcgaXMKKysjIHRoZXJlIHRvIHByZXZlbnQgZWRpdG9ycyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHNwYWNlLXRhYi4KKysjIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKKysjIHNwbGl0dGluZyBieSBzZXR0aW5nIElGUyB0byBlbXB0eSB2YWx1ZS4pCisrYXNfbmw9JworKycKKytJRlM9IiAiIgkkYXNfbmwiCisrCisrIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KKytjYXNlICQwIGluCisrICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7CisrICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworKyAgICAgOzsKKytlc2FjCisrIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworKyMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBwYXRoLgorK2lmIHRlc3QgIngkYXNfbXlzZWxmIiA9IHg7IHRoZW4KKysgIGFzX215c2VsZj0kMAorK2ZpCisraWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgorKyAgZWNobyAiJGFzX215c2VsZjogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUiID4mMgorKyAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisrZmkKKysKKysjIFdvcmsgYXJvdW5kIGJ1Z3MgaW4gcHJlLTMuMCBVV0lOIGtzaC4KKytmb3IgYXNfdmFyIGluIEVOViBNQUlMIE1BSUxQQVRICisrZG8gKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKKytkb25lCisrUFMxPSckICcKKytQUzI9Jz4gJworK1BTND0nKyAnCisrCisrIyBOTFMgbnVpc2FuY2VzLgorK2ZvciBhc192YXIgaW4gXAorKyAgTEFORyBMQU5HVUFHRSBMQ19BRERSRVNTIExDX0FMTCBMQ19DT0xMQVRFIExDX0NUWVBFIExDX0lERU5USUZJQ0FUSU9OIFwKKysgIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBcCisrICBMQ19URUxFUEhPTkUgTENfVElNRQorK2RvCisrICBpZiAoc2V0ICt4OyB0ZXN0IC16ICJgKGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcikgMj4mMWAiKTsgdGhlbgorKyAgICBldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIKKysgIGVsc2UKKysgICAgKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKKysgIGZpCisrZG9uZQorKworKyMgUmVxdWlyZWQgdG8gdXNlIGJhc2VuYW1lLgorK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisrICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KKysgIGFzX2V4cHI9ZXhwcgorK2Vsc2UKKysgIGFzX2V4cHI9ZmFsc2UKKytmaQorKworK2lmIChiYXNlbmFtZSAtLSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAtLSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KKysgIGFzX2Jhc2VuYW1lPWJhc2VuYW1lCisrZWxzZQorKyAgYXNfYmFzZW5hbWU9ZmFsc2UKKytmaQorKworKworKyMgTmFtZSBvZiB0aGUgZXhlY3V0YWJsZS4KKythc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwKKyskYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAorKwkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKysJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorK2VjaG8gWC8iJDAiIHwKKysgICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXC9cKFwvXC9cKSQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwvXChcL1wpLioveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIHMvLiovLi87IHEnYAorKworKyMgQ0RQQVRILgorKyRhc191bnNldCBDRFBBVEgKKysKKysKKytpZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgPSB4OyB0aGVuCisrICBpZiAoZXZhbCAiOiIpIDI+L2Rldi9udWxsOyB0aGVuCisrICBhc19oYXZlX3JlcXVpcmVkPXllcworK2Vsc2UKKysgIGFzX2hhdmVfcmVxdWlyZWQ9bm8KKytmaQorKworKyAgaWYgdGVzdCAkYXNfaGF2ZV9yZXF1aXJlZCA9IHllcyAmJiAJIChldmFsICI6CisrKGFzX2Z1bmNfcmV0dXJuICgpIHsKKysgIChleGl0IFwkMSkKKyt9CisrYXNfZnVuY19zdWNjZXNzICgpIHsKKysgIGFzX2Z1bmNfcmV0dXJuIDAKKyt9CisrYXNfZnVuY19mYWlsdXJlICgpIHsKKysgIGFzX2Z1bmNfcmV0dXJuIDEKKyt9CisrYXNfZnVuY19yZXRfc3VjY2VzcyAoKSB7CisrICByZXR1cm4gMAorK30KKythc19mdW5jX3JldF9mYWlsdXJlICgpIHsKKysgIHJldHVybiAxCisrfQorKworK2V4aXRjb2RlPTAKKytpZiBhc19mdW5jX3N1Y2Nlc3M7IHRoZW4KKysgIDoKKytlbHNlCisrICBleGl0Y29kZT0xCisrICBlY2hvIGFzX2Z1bmNfc3VjY2VzcyBmYWlsZWQuCisrZmkKKysKKytpZiBhc19mdW5jX2ZhaWx1cmU7IHRoZW4KKysgIGV4aXRjb2RlPTEKKysgIGVjaG8gYXNfZnVuY19mYWlsdXJlIHN1Y2NlZWRlZC4KKytmaQorKworK2lmIGFzX2Z1bmNfcmV0X3N1Y2Nlc3M7IHRoZW4KKysgIDoKKytlbHNlCisrICBleGl0Y29kZT0xCisrICBlY2hvIGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgZmFpbGVkLgorK2ZpCisrCisraWYgYXNfZnVuY19yZXRfZmFpbHVyZTsgdGhlbgorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX3JldF9mYWlsdXJlIHN1Y2NlZWRlZC4KKytmaQorKworK2lmICggc2V0IHg7IGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgeSAmJiB0ZXN0IHggPSBcIlwkMVwiICk7IHRoZW4KKysgIDoKKytlbHNlCisrICBleGl0Y29kZT0xCisrICBlY2hvIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIG5vdCBzYXZlZC4KKytmaQorKworK3Rlc3QgXCRleGl0Y29kZSA9IDApIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorKworKygKKysgIGFzX2xpbmVub18xPVwkTElORU5PCisrICBhc19saW5lbm9fMj1cJExJTkVOTworKyAgdGVzdCBcInhcJGFzX2xpbmVub18xXCIgIT0gXCJ4XCRhc19saW5lbm9fMlwiICYmCisrICB0ZXN0IFwieFxgZXhwciBcJGFzX2xpbmVub18xICsgMVxgXCIgPSBcInhcJGFzX2xpbmVub18yXCIpIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorKyIpIDI+IC9kZXYvbnVsbDsgdGhlbgorKyAgOgorK2Vsc2UKKysgIGFzX2NhbmRpZGF0ZV9zaGVsbHM9CisrICAgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluIC9iaW4kUEFUSF9TRVBBUkFUT1IvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICBjYXNlICRhc19kaXIgaW4KKysJIC8qKQorKwkgICBmb3IgYXNfYmFzZSBpbiBzaCBiYXNoIGtzaCBzaDU7IGRvCisrCSAgICAgYXNfY2FuZGlkYXRlX3NoZWxscz0iJGFzX2NhbmRpZGF0ZV9zaGVsbHMgJGFzX2Rpci8kYXNfYmFzZSIKKysJICAgZG9uZTs7CisrICAgICAgIGVzYWMKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworKworKyAgICAgIGZvciBhc19zaGVsbCBpbiAkYXNfY2FuZGlkYXRlX3NoZWxscyAkU0hFTEw7IGRvCisrCSAjIFRyeSBvbmx5IHNoZWxscyB0aGF0IGV4aXN0LCB0byBzYXZlIHNldmVyYWwgZm9ya3MuCisrCSBpZiB7IHRlc3QgLWYgIiRhc19zaGVsbCIgfHwgdGVzdCAtZiAiJGFzX3NoZWxsLmV4ZSI7IH0gJiYKKysJCXsgKCIkYXNfc2hlbGwiKSAyPiAvZGV2L251bGwgPDxcX0FTRU9GCisraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBlbXVsYXRlIHNoCisrICBOVUxMQ01EPToKKysgICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKysgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisrICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKysgIHNldG9wdCBOT19HTE9CX1NVQlNUCisrZWxzZQorKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluCisrICAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsKKytlc2FjCisrCisrZmkKKysKKysKKys6CisrX0FTRU9GCisrfTsgdGhlbgorKyAgQ09ORklHX1NIRUxMPSRhc19zaGVsbAorKwkgICAgICAgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKKysJICAgICAgIGlmIHsgIiRhc19zaGVsbCIgMj4gL2Rldi9udWxsIDw8XF9BU0VPRgorK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgZW11bGF0ZSBzaAorKyAgTlVMTENNRD06CisrICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisrICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorKyAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCisrICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorK2Vsc2UKKysgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbgorKyAgKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7CisrZXNhYworKworK2ZpCisrCisrCisrOgorKyhhc19mdW5jX3JldHVybiAoKSB7CisrICAoZXhpdCAkMSkKKyt9CisrYXNfZnVuY19zdWNjZXNzICgpIHsKKysgIGFzX2Z1bmNfcmV0dXJuIDAKKyt9CisrYXNfZnVuY19mYWlsdXJlICgpIHsKKysgIGFzX2Z1bmNfcmV0dXJuIDEKKyt9CisrYXNfZnVuY19yZXRfc3VjY2VzcyAoKSB7CisrICByZXR1cm4gMAorK30KKythc19mdW5jX3JldF9mYWlsdXJlICgpIHsKKysgIHJldHVybiAxCisrfQorKworK2V4aXRjb2RlPTAKKytpZiBhc19mdW5jX3N1Y2Nlc3M7IHRoZW4KKysgIDoKKytlbHNlCisrICBleGl0Y29kZT0xCisrICBlY2hvIGFzX2Z1bmNfc3VjY2VzcyBmYWlsZWQuCisrZmkKKysKKytpZiBhc19mdW5jX2ZhaWx1cmU7IHRoZW4KKysgIGV4aXRjb2RlPTEKKysgIGVjaG8gYXNfZnVuY19mYWlsdXJlIHN1Y2NlZWRlZC4KKytmaQorKworK2lmIGFzX2Z1bmNfcmV0X3N1Y2Nlc3M7IHRoZW4KKysgIDoKKytlbHNlCisrICBleGl0Y29kZT0xCisrICBlY2hvIGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgZmFpbGVkLgorK2ZpCisrCisraWYgYXNfZnVuY19yZXRfZmFpbHVyZTsgdGhlbgorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX3JldF9mYWlsdXJlIHN1Y2NlZWRlZC4KKytmaQorKworK2lmICggc2V0IHg7IGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgeSAmJiB0ZXN0IHggPSAiJDEiICk7IHRoZW4KKysgIDoKKytlbHNlCisrICBleGl0Y29kZT0xCisrICBlY2hvIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIG5vdCBzYXZlZC4KKytmaQorKworK3Rlc3QgJGV4aXRjb2RlID0gMCkgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisrCisrKAorKyAgYXNfbGluZW5vXzE9JExJTkVOTworKyAgYXNfbGluZW5vXzI9JExJTkVOTworKyAgdGVzdCAieCRhc19saW5lbm9fMSIgIT0gIngkYXNfbGluZW5vXzIiICYmCisrICB0ZXN0ICJ4YGV4cHIgJGFzX2xpbmVub18xICsgMWAiID0gIngkYXNfbGluZW5vXzIiKSB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKysKKytfQVNFT0YKKyt9OyB0aGVuCisrICBicmVhaworK2ZpCisrCisrZmkKKysKKysgICAgICBkb25lCisrCisrICAgICAgaWYgdGVzdCAieCRDT05GSUdfU0hFTEwiICE9IHg7IHRoZW4KKysgIGZvciBhc192YXIgaW4gQkFTSF9FTlYgRU5WCisrICAgICAgICBkbyAoJGFzX3Vuc2V0ICRhc192YXIpID4vZGV2L251bGwgMj4mMSAmJiAkYXNfdW5zZXQgJGFzX3ZhcgorKyAgICAgICAgZG9uZQorKyAgICAgICAgZXhwb3J0IENPTkZJR19TSEVMTAorKyAgICAgICAgZXhlYyAiJENPTkZJR19TSEVMTCIgIiRhc19teXNlbGYiICR7MSsiJEAifQorK2ZpCisrCisrCisrICAgIGlmIHRlc3QgJGFzX2hhdmVfcmVxdWlyZWQgPSBubzsgdGhlbgorKyAgZWNobyBUaGlzIHNjcmlwdCByZXF1aXJlcyBhIHNoZWxsIG1vcmUgbW9kZXJuIHRoYW4gYWxsIHRoZQorKyAgICAgIGVjaG8gc2hlbGxzIHRoYXQgSSBmb3VuZCBvbiB5b3VyIHN5c3RlbS4gIFBsZWFzZSBpbnN0YWxsIGEKKysgICAgICBlY2hvIG1vZGVybiBzaGVsbCwgb3IgbWFudWFsbHkgcnVuIHRoZSBzY3JpcHQgdW5kZXIgc3VjaCBhCisrICAgICAgZWNobyBzaGVsbCBpZiB5b3UgZG8gaGF2ZSBvbmUuCisrICAgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisrZmkKKysKKysKKytmaQorKworK2ZpCisrCisrCisrCisrKGV2YWwgImFzX2Z1bmNfcmV0dXJuICgpIHsKKysgIChleGl0IFwkMSkKKyt9CisrYXNfZnVuY19zdWNjZXNzICgpIHsKKysgIGFzX2Z1bmNfcmV0dXJuIDAKKyt9CisrYXNfZnVuY19mYWlsdXJlICgpIHsKKysgIGFzX2Z1bmNfcmV0dXJuIDEKKyt9CisrYXNfZnVuY19yZXRfc3VjY2VzcyAoKSB7CisrICByZXR1cm4gMAorK30KKythc19mdW5jX3JldF9mYWlsdXJlICgpIHsKKysgIHJldHVybiAxCisrfQorKworK2V4aXRjb2RlPTAKKytpZiBhc19mdW5jX3N1Y2Nlc3M7IHRoZW4KKysgIDoKKytlbHNlCisrICBleGl0Y29kZT0xCisrICBlY2hvIGFzX2Z1bmNfc3VjY2VzcyBmYWlsZWQuCisrZmkKKysKKytpZiBhc19mdW5jX2ZhaWx1cmU7IHRoZW4KKysgIGV4aXRjb2RlPTEKKysgIGVjaG8gYXNfZnVuY19mYWlsdXJlIHN1Y2NlZWRlZC4KKytmaQorKworK2lmIGFzX2Z1bmNfcmV0X3N1Y2Nlc3M7IHRoZW4KKysgIDoKKytlbHNlCisrICBleGl0Y29kZT0xCisrICBlY2hvIGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgZmFpbGVkLgorK2ZpCisrCisraWYgYXNfZnVuY19yZXRfZmFpbHVyZTsgdGhlbgorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX3JldF9mYWlsdXJlIHN1Y2NlZWRlZC4KKytmaQorKworK2lmICggc2V0IHg7IGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgeSAmJiB0ZXN0IHggPSBcIlwkMVwiICk7IHRoZW4KKysgIDoKKytlbHNlCisrICBleGl0Y29kZT0xCisrICBlY2hvIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIG5vdCBzYXZlZC4KKytmaQorKworK3Rlc3QgXCRleGl0Y29kZSA9IDAiKSB8fCB7CisrICBlY2hvIE5vIHNoZWxsIGZvdW5kIHRoYXQgc3VwcG9ydHMgc2hlbGwgZnVuY3Rpb25zLgorKyAgZWNobyBQbGVhc2UgdGVsbCBhdXRvY29uZkBnbnUub3JnIGFib3V0IHlvdXIgc3lzdGVtLAorKyAgZWNobyBpbmNsdWRpbmcgYW55IGVycm9yIHBvc3NpYmx5IG91dHB1dCBiZWZvcmUgdGhpcworKyAgZWNobyBtZXNzYWdlCisrfQorKworKworKworKyAgYXNfbGluZW5vXzE9JExJTkVOTworKyAgYXNfbGluZW5vXzI9JExJTkVOTworKyAgdGVzdCAieCRhc19saW5lbm9fMSIgIT0gIngkYXNfbGluZW5vXzIiICYmCisrICB0ZXN0ICJ4YGV4cHIgJGFzX2xpbmVub18xICsgMWAiID0gIngkYXNfbGluZW5vXzIiIHx8IHsKKysKKysgICMgQ3JlYXRlICRhc19tZS5saW5lbm8gYXMgYSBjb3B5IG9mICRhc19teXNlbGYsIGJ1dCB3aXRoICRMSU5FTk8KKysgICMgdW5pZm9ybWx5IHJlcGxhY2VkIGJ5IHRoZSBsaW5lIG51bWJlci4gIFRoZSBmaXJzdCAnc2VkJyBpbnNlcnRzIGEKKysgICMgbGluZS1udW1iZXIgbGluZSBhZnRlciBlYWNoIGxpbmUgdXNpbmcgJExJTkVOTzsgdGhlIHNlY29uZCAnc2VkJworKyAgIyBkb2VzIHRoZSByZWFsIHdvcmsuICBUaGUgc2Vjb25kIHNjcmlwdCB1c2VzICdOJyB0byBwYWlyIGVhY2gKKysgICMgbGluZS1udW1iZXIgbGluZSB3aXRoIHRoZSBsaW5lIGNvbnRhaW5pbmcgJExJTkVOTywgYW5kIGFwcGVuZHMKKysgICMgdHJhaWxpbmcgJy0nIGR1cmluZyBzdWJzdGl0dXRpb24gc28gdGhhdCAkTElORU5PIGlzIG5vdCBhIHNwZWNpYWwKKysgICMgY2FzZSBhdCBsaW5lIGVuZC4KKysgICMgKFJhamEgUiBIYXJpbmF0aCBzdWdnZXN0ZWQgc2VkICc9JywgYW5kIFBhdWwgRWdnZXJ0IHdyb3RlIHRoZQorKyAgIyBzY3JpcHRzIHdpdGggb3B0aW1pemF0aW9uIGhlbHAgZnJvbSBQYW9sbyBCb256aW5pLiAgQmxhbWUgTGVlCisrICAjIEUuIE1jTWFob24gKDE5MzEtMTk4OSkgZm9yIHNlZCdzIHN5bnRheC4gIDotKQorKyAgc2VkIC1uICcKKysgICAgcAorKyAgICAvWyRdTElORU5PLz0KKysgICcgPCRhc19teXNlbGYgfAorKyAgICBzZWQgJworKyAgICAgIHMvWyRdTElORU5PLiovJi0vCisrICAgICAgdCBsaW5lbm8KKysgICAgICBiCisrICAgICAgOmxpbmVubworKyAgICAgIE4KKysgICAgICA6bG9vcAorKyAgICAgIHMvWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX10uKlxuXClcKC4qXCkvXDJcMVwyLworKyAgICAgIHQgbG9vcAorKyAgICAgIHMvLVxuLiovLworKyAgICAnID4kYXNfbWUubGluZW5vICYmCisrICBjaG1vZCAreCAiJGFzX21lLmxpbmVubyIgfHwKKysgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyCisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrCisrICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcworKyAgIyAodGhlIGRpcm5hbWUgb2YgJFswXSBpcyBub3QgdGhlIHBsYWNlIHdoZXJlIHdlIG1pZ2h0IGZpbmQgdGhlCisrICAjIG9yaWdpbmFsIGFuZCBzbyBvbi4gIEF1dG9jb25mIGlzIGVzcGVjaWFsbHkgc2Vuc2l0aXZlIHRvIHRoaXMpLgorKyAgLiAiLi8kYXNfbWUubGluZW5vIgorKyAgIyBFeGl0IHN0YXR1cyBpcyB0aGF0IG9mIHRoZSBsYXN0IGNvbW1hbmQuCisrICBleGl0CisrfQorKworKworK2lmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgYXNfZGlybmFtZT1kaXJuYW1lCisrZWxzZQorKyAgYXNfZGlybmFtZT1mYWxzZQorK2ZpCisrCisrRUNIT19DPSBFQ0hPX049IEVDSE9fVD0KKytjYXNlIGBlY2hvIC1uIHhgIGluCisrLW4qKQorKyAgY2FzZSBgZWNobyAneFxjJ2AgaW4KKysgICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgorKyAgKikgICBFQ0hPX0M9J1xjJzs7CisrICBlc2FjOzsKKysqKQorKyAgRUNIT19OPSctbic7OworK2VzYWMKKysKKytpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorKyAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCisrICBhc19leHByPWV4cHIKKytlbHNlCisrICBhc19leHByPWZhbHNlCisrZmkKKysKKytybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQorK2lmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorKyAgcm0gLWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQorK2Vsc2UKKysgIHJtIC1mIGNvbmYkJC5kaXIKKysgIG1rZGlyIGNvbmYkJC5kaXIKKytmaQorK2VjaG8gPmNvbmYkJC5maWxlCisraWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisrICBhc19sbl9zPSdsbiAtcycKKysgICMgLi4uIGJ1dCB0aGVyZSBhcmUgdHdvIGdvdGNoYXM6CisrICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgorKyAgIyAyKSBESkdQUCA8IDIuMDQgaGFzIG5vIHN5bWxpbmtzOyBgbG4gLXMnIGNyZWF0ZXMgYSB3cmFwcGVyIGV4ZWN1dGFibGUuCisrICAjIEluIGJvdGggY2FzZXMsIHdlIGhhdmUgdG8gZGVmYXVsdCB0byBgY3AgLXAnLgorKyAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAorKyAgICBhc19sbl9zPSdjcCAtcCcKKytlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorKyAgYXNfbG5fcz1sbgorK2Vsc2UKKysgIGFzX2xuX3M9J2NwIC1wJworK2ZpCisrcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmRpci9jb25mJCQuZmlsZSBjb25mJCQuZmlsZQorK3JtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKysKKytpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCisrICBhc19ta2Rpcl9wPToKKytlbHNlCisrICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAorKyAgYXNfbWtkaXJfcD1mYWxzZQorK2ZpCisrCisraWYgdGVzdCAteCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgYXNfdGVzdF94PSd0ZXN0IC14JworK2Vsc2UKKysgIGlmIGxzIC1kTCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICBhc19sc19MX29wdGlvbj1MCisrICBlbHNlCisrICAgIGFzX2xzX0xfb3B0aW9uPQorKyAgZmkKKysgIGFzX3Rlc3RfeD0nCisrICAgIGV2YWwgc2ggLWMgJ1wnJworKyAgICAgIGlmIHRlc3QgLWQgIiQxIjsgdGhlbgorKyAgICAgICAgdGVzdCAtZCAiJDEvLiI7CisrICAgICAgZWxzZQorKwljYXNlICQxIGluCisrICAgICAgICAtKilzZXQgIi4vJDEiOzsKKysJZXNhYzsKKysJY2FzZSBgbHMgLWxkJyRhc19sc19MX29wdGlvbicgIiQxIiAyPi9kZXYvbnVsbGAgaW4KKysJPz8/W3N4XSopOjs7KilmYWxzZTs7ZXNhYztmaQorKyAgICAnXCcnIHNoCisrICAnCisrZmkKKythc19leGVjdXRhYmxlX3A9JGFzX3Rlc3RfeAorKworKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KKythc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorKworKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgorK2FzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisrCisrCisrCisrZXhlYyA3PCYwIDwvZGV2L251bGwgNj4mMQorKworKyMgTmFtZSBvZiB0aGUgaG9zdC4KKysjIGhvc3RuYW1lIG9uIHNvbWUgc3lzdGVtcyAoU1ZSMy4yLCBMaW51eCkgcmV0dXJucyBhIGJvZ3VzIGV4aXQgc3RhdHVzLAorKyMgc28gdW5hbWUgZ2V0cyBydW4gdG9vLgorK2FjX2hvc3RuYW1lPWAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorKworKyMKKysjIEluaXRpYWxpemF0aW9ucy4KKysjCisrYWNfZGVmYXVsdF9wcmVmaXg9L3Vzci9sb2NhbAorK2FjX2NsZWFuX2ZpbGVzPQorK2FjX2NvbmZpZ19saWJvYmpfZGlyPS4KKytMSUJPQkpTPQorK2Nyb3NzX2NvbXBpbGluZz1ubworK3N1YmRpcnM9CisrTUZMQUdTPQorK01BS0VGTEFHUz0KKytTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorKworKyMgSWRlbnRpdHkgb2YgdGhpcyBwYWNrYWdlLgorK1BBQ0tBR0VfTkFNRT0nbmV3bGliJworK1BBQ0tBR0VfVEFSTkFNRT0nbmV3bGliJworK1BBQ0tBR0VfVkVSU0lPTj0nTkVXTElCX1ZFUlNJT04nCisrUEFDS0FHRV9TVFJJTkc9J25ld2xpYiBORVdMSUJfVkVSU0lPTicKKytQQUNLQUdFX0JVR1JFUE9SVD0nJworKworK2FjX3N1YnN0X3ZhcnM9J1NIRUxMCisrUEFUSF9TRVBBUkFUT1IKKytQQUNLQUdFX05BTUUKKytQQUNLQUdFX1RBUk5BTUUKKytQQUNLQUdFX1ZFUlNJT04KKytQQUNLQUdFX1NUUklORworK1BBQ0tBR0VfQlVHUkVQT1JUCisrZXhlY19wcmVmaXgKKytwcmVmaXgKKytwcm9ncmFtX3RyYW5zZm9ybV9uYW1lCisrYmluZGlyCisrc2JpbmRpcgorK2xpYmV4ZWNkaXIKKytkYXRhcm9vdGRpcgorK2RhdGFkaXIKKytzeXNjb25mZGlyCisrc2hhcmVkc3RhdGVkaXIKKytsb2NhbHN0YXRlZGlyCisraW5jbHVkZWRpcgorK29sZGluY2x1ZGVkaXIKKytkb2NkaXIKKytpbmZvZGlyCisraHRtbGRpcgorK2R2aWRpcgorK3BkZmRpcgorK3BzZGlyCisrbGliZGlyCisrbG9jYWxlZGlyCisrbWFuZGlyCisrREVGUworK0VDSE9fQworK0VDSE9fTgorK0VDSE9fVAorK0xJQlMKKytidWlsZF9hbGlhcworK2hvc3RfYWxpYXMKKyt0YXJnZXRfYWxpYXMKKytNQVlfU1VQUExZX1NZU0NBTExTX1RSVUUKKytNQVlfU1VQUExZX1NZU0NBTExTX0ZBTFNFCisrbmV3bGliX2Jhc2VkaXIKKytidWlsZAorK2J1aWxkX2NwdQorK2J1aWxkX3ZlbmRvcgorK2J1aWxkX29zCisraG9zdAorK2hvc3RfY3B1CisraG9zdF92ZW5kb3IKKytob3N0X29zCisrdGFyZ2V0CisrdGFyZ2V0X2NwdQorK3RhcmdldF92ZW5kb3IKKyt0YXJnZXRfb3MKKytJTlNUQUxMX1BST0dSQU0KKytJTlNUQUxMX1NDUklQVAorK0lOU1RBTExfREFUQQorK1BBQ0tBR0UKKytWRVJTSU9OCisrQUNMT0NBTAorK0FVVE9DT05GCisrQVVUT01BS0UKKytBVVRPSEVBREVSCisrTUFLRUlORk8KKytTRVRfTUFLRQorK0NDCisrQVMKKytBUgorK1JBTkxJQgorK01BSU5UQUlORVJfTU9ERV9UUlVFCisrTUFJTlRBSU5FUl9NT0RFX0ZBTFNFCisrTUFJTlQKKytORVdMSUJfQ0ZMQUdTCisrTERGTEFHUworK0VMSVhfTEVWRUxfMF9UUlVFCisrRUxJWF9MRVZFTF8wX0ZBTFNFCisrRUxJWF9MRVZFTF8xX1RSVUUKKytFTElYX0xFVkVMXzFfRkFMU0UKKytFTElYX0xFVkVMXzJfVFJVRQorK0VMSVhfTEVWRUxfMl9GQUxTRQorK0VMSVhfTEVWRUxfM19UUlVFCisrRUxJWF9MRVZFTF8zX0ZBTFNFCisrRUxJWF9MRVZFTF80X1RSVUUKKytFTElYX0xFVkVMXzRfRkFMU0UKKytVU0VfTElCVE9PTF9UUlVFCisrVVNFX0xJQlRPT0xfRkFMU0UKKytPQkpFWFQKKytvZXh0CisrYWV4dAorK2xpYm1fbWFjaGluZV9kaXIKKyttYWNoaW5lX2RpcgorK3N5c19kaXIKKytMSUJPQkpTCisrTFRMSUJPQkpTJworK2FjX3N1YnN0X2ZpbGVzPScnCisrICAgICAgYWNfcHJlY2lvdXNfdmFycz0nYnVpbGRfYWxpYXMKKytob3N0X2FsaWFzCisrdGFyZ2V0X2FsaWFzJworKworKworKyMgSW5pdGlhbGl6ZSBzb21lIHZhcmlhYmxlcyBzZXQgYnkgb3B0aW9ucy4KKythY19pbml0X2hlbHA9CisrYWNfaW5pdF92ZXJzaW9uPWZhbHNlCisrIyBUaGUgdmFyaWFibGVzIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgdGhlIG9wdGlvbnMsIHdpdGgKKysjIGRhc2hlcyBjaGFuZ2VkIHRvIHVuZGVybGluZXMuCisrY2FjaGVfZmlsZT0vZGV2L251bGwKKytleGVjX3ByZWZpeD1OT05FCisrbm9fY3JlYXRlPQorK25vX3JlY3Vyc2lvbj0KKytwcmVmaXg9Tk9ORQorK3Byb2dyYW1fcHJlZml4PU5PTkUKKytwcm9ncmFtX3N1ZmZpeD1OT05FCisrcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT1zLHgseCwKKytzaWxlbnQ9Cisrc2l0ZT0KKytzcmNkaXI9CisrdmVyYm9zZT0KKyt4X2luY2x1ZGVzPU5PTkUKKyt4X2xpYnJhcmllcz1OT05FCisrCisrIyBJbnN0YWxsYXRpb24gZGlyZWN0b3J5IG9wdGlvbnMuCisrIyBUaGVzZSBhcmUgbGVmdCB1bmV4cGFuZGVkIHNvIHVzZXJzIGNhbiAibWFrZSBpbnN0YWxsIGV4ZWNfcHJlZml4PS9mb28iCisrIyBhbmQgYWxsIHRoZSB2YXJpYWJsZXMgdGhhdCBhcmUgc3VwcG9zZWQgdG8gYmUgYmFzZWQgb24gZXhlY19wcmVmaXgKKysjIGJ5IGRlZmF1bHQgd2lsbCBhY3R1YWxseSBjaGFuZ2UuCisrIyBVc2UgYnJhY2VzIGluc3RlYWQgb2YgcGFyZW5zIGJlY2F1c2Ugc2gsIHBlcmwsIGV0Yy4gYWxzbyBhY2NlcHQgdGhlbS4KKysjIChUaGUgbGlzdCBmb2xsb3dzIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBHTlUgQ29kaW5nIFN0YW5kYXJkcy4pCisrYmluZGlyPScke2V4ZWNfcHJlZml4fS9iaW4nCisrc2JpbmRpcj0nJHtleGVjX3ByZWZpeH0vc2JpbicKKytsaWJleGVjZGlyPScke2V4ZWNfcHJlZml4fS9saWJleGVjJworK2RhdGFyb290ZGlyPScke3ByZWZpeH0vc2hhcmUnCisrZGF0YWRpcj0nJHtkYXRhcm9vdGRpcn0nCisrc3lzY29uZmRpcj0nJHtwcmVmaXh9L2V0YycKKytzaGFyZWRzdGF0ZWRpcj0nJHtwcmVmaXh9L2NvbScKKytsb2NhbHN0YXRlZGlyPScke3ByZWZpeH0vdmFyJworK2luY2x1ZGVkaXI9JyR7cHJlZml4fS9pbmNsdWRlJworK29sZGluY2x1ZGVkaXI9Jy91c3IvaW5jbHVkZScKKytkb2NkaXI9JyR7ZGF0YXJvb3RkaXJ9L2RvYy8ke1BBQ0tBR0VfVEFSTkFNRX0nCisraW5mb2Rpcj0nJHtkYXRhcm9vdGRpcn0vaW5mbycKKytodG1sZGlyPScke2RvY2Rpcn0nCisrZHZpZGlyPScke2RvY2Rpcn0nCisrcGRmZGlyPScke2RvY2Rpcn0nCisrcHNkaXI9JyR7ZG9jZGlyfScKKytsaWJkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYicKKytsb2NhbGVkaXI9JyR7ZGF0YXJvb3RkaXJ9L2xvY2FsZScKKyttYW5kaXI9JyR7ZGF0YXJvb3RkaXJ9L21hbicKKysKKythY19wcmV2PQorK2FjX2Rhc2hkYXNoPQorK2ZvciBhY19vcHRpb24KKytkbworKyAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCisrICBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKysgICAgZXZhbCAkYWNfcHJldj1cJGFjX29wdGlvbgorKyAgICBhY19wcmV2PQorKyAgICBjb250aW51ZQorKyAgZmkKKysKKysgIGNhc2UgJGFjX29wdGlvbiBpbgorKyAgKj0qKQlhY19vcHRhcmc9YGV4cHIgIlgkYWNfb3B0aW9uIiA6ICdbXj1dKj1cKC4qXCknYCA7OworKyAgKikJYWNfb3B0YXJnPXllcyA7OworKyAgZXNhYworKworKyAgIyBBY2NlcHQgdGhlIGltcG9ydGFudCBDeWdudXMgY29uZmlndXJlIG9wdGlvbnMsIHNvIHdlIGNhbiBkaWFnbm9zZSB0eXBvcy4KKysKKysgIGNhc2UgJGFjX2Rhc2hkYXNoJGFjX29wdGlvbiBpbgorKyAgLS0pCisrICAgIGFjX2Rhc2hkYXNoPXllcyA7OworKworKyAgLWJpbmRpciB8IC0tYmluZGlyIHwgLS1iaW5kaSB8IC0tYmluZCB8IC0tYmluIHwgLS1iaSkKKysgICAgYWNfcHJldj1iaW5kaXIgOzsKKysgIC1iaW5kaXI9KiB8IC0tYmluZGlyPSogfCAtLWJpbmRpPSogfCAtLWJpbmQ9KiB8IC0tYmluPSogfCAtLWJpPSopCisrICAgIGJpbmRpcj0kYWNfb3B0YXJnIDs7CisrCisrICAtYnVpbGQgfCAtLWJ1aWxkIHwgLS1idWlsIHwgLS1idWkgfCAtLWJ1KQorKyAgICBhY19wcmV2PWJ1aWxkX2FsaWFzIDs7CisrICAtYnVpbGQ9KiB8IC0tYnVpbGQ9KiB8IC0tYnVpbD0qIHwgLS1idWk9KiB8IC0tYnU9KikKKysgICAgYnVpbGRfYWxpYXM9JGFjX29wdGFyZyA7OworKworKyAgLWNhY2hlLWZpbGUgfCAtLWNhY2hlLWZpbGUgfCAtLWNhY2hlLWZpbCB8IC0tY2FjaGUtZmkgXAorKyAgfCAtLWNhY2hlLWYgfCAtLWNhY2hlLSB8IC0tY2FjaGUgfCAtLWNhY2ggfCAtLWNhYyB8IC0tY2EgfCAtLWMpCisrICAgIGFjX3ByZXY9Y2FjaGVfZmlsZSA7OworKyAgLWNhY2hlLWZpbGU9KiB8IC0tY2FjaGUtZmlsZT0qIHwgLS1jYWNoZS1maWw9KiB8IC0tY2FjaGUtZmk9KiBcCisrICB8IC0tY2FjaGUtZj0qIHwgLS1jYWNoZS09KiB8IC0tY2FjaGU9KiB8IC0tY2FjaD0qIHwgLS1jYWM9KiB8IC0tY2E9KiB8IC0tYz0qKQorKyAgICBjYWNoZV9maWxlPSRhY19vcHRhcmcgOzsKKysKKysgIC0tY29uZmlnLWNhY2hlIHwgLUMpCisrICAgIGNhY2hlX2ZpbGU9Y29uZmlnLmNhY2hlIDs7CisrCisrICAtZGF0YWRpciB8IC0tZGF0YWRpciB8IC0tZGF0YWRpIHwgLS1kYXRhZCkKKysgICAgYWNfcHJldj1kYXRhZGlyIDs7CisrICAtZGF0YWRpcj0qIHwgLS1kYXRhZGlyPSogfCAtLWRhdGFkaT0qIHwgLS1kYXRhZD0qKQorKyAgICBkYXRhZGlyPSRhY19vcHRhcmcgOzsKKysKKysgIC1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaXIgfCAtLWRhdGFyb290ZGkgfCAtLWRhdGFyb290ZCB8IC0tZGF0YXJvb3QgXAorKyAgfCAtLWRhdGFyb28gfCAtLWRhdGFybyB8IC0tZGF0YXIpCisrICAgIGFjX3ByZXY9ZGF0YXJvb3RkaXIgOzsKKysgIC1kYXRhcm9vdGRpcj0qIHwgLS1kYXRhcm9vdGRpcj0qIHwgLS1kYXRhcm9vdGRpPSogfCAtLWRhdGFyb290ZD0qIFwKKysgIHwgLS1kYXRhcm9vdD0qIHwgLS1kYXRhcm9vPSogfCAtLWRhdGFybz0qIHwgLS1kYXRhcj0qKQorKyAgICBkYXRhcm9vdGRpcj0kYWNfb3B0YXJnIDs7CisrCisrICAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSopCisrICAgIGFjX2ZlYXR1cmU9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSpkaXNhYmxlLVwoLipcKSdgCisrICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKysgICAgZXhwciAieCRhY19mZWF0dXJlIiA6ICIuKlteLS5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorKyAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY19mZWF0dXJlIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysgICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfZmVhdHVyZSB8IHNlZCAncy9bLS5dL18vZydgCisrICAgIGV2YWwgZW5hYmxlXyRhY19mZWF0dXJlPW5vIDs7CisrCisrICAtZG9jZGlyIHwgLS1kb2NkaXIgfCAtLWRvY2RpIHwgLS1kb2MgfCAtLWRvKQorKyAgICBhY19wcmV2PWRvY2RpciA7OworKyAgLWRvY2Rpcj0qIHwgLS1kb2NkaXI9KiB8IC0tZG9jZGk9KiB8IC0tZG9jPSogfCAtLWRvPSopCisrICAgIGRvY2Rpcj0kYWNfb3B0YXJnIDs7CisrCisrICAtZHZpZGlyIHwgLS1kdmlkaXIgfCAtLWR2aWRpIHwgLS1kdmlkIHwgLS1kdmkgfCAtLWR2KQorKyAgICBhY19wcmV2PWR2aWRpciA7OworKyAgLWR2aWRpcj0qIHwgLS1kdmlkaXI9KiB8IC0tZHZpZGk9KiB8IC0tZHZpZD0qIHwgLS1kdmk9KiB8IC0tZHY9KikKKysgICAgZHZpZGlyPSRhY19vcHRhcmcgOzsKKysKKysgIC1lbmFibGUtKiB8IC0tZW5hYmxlLSopCisrICAgIGFjX2ZlYXR1cmU9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSplbmFibGUtXChbXj1dKlwpJ2AKKysgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorKyAgICBleHByICJ4JGFjX2ZlYXR1cmUiIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisrICAgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX2ZlYXR1cmUiID4mMgorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKyAgICBhY19mZWF0dXJlPWBlY2hvICRhY19mZWF0dXJlIHwgc2VkICdzL1stLl0vXy9nJ2AKKysgICAgZXZhbCBlbmFibGVfJGFjX2ZlYXR1cmU9XCRhY19vcHRhcmcgOzsKKysKKysgIC1leGVjLXByZWZpeCB8IC0tZXhlY19wcmVmaXggfCAtLWV4ZWMtcHJlZml4IHwgLS1leGVjLXByZWZpIFwKKysgIHwgLS1leGVjLXByZWYgfCAtLWV4ZWMtcHJlIHwgLS1leGVjLXByIHwgLS1leGVjLXAgfCAtLWV4ZWMtIFwKKysgIHwgLS1leGVjIHwgLS1leGUgfCAtLWV4KQorKyAgICBhY19wcmV2PWV4ZWNfcHJlZml4IDs7CisrICAtZXhlYy1wcmVmaXg9KiB8IC0tZXhlY19wcmVmaXg9KiB8IC0tZXhlYy1wcmVmaXg9KiB8IC0tZXhlYy1wcmVmaT0qIFwKKysgIHwgLS1leGVjLXByZWY9KiB8IC0tZXhlYy1wcmU9KiB8IC0tZXhlYy1wcj0qIHwgLS1leGVjLXA9KiB8IC0tZXhlYy09KiBcCisrICB8IC0tZXhlYz0qIHwgLS1leGU9KiB8IC0tZXg9KikKKysgICAgZXhlY19wcmVmaXg9JGFjX29wdGFyZyA7OworKworKyAgLWdhcyB8IC0tZ2FzIHwgLS1nYSB8IC0tZykKKysgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aC1nYXMuCisrICAgIHdpdGhfZ2FzPXllcyA7OworKworKyAgLWhlbHAgfCAtLWhlbHAgfCAtLWhlbCB8IC0taGUgfCAtaCkKKysgICAgYWNfaW5pdF9oZWxwPWxvbmcgOzsKKysgIC1oZWxwPXIqIHwgLS1oZWxwPXIqIHwgLS1oZWw9ciogfCAtLWhlPXIqIHwgLWhyKikKKysgICAgYWNfaW5pdF9oZWxwPXJlY3Vyc2l2ZSA7OworKyAgLWhlbHA9cyogfCAtLWhlbHA9cyogfCAtLWhlbD1zKiB8IC0taGU9cyogfCAtaHMqKQorKyAgICBhY19pbml0X2hlbHA9c2hvcnQgOzsKKysKKysgIC1ob3N0IHwgLS1ob3N0IHwgLS1ob3MgfCAtLWhvKQorKyAgICBhY19wcmV2PWhvc3RfYWxpYXMgOzsKKysgIC1ob3N0PSogfCAtLWhvc3Q9KiB8IC0taG9zPSogfCAtLWhvPSopCisrICAgIGhvc3RfYWxpYXM9JGFjX29wdGFyZyA7OworKworKyAgLWh0bWxkaXIgfCAtLWh0bWxkaXIgfCAtLWh0bWxkaSB8IC0taHRtbGQgfCAtLWh0bWwgfCAtLWh0bSB8IC0taHQpCisrICAgIGFjX3ByZXY9aHRtbGRpciA7OworKyAgLWh0bWxkaXI9KiB8IC0taHRtbGRpcj0qIHwgLS1odG1sZGk9KiB8IC0taHRtbGQ9KiB8IC0taHRtbD0qIHwgLS1odG09KiBcCisrICB8IC0taHQ9KikKKysgICAgaHRtbGRpcj0kYWNfb3B0YXJnIDs7CisrCisrICAtaW5jbHVkZWRpciB8IC0taW5jbHVkZWRpciB8IC0taW5jbHVkZWRpIHwgLS1pbmNsdWRlZCB8IC0taW5jbHVkZSBcCisrICB8IC0taW5jbHVkIHwgLS1pbmNsdSB8IC0taW5jbCB8IC0taW5jKQorKyAgICBhY19wcmV2PWluY2x1ZGVkaXIgOzsKKysgIC1pbmNsdWRlZGlyPSogfCAtLWluY2x1ZGVkaXI9KiB8IC0taW5jbHVkZWRpPSogfCAtLWluY2x1ZGVkPSogfCAtLWluY2x1ZGU9KiBcCisrICB8IC0taW5jbHVkPSogfCAtLWluY2x1PSogfCAtLWluY2w9KiB8IC0taW5jPSopCisrICAgIGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7OworKworKyAgLWluZm9kaXIgfCAtLWluZm9kaXIgfCAtLWluZm9kaSB8IC0taW5mb2QgfCAtLWluZm8gfCAtLWluZikKKysgICAgYWNfcHJldj1pbmZvZGlyIDs7CisrICAtaW5mb2Rpcj0qIHwgLS1pbmZvZGlyPSogfCAtLWluZm9kaT0qIHwgLS1pbmZvZD0qIHwgLS1pbmZvPSogfCAtLWluZj0qKQorKyAgICBpbmZvZGlyPSRhY19vcHRhcmcgOzsKKysKKysgIC1saWJkaXIgfCAtLWxpYmRpciB8IC0tbGliZGkgfCAtLWxpYmQpCisrICAgIGFjX3ByZXY9bGliZGlyIDs7CisrICAtbGliZGlyPSogfCAtLWxpYmRpcj0qIHwgLS1saWJkaT0qIHwgLS1saWJkPSopCisrICAgIGxpYmRpcj0kYWNfb3B0YXJnIDs7CisrCisrICAtbGliZXhlY2RpciB8IC0tbGliZXhlY2RpciB8IC0tbGliZXhlY2RpIHwgLS1saWJleGVjZCB8IC0tbGliZXhlYyBcCisrICB8IC0tbGliZXhlIHwgLS1saWJleCB8IC0tbGliZSkKKysgICAgYWNfcHJldj1saWJleGVjZGlyIDs7CisrICAtbGliZXhlY2Rpcj0qIHwgLS1saWJleGVjZGlyPSogfCAtLWxpYmV4ZWNkaT0qIHwgLS1saWJleGVjZD0qIHwgLS1saWJleGVjPSogXAorKyAgfCAtLWxpYmV4ZT0qIHwgLS1saWJleD0qIHwgLS1saWJlPSopCisrICAgIGxpYmV4ZWNkaXI9JGFjX29wdGFyZyA7OworKworKyAgLWxvY2FsZWRpciB8IC0tbG9jYWxlZGlyIHwgLS1sb2NhbGVkaSB8IC0tbG9jYWxlZCB8IC0tbG9jYWxlKQorKyAgICBhY19wcmV2PWxvY2FsZWRpciA7OworKyAgLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaXI9KiB8IC0tbG9jYWxlZGk9KiB8IC0tbG9jYWxlZD0qIHwgLS1sb2NhbGU9KikKKysgICAgbG9jYWxlZGlyPSRhY19vcHRhcmcgOzsKKysKKysgIC1sb2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGkgfCAtLWxvY2Fsc3RhdGVkIFwKKysgIHwgLS1sb2NhbHN0YXRlIHwgLS1sb2NhbHN0YXQgfCAtLWxvY2Fsc3RhIHwgLS1sb2NhbHN0IHwgLS1sb2NhbHMpCisrICAgIGFjX3ByZXY9bG9jYWxzdGF0ZWRpciA7OworKyAgLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGk9KiB8IC0tbG9jYWxzdGF0ZWQ9KiBcCisrICB8IC0tbG9jYWxzdGF0ZT0qIHwgLS1sb2NhbHN0YXQ9KiB8IC0tbG9jYWxzdGE9KiB8IC0tbG9jYWxzdD0qIHwgLS1sb2NhbHM9KikKKysgICAgbG9jYWxzdGF0ZWRpcj0kYWNfb3B0YXJnIDs7CisrCisrICAtbWFuZGlyIHwgLS1tYW5kaXIgfCAtLW1hbmRpIHwgLS1tYW5kIHwgLS1tYW4gfCAtLW1hIHwgLS1tKQorKyAgICBhY19wcmV2PW1hbmRpciA7OworKyAgLW1hbmRpcj0qIHwgLS1tYW5kaXI9KiB8IC0tbWFuZGk9KiB8IC0tbWFuZD0qIHwgLS1tYW49KiB8IC0tbWE9KiB8IC0tbT0qKQorKyAgICBtYW5kaXI9JGFjX29wdGFyZyA7OworKworKyAgLW5mcCB8IC0tbmZwIHwgLS1uZikKKysgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aG91dC1mcC4KKysgICAgd2l0aF9mcD1ubyA7OworKworKyAgLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXRlIHwgLS1uby1jcmVhdCB8IC0tbm8tY3JlYSB8IC0tbm8tY3JlIFwKKysgIHwgLS1uby1jciB8IC0tbm8tYyB8IC1uKQorKyAgICBub19jcmVhdGU9eWVzIDs7CisrCisrICAtbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvIHwgLS1uby1yZWN1cnNpIFwKKysgIHwgLS1uby1yZWN1cnMgfCAtLW5vLXJlY3VyIHwgLS1uby1yZWN1IHwgLS1uby1yZWMgfCAtLW5vLXJlIHwgLS1uby1yKQorKyAgICBub19yZWN1cnNpb249eWVzIDs7CisrCisrICAtb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpIHwgLS1vbGRpbmNsdWRlZCBcCisrICB8IC0tb2xkaW5jbHVkZSB8IC0tb2xkaW5jbHVkIHwgLS1vbGRpbmNsdSB8IC0tb2xkaW5jbCB8IC0tb2xkaW5jIFwKKysgIHwgLS1vbGRpbiB8IC0tb2xkaSB8IC0tb2xkIHwgLS1vbCB8IC0tbykKKysgICAgYWNfcHJldj1vbGRpbmNsdWRlZGlyIDs7CisrICAtb2xkaW5jbHVkZWRpcj0qIHwgLS1vbGRpbmNsdWRlZGlyPSogfCAtLW9sZGluY2x1ZGVkaT0qIHwgLS1vbGRpbmNsdWRlZD0qIFwKKysgIHwgLS1vbGRpbmNsdWRlPSogfCAtLW9sZGluY2x1ZD0qIHwgLS1vbGRpbmNsdT0qIHwgLS1vbGRpbmNsPSogfCAtLW9sZGluYz0qIFwKKysgIHwgLS1vbGRpbj0qIHwgLS1vbGRpPSogfCAtLW9sZD0qIHwgLS1vbD0qIHwgLS1vPSopCisrICAgIG9sZGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7OworKworKyAgLXByZWZpeCB8IC0tcHJlZml4IHwgLS1wcmVmaSB8IC0tcHJlZiB8IC0tcHJlIHwgLS1wciB8IC0tcCkKKysgICAgYWNfcHJldj1wcmVmaXggOzsKKysgIC1wcmVmaXg9KiB8IC0tcHJlZml4PSogfCAtLXByZWZpPSogfCAtLXByZWY9KiB8IC0tcHJlPSogfCAtLXByPSogfCAtLXA9KikKKysgICAgcHJlZml4PSRhY19vcHRhcmcgOzsKKysKKysgIC1wcm9ncmFtLXByZWZpeCB8IC0tcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dyYW0tcHJlZmkgfCAtLXByb2dyYW0tcHJlZiBcCisrICB8IC0tcHJvZ3JhbS1wcmUgfCAtLXByb2dyYW0tcHIgfCAtLXByb2dyYW0tcCkKKysgICAgYWNfcHJldj1wcm9ncmFtX3ByZWZpeCA7OworKyAgLXByb2dyYW0tcHJlZml4PSogfCAtLXByb2dyYW0tcHJlZml4PSogfCAtLXByb2dyYW0tcHJlZmk9KiBcCisrICB8IC0tcHJvZ3JhbS1wcmVmPSogfCAtLXByb2dyYW0tcHJlPSogfCAtLXByb2dyYW0tcHI9KiB8IC0tcHJvZ3JhbS1wPSopCisrICAgIHByb2dyYW1fcHJlZml4PSRhY19vcHRhcmcgOzsKKysKKysgIC1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaXggfCAtLXByb2dyYW0tc3VmZmkgfCAtLXByb2dyYW0tc3VmZiBcCisrICB8IC0tcHJvZ3JhbS1zdWYgfCAtLXByb2dyYW0tc3UgfCAtLXByb2dyYW0tcykKKysgICAgYWNfcHJldj1wcm9ncmFtX3N1ZmZpeCA7OworKyAgLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZmk9KiBcCisrICB8IC0tcHJvZ3JhbS1zdWZmPSogfCAtLXByb2dyYW0tc3VmPSogfCAtLXByb2dyYW0tc3U9KiB8IC0tcHJvZ3JhbS1zPSopCisrICAgIHByb2dyYW1fc3VmZml4PSRhY19vcHRhcmcgOzsKKysKKysgIC1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lIFwKKysgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW0gfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hIFwKKysgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS0gXAorKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtIHwgLS1wcm9ncmFtLXRyYW5zZm9yIFwKKysgIHwgLS1wcm9ncmFtLXRyYW5zZm8gfCAtLXByb2dyYW0tdHJhbnNmIFwKKysgIHwgLS1wcm9ncmFtLXRyYW5zIHwgLS1wcm9ncmFtLXRyYW4gXAorKyAgfCAtLXByb2dyLXRyYSB8IC0tcHJvZ3JhbS10ciB8IC0tcHJvZ3JhbS10KQorKyAgICBhY19wcmV2PXByb2dyYW1fdHJhbnNmb3JtX25hbWUgOzsKKysgIC1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9KiBcCisrICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hPSogXAorKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW49KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tPSogXAorKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtPSogfCAtLXByb2dyYW0tdHJhbnNmb3I9KiBcCisrICB8IC0tcHJvZ3JhbS10cmFuc2ZvPSogfCAtLXByb2dyYW0tdHJhbnNmPSogXAorKyAgfCAtLXByb2dyYW0tdHJhbnM9KiB8IC0tcHJvZ3JhbS10cmFuPSogXAorKyAgfCAtLXByb2dyLXRyYT0qIHwgLS1wcm9ncmFtLXRyPSogfCAtLXByb2dyYW0tdD0qKQorKyAgICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSRhY19vcHRhcmcgOzsKKysKKysgIC1wZGZkaXIgfCAtLXBkZmRpciB8IC0tcGRmZGkgfCAtLXBkZmQgfCAtLXBkZiB8IC0tcGQpCisrICAgIGFjX3ByZXY9cGRmZGlyIDs7CisrICAtcGRmZGlyPSogfCAtLXBkZmRpcj0qIHwgLS1wZGZkaT0qIHwgLS1wZGZkPSogfCAtLXBkZj0qIHwgLS1wZD0qKQorKyAgICBwZGZkaXI9JGFjX29wdGFyZyA7OworKworKyAgLXBzZGlyIHwgLS1wc2RpciB8IC0tcHNkaSB8IC0tcHNkIHwgLS1wcykKKysgICAgYWNfcHJldj1wc2RpciA7OworKyAgLXBzZGlyPSogfCAtLXBzZGlyPSogfCAtLXBzZGk9KiB8IC0tcHNkPSogfCAtLXBzPSopCisrICAgIHBzZGlyPSRhY19vcHRhcmcgOzsKKysKKysgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCisrICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKKysgICAgc2lsZW50PXllcyA7OworKworKyAgLXNiaW5kaXIgfCAtLXNiaW5kaXIgfCAtLXNiaW5kaSB8IC0tc2JpbmQgfCAtLXNiaW4gfCAtLXNiaSB8IC0tc2IpCisrICAgIGFjX3ByZXY9c2JpbmRpciA7OworKyAgLXNiaW5kaXI9KiB8IC0tc2JpbmRpcj0qIHwgLS1zYmluZGk9KiB8IC0tc2JpbmQ9KiB8IC0tc2Jpbj0qIFwKKysgIHwgLS1zYmk9KiB8IC0tc2I9KikKKysgICAgc2JpbmRpcj0kYWNfb3B0YXJnIDs7CisrCisrICAtc2hhcmVkc3RhdGVkaXIgfCAtLXNoYXJlZHN0YXRlZGlyIHwgLS1zaGFyZWRzdGF0ZWRpIFwKKysgIHwgLS1zaGFyZWRzdGF0ZWQgfCAtLXNoYXJlZHN0YXRlIHwgLS1zaGFyZWRzdGF0IHwgLS1zaGFyZWRzdGEgXAorKyAgfCAtLXNoYXJlZHN0IHwgLS1zaGFyZWRzIHwgLS1zaGFyZWQgfCAtLXNoYXJlIHwgLS1zaGFyIFwKKysgIHwgLS1zaGEgfCAtLXNoKQorKyAgICBhY19wcmV2PXNoYXJlZHN0YXRlZGlyIDs7CisrICAtc2hhcmVkc3RhdGVkaXI9KiB8IC0tc2hhcmVkc3RhdGVkaXI9KiB8IC0tc2hhcmVkc3RhdGVkaT0qIFwKKysgIHwgLS1zaGFyZWRzdGF0ZWQ9KiB8IC0tc2hhcmVkc3RhdGU9KiB8IC0tc2hhcmVkc3RhdD0qIHwgLS1zaGFyZWRzdGE9KiBcCisrICB8IC0tc2hhcmVkc3Q9KiB8IC0tc2hhcmVkcz0qIHwgLS1zaGFyZWQ9KiB8IC0tc2hhcmU9KiB8IC0tc2hhcj0qIFwKKysgIHwgLS1zaGE9KiB8IC0tc2g9KikKKysgICAgc2hhcmVkc3RhdGVkaXI9JGFjX29wdGFyZyA7OworKworKyAgLXNpdGUgfCAtLXNpdGUgfCAtLXNpdCkKKysgICAgYWNfcHJldj1zaXRlIDs7CisrICAtc2l0ZT0qIHwgLS1zaXRlPSogfCAtLXNpdD0qKQorKyAgICBzaXRlPSRhY19vcHRhcmcgOzsKKysKKysgIC1zcmNkaXIgfCAtLXNyY2RpciB8IC0tc3JjZGkgfCAtLXNyY2QgfCAtLXNyYyB8IC0tc3IpCisrICAgIGFjX3ByZXY9c3JjZGlyIDs7CisrICAtc3JjZGlyPSogfCAtLXNyY2Rpcj0qIHwgLS1zcmNkaT0qIHwgLS1zcmNkPSogfCAtLXNyYz0qIHwgLS1zcj0qKQorKyAgICBzcmNkaXI9JGFjX29wdGFyZyA7OworKworKyAgLXN5c2NvbmZkaXIgfCAtLXN5c2NvbmZkaXIgfCAtLXN5c2NvbmZkaSB8IC0tc3lzY29uZmQgfCAtLXN5c2NvbmYgXAorKyAgfCAtLXN5c2NvbiB8IC0tc3lzY28gfCAtLXN5c2MgfCAtLXN5cyB8IC0tc3kpCisrICAgIGFjX3ByZXY9c3lzY29uZmRpciA7OworKyAgLXN5c2NvbmZkaXI9KiB8IC0tc3lzY29uZmRpcj0qIHwgLS1zeXNjb25mZGk9KiB8IC0tc3lzY29uZmQ9KiB8IC0tc3lzY29uZj0qIFwKKysgIHwgLS1zeXNjb249KiB8IC0tc3lzY289KiB8IC0tc3lzYz0qIHwgLS1zeXM9KiB8IC0tc3k9KikKKysgICAgc3lzY29uZmRpcj0kYWNfb3B0YXJnIDs7CisrCisrICAtdGFyZ2V0IHwgLS10YXJnZXQgfCAtLXRhcmdlIHwgLS10YXJnIHwgLS10YXIgfCAtLXRhIHwgLS10KQorKyAgICBhY19wcmV2PXRhcmdldF9hbGlhcyA7OworKyAgLXRhcmdldD0qIHwgLS10YXJnZXQ9KiB8IC0tdGFyZ2U9KiB8IC0tdGFyZz0qIHwgLS10YXI9KiB8IC0tdGE9KiB8IC0tdD0qKQorKyAgICB0YXJnZXRfYWxpYXM9JGFjX29wdGFyZyA7OworKworKyAgLXYgfCAtdmVyYm9zZSB8IC0tdmVyYm9zZSB8IC0tdmVyYm9zIHwgLS12ZXJibyB8IC0tdmVyYikKKysgICAgdmVyYm9zZT15ZXMgOzsKKysKKysgIC12ZXJzaW9uIHwgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLVYpCisrICAgIGFjX2luaXRfdmVyc2lvbj06IDs7CisrCisrICAtd2l0aC0qIHwgLS13aXRoLSopCisrICAgIGFjX3BhY2thZ2U9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRoLVwoW149XSpcKSdgCisrICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKysgICAgZXhwciAieCRhY19wYWNrYWdlIiA6ICIuKlteLS5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorKyAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY19wYWNrYWdlIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysgICAgYWNfcGFja2FnZT1gZWNobyAkYWNfcGFja2FnZSB8IHNlZCAncy9bLS5dL18vZydgCisrICAgIGV2YWwgd2l0aF8kYWNfcGFja2FnZT1cJGFjX29wdGFyZyA7OworKworKyAgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qKQorKyAgICBhY19wYWNrYWdlPWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aG91dC1cKC4qXCknYAorKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisrICAgIGV4cHIgIngkYWNfcGFja2FnZSIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKysgICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfcGFja2FnZSIgPiYyCisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX3BhY2thZ2UgfCBzZWQgJ3MvWy0uXS9fL2cnYAorKyAgICBldmFsIHdpdGhfJGFjX3BhY2thZ2U9bm8gOzsKKysKKysgIC0teCkKKysgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aC14LgorKyAgICB3aXRoX3g9eWVzIDs7CisrCisrICAteC1pbmNsdWRlcyB8IC0teC1pbmNsdWRlcyB8IC0teC1pbmNsdWRlIHwgLS14LWluY2x1ZCB8IC0teC1pbmNsdSBcCisrICB8IC0teC1pbmNsIHwgLS14LWluYyB8IC0teC1pbiB8IC0teC1pKQorKyAgICBhY19wcmV2PXhfaW5jbHVkZXMgOzsKKysgIC14LWluY2x1ZGVzPSogfCAtLXgtaW5jbHVkZXM9KiB8IC0teC1pbmNsdWRlPSogfCAtLXgtaW5jbHVkPSogfCAtLXgtaW5jbHU9KiBcCisrICB8IC0teC1pbmNsPSogfCAtLXgtaW5jPSogfCAtLXgtaW49KiB8IC0teC1pPSopCisrICAgIHhfaW5jbHVkZXM9JGFjX29wdGFyZyA7OworKworKyAgLXgtbGlicmFyaWVzIHwgLS14LWxpYnJhcmllcyB8IC0teC1saWJyYXJpZSB8IC0teC1saWJyYXJpIFwKKysgIHwgLS14LWxpYnJhciB8IC0teC1saWJyYSB8IC0teC1saWJyIHwgLS14LWxpYiB8IC0teC1saSB8IC0teC1sKQorKyAgICBhY19wcmV2PXhfbGlicmFyaWVzIDs7CisrICAteC1saWJyYXJpZXM9KiB8IC0teC1saWJyYXJpZXM9KiB8IC0teC1saWJyYXJpZT0qIHwgLS14LWxpYnJhcmk9KiBcCisrICB8IC0teC1saWJyYXI9KiB8IC0teC1saWJyYT0qIHwgLS14LWxpYnI9KiB8IC0teC1saWI9KiB8IC0teC1saT0qIHwgLS14LWw9KikKKysgICAgeF9saWJyYXJpZXM9JGFjX29wdGFyZyA7OworKworKyAgLSopIHsgZWNobyAiJGFzX21lOiBlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvbjogJGFjX29wdGlvbgorK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysgICAgOzsKKysKKysgICo9KikKKysgICAgYWNfZW52dmFyPWBleHByICJ4JGFjX29wdGlvbiIgOiAneFwoW149XSpcKT0nYAorKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisrICAgIGV4cHIgIngkYWNfZW52dmFyIiA6ICIuKlteXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKysgICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgdmFyaWFibGUgbmFtZTogJGFjX2VudnZhciIgPiYyCisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrICAgIGV2YWwgJGFjX2VudnZhcj1cJGFjX29wdGFyZworKyAgICBleHBvcnQgJGFjX2VudnZhciA7OworKworKyAgKikKKysgICAgIyBGSVhNRTogc2hvdWxkIGJlIHJlbW92ZWQgaW4gYXV0b2NvbmYgMy4wLgorKyAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IHlvdSBzaG91bGQgdXNlIC0tYnVpbGQsIC0taG9zdCwgLS10YXJnZXQiID4mMgorKyAgICBleHByICJ4JGFjX29wdGlvbiIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKysgICAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IGludmFsaWQgaG9zdCB0eXBlOiAkYWNfb3B0aW9uIiA+JjIKKysgICAgOiAke2J1aWxkX2FsaWFzPSRhY19vcHRpb259ICR7aG9zdF9hbGlhcz0kYWNfb3B0aW9ufSAke3RhcmdldF9hbGlhcz0kYWNfb3B0aW9ufQorKyAgICA7OworKworKyAgZXNhYworK2RvbmUKKysKKytpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKysgIGFjX29wdGlvbj0tLWBlY2hvICRhY19wcmV2IHwgc2VkICdzL18vLS9nJ2AKKysgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogbWlzc2luZyBhcmd1bWVudCB0byAkYWNfb3B0aW9uIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKytmaQorKworKyMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lcy4KKytmb3IgYWNfdmFyIGluCWV4ZWNfcHJlZml4IHByZWZpeCBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFyb290ZGlyIFwKKysJCWRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBsb2NhbHN0YXRlZGlyIGluY2x1ZGVkaXIgXAorKwkJb2xkaW5jbHVkZWRpciBkb2NkaXIgaW5mb2RpciBodG1sZGlyIGR2aWRpciBwZGZkaXIgcHNkaXIgXAorKwkJbGliZGlyIGxvY2FsZWRpciBtYW5kaXIKKytkbworKyAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisrICBjYXNlICRhY192YWwgaW4KKysgICAgW1xcLyRdKiB8ID86W1xcL10qICkgIGNvbnRpbnVlOzsKKysgICAgTk9ORSB8ICcnICkgY2FzZSAkYWNfdmFyIGluICpwcmVmaXggKSBjb250aW51ZTs7IGVzYWM7OworKyAgZXNhYworKyAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBleHBlY3RlZCBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBmb3IgLS0kYWNfdmFyOiAkYWNfdmFsIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKytkb25lCisrCisrIyBUaGVyZSBtaWdodCBiZSBwZW9wbGUgd2hvIGRlcGVuZCBvbiB0aGUgb2xkIGJyb2tlbiBiZWhhdmlvcjogYCRob3N0JworKyMgdXNlZCB0byBob2xkIHRoZSBhcmd1bWVudCBvZiAtLWhvc3QgZXRjLgorKyMgRklYTUU6IFRvIHJlbW92ZSBzb21lIGRheS4KKytidWlsZD0kYnVpbGRfYWxpYXMKKytob3N0PSRob3N0X2FsaWFzCisrdGFyZ2V0PSR0YXJnZXRfYWxpYXMKKysKKysjIEZJWE1FOiBUbyByZW1vdmUgc29tZSBkYXkuCisraWYgdGVzdCAieCRob3N0X2FsaWFzIiAhPSB4OyB0aGVuCisrICBpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiA9IHg7IHRoZW4KKysgICAgY3Jvc3NfY29tcGlsaW5nPW1heWJlCisrICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogSWYgeW91IHdhbnRlZCB0byBzZXQgdGhlIC0tYnVpbGQgdHlwZSwgZG9uJ3QgdXNlIC0taG9zdC4KKysgICAgSWYgYSBjcm9zcyBjb21waWxlciBpcyBkZXRlY3RlZCB0aGVuIGNyb3NzIGNvbXBpbGUgbW9kZSB3aWxsIGJlIHVzZWQuIiA+JjIKKysgIGVsaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgIT0gIngkaG9zdF9hbGlhcyI7IHRoZW4KKysgICAgY3Jvc3NfY29tcGlsaW5nPXllcworKyAgZmkKKytmaQorKworK2FjX3Rvb2xfcHJlZml4PQorK3Rlc3QgLW4gIiRob3N0X2FsaWFzIiAmJiBhY190b29sX3ByZWZpeD0kaG9zdF9hbGlhcy0KKysKKyt0ZXN0ICIkc2lsZW50IiA9IHllcyAmJiBleGVjIDY+L2Rldi9udWxsCisrCisrCisrYWNfcHdkPWBwd2RgICYmIHRlc3QgLW4gIiRhY19wd2QiICYmCisrYWNfbHNfZGk9YGxzIC1kaSAuYCAmJgorK2FjX3B3ZF9sc19kaT1gY2QgIiRhY19wd2QiICYmIGxzIC1kaSAuYCB8fAorKyAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBXb3JraW5nIGRpcmVjdG9yeSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCIgPiYyCisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrdGVzdCAiWCRhY19sc19kaSIgPSAiWCRhY19wd2RfbHNfZGkiIHx8CisrICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IHB3ZCBkb2VzIG5vdCByZXBvcnQgbmFtZSBvZiB3b3JraW5nIGRpcmVjdG9yeSIgPiYyCisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrCisrCisrIyBGaW5kIHRoZSBzb3VyY2UgZmlsZXMsIGlmIGxvY2F0aW9uIHdhcyBub3Qgc3BlY2lmaWVkLgorK2lmIHRlc3QgLXogIiRzcmNkaXIiOyB0aGVuCisrICBhY19zcmNkaXJfZGVmYXVsdGVkPXllcworKyAgIyBUcnkgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgc2NyaXB0LCB0aGVuIHRoZSBwYXJlbnQgZGlyZWN0b3J5LgorKyAgYWNfY29uZmRpcj1gJGFzX2Rpcm5hbWUgLS0gIiQwIiB8fAorKyRhc19leHByIFgiJDAiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisrCSBYIiQwIiA6ICdYXCgvL1wpW14vXScgXHwgXAorKwkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKysJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorK2VjaG8gWCIkMCIgfAorKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXC9cKSQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cKS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICBzLy4qLy4vOyBxJ2AKKysgIHNyY2Rpcj0kYWNfY29uZmRpcgorKyAgaWYgdGVzdCAhIC1yICIkc3JjZGlyLyRhY191bmlxdWVfZmlsZSI7IHRoZW4KKysgICAgc3JjZGlyPS4uCisrICBmaQorK2Vsc2UKKysgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9bm8KKytmaQorK2lmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCisrICB0ZXN0ICIkYWNfc3JjZGlyX2RlZmF1bHRlZCIgPSB5ZXMgJiYgc3JjZGlyPSIkYWNfY29uZmRpciBvciAuLiIKKysgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkc3JjZGlyIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKytmaQorK2FjX21zZz0ic291cmNlcyBhcmUgaW4gJHNyY2RpciwgYnV0IFxgY2QgJHNyY2RpcicgZG9lcyBub3Qgd29yayIKKythY19hYnNfY29uZmRpcj1gKAorKwljZCAiJHNyY2RpciIgJiYgdGVzdCAtciAiLi8kYWNfdW5pcXVlX2ZpbGUiIHx8IHsgZWNobyAiJGFzX21lOiBlcnJvcjogJGFjX21zZyIgPiYyCisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrCXB3ZClgCisrIyBXaGVuIGJ1aWxkaW5nIGluIHBsYWNlLCBzZXQgc3JjZGlyPS4KKytpZiB0ZXN0ICIkYWNfYWJzX2NvbmZkaXIiID0gIiRhY19wd2QiOyB0aGVuCisrICBzcmNkaXI9LgorK2ZpCisrIyBSZW1vdmUgdW5uZWNlc3NhcnkgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIHNyY2Rpci4KKysjIERvdWJsZSBzbGFzaGVzIGluIGZpbGUgbmFtZXMgaW4gb2JqZWN0IGZpbGUgZGVidWdnaW5nIGluZm8KKysjIG1lc3MgdXAgTS14IGdkYiBpbiBFbWFjcy4KKytjYXNlICRzcmNkaXIgaW4KKysqLykgc3JjZGlyPWBleHByICJYJHNyY2RpciIgOiAnWFwoLipbXi9dXCknIFx8ICJYJHNyY2RpciIgOiAnWFwoLipcKSdgOzsKKytlc2FjCisrZm9yIGFjX3ZhciBpbiAkYWNfcHJlY2lvdXNfdmFyczsgZG8KKysgIGV2YWwgYWNfZW52XyR7YWNfdmFyfV9zZXQ9XCR7JHthY192YXJ9K3NldH0KKysgIGV2YWwgYWNfZW52XyR7YWNfdmFyfV92YWx1ZT1cJCR7YWNfdmFyfQorKyAgZXZhbCBhY19jdl9lbnZfJHthY192YXJ9X3NldD1cJHske2FjX3Zhcn0rc2V0fQorKyAgZXZhbCBhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlPVwkJHthY192YXJ9CisrZG9uZQorKworKyMKKysjIFJlcG9ydCB0aGUgLS1oZWxwIG1lc3NhZ2UuCisrIworK2lmIHRlc3QgIiRhY19pbml0X2hlbHAiID0gImxvbmciOyB0aGVuCisrICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KKysgICMgVGhpcyBtZXNzYWdlIGlzIHRvbyBsb25nIHRvIGJlIGEgc3RyaW5nIGluIHRoZSBBL1VYIDMuMSBzaC4KKysgIGNhdCA8PF9BQ0VPRgorK1xgY29uZmlndXJlJyBjb25maWd1cmVzIG5ld2xpYiBORVdMSUJfVkVSU0lPTiB0byBhZGFwdCB0byBtYW55IGtpbmRzIG9mIHN5c3RlbXMuCisrCisrVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtWQVI9VkFMVUVdLi4uCisrCisrVG8gYXNzaWduIGVudmlyb25tZW50IHZhcmlhYmxlcyAoZS5nLiwgQ0MsIENGTEFHUy4uLiksIHNwZWNpZnkgdGhlbSBhcworK1ZBUj1WQUxVRS4gIFNlZSBiZWxvdyBmb3IgZGVzY3JpcHRpb25zIG9mIHNvbWUgb2YgdGhlIHVzZWZ1bCB2YXJpYWJsZXMuCisrCisrRGVmYXVsdHMgZm9yIHRoZSBvcHRpb25zIGFyZSBzcGVjaWZpZWQgaW4gYnJhY2tldHMuCisrCisrQ29uZmlndXJhdGlvbjoKKysgIC1oLCAtLWhlbHAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0CisrICAgICAgLS1oZWxwPXNob3J0ICAgICAgICBkaXNwbGF5IG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhpcyBwYWNrYWdlCisrICAgICAgLS1oZWxwPXJlY3Vyc2l2ZSAgICBkaXNwbGF5IHRoZSBzaG9ydCBoZWxwIG9mIGFsbCB0aGUgaW5jbHVkZWQgcGFja2FnZXMKKysgIC1WLCAtLXZlcnNpb24gICAgICAgICAgIGRpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorKyAgLXEsIC0tcXVpZXQsIC0tc2lsZW50ICAgZG8gbm90IHByaW50IFxgY2hlY2tpbmcuLi4nIG1lc3NhZ2VzCisrICAgICAgLS1jYWNoZS1maWxlPUZJTEUgICBjYWNoZSB0ZXN0IHJlc3VsdHMgaW4gRklMRSBbZGlzYWJsZWRdCisrICAtQywgLS1jb25maWctY2FjaGUgICAgICBhbGlhcyBmb3IgXGAtLWNhY2hlLWZpbGU9Y29uZmlnLmNhY2hlJworKyAgLW4sIC0tbm8tY3JlYXRlICAgICAgICAgZG8gbm90IGNyZWF0ZSBvdXRwdXQgZmlsZXMKKysgICAgICAtLXNyY2Rpcj1ESVIgICAgICAgIGZpbmQgdGhlIHNvdXJjZXMgaW4gRElSIFtjb25maWd1cmUgZGlyIG9yIFxgLi4nXQorKworK0luc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKysgIC0tcHJlZml4PVBSRUZJWCAgICAgICAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzIGluIFBSRUZJWAorKwkJCSAgWyRhY19kZWZhdWx0X3ByZWZpeF0KKysgIC0tZXhlYy1wcmVmaXg9RVBSRUZJWCAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBmaWxlcyBpbiBFUFJFRklYCisrCQkJICBbUFJFRklYXQorKworK0J5IGRlZmF1bHQsIFxgbWFrZSBpbnN0YWxsJyB3aWxsIGluc3RhbGwgYWxsIHRoZSBmaWxlcyBpbgorK1xgJGFjX2RlZmF1bHRfcHJlZml4L2JpbicsIFxgJGFjX2RlZmF1bHRfcHJlZml4L2xpYicgZXRjLiAgWW91IGNhbiBzcGVjaWZ5CisrYW4gaW5zdGFsbGF0aW9uIHByZWZpeCBvdGhlciB0aGFuIFxgJGFjX2RlZmF1bHRfcHJlZml4JyB1c2luZyBcYC0tcHJlZml4JywKKytmb3IgaW5zdGFuY2UgXGAtLXByZWZpeD1cJEhPTUUnLgorKworK0ZvciBiZXR0ZXIgY29udHJvbCwgdXNlIHRoZSBvcHRpb25zIGJlbG93LgorKworK0ZpbmUgdHVuaW5nIG9mIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6CisrICAtLWJpbmRpcj1ESVIgICAgICAgICAgIHVzZXIgZXhlY3V0YWJsZXMgW0VQUkVGSVgvYmluXQorKyAgLS1zYmluZGlyPURJUiAgICAgICAgICBzeXN0ZW0gYWRtaW4gZXhlY3V0YWJsZXMgW0VQUkVGSVgvc2Jpbl0KKysgIC0tbGliZXhlY2Rpcj1ESVIgICAgICAgcHJvZ3JhbSBleGVjdXRhYmxlcyBbRVBSRUZJWC9saWJleGVjXQorKyAgLS1zeXNjb25mZGlyPURJUiAgICAgICByZWFkLW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL2V0Y10KKysgIC0tc2hhcmVkc3RhdGVkaXI9RElSICAgbW9kaWZpYWJsZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbUFJFRklYL2NvbV0KKysgIC0tbG9jYWxzdGF0ZWRpcj1ESVIgICAgbW9kaWZpYWJsZSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvdmFyXQorKyAgLS1saWJkaXI9RElSICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgW0VQUkVGSVgvbGliXQorKyAgLS1pbmNsdWRlZGlyPURJUiAgICAgICBDIGhlYWRlciBmaWxlcyBbUFJFRklYL2luY2x1ZGVdCisrICAtLW9sZGluY2x1ZGVkaXI9RElSICAgIEMgaGVhZGVyIGZpbGVzIGZvciBub24tZ2NjIFsvdXNyL2luY2x1ZGVdCisrICAtLWRhdGFyb290ZGlyPURJUiAgICAgIHJlYWQtb25seSBhcmNoLi1pbmRlcGVuZGVudCBkYXRhIHJvb3QgW1BSRUZJWC9zaGFyZV0KKysgIC0tZGF0YWRpcj1ESVIgICAgICAgICAgcmVhZC1vbmx5IGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtEQVRBUk9PVERJUl0KKysgIC0taW5mb2Rpcj1ESVIgICAgICAgICAgaW5mbyBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9pbmZvXQorKyAgLS1sb2NhbGVkaXI9RElSICAgICAgICBsb2NhbGUtZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSL2xvY2FsZV0KKysgIC0tbWFuZGlyPURJUiAgICAgICAgICAgbWFuIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL21hbl0KKysgIC0tZG9jZGlyPURJUiAgICAgICAgICAgZG9jdW1lbnRhdGlvbiByb290IFtEQVRBUk9PVERJUi9kb2MvbmV3bGliXQorKyAgLS1odG1sZGlyPURJUiAgICAgICAgICBodG1sIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKysgIC0tZHZpZGlyPURJUiAgICAgICAgICAgZHZpIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKysgIC0tcGRmZGlyPURJUiAgICAgICAgICAgcGRmIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKysgIC0tcHNkaXI9RElSICAgICAgICAgICAgcHMgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorK19BQ0VPRgorKworKyAgY2F0IDw8XF9BQ0VPRgorKworK1Byb2dyYW0gbmFtZXM6CisrICAtLXByb2dyYW0tcHJlZml4PVBSRUZJWCAgICAgICAgICAgIHByZXBlbmQgUFJFRklYIHRvIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCisrICAtLXByb2dyYW0tc3VmZml4PVNVRkZJWCAgICAgICAgICAgIGFwcGVuZCBTVUZGSVggdG8gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKKysgIC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT1QUk9HUkFNICAgcnVuIHNlZCBQUk9HUkFNIG9uIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCisrCisrU3lzdGVtIHR5cGVzOgorKyAgLS1idWlsZD1CVUlMRCAgICAgY29uZmlndXJlIGZvciBidWlsZGluZyBvbiBCVUlMRCBbZ3Vlc3NlZF0KKysgIC0taG9zdD1IT1NUICAgICAgIGNyb3NzLWNvbXBpbGUgdG8gYnVpbGQgcHJvZ3JhbXMgdG8gcnVuIG9uIEhPU1QgW0JVSUxEXQorKyAgLS10YXJnZXQ9VEFSR0VUICAgY29uZmlndXJlIGZvciBidWlsZGluZyBjb21waWxlcnMgZm9yIFRBUkdFVCBbSE9TVF0KKytfQUNFT0YKKytmaQorKworK2lmIHRlc3QgLW4gIiRhY19pbml0X2hlbHAiOyB0aGVuCisrICBjYXNlICRhY19pbml0X2hlbHAgaW4KKysgICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBuZXdsaWIgTkVXTElCX1ZFUlNJT046Ijs7CisrICAgZXNhYworKyAgY2F0IDw8XF9BQ0VPRgorKworK09wdGlvbmFsIEZlYXR1cmVzOgorKyAgLS1kaXNhYmxlLUZFQVRVUkUgICAgICAgZG8gbm90IGluY2x1ZGUgRkVBVFVSRSAoc2FtZSBhcyAtLWVuYWJsZS1GRUFUVVJFPW5vKQorKyAgLS1lbmFibGUtRkVBVFVSRVs9QVJHXSAgaW5jbHVkZSBGRUFUVVJFIFtBUkc9eWVzXQorKyAgLS1lbmFibGUtbXVsdGlsaWIgICAgICAgICBidWlsZCBtYW55IGxpYnJhcnkgdmVyc2lvbnMgKGRlZmF1bHQpCisrICAtLWVuYWJsZS10YXJnZXQtb3B0c3BhY2UgIG9wdGltaXplIGZvciBzcGFjZQorKyAgLS1lbmFibGUtbWFsbG9jLWRlYnVnZ2luZyBpbmRpY2F0ZSBtYWxsb2MgZGVidWdnaW5nIHJlcXVlc3RlZAorKyAgLS1lbmFibGUtbmV3bGliLW11bHRpdGhyZWFkICAgICAgICBlbmFibGUgc3VwcG9ydCBmb3IgbXVsdGlwbGUgdGhyZWFkcworKyAgLS1lbmFibGUtbmV3bGliLWljb252ICAgICBlbmFibGUgaWNvbnYgbGlicmFyeSBzdXBwb3J0CisrICAtLWVuYWJsZS1uZXdsaWItZWxpeC1sZXZlbCAgICAgICAgIHN1cHBseSBkZXNpcmVkIGVsaXggbGlicmFyeSBsZXZlbCAoMS00KQorKyAgLS1kaXNhYmxlLW5ld2xpYi1pby1mbG9hdCBkaXNhYmxlIHByaW50Zi9zY2FuZiBmYW1pbHkgZmxvYXQgc3VwcG9ydAorKyAgLS1kaXNhYmxlLW5ld2xpYi1zdXBwbGllZC1zeXNjYWxscyBkaXNhYmxlIG5ld2xpYiBmcm9tIHN1cHBseWluZyBzeXNjYWxscworKyAgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlIGVuYWJsZSBtYWtlIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgbm90IHVzZWZ1bAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCBzb21ldGltZXMgY29uZnVzaW5nKSB0byB0aGUgY2FzdWFsIGluc3RhbGxlcgorKworK19BQ0VPRgorK2FjX3N0YXR1cz0kPworK2ZpCisrCisraWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAicmVjdXJzaXZlIjsgdGhlbgorKyAgIyBJZiB0aGVyZSBhcmUgc3ViZGlycywgcmVwb3J0IHRoZWlyIHNwZWNpZmljIC0taGVscC4KKysgIGZvciBhY19kaXIgaW4gOiAkYWNfc3ViZGlyc19hbGw7IGRvIHRlc3QgIngkYWNfZGlyIiA9IHg6ICYmIGNvbnRpbnVlCisrICAgIHRlc3QgLWQgIiRhY19kaXIiIHx8IGNvbnRpbnVlCisrICAgIGFjX2J1aWxkZGlyPS4KKysKKytjYXNlICIkYWNfZGlyIiBpbgorKy4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKyopCisrICBhY19kaXJfc3VmZml4PS9gZWNobyAiJGFjX2RpciIgfCBzZWQgJ3MsXlwuW1xcL10sLCdgCisrICAjIEEgIi4uIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCisrICBhY190b3BfYnVpbGRkaXJfc3ViPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3MsL1teXFwvXSosLy4uLGc7cywvLCwnYAorKyAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgorKyAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKyAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7CisrICBlc2FjIDs7CisrZXNhYworK2FjX2Fic190b3BfYnVpbGRkaXI9JGFjX3B3ZAorK2FjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKKysjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorK2FjX3RvcF9idWlsZGRpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeAorKworK2Nhc2UgJHNyY2RpciBpbgorKyAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorKyAgICBhY19zcmNkaXI9LgorKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisrICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgbmFtZS4KKysgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKysgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCisrICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKysgICopICMgUmVsYXRpdmUgbmFtZS4KKysgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4CisrICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCisrICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7OworK2VzYWMKKythY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3NyY2RpciRhY19kaXJfc3VmZml4CisrCisrICAgIGNkICIkYWNfZGlyIiB8fCB7IGFjX3N0YXR1cz0kPzsgY29udGludWU7IH0KKysgICAgIyBDaGVjayBmb3IgZ3Vlc3RlZCBjb25maWd1cmUuCisrICAgIGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlLmdudSI7IHRoZW4KKysgICAgICBlY2hvICYmCisrICAgICAgJFNIRUxMICIkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUiIC0taGVscD1yZWN1cnNpdmUKKysgICAgZWxpZiB0ZXN0IC1mICIkYWNfc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KKysgICAgICBlY2hvICYmCisrICAgICAgJFNIRUxMICIkYWNfc3JjZGlyL2NvbmZpZ3VyZSIgLS1oZWxwPXJlY3Vyc2l2ZQorKyAgICBlbHNlCisrICAgICAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBubyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGlzIGluICRhY19kaXIiID4mMgorKyAgICBmaSB8fCBhY19zdGF0dXM9JD8KKysgICAgY2QgIiRhY19wd2QiIHx8IHsgYWNfc3RhdHVzPSQ/OyBicmVhazsgfQorKyAgZG9uZQorK2ZpCisrCisrdGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAkYWNfc3RhdHVzCisraWYgJGFjX2luaXRfdmVyc2lvbjsgdGhlbgorKyAgY2F0IDw8XF9BQ0VPRgorK25ld2xpYiBjb25maWd1cmUgTkVXTElCX1ZFUlNJT04KKytnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjEKKysKKytDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisrMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorK2dpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKytfQUNFT0YKKysgIGV4aXQKKytmaQorK2NhdCA+Y29uZmlnLmxvZyA8PF9BQ0VPRgorK1RoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCisrcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2VzIGEgbWlzdGFrZS4KKysKKytJdCB3YXMgY3JlYXRlZCBieSBuZXdsaWIgJGFzX21lIE5FV0xJQl9WRVJTSU9OLCB3aGljaCB3YXMKKytnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjEuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKysKKysgICQgJDAgJEAKKysKKytfQUNFT0YKKytleGVjIDU+PmNvbmZpZy5sb2cKKyt7CisrY2F0IDw8X0FTVU5BTUUKKysjIyAtLS0tLS0tLS0gIyMKKysjIyBQbGF0Zm9ybS4gIyMKKysjIyAtLS0tLS0tLS0gIyMKKysKKytob3N0bmFtZSA9IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorK3VuYW1lIC1tID0gYCh1bmFtZSAtbSkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorK3VuYW1lIC1yID0gYCh1bmFtZSAtcikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorK3VuYW1lIC1zID0gYCh1bmFtZSAtcykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorK3VuYW1lIC12ID0gYCh1bmFtZSAtdikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorKworKy91c3IvYmluL3VuYW1lIC1wID0gYCgvdXNyL2Jpbi91bmFtZSAtcCkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorKy9iaW4vdW5hbWUgLVggICAgID0gYCgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbCAgICAgfHwgZWNobyB1bmtub3duYAorKworKy9iaW4vYXJjaCAgICAgICAgICAgICAgPSBgKC9iaW4vYXJjaCkgMj4vZGV2L251bGwgICAgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKysvdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCisrL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyA9IGAoL3Vzci9jb252ZXgvZ2V0c3lzaW5mbykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorKy91c3IvYmluL2hvc3RpbmZvICAgICAgPSBgKC91c3IvYmluL2hvc3RpbmZvKSAyPi9kZXYvbnVsbCAgICAgIHx8IGVjaG8gdW5rbm93bmAKKysvYmluL21hY2hpbmUgICAgICAgICAgID0gYCgvYmluL21hY2hpbmUpIDI+L2Rldi9udWxsICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisrL3Vzci9iaW4vb3NsZXZlbCAgICAgICA9IGAoL3Vzci9iaW4vb3NsZXZlbCkgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAorKy9iaW4vdW5pdmVyc2UgICAgICAgICAgPSBgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKysKKytfQVNVTkFNRQorKworK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICBlY2hvICJQQVRIOiAkYXNfZGlyIgorK2RvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrfSA+JjUKKysKKytjYXQgPiY1IDw8X0FDRU9GCisrCisrCisrIyMgLS0tLS0tLS0tLS0gIyMKKysjIyBDb3JlIHRlc3RzLiAjIworKyMjIC0tLS0tLS0tLS0tICMjCisrCisrX0FDRU9GCisrCisrCisrIyBLZWVwIGEgdHJhY2Ugb2YgdGhlIGNvbW1hbmQgbGluZS4KKysjIFN0cmlwIG91dCAtLW5vLWNyZWF0ZSBhbmQgLS1uby1yZWN1cnNpb24gc28gdGhleSBkbyBub3QgcGlsZSB1cC4KKysjIFN0cmlwIG91dCAtLXNpbGVudCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gcmVjb3JkIGl0IGZvciBmdXR1cmUgcnVucy4KKysjIEFsc28gcXVvdGUgYW55IGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhLWNoYXJhY3RlcnMuCisrIyBNYWtlIHR3byBwYXNzZXMgdG8gYWxsb3cgZm9yIHByb3BlciBkdXBsaWNhdGUtYXJndW1lbnQgc3VwcHJlc3Npb24uCisrYWNfY29uZmlndXJlX2FyZ3M9CisrYWNfY29uZmlndXJlX2FyZ3MwPQorK2FjX2NvbmZpZ3VyZV9hcmdzMT0KKythY19tdXN0X2tlZXBfbmV4dD1mYWxzZQorK2ZvciBhY19wYXNzIGluIDEgMgorK2RvCisrICBmb3IgYWNfYXJnCisrICBkbworKyAgICBjYXNlICRhY19hcmcgaW4KKysgICAgLW5vLWNyZWF0ZSB8IC0tbm8tYyogfCAtbiB8IC1uby1yZWN1cnNpb24gfCAtLW5vLXIqKSBjb250aW51ZSA7OworKyAgICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorKyAgICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKKysgICAgICBjb250aW51ZSA7OworKyAgICAqXCcqKQorKyAgICAgIGFjX2FyZz1gZWNobyAiJGFjX2FyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKysgICAgZXNhYworKyAgICBjYXNlICRhY19wYXNzIGluCisrICAgIDEpIGFjX2NvbmZpZ3VyZV9hcmdzMD0iJGFjX2NvbmZpZ3VyZV9hcmdzMCAnJGFjX2FyZyciIDs7CisrICAgIDIpCisrICAgICAgYWNfY29uZmlndXJlX2FyZ3MxPSIkYWNfY29uZmlndXJlX2FyZ3MxICckYWNfYXJnJyIKKysgICAgICBpZiB0ZXN0ICRhY19tdXN0X2tlZXBfbmV4dCA9IHRydWU7IHRoZW4KKysJYWNfbXVzdF9rZWVwX25leHQ9ZmFsc2UgIyBHb3QgdmFsdWUsIGJhY2sgdG8gbm9ybWFsLgorKyAgICAgIGVsc2UKKysJY2FzZSAkYWNfYXJnIGluCisrCSAgKj0qIHwgLS1jb25maWctY2FjaGUgfCAtQyB8IC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKiBcCisrCSAgfCAtZW5hYmxlLSogfCAtLWVuYWJsZS0qIHwgLWdhcyB8IC0tZyogfCAtbmZwIHwgLS1uZiogXAorKwkgIHwgLXEgfCAtcXVpZXQgfCAtLXEqIHwgLXNpbGVudCB8IC0tc2lsKiB8IC12IHwgLXZlcmIqIFwKKysJICB8IC13aXRoLSogfCAtLXdpdGgtKiB8IC13aXRob3V0LSogfCAtLXdpdGhvdXQtKiB8IC0teCkKKysJICAgIGNhc2UgIiRhY19jb25maWd1cmVfYXJnczAgIiBpbgorKwkgICAgICAiJGFjX2NvbmZpZ3VyZV9hcmdzMSIqIiAnJGFjX2FyZycgIiogKSBjb250aW51ZSA7OworKwkgICAgZXNhYworKwkgICAgOzsKKysJICAtKiApIGFjX211c3Rfa2VlcF9uZXh0PXRydWUgOzsKKysJZXNhYworKyAgICAgIGZpCisrICAgICAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAnJGFjX2FyZyciCisrICAgICAgOzsKKysgICAgZXNhYworKyAgZG9uZQorK2RvbmUKKyskYXNfdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MwIHx8IHRlc3QgIiR7YWNfY29uZmlndXJlX2FyZ3MwK3NldH0iICE9IHNldCB8fCB7IGFjX2NvbmZpZ3VyZV9hcmdzMD07IGV4cG9ydCBhY19jb25maWd1cmVfYXJnczA7IH0KKyskYXNfdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MxIHx8IHRlc3QgIiR7YWNfY29uZmlndXJlX2FyZ3MxK3NldH0iICE9IHNldCB8fCB7IGFjX2NvbmZpZ3VyZV9hcmdzMT07IGV4cG9ydCBhY19jb25maWd1cmVfYXJnczE7IH0KKysKKysjIFdoZW4gaW50ZXJydXB0ZWQgb3IgZXhpdCdkLCBjbGVhbnVwIHRlbXBvcmFyeSBmaWxlcywgYW5kIGNvbXBsZXRlCisrIyBjb25maWcubG9nLiAgV2UgcmVtb3ZlIGNvbW1lbnRzIGJlY2F1c2UgYW55d2F5IHRoZSBxdW90ZXMgaW4gdGhlcmUKKysjIHdvdWxkIGNhdXNlIHByb2JsZW1zIG9yIGxvb2sgdWdseS4KKysjIFdBUk5JTkc6IFVzZSAnXCcnIHRvIHJlcHJlc2VudCBhbiBhcG9zdHJvcGhlIHdpdGhpbiB0aGUgdHJhcC4KKysjIFdBUk5JTkc6IERvIG5vdCBzdGFydCB0aGUgdHJhcCBjb2RlIHdpdGggYSBuZXdsaW5lLCBkdWUgdG8gYSBGcmVlQlNEIDQuMCBidWcuCisrdHJhcCAnZXhpdF9zdGF0dXM9JD8KKysgICMgU2F2ZSBpbnRvIGNvbmZpZy5sb2cgc29tZSBpbmZvcm1hdGlvbiB0aGF0IG1pZ2h0IGhlbHAgaW4gZGVidWdnaW5nLgorKyAgeworKyAgICBlY2hvCisrCisrICAgIGNhdCA8PFxfQVNCT1gKKysjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgQ2FjaGUgdmFyaWFibGVzLiAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKytfQVNCT1gKKysgICAgZWNobworKyAgICAjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorKygKKysgIGZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfCBzZWQgLW4gJ1wnJ3MvXlwoW2EtekEtWl9dW2EtekEtWjAtOV9dKlwpPS4qL1wxL3AnXCcnYDsgZG8KKysgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisrICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAorKyAgICAqJHthc19ubH0qKQorKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorKyAgICAgICpfY3ZfKikgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogQ2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUuIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6IENhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lLiIgPiYyO30gOzsKKysgICAgICBlc2FjCisrICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisrICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAorKyAgICAgICopICRhc191bnNldCAkYWNfdmFyIDs7CisrICAgICAgZXNhYyA7OworKyAgICBlc2FjCisrICBkb25lCisrICAoc2V0KSAyPiYxIHwKKysgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPSdcJycgJ1wnJzsgc2V0KSAyPiYxYCBpbiAjKAorKyAgICAqJHthc19ubH1hY19zcGFjZT1cICopCisrICAgICAgc2VkIC1uIFwKKysJInMvJ1wnJy8nXCcnXFxcXCdcJycnXCcnL2c7CisrCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXCcnXFwyJ1wnJy9wIgorKyAgICAgIDs7ICMoCisrICAgICopCisrICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKKysgICAgICA7OworKyAgICBlc2FjIHwKKysgICAgc29ydAorKykKKysgICAgZWNobworKworKyAgICBjYXQgPDxcX0FTQk9YCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBPdXRwdXQgdmFyaWFibGVzLiAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisrX0FTQk9YCisrICAgIGVjaG8KKysgICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfdmFycworKyAgICBkbworKyAgICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorKyAgICAgIGNhc2UgJGFjX3ZhbCBpbgorKyAgICAgICpcJ1wnJyopIGFjX3ZhbD1gZWNobyAiJGFjX3ZhbCIgfCBzZWQgInMvJ1wnJy8nXCcnXFxcXFxcXFwnXCcnJ1wnJy9nImA7OworKyAgICAgIGVzYWMKKysgICAgICBlY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKKysgICAgZG9uZSB8IHNvcnQKKysgICAgZWNobworKworKyAgICBpZiB0ZXN0IC1uICIkYWNfc3Vic3RfZmlsZXMiOyB0aGVuCisrICAgICAgY2F0IDw8XF9BU0JPWAorKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBGaWxlIHN1YnN0aXR1dGlvbnMuICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworK19BU0JPWAorKyAgICAgIGVjaG8KKysgICAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF9maWxlcworKyAgICAgIGRvCisrCWV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorKwljYXNlICRhY192YWwgaW4KKysJKlwnXCcnKikgYWNfdmFsPWBlY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CisrCWVzYWMKKysJZWNobyAiJGFjX3Zhcj0nXCcnJGFjX3ZhbCdcJyciCisrICAgICAgZG9uZSB8IHNvcnQKKysgICAgICBlY2hvCisrICAgIGZpCisrCisrICAgIGlmIHRlc3QgLXMgY29uZmRlZnMuaDsgdGhlbgorKyAgICAgIGNhdCA8PFxfQVNCT1gKKysjIyAtLS0tLS0tLS0tLSAjIworKyMjIGNvbmZkZWZzLmguICMjCisrIyMgLS0tLS0tLS0tLS0gIyMKKytfQVNCT1gKKysgICAgICBlY2hvCisrICAgICAgY2F0IGNvbmZkZWZzLmgKKysgICAgICBlY2hvCisrICAgIGZpCisrICAgIHRlc3QgIiRhY19zaWduYWwiICE9IDAgJiYKKysgICAgICBlY2hvICIkYXNfbWU6IGNhdWdodCBzaWduYWwgJGFjX3NpZ25hbCIKKysgICAgZWNobyAiJGFzX21lOiBleGl0ICRleGl0X3N0YXR1cyIKKysgIH0gPiY1CisrICBybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogJiYKKysgICAgcm0gLWYgLXIgY29uZnRlc3QqIGNvbmZkZWZzKiBjb25mJCQqICRhY19jbGVhbl9maWxlcyAmJgorKyAgICBleGl0ICRleGl0X3N0YXR1cworKycgMAorK2ZvciBhY19zaWduYWwgaW4gMSAyIDEzIDE1OyBkbworKyAgdHJhcCAnYWNfc2lnbmFsPSckYWNfc2lnbmFsJzsgeyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAkYWNfc2lnbmFsCisrZG9uZQorK2FjX3NpZ25hbD0wCisrCisrIyBjb25mZGVmcy5oIGF2b2lkcyBPUyBjb21tYW5kIGxpbmUgbGVuZ3RoIGxpbWl0cyB0aGF0IERFRlMgY2FuIGV4Y2VlZC4KKytybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMuaAorKworKyMgUHJlZGVmaW5lZCBwcmVwcm9jZXNzb3IgdmFyaWFibGVzLgorKworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiJFBBQ0tBR0VfTkFNRSIKKytfQUNFT0YKKysKKysKKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgIiRQQUNLQUdFX1RBUk5BTUUiCisrX0FDRU9GCisrCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIkUEFDS0FHRV9WRVJTSU9OIgorK19BQ0VPRgorKworKworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICIkUEFDS0FHRV9TVFJJTkciCisrX0FDRU9GCisrCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgIiRQQUNLQUdFX0JVR1JFUE9SVCIKKytfQUNFT0YKKysKKysKKysjIExldCB0aGUgc2l0ZSBmaWxlIHNlbGVjdCBhbiBhbHRlcm5hdGUgY2FjaGUgZmlsZSBpZiBpdCB3YW50cyB0by4KKysjIFByZWZlciBleHBsaWNpdGx5IHNlbGVjdGVkIGZpbGUgdG8gYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbmVzLgorK2lmIHRlc3QgLW4gIiRDT05GSUdfU0lURSI7IHRoZW4KKysgIHNldCB4ICIkQ09ORklHX1NJVEUiCisrZWxpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKysgIHNldCB4ICIkcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlIiAiJHByZWZpeC9ldGMvY29uZmlnLnNpdGUiCisrZWxzZQorKyAgc2V0IHggIiRhY19kZWZhdWx0X3ByZWZpeC9zaGFyZS9jb25maWcuc2l0ZSIgXAorKwkiJGFjX2RlZmF1bHRfcHJlZml4L2V0Yy9jb25maWcuc2l0ZSIKKytmaQorK3NoaWZ0CisrZm9yIGFjX3NpdGVfZmlsZQorK2RvCisrICBpZiB0ZXN0IC1yICIkYWNfc2l0ZV9maWxlIjsgdGhlbgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNQorK2VjaG8gIiRhc19tZTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjY7fQorKyAgICBzZWQgJ3MvXi98IC8nICIkYWNfc2l0ZV9maWxlIiA+JjUKKysgICAgLiAiJGFjX3NpdGVfZmlsZSIKKysgIGZpCisrZG9uZQorKworK2lmIHRlc3QgLXIgIiRjYWNoZV9maWxlIjsgdGhlbgorKyAgIyBTb21lIHZlcnNpb25zIG9mIGJhc2ggd2lsbCBmYWlsIHRvIHNvdXJjZSAvZGV2L251bGwgKHNwZWNpYWwKKysgICMgZmlsZXMgYWN0dWFsbHkpLCBzbyB3ZSBhdm9pZCBkb2luZyB0aGF0LgorKyAgaWYgdGVzdCAtZiAiJGNhY2hlX2ZpbGUiOyB0aGVuCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorK2VjaG8gIiRhc19tZTogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKysgICAgY2FzZSAkY2FjaGVfZmlsZSBpbgorKyAgICAgIFtcXC9dKiB8ID86W1xcL10qICkgLiAiJGNhY2hlX2ZpbGUiOzsKKysgICAgICAqKSAgICAgICAgICAgICAgICAgICAgICAuICIuLyRjYWNoZV9maWxlIjs7CisrICAgIGVzYWMKKysgIGZpCisrZWxzZQorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorK2VjaG8gIiRhc19tZTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisrICA+JGNhY2hlX2ZpbGUKKytmaQorKworKyMgQ2hlY2sgdGhhdCB0aGUgcHJlY2lvdXMgdmFyaWFibGVzIHNhdmVkIGluIHRoZSBjYWNoZSBoYXZlIGtlcHQgdGhlIHNhbWUKKysjIHZhbHVlLgorK2FjX2NhY2hlX2NvcnJ1cHRlZD1mYWxzZQorK2ZvciBhY192YXIgaW4gJGFjX3ByZWNpb3VzX3ZhcnM7IGRvCisrICBldmFsIGFjX29sZF9zZXQ9XCRhY19jdl9lbnZfJHthY192YXJ9X3NldAorKyAgZXZhbCBhY19uZXdfc2V0PVwkYWNfZW52XyR7YWNfdmFyfV9zZXQKKysgIGV2YWwgYWNfb2xkX3ZhbD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWUKKysgIGV2YWwgYWNfbmV3X3ZhbD1cJGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWUKKysgIGNhc2UgJGFjX29sZF9zZXQsJGFjX25ld19zZXQgaW4KKysgICAgc2V0LCkKKysgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQorKyAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CisrICAgICxzZXQpCisrICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQorKyAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CisrICAgICwpOzsKKysgICAgKikKKysgICAgICBpZiB0ZXN0ICJ4JGFjX29sZF92YWwiICE9ICJ4JGFjX25ld192YWwiOyB0aGVuCisrCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQorKwl7IGVjaG8gIiRhc19tZTokTElORU5POiAgIGZvcm1lciB2YWx1ZTogICRhY19vbGRfdmFsIiA+JjUKKytlY2hvICIkYXNfbWU6ICAgZm9ybWVyIHZhbHVlOiAgJGFjX29sZF92YWwiID4mMjt9CisrCXsgZWNobyAiJGFzX21lOiRMSU5FTk86ICAgY3VycmVudCB2YWx1ZTogJGFjX25ld192YWwiID4mNQorK2VjaG8gIiRhc19tZTogICBjdXJyZW50IHZhbHVlOiAkYWNfbmV3X3ZhbCIgPiYyO30KKysJYWNfY2FjaGVfY29ycnVwdGVkPToKKysgICAgICBmaTs7CisrICBlc2FjCisrICAjIFBhc3MgcHJlY2lvdXMgdmFyaWFibGVzIHRvIGNvbmZpZy5zdGF0dXMuCisrICBpZiB0ZXN0ICIkYWNfbmV3X3NldCIgPSBzZXQ7IHRoZW4KKysgICAgY2FzZSAkYWNfbmV3X3ZhbCBpbgorKyAgICAqXCcqKSBhY19hcmc9JGFjX3Zhcj1gZWNobyAiJGFjX25ld192YWwiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisrICAgICopIGFjX2FyZz0kYWNfdmFyPSRhY19uZXdfdmFsIDs7CisrICAgIGVzYWMKKysgICAgY2FzZSAiICRhY19jb25maWd1cmVfYXJncyAiIGluCisrICAgICAgKiIgJyRhY19hcmcnICIqKSA7OyAjIEF2b2lkIGR1cHMuICBVc2Ugb2YgcXVvdGVzIGVuc3VyZXMgYWNjdXJhY3kuCisrICAgICAgKikgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAnJGFjX2FyZyciIDs7CisrICAgIGVzYWMKKysgIGZpCisrZG9uZQorK2lmICRhY19jYWNoZV9jb3JydXB0ZWQ7IHRoZW4KKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiYyO30KKysgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IHJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrZmkKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKythY19leHQ9YworK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCisrYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisrYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorKworKworKworK2FjX2F1eF9kaXI9CisrZm9yIGFjX2RpciBpbiAuLi8uLi8uLi8uLiAiJHNyY2RpciIvLi4vLi4vLi4vLi47IGRvCisrICBpZiB0ZXN0IC1mICIkYWNfZGlyL2luc3RhbGwtc2giOyB0aGVuCisrICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLXNoIC1jIgorKyAgICBicmVhaworKyAgZWxpZiB0ZXN0IC1mICIkYWNfZGlyL2luc3RhbGwuc2giOyB0aGVuCisrICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLnNoIC1jIgorKyAgICBicmVhaworKyAgZWxpZiB0ZXN0IC1mICIkYWNfZGlyL3NodG9vbCI7IHRoZW4KKysgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisrICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL3NodG9vbCBpbnN0YWxsIC1jIgorKyAgICBicmVhaworKyAgZmkKKytkb25lCisraWYgdGVzdCAteiAiJGFjX2F1eF9kaXIiOyB0aGVuCisrICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnN0YWxsLXNoIG9yIGluc3RhbGwuc2ggaW4gLi4vLi4vLi4vLi4gXCIkc3JjZGlyXCIvLi4vLi4vLi4vLi4iID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGluc3RhbGwtc2ggb3IgaW5zdGFsbC5zaCBpbiAuLi8uLi8uLi8uLiBcIiRzcmNkaXJcIi8uLi8uLi8uLi8uLiIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKytmaQorKworKyMgVGhlc2UgdGhyZWUgdmFyaWFibGVzIGFyZSB1bmRvY3VtZW50ZWQgYW5kIHVuc3VwcG9ydGVkLAorKyMgYW5kIGFyZSBpbnRlbmRlZCB0byBiZSB3aXRoZHJhd24gaW4gYSBmdXR1cmUgQXV0b2NvbmYgcmVsZWFzZS4KKysjIFRoZXkgY2FuIGNhdXNlIHNlcmlvdXMgcHJvYmxlbXMgaWYgYSBidWlsZGVyJ3Mgc291cmNlIHRyZWUgaXMgaW4gYSBkaXJlY3RvcnkKKysjIHdob3NlIGZ1bGwgbmFtZSBjb250YWlucyB1bnVzdWFsIGNoYXJhY3RlcnMuCisrYWNfY29uZmlnX2d1ZXNzPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorK2FjX2NvbmZpZ19zdWI9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorK2FjX2NvbmZpZ3VyZT0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZ3VyZSIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KKysKKysKKysKKysjIE1ha2Ugc3VyZSB3ZSBjYW4gcnVuIGNvbmZpZy5zdWIuCisrJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiBzdW40ID4vZGV2L251bGwgMj4mMSB8fAorKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IHJ1biAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZSIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZS4uLiAkRUNIT19DIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X2J1aWxkK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGFjX2J1aWxkX2FsaWFzPSRidWlsZF9hbGlhcworK3Rlc3QgIngkYWNfYnVpbGRfYWxpYXMiID0geCAmJgorKyAgYWNfYnVpbGRfYWxpYXM9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzImAKKyt0ZXN0ICJ4JGFjX2J1aWxkX2FsaWFzIiA9IHggJiYKKysgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBndWVzcyBidWlsZCB0eXBlOyB5b3UgbXVzdCBzcGVjaWZ5IG9uZSIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorK2FjX2N2X2J1aWxkPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICRhY19idWlsZF9hbGlhc2AgfHwKKysgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRhY19idWlsZF9hbGlhcyBmYWlsZWQiID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRhY19idWlsZF9hbGlhcyBmYWlsZWQiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrCisrZmkKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9idWlsZCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2J1aWxkIiA+JjY7IH0KKytjYXNlICRhY19jdl9idWlsZCBpbgorKyotKi0qKSA7OworKyopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGJ1aWxkIiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBidWlsZCIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworK2VzYWMKKytidWlsZD0kYWNfY3ZfYnVpbGQKKythY19zYXZlX0lGUz0kSUZTOyBJRlM9Jy0nCisrc2V0IHggJGFjX2N2X2J1aWxkCisrc2hpZnQKKytidWlsZF9jcHU9JDEKKytidWlsZF92ZW5kb3I9JDIKKytzaGlmdDsgc2hpZnQKKysjIFJlbWVtYmVyLCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIElGUyBpcyB1c2VkIHRvIGNyZWF0ZSAkKiwKKysjIGV4Y2VwdCB3aXRoIG9sZCBzaGVsbHM6CisrYnVpbGRfb3M9JCoKKytJRlM9JGFjX3NhdmVfSUZTCisrY2FzZSAkYnVpbGRfb3MgaW4gKlwgKikgYnVpbGRfb3M9YGVjaG8gIiRidWlsZF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKKysKKysKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUuLi4gJEVDSE9fQyIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9ob3N0K3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgIngkaG9zdF9hbGlhcyIgPSB4OyB0aGVuCisrICBhY19jdl9ob3N0PSRhY19jdl9idWlsZAorK2Vsc2UKKysgIGFjX2N2X2hvc3Q9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJGhvc3RfYWxpYXNgIHx8CisrICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRob3N0X2FsaWFzIGZhaWxlZCIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGhvc3RfYWxpYXMgZmFpbGVkIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorK2ZpCisrCisrZmkKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9ob3N0IiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfaG9zdCIgPiY2OyB9CisrY2FzZSAkYWNfY3ZfaG9zdCBpbgorKyotKi0qKSA7OworKyopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGhvc3QiID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGhvc3QiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKytlc2FjCisraG9zdD0kYWNfY3ZfaG9zdAorK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKKytzZXQgeCAkYWNfY3ZfaG9zdAorK3NoaWZ0CisraG9zdF9jcHU9JDEKKytob3N0X3ZlbmRvcj0kMgorK3NoaWZ0OyBzaGlmdAorKyMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorKyMgZXhjZXB0IHdpdGggb2xkIHNoZWxsczoKKytob3N0X29zPSQqCisrSUZTPSRhY19zYXZlX0lGUworK2Nhc2UgJGhvc3Rfb3MgaW4gKlwgKikgaG9zdF9vcz1gZWNobyAiJGhvc3Rfb3MiIHwgc2VkICdzLyAvLS9nJ2A7OyBlc2FjCisrCisrCisrYW1fX2FwaV92ZXJzaW9uPSIxLjQiCisrIyBGaW5kIGEgZ29vZCBpbnN0YWxsIHByb2dyYW0uICBXZSBwcmVmZXIgYSBDIHByb2dyYW0gKGZhc3RlciksCisrIyBzbyBvbmUgc2NyaXB0IGlzIGFzIGdvb2QgYXMgYW5vdGhlci4gIEJ1dCBhdm9pZCB0aGUgYnJva2VuIG9yCisrIyBpbmNvbXBhdGlibGUgdmVyc2lvbnM6CisrIyBTeXNWIC9ldGMvaW5zdGFsbCwgL3Vzci9zYmluL2luc3RhbGwKKysjIFN1bk9TIC91c3IvZXRjL2luc3RhbGwKKysjIElSSVggL3NiaW4vaW5zdGFsbAorKyMgQUlYIC9iaW4vaW5zdGFsbAorKyMgQW1pZ2FPUyAvQy9pbnN0YWxsLCB3aGljaCBpbnN0YWxscyBib290YmxvY2tzIG9uIGZsb3BweSBkaXNjcworKyMgQUlYIDQgL3Vzci9iaW4vaW5zdGFsbGJzZCwgd2hpY2ggZG9lc24ndCB3b3JrIHdpdGhvdXQgYSAtZyBmbGFnCisrIyBBRlMgL3Vzci9hZnN3cy9iaW4vaW5zdGFsbCwgd2hpY2ggbWlzaGFuZGxlcyBub25leGlzdGVudCBhcmdzCisrIyBTVlI0IC91c3IvdWNiL2luc3RhbGwsIHdoaWNoIHRyaWVzIHRvIHVzZSB0aGUgbm9uZXhpc3RlbnQgZ3JvdXAgInN0YWZmIgorKyMgT1MvMidzIHN5c3RlbSBpbnN0YWxsLCB3aGljaCBoYXMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBzZW1hbnRpYworKyMgLi9pbnN0YWxsLCB3aGljaCBjYW4gYmUgZXJyb25lb3VzbHkgY3JlYXRlZCBieSBtYWtlIGZyb20gLi9pbnN0YWxsLnNoLgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbC4uLiAkRUNIT19DIiA+JjY7IH0KKytpZiB0ZXN0IC16ICIkSU5TVEFMTCI7IHRoZW4KKytpZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbgorKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKytlbHNlCisrICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgIyBBY2NvdW50IGZvciBwZW9wbGUgd2hvIHB1dCB0cmFpbGluZyBzbGFzaGVzIGluIFBBVEggZWxlbWVudHMuCisrY2FzZSAkYXNfZGlyLyBpbgorKyAgLi8gfCAuLy8gfCAvY0MvKiB8IFwKKysgIC9ldGMvKiB8IC91c3Ivc2Jpbi8qIHwgL3Vzci9ldGMvKiB8IC9zYmluLyogfCAvdXNyL2Fmc3dzL2Jpbi8qIHwgXAorKyAgPzpcXC9vczJcXC9pbnN0YWxsXFwvKiB8ID86XFwvT1MyXFwvSU5TVEFMTFxcLyogfCBcCisrICAvdXNyL3VjYi8qICkgOzsKKysgICopCisrICAgICMgT1NGMSBhbmQgU0NPIE9EVCAzLjAgaGF2ZSB0aGVpciBvd24gbmFtZXMgZm9yIGluc3RhbGwuCisrICAgICMgRG9uJ3QgdXNlIGluc3RhbGxic2QgZnJvbSBPU0Ygc2luY2UgaXQgaW5zdGFsbHMgc3R1ZmYgYXMgcm9vdAorKyAgICAjIGJ5IGRlZmF1bHQuCisrICAgIGZvciBhY19wcm9nIGluIGdpbnN0YWxsIHNjb2luc3QgaW5zdGFsbDsgZG8KKysgICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysJaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKwkgIGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisrCSAgICBncmVwIGRzcG1zZyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrCSAgICAjIEFJWCBpbnN0YWxsLiAgSXQgaGFzIGFuIGluY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZlbnRpb24uCisrCSAgICA6CisrCSAgZWxpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorKwkgICAgZ3JlcCBwd3BsdXMgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorKwkgICAgIyBwcm9ncmFtLXNwZWNpZmljIGluc3RhbGwgc2NyaXB0IHVzZWQgYnkgSFAgcHdwbHVzLS1kb24ndCB1c2UuCisrCSAgICA6CisrCSAgZWxzZQorKwkgICAgYWNfY3ZfcGF0aF9pbnN0YWxsPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IC1jIgorKwkgICAgYnJlYWsgMworKwkgIGZpCisrCWZpCisrICAgICAgZG9uZQorKyAgICBkb25lCisrICAgIDs7CisrZXNhYworK2RvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrCisrZmkKKysgIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCisrICAgIElOU1RBTEw9JGFjX2N2X3BhdGhfaW5zdGFsbAorKyAgZWxzZQorKyAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBEb24ndCBjYWNoZSBhCisrICAgICMgdmFsdWUgZm9yIElOU1RBTEwgd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKysgICAgIyBicmVhayBvdGhlciBwYWNrYWdlcyB1c2luZyB0aGUgY2FjaGUgaWYgdGhhdCBkaXJlY3RvcnkgaXMKKysgICAgIyByZW1vdmVkLCBvciBpZiB0aGUgdmFsdWUgaXMgYSByZWxhdGl2ZSBuYW1lLgorKyAgICBJTlNUQUxMPSRhY19pbnN0YWxsX3NoCisrICBmaQorK2ZpCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkSU5TVEFMTCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JElOU1RBTEwiID4mNjsgfQorKworKyMgVXNlIHRlc3QgLXogYmVjYXVzZSBTdW5PUzQgc2ggbWlzaGFuZGxlcyBicmFjZXMgaW4gJHt2YXItdmFsfS4KKysjIEl0IHRoaW5rcyB0aGUgZmlyc3QgY2xvc2UgYnJhY2UgZW5kcyB0aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9uLgorK3Rlc3QgLXogIiRJTlNUQUxMX1BST0dSQU0iICYmIElOU1RBTExfUFJPR1JBTT0nJHtJTlNUQUxMfScKKysKKyt0ZXN0IC16ICIkSU5TVEFMTF9TQ1JJUFQiICYmIElOU1RBTExfU0NSSVBUPScke0lOU1RBTEx9JworKworK3Rlc3QgLXogIiRJTlNUQUxMX0RBVEEiICYmIElOU1RBTExfREFUQT0nJHtJTlNUQUxMfSAtbSA2NDQnCisrCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZS4uLiAkRUNIT19DIiA+JjY7IH0KKysjIEp1c3QgaW4gY2FzZQorK3NsZWVwIDEKKytlY2hvIHRpbWVzdGFtcCA+IGNvbmZ0ZXN0ZmlsZQorKyMgRG8gYHNldCcgaW4gYSBzdWJzaGVsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBjdXJyZW50IHNoZWxsJ3MKKysjIGFyZ3VtZW50cy4gIE11c3QgdHJ5IC1MIGZpcnN0IGluIGNhc2UgY29uZmlndXJlIGlzIGFjdHVhbGx5IGEKKysjIHN5bWxpbms7IHNvbWUgc3lzdGVtcyBwbGF5IHdlaXJkIGdhbWVzIHdpdGggdGhlIG1vZCB0aW1lIG9mIHN5bWxpbmtzCisrIyAoZWcgRnJlZUJTRCByZXR1cm5zIHRoZSBtb2QgdGltZSBvZiB0aGUgc3ltbGluaydzIGNvbnRhaW5pbmcKKysjIGRpcmVjdG9yeSkuCisraWYgKAorKyAgIHNldCBYIGBscyAtTHQgJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3RmaWxlIDI+IC9kZXYvbnVsbGAKKysgICBpZiB0ZXN0ICIkKiIgPSAiWCI7IHRoZW4KKysgICAgICAjIC1MIGRpZG4ndCB3b3JrLgorKyAgICAgIHNldCBYIGBscyAtdCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdGZpbGVgCisrICAgZmkKKysgICBpZiB0ZXN0ICIkKiIgIT0gIlggJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3RmaWxlIiBcCisrICAgICAgJiYgdGVzdCAiJCoiICE9ICJYIGNvbmZ0ZXN0ZmlsZSAkc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KKysKKysgICAgICAjIElmIG5laXRoZXIgbWF0Y2hlZCwgdGhlbiB3ZSBoYXZlIGEgYnJva2VuIGxzLiAgVGhpcyBjYW4gaGFwcGVuCisrICAgICAgIyBpZiwgZm9yIGluc3RhbmNlLCBDT05GSUdfU0hFTEwgaXMgYmFzaCBhbmQgaXQgaW5oZXJpdHMgYQorKyAgICAgICMgYnJva2VuIGxzIGFsaWFzIGZyb20gdGhlIGVudmlyb25tZW50LiAgVGhpcyBoYXMgYWN0dWFsbHkKKysgICAgICAjIGhhcHBlbmVkLiAgU3VjaCBhIHN5c3RlbSBjb3VsZCBub3QgYmUgY29uc2lkZXJlZCAic2FuZSIuCisrICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbHMgLXQgYXBwZWFycyB0byBmYWlsLiAgTWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhIGJyb2tlbgorK2FsaWFzIGluIHlvdXIgZW52aXJvbm1lbnQiID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IGxzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KKythbGlhcyBpbiB5b3VyIGVudmlyb25tZW50IiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKyAgIGZpCisrCisrICAgdGVzdCAiJDIiID0gY29uZnRlc3RmaWxlCisrICAgKQorK3RoZW4KKysgICAjIE9rLgorKyAgIDoKKytlbHNlCisrICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbmV3bHkgY3JlYXRlZCBmaWxlIGlzIG9sZGVyIHRoYW4gZGlzdHJpYnV0ZWQgZmlsZXMhCisrQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2siID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IG5ld2x5IGNyZWF0ZWQgZmlsZSBpcyBvbGRlciB0aGFuIGRpc3RyaWJ1dGVkIGZpbGVzIQorK0NoZWNrIHlvdXIgc3lzdGVtIGNsb2NrIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorK2ZpCisrcm0gLWYgY29uZnRlc3QqCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CisrdGVzdCAiJHByb2dyYW1fcHJlZml4IiAhPSBOT05FICYmCisrICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzJl4mJHByb2dyYW1fcHJlZml4JjskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKKysjIFVzZSBhIGRvdWJsZSAkIHNvIG1ha2UgaWdub3JlcyBpdC4KKyt0ZXN0ICIkcHJvZ3JhbV9zdWZmaXgiICE9IE5PTkUgJiYKKysgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9InMmXCQmJHByb2dyYW1fc3VmZml4JjskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKKysjIERvdWJsZSBhbnkgXCBvciAkLiAgZWNobyBtaWdodCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCisrIyBCeSBkZWZhdWx0IHdhcyBgcyx4LHgnLCByZW1vdmUgaXQgaWYgdXNlbGVzcy4KKytjYXQgPDxcX0FDRU9GID5jb25mdGVzdC5zZWQKKytzL1tcXCRdLyYmL2c7cy87cyx4LHgsJC8vCisrX0FDRU9GCisrcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT1gZWNobyAkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSB8IHNlZCAtZiBjb25mdGVzdC5zZWRgCisrcm0gLWYgY29uZnRlc3Quc2VkCisrCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKSIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpLi4uICRFQ0hPX0MiID4mNjsgfQorK3NldCB4ICR7TUFLRS1tYWtlfTsgYWNfbWFrZT1gZWNobyAiJDIiIHwgc2VkICdzLysvcC9nOyBzL1teYS16QS1aMC05X10vXy9nJ2AKKytpZiB7IGFzX3Zhcj1hY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC5tYWtlIDw8XF9BQ0VPRgorK1NIRUxMID0gL2Jpbi9zaAorK2FsbDoKKysJQGVjaG8gJ0BAQCUlJT0kKE1BS0UpPUBAQCUlJScKKytfQUNFT0YKKysjIEdOVSBtYWtlIHNvbWV0aW1lcyBwcmludHMgIm1ha2VbMV06IEVudGVyaW5nLi4uIiwgd2hpY2ggd291bGQgY29uZnVzZSB1cy4KKytjYXNlIGAke01BS0UtbWFrZX0gLWYgY29uZnRlc3QubWFrZSAyPi9kZXYvbnVsbGAgaW4KKysgICpAQEAlJSU9Pyo9QEBAJSUlKikKKysgICAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9eWVzOzsKKysgICopCisrICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PW5vOzsKKytlc2FjCisrcm0gLWYgY29uZnRlc3QubWFrZQorK2ZpCisraWYgZXZhbCB0ZXN0IFwkYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0ID0geWVzOyB0aGVuCisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KKysgIFNFVF9NQUtFPQorK2Vsc2UKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKysgIFNFVF9NQUtFPSJNQUtFPSR7TUFLRS1tYWtlfSIKKytmaQorKworKworKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tdWx0aWxpYiB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfbXVsdGlsaWIrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX211bHRpbGliOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICB5ZXMpIG11bHRpbGliPXllcyA7OworKyAgbm8pICBtdWx0aWxpYj1ubyA7OworKyAgKikgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciBtdWx0aWxpYiBvcHRpb24iID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIG11bHRpbGliIG9wdGlvbiIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKysgZXNhYworK2Vsc2UKKysgIG11bHRpbGliPXllcworK2ZpCisrCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXRhcmdldC1vcHRzcGFjZSB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfdGFyZ2V0X29wdHNwYWNlK3NldH0iID0gc2V0OyB0aGVuCisrICBlbmFibGV2YWw9JGVuYWJsZV90YXJnZXRfb3B0c3BhY2U7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIHllcykgdGFyZ2V0X29wdHNwYWNlPXllcyA7OworKyAgbm8pICB0YXJnZXRfb3B0c3BhY2U9bm8gOzsKKysgICopICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgdGFyZ2V0LW9wdHNwYWNlIG9wdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgdGFyZ2V0LW9wdHNwYWNlIG9wdGlvbiIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKysgZXNhYworK2Vsc2UKKysgIHRhcmdldF9vcHRzcGFjZT0KKytmaQorKworKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tYWxsb2MtZGVidWdnaW5nIHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke2VuYWJsZV9tYWxsb2NfZGVidWdnaW5nK3NldH0iID0gc2V0OyB0aGVuCisrICBlbmFibGV2YWw9JGVuYWJsZV9tYWxsb2NfZGVidWdnaW5nOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICB5ZXMpIG1hbGxvY19kZWJ1Z2dpbmc9eWVzIDs7CisrICBubykgIG1hbGxvY19kZWJ1Z2dpbmc9bm8gOzsKKysgICopICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgbWFsbG9jLWRlYnVnZ2luZyBvcHRpb24iID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIG1hbGxvYy1kZWJ1Z2dpbmcgb3B0aW9uIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworKyBlc2FjCisrZWxzZQorKyAgbWFsbG9jX2RlYnVnZ2luZz0KKytmaQorKworKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1uZXdsaWItbXVsdGl0aHJlYWQgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7ZW5hYmxlX25ld2xpYl9tdWx0aXRocmVhZCtzZXR9IiA9IHNldDsgdGhlbgorKyAgZW5hYmxldmFsPSRlbmFibGVfbmV3bGliX211bHRpdGhyZWFkOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICB5ZXMpIG5ld2xpYl9tdWx0aXRocmVhZD15ZXMgOzsKKysgIG5vKSAgbmV3bGliX211bHRpdGhyZWFkPW5vIDs7CisrICAqKSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIG5ld2xpYi1tdWx0aXRocmVhZCBvcHRpb24iID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIG5ld2xpYi1tdWx0aXRocmVhZCBvcHRpb24iID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CisrIGVzYWMKKytlbHNlCisrICBuZXdsaWJfbXVsdGl0aHJlYWQ9eWVzCisrZmkKKysKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbmV3bGliLWljb252IHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke2VuYWJsZV9uZXdsaWJfaWNvbnYrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX25ld2xpYl9pY29udjsgaWYgdGVzdCAiJHtuZXdsaWJfaWNvbnYrc2V0fSIgIT0gc2V0OyB0aGVuCisrICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgICAgeWVzKSBuZXdsaWJfaWNvbnY9eWVzIDs7CisrICAgICBubykgIG5ld2xpYl9pY29udj1ubyA7OworKyAgICAgKikgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciBuZXdsaWItaWNvbnYgb3B0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciBuZXdsaWItaWNvbnYgb3B0aW9uIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworKyAgIGVzYWMKKysgZmkKKytlbHNlCisrICBuZXdsaWJfaWNvbnY9JHtuZXdsaWJfaWNvbnZ9CisrZmkKKysKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbmV3bGliLWVsaXgtbGV2ZWwgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7ZW5hYmxlX25ld2xpYl9lbGl4X2xldmVsK3NldH0iID0gc2V0OyB0aGVuCisrICBlbmFibGV2YWw9JGVuYWJsZV9uZXdsaWJfZWxpeF9sZXZlbDsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgMCkgICBuZXdsaWJfZWxpeF9sZXZlbD0wIDs7CisrICAxKSAgIG5ld2xpYl9lbGl4X2xldmVsPTEgOzsKKysgIDIpICAgbmV3bGliX2VsaXhfbGV2ZWw9MiA7OworKyAgMykgICBuZXdsaWJfZWxpeF9sZXZlbD0zIDs7CisrICA0KSAgIG5ld2xpYl9lbGl4X2xldmVsPTQgOzsKKysgICopICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgbmV3bGliLWVsaXgtbGV2ZWwgb3B0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciBuZXdsaWItZWxpeC1sZXZlbCBvcHRpb24iID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CisrIGVzYWMKKytlbHNlCisrICBuZXdsaWJfZWxpeF9sZXZlbD0wCisrZmkKKysKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbmV3bGliLWlvLWZsb2F0IHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke2VuYWJsZV9uZXdsaWJfaW9fZmxvYXQrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX25ld2xpYl9pb19mbG9hdDsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgeWVzKSBuZXdsaWJfaW9fZmxvYXQ9eWVzIDs7CisrICBubykgIG5ld2xpYl9pb19mbG9hdD1ubyA7OworKyAgKikgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciBuZXdsaWItaW8tZmxvYXQgb3B0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciBuZXdsaWItaW8tZmxvYXQgb3B0aW9uIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworKyBlc2FjCisrZWxzZQorKyAgbmV3bGliX2lvX2Zsb2F0PXllcworK2ZpCisrCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5ld2xpYi1zdXBwbGllZC1zeXNjYWxscyB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfbmV3bGliX3N1cHBsaWVkX3N5c2NhbGxzK3NldH0iID0gc2V0OyB0aGVuCisrICBlbmFibGV2YWw9JGVuYWJsZV9uZXdsaWJfc3VwcGxpZWRfc3lzY2FsbHM7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIHllcykgbmV3bGliX21heV9zdXBwbHlfc3lzY2FsbHM9eWVzIDs7CisrICBubykgIG5ld2xpYl9tYXlfc3VwcGx5X3N5c2NhbGxzPW5vIDs7CisrICAqKSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIG5ld2xpYi1zdXBwbGllZC1zeXNjYWxscyBvcHRpb24iID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIG5ld2xpYi1zdXBwbGllZC1zeXNjYWxscyBvcHRpb24iID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CisrIGVzYWMKKytlbHNlCisrICBuZXdsaWJfbWF5X3N1cHBseV9zeXNjYWxscz15ZXMKKytmaQorKworKworKworK2lmIHRlc3QgeCR7bmV3bGliX21heV9zdXBwbHlfc3lzY2FsbHN9ID0geHllczsgdGhlbgorKyAgTUFZX1NVUFBMWV9TWVNDQUxMU19UUlVFPQorKyAgTUFZX1NVUFBMWV9TWVNDQUxMU19GQUxTRT0nIycKKytlbHNlCisrICBNQVlfU1VQUExZX1NZU0NBTExTX1RSVUU9JyMnCisrICBNQVlfU1VQUExZX1NZU0NBTExTX0ZBTFNFPQorK2ZpCisrCisrCisrdGVzdCAteiAiJHt3aXRoX3RhcmdldF9zdWJkaXJ9IiAmJiB3aXRoX3RhcmdldF9zdWJkaXI9LgorKworK2lmIHRlc3QgIiR7c3JjZGlyfSIgPSAiLiI7IHRoZW4KKysgIGlmIHRlc3QgIiR7d2l0aF90YXJnZXRfc3ViZGlyfSIgIT0gIi4iOyB0aGVuCisrICAgIG5ld2xpYl9iYXNlZGlyPSIke3NyY2Rpcn0vJHt3aXRoX211bHRpc3JjdG9wfS4uLy4uLy4uLy4uIgorKyAgZWxzZQorKyAgICBuZXdsaWJfYmFzZWRpcj0iJHtzcmNkaXJ9LyR7d2l0aF9tdWx0aXNyY3RvcH0uLi8uLi8uLiIKKysgIGZpCisrZWxzZQorKyAgbmV3bGliX2Jhc2VkaXI9IiR7c3JjZGlyfS8uLi8uLi8uLiIKKytmaQorKworKworK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHRhcmdldCBzeXN0ZW0gdHlwZSIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyB0YXJnZXQgc3lzdGVtIHR5cGUuLi4gJEVDSE9fQyIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl90YXJnZXQrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAieCR0YXJnZXRfYWxpYXMiID0geDsgdGhlbgorKyAgYWNfY3ZfdGFyZ2V0PSRhY19jdl9ob3N0CisrZWxzZQorKyAgYWNfY3ZfdGFyZ2V0PWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICR0YXJnZXRfYWxpYXNgIHx8CisrICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICR0YXJnZXRfYWxpYXMgZmFpbGVkIiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkdGFyZ2V0X2FsaWFzIGZhaWxlZCIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKytmaQorKworK2ZpCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdGFyZ2V0IiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfdGFyZ2V0IiA+JjY7IH0KKytjYXNlICRhY19jdl90YXJnZXQgaW4KKysqLSotKikgOzsKKysqKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCB0YXJnZXQiID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIHRhcmdldCIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworK2VzYWMKKyt0YXJnZXQ9JGFjX2N2X3RhcmdldAorK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKKytzZXQgeCAkYWNfY3ZfdGFyZ2V0Cisrc2hpZnQKKyt0YXJnZXRfY3B1PSQxCisrdGFyZ2V0X3ZlbmRvcj0kMgorK3NoaWZ0OyBzaGlmdAorKyMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorKyMgZXhjZXB0IHdpdGggb2xkIHNoZWxsczoKKyt0YXJnZXRfb3M9JCoKKytJRlM9JGFjX3NhdmVfSUZTCisrY2FzZSAkdGFyZ2V0X29zIGluICpcICopIHRhcmdldF9vcz1gZWNobyAiJHRhcmdldF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKKysKKysKKysjIFRoZSBhbGlhc2VzIHNhdmUgdGhlIG5hbWVzIHRoZSB1c2VyIHN1cHBsaWVkLCB3aGlsZSAkaG9zdCBldGMuCisrIyB3aWxsIGdldCBjYW5vbmljYWxpemVkLgorK3Rlc3QgLW4gIiR0YXJnZXRfYWxpYXMiICYmCisrICB0ZXN0ICIkcHJvZ3JhbV9wcmVmaXgkcHJvZ3JhbV9zdWZmaXgkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIgPSBcCisrICAgIE5PTkVOT05Fcyx4LHgsICYmCisrICBwcm9ncmFtX3ByZWZpeD0ke3RhcmdldF9hbGlhc30tCisrCisrCisrUEFDS0FHRT1uZXdsaWIKKysKKytWRVJTSU9OPTEuMTQuMC5hdG1lbC4xLjAuMQorKworK2lmIHRlc3QgImBjZCAkc3JjZGlyICYmIHB3ZGAiICE9ICJgcHdkYCIgJiYgdGVzdCAtZiAkc3JjZGlyL2NvbmZpZy5zdGF0dXM7IHRoZW4KKysgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHNvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkOyBydW4gXCJtYWtlIGRpc3RjbGVhblwiIHRoZXJlIGZpcnN0IiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiBzb3VyY2UgZGlyZWN0b3J5IGFscmVhZHkgY29uZmlndXJlZDsgcnVuIFwibWFrZSBkaXN0Y2xlYW5cIiB0aGVyZSBmaXJzdCIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKytmaQorKworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIFBBQ0tBR0UgIiRQQUNLQUdFIgorK19BQ0VPRgorKworKworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIFZFUlNJT04gIiRWRVJTSU9OIgorK19BQ0VPRgorKworKworKworK21pc3NpbmdfZGlyPWBjZCAkYWNfYXV4X2RpciAmJiBwd2RgCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHdvcmtpbmcgYWNsb2NhbC0ke2FtX19hcGlfdmVyc2lvbn0iID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgYWNsb2NhbC0ke2FtX19hcGlfdmVyc2lvbn0uLi4gJEVDSE9fQyIgPiY2OyB9CisrIyBSdW4gdGVzdCBpbiBhIHN1YnNoZWxsOyBzb21lIHZlcnNpb25zIG9mIHNoIHdpbGwgcHJpbnQgYW4gZXJyb3IgaWYKKysjIGFuIGV4ZWN1dGFibGUgaXMgbm90IGZvdW5kLCBldmVuIGlmIHN0ZGVyciBpcyByZWRpcmVjdGVkLgorKyMgUmVkaXJlY3Qgc3RkaW4gdG8gcGxhY2F0ZSBvbGRlciB2ZXJzaW9ucyBvZiBhdXRvY29uZi4gIFNpZ2guCisraWYgKGFjbG9jYWwtJHthbV9fYXBpX3ZlcnNpb259IC0tdmVyc2lvbikgPCAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorKyAgIEFDTE9DQUw9YWNsb2NhbC0ke2FtX19hcGlfdmVyc2lvbn0KKysgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGZvdW5kIiA+JjUKKytlY2hvICIke0VDSE9fVH1mb3VuZCIgPiY2OyB9CisrZWxzZQorKyAgIEFDTE9DQUw9IiRtaXNzaW5nX2Rpci9taXNzaW5nIGFjbG9jYWwtJHthbV9fYXBpX3ZlcnNpb259IgorKyAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbWlzc2luZyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bWlzc2luZyIgPiY2OyB9CisrZmkKKysKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igd29ya2luZyBhdXRvY29uZiIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igd29ya2luZyBhdXRvY29uZi4uLiAkRUNIT19DIiA+JjY7IH0KKysjIFJ1biB0ZXN0IGluIGEgc3Vic2hlbGw7IHNvbWUgdmVyc2lvbnMgb2Ygc2ggd2lsbCBwcmludCBhbiBlcnJvciBpZgorKyMgYW4gZXhlY3V0YWJsZSBpcyBub3QgZm91bmQsIGV2ZW4gaWYgc3RkZXJyIGlzIHJlZGlyZWN0ZWQuCisrIyBSZWRpcmVjdCBzdGRpbiB0byBwbGFjYXRlIG9sZGVyIHZlcnNpb25zIG9mIGF1dG9jb25mLiAgU2lnaC4KKytpZiAoYXV0b2NvbmYgLS12ZXJzaW9uKSA8IC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgQVVUT0NPTkY9YXV0b2NvbmYKKysgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGZvdW5kIiA+JjUKKytlY2hvICIke0VDSE9fVH1mb3VuZCIgPiY2OyB9CisrZWxzZQorKyAgIEFVVE9DT05GPSIkbWlzc2luZ19kaXIvbWlzc2luZyBhdXRvY29uZiIKKysgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG1pc3NpbmciID4mNQorK2VjaG8gIiR7RUNIT19UfW1pc3NpbmciID4mNjsgfQorK2ZpCisrCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHdvcmtpbmcgYXV0b21ha2UtJHthbV9fYXBpX3ZlcnNpb259IiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB3b3JraW5nIGF1dG9tYWtlLSR7YW1fX2FwaV92ZXJzaW9ufS4uLiAkRUNIT19DIiA+JjY7IH0KKysjIFJ1biB0ZXN0IGluIGEgc3Vic2hlbGw7IHNvbWUgdmVyc2lvbnMgb2Ygc2ggd2lsbCBwcmludCBhbiBlcnJvciBpZgorKyMgYW4gZXhlY3V0YWJsZSBpcyBub3QgZm91bmQsIGV2ZW4gaWYgc3RkZXJyIGlzIHJlZGlyZWN0ZWQuCisrIyBSZWRpcmVjdCBzdGRpbiB0byBwbGFjYXRlIG9sZGVyIHZlcnNpb25zIG9mIGF1dG9jb25mLiAgU2lnaC4KKytpZiAoYXV0b21ha2UtJHthbV9fYXBpX3ZlcnNpb259IC0tdmVyc2lvbikgPCAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorKyAgIEFVVE9NQUtFPWF1dG9tYWtlLSR7YW1fX2FwaV92ZXJzaW9ufQorKyAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogZm91bmQiID4mNQorK2VjaG8gIiR7RUNIT19UfWZvdW5kIiA+JjY7IH0KKytlbHNlCisrICAgQVVUT01BS0U9IiRtaXNzaW5nX2Rpci9taXNzaW5nIGF1dG9tYWtlLSR7YW1fX2FwaV92ZXJzaW9ufSIKKysgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG1pc3NpbmciID4mNQorK2VjaG8gIiR7RUNIT19UfW1pc3NpbmciID4mNjsgfQorK2ZpCisrCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHdvcmtpbmcgYXV0b2hlYWRlciIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igd29ya2luZyBhdXRvaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorKyMgUnVuIHRlc3QgaW4gYSBzdWJzaGVsbDsgc29tZSB2ZXJzaW9ucyBvZiBzaCB3aWxsIHByaW50IGFuIGVycm9yIGlmCisrIyBhbiBleGVjdXRhYmxlIGlzIG5vdCBmb3VuZCwgZXZlbiBpZiBzdGRlcnIgaXMgcmVkaXJlY3RlZC4KKysjIFJlZGlyZWN0IHN0ZGluIHRvIHBsYWNhdGUgb2xkZXIgdmVyc2lvbnMgb2YgYXV0b2NvbmYuICBTaWdoLgorK2lmIChhdXRvaGVhZGVyIC0tdmVyc2lvbikgPCAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorKyAgIEFVVE9IRUFERVI9YXV0b2hlYWRlcgorKyAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogZm91bmQiID4mNQorK2VjaG8gIiR7RUNIT19UfWZvdW5kIiA+JjY7IH0KKytlbHNlCisrICAgQVVUT0hFQURFUj0iJG1pc3NpbmdfZGlyL21pc3NpbmcgYXV0b2hlYWRlciIKKysgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG1pc3NpbmciID4mNQorK2VjaG8gIiR7RUNIT19UfW1pc3NpbmciID4mNjsgfQorK2ZpCisrCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHdvcmtpbmcgbWFrZWluZm8iID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgbWFrZWluZm8uLi4gJEVDSE9fQyIgPiY2OyB9CisrIyBSdW4gdGVzdCBpbiBhIHN1YnNoZWxsOyBzb21lIHZlcnNpb25zIG9mIHNoIHdpbGwgcHJpbnQgYW4gZXJyb3IgaWYKKysjIGFuIGV4ZWN1dGFibGUgaXMgbm90IGZvdW5kLCBldmVuIGlmIHN0ZGVyciBpcyByZWRpcmVjdGVkLgorKyMgUmVkaXJlY3Qgc3RkaW4gdG8gcGxhY2F0ZSBvbGRlciB2ZXJzaW9ucyBvZiBhdXRvY29uZi4gIFNpZ2guCisraWYgKG1ha2VpbmZvIC0tdmVyc2lvbikgPCAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorKyAgIE1BS0VJTkZPPW1ha2VpbmZvCisrICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBmb3VuZCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9Zm91bmQiID4mNjsgfQorK2Vsc2UKKysgICBNQUtFSU5GTz0iJG1pc3NpbmdfZGlyL21pc3NpbmcgbWFrZWluZm8iCisrICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBtaXNzaW5nIiA+JjUKKytlY2hvICIke0VDSE9fVH1taXNzaW5nIiA+JjY7IH0KKytmaQorKworKworKworKyMgRklYTUU6IFdlIHRlbXBvcmFyaWx5IGRlZmluZSBvdXIgb3duIHZlcnNpb24gb2YgQUNfUFJPR19DQy4gIFRoaXMgaXMKKysjIGNvcGllZCBmcm9tIGF1dG9jb25mIDIuMTIsIGJ1dCBkb2VzIG5vdCBjYWxsIEFDX1BST0dfQ0NfV09SS1MuICBXZQorKyMgYXJlIHByb2JhYmx5IHVzaW5nIGEgY3Jvc3MgY29tcGlsZXIsIHdoaWNoIHdpbGwgbm90IGJlIGFibGUgdG8gZnVsbHkKKysjIGxpbmsgYW4gZXhlY3V0YWJsZS4gIFRoaXMgc2hvdWxkIHJlYWxseSBiZSBmaXhlZCBpbiBhdXRvY29uZgorKyMgaXRzZWxmLgorKworKworKworKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgZ2NjOyBhY193b3JkPSQyCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX0NDPSJnY2MiCisrICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrQ0M9JGFjX2N2X3Byb2dfQ0MKKytpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JENDIiA+JjY7IH0KKytlbHNlCisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisrZmkKKysKKysKKytpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgY2M7IGFjX3dvcmQ9JDIKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgorKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisrICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKysgIGFjX3Byb2dfcmVqZWN0ZWQ9bm8KKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGlmIHRlc3QgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID0gIi91c3IvdWNiL2NjIjsgdGhlbgorKyAgICAgICBhY19wcm9nX3JlamVjdGVkPXllcworKyAgICAgICBjb250aW51ZQorKyAgICAgZmkKKysgICAgYWNfY3ZfcHJvZ19DQz0iY2MiCisrICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytpZiB0ZXN0ICRhY19wcm9nX3JlamVjdGVkID0geWVzOyB0aGVuCisrICAjIFdlIGZvdW5kIGEgYm9nb24gaW4gdGhlIHBhdGgsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciB1c2UgaXQuCisrICBzZXQgZHVtbXkgJGFjX2N2X3Byb2dfQ0MKKysgIHNoaWZ0CisrICBpZiB0ZXN0ICQjICE9IDA7IHRoZW4KKysgICAgIyBXZSBjaG9zZSBhIGRpZmZlcmVudCBjb21waWxlciBmcm9tIHRoZSBib2d1cyBvbmUuCisrICAgICMgSG93ZXZlciwgaXQgaGFzIHRoZSBzYW1lIGJhc2VuYW1lLCBzbyB0aGUgYm9nb24gd2lsbCBiZSBjaG9zZW4KKysgICAgIyBmaXJzdCBpZiB3ZSBzZXQgQ0MgdG8ganVzdCB0aGUgYmFzZW5hbWU7IHVzZSB0aGUgZnVsbCBmaWxlIG5hbWUuCisrICAgIHNoaWZ0CisrICAgIGFjX2N2X3Byb2dfQ0M9IiRhc19kaXIvJGFjX3dvcmQkezErJyAnfSRAIgorKyAgZmkKKytmaQorK2ZpCisrZmkKKytDQz0kYWNfY3ZfcHJvZ19DQworK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKKytlY2hvICIke0VDSE9fVH0kQ0MiID4mNjsgfQorK2Vsc2UKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKytmaQorKworKworKyAgdGVzdCAteiAiJENDIiAmJiB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBubyBhY2NlcHRhYmxlIGNjIGZvdW5kIGluIFwkUEFUSCIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBjYyBmb3VuZCBpbiBcJFBBVEgiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrZmkKKysKKysjQUNfUFJPR19DQ19HTlUKKysKKytpZiB0ZXN0ICRhY19jdl9jX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgorKyAgR0NDPXllcworKyAgYWNfdGVzdF9DRkxBR1M9IiR7Q0ZMQUdTK3NldH0iCisrICBhY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKKysgIENGTEFHUz0KKysjICBBQ19QUk9HX0NDX0cKKysgIGlmIHRlc3QgIiRhY190ZXN0X0NGTEFHUyIgPSBzZXQ7IHRoZW4KKysgICAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCisrICBlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY2NfZyA9IHllczsgdGhlbgorKyAgICBDRkxBR1M9Ii1nIC1PMiIKKysgIGVsc2UKKysgICAgQ0ZMQUdTPSItTzIiCisrICBmaQorK2Vsc2UKKysgIEdDQz0KKysgIHRlc3QgIiR7Q0ZMQUdTK3NldH0iID0gc2V0IHx8IENGTEFHUz0iLWciCisrZmkKKysKKysKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFzOyBhY193b3JkPSQyCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVMrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJEFTIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19BUz0iJEFTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX0FTPSIke2FjX3Rvb2xfcHJlZml4fWFzIgorKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorK2RvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK0FTPSRhY19jdl9wcm9nX0FTCisraWYgdGVzdCAtbiAiJEFTIjsgdGhlbgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQVMiID4mNQorK2VjaG8gIiR7RUNIT19UfSRBUyIgPiY2OyB9CisrZWxzZQorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUyI7IHRoZW4KKysgIGFjX2N0X0FTPSRBUworKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhcyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IGFzOyBhY193b3JkPSQyCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVMrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0FTIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9BUz0iJGFjX2N0X0FTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0FTPSJhcyIKKysgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9BUz0kYWNfY3ZfcHJvZ19hY19jdF9BUworK2lmIHRlc3QgLW4gIiRhY19jdF9BUyI7IHRoZW4KKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0FTIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3RfQVMiID4mNjsgfQorK2Vsc2UKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9BUyIgPSB4OyB0aGVuCisrICAgIEFTPSIiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBBUz0kYWNfY3RfQVMKKysgIGZpCisrZWxzZQorKyAgQVM9IiRhY19jdl9wcm9nX0FTIgorK2ZpCisrCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hcjsgYWNfd29yZD0kMgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKysgIGFjX2N2X3Byb2dfQVI9IiRBUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKKysgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytBUj0kYWNfY3ZfcHJvZ19BUgorK2lmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJEFSIiA+JjUKKytlY2hvICIke0VDSE9fVH0kQVIiID4mNjsgfQorK2Vsc2UKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCisrICBhY19jdF9BUj0kQVIKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBhcjsgYWNfd29yZD0kMgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19jdF9BUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCisrICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfQVI9JGFjX2N2X3Byb2dfYWNfY3RfQVIKKytpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9BUiIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0FSIiA+JjY7IH0KKytlbHNlCisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorKyAgICBBUj0iIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgQVI9JGFjX2N0X0FSCisrICBmaQorK2Vsc2UKKysgIEFSPSIkYWNfY3ZfcHJvZ19BUiIKKytmaQorKworK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1yYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXJhbmxpYjsgYWNfd29yZD0kMgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX1JBTkxJQitzZXR9IiA9IHNldDsgdGhlbgorKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19SQU5MSUI9IiRSQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfUkFOTElCPSIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIKKysgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytSQU5MSUI9JGFjX2N2X3Byb2dfUkFOTElCCisraWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFJBTkxJQiIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JFJBTkxJQiIgPiY2OyB9CisrZWxzZQorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19SQU5MSUIiOyB0aGVuCisrICBhY19jdF9SQU5MSUI9JFJBTkxJQgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJyYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSByYW5saWI7IGFjX3dvcmQ9JDIKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSIkYWNfY3RfUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0icmFubGliIgorKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorK2RvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X1JBTkxJQj0kYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIKKytpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3RfUkFOTElCIiA+JjY7IH0KKytlbHNlCisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfUkFOTElCIiA9IHg7IHRoZW4KKysgICAgUkFOTElCPSI6IgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgUkFOTElCPSRhY19jdF9SQU5MSUIKKysgIGZpCisrZWxzZQorKyAgUkFOTElCPSIkYWNfY3ZfcHJvZ19SQU5MSUIiCisrZmkKKysKKysKKysjIEZpbmQgYSBnb29kIGluc3RhbGwgcHJvZ3JhbS4gIFdlIHByZWZlciBhIEMgcHJvZ3JhbSAoZmFzdGVyKSwKKysjIHNvIG9uZSBzY3JpcHQgaXMgYXMgZ29vZCBhcyBhbm90aGVyLiAgQnV0IGF2b2lkIHRoZSBicm9rZW4gb3IKKysjIGluY29tcGF0aWJsZSB2ZXJzaW9uczoKKysjIFN5c1YgL2V0Yy9pbnN0YWxsLCAvdXNyL3NiaW4vaW5zdGFsbAorKyMgU3VuT1MgL3Vzci9ldGMvaW5zdGFsbAorKyMgSVJJWCAvc2Jpbi9pbnN0YWxsCisrIyBBSVggL2Jpbi9pbnN0YWxsCisrIyBBbWlnYU9TIC9DL2luc3RhbGwsIHdoaWNoIGluc3RhbGxzIGJvb3RibG9ja3Mgb24gZmxvcHB5IGRpc2NzCisrIyBBSVggNCAvdXNyL2Jpbi9pbnN0YWxsYnNkLCB3aGljaCBkb2Vzbid0IHdvcmsgd2l0aG91dCBhIC1nIGZsYWcKKysjIEFGUyAvdXNyL2Fmc3dzL2Jpbi9pbnN0YWxsLCB3aGljaCBtaXNoYW5kbGVzIG5vbmV4aXN0ZW50IGFyZ3MKKysjIFNWUjQgL3Vzci91Y2IvaW5zdGFsbCwgd2hpY2ggdHJpZXMgdG8gdXNlIHRoZSBub25leGlzdGVudCBncm91cCAic3RhZmYiCisrIyBPUy8yJ3Mgc3lzdGVtIGluc3RhbGwsIHdoaWNoIGhhcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHNlbWFudGljCisrIyAuL2luc3RhbGwsIHdoaWNoIGNhbiBiZSBlcnJvbmVvdXNseSBjcmVhdGVkIGJ5IG1ha2UgZnJvbSAuL2luc3RhbGwuc2guCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsLi4uICRFQ0hPX0MiID4mNjsgfQorK2lmIHRlc3QgLXogIiRJTlNUQUxMIjsgdGhlbgorK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAjIEFjY291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50cy4KKytjYXNlICRhc19kaXIvIGluCisrICAuLyB8IC4vLyB8IC9jQy8qIHwgXAorKyAgL2V0Yy8qIHwgL3Vzci9zYmluLyogfCAvdXNyL2V0Yy8qIHwgL3NiaW4vKiB8IC91c3IvYWZzd3MvYmluLyogfCBcCisrICA/OlxcL29zMlxcL2luc3RhbGxcXC8qIHwgPzpcXC9PUzJcXC9JTlNUQUxMXFwvKiB8IFwKKysgIC91c3IvdWNiLyogKSA7OworKyAgKikKKysgICAgIyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4KKysgICAgIyBEb24ndCB1c2UgaW5zdGFsbGJzZCBmcm9tIE9TRiBzaW5jZSBpdCBpbnN0YWxscyBzdHVmZiBhcyByb290CisrICAgICMgYnkgZGVmYXVsdC4KKysgICAgZm9yIGFjX3Byb2cgaW4gZ2luc3RhbGwgc2NvaW5zdCBpbnN0YWxsOyBkbworKyAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKwlpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB9OyB0aGVuCisrCSAgaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKysJICAgIGdyZXAgZHNwbXNnICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysJICAgICMgQUlYIGluc3RhbGwuICBJdCBoYXMgYW4gaW5jb21wYXRpYmxlIGNhbGxpbmcgY29udmVudGlvbi4KKysJICAgIDoKKysJICBlbGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisrCSAgICBncmVwIHB3cGx1cyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrCSAgICAjIHByb2dyYW0tc3BlY2lmaWMgaW5zdGFsbCBzY3JpcHQgdXNlZCBieSBIUCBwd3BsdXMtLWRvbid0IHVzZS4KKysJICAgIDoKKysJICBlbHNlCisrCSAgICBhY19jdl9wYXRoX2luc3RhbGw9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQgLWMiCisrCSAgICBicmVhayAzCisrCSAgZmkKKysJZmkKKysgICAgICBkb25lCisrICAgIGRvbmUKKysgICAgOzsKKytlc2FjCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKysKKytmaQorKyAgaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KKysgICAgSU5TVEFMTD0kYWNfY3ZfcGF0aF9pbnN0YWxsCisrICBlbHNlCisrICAgICMgQXMgYSBsYXN0IHJlc29ydCwgdXNlIHRoZSBzbG93IHNoZWxsIHNjcmlwdC4gIERvbid0IGNhY2hlIGEKKysgICAgIyB2YWx1ZSBmb3IgSU5TVEFMTCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAorKyAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBjYWNoZSBpZiB0aGF0IGRpcmVjdG9yeSBpcworKyAgICAjIHJlbW92ZWQsIG9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlbGF0aXZlIG5hbWUuCisrICAgIElOU1RBTEw9JGFjX2luc3RhbGxfc2gKKysgIGZpCisrZmkKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRJTlNUQUxMIiA+JjUKKytlY2hvICIke0VDSE9fVH0kSU5TVEFMTCIgPiY2OyB9CisrCisrIyBVc2UgdGVzdCAteiBiZWNhdXNlIFN1bk9TNCBzaCBtaXNoYW5kbGVzIGJyYWNlcyBpbiAke3Zhci12YWx9LgorKyMgSXQgdGhpbmtzIHRoZSBmaXJzdCBjbG9zZSBicmFjZSBlbmRzIHRoZSB2YXJpYWJsZSBzdWJzdGl0dXRpb24uCisrdGVzdCAteiAiJElOU1RBTExfUFJPR1JBTSIgJiYgSU5TVEFMTF9QUk9HUkFNPScke0lOU1RBTEx9JworKworK3Rlc3QgLXogIiRJTlNUQUxMX1NDUklQVCIgJiYgSU5TVEFMTF9TQ1JJUFQ9JyR7SU5TVEFMTH0nCisrCisrdGVzdCAteiAiJElOU1RBTExfREFUQSIgJiYgSU5TVEFMTF9EQVRBPScke0lOU1RBTEx9IC1tIDY0NCcKKysKKysKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlcyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlcy4uLiAkRUNIT19DIiA+JjY7IH0KKysgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfbWFpbnRhaW5lcl9tb2RlK3NldH0iID0gc2V0OyB0aGVuCisrICBlbmFibGV2YWw9JGVuYWJsZV9tYWludGFpbmVyX21vZGU7IFVTRV9NQUlOVEFJTkVSX01PREU9JGVuYWJsZXZhbAorK2Vsc2UKKysgIFVTRV9NQUlOVEFJTkVSX01PREU9bm8KKytmaQorKworKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkVVNFX01BSU5UQUlORVJfTU9ERSIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JFVTRV9NQUlOVEFJTkVSX01PREUiID4mNjsgfQorKworKworK2lmIHRlc3QgJFVTRV9NQUlOVEFJTkVSX01PREUgPSB5ZXM7IHRoZW4KKysgIE1BSU5UQUlORVJfTU9ERV9UUlVFPQorKyAgTUFJTlRBSU5FUl9NT0RFX0ZBTFNFPScjJworK2Vsc2UKKysgIE1BSU5UQUlORVJfTU9ERV9UUlVFPScjJworKyAgTUFJTlRBSU5FUl9NT0RFX0ZBTFNFPQorK2ZpCisrICBNQUlOVD0kTUFJTlRBSU5FUl9NT0RFX1RSVUUKKysKKysKKysKKysjIFdlIG5lZWQgQUNfRVhFRVhUIHRvIGtlZXAgYXV0b21ha2UgaGFwcHkgaW4gY3lnbnVzIG1vZGUuICBIb3dldmVyLAorKyMgYXQgbGVhc3QgY3VycmVudGx5LCB3ZSBuZXZlciBhY3R1YWxseSBidWlsZCBhIHByb2dyYW0sIHNvIHdlIG5ldmVyCisrIyBuZWVkIHRvIHVzZSAkKEVYRUVYVCkuICBNb3Jlb3ZlciwgdGhlIHRlc3QgZm9yIEVYRUVYVCBub3JtYWxseQorKyMgZmFpbHMsIGJlY2F1c2Ugd2UgYXJlIHByb2JhYmx5IGNvbmZpZ3VyaW5nIHdpdGggYSBjcm9zcyBjb21waWxlcgorKyMgd2hpY2ggY2FuJ3QgY3JlYXRlIGV4ZWN1dGFibGVzLiAgU28gd2UgaW5jbHVkZSBBQ19FWEVFWFQgdG8ga2VlcAorKyMgYXV0b21ha2UgaGFwcHksIGJ1dCB3ZSBkb24ndCBleGVjdXRlIGl0LCBzaW5jZSB3ZSBkb24ndCBjYXJlIGFib3V0CisrIyB0aGUgcmVzdWx0LgorKyNpZiBmYWxzZTsgdGhlbgorKyMKKysjZmkKKysKKysuICR7bmV3bGliX2Jhc2VkaXJ9L2NvbmZpZ3VyZS5ob3N0CisrCisrbmV3bGliX2NmbGFncz0iJHtuZXdsaWJfY2ZsYWdzfSAtZm5vLWJ1aWx0aW4iCisrCisrTkVXTElCX0NGTEFHUz0ke25ld2xpYl9jZmxhZ3N9CisrCisrCisrTERGTEFHUz0ke2xkZmxhZ3N9CisrCisrCisrCisrCisraWYgdGVzdCB4JHtuZXdsaWJfZWxpeF9sZXZlbH0gPSB4MDsgdGhlbgorKyAgRUxJWF9MRVZFTF8wX1RSVUU9CisrICBFTElYX0xFVkVMXzBfRkFMU0U9JyMnCisrZWxzZQorKyAgRUxJWF9MRVZFTF8wX1RSVUU9JyMnCisrICBFTElYX0xFVkVMXzBfRkFMU0U9CisrZmkKKysKKysKKytpZiB0ZXN0IHgke25ld2xpYl9lbGl4X2xldmVsfSA9IHgxOyB0aGVuCisrICBFTElYX0xFVkVMXzFfVFJVRT0KKysgIEVMSVhfTEVWRUxfMV9GQUxTRT0nIycKKytlbHNlCisrICBFTElYX0xFVkVMXzFfVFJVRT0nIycKKysgIEVMSVhfTEVWRUxfMV9GQUxTRT0KKytmaQorKworKworK2lmIHRlc3QgeCR7bmV3bGliX2VsaXhfbGV2ZWx9ID0geDI7IHRoZW4KKysgIEVMSVhfTEVWRUxfMl9UUlVFPQorKyAgRUxJWF9MRVZFTF8yX0ZBTFNFPScjJworK2Vsc2UKKysgIEVMSVhfTEVWRUxfMl9UUlVFPScjJworKyAgRUxJWF9MRVZFTF8yX0ZBTFNFPQorK2ZpCisrCisrCisraWYgdGVzdCB4JHtuZXdsaWJfZWxpeF9sZXZlbH0gPSB4MzsgdGhlbgorKyAgRUxJWF9MRVZFTF8zX1RSVUU9CisrICBFTElYX0xFVkVMXzNfRkFMU0U9JyMnCisrZWxzZQorKyAgRUxJWF9MRVZFTF8zX1RSVUU9JyMnCisrICBFTElYX0xFVkVMXzNfRkFMU0U9CisrZmkKKysKKysKKytpZiB0ZXN0IHgke25ld2xpYl9lbGl4X2xldmVsfSA9IHg0OyB0aGVuCisrICBFTElYX0xFVkVMXzRfVFJVRT0KKysgIEVMSVhfTEVWRUxfNF9GQUxTRT0nIycKKytlbHNlCisrICBFTElYX0xFVkVMXzRfVFJVRT0nIycKKysgIEVMSVhfTEVWRUxfNF9GQUxTRT0KKytmaQorKworKworKworK2lmIHRlc3QgeCR7dXNlX2xpYnRvb2x9ID0geHllczsgdGhlbgorKyAgVVNFX0xJQlRPT0xfVFJVRT0KKysgIFVTRV9MSUJUT09MX0ZBTFNFPScjJworK2Vsc2UKKysgIFVTRV9MSUJUT09MX1RSVUU9JyMnCisrICBVU0VfTElCVE9PTF9GQUxTRT0KKytmaQorKworKyMgSGFyZC1jb2RlIE9CSkVYVC4gIE5vcm1hbGx5IGl0IGlzIHNldCBieSBBQ19PQkpFWFQsIGJ1dCB3ZQorKyMgdXNlIG9leHQsIHdoaWNoIGlzIHNldCBpbiBjb25maWd1cmUuaG9zdCBiYXNlZCBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLgorK09CSkVYVD0ke29leHR9CisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1ha2VmaWxlIgorKworK2NhdCA+Y29uZmNhY2hlIDw8XF9BQ0VPRgorKyMgVGhpcyBmaWxlIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQorKyMgdGVzdHMgcnVuIG9uIHRoaXMgc3lzdGVtIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGNvbmZpZ3VyZQorKyMgc2NyaXB0cyBhbmQgY29uZmlndXJlIHJ1bnMsIHNlZSBjb25maWd1cmUncyBvcHRpb24gLS1jb25maWctY2FjaGUuCisrIyBJdCBpcyBub3QgdXNlZnVsIG9uIG90aGVyIHN5c3RlbXMuICBJZiBpdCBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndAorKyMgd2FudCB0byBrZWVwLCB5b3UgbWF5IHJlbW92ZSBvciBlZGl0IGl0LgorKyMKKysjIGNvbmZpZy5zdGF0dXMgb25seSBwYXlzIGF0dGVudGlvbiB0byB0aGUgY2FjaGUgZmlsZSBpZiB5b3UgZ2l2ZSBpdAorKyMgdGhlIC0tcmVjaGVjayBvcHRpb24gdG8gcmVydW4gY29uZmlndXJlLgorKyMKKysjIGBhY19jdl9lbnZfZm9vJyB2YXJpYWJsZXMgKHNldCBvciB1bnNldCkgd2lsbCBiZSBvdmVycmlkZGVuIHdoZW4KKysjIGxvYWRpbmcgdGhpcyBmaWxlLCBvdGhlciAqdW5zZXQqIGBhY19jdl9mb28nIHdpbGwgYmUgYXNzaWduZWQgdGhlCisrIyBmb2xsb3dpbmcgdmFsdWVzLgorKworK19BQ0VPRgorKworKyMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisrIyBidXQgd2Uga25vdyBvZiBubyB3b3JrYXJvdW5kIHRoYXQgaXMgc2ltcGxlLCBwb3J0YWJsZSwgYW5kIGVmZmljaWVudC4KKysjIFNvLCB3ZSBraWxsIHZhcmlhYmxlcyBjb250YWluaW5nIG5ld2xpbmVzLgorKyMgVWx0cml4IHNoIHNldCB3cml0ZXMgdG8gc3RkZXJyIGFuZCBjYW4ndCBiZSByZWRpcmVjdGVkIGRpcmVjdGx5LAorKyMgYW5kIHNldHMgdGhlIGhpZ2ggYml0IGluIHRoZSBjYWNoZSBmaWxlIHVubGVzcyB3ZSBhc3NpZ24gdG8gdGhlIHZhcnMuCisrKAorKyAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdgOyBkbworKyAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKysgICAgY2FzZSAkYWNfdmFsIGluICMoCisrICAgICoke2FzX25sfSopCisrICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisrICAgICAgKl9jdl8qKSB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBDYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZS4iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogQ2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUuIiA+JjI7fSA7OworKyAgICAgIGVzYWMKKysgICAgICBjYXNlICRhY192YXIgaW4gIygKKysgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisrICAgICAgKikgJGFzX3Vuc2V0ICRhY192YXIgOzsKKysgICAgICBlc2FjIDs7CisrICAgIGVzYWMKKysgIGRvbmUKKysKKysgIChzZXQpIDI+JjEgfAorKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9JyAnOyBzZXQpIDI+JjFgIGluICMoCisrICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKKysgICAgICAjIGBzZXQnIGRvZXMgbm90IHF1b3RlIGNvcnJlY3RseSwgc28gYWRkIHF1b3RlcyAoZG91YmxlLXF1b3RlCisrICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXCkuCisrICAgICAgc2VkIC1uIFwKKysJInMvJy8nXFxcXCcnL2c7CisrCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgorKyAgICAgIDs7ICMoCisrICAgICopCisrICAgICAgIyBgc2V0JyBxdW90ZXMgY29ycmVjdGx5IGFzIHJlcXVpcmVkIGJ5IFBPU0lYLCBzbyBkbyBub3QgYWRkIHF1b3Rlcy4KKysgICAgICBzZWQgLW4gIi9eW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qPS9wIgorKyAgICAgIDs7CisrICAgIGVzYWMgfAorKyAgICBzb3J0CisrKSB8CisrICBzZWQgJworKyAgICAgL15hY19jdl9lbnZfL2IgZW5kCisrICAgICB0IGNsZWFyCisrICAgICA6Y2xlYXIKKysgICAgIHMvXlwoW149XSpcKT1cKC4qW3t9XS4qXCkkL3Rlc3QgIiR7XDErc2V0fSIgPSBzZXQgfHwgJi8KKysgICAgIHQgZW5kCisrICAgICBzL15cKFtePV0qXCk9XCguKlwpJC9cMT0ke1wxPVwyfS8KKysgICAgIDplbmQnID4+Y29uZmNhY2hlCisraWYgZGlmZiAiJGNhY2hlX2ZpbGUiIGNvbmZjYWNoZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorKyAgaWYgdGVzdCAtdyAiJGNhY2hlX2ZpbGUiOyB0aGVuCisrICAgIHRlc3QgIngkY2FjaGVfZmlsZSIgIT0gIngvZGV2L251bGwiICYmCisrICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorK2VjaG8gIiRhc19tZTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisrICAgIGNhdCBjb25mY2FjaGUgPiRjYWNoZV9maWxlCisrICBlbHNlCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKytlY2hvICIkYXNfbWU6IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorKyAgZmkKKytmaQorK3JtIC1mIGNvbmZjYWNoZQorKworK3Rlc3QgIngkcHJlZml4IiA9IHhOT05FICYmIHByZWZpeD0kYWNfZGVmYXVsdF9wcmVmaXgKKysjIExldCBtYWtlIGV4cGFuZCBleGVjX3ByZWZpeC4KKyt0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9IHhOT05FICYmIGV4ZWNfcHJlZml4PScke3ByZWZpeH0nCisrCisrIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIERFRlMuCisrIyBQcm90ZWN0IGFnYWluc3Qgc2hlbGwgZXhwYW5zaW9uIHdoaWxlIGV4ZWN1dGluZyBNYWtlZmlsZSBydWxlcy4KKysjIFByb3RlY3QgYWdhaW5zdCBNYWtlZmlsZSBtYWNybyBleHBhbnNpb24uCisrIworKyMgSWYgdGhlIGZpcnN0IHNlZCBzdWJzdGl0dXRpb24gaXMgZXhlY3V0ZWQgKHdoaWNoIGxvb2tzIGZvciBtYWNyb3MgdGhhdAorKyMgdGFrZSBhcmd1bWVudHMpLCB0aGVuIGJyYW5jaCB0byB0aGUgcXVvdGUgc2VjdGlvbi4gIE90aGVyd2lzZSwKKysjIGxvb2sgZm9yIGEgbWFjcm8gdGhhdCBkb2Vzbid0IHRha2UgYXJndW1lbnRzLgorK2FjX3NjcmlwdD0nCisrdCBjbGVhcgorKzpjbGVhcgorK3MvXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qXChbXgkgKF1bXgkgKF0qKFteKV0qKVwpWwkgXSpcKC4qXCkvLURcMT1cMi9nCisrdCBxdW90ZQorK3MvXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qXChbXgkgXVteCSBdKlwpWwkgXSpcKC4qXCkvLURcMT1cMi9nCisrdCBxdW90ZQorK2IgYW55CisrOnF1b3RlCisrcy9bCSBgfiMkXiYqKCl7fVxcfDsnXCcnIjw+P10vXFwmL2cKKytzL1xbL1xcJi9nCisrcy9cXS9cXCYvZworK3MvXCQvJCQvZworK0gKKys6YW55CisrJHsKKysJZworKwlzL15cbi8vCisrCXMvXG4vIC9nCisrCXAKKyt9CisrJworK0RFRlM9YHNlZCAtbiAiJGFjX3NjcmlwdCIgY29uZmRlZnMuaGAKKysKKysKKythY19saWJvYmpzPQorK2FjX2x0bGlib2Jqcz0KKytmb3IgYWNfaSBpbiA6ICRMSUJPQkpTOyBkbyB0ZXN0ICJ4JGFjX2kiID0geDogJiYgY29udGludWUKKysgICMgMS4gUmVtb3ZlIHRoZSBleHRlbnNpb24sIGFuZCAkVSBpZiBhbHJlYWR5IGluc3RhbGxlZC4KKysgIGFjX3NjcmlwdD0ncy9cJFVcLi8uLztzL1wubyQvLztzL1wub2JqJC8vJworKyAgYWNfaT1gZWNobyAiJGFjX2kiIHwgc2VkICIkYWNfc2NyaXB0ImAKKysgICMgMi4gUHJlcGVuZCBMSUJPQkpESVIuICBXaGVuIHVzZWQgd2l0aCBhdXRvbWFrZT49MS4xMCBMSUJPQkpESVIKKysgICMgICAgd2lsbCBiZSBzZXQgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSBMSUJPQkpTIG9iamVjdHMgYXJlIGJ1aWx0LgorKyAgYWNfbGlib2Jqcz0iJGFjX2xpYm9ianMgXCR7TElCT0JKRElSfSRhY19pXCRVLiRhY19vYmpleHQiCisrICBhY19sdGxpYm9ianM9IiRhY19sdGxpYm9ianMgXCR7TElCT0JKRElSfSRhY19pIickVS5sbycKKytkb25lCisrTElCT0JKUz0kYWNfbGlib2JqcworKworK0xUTElCT0JKUz0kYWNfbHRsaWJvYmpzCisrCisrCisrCisrOiAke0NPTkZJR19TVEFUVVM9Li9jb25maWcuc3RhdHVzfQorK2FjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCisrYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyAkQ09ORklHX1NUQVRVUyIKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY1CisrZWNobyAiJGFzX21lOiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY2O30KKytjYXQgPiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisrIyEgJFNIRUxMCisrIyBHZW5lcmF0ZWQgYnkgJGFzX21lLgorKyMgUnVuIHRoaXMgZmlsZSB0byByZWNyZWF0ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgorKyMgQ29tcGlsZXIgb3V0cHV0IHByb2R1Y2VkIGJ5IGNvbmZpZ3VyZSwgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKKysjIGNvbmZpZ3VyZSwgaXMgaW4gY29uZmlnLmxvZyBpZiBpdCBleGlzdHMuCisrCisrZGVidWc9ZmFsc2UKKythY19jc19yZWNoZWNrPWZhbHNlCisrYWNfY3Nfc2lsZW50PWZhbHNlCisrU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KKytfQUNFT0YKKysKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBNNHNoIEluaXRpYWxpemF0aW9uLiAgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysKKysjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKKytEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCisraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBlbXVsYXRlIHNoCisrICBOVUxMQ01EPToKKysgICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKysgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisrICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKysgIHNldG9wdCBOT19HTE9CX1NVQlNUCisrZWxzZQorKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluCisrICAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsKKytlc2FjCisrCisrZmkKKysKKysKKysKKysKKysjIFBBVEggbmVlZHMgQ1IKKysjIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCisrYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCisrYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCisrYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCisrYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JworK2FzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworKworKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgorK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisrICBlY2hvICIjISAvYmluL3NoIiA+Y29uZiQkLnNoCisrICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCisrICBjaG1vZCAreCBjb25mJCQuc2gKKysgIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5zaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgIFBBVEhfU0VQQVJBVE9SPSc7JworKyAgZWxzZQorKyAgICBQQVRIX1NFUEFSQVRPUj06CisrICBmaQorKyAgcm0gLWYgY29uZiQkLnNoCisrZmkKKysKKysjIFN1cHBvcnQgdW5zZXQgd2hlbiBwb3NzaWJsZS4KKytpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgIGFzX3Vuc2V0PXVuc2V0CisrZWxzZQorKyAgYXNfdW5zZXQ9ZmFsc2UKKytmaQorKworKworKyMgSUZTCisrIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4gIFF1b3RpbmcgaXMKKysjIHRoZXJlIHRvIHByZXZlbnQgZWRpdG9ycyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHNwYWNlLXRhYi4KKysjIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKKysjIHNwbGl0dGluZyBieSBzZXR0aW5nIElGUyB0byBlbXB0eSB2YWx1ZS4pCisrYXNfbmw9JworKycKKytJRlM9IiAiIgkkYXNfbmwiCisrCisrIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KKytjYXNlICQwIGluCisrICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7CisrICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworKyAgICAgOzsKKytlc2FjCisrIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworKyMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBwYXRoLgorK2lmIHRlc3QgIngkYXNfbXlzZWxmIiA9IHg7IHRoZW4KKysgIGFzX215c2VsZj0kMAorK2ZpCisraWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgorKyAgZWNobyAiJGFzX215c2VsZjogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUiID4mMgorKyAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisrZmkKKysKKysjIFdvcmsgYXJvdW5kIGJ1Z3MgaW4gcHJlLTMuMCBVV0lOIGtzaC4KKytmb3IgYXNfdmFyIGluIEVOViBNQUlMIE1BSUxQQVRICisrZG8gKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKKytkb25lCisrUFMxPSckICcKKytQUzI9Jz4gJworK1BTND0nKyAnCisrCisrIyBOTFMgbnVpc2FuY2VzLgorK2ZvciBhc192YXIgaW4gXAorKyAgTEFORyBMQU5HVUFHRSBMQ19BRERSRVNTIExDX0FMTCBMQ19DT0xMQVRFIExDX0NUWVBFIExDX0lERU5USUZJQ0FUSU9OIFwKKysgIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBcCisrICBMQ19URUxFUEhPTkUgTENfVElNRQorK2RvCisrICBpZiAoc2V0ICt4OyB0ZXN0IC16ICJgKGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcikgMj4mMWAiKTsgdGhlbgorKyAgICBldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIKKysgIGVsc2UKKysgICAgKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKKysgIGZpCisrZG9uZQorKworKyMgUmVxdWlyZWQgdG8gdXNlIGJhc2VuYW1lLgorK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisrICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KKysgIGFzX2V4cHI9ZXhwcgorK2Vsc2UKKysgIGFzX2V4cHI9ZmFsc2UKKytmaQorKworK2lmIChiYXNlbmFtZSAtLSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAtLSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KKysgIGFzX2Jhc2VuYW1lPWJhc2VuYW1lCisrZWxzZQorKyAgYXNfYmFzZW5hbWU9ZmFsc2UKKytmaQorKworKworKyMgTmFtZSBvZiB0aGUgZXhlY3V0YWJsZS4KKythc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwKKyskYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAorKwkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKysJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorK2VjaG8gWC8iJDAiIHwKKysgICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXC9cKFwvXC9cKSQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwvXChcL1wpLioveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIHMvLiovLi87IHEnYAorKworKyMgQ0RQQVRILgorKyRhc191bnNldCBDRFBBVEgKKysKKysKKysKKysgIGFzX2xpbmVub18xPSRMSU5FTk8KKysgIGFzX2xpbmVub18yPSRMSU5FTk8KKysgIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgorKyAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSArIDFgIiA9ICJ4JGFzX2xpbmVub18yIiB8fCB7CisrCisrICAjIENyZWF0ZSAkYXNfbWUubGluZW5vIGFzIGEgY29weSBvZiAkYXNfbXlzZWxmLCBidXQgd2l0aCAkTElORU5PCisrICAjIHVuaWZvcm1seSByZXBsYWNlZCBieSB0aGUgbGluZSBudW1iZXIuICBUaGUgZmlyc3QgJ3NlZCcgaW5zZXJ0cyBhCisrICAjIGxpbmUtbnVtYmVyIGxpbmUgYWZ0ZXIgZWFjaCBsaW5lIHVzaW5nICRMSU5FTk87IHRoZSBzZWNvbmQgJ3NlZCcKKysgICMgZG9lcyB0aGUgcmVhbCB3b3JrLiAgVGhlIHNlY29uZCBzY3JpcHQgdXNlcyAnTicgdG8gcGFpciBlYWNoCisrICAjIGxpbmUtbnVtYmVyIGxpbmUgd2l0aCB0aGUgbGluZSBjb250YWluaW5nICRMSU5FTk8sIGFuZCBhcHBlbmRzCisrICAjIHRyYWlsaW5nICctJyBkdXJpbmcgc3Vic3RpdHV0aW9uIHNvIHRoYXQgJExJTkVOTyBpcyBub3QgYSBzcGVjaWFsCisrICAjIGNhc2UgYXQgbGluZSBlbmQuCisrICAjIChSYWphIFIgSGFyaW5hdGggc3VnZ2VzdGVkIHNlZCAnPScsIGFuZCBQYXVsIEVnZ2VydCB3cm90ZSB0aGUKKysgICMgc2NyaXB0cyB3aXRoIG9wdGltaXphdGlvbiBoZWxwIGZyb20gUGFvbG8gQm9uemluaS4gIEJsYW1lIExlZQorKyAgIyBFLiBNY01haG9uICgxOTMxLTE5ODkpIGZvciBzZWQncyBzeW50YXguICA6LSkKKysgIHNlZCAtbiAnCisrICAgIHAKKysgICAgL1skXUxJTkVOTy89CisrICAnIDwkYXNfbXlzZWxmIHwKKysgICAgc2VkICcKKysgICAgICBzL1skXUxJTkVOTy4qLyYtLworKyAgICAgIHQgbGluZW5vCisrICAgICAgYgorKyAgICAgIDpsaW5lbm8KKysgICAgICBOCisrICAgICAgOmxvb3AKKysgICAgICBzL1skXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dLipcblwpXCguKlwpL1wyXDFcMi8KKysgICAgICB0IGxvb3AKKysgICAgICBzLy1cbi4qLy8KKysgICAgJyA+JGFzX21lLmxpbmVubyAmJgorKyAgY2htb2QgK3ggIiRhc19tZS5saW5lbm8iIHx8CisrICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSAkYXNfbWUubGluZW5vOyByZXJ1biB3aXRoIGEgUE9TSVggc2hlbGwiID4mMgorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKworKyAgIyBEb24ndCB0cnkgdG8gZXhlYyBhcyBpdCBjaGFuZ2VzICRbMF0sIGNhdXNpbmcgYWxsIHNvcnQgb2YgcHJvYmxlbXMKKysgICMgKHRoZSBkaXJuYW1lIG9mICRbMF0gaXMgbm90IHRoZSBwbGFjZSB3aGVyZSB3ZSBtaWdodCBmaW5kIHRoZQorKyAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpdGl2ZSB0byB0aGlzKS4KKysgIC4gIi4vJGFzX21lLmxpbmVubyIKKysgICMgRXhpdCBzdGF0dXMgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kLgorKyAgZXhpdAorK30KKysKKysKKytpZiAoYXNfZGlyPWBkaXJuYW1lIC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgIGFzX2Rpcm5hbWU9ZGlybmFtZQorK2Vsc2UKKysgIGFzX2Rpcm5hbWU9ZmFsc2UKKytmaQorKworK0VDSE9fQz0gRUNIT19OPSBFQ0hPX1Q9CisrY2FzZSBgZWNobyAtbiB4YCBpbgorKy1uKikKKysgIGNhc2UgYGVjaG8gJ3hcYydgIGluCisrICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBzaW5nbGUgdGFiIGNoYXJhY3Rlci4KKysgICopICAgRUNIT19DPSdcYyc7OworKyAgZXNhYzs7CisrKikKKysgIEVDSE9fTj0nLW4nOzsKKytlc2FjCisrCisraWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKKysgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorKyAgYXNfZXhwcj1leHByCisrZWxzZQorKyAgYXNfZXhwcj1mYWxzZQorK2ZpCisrCisrcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKKytpZiB0ZXN0IC1kIGNvbmYkJC5kaXI7IHRoZW4KKysgIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKKytlbHNlCisrICBybSAtZiBjb25mJCQuZGlyCisrICBta2RpciBjb25mJCQuZGlyCisrZmkKKytlY2hvID5jb25mJCQuZmlsZQorK2lmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorKyAgYXNfbG5fcz0nbG4gLXMnCisrICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorKyAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKysgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorKyAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wJy4KKysgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKysgICAgYXNfbG5fcz0nY3AgLXAnCisrZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKysgIGFzX2xuX3M9bG4KKytlbHNlCisrICBhc19sbl9zPSdjcCAtcCcKKytmaQorK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKKytybWRpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCisrCisraWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgorKyAgYXNfbWtkaXJfcD06CisrZWxzZQorKyAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKysgIGFzX21rZGlyX3A9ZmFsc2UKKytmaQorKworK2lmIHRlc3QgLXggLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgIGFzX3Rlc3RfeD0ndGVzdCAteCcKKytlbHNlCisrICBpZiBscyAtZEwgLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgYXNfbHNfTF9vcHRpb249TAorKyAgZWxzZQorKyAgICBhc19sc19MX29wdGlvbj0KKysgIGZpCisrICBhc190ZXN0X3g9JworKyAgICBldmFsIHNoIC1jICdcJycKKysgICAgICBpZiB0ZXN0IC1kICIkMSI7IHRoZW4KKysgICAgICAgIHRlc3QgLWQgIiQxLy4iOworKyAgICAgIGVsc2UKKysJY2FzZSAkMSBpbgorKyAgICAgICAgLSopc2V0ICIuLyQxIjs7CisrCWVzYWM7CisrCWNhc2UgYGxzIC1sZCckYXNfbHNfTF9vcHRpb24nICIkMSIgMj4vZGV2L251bGxgIGluCisrCT8/P1tzeF0qKTo7OyopZmFsc2U7O2VzYWM7ZmkKKysgICAgJ1wnJyBzaAorKyAgJworK2ZpCisrYXNfZXhlY3V0YWJsZV9wPSRhc190ZXN0X3gKKysKKysjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCisrYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKysKKysjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KKythc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorKworKworK2V4ZWMgNj4mMQorKworKyMgU2F2ZSB0aGUgbG9nIG1lc3NhZ2UsIHRvIGtlZXAgJFswXSBhbmQgc28gb24gbWVhbmluZ2Z1bCwgYW5kIHRvCisrIyByZXBvcnQgYWN0dWFsIGlucHV0IHZhbHVlcyBvZiBDT05GSUdfRklMRVMgZXRjLiBpbnN0ZWFkIG9mIHRoZWlyCisrIyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4KKythY19sb2c9IgorK1RoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgbmV3bGliICRhc19tZSBORVdMSUJfVkVSU0lPTiwgd2hpY2ggd2FzCisrZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjYxLiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisrCisrICBDT05GSUdfRklMRVMgICAgPSAkQ09ORklHX0ZJTEVTCisrICBDT05GSUdfSEVBREVSUyAgPSAkQ09ORklHX0hFQURFUlMKKysgIENPTkZJR19MSU5LUyAgICA9ICRDT05GSUdfTElOS1MKKysgIENPTkZJR19DT01NQU5EUyA9ICRDT05GSUdfQ09NTUFORFMKKysgICQgJDAgJEAKKysKKytvbiBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKKysiCisrCisrX0FDRU9GCisrCisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKysjIEZpbGVzIHRoYXQgY29uZmlnLnN0YXR1cyB3YXMgbWFkZSBmb3IuCisrY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIgorKworK19BQ0VPRgorKworK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorK2FjX2NzX3VzYWdlPSJcCisrXGAkYXNfbWUnIGluc3RhbnRpYXRlcyBmaWxlcyBmcm9tIHRlbXBsYXRlcyBhY2NvcmRpbmcgdG8gdGhlCisrY3VycmVudCBjb25maWd1cmF0aW9uLgorKworK1VzYWdlOiAkMCBbT1BUSU9OU10gW0ZJTEVdLi4uCisrCisrICAtaCwgLS1oZWxwICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisrICAtViwgLS12ZXJzaW9uICAgIHByaW50IHZlcnNpb24gbnVtYmVyIGFuZCBjb25maWd1cmF0aW9uIHNldHRpbmdzLCB0aGVuIGV4aXQKKysgIC1xLCAtLXF1aWV0ICAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCisrICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKysgICAgICAtLXJlY2hlY2sgICAgdXBkYXRlICRhc19tZSBieSByZWNvbmZpZ3VyaW5nIGluIHRoZSBzYW1lIGNvbmRpdGlvbnMKKysgIC0tZmlsZT1GSUxFWzpURU1QTEFURV0KKysJCSAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQorKworK0NvbmZpZ3VyYXRpb24gZmlsZXM6CisrJGNvbmZpZ19maWxlcworKworK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b2NvbmZAZ251Lm9yZz4uIgorKworK19BQ0VPRgorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisrYWNfY3NfdmVyc2lvbj0iXFwKKytuZXdsaWIgY29uZmlnLnN0YXR1cyBORVdMSUJfVkVSU0lPTgorK2NvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MSwKKysgIHdpdGggb3B0aW9ucyBcXCJgZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9eIC8vOyBzL1tcXCIiXGBcJF0vXFxcXCYvZydgXFwiCisrCisrQ29weXJpZ2h0IChDKSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK1RoaXMgY29uZmlnLnN0YXR1cyBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorK2dpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCisrCisrYWNfcHdkPSckYWNfcHdkJworK3NyY2Rpcj0nJHNyY2RpcicKKytJTlNUQUxMPSckSU5TVEFMTCcKKytfQUNFT0YKKysKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKysjIElmIG5vIGZpbGUgYXJlIHNwZWNpZmllZCBieSB0aGUgdXNlciwgdGhlbiB3ZSBuZWVkIHRvIHByb3ZpZGUgZGVmYXVsdAorKyMgdmFsdWUuICBCeSB3ZSBuZWVkIHRvIGtub3cgaWYgZmlsZXMgd2VyZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuCisrYWNfbmVlZF9kZWZhdWx0cz06Cisrd2hpbGUgdGVzdCAkIyAhPSAwCisrZG8KKysgIGNhc2UgJDEgaW4KKysgIC0tKj0qKQorKyAgICBhY19vcHRpb249YGV4cHIgIlgkMSIgOiAnWFwoW149XSpcKT0nYAorKyAgICBhY19vcHRhcmc9YGV4cHIgIlgkMSIgOiAnWFtePV0qPVwoLipcKSdgCisrICAgIGFjX3NoaWZ0PToKKysgICAgOzsKKysgICopCisrICAgIGFjX29wdGlvbj0kMQorKyAgICBhY19vcHRhcmc9JDIKKysgICAgYWNfc2hpZnQ9c2hpZnQKKysgICAgOzsKKysgIGVzYWMKKysKKysgIGNhc2UgJGFjX29wdGlvbiBpbgorKyAgIyBIYW5kbGluZyBvZiB0aGUgb3B0aW9ucy4KKysgIC1yZWNoZWNrIHwgLS1yZWNoZWNrIHwgLS1yZWNoZWMgfCAtLXJlY2hlIHwgLS1yZWNoIHwgLS1yZWMgfCAtLXJlIHwgLS1yKQorKyAgICBhY19jc19yZWNoZWNrPTogOzsKKysgIC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC0tdmVyIHwgLS12ZSB8IC0tdiB8IC1WICkKKysgICAgZWNobyAiJGFjX2NzX3ZlcnNpb24iOyBleGl0IDs7CisrICAtLWRlYnVnIHwgLS1kZWJ1IHwgLS1kZWIgfCAtLWRlIHwgLS1kIHwgLWQgKQorKyAgICBkZWJ1Zz06IDs7CisrICAtLWZpbGUgfCAtLWZpbCB8IC0tZmkgfCAtLWYgKQorKyAgICAkYWNfc2hpZnQKKysgICAgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTICRhY19vcHRhcmciCisrICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworKyAgLS1oZSB8IC0taCB8ICAtLWhlbHAgfCAtLWhlbCB8IC1oICkKKysgICAgZWNobyAiJGFjX2NzX3VzYWdlIjsgZXhpdCA7OworKyAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKysgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsIHwgLS1zaSB8IC0tcykKKysgICAgYWNfY3Nfc2lsZW50PTogOzsKKysKKysgICMgVGhpcyBpcyBhbiBlcnJvci4KKysgIC0qKSB7IGVjaG8gIiRhc19tZTogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb246ICQxCisrVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMgorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworKworKyAgKikgYWNfY29uZmlnX3RhcmdldHM9IiRhY19jb25maWdfdGFyZ2V0cyAkMSIKKysgICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2UgOzsKKysKKysgIGVzYWMKKysgIHNoaWZ0CisrZG9uZQorKworK2FjX2NvbmZpZ3VyZV9leHRyYV9hcmdzPQorKworK2lmICRhY19jc19zaWxlbnQ7IHRoZW4KKysgIGV4ZWMgNj4vZGV2L251bGwKKysgIGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzPSIkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1zaWxlbnQiCisrZmkKKysKKytfQUNFT0YKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorK2lmIFwkYWNfY3NfcmVjaGVjazsgdGhlbgorKyAgZWNobyAicnVubmluZyBDT05GSUdfU0hFTEw9JFNIRUxMICRTSEVMTCAkMCAiJGFjX2NvbmZpZ3VyZV9hcmdzIFwkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgIiAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbiIgPiY2CisrICBDT05GSUdfU0hFTEw9JFNIRUxMCisrICBleHBvcnQgQ09ORklHX1NIRUxMCisrICBleGVjICRTSEVMTCAiJDAiJGFjX2NvbmZpZ3VyZV9hcmdzIFwkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24KKytmaQorKworK19BQ0VPRgorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorK2V4ZWMgNT4+Y29uZmlnLmxvZworK3sKKysgIGVjaG8KKysgIHNlZCAnaDtzLy4vLS9nO3MvXi4uLi8jIyAvO3MvLi4uJC8gIyMvO3A7eDtwO3gnIDw8X0FTQk9YCisrIyMgUnVubmluZyAkYXNfbWUuICMjCisrX0FTQk9YCisrICBlY2hvICIkYWNfbG9nIgorK30gPiY1CisrCisrX0FDRU9GCisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKytfQUNFT0YKKysKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKysKKysjIEhhbmRsaW5nIG9mIGFyZ3VtZW50cy4KKytmb3IgYWNfY29uZmlnX3RhcmdldCBpbiAkYWNfY29uZmlnX3RhcmdldHMKKytkbworKyAgY2FzZSAkYWNfY29uZmlnX3RhcmdldCBpbgorKyAgICAiTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFrZWZpbGUiIDs7CisrCisrICAqKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50OiAkYWNfY29uZmlnX3RhcmdldCIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBhcmd1bWVudDogJGFjX2NvbmZpZ190YXJnZXQiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKysgIGVzYWMKKytkb25lCisrCisrCisrIyBJZiB0aGUgdXNlciBkaWQgbm90IHVzZSB0aGUgYXJndW1lbnRzIHRvIHNwZWNpZnkgdGhlIGl0ZW1zIHRvIGluc3RhbnRpYXRlLAorKyMgdGhlbiB0aGUgZW52dmFyIGludGVyZmFjZSBpcyB1c2VkLiAgU2V0IG9ubHkgdGhvc2UgdGhhdCBhcmUgbm90LgorKyMgV2UgdXNlIHRoZSBsb25nIGZvcm0gZm9yIHRoZSBkZWZhdWx0IGFzc2lnbm1lbnQgYmVjYXVzZSBvZiBhbiBleHRyZW1lbHkKKysjIGJpemFycmUgYnVnIG9uIFN1bk9TIDQuMS4zLgorK2lmICRhY19uZWVkX2RlZmF1bHRzOyB0aGVuCisrICB0ZXN0ICIke0NPTkZJR19GSUxFUytzZXR9IiA9IHNldCB8fCBDT05GSUdfRklMRVM9JGNvbmZpZ19maWxlcworK2ZpCisrCisrIyBIYXZlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmb3IgY29udmVuaWVuY2UuICBNYWtlIGl0IGluIHRoZSBidWlsZCB0cmVlCisrIyBzaW1wbHkgYmVjYXVzZSB0aGVyZSBpcyBubyByZWFzb24gYWdhaW5zdCBoYXZpbmcgaXQgaGVyZSwgYW5kIGluIGFkZGl0aW9uLAorKyMgY3JlYXRpbmcgYW5kIG1vdmluZyBmaWxlcyBmcm9tIC90bXAgY2FuIHNvbWV0aW1lcyBjYXVzZSBwcm9ibGVtcy4KKysjIEhvb2sgZm9yIGl0cyByZW1vdmFsIHVubGVzcyBkZWJ1Z2dpbmcuCisrIyBOb3RlIHRoYXQgdGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaW4gd2hpY2ggdGhlIGRpcmVjdG9yeSB3aWxsIG5vdCBiZSBjbGVhbmVkOgorKyMgYWZ0ZXIgaXRzIGNyZWF0aW9uIGJ1dCBiZWZvcmUgaXRzIG5hbWUgaGFzIGJlZW4gYXNzaWduZWQgdG8gYCR0bXAnLgorKyRkZWJ1ZyB8fAorK3sKKysgIHRtcD0KKysgIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/CisrICB7IHRlc3QgLXogIiR0bXAiIHx8IHRlc3QgISAtZCAiJHRtcCIgfHwgcm0gLWZyICIkdG1wIjsgfSAmJiBleGl0ICRleGl0X3N0YXR1cworKycgMAorKyAgdHJhcCAneyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAxIDIgMTMgMTUKKyt9CisrIyBDcmVhdGUgYSAoc2VjdXJlKSB0bXAgZGlyZWN0b3J5IGZvciB0bXAgZmlsZXMuCisrCisreworKyAgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiLi9jb25mWFhYWFhYIikgMj4vZGV2L251bGxgICYmCisrICB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIgorK30gIHx8CisreworKyAgdG1wPS4vY29uZiQkLSRSQU5ET00KKysgICh1bWFzayAwNzcgJiYgbWtkaXIgIiR0bXAiKQorK30gfHwKKyt7CisrICAgZWNobyAiJG1lOiBjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAuIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH0KKyt9CisrCisrIworKyMgU2V0IHVwIHRoZSBzZWQgc2NyaXB0cyBmb3IgQ09ORklHX0ZJTEVTIHNlY3Rpb24uCisrIworKworKyMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGUgc2NyaXB0cyBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0ZJTEVTLgorKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aGVuIC4vY29uZmlnLnN0YXR1cyBjb25maWcuaAorK2lmIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiOyB0aGVuCisrCisrX0FDRU9GCisrCisrCisrCisrYWNfZGVsaW09JyUhXyEjICcKKytmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgOjsgZG8KKysgIGNhdCA+Y29uZiQkc3Vicy5zZWQgPDxfQUNFT0YKKytTSEVMTCEkU0hFTEwkYWNfZGVsaW0KKytQQVRIX1NFUEFSQVRPUiEkUEFUSF9TRVBBUkFUT1IkYWNfZGVsaW0KKytQQUNLQUdFX05BTUUhJFBBQ0tBR0VfTkFNRSRhY19kZWxpbQorK1BBQ0tBR0VfVEFSTkFNRSEkUEFDS0FHRV9UQVJOQU1FJGFjX2RlbGltCisrUEFDS0FHRV9WRVJTSU9OISRQQUNLQUdFX1ZFUlNJT04kYWNfZGVsaW0KKytQQUNLQUdFX1NUUklORyEkUEFDS0FHRV9TVFJJTkckYWNfZGVsaW0KKytQQUNLQUdFX0JVR1JFUE9SVCEkUEFDS0FHRV9CVUdSRVBPUlQkYWNfZGVsaW0KKytleGVjX3ByZWZpeCEkZXhlY19wcmVmaXgkYWNfZGVsaW0KKytwcmVmaXghJHByZWZpeCRhY19kZWxpbQorK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUhJHByb2dyYW1fdHJhbnNmb3JtX25hbWUkYWNfZGVsaW0KKytiaW5kaXIhJGJpbmRpciRhY19kZWxpbQorK3NiaW5kaXIhJHNiaW5kaXIkYWNfZGVsaW0KKytsaWJleGVjZGlyISRsaWJleGVjZGlyJGFjX2RlbGltCisrZGF0YXJvb3RkaXIhJGRhdGFyb290ZGlyJGFjX2RlbGltCisrZGF0YWRpciEkZGF0YWRpciRhY19kZWxpbQorK3N5c2NvbmZkaXIhJHN5c2NvbmZkaXIkYWNfZGVsaW0KKytzaGFyZWRzdGF0ZWRpciEkc2hhcmVkc3RhdGVkaXIkYWNfZGVsaW0KKytsb2NhbHN0YXRlZGlyISRsb2NhbHN0YXRlZGlyJGFjX2RlbGltCisraW5jbHVkZWRpciEkaW5jbHVkZWRpciRhY19kZWxpbQorK29sZGluY2x1ZGVkaXIhJG9sZGluY2x1ZGVkaXIkYWNfZGVsaW0KKytkb2NkaXIhJGRvY2RpciRhY19kZWxpbQorK2luZm9kaXIhJGluZm9kaXIkYWNfZGVsaW0KKytodG1sZGlyISRodG1sZGlyJGFjX2RlbGltCisrZHZpZGlyISRkdmlkaXIkYWNfZGVsaW0KKytwZGZkaXIhJHBkZmRpciRhY19kZWxpbQorK3BzZGlyISRwc2RpciRhY19kZWxpbQorK2xpYmRpciEkbGliZGlyJGFjX2RlbGltCisrbG9jYWxlZGlyISRsb2NhbGVkaXIkYWNfZGVsaW0KKyttYW5kaXIhJG1hbmRpciRhY19kZWxpbQorK0RFRlMhJERFRlMkYWNfZGVsaW0KKytFQ0hPX0MhJEVDSE9fQyRhY19kZWxpbQorK0VDSE9fTiEkRUNIT19OJGFjX2RlbGltCisrRUNIT19UISRFQ0hPX1QkYWNfZGVsaW0KKytMSUJTISRMSUJTJGFjX2RlbGltCisrYnVpbGRfYWxpYXMhJGJ1aWxkX2FsaWFzJGFjX2RlbGltCisraG9zdF9hbGlhcyEkaG9zdF9hbGlhcyRhY19kZWxpbQorK3RhcmdldF9hbGlhcyEkdGFyZ2V0X2FsaWFzJGFjX2RlbGltCisrTUFZX1NVUFBMWV9TWVNDQUxMU19UUlVFISRNQVlfU1VQUExZX1NZU0NBTExTX1RSVUUkYWNfZGVsaW0KKytNQVlfU1VQUExZX1NZU0NBTExTX0ZBTFNFISRNQVlfU1VQUExZX1NZU0NBTExTX0ZBTFNFJGFjX2RlbGltCisrbmV3bGliX2Jhc2VkaXIhJG5ld2xpYl9iYXNlZGlyJGFjX2RlbGltCisrYnVpbGQhJGJ1aWxkJGFjX2RlbGltCisrYnVpbGRfY3B1ISRidWlsZF9jcHUkYWNfZGVsaW0KKytidWlsZF92ZW5kb3IhJGJ1aWxkX3ZlbmRvciRhY19kZWxpbQorK2J1aWxkX29zISRidWlsZF9vcyRhY19kZWxpbQorK2hvc3QhJGhvc3QkYWNfZGVsaW0KKytob3N0X2NwdSEkaG9zdF9jcHUkYWNfZGVsaW0KKytob3N0X3ZlbmRvciEkaG9zdF92ZW5kb3IkYWNfZGVsaW0KKytob3N0X29zISRob3N0X29zJGFjX2RlbGltCisrdGFyZ2V0ISR0YXJnZXQkYWNfZGVsaW0KKyt0YXJnZXRfY3B1ISR0YXJnZXRfY3B1JGFjX2RlbGltCisrdGFyZ2V0X3ZlbmRvciEkdGFyZ2V0X3ZlbmRvciRhY19kZWxpbQorK3RhcmdldF9vcyEkdGFyZ2V0X29zJGFjX2RlbGltCisrSU5TVEFMTF9QUk9HUkFNISRJTlNUQUxMX1BST0dSQU0kYWNfZGVsaW0KKytJTlNUQUxMX1NDUklQVCEkSU5TVEFMTF9TQ1JJUFQkYWNfZGVsaW0KKytJTlNUQUxMX0RBVEEhJElOU1RBTExfREFUQSRhY19kZWxpbQorK1BBQ0tBR0UhJFBBQ0tBR0UkYWNfZGVsaW0KKytWRVJTSU9OISRWRVJTSU9OJGFjX2RlbGltCisrQUNMT0NBTCEkQUNMT0NBTCRhY19kZWxpbQorK0FVVE9DT05GISRBVVRPQ09ORiRhY19kZWxpbQorK0FVVE9NQUtFISRBVVRPTUFLRSRhY19kZWxpbQorK0FVVE9IRUFERVIhJEFVVE9IRUFERVIkYWNfZGVsaW0KKytNQUtFSU5GTyEkTUFLRUlORk8kYWNfZGVsaW0KKytTRVRfTUFLRSEkU0VUX01BS0UkYWNfZGVsaW0KKytDQyEkQ0MkYWNfZGVsaW0KKytBUyEkQVMkYWNfZGVsaW0KKytBUiEkQVIkYWNfZGVsaW0KKytSQU5MSUIhJFJBTkxJQiRhY19kZWxpbQorK01BSU5UQUlORVJfTU9ERV9UUlVFISRNQUlOVEFJTkVSX01PREVfVFJVRSRhY19kZWxpbQorK01BSU5UQUlORVJfTU9ERV9GQUxTRSEkTUFJTlRBSU5FUl9NT0RFX0ZBTFNFJGFjX2RlbGltCisrTUFJTlQhJE1BSU5UJGFjX2RlbGltCisrTkVXTElCX0NGTEFHUyEkTkVXTElCX0NGTEFHUyRhY19kZWxpbQorK0xERkxBR1MhJExERkxBR1MkYWNfZGVsaW0KKytFTElYX0xFVkVMXzBfVFJVRSEkRUxJWF9MRVZFTF8wX1RSVUUkYWNfZGVsaW0KKytFTElYX0xFVkVMXzBfRkFMU0UhJEVMSVhfTEVWRUxfMF9GQUxTRSRhY19kZWxpbQorK0VMSVhfTEVWRUxfMV9UUlVFISRFTElYX0xFVkVMXzFfVFJVRSRhY19kZWxpbQorK0VMSVhfTEVWRUxfMV9GQUxTRSEkRUxJWF9MRVZFTF8xX0ZBTFNFJGFjX2RlbGltCisrRUxJWF9MRVZFTF8yX1RSVUUhJEVMSVhfTEVWRUxfMl9UUlVFJGFjX2RlbGltCisrRUxJWF9MRVZFTF8yX0ZBTFNFISRFTElYX0xFVkVMXzJfRkFMU0UkYWNfZGVsaW0KKytFTElYX0xFVkVMXzNfVFJVRSEkRUxJWF9MRVZFTF8zX1RSVUUkYWNfZGVsaW0KKytFTElYX0xFVkVMXzNfRkFMU0UhJEVMSVhfTEVWRUxfM19GQUxTRSRhY19kZWxpbQorK0VMSVhfTEVWRUxfNF9UUlVFISRFTElYX0xFVkVMXzRfVFJVRSRhY19kZWxpbQorK0VMSVhfTEVWRUxfNF9GQUxTRSEkRUxJWF9MRVZFTF80X0ZBTFNFJGFjX2RlbGltCisrVVNFX0xJQlRPT0xfVFJVRSEkVVNFX0xJQlRPT0xfVFJVRSRhY19kZWxpbQorK1VTRV9MSUJUT09MX0ZBTFNFISRVU0VfTElCVE9PTF9GQUxTRSRhY19kZWxpbQorK09CSkVYVCEkT0JKRVhUJGFjX2RlbGltCisrb2V4dCEkb2V4dCRhY19kZWxpbQorK2FleHQhJGFleHQkYWNfZGVsaW0KKytsaWJtX21hY2hpbmVfZGlyISRsaWJtX21hY2hpbmVfZGlyJGFjX2RlbGltCisrbWFjaGluZV9kaXIhJG1hY2hpbmVfZGlyJGFjX2RlbGltCisrc3lzX2RpciEkc3lzX2RpciRhY19kZWxpbQorK0xJQk9CSlMhJExJQk9CSlMkYWNfZGVsaW0KKytMVExJQk9CSlMhJExUTElCT0JKUyRhY19kZWxpbQorK19BQ0VPRgorKworKyAgaWYgdGVzdCBgc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLnNlZCB8IGdyZXAgLWMgWGAgPSA5MjsgdGhlbgorKyAgICBicmVhaworKyAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKysgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IGNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKyAgZWxzZQorKyAgICBhY19kZWxpbT0iJGFjX2RlbGltISRhY19kZWxpbSBfJGFjX2RlbGltISEgIgorKyAgZmkKKytkb25lCisrCisrYWNfZW9mPWBzZWQgLW4gJy9eQ0VPRlswLTldKiQvcy9DRU9GLzAvcCcgY29uZiQkc3Vicy5zZWRgCisraWYgdGVzdCAtbiAiJGFjX2VvZiI7IHRoZW4KKysgIGFjX2VvZj1gZWNobyAiJGFjX2VvZiIgfCBzb3J0IC1ucnUgfCBzZWQgMXFgCisrICBhY19lb2Y9YGV4cHIgJGFjX2VvZiArIDFgCisrZmkKKysKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorK2NhdCA+IlwkdG1wL3N1YnMtMS5zZWQiIDw8XENFT0YkYWNfZW9mCisrL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYiBlbmQKKytfQUNFT0YKKytzZWQgJworK3MvWyxcXCZdL1xcJi9nOyBzL0AvQHwjXyEhXyN8L2cKKytzL14vcyxALzsgcy8hL0AsfCNfISFfI3wvCisrOm4KKyt0IG4KKytzLyciJGFjX2RlbGltIickLyxnLzsgdAorK3MvJC9cXC87IHAKKytOOyBzL14uKlxuLy87IHMvWyxcXCZdL1xcJi9nOyBzL0AvQHwjXyEhXyN8L2c7IGIgbgorKycgPj4kQ09ORklHX1NUQVRVUyA8Y29uZiQkc3Vicy5zZWQKKytybSAtZiBjb25mJCRzdWJzLnNlZAorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisrOmVuZAorK3MvfCNfISFfI3wvL2cKKytDRU9GJGFjX2VvZgorK19BQ0VPRgorKworKworKyMgVlBBVEggbWF5IGNhdXNlIHRyb3VibGUgd2l0aCBzb21lIG1ha2VzLCBzbyB3ZSByZW1vdmUgJChzcmNkaXIpLAorKyMgJHtzcmNkaXJ9IGFuZCBAc3JjZGlyQCBmcm9tIFZQQVRIIGlmIHNyY2RpciBpcyAiLiIsIHN0cmlwIGxlYWRpbmcgYW5kCisrIyB0cmFpbGluZyBjb2xvbnMgYW5kIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBsaW5lIGlmIFZQQVRIIGJlY29tZXMgZW1wdHkKKysjIChhY3R1YWxseSB3ZSBsZWF2ZSBhbiBlbXB0eSBsaW5lIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycykuCisraWYgdGVzdCAieCRzcmNkaXIiID0geC47IHRoZW4KKysgIGFjX3Zwc3ViPScvXlsJIF0qVlBBVEhbCSBdKj0veworK3MvOipcJChzcmNkaXIpOiovOi8KKytzLzoqXCR7c3JjZGlyfToqLzovCisrcy86KkBzcmNkaXJAOiovOi8KKytzL15cKFtePV0qPVsJIF0qXCk6Ki9cMS8KKytzLzoqJC8vCisrcy9eW149XSo9WwkgXSokLy8KKyt9JworK2ZpCisrCisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisrZmkgIyB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIgorKworKworK2ZvciBhY190YWcgaW4gIDpGICRDT05GSUdfRklMRVMKKytkbworKyAgY2FzZSAkYWNfdGFnIGluCisrICA6W0ZITENdKSBhY19tb2RlPSRhY190YWc7IGNvbnRpbnVlOzsKKysgIGVzYWMKKysgIGNhc2UgJGFjX21vZGUkYWNfdGFnIGluCisrICA6W0ZITF0qOiopOzsKKysgIDpMKiB8IDpDKjoqKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBJbnZhbGlkIHRhZyAkYWNfdGFnLiIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogSW52YWxpZCB0YWcgJGFjX3RhZy4iID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKysgIDpbRkhdLSkgYWNfdGFnPS06LTs7CisrICA6W0ZIXSopIGFjX3RhZz0kYWNfdGFnOiRhY190YWcuaW47OworKyAgZXNhYworKyAgYWNfc2F2ZV9JRlM9JElGUworKyAgSUZTPToKKysgIHNldCB4ICRhY190YWcKKysgIElGUz0kYWNfc2F2ZV9JRlMKKysgIHNoaWZ0CisrICBhY19maWxlPSQxCisrICBzaGlmdAorKworKyAgY2FzZSAkYWNfbW9kZSBpbgorKyAgOkwpIGFjX3NvdXJjZT0kMTs7CisrICA6W0ZIXSkKKysgICAgYWNfZmlsZV9pbnB1dHM9CisrICAgIGZvciBhY19mCisrICAgIGRvCisrICAgICAgY2FzZSAkYWNfZiBpbgorKyAgICAgIC0pIGFjX2Y9IiR0bXAvc3RkaW4iOzsKKysgICAgICAqKSAjIExvb2sgZm9yIHRoZSBmaWxlIGZpcnN0IGluIHRoZSBidWlsZCB0cmVlLCB0aGVuIGluIHRoZSBzb3VyY2UgdHJlZQorKwkgIyAoaWYgdGhlIHBhdGggaXMgbm90IGFic29sdXRlKS4gIFRoZSBhYnNvbHV0ZSBwYXRoIGNhbm5vdCBiZSBET1Mtc3R5bGUsCisrCSAjIGJlY2F1c2UgJGFjX2YgY2Fubm90IGNvbnRhaW4gYDonLgorKwkgdGVzdCAtZiAiJGFjX2YiIHx8CisrCSAgIGNhc2UgJGFjX2YgaW4KKysJICAgW1xcLyRdKikgZmFsc2U7OworKwkgICAqKSB0ZXN0IC1mICIkc3JjZGlyLyRhY19mIiAmJiBhY19mPSIkc3JjZGlyLyRhY19mIjs7CisrCSAgIGVzYWMgfHwKKysJICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGFjX2YiID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRhY19mIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisrICAgICAgZXNhYworKyAgICAgIGFjX2ZpbGVfaW5wdXRzPSIkYWNfZmlsZV9pbnB1dHMgJGFjX2YiCisrICAgIGRvbmUKKysKKysgICAgIyBMZXQncyBzdGlsbCBwcmV0ZW5kIGl0IGlzIGBjb25maWd1cmUnIHdoaWNoIGluc3RhbnRpYXRlcyAoaS5lLiwgZG9uJ3QKKysgICAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byByZWFkOgorKyAgICAjICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZy5zdGF0dXMuICAqLworKyAgICBjb25maWd1cmVfaW5wdXQ9IkdlbmVyYXRlZCBmcm9tICJgSUZTPToKKysJICBlY2hvICQqIHwgc2VkICdzfF5bXjpdKi98fDtzfDpbXjpdKi98LCB8ZydgIiBieSBjb25maWd1cmUuIgorKyAgICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisrICAgICAgY29uZmlndXJlX2lucHV0PSIkYWNfZmlsZS4gICRjb25maWd1cmVfaW5wdXQiCisrICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQorK2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9CisrICAgIGZpCisrCisrICAgIGNhc2UgJGFjX3RhZyBpbgorKyAgICAqOi06KiB8ICo6LSkgY2F0ID4iJHRtcC9zdGRpbiI7OworKyAgICBlc2FjCisrICAgIDs7CisrICBlc2FjCisrCisrICBhY19kaXI9YCRhc19kaXJuYW1lIC0tICIkYWNfZmlsZSIgfHwKKyskYXNfZXhwciBYIiRhY19maWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKysJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCisrCSBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKytlY2hvIFgiJGFjX2ZpbGUiIHwKKysgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXC9cKVteL10uKi97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXChcL1wvXCkkL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXCkuKi97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgcy8uKi8uLzsgcSdgCisrICB7IGFzX2Rpcj0iJGFjX2RpciIKKysgIGNhc2UgJGFzX2RpciBpbiAjKAorKyAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OworKyAgZXNhYworKyAgdGVzdCAtZCAiJGFzX2RpciIgfHwgeyAkYXNfbWtkaXJfcCAmJiBta2RpciAtcCAiJGFzX2RpciI7IH0gfHwgeworKyAgICBhc19kaXJzPQorKyAgICB3aGlsZSA6OyBkbworKyAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAorKyAgICAgICpcJyopIGFzX3FkaXI9YGVjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIygKKysgICAgICAqKSBhc19xZGlyPSRhc19kaXI7OworKyAgICAgIGVzYWMKKysgICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgorKyAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8CisrJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKytlY2hvIFgiJGFzX2RpciIgfAorKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXC9cKSQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cKS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICBzLy4qLy4vOyBxJ2AKKysgICAgICB0ZXN0IC1kICIkYXNfZGlyIiAmJiBicmVhaworKyAgICBkb25lCisrICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKysgIH0gfHwgdGVzdCAtZCAiJGFzX2RpciIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKysgIGFjX2J1aWxkZGlyPS4KKysKKytjYXNlICIkYWNfZGlyIiBpbgorKy4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKyopCisrICBhY19kaXJfc3VmZml4PS9gZWNobyAiJGFjX2RpciIgfCBzZWQgJ3MsXlwuW1xcL10sLCdgCisrICAjIEEgIi4uIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCisrICBhY190b3BfYnVpbGRkaXJfc3ViPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3MsL1teXFwvXSosLy4uLGc7cywvLCwnYAorKyAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgorKyAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKyAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7CisrICBlc2FjIDs7CisrZXNhYworK2FjX2Fic190b3BfYnVpbGRkaXI9JGFjX3B3ZAorK2FjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKKysjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorK2FjX3RvcF9idWlsZGRpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeAorKworK2Nhc2UgJHNyY2RpciBpbgorKyAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorKyAgICBhY19zcmNkaXI9LgorKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisrICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgbmFtZS4KKysgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKysgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCisrICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKysgICopICMgUmVsYXRpdmUgbmFtZS4KKysgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4CisrICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCisrICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7OworK2VzYWMKKythY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3NyY2RpciRhY19kaXJfc3VmZml4CisrCisrCisrICBjYXNlICRhY19tb2RlIGluCisrICA6RikKKysgICMKKysgICMgQ09ORklHX0ZJTEUKKysgICMKKysKKysgIGNhc2UgJElOU1RBTEwgaW4KKysgIFtcXC8kXSogfCA/OltcXC9dKiApIGFjX0lOU1RBTEw9JElOU1RBTEwgOzsKKysgICopIGFjX0lOU1RBTEw9JGFjX3RvcF9idWlsZF9wcmVmaXgkSU5TVEFMTCA7OworKyAgZXNhYworK19BQ0VPRgorKworK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorKyMgSWYgdGhlIHRlbXBsYXRlIGRvZXMgbm90IGtub3cgYWJvdXQgZGF0YXJvb3RkaXIsIGV4cGFuZCBpdC4KKysjIEZJWE1FOiBUaGlzIGhhY2sgc2hvdWxkIGJlIHJlbW92ZWQgYSBmZXcgeWVhcnMgYWZ0ZXIgMi42MC4KKythY19kYXRhcm9vdGRpcl9oYWNrPTsgYWNfZGF0YXJvb3RkaXJfc2Vlbj0KKysKKytjYXNlIGBzZWQgLW4gJy9kYXRhcm9vdGRpci8geworKyAgcAorKyAgcQorK30KKysvQGRhdGFkaXJAL3AKKysvQGRvY2RpckAvcAorKy9AaW5mb2RpckAvcAorKy9AbG9jYWxlZGlyQC9wCisrL0BtYW5kaXJAL3AKKysnICRhY19maWxlX2lucHV0c2AgaW4KKysqZGF0YXJvb3RkaXIqKSBhY19kYXRhcm9vdGRpcl9zZWVuPXllczs7CisrKkBkYXRhZGlyQCp8KkBkb2NkaXJAKnwqQGluZm9kaXJAKnwqQGxvY2FsZWRpckAqfCpAbWFuZGlyQCopCisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjI7fQorK19BQ0VPRgorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisrICBhY19kYXRhcm9vdGRpcl9oYWNrPScKKysgIHMmQGRhdGFkaXJAJiRkYXRhZGlyJmcKKysgIHMmQGRvY2RpckAmJGRvY2RpciZnCisrICBzJkBpbmZvZGlyQCYkaW5mb2RpciZnCisrICBzJkBsb2NhbGVkaXJAJiRsb2NhbGVkaXImZworKyAgcyZAbWFuZGlyQCYkbWFuZGlyJmcKKysgICAgcyZcXFwke2RhdGFyb290ZGlyfSYkZGF0YXJvb3RkaXImZycgOzsKKytlc2FjCisrX0FDRU9GCisrCisrIyBOZXV0cmFsaXplIFZQQVRIIHdoZW4gYCRzcmNkaXInID0gYC4nLgorKyMgU2hlbGwgY29kZSBpbiBjb25maWd1cmUuYWMgbWlnaHQgc2V0IGV4dHJhc3ViLgorKyMgRklYTUU6IGRvIHdlIHJlYWxseSB3YW50IHRvIG1haW50YWluIHRoaXMgZmVhdHVyZT8KKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorKyAgc2VkICIkYWNfdnBzdWIKKyskZXh0cmFzdWIKKytfQUNFT0YKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKys6dAorKy9AW2EtekEtWl9dW2EtekEtWl8wLTldKkAvIWIKKytzJkBjb25maWd1cmVfaW5wdXRAJiRjb25maWd1cmVfaW5wdXQmO3QgdAorK3MmQHRvcF9idWlsZGRpckAmJGFjX3RvcF9idWlsZGRpcl9zdWImO3QgdAorK3MmQHNyY2RpckAmJGFjX3NyY2RpciY7dCB0CisrcyZAYWJzX3NyY2RpckAmJGFjX2Fic19zcmNkaXImO3QgdAorK3MmQHRvcF9zcmNkaXJAJiRhY190b3Bfc3JjZGlyJjt0IHQKKytzJkBhYnNfdG9wX3NyY2RpckAmJGFjX2Fic190b3Bfc3JjZGlyJjt0IHQKKytzJkBidWlsZGRpckAmJGFjX2J1aWxkZGlyJjt0IHQKKytzJkBhYnNfYnVpbGRkaXJAJiRhY19hYnNfYnVpbGRkaXImO3QgdAorK3MmQGFic190b3BfYnVpbGRkaXJAJiRhY19hYnNfdG9wX2J1aWxkZGlyJjt0IHQKKytzJkBJTlNUQUxMQCYkYWNfSU5TVEFMTCY7dCB0CisrJGFjX2RhdGFyb290ZGlyX2hhY2sKKysiICRhY19maWxlX2lucHV0cyB8IHNlZCAtZiAiJHRtcC9zdWJzLTEuc2VkIiA+JHRtcC9vdXQKKysKKyt0ZXN0IC16ICIkYWNfZGF0YXJvb3RkaXJfaGFjayRhY19kYXRhcm9vdGRpcl9zZWVuIiAmJgorKyAgeyBhY19vdXQ9YHNlZCAtbiAnL1wke2RhdGFyb290ZGlyfS9wJyAiJHRtcC9vdXQiYDsgdGVzdCAtbiAiJGFjX291dCI7IH0gJiYKKysgIHsgYWNfb3V0PWBzZWQgLW4gJy9eWwkgXSpkYXRhcm9vdGRpclsJIF0qOio9L3AnICIkdG1wL291dCJgOyB0ZXN0IC16ICIkYWNfb3V0IjsgfSAmJgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCisrd2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkLiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgXGBkYXRhcm9vdGRpcicKKyt3aGljaCBzZWVtcyB0byBiZSB1bmRlZmluZWQuICBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQuIiA+JjI7fQorKworKyAgcm0gLWYgIiR0bXAvc3RkaW4iCisrICBjYXNlICRhY19maWxlIGluCisrICAtKSBjYXQgIiR0bXAvb3V0Ijsgcm0gLWYgIiR0bXAvb3V0Ijs7CisrICAqKSBybSAtZiAiJGFjX2ZpbGUiOyBtdiAiJHRtcC9vdXQiICRhY19maWxlOzsKKysgIGVzYWMKKysgOzsKKysKKysKKysKKysgIGVzYWMKKysKKytkb25lICMgZm9yIGFjX3RhZworKworKworK3sgKGV4aXQgMCk7IGV4aXQgMDsgfQorK19BQ0VPRgorK2NobW9kICt4ICRDT05GSUdfU1RBVFVTCisrYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKKysKKysKKysjIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGFuZCB0aGVuIGNhbGxzIGNvbmZpZy5zdGF0dXMuCisrIyBjb25maWcuc3RhdHVzIGRvZXMgaXRzIG93biByZWRpcmVjdGlvbiwgYXBwZW5kaW5nIHRvIGNvbmZpZy5sb2cuCisrIyBVbmZvcnR1bmF0ZWx5LCBvbiBET1MgdGhpcyBmYWlscywgYXMgY29uZmlnLmxvZyBpcyBzdGlsbCBrZXB0IG9wZW4KKysjIGJ5IGNvbmZpZ3VyZSwgc28gY29uZmlnLnN0YXR1cyB3b24ndCBiZSBhYmxlIHRvIHdyaXRlIHRvIGl0OyBpdHMKKysjIG91dHB1dCBpcyBzaW1wbHkgZGlzY2FyZGVkLiAgU28gd2UgZXhlYyB0aGUgRkQgdG8gL2Rldi9udWxsLAorKyMgZWZmZWN0aXZlbHkgY2xvc2luZyBjb25maWcubG9nLCBzbyBpdCBjYW4gYmUgcHJvcGVybHkgKHJlKW9wZW5lZCBhbmQKKysjIGFwcGVuZGVkIHRvIGJ5IGNvbmZpZy5zdGF0dXMuICBXaGVuIGNvbWluZyBiYWNrIHRvIGNvbmZpZ3VyZSwgd2UKKysjIG5lZWQgdG8gbWFrZSB0aGUgRkQgYXZhaWxhYmxlIGFnYWluLgorK2lmIHRlc3QgIiRub19jcmVhdGUiICE9IHllczsgdGhlbgorKyAgYWNfY3Nfc3VjY2Vzcz06CisrICBhY19jb25maWdfc3RhdHVzX2FyZ3M9CisrICB0ZXN0ICIkc2lsZW50IiA9IHllcyAmJgorKyAgICBhY19jb25maWdfc3RhdHVzX2FyZ3M9IiRhY19jb25maWdfc3RhdHVzX2FyZ3MgLS1xdWlldCIKKysgIGV4ZWMgNT4vZGV2L251bGwKKysgICRTSEVMTCAkQ09ORklHX1NUQVRVUyAkYWNfY29uZmlnX3N0YXR1c19hcmdzIHx8IGFjX2NzX3N1Y2Nlc3M9ZmFsc2UKKysgIGV4ZWMgNT4+Y29uZmlnLmxvZworKyAgIyBVc2UgfHwsIG5vdCAmJiwgdG8gYXZvaWQgZXhpdGluZyBmcm9tIHRoZSBpZiB3aXRoICQ/ID0gMSwgd2hpY2gKKysgICMgd291bGQgbWFrZSBjb25maWd1cmUgZmFpbCBpZiB0aGlzIGlzIHRoZSBsYXN0IGluc3RydWN0aW9uLgorKyAgJGFjX2NzX3N1Y2Nlc3MgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisrZmkKKysKK2RpZmYgLU5hdXIgbmV3bGliLTEuMTcuMC9uZXdsaWIvbGliYy9zeXMvYXZyMzIvY29uZmlndXJlLmluIG5ld2xpYi0xLjE3LjAtbmV3L25ld2xpYi9saWJjL3N5cy9hdnIzMi9jb25maWd1cmUuaW4KKy0tLSBuZXdsaWItMS4xNy4wL25ld2xpYi9saWJjL3N5cy9hdnIzMi9jb25maWd1cmUuaW4JMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBuZXdsaWItMS4xNy4wLW5ldy9uZXdsaWIvbGliYy9zeXMvYXZyMzIvY29uZmlndXJlLmluCTIwMDktMDUtMjIgMDk6NTc6NTAuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDEzIEBACisrZG5sIFRoaXMgaXMgdGhlIG5ld2xpYi9saWJjL3N5cy9hdnIzMiBjb25maWd1cmUuaW4gZmlsZS4KKytkbmwgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KKysKKytBQ19QUkVSRVEoMi41OSkKKytBQ19JTklUKFtuZXdsaWJdLFtORVdMSUJfVkVSU0lPTl0pCisrCisrZG5sIENhbid0IGJlIGRvbmUgaW4gTkVXTElCX0NPTkZJR1VSRSBiZWNhdXNlIHRoYXQgY29uZnVzZXMgYXV0b21ha2UuIAorK0FDX0NPTkZJR19BVVhfRElSKC4uLy4uLy4uLy4uKQorKworK05FV0xJQl9DT05GSUdVUkUoLi4vLi4vLi4pCisrCisrQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZV0pCisrQUNfT1VUUFVUCitkaWZmIC1OYXVyIG5ld2xpYi0xLjE3LjAvbmV3bGliL2xpYmMvc3lzL2F2cjMyL2NydDAuUyBuZXdsaWItMS4xNy4wLW5ldy9uZXdsaWIvbGliYy9zeXMvYXZyMzIvY3J0MC5TCistLS0gbmV3bGliLTEuMTcuMC9uZXdsaWIvbGliYy9zeXMvYXZyMzIvY3J0MC5TCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgbmV3bGliLTEuMTcuMC1uZXcvbmV3bGliL2xpYmMvc3lzL2F2cjMyL2NydDAuUwkyMDA5LTA1LTIyIDA5OjU3OjUwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw4MyBAQAorKworKwkuc2VjdGlvbgkucmVzZXQsImF4IgorKwkKKysJLmdsb2JhbCBfc3RhcnQKKysJLnR5cGUJX3N0YXJ0LEBmdW5jdGlvbgorK19zdGFydDoKKysJLyogSnVtcCB0byB3aGVyZXZlciB0aGUgbGlua2VyIHRoaW5rcyB3ZSBhcmUuLi4gKi8KKysJbGRkcGMJcGMsIC5MdGV4dF92YWRkcgorKworKwkuYWxpZ24JMgorKy5MdGV4dF92YWRkcjoKKysJLndvcmQJX3N0ZXh0CisrCisrCS50ZXh0CisrCS5nbG9iYWwJX3N0ZXh0CisrX3N0ZXh0OgorKwkvKiBaZXJvIG1hcmtzIHRoZSBlbmQgb2YgdGhlIG91dGVybW9zdCBmcmFtZS4gICovCisrCW1vdglyNywgMAorKworKwkvKiAgU2V0IHVwIHRoZSBzdGFjayBwb2ludGVyIHRvIGEgZml4ZWQgdmFsdWUgKi8KKysJbGRhLncJcjEwLCBfZXN0YWNrCisrCisrCS8qICBJZiBfc3RhY2sgaXMgLTEgZG9uJ3Qgc2V0IHNwLCB0aGUgc3RhY2sgaXMgdGhlbiBwcm9iYWJseQorKwkgICAgc2V0IGJ5IHNvbWUgb3RoZXIgbWVhbnMgaS5lLiBieSBhIGJvb3Rsb2FkZXIuICovCisrCWNwCXIxMCwgLTEKKysJbW92bmUJc3AsIHIxMAorKworKwkvKiBDb3B5IHRoZSBkYXRhIHNlZ21lbnQgaW50byBSQU0gaWYgbmVjZXNzYXJ5LiBJZiBkYXRhX2xtYQorKwkgICBpcyBlcXVhbCB0byBkYXRhIHRoZW4gVk1BPT1MTUEgYW5kIG5vIGNvcHlpbmcgaXMgbmVjZXNzYXJ5LgorKwkgICBUaGUgbGlua2VyIHNjcmlwdCBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBkYXRhIHNlZ21lbnQgaXMgYXQKKysJICAgbGVhc3QgZHdvcmQtYWxpZ25lZC4gICovCisrCWxkYS53CXIxMSwgX2RhdGFfbG1hCisrCWxkYS53CXIxMiwgX2RhdGEKKysJY3AudwlyMTEsIHIxMgorKwlicmVxCTFmCisrCWxkYS53CXIxMCwgX2VkYXRhCisrMjoJbGQuZAlyOCwgcjExKysKKysJc3QuZAlyMTIrKywgcjgKKysJY3AudwlyMTIsIHIxMAorKwlicmx0CTJiCisrCQorKwkvKiBaZXJvIHRoZSBtZW1vcnkgaW4gdGhlIC5ic3Mgc2VjdGlvbi4gICovCisrMToJbGRhLncJcjEwLCBfZW5kCisrCWxkYS53CXIxMiwgX2VkYXRhCisrCisrCW1vdglyOCwgMAorKwltb3YJcjksIDAKKysyOglzdC5kCXIxMisrLCByOAorKwljcC53CXIxMiwgcjEwCisrCWJybHQJMmIKKysKKysJLyogVXNlciBkZXBlbmRlbnQgaW5pdGlhbGl6YXRpb24gKi8KKysJY2FsbAlfaW5pdF9zdGFydHVwCisrCisrCS8qIFJlZ2lzdGVyIF9maW5pIGZ1bmN0aW9uIHdpdGggYXRleGl0IAorKwkgICBUaGUgX2ZpbmkgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgZGVzdHJ1Y3Rpb3JzICovCisrCWxkYS53CXIxMiwgX2ZpbmkKKysJY2FsbAlhdGV4aXQKKysKKysJLyogQ2FsbCBfaW5pdCBpbiBvcmRlciB0byBpbml0aWFsaXplIGNvbnN0cnVjdG9ycyBldGMgKi8KKysJY2FsbAlfaW5pdAorKwkJCisrCS8qSW5pdGlhbGl6ZSBhcmd2LCB1c2Ugc3RhY2sgZm9yIGtlZXBpbmcgYXJndW1lbnRzLiAKKysgICAgICAgICAgX2luaXRfYXJndigpIHJldHVybnMgYXJnYyBpbiByMTIgYW5kIGFyZ3YgaW4gcjExCisrCSBhbmQgdGhlIHRvdGFsIHNpemUgdXNlZCBmb3IgdGhlIGFyZ3VtZW50cyBpbiByMTAuKi8KKysJbW92CXIxMiwgc3AJCisrCS8qIFNpZ25hbCB0aGF0IHdlIGFyZSBzdG9yaW5nIHRoZSBhcmd1bWVudHMgaW4gYSBzdGFja3dpc2UKKysJICAgdG9wIGRvd24gYXBwcm9hY2guICovCQorKwltb3YJcjExLCAwCQorKwljYWxsCV9pbml0X2FyZ3YKKysJLyogSWYgaW5pdGlhbGl6YXRpb24gaWYgYXJndiBpcyBub3QgaGFuZGxlZCB0aGVuIF9pbml0X2FyZ3YKKysgICAgICAgICAgIHJldHVybnMgLTEgc28gc2V0IGFyZ2MgdG8gMCBhbmQgbWFrZSBzdXJlIG5vIHNwYWNlIGlzIAorKwkgICBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrLiAqLworKwljcC53CXIxMiwgLTEKKysJbW92ZXEJcjEyLCAwCisrCW1vdmVxCXIxMCwgMAorKwlzdWIJc3AsIHIxMAorKworKwkvKiBDYWxsIG1haW4gYW5kIGNhbGwgZXhpdCB3aGVuIGl0IHJldHVybnMgKi8KKysJY2FsbAltYWluCisrCWNhbGwJZXhpdAorKworKwkud2VhawlfZGF0YV9sbWEKK2RpZmYgLU5hdXIgbmV3bGliLTEuMTcuMC9uZXdsaWIvbGliYy9zeXMvYXZyMzIvTWFrZWZpbGUuYW0gbmV3bGliLTEuMTcuMC1uZXcvbmV3bGliL2xpYmMvc3lzL2F2cjMyL01ha2VmaWxlLmFtCistLS0gbmV3bGliLTEuMTcuMC9uZXdsaWIvbGliYy9zeXMvYXZyMzIvTWFrZWZpbGUuYW0JMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBuZXdsaWItMS4xNy4wLW5ldy9uZXdsaWIvbGliYy9zeXMvYXZyMzIvTWFrZWZpbGUuYW0JMjAwOS0wNS0yMiAwOTo1Nzo1MC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTggQEAKKysjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIGdlbmVyYXRlIE1ha2VmaWxlLmluCisrCisrQVVUT01BS0VfT1BUSU9OUyA9IGN5Z251cworKworK0lOQ0xVREVTID0gJChORVdMSUJfQ0ZMQUdTKSAkKENST1NTX0NGTEFHUykgJChUQVJHRVRfQ0ZMQUdTKQorKworK0FNX0NDQVNGTEFHUyA9ICQoSU5DTFVERVMpCisrCisrbm9pbnN0X0xJQlJBUklFUyA9IGxpYi5hCisrCisrbGliX2FfU09VUkNFUyA9IHN5c2NhbGxzLmMgc2V0am1wLlMKKytsaWJfYV9DQ0FTRkxBR1MgPSAkKEFNX0NDQVNGTEFHUykKKytsaWJfYV9DRkxBR1MgPSAkKEFNX0NGTEFHUykKKysKKythbGw6IGNydDAubworKworK0FDTE9DQUxfQU1GTEFHUyA9IC1JIC4uLy4uLy4uCisrQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMgPSAkKG5ld2xpYl9iYXNlZGlyKS9jb25maWd1cmUuaG9zdAorZGlmZiAtTmF1ciBuZXdsaWItMS4xNy4wL25ld2xpYi9saWJjL3N5cy9hdnIzMi9NYWtlZmlsZS5pbiBuZXdsaWItMS4xNy4wLW5ldy9uZXdsaWIvbGliYy9zeXMvYXZyMzIvTWFrZWZpbGUuaW4KKy0tLSBuZXdsaWItMS4xNy4wL25ld2xpYi9saWJjL3N5cy9hdnIzMi9NYWtlZmlsZS5pbgkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIG5ld2xpYi0xLjE3LjAtbmV3L25ld2xpYi9saWJjL3N5cy9hdnIzMi9NYWtlZmlsZS5pbgkyMDA5LTA1LTIyIDA5OjU3OjUwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwzMjkgQEAKKysjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGF1dG9tYWtlIDEuNC1wNiBmcm9tIE1ha2VmaWxlLmFtCisrCisrIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUtOCwgMTk5OSwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKysjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKysjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKysjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKysKKysKKytTSEVMTCA9IEBTSEVMTEAKKysKKytzcmNkaXIgPSBAc3JjZGlyQAorK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKKytWUEFUSCA9IEBzcmNkaXJACisrcHJlZml4ID0gQHByZWZpeEAKKytleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKKysKKytiaW5kaXIgPSBAYmluZGlyQAorK3NiaW5kaXIgPSBAc2JpbmRpckAKKytsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACisrZGF0YWRpciA9IEBkYXRhZGlyQAorK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKKytzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKKytsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACisrbGliZGlyID0gQGxpYmRpckAKKytpbmZvZGlyID0gQGluZm9kaXJACisrbWFuZGlyID0gQG1hbmRpckAKKytpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACisrb2xkaW5jbHVkZWRpciA9IC91c3IvaW5jbHVkZQorKworK0RFU1RESVIgPQorKworK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKKytwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKKysKKyt0b3BfYnVpbGRkaXIgPSAuCisrCisrQUNMT0NBTCA9IEBBQ0xPQ0FMQAorK0FVVE9DT05GID0gQEFVVE9DT05GQAorK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKKysKKytJTlNUQUxMID0gQElOU1RBTExACisrSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAgJChBTV9JTlNUQUxMX1BST0dSQU1fRkxBR1MpCisrSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKKytJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKKyt0cmFuc2Zvcm0gPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKKysKKytOT1JNQUxfSU5TVEFMTCA9IDoKKytQUkVfSU5TVEFMTCA9IDoKKytQT1NUX0lOU1RBTEwgPSA6CisrTk9STUFMX1VOSU5TVEFMTCA9IDoKKytQUkVfVU5JTlNUQUxMID0gOgorK1BPU1RfVU5JTlNUQUxMID0gOgorK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACisraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAorK2hvc3RfdHJpcGxldCA9IEBob3N0QAorK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACisrdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAorK0FSID0gQEFSQAorK0FTID0gQEFTQAorK0NDID0gQENDQAorK0NQUCA9IEBDUFBACisrRVhFRVhUID0gQEVYRUVYVEAKKytMREZMQUdTID0gQExERkxBR1NACisrTUFJTlQgPSBATUFJTlRACisrTUFLRUlORk8gPSBATUFLRUlORk9ACisrTkVXTElCX0NGTEFHUyA9IEBORVdMSUJfQ0ZMQUdTQAorK09CSkVYVCA9IEBPQkpFWFRACisrUEFDS0FHRSA9IEBQQUNLQUdFQAorK1JBTkxJQiA9IEBSQU5MSUJACisrVkVSU0lPTiA9IEBWRVJTSU9OQAorK2FleHQgPSBAYWV4dEAKKytsaWJtX21hY2hpbmVfZGlyID0gQGxpYm1fbWFjaGluZV9kaXJACisrbWFjaGluZV9kaXIgPSBAbWFjaGluZV9kaXJACisrbmV3bGliX2Jhc2VkaXIgPSBAbmV3bGliX2Jhc2VkaXJACisrb2V4dCA9IEBvZXh0QAorK3N5c19kaXIgPSBAc3lzX2RpckAKKysKKytBVVRPTUFLRV9PUFRJT05TID0gY3lnbnVzCisrCisrSU5DTFVERVMgPSAkKE5FV0xJQl9DRkxBR1MpICQoQ1JPU1NfQ0ZMQUdTKSAkKFRBUkdFVF9DRkxBR1MpCisrCisrbm9pbnN0X0xJQlJBUklFUyA9IGxpYi5hCisrCisrbGliX2FfU09VUkNFUyA9IHN5c2NhbGxzLmMgc2V0am1wLlMKKysKKytBQ0xPQ0FMX0FNRkxBR1MgPSAtSSAuLi8uLi8uLgorK0NPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTID0gJChuZXdsaWJfYmFzZWRpcikvY29uZmlndXJlLmhvc3QKKytBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CisrbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvLi4vLi4vLi4vLi4vbWtpbnN0YWxsZGlycworK0NPTkZJR19DTEVBTl9GSUxFUyA9IAorK0xJQlJBUklFUyA9ICAkKG5vaW5zdF9MSUJSQVJJRVMpCisrCisrCisrREVGUyA9IEBERUZTQCAtSS4gLUkkKHNyY2RpcikgCisrQ1BQRkxBR1MgPQorK0xJQlMgPSBATElCU0AKKytsaWJfYV9MSUJBREQgPSAKKytsaWJfYV9PQkpFQ1RTID0gIHN5c2NhbGxzLm8gc2V0am1wLm8KKytDRkxBR1MgPSBAQ0ZMQUdTQAorK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKKytDQ0xEID0gJChDQykKKytMSU5LID0gJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEAKKytESVNUX0NPTU1PTiA9ICBNYWtlZmlsZS5hbSBNYWtlZmlsZS5pbiBhY2xvY2FsLm00IGNvbmZpZ3VyZSBjb25maWd1cmUuaW4KKysKKysKKytESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKFNPVVJDRVMpICQoSEVBREVSUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorKworK1RBUiA9IGd0YXIKKytHWklQX0VOViA9IC0tYmVzdAorK1NPVVJDRVMgPSAkKGxpYl9hX1NPVVJDRVMpCisrT0JKRUNUUyA9ICQobGliX2FfT0JKRUNUUykKKysKKythbGw6IGFsbC1yZWRpcmVjdAorKy5TVUZGSVhFUzoKKysuU1VGRklYRVM6IC5TIC5jIC5vIC5zCisrJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAIE1ha2VmaWxlLmFtICQodG9wX3NyY2RpcikvY29uZmlndXJlLmluICQoQUNMT0NBTF9NNCkgCisrCWNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1jeWdudXMgTWFrZWZpbGUKKysKKytNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworKwljZCAkKHRvcF9idWlsZGRpcikgXAorKwkgICYmIENPTkZJR19GSUxFUz0kQCBDT05GSUdfSEVBREVSUz0gJChTSEVMTCkgLi9jb25maWcuc3RhdHVzCisrCisrJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCBjb25maWd1cmUuaW4gIFwKKysJCS4uLy4uLy4uL2FjaW5jbHVkZS5tNCAuLi8uLi8uLi9hY2xvY2FsLm00IFwKKysJCS4uLy4uLy4uL2xpYnRvb2wubTQKKysJY2QgJChzcmNkaXIpICYmICQoQUNMT0NBTCkgJChBQ0xPQ0FMX0FNRkxBR1MpCisrCisrY29uZmlnLnN0YXR1czogJChzcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorKwkkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgLS1yZWNoZWNrCisrJChzcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCQoc3JjZGlyKS9jb25maWd1cmUuaW4gJChBQ0xPQ0FMX000KSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpCisrCWNkICQoc3JjZGlyKSAmJiAkKEFVVE9DT05GKQorKworK21vc3RseWNsZWFuLW5vaW5zdExJQlJBUklFUzoKKysKKytjbGVhbi1ub2luc3RMSUJSQVJJRVM6CisrCS10ZXN0IC16ICIkKG5vaW5zdF9MSUJSQVJJRVMpIiB8fCBybSAtZiAkKG5vaW5zdF9MSUJSQVJJRVMpCisrCisrZGlzdGNsZWFuLW5vaW5zdExJQlJBUklFUzoKKysKKyttYWludGFpbmVyLWNsZWFuLW5vaW5zdExJQlJBUklFUzoKKysKKysuYy5vOgorKwkkKENPTVBJTEUpIC1jICQ8CisrCisrLnMubzoKKysJJChDT01QSUxFKSAtYyAkPAorKworKy5TLm86CisrCSQoQ09NUElMRSkgLWMgJDwKKysKKyttb3N0bHljbGVhbi1jb21waWxlOgorKwktcm0gLWYgKi5vIGNvcmUgKi5jb3JlCisrCisrY2xlYW4tY29tcGlsZToKKysKKytkaXN0Y2xlYW4tY29tcGlsZToKKysJLXJtIC1mICoudGFiLmMKKysKKyttYWludGFpbmVyLWNsZWFuLWNvbXBpbGU6CisrCisrbGliLmE6ICQobGliX2FfT0JKRUNUUykgJChsaWJfYV9ERVBFTkRFTkNJRVMpCisrCS1ybSAtZiBsaWIuYQorKwkkKEFSKSBjcnUgbGliLmEgJChsaWJfYV9PQkpFQ1RTKSAkKGxpYl9hX0xJQkFERCkKKysJJChSQU5MSUIpIGxpYi5hCisrCisrdGFnczogVEFHUworKworK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKQorKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUyknOyBcCisrCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBlY2hvICQkaTsgZG9uZSB8IFwKKysJICBhd2sgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKysJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisrCWhlcmU9YHB3ZGAgJiYgY2QgJChzcmNkaXIpIFwKKysJICAmJiBta2lkIC1mJCRoZXJlL0lEICQkdW5pcXVlICQoTElTUCkKKysKKytUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKExJU1ApCisrCXRhZ3M9OyBcCisrCWhlcmU9YHB3ZGA7IFwKKysJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpJzsgXAorKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gZWNobyAkJGk7IGRvbmUgfCBcCisrCSAgYXdrICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisrCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorKwl0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR1bmlxdWUkKExJU1ApJCR0YWdzIiBcCisrCSAgfHwgKGNkICQoc3JjZGlyKSAmJiBldGFncyAkKEVUQUdTX0FSR1MpICQkdGFncyAgJCR1bmlxdWUgJChMSVNQKSAtbyAkJGhlcmUvVEFHUykKKysKKyttb3N0bHljbGVhbi10YWdzOgorKworK2NsZWFuLXRhZ3M6CisrCisrZGlzdGNsZWFuLXRhZ3M6CisrCS1ybSAtZiBUQUdTIElECisrCisrbWFpbnRhaW5lci1jbGVhbi10YWdzOgorKworK2Rpc3RkaXIgPSAkKFBBQ0tBR0UpLSQoVkVSU0lPTikKKyt0b3BfZGlzdGRpciA9ICQoZGlzdGRpcikKKysKKysjIFRoaXMgdGFyZ2V0IHVudGFycyB0aGUgZGlzdCBmaWxlIGFuZCB0cmllcyBhIFZQQVRIIGNvbmZpZ3VyYXRpb24uICBUaGVuCisrIyBpdCBndWFyYW50ZWVzIHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBpcyBzZWxmLWNvbnRhaW5lZCBieSBtYWtpbmcgYW5vdGhlcgorKyMgdGFyZmlsZS4KKytkaXN0Y2hlY2s6IGRpc3QKKysJLXJtIC1yZiAkKGRpc3RkaXIpCisrCUdaSVA9JChHWklQX0VOVikgJChUQVIpIHp4ZiAkKGRpc3RkaXIpLnRhci5negorKwlta2RpciAkKGRpc3RkaXIpLz1idWlsZAorKwlta2RpciAkKGRpc3RkaXIpLz1pbnN0CisrCWRjX2luc3RhbGxfYmFzZT1gY2QgJChkaXN0ZGlyKS89aW5zdCAmJiBwd2RgOyBcCisrCWNkICQoZGlzdGRpcikvPWJ1aWxkIFwKKysJICAmJiAuLi9jb25maWd1cmUgLS1zcmNkaXI9Li4gLS1wcmVmaXg9JCRkY19pbnN0YWxsX2Jhc2UgXAorKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKysJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkdmkgXAorKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrIFwKKysJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsIFwKKysJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsY2hlY2sgXAorKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3QKKysJLXJtIC1yZiAkKGRpc3RkaXIpCisrCUBiYW5uZXI9IiQoZGlzdGRpcikudGFyLmd6IGlzIHJlYWR5IGZvciBkaXN0cmlidXRpb24iOyBcCisrCWRhc2hlcz1gZWNobyAiJCRiYW5uZXIiIHwgc2VkIHMvLi89L2dgOyBcCisrCWVjaG8gIiQkZGFzaGVzIjsgXAorKwllY2hvICIkJGJhbm5lciI7IFwKKysJZWNobyAiJCRkYXNoZXMiCisrZGlzdDogZGlzdGRpcgorKwktY2htb2QgLVIgYStyICQoZGlzdGRpcikKKysJR1pJUD0kKEdaSVBfRU5WKSAkKFRBUikgY2hvemYgJChkaXN0ZGlyKS50YXIuZ3ogJChkaXN0ZGlyKQorKwktcm0gLXJmICQoZGlzdGRpcikKKytkaXN0LWFsbDogZGlzdGRpcgorKwktY2htb2QgLVIgYStyICQoZGlzdGRpcikKKysJR1pJUD0kKEdaSVBfRU5WKSAkKFRBUikgY2hvemYgJChkaXN0ZGlyKS50YXIuZ3ogJChkaXN0ZGlyKQorKwktcm0gLXJmICQoZGlzdGRpcikKKytkaXN0ZGlyOiAkKERJU1RGSUxFUykKKysJLXJtIC1yZiAkKGRpc3RkaXIpCisrCW1rZGlyICQoZGlzdGRpcikKKysJLWNobW9kIDc3NyAkKGRpc3RkaXIpCisrCUBmb3IgZmlsZSBpbiAkKERJU1RGSUxFUyk7IGRvIFwKKysJICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisrCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKysJICAgIGNwIC1wciAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlOyBcCisrCSAgZWxzZSBcCisrCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKysJICAgIHx8IGxuICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgMj4gL2Rldi9udWxsIFwKKysJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgfHwgOjsgXAorKwkgIGZpOyBcCisrCWRvbmUKKytpbmZvLWFtOgorK2luZm86IGluZm8tYW0KKytkdmktYW06CisrZHZpOiBkdmktYW0KKytjaGVjay1hbToKKytjaGVjazogY2hlY2stYW0KKytpbnN0YWxsY2hlY2stYW06CisraW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KKytpbnN0YWxsLWluZm8tYW06IAorK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisraW5zdGFsbC1leGVjLWFtOgorK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCisrCisraW5zdGFsbC1kYXRhLWFtOgorK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCisrCisraW5zdGFsbC1hbTogYWxsLWFtCisrCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisraW5zdGFsbDogaW5zdGFsbC1hbQorK3VuaW5zdGFsbC1hbToKKyt1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorK2FsbC1hbTogTWFrZWZpbGUgJChMSUJSQVJJRVMpCisrYWxsLXJlZGlyZWN0OiBhbGwtYW0KKytpbnN0YWxsLXN0cmlwOgorKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBBTV9JTlNUQUxMX1BST0dSQU1fRkxBR1M9LXMgaW5zdGFsbAorK2luc3RhbGxkaXJzOgorKworKworK21vc3RseWNsZWFuLWdlbmVyaWM6CisrCisrY2xlYW4tZ2VuZXJpYzoKKysKKytkaXN0Y2xlYW4tZ2VuZXJpYzoKKysJLXJtIC1mIE1ha2VmaWxlICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorKwktcm0gLWYgY29uZmlnLmNhY2hlIGNvbmZpZy5sb2cgc3RhbXAtaCBzdGFtcC1oWzAtOV0qCisrCisrbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorK21vc3RseWNsZWFuLWFtOiAgbW9zdGx5Y2xlYW4tbm9pbnN0TElCUkFSSUVTIG1vc3RseWNsZWFuLWNvbXBpbGUgXAorKwkJbW9zdGx5Y2xlYW4tdGFncyBtb3N0bHljbGVhbi1nZW5lcmljCisrCisrbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisrCisrY2xlYW4tYW06ICBjbGVhbi1ub2luc3RMSUJSQVJJRVMgY2xlYW4tY29tcGlsZSBjbGVhbi10YWdzIGNsZWFuLWdlbmVyaWMgXAorKwkJbW9zdGx5Y2xlYW4tYW0KKysKKytjbGVhbjogY2xlYW4tYW0KKysKKytkaXN0Y2xlYW4tYW06ICBkaXN0Y2xlYW4tbm9pbnN0TElCUkFSSUVTIGRpc3RjbGVhbi1jb21waWxlIFwKKysJCWRpc3RjbGVhbi10YWdzIGRpc3RjbGVhbi1nZW5lcmljIGNsZWFuLWFtCisrCisrZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKysJLXJtIC1mIGNvbmZpZy5zdGF0dXMKKysKKyttYWludGFpbmVyLWNsZWFuLWFtOiAgbWFpbnRhaW5lci1jbGVhbi1ub2luc3RMSUJSQVJJRVMgXAorKwkJbWFpbnRhaW5lci1jbGVhbi1jb21waWxlIG1haW50YWluZXItY2xlYW4tdGFncyBcCisrCQltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWFtCisrCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZTsiCisrCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKKysKKyttYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisrCS1ybSAtZiBjb25maWcuc3RhdHVzCisrCisrLlBIT05ZOiBtb3N0bHljbGVhbi1ub2luc3RMSUJSQVJJRVMgZGlzdGNsZWFuLW5vaW5zdExJQlJBUklFUyBcCisrY2xlYW4tbm9pbnN0TElCUkFSSUVTIG1haW50YWluZXItY2xlYW4tbm9pbnN0TElCUkFSSUVTIFwKKyttb3N0bHljbGVhbi1jb21waWxlIGRpc3RjbGVhbi1jb21waWxlIGNsZWFuLWNvbXBpbGUgXAorK21haW50YWluZXItY2xlYW4tY29tcGlsZSB0YWdzIG1vc3RseWNsZWFuLXRhZ3MgZGlzdGNsZWFuLXRhZ3MgXAorK2NsZWFuLXRhZ3MgbWFpbnRhaW5lci1jbGVhbi10YWdzIGRpc3RkaXIgaW5mby1hbSBpbmZvIGR2aS1hbSBkdmkgY2hlY2sgXAorK2NoZWNrLWFtIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsY2hlY2sgaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtaW5mbyBcCisraW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtYW0gXAorK2luc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbCBhbGwtcmVkaXJlY3QgYWxsLWFtIGFsbCBpbnN0YWxsZGlycyBcCisrbW9zdGx5Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tZ2VuZXJpYyBjbGVhbi1nZW5lcmljIFwKKyttYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgY2xlYW4gbW9zdGx5Y2xlYW4gZGlzdGNsZWFuIG1haW50YWluZXItY2xlYW4KKysKKysKKythbGw6IGNydDAubworKworKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisrIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisrLk5PRVhQT1JUOgorZGlmZiAtTmF1ciBuZXdsaWItMS4xNy4wL25ld2xpYi9saWJjL3N5cy9hdnIzMi9zZXRqbXAuUyBuZXdsaWItMS4xNy4wLW5ldy9uZXdsaWIvbGliYy9zeXMvYXZyMzIvc2V0am1wLlMKKy0tLSBuZXdsaWItMS4xNy4wL25ld2xpYi9saWJjL3N5cy9hdnIzMi9zZXRqbXAuUwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIG5ld2xpYi0xLjE3LjAtbmV3L25ld2xpYi9saWJjL3N5cy9hdnIzMi9zZXRqbXAuUwkyMDA5LTA1LTIyIDA5OjU3OjUwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwyMCBAQAorKwkudGV4dAorKwkuZ2xvYmwgc2V0am1wCisrc2V0am1wOgorKwlzdG0JcjEyLCByMCwgcjEsIHIyLCByMywgcjQsIHI1LCByNiwgcjcsIHNwLCBscgorKwlyZXRhbAkwCisrCisrCS5nbG9ibCBsb25nam1wCisrbG9uZ2ptcDoJCisrCWxkbQlyMTIsIHIwLCByMSwgcjIsIHIzLCByNCwgcjUsIHI2LCByNywgc3AsIGxyCisrCS8qIFB1dCB0aGUgcmV0dXJuIHZhbHVlIGludG8gdGhlIGludGVnZXIgcmVzdWx0IHJlZ2lzdGVyLgorKwkgICBCdXQgaWYgaXQgaXMgemVybyB0aGVuIHJldHVybiAxIGluc3RlYWQuICAqLwkKKysJY3AJcjExLCAwCisrCXJldGVxCTEKKysJcmV0YWwJcjExCisrCisrCisrCQorKworKwkKKysJCitkaWZmIC1OYXVyIG5ld2xpYi0xLjE3LjAvbmV3bGliL2xpYmMvc3lzL2F2cjMyL3N5cy9zeXNyZWdzLmggbmV3bGliLTEuMTcuMC1uZXcvbmV3bGliL2xpYmMvc3lzL2F2cjMyL3N5cy9zeXNyZWdzLmgKKy0tLSBuZXdsaWItMS4xNy4wL25ld2xpYi9saWJjL3N5cy9hdnIzMi9zeXMvc3lzcmVncy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgbmV3bGliLTEuMTcuMC1uZXcvbmV3bGliL2xpYmMvc3lzL2F2cjMyL3N5cy9zeXNyZWdzLmgJMjAwOS0wNS0yMiAwOTo1Nzo1MC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTU4IEBACisrI2lmbmRlZiBfX0FTTV9BVlIzMl9TWVNSRUdTX0gKKysjZGVmaW5lIF9fQVNNX0FWUjMyX1NZU1JFR1NfSAorKworKyNkZWZpbmUgU1lTUkVHX1NSCSAgMAorKyNkZWZpbmUgU1lTUkVHX0VWQkEJICA0CisrI2RlZmluZSBTWVNSRUdfQUNCQQkgIDgKKysjZGVmaW5lIFNZU1JFR19DUFVDUgkgMTIKKysjZGVmaW5lIFNZU1JFR19FQ1IgICAgICAgMTYKKysjZGVmaW5lIFNZU1JFR19SU1JfU1VQCSAyMAorKyNkZWZpbmUgU1lTUkVHX1JTUl9JTlQwCSAyNAorKyNkZWZpbmUgU1lTUkVHX1JTUl9JTlQxCSAyOAorKyNkZWZpbmUgU1lTUkVHX1JTUl9JTlQyCSAzMgorKyNkZWZpbmUgU1lTUkVHX1JTUl9JTlQzCSAzNgorKyNkZWZpbmUgU1lTUkVHX1JTUl9FWAkgNDAKKysjZGVmaW5lIFNZU1JFR19SU1JfTk1JCSA0NAorKyNkZWZpbmUgU1lTUkVHX1JTUl9EQkcJIDQ4CisrI2RlZmluZSBTWVNSRUdfUkFSX1NVUAkgNTIKKysjZGVmaW5lIFNZU1JFR19SQVJfSU5UMAkgNTYKKysjZGVmaW5lIFNZU1JFR19SQVJfSU5UMQkgNjAKKysjZGVmaW5lIFNZU1JFR19SQVJfSU5UMgkgNjQKKysjZGVmaW5lIFNZU1JFR19SQVJfSU5UMwkgNjgKKysjZGVmaW5lIFNZU1JFR19SQVJfRVgJIDcyCisrI2RlZmluZSBTWVNSRUdfUkFSX05NSQkgNzYKKysjZGVmaW5lIFNZU1JFR19SQVJfREJHCSA4MAorKyNkZWZpbmUgU1lTUkVHX0pFQ1IgICAgICAgODQKKysjZGVmaW5lIFNZU1JFR19KT1NQICAgICAgIDg4CisrI2RlZmluZSBTWVNSRUdfSkFWQV9MVjAgICA5MgorKyNkZWZpbmUgU1lTUkVHX0pBVkFfTFYxICAgOTYKKysjZGVmaW5lIFNZU1JFR19KQVZBX0xWMiAgIDEwMAorKyNkZWZpbmUgU1lTUkVHX0pBVkFfTFYzICAgMTA0CisrI2RlZmluZSBTWVNSRUdfSkFWQV9MVjQgICAxMDgKKysjZGVmaW5lIFNZU1JFR19KQVZBX0xWNSAgIDExMgorKyNkZWZpbmUgU1lTUkVHX0pBVkFfTFY2ICAgMTE2CisrI2RlZmluZSBTWVNSRUdfSkFWQV9MVjcgICAxMjAKKysjZGVmaW5lIFNZU1JFR19KVEJBICAgICAgIDEyNAorKyNkZWZpbmUgU1lTUkVHX0pCQ1IgICAgICAgMTI4CisrCisrI2RlZmluZSBTWVNSRUdfQ09ORklHMAkyNTYKKysjZGVmaW5lIFNZU1JFR19DT05GSUcxCTI2MAorKyNkZWZpbmUgU1lTUkVHX0NPVU5UCTI2NAorKyNkZWZpbmUgU1lTUkVHX0NPTVBBUkUJMjY4CisrCisrI2RlZmluZSBTWVNSRUdfQkVBUiAzMTYKKysKKysvKiBNTVUgaW50ZXJmYWNlIHJlZ2lzdGVycyAqLworKyNkZWZpbmUgU1lTUkVHX1RMQkVISQkyNzIKKysjZGVmaW5lIFNZU1JFR19UTEJFTE8JMjc2CisrI2RlZmluZSBTWVNSRUdfUFRCUgkyODAKKysjZGVmaW5lIFNZU1JFR19UTEJFQVIJMjg0CisrI2RlZmluZSBTWVNSRUdfTU1VQ1IJMjg4CisrI2RlZmluZSBTWVNSRUdfVExCQVJMTwkyOTIKKysjZGVmaW5lIFNZU1JFR19UTEJEUkxPCTI5NgorKyNkZWZpbmUgU1lTUkVHX1RMQkFSSEkJMzAwCisrI2RlZmluZSBTWVNSRUdfVExCRFJISQkzMDQKKysKKysvKiBQZXJmb3JtYW5jZSBjb3VudGVyICovCisrI2RlZmluZSBTWVNSRUdfUENDUgkzMjAKKysKKysgLy8gU3RhdHVzIHJlZ2lzdGVyIGJpdHMKKysjZGVmaW5lIFNSX0NfT0ZGU0VUICAgIDAKKysjZGVmaW5lIFNSX1pfT0ZGU0VUICAgIDEKKysjZGVmaW5lIFNSX05fT0ZGU0VUICAgIDIKKysjZGVmaW5lIFNSX1ZfT0ZGU0VUICAgIDMKKysjZGVmaW5lIFNSX1FfT0ZGU0VUICAgIDQKKysjZGVmaW5lIFNSX1RfT0ZGU0VUICAgIDE0CisrI2RlZmluZSBTUl9SX09GRlNFVCAgICAxNQorKyNkZWZpbmUgU1JfR01fT0ZGU0VUICAgMTYKKysjZGVmaW5lIFNSX0kwTV9PRkZTRVQgIDE3CisrI2RlZmluZSBTUl9JMU1fT0ZGU0VUICAxOAorKyNkZWZpbmUgU1JfSTJNX09GRlNFVCAgMTkKKysjZGVmaW5lIFNSX0kzTV9PRkZTRVQgIDIwCisrI2RlZmluZSBTUl9FTV9PRkZTRVQgICAyMQorKyNkZWZpbmUgU1JfTTBfT0ZGU0VUICAgMjIKKysjZGVmaW5lIFNSX00xX09GRlNFVCAgIDIzCisrI2RlZmluZSBTUl9NMl9PRkZTRVQgICAyNAorKyNkZWZpbmUgU1JfRF9PRkZTRVQgICAgMjYKKysjZGVmaW5lIFNSX0RNX09GRlNFVCAgIDI3CisrI2RlZmluZSBTUl9KX09GRlNFVCAgICAyOAorKworKyNkZWZpbmUgU1JfQyAgICAoMSA8PCAwKQorKyNkZWZpbmUgU1JfWiAgICAoMSA8PCAxKQorKyNkZWZpbmUgU1JfTiAgICAoMSA8PCAyKQorKyNkZWZpbmUgU1JfViAgICAoMSA8PCAzKQorKyNkZWZpbmUgU1JfUSAgICAoMSA8PCA0KQorKyNkZWZpbmUgU1JfVCAgICAoMSA8PCAxNCkKKysjZGVmaW5lIFNSX1IgICAgKDEgPDwgMTUpCisrI2RlZmluZSBTUl9HTSAgICgxIDw8IDE2KQorKyNkZWZpbmUgU1JfSTBNICAoMSA8PCAxNykKKysjZGVmaW5lIFNSX0kxTSAgKDEgPDwgMTgpCisrI2RlZmluZSBTUl9JMk0gICgxIDw8IDE5KQorKyNkZWZpbmUgU1JfSTNNICAoMSA8PCAyMCkKKysjZGVmaW5lIFNSX0VNICAgKDEgPDwgMjEpCisrI2RlZmluZSBTUl9NMCAgICgxIDw8IDIyKQorKyNkZWZpbmUgU1JfTTEgICAoMSA8PCAyMykKKysjZGVmaW5lIFNSX00yICAgKDEgPDwgMjQpCisrI2RlZmluZSBTUl9EICAgICgxIDw8IDI2KQorKyNkZWZpbmUgU1JfRE0gICAoMSA8PCAyNykKKysjZGVmaW5lIFNSX0ogICAgKDEgPDwgMjgpCisrCisrLy9QQ0NSIGJpdHMKKysjZGVmaW5lIFBDQ1JTICAoMTw8MykKKysjZGVmaW5lIFBDQ1JDICAoMTw8MikKKysjZGVmaW5lIFBDQ1JSICAoMTw8MSkKKysjZGVmaW5lIFBDQ1JFICAoMTw8MCkKKysjZGVmaW5lIFBDQ05UX1BSRVNDQUxFIDY0CisrCisrLy9UTEJFSEkgYml0cworKyNkZWZpbmUgVExCRUhJVlBOICAoMTw8MTApCisrI2RlZmluZSBUTEJFSElWICAoMTw8OSkKKysjZGVmaW5lIFRMQkVISUkgICgxPDwwKQorKyAKKysvL1RMQkVMTyA9IGJpdHMKKysjZGVmaW5lIFRMQkVMT1BGTiAgKDE8PDEwKQorKyNkZWZpbmUgVExCRUxPQyAgKDE8PDkpCisrI2RlZmluZSBUTEJFTE9HICAoMTw8OCkKKysjZGVmaW5lIFRMQkVMT0IgICgxPDw3KQorKyNkZWZpbmUgVExCRUxPQVAgICgxPDw1KQorKyNkZWZpbmUgVExCRUxPU1ogICgxPDwyKQorKyNkZWZpbmUgVExCRUxPRCAgKDE8PDEpCisrI2RlZmluZSBUTEJFTE9XICAoMTw8MCkKKysgCisrLy9NTVVDUiBiaXRzCisrI2RlZmluZSBNTVVJUlAgICgxPDwyNikKKysjZGVmaW5lIE1NVUlMQSAgKDE8PDIwKQorKyNkZWZpbmUgTU1VRFJQICAoMTw8MTQpCisrI2RlZmluZSBNTVVETEEgICgxPDw4KQorKyNkZWZpbmUgTU1VUyAgKDE8PDQpCisrI2RlZmluZSBNTVVOICAoMTw8MykKKysjZGVmaW5lIE1NVUkgICgxPDwyKQorKyNkZWZpbmUgTU1VTSAgKDE8PDEpCisrI2RlZmluZSBNTVVFICAoMTw8MCkKKysgCisrLy8gUmVsYXRpdmUgb2Zmc2V0cyB0byBFVkJBCisrI2RlZmluZSBIX1VOUkVDX0VYICAweDAwMAorKyNkZWZpbmUgSF9UTEJfTUggICAgMHgwMDQKKysjZGVmaW5lIEhfQlVTX0VSUl9EIDB4MDA4CisrI2RlZmluZSBIX0JVU19FUlJfSSAweDAwQworKyNkZWZpbmUgSF9OTUkgICAgICAgMHgwMTAKKysjZGVmaW5lIEhfSU5TVF9BRERSIDB4MDE0CisrI2RlZmluZSBIX0lUTEJfTUlTUyAweDA1MAorKyNkZWZpbmUgSF9JVExCX1BST1QgMHgwMTgKKysjZGVmaW5lIEhfREVCVUcgICAgIDB4MDFDCisrI2RlZmluZSBIX0lMTF9PUEMgICAweDAyMAorKyNkZWZpbmUgSF9VTklNUExfSU5TVCAweDAyNAorKyNkZWZpbmUgSF9QUklWX1ZJT0wgMHgwMjgKKysjZGVmaW5lIEhfRkxPQVRfUFQgIDB4MDJDCisrI2RlZmluZSBIX0NPUFJPQ19BQlMgMHgwMzAKKysjZGVmaW5lIEhfU0NBTEwgIDB4MTAwCisrI2RlZmluZSBIX0RBVEFfQUREUl9SICAweDAzNAorKyNkZWZpbmUgSF9EQVRBX0FERFJfVyAgMHgwMzgKKysjZGVmaW5lIEhfRFRMQl9NSVNTX1IgIDB4MDYwCisrI2RlZmluZSBIX0RUTEJfTUlTU19XICAweDA3MAorKyNkZWZpbmUgSF9EVExCX1BST1RfUiAgMHgwM0MKKysjZGVmaW5lIEhfRFRMQl9QUk9UX1cgIDB4MDQwCisrI2RlZmluZSBIX0RUTEJfTU9EICAweDA0NAorKworKworKyNlbmRpZiAvKiBfX0FTTV9BVlIzMl9TWVNSRUdTX0ggKi8KK2RpZmYgLU5hdXIgbmV3bGliLTEuMTcuMC9uZXdsaWIvbGliYy9zeXMvYXZyMzIvc3lzY2FsbHMuYyBuZXdsaWItMS4xNy4wLW5ldy9uZXdsaWIvbGliYy9zeXMvYXZyMzIvc3lzY2FsbHMuYworLS0tIG5ld2xpYi0xLjE3LjAvbmV3bGliL2xpYmMvc3lzL2F2cjMyL3N5c2NhbGxzLmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBuZXdsaWItMS4xNy4wLW5ldy9uZXdsaWIvbGliYy9zeXMvYXZyMzIvc3lzY2FsbHMuYwkyMDA5LTA1LTIyIDA5OjU3OjUwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwyMzQgQEAKKysjaW5jbHVkZSAic3lzY2FsbHMuaCIKKysjaW5jbHVkZSAic3lzL3N5c3JlZ3MuaCIKKysjaW5jbHVkZSA8c3lzL3RpbWVzLmg+CisrI2luY2x1ZGUgPHN5cy90aW1lLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGVycm5vLmg+CisrCisraW50ICBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkKKysgICAgIF9pbml0X3N0YXJ0dXAgKCkKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrCisrY2xvY2tfdCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkKKysgICAgIF90aW1lcyggc3RydWN0IHRtcyAqdG1zICkKKyt7CisrICBpbnQgdGljazsKKysgIHRpY2sgPSBfX2J1aWx0aW5fbWZzcihTWVNSRUdfQ09VTlQpOworKyAgdG1zLT50bXNfdXRpbWUgPSAwOworKyAgdG1zLT50bXNfc3RpbWUgPSB0aWNrOworKyAgdG1zLT50bXNfY3V0aW1lID0gMDsKKysgIHRtcy0+dG1zX2NzdGltZSA9IDA7CisrICByZXR1cm4gdGljazsKKyt9CisrIAorK2V4dGVybiB2b2lkIF9faGVhcF9zdGFydF9fLCBfX2hlYXBfZW5kX187CisrCisrdm9pZCAqIF9fYXR0cmlidXRlX18oKHdlYWspKQorKyAgICAgX3NicmsoaW50IGluY3JlbWVudCkKKyt7CisrICBzdGF0aWMgdm9pZCAqY3VyX2hlYXBfcG9zID0gMDsKKysKKysgIC8vSW5pdGlhbGl6ZSBjdXJfaGVhcF9wb3MKKysgIGlmICggY3VyX2hlYXBfcG9zID09IDAgKQorKyAgICBjdXJfaGVhcF9wb3MgPSAmX19oZWFwX3N0YXJ0X187CisrICAKKysgIGlmICggKGN1cl9oZWFwX3BvcyArIGluY3JlbWVudCkgPD0gJl9faGVhcF9lbmRfXyApeworKyAgICB2b2lkICpoZWFwX3BvcyA9IGN1cl9oZWFwX3BvczsKKysgICAgY3VyX2hlYXBfcG9zICs9IGluY3JlbWVudDsKKysgICAgcmV0dXJuIGhlYXBfcG9zOworKyAgfSBlbHNlIHsKKysjaWZkZWYgREVCVUdfTVNHX09OCisrICAgIGZwcmludGYoc3RkZXJyLCAiV2FybmluZzogSGVhcCBpcyBydW5uaW5nIGZ1bGwgdHJ5aW5nIHRvIGFsbG9jYXRlICVpIGJ5dGVzISEhIVxuIiwgaW5jcmVtZW50KTsKKysgICAgZnByaW50ZihzdGRlcnIsICJcdEhlYXAgc3RhcnQgYWRkcmVzc1x0PSAweCV4XG4iLCAmX19oZWFwX3N0YXJ0X18pOworKyAgICBmcHJpbnRmKHN0ZGVyciwgIlx0SGVhcCBlbmQgYWRkcmVzc1x0PSAweCV4XG4iLCAmX19oZWFwX2VuZF9fKTsKKysgICAgZnByaW50ZihzdGRlcnIsICJcdEN1cnJlbnQgaGVhcCBhZGRyZXNzXHQ9IDB4JXhcbiIsIGN1cl9oZWFwX3Bvcyk7CisrICAgIGZmbHVzaChzdGRlcnIpOworKyNlbmRpZgorKyAgICBlcnJubyA9IEVOT01FTTsKKysgICAgcmV0dXJuICh2b2lkICopLTE7CisrICB9ICAKKysgIHJldHVybiAodm9pZCAqKS0xOworK30KKysgIAorK3ZvaWQgX19hdHRyaWJ1dGVfXygod2VhayxuYWtlZCkpCisrICAgICBfaW5pdF9hcmd2ICh2b2lkICphcmdfbWVtX3RvcCkKKyt7CisrICBUMkhfU1lTQ0FMTChUMkhfU1lTQ0FMTF9JTklUX0FSR1YpOworKyAgVDJIX1NZU0NBTExfUkVUVVJOKCk7CisrfQorKworK3ZvaWQgX19hdHRyaWJ1dGVfXygod2VhayxuYWtlZCkpCisrICAgICBfZXhpdCggaW50IGNvZGUgKQorK3sKKysgIFQySF9TWVNDQUxMKFQySF9TWVNDQUxMX0VYSVQpOworKyAgd2hpbGUgKDEpOworK30KKysKKytpbnQgX19hdHRyaWJ1dGVfXygod2VhayxuYWtlZCkpCisrICAgICBfb3BlbiAoY2hhciAqcGF0aG5hbWUsIGludCBmbGFncywgaW50IG1vZGUpCisreworKyAgVDJIX1NZU0NBTEwoVDJIX1NZU0NBTExfT1BFTik7CisrICBUMkhfU1lTQ0FMTF9DSEVDS19FUlJPUl9BTkRfUkVUVVJOKCk7CisrfQorKworK2ludCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLG5ha2VkKSkKKysgICAgIF9jbG9zZSAoaW50IGZpbGUpCisreworKyAgVDJIX1NZU0NBTEwoVDJIX1NZU0NBTExfQ0xPU0UpOworKyAgVDJIX1NZU0NBTExfQ0hFQ0tfRVJST1JfQU5EX1JFVFVSTigpOworK30KKysKKytpbnQgX19hdHRyaWJ1dGVfXygod2VhayxuYWtlZCkpCisrICAgICBfbHNlZWsoIGludCBmaWxlZGVzLCBpbnQgb2Zmc2V0LCBpbnQgd2hlbmNlICkKKyt7CisrICBUMkhfU1lTQ0FMTChUMkhfU1lTQ0FMTF9MU0VFSyk7CisrICBUMkhfU1lTQ0FMTF9DSEVDS19FUlJPUl9BTkRfUkVUVVJOKCk7CisrfQorKworKworK2ludCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLG5ha2VkKSkKKysgICAgIF9yZWFkIChpbnQgZmlsZSwKKysgICAgICAgICAgICBjaGFyICogcHRyLAorKyAgICAgICAgICAgIGludCBsZW4peworKyAgVDJIX1NZU0NBTEwoVDJIX1NZU0NBTExfUkVBRCk7CisrICBUMkhfU1lTQ0FMTF9DSEVDS19FUlJPUl9BTkRfUkVUVVJOKCk7CisrfQorKworK2ludCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLG5ha2VkKSkKKysgICAgIF93cml0ZSAoaW50IGZpbGUsCisrICAgICAgICAgICAgIGNoYXIgKiBwdHIsCisrICAgICAgICAgICAgIGludCBsZW4peworKyAgVDJIX1NZU0NBTEwoVDJIX1NZU0NBTExfV1JJVEUpOworKyAgVDJIX1NZU0NBTExfQ0hFQ0tfRVJST1JfQU5EX1JFVFVSTigpOworK30KKysKKytpbnQgX19hdHRyaWJ1dGVfXygod2VhayxuYWtlZCkpCisrICAgICBpc2F0dHkgKGludCBkZXNjKXsgCisrICBUMkhfU1lTQ0FMTChUMkhfU1lTQ0FMTF9JU0FUVFkpOworKyAgVDJIX1NZU0NBTExfQ0hFQ0tfRVJST1JfQU5EX1JFVFVSTigpOworK30KKysKKytzdGF0aWMgdm9pZCBfY29udmVydF9ob3N0MnRhcmdldF9zdGF0KHN0cnVjdCBzdGF0ICp0YXJnZXRfc3RhdCwgc3RydWN0IGhvc3Rfc3RhdCAqaG9zdF9zdGF0KQorK3sKKysgIHRhcmdldF9zdGF0LT5zdF9kZXYgPSAoZGV2X3QpaG9zdF9zdGF0LT5zdF9kZXY7CisrICB0YXJnZXRfc3RhdC0+c3RfaW5vID0gKGlub190KWhvc3Rfc3RhdC0+c3RfaW5vOworKyAgdGFyZ2V0X3N0YXQtPnN0X21vZGUgPSAobW9kZV90KWhvc3Rfc3RhdC0+c3RfbW9kZTsKKysgIHRhcmdldF9zdGF0LT5zdF9ubGluayA9IChubGlua190KWhvc3Rfc3RhdC0+c3Rfbmxpbms7CisrICB0YXJnZXRfc3RhdC0+c3RfdWlkID0gKHVpZF90KWhvc3Rfc3RhdC0+c3RfdWlkOworKyAgdGFyZ2V0X3N0YXQtPnN0X2dpZCA9IChnaWRfdClob3N0X3N0YXQtPnN0X2dpZDsKKysgIHRhcmdldF9zdGF0LT5zdF9yZGV2ID0gKGRldl90KWhvc3Rfc3RhdC0+c3RfcmRldjsKKysgIHRhcmdldF9zdGF0LT5zdF9zaXplID0gKG9mZl90KWhvc3Rfc3RhdC0+c3Rfc2l6ZTsKKysgIHRhcmdldF9zdGF0LT5zdF9ibGtzaXplID0gKGxvbmcpaG9zdF9zdGF0LT5zdF9ibGtzaXplOworKyAgdGFyZ2V0X3N0YXQtPnN0X2Jsb2NrcyA9IChsb25nKWhvc3Rfc3RhdC0+c3RfYmxvY2tzOworKyAgdGFyZ2V0X3N0YXQtPnN0X2F0aW1lID0gKHRpbWVfdClob3N0X3N0YXQtPnN0X2F0aW1lOyAKKysgIHRhcmdldF9zdGF0LT5zdF9tdGltZSA9ICh0aW1lX3QpaG9zdF9zdGF0LT5zdF9tdGltZTsKKysgIHRhcmdldF9zdGF0LT5zdF9jdGltZSA9ICh0aW1lX3QpaG9zdF9zdGF0LT5zdF9jdGltZTsKKyt9CisrCisraW50IF9fYXR0cmlidXRlX18oKG5ha2VkKSkKKysgICAgIF9mc3RhdF9ob3N0IChpbnQgZmlsZWRlcywgc3RydWN0IGhvc3Rfc3RhdCAqcHRyKXsgCisrICBUMkhfU1lTQ0FMTChUMkhfU1lTQ0FMTF9GU1RBVCk7CisrICBUMkhfU1lTQ0FMTF9DSEVDS19FUlJPUl9BTkRfUkVUVVJOKCk7CisrfQorKworK2ludCBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpCisrICAgICBfc3RhdF9ob3N0IChjb25zdCBjaGFyICpmaWxlbmFtZSwgc3RydWN0IGhvc3Rfc3RhdCAqcHRyKXsgCisrICBUMkhfU1lTQ0FMTChUMkhfU1lTQ0FMTF9TVEFUKTsKKysgIFQySF9TWVNDQUxMX0NIRUNLX0VSUk9SX0FORF9SRVRVUk4oKTsKKyt9CisrCisraW50IF9fYXR0cmlidXRlX18oKHdlYWspKQorKyAgICAgX2ZzdGF0IChpbnQgZmlsZWRlcywgc3RydWN0IHN0YXQgKnN0YXQpeyAKKysgIHN0cnVjdCBob3N0X3N0YXQgaG9zdF9zdGF0OworKyAgaWYgKCBfZnN0YXRfaG9zdCAoZmlsZWRlcywgJmhvc3Rfc3RhdCkgPCAwICkKKysgICAgcmV0dXJuIC0xOworKyAgX2NvbnZlcnRfaG9zdDJ0YXJnZXRfc3RhdCAoc3RhdCwgJmhvc3Rfc3RhdCk7CisrICByZXR1cm4gMDsKKyt9CisrCisraW50IF9fYXR0cmlidXRlX18oKHdlYWspKQorKyAgICAgX3N0YXQgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3RhdCl7IAorKyAgc3RydWN0IGhvc3Rfc3RhdCBob3N0X3N0YXQ7CisrICBpZiAoIF9zdGF0X2hvc3QgKGZpbGVuYW1lLCAmaG9zdF9zdGF0KSA8IDApCisrICAgIHJldHVybiAtMTsKKysgIF9jb252ZXJ0X2hvc3QydGFyZ2V0X3N0YXQgKHN0YXQsICZob3N0X3N0YXQpOworKyAgcmV0dXJuIDA7CisrfQorKworKworK2ludCBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpCisrICAgICBfZ2V0dGltZW9mZGF5X2hvc3QgKHN0cnVjdCBob3N0X3RpbWV2YWwgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgKnR6KXsgCisrICBUMkhfU1lTQ0FMTChUMkhfU1lTQ0FMTF9HRVRUSU1FT0ZEQVkpOworKyAgVDJIX1NZU0NBTExfQ0hFQ0tfRVJST1JfQU5EX1JFVFVSTigpOworK30KKysKKytpbnQgX19hdHRyaWJ1dGVfXygod2VhaykpCisrICAgICBfZ2V0dGltZW9mZGF5IChzdHJ1Y3QgdGltZXZhbCAqdHYsIHN0cnVjdCB0aW1lem9uZSAqdHopeyAKKysgIHN0cnVjdCBob3N0X3RpbWV2YWwgaG9zdF90djsKKysgIGlmICggX2dldHRpbWVvZmRheV9ob3N0ICgmaG9zdF90diwgdHopICA8IDAgKQorKyAgICByZXR1cm4gLTE7CisrICB0di0+dHZfc2VjID0gKGxvbmcpaG9zdF90di50dl9zZWM7CisrICB0di0+dHZfdXNlYyA9IChsb25nKWhvc3RfdHYudHZfdXNlYzsKKysgIHJldHVybiAwOworK30KKysKKytpbnQgX19hdHRyaWJ1dGVfXygod2VhayxuYWtlZCkpCisrICAgICBfdW5saW5rIChjb25zdCBjaGFyICpwYXRoKXsgCisrICBUMkhfU1lTQ0FMTChUMkhfU1lTQ0FMTF9VTkxJTkspOworKyAgVDJIX1NZU0NBTExfQ0hFQ0tfRVJST1JfQU5EX1JFVFVSTigpOworK30KKysKKytpbnQgX19hdHRyaWJ1dGVfXygod2VhayxuYWtlZCkpCisrICAgICBfc3lzdGVtIChjb25zdCBjaGFyICpjb21tYW5kKXsgCisrICBUMkhfU1lTQ0FMTChUMkhfU1lTQ0FMTF9TWVNURU0pOworKyAgVDJIX1NZU0NBTExfQ0hFQ0tfRVJST1JfQU5EX1JFVFVSTigpOworK30KKysKKytpbnQgX19hdHRyaWJ1dGVfXygod2VhaykpCisrICAgICBfZXhlY3ZlICgpeworKyAgcmV0dXJuIC0xOworK30KKysKKysKKytpbnQgX19hdHRyaWJ1dGVfXygod2VhaykpCisrICAgICBfZm9yayAoKXsgCisrICByZXR1cm4gLTE7CisrfQorKworK2ludCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkKKysgICAgIF93YWl0ICgpeyAKKysgIHJldHVybiAtMTsgCisrfQorKworK2ludCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkKKysgICAgIHNpZ2ZpbGxzZXQgKCl7IAorKyAgcmV0dXJuIC0xOworK30KKysKKytpbnQgX19hdHRyaWJ1dGVfXygod2VhaykpCisrICAgICBzaWdwcm9jbWFzayAoKXsgCisrICByZXR1cm4gLTE7CisrfQorKworK2ludCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkKKysgICAgIF9mY250bCAoKXsgCisrICByZXR1cm4gLTE7CisrfQorKworK2ludCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkKKysgICAgIF9saW5rICgpeyAKKysgIHJldHVybiAtMTsKKyt9CisrCisraW50IF9fYXR0cmlidXRlX18oKHdlYWspKQorKyAgICAgX2tpbGwgKCl7IAorKyAgcmV0dXJuIC0xOworK30KKysKKytpbnQgX19hdHRyaWJ1dGVfXygod2VhaykpCisrICAgICBfZ2V0cGlkICgpeworKyAgcmV0dXJuIC0xOworK30KK2RpZmYgLU5hdXIgbmV3bGliLTEuMTcuMC9uZXdsaWIvbGliYy9zeXMvYXZyMzIvc3lzY2FsbHMuaCBuZXdsaWItMS4xNy4wLW5ldy9uZXdsaWIvbGliYy9zeXMvYXZyMzIvc3lzY2FsbHMuaAorLS0tIG5ld2xpYi0xLjE3LjAvbmV3bGliL2xpYmMvc3lzL2F2cjMyL3N5c2NhbGxzLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBuZXdsaWItMS4xNy4wLW5ldy9uZXdsaWIvbGliYy9zeXMvYXZyMzIvc3lzY2FsbHMuaAkyMDA5LTA1LTIyIDA5OjU3OjUwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw3MiBAQAorKyNpZm5kZWYgX19TWVNDQUxMU19IX18KKysjZGVmaW5lIF9fU1lTQ0FMTFNfSF9fCisrCisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrI2luY2x1ZGUgPGVycm5vLmg+CisrCisrc3RydWN0IGhvc3Rfc3RhdCB7CisrICB1bnNpZ25lZCBpbnQgICAgICAgc3RfZGV2OyAgICAgIC8qIGRldmljZSAqLworKyAgdW5zaWduZWQgaW50ICAgICAgIHN0X2lubzsgICAgICAvKiBpbm9kZSAqLworKyAgbW9kZV90ICAgICAgICAgICAgIHN0X21vZGU7ICAgICAvKiBwcm90ZWN0aW9uICovCisrICB1bnNpZ25lZCBpbnQgICAgICAgc3Rfbmxpbms7ICAgIC8qIG51bWJlciBvZiBoYXJkIGxpbmtzICovCisrICB1bnNpZ25lZCBpbnQgICAgICAgc3RfdWlkOyAgICAgIC8qIHVzZXIgSUQgb2Ygb3duZXIgKi8KKysgIHVuc2lnbmVkIGludCAgICAgICBzdF9naWQ7ICAgICAgLyogZ3JvdXAgSUQgb2Ygb3duZXIgKi8KKysgIHVuc2lnbmVkIGludCAgICAgICBzdF9yZGV2OyAgICAgLyogZGV2aWNlIHR5cGUgKGlmIGlub2RlIGRldmljZSkgKi8KKysgIHVuc2lnbmVkIGxvbmcgbG9uZyBzdF9zaXplOyAgICAgLyogdG90YWwgc2l6ZSwgaW4gYnl0ZXMgKi8KKysgIHVuc2lnbmVkIGxvbmcgbG9uZyBzdF9ibGtzaXplOyAgLyogYmxvY2tzaXplIGZvciBmaWxlc3lzdGVtIEkvTyAqLworKyAgdW5zaWduZWQgbG9uZyBsb25nIHN0X2Jsb2NrczsgICAvKiBudW1iZXIgb2YgYmxvY2tzIGFsbG9jYXRlZCAqLworKyAgdGltZV90ICAgICAgICAgICAgIHN0X2F0aW1lOyAgICAvKiB0aW1lIG9mIGxhc3QgYWNjZXNzICovCisrICB0aW1lX3QgICAgICAgICAgICAgc3RfbXRpbWU7ICAgIC8qIHRpbWUgb2YgbGFzdCBtb2RpZmljYXRpb24gKi8KKysgIHRpbWVfdCAgICAgICAgICAgICBzdF9jdGltZTsgICAgLyogdGltZSBvZiBsYXN0IGNoYW5nZSAqLworK307CisrCisrc3RydWN0IGhvc3RfdGltZXZhbCB7CisrICB0aW1lX3QgdHZfc2VjOworKyAgbG9uZyBsb25nIHR2X3VzZWM7CisrfTsKKysKKysKKysjZGVmaW5lIFQySF9TWVNDQUxMX09QRU4gICAgICAgICAgICAgICAgMQorKyNkZWZpbmUgVDJIX1NZU0NBTExfQ0xPU0UgICAgICAgICAgICAgICAyCisrI2RlZmluZSBUMkhfU1lTQ0FMTF9SRUFEICAgICAgICAgICAgICAgIDMKKysjZGVmaW5lIFQySF9TWVNDQUxMX1dSSVRFICAgICAgICAgICAgICAgNAorKyNkZWZpbmUgVDJIX1NZU0NBTExfTFNFRUsgICAgICAgICAgICAgICA1CisrI2RlZmluZSBUMkhfU1lTQ0FMTF9SRU5BTUUgICAgICAgICAgICAgIDYKKysjZGVmaW5lIFQySF9TWVNDQUxMX1VOTElOSyAgICAgICAgICAgICAgNworKyNkZWZpbmUgVDJIX1NZU0NBTExfU1RBVCAgICAgICAgICAgICAgICA4CisrI2RlZmluZSBUMkhfU1lTQ0FMTF9GU1RBVCAgICAgICAgICAgICAgIDkKKysjZGVmaW5lIFQySF9TWVNDQUxMX0dFVFRJTUVPRkRBWSAgICAgICAgMTAKKysjZGVmaW5lIFQySF9TWVNDQUxMX0lTQVRUWSAgICAgICAgICAgICAgMTEKKysjZGVmaW5lIFQySF9TWVNDQUxMX1NZU1RFTSAgICAgICAgICAgICAgMTIKKysjZGVmaW5lIFQySF9TWVNDQUxMX0VYSVQgICAgICAgICAgICAgICAgMTMKKysjZGVmaW5lIFQySF9TWVNDQUxMX0lOSVRfQVJHViAgICAgICAgICAgMTQKKysKKysKKysvKiBUaGUgYnJlYWtwb2ludC9tb3YgcjEyLC0xL21vdiByMTEsLi4uIHBhdHRlcm4gY2F1c2VzCisrICAgdGhlIGRlYnVnZ2VyIHRvIGJlIGFibGUgdG8gcmVjb2duaXplIHRoZSBzeXN0ZW0gY2FsbC4gCisrICAgSWYgdGhlIGRlYnVnIHN5c3RlbSBpcyBub3QgZW5hYmxlZCB0aGVuIHRoZSBicmVha3BvaW50IAorKyAgIGlzIGV4ZWN1dGVkIGFzIGEgbm9wIGFuZCByMTIgc2V0IHRvIC0xIGFuZCBlcnJubyB0byAKKysgICBFTk9TWVMuIFRoZSBkZWJ1Z2dlciBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyByMTIKKysgICBhbmQgcjExIGFuZCBza2lwcGluZyB0aGUgaW5zdHJ1Y3Rpb25zIGFmdGVyIHRoZSBicmVha3BvaW50CisrICAgd2hpY2ggd291bGQgb3RoZXJ3aXNlIHNldCB0aGVzZSByZWdpc3RlcnMuCisrKi8gICAgCisrI2RlZmluZSBUMkhfU1lTQ0FMTChzeXNjYWxsX2NvZGUpICAgICAgICAgICAgICAgICBcCisrICBhc20gKCJtb3YgICByOCwgJTBcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICJicmVha3BvaW50XG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICJtb3YgICByMTIsIC0xXG4iICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICJtb3YgICByMTEsICUxXG4iICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgIDo6ICJpIiAoc3lzY2FsbF9jb2RlKSwgImkiIChFTk9TWVMpICk7CisrCisrI2RlZmluZSBUMkhfU1lTQ0FMTF9DSEVDS19FUlJPUl9BTkRfUkVUVVJOKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgYXNtICgiY3AudyAgcjEyLCAwXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgInJldGdlIHIxMlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICJsZGEudyByMTAsIGVycm5vXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAic3QudyAgcjEwWzBdLCByMTFcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgInJldCAgIHIxMlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICIuYWxpZ24gMlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAiLmNwb29sXG4iKTsKKysKKysjZGVmaW5lIFQySF9TWVNDQUxMX1JFVFVSTigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgYXNtICgicmV0ICByMTJcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisrCisrI2VuZGlmCitkaWZmIC1OYXVyIG5ld2xpYi0xLjE3LjAvbmV3bGliL2xpYmMvc3lzL2NvbmZpZ3VyZSBuZXdsaWItMS4xNy4wLW5ldy9uZXdsaWIvbGliYy9zeXMvY29uZmlndXJlCistLS0gbmV3bGliLTEuMTcuMC9uZXdsaWIvbGliYy9zeXMvY29uZmlndXJlCTIwMDgtMTItMjIgMjA6NDU6NDkuMDAwMDAwMDAwICswMTAwCisrKysgbmV3bGliLTEuMTcuMC1uZXcvbmV3bGliL2xpYmMvc3lzL2NvbmZpZ3VyZQkyMDA5LTA1LTIyIDA5OjU3OjUwLjAwMDAwMDAwMCArMDIwMAorQEAgLTEsMjUgKzEsNTQgQEAKKyAjISAvYmluL3NoCisgIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLgorLSMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU5IGZvciBuZXdsaWIgMS4xNy4wLgorKyMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjYxIGZvciBuZXdsaWIgMS4xNy4wLgorICMKKy0jIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKysjIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIyBUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworICMjIE00c2ggSW5pdGlhbGl6YXRpb24uICAjIworICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIAorLSMgQmUgQm91cm5lIGNvbXBhdGlibGUKKysjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKKytEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCisgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICBlbXVsYXRlIHNoCisgICBOVUxMQ01EPToKKyAgICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKy1lbGlmIHRlc3QgLW4gIiR7QkFTSF9WRVJTSU9OK3NldH0iICYmIChzZXQgLW8gcG9zaXgpID4vZGV2L251bGwgMj4mMTsgdGhlbgorLSAgc2V0IC1vIHBvc2l4CisrICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorK2Vsc2UKKysgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbgorKyAgKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7CisrZXNhYworKworK2ZpCisrCisrCisrCisrCisrIyBQQVRIIG5lZWRzIENSCisrIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLgorK2FzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworK2FzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworK2FzX2NyX0xldHRlcnM9JGFzX2NyX2xldHRlcnMkYXNfY3JfTEVUVEVSUworK2FzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKKythc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKKysKKysjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KKytpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorKyAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAorKyAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAorKyAgY2htb2QgK3ggY29uZiQkLnNoCisrICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICBQQVRIX1NFUEFSQVRPUj0nOycKKysgIGVsc2UKKysgICAgUEFUSF9TRVBBUkFUT1I9OgorKyAgZmkKKysgIHJtIC1mIGNvbmYkJC5zaAorIGZpCistRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorIAorICMgU3VwcG9ydCB1bnNldCB3aGVuIHBvc3NpYmxlLgorIGlmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorQEAgLTI5LDggKzU4LDQzIEBACisgZmkKKyAKKyAKKysjIElGUworKyMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuICBRdW90aW5nIGlzCisrIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCisrIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCisrIyBzcGxpdHRpbmcgYnkgc2V0dGluZyBJRlMgdG8gZW1wdHkgdmFsdWUuKQorK2FzX25sPScKKysnCisrSUZTPSIgIiIJJGFzX25sIgorKworKyMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIGRpcmVjdG9yeSBzZXBhcmF0b3IuCisrY2FzZSAkMCBpbgorKyAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OworKyAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKysgICAgIDs7CisrZXNhYworKyMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKysjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KKytpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCisrICBhc19teXNlbGY9JDAKKytmaQorK2lmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKysgIGVjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKKysgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorK2ZpCisrCisgIyBXb3JrIGFyb3VuZCBidWdzIGluIHByZS0zLjAgVVdJTiBrc2guCistJGFzX3Vuc2V0IEVOViBNQUlMIE1BSUxQQVRICisrZm9yIGFzX3ZhciBpbiBFTlYgTUFJTCBNQUlMUEFUSAorK2RvICgkYXNfdW5zZXQgJGFzX3ZhcikgPi9kZXYvbnVsbCAyPiYxICYmICRhc191bnNldCAkYXNfdmFyCisrZG9uZQorIFBTMT0nJCAnCisgUFMyPSc+ICcKKyBQUzQ9JysgJworQEAgLTQ0LDE4ICsxMDgsMTkgQEAKKyAgIGlmIChzZXQgK3g7IHRlc3QgLXogImAoZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyKSAyPiYxYCIpOyB0aGVuCisgICAgIGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcgorICAgZWxzZQorLSAgICAkYXNfdW5zZXQgJGFzX3ZhcgorKyAgICAoJGFzX3Vuc2V0ICRhc192YXIpID4vZGV2L251bGwgMj4mMSAmJiAkYXNfdW5zZXQgJGFzX3ZhcgorICAgZmkKKyBkb25lCisgCisgIyBSZXF1aXJlZCB0byB1c2UgYmFzZW5hbWUuCistaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKytpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorKyAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCisgICBhc19leHByPWV4cHIKKyBlbHNlCisgICBhc19leHByPWZhbHNlCisgZmkKKyAKKy1pZiAoYmFzZW5hbWUgLykgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLyAyPiYxYCIgPSAiWC8iOyB0aGVuCisraWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgorICAgYXNfYmFzZW5hbWU9YmFzZW5hbWUKKyBlbHNlCisgICBhc19iYXNlbmFtZT1mYWxzZQorQEAgLTYzLDE1NyArMTI4LDM4OCBAQAorIAorIAorICMgTmFtZSBvZiB0aGUgZXhlY3V0YWJsZS4KKy1hc19tZT1gJGFzX2Jhc2VuYW1lICIkMCIgfHwKKythc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwKKyAkYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAorIAkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKy0JIFgiJDAiIDogJ1hcKC9cKSQnIFx8IFwKKy0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorKwkgWCIkMCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CisgZWNobyBYLyIkMCIgfAorLSAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sgcy8vXDEvOyBxOyB9CistICAJICAvXlhcL1woXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorLSAgCSAgL15YXC9cKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorLSAgCSAgcy8uKi8uLzsgcSdgCisrICAgIHNlZCAnL14uKlwvXChbXi9dW14vXSpcKVwvKiQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwvXChcL1wvXCkkL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcL1woXC9cKS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICBzLy4qLy4vOyBxJ2AKKyAKKysjIENEUEFUSC4KKyskYXNfdW5zZXQgQ0RQQVRICisgCistIyBQQVRIIG5lZWRzIENSLCBhbmQgTElORU5PIG5lZWRzIENSIGFuZCBQQVRILgorLSMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KKy1hc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKKy1hc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKKy1hc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKKy1hc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCistYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCisgCistIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCistaWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKy0gIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKy0gIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKKy0gIGNobW9kICt4IGNvbmYkJC5zaAorLSAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKy0gICAgUEFUSF9TRVBBUkFUT1I9JzsnCistICBlbHNlCistICAgIFBBVEhfU0VQQVJBVE9SPToKKy0gIGZpCistICBybSAtZiBjb25mJCQuc2gKKytpZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgPSB4OyB0aGVuCisrICBpZiAoZXZhbCAiOiIpIDI+L2Rldi9udWxsOyB0aGVuCisrICBhc19oYXZlX3JlcXVpcmVkPXllcworK2Vsc2UKKysgIGFzX2hhdmVfcmVxdWlyZWQ9bm8KKyBmaQorIAorKyAgaWYgdGVzdCAkYXNfaGF2ZV9yZXF1aXJlZCA9IHllcyAmJiAJIChldmFsICI6CisrKGFzX2Z1bmNfcmV0dXJuICgpIHsKKysgIChleGl0IFwkMSkKKyt9CisrYXNfZnVuY19zdWNjZXNzICgpIHsKKysgIGFzX2Z1bmNfcmV0dXJuIDAKKyt9CisrYXNfZnVuY19mYWlsdXJlICgpIHsKKysgIGFzX2Z1bmNfcmV0dXJuIDEKKyt9CisrYXNfZnVuY19yZXRfc3VjY2VzcyAoKSB7CisrICByZXR1cm4gMAorK30KKythc19mdW5jX3JldF9mYWlsdXJlICgpIHsKKysgIHJldHVybiAxCisrfQorIAorLSAgYXNfbGluZW5vXzE9JExJTkVOTworLSAgYXNfbGluZW5vXzI9JExJTkVOTworLSAgYXNfbGluZW5vXzM9YChleHByICRhc19saW5lbm9fMSArIDEpIDI+L2Rldi9udWxsYAorLSAgdGVzdCAieCRhc19saW5lbm9fMSIgIT0gIngkYXNfbGluZW5vXzIiICYmCistICB0ZXN0ICJ4JGFzX2xpbmVub18zIiAgPSAieCRhc19saW5lbm9fMiIgIHx8IHsKKy0gICMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIHBhdGggYXQgYWxsCistICAjIHJlbGF0aXZlIG9yIG5vdC4KKy0gIGNhc2UgJDAgaW4KKy0gICAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OworLSAgICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCistZm9yIGFzX2RpciBpbiAkUEFUSAorLWRvCistICBJRlM9JGFzX3NhdmVfSUZTCistICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorLSAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKKy1kb25lCisrZXhpdGNvZGU9MAorK2lmIGFzX2Z1bmNfc3VjY2VzczsgdGhlbgorKyAgOgorK2Vsc2UKKysgIGV4aXRjb2RlPTEKKysgIGVjaG8gYXNfZnVuY19zdWNjZXNzIGZhaWxlZC4KKytmaQorIAorLSAgICAgICA7OworLSAgZXNhYworLSAgIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworLSAgIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCistICBpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCistICAgIGFzX215c2VsZj0kMAorLSAgZmkKKy0gIGlmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKy0gICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgcGF0aCIgPiYyCistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistICBmaQorLSAgY2FzZSAkQ09ORklHX1NIRUxMIGluCistICAnJykKKytpZiBhc19mdW5jX2ZhaWx1cmU7IHRoZW4KKysgIGV4aXRjb2RlPTEKKysgIGVjaG8gYXNfZnVuY19mYWlsdXJlIHN1Y2NlZWRlZC4KKytmaQorKworK2lmIGFzX2Z1bmNfcmV0X3N1Y2Nlc3M7IHRoZW4KKysgIDoKKytlbHNlCisrICBleGl0Y29kZT0xCisrICBlY2hvIGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgZmFpbGVkLgorK2ZpCisrCisraWYgYXNfZnVuY19yZXRfZmFpbHVyZTsgdGhlbgorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX3JldF9mYWlsdXJlIHN1Y2NlZWRlZC4KKytmaQorKworK2lmICggc2V0IHg7IGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgeSAmJiB0ZXN0IHggPSBcIlwkMVwiICk7IHRoZW4KKysgIDoKKytlbHNlCisrICBleGl0Y29kZT0xCisrICBlY2hvIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIG5vdCBzYXZlZC4KKytmaQorKworK3Rlc3QgXCRleGl0Y29kZSA9IDApIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorKworKygKKysgIGFzX2xpbmVub18xPVwkTElORU5PCisrICBhc19saW5lbm9fMj1cJExJTkVOTworKyAgdGVzdCBcInhcJGFzX2xpbmVub18xXCIgIT0gXCJ4XCRhc19saW5lbm9fMlwiICYmCisrICB0ZXN0IFwieFxgZXhwciBcJGFzX2xpbmVub18xICsgMVxgXCIgPSBcInhcJGFzX2xpbmVub18yXCIpIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorKyIpIDI+IC9kZXYvbnVsbDsgdGhlbgorKyAgOgorK2Vsc2UKKysgIGFzX2NhbmRpZGF0ZV9zaGVsbHM9CisgICAgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyBmb3IgYXNfZGlyIGluIC9iaW4kUEFUSF9TRVBBUkFUT1IvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRICisgZG8KKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCistICBmb3IgYXNfYmFzZSBpbiBzaCBiYXNoIGtzaCBzaDU7IGRvCistCSBjYXNlICRhc19kaXIgaW4KKysgIGNhc2UgJGFzX2RpciBpbgorIAkgLyopCistCSAgIGlmICgiJGFzX2Rpci8kYXNfYmFzZSIgLWMgJworKwkgICBmb3IgYXNfYmFzZSBpbiBzaCBiYXNoIGtzaCBzaDU7IGRvCisrCSAgICAgYXNfY2FuZGlkYXRlX3NoZWxscz0iJGFzX2NhbmRpZGF0ZV9zaGVsbHMgJGFzX2Rpci8kYXNfYmFzZSIKKysJICAgZG9uZTs7CisrICAgICAgIGVzYWMKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworKworKyAgICAgIGZvciBhc19zaGVsbCBpbiAkYXNfY2FuZGlkYXRlX3NoZWxscyAkU0hFTEw7IGRvCisrCSAjIFRyeSBvbmx5IHNoZWxscyB0aGF0IGV4aXN0LCB0byBzYXZlIHNldmVyYWwgZm9ya3MuCisrCSBpZiB7IHRlc3QgLWYgIiRhc19zaGVsbCIgfHwgdGVzdCAtZiAiJGFzX3NoZWxsLmV4ZSI7IH0gJiYKKysJCXsgKCIkYXNfc2hlbGwiKSAyPiAvZGV2L251bGwgPDxcX0FTRU9GCisraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBlbXVsYXRlIHNoCisrICBOVUxMQ01EPToKKysgICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKysgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisrICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKysgIHNldG9wdCBOT19HTE9CX1NVQlNUCisrZWxzZQorKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluCisrICAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsKKytlc2FjCisrCisrZmkKKysKKysKKys6CisrX0FTRU9GCisrfTsgdGhlbgorKyAgQ09ORklHX1NIRUxMPSRhc19zaGVsbAorKwkgICAgICAgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKKysJICAgICAgIGlmIHsgIiRhc19zaGVsbCIgMj4gL2Rldi9udWxsIDw8XF9BU0VPRgorK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgZW11bGF0ZSBzaAorKyAgTlVMTENNRD06CisrICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisrICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorKyAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCisrICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorK2Vsc2UKKysgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbgorKyAgKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7CisrZXNhYworKworK2ZpCisrCisrCisrOgorKyhhc19mdW5jX3JldHVybiAoKSB7CisrICAoZXhpdCAkMSkKKyt9CisrYXNfZnVuY19zdWNjZXNzICgpIHsKKysgIGFzX2Z1bmNfcmV0dXJuIDAKKyt9CisrYXNfZnVuY19mYWlsdXJlICgpIHsKKysgIGFzX2Z1bmNfcmV0dXJuIDEKKyt9CisrYXNfZnVuY19yZXRfc3VjY2VzcyAoKSB7CisrICByZXR1cm4gMAorK30KKythc19mdW5jX3JldF9mYWlsdXJlICgpIHsKKysgIHJldHVybiAxCisrfQorKworK2V4aXRjb2RlPTAKKytpZiBhc19mdW5jX3N1Y2Nlc3M7IHRoZW4KKysgIDoKKytlbHNlCisrICBleGl0Y29kZT0xCisrICBlY2hvIGFzX2Z1bmNfc3VjY2VzcyBmYWlsZWQuCisrZmkKKysKKytpZiBhc19mdW5jX2ZhaWx1cmU7IHRoZW4KKysgIGV4aXRjb2RlPTEKKysgIGVjaG8gYXNfZnVuY19mYWlsdXJlIHN1Y2NlZWRlZC4KKytmaQorKworK2lmIGFzX2Z1bmNfcmV0X3N1Y2Nlc3M7IHRoZW4KKysgIDoKKytlbHNlCisrICBleGl0Y29kZT0xCisrICBlY2hvIGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgZmFpbGVkLgorK2ZpCisrCisraWYgYXNfZnVuY19yZXRfZmFpbHVyZTsgdGhlbgorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX3JldF9mYWlsdXJlIHN1Y2NlZWRlZC4KKytmaQorKworK2lmICggc2V0IHg7IGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgeSAmJiB0ZXN0IHggPSAiJDEiICk7IHRoZW4KKysgIDoKKytlbHNlCisrICBleGl0Y29kZT0xCisrICBlY2hvIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIG5vdCBzYXZlZC4KKytmaQorKworK3Rlc3QgJGV4aXRjb2RlID0gMCkgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisrCisrKAorICAgYXNfbGluZW5vXzE9JExJTkVOTworICAgYXNfbGluZW5vXzI9JExJTkVOTworLSAgYXNfbGluZW5vXzM9YChleHByICRhc19saW5lbm9fMSArIDEpIDI+L2Rldi9udWxsYAorICAgdGVzdCAieCRhc19saW5lbm9fMSIgIT0gIngkYXNfbGluZW5vXzIiICYmCistICB0ZXN0ICJ4JGFzX2xpbmVub18zIiAgPSAieCRhc19saW5lbm9fMiIgJykgMj4vZGV2L251bGw7IHRoZW4KKy0JICAgICAkYXNfdW5zZXQgQkFTSF9FTlYgfHwgdGVzdCAiJHtCQVNIX0VOVitzZXR9IiAhPSBzZXQgfHwgeyBCQVNIX0VOVj07IGV4cG9ydCBCQVNIX0VOVjsgfQorLQkgICAgICRhc191bnNldCBFTlYgfHwgdGVzdCAiJHtFTlYrc2V0fSIgIT0gc2V0IHx8IHsgRU5WPTsgZXhwb3J0IEVOVjsgfQorLQkgICAgIENPTkZJR19TSEVMTD0kYXNfZGlyLyRhc19iYXNlCistCSAgICAgZXhwb3J0IENPTkZJR19TSEVMTAorLQkgICAgIGV4ZWMgIiRDT05GSUdfU0hFTEwiICIkMCIgJHsxKyIkQCJ9CistCSAgIGZpOzsKKy0JIGVzYWMKKy0gICAgICAgZG9uZQorLWRvbmUKKy07OworLSAgZXNhYworKyAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSArIDFgIiA9ICJ4JGFzX2xpbmVub18yIikgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisrCisrX0FTRU9GCisrfTsgdGhlbgorKyAgYnJlYWsKKytmaQorKworK2ZpCisrCisrICAgICAgZG9uZQorKworKyAgICAgIGlmIHRlc3QgIngkQ09ORklHX1NIRUxMIiAhPSB4OyB0aGVuCisrICBmb3IgYXNfdmFyIGluIEJBU0hfRU5WIEVOVgorKyAgICAgICAgZG8gKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKKysgICAgICAgIGRvbmUKKysgICAgICAgIGV4cG9ydCBDT05GSUdfU0hFTEwKKysgICAgICAgIGV4ZWMgIiRDT05GSUdfU0hFTEwiICIkYXNfbXlzZWxmIiAkezErIiRAIn0KKytmaQorKworKworKyAgICBpZiB0ZXN0ICRhc19oYXZlX3JlcXVpcmVkID0gbm87IHRoZW4KKysgIGVjaG8gVGhpcyBzY3JpcHQgcmVxdWlyZXMgYSBzaGVsbCBtb3JlIG1vZGVybiB0aGFuIGFsbCB0aGUKKysgICAgICBlY2hvIHNoZWxscyB0aGF0IEkgZm91bmQgb24geW91ciBzeXN0ZW0uICBQbGVhc2UgaW5zdGFsbCBhCisrICAgICAgZWNobyBtb2Rlcm4gc2hlbGwsIG9yIG1hbnVhbGx5IHJ1biB0aGUgc2NyaXB0IHVuZGVyIHN1Y2ggYQorKyAgICAgIGVjaG8gc2hlbGwgaWYgeW91IGRvIGhhdmUgb25lLgorKyAgICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorK2ZpCisrCisrCisrZmkKKysKKytmaQorKworKworKworKyhldmFsICJhc19mdW5jX3JldHVybiAoKSB7CisrICAoZXhpdCBcJDEpCisrfQorK2FzX2Z1bmNfc3VjY2VzcyAoKSB7CisrICBhc19mdW5jX3JldHVybiAwCisrfQorK2FzX2Z1bmNfZmFpbHVyZSAoKSB7CisrICBhc19mdW5jX3JldHVybiAxCisrfQorK2FzX2Z1bmNfcmV0X3N1Y2Nlc3MgKCkgeworKyAgcmV0dXJuIDAKKyt9CisrYXNfZnVuY19yZXRfZmFpbHVyZSAoKSB7CisrICByZXR1cm4gMQorK30KKysKKytleGl0Y29kZT0wCisraWYgYXNfZnVuY19zdWNjZXNzOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX3N1Y2Nlc3MgZmFpbGVkLgorK2ZpCisrCisraWYgYXNfZnVuY19mYWlsdXJlOyB0aGVuCisrICBleGl0Y29kZT0xCisrICBlY2hvIGFzX2Z1bmNfZmFpbHVyZSBzdWNjZWVkZWQuCisrZmkKKysKKytpZiBhc19mdW5jX3JldF9zdWNjZXNzOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX3JldF9zdWNjZXNzIGZhaWxlZC4KKytmaQorKworK2lmIGFzX2Z1bmNfcmV0X2ZhaWx1cmU7IHRoZW4KKysgIGV4aXRjb2RlPTEKKysgIGVjaG8gYXNfZnVuY19yZXRfZmFpbHVyZSBzdWNjZWVkZWQuCisrZmkKKysKKytpZiAoIHNldCB4OyBhc19mdW5jX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCisrZmkKKysKKyt0ZXN0IFwkZXhpdGNvZGUgPSAwIikgfHwgeworKyAgZWNobyBObyBzaGVsbCBmb3VuZCB0aGF0IHN1cHBvcnRzIHNoZWxsIGZ1bmN0aW9ucy4KKysgIGVjaG8gUGxlYXNlIHRlbGwgYXV0b2NvbmZAZ251Lm9yZyBhYm91dCB5b3VyIHN5c3RlbSwKKysgIGVjaG8gaW5jbHVkaW5nIGFueSBlcnJvciBwb3NzaWJseSBvdXRwdXQgYmVmb3JlIHRoaXMKKysgIGVjaG8gbWVzc2FnZQorK30KKysKKysKKysKKysgIGFzX2xpbmVub18xPSRMSU5FTk8KKysgIGFzX2xpbmVub18yPSRMSU5FTk8KKysgIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgorKyAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSArIDFgIiA9ICJ4JGFzX2xpbmVub18yIiB8fCB7CisgCisgICAjIENyZWF0ZSAkYXNfbWUubGluZW5vIGFzIGEgY29weSBvZiAkYXNfbXlzZWxmLCBidXQgd2l0aCAkTElORU5PCisgICAjIHVuaWZvcm1seSByZXBsYWNlZCBieSB0aGUgbGluZSBudW1iZXIuICBUaGUgZmlyc3QgJ3NlZCcgaW5zZXJ0cyBhCistICAjIGxpbmUtbnVtYmVyIGxpbmUgYmVmb3JlIGVhY2ggbGluZTsgdGhlIHNlY29uZCAnc2VkJyBkb2VzIHRoZSByZWFsCistICAjIHdvcmsuICBUaGUgc2Vjb25kIHNjcmlwdCB1c2VzICdOJyB0byBwYWlyIGVhY2ggbGluZS1udW1iZXIgbGluZQorLSAgIyB3aXRoIHRoZSBudW1iZXJlZCBsaW5lLCBhbmQgYXBwZW5kcyB0cmFpbGluZyAnLScgZHVyaW5nCistICAjIHN1YnN0aXR1dGlvbiBzbyB0aGF0ICRMSU5FTk8gaXMgbm90IGEgc3BlY2lhbCBjYXNlIGF0IGxpbmUgZW5kLgorKyAgIyBsaW5lLW51bWJlciBsaW5lIGFmdGVyIGVhY2ggbGluZSB1c2luZyAkTElORU5POyB0aGUgc2Vjb25kICdzZWQnCisrICAjIGRvZXMgdGhlIHJlYWwgd29yay4gIFRoZSBzZWNvbmQgc2NyaXB0IHVzZXMgJ04nIHRvIHBhaXIgZWFjaAorKyAgIyBsaW5lLW51bWJlciBsaW5lIHdpdGggdGhlIGxpbmUgY29udGFpbmluZyAkTElORU5PLCBhbmQgYXBwZW5kcworKyAgIyB0cmFpbGluZyAnLScgZHVyaW5nIHN1YnN0aXR1dGlvbiBzbyB0aGF0ICRMSU5FTk8gaXMgbm90IGEgc3BlY2lhbAorKyAgIyBjYXNlIGF0IGxpbmUgZW5kLgorICAgIyAoUmFqYSBSIEhhcmluYXRoIHN1Z2dlc3RlZCBzZWQgJz0nLCBhbmQgUGF1bCBFZ2dlcnQgd3JvdGUgdGhlCistICAjIHNlY29uZCAnc2VkJyBzY3JpcHQuICBCbGFtZSBMZWUgRS4gTWNNYWhvbiBmb3Igc2VkJ3Mgc3ludGF4LiAgOi0pCistICBzZWQgJz0nIDwkYXNfbXlzZWxmIHwKKysgICMgc2NyaXB0cyB3aXRoIG9wdGltaXphdGlvbiBoZWxwIGZyb20gUGFvbG8gQm9uemluaS4gIEJsYW1lIExlZQorKyAgIyBFLiBNY01haG9uICgxOTMxLTE5ODkpIGZvciBzZWQncyBzeW50YXguICA6LSkKKysgIHNlZCAtbiAnCisrICAgIHAKKysgICAgL1skXUxJTkVOTy89CisrICAnIDwkYXNfbXlzZWxmIHwKKyAgICAgc2VkICcKKysgICAgICBzL1skXUxJTkVOTy4qLyYtLworKyAgICAgIHQgbGluZW5vCisrICAgICAgYgorKyAgICAgIDpsaW5lbm8KKyAgICAgICBOCistICAgICAgcywkLC0sCistICAgICAgOiBsb29wCistICAgICAgcyxeXChbJyRhc19jcl9kaWdpdHMnXSpcKVwoLipcKVskXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dXCksXDFcMlwxXDMsCisrICAgICAgOmxvb3AKKysgICAgICBzL1skXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dLipcblwpXCguKlwpL1wyXDFcMi8KKyAgICAgICB0IGxvb3AKKy0gICAgICBzLC0kLCwKKy0gICAgICBzLF5bJyRhc19jcl9kaWdpdHMnXSpcbiwsCisrICAgICAgcy8tXG4uKi8vCisgICAgICcgPiRhc19tZS5saW5lbm8gJiYKKy0gIGNobW9kICt4ICRhc19tZS5saW5lbm8gfHwKKysgIGNobW9kICt4ICIkYXNfbWUubGluZW5vIiB8fAorICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjIKKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAKKyAgICMgRG9uJ3QgdHJ5IHRvIGV4ZWMgYXMgaXQgY2hhbmdlcyAkWzBdLCBjYXVzaW5nIGFsbCBzb3J0IG9mIHByb2JsZW1zCisgICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKKy0gICMgb3JpZ2luYWwgYW5kIHNvIG9uLiAgQXV0b2NvbmYgaXMgZXNwZWNpYWxseSBzZW5zaWJsZSB0byB0aGlzKS4KKy0gIC4gLi8kYXNfbWUubGluZW5vCisrICAjIG9yaWdpbmFsIGFuZCBzbyBvbi4gIEF1dG9jb25mIGlzIGVzcGVjaWFsbHkgc2Vuc2l0aXZlIHRvIHRoaXMpLgorKyAgLiAiLi8kYXNfbWUubGluZW5vIgorICAgIyBFeGl0IHN0YXR1cyBpcyB0aGF0IG9mIHRoZSBsYXN0IGNvbW1hbmQuCisgICBleGl0CisgfQorIAorIAorLWNhc2UgYGVjaG8gInRlc3RpbmdcYyI7IGVjaG8gMSwyLDNgLGBlY2hvIC1uIHRlc3Rpbmc7IGVjaG8gMSwyLDNgIGluCistICAqYyosLW4qKSBFQ0hPX049IEVDSE9fQz0nCistJyBFQ0hPX1Q9JwknIDs7CistICAqYyosKiAgKSBFQ0hPX049LW4gRUNIT19DPSBFQ0hPX1Q9IDs7CistICAqKSAgICAgICBFQ0hPX049IEVDSE9fQz0nXGMnIEVDSE9fVD0gOzsKKytpZiAoYXNfZGlyPWBkaXJuYW1lIC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgIGFzX2Rpcm5hbWU9ZGlybmFtZQorK2Vsc2UKKysgIGFzX2Rpcm5hbWU9ZmFsc2UKKytmaQorKworK0VDSE9fQz0gRUNIT19OPSBFQ0hPX1Q9CisrY2FzZSBgZWNobyAtbiB4YCBpbgorKy1uKikKKysgIGNhc2UgYGVjaG8gJ3hcYydgIGluCisrICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBzaW5nbGUgdGFiIGNoYXJhY3Rlci4KKysgICopICAgRUNIT19DPSdcYyc7OworKyAgZXNhYzs7CisrKikKKysgIEVDSE9fTj0nLW4nOzsKKyBlc2FjCisgCistaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKytpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorKyAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCisgICBhc19leHByPWV4cHIKKyBlbHNlCisgICBhc19leHByPWZhbHNlCisgZmkKKyAKKyBybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQorK2lmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorKyAgcm0gLWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQorK2Vsc2UKKysgIHJtIC1mIGNvbmYkJC5kaXIKKysgIG1rZGlyIGNvbmYkJC5kaXIKKytmaQorIGVjaG8gPmNvbmYkJC5maWxlCisgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCistICAjIFdlIGNvdWxkIGp1c3QgY2hlY2sgZm9yIERKR1BQOyBidXQgdGhpcyB0ZXN0IGEpIHdvcmtzIGIpIGlzIG1vcmUgZ2VuZXJpYworLSAgIyBhbmQgYykgd2lsbCByZW1haW4gdmFsaWQgb25jZSBESkdQUCBzdXBwb3J0cyBzeW1saW5rcyAoREpHUFAgMi4wNCkuCistICBpZiB0ZXN0IC1mIGNvbmYkJC5leGU7IHRoZW4KKy0gICAgIyBEb24ndCB1c2UgbG4gYXQgYWxsOyB3ZSBkb24ndCBoYXZlIGFueSBsaW5rcworKyAgYXNfbG5fcz0nbG4gLXMnCisrICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorKyAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKysgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorKyAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wJy4KKysgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKyAgICAgYXNfbG5fcz0nY3AgLXAnCistICBlbHNlCistICAgIGFzX2xuX3M9J2xuIC1zJworLSAgZmkKKyBlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgYXNfbG5fcz1sbgorIGVsc2UKKyAgIGFzX2xuX3M9J2NwIC1wJworIGZpCistcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKKytybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZGlyL2NvbmYkJC5maWxlIGNvbmYkJC5maWxlCisrcm1kaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorIAorIGlmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KKyAgIGFzX21rZGlyX3A9OgorQEAgLTIyMiw3ICs1MTgsMjggQEAKKyAgIGFzX21rZGlyX3A9ZmFsc2UKKyBmaQorIAorLWFzX2V4ZWN1dGFibGVfcD0idGVzdCAtZiIKKytpZiB0ZXN0IC14IC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBhc190ZXN0X3g9J3Rlc3QgLXgnCisrZWxzZQorKyAgaWYgbHMgLWRMIC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgIGFzX2xzX0xfb3B0aW9uPUwKKysgIGVsc2UKKysgICAgYXNfbHNfTF9vcHRpb249CisrICBmaQorKyAgYXNfdGVzdF94PScKKysgICAgZXZhbCBzaCAtYyAnXCcnCisrICAgICAgaWYgdGVzdCAtZCAiJDEiOyB0aGVuCisrICAgICAgICB0ZXN0IC1kICIkMS8uIjsKKysgICAgICBlbHNlCisrCWNhc2UgJDEgaW4KKysgICAgICAgIC0qKXNldCAiLi8kMSI7OworKwllc2FjOworKwljYXNlIGBscyAtbGQnJGFzX2xzX0xfb3B0aW9uJyAiJDEiIDI+L2Rldi9udWxsYCBpbgorKwk/Pz9bc3hdKik6OzsqKWZhbHNlOztlc2FjO2ZpCisrICAgICdcJycgc2gKKysgICcKKytmaQorK2FzX2V4ZWN1dGFibGVfcD0kYXNfdGVzdF94CisgCisgIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgorIGFzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCitAQCAtMjMxLDE1ICs1NDgsNiBAQAorIGFzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisgCisgCistIyBJRlMKKy0jIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLgorLWFzX25sPScKKy0nCistSUZTPSIgCSRhc19ubCIKKy0KKy0jIENEUEFUSC4KKy0kYXNfdW5zZXQgQ0RQQVRICistCisgCisgCisgIyBDaGVjayB0aGF0IHdlIGFyZSBydW5uaW5nIHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLgorQEAgLTM5MCwyOSArNjk4LDI2IEBACisgCisgCisgCisrZXhlYyA3PCYwIDwvZGV2L251bGwgNj4mMQorKworICMgTmFtZSBvZiB0aGUgaG9zdC4KKyAjIGhvc3RuYW1lIG9uIHNvbWUgc3lzdGVtcyAoU1ZSMy4yLCBMaW51eCkgcmV0dXJucyBhIGJvZ3VzIGV4aXQgc3RhdHVzLAorICMgc28gdW5hbWUgZ2V0cyBydW4gdG9vLgorIGFjX2hvc3RuYW1lPWAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorIAorLWV4ZWMgNj4mMQorLQorICMKKyAjIEluaXRpYWxpemF0aW9ucy4KKyAjCisgYWNfZGVmYXVsdF9wcmVmaXg9L3Vzci9sb2NhbAorK2FjX2NsZWFuX2ZpbGVzPQorIGFjX2NvbmZpZ19saWJvYmpfZGlyPS4KKytMSUJPQkpTPQorIGNyb3NzX2NvbXBpbGluZz1ubworIHN1YmRpcnM9CisgTUZMQUdTPQorIE1BS0VGTEFHUz0KKyBTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorIAorLSMgTWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8gcHV0IGluIGEgc2hlbGwgaGVyZSBkb2N1bWVudC4KKy0jIFRoaXMgdmFyaWFibGUgc2VlbXMgb2Jzb2xldGUuICBJdCBzaG91bGQgcHJvYmFibHkgYmUgcmVtb3ZlZCwgYW5kCistIyBvbmx5IGFjX21heF9zZWRfbGluZXMgc2hvdWxkIGJlIHVzZWQuCistOiAke2FjX21heF9oZXJlX2xpbmVzPTM4fQorLQorICMgSWRlbnRpdHkgb2YgdGhpcyBwYWNrYWdlLgorIFBBQ0tBR0VfTkFNRT0nbmV3bGliJworIFBBQ0tBR0VfVEFSTkFNRT0nbmV3bGliJworQEAgLTQyNCw2NiArNzI5LDIxNCBAQAorICMgRmFjdG9yaW5nIGRlZmF1bHQgaGVhZGVycyBmb3IgbW9zdCB0ZXN0cy4KKyBhY19pbmNsdWRlc19kZWZhdWx0PSJcCisgI2luY2x1ZGUgPHN0ZGlvLmg+CistI2lmIEhBVkVfU1lTX1RZUEVTX0gKKysjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorICMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2VuZGlmCistI2lmIEhBVkVfU1lTX1NUQVRfSAorKyNpZmRlZiBIQVZFX1NZU19TVEFUX0gKKyAjIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2VuZGlmCistI2lmIFNURENfSEVBREVSUworKyNpZmRlZiBTVERDX0hFQURFUlMKKyAjIGluY2x1ZGUgPHN0ZGxpYi5oPgorICMgaW5jbHVkZSA8c3RkZGVmLmg+CisgI2Vsc2UKKy0jIGlmIEhBVkVfU1RETElCX0gKKysjIGlmZGVmIEhBVkVfU1RETElCX0gKKyAjICBpbmNsdWRlIDxzdGRsaWIuaD4KKyAjIGVuZGlmCisgI2VuZGlmCistI2lmIEhBVkVfU1RSSU5HX0gKKy0jIGlmICFTVERDX0hFQURFUlMgJiYgSEFWRV9NRU1PUllfSAorKyNpZmRlZiBIQVZFX1NUUklOR19ICisrIyBpZiAhZGVmaW5lZCBTVERDX0hFQURFUlMgJiYgZGVmaW5lZCBIQVZFX01FTU9SWV9ICisgIyAgaW5jbHVkZSA8bWVtb3J5Lmg+CisgIyBlbmRpZgorICMgaW5jbHVkZSA8c3RyaW5nLmg+CisgI2VuZGlmCistI2lmIEhBVkVfU1RSSU5HU19ICisrI2lmZGVmIEhBVkVfU1RSSU5HU19ICisgIyBpbmNsdWRlIDxzdHJpbmdzLmg+CisgI2VuZGlmCistI2lmIEhBVkVfSU5UVFlQRVNfSAorKyNpZmRlZiBIQVZFX0lOVFRZUEVTX0gKKyAjIGluY2x1ZGUgPGludHR5cGVzLmg+CistI2Vsc2UKKy0jIGlmIEhBVkVfU1RESU5UX0gKKy0jICBpbmNsdWRlIDxzdGRpbnQuaD4KKy0jIGVuZGlmCisgI2VuZGlmCistI2lmIEhBVkVfVU5JU1REX0gKKysjaWZkZWYgSEFWRV9TVERJTlRfSAorKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisrI2VuZGlmCisrI2lmZGVmIEhBVkVfVU5JU1REX0gKKyAjIGluY2x1ZGUgPHVuaXN0ZC5oPgorICNlbmRpZiIKKyAKKy1hY19zdWJkaXJzX2FsbD0iJGFjX3N1YmRpcnNfYWxsIGEyOWtoaWYiCistYWNfc3ViZGlyc19hbGw9IiRhY19zdWJkaXJzX2FsbCBhcmMiCistYWNfc3ViZGlyc19hbGw9IiRhY19zdWJkaXJzX2FsbCBhcm0iCistYWNfc3ViZGlyc19hbGw9IiRhY19zdWJkaXJzX2FsbCBkMTB2IgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgZGVjc3RhdGlvbiIKKy1hY19zdWJkaXJzX2FsbD0iJGFjX3N1YmRpcnNfYWxsIGg4MzAwaG1zIgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgaDg1MDBobXMiCistYWNfc3ViZGlyc19hbGw9IiRhY19zdWJkaXJzX2FsbCBsaW51eCIKKy1hY19zdWJkaXJzX2FsbD0iJGFjX3N1YmRpcnNfYWxsIG04OGtidWciCistYWNfc3ViZGlyc19hbGw9IiRhY19zdWJkaXJzX2FsbCBtbWl4d2FyZSIKKy1hY19zdWJkaXJzX2FsbD0iJGFjX3N1YmRpcnNfYWxsIG5ldHdhcmUiCistYWNfc3ViZGlyc19hbGw9IiRhY19zdWJkaXJzX2FsbCByZG9zIgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgcnRlbXMiCistYWNfc3ViZGlyc19hbGw9IiRhY19zdWJkaXJzX2FsbCBzaCIKKy1hY19zdWJkaXJzX2FsbD0iJGFjX3N1YmRpcnNfYWxsIHNwYXJjNjQiCistYWNfc3ViZGlyc19hbGw9IiRhY19zdWJkaXJzX2FsbCBzdW40IgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgc3lzbWVjIgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgc3lzbmVjODEwIgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgc3lzbmVjdjg1MCIKKy1hY19zdWJkaXJzX2FsbD0iJGFjX3N1YmRpcnNfYWxsIHN5c3ZpMzg2IgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgc3lzdm5lY3Y3MCIKKy1hY19zdWJkaXJzX2FsbD0iJGFjX3N1YmRpcnNfYWxsIHRpYzgwIgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgdzY1IgorLWFjX3N1YmRpcnNfYWxsPSIkYWNfc3ViZGlyc19hbGwgejhrc2ltIgorLWFjX3N1YnN0X3ZhcnM9J1NIRUxMIFBBVEhfU0VQQVJBVE9SIFBBQ0tBR0VfTkFNRSBQQUNLQUdFX1RBUk5BTUUgUEFDS0FHRV9WRVJTSU9OIFBBQ0tBR0VfU1RSSU5HIFBBQ0tBR0VfQlVHUkVQT1JUIGV4ZWNfcHJlZml4IHByZWZpeCBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgbGliZGlyIGluY2x1ZGVkaXIgb2xkaW5jbHVkZWRpciBpbmZvZGlyIG1hbmRpciBidWlsZF9hbGlhcyBob3N0X2FsaWFzIHRhcmdldF9hbGlhcyBERUZTIEVDSE9fQyBFQ0hPX04gRUNIT19UIExJQlMgTUFZX1NVUFBMWV9TWVNDQUxMU19UUlVFIE1BWV9TVVBQTFlfU1lTQ0FMTFNfRkFMU0UgbmV3bGliX2Jhc2VkaXIgYnVpbGQgYnVpbGRfY3B1IGJ1aWxkX3ZlbmRvciBidWlsZF9vcyBob3N0IGhvc3RfY3B1IGhvc3RfdmVuZG9yIGhvc3Rfb3MgSU5TVEFMTF9QUk9HUkFNIElOU1RBTExfU0NSSVBUIElOU1RBTExfREFUQSBDWUdQQVRIX1cgUEFDS0FHRSBWRVJTSU9OIEFDTE9DQUwgQVVUT0NPTkYgQVVUT01BS0UgQVVUT0hFQURFUiBNQUtFSU5GTyBpbnN0YWxsX3NoIFNUUklQIGFjX2N0X1NUUklQIElOU1RBTExfU1RSSVBfUFJPR1JBTSBta2Rpcl9wIEFXSyBTRVRfTUFLRSBhbV9fbGVhZGluZ19kb3QgQU1UQVIgYW1fX3RhciBhbV9fdW50YXIgQ0MgREVQRElSIGFtX19pbmNsdWRlIGFtX19xdW90ZSBBTURFUF9UUlVFIEFNREVQX0ZBTFNFIEFNREVQQkFDS1NMQVNIIENDREVQTU9ERSBhbV9fZmFzdGRlcENDX1RSVUUgYW1fX2Zhc3RkZXBDQ19GQUxTRSBBUyBhY19jdF9BUyBBUiBhY19jdF9BUiBSQU5MSUIgYWNfY3RfUkFOTElCIFJFQURFTEYgYWNfY3RfUkVBREVMRiBNQUlOVEFJTkVSX01PREVfVFJVRSBNQUlOVEFJTkVSX01PREVfRkFMU0UgTUFJTlQgQ0NBUyBDQ0FTRkxBR1MgTkVXTElCX0NGTEFHUyBMREZMQUdTIEVMSVhfTEVWRUxfMF9UUlVFIEVMSVhfTEVWRUxfMF9GQUxTRSBFTElYX0xFVkVMXzFfVFJVRSBFTElYX0xFVkVMXzFfRkFMU0UgRUxJWF9MRVZFTF8yX1RSVUUgRUxJWF9MRVZFTF8yX0ZBTFNFIEVMSVhfTEVWRUxfM19UUlVFIEVMSVhfTEVWRUxfM19GQUxTRSBFTElYX0xFVkVMXzRfVFJVRSBFTElYX0xFVkVMXzRfRkFMU0UgVVNFX0xJQlRPT0xfVFJVRSBVU0VfTElCVE9PTF9GQUxTRSBPQkpFWFQgb2V4dCBhZXh0IGxwZnggbGlibV9tYWNoaW5lX2RpciBtYWNoaW5lX2RpciBzeXNfZGlyIFNFRCBETExUT09MIGFjX2N0X0RMTFRPT0wgT0JKRFVNUCBhY19jdF9PQkpEVU1QIExJQlRPT0wgQ0ZMQUdTIENQUEZMQUdTIGFjX2N0X0NDIEVYRUVYVCBFR1JFUCBGR1JFUCBHUkVQIExEIERVTVBCSU4gYWNfY3RfRFVNUEJJTiBOTSBMTl9TIGx0X0VDSE8gRFNZTVVUSUwgYWNfY3RfRFNZTVVUSUwgTk1FRElUIGFjX2N0X05NRURJVCBMSVBPIGFjX2N0X0xJUE8gT1RPT0wgYWNfY3RfT1RPT0wgT1RPT0w2NCBhY19jdF9PVE9PTDY0IENQUCBzdWJkaXJzIENSVDAgSEFWRV9TWVNfRElSX1RSVUUgSEFWRV9TWVNfRElSX0ZBTFNFIExJQk9CSlMgTFRMSUJPQkpTJworK2FjX3N1YnN0X3ZhcnM9J1NIRUxMCisrUEFUSF9TRVBBUkFUT1IKKytQQUNLQUdFX05BTUUKKytQQUNLQUdFX1RBUk5BTUUKKytQQUNLQUdFX1ZFUlNJT04KKytQQUNLQUdFX1NUUklORworK1BBQ0tBR0VfQlVHUkVQT1JUCisrZXhlY19wcmVmaXgKKytwcmVmaXgKKytwcm9ncmFtX3RyYW5zZm9ybV9uYW1lCisrYmluZGlyCisrc2JpbmRpcgorK2xpYmV4ZWNkaXIKKytkYXRhcm9vdGRpcgorK2RhdGFkaXIKKytzeXNjb25mZGlyCisrc2hhcmVkc3RhdGVkaXIKKytsb2NhbHN0YXRlZGlyCisraW5jbHVkZWRpcgorK29sZGluY2x1ZGVkaXIKKytkb2NkaXIKKytpbmZvZGlyCisraHRtbGRpcgorK2R2aWRpcgorK3BkZmRpcgorK3BzZGlyCisrbGliZGlyCisrbG9jYWxlZGlyCisrbWFuZGlyCisrREVGUworK0VDSE9fQworK0VDSE9fTgorK0VDSE9fVAorK0xJQlMKKytidWlsZF9hbGlhcworK2hvc3RfYWxpYXMKKyt0YXJnZXRfYWxpYXMKKytNQVlfU1VQUExZX1NZU0NBTExTX1RSVUUKKytNQVlfU1VQUExZX1NZU0NBTExTX0ZBTFNFCisrbmV3bGliX2Jhc2VkaXIKKytidWlsZAorK2J1aWxkX2NwdQorK2J1aWxkX3ZlbmRvcgorK2J1aWxkX29zCisraG9zdAorK2hvc3RfY3B1CisraG9zdF92ZW5kb3IKKytob3N0X29zCisrSU5TVEFMTF9QUk9HUkFNCisrSU5TVEFMTF9TQ1JJUFQKKytJTlNUQUxMX0RBVEEKKytDWUdQQVRIX1cKKytQQUNLQUdFCisrVkVSU0lPTgorK0FDTE9DQUwKKytBVVRPQ09ORgorK0FVVE9NQUtFCisrQVVUT0hFQURFUgorK01BS0VJTkZPCisraW5zdGFsbF9zaAorK1NUUklQCisrSU5TVEFMTF9TVFJJUF9QUk9HUkFNCisrbWtkaXJfcAorK0FXSworK1NFVF9NQUtFCisrYW1fX2xlYWRpbmdfZG90CisrQU1UQVIKKythbV9fdGFyCisrYW1fX3VudGFyCisrQ0MKKytERVBESVIKKythbV9faW5jbHVkZQorK2FtX19xdW90ZQorK0FNREVQX1RSVUUKKytBTURFUF9GQUxTRQorK0FNREVQQkFDS1NMQVNICisrQ0NERVBNT0RFCisrYW1fX2Zhc3RkZXBDQ19UUlVFCisrYW1fX2Zhc3RkZXBDQ19GQUxTRQorK0FTCisrQVIKKytSQU5MSUIKKytSRUFERUxGCisrTUFJTlRBSU5FUl9NT0RFX1RSVUUKKytNQUlOVEFJTkVSX01PREVfRkFMU0UKKytNQUlOVAorK0NDQVMKKytDQ0FTRkxBR1MKKytORVdMSUJfQ0ZMQUdTCisrTERGTEFHUworK0VMSVhfTEVWRUxfMF9UUlVFCisrRUxJWF9MRVZFTF8wX0ZBTFNFCisrRUxJWF9MRVZFTF8xX1RSVUUKKytFTElYX0xFVkVMXzFfRkFMU0UKKytFTElYX0xFVkVMXzJfVFJVRQorK0VMSVhfTEVWRUxfMl9GQUxTRQorK0VMSVhfTEVWRUxfM19UUlVFCisrRUxJWF9MRVZFTF8zX0ZBTFNFCisrRUxJWF9MRVZFTF80X1RSVUUKKytFTElYX0xFVkVMXzRfRkFMU0UKKytVU0VfTElCVE9PTF9UUlVFCisrVVNFX0xJQlRPT0xfRkFMU0UKKytPQkpFWFQKKytvZXh0CisrYWV4dAorK2xwZngKKytsaWJtX21hY2hpbmVfZGlyCisrbWFjaGluZV9kaXIKKytzeXNfZGlyCisrU0VECisrRExMVE9PTAorK09CSkRVTVAKKytMSUJUT09MCisrQ0ZMQUdTCisrQ1BQRkxBR1MKKythY19jdF9DQworK0VYRUVYVAorK0dSRVAKKytFR1JFUAorK0ZHUkVQCisrTEQKKytEVU1QQklOCisrYWNfY3RfRFVNUEJJTgorK05NCisrTE5fUworK2x0X0VDSE8KKytEU1lNVVRJTAorK05NRURJVAorK0xJUE8KKytPVE9PTAorK09UT09MNjQKKytDUFAKKytzdWJkaXJzCisrQ1JUMAorK0hBVkVfU1lTX0RJUl9UUlVFCisrSEFWRV9TWVNfRElSX0ZBTFNFCisrTElCT0JKUworK0xUTElCT0JKUycKKyBhY19zdWJzdF9maWxlcz0nJworKyAgICAgIGFjX3ByZWNpb3VzX3ZhcnM9J2J1aWxkX2FsaWFzCisraG9zdF9hbGlhcworK3RhcmdldF9hbGlhcworK0NDQVMKKytDQ0FTRkxBR1MKKytDQworK0NGTEFHUworK0xERkxBR1MKKytMSUJTCisrQ1BQRkxBR1MKKytDUFAnCisrYWNfc3ViZGlyc19hbGw9J2EyOWtoaWYKKythcmMKKythcm0KKythdnIzMgorK2QxMHYKKytkZWNzdGF0aW9uCisraDgzMDBobXMKKytoODUwMGhtcworK2xpbnV4CisrbTg4a2J1ZworK21taXh3YXJlCisrbmV0d2FyZQorK3Jkb3MKKytydGVtcworK3NoCisrc3BhcmM2NAorK3N1bjQKKytzeXNtZWMKKytzeXNuZWM4MTAKKytzeXNuZWN2ODUwCisrc3lzdmkzODYKKytzeXN2bmVjdjcwCisrdGljODAKKyt3NjUKKyt6OGtzaW0nCisgCisgIyBJbml0aWFsaXplIHNvbWUgdmFyaWFibGVzIHNldCBieSBvcHRpb25zLgorIGFjX2luaXRfaGVscD0KK0BAIC01MTAsMzQgKzk2Myw0OCBAQAorICMgYW5kIGFsbCB0aGUgdmFyaWFibGVzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIGJhc2VkIG9uIGV4ZWNfcHJlZml4CisgIyBieSBkZWZhdWx0IHdpbGwgYWN0dWFsbHkgY2hhbmdlLgorICMgVXNlIGJyYWNlcyBpbnN0ZWFkIG9mIHBhcmVucyBiZWNhdXNlIHNoLCBwZXJsLCBldGMuIGFsc28gYWNjZXB0IHRoZW0uCisrIyAoVGhlIGxpc3QgZm9sbG93cyB0aGUgc2FtZSBvcmRlciBhcyB0aGUgR05VIENvZGluZyBTdGFuZGFyZHMuKQorIGJpbmRpcj0nJHtleGVjX3ByZWZpeH0vYmluJworIHNiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L3NiaW4nCisgbGliZXhlY2Rpcj0nJHtleGVjX3ByZWZpeH0vbGliZXhlYycKKy1kYXRhZGlyPScke3ByZWZpeH0vc2hhcmUnCisrZGF0YXJvb3RkaXI9JyR7cHJlZml4fS9zaGFyZScKKytkYXRhZGlyPScke2RhdGFyb290ZGlyfScKKyBzeXNjb25mZGlyPScke3ByZWZpeH0vZXRjJworIHNoYXJlZHN0YXRlZGlyPScke3ByZWZpeH0vY29tJworIGxvY2Fsc3RhdGVkaXI9JyR7cHJlZml4fS92YXInCistbGliZGlyPScke2V4ZWNfcHJlZml4fS9saWInCisgaW5jbHVkZWRpcj0nJHtwcmVmaXh9L2luY2x1ZGUnCisgb2xkaW5jbHVkZWRpcj0nL3Vzci9pbmNsdWRlJworLWluZm9kaXI9JyR7cHJlZml4fS9pbmZvJworLW1hbmRpcj0nJHtwcmVmaXh9L21hbicKKytkb2NkaXI9JyR7ZGF0YXJvb3RkaXJ9L2RvYy8ke1BBQ0tBR0VfVEFSTkFNRX0nCisraW5mb2Rpcj0nJHtkYXRhcm9vdGRpcn0vaW5mbycKKytodG1sZGlyPScke2RvY2Rpcn0nCisrZHZpZGlyPScke2RvY2Rpcn0nCisrcGRmZGlyPScke2RvY2Rpcn0nCisrcHNkaXI9JyR7ZG9jZGlyfScKKytsaWJkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYicKKytsb2NhbGVkaXI9JyR7ZGF0YXJvb3RkaXJ9L2xvY2FsZScKKyttYW5kaXI9JyR7ZGF0YXJvb3RkaXJ9L21hbicKKyAKKyBhY19wcmV2PQorK2FjX2Rhc2hkYXNoPQorIGZvciBhY19vcHRpb24KKyBkbworICAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCisgICBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKy0gICAgZXZhbCAiJGFjX3ByZXY9XCRhY19vcHRpb24iCisrICAgIGV2YWwgJGFjX3ByZXY9XCRhY19vcHRpb24KKyAgICAgYWNfcHJldj0KKyAgICAgY29udGludWUKKyAgIGZpCisgCistICBhY19vcHRhcmc9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4W149XSo9XCguKlwpJ2AKKysgIGNhc2UgJGFjX29wdGlvbiBpbgorKyAgKj0qKQlhY19vcHRhcmc9YGV4cHIgIlgkYWNfb3B0aW9uIiA6ICdbXj1dKj1cKC4qXCknYCA7OworKyAgKikJYWNfb3B0YXJnPXllcyA7OworKyAgZXNhYworIAorICAgIyBBY2NlcHQgdGhlIGltcG9ydGFudCBDeWdudXMgY29uZmlndXJlIG9wdGlvbnMsIHNvIHdlIGNhbiBkaWFnbm9zZSB0eXBvcy4KKyAKKy0gIGNhc2UgJGFjX29wdGlvbiBpbgorKyAgY2FzZSAkYWNfZGFzaGRhc2gkYWNfb3B0aW9uIGluCisrICAtLSkKKysgICAgYWNfZGFzaGRhc2g9eWVzIDs7CisgCisgICAtYmluZGlyIHwgLS1iaW5kaXIgfCAtLWJpbmRpIHwgLS1iaW5kIHwgLS1iaW4gfCAtLWJpKQorICAgICBhY19wcmV2PWJpbmRpciA7OworQEAgLTU1OSwzMyArMTAyNiw0NSBAQAorICAgLS1jb25maWctY2FjaGUgfCAtQykKKyAgICAgY2FjaGVfZmlsZT1jb25maWcuY2FjaGUgOzsKKyAKKy0gIC1kYXRhZGlyIHwgLS1kYXRhZGlyIHwgLS1kYXRhZGkgfCAtLWRhdGFkIHwgLS1kYXRhIHwgLS1kYXQgfCAtLWRhKQorKyAgLWRhdGFkaXIgfCAtLWRhdGFkaXIgfCAtLWRhdGFkaSB8IC0tZGF0YWQpCisgICAgIGFjX3ByZXY9ZGF0YWRpciA7OworLSAgLWRhdGFkaXI9KiB8IC0tZGF0YWRpcj0qIHwgLS1kYXRhZGk9KiB8IC0tZGF0YWQ9KiB8IC0tZGF0YT0qIHwgLS1kYXQ9KiBcCistICB8IC0tZGE9KikKKysgIC1kYXRhZGlyPSogfCAtLWRhdGFkaXI9KiB8IC0tZGF0YWRpPSogfCAtLWRhdGFkPSopCisgICAgIGRhdGFkaXI9JGFjX29wdGFyZyA7OworIAorKyAgLWRhdGFyb290ZGlyIHwgLS1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaSB8IC0tZGF0YXJvb3RkIHwgLS1kYXRhcm9vdCBcCisrICB8IC0tZGF0YXJvbyB8IC0tZGF0YXJvIHwgLS1kYXRhcikKKysgICAgYWNfcHJldj1kYXRhcm9vdGRpciA7OworKyAgLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGk9KiB8IC0tZGF0YXJvb3RkPSogXAorKyAgfCAtLWRhdGFyb290PSogfCAtLWRhdGFyb289KiB8IC0tZGF0YXJvPSogfCAtLWRhdGFyPSopCisrICAgIGRhdGFyb290ZGlyPSRhY19vcHRhcmcgOzsKKysKKyAgIC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKikKKyAgICAgYWNfZmVhdHVyZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmRpc2FibGUtXCguKlwpJ2AKKyAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorLSAgICBleHByICJ4JGFjX2ZlYXR1cmUiIDogIi4qW14tXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKysgICAgZXhwciAieCRhY19mZWF0dXJlIiA6ICIuKlteLS5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY19mZWF0dXJlIiA+JjIKKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKy0gICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfZmVhdHVyZSB8IHNlZCAncy8tL18vZydgCistICAgIGV2YWwgImVuYWJsZV8kYWNfZmVhdHVyZT1ubyIgOzsKKysgICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfZmVhdHVyZSB8IHNlZCAncy9bLS5dL18vZydgCisrICAgIGV2YWwgZW5hYmxlXyRhY19mZWF0dXJlPW5vIDs7CisrCisrICAtZG9jZGlyIHwgLS1kb2NkaXIgfCAtLWRvY2RpIHwgLS1kb2MgfCAtLWRvKQorKyAgICBhY19wcmV2PWRvY2RpciA7OworKyAgLWRvY2Rpcj0qIHwgLS1kb2NkaXI9KiB8IC0tZG9jZGk9KiB8IC0tZG9jPSogfCAtLWRvPSopCisrICAgIGRvY2Rpcj0kYWNfb3B0YXJnIDs7CisrCisrICAtZHZpZGlyIHwgLS1kdmlkaXIgfCAtLWR2aWRpIHwgLS1kdmlkIHwgLS1kdmkgfCAtLWR2KQorKyAgICBhY19wcmV2PWR2aWRpciA7OworKyAgLWR2aWRpcj0qIHwgLS1kdmlkaXI9KiB8IC0tZHZpZGk9KiB8IC0tZHZpZD0qIHwgLS1kdmk9KiB8IC0tZHY9KikKKysgICAgZHZpZGlyPSRhY19vcHRhcmcgOzsKKyAKKyAgIC1lbmFibGUtKiB8IC0tZW5hYmxlLSopCisgICAgIGFjX2ZlYXR1cmU9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSplbmFibGUtXChbXj1dKlwpJ2AKKyAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorLSAgICBleHByICJ4JGFjX2ZlYXR1cmUiIDogIi4qW14tXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKysgICAgZXhwciAieCRhY19mZWF0dXJlIiA6ICIuKlteLS5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY19mZWF0dXJlIiA+JjIKKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKy0gICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfZmVhdHVyZSB8IHNlZCAncy8tL18vZydgCistICAgIGNhc2UgJGFjX29wdGlvbiBpbgorLSAgICAgICo9KikgYWNfb3B0YXJnPWBlY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7CistICAgICAgKikgYWNfb3B0YXJnPXllcyA7OworLSAgICBlc2FjCistICAgIGV2YWwgImVuYWJsZV8kYWNfZmVhdHVyZT0nJGFjX29wdGFyZyciIDs7CisrICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX2ZlYXR1cmUgfCBzZWQgJ3MvWy0uXS9fL2cnYAorKyAgICBldmFsIGVuYWJsZV8kYWNfZmVhdHVyZT1cJGFjX29wdGFyZyA7OworIAorICAgLWV4ZWMtcHJlZml4IHwgLS1leGVjX3ByZWZpeCB8IC0tZXhlYy1wcmVmaXggfCAtLWV4ZWMtcHJlZmkgXAorICAgfCAtLWV4ZWMtcHJlZiB8IC0tZXhlYy1wcmUgfCAtLWV4ZWMtcHIgfCAtLWV4ZWMtcCB8IC0tZXhlYy0gXAorQEAgLTYxMiw2ICsxMDkxLDEyIEBACisgICAtaG9zdD0qIHwgLS1ob3N0PSogfCAtLWhvcz0qIHwgLS1obz0qKQorICAgICBob3N0X2FsaWFzPSRhY19vcHRhcmcgOzsKKyAKKysgIC1odG1sZGlyIHwgLS1odG1sZGlyIHwgLS1odG1sZGkgfCAtLWh0bWxkIHwgLS1odG1sIHwgLS1odG0gfCAtLWh0KQorKyAgICBhY19wcmV2PWh0bWxkaXIgOzsKKysgIC1odG1sZGlyPSogfCAtLWh0bWxkaXI9KiB8IC0taHRtbGRpPSogfCAtLWh0bWxkPSogfCAtLWh0bWw9KiB8IC0taHRtPSogXAorKyAgfCAtLWh0PSopCisrICAgIGh0bWxkaXI9JGFjX29wdGFyZyA7OworKworICAgLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaSB8IC0taW5jbHVkZWQgfCAtLWluY2x1ZGUgXAorICAgfCAtLWluY2x1ZCB8IC0taW5jbHUgfCAtLWluY2wgfCAtLWluYykKKyAgICAgYWNfcHJldj1pbmNsdWRlZGlyIDs7CitAQCAtNjM2LDEzICsxMTIxLDE2IEBACisgICB8IC0tbGliZXhlPSogfCAtLWxpYmV4PSogfCAtLWxpYmU9KikKKyAgICAgbGliZXhlY2Rpcj0kYWNfb3B0YXJnIDs7CisgCisrICAtbG9jYWxlZGlyIHwgLS1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpIHwgLS1sb2NhbGVkIHwgLS1sb2NhbGUpCisrICAgIGFjX3ByZXY9bG9jYWxlZGlyIDs7CisrICAtbG9jYWxlZGlyPSogfCAtLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaT0qIHwgLS1sb2NhbGVkPSogfCAtLWxvY2FsZT0qKQorKyAgICBsb2NhbGVkaXI9JGFjX29wdGFyZyA7OworKworICAgLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaSB8IC0tbG9jYWxzdGF0ZWQgXAorLSAgfCAtLWxvY2Fsc3RhdGUgfCAtLWxvY2Fsc3RhdCB8IC0tbG9jYWxzdGEgfCAtLWxvY2Fsc3QgXAorLSAgfCAtLWxvY2FscyB8IC0tbG9jYWwgfCAtLWxvY2EgfCAtLWxvYyB8IC0tbG8pCisrICB8IC0tbG9jYWxzdGF0ZSB8IC0tbG9jYWxzdGF0IHwgLS1sb2NhbHN0YSB8IC0tbG9jYWxzdCB8IC0tbG9jYWxzKQorICAgICBhY19wcmV2PWxvY2Fsc3RhdGVkaXIgOzsKKyAgIC1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpPSogfCAtLWxvY2Fsc3RhdGVkPSogXAorLSAgfCAtLWxvY2Fsc3RhdGU9KiB8IC0tbG9jYWxzdGF0PSogfCAtLWxvY2Fsc3RhPSogfCAtLWxvY2Fsc3Q9KiBcCistICB8IC0tbG9jYWxzPSogfCAtLWxvY2FsPSogfCAtLWxvY2E9KiB8IC0tbG9jPSogfCAtLWxvPSopCisrICB8IC0tbG9jYWxzdGF0ZT0qIHwgLS1sb2NhbHN0YXQ9KiB8IC0tbG9jYWxzdGE9KiB8IC0tbG9jYWxzdD0qIHwgLS1sb2NhbHM9KikKKyAgICAgbG9jYWxzdGF0ZWRpcj0kYWNfb3B0YXJnIDs7CisgCisgICAtbWFuZGlyIHwgLS1tYW5kaXIgfCAtLW1hbmRpIHwgLS1tYW5kIHwgLS1tYW4gfCAtLW1hIHwgLS1tKQorQEAgLTcwNyw2ICsxMTk1LDE2IEBACisgICB8IC0tcHJvZ3ItdHJhPSogfCAtLXByb2dyYW0tdHI9KiB8IC0tcHJvZ3JhbS10PSopCisgICAgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9JGFjX29wdGFyZyA7OworIAorKyAgLXBkZmRpciB8IC0tcGRmZGlyIHwgLS1wZGZkaSB8IC0tcGRmZCB8IC0tcGRmIHwgLS1wZCkKKysgICAgYWNfcHJldj1wZGZkaXIgOzsKKysgIC1wZGZkaXI9KiB8IC0tcGRmZGlyPSogfCAtLXBkZmRpPSogfCAtLXBkZmQ9KiB8IC0tcGRmPSogfCAtLXBkPSopCisrICAgIHBkZmRpcj0kYWNfb3B0YXJnIDs7CisrCisrICAtcHNkaXIgfCAtLXBzZGlyIHwgLS1wc2RpIHwgLS1wc2QgfCAtLXBzKQorKyAgICBhY19wcmV2PXBzZGlyIDs7CisrICAtcHNkaXI9KiB8IC0tcHNkaXI9KiB8IC0tcHNkaT0qIHwgLS1wc2Q9KiB8IC0tcHM9KikKKysgICAgcHNkaXI9JGFjX29wdGFyZyA7OworKworICAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQorICAgICBzaWxlbnQ9eWVzIDs7CitAQCAtNzU5LDI0ICsxMjU3LDIwIEBACisgICAtd2l0aC0qIHwgLS13aXRoLSopCisgICAgIGFjX3BhY2thZ2U9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRoLVwoW149XSpcKSdgCisgICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKy0gICAgZXhwciAieCRhY19wYWNrYWdlIiA6ICIuKlteLV8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisrICAgIGV4cHIgIngkYWNfcGFja2FnZSIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfcGFja2FnZSIgPiYyCisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX3BhY2thZ2V8IHNlZCAncy8tL18vZydgCistICAgIGNhc2UgJGFjX29wdGlvbiBpbgorLSAgICAgICo9KikgYWNfb3B0YXJnPWBlY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7CistICAgICAgKikgYWNfb3B0YXJnPXllcyA7OworLSAgICBlc2FjCistICAgIGV2YWwgIndpdGhfJGFjX3BhY2thZ2U9JyRhY19vcHRhcmcnIiA7OworKyAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlIHwgc2VkICdzL1stLl0vXy9nJ2AKKysgICAgZXZhbCB3aXRoXyRhY19wYWNrYWdlPVwkYWNfb3B0YXJnIDs7CisgCisgICAtd2l0aG91dC0qIHwgLS13aXRob3V0LSopCisgICAgIGFjX3BhY2thZ2U9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRob3V0LVwoLipcKSdgCisgICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKy0gICAgZXhwciAieCRhY19wYWNrYWdlIiA6ICIuKlteLV8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisrICAgIGV4cHIgIngkYWNfcGFja2FnZSIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfcGFja2FnZSIgPiYyCisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX3BhY2thZ2UgfCBzZWQgJ3MvLS9fL2cnYAorLSAgICBldmFsICJ3aXRoXyRhY19wYWNrYWdlPW5vIiA7OworKyAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlIHwgc2VkICdzL1stLl0vXy9nJ2AKKysgICAgZXZhbCB3aXRoXyRhY19wYWNrYWdlPW5vIDs7CisgCisgICAtLXgpCisgICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgteC4KK0BAIC04MDcsOCArMTMwMSw3IEBACisgICAgIGV4cHIgIngkYWNfZW52dmFyIiA6ICIuKlteXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgdmFyaWFibGUgbmFtZTogJGFjX2VudnZhciIgPiYyCisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistICAgIGFjX29wdGFyZz1gZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAKKy0gICAgZXZhbCAiJGFjX2VudnZhcj0nJGFjX29wdGFyZyciCisrICAgIGV2YWwgJGFjX2VudnZhcj1cJGFjX29wdGFyZworICAgICBleHBvcnQgJGFjX2VudnZhciA7OworIAorICAgKikKK0BAIC04MjgsMjcgKzEzMjEsMTkgQEAKKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyBmaQorIAorLSMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIHBhdGhzLgorLWZvciBhY192YXIgaW4gZXhlY19wcmVmaXggcHJlZml4CistZG8KKy0gIGV2YWwgYWNfdmFsPSRgZWNobyAkYWNfdmFyYAorLSAgY2FzZSAkYWNfdmFsIGluCistICAgIFtcXC8kXSogfCA/OltcXC9dKiB8IE5PTkUgfCAnJyApIDs7CistICAgICopICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiID4mMgorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CistICBlc2FjCistZG9uZQorLQorLSMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIHBhdGhzLgorLWZvciBhY192YXIgaW4gYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgXAorLQkgICAgICBsb2NhbHN0YXRlZGlyIGxpYmRpciBpbmNsdWRlZGlyIG9sZGluY2x1ZGVkaXIgaW5mb2RpciBtYW5kaXIKKysjIEJlIHN1cmUgdG8gaGF2ZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZXMuCisrZm9yIGFjX3ZhciBpbglleGVjX3ByZWZpeCBwcmVmaXggYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhcm9vdGRpciBcCisrCQlkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgbG9jYWxzdGF0ZWRpciBpbmNsdWRlZGlyIFwKKysJCW9sZGluY2x1ZGVkaXIgZG9jZGlyIGluZm9kaXIgaHRtbGRpciBkdmlkaXIgcGRmZGlyIHBzZGlyIFwKKysJCWxpYmRpciBsb2NhbGVkaXIgbWFuZGlyCisgZG8KKy0gIGV2YWwgYWNfdmFsPSRgZWNobyAkYWNfdmFyYAorKyAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICBjYXNlICRhY192YWwgaW4KKy0gICAgW1xcLyRdKiB8ID86W1xcL10qICkgOzsKKy0gICAgKikgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogZXhwZWN0ZWQgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgZm9yIC0tJGFjX3ZhcjogJGFjX3ZhbCIgPiYyCistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKysgICAgW1xcLyRdKiB8ID86W1xcL10qICkgIGNvbnRpbnVlOzsKKysgICAgTk9ORSB8ICcnICkgY2FzZSAkYWNfdmFyIGluICpwcmVmaXggKSBjb250aW51ZTs7IGVzYWM7OworICAgZXNhYworKyAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBleHBlY3RlZCBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBmb3IgLS0kYWNfdmFyOiAkYWNfdmFsIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyBkb25lCisgCisgIyBUaGVyZSBtaWdodCBiZSBwZW9wbGUgd2hvIGRlcGVuZCBvbiB0aGUgb2xkIGJyb2tlbiBiZWhhdmlvcjogYCRob3N0JworQEAgLTg3NSw4MiArMTM2MCw3NiBAQAorIHRlc3QgIiRzaWxlbnQiID0geWVzICYmIGV4ZWMgNj4vZGV2L251bGwKKyAKKyAKKythY19wd2Q9YHB3ZGAgJiYgdGVzdCAtbiAiJGFjX3B3ZCIgJiYKKythY19sc19kaT1gbHMgLWRpIC5gICYmCisrYWNfcHdkX2xzX2RpPWBjZCAiJGFjX3B3ZCIgJiYgbHMgLWRpIC5gIHx8CisrICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IFdvcmtpbmcgZGlyZWN0b3J5IGNhbm5vdCBiZSBkZXRlcm1pbmVkIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyt0ZXN0ICJYJGFjX2xzX2RpIiA9ICJYJGFjX3B3ZF9sc19kaSIgfHwKKysgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogcHdkIGRvZXMgbm90IHJlcG9ydCBuYW1lIG9mIHdvcmtpbmcgZGlyZWN0b3J5IiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysKKysKKyAjIEZpbmQgdGhlIHNvdXJjZSBmaWxlcywgaWYgbG9jYXRpb24gd2FzIG5vdCBzcGVjaWZpZWQuCisgaWYgdGVzdCAteiAiJHNyY2RpciI7IHRoZW4KKyAgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9eWVzCistICAjIFRyeSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBzY3JpcHQsIHRoZW4gaXRzIHBhcmVudC4KKy0gIGFjX2NvbmZkaXI9YChkaXJuYW1lICIkMCIpIDI+L2Rldi9udWxsIHx8CisrICAjIFRyeSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBzY3JpcHQsIHRoZW4gdGhlIHBhcmVudCBkaXJlY3RvcnkuCisrICBhY19jb25mZGlyPWAkYXNfZGlybmFtZSAtLSAiJDAiIHx8CisgJGFzX2V4cHIgWCIkMCIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKyAJIFgiJDAiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisgCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAorLQkgWCIkMCIgOiAnWFwoL1wpJyBcfCBcCistCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKysJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorIGVjaG8gWCIkMCIgfAorLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKy0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CistICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKy0gIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CistICAJICBzLy4qLy4vOyBxJ2AKKysgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXC9cKVteL10uKi97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXChcL1wvXCkkL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXCkuKi97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgcy8uKi8uLzsgcSdgCisgICBzcmNkaXI9JGFjX2NvbmZkaXIKKy0gIGlmIHRlc3QgISAtciAkc3JjZGlyLyRhY191bmlxdWVfZmlsZTsgdGhlbgorKyAgaWYgdGVzdCAhIC1yICIkc3JjZGlyLyRhY191bmlxdWVfZmlsZSI7IHRoZW4KKyAgICAgc3JjZGlyPS4uCisgICBmaQorIGVsc2UKKyAgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9bm8KKyBmaQorLWlmIHRlc3QgISAtciAkc3JjZGlyLyRhY191bmlxdWVfZmlsZTsgdGhlbgorLSAgaWYgdGVzdCAiJGFjX3NyY2Rpcl9kZWZhdWx0ZWQiID0geWVzOyB0aGVuCistICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkYWNfY29uZmRpciBvciAuLiIgPiYyCistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistICBlbHNlCistICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkc3JjZGlyIiA+JjIKKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKy0gIGZpCistZmkKKy0oY2QgJHNyY2RpciAmJiB0ZXN0IC1yIC4vJGFjX3VuaXF1ZV9maWxlKSAyPi9kZXYvbnVsbCB8fAorLSAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBzb3VyY2VzIGFyZSBpbiAkc3JjZGlyLCBidXQgXGBjZCAkc3JjZGlyJyBkb2VzIG5vdCB3b3JrIiA+JjIKKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKy1zcmNkaXI9YGVjaG8gIiRzcmNkaXIiIHwgc2VkICdzJVwoW15cXC9dXClbXFwvXSokJVwxJSdgCistYWNfZW52X2J1aWxkX2FsaWFzX3NldD0ke2J1aWxkX2FsaWFzK3NldH0KKy1hY19lbnZfYnVpbGRfYWxpYXNfdmFsdWU9JGJ1aWxkX2FsaWFzCistYWNfY3ZfZW52X2J1aWxkX2FsaWFzX3NldD0ke2J1aWxkX2FsaWFzK3NldH0KKy1hY19jdl9lbnZfYnVpbGRfYWxpYXNfdmFsdWU9JGJ1aWxkX2FsaWFzCistYWNfZW52X2hvc3RfYWxpYXNfc2V0PSR7aG9zdF9hbGlhcytzZXR9CistYWNfZW52X2hvc3RfYWxpYXNfdmFsdWU9JGhvc3RfYWxpYXMKKy1hY19jdl9lbnZfaG9zdF9hbGlhc19zZXQ9JHtob3N0X2FsaWFzK3NldH0KKy1hY19jdl9lbnZfaG9zdF9hbGlhc192YWx1ZT0kaG9zdF9hbGlhcworLWFjX2Vudl90YXJnZXRfYWxpYXNfc2V0PSR7dGFyZ2V0X2FsaWFzK3NldH0KKy1hY19lbnZfdGFyZ2V0X2FsaWFzX3ZhbHVlPSR0YXJnZXRfYWxpYXMKKy1hY19jdl9lbnZfdGFyZ2V0X2FsaWFzX3NldD0ke3RhcmdldF9hbGlhcytzZXR9CistYWNfY3ZfZW52X3RhcmdldF9hbGlhc192YWx1ZT0kdGFyZ2V0X2FsaWFzCistYWNfZW52X0NDQVNfc2V0PSR7Q0NBUytzZXR9CistYWNfZW52X0NDQVNfdmFsdWU9JENDQVMKKy1hY19jdl9lbnZfQ0NBU19zZXQ9JHtDQ0FTK3NldH0KKy1hY19jdl9lbnZfQ0NBU192YWx1ZT0kQ0NBUworLWFjX2Vudl9DQ0FTRkxBR1Nfc2V0PSR7Q0NBU0ZMQUdTK3NldH0KKy1hY19lbnZfQ0NBU0ZMQUdTX3ZhbHVlPSRDQ0FTRkxBR1MKKy1hY19jdl9lbnZfQ0NBU0ZMQUdTX3NldD0ke0NDQVNGTEFHUytzZXR9CistYWNfY3ZfZW52X0NDQVNGTEFHU192YWx1ZT0kQ0NBU0ZMQUdTCistYWNfZW52X0NDX3NldD0ke0NDK3NldH0KKy1hY19lbnZfQ0NfdmFsdWU9JENDCistYWNfY3ZfZW52X0NDX3NldD0ke0NDK3NldH0KKy1hY19jdl9lbnZfQ0NfdmFsdWU9JENDCistYWNfZW52X0NGTEFHU19zZXQ9JHtDRkxBR1Mrc2V0fQorLWFjX2Vudl9DRkxBR1NfdmFsdWU9JENGTEFHUworLWFjX2N2X2Vudl9DRkxBR1Nfc2V0PSR7Q0ZMQUdTK3NldH0KKy1hY19jdl9lbnZfQ0ZMQUdTX3ZhbHVlPSRDRkxBR1MKKy1hY19lbnZfTERGTEFHU19zZXQ9JHtMREZMQUdTK3NldH0KKy1hY19lbnZfTERGTEFHU192YWx1ZT0kTERGTEFHUworLWFjX2N2X2Vudl9MREZMQUdTX3NldD0ke0xERkxBR1Mrc2V0fQorLWFjX2N2X2Vudl9MREZMQUdTX3ZhbHVlPSRMREZMQUdTCistYWNfZW52X0NQUEZMQUdTX3NldD0ke0NQUEZMQUdTK3NldH0KKy1hY19lbnZfQ1BQRkxBR1NfdmFsdWU9JENQUEZMQUdTCistYWNfY3ZfZW52X0NQUEZMQUdTX3NldD0ke0NQUEZMQUdTK3NldH0KKy1hY19jdl9lbnZfQ1BQRkxBR1NfdmFsdWU9JENQUEZMQUdTCistYWNfZW52X0NQUF9zZXQ9JHtDUFArc2V0fQorLWFjX2Vudl9DUFBfdmFsdWU9JENQUAorLWFjX2N2X2Vudl9DUFBfc2V0PSR7Q1BQK3NldH0KKy1hY19jdl9lbnZfQ1BQX3ZhbHVlPSRDUFAKKytpZiB0ZXN0ICEgLXIgIiRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlIjsgdGhlbgorKyAgdGVzdCAiJGFjX3NyY2Rpcl9kZWZhdWx0ZWQiID0geWVzICYmIHNyY2Rpcj0iJGFjX2NvbmZkaXIgb3IgLi4iCisrICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4gJHNyY2RpciIgPiYyCisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrZmkKKythY19tc2c9InNvdXJjZXMgYXJlIGluICRzcmNkaXIsIGJ1dCBcYGNkICRzcmNkaXInIGRvZXMgbm90IHdvcmsiCisrYWNfYWJzX2NvbmZkaXI9YCgKKysJY2QgIiRzcmNkaXIiICYmIHRlc3QgLXIgIi4vJGFjX3VuaXF1ZV9maWxlIiB8fCB7IGVjaG8gIiRhc19tZTogZXJyb3I6ICRhY19tc2ciID4mMgorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKwlwd2QpYAorKyMgV2hlbiBidWlsZGluZyBpbiBwbGFjZSwgc2V0IHNyY2Rpcj0uCisraWYgdGVzdCAiJGFjX2Fic19jb25mZGlyIiA9ICIkYWNfcHdkIjsgdGhlbgorKyAgc3JjZGlyPS4KKytmaQorKyMgUmVtb3ZlIHVubmVjZXNzYXJ5IHRyYWlsaW5nIHNsYXNoZXMgZnJvbSBzcmNkaXIuCisrIyBEb3VibGUgc2xhc2hlcyBpbiBmaWxlIG5hbWVzIGluIG9iamVjdCBmaWxlIGRlYnVnZ2luZyBpbmZvCisrIyBtZXNzIHVwIE0teCBnZGIgaW4gRW1hY3MuCisrY2FzZSAkc3JjZGlyIGluCisrKi8pIHNyY2Rpcj1gZXhwciAiWCRzcmNkaXIiIDogJ1hcKC4qW14vXVwpJyBcfCAiWCRzcmNkaXIiIDogJ1hcKC4qXCknYDs7CisrZXNhYworK2ZvciBhY192YXIgaW4gJGFjX3ByZWNpb3VzX3ZhcnM7IGRvCisrICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fc2V0PVwkeyR7YWNfdmFyfStzZXR9CisrICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KKysgIGV2YWwgYWNfY3ZfZW52XyR7YWNfdmFyfV9zZXQ9XCR7JHthY192YXJ9K3NldH0KKysgIGV2YWwgYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZT1cJCR7YWNfdmFyfQorK2RvbmUKKyAKKyAjCisgIyBSZXBvcnQgdGhlIC0taGVscCBtZXNzYWdlLgorQEAgLTk3OSw5ICsxNDU4LDYgQEAKKyAgIC1uLCAtLW5vLWNyZWF0ZSAgICAgICAgIGRvIG5vdCBjcmVhdGUgb3V0cHV0IGZpbGVzCisgICAgICAgLS1zcmNkaXI9RElSICAgICAgICBmaW5kIHRoZSBzb3VyY2VzIGluIERJUiBbY29uZmlndXJlIGRpciBvciBcYC4uJ10KKyAKKy1fQUNFT0YKKy0KKy0gIGNhdCA8PF9BQ0VPRgorIEluc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKyAgIC0tcHJlZml4PVBSRUZJWCAgICAgICAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzIGluIFBSRUZJWAorIAkJCSAgWyRhY19kZWZhdWx0X3ByZWZpeF0KK0BAIC05OTksMTUgKzE0NzUsMjIgQEAKKyAgIC0tYmluZGlyPURJUiAgICAgICAgICAgdXNlciBleGVjdXRhYmxlcyBbRVBSRUZJWC9iaW5dCisgICAtLXNiaW5kaXI9RElSICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVjdXRhYmxlcyBbRVBSRUZJWC9zYmluXQorICAgLS1saWJleGVjZGlyPURJUiAgICAgICBwcm9ncmFtIGV4ZWN1dGFibGVzIFtFUFJFRklYL2xpYmV4ZWNdCistICAtLWRhdGFkaXI9RElSICAgICAgICAgIHJlYWQtb25seSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbUFJFRklYL3NoYXJlXQorICAgLS1zeXNjb25mZGlyPURJUiAgICAgICByZWFkLW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL2V0Y10KKyAgIC0tc2hhcmVkc3RhdGVkaXI9RElSICAgbW9kaWZpYWJsZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbUFJFRklYL2NvbV0KKyAgIC0tbG9jYWxzdGF0ZWRpcj1ESVIgICAgbW9kaWZpYWJsZSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvdmFyXQorICAgLS1saWJkaXI9RElSICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgW0VQUkVGSVgvbGliXQorICAgLS1pbmNsdWRlZGlyPURJUiAgICAgICBDIGhlYWRlciBmaWxlcyBbUFJFRklYL2luY2x1ZGVdCisgICAtLW9sZGluY2x1ZGVkaXI9RElSICAgIEMgaGVhZGVyIGZpbGVzIGZvciBub24tZ2NjIFsvdXNyL2luY2x1ZGVdCistICAtLWluZm9kaXI9RElSICAgICAgICAgIGluZm8gZG9jdW1lbnRhdGlvbiBbUFJFRklYL2luZm9dCistICAtLW1hbmRpcj1ESVIgICAgICAgICAgIG1hbiBkb2N1bWVudGF0aW9uIFtQUkVGSVgvbWFuXQorKyAgLS1kYXRhcm9vdGRpcj1ESVIgICAgICByZWFkLW9ubHkgYXJjaC4taW5kZXBlbmRlbnQgZGF0YSByb290IFtQUkVGSVgvc2hhcmVdCisrICAtLWRhdGFkaXI9RElSICAgICAgICAgIHJlYWQtb25seSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVJdCisrICAtLWluZm9kaXI9RElSICAgICAgICAgIGluZm8gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvaW5mb10KKysgIC0tbG9jYWxlZGlyPURJUiAgICAgICAgbG9jYWxlLWRlcGVuZGVudCBkYXRhIFtEQVRBUk9PVERJUi9sb2NhbGVdCisrICAtLW1hbmRpcj1ESVIgICAgICAgICAgIG1hbiBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9tYW5dCisrICAtLWRvY2Rpcj1ESVIgICAgICAgICAgIGRvY3VtZW50YXRpb24gcm9vdCBbREFUQVJPT1RESVIvZG9jL25ld2xpYl0KKysgIC0taHRtbGRpcj1ESVIgICAgICAgICAgaHRtbCBkb2N1bWVudGF0aW9uIFtET0NESVJdCisrICAtLWR2aWRpcj1ESVIgICAgICAgICAgIGR2aSBkb2N1bWVudGF0aW9uIFtET0NESVJdCisrICAtLXBkZmRpcj1ESVIgICAgICAgICAgIHBkZiBkb2N1bWVudGF0aW9uIFtET0NESVJdCisrICAtLXBzZGlyPURJUiAgICAgICAgICAgIHBzIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyBfQUNFT0YKKyAKKyAgIGNhdCA8PFxfQUNFT0YKK0BAIC0xMDQ0LDEwICsxNTI3LDggQEAKKyAgIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgICBkbyBub3QgcmVqZWN0IHNsb3cgZGVwZW5kZW5jeSBleHRyYWN0b3JzCisgICAtLWVuYWJsZS1tYWludGFpbmVyLW1vZGUgIGVuYWJsZSBtYWtlIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgbm90IHVzZWZ1bAorIAkJCSAgKGFuZCBzb21ldGltZXMgY29uZnVzaW5nKSB0byB0aGUgY2FzdWFsIGluc3RhbGxlcgorLSAgLS1lbmFibGUtc2hhcmVkWz1QS0dTXQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgc2hhcmVkIGxpYnJhcmllcyBbZGVmYXVsdD15ZXNdCistICAtLWVuYWJsZS1zdGF0aWNbPVBLR1NdCistICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBzdGF0aWMgbGlicmFyaWVzIFtkZWZhdWx0PXllc10KKysgIC0tZW5hYmxlLXNoYXJlZFs9UEtHU10gIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgW2RlZmF1bHQ9eWVzXQorKyAgLS1lbmFibGUtc3RhdGljWz1QS0dTXSAgYnVpbGQgc3RhdGljIGxpYnJhcmllcyBbZGVmYXVsdD15ZXNdCisgICAtLWVuYWJsZS1mYXN0LWluc3RhbGxbPVBLR1NdCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24gW2RlZmF1bHQ9eWVzXQorICAgLS1kaXNhYmxlLWxpYnRvb2wtbG9jayAgYXZvaWQgbG9ja2luZyAobWlnaHQgYnJlYWsgcGFyYWxsZWwgYnVpbGRzKQorQEAgLTEwNjYsMTI4ICsxNTQ3LDk1IEBACisgICBDRkxBR1MgICAgICBDIGNvbXBpbGVyIGZsYWdzCisgICBMREZMQUdTICAgICBsaW5rZXIgZmxhZ3MsIGUuZy4gLUw8bGliIGRpcj4gaWYgeW91IGhhdmUgbGlicmFyaWVzIGluIGEKKyAgICAgICAgICAgICAgIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8bGliIGRpcj4KKy0gIENQUEZMQUdTICAgIEMvQysrIHByZXByb2Nlc3NvciBmbGFncywgZS5nLiAtSTxpbmNsdWRlIGRpcj4gaWYgeW91IGhhdmUKKy0gICAgICAgICAgICAgIGhlYWRlcnMgaW4gYSBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGluY2x1ZGUgZGlyPgorKyAgTElCUyAgICAgICAgbGlicmFyaWVzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciwgZS5nLiAtbDxsaWJyYXJ5PgorKyAgQ1BQRkxBR1MgICAgQy9DKysvT2JqZWN0aXZlIEMgcHJlcHJvY2Vzc29yIGZsYWdzLCBlLmcuIC1JPGluY2x1ZGUgZGlyPiBpZgorKyAgICAgICAgICAgICAgeW91IGhhdmUgaGVhZGVycyBpbiBhIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8aW5jbHVkZSBkaXI+CisgICBDUFAgICAgICAgICBDIHByZXByb2Nlc3NvcgorIAorIFVzZSB0aGVzZSB2YXJpYWJsZXMgdG8gb3ZlcnJpZGUgdGhlIGNob2ljZXMgbWFkZSBieSBgY29uZmlndXJlJyBvciB0byBoZWxwCisgaXQgdG8gZmluZCBsaWJyYXJpZXMgYW5kIHByb2dyYW1zIHdpdGggbm9uc3RhbmRhcmQgbmFtZXMvbG9jYXRpb25zLgorIAorIF9BQ0VPRgorK2FjX3N0YXR1cz0kPworIGZpCisgCisgaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAicmVjdXJzaXZlIjsgdGhlbgorICAgIyBJZiB0aGVyZSBhcmUgc3ViZGlycywgcmVwb3J0IHRoZWlyIHNwZWNpZmljIC0taGVscC4KKy0gIGFjX3BvcGRpcj1gcHdkYAorICAgZm9yIGFjX2RpciBpbiA6ICRhY19zdWJkaXJzX2FsbDsgZG8gdGVzdCAieCRhY19kaXIiID0geDogJiYgY29udGludWUKKy0gICAgdGVzdCAtZCAkYWNfZGlyIHx8IGNvbnRpbnVlCisrICAgIHRlc3QgLWQgIiRhY19kaXIiIHx8IGNvbnRpbnVlCisgICAgIGFjX2J1aWxkZGlyPS4KKyAKKy1pZiB0ZXN0ICIkYWNfZGlyIiAhPSAuOyB0aGVuCisrY2FzZSAiJGFjX2RpciIgaW4KKysuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKysqKQorICAgYWNfZGlyX3N1ZmZpeD0vYGVjaG8gIiRhY19kaXIiIHwgc2VkICdzLF5cLltcXC9dLCwnYAorLSAgIyBBICIuLi8iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKy0gIGFjX3RvcF9idWlsZGRpcj1gZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzLC9bXlxcL10qLC4uLyxnJ2AKKy1lbHNlCistICBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXI9CistZmkKKysgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKysgIGFjX3RvcF9idWlsZGRpcl9zdWI9YGVjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAncywvW15cXC9dKiwvLi4sZztzLC8sLCdgCisrICBjYXNlICRhY190b3BfYnVpbGRkaXJfc3ViIGluCisrICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisrICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1Yi8gOzsKKysgIGVzYWMgOzsKKytlc2FjCisrYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkCisrYWNfYWJzX2J1aWxkZGlyPSRhY19wd2QkYWNfZGlyX3N1ZmZpeAorKyMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6CisrYWNfdG9wX2J1aWxkZGlyPSRhY190b3BfYnVpbGRfcHJlZml4CisgCisgY2FzZSAkc3JjZGlyIGluCistICAuKSAgIyBObyAtLXNyY2RpciBvcHRpb24uICBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisrICAuKSAgIyBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisgICAgIGFjX3NyY2Rpcj0uCistICAgIGlmIHRlc3QgLXogIiRhY190b3BfYnVpbGRkaXIiOyB0aGVuCistICAgICAgIGFjX3RvcF9zcmNkaXI9LgorLSAgICBlbHNlCistICAgICAgIGFjX3RvcF9zcmNkaXI9YGVjaG8gJGFjX3RvcF9idWlsZGRpciB8IHNlZCAncywvJCwsJ2AKKy0gICAgZmkgOzsKKy0gIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgcGF0aC4KKysgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyX3N1YgorKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkIDs7CisrICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuCisgICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7CistICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpciA7OworLSAgKikgIyBSZWxhdGl2ZSBwYXRoLgorLSAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorLSAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXIkc3JjZGlyIDs7CistZXNhYworLQorLSMgRG8gbm90IHVzZSBgY2QgZm9vICYmIHB3ZGAgdG8gY29tcHV0ZSBhYnNvbHV0ZSBwYXRocywgYmVjYXVzZQorLSMgdGhlIGRpcmVjdG9yaWVzIG1heSBub3QgZXhpc3QuCistY2FzZSBgcHdkYCBpbgorLS4pIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OworLSopCistICBjYXNlICIkYWNfZGlyIiBpbgorLSAgLikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgOzsKKy0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7CistICAqKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGAvIiRhY19kaXIiOzsKKy0gIGVzYWM7OworLWVzYWMKKy1jYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKy0uKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OworLSopCistICBjYXNlICR7YWNfdG9wX2J1aWxkZGlyfS4gaW4KKy0gIC4pIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpcjs7CistICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7CistICAqKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXIvJHthY190b3BfYnVpbGRkaXJ9Ljs7CistICBlc2FjOzsKKy1lc2FjCistY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCistLikgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKKy0qKQorLSAgY2FzZSAkYWNfc3JjZGlyIGluCistICAuKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OworLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OworLSAgKikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY19zcmNkaXI7OworLSAgZXNhYzs7CistZXNhYworLWNhc2UgJGFjX2Fic19idWlsZGRpciBpbgorLS4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKKy0qKQorLSAgY2FzZSAkYWNfdG9wX3NyY2RpciBpbgorLSAgLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7CistICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKKy0gICopIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3RvcF9zcmNkaXI7OworLSAgZXNhYzs7CisrICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpcgorKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7CisrICAqKSAjIFJlbGF0aXZlIG5hbWUuCisrICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpcgorKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkLyRzcmNkaXIgOzsKKyBlc2FjCisrYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAorIAorLSAgICBjZCAkYWNfZGlyCistICAgICMgQ2hlY2sgZm9yIGd1ZXN0ZWQgY29uZmlndXJlOyBvdGhlcndpc2UgZ2V0IEN5Z251cyBzdHlsZSBjb25maWd1cmUuCistICAgIGlmIHRlc3QgLWYgJGFjX3NyY2Rpci9jb25maWd1cmUuZ251OyB0aGVuCistICAgICAgZWNobworLSAgICAgICRTSEVMTCAkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUgIC0taGVscD1yZWN1cnNpdmUKKy0gICAgZWxpZiB0ZXN0IC1mICRhY19zcmNkaXIvY29uZmlndXJlOyB0aGVuCistICAgICAgZWNobworLSAgICAgICRTSEVMTCAkYWNfc3JjZGlyL2NvbmZpZ3VyZSAgLS1oZWxwPXJlY3Vyc2l2ZQorLSAgICBlbGlmIHRlc3QgLWYgJGFjX3NyY2Rpci9jb25maWd1cmUuYWMgfHwKKy0JICAgdGVzdCAtZiAkYWNfc3JjZGlyL2NvbmZpZ3VyZS5pbjsgdGhlbgorLSAgICAgIGVjaG8KKy0gICAgICAkYWNfY29uZmlndXJlIC0taGVscAorKyAgICBjZCAiJGFjX2RpciIgfHwgeyBhY19zdGF0dXM9JD87IGNvbnRpbnVlOyB9CisrICAgICMgQ2hlY2sgZm9yIGd1ZXN0ZWQgY29uZmlndXJlLgorKyAgICBpZiB0ZXN0IC1mICIkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUiOyB0aGVuCisrICAgICAgZWNobyAmJgorKyAgICAgICRTSEVMTCAiJGFjX3NyY2Rpci9jb25maWd1cmUuZ251IiAtLWhlbHA9cmVjdXJzaXZlCisrICAgIGVsaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUiOyB0aGVuCisrICAgICAgZWNobyAmJgorKyAgICAgICRTSEVMTCAiJGFjX3NyY2Rpci9jb25maWd1cmUiIC0taGVscD1yZWN1cnNpdmUKKyAgICAgZWxzZQorICAgICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfZGlyIiA+JjIKKy0gICAgZmkKKy0gICAgY2QgJGFjX3BvcGRpcgorKyAgICBmaSB8fCBhY19zdGF0dXM9JD8KKysgICAgY2QgIiRhY19wd2QiIHx8IHsgYWNfc3RhdHVzPSQ/OyBicmVhazsgfQorICAgZG9uZQorIGZpCisgCistdGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAwCisrdGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAkYWNfc3RhdHVzCisgaWYgJGFjX2luaXRfdmVyc2lvbjsgdGhlbgorICAgY2F0IDw8XF9BQ0VPRgorIG5ld2xpYiBjb25maWd1cmUgMS4xNy4wCistZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU5CisrZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjYxCisgCistQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK0NvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKysyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIFRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorIF9BQ0VPRgorLSAgZXhpdCAwCisrICBleGl0CisgZmkKKy1leGVjIDU+Y29uZmlnLmxvZworLWNhdCA+JjUgPDxfQUNFT0YKKytjYXQgPmNvbmZpZy5sb2cgPDxfQUNFT0YKKyBUaGlzIGZpbGUgY29udGFpbnMgYW55IG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IGNvbXBpbGVycyB3aGlsZQorIHJ1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5nIGlmIGNvbmZpZ3VyZSBtYWtlcyBhIG1pc3Rha2UuCisgCisgSXQgd2FzIGNyZWF0ZWQgYnkgbmV3bGliICRhc19tZSAxLjE3LjAsIHdoaWNoIHdhcworLWdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworIAorICAgJCAkMCAkQAorIAorIF9BQ0VPRgorK2V4ZWMgNT4+Y29uZmlnLmxvZworIHsKKyBjYXQgPDxfQVNVTkFNRQorICMjIC0tLS0tLS0tLSAjIworQEAgLTEyMDYsNyArMTY1NCw3IEBACisgL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbCAgICAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorIC91c3IvYmluL2FyY2ggLWsgICAgICAgPSBgKC91c3IvYmluL2FyY2ggLWspIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKyAvdXNyL2NvbnZleC9nZXRzeXNpbmZvID0gYCgvdXNyL2NvbnZleC9nZXRzeXNpbmZvKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCistaG9zdGluZm8gICAgICAgICAgICAgICA9IGAoaG9zdGluZm8pIDI+L2Rldi9udWxsICAgICAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorKy91c3IvYmluL2hvc3RpbmZvICAgICAgPSBgKC91c3IvYmluL2hvc3RpbmZvKSAyPi9kZXYvbnVsbCAgICAgIHx8IGVjaG8gdW5rbm93bmAKKyAvYmluL21hY2hpbmUgICAgICAgICAgID0gYCgvYmluL21hY2hpbmUpIDI+L2Rldi9udWxsICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisgL3Vzci9iaW4vb3NsZXZlbCAgICAgICA9IGAoL3Vzci9iaW4vb3NsZXZlbCkgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAorIC9iaW4vdW5pdmVyc2UgICAgICAgICAgPSBgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKK0BAIC0xMjIwLDYgKzE2NjgsNyBAQAorICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIGVjaG8gIlBBVEg6ICRhc19kaXIiCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKyB9ID4mNQorIAorQEAgLTEyNDEsNyArMTY5MCw2IEBACisgYWNfY29uZmlndXJlX2FyZ3M9CisgYWNfY29uZmlndXJlX2FyZ3MwPQorIGFjX2NvbmZpZ3VyZV9hcmdzMT0KKy1hY19zZXA9CisgYWNfbXVzdF9rZWVwX25leHQ9ZmFsc2UKKyBmb3IgYWNfcGFzcyBpbiAxIDIKKyBkbworQEAgLTEyNTIsNyArMTcwMCw3IEBACisgICAgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCisgICAgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQorICAgICAgIGNvbnRpbnVlIDs7CistICAgICoiICIqfCoiCSIqfCpbXFtcXVx+XCNcJFxeXCZcKlwoXClce1x9XFxcfFw7XDxcPlw/XCJcJ10qKQorKyAgICAqXCcqKQorICAgICAgIGFjX2FyZz1gZWNobyAiJGFjX2FyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICAgZXNhYworICAgICBjYXNlICRhY19wYXNzIGluCitAQCAtMTI3NCw5ICsxNzIyLDcgQEAKKyAJICAtKiApIGFjX211c3Rfa2VlcF9uZXh0PXRydWUgOzsKKyAJZXNhYworICAgICAgIGZpCistICAgICAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyRhY19zZXAnJGFjX2FyZyciCistICAgICAgIyBHZXQgcmlkIG9mIHRoZSBsZWFkaW5nIHNwYWNlLgorLSAgICAgIGFjX3NlcD0iICIKKysgICAgICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICckYWNfYXJnJyIKKyAgICAgICA7OworICAgICBlc2FjCisgICBkb25lCitAQCAtMTI4Nyw4ICsxNzMzLDggQEAKKyAjIFdoZW4gaW50ZXJydXB0ZWQgb3IgZXhpdCdkLCBjbGVhbnVwIHRlbXBvcmFyeSBmaWxlcywgYW5kIGNvbXBsZXRlCisgIyBjb25maWcubG9nLiAgV2UgcmVtb3ZlIGNvbW1lbnRzIGJlY2F1c2UgYW55d2F5IHRoZSBxdW90ZXMgaW4gdGhlcmUKKyAjIHdvdWxkIGNhdXNlIHByb2JsZW1zIG9yIGxvb2sgdWdseS4KKy0jIFdBUk5JTkc6IEJlIHN1cmUgbm90IHRvIHVzZSBzaW5nbGUgcXVvdGVzIGluIHRoZXJlLCBhcyBzb21lIHNoZWxscywKKy0jIHN1Y2ggYXMgb3VyIERVIDUuMCBmcmllbmQsIHdpbGwgdGhlbiBgY2xvc2UnIHRoZSB0cmFwLgorKyMgV0FSTklORzogVXNlICdcJycgdG8gcmVwcmVzZW50IGFuIGFwb3N0cm9waGUgd2l0aGluIHRoZSB0cmFwLgorKyMgV0FSTklORzogRG8gbm90IHN0YXJ0IHRoZSB0cmFwIGNvZGUgd2l0aCBhIG5ld2xpbmUsIGR1ZSB0byBhIEZyZWVCU0QgNC4wIGJ1Zy4KKyB0cmFwICdleGl0X3N0YXR1cz0kPworICAgIyBTYXZlIGludG8gY29uZmlnLmxvZyBzb21lIGluZm9ybWF0aW9uIHRoYXQgbWlnaHQgaGVscCBpbiBkZWJ1Z2dpbmcuCisgICB7CitAQCAtMTMwMSwyMCArMTc0NywzNCBAQAorIF9BU0JPWAorICAgICBlY2hvCisgICAgICMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisteworKygKKysgIGZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfCBzZWQgLW4gJ1wnJ3MvXlwoW2EtekEtWl9dW2EtekEtWjAtOV9dKlwpPS4qL1wxL3AnXCcnYDsgZG8KKysgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisrICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAorKyAgICAqJHthc19ubH0qKQorKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorKyAgICAgICpfY3ZfKikgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogQ2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUuIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6IENhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lLiIgPiYyO30gOzsKKysgICAgICBlc2FjCisrICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisrICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAorKyAgICAgICopICRhc191bnNldCAkYWNfdmFyIDs7CisrICAgICAgZXNhYyA7OworKyAgICBlc2FjCisrICBkb25lCisgICAoc2V0KSAyPiYxIHwKKy0gICAgY2FzZSBgKGFjX3NwYWNlPSciJyInICciJyInOyBzZXQgfCBncmVwIGFjX3NwYWNlKSAyPiYxYCBpbgorLSAgICAqYWNfc3BhY2U9XCAqKQorKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9J1wnJyAnXCcnOyBzZXQpIDI+JjFgIGluICMoCisrICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKKyAgICAgICBzZWQgLW4gXAorLQkicy8nIiciJy8nIiciJ1xcXFwnIiciJyciJyInL2c7CistCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nIiciJ1xcMiciJyInL3AiCistICAgICAgOzsKKysJInMvJ1wnJy8nXCcnXFxcXCdcJycnXCcnL2c7CisrCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXCcnXFwyJ1wnJy9wIgorKyAgICAgIDs7ICMoCisgICAgICopCistICAgICAgc2VkIC1uIFwKKy0JInMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9XFwyL3AiCisrICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKKyAgICAgICA7OworLSAgICBlc2FjOworLX0KKysgICAgZXNhYyB8CisrICAgIHNvcnQKKyspCisgICAgIGVjaG8KKyAKKyAgICAgY2F0IDw8XF9BU0JPWAorQEAgLTEzMjUsMjIgKzE3ODUsMjggQEAKKyAgICAgZWNobworICAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF92YXJzCisgICAgIGRvCistICAgICAgZXZhbCBhY192YWw9JGBlY2hvICRhY192YXJgCistICAgICAgZWNobyAiJGFjX3Zhcj0nIiciJyRhY192YWwnIiciJyIKKysgICAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKysgICAgICBjYXNlICRhY192YWwgaW4KKysgICAgICAqXCdcJycqKSBhY192YWw9YGVjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKKysgICAgICBlc2FjCisrICAgICAgZWNobyAiJGFjX3Zhcj0nXCcnJGFjX3ZhbCdcJyciCisgICAgIGRvbmUgfCBzb3J0CisgICAgIGVjaG8KKyAKKyAgICAgaWYgdGVzdCAtbiAiJGFjX3N1YnN0X2ZpbGVzIjsgdGhlbgorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tICMjCistIyMgT3V0cHV0IGZpbGVzLiAjIworLSMjIC0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgRmlsZSBzdWJzdGl0dXRpb25zLiAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgICBlY2hvCisgICAgICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfZmlsZXMKKyAgICAgICBkbworLQlldmFsIGFjX3ZhbD0kYGVjaG8gJGFjX3ZhcmAKKy0JZWNobyAiJGFjX3Zhcj0nIiciJyRhY192YWwnIiciJyIKKysJZXZhbCBhY192YWw9XCQkYWNfdmFyCisrCWNhc2UgJGFjX3ZhbCBpbgorKwkqXCdcJycqKSBhY192YWw9YGVjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKKysJZXNhYworKwllY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKKyAgICAgICBkb25lIHwgc29ydAorICAgICAgIGVjaG8KKyAgICAgZmkKK0BAIC0xMzUyLDI2ICsxODE4LDI0IEBACisgIyMgLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgICBlY2hvCistICAgICAgc2VkICIvXiQvZCIgY29uZmRlZnMuaCB8IHNvcnQKKysgICAgICBjYXQgY29uZmRlZnMuaAorICAgICAgIGVjaG8KKyAgICAgZmkKKyAgICAgdGVzdCAiJGFjX3NpZ25hbCIgIT0gMCAmJgorICAgICAgIGVjaG8gIiRhc19tZTogY2F1Z2h0IHNpZ25hbCAkYWNfc2lnbmFsIgorICAgICBlY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIgorICAgfSA+JjUKKy0gIHJtIC1mIGNvcmUgKi5jb3JlICYmCistICBybSAtcmYgY29uZnRlc3QqIGNvbmZkZWZzKiBjb25mJCQqICRhY19jbGVhbl9maWxlcyAmJgorKyAgcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qICYmCisrICAgIHJtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcyogY29uZiQkKiAkYWNfY2xlYW5fZmlsZXMgJiYKKyAgICAgZXhpdCAkZXhpdF9zdGF0dXMKKy0gICAgICcgMAorKycgMAorIGZvciBhY19zaWduYWwgaW4gMSAyIDEzIDE1OyBkbworICAgdHJhcCAnYWNfc2lnbmFsPSckYWNfc2lnbmFsJzsgeyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAkYWNfc2lnbmFsCisgZG9uZQorIGFjX3NpZ25hbD0wCisgCisgIyBjb25mZGVmcy5oIGF2b2lkcyBPUyBjb21tYW5kIGxpbmUgbGVuZ3RoIGxpbWl0cyB0aGF0IERFRlMgY2FuIGV4Y2VlZC4KKy1ybSAtcmYgY29uZnRlc3QqIGNvbmZkZWZzLmgKKy0jIEFJWCBjcHAgbG9zZXMgb24gYW4gZW1wdHkgZmlsZSwgc28gbWFrZSBzdXJlIGl0IGNvbnRhaW5zIGF0IGxlYXN0IGEgbmV3bGluZS4KKy1lY2hvID5jb25mZGVmcy5oCisrcm0gLWYgLXIgY29uZnRlc3QqIGNvbmZkZWZzLmgKKyAKKyAjIFByZWRlZmluZWQgcHJlcHJvY2Vzc29yIHZhcmlhYmxlcy4KKyAKK0BAIC0xNDAyLDE0ICsxODY2LDE3IEBACisgCisgIyBMZXQgdGhlIHNpdGUgZmlsZSBzZWxlY3QgYW4gYWx0ZXJuYXRlIGNhY2hlIGZpbGUgaWYgaXQgd2FudHMgdG8uCisgIyBQcmVmZXIgZXhwbGljaXRseSBzZWxlY3RlZCBmaWxlIHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgb25lcy4KKy1pZiB0ZXN0IC16ICIkQ09ORklHX1NJVEUiOyB0aGVuCistICBpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKy0gICAgQ09ORklHX1NJVEU9IiRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUgJHByZWZpeC9ldGMvY29uZmlnLnNpdGUiCistICBlbHNlCistICAgIENPTkZJR19TSVRFPSIkYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUgJGFjX2RlZmF1bHRfcHJlZml4L2V0Yy9jb25maWcuc2l0ZSIKKy0gIGZpCisraWYgdGVzdCAtbiAiJENPTkZJR19TSVRFIjsgdGhlbgorKyAgc2V0IHggIiRDT05GSUdfU0lURSIKKytlbGlmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgorKyAgc2V0IHggIiRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUiICIkcHJlZml4L2V0Yy9jb25maWcuc2l0ZSIKKytlbHNlCisrICBzZXQgeCAiJGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlIiBcCisrCSIkYWNfZGVmYXVsdF9wcmVmaXgvZXRjL2NvbmZpZy5zaXRlIgorIGZpCistZm9yIGFjX3NpdGVfZmlsZSBpbiAkQ09ORklHX1NJVEU7IGRvCisrc2hpZnQKKytmb3IgYWNfc2l0ZV9maWxlCisrZG8KKyAgIGlmIHRlc3QgLXIgIiRhY19zaXRlX2ZpbGUiOyB0aGVuCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY1CisgZWNobyAiJGFzX21lOiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNjt9CitAQCAtMTQyNSw4ICsxODkyLDggQEAKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CisgZWNobyAiJGFzX21lOiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICAgICBjYXNlICRjYWNoZV9maWxlIGluCistICAgICAgW1xcL10qIHwgPzpbXFwvXSogKSAuICRjYWNoZV9maWxlOzsKKy0gICAgICAqKSAgICAgICAgICAgICAgICAgICAgICAuIC4vJGNhY2hlX2ZpbGU7OworKyAgICAgIFtcXC9dKiB8ID86W1xcL10qICkgLiAiJGNhY2hlX2ZpbGUiOzsKKysgICAgICAqKSAgICAgICAgICAgICAgICAgICAgICAuICIuLyRjYWNoZV9maWxlIjs7CisgICAgIGVzYWMKKyAgIGZpCisgZWxzZQorQEAgLTE0MzgsMTIgKzE5MDUsMTEgQEAKKyAjIENoZWNrIHRoYXQgdGhlIHByZWNpb3VzIHZhcmlhYmxlcyBzYXZlZCBpbiB0aGUgY2FjaGUgaGF2ZSBrZXB0IHRoZSBzYW1lCisgIyB2YWx1ZS4KKyBhY19jYWNoZV9jb3JydXB0ZWQ9ZmFsc2UKKy1mb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwKKy0JICAgICAgIHNlZCAtbiAncy9eYWNfZW52X1woW2EtekEtWl8wLTldKlwpX3NldD0uKi9cMS9wJ2A7IGRvCisrZm9yIGFjX3ZhciBpbiAkYWNfcHJlY2lvdXNfdmFyczsgZG8KKyAgIGV2YWwgYWNfb2xkX3NldD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0CisgICBldmFsIGFjX25ld19zZXQ9XCRhY19lbnZfJHthY192YXJ9X3NldAorLSAgZXZhbCBhY19vbGRfdmFsPSJcJGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWUiCistICBldmFsIGFjX25ld192YWw9IlwkYWNfZW52XyR7YWNfdmFyfV92YWx1ZSIKKysgIGV2YWwgYWNfb2xkX3ZhbD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWUKKysgIGV2YWwgYWNfbmV3X3ZhbD1cJGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWUKKyAgIGNhc2UgJGFjX29sZF9zZXQsJGFjX25ld19zZXQgaW4KKyAgICAgc2V0LCkKKyAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorQEAgLTE0NjgsOCArMTkzNCw3IEBACisgICAjIFBhc3MgcHJlY2lvdXMgdmFyaWFibGVzIHRvIGNvbmZpZy5zdGF0dXMuCisgICBpZiB0ZXN0ICIkYWNfbmV3X3NldCIgPSBzZXQ7IHRoZW4KKyAgICAgY2FzZSAkYWNfbmV3X3ZhbCBpbgorLSAgICAqIiAiKnwqIgkiKnwqW1xbXF1cflwjXCRcXlwmXCpcKFwpXHtcfVxcXHxcO1w8XD5cP1wiXCddKikKKy0gICAgICBhY19hcmc9JGFjX3Zhcj1gZWNobyAiJGFjX25ld192YWwiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisrICAgICpcJyopIGFjX2FyZz0kYWNfdmFyPWBlY2hvICIkYWNfbmV3X3ZhbCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICAgKikgYWNfYXJnPSRhY192YXI9JGFjX25ld192YWwgOzsKKyAgICAgZXNhYworICAgICBjYXNlICIgJGFjX2NvbmZpZ3VyZV9hcmdzICIgaW4KK0BAIC0xNDg2LDEyICsxOTUxLDYgQEAKKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyBmaQorIAorLWFjX2V4dD1jCistYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKy1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCistYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKy1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CistCisgCisgCisgCitAQCAtMTUxNiw2NyArMTk3NSw5MiBAQAorIAorIAorIAorK2FjX2V4dD1jCisrYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKythY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisrYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKythY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisgCisgCisgCisgCisgYWNfYXV4X2Rpcj0KKy1mb3IgYWNfZGlyIGluIC4uLy4uLy4uICRzcmNkaXIvLi4vLi4vLi47IGRvCistICBpZiB0ZXN0IC1mICRhY19kaXIvaW5zdGFsbC1zaDsgdGhlbgorK2ZvciBhY19kaXIgaW4gLi4vLi4vLi4gIiRzcmNkaXIiLy4uLy4uLy4uOyBkbworKyAgaWYgdGVzdCAtZiAiJGFjX2Rpci9pbnN0YWxsLXNoIjsgdGhlbgorICAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC1zaCAtYyIKKyAgICAgYnJlYWsKKy0gIGVsaWYgdGVzdCAtZiAkYWNfZGlyL2luc3RhbGwuc2g7IHRoZW4KKysgIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9pbnN0YWxsLnNoIjsgdGhlbgorICAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC5zaCAtYyIKKyAgICAgYnJlYWsKKy0gIGVsaWYgdGVzdCAtZiAkYWNfZGlyL3NodG9vbDsgdGhlbgorKyAgZWxpZiB0ZXN0IC1mICIkYWNfZGlyL3NodG9vbCI7IHRoZW4KKyAgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL3NodG9vbCBpbnN0YWxsIC1jIgorICAgICBicmVhaworICAgZmkKKyBkb25lCisgaWYgdGVzdCAteiAiJGFjX2F1eF9kaXIiOyB0aGVuCistICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnN0YWxsLXNoIG9yIGluc3RhbGwuc2ggaW4gLi4vLi4vLi4gJHNyY2Rpci8uLi8uLi8uLiIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5zdGFsbC1zaCBvciBpbnN0YWxsLnNoIGluIC4uLy4uLy4uICRzcmNkaXIvLi4vLi4vLi4iID4mMjt9CisrICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnN0YWxsLXNoIG9yIGluc3RhbGwuc2ggaW4gLi4vLi4vLi4gXCIkc3JjZGlyXCIvLi4vLi4vLi4iID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGluc3RhbGwtc2ggb3IgaW5zdGFsbC5zaCBpbiAuLi8uLi8uLiBcIiRzcmNkaXJcIi8uLi8uLi8uLiIgPiYyO30KKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyBmaQorLWFjX2NvbmZpZ19ndWVzcz0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyIKKy1hY19jb25maWdfc3ViPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIKKy1hY19jb25maWd1cmU9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWd1cmUiICMgVGhpcyBzaG91bGQgYmUgQ3lnbnVzIGNvbmZpZ3VyZS4KKysKKysjIFRoZXNlIHRocmVlIHZhcmlhYmxlcyBhcmUgdW5kb2N1bWVudGVkIGFuZCB1bnN1cHBvcnRlZCwKKysjIGFuZCBhcmUgaW50ZW5kZWQgdG8gYmUgd2l0aGRyYXduIGluIGEgZnV0dXJlIEF1dG9jb25mIHJlbGVhc2UuCisrIyBUaGV5IGNhbiBjYXVzZSBzZXJpb3VzIHByb2JsZW1zIGlmIGEgYnVpbGRlcidzIHNvdXJjZSB0cmVlIGlzIGluIGEgZGlyZWN0b3J5CisrIyB3aG9zZSBmdWxsIG5hbWUgY29udGFpbnMgdW51c3VhbCBjaGFyYWN0ZXJzLgorK2FjX2NvbmZpZ19ndWVzcz0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KKythY19jb25maWdfc3ViPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KKythY19jb25maWd1cmU9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWd1cmUiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCisrCisgCisgCisgCisgIyBNYWtlIHN1cmUgd2UgY2FuIHJ1biBjb25maWcuc3ViLgorLSRhY19jb25maWdfc3ViIHN1bjQgPi9kZXYvbnVsbCAyPiYxIHx8CistICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuICRhY19jb25maWdfc3ViIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgcnVuICRhY19jb25maWdfc3ViIiA+JjI7fQorKyRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgc3VuNCA+L2Rldi9udWxsIDI+JjEgfHwKKysgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBydW4gJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBydW4gJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiID4mMjt9CisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfYnVpbGQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgYWNfY3ZfYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCistdGVzdCAteiAiJGFjX2N2X2J1aWxkX2FsaWFzIiAmJgorLSAgYWNfY3ZfYnVpbGRfYWxpYXM9YCRhY19jb25maWdfZ3Vlc3NgCistdGVzdCAteiAiJGFjX2N2X2J1aWxkX2FsaWFzIiAmJgorKyAgYWNfYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCisrdGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCisrICBhY19idWlsZF9hbGlhcz1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiYAorK3Rlc3QgIngkYWNfYnVpbGRfYWxpYXMiID0geCAmJgorICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiA+JjUKKyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiID4mMjt9CisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistYWNfY3ZfYnVpbGQ9YCRhY19jb25maWdfc3ViICRhY19jdl9idWlsZF9hbGlhc2AgfHwKKy0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRhY19jb25maWdfc3ViICRhY19jdl9idWlsZF9hbGlhcyBmYWlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogZXJyb3I6ICRhY19jb25maWdfc3ViICRhY19jdl9idWlsZF9hbGlhcyBmYWlsZWQiID4mMjt9CisrYWNfY3ZfYnVpbGQ9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJGFjX2J1aWxkX2FsaWFzYCB8fAorKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGFjX2J1aWxkX2FsaWFzIGZhaWxlZCIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGFjX2J1aWxkX2FsaWFzIGZhaWxlZCIgPiYyO30KKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9idWlsZCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2J1aWxkIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9idWlsZCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2J1aWxkIiA+JjY7IH0KKytjYXNlICRhY19jdl9idWlsZCBpbgorKyotKi0qKSA7OworKyopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGJ1aWxkIiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBidWlsZCIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworK2VzYWMKKyBidWlsZD0kYWNfY3ZfYnVpbGQKKy1idWlsZF9jcHU9YGVjaG8gJGFjX2N2X2J1aWxkIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDEvJ2AKKy1idWlsZF92ZW5kb3I9YGVjaG8gJGFjX2N2X2J1aWxkIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDIvJ2AKKy1idWlsZF9vcz1gZWNobyAkYWNfY3ZfYnVpbGQgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKKytzZXQgeCAkYWNfY3ZfYnVpbGQKKytzaGlmdAorK2J1aWxkX2NwdT0kMQorK2J1aWxkX3ZlbmRvcj0kMgorK3NoaWZ0OyBzaGlmdAorKyMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorKyMgZXhjZXB0IHdpdGggb2xkIHNoZWxsczoKKytidWlsZF9vcz0kKgorK0lGUz0kYWNfc2F2ZV9JRlMKKytjYXNlICRidWlsZF9vcyBpbiAqXCAqKSBidWlsZF9vcz1gZWNobyAiJGJ1aWxkX29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYworIAorIAorIGFtX19hcGlfdmVyc2lvbj0iMS45IgorQEAgLTE1OTMsOCArMjA3Nyw4IEBACisgIyBTVlI0IC91c3IvdWNiL2luc3RhbGwsIHdoaWNoIHRyaWVzIHRvIHVzZSB0aGUgbm9uZXhpc3RlbnQgZ3JvdXAgInN0YWZmIgorICMgT1MvMidzIHN5c3RlbSBpbnN0YWxsLCB3aGljaCBoYXMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBzZW1hbnRpYworICMgLi9pbnN0YWxsLCB3aGljaCBjYW4gYmUgZXJyb25lb3VzbHkgY3JlYXRlZCBieSBtYWtlIGZyb20gLi9pbnN0YWxsLnNoLgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgLXogIiRJTlNUQUxMIjsgdGhlbgorIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorQEAgLTE2MTYsNyArMjEwMCw3IEBACisgICAgICMgYnkgZGVmYXVsdC4KKyAgICAgZm9yIGFjX3Byb2cgaW4gZ2luc3RhbGwgc2NvaW5zdCBpbnN0YWxsOyBkbworICAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLQlpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgdGhlbgorKwlpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB9OyB0aGVuCisgCSAgaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKyAJICAgIGdyZXAgZHNwbXNnICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAJICAgICMgQUlYIGluc3RhbGwuICBJdCBoYXMgYW4gaW5jb21wYXRpYmxlIGNhbGxpbmcgY29udmVudGlvbi4KK0BAIC0xNjM1LDIxICsyMTE5LDIyIEBACisgICAgIDs7CisgZXNhYworIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCisgCisgZmkKKyAgIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCisgICAgIElOU1RBTEw9JGFjX2N2X3BhdGhfaW5zdGFsbAorICAgZWxzZQorLSAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBXZSBkb24ndCBjYWNoZSBhCistICAgICMgcGF0aCBmb3IgSU5TVEFMTCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAorKyAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBEb24ndCBjYWNoZSBhCisrICAgICMgdmFsdWUgZm9yIElOU1RBTEwgd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKyAgICAgIyBicmVhayBvdGhlciBwYWNrYWdlcyB1c2luZyB0aGUgY2FjaGUgaWYgdGhhdCBkaXJlY3RvcnkgaXMKKy0gICAgIyByZW1vdmVkLCBvciBpZiB0aGUgcGF0aCBpcyByZWxhdGl2ZS4KKysgICAgIyByZW1vdmVkLCBvciBpZiB0aGUgdmFsdWUgaXMgYSByZWxhdGl2ZSBuYW1lLgorICAgICBJTlNUQUxMPSRhY19pbnN0YWxsX3NoCisgICBmaQorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJElOU1RBTEwiID4mNQorLWVjaG8gIiR7RUNIT19UfSRJTlNUQUxMIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRJTlNUQUxMIiA+JjUKKytlY2hvICIke0VDSE9fVH0kSU5TVEFMTCIgPiY2OyB9CisgCisgIyBVc2UgdGVzdCAteiBiZWNhdXNlIFN1bk9TNCBzaCBtaXNoYW5kbGVzIGJyYWNlcyBpbiAke3Zhci12YWx9LgorICMgSXQgdGhpbmtzIHRoZSBmaXJzdCBjbG9zZSBicmFjZSBlbmRzIHRoZSB2YXJpYWJsZSBzdWJzdGl0dXRpb24uCitAQCAtMTY1OSw4ICsyMTQ0LDggQEAKKyAKKyB0ZXN0IC16ICIkSU5TVEFMTF9EQVRBIiAmJiBJTlNUQUxMX0RBVEE9JyR7SU5TVEFMTH0gLW0gNjQ0JworIAorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZSIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUuLi4gJEVDSE9fQyIgPiY2OyB9CisgIyBKdXN0IGluIGNhc2UKKyBzbGVlcCAxCisgZWNobyB0aW1lc3RhbXAgPiBjb25mdGVzdC5maWxlCitAQCAtMTcwMiwyMCArMjE4NywyMCBAQAorIENoZWNrIHlvdXIgc3lzdGVtIGNsb2NrIiA+JjI7fQorICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH15ZXMiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKKytlY2hvICIke0VDSE9fVH15ZXMiID4mNjsgfQorIHRlc3QgIiRwcm9ncmFtX3ByZWZpeCIgIT0gTk9ORSAmJgorLSAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0icyxeLCRwcm9ncmFtX3ByZWZpeCw7JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiCisrICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzJl4mJHByb2dyYW1fcHJlZml4JjskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKKyAjIFVzZSBhIGRvdWJsZSAkIHNvIG1ha2UgaWdub3JlcyBpdC4KKyB0ZXN0ICIkcHJvZ3JhbV9zdWZmaXgiICE9IE5PTkUgJiYKKy0gIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9InMsXCQsJHByb2dyYW1fc3VmZml4LDskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKKysgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9InMmXCQmJHByb2dyYW1fc3VmZml4JjskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKKyAjIERvdWJsZSBhbnkgXCBvciAkLiAgZWNobyBtaWdodCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCisgIyBCeSBkZWZhdWx0IHdhcyBgcyx4LHgnLCByZW1vdmUgaXQgaWYgdXNlbGVzcy4KKyBjYXQgPDxcX0FDRU9GID5jb25mdGVzdC5zZWQKKyBzL1tcXCRdLyYmL2c7cy87cyx4LHgsJC8vCisgX0FDRU9GCisgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT1gZWNobyAkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSB8IHNlZCAtZiBjb25mdGVzdC5zZWRgCistcm0gY29uZnRlc3Quc2VkCisrcm0gLWYgY29uZnRlc3Quc2VkCisgCisgIyBleHBhbmQgJGFjX2F1eF9kaXIgdG8gYW4gYWJzb2x1dGUgcGF0aAorIGFtX2F1eF9kaXI9YGNkICRhY19hdXhfZGlyICYmIHB3ZGAKK0BAIC0xNzY3LDggKzIyNTIsOCBAQAorIGRvCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BV0src2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTE3ODEsNTQgKzIyNjYsNTcgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfQVdLPSIkYWNfcHJvZyIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorIGZpCisgZmkKKyBBV0s9JGFjX2N2X3Byb2dfQVdLCisgaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRBV0siID4mNQorLWVjaG8gIiR7RUNIT19UfSRBV0siID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQVdLIiA+JjUKKytlY2hvICIke0VDSE9fVH0kQVdLIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCisrCisgICB0ZXN0IC1uICIkQVdLIiAmJiBicmVhaworIGRvbmUKKyAKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpLi4uICRFQ0hPX0MiID4mNgorLXNldCBkdW1teSAke01BS0UtbWFrZX07IGFjX21ha2U9YGVjaG8gIiQyIiB8IHNlZCAneSw6Li8rLSxfX19wXywnYAorLWlmIGV2YWwgInRlc3QgXCJcJHthY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQrc2V0fVwiID0gc2V0IjsgdGhlbgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKS4uLiAkRUNIT19DIiA+JjY7IH0KKytzZXQgeCAke01BS0UtbWFrZX07IGFjX21ha2U9YGVjaG8gIiQyIiB8IHNlZCAncy8rL3AvZzsgcy9bXmEtekEtWjAtOV9dL18vZydgCisraWYgeyBhc192YXI9YWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0OyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QubWFrZSA8PFxfQUNFT0YKKytTSEVMTCA9IC9iaW4vc2gKKyBhbGw6CistCUBlY2hvICdhY19tYWtldGVtcD0iJChNQUtFKSInCisrCUBlY2hvICdAQEAlJSU9JChNQUtFKT1AQEAlJSUnCisgX0FDRU9GCisgIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZy4uLiIsIHdoaWNoIHdvdWxkIGNvbmZ1c2UgdXMuCistZXZhbCBgJHtNQUtFLW1ha2V9IC1mIGNvbmZ0ZXN0Lm1ha2UgMj4vZGV2L251bGwgfCBncmVwIHRlbXA9YAorLWlmIHRlc3QgLW4gIiRhY19tYWtldGVtcCI7IHRoZW4KKy0gIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PXllcworLWVsc2UKKy0gIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PW5vCistZmkKKytjYXNlIGAke01BS0UtbWFrZX0gLWYgY29uZnRlc3QubWFrZSAyPi9kZXYvbnVsbGAgaW4KKysgICpAQEAlJSU9Pyo9QEBAJSUlKikKKysgICAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9eWVzOzsKKysgICopCisrICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PW5vOzsKKytlc2FjCisgcm0gLWYgY29uZnRlc3QubWFrZQorIGZpCistaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfcHJvZ19tYWtlXycke2FjX21ha2V9X3NldGBcIiA9IHllcyI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKKytpZiBldmFsIHRlc3QgXCRhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQgPSB5ZXM7IHRoZW4KKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKKytlY2hvICIke0VDSE9fVH15ZXMiID4mNjsgfQorICAgU0VUX01BS0U9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyAgIFNFVF9NQUtFPSJNQUtFPSR7TUFLRS1tYWtlfSIKKyBmaQorIAorQEAgLTE4NDMsNyArMjMzMSw3IEBACisgCisgREVQRElSPSIke2FtX19sZWFkaW5nX2RvdH1kZXBzIgorIAorLSAgICAgICAgICBhY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgZGVwZmlsZXMiCisrYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIGRlcGZpbGVzIgorIAorIAorIGFtX21ha2U9JHtNQUtFLW1ha2V9CitAQCAtMTg1Myw4ICsyMzQxLDggQEAKKyAuUEhPTlk6IGFtX19kb2l0CisgRU5ECisgIyBJZiB3ZSBkb24ndCBmaW5kIGFuIGluY2x1ZGUgZGlyZWN0aXZlLCBqdXN0IGNvbW1lbnQgb3V0IHRoZSBjb2RlLgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdHlsZSBvZiBpbmNsdWRlIHVzZWQgYnkgJGFtX21ha2UuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZSIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlLi4uICRFQ0hPX0MiID4mNjsgfQorIGFtX19pbmNsdWRlPSIjIgorIGFtX19xdW90ZT0KKyBfYW1fcmVzdWx0PW5vbmUKK0BAIC0xODgxLDE1ICsyMzY5LDE1IEBACisgZmkKKyAKKyAKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkX2FtX3Jlc3VsdCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JF9hbV9yZXN1bHQiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJF9hbV9yZXN1bHQiID4mNQorK2VjaG8gIiR7RUNIT19UfSRfYW1fcmVzdWx0IiA+JjY7IH0KKyBybSAtZiBjb25maW5jIGNvbmZtZgorIAorLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIG9yIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIHdhcyBnaXZlbi4KKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZytzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSIkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciCisrICBlbmFibGV2YWw9JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nOworK2ZpCisgCistZmk7CisgaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vOyB0aGVuCisgICBhbV9kZXBjb21wPSIkYWNfYXV4X2Rpci9kZXBjb21wIgorICAgQU1ERVBCQUNLU0xBU0g9J1wnCitAQCAtMTkwNywxMCArMjM5NSw5IEBACisgCisgCisgCistIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW11bHRpbGliIG9yIC0tZGlzYWJsZS1tdWx0aWxpYiB3YXMgZ2l2ZW4uCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW11bHRpbGliIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9tdWx0aWxpYitzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSIkZW5hYmxlX211bHRpbGliIgorLSAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgZW5hYmxldmFsPSRlbmFibGVfbXVsdGlsaWI7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgIHllcykgbXVsdGlsaWI9eWVzIDs7CisgICBubykgIG11bHRpbGliPW5vIDs7CisgICAqKSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIG11bHRpbGliIG9wdGlvbiIgPiY1CitAQCAtMTkxOSwxMSArMjQwNiwxMSBAQAorICBlc2FjCisgZWxzZQorICAgbXVsdGlsaWI9eWVzCistZmk7CistIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXRhcmdldC1vcHRzcGFjZSBvciAtLWRpc2FibGUtdGFyZ2V0LW9wdHNwYWNlIHdhcyBnaXZlbi4KKytmaQorKworKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10YXJnZXQtb3B0c3BhY2Ugd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX3RhcmdldF9vcHRzcGFjZStzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSIkZW5hYmxlX3RhcmdldF9vcHRzcGFjZSIKKy0gIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX3RhcmdldF9vcHRzcGFjZTsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgeWVzKSB0YXJnZXRfb3B0c3BhY2U9eWVzIDs7CisgICBubykgIHRhcmdldF9vcHRzcGFjZT1ubyA7OworICAgKikgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciB0YXJnZXQtb3B0c3BhY2Ugb3B0aW9uIiA+JjUKK0BAIC0xOTMyLDExICsyNDE5LDExIEBACisgIGVzYWMKKyBlbHNlCisgICB0YXJnZXRfb3B0c3BhY2U9CistZmk7CistIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1hbGxvYy1kZWJ1Z2dpbmcgb3IgLS1kaXNhYmxlLW1hbGxvYy1kZWJ1Z2dpbmcgd2FzIGdpdmVuLgorK2ZpCisrCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1hbGxvYy1kZWJ1Z2dpbmcgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX21hbGxvY19kZWJ1Z2dpbmcrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVuYWJsZXZhbD0iJGVuYWJsZV9tYWxsb2NfZGVidWdnaW5nIgorLSAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgZW5hYmxldmFsPSRlbmFibGVfbWFsbG9jX2RlYnVnZ2luZzsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgeWVzKSBtYWxsb2NfZGVidWdnaW5nPXllcyA7OworICAgbm8pICBtYWxsb2NfZGVidWdnaW5nPW5vIDs7CisgICAqKSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIG1hbGxvYy1kZWJ1Z2dpbmcgb3B0aW9uIiA+JjUKK0BAIC0xOTQ1LDExICsyNDMyLDExIEBACisgIGVzYWMKKyBlbHNlCisgICBtYWxsb2NfZGVidWdnaW5nPQorLWZpOworLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1uZXdsaWItbXVsdGl0aHJlYWQgb3IgLS1kaXNhYmxlLW5ld2xpYi1tdWx0aXRocmVhZCB3YXMgZ2l2ZW4uCisrZmkKKysKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbmV3bGliLW11bHRpdGhyZWFkIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9uZXdsaWJfbXVsdGl0aHJlYWQrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVuYWJsZXZhbD0iJGVuYWJsZV9uZXdsaWJfbXVsdGl0aHJlYWQiCistICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICBlbmFibGV2YWw9JGVuYWJsZV9uZXdsaWJfbXVsdGl0aHJlYWQ7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgIHllcykgbmV3bGliX211bHRpdGhyZWFkPXllcyA7OworICAgbm8pICBuZXdsaWJfbXVsdGl0aHJlYWQ9bm8gOzsKKyAgICopICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgbmV3bGliLW11bHRpdGhyZWFkIG9wdGlvbiIgPiY1CitAQCAtMTk1OCwxMSArMjQ0NSwxMSBAQAorICBlc2FjCisgZWxzZQorICAgbmV3bGliX211bHRpdGhyZWFkPXllcworLWZpOworLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1uZXdsaWItaWNvbnYgb3IgLS1kaXNhYmxlLW5ld2xpYi1pY29udiB3YXMgZ2l2ZW4uCisrZmkKKysKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbmV3bGliLWljb252IHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9uZXdsaWJfaWNvbnYrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVuYWJsZXZhbD0iJGVuYWJsZV9uZXdsaWJfaWNvbnYiCistICBpZiB0ZXN0ICIke25ld2xpYl9pY29uditzZXR9IiAhPSBzZXQ7IHRoZW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX25ld2xpYl9pY29udjsgaWYgdGVzdCAiJHtuZXdsaWJfaWNvbnYrc2V0fSIgIT0gc2V0OyB0aGVuCisgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgeWVzKSBuZXdsaWJfaWNvbnY9eWVzIDs7CisgICAgICBubykgIG5ld2xpYl9pY29udj1ubyA7OworQEAgLTE5NzMsMTEgKzI0NjAsMTEgQEAKKyAgZmkKKyBlbHNlCisgICBuZXdsaWJfaWNvbnY9JHtuZXdsaWJfaWNvbnZ9CistZmk7CistIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5ld2xpYi1lbGl4LWxldmVsIG9yIC0tZGlzYWJsZS1uZXdsaWItZWxpeC1sZXZlbCB3YXMgZ2l2ZW4uCisrZmkKKysKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbmV3bGliLWVsaXgtbGV2ZWwgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX25ld2xpYl9lbGl4X2xldmVsK3NldH0iID0gc2V0OyB0aGVuCistICBlbmFibGV2YWw9IiRlbmFibGVfbmV3bGliX2VsaXhfbGV2ZWwiCistICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICBlbmFibGV2YWw9JGVuYWJsZV9uZXdsaWJfZWxpeF9sZXZlbDsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgMCkgICBuZXdsaWJfZWxpeF9sZXZlbD0wIDs7CisgICAxKSAgIG5ld2xpYl9lbGl4X2xldmVsPTEgOzsKKyAgIDIpICAgbmV3bGliX2VsaXhfbGV2ZWw9MiA7OworQEAgLTE5ODksMTEgKzI0NzYsMTEgQEAKKyAgZXNhYworIGVsc2UKKyAgIG5ld2xpYl9lbGl4X2xldmVsPTAKKy1maTsKKy0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbmV3bGliLWlvLWZsb2F0IG9yIC0tZGlzYWJsZS1uZXdsaWItaW8tZmxvYXQgd2FzIGdpdmVuLgorK2ZpCisrCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5ld2xpYi1pby1mbG9hdCB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfbmV3bGliX2lvX2Zsb2F0K3NldH0iID0gc2V0OyB0aGVuCistICBlbmFibGV2YWw9IiRlbmFibGVfbmV3bGliX2lvX2Zsb2F0IgorLSAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgZW5hYmxldmFsPSRlbmFibGVfbmV3bGliX2lvX2Zsb2F0OyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICB5ZXMpIG5ld2xpYl9pb19mbG9hdD15ZXMgOzsKKyAgIG5vKSAgbmV3bGliX2lvX2Zsb2F0PW5vIDs7CisgICAqKSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIG5ld2xpYi1pby1mbG9hdCBvcHRpb24iID4mNQorQEAgLTIwMDIsMTEgKzI0ODksMTEgQEAKKyAgZXNhYworIGVsc2UKKyAgIG5ld2xpYl9pb19mbG9hdD15ZXMKKy1maTsKKy0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbmV3bGliLXN1cHBsaWVkLXN5c2NhbGxzIG9yIC0tZGlzYWJsZS1uZXdsaWItc3VwcGxpZWQtc3lzY2FsbHMgd2FzIGdpdmVuLgorK2ZpCisrCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5ld2xpYi1zdXBwbGllZC1zeXNjYWxscyB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfbmV3bGliX3N1cHBsaWVkX3N5c2NhbGxzK3NldH0iID0gc2V0OyB0aGVuCistICBlbmFibGV2YWw9IiRlbmFibGVfbmV3bGliX3N1cHBsaWVkX3N5c2NhbGxzIgorLSAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgZW5hYmxldmFsPSRlbmFibGVfbmV3bGliX3N1cHBsaWVkX3N5c2NhbGxzOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICB5ZXMpIG5ld2xpYl9tYXlfc3VwcGx5X3N5c2NhbGxzPXllcyA7OworICAgbm8pICBuZXdsaWJfbWF5X3N1cHBseV9zeXNjYWxscz1ubyA7OworICAgKikgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciBuZXdsaWItc3VwcGxpZWQtc3lzY2FsbHMgb3B0aW9uIiA+JjUKK0BAIC0yMDE1LDcgKzI1MDIsOCBAQAorICBlc2FjCisgZWxzZQorICAgbmV3bGliX21heV9zdXBwbHlfc3lzY2FsbHM9eWVzCistZmk7CisrZmkKKysKKyAKKyAKKyBpZiB0ZXN0IHgke25ld2xpYl9tYXlfc3VwcGx5X3N5c2NhbGxzfSA9IHh5ZXM7IHRoZW4KK0BAIC0yMDQxLDI2ICsyNTI5LDQxIEBACisgZmkKKyAKKyAKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZS4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X2hvc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgYWNfY3ZfaG9zdF9hbGlhcz0kaG9zdF9hbGlhcworLXRlc3QgLXogIiRhY19jdl9ob3N0X2FsaWFzIiAmJgorLSAgYWNfY3ZfaG9zdF9hbGlhcz0kYWNfY3ZfYnVpbGRfYWxpYXMKKy1hY19jdl9ob3N0PWAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfaG9zdF9hbGlhc2AgfHwKKy0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRhY19jb25maWdfc3ViICRhY19jdl9ob3N0X2FsaWFzIGZhaWxlZCIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogJGFjX2NvbmZpZ19zdWIgJGFjX2N2X2hvc3RfYWxpYXMgZmFpbGVkIiA+JjI7fQorKyAgaWYgdGVzdCAieCRob3N0X2FsaWFzIiA9IHg7IHRoZW4KKysgIGFjX2N2X2hvc3Q9JGFjX2N2X2J1aWxkCisrZWxzZQorKyAgYWNfY3ZfaG9zdD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkaG9zdF9hbGlhc2AgfHwKKysgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGhvc3RfYWxpYXMgZmFpbGVkIiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkaG9zdF9hbGlhcyBmYWlsZWQiID4mMjt9CisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrZmkKKyAKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9ob3N0IiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaG9zdCIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaG9zdCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hvc3QiID4mNjsgfQorK2Nhc2UgJGFjX2N2X2hvc3QgaW4KKysqLSotKikgOzsKKysqKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBob3N0IiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBob3N0IiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisrZXNhYworIGhvc3Q9JGFjX2N2X2hvc3QKKy1ob3N0X2NwdT1gZWNobyAkYWNfY3ZfaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCistaG9zdF92ZW5kb3I9YGVjaG8gJGFjX2N2X2hvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYAorLWhvc3Rfb3M9YGVjaG8gJGFjX2N2X2hvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKKytzZXQgeCAkYWNfY3ZfaG9zdAorK3NoaWZ0CisraG9zdF9jcHU9JDEKKytob3N0X3ZlbmRvcj0kMgorK3NoaWZ0OyBzaGlmdAorKyMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorKyMgZXhjZXB0IHdpdGggb2xkIHNoZWxsczoKKytob3N0X29zPSQqCisrSUZTPSRhY19zYXZlX0lGUworK2Nhc2UgJGhvc3Rfb3MgaW4gKlwgKikgaG9zdF9vcz1gZWNobyAiJGhvc3Rfb3MiIHwgc2VkICdzLyAvLS9nJ2A7OyBlc2FjCisgCisgCisgCitAQCAtMjExMyw4ICsyNjE2LDggQEAKKyAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19TVFJJUCtzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMjEyNywzMiArMjYzMCwzNCBAQAorICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICAgYWNfY3ZfcHJvZ19TVFJJUD0iJHthY190b29sX3ByZWZpeH1zdHJpcCIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorIGZpCisgZmkKKyBTVFJJUD0kYWNfY3ZfcHJvZ19TVFJJUAorIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRTVFJJUCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JFNUUklQIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFNUUklQIiA+JjUKKytlY2hvICIke0VDSE9fVH0kU1RSSVAiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKysKKyBmaQorIGlmIHRlc3QgLXogIiRhY19jdl9wcm9nX1NUUklQIjsgdGhlbgorICAgYWNfY3RfU1RSSVA9JFNUUklQCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgc3RyaXA7IGFjX3dvcmQ9JDIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9TVFJJUCtzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMjE2NSwyNyArMjY3MCw0MSBAQAorICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0ic3RyaXAiCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKy0gIHRlc3QgLXogIiRhY19jdl9wcm9nX2FjX2N0X1NUUklQIiAmJiBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSI6IgorIGZpCisgZmkKKyBhY19jdF9TVFJJUD0kYWNfY3ZfcHJvZ19hY19jdF9TVFJJUAorIGlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9TVFJJUCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N0X1NUUklQIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3RfU1RSSVAiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKy0gIFNUUklQPSRhY19jdF9TVFJJUAorKyAgaWYgdGVzdCAieCRhY19jdF9TVFJJUCIgPSB4OyB0aGVuCisrICAgIFNUUklQPSI6IgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgU1RSSVA9JGFjX2N0X1NUUklQCisrICBmaQorIGVsc2UKKyAgIFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKKyBmaQorQEAgLTIyMjAsOCArMjczOSw4IEBACisgCisgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSBnY2M7IGFjX3dvcmQ9JDIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMjIzNCwzMCArMjc1MywzMiBAQAorICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICAgYWNfY3ZfcHJvZ19DQz0iZ2NjIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKyBmaQorIENDPSRhY19jdl9wcm9nX0NDCisgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kQ0MiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQorK2VjaG8gIiR7RUNIT19UfSRDQyIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorIAorKworIGRlcGNjPSIkQ0MiICAgYW1fY29tcGlsZXJfbGlzdD0KKyAKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZStzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMjM0Niw4ICsyODY3LDggQEAKKyBmaQorIAorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNjsgfQorIENDREVQTU9ERT1kZXBtb2RlPSRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZQorIAorIAorQEAgLTIzNjYsOCArMjg4Nyw4IEBACisgaWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15IGNjOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTIzODEsNyArMjkwMiw3IEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBpZiB0ZXN0ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA9ICIvdXNyL3VjYi9jYyI7IHRoZW4KKyAgICAgICAgYWNfcHJvZ19yZWplY3RlZD15ZXMKKyAgICAgICAgY29udGludWUKK0BAIC0yMzkyLDYgKzI5MTMsNyBAQAorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKyBpZiB0ZXN0ICRhY19wcm9nX3JlamVjdGVkID0geWVzOyB0aGVuCisgICAjIFdlIGZvdW5kIGEgYm9nb24gaW4gdGhlIHBhdGgsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciB1c2UgaXQuCitAQCAtMjQwOSwyMCArMjkzMSwyMSBAQAorIGZpCisgQ0M9JGFjX2N2X3Byb2dfQ0MKKyBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRDQyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JENDIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCisrCisgICB0ZXN0IC16ICIkQ0MiICYmIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIGFjY2VwdGFibGUgY2MgZm91bmQgaW4gXCRQQVRIIiA+JjUKKyBlY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlIGNjIGZvdW5kIGluIFwkUEFUSCIgPiYyO30KKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyBmaQorIAorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyBHTlUgQyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyBHTlUgQy4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyBHTlUgQyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyBHTlUgQy4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X2NfY29tcGlsZXJfZ251K3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0yNDQyLDggKzI5NjUsOCBAQAorICAgYWNfY3ZfY19jb21waWxlcl9nbnU9bm8KKyBmaQorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNjsgfQorIAorIGlmIHRlc3QgJGFjX2N2X2NfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCisgICBHQ0M9eWVzCitAQCAtMjQ1MiwxMyArMjk3NSwxNiBAQAorICAgQ0ZMQUdTPQorICAgYWNfdGVzdF9DRkxBR1M9JHtDRkxBR1Mrc2V0fQorIGFjX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKy1DRkxBR1M9Ii1nIgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWcuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19nK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKyAgYWNfc2F2ZV9jX3dlcnJvcl9mbGFnPSRhY19jX3dlcnJvcl9mbGFnCisrICAgYWNfY193ZXJyb3JfZmxhZz15ZXMKKysgICBhY19jdl9wcm9nX2NjX2c9bm8KKysgICBDRkxBR1M9Ii1nIgorKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTI0NzQsMzggKzMwMDAsMTE4IEBACisgfQorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKyAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgICBybSAtZiBjb25mdGVzdC5lcjEKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorKyAgYWNfY3ZfcHJvZ19jY19nPXllcworK2Vsc2UKKysgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlDRkxBR1M9IiIKKysgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworK2ludAorK21haW4gKCkKKyt7CisrCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgIDoKKytlbHNlCisrICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysJYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCisrCSBDRkxBR1M9Ii1nIgorKwkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKytpbnQKKyttYWluICgpCisreworKworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICAgYWNfY3ZfcHJvZ19jY19nPXllcworIGVsc2UKKyAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLWFjX2N2X3Byb2dfY2NfZz1ubworKworK2ZpCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysgICBhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2NjX2ciID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfZyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfY2NfZyIgPiY2OyB9CisgaWYgdGVzdCAiJGFjX3Rlc3RfQ0ZMQUdTIiA9IHNldDsgdGhlbgorICAgQ0ZMQUdTPSRhY19zYXZlX0NGTEFHUworIGVsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jY19nID0geWVzOyB0aGVuCitAQCAtMjUzNyw4ICszMTQzLDggQEAKKyBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFzOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTI1NTEsMzIgKzMxNTcsMzQgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfQVM9IiR7YWNfdG9vbF9wcmVmaXh9YXMiCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgQVM9JGFjX2N2X3Byb2dfQVMKKyBpZiB0ZXN0IC1uICIkQVMiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQVMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRBUyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRBUyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JEFTIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCisrCisgZmkKKyBpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUyI7IHRoZW4KKyAgIGFjX2N0X0FTPSRBUworICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhcyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15IGFzOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTI1ODksMjYgKzMxOTcsNDEgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfYWNfY3RfQVM9ImFzIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKyBmaQorIGFjX2N0X0FTPSRhY19jdl9wcm9nX2FjX2N0X0FTCisgaWYgdGVzdCAtbiAiJGFjX2N0X0FTIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0FTIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3RfQVMiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQVMiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdF9BUyIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorLSAgQVM9JGFjX2N0X0FTCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0FTIiA9IHg7IHRoZW4KKysgICAgQVM9IiIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIEFTPSRhY19jdF9BUworKyAgZmkKKyBlbHNlCisgICBBUz0iJGFjX2N2X3Byb2dfQVMiCisgZmkKK0BAIC0yNjE2LDggKzMyMzksOCBAQAorIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUitzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMjYzMCwzMiArMzI1MywzNCBAQAorICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorIGZpCisgZmkKKyBBUj0kYWNfY3ZfcHJvZ19BUgorIGlmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRBUiIgPiY1CistZWNobyAiJHtFQ0hPX1R9JEFSIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJEFSIiA+JjUKKytlY2hvICIke0VDSE9fVH0kQVIiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKysKKyBmaQorIGlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FSIjsgdGhlbgorICAgYWNfY3RfQVI9JEFSCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMjY2OCwyNiArMzI5Myw0MSBAQAorICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgYWNfY3RfQVI9JGFjX2N2X3Byb2dfYWNfY3RfQVIKKyBpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQVIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdF9BUiIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9BUiIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0FSIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCistICBBUj0kYWNfY3RfQVIKKysgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorKyAgICBBUj0iIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgQVI9JGFjX2N0X0FSCisrICBmaQorIGVsc2UKKyAgIEFSPSIkYWNfY3ZfcHJvZ19BUiIKKyBmaQorQEAgLTI2OTUsOCArMzMzNSw4IEBACisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9cmFubGliOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0yNzA5LDMyICszMzQ5LDM0IEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX1JBTkxJQj0iJHthY190b29sX3ByZWZpeH1yYW5saWIiCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgUkFOTElCPSRhY19jdl9wcm9nX1JBTkxJQgorIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkUkFOTElCIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kUkFOTElCIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFJBTkxJQiIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JFJBTkxJQiIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorKworIGZpCisgaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkFOTElCIjsgdGhlbgorICAgYWNfY3RfUkFOTElCPSRSQU5MSUIKKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0yNzQ3LDI3ICszMzg5LDQxIEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0icmFubGliIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCistICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIiICYmIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSI6IgorIGZpCisgZmkKKyBhY19jdF9SQU5MSUI9JGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCCisgaWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9SQU5MSUIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdF9SQU5MSUIiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3RfUkFOTElCIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCistICBSQU5MSUI9JGFjX2N0X1JBTkxJQgorKyAgaWYgdGVzdCAieCRhY19jdF9SQU5MSUIiID0geDsgdGhlbgorKyAgICBSQU5MSUI9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBSQU5MSUI9JGFjX2N0X1JBTkxJQgorKyAgZmkKKyBlbHNlCisgICBSQU5MSUI9IiRhY19jdl9wcm9nX1JBTkxJQiIKKyBmaQorQEAgLTI3NzUsOCArMzQzMSw4IEBACisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXJlYWRlbGYiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXJlYWRlbGY7IGFjX3dvcmQ9JDIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19SRUFERUxGK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0yNzg5LDMyICszNDQ1LDM0IEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX1JFQURFTEY9IiR7YWNfdG9vbF9wcmVmaXh9cmVhZGVsZiIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorIGZpCisgZmkKKyBSRUFERUxGPSRhY19jdl9wcm9nX1JFQURFTEYKKyBpZiB0ZXN0IC1uICIkUkVBREVMRiI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRSRUFERUxGIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kUkVBREVMRiIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRSRUFERUxGIiA+JjUKKytlY2hvICIke0VDSE9fVH0kUkVBREVMRiIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorKworIGZpCisgaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkVBREVMRiI7IHRoZW4KKyAgIGFjX2N0X1JFQURFTEY9JFJFQURFTEYKKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicmVhZGVsZiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15IHJlYWRlbGY7IGFjX3dvcmQ9JDIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9SRUFERUxGK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0yODI3LDI3ICszNDg1LDQxIEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX2FjX2N0X1JFQURFTEY9InJlYWRlbGYiCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKy0gIHRlc3QgLXogIiRhY19jdl9wcm9nX2FjX2N0X1JFQURFTEYiICYmIGFjX2N2X3Byb2dfYWNfY3RfUkVBREVMRj0iOiIKKyBmaQorIGZpCisgYWNfY3RfUkVBREVMRj0kYWNfY3ZfcHJvZ19hY19jdF9SRUFERUxGCisgaWYgdGVzdCAtbiAiJGFjX2N0X1JFQURFTEYiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfUkVBREVMRiIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N0X1JFQURFTEYiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfUkVBREVMRiIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N0X1JFQURFTEYiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKy0gIFJFQURFTEY9JGFjX2N0X1JFQURFTEYKKysgIGlmIHRlc3QgIngkYWNfY3RfUkVBREVMRiIgPSB4OyB0aGVuCisrICAgIFJFQURFTEY9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBSRUFERUxGPSRhY19jdF9SRUFERUxGCisrICBmaQorIGVsc2UKKyAgIFJFQURFTEY9IiRhY19jdl9wcm9nX1JFQURFTEYiCisgZmkKK0BAIC0yODY2LDggKzM1MzgsOCBAQAorICMgU1ZSNCAvdXNyL3VjYi9pbnN0YWxsLCB3aGljaCB0cmllcyB0byB1c2UgdGhlIG5vbmV4aXN0ZW50IGdyb3VwICJzdGFmZiIKKyAjIE9TLzIncyBzeXN0ZW0gaW5zdGFsbCwgd2hpY2ggaGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc2VtYW50aWMKKyAjIC4vaW5zdGFsbCwgd2hpY2ggY2FuIGJlIGVycm9uZW91c2x5IGNyZWF0ZWQgYnkgbWFrZSBmcm9tIC4vaW5zdGFsbC5zaC4KKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0IC16ICIkSU5TVEFMTCI7IHRoZW4KKyBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK0BAIC0yODg5LDcgKzM1NjEsNyBAQAorICAgICAjIGJ5IGRlZmF1bHQuCisgICAgIGZvciBhY19wcm9nIGluIGdpbnN0YWxsIHNjb2luc3QgaW5zdGFsbDsgZG8KKyAgICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0JaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCI7IHRoZW4KKysJaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorIAkgIGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisgCSAgICBncmVwIGRzcG1zZyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgCSAgICAjIEFJWCBpbnN0YWxsLiAgSXQgaGFzIGFuIGluY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZlbnRpb24uCitAQCAtMjkwOCwyMSArMzU4MCwyMiBAQAorICAgICA7OworIGVzYWMKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorIAorIGZpCisgICBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbgorICAgICBJTlNUQUxMPSRhY19jdl9wYXRoX2luc3RhbGwKKyAgIGVsc2UKKy0gICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgV2UgZG9uJ3QgY2FjaGUgYQorLSAgICAjIHBhdGggZm9yIElOU1RBTEwgd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKysgICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgRG9uJ3QgY2FjaGUgYQorKyAgICAjIHZhbHVlIGZvciBJTlNUQUxMIHdpdGhpbiBhIHNvdXJjZSBkaXJlY3RvcnksIGJlY2F1c2UgdGhhdCB3aWxsCisgICAgICMgYnJlYWsgb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhlIGNhY2hlIGlmIHRoYXQgZGlyZWN0b3J5IGlzCistICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHBhdGggaXMgcmVsYXRpdmUuCisrICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVsYXRpdmUgbmFtZS4KKyAgICAgSU5TVEFMTD0kYWNfaW5zdGFsbF9zaAorICAgZmkKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRJTlNUQUxMIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kSU5TVEFMTCIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkSU5TVEFMTCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JElOU1RBTEwiID4mNjsgfQorIAorICMgVXNlIHRlc3QgLXogYmVjYXVzZSBTdW5PUzQgc2ggbWlzaGFuZGxlcyBicmFjZXMgaW4gJHt2YXItdmFsfS4KKyAjIEl0IHRoaW5rcyB0aGUgZmlyc3QgY2xvc2UgYnJhY2UgZW5kcyB0aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9uLgorQEAgLTI5MzYsMTcgKzM2MDksMTcgQEAKKyAjIEhhY2sgdG8gZW5zdXJlIHRoYXQgSU5TVEFMTCB3b24ndCBiZSBzZXQgdG8gIi4uLyIgd2l0aCBhdXRvY29uZiAyLjEzLiAgKi8KKyBhY19naXZlbl9JTlNUQUxMPSRJTlNUQUxMCisgCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzLi4uICRFQ0hPX0MiID4mNgorLSAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlIG9yIC0tZGlzYWJsZS1tYWludGFpbmVyLW1vZGUgd2FzIGdpdmVuLgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzLi4uICRFQ0hPX0MiID4mNjsgfQorKyAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9tYWludGFpbmVyX21vZGUrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVuYWJsZXZhbD0iJGVuYWJsZV9tYWludGFpbmVyX21vZGUiCistICBVU0VfTUFJTlRBSU5FUl9NT0RFPSRlbmFibGV2YWwKKysgIGVuYWJsZXZhbD0kZW5hYmxlX21haW50YWluZXJfbW9kZTsgVVNFX01BSU5UQUlORVJfTU9ERT0kZW5hYmxldmFsCisgZWxzZQorICAgVVNFX01BSU5UQUlORVJfTU9ERT1ubworLWZpOworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFVTRV9NQUlOVEFJTkVSX01PREUiID4mNQorLWVjaG8gIiR7RUNIT19UfSRVU0VfTUFJTlRBSU5FUl9NT0RFIiA+JjYKKytmaQorKworKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkVVNFX01BSU5UQUlORVJfTU9ERSIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JFVTRV9NQUlOVEFJTkVSX01PREUiID4mNjsgfQorIAorIAorIGlmIHRlc3QgJFVTRV9NQUlOVEFJTkVSX01PREUgPSB5ZXM7IHRoZW4KK0BAIC0zMDY2LDY0ICszNzM5LDg5IEBACisgCisgCisgCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuLi4gJEVDSE9fQyIgPiY2CistaWYgdGVzdCAiJHtsdF9jdl9wYXRoX1NFRCtzZXR9IiA9IHNldDsgdGhlbgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuLi4gJEVDSE9fQyIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wYXRoX1NFRCtzZXR9IiA9IHNldDsgdGhlbgorKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKytlbHNlCisrICAgICAgICAgICAgYWNfc2NyaXB0PXMvYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEvYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiLworKyAgICAgZm9yIGFjX2kgaW4gMSAyIDMgNCA1IDYgNzsgZG8KKysgICAgICAgYWNfc2NyaXB0PSIkYWNfc2NyaXB0JGFzX25sJGFjX3NjcmlwdCIKKysgICAgIGRvbmUKKysgICAgIGVjaG8gIiRhY19zY3JpcHQiIHwgc2VkIDk5cSA+Y29uZnRlc3Quc2VkCisrICAgICAkYXNfdW5zZXQgYWNfc2NyaXB0IHx8IGFjX3NjcmlwdD0KKysgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic2VkIGdzZWQiIHRvIHVzZSBpbiBtc2cgb3V0cHV0CisraWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KKytzZXQgZHVtbXkgc2VkIGdzZWQ7IGFjX3Byb2dfbmFtZT0kMgorK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9TRUQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBzZWQgYW5kIGdzZWQuCistIyBUaGVuIHVzZSB0aGF0IGxpc3Qgb2Ygc2VkJ3MgYXMgb25lcyB0byB0ZXN0IGZvciB0cnVuY2F0aW9uLgorKyAgYWNfcGF0aF9TRURfZm91bmQ9ZmFsc2UKKysjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyBmb3IgYXNfZGlyIGluICRQQVRICisgZG8KKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCistICBmb3IgbHRfYWNfcHJvZyBpbiBzZWQgZ3NlZDsgZG8KKy0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICAgICAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCI7IHRoZW4KKy0gICAgICAgIGx0X2FjX3NlZF9saXN0PSIkbHRfYWNfc2VkX2xpc3QgJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCIKKy0gICAgICBmaQorLSAgICBkb25lCistICBkb25lCistZG9uZQorLUlGUz0kYXNfc2F2ZV9JRlMKKy1sdF9hY19tYXg9MAorLWx0X2FjX2NvdW50PTAKKy0jIEFkZCAvdXNyL3hwZzQvYmluL3NlZCBhcyBpdCBpcyB0eXBpY2FsbHkgZm91bmQgb24gU29sYXJpcworLSMgYWxvbmcgd2l0aCAvYmluL3NlZCB0aGF0IHRydW5jYXRlcyBvdXRwdXQuCistZm9yIGx0X2FjX3NlZCBpbiAkbHRfYWNfc2VkX2xpc3QgL3Vzci94cGc0L2Jpbi9zZWQ7IGRvCistICB0ZXN0ICEgLWYgJGx0X2FjX3NlZCAmJiBjb250aW51ZQorLSAgY2F0IC9kZXYvbnVsbCA+IGNvbmZ0ZXN0LmluCistICBsdF9hY19jb3VudD0wCistICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+Y29uZnRlc3QuaW4KKy0gICMgQ2hlY2sgZm9yIEdOVSBzZWQgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKy0gIGlmICIkbHRfYWNfc2VkIiAtLXZlcnNpb24gMj4mMSA8IC9kZXYvbnVsbCB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKy0gICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAorLSAgICBicmVhaworLSAgZmkKKy0gIHdoaWxlIHRydWU7IGRvCistICAgIGNhdCBjb25mdGVzdC5pbiBjb25mdGVzdC5pbiA+Y29uZnRlc3QudG1wCistICAgIG12IGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5pbgorLSAgICBjcCBjb25mdGVzdC5pbiBjb25mdGVzdC5ubAorLSAgICBlY2hvID4+Y29uZnRlc3QubmwKKy0gICAgJGx0X2FjX3NlZCAtZSAncy9hJC8vJyA8IGNvbmZ0ZXN0Lm5sID5jb25mdGVzdC5vdXQgfHwgYnJlYWsKKy0gICAgY21wIC1zIGNvbmZ0ZXN0Lm91dCBjb25mdGVzdC5ubCB8fCBicmVhaworLSAgICAjIDEwMDAwIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKy0gICAgdGVzdCAkbHRfYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCistICAgIGx0X2FjX2NvdW50PWBleHByICRsdF9hY19jb3VudCArIDFgCistICAgIGlmIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAkbHRfYWNfbWF4OyB0aGVuCistICAgICAgbHRfYWNfbWF4PSRsdF9hY19jb3VudAorLSAgICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKKysgIGZvciBhY19wcm9nIGluIHNlZCBnc2VkOyBkbworKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICAgIGFjX3BhdGhfU0VEPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorKyAgICB7IHRlc3QgLWYgIiRhY19wYXRoX1NFRCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfU0VEIjsgfSB8fCBjb250aW51ZQorKyAgICAjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9TRUQgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKysgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9TRUQKKytjYXNlIGAiJGFjX3BhdGhfU0VEIiAtLXZlcnNpb24gMj4mMWAgaW4KKysqR05VKikKKysgIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiIGFjX3BhdGhfU0VEX2ZvdW5kPTo7OworKyopCisrICBhY19jb3VudD0wCisrICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+ImNvbmZ0ZXN0LmluIgorKyAgd2hpbGUgOgorKyAgZG8KKysgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKysgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKysgICAgZWNobyAnJyA+PiAiY29uZnRlc3QubmwiCisrICAgICIkYWNfcGF0aF9TRUQiIC1mIGNvbmZ0ZXN0LnNlZCA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisrICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKysgICAgYWNfY291bnQ9YGV4cHIgJGFjX2NvdW50ICsgMWAKKysgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9TRURfbWF4LTB9OyB0aGVuCisrICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisrICAgICAgYWNfY3ZfcGF0aF9TRUQ9IiRhY19wYXRoX1NFRCIKKysgICAgICBhY19wYXRoX1NFRF9tYXg9JGFjX2NvdW50CisgICAgIGZpCisrICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKysgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisrICBkb25lCisrICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKKytlc2FjCisrCisrCisrICAgICRhY19wYXRoX1NFRF9mb3VuZCAmJiBicmVhayAzCisgICBkb25lCisgZG9uZQorIAorK2RvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrCisrZmkKKysKKytTRUQ9IiRhY19jdl9wYXRoX1NFRCIKKytpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgorKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSAkYWNfcHJvZ19uYW1lIGNvdWxkIGJlIGZvdW5kIGluIFwkUEFUSCIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSAkYWNfcHJvZ19uYW1lIGNvdWxkIGJlIGZvdW5kIGluIFwkUEFUSCIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyBmaQorIAorLVNFRD0kbHRfY3ZfcGF0aF9TRUQKKytlbHNlCisrICBhY19jdl9wYXRoX1NFRD0kU0VECisrZmkKKyAKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkU0VEIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kU0VEIiA+JjYKKytmaQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3BhdGhfU0VEIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfcGF0aF9TRUQiID4mNjsgfQorKyBTRUQ9IiRhY19jdl9wYXRoX1NFRCIKKysgIHJtIC1mIGNvbmZ0ZXN0LnNlZAorIAorIHRlc3QgLXogIiRTRUQiICYmIFNFRD1zZWQKKyBYc2VkPSIkU0VEIC1lIDFzL15YLy8iCitAQCAtMzE0Niw4ICszODQ0LDggQEAKKyAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hcyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXM7IGFjX3dvcmQ9JDIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUytzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMzE2MCwzMiArMzg1OCwzNCBAQAorICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICAgYWNfY3ZfcHJvZ19BUz0iJHthY190b29sX3ByZWZpeH1hcyIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorIGZpCisgZmkKKyBBUz0kYWNfY3ZfcHJvZ19BUworIGlmIHRlc3QgLW4gIiRBUyI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRBUyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JEFTIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJEFTIiA+JjUKKytlY2hvICIke0VDSE9fVH0kQVMiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKysKKyBmaQorIGlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FTIjsgdGhlbgorICAgYWNfY3RfQVM9JEFTCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFzIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgYXM7IGFjX3dvcmQ9JDIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUytzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMzE5OCwyNyArMzg5OCw0MSBAQAorICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICAgYWNfY3ZfcHJvZ19hY19jdF9BUz0iYXMiCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKy0gIHRlc3QgLXogIiRhY19jdl9wcm9nX2FjX2N0X0FTIiAmJiBhY19jdl9wcm9nX2FjX2N0X0FTPSJmYWxzZSIKKyBmaQorIGZpCisgYWNfY3RfQVM9JGFjX2N2X3Byb2dfYWNfY3RfQVMKKyBpZiB0ZXN0IC1uICIkYWNfY3RfQVMiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQVMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdF9BUyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9BUyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0FTIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCistICBBUz0kYWNfY3RfQVMKKysgIGlmIHRlc3QgIngkYWNfY3RfQVMiID0geDsgdGhlbgorKyAgICBBUz0iZmFsc2UiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBBUz0kYWNfY3RfQVMKKysgIGZpCisgZWxzZQorICAgQVM9IiRhY19jdl9wcm9nX0FTIgorIGZpCitAQCAtMzIyNiw4ICszOTQwLDggQEAKKyAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMzI0MCwzMiArMzk1NCwzNCBAQAorICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCisgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkRExMVE9PTCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JERMTFRPT0wiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkRExMVE9PTCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JERMTFRPT0wiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKysKKyBmaQorIGlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisgICBhY19jdF9ETExUT09MPSRETExUT09MCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMzI3OCwyNyArMzk5NCw0MSBAQAorICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJkbGx0b29sIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCistICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MIiAmJiBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImZhbHNlIgorIGZpCisgZmkKKyBhY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKKyBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3RfRExMVE9PTCIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3RfRExMVE9PTCIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorLSAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAorKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KKysgICAgRExMVE9PTD0iZmFsc2UiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBETExUT09MPSRhY19jdF9ETExUT09MCisrICBmaQorIGVsc2UKKyAgIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCisgZmkKK0BAIC0zMzA2LDggKzQwMzYsOCBAQAorICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW9iamR1bXA7IGFjX3dvcmQ9JDIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19PQkpEVU1QK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0zMzIwLDMyICs0MDUwLDM0IEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX09CSkRVTVA9IiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorIGZpCisgZmkKKyBPQkpEVU1QPSRhY19jdl9wcm9nX09CSkRVTVAKKyBpZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRPQkpEVU1QIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kT0JKRFVNUCIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRPQkpEVU1QIiA+JjUKKytlY2hvICIke0VDSE9fVH0kT0JKRFVNUCIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorKworIGZpCisgaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT0JKRFVNUCI7IHRoZW4KKyAgIGFjX2N0X09CSkRVTVA9JE9CSkRVTVAKKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15IG9iamR1bXA7IGFjX3dvcmQ9JDIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0zMzU4LDI3ICs0MDkwLDQxIEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9Im9iamR1bXAiCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKy0gIHRlc3QgLXogIiRhY19jdl9wcm9nX2FjX2N0X09CSkRVTVAiICYmIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0iZmFsc2UiCisgZmkKKyBmaQorIGFjX2N0X09CSkRVTVA9JGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUAorIGlmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X09CSkRVTVAiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdF9PQkpEVU1QIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X09CSkRVTVAiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdF9PQkpEVU1QIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCistICBPQkpEVU1QPSRhY19jdF9PQkpEVU1QCisrICBpZiB0ZXN0ICJ4JGFjX2N0X09CSkRVTVAiID0geDsgdGhlbgorKyAgICBPQkpEVU1QPSJmYWxzZSIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIE9CSkRVTVA9JGFjX2N0X09CSkRVTVAKKysgIGZpCisgZWxzZQorICAgT0JKRFVNUD0iJGFjX2N2X3Byb2dfT0JKRFVNUCIKKyBmaQorQEAgLTM0MzksOCArNDE4NSw4IEBACisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Z2NjOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTM0NTMsMzIgKzQxOTksMzQgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Z2NjIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKyBmaQorIENDPSRhY19jdl9wcm9nX0NDCisgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kQ0MiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQorK2VjaG8gIiR7RUNIT19UfSRDQyIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorKworIGZpCisgaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQ0MiOyB0aGVuCisgICBhY19jdF9DQz0kQ0MKKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgZ2NjOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTM0OTEsMzYgKzQyMzksNTEgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9ImdjYyIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorIGZpCisgZmkKKyBhY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NDIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3RfQ0MiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKy0gIENDPSRhY19jdF9DQworKyAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCisrICAgIENDPSIiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBDQz0kYWNfY3RfQ0MKKysgIGZpCisgZWxzZQorICAgQ0M9IiRhY19jdl9wcm9nX0NDIgorIGZpCisgCisgaWYgdGVzdCAteiAiJENDIjsgdGhlbgorLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKysgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Y2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWNjOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTM1MzMsOTggKzQyOTYsNTkgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Y2MiCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgQ0M9JGFjX2N2X3Byb2dfQ0MKKyBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRDQyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JENDIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCisrCisrICBmaQorIGZpCistaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQ0MiOyB0aGVuCistICBhY19jdF9DQz0kQ0MKKytpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgY2M7IGFjX3dvcmQ9JDIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKy1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCistICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyBlbHNlCisrICBhY19wcm9nX3JlamVjdGVkPW5vCisgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorIGZvciBhc19kaXIgaW4gJFBBVEgKKyBkbworICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iY2MiCistICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKy0gICAgYnJlYWsgMgorLSAgZmkKKy1kb25lCistZG9uZQorLQorLWZpCistZmkKKy1hY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworLWlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NDIiA+JjYKKy1lbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorLWZpCistCistICBDQz0kYWNfY3RfQ0MKKy1lbHNlCistICBDQz0iJGFjX2N2X3Byb2dfQ0MiCistZmkKKy0KKy1maQorLWlmIHRlc3QgLXogIiRDQyI7IHRoZW4KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSBjYzsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCistICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorLWVsc2UKKy0gIGFjX3Byb2dfcmVqZWN0ZWQ9bm8KKy1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCistZm9yIGFzX2RpciBpbiAkUEFUSAorLWRvCistICBJRlM9JGFzX3NhdmVfSUZTCistICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorLSAgICBpZiB0ZXN0ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA9ICIvdXNyL3VjYi9jYyI7IHRoZW4KKy0gICAgICAgYWNfcHJvZ19yZWplY3RlZD15ZXMKKy0gICAgICAgY29udGludWUKKy0gICAgIGZpCistICAgIGFjX2N2X3Byb2dfQ0M9ImNjIgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBpZiB0ZXN0ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA9ICIvdXNyL3VjYi9jYyI7IHRoZW4KKysgICAgICAgYWNfcHJvZ19yZWplY3RlZD15ZXMKKysgICAgICAgY29udGludWUKKysgICAgIGZpCisrICAgIGFjX2N2X3Byb2dfQ0M9ImNjIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCisgaWYgdGVzdCAkYWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbgorICAgIyBXZSBmb3VuZCBhIGJvZ29uIGluIHRoZSBwYXRoLCBzbyBtYWtlIHN1cmUgd2UgbmV2ZXIgdXNlIGl0LgorQEAgLTM2NDIsMjIgKzQzNjYsMjMgQEAKKyBmaQorIENDPSRhY19jdl9wcm9nX0NDCisgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kQ0MiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQorK2VjaG8gIiR7RUNIT19UfSRDQyIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorKworIGZpCisgaWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorLSAgZm9yIGFjX3Byb2cgaW4gY2wKKysgIGZvciBhY19wcm9nIGluIGNsLmV4ZQorICAgZG8KKyAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTM2NzAsMzYgKzQzOTUsMzggQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfQ0M9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKyBmaQorIENDPSRhY19jdl9wcm9nX0NDCisgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kQ0MiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQorK2VjaG8gIiR7RUNIT19UfSRDQyIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorKworICAgICB0ZXN0IC1uICIkQ0MiICYmIGJyZWFrCisgICBkb25lCisgZmkKKyBpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgICBhY19jdF9DQz0kQ0MKKy0gIGZvciBhY19wcm9nIGluIGNsCisrICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKKyBkbworICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTM3MTIsMjkgKzQ0MzksNDUgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19wcm9nIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKyBmaQorIGFjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCisgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3RfQ0MiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdF9DQyIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorKworICAgdGVzdCAtbiAiJGFjX2N0X0NDIiAmJiBicmVhaworIGRvbmUKKyAKKy0gIENDPSRhY19jdF9DQworKyAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCisrICAgIENDPSIiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBDQz0kYWNfY3RfQ0MKKysgIGZpCisgZmkKKyAKKyBmaQorQEAgLTM3NDcsMjEgKzQ0OTAsMzUgQEAKKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAKKyAjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCistZWNobyAiJGFzX21lOiRMSU5FTk86IiBcCistICAgICAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgdmVyc2lvbiIgPiY1CisrZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQorIGFjX2NvbXBpbGVyPWBzZXQgWCAkYWNfY29tcGlsZTsgZWNobyAkMmAKKy17IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlciAtLXZlcnNpb24gPC9kZXYvbnVsbCA+JjVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA8L2Rldi9udWxsID4mNSkgMj4mNQorK3sgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA+JjUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZXIgLS12ZXJzaW9uID4mNSIpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKy17IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlciAtdiA8L2Rldi9udWxsID4mNVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZXIgLXYgPC9kZXYvbnVsbCA+JjUpIDI+JjUKKyt7IChhY190cnk9IiRhY19jb21waWxlciAtdiA+JjUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZXIgLXYgPiY1IikgMj4mNQorICAgYWNfc3RhdHVzPSQ/CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorLXsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVyIC1WIDwvZGV2L251bGwgPiY1XCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlciAtViA8L2Rldi9udWxsID4mNSkgMj4mNQorK3sgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC1WID4mNSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlciAtViA+JjUiKSAyPiY1CisgICBhY19zdGF0dXM9JD8KKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9CitAQCAtMzc4Niw0NyArNDU0Myw3NyBAQAorICMgVHJ5IHRvIGNyZWF0ZSBhbiBleGVjdXRhYmxlIHdpdGhvdXQgLW8gZmlyc3QsIGRpc3JlZ2FyZCBhLm91dC4KKyAjIEl0IHdpbGwgaGVscCB1cyBkaWFnbm9zZSBicm9rZW4gY29tcGlsZXJzLCBhbmQgZmluZGluZyBvdXQgYW4gaW50dWl0aW9uCisgIyBvZiBleGVleHQuCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZS4uLiAkRUNIT19DIiA+JjY7IH0KKyBhY19saW5rX2RlZmF1bHQ9YGVjaG8gIiRhY19saW5rIiB8IHNlZCAncy8gLW8gKmNvbmZ0ZXN0W14gXSovLydgCistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua19kZWZhdWx0XCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rX2RlZmF1bHQpIDI+JjUKKysjCisrIyBMaXN0IG9mIHBvc3NpYmxlIG91dHB1dCBmaWxlcywgc3RhcnRpbmcgZnJvbSB0aGUgbW9zdCBsaWtlbHkuCisrIyBUaGUgYWxnb3JpdGhtIGlzIG5vdCByb2J1c3QgdG8ganVuayBpbiBgLicsIGhlbmNlIGdvIHRvIHdpbGRjYXJkcyAoYS4qKQorKyMgb25seSBhcyBhIGxhc3QgcmVzb3J0LiAgYi5vdXQgaXMgY3JlYXRlZCBieSBpOTYwIGNvbXBpbGVycy4KKythY19maWxlcz0nYV9vdXQuZXhlIGEuZXhlIGNvbmZ0ZXN0LmV4ZSBhLm91dCBjb25mdGVzdCBhLiogY29uZnRlc3QuKiBiLm91dCcKKysjCisrIyBUaGUgSVJJWCA2IGxpbmtlciB3cml0ZXMgaW50byBleGlzdGluZyBmaWxlcyB3aGljaCBtYXkgbm90IGJlCisrIyBleGVjdXRhYmxlLCByZXRhaW5pbmcgdGhlaXIgcGVybWlzc2lvbnMuICBSZW1vdmUgdGhlbSBmaXJzdCBzbyBhCisrIyBzdWJzZXF1ZW50IGV4ZWN1dGlvbiB0ZXN0IHdvcmtzLgorK2FjX3JtZmlsZXM9CisrZm9yIGFjX2ZpbGUgaW4gJGFjX2ZpbGVzCisrZG8KKysgIGNhc2UgJGFjX2ZpbGUgaW4KKysgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5vIHwgKi5vYmogKSA7OworKyAgICAqICkgYWNfcm1maWxlcz0iJGFjX3JtZmlsZXMgJGFjX2ZpbGUiOzsKKysgIGVzYWMKKytkb25lCisrcm0gLWYgJGFjX3JtZmlsZXMKKysKKytpZiB7IChhY190cnk9IiRhY19saW5rX2RlZmF1bHQiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKysgIChldmFsICIkYWNfbGlua19kZWZhdWx0IikgMj4mNQorICAgYWNfc3RhdHVzPSQ/CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorLSAgIyBGaW5kIHRoZSBvdXRwdXQsIHN0YXJ0aW5nIGZyb20gdGhlIG1vc3QgbGlrZWx5LiAgVGhpcyBzY2hlbWUgaXMKKy0jIG5vdCByb2J1c3QgdG8ganVuayBpbiBgLicsIGhlbmNlIGdvIHRvIHdpbGRjYXJkcyAoYS4qKSBvbmx5IGFzIGEgbGFzdAorLSMgcmVzb3J0LgorLQorLSMgQmUgY2FyZWZ1bCB0byBpbml0aWFsaXplIHRoaXMgdmFyaWFibGUsIHNpbmNlIGl0IHVzZWQgdG8gYmUgY2FjaGVkLgorLSMgT3RoZXJ3aXNlIGFuIG9sZCBjYWNoZSB2YWx1ZSBvZiBgbm8nIGxlZCB0byBgRVhFRVhUID0gbm8nIGluIGEgTWFrZWZpbGUuCistYWNfY3ZfZXhlZXh0PQorLSMgYi5vdXQgaXMgY3JlYXRlZCBieSBpOTYwIGNvbXBpbGVycy4KKy1mb3IgYWNfZmlsZSBpbiBhX291dC5leGUgYS5leGUgY29uZnRlc3QuZXhlIGEub3V0IGNvbmZ0ZXN0IGEuKiBjb25mdGVzdC4qIGIub3V0CisrICAjIEF1dG9jb25mLTIuMTMgY291bGQgc2V0IHRoZSBhY19jdl9leGVleHQgdmFyaWFibGUgdG8gYG5vJy4KKysjIFNvIGlnbm9yZSBhIHZhbHVlIG9mIGBubycsIG90aGVyd2lzZSB0aGlzIHdvdWxkIGxlYWQgdG8gYEVYRUVYVCA9IG5vJworKyMgaW4gYSBNYWtlZmlsZS4gIFdlIHNob3VsZCBub3Qgb3ZlcnJpZGUgYWNfY3ZfZXhlZXh0IGlmIGl0IHdhcyBjYWNoZWQsCisrIyBzbyB0aGF0IHRoZSB1c2VyIGNhbiBzaG9ydC1jaXJjdWl0IHRoaXMgdGVzdCBmb3IgY29tcGlsZXJzIHVua25vd24gdG8KKysjIEF1dG9jb25mLgorK2ZvciBhY19maWxlIGluICRhY19maWxlcyAnJworIGRvCisgICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWUKKyAgIGNhc2UgJGFjX2ZpbGUgaW4KKy0gICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm8gfCAqLm9iaiApCistCTs7CistICAgIGNvbmZ0ZXN0LiRhY19leHQgKQorLQkjIFRoaXMgaXMgdGhlIHNvdXJjZSBmaWxlLgorKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLm8gfCAqLm9iaiApCisgCTs7CisgICAgIFthYl0ub3V0ICkKKyAJIyBXZSBmb3VuZCB0aGUgZGVmYXVsdCBleGVjdXRhYmxlLCBidXQgZXhlZXh0PScnIGlzIG1vc3QKKyAJIyBjZXJ0YWlubHkgcmlnaHQuCisgCWJyZWFrOzsKKyAgICAgKi4qICkKKy0JYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCistCSMgRklYTUU6IEkgYmVsaWV2ZSB3ZSBleHBvcnQgYWNfY3ZfZXhlZXh0IGZvciBMaWJ0b29sLAorLQkjIGJ1dCBpdCB3b3VsZCBiZSBjb29sIHRvIGZpbmQgb3V0IGlmIGl0J3MgdHJ1ZS4gIERvZXMgYW55Ym9keQorLQkjIG1haW50YWluIExpYnRvb2w/IC0tYWtpbS4KKy0JZXhwb3J0IGFjX2N2X2V4ZWV4dAorKyAgICAgICAgaWYgdGVzdCAiJHthY19jdl9leGVleHQrc2V0fSIgPSBzZXQgJiYgdGVzdCAiJGFjX2N2X2V4ZWV4dCIgIT0gbm87CisrCXRoZW4gOjsgZWxzZQorKwkgICBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKysJZmkKKysJIyBXZSBzZXQgYWNfY3ZfZXhlZXh0IGhlcmUgYmVjYXVzZSB0aGUgbGF0ZXIgdGVzdCBmb3IgaXQgaXMgbm90CisrCSMgc2FmZTogY3Jvc3MgY29tcGlsZXJzIG1heSBub3QgYWRkIHRoZSBzdWZmaXggaWYgZ2l2ZW4gYW4gYC1vJworKwkjIGFyZ3VtZW50LCBzbyB3ZSBtYXkgbmVlZCB0byBrbm93IGl0IGF0IHRoYXQgcG9pbnQgYWxyZWFkeS4KKysJIyBFdmVuIGlmIHRoaXMgc2VjdGlvbiBsb29rcyBjcnVmdHk6IGl0IGhhcyB0aGUgYWR2YW50YWdlIG9mCisrCSMgYWN0dWFsbHkgd29ya2luZy4KKyAJYnJlYWs7OworICAgICAqICkKKyAJYnJlYWs7OworICAgZXNhYworIGRvbmUKKyt0ZXN0ICIkYWNfY3ZfZXhlZXh0IiA9IG5vICYmIGFjX2N2X2V4ZWV4dD0KKysKKyBlbHNlCisrICBhY19maWxlPScnCisrZmkKKysKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19maWxlIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfZmlsZSIgPiY2OyB9CisraWYgdGVzdCAteiAiJGFjX2ZpbGUiOyB0aGVuCisgICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKK0BAIC0zODM4LDE5ICs0NjI1LDIxIEBACisgZmkKKyAKKyBhY19leGVleHQ9JGFjX2N2X2V4ZWV4dAorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19maWxlIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfZmlsZSIgPiY2CisgCistIyBDaGVjayB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCisrIyBDaGVjayB0aGF0IHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKKyAjIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3Jrcy4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MuLi4gJEVDSE9fQyIgPiY2OyB9CisgIyBGSVhNRTogVGhlc2UgY3Jvc3MgY29tcGlsZXIgaGFja3Mgc2hvdWxkIGJlIHJlbW92ZWQgZm9yIEF1dG9jb25mIDMuMAorICMgSWYgbm90IGNyb3NzIGNvbXBpbGluZywgY2hlY2sgdGhhdCB3ZSBjYW4gcnVuIGEgc2ltcGxlIHByb2dyYW0uCisgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0geWVzOyB0aGVuCisgICBpZiB7IGFjX3RyeT0nLi8kYWNfZmlsZScKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICB7IChjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgICBhY19zdGF0dXM9JD8KKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitAQCAtMzg2OSwyMiArNDY1OCwyNyBAQAorICAgICBmaQorICAgZmkKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KKyAKKyBybSAtZiBhLm91dCBhLmV4ZSBjb25mdGVzdCRhY19jdl9leGVleHQgYi5vdXQKKyBhY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQorLSMgQ2hlY2sgdGhlIGNvbXBpbGVyIHByb2R1Y2VzIGV4ZWN1dGFibGVzIHdlIGNhbiBydW4uICBJZiBub3QsIGVpdGhlcgorKyMgQ2hlY2sgdGhhdCB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCisgIyB0aGUgY29tcGlsZXIgaXMgYnJva2VuLCBvciB3ZSBjcm9zcyBjb21waWxlLgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmciID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nLi4uICRFQ0hPX0MiID4mNgorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRjcm9zc19jb21waWxpbmciID4mNQorLWVjaG8gIiR7RUNIT19UfSRjcm9zc19jb21waWxpbmciID4mNgorLQorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMuLi4gJEVDSE9fQyIgPiY2CistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmcuLi4gJEVDSE9fQyIgPiY2OyB9CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkY3Jvc3NfY29tcGlsaW5nIiA+JjUKKytlY2hvICIke0VDSE9fVH0kY3Jvc3NfY29tcGlsaW5nIiA+JjY7IH0KKysKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMuLi4gJEVDSE9fQyIgPiY2OyB9CisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICAgYWNfc3RhdHVzPSQ/CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorQEAgLTM4OTUsOSArNDY4OSw4IEBACisgZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGNvbmZ0ZXN0Lio7IGRvCisgICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWUKKyAgIGNhc2UgJGFjX2ZpbGUgaW4KKy0gICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm8gfCAqLm9iaiApIDs7CisrICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICoubyB8ICoub2JqICkgOzsKKyAgICAgKi4qICkgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCistCSAgZXhwb3J0IGFjX2N2X2V4ZWV4dAorIAkgIGJyZWFrOzsKKyAgICAgKiApIGJyZWFrOzsKKyAgIGVzYWMKK0BAIC0zOTExLDE0ICs0NzA0LDE0IEBACisgZmkKKyAKKyBybSAtZiBjb25mdGVzdCRhY19jdl9leGVleHQKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZXhlZXh0IiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZXhlZXh0IiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9leGVleHQiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdl9leGVleHQiID4mNjsgfQorIAorIHJtIC1mIGNvbmZ0ZXN0LiRhY19leHQKKyBFWEVFWFQ9JGFjX2N2X2V4ZWV4dAorIGFjX2V4ZWV4dD0kRVhFRVhUCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3Zfb2JqZXh0K3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0zOTM4LDE0ICs0NzMxLDIwIEBACisgfQorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqCistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKy0gIGZvciBhY19maWxlIGluIGAobHMgY29uZnRlc3QubyBjb25mdGVzdC5vYmo7IGxzIGNvbmZ0ZXN0LiopIDI+L2Rldi9udWxsYDsgZG8KKysgIGZvciBhY19maWxlIGluIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqIGNvbmZ0ZXN0Lio7IGRvCisrICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWU7CisgICBjYXNlICRhY19maWxlIGluCistICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnICkgOzsKKysgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mICkgOzsKKyAgICAgKikgYWNfY3Zfb2JqZXh0PWBleHByICIkYWNfZmlsZSIgOiAnLipcLlwoLipcKSdgCisgICAgICAgIGJyZWFrOzsKKyAgIGVzYWMKK0BAIC0zOTYzLDEyICs0NzYyLDEyIEBACisgCisgcm0gLWYgY29uZnRlc3QuJGFjX2N2X29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfb2JqZXh0IiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3Zfb2JqZXh0IiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9vYmpleHQiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdl9vYmpleHQiID4mNjsgfQorIE9CSkVYVD0kYWNfY3Zfb2JqZXh0CisgYWNfb2JqZXh0PSRPQkpFWFQKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlci4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfY19jb21waWxlcl9nbnUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTM5OTEsNTAgKzQ3OTAsNDkgQEAKKyB9CisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgIGFjX2NvbXBpbGVyX2dudT15ZXMKKyBlbHNlCisgICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKy1hY19jb21waWxlcl9nbnU9bm8KKysJYWNfY29tcGlsZXJfZ251PW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgYWNfY3ZfY19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorIAorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNjsgfQorIEdDQz1gdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzICYmIGVjaG8geWVzYAorIGFjX3Rlc3RfQ0ZMQUdTPSR7Q0ZMQUdTK3NldH0KKyBhY19zYXZlX0NGTEFHUz0kQ0ZMQUdTCistQ0ZMQUdTPSItZyIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWciID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZy4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfZytzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysgIGFjX3NhdmVfY193ZXJyb3JfZmxhZz0kYWNfY193ZXJyb3JfZmxhZworKyAgIGFjX2Nfd2Vycm9yX2ZsYWc9eWVzCisrICAgYWNfY3ZfcHJvZ19jY19nPW5vCisrICAgQ0ZMQUdTPSItZyIKKysgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00MDUwLDM4ICs0ODQ4LDExOCBAQAorIH0KKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICAgcm0gLWYgY29uZnRlc3QuZXIxCisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgIGFjX2N2X3Byb2dfY2NfZz15ZXMKKytlbHNlCisrICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysJQ0ZMQUdTPSIiCisrICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKytpbnQKKyttYWluICgpCisreworKworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisrICA6CisrZWxzZQorKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrCWFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZworKwkgQ0ZMQUdTPSItZyIKKysJIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgIGFjX2N2X3Byb2dfY2NfZz15ZXMKKyBlbHNlCisgICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKy1hY19jdl9wcm9nX2NjX2c9bm8KKysKKytmaQorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2ZpCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrICAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19nIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19jY19nIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2NjX2ciID4mNjsgfQorIGlmIHRlc3QgIiRhY190ZXN0X0NGTEFHUyIgPSBzZXQ7IHRoZW4KKyAgIENGTEFHUz0kYWNfc2F2ZV9DRkxBR1MKKyBlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY2NfZyA9IHllczsgdGhlbgorQEAgLTQwOTcsMTIgKzQ5NzUsMTIgQEAKKyAgICAgQ0ZMQUdTPQorICAgZmkKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgQU5TSSBDIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBBTlNJIEMuLi4gJEVDSE9fQyIgPiY2CistaWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4KKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OSIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OS4uLiAkRUNIT19DIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfYzg5K3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGFjX2N2X3Byb2dfY2Nfc3RkYz1ubworKyAgYWNfY3ZfcHJvZ19jY19jODk9bm8KKyBhY19zYXZlX0NDPSRDQworIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGNvbmZkZWZzLmguICAqLworQEAgLTQxMzYsMTIgKzUwMTQsMTcgQEAKKyAvKiBPU0YgNC4wIENvbXBhcSBjYyBpcyBzb21lIHNvcnQgb2YgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdC4gIEl0IGhhcworICAgIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIHN0dWZmLCBidXQgbm90ICdceEhIJyBoZXggY2hhcmFjdGVyIGNvbnN0YW50cy4KKyAgICBUaGVzZSBkb24ndCBwcm92b2tlIGFuIGVycm9yIHVuZm9ydHVuYXRlbHksIGluc3RlYWQgYXJlIHNpbGVudGx5IHRyZWF0ZWQKKy0gICBhcyAneCcuICBUaGUgZm9sbG93aW5nIGluZHVjZXMgYW4gZXJyb3IsIHVudGlsIC1zdGQxIGlzIGFkZGVkIHRvIGdldAorKyAgIGFzICd4Jy4gIFRoZSBmb2xsb3dpbmcgaW5kdWNlcyBhbiBlcnJvciwgdW50aWwgLXN0ZCBpcyBhZGRlZCB0byBnZXQKKyAgICBwcm9wZXIgQU5TSSBtb2RlLiAgQ3VyaW91c2x5ICdceDAwJyE9J3gnIGFsd2F5cyBjb21lcyBvdXQgdHJ1ZSwgZm9yIGFuCisgICAgYXJyYXkgc2l6ZSBhdCBsZWFzdC4gIEl0J3MgbmVjZXNzYXJ5IHRvIHdyaXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5nCistICAgdGhhdCdzIHRydWUgb25seSB3aXRoIC1zdGQxLiAgKi8KKysgICB0aGF0J3MgdHJ1ZSBvbmx5IHdpdGggLXN0ZC4gICovCisgaW50IG9zZjRfY2NfYXJyYXkgWydceDAwJyA9PSAwID8gMSA6IC0xXTsKKyAKKysvKiBJQk0gQyA2IGZvciBBSVggaXMgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdCwgYnV0IGl0IHJlcGxhY2VzIG1hY3JvIHBhcmFtZXRlcnMKKysgICBpbnNpZGUgc3RyaW5ncyBhbmQgY2hhcmFjdGVyIGNvbnN0YW50cy4gICovCisrI2RlZmluZSBGT08oeCkgJ3gnCisraW50IHhsYzZfY2NfYXJyYXlbRk9PKGEpID09ICd4JyA/IDEgOiAtMV07CisrCisgaW50IHRlc3QgKGludCBpLCBkb3VibGUgeCk7Cisgc3RydWN0IHMxIHtpbnQgKCpmKSAoaW50IGEpO307Cisgc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307CitAQCAtNDE1NiwyMDUgKzUwMzksNTcgQEAKKyAgIHJldHVybiAwOworIH0KKyBfQUNFT0YKKy0jIERvbid0IHRyeSBnY2MgLWFuc2k7IHRoYXQgdHVybnMgb2ZmIHVzZWZ1bCBleHRlbnNpb25zIGFuZAorLSMgYnJlYWtzIHNvbWUgc3lzdGVtcycgaGVhZGVyIGZpbGVzLgorLSMgQUlYCQkJLXFsYW5nbHZsPWFuc2kKKy0jIFVsdHJpeCBhbmQgT1NGLzEJLXN0ZDEKKy0jIEhQLVVYIDEwLjIwIGFuZCBsYXRlcgktQWUKKy0jIEhQLVVYIG9sZGVyIHZlcnNpb25zCS1BYSAtRF9IUFVYX1NPVVJDRQorLSMgU1ZSNAkJCS1YYyAtRF9fRVhURU5TSU9OU19fCistZm9yIGFjX2FyZyBpbiAiIiAtcWxhbmdsdmw9YW5zaSAtc3RkMSAtQWUgIi1BYSAtRF9IUFVYX1NPVVJDRSIgIi1YYyAtRF9fRVhURU5TSU9OU19fIgorK2ZvciBhY19hcmcgaW4gJycgLXFsYW5nbHZsPWV4dGM4OSAtcWxhbmdsdmw9YW5zaSAtc3RkIFwKKysJLUFlICItQWEgLURfSFBVWF9TT1VSQ0UiICItWGMgLURfX0VYVEVOU0lPTlNfXyIKKyBkbworICAgQ0M9IiRhY19zYXZlX0NDICRhY19hcmciCisgICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICAgcm0gLWYgY29uZnRlc3QuZXIxCisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKy0gIGFjX2N2X3Byb2dfY2Nfc3RkYz0kYWNfYXJnCistYnJlYWsKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorKyAgYWNfY3ZfcHJvZ19jY19jODk9JGFjX2FyZworIGVsc2UKKyAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorKworIGZpCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisrICB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSAieG5vIiAmJiBicmVhaworIGRvbmUKKy1ybSAtZiBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQKKytybSAtZiBjb25mdGVzdC4kYWNfZXh0CisgQ0M9JGFjX3NhdmVfQ0MKKyAKKyBmaQorLQorLWNhc2UgIngkYWNfY3ZfcHJvZ19jY19zdGRjIiBpbgorLSAgeHx4bm8pCistICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ub25lIG5lZWRlZCIgPiY2IDs7CisrIyBBQ19DQUNIRV9WQUwKKytjYXNlICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiBpbgorKyAgeCkKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm9uZSBuZWVkZWQiID4mNjsgfSA7OworKyAgeG5vKQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKKytlY2hvICIke0VDSE9fVH11bnN1cHBvcnRlZCIgPiY2OyB9IDs7CisgICAqKQorLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19zdGRjIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19jY19zdGRjIiA+JjYKKy0gICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19zdGRjIiA7OworKyAgICBDQz0iJENDICRhY19jdl9wcm9nX2NjX2M4OSIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19jODkiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2NjX2M4OSIgPiY2OyB9IDs7CisgZXNhYworIAorLSMgU29tZSBwZW9wbGUgdXNlIGEgQysrIGNvbXBpbGVyIHRvIGNvbXBpbGUgQy4gIFNpbmNlIHdlIHVzZSBgZXhpdCcsCistIyBpbiBDKysgd2UgbmVlZCB0byBkZWNsYXJlIGl0LiAgSW4gY2FzZSBzb21lb25lIHVzZXMgdGhlIHNhbWUgY29tcGlsZXIKKy0jIGZvciBib3RoIGNvbXBpbGluZyBDIGFuZCBDKysgd2UgbmVlZCB0byBoYXZlIHRoZSBDKysgY29tcGlsZXIgZGVjaWRlCistIyB0aGUgZGVjbGFyYXRpb24gb2YgZXhpdCwgc2luY2UgaXQncyB0aGUgbW9zdCBkZW1hbmRpbmcgZW52aXJvbm1lbnQuCistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2lmbmRlZiBfX2NwbHVzcGx1cworLSAgY2hva2UgbWUKKy0jZW5kaWYKKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCistICBmb3IgYWNfZGVjbGFyYXRpb24gaW4gXAorLSAgICcnIFwKKy0gICAnZXh0ZXJuICJDIiB2b2lkIHN0ZDo6ZXhpdCAoaW50KSB0aHJvdyAoKTsgdXNpbmcgc3RkOjpleGl0OycgXAorLSAgICdleHRlcm4gIkMiIHZvaWQgc3RkOjpleGl0IChpbnQpOyB1c2luZyBzdGQ6OmV4aXQ7JyBcCistICAgJ2V4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpIHRocm93ICgpOycgXAorLSAgICdleHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KTsnIFwKKy0gICAndm9pZCBleGl0IChpbnQpOycKKy1kbworLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfZGVjbGFyYXRpb24KKy0jaW5jbHVkZSA8c3RkbGliLmg+CistaW50CistbWFpbiAoKQorLXsKKy1leGl0ICg0Mik7CistICA7CistICByZXR1cm4gMDsKKy19CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorLSAgOgorLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLWNvbnRpbnVlCistZmkKKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19kZWNsYXJhdGlvbgorLWludAorLW1haW4gKCkKKy17CistZXhpdCAoNDIpOworLSAgOworLSAgcmV0dXJuIDA7CistfQorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKy0gIGJyZWFrCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistZmkKKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CistZG9uZQorLXJtIC1mIGNvbmZ0ZXN0KgorLWlmIHRlc3QgLW4gIiRhY19kZWNsYXJhdGlvbiI7IHRoZW4KKy0gIGVjaG8gJyNpZmRlZiBfX2NwbHVzcGx1cycgPj5jb25mZGVmcy5oCistICBlY2hvICRhY19kZWNsYXJhdGlvbiAgICAgID4+Y29uZmRlZnMuaAorLSAgZWNobyAnI2VuZGlmJyAgICAgICAgICAgICA+PmNvbmZkZWZzLmgKKy1maQorIAorLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLWZpCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGFjX2V4dD1jCisgYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKyBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCitAQCAtNDM2Myw4ICs1MDk4LDggQEAKKyAKKyBkZXBjYz0iJENDIiAgIGFtX2NvbXBpbGVyX2xpc3Q9CisgCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTQ0NDYsNTggKzUxODEsMjczIEBACisgICAgIGZpCisgICBkb25lCisgCistICBjZCAuLgorLSAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorLWVsc2UKKy0gIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKKysgIGNkIC4uCisrICBybSAtcmYgY29uZnRlc3QuZGlyCisrZWxzZQorKyAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorK2ZpCisrCisrZmkKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjY7IH0KKytDQ0RFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUKKysKKysKKysKKytpZgorKyAgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vIFwKKysgICYmIHRlc3QgIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzOyB0aGVuCisrICBhbV9fZmFzdGRlcENDX1RSVUU9CisrICBhbV9fZmFzdGRlcENDX0ZBTFNFPScjJworK2Vsc2UKKysgIGFtX19mYXN0ZGVwQ0NfVFJVRT0nIycKKysgIGFtX19mYXN0ZGVwQ0NfRkFMU0U9CisrZmkKKysKKysKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGdyZXAgdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1lLi4uICRFQ0hPX0MiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9HUkVQK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ3JlcCBnZ3JlcCIgdG8gdXNlIGluIG1zZyBvdXRwdXQKKytpZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KKytzZXQgZHVtbXkgZ3JlcCBnZ3JlcDsgYWNfcHJvZ19uYW1lPSQyCisraWYgdGVzdCAiJHthY19jdl9wYXRoX0dSRVArc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgYWNfcGF0aF9HUkVQX2ZvdW5kPWZhbHNlCisrIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgIGZvciBhY19wcm9nIGluIGdyZXAgZ2dyZXA7IGRvCisrICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgICAgYWNfcGF0aF9HUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorKyAgICB7IHRlc3QgLWYgIiRhY19wYXRoX0dSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX0dSRVAiOyB9IHx8IGNvbnRpbnVlCisrICAgICMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0dSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKysgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9HUkVQCisrY2FzZSBgIiRhY19wYXRoX0dSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKypHTlUqKQorKyAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIiBhY19wYXRoX0dSRVBfZm91bmQ9Ojs7CisrKikKKysgIGFjX2NvdW50PTAKKysgIGVjaG8gJEVDSE9fTiAiMDEyMzQ1Njc4OSRFQ0hPX0MiID4iY29uZnRlc3QuaW4iCisrICB3aGlsZSA6CisrICBkbworKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisrICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorKyAgICBlY2hvICdHUkVQJyA+PiAiY29uZnRlc3QubmwiCisrICAgICIkYWNfcGF0aF9HUkVQIiAtZSAnR1JFUCQnIC1lICctKGNhbm5vdCBtYXRjaCktJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisrICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKysgICAgYWNfY291bnQ9YGV4cHIgJGFjX2NvdW50ICsgMWAKKysgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9HUkVQX21heC0wfTsgdGhlbgorKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorKyAgICAgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIKKysgICAgICBhY19wYXRoX0dSRVBfbWF4PSRhY19jb3VudAorKyAgICBmaQorKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisrICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworKyAgZG9uZQorKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7CisrZXNhYworKworKworKyAgICAkYWNfcGF0aF9HUkVQX2ZvdW5kICYmIGJyZWFrIDMKKysgIGRvbmUKKytkb25lCisrCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKysKKytmaQorKworK0dSRVA9IiRhY19jdl9wYXRoX0dSRVAiCisraWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisrICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBubyBhY2NlcHRhYmxlICRhY19wcm9nX25hbWUgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlICRhY19wcm9nX25hbWUgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorK2ZpCisrCisrZWxzZQorKyAgYWNfY3ZfcGF0aF9HUkVQPSRHUkVQCisrZmkKKysKKysKKytmaQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3BhdGhfR1JFUCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3BhdGhfR1JFUCIgPiY2OyB9CisrIEdSRVA9IiRhY19jdl9wYXRoX0dSRVAiCisrCisrCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGVncmVwIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAkRUNIT19DIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3BhdGhfRUdSRVArc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgaWYgZWNobyBhIHwgJEdSRVAgLUUgJyhhfGIpJyA+L2Rldi9udWxsIDI+JjEKKysgICB0aGVuIGFjX2N2X3BhdGhfRUdSRVA9IiRHUkVQIC1FIgorKyAgIGVsc2UKKysgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZWdyZXAiIHRvIHVzZSBpbiBtc2cgb3V0cHV0CisraWYgdGVzdCAteiAiJEVHUkVQIjsgdGhlbgorK3NldCBkdW1teSBlZ3JlcDsgYWNfcHJvZ19uYW1lPSQyCisraWYgdGVzdCAiJHthY19jdl9wYXRoX0VHUkVQK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGFjX3BhdGhfRUdSRVBfZm91bmQ9ZmFsc2UKKysjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGFjX3Byb2cgaW4gZWdyZXA7IGRvCisrICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgICAgYWNfcGF0aF9FR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKysgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9FR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfRUdSRVAiOyB9IHx8IGNvbnRpbnVlCisrICAgICMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0VHUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisrICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfRUdSRVAKKytjYXNlIGAiJGFjX3BhdGhfRUdSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKypHTlUqKQorKyAgYWNfY3ZfcGF0aF9FR1JFUD0iJGFjX3BhdGhfRUdSRVAiIGFjX3BhdGhfRUdSRVBfZm91bmQ9Ojs7CisrKikKKysgIGFjX2NvdW50PTAKKysgIGVjaG8gJEVDSE9fTiAiMDEyMzQ1Njc4OSRFQ0hPX0MiID4iY29uZnRlc3QuaW4iCisrICB3aGlsZSA6CisrICBkbworKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisrICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorKyAgICBlY2hvICdFR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgorKyAgICAiJGFjX3BhdGhfRUdSRVAiICdFR1JFUCQnIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKysgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworKyAgICBhY19jb3VudD1gZXhwciAkYWNfY291bnQgKyAxYAorKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0VHUkVQX21heC0wfTsgdGhlbgorKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorKyAgICAgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIgorKyAgICAgIGFjX3BhdGhfRUdSRVBfbWF4PSRhY19jb3VudAorKyAgICBmaQorKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisrICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworKyAgZG9uZQorKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7CisrZXNhYworKworKworKyAgICAkYWNfcGF0aF9FR1JFUF9mb3VuZCAmJiBicmVhayAzCisrICBkb25lCisrZG9uZQorKworK2RvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrCisgZmkKKyAKKytFR1JFUD0iJGFjX2N2X3BhdGhfRUdSRVAiCisraWYgdGVzdCAteiAiJEVHUkVQIjsgdGhlbgorKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSAkYWNfcHJvZ19uYW1lIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSAkYWNfcHJvZ19uYW1lIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjYKKy1DQ0RFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUKKyAKKytlbHNlCisrICBhY19jdl9wYXRoX0VHUkVQPSRFR1JFUAorK2ZpCisgCisgCistaWYKKy0gIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCistICAmJiB0ZXN0ICIkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID0gZ2NjMzsgdGhlbgorLSAgYW1fX2Zhc3RkZXBDQ19UUlVFPQorLSAgYW1fX2Zhc3RkZXBDQ19GQUxTRT0nIycKKy1lbHNlCistICBhbV9fZmFzdGRlcENDX1RSVUU9JyMnCistICBhbV9fZmFzdGRlcENDX0ZBTFNFPQorKyAgIGZpCisgZmkKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wYXRoX0VHUkVQIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfcGF0aF9FR1JFUCIgPiY2OyB9CisrIEVHUkVQPSIkYWNfY3ZfcGF0aF9FR1JFUCIKKyAKKyAKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGVncmVwIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAkRUNIT19DIiA+JjYKKy1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfZWdyZXArc2V0fSIgPSBzZXQ7IHRoZW4KKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZmdyZXAiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGZncmVwLi4uICRFQ0hPX0MiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9GR1JFUCtzZXR9IiA9IHNldDsgdGhlbgorKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKytlbHNlCisrICBpZiBlY2hvICdhYipjJyB8ICRHUkVQIC1GICdhYipjJyA+L2Rldi9udWxsIDI+JjEKKysgICB0aGVuIGFjX2N2X3BhdGhfRkdSRVA9IiRHUkVQIC1GIgorKyAgIGVsc2UKKysgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZmdyZXAiIHRvIHVzZSBpbiBtc2cgb3V0cHV0CisraWYgdGVzdCAteiAiJEZHUkVQIjsgdGhlbgorK3NldCBkdW1teSBmZ3JlcDsgYWNfcHJvZ19uYW1lPSQyCisraWYgdGVzdCAiJHthY19jdl9wYXRoX0ZHUkVQK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGlmIGVjaG8gYSB8IChncmVwIC1FICcoYXxiKScpID4vZGV2L251bGwgMj4mMQorLSAgICB0aGVuIGFjX2N2X3Byb2dfZWdyZXA9J2dyZXAgLUUnCistICAgIGVsc2UgYWNfY3ZfcHJvZ19lZ3JlcD0nZWdyZXAnCisrICBhY19wYXRoX0ZHUkVQX2ZvdW5kPWZhbHNlCisrIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgIGZvciBhY19wcm9nIGluIGZncmVwOyBkbworKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICAgIGFjX3BhdGhfRkdSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisrICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfRkdSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX0ZHUkVQIjsgfSB8fCBjb250aW51ZQorKyAgICAjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9GR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0ZHUkVQCisrY2FzZSBgIiRhY19wYXRoX0ZHUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KKysqR05VKikKKysgIGFjX2N2X3BhdGhfRkdSRVA9IiRhY19wYXRoX0ZHUkVQIiBhY19wYXRoX0ZHUkVQX2ZvdW5kPTo7OworKyopCisrICBhY19jb3VudD0wCisrICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+ImNvbmZ0ZXN0LmluIgorKyAgd2hpbGUgOgorKyAgZG8KKysgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKysgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKysgICAgZWNobyAnRkdSRVAnID4+ICJjb25mdGVzdC5ubCIKKysgICAgIiRhY19wYXRoX0ZHUkVQIiBGR1JFUCA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisrICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKysgICAgYWNfY291bnQ9YGV4cHIgJGFjX2NvdW50ICsgMWAKKysgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9GR1JFUF9tYXgtMH07IHRoZW4KKysgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKysgICAgICBhY19jdl9wYXRoX0ZHUkVQPSIkYWNfcGF0aF9GR1JFUCIKKysgICAgICBhY19wYXRoX0ZHUkVQX21heD0kYWNfY291bnQKKyAgICAgZmkKKysgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKysgIGRvbmUKKysgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworK2VzYWMKKysKKysKKysgICAgJGFjX3BhdGhfRkdSRVBfZm91bmQgJiYgYnJlYWsgMworKyAgZG9uZQorK2RvbmUKKysKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworKworIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfZWdyZXAiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2VncmVwIiA+JjYKKy0gRUdSRVA9JGFjX2N2X3Byb2dfZWdyZXAKKyAKKytGR1JFUD0iJGFjX2N2X3BhdGhfRkdSRVAiCisraWYgdGVzdCAteiAiJEZHUkVQIjsgdGhlbgorKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSAkYWNfcHJvZ19uYW1lIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSAkYWNfcHJvZ19uYW1lIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKytmaQorIAorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZmdyZXAiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGZncmVwLi4uICRFQ0hPX0MiID4mNgorLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19mZ3JlcCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBpZiBlY2hvICdhYipjJyB8IChncmVwIC1GICdhYipjJykgPi9kZXYvbnVsbCAyPiYxCistICAgIHRoZW4gYWNfY3ZfcHJvZ19mZ3JlcD0nZ3JlcCAtRicKKy0gICAgZWxzZSBhY19jdl9wcm9nX2ZncmVwPSdmZ3JlcCcKKy0gICAgZmkKKysgIGFjX2N2X3BhdGhfRkdSRVA9JEZHUkVQCisrZmkKKysKKysKKysgICBmaQorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfZmdyZXAiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2ZncmVwIiA+JjYKKy0gRkdSRVA9JGFjX2N2X3Byb2dfZmdyZXAKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wYXRoX0ZHUkVQIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfcGF0aF9GR1JFUCIgPiY2OyB9CisrIEZHUkVQPSIkYWNfY3ZfcGF0aF9GR1JFUCIKKyAKKyAKKyB0ZXN0IC16ICIkR1JFUCIgJiYgR1JFUD1ncmVwCitAQCAtNDUyMCwxOCArNTQ3MCwxOCBAQAorIAorIAorIAorLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ251LWxkIG9yIC0td2l0aG91dC1nbnUtbGQgd2FzIGdpdmVuLgorKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ251LWxkIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke3dpdGhfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuCistICB3aXRodmFsPSIkd2l0aF9nbnVfbGQiCistICB0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMKKysgIHdpdGh2YWw9JHdpdGhfZ251X2xkOyB0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMKKyBlbHNlCisgICB3aXRoX2dudV9sZD1ubworLWZpOworK2ZpCisrCisgYWNfcHJvZz1sZAorIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDLi4uICRFQ0hPX0MiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQy4uLiAkRUNIT19DIiA+JjY7IH0KKyAgIGNhc2UgJGhvc3QgaW4KKyAgICotKi1taW5ndyopCisgICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKK0BAIC00NTYwLDExICs1NTEwLDExIEBACisgICAgIDs7CisgICBlc2FjCisgZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgR05VIGxkLi4uICRFQ0hPX0MiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgR05VIGxkLi4uICRFQ0hPX0MiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igbm9uLUdOVSBsZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igbm9uLUdOVSBsZC4uLiAkRUNIT19DIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBub24tR05VIGxkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBub24tR05VIGxkLi4uICRFQ0hPX0MiID4mNjsgfQorIGZpCisgaWYgdGVzdCAiJHtsdF9jdl9wYXRoX0xEK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorQEAgLTQ1OTcsMTcgKzU1NDcsMTcgQEAKKyAKKyBMRD0iJGx0X2N2X3BhdGhfTEQiCisgaWYgdGVzdCAtbiAiJExEIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJExEIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kTEQiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTEQiID4mNQorK2VjaG8gIiR7RUNIT19UfSRMRCIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIHRlc3QgLXogIiRMRCIgJiYgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiID4mNQorIGVjaG8gIiRhc19tZTogZXJyb3I6IG5vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIIiA+JjI7fQorICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZC4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X3Byb2dfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC00NjIxLDggKzU1NzEsOCBAQAorICAgOzsKKyBlc2FjCisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNQorLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2dudV9sZCIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNQorK2VjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2dudV9sZCIgPiY2OyB9Cisgd2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCisgCisgCitAQCAtNDYzMyw4ICs1NTgzLDggQEAKKyAKKyAKKyAKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKS4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSkiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfcGF0aF9OTStzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtNDY4Miw4ICs1NjMyLDggQEAKKyAgIDogJHtsdF9jdl9wYXRoX05NPW5vfQorIGZpCisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcGF0aF9OTSIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3BhdGhfTk0iID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3BhdGhfTk0iID4mNQorK2VjaG8gIiR7RUNIT19UfSRsdF9jdl9wYXRoX05NIiA+JjY7IH0KKyBpZiB0ZXN0ICIkbHRfY3ZfcGF0aF9OTSIgIT0gIm5vIjsgdGhlbgorICAgTk09IiRsdF9jdl9wYXRoX05NIgorIGVsc2UKK0BAIC00NjkzLDggKzU2NDMsOCBAQAorICAgZG8KKyAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRFVNUEJJTitzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtNDcwNywyNSArNTY1NywyNyBAQAorICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICAgYWNfY3ZfcHJvZ19EVU1QQklOPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorIGZpCisgZmkKKyBEVU1QQklOPSRhY19jdl9wcm9nX0RVTVBCSU4KKyBpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICREVU1QQklOIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kRFVNUEJJTiIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICREVU1QQklOIiA+JjUKKytlY2hvICIke0VDSE9fVH0kRFVNUEJJTiIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorKworICAgICB0ZXN0IC1uICIkRFVNUEJJTiIgJiYgYnJlYWsKKyAgIGRvbmUKKyBmaQorQEAgLTQ3MzUsOCArNTY4Nyw4IEBACisgZG8KKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RVTVBCSU4rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTQ3NDksMzAgKzU3MDEsNDUgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTj0iJGFjX3Byb2ciCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgYWNfY3RfRFVNUEJJTj0kYWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOCisgaWYgdGVzdCAtbiAiJGFjX2N0X0RVTVBCSU4iOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfRFVNUEJJTiIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0RVTVBCSU4iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfRFVNUEJJTiIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0RVTVBCSU4iID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKysKKyAgIHRlc3QgLW4gIiRhY19jdF9EVU1QQklOIiAmJiBicmVhaworIGRvbmUKKy10ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiIgfHwgYWNfY3RfRFVNUEJJTj0iOiIKKyAKKy0gIERVTVBCSU49JGFjX2N0X0RVTVBCSU4KKysgIGlmIHRlc3QgIngkYWNfY3RfRFVNUEJJTiIgPSB4OyB0aGVuCisrICAgIERVTVBCSU49IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBEVU1QQklOPSRhY19jdF9EVU1QQklOCisrICBmaQorIGZpCisgCisgCitAQCAtNDc4Nyw0MyArNTc1NCw0MyBAQAorIAorIAorIAorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB0aGUgbmFtZSBsaXN0ZXIgKCROTSkgaW50ZXJmYWNlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHRoZSBuYW1lIGxpc3RlciAoJE5NKSBpbnRlcmZhY2UuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZSIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyB0aGUgbmFtZSBsaXN0ZXIgKCROTSkgaW50ZXJmYWNlLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3Zfbm1faW50ZXJmYWNlK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGx0X2N2X25tX2ludGVyZmFjZT0iQlNEIG5tIgorICAgZWNobyAiaW50IHNvbWVfdmFyaWFibGUgPSAwOyIgPiBjb25mdGVzdC4kYWNfZXh0CistICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6NDc5NzogJGFjX2NvbXBpbGVcIiIgPiY1KQorKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjU3NjQ6ICRhY19jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkYWNfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjQ4MDA6ICROTSBcXFwiY29uZnRlc3QuJGFjX29iamV4dFxcXCJcIiIgPiY1KQorKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjU3Njc6ICROTSBcXFwiY29uZnRlc3QuJGFjX29iamV4dFxcXCJcIiIgPiY1KQorICAgKGV2YWwgIiROTSBcImNvbmZ0ZXN0LiRhY19vYmpleHRcIiIgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQpCisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjQ4MDM6IG91dHB1dFwiIiA+JjUpCisrICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6NTc3MDogb3V0cHV0XCIiID4mNSkKKyAgIGNhdCBjb25mdGVzdC5vdXQgPiY1CisgICBpZiAkR1JFUCAnRXh0ZXJuYWwuKnNvbWVfdmFyaWFibGUnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorICAgICBsdF9jdl9ubV9pbnRlcmZhY2U9Ik1TIGR1bXBiaW4iCisgICBmaQorICAgcm0gLWYgY29uZnRlc3QqCisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3Zfbm1faW50ZXJmYWNlIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kbHRfY3Zfbm1faW50ZXJmYWNlIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9ubV9pbnRlcmZhY2UiID4mNQorK2VjaG8gIiR7RUNIT19UfSRsdF9jdl9ubV9pbnRlcmZhY2UiID4mNjsgfQorIAorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3JrcyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQorIExOX1M9JGFzX2xuX3MKKyBpZiB0ZXN0ICIkTE5fUyIgPSAibG4gLXMiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubywgdXNpbmcgJExOX1MiID4mNQorLWVjaG8gIiR7RUNIT19UfW5vLCB1c2luZyAkTE5fUyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vLCB1c2luZyAkTE5fUyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8sIHVzaW5nICRMTl9TIiA+JjY7IH0KKyBmaQorIAorICMgZmluZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X3N5c19tYXhfY21kX2xlbitzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtNDk0MiwxMSArNTkwOSwxMSBAQAorIGZpCisgCisgaWYgdGVzdCAtbiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIDsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNQorK2VjaG8gIiR7RUNIT19UfSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vbmUiID4mNQorLWVjaG8gIiR7RUNIT19UfW5vbmUiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBub25lIiA+JjUKKytlY2hvICIke0VDSE9fVH1ub25lIiA+JjY7IH0KKyBmaQorIG1heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KKyAKK0BAIC00OTU5LDggKzU5MjYsOCBAQAorIDogJHtNVj0ibXYgLWYifQorIDogJHtSTT0icm0gLWYifQorIAorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICRFQ0hPX0MiID4mNjsgfQorICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCisgeHNpX3NoZWxsPW5vCisgKCBfbHRfZHVtbXk9ImEvYi9jIgorQEAgLTQ5NjksMTggKzU5MzYsMTggQEAKKyAgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAgJiYgeHNpX3NoZWxsPXllcworLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICR4c2lfc2hlbGwiID4mNQorLWVjaG8gIiR7RUNIT19UfSR4c2lfc2hlbGwiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJHhzaV9zaGVsbCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JHhzaV9zaGVsbCIgPiY2OyB9CisgCisgCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIFwiKz1cIiIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBcIis9XCIuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgXCIrPVwiIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIFwiKz1cIi4uLiAkRUNIT19DIiA+JjY7IH0KKyBsdF9zaGVsbF9hcHBlbmQ9bm8KKyAoIGZvbz1iYXI7IHNldCBmb28gYmF6OyBldmFsICIkMSs9XCQyIiAmJiB0ZXN0ICIkZm9vIiA9IGJhcmJheiApIFwKKyAgICAgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICYmIGx0X3NoZWxsX2FwcGVuZD15ZXMKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfc2hlbGxfYXBwZW5kIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kbHRfc2hlbGxfYXBwZW5kIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9zaGVsbF9hcHBlbmQiID4mNQorK2VjaG8gIiR7RUNIT19UfSRsdF9zaGVsbF9hcHBlbmQiID4mNjsgfQorIAorIAorIGlmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorQEAgLTUwMTQsMTUgKzU5ODEsMTUgQEAKKyAKKyAKKyAKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGx0X2N2X2xkX3JlbG9hZF9mbGFnPSctcicKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9sZF9yZWxvYWRfZmxhZyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2xkX3JlbG9hZF9mbGFnIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9sZF9yZWxvYWRfZmxhZyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2xkX3JlbG9hZF9mbGFnIiA+JjY7IH0KKyByZWxvYWRfZmxhZz0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWcKKyBjYXNlICRyZWxvYWRfZmxhZyBpbgorICIiIHwgIiAiKikgOzsKK0BAIC01MDUwLDggKzYwMTcsOCBAQAorIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vYmpkdW1wOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfT0JKRFVNUCtzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtNTA2NCwzMiArNjAzMSwzNCBAQAorICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgT0JKRFVNUD0kYWNfY3ZfcHJvZ19PQkpEVU1QCisgaWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkT0JKRFVNUCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JE9CSkRVTVAiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkT0JKRFVNUCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JE9CSkRVTVAiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKysKKyBmaQorIGlmIHRlc3QgLXogIiRhY19jdl9wcm9nX09CSkRVTVAiOyB0aGVuCisgICBhY19jdF9PQkpEVU1QPSRPQkpEVU1QCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSBvYmpkdW1wOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUCtzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtNTEwMiwyNyArNjA3MSw0MSBAQAorICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSJvYmpkdW1wIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCistICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QIiAmJiBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9ImZhbHNlIgorIGZpCisgZmkKKyBhY19jdF9PQkpEVU1QPSRhY19jdl9wcm9nX2FjX2N0X09CSkRVTVAKKyBpZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9PQkpEVU1QIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3RfT0JKRFVNUCIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9PQkpEVU1QIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3RfT0JKRFVNUCIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorLSAgT0JKRFVNUD0kYWNfY3RfT0JKRFVNUAorKyAgaWYgdGVzdCAieCRhY19jdF9PQkpEVU1QIiA9IHg7IHRoZW4KKysgICAgT0JKRFVNUD0iZmFsc2UiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBPQkpEVU1QPSRhY19jdF9PQkpEVU1QCisrICBmaQorIGVsc2UKKyAgIE9CSkRVTVA9IiRhY19jdl9wcm9nX09CSkRVTVAiCisgZmkKK0BAIC01MTM0LDggKzYxMTcsOCBAQAorIAorIAorIAorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byByZWNvZ25pemUgZGVwZW5kZW50IGxpYnJhcmllcyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHtsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCtzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtNTMzMCw4ICs2MzEzLDggQEAKKyBlc2FjCisgCisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQorLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQorK2VjaG8gIiR7RUNIT19UfSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CisgZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCitAQCAtNTM1MCw4ICs2MzMzLDggQEAKKyBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTUzNjQsMzIgKzYzNDcsMzQgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgQVI9JGFjX2N2X3Byb2dfQVIKKyBpZiB0ZXN0IC1uICIkQVIiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQVIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRBUiIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRBUiIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JEFSIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCisrCisgZmkKKyBpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKyAgIGFjX2N0X0FSPSRBUgorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTU0MDIsMjcgKzYzODcsNDEgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCistICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9BUiIgJiYgYWNfY3ZfcHJvZ19hY19jdF9BUj0iZmFsc2UiCisgZmkKKyBmaQorIGFjX2N0X0FSPSRhY19jdl9wcm9nX2FjX2N0X0FSCisgaWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0FSIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3RfQVIiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQVIiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdF9BUiIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorLSAgQVI9JGFjX2N0X0FSCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KKysgICAgQVI9ImZhbHNlIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgQVI9JGFjX2N0X0FSCisrICBmaQorIGVsc2UKKyAgIEFSPSIkYWNfY3ZfcHJvZ19BUiIKKyBmaQorQEAgLTU0NDMsOCArNjQ0Miw4IEBACisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX1NUUklQK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC01NDU3LDMyICs2NDU2LDM0IEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX1NUUklQPSIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKyBmaQorIFNUUklQPSRhY19jdl9wcm9nX1NUUklQCisgaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFNUUklQIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kU1RSSVAiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkU1RSSVAiID4mNQorK2VjaG8gIiR7RUNIT19UfSRTVFJJUCIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorKworIGZpCisgaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCisgICBhY19jdF9TVFJJUD0kU1RSSVAKKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1NUUklQK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC01NDk1LDI3ICs2NDk2LDQxIEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSJzdHJpcCIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorLSAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWNfY3RfU1RSSVAiICYmIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IjoiCisgZmkKKyBmaQorIGFjX2N0X1NUUklQPSRhY19jdl9wcm9nX2FjX2N0X1NUUklQCisgaWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3RfU1RSSVAiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfU1RSSVAiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdF9TVFJJUCIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorLSAgU1RSSVA9JGFjX2N0X1NUUklQCisrICBpZiB0ZXN0ICJ4JGFjX2N0X1NUUklQIiA9IHg7IHRoZW4KKysgICAgU1RSSVA9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBTVFJJUD0kYWNfY3RfU1RSSVAKKysgIGZpCisgZWxzZQorICAgU1RSSVA9IiRhY19jdl9wcm9nX1NUUklQIgorIGZpCitAQCAtNTUzMCw4ICs2NTQ1LDggQEAKKyBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1yYW5saWI7IGFjX3dvcmQ9JDIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19SQU5MSUIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTU1NDQsMzIgKzY1NTksMzQgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfUkFOTElCPSIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorIGZpCisgZmkKKyBSQU5MSUI9JGFjX2N2X3Byb2dfUkFOTElCCisgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRSQU5MSUIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRSQU5MSUIiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkUkFOTElCIiA+JjUKKytlY2hvICIke0VDSE9fVH0kUkFOTElCIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCisrCisgZmkKKyBpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19SQU5MSUIiOyB0aGVuCisgICBhY19jdF9SQU5MSUI9JFJBTkxJQgorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJyYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSByYW5saWI7IGFjX3dvcmQ9JDIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTU1ODIsMjcgKzY1OTksNDEgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSJyYW5saWIiCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKy0gIHRlc3QgLXogIiRhY19jdl9wcm9nX2FjX2N0X1JBTkxJQiIgJiYgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9IjoiCisgZmkKKyBmaQorIGFjX2N0X1JBTkxJQj0kYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIKKyBpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X1JBTkxJQiIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N0X1JBTkxJQiIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9SQU5MSUIiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdF9SQU5MSUIiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKy0gIFJBTkxJQj0kYWNfY3RfUkFOTElCCisrICBpZiB0ZXN0ICJ4JGFjX2N0X1JBTkxJQiIgPSB4OyB0aGVuCisrICAgIFJBTkxJQj0iOiIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIFJBTkxJQj0kYWNfY3RfUkFOTElCCisrICBmaQorIGVsc2UKKyAgIFJBTkxJQj0iJGFjX2N2X3Byb2dfUkFOTElCIgorIGZpCitAQCAtNTY3NSw4ICs2NzA2LDggQEAKKyAKKyAKKyAjIENoZWNrIGZvciBjb21tYW5kIHRvIGdyYWIgdGhlIHJhdyBzeW1ib2wgbmFtZSBmb2xsb3dlZCBieSBDIHN5bWJvbCBmcm9tIG5tLgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGNvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3QuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0Li4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZStzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtNTg5NSwxMSArNjkyNiwxMSBAQAorICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9CisgZmkKKyBpZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGZhaWxlZCIgPiY1CistZWNobyAiJHtFQ0hPX1R9ZmFpbGVkIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogZmFpbGVkIiA+JjUKKytlY2hvICIke0VDSE9fVH1mYWlsZWQiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG9rIiA+JjUKKy1lY2hvICIke0VDSE9fVH1vayIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG9rIiA+JjUKKytlY2hvICIke0VDSE9fVH1vayIgPiY2OyB9CisgZmkKKyAKKyAKK0BAIC01OTI0LDExICs2OTU1LDExIEBACisgCisgCisgCistIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayBvciAtLWRpc2FibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVuYWJsZXZhbD0iJGVuYWJsZV9saWJ0b29sX2xvY2siCisrICBlbmFibGV2YWw9JGVuYWJsZV9saWJ0b29sX2xvY2s7CisrZmkKKyAKKy1maTsKKyB0ZXN0ICJ4JGVuYWJsZV9saWJ0b29sX2xvY2siICE9IHhubyAmJiBlbmFibGVfbGlidG9vbF9sb2NrPXllcworIAorICMgU29tZSBmbGFncyBuZWVkIHRvIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIGNvbXBpbGVyIG9yIGxpbmtlciBmb3IgZ29vZAorQEAgLTU5NTUsNyArNjk4Niw3IEBACisgICA7OworICotKi1pcml4NiopCisgICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCistICBlY2hvICcjbGluZSA1OTU4ICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKKysgIGVjaG8gJyNsaW5lIDY5ODkgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjA0Nyw4ICs3MDc4LDggQEAKKyAgICMgT24gU0NPIE9wZW5TZXJ2ZXIgNSwgd2UgbmVlZCAtYmVsZiB0byBnZXQgZnVsbC1mZWF0dXJlZCBiaW5hcmllcy4KKyAgIFNBVkVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1iZWxmIgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZi4uLiAkRUNIT19DIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZi4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X2NjX25lZWRzX2JlbGYrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTYwNzQsMzUgKzcxMDUsMzIgQEAKKyB9CisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKyAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgICBybSAtZiBjb25mdGVzdC5lcjEKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICAgbHRfY3ZfY2NfbmVlZHNfYmVsZj15ZXMKKyBlbHNlCisgICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKy1sdF9jdl9jY19uZWVkc19iZWxmPW5vCisrCWx0X2N2X2NjX25lZWRzX2JlbGY9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICBhY19leHQ9YworIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCitAQCAtNjExMSw4ICs3MTM5LDggQEAKKyBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisgCisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNQorK2VjaG8gIiR7RUNIT19UfSRsdF9jdl9jY19uZWVkc19iZWxmIiA+JjY7IH0KKyAgIGlmIHRlc3QgeCIkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgIT0geCJ5ZXMiOyB0aGVuCisgICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgorICAgICBDRkxBR1M9IiRTQVZFX0NGTEFHUyIKK0BAIC02MTUxLDggKzcxNzksOCBAQAorICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRFNZTVVUSUwrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTYxNjUsMzIgKzcxOTMsMzQgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfRFNZTVVUSUw9IiR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWwiCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgRFNZTVVUSUw9JGFjX2N2X3Byb2dfRFNZTVVUSUwKKyBpZiB0ZXN0IC1uICIkRFNZTVVUSUwiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkRFNZTVVUSUwiID4mNQorLWVjaG8gIiR7RUNIT19UfSREU1lNVVRJTCIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICREU1lNVVRJTCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JERTWU1VVElMIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCisrCisgZmkKKyBpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19EU1lNVVRJTCI7IHRoZW4KKyAgIGFjX2N0X0RTWU1VVElMPSREU1lNVVRJTAorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkc3ltdXRpbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15IGRzeW11dGlsOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUwrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTYyMDMsMjcgKzcyMzMsNDEgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUw9ImRzeW11dGlsIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCistICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTCIgJiYgYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTD0iOiIKKyBmaQorIGZpCisgYWNfY3RfRFNZTVVUSUw9JGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUwKKyBpZiB0ZXN0IC1uICIkYWNfY3RfRFNZTVVUSUwiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfRFNZTVVUSUwiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdF9EU1lNVVRJTCIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9EU1lNVVRJTCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0RTWU1VVElMIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCistICBEU1lNVVRJTD0kYWNfY3RfRFNZTVVUSUwKKysgIGlmIHRlc3QgIngkYWNfY3RfRFNZTVVUSUwiID0geDsgdGhlbgorKyAgICBEU1lNVVRJTD0iOiIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIERTWU1VVElMPSRhY19jdF9EU1lNVVRJTAorKyAgZmkKKyBlbHNlCisgICBEU1lNVVRJTD0iJGFjX2N2X3Byb2dfRFNZTVVUSUwiCisgZmkKK0BAIC02MjMxLDggKzcyNzUsOCBAQAorICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1ubWVkaXQ7IGFjX3dvcmQ9JDIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19OTUVESVQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTYyNDUsMzIgKzcyODksMzQgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfTk1FRElUPSIke2FjX3Rvb2xfcHJlZml4fW5tZWRpdCIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorIGZpCisgZmkKKyBOTUVESVQ9JGFjX2N2X3Byb2dfTk1FRElUCisgaWYgdGVzdCAtbiAiJE5NRURJVCI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICROTUVESVQiID4mNQorLWVjaG8gIiR7RUNIT19UfSROTUVESVQiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTk1FRElUIiA+JjUKKytlY2hvICIke0VDSE9fVH0kTk1FRElUIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCisrCisgZmkKKyBpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19OTUVESVQiOyB0aGVuCisgICBhY19jdF9OTUVESVQ9JE5NRURJVAorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJubWVkaXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSBubWVkaXQ7IGFjX3dvcmQ9JDIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9OTUVESVQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTYyODMsMjcgKzczMjksNDEgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUPSJubWVkaXQiCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKy0gIHRlc3QgLXogIiRhY19jdl9wcm9nX2FjX2N0X05NRURJVCIgJiYgYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQ9IjoiCisgZmkKKyBmaQorIGFjX2N0X05NRURJVD0kYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQKKyBpZiB0ZXN0IC1uICIkYWNfY3RfTk1FRElUIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X05NRURJVCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N0X05NRURJVCIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9OTUVESVQiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdF9OTUVESVQiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKy0gIE5NRURJVD0kYWNfY3RfTk1FRElUCisrICBpZiB0ZXN0ICJ4JGFjX2N0X05NRURJVCIgPSB4OyB0aGVuCisrICAgIE5NRURJVD0iOiIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIE5NRURJVD0kYWNfY3RfTk1FRElUCisrICBmaQorIGVsc2UKKyAgIE5NRURJVD0iJGFjX2N2X3Byb2dfTk1FRElUIgorIGZpCitAQCAtNjMxMSw4ICs3MzcxLDggQEAKKyAgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWxpcG8iLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWxpcG87IGFjX3dvcmQ9JDIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19MSVBPK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC02MzI1LDMyICs3Mzg1LDM0IEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX0xJUE89IiR7YWNfdG9vbF9wcmVmaXh9bGlwbyIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorIGZpCisgZmkKKyBMSVBPPSRhY19jdl9wcm9nX0xJUE8KKyBpZiB0ZXN0IC1uICIkTElQTyI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRMSVBPIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kTElQTyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRMSVBPIiA+JjUKKytlY2hvICIke0VDSE9fVH0kTElQTyIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorKworIGZpCisgaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTElQTyI7IHRoZW4KKyAgIGFjX2N0X0xJUE89JExJUE8KKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibGlwbyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15IGxpcG87IGFjX3dvcmQ9JDIKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9MSVBPK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC02MzYzLDI3ICs3NDI1LDQxIEBACisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgICBhY19jdl9wcm9nX2FjX2N0X0xJUE89ImxpcG8iCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKy0gIHRlc3QgLXogIiRhY19jdl9wcm9nX2FjX2N0X0xJUE8iICYmIGFjX2N2X3Byb2dfYWNfY3RfTElQTz0iOiIKKyBmaQorIGZpCisgYWNfY3RfTElQTz0kYWNfY3ZfcHJvZ19hY19jdF9MSVBPCisgaWYgdGVzdCAtbiAiJGFjX2N0X0xJUE8iOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfTElQTyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0xJUE8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfTElQTyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0xJUE8iID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKy0gIExJUE89JGFjX2N0X0xJUE8KKysgIGlmIHRlc3QgIngkYWNfY3RfTElQTyIgPSB4OyB0aGVuCisrICAgIExJUE89IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKyt3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCisrY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBMSVBPPSRhY19jdF9MSVBPCisrICBmaQorIGVsc2UKKyAgIExJUE89IiRhY19jdl9wcm9nX0xJUE8iCisgZmkKK0BAIC02MzkxLDggKzc0NjcsOCBAQAorICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW90b29sOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfT1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTY0MDUsMzIgKzc0ODEsMzQgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfT1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2wiCisgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCisgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgT1RPT0w9JGFjX2N2X3Byb2dfT1RPT0wKKyBpZiB0ZXN0IC1uICIkT1RPT0wiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkT1RPT0wiID4mNQorLWVjaG8gIiR7RUNIT19UfSRPVE9PTCIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRPVE9PTCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JE9UT09MIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCisrCisgZmkKKyBpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PVE9PTCI7IHRoZW4KKyAgIGFjX2N0X09UT09MPSRPVE9PTAorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15IG90b29sOyBhY193b3JkPSQyCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfT1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTY0NDMsMjcgKzc1MjEsNDEgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w9Im90b29sIgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCistICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9PVE9PTCIgJiYgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTD0iOiIKKyBmaQorIGZpCisgYWNfY3RfT1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfT1RPT0wKKyBpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0wiOyB0aGVuCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfT1RPT0wiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdF9PVE9PTCIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9PVE9PTCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N0X09UT09MIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCistICBPVE9PTD0kYWNfY3RfT1RPT0wKKysgIGlmIHRlc3QgIngkYWNfY3RfT1RPT0wiID0geDsgdGhlbgorKyAgICBPVE9PTD0iOiIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIE9UT09MPSRhY19jdF9PVE9PTAorKyAgZmkKKyBlbHNlCisgICBPVE9PTD0iJGFjX2N2X3Byb2dfT1RPT0wiCisgZmkKK0BAIC02NDcxLDggKzc1NjMsOCBAQAorICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NDsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX09UT09MNjQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTY0ODUsMzIgKzc1NzcsMzQgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfT1RPT0w2ND0iJHthY190b29sX3ByZWZpeH1vdG9vbDY0IgorICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKyBmaQorIE9UT09MNjQ9JGFjX2N2X3Byb2dfT1RPT0w2NAorIGlmIHRlc3QgLW4gIiRPVE9PTDY0IjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJE9UT09MNjQiID4mNQorLWVjaG8gIiR7RUNIT19UfSRPVE9PTDY0IiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJE9UT09MNjQiID4mNQorK2VjaG8gIiR7RUNIT19UfSRPVE9PTDY0IiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCisrCisgZmkKKyBpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PVE9PTDY0IjsgdGhlbgorICAgYWNfY3RfT1RPT0w2ND0kT1RPT0w2NAorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvdG9vbDY0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgb3Rvb2w2NDsgYWNfd29yZD0kMgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X09UT09MNjQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTY1MjMsMjcgKzc2MTcsNDEgQEAKKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2ND0ib3Rvb2w2NCIKKyAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKyBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorLSAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2NCIgJiYgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0PSI6IgorIGZpCisgZmkKKyBhY19jdF9PVE9PTDY0PSRhY19jdl9wcm9nX2FjX2N0X09UT09MNjQKKyBpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0w2NCI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9PVE9PTDY0IiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3RfT1RPT0w2NCIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9PVE9PTDY0IiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3RfT1RPT0w2NCIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyBmaQorIAorLSAgT1RPT0w2ND0kYWNfY3RfT1RPT0w2NAorKyAgaWYgdGVzdCAieCRhY19jdF9PVE9PTDY0IiA9IHg7IHRoZW4KKysgICAgT1RPT0w2ND0iOiIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCisrd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKytjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIE9UT09MNjQ9JGFjX2N0X09UT09MNjQKKysgIGZpCisgZWxzZQorICAgT1RPT0w2ND0iJGFjX2N2X3Byb2dfT1RPT0w2NCIKKyBmaQorQEAgLTY1NzQsOCArNzY4Miw4IEBACisgCisgCisgCistICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWciID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnLi4uICRFQ0hPX0MiID4mNgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWciID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCtzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtNjYwMSwxMCArNzcwOSwxMCBAQAorIAlybSAtZiBjb25mdGVzdC4qCisgICAgICAgZmkKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPiY2CistICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZy4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA+JjUKKytlY2hvICIke0VDSE9fVH0kbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPiY2OyB9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0K3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC02NjI4LDQxICs3NzM2LDM4IEBACisgfQorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICAgcm0gLWYgY29uZnRlc3QuZXIxCisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKysgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgIGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD15ZXMKKyBlbHNlCisgICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKy1sdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm8KKysJbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIAlMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorIAorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA+JjUKKytlY2hvICIke0VDSE9fVH0kbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA+JjY7IH0KKyAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICByaGFwc29keSogfCBkYXJ3aW4xLlswMTJdKQorICAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKK0BAIC02NzAzLDggKzc4MDgsOCBAQAorIGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKyBhY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworIGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IuLi4gJEVDSE9fQyIgPiY2OyB9CisgIyBPbiBTdW5zLCBzb21ldGltZXMgJENQUCBuYW1lcyBhIGRpcmVjdG9yeS4KKyBpZiB0ZXN0IC1uICIkQ1BQIiAmJiB0ZXN0IC1kICIkQ1BQIjsgdGhlbgorICAgQ1BQPQorQEAgLTY3MzgsMjQgKzc4NDMsMjIgQEAKKyAjZW5kaWYKKyAJCSAgICAgU3ludGF4IGVycm9yCisgX0FDRU9GCistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorK2lmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisrICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKy0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCistICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKy0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCistICBlbHNlCistICAgIGFjX2NwcF9lcnI9CistICBmaQorLWVsc2UKKy0gIGFjX2NwcF9lcnI9eWVzCistZmkKKy1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKysgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfTsgdGhlbgorICAgOgorIGVsc2UKKyAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitAQCAtNjc2NCw5ICs3ODY3LDEwIEBACisgICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCisgY29udGludWUKKyBmaQorKworIHJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisgCistICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uLWV4aXN0ZW50IGhlYWRlcnMKKysgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCisgICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogY29uZmRlZnMuaC4gICovCitAQCAtNjc3NiwyNCArNzg4MCwyMiBAQAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KKyBfQUNFT0YKKy1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CistICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCisraWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKysgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICAgcm0gLWYgY29uZnRlc3QuZXIxCisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKy0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKy0gIGVsc2UKKy0gICAgYWNfY3BwX2Vycj0KKy0gIGZpCistZWxzZQorLSAgYWNfY3BwX2Vycj15ZXMKKy1maQorLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9OyB0aGVuCisgICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorIGNvbnRpbnVlCisgZWxzZQorQEAgLTY4MDQsNiArNzkwNiw3IEBACisgYWNfcHJlcHJvY19vaz06CisgYnJlYWsKKyBmaQorKworIHJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisgCisgZG9uZQorQEAgLTY4MjEsOCArNzkyNCw4IEBACisgZWxzZQorICAgYWNfY3ZfcHJvZ19DUFA9JENQUAorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENQUCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JENQUCIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ1BQIiA+JjUKKytlY2hvICIke0VDSE9fVH0kQ1BQIiA+JjY7IH0KKyBhY19wcmVwcm9jX29rPWZhbHNlCisgZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCisgZG8KK0BAIC02ODQ1LDI0ICs3OTQ4LDIyIEBACisgI2VuZGlmCisgCQkgICAgIFN5bnRheCBlcnJvcgorIF9BQ0VPRgorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKy0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKKytpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKyAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgICBybSAtZiBjb25mdGVzdC5lcjEKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCistICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCistICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworLSAgZWxzZQorLSAgICBhY19jcHBfZXJyPQorLSAgZmkKKy1lbHNlCistICBhY19jcHBfZXJyPXllcworLWZpCistaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH07IHRoZW4KKyAgIDoKKyBlbHNlCisgICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorQEAgLTY4NzEsOSArNzk3MiwxMCBAQAorICAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorIGNvbnRpbnVlCisgZmkKKysKKyBybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorIAorLSAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbi1leGlzdGVudCBoZWFkZXJzCisrICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworICAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGNvbmZkZWZzLmguICAqLworQEAgLTY4ODMsMjQgKzc5ODUsMjIgQEAKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CisgX0FDRU9GCistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorK2lmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisrICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKy0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCistICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKy0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCistICBlbHNlCistICAgIGFjX2NwcF9lcnI9CistICBmaQorLWVsc2UKKy0gIGFjX2NwcF9lcnI9eWVzCistZmkKKy1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKysgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfTsgdGhlbgorICAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KKyBjb250aW51ZQorIGVsc2UKK0BAIC02OTExLDYgKzgwMTEsNyBAQAorIGFjX3ByZXByb2Nfb2s9OgorIGJyZWFrCisgZmkKKysKKyBybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorIAorIGRvbmUKK0BAIC02OTMzLDggKzgwMzQsOCBAQAorIGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKyAKKyAKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3RkYytzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtNjk1OCwzNSArODA1OSwzMSBAQAorIH0KKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICAgcm0gLWYgY29uZnRlc3QuZXIxCisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCisgZWxzZQorICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKysJYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgorQEAgLTcwNDIsNiArODEzOSw3IEBACisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisgI2lmICgoJyAnICYgMHgwRkYpID09IDB4MDIwKQorICMgZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKKyAjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCitAQCAtNzA2MSwxOCArODE1OSwyNyBAQAorICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgICBpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpCisgCXx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQorLSAgICAgIGV4aXQoMik7CistICBleGl0ICgwKTsKKysgICAgICByZXR1cm4gMjsKKysgIHJldHVybiAwOworIH0KKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICAgYWNfc3RhdHVzPSQ/CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKysgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICAgYWNfc3RhdHVzPSQ/CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorQEAgLTcwODUsMTIgKzgxOTIsMTQgQEAKKyAoIGV4aXQgJGFjX3N0YXR1cyApCisgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKyBmaQorLXJtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKysKKysKKyBmaQorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNjsgfQorIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgCisgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKK0BAIC03MTEzLDkgKzgyMjIsOSBAQAorIAkJICBpbnR0eXBlcy5oIHN0ZGludC5oIHVuaXN0ZC5oCisgZG8KKyBhc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2CistaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorK2lmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitAQCAtNzEyOSwzOCArODIzOCwzNSBAQAorICNpbmNsdWRlIDwkYWNfaGVhZGVyPgorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKyAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgICBybSAtZiBjb25mdGVzdC5lcjEKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKKyBlbHNlCisgICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKy1ldmFsICIkYXNfYWNfSGVhZGVyPW5vIgorKwlldmFsICIkYXNfYWNfSGVhZGVyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKKythY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKysJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CisgaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorICNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitAQCAtNzE3NSw5ICs4MjgxLDkgQEAKKyBmb3IgYWNfaGVhZGVyIGluIGRsZmNuLmgKKyBkbworIGFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKKy1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CisraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK0BAIC03MTkxLDM4ICs4Mjk3LDM1IEBACisgI2luY2x1ZGUgPCRhY19oZWFkZXI+CisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgIGV2YWwgIiRhc19hY19IZWFkZXI9eWVzIgorIGVsc2UKKyAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLWV2YWwgIiRhc19hY19IZWFkZXI9bm8iCisrCWV2YWwgIiRhc19hY19IZWFkZXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CistZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorK2FjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorKwkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKyBpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCisgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisgI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK0BAIC03MjQyLDEwICs4MzQ1LDkgQEAKKyAKKyAKKyAKKy0gICAgICAgICAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2hhcmVkIG9yIC0tZGlzYWJsZS1zaGFyZWQgd2FzIGdpdmVuLgorKyAgICAgICAgICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaGFyZWQgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX3NoYXJlZCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSIkZW5hYmxlX3NoYXJlZCIKKy0gIHA9JHtQQUNLQUdFLWRlZmF1bHR9CisrICBlbmFibGV2YWw9JGVuYWJsZV9zaGFyZWQ7IHA9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgICB5ZXMpIGVuYWJsZV9zaGFyZWQ9eWVzIDs7CisgICAgIG5vKSBlbmFibGVfc2hhcmVkPW5vIDs7CitAQCAtNzI2NCw3ICs4MzY2LDcgQEAKKyAgICAgZXNhYworIGVsc2UKKyAgIGVuYWJsZV9zaGFyZWQ9eWVzCistZmk7CisrZmkKKyAKKyAKKyAKK0BAIC03MjczLDEwICs4Mzc1LDEwIEBACisgCisgCisgCistICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3RhdGljIG9yIC0tZGlzYWJsZS1zdGF0aWMgd2FzIGdpdmVuLgorKworKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN0YXRpYyB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfc3RhdGljK3NldH0iID0gc2V0OyB0aGVuCistICBlbmFibGV2YWw9IiRlbmFibGVfc3RhdGljIgorLSAgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKysgIGVuYWJsZXZhbD0kZW5hYmxlX3N0YXRpYzsgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgIHllcykgZW5hYmxlX3N0YXRpYz15ZXMgOzsKKyAgICAgbm8pIGVuYWJsZV9zdGF0aWM9bm8gOzsKK0BAIC03Mjk1LDcgKzgzOTcsNyBAQAorICAgICBlc2FjCisgZWxzZQorICAgZW5hYmxlX3N0YXRpYz15ZXMKKy1maTsKKytmaQorIAorIAorIAorQEAgLTczMDUsMTMgKzg0MDcsMTQgQEAKKyAKKyAKKyAKKy0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXBpYyBvciAtLXdpdGhvdXQtcGljIHdhcyBnaXZlbi4KKysKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLXBpYyB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHt3aXRoX3BpYytzZXR9IiA9IHNldDsgdGhlbgorLSAgd2l0aHZhbD0iJHdpdGhfcGljIgorLSAgcGljX21vZGU9IiR3aXRodmFsIgorKyAgd2l0aHZhbD0kd2l0aF9waWM7IHBpY19tb2RlPSIkd2l0aHZhbCIKKyBlbHNlCisgICBwaWNfbW9kZT1kZWZhdWx0CistZmk7CisrZmkKKysKKyAKKyB0ZXN0IC16ICIkcGljX21vZGUiICYmIHBpY19tb2RlPWRlZmF1bHQKKyAKK0BAIC03MzIxLDEwICs4NDI0LDkgQEAKKyAKKyAKKyAKKy0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1mYXN0LWluc3RhbGwgb3IgLS1kaXNhYmxlLWZhc3QtaW5zdGFsbCB3YXMgZ2l2ZW4uCisrICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZmFzdC1pbnN0YWxsIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9mYXN0X2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVuYWJsZXZhbD0iJGVuYWJsZV9mYXN0X2luc3RhbGwiCistICBwPSR7UEFDS0FHRS1kZWZhdWx0fQorKyAgZW5hYmxldmFsPSRlbmFibGVfZmFzdF9pbnN0YWxsOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICAgeWVzKSBlbmFibGVfZmFzdF9pbnN0YWxsPXllcyA7OworICAgICBubykgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubyA7OworQEAgLTczNDMsNyArODQ0NSw4IEBACisgICAgIGVzYWMKKyBlbHNlCisgICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcworLWZpOworK2ZpCisrCisgCisgCisgCitAQCAtNzQwMyw4ICs4NTA2LDggQEAKKyAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorIGZpCisgCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBvYmpkaXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG9iamRpci4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igb2JqZGlyIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBvYmpkaXIuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHtsdF9jdl9vYmpkaXIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTc0MTgsOCArODUyMSw4IEBACisgZmkKKyBybWRpciAubGlicyAyPi9kZXYvbnVsbAorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X29iamRpciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X2N2X29iamRpciIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3Zfb2JqZGlyIiA+JjUKKytlY2hvICIke0VDSE9fVH0kbHRfY3Zfb2JqZGlyIiA+JjY7IH0KKyBvYmpkaXI9JGx0X2N2X29iamRpcgorIAorIAorQEAgLTc1MTEsOCArODYxNCw4IEBACisgY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKyBmaWxlX21hZ2ljKikKKyAgIGlmIHRlc3QgIiRmaWxlX21hZ2ljX2NtZCIgPSAnJE1BR0lDX0NNRCc7IHRoZW4KKy0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAke2FjX3Rvb2xfcHJlZml4fWZpbGUiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZS4uLiAkRUNIT19DIiA+JjYKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZSIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJHthY190b29sX3ByZWZpeH1maWxlLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfcGF0aF9NQUdJQ19DTUQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTc1NjQsMTEgKzg2NjcsMTEgQEAKKyAKKyBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKKyBpZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJE1BR0lDX0NNRCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JE1BR0lDX0NNRCIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQorK2VjaG8gIiR7RUNIT19UfSRNQUdJQ19DTUQiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgZmkKKyAKKyAKK0BAIC03NTc3LDggKzg2ODAsOCBAQAorIAorIGlmIHRlc3QgLXogIiRsdF9jdl9wYXRoX01BR0lDX0NNRCI7IHRoZW4KKyAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBmaWxlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBmaWxlLi4uICRFQ0hPX0MiID4mNgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZmlsZSIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZmlsZS4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X3BhdGhfTUFHSUNfQ01EK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC03NjMwLDExICs4NzMzLDExIEBACisgCisgTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCisgaWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQorLWVjaG8gIiR7RUNIT19UfSRNQUdJQ19DTUQiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKKytlY2hvICIke0VDSE9fVH0kTUFHSUNfQ01EIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorIGZpCisgCisgCitAQCAtNzcxNCw4ICs4ODE3LDggQEAKKyBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9JyAtZm5vLWJ1aWx0aW4nCisgCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMuLi4gJEVDSE9fQyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucy4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC03NzMyLDExICs4ODM1LDExIEBACisgICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZTo3NzM1OiAkbHRfY29tcGlsZVwiIiA+JjUpCisrICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjg4Mzg6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgIGFjX3N0YXR1cz0kPworICAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICAgZWNobyAiJGFzX21lOjc3Mzk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgIGVjaG8gIiRhc19tZTo4ODQyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorQEAgLTc3NDksOCArODg1Miw4IEBACisgICAgJFJNIGNvbmZ0ZXN0KgorIAorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjUKKytlY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNjsgfQorIAorIGlmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID0geHllczsgdGhlbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiCitAQCAtNzc2OSw4ICs4ODcyLDggQEAKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KKyAKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gJEVDSE9fQyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gJEVDSE9fQyIgPiY2OyB9CisgCisgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworQEAgLTgwNDEsOCArOTE0NCw4IEBACisgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgIDs7CisgZXNhYworLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKyAKKyAKKyAKK0BAIC04MDUzLDggKzkxNTYsOCBAQAorICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyAjCisgaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljIjsgdGhlbgorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWMgd29ya3MiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3Jrcy4uLiAkRUNIT19DIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWMgd29ya3MiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3Jrcy4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC04MDcxLDExICs5MTc0LDExIEBACisgICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZTo4MDc0OiAkbHRfY29tcGlsZVwiIiA+JjUpCisrICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjkxNzc6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgIGFjX3N0YXR1cz0kPworICAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICAgZWNobyAiJGFzX21lOjgwNzg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgIGVjaG8gIiRhc19tZTo5MTgxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorQEAgLTgwODgsOCArOTE5MSw4IEBACisgICAgJFJNIGNvbmZ0ZXN0KgorIAorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjUKKytlY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID4mNjsgfQorIAorIGlmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID0geHllczsgdGhlbgorICAgICBjYXNlICRsdF9wcm9nX2NvbXBpbGVyX3BpYyBpbgorQEAgLTgxMTIsOCArOTIxNSw4IEBACisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorICMKKyB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICRFQ0hPX0MiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTgxNDAsOCArOTI0Myw4IEBACisgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjY7IH0KKyAKKyBpZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA9IHh5ZXM7IHRoZW4KKyAgICAgOgorQEAgLTgxNTUsOCArOTI1OCw4IEBACisgCisgCisgCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX28rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTgxNzYsMTEgKzkyNzksMTEgQEAKKyAgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCistICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjgxNzk6ICRsdF9jb21waWxlXCIiID4mNSkKKysgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6OTI4MjogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgIGFjX3N0YXR1cz0kPworICAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQorLSAgIGVjaG8gIiRhc19tZTo4MTgzOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgICBlY2hvICIkYXNfbWU6OTI4NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKyAgICB0aGVuCisgICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorQEAgLTgyMDIsMTYgKzkzMDUsMTYgQEAKKyAgICAkUk0gY29uZnRlc3QqCisgCisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNQorLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNQorK2VjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY2OyB9CisgCisgCisgCisgCisgCisgCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX28rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTgyMzEsMTEgKzkzMzQsMTEgQEAKKyAgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCistICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjgyMzQ6ICRsdF9jb21waWxlXCIiID4mNSkKKysgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6OTMzNzogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgIGFjX3N0YXR1cz0kPworICAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQorLSAgIGVjaG8gIiRhc19tZTo4MjM4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgICBlY2hvICIkYXNfbWU6OTM0MTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKyAgICB0aGVuCisgICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorQEAgLTgyNTcsOCArOTM2MCw4IEBACisgICAgJFJNIGNvbmZ0ZXN0KgorIAorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjUKKytlY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNjsgfQorIAorIAorIAorQEAgLTgyNjYsMTYgKzkzNjksMTYgQEAKKyBoYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCisgaWYgdGVzdCAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgorICAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAkRUNIT19DIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MuLi4gJEVDSE9fQyIgPiY2OyB9CisgICBoYXJkX2xpbmtzPXllcworICAgJFJNIGNvbmZ0ZXN0KgorICAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgIHRvdWNoIGNvbmZ0ZXN0LmEKKyAgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KKyAgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGhhcmRfbGlua3MiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGhhcmRfbGlua3MiID4mNjsgfQorICAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjI7fQorQEAgLTgyOTAsOCArOTM5Myw4IEBACisgCisgCisgCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2OyB9CisgCisgICBydW5wYXRoX3Zhcj0KKyAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPQorQEAgLTg3NDgsMjcgKzk4NTEsMjMgQEAKKyB9CisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKyAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgICBybSAtZiBjb25mdGVzdC5lcjEKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorIAorIGx0X2FpeF9saWJwYXRoX3NlZD0nCisgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKK0BAIC04Nzg2LDggKzk4ODUsMTAgQEAKKyAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorKworIGZpCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKK0BAIC04ODE3LDI3ICs5OTE4LDIzIEBACisgfQorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICAgcm0gLWYgY29uZnRlc3QuZXIxCisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKysgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAKKyBsdF9haXhfbGlicGF0aF9zZWQ9JworICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CitAQCAtODg1NSw4ICs5OTUyLDEwIEBACisgICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKysKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCitAQCAtOTA3MywzNSArMTAxNzIsMzMgQEAKKyBpbnQgZm9vKHZvaWQpIHt9CisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKyAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgICBybSAtZiBjb25mdGVzdC5lcjEKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAKKyBlbHNlCisgICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKysKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorICAgICAgIGVsc2UKK0BAIC05MzU4LDggKzEwNDU1LDggQEAKKyAgICAgZmkKKyAgIGZpCisgCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGxkX3NobGlicyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGxkX3NobGlicyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGRfc2hsaWJzIiA+JjUKKytlY2hvICIke0VDSE9fVH0kbGRfc2hsaWJzIiA+JjY7IH0KKyB0ZXN0ICIkbGRfc2hsaWJzIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKyAKKyB3aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKK0BAIC05Mzk1LDQ2ICsxMDQ5Miw1MiBAQAorICAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKKyAgICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKKyAgICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KKy0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAkRUNIT19DIiA+JjYKKy0gICAgICAkUk0gY29uZnRlc3QqCistICAgICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisrICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAkRUNIT19DIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgICRSTSBjb25mdGVzdCoKKysJZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgCistICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisrCWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gMj5jb25mdGVzdC5lcnI7IHRoZW4KKy0gICAgICAgIHNvbmFtZT1jb25mdGVzdAorLSAgICAgICAgbGliPWNvbmZ0ZXN0CistICAgICAgICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKKy0gICAgICAgIGRlcGxpYnM9CistICAgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bAorLQlwaWNfZmxhZz0kbHRfcHJvZ19jb21waWxlcl9waWMKKy0gICAgICAgIGNvbXBpbGVyX2ZsYWdzPS12CistICAgICAgICBsaW5rZXJfZmxhZ3M9LXYKKy0gICAgICAgIHZlcnN0cmluZz0KKy0gICAgICAgIG91dHB1dF9vYmpkaXI9LgorLSAgICAgICAgbGlibmFtZT1jb25mdGVzdAorLSAgICAgICAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKy0gICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPQorLSAgICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYXJjaGl2ZV9jbWRzIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiKSA+JjUKKysJICBzb25hbWU9Y29uZnRlc3QKKysJICBsaWI9Y29uZnRlc3QKKysJICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKKysJICBkZXBsaWJzPQorKwkgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsCisrCSAgcGljX2ZsYWc9JGx0X3Byb2dfY29tcGlsZXJfcGljCisrCSAgY29tcGlsZXJfZmxhZ3M9LXYKKysJICBsaW5rZXJfZmxhZ3M9LXYKKysJICB2ZXJzdHJpbmc9CisrCSAgb3V0cHV0X29iamRpcj0uCisrCSAgbGlibmFtZT1jb25mdGVzdAorKwkgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnCisrCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9CisrCSAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYXJjaGl2ZV9jbWRzIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiKSA+JjUKKyAgIChldmFsICRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKy0gICAgICAgIHRoZW4KKy0JICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubworLSAgICAgICAgZWxzZQorLQkgIGFyY2hpdmVfY21kc19uZWVkX2xjPXllcworLSAgICAgICAgZmkKKy0gICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCistICAgICAgZWxzZQorLSAgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CistICAgICAgZmkKKy0gICAgICAkUk0gY29uZnRlc3QqCistICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFyY2hpdmVfY21kc19uZWVkX2xjIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYXJjaGl2ZV9jbWRzX25lZWRfbGMiID4mNgorKwkgIHRoZW4KKysJICAgIGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjPW5vCisrCSAgZWxzZQorKwkgICAgbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGM9eWVzCisrCSAgZmkKKysJICBhbGxvd191bmRlZmluZWRfZmxhZz0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZworKwllbHNlCisrCSAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisrCWZpCisrCSRSTSBjb25mdGVzdCoKKysKKytmaQorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjIiA+JjUKKytlY2hvICIke0VDSE9fVH0kbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGMiID4mNjsgfQorKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYworICAgICAgIDs7CisgICAgIGVzYWMKKyAgIGZpCitAQCAtOTU5Nyw4ICsxMDcwMCw4IEBACisgCisgCisgCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAkRUNIT19DIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MuLi4gJEVDSE9fQyIgPiY2OyB9CisgCisgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIGNhc2UgJGhvc3Rfb3MgaW4KK0BAIC0xMDAxNCwxMiArMTExMTcsMTcgQEAKKyAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCisgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisrCisgICAjIFNvbWUgYmludXRpbHMgbGQgYXJlIHBhdGNoZWQgdG8gc2V0IERUX1JVTlBBVEgKKy0gIHNhdmVfTERGTEFHUz0kTERGTEFHUworLSAgc2F2ZV9saWJkaXI9JGxpYmRpcgorLSAgZXZhbCAibGliZGlyPS9mb287IHdsPVwiJGx0X3Byb2dfY29tcGlsZXJfd2xcIjsgXAorLSAgICAgICBMREZMQUdTPVwiXCRMREZMQUdTICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysgIGlmIHRlc3QgIiR7bHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworKyAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKysgICAgc2F2ZV9saWJkaXI9JGxpYmRpcgorKyAgICBldmFsICJsaWJkaXI9L2Zvbzsgd2w9XCIkbHRfcHJvZ19jb21waWxlcl93bFwiOyBcCisrCSBMREZMQUdTPVwiXCRMREZMQUdTICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCisrICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTEwMDM1LDQwICsxMTE0Myw0MiBAQAorIH0KKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisrICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICBpZiAgKCRPQkpEVU1QIC1wIGNvbmZ0ZXN0JGFjX2V4ZWV4dCkgMj4vZGV2L251bGwgfCBncmVwICJSVU5QQVRILiokbGliZGlyIiA+L2Rldi9udWxsOyB0aGVuCistICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICBsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgZmkKKyAKKyBlbHNlCisgICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKysKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKy0gIGxpYmRpcj0kc2F2ZV9saWJkaXIKKysgICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCisrICAgIGxpYmRpcj0kc2F2ZV9saWJkaXIKKysKKytmaQorKworKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKKyAKKyAgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCitAQCAtMTAyNzgsOCArMTEzODgsOCBAQAorICAgZHluYW1pY19saW5rZXI9bm8KKyAgIDs7CisgZXNhYworLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRkeW5hbWljX2xpbmtlciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGR5bmFtaWNfbGlua2VyIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRkeW5hbWljX2xpbmtlciIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGR5bmFtaWNfbGlua2VyIiA+JjY7IH0KKyB0ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworIAorIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKK0BAIC0xMDM4MCw4ICsxMTQ5MCw4IEBACisgCisgCisgCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICRFQ0hPX0MiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICRFQ0hPX0MiID4mNjsgfQorIGhhcmRjb2RlX2FjdGlvbj0KKyBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfHwKKyAgICB0ZXN0IC1uICIkcnVucGF0aF92YXIiIHx8CitAQCAtMTA0MDUsOCArMTE1MTUsOCBAQAorICAgIyBkaXJlY3Rvcmllcy4KKyAgIGhhcmRjb2RlX2FjdGlvbj11bnN1cHBvcnRlZAorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGhhcmRjb2RlX2FjdGlvbiIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGhhcmRjb2RlX2FjdGlvbiIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZGNvZGVfYWN0aW9uIiA+JjUKKytlY2hvICIke0VDSE9fVH0kaGFyZGNvZGVfYWN0aW9uIiA+JjY7IH0KKyAKKyBpZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uIiA9IHJlbGluayB8fAorICAgIHRlc3QgIiRpbmhlcml0X3JwYXRoIiA9IHllczsgdGhlbgorQEAgLTEwNDUwLDggKzExNTYwLDggQEAKKyAKKyAgIGRhcndpbiopCisgICAjIGlmIGxpYmRsIGlzIGluc3RhbGxlZCB3ZSBuZWVkIHRvIGxpbmsgYWdhaW5zdCBpdAorLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAkRUNIT19DIiA+JjYKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X2xpYl9kbF9kbG9wZW4rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTEwNDY0LDU2ICsxMTU3NCw1MyBAQAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCistLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKysvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKysgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKysgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKKyAjZW5kaWYKKy0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyBjaGFyIGRsb3BlbiAoKTsKKyBpbnQKKyBtYWluICgpCisgeworLWRsb3BlbiAoKTsKKytyZXR1cm4gZGxvcGVuICgpOworICAgOworICAgcmV0dXJuIDA7CisgfQorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICAgcm0gLWYgY29uZnRlc3QuZXIxCisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKysgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCisgZWxzZQorICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistYWNfY3ZfbGliX2RsX2Rsb3Blbj1ubworKwlhY19jdl9saWJfZGxfZGxvcGVuPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQorIGlmIHRlc3QgJGFjX2N2X2xpYl9kbF9kbG9wZW4gPSB5ZXM7IHRoZW4KKyAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCIKKyBlbHNlCitAQCAtMTA1MjcsOCArMTE2MzQsOCBAQAorICAgICA7OworIAorICAgKikKKy0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzaGxfbG9hZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc2hsX2xvYWQuLi4gJEVDSE9fQyIgPiY2CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzaGxfbG9hZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc2hsX2xvYWQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9mdW5jX3NobF9sb2FkK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0xMDU1NSw3MyArMTE2NjIsNjQgQEAKKyAKKyAjdW5kZWYgc2hsX2xvYWQKKyAKKy0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorLXsKKyAjZW5kaWYKKy0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyBjaGFyIHNobF9sb2FkICgpOworIC8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCistI2lmIGRlZmluZWQgKF9fc3R1Yl9zaGxfbG9hZCkgfHwgZGVmaW5lZCAoX19zdHViX19fc2hsX2xvYWQpCisrI2lmIGRlZmluZWQgX19zdHViX3NobF9sb2FkIHx8IGRlZmluZWQgX19zdHViX19fc2hsX2xvYWQKKyBjaG9rZSBtZQorLSNlbHNlCistY2hhciAoKmYpICgpID0gc2hsX2xvYWQ7CistI2VuZGlmCistI2lmZGVmIF9fY3BsdXNwbHVzCistfQorICNlbmRpZgorIAorIGludAorIG1haW4gKCkKKyB7CistcmV0dXJuIGYgIT0gc2hsX2xvYWQ7CisrcmV0dXJuIHNobF9sb2FkICgpOworICAgOworICAgcmV0dXJuIDA7CisgfQorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICAgcm0gLWYgY29uZnRlc3QuZXIxCisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKysgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgIGFjX2N2X2Z1bmNfc2hsX2xvYWQ9eWVzCisgZWxzZQorICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistYWNfY3ZfZnVuY19zaGxfbG9hZD1ubworKwlhY19jdl9mdW5jX3NobF9sb2FkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfc2hsX2xvYWQiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX3NobF9sb2FkIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX3NobF9sb2FkIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19zaGxfbG9hZCIgPiY2OyB9CisgaWYgdGVzdCAkYWNfY3ZfZnVuY19zaGxfbG9hZCA9IHllczsgdGhlbgorICAgbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIKKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNobF9sb2FkIGluIC1sZGxkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZC4uLiAkRUNIT19DIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9saWJfZGxkX3NobF9sb2FkK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0xMDYzNCw2MSArMTE3MzIsNTggQEAKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisrLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisrICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisrICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCisgI2VuZGlmCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisgY2hhciBzaGxfbG9hZCAoKTsKKyBpbnQKKyBtYWluICgpCisgeworLXNobF9sb2FkICgpOworK3JldHVybiBzaGxfbG9hZCAoKTsKKyAgIDsKKyAgIHJldHVybiAwOworIH0KKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisrICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICBhY19jdl9saWJfZGxkX3NobF9sb2FkPXllcworIGVsc2UKKyAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLWFjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9bm8KKysJYWNfY3ZfbGliX2RsZF9zaGxfbG9hZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA+JjY7IH0KKyBpZiB0ZXN0ICRhY19jdl9saWJfZGxkX3NobF9sb2FkID0geWVzOyB0aGVuCisgICBsdF9jdl9kbG9wZW49InNobF9sb2FkIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbGQiCisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4iID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsb3Blbi4uLiAkRUNIT19DIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4iID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsb3Blbi4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X2Z1bmNfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0xMDcxNSw3MyArMTE4MTAsNjQgQEAKKyAKKyAjdW5kZWYgZGxvcGVuCisgCistLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKysvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKysgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKysgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKKy17CisgI2VuZGlmCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisgY2hhciBkbG9wZW4gKCk7CisgLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKy0jaWYgZGVmaW5lZCAoX19zdHViX2Rsb3BlbikgfHwgZGVmaW5lZCAoX19zdHViX19fZGxvcGVuKQorKyNpZiBkZWZpbmVkIF9fc3R1Yl9kbG9wZW4gfHwgZGVmaW5lZCBfX3N0dWJfX19kbG9wZW4KKyBjaG9rZSBtZQorLSNlbHNlCistY2hhciAoKmYpICgpID0gZGxvcGVuOworLSNlbmRpZgorLSNpZmRlZiBfX2NwbHVzcGx1cworLX0KKyAjZW5kaWYKKyAKKyBpbnQKKyBtYWluICgpCisgeworLXJldHVybiBmICE9IGRsb3BlbjsKKytyZXR1cm4gZGxvcGVuICgpOworICAgOworICAgcmV0dXJuIDA7CisgfQorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICAgcm0gLWYgY29uZnRlc3QuZXIxCisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKysgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgIGFjX2N2X2Z1bmNfZGxvcGVuPXllcworIGVsc2UKKyAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLWFjX2N2X2Z1bmNfZGxvcGVuPW5vCisrCWFjX2N2X2Z1bmNfZGxvcGVuPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfZGxvcGVuIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19kbG9wZW4iID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfZGxvcGVuIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19kbG9wZW4iID4mNjsgfQorIGlmIHRlc3QgJGFjX2N2X2Z1bmNfZGxvcGVuID0geWVzOyB0aGVuCisgICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAkRUNIT19DIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9saWJfZGxfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0xMDc5NCw2MSArMTE4ODAsNTggQEAKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisrLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisrICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisrICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCisgI2VuZGlmCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisgY2hhciBkbG9wZW4gKCk7CisgaW50CisgbWFpbiAoKQorIHsKKy1kbG9wZW4gKCk7CisrcmV0dXJuIGRsb3BlbiAoKTsKKyAgIDsKKyAgIHJldHVybiAwOworIH0KKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisrICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICBhY19jdl9saWJfZGxfZGxvcGVuPXllcworIGVsc2UKKyAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLWFjX2N2X2xpYl9kbF9kbG9wZW49bm8KKysJYWNfY3ZfbGliX2RsX2Rsb3Blbj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KKyBpZiB0ZXN0ICRhY19jdl9saWJfZGxfZGxvcGVuID0geWVzOyB0aGVuCisgICBsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiCisgZWxzZQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkLi4uICRFQ0hPX0MiID4mNgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9saWJfc3ZsZF9kbG9wZW4rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTEwODYxLDYxICsxMTk0NCw1OCBAQAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCistLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKysvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKysgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKysgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKKyAjZW5kaWYKKy0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyBjaGFyIGRsb3BlbiAoKTsKKyBpbnQKKyBtYWluICgpCisgeworLWRsb3BlbiAoKTsKKytyZXR1cm4gZGxvcGVuICgpOworICAgOworICAgcmV0dXJuIDA7CisgfQorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICAgcm0gLWYgY29uZnRlc3QuZXIxCisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKysgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgIGFjX2N2X2xpYl9zdmxkX2Rsb3Blbj15ZXMKKyBlbHNlCisgICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKy1hY19jdl9saWJfc3ZsZF9kbG9wZW49bm8KKysJYWNfY3ZfbGliX3N2bGRfZGxvcGVuPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPiY2OyB9CisgaWYgdGVzdCAkYWNfY3ZfbGliX3N2bGRfZGxvcGVuID0geWVzOyB0aGVuCisgICBsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sc3ZsZCIKKyBlbHNlCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbGRfbGluayBpbiAtbGRsZC4uLiAkRUNIT19DIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbGRfbGluayBpbiAtbGRsZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9saWJfZGxkX2RsZF9saW5rK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0xMDkyOCw1NiArMTIwMDgsNTMgQEAKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisrLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisrICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisrICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCisgI2VuZGlmCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisgY2hhciBkbGRfbGluayAoKTsKKyBpbnQKKyBtYWluICgpCisgeworLWRsZF9saW5rICgpOworK3JldHVybiBkbGRfbGluayAoKTsKKyAgIDsKKyAgIHJldHVybiAwOworIH0KKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCistICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisrICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICBhY19jdl9saWJfZGxkX2RsZF9saW5rPXllcworIGVsc2UKKyAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLWFjX2N2X2xpYl9kbGRfZGxkX2xpbms9bm8KKysJYWNfY3ZfbGliX2RsZF9kbGRfbGluaz1ubworIGZpCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA+JjY7IH0KKyBpZiB0ZXN0ICRhY19jdl9saWJfZGxkX2RsZF9saW5rID0geWVzOyB0aGVuCisgICBsdF9jdl9kbG9wZW49ImRsZF9saW5rIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbGQiCisgZmkKK0BAIC0xMTAxNyw4ICsxMjA5NCw4IEBACisgICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgIExJQlM9IiRsdF9jdl9kbG9wZW5fbGlicyAkTElCUyIKKyAKKy0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICRFQ0hPX0MiID4mNgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZiIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZi4uLiAkRUNIT19DIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X2Rsb3Blbl9zZWxmK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0xMTAyOCw3ICsxMjEwNSw3IEBACisgICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKy0jbGluZSAxMTAzMSAiY29uZmlndXJlIgorKyNsaW5lIDEyMTA4ICJjb25maWd1cmUiCisgI2luY2x1ZGUgImNvbmZkZWZzLmgiCisgCisgI2lmIEhBVkVfRExGQ05fSAorQEAgLTExMTA4LDEzICsxMjE4NSwxMyBAQAorIAorIAorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2Rsb3Blbl9zZWxmIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kbHRfY3ZfZGxvcGVuX3NlbGYiID4mNgorK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2Rsb3Blbl9zZWxmIiA+JjUKKytlY2hvICIke0VDSE9fVH0kbHRfY3ZfZGxvcGVuX3NlbGYiID4mNjsgfQorIAorICAgICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3Blbl9zZWxmIiA9IHh5ZXM7IHRoZW4KKyAgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKKy0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYuLi4gJEVDSE9fQyIgPiY2CisrICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYuLi4gJEVDSE9fQyIgPiY2OyB9CisgaWYgdGVzdCAiJHtsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTExMTI0LDcgKzEyMjAxLDcgQEAKKyAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorLSNsaW5lIDExMTI3ICJjb25maWd1cmUiCisrI2xpbmUgMTIyMDQgImNvbmZpZ3VyZSIKKyAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyAKKyAjaWYgSEFWRV9ETEZDTl9ICitAQCAtMTEyMDQsOCArMTIyODEsOCBAQAorIAorIAorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY2CisreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjUKKytlY2hvICIke0VDSE9fVH0kbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjY7IH0KKyAgICAgZmkKKyAKKyAgICAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgorQEAgLTExMjQzLDEzICsxMjMyMCwxMyBAQAorIAorIHN0cmlwbGliPQorIG9sZF9zdHJpcGxpYj0KKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZS4uLiAkRUNIT19DIiA+JjYKKyt7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlLi4uICRFQ0hPX0MiID4mNjsgfQorIGlmIHRlc3QgLW4gIiRTVFJJUCIgJiYgJFNUUklQIC1WIDI+JjEgfCAkR1JFUCAiR05VIHN0cmlwIiA+L2Rldi9udWxsOyB0aGVuCisgICB0ZXN0IC16ICIkb2xkX3N0cmlwbGliIiAmJiBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLWRlYnVnIgorICAgdGVzdCAteiAiJHN0cmlwbGliIiAmJiBzdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtdW5uZWVkZWQiCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KKyBlbHNlCisgIyBGSVhNRSAtIGluc2VydCBzb21lIHJlYWwgdGVzdHMsIGhvc3Rfb3MgaXNuJ3QgcmVhbGx5IGdvb2QgZW5vdWdoCisgICBjYXNlICRob3N0X29zIGluCitAQCAtMTEyNTcsMTYgKzEyMzM0LDE2IEBACisgICAgIGlmIHRlc3QgLW4gIiRTVFJJUCIgOyB0aGVuCisgICAgICAgc3RyaXBsaWI9IiRTVFJJUCAteCIKKyAgICAgICBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtUyIKKy0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2CisrICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CisgICAgIGVsc2UKKy0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorKyAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyAgICAgZmkKKyAgICAgOzsKKyAgICopCistICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyAgICAgOzsKKyAgIGVzYWMKKyBmaQorQEAgLTExMjgzLDEzICsxMjM2MCwxMyBAQAorIAorIAorICAgIyBSZXBvcnQgd2hpY2ggbGlicmFyeSB0eXBlcyB3aWxsIGFjdHVhbGx5IGJlIGJ1aWx0CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRjYW5fYnVpbGRfc2hhcmVkIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kY2FuX2J1aWxkX3NoYXJlZCIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkY2FuX2J1aWxkX3NoYXJlZCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGNhbl9idWlsZF9zaGFyZWQiID4mNjsgfQorIAorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQorICAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisgCisgICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKK0BAIC0xMTMwOSwxNSArMTIzODYsMTUgQEAKKyAgICAgZmkKKyAgICAgOzsKKyAgIGVzYWMKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVfc2hhcmVkIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kZW5hYmxlX3NoYXJlZCIgPiY2CisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVfc2hhcmVkIiA+JjUKKytlY2hvICIke0VDSE9fVH0kZW5hYmxlX3NoYXJlZCIgPiY2OyB9CisgCistICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2OyB9CisgICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KKyAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGVuYWJsZV9zdGF0aWMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRlbmFibGVfc3RhdGljIiA+JjYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGVuYWJsZV9zdGF0aWMiID4mNQorK2VjaG8gIiR7RUNIT19UfSRlbmFibGVfc3RhdGljIiA+JjY7IH0KKyAKKyAKKyAKK0BAIC0xMTM0Myw3ICsxMjQyMCw3IEBACisgCisgCisgCistICAgICAgICAgICAgICAgICAgYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIGxpYnRvb2wiCisrICAgICAgICBhY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgbGlidG9vbCIKKyAKKyAKKyAKK0BAIC0xMTM1NSwxMDEgKzEyNDMyLDU1IEBACisgCisgaWYgdGVzdCAtbiAiJHtzeXNfZGlyfSI7IHRoZW4KKyAgIGNhc2UgJHtzeXNfZGlyfSBpbgorLQlhMjlraGlmKQorLQorLXN1YmRpcnM9IiRzdWJkaXJzIGEyOWtoaWYiCisrCWEyOWtoaWYpIHN1YmRpcnM9IiRzdWJkaXJzIGEyOWtoaWYiCisgIDs7CistCWFyYykKKy0KKy1zdWJkaXJzPSIkc3ViZGlycyBhcmMiCisrCWFyYykgc3ViZGlycz0iJHN1YmRpcnMgYXJjIgorICA7OworLQlhcm0pCistCistc3ViZGlycz0iJHN1YmRpcnMgYXJtIgorKwlhcm0pIHN1YmRpcnM9IiRzdWJkaXJzIGFybSIKKyAgOzsKKy0JZDEwdikKKy0KKy1zdWJkaXJzPSIkc3ViZGlycyBkMTB2IgorKwlhdnIzMikgc3ViZGlycz0iJHN1YmRpcnMgYXZyMzIiCisgIDs7CistCWRlY3N0YXRpb24pCistCistc3ViZGlycz0iJHN1YmRpcnMgZGVjc3RhdGlvbiIKKysJZDEwdikgc3ViZGlycz0iJHN1YmRpcnMgZDEwdiIKKyAgOzsKKy0JaDgzMDBobXMpCistCistc3ViZGlycz0iJHN1YmRpcnMgaDgzMDBobXMiCisrCWRlY3N0YXRpb24pIHN1YmRpcnM9IiRzdWJkaXJzIGRlY3N0YXRpb24iCisgIDs7CistCWg4NTAwaG1zKQorLQorLXN1YmRpcnM9IiRzdWJkaXJzIGg4NTAwaG1zIgorKwloODMwMGhtcykgc3ViZGlycz0iJHN1YmRpcnMgaDgzMDBobXMiCisgIDs7CistCWxpbnV4KQorLQorLXN1YmRpcnM9IiRzdWJkaXJzIGxpbnV4IgorKwloODUwMGhtcykgc3ViZGlycz0iJHN1YmRpcnMgaDg1MDBobXMiCisgIDs7CistCW04OGtidWcpCistCistc3ViZGlycz0iJHN1YmRpcnMgbTg4a2J1ZyIKKysJbGludXgpIHN1YmRpcnM9IiRzdWJkaXJzIGxpbnV4IgorICA7OworLQltbWl4d2FyZSkKKy0KKy1zdWJkaXJzPSIkc3ViZGlycyBtbWl4d2FyZSIKKysJbTg4a2J1Zykgc3ViZGlycz0iJHN1YmRpcnMgbTg4a2J1ZyIKKyAgOzsKKy0JbmV0d2FyZSkKKy0KKy1zdWJkaXJzPSIkc3ViZGlycyBuZXR3YXJlIgorKwltbWl4d2FyZSkgc3ViZGlycz0iJHN1YmRpcnMgbW1peHdhcmUiCisgIDs7CistCXJkb3MpCistCistc3ViZGlycz0iJHN1YmRpcnMgcmRvcyIKKysJbmV0d2FyZSkgc3ViZGlycz0iJHN1YmRpcnMgbmV0d2FyZSIKKyAgOzsKKy0JcnRlbXMpCistCistc3ViZGlycz0iJHN1YmRpcnMgcnRlbXMiCisrCXJkb3MpIHN1YmRpcnM9IiRzdWJkaXJzIHJkb3MiCisgIDs7CistCXNoKQorLQorLXN1YmRpcnM9IiRzdWJkaXJzIHNoIgorKwlydGVtcykgc3ViZGlycz0iJHN1YmRpcnMgcnRlbXMiCisgIDs7CistCXNwYXJjNjQpCistCistc3ViZGlycz0iJHN1YmRpcnMgc3BhcmM2NCIKKysJc2gpIHN1YmRpcnM9IiRzdWJkaXJzIHNoIgorICA7OworLQlzdW40KQorLQorLXN1YmRpcnM9IiRzdWJkaXJzIHN1bjQiCisrCXNwYXJjNjQpIHN1YmRpcnM9IiRzdWJkaXJzIHNwYXJjNjQiCisgIDs7CistCXN5c21lYykKKy0KKy1zdWJkaXJzPSIkc3ViZGlycyBzeXNtZWMiCisrCXN1bjQpIHN1YmRpcnM9IiRzdWJkaXJzIHN1bjQiCisgIDs7CistCXN5c25lYzgxMCkKKy0KKy1zdWJkaXJzPSIkc3ViZGlycyBzeXNuZWM4MTAiCisrCXN5c21lYykgc3ViZGlycz0iJHN1YmRpcnMgc3lzbWVjIgorICA7OworLQlzeXNuZWN2ODUwKQorLQorLXN1YmRpcnM9IiRzdWJkaXJzIHN5c25lY3Y4NTAiCisrCXN5c25lYzgxMCkgc3ViZGlycz0iJHN1YmRpcnMgc3lzbmVjODEwIgorICA7OworLQlzeXN2aTM4NikKKy0KKy1zdWJkaXJzPSIkc3ViZGlycyBzeXN2aTM4NiIKKysJc3lzbmVjdjg1MCkgc3ViZGlycz0iJHN1YmRpcnMgc3lzbmVjdjg1MCIKKyAgOzsKKy0Jc3lzdm5lY3Y3MCkKKy0KKy1zdWJkaXJzPSIkc3ViZGlycyBzeXN2bmVjdjcwIgorKwlzeXN2aTM4Nikgc3ViZGlycz0iJHN1YmRpcnMgc3lzdmkzODYiCisgIDs7CistCXRpYzgwKQorLQorLXN1YmRpcnM9IiRzdWJkaXJzIHRpYzgwIgorKwlzeXN2bmVjdjcwKSBzdWJkaXJzPSIkc3ViZGlycyBzeXN2bmVjdjcwIgorICA7OworLQl3NjUpCistCistc3ViZGlycz0iJHN1YmRpcnMgdzY1IgorKwl0aWM4MCkgc3ViZGlycz0iJHN1YmRpcnMgdGljODAiCisgIDs7CistCXo4a3NpbSkKKy0KKy1zdWJkaXJzPSIkc3ViZGlycyB6OGtzaW0iCisrCXc2NSkgc3ViZGlycz0iJHN1YmRpcnMgdzY1IgorKyA7OworKwl6OGtzaW0pIHN1YmRpcnM9IiRzdWJkaXJzIHo4a3NpbSIKKyAgOzsKKyAgIGVzYWM7CisgZmkKK0BAIC0xMTQ3MSw3ICsxMjUwMiw3IEBACisgZmkKKyAKKyAKKy0gICAgICAgICAgYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1ha2VmaWxlIgorK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBNYWtlZmlsZSIKKyAKKyBjYXQgPmNvbmZjYWNoZSA8PFxfQUNFT0YKKyAjIFRoaXMgZmlsZSBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBjb25maWd1cmUKK0BAIC0xMTQ5MSwzOSArMTI1MjIsNTggQEAKKyAKKyAjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorICMgYnV0IHdlIGtub3cgb2Ygbm8gd29ya2Fyb3VuZCB0aGF0IGlzIHNpbXBsZSwgcG9ydGFibGUsIGFuZCBlZmZpY2llbnQuCistIyBTbywgZG9uJ3QgcHV0IG5ld2xpbmVzIGluIGNhY2hlIHZhcmlhYmxlcycgdmFsdWVzLgorKyMgU28sIHdlIGtpbGwgdmFyaWFibGVzIGNvbnRhaW5pbmcgbmV3bGluZXMuCisgIyBVbHRyaXggc2ggc2V0IHdyaXRlcyB0byBzdGRlcnIgYW5kIGNhbid0IGJlIHJlZGlyZWN0ZWQgZGlyZWN0bHksCisgIyBhbmQgc2V0cyB0aGUgaGlnaCBiaXQgaW4gdGhlIGNhY2hlIGZpbGUgdW5sZXNzIHdlIGFzc2lnbiB0byB0aGUgdmFycy4KKy17CisrKAorKyAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdgOyBkbworKyAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKysgICAgY2FzZSAkYWNfdmFsIGluICMoCisrICAgICoke2FzX25sfSopCisrICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisrICAgICAgKl9jdl8qKSB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBDYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZS4iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogQ2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUuIiA+JjI7fSA7OworKyAgICAgIGVzYWMKKysgICAgICBjYXNlICRhY192YXIgaW4gIygKKysgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisrICAgICAgKikgJGFzX3Vuc2V0ICRhY192YXIgOzsKKysgICAgICBlc2FjIDs7CisrICAgIGVzYWMKKysgIGRvbmUKKysKKyAgIChzZXQpIDI+JjEgfAorLSAgICBjYXNlIGAoYWNfc3BhY2U9JyAnOyBzZXQgfCBncmVwIGFjX3NwYWNlKSAyPiYxYCBpbgorLSAgICAqYWNfc3BhY2U9XCAqKQorKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9JyAnOyBzZXQpIDI+JjFgIGluICMoCisrICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKKyAgICAgICAjIGBzZXQnIGRvZXMgbm90IHF1b3RlIGNvcnJlY3RseSwgc28gYWRkIHF1b3RlcyAoZG91YmxlLXF1b3RlCisgICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXCkuCisgICAgICAgc2VkIC1uIFwKKyAJInMvJy8nXFxcXCcnL2c7CisgCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgorLSAgICAgIDs7CisrICAgICAgOzsgIygKKyAgICAgKikKKyAgICAgICAjIGBzZXQnIHF1b3RlcyBjb3JyZWN0bHkgYXMgcmVxdWlyZWQgYnkgUE9TSVgsIHNvIGRvIG5vdCBhZGQgcXVvdGVzLgorLSAgICAgIHNlZCAtbiBcCistCSJzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPVxcMi9wIgorKyAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCisgICAgICAgOzsKKy0gICAgZXNhYzsKKy19IHwKKysgICAgZXNhYyB8CisrICAgIHNvcnQKKyspIHwKKyAgIHNlZCAnCisrICAgICAvXmFjX2N2X2Vudl8vYiBlbmQKKyAgICAgIHQgY2xlYXIKKy0gICAgIDogY2xlYXIKKysgICAgIDpjbGVhcgorICAgICAgcy9eXChbXj1dKlwpPVwoLipbe31dLipcKSQvdGVzdCAiJHtcMStzZXR9IiA9IHNldCB8fCAmLworICAgICAgdCBlbmQKKy0gICAgIC9eYWNfY3ZfZW52LyFzL15cKFtePV0qXCk9XCguKlwpJC9cMT0ke1wxPVwyfS8KKy0gICAgIDogZW5kJyA+PmNvbmZjYWNoZQorLWlmIGRpZmYgJGNhY2hlX2ZpbGUgY29uZmNhY2hlID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCistICBpZiB0ZXN0IC13ICRjYWNoZV9maWxlOyB0aGVuCistICAgIHRlc3QgIngkY2FjaGVfZmlsZSIgIT0gIngvZGV2L251bGwiICYmIGVjaG8gInVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIgorKyAgICAgcy9eXChbXj1dKlwpPVwoLipcKSQvXDE9JHtcMT1cMn0vCisrICAgICA6ZW5kJyA+PmNvbmZjYWNoZQorK2lmIGRpZmYgIiRjYWNoZV9maWxlIiBjb25mY2FjaGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKysgIGlmIHRlc3QgLXcgIiRjYWNoZV9maWxlIjsgdGhlbgorKyAgICB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIiAmJgorKyAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKytlY2hvICIkYXNfbWU6IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICAgICBjYXQgY29uZmNhY2hlID4kY2FjaGVfZmlsZQorICAgZWxzZQorLSAgICBlY2hvICJub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorK2VjaG8gIiRhc19tZTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgICBmaQorIGZpCisgcm0gLWYgY29uZmNhY2hlCitAQCAtMTE1MzIsNjMgKzEyNTgyLDQ4IEBACisgIyBMZXQgbWFrZSBleHBhbmQgZXhlY19wcmVmaXguCisgdGVzdCAieCRleGVjX3ByZWZpeCIgPSB4Tk9ORSAmJiBleGVjX3ByZWZpeD0nJHtwcmVmaXh9JworIAorLSMgVlBBVEggbWF5IGNhdXNlIHRyb3VibGUgd2l0aCBzb21lIG1ha2VzLCBzbyB3ZSByZW1vdmUgJChzcmNkaXIpLAorLSMgJHtzcmNkaXJ9IGFuZCBAc3JjZGlyQCBmcm9tIFZQQVRIIGlmIHNyY2RpciBpcyAiLiIsIHN0cmlwIGxlYWRpbmcgYW5kCistIyB0cmFpbGluZyBjb2xvbnMgYW5kIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBsaW5lIGlmIFZQQVRIIGJlY29tZXMgZW1wdHkKKy0jIChhY3R1YWxseSB3ZSBsZWF2ZSBhbiBlbXB0eSBsaW5lIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycykuCistaWYgdGVzdCAieCRzcmNkaXIiID0geC47IHRoZW4KKy0gIGFjX3Zwc3ViPScvXlsJIF0qVlBBVEhbCSBdKj0veworLXMvOipcJChzcmNkaXIpOiovOi87Cistcy86Klwke3NyY2Rpcn06Ki86LzsKKy1zLzoqQHNyY2RpckA6Ki86LzsKKy1zL15cKFtePV0qPVsJIF0qXCk6Ki9cMS87Cistcy86KiQvLzsKKy1zL15bXj1dKj1bCSBdKiQvLzsKKy19JworLWZpCistCisgIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIERFRlMuCisgIyBQcm90ZWN0IGFnYWluc3Qgc2hlbGwgZXhwYW5zaW9uIHdoaWxlIGV4ZWN1dGluZyBNYWtlZmlsZSBydWxlcy4KKyAjIFByb3RlY3QgYWdhaW5zdCBNYWtlZmlsZSBtYWNybyBleHBhbnNpb24uCisgIworICMgSWYgdGhlIGZpcnN0IHNlZCBzdWJzdGl0dXRpb24gaXMgZXhlY3V0ZWQgKHdoaWNoIGxvb2tzIGZvciBtYWNyb3MgdGhhdAorLSMgdGFrZSBhcmd1bWVudHMpLCB0aGVuIHdlIGJyYW5jaCB0byB0aGUgcXVvdGUgc2VjdGlvbi4gIE90aGVyd2lzZSwKKysjIHRha2UgYXJndW1lbnRzKSwgdGhlbiBicmFuY2ggdG8gdGhlIHF1b3RlIHNlY3Rpb24uICBPdGhlcndpc2UsCisgIyBsb29rIGZvciBhIG1hY3JvIHRoYXQgZG9lc24ndCB0YWtlIGFyZ3VtZW50cy4KKy1jYXQgPmNvbmZkZWYyb3B0LnNlZCA8PFxfQUNFT0YKKythY19zY3JpcHQ9JworIHQgY2xlYXIKKy06IGNsZWFyCistcyxeWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSpcKFteCSAoXVteCSAoXSooW14pXSopXClbCSBdKlwoLipcKSwtRFwxPVwyLGcKKys6Y2xlYXIKKytzL15bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKlwoW14JIChdW14JIChdKihbXildKilcKVsJIF0qXCguKlwpLy1EXDE9XDIvZworIHQgcXVvdGUKKy1zLF5bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKlwoW14JIF1bXgkgXSpcKVsJIF0qXCguKlwpLC1EXDE9XDIsZworK3MvXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qXChbXgkgXVteCSBdKlwpWwkgXSpcKC4qXCkvLURcMT1cMi9nCisgdCBxdW90ZQorLWQKKy06IHF1b3RlCistcyxbCSBgfiMkXiYqKCl7fVxcfDsnIjw+P10sXFwmLGcKKy1zLFxbLFxcJixnCistcyxcXSxcXCYsZworLXMsXCQsJCQsZworLXAKKy1fQUNFT0YKKy0jIFdlIHVzZSBlY2hvIHRvIGF2b2lkIGFzc3VtaW5nIGEgcGFydGljdWxhciBsaW5lLWJyZWFraW5nIGNoYXJhY3Rlci4KKy0jIFRoZSBleHRyYSBkb3QgaXMgdG8gcHJldmVudCB0aGUgc2hlbGwgZnJvbSBjb25zdW1pbmcgdHJhaWxpbmcKKy0jIGxpbmUtYnJlYWtzIGZyb20gdGhlIHN1Yi1jb21tYW5kIG91dHB1dC4gIEEgbGluZS1icmVhayB3aXRoaW4KKy0jIHNpbmdsZS1xdW90ZXMgZG9lc24ndCB3b3JrIGJlY2F1c2UsIGlmIHRoaXMgc2NyaXB0IGlzIGNyZWF0ZWQgaW4gYQorLSMgcGxhdGZvcm0gdGhhdCB1c2VzIHR3byBjaGFyYWN0ZXJzIGZvciBsaW5lLWJyZWFrcyAoZS5nLiwgRE9TKSwgdHIKKy0jIHdvdWxkIGJyZWFrLgorLWFjX0xGX2FuZF9ET1Q9YGVjaG87IGVjaG8gLmAKKy1ERUZTPWBzZWQgLW4gLWYgY29uZmRlZjJvcHQuc2VkIGNvbmZkZWZzLmggfCB0ciAiJGFjX0xGX2FuZF9ET1QiICcgLidgCistcm0gLWYgY29uZmRlZjJvcHQuc2VkCisrYiBhbnkKKys6cXVvdGUKKytzL1sJIGB+IyReJiooKXt9XFx8OydcJyciPD4/XS9cXCYvZworK3MvXFsvXFwmL2cKKytzL1xdL1xcJi9nCisrcy9cJC8kJC9nCisrSAorKzphbnkKKyskeworKwlnCisrCXMvXlxuLy8KKysJcy9cbi8gL2cKKysJcAorK30KKysnCisrREVGUz1gc2VkIC1uICIkYWNfc2NyaXB0IiBjb25mZGVmcy5oYAorIAorIAorIGFjX2xpYm9ianM9CisgYWNfbHRsaWJvYmpzPQorIGZvciBhY19pIGluIDogJExJQk9CSlM7IGRvIHRlc3QgIngkYWNfaSIgPSB4OiAmJiBjb250aW51ZQorICAgIyAxLiBSZW1vdmUgdGhlIGV4dGVuc2lvbiwgYW5kICRVIGlmIGFscmVhZHkgaW5zdGFsbGVkLgorLSAgYWNfaT1gZWNobyAiJGFjX2kiIHwKKy0JIHNlZCAncy9cJFVcLi8uLztzL1wubyQvLztzL1wub2JqJC8vJ2AKKy0gICMgMi4gQWRkIHRoZW0uCistICBhY19saWJvYmpzPSIkYWNfbGlib2JqcyAkYWNfaVwkVS4kYWNfb2JqZXh0IgorLSAgYWNfbHRsaWJvYmpzPSIkYWNfbHRsaWJvYmpzICRhY19pIickVS5sbycKKysgIGFjX3NjcmlwdD0ncy9cJFVcLi8uLztzL1wubyQvLztzL1wub2JqJC8vJworKyAgYWNfaT1gZWNobyAiJGFjX2kiIHwgc2VkICIkYWNfc2NyaXB0ImAKKysgICMgMi4gUHJlcGVuZCBMSUJPQkpESVIuICBXaGVuIHVzZWQgd2l0aCBhdXRvbWFrZT49MS4xMCBMSUJPQkpESVIKKysgICMgICAgd2lsbCBiZSBzZXQgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSBMSUJPQkpTIG9iamVjdHMgYXJlIGJ1aWx0LgorKyAgYWNfbGlib2Jqcz0iJGFjX2xpYm9ianMgXCR7TElCT0JKRElSfSRhY19pXCRVLiRhY19vYmpleHQiCisrICBhY19sdGxpYm9ianM9IiRhY19sdGxpYm9ianMgXCR7TElCT0JKRElSfSRhY19pIickVS5sbycKKyBkb25lCisgTElCT0JKUz0kYWNfbGlib2JqcworIAorQEAgLTExNzAzLDE3ICsxMjczOCw0NSBAQAorICMjIE00c2ggSW5pdGlhbGl6YXRpb24uICAjIworICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIAorLSMgQmUgQm91cm5lIGNvbXBhdGlibGUKKysjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKKytEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCisgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICBlbXVsYXRlIHNoCisgICBOVUxMQ01EPToKKyAgICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKy1lbGlmIHRlc3QgLW4gIiR7QkFTSF9WRVJTSU9OK3NldH0iICYmIChzZXQgLW8gcG9zaXgpID4vZGV2L251bGwgMj4mMTsgdGhlbgorLSAgc2V0IC1vIHBvc2l4CisrICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorK2Vsc2UKKysgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbgorKyAgKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7CisrZXNhYworKworK2ZpCisrCisrCisrCisrCisrIyBQQVRIIG5lZWRzIENSCisrIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLgorK2FzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworK2FzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworK2FzX2NyX0xldHRlcnM9JGFzX2NyX2xldHRlcnMkYXNfY3JfTEVUVEVSUworK2FzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKKythc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKKysKKysjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KKytpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorKyAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAorKyAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAorKyAgY2htb2QgK3ggY29uZiQkLnNoCisrICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICBQQVRIX1NFUEFSQVRPUj0nOycKKysgIGVsc2UKKysgICAgUEFUSF9TRVBBUkFUT1I9OgorKyAgZmkKKysgIHJtIC1mIGNvbmYkJC5zaAorIGZpCistRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorIAorICMgU3VwcG9ydCB1bnNldCB3aGVuIHBvc3NpYmxlLgorIGlmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorQEAgLTExNzIzLDggKzEyNzg2LDQzIEBACisgZmkKKyAKKyAKKysjIElGUworKyMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuICBRdW90aW5nIGlzCisrIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCisrIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCisrIyBzcGxpdHRpbmcgYnkgc2V0dGluZyBJRlMgdG8gZW1wdHkgdmFsdWUuKQorK2FzX25sPScKKysnCisrSUZTPSIgIiIJJGFzX25sIgorKworKyMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIGRpcmVjdG9yeSBzZXBhcmF0b3IuCisrY2FzZSAkMCBpbgorKyAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OworKyAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKysgICAgIDs7CisrZXNhYworKyMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKysjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KKytpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCisrICBhc19teXNlbGY9JDAKKytmaQorK2lmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKysgIGVjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKKysgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorK2ZpCisrCisgIyBXb3JrIGFyb3VuZCBidWdzIGluIHByZS0zLjAgVVdJTiBrc2guCistJGFzX3Vuc2V0IEVOViBNQUlMIE1BSUxQQVRICisrZm9yIGFzX3ZhciBpbiBFTlYgTUFJTCBNQUlMUEFUSAorK2RvICgkYXNfdW5zZXQgJGFzX3ZhcikgPi9kZXYvbnVsbCAyPiYxICYmICRhc191bnNldCAkYXNfdmFyCisrZG9uZQorIFBTMT0nJCAnCisgUFMyPSc+ICcKKyBQUzQ9JysgJworQEAgLTExNzM4LDE4ICsxMjgzNiwxOSBAQAorICAgaWYgKHNldCAreDsgdGVzdCAteiAiYChldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIpIDI+JjFgIik7IHRoZW4KKyAgICAgZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyCisgICBlbHNlCistICAgICRhc191bnNldCAkYXNfdmFyCisrICAgICgkYXNfdW5zZXQgJGFzX3ZhcikgPi9kZXYvbnVsbCAyPiYxICYmICRhc191bnNldCAkYXNfdmFyCisgICBmaQorIGRvbmUKKyAKKyAjIFJlcXVpcmVkIHRvIHVzZSBiYXNlbmFtZS4KKy1pZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMTsgdGhlbgorK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisrICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KKyAgIGFzX2V4cHI9ZXhwcgorIGVsc2UKKyAgIGFzX2V4cHI9ZmFsc2UKKyBmaQorIAorLWlmIChiYXNlbmFtZSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KKytpZiAoYmFzZW5hbWUgLS0gLykgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLS0gLyAyPiYxYCIgPSAiWC8iOyB0aGVuCisgICBhc19iYXNlbmFtZT1iYXNlbmFtZQorIGVsc2UKKyAgIGFzX2Jhc2VuYW1lPWZhbHNlCitAQCAtMTE3NTcsMTU5ICsxMjg1NiwxMjAgQEAKKyAKKyAKKyAjIE5hbWUgb2YgdGhlIGV4ZWN1dGFibGUuCistYXNfbWU9YCRhc19iYXNlbmFtZSAiJDAiIHx8CisrYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8CisgJGFzX2V4cHIgWC8iJDAiIDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwKKyAJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCistCSBYIiQwIiA6ICdYXCgvXCkkJyBcfCBcCistCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKysJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorIGVjaG8gWC8iJDAiIHwKKy0gICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97IHMvL1wxLzsgcTsgfQorLSAgCSAgL15YXC9cKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKy0gIAkgIC9eWFwvXChcL1wpLioveyBzLy9cMS87IHE7IH0KKy0gIAkgIHMvLiovLi87IHEnYAorLQorLQorLSMgUEFUSCBuZWVkcyBDUiwgYW5kIExJTkVOTyBuZWVkcyBDUiBhbmQgUEFUSC4KKy0jIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCistYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCistYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCistYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCistYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JworLWFzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworLQorLSMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgorLWlmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCistICBlY2hvICIjISAvYmluL3NoIiA+Y29uZiQkLnNoCistICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCistICBjaG1vZCAreCBjb25mJCQuc2gKKy0gIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5zaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICAgIFBBVEhfU0VQQVJBVE9SPSc7JworLSAgZWxzZQorLSAgICBQQVRIX1NFUEFSQVRPUj06CistICBmaQorLSAgcm0gLWYgY29uZiQkLnNoCistZmkKKysgICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXC9cKFwvXC9cKSQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwvXChcL1wpLioveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIHMvLiovLi87IHEnYAorKworKyMgQ0RQQVRILgorKyRhc191bnNldCBDRFBBVEgKKyAKKyAKKy0gIGFzX2xpbmVub18xPSRMSU5FTk8KKy0gIGFzX2xpbmVub18yPSRMSU5FTk8KKy0gIGFzX2xpbmVub18zPWAoZXhwciAkYXNfbGluZW5vXzEgKyAxKSAyPi9kZXYvbnVsbGAKKy0gIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgorLSAgdGVzdCAieCRhc19saW5lbm9fMyIgID0gIngkYXNfbGluZW5vXzIiICB8fCB7CistICAjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBwYXRoIGF0IGFsbAorLSAgIyByZWxhdGl2ZSBvciBub3QuCistICBjYXNlICQwIGluCistICAgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKy0gICAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorLWZvciBhc19kaXIgaW4gJFBBVEgKKy1kbworLSAgSUZTPSRhc19zYXZlX0lGUworLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCistZG9uZQorIAorLSAgICAgICA7OworLSAgZXNhYworLSAgIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworLSAgIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCistICBpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCistICAgIGFzX215c2VsZj0kMAorLSAgZmkKKy0gIGlmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKy0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIHBhdGgiID4mNQorLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBwYXRoIiA+JjI7fQorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorLSAgZmkKKy0gIGNhc2UgJENPTkZJR19TSEVMTCBpbgorLSAgJycpCistICAgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKy1mb3IgYXNfZGlyIGluIC9iaW4kUEFUSF9TRVBBUkFUT1IvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRICistZG8KKy0gIElGUz0kYXNfc2F2ZV9JRlMKKy0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCistICBmb3IgYXNfYmFzZSBpbiBzaCBiYXNoIGtzaCBzaDU7IGRvCistCSBjYXNlICRhc19kaXIgaW4KKy0JIC8qKQorLQkgICBpZiAoIiRhc19kaXIvJGFzX2Jhc2UiIC1jICcKKyAgIGFzX2xpbmVub18xPSRMSU5FTk8KKyAgIGFzX2xpbmVub18yPSRMSU5FTk8KKy0gIGFzX2xpbmVub18zPWAoZXhwciAkYXNfbGluZW5vXzEgKyAxKSAyPi9kZXYvbnVsbGAKKyAgIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgorLSAgdGVzdCAieCRhc19saW5lbm9fMyIgID0gIngkYXNfbGluZW5vXzIiICcpIDI+L2Rldi9udWxsOyB0aGVuCistCSAgICAgJGFzX3Vuc2V0IEJBU0hfRU5WIHx8IHRlc3QgIiR7QkFTSF9FTlYrc2V0fSIgIT0gc2V0IHx8IHsgQkFTSF9FTlY9OyBleHBvcnQgQkFTSF9FTlY7IH0KKy0JICAgICAkYXNfdW5zZXQgRU5WIHx8IHRlc3QgIiR7RU5WK3NldH0iICE9IHNldCB8fCB7IEVOVj07IGV4cG9ydCBFTlY7IH0KKy0JICAgICBDT05GSUdfU0hFTEw9JGFzX2Rpci8kYXNfYmFzZQorLQkgICAgIGV4cG9ydCBDT05GSUdfU0hFTEwKKy0JICAgICBleGVjICIkQ09ORklHX1NIRUxMIiAiJDAiICR7MSsiJEAifQorLQkgICBmaTs7CistCSBlc2FjCistICAgICAgIGRvbmUKKy1kb25lCistOzsKKy0gIGVzYWMKKysgIHRlc3QgInhgZXhwciAkYXNfbGluZW5vXzEgKyAxYCIgPSAieCRhc19saW5lbm9fMiIgfHwgeworIAorICAgIyBDcmVhdGUgJGFzX21lLmxpbmVubyBhcyBhIGNvcHkgb2YgJGFzX215c2VsZiwgYnV0IHdpdGggJExJTkVOTworICAgIyB1bmlmb3JtbHkgcmVwbGFjZWQgYnkgdGhlIGxpbmUgbnVtYmVyLiAgVGhlIGZpcnN0ICdzZWQnIGluc2VydHMgYQorLSAgIyBsaW5lLW51bWJlciBsaW5lIGJlZm9yZSBlYWNoIGxpbmU7IHRoZSBzZWNvbmQgJ3NlZCcgZG9lcyB0aGUgcmVhbAorLSAgIyB3b3JrLiAgVGhlIHNlY29uZCBzY3JpcHQgdXNlcyAnTicgdG8gcGFpciBlYWNoIGxpbmUtbnVtYmVyIGxpbmUKKy0gICMgd2l0aCB0aGUgbnVtYmVyZWQgbGluZSwgYW5kIGFwcGVuZHMgdHJhaWxpbmcgJy0nIGR1cmluZworLSAgIyBzdWJzdGl0dXRpb24gc28gdGhhdCAkTElORU5PIGlzIG5vdCBhIHNwZWNpYWwgY2FzZSBhdCBsaW5lIGVuZC4KKysgICMgbGluZS1udW1iZXIgbGluZSBhZnRlciBlYWNoIGxpbmUgdXNpbmcgJExJTkVOTzsgdGhlIHNlY29uZCAnc2VkJworKyAgIyBkb2VzIHRoZSByZWFsIHdvcmsuICBUaGUgc2Vjb25kIHNjcmlwdCB1c2VzICdOJyB0byBwYWlyIGVhY2gKKysgICMgbGluZS1udW1iZXIgbGluZSB3aXRoIHRoZSBsaW5lIGNvbnRhaW5pbmcgJExJTkVOTywgYW5kIGFwcGVuZHMKKysgICMgdHJhaWxpbmcgJy0nIGR1cmluZyBzdWJzdGl0dXRpb24gc28gdGhhdCAkTElORU5PIGlzIG5vdCBhIHNwZWNpYWwKKysgICMgY2FzZSBhdCBsaW5lIGVuZC4KKyAgICMgKFJhamEgUiBIYXJpbmF0aCBzdWdnZXN0ZWQgc2VkICc9JywgYW5kIFBhdWwgRWdnZXJ0IHdyb3RlIHRoZQorLSAgIyBzZWNvbmQgJ3NlZCcgc2NyaXB0LiAgQmxhbWUgTGVlIEUuIE1jTWFob24gZm9yIHNlZCdzIHN5bnRheC4gIDotKQorLSAgc2VkICc9JyA8JGFzX215c2VsZiB8CisrICAjIHNjcmlwdHMgd2l0aCBvcHRpbWl6YXRpb24gaGVscCBmcm9tIFBhb2xvIEJvbnppbmkuICBCbGFtZSBMZWUKKysgICMgRS4gTWNNYWhvbiAoMTkzMS0xOTg5KSBmb3Igc2VkJ3Mgc3ludGF4LiAgOi0pCisrICBzZWQgLW4gJworKyAgICBwCisrICAgIC9bJF1MSU5FTk8vPQorKyAgJyA8JGFzX215c2VsZiB8CisgICAgIHNlZCAnCisrICAgICAgcy9bJF1MSU5FTk8uKi8mLS8KKysgICAgICB0IGxpbmVubworKyAgICAgIGIKKysgICAgICA6bGluZW5vCisgICAgICAgTgorLSAgICAgIHMsJCwtLAorLSAgICAgIDogbG9vcAorLSAgICAgIHMsXlwoWyckYXNfY3JfZGlnaXRzJ10qXClcKC4qXClbJF1MSU5FTk9cKFteJyRhc19jcl9hbG51bSdfXVwpLFwxXDJcMVwzLAorKyAgICAgIDpsb29wCisrICAgICAgcy9bJF1MSU5FTk9cKFteJyRhc19jcl9hbG51bSdfXS4qXG5cKVwoLipcKS9cMlwxXDIvCisgICAgICAgdCBsb29wCistICAgICAgcywtJCwsCistICAgICAgcyxeWyckYXNfY3JfZGlnaXRzJ10qXG4sLAorKyAgICAgIHMvLVxuLiovLworICAgICAnID4kYXNfbWUubGluZW5vICYmCistICBjaG1vZCAreCAkYXNfbWUubGluZW5vIHx8CistICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyO30KKysgIGNobW9kICt4ICIkYXNfbWUubGluZW5vIiB8fAorKyAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjIKKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAKKyAgICMgRG9uJ3QgdHJ5IHRvIGV4ZWMgYXMgaXQgY2hhbmdlcyAkWzBdLCBjYXVzaW5nIGFsbCBzb3J0IG9mIHByb2JsZW1zCisgICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKKy0gICMgb3JpZ2luYWwgYW5kIHNvIG9uLiAgQXV0b2NvbmYgaXMgZXNwZWNpYWxseSBzZW5zaWJsZSB0byB0aGlzKS4KKy0gIC4gLi8kYXNfbWUubGluZW5vCisrICAjIG9yaWdpbmFsIGFuZCBzbyBvbi4gIEF1dG9jb25mIGlzIGVzcGVjaWFsbHkgc2Vuc2l0aXZlIHRvIHRoaXMpLgorKyAgLiAiLi8kYXNfbWUubGluZW5vIgorICAgIyBFeGl0IHN0YXR1cyBpcyB0aGF0IG9mIHRoZSBsYXN0IGNvbW1hbmQuCisgICBleGl0CisgfQorIAorIAorLWNhc2UgYGVjaG8gInRlc3RpbmdcYyI7IGVjaG8gMSwyLDNgLGBlY2hvIC1uIHRlc3Rpbmc7IGVjaG8gMSwyLDNgIGluCistICAqYyosLW4qKSBFQ0hPX049IEVDSE9fQz0nCistJyBFQ0hPX1Q9JwknIDs7CistICAqYyosKiAgKSBFQ0hPX049LW4gRUNIT19DPSBFQ0hPX1Q9IDs7CistICAqKSAgICAgICBFQ0hPX049IEVDSE9fQz0nXGMnIEVDSE9fVD0gOzsKKytpZiAoYXNfZGlyPWBkaXJuYW1lIC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgIGFzX2Rpcm5hbWU9ZGlybmFtZQorK2Vsc2UKKysgIGFzX2Rpcm5hbWU9ZmFsc2UKKytmaQorKworK0VDSE9fQz0gRUNIT19OPSBFQ0hPX1Q9CisrY2FzZSBgZWNobyAtbiB4YCBpbgorKy1uKikKKysgIGNhc2UgYGVjaG8gJ3hcYydgIGluCisrICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBzaW5nbGUgdGFiIGNoYXJhY3Rlci4KKysgICopICAgRUNIT19DPSdcYyc7OworKyAgZXNhYzs7CisrKikKKysgIEVDSE9fTj0nLW4nOzsKKyBlc2FjCisgCistaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKytpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorKyAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCisgICBhc19leHByPWV4cHIKKyBlbHNlCisgICBhc19leHByPWZhbHNlCisgZmkKKyAKKyBybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQorK2lmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorKyAgcm0gLWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQorK2Vsc2UKKysgIHJtIC1mIGNvbmYkJC5kaXIKKysgIG1rZGlyIGNvbmYkJC5kaXIKKytmaQorIGVjaG8gPmNvbmYkJC5maWxlCisgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCistICAjIFdlIGNvdWxkIGp1c3QgY2hlY2sgZm9yIERKR1BQOyBidXQgdGhpcyB0ZXN0IGEpIHdvcmtzIGIpIGlzIG1vcmUgZ2VuZXJpYworLSAgIyBhbmQgYykgd2lsbCByZW1haW4gdmFsaWQgb25jZSBESkdQUCBzdXBwb3J0cyBzeW1saW5rcyAoREpHUFAgMi4wNCkuCistICBpZiB0ZXN0IC1mIGNvbmYkJC5leGU7IHRoZW4KKy0gICAgIyBEb24ndCB1c2UgbG4gYXQgYWxsOyB3ZSBkb24ndCBoYXZlIGFueSBsaW5rcworKyAgYXNfbG5fcz0nbG4gLXMnCisrICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorKyAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKysgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorKyAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wJy4KKysgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKyAgICAgYXNfbG5fcz0nY3AgLXAnCistICBlbHNlCistICAgIGFzX2xuX3M9J2xuIC1zJworLSAgZmkKKyBlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgYXNfbG5fcz1sbgorIGVsc2UKKyAgIGFzX2xuX3M9J2NwIC1wJworIGZpCistcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKKytybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZGlyL2NvbmYkJC5maWxlIGNvbmYkJC5maWxlCisrcm1kaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorIAorIGlmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KKyAgIGFzX21rZGlyX3A9OgorQEAgLTExOTE4LDcgKzEyOTc4LDI4IEBACisgICBhc19ta2Rpcl9wPWZhbHNlCisgZmkKKyAKKy1hc19leGVjdXRhYmxlX3A9InRlc3QgLWYiCisraWYgdGVzdCAteCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgYXNfdGVzdF94PSd0ZXN0IC14JworK2Vsc2UKKysgIGlmIGxzIC1kTCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICBhc19sc19MX29wdGlvbj1MCisrICBlbHNlCisrICAgIGFzX2xzX0xfb3B0aW9uPQorKyAgZmkKKysgIGFzX3Rlc3RfeD0nCisrICAgIGV2YWwgc2ggLWMgJ1wnJworKyAgICAgIGlmIHRlc3QgLWQgIiQxIjsgdGhlbgorKyAgICAgICAgdGVzdCAtZCAiJDEvLiI7CisrICAgICAgZWxzZQorKwljYXNlICQxIGluCisrICAgICAgICAtKilzZXQgIi4vJDEiOzsKKysJZXNhYzsKKysJY2FzZSBgbHMgLWxkJyRhc19sc19MX29wdGlvbicgIiQxIiAyPi9kZXYvbnVsbGAgaW4KKysJPz8/W3N4XSopOjs7KilmYWxzZTs7ZXNhYztmaQorKyAgICAnXCcnIHNoCisrICAnCisrZmkKKythc19leGVjdXRhYmxlX3A9JGFzX3Rlc3RfeAorIAorICMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KKyBhc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorQEAgLTExOTI3LDMxICsxMzAwOCwxNCBAQAorIGFzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisgCisgCistIyBJRlMKKy0jIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLgorLWFzX25sPScKKy0nCistSUZTPSIgCSRhc19ubCIKKy0KKy0jIENEUEFUSC4KKy0kYXNfdW5zZXQgQ0RQQVRICistCisgZXhlYyA2PiYxCisgCistIyBPcGVuIHRoZSBsb2cgcmVhbCBzb29uLCB0byBrZWVwIFwkWzBdIGFuZCBzbyBvbiBtZWFuaW5nZnVsLCBhbmQgdG8KKysjIFNhdmUgdGhlIGxvZyBtZXNzYWdlLCB0byBrZWVwICRbMF0gYW5kIHNvIG9uIG1lYW5pbmdmdWwsIGFuZCB0bworICMgcmVwb3J0IGFjdHVhbCBpbnB1dCB2YWx1ZXMgb2YgQ09ORklHX0ZJTEVTIGV0Yy4gaW5zdGVhZCBvZiB0aGVpcgorLSMgdmFsdWVzIGFmdGVyIG9wdGlvbnMgaGFuZGxpbmcuICBMb2dnaW5nIC0tdmVyc2lvbiBldGMuIGlzIE9LLgorLWV4ZWMgNT4+Y29uZmlnLmxvZworLXsKKy0gIGVjaG8KKy0gIHNlZCAnaDtzLy4vLS9nO3MvXi4uLi8jIyAvO3MvLi4uJC8gIyMvO3A7eDtwO3gnIDw8X0FTQk9YCistIyMgUnVubmluZyAkYXNfbWUuICMjCistX0FTQk9YCistfSA+JjUKKy1jYXQgPiY1IDw8X0NTRU9GCistCisrIyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4KKythY19sb2c9IgorIFRoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgbmV3bGliICRhc19tZSAxLjE3LjAsIHdoaWNoIHdhcworLWdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworIAorICAgQ09ORklHX0ZJTEVTICAgID0gJENPTkZJR19GSUxFUworICAgQ09ORklHX0hFQURFUlMgID0gJENPTkZJR19IRUFERVJTCitAQCAtMTE5NTksMzAgKzEzMDIzLDE5IEBACisgICBDT05GSUdfQ09NTUFORFMgPSAkQ09ORklHX0NPTU1BTkRTCisgICAkICQwICRACisgCistX0NTRU9GCistZWNobyAib24gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgIiA+JjUKKy1lY2hvID4mNQorK29uIGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorKyIKKysKKyBfQUNFT0YKKyAKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorICMgRmlsZXMgdGhhdCBjb25maWcuc3RhdHVzIHdhcyBtYWRlIGZvci4KKy1pZiB0ZXN0IC1uICIkYWNfY29uZmlnX2ZpbGVzIjsgdGhlbgorLSAgZWNobyAiY29uZmlnX2ZpbGVzPVwiJGFjX2NvbmZpZ19maWxlc1wiIiA+PiRDT05GSUdfU1RBVFVTCistZmkKKy0KKy1pZiB0ZXN0IC1uICIkYWNfY29uZmlnX2hlYWRlcnMiOyB0aGVuCistICBlY2hvICJjb25maWdfaGVhZGVycz1cIiRhY19jb25maWdfaGVhZGVyc1wiIiA+PiRDT05GSUdfU1RBVFVTCistZmkKKy0KKy1pZiB0ZXN0IC1uICIkYWNfY29uZmlnX2xpbmtzIjsgdGhlbgorLSAgZWNobyAiY29uZmlnX2xpbmtzPVwiJGFjX2NvbmZpZ19saW5rc1wiIiA+PiRDT05GSUdfU1RBVFVTCistZmkKKytjb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMiCisrY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIgorIAorLWlmIHRlc3QgLW4gIiRhY19jb25maWdfY29tbWFuZHMiOyB0aGVuCistICBlY2hvICJjb25maWdfY29tbWFuZHM9XCIkYWNfY29uZmlnX2NvbW1hbmRzXCIiID4+JENPTkZJR19TVEFUVVMKKy1maQorK19BQ0VPRgorIAorIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorLQorIGFjX2NzX3VzYWdlPSJcCisgXGAkYXNfbWUnIGluc3RhbnRpYXRlcyBmaWxlcyBmcm9tIHRlbXBsYXRlcyBhY2NvcmRpbmcgdG8gdGhlCisgY3VycmVudCBjb25maWd1cmF0aW9uLgorQEAgLTExOTkwLDcgKzEzMDQzLDcgQEAKKyBVc2FnZTogJDAgW09QVElPTlNdIFtGSUxFXS4uLgorIAorICAgLWgsIC0taGVscCAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorLSAgLVYsIC0tdmVyc2lvbiAgICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisrICAtViwgLS12ZXJzaW9uICAgIHByaW50IHZlcnNpb24gbnVtYmVyIGFuZCBjb25maWd1cmF0aW9uIHNldHRpbmdzLCB0aGVuIGV4aXQKKyAgIC1xLCAtLXF1aWV0ICAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCisgICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKyAgICAgICAtLXJlY2hlY2sgICAgdXBkYXRlICRhc19tZSBieSByZWNvbmZpZ3VyaW5nIGluIHRoZSBzYW1lIGNvbmRpdGlvbnMKK0BAIC0xMjAwNCwxOSArMTMwNTcsMjEgQEAKKyAkY29uZmlnX2NvbW1hbmRzCisgCisgUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvY29uZkBnbnUub3JnPi4iCistX0FDRU9GCisgCisrX0FDRU9GCisgY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKyBhY19jc192ZXJzaW9uPSJcXAorIG5ld2xpYiBjb25maWcuc3RhdHVzIDEuMTcuMAorLWNvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OSwKKy0gIHdpdGggb3B0aW9ucyBcXCJgZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9bXFwiIlxgXCRdL1xcXFwmL2cnYFxcIgorK2NvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MSwKKysgIHdpdGggb3B0aW9ucyBcXCJgZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9eIC8vOyBzL1tcXCIiXGBcJF0vXFxcXCYvZydgXFwiCisgCistQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK0NvcHlyaWdodCAoQykgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBUaGlzIGNvbmZpZy5zdGF0dXMgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuIgorLXNyY2Rpcj0kc3JjZGlyCistSU5TVEFMTD0iJElOU1RBTEwiCisrCisrYWNfcHdkPSckYWNfcHdkJworK3NyY2Rpcj0nJHNyY2RpcicKKytJTlNUQUxMPSckSU5TVEFMTCcKKyBfQUNFT0YKKyAKKyBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKK0BAIC0xMjAyNyw2MCArMTMwODIsNDIgQEAKKyBkbworICAgY2FzZSAkMSBpbgorICAgLS0qPSopCistICAgIGFjX29wdGlvbj1gZXhwciAieCQxIiA6ICd4XChbXj1dKlwpPSdgCistICAgIGFjX29wdGFyZz1gZXhwciAieCQxIiA6ICd4W149XSo9XCguKlwpJ2AKKysgICAgYWNfb3B0aW9uPWBleHByICJYJDEiIDogJ1hcKFtePV0qXCk9J2AKKysgICAgYWNfb3B0YXJnPWBleHByICJYJDEiIDogJ1hbXj1dKj1cKC4qXCknYAorICAgICBhY19zaGlmdD06CisgICAgIDs7CistICAtKikKKysgICopCisgICAgIGFjX29wdGlvbj0kMQorICAgICBhY19vcHRhcmc9JDIKKyAgICAgYWNfc2hpZnQ9c2hpZnQKKyAgICAgOzsKKy0gICopICMgVGhpcyBpcyBub3QgYW4gb3B0aW9uLCBzbyB0aGUgdXNlciBoYXMgcHJvYmFibHkgZ2l2ZW4gZXhwbGljaXQKKy0gICAgICMgYXJndW1lbnRzLgorLSAgICAgYWNfb3B0aW9uPSQxCistICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKyAgIGVzYWMKKyAKKyAgIGNhc2UgJGFjX29wdGlvbiBpbgorICAgIyBIYW5kbGluZyBvZiB0aGUgb3B0aW9ucy4KKy1fQUNFT0YKKy1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKyAgIC1yZWNoZWNrIHwgLS1yZWNoZWNrIHwgLS1yZWNoZWMgfCAtLXJlY2hlIHwgLS1yZWNoIHwgLS1yZWMgfCAtLXJlIHwgLS1yKQorICAgICBhY19jc19yZWNoZWNrPTogOzsKKy0gIC0tdmVyc2lvbiB8IC0tdmVycyogfCAtViApCistICAgIGVjaG8gIiRhY19jc192ZXJzaW9uIjsgZXhpdCAwIDs7CistICAtLWhlIHwgLS1oKQorLSAgICAjIENvbmZsaWN0IGJldHdlZW4gLS1oZWxwIGFuZCAtLWhlYWRlcgorLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBhbWJpZ3VvdXMgb3B0aW9uOiAkMQorLVRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBhbWJpZ3VvdXMgb3B0aW9uOiAkMQorLVRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjI7fQorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CistICAtLWhlbHAgfCAtLWhlbCB8IC1oICkKKy0gICAgZWNobyAiJGFjX2NzX3VzYWdlIjsgZXhpdCAwIDs7CistICAtLWRlYnVnIHwgLS1kKiB8IC1kICkKKysgIC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC0tdmVyIHwgLS12ZSB8IC0tdiB8IC1WICkKKysgICAgZWNobyAiJGFjX2NzX3ZlcnNpb24iOyBleGl0IDs7CisrICAtLWRlYnVnIHwgLS1kZWJ1IHwgLS1kZWIgfCAtLWRlIHwgLS1kIHwgLWQgKQorICAgICBkZWJ1Zz06IDs7CisgICAtLWZpbGUgfCAtLWZpbCB8IC0tZmkgfCAtLWYgKQorICAgICAkYWNfc2hpZnQKKyAgICAgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTICRhY19vcHRhcmciCisgICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworLSAgLS1oZWFkZXIgfCAtLWhlYWRlIHwgLS1oZWFkIHwgLS1oZWEgKQorLSAgICAkYWNfc2hpZnQKKy0gICAgQ09ORklHX0hFQURFUlM9IiRDT05GSUdfSEVBREVSUyAkYWNfb3B0YXJnIgorLSAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKysgIC0taGUgfCAtLWggfCAgLS1oZWxwIHwgLS1oZWwgfCAtaCApCisrICAgIGVjaG8gIiRhY19jc191c2FnZSI7IGV4aXQgOzsKKyAgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCisgICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCB8IC0tc2kgfCAtLXMpCisgICAgIGFjX2NzX3NpbGVudD06IDs7CisgCisgICAjIFRoaXMgaXMgYW4gZXJyb3IuCistICAtKikgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvbjogJDEKKy1UcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvbjogJDEKKy1UcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyO30KKysgIC0qKSB7IGVjaG8gIiRhc19tZTogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb246ICQxCisrVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMgorICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworIAorLSAgKikgYWNfY29uZmlnX3RhcmdldHM9IiRhY19jb25maWdfdGFyZ2V0cyAkMSIgOzsKKysgICopIGFjX2NvbmZpZ190YXJnZXRzPSIkYWNfY29uZmlnX3RhcmdldHMgJDEiCisrICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlIDs7CisgCisgICBlc2FjCisgICBzaGlmdAorQEAgLTEyMDk2LDE3ICsxMzEzMywyOCBAQAorIF9BQ0VPRgorIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisgaWYgXCRhY19jc19yZWNoZWNrOyB0aGVuCistICBlY2hvICJydW5uaW5nICRTSEVMTCAkMCAiICRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzICIgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24iID4mNgorLSAgZXhlYyAkU0hFTEwgJDAgJGFjX2NvbmZpZ3VyZV9hcmdzIFwkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24KKysgIGVjaG8gInJ1bm5pbmcgQ09ORklHX1NIRUxMPSRTSEVMTCAkU0hFTEwgJDAgIiRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzICIgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24iID4mNgorKyAgQ09ORklHX1NIRUxMPSRTSEVMTAorKyAgZXhwb3J0IENPTkZJR19TSEVMTAorKyAgZXhlYyAkU0hFTEwgIiQwIiRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uCisgZmkKKyAKKyBfQUNFT0YKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKytleGVjIDU+PmNvbmZpZy5sb2cKKyt7CisrICBlY2hvCisrICBzZWQgJ2g7cy8uLy0vZztzL14uLi4vIyMgLztzLy4uLiQvICMjLztwO3g7cDt4JyA8PF9BU0JPWAorKyMjIFJ1bm5pbmcgJGFzX21lLiAjIworK19BU0JPWAorKyAgZWNobyAiJGFjX2xvZyIKKyt9ID4mNQorIAorK19BQ0VPRgorIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisgIworLSMgSU5JVC1DT01NQU5EUyBzZWN0aW9uLgorKyMgSU5JVC1DT01NQU5EUworICMKKy0KKyBBTURFUF9UUlVFPSIkQU1ERVBfVFJVRSIgYWNfYXV4X2Rpcj0iJGFjX2F1eF9kaXIiCisgCisgCitAQCAtMTIzNjcsMjIgKzEzNDE1LDIzIEBACisgCisgX0FDRU9GCisgCistCistCisgY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisrCisrIyBIYW5kbGluZyBvZiBhcmd1bWVudHMuCisgZm9yIGFjX2NvbmZpZ190YXJnZXQgaW4gJGFjX2NvbmZpZ190YXJnZXRzCisgZG8KKy0gIGNhc2UgIiRhY19jb25maWdfdGFyZ2V0IiBpbgorLSAgIyBIYW5kbGluZyBvZiBhcmd1bWVudHMuCistICAiTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1ha2VmaWxlIiA7OworLSAgImRlcGZpbGVzIiApIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBkZXBmaWxlcyIgOzsKKy0gICJsaWJ0b29sIiApIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBsaWJ0b29sIiA7OworKyAgY2FzZSAkYWNfY29uZmlnX3RhcmdldCBpbgorKyAgICAiZGVwZmlsZXMiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgZGVwZmlsZXMiIDs7CisrICAgICJsaWJ0b29sIikgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTIGxpYnRvb2wiIDs7CisrICAgICJNYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNYWtlZmlsZSIgOzsKKysKKyAgICopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludmFsaWQgYXJndW1lbnQ6ICRhY19jb25maWdfdGFyZ2V0IiA+JjUKKyBlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50OiAkYWNfY29uZmlnX3RhcmdldCIgPiYyO30KKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworICAgZXNhYworIGRvbmUKKyAKKysKKyAjIElmIHRoZSB1c2VyIGRpZCBub3QgdXNlIHRoZSBhcmd1bWVudHMgdG8gc3BlY2lmeSB0aGUgaXRlbXMgdG8gaW5zdGFudGlhdGUsCisgIyB0aGVuIHRoZSBlbnZ2YXIgaW50ZXJmYWNlIGlzIHVzZWQuICBTZXQgb25seSB0aG9zZSB0aGF0IGFyZSBub3QuCisgIyBXZSB1c2UgdGhlIGxvbmcgZm9ybSBmb3IgdGhlIGRlZmF1bHQgYXNzaWdubWVudCBiZWNhdXNlIG9mIGFuIGV4dHJlbWVseQorQEAgLTEyMzkzLDM5NyArMTM0NDIsNDkzIEBACisgZmkKKyAKKyAjIEhhdmUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBjb252ZW5pZW5jZS4gIE1ha2UgaXQgaW4gdGhlIGJ1aWxkIHRyZWUKKy0jIHNpbXBseSBiZWNhdXNlIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBwdXQgaXQgaGVyZSwgYW5kIGluIGFkZGl0aW9uLAorKyMgc2ltcGx5IGJlY2F1c2UgdGhlcmUgaXMgbm8gcmVhc29uIGFnYWluc3QgaGF2aW5nIGl0IGhlcmUsIGFuZCBpbiBhZGRpdGlvbiwKKyAjIGNyZWF0aW5nIGFuZCBtb3ZpbmcgZmlsZXMgZnJvbSAvdG1wIGNhbiBzb21ldGltZXMgY2F1c2UgcHJvYmxlbXMuCistIyBDcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5LCBhbmQgaG9vayBmb3IgaXRzIHJlbW92YWwgdW5sZXNzIGRlYnVnZ2luZy4KKysjIEhvb2sgZm9yIGl0cyByZW1vdmFsIHVubGVzcyBkZWJ1Z2dpbmcuCisrIyBOb3RlIHRoYXQgdGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaW4gd2hpY2ggdGhlIGRpcmVjdG9yeSB3aWxsIG5vdCBiZSBjbGVhbmVkOgorKyMgYWZ0ZXIgaXRzIGNyZWF0aW9uIGJ1dCBiZWZvcmUgaXRzIG5hbWUgaGFzIGJlZW4gYXNzaWduZWQgdG8gYCR0bXAnLgorICRkZWJ1ZyB8fAorIHsKKy0gIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/OyBybSAtcmYgJHRtcCAmJiBleGl0ICRleGl0X3N0YXR1cycgMAorKyAgdG1wPQorKyAgdHJhcCAnZXhpdF9zdGF0dXM9JD8KKysgIHsgdGVzdCAteiAiJHRtcCIgfHwgdGVzdCAhIC1kICIkdG1wIiB8fCBybSAtZnIgIiR0bXAiOyB9ICYmIGV4aXQgJGV4aXRfc3RhdHVzCisrJyAwCisgICB0cmFwICd7IChleGl0IDEpOyBleGl0IDE7IH0nIDEgMiAxMyAxNQorIH0KKy0KKyAjIENyZWF0ZSBhIChzZWN1cmUpIHRtcCBkaXJlY3RvcnkgZm9yIHRtcCBmaWxlcy4KKyAKKyB7CistICB0bXA9YCh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kIC1xICIuL2NvbmZzdGF0WFhYWFhYIikgMj4vZGV2L251bGxgICYmCisrICB0bXA9YCh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kICIuL2NvbmZYWFhYWFgiKSAyPi9kZXYvbnVsbGAgJiYKKyAgIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiCisgfSAgfHwKKyB7CistICB0bXA9Li9jb25mc3RhdCQkLSRSQU5ET00KKy0gICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCkKKysgIHRtcD0uL2NvbmYkJC0kUkFORE9NCisrICAodW1hc2sgMDc3ICYmIG1rZGlyICIkdG1wIikKKyB9IHx8CisgeworICAgIGVjaG8gIiRtZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gLiIgPiYyCisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisgfQorIAorLV9BQ0VPRgorLQorLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCistCisgIworLSMgQ09ORklHX0ZJTEVTIHNlY3Rpb24uCisrIyBTZXQgdXAgdGhlIHNlZCBzY3JpcHRzIGZvciBDT05GSUdfRklMRVMgc2VjdGlvbi4KKyAjCisgCisgIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZSBzY3JpcHRzIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfRklMRVMuCisgIyBUaGlzIGhhcHBlbnMgZm9yIGluc3RhbmNlIHdoZW4gLi9jb25maWcuc3RhdHVzIGNvbmZpZy5oCistaWYgdGVzdCAtbiAiXCRDT05GSUdfRklMRVMiOyB0aGVuCistICAjIFByb3RlY3QgYWdhaW5zdCBiZWluZyBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhIHNlZCBzdWJzdCBpbiBjb25maWcuc3RhdHVzLgorLSAgc2VkICdzLyxAL0BALzsgcy9ALC9AQC87IHMvLDt0IHRcJC9AO3QgdC87IC9AO3QgdFwkL3MvW1xcXFwmLF0vXFxcXCYvZzsKKy0gICBzL0BALyxALzsgcy9AQC9ALC87IHMvQDt0IHRcJC8sO3QgdC8nID5cJHRtcC9zdWJzLnNlZCA8PFxcQ0VPRgorLXMsQFNIRUxMQCwkU0hFTEwsO3QgdAorLXMsQFBBVEhfU0VQQVJBVE9SQCwkUEFUSF9TRVBBUkFUT1IsO3QgdAorLXMsQFBBQ0tBR0VfTkFNRUAsJFBBQ0tBR0VfTkFNRSw7dCB0CistcyxAUEFDS0FHRV9UQVJOQU1FQCwkUEFDS0FHRV9UQVJOQU1FLDt0IHQKKy1zLEBQQUNLQUdFX1ZFUlNJT05ALCRQQUNLQUdFX1ZFUlNJT04sO3QgdAorLXMsQFBBQ0tBR0VfU1RSSU5HQCwkUEFDS0FHRV9TVFJJTkcsO3QgdAorLXMsQFBBQ0tBR0VfQlVHUkVQT1JUQCwkUEFDS0FHRV9CVUdSRVBPUlQsO3QgdAorLXMsQGV4ZWNfcHJlZml4QCwkZXhlY19wcmVmaXgsO3QgdAorLXMsQHByZWZpeEAsJHByZWZpeCw7dCB0CistcyxAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAsJHByb2dyYW1fdHJhbnNmb3JtX25hbWUsO3QgdAorLXMsQGJpbmRpckAsJGJpbmRpciw7dCB0CistcyxAc2JpbmRpckAsJHNiaW5kaXIsO3QgdAorLXMsQGxpYmV4ZWNkaXJALCRsaWJleGVjZGlyLDt0IHQKKy1zLEBkYXRhZGlyQCwkZGF0YWRpciw7dCB0CistcyxAc3lzY29uZmRpckAsJHN5c2NvbmZkaXIsO3QgdAorLXMsQHNoYXJlZHN0YXRlZGlyQCwkc2hhcmVkc3RhdGVkaXIsO3QgdAorLXMsQGxvY2Fsc3RhdGVkaXJALCRsb2NhbHN0YXRlZGlyLDt0IHQKKy1zLEBsaWJkaXJALCRsaWJkaXIsO3QgdAorLXMsQGluY2x1ZGVkaXJALCRpbmNsdWRlZGlyLDt0IHQKKy1zLEBvbGRpbmNsdWRlZGlyQCwkb2xkaW5jbHVkZWRpciw7dCB0CistcyxAaW5mb2RpckAsJGluZm9kaXIsO3QgdAorLXMsQG1hbmRpckAsJG1hbmRpciw7dCB0CistcyxAYnVpbGRfYWxpYXNALCRidWlsZF9hbGlhcyw7dCB0CistcyxAaG9zdF9hbGlhc0AsJGhvc3RfYWxpYXMsO3QgdAorLXMsQHRhcmdldF9hbGlhc0AsJHRhcmdldF9hbGlhcyw7dCB0CistcyxAREVGU0AsJERFRlMsO3QgdAorLXMsQEVDSE9fQ0AsJEVDSE9fQyw7dCB0CistcyxARUNIT19OQCwkRUNIT19OLDt0IHQKKy1zLEBFQ0hPX1RALCRFQ0hPX1QsO3QgdAorLXMsQExJQlNALCRMSUJTLDt0IHQKKy1zLEBNQVlfU1VQUExZX1NZU0NBTExTX1RSVUVALCRNQVlfU1VQUExZX1NZU0NBTExTX1RSVUUsO3QgdAorLXMsQE1BWV9TVVBQTFlfU1lTQ0FMTFNfRkFMU0VALCRNQVlfU1VQUExZX1NZU0NBTExTX0ZBTFNFLDt0IHQKKy1zLEBuZXdsaWJfYmFzZWRpckAsJG5ld2xpYl9iYXNlZGlyLDt0IHQKKy1zLEBidWlsZEAsJGJ1aWxkLDt0IHQKKy1zLEBidWlsZF9jcHVALCRidWlsZF9jcHUsO3QgdAorLXMsQGJ1aWxkX3ZlbmRvckAsJGJ1aWxkX3ZlbmRvciw7dCB0CistcyxAYnVpbGRfb3NALCRidWlsZF9vcyw7dCB0CistcyxAaG9zdEAsJGhvc3QsO3QgdAorLXMsQGhvc3RfY3B1QCwkaG9zdF9jcHUsO3QgdAorLXMsQGhvc3RfdmVuZG9yQCwkaG9zdF92ZW5kb3IsO3QgdAorLXMsQGhvc3Rfb3NALCRob3N0X29zLDt0IHQKKy1zLEBJTlNUQUxMX1BST0dSQU1ALCRJTlNUQUxMX1BST0dSQU0sO3QgdAorLXMsQElOU1RBTExfU0NSSVBUQCwkSU5TVEFMTF9TQ1JJUFQsO3QgdAorLXMsQElOU1RBTExfREFUQUAsJElOU1RBTExfREFUQSw7dCB0CistcyxAQ1lHUEFUSF9XQCwkQ1lHUEFUSF9XLDt0IHQKKy1zLEBQQUNLQUdFQCwkUEFDS0FHRSw7dCB0CistcyxAVkVSU0lPTkAsJFZFUlNJT04sO3QgdAorLXMsQEFDTE9DQUxALCRBQ0xPQ0FMLDt0IHQKKy1zLEBBVVRPQ09ORkAsJEFVVE9DT05GLDt0IHQKKy1zLEBBVVRPTUFLRUAsJEFVVE9NQUtFLDt0IHQKKy1zLEBBVVRPSEVBREVSQCwkQVVUT0hFQURFUiw7dCB0CistcyxATUFLRUlORk9ALCRNQUtFSU5GTyw7dCB0CistcyxAaW5zdGFsbF9zaEAsJGluc3RhbGxfc2gsO3QgdAorLXMsQFNUUklQQCwkU1RSSVAsO3QgdAorLXMsQGFjX2N0X1NUUklQQCwkYWNfY3RfU1RSSVAsO3QgdAorLXMsQElOU1RBTExfU1RSSVBfUFJPR1JBTUAsJElOU1RBTExfU1RSSVBfUFJPR1JBTSw7dCB0CistcyxAbWtkaXJfcEAsJG1rZGlyX3AsO3QgdAorLXMsQEFXS0AsJEFXSyw7dCB0CistcyxAU0VUX01BS0VALCRTRVRfTUFLRSw7dCB0CistcyxAYW1fX2xlYWRpbmdfZG90QCwkYW1fX2xlYWRpbmdfZG90LDt0IHQKKy1zLEBBTVRBUkAsJEFNVEFSLDt0IHQKKy1zLEBhbV9fdGFyQCwkYW1fX3Rhciw7dCB0CistcyxAYW1fX3VudGFyQCwkYW1fX3VudGFyLDt0IHQKKy1zLEBDQ0AsJENDLDt0IHQKKy1zLEBERVBESVJALCRERVBESVIsO3QgdAorLXMsQGFtX19pbmNsdWRlQCwkYW1fX2luY2x1ZGUsO3QgdAorLXMsQGFtX19xdW90ZUAsJGFtX19xdW90ZSw7dCB0CistcyxAQU1ERVBfVFJVRUAsJEFNREVQX1RSVUUsO3QgdAorLXMsQEFNREVQX0ZBTFNFQCwkQU1ERVBfRkFMU0UsO3QgdAorLXMsQEFNREVQQkFDS1NMQVNIQCwkQU1ERVBCQUNLU0xBU0gsO3QgdAorLXMsQENDREVQTU9ERUAsJENDREVQTU9ERSw7dCB0CistcyxAYW1fX2Zhc3RkZXBDQ19UUlVFQCwkYW1fX2Zhc3RkZXBDQ19UUlVFLDt0IHQKKy1zLEBhbV9fZmFzdGRlcENDX0ZBTFNFQCwkYW1fX2Zhc3RkZXBDQ19GQUxTRSw7dCB0CistcyxAQVNALCRBUyw7dCB0CistcyxAYWNfY3RfQVNALCRhY19jdF9BUyw7dCB0CistcyxAQVJALCRBUiw7dCB0CistcyxAYWNfY3RfQVJALCRhY19jdF9BUiw7dCB0CistcyxAUkFOTElCQCwkUkFOTElCLDt0IHQKKy1zLEBhY19jdF9SQU5MSUJALCRhY19jdF9SQU5MSUIsO3QgdAorLXMsQFJFQURFTEZALCRSRUFERUxGLDt0IHQKKy1zLEBhY19jdF9SRUFERUxGQCwkYWNfY3RfUkVBREVMRiw7dCB0CistcyxATUFJTlRBSU5FUl9NT0RFX1RSVUVALCRNQUlOVEFJTkVSX01PREVfVFJVRSw7dCB0CistcyxATUFJTlRBSU5FUl9NT0RFX0ZBTFNFQCwkTUFJTlRBSU5FUl9NT0RFX0ZBTFNFLDt0IHQKKy1zLEBNQUlOVEAsJE1BSU5ULDt0IHQKKy1zLEBDQ0FTQCwkQ0NBUyw7dCB0CistcyxAQ0NBU0ZMQUdTQCwkQ0NBU0ZMQUdTLDt0IHQKKy1zLEBORVdMSUJfQ0ZMQUdTQCwkTkVXTElCX0NGTEFHUyw7dCB0CistcyxATERGTEFHU0AsJExERkxBR1MsO3QgdAorLXMsQEVMSVhfTEVWRUxfMF9UUlVFQCwkRUxJWF9MRVZFTF8wX1RSVUUsO3QgdAorLXMsQEVMSVhfTEVWRUxfMF9GQUxTRUAsJEVMSVhfTEVWRUxfMF9GQUxTRSw7dCB0CistcyxARUxJWF9MRVZFTF8xX1RSVUVALCRFTElYX0xFVkVMXzFfVFJVRSw7dCB0CistcyxARUxJWF9MRVZFTF8xX0ZBTFNFQCwkRUxJWF9MRVZFTF8xX0ZBTFNFLDt0IHQKKy1zLEBFTElYX0xFVkVMXzJfVFJVRUAsJEVMSVhfTEVWRUxfMl9UUlVFLDt0IHQKKy1zLEBFTElYX0xFVkVMXzJfRkFMU0VALCRFTElYX0xFVkVMXzJfRkFMU0UsO3QgdAorLXMsQEVMSVhfTEVWRUxfM19UUlVFQCwkRUxJWF9MRVZFTF8zX1RSVUUsO3QgdAorLXMsQEVMSVhfTEVWRUxfM19GQUxTRUAsJEVMSVhfTEVWRUxfM19GQUxTRSw7dCB0CistcyxARUxJWF9MRVZFTF80X1RSVUVALCRFTElYX0xFVkVMXzRfVFJVRSw7dCB0CistcyxARUxJWF9MRVZFTF80X0ZBTFNFQCwkRUxJWF9MRVZFTF80X0ZBTFNFLDt0IHQKKy1zLEBVU0VfTElCVE9PTF9UUlVFQCwkVVNFX0xJQlRPT0xfVFJVRSw7dCB0CistcyxAVVNFX0xJQlRPT0xfRkFMU0VALCRVU0VfTElCVE9PTF9GQUxTRSw7dCB0CistcyxAT0JKRVhUQCwkT0JKRVhULDt0IHQKKy1zLEBvZXh0QCwkb2V4dCw7dCB0CistcyxAYWV4dEAsJGFleHQsO3QgdAorLXMsQGxwZnhALCRscGZ4LDt0IHQKKy1zLEBsaWJtX21hY2hpbmVfZGlyQCwkbGlibV9tYWNoaW5lX2Rpciw7dCB0CistcyxAbWFjaGluZV9kaXJALCRtYWNoaW5lX2Rpciw7dCB0CistcyxAc3lzX2RpckAsJHN5c19kaXIsO3QgdAorLXMsQFNFREAsJFNFRCw7dCB0CistcyxARExMVE9PTEAsJERMTFRPT0wsO3QgdAorLXMsQGFjX2N0X0RMTFRPT0xALCRhY19jdF9ETExUT09MLDt0IHQKKy1zLEBPQkpEVU1QQCwkT0JKRFVNUCw7dCB0CistcyxAYWNfY3RfT0JKRFVNUEAsJGFjX2N0X09CSkRVTVAsO3QgdAorLXMsQExJQlRPT0xALCRMSUJUT09MLDt0IHQKKy1zLEBDRkxBR1NALCRDRkxBR1MsO3QgdAorLXMsQENQUEZMQUdTQCwkQ1BQRkxBR1MsO3QgdAorLXMsQGFjX2N0X0NDQCwkYWNfY3RfQ0MsO3QgdAorLXMsQEVYRUVYVEAsJEVYRUVYVCw7dCB0CistcyxARUdSRVBALCRFR1JFUCw7dCB0CistcyxARkdSRVBALCRGR1JFUCw7dCB0CistcyxAR1JFUEAsJEdSRVAsO3QgdAorLXMsQExEQCwkTEQsO3QgdAorLXMsQERVTVBCSU5ALCREVU1QQklOLDt0IHQKKy1zLEBhY19jdF9EVU1QQklOQCwkYWNfY3RfRFVNUEJJTiw7dCB0CistcyxATk1ALCROTSw7dCB0CistcyxATE5fU0AsJExOX1MsO3QgdAorLXMsQGx0X0VDSE9ALCRsdF9FQ0hPLDt0IHQKKy1zLEBEU1lNVVRJTEAsJERTWU1VVElMLDt0IHQKKy1zLEBhY19jdF9EU1lNVVRJTEAsJGFjX2N0X0RTWU1VVElMLDt0IHQKKy1zLEBOTUVESVRALCROTUVESVQsO3QgdAorLXMsQGFjX2N0X05NRURJVEAsJGFjX2N0X05NRURJVCw7dCB0CistcyxATElQT0AsJExJUE8sO3QgdAorLXMsQGFjX2N0X0xJUE9ALCRhY19jdF9MSVBPLDt0IHQKKy1zLEBPVE9PTEAsJE9UT09MLDt0IHQKKy1zLEBhY19jdF9PVE9PTEAsJGFjX2N0X09UT09MLDt0IHQKKy1zLEBPVE9PTDY0QCwkT1RPT0w2NCw7dCB0CistcyxAYWNfY3RfT1RPT0w2NEAsJGFjX2N0X09UT09MNjQsO3QgdAorLXMsQENQUEAsJENQUCw7dCB0CistcyxAc3ViZGlyc0AsJHN1YmRpcnMsO3QgdAorLXMsQENSVDBALCRDUlQwLDt0IHQKKy1zLEBIQVZFX1NZU19ESVJfVFJVRUAsJEhBVkVfU1lTX0RJUl9UUlVFLDt0IHQKKy1zLEBIQVZFX1NZU19ESVJfRkFMU0VALCRIQVZFX1NZU19ESVJfRkFMU0UsO3QgdAorLXMsQExJQk9CSlNALCRMSUJPQkpTLDt0IHQKKy1zLEBMVExJQk9CSlNALCRMVExJQk9CSlMsO3QgdAorLUNFT0YKKy0KKy1fQUNFT0YKKy0KKy0gIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorLSAgIyBTcGxpdCB0aGUgc3Vic3RpdHV0aW9ucyBpbnRvIGJpdGUtc2l6ZWQgcGllY2VzIGZvciBzZWRzIHdpdGgKKy0gICMgc21hbGwgY29tbWFuZCBudW1iZXIgbGltaXRzLCBsaWtlIG9uIERpZ2l0YWwgT1NGLzEgYW5kIEhQLVVYLgorLSAgYWNfbWF4X3NlZF9saW5lcz00OAorLSAgYWNfc2VkX2ZyYWc9MSAjIE51bWJlciBvZiBjdXJyZW50IGZpbGUuCistICBhY19iZWc9MSAjIEZpcnN0IGxpbmUgZm9yIGN1cnJlbnQgZmlsZS4KKy0gIGFjX2VuZD0kYWNfbWF4X3NlZF9saW5lcyAjIExpbmUgYWZ0ZXIgbGFzdCBsaW5lIGZvciBjdXJyZW50IGZpbGUuCistICBhY19tb3JlX2xpbmVzPToKKy0gIGFjX3NlZF9jbWRzPQorLSAgd2hpbGUgJGFjX21vcmVfbGluZXM7IGRvCistICAgIGlmIHRlc3QgJGFjX2JlZyAtZ3QgMTsgdGhlbgorLSAgICAgIHNlZCAiMSwke2FjX2JlZ31kOyAke2FjX2VuZH1xIiAkdG1wL3N1YnMuc2VkID4kdG1wL3N1YnMuZnJhZworLSAgICBlbHNlCistICAgICAgc2VkICIke2FjX2VuZH1xIiAkdG1wL3N1YnMuc2VkID4kdG1wL3N1YnMuZnJhZworLSAgICBmaQorLSAgICBpZiB0ZXN0ICEgLXMgJHRtcC9zdWJzLmZyYWc7IHRoZW4KKy0gICAgICBhY19tb3JlX2xpbmVzPWZhbHNlCistICAgIGVsc2UKKy0gICAgICAjIFRoZSBwdXJwb3NlIG9mIHRoZSBsYWJlbCBhbmQgb2YgdGhlIGJyYW5jaGluZyBjb25kaXRpb24gaXMgdG8KKy0gICAgICAjIHNwZWVkIHVwIHRoZSBzZWQgcHJvY2Vzc2luZyAoaWYgdGhlcmUgYXJlIG5vIGBAJyBhdCBhbGwsIHRoZXJlCistICAgICAgIyBpcyBubyBuZWVkIHRvIGJyb3dzZSBhbnkgb2YgdGhlIHN1YnN0aXR1dGlvbnMpLgorLSAgICAgICMgVGhlc2UgYXJlIHRoZSB0d28gZXh0cmEgc2VkIGNvbW1hbmRzIG1lbnRpb25lZCBhYm92ZS4KKy0gICAgICAoZWNobyAnOnQKKy0gIC9AW2EtekEtWl9dW2EtekEtWl8wLTldKkAvIWInICYmIGNhdCAkdG1wL3N1YnMuZnJhZykgPiR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkCistICAgICAgaWYgdGVzdCAteiAiJGFjX3NlZF9jbWRzIjsgdGhlbgorLQlhY19zZWRfY21kcz0ic2VkIC1mICR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkIgorLSAgICAgIGVsc2UKKy0JYWNfc2VkX2NtZHM9IiRhY19zZWRfY21kcyB8IHNlZCAtZiAkdG1wL3N1YnMtJGFjX3NlZF9mcmFnLnNlZCIKKy0gICAgICBmaQorLSAgICAgIGFjX3NlZF9mcmFnPWBleHByICRhY19zZWRfZnJhZyArIDFgCistICAgICAgYWNfYmVnPSRhY19lbmQKKy0gICAgICBhY19lbmQ9YGV4cHIgJGFjX2VuZCArICRhY19tYXhfc2VkX2xpbmVzYAorLSAgICBmaQorLSAgZG9uZQorLSAgaWYgdGVzdCAteiAiJGFjX3NlZF9jbWRzIjsgdGhlbgorLSAgICBhY19zZWRfY21kcz1jYXQKKytpZiB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIjsgdGhlbgorKworK19BQ0VPRgorKworKworKworK2FjX2RlbGltPSclIV8hIyAnCisrZm9yIGFjX2xhc3RfdHJ5IGluIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIDo7IGRvCisrICBjYXQgPmNvbmYkJHN1YnMuc2VkIDw8X0FDRU9GCisrU0hFTEwhJFNIRUxMJGFjX2RlbGltCisrUEFUSF9TRVBBUkFUT1IhJFBBVEhfU0VQQVJBVE9SJGFjX2RlbGltCisrUEFDS0FHRV9OQU1FISRQQUNLQUdFX05BTUUkYWNfZGVsaW0KKytQQUNLQUdFX1RBUk5BTUUhJFBBQ0tBR0VfVEFSTkFNRSRhY19kZWxpbQorK1BBQ0tBR0VfVkVSU0lPTiEkUEFDS0FHRV9WRVJTSU9OJGFjX2RlbGltCisrUEFDS0FHRV9TVFJJTkchJFBBQ0tBR0VfU1RSSU5HJGFjX2RlbGltCisrUEFDS0FHRV9CVUdSRVBPUlQhJFBBQ0tBR0VfQlVHUkVQT1JUJGFjX2RlbGltCisrZXhlY19wcmVmaXghJGV4ZWNfcHJlZml4JGFjX2RlbGltCisrcHJlZml4ISRwcmVmaXgkYWNfZGVsaW0KKytwcm9ncmFtX3RyYW5zZm9ybV9uYW1lISRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lJGFjX2RlbGltCisrYmluZGlyISRiaW5kaXIkYWNfZGVsaW0KKytzYmluZGlyISRzYmluZGlyJGFjX2RlbGltCisrbGliZXhlY2RpciEkbGliZXhlY2RpciRhY19kZWxpbQorK2RhdGFyb290ZGlyISRkYXRhcm9vdGRpciRhY19kZWxpbQorK2RhdGFkaXIhJGRhdGFkaXIkYWNfZGVsaW0KKytzeXNjb25mZGlyISRzeXNjb25mZGlyJGFjX2RlbGltCisrc2hhcmVkc3RhdGVkaXIhJHNoYXJlZHN0YXRlZGlyJGFjX2RlbGltCisrbG9jYWxzdGF0ZWRpciEkbG9jYWxzdGF0ZWRpciRhY19kZWxpbQorK2luY2x1ZGVkaXIhJGluY2x1ZGVkaXIkYWNfZGVsaW0KKytvbGRpbmNsdWRlZGlyISRvbGRpbmNsdWRlZGlyJGFjX2RlbGltCisrZG9jZGlyISRkb2NkaXIkYWNfZGVsaW0KKytpbmZvZGlyISRpbmZvZGlyJGFjX2RlbGltCisraHRtbGRpciEkaHRtbGRpciRhY19kZWxpbQorK2R2aWRpciEkZHZpZGlyJGFjX2RlbGltCisrcGRmZGlyISRwZGZkaXIkYWNfZGVsaW0KKytwc2RpciEkcHNkaXIkYWNfZGVsaW0KKytsaWJkaXIhJGxpYmRpciRhY19kZWxpbQorK2xvY2FsZWRpciEkbG9jYWxlZGlyJGFjX2RlbGltCisrbWFuZGlyISRtYW5kaXIkYWNfZGVsaW0KKytERUZTISRERUZTJGFjX2RlbGltCisrRUNIT19DISRFQ0hPX0MkYWNfZGVsaW0KKytFQ0hPX04hJEVDSE9fTiRhY19kZWxpbQorK0VDSE9fVCEkRUNIT19UJGFjX2RlbGltCisrTElCUyEkTElCUyRhY19kZWxpbQorK2J1aWxkX2FsaWFzISRidWlsZF9hbGlhcyRhY19kZWxpbQorK2hvc3RfYWxpYXMhJGhvc3RfYWxpYXMkYWNfZGVsaW0KKyt0YXJnZXRfYWxpYXMhJHRhcmdldF9hbGlhcyRhY19kZWxpbQorK01BWV9TVVBQTFlfU1lTQ0FMTFNfVFJVRSEkTUFZX1NVUFBMWV9TWVNDQUxMU19UUlVFJGFjX2RlbGltCisrTUFZX1NVUFBMWV9TWVNDQUxMU19GQUxTRSEkTUFZX1NVUFBMWV9TWVNDQUxMU19GQUxTRSRhY19kZWxpbQorK25ld2xpYl9iYXNlZGlyISRuZXdsaWJfYmFzZWRpciRhY19kZWxpbQorK2J1aWxkISRidWlsZCRhY19kZWxpbQorK2J1aWxkX2NwdSEkYnVpbGRfY3B1JGFjX2RlbGltCisrYnVpbGRfdmVuZG9yISRidWlsZF92ZW5kb3IkYWNfZGVsaW0KKytidWlsZF9vcyEkYnVpbGRfb3MkYWNfZGVsaW0KKytob3N0ISRob3N0JGFjX2RlbGltCisraG9zdF9jcHUhJGhvc3RfY3B1JGFjX2RlbGltCisraG9zdF92ZW5kb3IhJGhvc3RfdmVuZG9yJGFjX2RlbGltCisraG9zdF9vcyEkaG9zdF9vcyRhY19kZWxpbQorK0lOU1RBTExfUFJPR1JBTSEkSU5TVEFMTF9QUk9HUkFNJGFjX2RlbGltCisrSU5TVEFMTF9TQ1JJUFQhJElOU1RBTExfU0NSSVBUJGFjX2RlbGltCisrSU5TVEFMTF9EQVRBISRJTlNUQUxMX0RBVEEkYWNfZGVsaW0KKytDWUdQQVRIX1chJENZR1BBVEhfVyRhY19kZWxpbQorK1BBQ0tBR0UhJFBBQ0tBR0UkYWNfZGVsaW0KKytWRVJTSU9OISRWRVJTSU9OJGFjX2RlbGltCisrQUNMT0NBTCEkQUNMT0NBTCRhY19kZWxpbQorK0FVVE9DT05GISRBVVRPQ09ORiRhY19kZWxpbQorK0FVVE9NQUtFISRBVVRPTUFLRSRhY19kZWxpbQorK0FVVE9IRUFERVIhJEFVVE9IRUFERVIkYWNfZGVsaW0KKytNQUtFSU5GTyEkTUFLRUlORk8kYWNfZGVsaW0KKytpbnN0YWxsX3NoISRpbnN0YWxsX3NoJGFjX2RlbGltCisrU1RSSVAhJFNUUklQJGFjX2RlbGltCisrSU5TVEFMTF9TVFJJUF9QUk9HUkFNISRJTlNUQUxMX1NUUklQX1BST0dSQU0kYWNfZGVsaW0KKytta2Rpcl9wISRta2Rpcl9wJGFjX2RlbGltCisrQVdLISRBV0skYWNfZGVsaW0KKytTRVRfTUFLRSEkU0VUX01BS0UkYWNfZGVsaW0KKythbV9fbGVhZGluZ19kb3QhJGFtX19sZWFkaW5nX2RvdCRhY19kZWxpbQorK0FNVEFSISRBTVRBUiRhY19kZWxpbQorK2FtX190YXIhJGFtX190YXIkYWNfZGVsaW0KKythbV9fdW50YXIhJGFtX191bnRhciRhY19kZWxpbQorK0NDISRDQyRhY19kZWxpbQorK0RFUERJUiEkREVQRElSJGFjX2RlbGltCisrYW1fX2luY2x1ZGUhJGFtX19pbmNsdWRlJGFjX2RlbGltCisrYW1fX3F1b3RlISRhbV9fcXVvdGUkYWNfZGVsaW0KKytBTURFUF9UUlVFISRBTURFUF9UUlVFJGFjX2RlbGltCisrQU1ERVBfRkFMU0UhJEFNREVQX0ZBTFNFJGFjX2RlbGltCisrQU1ERVBCQUNLU0xBU0ghJEFNREVQQkFDS1NMQVNIJGFjX2RlbGltCisrQ0NERVBNT0RFISRDQ0RFUE1PREUkYWNfZGVsaW0KKythbV9fZmFzdGRlcENDX1RSVUUhJGFtX19mYXN0ZGVwQ0NfVFJVRSRhY19kZWxpbQorK2FtX19mYXN0ZGVwQ0NfRkFMU0UhJGFtX19mYXN0ZGVwQ0NfRkFMU0UkYWNfZGVsaW0KKytBUyEkQVMkYWNfZGVsaW0KKytBUiEkQVIkYWNfZGVsaW0KKytSQU5MSUIhJFJBTkxJQiRhY19kZWxpbQorK1JFQURFTEYhJFJFQURFTEYkYWNfZGVsaW0KKytNQUlOVEFJTkVSX01PREVfVFJVRSEkTUFJTlRBSU5FUl9NT0RFX1RSVUUkYWNfZGVsaW0KKytNQUlOVEFJTkVSX01PREVfRkFMU0UhJE1BSU5UQUlORVJfTU9ERV9GQUxTRSRhY19kZWxpbQorK01BSU5UISRNQUlOVCRhY19kZWxpbQorK0NDQVMhJENDQVMkYWNfZGVsaW0KKytDQ0FTRkxBR1MhJENDQVNGTEFHUyRhY19kZWxpbQorK05FV0xJQl9DRkxBR1MhJE5FV0xJQl9DRkxBR1MkYWNfZGVsaW0KKytMREZMQUdTISRMREZMQUdTJGFjX2RlbGltCisrRUxJWF9MRVZFTF8wX1RSVUUhJEVMSVhfTEVWRUxfMF9UUlVFJGFjX2RlbGltCisrRUxJWF9MRVZFTF8wX0ZBTFNFISRFTElYX0xFVkVMXzBfRkFMU0UkYWNfZGVsaW0KKytFTElYX0xFVkVMXzFfVFJVRSEkRUxJWF9MRVZFTF8xX1RSVUUkYWNfZGVsaW0KKytFTElYX0xFVkVMXzFfRkFMU0UhJEVMSVhfTEVWRUxfMV9GQUxTRSRhY19kZWxpbQorK0VMSVhfTEVWRUxfMl9UUlVFISRFTElYX0xFVkVMXzJfVFJVRSRhY19kZWxpbQorK0VMSVhfTEVWRUxfMl9GQUxTRSEkRUxJWF9MRVZFTF8yX0ZBTFNFJGFjX2RlbGltCisrRUxJWF9MRVZFTF8zX1RSVUUhJEVMSVhfTEVWRUxfM19UUlVFJGFjX2RlbGltCisrX0FDRU9GCisrCisrICBpZiB0ZXN0IGBzZWQgLW4gInMvLiokYWNfZGVsaW1cJC9YL3AiIGNvbmYkJHN1YnMuc2VkIHwgZ3JlcCAtYyBYYCA9IDk3OyB0aGVuCisrICAgIGJyZWFrCisrICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbgorKyAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrICBlbHNlCisrICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCisgICBmaQorLWZpICMgdGVzdCAtbiAiJENPTkZJR19GSUxFUyIKKytkb25lCisrCisrYWNfZW9mPWBzZWQgLW4gJy9eQ0VPRlswLTldKiQvcy9DRU9GLzAvcCcgY29uZiQkc3Vicy5zZWRgCisraWYgdGVzdCAtbiAiJGFjX2VvZiI7IHRoZW4KKysgIGFjX2VvZj1gZWNobyAiJGFjX2VvZiIgfCBzb3J0IC1ucnUgfCBzZWQgMXFgCisrICBhY19lb2Y9YGV4cHIgJGFjX2VvZiArIDFgCisrZmkKKysKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorK2NhdCA+IlwkdG1wL3N1YnMtMS5zZWQiIDw8XENFT0YkYWNfZW9mCisrL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYgorK19BQ0VPRgorK3NlZCAnCisrcy9bLFxcJl0vXFwmL2c7IHMvQC9AfCNfISFfI3wvZworK3MvXi9zLEAvOyBzLyEvQCx8I18hIV8jfC8KKys6bgorK3QgbgorK3MvJyIkYWNfZGVsaW0iJyQvLGcvOyB0Cisrcy8kL1xcLzsgcAorK047IHMvXi4qXG4vLzsgcy9bLFxcJl0vXFwmL2c7IHMvQC9AfCNfISFfI3wvZzsgYiBuCisrJyA+PiRDT05GSUdfU1RBVFVTIDxjb25mJCRzdWJzLnNlZAorK3JtIC1mIGNvbmYkJHN1YnMuc2VkCisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKytDRU9GJGFjX2VvZgorK19BQ0VPRgorKworKworK2FjX2RlbGltPSclIV8hIyAnCisrZm9yIGFjX2xhc3RfdHJ5IGluIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIDo7IGRvCisrICBjYXQgPmNvbmYkJHN1YnMuc2VkIDw8X0FDRU9GCisrRUxJWF9MRVZFTF8zX0ZBTFNFISRFTElYX0xFVkVMXzNfRkFMU0UkYWNfZGVsaW0KKytFTElYX0xFVkVMXzRfVFJVRSEkRUxJWF9MRVZFTF80X1RSVUUkYWNfZGVsaW0KKytFTElYX0xFVkVMXzRfRkFMU0UhJEVMSVhfTEVWRUxfNF9GQUxTRSRhY19kZWxpbQorK1VTRV9MSUJUT09MX1RSVUUhJFVTRV9MSUJUT09MX1RSVUUkYWNfZGVsaW0KKytVU0VfTElCVE9PTF9GQUxTRSEkVVNFX0xJQlRPT0xfRkFMU0UkYWNfZGVsaW0KKytPQkpFWFQhJE9CSkVYVCRhY19kZWxpbQorK29leHQhJG9leHQkYWNfZGVsaW0KKythZXh0ISRhZXh0JGFjX2RlbGltCisrbHBmeCEkbHBmeCRhY19kZWxpbQorK2xpYm1fbWFjaGluZV9kaXIhJGxpYm1fbWFjaGluZV9kaXIkYWNfZGVsaW0KKyttYWNoaW5lX2RpciEkbWFjaGluZV9kaXIkYWNfZGVsaW0KKytzeXNfZGlyISRzeXNfZGlyJGFjX2RlbGltCisrU0VEISRTRUQkYWNfZGVsaW0KKytETExUT09MISRETExUT09MJGFjX2RlbGltCisrT0JKRFVNUCEkT0JKRFVNUCRhY19kZWxpbQorK0xJQlRPT0whJExJQlRPT0wkYWNfZGVsaW0KKytDRkxBR1MhJENGTEFHUyRhY19kZWxpbQorK0NQUEZMQUdTISRDUFBGTEFHUyRhY19kZWxpbQorK2FjX2N0X0NDISRhY19jdF9DQyRhY19kZWxpbQorK0VYRUVYVCEkRVhFRVhUJGFjX2RlbGltCisrR1JFUCEkR1JFUCRhY19kZWxpbQorK0VHUkVQISRFR1JFUCRhY19kZWxpbQorK0ZHUkVQISRGR1JFUCRhY19kZWxpbQorK0xEISRMRCRhY19kZWxpbQorK0RVTVBCSU4hJERVTVBCSU4kYWNfZGVsaW0KKythY19jdF9EVU1QQklOISRhY19jdF9EVU1QQklOJGFjX2RlbGltCisrTk0hJE5NJGFjX2RlbGltCisrTE5fUyEkTE5fUyRhY19kZWxpbQorK2x0X0VDSE8hJGx0X0VDSE8kYWNfZGVsaW0KKytEU1lNVVRJTCEkRFNZTVVUSUwkYWNfZGVsaW0KKytOTUVESVQhJE5NRURJVCRhY19kZWxpbQorK0xJUE8hJExJUE8kYWNfZGVsaW0KKytPVE9PTCEkT1RPT0wkYWNfZGVsaW0KKytPVE9PTDY0ISRPVE9PTDY0JGFjX2RlbGltCisrQ1BQISRDUFAkYWNfZGVsaW0KKytzdWJkaXJzISRzdWJkaXJzJGFjX2RlbGltCisrQ1JUMCEkQ1JUMCRhY19kZWxpbQorK0hBVkVfU1lTX0RJUl9UUlVFISRIQVZFX1NZU19ESVJfVFJVRSRhY19kZWxpbQorK0hBVkVfU1lTX0RJUl9GQUxTRSEkSEFWRV9TWVNfRElSX0ZBTFNFJGFjX2RlbGltCisrTElCT0JKUyEkTElCT0JKUyRhY19kZWxpbQorK0xUTElCT0JKUyEkTFRMSUJPQkpTJGFjX2RlbGltCisrX0FDRU9GCisrCisrICBpZiB0ZXN0IGBzZWQgLW4gInMvLiokYWNfZGVsaW1cJC9YL3AiIGNvbmYkJHN1YnMuc2VkIHwgZ3JlcCAtYyBYYCA9IDQxOyB0aGVuCisrICAgIGJyZWFrCisrICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbgorKyAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrICBlbHNlCisrICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCisrICBmaQorK2RvbmUKKysKKythY19lb2Y9YHNlZCAtbiAnL15DRU9GWzAtOV0qJC9zL0NFT0YvMC9wJyBjb25mJCRzdWJzLnNlZGAKKytpZiB0ZXN0IC1uICIkYWNfZW9mIjsgdGhlbgorKyAgYWNfZW9mPWBlY2hvICIkYWNfZW9mIiB8IHNvcnQgLW5ydSB8IHNlZCAxcWAKKysgIGFjX2VvZj1gZXhwciAkYWNfZW9mICsgMWAKKytmaQorIAorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisrY2F0ID4iXCR0bXAvc3Vicy0yLnNlZCIgPDxcQ0VPRiRhY19lb2YKKysvQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiIGVuZAorK19BQ0VPRgorK3NlZCAnCisrcy9bLFxcJl0vXFwmL2c7IHMvQC9AfCNfISFfI3wvZworK3MvXi9zLEAvOyBzLyEvQCx8I18hIV8jfC8KKys6bgorK3QgbgorK3MvJyIkYWNfZGVsaW0iJyQvLGcvOyB0Cisrcy8kL1xcLzsgcAorK047IHMvXi4qXG4vLzsgcy9bLFxcJl0vXFwmL2c7IHMvQC9AfCNfISFfI3wvZzsgYiBuCisrJyA+PiRDT05GSUdfU1RBVFVTIDxjb25mJCRzdWJzLnNlZAorK3JtIC1mIGNvbmYkJHN1YnMuc2VkCisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKys6ZW5kCisrcy98I18hIV8jfC8vZworK0NFT0YkYWNfZW9mCisgX0FDRU9GCisrCisrCisrIyBWUEFUSCBtYXkgY2F1c2UgdHJvdWJsZSB3aXRoIHNvbWUgbWFrZXMsIHNvIHdlIHJlbW92ZSAkKHNyY2RpciksCisrIyAke3NyY2Rpcn0gYW5kIEBzcmNkaXJAIGZyb20gVlBBVEggaWYgc3JjZGlyIGlzICIuIiwgc3RyaXAgbGVhZGluZyBhbmQKKysjIHRyYWlsaW5nIGNvbG9ucyBhbmQgdGhlbiByZW1vdmUgdGhlIHdob2xlIGxpbmUgaWYgVlBBVEggYmVjb21lcyBlbXB0eQorKyMgKGFjdHVhbGx5IHdlIGxlYXZlIGFuIGVtcHR5IGxpbmUgdG8gcHJlc2VydmUgbGluZSBudW1iZXJzKS4KKytpZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgorKyAgYWNfdnBzdWI9Jy9eWwkgXSpWUEFUSFsJIF0qPS97Cisrcy86KlwkKHNyY2Rpcik6Ki86LworK3MvOipcJHtzcmNkaXJ9OiovOi8KKytzLzoqQHNyY2RpckA6Ki86LworK3MvXlwoW149XSo9WwkgXSpcKToqL1wxLworK3MvOiokLy8KKytzL15bXj1dKj1bCSBdKiQvLworK30nCisrZmkKKysKKyBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKy1mb3IgYWNfZmlsZSBpbiA6ICRDT05GSUdfRklMRVM7IGRvIHRlc3QgIngkYWNfZmlsZSIgPSB4OiAmJiBjb250aW51ZQorLSAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIiwgZGVmYXVsdGluZyBpbmZpbGU9Im91dGZpbGUuaW4iLgorLSAgY2FzZSAkYWNfZmlsZSBpbgorLSAgLSB8ICo6LSB8ICo6LToqICkgIyBpbnB1dCBmcm9tIHN0ZGluCistCWNhdCA+JHRtcC9zdGRpbgorLQlhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAorLQlhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworLSAgKjoqICkgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKy0JYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKKy0gICogKSAgIGFjX2ZpbGVfaW49JGFjX2ZpbGUuaW4gOzsKKytmaSAjIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiCisrCisrCisrZm9yIGFjX3RhZyBpbiAgOkYgJENPTkZJR19GSUxFUyAgICAgIDpDICRDT05GSUdfQ09NTUFORFMKKytkbworKyAgY2FzZSAkYWNfdGFnIGluCisrICA6W0ZITENdKSBhY19tb2RlPSRhY190YWc7IGNvbnRpbnVlOzsKKysgIGVzYWMKKysgIGNhc2UgJGFjX21vZGUkYWNfdGFnIGluCisrICA6W0ZITF0qOiopOzsKKysgIDpMKiB8IDpDKjoqKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBJbnZhbGlkIHRhZyAkYWNfdGFnLiIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogSW52YWxpZCB0YWcgJGFjX3RhZy4iID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKysgIDpbRkhdLSkgYWNfdGFnPS06LTs7CisrICA6W0ZIXSopIGFjX3RhZz0kYWNfdGFnOiRhY190YWcuaW47OworKyAgZXNhYworKyAgYWNfc2F2ZV9JRlM9JElGUworKyAgSUZTPToKKysgIHNldCB4ICRhY190YWcKKysgIElGUz0kYWNfc2F2ZV9JRlMKKysgIHNoaWZ0CisrICBhY19maWxlPSQxCisrICBzaGlmdAorKworKyAgY2FzZSAkYWNfbW9kZSBpbgorKyAgOkwpIGFjX3NvdXJjZT0kMTs7CisrICA6W0ZIXSkKKysgICAgYWNfZmlsZV9pbnB1dHM9CisrICAgIGZvciBhY19mCisrICAgIGRvCisrICAgICAgY2FzZSAkYWNfZiBpbgorKyAgICAgIC0pIGFjX2Y9IiR0bXAvc3RkaW4iOzsKKysgICAgICAqKSAjIExvb2sgZm9yIHRoZSBmaWxlIGZpcnN0IGluIHRoZSBidWlsZCB0cmVlLCB0aGVuIGluIHRoZSBzb3VyY2UgdHJlZQorKwkgIyAoaWYgdGhlIHBhdGggaXMgbm90IGFic29sdXRlKS4gIFRoZSBhYnNvbHV0ZSBwYXRoIGNhbm5vdCBiZSBET1Mtc3R5bGUsCisrCSAjIGJlY2F1c2UgJGFjX2YgY2Fubm90IGNvbnRhaW4gYDonLgorKwkgdGVzdCAtZiAiJGFjX2YiIHx8CisrCSAgIGNhc2UgJGFjX2YgaW4KKysJICAgW1xcLyRdKikgZmFsc2U7OworKwkgICAqKSB0ZXN0IC1mICIkc3JjZGlyLyRhY19mIiAmJiBhY19mPSIkc3JjZGlyLyRhY19mIjs7CisrCSAgIGVzYWMgfHwKKysJICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGFjX2YiID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRhY19mIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisrICAgICAgZXNhYworKyAgICAgIGFjX2ZpbGVfaW5wdXRzPSIkYWNfZmlsZV9pbnB1dHMgJGFjX2YiCisrICAgIGRvbmUKKysKKysgICAgIyBMZXQncyBzdGlsbCBwcmV0ZW5kIGl0IGlzIGBjb25maWd1cmUnIHdoaWNoIGluc3RhbnRpYXRlcyAoaS5lLiwgZG9uJ3QKKysgICAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byByZWFkOgorKyAgICAjICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZy5zdGF0dXMuICAqLworKyAgICBjb25maWd1cmVfaW5wdXQ9IkdlbmVyYXRlZCBmcm9tICJgSUZTPToKKysJICBlY2hvICQqIHwgc2VkICdzfF5bXjpdKi98fDtzfDpbXjpdKi98LCB8ZydgIiBieSBjb25maWd1cmUuIgorKyAgICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisrICAgICAgY29uZmlndXJlX2lucHV0PSIkYWNfZmlsZS4gICRjb25maWd1cmVfaW5wdXQiCisrICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQorK2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9CisrICAgIGZpCisrCisrICAgIGNhc2UgJGFjX3RhZyBpbgorKyAgICAqOi06KiB8ICo6LSkgY2F0ID4iJHRtcC9zdGRpbiI7OworKyAgICBlc2FjCisrICAgIDs7CisgICBlc2FjCisgCistICAjIENvbXB1dGUgQHNyY2RpckAsIEB0b3Bfc3JjZGlyQCwgYW5kIEBJTlNUQUxMQCBmb3Igc3ViZGlyZWN0b3JpZXMuCistICBhY19kaXI9YChkaXJuYW1lICIkYWNfZmlsZSIpIDI+L2Rldi9udWxsIHx8CisrICBhY19kaXI9YCRhc19kaXJuYW1lIC0tICIkYWNfZmlsZSIgfHwKKyAkYXNfZXhwciBYIiRhY19maWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorIAkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKyAJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCistCSBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IFwKKy0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorKwkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CisgZWNobyBYIiRhY19maWxlIiB8CistICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorLSAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKy0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKy0gIAkgIHMvLiovLi87IHEnYAorLSAgeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgorLSAgICBta2RpciAtcCAiJGFjX2RpciIKKy0gIGVsc2UKKy0gICAgYXNfZGlyPSIkYWNfZGlyIgorKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXC9cKSQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cKS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICBzLy4qLy4vOyBxJ2AKKysgIHsgYXNfZGlyPSIkYWNfZGlyIgorKyAgY2FzZSAkYXNfZGlyIGluICMoCisrICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7CisrICBlc2FjCisrICB0ZXN0IC1kICIkYXNfZGlyIiB8fCB7ICRhc19ta2Rpcl9wICYmIG1rZGlyIC1wICIkYXNfZGlyIjsgfSB8fCB7CisgICAgIGFzX2RpcnM9CistICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCistICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKKy0gICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKysgICAgd2hpbGUgOjsgZG8KKysgICAgICBjYXNlICRhc19kaXIgaW4gIygKKysgICAgICAqXCcqKSBhc19xZGlyPWBlY2hvICIkYXNfZGlyIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7ICMoCisrICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKKysgICAgICBlc2FjCisrICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKKysgICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAorICRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKyAJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKyAJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKy0JIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCistCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKysJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CisgZWNobyBYIiRhc19kaXIiIHwKKy0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CistICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorLSAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CistICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorLSAgCSAgcy8uKi8uLzsgcSdgCisrICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXChcL1wvXClbXi9dLioveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cL1wpJC97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXChcL1wpLioveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIHMvLiovLi87IHEnYAorKyAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCisgICAgIGRvbmUKKy0gICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKKy0gIGZpIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IFwiJGFjX2RpclwiIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiYyO30KKysgICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgorKyAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIiA+JjI7fQorICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorLQorICAgYWNfYnVpbGRkaXI9LgorIAorLWlmIHRlc3QgIiRhY19kaXIiICE9IC47IHRoZW4KKytjYXNlICIkYWNfZGlyIiBpbgorKy4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKyopCisgICBhY19kaXJfc3VmZml4PS9gZWNobyAiJGFjX2RpciIgfCBzZWQgJ3MsXlwuW1xcL10sLCdgCistICAjIEEgIi4uLyIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorLSAgYWNfdG9wX2J1aWxkZGlyPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3MsL1teXFwvXSosLi4vLGcnYAorLWVsc2UKKy0gIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcj0KKy1maQorKyAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorKyAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzLC9bXlxcL10qLC8uLixnO3MsLywsJ2AKKysgIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9zdWIgaW4KKysgICIiKSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKysgICopICBhY190b3BfYnVpbGRfcHJlZml4PSRhY190b3BfYnVpbGRkaXJfc3ViLyA7OworKyAgZXNhYyA7OworK2VzYWMKKythY19hYnNfdG9wX2J1aWxkZGlyPSRhY19wd2QKKythY19hYnNfYnVpbGRkaXI9JGFjX3B3ZCRhY19kaXJfc3VmZml4CisrIyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eToKKythY190b3BfYnVpbGRkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgKKyAKKyBjYXNlICRzcmNkaXIgaW4KKy0gIC4pICAjIE5vIC0tc3JjZGlyIG9wdGlvbi4gIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KKysgIC4pICAjIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KKyAgICAgYWNfc3JjZGlyPS4KKy0gICAgaWYgdGVzdCAteiAiJGFjX3RvcF9idWlsZGRpciI7IHRoZW4KKy0gICAgICAgYWNfdG9wX3NyY2Rpcj0uCistICAgIGVsc2UKKy0gICAgICAgYWNfdG9wX3NyY2Rpcj1gZWNobyAkYWNfdG9wX2J1aWxkZGlyIHwgc2VkICdzLC8kLCwnYAorLSAgICBmaSA7OworLSAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBwYXRoLgorKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisrICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgbmFtZS4KKyAgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKy0gICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7CistICAqKSAjIFJlbGF0aXZlIHBhdGguCistICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciRhY19kaXJfc3VmZml4CistICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIgOzsKKy1lc2FjCisrICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpcgorKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7CisrICAqKSAjIFJlbGF0aXZlIG5hbWUuCisrICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpcgorKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkLyRzcmNkaXIgOzsKKytlc2FjCisrYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAorIAorLSMgRG8gbm90IHVzZSBgY2QgZm9vICYmIHB3ZGAgdG8gY29tcHV0ZSBhYnNvbHV0ZSBwYXRocywgYmVjYXVzZQorLSMgdGhlIGRpcmVjdG9yaWVzIG1heSBub3QgZXhpc3QuCistY2FzZSBgcHdkYCBpbgorLS4pIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OworLSopCistICBjYXNlICIkYWNfZGlyIiBpbgorLSAgLikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgOzsKKy0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7CistICAqKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGAvIiRhY19kaXIiOzsKKy0gIGVzYWM7OworLWVzYWMKKy1jYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKy0uKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OworLSopCistICBjYXNlICR7YWNfdG9wX2J1aWxkZGlyfS4gaW4KKy0gIC4pIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpcjs7CistICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7CistICAqKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXIvJHthY190b3BfYnVpbGRkaXJ9Ljs7CistICBlc2FjOzsKKy1lc2FjCistY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCistLikgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKKy0qKQorLSAgY2FzZSAkYWNfc3JjZGlyIGluCistICAuKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OworLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OworLSAgKikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY19zcmNkaXI7OworLSAgZXNhYzs7CistZXNhYworLWNhc2UgJGFjX2Fic19idWlsZGRpciBpbgorLS4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKKy0qKQorLSAgY2FzZSAkYWNfdG9wX3NyY2RpciBpbgorLSAgLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7CistICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKKy0gICopIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3RvcF9zcmNkaXI7OworLSAgZXNhYzs7CistZXNhYworIAorKyAgY2FzZSAkYWNfbW9kZSBpbgorKyAgOkYpCisrICAjCisrICAjIENPTkZJR19GSUxFCisrICAjCisgCisgICBjYXNlICRJTlNUQUxMIGluCisgICBbXFwvJF0qIHwgPzpbXFwvXSogKSBhY19JTlNUQUxMPSRJTlNUQUxMIDs7CistICAqKSBhY19JTlNUQUxMPSRhY190b3BfYnVpbGRkaXIkSU5TVEFMTCA7OworKyAgKikgYWNfSU5TVEFMTD0kYWNfdG9wX2J1aWxkX3ByZWZpeCRJTlNUQUxMIDs7CisgICBlc2FjCisrX0FDRU9GCisgCistICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRhY19maWxlIiA+JjUKKy1lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQorLSAgICBybSAtZiAiJGFjX2ZpbGUiCistICBmaQorLSAgIyBMZXQncyBzdGlsbCBwcmV0ZW5kIGl0IGlzIGBjb25maWd1cmUnIHdoaWNoIGluc3RhbnRpYXRlcyAoaS5lLiwgZG9uJ3QKKy0gICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKKy0gICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCistICBpZiB0ZXN0IHgiJGFjX2ZpbGUiID0geC07IHRoZW4KKy0gICAgY29uZmlndXJlX2lucHV0PQorLSAgZWxzZQorLSAgICBjb25maWd1cmVfaW5wdXQ9IiRhY19maWxlLiAgIgorLSAgZmkKKy0gIGNvbmZpZ3VyZV9pbnB1dD0kY29uZmlndXJlX2lucHV0IkdlbmVyYXRlZCBmcm9tIGBlY2hvICRhY19maWxlX2luIHwKKy0JCQkJICAgICBzZWQgJ3MsLiovLCwnYCBieSBjb25maWd1cmUuIgorLQorLSAgIyBGaXJzdCBsb29rIGZvciB0aGUgaW5wdXQgZmlsZXMgaW4gdGhlIGJ1aWxkIHRyZWUsIG90aGVyd2lzZSBpbiB0aGUKKy0gICMgc3JjIHRyZWUuCistICBhY19maWxlX2lucHV0cz1gSUZTPToKKy0gICAgZm9yIGYgaW4gJGFjX2ZpbGVfaW47IGRvCistICAgICAgY2FzZSAkZiBpbgorLSAgICAgIC0pIGVjaG8gJHRtcC9zdGRpbiA7OworLSAgICAgIFtcXC8kXSopCistCSAjIEFic29sdXRlIChjYW4ndCBiZSBET1Mtc3R5bGUsIGFzIElGUz06KQorLQkgdGVzdCAtZiAiJGYiIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiYyO30KKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKy0JIGVjaG8gIiRmIjs7CistICAgICAgKikgIyBSZWxhdGl2ZQorLQkgaWYgdGVzdCAtZiAiJGYiOyB0aGVuCistCSAgICMgQnVpbGQgdHJlZQorLQkgICBlY2hvICIkZiIKKy0JIGVsaWYgdGVzdCAtZiAiJHNyY2Rpci8kZiI7IHRoZW4KKy0JICAgIyBTb3VyY2UgdHJlZQorLQkgICBlY2hvICIkc3JjZGlyLyRmIgorLQkgZWxzZQorLQkgICAjIC9kZXYvbnVsbCB0cmVlCistCSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiYyO30KKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKy0JIGZpOzsKKy0gICAgICBlc2FjCistICAgIGRvbmVgIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorKyMgSWYgdGhlIHRlbXBsYXRlIGRvZXMgbm90IGtub3cgYWJvdXQgZGF0YXJvb3RkaXIsIGV4cGFuZCBpdC4KKysjIEZJWE1FOiBUaGlzIGhhY2sgc2hvdWxkIGJlIHJlbW92ZWQgYSBmZXcgeWVhcnMgYWZ0ZXIgMi42MC4KKythY19kYXRhcm9vdGRpcl9oYWNrPTsgYWNfZGF0YXJvb3RkaXJfc2Vlbj0KKysKKytjYXNlIGBzZWQgLW4gJy9kYXRhcm9vdGRpci8geworKyAgcAorKyAgcQorK30KKysvQGRhdGFkaXJAL3AKKysvQGRvY2RpckAvcAorKy9AaW5mb2RpckAvcAorKy9AbG9jYWxlZGlyQC9wCisrL0BtYW5kaXJAL3AKKysnICRhY19maWxlX2lucHV0c2AgaW4KKysqZGF0YXJvb3RkaXIqKSBhY19kYXRhcm9vdGRpcl9zZWVuPXllczs7CisrKkBkYXRhZGlyQCp8KkBkb2NkaXJAKnwqQGluZm9kaXJAKnwqQGxvY2FsZWRpckAqfCpAbWFuZGlyQCopCisrICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjI7fQorK19BQ0VPRgorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisrICBhY19kYXRhcm9vdGRpcl9oYWNrPScKKysgIHMmQGRhdGFkaXJAJiRkYXRhZGlyJmcKKysgIHMmQGRvY2RpckAmJGRvY2RpciZnCisrICBzJkBpbmZvZGlyQCYkaW5mb2RpciZnCisrICBzJkBsb2NhbGVkaXJAJiRsb2NhbGVkaXImZworKyAgcyZAbWFuZGlyQCYkbWFuZGlyJmcKKysgICAgcyZcXFwke2RhdGFyb290ZGlyfSYkZGF0YXJvb3RkaXImZycgOzsKKytlc2FjCisgX0FDRU9GCisrCisrIyBOZXV0cmFsaXplIFZQQVRIIHdoZW4gYCRzcmNkaXInID0gYC4nLgorKyMgU2hlbGwgY29kZSBpbiBjb25maWd1cmUuYWMgbWlnaHQgc2V0IGV4dHJhc3ViLgorKyMgRklYTUU6IGRvIHdlIHJlYWxseSB3YW50IHRvIG1haW50YWluIHRoaXMgZmVhdHVyZT8KKyBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorICAgc2VkICIkYWNfdnBzdWIKKyAkZXh0cmFzdWIKK0BAIC0xMjc5MSwxNDIgKzEzOTM2LDQzIEBACisgY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisgOnQKKyAvQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiCistcyxAY29uZmlndXJlX2lucHV0QCwkY29uZmlndXJlX2lucHV0LDt0IHQKKy1zLEBzcmNkaXJALCRhY19zcmNkaXIsO3QgdAorLXMsQGFic19zcmNkaXJALCRhY19hYnNfc3JjZGlyLDt0IHQKKy1zLEB0b3Bfc3JjZGlyQCwkYWNfdG9wX3NyY2Rpciw7dCB0CistcyxAYWJzX3RvcF9zcmNkaXJALCRhY19hYnNfdG9wX3NyY2Rpciw7dCB0CistcyxAYnVpbGRkaXJALCRhY19idWlsZGRpciw7dCB0CistcyxAYWJzX2J1aWxkZGlyQCwkYWNfYWJzX2J1aWxkZGlyLDt0IHQKKy1zLEB0b3BfYnVpbGRkaXJALCRhY190b3BfYnVpbGRkaXIsO3QgdAorLXMsQGFic190b3BfYnVpbGRkaXJALCRhY19hYnNfdG9wX2J1aWxkZGlyLDt0IHQKKy1zLEBJTlNUQUxMQCwkYWNfSU5TVEFMTCw7dCB0CistIiAkYWNfZmlsZV9pbnB1dHMgfCAoZXZhbCAiJGFjX3NlZF9jbWRzIikgPiR0bXAvb3V0CistICBybSAtZiAkdG1wL3N0ZGluCistICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCistICAgIG12ICR0bXAvb3V0ICRhY19maWxlCistICBlbHNlCistICAgIGNhdCAkdG1wL291dAorLSAgICBybSAtZiAkdG1wL291dAorLSAgZmkKKy0KKy1kb25lCistX0FDRU9GCistY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCistCistIworLSMgQ09ORklHX0NPTU1BTkRTIHNlY3Rpb24uCistIworLWZvciBhY19maWxlIGluIDogJENPTkZJR19DT01NQU5EUzsgZG8gdGVzdCAieCRhY19maWxlIiA9IHg6ICYmIGNvbnRpbnVlCistICBhY19kZXN0PWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYAorLSAgYWNfc291cmNlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAorLSAgYWNfZGlyPWAoZGlybmFtZSAiJGFjX2Rlc3QiKSAyPi9kZXYvbnVsbCB8fAorLSRhc19leHByIFgiJGFjX2Rlc3QiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCistCSBYIiRhY19kZXN0IiA6ICdYXCgvL1wpW14vXScgXHwgXAorLQkgWCIkYWNfZGVzdCIgOiAnWFwoLy9cKSQnIFx8IFwKKy0JIFgiJGFjX2Rlc3QiIDogJ1hcKC9cKScgXHwgXAorLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CistZWNobyBYIiRhY19kZXN0IiB8CistICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorLSAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKy0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKy0gIAkgIHMvLiovLi87IHEnYAorLSAgeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgorLSAgICBta2RpciAtcCAiJGFjX2RpciIKKy0gIGVsc2UKKy0gICAgYXNfZGlyPSIkYWNfZGlyIgorLSAgICBhc19kaXJzPQorLSAgICB3aGlsZSB0ZXN0ICEgLWQgIiRhc19kaXIiOyBkbworLSAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCistICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8CistJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorLQkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKKy0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorLWVjaG8gWCIkYXNfZGlyIiB8CistICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorLSAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKy0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKy0gIAkgIHMvLiovLi87IHEnYAorLSAgICBkb25lCistICAgIHRlc3QgISAtbiAiJGFzX2RpcnMiIHx8IG1rZGlyICRhc19kaXJzCistICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisrcyZAY29uZmlndXJlX2lucHV0QCYkY29uZmlndXJlX2lucHV0Jjt0IHQKKytzJkB0b3BfYnVpbGRkaXJAJiRhY190b3BfYnVpbGRkaXJfc3ViJjt0IHQKKytzJkBzcmNkaXJAJiRhY19zcmNkaXImO3QgdAorK3MmQGFic19zcmNkaXJAJiRhY19hYnNfc3JjZGlyJjt0IHQKKytzJkB0b3Bfc3JjZGlyQCYkYWNfdG9wX3NyY2RpciY7dCB0CisrcyZAYWJzX3RvcF9zcmNkaXJAJiRhY19hYnNfdG9wX3NyY2RpciY7dCB0CisrcyZAYnVpbGRkaXJAJiRhY19idWlsZGRpciY7dCB0CisrcyZAYWJzX2J1aWxkZGlyQCYkYWNfYWJzX2J1aWxkZGlyJjt0IHQKKytzJkBhYnNfdG9wX2J1aWxkZGlyQCYkYWNfYWJzX3RvcF9idWlsZGRpciY7dCB0CisrcyZASU5TVEFMTEAmJGFjX0lOU1RBTEwmO3QgdAorKyRhY19kYXRhcm9vdGRpcl9oYWNrCisrIiAkYWNfZmlsZV9pbnB1dHMgfCBzZWQgLWYgIiR0bXAvc3Vicy0xLnNlZCIgfCBzZWQgLWYgIiR0bXAvc3Vicy0yLnNlZCIgPiR0bXAvb3V0CisrCisrdGVzdCAteiAiJGFjX2RhdGFyb290ZGlyX2hhY2skYWNfZGF0YXJvb3RkaXJfc2VlbiIgJiYKKysgIHsgYWNfb3V0PWBzZWQgLW4gJy9cJHtkYXRhcm9vdGRpcn0vcCcgIiR0bXAvb3V0ImA7IHRlc3QgLW4gIiRhY19vdXQiOyB9ICYmCisrICB7IGFjX291dD1gc2VkIC1uICcvXlsJIF0qZGF0YXJvb3RkaXJbCSBdKjoqPS9wJyAiJHRtcC9vdXQiYDsgdGVzdCAteiAiJGFjX291dCI7IH0gJiYKKysgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJworK3doaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZC4iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCisrd2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkLiIgPiYyO30KKyAKKy0gIGFjX2J1aWxkZGlyPS4KKy0KKy1pZiB0ZXN0ICIkYWNfZGlyIiAhPSAuOyB0aGVuCistICBhY19kaXJfc3VmZml4PS9gZWNobyAiJGFjX2RpciIgfCBzZWQgJ3MsXlwuW1xcL10sLCdgCistICAjIEEgIi4uLyIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorLSAgYWNfdG9wX2J1aWxkZGlyPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3MsL1teXFwvXSosLi4vLGcnYAorLWVsc2UKKy0gIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcj0KKy1maQorKyAgcm0gLWYgIiR0bXAvc3RkaW4iCisrICBjYXNlICRhY19maWxlIGluCisrICAtKSBjYXQgIiR0bXAvb3V0Ijsgcm0gLWYgIiR0bXAvb3V0Ijs7CisrICAqKSBybSAtZiAiJGFjX2ZpbGUiOyBtdiAiJHRtcC9vdXQiICRhY19maWxlOzsKKysgIGVzYWMKKysgOzsKKyAKKy1jYXNlICRzcmNkaXIgaW4KKy0gIC4pICAjIE5vIC0tc3JjZGlyIG9wdGlvbi4gIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KKy0gICAgYWNfc3JjZGlyPS4KKy0gICAgaWYgdGVzdCAteiAiJGFjX3RvcF9idWlsZGRpciI7IHRoZW4KKy0gICAgICAgYWNfdG9wX3NyY2Rpcj0uCistICAgIGVsc2UKKy0gICAgICAgYWNfdG9wX3NyY2Rpcj1gZWNobyAkYWNfdG9wX2J1aWxkZGlyIHwgc2VkICdzLC8kLCwnYAorLSAgICBmaSA7OworLSAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBwYXRoLgorLSAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OworLSAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKy0gICopICMgUmVsYXRpdmUgcGF0aC4KKy0gICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRkaXIkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKy0gICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciA7OworLWVzYWMKKyAKKy0jIERvIG5vdCB1c2UgYGNkIGZvbyAmJiBwd2RgIHRvIGNvbXB1dGUgYWJzb2x1dGUgcGF0aHMsIGJlY2F1c2UKKy0jIHRoZSBkaXJlY3RvcmllcyBtYXkgbm90IGV4aXN0LgorLWNhc2UgYHB3ZGAgaW4KKy0uKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKKy0qKQorLSAgY2FzZSAiJGFjX2RpciIgaW4KKy0gIC4pIGFjX2Fic19idWlsZGRpcj1gcHdkYDs7CistICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OworLSAgKikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgLyIkYWNfZGlyIjs7CistICBlc2FjOzsKKy1lc2FjCistY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCistLikgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKKy0qKQorLSAgY2FzZSAke2FjX3RvcF9idWlsZGRpcn0uIGluCistICAuKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXI7OworLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OworLSAgKikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyLyR7YWNfdG9wX2J1aWxkZGlyfS47OworLSAgZXNhYzs7CistZXNhYworLWNhc2UgJGFjX2Fic19idWlsZGRpciBpbgorLS4pIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7CistKikKKy0gIGNhc2UgJGFjX3NyY2RpciBpbgorLSAgLikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKy0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKKy0gICopIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfc3JjZGlyOzsKKy0gIGVzYWM7OworLWVzYWMKKy1jYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKy0uKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7CistKikKKy0gIGNhc2UgJGFjX3RvcF9zcmNkaXIgaW4KKy0gIC4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OworLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7CistICAqKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY190b3Bfc3JjZGlyOzsKKy0gIGVzYWM7OworLWVzYWMKKysgIDpDKSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXhlY3V0aW5nICRhY19maWxlIGNvbW1hbmRzIiA+JjUKKytlY2hvICIkYXNfbWU6IGV4ZWN1dGluZyAkYWNfZmlsZSBjb21tYW5kcyIgPiY2O30KKysgOzsKKysgIGVzYWMKKyAKKyAKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGV4ZWN1dGluZyAkYWNfZGVzdCBjb21tYW5kcyIgPiY1CistZWNobyAiJGFzX21lOiBleGVjdXRpbmcgJGFjX2Rlc3QgY29tbWFuZHMiID4mNjt9CistICBjYXNlICRhY19kZXN0IGluCistICAgIGRlcGZpbGVzICkgdGVzdCB4IiRBTURFUF9UUlVFIiAhPSB4IiIgfHwgZm9yIG1mIGluICRDT05GSUdfRklMRVM7IGRvCisrICBjYXNlICRhY19maWxlJGFjX21vZGUgaW4KKysgICAgImRlcGZpbGVzIjpDKSB0ZXN0IHgiJEFNREVQX1RSVUUiICE9IHgiIiB8fCBmb3IgbWYgaW4gJENPTkZJR19GSUxFUzsgZG8KKyAgICMgU3RyaXAgTUYgc28gd2UgZW5kIHVwIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpbGUuCisgICBtZj1gZWNobyAiJG1mIiB8IHNlZCAtZSAncy86LiokLy8nYAorICAgIyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYW4gQXV0b21ha2UgZ2VuZXJhdGVkIE1ha2VmaWxlIG9yIG5vdC4KK0BAIC0xMjkzNiwxOCArMTM5ODIsMjkgQEAKKyAgICMgZWFjaCBNYWtlZmlsZS5pbiBhbmQgYWRkIGEgbmV3IGxpbmUgb24gdG9wIG9mIGVhY2ggZmlsZSB0byBzYXkgc28uCisgICAjIFNvIGxldCdzIGdyZXAgd2hvbGUgZmlsZS4KKyAgIGlmIGdyZXAgJ14jLipnZW5lcmF0ZWQgYnkgYXV0b21ha2UnICRtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCistICAgIGRpcnBhcnQ9YChkaXJuYW1lICIkbWYiKSAyPi9kZXYvbnVsbCB8fAorKyAgICBkaXJwYXJ0PWAkYXNfZGlybmFtZSAtLSAiJG1mIiB8fAorICRhc19leHByIFgiJG1mIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorIAkgWCIkbWYiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisgCSBYIiRtZiIgOiAnWFwoLy9cKSQnIFx8IFwKKy0JIFgiJG1mIiA6ICdYXCgvXCknIFx8IFwKKy0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorKwkgWCIkbWYiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorIGVjaG8gWCIkbWYiIHwKKy0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CistICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorLSAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CistICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorLSAgCSAgcy8uKi8uLzsgcSdgCisrICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXChcL1wvXClbXi9dLioveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cL1wpJC97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXChcL1wpLioveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIHMvLiovLi87IHEnYAorICAgZWxzZQorICAgICBjb250aW51ZQorICAgZmkKK0BAIC0xMjk2OSw0OSArMTQwMjYsNzYgQEAKKyAgICAgICAgc2VkIC1lICdzL1wkKERFUERJUikvJyIkREVQRElSIicvZycgLWUgJ3MvXCRVLyciJFUiJy9nJ2A7IGRvCisgICAgICMgTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzLgorICAgICB0ZXN0IC1mICIkZGlycGFydC8kZmlsZSIgJiYgY29udGludWUKKy0gICAgZmRpcj1gKGRpcm5hbWUgIiRmaWxlIikgMj4vZGV2L251bGwgfHwKKysgICAgZmRpcj1gJGFzX2Rpcm5hbWUgLS0gIiRmaWxlIiB8fAorICRhc19leHByIFgiJGZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisgCSBYIiRmaWxlIiA6ICdYXCgvL1wpW14vXScgXHwgXAorIAkgWCIkZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKy0JIFgiJGZpbGUiIDogJ1hcKC9cKScgXHwgXAorLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CisrCSBYIiRmaWxlIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyBlY2hvIFgiJGZpbGUiIHwKKy0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CistICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorLSAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CistICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorLSAgCSAgcy8uKi8uLzsgcSdgCistICAgIHsgaWYgJGFzX21rZGlyX3A7IHRoZW4KKy0gICAgbWtkaXIgLXAgJGRpcnBhcnQvJGZkaXIKKy0gIGVsc2UKKy0gICAgYXNfZGlyPSRkaXJwYXJ0LyRmZGlyCisrICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXChcL1wvXClbXi9dLioveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cL1wpJC97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXChcL1wpLioveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIHMvLiovLi87IHEnYAorKyAgICB7IGFzX2Rpcj0kZGlycGFydC8kZmRpcgorKyAgY2FzZSAkYXNfZGlyIGluICMoCisrICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7CisrICBlc2FjCisrICB0ZXN0IC1kICIkYXNfZGlyIiB8fCB7ICRhc19ta2Rpcl9wICYmIG1rZGlyIC1wICIkYXNfZGlyIjsgfSB8fCB7CisgICAgIGFzX2RpcnM9CistICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCistICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKKy0gICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKysgICAgd2hpbGUgOjsgZG8KKysgICAgICBjYXNlICRhc19kaXIgaW4gIygKKysgICAgICAqXCcqKSBhc19xZGlyPWBlY2hvICIkYXNfZGlyIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7ICMoCisrICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKKysgICAgICBlc2FjCisrICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKKysgICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAorICRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKyAJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKyAJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKy0JIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCistCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKysJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CisgZWNobyBYIiRhc19kaXIiIHwKKy0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CistICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorLSAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CistICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorLSAgCSAgcy8uKi8uLzsgcSdgCisrICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXChcL1wvXClbXi9dLioveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cL1wpJC97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXChcL1wpLioveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIHMvLiovLi87IHEnYAorKyAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCisgICAgIGRvbmUKKy0gICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKKy0gIGZpIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRkaXJwYXJ0LyRmZGlyIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkZGlycGFydC8kZmRpciIgPiYyO30KKysgICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgorKyAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIiA+JjUKKytlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIiA+JjI7fQorICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorLQorICAgICAjIGVjaG8gImNyZWF0aW5nICRkaXJwYXJ0LyRmaWxlIgorICAgICBlY2hvICcjIGR1bW15JyA+ICIkZGlycGFydC8kZmlsZSIKKyAgIGRvbmUKKyBkb25lCisgIDs7CistICAgIGxpYnRvb2wgKQorKyAgICAibGlidG9vbCI6QykKKyAKKyAgICAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgorICAgICAjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KK0BAIC0xMzY1MiwxMSArMTQ3MzYsMTAgQEAKKyAgIGNobW9kICt4ICIkb2ZpbGUiCisgCisgIDs7CisrCisgICBlc2FjCistZG9uZQorLV9BQ0VPRgorK2RvbmUgIyBmb3IgYWNfdGFnCisgCistY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisgCisgeyAoZXhpdCAwKTsgZXhpdCAwOyB9CisgX0FDRU9GCitAQCAtMTM2ODYsNyArMTQ3NjksNyBAQAorIGZpCisgCisgIworLSMgQ09ORklHX1NVQkRJUlMgc2VjdGlvbiwgYXMgZml4ZWQgaW4gY29uZnN1YmRpci5tNC4KKysjIENPTkZJR19TVUJESVJTIHNlY3Rpb24uCisgIworIGlmIHRlc3QgIiRub19yZWN1cnNpb24iICE9IHllczsgdGhlbgorIAorQEAgLTEzNzMzLDcgKzE0ODE2LDEyIEBACisgICBjYXNlICRhY19hcmcgaW4KKyAgICpcJyopIGFjX2FyZz1gZWNobyAiJGFjX2FyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgIGVzYWMKKy0gIGFjX3N1Yl9jb25maWd1cmVfYXJncz0iJGFjX2FyZyAkYWNfc3ViX2NvbmZpZ3VyZV9hcmdzIgorKyAgYWNfc3ViX2NvbmZpZ3VyZV9hcmdzPSInJGFjX2FyZycgJGFjX3N1Yl9jb25maWd1cmVfYXJncyIKKysKKysgICMgUGFzcyAtLXNpbGVudAorKyAgaWYgdGVzdCAiJHNpbGVudCIgPSB5ZXM7IHRoZW4KKysgICAgYWNfc3ViX2NvbmZpZ3VyZV9hcmdzPSItLXNpbGVudCAkYWNfc3ViX2NvbmZpZ3VyZV9hcmdzIgorKyAgZmkKKyAKKyAgIGFjX3BvcGRpcj1gcHdkYAorICAgZm9yIGFjX2RpciBpbiA6ICRzdWJkaXJzOyBkbyB0ZXN0ICJ4JGFjX2RpciIgPSB4OiAmJiBjb250aW51ZQorQEAgLTEzNzQyLDk3ICsxNDgzMCw4MyBAQAorICAgICAjIHBhcnRzIG9mIGEgbGFyZ2Ugc291cmNlIHRyZWUgYXJlIHByZXNlbnQuCisgICAgIHRlc3QgLWQgIiRzcmNkaXIvJGFjX2RpciIgfHwgY29udGludWUKKyAKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY29uZmlndXJpbmcgaW4gJGFjX2RpciIgPiY1CistZWNobyAiJGFzX21lOiBjb25maWd1cmluZyBpbiAkYWNfZGlyIiA+JjY7fQorLSAgICB7IGlmICRhc19ta2Rpcl9wOyB0aGVuCistICAgIG1rZGlyIC1wICIkYWNfZGlyIgorLSAgZWxzZQorLSAgICBhc19kaXI9IiRhY19kaXIiCisrICAgIGFjX21zZz0iPT09IGNvbmZpZ3VyaW5nIGluICRhY19kaXIgKGBwd2RgLyRhY19kaXIpIgorKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogJGFjX21zZyIgPiY1CisrICAgIGVjaG8gIiRhY19tc2ciID4mNgorKyAgICB7IGFzX2Rpcj0iJGFjX2RpciIKKysgIGNhc2UgJGFzX2RpciBpbiAjKAorKyAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OworKyAgZXNhYworKyAgdGVzdCAtZCAiJGFzX2RpciIgfHwgeyAkYXNfbWtkaXJfcCAmJiBta2RpciAtcCAiJGFzX2RpciI7IH0gfHwgeworICAgICBhc19kaXJzPQorLSAgICB3aGlsZSB0ZXN0ICEgLWQgIiRhc19kaXIiOyBkbworLSAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCistICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8CisrICAgIHdoaWxlIDo7IGRvCisrICAgICAgY2FzZSAkYXNfZGlyIGluICMoCisrICAgICAgKlwnKikgYXNfcWRpcj1gZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjKAorKyAgICAgICopIGFzX3FkaXI9JGFzX2Rpcjs7CisrICAgICAgZXNhYworKyAgICAgIGFzX2RpcnM9IickYXNfcWRpcicgJGFzX2RpcnMiCisrICAgICAgYXNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX2RpciIgfHwKKyAkYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisgCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisgCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCistCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CisrCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorIGVjaG8gWCIkYXNfZGlyIiB8CistICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorLSAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKy0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKy0gIAkgIHMvLiovLi87IHEnYAorKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXC9cKSQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cKS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICBzLy4qLy4vOyBxJ2AKKysgICAgICB0ZXN0IC1kICIkYXNfZGlyIiAmJiBicmVhaworICAgICBkb25lCistICAgIHRlc3QgISAtbiAiJGFzX2RpcnMiIHx8IG1rZGlyICRhc19kaXJzCistICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mMjt9CisrICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKysgIH0gfHwgdGVzdCAtZCAiJGFzX2RpciIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIgPiY1CisrZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIgPiYyO30KKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKy0KKyAgICAgYWNfYnVpbGRkaXI9LgorIAorLWlmIHRlc3QgIiRhY19kaXIiICE9IC47IHRoZW4KKytjYXNlICIkYWNfZGlyIiBpbgorKy4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKyopCisgICBhY19kaXJfc3VmZml4PS9gZWNobyAiJGFjX2RpciIgfCBzZWQgJ3MsXlwuW1xcL10sLCdgCistICAjIEEgIi4uLyIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorLSAgYWNfdG9wX2J1aWxkZGlyPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3MsL1teXFwvXSosLi4vLGcnYAorLWVsc2UKKy0gIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcj0KKy1maQorKyAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorKyAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzLC9bXlxcL10qLC8uLixnO3MsLywsJ2AKKysgIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9zdWIgaW4KKysgICIiKSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKysgICopICBhY190b3BfYnVpbGRfcHJlZml4PSRhY190b3BfYnVpbGRkaXJfc3ViLyA7OworKyAgZXNhYyA7OworK2VzYWMKKythY19hYnNfdG9wX2J1aWxkZGlyPSRhY19wd2QKKythY19hYnNfYnVpbGRkaXI9JGFjX3B3ZCRhY19kaXJfc3VmZml4CisrIyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eToKKythY190b3BfYnVpbGRkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgKKyAKKyBjYXNlICRzcmNkaXIgaW4KKy0gIC4pICAjIE5vIC0tc3JjZGlyIG9wdGlvbi4gIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KKysgIC4pICAjIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KKyAgICAgYWNfc3JjZGlyPS4KKy0gICAgaWYgdGVzdCAteiAiJGFjX3RvcF9idWlsZGRpciI7IHRoZW4KKy0gICAgICAgYWNfdG9wX3NyY2Rpcj0uCistICAgIGVsc2UKKy0gICAgICAgYWNfdG9wX3NyY2Rpcj1gZWNobyAkYWNfdG9wX2J1aWxkZGlyIHwgc2VkICdzLC8kLCwnYAorLSAgICBmaSA7OworLSAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBwYXRoLgorKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisrICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgbmFtZS4KKyAgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKy0gICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7CistICAqKSAjIFJlbGF0aXZlIHBhdGguCistICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciRhY19kaXJfc3VmZml4CistICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIgOzsKKy1lc2FjCistCistIyBEbyBub3QgdXNlIGBjZCBmb28gJiYgcHdkYCB0byBjb21wdXRlIGFic29sdXRlIHBhdGhzLCBiZWNhdXNlCistIyB0aGUgZGlyZWN0b3JpZXMgbWF5IG5vdCBleGlzdC4KKy1jYXNlIGBwd2RgIGluCistLikgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7CistKikKKy0gIGNhc2UgIiRhY19kaXIiIGluCistICAuKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGA7OworLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKKy0gICopIGFjX2Fic19idWlsZGRpcj1gcHdkYC8iJGFjX2RpciI7OworLSAgZXNhYzs7CistZXNhYworLWNhc2UgJGFjX2Fic19idWlsZGRpciBpbgorLS4pIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7CistKikKKy0gIGNhc2UgJHthY190b3BfYnVpbGRkaXJ9LiBpbgorLSAgLikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKy0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKKy0gICopIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpci8ke2FjX3RvcF9idWlsZGRpcn0uOzsKKy0gIGVzYWM7OworLWVzYWMKKy1jYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKy0uKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OworLSopCistICBjYXNlICRhY19zcmNkaXIgaW4KKy0gIC4pIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7CistICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7CistICAqKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3NyY2Rpcjs7CistICBlc2FjOzsKKy1lc2FjCistY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCistLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OworLSopCistICBjYXNlICRhY190b3Bfc3JjZGlyIGluCistICAuKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKy0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OworLSAgKikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfdG9wX3NyY2Rpcjs7CistICBlc2FjOzsKKysgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCisrICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKysgICopICMgUmVsYXRpdmUgbmFtZS4KKysgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4CisrICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCisrICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7OworIGVzYWMKKythY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3NyY2RpciRhY19kaXJfc3VmZml4CisgCisgCisgICAgIGNkICIkYWNfZGlyIgorQEAgLTEzODU2LDggKzE0OTMwLDggQEAKKyAgICAgICAjIE1ha2UgdGhlIGNhY2hlIGZpbGUgbmFtZSBjb3JyZWN0IHJlbGF0aXZlIHRvIHRoZSBzdWJkaXJlY3RvcnkuCisgICAgICAgY2FzZSAkY2FjaGVfZmlsZSBpbgorICAgICAgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfc3ViX2NhY2hlX2ZpbGU9JGNhY2hlX2ZpbGUgOzsKKy0gICAgICAqKSAjIFJlbGF0aXZlIHBhdGguCistCWFjX3N1Yl9jYWNoZV9maWxlPSRhY190b3BfYnVpbGRkaXIkY2FjaGVfZmlsZSA7OworKyAgICAgICopICMgUmVsYXRpdmUgbmFtZS4KKysJYWNfc3ViX2NhY2hlX2ZpbGU9JGFjX3RvcF9idWlsZF9wcmVmaXgkY2FjaGVfZmlsZSA7OworICAgICAgIGVzYWMKKyAKKyAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBydW5uaW5nICRTSEVMTCAkYWNfc3ViX2NvbmZpZ3VyZSAkYWNfc3ViX2NvbmZpZ3VyZV9hcmdzIC0tY2FjaGUtZmlsZT0kYWNfc3ViX2NhY2hlX2ZpbGUgLS1zcmNkaXI9JGFjX3NyY2RpciIgPiY1CitkaWZmIC1OYXVyIG5ld2xpYi0xLjE3LjAvbmV3bGliL2xpYmMvc3lzL2NvbmZpZ3VyZS5pbiBuZXdsaWItMS4xNy4wLW5ldy9uZXdsaWIvbGliYy9zeXMvY29uZmlndXJlLmluCistLS0gbmV3bGliLTEuMTcuMC9uZXdsaWIvbGliYy9zeXMvY29uZmlndXJlLmluCTIwMDctMDUtMjQgMTk6MzM6MzcuMDAwMDAwMDAwICswMjAwCisrKysgbmV3bGliLTEuMTcuMC1uZXcvbmV3bGliL2xpYmMvc3lzL2NvbmZpZ3VyZS5pbgkyMDA5LTA1LTIyIDA5OjU3OjUwLjAwMDAwMDAwMCArMDIwMAorQEAgLTI0LDYgKzI0LDcgQEAKKyAJYTI5a2hpZikgQUNfQ09ORklHX1NVQkRJUlMoYTI5a2hpZikgOzsKKyAJYXJjKSBBQ19DT05GSUdfU1VCRElSUyhhcmMpIDs7CisgCWFybSkgQUNfQ09ORklHX1NVQkRJUlMoYXJtKSA7OworKwlhdnIzMikgQUNfQ09ORklHX1NVQkRJUlMoYXZyMzIpIDs7CisgCWQxMHYpIEFDX0NPTkZJR19TVUJESVJTKGQxMHYpIDs7CisgCWRlY3N0YXRpb24pIEFDX0NPTkZJR19TVUJESVJTKGRlY3N0YXRpb24pIDs7CisgCWg4MzAwaG1zKSBBQ19DT05GSUdfU1VCRElSUyhoODMwMGhtcykgOzsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9uZXdsaWIvMS4xOC4wLzEwMC1maXgtdW5hbGlnbmVkLWFjY2Vzcy1tZW1jcHktbTY4ay5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9uZXdsaWIvMS4xOC4wLzEwMC1maXgtdW5hbGlnbmVkLWFjY2Vzcy1tZW1jcHktbTY4ay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjE0ZWU1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL25ld2xpYi8xLjE4LjAvMTAwLWZpeC11bmFsaWduZWQtYWNjZXNzLW1lbWNweS1tNjhrLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK1RoZSBtNjhrIG1jcHUgcHJvY2Vzc29yIGRvZXMgbm90IGxpa2UgdW5hbGlnbmVkIGFjY2VzcworCitEaXNhYmxlIGF0IGxlYXN0IG1jcHUzMiwgbTY4MDEwIGFuZCBtNjgwMjAuIFRoZXNlIHByb2Nlc3NvcnMgY2VydGFpbmx5CitkbyBub3QgbGlrZSB1bmFsaWduZWQgYWNjZXNzZXMuCisKK1NpZ25lZC1vZmYtYnk6IFJlbXkgQm9obWVyIDxsaW51eEBib2htZXIubmV0PgorLS0tCisgbmV3bGliL2xpYmMvbWFjaGluZS9tNjhrL21lbWNweS5TIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogbmV3bGliLTEuMTguMC9uZXdsaWIvbGliYy9tYWNoaW5lL202OGsvbWVtY3B5LlMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBuZXdsaWItMS4xOC4wLm9yaWcvbmV3bGliL2xpYmMvbWFjaGluZS9tNjhrL21lbWNweS5TCisrKysgbmV3bGliLTEuMTguMC9uZXdsaWIvbGliYy9tYWNoaW5lL202OGsvbWVtY3B5LlMKK0BAIC0xNSw3ICsxNSw3IEBACisgCisgI2luY2x1ZGUgIm02OGthc20uaCIKKyAKKy0jaWYgZGVmaW5lZCAoX19tY29sZGZpcmVfXykgfHwgZGVmaW5lZCAoX19tY3B1MzJfXykgfHwgZGVmaW5lZCAoX19tYzY4MDEwX18pIHx8IGRlZmluZWQgKF9fbWM2ODAyMF9fKSB8fCBkZWZpbmVkIChfX21jNjgwMzBfXykgfHwgZGVmaW5lZCAoX19tYzY4MDQwX18pIHx8IGRlZmluZWQgKF9fbWM2ODA2MF9fKQorKyNpZiBkZWZpbmVkIChfX21jb2xkZmlyZV9fKSB8fCBkZWZpbmVkIChfX21jNjgwMzBfXykgfHwgZGVmaW5lZCAoX19tYzY4MDQwX18pIHx8IGRlZmluZWQgKF9fbWM2ODA2MF9fKQorICMgZGVmaW5lIE1JU0FMSUdORURfT0sgMQorICNlbHNlCisgIyBkZWZpbmUgTUlTQUxJR05FRF9PSyAwCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbmV3bGliLzEuMTkuMC8xMDAtZml4LXVuYWxpZ25lZC1hY2Nlc3MtbWVtY3B5LW02OGsucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvbmV3bGliLzEuMTkuMC8xMDAtZml4LXVuYWxpZ25lZC1hY2Nlc3MtbWVtY3B5LW02OGsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkxMzYzYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9uZXdsaWIvMS4xOS4wLzEwMC1maXgtdW5hbGlnbmVkLWFjY2Vzcy1tZW1jcHktbTY4ay5wYXRjaApAQCAtMCwwICsxLDI1IEBACitUaGUgbTY4ayBtY3B1IHByb2Nlc3NvciBkb2VzIG5vdCBsaWtlIHVuYWxpZ25lZCBhY2Nlc3MKKworRGlzYWJsZSBhdCBsZWFzdCBtY3B1MzIsIG02ODAxMCBhbmQgbTY4MDIwLiBUaGVzZSBwcm9jZXNzb3JzIGNlcnRhaW5seQorZG8gbm90IGxpa2UgdW5hbGlnbmVkIGFjY2Vzc2VzLgorCitTaWduZWQtb2ZmLWJ5OiBSZW15IEJvaG1lciA8bGludXhAYm9obWVyLm5ldD4KK1t5YW5uLm1vcmluLjE5OThAYW5jaWVucy5lbmliLmZyOiB1cGRhdGUgZm9yIDEuMTkuMCBmcm9tIDEuMTguMF0KK1NpZ25lZC1vZmYtYnk6ICJZYW5uIEUuIE1PUklOIiA8eWFubi5tb3Jpbi4xOTk4QGFuY2llbnMuZW5pYi5mcj4KKy0tLQorIG5ld2xpYi9saWJjL21hY2hpbmUvbTY4ay9tZW1jcHkuUyB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IG5ld2xpYi0xLjE5LjAvbmV3bGliL2xpYmMvbWFjaGluZS9tNjhrL21lbWNweS5TCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbmV3bGliLTEuMTkuMC5vcmlnL25ld2xpYi9saWJjL21hY2hpbmUvbTY4ay9tZW1jcHkuUworKysrIG5ld2xpYi0xLjE5LjAvbmV3bGliL2xpYmMvbWFjaGluZS9tNjhrL21lbWNweS5TCitAQCAtMTUsNyArMTUsNyBAQAorIAorICNpbmNsdWRlICJtNjhrYXNtLmgiCisgCistI2lmIGRlZmluZWQgKF9fbWNvbGRmaXJlX18pIHx8IGRlZmluZWQgKF9fbWM2ODAxMF9fKSB8fCBkZWZpbmVkIChfX21jNjgwMjBfXykgfHwgZGVmaW5lZCAoX19tYzY4MDMwX18pIHx8IGRlZmluZWQgKF9fbWM2ODA0MF9fKSB8fCBkZWZpbmVkIChfX21jNjgwNjBfXykKKysjaWYgZGVmaW5lZCAoX19tY29sZGZpcmVfXykgfHwgZGVmaW5lZCAoX19tYzY4MDMwX18pIHx8IGRlZmluZWQgKF9fbWM2ODA0MF9fKSB8fCBkZWZpbmVkIChfX21jNjgwNjBfXykKKyAjIGRlZmluZSBNSVNBTElHTkVEX09LIDEKKyAjZWxzZQorICMgZGVmaW5lIE1JU0FMSUdORURfT0sgMApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3BwbC8wLjEwLjIvMTAwLWZpeC1jb25maWd1cmUtd2l0aC1nbXAtNV8wXzEucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvcHBsLzAuMTAuMi8xMDAtZml4LWNvbmZpZ3VyZS13aXRoLWdtcC01XzBfMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjIzZWU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3BwbC8wLjEwLjIvMTAwLWZpeC1jb25maWd1cmUtd2l0aC1nbXAtNV8wXzEucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorLS0tIHBwbC0wLjEwLjIvY29uZmlndXJlLm9yaWcJMjAxMC0wOC0wNCAyMTo0ODoxOS4wMDAwMDAwMDAgLTA0MDAKKysrKyBwcGwtMC4xMC4yL2NvbmZpZ3VyZQkyMDEwLTA4LTA0IDIxOjUwOjA0LjAwMDAwMDAwMCAtMDQwMAorQEAgLTE2NDQzLDYgKzE2NDQzLDEwIEBACisgI0dNUCB2ZXJzaW9uIDQuMS4zIG9yIGhpZ2hlciBpcyByZXF1aXJlZAorICNlbmRpZgorIAorKyNpZm5kZWYgQklUU19QRVJfTVBfTElNQgorKyNkZWZpbmUgQklUU19QRVJfTVBfTElNQiBHTVBfTElNQl9CSVRTCisrI2VuZGlmCisrCisgaW50CisgbWFpbigpIHsKKyAgIHN0ZDo6c3RyaW5nIGhlYWRlcl92ZXJzaW9uOworQEAgLTE2NDY5LDExICsxNjQ3MywxMSBAQAorICAgICByZXR1cm4gMTsKKyAgIH0KKyAKKy0gIGlmIChzaXplb2YobXBfbGltYl90KSpDSEFSX0JJVCAhPSBHTVBfTElNQl9CSVRTCistICAgICAgfHwgR01QX0xJTUJfQklUUyAhPSBtcF9iaXRzX3Blcl9saW1iKSB7CisrICBpZiAoc2l6ZW9mKG1wX2xpbWJfdCkqQ0hBUl9CSVQgIT0gQklUU19QRVJfTVBfTElNQgorKyAgICAgIHx8IEJJVFNfUEVSX01QX0xJTUIgIT0gbXBfYml0c19wZXJfbGltYikgeworICAgICBzdGQ6OmNlcnIKKyAgICAgICA8PCAiR01QIGhlYWRlciAoZ21wLmgpIGFuZCBsaWJyYXJ5IChsaWdtcC4qKSBiaXRzLXBlci1saW1iIG1pc21hdGNoOlxuIgorLSAgICAgIDw8ICJoZWFkZXIgZ2l2ZXMgIiA8PCBfX0dNUF9CSVRTX1BFUl9NUF9MSU1CIDw8ICI7XG4iCisrICAgICAgPDwgImhlYWRlciBnaXZlcyAiIDw8IEJJVFNfUEVSX01QX0xJTUIgPDwgIjtcbiIKKyAgICAgICA8PCAibGlicmFyeSBnaXZlcyAiIDw8IG1wX2JpdHNfcGVyX2xpbWIgPDwgIi5cbiIKKyAgICAgICA8PCAiVGhpcyBwcm9iYWJseSBtZWFucyB5b3UgYXJlIG9uIGEgYmktYXJjaCBzeXN0ZW0gYW5kXG4iCisgICAgICAgPDwgInlvdSBhcmUgY29tcGlsaW5nIHdpdGggdGhlIHdyb25nIGhlYWRlciBvciBsaW5raW5nIHdpdGhcbiIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9wcGwvMC4xMS4xLzEwMC1maXgtamF2YS10ZXN0LXZzLWVuYWJsZWQtc2hhcmVkLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3BwbC8wLjExLjEvMTAwLWZpeC1qYXZhLXRlc3QtdnMtZW5hYmxlZC1zaGFyZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJhNzJlOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9wcGwvMC4xMS4xLzEwMC1maXgtamF2YS10ZXN0LXZzLWVuYWJsZWQtc2hhcmVkLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK2NvbW1pdCAyNWJiNzc1ODc5NDQ3Njg1ODEyMjVkMWMwMDQ4ZmFjYWIzMmNmMDE5CitBdXRob3I6IFJvYmVydG8gQmFnbmFyYSA8YmFnbmFyYUBjcy51bmlwci5pdD4KK0RhdGU6ICAgV2VkIE1heSAxOCAwOTozNTozNiAyMDExICswMjAwCisKKyAgICBNb3ZlZCBtaXNwbGFjZWQgY29uZGl0aW9uYWwuCisKK2RpZmYgLS1naXQgYS9pbnRlcmZhY2VzL0phdmEvdGVzdHMvTWFrZWZpbGUuYW0gYi9pbnRlcmZhY2VzL0phdmEvdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IDY0YmE4NjQuLjYwN2JiYzYgMTAwNjQ0CistLS0gYS9pbnRlcmZhY2VzL0phdmEvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL2ludGVyZmFjZXMvSmF2YS90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTUxLDYgKzUxLDggQEAgUGFybWFfUG9seWhlZHJhX0xpYnJhcnlfdGVzdDIuamF2YSBcCisgUFBMX1Rlc3QuamF2YSBcCisgcHBsX2phdmFfdGVzdHNfY29tbW9uCisgCisraWYgRU5BQkxFX1NIQVJFRAorKworIGNoZWNrX0pBVkEgPSBcCisgcHBsX2phdmFfZ2VuZXJhdGVkX3Rlc3RzLmphdmEgXAorIFRlc3RfRXhlY3V0b3IuamF2YSBcCitAQCAtNjIsOCArNjQsNiBAQCBQYXJtYV9Qb2x5aGVkcmFfTGlicmFyeV90ZXN0MS5qYXZhIFwKKyBQYXJtYV9Qb2x5aGVkcmFfTGlicmFyeV90ZXN0Mi5qYXZhIFwKKyBQUExfVGVzdC5qYXZhCisgCistaWYgRU5BQkxFX1NIQVJFRAorLQorIENMQVNTUEFUSCA9IC4uL3BwbF9qYXZhLmphcjouCisgSkFWQUNGTEFHUyA9IC1jbGFzc3BhdGggJChDTEFTU1BBVEgpCisgCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvcHBsLzAuMTEuMi8xMDAtZml4LWphdmEtdGVzdC12cy1lbmFibGVkLXNoYXJlZC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9wcGwvMC4xMS4yLzEwMC1maXgtamF2YS10ZXN0LXZzLWVuYWJsZWQtc2hhcmVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYTcyZTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvcHBsLzAuMTEuMi8xMDAtZml4LWphdmEtdGVzdC12cy1lbmFibGVkLXNoYXJlZC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitjb21taXQgMjViYjc3NTg3OTQ0NzY4NTgxMjI1ZDFjMDA0OGZhY2FiMzJjZjAxOQorQXV0aG9yOiBSb2JlcnRvIEJhZ25hcmEgPGJhZ25hcmFAY3MudW5pcHIuaXQ+CitEYXRlOiAgIFdlZCBNYXkgMTggMDk6MzU6MzYgMjAxMSArMDIwMAorCisgICAgTW92ZWQgbWlzcGxhY2VkIGNvbmRpdGlvbmFsLgorCitkaWZmIC0tZ2l0IGEvaW50ZXJmYWNlcy9KYXZhL3Rlc3RzL01ha2VmaWxlLmFtIGIvaW50ZXJmYWNlcy9KYXZhL3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCA2NGJhODY0Li42MDdiYmM2IDEwMDY0NAorLS0tIGEvaW50ZXJmYWNlcy9KYXZhL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi9pbnRlcmZhY2VzL0phdmEvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC01MSw2ICs1MSw4IEBAIFBhcm1hX1BvbHloZWRyYV9MaWJyYXJ5X3Rlc3QyLmphdmEgXAorIFBQTF9UZXN0LmphdmEgXAorIHBwbF9qYXZhX3Rlc3RzX2NvbW1vbgorIAorK2lmIEVOQUJMRV9TSEFSRUQKKysKKyBjaGVja19KQVZBID0gXAorIHBwbF9qYXZhX2dlbmVyYXRlZF90ZXN0cy5qYXZhIFwKKyBUZXN0X0V4ZWN1dG9yLmphdmEgXAorQEAgLTYyLDggKzY0LDYgQEAgUGFybWFfUG9seWhlZHJhX0xpYnJhcnlfdGVzdDEuamF2YSBcCisgUGFybWFfUG9seWhlZHJhX0xpYnJhcnlfdGVzdDIuamF2YSBcCisgUFBMX1Rlc3QuamF2YQorIAorLWlmIEVOQUJMRV9TSEFSRUQKKy0KKyBDTEFTU1BBVEggPSAuLi9wcGxfamF2YS5qYXI6LgorIEpBVkFDRkxBR1MgPSAtY2xhc3NwYXRoICQoQ0xBU1NQQVRIKQorIApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3BwbC8wLjExLzEwMC1maXgtamF2YS10ZXN0LXZzLWVuYWJsZWQtc2hhcmVkLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3BwbC8wLjExLzEwMC1maXgtamF2YS10ZXN0LXZzLWVuYWJsZWQtc2hhcmVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYTcyZTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvcHBsLzAuMTEvMTAwLWZpeC1qYXZhLXRlc3QtdnMtZW5hYmxlZC1zaGFyZWQucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorY29tbWl0IDI1YmI3NzU4Nzk0NDc2ODU4MTIyNWQxYzAwNDhmYWNhYjMyY2YwMTkKK0F1dGhvcjogUm9iZXJ0byBCYWduYXJhIDxiYWduYXJhQGNzLnVuaXByLml0PgorRGF0ZTogICBXZWQgTWF5IDE4IDA5OjM1OjM2IDIwMTEgKzAyMDAKKworICAgIE1vdmVkIG1pc3BsYWNlZCBjb25kaXRpb25hbC4KKworZGlmZiAtLWdpdCBhL2ludGVyZmFjZXMvSmF2YS90ZXN0cy9NYWtlZmlsZS5hbSBiL2ludGVyZmFjZXMvSmF2YS90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggNjRiYTg2NC4uNjA3YmJjNiAxMDA2NDQKKy0tLSBhL2ludGVyZmFjZXMvSmF2YS90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvaW50ZXJmYWNlcy9KYXZhL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtNTEsNiArNTEsOCBAQCBQYXJtYV9Qb2x5aGVkcmFfTGlicmFyeV90ZXN0Mi5qYXZhIFwKKyBQUExfVGVzdC5qYXZhIFwKKyBwcGxfamF2YV90ZXN0c19jb21tb24KKyAKKytpZiBFTkFCTEVfU0hBUkVECisrCisgY2hlY2tfSkFWQSA9IFwKKyBwcGxfamF2YV9nZW5lcmF0ZWRfdGVzdHMuamF2YSBcCisgVGVzdF9FeGVjdXRvci5qYXZhIFwKK0BAIC02Miw4ICs2NCw2IEBAIFBhcm1hX1BvbHloZWRyYV9MaWJyYXJ5X3Rlc3QxLmphdmEgXAorIFBhcm1hX1BvbHloZWRyYV9MaWJyYXJ5X3Rlc3QyLmphdmEgXAorIFBQTF9UZXN0LmphdmEKKyAKKy1pZiBFTkFCTEVfU0hBUkVECistCisgQ0xBU1NQQVRIID0gLi4vcHBsX2phdmEuamFyOi4KKyBKQVZBQ0ZMQUdTID0gLWNsYXNzcGF0aCAkKENMQVNTUEFUSCkKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE1LzEwMC1hdXRvcmVjb25mLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTUvMTAwLWF1dG9yZWNvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZmZGE4MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE1LzEwMC1hdXRvcmVjb25mLnBhdGNoCkBAIC0wLDAgKzEsNzYxIEBACitkaWZmIC1kdXIgc3RyYWNlLTQuNS4xNS5vcmlnL2NvbmZpZ3VyZSBzdHJhY2UtNC41LjE1L2NvbmZpZ3VyZQorLS0tIHN0cmFjZS00LjUuMTUub3JpZy9jb25maWd1cmUJMjAwNy0wMS0xMSAyMzoyMzozMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBzdHJhY2UtNC41LjE1L2NvbmZpZ3VyZQkyMDA3LTA3LTE0IDE5OjE4OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTk1Niw3ICs5NTYsNyBAQAorICAgICBlbHNlCisgICAgICAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBubyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGlzIGluICRhY19kaXIiID4mMgorICAgICBmaQorLSAgICBjZCAkYWNfcG9wZGlyCisrICAgIGNkICIkYWNfcG9wZGlyIgorICAgZG9uZQorIGZpCisgCitAQCAtMjY2MCw4ICsyNjYwLDcgQEAKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTI3MTksOCArMjcxOCw3IEBACisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0yODM2LDggKzI4MzQsNyBAQAorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMjg5MSw4ICsyODg4LDcgQEAKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTI5MzcsOCArMjkzMyw3IEBACisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0yOTgyLDggKzI5NzcsNyBAQAorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzcyMSw4ICszNzE1LDcgQEAKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTM3ODYsOCArMzc3OSw3IEBACisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0zOTU5LDggKzM5NTEsNyBAQAorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDAzMiw4ICs0MDIzLDcgQEAKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQwODcsOCArNDA3Nyw3IEBACisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00MTU5LDggKzQxNDgsNyBAQAorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDIxNCw4ICs0MjAyLDcgQEAKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQzNDUsOCArNDMzMiw3IEBACisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00NDEwLDggKzQzOTYsNyBAQAorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDQ1NCw4ICs0NDM5LDcgQEAKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQ1MTksOCArNDUwMyw3IEBACisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00NTYzLDggKzQ1NDYsNyBAQAorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDYyOCw4ICs0NjEwLDcgQEAKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQ2NzIsOCArNDY1Myw3IEBACisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00NzM3LDggKzQ3MTcsNyBAQAorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDc4MSw4ICs0NzYwLDcgQEAKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQ4NDYsOCArNDgyNCw3IEBACisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00ODkwLDggKzQ4NjcsNyBAQAorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDk1NSw4ICs0OTMxLDcgQEAKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQ5OTksOCArNDk3NCw3IEBACisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC01MDY0LDggKzUwMzgsNyBAQAorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNTEwOCw4ICs1MDgxLDcgQEAKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTUxNzMsOCArNTE0NSw3IEBACisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC01MjE3LDggKzUxODgsNyBAQAorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNTI4Niw4ICs1MjU2LDcgQEAKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTUzMjAsNiArNTI4OSw3MyBAQAorIAorIGZpCisgCisrZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdGF0ZnM2NCBpbiBzeXMvKHN0YXRmc3x2ZnMpLmgiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0YXRmczY0IGluIHN5cy8oc3RhdGZzfHZmcykuaC4uLiAkRUNIT19DIiA+JjYKKytpZiB0ZXN0ICIke2FjX2N2X3R5cGVfc3RhdGZzNjQrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaWZkZWYgTElOVVgKKysjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKysjaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgorKyNlbHNlCisrI2luY2x1ZGUgPHN5cy92ZnMuaD4KKysjZW5kaWYKKytpbnQKKyttYWluICgpCisreworK3N0cnVjdCBzdGF0ZnM2NCBzdDsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICBhY19jdl90eXBlX3N0YXRmczY0PXllcworK2Vsc2UKKysgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworK2FjX2N2X3R5cGVfc3RhdGZzNjQ9bm8KKytmaQorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytmaQorKworK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3N0YXRmczY0IiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9zdGF0ZnM2NCIgPiY2CisraWYgdGVzdCAiJGFjX2N2X3R5cGVfc3RhdGZzNjQiID0geWVzCisrdGhlbgorKworK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisrI2RlZmluZSBIQVZFX1NUQVRGUzY0IDEKKytfQUNFT0YKKysKKytmaQorKworIAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzLi4uICRFQ0hPX0MiID4mNgorQEAgLTUzNjAsOCArNTM5Niw3IEBACisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC01NDYwLDggKzU0OTUsNyBAQAorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNTYxMCw4ICs1NjQ0LDcgQEAKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTU2NjgsOCArNTcwMSw3IEBACisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC01ODE2LDggKzU4NDgsNyBAQAorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNTk2OCw4ICs1OTk5LDcgQEAKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTYwMzMsOCArNjA2Myw3IEBACisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC02MTAwLDggKzYxMjksNyBAQAorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjE0Nyw4ICs2MTc1LDcgQEAKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTYyMTQsOCArNjI0MSw3IEBACisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC02NDY2LDggKzY0OTIsNyBAQAorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjUzMiw4ICs2NTU3LDcgQEAKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTY2MDAsOCArNjYyNCw3IEBACisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC02NzE3LDggKzY3NDAsNyBAQAorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjgxMiw4ICs2ODM0LDcgQEAKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTY5NTksOCArNjk4MCw3IEBACisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC03MDIwLDggKzcwNDAsNyBAQAorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNzA4Miw4ICs3MTAxLDcgQEAKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTczNTYsOCArNzM3NCw3IEBACisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC03NDAxLDggKzc0MTgsNyBAQAorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNzQ3MSw4ICs3NDg3LDcgQEAKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTc1MzksOCArNzU1NCw3IEBACisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC03NTg1LDggKzc1OTksNyBAQAorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNzY1Miw4ICs3NjY1LDcgQEAKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTc2OTgsOCArNzcxMCw3IEBACisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC03NzY3LDggKzc3NzgsNyBAQAorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNzgzNCw4ICs3ODQ0LDcgQEAKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTc4OTksOCArNzkwOCw3IEBACisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC03OTY2LDggKzc5NzQsNyBAQAorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtODAzMiw4ICs4MDM5LDcgQEAKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTgwNzcsOCArODA4Myw3IEBACisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC04MTQ1LDggKzgxNTAsNyBAQAorICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCistCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtODIxOCw4ICs4MjIyLDcgQEAKKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTgyODksOCArODI5Miw3IEBACisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKy0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05MjkzLDExICs5Mjk1LDYgQEAKKyAgICopIGFjX0lOU1RBTEw9JGFjX3RvcF9idWlsZGRpciRJTlNUQUxMIDs7CisgICBlc2FjCisgCistICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRhY19maWxlIiA+JjUKKy1lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQorLSAgICBybSAtZiAiJGFjX2ZpbGUiCistICBmaQorICAgIyBMZXQncyBzdGlsbCBwcmV0ZW5kIGl0IGlzIGBjb25maWd1cmUnIHdoaWNoIGluc3RhbnRpYXRlcyAoaS5lLiwgZG9uJ3QKKyAgICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKKyAgICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCitAQCAtOTMzNiw2ICs5MzMzLDEyIEBACisgCSBmaTs7CisgICAgICAgZXNhYworICAgICBkb25lYCB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKysKKysgIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQorK2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9CisrICAgIHJtIC1mICIkYWNfZmlsZSIKKysgIGZpCisgX0FDRU9GCisgY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKyAgIHNlZCAiJGFjX3Zwc3ViCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNS8xMTAtZG9udC11c2UtUkVHX1NZU0NBTEwtZm9yLXNoLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTUvMTEwLWRvbnQtdXNlLVJFR19TWVNDQUxMLWZvci1zaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWRkNDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTUvMTEwLWRvbnQtdXNlLVJFR19TWVNDQUxMLWZvci1zaC5wYXRjaApAQCAtMCwwICsxLDExIEBACitkaWZmIC1kdXIgc3RyYWNlLTQuNS4xNS5vcmlnL3Byb2Nlc3MuYyBzdHJhY2UtNC41LjE1L3Byb2Nlc3MuYworLS0tIHN0cmFjZS00LjUuMTUub3JpZy9wcm9jZXNzLmMJMjAwNy0wMS0xMSAyMzowODozOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBzdHJhY2UtNC41LjE1L3Byb2Nlc3MuYwkyMDA3LTA3LTE0IDE5OjE5OjU4LjAwMDAwMDAwMCArMDIwMAorQEAgLTI2NzksNyArMjY3OSw2IEBACisgICAgICAgIHsgNCpSRUdfR0JSLCAgICAgICAgICAgICI0KlJFR19HQlIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICB7IDQqUkVHX01BQ0gsICAgICAgICAgICAiNCpSRUdfTUFDSCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgeyA0KlJFR19NQUNMLCAgICAgICAgICAgIjQqUkVHX01BQ0wiICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCistICAgICAgIHsgNCpSRUdfU1lTQ0FMTCwgICAgICAgICI0KlJFR19TWVNDQUxMIiAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICB7IDQqUkVHX0ZQVUwsICAgICAgICAgICAiNCpSRUdfRlBVTCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgeyA0KlJFR19GUFJFRzAsICAgICAgICAgIjQqUkVHX0ZQUkVHMCIgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgIHsgNCooUkVHX0ZQUkVHMCsxKSwgICAgICI0KlJFR19GUFJFRzEiICAgICAgICAgICAgICAgICAgICAgICAgICB9LApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTUvMTIwLWZpeC1hcm0tYmFkLXN5c2NhbGwucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNS8xMjAtZml4LWFybS1iYWQtc3lzY2FsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTRjNWM0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTUvMTIwLWZpeC1hcm0tYmFkLXN5c2NhbGwucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorZGlmZiAtZHVyIHN0cmFjZS00LjUuMTUub3JpZy9zeXNjYWxsLmMgc3RyYWNlLTQuNS4xNS9zeXNjYWxsLmMKKy0tLSBzdHJhY2UtNC41LjE1Lm9yaWcvc3lzY2FsbC5jCTIwMDYtMTItMjEgMjM6MTM6MzMuMDAwMDAwMDAwICswMTAwCisrKysgc3RyYWNlLTQuNS4xNS9zeXNjYWxsLmMJMjAwNy0wNy0xNCAxOToyMTo0NC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMDQ1LDYgKzEwNDUsMTUgQEAKKyAJCS8qCisgCQkgKiBOb3RlOiB3ZSBvbmx5IGRlYWwgd2l0aCBvbmx5IDMyLWJpdCBDUFVzIGhlcmUuCisgCQkgKi8KKysKKysJCWlmICghKHRjcC0+ZmxhZ3MgJiBUQ0JfSU5TWVNDQUxMKSAmJgorKwkJICAgICh0Y3AtPmZsYWdzICYgVENCX1dBSVRFWEVDVkUpKSB7CisrCQkJLyogY2F1Z2h0IGEgZmFrZSBzeXNjYWxsIGZyb20gdGhlIGV4ZWN2ZSdzIGV4aXQgKi8KKysJCQl0Y3AtPmZsYWdzICY9IH5UQ0JfV0FJVEVYRUNWRTsKKysJCQlyZXR1cm4gMDsKKysJCX0KKysgCisrCisgCQlpZiAocmVncy5BUk1fY3BzciAmIDB4MjApIHsKKyAJCQkvKgorIAkJCSAqIEdldCB0aGUgVGh1bWItbW9kZSBzeXN0ZW0gY2FsbCBudW1iZXIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE1LzEzMC1maXgtZGlzYWJsZWQtbGFyZ2VmaWxlLXN5c2NhbGxzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTUvMTMwLWZpeC1kaXNhYmxlZC1sYXJnZWZpbGUtc3lzY2FsbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI5MDNjZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE1LzEzMC1maXgtZGlzYWJsZWQtbGFyZ2VmaWxlLXN5c2NhbGxzLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK2RpZmYgLWR1ciBzdHJhY2UtNC41LjE1Lm9yaWcvc3lzY2FsbC5jIHN0cmFjZS00LjUuMTUvc3lzY2FsbC5jCistLS0gc3RyYWNlLTQuNS4xNS5vcmlnL3N5c2NhbGwuYwkyMDA3LTA3LTE0IDE5OjIxOjQ0LjAwMDAwMDAwMCArMDIwMAorKysrIHN0cmFjZS00LjUuMTUvc3lzY2FsbC5jCTIwMDctMDctMTQgMTk6MjI6NDkuMDAwMDAwMDAwICswMjAwCitAQCAtMTI1LDYgKzEyNSwxOCBAQAorICNkZWZpbmUgVFAgVFJBQ0VfUFJPQ0VTUworICNkZWZpbmUgVFMgVFJBQ0VfU0lHTkFMCisgCisrI2lmbmRlZiBIQVZFX1NUQVRGUzY0CisrLyoKKysgKiBVZ2x5IGhhY2tzIGZvciBzeXN0ZW1zIHRoYXQgZG8gbm90IGhhdmUgTEZTCisrICovCisrCisrI2RlZmluZSBzeXNfdHJ1bmNhdGU2NCAgc3lzX3RydW5jYXRlCisrI2RlZmluZSBzeXNfZnRydW5jYXRlNjQgc3lzX2Z0cnVuY2F0ZQorKyNkZWZpbmUgc3lzX2dldGRlbnRzNjQgIHN5c19nZXRkZW50cworKyNkZWZpbmUgc3lzX3N0YXRmczY0ICAgIHN5c19zdGF0ZnMKKysjZGVmaW5lIHN5c19mc3RhdGZzNjQgICBzeXNfZnN0YXRmcworKyNlbmRpZgorKworIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzZW50IHN5c2VudDBbXSA9IHsKKyAjaW5jbHVkZSAic3lzY2FsbGVudC5oIgorIH07CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNS8xNDAtbWlwcy1zcHJpbnRzaWdtYXNrLWZpeC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE1LzE0MC1taXBzLXNwcmludHNpZ21hc2stZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYWFhNDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNS8xNDAtbWlwcy1zcHJpbnRzaWdtYXNrLWZpeC5wYXRjaApAQCAtMCwwICsxLDEyIEBACitkaWZmIC1kdXIgc3RyYWNlLTQuNS4xNS5vcmlnL3NpZ25hbC5jIHN0cmFjZS00LjUuMTUvc2lnbmFsLmMKKy0tLSBzdHJhY2UtNC41LjE1Lm9yaWcvc2lnbmFsLmMJMjAwNy0wMS0xMSAyMzowODozOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBzdHJhY2UtNC41LjE1L3NpZ25hbC5jCTIwMDctMDctMTQgMTk6MjQ6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtMTQ0MCw3ICsxNDQwLDcgQEAKKyAJICAJdGNwLT51X3J2YWwgPSB0Y3AtPnVfZXJyb3IgPSAwOworIAkJaWYodGNwLT51X2FyZ1swXSA9PSAwKQorIAkJICAJcmV0dXJuIDA7CistCQl0Y3AtPmF1eHN0ciA9IHNwcmludHNpZ21hc2soIm1hc2sgbm93ICIsIHRjcC0+dV9hcmdbMV0pOworKwkJdGNwLT5hdXhzdHIgPSBzcHJpbnRzaWdtYXNrKCJtYXNrIG5vdyAiLCB0Y3AtPnVfYXJnWzFdLCAwKTsKKyAJCXJldHVybiBSVkFMX05PTkUgfCBSVkFMX1NUUjsKKyAJfQorIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE1LzE1MC1zdGF0ZnM2NC1jaGVjay5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE1LzE1MC1zdGF0ZnM2NC1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWQ4ZTVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTUvMTUwLXN0YXRmczY0LWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK2RpZmYgLWR1ciBzdHJhY2UtNC41LjE1Lm9yaWcvYWNpbmNsdWRlLm00IHN0cmFjZS00LjUuMTUvYWNpbmNsdWRlLm00CistLS0gc3RyYWNlLTQuNS4xNS5vcmlnL2FjaW5jbHVkZS5tNAkyMDA0LTA0LTE0IDA0OjIxOjAxLjAwMDAwMDAwMCArMDIwMAorKysrIHN0cmFjZS00LjUuMTUvYWNpbmNsdWRlLm00CTIwMDctMDctMTQgMTk6MjU6MjUuMDAwMDAwMDAwICswMjAwCitAQCAtMjEwLDYgKzIxMCwyNiBAQAorIGZpCisgXSkKKyAKKytkbmwgIyMjIEEgbWFjcm8gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgc3RhdGZzNjQgaXMgZGVmaW5lZC4KKytBQ19ERUZVTihbQUNfU1RBVEZTNjRdLAorK1tBQ19NU0dfQ0hFQ0tJTkcoZm9yIHN0YXRmczY0IGluIHN5cy8oc3RhdGZzfHZmcykuaCkKKytBQ19DQUNIRV9WQUwoYWNfY3ZfdHlwZV9zdGF0ZnM2NCwKKytbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpZmRlZiBMSU5VWAorKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CisrI2Vsc2UKKysjaW5jbHVkZSA8c3lzL3Zmcy5oPgorKyNlbmRpZl1dLCBbW3N0cnVjdCBzdGF0ZnM2NCBzdDtdXSldLFthY19jdl90eXBlX3N0YXRmczY0PXllc10sW2FjX2N2X3R5cGVfc3RhdGZzNjQ9bm9dKV0pCisrQUNfTVNHX1JFU1VMVCgkYWNfY3ZfdHlwZV9zdGF0ZnM2NCkKKytpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9zdGF0ZnM2NCIgPSB5ZXMKKyt0aGVuCisrCUFDX0RFRklORShbSEFWRV9TVEFURlM2NF0sIDEsCisrW0RlZmluZSBpZiBzdGF0ZnM2NCBpcyBhdmFpbGFibGUgaW4gc3lzL3N0YXRmcy5oIG9yIHN5cy92ZnMuaC5dKQorK2ZpCisrXSkKKysKKysKKysKKyBkbmwgIyMjIEEgbWFjcm8gdG8gZGV0ZXJtaW5lIGlmIG9mZl90IGlzIGEgbG9uZyBsb25nCisgQUNfREVGVU4oW0FDX09GRl9UX0lTX0xPTkdfTE9OR10sCisgW0FDX01TR19DSEVDS0lORyhmb3IgbG9uZyBsb25nIG9mZl90KQorZGlmZiAtZHVyIHN0cmFjZS00LjUuMTUub3JpZy9jb25maWd1cmUuYWMgc3RyYWNlLTQuNS4xNS9jb25maWd1cmUuYWMKKy0tLSBzdHJhY2UtNC41LjE1Lm9yaWcvY29uZmlndXJlLmFjCTIwMDctMDEtMTEgMTI6Mzc6NTUuMDAwMDAwMDAwICswMTAwCisrKysgc3RyYWNlLTQuNS4xNS9jb25maWd1cmUuYWMJMjAwNy0wNy0xNCAxOToyNToyNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNjksNiArMTY5LDcgQEAKKyAJCSAgc3RydWN0IHN0YXQuc3RfbGV2ZWwsCisgCQkgIHN0cnVjdCBzdGF0LnN0X3JkZXZdKQorIEFDX1NUQVQ2NAorK0FDX1NUQVRGUzY0CisgCisgQUNfVFlQRV9TSUdOQUwKKyBBQ19UWVBFX1VJRF9UCitkaWZmIC1kdXIgc3RyYWNlLTQuNS4xNS5vcmlnL2ZpbGUuYyBzdHJhY2UtNC41LjE1L2ZpbGUuYworLS0tIHN0cmFjZS00LjUuMTUub3JpZy9maWxlLmMJMjAwNy0wMS0xNSAyMToyNTo1Mi4wMDAwMDAwMDAgKzAxMDAKKysrKyBzdHJhY2UtNC41LjE1L2ZpbGUuYwkyMDA3LTA3LTE0IDE5OjI1OjI1LjAwMDAwMDAwMCArMDIwMAorQEAgLTE2MzUsNyArMTYzNSw3IEBACisgCXJldHVybiAwOworIH0KKyAKKy0jaWZkZWYgTElOVVgKKysjaWZkZWYgSEFWRV9TVEFURlM2NAorIHN0YXRpYyB2b2lkCisgcHJpbnRzdGF0ZnM2NCh0Y3AsIGFkZHIpCisgc3RydWN0IHRjYiAqdGNwOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTUvMTYwLXN1cGVyaC11cGRhdGUuYWMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNS8xNjAtc3VwZXJoLXVwZGF0ZS5hYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWUyY2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTUvMTYwLXN1cGVyaC11cGRhdGUuYWMucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorZGlmZiAtZHVyIHN0cmFjZS00LjUuMTUub3JpZy9jb25maWd1cmUuYWMgc3RyYWNlLTQuNS4xNS9jb25maWd1cmUuYWMKKy0tLSBzdHJhY2UtNC41LjE1Lm9yaWcvY29uZmlndXJlLmFjCTIwMDctMDctMTQgMTk6MjU6MjUuMDAwMDAwMDAwICswMjAwCisrKysgc3RyYWNlLTQuNS4xNS9jb25maWd1cmUuYWMJMjAwNy0wNy0xNCAxOToyNzozNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC05MSwxNCArOTEsMTQgQEAKKyAJYXJjaD1ocHBhCisgCUFDX0RFRklORShbSFBQQV0sIDEsIFtEZWZpbmUgZm9yIHRoZSBIUFBBIGFyY2hpdGVjdHVyZS5dKQorIAk7OworLXNoKQorLQlhcmNoPXNoCistCUFDX0RFRklORShbU0hdLCAxLCBbRGVmaW5lIGZvciB0aGUgU0ggYXJjaGl0ZWN0dXJlLl0pCistCTs7Cisgc2g2NCkKKyAJYXJjaD1zaDY0CisgCUFDX0RFRklORShbU0g2NF0sIDEsIFtEZWZpbmUgZm9yIHRoZSBTSDY0IGFyY2hpdGVjdHVyZS5dKQorIAk7OworK3NoKikKKysJYXJjaD1zaAorKwlBQ19ERUZJTkUoW1NIXSwgMSwgW0RlZmluZSBmb3IgdGhlIFNIIGFyY2hpdGVjdHVyZS5dKQorKwk7OworIHg4Nj82NCopCisgCWFyY2g9eDg2XzY0CisgCUFDX0RFRklORShbWDg2XzY0XSwgMSwgW0RlZmluZSBmb3IgdGhlIEFNRCB4ODYtNjQgYXJjaGl0ZWN0dXJlLl0pCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNS8xNzAtdW5kZWYtQ1RMX1BST0MucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNS8xNzAtdW5kZWYtQ1RMX1BST0MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZiODc1MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE1LzE3MC11bmRlZi1DVExfUFJPQy5wYXRjaApAQCAtMCwwICsxLDEzIEBACitkaWZmIC1kdXIgc3RyYWNlLTQuNS4xNS5vcmlnL3N5c3RlbS5jIHN0cmFjZS00LjUuMTUvc3lzdGVtLmMKKy0tLSBzdHJhY2UtNC41LjE1Lm9yaWcvc3lzdGVtLmMJMjAwNy0wMS0xNyAwMDoyMjozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBzdHJhY2UtNC41LjE1L3N5c3RlbS5jCTIwMDctMDctMTQgMTk6Mjg6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtMTYxMiw3ICsxNjEyLDkgQEAKKyAJeyBDVExfS0VSTiwgIkNUTF9LRVJOIiB9LAorIAl7IENUTF9WTSwgIkNUTF9WTSIgfSwKKyAJeyBDVExfTkVULCAiQ1RMX05FVCIgfSwKKysjaWZkZWYgQ1RMX1BST0MKKyAJeyBDVExfUFJPQywgIkNUTF9QUk9DIiB9LAorKyNlbmRpZgorIAl7IENUTF9GUywgIkNUTF9GUyIgfSwKKyAJeyBDVExfREVCVUcsICJDVExfREVCVUciIH0sCisgCXsgQ1RMX0RFViwgIkNUTF9ERVYiIH0sCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNS8xODAtdW5kZWYtUEFDS0VUX01FTUJFUlNISVAucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNS8xODAtdW5kZWYtUEFDS0VUX01FTUJFUlNISVAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdhMTAwZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE1LzE4MC11bmRlZi1QQUNLRVRfTUVNQkVSU0hJUC5wYXRjaApAQCAtMCwwICsxLDE2IEBACitkaWZmIC1kdXIgc3RyYWNlLTQuNS4xNS5vcmlnL25ldC5jIHN0cmFjZS00LjUuMTUvbmV0LmMKKy0tLSBzdHJhY2UtNC41LjE1Lm9yaWcvbmV0LmMJMjAwNi0xMi0xMyAyMDo1NzoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBzdHJhY2UtNC41LjE1L25ldC5jCTIwMDctMDctMTQgMTk6Mjk6MzYuMDAwMDAwMDAwICswMjAwCitAQCAtODAwLDggKzgwMCwxMiBAQAorIAorICNpZmRlZiBTT0xfUEFDS0VUCisgc3RhdGljIGNvbnN0IHN0cnVjdCB4bGF0IHNvY2twYWNrZXRvcHRpb25zW10gPSB7CisrI2lmIGRlZmluZWQoUEFDS0VUX0FERF9NRU1CRVJTSElQKQorIAl7IFBBQ0tFVF9BRERfTUVNQkVSU0hJUCwJIlBBQ0tFVF9BRERfTUVNQkVSU0hJUCIJfSwKKysjZW5kaWYKKysjaWYgZGVmaW5lZChQQUNLRVRfRFJPUF9NRU1CRVJTSElQKQorIAl7IFBBQ0tFVF9EUk9QX01FTUJFUlNISVAsCSJQQUNLRVRfRFJPUF9NRU1CRVJTSElQIn0sCisrI2VuZGlmCisgI2lmIGRlZmluZWQoUEFDS0VUX1JFQ1ZfT1VUUFVUKQorIAl7IFBBQ0tFVF9SRUNWX09VVFBVVCwJCSJQQUNLRVRfUkVDVl9PVVRQVVQiCX0sCisgI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNS8xOTAtdW5kZWYtc3lzY2FsbC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE1LzE5MC11bmRlZi1zeXNjYWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMjNmMDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNS8xOTAtdW5kZWYtc3lzY2FsbC5wYXRjaApAQCAtMCwwICsxLDY0IEBACitkaWZmIC1kdXIgc3RyYWNlLTQuNS4xNS5vcmlnL2xpbnV4L3N5c2NhbGxlbnQuaCBzdHJhY2UtNC41LjE1L2xpbnV4L3N5c2NhbGxlbnQuaAorLS0tIHN0cmFjZS00LjUuMTUub3JpZy9saW51eC9zeXNjYWxsZW50LmgJMjAwNi0xMC0xNiAwMzoxNzo1Mi4wMDAwMDAwMDAgKzAyMDAKKysrKyBzdHJhY2UtNC41LjE1L2xpbnV4L3N5c2NhbGxlbnQuaAkyMDA3LTA3LTE0IDE5OjMwOjE2LjAwMDAwMDAwMCArMDIwMAorQEAgLTEzMCw3ICsxMzAsMTEgQEAKKyAJeyAyLAlURiwJc3lzX3N0YXRmcywJCSJzdGF0ZnMiCX0sIC8qIDk5ICovCisgCXsgMiwJVEQsCXN5c19mc3RhdGZzLAkJImZzdGF0ZnMiCX0sIC8qIDEwMCAqLworIAl7IDMsCTAsCXN5c19pb3Blcm0sCQkiaW9wZXJtIgl9LCAvKiAxMDEgKi8KKy0JeyAyLAlURCwJc3lzX3NvY2tldGNhbGwsCQkic29ja2V0Y2FsbCIsIFNZU19zb2NrZXRjYWxsIH0sIC8qIDEwMiAqLworKwl7IDIsCVRELAlzeXNfc29ja2V0Y2FsbCwJCSJzb2NrZXRjYWxsIgorKyNpZmRlZiBfX05SX3NvY2tldGNhbGwKKysJICAgICwgU1lTX3NvY2tldGNhbGwKKysjZW5kaWYKKysJCQkJCQkJCX0sIC8qIDEwMiAqLworIAl7IDMsCTAsCXN5c19zeXNsb2csCQkic3lzbG9nIgl9LCAvKiAxMDMgKi8KKyAJeyAzLAkwLAlzeXNfc2V0aXRpbWVyLAkJInNldGl0aW1lciIJfSwgLyogMTA0ICovCisgCXsgMiwJMCwJc3lzX2dldGl0aW1lciwJCSJnZXRpdGltZXIiCX0sIC8qIDEwNSAqLworQEAgLTE0NSw3ICsxNDksMTEgQEAKKyAJeyA0LAlUUCwJc3lzX3dhaXQ0LAkJIndhaXQ0IiwgU1lTX3dhaXQ0IH0sIC8qIDExNCAqLworIAl7IDEsCTAsCXN5c19zd2Fwb2ZmLAkJInN3YXBvZmYiCX0sIC8qIDExNSAqLworIAl7IDEsCTAsCXN5c19zeXNpbmZvLAkJInN5c2luZm8iCX0sIC8qIDExNiAqLworLQl7IDYsCTAsCXN5c19pcGMsCQkiaXBjIiwgU1lTX2lwYyB9LCAvKiAxMTcgKi8KKysJeyA2LAkwLAlzeXNfaXBjLAkJImlwYyIKKysjaWZkZWYgX19OUl9pcGMKKysJICAgICwgU1lTX2lwYworKyNlbmRpZgorKwkJCQkJCQkJfSwgLyogMTE3ICovCisgCXsgMSwJVEQsCXN5c19mc3luYywJCSJmc3luYyIJCX0sIC8qIDExOCAqLworIAl7IDEsCVRTLAlzeXNfc2lncmV0dXJuLAkJInNpZ3JldHVybiIJfSwgLyogMTE5ICovCisgCXsgNSwJVFAsCXN5c19jbG9uZSwJCSJjbG9uZSIsIFNZU19jbG9uZSB9LCAvKiAxMjAgKi8KK0BAIC0yODIsNyArMjkwLDExIEBACisgCXsgMywJMCwJc3lzX2lvX2NhbmNlbCwJCSJpb19jYW5jZWwiCX0sIC8qIDI0OSAqLworIAl7IDUsCTAsCXN5c19mYWR2aXNlNjQsCQkiZmFkdmlzZTY0Igl9LCAvKiAyNTAgKi8KKyAJeyA1LAkwLAlwcmludGFyZ3MsCQkiU1lTXzI1MSIJfSwgLyogMjUxICovCistCXsgMSwJVFAsCXN5c19leGl0LAkJImV4aXRfZ3JvdXAiLCBfX05SX2V4aXRfZ3JvdXAgfSwgLyogMjUyICovCisrCXsgMSwJVFAsCXN5c19leGl0LAkJImV4aXRfZ3JvdXAiCisrI2lmZGVmIF9fTlJfZXhpdF9ncm91cAorKwkgICAgLCBfX05SX2V4aXRfZ3JvdXAKKysjZW5kaWYKKysJCQkJCQkJCX0sIC8qIDI1MiAqLworIAl7IDQsCTAsCXByaW50YXJncywJCSJsb29rdXBfZGNvb2tpZSJ9LCAvKiAyNTMgKi8KKyAJeyAxLAkwLAlzeXNfZXBvbGxfY3JlYXRlLAkiZXBvbGxfY3JlYXRlIgl9LCAvKiAyNTQgKi8KKyAJeyA0LAlURCwJc3lzX2Vwb2xsX2N0bCwJCSJlcG9sbF9jdGwiCX0sIC8qIDI1NSAqLworZGlmZiAtZHVyIHN0cmFjZS00LjUuMTUub3JpZy9zeXNjYWxsLmMgc3RyYWNlLTQuNS4xNS9zeXNjYWxsLmMKKy0tLSBzdHJhY2UtNC41LjE1Lm9yaWcvc3lzY2FsbC5jCTIwMDctMDctMTQgMTk6MjI6NDkuMDAwMDAwMDAwICswMjAwCisrKysgc3RyYWNlLTQuNS4xNS9zeXNjYWxsLmMJMjAwNy0wNy0xNCAxOTozMDoxNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNDA0LDE0ICsyNDA0LDE4IEBACisgCXN3aXRjaCAoa25vd25fc2Nubyh0Y3ApKSB7CisgI2lmZGVmIExJTlVYCisgI2lmICFkZWZpbmVkIChBTFBIQSkgJiYgIWRlZmluZWQoU1BBUkMpICYmICFkZWZpbmVkKFNQQVJDNjQpICYmICFkZWZpbmVkKE1JUFMpICYmICFkZWZpbmVkKEhQUEEpCisrI2lmZGVmIF9fTlJfc29ja2V0Y2FsbAorIAljYXNlIFNZU19zb2NrZXRjYWxsOgorIAkJZGVjb2RlX3N1YmNhbGwodGNwLCBTWVNfc29ja2V0X3N1YmNhbGwsCisgCQkJU1lTX3NvY2tldF9uc3ViY2FsbHMsIGRlcmVmX3N0eWxlKTsKKyAJCWJyZWFrOworKyNlbmRpZgorKyNpZmRlZiBfX05SX2lwYworIAljYXNlIFNZU19pcGM6CisgCQlkZWNvZGVfc3ViY2FsbCh0Y3AsIFNZU19pcGNfc3ViY2FsbCwKKyAJCQlTWVNfaXBjX25zdWJjYWxscywgc2hpZnRfc3R5bGUpOworIAkJYnJlYWs7CisrI2VuZGlmCisgI2VuZGlmIC8qICFBTFBIQSAmJiAhTUlQUyAmJiAhU1BBUkMgJiYgIVNQQVJDNjQgJiYgIUhQUEEgKi8KKyAjaWYgZGVmaW5lZCAoU1BBUkMpIHx8IGRlZmluZWQgKFNQQVJDNjQpCisgCWNhc2UgU1lTX3NvY2tldGNhbGw6CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNi8xMDAtYXV0b3JlY29uZi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE2LzEwMC1hdXRvcmVjb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NmVmNDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNi8xMDAtYXV0b3JlY29uZi5wYXRjaApAQCAtMCwwICsxLDc3IEBACitkaWZmIC1kdXIgc3RyYWNlLTQuNS4xNi5vcmlnL2NvbmZpZ3VyZSBzdHJhY2UtNC41LjE2L2NvbmZpZ3VyZQorLS0tIHN0cmFjZS00LjUuMTYub3JpZy9jb25maWd1cmUJMjAwNy0wMS0xMSAyMzoyMzozMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBzdHJhY2UtNC41LjE2L2NvbmZpZ3VyZQkyMDA3LTA3LTE0IDE5OjE4OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTU4MDgsNiArNTc3Nyw3MyBAQAorCisgZmkKKworK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RhdGZzNjQgaW4gc3lzLyhzdGF0ZnN8dmZzKS5oIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdGF0ZnM2NCBpbiBzeXMvKHN0YXRmc3x2ZnMpLmguLi4gJEVDSE9fQyIgPiY2CisraWYgdGVzdCAiJHthY19jdl90eXBlX3N0YXRmczY0K3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2lmZGVmIExJTlVYCisrI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KKysjZWxzZQorKyNpbmNsdWRlIDxzeXMvdmZzLmg+CisrI2VuZGlmCisraW50CisrbWFpbiAoKQorK3sKKytzdHJ1Y3Qgc3RhdGZzNjQgc3Q7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorKyAgYWNfY3ZfdHlwZV9zdGF0ZnM2ND15ZXMKKytlbHNlCisrICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKythY19jdl90eXBlX3N0YXRmczY0PW5vCisrZmkKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKysKKytlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9zdGF0ZnM2NCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfc3RhdGZzNjQiID4mNgorK2lmIHRlc3QgIiRhY19jdl90eXBlX3N0YXRmczY0IiA9IHllcworK3RoZW4KKysKKytjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9TVEFURlM2NCAxCisrX0FDRU9GCisrCisrZmkKKysKKworIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMuLi4gJEVDSE9fQyIgPiY2OyB9CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNi8xMTAtZG9udC11c2UtUkVHX1NZU0NBTEwtZm9yLXNoLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTYvMTEwLWRvbnQtdXNlLVJFR19TWVNDQUxMLWZvci1zaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmJmNjlhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTYvMTEwLWRvbnQtdXNlLVJFR19TWVNDQUxMLWZvci1zaC5wYXRjaApAQCAtMCwwICsxLDExIEBACitkaWZmIC1kdXIgc3RyYWNlLTQuNS4xNi5vcmlnL3Byb2Nlc3MuYyBzdHJhY2UtNC41LjE2L3Byb2Nlc3MuYworLS0tIHN0cmFjZS00LjUuMTYub3JpZy9wcm9jZXNzLmMJMjAwNy0wMS0xMSAyMzowODozOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBzdHJhY2UtNC41LjE2L3Byb2Nlc3MuYwkyMDA3LTA3LTE0IDE5OjE5OjU4LjAwMDAwMDAwMCArMDIwMAorQEAgLTI2ODUsNyArMjY4NSw2IEBACisgICAgICAgIHsgNCpSRUdfR0JSLCAgICAgICAgICAgICI0KlJFR19HQlIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICB7IDQqUkVHX01BQ0gsICAgICAgICAgICAiNCpSRUdfTUFDSCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgeyA0KlJFR19NQUNMLCAgICAgICAgICAgIjQqUkVHX01BQ0wiICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCistICAgICAgIHsgNCpSRUdfU1lTQ0FMTCwgICAgICAgICI0KlJFR19TWVNDQUxMIiAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICB7IDQqUkVHX0ZQVUwsICAgICAgICAgICAiNCpSRUdfRlBVTCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgeyA0KlJFR19GUFJFRzAsICAgICAgICAgIjQqUkVHX0ZQUkVHMCIgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgIHsgNCooUkVHX0ZQUkVHMCsxKSwgICAgICI0KlJFR19GUFJFRzEiICAgICAgICAgICAgICAgICAgICAgICAgICB9LApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTYvMTIwLWZpeC1hcm0tYmFkLXN5c2NhbGwucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNi8xMjAtZml4LWFybS1iYWQtc3lzY2FsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzFiOWRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTYvMTIwLWZpeC1hcm0tYmFkLXN5c2NhbGwucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorZGlmZiAtZHVyIHN0cmFjZS00LjUuMTYub3JpZy9zeXNjYWxsLmMgc3RyYWNlLTQuNS4xNi9zeXNjYWxsLmMKKy0tLSBzdHJhY2UtNC41LjE2Lm9yaWcvc3lzY2FsbC5jCTIwMDYtMTItMjEgMjM6MTM6MzMuMDAwMDAwMDAwICswMTAwCisrKysgc3RyYWNlLTQuNS4xNi9zeXNjYWxsLmMJMjAwNy0wNy0xNCAxOToyMTo0NC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMDQ1LDYgKzEwNDUsMTUgQEAKKyAJCS8qCisgCQkgKiBOb3RlOiB3ZSBvbmx5IGRlYWwgd2l0aCBvbmx5IDMyLWJpdCBDUFVzIGhlcmUuCisgCQkgKi8KKysKKysJCWlmICghKHRjcC0+ZmxhZ3MgJiBUQ0JfSU5TWVNDQUxMKSAmJgorKwkJICAgICh0Y3AtPmZsYWdzICYgVENCX1dBSVRFWEVDVkUpKSB7CisrCQkJLyogY2F1Z2h0IGEgZmFrZSBzeXNjYWxsIGZyb20gdGhlIGV4ZWN2ZSdzIGV4aXQgKi8KKysJCQl0Y3AtPmZsYWdzICY9IH5UQ0JfV0FJVEVYRUNWRTsKKysJCQlyZXR1cm4gMDsKKysJCX0KKysKKysKKyAJCWlmIChyZWdzLkFSTV9jcHNyICYgMHgyMCkgeworIAkJCS8qCisgCQkJICogR2V0IHRoZSBUaHVtYi1tb2RlIHN5c3RlbSBjYWxsIG51bWJlcgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTYvMTMwLWZpeC1kaXNhYmxlZC1sYXJnZWZpbGUtc3lzY2FsbHMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNi8xMzAtZml4LWRpc2FibGVkLWxhcmdlZmlsZS1zeXNjYWxscy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjQ3ZGM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTYvMTMwLWZpeC1kaXNhYmxlZC1sYXJnZWZpbGUtc3lzY2FsbHMucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorZGlmZiAtZHVyIHN0cmFjZS00LjUuMTYub3JpZy9zeXNjYWxsLmMgc3RyYWNlLTQuNS4xNi9zeXNjYWxsLmMKKy0tLSBzdHJhY2UtNC41LjE2Lm9yaWcvc3lzY2FsbC5jCTIwMDctMDctMTQgMTk6MjE6NDQuMDAwMDAwMDAwICswMjAwCisrKysgc3RyYWNlLTQuNS4xNi9zeXNjYWxsLmMJMjAwNy0wNy0xNCAxOToyMjo0OS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMjUsNiArMTI1LDE4IEBACisgI2RlZmluZSBUUCBUUkFDRV9QUk9DRVNTCisgI2RlZmluZSBUUyBUUkFDRV9TSUdOQUwKKworKyNpZm5kZWYgSEFWRV9TVEFURlM2NAorKy8qCisrICogVWdseSBoYWNrcyBmb3Igc3lzdGVtcyB0aGF0IGRvIG5vdCBoYXZlIExGUworKyAqLworKworKyNkZWZpbmUgc3lzX3RydW5jYXRlNjQgIHN5c190cnVuY2F0ZQorKyNkZWZpbmUgc3lzX2Z0cnVuY2F0ZTY0IHN5c19mdHJ1bmNhdGUKKysjZGVmaW5lIHN5c19nZXRkZW50czY0ICBzeXNfZ2V0ZGVudHMKKysjZGVmaW5lIHN5c19zdGF0ZnM2NCAgICBzeXNfc3RhdGZzCisrI2RlZmluZSBzeXNfZnN0YXRmczY0ICAgc3lzX2ZzdGF0ZnMKKysjZW5kaWYKKysKKyBzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2VudCBzeXNlbnQwW10gPSB7CisgI2luY2x1ZGUgInN5c2NhbGxlbnQuaCIKKyB9OwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTYvMTQwLXN0YXRmczY0LWNoZWNrLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTYvMTQwLXN0YXRmczY0LWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ODk2NmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNi8xNDAtc3RhdGZzNjQtY2hlY2sucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorZGlmZiAtZHVyIHN0cmFjZS00LjUuMTYub3JpZy9hY2luY2x1ZGUubTQgc3RyYWNlLTQuNS4xNi9hY2luY2x1ZGUubTQKKy0tLSBzdHJhY2UtNC41LjE2Lm9yaWcvYWNpbmNsdWRlLm00CTIwMDQtMDQtMTQgMDQ6MjE6MDEuMDAwMDAwMDAwICswMjAwCisrKysgc3RyYWNlLTQuNS4xNi9hY2luY2x1ZGUubTQJMjAwNy0wNy0xNCAxOToyNToyNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMTAsNiArMjEwLDI2IEBACisgZmkKKyBdKQorCisrZG5sICMjIyBBIG1hY3JvIHRvIGRldGVybWluZSB3aGV0aGVyIHN0YXRmczY0IGlzIGRlZmluZWQuCisrQUNfREVGVU4oW0FDX1NUQVRGUzY0XSwKKytbQUNfTVNHX0NIRUNLSU5HKGZvciBzdGF0ZnM2NCBpbiBzeXMvKHN0YXRmc3x2ZnMpLmgpCisrQUNfQ0FDSEVfVkFMKGFjX2N2X3R5cGVfc3RhdGZzNjQsCisrW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaWZkZWYgTElOVVgKKysjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKysjaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgorKyNlbHNlCisrI2luY2x1ZGUgPHN5cy92ZnMuaD4KKysjZW5kaWZdXSwgW1tzdHJ1Y3Qgc3RhdGZzNjQgc3Q7XV0pXSxbYWNfY3ZfdHlwZV9zdGF0ZnM2ND15ZXNdLFthY19jdl90eXBlX3N0YXRmczY0PW5vXSldKQorK0FDX01TR19SRVNVTFQoJGFjX2N2X3R5cGVfc3RhdGZzNjQpCisraWYgdGVzdCAiJGFjX2N2X3R5cGVfc3RhdGZzNjQiID0geWVzCisrdGhlbgorKwlBQ19ERUZJTkUoW0hBVkVfU1RBVEZTNjRdLCAxLAorK1tEZWZpbmUgaWYgc3RhdGZzNjQgaXMgYXZhaWxhYmxlIGluIHN5cy9zdGF0ZnMuaCBvciBzeXMvdmZzLmguXSkKKytmaQorK10pCisrCisrCisrCisgZG5sICMjIyBBIG1hY3JvIHRvIGRldGVybWluZSBpZiBvZmZfdCBpcyBhIGxvbmcgbG9uZworIEFDX0RFRlVOKFtBQ19PRkZfVF9JU19MT05HX0xPTkddLAorIFtBQ19NU0dfQ0hFQ0tJTkcoZm9yIGxvbmcgbG9uZyBvZmZfdCkKK2RpZmYgLWR1ciBzdHJhY2UtNC41LjE2Lm9yaWcvY29uZmlndXJlLmFjIHN0cmFjZS00LjUuMTYvY29uZmlndXJlLmFjCistLS0gc3RyYWNlLTQuNS4xNi5vcmlnL2NvbmZpZ3VyZS5hYwkyMDA3LTAxLTExIDEyOjM3OjU1LjAwMDAwMDAwMCArMDEwMAorKysrIHN0cmFjZS00LjUuMTYvY29uZmlndXJlLmFjCTIwMDctMDctMTQgMTk6MjU6MjUuMDAwMDAwMDAwICswMjAwCitAQCAtMTY5LDYgKzE2OSw3IEBACisgCQkgIHN0cnVjdCBzdGF0LnN0X2xldmVsLAorIAkJICBzdHJ1Y3Qgc3RhdC5zdF9yZGV2XSkKKyBBQ19TVEFUNjQKKytBQ19TVEFURlM2NAorCisgQUNfVFlQRV9TSUdOQUwKKyBBQ19UWVBFX1VJRF9UCitkaWZmIC1kdXIgc3RyYWNlLTQuNS4xNi5vcmlnL2ZpbGUuYyBzdHJhY2UtNC41LjE2L2ZpbGUuYworLS0tIHN0cmFjZS00LjUuMTYub3JpZy9maWxlLmMJMjAwNy0wMS0xNSAyMToyNTo1Mi4wMDAwMDAwMDAgKzAxMDAKKysrKyBzdHJhY2UtNC41LjE2L2ZpbGUuYwkyMDA3LTA3LTE0IDE5OjI1OjI1LjAwMDAwMDAwMCArMDIwMAorQEAgLTE2MzYsNyArMTYzNiw3IEBACisgCXJldHVybiAwOworIH0KKworLSNpZmRlZiBMSU5VWAorKyNpZmRlZiBIQVZFX1NUQVRGUzY0Cisgc3RhdGljIHZvaWQKKyBwcmludHN0YXRmczY0KHRjcCwgYWRkcikKKyBzdHJ1Y3QgdGNiICp0Y3A7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNi8xNTAtc3VwZXJoLXVwZGF0ZS5hYy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE2LzE1MC1zdXBlcmgtdXBkYXRlLmFjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMjkzMTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNi8xNTAtc3VwZXJoLXVwZGF0ZS5hYy5wYXRjaApAQCAtMCwwICsxLDIyIEBACitkaWZmIC1kdXIgc3RyYWNlLTQuNS4xNi5vcmlnL2NvbmZpZ3VyZS5hYyBzdHJhY2UtNC41LjE2L2NvbmZpZ3VyZS5hYworLS0tIHN0cmFjZS00LjUuMTYub3JpZy9jb25maWd1cmUuYWMJMjAwNy0wNy0xNCAxOToyNToyNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBzdHJhY2UtNC41LjE2L2NvbmZpZ3VyZS5hYwkyMDA3LTA3LTE0IDE5OjI3OjM1LjAwMDAwMDAwMCArMDIwMAorQEAgLTkxLDE0ICs5MSwxNCBAQAorIAlhcmNoPWhwcGEKKyAJQUNfREVGSU5FKFtIUFBBXSwgMSwgW0RlZmluZSBmb3IgdGhlIEhQUEEgYXJjaGl0ZWN0dXJlLl0pCisgCTs7Cistc2gpCistCWFyY2g9c2gKKy0JQUNfREVGSU5FKFtTSF0sIDEsIFtEZWZpbmUgZm9yIHRoZSBTSCBhcmNoaXRlY3R1cmUuXSkKKy0JOzsKKyBzaDY0KQorIAlhcmNoPXNoNjQKKyAJQUNfREVGSU5FKFtTSDY0XSwgMSwgW0RlZmluZSBmb3IgdGhlIFNINjQgYXJjaGl0ZWN0dXJlLl0pCisgCTs7Cisrc2gqKQorKwlhcmNoPXNoCisrCUFDX0RFRklORShbU0hdLCAxLCBbRGVmaW5lIGZvciB0aGUgU0ggYXJjaGl0ZWN0dXJlLl0pCisrCTs7CisgeDg2PzY0KikKKyAJYXJjaD14ODZfNjQKKyAJQUNfREVGSU5FKFtYODZfNjRdLCAxLCBbRGVmaW5lIGZvciB0aGUgQU1EIHg4Ni02NCBhcmNoaXRlY3R1cmUuXSkKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE2LzE2MC11bmRlZi1DVExfUFJPQy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE2LzE2MC11bmRlZi1DVExfUFJPQy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJkNzhjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTYvMTYwLXVuZGVmLUNUTF9QUk9DLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK2RpZmYgLWR1ciBzdHJhY2UtNC41LjE2Lm9yaWcvc3lzdGVtLmMgc3RyYWNlLTQuNS4xNi9zeXN0ZW0uYworLS0tIHN0cmFjZS00LjUuMTYub3JpZy9zeXN0ZW0uYwkyMDA3LTAxLTE3IDAwOjIyOjM2LjAwMDAwMDAwMCArMDEwMAorKysrIHN0cmFjZS00LjUuMTYvc3lzdGVtLmMJMjAwNy0wNy0xNCAxOToyODo0MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNjEyLDcgKzE2MTIsOSBAQAorIAl7IENUTF9LRVJOLCAiQ1RMX0tFUk4iIH0sCisgCXsgQ1RMX1ZNLCAiQ1RMX1ZNIiB9LAorIAl7IENUTF9ORVQsICJDVExfTkVUIiB9LAorKyNpZmRlZiBDVExfUFJPQworIAl7IENUTF9QUk9DLCAiQ1RMX1BST0MiIH0sCisrI2VuZGlmCisgCXsgQ1RMX0ZTLCAiQ1RMX0ZTIiB9LAorIAl7IENUTF9ERUJVRywgIkNUTF9ERUJVRyIgfSwKKyAJeyBDVExfREVWLCAiQ1RMX0RFViIgfSwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE2LzE3MC11bmRlZi1QQUNLRVRfTUVNQkVSU0hJUC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE2LzE3MC11bmRlZi1QQUNLRVRfTUVNQkVSU0hJUC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDk4ZjgwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTYvMTcwLXVuZGVmLVBBQ0tFVF9NRU1CRVJTSElQLnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKK2RpZmYgLWR1ciBzdHJhY2UtNC41LjE2Lm9yaWcvbmV0LmMgc3RyYWNlLTQuNS4xNi9uZXQuYworLS0tIHN0cmFjZS00LjUuMTYub3JpZy9uZXQuYwkyMDA2LTEyLTEzIDIwOjU3OjIzLjAwMDAwMDAwMCArMDEwMAorKysrIHN0cmFjZS00LjUuMTYvbmV0LmMJMjAwNy0wNy0xNCAxOToyOTozNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC04MDAsOCArODAwLDEyIEBACisKKyAjaWZkZWYgU09MX1BBQ0tFVAorIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeGxhdCBzb2NrcGFja2V0b3B0aW9uc1tdID0geworKyNpZiBkZWZpbmVkKFBBQ0tFVF9BRERfTUVNQkVSU0hJUCkKKyAJeyBQQUNLRVRfQUREX01FTUJFUlNISVAsCSJQQUNLRVRfQUREX01FTUJFUlNISVAiCX0sCisrI2VuZGlmCisrI2lmIGRlZmluZWQoUEFDS0VUX0RST1BfTUVNQkVSU0hJUCkKKyAJeyBQQUNLRVRfRFJPUF9NRU1CRVJTSElQLAkiUEFDS0VUX0RST1BfTUVNQkVSU0hJUCJ9LAorKyNlbmRpZgorICNpZiBkZWZpbmVkKFBBQ0tFVF9SRUNWX09VVFBVVCkKKyAJeyBQQUNLRVRfUkVDVl9PVVRQVVQsCQkiUEFDS0VUX1JFQ1ZfT1VUUFVUIgl9LAorICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTYvMTgwLXVuZGVmLXN5c2NhbGwucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNi8xODAtdW5kZWYtc3lzY2FsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTk0NDI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTYvMTgwLXVuZGVmLXN5c2NhbGwucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorZGlmZiAtZHVyIHN0cmFjZS00LjUuMTYub3JpZy9saW51eC9zeXNjYWxsZW50Lmggc3RyYWNlLTQuNS4xNi9saW51eC9zeXNjYWxsZW50LmgKKy0tLSBzdHJhY2UtNC41LjE2Lm9yaWcvbGludXgvc3lzY2FsbGVudC5oCTIwMDYtMTAtMTYgMDM6MTc6NTIuMDAwMDAwMDAwICswMjAwCisrKysgc3RyYWNlLTQuNS4xNi9saW51eC9zeXNjYWxsZW50LmgJMjAwNy0wNy0xNCAxOTozMDoxNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMzAsNyArMTMwLDExIEBACisgCXsgMiwJVEYsCXN5c19zdGF0ZnMsCQkic3RhdGZzIgl9LCAvKiA5OSAqLworIAl7IDIsCVRELAlzeXNfZnN0YXRmcywJCSJmc3RhdGZzIgl9LCAvKiAxMDAgKi8KKyAJeyAzLAkwLAlzeXNfaW9wZXJtLAkJImlvcGVybSIJfSwgLyogMTAxICovCistCXsgMiwJVEQsCXN5c19zb2NrZXRjYWxsLAkJInNvY2tldGNhbGwiLCBTWVNfc29ja2V0Y2FsbCB9LCAvKiAxMDIgKi8KKysJeyAyLAlURCwJc3lzX3NvY2tldGNhbGwsCQkic29ja2V0Y2FsbCIKKysjaWZkZWYgX19OUl9zb2NrZXRjYWxsCisrCSAgICAsIFNZU19zb2NrZXRjYWxsCisrI2VuZGlmCisrCQkJCQkJCQl9LCAvKiAxMDIgKi8KKyAJeyAzLAkwLAlzeXNfc3lzbG9nLAkJInN5c2xvZyIJfSwgLyogMTAzICovCisgCXsgMywJMCwJc3lzX3NldGl0aW1lciwJCSJzZXRpdGltZXIiCX0sIC8qIDEwNCAqLworIAl7IDIsCTAsCXN5c19nZXRpdGltZXIsCQkiZ2V0aXRpbWVyIgl9LCAvKiAxMDUgKi8KK0BAIC0xNDUsNyArMTQ5LDExIEBACisgCXsgNCwJVFAsCXN5c193YWl0NCwJCSJ3YWl0NCIsIFNZU193YWl0NCB9LCAvKiAxMTQgKi8KKyAJeyAxLAkwLAlzeXNfc3dhcG9mZiwJCSJzd2Fwb2ZmIgl9LCAvKiAxMTUgKi8KKyAJeyAxLAkwLAlzeXNfc3lzaW5mbywJCSJzeXNpbmZvIgl9LCAvKiAxMTYgKi8KKy0JeyA2LAkwLAlzeXNfaXBjLAkJImlwYyIsIFNZU19pcGMgfSwgLyogMTE3ICovCisrCXsgNiwJMCwJc3lzX2lwYywJCSJpcGMiCisrI2lmZGVmIF9fTlJfaXBjCisrCSAgICAsIFNZU19pcGMKKysjZW5kaWYKKysJCQkJCQkJCX0sIC8qIDExNyAqLworIAl7IDEsCVRELAlzeXNfZnN5bmMsCQkiZnN5bmMiCQl9LCAvKiAxMTggKi8KKyAJeyAxLAlUUywJc3lzX3NpZ3JldHVybiwJCSJzaWdyZXR1cm4iCX0sIC8qIDExOSAqLworIAl7IDUsCVRQLAlzeXNfY2xvbmUsCQkiY2xvbmUiLCBTWVNfY2xvbmUgfSwgLyogMTIwICovCitAQCAtMjgyLDcgKzI5MCwxMSBAQAorIAl7IDMsCTAsCXN5c19pb19jYW5jZWwsCQkiaW9fY2FuY2VsIgl9LCAvKiAyNDkgKi8KKyAJeyA1LAkwLAlzeXNfZmFkdmlzZTY0LAkJImZhZHZpc2U2NCIJfSwgLyogMjUwICovCisgCXsgNSwJMCwJcHJpbnRhcmdzLAkJIlNZU18yNTEiCX0sIC8qIDI1MSAqLworLQl7IDEsCVRQLAlzeXNfZXhpdCwJCSJleGl0X2dyb3VwIiwgX19OUl9leGl0X2dyb3VwIH0sIC8qIDI1MiAqLworKwl7IDEsCVRQLAlzeXNfZXhpdCwJCSJleGl0X2dyb3VwIgorKyNpZmRlZiBfX05SX2V4aXRfZ3JvdXAKKysJICAgICwgX19OUl9leGl0X2dyb3VwCisrI2VuZGlmCisrCQkJCQkJCQl9LCAvKiAyNTIgKi8KKyAJeyA0LAkwLAlwcmludGFyZ3MsCQkibG9va3VwX2Rjb29raWUifSwgLyogMjUzICovCisgCXsgMSwJMCwJc3lzX2Vwb2xsX2NyZWF0ZSwJImVwb2xsX2NyZWF0ZSIJfSwgLyogMjU0ICovCisgCXsgNCwJVEQsCXN5c19lcG9sbF9jdGwsCQkiZXBvbGxfY3RsIgl9LCAvKiAyNTUgKi8KK2RpZmYgLWR1ciBzdHJhY2UtNC41LjE2Lm9yaWcvc3lzY2FsbC5jIHN0cmFjZS00LjUuMTYvc3lzY2FsbC5jCistLS0gc3RyYWNlLTQuNS4xNi5vcmlnL3N5c2NhbGwuYwkyMDA3LTA3LTE0IDE5OjIyOjQ5LjAwMDAwMDAwMCArMDIwMAorKysrIHN0cmFjZS00LjUuMTYvc3lzY2FsbC5jCTIwMDctMDctMTQgMTk6MzA6MTYuMDAwMDAwMDAwICswMjAwCitAQCAtMjM4MywxNCArMjM4MywxOCBAQAorIAlzd2l0Y2ggKGtub3duX3Njbm8odGNwKSkgeworICNpZmRlZiBMSU5VWAorICNpZiAhZGVmaW5lZCAoQUxQSEEpICYmICFkZWZpbmVkKFNQQVJDKSAmJiAhZGVmaW5lZChTUEFSQzY0KSAmJiAhZGVmaW5lZChNSVBTKSAmJiAhZGVmaW5lZChIUFBBKQorKyNpZmRlZiBfX05SX3NvY2tldGNhbGwKKyAJY2FzZSBTWVNfc29ja2V0Y2FsbDoKKyAJCWRlY29kZV9zdWJjYWxsKHRjcCwgU1lTX3NvY2tldF9zdWJjYWxsLAorIAkJCVNZU19zb2NrZXRfbnN1YmNhbGxzLCBkZXJlZl9zdHlsZSk7CisgCQlicmVhazsKKysjZW5kaWYKKysjaWZkZWYgX19OUl9pcGMKKyAJY2FzZSBTWVNfaXBjOgorIAkJZGVjb2RlX3N1YmNhbGwodGNwLCBTWVNfaXBjX3N1YmNhbGwsCisgCQkJU1lTX2lwY19uc3ViY2FsbHMsIHNoaWZ0X3N0eWxlKTsKKyAJCWJyZWFrOworKyNlbmRpZgorICNlbmRpZiAvKiAhQUxQSEEgJiYgIU1JUFMgJiYgIVNQQVJDICYmICFTUEFSQzY0ICYmICFIUFBBICovCisgI2lmIGRlZmluZWQgKFNQQVJDKSB8fCBkZWZpbmVkIChTUEFSQzY0KQorIAljYXNlIFNZU19zb2NrZXRjYWxsOgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTcvMTAwLWF1dG9yZWNvbmYucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNy8xMDAtYXV0b3JlY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjI4ZDMyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTcvMTAwLWF1dG9yZWNvbmYucGF0Y2gKQEAgLTAsMCArMSw4MSBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IC4uLy4uL2Rldi9jcm9zc3Rvb2wtTkcvY3QtbmcudHJ1bmsvcGF0Y2hlcy9zdHJhY2UvNC41LjE3LzEwMC1hdXRvcmVjb25mLnBhdGNoCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK2RpZmYgLWR1ciBzdHJhY2UtNC41LjE2Lm9yaWcvY29uZmlndXJlIHN0cmFjZS00LjUuMTYvY29uZmlndXJlCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCitkaWZmIC1kdXJOIHN0cmFjZS00LjUuMTcub3JpZy9jb25maWd1cmUgc3RyYWNlLTQuNS4xNy9jb25maWd1cmUKKy0tLSBzdHJhY2UtNC41LjE3Lm9yaWcvY29uZmlndXJlCTIwMDgtMDctMjIgMDI6NDM6MjEuMDAwMDAwMDAwICswMjAwCisrKysgc3RyYWNlLTQuNS4xNy9jb25maWd1cmUJMjAwOC0xMC0yNCAyMTozMDoxMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC01ODA4LDYgKzU4MDgsNzMgQEAKKyAKKyBmaQorIAorK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RhdGZzNjQgaW4gc3lzLyhzdGF0ZnN8dmZzKS5oIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdGF0ZnM2NCBpbiBzeXMvKHN0YXRmc3x2ZnMpLmguLi4gJEVDSE9fQyIgPiY2CisraWYgdGVzdCAiJHthY19jdl90eXBlX3N0YXRmczY0K3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2lmZGVmIExJTlVYCisrI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KKysjZWxzZQorKyNpbmNsdWRlIDxzeXMvdmZzLmg+CisrI2VuZGlmCisraW50CisrbWFpbiAoKQorK3sKKytzdHJ1Y3Qgc3RhdGZzNjQgc3Q7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorKyAgYWNfY3ZfdHlwZV9zdGF0ZnM2ND15ZXMKKytlbHNlCisrICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKythY19jdl90eXBlX3N0YXRmczY0PW5vCisrZmkKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKysKKytlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9zdGF0ZnM2NCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfc3RhdGZzNjQiID4mNgorK2lmIHRlc3QgIiRhY19jdl90eXBlX3N0YXRmczY0IiA9IHllcworK3RoZW4KKysKKytjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9TVEFURlM2NCAxCisrX0FDRU9GCisrCisrZmkKKysKKyAKKyB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzLi4uICRFQ0hPX0MiID4mNjsgfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTcvMTEwLWRvbnQtdXNlLVJFR19TWVNDQUxMLWZvci1zaC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE3LzExMC1kb250LXVzZS1SRUdfU1lTQ0FMTC1mb3Itc2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMxMDc2NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE3LzExMC1kb250LXVzZS1SRUdfU1lTQ0FMTC1mb3Itc2gucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IC4uLy4uL2Rldi9jcm9zc3Rvb2wtTkcvY3QtbmcudHJ1bmsvcGF0Y2hlcy9zdHJhY2UvNC41LjE3LzExMC1kb250LXVzZS1SRUdfU1lTQ0FMTC1mb3Itc2gucGF0Y2gKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorZGlmZiAtZHVyIHN0cmFjZS00LjUuMTYub3JpZy9wcm9jZXNzLmMgc3RyYWNlLTQuNS4xNi9wcm9jZXNzLmMKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KK2RpZmYgLWR1ck4gc3RyYWNlLTQuNS4xNy5vcmlnL3Byb2Nlc3MuYyBzdHJhY2UtNC41LjE3L3Byb2Nlc3MuYworLS0tIHN0cmFjZS00LjUuMTcub3JpZy9wcm9jZXNzLmMJMjAwOC0wNy0xOCAwNDoxNjo0Ny4wMDAwMDAwMDAgKzAyMDAKKysrKyBzdHJhY2UtNC41LjE3L3Byb2Nlc3MuYwkyMDA4LTEwLTI0IDIxOjMwOjEzLjAwMDAwMDAwMCArMDIwMAorQEAgLTI3MjYsNyArMjcyNiw2IEBACisgICAgICAgIHsgNCpSRUdfR0JSLCAgICAgICAgICAgICI0KlJFR19HQlIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICB7IDQqUkVHX01BQ0gsICAgICAgICAgICAiNCpSRUdfTUFDSCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgeyA0KlJFR19NQUNMLCAgICAgICAgICAgIjQqUkVHX01BQ0wiICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCistICAgICAgIHsgNCpSRUdfU1lTQ0FMTCwgICAgICAgICI0KlJFR19TWVNDQUxMIiAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICB7IDQqUkVHX0ZQVUwsICAgICAgICAgICAiNCpSRUdfRlBVTCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgeyA0KlJFR19GUFJFRzAsICAgICAgICAgIjQqUkVHX0ZQUkVHMCIgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgIHsgNCooUkVHX0ZQUkVHMCsxKSwgICAgICI0KlJFR19GUFJFRzEiICAgICAgICAgICAgICAgICAgICAgICAgICB9LApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTcvMTIwLWZpeC1hcm0tYmFkLXN5c2NhbGwucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNy8xMjAtZml4LWFybS1iYWQtc3lzY2FsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWVjYWVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTcvMTIwLWZpeC1hcm0tYmFkLXN5c2NhbGwucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IC4uLy4uL2Rldi9jcm9zc3Rvb2wtTkcvY3QtbmcudHJ1bmsvcGF0Y2hlcy9zdHJhY2UvNC41LjE3LzEyMC1maXgtYXJtLWJhZC1zeXNjYWxsLnBhdGNoCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK2RpZmYgLWR1ciBzdHJhY2UtNC41LjE2Lm9yaWcvc3lzY2FsbC5jIHN0cmFjZS00LjUuMTYvc3lzY2FsbC5jCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCitkaWZmIC1kdXJOIHN0cmFjZS00LjUuMTcub3JpZy9zeXNjYWxsLmMgc3RyYWNlLTQuNS4xNy9zeXNjYWxsLmMKKy0tLSBzdHJhY2UtNC41LjE3Lm9yaWcvc3lzY2FsbC5jCTIwMDgtMDUtMjggMDE6MTg6MjkuMDAwMDAwMDAwICswMjAwCisrKysgc3RyYWNlLTQuNS4xNy9zeXNjYWxsLmMJMjAwOC0xMC0yNCAyMTozMDoxMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMDE2LDYgKzEwMTYsMTUgQEAKKyAJCS8qCisgCQkgKiBOb3RlOiB3ZSBvbmx5IGRlYWwgd2l0aCBvbmx5IDMyLWJpdCBDUFVzIGhlcmUuCisgCQkgKi8KKysKKysJCWlmICghKHRjcC0+ZmxhZ3MgJiBUQ0JfSU5TWVNDQUxMKSAmJgorKwkJICAgICh0Y3AtPmZsYWdzICYgVENCX1dBSVRFWEVDVkUpKSB7CisrCQkJLyogY2F1Z2h0IGEgZmFrZSBzeXNjYWxsIGZyb20gdGhlIGV4ZWN2ZSdzIGV4aXQgKi8KKysJCQl0Y3AtPmZsYWdzICY9IH5UQ0JfV0FJVEVYRUNWRTsKKysJCQlyZXR1cm4gMDsKKysJCX0KKysKKysKKyAJCWlmIChyZWdzLkFSTV9jcHNyICYgMHgyMCkgeworIAkJCS8qCisgCQkJICogR2V0IHRoZSBUaHVtYi1tb2RlIHN5c3RlbSBjYWxsIG51bWJlcgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTcvMTMwLWZpeC1kaXNhYmxlZC1sYXJnZWZpbGUtc3lzY2FsbHMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNy8xMzAtZml4LWRpc2FibGVkLWxhcmdlZmlsZS1zeXNjYWxscy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjM4MDhlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTcvMTMwLWZpeC1kaXNhYmxlZC1sYXJnZWZpbGUtc3lzY2FsbHMucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IC4uLy4uL2Rldi9jcm9zc3Rvb2wtTkcvY3QtbmcudHJ1bmsvcGF0Y2hlcy9zdHJhY2UvNC41LjE3LzEzMC1maXgtZGlzYWJsZWQtbGFyZ2VmaWxlLXN5c2NhbGxzLnBhdGNoCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK2RpZmYgLWR1ciBzdHJhY2UtNC41LjE2Lm9yaWcvc3lzY2FsbC5jIHN0cmFjZS00LjUuMTYvc3lzY2FsbC5jCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCitkaWZmIC1kdXJOIHN0cmFjZS00LjUuMTcub3JpZy9zeXNjYWxsLmMgc3RyYWNlLTQuNS4xNy9zeXNjYWxsLmMKKy0tLSBzdHJhY2UtNC41LjE3Lm9yaWcvc3lzY2FsbC5jCTIwMDgtMTAtMjQgMjE6MzA6MTMuMDAwMDAwMDAwICswMjAwCisrKysgc3RyYWNlLTQuNS4xNy9zeXNjYWxsLmMJMjAwOC0xMC0yNCAyMTozMDoxMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMjUsNiArMTI1LDE4IEBACisgI2RlZmluZSBUUCBUUkFDRV9QUk9DRVNTCisgI2RlZmluZSBUUyBUUkFDRV9TSUdOQUwKKyAKKysjaWZuZGVmIEhBVkVfU1RBVEZTNjQKKysvKgorKyAqIFVnbHkgaGFja3MgZm9yIHN5c3RlbXMgdGhhdCBkbyBub3QgaGF2ZSBMRlMKKysgKi8KKysKKysjZGVmaW5lIHN5c190cnVuY2F0ZTY0ICBzeXNfdHJ1bmNhdGUKKysjZGVmaW5lIHN5c19mdHJ1bmNhdGU2NCBzeXNfZnRydW5jYXRlCisrI2RlZmluZSBzeXNfZ2V0ZGVudHM2NCAgc3lzX2dldGRlbnRzCisrI2RlZmluZSBzeXNfc3RhdGZzNjQgICAgc3lzX3N0YXRmcworKyNkZWZpbmUgc3lzX2ZzdGF0ZnM2NCAgIHN5c19mc3RhdGZzCisrI2VuZGlmCisrCisgc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNlbnQgc3lzZW50MFtdID0geworICNpbmNsdWRlICJzeXNjYWxsZW50LmgiCisgfTsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE3LzE0MC1zdGF0ZnM2NC1jaGVjay5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE3LzE0MC1zdGF0ZnM2NC1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmEwODI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTcvMTQwLXN0YXRmczY0LWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK09yaWdpbmFsIHBhdGNoIGZyb20gZ2VudG9vOiAuLi8uLi9kZXYvY3Jvc3N0b29sLU5HL2N0LW5nLnRydW5rL3BhdGNoZXMvc3RyYWNlLzQuNS4xNy8xNDAtc3RhdGZzNjQtY2hlY2sucGF0Y2gKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorZGlmZiAtZHVyIHN0cmFjZS00LjUuMTYub3JpZy9hY2luY2x1ZGUubTQgc3RyYWNlLTQuNS4xNi9hY2luY2x1ZGUubTQKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KK2RpZmYgLWR1ck4gc3RyYWNlLTQuNS4xNy5vcmlnL2FjaW5jbHVkZS5tNCBzdHJhY2UtNC41LjE3L2FjaW5jbHVkZS5tNAorLS0tIHN0cmFjZS00LjUuMTcub3JpZy9hY2luY2x1ZGUubTQJMjAwNC0wNC0xNCAwNDoyMTowMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBzdHJhY2UtNC41LjE3L2FjaW5jbHVkZS5tNAkyMDA4LTEwLTI0IDIxOjMwOjEzLjAwMDAwMDAwMCArMDIwMAorQEAgLTIxMCw2ICsyMTAsMjYgQEAKKyBmaQorIF0pCisgCisrZG5sICMjIyBBIG1hY3JvIHRvIGRldGVybWluZSB3aGV0aGVyIHN0YXRmczY0IGlzIGRlZmluZWQuCisrQUNfREVGVU4oW0FDX1NUQVRGUzY0XSwKKytbQUNfTVNHX0NIRUNLSU5HKGZvciBzdGF0ZnM2NCBpbiBzeXMvKHN0YXRmc3x2ZnMpLmgpCisrQUNfQ0FDSEVfVkFMKGFjX2N2X3R5cGVfc3RhdGZzNjQsCisrW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaWZkZWYgTElOVVgKKysjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKysjaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgorKyNlbHNlCisrI2luY2x1ZGUgPHN5cy92ZnMuaD4KKysjZW5kaWZdXSwgW1tzdHJ1Y3Qgc3RhdGZzNjQgc3Q7XV0pXSxbYWNfY3ZfdHlwZV9zdGF0ZnM2ND15ZXNdLFthY19jdl90eXBlX3N0YXRmczY0PW5vXSldKQorK0FDX01TR19SRVNVTFQoJGFjX2N2X3R5cGVfc3RhdGZzNjQpCisraWYgdGVzdCAiJGFjX2N2X3R5cGVfc3RhdGZzNjQiID0geWVzCisrdGhlbgorKwlBQ19ERUZJTkUoW0hBVkVfU1RBVEZTNjRdLCAxLAorK1tEZWZpbmUgaWYgc3RhdGZzNjQgaXMgYXZhaWxhYmxlIGluIHN5cy9zdGF0ZnMuaCBvciBzeXMvdmZzLmguXSkKKytmaQorK10pCisrCisrCisrCisgZG5sICMjIyBBIG1hY3JvIHRvIGRldGVybWluZSBpZiBvZmZfdCBpcyBhIGxvbmcgbG9uZworIEFDX0RFRlVOKFtBQ19PRkZfVF9JU19MT05HX0xPTkddLAorIFtBQ19NU0dfQ0hFQ0tJTkcoZm9yIGxvbmcgbG9uZyBvZmZfdCkKK2RpZmYgLWR1ck4gc3RyYWNlLTQuNS4xNy5vcmlnL2NvbmZpZ3VyZS5hYyBzdHJhY2UtNC41LjE3L2NvbmZpZ3VyZS5hYworLS0tIHN0cmFjZS00LjUuMTcub3JpZy9jb25maWd1cmUuYWMJMjAwOC0wNy0yMiAwMjo0MjoyOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBzdHJhY2UtNC41LjE3L2NvbmZpZ3VyZS5hYwkyMDA4LTEwLTI0IDIxOjMwOjEzLjAwMDAwMDAwMCArMDIwMAorQEAgLTE2OSw2ICsxNjksNyBAQAorIAkJICBzdHJ1Y3Qgc3RhdC5zdF9sZXZlbCwKKyAJCSAgc3RydWN0IHN0YXQuc3RfcmRldl0pCisgQUNfU1RBVDY0CisrQUNfU1RBVEZTNjQKKyAKKyBBQ19UWVBFX1NJR05BTAorIEFDX1RZUEVfVUlEX1QKK2RpZmYgLWR1ck4gc3RyYWNlLTQuNS4xNy5vcmlnL2ZpbGUuYyBzdHJhY2UtNC41LjE3L2ZpbGUuYworLS0tIHN0cmFjZS00LjUuMTcub3JpZy9maWxlLmMJMjAwOC0wNS0yMCAwNjo1NjoxOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBzdHJhY2UtNC41LjE3L2ZpbGUuYwkyMDA4LTEwLTI0IDIxOjMwOjEzLjAwMDAwMDAwMCArMDIwMAorQEAgLTE3MDMsNyArMTcwMyw3IEBACisgCXJldHVybiAwOworIH0KKyAKKy0jaWZkZWYgTElOVVgKKysjaWZkZWYgSEFWRV9TVEFURlM2NAorIHN0YXRpYyB2b2lkCisgcHJpbnRzdGF0ZnM2NCh0Y3AsIGFkZHIpCisgc3RydWN0IHRjYiAqdGNwOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTcvMTUwLXVuZGVmLUNUTF9QUk9DLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTcvMTUwLXVuZGVmLUNUTF9QUk9DLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZTgxNmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNy8xNTAtdW5kZWYtQ1RMX1BST0MucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbSBnZW50b286IC4uLy4uL2Rldi9jcm9zc3Rvb2wtTkcvY3QtbmcudHJ1bmsvcGF0Y2hlcy9zdHJhY2UvNC41LjE3LzE1MC11bmRlZi1DVExfUFJPQy5wYXRjaAorLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitkaWZmIC1kdXIgc3RyYWNlLTQuNS4xNi5vcmlnL3N5c3RlbS5jIHN0cmFjZS00LjUuMTYvc3lzdGVtLmMKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KK2RpZmYgLWR1ck4gc3RyYWNlLTQuNS4xNy5vcmlnL3N5c3RlbS5jIHN0cmFjZS00LjUuMTcvc3lzdGVtLmMKKy0tLSBzdHJhY2UtNC41LjE3Lm9yaWcvc3lzdGVtLmMJMjAwNy0wMS0xNyAwMDoyMjozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBzdHJhY2UtNC41LjE3L3N5c3RlbS5jCTIwMDgtMTAtMjQgMjE6MzA6MTMuMDAwMDAwMDAwICswMjAwCitAQCAtMTYxMiw3ICsxNjEyLDkgQEAKKyAJeyBDVExfS0VSTiwgIkNUTF9LRVJOIiB9LAorIAl7IENUTF9WTSwgIkNUTF9WTSIgfSwKKyAJeyBDVExfTkVULCAiQ1RMX05FVCIgfSwKKysjaWZkZWYgQ1RMX1BST0MKKyAJeyBDVExfUFJPQywgIkNUTF9QUk9DIiB9LAorKyNlbmRpZgorIAl7IENUTF9GUywgIkNUTF9GUyIgfSwKKyAJeyBDVExfREVCVUcsICJDVExfREVCVUciIH0sCisgCXsgQ1RMX0RFViwgIkNUTF9ERVYiIH0sCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNy8xNjAtdW5kZWYtc3lzY2FsbC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE3LzE2MC11bmRlZi1zeXNjYWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkOGViZDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNy8xNjAtdW5kZWYtc3lzY2FsbC5wYXRjaApAQCAtMCwwICsxLDY4IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogLi4vLi4vZGV2L2Nyb3NzdG9vbC1ORy9jdC1uZy50cnVuay9wYXRjaGVzL3N0cmFjZS80LjUuMTcvMTYwLXVuZGVmLXN5c2NhbGwucGF0Y2gKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorZGlmZiAtZHVyIHN0cmFjZS00LjUuMTYub3JpZy9saW51eC9zeXNjYWxsZW50Lmggc3RyYWNlLTQuNS4xNi9saW51eC9zeXNjYWxsZW50LmgKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KK2RpZmYgLWR1ck4gc3RyYWNlLTQuNS4xNy5vcmlnL2xpbnV4L3N5c2NhbGxlbnQuaCBzdHJhY2UtNC41LjE3L2xpbnV4L3N5c2NhbGxlbnQuaAorLS0tIHN0cmFjZS00LjUuMTcub3JpZy9saW51eC9zeXNjYWxsZW50LmgJMjAwOC0wNy0xOCAwMzoyMzo0OS4wMDAwMDAwMDAgKzAyMDAKKysrKyBzdHJhY2UtNC41LjE3L2xpbnV4L3N5c2NhbGxlbnQuaAkyMDA4LTEwLTI0IDIxOjMwOjEzLjAwMDAwMDAwMCArMDIwMAorQEAgLTEzMCw3ICsxMzAsMTEgQEAKKyAJeyAyLAlURiwJc3lzX3N0YXRmcywJCSJzdGF0ZnMiCX0sIC8qIDk5ICovCisgCXsgMiwJVEQsCXN5c19mc3RhdGZzLAkJImZzdGF0ZnMiCX0sIC8qIDEwMCAqLworIAl7IDMsCTAsCXN5c19pb3Blcm0sCQkiaW9wZXJtIgl9LCAvKiAxMDEgKi8KKy0JeyAyLAlURCwJc3lzX3NvY2tldGNhbGwsCQkic29ja2V0Y2FsbCIsIFNZU19zb2NrZXRjYWxsIH0sIC8qIDEwMiAqLworKwl7IDIsCVRELAlzeXNfc29ja2V0Y2FsbCwJCSJzb2NrZXRjYWxsIgorKyNpZmRlZiBfX05SX3NvY2tldGNhbGwKKysJICAgICwgU1lTX3NvY2tldGNhbGwKKysjZW5kaWYKKysJCQkJCQkJCX0sIC8qIDEwMiAqLworIAl7IDMsCTAsCXN5c19zeXNsb2csCQkic3lzbG9nIgl9LCAvKiAxMDMgKi8KKyAJeyAzLAkwLAlzeXNfc2V0aXRpbWVyLAkJInNldGl0aW1lciIJfSwgLyogMTA0ICovCisgCXsgMiwJMCwJc3lzX2dldGl0aW1lciwJCSJnZXRpdGltZXIiCX0sIC8qIDEwNSAqLworQEAgLTE0NSw3ICsxNDksMTEgQEAKKyAJeyA0LAlUUCwJc3lzX3dhaXQ0LAkJIndhaXQ0IiwgU1lTX3dhaXQ0IH0sIC8qIDExNCAqLworIAl7IDEsCTAsCXN5c19zd2Fwb2ZmLAkJInN3YXBvZmYiCX0sIC8qIDExNSAqLworIAl7IDEsCTAsCXN5c19zeXNpbmZvLAkJInN5c2luZm8iCX0sIC8qIDExNiAqLworLQl7IDYsCTAsCXN5c19pcGMsCQkiaXBjIiwgU1lTX2lwYyB9LCAvKiAxMTcgKi8KKysJeyA2LAkwLAlzeXNfaXBjLAkJImlwYyIKKysjaWZkZWYgX19OUl9pcGMKKysJICAgICwgU1lTX2lwYworKyNlbmRpZgorKwkJCQkJCQkJfSwgLyogMTE3ICovCisgCXsgMSwJVEQsCXN5c19mc3luYywJCSJmc3luYyIJCX0sIC8qIDExOCAqLworIAl7IDEsCVRTLAlzeXNfc2lncmV0dXJuLAkJInNpZ3JldHVybiIJfSwgLyogMTE5ICovCisgCXsgNSwJVFAsCXN5c19jbG9uZSwJCSJjbG9uZSIsIFNZU19jbG9uZSB9LCAvKiAxMjAgKi8KK0BAIC0yODIsNyArMjkwLDExIEBACisgCXsgMywJMCwJc3lzX2lvX2NhbmNlbCwJCSJpb19jYW5jZWwiCX0sIC8qIDI0OSAqLworIAl7IDUsCTAsCXN5c19mYWR2aXNlNjQsCQkiZmFkdmlzZTY0Igl9LCAvKiAyNTAgKi8KKyAJeyA1LAkwLAlwcmludGFyZ3MsCQkiU1lTXzI1MSIJfSwgLyogMjUxICovCistCXsgMSwJVFAsCXN5c19leGl0LAkJImV4aXRfZ3JvdXAiLCBfX05SX2V4aXRfZ3JvdXAgfSwgLyogMjUyICovCisrCXsgMSwJVFAsCXN5c19leGl0LAkJImV4aXRfZ3JvdXAiCisrI2lmZGVmIF9fTlJfZXhpdF9ncm91cAorKwkgICAgLCBfX05SX2V4aXRfZ3JvdXAKKysjZW5kaWYKKysJCQkJCQkJCX0sIC8qIDI1MiAqLworIAl7IDQsCTAsCXByaW50YXJncywJCSJsb29rdXBfZGNvb2tpZSJ9LCAvKiAyNTMgKi8KKyAJeyAxLAkwLAlzeXNfZXBvbGxfY3JlYXRlLAkiZXBvbGxfY3JlYXRlIgl9LCAvKiAyNTQgKi8KKyAJeyA0LAlURCwJc3lzX2Vwb2xsX2N0bCwJCSJlcG9sbF9jdGwiCX0sIC8qIDI1NSAqLworZGlmZiAtZHVyTiBzdHJhY2UtNC41LjE3Lm9yaWcvc3lzY2FsbC5jIHN0cmFjZS00LjUuMTcvc3lzY2FsbC5jCistLS0gc3RyYWNlLTQuNS4xNy5vcmlnL3N5c2NhbGwuYwkyMDA4LTEwLTI0IDIxOjMwOjEzLjAwMDAwMDAwMCArMDIwMAorKysrIHN0cmFjZS00LjUuMTcvc3lzY2FsbC5jCTIwMDgtMTAtMjQgMjE6MzA6MTMuMDAwMDAwMDAwICswMjAwCitAQCAtMjQ1MiwxNCArMjQ1MiwxOCBAQAorIAlzd2l0Y2ggKGtub3duX3Njbm8odGNwKSkgeworICNpZmRlZiBMSU5VWAorICNpZiAhZGVmaW5lZCAoQUxQSEEpICYmICFkZWZpbmVkKE1JUFMpICYmICFkZWZpbmVkKEhQUEEpCisrI2lmZGVmIF9fTlJfc29ja2V0Y2FsbAorIAljYXNlIFNZU19zb2NrZXRjYWxsOgorIAkJZGVjb2RlX3N1YmNhbGwodGNwLCBTWVNfc29ja2V0X3N1YmNhbGwsCisgCQkJU1lTX3NvY2tldF9uc3ViY2FsbHMsIGRlcmVmX3N0eWxlKTsKKyAJCWJyZWFrOworKyNlbmRpZgorKyNpZmRlZiBfX05SX2lwYworIAljYXNlIFNZU19pcGM6CisgCQlkZWNvZGVfc3ViY2FsbCh0Y3AsIFNZU19pcGNfc3ViY2FsbCwKKyAJCQlTWVNfaXBjX25zdWJjYWxscywgc2hpZnRfc3R5bGUpOworIAkJYnJlYWs7CisrI2VuZGlmCisgI2VuZGlmIC8qICEoQUxQSEEgfHwgTUlQUyB8fCBIUFBBKSAqLworICNlbmRpZiAvKiBMSU5VWCAqLworICNpZmRlZiBTVlI0CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNy8xNzAtYXJtLXN5c2NhbGxzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTcvMTcwLWFybS1zeXNjYWxscy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2FmODBkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTcvMTcwLWFybS1zeXNjYWxscy5wYXRjaApAQCAtMCwwICsxLDQyIEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIGdlbnRvbzogLi4vLi4vZGV2L2Nyb3NzdG9vbC1ORy9jdC1uZy50cnVuay9wYXRjaGVzL3N0cmFjZS80LjUuMTcvMTcwLWFybS1zeXNjYWxscy5wYXRjaAorLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitBdXRob3I6IE1pY2hhZWwgQWJib3R0IDxtaWNoYWVsLmFiYm90dEBkaWFtb25kLmFjLnVrPgorRGF0ZTogICBXZWQgT2N0IDIyIDA4OjUzOjQyIDIwMDggKzAxMDAKKworICAgIFN5c2NhbGwgcGF0Y2ggZm9yIEFSTQorICAgIFBhdGNoIG1haWxlZCB0byBzdHJhY2UgbWFpbGluZyBsaXN0IGJ5IEFuZGVyc29uIExpemFyZG8sIHdvcmsgYnkKKyAgICBCcnVuYSBNb3JlaXJhLCBkYXRlZCAyMDA4LTAxLTI1LiAgUGF0Y2ggY2xlYW5lZCB1cCBhZ2FpbnN0IDQuNS4xNyByZWxlYXNlLgorCitkaWZmIC0tZ2l0IGEvbGludXgvYXJtL2Vycm5vZW50MS5oIGIvbGludXgvYXJtL2Vycm5vZW50MS5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYTg5NDgyNworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorZGlmZiAtZHVyTiBiL2xpbnV4L2FybS9lcnJub2VudDEuaCBiL2xpbnV4L2FybS9lcnJub2VudDEuaAorLS0tIGIvbGludXgvYXJtL2Vycm5vZW50MS5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYi9saW51eC9hcm0vZXJybm9lbnQxLmgJMjAwOC0xMC0yNCAyMTozMDoxMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMiBAQAorKy8qIE91ciBzZWNvbmQgc2V0IGNvbWVzIGZyb20gdGhlIGkzODYgZmlsZXMuICAqLworKyNpbmNsdWRlICIuLi9lcnJub2VudC5oIgorZGlmZiAtZHVyTiBiL2xpbnV4L2FybS9pb2N0bGVudDEuaCBiL2xpbnV4L2FybS9pb2N0bGVudDEuaAorLS0tIGIvbGludXgvYXJtL2lvY3RsZW50MS5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYi9saW51eC9hcm0vaW9jdGxlbnQxLmgJMjAwOC0xMC0yNCAyMTozMDoxMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMiBAQAorKy8qIE91ciBzZWNvbmQgc2V0IGNvbWVzIGZyb20gdGhlIGkzODYgZmlsZXMuICAqLworKyNpbmNsdWRlICIuLi9pb2N0bGVudC5oIgorZGlmZiAtZHVyTiBiL2xpbnV4L2FybS9zaWduYWxlbnQxLmggYi9saW51eC9hcm0vc2lnbmFsZW50MS5oCistLS0gYi9saW51eC9hcm0vc2lnbmFsZW50MS5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYi9saW51eC9hcm0vc2lnbmFsZW50MS5oCTIwMDgtMTAtMjQgMjE6MzA6MTMuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDIgQEAKKysvKiBPdXIgc2Vjb25kIHNldCBjb21lcyBmcm9tIHRoZSBpMzg2IGZpbGVzLiAgKi8KKysjaW5jbHVkZSAiLi4vc2lnbmFsZW50LmgiCitkaWZmIC1kdXJOIGIvbGludXgvYXJtL3N5c2NhbGxlbnQxLmggYi9saW51eC9hcm0vc3lzY2FsbGVudDEuaAorLS0tIGIvbGludXgvYXJtL3N5c2NhbGxlbnQxLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBiL2xpbnV4L2FybS9zeXNjYWxsZW50MS5oCTIwMDgtMTAtMjQgMjE6MzA6MTMuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDcgQEAKKysvKiBBUk0gc3BlY2lmaWMgc3lzY2FsbHMgKi8KKysJeyA1LAkwLAlwcmludGFyZ3MsCQkiU1lTXzAiCQkJfSwgLyogMCAqLworKwl7IDUsCTAsCXByaW50YXJncywJCSJicmVha3BvaW50IgkJfSwgLyogMSAqLworKwl7IDUsCTAsCXByaW50YXJncywJCSJjYWNoZWZsdXNoIgkJfSwgLyogMiAqLworKwl7IDUsCTAsCXByaW50YXJncywJCSJ1c3IyNiIJCQl9LCAvKiAzICovCisrCXsgNSwJMCwJcHJpbnRhcmdzLAkJInVzcjMyIgkJCX0sIC8qIDQgKi8KKysJeyA1LAkwLAlwcmludGFyZ3MsCQkic2V0X3RscyIJCX0sIC8qIDUgKi8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE3LzE4MC1ub19jYWNoZWN0bC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE3LzE4MC1ub19jYWNoZWN0bC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmU5NDZiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTcvMTgwLW5vX2NhY2hlY3RsLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1RoaXMgcGF0Y2ggaXMgbmVlZGVkIG9uIG5ld2VyIHVjbGliYyBiZWN1YXNlIHRoZSB1Y2xpYmMgaGVhZGVyIGdlbmVyYXRpb24KK21lY2hhbmlzbSBnZW5lcmF0ZXMgdGhlIHN5c251bS5oIHByb3Blcmx5IE5SX2NhY2hlZmx1c2ggaXMgZGVmaW5lZCBmb3IgQVJNCitidXQgdGhlcmUgaXMgbm8gY2FjaGVjdGwuaCBmaWxlIHdoaWNoIGlzIGV4cG9ydGVkIHRvIHVzZXJzcGFjZS4gU3RyYWNlIAorYXNzdW1lcyB0aGF0IGlmIFNZU19jYWNoZWZsdXNoIGlzIGRlZmluZWQgdGhhbiBpdCBpY2x1ZGVzIGFzbS9jYWNoZWN0bC5oCit3aGljaCBicmVha3MgdGhlIGJ1aWxkIGZvciBBUk0gbm93LgorCitUaGlzIHBhdGNoIGFkZHMgYSBjaGVjayBmb3IgQVJNIGFyY2hpdGVjdHVyZS4KKworLUtoZW0KKworSGVyZSBpcyBlcnJvcgorCit8IGlmIGNjYWNoZSBhcm0tYW5nc3Ryb20tbGludXgtdWNsaWJjZ251ZWFiaS1nY2MgLW1hcmNoPWFybXY1dGUgLW10dW5lPWFybTkyNmVqLXMgLURIQVZFX0NPTkZJR19IIC1JLiAtSS4gLUkuIC1JbGludXgvYXJtIC1JLi9saW51eC9hcm0gLUlsaW51eCAtSS4vbGludXggIC1pc3lzdGVtL2hvbWUva3Jhai93b3JrL29lL2J1aWxkL3VjbGliYy90bXAtb21hcDU5MTJvc2svc3RhZ2luZy9hcm0tYW5nc3Ryb20tbGludXgtdWNsaWJjZ251ZWFiaS91c3IvaW5jbHVkZSAtV2FsbCAtaXN5c3RlbS9ob21lL2tyYWovd29yay9vZS9idWlsZC91Y2xpYmMvdG1wLW9tYXA1OTEyb3NrL3N0YWdpbmcvYXJtLWFuZ3N0cm9tLWxpbnV4LXVjbGliY2dudWVhYmkvdXNyL2luY2x1ZGUgLWZleHBlbnNpdmUtb3B0aW1pemF0aW9ucyAtZm9taXQtZnJhbWUtcG9pbnRlciAtZnJlbmFtZS1yZWdpc3RlcnMgLU9zIC1NVCB0ZXJtLm8gLU1EIC1NUCAtTUYgIi5kZXBzL3Rlcm0uVHBvIiAtYyAtbyB0ZXJtLm8gdGVybS5jOyBcCit8ICAgdGhlbiBtdiAtZiAiLmRlcHMvdGVybS5UcG8iICIuZGVwcy90ZXJtLlBvIjsgZWxzZSBybSAtZiAiLmRlcHMvdGVybS5UcG8iOyBleGl0IDE7IGZpCit8IHN5c3RlbS5jOjY5OjI2OiBlcnJvcjogYXNtL2NhY2hlY3RsLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK3wgbWFrZVsxXTogKioqIFtzeXN0ZW0ub10gRXJyb3IgMQorfCBtYWtlWzFdOiAqKiogV2FpdGluZyBmb3IgdW5maW5pc2hlZCBqb2JzLi4uLgorfCBzaWduYWwuYzogSW4gZnVuY3Rpb24gJ3N5c19zaWdyZXR1cm4nOgorfCBzaWduYWwuYzoxMjIxOiB3YXJuaW5nOiBwYXNzaW5nIGFyZ3VtZW50IDQgb2YgJ3B0cmFjZScgbWFrZXMgaW50ZWdlciBmcm9tIHBvaW50ZXIgd2l0aG91dCBhIGNhc3QKK3wgbWFrZVsxXTogTGVhdmluZyBkaXJlY3RvcnkgYC9ob21lL2tyYWovd29yay9vZS9idWlsZC91Y2xpYmMvdG1wLW9tYXA1OTEyb3NrL3dvcmsvYXJtdjV0ZS1hbmdzdHJvbS1saW51eC11Y2xpYmNnbnVlYWJpL3N0cmFjZS00LjUuMTQtcjUvc3RyYWNlLTQuNS4xNCcKK3wgbWFrZTogKioqIFthbGxdIEVycm9yIDIKK3wgRkFUQUw6IG9lX3J1bm1ha2UgZmFpbGVkCisKK0luZGV4OiBzdHJhY2UtNC41LjE0L3N5c3RlbS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3RyYWNlLTQuNS4xNC5vcmlnL3N5c3RlbS5jIDIwMDgtMDUtMTUgMjA6MjM6MTYuMDAwMDAwMDAwIC0wNzAwCisrKysgc3RyYWNlLTQuNS4xNC9zeXN0ZW0uYyAgMjAwOC0wNS0xNSAyMDoyNDowMy4wMDAwMDAwMDAgLTA3MDAKK0BAIC03MCw3ICs3MCw3IEBACisgI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KKyAjZW5kaWYKKyAKKy0jaWZkZWYgU1lTX2NhY2hlZmx1c2gKKysjaWYgZGVmaW5lZCBTWVNfY2FjaGVmbHVzaCAmJiAhZGVmaW5lZCBBUk0KKyAjaW5jbHVkZSA8YXNtL2NhY2hlY3RsLmg+CisgI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNy8xOTAtZGlyZW50LWluY2x1ZGUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xNy8xOTAtZGlyZW50LWluY2x1ZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY1OTZlMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE3LzE5MC1kaXJlbnQtaW5jbHVkZS5wYXRjaApAQCAtMCwwICsxLDMzIEBACistLS0gc3RyYWNlLW9yaWcvZmlsZS5jCTIwMDgvMDUvMjAgMDQ6NTY6MTgJMS45MgorKysrIHN0cmFjZS9maWxlLmMJMjAwOC8wOC8wMSAwMToxMzoxMAkxLjkzCitAQCAtMjgsMjEgKzI4LDIyIEBACisgICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgKgorLSAqCSRJZDogZmlsZS5jLHYgMS45MiAyMDA4LzA1LzIwIDA0OjU2OjE4IHJvbGFuZCBFeHAgJAorKyAqCSRJZDogZmlsZS5jLHYgMS45MyAyMDA4LzA4LzAxIDAxOjEzOjEwIHJvbGFuZCBFeHAgJAorICAqLworIAorICNpbmNsdWRlICJkZWZzLmgiCisgCisgI2luY2x1ZGUgPGRpcmVudC5oPgorKworICNpZmRlZiBMSU5VWAorLSNkZWZpbmUgZGlyZW50IGtlcm5lbF9kaXJlbnQKKy0jZGVmaW5lIGRpcmVudDY0IGtlcm5lbF9kaXJlbnQ2NAorLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorLSNpbmNsdWRlIDxsaW51eC9kaXJlbnQuaD4KKy0jdW5kZWYgZGlyZW50CistI3VuZGVmIGRpcmVudDY0Cisrc3RydWN0IGtlcm5lbF9kaXJlbnQgeworKwl1bnNpZ25lZCBsb25nICAgZF9pbm87CisrCXVuc2lnbmVkIGxvbmcgICBkX29mZjsKKysJdW5zaWduZWQgc2hvcnQgIGRfcmVjbGVuOworKwljaGFyICAgICAgICAgICAgZF9uYW1lWzFdOworK307CisgI2Vsc2UKKy0jZGVmaW5lIGtlcm5lbF9kaXJlbnQgZGlyZW50CisrIyBkZWZpbmUga2VybmVsX2RpcmVudCBkaXJlbnQKKyAjZW5kaWYKKyAKKyAjaWZkZWYgTElOVVgKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE4LzEwMC1hdXRvcmVjb25mLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTgvMTAwLWF1dG9yZWNvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY2ZWY0MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE4LzEwMC1hdXRvcmVjb25mLnBhdGNoCkBAIC0wLDAgKzEsNzcgQEAKK2RpZmYgLWR1ciBzdHJhY2UtNC41LjE2Lm9yaWcvY29uZmlndXJlIHN0cmFjZS00LjUuMTYvY29uZmlndXJlCistLS0gc3RyYWNlLTQuNS4xNi5vcmlnL2NvbmZpZ3VyZQkyMDA3LTAxLTExIDIzOjIzOjMzLjAwMDAwMDAwMCArMDEwMAorKysrIHN0cmFjZS00LjUuMTYvY29uZmlndXJlCTIwMDctMDctMTQgMTk6MTg6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtNTgwOCw2ICs1Nzc3LDczIEBACisKKyBmaQorCisrZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdGF0ZnM2NCBpbiBzeXMvKHN0YXRmc3x2ZnMpLmgiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0YXRmczY0IGluIHN5cy8oc3RhdGZzfHZmcykuaC4uLiAkRUNIT19DIiA+JjYKKytpZiB0ZXN0ICIke2FjX2N2X3R5cGVfc3RhdGZzNjQrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaWZkZWYgTElOVVgKKysjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKysjaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgorKyNlbHNlCisrI2luY2x1ZGUgPHN5cy92ZnMuaD4KKysjZW5kaWYKKytpbnQKKyttYWluICgpCisreworK3N0cnVjdCBzdGF0ZnM2NCBzdDsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICBhY19jdl90eXBlX3N0YXRmczY0PXllcworK2Vsc2UKKysgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworK2FjX2N2X3R5cGVfc3RhdGZzNjQ9bm8KKytmaQorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytmaQorKworK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3N0YXRmczY0IiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9zdGF0ZnM2NCIgPiY2CisraWYgdGVzdCAiJGFjX2N2X3R5cGVfc3RhdGZzNjQiID0geWVzCisrdGhlbgorKworK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisrI2RlZmluZSBIQVZFX1NUQVRGUzY0IDEKKytfQUNFT0YKKysKKytmaQorKworCisgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycy4uLiAkRUNIT19DIiA+JjY7IH0KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE4LzExMC1kb250LXVzZS1SRUdfU1lTQ0FMTC1mb3Itc2gucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xOC8xMTAtZG9udC11c2UtUkVHX1NZU0NBTEwtZm9yLXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYmY2OWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xOC8xMTAtZG9udC11c2UtUkVHX1NZU0NBTEwtZm9yLXNoLnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKK2RpZmYgLWR1ciBzdHJhY2UtNC41LjE2Lm9yaWcvcHJvY2Vzcy5jIHN0cmFjZS00LjUuMTYvcHJvY2Vzcy5jCistLS0gc3RyYWNlLTQuNS4xNi5vcmlnL3Byb2Nlc3MuYwkyMDA3LTAxLTExIDIzOjA4OjM4LjAwMDAwMDAwMCArMDEwMAorKysrIHN0cmFjZS00LjUuMTYvcHJvY2Vzcy5jCTIwMDctMDctMTQgMTk6MTk6NTguMDAwMDAwMDAwICswMjAwCitAQCAtMjY4NSw3ICsyNjg1LDYgQEAKKyAgICAgICAgeyA0KlJFR19HQlIsICAgICAgICAgICAgIjQqUkVHX0dCUiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgIHsgNCpSRUdfTUFDSCwgICAgICAgICAgICI0KlJFR19NQUNIIiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICB7IDQqUkVHX01BQ0wsICAgICAgICAgICAiNCpSRUdfTUFDTCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKy0gICAgICAgeyA0KlJFR19TWVNDQUxMLCAgICAgICAgIjQqUkVHX1NZU0NBTEwiICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgIHsgNCpSRUdfRlBVTCwgICAgICAgICAgICI0KlJFR19GUFVMIiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICB7IDQqUkVHX0ZQUkVHMCwgICAgICAgICAiNCpSRUdfRlBSRUcwIiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgeyA0KihSRUdfRlBSRUcwKzEpLCAgICAgIjQqUkVHX0ZQUkVHMSIgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xOC8xMjAtZml4LWFybS1iYWQtc3lzY2FsbC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE4LzEyMC1maXgtYXJtLWJhZC1zeXNjYWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMWI5ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xOC8xMjAtZml4LWFybS1iYWQtc3lzY2FsbC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitkaWZmIC1kdXIgc3RyYWNlLTQuNS4xNi5vcmlnL3N5c2NhbGwuYyBzdHJhY2UtNC41LjE2L3N5c2NhbGwuYworLS0tIHN0cmFjZS00LjUuMTYub3JpZy9zeXNjYWxsLmMJMjAwNi0xMi0yMSAyMzoxMzozMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBzdHJhY2UtNC41LjE2L3N5c2NhbGwuYwkyMDA3LTA3LTE0IDE5OjIxOjQ0LjAwMDAwMDAwMCArMDIwMAorQEAgLTEwNDUsNiArMTA0NSwxNSBAQAorIAkJLyoKKyAJCSAqIE5vdGU6IHdlIG9ubHkgZGVhbCB3aXRoIG9ubHkgMzItYml0IENQVXMgaGVyZS4KKyAJCSAqLworKworKwkJaWYgKCEodGNwLT5mbGFncyAmIFRDQl9JTlNZU0NBTEwpICYmCisrCQkgICAgKHRjcC0+ZmxhZ3MgJiBUQ0JfV0FJVEVYRUNWRSkpIHsKKysJCQkvKiBjYXVnaHQgYSBmYWtlIHN5c2NhbGwgZnJvbSB0aGUgZXhlY3ZlJ3MgZXhpdCAqLworKwkJCXRjcC0+ZmxhZ3MgJj0gflRDQl9XQUlURVhFQ1ZFOworKwkJCXJldHVybiAwOworKwkJfQorKworKworIAkJaWYgKHJlZ3MuQVJNX2Nwc3IgJiAweDIwKSB7CisgCQkJLyoKKyAJCQkgKiBHZXQgdGhlIFRodW1iLW1vZGUgc3lzdGVtIGNhbGwgbnVtYmVyCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xOC8xMzAtZml4LWRpc2FibGVkLWxhcmdlZmlsZS1zeXNjYWxscy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE4LzEzMC1maXgtZGlzYWJsZWQtbGFyZ2VmaWxlLXN5c2NhbGxzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNDdkYzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xOC8xMzAtZml4LWRpc2FibGVkLWxhcmdlZmlsZS1zeXNjYWxscy5wYXRjaApAQCAtMCwwICsxLDIyIEBACitkaWZmIC1kdXIgc3RyYWNlLTQuNS4xNi5vcmlnL3N5c2NhbGwuYyBzdHJhY2UtNC41LjE2L3N5c2NhbGwuYworLS0tIHN0cmFjZS00LjUuMTYub3JpZy9zeXNjYWxsLmMJMjAwNy0wNy0xNCAxOToyMTo0NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBzdHJhY2UtNC41LjE2L3N5c2NhbGwuYwkyMDA3LTA3LTE0IDE5OjIyOjQ5LjAwMDAwMDAwMCArMDIwMAorQEAgLTEyNSw2ICsxMjUsMTggQEAKKyAjZGVmaW5lIFRQIFRSQUNFX1BST0NFU1MKKyAjZGVmaW5lIFRTIFRSQUNFX1NJR05BTAorCisrI2lmbmRlZiBIQVZFX1NUQVRGUzY0CisrLyoKKysgKiBVZ2x5IGhhY2tzIGZvciBzeXN0ZW1zIHRoYXQgZG8gbm90IGhhdmUgTEZTCisrICovCisrCisrI2RlZmluZSBzeXNfdHJ1bmNhdGU2NCAgc3lzX3RydW5jYXRlCisrI2RlZmluZSBzeXNfZnRydW5jYXRlNjQgc3lzX2Z0cnVuY2F0ZQorKyNkZWZpbmUgc3lzX2dldGRlbnRzNjQgIHN5c19nZXRkZW50cworKyNkZWZpbmUgc3lzX3N0YXRmczY0ICAgIHN5c19zdGF0ZnMKKysjZGVmaW5lIHN5c19mc3RhdGZzNjQgICBzeXNfZnN0YXRmcworKyNlbmRpZgorKworIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzZW50IHN5c2VudDBbXSA9IHsKKyAjaW5jbHVkZSAic3lzY2FsbGVudC5oIgorIH07CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xOC8xNDAtc3RhdGZzNjQtY2hlY2sucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xOC8xNDAtc3RhdGZzNjQtY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU4OTY2YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE4LzE0MC1zdGF0ZnM2NC1jaGVjay5wYXRjaApAQCAtMCwwICsxLDUzIEBACitkaWZmIC1kdXIgc3RyYWNlLTQuNS4xNi5vcmlnL2FjaW5jbHVkZS5tNCBzdHJhY2UtNC41LjE2L2FjaW5jbHVkZS5tNAorLS0tIHN0cmFjZS00LjUuMTYub3JpZy9hY2luY2x1ZGUubTQJMjAwNC0wNC0xNCAwNDoyMTowMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBzdHJhY2UtNC41LjE2L2FjaW5jbHVkZS5tNAkyMDA3LTA3LTE0IDE5OjI1OjI1LjAwMDAwMDAwMCArMDIwMAorQEAgLTIxMCw2ICsyMTAsMjYgQEAKKyBmaQorIF0pCisKKytkbmwgIyMjIEEgbWFjcm8gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgc3RhdGZzNjQgaXMgZGVmaW5lZC4KKytBQ19ERUZVTihbQUNfU1RBVEZTNjRdLAorK1tBQ19NU0dfQ0hFQ0tJTkcoZm9yIHN0YXRmczY0IGluIHN5cy8oc3RhdGZzfHZmcykuaCkKKytBQ19DQUNIRV9WQUwoYWNfY3ZfdHlwZV9zdGF0ZnM2NCwKKytbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpZmRlZiBMSU5VWAorKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CisrI2Vsc2UKKysjaW5jbHVkZSA8c3lzL3Zmcy5oPgorKyNlbmRpZl1dLCBbW3N0cnVjdCBzdGF0ZnM2NCBzdDtdXSldLFthY19jdl90eXBlX3N0YXRmczY0PXllc10sW2FjX2N2X3R5cGVfc3RhdGZzNjQ9bm9dKV0pCisrQUNfTVNHX1JFU1VMVCgkYWNfY3ZfdHlwZV9zdGF0ZnM2NCkKKytpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9zdGF0ZnM2NCIgPSB5ZXMKKyt0aGVuCisrCUFDX0RFRklORShbSEFWRV9TVEFURlM2NF0sIDEsCisrW0RlZmluZSBpZiBzdGF0ZnM2NCBpcyBhdmFpbGFibGUgaW4gc3lzL3N0YXRmcy5oIG9yIHN5cy92ZnMuaC5dKQorK2ZpCisrXSkKKysKKysKKysKKyBkbmwgIyMjIEEgbWFjcm8gdG8gZGV0ZXJtaW5lIGlmIG9mZl90IGlzIGEgbG9uZyBsb25nCisgQUNfREVGVU4oW0FDX09GRl9UX0lTX0xPTkdfTE9OR10sCisgW0FDX01TR19DSEVDS0lORyhmb3IgbG9uZyBsb25nIG9mZl90KQorZGlmZiAtZHVyIHN0cmFjZS00LjUuMTYub3JpZy9jb25maWd1cmUuYWMgc3RyYWNlLTQuNS4xNi9jb25maWd1cmUuYWMKKy0tLSBzdHJhY2UtNC41LjE2Lm9yaWcvY29uZmlndXJlLmFjCTIwMDctMDEtMTEgMTI6Mzc6NTUuMDAwMDAwMDAwICswMTAwCisrKysgc3RyYWNlLTQuNS4xNi9jb25maWd1cmUuYWMJMjAwNy0wNy0xNCAxOToyNToyNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNjksNiArMTY5LDcgQEAKKyAJCSAgc3RydWN0IHN0YXQuc3RfbGV2ZWwsCisgCQkgIHN0cnVjdCBzdGF0LnN0X3JkZXZdKQorIEFDX1NUQVQ2NAorK0FDX1NUQVRGUzY0CisKKyBBQ19UWVBFX1NJR05BTAorIEFDX1RZUEVfVUlEX1QKK2RpZmYgLWR1ciBzdHJhY2UtNC41LjE2Lm9yaWcvZmlsZS5jIHN0cmFjZS00LjUuMTYvZmlsZS5jCistLS0gc3RyYWNlLTQuNS4xNi5vcmlnL2ZpbGUuYwkyMDA3LTAxLTE1IDIxOjI1OjUyLjAwMDAwMDAwMCArMDEwMAorKysrIHN0cmFjZS00LjUuMTYvZmlsZS5jCTIwMDctMDctMTQgMTk6MjU6MjUuMDAwMDAwMDAwICswMjAwCitAQCAtMTYzNiw3ICsxNjM2LDcgQEAKKyAJcmV0dXJuIDA7CisgfQorCistI2lmZGVmIExJTlVYCisrI2lmZGVmIEhBVkVfU1RBVEZTNjQKKyBzdGF0aWMgdm9pZAorIHByaW50c3RhdGZzNjQodGNwLCBhZGRyKQorIHN0cnVjdCB0Y2IgKnRjcDsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE4LzE1MC11bmRlZi1DVExfUFJPQy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE4LzE1MC11bmRlZi1DVExfUFJPQy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJkNzhjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTgvMTUwLXVuZGVmLUNUTF9QUk9DLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK2RpZmYgLWR1ciBzdHJhY2UtNC41LjE2Lm9yaWcvc3lzdGVtLmMgc3RyYWNlLTQuNS4xNi9zeXN0ZW0uYworLS0tIHN0cmFjZS00LjUuMTYub3JpZy9zeXN0ZW0uYwkyMDA3LTAxLTE3IDAwOjIyOjM2LjAwMDAwMDAwMCArMDEwMAorKysrIHN0cmFjZS00LjUuMTYvc3lzdGVtLmMJMjAwNy0wNy0xNCAxOToyODo0MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNjEyLDcgKzE2MTIsOSBAQAorIAl7IENUTF9LRVJOLCAiQ1RMX0tFUk4iIH0sCisgCXsgQ1RMX1ZNLCAiQ1RMX1ZNIiB9LAorIAl7IENUTF9ORVQsICJDVExfTkVUIiB9LAorKyNpZmRlZiBDVExfUFJPQworIAl7IENUTF9QUk9DLCAiQ1RMX1BST0MiIH0sCisrI2VuZGlmCisgCXsgQ1RMX0ZTLCAiQ1RMX0ZTIiB9LAorIAl7IENUTF9ERUJVRywgIkNUTF9ERUJVRyIgfSwKKyAJeyBDVExfREVWLCAiQ1RMX0RFViIgfSwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE4LzE2MC11bmRlZi1zeXNjYWxsLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTgvMTYwLXVuZGVmLXN5c2NhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdkY2IwNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE4LzE2MC11bmRlZi1zeXNjYWxsLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK2RpZmYgLWR1ciBzdHJhY2UtNC41LjE2Lm9yaWcvbGludXgvc3lzY2FsbGVudC5oIHN0cmFjZS00LjUuMTYvbGludXgvc3lzY2FsbGVudC5oCistLS0gc3RyYWNlLTQuNS4xNi5vcmlnL2xpbnV4L3N5c2NhbGxlbnQuaAkyMDA2LTEwLTE2IDAzOjE3OjUyLjAwMDAwMDAwMCArMDIwMAorKysrIHN0cmFjZS00LjUuMTYvbGludXgvc3lzY2FsbGVudC5oCTIwMDctMDctMTQgMTk6MzA6MTYuMDAwMDAwMDAwICswMjAwCitAQCAtMTMwLDcgKzEzMCwxMSBAQAorIAl7IDIsCVRGLAlzeXNfc3RhdGZzLAkJInN0YXRmcyIJfSwgLyogOTkgKi8KKyAJeyAyLAlURCwJc3lzX2ZzdGF0ZnMsCQkiZnN0YXRmcyIJfSwgLyogMTAwICovCisgCXsgMywJMCwJc3lzX2lvcGVybSwJCSJpb3Blcm0iCX0sIC8qIDEwMSAqLworLQl7IDIsCVRELAlzeXNfc29ja2V0Y2FsbCwJCSJzb2NrZXRjYWxsIiwgU1lTX3NvY2tldGNhbGwgfSwgLyogMTAyICovCisrCXsgMiwJVEQsCXN5c19zb2NrZXRjYWxsLAkJInNvY2tldGNhbGwiCisrI2lmZGVmIF9fTlJfc29ja2V0Y2FsbAorKwkgICAgLCBTWVNfc29ja2V0Y2FsbAorKyNlbmRpZgorKwkJCQkJCQkJfSwgLyogMTAyICovCisgCXsgMywJMCwJc3lzX3N5c2xvZywJCSJzeXNsb2ciCX0sIC8qIDEwMyAqLworIAl7IDMsCTAsCXN5c19zZXRpdGltZXIsCQkic2V0aXRpbWVyIgl9LCAvKiAxMDQgKi8KKyAJeyAyLAkwLAlzeXNfZ2V0aXRpbWVyLAkJImdldGl0aW1lciIJfSwgLyogMTA1ICovCitAQCAtMTQ1LDcgKzE0OSwxMSBAQAorIAl7IDQsCVRQLAlzeXNfd2FpdDQsCQkid2FpdDQiLCBTWVNfd2FpdDQgfSwgLyogMTE0ICovCisgCXsgMSwJMCwJc3lzX3N3YXBvZmYsCQkic3dhcG9mZiIJfSwgLyogMTE1ICovCisgCXsgMSwJMCwJc3lzX3N5c2luZm8sCQkic3lzaW5mbyIJfSwgLyogMTE2ICovCistCXsgNiwJMCwJc3lzX2lwYywJCSJpcGMiLCBTWVNfaXBjIH0sIC8qIDExNyAqLworKwl7IDYsCTAsCXN5c19pcGMsCQkiaXBjIgorKyNpZmRlZiBfX05SX2lwYworKwkgICAgLCBTWVNfaXBjCisrI2VuZGlmCisrCQkJCQkJCQl9LCAvKiAxMTcgKi8KKyAJeyAxLAlURCwJc3lzX2ZzeW5jLAkJImZzeW5jIgkJfSwgLyogMTE4ICovCisgCXsgMSwJVFMsCXN5c19zaWdyZXR1cm4sCQkic2lncmV0dXJuIgl9LCAvKiAxMTkgKi8KKyAJeyA1LAlUUCwJc3lzX2Nsb25lLAkJImNsb25lIiwgU1lTX2Nsb25lIH0sIC8qIDEyMCAqLworQEAgLTI4Miw3ICsyOTAsMTEgQEAKKyAJeyAzLAkwLAlzeXNfaW9fY2FuY2VsLAkJImlvX2NhbmNlbCIJfSwgLyogMjQ5ICovCisgCXsgNSwJMCwJc3lzX2ZhZHZpc2U2NCwJCSJmYWR2aXNlNjQiCX0sIC8qIDI1MCAqLworIAl7IDUsCTAsCXByaW50YXJncywJCSJTWVNfMjUxIgl9LCAvKiAyNTEgKi8KKy0JeyAxLAlUUCwJc3lzX2V4aXQsCQkiZXhpdF9ncm91cCIsIF9fTlJfZXhpdF9ncm91cCB9LCAvKiAyNTIgKi8KKysJeyAxLAlUUCwJc3lzX2V4aXQsCQkiZXhpdF9ncm91cCIKKysjaWZkZWYgX19OUl9leGl0X2dyb3VwCisrCSAgICAsIF9fTlJfZXhpdF9ncm91cAorKyNlbmRpZgorKwkJCQkJCQkJfSwgLyogMjUyICovCisgCXsgNCwJMCwJcHJpbnRhcmdzLAkJImxvb2t1cF9kY29va2llIn0sIC8qIDI1MyAqLworIAl7IDEsCTAsCXN5c19lcG9sbF9jcmVhdGUsCSJlcG9sbF9jcmVhdGUiCX0sIC8qIDI1NCAqLworIAl7IDQsCVRELAlzeXNfZXBvbGxfY3RsLAkJImVwb2xsX2N0bCIJfSwgLyogMjU1ICovCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xOC8xNzAtbm9fY2FjaGVjdGwucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xOC8xNzAtbm9fY2FjaGVjdGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThmYWIyMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE4LzE3MC1ub19jYWNoZWN0bC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitUaGlzIHBhdGNoIGlzIG5lZWRlZCBvbiBuZXdlciB1Y2xpYmMgYmVjdWFzZSB0aGUgdWNsaWJjIGhlYWRlciBnZW5lcmF0aW9uCittZWNoYW5pc20gZ2VuZXJhdGVzIHRoZSBzeXNudW0uaCBwcm9wZXJseSBOUl9jYWNoZWZsdXNoIGlzIGRlZmluZWQgZm9yIEFSTQorYnV0IHRoZXJlIGlzIG5vIGNhY2hlY3RsLmggZmlsZSB3aGljaCBpcyBleHBvcnRlZCB0byB1c2Vyc3BhY2UuIFN0cmFjZSAKK2Fzc3VtZXMgdGhhdCBpZiBTWVNfY2FjaGVmbHVzaCBpcyBkZWZpbmVkIHRoYW4gaXQgaWNsdWRlcyBhc20vY2FjaGVjdGwuaAord2hpY2ggYnJlYWtzIHRoZSBidWlsZCBmb3IgQVJNIG5vdy4KKworVGhpcyBwYXRjaCBhZGRzIGEgY2hlY2sgZm9yIEFSTSBhcmNoaXRlY3R1cmUuCisKKy1LaGVtCisKK0hlcmUgaXMgZXJyb3IKKworfCBpZiBjY2FjaGUgYXJtLWFuZ3N0cm9tLWxpbnV4LXVjbGliY2dudWVhYmktZ2NjIC1tYXJjaD1hcm12NXRlIC1tdHVuZT1hcm05MjZlai1zIC1ESEFWRV9DT05GSUdfSCAtSS4gLUkuIC1JLiAtSWxpbnV4L2FybSAtSS4vbGludXgvYXJtIC1JbGludXggLUkuL2xpbnV4ICAtaXN5c3RlbS9ob21lL2tyYWovd29yay9vZS9idWlsZC91Y2xpYmMvdG1wLW9tYXA1OTEyb3NrL3N0YWdpbmcvYXJtLWFuZ3N0cm9tLWxpbnV4LXVjbGliY2dudWVhYmkvdXNyL2luY2x1ZGUgLVdhbGwgLWlzeXN0ZW0vaG9tZS9rcmFqL3dvcmsvb2UvYnVpbGQvdWNsaWJjL3RtcC1vbWFwNTkxMm9zay9zdGFnaW5nL2FybS1hbmdzdHJvbS1saW51eC11Y2xpYmNnbnVlYWJpL3Vzci9pbmNsdWRlIC1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZyZW5hbWUtcmVnaXN0ZXJzIC1PcyAtTVQgdGVybS5vIC1NRCAtTVAgLU1GICIuZGVwcy90ZXJtLlRwbyIgLWMgLW8gdGVybS5vIHRlcm0uYzsgXAorfCAgIHRoZW4gbXYgLWYgIi5kZXBzL3Rlcm0uVHBvIiAiLmRlcHMvdGVybS5QbyI7IGVsc2Ugcm0gLWYgIi5kZXBzL3Rlcm0uVHBvIjsgZXhpdCAxOyBmaQorfCBzeXN0ZW0uYzo2OToyNjogZXJyb3I6IGFzbS9jYWNoZWN0bC5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Cit8IG1ha2VbMV06ICoqKiBbc3lzdGVtLm9dIEVycm9yIDEKK3wgbWFrZVsxXTogKioqIFdhaXRpbmcgZm9yIHVuZmluaXNoZWQgam9icy4uLi4KK3wgc2lnbmFsLmM6IEluIGZ1bmN0aW9uICdzeXNfc2lncmV0dXJuJzoKK3wgc2lnbmFsLmM6MTIyMTogd2FybmluZzogcGFzc2luZyBhcmd1bWVudCA0IG9mICdwdHJhY2UnIG1ha2VzIGludGVnZXIgZnJvbSBwb2ludGVyIHdpdGhvdXQgYSBjYXN0Cit8IG1ha2VbMV06IExlYXZpbmcgZGlyZWN0b3J5IGAvaG9tZS9rcmFqL3dvcmsvb2UvYnVpbGQvdWNsaWJjL3RtcC1vbWFwNTkxMm9zay93b3JrL2FybXY1dGUtYW5nc3Ryb20tbGludXgtdWNsaWJjZ251ZWFiaS9zdHJhY2UtNC41LjE0LXI1L3N0cmFjZS00LjUuMTQnCit8IG1ha2U6ICoqKiBbYWxsXSBFcnJvciAyCit8IEZBVEFMOiBvZV9ydW5tYWtlIGZhaWxlZAorCitJbmRleDogc3RyYWNlLTQuNS4xNC9zeXN0ZW0uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHN0cmFjZS00LjUuMTQub3JpZy9zeXN0ZW0uYyAyMDA4LTA1LTE1IDIwOjIzOjE2LjAwMDAwMDAwMCAtMDcwMAorKysrIHN0cmFjZS00LjUuMTQvc3lzdGVtLmMgIDIwMDgtMDUtMTUgMjA6MjQ6MDMuMDAwMDAwMDAwIC0wNzAwCitAQCAtNjUsNyArNjUsNyBAQAorICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CisgI2VuZGlmCisgCistI2lmZGVmIFNZU19jYWNoZWZsdXNoCisrI2lmIGRlZmluZWQgU1lTX2NhY2hlZmx1c2ggJiYgIWRlZmluZWQgQVJNCisgI2luY2x1ZGUgPGFzbS9jYWNoZWN0bC5oPgorICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTgvMTgwLWFybS1FQUJJLXN5c2NhbGxzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTgvMTgwLWFybS1FQUJJLXN5c2NhbGxzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMjg0NTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xOC8xODAtYXJtLUVBQkktc3lzY2FsbHMucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorUGF0Y2ggZnJvbSB1cHN0cmVhbToKK2h0dHA6Ly9zdHJhY2UuY3ZzLnNvdXJjZWZvcmdlLm5ldC92aWV3dmMvc3RyYWNlL3N0cmFjZS9saW51eC9hcm0vc3lzY2FsbGVudC5oP3IxPTEuMTcmcjI9MS4xOCZzb3J0Ynk9ZmlsZQorCisyMDA4LTExLTEzICBLaXJpbGwgQS4gU2h1dGVtb3YgIDxraXJpbGxAc2h1dGVtb3YubmFtZT4KKworICAgICogbGludXgvYXJtL3N5c2NhbGxlbnQuaDogRml4IGJ1aWxkIG9uIEFSTSBFQUJJIHdoaWNoIGRvZXMgbm90CisgICAgcHJvdmlkZSBzeXNjYWxscyBzb2NrZXRjYWxsIGFuZCBpcGMuCisKKy0tLSBzdHJhY2UtNC41LjE4Lm9yaWcvbGludXgvYXJtL3N5c2NhbGxlbnQuaAkyMDA4LzEyLzI5IDIwOjA0OjE1CTEuMTcKKysrKyBzdHJhY2UtNC41LjE4L2xpbnV4L2FybS9zeXNjYWxsZW50LmgJMjAwOS8wMS8wMSAyMzoyMDozOAkxLjE4CitAQCAtNDMxLDYgKzQzMSw3IEBACisgCXsgNSwJMCwJcHJpbnRhcmdzLAkJIlNZU18zOTgiCX0sIC8qIDM5OCAqLworIAl7IDUsCTAsCXByaW50YXJncywJCSJTWVNfMzk5Igl9LCAvKiAzOTkgKi8KKyAKKysjaWZuZGVmIF9fQVJNX0VBQklfXworICNpZiBTWVNfc29ja2V0X3N1YmNhbGwgIT0gNDAwCisgICNlcnJvciBmaXggbWUKKyAjZW5kaWYKK0BAIC00ODEsMyArNDgyLDQgQEAKKyAJeyA0LAlUSSwJc3lzX3NobWR0LAkJInNobWR0IgkJfSwgLyogNDQwICovCisgCXsgNCwJVEksCXN5c19zaG1nZXQsCQkic2htZ2V0Igl9LCAvKiA0NDEgKi8KKyAJeyA0LAlUSSwJc3lzX3NobWN0bCwJCSJzaG1jdGwiCX0sIC8qIDQ0MiAqLworKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTkvMTAwLWF1dG9yZWNvbmYucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xOS8xMDAtYXV0b3JlY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzk3MmRiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTkvMTAwLWF1dG9yZWNvbmYucGF0Y2gKQEAgLTAsMCArMSw3NyBAQAorZGlmZiAtZHVyTiBzdHJhY2UtNC41LjE5Lm9yaWcvY29uZmlndXJlIHN0cmFjZS00LjUuMTkvY29uZmlndXJlCistLS0gc3RyYWNlLTQuNS4xOS5vcmlnL2NvbmZpZ3VyZQkyMDA5LTEwLTIxIDE5OjQxOjExLjAwMDAwMDAwMCArMDIwMAorKysrIHN0cmFjZS00LjUuMTkvY29uZmlndXJlCTIwMDktMTAtMjggMTg6NDc6MTguMDAwMDAwMDAwICswMTAwCitAQCAtNTc3Myw2ICs1NzczLDczIEBACisgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKytlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0YXRmczY0IGluIHN5cy8oc3RhdGZzfHZmcykuaCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RhdGZzNjQgaW4gc3lzLyhzdGF0ZnN8dmZzKS5oLi4uICRFQ0hPX0MiID4mNgorK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV9zdGF0ZnM2NCtzZXR9IiA9IHNldDsgdGhlbgorKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKytlbHNlCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyNpZmRlZiBMSU5VWAorKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CisrI2Vsc2UKKysjaW5jbHVkZSA8c3lzL3Zmcy5oPgorKyNlbmRpZgorK2ludAorK21haW4gKCkKKyt7Cisrc3RydWN0IHN0YXRmczY0IHN0OworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIGFjX2N2X3R5cGVfc3RhdGZzNjQ9eWVzCisrZWxzZQorKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrYWNfY3ZfdHlwZV9zdGF0ZnM2ND1ubworK2ZpCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2ZpCisrCisrZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfc3RhdGZzNjQiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3N0YXRmczY0IiA+JjYKKytpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9zdGF0ZnM2NCIgPSB5ZXMKKyt0aGVuCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKysjZGVmaW5lIEhBVkVfU1RBVEZTNjQgMQorK19BQ0VPRgorKworK2ZpCisrCisgCisgaW50CisgbWFpbiAoKQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTkvMTEwLWZpeC1hcm0tYmFkLXN5c2NhbGwucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xOS8xMTAtZml4LWFybS1iYWQtc3lzY2FsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2E2MGJhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTkvMTEwLWZpeC1hcm0tYmFkLXN5c2NhbGwucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorZGlmZiAtZHVyTiBzdHJhY2UtNC41LjE5Lm9yaWcvc3lzY2FsbC5jIHN0cmFjZS00LjUuMTkvc3lzY2FsbC5jCistLS0gc3RyYWNlLTQuNS4xOS5vcmlnL3N5c2NhbGwuYwkyMDA5LTEwLTEyIDIxOjU0OjIxLjAwMDAwMDAwMCArMDIwMAorKysrIHN0cmFjZS00LjUuMTkvc3lzY2FsbC5jCTIwMDktMTAtMjggMTg6NDc6MTguMDAwMDAwMDAwICswMTAwCitAQCAtMTAyMiw2ICsxMDIyLDE1IEBACisgCQkvKgorIAkJICogTm90ZTogd2Ugb25seSBkZWFsIHdpdGggb25seSAzMi1iaXQgQ1BVcyBoZXJlLgorIAkJICovCisrCisrCQlpZiAoISh0Y3AtPmZsYWdzICYgVENCX0lOU1lTQ0FMTCkgJiYKKysJCSAgICAodGNwLT5mbGFncyAmIFRDQl9XQUlURVhFQ1ZFKSkgeworKwkJCS8qIGNhdWdodCBhIGZha2Ugc3lzY2FsbCBmcm9tIHRoZSBleGVjdmUncyBleGl0ICovCisrCQkJdGNwLT5mbGFncyAmPSB+VENCX1dBSVRFWEVDVkU7CisrCQkJcmV0dXJuIDA7CisrCQl9CisrCisrCisgCQlpZiAocmVncy5BUk1fY3BzciAmIDB4MjApIHsKKyAJCQkvKgorIAkJCSAqIEdldCB0aGUgVGh1bWItbW9kZSBzeXN0ZW0gY2FsbCBudW1iZXIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE5LzEyMC1maXgtZGlzYWJsZWQtbGFyZ2VmaWxlLXN5c2NhbGxzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTkvMTIwLWZpeC1kaXNhYmxlZC1sYXJnZWZpbGUtc3lzY2FsbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU1NWZjMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE5LzEyMC1maXgtZGlzYWJsZWQtbGFyZ2VmaWxlLXN5c2NhbGxzLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK2RpZmYgLWR1ck4gc3RyYWNlLTQuNS4xOS5vcmlnL3N5c2NhbGwuYyBzdHJhY2UtNC41LjE5L3N5c2NhbGwuYworLS0tIHN0cmFjZS00LjUuMTkub3JpZy9zeXNjYWxsLmMJMjAwOS0xMC0yOCAxODo0NzoxOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBzdHJhY2UtNC41LjE5L3N5c2NhbGwuYwkyMDA5LTEwLTI4IDE4OjQ3OjE4LjAwMDAwMDAwMCArMDEwMAorQEAgLTExMCw2ICsxMTAsMTggQEAKKyAjZGVmaW5lIFRQIFRSQUNFX1BST0NFU1MKKyAjZGVmaW5lIFRTIFRSQUNFX1NJR05BTAorIAorKyNpZm5kZWYgSEFWRV9TVEFURlM2NAorKy8qCisrICogVWdseSBoYWNrcyBmb3Igc3lzdGVtcyB0aGF0IGRvIG5vdCBoYXZlIExGUworKyAqLworKworKyNkZWZpbmUgc3lzX3RydW5jYXRlNjQgIHN5c190cnVuY2F0ZQorKyNkZWZpbmUgc3lzX2Z0cnVuY2F0ZTY0IHN5c19mdHJ1bmNhdGUKKysjZGVmaW5lIHN5c19nZXRkZW50czY0ICBzeXNfZ2V0ZGVudHMKKysjZGVmaW5lIHN5c19zdGF0ZnM2NCAgICBzeXNfc3RhdGZzCisrI2RlZmluZSBzeXNfZnN0YXRmczY0ICAgc3lzX2ZzdGF0ZnMKKysjZW5kaWYKKysKKyBzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2VudCBzeXNlbnQwW10gPSB7CisgI2luY2x1ZGUgInN5c2NhbGxlbnQuaCIKKyB9OwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTkvMTMwLXN0YXRmczY0LWNoZWNrLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTkvMTMwLXN0YXRmczY0LWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NTliZGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xOS8xMzAtc3RhdGZzNjQtY2hlY2sucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorZGlmZiAtZHVyTiBzdHJhY2UtNC41LjE5Lm9yaWcvYWNpbmNsdWRlLm00IHN0cmFjZS00LjUuMTkvYWNpbmNsdWRlLm00CistLS0gc3RyYWNlLTQuNS4xOS5vcmlnL2FjaW5jbHVkZS5tNAkyMDA0LTA0LTE0IDA0OjQ1OjUzLjAwMDAwMDAwMCArMDIwMAorKysrIHN0cmFjZS00LjUuMTkvYWNpbmNsdWRlLm00CTIwMDktMTAtMjggMTg6NDc6MTguMDAwMDAwMDAwICswMTAwCitAQCAtMjEwLDYgKzIxMCwyNiBAQAorIGZpCisgXSkKKyAKKytkbmwgIyMjIEEgbWFjcm8gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgc3RhdGZzNjQgaXMgZGVmaW5lZC4KKytBQ19ERUZVTihbQUNfU1RBVEZTNjRdLAorK1tBQ19NU0dfQ0hFQ0tJTkcoZm9yIHN0YXRmczY0IGluIHN5cy8oc3RhdGZzfHZmcykuaCkKKytBQ19DQUNIRV9WQUwoYWNfY3ZfdHlwZV9zdGF0ZnM2NCwKKytbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpZmRlZiBMSU5VWAorKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CisrI2Vsc2UKKysjaW5jbHVkZSA8c3lzL3Zmcy5oPgorKyNlbmRpZl1dLCBbW3N0cnVjdCBzdGF0ZnM2NCBzdDtdXSldLFthY19jdl90eXBlX3N0YXRmczY0PXllc10sW2FjX2N2X3R5cGVfc3RhdGZzNjQ9bm9dKV0pCisrQUNfTVNHX1JFU1VMVCgkYWNfY3ZfdHlwZV9zdGF0ZnM2NCkKKytpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9zdGF0ZnM2NCIgPSB5ZXMKKyt0aGVuCisrCUFDX0RFRklORShbSEFWRV9TVEFURlM2NF0sIDEsCisrW0RlZmluZSBpZiBzdGF0ZnM2NCBpcyBhdmFpbGFibGUgaW4gc3lzL3N0YXRmcy5oIG9yIHN5cy92ZnMuaC5dKQorK2ZpCisrXSkKKysKKysKKysKKyBkbmwgIyMjIEEgbWFjcm8gdG8gZGV0ZXJtaW5lIGlmIG9mZl90IGlzIGEgbG9uZyBsb25nCisgQUNfREVGVU4oW0FDX09GRl9UX0lTX0xPTkdfTE9OR10sCisgW0FDX01TR19DSEVDS0lORyhmb3IgbG9uZyBsb25nIG9mZl90KQorZGlmZiAtZHVyTiBzdHJhY2UtNC41LjE5Lm9yaWcvY29uZmlndXJlLmFjIHN0cmFjZS00LjUuMTkvY29uZmlndXJlLmFjCistLS0gc3RyYWNlLTQuNS4xOS5vcmlnL2NvbmZpZ3VyZS5hYwkyMDA5LTEwLTEyIDIxOjU0OjQzLjAwMDAwMDAwMCArMDIwMAorKysrIHN0cmFjZS00LjUuMTkvY29uZmlndXJlLmFjCTIwMDktMTAtMjggMTg6NDc6MTguMDAwMDAwMDAwICswMTAwCitAQCAtMTg3LDYgKzE4Nyw3IEBACisgCQkgIHN0cnVjdCBzdGF0LnN0X2xldmVsLAorIAkJICBzdHJ1Y3Qgc3RhdC5zdF9yZGV2XSkKKyBBQ19TVEFUNjQKKytBQ19TVEFURlM2NAorIAorIEFDX1RZUEVfU0lHTkFMCisgQUNfVFlQRV9VSURfVAorZGlmZiAtZHVyTiBzdHJhY2UtNC41LjE5Lm9yaWcvZmlsZS5jIHN0cmFjZS00LjUuMTkvZmlsZS5jCistLS0gc3RyYWNlLTQuNS4xOS5vcmlnL2ZpbGUuYwkyMDA5LTEwLTIxIDE1OjQ0OjA0LjAwMDAwMDAwMCArMDIwMAorKysrIHN0cmFjZS00LjUuMTkvZmlsZS5jCTIwMDktMTAtMjggMTg6NDc6MTguMDAwMDAwMDAwICswMTAwCitAQCAtMTY4OCw3ICsxNjg4LDcgQEAKKyAJcmV0dXJuIDA7CisgfQorIAorLSNpZmRlZiBMSU5VWAorKyNpZmRlZiBIQVZFX1NUQVRGUzY0Cisgc3RhdGljIHZvaWQKKyBwcmludHN0YXRmczY0KHN0cnVjdCB0Y2IgKnRjcCwgbG9uZyBhZGRyKQorIHsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE5LzE0MC11bmRlZi1DVExfUFJPQy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE5LzE0MC11bmRlZi1DVExfUFJPQy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mjg0MzM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3N0cmFjZS80LjUuMTkvMTQwLXVuZGVmLUNUTF9QUk9DLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK2RpZmYgLWR1ck4gc3RyYWNlLTQuNS4xOS5vcmlnL3N5c3RlbS5jIHN0cmFjZS00LjUuMTkvc3lzdGVtLmMKKy0tLSBzdHJhY2UtNC41LjE5Lm9yaWcvc3lzdGVtLmMJMjAwOS0wNi0wMSAxMTo1OToxMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBzdHJhY2UtNC41LjE5L3N5c3RlbS5jCTIwMDktMTAtMjggMTg6NDc6MTguMDAwMDAwMDAwICswMTAwCitAQCAtMTY1NCw3ICsxNjU0LDkgQEAKKyAJeyBDVExfS0VSTiwgIkNUTF9LRVJOIiB9LAorIAl7IENUTF9WTSwgIkNUTF9WTSIgfSwKKyAJeyBDVExfTkVULCAiQ1RMX05FVCIgfSwKKysjaWZkZWYgQ1RMX1BST0MKKyAJeyBDVExfUFJPQywgIkNUTF9QUk9DIiB9LAorKyNlbmRpZgorIAl7IENUTF9GUywgIkNUTF9GUyIgfSwKKyAJeyBDVExfREVCVUcsICJDVExfREVCVUciIH0sCisgCXsgQ1RMX0RFViwgIkNUTF9ERVYiIH0sCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xOS8xNTAtdW5kZWYtc3lzY2FsbC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE5LzE1MC11bmRlZi1zeXNjYWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNjVlMWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xOS8xNTAtdW5kZWYtc3lzY2FsbC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitkaWZmIC1kdXJOIHN0cmFjZS00LjUuMTkub3JpZy9saW51eC9zeXNjYWxsZW50Lmggc3RyYWNlLTQuNS4xOS9saW51eC9zeXNjYWxsZW50LmgKKy0tLSBzdHJhY2UtNC41LjE5Lm9yaWcvbGludXgvc3lzY2FsbGVudC5oCTIwMDktMDktMDEgMjE6NTM6MjkuMDAwMDAwMDAwICswMjAwCisrKysgc3RyYWNlLTQuNS4xOS9saW51eC9zeXNjYWxsZW50LmgJMjAwOS0xMC0yOCAxODo0NzoxOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMzAsNyArMTMwLDExIEBACisgCXsgMiwJVEYsCXN5c19zdGF0ZnMsCQkic3RhdGZzIgl9LCAvKiA5OSAqLworIAl7IDIsCVRELAlzeXNfZnN0YXRmcywJCSJmc3RhdGZzIgl9LCAvKiAxMDAgKi8KKyAJeyAzLAkwLAlzeXNfaW9wZXJtLAkJImlvcGVybSIJfSwgLyogMTAxICovCistCXsgMiwJVEQsCXN5c19zb2NrZXRjYWxsLAkJInNvY2tldGNhbGwiLCBTWVNfc29ja2V0Y2FsbCB9LCAvKiAxMDIgKi8KKysJeyAyLAlURCwJc3lzX3NvY2tldGNhbGwsCQkic29ja2V0Y2FsbCIKKysjaWZkZWYgX19OUl9zb2NrZXRjYWxsCisrCSAgICAsIFNZU19zb2NrZXRjYWxsCisrI2VuZGlmCisrCQkJCQkJCQl9LCAvKiAxMDIgKi8KKyAJeyAzLAkwLAlzeXNfc3lzbG9nLAkJInN5c2xvZyIJfSwgLyogMTAzICovCisgCXsgMywJMCwJc3lzX3NldGl0aW1lciwJCSJzZXRpdGltZXIiCX0sIC8qIDEwNCAqLworIAl7IDIsCTAsCXN5c19nZXRpdGltZXIsCQkiZ2V0aXRpbWVyIgl9LCAvKiAxMDUgKi8KK0BAIC0xNDUsNyArMTQ5LDExIEBACisgCXsgNCwJVFAsCXN5c193YWl0NCwJCSJ3YWl0NCIsIFNZU193YWl0NCB9LCAvKiAxMTQgKi8KKyAJeyAxLAkwLAlzeXNfc3dhcG9mZiwJCSJzd2Fwb2ZmIgl9LCAvKiAxMTUgKi8KKyAJeyAxLAkwLAlzeXNfc3lzaW5mbywJCSJzeXNpbmZvIgl9LCAvKiAxMTYgKi8KKy0JeyA2LAkwLAlzeXNfaXBjLAkJImlwYyIsIFNZU19pcGMgfSwgLyogMTE3ICovCisrCXsgNiwJMCwJc3lzX2lwYywJCSJpcGMiCisrI2lmZGVmIF9fTlJfaXBjCisrCSAgICAsIFNZU19pcGMKKysjZW5kaWYKKysJCQkJCQkJCX0sIC8qIDExNyAqLworIAl7IDEsCVRELAlzeXNfZnN5bmMsCQkiZnN5bmMiCQl9LCAvKiAxMTggKi8KKyAJeyAxLAlUUywJc3lzX3NpZ3JldHVybiwJCSJzaWdyZXR1cm4iCX0sIC8qIDExOSAqLworIAl7IDUsCVRQLAlzeXNfY2xvbmUsCQkiY2xvbmUiLCBTWVNfY2xvbmUgfSwgLyogMTIwICovCitAQCAtMjgyLDcgKzI5MCwxMSBAQAorIAl7IDMsCTAsCXN5c19pb19jYW5jZWwsCQkiaW9fY2FuY2VsIgl9LCAvKiAyNDkgKi8KKyAJeyA1LAkwLAlzeXNfZmFkdmlzZTY0LAkJImZhZHZpc2U2NCIJfSwgLyogMjUwICovCisgCXsgNSwJMCwJcHJpbnRhcmdzLAkJIlNZU18yNTEiCX0sIC8qIDI1MSAqLworLQl7IDEsCVRQLAlzeXNfZXhpdCwJCSJleGl0X2dyb3VwIiwgX19OUl9leGl0X2dyb3VwIH0sIC8qIDI1MiAqLworKwl7IDEsCVRQLAlzeXNfZXhpdCwJCSJleGl0X2dyb3VwIgorKyNpZmRlZiBfX05SX2V4aXRfZ3JvdXAKKysJICAgICwgX19OUl9leGl0X2dyb3VwCisrI2VuZGlmCisrCQkJCQkJCQl9LCAvKiAyNTIgKi8KKyAJeyA0LAkwLAlwcmludGFyZ3MsCQkibG9va3VwX2Rjb29raWUifSwgLyogMjUzICovCisgCXsgMSwJMCwJc3lzX2Vwb2xsX2NyZWF0ZSwJImVwb2xsX2NyZWF0ZSIJfSwgLyogMjU0ICovCisgCXsgNCwJVEQsCXN5c19lcG9sbF9jdGwsCQkiZXBvbGxfY3RsIgl9LCAvKiAyNTUgKi8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE5LzE2MC1maXgtY2hlY2stZm9yLWxpbnV4LW5ldGxpbmsucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xOS8xNjAtZml4LWNoZWNrLWZvci1saW51eC1uZXRsaW5rLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YzZiMmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xOS8xNjAtZml4LWNoZWNrLWZvci1saW51eC1uZXRsaW5rLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK0RtaXRyeSBWLiBMZXZpbiBbVHVlLCAzIE5vdiAyMDA5IDE2OjQ5OjQ5ICswMDAwXQorCitGaXggY2hlY2sgZm9yIGxpbnV4L25ldGxpbmsuaCBvbiBMaW51eCAyLjYuMzItcmM1KworCisqIGNvbmZpZ3VyZS5hYyAoQUNfQ0hFQ0tfSEVBREVSUyk6IEluIGNoZWNrIGZvciBsaW51eC9uZXRsaW5rLmgsIGluY2x1ZGUgCisgIHN5cy9zb2NrZXQuaCBpbnN0ZWFkIG9mIGxpbnV4L3NvY2tldC5oIGJlZm9yZWhhbmQuCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjU4LDcgKzI1OCw3IEBAIEFDX0NIRUNLX0hFQURFUlMoWyBcCisgXSwgW10sIFtdKQorIEFDX0NIRUNLX0hFQURFUlMoW2xpbnV4L2ljbXAuaCBsaW51eC9pbjYuaCBsaW51eC9uZXRsaW5rLmggbGludXgvaWZfcGFja2V0LmhdLAorICAgICAgICAgICAgICAgICAgW10sIFtdLCBbI2luY2x1ZGUgPHN0ZGRlZi5oPgorLSNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD5dKQorKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+XSkKKyBBQ19DSEVDS19IRUFERVJTKFthc20vc2lnY29udGV4dC5oXSwgW10sIFtdLCBbI2luY2x1ZGUgPHNpZ25hbC5oPl0pCisgQUNfQ0hFQ0tfVFlQRVMoW3N0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCwKKyAJCXN0cnVjdCBzaWdjb250ZXh0XSwsLCBbI2luY2x1ZGUgPHNpZ25hbC5oPl0pCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xOS8xNzAtdXBkYXRlLWNvbmZpZ3VyZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy9zdHJhY2UvNC41LjE5LzE3MC11cGRhdGUtY29uZmlndXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmOTA1ODMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvc3RyYWNlLzQuNS4xOS8xNzAtdXBkYXRlLWNvbmZpZ3VyZS5wYXRjaApAQCAtMCwwICsxLDE1OSBAQAorZGlmZiAtcnVOIHN0cmFjZS00LjUuMTkub3JpZy9jb25maWcuaC5pbiBzdHJhY2UtNC41LjE5L2NvbmZpZy5oLmluCistLS0gc3RyYWNlLTQuNS4xOS5vcmlnL2NvbmZpZy5oLmluCTIwMDktMTAtMjEgMTk6NDE6MTIuMDAwMDAwMDAwICswMjAwCisrKysgc3RyYWNlLTQuNS4xOS9jb25maWcuaC5pbgkyMDEwLTAxLTAxIDEwOjM5OjM2LjAwMDAwMDAwMCArMDEwMAorQEAgLTE2MSw2ICsxNjEsOSBAQAorIC8qIERlZmluZSBpZiBzdGF0NjQgaXMgYXZhaWxhYmxlIGluIGFzbS9zdGF0LmguICovCisgI3VuZGVmIEhBVkVfU1RBVDY0CisgCisrLyogRGVmaW5lIGlmIHN0YXRmczY0IGlzIGF2YWlsYWJsZSBpbiBzeXMvc3RhdGZzLmggb3Igc3lzL3Zmcy5oLiAqLworKyN1bmRlZiBIQVZFX1NUQVRGUzY0CisrCisgLyogRGVmaW5lIHRvIDEgaWYgc3RkYm9vbC5oIGNvbmZvcm1zIHRvIEM5OS4gKi8KKyAjdW5kZWYgSEFWRV9TVERCT09MX0gKKyAKK2RpZmYgLXJ1TiBzdHJhY2UtNC41LjE5Lm9yaWcvY29uZmlndXJlIHN0cmFjZS00LjUuMTkvY29uZmlndXJlCistLS0gc3RyYWNlLTQuNS4xOS5vcmlnL2NvbmZpZ3VyZQkyMDEwLTAxLTAxIDEwOjM4OjQ5LjAwMDAwMDAwMCArMDEwMAorKysrIHN0cmFjZS00LjUuMTkvY29uZmlndXJlCTIwMTAtMDEtMDEgMTA6Mzk6MzYuMDAwMDAwMDAwICswMTAwCitAQCAtNTM3NCw2ICs1Mzc0LDQ0IEBACisgCisgZmkKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdGF0ZnM2NCBpbiBzeXMvKHN0YXRmc3x2ZnMpLmgiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdGF0ZnM2NCBpbiBzeXMvKHN0YXRmc3x2ZnMpLmguLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3R5cGVfc3RhdGZzNjQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyNpZmRlZiBMSU5VWAorKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CisrI2Vsc2UKKysjaW5jbHVkZSA8c3lzL3Zmcy5oPgorKyNlbmRpZgorK2ludAorK21haW4gKCkKKyt7Cisrc3RydWN0IHN0YXRmczY0IHN0OworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKysgIGFjX2N2X3R5cGVfc3RhdGZzNjQ9eWVzCisrZWxzZQorKyAgYWNfY3ZfdHlwZV9zdGF0ZnM2ND1ubworK2ZpCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3R5cGVfc3RhdGZzNjQiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfdHlwZV9zdGF0ZnM2NCIgPiY2OyB9CisraWYgdGVzdCAiJGFjX2N2X3R5cGVfc3RhdGZzNjQiID0geWVzCisrdGhlbgorKworKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1RBVEZTNjQgMSIgPj5jb25mZGVmcy5oCisrCisrZmkKKysKKyAKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzLi4uICIgPiY2OyB9CitAQCAtNTc3Myw3MyArNTgxMSw2IEBACisgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0YXRmczY0IGluIHN5cy8oc3RhdGZzfHZmcykuaCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RhdGZzNjQgaW4gc3lzLyhzdGF0ZnN8dmZzKS5oLi4uICRFQ0hPX0MiID4mNgorLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9zdGF0ZnM2NCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpZmRlZiBMSU5VWAorLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorLSNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CistI2Vsc2UKKy0jaW5jbHVkZSA8c3lzL3Zmcy5oPgorLSNlbmRpZgorLWludAorLW1haW4gKCkKKy17Cistc3RydWN0IHN0YXRmczY0IHN0OworLSAgOworLSAgcmV0dXJuIDA7CistfQorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKy0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CistICAoZXZhbCAkYWNfdHJ5KSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCistCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKy0gIChldmFsICRhY190cnkpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKy0gIGFjX2N2X3R5cGVfc3RhdGZzNjQ9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistYWNfY3ZfdHlwZV9zdGF0ZnM2ND1ubworLWZpCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLWZpCistCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfc3RhdGZzNjQiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3N0YXRmczY0IiA+JjYKKy1pZiB0ZXN0ICIkYWNfY3ZfdHlwZV9zdGF0ZnM2NCIgPSB5ZXMKKy10aGVuCistCistY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKy0jZGVmaW5lIEhBVkVfU1RBVEZTNjQgMQorLV9BQ0VPRgorLQorLWZpCistCisgCisgaW50CisgbWFpbiAoKQorQEAgLTU5NDcsNyArNTkxOCw3IEBACisgZG8gOgorICAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiNpbmNsdWRlIDxzdGRkZWYuaD4KKy0jaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisrI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyAiCisgZXZhbCBhc192YWw9XCQkYXNfYWNfSGVhZGVyCisgICAgaWYgdGVzdCAieCRhc192YWwiID0geCIieWVzOyB0aGVuIDoKK2RpZmYgLXJ1TiBzdHJhY2UtNC41LjE5Lm9yaWcvTWFrZWZpbGUuaW4gc3RyYWNlLTQuNS4xOS9NYWtlZmlsZS5pbgorLS0tIHN0cmFjZS00LjUuMTkub3JpZy9NYWtlZmlsZS5pbgkyMDA5LTEwLTIxIDE5OjQxOjE0LjAwMDAwMDAwMCArMDIwMAorKysrIHN0cmFjZS00LjUuMTkvTWFrZWZpbGUuaW4JMjAxMC0wMS0wMSAxMDozOTozNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC00Miw4ICs0Miw5IEBACisgc3ViZGlyID0gLgorIERJU1RfQ09NTU9OID0gUkVBRE1FICQoYW1fX2NvbmZpZ3VyZV9kZXBzKSAkKG5vaW5zdF9IRUFERVJTKSBcCisgCSQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gXAorLQkkKHNyY2RpcikvY29uZmlnLmguaW4gJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgQVVUSE9SUyBJTlNUQUxMIFwKKy0JTkVXUyBUT0RPIGNvbmZpZy5ndWVzcyBjb25maWcuc3ViIGRlcGNvbXAgaW5zdGFsbC1zaCBtaXNzaW5nCisrCSQoc3JjZGlyKS9jb25maWcuaC5pbiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSBBVVRIT1JTIFwKKysJQ2hhbmdlTG9nIElOU1RBTEwgTkVXUyBUT0RPIGNvbmZpZy5ndWVzcyBjb25maWcuc3ViIGRlcGNvbXAgXAorKwlpbnN0YWxsLXNoIG1pc3NpbmcKKyBBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CisgYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvYWNpbmNsdWRlLm00IFwKKyAJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjI4LjMvMTAwLXN0cmluZy1mdW5jdGlvbnMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4yOC4zLzEwMC1zdHJpbmctZnVuY3Rpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNmMyNTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4yOC4zLzEwMC1zdHJpbmctZnVuY3Rpb25zLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK0dpdmUgcHJlZmVyZW5jZSB0byB0YXJnZXQtb3B0aW1pc2VkIGZ1bmN0aW9ucyBvdmVyIGdsaWJjJ3Mgb25lcywKK3doaWNoIGluIHR1cm4gYWhhdmUgcHJlY2VkZW5jZSBvdmVyIGdlbmVyaWMgb25lcy4KKworLS0tIHVDbGliYy5vcmlnL2xpYmMvTWFrZWZpbGUJMjAwNS0wNy0yMCAwODoxMDo0NC4wMDAwMDAwMDAgKzAyMDAKKysrKyB1Y2xpYmMvbGliYy9NYWtlZmlsZQkyMDA1LTA3LTI4IDEzOjMzOjQwLjAwMDAwMDAwMCArMDIwMAorQEAgLTU5LDcgKzU5LDcgQEAKKyAJJChBUikgZE4gMiAkKExJQk5BTUUpICQkb2JqcyAmJiBcCisgCSQoQVIpIGROIDIgJChMSUJOQU1FKSAkJG9ianMKKyAJQGZvciBvYmpmaWxlIGluIG9iai5zaWduYWwgXAorLQkgICAgICAgICAgICAgICAgb2JqLnN0cmluZy5nZW5lcmljIG9iai5zdHJpbmcuJChUQVJHRVRfQVJDSCkgb2JqLnN0cmluZyBcCisrCSAgICAgICAgICAgICAgICBvYmouc3RyaW5nIG9iai5zdHJpbmcuZ2VuZXJpYyBvYmouc3RyaW5nLiQoVEFSR0VUX0FSQ0gpIFwKKyAJICAgICAgICAgICAgICAgIG9iai5zeXNkZXBzLmNvbW1vbiBvYmouc3lzZGVwcy4kKFRBUkdFVF9BUkNIKSA7IGRvIFwKKyAJCWlmIFsgLWUgJCRvYmpmaWxlIF0gOyB0aGVuIFwKKyAJCQllY2hvICQoQVIpICQoQVJGTEFHUykgJChMSUJOQU1FKSAkJG9iamZpbGUgOyBcCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4yOC4zLzExMC1pbnN0YWxsX2Rldi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjI4LjMvMTEwLWluc3RhbGxfZGV2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNDI0NjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4yOC4zLzExMC1pbnN0YWxsX2Rldi5wYXRjaApAQCAtMCwwICsxLDIyIEBACitXZSBrbm93IHRoYXQgdGhlIGtlcm5lbCBoZWFkZXJzIGFyZSBpbiBwbGFjZS4gRG9uJ3QgdHJ5IHRvIGluc3RhbGwgdGhlbS4KKworZGlmZiAtZHVyIHVDbGliYy0wLjkuMjguMS5vcmlnL01ha2VmaWxlIHVDbGliYy0wLjkuMjguMS9NYWtlZmlsZQorLS0tIHVDbGliYy0wLjkuMjguMS5vcmlnL01ha2VmaWxlCTIwMDctMDEtMjggMDY6Mzg6MDAuMDAwMDAwMDAwICswMTAwCisrKysgdUNsaWJjLTAuOS4yOC4xL01ha2VmaWxlCTIwMDctMDEtMjggMTg6NTU6NDYuMDAwMDAwMDAwICswMTAwCitAQCAtMTU4LDEyICsxNTgsMTAgQEAKKyAJJChJTlNUQUxMKSAtZCAkKFBSRUZJWCkkKERFVkVMX1BSRUZJWClsaWIKKyAJJChJTlNUQUxMKSAtZCAkKFBSRUZJWCkkKERFVkVMX1BSRUZJWClpbmNsdWRlCisgCS0kKElOU1RBTEwpIC1tIDY0NCBsaWIvKi5bYW9dICQoUFJFRklYKSQoREVWRUxfUFJFRklYKWxpYi8KKy0JaWYgWyAiJChLRVJORUxfU09VUkNFKSIgPSAiJChERVZFTF9QUkVGSVgpIiBdIDsgdGhlbiBcCistCQlleHRyYV9leGNsdWRlPSItLWV4Y2x1ZGUgaW5jbHVkZS9saW51eCAtLWV4Y2x1ZGUgaW5jbHVkZS9hc20nKiciIDsgXAorLQllbHNlIFwKKy0JCWV4dHJhX2V4Y2x1ZGU9IiIgOyBcCistCWZpIDsgXAorLQl0YXIgLWNoZiAtIGluY2x1ZGUgLS1leGNsdWRlIC5zdm4gLS1leGNsdWRlIENWUyAkJGV4dHJhX2V4Y2x1ZGUgXAorKwlleHRyYV9leGNsdWRlPSItLWV4Y2x1ZGUgaW5jbHVkZS9saW51eCAtLWV4Y2x1ZGUgaW5jbHVkZS9hc20nKiciIDsgXAorKwl0YXIgLWNoZiAtIGluY2x1ZGUgLS1leGNsdWRlIC5zdm4gLS1leGNsdWRlIENWUyBcCisrCSAgICAgICAgICAgICAgICAgICAtLWV4Y2x1ZGUgaW5jbHVkZS9saW51eCAgICAgIFwKKysJICAgICAgICAgICAgICAgICAgIC0tZXhjbHVkZSBpbmNsdWRlL2FzbScqJyAgICAgXAorIAkJfCB0YXIgLXhmIC0gLUMgJChQUkVGSVgpJChERVZFTF9QUkVGSVgpCisgCWVjaG8gJy8qIERvbnQgdXNlIF9zeXNjYWxsIygpIG1hY3JvczsgdXNlIHRoZSBzeXNjYWxsKCkgZnVuY3Rpb24gKi8nID4gXAorIAkJJChQUkVGSVgpJChERVZFTF9QUkVGSVgpaW5jbHVkZS9iaXRzL3N5c2NhbGxzLmgKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjI4LjMvMTIwLW5vX0xGUy1ub19yZWFkYWhlYWQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4yOC4zLzEyMC1ub19MRlMtbm9fcmVhZGFoZWFkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMDU2OGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4yOC4zLzEyMC1ub19MRlMtbm9fcmVhZGFoZWFkLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK2RpZmYgLWR1ciB1Q2xpYmMtMC45LjI4LjEub3JpZy9saWJjL3N5c2RlcHMvbGludXgvY29tbW9uL01ha2VmaWxlIHVDbGliYy0wLjkuMjguMS9saWJjL3N5c2RlcHMvbGludXgvY29tbW9uL01ha2VmaWxlCistLS0gdUNsaWJjLTAuOS4yOC4xLm9yaWcvbGliYy9zeXNkZXBzL2xpbnV4L2NvbW1vbi9NYWtlZmlsZQkyMDA3LTAxLTI2IDAwOjU0OjE5LjAwMDAwMDAwMCArMDEwMAorKysrIHVDbGliYy0wLjkuMjguMS9saWJjL3N5c2RlcHMvbGludXgvY29tbW9uL01ha2VmaWxlCTIwMDctMDItMDEgMDg6NDQ6MzcuMDAwMDAwMDAwICswMTAwCitAQCAtMjUsNiArMjUsMTAgQEAKKyBTUkNTIDo9ICQoZmlsdGVyLW91dCBzYnJrLmMsJChTUkNTKSkKKyBlbmRpZgorIAorK2lmbmVxICgkKHN0cmlwICQoVUNMSUJDX0hBU19MRlMpKSx5KQorK1NSQ1MgOj0gJChmaWx0ZXItb3V0IHJlYWRhaGVhZC5jLCQoU1JDUykpCisrZW5kaWYKKysKKyBpZm5lcSAoJChzdHJpcCAkKFVDTElCQ19IQVNfU1NQKSkseSkKKyBTUkNTIDo9ICQoZmlsdGVyLW91dCBzc3AuYywkKFNSQ1MpKQorIGVuZGlmCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4yOC4zLzEzMC1jdHlwZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjI4LjMvMTMwLWN0eXBlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwN2NjZGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4yOC4zLzEzMC1jdHlwZS5wYXRjaApAQCAtMCwwICsxLDE3IEBACitkaWZmIC11ck4gdUNsaWJjLWRpc3QvbGliYy9zeXNkZXBzL2xpbnV4L2NvbW1vbi9iaXRzL3VDbGliY190b3VwbG93LmggdUNsaWJjL2xpYmMvc3lzZGVwcy9saW51eC9jb21tb24vYml0cy91Q2xpYmNfdG91cGxvdy5oCistLS0gdUNsaWJjLWRpc3QvbGliYy9zeXNkZXBzL2xpbnV4L2NvbW1vbi9iaXRzL3VDbGliY190b3VwbG93LmggICBGcmkgSnVuICAzIDEzOjMwOjI1IDIwMDUKKysrKyB1Q2xpYmMvbGliYy9zeXNkZXBzL2xpbnV4L2NvbW1vbi9iaXRzL3VDbGliY190b3VwbG93LmggICBGcmkgSnVuICAzIDEzOjMwOjM5IDIwMDUKK0BAIC0zNCwxMSArMzQsMTEgQEAKKworIC8qIGdsaWJjIHVzZXMgdGhlIGVxdWl2YWxlbnQgb2YgLSB0eXBlZGVmIF9faW50MzJfdCBfX2N0eXBlX3RvdXBsb3dfdDsgKi8KKworLXR5cGVkZWYgX191aW50MTZfdCBfX2N0eXBlX21hc2tfdDsKKyt0eXBlZGVmIF9fdWludDMyX3QgX19jdHlwZV9tYXNrX3Q7CisKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX0NUWVBFX1NJR05FRF9fCisKKy10eXBlZGVmIF9faW50MTZfdCBfX2N0eXBlX3RvdXBsb3dfdDsKKyt0eXBlZGVmIF9faW50MzJfdCBfX2N0eXBlX3RvdXBsb3dfdDsKKyAjZGVmaW5lIF9fVUNMSUJDX0NUWVBFX0JfVEJMX09GRlNFVCAgICAgICAxMjgKKyAjZGVmaW5lIF9fVUNMSUJDX0NUWVBFX1RPX1RCTF9PRkZTRVQgICAgICAxMjgKKwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMjguMy8xNDAtY3VzdG9tLUlTQS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjI4LjMvMTQwLWN1c3RvbS1JU0EucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNjOWJjYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjI4LjMvMTQwLWN1c3RvbS1JU0EucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorZGlmZiAtZHVyIHVDbGliYy0wLjkuMjgub3JpZy9SdWxlcy5tYWsgdUNsaWJjLTAuOS4yOC9SdWxlcy5tYWsKKy0tLSB1Q2xpYmMtMC45LjI4Lm9yaWcvUnVsZXMubWFrCTIwMDUtMDgtMTggMDA6NDk6NDkuMDAwMDAwMDAwICswMjAwCisrKysgdUNsaWJjLTAuOS4yOC9SdWxlcy5tYWsJMjAwNy0wMS0zMCAxMDo1MzozNC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNjgsNiArMTY4LDcgQEAKKyAJQ1BVX0NGTEFHUy0kKENPTkZJR19NSVBTX0lTQV80KSs9LW1pcHM0IC1tdHVuZT1taXBzNAorIAlDUFVfQ0ZMQUdTLSQoQ09ORklHX01JUFNfSVNBX01JUFMzMikrPS1taXBzMzIgLW10dW5lPW1pcHMzMgorIAlDUFVfQ0ZMQUdTLSQoQ09ORklHX01JUFNfSVNBX01JUFM2NCkrPS1taXBzNjQgLW10dW5lPW1pcHMzMgorKwlDUFVfQ0ZMQUdTLSQoQ09ORklHX01JUFNfSVNBX0NVU1RPTSkrPS1tYXJjaD0kKENPTkZJR19NSVBTX0NQVV9DRkxBR1NfQ1VTVE9NKQorIGVuZGlmCisgCisgaWZlcSAoJChzdHJpcCAkKFRBUkdFVF9BUkNIKSksc2gpCitkaWZmIC1kdXIgdUNsaWJjLTAuOS4yOC5vcmlnL2V4dHJhL0NvbmZpZ3MvQ29uZmlnLm1pcHMgdUNsaWJjLTAuOS4yOC9leHRyYS9Db25maWdzL0NvbmZpZy5taXBzCistLS0gdUNsaWJjLTAuOS4yOC5vcmlnL2V4dHJhL0NvbmZpZ3MvQ29uZmlnLm1pcHMJMjAwNS0wOC0xOCAwMDo0OTo0MS4wMDAwMDAwMDAgKzAyMDAKKysrKyB1Q2xpYmMtMC45LjI4L2V4dHJhL0NvbmZpZ3MvQ29uZmlnLm1pcHMJMjAwNy0wMS0zMCAxMDo1MjoxMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC02Myw0ICs2MywxNiBAQAorIGNvbmZpZyBDT05GSUdfTUlQU19JU0FfTUlQUzY0CisgCWJvb2wgIk1JUFM2NCIKKyAKKytjb25maWcgQ09ORklHX01JUFNfSVNBX0NVU1RPTQorKwlib29sICJDdXN0b20iCisrCisgZW5kY2hvaWNlCisrCisrY29uZmlnIENPTkZJR19NSVBTX0NQVV9DRkxBR1NfQ1VTVE9NCisrCXN0cmluZworKwlwcm9tcHQgIkN1c3RvbiBJU0EiCisrCWRlcGVuZHMgb24gQ09ORklHX01JUFNfSVNBX0NVU1RPTQorKwlkZWZhdWx0ICIiCisrCWhlbHAKKysJICBFbnRlciB5b3VyIGN1c3RvbSBJU0EgaGVyZSAoZWc6IGx4NDE4OSEpLgorKwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMjguMy8xNTAtbWlwcy1hc20uaC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjI4LjMvMTUwLW1pcHMtYXNtLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg1ZmVlZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjI4LjMvMTUwLW1pcHMtYXNtLmgucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorZGlmZiAtZHVyIHVDbGliYy0wLjkuMjguMS5vcmlnL2xpYmMvc3lzZGVwcy9saW51eC9taXBzL2Nsb25lLlMgdUNsaWJjLTAuOS4yOC4xL2xpYmMvc3lzZGVwcy9saW51eC9taXBzL2Nsb25lLlMKKy0tLSB1Q2xpYmMtMC45LjI4LjEub3JpZy9saWJjL3N5c2RlcHMvbGludXgvbWlwcy9jbG9uZS5TCTIwMDctMDItMDcgMTE6MTg6MTIuMDAwMDAwMDAwICswMTAwCisrKysgdUNsaWJjLTAuOS4yOC4xL2xpYmMvc3lzZGVwcy9saW51eC9taXBzL2Nsb25lLlMJMjAwNy0wMi0wNyAxMDo0MTozNC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNCw3ICsyNCw3IEBACisgI2luY2x1ZGUgPHN5cy9yZWdkZWYuaD4KKyAjZGVmaW5lIF9FUlJOT19ICTEKKyAjaW5jbHVkZSA8Yml0cy9lcnJuby5oPgorLSNpbmNsdWRlIDxhc20vYXNtLmg+CisrI2luY2x1ZGUgPHN5cy9hc20uaD4KKyAKKyAvKiBpbnQgY2xvbmUoaW50ICgqZm4pKHZvaWQgKmFyZyksIHZvaWQgKmNoaWxkX3N0YWNrLCBpbnQgZmxhZ3MsIHZvaWQgKmFyZykgKi8KKyAKK2RpZmYgLWR1ciB1Q2xpYmMtMC45LjI4LjEub3JpZy9saWJjL3N5c2RlcHMvbGludXgvbWlwcy9waXBlLlMgdUNsaWJjLTAuOS4yOC4xL2xpYmMvc3lzZGVwcy9saW51eC9taXBzL3BpcGUuUworLS0tIHVDbGliYy0wLjkuMjguMS5vcmlnL2xpYmMvc3lzZGVwcy9saW51eC9taXBzL3BpcGUuUwkyMDA3LTAyLTA3IDExOjE4OjEyLjAwMDAwMDAwMCArMDEwMAorKysrIHVDbGliYy0wLjkuMjguMS9saWJjL3N5c2RlcHMvbGludXgvbWlwcy9waXBlLlMJMjAwNy0wMi0wNyAxMToxNjo1Mi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zLDkgKzMsOSBAQAorIC8qc2VlIHVDbGliYydzIHNoL3BpcGUuYyBhbmQgZ2xpYmMtMi4yLjQncyBtaXBzL3BpcGUuUyAqLworIAorICNpbmNsdWRlIDxmZWF0dXJlcy5oPgorLSNpbmNsdWRlIDxhc20vYXNtLmg+CisrI2luY2x1ZGUgPHN5cy9hc20uaD4KKyAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+CisrI2luY2x1ZGUgPHN5cy9yZWdkZWYuaD4KKyAKKyAgICAgICAgIC5nbG9ibCAgcGlwZQorICAgICAgICAgLmVudCAgICBwaXBlLCAwCitkaWZmIC1kdXIgdUNsaWJjLTAuOS4yOC4xLm9yaWcvbGliYy9zeXNkZXBzL2xpbnV4L21pcHMvc3lzY2FsbC5TIHVDbGliYy0wLjkuMjguMS9saWJjL3N5c2RlcHMvbGludXgvbWlwcy9zeXNjYWxsLlMKKy0tLSB1Q2xpYmMtMC45LjI4LjEub3JpZy9saWJjL3N5c2RlcHMvbGludXgvbWlwcy9zeXNjYWxsLlMJMjAwNy0wMi0wNyAxMToxODoxMi4wMDAwMDAwMDAgKzAxMDAKKysrKyB1Q2xpYmMtMC45LjI4LjEvbGliYy9zeXNkZXBzL2xpbnV4L21pcHMvc3lzY2FsbC5TCTIwMDctMDItMDcgMTE6MTc6MDMuMDAwMDAwMDAwICswMTAwCitAQCAtMTcsOCArMTcsOCBAQAorICAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKyAKKyAjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKy0jaW5jbHVkZSA8YXNtL2FzbS5oPgorLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+CisrI2luY2x1ZGUgPHN5cy9hc20uaD4KKysjaW5jbHVkZSA8c3lzL3JlZ2RlZi5oPgorIAorICNpZmRlZiBfX1BJQ19fCisgCS5vcHRpb24gcGljMgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMjkvMTAwLWZpeC1tbWFwLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMjkvMTAwLWZpeC1tbWFwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NzVlOGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4yOS8xMDAtZml4LW1tYXAucGF0Y2gKQEAgLTAsMCArMSw5MSBAQAorLS0tIHVDbGliYy0wLjkuMjkub29yaWcvdGVzdC9tbWFwL21tYXAyLmMJKHJldmlzaW9uIDApCisrKysgdUNsaWJjLTAuOS4yOS90ZXN0L21tYXAvbW1hcDIuYwkocmV2aXNpb24gMTg2MTYpCitAQCAtMCwwICsxLDQxIEBACisrLyogV2hlbiB0cnlpbmcgdG8gbWFwIC9kZXYvbWVtIHdpdGggb2Zmc2V0IDB4RkZGRkYwMDAgb24gdGhlIEFSTSBwbGF0Zm9ybSwgbW1hcAorKyAqIHJldHVybnMgLUVPVkVSRkxPVy4KKysgKgorKyAqIFNpbmNlIG9mZl90IGlzIGRlZmluZWQgYXMgYSBsb25nIGludCBhbmQgdGhlIHNpZ24gYml0IGlzIHNldCBpbiB0aGUgYWRkcmVzcywKKysgKiB0aGUgc2hpZnQgb3BlcmF0aW9uIHNoaWZ0cyBpbiBvbmVzIGluc3RlYWQgb2YgemVyb2VzCisrICogZnJvbSB0aGUgbGVmdC4gVGhpcyByZXN1bHRzIHRoZSBvZmZzZXQgc2VudCB0byB0aGUga2VybmVsIGZ1bmN0aW9uIGJlY29tZXMKKysgKiAweEZGRkZGRkZGIGluc3RlYWQgb2YgMHgwMDBGRkZGRiB3aXRoIE1NQVAyX1BBR0VfU0hJRlQgc2V0IHRvIDEyLgorKyAqLworKworKyNpbmNsdWRlIDx1bmlzdGQuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxmY250bC5oPgorKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorKworKyNkZWZpbmUgRkFUQUwgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGF0IGxpbmUgJWQsIGZpbGUgJXMgKCVkKSBbJXNdXG4iLCBcCisrICBfX0xJTkVfXywgX19GSUxFX18sIGVycm5vLCBzdHJlcnJvcihlcnJubykpOyBleGl0KDEpOyB9IHdoaWxlKDApCisrCisrI2RlZmluZSBNQVBfU0laRSA0MDk2VUwKKysjZGVmaW5lIE1BUF9NQVNLIChNQVBfU0laRSAtIDEpCisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CisrICAgIHZvaWQqIG1hcF9iYXNlID0gMDsKKysgICAgaW50IGZkOworKyAgICBvZmZfdCB0YXJnZXQgPSAweGZmZmZmMDAwOworKyAgICBpZigoZmQgPSBvcGVuKCIvZGV2L21lbSIsIE9fUkRXUiB8IE9fU1lOQykpID09IC0xKSBGQVRBTDsKKysgICAgcHJpbnRmKCIvZGV2L21lbSBvcGVuZWQuXG4iKTsKKysgICAgZmZsdXNoKHN0ZG91dCk7CisrCisrICAgLyogTWFwIG9uZSBwYWdlICovCisrICAgIG1hcF9iYXNlID0gbW1hcCgwLCBNQVBfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwKKysgICAgICAgICAgICAgICAgICAgICAgICBmZCwgdGFyZ2V0ICYgfk1BUF9NQVNLKTsKKysgICAgaWYobWFwX2Jhc2UgPT0gKHZvaWQgKikgLTEpIEZBVEFMOworKyAgICBwcmludGYoIk1lbW9yeSBtYXBwZWQgYXQgYWRkcmVzcyAlcC5cbiIsIG1hcF9iYXNlKTsKKysgICAgZmZsdXNoKHN0ZG91dCk7CisrICAgIGlmKG11bm1hcChtYXBfYmFzZSwgTUFQX1NJWkUpID09IC0xKSBGQVRBTDsKKysgICAgY2xvc2UoZmQpOworKyAgICByZXR1cm4gMDsKKyt9CistLS0gdUNsaWJjLTAuOS4yOS5vb3JpZy9saWJjL3N5c2RlcHMvbGludXgvYXJtL21tYXAuYwkocmV2aXNpb24gMTg2MTUpCisrKysgdUNsaWJjLTAuOS4yOS9saWJjL3N5c2RlcHMvbGludXgvYXJtL21tYXAuYwkocmV2aXNpb24gMTg2MTYpCitAQCAtMjcsNyArMjcsNiBAQCBfX3B0cl90IG1tYXAoX19wdHJfdCBhZGRyLCBzaXplX3QgbGVuLCBpCisgCisgI2VsaWYgZGVmaW5lZCAgKF9fTlJfbW1hcDIpCisgI2RlZmluZSBfX05SX19tbWFwIF9fTlJfbW1hcDIKKy0KKyAjaWZuZGVmIE1NQVAyX1BBR0VfU0hJRlQKKyAjIGRlZmluZSBNTUFQMl9QQUdFX1NISUZUIDEyCisgI2VuZGlmCitAQCAtMzksOSArMzgsMTcgQEAgX19wdHJfdCBtbWFwKF9fcHRyX3QgYWRkciwgc2l6ZV90IGxlbiwgaQorIHsKKyAgIC8qIGNoZWNrIGlmIG9mZnNldCBpcyBwYWdlIGFsaWduZWQgKi8KKyAgICAgaWYgKG9mZnNldCAmICgoMSA8PCBNTUFQMl9QQUdFX1NISUZUKSAtIDEpKQorKyAgICB7CisrICAgICAgICBfX3NldF9lcnJubyhFSU5WQUwpOworICAgICAgICAgcmV0dXJuIE1BUF9GQUlMRUQ7CisrICAgIH0KKysjaWZkZWYgX19VU0VfRklMRV9PRkZTRVQ2NAorKyAgcmV0dXJuIChfX3B0cl90KSBfbW1hcCAoYWRkciwgbGVuLCBwcm90LCBmbGFncywKKysJCQkJCQkgIGZkLCgoX191X3F1YWRfdCkgb2Zmc2V0ID4+IE1NQVAyX1BBR0VfU0hJRlQpKTsKKysjZWxzZQorICAgcmV0dXJuIChfX3B0cl90KSBfbW1hcCAoYWRkciwgbGVuLCBwcm90LCBmbGFncywKKy0JCQkJCQkgIGZkLChvZmZfdCkgKG9mZnNldCA+PiBNTUFQMl9QQUdFX1NISUZUKSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICBmZCwoKF9fdV9sb25nKSBvZmZzZXQgPj4gTU1BUDJfUEFHRV9TSElGVCkpOworKyNlbmRpZgorIH0KKyAjZWxpZiBkZWZpbmVkIChfX05SX21tYXApCisgIyBkZWZpbmUgX19OUl9fbW1hcCBfX05SX21tYXAKKy0tLSB1Q2xpYmMtMC45LjI5Lm9vcmlnL2xpYmMvc3lzZGVwcy9saW51eC9jb21tb24vbW1hcDY0LmMJKHJldmlzaW9uIDE4NjE1KQorKysrIHVDbGliYy0wLjkuMjkvbGliYy9zeXNkZXBzL2xpbnV4L2NvbW1vbi9tbWFwNjQuYwkocmV2aXNpb24gMTg2MTYpCitAQCAtNTgsOCArNTgsMTMgQEAgX19wdHJfdCBtbWFwNjQoX19wdHJfdCBhZGRyLCBzaXplX3QgbGVuLAorIAkJX19zZXRfZXJybm8oRUlOVkFMKTsKKyAJCXJldHVybiBNQVBfRkFJTEVEOworIAl9CistCistCXJldHVybiBfX3N5c2NhbGxfbW1hcDIoYWRkciwgbGVuLCBwcm90LCBmbGFncywgZmQsIChvZmZfdCkgKG9mZnNldCA+PiBNTUFQMl9QQUdFX1NISUZUKSk7CisrI2lmZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKKysgIHJldHVybiBfX3N5c2NhbGxfbW1hcDIoYWRkciwgbGVuLCBwcm90LCBmbGFncywKKysgICAgICAgICAgICAgICAgICAgICAgICAgZmQsKChfX3VfcXVhZF90KW9mZnNldCA+PiBNTUFQMl9QQUdFX1NISUZUKSk7CisrI2Vsc2UKKysgICByZXR1cm4gX19zeXNjYWxsX21tYXAyKGFkZHIsIGxlbiwgcHJvdCwgZmxhZ3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmZCwoKF9fdV9sb25nKW9mZnNldCA+PiBNTUFQMl9QQUdFX1NISUZUKSk7CisrI2VuZGlmCisgfQorIAorICMgZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjI5LzExMC1jb25kaXRpb25hbC1zY2hlZF9hZmZpbml0eS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjI5LzExMC1jb25kaXRpb25hbC1zY2hlZF9hZmZpbml0eS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDljNDJhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMjkvMTEwLWNvbmRpdGlvbmFsLXNjaGVkX2FmZmluaXR5LnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK2RpZmYgLXVyIHVDbGliYy0wLjkuMjkvbGliYy9zeXNkZXBzL2xpbnV4L2NvbW1vbi9zY2hlZF9nZXRhZmZpbml0eS5jIHVDbGliYy0wLjkuMjktcGF0Y2hlZC9saWJjL3N5c2RlcHMvbGludXgvY29tbW9uL3NjaGVkX2dldGFmZmluaXR5LmMKKy0tLSB1Q2xpYmMtMC45LjI5L2xpYmMvc3lzZGVwcy9saW51eC9jb21tb24vc2NoZWRfZ2V0YWZmaW5pdHkuYwkyMDA3LTAyLTEyIDE2OjUyOjMyLjAwMDAwMDAwMCAtMDYwMAorKysrIHVDbGliYy0wLjkuMjktcGF0Y2hlZC9saWJjL3N5c2RlcHMvbGludXgvY29tbW9uL3NjaGVkX2dldGFmZmluaXR5LmMJMjAwNy0wNS0wOSAxODowNTowOS4zOTc0MTE4MTEgLTA1MDAKK0BAIC0yOSw2ICsyOSw3IEBACisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAKKysjaWZkZWYgX19OUl9zY2hlZF9nZXRhZmZpbml0eQorIGxpYmNfaGlkZGVuX3Byb3RvKG1lbXNldCkKKyAKKyAjZGVmaW5lIF9fTlJfX19zeXNjYWxsX3NjaGVkX2dldGFmZmluaXR5IF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkKK0BAIC00OCw1ICs0OSwxNSBAQAorIAl9CisgCXJldHVybiByZXM7CisgfQorKyNlbHNlCisrLyoKKytpbnQgc2NoZWRfZ2V0YWZmaW5pdHkocGlkX3QgcGlkLCBzaXplX3QgY3B1c2V0c2l6ZSwgY3B1X3NldF90ICpjcHVzZXQpCisreworKwlfX3NldF9lcnJubyhFTk9TWVMpOworKwlyZXR1cm4gLTE7CisrfQorKyovCisgI2VuZGlmCisgI2VuZGlmCisrCisrI2VuZGlmCitkaWZmIC11ciB1Q2xpYmMtMC45LjI5L2xpYmMvc3lzZGVwcy9saW51eC9jb21tb24vc2NoZWRfc2V0YWZmaW5pdHkuYyB1Q2xpYmMtMC45LjI5LXBhdGNoZWQvbGliYy9zeXNkZXBzL2xpbnV4L2NvbW1vbi9zY2hlZF9zZXRhZmZpbml0eS5jCistLS0gdUNsaWJjLTAuOS4yOS9saWJjL3N5c2RlcHMvbGludXgvY29tbW9uL3NjaGVkX3NldGFmZmluaXR5LmMJMjAwNy0wMi0xMiAxNjo1MjozMi4wMDAwMDAwMDAgLTA2MDAKKysrKyB1Q2xpYmMtMC45LjI5LXBhdGNoZWQvbGliYy9zeXNkZXBzL2xpbnV4L2NvbW1vbi9zY2hlZF9zZXRhZmZpbml0eS5jCTIwMDctMDUtMDkgMTg6MDU6MDkuMzk3NDExODExIC0wNTAwCitAQCAtMzEsNiArMzEsNyBAQAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8YWxsb2NhLmg+CisgCisrI2lmZGVmIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkKKyBsaWJjX2hpZGRlbl9wcm90byhnZXRwaWQpCisgCisgI2RlZmluZSBfX05SX19fc3lzY2FsbF9zY2hlZF9zZXRhZmZpbml0eSBfX05SX3NjaGVkX3NldGFmZmluaXR5CitAQCAtNzQsNSArNzUsMTQgQEAKKyAKKyAJcmV0dXJuIElOTElORV9TWVNDQUxMIChzY2hlZF9zZXRhZmZpbml0eSwgMywgcGlkLCBjcHVzZXRzaXplLCBjcHVzZXQpOworIH0KKysjZWxzZQorKy8qCisraW50IHNjaGVkX3NldGFmZmluaXR5KHBpZF90IHBpZCwgc2l6ZV90IGNwdXNldHNpemUsIGNvbnN0IGNwdV9zZXRfdCAqY3B1c2V0KQorK3sKKysJX19zZXRfZXJybm8oRU5PU1lTKTsKKysJcmV0dXJuIC0xOworK30KKysqLworKyNlbmRpZgorICNlbmRpZgorICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMjkvMTIwLWZpeC1pbnRlcm5hbF9mdW5jdGlvbi1kZWZpbml0aW9uLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMjkvMTIwLWZpeC1pbnRlcm5hbF9mdW5jdGlvbi1kZWZpbml0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliODhkODIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4yOS8xMjAtZml4LWludGVybmFsX2Z1bmN0aW9uLWRlZmluaXRpb24ucGF0Y2gKQEAgLTAsMCArMSw1MSBAQAorSW5kZXg6IHVDbGliYy9saWJjL3N5c2RlcHMvbGludXgvaTM4Ni9iaXRzL3VDbGliY19hcmNoX2ZlYXR1cmVzLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1Q2xpYmMvbGliYy9zeXNkZXBzL2xpbnV4L2kzODYvYml0cy91Q2xpYmNfYXJjaF9mZWF0dXJlcy5oCShyZXZpc2lvbiAxODg5OCkKKysrKyB1Q2xpYmMvbGliYy9zeXNkZXBzL2xpbnV4L2kzODYvYml0cy91Q2xpYmNfYXJjaF9mZWF0dXJlcy5oCSh3b3JraW5nIGNvcHkpCitAQCAtNDIsNiArNDIsOCBAQAorIC8qIGRlZmluZSBpZiB0YXJnZXQgc3VwcG9ydHMgSUVFRSBzaWduZWQgemVybyBmbG9hdHMgKi8KKyAjZGVmaW5lIF9fVUNMSUJDX0hBVkVfU0lHTkVEX1pFUk9fXworIAorKyNpZiBkZWZpbmVkIF9MSUJDCisgI2RlZmluZSBpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZV9fICgocmVncGFybSAoMyksIHN0ZGNhbGwpKQorKyNlbmRpZgorIAorICNlbmRpZiAvKiBfQklUU19VQ0xJQkNfQVJDSF9GRUFUVVJFU19IICovCitJbmRleDogdUNsaWJjL2luY2x1ZGUvbGliYy1zeW1ib2xzLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1Q2xpYmMvaW5jbHVkZS9saWJjLXN5bWJvbHMuaAkocmV2aXNpb24gMTg4OTgpCisrKysgdUNsaWJjL2luY2x1ZGUvbGliYy1zeW1ib2xzLmgJKHdvcmtpbmcgY29weSkKK0BAIC0yMiw2ICsyMiwxNiBAQAorICNpZm5kZWYgX0xJQkNfU1lNQk9MU19ICisgI2RlZmluZSBfTElCQ19TWU1CT0xTX0gJMQorIAorKy8qIFRoaXMgaXMgZGVmaW5lZCBmb3IgdGhlIGNvbXBpbGF0aW9uIG9mIGFsbCBDIGxpYnJhcnkgY29kZS4gIGZlYXR1cmVzLmgKKysgICB0ZXN0cyB0aGlzIHRvIGF2b2lkIGluY2x1c2lvbiBvZiBzdHVicy5oIHdoaWxlIGNvbXBpbGluZyB0aGUgbGlicmFyeSwKKysgICBiZWZvcmUgc3R1YnMuaCBoYXMgYmVlbiBnZW5lcmF0ZWQuICBTb21lIGxpYnJhcnkgY29kZSB0aGF0IGlzIHNoYXJlZAorKyAgIHdpdGggb3RoZXIgcGFja2FnZXMgYWxzbyB0ZXN0cyB0aGlzIHN5bWJvbCB0byBzZWUgaWYgaXQgaXMgYmVpbmcKKysgICBjb21waWxlZCBhcyBwYXJ0IG9mIHRoZSBDIGxpYnJhcnkuICBXZSBtdXN0IGRlZmluZSB0aGlzIGJlZm9yZSBpbmNsdWRpbmcKKysgICBjb25maWcuaCwgYmVjYXVzZSBpdCBtYWtlcyBzb21lIGRlZmluaXRpb25zIGNvbmRpdGlvbmFsIG9uIHdoZXRoZXIgbGliYworKyAgIGl0c2VsZiBpcyBiZWluZyBjb21waWxlZCwgb3IganVzdCBzb21lIGdlbmVyYXRvciBwcm9ncmFtLiAgKi8KKysjZGVmaW5lIF9MSUJDCTEKKysKKysKKyAvKiBUaGlzIGZpbGUncyBtYWNyb3MgYXJlIGluY2x1ZGVkIGltcGxpY2l0bHkgaW4gdGhlIGNvbXBpbGF0aW9uIG9mIGV2ZXJ5CisgICAgZmlsZSBpbiB0aGUgQyBsaWJyYXJ5IGJ5IC1pbWFjcm9zLgorIAorQEAgLTQwLDE2ICs1MCw2IEBACisgCisgI2luY2x1ZGUgPGJpdHMvdUNsaWJjX2FyY2hfZmVhdHVyZXMuaD4KKyAKKy0KKy0vKiBUaGlzIGlzIGRlZmluZWQgZm9yIHRoZSBjb21waWxhdGlvbiBvZiBhbGwgQyBsaWJyYXJ5IGNvZGUuICBmZWF0dXJlcy5oCistICAgdGVzdHMgdGhpcyB0byBhdm9pZCBpbmNsdXNpb24gb2Ygc3R1YnMuaCB3aGlsZSBjb21waWxpbmcgdGhlIGxpYnJhcnksCistICAgYmVmb3JlIHN0dWJzLmggaGFzIGJlZW4gZ2VuZXJhdGVkLiAgU29tZSBsaWJyYXJ5IGNvZGUgdGhhdCBpcyBzaGFyZWQKKy0gICB3aXRoIG90aGVyIHBhY2thZ2VzIGFsc28gdGVzdHMgdGhpcyBzeW1ib2wgdG8gc2VlIGlmIGl0IGlzIGJlaW5nCistICAgY29tcGlsZWQgYXMgcGFydCBvZiB0aGUgQyBsaWJyYXJ5LiAgV2UgbXVzdCBkZWZpbmUgdGhpcyBiZWZvcmUgaW5jbHVkaW5nCistICAgY29uZmlnLmgsIGJlY2F1c2UgaXQgbWFrZXMgc29tZSBkZWZpbml0aW9ucyBjb25kaXRpb25hbCBvbiB3aGV0aGVyIGxpYmMKKy0gICBpdHNlbGYgaXMgYmVpbmcgY29tcGlsZWQsIG9yIGp1c3Qgc29tZSBnZW5lcmF0b3IgcHJvZ3JhbS4gICovCistI2RlZmluZSBfTElCQwkxCistCisgLyogRW5hYmxlIGRlY2xhcmF0aW9ucyBvZiBHTlUgZXh0ZW5zaW9ucywgc2luY2Ugd2UgYXJlIGNvbXBpbGluZyB0aGVtLiAgKi8KKyAjZGVmaW5lIF9HTlVfU09VUkNFCTEKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjI5LzEzMC1maXgtZ2V0aG9zdGVudF9yLWZhaWx1cmUtcmV0dmFsLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMjkvMTMwLWZpeC1nZXRob3N0ZW50X3ItZmFpbHVyZS1yZXR2YWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IyNDZjMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjI5LzEzMC1maXgtZ2V0aG9zdGVudF9yLWZhaWx1cmUtcmV0dmFsLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK2RpZmYgLXVyIHVDbGliYy0wLjkuMjkvbGliYy9pbmV0L3Jlc29sdi5jIHVDbGliYy0wLjkuMjktcGF0Y2hlZC9saWJjL2luZXQvcmVzb2x2LmMKKy0tLSB1Q2xpYmMtMC45LjI5L2xpYmMvaW5ldC9yZXNvbHYuYwkyMDA3LTA0LTIzIDEyOjAxOjA1LjAwMDAwMDAwMCAtMDUwMAorKysrIHVDbGliYy0wLjkuMjktcGF0Y2hlZC9saWJjL2luZXQvcmVzb2x2LmMJMjAwNy0wNS0wOSAxODowNTozMy41NjM0MDQ0MTkgLTA1MDAKK0BAIC0xNzAwLDcgKzE3MDAsNyBAQAorIGludCBnZXRob3N0ZW50X3Ioc3RydWN0IGhvc3RlbnQgKnJlc3VsdF9idWYsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwKKyAJc3RydWN0IGhvc3RlbnQgKipyZXN1bHQsIGludCAqaF9lcnJub3ApCisgeworLSAgICBpbnQgcmV0OworKyAgICBpbnQgcmV0ID0gSE9TVF9OT1RfRk9VTkQ7CisgCisgICAgIF9fVUNMSUJDX01VVEVYX0xPQ0sobXlsb2NrKTsKKyAgICAgaWYgKF9fZ2V0aG9zdGVudF9mcCA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4yOS8xNDAtYml0c19zeXNudW1faC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjI5LzE0MC1iaXRzX3N5c251bV9oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NWEyMmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4yOS8xNDAtYml0c19zeXNudW1faC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitZRU0tMjAwNzA1MTk6CitiaXRzL3N5c251bS5oIG5lZWRzIGEgY3Jvc3MgY29tcGlsZXIgdG8gYmUgYnVpbHQuIEZvcnR1bmF0ZWx5LCB0aGlzCitoZWFkZXIgaXMgbm90IG5lZWRlZCB0byBidWlsZCBnY2MuIE1vdmUgZ2VuZXJhdGlvbiBvZiB0aGlzIGhlYWRlci4KKworSW5kZXg6IHVDbGliYy9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVDbGliYy9NYWtlZmlsZS5pbgkocmV2aXNpb24gMTg2NTEpCisrKysgdUNsaWJjL01ha2VmaWxlLmluCSh3b3JraW5nIGNvcHkpCitAQCAtOTEsNiArOTEsMTEgQEAKKyAJCQkkKExOKSAtZnMgJCRpIC47IFwKKyAJCWRvbmU7IFwKKyAJZmkKKytpZmVxICgkKFVDTElCQ19IQVNfTE9DQUxFKSx5KQorKwkkKE1BS0UpIGxvY2FsZV9oZWFkZXJzCisrZW5kaWYKKysKKytwcmVnZW46IGhlYWRlcnMKKyAJJChRKVwKKyAJc2V0IC1lOyBcCisgCWNkICQodG9wX2J1aWxkZGlyKTsgXAorQEAgLTEwMiwxMiArMTA3LDcgQEAKKyAJZWxzZSBcCisgCQltdiAtZiAkJHRtcCBpbmNsdWRlL2JpdHMvc3lzbnVtLmg7IFwKKyAJZmkKKy1pZmVxICgkKFVDTElCQ19IQVNfTE9DQUxFKSx5KQorLQkkKE1BS0UpIGxvY2FsZV9oZWFkZXJzCistZW5kaWYKKyAKKy1wcmVnZW46IGhlYWRlcnMKKy0KKyBpbnN0YWxsOiBpbnN0YWxsX3J1bnRpbWUgaW5zdGFsbF9kZXYKKyAKKyAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjI5LzE1MC1iaXRzX3N5c251bV9oMi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjI5LzE1MC1iaXRzX3N5c251bV9oMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjUwZDhkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMjkvMTUwLWJpdHNfc3lzbnVtX2gyLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1lFTS0yMDA3MDUxOToKK1BhdGNoIGZyb20gQmVybmhhcmQgRmlzY2hlciA8cmVwLmRvdC5ub3BAZ21haWwuY29tPiBvbiB0aGUgdUNsaWJjIG1haWxpbmcKK2xpc3QgKCBodHRwOi8vd3d3LnVjbGliYy5vcmcvbGlzdHMvdWNsaWJjLzIwMDgtSmFudWFyeS8wMTg5NDAuaHRtbCApIGFib3ZlCit0aGUgNDAwLWJpdHNfc3lzbnVtX2gucGF0Y2guCisKK0luZGV4OiB1Q2xpYmMvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1Q2xpYmMvTWFrZWZpbGUuaW4JKHJldmlzaW9uIDE4NjUxKQorKysrIHVDbGliYy9NYWtlZmlsZS5pbgkod29ya2luZyBjb3B5KQorQEAgLTExNCw3ICsxMTYsNyBAQCBpbnN0YWxsOiBpbnN0YWxsX3J1bnRpbWUgaW5zdGFsbF9kZXYKKyBSVU5USU1FX1BSRUZJWF9MSUJfRlJPTV9ERVZFTF9QUkVGSVhfTElCPSQoc2hlbGwgJCh0b3Bfc3JjZGlyKWV4dHJhL3NjcmlwdHMvcmVsYXRpdmVfcGF0aC5zaCAkKERFVkVMX1BSRUZJWClsaWIgJChSVU5USU1FX1BSRUZJWClsaWIpCisgCisgIyBJbnN0YWxscyBoZWFkZXIgZmlsZXMuCistaW5zdGFsbF9oZWFkZXJzOgorK2luc3RhbGxfaGVhZGVyczogaGVhZGVycworIAkkKElOU1RBTEwpIC1kICQoUFJFRklYKSQoREVWRUxfUFJFRklYKWluY2x1ZGUKKyAJcHJpbnRmICIuc3ZuXG4uY3ZzaWdub3JlXG5DVlNcbiIgPiB0YXJfZXhjbHVkZSA7IFwKKyAJJChUQVIpIC1jaGYgLSAtWCB0YXJfZXhjbHVkZSBpbmNsdWRlIFwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjI5LzE2MC1jdXN0b20tSVNBLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMjkvMTYwLWN1c3RvbS1JU0EucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE5OTNlZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjI5LzE2MC1jdXN0b20tSVNBLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK2RpZmYgLWR1ciB1Q2xpYmMtMC45LjI5Lm9yaWcvZXh0cmEvQ29uZmlncy9Db25maWcubWlwcyB1Q2xpYmMtMC45LjI5L2V4dHJhL0NvbmZpZ3MvQ29uZmlnLm1pcHMKKy0tLSB1Q2xpYmMtMC45LjI5Lm9yaWcvZXh0cmEvQ29uZmlncy9Db25maWcubWlwcwkyMDA3LTAzLTE2IDIwOjM4OjE0LjAwMDAwMDAwMCArMDEwMAorKysrIHVDbGliYy0wLjkuMjkvZXh0cmEvQ29uZmlncy9Db25maWcubWlwcwkyMDA3LTA1LTIyIDE5OjMwOjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTcxLDQgKzcxLDE2IEBACisgY29uZmlnIENPTkZJR19NSVBTX0lTQV9NSVBTNjQKKyAJYm9vbCAiTUlQUzY0IgorIAorK2NvbmZpZyBDT05GSUdfTUlQU19JU0FfQ1VTVE9NCisrCWJvb2wgIkN1c3RvbSIKKysKKyBlbmRjaG9pY2UKKysKKytjb25maWcgQ09ORklHX01JUFNfQ1BVX0NGTEFHU19DVVNUT00KKysJc3RyaW5nCisrCXByb21wdCAiQ3VzdG9uIElTQSIKKysJZGVwZW5kcyBvbiBDT05GSUdfTUlQU19JU0FfQ1VTVE9NCisrCWRlZmF1bHQgIiIKKysJaGVscAorKwkgIEVudGVyIHlvdXIgY3VzdG9tIElTQSBoZXJlIChlZzogbHg0MTg5ISkuCisrCitkaWZmIC1kdXIgdUNsaWJjLTAuOS4yOS5vcmlnL1J1bGVzLm1hayB1Q2xpYmMtMC45LjI5L1J1bGVzLm1haworLS0tIHVDbGliYy0wLjkuMjkub3JpZy9SdWxlcy5tYWsJMjAwNy0wNC0xNyAxNTozNDoxMS4wMDAwMDAwMDAgKzAyMDAKKysrKyB1Q2xpYmMtMC45LjI5L1J1bGVzLm1hawkyMDA3LTA1LTIyIDE5OjMxOjQ4LjAwMDAwMDAwMCArMDIwMAorQEAgLTIzNCw2ICsyMzQsNyBAQAorIAlDUFVfQ0ZMQUdTLSQoQ09ORklHX01JUFNfTjY0X0FCSSkrPS1tYWJpPTY0CisgCUNQVV9DRkxBR1MtJChDT05GSUdfTUlQU19PMzJfQUJJKSs9LW1hYmk9MzIKKyAJQ1BVX0NGTEFHUy0kKENPTkZJR19NSVBTX04zMl9BQkkpKz0tbWFiaT1uMzIKKysJQ1BVX0NGTEFHUy0kKENPTkZJR19NSVBTX0lTQV9DVVNUT00pKz0tbWFyY2g9JChDT05GSUdfTUlQU19DUFVfQ0ZMQUdTX0NVU1RPTSkKKyBlbmRpZgorIAorIGlmZXEgKCQoVEFSR0VUX0FSQ0gpLG5pb3MpCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4yOS8xNzAtZmlsdGVyLWdudTk5LWZyb20tYXNzZW1ibHktZmxhZ3MucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4yOS8xNzAtZmlsdGVyLWdudTk5LWZyb20tYXNzZW1ibHktZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFhN2UzYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjI5LzE3MC1maWx0ZXItZ251OTktZnJvbS1hc3NlbWJseS1mbGFncy5wYXRjaApAQCAtMCwwICsxLDEyIEBACitkaWZmIC11ciB1Q2xpYmMtMC45LjI5L01ha2VydWxlcyB1Q2xpYmMtMC45LjI5LXBhdGNoZWQvTWFrZXJ1bGVzCistLS0gdUNsaWJjLTAuOS4yOS9NYWtlcnVsZXMJMjAwNi0xMi0xMCAxODoyNToyMy4wMDAwMDAwMDAgLTA2MDAKKysrKyB1Q2xpYmMtMC45LjI5LXBhdGNoZWQvTWFrZXJ1bGVzCTIwMDgtMDEtMjYgMTc6MDQ6NTAuOTY1Njk5NTE4IC0wNjAwCitAQCAtOTYsNyArOTYsNyBAQAorIGRpc3BfbGQgICAgICAgID0gJCgkKERJU1ApX2Rpc3BfbGQpCisgCisgY21kX2NvbXBpbGUuYyA9ICQoQ0MpIC1jICQ8IC1vICRAICQoQ0ZMQUdTKSAkKEFSQ0hfQ0ZMQUdTKSAkKENGTEFHUy0kKHN1ZmZpeCAkQCkpICQoZmlsdGVyLW91dCAkKENGTEFHUy1PTUlULSQobm90ZGlyICQ8KSksJChDRkxBR1MtJChub3RkaXIgJCheRCkpKSkgJChDRkxBR1MtJChzdWJzdCAkKHRvcF9zcmNkaXIpLCwkKGRpciAkPCkpKSAkKENGTEFHUy0kKG5vdGRpciAkPCkpICQoQ0ZMQUdTLSQobm90ZGlyICRAKSkKKy1jbWRfY29tcGlsZS5TID0gJChjbWRfY29tcGlsZS5jKSAtRF9fQVNTRU1CTEVSX18gJChBU0ZMQUdTKSAkKEFSQ0hfQVNGTEFHUykgJChBU0ZMQUdTLSQoc3VmZml4ICRAKSkgJChBU0ZMQUdTLSQobm90ZGlyICQ8KSkgJChBU0ZMQUdTLSQobm90ZGlyICRAKSkKKytjbWRfY29tcGlsZS5TID0gJChmaWx0ZXItb3V0IC1zdGQ9Z251OTksICQoY21kX2NvbXBpbGUuYykpIC1EX19BU1NFTUJMRVJfXyAkKEFTRkxBR1MpICQoQVJDSF9BU0ZMQUdTKSAkKEFTRkxBR1MtJChzdWZmaXggJEApKSAkKEFTRkxBR1MtJChub3RkaXIgJDwpKSAkKEFTRkxBR1MtJChub3RkaXIgJEApKQorIGNtZF9jb21waWxlLm0gPSAkKGNtZF9jb21waWxlLmMpIC1ETF8kKHBhdHN1YnN0ICUkKHN1ZmZpeCAkKG5vdGRpciAkQCkpLCUsJChub3RkaXIgJEApKQorIGNtZF9jb21waWxlLW0gPSAkKENDKSAkXiAtYyAtbyAkQCAkKENGTEFHUykgJChBUkNIX0NGTEFHUykgJChDRkxBR1MtJChzdWZmaXggJEApKSAkKENGTEFHUy0kKG5vdGRpciAkKEBEKSkpICQoQ0ZMQUdTLSQobm90ZGlyICRAKSkKKyBjbWRfc3RyaXAgICAgID0gJChTVFJJUFRPT0wpICQoU1RSSVBfRkxBR1MpICReCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4yOS8xODAtbGludXh0aHJlYWRzLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMjkvMTgwLWxpbnV4dGhyZWFkcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2UyNDM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMjkvMTgwLWxpbnV4dGhyZWFkcy5wYXRjaApAQCAtMCwwICsxLDE0NSBAQAorLS0tIGEvbGlicHRocmVhZC9saW51eHRocmVhZHMub2xkL2F0dHIuYwkyMDA2LTAxLTI0IDEyOjQxOjAxLjAwMDAwMDAwMCAtMDUwMAorKysrIGIvbGlicHRocmVhZC9saW51eHRocmVhZHMub2xkL2F0dHIuYwkyMDA4LTAyLTEwIDExOjM1OjMyLjAwMDAwMDAwMCAtMDUwMAorQEAgLTI1LDYgKzI1LDE0IEBACisgI2luY2x1ZGUgInB0aHJlYWQuaCIKKyAjaW5jbHVkZSAiaW50ZXJuYWxzLmgiCisgCisrI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRpb19leHQuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorKworKworIC8qIE5PVEU6IFdpdGggdUNsaWJjIEkgZG9uJ3QgdGhpbmsgd2UgbmVlZCB0aGlzIHZlcnNpb25pbmcgc3R1ZmYuCisgICogVGhlcmVmb3JlLCBkZWZpbmUgdGhlIGZ1bmN0aW9uIHB0aHJlYWRfYXR0cl9pbml0KCkgaGVyZSB1c2luZworICAqIGEgc3Ryb25nIHN5bWJvbC4gKi8KK0BAIC0yMDksNCArMjE3LDk0IEBAIGludCBfX3B0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUoY29uc3QgcHQKKyAgICpzdGFja3NpemUgPSBhdHRyLT5fX3N0YWNrc2l6ZTsKKyAgIHJldHVybiAwOworIH0KKysKKysKKytleHRlcm4gaW50ICpfX2xpYmNfc3RhY2tfZW5kOworKworIHdlYWtfYWxpYXMgKF9fcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZSwgcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZSkKKyt2b2lkKiBwdGhyZWFkX2dldGF0dHJfbnAocHRocmVhZF90IHRocmVhZCwgcHRocmVhZF9hdHRyX3QgKmF0dHIpCisreworKyAgICBzdGF0aWMgdm9pZCAqc3RhY2tCYXNlID0gMDsKKysgICAgc3RhdGljIHNpemVfdCBzdGFja1NpemUgPSAwOworKyAgICBpbnQgcmV0ID0gMDsKKysgICAgLyogU3RhY2sgc2l6ZSBsaW1pdC4gICovCisrICAgIHN0cnVjdCBybGltaXQgcmw7CisrCisrICAgIC8qIFRoZSBzYWZlc3Qgd2F5IHRvIGdldCB0aGUgdG9wIG9mIHRoZSBzdGFjayBpcyB0byByZWFkCisrICAgIC9wcm9jL3NlbGYvbWFwcyBhbmQgbG9jYXRlIHRoZSBsaW5lIGludG8gd2hpY2gKKysgICAgX19saWJjX3N0YWNrX2VuZCBmYWxscy4gICovCisrICAgIEZJTEUgKmZwID0gZm9wZW4oIi9wcm9jL3NlbGYvbWFwcyIsICJyYyIpOworKyAgICBpZiAoZnAgPT0gTlVMTCkKKysgICAgICAgIHJldCA9IGVycm5vOworKyAgICAvKiBXZSBuZWVkIHRoZSBsaW1pdCBvZiB0aGUgc3RhY2sgaW4gYW55IGNhc2UuICAqLworKyAgICBlbHNlIGlmIChnZXRybGltaXQgKFJMSU1JVF9TVEFDSywgJnJsKSAhPSAwKQorKyAgICAgICAgcmV0ID0gZXJybm87CisrICAgIGVsc2UgeworKyAgICAgICAgLyogV2UgbmVlZCBubyBsb2NraW5nLiAgKi8KKysgICAgICAgIF9fZnNldGxvY2tpbmcgKGZwLCBGU0VUTE9DS0lOR19CWUNBTExFUik7CisrCisrICAgICAgICAvKiBVbnRpbCB3ZSBmb3VuZCBhbiBlbnRyeSAod2hpY2ggc2hvdWxkIGFsd2F5cyBiZSB0aGUgY2FzZSkKKysgICAgICAgIG1hcmsgdGhlIHJlc3VsdCBhcyBhIGZhaWx1cmUuICAqLworKyAgICAgICAgcmV0ID0gRU5PRU5UOworKworKyAgICAgICAgY2hhciAqbGluZSA9IE5VTEw7CisrICAgICAgICBzaXplX3QgbGluZWxlbiA9IDA7CisrICAgICAgICB1aW50cHRyX3QgbGFzdF90byA9IDA7CisrCisrICAgICAgICB3aGlsZSAoISBmZW9mX3VubG9ja2VkIChmcCkpIHsKKysgICAgICAgICAgICBpZiAoZ2V0ZGVsaW0gKCZsaW5lLCAmbGluZWxlbiwgJ1xuJywgZnApIDw9IDApCisrICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIHVpbnRwdHJfdCBmcm9tOworKyAgICAgICAgICAgIHVpbnRwdHJfdCB0bzsKKysgICAgICAgICAgICBpZiAoc3NjYW5mIChsaW5lLCAiJXgtJXgiLCAmZnJvbSwgJnRvKSAhPSAyKQorKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgICAgICBpZiAoZnJvbSA8PSAodWludHB0cl90KSBfX2xpYmNfc3RhY2tfZW5kCisrICAgICAgICAgICAgJiYgKHVpbnRwdHJfdCkgX19saWJjX3N0YWNrX2VuZCA8IHRvKSB7CisrICAgICAgICAgICAgICAgIC8qIEZvdW5kIHRoZSBlbnRyeS4gIE5vdyB3ZSBoYXZlIHRoZSBpbmZvIHdlIG5lZWQuICAqLworKyAgICAgICAgICAgICAgICBhdHRyLT5fX3N0YWNrc2l6ZSA9IHJsLnJsaW1fY3VyOworKyNpZmRlZiBfU1RBQ0tfR1JPV1NfVVAKKysgICAgICAgICAgICAgICAgLyogRG9uJ3QgY2hlY2sgdG8gZW5mb3JjZSBhIGxpbWl0IG9uIHRoZSBfX3N0YWNrc2l6ZSAqLworKyAgICAgICAgICAgICAgICBhdHRyLT5fX3N0YWNrYWRkciA9ICh2b2lkICopIGZyb207CisrI2Vsc2UKKysgICAgICAgICAgICAgICAgYXR0ci0+X19zdGFja2FkZHIgPSAodm9pZCAqKSB0bzsKKysKKysgICAgICAgICAgICAgICAgLyogVGhlIGxpbWl0IG1pZ2h0IGJlIHRvbyBoaWdoLiAgKi8KKysgICAgICAgICAgICAgICAgaWYgKChzaXplX3QpIGF0dHItPl9fc3RhY2tzaXplID4gKHNpemVfdCkgYXR0ci0+X19zdGFja2FkZHIgLSBsYXN0X3RvKQorKyAgICAgICAgICAgICAgICAgICAgYXR0ci0+X19zdGFja3NpemUgPSAoc2l6ZV90KSBhdHRyLT5fX3N0YWNrYWRkciAtIGxhc3RfdG87CisrI2VuZGlmCisrCisrICAgICAgICAgICAgICAgIC8qIFdlIHN1Y2NlZWQgYW5kIG5vIG5lZWQgdG8gbG9vayBmdXJ0aGVyLiAgKi8KKysgICAgICAgICAgICAgICAgcmV0ID0gMDsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGxhc3RfdG8gPSB0bzsKKysgICAgICAgIH0KKysKKysgICAgICAgIGZjbG9zZSAoZnApOworKyAgICAgICAgZnJlZSAobGluZSk7CisrICAgIH0KKysjaWZuZGVmIF9TVEFDS19HUk9XU19VUAorKyAgICBzdGFja0Jhc2UgPSAoY2hhciAqKSBhdHRyLT5fX3N0YWNrYWRkciAtIGF0dHItPl9fc3RhY2tzaXplOworKyNlbHNlCisrICAgIHN0YWNrQmFzZSA9IGF0dHItPl9fc3RhY2thZGRyOworKyNlbmRpZgorKyAgICBzdGFja1NpemUgPSBhdHRyLT5fX3N0YWNrc2l6ZTsKKysgICAgcmV0dXJuICh2b2lkKikoc3RhY2tCYXNlICsgc3RhY2tTaXplKTsKKyt9CisrCisraW50IF9fcHRocmVhZF9hdHRyX2dldHN0YWNrIChjb25zdCBwdGhyZWFkX2F0dHJfdCAqYXR0ciwgdm9pZCAqKnN0YWNrYWRkciwKKysJCQkgICAgIHNpemVfdCAqc3RhY2tzaXplKQorK3sKKysgIC8qIFhYWCBUaGlzIGZ1bmN0aW9uIGhhcyBhIHN0dXBpZCBkZWZpbml0aW9uLiAgVGhlIHN0YW5kYXJkIHNwZWNpZmllcworKyAgICAgbm8gZXJyb3IgdmFsdWUgYnV0IHdoYXQgaXMgaWYgbm8gc3RhY2sgYWRkcmVzcyB3YXMgc2V0PyAgV2Ugc2ltcGx5CisrICAgICByZXR1cm4gdGhlIHZhbHVlIHdlIGhhdmUgaW4gdGhlIG1lbWJlci4gICovCisrI2lmbmRlZiBfU1RBQ0tfR1JPV1NfVVAKKysgICpzdGFja2FkZHIgPSAoY2hhciAqKSBhdHRyLT5fX3N0YWNrYWRkciAtIGF0dHItPl9fc3RhY2tzaXplOworKyNlbHNlCisrICAqc3RhY2thZGRyID0gYXR0ci0+X19zdGFja2FkZHI7CisrI2VuZGlmCisrICAqc3RhY2tzaXplID0gYXR0ci0+X19zdGFja3NpemU7CisrICByZXR1cm4gMDsKKyt9Cisrd2Vha19hbGlhcyAoX19wdGhyZWFkX2F0dHJfZ2V0c3RhY2ssIHB0aHJlYWRfYXR0cl9nZXRzdGFjaykKKworLS0tIGEvbGlicHRocmVhZC9saW51eHRocmVhZHMub2xkL3N5c2RlcHMvcHRocmVhZC9wdGhyZWFkLmgJMjAwNi0xMi0wNyAyMjoxOTozNi4wMDAwMDAwMDAgLTA1MDAKKysrKyBiL2xpYnB0aHJlYWQvbGludXh0aHJlYWRzLm9sZC9zeXNkZXBzL3B0aHJlYWQvcHRocmVhZC5oCTIwMDgtMDItMTAgMTE6NDI6MzUuMDAwMDAwMDAwIC0wNTAwCitAQCAtMjg4LDE1ICsyODgsMTEgQEAgZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2tzaXplIChfXworIAkJCQkgICAgICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmljdCBfX3N0YWNrc2l6ZSkKKyAgICAgIF9fVEhST1c7CisgCistI2lmIDAKKy0vKiBOb3QgeWV0IGltcGxlbWVudGVkIGluIHVDbGliYyEgKi8KKy0KKyAjaWZkZWYgX19VU0VfR05VCisgLyogSW5pdGlhbGl6ZSB0aHJlYWQgYXR0cmlidXRlICpBVFRSIHdpdGggYXR0cmlidXRlcyBjb3JyZXNwb25kaW5nIHRvIHRoZQorICAgIGFscmVhZHkgcnVubmluZyB0aHJlYWQgVEguICBJdCBzaGFsbCBiZSBjYWxsZWQgb24gdW5pdGlhbGl6ZWQgQVRUUgorICAgIGFuZCBkZXN0cm95ZWQgd2l0aCBwdGhyZWFkX2F0dHJfZGVzdHJveSB3aGVuIG5vIGxvbmdlciBuZWVkZWQuICAqLworLWV4dGVybiBpbnQgcHRocmVhZF9nZXRhdHRyX25wIChwdGhyZWFkX3QgX190aCwgcHRocmVhZF9hdHRyX3QgKl9fYXR0cikgX19USFJPVzsKKy0jZW5kaWYKKytleHRlcm4gdm9pZCogcHRocmVhZF9nZXRhdHRyX25wKHB0aHJlYWRfdCB0aHJlYWQsIHB0aHJlYWRfYXR0cl90ICphdHRyKTsKKyAjZW5kaWYKKyAKKyAvKiBGdW5jdGlvbnMgZm9yIHNjaGVkdWxpbmcgY29udHJvbC4gICovCitAQCAtNTk5LDYgKzU5NSwxMSBAQCBleHRlcm4gaW50IHB0aHJlYWRfY2FuY2VsIChwdGhyZWFkX3QgX19jCisgICAgY2FuY2VsbGVkLiAgKi8KKyBleHRlcm4gdm9pZCBwdGhyZWFkX3Rlc3RjYW5jZWwgKHZvaWQpOworIAorKy8qIFJldHVybiB0aGUgcHJldmlvdXNseSBzZXQgYWRkcmVzcyBmb3IgdGhlIHN0YWNrLiAgKi8KKytleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFjayAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCisrCQkJCSAgdm9pZCAqKl9fcmVzdHJpY3QgX19zdGFja2FkZHIsCisrCQkJCSAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc3RhY2tzaXplKSBfX1RIUk9XOworKworIAorIC8qIEluc3RhbGwgYSBjbGVhbnVwIGhhbmRsZXI6IFJPVVRJTkUgd2lsbCBiZSBjYWxsZWQgd2l0aCBhcmd1bWVudHMgQVJHCisgICAgd2hlbiB0aGUgdGhyZWFkIGlzIGNhbmNlbGxlZCBvciBjYWxscyBwdGhyZWFkX2V4aXQuICBST1VUSU5FIHdpbGwgYWxzbworCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4yOS8xOTAtcm0td2hpdGVzcGFjZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjI5LzE5MC1ybS13aGl0ZXNwYWNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMDRmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4yOS8xOTAtcm0td2hpdGVzcGFjZS5wYXRjaApAQCAtMCwwICsxLDg2IEBACitkaWZmIC11ck4gdUNsaWJjLTAuOS4yOS0wcmlnL2luY2x1ZGUvYXNzZXJ0LmggdUNsaWJjLTAuOS4yOS9pbmNsdWRlL2Fzc2VydC5oCistLS0gdUNsaWJjLTAuOS4yOS0wcmlnL2luY2x1ZGUvYXNzZXJ0LmgJMjAwNS0xMS0wMyAyMzo0Mjo0Ni4wMDAwMDAwMDAgKzAxMDAKKysrKyB1Q2xpYmMtMC45LjI5L2luY2x1ZGUvYXNzZXJ0LmgJMjAwNy0wOC0xMyAxOToxMDo1Ny4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMSw3ICszMSw3IEBACisgI2RlZmluZQlfQVNTRVJUX0gJMQorICNpbmNsdWRlIDxmZWF0dXJlcy5oPgorIAorLSNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIF9fR05VQ19QUkVSRVEgKDIsOTUpCisrI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgX19HTlVDX1BSRVJFUSgyLDk1KQorICMgZGVmaW5lIF9fQVNTRVJUX1ZPSURfQ0FTVCBzdGF0aWNfY2FzdDx2b2lkPgorICNlbHNlCisgIyBkZWZpbmUgX19BU1NFUlRfVk9JRF9DQVNUICh2b2lkKQorQEAgLTU5LDEzICs1OSwxNyBAQAorICAgKF9fQVNTRVJUX1ZPSURfQ0FTVCAoKGV4cHIpID8gMCA6CQkJCQkgICAgICBcCisgCQkgICAgICAgKF9fYXNzZXJ0IChfX1NUUklORyhleHByKSwgX19GSUxFX18sIF9fTElORV9fLCAgICBcCisgCQkJCSAgICAgICBfX0FTU0VSVF9GVU5DVElPTiksIDApKSkKKy0gIAorKworKy8qIERlZmluZSBzb21lIHRlbXBvcmFyaWVzIHRvIHdvcmthcm91bmQgdGlueXggbWFrZWRlcGVuZCBidWcgKi8KKysjZGVmaW5lCV9fR05VQ19QUkVSRVFfMl82CV9fR05VQ19QUkVSRVEoMiwgNikKKysjZGVmaW5lCV9fR05VQ19QUkVSRVFfMl80CV9fR05VQ19QUkVSRVEoMiwgNCkKKyAvKiBWZXJzaW9uIDIuNCBhbmQgbGF0ZXIgb2YgR0NDIGRlZmluZSBhIG1hZ2ljYWwgdmFyaWFibGUgYF9fUFJFVFRZX0ZVTkNUSU9OX18nCisgICAgd2hpY2ggY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIGN1cnJlbnRseSBiZWluZyBkZWZpbmVkLgorICAgIFRoaXMgaXMgYnJva2VuIGluIEcrKyBiZWZvcmUgdmVyc2lvbiAyLjYuCisgICAgQzl4IGhhcyBhIHNpbWlsYXIgdmFyaWFibGUgY2FsbGVkIF9fZnVuY19fLCBidXQgcHJlZmVyIHRoZSBHQ0Mgb25lIHNpbmNlCisgICAgaXQgZGVtYW5nbGVzIEMrKyBmdW5jdGlvbiBuYW1lcy4gICovCistIyBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzID8gX19HTlVDX1BSRVJFUSAoMiwgNikgOiBfX0dOVUNfUFJFUkVRICgyLCA0KQorKworKyMgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyA/IF9fR05VQ19QUkVSRVFfMl82IDogX19HTlVDX1BSRVJFUV8yXzQKKyAjICAgZGVmaW5lIF9fQVNTRVJUX0ZVTkNUSU9OCV9fUFJFVFRZX0ZVTkNUSU9OX18KKyAjIGVsc2UKKyAjICBpZiBkZWZpbmVkIF9fU1REQ19WRVJTSU9OX18gJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCitkaWZmIC11ck4gdUNsaWJjLTAuOS4yOS0wcmlnL2luY2x1ZGUvY29tcGxleC5oIHVDbGliYy0wLjkuMjkvaW5jbHVkZS9jb21wbGV4LmgKKy0tLSB1Q2xpYmMtMC45LjI5LTByaWcvaW5jbHVkZS9jb21wbGV4LmgJMjAwMi0wNS0wOSAxMDoxNToyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyB1Q2xpYmMtMC45LjI5L2luY2x1ZGUvY29tcGxleC5oCTIwMDctMDgtMTMgMTc6NTU6MjkuMDAwMDAwMDAwICswMjAwCitAQCAtMzMsNyArMzMsNyBAQAorIC8qIFdlIG1pZ2h0IG5lZWQgdG8gYWRkIHN1cHBvcnQgZm9yIG1vcmUgY29tcGlsZXJzIGhlcmUuICBCdXQgc2luY2UgSVNPCisgICAgQzk5IGlzIG91dCBob3BlZnVsbHkgYWxsIG1haW50YWluZWQgY29tcGlsZXJzIHdpbGwgc29vbiBwcm92aWRlIHRoZSBkYXRhCisgICAgdHlwZXMgYGZsb2F0IGNvbXBsZXgnIGFuZCBgZG91YmxlIGNvbXBsZXgnLiAgKi8KKy0jaWYgX19HTlVDX1BSRVJFUSAoMiwgNykgJiYgIV9fR05VQ19QUkVSRVEgKDIsIDk3KQorKyNpZiBfX0dOVUNfUFJFUkVRKDIsIDcpICYmICFfX0dOVUNfUFJFUkVRKDIsIDk3KQorICMgZGVmaW5lIF9Db21wbGV4IF9fY29tcGxleF9fCisgI2VuZGlmCisgCitkaWZmIC11ck4gdUNsaWJjLTAuOS4yOS0wcmlnL2luY2x1ZGUvZmVhdHVyZXMuaCB1Q2xpYmMtMC45LjI5L2luY2x1ZGUvZmVhdHVyZXMuaAorLS0tIHVDbGliYy0wLjkuMjktMHJpZy9pbmNsdWRlL2ZlYXR1cmVzLmgJMjAwNi0xMS0yOSAyMjoxMDowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyB1Q2xpYmMtMC45LjI5L2luY2x1ZGUvZmVhdHVyZXMuaAkyMDA3LTA4LTEzIDE3OjU1OjUxLjAwMDAwMDAwMCArMDIwMAorQEAgLTE0Myw3ICsxNDMsNyBAQAorIAorIC8qIENvbnZlbmllbmNlIG1hY3JvcyB0byB0ZXN0IHRoZSB2ZXJzaW9ucyBvZiBnbGliYyBhbmQgZ2NjLgorICAgIFVzZSB0aGVtIGxpa2UgdGhpczoKKy0gICAjaWYgX19HTlVDX1BSRVJFUSAoMiw4KQorKyAgICNpZiBfX0dOVUNfUFJFUkVRKDIsOCkKKyAgICAuLi4gY29kZSByZXF1aXJpbmcgZ2NjIDIuOCBvciBsYXRlciAuLi4KKyAgICAjZW5kaWYKKyAgICBOb3RlIC0gdGhleSB3b24ndCB3b3JrIGZvciBnY2MxIG9yIGdsaWJjMSwgc2luY2UgdGhlIF9NSU5PUiBtYWNyb3MKK0BAIC0yOTcsNyArMjk3LDcgQEAKKyAvKiB1Q2xpYmMgZG9lcyBub3Qgc3VwcG9ydCBfRk9SVElGWV9TT1VSQ0UgKi8KKyAjdW5kZWYgX0ZPUlRJRllfU09VUkNFCisgI2lmIGRlZmluZWQgX0ZPUlRJRllfU09VUkNFICYmIF9GT1JUSUZZX1NPVVJDRSA+IDAgXAorLSAgICAmJiBfX0dOVUNfUFJFUkVRICg0LCAxKSAmJiBkZWZpbmVkIF9fT1BUSU1JWkVfXyAmJiBfX09QVElNSVpFX18gPiAwCisrICAgICYmIF9fR05VQ19QUkVSRVEoNCwgMSkgJiYgZGVmaW5lZCBfX09QVElNSVpFX18gJiYgX19PUFRJTUlaRV9fID4gMAorICMgaWYgX0ZPUlRJRllfU09VUkNFID4gMQorICMgIGRlZmluZSBfX1VTRV9GT1JUSUZZX0xFVkVMIDIKKyAjIGVsc2UKK0BAIC0zNjYsNyArMzY2LDcgQEAKKyAjZW5kaWYJLyogIUFTU0VNQkxFUiAqLworIAorIC8qIERlY2lkZSB3aGV0aGVyIHdlIGNhbiBkZWZpbmUgJ2V4dGVybiBpbmxpbmUnIGZ1bmN0aW9ucyBpbiBoZWFkZXJzLiAgKi8KKy0jaWYgX19HTlVDX1BSRVJFUSAoMiwgNykgJiYgZGVmaW5lZCBfX09QVElNSVpFX18gXAorKyNpZiBfX0dOVUNfUFJFUkVRKDIsIDcpICYmIGRlZmluZWQgX19PUFRJTUlaRV9fIFwKKyAgICAgJiYgIWRlZmluZWQgX19PUFRJTUlaRV9TSVpFX18gJiYgIWRlZmluZWQgX19OT19JTkxJTkVfXworICMgZGVmaW5lIF9fVVNFX0VYVEVSTl9JTkxJTkVTCTEKKyAjZW5kaWYKK2RpZmYgLXVyTiB1Q2xpYmMtMC45LjI5LTByaWcvaW5jbHVkZS90Z21hdGguaCB1Q2xpYmMtMC45LjI5L2luY2x1ZGUvdGdtYXRoLmgKKy0tLSB1Q2xpYmMtMC45LjI5LTByaWcvaW5jbHVkZS90Z21hdGguaAkyMDAyLTA1LTA5IDEwOjE1OjIxLjAwMDAwMDAwMCArMDIwMAorKysrIHVDbGliYy0wLjkuMjkvaW5jbHVkZS90Z21hdGguaAkyMDA3LTA4LTEzIDE3OjU2OjE3LjAwMDAwMDAwMCArMDIwMAorQEAgLTM0LDcgKzM0LDcgQEAKKyAgICBkbyBub3QgdHJ5IHRoaXMgZm9yIG5vdyBhbmQgaW5zdGVhZCBjb25jZW50cmF0ZSBvbmx5IG9uIEdOVSBDQy4gIE9uY2UKKyAgICB3ZSBoYXZlIG1vcmUgaW5mb3JtYXRpb24gc3VwcG9ydCBmb3Igb3RoZXIgY29tcGlsZXJzIG1pZ2h0IGZvbGxvdy4gICovCisgCistI2lmIF9fR05VQ19QUkVSRVEgKDIsIDcpCisrI2lmIF9fR05VQ19QUkVSRVEoMiwgNykKKyAKKyAjIGlmZGVmIF9fTk9fTE9OR19ET1VCTEVfTUFUSAorICMgIGRlZmluZSBfX3RnbWwoZmN0KSBmY3QKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjEvMTAwLWZpeC1nZXRob3N0ZW50X3ItZmFpbHVyZS1yZXR2YWwucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4xLzEwMC1maXgtZ2V0aG9zdGVudF9yLWZhaWx1cmUtcmV0dmFsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZTE4ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4xLzEwMC1maXgtZ2V0aG9zdGVudF9yLWZhaWx1cmUtcmV0dmFsLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK09yaWdpbmFsIHBhdGNoIGZyb20gR2VudG9vLgorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiB1Q2xpYmMtMC45LjMwLm9yaWcvbGliYy9pbmV0L3Jlc29sdi5jIHVDbGliYy0wLjkuMzAvbGliYy9pbmV0L3Jlc29sdi5jCistLS0gdUNsaWJjLTAuOS4zMC5vcmlnL2xpYmMvaW5ldC9yZXNvbHYuYwkyMDA4LTExLTAyIDAxOjI1OjMzLjAwMDAwMDAwMCArMDEwMAorKysrIHVDbGliYy0wLjkuMzAvbGliYy9pbmV0L3Jlc29sdi5jCTIwMDktMDItMDcgMDk6NTc6NTkuMDAwMDAwMDAwICswMTAwCitAQCAtMTc4OCw3ICsxNzg4LDcgQEAKKyBpbnQgZ2V0aG9zdGVudF9yKHN0cnVjdCBob3N0ZW50ICpyZXN1bHRfYnVmLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4sCisgCXN0cnVjdCBob3N0ZW50ICoqcmVzdWx0LCBpbnQgKmhfZXJybm9wKQorIHsKKy0JaW50IHJldDsKKysJaW50IHJldCA9IEhPU1RfTk9UX0ZPVU5EOworIAorIAlfX1VDTElCQ19NVVRFWF9MT0NLKG15bG9jayk7CisgCWlmIChfX2dldGhvc3RlbnRfZnAgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMS8xMTAtYXJtX2ZpeF9hbGlnbm1lbnQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4xLzExMC1hcm1fZml4X2FsaWdubWVudC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDcyZTdmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMS8xMTAtYXJtX2ZpeF9hbGlnbm1lbnQucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbSBHZW50b28uCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorQVJNVjUgY2FuIHVzZSBTVFJEIGFuZCBMRFJEIGFjY2VzcyBpbnN0cnVjdGlvbnMgYnV0IHRoZXNlIGFjY2Vzc2VzIG5lZWQgdG8gYmUgCis4IGJ5dGUgYWxpZ25lZC4gVGhlIGR5bmFtaWMgbGlua2VyJ3MgbWFsbG9jIG5lZWRzIHRvIG1hdGNoIHRoaXMgc28gc3RydWN0dXJlcworYmVjb21lIDggYnl0ZSBhbGlnbmVkIHRvIHZvaWQgdW5hbGlnbmVkIGFjY2Vzc2VzLgorCitSUCAtIDE0LzAyLzIwMDgKKworLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIHVDbGliYy0wLjkuMzAub3JpZy9sZHNvL2xkc28vYXJtL2RsLXN5c2RlcC5oIHVDbGliYy0wLjkuMzAvbGRzby9sZHNvL2FybS9kbC1zeXNkZXAuaAorLS0tIHVDbGliYy0wLjkuMzAub3JpZy9sZHNvL2xkc28vYXJtL2RsLXN5c2RlcC5oCTIwMDgtMDktMjUgMTA6MzU6MjAuMDAwMDAwMDAwICswMjAwCisrKysgdUNsaWJjLTAuOS4zMC9sZHNvL2xkc28vYXJtL2RsLXN5c2RlcC5oCTIwMDktMDItMDcgMDk6NTc6NTkuMDAwMDAwMDAwICswMTAwCitAQCAtMTUsNiArMTUsOCBAQAorICAgR09UX0JBU0VbMV0gPSAodW5zaWduZWQgbG9uZykgTU9EVUxFOyBcCisgfQorIAorKyNkZWZpbmUgRExfTUFMTE9DX0FMSUdOIDggIC8qIEVBQkkgbmVlZHMgOCBieXRlIGFsaWdubWVudCBmb3IgU1RSRCBMRFJEKi8KKysKKyBzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGFybV9tb2R1bHVzKHVuc2lnbmVkIGxvbmcgbSwgdW5zaWduZWQgbG9uZyBwKQorIHsKKyAJdW5zaWduZWQgbG9uZyBpLHQsaW5jOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMS8xMjAtcm0td2hpdGVzcGFjZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjEvMTIwLXJtLXdoaXRlc3BhY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlmZTNiZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjEvMTIwLXJtLXdoaXRlc3BhY2UucGF0Y2gKQEAgLTAsMCArMSw4OCBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbSBHZW50b28uCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIHVDbGliYy0wLjkuMzAub3JpZy9pbmNsdWRlL2Fzc2VydC5oIHVDbGliYy0wLjkuMzAvaW5jbHVkZS9hc3NlcnQuaAorLS0tIHVDbGliYy0wLjkuMzAub3JpZy9pbmNsdWRlL2Fzc2VydC5oCTIwMDgtMDctMjMgMTM6MjM6MzYuMDAwMDAwMDAwICswMjAwCisrKysgdUNsaWJjLTAuOS4zMC9pbmNsdWRlL2Fzc2VydC5oCTIwMDktMDItMDcgMDk6NTc6NTkuMDAwMDAwMDAwICswMTAwCitAQCAtMzEsNyArMzEsNyBAQAorICNkZWZpbmUJX0FTU0VSVF9ICTEKKyAjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyAKKy0jaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBfX0dOVUNfUFJFUkVRICgyLDk1KQorKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIF9fR05VQ19QUkVSRVEoMiw5NSkKKyAjIGRlZmluZSBfX0FTU0VSVF9WT0lEX0NBU1Qgc3RhdGljX2Nhc3Q8dm9pZD4KKyAjZWxzZQorICMgZGVmaW5lIF9fQVNTRVJUX1ZPSURfQ0FTVCAodm9pZCkKK0BAIC02MCwxMiArNjAsMTUgQEAKKyAJCSAgICAgICAoX19hc3NlcnQgKF9fU1RSSU5HKGV4cHIpLCBfX0ZJTEVfXywgX19MSU5FX18sICAgIFwKKyAJCQkJICAgICAgIF9fQVNTRVJUX0ZVTkNUSU9OKSwgMCkpKQorIAorKy8qIERlZmluZSBzb21lIHRlbXBvcmFyaWVzIHRvIHdvcmthcm91bmQgdGlueXggbWFrZWRlcGVuZCBidWcgKi8KKysjZGVmaW5lCV9fR05VQ19QUkVSRVFfMl82CV9fR05VQ19QUkVSRVEoMiwgNikKKysjZGVmaW5lCV9fR05VQ19QUkVSRVFfMl80CV9fR05VQ19QUkVSRVEoMiwgNCkKKyAvKiBWZXJzaW9uIDIuNCBhbmQgbGF0ZXIgb2YgR0NDIGRlZmluZSBhIG1hZ2ljYWwgdmFyaWFibGUgYF9fUFJFVFRZX0ZVTkNUSU9OX18nCisgICAgd2hpY2ggY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIGN1cnJlbnRseSBiZWluZyBkZWZpbmVkLgorICAgIFRoaXMgaXMgYnJva2VuIGluIEcrKyBiZWZvcmUgdmVyc2lvbiAyLjYuCisgICAgQzl4IGhhcyBhIHNpbWlsYXIgdmFyaWFibGUgY2FsbGVkIF9fZnVuY19fLCBidXQgcHJlZmVyIHRoZSBHQ0Mgb25lIHNpbmNlCisgICAgaXQgZGVtYW5nbGVzIEMrKyBmdW5jdGlvbiBuYW1lcy4gICovCistIyBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzID8gX19HTlVDX1BSRVJFUSAoMiwgNikgOiBfX0dOVUNfUFJFUkVRICgyLCA0KQorKyMgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyA/IF9fR05VQ19QUkVSRVFfMl82IDogX19HTlVDX1BSRVJFUV8yXzQKKyAjICAgZGVmaW5lIF9fQVNTRVJUX0ZVTkNUSU9OCV9fUFJFVFRZX0ZVTkNUSU9OX18KKyAjIGVsc2UKKyAjICBpZiBkZWZpbmVkIF9fU1REQ19WRVJTSU9OX18gJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCitkaWZmIC1kdXJOIHVDbGliYy0wLjkuMzAub3JpZy9pbmNsdWRlL2NvbXBsZXguaCB1Q2xpYmMtMC45LjMwL2luY2x1ZGUvY29tcGxleC5oCistLS0gdUNsaWJjLTAuOS4zMC5vcmlnL2luY2x1ZGUvY29tcGxleC5oCTIwMDgtMTAtMDMgMTY6MjQ6MjguMDAwMDAwMDAwICswMjAwCisrKysgdUNsaWJjLTAuOS4zMC9pbmNsdWRlL2NvbXBsZXguaAkyMDA5LTAyLTA3IDA5OjU3OjU5LjAwMDAwMDAwMCArMDEwMAorQEAgLTMzLDcgKzMzLDcgQEAKKyAvKiBXZSBtaWdodCBuZWVkIHRvIGFkZCBzdXBwb3J0IGZvciBtb3JlIGNvbXBpbGVycyBoZXJlLiAgQnV0IHNpbmNlIElTTworICAgIEM5OSBpcyBvdXQgaG9wZWZ1bGx5IGFsbCBtYWludGFpbmVkIGNvbXBpbGVycyB3aWxsIHNvb24gcHJvdmlkZSB0aGUgZGF0YQorICAgIHR5cGVzIGBmbG9hdCBjb21wbGV4JyBhbmQgYGRvdWJsZSBjb21wbGV4Jy4gICovCistI2lmIF9fR05VQ19QUkVSRVEgKDIsIDcpICYmICFfX0dOVUNfUFJFUkVRICgyLCA5NykKKysjaWYgX19HTlVDX1BSRVJFUSgyLCA3KSAmJiAhX19HTlVDX1BSRVJFUSgyLCA5NykKKyAjIGRlZmluZSBfQ29tcGxleCBfX2NvbXBsZXhfXworICNlbmRpZgorIAorZGlmZiAtZHVyTiB1Q2xpYmMtMC45LjMwLm9yaWcvaW5jbHVkZS9mZWF0dXJlcy5oIHVDbGliYy0wLjkuMzAvaW5jbHVkZS9mZWF0dXJlcy5oCistLS0gdUNsaWJjLTAuOS4zMC5vcmlnL2luY2x1ZGUvZmVhdHVyZXMuaAkyMDA4LTA5LTA2IDE4OjQ1OjA3LjAwMDAwMDAwMCArMDIwMAorKysrIHVDbGliYy0wLjkuMzAvaW5jbHVkZS9mZWF0dXJlcy5oCTIwMDktMDItMDcgMDk6NTc6NTkuMDAwMDAwMDAwICswMTAwCitAQCAtMTQzLDcgKzE0Myw3IEBACisgCisgLyogQ29udmVuaWVuY2UgbWFjcm9zIHRvIHRlc3QgdGhlIHZlcnNpb25zIG9mIGdsaWJjIGFuZCBnY2MuCisgICAgVXNlIHRoZW0gbGlrZSB0aGlzOgorLSAgICNpZiBfX0dOVUNfUFJFUkVRICgyLDgpCisrICAgI2lmIF9fR05VQ19QUkVSRVEoMiw4KQorICAgIC4uLiBjb2RlIHJlcXVpcmluZyBnY2MgMi44IG9yIGxhdGVyIC4uLgorICAgICNlbmRpZgorICAgIE5vdGUgLSB0aGV5IHdvbid0IHdvcmsgZm9yIGdjYzEgb3IgZ2xpYmMxLCBzaW5jZSB0aGUgX01JTk9SIG1hY3JvcworQEAgLTI5Nyw3ICsyOTcsNyBAQAorIC8qIHVDbGliYyBkb2VzIG5vdCBzdXBwb3J0IF9GT1JUSUZZX1NPVVJDRSAqLworICN1bmRlZiBfRk9SVElGWV9TT1VSQ0UKKyAjaWYgZGVmaW5lZCBfRk9SVElGWV9TT1VSQ0UgJiYgX0ZPUlRJRllfU09VUkNFID4gMCBcCistICAgICYmIF9fR05VQ19QUkVSRVEgKDQsIDEpICYmIGRlZmluZWQgX19PUFRJTUlaRV9fICYmIF9fT1BUSU1JWkVfXyA+IDAKKysgICAgJiYgX19HTlVDX1BSRVJFUSg0LCAxKSAmJiBkZWZpbmVkIF9fT1BUSU1JWkVfXyAmJiBfX09QVElNSVpFX18gPiAwCisgIyBpZiBfRk9SVElGWV9TT1VSQ0UgPiAxCisgIyAgZGVmaW5lIF9fVVNFX0ZPUlRJRllfTEVWRUwgMgorICMgZWxzZQorQEAgLTM2Niw3ICszNjYsNyBAQAorICNlbmRpZgkvKiAhQVNTRU1CTEVSICovCisgCisgLyogRGVjaWRlIHdoZXRoZXIgd2UgY2FuIGRlZmluZSAnZXh0ZXJuIGlubGluZScgZnVuY3Rpb25zIGluIGhlYWRlcnMuICAqLworLSNpZiBfX0dOVUNfUFJFUkVRICgyLCA3KSAmJiBkZWZpbmVkIF9fT1BUSU1JWkVfXyBcCisrI2lmIF9fR05VQ19QUkVSRVEoMiwgNykgJiYgZGVmaW5lZCBfX09QVElNSVpFX18gXAorICAgICAmJiAhZGVmaW5lZCBfX09QVElNSVpFX1NJWkVfXyAmJiAhZGVmaW5lZCBfX05PX0lOTElORV9fIFwKKyAgICAgJiYgKGRlZmluZWQgX19leHRlcm5faW5saW5lIHx8IGRlZmluZWQgX19HTlVDX0dOVV9JTkxJTkVfXykKKyAjIGRlZmluZSBfX1VTRV9FWFRFUk5fSU5MSU5FUwkxCitkaWZmIC1kdXJOIHVDbGliYy0wLjkuMzAub3JpZy9pbmNsdWRlL3RnbWF0aC5oIHVDbGliYy0wLjkuMzAvaW5jbHVkZS90Z21hdGguaAorLS0tIHVDbGliYy0wLjkuMzAub3JpZy9pbmNsdWRlL3RnbWF0aC5oCTIwMDgtMTAtMDMgMTY6MjQ6MjguMDAwMDAwMDAwICswMjAwCisrKysgdUNsaWJjLTAuOS4zMC9pbmNsdWRlL3RnbWF0aC5oCTIwMDktMDItMDcgMDk6NTc6NTkuMDAwMDAwMDAwICswMTAwCitAQCAtMzQsNyArMzQsNyBAQAorICAgIGRvIG5vdCB0cnkgdGhpcyBmb3Igbm93IGFuZCBpbnN0ZWFkIGNvbmNlbnRyYXRlIG9ubHkgb24gR05VIENDLiAgT25jZQorICAgIHdlIGhhdmUgbW9yZSBpbmZvcm1hdGlvbiBzdXBwb3J0IGZvciBvdGhlciBjb21waWxlcnMgbWlnaHQgZm9sbG93LiAgKi8KKyAKKy0jaWYgX19HTlVDX1BSRVJFUSAoMiwgNykKKysjaWYgX19HTlVDX1BSRVJFUSgyLCA3KQorIAorICMgaWZuZGVmIF9fVUNMSUJDX0hBU19MT05HX0RPVUJMRV9NQVRIX18KKyAjICBkZWZpbmUgX190Z21sKGZjdCkgZmN0CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4xLzEzMC1hcm0tZnRydW5jYXRlNjQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4xLzEzMC1hcm0tZnRydW5jYXRlNjQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JkOGVmNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjEvMTMwLWFybS1mdHJ1bmNhdGU2NC5wYXRjaApAQCAtMCwwICsxLDE3IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIEdlbnRvby4KKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gdUNsaWJjLTAuOS4zMC5vcmlnL2xpYmMvc3lzZGVwcy9saW51eC9hcm0vYml0cy91Q2xpYmNfYXJjaF9mZWF0dXJlcy5oIHVDbGliYy0wLjkuMzAvbGliYy9zeXNkZXBzL2xpbnV4L2FybS9iaXRzL3VDbGliY19hcmNoX2ZlYXR1cmVzLmgKKy0tLSB1Q2xpYmMtMC45LjMwLm9yaWcvbGliYy9zeXNkZXBzL2xpbnV4L2FybS9iaXRzL3VDbGliY19hcmNoX2ZlYXR1cmVzLmgJMjAwOC0wOS0yNSAxMDo1MDo1Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyB1Q2xpYmMtMC45LjMwL2xpYmMvc3lzZGVwcy9saW51eC9hcm0vYml0cy91Q2xpYmNfYXJjaF9mZWF0dXJlcy5oCTIwMDktMDItMDcgMDk6NTc6NTkuMDAwMDAwMDAwICswMTAwCitAQCAtMzksNCArMzksOCBAQAorIC8qIGRlZmluZSBpZiB0YXJnZXQgc3VwcG9ydHMgSUVFRSBzaWduZWQgemVybyBmbG9hdHMgKi8KKyAjZGVmaW5lIF9fVUNMSUJDX0hBVkVfU0lHTkVEX1pFUk9fXworIAorKyNpZmRlZiBfX0FSTV9FQUJJX18KKysjIGRlZmluZSBfX1VDTElCQ19UUlVOQ0FURTY0X0hBU180X0FSR1NfXworKyNlbmRpZgorKworICNlbmRpZiAvKiBfQklUU19VQ0xJQkNfQVJDSF9GRUFUVVJFU19IICovCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4xLzE0MC1nbnU4OS1pbmxpbmUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4xLzE0MC1nbnU4OS1pbmxpbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZhOTUyOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjEvMTQwLWdudTg5LWlubGluZS5wYXRjaApAQCAtMCwwICsxLDE2IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIEdlbnRvby4KKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gdUNsaWJjLTAuOS4zMC5vcmlnL1J1bGVzLm1hayB1Q2xpYmMtMC45LjMwL1J1bGVzLm1haworLS0tIHVDbGliYy0wLjkuMzAub3JpZy9SdWxlcy5tYWsJMjAwOC0xMS0xMiAxMzoyNDoxNi4wMDAwMDAwMDAgKzAxMDAKKysrKyB1Q2xpYmMtMC45LjMwL1J1bGVzLm1hawkyMDA5LTAyLTA3IDA5OjU3OjU5LjAwMDAwMDAwMCArMDEwMAorQEAgLTUxOSw2ICs1MTksNyBAQAorIGVuZGlmCisgCisgQ0ZMQUdTICs9ICQoY2FsbCBjaGVja19nY2MsLXN0ZD1nbnU5OSwpCisrQ0ZMQUdTICs9ICQoY2FsbCBjaGVja19nY2MsLWZnbnU4OS1pbmxpbmUsKQorIAorIExERkxBR1NfTk9TVFJJUDo9JChDUFVfTERGTEFHUy15KSAtV2wsLXNoYXJlZCBcCisgCS1XbCwtLXdhcm4tY29tbW9uIC1XbCwtLXdhcm4tb25jZSAtV2wsLXosY29tYnJlbG9jCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4xLzE1MC02NGJpdC1zdHJ0b3VxLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMS8xNTAtNjRiaXQtc3RydG91cS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDRlY2FhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMS8xNTAtNjRiaXQtc3RydG91cS5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitbUEFUQ0hdOiBBZGQgc3RydG91cSBhbGlhcyAodG8gc3RydG91bCkgZm9yIDY0Yml0CisKK1RoZSBzdHJ0b3VxIGFsaWFzIHdhcyBvbmx5IGF2YWlsYWJsZSBvbiAzMmJpdCwgYnJlYWtpbmcgY29tcGlsYXRpb24gb2Ygc3R1ZmYKK3VzaW5nIHN0cnRvdXEgb24gNjRiaXQgbWFjaGluZXMuIEF0IHRoZSBzYW1lIHRpbWUgdXNlIHRoZSBjb3JyZWN0IHJldHVybgordHlwZSAodV9xdWFkX3QpLgorCitTaWduZWQtb2YtYnk6IFBldGVyIEtvcnNnYWFyZCA8amFjbWV0QHN1bnNpdGUuZGs+CistLS0KKyBpbmNsdWRlL3N0ZGxpYi5oICAgICB8ICAgIDQgKysrLQorIGxpYmMvc3RkbGliL3N0ZGxpYi5jIHwgICAgMSArCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IHVDbGliYy0wLjkuMzAuMS9saWJjL3N0ZGxpYi9zdGRsaWIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVDbGliYy0wLjkuMzAuMS5vcmlnL2xpYmMvc3RkbGliL3N0ZGxpYi5jCisrKysgdUNsaWJjLTAuOS4zMC4xL2xpYmMvc3RkbGliL3N0ZGxpYi5jCitAQCAtNDAxLDYgKzQwMSw5IEBACisgbGliY19oaWRkZW5fcHJvdG8oX19YTF9OUFAoc3RydG91bGwpKQorIHN0cm9uZ19hbGlhcyhfX1hMX05QUChzdHJ0b3VsKSxfX1hMX05QUChzdHJ0b3VsbCkpCisgbGliY19oaWRkZW5fZGVmKF9fWExfTlBQKHN0cnRvdWxsKSkKKysjaWYgIWRlZmluZWQoTF9zdHJ0b3VsX2wpCisrc3Ryb25nX2FsaWFzKHN0cnRvdWwsc3RydG91cSkKKysjZW5kaWYKKyAjZW5kaWYKKyAKKyAKK0luZGV4OiB1Q2xpYmMtMC45LjMwLjEvaW5jbHVkZS9zdGRsaWIuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVDbGliYy0wLjkuMzAuMS5vcmlnL2luY2x1ZGUvc3RkbGliLmgKKysrKyB1Q2xpYmMtMC45LjMwLjEvaW5jbHVkZS9zdGRsaWIuaAorQEAgLTIwMyw2ICsyMDMsOCBAQAorIF9fRU5EX05BTUVTUEFDRV9TVEQKKyAKKyAjaWZkZWYgX19VU0VfQlNECisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPiAvKiBmb3IgdV9xdWFkX3QgKi8KKysKKyAvKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgcXVhZHdvcmQgaW50ZWdlci4gICovCisgX19leHRlbnNpb25fXworIGV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKK0BAIC0yMTAsNyArMjEyLDcgQEAKKyAgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpIF9fd3VyOworIC8qIENvbnZlcnQgYSBzdHJpbmcgdG8gYW4gdW5zaWduZWQgcXVhZHdvcmQgaW50ZWdlci4gICovCisgX19leHRlbnNpb25fXworLWV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCisrZXh0ZXJuIHVfcXVhZF90IHN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCisgCQkJCSAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKKyAgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpIF9fd3VyOworICNlbmRpZiAvKiBHQ0MgYW5kIHVzZSBCU0QuICAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMS8xNjAtYzk5LWxkYmwtbWF0aC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjEvMTYwLWM5OS1sZGJsLW1hdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ0ZjMyYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjEvMTYwLWM5OS1sZGJsLW1hdGgucGF0Y2gKQEAgLTAsMCArMSw0NzQgQEAKK0luZGV4OiB1Q2xpYmMtMC45LjMwLjEvbGlibS9sZG91YmxlX3dyYXBwZXJzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1Q2xpYmMtMC45LjMwLjEvbGlibS9sZG91YmxlX3dyYXBwZXJzLmMJKHJldmlzaW9uIDI1NTUyKQorKysrIHVDbGliYy0wLjkuMzAuMS9saWJtL2xkb3VibGVfd3JhcHBlcnMuYwkod29ya2luZyBjb3B5KQorQEAgLTEzLDYgKzEzLDE2IEBACisgI2luY2x1ZGUgIm1hdGguaCIKKyAjaW5jbHVkZSA8Y29tcGxleC5oPgorIAorKyNpZiBkZWZpbmVkIF9fTk9fTE9OR19ET1VCTEVfTUFUSAorKyMgZGVmaW5lIGludF9XUkFQUEVSX0M5OShmdW5jKSAvKiBub3QgbmVlZGVkICovCisrIyBlbHNlCisrIyBkZWZpbmUgaW50X1dSQVBQRVJfQzk5KGZ1bmMpIFwKKytpbnQgZnVuYyMjbChsb25nIGRvdWJsZSB4KSBcCisreyBcCisrICAgIHJldHVybiBmdW5jKChkb3VibGUpIHgpOyBcCisrfSBcCisrbGlibV9oaWRkZW5fZGVmKGZ1bmMjI2wpCisrI2VuZGlmCisgCisgLyogSW1wbGVtZW50IHRoZSBmb2xsb3dpbmcsIGFzIGRlZmluZWQgYnkgU3VTdjMgKi8KKyAjaWYgMAorQEAgLTU0Myw0NiArNTUzLDI4IEBAIGxvbmcgZG91YmxlIHRydW5jbCAobG9uZyBkb3VibGUgeCkKKyAjZW5kaWYKKyAKKyAKKy0jaWZkZWYgX19ET19DOTlfTUFUSF9fCisrI2lmIGRlZmluZWQgX19ET19DOTlfTUFUSF9fCisgCisgI2lmZGVmIExfZnBjbGFzc2lmeWwKKy1pbnQgX19mcGNsYXNzaWZ5bCAobG9uZyBkb3VibGUgeCkKKy17CistCXJldHVybiBfX2ZwY2xhc3NpZnkgKCAoZG91YmxlKSB4ICk7CistfQorLWxpYm1faGlkZGVuX2RlZihfX2ZwY2xhc3NpZnlsKQorK2ludF9XUkFQUEVSX0M5OShfX2ZwY2xhc3NpZnkpCisgI2VuZGlmCisgCisgI2lmZGVmIExfZmluaXRlbAorLWludCBfX2Zpbml0ZWwgKGxvbmcgZG91YmxlIHgpCisteworLQlyZXR1cm4gX19maW5pdGUgKCAoZG91YmxlKXggKTsKKy19CistbGlibV9oaWRkZW5fZGVmKF9fZmluaXRlbCkKKytpbnRfV1JBUFBFUl9DOTkoX19maW5pdGUpCisgI2VuZGlmCisgCisgI2lmZGVmIExfc2lnbmJpdGwKKy1pbnQgX19zaWduYml0bCAobG9uZyBkb3VibGUgeCkKKy17CistCXJldHVybiBfX3NpZ25iaXRsICggKGRvdWJsZSl4ICk7CistfQorLWxpYm1faGlkZGVuX2RlZihfX3NpZ25iaXRsKQorK2ludF9XUkFQUEVSX0M5OShfX3NpZ25iaXQpCisgI2VuZGlmCisgCisgI2lmZGVmIExfaXNuYW5sCistaW50IF9faXNuYW5sIChsb25nIGRvdWJsZSB4KQorLXsKKy0JcmV0dXJuIF9faXNuYW4gKCAoZG91YmxlKXggKTsKKy19CistbGlibV9oaWRkZW5fZGVmKF9faXNuYW5sKQorK2ludF9XUkFQUEVSX0M5OShfX2lzbmFuKQorICNlbmRpZgorIAorICNpZmRlZiBMX2lzaW5mbAorLWludCBfX2lzaW5mbCAobG9uZyBkb3VibGUgeCkKKy17CistCXJldHVybiBfX2lzaW5mICggKGRvdWJsZSl4ICk7CistfQorLWxpYm1faGlkZGVuX2RlZihfX2lzaW5mbCkKKytpbnRfV1JBUFBFUl9DOTkoX19pc2luZikKKyAjZW5kaWYKKyAKKy0jZW5kaWYKKysjZW5kaWYgLyogRE9fQzk5X01BVEggKi8KKysKKysjdW5kZWYgaW50X1dSQVBQRVJfQzk5CitJbmRleDogdUNsaWJjLTAuOS4zMC4xL2xpYm0vbmFuLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1Q2xpYmMtMC45LjMwLjEvbGlibS9uYW4uYwkocmV2aXNpb24gMjU1NTIpCisrKysgdUNsaWJjLTAuOS4zMC4xL2xpYm0vbmFuLmMJKHdvcmtpbmcgY29weSkKK0BAIC00NSw3ICs0NSw3IEBAIGZsb2F0IG5hbmYgKGNvbnN0IGNoYXIgKnRhZ3ApCisgfQorIGxpYm1faGlkZGVuX2RlZihuYW5mKQorIAorLSNpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT05HX0RPVUJMRV9NQVRIX18KKysjaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9OR19ET1VCTEVfTUFUSF9fICYmICFkZWZpbmVkIF9fTk9fTE9OR19ET1VCTEVfTUFUSAorIGxpYm1faGlkZGVuX3Byb3RvKG5hbmwpCisgbG9uZyBkb3VibGUgbmFubCAoY29uc3QgY2hhciAqdGFncCkKKyB7CitJbmRleDogdUNsaWJjLTAuOS4zMC4xL2luY2x1ZGUvbWF0aC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdUNsaWJjLTAuOS4zMC4xL2luY2x1ZGUvbWF0aC5oCShyZXZpc2lvbiAyNTU1MikKKysrKyB1Q2xpYmMtMC45LjMwLjEvaW5jbHVkZS9tYXRoLmgJKHdvcmtpbmcgY29weSkKK0BAIC0xMTgsNyArMTE4LDcgQEAgX19CRUdJTl9ERUNMUworICMgdW5kZWYJX19NQVRIX1BSRUNOQU1FCisgCisgIyBpZiAoX19TVERDX18gLSAwIHx8IF9fR05VQ19fIC0gMCkgXAorLSAgICAgJiYgKGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPTkdfRE9VQkxFX01BVEhfXyB8fCBkZWZpbmVkIF9fTERCTF9DT01QQVQpCisrICAgICAmJiAoIWRlZmluZWQgX19OT19MT05HX0RPVUJMRV9NQVRIIHx8IGRlZmluZWQgX19MREJMX0NPTVBBVCkKKyAjICBpZmRlZiBfX0xEQkxfQ09NUEFUCisgCisgIyAgIGlmZGVmIF9fVVNFX0lTT0M5OQorQEAgLTIzMCw3ICsyMzAsNyBAQCBlbnVtCisgICB9OworIAorIC8qIFJldHVybiBudW1iZXIgb2YgY2xhc3NpZmljYXRpb24gYXBwcm9wcmlhdGUgZm9yIFguICAqLworLSMgaWZuZGVmIF9fVUNMSUJDX0hBU19MT05HX0RPVUJMRV9NQVRIX18KKysjIGlmZGVmIF9fTk9fTE9OR19ET1VCTEVfTUFUSAorICMgIGRlZmluZSBmcGNsYXNzaWZ5KHgpIFwKKyAgICAgIChzaXplb2YgKHgpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoeCkgOiBfX2ZwY2xhc3NpZnkgKHgpKQorICMgZWxzZQorQEAgLTI0Miw3ICsyNDIsNyBAQCBlbnVtCisgIyBlbmRpZgorIAorIC8qIFJldHVybiBub256ZXJvIHZhbHVlIGlmIHNpZ24gb2YgWCBpcyBuZWdhdGl2ZS4gICovCistIyBpZm5kZWYgX19VQ0xJQkNfSEFTX0xPTkdfRE9VQkxFX01BVEhfXworKyMgaWZkZWYgX19OT19MT05HX0RPVUJMRV9NQVRICisgIyAgZGVmaW5lIHNpZ25iaXQoeCkgXAorICAgICAgKHNpemVvZiAoeCkgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX3NpZ25iaXRmICh4KSA6IF9fc2lnbmJpdCAoeCkpCisgIyBlbHNlCitAQCAtMjU0LDcgKzI1NCw3IEBAIGVudW0KKyAjIGVuZGlmCisgCisgLyogUmV0dXJuIG5vbnplcm8gdmFsdWUgaWYgWCBpcyBub3QgKy1JbmYgb3IgTmFOLiAgKi8KKy0jIGlmbmRlZiBfX1VDTElCQ19IQVNfTE9OR19ET1VCTEVfTUFUSF9fCisrIyBpZmRlZiBfX05PX0xPTkdfRE9VQkxFX01BVEgKKyAjICBkZWZpbmUgaXNmaW5pdGUoeCkgXAorICAgICAgKHNpemVvZiAoeCkgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2Zpbml0ZWYgKHgpIDogX19maW5pdGUgKHgpKQorICMgZWxzZQorQEAgLTI3MCw3ICsyNzAsNyBAQCBlbnVtCisgCisgLyogUmV0dXJuIG5vbnplcm8gdmFsdWUgaWYgWCBpcyBhIE5hTi4gIFdlIGNvdWxkIHVzZSBgZnBjbGFzc2lmeScgYnV0CisgICAgd2UgYWxyZWFkeSBoYXZlIHRoaXMgZnVuY3Rpb25zIGBfX2lzbmFuJyBhbmQgaXQgaXMgZmFzdGVyLiAgKi8KKy0jIGlmbmRlZiBfX1VDTElCQ19IQVNfTE9OR19ET1VCTEVfTUFUSF9fCisrIyBpZmRlZiBfX05PX0xPTkdfRE9VQkxFX01BVEgKKyAjICBkZWZpbmUgaXNuYW4oeCkgXAorICAgICAgKHNpemVvZiAoeCkgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2lzbmFuZiAoeCkgOiBfX2lzbmFuICh4KSkKKyAjIGVsc2UKK0BAIC0yODIsNyArMjgyLDcgQEAgZW51bQorICMgZW5kaWYKKyAKKyAvKiBSZXR1cm4gbm9uemVybyB2YWx1ZSBpcyBYIGlzIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGluZmluaXR5LiAgKi8KKy0jIGlmbmRlZiBfX1VDTElCQ19IQVNfTE9OR19ET1VCTEVfTUFUSF9fCisrIyBpZmRlZiBfX05PX0xPTkdfRE9VQkxFX01BVEgKKyAjICBkZWZpbmUgaXNpbmYoeCkgXAorICAgICAgKHNpemVvZiAoeCkgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2lzaW5mZiAoeCkgOiBfX2lzaW5mICh4KSkKKyAjIGVsc2UKK0luZGV4OiB1Q2xpYmMtMC45LjMwLjEvaW5jbHVkZS90Z21hdGguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVDbGliYy0wLjkuMzAuMS9pbmNsdWRlL3RnbWF0aC5oCShyZXZpc2lvbiAyNTU1MikKKysrKyB1Q2xpYmMtMC45LjMwLjEvaW5jbHVkZS90Z21hdGguaAkod29ya2luZyBjb3B5KQorQEAgLTM2LDcgKzM2LDcgQEAKKyAKKyAjaWYgX19HTlVDX1BSRVJFUSgyLCA3KQorIAorLSMgaWZuZGVmIF9fVUNMSUJDX0hBU19MT05HX0RPVUJMRV9NQVRIX18KKysjIGlmZGVmIF9fTk9fTE9OR19ET1VCTEVfTUFUSAorICMgIGRlZmluZSBfX3RnbWwoZmN0KSBmY3QKKyAjIGVsc2UKKyAjICBkZWZpbmUgX190Z21sKGZjdCkgZmN0ICMjIGwKK0luZGV4OiB1Q2xpYmMtMC45LjMwLjEvbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvYml0cy93b3Jkc2l6ZS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdUNsaWJjLTAuOS4zMC4xL2xpYmMvc3lzZGVwcy9saW51eC9wb3dlcnBjL2JpdHMvd29yZHNpemUuaAkocmV2aXNpb24gMjU1NTIpCisrKysgdUNsaWJjLTAuOS4zMC4xL2xpYmMvc3lzZGVwcy9saW51eC9wb3dlcnBjL2JpdHMvd29yZHNpemUuaAkod29ya2luZyBjb3B5KQorQEAgLTcsMTMgKzcsMTMgQEAKKyAjIGRlZmluZSBfX1dPUkRTSVpFCTMyCisgI2VuZGlmCisgCistI2lmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPTkdfRE9VQkxFX01BVEhfXyAmJiAhZGVmaW5lZCBfX0xPTkdfRE9VQkxFX01BVEhfT1BUSU9OQUwKKysjaWYgIWRlZmluZWQgX19OT19MT05HX0RPVUJMRV9NQVRIICYmICFkZWZpbmVkIF9fTE9OR19ET1VCTEVfTUFUSF9PUFRJT05BTAorIAorIC8qIFNpZ25hbCB0aGUgZ2xpYmMgQUJJIGRpZG4ndCB1c2VkIHRvIGhhdmUgYSBgbG9uZyBkb3VibGUnLgorICAgIFRoZSBjaGFuZ2VzIGFsbCB0aGUgYGxvbmcgZG91YmxlJyBmdW5jdGlvbiB2YXJpYW50cyB0byBiZSByZWRpcmVjdHMKKyAgICB0byB0aGUgZG91YmxlIGZ1bmN0aW9ucy4gICovCisgIyBkZWZpbmUgX19MT05HX0RPVUJMRV9NQVRIX09QVElPTkFMICAgMQorICMgaWZuZGVmIF9fTE9OR19ET1VCTEVfMTI4X18KKy0jICB1bmRlZiBfX1VDTElCQ19IQVNfTE9OR19ET1VCTEVfTUFUSF9fCisrIyAgZGVmaW5lIF9fTk9fTE9OR19ET1VCTEVfTUFUSCAgICAgICAgMQorICMgZW5kaWYKKyAjZW5kaWYKK0luZGV4OiB1Q2xpYmMtMC45LjMwLjEvbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvYml0cy9tYXRoZGVmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1Q2xpYmMtMC45LjMwLjEvbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvYml0cy9tYXRoZGVmLmgJKHJldmlzaW9uIDI1NTUyKQorKysrIHVDbGliYy0wLjkuMzAuMS9saWJjL3N5c2RlcHMvbGludXgvcG93ZXJwYy9iaXRzL21hdGhkZWYuaAkod29ya2luZyBjb3B5KQorQEAgLTY1LDExICs2NSwxMyBAQCB0eXBlZGVmIGRvdWJsZSBkb3VibGVfdDsKKyAKKyAjZW5kaWYJLyogSVNPIEM5OSAqLworIAorLSNpZmRlZiBfX1VDTElCQ19IQVNfTE9OR19ET1VCTEVfTUFUSF9fCisrI2lmbmRlZiBfX05PX0xPTkdfRE9VQkxFX01BVEgKKyAjaW5jbHVkZSA8Yml0cy93b3Jkc2l6ZS5oPgorIC8qIFNpZ25hbCB0aGF0IHdlIGRvIG5vdCByZWFsbHkgaGF2ZSBhIGBsb25nIGRvdWJsZScuICBUaGUgZGlzYWJsZXMgdGhlCisgICAgZGVjbGFyYXRpb24gb2YgYWxsIHRoZSBgbG9uZyBkb3VibGUnIGZ1bmN0aW9uIHZhcmlhbnRzLiAgKi8KKyAjIGlmIF9fV09SRFNJWkUgPT0gMzIKKy0jICB1bmRlZiBfX1VDTElCQ19IQVNfTE9OR19ET1VCTEVfTUFUSF9fCisrIyAgZGVmaW5lIF9fTk9fTE9OR19ET1VCTEVfTUFUSAkxCisrIyBlbGlmICFkZWZpbmVkIF9fVUNMSUJDX0hBU19MT05HX0RPVUJMRV9NQVRIX18KKysjICBkZWZpbmUgX19OT19MT05HX0RPVUJMRV9NQVRICTEKKyAjIGVuZGlmICAvKiBfX1dPUkRTSVpFID09IDMyICovCistI2VuZGlmICAvKiBfX1VDTElCQ19IQVNfTE9OR19ET1VCTEVfTUFUSF9fICovCisrI2VuZGlmICAvKiBfX05PX0xPTkdfRE9VQkxFX01BVEggKi8KK0luZGV4OiB1Q2xpYmMtMC45LjMwLjEvbGliYy9zeXNkZXBzL2xpbnV4L2FybS9iaXRzL21hdGhkZWYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVDbGliYy0wLjkuMzAuMS9saWJjL3N5c2RlcHMvbGludXgvYXJtL2JpdHMvbWF0aGRlZi5oCShyZXZpc2lvbiAyNTU1MikKKysrKyB1Q2xpYmMtMC45LjMwLjEvbGliYy9zeXNkZXBzL2xpbnV4L2FybS9iaXRzL21hdGhkZWYuaAkod29ya2luZyBjb3B5KQorQEAgLTM0LDMgKzM0LDExIEBAIHR5cGVkZWYgZG91YmxlIGRvdWJsZV90OwkvKiBgZG91YmxlJyBleHAKKyAjIGRlZmluZSBGUF9JTE9HQk5BTgkoMjE0NzQ4MzY0NykKKyAKKyAjZW5kaWYJLyogSVNPIEM5OSAqLworKworKyNpZm5kZWYgX19OT19MT05HX0RPVUJMRV9NQVRICisrLyogU2lnbmFsIHRoYXQgd2UgZG8gbm90IHJlYWxseSBoYXZlIGEgYGxvbmcgZG91YmxlJy4gIFRoaXMgZGlzYWJsZXMgdGhlCisrICAgZGVjbGFyYXRpb24gb2YgYWxsIHRoZSBgbG9uZyBkb3VibGUnIGZ1bmN0aW9uIHZhcmlhbnRzLiAgKi8KKysvKiBYWFggVGhlIEZQQSBkb2VzIHN1cHBvcnQgdGhpcyBidXQgdGhlIHBhdHRlcm5zIGluIEdDQyBhcmUgY3VycmVudGx5CisrICAgdHVybmVkIG9mZi4gICovCisrIyBkZWZpbmUgX19OT19MT05HX0RPVUJMRV9NQVRICTEKKysjZW5kaWYKK0luZGV4OiB1Q2xpYmMtMC45LjMwLjEvbGliYy9zeXNkZXBzL2xpbnV4L202OGsvYml0cy9tYXRoZGVmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1Q2xpYmMtMC45LjMwLjEvbGliYy9zeXNkZXBzL2xpbnV4L202OGsvYml0cy9tYXRoZGVmLmgJKHJldmlzaW9uIDI1NTUyKQorKysrIHVDbGliYy0wLjkuMzAuMS9saWJjL3N5c2RlcHMvbGludXgvbTY4ay9iaXRzL21hdGhkZWYuaAkod29ya2luZyBjb3B5KQorQEAgLTM2LDMgKzM2LDcgQEAgdHlwZWRlZiBsb25nIGRvdWJsZSBkb3VibGVfdDsJLyogYGRvdWJsZQorICMgZGVmaW5lIEZQX0lMT0dCTkFOCSgyMTQ3NDgzNjQ3KQorIAorICNlbmRpZgkvKiBJU08gQzk5ICovCisrCisrI2lmICFkZWZpbmVkIF9fTk9fTE9OR19ET1VCTEVfTUFUSCAmJiAhZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9OR19ET1VCTEVfTUFUSF9fCisrIyBkZWZpbmUgX19OT19MT05HX0RPVUJMRV9NQVRICTEKKysjZW5kaWYKK0luZGV4OiB1Q2xpYmMtMC45LjMwLjEvbGliYy9zeXNkZXBzL2xpbnV4L2FscGhhL2JpdHMvd29yZHNpemUuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVDbGliYy0wLjkuMzAuMS9saWJjL3N5c2RlcHMvbGludXgvYWxwaGEvYml0cy93b3Jkc2l6ZS5oCShyZXZpc2lvbiAyNTU1MikKKysrKyB1Q2xpYmMtMC45LjMwLjEvbGliYy9zeXNkZXBzL2xpbnV4L2FscGhhL2JpdHMvd29yZHNpemUuaAkod29ya2luZyBjb3B5KQorQEAgLTE4LDEzICsxOCwxMyBAQAorIAorICNkZWZpbmUgX19XT1JEU0laRQk2NAorIAorLSNpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT05HX0RPVUJMRV9NQVRIX18gJiYgIWRlZmluZWQgX19MT05HX0RPVUJMRV9NQVRIX09QVElPTkFMCisrI2lmICFkZWZpbmVkIF9fTk9fTE9OR19ET1VCTEVfTUFUSCAmJiAhZGVmaW5lZCBfX0xPTkdfRE9VQkxFX01BVEhfT1BUSU9OQUwKKyAKKyAvKiBTaWduYWwgdGhhdCB3ZSBkaWRuJ3QgdXNlZCB0byBoYXZlIGEgYGxvbmcgZG91YmxlJy4gVGhlIGNoYW5nZXMgYWxsCisgICAgdGhlIGBsb25nIGRvdWJsZScgZnVuY3Rpb24gdmFyaWFudHMgdG8gYmUgcmVkaXJlY3RzIHRvIHRoZSBkb3VibGUKKyAgICBmdW5jdGlvbnMuICAqLworICMgZGVmaW5lIF9fTE9OR19ET1VCTEVfTUFUSF9PUFRJT05BTAkxCisgIyBpZm5kZWYgX19MT05HX0RPVUJMRV8xMjhfXworLSMgIHVuZGVmIF9fVUNMSUJDX0hBU19MT05HX0RPVUJMRV9NQVRIX18KKysjICBkZWZpbmUgX19OT19MT05HX0RPVUJMRV9NQVRICQkxCisgIyBlbmRpZgorICNlbmRpZgorSW5kZXg6IHVDbGliYy0wLjkuMzAuMS9saWJjL3N5c2RlcHMvbGludXgvYWxwaGEvYml0cy9tYXRoZGVmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1Q2xpYmMtMC45LjMwLjEvbGliYy9zeXNkZXBzL2xpbnV4L2FscGhhL2JpdHMvbWF0aGRlZi5oCShyZXZpc2lvbiAyNTU1MikKKysrKyB1Q2xpYmMtMC45LjMwLjEvbGliYy9zeXNkZXBzL2xpbnV4L2FscGhhL2JpdHMvbWF0aGRlZi5oCSh3b3JraW5nIGNvcHkpCitAQCAtNzgsMyArNzgsNyBAQCB0eXBlZGVmIGRvdWJsZSBkb3VibGVfdDsKKyAKKyAjIGVuZGlmIC8qIEdOVUMgYmVmb3JlIDMuNCAqLworICNlbmRpZiAvKiBDT01QTEVYX0ggKi8KKysKKysjaWYgIWRlZmluZWQgX19OT19MT05HX0RPVUJMRV9NQVRIICYmICFkZWZpbmVkIF9fVUNMSUJDX0hBU19MT05HX0RPVUJMRV9NQVRIX18KKysjIGRlZmluZSBfX05PX0xPTkdfRE9VQkxFX01BVEgJMQorKyNlbmRpZgorSW5kZXg6IHVDbGliYy0wLjkuMzAuMS9saWJjL3N5c2RlcHMvbGludXgvY29tbW9uL2JpdHMvbWF0aGRlZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdUNsaWJjLTAuOS4zMC4xL2xpYmMvc3lzZGVwcy9saW51eC9jb21tb24vYml0cy9tYXRoZGVmLmgJKHJldmlzaW9uIDI1NTUyKQorKysrIHVDbGliYy0wLjkuMzAuMS9saWJjL3N5c2RlcHMvbGludXgvY29tbW9uL2JpdHMvbWF0aGRlZi5oCSh3b3JraW5nIGNvcHkpCitAQCAtMzUsMyArMzUsOSBAQCB0eXBlZGVmIGRvdWJsZSBkb3VibGVfdDsJLyogYGRvdWJsZScgZXhwCisgIyBkZWZpbmUgRlBfSUxPR0JOQU4JMjE0NzQ4MzY0NworIAorICNlbmRpZgkvKiBJU08gQzk5ICovCisrCisrI2lmbmRlZiBfX05PX0xPTkdfRE9VQkxFX01BVEgKKysvKiBTaWduYWwgdGhhdCB3ZSBkbyBub3QgcmVhbGx5IGhhdmUgYSBgbG9uZyBkb3VibGUnLiAgVGhlIGRpc2FibGVzIHRoZQorKyAgIGRlY2xhcmF0aW9uIG9mIGFsbCB0aGUgYGxvbmcgZG91YmxlJyBmdW5jdGlvbiB2YXJpYW50cy4gICovCisrIyBkZWZpbmUgX19OT19MT05HX0RPVUJMRV9NQVRICTEKKysjZW5kaWYKK0luZGV4OiB1Q2xpYmMtMC45LjMwLjEvbGliYy9zeXNkZXBzL2xpbnV4L2kzODYvYml0cy9tYXRoZGVmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1Q2xpYmMtMC45LjMwLjEvbGliYy9zeXNkZXBzL2xpbnV4L2kzODYvYml0cy9tYXRoZGVmLmgJKHJldmlzaW9uIDI1NTUyKQorKysrIHVDbGliYy0wLjkuMzAuMS9saWJjL3N5c2RlcHMvbGludXgvaTM4Ni9iaXRzL21hdGhkZWYuaAkod29ya2luZyBjb3B5KQorQEAgLTQ0LDMgKzQ0LDcgQEAgdHlwZWRlZiBsb25nIGRvdWJsZSBkb3VibGVfdDsJLyogYGRvdWJsZQorICMgZGVmaW5lIEZQX0lMT0dCTkFOCSgtMjE0NzQ4MzY0NyAtIDEpCisgCisgI2VuZGlmCS8qIElTTyBDOTkgKi8KKysKKysjaWYgIWRlZmluZWQgX19OT19MT05HX0RPVUJMRV9NQVRIICYmICFkZWZpbmVkIF9fVUNMSUJDX0hBU19MT05HX0RPVUJMRV9NQVRIX18KKysjIGRlZmluZSBfX05PX0xPTkdfRE9VQkxFX01BVEgJMQorKyNlbmRpZgorSW5kZXg6IHVDbGliYy0wLjkuMzAuMS9saWJjL3N5c2RlcHMvbGludXgvbmlvczIvYml0cy9tYXRoZGVmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1Q2xpYmMtMC45LjMwLjEvbGliYy9zeXNkZXBzL2xpbnV4L25pb3MyL2JpdHMvbWF0aGRlZi5oCShyZXZpc2lvbiAyNTU1MikKKysrKyB1Q2xpYmMtMC45LjMwLjEvbGliYy9zeXNkZXBzL2xpbnV4L25pb3MyL2JpdHMvbWF0aGRlZi5oCSh3b3JraW5nIGNvcHkpCitAQCAtMzQsMyArMzQsMTEgQEAgdHlwZWRlZiBkb3VibGUgZG91YmxlX3Q7CS8qIGBkb3VibGUnIGV4cAorICMgZGVmaW5lIEZQX0lMT0dCTkFOCSgyMTQ3NDgzNjQ3KQorIAorICNlbmRpZgkvKiBJU08gQzk5ICovCisrCisrI2lmbmRlZiBfX05PX0xPTkdfRE9VQkxFX01BVEgKKysvKiBTaWduYWwgdGhhdCB3ZSBkbyBub3QgcmVhbGx5IGhhdmUgYSBgbG9uZyBkb3VibGUnLiAgVGhpcyBkaXNhYmxlcyB0aGUKKysgICBkZWNsYXJhdGlvbiBvZiBhbGwgdGhlIGBsb25nIGRvdWJsZScgZnVuY3Rpb24gdmFyaWFudHMuICAqLworKy8qIFhYWCBUaGUgRlBBIGRvZXMgc3VwcG9ydCB0aGlzIGJ1dCB0aGUgcGF0dGVybnMgaW4gR0NDIGFyZSBjdXJyZW50bHkKKysgICB0dXJuZWQgb2ZmLiAgKi8KKysjIGRlZmluZSBfX05PX0xPTkdfRE9VQkxFX01BVEgJMQorKyNlbmRpZgorSW5kZXg6IHVDbGliYy0wLjkuMzAuMS9saWJjL3N5c2RlcHMvbGludXgveDg2XzY0L2JpdHMvbWF0aGRlZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdUNsaWJjLTAuOS4zMC4xL2xpYmMvc3lzZGVwcy9saW51eC94ODZfNjQvYml0cy9tYXRoZGVmLmgJKHJldmlzaW9uIDI1NTUyKQorKysrIHVDbGliYy0wLjkuMzAuMS9saWJjL3N5c2RlcHMvbGludXgveDg2XzY0L2JpdHMvbWF0aGRlZi5oCSh3b3JraW5nIGNvcHkpCitAQCAtNDYsMyArNDYsNyBAQCB0eXBlZGVmIGxvbmcgZG91YmxlIGRvdWJsZV90OwkvKiBgZG91YmxlCisgIyBkZWZpbmUgRlBfSUxPR0JOQU4JKC0yMTQ3NDgzNjQ3IC0gMSkKKyAKKyAjZW5kaWYJLyogSVNPIEM5OSAqLworKworKyNpZiAhZGVmaW5lZCBfX05PX0xPTkdfRE9VQkxFX01BVEggJiYgIWRlZmluZWQgX19VQ0xJQkNfSEFTX0xPTkdfRE9VQkxFX01BVEhfXworKyMgZGVmaW5lIF9fTk9fTE9OR19ET1VCTEVfTUFUSAkxCisrI2VuZGlmCitJbmRleDogdUNsaWJjLTAuOS4zMC4xL2xpYmMvc3lzZGVwcy9saW51eC94dGVuc2EvYml0cy9tYXRoZGVmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1Q2xpYmMtMC45LjMwLjEvbGliYy9zeXNkZXBzL2xpbnV4L3h0ZW5zYS9iaXRzL21hdGhkZWYuaAkocmV2aXNpb24gMjU1NTIpCisrKysgdUNsaWJjLTAuOS4zMC4xL2xpYmMvc3lzZGVwcy9saW51eC94dGVuc2EvYml0cy9tYXRoZGVmLmgJKHdvcmtpbmcgY29weSkKK0BAIC0zNiw4ICszNiw4IEBAIHR5cGVkZWYgZG91YmxlIGRvdWJsZV90OwkvKiBgZG91YmxlJyBleHAKKyAKKyAjZW5kaWYJLyogSVNPIEM5OSAqLworIAorLSNpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT05HX0RPVUJMRV9NQVRIX18KKysjaWZuZGVmIF9fTk9fTE9OR19ET1VCTEVfTUFUSAorIC8qIFNpZ25hbCB0aGF0IHdlIGRvIG5vdCByZWFsbHkgaGF2ZSBhIGBsb25nIGRvdWJsZScuICBUaGUgZGlzYWJsZXMgdGhlCisgICAgZGVjbGFyYXRpb24gb2YgYWxsIHRoZSBgbG9uZyBkb3VibGUnIGZ1bmN0aW9uIHZhcmlhbnRzLiAgKi8KKy0jIHVuZGVmIF9fVUNMSUJDX0hBU19MT05HX0RPVUJMRV9NQVRIX18KKysjIGRlZmluZSBfX05PX0xPTkdfRE9VQkxFX01BVEgJMQorICNlbmRpZgorSW5kZXg6IHVDbGliYy0wLjkuMzAuMS9saWJjL3N5c2RlcHMvbGludXgvaWE2NC9iaXRzL21hdGhkZWYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVDbGliYy0wLjkuMzAuMS9saWJjL3N5c2RlcHMvbGludXgvaWE2NC9iaXRzL21hdGhkZWYuaAkocmV2aXNpb24gMjU1NTIpCisrKysgdUNsaWJjLTAuOS4zMC4xL2xpYmMvc3lzZGVwcy9saW51eC9pYTY0L2JpdHMvbWF0aGRlZi5oCSh3b3JraW5nIGNvcHkpCitAQCAtMzUsMyArMzUsNyBAQCB0eXBlZGVmIGRvdWJsZSBkb3VibGVfdDsJLyogYGRvdWJsZScgZXhwCisgIyBkZWZpbmUgRlBfSUxPR0JOQU4JMjE0NzQ4MzY0NworIAorICNlbmRpZgkvKiBJU08gQzk5ICovCisrCisrI2lmICFkZWZpbmVkIF9fTk9fTE9OR19ET1VCTEVfTUFUSCAmJiAhZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9OR19ET1VCTEVfTUFUSF9fCisrIyBkZWZpbmUgX19OT19MT05HX0RPVUJMRV9NQVRICTEKKysjZW5kaWYKK0luZGV4OiB1Q2xpYmMtMC45LjMwLjEvbGliYy9zeXNkZXBzL2xpbnV4L21pcHMvYml0cy9tYXRoZGVmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1Q2xpYmMtMC45LjMwLjEvbGliYy9zeXNkZXBzL2xpbnV4L21pcHMvYml0cy9tYXRoZGVmLmgJKHJldmlzaW9uIDI1NTUyKQorKysrIHVDbGliYy0wLjkuMzAuMS9saWJjL3N5c2RlcHMvbGludXgvbWlwcy9iaXRzL21hdGhkZWYuaAkod29ya2luZyBjb3B5KQorQEAgLTM5LDggKzM5LDEwIEBAIHR5cGVkZWYgZG91YmxlIGRvdWJsZV90OwkvKiBgZG91YmxlJyBleHAKKyAKKyAjZW5kaWYJLyogSVNPIEM5OSAqLworIAorLSNpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT05HX0RPVUJMRV9NQVRIX18gJiYgX01JUFNfU0lNID09IF9BQklPMzIKKysjaWYgISBkZWZpbmVkIF9fTk9fTE9OR19ET1VCTEVfTUFUSCAmJiBfTUlQU19TSU0gPT0gX0FCSU8zMgorIC8qIFNpZ25hbCB0aGF0IHdlIGRvIG5vdCByZWFsbHkgaGF2ZSBhIGBsb25nIGRvdWJsZScuICBUaGlzIGRpc2FibGVzIHRoZQorICAgIGRlY2xhcmF0aW9uIG9mIGFsbCB0aGUgYGxvbmcgZG91YmxlJyBmdW5jdGlvbiB2YXJpYW50cy4gICovCistIyBlcnJvciBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT05HX0RPVUJMRV9NQVRIX18gYW5kIF9NSVBTX1NJTSA9PSBfQUJJTzMyCisrIyBkZWZpbmUgX19OT19MT05HX0RPVUJMRV9NQVRICTEKKysjZWxpZiAhZGVmaW5lZCBfX05PX0xPTkdfRE9VQkxFX01BVEggJiYgIWRlZmluZWQgX19VQ0xJQkNfSEFTX0xPTkdfRE9VQkxFX01BVEhfXworKyMgZGVmaW5lIF9fTk9fTE9OR19ET1VCTEVfTUFUSAkxCisgI2VuZGlmCitJbmRleDogdUNsaWJjLTAuOS4zMC4xL2xpYmMvc3lzZGVwcy9saW51eC9uaW9zL2JpdHMvbWF0aGRlZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdUNsaWJjLTAuOS4zMC4xL2xpYmMvc3lzZGVwcy9saW51eC9uaW9zL2JpdHMvbWF0aGRlZi5oCShyZXZpc2lvbiAyNTU1MikKKysrKyB1Q2xpYmMtMC45LjMwLjEvbGliYy9zeXNkZXBzL2xpbnV4L25pb3MvYml0cy9tYXRoZGVmLmgJKHdvcmtpbmcgY29weSkKK0BAIC0zNCwzICszNCwxMSBAQCB0eXBlZGVmIGRvdWJsZSBkb3VibGVfdDsJLyogYGRvdWJsZScgZXhwCisgIyBkZWZpbmUgRlBfSUxPR0JOQU4JKDIxNDc0ODM2NDcpCisgCisgI2VuZGlmCS8qIElTTyBDOTkgKi8KKysKKysjaWZuZGVmIF9fTk9fTE9OR19ET1VCTEVfTUFUSAorKy8qIFNpZ25hbCB0aGF0IHdlIGRvIG5vdCByZWFsbHkgaGF2ZSBhIGBsb25nIGRvdWJsZScuICBUaGlzIGRpc2FibGVzIHRoZQorKyAgIGRlY2xhcmF0aW9uIG9mIGFsbCB0aGUgYGxvbmcgZG91YmxlJyBmdW5jdGlvbiB2YXJpYW50cy4gICovCisrLyogWFhYIFRoZSBGUEEgZG9lcyBzdXBwb3J0IHRoaXMgYnV0IHRoZSBwYXR0ZXJucyBpbiBHQ0MgYXJlIGN1cnJlbnRseQorKyAgIHR1cm5lZCBvZmYuICAqLworKyMgZGVmaW5lIF9fTk9fTE9OR19ET1VCTEVfTUFUSAkxCisrI2VuZGlmCitJbmRleDogdUNsaWJjLTAuOS4zMC4xL2xpYmMvc3lzZGVwcy9saW51eC9zcGFyYy9iaXRzL3dvcmRzaXplLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1Q2xpYmMtMC45LjMwLjEvbGliYy9zeXNkZXBzL2xpbnV4L3NwYXJjL2JpdHMvd29yZHNpemUuaAkocmV2aXNpb24gMjU1NTIpCisrKysgdUNsaWJjLTAuOS4zMC4xL2xpYmMvc3lzZGVwcy9saW51eC9zcGFyYy9iaXRzL3dvcmRzaXplLmgJKHdvcmtpbmcgY29weSkKK0BAIC02LDcgKzYsNyBAQAorICMgZGVmaW5lIF9fV09SRFNJWkUJMzIKKyAjZW5kaWYKKyAKKy0jaWYgMCAvKiB1Q2xpYmM6IGRvbmUgaW4gbWF0aGRlZnMuaDogZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9OR19ET1VCTEVfTUFUSF9fICYmICFkZWZpbmVkIF9fTE9OR19ET1VCTEVfTUFUSF9PUFRJT05BTCovCisrI2lmIDAgLyogdUNsaWJjOiBkb25lIGluIG1hdGhkZWZzLmg6ICFkZWZpbmVkIF9fTk9fTE9OR19ET1VCTEVfTUFUSCAmJiAhZGVmaW5lZCBfX0xPTkdfRE9VQkxFX01BVEhfT1BUSU9OQUwqLworIAorICMgaWYgX19XT1JEU0laRSA9PSAzMgorIC8qIFNpZ25hbCB0aGF0IGluIDMyYml0IEFCSSB3ZSBkaWRuJ3QgdXNlZCB0byBoYXZlIGEgYGxvbmcgZG91YmxlJy4KK0BAIC0xNCw3ICsxNCw3IEBACisgICAgdG8gdGhlIGRvdWJsZSBmdW5jdGlvbnMuICAqLworICMgIGRlZmluZSBfX0xPTkdfRE9VQkxFX01BVEhfT1BUSU9OQUwgICAxCisgIyAgaWZuZGVmIF9fTE9OR19ET1VCTEVfMTI4X18KKy0jICAgdW5kZWYgX19VQ0xJQkNfSEFTX0xPTkdfRE9VQkxFX01BVEhfXworKyMgICBkZWZpbmUgX19OT19MT05HX0RPVUJMRV9NQVRIICAgICAgICAxCisgIyAgZW5kaWYKKyAjIGVuZGlmCisgI2VuZGlmCitJbmRleDogdUNsaWJjLTAuOS4zMC4xL2xpYmMvc3lzZGVwcy9saW51eC9zcGFyYy9iaXRzL21hdGhkZWYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVDbGliYy0wLjkuMzAuMS9saWJjL3N5c2RlcHMvbGludXgvc3BhcmMvYml0cy9tYXRoZGVmLmgJKHJldmlzaW9uIDI1NTUyKQorKysrIHVDbGliYy0wLjkuMzAuMS9saWJjL3N5c2RlcHMvbGludXgvc3BhcmMvYml0cy9tYXRoZGVmLmgJKHdvcmtpbmcgY29weSkKK0BAIC01NywxMyArNTcsMTUgQEAgdHlwZWRlZiBkb3VibGUgZG91YmxlX3Q7CisgCisgI2VuZGlmCS8qIElTTyBDOTkgKi8KKyAKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0xPTkdfRE9VQkxFX01BVEhfXworKyNpZm5kZWYgX19OT19MT05HX0RPVUJMRV9NQVRICisgCisgIyBpZiBfX1dPUkRTSVpFID09IDMyCisgLyogU2lnbmFsIHRoYXQgaW4gMzJiaXQgQUJJIHdlIGRvIG5vdCByZWFsbHkgaGF2ZSBhIGBsb25nIGRvdWJsZScuCisgICAgVGhlIGRpc2FibGVzIHRoZSBkZWNsYXJhdGlvbiBvZiBhbGwgdGhlIGBsb25nIGRvdWJsZScgZnVuY3Rpb24KKyAgICB2YXJpYW50cy4gICovCistIyAgdW5kZWYgX19VQ0xJQkNfSEFTX0xPTkdfRE9VQkxFX01BVEhfXworKyMgIGRlZmluZSBfX05PX0xPTkdfRE9VQkxFX01BVEgJMQorKyMgZWxpZiAhZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9OR19ET1VCTEVfTUFUSF9fCisrIyAgZGVmaW5lIF9fTk9fTE9OR19ET1VCTEVfTUFUSAkxCisgIyBlbmRpZgorIAorICNlbmRpZgorSW5kZXg6IHVDbGliYy0wLjkuMzAuMS9saWJjL3N5c2RlcHMvbGludXgvc3BhcmMvYml0cy9tYXRoaW5saW5lLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1Q2xpYmMtMC45LjMwLjEvbGliYy9zeXNkZXBzL2xpbnV4L3NwYXJjL2JpdHMvbWF0aGlubGluZS5oCShyZXZpc2lvbiAyNTU1MikKKysrKyB1Q2xpYmMtMC45LjMwLjEvbGliYy9zeXNkZXBzL2xpbnV4L3NwYXJjL2JpdHMvbWF0aGlubGluZS5oCSh3b3JraW5nIGNvcHkpCitAQCAtMzcsNyArMzcsNyBAQAorIAorICMgaWYgX19XT1JEU0laRSA9PSAzMgorIAorLSMgIGlmZGVmIF9fVUNMSUJDX0hBU19MT05HX0RPVUJMRV9NQVRIX18KKysjICBpZm5kZWYgX19OT19MT05HX0RPVUJMRV9NQVRICisgCisgIyAgIGRlZmluZSBfX3Vub3JkZXJlZF9jbXAoeCwgeSkgXAorICAgKF9fZXh0ZW5zaW9uX18JCQkJCQkJICAgICAgXAorQEAgLTE1Nyw3ICsxNTcsNyBAQCBfX05USCAoX19zaWduYml0IChkb3VibGUgX194KSkKKyAgIHJldHVybiBfX3UuX19pWzBdIDwgMDsKKyB9CisgCistIyAgICBpZmRlZiBfX1VDTElCQ19IQVNfTE9OR19ET1VCTEVfTUFUSF9fCisrIyAgICBpZm5kZWYgX19OT19MT05HX0RPVUJMRV9NQVRICisgX19NQVRIX0lOTElORSBpbnQKKyBfX05USCAoX19zaWduYml0bCAobG9uZyBkb3VibGUgX194KSkKKyB7CitAQCAtMjE5LDcgKzIxOSw3IEBAIF9fTlRIIChzcXJ0bCAobG9uZyBkb3VibGUgX194KSkKKyAgIF9RcF9zcXJ0ICgmX19yLCAmX194KTsKKyAgIHJldHVybiBfX3I7CisgfQorLSMgICBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPTkdfRE9VQkxFX01BVEhfXworKyMgICBlbGlmICFkZWZpbmVkIF9fTk9fTE9OR19ET1VCTEVfTUFUSAorIF9fTUFUSF9JTkxJTkUgbG9uZyBkb3VibGUKKyBzcXJ0bCAobG9uZyBkb3VibGUgX194KSBfX1RIUk9XCisgeworQEAgLTI1Nyw3ICsyNTcsNyBAQCBfX2llZWU3NTRfc3FydGwgKGxvbmcgZG91YmxlIF9feCkKKyAgIF9RcF9zcXJ0KCZfX3IsICZfX3gpOworICAgcmV0dXJuIF9fcjsKKyB9CistIyAgIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9OR19ET1VCTEVfTUFUSF9fCisrIyAgIGVsaWYgIWRlZmluZWQgX19OT19MT05HX0RPVUJMRV9NQVRICisgX19NQVRIX0lOTElORSBsb25nIGRvdWJsZQorIF9faWVlZTc1NF9zcXJ0bCAobG9uZyBkb3VibGUgX194KQorIHsKK0luZGV4OiB1Q2xpYmMtMC45LjMwLjEvbGliYy9zeXNkZXBzL2xpbnV4L3NoL2JpdHMvbWF0aGRlZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdUNsaWJjLTAuOS4zMC4xL2xpYmMvc3lzZGVwcy9saW51eC9zaC9iaXRzL21hdGhkZWYuaAkocmV2aXNpb24gMjU1NTIpCisrKysgdUNsaWJjLTAuOS4zMC4xL2xpYmMvc3lzZGVwcy9saW51eC9zaC9iaXRzL21hdGhkZWYuaAkod29ya2luZyBjb3B5KQorQEAgLTYxLDMgKzYxLDkgQEAgdHlwZWRlZiBkb3VibGUgZG91YmxlX3Q7CisgIyBkZWZpbmUgRlBfSUxPR0JOQU4JMHg3ZmZmZmZmZgorIAorICNlbmRpZgkvKiBJU08gQzk5ICovCisrCisrI2lmbmRlZiBfX05PX0xPTkdfRE9VQkxFX01BVEgKKysvKiBTaWduYWwgdGhhdCB3ZSBkbyBub3QgcmVhbGx5IGhhdmUgYSBgbG9uZyBkb3VibGUnLiAgVGhlIGRpc2FibGVzIHRoZQorKyAgIGRlY2xhcmF0aW9uIG9mIGFsbCB0aGUgYGxvbmcgZG91YmxlJyBmdW5jdGlvbiB2YXJpYW50cy4gICovCisrIyBkZWZpbmUgX19OT19MT05HX0RPVUJMRV9NQVRICTEKKysjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjEvMTcwLWRsLXN5c2RlcC1pbmxpbmUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4xLzE3MC1kbC1zeXNkZXAtaW5saW5lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MGQ2NmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4xLzE3MC1kbC1zeXNkZXAtaW5saW5lLnBhdGNoCkBAIC0wLDAgKzEsMzcxIEBACitJbmRleDogdUNsaWJjLTAuOS4zMC4xL2xkc28vbGRzby9hcm0vZGwtc3lzZGVwLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1Q2xpYmMtMC45LjMwLjEvbGRzby9sZHNvL2FybS9kbC1zeXNkZXAuaAkocmV2aXNpb24gMjU1MDMpCisrKysgdUNsaWJjLTAuOS4zMC4xL2xkc28vbGRzby9hcm0vZGwtc3lzZGVwLmgJKHdvcmtpbmcgY29weSkKK0BAIC0xNyw3ICsxNyw3IEBACisgCisgI2RlZmluZSBETF9NQUxMT0NfQUxJR04gOCAgLyogRUFCSSBuZWVkcyA4IGJ5dGUgYWxpZ25tZW50IGZvciBTVFJEIExEUkQqLworIAorLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgYXJtX21vZHVsdXModW5zaWduZWQgbG9uZyBtLCB1bnNpZ25lZCBsb25nIHApCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIGFybV9tb2R1bHVzKHVuc2lnbmVkIGxvbmcgbSwgdW5zaWduZWQgbG9uZyBwKQorIHsKKyAJdW5zaWduZWQgbG9uZyBpLHQsaW5jOworIAlpPXA7IHQ9MDsKK0BAIC03NCw3ICs3NCw3IEBAIHVuc2lnbmVkIGxvbmcgX2RsX2xpbnV4X3Jlc29sdmVyKHN0cnVjdCAKKyAgICBmaXJzdCBlbGVtZW50IG9mIHRoZSBHT1QuICBXZSB1c2VkIHRvIHVzZSB0aGUgUElDIHJlZ2lzdGVyIHRvIGRvIHRoaXMKKyAgICB3aXRob3V0IGEgY29uc3RhbnQgcG9vbCByZWZlcmVuY2UsIGJ1dCBHQ0MgNC4yIHdpbGwgdXNlIGEgcHNldWRvLXJlZ2lzdGVyCisgICAgZm9yIHRoZSBQSUMgYmFzZSwgc28gaXQgbWF5IG5vdCBiZSBpbiByMTAuICAqLworLXN0YXRpYyBfX2lubGluZV9fIEVsZjMyX0FkZHIgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSBFbGYzMl9BZGRyIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKQorIGVsZl9tYWNoaW5lX2R5bmFtaWMgKHZvaWQpCisgeworICAgRWxmMzJfQWRkciBkeW5hbWljOworQEAgLTEwNiw3ICsxMDYsNyBAQCBlbGZfbWFjaGluZV9keW5hbWljICh2b2lkKQorIH0KKyAKKyAvKiBSZXR1cm4gdGhlIHJ1bi10aW1lIGxvYWQgYWRkcmVzcyBvZiB0aGUgc2hhcmVkIG9iamVjdC4gICovCistc3RhdGljIF9faW5saW5lX18gRWxmMzJfQWRkciBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIEVsZjMyX0FkZHIgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCisgZWxmX21hY2hpbmVfbG9hZF9hZGRyZXNzICh2b2lkKQorIHsKKyAJZXh0ZXJuIHZvaWQgX19kbF9zdGFydCBfX2FzbV9fICgiX2RsX3N0YXJ0Iik7CitAQCAtMTMwLDcgKzEzMCw3IEBAIGVsZl9tYWNoaW5lX2xvYWRfYWRkcmVzcyAodm9pZCkKKyAJcmV0dXJuIHBjcmVsX2FkZHIgLSBnb3RfYWRkcjsKKyB9CisgCistc3RhdGljIF9faW5saW5lX18gdm9pZAorK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZAorIGVsZl9tYWNoaW5lX3JlbGF0aXZlIChFbGYzMl9BZGRyIGxvYWRfb2ZmLCBjb25zdCBFbGYzMl9BZGRyIHJlbF9hZGRyLAorIAkJICAgICAgRWxmMzJfV29yZCByZWxhdGl2ZV9jb3VudCkKKyB7CitJbmRleDogdUNsaWJjLTAuOS4zMC4xL2xkc28vbGRzby9wb3dlcnBjL2RsLXN5c2RlcC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdUNsaWJjLTAuOS4zMC4xL2xkc28vbGRzby9wb3dlcnBjL2RsLXN5c2RlcC5oCShyZXZpc2lvbiAyNTUwMykKKysrKyB1Q2xpYmMtMC45LjMwLjEvbGRzby9sZHNvL3Bvd2VycGMvZGwtc3lzZGVwLmgJKHdvcmtpbmcgY29weSkKK0BAIC05MCw3ICs5MCw3IEBAIHZvaWQgX2RsX2luaXRfZ290KHVuc2lnbmVkIGxvbmcgKmxwbnQsc3QKKyAjZGVmaW5lIEVMRl9NQUNISU5FX1BMVFJFTF9PVkVSTEFQIDEKKyAKKyAvKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBHT1QgcG9pbnRlci4gICovCistc3RhdGljIF9faW5saW5lX18gRWxmMzJfQWRkciAqIF9fYXR0cmlidXRlX18gKChjb25zdCkpCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSBFbGYzMl9BZGRyICogX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSkKKyBwcGNfZ290ICh2b2lkKQorIHsKKyAJRWxmMzJfQWRkciAqZ290OworQEAgLTEwOSwxNCArMTA5LDE0IEBAIHBwY19nb3QgKHZvaWQpCisgCisgLyogUmV0dXJuIHRoZSBsaW5rLXRpbWUgYWRkcmVzcyBvZiBfRFlOQU1JQywgc3RvcmVkIGFzCisgICAgdGhlIGZpcnN0IHZhbHVlIGluIHRoZSBHT1QuICovCistc3RhdGljIF9faW5saW5lX18gRWxmMzJfQWRkciBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKQorK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgRWxmMzJfQWRkciBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKQorIGVsZl9tYWNoaW5lX2R5bmFtaWMgKHZvaWQpCisgeworIAlyZXR1cm4gKnBwY19nb3QoKTsKKyB9CisgCisgLyogUmV0dXJuIHRoZSBydW4tdGltZSBsb2FkIGFkZHJlc3Mgb2YgdGhlIHNoYXJlZCBvYmplY3QuICAqLworLXN0YXRpYyBfX2lubGluZV9fIEVsZjMyX0FkZHIgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSkKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIEVsZjMyX0FkZHIgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSkKKyBlbGZfbWFjaGluZV9sb2FkX2FkZHJlc3MgKHZvaWQpCisgeworICAgRWxmMzJfQWRkciAqYnJhbmNoYWRkcjsKK0BAIC0xNjQsNyArMTY0LDcgQEAgZWxmX21hY2hpbmVfbG9hZF9hZGRyZXNzICh2b2lkKQorICAgcmV0dXJuIHJ1bnRpbWVfZHluYW1pYyAtIGVsZl9tYWNoaW5lX2R5bmFtaWMgKCk7CisgfQorIAorLXN0YXRpYyBfX2lubGluZV9fIHZvaWQKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQKKyBlbGZfbWFjaGluZV9yZWxhdGl2ZSAoRWxmMzJfQWRkciBsb2FkX29mZiwgY29uc3QgRWxmMzJfQWRkciByZWxfYWRkciwKKyAJCSAgICAgIEVsZjMyX1dvcmQgcmVsYXRpdmVfY291bnQpCisgeworSW5kZXg6IHVDbGliYy0wLjkuMzAuMS9sZHNvL2xkc28vc2g2NC9kbC1zeXNkZXAuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVDbGliYy0wLjkuMzAuMS9sZHNvL2xkc28vc2g2NC9kbC1zeXNkZXAuaAkocmV2aXNpb24gMjU1MDMpCisrKysgdUNsaWJjLTAuOS4zMC4xL2xkc28vbGRzby9zaDY0L2RsLXN5c2RlcC5oCSh3b3JraW5nIGNvcHkpCitAQCAtNDIsNyArNDIsNyBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBfZGxfbGludXhfcmVzb2x2ZXIoCisgLyogUmV0dXJuIHRoZSBsaW5rLXRpbWUgYWRkcmVzcyBvZiBfRFlOQU1JQy4gIENvbnZlbmllbnRseSwgdGhpcyBpcyB0aGUKKyAgICBmaXJzdCBlbGVtZW50IG9mIHRoZSBHT1QuICBUaGlzIG11c3QgYmUgaW5saW5lZCBpbiBhIGZ1bmN0aW9uIHdoaWNoCisgICAgdXNlcyBnbG9iYWwgZGF0YS4gICovCistc3RhdGljIF9faW5saW5lX18gRWxmMzJfQWRkciBlbGZfbWFjaGluZV9keW5hbWljKHZvaWQpCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSBFbGYzMl9BZGRyIGVsZl9tYWNoaW5lX2R5bmFtaWModm9pZCkKKyB7CisgCXJlZ2lzdGVyIEVsZjMyX0FkZHIgKmdvdDsKKyAKK0BAIC03MCw3ICs3MCw3IEBAIHN0YXRpYyBfX2lubGluZV9fIEVsZjMyX0FkZHIgZWxmX21hY2hpbmUKKyB9CisgCisgLyogUmV0dXJuIHRoZSBydW4tdGltZSBsb2FkIGFkZHJlc3Mgb2YgdGhlIHNoYXJlZCBvYmplY3QuICAqLworLXN0YXRpYyBfX2lubGluZV9fIEVsZjMyX0FkZHIgZWxmX21hY2hpbmVfbG9hZF9hZGRyZXNzKHZvaWQpCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSBFbGYzMl9BZGRyIGVsZl9tYWNoaW5lX2xvYWRfYWRkcmVzcyh2b2lkKQorIHsKKyAJRWxmMzJfQWRkciBhZGRyOworIAorQEAgLTEyMyw3ICsxMjMsNyBAQCBzdGF0aWMgX19pbmxpbmVfXyBFbGYzMl9BZGRyIGVsZl9tYWNoaW5lCisgCX0JCQkJCQlcCisgfQorIAorLXN0YXRpYyBfX2lubGluZV9fIHZvaWQKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQKKyBlbGZfbWFjaGluZV9yZWxhdGl2ZShFbGYzMl9BZGRyIGxvYWRfb2ZmLCBjb25zdCBFbGYzMl9BZGRyIHJlbF9hZGRyLAorIAkJICAgICBFbGYzMl9Xb3JkIHJlbGF0aXZlX2NvdW50KQorIHsKK0luZGV4OiB1Q2xpYmMtMC45LjMwLjEvbGRzby9sZHNvL202OGsvZGwtc3lzZGVwLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1Q2xpYmMtMC45LjMwLjEvbGRzby9sZHNvL202OGsvZGwtc3lzZGVwLmgJKHJldmlzaW9uIDI1NTAzKQorKysrIHVDbGliYy0wLjkuMzAuMS9sZHNvL2xkc28vbTY4ay9kbC1zeXNkZXAuaAkod29ya2luZyBjb3B5KQorQEAgLTQxLDcgKzQxLDcgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX2RsX2xpbnV4X3Jlc29sdmVyIAorIC8qIFJldHVybiB0aGUgbGluay10aW1lIGFkZHJlc3Mgb2YgX0RZTkFNSUMuICBDb252ZW5pZW50bHksIHRoaXMgaXMgdGhlCisgICAgZmlyc3QgZWxlbWVudCBvZiB0aGUgR09ULiAgVGhpcyBtdXN0IGJlIGlubGluZWQgaW4gYSBmdW5jdGlvbiB3aGljaAorICAgIHVzZXMgZ2xvYmFsIGRhdGEuICAqLworLXN0YXRpYyBfX2lubGluZV9fIEVsZjMyX0FkZHIKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIEVsZjMyX0FkZHIKKyBlbGZfbWFjaGluZV9keW5hbWljICh2b2lkKQorIHsKKyAJcmVnaXN0ZXIgRWxmMzJfQWRkciAqZ290IF9fYXNtX18gKCIlYTUiKTsKK0BAIC01MCw3ICs1MCw3IEBAIGVsZl9tYWNoaW5lX2R5bmFtaWMgKHZvaWQpCisgCisgCisgLyogUmV0dXJuIHRoZSBydW4tdGltZSBsb2FkIGFkZHJlc3Mgb2YgdGhlIHNoYXJlZCBvYmplY3QuICAqLworLXN0YXRpYyBfX2lubGluZV9fIEVsZjMyX0FkZHIKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIEVsZjMyX0FkZHIKKyBlbGZfbWFjaGluZV9sb2FkX2FkZHJlc3MgKHZvaWQpCisgeworIAlFbGYzMl9BZGRyIGFkZHI7CitAQCAtNjAsNyArNjAsNyBAQCBlbGZfbWFjaGluZV9sb2FkX2FkZHJlc3MgKHZvaWQpCisgCXJldHVybiBhZGRyOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmVfXyB2b2lkCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkCisgZWxmX21hY2hpbmVfcmVsYXRpdmUgKEVsZjMyX0FkZHIgbG9hZF9vZmYsIGNvbnN0IEVsZjMyX0FkZHIgcmVsX2FkZHIsCisgCQkgICAgICBFbGYzMl9Xb3JkIHJlbGF0aXZlX2NvdW50KQorIHsKK0luZGV4OiB1Q2xpYmMtMC45LjMwLjEvbGRzby9sZHNvL2kzODYvZGwtc3lzZGVwLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1Q2xpYmMtMC45LjMwLjEvbGRzby9sZHNvL2kzODYvZGwtc3lzZGVwLmgJKHJldmlzaW9uIDI1NTAzKQorKysrIHVDbGliYy0wLjkuMzAuMS9sZHNvL2xkc28vaTM4Ni9kbC1zeXNkZXAuaAkod29ya2luZyBjb3B5KQorQEAgLTQyLDggKzQyLDggQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX2RsX2xpbnV4X3Jlc29sdmVyKAorIC8qIFJldHVybiB0aGUgbGluay10aW1lIGFkZHJlc3Mgb2YgX0RZTkFNSUMuICBDb252ZW5pZW50bHksIHRoaXMgaXMgdGhlCisgICAgZmlyc3QgZWxlbWVudCBvZiB0aGUgR09ULiAgVGhpcyBtdXN0IGJlIGlubGluZWQgaW4gYSBmdW5jdGlvbiB3aGljaAorICAgIHVzZXMgZ2xvYmFsIGRhdGEuICAqLworLXN0YXRpYyBfX2lubGluZV9fIEVsZjMyX0FkZHIgZWxmX21hY2hpbmVfZHluYW1pYyAodm9pZCkgYXR0cmlidXRlX3VudXNlZDsKKy1zdGF0aWMgX19pbmxpbmVfXyBFbGYzMl9BZGRyCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSBFbGYzMl9BZGRyIGVsZl9tYWNoaW5lX2R5bmFtaWMgKHZvaWQpIGF0dHJpYnV0ZV91bnVzZWQ7Cisrc3RhdGljIF9fYWx3YXlzX2lubGluZSBFbGYzMl9BZGRyCisgZWxmX21hY2hpbmVfZHluYW1pYyAodm9pZCkKKyB7CisgCXJlZ2lzdGVyIEVsZjMyX0FkZHIgKmdvdCBfX2FzbV9fICgiJWVieCIpOworQEAgLTUyLDggKzUyLDggQEAgZWxmX21hY2hpbmVfZHluYW1pYyAodm9pZCkKKyAKKyAKKyAvKiBSZXR1cm4gdGhlIHJ1bi10aW1lIGxvYWQgYWRkcmVzcyBvZiB0aGUgc2hhcmVkIG9iamVjdC4gICovCistc3RhdGljIF9faW5saW5lX18gRWxmMzJfQWRkciBlbGZfbWFjaGluZV9sb2FkX2FkZHJlc3MgKHZvaWQpIGF0dHJpYnV0ZV91bnVzZWQ7Cistc3RhdGljIF9faW5saW5lX18gRWxmMzJfQWRkcgorK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgRWxmMzJfQWRkciBlbGZfbWFjaGluZV9sb2FkX2FkZHJlc3MgKHZvaWQpIGF0dHJpYnV0ZV91bnVzZWQ7Cisrc3RhdGljIF9fYWx3YXlzX2lubGluZSBFbGYzMl9BZGRyCisgZWxmX21hY2hpbmVfbG9hZF9hZGRyZXNzICh2b2lkKQorIHsKKyAJLyogSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB2YXJpYWJsZSB0aGlzIGlzLCB0aGUgcmVmZXJlbmNlIG5ldmVyIG1ha2VzCitAQCAtNjYsNyArNjYsNyBAQCBlbGZfbWFjaGluZV9sb2FkX2FkZHJlc3MgKHZvaWQpCisgCXJldHVybiBhZGRyOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmVfXyB2b2lkCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkCisgZWxmX21hY2hpbmVfcmVsYXRpdmUgKEVsZjMyX0FkZHIgbG9hZF9vZmYsIGNvbnN0IEVsZjMyX0FkZHIgcmVsX2FkZHIsCisgCQkgICAgICBFbGYzMl9Xb3JkIHJlbGF0aXZlX2NvdW50KQorIHsKK0luZGV4OiB1Q2xpYmMtMC45LjMwLjEvbGRzby9sZHNvL2NyaXMvZGwtc3lzZGVwLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1Q2xpYmMtMC45LjMwLjEvbGRzby9sZHNvL2NyaXMvZGwtc3lzZGVwLmgJKHJldmlzaW9uIDI1NTAzKQorKysrIHVDbGliYy0wLjkuMzAuMS9sZHNvL2xkc28vY3Jpcy9kbC1zeXNkZXAuaAkod29ya2luZyBjb3B5KQorQEAgLTM5LDcgKzM5LDcgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX2RsX2xpbnV4X3Jlc29sdmVyKAorICAgICAgfHwgKCh0eXBlKSA9PSBSX0NSSVNfR0xPQl9EQVQpKSAqIEVMRl9SVFlQRV9DTEFTU19QTFQpCVwKKyAgICB8ICgoKHR5cGUpID09IFJfQ1JJU19DT1BZKSAqIEVMRl9SVFlQRV9DTEFTU19DT1BZKSkKKyAKKy1zdGF0aWMgX19pbmxpbmVfXyBFbGYzMl9BZGRyCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSBFbGYzMl9BZGRyCisgZWxmX21hY2hpbmVfZHluYW1pYyh2b2lkKQorIHsKKyAJLyogRG9uJ3QganVzdCBzZXQgdGhpcyB0byBhbiBhc20gdmFyaWFibGUgInIwIiBzaW5jZSB0aGF0J3Mgbm90IGxvZ2ljYWwKK0BAIC02MSw3ICs2MSw3IEBAIGVsZl9tYWNoaW5lX2R5bmFtaWModm9pZCkKKyAgICB0aGVyZSdzIHNvbWUgb3RoZXIgc3ltYm9sIHdlIGNvdWxkIHVzZSwgdGhhdCB3ZSBkb24ndCAqaGF2ZSogdG8gZm9yY2UgYQorICAgIEdPVCBlbnRyeSBmb3IuICAqLworIAorLXN0YXRpYyBfX2lubGluZV9fIEVsZjMyX0FkZHIKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIEVsZjMyX0FkZHIKKyBlbGZfbWFjaGluZV9sb2FkX2FkZHJlc3Modm9pZCkKKyB7CisgCUVsZjMyX0FkZHIgZ290YWRkcl9kaWZmOworQEAgLTk1LDcgKzk1LDcgQEAgZWxmX21hY2hpbmVfbG9hZF9hZGRyZXNzKHZvaWQpCisgCXJldHVybiBnb3RhZGRyX2RpZmY7CisgfQorIAorLXN0YXRpYyBfX2lubGluZV9fIHZvaWQKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQKKyBlbGZfbWFjaGluZV9yZWxhdGl2ZShFbGYzMl9BZGRyIGxvYWRfb2ZmLCBjb25zdCBFbGYzMl9BZGRyIHJlbF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgIEVsZjMyX1dvcmQgcmVsYXRpdmVfY291bnQpCisgeworSW5kZXg6IHVDbGliYy0wLjkuMzAuMS9sZHNvL2xkc28veHRlbnNhL2RsLXN5c2RlcC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdUNsaWJjLTAuOS4zMC4xL2xkc28vbGRzby94dGVuc2EvZGwtc3lzZGVwLmgJKHJldmlzaW9uIDI1NTAzKQorKysrIHVDbGliYy0wLjkuMzAuMS9sZHNvL2xkc28veHRlbnNhL2RsLXN5c2RlcC5oCSh3b3JraW5nIGNvcHkpCitAQCAtODcsNyArODcsNyBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBfZGxfbGludXhfcmVzb2x2ZXIgCisgICAoKCh0eXBlKSA9PSBSX1hURU5TQV9KTVBfU0xPVCkgKiBFTEZfUlRZUEVfQ0xBU1NfUExUKQorIAorIC8qIFJldHVybiB0aGUgbGluay10aW1lIGFkZHJlc3Mgb2YgX0RZTkFNSUMuICAqLworLXN0YXRpYyBfX2lubGluZV9fIEVsZjMyX0FkZHIKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIEVsZjMyX0FkZHIKKyBlbGZfbWFjaGluZV9keW5hbWljICh2b2lkKQorIHsKKyAgIC8qIFRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VkIHdoaWxlIGJvb3RzdHJhcHBpbmcgdGhlIHJ1bnRpbWUgbGlua2VyLgorQEAgLTk3LDcgKzk3LDcgQEAgZWxmX21hY2hpbmVfZHluYW1pYyAodm9pZCkKKyB9CisgCisgLyogUmV0dXJuIHRoZSBydW4tdGltZSBsb2FkIGFkZHJlc3Mgb2YgdGhlIHNoYXJlZCBvYmplY3QuICAqLworLXN0YXRpYyBfX2lubGluZV9fIEVsZjMyX0FkZHIKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIEVsZjMyX0FkZHIKKyBlbGZfbWFjaGluZV9sb2FkX2FkZHJlc3MgKHZvaWQpCisgeworICAgRWxmMzJfQWRkciBhZGRyLCB0bXA7CitAQCAtMTE4LDcgKzExOCw3IEBAIGVsZl9tYWNoaW5lX2xvYWRfYWRkcmVzcyAodm9pZCkKKyAgIHJldHVybiBhZGRyIC0gMzsKKyB9CisgCistc3RhdGljIF9faW5saW5lX18gdm9pZAorK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZAorIGVsZl9tYWNoaW5lX3JlbGF0aXZlIChFbGYzMl9BZGRyIGxvYWRfb2ZmLCBjb25zdCBFbGYzMl9BZGRyIHJlbF9hZGRyLAorIAkJICAgICAgRWxmMzJfV29yZCByZWxhdGl2ZV9jb3VudCkKKyB7CitJbmRleDogdUNsaWJjLTAuOS4zMC4xL2xkc28vbGRzby9zcGFyYy9kbC1zeXNkZXAuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVDbGliYy0wLjkuMzAuMS9sZHNvL2xkc28vc3BhcmMvZGwtc3lzZGVwLmgJKHJldmlzaW9uIDI1NTAzKQorKysrIHVDbGliYy0wLjkuMzAuMS9sZHNvL2xkc28vc3BhcmMvZGwtc3lzZGVwLmgJKHdvcmtpbmcgY29weSkKK0BAIC00OSw3ICs0OSw3IEBAIHVuc2lnbmVkIGxvbmcgX2RsX2xpbnV4X3Jlc29sdmVyKHN0cnVjdCAKKyAKKyAjaWZuZGVmIENPTVBJTEVfQVNNCisgLyogQ2hlYXAgbW9kdWxvIGltcGxlbWVudGF0aW9uLCB0YWtlbiBmcm9tIGFybS9sZF9zeXNkZXAuaC4gKi8KKy1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nCisgc3BhcmNfbW9kKHVuc2lnbmVkIGxvbmcgbSwgdW5zaWduZWQgbG9uZyBwKQorIHsKKyAJdW5zaWduZWQgbG9uZyBpLCB0LCBpbmM7CitAQCAtMTI3LDcgKzEyNyw3IEBAIGRvIHsgICAgcmVnaXN0ZXIgRWxmMzJfQWRkciBwYyBfX2FzbV9fKCIKKyAvKiBSZXR1cm4gdGhlIGxpbmstdGltZSBhZGRyZXNzIG9mIF9EWU5BTUlDLiAgQ29udmVuaWVudGx5LCB0aGlzIGlzIHRoZQorICAgIGZpcnN0IGVsZW1lbnQgb2YgdGhlIEdPVC4gIFRoaXMgbXVzdCBiZSBpbmxpbmVkIGluIGEgZnVuY3Rpb24gd2hpY2gKKyAgICB1c2VzIGdsb2JhbCBkYXRhLiAgKi8KKy1zdGF0aWMgX19pbmxpbmVfXyBFbGYzMl9BZGRyCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSBFbGYzMl9BZGRyCisgZWxmX21hY2hpbmVfZHluYW1pYyAodm9pZCkKKyB7CisgCXJlZ2lzdGVyIEVsZjMyX0FkZHIgKmdvdCBfX2FzbV9fICgiJWw3Iik7CitAQCAtMTM4LDcgKzEzOCw3IEBAIGVsZl9tYWNoaW5lX2R5bmFtaWMgKHZvaWQpCisgfQorIAorIC8qIFJldHVybiB0aGUgcnVuLXRpbWUgbG9hZCBhZGRyZXNzIG9mIHRoZSBzaGFyZWQgb2JqZWN0LiAgKi8KKy1zdGF0aWMgX19pbmxpbmVfXyBFbGYzMl9BZGRyCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSBFbGYzMl9BZGRyCisgZWxmX21hY2hpbmVfbG9hZF9hZGRyZXNzICh2b2lkKQorIHsKKyAJcmVnaXN0ZXIgRWxmMzJfQWRkciAqcGMgX19hc21fXyAoIiVvNyIpLCAqZ290IF9fYXNtX18gKCIlbDciKTsKK0BAIC0xNTcsNyArMTU3LDcgQEAgZWxmX21hY2hpbmVfbG9hZF9hZGRyZXNzICh2b2lkKQorIAlyZXR1cm4gKEVsZjMyX0FkZHIpIGdvdCAtICpnb3QgKyAocGNbMl0gLSBwY1szXSkgKiA0IC0gNDsKKyB9CisgCistc3RhdGljIF9faW5saW5lX18gdm9pZAorK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZAorIGVsZl9tYWNoaW5lX3JlbGF0aXZlIChFbGYzMl9BZGRyIGxvYWRfb2ZmLCBjb25zdCBFbGYzMl9BZGRyIHJlbF9hZGRyLAorIAkJICAgICAgRWxmMzJfV29yZCByZWxhdGl2ZV9jb3VudCkKKyB7CitJbmRleDogdUNsaWJjLTAuOS4zMC4xL2xkc28vbGRzby9taXBzL2RsLXN5c2RlcC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdUNsaWJjLTAuOS4zMC4xL2xkc28vbGRzby9taXBzL2RsLXN5c2RlcC5oCShyZXZpc2lvbiAyNTUwMykKKysrKyB1Q2xpYmMtMC45LjMwLjEvbGRzby9sZHNvL21pcHMvZGwtc3lzZGVwLmgJKHdvcmtpbmcgY29weSkKK0BAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBfZGxfcGVyZm9ybV9taXBzX2dsb2JhbF9nb3RfcmVsb2NhdAorIAorICNkZWZpbmUgT0ZGU0VUX0dQX0dPVCAweDdmZjAKKyAKKy1zdGF0aWMgX19pbmxpbmVfXyBFbGZXKEFkZHIpICoKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIEVsZlcoQWRkcikgKgorIGVsZl9taXBzX2dvdF9mcm9tX2dwcmVnIChFbGZXKEFkZHIpIGdwcmVnKQorIHsKKyAJLyogRklYTUU6IHRoZSBvZmZzZXQgb2YgZ3AgZnJvbSBHT1QgbWF5IGJlIHN5c3RlbS1kZXBlbmRlbnQuICovCitAQCAtMTczLDcgKzE3Myw3IEBAIGVsZl9taXBzX2dvdF9mcm9tX2dwcmVnIChFbGZXKEFkZHIpIGdwcmUKKyAvKiBSZXR1cm4gdGhlIGxpbmstdGltZSBhZGRyZXNzIG9mIF9EWU5BTUlDLiAgQ29udmVuaWVudGx5LCB0aGlzIGlzIHRoZQorICAgIGZpcnN0IGVsZW1lbnQgb2YgdGhlIEdPVC4gIFRoaXMgbXVzdCBiZSBpbmxpbmVkIGluIGEgZnVuY3Rpb24gd2hpY2gKKyAgICB1c2VzIGdsb2JhbCBkYXRhLiAgV2UgYXNzdW1lIGl0cyAkZ3AgcG9pbnRzIHRvIHRoZSBwcmltYXJ5IEdPVC4gICovCistc3RhdGljIF9faW5saW5lX18gRWxmVyhBZGRyKQorK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgRWxmVyhBZGRyKQorIGVsZl9tYWNoaW5lX2R5bmFtaWMgKHZvaWQpCisgeworIAlyZWdpc3RlciBFbGZXKEFkZHIpIGdwIF9fYXNtX18gKCIkMjgiKTsKK0BAIC0xOTIsNyArMTkyLDcgQEAgZWxmX21hY2hpbmVfZHluYW1pYyAodm9pZCkKKyAjZW5kaWYKKyAKKyAvKiBSZXR1cm4gdGhlIHJ1bi10aW1lIGxvYWQgYWRkcmVzcyBvZiB0aGUgc2hhcmVkIG9iamVjdC4gICovCistc3RhdGljIF9faW5saW5lX18gRWxmVyhBZGRyKQorK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgRWxmVyhBZGRyKQorIGVsZl9tYWNoaW5lX2xvYWRfYWRkcmVzcyAodm9pZCkKKyB7CisgCUVsZlcoQWRkcikgYWRkcjsKK0BAIC0yMDgsNyArMjA4LDcgQEAgZWxmX21hY2hpbmVfbG9hZF9hZGRyZXNzICh2b2lkKQorIAlyZXR1cm4gYWRkcjsKKyB9CisgCistc3RhdGljIF9faW5saW5lX18gdm9pZAorK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZAorIGVsZl9tYWNoaW5lX3JlbGF0aXZlIChFbGZXKEFkZHIpIGxvYWRfb2ZmLCBjb25zdCBFbGZXKEFkZHIpIHJlbF9hZGRyLAorIAkJICAgICAgRWxmVyhXb3JkKSByZWxhdGl2ZV9jb3VudCkKKyB7CitJbmRleDogdUNsaWJjLTAuOS4zMC4xL2xkc28vbGRzby9zaC9kbC1zeXNkZXAuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVDbGliYy0wLjkuMzAuMS9sZHNvL2xkc28vc2gvZGwtc3lzZGVwLmgJKHJldmlzaW9uIDI1NTAzKQorKysrIHVDbGliYy0wLjkuMzAuMS9sZHNvL2xkc28vc2gvZGwtc3lzZGVwLmgJKHdvcmtpbmcgY29weSkKK0BAIC0yNSw3ICsyNSw3IEBACisgc3RydWN0IGVsZl9yZXNvbHZlOworIGV4dGVybiB1bnNpZ25lZCBsb25nIF9kbF9saW51eF9yZXNvbHZlcihzdHJ1Y3QgZWxmX3Jlc29sdmUgKiB0cG50LCBpbnQgcmVsb2NfZW50cnkpOworIAorLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludAorK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50CisgX2RsX3VyZW0odW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCBiYXNlKQorIHsKKyAgIGludCByZXM7CitAQCAtMTAwLDcgKzEwMCw3IEBAIF9kbF91cmVtKHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgYmEKKyAvKiBSZXR1cm4gdGhlIGxpbmstdGltZSBhZGRyZXNzIG9mIF9EWU5BTUlDLiAgQ29udmVuaWVudGx5LCB0aGlzIGlzIHRoZQorICAgIGZpcnN0IGVsZW1lbnQgb2YgdGhlIEdPVC4gIFRoaXMgbXVzdCBiZSBpbmxpbmVkIGluIGEgZnVuY3Rpb24gd2hpY2gKKyAgICB1c2VzIGdsb2JhbCBkYXRhLiAgKi8KKy1zdGF0aWMgX19pbmxpbmVfXyBFbGYzMl9BZGRyIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKQorK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgRWxmMzJfQWRkciBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKKyBlbGZfbWFjaGluZV9keW5hbWljICh2b2lkKQorIHsKKyAJcmVnaXN0ZXIgRWxmMzJfQWRkciAqZ290OworQEAgLTEwOSw3ICsxMDksNyBAQCBlbGZfbWFjaGluZV9keW5hbWljICh2b2lkKQorIH0KKyAKKyAvKiBSZXR1cm4gdGhlIHJ1bi10aW1lIGxvYWQgYWRkcmVzcyBvZiB0aGUgc2hhcmVkIG9iamVjdC4gICovCistc3RhdGljIF9faW5saW5lX18gRWxmMzJfQWRkciBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIEVsZjMyX0FkZHIgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCisgZWxmX21hY2hpbmVfbG9hZF9hZGRyZXNzICh2b2lkKQorIHsKKyAJRWxmMzJfQWRkciBhZGRyOworQEAgLTE1MSw3ICsxNTEsNyBAQCBlbGZfbWFjaGluZV9sb2FkX2FkZHJlc3MgKHZvaWQpCisgICAgIH0gXAorICAgfQorIAorLXN0YXRpYyBfX2lubGluZV9fIHZvaWQKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQKKyBlbGZfbWFjaGluZV9yZWxhdGl2ZSAoRWxmMzJfQWRkciBsb2FkX29mZiwgY29uc3QgRWxmMzJfQWRkciByZWxfYWRkciwKKyAJCSAgICAgIEVsZjMyX1dvcmQgcmVsYXRpdmVfY291bnQpCisgeworSW5kZXg6IHVDbGliYy0wLjkuMzAuMS9sZHNvL2xkc28vYmZpbi9kbC1zeXNkZXAuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVDbGliYy0wLjkuMzAuMS9sZHNvL2xkc28vYmZpbi9kbC1zeXNkZXAuaAkocmV2aXNpb24gMjU1MDMpCisrKysgdUNsaWJjLTAuOS4zMC4xL2xkc28vbGRzby9iZmluL2RsLXN5c2RlcC5oCSh3b3JraW5nIGNvcHkpCitAQCAtMjEzLDcgKzIxMyw3IEBAIHdoaWxlICgwKQorICNlbmRpZgorIAorICNpbmNsdWRlIDxlbGYuaD4KKy1zdGF0aWMgX19pbmxpbmVfXyB2b2lkCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkCisgZWxmX21hY2hpbmVfcmVsYXRpdmUgKERMX0xPQURBRERSX1RZUEUgbG9hZF9vZmYsIGNvbnN0IEVsZjMyX0FkZHIgcmVsX2FkZHIsCisgCQkgICAgICBFbGYzMl9Xb3JkIHJlbGF0aXZlX2NvdW50KQorIHsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjEvMTgwLWdldGxpbmUtY29uZmxpY3QucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4xLzE4MC1nZXRsaW5lLWNvbmZsaWN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwODQyZjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4xLzE4MC1nZXRsaW5lLWNvbmZsaWN0LnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKKy0tLSBhL2V4dHJhL3NjcmlwdHMvdW5pZmRlZi5jCisrKysgYi9leHRyYS9zY3JpcHRzL3VuaWZkZWYuYworQEAgLTIwNiw3ICsyMDYsNyBAQAorIHN0YXRpYyB2b2lkICAgICAgICAgICAgIGVycm9yKGNvbnN0IGNoYXIgKik7Cisgc3RhdGljIGludCAgICAgICAgICAgICAgZmluZHN5bShjb25zdCBjaGFyICopOworIHN0YXRpYyB2b2lkICAgICAgICAgICAgIGZsdXNobGluZShib29sKTsKKy1zdGF0aWMgTGluZXR5cGUgICAgICAgICBnZXRsaW5lKHZvaWQpOworK3N0YXRpYyBMaW5ldHlwZSAgICAgICAgIGdldF9saW5lKHZvaWQpOworIHN0YXRpYyBMaW5ldHlwZSAgICAgICAgIGlmZXZhbChjb25zdCBjaGFyICoqKTsKKyBzdGF0aWMgdm9pZCAgICAgICAgICAgICBpZ25vcmVvZmYodm9pZCk7Cisgc3RhdGljIHZvaWQgICAgICAgICAgICAgaWdub3Jlb24odm9pZCk7CitAQCAtNTEyLDcgKzUxMiw3IEBACisKKyAJZm9yICg7OykgeworIAkJbGluZW51bSsrOworLQkJbGluZXZhbCA9IGdldGxpbmUoKTsKKysJCWxpbmV2YWwgPSBnZXRfbGluZSgpOworIAkJdHJhbnNfdGFibGVbaWZzdGF0ZVtkZXB0aF1dW2xpbmV2YWxdKCk7CisgCQlkZWJ1ZygicHJvY2VzcyAlcyAtPiAlcyBkZXB0aCAlZCIsCisgCQkgICAgbGluZXR5cGVfbmFtZVtsaW5ldmFsXSwKK0BAIC01MjYsNyArNTI2LDcgQEAKKyAgKiBoZWxwIGZyb20gc2tpcGNvbW1lbnQoKS4KKyAgKi8KKyBzdGF0aWMgTGluZXR5cGUKKy1nZXRsaW5lKHZvaWQpCisrZ2V0X2xpbmUodm9pZCkKKyB7CisgCWNvbnN0IGNoYXIgKmNwOworIAlpbnQgY3Vyc3ltOworCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4xLzE5MC1maXgtZ2V0YWRkcmluZm8tTlVMTC1wb2ludGVyLWRlcmVmZXJlbmNlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMS8xOTAtZml4LWdldGFkZHJpbmZvLU5VTEwtcG9pbnRlci1kZXJlZmVyZW5jZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTA5ODcxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMS8xOTAtZml4LWdldGFkZHJpbmZvLU5VTEwtcG9pbnRlci1kZXJlZmVyZW5jZS5wYXRjaApAQCAtMCwwICsxLDEyIEBACitkaWZmIC1OYXJ1cCB1Q2xpYmMtMC45LjMwLjEub3JpZy9saWJjL2luZXQvZ2V0YWRkcmluZm8uYyB1Q2xpYmMtMC45LjMwLjEvbGliYy9pbmV0L2dldGFkZHJpbmZvLmMKKy0tLSB1Q2xpYmMtMC45LjMwLjEub3JpZy9saWJjL2luZXQvZ2V0YWRkcmluZm8uYwkyMDA5LTAyLTI2IDIxOjQ5OjE0LjAwMDAwMDAwMCArMDkwMAorKysrIHVDbGliYy0wLjkuMzAuMS9saWJjL2luZXQvZ2V0YWRkcmluZm8uYwkyMDA5LTAzLTA2IDAwOjU5OjIzLjAwMDAwMDAwMCArMDkwMAorQEAgLTE4Nyw2ICsxODcsOCBAQCBzdGF0aWMgdW5zaWduZWQgX19jaGVja19wZih2b2lkKQorIAkJfQorIAorIAkJZm9yIChydW5wID0gaWZhOyBydW5wICE9IE5VTEw7IHJ1bnAgPSBydW5wLT5pZmFfbmV4dCkgeworKwkJCWlmIChydW5wLT5pZmFfYWRkciA9PSBOVUxMKQorKwkJCQljb250aW51ZTsKKyAjaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfSVBWNF9fCisgCQkJaWYgKHJ1bnAtPmlmYV9hZGRyLT5zYV9mYW1pbHkgPT0gUEZfSU5FVCkKKyAJCQkJc2VlbiB8PSBTRUVOX0lQVjQ7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4xLzIwMC1wYWNrLW5ldGluZXQtc3RydWN0cy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjEvMjAwLXBhY2stbmV0aW5ldC1zdHJ1Y3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MjdmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4xLzIwMC1wYWNrLW5ldGluZXQtc3RydWN0cy5wYXRjaApAQCAtMCwwICsxLDIyNCBAQAorZGlmZiAtdXJOIHVDbGliYy0wLjkuMzAuMS5vcmlnL2luY2x1ZGUvbmV0aW5ldC9pZ21wLmggdUNsaWJjLTAuOS4zMC4xL2luY2x1ZGUvbmV0aW5ldC9pZ21wLmgKKy0tLSB1Q2xpYmMtMC45LjMwLjEub3JpZy9pbmNsdWRlL25ldGluZXQvaWdtcC5oCTIwMDktMDQtMDggMDk6MDA6MTAuOTI2NTQ1MTMyICswMjAwCisrKysgdUNsaWJjLTAuOS4zMC4xL2luY2x1ZGUvbmV0aW5ldC9pZ21wLmgJMjAwOS0wNC0wOCAwOTowMDoyNi4yNDI1MTQyNzMgKzAyMDAKK0BAIC02OSw3ICs2OSw3IEBACisgICB1X2ludDhfdCBpZ21wX2NvZGU7ICAgICAgICAgICAgIC8qIHJvdXRpbmcgY29kZSAqLworICAgdV9pbnQxNl90IGlnbXBfY2tzdW07ICAgICAgICAgICAvKiBjaGVja3N1bSAqLworICAgc3RydWN0IGluX2FkZHIgaWdtcF9ncm91cDsgICAgICAvKiBncm91cCBhZGRyZXNzICovCistfTsKKyt9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisgCisgI2RlZmluZSBJR01QX01JTkxFTgkJCTgKKyAKK2RpZmYgLXVyTiB1Q2xpYmMtMC45LjMwLjEub3JpZy9pbmNsdWRlL25ldGluZXQvaW4uaCB1Q2xpYmMtMC45LjMwLjEvaW5jbHVkZS9uZXRpbmV0L2luLmgKKy0tLSB1Q2xpYmMtMC45LjMwLjEub3JpZy9pbmNsdWRlL25ldGluZXQvaW4uaAkyMDA5LTA0LTA4IDA5OjAwOjEwLjkyNjU0NTEzMiArMDIwMAorKysrIHVDbGliYy0wLjkuMzAuMS9pbmNsdWRlL25ldGluZXQvaW4uaAkyMDA5LTA0LTA4IDA5OjAwOjI2LjI0MjUxNDI3MyArMDIwMAorQEAgLTIwMiw3ICsyMDIsNyBAQAorICNkZWZpbmUgczZfYWRkcgkJCWluNl91LnU2X2FkZHI4CisgI2RlZmluZSBzNl9hZGRyMTYJCWluNl91LnU2X2FkZHIxNgorICNkZWZpbmUgczZfYWRkcjMyCQlpbjZfdS51Nl9hZGRyMzIKKy0gIH07CisrICB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisgCisgZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2FueTsgICAgICAgIC8qIDo6ICovCisgZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2xvb3BiYWNrOyAgIC8qIDo6MSAqLworQEAgLTIyOSw3ICsyMjksNyBAQAorIAkJCSAgIF9fU09DS0FERFJfQ09NTU9OX1NJWkUgLQorIAkJCSAgIHNpemVvZiAoaW5fcG9ydF90KSAtCisgCQkJICAgc2l6ZW9mIChzdHJ1Y3QgaW5fYWRkcildOworLSAgfTsKKysgIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKyAjZW5kaWYKKyAKKyAvKiBEaXR0bywgZm9yIElQdjYuICAqLworQEAgLTI0MCw3ICsyNDAsNyBAQAorICAgICB1aW50MzJfdCBzaW42X2Zsb3dpbmZvOwkvKiBJUHY2IGZsb3cgaW5mb3JtYXRpb24gKi8KKyAgICAgc3RydWN0IGluNl9hZGRyIHNpbjZfYWRkcjsJLyogSVB2NiBhZGRyZXNzICovCisgICAgIHVpbnQzMl90IHNpbjZfc2NvcGVfaWQ7CS8qIElQdjYgc2NvcGUtaWQgKi8KKy0gIH07CisrICB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisgCisgCisgLyogSVB2NCBtdWx0aWNhc3QgcmVxdWVzdC4gICovCitAQCAtMjUxLDcgKzI1MSw3IEBACisgCisgICAgIC8qIExvY2FsIElQIGFkZHJlc3Mgb2YgaW50ZXJmYWNlLiAgKi8KKyAgICAgc3RydWN0IGluX2FkZHIgaW1yX2ludGVyZmFjZTsKKy0gIH07CisrICB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisgCisgc3RydWN0IGlwX21yZXFfc291cmNlCisgICB7CitAQCAtMjYzLDcgKzI2Myw3IEBACisgCisgICAgIC8qIElQIGFkZHJlc3Mgb2YgaW50ZXJmYWNlLiAgKi8KKyAgICAgc3RydWN0IGluX2FkZHIgaW1yX3NvdXJjZWFkZHI7CistICB9OworKyAgfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworIAorIC8qIExpa2V3aXNlLCBmb3IgSVB2Ni4gICovCisgc3RydWN0IGlwdjZfbXJlcQorQEAgLTI3Myw3ICsyNzMsNyBAQAorIAorICAgICAvKiBsb2NhbCBpbnRlcmZhY2UgKi8KKyAgICAgdW5zaWduZWQgaW50IGlwdjZtcl9pbnRlcmZhY2U7CistICB9OworKyAgfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworIAorIAorIC8qIE11bHRpY2FzdCBncm91cCByZXF1ZXN0LiAgKi8KK0BAIC0yODQsNyArMjg0LDcgQEAKKyAKKyAgICAgLyogR3JvdXAgYWRkcmVzcy4gICovCisgICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGdyX2dyb3VwOworLSAgfTsKKysgIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKyAKKyBzdHJ1Y3QgZ3JvdXBfc291cmNlX3JlcQorICAgeworQEAgLTI5Niw3ICsyOTYsNyBAQAorIAorICAgICAvKiBTb3VyY2UgYWRkcmVzcy4gICovCisgICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGdzcl9zb3VyY2U7CistICB9OworKyAgfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworIAorIAorIC8qIEZ1bGwtc3RhdGUgZmlsdGVyIG9wZXJhdGlvbnMuICAqLworQEAgLTMxNSw3ICszMTUsNyBAQAorICAgICB1aW50MzJfdCBpbXNmX251bXNyYzsKKyAgICAgLyogU291cmNlIGFkZHJlc3Nlcy4gICovCisgICAgIHN0cnVjdCBpbl9hZGRyIGltc2Zfc2xpc3RbMV07CistICB9OworKyAgfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworIAorICNkZWZpbmUgSVBfTVNGSUxURVJfU0laRShudW1zcmMpIChzaXplb2YgKHN0cnVjdCBpcF9tc2ZpbHRlcikgXAorIAkJCQkgIC0gc2l6ZW9mIChzdHJ1Y3QgaW5fYWRkcikJCSAgICAgIFwKK0BAIC0zMzYsNyArMzM2LDcgQEAKKyAgICAgdWludDMyX3QgZ2ZfbnVtc3JjOworICAgICAvKiBTb3VyY2UgYWRkcmVzc2VzLiAgKi8KKyAgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgZ2Zfc2xpc3RbMV07CistfTsKKyt9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisgCisgI2RlZmluZSBHUk9VUF9GSUxURVJfU0laRShudW1zcmMpIChzaXplb2YgKHN0cnVjdCBncm91cF9maWx0ZXIpIFwKKyAJCQkJICAgLSBzaXplb2YgKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKQkgICAgICBcCitAQCAtNDYwLDE0ICs0NjAsMTQgQEAKKyAgIHsKKyAgICAgc3RydWN0IGluNl9hZGRyIGlwaTZfYWRkcjsJLyogc3JjL2RzdCBJUHY2IGFkZHJlc3MgKi8KKyAgICAgdW5zaWduZWQgaW50IGlwaTZfaWZpbmRleDsJLyogc2VuZC9yZWN2IGludGVyZmFjZSBpbmRleCAqLworLSAgfTsKKysgIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKyAKKyAvKiBJUHY2IE1UVSBpbmZvcm1hdGlvbi4gICovCisgc3RydWN0IGlwNl9tdHVpbmZvCisgICB7CisgICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgaXA2bV9hZGRyOyAvKiBkc3QgYWRkcmVzcyBpbmNsdWRpbmcgem9uZSBJRCAqLworICAgICB1aW50MzJfdCBpcDZtX210dTsJCSAgIC8qIHBhdGggTVRVIGluIGhvc3QgYnl0ZSBvcmRlciAqLworLSAgfTsKKysgIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKyAKKyAKKyAjaWYgMCAvKmRlZiBfX1VTRV9HTlUqLworZGlmZiAtdXJOIHVDbGliYy0wLjkuMzAuMS5vcmlnL2luY2x1ZGUvbmV0aW5ldC9pcC5oIHVDbGliYy0wLjkuMzAuMS9pbmNsdWRlL25ldGluZXQvaXAuaAorLS0tIHVDbGliYy0wLjkuMzAuMS5vcmlnL2luY2x1ZGUvbmV0aW5ldC9pcC5oCTIwMDktMDQtMDggMDk6MDA6MTAuOTI2NTQ1MTMyICswMjAwCisrKysgdUNsaWJjLTAuOS4zMC4xL2luY2x1ZGUvbmV0aW5ldC9pcC5oCTIwMDktMDQtMDggMDk6MDA6MjYuMjQyNTE0MjczICswMjAwCitAQCAtNjMsNyArNjMsNyBAQAorICAgICB1X2ludDMyX3Qgc2FkZHI7CisgICAgIHVfaW50MzJfdCBkYWRkcjsKKyAgICAgLypUaGUgb3B0aW9ucyBzdGFydCBoZXJlLiAqLworLSAgfTsKKysgIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKyAKKyAjaWZkZWYgX19VU0VfQlNECisgLyoKK0BAIC0xMjcsNyArMTI3LDcgQEAKKyAgICAgdV9pbnQ4X3QgaXBfcDsJCQkvKiBwcm90b2NvbCAqLworICAgICB1X3Nob3J0IGlwX3N1bTsJCQkvKiBjaGVja3N1bSAqLworICAgICBzdHJ1Y3QgaW5fYWRkciBpcF9zcmMsIGlwX2RzdDsJLyogc291cmNlIGFuZCBkZXN0IGFkZHJlc3MgKi8KKy0gIH07CisrICB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisgCisgLyoKKyAgKiBUaW1lIHN0YW1wIG9wdGlvbiBzdHJ1Y3R1cmUuCitkaWZmIC11ck4gdUNsaWJjLTAuOS4zMC4xLm9yaWcvaW5jbHVkZS9uZXRpbmV0L2lwX2ljbXAuaCB1Q2xpYmMtMC45LjMwLjEvaW5jbHVkZS9uZXRpbmV0L2lwX2ljbXAuaAorLS0tIHVDbGliYy0wLjkuMzAuMS5vcmlnL2luY2x1ZGUvbmV0aW5ldC9pcF9pY21wLmgJMjAwOS0wNC0wOCAwOTowMDoxMC45MjY1NDUxMzIgKzAyMDAKKysrKyB1Q2xpYmMtMC45LjMwLjEvaW5jbHVkZS9uZXRpbmV0L2lwX2ljbXAuaAkyMDA5LTA0LTA4IDA5OjAwOjI2LjI0MjUxNDI3MyArMDIwMAorQEAgLTQzLDcgKzQzLDcgQEAKKyAgICAgICB1X2ludDE2X3QJbXR1OworICAgICB9IGZyYWc7CQkJLyogcGF0aCBtdHUgZGlzY292ZXJ5ICovCisgICB9IHVuOworLX07CisrfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworIAorICNkZWZpbmUgSUNNUF9FQ0hPUkVQTFkJCTAJLyogRWNobyBSZXBseQkJCSovCisgI2RlZmluZSBJQ01QX0RFU1RfVU5SRUFDSAkzCS8qIERlc3RpbmF0aW9uIFVucmVhY2hhYmxlCSovCitAQCAtMTk5LDcgKzE5OSw3IEBACisgI2RlZmluZQlpY21wX3JhZHYJaWNtcF9kdW4uaWRfcmFkdgorICNkZWZpbmUJaWNtcF9tYXNrCWljbXBfZHVuLmlkX21hc2sKKyAjZGVmaW5lCWljbXBfZGF0YQlpY21wX2R1bi5pZF9kYXRhCistfTsKKyt9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisgCisgLyoKKyAgKiBMb3dlciBib3VuZHMgb24gcGFja2V0IGxlbmd0aHMgZm9yIHZhcmlvdXMgdHlwZXMuCitkaWZmIC11ck4gdUNsaWJjLTAuOS4zMC4xLm9yaWcvaW5jbHVkZS9uZXRpbmV0L3RjcC5oIHVDbGliYy0wLjkuMzAuMS9pbmNsdWRlL25ldGluZXQvdGNwLmgKKy0tLSB1Q2xpYmMtMC45LjMwLjEub3JpZy9pbmNsdWRlL25ldGluZXQvdGNwLmgJMjAwOS0wNC0wOCAwOTowMDoxMC45MjY1NDUxMzIgKzAyMDAKKysrKyB1Q2xpYmMtMC45LjMwLjEvaW5jbHVkZS9uZXRpbmV0L3RjcC5oCTIwMDktMDQtMDggMDk6MDA6MjYuMjQyNTE0MjczICswMjAwCitAQCAtODYsNyArODYsNyBAQAorICAgICB1X2ludDE2X3QgdGhfd2luOwkJLyogd2luZG93ICovCisgICAgIHVfaW50MTZfdCB0aF9zdW07CQkvKiBjaGVja3N1bSAqLworICAgICB1X2ludDE2X3QgdGhfdXJwOwkJLyogdXJnZW50IHBvaW50ZXIgKi8KKy19OworK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKyAKKyAjIGVsc2UgLyogIV9fRkFWT1JfQlNEICovCisgc3RydWN0IHRjcGhkcgorQEAgLTEyMSw3ICsxMjEsNyBAQAorICAgICB1X2ludDE2X3Qgd2luZG93OworICAgICB1X2ludDE2X3QgY2hlY2s7CisgICAgIHVfaW50MTZfdCB1cmdfcHRyOworLX07CisrfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworICMgZW5kaWYgLyogX19GQVZPUl9CU0QgKi8KKyAKKyBlbnVtCitAQCAtMjI2LDcgKzIyNiw3IEBACisgICB1X2ludDMyX3QJdGNwaV9yY3Zfc3BhY2U7CisgCisgICB1X2ludDMyX3QJdGNwaV90b3RhbF9yZXRyYW5zOworLX07CisrfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworIAorIAorIC8qIEZvciBUQ1BfTUQ1U0lHIHNvY2tldCBvcHRpb24uICAqLworQEAgLTIzOSw3ICsyMzksNyBAQAorICAgdV9pbnQxNl90CXRjcG1fa2V5bGVuOwkJCS8qIEtleSBsZW5ndGguICAqLworICAgdV9pbnQzMl90CV9fdGNwbV9wYWQyOwkJCS8qIFplcm8uICAqLworICAgdV9pbnQ4X3QJdGNwbV9rZXlbVENQX01ENVNJR19NQVhLRVlMRU5dOwkvKiBLZXkgKGJpbmFyeSkuICAqLworLX07CisrfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworIAorICNlbmRpZiAvKiBNaXNjLiAgKi8KKyAKK2RpZmYgLXVyTiB1Q2xpYmMtMC45LjMwLjEub3JpZy9pbmNsdWRlL25ldGluZXQvdWRwLmggdUNsaWJjLTAuOS4zMC4xL2luY2x1ZGUvbmV0aW5ldC91ZHAuaAorLS0tIHVDbGliYy0wLjkuMzAuMS5vcmlnL2luY2x1ZGUvbmV0aW5ldC91ZHAuaAkyMDA5LTA0LTA4IDA5OjAwOjEwLjkyNjU0NTEzMiArMDIwMAorKysrIHVDbGliYy0wLjkuMzAuMS9pbmNsdWRlL25ldGluZXQvdWRwLmgJMjAwOS0wNC0wOCAwOTowMDoyNi4yNDI1MTQyNzMgKzAyMDAKK0BAIC02MSw3ICs2MSw3IEBACisgICB1X2ludDE2X3QgdWhfZHBvcnQ7CQkvKiBkZXN0aW5hdGlvbiBwb3J0ICovCisgICB1X2ludDE2X3QgdWhfdWxlbjsJCS8qIHVkcCBsZW5ndGggKi8KKyAgIHVfaW50MTZfdCB1aF9zdW07CQkvKiB1ZHAgY2hlY2tzdW0gKi8KKy19OworK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKyAKKyAjZWxzZQorIAorQEAgLTcxLDcgKzcxLDcgQEAKKyAgIHVfaW50MTZfdCBkZXN0OworICAgdV9pbnQxNl90IGxlbjsKKyAgIHVfaW50MTZfdCBjaGVjazsKKy19OworK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKyAjZW5kaWYKKyAKKyAjZGVmaW5lIFNPTF9VRFAgICAgICAgICAgICAxNyAgICAgIC8qIHNvY2tvcHQgbGV2ZWwgZm9yIFVEUCAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMi8xMDAtZml4LWdldGhvc3RlbnRfci1mYWlsdXJlLXJldHZhbC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjIvMTAwLWZpeC1nZXRob3N0ZW50X3ItZmFpbHVyZS1yZXR2YWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRlMThkMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjIvMTAwLWZpeC1nZXRob3N0ZW50X3ItZmFpbHVyZS1yZXR2YWwucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbSBHZW50b28uCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIHVDbGliYy0wLjkuMzAub3JpZy9saWJjL2luZXQvcmVzb2x2LmMgdUNsaWJjLTAuOS4zMC9saWJjL2luZXQvcmVzb2x2LmMKKy0tLSB1Q2xpYmMtMC45LjMwLm9yaWcvbGliYy9pbmV0L3Jlc29sdi5jCTIwMDgtMTEtMDIgMDE6MjU6MzMuMDAwMDAwMDAwICswMTAwCisrKysgdUNsaWJjLTAuOS4zMC9saWJjL2luZXQvcmVzb2x2LmMJMjAwOS0wMi0wNyAwOTo1Nzo1OS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNzg4LDcgKzE3ODgsNyBAQAorIGludCBnZXRob3N0ZW50X3Ioc3RydWN0IGhvc3RlbnQgKnJlc3VsdF9idWYsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwKKyAJc3RydWN0IGhvc3RlbnQgKipyZXN1bHQsIGludCAqaF9lcnJub3ApCisgeworLQlpbnQgcmV0OworKwlpbnQgcmV0ID0gSE9TVF9OT1RfRk9VTkQ7CisgCisgCV9fVUNMSUJDX01VVEVYX0xPQ0sobXlsb2NrKTsKKyAJaWYgKF9fZ2V0aG9zdGVudF9mcCA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4yLzExMC1hcm1fZml4X2FsaWdubWVudC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjIvMTEwLWFybV9maXhfYWxpZ25tZW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMjljMzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4yLzExMC1hcm1fZml4X2FsaWdubWVudC5wYXRjaApAQCAtMCwwICsxLDI1IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIEdlbnRvby4KKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCitBUk1WNSBjYW4gdXNlIFNUUkQgYW5kIExEUkQgYWNjZXNzIGluc3RydWN0aW9ucyBidXQgdGhlc2UgYWNjZXNzZXMgbmVlZCB0byBiZSAKKzggYnl0ZSBhbGlnbmVkLiBUaGUgZHluYW1pYyBsaW5rZXIncyBtYWxsb2MgbmVlZHMgdG8gbWF0Y2ggdGhpcyBzbyBzdHJ1Y3R1cmVzCitiZWNvbWUgOCBieXRlIGFsaWduZWQgdG8gdm9pZCB1bmFsaWduZWQgYWNjZXNzZXMuCisKK1JQIC0gMTQvMDIvMjAwOAorCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK01vZGlmaWVkIHNsaWdodGx5IGZvciB1Q2xpYmMtMC45LjMwLjIgYnkgSm9hY2hpbSBOaWxzc29uIDxqb2NrZUB2bWxpbnV4Lm9yZz4KKworZGlmZiAtZHVyTiB1Q2xpYmMtMC45LjMwLm9yaWcvbGRzby9sZHNvL2FybS9kbC1zeXNkZXAuaCB1Q2xpYmMtMC45LjMwL2xkc28vbGRzby9hcm0vZGwtc3lzZGVwLmgKKy0tLSB1Q2xpYmMtMC45LjMwLm9yaWcvbGRzby9sZHNvL2FybS9kbC1zeXNkZXAuaAkyMDA4LTA5LTI1IDEwOjM1OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIHVDbGliYy0wLjkuMzAvbGRzby9sZHNvL2FybS9kbC1zeXNkZXAuaAkyMDA5LTAyLTA3IDA5OjU3OjU5LjAwMDAwMDAwMCArMDEwMAorQEAgLTE1LDYgKzE1LDggQEAKKyAgIEdPVF9CQVNFWzFdID0gKHVuc2lnbmVkIGxvbmcpIE1PRFVMRTsgXAorIH0KKyAKKysjZGVmaW5lIERMX01BTExPQ19BTElHTiA4ICAvKiBFQUJJIG5lZWRzIDggYnl0ZSBhbGlnbm1lbnQgZm9yIFNUUkQgTERSRCovCisrCisgc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIGFybV9tb2R1bHVzKHVuc2lnbmVkIGxvbmcgbSwgdW5zaWduZWQgbG9uZyBwKQorIHsKKyAJdW5zaWduZWQgbG9uZyBpLHQsaW5jOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMi8xMjAtcm0td2hpdGVzcGFjZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjIvMTIwLXJtLXdoaXRlc3BhY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg1N2RjMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjIvMTIwLXJtLXdoaXRlc3BhY2UucGF0Y2gKQEAgLTAsMCArMSw4OCBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbSBHZW50b28uCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIHVDbGliYy0wLjkuMzAub3JpZy9pbmNsdWRlL2Fzc2VydC5oIHVDbGliYy0wLjkuMzAvaW5jbHVkZS9hc3NlcnQuaAorLS0tIHVDbGliYy0wLjkuMzAub3JpZy9pbmNsdWRlL2Fzc2VydC5oCTIwMDgtMDctMjMgMTM6MjM6MzYuMDAwMDAwMDAwICswMjAwCisrKysgdUNsaWJjLTAuOS4zMC9pbmNsdWRlL2Fzc2VydC5oCTIwMDktMDItMDcgMDk6NTc6NTkuMDAwMDAwMDAwICswMTAwCitAQCAtMzEsNyArMzEsNyBAQAorICNkZWZpbmUJX0FTU0VSVF9ICTEKKyAjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyAKKy0jaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBfX0dOVUNfUFJFUkVRICgyLDk1KQorKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIF9fR05VQ19QUkVSRVEoMiw5NSkKKyAjIGRlZmluZSBfX0FTU0VSVF9WT0lEX0NBU1Qgc3RhdGljX2Nhc3Q8dm9pZD4KKyAjZWxzZQorICMgZGVmaW5lIF9fQVNTRVJUX1ZPSURfQ0FTVCAodm9pZCkKK0BAIC02MCwxMiArNjAsMTUgQEAKKyAJCSAgICAgICAoX19hc3NlcnQgKF9fU1RSSU5HKGV4cHIpLCBfX0ZJTEVfXywgX19MSU5FX18sICAgIFwKKyAJCQkJICAgICAgIF9fQVNTRVJUX0ZVTkNUSU9OKSwgMCkpKQorIAorKy8qIERlZmluZSBzb21lIHRlbXBvcmFyaWVzIHRvIHdvcmthcm91bmQgdGlueXggbWFrZWRlcGVuZCBidWcgKi8KKysjZGVmaW5lCV9fR05VQ19QUkVSRVFfMl82CV9fR05VQ19QUkVSRVEoMiwgNikKKysjZGVmaW5lCV9fR05VQ19QUkVSRVFfMl80CV9fR05VQ19QUkVSRVEoMiwgNCkKKyAvKiBWZXJzaW9uIDIuNCBhbmQgbGF0ZXIgb2YgR0NDIGRlZmluZSBhIG1hZ2ljYWwgdmFyaWFibGUgYF9fUFJFVFRZX0ZVTkNUSU9OX18nCisgICAgd2hpY2ggY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIGN1cnJlbnRseSBiZWluZyBkZWZpbmVkLgorICAgIFRoaXMgaXMgYnJva2VuIGluIEcrKyBiZWZvcmUgdmVyc2lvbiAyLjYuCisgICAgQzl4IGhhcyBhIHNpbWlsYXIgdmFyaWFibGUgY2FsbGVkIF9fZnVuY19fLCBidXQgcHJlZmVyIHRoZSBHQ0Mgb25lIHNpbmNlCisgICAgaXQgZGVtYW5nbGVzIEMrKyBmdW5jdGlvbiBuYW1lcy4gICovCistIyBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzID8gX19HTlVDX1BSRVJFUSAoMiwgNikgOiBfX0dOVUNfUFJFUkVRICgyLCA0KQorKyMgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyA/IF9fR05VQ19QUkVSRVFfMl82IDogX19HTlVDX1BSRVJFUV8yXzQKKyAjICAgZGVmaW5lIF9fQVNTRVJUX0ZVTkNUSU9OCV9fUFJFVFRZX0ZVTkNUSU9OX18KKyAjIGVsc2UKKyAjICBpZiBkZWZpbmVkIF9fU1REQ19WRVJTSU9OX18gJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCitkaWZmIC1kdXJOIHVDbGliYy0wLjkuMzAub3JpZy9pbmNsdWRlL2NvbXBsZXguaCB1Q2xpYmMtMC45LjMwL2luY2x1ZGUvY29tcGxleC5oCistLS0gdUNsaWJjLTAuOS4zMC5vcmlnL2luY2x1ZGUvY29tcGxleC5oCTIwMDgtMTAtMDMgMTY6MjQ6MjguMDAwMDAwMDAwICswMjAwCisrKysgdUNsaWJjLTAuOS4zMC9pbmNsdWRlL2NvbXBsZXguaAkyMDA5LTAyLTA3IDA5OjU3OjU5LjAwMDAwMDAwMCArMDEwMAorQEAgLTMzLDcgKzMzLDcgQEAKKyAvKiBXZSBtaWdodCBuZWVkIHRvIGFkZCBzdXBwb3J0IGZvciBtb3JlIGNvbXBpbGVycyBoZXJlLiAgQnV0IHNpbmNlIElTTworICAgIEM5OSBpcyBvdXQgaG9wZWZ1bGx5IGFsbCBtYWludGFpbmVkIGNvbXBpbGVycyB3aWxsIHNvb24gcHJvdmlkZSB0aGUgZGF0YQorICAgIHR5cGVzIGBmbG9hdCBjb21wbGV4JyBhbmQgYGRvdWJsZSBjb21wbGV4Jy4gICovCistI2lmIF9fR05VQ19QUkVSRVEgKDIsIDcpICYmICFfX0dOVUNfUFJFUkVRICgyLCA5NykKKysjaWYgX19HTlVDX1BSRVJFUSgyLCA3KSAmJiAhX19HTlVDX1BSRVJFUSgyLCA5NykKKyAjIGRlZmluZSBfQ29tcGxleCBfX2NvbXBsZXhfXworICNlbmRpZgorIAorZGlmZiAtZHVyTiB1Q2xpYmMtMC45LjMwLm9yaWcvaW5jbHVkZS9mZWF0dXJlcy5oIHVDbGliYy0wLjkuMzAvaW5jbHVkZS9mZWF0dXJlcy5oCistLS0gdUNsaWJjLTAuOS4zMC5vcmlnL2luY2x1ZGUvZmVhdHVyZXMuaAkyMDA4LTA5LTA2IDE4OjQ1OjA3LjAwMDAwMDAwMCArMDIwMAorKysrIHVDbGliYy0wLjkuMzAvaW5jbHVkZS9mZWF0dXJlcy5oCTIwMDktMDItMDcgMDk6NTc6NTkuMDAwMDAwMDAwICswMTAwCitAQCAtMTQzLDcgKzE0Myw3IEBACisgCisgLyogQ29udmVuaWVuY2UgbWFjcm9zIHRvIHRlc3QgdGhlIHZlcnNpb25zIG9mIGdsaWJjIGFuZCBnY2MuCisgICAgVXNlIHRoZW0gbGlrZSB0aGlzOgorLSAgICNpZiBfX0dOVUNfUFJFUkVRICgyLDgpCisrICAgI2lmIF9fR05VQ19QUkVSRVEoMiw4KQorICAgIC4uLiBjb2RlIHJlcXVpcmluZyBnY2MgMi44IG9yIGxhdGVyIC4uLgorICAgICNlbmRpZgorICAgIE5vdGUgLSB0aGV5IHdvbid0IHdvcmsgZm9yIGdjYzEgb3IgZ2xpYmMxLCBzaW5jZSB0aGUgX01JTk9SIG1hY3JvcworQEAgLTI5Nyw3ICsyOTcsNyBAQAorIC8qIHVDbGliYyBkb2VzIG5vdCBzdXBwb3J0IF9GT1JUSUZZX1NPVVJDRSAqLworICN1bmRlZiBfRk9SVElGWV9TT1VSQ0UKKyAjaWYgZGVmaW5lZCBfRk9SVElGWV9TT1VSQ0UgJiYgX0ZPUlRJRllfU09VUkNFID4gMCBcCistICAgICYmIF9fR05VQ19QUkVSRVEgKDQsIDEpICYmIGRlZmluZWQgX19PUFRJTUlaRV9fICYmIF9fT1BUSU1JWkVfXyA+IDAKKysgICAgJiYgX19HTlVDX1BSRVJFUSg0LCAxKSAmJiBkZWZpbmVkIF9fT1BUSU1JWkVfXyAmJiBfX09QVElNSVpFX18gPiAwCisgIyBpZiBfRk9SVElGWV9TT1VSQ0UgPiAxCisgIyAgZGVmaW5lIF9fVVNFX0ZPUlRJRllfTEVWRUwgMgorICMgZWxzZQorQEAgLTM2Niw3ICszNjYsNyBAQAorICAqIHVjbGliYyBpdHNlbGYgaXMgdXN1YWxseSBidWlsdCB3aXRob3V0IF9fVVNFX0VYVEVSTl9JTkxJTkVTLAorICAqIHJlbW92ZSAiJiYgIWRlZmluZWQgX19PUFRJTUlaRV9TSVpFX18iIHBhcnQgdG8gZG8gb3RoZXJ3aXNlLgorICAqLworLSNpZiBfX0dOVUNfUFJFUkVRICgyLCA3KSAmJiBkZWZpbmVkIF9fT1BUSU1JWkVfXyBcCisrI2lmIF9fR05VQ19QUkVSRVEoMiwgNykgJiYgZGVmaW5lZCBfX09QVElNSVpFX18gXAorICAgICAmJiAhZGVmaW5lZCBfX09QVElNSVpFX1NJWkVfXyAmJiAhZGVmaW5lZCBfX05PX0lOTElORV9fIFwKKyAgICAgJiYgKGRlZmluZWQgX19leHRlcm5faW5saW5lIHx8IGRlZmluZWQgX19HTlVDX0dOVV9JTkxJTkVfXykKKyAjIGRlZmluZSBfX1VTRV9FWFRFUk5fSU5MSU5FUwkxCitkaWZmIC1kdXJOIHVDbGliYy0wLjkuMzAub3JpZy9pbmNsdWRlL3RnbWF0aC5oIHVDbGliYy0wLjkuMzAvaW5jbHVkZS90Z21hdGguaAorLS0tIHVDbGliYy0wLjkuMzAub3JpZy9pbmNsdWRlL3RnbWF0aC5oCTIwMDgtMTAtMDMgMTY6MjQ6MjguMDAwMDAwMDAwICswMjAwCisrKysgdUNsaWJjLTAuOS4zMC9pbmNsdWRlL3RnbWF0aC5oCTIwMDktMDItMDcgMDk6NTc6NTkuMDAwMDAwMDAwICswMTAwCitAQCAtMzQsNyArMzQsNyBAQAorICAgIGRvIG5vdCB0cnkgdGhpcyBmb3Igbm93IGFuZCBpbnN0ZWFkIGNvbmNlbnRyYXRlIG9ubHkgb24gR05VIENDLiAgT25jZQorICAgIHdlIGhhdmUgbW9yZSBpbmZvcm1hdGlvbiBzdXBwb3J0IGZvciBvdGhlciBjb21waWxlcnMgbWlnaHQgZm9sbG93LiAgKi8KKyAKKy0jaWYgX19HTlVDX1BSRVJFUSAoMiwgNykKKysjaWYgX19HTlVDX1BSRVJFUSgyLCA3KQorIAorICMgaWZkZWYgX19OT19MT05HX0RPVUJMRV9NQVRICisgIyAgZGVmaW5lIF9fdGdtbChmY3QpIGZjdApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMi8xMzAtZ251ODktaW5saW5lLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMi8xMzAtZ251ODktaW5saW5lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNDViZjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4yLzEzMC1nbnU4OS1pbmxpbmUucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbSBHZW50b28uCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIHVDbGliYy0wLjkuMzAub3JpZy9SdWxlcy5tYWsgdUNsaWJjLTAuOS4zMC9SdWxlcy5tYWsKKy0tLSB1Q2xpYmMtMC45LjMwLm9yaWcvUnVsZXMubWFrCTIwMDgtMTEtMTIgMTM6MjQ6MTYuMDAwMDAwMDAwICswMTAwCisrKysgdUNsaWJjLTAuOS4zMC9SdWxlcy5tYWsJMjAwOS0wMi0wNyAwOTo1Nzo1OS4wMDAwMDAwMDAgKzAxMDAKK0BAIC01MTksNiArNTE5LDcgQEAKKyBlbmRpZgorIAorIENGTEFHUyArPSAkKGNhbGwgY2hlY2tfZ2NjLC1zdGQ9Z251OTksKQorK0NGTEFHUyArPSAkKGNhbGwgY2hlY2tfZ2NjLC1mZ251ODktaW5saW5lLCkKKyAKKyBMREZMQUdTX05PU1RSSVA6PSQoQ1BVX0xERkxBR1MteSkgLXNoYXJlZCBcCisgCS1XbCwtLXdhcm4tY29tbW9uIC1XbCwtLXdhcm4tb25jZSAtV2wsLXosY29tYnJlbG9jCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4yLzE0MC1wYWNrLW5ldGluZXQtc3RydWN0cy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjIvMTQwLXBhY2stbmV0aW5ldC1zdHJ1Y3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MjdmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4yLzE0MC1wYWNrLW5ldGluZXQtc3RydWN0cy5wYXRjaApAQCAtMCwwICsxLDIyNCBAQAorZGlmZiAtdXJOIHVDbGliYy0wLjkuMzAuMS5vcmlnL2luY2x1ZGUvbmV0aW5ldC9pZ21wLmggdUNsaWJjLTAuOS4zMC4xL2luY2x1ZGUvbmV0aW5ldC9pZ21wLmgKKy0tLSB1Q2xpYmMtMC45LjMwLjEub3JpZy9pbmNsdWRlL25ldGluZXQvaWdtcC5oCTIwMDktMDQtMDggMDk6MDA6MTAuOTI2NTQ1MTMyICswMjAwCisrKysgdUNsaWJjLTAuOS4zMC4xL2luY2x1ZGUvbmV0aW5ldC9pZ21wLmgJMjAwOS0wNC0wOCAwOTowMDoyNi4yNDI1MTQyNzMgKzAyMDAKK0BAIC02OSw3ICs2OSw3IEBACisgICB1X2ludDhfdCBpZ21wX2NvZGU7ICAgICAgICAgICAgIC8qIHJvdXRpbmcgY29kZSAqLworICAgdV9pbnQxNl90IGlnbXBfY2tzdW07ICAgICAgICAgICAvKiBjaGVja3N1bSAqLworICAgc3RydWN0IGluX2FkZHIgaWdtcF9ncm91cDsgICAgICAvKiBncm91cCBhZGRyZXNzICovCistfTsKKyt9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisgCisgI2RlZmluZSBJR01QX01JTkxFTgkJCTgKKyAKK2RpZmYgLXVyTiB1Q2xpYmMtMC45LjMwLjEub3JpZy9pbmNsdWRlL25ldGluZXQvaW4uaCB1Q2xpYmMtMC45LjMwLjEvaW5jbHVkZS9uZXRpbmV0L2luLmgKKy0tLSB1Q2xpYmMtMC45LjMwLjEub3JpZy9pbmNsdWRlL25ldGluZXQvaW4uaAkyMDA5LTA0LTA4IDA5OjAwOjEwLjkyNjU0NTEzMiArMDIwMAorKysrIHVDbGliYy0wLjkuMzAuMS9pbmNsdWRlL25ldGluZXQvaW4uaAkyMDA5LTA0LTA4IDA5OjAwOjI2LjI0MjUxNDI3MyArMDIwMAorQEAgLTIwMiw3ICsyMDIsNyBAQAorICNkZWZpbmUgczZfYWRkcgkJCWluNl91LnU2X2FkZHI4CisgI2RlZmluZSBzNl9hZGRyMTYJCWluNl91LnU2X2FkZHIxNgorICNkZWZpbmUgczZfYWRkcjMyCQlpbjZfdS51Nl9hZGRyMzIKKy0gIH07CisrICB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisgCisgZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2FueTsgICAgICAgIC8qIDo6ICovCisgZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2xvb3BiYWNrOyAgIC8qIDo6MSAqLworQEAgLTIyOSw3ICsyMjksNyBAQAorIAkJCSAgIF9fU09DS0FERFJfQ09NTU9OX1NJWkUgLQorIAkJCSAgIHNpemVvZiAoaW5fcG9ydF90KSAtCisgCQkJICAgc2l6ZW9mIChzdHJ1Y3QgaW5fYWRkcildOworLSAgfTsKKysgIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKyAjZW5kaWYKKyAKKyAvKiBEaXR0bywgZm9yIElQdjYuICAqLworQEAgLTI0MCw3ICsyNDAsNyBAQAorICAgICB1aW50MzJfdCBzaW42X2Zsb3dpbmZvOwkvKiBJUHY2IGZsb3cgaW5mb3JtYXRpb24gKi8KKyAgICAgc3RydWN0IGluNl9hZGRyIHNpbjZfYWRkcjsJLyogSVB2NiBhZGRyZXNzICovCisgICAgIHVpbnQzMl90IHNpbjZfc2NvcGVfaWQ7CS8qIElQdjYgc2NvcGUtaWQgKi8KKy0gIH07CisrICB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisgCisgCisgLyogSVB2NCBtdWx0aWNhc3QgcmVxdWVzdC4gICovCitAQCAtMjUxLDcgKzI1MSw3IEBACisgCisgICAgIC8qIExvY2FsIElQIGFkZHJlc3Mgb2YgaW50ZXJmYWNlLiAgKi8KKyAgICAgc3RydWN0IGluX2FkZHIgaW1yX2ludGVyZmFjZTsKKy0gIH07CisrICB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisgCisgc3RydWN0IGlwX21yZXFfc291cmNlCisgICB7CitAQCAtMjYzLDcgKzI2Myw3IEBACisgCisgICAgIC8qIElQIGFkZHJlc3Mgb2YgaW50ZXJmYWNlLiAgKi8KKyAgICAgc3RydWN0IGluX2FkZHIgaW1yX3NvdXJjZWFkZHI7CistICB9OworKyAgfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworIAorIC8qIExpa2V3aXNlLCBmb3IgSVB2Ni4gICovCisgc3RydWN0IGlwdjZfbXJlcQorQEAgLTI3Myw3ICsyNzMsNyBAQAorIAorICAgICAvKiBsb2NhbCBpbnRlcmZhY2UgKi8KKyAgICAgdW5zaWduZWQgaW50IGlwdjZtcl9pbnRlcmZhY2U7CistICB9OworKyAgfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworIAorIAorIC8qIE11bHRpY2FzdCBncm91cCByZXF1ZXN0LiAgKi8KK0BAIC0yODQsNyArMjg0LDcgQEAKKyAKKyAgICAgLyogR3JvdXAgYWRkcmVzcy4gICovCisgICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGdyX2dyb3VwOworLSAgfTsKKysgIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKyAKKyBzdHJ1Y3QgZ3JvdXBfc291cmNlX3JlcQorICAgeworQEAgLTI5Niw3ICsyOTYsNyBAQAorIAorICAgICAvKiBTb3VyY2UgYWRkcmVzcy4gICovCisgICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGdzcl9zb3VyY2U7CistICB9OworKyAgfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworIAorIAorIC8qIEZ1bGwtc3RhdGUgZmlsdGVyIG9wZXJhdGlvbnMuICAqLworQEAgLTMxNSw3ICszMTUsNyBAQAorICAgICB1aW50MzJfdCBpbXNmX251bXNyYzsKKyAgICAgLyogU291cmNlIGFkZHJlc3Nlcy4gICovCisgICAgIHN0cnVjdCBpbl9hZGRyIGltc2Zfc2xpc3RbMV07CistICB9OworKyAgfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworIAorICNkZWZpbmUgSVBfTVNGSUxURVJfU0laRShudW1zcmMpIChzaXplb2YgKHN0cnVjdCBpcF9tc2ZpbHRlcikgXAorIAkJCQkgIC0gc2l6ZW9mIChzdHJ1Y3QgaW5fYWRkcikJCSAgICAgIFwKK0BAIC0zMzYsNyArMzM2LDcgQEAKKyAgICAgdWludDMyX3QgZ2ZfbnVtc3JjOworICAgICAvKiBTb3VyY2UgYWRkcmVzc2VzLiAgKi8KKyAgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgZ2Zfc2xpc3RbMV07CistfTsKKyt9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisgCisgI2RlZmluZSBHUk9VUF9GSUxURVJfU0laRShudW1zcmMpIChzaXplb2YgKHN0cnVjdCBncm91cF9maWx0ZXIpIFwKKyAJCQkJICAgLSBzaXplb2YgKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKQkgICAgICBcCitAQCAtNDYwLDE0ICs0NjAsMTQgQEAKKyAgIHsKKyAgICAgc3RydWN0IGluNl9hZGRyIGlwaTZfYWRkcjsJLyogc3JjL2RzdCBJUHY2IGFkZHJlc3MgKi8KKyAgICAgdW5zaWduZWQgaW50IGlwaTZfaWZpbmRleDsJLyogc2VuZC9yZWN2IGludGVyZmFjZSBpbmRleCAqLworLSAgfTsKKysgIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKyAKKyAvKiBJUHY2IE1UVSBpbmZvcm1hdGlvbi4gICovCisgc3RydWN0IGlwNl9tdHVpbmZvCisgICB7CisgICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgaXA2bV9hZGRyOyAvKiBkc3QgYWRkcmVzcyBpbmNsdWRpbmcgem9uZSBJRCAqLworICAgICB1aW50MzJfdCBpcDZtX210dTsJCSAgIC8qIHBhdGggTVRVIGluIGhvc3QgYnl0ZSBvcmRlciAqLworLSAgfTsKKysgIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKyAKKyAKKyAjaWYgMCAvKmRlZiBfX1VTRV9HTlUqLworZGlmZiAtdXJOIHVDbGliYy0wLjkuMzAuMS5vcmlnL2luY2x1ZGUvbmV0aW5ldC9pcC5oIHVDbGliYy0wLjkuMzAuMS9pbmNsdWRlL25ldGluZXQvaXAuaAorLS0tIHVDbGliYy0wLjkuMzAuMS5vcmlnL2luY2x1ZGUvbmV0aW5ldC9pcC5oCTIwMDktMDQtMDggMDk6MDA6MTAuOTI2NTQ1MTMyICswMjAwCisrKysgdUNsaWJjLTAuOS4zMC4xL2luY2x1ZGUvbmV0aW5ldC9pcC5oCTIwMDktMDQtMDggMDk6MDA6MjYuMjQyNTE0MjczICswMjAwCitAQCAtNjMsNyArNjMsNyBAQAorICAgICB1X2ludDMyX3Qgc2FkZHI7CisgICAgIHVfaW50MzJfdCBkYWRkcjsKKyAgICAgLypUaGUgb3B0aW9ucyBzdGFydCBoZXJlLiAqLworLSAgfTsKKysgIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKyAKKyAjaWZkZWYgX19VU0VfQlNECisgLyoKK0BAIC0xMjcsNyArMTI3LDcgQEAKKyAgICAgdV9pbnQ4X3QgaXBfcDsJCQkvKiBwcm90b2NvbCAqLworICAgICB1X3Nob3J0IGlwX3N1bTsJCQkvKiBjaGVja3N1bSAqLworICAgICBzdHJ1Y3QgaW5fYWRkciBpcF9zcmMsIGlwX2RzdDsJLyogc291cmNlIGFuZCBkZXN0IGFkZHJlc3MgKi8KKy0gIH07CisrICB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisgCisgLyoKKyAgKiBUaW1lIHN0YW1wIG9wdGlvbiBzdHJ1Y3R1cmUuCitkaWZmIC11ck4gdUNsaWJjLTAuOS4zMC4xLm9yaWcvaW5jbHVkZS9uZXRpbmV0L2lwX2ljbXAuaCB1Q2xpYmMtMC45LjMwLjEvaW5jbHVkZS9uZXRpbmV0L2lwX2ljbXAuaAorLS0tIHVDbGliYy0wLjkuMzAuMS5vcmlnL2luY2x1ZGUvbmV0aW5ldC9pcF9pY21wLmgJMjAwOS0wNC0wOCAwOTowMDoxMC45MjY1NDUxMzIgKzAyMDAKKysrKyB1Q2xpYmMtMC45LjMwLjEvaW5jbHVkZS9uZXRpbmV0L2lwX2ljbXAuaAkyMDA5LTA0LTA4IDA5OjAwOjI2LjI0MjUxNDI3MyArMDIwMAorQEAgLTQzLDcgKzQzLDcgQEAKKyAgICAgICB1X2ludDE2X3QJbXR1OworICAgICB9IGZyYWc7CQkJLyogcGF0aCBtdHUgZGlzY292ZXJ5ICovCisgICB9IHVuOworLX07CisrfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworIAorICNkZWZpbmUgSUNNUF9FQ0hPUkVQTFkJCTAJLyogRWNobyBSZXBseQkJCSovCisgI2RlZmluZSBJQ01QX0RFU1RfVU5SRUFDSAkzCS8qIERlc3RpbmF0aW9uIFVucmVhY2hhYmxlCSovCitAQCAtMTk5LDcgKzE5OSw3IEBACisgI2RlZmluZQlpY21wX3JhZHYJaWNtcF9kdW4uaWRfcmFkdgorICNkZWZpbmUJaWNtcF9tYXNrCWljbXBfZHVuLmlkX21hc2sKKyAjZGVmaW5lCWljbXBfZGF0YQlpY21wX2R1bi5pZF9kYXRhCistfTsKKyt9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisgCisgLyoKKyAgKiBMb3dlciBib3VuZHMgb24gcGFja2V0IGxlbmd0aHMgZm9yIHZhcmlvdXMgdHlwZXMuCitkaWZmIC11ck4gdUNsaWJjLTAuOS4zMC4xLm9yaWcvaW5jbHVkZS9uZXRpbmV0L3RjcC5oIHVDbGliYy0wLjkuMzAuMS9pbmNsdWRlL25ldGluZXQvdGNwLmgKKy0tLSB1Q2xpYmMtMC45LjMwLjEub3JpZy9pbmNsdWRlL25ldGluZXQvdGNwLmgJMjAwOS0wNC0wOCAwOTowMDoxMC45MjY1NDUxMzIgKzAyMDAKKysrKyB1Q2xpYmMtMC45LjMwLjEvaW5jbHVkZS9uZXRpbmV0L3RjcC5oCTIwMDktMDQtMDggMDk6MDA6MjYuMjQyNTE0MjczICswMjAwCitAQCAtODYsNyArODYsNyBAQAorICAgICB1X2ludDE2X3QgdGhfd2luOwkJLyogd2luZG93ICovCisgICAgIHVfaW50MTZfdCB0aF9zdW07CQkvKiBjaGVja3N1bSAqLworICAgICB1X2ludDE2X3QgdGhfdXJwOwkJLyogdXJnZW50IHBvaW50ZXIgKi8KKy19OworK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKyAKKyAjIGVsc2UgLyogIV9fRkFWT1JfQlNEICovCisgc3RydWN0IHRjcGhkcgorQEAgLTEyMSw3ICsxMjEsNyBAQAorICAgICB1X2ludDE2X3Qgd2luZG93OworICAgICB1X2ludDE2X3QgY2hlY2s7CisgICAgIHVfaW50MTZfdCB1cmdfcHRyOworLX07CisrfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworICMgZW5kaWYgLyogX19GQVZPUl9CU0QgKi8KKyAKKyBlbnVtCitAQCAtMjI2LDcgKzIyNiw3IEBACisgICB1X2ludDMyX3QJdGNwaV9yY3Zfc3BhY2U7CisgCisgICB1X2ludDMyX3QJdGNwaV90b3RhbF9yZXRyYW5zOworLX07CisrfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworIAorIAorIC8qIEZvciBUQ1BfTUQ1U0lHIHNvY2tldCBvcHRpb24uICAqLworQEAgLTIzOSw3ICsyMzksNyBAQAorICAgdV9pbnQxNl90CXRjcG1fa2V5bGVuOwkJCS8qIEtleSBsZW5ndGguICAqLworICAgdV9pbnQzMl90CV9fdGNwbV9wYWQyOwkJCS8qIFplcm8uICAqLworICAgdV9pbnQ4X3QJdGNwbV9rZXlbVENQX01ENVNJR19NQVhLRVlMRU5dOwkvKiBLZXkgKGJpbmFyeSkuICAqLworLX07CisrfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworIAorICNlbmRpZiAvKiBNaXNjLiAgKi8KKyAKK2RpZmYgLXVyTiB1Q2xpYmMtMC45LjMwLjEub3JpZy9pbmNsdWRlL25ldGluZXQvdWRwLmggdUNsaWJjLTAuOS4zMC4xL2luY2x1ZGUvbmV0aW5ldC91ZHAuaAorLS0tIHVDbGliYy0wLjkuMzAuMS5vcmlnL2luY2x1ZGUvbmV0aW5ldC91ZHAuaAkyMDA5LTA0LTA4IDA5OjAwOjEwLjkyNjU0NTEzMiArMDIwMAorKysrIHVDbGliYy0wLjkuMzAuMS9pbmNsdWRlL25ldGluZXQvdWRwLmgJMjAwOS0wNC0wOCAwOTowMDoyNi4yNDI1MTQyNzMgKzAyMDAKK0BAIC02MSw3ICs2MSw3IEBACisgICB1X2ludDE2X3QgdWhfZHBvcnQ7CQkvKiBkZXN0aW5hdGlvbiBwb3J0ICovCisgICB1X2ludDE2X3QgdWhfdWxlbjsJCS8qIHVkcCBsZW5ndGggKi8KKyAgIHVfaW50MTZfdCB1aF9zdW07CQkvKiB1ZHAgY2hlY2tzdW0gKi8KKy19OworK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKyAKKyAjZWxzZQorIAorQEAgLTcxLDcgKzcxLDcgQEAKKyAgIHVfaW50MTZfdCBkZXN0OworICAgdV9pbnQxNl90IGxlbjsKKyAgIHVfaW50MTZfdCBjaGVjazsKKy19OworK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKyAjZW5kaWYKKyAKKyAjZGVmaW5lIFNPTF9VRFAgICAgICAgICAgICAxNyAgICAgIC8qIHNvY2tvcHQgbGV2ZWwgZm9yIFVEUCAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMi8xNTAtTFQtcHRocmVhZF9hdGZvcmstdW5oaWRlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMi8xNTAtTFQtcHRocmVhZF9hdGZvcmstdW5oaWRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmZTQ1NjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4yLzE1MC1MVC1wdGhyZWFkX2F0Zm9yay11bmhpZGUucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSBhMDVjNDM4MGM1YWFhNmUxMDdhNGM3ZTFlNWExMzllYzRjYzQzZjBjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSGVubmluZyBIZWlub2xkIDxoZWlub2xkQGluZi5mdS1iZXJsaW4uZGU+CitEYXRlOiBTdW4sIDIxIEZlYiAyMDEwIDExOjU1OjMyICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMTQvMTVdIExUIHB0aHJlYWRfYXRmb3JrOiB1bmhpZGUKKworVHJ5aW5nIHRvIGNvbXBpbGUgcGVybCB3aXRoIHVDbGliYyBuZXcgbGludXh0aHJlYWRzIG9uIGFybS4KK0kgcnVuIGludG8gdGhlIHByb2JsZW0gdGhhdCBwdGhyZWFkX2F0Zm9yayBpcyBub3QgYXZhaWxhYmxlLgorVGhlIHByb2JsZW0gd2FzIHRoYXQgaXQgd2FzIHN5bmNlZCB3aXRoIHRoZSBnbGliYyB2ZXJzaW9uLCB3aGljaCBoYXMKK2NvbXBhdCBpZmRlZnMgd2UgZG8gbm90IG5lZWQgaW4gdUNsaWJjLiBUaGUgaW5pdGFsIGNoZWNrZWQgaW4gdmVyc2lvbgoraXMgcmlnaHQgYW5kIHdvcmtzLiBTbyBlaXRoZXIgcmV2ZXJ0IHRoZSBjb21taXQgMiB5ZWFycyBhZ28KK29yIHBhdGNoIGl0IHdpdGggdGhlIHBhdGNoIGF0dGFjaGVkIEkgbWFkZSBmb3Igb3BlbmVtYmVkZGVkLgorCitTaWduZWQtb2ZmLWJ5OiBIZW5uaW5nIEhlaW5vbGQgPGhlaW5vbGRAaW5mLmZ1LWJlcmxpbi5kZT4KK1NpZ25lZC1vZmYtYnk6IEJlcm5oYXJkIFJldXRuZXItRmlzY2hlciA8cmVwLmRvdC5ub3BAZ21haWwuY29tPgorLS0tCisgbGlicHRocmVhZC9saW51eHRocmVhZHMvTWFrZWZpbGUuaW4gICAgICB8ICAgIDIgKy0KKyBsaWJwdGhyZWFkL2xpbnV4dGhyZWFkcy9wdGhyZWFkX2F0Zm9yay5jIHwgICAxMyArKystLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlicHRocmVhZC9saW51eHRocmVhZHMvTWFrZWZpbGUuaW4gYi9saWJwdGhyZWFkL2xpbnV4dGhyZWFkcy9NYWtlZmlsZS5pbgoraW5kZXggOTQ3ZGVhOS4uZDUzYjVmYSAxMDA2NDQKKy0tLSBhL2xpYnB0aHJlYWQvbGludXh0aHJlYWRzL01ha2VmaWxlLmluCisrKysgYi9saWJwdGhyZWFkL2xpbnV4dGhyZWFkcy9NYWtlZmlsZS5pbgorQEAgLTQ1LDcgKzQ1LDcgQEAgcHRocmVhZF9zeXNkZXBfU1JDIDo9ICQocGF0c3Vic3QgJSwkKGxpYnB0aHJlYWRfRElSKS9zeXNkZXBzL3B0aHJlYWQvJS5jLCQocHRocmUKKyBwdGhyZWFkX1NSQyA6PSBcCisgCWF0dHIgYmFycmllciBjYW5jZWwgY29uZHZhciBlcnJubyBldmVudHMgam9pbiBwdGhyZWFkIFwKKyAJbG9ja2ZpbGUgbWFuYWdlciBtdXRleCBwdC1tYWNoaW5lIHB0Y2xlYW51cCBcCistCXB0Y2xvY2tfZ2V0dGltZSBwdGNsb2NrX3NldHRpbWUgcHRmb3JrIHB0aGFuZGxlcyBcCisrCXB0Y2xvY2tfZ2V0dGltZSBwdGNsb2NrX3NldHRpbWUgcHRmb3JrIHB0aGFuZGxlcyBwdGhyZWFkX2F0Zm9yayBcCisgCXB0aHJlYWRfc2V0ZWdpZCBwdGhyZWFkX3NldGV1aWQgcHRocmVhZF9zZXRnaWQgcHRocmVhZF9zZXRyZWdpZCBcCisgCXB0aHJlYWRfc2V0cmVzZ2lkIHB0aHJlYWRfc2V0cmVzdWlkIHB0aHJlYWRfc2V0cmV1aWQgcHRocmVhZF9zZXR1aWQgXAorIAlyd2xvY2sgc2VtYXBob3JlIHNpZ2hhbmRsZXIgc2lnbmFscyBzcGVjaWZpYyBzcGlubG9jaworZGlmZiAtLWdpdCBhL2xpYnB0aHJlYWQvbGludXh0aHJlYWRzL3B0aHJlYWRfYXRmb3JrLmMgYi9saWJwdGhyZWFkL2xpbnV4dGhyZWFkcy9wdGhyZWFkX2F0Zm9yay5jCitpbmRleCAyNDY0YWNiLi40YzgzZGQwIDEwMDY0NAorLS0tIGEvbGlicHRocmVhZC9saW51eHRocmVhZHMvcHRocmVhZF9hdGZvcmsuYworKysrIGIvbGlicHRocmVhZC9saW51eHRocmVhZHMvcHRocmVhZF9hdGZvcmsuYworQEAgLTQzLDEyICs0Myw4IEBAIGV4dGVybiB2b2lkICpfX2Rzb19oYW5kbGUgX19hdHRyaWJ1dGVfXyAoKF9fd2Vha19fKSk7CisgCisgLyogSGlkZSB0aGUgc3ltYm9sIHNvIHRoYXQgbm8gZGVmaW5pdGlvbiBidXQgdGhlIG9uZSBsb2NhbGx5IGluIHRoZQorICAgIGV4ZWN1dGFibGUgb3IgRFNPIGlzIHVzZWQuICAqLworLWludAorLSNpZm5kZWYgX19wdGhyZWFkX2F0Zm9yaworLS8qIERvbid0IG1hcmsgdGhlIGNvbXBhdGliaWxpdHkgZnVuY3Rpb24gYXMgaGlkZGVuLiAgKi8KKy1hdHRyaWJ1dGVfaGlkZGVuCistI2VuZGlmCistX19wdGhyZWFkX2F0Zm9yayAocHJlcGFyZSwgcGFyZW50LCBjaGlsZCkKKysKKytpbnQgYXR0cmlidXRlX2hpZGRlbiBfX3B0aHJlYWRfYXRmb3JrIChwcmVwYXJlLCBwYXJlbnQsIGNoaWxkKQorICAgICAgdm9pZCAoKnByZXBhcmUpICh2b2lkKTsKKyAgICAgIHZvaWQgKCpwYXJlbnQpICh2b2lkKTsKKyAgICAgIHZvaWQgKCpjaGlsZCkgKHZvaWQpOworQEAgLTU2LDggKzUyLDUgQEAgX19wdGhyZWFkX2F0Zm9yayAocHJlcGFyZSwgcGFyZW50LCBjaGlsZCkKKyAgIHJldHVybiBfX3JlZ2lzdGVyX2F0Zm9yayAocHJlcGFyZSwgcGFyZW50LCBjaGlsZCwKKyAJCQkgICAgJl9fZHNvX2hhbmRsZSA9PSBOVUxMID8gTlVMTCA6IF9fZHNvX2hhbmRsZSk7CisgfQorLSNpZm5kZWYgX19wdGhyZWFkX2F0Zm9yaworLWV4dGVybiBpbnQgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCpwcmVwYXJlKSAodm9pZCksIHZvaWQgKCpwYXJlbnQpICh2b2lkKSwKKy0JCQkgICB2b2lkICgqY2hpbGQpICh2b2lkKSkgYXR0cmlidXRlX2hpZGRlbjsKKysKKyBzdHJvbmdfYWxpYXMgKF9fcHRocmVhZF9hdGZvcmssIHB0aHJlYWRfYXRmb3JrKQorLSNlbmRpZgorLS0gCisxLjYuNi4xCisKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjIvMTYwLU1ha2UtdXNlLW9mLW1hY3Jvcy1mcm9tLXN5cy1hc20uaC1pbi1jcnQxLlMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4yLzE2MC1NYWtlLXVzZS1vZi1tYWNyb3MtZnJvbS1zeXMtYXNtLmgtaW4tY3J0MS5TLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1Yjc5NjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4yLzE2MC1NYWtlLXVzZS1vZi1tYWNyb3MtZnJvbS1zeXMtYXNtLmgtaW4tY3J0MS5TLnBhdGNoCkBAIC0wLDAgKzEsODcgQEAKK0Zyb20gMjkxMTEwM2RkNGEwM2JiZDNhYWQxMWVkZGZjZTUyNGE1YzliYTliMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIyIEphbiAyMDEwIDEzOjAwOjIwICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMDMvMTVdIE1ha2UgdXNlIG9mIG1hY3JvcyBmcm9tIHN5cy9hc20uaCBpbiBjcnQxLlMKKworTmVlZGVkIGZvciBtaXBzIG5wdGwgdG8gYm9vdCBvbmNlIGFnYWluLgorKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgOWMzNDNmZDQwMzBkY2Q3YTUyNjE2ZjM2NTg5MzE3N2RkZWQ1MDM0NikKKworU2lnbmVkLW9mZi1ieTogQmVybmhhcmQgUmV1dG5lci1GaXNjaGVyIDxyZXAuZG90Lm5vcEBnbWFpbC5jb20+CistLS0KKyBsaWJjL3N5c2RlcHMvbGludXgvbWlwcy9jcnQxLlMgfCAgIDQ2ICsrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMzMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJjL3N5c2RlcHMvbGludXgvbWlwcy9jcnQxLlMgYi9saWJjL3N5c2RlcHMvbGludXgvbWlwcy9jcnQxLlMKK2luZGV4IGU4NTFkNTIuLjZhODA0MTIgMTAwNjQ0CistLS0gYS9saWJjL3N5c2RlcHMvbGludXgvbWlwcy9jcnQxLlMKKysrKyBiL2xpYmMvc3lzZGVwcy9saW51eC9taXBzL2NydDEuUworQEAgLTg1LDI5ICs4NSwxMCBAQAorIAorIF9fc3RhcnQ6CisgI2lmZGVmIF9fUElDX18KKy0jaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMgorLQkuZnJhbWUJc3AsIDI0LCBzcAorLSAgICAgICAgLnNldCBub3Jlb3JkZXIKKy0JbW92ZSAkMCwgJDMxCQkvKiBTYXZlIG9sZCByYS4gICovCistCWJhbCAxMGYJCQkvKiBGaW5kIGFkZHIgb2YgY3Bsb2FkLiAgKi8KKy0gICAgICAgIG5vcAorLTEwOgorLQkuY3Bsb2FkICQzMQorLQltb3ZlICQzMSwgJDAKKy0JLnNldCByZW9yZGVyCistCS5jcHJlc3RvcmUgMTYKKy0jZWxzZQorLQltb3ZlICQwLCAkMzE7IC8qIFNhdmUgb2xkIHJhLiAgKi8KKy0JLnNldCBub3Jlb3JkZXIKKy0JYmFsIDEwZiAvKiBGaW5kIGFkZHIgb2YgLmNwc2V0dXAuICAqLworLQlub3AKKy0xMDoKKy0JLnNldCByZW9yZGVyCistCS5jcHNldHVwICQzMSwgJDI1LCAxMGIKKy0JbW92ZSAkMzEsICQwCistI2VuZGlmCisrCVNFVFVQX0dQWCgkMCkKKysJU0VUVVBfR1BYNjQoJDI1LCQwKQorICNlbHNlCistCWxhICQyOCwgX2dwICAgICAgICAgICAgIC8qIFNldHVwIEdQIGNvcnJlY3RseSBpZiB3ZSdyZSBub24tUElDLiAgKi8KKysJUFRSX0xBICQyOCwgX2dwICAgICAgICAgICAgIC8qIFNldHVwIEdQIGNvcnJlY3RseSBpZiB3ZSdyZSBub24tUElDLiAgKi8KKyAJbW92ZSAkMzEsICQwCisgI2VuZGlmCisgCitAQCAtMTE4LDE4ICs5OSwxOCBAQCBfX3N0YXJ0OgorIAkvKiBBbGxvY2F0ZSBzcGFjZSBvbiB0aGUgc3RhY2sgZm9yIHNldmVuIGFyZ3VtZW50cyBhbmQKKyAJICogbWFrZSBzdXJlIHRoZSBzdGFjayBpcyBhbGlnbmVkIHRvIGRvdWJsZSB3b3JkcyAoOCBieXRlcykgKi8KKyAKKysJYW5kICQyOSwgLTIgKiBTWlJFRworKworICNpZiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTMyCistCWFuZCAkMjksIC0yICogNAorLQlzdWJ1ICQyOSwgMzIKKy0JbGEgJDcsIF9pbml0CQkvKiBpbml0ICovCistCWxhICQ4LCBfZmluaQorLQlzdyAkOCwgMTYoJDI5KQkJLyogZmluaSAqLworLQlzdyAkMiwgMjAoJDI5KQkJLyogcnRsZF9maW5pICovCistCXN3ICQyOSwgMjQoJDI5KQkJLyogc3RhY2tfZW5kICovCistI2Vsc2UKKy0JYW5kICQyOSwgLTIgKiBQVFJTSVpFCisrCVBUUl9TVUJJVSAkMjksIDMyCisrI2VuZGlmCisgCVBUUl9MQSAkNywgX2luaXQJCS8qIGluaXQgKi8KKy0JUFRSX0xBICQ4LCBfZmluaQkJLyogZmluaSAqLworKwlQVFJfTEEgJDgsIF9maW5pCisrI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJMzIKKysJUFRSX1MgJDgsIDE2KCQyOSkJCS8qIGZpbmkgKi8KKysJUFRSX1MgJDIsIDIwKCQyOSkJCS8qIHJ0bGRfZmluaSAqLworKwlQVFJfUyAkMjksIDI0KCQyOSkJCS8qIHN0YWNrX2VuZCAqLworKyNlbHNlCisgCW1vdmUgJDksICQyCQkvKiBydGxkX2ZpbmkgKi8KKyAJbW92ZSAkMTAsICQyOQkJLyogc3RhY2tfZW5kICovCisgI2VuZGlmCitAQCAtMTQ4LDQgKzEyOSwzIEBAIF9fZGF0YV9zdGFydDoKKyAJLndlYWsgZGF0YV9zdGFydAorIAlkYXRhX3N0YXJ0ID0gX19kYXRhX3N0YXJ0CisgCistCistLSAKKzEuNi42LjEKKwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMi8xNzAtTWFrZWZpbGUuaW4tTWFrZS1pbnN0YWxsX2Rldi1kZXBlbmQtb24taW5zdGFsbF9ydW50aS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjIvMTcwLU1ha2VmaWxlLmluLU1ha2UtaW5zdGFsbF9kZXYtZGVwZW5kLW9uLWluc3RhbGxfcnVudGkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhjODQ5MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjIvMTcwLU1ha2VmaWxlLmluLU1ha2UtaW5zdGFsbF9kZXYtZGVwZW5kLW9uLWluc3RhbGxfcnVudGkucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSAzMjM0NTNkODVlZDI5Y2NiYTdhODFkODg0NDc5MTg4ODY5Y2Q2NGI3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSGVubmluZyBIZWlub2xkIDxoZWlub2xkQGluZi5mdS1iZXJsaW4uZGU+CitEYXRlOiBTYXQsIDIzIEphbiAyMDEwIDIxOjI5OjQyIC0wODAwCitTdWJqZWN0OiBbUEFUQ0ggMTMvMTVdIE1ha2VmaWxlLmluOiBNYWtlIGluc3RhbGxfZGV2IGRlcGVuZCBvbiBpbnN0YWxsX3J1bnRpbWUuCisKKyogSGVscHMgaW4gcGFyYWxsZWwgYnVpbGQuCisKK1NpZ25lZC1vZmYtYnk6IEhlbm5pbmcgSGVpbm9sZCA8aGVpbm9sZEBpbmYuZnUtYmVybGluLmRlPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEJlcm5oYXJkIFJldXRuZXItRmlzY2hlciA8cmVwLmRvdC5ub3BAZ21haWwuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCAgICAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCBlYzRjMjhlLi5hODg5ODM4IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMzcwLDcgKzM3MCw3IEBAIGlmbmVxICgkKFVDTElCQ19TVVBQT1JUX0FJX0FERFJDT05GSUcpLHkpCisgZW5kaWYKKyAKKyAjIEluc3RhbGxzIGRldmVsb3BtZW50IGxpYnJhcnkgbGlua3MuCistaW5zdGFsbF9kZXY6IGluc3RhbGxfaGVhZGVycyBhbGwKKytpbnN0YWxsX2RldjogaW5zdGFsbF9oZWFkZXJzIGluc3RhbGxfcnVudGltZQorIAkkKElOU1RBTEwpIC1kICQoUFJFRklYKSQoREVWRUxfUFJFRklYKWxpYgorIAktJChJTlNUQUxMKSAtbSA2NDQgbGliLyouW2FvXSAkKFBSRUZJWCkkKERFVkVMX1BSRUZJWClsaWIvCisgaWZlcSAoJChIQVZFX1NIQVJFRCkseSkKKy0tIAorMS42LjYuMQorCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4yLzE4MC1VbmJyZWFrLWJ1aWxkLWZvci1zcGFyYy1vbi1zb21lLWNvbmZpZy1zLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMi8xODAtVW5icmVhay1idWlsZC1mb3Itc3BhcmMtb24tc29tZS1jb25maWctcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWQ3NzlhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMi8xODAtVW5icmVhay1idWlsZC1mb3Itc3BhcmMtb24tc29tZS1jb25maWctcy5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDdiOTY0MTcwNTM2OTUxYTI2MGY3ZDU1MmRiOTliNDI4ZDFlYTUwMjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBdXN0aW4gRm94bGV5IDxhdXN0aW5mQGNldG9uY29ycC5jb20+CitEYXRlOiBXZWQsIDMgRmViIDIwMTAgMTI6MTI6MTAgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSCAwOC8xNV0gVW5icmVhayBidWlsZCBmb3Igc3BhcmMgb24gc29tZSBjb25maWcncworCitUaGFua3MgdG8gcm9iQGxhbmRsZXkubmV0CisKK1NpZ25lZC1vZmYtYnk6IEF1c3RpbiBGb3hsZXkgPGF1c3RpbmZAY2V0b25jb3JwLmNvbT4KKy0tLQorIGxpYmMvc3lzZGVwcy9saW51eC9zcGFyYy9zaWdhY3Rpb24uYyB8ICAgIDkgKysrKy0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJjL3N5c2RlcHMvbGludXgvc3BhcmMvc2lnYWN0aW9uLmMgYi9saWJjL3N5c2RlcHMvbGludXgvc3BhcmMvc2lnYWN0aW9uLmMKK2luZGV4IGEyMmFjNDAuLjcxNDBmZDMgMTAwNjQ0CistLS0gYS9saWJjL3N5c2RlcHMvbGludXgvc3BhcmMvc2lnYWN0aW9uLmMKKysrKyBiL2xpYmMvc3lzZGVwcy9saW51eC9zcGFyYy9zaWdhY3Rpb24uYworQEAgLTM0LDcgKzM0LDggQEAgX3N5c2NhbGw1KGludCwgcnRfc2lnYWN0aW9uLCBpbnQsIGEsIGludCwgYiwgaW50LCBjLCBpbnQsIGQsIGludCwgZSk7Cisgc3RhdGljIHZvaWQgX19ydF9zaWdyZXR1cm5fc3R1Yih2b2lkKTsKKyBzdGF0aWMgdm9pZCBfX3NpZ3JldHVybl9zdHViKHZvaWQpOworIAorLWludCBfX2xpYmNfc2lnYWN0aW9uKGludCBzaWcsIGNvbnN0IHN0cnVjdCBzaWdhY3Rpb24gKmFjdCwgc3RydWN0IHNpZ2FjdGlvbiAqb2FjdCkKKytsaWJjX2hpZGRlbl9wcm90byhzaWdhY3Rpb24pCisraW50IHNpZ2FjdGlvbihpbnQgc2lnLCBjb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uICphY3QsIHN0cnVjdCBzaWdhY3Rpb24gKm9hY3QpCisgeworIAlpbnQgcmV0OworIAlzdHJ1Y3Qgc2lnYWN0aW9uIGthY3QsIGtvYWN0OworQEAgLTY1LDEwICs2Niw4IEBAIGludCBfX2xpYmNfc2lnYWN0aW9uKGludCBzaWcsIGNvbnN0IHN0cnVjdCBzaWdhY3Rpb24gKmFjdCwgc3RydWN0IHNpZ2FjdGlvbiAqb2FjCisgCXJldHVybiByZXQ7CisgfQorIAorLSNpZm5kZWYgTElCQ19TSUdBQ1RJT04KKy13ZWFrX2FsaWFzKF9fbGliY19zaWdhY3Rpb24sc2lnYWN0aW9uKQorLWxpYmNfaGlkZGVuX3dlYWsoc2lnYWN0aW9uKQorLSNlbmRpZgorK2xpYmNfaGlkZGVuX2RlZihzaWdhY3Rpb24pCisrd2Vha19hbGlhcyhzaWdhY3Rpb24sX19saWJjX3NpZ2FjdGlvbikKKyAKKyBzdGF0aWMgdm9pZAorIF9fcnRfc2lncmV0dXJuX3N0dWIodm9pZCkKKy0tIAorMS42LjYuMQorCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4yLzE5MC1hdnIzMi1hZGQtdmFyYXJncy1oYW5kbGluZy1vZi1wcmN0bC1zeXNjYWxsLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMi8xOTAtYXZyMzItYWRkLXZhcmFyZ3MtaGFuZGxpbmctb2YtcHJjdGwtc3lzY2FsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDIyODgzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMi8xOTAtYXZyMzItYWRkLXZhcmFyZ3MtaGFuZGxpbmctb2YtcHJjdGwtc3lzY2FsbC5wYXRjaApAQCAtMCwwICsxLDc0IEBACitGcm9tIDg1YmMwNGQ1NDM2Y2E2YzhhMzBhMWFkMjg4NjIyNjBhMDRiOGIzZDUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIYW5zLUNocmlzdGlhbiBFZ3R2ZWR0IDxoYW5zLWNocmlzdGlhbi5lZ3R2ZWR0QGF0bWVsLmNvbT4KK0RhdGU6IFdlZCwgMTYgRGVjIDIwMDkgMTM6MTY6MDggKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAwMi8xNV0gYXZyMzI6IGFkZCB2YXJhcmdzIGhhbmRsaW5nIG9mIHByY3RsIHN5c2NhbGwKKworcHJjdGwgaXMgZGVmaW5lZCB0byB1c2UgdmFyYXJncyBpbiB0aGUgaGVhZGVyIGZpbGUsIGhlbmNlIGl0IG5lZWRzIHZhcmFyZ3MKK3NwZWNpZmljIGhhbmRsaW5nIGluIHRoZSBzb3VyY2UuIFRoaXMgcGF0Y2ggcHJvcGVybHkgaGFuZGxlcyB0aGUgdmFyaW9kaWMKK2FyZ3VtZW50IGJlZm9yZSB0aGUgc3lzY2FsbCBpcyBwYXNzZWQgdG8gdGhlIGtlcm5lbCBmb3IgdGhlIEFWUjMyIGFyY2hpdGVjdHVyZS4KKworU2lnbmVkLW9mZi1ieTogSGFucy1DaHJpc3RpYW4gRWd0dmVkdCA8aGFucy1jaHJpc3RpYW4uZWd0dmVkdEBhdG1lbC5jb20+CistLS0KKyBsaWJjL3N5c2RlcHMvbGludXgvYXZyMzIvTWFrZWZpbGUuYXJjaCB8ICAgIDIgKy0KKyBsaWJjL3N5c2RlcHMvbGludXgvYXZyMzIvcHJjdGwuYyAgICAgICB8ICAgMzYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDM3IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmMvc3lzZGVwcy9saW51eC9hdnIzMi9wcmN0bC5jCisKK2RpZmYgLS1naXQgYS9saWJjL3N5c2RlcHMvbGludXgvYXZyMzIvTWFrZWZpbGUuYXJjaCBiL2xpYmMvc3lzZGVwcy9saW51eC9hdnIzMi9NYWtlZmlsZS5hcmNoCitpbmRleCBiYzVmNjI1Li45OGI4NWE3IDEwMDY0NAorLS0tIGEvbGliYy9zeXNkZXBzL2xpbnV4L2F2cjMyL01ha2VmaWxlLmFyY2gKKysrKyBiL2xpYmMvc3lzZGVwcy9saW51eC9hdnIzMi9NYWtlZmlsZS5hcmNoCitAQCAtNSw3ICs1LDcgQEAKKyAjIExpY2Vuc2VkIHVuZGVyIHRoZSBMR1BMIHYyLjEsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQiBpbiB0aGlzIHRhcmJhbGwuCisgIworIAorLUNTUkMJOj0gYnJrLmMgY2xvbmUuYyBtbWFwLmMgc2lnYWN0aW9uLmMKKytDU1JDCTo9IGJyay5jIGNsb25lLmMgbW1hcC5jIHByY3RsLmMgc2lnYWN0aW9uLmMKKyAKKyBTU1JDCTo9IF9fbG9uZ2ptcC5TIHNldGptcC5TIGJzZC1zZXRqbXAuUyBic2QtX3NldGptcC5TCVwKKyAJCXNpZ3Jlc3RvcmVyLlMgc3lzY2FsbC5TIHZmb3JrLlMKK2RpZmYgLS1naXQgYS9saWJjL3N5c2RlcHMvbGludXgvYXZyMzIvcHJjdGwuYyBiL2xpYmMvc3lzZGVwcy9saW51eC9hdnIzMi9wcmN0bC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNGUxNDZlMworLS0tIC9kZXYvbnVsbAorKysrIGIvbGliYy9zeXNkZXBzL2xpbnV4L2F2cjMyL3ByY3RsLmMKK0BAIC0wLDAgKzEsMzYgQEAKKysvKgorKyAqIHByY3RsIHN5c2NhbGwgZm9yIEFWUjMyIExpbnV4LgorKyAqCisrICogQ29weXJpZ2h0IChDKSAyMDEwIEF0bWVsIENvcnBvcmF0aW9uCisrICoKKysgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorKyAqIFB1YmxpYyBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkcuTElCIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKysgKi8KKysjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKysjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorKworKyNpZmRlZiBfX05SX3ByY3RsCisrI2RlZmluZSBfX05SX19fc3lzY2FsbF9wcmN0bAlfX05SX3ByY3RsCisrc3RhdGljIGlubGluZSBfc3lzY2FsbDUoaW50LCBfX3N5c2NhbGxfcHJjdGwsIGludCwgb3B0aW9uLCBsb25nLCBhcmcyLAorKwkJbG9uZywgYXJnMywgbG9uZywgYXJnNCwgbG9uZywgYXJnNSk7CisrCisraW50IHByY3RsKGludCBfX29wdGlvbiwgLi4uKQorK3sKKysJbG9uZyBhcmcyOworKwlsb25nIGFyZzM7CisrCWxvbmcgYXJnNDsKKysJbG9uZyBhcmc1OworKwl2YV9saXN0IGFwOworKworKwl2YV9zdGFydChhcCwgX19vcHRpb24pOworKwlhcmcyID0gdmFfYXJnKGFwLCBsb25nKTsKKysJYXJnMyA9IHZhX2FyZyhhcCwgbG9uZyk7CisrCWFyZzQgPSB2YV9hcmcoYXAsIGxvbmcpOworKwlhcmc1ID0gdmFfYXJnKGFwLCBsb25nKTsKKysJdmFfZW5kKGFwKTsKKysKKysJcmV0dXJuIElOTElORV9TWVNDQUxMKHByY3RsLCA1LCBfX29wdGlvbiwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSk7CisrfQorKyNlbmRpZgorLS0gCisxLjYuNi4xCisKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjIvMjAwLWNsZWFuLXVwLU9fQ0xPRVhFQy1oYW5kbGluZy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjIvMjAwLWNsZWFuLXVwLU9fQ0xPRVhFQy1oYW5kbGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWJmZTA3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMi8yMDAtY2xlYW4tdXAtT19DTE9FWEVDLWhhbmRsaW5nLnBhdGNoCkBAIC0wLDAgKzEsMjk3IEBACitGcm9tIDc0Y2E1Njk1Y2Q5OTEzNjkxMTkyZTA3NTQ0OWI4YmU1Nzk0ZDUwZjAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaWtlIEZyeXNpbmdlciA8dmFwaWVyQGdlbnRvby5vcmc+CitEYXRlOiBUaHUsIDggT2N0IDIwMDkgMDI6NTE6NTUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxMi8xNV0gY2xlYW4gdXAgT19DTE9FWEVDIGhhbmRsaW5nCisKK0Ryb3AgdGhlICIjaWZuZGVmIE9fQ0xPRVhFQyIgY3J1ZnQsIGVuYWJsZSBPX0NMT0VYRUMgaW4gbW9zdCBmY250bC5oCitoZWFkZXJzLCBhbmQgaW1wb3J0IF9fQVNTVU1FX09fQ0xPRVhFQyBmcm9tIGdsaWJjLgorCitTaWduZWQtb2ZmLWJ5OiBNaWtlIEZyeXNpbmdlciA8dmFwaWVyQGdlbnRvby5vcmc+CitTaWduZWQtb2ZmLWJ5OiBCZXJuaGFyZCBSZXV0bmVyLUZpc2NoZXIgPHJlcC5kb3Qubm9wQGdtYWlsLmNvbT4KKy0tLQorIGxpYmMvcHdkX2dycC9sY2twd2RmLmMgICAgICAgICAgICAgICAgICAgICB8ICAgIDggKysrKysrKy0KKyBsaWJjL3N5c2RlcHMvbGludXgvYWxwaGEvYml0cy9mY250bC5oICAgICAgfCAgICAyIC0tCisgbGliYy9zeXNkZXBzL2xpbnV4L2FybS9iaXRzL2ZjbnRsLmggICAgICAgIHwgICAgMiAtLQorIGxpYmMvc3lzZGVwcy9saW51eC9hdnIzMi9iaXRzL2ZjbnRsLmggICAgICB8ICAgIDEgKworIGxpYmMvc3lzZGVwcy9saW51eC9iZmluL2JpdHMvZmNudGwuaCAgICAgICB8ICAgIDIgKysKKyBsaWJjL3N5c2RlcHMvbGludXgvY3Jpcy9iaXRzL2ZjbnRsLmggICAgICAgfCAgICAxICsKKyBsaWJjL3N5c2RlcHMvbGludXgvZnJ2L2JpdHMvZmNudGwuaCAgICAgICAgfCAgICAyICsrCisgbGliYy9zeXNkZXBzL2xpbnV4L2hwcGEvYml0cy9mY250bC5oICAgICAgIHwgICAgMSArCisgbGliYy9zeXNkZXBzL2xpbnV4L2kzODYvYml0cy9mY250bC5oICAgICAgIHwgICAgMiAtLQorIGxpYmMvc3lzZGVwcy9saW51eC9pYTY0L2JpdHMvZmNudGwuaCAgICAgICB8ICAgIDIgLS0KKyBsaWJjL3N5c2RlcHMvbGludXgvbTY4ay9iaXRzL2ZjbnRsLmggICAgICAgfCAgICAxICsKKyBsaWJjL3N5c2RlcHMvbGludXgvbWljcm9ibGF6ZS9iaXRzL2ZjbnRsLmggfCAgICAyICsrCisgbGliYy9zeXNkZXBzL2xpbnV4L21pcHMvYml0cy9mY250bC5oICAgICAgIHwgICAgMSArCisgbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvYml0cy9mY250bC5oICAgIHwgICAgMiAtLQorIGxpYmMvc3lzZGVwcy9saW51eC9zaC9iaXRzL2ZjbnRsLmggICAgICAgICB8ICAgIDIgLS0KKyBsaWJjL3N5c2RlcHMvbGludXgvc2g2NC9iaXRzL2ZjbnRsLmggICAgICAgfCAgICAyICsrCisgbGliYy9zeXNkZXBzL2xpbnV4L3NwYXJjL2JpdHMvZmNudGwuaCAgICAgIHwgICAgMiAtLQorIGxpYmMvc3lzZGVwcy9saW51eC94ODZfNjQvYml0cy9mY250bC5oICAgICB8ICAgIDIgLS0KKyBsaWJjL3N5c2RlcHMvbGludXgveHRlbnNhL2JpdHMvZmNudGwuaCAgICAgfCAgICAxICsKKyAxOSBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmMvcHdkX2dycC9sY2twd2RmLmMgYi9saWJjL3B3ZF9ncnAvbGNrcHdkZi5jCitpbmRleCAwYjBmYjQ3Li5hZWM2MjgzIDEwMDY0NAorLS0tIGEvbGliYy9wd2RfZ3JwL2xja3B3ZGYuYworKysrIGIvbGliYy9wd2RfZ3JwL2xja3B3ZGYuYworQEAgLTc1LDcgKzc1LDcgQEAgbGNrcHdkZiAodm9pZCkKKyAgIC8qIFByZXZlbnQgcHJvYmxlbXMgY2F1c2VkIGJ5IG11bHRpcGxlIHRocmVhZHMuICAqLworICAgX19VQ0xJQkNfTVVURVhfTE9DSyhteWxvY2spOworIAorLSAgbG9ja19mZCA9IG9wZW4gKF9QQVRIX1BBU1NXRCwgT19XUk9OTFkpOworKyAgbG9ja19mZCA9IG9wZW4gKF9QQVRIX1BBU1NXRCwgT19XUk9OTFkgfCBPX0NMT0VYRUMpOworICAgaWYgKGxvY2tfZmQgPT0gLTEpIHsKKyAgICAgLyogQ2Fubm90IGNyZWF0ZSBsb2NrIGZpbGUuICAqLworIAlnb3RvIERPTkU7CitAQCAtOTcsNiArOTcsMTIgQEAgbGNrcHdkZiAodm9pZCkKKyAJZ290byBET05FOworICAgfQorIAorKyNpZm5kZWYgX19BU1NVTUVfT19DTE9FWEVDCisrICAgIC8qIE1ha2Ugc3VyZSBmaWxlIGdldHMgY29ycmVjdGx5IGNsb3NlZCB3aGVuIHByb2Nlc3MgZmluaXNoZWQuICAqLworKyAgIGZjbnRsIChsb2NrX2ZkLCBGX1NFVEZELCBGRF9DTE9FWEVDKTsKKysjZW5kaWYKKysKKysKKyAgIC8qIE5vdyB3ZSBoYXZlIHRvIGdldCBleGNsdXNpdmUgd3JpdGUgYWNjZXNzLiAgU2luY2UgbXVsdGlwbGUKKyAgICAgIHByb2Nlc3MgY291bGQgdHJ5IHRoaXMgd2Ugd29uJ3Qgc3RvcCB3aGVuIGl0IGZpcnN0IGZhaWxzLgorICAgICAgSW5zdGVhZCB3ZSBzZXQgYSB0aW1lb3V0IGZvciB0aGUgc3lzdGVtIGNhbGwuICBPbmNlIHRoZSB0aW1lcgorZGlmZiAtLWdpdCBhL2xpYmMvc3lzZGVwcy9saW51eC9hbHBoYS9iaXRzL2ZjbnRsLmggYi9saWJjL3N5c2RlcHMvbGludXgvYWxwaGEvYml0cy9mY250bC5oCitpbmRleCAyYTZiOWVhLi42NDljNTYzIDEwMDY0NAorLS0tIGEvbGliYy9zeXNkZXBzL2xpbnV4L2FscGhhL2JpdHMvZmNudGwuaAorKysrIGIvbGliYy9zeXNkZXBzL2xpbnV4L2FscGhhL2JpdHMvZmNudGwuaAorQEAgLTUwLDkgKzUwLDcgQEAKKyAjIGRlZmluZSBPX05PRk9MTE9XCTAyMDAwMDAJLyogRG8gbm90IGZvbGxvdyBsaW5rcy4gICovCisgIyBkZWZpbmUgT19ESVJFQ1QJMDIwMDAwMDAgLyogRGlyZWN0IGRpc2sgYWNjZXNzLiAgKi8KKyAjIGRlZmluZSBPX05PQVRJTUUJMDQwMDAwMDAgLyogRG8gbm90IHNldCBhdGltZS4gICovCistIyBpZiAwCisgIyBkZWZpbmUgT19DTE9FWEVDICAgICAgMDEwMDAwMDAwIC8qIFNldCBjbG9zZV9vbl9leGVjLiAgKi8KKy0jIGVuZGlmCisgI2VuZGlmCisgCisgI2lmZGVmIF9fVVNFX0xBUkdFRklMRTY0CitkaWZmIC0tZ2l0IGEvbGliYy9zeXNkZXBzL2xpbnV4L2FybS9iaXRzL2ZjbnRsLmggYi9saWJjL3N5c2RlcHMvbGludXgvYXJtL2JpdHMvZmNudGwuaAoraW5kZXggODZjZWE0Yi4uN2NjNWE5ZCAxMDA2NDQKKy0tLSBhL2xpYmMvc3lzZGVwcy9saW51eC9hcm0vYml0cy9mY250bC5oCisrKysgYi9saWJjL3N5c2RlcHMvbGludXgvYXJtL2JpdHMvZmNudGwuaAorQEAgLTUwLDkgKzUwLDcgQEAKKyAjIGRlZmluZSBPX05PRk9MTE9XCTAxMDAwMDAJLyogRG8gbm90IGZvbGxvdyBsaW5rcy4JICovCisgIyBkZWZpbmUgT19ESVJFQ1QJMDIwMDAwMAkvKiBEaXJlY3QgZGlzayBhY2Nlc3MuCSovCisgIyBkZWZpbmUgT19OT0FUSU1FICAgICAwMTAwMDAwMCAvKiBEbyBub3Qgc2V0IGF0aW1lLiAgKi8KKy0jIGlmIDAKKyAjIGRlZmluZSBPX0NMT0VYRUMgICAgIDAyMDAwMDAwIC8qIFNldCBjbG9zZV9vbl9leGVjLiAgKi8KKy0jIGVuZGlmCisgI2VuZGlmCisgCisgLyogRm9yIG5vdyBMaW51eCBoYXMgc3luY2hyb25pc2l0eSBvcHRpb25zIGZvciBkYXRhIGFuZCByZWFkIG9wZXJhdGlvbnMuCitkaWZmIC0tZ2l0IGEvbGliYy9zeXNkZXBzL2xpbnV4L2F2cjMyL2JpdHMvZmNudGwuaCBiL2xpYmMvc3lzZGVwcy9saW51eC9hdnIzMi9iaXRzL2ZjbnRsLmgKK2luZGV4IDIzMDFlMjIuLjc2NzI0M2UgMTAwNjQ0CistLS0gYS9saWJjL3N5c2RlcHMvbGludXgvYXZyMzIvYml0cy9mY250bC5oCisrKysgYi9saWJjL3N5c2RlcHMvbGludXgvYXZyMzIvYml0cy9mY250bC5oCitAQCAtMzAsNiArMzAsNyBAQAorICMgZGVmaW5lIE9fRElSRUNUT1JZCTAwMjAwMDAwCS8qIGRpcmVjdCBkaXNrIGFjY2VzcyAqLworICMgZGVmaW5lIE9fTk9GT0xMT1cJMDA0MDAwMDAJLyogZG9uJ3QgZm9sbG93IGxpbmtzICovCisgIyBkZWZpbmUgT19OT0FUSU1FCTAxMDAwMDAwCS8qIGRvbid0IHNldCBhdGltZSAqLworKyMgZGVmaW5lIE9fQ0xPRVhFQwkwMjAwMDAwMAkvKiBzZXQgY2xvc2Vfb25fZXhlYyAqLworICNlbmRpZgorIAorICNpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAorZGlmZiAtLWdpdCBhL2xpYmMvc3lzZGVwcy9saW51eC9iZmluL2JpdHMvZmNudGwuaCBiL2xpYmMvc3lzZGVwcy9saW51eC9iZmluL2JpdHMvZmNudGwuaAoraW5kZXggN2QwYmNmOS4uYWFiZjk0ZCAxMDA2NDQKKy0tLSBhL2xpYmMvc3lzZGVwcy9saW51eC9iZmluL2JpdHMvZmNudGwuaAorKysrIGIvbGliYy9zeXNkZXBzL2xpbnV4L2JmaW4vYml0cy9mY250bC5oCitAQCAtNDgsNiArNDgsOCBAQAorICMgZGVmaW5lIE9fRElSRUNUT1JZCSAwNDAwMDAJLyogTXVzdCBiZSBhIGRpcmVjdG9yeS4JICovCisgIyBkZWZpbmUgT19OT0ZPTExPVwkwMTAwMDAwCS8qIERvIG5vdCBmb2xsb3cgbGlua3MuCSAqLworICMgZGVmaW5lIE9fRElSRUNUCTAyMDAwMDAJLyogRGlyZWN0IGRpc2sgYWNjZXNzLgkqLworKyMgZGVmaW5lIE9fTk9BVElNRSAgICAgMDEwMDAwMDAgLyogZG9uJ3Qgc2V0IGF0aW1lICovCisrIyBkZWZpbmUgT19DTE9FWEVDICAgICAwMjAwMDAwMCAvKiBzZXQgY2xvc2Vfb25fZXhlYyAqLworICNlbmRpZgorIAorIC8qIEZvciBub3cgTGludXggaGFzIHN5bmNocm9uaXNpdHkgb3B0aW9ucyBmb3IgZGF0YSBhbmQgcmVhZCBvcGVyYXRpb25zLgorZGlmZiAtLWdpdCBhL2xpYmMvc3lzZGVwcy9saW51eC9jcmlzL2JpdHMvZmNudGwuaCBiL2xpYmMvc3lzZGVwcy9saW51eC9jcmlzL2JpdHMvZmNudGwuaAoraW5kZXggYTIxMDZlZi4uMjk0NDNiYSAxMDA2NDQKKy0tLSBhL2xpYmMvc3lzZGVwcy9saW51eC9jcmlzL2JpdHMvZmNudGwuaAorKysrIGIvbGliYy9zeXNkZXBzL2xpbnV4L2NyaXMvYml0cy9mY250bC5oCitAQCAtNTAsNiArNTAsNyBAQAorICMgZGVmaW5lIE9fRElSRUNUT1JZCTAyMDAwMDAJLyogTXVzdCBiZSBhIGRpcmVjdG9yeS4JICovCisgIyBkZWZpbmUgT19OT0ZPTExPVwkwNDAwMDAwCS8qIERvIG5vdCBmb2xsb3cgbGlua3MuCSAqLworICMgZGVmaW5lIE9fTk9BVElNRQkwMTAwMDAwMCAvKiBEbyBub3Qgc2V0IGF0aW1lLiAgKi8KKysjIGRlZmluZSBPX0NMT0VYRUMJMDIwMDAwMDAgLyogc2V0IGNsb3NlX29uX2V4ZWMgKi8KKyAjZW5kaWYKKyAKKyAvKiBGb3Igbm93IExpbnV4IGhhcyBzeW5jaHJvbmlzaXR5IG9wdGlvbnMgZm9yIGRhdGEgYW5kIHJlYWQgb3BlcmF0aW9ucy4KK2RpZmYgLS1naXQgYS9saWJjL3N5c2RlcHMvbGludXgvZnJ2L2JpdHMvZmNudGwuaCBiL2xpYmMvc3lzZGVwcy9saW51eC9mcnYvYml0cy9mY250bC5oCitpbmRleCAwNmU4ODYwLi41YmZmNGQzIDEwMDY0NAorLS0tIGEvbGliYy9zeXNkZXBzL2xpbnV4L2Zydi9iaXRzL2ZjbnRsLmgKKysrKyBiL2xpYmMvc3lzZGVwcy9saW51eC9mcnYvYml0cy9mY250bC5oCitAQCAtNDUsNiArNDUsOCBAQAorICMgZGVmaW5lIE9fRElSRUNUCSAwNDAwMDAJLyogRGlyZWN0IGRpc2sgYWNjZXNzLiAgKi8KKyAjIGRlZmluZSBPX0RJUkVDVE9SWQkwMjAwMDAwCS8qIE11c3QgYmUgYSBkaXJlY3RvcnkuICAqLworICMgZGVmaW5lIE9fTk9GT0xMT1cJMDQwMDAwMAkvKiBEbyBub3QgZm9sbG93IGxpbmtzLiAgKi8KKysjIGRlZmluZSBPX05PQVRJTUUgICAgIDAxMDAwMDAwIC8qIGRvbid0IHNldCBhdGltZSAqLworKyMgZGVmaW5lIE9fQ0xPRVhFQyAgICAgMDIwMDAwMDAgLyogc2V0IGNsb3NlX29uX2V4ZWMgKi8KKyAjZW5kaWYKKyAKKyAvKiBGb3Igbm93IExpbnV4IGhhcyBzeW5jaHJvbmlzaXR5IG9wdGlvbnMgZm9yIGRhdGEgYW5kIHJlYWQgb3BlcmF0aW9ucy4KK2RpZmYgLS1naXQgYS9saWJjL3N5c2RlcHMvbGludXgvaHBwYS9iaXRzL2ZjbnRsLmggYi9saWJjL3N5c2RlcHMvbGludXgvaHBwYS9iaXRzL2ZjbnRsLmgKK2luZGV4IGNjMjNiZjguLjg2ZTNiNmYgMTAwNjQ0CistLS0gYS9saWJjL3N5c2RlcHMvbGludXgvaHBwYS9iaXRzL2ZjbnRsLmgKKysrKyBiL2xpYmMvc3lzZGVwcy9saW51eC9ocHBhL2JpdHMvZmNudGwuaAorQEAgLTUwLDYgKzUwLDcgQEAKKyAjIGRlZmluZSBPX0RJUkVDVE9SWQkwMDAxMDAwMCAvKiBNdXN0IGJlIGEgZGlyZWN0b3J5LiAqLworICMgZGVmaW5lIE9fTk9GT0xMT1cJMDAwMDAyMDAgLyogRG8gbm90IGZvbGxvdyBsaW5rcy4gKi8KKyAjIGRlZmluZSBPX05PQVRJTUUJMDQwMDAwMDAgLyogRG8gbm90IHNldCBhdGltZS4gKi8KKysjIGRlZmluZSBPX0NMT0VYRUMJMDEwMDAwMDAwIC8qIHNldCBjbG9zZV9vbl9leGVjICovCisgI2VuZGlmCisgCisgI2lmZGVmIF9fVVNFX0xBUkdFRklMRTY0CitkaWZmIC0tZ2l0IGEvbGliYy9zeXNkZXBzL2xpbnV4L2kzODYvYml0cy9mY250bC5oIGIvbGliYy9zeXNkZXBzL2xpbnV4L2kzODYvYml0cy9mY250bC5oCitpbmRleCA3ZjBiNTUyLi4yMmUwNzNiIDEwMDY0NAorLS0tIGEvbGliYy9zeXNkZXBzL2xpbnV4L2kzODYvYml0cy9mY250bC5oCisrKysgYi9saWJjL3N5c2RlcHMvbGludXgvaTM4Ni9iaXRzL2ZjbnRsLmgKK0BAIC01MCw5ICs1MCw3IEBACisgIyBkZWZpbmUgT19ESVJFQ1RPUlkJMDIwMDAwMAkvKiBNdXN0IGJlIGEgZGlyZWN0b3J5LgkgKi8KKyAjIGRlZmluZSBPX05PRk9MTE9XCTA0MDAwMDAJLyogRG8gbm90IGZvbGxvdyBsaW5rcy4JICovCisgIyBkZWZpbmUgT19OT0FUSU1FICAgICAwMTAwMDAwMCAvKiBEbyBub3Qgc2V0IGF0aW1lLiAgKi8KKy0jIGlmIDAKKyAjIGRlZmluZSBPX0NMT0VYRUMgICAgIDAyMDAwMDAwIC8qIFNldCBjbG9zZV9vbl9leGVjLiAgKi8KKy0jIGVuZGlmCisgI2VuZGlmCisgCisgLyogRm9yIG5vdyBMaW51eCBoYXMgc3luY2hyb25pc2l0eSBvcHRpb25zIGZvciBkYXRhIGFuZCByZWFkIG9wZXJhdGlvbnMuCitkaWZmIC0tZ2l0IGEvbGliYy9zeXNkZXBzL2xpbnV4L2lhNjQvYml0cy9mY250bC5oIGIvbGliYy9zeXNkZXBzL2xpbnV4L2lhNjQvYml0cy9mY250bC5oCitpbmRleCBkMTM0YzRiLi44NWE1NWY2IDEwMDY0NAorLS0tIGEvbGliYy9zeXNkZXBzL2xpbnV4L2lhNjQvYml0cy9mY250bC5oCisrKysgYi9saWJjL3N5c2RlcHMvbGludXgvaWE2NC9iaXRzL2ZjbnRsLmgKK0BAIC00OSw5ICs0OSw3IEBACisgIyBkZWZpbmUgT19ESVJFQ1RPUlkJMDIwMDAwMAkvKiBtdXN0IGJlIGEgZGlyZWN0b3J5ICovCisgIyBkZWZpbmUgT19OT0ZPTExPVwkwNDAwMDAwIC8qIGRvbid0IGZvbGxvdyBsaW5rcyAqLworICMgZGVmaW5lIE9fTk9BVElNRQkwMTAwMDAwMCAvKiBEbyBub3Qgc2V0IGF0aW1lLiAgKi8KKy0jIGlmIDAKKyAjIGRlZmluZSBPX0NMT0VYRUMJMDIwMDAwMDAgLyogU2V0IGNsb3NlX29uX2V4ZWMuICAqLworLSMgZW5kaWYKKyAjZW5kaWYKKyAKKyAjaWZkZWYgX19VU0VfTEFSR0VGSUxFNjQKK2RpZmYgLS1naXQgYS9saWJjL3N5c2RlcHMvbGludXgvbTY4ay9iaXRzL2ZjbnRsLmggYi9saWJjL3N5c2RlcHMvbGludXgvbTY4ay9iaXRzL2ZjbnRsLmgKK2luZGV4IGQzNjE5OGQuLmU1NjRiNDIgMTAwNjQ0CistLS0gYS9saWJjL3N5c2RlcHMvbGludXgvbTY4ay9iaXRzL2ZjbnRsLmgKKysrKyBiL2xpYmMvc3lzZGVwcy9saW51eC9tNjhrL2JpdHMvZmNudGwuaAorQEAgLTQ5LDYgKzQ5LDcgQEAKKyAjIGRlZmluZSBPX05PRk9MTE9XCTAxMDAwMDAJLyogRG8gbm90IGZvbGxvdyBsaW5rcy4JICovCisgIyBkZWZpbmUgT19ESVJFQ1QJMDIwMDAwMAkvKiBEaXJlY3QgZGlzayBhY2Nlc3MuCSovCisgIyBkZWZpbmUgT19OT0FUSU1FCTAxMDAwMDAwIC8qIERvIG5vdCBzZXQgYXRpbWUuICAqLworKyMgZGVmaW5lIE9fQ0xPRVhFQwkwMjAwMDAwMCAvKiBzZXQgY2xvc2Vfb25fZXhlYyAqLworICNlbmRpZgorIAorIC8qIEZvciBub3cgTGludXggaGFzIHN5bmNocm9uaXNpdHkgb3B0aW9ucyBmb3IgZGF0YSBhbmQgcmVhZCBvcGVyYXRpb25zLgorZGlmZiAtLWdpdCBhL2xpYmMvc3lzZGVwcy9saW51eC9taWNyb2JsYXplL2JpdHMvZmNudGwuaCBiL2xpYmMvc3lzZGVwcy9saW51eC9taWNyb2JsYXplL2JpdHMvZmNudGwuaAoraW5kZXggYzhhZWI5MS4uZGEzNTIwOSAxMDA2NDQKKy0tLSBhL2xpYmMvc3lzZGVwcy9saW51eC9taWNyb2JsYXplL2JpdHMvZmNudGwuaAorKysrIGIvbGliYy9zeXNkZXBzL2xpbnV4L21pY3JvYmxhemUvYml0cy9mY250bC5oCitAQCAtNDUsNiArNDUsOCBAQAorICMgZGVmaW5lIE9fRElSRUNUT1JZCSAwNDAwMDAJLyogTXVzdCBiZSBhIGRpcmVjdG9yeS4JICovCisgIyBkZWZpbmUgT19OT0ZPTExPVwkwMTAwMDAwCS8qIERvIG5vdCBmb2xsb3cgbGlua3MuCSAqLworICMgZGVmaW5lIE9fRElSRUNUCTAyMDAwMDAJLyogRGlyZWN0IGRpc2sgYWNjZXNzLgkqLworKyMgZGVmaW5lIE9fTk9BVElNRSAgICAgMDEwMDAwMDAgLyogRG8gbm90IHNldCBhdGltZS4gICovCisrIyBkZWZpbmUgT19DTE9FWEVDICAgICAwMjAwMDAwMCAvKiBzZXQgY2xvc2Vfb25fZXhlYyAqLworICNlbmRpZgorIAorIC8qIEZvciBub3cgTGludXggaGFzIHN5bmNocm9uaXNpdHkgb3B0aW9ucyBmb3IgZGF0YSBhbmQgcmVhZCBvcGVyYXRpb25zLgorZGlmZiAtLWdpdCBhL2xpYmMvc3lzZGVwcy9saW51eC9taXBzL2JpdHMvZmNudGwuaCBiL2xpYmMvc3lzZGVwcy9saW51eC9taXBzL2JpdHMvZmNudGwuaAoraW5kZXggZWYwMTVhNC4uZjAwNzJmZCAxMDA2NDQKKy0tLSBhL2xpYmMvc3lzZGVwcy9saW51eC9taXBzL2JpdHMvZmNudGwuaAorKysrIGIvbGliYy9zeXNkZXBzL2xpbnV4L21pcHMvYml0cy9mY250bC5oCitAQCAtNTEsNiArNTEsNyBAQAorICMgZGVmaW5lIE9fRElSRUNUCTB4ODAwMAkvKiBEaXJlY3QgZGlzayBhY2Nlc3MgaGludC4gICovCisgIyBkZWZpbmUgT19ESVJFQ1RPUlkJMHgxMDAwMAkvKiBNdXN0IGJlIGEgZGlyZWN0b3J5LgkgKi8KKyAjIGRlZmluZSBPX05PQVRJTUUJMHg0MDAwMAkvKiBEbyBub3Qgc2V0IGF0aW1lLiAgKi8KKysjIGRlZmluZSBPX0NMT0VYRUMJMDIwMDAwMDAgLyogc2V0IGNsb3NlX29uX2V4ZWMgKi8KKyAjZW5kaWYKKyAKKyAvKiBGb3Igbm93IExpbnV4IGhhcyBubyBzeW5jaHJvbmlzaXR5IG9wdGlvbnMgZm9yIGRhdGEgYW5kIHJlYWQgb3BlcmF0aW9ucy4KK2RpZmYgLS1naXQgYS9saWJjL3N5c2RlcHMvbGludXgvcG93ZXJwYy9iaXRzL2ZjbnRsLmggYi9saWJjL3N5c2RlcHMvbGludXgvcG93ZXJwYy9iaXRzL2ZjbnRsLmgKK2luZGV4IGNlYjc1YjQuLjA3NTljNmEgMTAwNjQ0CistLS0gYS9saWJjL3N5c2RlcHMvbGludXgvcG93ZXJwYy9iaXRzL2ZjbnRsLmgKKysrKyBiL2xpYmMvc3lzZGVwcy9saW51eC9wb3dlcnBjL2JpdHMvZmNudGwuaAorQEAgLTUwLDkgKzUwLDcgQEAKKyAjIGRlZmluZSBPX0RJUkVDVE9SWQkgMDQwMDAwCS8qIE11c3QgYmUgYSBkaXJlY3RvcnkuCSAqLworICMgZGVmaW5lIE9fTk9GT0xMT1cJMDEwMDAwMAkvKiBEbyBub3QgZm9sbG93IGxpbmtzLgkgKi8KKyAjIGRlZmluZSBPX05PQVRJTUUJMDEwMDAwMDAgLyogRG8gbm90IHNldCBhdGltZS4gICovCistIyBpZiAwCisgIyBkZWZpbmUgT19DTE9FWEVDCTAyMDAwMDAwIC8qIFNldCBjbG9zZV9vbl9leGVjLiAgKi8KKy0jIGVuZGlmCisgI2VuZGlmCisgCisgI2lmZGVmIF9fVVNFX0xBUkdFRklMRTY0CitkaWZmIC0tZ2l0IGEvbGliYy9zeXNkZXBzL2xpbnV4L3NoL2JpdHMvZmNudGwuaCBiL2xpYmMvc3lzZGVwcy9saW51eC9zaC9iaXRzL2ZjbnRsLmgKK2luZGV4IDU3MDQ4NGMuLmFkYjczNzcgMTAwNjQ0CistLS0gYS9saWJjL3N5c2RlcHMvbGludXgvc2gvYml0cy9mY250bC5oCisrKysgYi9saWJjL3N5c2RlcHMvbGludXgvc2gvYml0cy9mY250bC5oCitAQCAtNTAsOSArNTAsNyBAQAorICMgZGVmaW5lIE9fRElSRUNUT1JZCTAyMDAwMDAJLyogTXVzdCBiZSBhIGRpcmVjdG9yeS4JICovCisgIyBkZWZpbmUgT19OT0ZPTExPVwkwNDAwMDAwCS8qIERvIG5vdCBmb2xsb3cgbGlua3MuCSAqLworICMgZGVmaW5lIE9fTk9BVElNRSAgICAgMDEwMDAwMDAgLyogRG8gbm90IHNldCBhdGltZS4gICovCistIyBpZiAwCisgIyBkZWZpbmUgT19DTE9FWEVDICAgICAwMjAwMDAwMCAvKiBTZXQgY2xvc2Vfb25fZXhlYy4gICovCistIyBlbmRpZgorICNlbmRpZgorIAorIC8qIEZvciBub3cgTGludXggaGFzIHN5bmNocm9uaXNpdHkgb3B0aW9ucyBmb3IgZGF0YSBhbmQgcmVhZCBvcGVyYXRpb25zLgorZGlmZiAtLWdpdCBhL2xpYmMvc3lzZGVwcy9saW51eC9zaDY0L2JpdHMvZmNudGwuaCBiL2xpYmMvc3lzZGVwcy9saW51eC9zaDY0L2JpdHMvZmNudGwuaAoraW5kZXggMDZlODg2MC4uMjQ1ZDM1YSAxMDA2NDQKKy0tLSBhL2xpYmMvc3lzZGVwcy9saW51eC9zaDY0L2JpdHMvZmNudGwuaAorKysrIGIvbGliYy9zeXNkZXBzL2xpbnV4L3NoNjQvYml0cy9mY250bC5oCitAQCAtNDUsNiArNDUsOCBAQAorICMgZGVmaW5lIE9fRElSRUNUCSAwNDAwMDAJLyogRGlyZWN0IGRpc2sgYWNjZXNzLiAgKi8KKyAjIGRlZmluZSBPX0RJUkVDVE9SWQkwMjAwMDAwCS8qIE11c3QgYmUgYSBkaXJlY3RvcnkuICAqLworICMgZGVmaW5lIE9fTk9GT0xMT1cJMDQwMDAwMAkvKiBEbyBub3QgZm9sbG93IGxpbmtzLiAgKi8KKysjIGRlZmluZSBPX05PQVRJTUUgICAgIDAxMDAwMDAwIC8qIERvIG5vdCBzZXQgYXRpbWUuICAqLworKyMgZGVmaW5lIE9fQ0xPRVhFQyAgICAgMDIwMDAwMDAgLyogc2V0IGNsb3NlX29uX2V4ZWMgKi8KKyAjZW5kaWYKKyAKKyAvKiBGb3Igbm93IExpbnV4IGhhcyBzeW5jaHJvbmlzaXR5IG9wdGlvbnMgZm9yIGRhdGEgYW5kIHJlYWQgb3BlcmF0aW9ucy4KK2RpZmYgLS1naXQgYS9saWJjL3N5c2RlcHMvbGludXgvc3BhcmMvYml0cy9mY250bC5oIGIvbGliYy9zeXNkZXBzL2xpbnV4L3NwYXJjL2JpdHMvZmNudGwuaAoraW5kZXggMjljMDlhOS4uMzFhNmQ5YiAxMDA2NDQKKy0tLSBhL2xpYmMvc3lzZGVwcy9saW51eC9zcGFyYy9iaXRzL2ZjbnRsLmgKKysrKyBiL2xpYmMvc3lzZGVwcy9saW51eC9zcGFyYy9iaXRzL2ZjbnRsLmgKK0BAIC00OSw5ICs0OSw3IEBACisgIyBkZWZpbmUgT19OT0ZPTExPVwkweDIwMDAwIC8qIGRvbid0IGZvbGxvdyBsaW5rcyAqLworICMgZGVmaW5lIE9fRElSRUNUCTB4MTAwMDAwIC8qIGRpcmVjdCBkaXNrIGFjY2VzcyBoaW50ICovCisgIyBkZWZpbmUgT19OT0FUSU1FCTB4MjAwMDAwIC8qIERvIG5vdCBzZXQgYXRpbWUuICAqLworLSMgaWYgMAorICMgZGVmaW5lIE9fQ0xPRVhFQwkweDQwMDAwMCAvKiBTZXQgY2xvc2Vfb25fZXhpdC4gICovCistIyBlbmRpZgorICNlbmRpZgorIAorICNpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAorZGlmZiAtLWdpdCBhL2xpYmMvc3lzZGVwcy9saW51eC94ODZfNjQvYml0cy9mY250bC5oIGIvbGliYy9zeXNkZXBzL2xpbnV4L3g4Nl82NC9iaXRzL2ZjbnRsLmgKK2luZGV4IGJlMDBlNGEuLmYxY2YzODggMTAwNjQ0CistLS0gYS9saWJjL3N5c2RlcHMvbGludXgveDg2XzY0L2JpdHMvZmNudGwuaAorKysrIGIvbGliYy9zeXNkZXBzL2xpbnV4L3g4Nl82NC9iaXRzL2ZjbnRsLmgKK0BAIC01MCw5ICs1MCw3IEBACisgIyBkZWZpbmUgT19ESVJFQ1RPUlkJMDIwMDAwMAkvKiBNdXN0IGJlIGEgZGlyZWN0b3J5LgkgKi8KKyAjIGRlZmluZSBPX05PRk9MTE9XCTA0MDAwMDAJLyogRG8gbm90IGZvbGxvdyBsaW5rcy4JICovCisgIyBkZWZpbmUgT19OT0FUSU1FICAgICAwMTAwMDAwMCAvKiBEbyBub3Qgc2V0IGF0aW1lLiAgKi8KKy0jIGlmIDAKKyAjIGRlZmluZSBPX0NMT0VYRUMgICAgIDAyMDAwMDAwIC8qIFNldCBjbG9zZV9vbl9leGVjLiAgKi8KKy0jIGVuZGlmCisgI2VuZGlmCisgCisgLyogRm9yIG5vdyBMaW51eCBoYXMgc3luY2hyb25pc2l0eSBvcHRpb25zIGZvciBkYXRhIGFuZCByZWFkIG9wZXJhdGlvbnMuCitkaWZmIC0tZ2l0IGEvbGliYy9zeXNkZXBzL2xpbnV4L3h0ZW5zYS9iaXRzL2ZjbnRsLmggYi9saWJjL3N5c2RlcHMvbGludXgveHRlbnNhL2JpdHMvZmNudGwuaAoraW5kZXggYTg5MzYyZS4uOTIxYTYyNiAxMDA2NDQKKy0tLSBhL2xpYmMvc3lzZGVwcy9saW51eC94dGVuc2EvYml0cy9mY250bC5oCisrKysgYi9saWJjL3N5c2RlcHMvbGludXgveHRlbnNhL2JpdHMvZmNudGwuaAorQEAgLTUwLDYgKzUwLDcgQEAKKyAjIGRlZmluZSBPX0RJUkVDVE9SWQkwMjAwMDAwCS8qIE11c3QgYmUgYSBkaXJlY3RvcnkuCSAqLworICMgZGVmaW5lIE9fTk9GT0xMT1cJMDQwMDAwMAkvKiBEbyBub3QgZm9sbG93IGxpbmtzLgkgKi8KKyAjIGRlZmluZSBPX05PQVRJTUUgICAgIDAxMDAwMDAwIC8qIERvIG5vdCBzZXQgYXRpbWUuICAqLworKyMgZGVmaW5lIE9fQ0xPRVhFQyAgICAgMDIwMDAwMDAgLyogc2V0IGNsb3NlX29uX2V4ZWMgKi8KKyAjZW5kaWYKKyAKKyAvKiBGb3Igbm93IExpbnV4IGhhcyBzeW5jaHJvbmlzaXR5IG9wdGlvbnMgZm9yIGRhdGEgYW5kIHJlYWQgb3BlcmF0aW9ucy4KKy0tIAorMS42LjYuMQorCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4yLzIxMC1maXgtbWFrZS1pbnN0YWxsLWhvc3QtdXRpbHMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4yLzIxMC1maXgtbWFrZS1pbnN0YWxsLWhvc3QtdXRpbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI2ZGZiMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjIvMjEwLWZpeC1tYWtlLWluc3RhbGwtaG9zdC11dGlscy5wYXRjaApAQCAtMCwwICsxLDE1MyBAQAorRnJvbSBkNzVhZDJlMTI5YjNmMjIyOTZjZWFkM2RiNTNjNzg0NTI3ZGVhYjYwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQmVybmhhcmQgUmV1dG5lci1GaXNjaGVyIDxyZXAuZG90Lm5vcEBnbWFpbC5jb20+CitEYXRlOiBGcmksIDE4IFNlcCAyMDA5IDE0OjA3OjMxICswMDAwCitTdWJqZWN0OiBmaXggbWFrZSB7LGluc3RhbGxffXssaG9zdH11dGlscworCitTaWduZWQtb2ZmLWJ5OiBCZXJuaGFyZCBSZXV0bmVyLUZpc2NoZXIgPHJlcC5kb3Qubm9wQGdtYWlsLmNvbT4KKy0tLQorZGlmZiAtLWdpdCBhL2V4dHJhL2xvY2FsZS9wcm9ncmFtcy9sb2NhbGUuYyBiL2V4dHJhL2xvY2FsZS9wcm9ncmFtcy9sb2NhbGUuYworaW5kZXggNDYyYTU3OS4uZGZkMjAyOSAxMDA2NDQKKy0tLSBhL2V4dHJhL2xvY2FsZS9wcm9ncmFtcy9sb2NhbGUuYworKysrIGIvZXh0cmEvbG9jYWxlL3Byb2dyYW1zL2xvY2FsZS5jCitAQCAtMTAsMTAgKzEwLDkgQEAKKyAgKgorICAqLworIAorLQorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CistI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxsYW5naW5mby5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVE9QVF9MT05HX18KK2RpZmYgLS1naXQgYS9saWJjL21pc2Mvd2NoYXIvd2NoYXIuYyBiL2xpYmMvbWlzYy93Y2hhci93Y2hhci5jCitpbmRleCAyOTBlNjgwLi4zY2U4ODRkIDEwMDY0NAorLS0tIGEvbGliYy9taXNjL3djaGFyL3djaGFyLmMKKysrKyBiL2xpYmMvbWlzYy93Y2hhci93Y2hhci5jCitAQCAtMTcxLDcgKzE3MSw2IEBAIGV4dGVybiBzaXplX3QgX3djaGFyX3V0ZjhzbnRvd2NzKHdjaGFyX3QgKl9fcmVzdHJpY3QgcHdjLCBzaXplX3Qgd24sCisgCisgZXh0ZXJuIHNpemVfdCBfd2NoYXJfd2NzbnRvdXRmOHMoY2hhciAqX19yZXN0cmljdCBzLCBzaXplX3QgbiwKKyAJCQkJCWNvbnN0IHdjaGFyX3QgKipfX3Jlc3RyaWN0IHNyYywgc2l6ZV90IHduKSBhdHRyaWJ1dGVfaGlkZGVuOworLQorICNlbmRpZiAvKiBfTElCQyAqLworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICNpZmRlZiBMX2J0b3djCitAQCAtMTIwMSw0NSArMTIwMCw2IEBAIHR5cGVkZWYgc3RydWN0IHsKKyAJaW50IHNraXBfaW52YWxpZF9pbnB1dDsJCS8qIFRvIHN1cHBvcnQgaWNvbnYgLWMgb3B0aW9uLiAqLworIH0gX1VDX2ljb252X3Q7CisgCistCistCistI2lmZGVmIExfaWNvbnYKKy0KKy0jaW5jbHVkZSA8aWNvbnYuaD4KKy0jaW5jbHVkZSA8c3RyaW5nLmg+CistI2luY2x1ZGUgPGVuZGlhbi5oPgorLSNpbmNsdWRlIDxieXRlc3dhcC5oPgorLQorLSNpZiAoX19CWVRFX09SREVSICE9IF9fQklHX0VORElBTikgJiYgKF9fQllURV9PUkRFUiAhPSBfX0xJVFRMRV9FTkRJQU4pCistI2Vycm9yIHVuc3VwcG9ydGVkIGVuZGlhbm5lc3MgZm9yIGljb252CistI2VuZGlmCistCistI2lmbmRlZiBfX0NUWVBFX0hBU184X0JJVF9MT0NBTEVTCistI2Vycm9yIGN1cnJlbnRseSBpY29udiByZXF1aXJlcyA4IGJpdCBsb2NhbGVzCistI2VuZGlmCistI2lmbmRlZiBfX0NUWVBFX0hBU19VVEZfOF9MT0NBTEVTCistI2Vycm9yIGN1cnJlbnRseSBpY29udiByZXF1aXJlcyBVVEYtOCBsb2NhbGVzCistI2VuZGlmCistCistCistZW51bSB7CistCUlDX1dDSEFSX1QgPSAweGUwLAorLQlJQ19NVUxUSUJZVEUgPSAweGUwLAorLSNpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCistCUlDX1VDU180ID0JMHhlYywKKy0JSUNfVVRGXzMyID0gMHhlNCwKKy0JSUNfVUNTXzIgPQkweGUyLAorLQlJQ19VVEZfMTYgPSAweGVhLAorLSNlbHNlCistCUlDX1VDU180ID0JMHhlZCwKKy0JSUNfVVRGXzMyID0gMHhlNSwKKy0JSUNfVUNTXzIgPQkweGUzLAorLQlJQ19VVEZfMTYgPSAweGViLAorLSNlbmRpZgorLQlJQ19VVEZfOCA9IDIsCistCUlDX0FTQ0lJID0gMQorLX07CistCisgLyogRm9yIHRoZSBtdWx0aWJ5dGUKKyAgKiBiaXQgMCBtZWFucyBzd2FwIGVuZGlhbgorICAqIGJpdCAxIG1lYW5zIDIgYnl0ZQorQEAgLTEyNDcsOCArMTIwNywxMyBAQCBlbnVtIHsKKyAgKgorICAqLworIAorKyNpZiBkZWZpbmVkIExfaWNvbnYgJiYgZGVmaW5lZCBfTElCQworKy8qIFVzZWQgZXh0ZXJuYWxseSBvbmx5IGJ5IGljb252IHV0aWxpdHkgKi8KKyBleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBfX2ljb252X2NvZGVzZXRzW107CisgbGliY19oaWRkZW5fcHJvdG8oX19pY29udl9jb2Rlc2V0cykKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBMX2ljb252IHx8IGRlZmluZWQgTF9pY29udl9tYWluCisgY29uc3QgdW5zaWduZWQgY2hhciBfX2ljb252X2NvZGVzZXRzW10gPQorIAkiXHgwYVx4ZTAiIldDSEFSX1RceDAwIgkJLyogc3VwZXJzZXQgb2YgVUNTLTQgYnV0IHBsYXRmb3JtLWVuZGlhbiAqLworICNpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCitAQCAtMTI4MSw3ICsxMjQ2LDQ4IEBAIGNvbnN0IHVuc2lnbmVkIGNoYXIgX19pY29udl9jb2Rlc2V0c1tdID0KKyAJIlx4MDhceDAyIiJVVEYtOFx4MDAiCisgCSJceDBiXHgwMSIiVVMtQVNDSUlceDAwIgorIAkiXHgwN1x4MDEiIkFTQ0lJIjsJCQkvKiBNdXN0IGJlIGxhc3QhIChzcGVjaWFsIGNhc2UgdG8gc2F2ZSBhIG51bCkgKi8KKysjZW5kaWYKKysjaWYgZGVmaW5lZCBMX2ljb252ICYmIGRlZmluZWQgX0xJQkMKKyBsaWJjX2hpZGRlbl9kYXRhX2RlZihfX2ljb252X2NvZGVzZXRzKQorKyNlbmRpZgorKworKworKyNpZmRlZiBMX2ljb252CisrCisrI2luY2x1ZGUgPGljb252Lmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxlbmRpYW4uaD4KKysjaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKysKKysjaWYgKF9fQllURV9PUkRFUiAhPSBfX0JJR19FTkRJQU4pICYmIChfX0JZVEVfT1JERVIgIT0gX19MSVRUTEVfRU5ESUFOKQorKyNlcnJvciB1bnN1cHBvcnRlZCBlbmRpYW5uZXNzIGZvciBpY29udgorKyNlbmRpZgorKworKyNpZm5kZWYgX19DVFlQRV9IQVNfOF9CSVRfTE9DQUxFUworKyNlcnJvciBjdXJyZW50bHkgaWNvbnYgcmVxdWlyZXMgOCBiaXQgbG9jYWxlcworKyNlbmRpZgorKyNpZm5kZWYgX19DVFlQRV9IQVNfVVRGXzhfTE9DQUxFUworKyNlcnJvciBjdXJyZW50bHkgaWNvbnYgcmVxdWlyZXMgVVRGLTggbG9jYWxlcworKyNlbmRpZgorKworKworK2VudW0geworKwlJQ19XQ0hBUl9UID0gMHhlMCwKKysJSUNfTVVMVElCWVRFID0gMHhlMCwKKysjaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorKwlJQ19VQ1NfNCA9CTB4ZWMsCisrCUlDX1VURl8zMiA9IDB4ZTQsCisrCUlDX1VDU18yID0JMHhlMiwKKysJSUNfVVRGXzE2ID0gMHhlYSwKKysjZWxzZQorKwlJQ19VQ1NfNCA9CTB4ZWQsCisrCUlDX1VURl8zMiA9IDB4ZTUsCisrCUlDX1VDU18yID0JMHhlMywKKysJSUNfVVRGXzE2ID0gMHhlYiwKKysjZW5kaWYKKysJSUNfVVRGXzggPSAyLAorKwlJQ19BU0NJSSA9IDEKKyt9OworIAorIC8qIEV4cGVyaW1lbnRhbGx5IG9mZiAtIGxpYmNfaGlkZGVuX3Byb3RvKHN0cmNhc2VjbXApICovCisgCitAQCAtMTU3NSw2ICsxNTgxLDQgQEAgc2l6ZV90IHdlYWtfZnVuY3Rpb24gaWNvbnYoaWNvbnZfdCBjZCwgY2hhciAqKl9fcmVzdHJpY3QgaW5idWYsCisgCX0KKyAJcmV0dXJuIG5yY291bnQ7CisgfQorLQorICNlbmRpZgorLQorLS0KK2NnaXQgdjAuOC4yLjEKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjIvMjIwLWZzdGF0YXQtZml4LXVwLWJlaGF2aW9yLW9uLTMyLTY0LWJpdC1ob3N0cy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjIvMjIwLWZzdGF0YXQtZml4LXVwLWJlaGF2aW9yLW9uLTMyLTY0LWJpdC1ob3N0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmFlMmE1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMi8yMjAtZnN0YXRhdC1maXgtdXAtYmVoYXZpb3Itb24tMzItNjQtYml0LWhvc3RzLnBhdGNoCkBAIC0wLDAgKzEsMTEzIEBACitGcm9tIGQ0M2YwNjhlODQ1MTNlZDg4MzkyZGY0Y2EyN2Q0OWFkMDExNDVmZDIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaWtlIEZyeXNpbmdlciA8dmFwaWVyQGdlbnRvby5vcmc+CitEYXRlOiBTdW4sIDYgU2VwIDIwMDkgMTI6MTI6MTIgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNy8xNV0gZnN0YXRhdDogZml4IHVwIGJlaGF2aW9yIG9uIDMyLzY0IGJpdCBob3N0cworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitUaGUgZnN0YXRhdCgpIHN5c2NhbGwgaXMgYSBsaXR0bGUgZnVua3kgaW4gdGhhdCBpdCBzb21ldGltZXMgY2hhbmdlcyBuYW1lCitiZXR3ZWVuIDMyIGFuZCA2NCBiaXQgaG9zdHMsIGJ1dCBpdCBzaG91bGQgYWx3YXlzIG9wZXJhdGUgb24gYSA2NGJpdCBzdGF0CitzdHJ1Y3R1cmUuICBTbyBmb3IgdGhlIGZzdGF0YXQoKSBmdW5jdGlvbiwgbWFrZSBzdXJlIHdlIGNvbnZlcnQgaXQgZnJvbSBhCis2NGJpdCBrc3RhdCB0byBhIDMyYml0IHN0YXQuCisKK0Fsb25nIHRoZXNlIGxpbmVzLCB3ZSBuZWVkIHRvIHJlc3RvcmUgdGhlIF9feHN0YXQzMl9jb252KCkgZnVuY3Rpb24uCisKK1JlcG9ydGVkLWJ5OiBUaW1vIFRlcsOkcyA8dGltby50ZXJhc0Bpa2kuZmk+CitTaWduZWQtb2ZmLWJ5OiBNaWtlIEZyeXNpbmdlciA8dmFwaWVyQGdlbnRvby5vcmc+CitTaWduZWQtb2ZmLWJ5OiBCZXJuaGFyZCBSZXV0bmVyLUZpc2NoZXIgPHJlcC5kb3Qubm9wQGdtYWlsLmNvbT4KKy0tLQorIGxpYmMvc3lzZGVwcy9saW51eC9jb21tb24vZnN0YXRhdC5jICAgfCAgICA5ICsrKysrKystLQorIGxpYmMvc3lzZGVwcy9saW51eC9jb21tb24vZnN0YXRhdDY0LmMgfCAgICA1ICsrKysrCisgbGliYy9zeXNkZXBzL2xpbnV4L2NvbW1vbi94c3RhdGNvbnYuYyB8ICAgMTkgKysrKysrKysrKysrKysrKysrKworIGxpYmMvc3lzZGVwcy9saW51eC9jb21tb24veHN0YXRjb252LmggfCAgICAxICsKKyA0IGZpbGVzIGNoYW5nZWQsIDMyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJjL3N5c2RlcHMvbGludXgvY29tbW9uL2ZzdGF0YXQuYyBiL2xpYmMvc3lzZGVwcy9saW51eC9jb21tb24vZnN0YXRhdC5jCitpbmRleCAxNDljMTg5Li4zM2RhYTdjIDEwMDY0NAorLS0tIGEvbGliYy9zeXNkZXBzL2xpbnV4L2NvbW1vbi9mc3RhdGF0LmMKKysrKyBiL2xpYmMvc3lzZGVwcy9saW51eC9jb21tb24vZnN0YXRhdC5jCitAQCAtMTAsMTUgKzEwLDIwIEBACisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgInhzdGF0Y29udi5oIgorIAorKy8qIDY0Yml0IHBvcnRzIHRlbmQgdG8gZmF2b3IgbmV3ZnN0YXRhdCgpICovCisrI2lmZGVmIF9fTlJfbmV3ZnN0YXRhdAorKyMgZGVmaW5lIF9fTlJfZnN0YXRhdDY0IF9fTlJfbmV3ZnN0YXRhdAorKyNlbmRpZgorKworICNpZmRlZiBfX05SX2ZzdGF0YXQ2NAorIGludCBmc3RhdGF0KGludCBmZCwgY29uc3QgY2hhciAqZmlsZSwgc3RydWN0IHN0YXQgKmJ1ZiwgaW50IGZsYWcpCisgeworIAlpbnQgcmV0OworLQlzdHJ1Y3Qga2VybmVsX3N0YXQga2J1ZjsKKysJc3RydWN0IGtlcm5lbF9zdGF0NjQga2J1ZjsKKyAKKyAJcmV0ID0gSU5MSU5FX1NZU0NBTEwoZnN0YXRhdDY0LCA0LCBmZCwgZmlsZSwgJmtidWYsIGZsYWcpOworIAlpZiAocmV0ID09IDApCistCQlfX3hzdGF0X2NvbnYoJmtidWYsIGJ1Zik7CisrCQlfX3hzdGF0MzJfY29udigma2J1ZiwgYnVmKTsKKyAKKyAJcmV0dXJuIHJldDsKKyB9CitkaWZmIC0tZ2l0IGEvbGliYy9zeXNkZXBzL2xpbnV4L2NvbW1vbi9mc3RhdGF0NjQuYyBiL2xpYmMvc3lzZGVwcy9saW51eC9jb21tb24vZnN0YXRhdDY0LmMKK2luZGV4IDVhZTFmYWQuLjk1NjI3YWYgMTAwNjQ0CistLS0gYS9saWJjL3N5c2RlcHMvbGludXgvY29tbW9uL2ZzdGF0YXQ2NC5jCisrKysgYi9saWJjL3N5c2RlcHMvbGludXgvY29tbW9uL2ZzdGF0YXQ2NC5jCitAQCAtMTIsNiArMTIsMTEgQEAKKyAKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX0xGU19fCisgCisrLyogNjRiaXQgcG9ydHMgdGVuZCB0byBmYXZvciBuZXdmc3RhdGF0KCkgKi8KKysjaWZkZWYgX19OUl9uZXdmc3RhdGF0CisrIyBkZWZpbmUgX19OUl9mc3RhdGF0NjQgX19OUl9uZXdmc3RhdGF0CisrI2VuZGlmCisrCisgI2lmZGVmIF9fTlJfZnN0YXRhdDY0CisgaW50IGZzdGF0YXQ2NChpbnQgZmQsIGNvbnN0IGNoYXIgKmZpbGUsIHN0cnVjdCBzdGF0NjQgKmJ1ZiwgaW50IGZsYWcpCisgeworZGlmZiAtLWdpdCBhL2xpYmMvc3lzZGVwcy9saW51eC9jb21tb24veHN0YXRjb252LmMgYi9saWJjL3N5c2RlcHMvbGludXgvY29tbW9uL3hzdGF0Y29udi5jCitpbmRleCBlNTc1YjI2Li41MDQ1NWM2IDEwMDY0NAorLS0tIGEvbGliYy9zeXNkZXBzL2xpbnV4L2NvbW1vbi94c3RhdGNvbnYuYworKysrIGIvbGliYy9zeXNkZXBzL2xpbnV4L2NvbW1vbi94c3RhdGNvbnYuYworQEAgLTQ2LDYgKzQ2LDI1IEBAIHZvaWQgYXR0cmlidXRlX2hpZGRlbiBfX3hzdGF0X2NvbnYoc3RydWN0IGtlcm5lbF9zdGF0ICprYnVmLCBzdHJ1Y3Qgc3RhdCAqYnVmKQorIAlidWYtPnN0X2N0aW0gPSBrYnVmLT5zdF9jdGltOworIH0KKyAKKyt2b2lkIF9feHN0YXQzMl9jb252KHN0cnVjdCBrZXJuZWxfc3RhdDY0ICprYnVmLCBzdHJ1Y3Qgc3RhdCAqYnVmKQorK3sKKysJLyogQ29udmVydCB0byBjdXJyZW50IGtlcm5lbCB2ZXJzaW9uIG9mIGBzdHJ1Y3Qgc3RhdDY0Jy4gKi8KKysJbWVtc2V0KGJ1ZiwgMHgwMCwgc2l6ZW9mKCpidWYpKTsKKysJYnVmLT5zdF9kZXYgPSBrYnVmLT5zdF9kZXY7CisrCWJ1Zi0+c3RfaW5vID0ga2J1Zi0+c3RfaW5vOworKwlidWYtPnN0X21vZGUgPSBrYnVmLT5zdF9tb2RlOworKwlidWYtPnN0X25saW5rID0ga2J1Zi0+c3Rfbmxpbms7CisrCWJ1Zi0+c3RfdWlkID0ga2J1Zi0+c3RfdWlkOworKwlidWYtPnN0X2dpZCA9IGtidWYtPnN0X2dpZDsKKysJYnVmLT5zdF9yZGV2ID0ga2J1Zi0+c3RfcmRldjsKKysJYnVmLT5zdF9zaXplID0ga2J1Zi0+c3Rfc2l6ZTsKKysJYnVmLT5zdF9ibGtzaXplID0ga2J1Zi0+c3RfYmxrc2l6ZTsKKysJYnVmLT5zdF9ibG9ja3MgPSBrYnVmLT5zdF9ibG9ja3M7CisrCWJ1Zi0+c3RfYXRpbSA9IGtidWYtPnN0X2F0aW07CisrCWJ1Zi0+c3RfbXRpbSA9IGtidWYtPnN0X210aW07CisrCWJ1Zi0+c3RfY3RpbSA9IGtidWYtPnN0X2N0aW07CisrfQorKworICNpZmRlZiBfX1VDTElCQ19IQVNfTEZTX18KKyAKKyB2b2lkIGF0dHJpYnV0ZV9oaWRkZW4gX194c3RhdDY0X2NvbnYoc3RydWN0IGtlcm5lbF9zdGF0NjQgKmtidWYsIHN0cnVjdCBzdGF0NjQgKmJ1ZikKK2RpZmYgLS1naXQgYS9saWJjL3N5c2RlcHMvbGludXgvY29tbW9uL3hzdGF0Y29udi5oIGIvbGliYy9zeXNkZXBzL2xpbnV4L2NvbW1vbi94c3RhdGNvbnYuaAoraW5kZXggNTdjOGJjYi4uNzU2OGRhOCAxMDA2NDQKKy0tLSBhL2xpYmMvc3lzZGVwcy9saW51eC9jb21tb24veHN0YXRjb252LmgKKysrKyBiL2xpYmMvc3lzZGVwcy9saW51eC9jb21tb24veHN0YXRjb252LmgKK0BAIC0yNiw2ICsyNiw3IEBACisgI2luY2x1ZGUgPGJpdHMva2VybmVsX3N0YXQuaD4KKyAKKyBleHRlcm4gdm9pZCBfX3hzdGF0X2NvbnYoc3RydWN0IGtlcm5lbF9zdGF0ICprYnVmLCBzdHJ1Y3Qgc3RhdCAqYnVmKSBhdHRyaWJ1dGVfaGlkZGVuOworK2V4dGVybiB2b2lkIF9feHN0YXQzMl9jb252KHN0cnVjdCBrZXJuZWxfc3RhdDY0ICprYnVmLCBzdHJ1Y3Qgc3RhdCAqYnVmKSBhdHRyaWJ1dGVfaGlkZGVuOworICNpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MRlNfXworIGV4dGVybiB2b2lkIF9feHN0YXQ2NF9jb252KHN0cnVjdCBrZXJuZWxfc3RhdDY0ICprYnVmLCBzdHJ1Y3Qgc3RhdDY0ICpidWYpIGF0dHJpYnV0ZV9oaWRkZW47CisgI2VuZGlmCistLSAKKzEuNi42LjEKKwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMi8yMzAtZ2V0ZGVudHMtRml4LW1pcHM2NC1idWlsZC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjIvMjMwLWdldGRlbnRzLUZpeC1taXBzNjQtYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U1NzEzZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjIvMjMwLWdldGRlbnRzLUZpeC1taXBzNjQtYnVpbGQucGF0Y2gKQEAgLTAsMCArMSw3MiBAQAorRnJvbSAxMzU0NWJjZTg3N2IzM2UzMDE1NWZjNDEyYWQ0NGNjMTE4ZDgzZjc3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQXRzdXNoaSBOZW1vdG8gPGFuZW1vQG1iYS5vY24ubmUuanA+CitEYXRlOiBTYXQsIDMwIEphbiAyMDEwIDAwOjI0OjM3ICswOTAwCitTdWJqZWN0OiBbUEFUQ0ggMTUvMTVdIGdldGRlbnRzOiBGaXggbWlwczY0IGJ1aWxkCisKK09uIFdlZCwgMjcgSmFuIDIwMTAgMDc6MTQ6MDggKzAxMDAsIENhcm1lbG8gQU1PUk9TTyA8Y2FybWVsby5hbW9yb3NvQHN0LmNvbT4gd3JvdGU6Cis+IEkgd291bGQgcmUtd3JpdGUgeW91ciBwYXRjaCBpbiBhIHNpbXBsZXIgd2F5LgorPgorPiBXZSBhbHJlYWR5IGhhdmUgdGhlIGZvbGxvd2luZworPgorPiAxMzYgI2lmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xGU19fICYmICEgZGVmaW5lZCBfX05SX2dldGRlbnRzNjQKKz4gMTM3IGF0dHJpYnV0ZV9oaWRkZW4gc3Ryb25nX2FsaWFzKF9fZ2V0ZGVudHMsX19nZXRkZW50czY0KQorPiAxMzggI2VuZGlmCis+Cis+IEkgdGhpbmsgdGhhdCBpdCdzIHNpbXBsZXIgdG8gbW92ZSBpbiB0aGUgcHJvcGVyIHBsYWNlIHRoaXMgc3RhdGVtZW50LgorCitUaGFua3MsIGluZGVlZC4gIElmIHdlIGNhbWUgaW50byAiI2VsaWYgV09SRFNJWkUgPT0gMzIiIGJsb2NrLCBhYm92ZQorY29uZGl0aW9uIG5ldmVyIGJlIHRydWUuICBTbyB3ZSBjYW4ganVzdCBtb3ZlIHRoaXMgc3RhdGVtZW50IG91dCBvZgorIiNpZi4uLiNlbGlmLi4uI2VsaWYuLi4jZW5kaWYiIGJsb2NrLiAgSGVyZSBpcyBhIHJldmlzZWQgcGF0Y2guCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRnJvbTogQXRzdXNoaSBOZW1vdG8gPGFuZW1vQG1iYS5vY24ubmUuanA+CitTdWJqZWN0OiBbUEFUQ0hdIGdldGRlbnRzOiBGaXggbWlwczY0IGJ1aWxkCisKK1NvbWUgYXJjaHMgKHN1Y2ggYXMgbWlwczY0KSBkbyBub3QgaGF2ZSBnZXRkZW50czY0IHN5c2NhbGwgYnV0IGhhdmUKK2dldGRlbnRzIHN5c2NhbGwuICBEZWZpbmUgYWxpYXMgZm9yIGl0LgorCitUaGlzIGZpeGVzIHJlZ3Jlc3Npb24gZnJvbSAwLjkuMzAuMS4KKworQmFja2dyb3VuZHM6CitUaGlzIGlzIG9uY2UgZG9uZSBieSBjb21taXQgZThiMWM2NzQuICBCdXQgYWZ0ZXIgdGhlIGNvbW1pdCAzM2JjZjczMworKCJVc2UgZ2V0ZGVudHMgc3lzY2FsbCBpZiBrZXJuZWwgcHJvdmlkZSBzdXBwb3J0cyBmb3IgdGhpcyBpbnN0ZWFkIG9mCityZWx5aW5nIHVwb24gZ2V0ZGVudHM2NC4iKSwgaWYgX19BU1NVTUVfR0VUREVOVFMzMl9EX1RZUEUgd2FzIGRlZmluZWQKK3RoZSBhbGlhcyBmb3IgZ2V0ZGVudHM2NCBpcyBub3QgZGVmaW5lZC4gIFRoZSBtYWNybworX19BU1NVTUVfR0VUREVOVFMzMl9EX1RZUEUgaGFkIGJlZW4gZWZmZWN0aXZlbHkgaWdub3JlZCB1bnRpbCAwLjkuMzAuMQorYnV0IHRoZSBjb21taXQgMGYwZjIwYWIgKCJNb3ZlIGtlcm5lbC1mZWF0dXJlcy5oIGhlYWRlciBmcm9tIHRoZQorbGludXh0aHJlYWQgZGlyZWN0b3J5IHRvIGEgY29tbW9uIG9uZS4uLiIpIHJlYWxseSBlbmFibGVzIGl0LgorCitTaWduZWQtb2ZmLWJ5OiBBdHN1c2hpIE5lbW90byA8YW5lbW9AbWJhLm9jbi5uZS5qcD4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBCZXJuaGFyZCBSZXV0bmVyLUZpc2NoZXIgPHJlcC5kb3Qubm9wQGdtYWlsLmNvbT4KKy0tLQorIGxpYmMvc3lzZGVwcy9saW51eC9jb21tb24vZ2V0ZGVudHMuYyB8ICAgIDggKysrKy0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmMvc3lzZGVwcy9saW51eC9jb21tb24vZ2V0ZGVudHMuYyBiL2xpYmMvc3lzZGVwcy9saW51eC9jb21tb24vZ2V0ZGVudHMuYworaW5kZXggYjUxOGNjMC4uNjZhMDNiMyAxMDA2NDQKKy0tLSBhL2xpYmMvc3lzZGVwcy9saW51eC9jb21tb24vZ2V0ZGVudHMuYworKysrIGIvbGliYy9zeXNkZXBzL2xpbnV4L2NvbW1vbi9nZXRkZW50cy5jCitAQCAtMTM2LDEwICsxMzYsNiBAQCBzc2l6ZV90IF9fZ2V0ZGVudHMgKGludCBmZCwgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzKQorICAgICByZXR1cm4gKGNoYXIgKikgZHAgLSBidWY7CisgfQorIAorLSNpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MRlNfXyAmJiAhIGRlZmluZWQgX19OUl9nZXRkZW50czY0CistYXR0cmlidXRlX2hpZGRlbiBzdHJvbmdfYWxpYXMoX19nZXRkZW50cyxfX2dldGRlbnRzNjQpCistI2VuZGlmCistCisgI2VsaWYgX19XT1JEU0laRSA9PSAzMgorIAorIC8qIEV4cGVyaW1lbnRhbGx5IG9mZiAtIGxpYmNfaGlkZGVuX3Byb3RvKG1lbW1vdmUpICovCitAQCAtMTcxLDQgKzE2Nyw4IEBAIHNzaXplX3QgX19nZXRkZW50cyAoaW50IGZkLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMpCisgfQorICNlbmRpZgorIAorKyNpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MRlNfXyAmJiAhIGRlZmluZWQgX19OUl9nZXRkZW50czY0CisrYXR0cmlidXRlX2hpZGRlbiBzdHJvbmdfYWxpYXMoX19nZXRkZW50cyxfX2dldGRlbnRzNjQpCisrI2VuZGlmCisrCisgI2VuZGlmCistLSAKKzEuNi42LjEKKwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMi8yNDAtaG9zdC11dGlscy1kZXBlbmQtb24taGVhZGVycy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjIvMjQwLWhvc3QtdXRpbHMtZGVwZW5kLW9uLWhlYWRlcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzliOTY0MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjIvMjQwLWhvc3QtdXRpbHMtZGVwZW5kLW9uLWhlYWRlcnMucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSA0N2U4OGMwNGUwMTI5OWY5NzVmZjIzZjMzMDM1ZDBmMzRhOGY2Nzg3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQmVybmhhcmQgUmV1dG5lci1GaXNjaGVyIDxyZXAuZG90Lm5vcEBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIyIEphbiAyMDEwIDEzOjMyOjQ0ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMDYvMTVdIHssaG9zdH11dGlscyBkZXBlbmQgb24gaGVhZGVycworCitTaWduZWQtb2ZmLWJ5OiBCZXJuaGFyZCBSZXV0bmVyLUZpc2NoZXIgPHJlcC5kb3Qubm9wQGdtYWlsLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluIHwgICAgNCArKy0tCisgMSBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCA0YzVhZWNiLi5lYzRjMjhlIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNDM2LDcgKzQzNiw3IEBAIGlmZXEgKCQoSEFWRV9TSEFSRUQpLHkpCisgCWZpCisgZW5kaWYKKyAKKy11dGlsczoKKyt1dGlsczogaGVhZGVycworIAkkKFEpJChNQUtFKSBDUk9TUz0iJChDUk9TUykiIENDPSIkKENDKSIgLUMgdXRpbHMgJEAKKyAKKyAjIEluc3RhbGxzIGhlbHBlciBhcHBsaWNhdGlvbnMsIHN1Y2ggYXMgJ2xkZCcgYW5kICdsZGNvbmZpZycKK0BAIC00NDUsNyArNDQ1LDcgQEAgaW5zdGFsbF91dGlsczogdXRpbHMKKyAKKyBlbmRpZiAjIGlmZXEgKCQoSEFWRV9ET1RfQ09ORklHKSx5KQorIAorLWhvc3R1dGlsczoKKytob3N0dXRpbHM6IGhlYWRlcnMKKyAJJChRKSQoTUFLRSkgQ1JPU1M9IiQoQ1JPU1MpIiBDQz0iJChDQykiIEhPU1RDQz0iJChIT1NUQ0MpIiBET1RIT1NUPS5ob3N0IC1DIHV0aWxzICRACisgCisgaW5zdGFsbF9ob3N0dXRpbHM6IGhvc3R1dGlscworLS0gCisxLjYuNi4xCisKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjIvMjUwLWxpYmMtRml4LXR5cG8taW4taW5jbHVkZS1ycGMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4yLzI1MC1saWJjLUZpeC10eXBvLWluLWluY2x1ZGUtcnBjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMzYxN2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4yLzI1MC1saWJjLUZpeC10eXBvLWluLWluY2x1ZGUtcnBjLnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK0Zyb20gYjRkNmE2ZTk0ZDg3ZmYyYjRhZTY4N2EyMTA0ODgzM2YxOWI5ZGQ0OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENhcm1lbG8gQW1vcm9zbyA8Y2FybWVsby5hbW9yb3NvQHN0LmNvbT4KK0RhdGU6IE1vbiwgOCBGZWIgMjAxMCAxNjoyNDowNiArMDEwMAorU3ViamVjdDogW1BBVENIIDExLzE1XSBsaWJjOiBGaXggdHlwbyBpbiBpbmNsdWRlL3JwYworCitzL0dOVV9TT1VDRS9HTlVfU09VUkNFLyBpbiBpbmNsdWRlL3JjcC8KKworU2lnbmVkLW9mZi1ieTogSmFzb24gV29vZHdhcmQgPGphc29uLndvb2R3YXJkQHRpbWVzeXMuY29tPgorU2lnbmVkLW9mZi1ieTogQ2FybWVsbyBBbW9yb3NvIDxjYXJtZWxvLmFtb3Jvc29Ac3QuY29tPgorLS0tCisgaW5jbHVkZS9ycGMvYXV0aC5oICB8ICAgIDQgKystLQorIGluY2x1ZGUvcnBjL3JwYy5oICAgfCAgICA0ICsrLS0KKyBpbmNsdWRlL3JwYy90eXBlcy5oIHwgICAgNCArKy0tCisgMyBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9pbmNsdWRlL3JwYy9hdXRoLmggYi9pbmNsdWRlL3JwYy9hdXRoLmgKK2luZGV4IDE3ZWI1OWYuLjEyMjk3ZTYgMTAwNjQ0CistLS0gYS9pbmNsdWRlL3JwYy9hdXRoLmgKKysrKyBiL2luY2x1ZGUvcnBjL2F1dGguaAorQEAgLTQ3LDggKzQ3LDggQEAKKyAjaWZuZGVmIF9fRk9SQ0VfR0xJQkMKKyAjZGVmaW5lIF9fRk9SQ0VfR0xJQkMKKyAjZW5kaWYKKy0jaWZuZGVmIF9HTlVfU09VQ0UKKy0jZGVmaW5lIF9HTlVfU09VQ0UKKysjaWZuZGVmIF9HTlVfU09VUkNFCisrI2RlZmluZSBfR05VX1NPVVJDRQorICNlbmRpZgorICNkZWZpbmUgXyhYKQlYCisgI2VuZGlmCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ycGMvcnBjLmggYi9pbmNsdWRlL3JwYy9ycGMuaAoraW5kZXggODE5NGZmZS4uMjE5OTEwZSAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvcnBjL3JwYy5oCisrKysgYi9pbmNsdWRlL3JwYy9ycGMuaAorQEAgLTQ0LDggKzQ0LDggQEAKKyAjaWZuZGVmIF9fRk9SQ0VfR0xJQkMKKyAjZGVmaW5lIF9fRk9SQ0VfR0xJQkMKKyAjZW5kaWYKKy0jaWZuZGVmIF9HTlVfU09VQ0UKKy0jZGVmaW5lIF9HTlVfU09VQ0UKKysjaWZuZGVmIF9HTlVfU09VUkNFCisrI2RlZmluZSBfR05VX1NPVVJDRQorICNlbmRpZgorICNkZWZpbmUgXyhYKQlYCisgI2luY2x1ZGUgPGZlYXR1cmVzLmg+CitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ycGMvdHlwZXMuaCBiL2luY2x1ZGUvcnBjL3R5cGVzLmgKK2luZGV4IDQ2OTU3NmUuLjA1ZjQ5YzMgMTAwNjQ0CistLS0gYS9pbmNsdWRlL3JwYy90eXBlcy5oCisrKysgYi9pbmNsdWRlL3JwYy90eXBlcy5oCitAQCAtMzksOCArMzksOCBAQAorICNpZm5kZWYgX19GT1JDRV9HTElCQworICNkZWZpbmUgX19GT1JDRV9HTElCQworICNlbmRpZgorLSNpZm5kZWYgX0dOVV9TT1VDRQorLSNkZWZpbmUgX0dOVV9TT1VDRQorKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjZGVmaW5lIF9HTlVfU09VUkNFCisgI2VuZGlmCisgI2RlZmluZSBfKFgpCVgKKyAjZW5kaWYKKy0tIAorMS42LjYuMQorCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4yLzI2MC1saWJtLWVuYWJsZS1sb2cyZi1hbmQtZXhwMmYucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4yLzI2MC1saWJtLWVuYWJsZS1sb2cyZi1hbmQtZXhwMmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I0MzM1NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjIvMjYwLWxpYm0tZW5hYmxlLWxvZzJmLWFuZC1leHAyZi5wYXRjaApAQCAtMCwwICsxLDcwIEBACitGcm9tIDk1NmEwMDg3ZTI4MmU1M2JhOWMwODVkYmJjNDY5MzkxZjcyMzQ5NDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBdXJlbGllbiBKYWNvYnMgPGF1cmVsQGdudWFnZS5vcmc+CitEYXRlOiBUaHUsIDQgRmViIDIwMTAgMDk6MzE6NDAgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSCAxMC8xNV0gbGlibTogZW5hYmxlIGxvZzJmIGFuZCBleHAyZgorCitTaWduZWQtb2ZmLWJ5OiBBdXJlbGllbiBKYWNvYnMgPGF1cmVsQGdudWFnZS5vcmc+CitTaWduZWQtb2ZmLWJ5OiBBdXN0aW4gRm94bGV5IDxhdXN0aW5mQGNldG9uY29ycC5jb20+CistLS0KKyBsaWJtL2Zsb2F0X3dyYXBwZXJzLmMgICAgfCAgICA0ICsrLS0KKyB0ZXN0L21hdGgvY29tcGlsZV90ZXN0LmMgfCAgICA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYm0vZmxvYXRfd3JhcHBlcnMuYyBiL2xpYm0vZmxvYXRfd3JhcHBlcnMuYworaW5kZXggZGMzMTVlNy4uYjczMTdhMSAxMDA2NDQKKy0tLSBhL2xpYm0vZmxvYXRfd3JhcHBlcnMuYworKysrIGIvbGlibS9mbG9hdF93cmFwcGVycy5jCitAQCAtMTUsMTIgKzE1LDEwIEBACisgCisgLyogRm9yIHRoZSB0aW1lIGJlaW5nLCBkbyBfTk9UXyBpbXBsZW1lbnQgdGhlc2UgZnVuY3Rpb25zCisgICogdGhhdCBhcmUgZGVmaW5lZCBieSBTdVN2MyAqLworLSN1bmRlZiBMX2V4cDJmICAgICAgICAgLypmbG9hdCAgICAgICBleHAyZihmbG9hdCk7Ki8KKyAjdW5kZWYgTF9mZGltZiAgICAgICAgIC8qZmxvYXQgICAgICAgZmRpbWYoZmxvYXQsIGZsb2F0KTsqLworICN1bmRlZiBMX2ZtYWYgICAgICAgICAgLypmbG9hdCAgICAgICBmbWFmKGZsb2F0LCBmbG9hdCwgZmxvYXQpOyovCisgI3VuZGVmIExfZm1heGYgICAgICAgICAvKmZsb2F0ICAgICAgIGZtYXhmKGZsb2F0LCBmbG9hdCk7Ki8KKyAjdW5kZWYgTF9mbWluZiAgICAgICAgIC8qZmxvYXQgICAgICAgZm1pbmYoZmxvYXQsIGZsb2F0KTsqLworLSN1bmRlZiBMX2xvZzJmICAgICAgICAgLypmbG9hdCAgICAgICBsb2cyZihmbG9hdCk7Ki8KKyAjdW5kZWYgTF9uZWFyYnlpbnRmICAgIC8qZmxvYXQgICAgICAgbmVhcmJ5aW50ZihmbG9hdCk7Ki8KKyAjdW5kZWYgTF9uZXh0dG93YXJkZiAgIC8qZmxvYXQgICAgICAgbmV4dHRvd2FyZGYoZmxvYXQsIGxvbmcgZG91YmxlKTsqLworICN1bmRlZiBMX3JlbXF1b2YgICAgICAgLypmbG9hdCAgICAgICByZW1xdW9mKGZsb2F0LCBmbG9hdCwgaW50ICopOyovCitAQCAtNDMsNiArNDEsNyBAQCBmbG9hdCAgICAgICBjb3NmKGZsb2F0KTsKKyBmbG9hdCAgICAgICBjb3NoZihmbG9hdCk7CisgZmxvYXQgICAgICAgZXJmY2YoZmxvYXQpOworIGZsb2F0ICAgICAgIGVyZmYoZmxvYXQpOworK2Zsb2F0ICAgICAgIGV4cDJmKGZsb2F0KTsKKyBmbG9hdCAgICAgICBleHBmKGZsb2F0KTsKKyBmbG9hdCAgICAgICBleHBtMWYoZmxvYXQpOworIGZsb2F0ICAgICAgIGZhYnNmKGZsb2F0KTsKK0BAIC01Niw2ICs1NSw3IEBAIGZsb2F0ICAgICAgIGxnYW1tYWYoZmxvYXQpOworIGxvbmcgbG9uZyAgIGxscm91bmRmKGZsb2F0KTsKKyBmbG9hdCAgICAgICBsb2cxMGYoZmxvYXQpOworIGZsb2F0ICAgICAgIGxvZzFwZihmbG9hdCk7CisrZmxvYXQgICAgICAgbG9nMmYoZmxvYXQpOworIGZsb2F0ICAgICAgIGxvZ2JmKGZsb2F0KTsKKyBmbG9hdCAgICAgICBsb2dmKGZsb2F0KTsKKyBsb25nICAgICAgICBscm91bmRmKGZsb2F0KTsKK2RpZmYgLS1naXQgYS90ZXN0L21hdGgvY29tcGlsZV90ZXN0LmMgYi90ZXN0L21hdGgvY29tcGlsZV90ZXN0LmMKK2luZGV4IDk5OTA1MjAuLmVlNWUyZTMgMTAwNjQ0CistLS0gYS90ZXN0L21hdGgvY29tcGlsZV90ZXN0LmMKKysrKyBiL3Rlc3QvbWF0aC9jb21waWxlX3Rlc3QuYworQEAgLTE4LDcgKzE4LDcgQEAgciArPSBjb3NmKGZsb2F0X3gpOworIHIgKz0gY29zaGYoZmxvYXRfeCk7CisgciArPSBlcmZjZihmbG9hdF94KTsKKyByICs9IGVyZmYoZmxvYXRfeCk7CistLypyICs9IGV4cDJmKGZsb2F0X3gpOyAtIHVjbGliYyBkb2VzIG5vdCBoYXZlIGl0ICh5ZXQ/KSAqLworK3IgKz0gZXhwMmYoZmxvYXRfeCk7CisgciArPSBleHBmKGZsb2F0X3gpOworIHIgKz0gZXhwbTFmKGZsb2F0X3gpOworIHIgKz0gZmFic2YoZmxvYXRfeCk7CitAQCAtMzgsNyArMzgsNyBAQCByICs9IGxscmludGYoZmxvYXRfeCk7CisgciArPSBsbHJvdW5kZihmbG9hdF94KTsKKyByICs9IGxvZzEwZihmbG9hdF94KTsKKyByICs9IGxvZzFwZihmbG9hdF94KTsKKy0vKnIgKz0gbG9nMmYoZmxvYXRfeCk7IC0gdWNsaWJjIGRvZXMgbm90IGhhdmUgaXQgKHlldD8pICovCisrciArPSBsb2cyZihmbG9hdF94KTsKKyByICs9IGxvZ2JmKGZsb2F0X3gpOworIHIgKz0gbG9nZihmbG9hdF94KTsKKyByICs9IGxyaW50ZihmbG9hdF94KTsKKy0tIAorMS42LjYuMQorCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4yLzI3MC1tYWxsb2MtZml4LXJhY2UtY29uZGl0aW9uLWFuZC1vdGhlci1idWdzLWluLXRoZS1uby1tLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMi8yNzAtbWFsbG9jLWZpeC1yYWNlLWNvbmRpdGlvbi1hbmQtb3RoZXItYnVncy1pbi10aGUtbm8tbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTljMmY0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMi8yNzAtbWFsbG9jLWZpeC1yYWNlLWNvbmRpdGlvbi1hbmQtb3RoZXItYnVncy1pbi10aGUtbm8tbS5wYXRjaApAQCAtMCwwICsxLDg5IEBACitGcm9tIGZhNDc2ZDAxZjFjMTk5MGE5MmVlNDlkMWYxYzU1N2I4MzgwNWQwZTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGcmVlbWFuIFdhbmcgPHh3YW5nQHViaWNvbS5jb20+CitEYXRlOiBTYXQsIDE5IERlYyAyMDA5IDEzOjQzOjAwIC0wODAwCitTdWJqZWN0OiBbUEFUQ0ggMDkvMTVdIG1hbGxvYzogZml4IHJhY2UgY29uZGl0aW9uIGFuZCBvdGhlciBidWdzIGluIHRoZSBuby1tbXUgbWFsbG9jCisKK0ZpeGVzIG11bHRpcGxlIHJhY2UgY29uZGl0aW9ucyBvbiBtbWIgbGlzdC4gVGhpcyB3YXMgZG9uZSBieQorbWFraW5nIHRoZSBtbWJfaGVhcF9sb2NrIGludG8gYSByZWN1cnNpdmUgbG9jayBhbmQgbWFraW5nIHRoZQorcmVndWxhciBoZWFwX2xvY2sgZXh0ZW5kIHRvIGNvdmVyIHRoZSBtbWIgaGVhcCBoYW5kbGluZy4KKworQWxzbyBtb3ZlIHRoZSBuZXdfbW1iIGFsbG9jYXRpb24gdXAgdG8gYmVmb3JlIHRoZSBtbWIgbGlzdCBpcworaXRlcmF0ZWQgdGhyb3VnaCB0byBmaW5kIHRoZSBpbnNlcnRpb24gcG9pbnQuIFdoZW4gdGhlIG1tYl9oZWFwCithbHNvIHJ1bnMgb3V0IGFuZCBuZWVkcyB0byBiZSBleHRlbmRlZCB3aGVuIHRoZSByZWd1bGFyIGhlYXAgaXMKK2p1c3QgZXh0ZW5kZWQsIHRoZSBtbWIgbGlzdCBjb3VsZCBiZSBtZXNzZWQgdXAuCisKK1NpZ25lZC1vZmYtYnk6IEZyZWVtYW4gV2FuZyA8eHdhbmdAdWJpY29tLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEF1c3RpbiBGb3hsZXkgPGF1c3RpbmZAY2V0b25jb3JwLmNvbT4KKy0tLQorIGxpYmMvc3RkbGliL21hbGxvYy9mcmVlLmMgICB8ICAgIDYgKysrLS0tCisgbGliYy9zdGRsaWIvbWFsbG9jL21hbGxvYy5jIHwgICAgNyArKysrLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9tYWxsb2MvZnJlZS5jIGIvbGliYy9zdGRsaWIvbWFsbG9jL2ZyZWUuYworaW5kZXggOTBlMThmNC4uNzQxMjQ4YSAxMDA2NDQKKy0tLSBhL2xpYmMvc3RkbGliL21hbGxvYy9mcmVlLmMKKysrKyBiL2xpYmMvc3RkbGliL21hbGxvYy9mcmVlLmMKK0BAIC0xNzksMTQgKzE3OSwxNCBAQCBfX2ZyZWVfdG9faGVhcCAodm9pZCAqbWVtLCBzdHJ1Y3QgaGVhcF9mcmVlX2FyZWEgKipoZWFwCisgCSAgICAgIC8qIFN0YXJ0IHNlYXJjaGluZyBhZ2FpbiBmcm9tIHRoZSBlbmQgb2YgdGhpcyBibG9jay4gICovCisgCSAgICAgIHN0YXJ0ID0gbW1iX2VuZDsKKyAKKysJICAgICAgLyogUmVsZWFzZSB0aGUgZGVzY3JpcHRvciBibG9jayB3ZSB1c2VkLiAgKi8KKysJICAgICAgZnJlZV90b19oZWFwIChtbWIsICZfX21hbGxvY19tbWJfaGVhcCwgJl9fbWFsbG9jX21tYl9oZWFwX2xvY2spOworKworIAkgICAgICAvKiBXZSBoYXZlIHRvIHVubG9jayB0aGUgaGVhcCBiZWZvcmUgd2UgcmVjdXJzZSB0byBmcmVlIHRoZSBtbWIKKyAJCSBkZXNjcmlwdG9yLCBiZWNhdXNlIHdlIG1pZ2h0IGJlIHVubWFwcGluZyBmcm9tIHRoZSBtbWIKKyAJCSBoZWFwLiAgKi8KKyAgICAgICAgICAgICAgIF9faGVhcF91bmxvY2sgKGhlYXBfbG9jayk7CisgCistCSAgICAgIC8qIFJlbGVhc2UgdGhlIGRlc2NyaXB0b3IgYmxvY2sgd2UgdXNlZC4gICovCistCSAgICAgIGZyZWVfdG9faGVhcCAobW1iLCAmX19tYWxsb2NfbW1iX2hlYXAsICZfX21hbGxvY19tbWJfaGVhcF9sb2NrKTsKKy0KKyAJICAgICAgLyogRG8gdGhlIGFjdHVhbCBtdW5tYXAuICAqLworIAkgICAgICBtdW5tYXAgKCh2b2lkICopbW1iX3N0YXJ0LCBtbWJfZW5kIC0gbW1iX3N0YXJ0KTsKKyAKK2RpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9tYWxsb2MvbWFsbG9jLmMgYi9saWJjL3N0ZGxpYi9tYWxsb2MvbWFsbG9jLmMKK2luZGV4IDcxZjllNTguLjg0YTZhY2QgMTAwNjQ0CistLS0gYS9saWJjL3N0ZGxpYi9tYWxsb2MvbWFsbG9jLmMKKysrKyBiL2xpYmMvc3RkbGliL21hbGxvYy9tYWxsb2MuYworQEAgLTQ4LDcgKzQ4LDcgQEAgc3RydWN0IG1hbGxvY19tbWIgKl9fbWFsbG9jX21tYXBwZWRfYmxvY2tzID0gMDsKKyBIRUFQX0RFQ0xBUkVfU1RBVElDX0ZSRUVfQVJFQSAoaW5pdGlhbF9tbWJfZmEsIDQ4KTsgLyogZW5vdWdoIGZvciAzIG1tYnMgKi8KKyBzdHJ1Y3QgaGVhcF9mcmVlX2FyZWEgKl9fbWFsbG9jX21tYl9oZWFwID0gSEVBUF9JTklUX1dJVEhfRkEgKGluaXRpYWxfbW1iX2ZhKTsKKyAjaWZkZWYgSEVBUF9VU0VfTE9DS0lORworLXB0aHJlYWRfbXV0ZXhfdCBfX21hbGxvY19tbWJfaGVhcF9sb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKytwdGhyZWFkX211dGV4X3QgX19tYWxsb2NfbW1iX2hlYXBfbG9jayA9IFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSX05QOworICNlbmRpZgorICNlbmRpZiAvKiBfX1VDTElCQ19VQ0xJTlVYX0JST0tFTl9NVU5NQVBfXyAqLworIAorQEAgLTE1MSwxOSArMTUxLDE5IEBAIF9fbWFsbG9jX2Zyb21faGVhcCAoc2l6ZV90IHNpemUsIHN0cnVjdCBoZWFwX2ZyZWVfYXJlYSAqKmhlYXAKKyAJICAvKiBUcnkgYWdhaW4gdG8gYWxsb2NhdGUuICAqLworIAkgIG1lbSA9IF9faGVhcF9hbGxvYyAoaGVhcCwgJnNpemUpOworIAorLQkgIF9faGVhcF91bmxvY2sgKGhlYXBfbG9jayk7CisgCisgI2lmICFkZWZpbmVkKE1BTExPQ19VU0VfU0JSSykgJiYgZGVmaW5lZChfX1VDTElCQ19VQ0xJTlVYX0JST0tFTl9NVU5NQVBfXykKKyAJICAvKiBJbnNlcnQgYSByZWNvcmQgb2YgQkxPQ0sgaW4gc29ydGVkIG9yZGVyIGludG8gdGhlCisgCSAgICAgX19tYWxsb2NfbW1hcHBlZF9ibG9ja3MgbGlzdC4gICovCisgCisrCSAgbmV3X21tYiA9IG1hbGxvY19mcm9tX2hlYXAgKHNpemVvZiAqbmV3X21tYiwgJl9fbWFsbG9jX21tYl9oZWFwLCAmX19tYWxsb2NfbW1iX2hlYXBfbG9jayk7CisrCisgCSAgZm9yIChwcmV2X21tYiA9IDAsIG1tYiA9IF9fbWFsbG9jX21tYXBwZWRfYmxvY2tzOworIAkgICAgICAgbW1iOworIAkgICAgICAgcHJldl9tbWIgPSBtbWIsIG1tYiA9IG1tYi0+bmV4dCkKKyAJICAgIGlmIChibG9jayA8IG1tYi0+bWVtKQorIAkgICAgICBicmVhazsKKyAKKy0JICBuZXdfbW1iID0gbWFsbG9jX2Zyb21faGVhcCAoc2l6ZW9mICpuZXdfbW1iLCAmX19tYWxsb2NfbW1iX2hlYXAsICZfX21hbGxvY19tbWJfaGVhcF9sb2NrKTsKKyAJICBuZXdfbW1iLT5uZXh0ID0gbW1iOworIAkgIG5ld19tbWItPm1lbSA9IGJsb2NrOworIAkgIG5ld19tbWItPnNpemUgPSBibG9ja19zaXplOworQEAgLTE3Nyw2ICsxNzcsNyBAQCBfX21hbGxvY19mcm9tX2hlYXAgKHNpemVfdCBzaXplLCBzdHJ1Y3QgaGVhcF9mcmVlX2FyZWEgKipoZWFwCisgCQkJICAgICh1bnNpZ25lZCluZXdfbW1iLAorIAkJCSAgICAodW5zaWduZWQpbmV3X21tYi0+bWVtLCBibG9ja19zaXplKTsKKyAjZW5kaWYgLyogIU1BTExPQ19VU0VfU0JSSyAmJiBfX1VDTElCQ19VQ0xJTlVYX0JST0tFTl9NVU5NQVBfXyAqLworKwkgIF9faGVhcF91bmxvY2sgKGhlYXBfbG9jayk7CisgCX0KKyAgICAgfQorIAorLS0gCisxLjYuNi4xCisKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjIvMjgwLXJwYy1maXgtdHlwby1pbi12ZXJzaW9uLW1pc21hdGNoLW1zZy5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLjIvMjgwLXJwYy1maXgtdHlwby1pbi12ZXJzaW9uLW1pc21hdGNoLW1zZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmUxNjM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMi8yODAtcnBjLWZpeC10eXBvLWluLXZlcnNpb24tbWlzbWF0Y2gtbXNnLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK0Zyb20gODNhMDljZDVjOWVkOWFmZDg3YTdkMWQxNzMxOWMyZmQyMjAzYWQwZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJlcm5oYXJkIFJldXRuZXItRmlzY2hlciA8cmVwLmRvdC5ub3BAZ21haWwuY29tPgorRGF0ZTogVGh1LCAyMSBKYW4gMjAxMCAxMDozNjoxMyArMDEwMAorU3ViamVjdDogW1BBVENIIDA0LzE1XSBycGM6IGZpeCB0eXBvIGluIHZlcnNpb24gbWlzbWF0Y2ggbXNnCisKK1NpZ25lZC1vZmYtYnk6IEJlcm5oYXJkIFJldXRuZXItRmlzY2hlciA8cmVwLmRvdC5ub3BAZ21haWwuY29tPgorLS0tCisgbGliYy9pbmV0L3JwYy9ycGNfcHJvdC5jIHwgICAgMiArLQorIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliYy9pbmV0L3JwYy9ycGNfcHJvdC5jIGIvbGliYy9pbmV0L3JwYy9ycGNfcHJvdC5jCitpbmRleCA3NDY1OGU2Li4yMjlmOTg4IDEwMDY0NAorLS0tIGEvbGliYy9pbmV0L3JwYy9ycGNfcHJvdC5jCisrKysgYi9saWJjL2luZXQvcnBjL3JwY19wcm90LmMKK0BAIC0yMjksNyArMjI5LDcgQEAgcmVqZWN0ZWQgKGVudW0gcmVqZWN0X3N0YXQgcmpjdF9zdGF0LAorIHsKKyAgIHN3aXRjaCAocmpjdF9zdGF0KQorICAgICB7CistICAgIGNhc2UgUlBDX1ZFUlNNSVNNQVRDSDoKKysgICAgY2FzZSBSUENfTUlTTUFUQ0g6CisgICAgICAgZXJyb3ItPnJlX3N0YXR1cyA9IFJQQ19WRVJTTUlTTUFUQ0g7CisgICAgICAgcmV0dXJuOworICAgICBjYXNlIEFVVEhfRVJST1I6CistLSAKKzEuNi42LjEKKwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMi8yOTAtYmxhY2tmaW4tbm9tbXUtZm9yay1zdHViLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAuMi8yOTAtYmxhY2tmaW4tbm9tbXUtZm9yay1zdHViLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYzA0MzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC4yLzI5MC1ibGFja2Zpbi1ub21tdS1mb3JrLXN0dWIucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbTogSmllIFpoYW5nIDxqaWUuemhhbmdAYW5hbG9nLmNvbT4KK0RhdGU6IE1vbiwgMSBKdW4gMjAwOSAwNzoyNTo0MiArMDAwMCAoKzAwMDApCitTdWJqZWN0OiBCYWNrcG9ydCBVQ0xJQkNfSEFTX1NUVUJTIGNvbmZpZyBvcHRpb24gZnJvbSB0aGUgdXBzdHJlYW0uIFRoaXMgb3B0aW9uIG1ha2VzIHVDbGliYy4uLiAKK1gtR2l0LVVybDogaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnL2dpdC8/cD1yZWFkb25seS1taXJyb3JzJTJGdG9vbGNoYWluLmdpdDthPWNvbW1pdGRpZmZfcGxhaW47aD1jYWNlYTZiMTJiYWU2ZjZjZmQwOGUyYmJlYzUzNmU5YjIzYjM0MmY1CisKK0JhY2twb3J0IFVDTElCQ19IQVNfU1RVQlMgY29uZmlnIG9wdGlvbiBmcm9tIHRoZSB1cHN0cmVhbS4gVGhpcyBvcHRpb24gbWFrZXMgdUNsaWJjIHByb3ZpZGUgZm9yaygpIHN0dWIgb24gTk9NTVUgdGFyZ2V0cy4gSXQncyBkZWZhdWx0IG9mZi4KKworCitnaXQtc3ZuLWlkOiBzdm46Ly9sb2NhbGhvc3Qvc3ZuL3Rvb2xjaGFpbi90cnVua0AzNDE3IDJhZGY0OTM1LTc1ZTktNDQwNy05M2IyLTM0YjIxYTE4ODBhNAorLS0tCisKK0luZGV4OiB1Q2xpYmMtMC45LjMwLjIvbGliYy91bmlzdGQvZGFlbW9uLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1Q2xpYmMtMC45LjMwLjIub3JpZy9saWJjL3VuaXN0ZC9kYWVtb24uYwkyMDEwLTAxLTEzIDIyOjIyOjMxLjAwMDAwMDAwMCArMDEwMAorKysrIHVDbGliYy0wLjkuMzAuMi9saWJjL3VuaXN0ZC9kYWVtb24uYwkyMDEwLTA0LTA2IDIyOjA0OjExLjAwMDAwMDAwMCArMDIwMAorQEAgLTU1LDcgKzU1LDYgQEAKKyBsaWJjX2hpZGRlbl9wcm90byhkdXAyKQorIGxpYmNfaGlkZGVuX3Byb3RvKHNldHNpZCkKKyBsaWJjX2hpZGRlbl9wcm90byhjaGRpcikKKy1saWJjX2hpZGRlbl9wcm90byhmb3JrKQorIAorICNpZm5kZWYgX19BUkNIX1VTRV9NTVVfXworICNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorQEAgLTg1LDYgKzg0LDggQEAKKyAJcmV0dXJuIHJldDsKKyB9CisgI2Vsc2UKKytsaWJjX2hpZGRlbl9wcm90byhmb3JrKQorKworIHN0YXRpYyBpbmxpbmUgcGlkX3QgZm9ya19wYXJlbnQodm9pZCkKKyB7CisgCXN3aXRjaCAoZm9yaygpKSB7CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC8xMDAtZml4LWdldGhvc3RlbnRfci1mYWlsdXJlLXJldHZhbC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLzEwMC1maXgtZ2V0aG9zdGVudF9yLWZhaWx1cmUtcmV0dmFsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZTE4ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC8xMDAtZml4LWdldGhvc3RlbnRfci1mYWlsdXJlLXJldHZhbC5wYXRjaApAQCAtMCwwICsxLDE3IEBACitPcmlnaW5hbCBwYXRjaCBmcm9tIEdlbnRvby4KKworLT0gQkVHSU4gb3JpZ2luYWwgaGVhZGVyID0tCistPSBFTkQgb3JpZ2luYWwgaGVhZGVyID0tCisKK2RpZmYgLWR1ck4gdUNsaWJjLTAuOS4zMC5vcmlnL2xpYmMvaW5ldC9yZXNvbHYuYyB1Q2xpYmMtMC45LjMwL2xpYmMvaW5ldC9yZXNvbHYuYworLS0tIHVDbGliYy0wLjkuMzAub3JpZy9saWJjL2luZXQvcmVzb2x2LmMJMjAwOC0xMS0wMiAwMToyNTozMy4wMDAwMDAwMDAgKzAxMDAKKysrKyB1Q2xpYmMtMC45LjMwL2xpYmMvaW5ldC9yZXNvbHYuYwkyMDA5LTAyLTA3IDA5OjU3OjU5LjAwMDAwMDAwMCArMDEwMAorQEAgLTE3ODgsNyArMTc4OCw3IEBACisgaW50IGdldGhvc3RlbnRfcihzdHJ1Y3QgaG9zdGVudCAqcmVzdWx0X2J1ZiwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLAorIAlzdHJ1Y3QgaG9zdGVudCAqKnJlc3VsdCwgaW50ICpoX2Vycm5vcCkKKyB7CistCWludCByZXQ7CisrCWludCByZXQgPSBIT1NUX05PVF9GT1VORDsKKyAKKyAJX19VQ0xJQkNfTVVURVhfTE9DSyhteWxvY2spOworIAlpZiAoX19nZXRob3N0ZW50X2ZwID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLzExMC1hcm1fZml4X2FsaWdubWVudC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLzExMC1hcm1fZml4X2FsaWdubWVudC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDcyZTdmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAvMTEwLWFybV9maXhfYWxpZ25tZW50LnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK09yaWdpbmFsIHBhdGNoIGZyb20gR2VudG9vLgorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KK0FSTVY1IGNhbiB1c2UgU1RSRCBhbmQgTERSRCBhY2Nlc3MgaW5zdHJ1Y3Rpb25zIGJ1dCB0aGVzZSBhY2Nlc3NlcyBuZWVkIHRvIGJlIAorOCBieXRlIGFsaWduZWQuIFRoZSBkeW5hbWljIGxpbmtlcidzIG1hbGxvYyBuZWVkcyB0byBtYXRjaCB0aGlzIHNvIHN0cnVjdHVyZXMKK2JlY29tZSA4IGJ5dGUgYWxpZ25lZCB0byB2b2lkIHVuYWxpZ25lZCBhY2Nlc3Nlcy4KKworUlAgLSAxNC8wMi8yMDA4CisKKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiB1Q2xpYmMtMC45LjMwLm9yaWcvbGRzby9sZHNvL2FybS9kbC1zeXNkZXAuaCB1Q2xpYmMtMC45LjMwL2xkc28vbGRzby9hcm0vZGwtc3lzZGVwLmgKKy0tLSB1Q2xpYmMtMC45LjMwLm9yaWcvbGRzby9sZHNvL2FybS9kbC1zeXNkZXAuaAkyMDA4LTA5LTI1IDEwOjM1OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIHVDbGliYy0wLjkuMzAvbGRzby9sZHNvL2FybS9kbC1zeXNkZXAuaAkyMDA5LTAyLTA3IDA5OjU3OjU5LjAwMDAwMDAwMCArMDEwMAorQEAgLTE1LDYgKzE1LDggQEAKKyAgIEdPVF9CQVNFWzFdID0gKHVuc2lnbmVkIGxvbmcpIE1PRFVMRTsgXAorIH0KKyAKKysjZGVmaW5lIERMX01BTExPQ19BTElHTiA4ICAvKiBFQUJJIG5lZWRzIDggYnl0ZSBhbGlnbm1lbnQgZm9yIFNUUkQgTERSRCovCisrCisgc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBhcm1fbW9kdWx1cyh1bnNpZ25lZCBsb25nIG0sIHVuc2lnbmVkIGxvbmcgcCkKKyB7CisgCXVuc2lnbmVkIGxvbmcgaSx0LGluYzsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLzEyMC1ybS13aGl0ZXNwYWNlLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAvMTIwLXJtLXdoaXRlc3BhY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlmZTNiZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLzEyMC1ybS13aGl0ZXNwYWNlLnBhdGNoCkBAIC0wLDAgKzEsODggQEAKK09yaWdpbmFsIHBhdGNoIGZyb20gR2VudG9vLgorCistPSBCRUdJTiBvcmlnaW5hbCBoZWFkZXIgPS0KKy09IEVORCBvcmlnaW5hbCBoZWFkZXIgPS0KKworZGlmZiAtZHVyTiB1Q2xpYmMtMC45LjMwLm9yaWcvaW5jbHVkZS9hc3NlcnQuaCB1Q2xpYmMtMC45LjMwL2luY2x1ZGUvYXNzZXJ0LmgKKy0tLSB1Q2xpYmMtMC45LjMwLm9yaWcvaW5jbHVkZS9hc3NlcnQuaAkyMDA4LTA3LTIzIDEzOjIzOjM2LjAwMDAwMDAwMCArMDIwMAorKysrIHVDbGliYy0wLjkuMzAvaW5jbHVkZS9hc3NlcnQuaAkyMDA5LTAyLTA3IDA5OjU3OjU5LjAwMDAwMDAwMCArMDEwMAorQEAgLTMxLDcgKzMxLDcgQEAKKyAjZGVmaW5lCV9BU1NFUlRfSAkxCisgI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisgCistI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgX19HTlVDX1BSRVJFUSAoMiw5NSkKKysjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBfX0dOVUNfUFJFUkVRKDIsOTUpCisgIyBkZWZpbmUgX19BU1NFUlRfVk9JRF9DQVNUIHN0YXRpY19jYXN0PHZvaWQ+CisgI2Vsc2UKKyAjIGRlZmluZSBfX0FTU0VSVF9WT0lEX0NBU1QgKHZvaWQpCitAQCAtNjAsMTIgKzYwLDE1IEBACisgCQkgICAgICAgKF9fYXNzZXJ0IChfX1NUUklORyhleHByKSwgX19GSUxFX18sIF9fTElORV9fLCAgICBcCisgCQkJCSAgICAgICBfX0FTU0VSVF9GVU5DVElPTiksIDApKSkKKyAKKysvKiBEZWZpbmUgc29tZSB0ZW1wb3JhcmllcyB0byB3b3JrYXJvdW5kIHRpbnl4IG1ha2VkZXBlbmQgYnVnICovCisrI2RlZmluZQlfX0dOVUNfUFJFUkVRXzJfNglfX0dOVUNfUFJFUkVRKDIsIDYpCisrI2RlZmluZQlfX0dOVUNfUFJFUkVRXzJfNAlfX0dOVUNfUFJFUkVRKDIsIDQpCisgLyogVmVyc2lvbiAyLjQgYW5kIGxhdGVyIG9mIEdDQyBkZWZpbmUgYSBtYWdpY2FsIHZhcmlhYmxlIGBfX1BSRVRUWV9GVU5DVElPTl9fJworICAgIHdoaWNoIGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiBjdXJyZW50bHkgYmVpbmcgZGVmaW5lZC4KKyAgICBUaGlzIGlzIGJyb2tlbiBpbiBHKysgYmVmb3JlIHZlcnNpb24gMi42LgorICAgIEM5eCBoYXMgYSBzaW1pbGFyIHZhcmlhYmxlIGNhbGxlZCBfX2Z1bmNfXywgYnV0IHByZWZlciB0aGUgR0NDIG9uZSBzaW5jZQorICAgIGl0IGRlbWFuZ2xlcyBDKysgZnVuY3Rpb24gbmFtZXMuICAqLworLSMgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyA/IF9fR05VQ19QUkVSRVEgKDIsIDYpIDogX19HTlVDX1BSRVJFUSAoMiwgNCkKKysjIGlmIGRlZmluZWQgX19jcGx1c3BsdXMgPyBfX0dOVUNfUFJFUkVRXzJfNiA6IF9fR05VQ19QUkVSRVFfMl80CisgIyAgIGRlZmluZSBfX0FTU0VSVF9GVU5DVElPTglfX1BSRVRUWV9GVU5DVElPTl9fCisgIyBlbHNlCisgIyAgaWYgZGVmaW5lZCBfX1NURENfVkVSU0lPTl9fICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorZGlmZiAtZHVyTiB1Q2xpYmMtMC45LjMwLm9yaWcvaW5jbHVkZS9jb21wbGV4LmggdUNsaWJjLTAuOS4zMC9pbmNsdWRlL2NvbXBsZXguaAorLS0tIHVDbGliYy0wLjkuMzAub3JpZy9pbmNsdWRlL2NvbXBsZXguaAkyMDA4LTEwLTAzIDE2OjI0OjI4LjAwMDAwMDAwMCArMDIwMAorKysrIHVDbGliYy0wLjkuMzAvaW5jbHVkZS9jb21wbGV4LmgJMjAwOS0wMi0wNyAwOTo1Nzo1OS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zMyw3ICszMyw3IEBACisgLyogV2UgbWlnaHQgbmVlZCB0byBhZGQgc3VwcG9ydCBmb3IgbW9yZSBjb21waWxlcnMgaGVyZS4gIEJ1dCBzaW5jZSBJU08KKyAgICBDOTkgaXMgb3V0IGhvcGVmdWxseSBhbGwgbWFpbnRhaW5lZCBjb21waWxlcnMgd2lsbCBzb29uIHByb3ZpZGUgdGhlIGRhdGEKKyAgICB0eXBlcyBgZmxvYXQgY29tcGxleCcgYW5kIGBkb3VibGUgY29tcGxleCcuICAqLworLSNpZiBfX0dOVUNfUFJFUkVRICgyLCA3KSAmJiAhX19HTlVDX1BSRVJFUSAoMiwgOTcpCisrI2lmIF9fR05VQ19QUkVSRVEoMiwgNykgJiYgIV9fR05VQ19QUkVSRVEoMiwgOTcpCisgIyBkZWZpbmUgX0NvbXBsZXggX19jb21wbGV4X18KKyAjZW5kaWYKKyAKK2RpZmYgLWR1ck4gdUNsaWJjLTAuOS4zMC5vcmlnL2luY2x1ZGUvZmVhdHVyZXMuaCB1Q2xpYmMtMC45LjMwL2luY2x1ZGUvZmVhdHVyZXMuaAorLS0tIHVDbGliYy0wLjkuMzAub3JpZy9pbmNsdWRlL2ZlYXR1cmVzLmgJMjAwOC0wOS0wNiAxODo0NTowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyB1Q2xpYmMtMC45LjMwL2luY2x1ZGUvZmVhdHVyZXMuaAkyMDA5LTAyLTA3IDA5OjU3OjU5LjAwMDAwMDAwMCArMDEwMAorQEAgLTE0Myw3ICsxNDMsNyBAQAorIAorIC8qIENvbnZlbmllbmNlIG1hY3JvcyB0byB0ZXN0IHRoZSB2ZXJzaW9ucyBvZiBnbGliYyBhbmQgZ2NjLgorICAgIFVzZSB0aGVtIGxpa2UgdGhpczoKKy0gICAjaWYgX19HTlVDX1BSRVJFUSAoMiw4KQorKyAgICNpZiBfX0dOVUNfUFJFUkVRKDIsOCkKKyAgICAuLi4gY29kZSByZXF1aXJpbmcgZ2NjIDIuOCBvciBsYXRlciAuLi4KKyAgICAjZW5kaWYKKyAgICBOb3RlIC0gdGhleSB3b24ndCB3b3JrIGZvciBnY2MxIG9yIGdsaWJjMSwgc2luY2UgdGhlIF9NSU5PUiBtYWNyb3MKK0BAIC0yOTcsNyArMjk3LDcgQEAKKyAvKiB1Q2xpYmMgZG9lcyBub3Qgc3VwcG9ydCBfRk9SVElGWV9TT1VSQ0UgKi8KKyAjdW5kZWYgX0ZPUlRJRllfU09VUkNFCisgI2lmIGRlZmluZWQgX0ZPUlRJRllfU09VUkNFICYmIF9GT1JUSUZZX1NPVVJDRSA+IDAgXAorLSAgICAmJiBfX0dOVUNfUFJFUkVRICg0LCAxKSAmJiBkZWZpbmVkIF9fT1BUSU1JWkVfXyAmJiBfX09QVElNSVpFX18gPiAwCisrICAgICYmIF9fR05VQ19QUkVSRVEoNCwgMSkgJiYgZGVmaW5lZCBfX09QVElNSVpFX18gJiYgX19PUFRJTUlaRV9fID4gMAorICMgaWYgX0ZPUlRJRllfU09VUkNFID4gMQorICMgIGRlZmluZSBfX1VTRV9GT1JUSUZZX0xFVkVMIDIKKyAjIGVsc2UKK0BAIC0zNjYsNyArMzY2LDcgQEAKKyAjZW5kaWYJLyogIUFTU0VNQkxFUiAqLworIAorIC8qIERlY2lkZSB3aGV0aGVyIHdlIGNhbiBkZWZpbmUgJ2V4dGVybiBpbmxpbmUnIGZ1bmN0aW9ucyBpbiBoZWFkZXJzLiAgKi8KKy0jaWYgX19HTlVDX1BSRVJFUSAoMiwgNykgJiYgZGVmaW5lZCBfX09QVElNSVpFX18gXAorKyNpZiBfX0dOVUNfUFJFUkVRKDIsIDcpICYmIGRlZmluZWQgX19PUFRJTUlaRV9fIFwKKyAgICAgJiYgIWRlZmluZWQgX19PUFRJTUlaRV9TSVpFX18gJiYgIWRlZmluZWQgX19OT19JTkxJTkVfXyBcCisgICAgICYmIChkZWZpbmVkIF9fZXh0ZXJuX2lubGluZSB8fCBkZWZpbmVkIF9fR05VQ19HTlVfSU5MSU5FX18pCisgIyBkZWZpbmUgX19VU0VfRVhURVJOX0lOTElORVMJMQorZGlmZiAtZHVyTiB1Q2xpYmMtMC45LjMwLm9yaWcvaW5jbHVkZS90Z21hdGguaCB1Q2xpYmMtMC45LjMwL2luY2x1ZGUvdGdtYXRoLmgKKy0tLSB1Q2xpYmMtMC45LjMwLm9yaWcvaW5jbHVkZS90Z21hdGguaAkyMDA4LTEwLTAzIDE2OjI0OjI4LjAwMDAwMDAwMCArMDIwMAorKysrIHVDbGliYy0wLjkuMzAvaW5jbHVkZS90Z21hdGguaAkyMDA5LTAyLTA3IDA5OjU3OjU5LjAwMDAwMDAwMCArMDEwMAorQEAgLTM0LDcgKzM0LDcgQEAKKyAgICBkbyBub3QgdHJ5IHRoaXMgZm9yIG5vdyBhbmQgaW5zdGVhZCBjb25jZW50cmF0ZSBvbmx5IG9uIEdOVSBDQy4gIE9uY2UKKyAgICB3ZSBoYXZlIG1vcmUgaW5mb3JtYXRpb24gc3VwcG9ydCBmb3Igb3RoZXIgY29tcGlsZXJzIG1pZ2h0IGZvbGxvdy4gICovCisgCistI2lmIF9fR05VQ19QUkVSRVEgKDIsIDcpCisrI2lmIF9fR05VQ19QUkVSRVEoMiwgNykKKyAKKyAjIGlmbmRlZiBfX1VDTElCQ19IQVNfTE9OR19ET1VCTEVfTUFUSF9fCisgIyAgZGVmaW5lIF9fdGdtbChmY3QpIGZjdApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAvMTMwLWFybS1mdHJ1bmNhdGU2NC5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLzEzMC1hcm0tZnRydW5jYXRlNjQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JkOGVmNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLzEzMC1hcm0tZnRydW5jYXRlNjQucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbSBHZW50b28uCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIHVDbGliYy0wLjkuMzAub3JpZy9saWJjL3N5c2RlcHMvbGludXgvYXJtL2JpdHMvdUNsaWJjX2FyY2hfZmVhdHVyZXMuaCB1Q2xpYmMtMC45LjMwL2xpYmMvc3lzZGVwcy9saW51eC9hcm0vYml0cy91Q2xpYmNfYXJjaF9mZWF0dXJlcy5oCistLS0gdUNsaWJjLTAuOS4zMC5vcmlnL2xpYmMvc3lzZGVwcy9saW51eC9hcm0vYml0cy91Q2xpYmNfYXJjaF9mZWF0dXJlcy5oCTIwMDgtMDktMjUgMTA6NTA6NTYuMDAwMDAwMDAwICswMjAwCisrKysgdUNsaWJjLTAuOS4zMC9saWJjL3N5c2RlcHMvbGludXgvYXJtL2JpdHMvdUNsaWJjX2FyY2hfZmVhdHVyZXMuaAkyMDA5LTAyLTA3IDA5OjU3OjU5LjAwMDAwMDAwMCArMDEwMAorQEAgLTM5LDQgKzM5LDggQEAKKyAvKiBkZWZpbmUgaWYgdGFyZ2V0IHN1cHBvcnRzIElFRUUgc2lnbmVkIHplcm8gZmxvYXRzICovCisgI2RlZmluZSBfX1VDTElCQ19IQVZFX1NJR05FRF9aRVJPX18KKyAKKysjaWZkZWYgX19BUk1fRUFCSV9fCisrIyBkZWZpbmUgX19VQ0xJQkNfVFJVTkNBVEU2NF9IQVNfNF9BUkdTX18KKysjZW5kaWYKKysKKyAjZW5kaWYgLyogX0JJVFNfVUNMSUJDX0FSQ0hfRkVBVFVSRVNfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAvMTQwLWdudTg5LWlubGluZS5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLzE0MC1nbnU4OS1pbmxpbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJmZTNlNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLzE0MC1nbnU4OS1pbmxpbmUucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAorT3JpZ2luYWwgcGF0Y2ggZnJvbSBHZW50b28uCisKKy09IEJFR0lOIG9yaWdpbmFsIGhlYWRlciA9LQorLT0gRU5EIG9yaWdpbmFsIGhlYWRlciA9LQorCitkaWZmIC1kdXJOIHVDbGliYy0wLjkuMzAub3JpZy9SdWxlcy5tYWsgdUNsaWJjLTAuOS4zMC9SdWxlcy5tYWsKKy0tLSB1Q2xpYmMtMC45LjMwLm9yaWcvUnVsZXMubWFrCTIwMDgtMTEtMTIgMTM6MjQ6MTYuMDAwMDAwMDAwICswMTAwCisrKysgdUNsaWJjLTAuOS4zMC9SdWxlcy5tYWsJMjAwOS0wMi0wNyAwOTo1Nzo1OS4wMDAwMDAwMDAgKzAxMDAKK0BAIC01MDIsNiArNTAyLDcgQEAKKyBlbmRpZgorIAorIENGTEFHUyArPSAkKGNhbGwgY2hlY2tfZ2NjLC1zdGQ9Z251OTksKQorK0NGTEFHUyArPSAkKGNhbGwgY2hlY2tfZ2NjLC1mZ251ODktaW5saW5lLCkKKyAKKyBMREZMQUdTX05PU1RSSVA6PSQoQ1BVX0xERkxBR1MteSkgLVdsLC1zaGFyZWQgXAorIAktV2wsLS13YXJuLWNvbW1vbiAtV2wsLS13YXJuLW9uY2UgLVdsLC16LGNvbWJyZWxvYwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAvMTUwLWdldGFkZHJpbmZvLXNlZ2ZhdWx0LWlwdjYtYW5kLWlwdjQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC8xNTAtZ2V0YWRkcmluZm8tc2VnZmF1bHQtaXB2Ni1hbmQtaXB2NC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGYyOTI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAvMTUwLWdldGFkZHJpbmZvLXNlZ2ZhdWx0LWlwdjYtYW5kLWlwdjQucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbTogVG9tb3lvc2hpIEFTQU5PIDxhc2FAbGluZW8uY28uanA+CitNZXNzYWdlIElEOiA8MjAwODEyMDgwNzM1MjIuMEFFRi4yMkMzNEI4Q0BsaW5lby5jby5qcD4KKworSGVsbG8sCisKK0kgaGF2ZSBTRUdWIGF0IGJ1c3lib3gncyB0ZWxuZXQgd2l0aCB1Q2xpYmMtMC45LjMwLgorSXQgc2VlbSB0aGUgY3VycmVudCB1Q2xpYmMtdHJ1bmsgaGFzIHRoZSBzYW1lIHByb2JsZW0uCisKK1RoYW5rcywKKy0tIFRvbQorCitkaWZmIC1ydSB1Q2xpYmMtMC45LjMwLm9yaWcvbGliYy9pbmV0L2dldGFkZHJpbmZvLmMgdUNsaWJjLTAuOS4zMC9saWJjL2luZXQvZ2V0YWRkcmluZm8uYworLS0tIHVDbGliYy0wLjkuMzAub3JpZy9saWJjL2luZXQvZ2V0YWRkcmluZm8uYwkyMDA4LTEwLTI4IDE3OjI1OjEwLjAwMDAwMDAwMCArMDEwMAorKysrIHVDbGliYy0wLjkuMzAvbGliYy9pbmV0L2dldGFkZHJpbmZvLmMJMjAwOS0wMi0yNiAxNDoyMDowNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xODYsNyArMTg2LDcgQEAKKyAJCQlyZXR1cm4gc2VlbjsKKyAJCX0KKyAKKy0JCWZvciAocnVucCA9IGlmYTsgcnVucCAhPSBOVUxMOyBydW5wID0gcnVucC0+aWZhX25leHQpCisrCQlmb3IgKHJ1bnAgPSBpZmE7IHJ1bnAgIT0gTlVMTDsgcnVucCA9IHJ1bnAtPmlmYV9uZXh0KSB7CisgI2lmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0lQVjRfXworIAkJCWlmIChydW5wLT5pZmFfYWRkci0+c2FfZmFtaWx5ID09IFBGX0lORVQpCisgCQkJCXNlZW4gfD0gU0VFTl9JUFY0OworQEAgLTE5NSw3ICsxOTUsNyBAQAorIAkJCWlmIChydW5wLT5pZmFfYWRkci0+c2FfZmFtaWx5ID09IFBGX0lORVQ2KQorIAkJCQlzZWVuIHw9IFNFRU5fSVBWNjsKKyAjZW5kaWYgLyogX19VQ0xJQkNfSEFTX0lQVjZfXyAqLworLQorKyAgICAgICAgICAgICAgICB9CisgCQlmcmVlaWZhZGRycyhpZmEpOworIAl9CisgI2Vsc2UKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMwLzIwMC1nZXRsaW5lLWFscmVhZHktZGVjbGFyZWQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC8yMDAtZ2V0bGluZS1hbHJlYWR5LWRlY2xhcmVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NzEwNGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC8yMDAtZ2V0bGluZS1hbHJlYWR5LWRlY2xhcmVkLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKKy0tLSB1Q2xpYmMtMC45LjMwLm9yaWcvZXh0cmEvc2NyaXB0cy91bmlmZGVmLmMJMjAwOC0wNC0yOCAwMToxMDowMC4wMDAwMDAwMDAgKzAyMDAKKysrKyB1Q2xpYmMtMC45LjMwL2V4dHJhL3NjcmlwdHMvdW5pZmRlZi5jCTIwMTEtMDgtMjEgMDk6NDI6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMjA2LDcgKzIwNiw3IEBACisgc3RhdGljIHZvaWQgICAgICAgICAgICAgZXJyb3IoY29uc3QgY2hhciAqKTsKKyBzdGF0aWMgaW50ICAgICAgICAgICAgICBmaW5kc3ltKGNvbnN0IGNoYXIgKik7Cisgc3RhdGljIHZvaWQgICAgICAgICAgICAgZmx1c2hsaW5lKGJvb2wpOworLXN0YXRpYyBMaW5ldHlwZSAgICAgICAgIGdldGxpbmUodm9pZCk7Cisrc3RhdGljIExpbmV0eXBlICAgICAgICAgZ2V0bGluZXR5cGUodm9pZCk7Cisgc3RhdGljIExpbmV0eXBlICAgICAgICAgaWZldmFsKGNvbnN0IGNoYXIgKiopOworIHN0YXRpYyB2b2lkICAgICAgICAgICAgIGlnbm9yZW9mZih2b2lkKTsKKyBzdGF0aWMgdm9pZCAgICAgICAgICAgICBpZ25vcmVvbih2b2lkKTsKK0BAIC01MTIsNyArNTEyLDcgQEAKKyAKKyAJZm9yICg7OykgeworIAkJbGluZW51bSsrOworLQkJbGluZXZhbCA9IGdldGxpbmUoKTsKKysJCWxpbmV2YWwgPSBnZXRsaW5ldHlwZSgpOworIAkJdHJhbnNfdGFibGVbaWZzdGF0ZVtkZXB0aF1dW2xpbmV2YWxdKCk7CisgCQlkZWJ1ZygicHJvY2VzcyAlcyAtPiAlcyBkZXB0aCAlZCIsCisgCQkgICAgbGluZXR5cGVfbmFtZVtsaW5ldmFsXSwKK0BAIC01MjYsNyArNTI2LDcgQEAKKyAgKiBoZWxwIGZyb20gc2tpcGNvbW1lbnQoKS4KKyAgKi8KKyBzdGF0aWMgTGluZXR5cGUKKy1nZXRsaW5lKHZvaWQpCisrZ2V0bGluZXR5cGUodm9pZCkKKyB7CisgCWNvbnN0IGNoYXIgKmNwOworIAlpbnQgY3Vyc3ltOwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAvMjEwLWZpbmQtcG9ydGFibGUucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMC8yMTAtZmluZC1wb3J0YWJsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmM1YWUzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzAvMjEwLWZpbmQtcG9ydGFibGUucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorLS0tIHVDbGliYy0wLjkuMzAub3JpZy9leHRyYS9zY3JpcHRzL2luc3RhbGxfaGVhZGVycy5zaAkyMDA4LTEwLTEwIDE1OjUwOjM4LjAwMDAwMDAwMCArMDIwMAorKysrIHVDbGliYy0wLjkuMzAvZXh0cmEvc2NyaXB0cy9pbnN0YWxsX2hlYWRlcnMuc2gJMjAxMS0wOC0yMSAwOTo0OTowMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMyw3ICszMyw3IEBACisgKAorICMgV2UgbXVzdCBjZCwgb3IgZWxzZSB3ZSdsbCBwcmVwZW5kICIkMSIgdG8gZmlsZW5hbWVzIQorIGNkICIkMSIgfHwgZXhpdCAxCistZmluZCAhIC1uYW1lICcuJyAtYSAhIC1wYXRoICcqLy4qJyB8IHNlZCAtZSAncy9eXC5cLy8vJyAtZSAnL15jb25maWdcLy9kJyBcCisrZmluZCAuICEgLW5hbWUgJy4nIC1hICEgLXBhdGggJyovLionIHwgc2VkIC1lICdzL15cLlwvLy8nIC1lICcvXmNvbmZpZ1wvL2QnIFwKKyAJLWUgJy9eY29uZmlnJC9kJworICkgfCBcCisgKApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzIvMTAwLWJ1bXAtdmVyc2lvbi10by0wLjkuMzIuMS1naXQucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMi8xMDAtYnVtcC12ZXJzaW9uLXRvLTAuOS4zMi4xLWdpdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmIzMDMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzIvMTAwLWJ1bXAtdmVyc2lvbi10by0wLjkuMzIuMS1naXQucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorY29tbWl0IDYwOGUxMzg1ODY5OTNkM2M1OWM2NWMyOTU4ZDlhOThjZjBkNGQxZWIKK0F1dGhvcjogQmVybmhhcmQgUmV1dG5lci1GaXNjaGVyIDxyZXAuZG90Lm5vcEBnbWFpbC5jb20+CitEYXRlOiAgIFdlZCBKdW4gOCAyMTo0Nzo0MiAyMDExICswMjAwCisKKyAgICBidW1wIHZlcnNpb24gdG8gMC45LjMyLjEtZ2l0CisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogQmVybmhhcmQgUmV1dG5lci1GaXNjaGVyIDxyZXAuZG90Lm5vcEBnbWFpbC5jb20+CisKK2RpZmYgLS1naXQgYS9SdWxlcy5tYWsgYi9SdWxlcy5tYWsKK2luZGV4IGZlMDZjMjQuLmEwMGRlZWEgMTAwNjQ0CistLS0gYS9SdWxlcy5tYWsKKysrKyBiL1J1bGVzLm1haworQEAgLTEwNiw3ICsxMDYsNyBAQCBleHBvcnQgUlVOVElNRV9QUkVGSVggREVWRUxfUFJFRklYIEtFUk5FTF9IRUFERVJTIE1VTFRJTElCX0RJUgorIE1BSk9SX1ZFUlNJT04gOj0gMAorIE1JTk9SX1ZFUlNJT04gOj0gOQorIFNVQkxFVkVMICAgICAgOj0gMzIKKy1FWFRSQVZFUlNJT04gIDo9CisrRVhUUkFWRVJTSU9OICA6PS4xLWdpdAorIFZFUlNJT04gICAgICAgOj0gJChNQUpPUl9WRVJTSU9OKS4kKE1JTk9SX1ZFUlNJT04pLiQoU1VCTEVWRUwpCisgQUJJX1ZFUlNJT04gICA6PSAkKE1BSk9SX1ZFUlNJT04pCisgaWZuZXEgKCQoRVhUUkFWRVJTSU9OKSwpCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMi8xMTAtbnB0bC1NYWtlZmlsZS5pbi1GaXgtdGhlLWJ1aWxkLWJyZWFrLWNhdXNlZC1ieS1VQ0xJQkNfQ1RPUl9EVE9SLWVuYWJsaW5nLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzIvMTEwLW5wdGwtTWFrZWZpbGUuaW4tRml4LXRoZS1idWlsZC1icmVhay1jYXVzZWQtYnktVUNMSUJDX0NUT1JfRFRPUi1lbmFibGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGU4NDExCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzIvMTEwLW5wdGwtTWFrZWZpbGUuaW4tRml4LXRoZS1idWlsZC1icmVhay1jYXVzZWQtYnktVUNMSUJDX0NUT1JfRFRPUi1lbmFibGluZy5wYXRjaApAQCAtMCwwICsxLDI4IEBACitjb21taXQgZmM2NDNmNzdhM2FiYzg3NDM2MjA0NDVmNDdiMWJhZGU5ODYyZDQ1YQorQXV0aG9yOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogICBGcmkgSnVuIDEwIDEzOjA1OjM0IDIwMTEgLTA3MDAKKworICAgIG5wdGwvTWFrZWZpbGUuaW46IEZpeCB0aGUgYnVpbGQgYnJlYWsgY2F1c2VkIGJ5IFVDTElCQ19DVE9SX0RUT1IgZW5hYmxpbmcKKyAgICAKKyAgICBFeHRyYSAvIHNvbWVob3cgZG9lcyBub3QgbWF0Y2ggdGhlIHRhcmdldCBhbmQgY29tcGxhaW5zIHRoYXQKKyAgICAkKHRvcF9idWlsZGRpcilsaWJwdGhyZWFkL25wdGwvc3lzZGVwcy9wdGhyZWFkL2NydGkubyBoYXMgbm8gcnVsZXMgdG8KKyAgICBidWlsZAorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisgICAgU2lnbmVkLW9mZi1ieTogQmVybmhhcmQgUmV1dG5lci1GaXNjaGVyIDxyZXAuZG90Lm5vcEBnbWFpbC5jb20+CisKK2RpZmYgLS1naXQgYS9saWJwdGhyZWFkL25wdGwvTWFrZWZpbGUuaW4gYi9saWJwdGhyZWFkL25wdGwvTWFrZWZpbGUuaW4KK2luZGV4IDcwNjE2YTEuLjkyZDcyYTYgMTAwNjQ0CistLS0gYS9saWJwdGhyZWFkL25wdGwvTWFrZWZpbGUuaW4KKysrKyBiL2xpYnB0aHJlYWQvbnB0bC9NYWtlZmlsZS5pbgorQEAgLTY0LDggKzY0LDggQEAgZW5kaWYKKyBsaWJydC1zby15ICs9ICQobGlicnRfT0JKUzoubz0ub1MpICQobGlicnQtcHQtc2hhcmVkLW9ubHktcm91dGluZXMteToubz0ub1MpCisgCisgaWZlcSAoJChVQ0xJQkNfQ1RPUl9EVE9SKSx5KQorLVNUQVJUX0ZJTEUtbGlicHRocmVhZC5zbyA6PSAkKHRvcF9idWlsZGRpcikvbGlicHRocmVhZC9ucHRsL3N5c2RlcHMvcHRocmVhZC9jcnRpLm8KKy1FTkRfRklMRS1saWJwdGhyZWFkLnNvIDo9ICQodG9wX2J1aWxkZGlyKS9saWJwdGhyZWFkL25wdGwvc3lzZGVwcy9wdGhyZWFkL2NydG4ubworK1NUQVJUX0ZJTEUtbGlicHRocmVhZC5zbyA6PSAkKHRvcF9idWlsZGRpcilsaWJwdGhyZWFkL25wdGwvc3lzZGVwcy9wdGhyZWFkL2NydGkubworK0VORF9GSUxFLWxpYnB0aHJlYWQuc28gOj0gJCh0b3BfYnVpbGRkaXIpbGlicHRocmVhZC9ucHRsL3N5c2RlcHMvcHRocmVhZC9jcnRuLm8KKyBMREZMQUdTLWxpYnB0aHJlYWQuc28gKz0gLW5vc3RhcnRmaWxlcworICQodG9wX2J1aWxkZGlyKWxpYi9saWJwdGhyZWFkLnNvOiB8ICQoU1RBUlRfRklMRS1saWJwdGhyZWFkLnNvKSAkKEVORF9GSUxFLWxpYnB0aHJlYWQuc28pCisgZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMyLzEyMC1jdG9yLWR0b3ItbnB0bC1GaXgtaW5pdC1hbmQtZmluaS1mdW5jdGlvbi1jb21waWxhdGlvbi5wYXRjaCBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMyLzEyMC1jdG9yLWR0b3ItbnB0bC1GaXgtaW5pdC1hbmQtZmluaS1mdW5jdGlvbi1jb21waWxhdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDY2MTBiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzIvMTIwLWN0b3ItZHRvci1ucHRsLUZpeC1pbml0LWFuZC1maW5pLWZ1bmN0aW9uLWNvbXBpbGF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMTgyIEBACitjb21taXQgZjllMzExZDExYzM3NGU2ODczNmM3NDFlZGUxODQ1YmRjODA5MTYyNworQXV0aG9yOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogICBNb24gSnVuIDEzIDE2OjMwOjU1IDIwMTEgLTA3MDAKKworICAgIGN0b3IvZHRvciBucHRsOiBGaXggaW5pdCBhbmQgZmluaSBmdW5jdGlvbiBjb21waWxhdGlvbgorICAgIAorICAgIFdlIG5lZWQgdG8gZGVmaW5lIHRoZSBydWxlcyBmb3IgLlMgZmlsZXMgc28gaXQKKyAgICBnZXRzIHRoZSBpbmNsdWRlIHBhdGhzIHNvbWUgYXJjaGl0ZWN0dXJlcyBsaWtlIG1pcHMKKyAgICBpbmNsdWRlIGhlYWRlcnMKKyAgICAKKyAgICBTb21lIGFyY2hpdGVjdHVyZXMgZS5nLiBTSCBoYXZlIHRoZWlyIG93biB2ZXJzaW9uCisgICAgb2YgcHQtaW5pdGZpbmkuYyBzbyBsb29rIGZvciB0aGF0IGZpcnN0IGJlZm9yZSByZXNvcnRpbmcKKyAgICB0byBnZW5lcmljIHZlcnNpb24gb2YgcHQtaW5pdGZpbmkuYworICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisgICAgU2lnbmVkLW9mZi1ieTogQmVybmhhcmQgUmV1dG5lci1GaXNjaGVyIDxyZXAuZG90Lm5vcEBnbWFpbC5jb20+CisKK2RpZmYgLS1naXQgYS9saWJjL3N5c2RlcHMvbGludXgvbWlwcy9jcnRuLlMgYi9saWJjL3N5c2RlcHMvbGludXgvbWlwcy9jcnRuLlMKK2luZGV4IGNlZGQ1OTMuLmYzNzU2YTIgMTAwNjQ0CistLS0gYS9saWJjL3N5c2RlcHMvbGludXgvbWlwcy9jcnRuLlMKKysrKyBiL2xpYmMvc3lzZGVwcy9saW51eC9taXBzL2NydG4uUworQEAgLTEwLDcgKzEwLDYgQEAKKyAjTk9fQVBQCisgCS5hbGlnbgkyCisgCS5nbG9ibAlfaW5pdAorLQkuZW50CV9pbml0CisgCS50eXBlCV9pbml0LCBAZnVuY3Rpb24KKyAjTk9fQVBQCisgCWx3CSQzMSwyOCgkc3ApCitAQCAtMjIsMTQgKzIxLDEyIEBACisgCS5zZXQJbWFjcm8KKyAJLnNldAlyZW9yZGVyCisgCistCS5lbmQJX2luaXQKKyAjQVBQCisgCQorIAkuc2VjdGlvbiAuZmluaQorICNOT19BUFAKKyAJLmFsaWduCTIKKyAJLmdsb2JsCV9maW5pCistCS5lbnQJX2ZpbmkKKyAJLnR5cGUJX2ZpbmksIEBmdW5jdGlvbgorICNOT19BUFAKKyAJbHcJJDMxLDI4KCRzcCkKK0BAIC00MSw3ICszOCw2IEBACisgCS5zZXQJbWFjcm8KKyAJLnNldAlyZW9yZGVyCisgCistCS5lbmQJX2ZpbmkKKyAjQVBQCisgCQorIAkuaWRlbnQJIkdDQzogKEdOVSkgMy4zLjIiCitAQCAtNTQsMTAgKzUwLDggQEAKKyAJCisgCS5zZWN0aW9uIC5pbml0CisgI05PX0FQUAorLQkuYWxpZ24JMgorIAkuYWxpZ24JMworIAkuZ2xvYmwJX2luaXQKKy0JLmVudAlfaW5pdAorIAkudHlwZQlfaW5pdCwgQGZ1bmN0aW9uCisgI05PX0FQUAorIAlsZAkkMzEsOCgkc3ApCitAQCAtNjgsMTYgKzYyLDEyIEBACisgCWFkZGl1CSRzcCwkc3AsMTYKKyAJLnNldAltYWNybworIAkuc2V0CXJlb3JkZXIKKy0KKy0JLmVuZAlfaW5pdAorICNBUFAKKyAJCisgCS5zZWN0aW9uIC5maW5pCisgI05PX0FQUAorLQkuYWxpZ24JMgorIAkuYWxpZ24JMworIAkuZ2xvYmwJX2ZpbmkKKy0JLmVudAlfZmluaQorIAkudHlwZQlfZmluaSwgQGZ1bmN0aW9uCisgI05PX0FQUAorIAlsZAkkMzEsOCgkc3ApCitAQCAtODksNyArNzksNiBAQAorIAkuc2V0CW1hY3JvCisgCS5zZXQJcmVvcmRlcgorIAorLQkuZW5kCV9maW5pCisgI0FQUAorIAkKKyAJLmlkZW50CSJHQ0M6IChHTlUpIDMuNC4zIgorQEAgLTEwNSw3ICs5NCw2IEBACisgI05PX0FQUAorIAkuYWxpZ24JMgorIAkuZ2xvYmwJX2luaXQKKy0JLmVudAlfaW5pdAorIAkudHlwZQlfaW5pdCwgQGZ1bmN0aW9uCisgI05PX0FQUAorIAlsZAkkMzEsMjQoJHNwKQorQEAgLTExOCwxNCArMTA2LDEyIEBACisgCS5zZXQJbWFjcm8KKyAJLnNldAlyZW9yZGVyCisgCistCS5lbmQJX2luaXQKKyAjQVBQCisgCQorIAkuc2VjdGlvbiAuZmluaQorICNOT19BUFAKKyAJLmFsaWduCTIKKyAJLmdsb2JsCV9maW5pCistCS5lbnQJX2ZpbmkKKyAJLnR5cGUJX2ZpbmksIEBmdW5jdGlvbgorICNOT19BUFAKKyAJbGQJJDMxLDI0KCRzcCkKK0BAIC0xMzgsNyArMTI0LDYgQEAKKyAJLnNldAltYWNybworIAkuc2V0CXJlb3JkZXIKKyAKKy0JLmVuZAlfZmluaQorICNBUFAKKyAJCisgCS5pZGVudAkiR0NDOiAoR05VKSAzLjMuMiIKK2RpZmYgLS1naXQgYS9saWJwdGhyZWFkL25wdGwvTWFrZWZpbGUuaW4gYi9saWJwdGhyZWFkL25wdGwvTWFrZWZpbGUuaW4KK2luZGV4IDkyZDcyYTYuLjg0OWJkNTkgMTAwNjQ0CistLS0gYS9saWJwdGhyZWFkL25wdGwvTWFrZWZpbGUuaW4KKysrKyBiL2xpYnB0aHJlYWQvbnB0bC9NYWtlZmlsZS5pbgorQEAgLTY0LDggKzY0LDggQEAgZW5kaWYKKyBsaWJydC1zby15ICs9ICQobGlicnRfT0JKUzoubz0ub1MpICQobGlicnQtcHQtc2hhcmVkLW9ubHktcm91dGluZXMteToubz0ub1MpCisgCisgaWZlcSAoJChVQ0xJQkNfQ1RPUl9EVE9SKSx5KQorLVNUQVJUX0ZJTEUtbGlicHRocmVhZC5zbyA6PSAkKHRvcF9idWlsZGRpcilsaWJwdGhyZWFkL25wdGwvc3lzZGVwcy9wdGhyZWFkL2NydGkubworLUVORF9GSUxFLWxpYnB0aHJlYWQuc28gOj0gJCh0b3BfYnVpbGRkaXIpbGlicHRocmVhZC9ucHRsL3N5c2RlcHMvcHRocmVhZC9jcnRuLm8KKytTVEFSVF9GSUxFLWxpYnB0aHJlYWQuc28gOj0gJCh0b3BfYnVpbGRkaXIpbGlicHRocmVhZC9ucHRsL3N5c2RlcHMvcHRocmVhZC9wdC1jcnRpLm8KKytFTkRfRklMRS1saWJwdGhyZWFkLnNvIDo9ICQodG9wX2J1aWxkZGlyKWxpYnB0aHJlYWQvbnB0bC9zeXNkZXBzL3B0aHJlYWQvcHQtY3J0bi5vCisgTERGTEFHUy1saWJwdGhyZWFkLnNvICs9IC1ub3N0YXJ0ZmlsZXMKKyAkKHRvcF9idWlsZGRpcilsaWIvbGlicHRocmVhZC5zbzogfCAkKFNUQVJUX0ZJTEUtbGlicHRocmVhZC5zbykgJChFTkRfRklMRS1saWJwdGhyZWFkLnNvKQorIGVuZGlmCitkaWZmIC0tZ2l0IGEvbGlicHRocmVhZC9ucHRsL3N5c2RlcHMvcHRocmVhZC9NYWtlZmlsZS5pbiBiL2xpYnB0aHJlYWQvbnB0bC9zeXNkZXBzL3B0aHJlYWQvTWFrZWZpbGUuaW4KK2luZGV4IGQ5M2IzYTUuLjM5OGVhZWEgMTAwNjQ0CistLS0gYS9saWJwdGhyZWFkL25wdGwvc3lzZGVwcy9wdGhyZWFkL01ha2VmaWxlLmluCisrKysgYi9saWJwdGhyZWFkL25wdGwvc3lzZGVwcy9wdGhyZWFkL01ha2VmaWxlLmluCitAQCAtNzMsMjMgKzczLDM3IEBAIENGTEFHUy1wdC1pbml0ZmluaS5jID0gLVMgLWcwICQoUElDRkxBRykgLWZuby1pbmxpbmUtZnVuY3Rpb25zCVwKKyAJCQktZmluaGliaXQtc2l6ZS1kaXJlY3RpdmUJCQlcCisgCQkJLWZuby1hc3luY2hyb25vdXMtdW53aW5kLXRhYmxlcyAtZm5vLXVud2luZC10YWJsZXMgXAorIAkJCSQocGF0c3Vic3QgLWYlLC1mbm8tJSwkKGNhbGwgY2hlY2tfZ2NjLC1mZXhjZXB0aW9ucywpKQorLUFTRkxBR1MtY3J0aS5TID0gLWcwCistQVNGTEFHUy1jcnRuLlMgPSAtZzAKKyAKKy0kKGxpYnB0aHJlYWRfcHRocmVhZF9PVVQpL3B0LWluaXRmaW5pLnM6ICQobGlicHRocmVhZF9wdGhyZWFkX0RJUikvcHQtaW5pdGZpbmkuYworKyNBU0ZMQUdTICs9ICQoUElDRkxBRykgLUkkKHRvcF9zcmNkaXIpaW5jbHVkZSAtSSQodG9wX3NyY2RpcilsaWJjL3N5c2RlcHMvbGludXgvJChUQVJHRVRfQVJDSCkKKytpZm5lcSAoJCh3aWxkY2FyZCAkKGxpYnB0aHJlYWRfRElSKS9zeXNkZXBzL2xpbnV4LyQoVEFSR0VUX0FSQ0gpL3B0LWluaXRmaW5pLmMpLCkKKytQVEhSRUFEX0lOSVRGSU5JIDo9ICQobGlicHRocmVhZF9ESVIpL3N5c2RlcHMvbGludXgvJChUQVJHRVRfQVJDSCkvcHQtaW5pdGZpbmkuYworK2Vsc2UKKytQVEhSRUFEX0lOSVRGSU5JIDo9ICQobGlicHRocmVhZF9wdGhyZWFkX0RJUikvcHQtaW5pdGZpbmkuYworK2VuZGlmCisrCisrQVNGTEFHUy1wdC1jcnRpLlMgPSAgJChQSUNGTEFHKQorK0FTRkxBR1MtcHQtY3J0bi5TID0gICQoUElDRkxBRykKKysKKyskKGxpYnB0aHJlYWRfcHRocmVhZF9PVVQpL3B0LWNydGkubzogJChsaWJwdGhyZWFkX3B0aHJlYWRfT1VUKS9wdC1jcnRpLlMKKysJJChjb21waWxlLlMpCisrCisrJChsaWJwdGhyZWFkX3B0aHJlYWRfT1VUKS9wdC1jcnRuLm86ICQobGlicHRocmVhZF9wdGhyZWFkX09VVCkvcHQtY3J0bi5TCisrCSQoY29tcGlsZS5TKQorKworKyQobGlicHRocmVhZF9wdGhyZWFkX09VVCkvcHQtaW5pdGZpbmkuczogJChQVEhSRUFEX0lOSVRGSU5JKQorIAkkKGNvbXBpbGUuYykKKy0kKGxpYnB0aHJlYWRfcHRocmVhZF9PVVQpL2RlZnMuaDogJChsaWJwdGhyZWFkX3B0aHJlYWRfRElSKS9wdC1pbml0ZmluaS5jCisrJChsaWJwdGhyZWFkX3B0aHJlYWRfT1VUKS9kZWZzLmg6ICQoUFRIUkVBRF9JTklURklOSSkKKyAJJChkb19zZWQpIC1uIC1lICcvQFRFU1RTX0JFR0lOLywvQFRFU1RTX0VORC9wJyAkPCB8IFwKKyAJCSQoQVdLKSAtZiAkKHRvcF9zcmNkaXIpZXh0cmEvc2NyaXB0cy9kZWZzLmF3ayA+ICRALnRtcAorIAkkKFEpbXYgJEAudG1wICRACisgCistJChsaWJwdGhyZWFkX3B0aHJlYWRfT1VUKS9jcnRpLlM6ICQobGlicHRocmVhZF9wdGhyZWFkX09VVCkvcHQtaW5pdGZpbmkucyAkKGxpYnB0aHJlYWRfcHRocmVhZF9PVVQpL2RlZnMuaAorKyQobGlicHRocmVhZF9wdGhyZWFkX09VVCkvcHQtY3J0aS5TOiAkKGxpYnB0aHJlYWRfcHRocmVhZF9PVVQpL3B0LWluaXRmaW5pLnMgJChsaWJwdGhyZWFkX3B0aHJlYWRfT1VUKS9kZWZzLmgKKyAJJChkb19zZWQpIC1uIC1lICcvWyAJXSpcLmZpbGUvZCcgXAorIAkJLWUgJzEsL0BIRUFERVJfRU5EUy9wJyBcCisgCQktZSAnL0BfLipfUFJPTE9HX0JFR0lOUy8sL0BfLipfUFJPTE9HX0VORFMvcCcgXAorIAkJLWUgJy9AVFJBSUxFUl9CRUdJTlMvLCQkcCcgJDwgPiAkQC50bXAKKyAJJChRKW12ICRALnRtcCAkQAorLSQobGlicHRocmVhZF9wdGhyZWFkX09VVCkvY3J0bi5TOiAkKGxpYnB0aHJlYWRfcHRocmVhZF9PVVQpL3B0LWluaXRmaW5pLnMgJChsaWJwdGhyZWFkX3B0aHJlYWRfT1VUKS9kZWZzLmgKKyskKGxpYnB0aHJlYWRfcHRocmVhZF9PVVQpL3B0LWNydG4uUzogJChsaWJwdGhyZWFkX3B0aHJlYWRfT1VUKS9wdC1pbml0ZmluaS5zICQobGlicHRocmVhZF9wdGhyZWFkX09VVCkvZGVmcy5oCisgCSQoZG9fc2VkKSAtbiAtZSAnL1sgCV0qXC5maWxlL2QnIFwKKyAJCS1lICcxLC9ASEVBREVSX0VORFMvcCcgXAorIAkJLWUgJy9AXy4qX0VQSUxPR19CRUdJTlMvLC9AXy4qX0VQSUxPR19FTkRTL3AnIFwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMyLzEzMC1ucHRsLXB0aHJlYWQtQ29ycmVjdC1wYXRoLWZvci1tYWNoaW5lLXNwZWNpZmljLXB0LWluaXRmaW5pLmMucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMi8xMzAtbnB0bC1wdGhyZWFkLUNvcnJlY3QtcGF0aC1mb3ItbWFjaGluZS1zcGVjaWZpYy1wdC1pbml0ZmluaS5jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYjM1YzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMi8xMzAtbnB0bC1wdGhyZWFkLUNvcnJlY3QtcGF0aC1mb3ItbWFjaGluZS1zcGVjaWZpYy1wdC1pbml0ZmluaS5jLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK2NvbW1pdCBlYmU2YzM4ZDdlNjBlOGE0M2Q4YjkyNmMxN2E1NjFhNWEzZTA2YTIyCitBdXRob3I6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiAgIE1vbiBKdW4gMTMgMTc6MTM6NTIgMjAxMSAtMDcwMAorCisgICAgbnB0bC9wdGhyZWFkOiBDb3JyZWN0IHBhdGggZm9yIG1hY2hpbmUgc3BlY2lmaWMgcHQtaW5pdGZpbmkuYworICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisgICAgU2lnbmVkLW9mZi1ieTogQmVybmhhcmQgUmV1dG5lci1GaXNjaGVyIDxyZXAuZG90Lm5vcEBnbWFpbC5jb20+CisKK2RpZmYgLS1naXQgYS9saWJwdGhyZWFkL25wdGwvc3lzZGVwcy9wdGhyZWFkL01ha2VmaWxlLmluIGIvbGlicHRocmVhZC9ucHRsL3N5c2RlcHMvcHRocmVhZC9NYWtlZmlsZS5pbgoraW5kZXggMzk4ZWFlYS4uY2E4NDY0MiAxMDA2NDQKKy0tLSBhL2xpYnB0aHJlYWQvbnB0bC9zeXNkZXBzL3B0aHJlYWQvTWFrZWZpbGUuaW4KKysrKyBiL2xpYnB0aHJlYWQvbnB0bC9zeXNkZXBzL3B0aHJlYWQvTWFrZWZpbGUuaW4KK0BAIC03NSw4ICs3NSw4IEBAIENGTEFHUy1wdC1pbml0ZmluaS5jID0gLVMgLWcwICQoUElDRkxBRykgLWZuby1pbmxpbmUtZnVuY3Rpb25zCVwKKyAJCQkkKHBhdHN1YnN0IC1mJSwtZm5vLSUsJChjYWxsIGNoZWNrX2djYywtZmV4Y2VwdGlvbnMsKSkKKyAKKyAjQVNGTEFHUyArPSAkKFBJQ0ZMQUcpIC1JJCh0b3Bfc3JjZGlyKWluY2x1ZGUgLUkkKHRvcF9zcmNkaXIpbGliYy9zeXNkZXBzL2xpbnV4LyQoVEFSR0VUX0FSQ0gpCistaWZuZXEgKCQod2lsZGNhcmQgJChsaWJwdGhyZWFkX0RJUikvc3lzZGVwcy9saW51eC8kKFRBUkdFVF9BUkNIKS9wdC1pbml0ZmluaS5jKSwpCistUFRIUkVBRF9JTklURklOSSA6PSAkKGxpYnB0aHJlYWRfRElSKS9zeXNkZXBzL2xpbnV4LyQoVEFSR0VUX0FSQ0gpL3B0LWluaXRmaW5pLmMKKytpZm5lcSAoJCh3aWxkY2FyZCAkKGxpYnB0aHJlYWRfcHRocmVhZF9ESVIpLy4uL3VuaXgvc3lzdi9saW51eC8kKFRBUkdFVF9BUkNIKS9wdC1pbml0ZmluaS5jKSwpCisrUFRIUkVBRF9JTklURklOSSA6PSAkKGxpYnB0aHJlYWRfcHRocmVhZF9ESVIpLy4uL3VuaXgvc3lzdi9saW51eC8kKFRBUkdFVF9BUkNIKS9wdC1pbml0ZmluaS5jCisgZWxzZQorIFBUSFJFQURfSU5JVEZJTkkgOj0gJChsaWJwdGhyZWFkX3B0aHJlYWRfRElSKS9wdC1pbml0ZmluaS5jCisgZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMyLzE0MC1BUk0tcmVvcmRlci1Vc2UtQlgtb3B0aW9uLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzIvMTQwLUFSTS1yZW9yZGVyLVVzZS1CWC1vcHRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMyMWE0OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMyLzE0MC1BUk0tcmVvcmRlci1Vc2UtQlgtb3B0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK2NvbW1pdCBkNjRiOTFhNmQ0ZmExYTNhYzFkMDFmYTc1OTNkNjdjNWU1ZWQ1MTAxCitBdXRob3I6IFlhbm4gRS4gTU9SSU4gPHlhbm4ubW9yaW4uMTk5OEBhbmNpZW5zLmVuaWIuZnI+CitEYXRlOiAgIFN1biBKYW4gOSAwMTo0NTowNCAyMDExICswMTAwCisKKyAgICBBUk06IHJlb3JkZXIgIlVzZSBCWCIgb3B0aW9uCisgICAgCisgICAgIlVzZSBCWCIgaXMgbm90IGF2YWlsYWJsZSBvbiBhbGwgQ1BVcywgc28gdGhlIG9wdGlvbiBkZXBlbmRzIG9uCisgICAgYSBjb3JyZWN0IENQVSB0byBiZSBjaG9zZW4gLiBJdCBpcyB3ZWlyZCB0aGF0IGUgQlgiIHRoZW4gYXBwZWFycworICAgIF9hYm92ZV8gdGhlIENQVSBzZWxlY3Rpb24sIG5vdCBiZWxvdy4KKyAgICAKKyAgICBNb3ZlIHRoZSAiVXNlIEJYIiBhZnRlciB0aGUgQ1BVIHNlbGVjdGlvbi4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiAiWWFubiBFLiBNT1JJTiIgPHlhbm4ubW9yaW4uMTk5OEBhbmNpZW5zLmVuaWIuZnI+CisgICAgQ2M6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisgICAgQ2M6IEJlcm5oYXJkIFJldXRuZXItRmlzY2hlciA8cmVwLmRvdC5ub3BAZ21haWwuY29tPgorICAgIENjOiBDYXJtZWxvIEFNT1JPU08gPGNhcm1lbG8uYW1vcm9zb0BzdC5jb20+CisgICAgU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKyAgICBTaWduZWQtb2ZmLWJ5OiBCZXJuaGFyZCBSZXV0bmVyLUZpc2NoZXIgPHJlcC5kb3Qubm9wQGdtYWlsLmNvbT4KKworZGlmZiAtLWdpdCBhL2V4dHJhL0NvbmZpZ3MvQ29uZmlnLmFybSBiL2V4dHJhL0NvbmZpZ3MvQ29uZmlnLmFybQoraW5kZXggZWIyN2EzMy4uZGQ2M2I4MCAxMDA2NDQKKy0tLSBhL2V4dHJhL0NvbmZpZ3MvQ29uZmlnLmFybQorKysrIGIvZXh0cmEvQ29uZmlncy9Db25maWcuYXJtCitAQCAtMzAsMTMgKzMwLDYgQEAgY29uZmlnIENPTkZJR19BUk1fRUFCSQorIAorIGVuZGNob2ljZQorIAorLWNvbmZpZyBVU0VfQlgKKy0JYm9vbCAiVXNlIEJYIGluIGZ1bmN0aW9uIHJldHVybiIKKy0JZGVmYXVsdCB5CistCWRlcGVuZHMgb24gIUNPTkZJR19HRU5FUklDX0FSTSAmJiAhQ09ORklHX0FSTTYxMCAmJiAhQ09ORklHX0FSTTcxMAorLQloZWxwCistCSAgVXNlIEJYIGluc3RydWN0aW9uIGZvciBUSFVNQiBhd2FyZSBhcmNoaXRlY3R1cmVzLgorLQorIGNob2ljZQorIAlwcm9tcHQgIlRhcmdldCBQcm9jZXNzb3IgVHlwZSIKKyAJZGVmYXVsdCBDT05GSUdfR0VORVJJQ19BUk0KK0BAIC0xMzEsMyArMTI0LDEwIEBAIGNvbmZpZyBDT05GSUdfQVJNX0lXTU1YVAorIAlzZWxlY3QgQVJDSF9IQVNfTU1VCisgCisgZW5kY2hvaWNlCisrCisrY29uZmlnIFVTRV9CWAorKwlib29sICJVc2UgQlggaW4gZnVuY3Rpb24gcmV0dXJuIgorKwlkZWZhdWx0IHkKKysJZGVwZW5kcyBvbiAhQ09ORklHX0dFTkVSSUNfQVJNICYmICFDT05GSUdfQVJNNjEwICYmICFDT05GSUdfQVJNNzEwCisrCWhlbHAKKysJICBVc2UgQlggaW5zdHJ1Y3Rpb24gZm9yIFRIVU1CIGF3YXJlIGFyY2hpdGVjdHVyZXMuCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMi8xNTAtUnVsZXMubWFrLVJlYXJyYW5nZS1hcHBlbmRpbmctVUNMSUJDX0VYVFJBX0NGTEFHUy10by1DRkxBR1MucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMi8xNTAtUnVsZXMubWFrLVJlYXJyYW5nZS1hcHBlbmRpbmctVUNMSUJDX0VYVFJBX0NGTEFHUy10by1DRkxBR1MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFlNDgwNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMyLzE1MC1SdWxlcy5tYWstUmVhcnJhbmdlLWFwcGVuZGluZy1VQ0xJQkNfRVhUUkFfQ0ZMQUdTLXRvLUNGTEFHUy5wYXRjaApAQCAtMCwwICsxLDM4IEBACitjb21taXQgNDY0MmY0ZWVhZDA3MDgwYmY0NmI2ZDY3Yjg3M2QzMDNlZGE5ZmI0OAorQXV0aG9yOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogICBTYXQgSnVuIDExIDAwOjE1OjAyIDIwMTEgLTA3MDAKKworICAgIFJ1bGVzLm1hazogUmVhcnJhbmdlIGFwcGVuZGluZyBVQ0xJQkNfRVhUUkFfQ0ZMQUdTIHRvIENGTEFHUworICAgIAorICAgIFVDTElCQ19FWFRSQV9DRkxBR1MgaXMgY3VycmVudGx5IGFkZGVkIGJlZm9yZSB0aGUgT1BUSU1JWkFUSU9OIGZsYWdzCisgICAgYW5kIE9QVElNSVpBVElPTiBpcyBjaG9zZW4gdG8gYmUgT3MgYnkgZGVmYXVsdC4gQnV0IGluIE9FIHdlIHBhc3MgdGhlIG9wdGltaXNhdGlvbgorICAgIGZsYWdzIHRocm91Z2ggVUNMSUJDX0VYVFJBX0NGTEFHUyBidXQgdGhleSBhcmUgbm90IGVmZmVjdGl2ZSBzaW5jZSAtT3MgaXMKKyAgICBzcGVjaWZpZWQgYXQgbGFzdC4gU28gd2UgbmVlZCB0byBjaGFuZ2UgdGhlIG9yZGVyIG9mIHRoZXNlIG9wdGlvbiBmbGFncworICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisgICAgU2lnbmVkLW9mZi1ieTogQmVybmhhcmQgUmV1dG5lci1GaXNjaGVyIDxyZXAuZG90Lm5vcEBnbWFpbC5jb20+CisKK2RpZmYgLS1naXQgYS9SdWxlcy5tYWsgYi9SdWxlcy5tYWsKK2luZGV4IGEwMGRlZWEuLjZiOGY1YjIgMTAwNjQ0CistLS0gYS9SdWxlcy5tYWsKKysrKyBiL1J1bGVzLm1haworQEAgLTU4NSw5ICs1ODUsNiBAQCBDRkxBR1MgOj0gLWluY2x1ZGUgJCh0b3Bfc3JjZGlyKWluY2x1ZGUvbGliYy1zeW1ib2xzLmggXAorIAktbm9zdGRpbmMgLUkkKHRvcF9idWlsZGRpcilpbmNsdWRlIC1JJCh0b3Bfc3JjZGlyKWluY2x1ZGUgLUkuIFwKKyAJLUkkKHRvcF9zcmNkaXIpbGliYy9zeXNkZXBzL2xpbnV4IFwKKyAJLUkkKHRvcF9zcmNkaXIpbGliYy9zeXNkZXBzL2xpbnV4LyQoVEFSR0VUX0FSQ0gpCistaWZuZXEgKCQoc3RyaXAgJChVQ0xJQkNfRVhUUkFfQ0ZMQUdTKSksIiIpCistQ0ZMQUdTICs9ICQoY2FsbCBxc3RyaXAsJChVQ0xJQkNfRVhUUkFfQ0ZMQUdTKSkKKy1lbmRpZgorIAorICMgV2UgbmVlZCB0aGlzIHRvIGJlIGNoZWNrZWQgd2l0aGluIGxpYmMtc3ltYm9scy5oCisgaWZuZXEgKCQoSEFWRV9TSEFSRUQpLHkpCitAQCAtNjMzLDYgKzYzMCw5IEBAIExERkxBR1MgKz0gLVdsLC1zCisgZWxzZQorIFNUUklQVE9PTCA6PSB0cnVlIC1TdHJpcHBpbmdfZGlzYWJsZWQKKyBlbmRpZgorK2lmbmVxICgkKHN0cmlwICQoVUNMSUJDX0VYVFJBX0NGTEFHUykpLCIiKQorK0NGTEFHUyArPSAkKGNhbGwgcXN0cmlwLCQoVUNMSUJDX0VYVFJBX0NGTEFHUykpCisrZW5kaWYKKyAKKyBpZmVxICgkKERPTVVMVEkpLHkpCisgIyB3ZSB0cnkgdG8gY29tcGlsZSBhbGwgc291cmNlcyBhdCBvbmNlIGludG8gYW4gb2JqZWN0IChJTUEpLCBidXQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMyLzE2MC1maXgtVExTLURUUFJFTC1UUFJFTC1tYWNyb3MucGF0Y2ggYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMi8xNjAtZml4LVRMUy1EVFBSRUwtVFBSRUwtbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0OTFkMjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3BhdGNoZXMvdUNsaWJjLzAuOS4zMi8xNjAtZml4LVRMUy1EVFBSRUwtVFBSRUwtbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK2xkc28vbWlwczogd29ya2Fyb3VuZCBmb3IgbWlzc2luZyBUTFMgbWFjcm9zIGluIGVsZmludGVycHJldC5jCisKK1RoZXNlIG1hY3JvcyBkZWNsYXJhdGlvbnMgYXJlIG1pc3NpbmcsIHNvIGdjYyBiZWxpZXZlcyB0aGUgY29kZSBpcyBjYWxsaW5nCithIGZ1bmN0aW9uLCBzbyBhbnkgbGF0ZXIgbGlua2luZyB3aWxsIGZhaWwuCisKK1dvcmsgdGhpcyBhcm91bmQgYnkgY29weWluZyB0aGUgbWNhcm9zIGZyb206CisgICBsaWJwdGhyZWFkL25wdGwvc3lzZGVwcy9taXBzL2RsLXRscy5oCisKK1dlIGNhbid0IGluY2x1ZGUgdGhlIGhlYWRlciBiZWNhdXNlIG9mIGluY29tcGF0aWJsZSBzeW1ib2wgZGVjbGFyYXRpb25zLAorc28gd2UganVzdCBjb3B5IHRoZSBtYWNyb3MgZm9yIG5vdy4KKworLS0tLT4gIFRISVMgSVMgQSBESVJUWSBIQUNLISAgPC0tLS0KKworU2lnbmVkLW9mZi1ieTogIllhbm4gRS4gTU9SSU4iIDx5YW5uLm1vcmluLjE5OThAYW5jaWVucy5lbmliLmZyPgorCitkaWZmIC1kdXJOIHVDbGliYy0wLjkuMzIub3JpZy9sZHNvL2xkc28vbWlwcy9lbGZpbnRlcnAuYyB1Q2xpYmMtMC45LjMyL2xkc28vbGRzby9taXBzL2VsZmludGVycC5jCistLS0gdUNsaWJjLTAuOS4zMi5vcmlnL2xkc28vbGRzby9taXBzL2VsZmludGVycC5jCTIwMTEtMDYtMDggMjE6MzU6MjAuMDAwMDAwMDAwICswMjAwCisrKysgdUNsaWJjLTAuOS4zMi9sZHNvL2xkc28vbWlwcy9lbGZpbnRlcnAuYwkyMDExLTA5LTEyIDE0OjAyOjM3LjU1MzYyODgyNCArMDIwMAorQEAgLTM0LDYgKzM0LDIxIEBACisgCisgI2RlZmluZSBPRkZTRVRfR1BfR09UIDB4N2ZmMAorIAorKy8qIFRoZSB0aHJlYWQgcG9pbnRlciBwb2ludHMgMHg3MDAwIHBhc3QgdGhlIGZpcnN0IHN0YXRpYyBUTFMgYmxvY2suICAqLworKyNkZWZpbmUgVExTX1RQX09GRlNFVCAgICAgICAgICAgMHg3MDAwCisrCisrLyogRHluYW1pYyB0aHJlYWQgdmVjdG9yIHBvaW50ZXJzIHBvaW50IDB4ODAwMCBwYXN0IHRoZSBzdGFydCBvZiBlYWNoCisrICogICAgVExTIGJsb2NrLiAgKi8KKysjZGVmaW5lIFRMU19EVFZfT0ZGU0VUICAgICAgICAgIDB4ODAwMAorKworKy8qIENvbXB1dGUgdGhlIHZhbHVlIGZvciBhIEdPVFRQUkVMIHJlbG9jLiAgKi8KKysjZGVmaW5lIFRMU19UUFJFTF9WQUxVRShzeW1fbWFwLCBzeW1fdmFsKSBcCisrICAoKHN5bV9tYXApLT5sX3Rsc19vZmZzZXQgKyBzeW1fdmFsIC0gVExTX1RQX09GRlNFVCkKKysKKysvKiBDb21wdXRlIHRoZSB2YWx1ZSBmb3IgYSBEVFBSRUwgcmVsb2MuICAqLworKyNkZWZpbmUgVExTX0RUUFJFTF9WQUxVRShzeW1fdmFsKSBcCisrICAoc3ltX3ZhbCAtIFRMU19EVFZfT0ZGU0VUKQorKworIHVuc2lnbmVkIGxvbmcgX19kbF9ydW50aW1lX3Jlc29sdmUodW5zaWduZWQgbG9uZyBzeW1faW5kZXgsCisgCXVuc2lnbmVkIGxvbmcgb2xkX2dwcmVnKQorIHsKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMyLzE3MC1Db25kaXRpb25hbGl6ZS11c2UtbGliZ2NjX2VoLXdoZW4tbGlidWJhY2t0cmFjZS1pcy1uLnBhdGNoIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRjaGVzL3VDbGliYy8wLjkuMzIvMTcwLUNvbmRpdGlvbmFsaXplLXVzZS1saWJnY2NfZWgtd2hlbi1saWJ1YmFja3RyYWNlLWlzLW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA5ZTdmMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvcGF0Y2hlcy91Q2xpYmMvMC45LjMyLzE3MC1Db25kaXRpb25hbGl6ZS11c2UtbGliZ2NjX2VoLXdoZW4tbGlidWJhY2t0cmFjZS1pcy1uLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gdGhlIHVDbGliYyBNTCBhcmNoaXZlczoKKyAgICBodHRwOi8vbGlzdHMudWNsaWJjLm9yZy9waXBlcm1haWwvdWNsaWJjLzIwMTEtSnVuZS8wNDU0MTEuaHRtbAorCis+RnJvbSAzNjRhM2E5YzU3NmQ2MDRiZWQxNDZlZmUwYjhiMzNkMmI4MWQ0YzY0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmFzb24gV29vZHdhcmQgPGphc29uLndvb2R3YXJkQHRpbWVzeXMuY29tPgorRGF0ZTogU2F0LCAxMSBKdW4gMjAxMSAwMTowODo0OCAtMDQwMAorU3ViamVjdDogW1BBVENIIDEvM10gQ29uZGl0aW9uYWxpemUgdXNlIGxpYmdjY19laCB3aGVuIGxpYnViYWNrdHJhY2UgaXMgbm90IGVuYWJsZWQKKworU2lnbmVkLW9mZi1ieTogSmFzb24gV29vZHdhcmQgPGphc29uLndvb2R3YXJkQHRpbWVzeXMuY29tPgorLS0tCisgbGlidWJhY2t0cmFjZS9NYWtlZmlsZS5pbiB8ICAgIDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnViYWNrdHJhY2UvTWFrZWZpbGUuaW4gYi9saWJ1YmFja3RyYWNlL01ha2VmaWxlLmluCitpbmRleCBmNzVmNjhiLi44ODBhOGFmIDEwMDY0NAorLS0tIGEvbGlidWJhY2t0cmFjZS9NYWtlZmlsZS5pbgorKysrIGIvbGlidWJhY2t0cmFjZS9NYWtlZmlsZS5pbgorQEAgLTEyLDcgKzEyLDcgQEAgQ0ZMQUdTLWxpYnViYWNrdHJhY2UgOj0gLUROT1RfSU5fbGliYyAtRElTX0lOX2xpYnViYWNrdHJhY2UgJChTU1BfQUxMX0NGTEFHUykKKyAKKyBMREZMQUdTLWxpYnViYWNrdHJhY2Uuc28gOj0gJChMREZMQUdTKSAkKHRvcF9idWlsZGRpcilsaWIvbGliZGwtJChWRVJTSU9OKS5zbworIAorLWlmZXEgKCQoQ09ORklHX0FSTV9FQUJJKSx5KQorK2lmZXEgKCQoVUNMSUJDX0hBU19CQUNLVFJBQ0UpJChDT05GSUdfQVJNX0VBQkkpLHl5KQorIExJQkdDQyArPSAkKHNoZWxsICQoQ0MpIC1wcmludC1maWxlLW5hbWU9bGliZ2NjX2VoLmEpCisgZW5kaWYKKyAKKy0tIAorMS43LjAuNAorCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3BhdGhzLm1rIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRocy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjc4ZTBlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9wYXRocy5tawpAQCAtMCwwICsxLDExIEBACitleHBvcnQgaW5zdGFsbD0vdXNyL2Jpbi9pbnN0YWxsCitleHBvcnQgYmFzaD0vYmluL2Jhc2gKK2V4cG9ydCBncmVwPS9iaW4vZ3JlcAorZXhwb3J0IG1ha2U9L3Vzci9iaW4vbWFrZQorZXhwb3J0IHNlZD0vYmluL3NlZAorZXhwb3J0IGxpYnRvb2w9L3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyL2Jpbi9saWJ0b29sCitleHBvcnQgbGlidG9vbGl6ZT0vdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3IvYmluL2xpYnRvb2xpemUKK2V4cG9ydCBvYmpjb3B5PS91c3IvYmluL29iamNvcHkKK2V4cG9ydCBvYmpkdW1wPS91c3IvYmluL29iamR1bXAKK2V4cG9ydCByZWFkZWxmPS91c3IvYmluL3JlYWRlbGYKK2V4cG9ydCBwYXRjaD0vdXNyL2Jpbi9wYXRjaApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2FscGhhZXY1Ni11bmtub3duLWxpbnV4LWdudS9jcm9zc3Rvb2wuY29uZmlnIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2FscGhhZXY1Ni11bmtub3duLWxpbnV4LWdudS9jcm9zc3Rvb2wuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllY2EyNGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYWxwaGFldjU2LXVua25vd24tbGludXgtZ251L2Nyb3NzdG9vbC5jb25maWcKQEAgLTAsMCArMSw1MTYgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgY3Jvc3N0b29sLU5HIGhnX2RlZmF1bHRAMjcyMV83YjY0NzQ2YjBhYjMgQ29uZmlndXJhdGlvbgorIyBTdW4gT2N0IDE2IDE3OjE2OjE3IDIwMTEKKyMKK0NUX0NPTkZJR1VSRV9oYXNfeHp1dGlscz15CitDVF9DT05GSUdVUkVfaGFzX2N2cz15CitDVF9DT05GSUdVUkVfaGFzX3N2bj15CitDVF9NT0RVTEVTPXkKKworIworIyBQYXRocyBhbmQgbWlzYyBvcHRpb25zCisjCisKKyMKKyMgY3Jvc3N0b29sLU5HIGJlaGF2aW9yCisjCisjIENUX09CU09MRVRFIGlzIG5vdCBzZXQKK0NUX0VYUEVSSU1FTlRBTD15CisjIENUX0RFQlVHX0NUIGlzIG5vdCBzZXQKKworIworIyBQYXRocworIworQ1RfTE9DQUxfVEFSQkFMTFNfRElSPSIke0hPTUV9L3NyYyIKK0NUX1NBVkVfVEFSQkFMTFM9eQorQ1RfV09SS19ESVI9IiR7Q1RfVE9QX0RJUn0vLmJ1aWxkIgorQ1RfUFJFRklYX0RJUj0iJHtIT01FfS94LXRvb2xzLyR7Q1RfVEFSR0VUfSIKK0NUX0lOU1RBTExfRElSPSIke0NUX1BSRUZJWF9ESVJ9IgorQ1RfUk1fUkZfUFJFRklYX0RJUj15CitDVF9SRU1PVkVfRE9DUz15CitDVF9JTlNUQUxMX0RJUl9STz15CitDVF9TVFJJUF9BTExfVE9PTENIQUlOX0VYRUNVVEFCTEVTPXkKKworIworIyBEb3dubG9hZGluZworIworIyBDVF9GT1JCSURfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9GT1JDRV9ET1dOTE9BRCBpcyBub3Qgc2V0CitDVF9DT05ORUNUX1RJTUVPVVQ9MTAKKyMgQ1RfT05MWV9ET1dOTE9BRCBpcyBub3Qgc2V0CisjIENUX1VTRV9NSVJST1IgaXMgbm90IHNldAorCisjCisjIEV4dHJhY3RpbmcKKyMKKyMgQ1RfRk9SQ0VfRVhUUkFDVCBpcyBub3Qgc2V0CitDVF9PVkVSSURFX0NPTkZJR19HVUVTU19TVUI9eQorIyBDVF9PTkxZX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfUEFUQ0hfQlVORExFRD15CisjIENUX1BBVENIX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9CVU5ETEVEX0ZBTExCQUNLX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTE9DQUxfRkFMTEJBQ0tfQlVORExFRCBpcyBub3Qgc2V0CisjIENUX1BBVENIX05PTkUgaXMgbm90IHNldAorQ1RfUEFUQ0hfT1JERVI9ImJ1bmRsZWQiCisKKyMKKyMgQnVpbGQgYmVoYXZpb3IKKyMKK0NUX1BBUkFMTEVMX0pPQlM9MAorQ1RfTE9BRD0wCitDVF9VU0VfUElQRVM9eQorQ1RfRVhUUkFfRkxBR1NfRk9SX0hPU1Q9IiIKKyMgQ1RfQ09ORklHX1NIRUxMX1NIIGlzIG5vdCBzZXQKKyMgQ1RfQ09ORklHX1NIRUxMX0FTSCBpcyBub3Qgc2V0CitDVF9DT05GSUdfU0hFTExfQkFTSD15CisjIENUX0NPTkZJR19TSEVMTF9DVVNUT00gaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMPSIke2Jhc2h9IgorCisjCisjIExvZ2dpbmcKKyMKKyMgQ1RfTE9HX0VSUk9SIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX1dBUk4gaXMgbm90IHNldAorIyBDVF9MT0dfSU5GTyBpcyBub3Qgc2V0CitDVF9MT0dfRVhUUkE9eQorIyBDVF9MT0dfQUxMIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0RFQlVHIGlzIG5vdCBzZXQKK0NUX0xPR19MRVZFTF9NQVg9IkVYVFJBIgorIyBDVF9MT0dfU0VFX1RPT0xTX1dBUk4gaXMgbm90IHNldAorQ1RfTE9HX1BST0dSRVNTX0JBUj15CitDVF9MT0dfVE9fRklMRT15CitDVF9MT0dfRklMRV9DT01QUkVTUz15CisKKyMKKyMgVGFyZ2V0IG9wdGlvbnMKKyMKK0NUX0FSQ0g9ImFscGhhIgorQ1RfQVJDSF9TVVBQT1JUU18zMj15CitDVF9BUkNIX1NVUFBPUlRfQ1BVPXkKK0NUX0FSQ0hfU1VQUE9SVF9UVU5FPXkKK0NUX0FSQ0hfREVGQVVMVF8zMj15CitDVF9BUkNIX0NQVT0iZXY1NiIKK0NUX0FSQ0hfVFVORT0iZXY1NiIKK0NUX0FSQ0hfMzI9eQorQ1RfQVJDSF9CSVRORVNTPTMyCitDVF9BUkNIX0ZMT0FUX0hXPXkKKyMgQ1RfQVJDSF9GTE9BVF9TVyBpcyBub3Qgc2V0CitDVF9UQVJHRVRfQ0ZMQUdTPSIiCitDVF9UQVJHRVRfTERGTEFHUz0iIgorQ1RfQVJDSF9hbHBoYT15CisjIENUX0FSQ0hfYXJtIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9hdnIzMiBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYmxhY2tmaW4gaXMgbm90IHNldAorIyBDVF9BUkNIX202OGsgaXMgbm90IHNldAorIyBDVF9BUkNIX21pcHMgaXMgbm90IHNldAorIyBDVF9BUkNIX3Bvd2VycGMgaXMgbm90IHNldAorIyBDVF9BUkNIX3MzOTAgaXMgbm90IHNldAorIyBDVF9BUkNIX3NoIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zcGFyYyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfeDg2IGlzIG5vdCBzZXQKK0NUX0FSQ0hfYWxwaGFfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXJtX0FWQUlMQUJMRT15CitDVF9BUkNIX2F2cjMyX0FWQUlMQUJMRT15CitDVF9BUkNIX2JsYWNrZmluX0FWQUlMQUJMRT15CitDVF9BUkNIX202OGtfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbWlwc19BVkFJTEFCTEU9eQorQ1RfQVJDSF9wb3dlcnBjX0FWQUlMQUJMRT15CitDVF9BUkNIX3MzOTBfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfc2hfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfc3BhcmNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfeDg2X0FWQUlMQUJMRT15CisKKyMKKyMgR2VuZXJpYyB0YXJnZXQgb3B0aW9ucworIworQ1RfQVJDSF9VU0VfTU1VPXkKKworIworIyBUYXJnZXQgb3B0aW1pc2F0aW9ucworIworCisjCisjIGFscGhhIG90aGVyIG9wdGlvbnMKKyMKKyMgQ1RfQVJDSF9BTFBIQV9FVjQgaXMgbm90IHNldAorIyBDVF9BUkNIX0FMUEhBX0VWNDUgaXMgbm90IHNldAorIyBDVF9BUkNIX0FMUEhBX0VWNSBpcyBub3Qgc2V0CitDVF9BUkNIX0FMUEhBX0VWNTY9eQorIyBDVF9BUkNIX0FMUEhBX0VWNiBpcyBub3Qgc2V0CisjIENUX0FSQ0hfQUxQSEFfRVY2NyBpcyBub3Qgc2V0CitDVF9BUkNIX0FMUEhBX1ZBUklBTlQ9ImV2NTYiCisKKyMKKyMgVG9vbGNoYWluIG9wdGlvbnMKKyMKKworIworIyBHZW5lcmFsIHRvb2xjaGFpbiBvcHRpb25zCisjCitDVF9GT1JDRV9TWVNST09UPXkKK0NUX1VTRV9TWVNST09UPXkKK0NUX1NZU1JPT1RfTkFNRT0ic3lzcm9vdCIKK0NUX1NZU1JPT1RfRElSX1BSRUZJWD0iIgorQ1RfV0FOVFNfU1RBVElDX0xJTks9eQorIyBDVF9TVEFUSUNfVE9PTENIQUlOIGlzIG5vdCBzZXQKK0NUX1RPT0xDSEFJTl9QS0dWRVJTSU9OPSIiCitDVF9UT09MQ0hBSU5fQlVHVVJMPSIiCisKKyMKKyMgVHVwbGUgY29tcGxldGlvbiBhbmQgYWxpYXNpbmcKKyMKK0NUX1RBUkdFVF9WRU5ET1I9InVua25vd24iCitDVF9UQVJHRVRfQUxJQVNfU0VEX0VYUFI9IiIKK0NUX1RBUkdFVF9BTElBUz0iIgorCisjCisjIFRvb2xjaGFpbiB0eXBlCisjCisjIENUX05BVElWRSBpcyBub3Qgc2V0CitDVF9DUk9TUz15CisjIENUX0NST1NTX05BVElWRSBpcyBub3Qgc2V0CisjIENUX0NBTkFESUFOIGlzIG5vdCBzZXQKK0NUX1RPT0xDSEFJTl9UWVBFPSJjcm9zcyIKKworIworIyBCdWlsZCBzeXN0ZW0KKyMKK0NUX0JVSUxEPSIiCitDVF9CVUlMRF9QUkVGSVg9IiIKK0NUX0JVSUxEX1NVRkZJWD0iIgorCisjCisjIE9wZXJhdGluZyBTeXN0ZW0KKyMKK0NUX0tFUk5FTF9TVVBQT1JUU19TSEFSRURfTElCUz15CitDVF9LRVJORUw9ImxpbnV4IgorQ1RfS0VSTkVMX1ZFUlNJT049IjIuNi4zNy42IgorIyBDVF9LRVJORUxfYmFyZV9tZXRhbCBpcyBub3Qgc2V0CitDVF9LRVJORUxfbGludXg9eQorQ1RfS0VSTkVMX2JhcmVfbWV0YWxfQVZBSUxBQkxFPXkKK0NUX0tFUk5FTF9saW51eF9BVkFJTEFCTEU9eQorIyBDVF9LRVJORUxfVl8zXzBfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8zIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzIgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zOV80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM4XzggaXMgbm90IHNldAorQ1RfS0VSTkVMX1ZfMl82XzM3XzY9eQorIyBDVF9LRVJORUxfVl8yXzZfMzZfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNV8xNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNF8xMCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zM18xOSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zMl80NiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zMV8xNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8yN181OSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9MSU5VWF9DVVNUT00gaXMgbm90IHNldAorQ1RfS0VSTkVMX21pbmd3MzJfQVZBSUxBQkxFPXkKKworIworIyBDb21tb24ga2VybmVsIG9wdGlvbnMKKyMKK0NUX1NIQVJFRF9MSUJTPXkKKworIworIyBsaW51eCBvdGhlciBvcHRpb25zCisjCitDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzA9eQorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzEgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzIgaXMgbm90IHNldAorQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0VfTEVWRUw9MAorQ1RfS0VSTkVMX0xJTlVYX0lOU1RBTExfQ0hFQ0s9eQorCisjCisjIEJpbmFyeSB1dGlsaXRpZXMKKyMKK0NUX0FSQ0hfQklORk1UX0VMRj15CisKKyMKKyMgR05VIGJpbnV0aWxzCisjCisjIENUX0JJTlVUSUxTX1ZfMl8yMV81MyBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WXzJfMjFfMWE9eQorIyBDVF9CSU5VVElMU19WXzJfMjBfMWEgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19WXzJfMTlfMWEgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19WXzJfMThhIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX1ZFUlNJT049IjIuMjEuMWEiCitDVF9CSU5VVElMU18yXzIxX29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMjBfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfMl8xOV9vcl9sYXRlcj15CitDVF9CSU5VVElMU18yXzE4X29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTX0hBU19HT0xEPXkKK0NUX0JJTlVUSUxTX0hBU19QTFVHSU5TPXkKK0NUX0JJTlVUSUxTX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9CSU5VVElMU19GT1JDRV9MRF9CRkQ9eQorQ1RfQklOVVRJTFNfTElOS0VSX0xEPXkKK0NUX0JJTlVUSUxTX0xJTktFUlNfTElTVD0ibGQiCitDVF9CSU5VVElMU19MSU5LRVJfREVGQVVMVD0iYmZkIgorQ1RfQklOVVRJTFNfUExVR0lOUz15CitDVF9CSU5VVElMU19FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0JJTlVUSUxTX0ZPUl9UQVJHRVQ9eQorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVF9JQkVSVFk9eQorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVF9CRkQ9eQorCisjCisjIEMgY29tcGlsZXIKKyMKK0NUX0NDPSJnY2MiCitDVF9DQ19WRVJTSU9OPSI0LjQuNSIKK0NUX0NDX2djYz15CisjIENUX0NDX0dDQ19TSE9XX0xJTkFSTyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF82XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNl8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF81XzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzYgaXMgbm90IHNldAorQ1RfQ0NfVl80XzRfNT15CisjIENUX0NDX1ZfNF80XzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM180IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8yXzIgaXMgbm90IHNldAorQ1RfQ0NfR0NDXzRfMl9vcl9sYXRlcj15CitDVF9DQ19HQ0NfNF8zX29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzQ9eQorQ1RfQ0NfR0NDXzRfNF9vcl9sYXRlcj15CitDVF9DQ19HQ0NfSEFTX0dSQVBISVRFPXkKK0NUX0NDX0dDQ19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQ0NfR0NDX0VOQUJMRV9QTFVHSU5TPXkKK0NUX0NDX0dDQ19VU0VfR01QX01QRlI9eQorQ1RfQ0NfR0NDX1VTRV9QUExfQ0xPT0c9eQorQ1RfQ0NfTEFOR19GT1JUUkFOPXkKK0NUX0NDX1NVUFBPUlRfQ1hYPXkKK0NUX0NDX1NVUFBPUlRfRk9SVFJBTj15CitDVF9DQ19TVVBQT1JUX0pBVkE9eQorQ1RfQ0NfU1VQUE9SVF9BREE9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDPXkKK0NUX0NDX1NVUFBPUlRfT0JKQ1hYPXkKKworIworIyBBZGRpdGlvbmFsIHN1cHBvcnRlZCBsYW5ndWFnZXM6CisjCitDVF9DQ19MQU5HX0NYWD15CisjIENUX0NDX0xBTkdfSkFWQSBpcyBub3Qgc2V0CisjIENUX0NDX0xBTkdfQURBIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfTEFOR19PQkpDIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfTEFOR19PQkpDWFggaXMgbm90IHNldAorQ1RfQ0NfTEFOR19PVEhFUlM9IiIKKworIworIyBnY2Mgb3RoZXIgb3B0aW9ucworIworQ1RfQ0NfRU5BQkxFX0NYWF9GTEFHUz0iIgorQ1RfQ0NfQ09SRV9FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0NDX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfQ0NfU1RBVElDX0xJQlNURENYWD15CisKKyMKKyMgT3B0aW1pc2F0aW9uIGZlYXR1cmVzCisjCitDVF9DQ19HQ0NfVVNFX0dSQVBISVRFPXkKKworIworIyBTZXR0aW5ncyBmb3IgbGlicmFyaWVzIHJ1bm5pbmcgb24gdGFyZ2V0CisjCitDVF9DQ19HQ0NfRU5BQkxFX1RBUkdFVF9PUFRTUEFDRT15CisjIENUX0NDX0dDQ19MSUJNVURGTEFQIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQkdPTVAgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCU1NQIGlzIG5vdCBzZXQKKworIworIyBNaXNjLiBvYnNjdXJlIG9wdGlvbnMuCisjCitDVF9DQ19DWEFfQVRFWElUPXkKKyMgQ1RfQ0NfR0NDX0RJU0FCTEVfUENIIGlzIG5vdCBzZXQKK0NUX0NDX0dDQ19TSkxKX0VYQ0VQVElPTlM9bQorQ1RfQ0NfR0NDX0xEQkxfMTI4PW0KKworIworIyBDLWxpYnJhcnkKKyMKK0NUX0xJQkM9ImdsaWJjIgorQ1RfTElCQ19WRVJTSU9OPSIyLjEwLjEiCisjIENUX0xJQkNfZWdsaWJjIGlzIG5vdCBzZXQKK0NUX0xJQkNfZ2xpYmM9eQorIyBDVF9MSUJDX3VDbGliYyBpcyBub3Qgc2V0CitDVF9MSUJDX2VnbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19nbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19HTElCQ19UQVJCQUxMPXkKKyMgQ1RfTElCQ19HTElCQ19WXzJfMTQgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX1ZfMl8xMyBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfVl8yXzEyXzIgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX1ZfMl8xMl8xIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19WXzJfMTFfMSBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfVl8yXzExIGlzIG5vdCBzZXQKK0NUX0xJQkNfR0xJQkNfVl8yXzEwXzE9eQorIyBDVF9MSUJDX0dMSUJDX1ZfMl85IGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19WXzJfOCBpcyBub3Qgc2V0CitDVF9MSUJDX21pbmd3X0FWQUlMQUJMRT15CitDVF9MSUJDX25ld2xpYl9BVkFJTEFCTEU9eQorQ1RfTElCQ19ub25lX0FWQUlMQUJMRT15CitDVF9MSUJDX3VDbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19TVVBQT1JUX1RIUkVBRFNfQU5ZPXkKK0NUX0xJQkNfU1VQUE9SVF9OUFRMPXkKK0NUX1RIUkVBRFM9Im5wdGwiCisKKyMKKyMgQ29tbW9uIEMgbGlicmFyeSBvcHRpb25zCisjCitDVF9USFJFQURTX05QVEw9eQorQ1RfTElCQ19YTEREPXkKK0NUX0xJQkNfZ2xpYmNfZmFtaWxseT15CitDVF9MSUJDX0dMSUJDX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfTElCQ19HTElCQ19DT05GSUdQQVJNUz0iIgorQ1RfTElCQ19HTElCQ19FWFRSQV9DRkxBR1M9IiIKK0NUX0xJQkNfRVhUUkFfQ0NfQVJHUz0iIgorIyBDVF9MSUJDX0VOQUJMRV9GT1JUSUZJRURfQlVJTEQgaXMgbm90IHNldAorIyBDVF9MSUJDX0RJU0FCTEVfVkVSU0lPTklORyBpcyBub3Qgc2V0CitDVF9MSUJDX09MREVTVF9BQkk9IiIKKyMgQ1RfTElCQ19HTElCQ19GT1JDRV9VTldJTkQgaXMgbm90IHNldAorQ1RfTElCQ19HTElCQ19VU0VfUE9SVFM9eQorQ1RfTElCQ19BRERPTlNfTElTVD0iIgorIyBDVF9MSUJDX0xPQ0FMRVMgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX05PTkUgaXMgbm90IHNldAorQ1RfTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9BU19IRUFERVJTPXkKKyMgQ1RfTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9DSE9TRU4gaXMgbm90IHNldAorQ1RfTElCQ19HTElCQ19NSU5fS0VSTkVMPSIyLjYuMzcuNiIKKworIworIyBnbGliYyBvdGhlciBvcHRpb25zCisjCisKKyMKKyMgV0FSTklORyAhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIworCisjCisjICAgRm9yIGdsaWJjID49IDIuOCwgaXQgY2FuIGhhcHBlbiB0aGF0IHRoZSB0YXJiYWxscyAgICAKKyMKKworIworIyAgIGZvciB0aGUgYWRkb25zIGFyZSBub3QgYXZhaWxhYmxlIGZvciBkb3dubG9hZC4gICAgICAgCisjCisKKyMKKyMgICBJZiB0aGF0IGhhcHBlbnMsIGJhZCBsdWNrLi4uIFRyeSBhIHByZXZpb3VzIHZlcnNpb24gIAorIworCisjCisjICAgb3IgdHJ5IGFnYWluIGxhdGVyLi4uIDotKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyMKKworIworIyBEZWJ1ZyBmYWNpbGl0aWVzCisjCisjIENUX0RFQlVHX2RtYWxsb2MgaXMgbm90IHNldAorQ1RfREVCVUdfZHVtYT15CitDVF9EVU1BX0E9eQorQ1RfRFVNQV9TTz15CitDVF9EVU1BX1ZfMl81XzE1PXkKK0NUX0RVTUFfVkVSU0lPTj0iMl81XzE1IgorQ1RfREVCVUdfZ2RiPXkKKyMgQ1RfR0RCX0NST1NTIGlzIG5vdCBzZXQKK0NUX0dEQl9OQVRJVkU9eQorIyBDVF9HREJfTkFUSVZFX1NUQVRJQyBpcyBub3Qgc2V0CisjIENUX0dEQl9HREJTRVJWRVIgaXMgbm90IHNldAorCisjCisjIGdkYiB2ZXJzaW9uCisjCisjIENUX0RFQlVHX0dEQl9TSE9XX0xJTkFSTyBpcyBub3Qgc2V0CisjIENUX0dEQl9WXzdfM2EgaXMgbm90IHNldAorIyBDVF9HREJfVl83XzJhIGlzIG5vdCBzZXQKKyMgQ1RfR0RCX1ZfN18xYSBpcyBub3Qgc2V0CisjIENUX0dEQl9WXzdfMF8xYSBpcyBub3Qgc2V0CisjIENUX0dEQl9WXzdfMGEgaXMgbm90IHNldAorQ1RfR0RCX1ZfNl84YT15CitDVF9HREJfVkVSU0lPTj0iNi44YSIKK0NUX0RFQlVHX2x0cmFjZT15CitDVF9MVFJBQ0VfVl8wXzVfMz15CisjIENUX0xUUkFDRV9WXzBfNV8yIGlzIG5vdCBzZXQKK0NUX0xUUkFDRV9WRVJTSU9OPSIwLjUuMyIKK0NUX0xUUkFDRV8wXzVfM19vcl9sYXRlcj15CitDVF9ERUJVR19zdHJhY2U9eQorIyBDVF9TVFJBQ0VfVl80XzVfMjAgaXMgbm90IHNldAorQ1RfU1RSQUNFX1ZfNF81XzE5PXkKKyMgQ1RfU1RSQUNFX1ZfNF81XzE4IGlzIG5vdCBzZXQKK0NUX1NUUkFDRV9WRVJTSU9OPSI0LjUuMTkiCisKKyMKKyMgQ29tcGFuaW9uIGxpYnJhcmllcworIworQ1RfQ09NUExJQlNfTkVFREVEPXkKK0NUX0dNUF9ORUVERUQ9eQorQ1RfTVBGUl9ORUVERUQ9eQorQ1RfUFBMX05FRURFRD15CitDVF9DTE9PR19ORUVERUQ9eQorQ1RfQ09NUExJQlM9eQorQ1RfR01QPXkKK0NUX01QRlI9eQorQ1RfUFBMPXkKK0NUX0NMT09HPXkKK0NUX0xJQkVMRl9UQVJHRVQ9eQorIyBDVF9HTVBfVl81XzBfMiBpcyBub3Qgc2V0CisjIENUX0dNUF9WXzVfMF8xIGlzIG5vdCBzZXQKK0NUX0dNUF9WXzRfM18yPXkKKyMgQ1RfR01QX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9HTVBfVl80XzNfMCBpcyBub3Qgc2V0CitDVF9HTVBfVkVSU0lPTj0iNC4zLjIiCisjIENUX01QRlJfVl8zXzBfMSBpcyBub3Qgc2V0CisjIENUX01QRlJfVl8zXzBfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZfMl80XzI9eQorIyBDVF9NUEZSX1ZfMl80XzEgaXMgbm90IHNldAorIyBDVF9NUEZSX1ZfMl80XzAgaXMgbm90IHNldAorQ1RfTVBGUl9WRVJTSU9OPSIyLjQuMiIKKyMgQ1RfUFBMX1ZfMF8xMV8yIGlzIG5vdCBzZXQKKyMgQ1RfUFBMX1ZfMF8xMV8xIGlzIG5vdCBzZXQKKyMgQ1RfUFBMX1ZfMF8xMSBpcyBub3Qgc2V0CitDVF9QUExfVl8wXzEwXzI9eQorQ1RfUFBMX1ZFUlNJT049IjAuMTAuMiIKKyMgQ1RfQ0xPT0dfVl8wXzE1XzExIGlzIG5vdCBzZXQKKyMgQ1RfQ0xPT0dfVl8wXzE1XzEwIGlzIG5vdCBzZXQKK0NUX0NMT09HX1ZfMF8xNV85PXkKKyMgQ1RfQ0xPT0dfVl8wXzE1XzggaXMgbm90IHNldAorIyBDVF9DTE9PR19WXzBfMTVfNyBpcyBub3Qgc2V0CisjIENUX0NMT09HX1ZfMF8xNV82IGlzIG5vdCBzZXQKK0NUX0NMT09HX1ZFUlNJT049IjAuMTUuOSIKKworIworIyBsaWJlbGYgdmVyc2lvbiBuZWVkZWQgdG8gYnVpbGQgZm9yIHRhcmdldAorIworQ1RfTElCRUxGX1ZfMF84XzEzPXkKKyMgQ1RfTElCRUxGX1ZfMF84XzEyIGlzIG5vdCBzZXQKK0NUX0xJQkVMRl9WRVJTSU9OPSIwLjguMTMiCisKKyMKKyMgQ29tcGFuaW9uIGxpYnJhcmllcyBjb21tb24gb3B0aW9ucworIworIyBDVF9DT01QTElCU19DSEVDSyBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcGFuaW9uIHRvb2xzCisjCisKKyMKKyMgUkVBRCBIRUxQIGJlZm9yZSB5b3Ugc2F5ICdZJyBiZWxvdyAhISEKKyMKKyMgQ1RfQ09NUF9UT09MUyBpcyBub3Qgc2V0CisKKyMKKyMgVGVzdCBzdWl0ZQorIworIyBDVF9URVNUX1NVSVRFX0dDQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYWxwaGFldjU2LXVua25vd24tbGludXgtZ251L3JlcG9ydGVkLmJ5IGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2FscGhhZXY1Ni11bmtub3duLWxpbnV4LWdudS9yZXBvcnRlZC5ieQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTIzOWE2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2FscGhhZXY1Ni11bmtub3duLWxpbnV4LWdudS9yZXBvcnRlZC5ieQpAQCAtMCwwICsxLDMgQEAKK3JlcG9ydGVyX25hbWU9IklvYW5uaXMgRS4gVkVORVRJUyIKK3JlcG9ydGVyX3VybD0iaHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2Nyb3NzZ2NjLzIwMDktMTEvbXNnMDAxMDkuaHRtbCIKK3JlcG9ydGVyX2NvbW1lbnQ9IiIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hbHBoYWV2NjctdW5rbm93bi1saW51eC1nbnUvY3Jvc3N0b29sLmNvbmZpZyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hbHBoYWV2NjctdW5rbm93bi1saW51eC1nbnUvY3Jvc3N0b29sLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjE4ZmY5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2FscGhhZXY2Ny11bmtub3duLWxpbnV4LWdudS9jcm9zc3Rvb2wuY29uZmlnCkBAIC0wLDAgKzEsNDU1IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIGNyb3NzdG9vbC1ORyBoZ19kZWZhdWx0QDI3MjFfN2I2NDc0NmIwYWIzIENvbmZpZ3VyYXRpb24KKyMgU3VuIE9jdCAxNiAxNzoxNjo1MCAyMDExCisjCitDVF9DT05GSUdVUkVfaGFzX3h6dXRpbHM9eQorQ1RfQ09ORklHVVJFX2hhc19jdnM9eQorQ1RfQ09ORklHVVJFX2hhc19zdm49eQorQ1RfTU9EVUxFUz15CisKKyMKKyMgUGF0aHMgYW5kIG1pc2Mgb3B0aW9ucworIworCisjCisjIGNyb3NzdG9vbC1ORyBiZWhhdmlvcgorIworIyBDVF9PQlNPTEVURSBpcyBub3Qgc2V0CitDVF9FWFBFUklNRU5UQUw9eQorIyBDVF9ERUJVR19DVCBpcyBub3Qgc2V0CisKKyMKKyMgUGF0aHMKKyMKK0NUX0xPQ0FMX1RBUkJBTExTX0RJUj0iJHtIT01FfS9zcmMiCitDVF9TQVZFX1RBUkJBTExTPXkKK0NUX1dPUktfRElSPSIke0NUX1RPUF9ESVJ9Ly5idWlsZCIKK0NUX1BSRUZJWF9ESVI9IiR7SE9NRX0veC10b29scy8ke0NUX1RBUkdFVH0iCitDVF9JTlNUQUxMX0RJUj0iJHtDVF9QUkVGSVhfRElSfSIKK0NUX1JNX1JGX1BSRUZJWF9ESVI9eQorQ1RfUkVNT1ZFX0RPQ1M9eQorQ1RfSU5TVEFMTF9ESVJfUk89eQorQ1RfU1RSSVBfQUxMX1RPT0xDSEFJTl9FWEVDVVRBQkxFUz15CisKKyMKKyMgRG93bmxvYWRpbmcKKyMKKyMgQ1RfRk9SQklEX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfRk9SQ0VfRE9XTkxPQUQgaXMgbm90IHNldAorQ1RfQ09OTkVDVF9USU1FT1VUPTEwCisjIENUX09OTFlfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9VU0VfTUlSUk9SIGlzIG5vdCBzZXQKKworIworIyBFeHRyYWN0aW5nCisjCisjIENUX0ZPUkNFX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfT1ZFUklERV9DT05GSUdfR1VFU1NfU1VCPXkKKyMgQ1RfT05MWV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX1BBVENIX0JVTkRMRUQ9eQorIyBDVF9QQVRDSF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9GQUxMQkFDS19MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0ZBTExCQUNLX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9OT05FIGlzIG5vdCBzZXQKK0NUX1BBVENIX09SREVSPSJidW5kbGVkIgorCisjCisjIEJ1aWxkIGJlaGF2aW9yCisjCitDVF9QQVJBTExFTF9KT0JTPTAKK0NUX0xPQUQ9MAorQ1RfVVNFX1BJUEVTPXkKK0NUX0VYVFJBX0ZMQUdTX0ZPUl9IT1NUPSIiCisjIENUX0NPTkZJR19TSEVMTF9TSCBpcyBub3Qgc2V0CisjIENUX0NPTkZJR19TSEVMTF9BU0ggaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMX0JBU0g9eQorIyBDVF9DT05GSUdfU0hFTExfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTD0iJHtiYXNofSIKKworIworIyBMb2dnaW5nCisjCisjIENUX0xPR19FUlJPUiBpcyBub3Qgc2V0CisjIENUX0xPR19XQVJOIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0lORk8gaXMgbm90IHNldAorQ1RfTE9HX0VYVFJBPXkKKyMgQ1RfTE9HX0FMTCBpcyBub3Qgc2V0CisjIENUX0xPR19ERUJVRyBpcyBub3Qgc2V0CitDVF9MT0dfTEVWRUxfTUFYPSJFWFRSQSIKKyMgQ1RfTE9HX1NFRV9UT09MU19XQVJOIGlzIG5vdCBzZXQKK0NUX0xPR19QUk9HUkVTU19CQVI9eQorQ1RfTE9HX1RPX0ZJTEU9eQorQ1RfTE9HX0ZJTEVfQ09NUFJFU1M9eQorCisjCisjIFRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIPSJhbHBoYSIKK0NUX0FSQ0hfU1VQUE9SVFNfMzI9eQorQ1RfQVJDSF9TVVBQT1JUX0NQVT15CitDVF9BUkNIX1NVUFBPUlRfVFVORT15CitDVF9BUkNIX0RFRkFVTFRfMzI9eQorQ1RfQVJDSF9DUFU9ImV2NTYiCitDVF9BUkNIX1RVTkU9ImV2NTYiCitDVF9BUkNIXzMyPXkKK0NUX0FSQ0hfQklUTkVTUz0zMgorQ1RfQVJDSF9GTE9BVF9IVz15CisjIENUX0FSQ0hfRkxPQVRfU1cgaXMgbm90IHNldAorQ1RfVEFSR0VUX0NGTEFHUz0iIgorQ1RfVEFSR0VUX0xERkxBR1M9IiIKK0NUX0FSQ0hfYWxwaGE9eQorIyBDVF9BUkNIX2FybSBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYXZyMzIgaXMgbm90IHNldAorIyBDVF9BUkNIX2JsYWNrZmluIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9tNjhrIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9taXBzIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9wb3dlcnBjIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zMzkwIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zaCBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc3BhcmMgaXMgbm90IHNldAorIyBDVF9BUkNIX3g4NiBpcyBub3Qgc2V0CitDVF9BUkNIX2FscGhhX0FWQUlMQUJMRT15CitDVF9BUkNIX2FybV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hdnIzMl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9ibGFja2Zpbl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9tNjhrX0FWQUlMQUJMRT15CitDVF9BUkNIX21pcHNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfcG93ZXJwY19BVkFJTEFCTEU9eQorQ1RfQVJDSF9zMzkwX0FWQUlMQUJMRT15CitDVF9BUkNIX3NoX0FWQUlMQUJMRT15CitDVF9BUkNIX3NwYXJjX0FWQUlMQUJMRT15CitDVF9BUkNIX3g4Nl9BVkFJTEFCTEU9eQorCisjCisjIEdlbmVyaWMgdGFyZ2V0IG9wdGlvbnMKKyMKK0NUX0FSQ0hfVVNFX01NVT15CisKKyMKKyMgVGFyZ2V0IG9wdGltaXNhdGlvbnMKKyMKKworIworIyBhbHBoYSBvdGhlciBvcHRpb25zCisjCisjIENUX0FSQ0hfQUxQSEFfRVY0IGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9BTFBIQV9FVjQ1IGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9BTFBIQV9FVjUgaXMgbm90IHNldAorIyBDVF9BUkNIX0FMUEhBX0VWNTYgaXMgbm90IHNldAorIyBDVF9BUkNIX0FMUEhBX0VWNiBpcyBub3Qgc2V0CitDVF9BUkNIX0FMUEhBX0VWNjc9eQorQ1RfQVJDSF9BTFBIQV9WQVJJQU5UPSJldjY3IgorCisjCisjIFRvb2xjaGFpbiBvcHRpb25zCisjCisKKyMKKyMgR2VuZXJhbCB0b29sY2hhaW4gb3B0aW9ucworIworQ1RfRk9SQ0VfU1lTUk9PVD15CitDVF9VU0VfU1lTUk9PVD15CitDVF9TWVNST09UX05BTUU9InN5c3Jvb3QiCitDVF9TWVNST09UX0RJUl9QUkVGSVg9IiIKKyMgQ1RfU1RBVElDX1RPT0xDSEFJTiBpcyBub3Qgc2V0CitDVF9UT09MQ0hBSU5fUEtHVkVSU0lPTj0iIgorQ1RfVE9PTENIQUlOX0JVR1VSTD0iIgorCisjCisjIFR1cGxlIGNvbXBsZXRpb24gYW5kIGFsaWFzaW5nCisjCitDVF9UQVJHRVRfVkVORE9SPSJ1bmtub3duIgorQ1RfVEFSR0VUX0FMSUFTX1NFRF9FWFBSPSIiCitDVF9UQVJHRVRfQUxJQVM9IiIKKworIworIyBUb29sY2hhaW4gdHlwZQorIworIyBDVF9OQVRJVkUgaXMgbm90IHNldAorQ1RfQ1JPU1M9eQorIyBDVF9DUk9TU19OQVRJVkUgaXMgbm90IHNldAorIyBDVF9DQU5BRElBTiBpcyBub3Qgc2V0CitDVF9UT09MQ0hBSU5fVFlQRT0iY3Jvc3MiCisKKyMKKyMgQnVpbGQgc3lzdGVtCisjCitDVF9CVUlMRD0iIgorQ1RfQlVJTERfUFJFRklYPSIiCitDVF9CVUlMRF9TVUZGSVg9IiIKKworIworIyBPcGVyYXRpbmcgU3lzdGVtCisjCitDVF9LRVJORUxfU1VQUE9SVFNfU0hBUkVEX0xJQlM9eQorQ1RfS0VSTkVMPSJsaW51eCIKK0NUX0tFUk5FTF9WRVJTSU9OPSIyLjYuMzguOCIKKyMgQ1RfS0VSTkVMX2JhcmVfbWV0YWwgaXMgbm90IHNldAorQ1RfS0VSTkVMX2xpbnV4PXkKK0NUX0tFUk5FTF9iYXJlX21ldGFsX0FWQUlMQUJMRT15CitDVF9LRVJORUxfbGludXhfQVZBSUxBQkxFPXkKKyMgQ1RfS0VSTkVMX1ZfM18wXzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMyBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8yIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzEgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzAgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzlfNCBpcyBub3Qgc2V0CitDVF9LRVJORUxfVl8yXzZfMzhfOD15CisjIENUX0tFUk5FTF9WXzJfNl8zN182IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM2XzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzVfMTQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzRfMTAgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzNfMTkgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzJfNDYgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzFfMTQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMjdfNTkgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9taW5ndzMyX0FWQUlMQUJMRT15CisKKyMKKyMgQ29tbW9uIGtlcm5lbCBvcHRpb25zCisjCitDVF9TSEFSRURfTElCUz15CisKKyMKKyMgbGludXggb3RoZXIgb3B0aW9ucworIworQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8wPXkKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8xIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8yIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9MSU5VWF9WRVJCT1NFX0xFVkVMPTAKK0NUX0tFUk5FTF9MSU5VWF9JTlNUQUxMX0NIRUNLPXkKKworIworIyBCaW5hcnkgdXRpbGl0aWVzCisjCitDVF9BUkNIX0JJTkZNVF9FTEY9eQorCisjCisjIEdOVSBiaW51dGlscworIworIyBDVF9CSU5VVElMU19WXzJfMjFfNTMgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVl8yXzIxXzFhPXkKKyMgQ1RfQklOVVRJTFNfVl8yXzIwXzFhIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfVl8yXzE5XzFhIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfVl8yXzE4YSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WRVJTSU9OPSIyLjIxLjFhIgorQ1RfQklOVVRJTFNfMl8yMV9vcl9sYXRlcj15CitDVF9CSU5VVElMU18yXzIwX29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMTlfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfMl8xOF9vcl9sYXRlcj15CitDVF9CSU5VVElMU19IQVNfR09MRD15CitDVF9CSU5VVElMU19IQVNfUExVR0lOUz15CitDVF9CSU5VVElMU19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQklOVVRJTFNfRk9SQ0VfTERfQkZEPXkKK0NUX0JJTlVUSUxTX0xJTktFUl9MRD15CitDVF9CSU5VVElMU19MSU5LRVJTX0xJU1Q9ImxkIgorQ1RfQklOVVRJTFNfTElOS0VSX0RFRkFVTFQ9ImJmZCIKKyMgQ1RfQklOVVRJTFNfUExVR0lOUyBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19FWFRSQV9DT05GSUdfQVJSQVk9IiIKKyMgQ1RfQklOVVRJTFNfRk9SX1RBUkdFVCBpcyBub3Qgc2V0CisKKyMKKyMgQyBjb21waWxlcgorIworQ1RfQ0M9ImdjYyIKK0NUX0NDX1ZFUlNJT049IjQuMy41IgorQ1RfQ0NfZ2NjPXkKKyMgQ1RfQ0NfR0NDX1NIT1dfTElOQVJPIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzZfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF82XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF81XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzYgaXMgbm90IHNldAorQ1RfQ0NfVl80XzNfNT15CisjIENUX0NDX1ZfNF8zXzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfMl80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfMiBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfNF8yX29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzM9eQorQ1RfQ0NfR0NDXzRfM19vcl9sYXRlcj15CitDVF9DQ19HQ0NfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0NDX0dDQ19VU0VfR01QX01QRlI9eQorQ1RfQ0NfTEFOR19GT1JUUkFOPXkKK0NUX0NDX1NVUFBPUlRfQ1hYPXkKK0NUX0NDX1NVUFBPUlRfRk9SVFJBTj15CitDVF9DQ19TVVBQT1JUX0pBVkE9eQorQ1RfQ0NfU1VQUE9SVF9BREE9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDPXkKK0NUX0NDX1NVUFBPUlRfT0JKQ1hYPXkKKworIworIyBBZGRpdGlvbmFsIHN1cHBvcnRlZCBsYW5ndWFnZXM6CisjCitDVF9DQ19MQU5HX0NYWD15CisjIENUX0NDX0xBTkdfSkFWQSBpcyBub3Qgc2V0CisjIENUX0NDX0xBTkdfQURBIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfTEFOR19PQkpDIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfTEFOR19PQkpDWFggaXMgbm90IHNldAorQ1RfQ0NfTEFOR19PVEhFUlM9IiIKKworIworIyBnY2Mgb3RoZXIgb3B0aW9ucworIworQ1RfQ0NfRU5BQkxFX0NYWF9GTEFHUz0iIgorQ1RfQ0NfQ09SRV9FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0NDX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorCisjCisjIE9wdGltaXNhdGlvbiBmZWF0dXJlcworIworCisjCisjIFNldHRpbmdzIGZvciBsaWJyYXJpZXMgcnVubmluZyBvbiB0YXJnZXQKKyMKKyMgQ1RfQ0NfR0NDX0VOQUJMRV9UQVJHRVRfT1BUU1BBQ0UgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCTVVERkxBUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJHT01QIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQlNTUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYy4gb2JzY3VyZSBvcHRpb25zLgorIworQ1RfQ0NfQ1hBX0FURVhJVD15CisjIENUX0NDX0dDQ19ESVNBQkxFX1BDSCBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfU0pMSl9FWENFUFRJT05TPW0KK0NUX0NDX0dDQ19MREJMXzEyOD1tCisKKyMKKyMgQy1saWJyYXJ5CisjCitDVF9MSUJDPSJnbGliYyIKK0NUX0xJQkNfVkVSU0lPTj0iMi4xMyIKKyMgQ1RfTElCQ19lZ2xpYmMgaXMgbm90IHNldAorQ1RfTElCQ19nbGliYz15CisjIENUX0xJQkNfdUNsaWJjIGlzIG5vdCBzZXQKK0NUX0xJQkNfZWdsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX2dsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX0dMSUJDX1RBUkJBTEw9eQorIyBDVF9MSUJDX0dMSUJDX1ZfMl8xNCBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX1ZfMl8xMz15CisjIENUX0xJQkNfR0xJQkNfVl8yXzEyXzIgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX1ZfMl8xMl8xIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19WXzJfMTFfMSBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfVl8yXzExIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19WXzJfMTBfMSBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfVl8yXzkgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX1ZfMl84IGlzIG5vdCBzZXQKK0NUX0xJQkNfbWluZ3dfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbmV3bGliX0FWQUlMQUJMRT15CitDVF9MSUJDX25vbmVfQVZBSUxBQkxFPXkKK0NUX0xJQkNfdUNsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX1NVUFBPUlRfVEhSRUFEU19BTlk9eQorQ1RfTElCQ19TVVBQT1JUX05QVEw9eQorQ1RfVEhSRUFEUz0ibnB0bCIKKworIworIyBDb21tb24gQyBsaWJyYXJ5IG9wdGlvbnMKKyMKK0NUX1RIUkVBRFNfTlBUTD15CitDVF9MSUJDX1hMREQ9eQorQ1RfTElCQ19nbGliY19mYW1pbGx5PXkKK0NUX0xJQkNfR0xJQkNfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9MSUJDX0dMSUJDX0NPTkZJR1BBUk1TPSIiCitDVF9MSUJDX0dMSUJDX0VYVFJBX0NGTEFHUz0iIgorQ1RfTElCQ19FWFRSQV9DQ19BUkdTPSItV2wsLS1uby1yZWxheCIKKyMgQ1RfTElCQ19FTkFCTEVfRk9SVElGSUVEX0JVSUxEIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19ESVNBQkxFX1ZFUlNJT05JTkcgaXMgbm90IHNldAorQ1RfTElCQ19PTERFU1RfQUJJPSIiCitDVF9MSUJDX0dMSUJDX0ZPUkNFX1VOV0lORD15CitDVF9MSUJDX0dMSUJDX1VTRV9QT1JUUz15CitDVF9MSUJDX0FERE9OU19MSVNUPSIiCisjIENUX0xJQkNfTE9DQUxFUyBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfS0VSTkVMX1ZFUlNJT05fTk9ORSBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX0FTX0hFQURFUlM9eQorIyBDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX0NIT1NFTiBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX01JTl9LRVJORUw9IjIuNi4zOC44IgorCisjCisjIGdsaWJjIG90aGVyIG9wdGlvbnMKKyMKKworIworIyBXQVJOSU5HICEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjCisKKyMKKyMgICBGb3IgZ2xpYmMgPj0gMi44LCBpdCBjYW4gaGFwcGVuIHRoYXQgdGhlIHRhcmJhbGxzICAgIAorIworCisjCisjICAgZm9yIHRoZSBhZGRvbnMgYXJlIG5vdCBhdmFpbGFibGUgZm9yIGRvd25sb2FkLiAgICAgICAKKyMKKworIworIyAgIElmIHRoYXQgaGFwcGVucywgYmFkIGx1Y2suLi4gVHJ5IGEgcHJldmlvdXMgdmVyc2lvbiAgCisjCisKKyMKKyMgICBvciB0cnkgYWdhaW4gbGF0ZXIuLi4gOi0oICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIworCisjCisjIERlYnVnIGZhY2lsaXRpZXMKKyMKKyMgQ1RfREVCVUdfZG1hbGxvYyBpcyBub3Qgc2V0CisjIENUX0RFQlVHX2R1bWEgaXMgbm90IHNldAorIyBDVF9ERUJVR19nZGIgaXMgbm90IHNldAorIyBDVF9ERUJVR19sdHJhY2UgaXMgbm90IHNldAorIyBDVF9ERUJVR19zdHJhY2UgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMKKyMKK0NUX0NPTVBMSUJTX05FRURFRD15CitDVF9HTVBfTkVFREVEPXkKK0NUX01QRlJfTkVFREVEPXkKK0NUX0NPTVBMSUJTPXkKK0NUX0dNUD15CitDVF9NUEZSPXkKKyMgQ1RfR01QX1ZfNV8wXzIgaXMgbm90IHNldAorQ1RfR01QX1ZfNV8wXzE9eQorIyBDVF9HTVBfVl80XzNfMiBpcyBub3Qgc2V0CisjIENUX0dNUF9WXzRfM18xIGlzIG5vdCBzZXQKKyMgQ1RfR01QX1ZfNF8zXzAgaXMgbm90IHNldAorQ1RfR01QX1ZFUlNJT049IjUuMC4xIgorIyBDVF9NUEZSX1ZfM18wXzEgaXMgbm90IHNldAorQ1RfTVBGUl9WXzNfMF8wPXkKKyMgQ1RfTVBGUl9WXzJfNF8yIGlzIG5vdCBzZXQKKyMgQ1RfTVBGUl9WXzJfNF8xIGlzIG5vdCBzZXQKKyMgQ1RfTVBGUl9WXzJfNF8wIGlzIG5vdCBzZXQKK0NUX01QRlJfVkVSU0lPTj0iMy4wLjAiCisKKyMKKyMgQ29tcGFuaW9uIGxpYnJhcmllcyBjb21tb24gb3B0aW9ucworIworIyBDVF9DT01QTElCU19DSEVDSyBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcGFuaW9uIHRvb2xzCisjCisKKyMKKyMgUkVBRCBIRUxQIGJlZm9yZSB5b3Ugc2F5ICdZJyBiZWxvdyAhISEKKyMKKyMgQ1RfQ09NUF9UT09MUyBpcyBub3Qgc2V0CisKKyMKKyMgVGVzdCBzdWl0ZQorIworIyBDVF9URVNUX1NVSVRFX0dDQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYWxwaGFldjY3LXVua25vd24tbGludXgtZ251L3JlcG9ydGVkLmJ5IGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2FscGhhZXY2Ny11bmtub3duLWxpbnV4LWdudS9yZXBvcnRlZC5ieQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzAyM2EwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2FscGhhZXY2Ny11bmtub3duLWxpbnV4LWdudS9yZXBvcnRlZC5ieQpAQCAtMCwwICsxLDMgQEAKK3JlcG9ydGVyX25hbWU9IklvYW5uaXMgRS4gVmVuZXRpcyIKK3JlcG9ydGVyX3VybD0iaHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2Nyb3NzZ2NjLzIwMTEtMDUvbXNnMDAwMDUuaHRtbCIKK3JlcG9ydGVyX2NvbW1lbnQ9IiIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0tYmFyZV9uZXdsaWJfY29ydGV4X20zX25vbW11LWVhYmkvY3Jvc3N0b29sLmNvbmZpZyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0tYmFyZV9uZXdsaWJfY29ydGV4X20zX25vbW11LWVhYmkvY3Jvc3N0b29sLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzA4NTRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2FybS1iYXJlX25ld2xpYl9jb3J0ZXhfbTNfbm9tbXUtZWFiaS9jcm9zc3Rvb2wuY29uZmlnCkBAIC0wLDAgKzEsNDE2IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIGNyb3NzdG9vbC1ORyBoZ19kZWZhdWx0QDI3MjFfN2I2NDc0NmIwYWIzIENvbmZpZ3VyYXRpb24KKyMgU3VuIE9jdCAxNiAxNzoyMTo1NiAyMDExCisjCitDVF9DT05GSUdVUkVfaGFzX3h6dXRpbHM9eQorQ1RfQ09ORklHVVJFX2hhc19jdnM9eQorQ1RfQ09ORklHVVJFX2hhc19zdm49eQorQ1RfTU9EVUxFUz15CisKKyMKKyMgUGF0aHMgYW5kIG1pc2Mgb3B0aW9ucworIworCisjCisjIGNyb3NzdG9vbC1ORyBiZWhhdmlvcgorIworIyBDVF9PQlNPTEVURSBpcyBub3Qgc2V0CitDVF9FWFBFUklNRU5UQUw9eQorIyBDVF9ERUJVR19DVCBpcyBub3Qgc2V0CisKKyMKKyMgUGF0aHMKKyMKK0NUX0xPQ0FMX1RBUkJBTExTX0RJUj0iJHtIT01FfS9zcmMiCitDVF9TQVZFX1RBUkJBTExTPXkKK0NUX1dPUktfRElSPSIke0NUX1RPUF9ESVJ9Ly5idWlsZCIKK0NUX1BSRUZJWF9ESVI9IiR7SE9NRX0veC10b29scy8ke0NUX1RBUkdFVH0iCitDVF9JTlNUQUxMX0RJUj0iJHtDVF9QUkVGSVhfRElSfSIKK0NUX1JNX1JGX1BSRUZJWF9ESVI9eQorQ1RfUkVNT1ZFX0RPQ1M9eQorQ1RfSU5TVEFMTF9ESVJfUk89eQorQ1RfU1RSSVBfQUxMX1RPT0xDSEFJTl9FWEVDVVRBQkxFUz15CisKKyMKKyMgRG93bmxvYWRpbmcKKyMKKyMgQ1RfRk9SQklEX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfRk9SQ0VfRE9XTkxPQUQgaXMgbm90IHNldAorQ1RfQ09OTkVDVF9USU1FT1VUPTEwCisjIENUX09OTFlfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9VU0VfTUlSUk9SIGlzIG5vdCBzZXQKKworIworIyBFeHRyYWN0aW5nCisjCisjIENUX0ZPUkNFX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfT1ZFUklERV9DT05GSUdfR1VFU1NfU1VCPXkKKyMgQ1RfT05MWV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX1BBVENIX0JVTkRMRUQ9eQorIyBDVF9QQVRDSF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9GQUxMQkFDS19MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0ZBTExCQUNLX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9OT05FIGlzIG5vdCBzZXQKK0NUX1BBVENIX09SREVSPSJidW5kbGVkIgorCisjCisjIEJ1aWxkIGJlaGF2aW9yCisjCitDVF9QQVJBTExFTF9KT0JTPTAKK0NUX0xPQUQ9MAorQ1RfVVNFX1BJUEVTPXkKK0NUX0VYVFJBX0ZMQUdTX0ZPUl9IT1NUPSIiCisjIENUX0NPTkZJR19TSEVMTF9TSCBpcyBub3Qgc2V0CisjIENUX0NPTkZJR19TSEVMTF9BU0ggaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMX0JBU0g9eQorIyBDVF9DT05GSUdfU0hFTExfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTD0iJHtiYXNofSIKKworIworIyBMb2dnaW5nCisjCisjIENUX0xPR19FUlJPUiBpcyBub3Qgc2V0CisjIENUX0xPR19XQVJOIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0lORk8gaXMgbm90IHNldAorQ1RfTE9HX0VYVFJBPXkKKyMgQ1RfTE9HX0FMTCBpcyBub3Qgc2V0CisjIENUX0xPR19ERUJVRyBpcyBub3Qgc2V0CitDVF9MT0dfTEVWRUxfTUFYPSJFWFRSQSIKKyMgQ1RfTE9HX1NFRV9UT09MU19XQVJOIGlzIG5vdCBzZXQKK0NUX0xPR19QUk9HUkVTU19CQVI9eQorQ1RfTE9HX1RPX0ZJTEU9eQorQ1RfTE9HX0ZJTEVfQ09NUFJFU1M9eQorCisjCisjIFRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIPSJhcm0iCitDVF9BUkNIX1NVUFBPUlRTX0JPVEhfTU1VPXkKK0NUX0FSQ0hfU1VQUE9SVFNfQk9USF9FTkRJQU49eQorQ1RfQVJDSF9TVVBQT1JUU18zMj15CitDVF9BUkNIX1NVUFBPUlRfQVJDSD15CitDVF9BUkNIX1NVUFBPUlRfQ1BVPXkKK0NUX0FSQ0hfU1VQUE9SVF9UVU5FPXkKK0NUX0FSQ0hfU1VQUE9SVF9GUFU9eQorQ1RfQVJDSF9ERUZBVUxUX0hBU19NTVU9eQorQ1RfQVJDSF9ERUZBVUxUX0xFPXkKK0NUX0FSQ0hfREVGQVVMVF8zMj15CitDVF9BUkNIX0FSQ0g9IiIKK0NUX0FSQ0hfQ1BVPSJjb3J0ZXgtbTMiCitDVF9BUkNIX1RVTkU9ImNvcnRleC1tMyIKK0NUX0FSQ0hfRlBVPSIiCisjIENUX0FSQ0hfQkUgaXMgbm90IHNldAorQ1RfQVJDSF9MRT15CitDVF9BUkNIXzMyPXkKK0NUX0FSQ0hfQklUTkVTUz0zMgorIyBDVF9BUkNIX0ZMT0FUX0hXIGlzIG5vdCBzZXQKK0NUX0FSQ0hfRkxPQVRfU1c9eQorQ1RfVEFSR0VUX0NGTEFHUz0iIgorQ1RfVEFSR0VUX0xERkxBR1M9IiIKKyMgQ1RfQVJDSF9hbHBoYSBpcyBub3Qgc2V0CitDVF9BUkNIX2FybT15CisjIENUX0FSQ0hfYXZyMzIgaXMgbm90IHNldAorIyBDVF9BUkNIX2JsYWNrZmluIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9tNjhrIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9taXBzIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9wb3dlcnBjIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zMzkwIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zaCBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc3BhcmMgaXMgbm90IHNldAorIyBDVF9BUkNIX3g4NiBpcyBub3Qgc2V0CitDVF9BUkNIX2FscGhhX0FWQUlMQUJMRT15CitDVF9BUkNIX2FybV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hdnIzMl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9ibGFja2Zpbl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9tNjhrX0FWQUlMQUJMRT15CitDVF9BUkNIX21pcHNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfcG93ZXJwY19BVkFJTEFCTEU9eQorQ1RfQVJDSF9zMzkwX0FWQUlMQUJMRT15CitDVF9BUkNIX3NoX0FWQUlMQUJMRT15CitDVF9BUkNIX3NwYXJjX0FWQUlMQUJMRT15CitDVF9BUkNIX3g4Nl9BVkFJTEFCTEU9eQorCisjCisjIEdlbmVyaWMgdGFyZ2V0IG9wdGlvbnMKKyMKKyMgQ1RfQVJDSF9VU0VfTU1VIGlzIG5vdCBzZXQKKworIworIyBUYXJnZXQgb3B0aW1pc2F0aW9ucworIworCisjCisjIGFybSBvdGhlciBvcHRpb25zCisjCitDVF9BUkNIX0FSTV9NT0RFPSJ0aHVtYiIKKyMgQ1RfQVJDSF9BUk1fTU9ERV9BUk0gaXMgbm90IHNldAorQ1RfQVJDSF9BUk1fTU9ERV9USFVNQj15CisjIENUX0FSQ0hfQVJNX0lOVEVSV09SS0lORyBpcyBub3Qgc2V0CitDVF9BUkNIX0FSTV9FQUJJPXkKKworIworIyBUb29sY2hhaW4gb3B0aW9ucworIworCisjCisjIEdlbmVyYWwgdG9vbGNoYWluIG9wdGlvbnMKKyMKK0NUX0ZPUkNFX1NZU1JPT1Q9eQorQ1RfVVNFX1NZU1JPT1Q9eQorQ1RfU1lTUk9PVF9OQU1FPSJzeXNyb290IgorQ1RfU1lTUk9PVF9ESVJfUFJFRklYPSIiCitDVF9XQU5UU19TVEFUSUNfTElOSz15CisjIENUX1NUQVRJQ19UT09MQ0hBSU4gaXMgbm90IHNldAorQ1RfVE9PTENIQUlOX1BLR1ZFUlNJT049IiIKK0NUX1RPT0xDSEFJTl9CVUdVUkw9IiIKKworIworIyBUdXBsZSBjb21wbGV0aW9uIGFuZCBhbGlhc2luZworIworQ1RfVEFSR0VUX1ZFTkRPUj0iYmFyZV9uZXdsaWJfY29ydGV4X20zX25vbW11IgorQ1RfVEFSR0VUX0FMSUFTX1NFRF9FWFBSPSIiCitDVF9UQVJHRVRfQUxJQVM9IiIKKworIworIyBUb29sY2hhaW4gdHlwZQorIworIyBDVF9OQVRJVkUgaXMgbm90IHNldAorQ1RfQ1JPU1M9eQorIyBDVF9DUk9TU19OQVRJVkUgaXMgbm90IHNldAorIyBDVF9DQU5BRElBTiBpcyBub3Qgc2V0CitDVF9UT09MQ0hBSU5fVFlQRT0iY3Jvc3MiCisKKyMKKyMgQnVpbGQgc3lzdGVtCisjCitDVF9CVUlMRD0iIgorQ1RfQlVJTERfUFJFRklYPSIiCitDVF9CVUlMRF9TVUZGSVg9IiIKKworIworIyBPcGVyYXRpbmcgU3lzdGVtCisjCitDVF9CQVJFX01FVEFMPXkKK0NUX0tFUk5FTD0iYmFyZS1tZXRhbCIKK0NUX0tFUk5FTF9iYXJlX21ldGFsPXkKKyMgQ1RfS0VSTkVMX2xpbnV4IGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9iYXJlX21ldGFsX0FWQUlMQUJMRT15CitDVF9LRVJORUxfbGludXhfQVZBSUxBQkxFPXkKK0NUX0tFUk5FTF9taW5ndzMyX0FWQUlMQUJMRT15CisKKyMKKyMgQ29tbW9uIGtlcm5lbCBvcHRpb25zCisjCisKKyMKKyMgQmluYXJ5IHV0aWxpdGllcworIworIyBDVF9BUkNIX0JJTkZNVF9FTEYgaXMgbm90IHNldAorQ1RfQVJDSF9CSU5GTVRfRkxBVD15CisjIENUX0FSQ0hfQklORk1UX0ZEUElDIGlzIG5vdCBzZXQKKworIworIyBHTlUgYmludXRpbHMKKyMKKyMgQ1RfQklOVVRJTFNfVl8yXzIxXzUzIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfVl8yXzIxXzFhIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfVl8yXzIwXzFhIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX1ZfMl8xOV8xYT15CisjIENUX0JJTlVUSUxTX1ZfMl8xOGEgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVkVSU0lPTj0iMi4xOS4xYSIKK0NUX0JJTlVUSUxTXzJfMTlfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfMl8xOF9vcl9sYXRlcj15CitDVF9CSU5VVElMU19HT0xEX1NVUFBPUlRTX0FSQ0g9eQorQ1RfQklOVVRJTFNfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0JJTlVUSUxTX0xJTktFUl9MRD15CitDVF9CSU5VVElMU19MSU5LRVJTX0xJU1Q9ImxkIgorQ1RfQklOVVRJTFNfTElOS0VSX0RFRkFVTFQ9ImJmZCIKK0NUX0JJTlVUSUxTX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorCisjCisjIGVsZjJmbHQKKyMKK0NUX0VMRjJGTFRfQ1ZTSEVBRD15CisjIENUX0VMRjJGTFRfQ1ZTX1NOQVBTSE9UIGlzIG5vdCBzZXQKK0NUX0VMRjJGTFRfVkVSU0lPTj0iaGVhZCIKK0NUX0VMRjJGTFRfRVhUUkFfQ09ORklHX0FSUkFZPSIiCisKKyMKKyMgQyBjb21waWxlcgorIworQ1RfQ0M9ImdjYyIKK0NUX0NDX1ZFUlNJT049IjQuNC4xIgorQ1RfQ0NfZ2NjPXkKKyMgQ1RfQ0NfR0NDX1NIT1dfTElOQVJPIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzZfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF82XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF81XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzIgaXMgbm90IHNldAorQ1RfQ0NfVl80XzRfMT15CisjIENUX0NDX1ZfNF80XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM182IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfMl80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfMiBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfNF8yX29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzNfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDXzRfND15CitDVF9DQ19HQ0NfNF80X29yX2xhdGVyPXkKK0NUX0NDX0dDQ19IQVNfR1JBUEhJVEU9eQorQ1RfQ0NfR0NDX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9DQ19HQ0NfVVNFX0dNUF9NUEZSPXkKK0NUX0NDX0dDQ19VU0VfUFBMX0NMT09HPXkKK0NUX0NDX1NVUFBPUlRfQ1hYPXkKK0NUX0NDX1NVUFBPUlRfRk9SVFJBTj15CitDVF9DQ19TVVBQT1JUX0pBVkE9eQorQ1RfQ0NfU1VQUE9SVF9BREE9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDPXkKK0NUX0NDX1NVUFBPUlRfT0JKQ1hYPXkKKworIworIyBBZGRpdGlvbmFsIHN1cHBvcnRlZCBsYW5ndWFnZXM6CisjCitDVF9DQ19MQU5HX0NYWD15CisKKyMKKyMgZ2NjIG90aGVyIG9wdGlvbnMKKyMKK0NUX0NDX0VOQUJMRV9DWFhfRkxBR1M9IiIKK0NUX0NDX0NPUkVfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9DQ19TVEFUSUNfTElCU1REQ1hYPXkKKworIworIyBPcHRpbWlzYXRpb24gZmVhdHVyZXMKKyMKK0NUX0NDX0dDQ19VU0VfR1JBUEhJVEU9eQorCisjCisjIFNldHRpbmdzIGZvciBsaWJyYXJpZXMgcnVubmluZyBvbiB0YXJnZXQKKyMKK0NUX0NDX0dDQ19FTkFCTEVfVEFSR0VUX09QVFNQQUNFPXkKKyMgQ1RfQ0NfR0NDX0xJQk1VREZMQVAgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCR09NUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJTU1AgaXMgbm90IHNldAorCisjCisjIE1pc2MuIG9ic2N1cmUgb3B0aW9ucy4KKyMKKyMgQ1RfQ0NfR0NDX0RJU0FCTEVfUENIIGlzIG5vdCBzZXQKK0NUX0NDX0dDQ19MREJMXzEyOD1tCisKKyMKKyMgQy1saWJyYXJ5CisjCitDVF9MSUJDPSJuZXdsaWIiCitDVF9MSUJDX1ZFUlNJT049Im5ld2xpYi0xXzE4XzAiCitDVF9MSUJDX25ld2xpYj15CisjIENUX0xJQkNfbm9uZSBpcyBub3Qgc2V0CitDVF9MSUJDX2VnbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19nbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19taW5nd19BVkFJTEFCTEU9eQorQ1RfTElCQ19uZXdsaWJfQVZBSUxBQkxFPXkKKyMgQ1RfTElCQ19ORVdMSUJfVl8xXzE5XzAgaXMgbm90IHNldAorIyBDVF9MSUJDX05FV0xJQl9WXzFfMThfMCBpcyBub3Qgc2V0CisjIENUX0xJQkNfTkVXTElCX1ZfMV8xN18wIGlzIG5vdCBzZXQKK0NUX0xJQkNfTkVXTElCX0NWUz15CisKKyMKKyMgQXJjaGl0ZWN0dXJlIHNwZWNpZmljIG9wdGlvbnMKKyMKK0NUX0xJQkNfbm9uZV9BVkFJTEFCTEU9eQorQ1RfTElCQ191Q2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfU1VQUE9SVF9USFJFQURTX05PTkU9eQorQ1RfVEhSRUFEUz0ibm9uZSIKKworIworIyBDb21tb24gQyBsaWJyYXJ5IG9wdGlvbnMKKyMKK0NUX1RIUkVBRFNfTk9ORT15CisKKyMKKyMgbmV3bGliIG90aGVyIG9wdGlvbnMKKyMKKyMgQ1RfTElCQ19ORVdMSUJfSU9fQzk5Rk1UIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19ORVdMSUJfSU9fTEwgaXMgbm90IHNldAorIyBDVF9MSUJDX05FV0xJQl9JT19GTE9BVCBpcyBub3Qgc2V0CisjIENUX0xJQkNfTkVXTElCX0RJU0FCTEVfU1VQUExJRURfU1lTQ0FMTFMgaXMgbm90IHNldAorCisjCisjIERlYnVnIGZhY2lsaXRpZXMKKyMKKyMgQ1RfREVCVUdfZG1hbGxvYyBpcyBub3Qgc2V0CisjIENUX0RFQlVHX2R1bWEgaXMgbm90IHNldAorIyBDVF9ERUJVR19nZGIgaXMgbm90IHNldAorIyBDVF9ERUJVR19sdHJhY2UgaXMgbm90IHNldAorIyBDVF9ERUJVR19zdHJhY2UgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMKKyMKK0NUX0NPTVBMSUJTX05FRURFRD15CitDVF9HTVBfTkVFREVEPXkKK0NUX01QRlJfTkVFREVEPXkKK0NUX1BQTF9ORUVERUQ9eQorQ1RfQ0xPT0dfTkVFREVEPXkKK0NUX0NPTVBMSUJTPXkKK0NUX0dNUD15CitDVF9NUEZSPXkKK0NUX1BQTD15CitDVF9DTE9PRz15CisjIENUX0dNUF9WXzVfMF8yIGlzIG5vdCBzZXQKKyMgQ1RfR01QX1ZfNV8wXzEgaXMgbm90IHNldAorQ1RfR01QX1ZfNF8zXzI9eQorIyBDVF9HTVBfVl80XzNfMSBpcyBub3Qgc2V0CisjIENUX0dNUF9WXzRfM18wIGlzIG5vdCBzZXQKK0NUX0dNUF9WRVJTSU9OPSI0LjMuMiIKKyMgQ1RfTVBGUl9WXzNfMF8xIGlzIG5vdCBzZXQKKyMgQ1RfTVBGUl9WXzNfMF8wIGlzIG5vdCBzZXQKK0NUX01QRlJfVl8yXzRfMj15CisjIENUX01QRlJfVl8yXzRfMSBpcyBub3Qgc2V0CisjIENUX01QRlJfVl8yXzRfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZFUlNJT049IjIuNC4yIgorIyBDVF9QUExfVl8wXzExXzIgaXMgbm90IHNldAorIyBDVF9QUExfVl8wXzExXzEgaXMgbm90IHNldAorIyBDVF9QUExfVl8wXzExIGlzIG5vdCBzZXQKK0NUX1BQTF9WXzBfMTBfMj15CitDVF9QUExfVkVSU0lPTj0iMC4xMC4yIgorIyBDVF9DTE9PR19WXzBfMTVfMTEgaXMgbm90IHNldAorIyBDVF9DTE9PR19WXzBfMTVfMTAgaXMgbm90IHNldAorQ1RfQ0xPT0dfVl8wXzE1Xzk9eQorIyBDVF9DTE9PR19WXzBfMTVfOCBpcyBub3Qgc2V0CisjIENUX0NMT09HX1ZfMF8xNV83IGlzIG5vdCBzZXQKKyMgQ1RfQ0xPT0dfVl8wXzE1XzYgaXMgbm90IHNldAorQ1RfQ0xPT0dfVkVSU0lPTj0iMC4xNS45IgorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMgY29tbW9uIG9wdGlvbnMKKyMKKyMgQ1RfQ09NUExJQlNfQ0hFQ0sgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiB0b29scworIworCisjCisjIFJFQUQgSEVMUCBiZWZvcmUgeW91IHNheSAnWScgYmVsb3cgISEhCisjCisjIENUX0NPTVBfVE9PTFMgaXMgbm90IHNldAorCisjCisjIFRlc3Qgc3VpdGUKKyMKKyMgQ1RfVEVTVF9TVUlURV9HQ0MgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2FybS1iYXJlX25ld2xpYl9jb3J0ZXhfbTNfbm9tbXUtZWFiaS9yZXBvcnRlZC5ieSBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0tYmFyZV9uZXdsaWJfY29ydGV4X20zX25vbW11LWVhYmkvcmVwb3J0ZWQuYnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMwMjM3ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0tYmFyZV9uZXdsaWJfY29ydGV4X20zX25vbW11LWVhYmkvcmVwb3J0ZWQuYnkKQEAgLTAsMCArMSwzIEBACityZXBvcnRlcl9uYW1lPSJZYW5uIEUuIE1PUklOIgorcmVwb3J0ZXJfdXJsPSJodHRwOi8veW1vcmluLmlzLWEtZ2Vlay5vcmcvcHJvamVjdHMvY3Jvc3N0b29sIgorcmVwb3J0ZXJfY29tbWVudD0iRXhwZXJpbWVudGFsIHRvb2xjaGFpbiBmb3IgQVJNIGNvcnRleC1tMyBpbiBUaHVtYi1vbmx5LCBub01NVSwgYW5kIG5ld2xpYi4iCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYXJtLWNvcnRleF9hMTUtbGludXgtZ251ZWFiaS9jcm9zc3Rvb2wuY29uZmlnIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2FybS1jb3J0ZXhfYTE1LWxpbnV4LWdudWVhYmkvY3Jvc3N0b29sLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWFkYjIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2FybS1jb3J0ZXhfYTE1LWxpbnV4LWdudWVhYmkvY3Jvc3N0b29sLmNvbmZpZwpAQCAtMCwwICsxLDU1OSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBjcm9zc3Rvb2wtTkcgaGdfZGVmYXVsdEAyNzIxXzdiNjQ3NDZiMGFiMyBDb25maWd1cmF0aW9uCisjIFN1biBPY3QgMTYgMTc6MTg6MzggMjAxMQorIworQ1RfQ09ORklHVVJFX2hhc194enV0aWxzPXkKK0NUX0NPTkZJR1VSRV9oYXNfY3ZzPXkKK0NUX0NPTkZJR1VSRV9oYXNfc3ZuPXkKK0NUX01PRFVMRVM9eQorCisjCisjIFBhdGhzIGFuZCBtaXNjIG9wdGlvbnMKKyMKKworIworIyBjcm9zc3Rvb2wtTkcgYmVoYXZpb3IKKyMKKyMgQ1RfT0JTT0xFVEUgaXMgbm90IHNldAorQ1RfRVhQRVJJTUVOVEFMPXkKKyMgQ1RfREVCVUdfQ1QgaXMgbm90IHNldAorCisjCisjIFBhdGhzCisjCitDVF9MT0NBTF9UQVJCQUxMU19ESVI9IiR7SE9NRX0vc3JjIgorQ1RfU0FWRV9UQVJCQUxMUz15CitDVF9XT1JLX0RJUj0iJHtDVF9UT1BfRElSfS8uYnVpbGQiCitDVF9QUkVGSVhfRElSPSIke0hPTUV9L3gtdG9vbHMvJHtDVF9UQVJHRVR9IgorQ1RfSU5TVEFMTF9ESVI9IiR7Q1RfUFJFRklYX0RJUn0iCitDVF9STV9SRl9QUkVGSVhfRElSPXkKK0NUX1JFTU9WRV9ET0NTPXkKK0NUX0lOU1RBTExfRElSX1JPPXkKK0NUX1NUUklQX0FMTF9UT09MQ0hBSU5fRVhFQ1VUQUJMRVM9eQorCisjCisjIERvd25sb2FkaW5nCisjCisjIENUX0ZPUkJJRF9ET1dOTE9BRCBpcyBub3Qgc2V0CisjIENUX0ZPUkNFX0RPV05MT0FEIGlzIG5vdCBzZXQKK0NUX0NPTk5FQ1RfVElNRU9VVD0xMAorIyBDVF9PTkxZX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfVVNFX01JUlJPUiBpcyBub3Qgc2V0CisKKyMKKyMgRXh0cmFjdGluZworIworIyBDVF9GT1JDRV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX09WRVJJREVfQ09ORklHX0dVRVNTX1NVQj15CisjIENUX09OTFlfRVhUUkFDVCBpcyBub3Qgc2V0CitDVF9QQVRDSF9CVU5ETEVEPXkKKyMgQ1RfUEFUQ0hfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9CVU5ETEVEX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTE9DQUxfQlVORExFRCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfRkFMTEJBQ0tfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9GQUxMQkFDS19CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTk9ORSBpcyBub3Qgc2V0CitDVF9QQVRDSF9PUkRFUj0iYnVuZGxlZCIKKworIworIyBCdWlsZCBiZWhhdmlvcgorIworQ1RfUEFSQUxMRUxfSk9CUz0wCitDVF9MT0FEPTAKK0NUX1VTRV9QSVBFUz15CitDVF9FWFRSQV9GTEFHU19GT1JfSE9TVD0iIgorIyBDVF9DT05GSUdfU0hFTExfU0ggaXMgbm90IHNldAorIyBDVF9DT05GSUdfU0hFTExfQVNIIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTF9CQVNIPXkKKyMgQ1RfQ09ORklHX1NIRUxMX0NVU1RPTSBpcyBub3Qgc2V0CitDVF9DT05GSUdfU0hFTEw9IiR7YmFzaH0iCisKKyMKKyMgTG9nZ2luZworIworIyBDVF9MT0dfRVJST1IgaXMgbm90IHNldAorIyBDVF9MT0dfV0FSTiBpcyBub3Qgc2V0CisjIENUX0xPR19JTkZPIGlzIG5vdCBzZXQKK0NUX0xPR19FWFRSQT15CisjIENUX0xPR19BTEwgaXMgbm90IHNldAorIyBDVF9MT0dfREVCVUcgaXMgbm90IHNldAorQ1RfTE9HX0xFVkVMX01BWD0iRVhUUkEiCisjIENUX0xPR19TRUVfVE9PTFNfV0FSTiBpcyBub3Qgc2V0CitDVF9MT0dfUFJPR1JFU1NfQkFSPXkKK0NUX0xPR19UT19GSUxFPXkKK0NUX0xPR19GSUxFX0NPTVBSRVNTPXkKKworIworIyBUYXJnZXQgb3B0aW9ucworIworQ1RfQVJDSD0iYXJtIgorQ1RfQVJDSF9TVVBQT1JUU19CT1RIX01NVT15CitDVF9BUkNIX1NVUFBPUlRTX0JPVEhfRU5ESUFOPXkKK0NUX0FSQ0hfU1VQUE9SVFNfMzI9eQorQ1RfQVJDSF9TVVBQT1JUX0FSQ0g9eQorQ1RfQVJDSF9TVVBQT1JUX0NQVT15CitDVF9BUkNIX1NVUFBPUlRfVFVORT15CitDVF9BUkNIX1NVUFBPUlRfRlBVPXkKK0NUX0FSQ0hfREVGQVVMVF9IQVNfTU1VPXkKK0NUX0FSQ0hfREVGQVVMVF9MRT15CitDVF9BUkNIX0RFRkFVTFRfMzI9eQorQ1RfQVJDSF9BUkNIPSIiCitDVF9BUkNIX0NQVT0iY29ydGV4LWExNSIKK0NUX0FSQ0hfVFVORT0iY29ydGV4LWExNSIKK0NUX0FSQ0hfRlBVPSJuZW9uLXZmcHY0IgorIyBDVF9BUkNIX0JFIGlzIG5vdCBzZXQKK0NUX0FSQ0hfTEU9eQorQ1RfQVJDSF8zMj15CitDVF9BUkNIX0JJVE5FU1M9MzIKK0NUX0FSQ0hfRkxPQVRfSFc9eQorIyBDVF9BUkNIX0ZMT0FUX1NXIGlzIG5vdCBzZXQKK0NUX1RBUkdFVF9DRkxBR1M9IiIKK0NUX1RBUkdFVF9MREZMQUdTPSIiCisjIENUX0FSQ0hfYWxwaGEgaXMgbm90IHNldAorQ1RfQVJDSF9hcm09eQorIyBDVF9BUkNIX2F2cjMyIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9ibGFja2ZpbiBpcyBub3Qgc2V0CisjIENUX0FSQ0hfbTY4ayBpcyBub3Qgc2V0CisjIENUX0FSQ0hfbWlwcyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfcG93ZXJwYyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfczM5MCBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc2ggaXMgbm90IHNldAorIyBDVF9BUkNIX3NwYXJjIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF94ODYgaXMgbm90IHNldAorQ1RfQVJDSF9hbHBoYV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hcm1fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXZyMzJfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYmxhY2tmaW5fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbTY4a19BVkFJTEFCTEU9eQorQ1RfQVJDSF9taXBzX0FWQUlMQUJMRT15CitDVF9BUkNIX3Bvd2VycGNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfczM5MF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zaF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zcGFyY19BVkFJTEFCTEU9eQorQ1RfQVJDSF94ODZfQVZBSUxBQkxFPXkKKworIworIyBHZW5lcmljIHRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIX1VTRV9NTVU9eQorCisjCisjIFRhcmdldCBvcHRpbWlzYXRpb25zCisjCisKKyMKKyMgYXJtIG90aGVyIG9wdGlvbnMKKyMKK0NUX0FSQ0hfQVJNX01PREU9ImFybSIKK0NUX0FSQ0hfQVJNX01PREVfQVJNPXkKKyMgQ1RfQVJDSF9BUk1fTU9ERV9USFVNQiBpcyBub3Qgc2V0CisjIENUX0FSQ0hfQVJNX0lOVEVSV09SS0lORyBpcyBub3Qgc2V0CitDVF9BUkNIX0FSTV9FQUJJPXkKKworIworIyBUb29sY2hhaW4gb3B0aW9ucworIworCisjCisjIEdlbmVyYWwgdG9vbGNoYWluIG9wdGlvbnMKKyMKK0NUX0ZPUkNFX1NZU1JPT1Q9eQorQ1RfVVNFX1NZU1JPT1Q9eQorQ1RfU1lTUk9PVF9OQU1FPSJzeXNyb290IgorQ1RfU1lTUk9PVF9ESVJfUFJFRklYPSIiCitDVF9XQU5UU19TVEFUSUNfTElOSz15CisjIENUX1NUQVRJQ19UT09MQ0hBSU4gaXMgbm90IHNldAorQ1RfVE9PTENIQUlOX1BLR1ZFUlNJT049IiIKK0NUX1RPT0xDSEFJTl9CVUdVUkw9IiIKKworIworIyBUdXBsZSBjb21wbGV0aW9uIGFuZCBhbGlhc2luZworIworQ1RfVEFSR0VUX1ZFTkRPUj0iY29ydGV4X2ExNSIKK0NUX1RBUkdFVF9BTElBU19TRURfRVhQUj0iIgorQ1RfVEFSR0VUX0FMSUFTPSIiCisKKyMKKyMgVG9vbGNoYWluIHR5cGUKKyMKKyMgQ1RfTkFUSVZFIGlzIG5vdCBzZXQKK0NUX0NST1NTPXkKKyMgQ1RfQ1JPU1NfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ1RfQ0FOQURJQU4gaXMgbm90IHNldAorQ1RfVE9PTENIQUlOX1RZUEU9ImNyb3NzIgorCisjCisjIEJ1aWxkIHN5c3RlbQorIworQ1RfQlVJTEQ9IiIKK0NUX0JVSUxEX1BSRUZJWD0iIgorQ1RfQlVJTERfU1VGRklYPSIiCisKKyMKKyMgT3BlcmF0aW5nIFN5c3RlbQorIworQ1RfS0VSTkVMX1NVUFBPUlRTX1NIQVJFRF9MSUJTPXkKK0NUX0tFUk5FTD0ibGludXgiCitDVF9LRVJORUxfVkVSU0lPTj0iMi42LjM4LjgiCisjIENUX0tFUk5FTF9iYXJlX21ldGFsIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9saW51eD15CitDVF9LRVJORUxfYmFyZV9tZXRhbF9BVkFJTEFCTEU9eQorQ1RfS0VSTkVMX2xpbnV4X0FWQUlMQUJMRT15CisjIENUX0tFUk5FTF9WXzNfMF80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzMgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8xIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM5XzQgaXMgbm90IHNldAorQ1RfS0VSTkVMX1ZfMl82XzM4Xzg9eQorIyBDVF9LRVJORUxfVl8yXzZfMzdfNiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNl80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM1XzE0IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM0XzEwIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzMzXzE5IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzMyXzQ2IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzMxXzE0IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzI3XzU5IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX0xJTlVYX0NVU1RPTSBpcyBub3Qgc2V0CitDVF9LRVJORUxfbWluZ3czMl9BVkFJTEFCTEU9eQorCisjCisjIENvbW1vbiBrZXJuZWwgb3B0aW9ucworIworQ1RfU0hBUkVEX0xJQlM9eQorCisjCisjIGxpbnV4IG90aGVyIG9wdGlvbnMKKyMKK0NUX0tFUk5FTF9MSU5VWF9WRVJCT1NJVFlfMD15CisjIENUX0tFUk5FTF9MSU5VWF9WRVJCT1NJVFlfMSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9MSU5VWF9WRVJCT1NJVFlfMiBpcyBub3Qgc2V0CitDVF9LRVJORUxfTElOVVhfVkVSQk9TRV9MRVZFTD0wCitDVF9LRVJORUxfTElOVVhfSU5TVEFMTF9DSEVDSz15CisKKyMKKyMgQmluYXJ5IHV0aWxpdGllcworIworQ1RfQVJDSF9CSU5GTVRfRUxGPXkKKworIworIyBHTlUgYmludXRpbHMKKyMKKyMgQ1RfQklOVVRJTFNfVl8yXzIxXzUzIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX1ZfMl8yMV8xYT15CisjIENUX0JJTlVUSUxTX1ZfMl8yMF8xYSBpcyBub3Qgc2V0CisjIENUX0JJTlVUSUxTX1ZfMl8xOV8xYSBpcyBub3Qgc2V0CisjIENUX0JJTlVUSUxTX1ZfMl8xOGEgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVkVSU0lPTj0iMi4yMS4xYSIKK0NUX0JJTlVUSUxTXzJfMjFfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfMl8yMF9vcl9sYXRlcj15CitDVF9CSU5VVElMU18yXzE5X29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMThfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfSEFTX0dPTEQ9eQorQ1RfQklOVVRJTFNfR09MRF9TVVBQT1JUU19BUkNIPXkKK0NUX0JJTlVUSUxTX0hBU19QTFVHSU5TPXkKK0NUX0JJTlVUSUxTX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9CSU5VVElMU19GT1JDRV9MRF9CRkQ9eQorIyBDVF9CSU5VVElMU19MSU5LRVJfTEQgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfTElOS0VSX0xEX0dPTEQ9eQorIyBDVF9CSU5VVElMU19MSU5LRVJfR09MRF9MRCBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19HT0xEX0lOU1RBTExFRD15CitDVF9CSU5VVElMU19HT0xEX1RIUkVBRFM9eQorQ1RfQklOVVRJTFNfTElOS0VSX0JPVEg9eQorQ1RfQklOVVRJTFNfTElOS0VSU19MSVNUPSJsZCxnb2xkIgorQ1RfQklOVVRJTFNfTERfV1JBUFBFUj15CitDVF9CSU5VVElMU19MSU5LRVJfREVGQVVMVD0iYmZkIgorIyBDVF9CSU5VVElMU19QTFVHSU5TIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorIyBDVF9CSU5VVElMU19GT1JfVEFSR0VUIGlzIG5vdCBzZXQKKworIworIyBDIGNvbXBpbGVyCisjCitDVF9DQz0iZ2NjIgorQ1RfQ0NfVkVSU0lPTj0ibGluYXJvLTQuNi0yMDExLjEwIgorQ1RfQ0NfZ2NjPXkKK0NUX0NDX0dDQ19TSE9XX0xJTkFSTz15CitDVF9DQ19WX2xpbmFyb180XzZfMjAxMV8xMD15CisjIENUX0NDX1ZfNF82XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNl8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl9saW5hcm9fNF81XzIwMTFfMTAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF81XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl9saW5hcm9fNF80XzIwMTFfMDJfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzYgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF81IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzMgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8yIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM182IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfMl80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfMiBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfNF8yX29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzNfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDXzRfNF9vcl9sYXRlcj15CitDVF9DQ19HQ0NfNF81X29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzY9eQorQ1RfQ0NfR0NDXzRfNl9vcl9sYXRlcj15CitDVF9DQ19HQ0NfSEFTX0dSQVBISVRFPXkKK0NUX0NDX0dDQ19IQVNfTFRPPXkKK0NUX0NDX0dDQ19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQ0NfR0NDX0hBU19CVUlMRF9JRD15CitDVF9DQ19HQ0NfR09MRD15CitDVF9DQ19HQ0NfVVNFX0dNUF9NUEZSPXkKK0NUX0NDX0dDQ19VU0VfUFBMX0NMT09HPXkKK0NUX0NDX0dDQ19VU0VfTVBDPXkKK0NUX0NDX0xBTkdfRk9SVFJBTj15CitDVF9DQ19TVVBQT1JUX0NYWD15CitDVF9DQ19TVVBQT1JUX0ZPUlRSQU49eQorQ1RfQ0NfU1VQUE9SVF9KQVZBPXkKK0NUX0NDX1NVUFBPUlRfQURBPXkKK0NUX0NDX1NVUFBPUlRfT0JKQz15CitDVF9DQ19TVVBQT1JUX09CSkNYWD15CisKKyMKKyMgQWRkaXRpb25hbCBzdXBwb3J0ZWQgbGFuZ3VhZ2VzOgorIworQ1RfQ0NfTEFOR19DWFg9eQorIyBDVF9DQ19MQU5HX0pBVkEgaXMgbm90IHNldAorIyBDVF9DQ19MQU5HX0FEQSBpcyBub3Qgc2V0CisjIENUX0NDX0xBTkdfT0JKQyBpcyBub3Qgc2V0CisjIENUX0NDX0xBTkdfT0JKQ1hYIGlzIG5vdCBzZXQKK0NUX0NDX0xBTkdfT1RIRVJTPSIiCisKKyMKKyMgZ2NjIG90aGVyIG9wdGlvbnMKKyMKK0NUX0NDX0VOQUJMRV9DWFhfRkxBR1M9IiIKK0NUX0NDX0NPUkVfRVhUUkFfQ09ORklHX0FSUkFZPSItLXdpdGgtZmxvYXQ9aGFyZCIKK0NUX0NDX0VYVFJBX0NPTkZJR19BUlJBWT0iLS13aXRoLWZsb2F0PWhhcmQiCitDVF9DQ19TVEFUSUNfTElCU1REQ1hYPXkKKworIworIyBPcHRpbWlzYXRpb24gZmVhdHVyZXMKKyMKK0NUX0NDX0dDQ19VU0VfR1JBUEhJVEU9eQorQ1RfQ0NfR0NDX1VTRV9MVE89eQorCisjCisjIFNldHRpbmdzIGZvciBsaWJyYXJpZXMgcnVubmluZyBvbiB0YXJnZXQKKyMKK0NUX0NDX0dDQ19FTkFCTEVfVEFSR0VUX09QVFNQQUNFPXkKKyMgQ1RfQ0NfR0NDX0xJQk1VREZMQVAgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCR09NUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJTU1AgaXMgbm90IHNldAorCisjCisjIE1pc2MuIG9ic2N1cmUgb3B0aW9ucy4KKyMKK0NUX0NDX0NYQV9BVEVYSVQ9eQorIyBDVF9DQ19HQ0NfRElTQUJMRV9QQ0ggaXMgbm90IHNldAorQ1RfQ0NfR0NDX1NKTEpfRVhDRVBUSU9OUz1tCitDVF9DQ19HQ0NfTERCTF8xMjg9bQorIyBDVF9DQ19HQ0NfQlVJTERfSUQgaXMgbm90IHNldAorCisjCisjIEMtbGlicmFyeQorIworQ1RfTElCQz0iZ2xpYmMiCitDVF9MSUJDX1ZFUlNJT049IjIuMTIuMSIKKyMgQ1RfTElCQ19lZ2xpYmMgaXMgbm90IHNldAorQ1RfTElCQ19nbGliYz15CisjIENUX0xJQkNfdUNsaWJjIGlzIG5vdCBzZXQKK0NUX0xJQkNfZWdsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX2dsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX0dMSUJDX1RBUkJBTEw9eQorIyBDVF9MSUJDX0dMSUJDX1ZfMl8xNCBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfVl8yXzEzIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19WXzJfMTJfMiBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX1ZfMl8xMl8xPXkKKyMgQ1RfTElCQ19HTElCQ19WXzJfMTFfMSBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfVl8yXzExIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19WXzJfMTBfMSBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfVl8yXzkgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX1ZfMl84IGlzIG5vdCBzZXQKK0NUX0xJQkNfbWluZ3dfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbmV3bGliX0FWQUlMQUJMRT15CitDVF9MSUJDX25vbmVfQVZBSUxBQkxFPXkKK0NUX0xJQkNfdUNsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX1NVUFBPUlRfVEhSRUFEU19BTlk9eQorQ1RfTElCQ19TVVBQT1JUX05QVEw9eQorQ1RfVEhSRUFEUz0ibnB0bCIKKworIworIyBDb21tb24gQyBsaWJyYXJ5IG9wdGlvbnMKKyMKK0NUX1RIUkVBRFNfTlBUTD15CitDVF9MSUJDX1hMREQ9eQorQ1RfTElCQ19HTElCQ19NQVlfRk9SQ0VfUE9SVFM9eQorQ1RfTElCQ19nbGliY19mYW1pbGx5PXkKK0NUX0xJQkNfR0xJQkNfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9MSUJDX0dMSUJDX0NPTkZJR1BBUk1TPSIiCitDVF9MSUJDX0dMSUJDX0VYVFJBX0NGTEFHUz0iIgorQ1RfTElCQ19FWFRSQV9DQ19BUkdTPSIiCisjIENUX0xJQkNfRU5BQkxFX0ZPUlRJRklFRF9CVUlMRCBpcyBub3Qgc2V0CisjIENUX0xJQkNfRElTQUJMRV9WRVJTSU9OSU5HIGlzIG5vdCBzZXQKK0NUX0xJQkNfT0xERVNUX0FCST0iIgorQ1RfTElCQ19HTElCQ19GT1JDRV9VTldJTkQ9eQorQ1RfTElCQ19HTElCQ19VU0VfUE9SVFM9eQorQ1RfTElCQ19BRERPTlNfTElTVD0iIgorIyBDVF9MSUJDX0xPQ0FMRVMgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX05PTkUgaXMgbm90IHNldAorQ1RfTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9BU19IRUFERVJTPXkKKyMgQ1RfTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9DSE9TRU4gaXMgbm90IHNldAorQ1RfTElCQ19HTElCQ19NSU5fS0VSTkVMPSIyLjYuMzguOCIKKworIworIyBnbGliYyBvdGhlciBvcHRpb25zCisjCisKKyMKKyMgV0FSTklORyAhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIworCisjCisjICAgRm9yIGdsaWJjID49IDIuOCwgaXQgY2FuIGhhcHBlbiB0aGF0IHRoZSB0YXJiYWxscyAgICAKKyMKKworIworIyAgIGZvciB0aGUgYWRkb25zIGFyZSBub3QgYXZhaWxhYmxlIGZvciBkb3dubG9hZC4gICAgICAgCisjCisKKyMKKyMgICBJZiB0aGF0IGhhcHBlbnMsIGJhZCBsdWNrLi4uIFRyeSBhIHByZXZpb3VzIHZlcnNpb24gIAorIworCisjCisjICAgb3IgdHJ5IGFnYWluIGxhdGVyLi4uIDotKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyMKKworIworIyBEZWJ1ZyBmYWNpbGl0aWVzCisjCitDVF9ERUJVR19kbWFsbG9jPXkKK0NUX0RNQUxMT0NfVl81XzVfMj15CitDVF9ETUFMTE9DX1ZFUlNJT049IjUuNS4yIgorQ1RfREVCVUdfZHVtYT15CitDVF9EVU1BX0E9eQorQ1RfRFVNQV9TTz15CitDVF9EVU1BX1ZfMl81XzE1PXkKK0NUX0RVTUFfVkVSU0lPTj0iMl81XzE1IgorQ1RfREVCVUdfZ2RiPXkKK0NUX0dEQl9DUk9TUz15CitDVF9HREJfQ1JPU1NfU1RBVElDPXkKK0NUX0dEQl9OQVRJVkU9eQorQ1RfR0RCX05BVElWRV9TVEFUSUM9eQorQ1RfR0RCX0dEQlNFUlZFUj15CitDVF9HREJfR0RCU0VSVkVSX1NUQVRJQz15CisKKyMKKyMgZ2RiIHZlcnNpb24KKyMKK0NUX0RFQlVHX0dEQl9TSE9XX0xJTkFSTz15CisjIENUX0dEQl9WX2xpbmFyb183XzNfMjAxMV8xMCBpcyBub3Qgc2V0CisjIENUX0dEQl9WXzdfM2EgaXMgbm90IHNldAorQ1RfR0RCX1ZfbGluYXJvXzdfMl8yMDExXzA1XzA9eQorIyBDVF9HREJfVl83XzJhIGlzIG5vdCBzZXQKKyMgQ1RfR0RCX1ZfN18xYSBpcyBub3Qgc2V0CisjIENUX0dEQl9WXzdfMF8xYSBpcyBub3Qgc2V0CisjIENUX0dEQl9WXzdfMGEgaXMgbm90IHNldAorIyBDVF9HREJfVl82XzhhIGlzIG5vdCBzZXQKK0NUX0dEQl83XzBfb3JfbGF0ZXI9eQorQ1RfR0RCX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9HREJfSU5TVEFMTF9HREJJTklUPXkKK0NUX0dEQl9WRVJTSU9OPSJsaW5hcm8tNy4yLTIwMTEuMDUtMCIKK0NUX0RFQlVHX2x0cmFjZT15CitDVF9MVFJBQ0VfVl8wXzVfMz15CisjIENUX0xUUkFDRV9WXzBfNV8yIGlzIG5vdCBzZXQKK0NUX0xUUkFDRV9WRVJTSU9OPSIwLjUuMyIKK0NUX0xUUkFDRV8wXzVfM19vcl9sYXRlcj15CitDVF9ERUJVR19zdHJhY2U9eQorIyBDVF9TVFJBQ0VfVl80XzVfMjAgaXMgbm90IHNldAorQ1RfU1RSQUNFX1ZfNF81XzE5PXkKKyMgQ1RfU1RSQUNFX1ZfNF81XzE4IGlzIG5vdCBzZXQKK0NUX1NUUkFDRV9WRVJTSU9OPSI0LjUuMTkiCisKKyMKKyMgQ29tcGFuaW9uIGxpYnJhcmllcworIworQ1RfQ09NUExJQlNfTkVFREVEPXkKK0NUX0dNUF9ORUVERUQ9eQorQ1RfTVBGUl9ORUVERUQ9eQorQ1RfUFBMX05FRURFRD15CitDVF9DTE9PR19ORUVERUQ9eQorQ1RfTVBDX05FRURFRD15CitDVF9DT01QTElCUz15CitDVF9HTVA9eQorQ1RfTVBGUj15CitDVF9QUEw9eQorQ1RfQ0xPT0c9eQorQ1RfTVBDPXkKK0NUX0xJQkVMRl9UQVJHRVQ9eQorIyBDVF9HTVBfVl81XzBfMiBpcyBub3Qgc2V0CitDVF9HTVBfVl81XzBfMT15CisjIENUX0dNUF9WXzRfM18yIGlzIG5vdCBzZXQKKyMgQ1RfR01QX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9HTVBfVl80XzNfMCBpcyBub3Qgc2V0CitDVF9HTVBfVkVSU0lPTj0iNS4wLjEiCitDVF9NUEZSX1ZfM18wXzE9eQorIyBDVF9NUEZSX1ZfM18wXzAgaXMgbm90IHNldAorIyBDVF9NUEZSX1ZfMl80XzIgaXMgbm90IHNldAorIyBDVF9NUEZSX1ZfMl80XzEgaXMgbm90IHNldAorIyBDVF9NUEZSX1ZfMl80XzAgaXMgbm90IHNldAorQ1RfTVBGUl9WRVJTSU9OPSIzLjAuMSIKK0NUX1BQTF9WXzBfMTFfMj15CisjIENUX1BQTF9WXzBfMTFfMSBpcyBub3Qgc2V0CisjIENUX1BQTF9WXzBfMTEgaXMgbm90IHNldAorIyBDVF9QUExfVl8wXzEwXzIgaXMgbm90IHNldAorQ1RfUFBMX1ZFUlNJT049IjAuMTEuMiIKK0NUX1BQTF8wXzExPXkKK0NUX1BQTF9ORUVEU19MSUJQV0w9eQorQ1RfQ0xPT0dfVl8wXzE1XzExPXkKKyMgQ1RfQ0xPT0dfVl8wXzE1XzEwIGlzIG5vdCBzZXQKKyMgQ1RfQ0xPT0dfVl8wXzE1XzkgaXMgbm90IHNldAorIyBDVF9DTE9PR19WXzBfMTVfOCBpcyBub3Qgc2V0CisjIENUX0NMT09HX1ZfMF8xNV83IGlzIG5vdCBzZXQKKyMgQ1RfQ0xPT0dfVl8wXzE1XzYgaXMgbm90IHNldAorQ1RfQ0xPT0dfVkVSU0lPTj0iMC4xNS4xMSIKK0NUX01QQ19WXzBfOT15CisjIENUX01QQ19WXzBfOF8yIGlzIG5vdCBzZXQKKyMgQ1RfTVBDX1ZfMF84XzEgaXMgbm90IHNldAorIyBDVF9NUENfVl8wXzcgaXMgbm90IHNldAorQ1RfTVBDX1ZFUlNJT049IjAuOSIKKworIworIyBsaWJlbGYgdmVyc2lvbiBuZWVkZWQgdG8gYnVpbGQgZm9yIHRhcmdldAorIworQ1RfTElCRUxGX1ZfMF84XzEzPXkKKyMgQ1RfTElCRUxGX1ZfMF84XzEyIGlzIG5vdCBzZXQKK0NUX0xJQkVMRl9WRVJTSU9OPSIwLjguMTMiCisKKyMKKyMgQ29tcGFuaW9uIGxpYnJhcmllcyBjb21tb24gb3B0aW9ucworIworIyBDVF9DT01QTElCU19DSEVDSyBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcGFuaW9uIHRvb2xzCisjCisKKyMKKyMgUkVBRCBIRUxQIGJlZm9yZSB5b3Ugc2F5ICdZJyBiZWxvdyAhISEKKyMKKyMgQ1RfQ09NUF9UT09MUyBpcyBub3Qgc2V0CisKKyMKKyMgVGVzdCBzdWl0ZQorIworQ1RfVEVTVF9TVUlURT15CitDVF9URVNUX1NVSVRFX0dDQz15CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYXJtLWNvcnRleF9hMTUtbGludXgtZ251ZWFiaS9yZXBvcnRlZC5ieSBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0tY29ydGV4X2ExNS1saW51eC1nbnVlYWJpL3JlcG9ydGVkLmJ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMDViNWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYXJtLWNvcnRleF9hMTUtbGludXgtZ251ZWFiaS9yZXBvcnRlZC5ieQpAQCAtMCwwICsxLDMgQEAKK3JlcG9ydGVyX25hbWU9ImRzcmVlZCBvbiBmcmVlbm9kZS8jY3Jvc3N0b29sLW5nIgorcmVwb3J0ZXJfdXJsPSIiCityZXBvcnRlcl9jb21tZW50PSJFbmFibGVzIGV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciBWRlAvTkVPTiBoYXJkd2FyZSBmbG9hdGluZyBwb2ludC4iCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYXJtLWNvcnRleF9hOC1saW51eC1nbnVlYWJpL2Nyb3NzdG9vbC5jb25maWcgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYXJtLWNvcnRleF9hOC1saW51eC1nbnVlYWJpL2Nyb3NzdG9vbC5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY1OTU1NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0tY29ydGV4X2E4LWxpbnV4LWdudWVhYmkvY3Jvc3N0b29sLmNvbmZpZwpAQCAtMCwwICsxLDQ3MCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBjcm9zc3Rvb2wtTkcgaGdfZGVmYXVsdEAyNzIxXzdiNjQ3NDZiMGFiMyBDb25maWd1cmF0aW9uCisjIFN1biBPY3QgMTYgMTc6MTk6MTEgMjAxMQorIworQ1RfQ09ORklHVVJFX2hhc194enV0aWxzPXkKK0NUX0NPTkZJR1VSRV9oYXNfY3ZzPXkKK0NUX0NPTkZJR1VSRV9oYXNfc3ZuPXkKK0NUX01PRFVMRVM9eQorCisjCisjIFBhdGhzIGFuZCBtaXNjIG9wdGlvbnMKKyMKKworIworIyBjcm9zc3Rvb2wtTkcgYmVoYXZpb3IKKyMKKyMgQ1RfT0JTT0xFVEUgaXMgbm90IHNldAorIyBDVF9FWFBFUklNRU5UQUwgaXMgbm90IHNldAorIyBDVF9ERUJVR19DVCBpcyBub3Qgc2V0CisKKyMKKyMgUGF0aHMKKyMKK0NUX0xPQ0FMX1RBUkJBTExTX0RJUj0iJHtIT01FfS9zcmMiCitDVF9TQVZFX1RBUkJBTExTPXkKK0NUX1dPUktfRElSPSIke0NUX1RPUF9ESVJ9Ly5idWlsZCIKK0NUX1BSRUZJWF9ESVI9IiR7SE9NRX0veC10b29scy8ke0NUX1RBUkdFVH0iCitDVF9JTlNUQUxMX0RJUj0iJHtDVF9QUkVGSVhfRElSfSIKK0NUX1JNX1JGX1BSRUZJWF9ESVI9eQorQ1RfUkVNT1ZFX0RPQ1M9eQorQ1RfSU5TVEFMTF9ESVJfUk89eQorQ1RfU1RSSVBfQUxMX1RPT0xDSEFJTl9FWEVDVVRBQkxFUz15CisKKyMKKyMgRG93bmxvYWRpbmcKKyMKKyMgQ1RfRk9SQklEX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfRk9SQ0VfRE9XTkxPQUQgaXMgbm90IHNldAorQ1RfQ09OTkVDVF9USU1FT1VUPTEwCisjIENUX09OTFlfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9VU0VfTUlSUk9SIGlzIG5vdCBzZXQKKworIworIyBFeHRyYWN0aW5nCisjCisjIENUX0ZPUkNFX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfT1ZFUklERV9DT05GSUdfR1VFU1NfU1VCPXkKKyMgQ1RfT05MWV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX1BBVENIX0JVTkRMRUQ9eQorIyBDVF9QQVRDSF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9GQUxMQkFDS19MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0ZBTExCQUNLX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9OT05FIGlzIG5vdCBzZXQKK0NUX1BBVENIX09SREVSPSJidW5kbGVkIgorCisjCisjIEJ1aWxkIGJlaGF2aW9yCisjCitDVF9QQVJBTExFTF9KT0JTPTAKK0NUX0xPQUQ9MAorQ1RfVVNFX1BJUEVTPXkKK0NUX0VYVFJBX0ZMQUdTX0ZPUl9IT1NUPSIiCisjIENUX0NPTkZJR19TSEVMTF9TSCBpcyBub3Qgc2V0CisjIENUX0NPTkZJR19TSEVMTF9BU0ggaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMX0JBU0g9eQorIyBDVF9DT05GSUdfU0hFTExfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTD0iJHtiYXNofSIKKworIworIyBMb2dnaW5nCisjCisjIENUX0xPR19FUlJPUiBpcyBub3Qgc2V0CisjIENUX0xPR19XQVJOIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0lORk8gaXMgbm90IHNldAorQ1RfTE9HX0VYVFJBPXkKKyMgQ1RfTE9HX0FMTCBpcyBub3Qgc2V0CisjIENUX0xPR19ERUJVRyBpcyBub3Qgc2V0CitDVF9MT0dfTEVWRUxfTUFYPSJFWFRSQSIKKyMgQ1RfTE9HX1NFRV9UT09MU19XQVJOIGlzIG5vdCBzZXQKK0NUX0xPR19QUk9HUkVTU19CQVI9eQorQ1RfTE9HX1RPX0ZJTEU9eQorQ1RfTE9HX0ZJTEVfQ09NUFJFU1M9eQorCisjCisjIFRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIPSJhcm0iCitDVF9BUkNIX1NVUFBPUlRTX0JPVEhfTU1VPXkKK0NUX0FSQ0hfU1VQUE9SVFNfQk9USF9FTkRJQU49eQorQ1RfQVJDSF9TVVBQT1JUU18zMj15CitDVF9BUkNIX1NVUFBPUlRfQVJDSD15CitDVF9BUkNIX1NVUFBPUlRfQ1BVPXkKK0NUX0FSQ0hfU1VQUE9SVF9UVU5FPXkKK0NUX0FSQ0hfU1VQUE9SVF9GUFU9eQorQ1RfQVJDSF9ERUZBVUxUX0hBU19NTVU9eQorQ1RfQVJDSF9ERUZBVUxUX0xFPXkKK0NUX0FSQ0hfREVGQVVMVF8zMj15CitDVF9BUkNIX0FSQ0g9ImFybXY3LWEiCitDVF9BUkNIX0NQVT0iY29ydGV4LWE4IgorQ1RfQVJDSF9UVU5FPSJjb3J0ZXgtYTgiCitDVF9BUkNIX0ZQVT0iIgorIyBDVF9BUkNIX0JFIGlzIG5vdCBzZXQKK0NUX0FSQ0hfTEU9eQorQ1RfQVJDSF8zMj15CitDVF9BUkNIX0JJVE5FU1M9MzIKKyMgQ1RfQVJDSF9GTE9BVF9IVyBpcyBub3Qgc2V0CitDVF9BUkNIX0ZMT0FUX1NXPXkKK0NUX1RBUkdFVF9DRkxBR1M9IiIKK0NUX1RBUkdFVF9MREZMQUdTPSIiCisjIENUX0FSQ0hfYWxwaGEgaXMgbm90IHNldAorQ1RfQVJDSF9hcm09eQorIyBDVF9BUkNIX2F2cjMyIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9ibGFja2ZpbiBpcyBub3Qgc2V0CisjIENUX0FSQ0hfbWlwcyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfcG93ZXJwYyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc2ggaXMgbm90IHNldAorIyBDVF9BUkNIX3NwYXJjIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF94ODYgaXMgbm90IHNldAorQ1RfQVJDSF9hbHBoYV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hcm1fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXZyMzJfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYmxhY2tmaW5fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbTY4a19BVkFJTEFCTEU9eQorQ1RfQVJDSF9taXBzX0FWQUlMQUJMRT15CitDVF9BUkNIX3Bvd2VycGNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfczM5MF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zaF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zcGFyY19BVkFJTEFCTEU9eQorQ1RfQVJDSF94ODZfQVZBSUxBQkxFPXkKKworIworIyBHZW5lcmljIHRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIX1VTRV9NTVU9eQorCisjCisjIFRhcmdldCBvcHRpbWlzYXRpb25zCisjCisKKyMKKyMgYXJtIG90aGVyIG9wdGlvbnMKKyMKK0NUX0FSQ0hfQVJNX01PREU9ImFybSIKK0NUX0FSQ0hfQVJNX01PREVfQVJNPXkKK0NUX0FSQ0hfQVJNX0VBQkk9eQorCisjCisjIFRvb2xjaGFpbiBvcHRpb25zCisjCisKKyMKKyMgR2VuZXJhbCB0b29sY2hhaW4gb3B0aW9ucworIworQ1RfRk9SQ0VfU1lTUk9PVD15CitDVF9VU0VfU1lTUk9PVD15CitDVF9TWVNST09UX05BTUU9InN5c3Jvb3QiCitDVF9TWVNST09UX0RJUl9QUkVGSVg9IiIKK0NUX1dBTlRTX1NUQVRJQ19MSU5LPXkKK0NUX1RPT0xDSEFJTl9QS0dWRVJTSU9OPSIiCitDVF9UT09MQ0hBSU5fQlVHVVJMPSIiCisKKyMKKyMgVHVwbGUgY29tcGxldGlvbiBhbmQgYWxpYXNpbmcKKyMKK0NUX1RBUkdFVF9WRU5ET1I9ImNvcnRleF9hOCIKK0NUX1RBUkdFVF9BTElBU19TRURfRVhQUj0iIgorQ1RfVEFSR0VUX0FMSUFTPSIiCisKKyMKKyMgVG9vbGNoYWluIHR5cGUKKyMKK0NUX0NST1NTPXkKK0NUX1RPT0xDSEFJTl9UWVBFPSJjcm9zcyIKKworIworIyBCdWlsZCBzeXN0ZW0KKyMKK0NUX0JVSUxEPSIiCitDVF9CVUlMRF9QUkVGSVg9IiIKK0NUX0JVSUxEX1NVRkZJWD0iIgorCisjCisjIE9wZXJhdGluZyBTeXN0ZW0KKyMKK0NUX0tFUk5FTF9TVVBQT1JUU19TSEFSRURfTElCUz15CitDVF9LRVJORUw9ImxpbnV4IgorQ1RfS0VSTkVMX1ZFUlNJT049IjMuMCIKKyMgQ1RfS0VSTkVMX2JhcmVfbWV0YWwgaXMgbm90IHNldAorQ1RfS0VSTkVMX2xpbnV4PXkKK0NUX0tFUk5FTF9iYXJlX21ldGFsX0FWQUlMQUJMRT15CitDVF9LRVJORUxfbGludXhfQVZBSUxBQkxFPXkKKyMgQ1RfS0VSTkVMX1ZfM18wXzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMyBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8yIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzEgaXMgbm90IHNldAorQ1RfS0VSTkVMX1ZfM18wPXkKKyMgQ1RfS0VSTkVMX1ZfMl82XzM5XzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzhfOCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zN182IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM2XzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzVfMTQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzRfMTAgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzNfMTkgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzJfNDYgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzFfMTQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMjdfNTkgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9taW5ndzMyX0FWQUlMQUJMRT15CisKKyMKKyMgQ29tbW9uIGtlcm5lbCBvcHRpb25zCisjCitDVF9TSEFSRURfTElCUz15CisKKyMKKyMgbGludXggb3RoZXIgb3B0aW9ucworIworQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8wPXkKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8xIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8yIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9MSU5VWF9WRVJCT1NFX0xFVkVMPTAKK0NUX0tFUk5FTF9MSU5VWF9JTlNUQUxMX0NIRUNLPXkKKworIworIyBCaW5hcnkgdXRpbGl0aWVzCisjCitDVF9BUkNIX0JJTkZNVF9FTEY9eQorCisjCisjIEdOVSBiaW51dGlscworIworIyBDVF9CSU5VVElMU19WXzJfMjFfMWEgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVl8yXzIwXzFhPXkKKyMgQ1RfQklOVVRJTFNfVl8yXzE5XzFhIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfVl8yXzE4YSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WRVJTSU9OPSIyLjIwLjFhIgorQ1RfQklOVVRJTFNfMl8yMF9vcl9sYXRlcj15CitDVF9CSU5VVElMU18yXzE5X29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMThfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfR09MRF9TVVBQT1JUU19BUkNIPXkKK0NUX0JJTlVUSUxTX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9CSU5VVElMU19GT1JDRV9MRF9CRkQ9eQorQ1RfQklOVVRJTFNfTElOS0VSX0xEPXkKK0NUX0JJTlVUSUxTX0xJTktFUlNfTElTVD0ibGQiCitDVF9CSU5VVElMU19MSU5LRVJfREVGQVVMVD0iYmZkIgorQ1RfQklOVVRJTFNfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9CSU5VVElMU19GT1JfVEFSR0VUPXkKK0NUX0JJTlVUSUxTX0ZPUl9UQVJHRVRfSUJFUlRZPXkKK0NUX0JJTlVUSUxTX0ZPUl9UQVJHRVRfQkZEPXkKKworIworIyBDIGNvbXBpbGVyCisjCitDVF9DQz0iZ2NjIgorQ1RfQ0NfVkVSU0lPTj0iNC40LjYiCitDVF9DQ19nY2M9eQorQ1RfQ0NfVl80XzRfNj15CisjIENUX0NDX1ZfNF80XzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzYgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM181IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzMgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18yIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8yXzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfMl8yIGlzIG5vdCBzZXQKK0NUX0NDX0dDQ180XzJfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDXzRfM19vcl9sYXRlcj15CitDVF9DQ19HQ0NfNF80PXkKK0NUX0NDX0dDQ180XzRfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDX0hBU19HUkFQSElURT15CitDVF9DQ19HQ0NfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0NDX0dDQ19VU0VfR01QX01QRlI9eQorQ1RfQ0NfR0NDX1VTRV9QUExfQ0xPT0c9eQorIyBDVF9DQ19MQU5HX0ZPUlRSQU4gaXMgbm90IHNldAorQ1RfQ0NfU1VQUE9SVF9DWFg9eQorQ1RfQ0NfU1VQUE9SVF9GT1JUUkFOPXkKK0NUX0NDX1NVUFBPUlRfSkFWQT15CitDVF9DQ19TVVBQT1JUX0FEQT15CitDVF9DQ19TVVBQT1JUX09CSkM9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDWFg9eQorCisjCisjIEFkZGl0aW9uYWwgc3VwcG9ydGVkIGxhbmd1YWdlczoKKyMKK0NUX0NDX0xBTkdfQ1hYPXkKKyMgQ1RfQ0NfTEFOR19KQVZBIGlzIG5vdCBzZXQKKworIworIyBnY2Mgb3RoZXIgb3B0aW9ucworIworQ1RfQ0NfRU5BQkxFX0NYWF9GTEFHUz0iIgorQ1RfQ0NfQ09SRV9FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0NDX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfQ0NfU1RBVElDX0xJQlNURENYWD15CisKKyMKKyMgT3B0aW1pc2F0aW9uIGZlYXR1cmVzCisjCitDVF9DQ19HQ0NfVVNFX0dSQVBISVRFPXkKKworIworIyBTZXR0aW5ncyBmb3IgbGlicmFyaWVzIHJ1bm5pbmcgb24gdGFyZ2V0CisjCitDVF9DQ19HQ0NfRU5BQkxFX1RBUkdFVF9PUFRTUEFDRT15CisjIENUX0NDX0dDQ19MSUJNVURGTEFQIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQkdPTVAgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCU1NQIGlzIG5vdCBzZXQKKworIworIyBNaXNjLiBvYnNjdXJlIG9wdGlvbnMuCisjCitDVF9DQ19DWEFfQVRFWElUPXkKKyMgQ1RfQ0NfR0NDX0RJU0FCTEVfUENIIGlzIG5vdCBzZXQKK0NUX0NDX0dDQ19TSkxKX0VYQ0VQVElPTlM9bQorQ1RfQ0NfR0NDX0xEQkxfMTI4PW0KKworIworIyBDLWxpYnJhcnkKKyMKK0NUX0xJQkM9ImdsaWJjIgorQ1RfTElCQ19WRVJTSU9OPSIyLjkiCisjIENUX0xJQkNfZWdsaWJjIGlzIG5vdCBzZXQKK0NUX0xJQkNfZ2xpYmM9eQorIyBDVF9MSUJDX3VDbGliYyBpcyBub3Qgc2V0CitDVF9MSUJDX2VnbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19nbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19HTElCQ19UQVJCQUxMPXkKK0NUX0xJQkNfR0xJQkNfVl8yXzk9eQorIyBDVF9MSUJDX0dMSUJDX1ZfMl84IGlzIG5vdCBzZXQKK0NUX0xJQkNfbWluZ3dfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbmV3bGliX0FWQUlMQUJMRT15CitDVF9MSUJDX25vbmVfQVZBSUxBQkxFPXkKK0NUX0xJQkNfdUNsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX1NVUFBPUlRfVEhSRUFEU19BTlk9eQorQ1RfTElCQ19TVVBQT1JUX05QVEw9eQorQ1RfVEhSRUFEUz0ibnB0bCIKKworIworIyBDb21tb24gQyBsaWJyYXJ5IG9wdGlvbnMKKyMKK0NUX1RIUkVBRFNfTlBUTD15CitDVF9MSUJDX1hMREQ9eQorQ1RfTElCQ19HTElCQ19NQVlfRk9SQ0VfUE9SVFM9eQorQ1RfTElCQ19nbGliY19mYW1pbGx5PXkKK0NUX0xJQkNfR0xJQkNfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9MSUJDX0dMSUJDX0NPTkZJR1BBUk1TPSIiCitDVF9MSUJDX0dMSUJDX0VYVFJBX0NGTEFHUz0iIgorQ1RfTElCQ19FWFRSQV9DQ19BUkdTPSIiCisjIENUX0xJQkNfRElTQUJMRV9WRVJTSU9OSU5HIGlzIG5vdCBzZXQKK0NUX0xJQkNfT0xERVNUX0FCST0iIgorIyBDVF9MSUJDX0dMSUJDX0ZPUkNFX1VOV0lORCBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX1VTRV9QT1JUUz15CitDVF9MSUJDX0FERE9OU19MSVNUPSIiCisjIENUX0xJQkNfTE9DQUxFUyBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfS0VSTkVMX1ZFUlNJT05fTk9ORSBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX0FTX0hFQURFUlM9eQorIyBDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX0NIT1NFTiBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX01JTl9LRVJORUw9IjMuMCIKKworIworIyBnbGliYyBvdGhlciBvcHRpb25zCisjCisKKyMKKyMgV0FSTklORyAhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIworCisjCisjICAgRm9yIGdsaWJjID49IDIuOCwgaXQgY2FuIGhhcHBlbiB0aGF0IHRoZSB0YXJiYWxscyAgICAKKyMKKworIworIyAgIGZvciB0aGUgYWRkb25zIGFyZSBub3QgYXZhaWxhYmxlIGZvciBkb3dubG9hZC4gICAgICAgCisjCisKKyMKKyMgICBJZiB0aGF0IGhhcHBlbnMsIGJhZCBsdWNrLi4uIFRyeSBhIHByZXZpb3VzIHZlcnNpb24gIAorIworCisjCisjICAgb3IgdHJ5IGFnYWluIGxhdGVyLi4uIDotKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyMKKworIworIyBEZWJ1ZyBmYWNpbGl0aWVzCisjCitDVF9ERUJVR19kbWFsbG9jPXkKK0NUX0RNQUxMT0NfVl81XzVfMj15CitDVF9ETUFMTE9DX1ZFUlNJT049IjUuNS4yIgorQ1RfREVCVUdfZHVtYT15CitDVF9EVU1BX0E9eQorQ1RfRFVNQV9TTz15CitDVF9EVU1BX1ZfMl81XzE1PXkKK0NUX0RVTUFfVkVSU0lPTj0iMl81XzE1IgorQ1RfREVCVUdfZ2RiPXkKK0NUX0dEQl9DUk9TUz15CisjIENUX0dEQl9DUk9TU19TVEFUSUMgaXMgbm90IHNldAorQ1RfR0RCX0NST1NTX1BZVEhPTj15CitDVF9HREJfTkFUSVZFPXkKKyMgQ1RfR0RCX05BVElWRV9TVEFUSUMgaXMgbm90IHNldAorQ1RfR0RCX0dEQlNFUlZFUj15CitDVF9HREJfR0RCU0VSVkVSX1NUQVRJQz15CisKKyMKKyMgZ2RiIHZlcnNpb24KKyMKK0NUX0dEQl9WXzZfOGE9eQorQ1RfR0RCX1ZFUlNJT049IjYuOGEiCitDVF9ERUJVR19sdHJhY2U9eQorQ1RfTFRSQUNFX1ZfMF81XzM9eQorIyBDVF9MVFJBQ0VfVl8wXzVfMiBpcyBub3Qgc2V0CitDVF9MVFJBQ0VfVkVSU0lPTj0iMC41LjMiCitDVF9MVFJBQ0VfMF81XzNfb3JfbGF0ZXI9eQorQ1RfREVCVUdfc3RyYWNlPXkKK0NUX1NUUkFDRV9WXzRfNV8xOT15CisjIENUX1NUUkFDRV9WXzRfNV8xOCBpcyBub3Qgc2V0CitDVF9TVFJBQ0VfVkVSU0lPTj0iNC41LjE5IgorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMKKyMKK0NUX0NPTVBMSUJTX05FRURFRD15CitDVF9HTVBfTkVFREVEPXkKK0NUX01QRlJfTkVFREVEPXkKK0NUX1BQTF9ORUVERUQ9eQorQ1RfQ0xPT0dfTkVFREVEPXkKK0NUX0NPTVBMSUJTPXkKK0NUX0dNUD15CitDVF9NUEZSPXkKK0NUX1BQTD15CitDVF9DTE9PRz15CitDVF9MSUJFTEZfVEFSR0VUPXkKK0NUX0dNUF9WXzRfM18yPXkKKyMgQ1RfR01QX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9HTVBfVl80XzNfMCBpcyBub3Qgc2V0CitDVF9HTVBfVkVSU0lPTj0iNC4zLjIiCisjIENUX01QRlJfVl8zXzBfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZfMl80XzI9eQorIyBDVF9NUEZSX1ZfMl80XzEgaXMgbm90IHNldAorIyBDVF9NUEZSX1ZfMl80XzAgaXMgbm90IHNldAorQ1RfTVBGUl9WRVJTSU9OPSIyLjQuMiIKK0NUX1BQTF9WXzBfMTBfMj15CitDVF9QUExfVkVSU0lPTj0iMC4xMC4yIgorIyBDVF9DTE9PR19WXzBfMTVfMTAgaXMgbm90IHNldAorQ1RfQ0xPT0dfVl8wXzE1Xzk9eQorIyBDVF9DTE9PR19WXzBfMTVfOCBpcyBub3Qgc2V0CisjIENUX0NMT09HX1ZfMF8xNV83IGlzIG5vdCBzZXQKKyMgQ1RfQ0xPT0dfVl8wXzE1XzYgaXMgbm90IHNldAorQ1RfQ0xPT0dfVkVSU0lPTj0iMC4xNS45IgorCisjCisjIGxpYmVsZiB2ZXJzaW9uIG5lZWRlZCB0byBidWlsZCBmb3IgdGFyZ2V0CisjCitDVF9MSUJFTEZfVl8wXzhfMTM9eQorIyBDVF9MSUJFTEZfVl8wXzhfMTIgaXMgbm90IHNldAorQ1RfTElCRUxGX1ZFUlNJT049IjAuOC4xMyIKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzIGNvbW1vbiBvcHRpb25zCisjCisjIENUX0NPTVBMSUJTX0NIRUNLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0tY29ydGV4X2E4LWxpbnV4LWdudWVhYmkvcmVwb3J0ZWQuYnkgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYXJtLWNvcnRleF9hOC1saW51eC1nbnVlYWJpL3JlcG9ydGVkLmJ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYWMyYmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYXJtLWNvcnRleF9hOC1saW51eC1nbnVlYWJpL3JlcG9ydGVkLmJ5CkBAIC0wLDAgKzEsMyBAQAorcmVwb3J0ZXJfbmFtZT0iWWFubiBFLiBNT1JJTiIKK3JlcG9ydGVyX3VybD0iaHR0cDovL3ltb3Jpbi5pcy1hLWdlZWsub3JnLyIKK3JlcG9ydGVyX2NvbW1lbnQ9IiIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0tZGF2aW5jaS1saW51eC1nbnVlYWJpL2Nyb3NzdG9vbC5jb25maWcgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYXJtLWRhdmluY2ktbGludXgtZ251ZWFiaS9jcm9zc3Rvb2wuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxOWQ0YWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYXJtLWRhdmluY2ktbGludXgtZ251ZWFiaS9jcm9zc3Rvb2wuY29uZmlnCkBAIC0wLDAgKzEsNDUyIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIGNyb3NzdG9vbC1ORyBoZ19kZWZhdWx0QDI3MjFfN2I2NDc0NmIwYWIzIENvbmZpZ3VyYXRpb24KKyMgU3VuIE9jdCAxNiAxNzoxOTo0MSAyMDExCisjCitDVF9DT05GSUdVUkVfaGFzX3h6dXRpbHM9eQorQ1RfQ09ORklHVVJFX2hhc19jdnM9eQorQ1RfQ09ORklHVVJFX2hhc19zdm49eQorQ1RfTU9EVUxFUz15CisKKyMKKyMgUGF0aHMgYW5kIG1pc2Mgb3B0aW9ucworIworCisjCisjIGNyb3NzdG9vbC1ORyBiZWhhdmlvcgorIworIyBDVF9PQlNPTEVURSBpcyBub3Qgc2V0CisjIENUX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CisjIENUX0RFQlVHX0NUIGlzIG5vdCBzZXQKKworIworIyBQYXRocworIworQ1RfTE9DQUxfVEFSQkFMTFNfRElSPSIke0hPTUV9L3NyYyIKK0NUX1NBVkVfVEFSQkFMTFM9eQorQ1RfV09SS19ESVI9IiR7Q1RfVE9QX0RJUn0vLmJ1aWxkIgorQ1RfUFJFRklYX0RJUj0iJHtIT01FfS94LXRvb2xzLyR7Q1RfVEFSR0VUfSIKK0NUX0lOU1RBTExfRElSPSIke0NUX1BSRUZJWF9ESVJ9IgorQ1RfUk1fUkZfUFJFRklYX0RJUj15CitDVF9SRU1PVkVfRE9DUz15CitDVF9JTlNUQUxMX0RJUl9STz15CitDVF9TVFJJUF9BTExfVE9PTENIQUlOX0VYRUNVVEFCTEVTPXkKKworIworIyBEb3dubG9hZGluZworIworIyBDVF9GT1JCSURfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9GT1JDRV9ET1dOTE9BRCBpcyBub3Qgc2V0CitDVF9DT05ORUNUX1RJTUVPVVQ9MTAKKyMgQ1RfT05MWV9ET1dOTE9BRCBpcyBub3Qgc2V0CisjIENUX1VTRV9NSVJST1IgaXMgbm90IHNldAorCisjCisjIEV4dHJhY3RpbmcKKyMKKyMgQ1RfRk9SQ0VfRVhUUkFDVCBpcyBub3Qgc2V0CitDVF9PVkVSSURFX0NPTkZJR19HVUVTU19TVUI9eQorIyBDVF9PTkxZX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfUEFUQ0hfQlVORExFRD15CisjIENUX1BBVENIX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9CVU5ETEVEX0ZBTExCQUNLX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTE9DQUxfRkFMTEJBQ0tfQlVORExFRCBpcyBub3Qgc2V0CisjIENUX1BBVENIX05PTkUgaXMgbm90IHNldAorQ1RfUEFUQ0hfT1JERVI9ImJ1bmRsZWQiCisKKyMKKyMgQnVpbGQgYmVoYXZpb3IKKyMKK0NUX1BBUkFMTEVMX0pPQlM9MAorQ1RfTE9BRD0wCitDVF9VU0VfUElQRVM9eQorQ1RfRVhUUkFfRkxBR1NfRk9SX0hPU1Q9IiIKKyMgQ1RfQ09ORklHX1NIRUxMX1NIIGlzIG5vdCBzZXQKKyMgQ1RfQ09ORklHX1NIRUxMX0FTSCBpcyBub3Qgc2V0CitDVF9DT05GSUdfU0hFTExfQkFTSD15CisjIENUX0NPTkZJR19TSEVMTF9DVVNUT00gaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMPSIke2Jhc2h9IgorCisjCisjIExvZ2dpbmcKKyMKKyMgQ1RfTE9HX0VSUk9SIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX1dBUk4gaXMgbm90IHNldAorIyBDVF9MT0dfSU5GTyBpcyBub3Qgc2V0CitDVF9MT0dfRVhUUkE9eQorIyBDVF9MT0dfQUxMIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0RFQlVHIGlzIG5vdCBzZXQKK0NUX0xPR19MRVZFTF9NQVg9IkVYVFJBIgorIyBDVF9MT0dfU0VFX1RPT0xTX1dBUk4gaXMgbm90IHNldAorQ1RfTE9HX1BST0dSRVNTX0JBUj15CitDVF9MT0dfVE9fRklMRT15CitDVF9MT0dfRklMRV9DT01QUkVTUz15CisKKyMKKyMgVGFyZ2V0IG9wdGlvbnMKKyMKK0NUX0FSQ0g9ImFybSIKK0NUX0FSQ0hfU1VQUE9SVFNfQk9USF9NTVU9eQorQ1RfQVJDSF9TVVBQT1JUU19CT1RIX0VORElBTj15CitDVF9BUkNIX1NVUFBPUlRTXzMyPXkKK0NUX0FSQ0hfU1VQUE9SVF9BUkNIPXkKK0NUX0FSQ0hfU1VQUE9SVF9DUFU9eQorQ1RfQVJDSF9TVVBQT1JUX1RVTkU9eQorQ1RfQVJDSF9TVVBQT1JUX0ZQVT15CitDVF9BUkNIX0RFRkFVTFRfSEFTX01NVT15CitDVF9BUkNIX0RFRkFVTFRfTEU9eQorQ1RfQVJDSF9ERUZBVUxUXzMyPXkKK0NUX0FSQ0hfQVJDSD0iYXJtdjV0ZSIKK0NUX0FSQ0hfQ1BVPSJhcm05MjZlai1zIgorQ1RfQVJDSF9UVU5FPSJhcm05MjZlai1zIgorQ1RfQVJDSF9GUFU9IiIKKyMgQ1RfQVJDSF9CRSBpcyBub3Qgc2V0CitDVF9BUkNIX0xFPXkKK0NUX0FSQ0hfMzI9eQorQ1RfQVJDSF9CSVRORVNTPTMyCisjIENUX0FSQ0hfRkxPQVRfSFcgaXMgbm90IHNldAorQ1RfQVJDSF9GTE9BVF9TVz15CitDVF9UQVJHRVRfQ0ZMQUdTPSIiCitDVF9UQVJHRVRfTERGTEFHUz0iIgorIyBDVF9BUkNIX2FscGhhIGlzIG5vdCBzZXQKK0NUX0FSQ0hfYXJtPXkKKyMgQ1RfQVJDSF9hdnIzMiBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYmxhY2tmaW4gaXMgbm90IHNldAorIyBDVF9BUkNIX21pcHMgaXMgbm90IHNldAorIyBDVF9BUkNIX3Bvd2VycGMgaXMgbm90IHNldAorIyBDVF9BUkNIX3NoIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zcGFyYyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfeDg2IGlzIG5vdCBzZXQKK0NUX0FSQ0hfYWxwaGFfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXJtX0FWQUlMQUJMRT15CitDVF9BUkNIX2F2cjMyX0FWQUlMQUJMRT15CitDVF9BUkNIX2JsYWNrZmluX0FWQUlMQUJMRT15CitDVF9BUkNIX202OGtfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbWlwc19BVkFJTEFCTEU9eQorQ1RfQVJDSF9wb3dlcnBjX0FWQUlMQUJMRT15CitDVF9BUkNIX3MzOTBfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfc2hfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfc3BhcmNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfeDg2X0FWQUlMQUJMRT15CisKKyMKKyMgR2VuZXJpYyB0YXJnZXQgb3B0aW9ucworIworQ1RfQVJDSF9VU0VfTU1VPXkKKworIworIyBUYXJnZXQgb3B0aW1pc2F0aW9ucworIworCisjCisjIGFybSBvdGhlciBvcHRpb25zCisjCitDVF9BUkNIX0FSTV9NT0RFPSJhcm0iCitDVF9BUkNIX0FSTV9NT0RFX0FSTT15CitDVF9BUkNIX0FSTV9FQUJJPXkKKworIworIyBUb29sY2hhaW4gb3B0aW9ucworIworCisjCisjIEdlbmVyYWwgdG9vbGNoYWluIG9wdGlvbnMKKyMKK0NUX0ZPUkNFX1NZU1JPT1Q9eQorQ1RfVVNFX1NZU1JPT1Q9eQorQ1RfU1lTUk9PVF9OQU1FPSJzeXNyb290IgorQ1RfU1lTUk9PVF9ESVJfUFJFRklYPSIiCitDVF9UT09MQ0hBSU5fUEtHVkVSU0lPTj0iIgorQ1RfVE9PTENIQUlOX0JVR1VSTD0iIgorCisjCisjIFR1cGxlIGNvbXBsZXRpb24gYW5kIGFsaWFzaW5nCisjCitDVF9UQVJHRVRfVkVORE9SPSJkYXZpbmNpIgorQ1RfVEFSR0VUX0FMSUFTX1NFRF9FWFBSPSIiCitDVF9UQVJHRVRfQUxJQVM9IiIKKworIworIyBUb29sY2hhaW4gdHlwZQorIworQ1RfQ1JPU1M9eQorQ1RfVE9PTENIQUlOX1RZUEU9ImNyb3NzIgorCisjCisjIEJ1aWxkIHN5c3RlbQorIworQ1RfQlVJTEQ9IiIKK0NUX0JVSUxEX1BSRUZJWD0iIgorQ1RfQlVJTERfU1VGRklYPSIiCisKKyMKKyMgT3BlcmF0aW5nIFN5c3RlbQorIworQ1RfS0VSTkVMX1NVUFBPUlRTX1NIQVJFRF9MSUJTPXkKK0NUX0tFUk5FTD0ibGludXgiCitDVF9LRVJORUxfVkVSU0lPTj0iMi42LjMzLjE5IgorIyBDVF9LRVJORUxfYmFyZV9tZXRhbCBpcyBub3Qgc2V0CitDVF9LRVJORUxfbGludXg9eQorQ1RfS0VSTkVMX2JhcmVfbWV0YWxfQVZBSUxBQkxFPXkKK0NUX0tFUk5FTF9saW51eF9BVkFJTEFCTEU9eQorIyBDVF9LRVJORUxfVl8zXzBfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8zIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzIgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zOV80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM4XzggaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzdfNiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNl80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM1XzE0IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM0XzEwIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9WXzJfNl8zM18xOT15CisjIENUX0tFUk5FTF9WXzJfNl8zMl80NiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zMV8xNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8yN181OSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9MSU5VWF9DVVNUT00gaXMgbm90IHNldAorQ1RfS0VSTkVMX21pbmd3MzJfQVZBSUxBQkxFPXkKKworIworIyBDb21tb24ga2VybmVsIG9wdGlvbnMKKyMKK0NUX1NIQVJFRF9MSUJTPXkKKworIworIyBsaW51eCBvdGhlciBvcHRpb25zCisjCitDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzA9eQorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzEgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzIgaXMgbm90IHNldAorQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0VfTEVWRUw9MAorQ1RfS0VSTkVMX0xJTlVYX0lOU1RBTExfQ0hFQ0s9eQorCisjCisjIEJpbmFyeSB1dGlsaXRpZXMKKyMKK0NUX0FSQ0hfQklORk1UX0VMRj15CisKKyMKKyMgR05VIGJpbnV0aWxzCisjCisjIENUX0JJTlVUSUxTX1ZfMl8yMV8xYSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WXzJfMjBfMWE9eQorIyBDVF9CSU5VVElMU19WXzJfMTlfMWEgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19WXzJfMThhIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX1ZFUlNJT049IjIuMjAuMWEiCitDVF9CSU5VVElMU18yXzIwX29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMTlfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfMl8xOF9vcl9sYXRlcj15CitDVF9CSU5VVElMU19HT0xEX1NVUFBPUlRTX0FSQ0g9eQorQ1RfQklOVVRJTFNfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0JJTlVUSUxTX0ZPUkNFX0xEX0JGRD15CitDVF9CSU5VVElMU19MSU5LRVJfTEQ9eQorQ1RfQklOVVRJTFNfTElOS0VSU19MSVNUPSJsZCIKK0NUX0JJTlVUSUxTX0xJTktFUl9ERUZBVUxUPSJiZmQiCitDVF9CSU5VVElMU19FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0JJTlVUSUxTX0ZPUl9UQVJHRVQ9eQorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVF9JQkVSVFk9eQorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVF9CRkQ9eQorCisjCisjIEMgY29tcGlsZXIKKyMKK0NUX0NDPSJnY2MiCitDVF9DQ19WRVJTSU9OPSI0LjMuMiIKK0NUX0NDX2djYz15CisjIENUX0NDX1ZfNF80XzYgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF81IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzMgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8yIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM182IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18zIGlzIG5vdCBzZXQKK0NUX0NDX1ZfNF8zXzI9eQorIyBDVF9DQ19WXzRfM18xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8yXzIgaXMgbm90IHNldAorQ1RfQ0NfR0NDXzRfMl9vcl9sYXRlcj15CitDVF9DQ19HQ0NfNF8zPXkKK0NUX0NDX0dDQ180XzNfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9DQ19HQ0NfVVNFX0dNUF9NUEZSPXkKKyMgQ1RfQ0NfTEFOR19GT1JUUkFOIGlzIG5vdCBzZXQKK0NUX0NDX1NVUFBPUlRfQ1hYPXkKK0NUX0NDX1NVUFBPUlRfRk9SVFJBTj15CitDVF9DQ19TVVBQT1JUX0pBVkE9eQorQ1RfQ0NfU1VQUE9SVF9BREE9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDPXkKK0NUX0NDX1NVUFBPUlRfT0JKQ1hYPXkKKworIworIyBBZGRpdGlvbmFsIHN1cHBvcnRlZCBsYW5ndWFnZXM6CisjCitDVF9DQ19MQU5HX0NYWD15CisjIENUX0NDX0xBTkdfSkFWQSBpcyBub3Qgc2V0CisKKyMKKyMgZ2NjIG90aGVyIG9wdGlvbnMKKyMKK0NUX0NDX0VOQUJMRV9DWFhfRkxBR1M9IiIKK0NUX0NDX0NPUkVfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9DQ19FWFRSQV9DT05GSUdfQVJSQVk9IiIKKworIworIyBPcHRpbWlzYXRpb24gZmVhdHVyZXMKKyMKKworIworIyBTZXR0aW5ncyBmb3IgbGlicmFyaWVzIHJ1bm5pbmcgb24gdGFyZ2V0CisjCitDVF9DQ19HQ0NfRU5BQkxFX1RBUkdFVF9PUFRTUEFDRT15CisjIENUX0NDX0dDQ19MSUJNVURGTEFQIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQkdPTVAgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCU1NQIGlzIG5vdCBzZXQKKworIworIyBNaXNjLiBvYnNjdXJlIG9wdGlvbnMuCisjCitDVF9DQ19DWEFfQVRFWElUPXkKKyMgQ1RfQ0NfR0NDX0RJU0FCTEVfUENIIGlzIG5vdCBzZXQKK0NUX0NDX0dDQ19TSkxKX0VYQ0VQVElPTlM9bQorQ1RfQ0NfR0NDX0xEQkxfMTI4PW0KKworIworIyBDLWxpYnJhcnkKKyMKK0NUX0xJQkM9ImdsaWJjIgorQ1RfTElCQ19WRVJTSU9OPSIyLjkiCisjIENUX0xJQkNfZWdsaWJjIGlzIG5vdCBzZXQKK0NUX0xJQkNfZ2xpYmM9eQorIyBDVF9MSUJDX3VDbGliYyBpcyBub3Qgc2V0CitDVF9MSUJDX2VnbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19nbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19HTElCQ19UQVJCQUxMPXkKK0NUX0xJQkNfR0xJQkNfVl8yXzk9eQorIyBDVF9MSUJDX0dMSUJDX1ZfMl84IGlzIG5vdCBzZXQKK0NUX0xJQkNfbWluZ3dfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbmV3bGliX0FWQUlMQUJMRT15CitDVF9MSUJDX25vbmVfQVZBSUxBQkxFPXkKK0NUX0xJQkNfdUNsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX1NVUFBPUlRfVEhSRUFEU19BTlk9eQorQ1RfTElCQ19TVVBQT1JUX05QVEw9eQorQ1RfVEhSRUFEUz0ibnB0bCIKKworIworIyBDb21tb24gQyBsaWJyYXJ5IG9wdGlvbnMKKyMKK0NUX1RIUkVBRFNfTlBUTD15CitDVF9MSUJDX1hMREQ9eQorQ1RfTElCQ19HTElCQ19NQVlfRk9SQ0VfUE9SVFM9eQorQ1RfTElCQ19nbGliY19mYW1pbGx5PXkKK0NUX0xJQkNfR0xJQkNfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9MSUJDX0dMSUJDX0NPTkZJR1BBUk1TPSIiCitDVF9MSUJDX0dMSUJDX0VYVFJBX0NGTEFHUz0iIgorQ1RfTElCQ19FWFRSQV9DQ19BUkdTPSIiCisjIENUX0xJQkNfRElTQUJMRV9WRVJTSU9OSU5HIGlzIG5vdCBzZXQKK0NUX0xJQkNfT0xERVNUX0FCST0iIgorIyBDVF9MSUJDX0dMSUJDX0ZPUkNFX1VOV0lORCBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX1VTRV9QT1JUUz15CitDVF9MSUJDX0FERE9OU19MSVNUPSIiCisjIENUX0xJQkNfTE9DQUxFUyBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfS0VSTkVMX1ZFUlNJT05fTk9ORSBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX0FTX0hFQURFUlM9eQorIyBDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX0NIT1NFTiBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX01JTl9LRVJORUw9IjIuNi4zMy4xOSIKKworIworIyBnbGliYyBvdGhlciBvcHRpb25zCisjCisKKyMKKyMgV0FSTklORyAhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIworCisjCisjICAgRm9yIGdsaWJjID49IDIuOCwgaXQgY2FuIGhhcHBlbiB0aGF0IHRoZSB0YXJiYWxscyAgICAKKyMKKworIworIyAgIGZvciB0aGUgYWRkb25zIGFyZSBub3QgYXZhaWxhYmxlIGZvciBkb3dubG9hZC4gICAgICAgCisjCisKKyMKKyMgICBJZiB0aGF0IGhhcHBlbnMsIGJhZCBsdWNrLi4uIFRyeSBhIHByZXZpb3VzIHZlcnNpb24gIAorIworCisjCisjICAgb3IgdHJ5IGFnYWluIGxhdGVyLi4uIDotKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyMKKworIworIyBEZWJ1ZyBmYWNpbGl0aWVzCisjCitDVF9ERUJVR19kbWFsbG9jPXkKK0NUX0RNQUxMT0NfVl81XzVfMj15CitDVF9ETUFMTE9DX1ZFUlNJT049IjUuNS4yIgorQ1RfREVCVUdfZHVtYT15CitDVF9EVU1BX0E9eQorQ1RfRFVNQV9TTz15CitDVF9EVU1BX1ZfMl81XzE1PXkKK0NUX0RVTUFfVkVSU0lPTj0iMl81XzE1IgorQ1RfREVCVUdfZ2RiPXkKK0NUX0dEQl9DUk9TUz15CisjIENUX0dEQl9DUk9TU19TVEFUSUMgaXMgbm90IHNldAorQ1RfR0RCX0NST1NTX1BZVEhPTj15CitDVF9HREJfTkFUSVZFPXkKKyMgQ1RfR0RCX05BVElWRV9TVEFUSUMgaXMgbm90IHNldAorQ1RfR0RCX0dEQlNFUlZFUj15CitDVF9HREJfR0RCU0VSVkVSX1NUQVRJQz15CisKKyMKKyMgZ2RiIHZlcnNpb24KKyMKK0NUX0dEQl9WXzZfOGE9eQorQ1RfR0RCX1ZFUlNJT049IjYuOGEiCitDVF9ERUJVR19sdHJhY2U9eQorQ1RfTFRSQUNFX1ZfMF81XzM9eQorIyBDVF9MVFJBQ0VfVl8wXzVfMiBpcyBub3Qgc2V0CitDVF9MVFJBQ0VfVkVSU0lPTj0iMC41LjMiCitDVF9MVFJBQ0VfMF81XzNfb3JfbGF0ZXI9eQorQ1RfREVCVUdfc3RyYWNlPXkKK0NUX1NUUkFDRV9WXzRfNV8xOT15CisjIENUX1NUUkFDRV9WXzRfNV8xOCBpcyBub3Qgc2V0CitDVF9TVFJBQ0VfVkVSU0lPTj0iNC41LjE5IgorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMKKyMKK0NUX0NPTVBMSUJTX05FRURFRD15CitDVF9HTVBfTkVFREVEPXkKK0NUX01QRlJfTkVFREVEPXkKK0NUX0NPTVBMSUJTPXkKK0NUX0dNUD15CitDVF9NUEZSPXkKK0NUX0xJQkVMRl9UQVJHRVQ9eQorQ1RfR01QX1ZfNF8zXzI9eQorIyBDVF9HTVBfVl80XzNfMSBpcyBub3Qgc2V0CisjIENUX0dNUF9WXzRfM18wIGlzIG5vdCBzZXQKK0NUX0dNUF9WRVJTSU9OPSI0LjMuMiIKKyMgQ1RfTVBGUl9WXzNfMF8wIGlzIG5vdCBzZXQKK0NUX01QRlJfVl8yXzRfMj15CisjIENUX01QRlJfVl8yXzRfMSBpcyBub3Qgc2V0CisjIENUX01QRlJfVl8yXzRfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZFUlNJT049IjIuNC4yIgorCisjCisjIGxpYmVsZiB2ZXJzaW9uIG5lZWRlZCB0byBidWlsZCBmb3IgdGFyZ2V0CisjCitDVF9MSUJFTEZfVl8wXzhfMTM9eQorIyBDVF9MSUJFTEZfVl8wXzhfMTIgaXMgbm90IHNldAorQ1RfTElCRUxGX1ZFUlNJT049IjAuOC4xMyIKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzIGNvbW1vbiBvcHRpb25zCisjCisjIENUX0NPTVBMSUJTX0NIRUNLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0tZGF2aW5jaS1saW51eC1nbnVlYWJpL3JlcG9ydGVkLmJ5IGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2FybS1kYXZpbmNpLWxpbnV4LWdudWVhYmkvcmVwb3J0ZWQuYnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ2YjYyZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0tZGF2aW5jaS1saW51eC1nbnVlYWJpL3JlcG9ydGVkLmJ5CkBAIC0wLDAgKzEsMyBAQAorcmVwb3J0ZXJfbmFtZT0iRHJhZ2FuIE1hcmlua292aWMgPG1hcmlua292aWMuZHJhZ2FuQGdtYWlsLmNvbT4iCityZXBvcnRlcl91cmw9IiIKK3JlcG9ydGVyX2NvbW1lbnQ9IiIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0taXBob25lLWxpbnV4LWdudWVhYmkvY3Jvc3N0b29sLmNvbmZpZyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0taXBob25lLWxpbnV4LWdudWVhYmkvY3Jvc3N0b29sLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGEzOWE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2FybS1pcGhvbmUtbGludXgtZ251ZWFiaS9jcm9zc3Rvb2wuY29uZmlnCkBAIC0wLDAgKzEsNDYxIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIGNyb3NzdG9vbC1ORyBoZ19kZWZhdWx0QDI3MjFfN2I2NDc0NmIwYWIzIENvbmZpZ3VyYXRpb24KKyMgU3VuIE9jdCAxNiAxNzoyMjoyNiAyMDExCisjCitDVF9DT05GSUdVUkVfaGFzX3h6dXRpbHM9eQorQ1RfQ09ORklHVVJFX2hhc19jdnM9eQorQ1RfQ09ORklHVVJFX2hhc19zdm49eQorQ1RfTU9EVUxFUz15CisKKyMKKyMgUGF0aHMgYW5kIG1pc2Mgb3B0aW9ucworIworCisjCisjIGNyb3NzdG9vbC1ORyBiZWhhdmlvcgorIworIyBDVF9PQlNPTEVURSBpcyBub3Qgc2V0CitDVF9FWFBFUklNRU5UQUw9eQorIyBDVF9ERUJVR19DVCBpcyBub3Qgc2V0CisKKyMKKyMgUGF0aHMKKyMKK0NUX0xPQ0FMX1RBUkJBTExTX0RJUj0iJHtIT01FfS9zcmMiCitDVF9TQVZFX1RBUkJBTExTPXkKK0NUX1dPUktfRElSPSIke0NUX1RPUF9ESVJ9Ly5idWlsZCIKK0NUX1BSRUZJWF9ESVI9IiR7SE9NRX0veC10b29scy8ke0NUX1RBUkdFVH0iCitDVF9JTlNUQUxMX0RJUj0iJHtDVF9QUkVGSVhfRElSfSIKK0NUX1JNX1JGX1BSRUZJWF9ESVI9eQorQ1RfUkVNT1ZFX0RPQ1M9eQorQ1RfSU5TVEFMTF9ESVJfUk89eQorQ1RfU1RSSVBfQUxMX1RPT0xDSEFJTl9FWEVDVVRBQkxFUz15CisKKyMKKyMgRG93bmxvYWRpbmcKKyMKKyMgQ1RfRk9SQklEX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfRk9SQ0VfRE9XTkxPQUQgaXMgbm90IHNldAorQ1RfQ09OTkVDVF9USU1FT1VUPTEwCisjIENUX09OTFlfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9VU0VfTUlSUk9SIGlzIG5vdCBzZXQKKworIworIyBFeHRyYWN0aW5nCisjCisjIENUX0ZPUkNFX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfT1ZFUklERV9DT05GSUdfR1VFU1NfU1VCPXkKKyMgQ1RfT05MWV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX1BBVENIX0JVTkRMRUQ9eQorIyBDVF9QQVRDSF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9GQUxMQkFDS19MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0ZBTExCQUNLX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9OT05FIGlzIG5vdCBzZXQKK0NUX1BBVENIX09SREVSPSJidW5kbGVkIgorCisjCisjIEJ1aWxkIGJlaGF2aW9yCisjCitDVF9QQVJBTExFTF9KT0JTPTAKK0NUX0xPQUQ9MAorQ1RfVVNFX1BJUEVTPXkKK0NUX0VYVFJBX0ZMQUdTX0ZPUl9IT1NUPSIiCisjIENUX0NPTkZJR19TSEVMTF9TSCBpcyBub3Qgc2V0CisjIENUX0NPTkZJR19TSEVMTF9BU0ggaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMX0JBU0g9eQorIyBDVF9DT05GSUdfU0hFTExfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTD0iJHtiYXNofSIKKworIworIyBMb2dnaW5nCisjCisjIENUX0xPR19FUlJPUiBpcyBub3Qgc2V0CisjIENUX0xPR19XQVJOIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0lORk8gaXMgbm90IHNldAorQ1RfTE9HX0VYVFJBPXkKKyMgQ1RfTE9HX0FMTCBpcyBub3Qgc2V0CisjIENUX0xPR19ERUJVRyBpcyBub3Qgc2V0CitDVF9MT0dfTEVWRUxfTUFYPSJFWFRSQSIKKyMgQ1RfTE9HX1NFRV9UT09MU19XQVJOIGlzIG5vdCBzZXQKK0NUX0xPR19QUk9HUkVTU19CQVI9eQorQ1RfTE9HX1RPX0ZJTEU9eQorQ1RfTE9HX0ZJTEVfQ09NUFJFU1M9eQorCisjCisjIFRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIPSJhcm0iCitDVF9BUkNIX1NVUFBPUlRTX0JPVEhfTU1VPXkKK0NUX0FSQ0hfU1VQUE9SVFNfQk9USF9FTkRJQU49eQorQ1RfQVJDSF9TVVBQT1JUU18zMj15CitDVF9BUkNIX1NVUFBPUlRfQVJDSD15CitDVF9BUkNIX1NVUFBPUlRfQ1BVPXkKK0NUX0FSQ0hfU1VQUE9SVF9UVU5FPXkKK0NUX0FSQ0hfU1VQUE9SVF9GUFU9eQorQ1RfQVJDSF9ERUZBVUxUX0hBU19NTVU9eQorQ1RfQVJDSF9ERUZBVUxUX0xFPXkKK0NUX0FSQ0hfREVGQVVMVF8zMj15CitDVF9BUkNIX0FSQ0g9ImFybXY2IgorQ1RfQVJDSF9DUFU9ImFybTExNzZqemYtcyIKK0NUX0FSQ0hfVFVORT0iYXJtMTE3Nmp6Zi1zIgorQ1RfQVJDSF9GUFU9InZmcCIKKyMgQ1RfQVJDSF9CRSBpcyBub3Qgc2V0CitDVF9BUkNIX0xFPXkKK0NUX0FSQ0hfMzI9eQorQ1RfQVJDSF9CSVRORVNTPTMyCitDVF9BUkNIX0ZMT0FUX0hXPXkKKyMgQ1RfQVJDSF9GTE9BVF9TVyBpcyBub3Qgc2V0CitDVF9UQVJHRVRfQ0ZMQUdTPSIiCitDVF9UQVJHRVRfTERGTEFHUz0iIgorIyBDVF9BUkNIX2FscGhhIGlzIG5vdCBzZXQKK0NUX0FSQ0hfYXJtPXkKKyMgQ1RfQVJDSF9hdnIzMiBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYmxhY2tmaW4gaXMgbm90IHNldAorIyBDVF9BUkNIX202OGsgaXMgbm90IHNldAorIyBDVF9BUkNIX21pcHMgaXMgbm90IHNldAorIyBDVF9BUkNIX3Bvd2VycGMgaXMgbm90IHNldAorIyBDVF9BUkNIX3MzOTAgaXMgbm90IHNldAorIyBDVF9BUkNIX3NoIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zcGFyYyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfeDg2IGlzIG5vdCBzZXQKK0NUX0FSQ0hfYWxwaGFfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXJtX0FWQUlMQUJMRT15CitDVF9BUkNIX2F2cjMyX0FWQUlMQUJMRT15CitDVF9BUkNIX2JsYWNrZmluX0FWQUlMQUJMRT15CitDVF9BUkNIX202OGtfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbWlwc19BVkFJTEFCTEU9eQorQ1RfQVJDSF9wb3dlcnBjX0FWQUlMQUJMRT15CitDVF9BUkNIX3MzOTBfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfc2hfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfc3BhcmNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfeDg2X0FWQUlMQUJMRT15CisKKyMKKyMgR2VuZXJpYyB0YXJnZXQgb3B0aW9ucworIworQ1RfQVJDSF9VU0VfTU1VPXkKKworIworIyBUYXJnZXQgb3B0aW1pc2F0aW9ucworIworCisjCisjIGFybSBvdGhlciBvcHRpb25zCisjCitDVF9BUkNIX0FSTV9NT0RFPSJhcm0iCitDVF9BUkNIX0FSTV9NT0RFX0FSTT15CisjIENUX0FSQ0hfQVJNX01PREVfVEhVTUIgaXMgbm90IHNldAorIyBDVF9BUkNIX0FSTV9JTlRFUldPUktJTkcgaXMgbm90IHNldAorQ1RfQVJDSF9BUk1fRUFCST15CisKKyMKKyMgVG9vbGNoYWluIG9wdGlvbnMKKyMKKworIworIyBHZW5lcmFsIHRvb2xjaGFpbiBvcHRpb25zCisjCitDVF9GT1JDRV9TWVNST09UPXkKK0NUX1VTRV9TWVNST09UPXkKK0NUX1NZU1JPT1RfTkFNRT0ic3lzcm9vdCIKK0NUX1NZU1JPT1RfRElSX1BSRUZJWD0iIgorIyBDVF9TVEFUSUNfVE9PTENIQUlOIGlzIG5vdCBzZXQKK0NUX1RPT0xDSEFJTl9QS0dWRVJTSU9OPSIiCitDVF9UT09MQ0hBSU5fQlVHVVJMPSIiCisKKyMKKyMgVHVwbGUgY29tcGxldGlvbiBhbmQgYWxpYXNpbmcKKyMKK0NUX1RBUkdFVF9WRU5ET1I9ImlwaG9uZSIKK0NUX1RBUkdFVF9BTElBU19TRURfRVhQUj0iIgorQ1RfVEFSR0VUX0FMSUFTPSIiCisKKyMKKyMgVG9vbGNoYWluIHR5cGUKKyMKKyMgQ1RfTkFUSVZFIGlzIG5vdCBzZXQKK0NUX0NST1NTPXkKKyMgQ1RfQ1JPU1NfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ1RfQ0FOQURJQU4gaXMgbm90IHNldAorQ1RfVE9PTENIQUlOX1RZUEU9ImNyb3NzIgorCisjCisjIEJ1aWxkIHN5c3RlbQorIworQ1RfQlVJTEQ9IiIKK0NUX0JVSUxEX1BSRUZJWD0iIgorQ1RfQlVJTERfU1VGRklYPSIiCisKKyMKKyMgT3BlcmF0aW5nIFN5c3RlbQorIworQ1RfS0VSTkVMX1NVUFBPUlRTX1NIQVJFRF9MSUJTPXkKK0NUX0tFUk5FTD0ibGludXgiCitDVF9LRVJORUxfVkVSU0lPTj0iMi42LjMxLjE0IgorIyBDVF9LRVJORUxfYmFyZV9tZXRhbCBpcyBub3Qgc2V0CitDVF9LRVJORUxfbGludXg9eQorQ1RfS0VSTkVMX2JhcmVfbWV0YWxfQVZBSUxBQkxFPXkKK0NUX0tFUk5FTF9saW51eF9BVkFJTEFCTEU9eQorIyBDVF9LRVJORUxfVl8zXzBfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8zIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzIgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zOV80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM4XzggaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzdfNiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNl80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM1XzE0IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM0XzEwIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzMzXzE5IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzMyXzQ2IGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9WXzJfNl8zMV8xND15CisjIENUX0tFUk5FTF9WXzJfNl8yN181OSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9MSU5VWF9DVVNUT00gaXMgbm90IHNldAorQ1RfS0VSTkVMX21pbmd3MzJfQVZBSUxBQkxFPXkKKworIworIyBDb21tb24ga2VybmVsIG9wdGlvbnMKKyMKK0NUX1NIQVJFRF9MSUJTPXkKKworIworIyBsaW51eCBvdGhlciBvcHRpb25zCisjCitDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzA9eQorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzEgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzIgaXMgbm90IHNldAorQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0VfTEVWRUw9MAorQ1RfS0VSTkVMX0xJTlVYX0lOU1RBTExfQ0hFQ0s9eQorCisjCisjIEJpbmFyeSB1dGlsaXRpZXMKKyMKK0NUX0FSQ0hfQklORk1UX0VMRj15CisKKyMKKyMgR05VIGJpbnV0aWxzCisjCisjIENUX0JJTlVUSUxTX1ZfMl8yMV81MyBpcyBub3Qgc2V0CisjIENUX0JJTlVUSUxTX1ZfMl8yMV8xYSBpcyBub3Qgc2V0CisjIENUX0JJTlVUSUxTX1ZfMl8yMF8xYSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WXzJfMTlfMWE9eQorIyBDVF9CSU5VVElMU19WXzJfMThhIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX1ZFUlNJT049IjIuMTkuMWEiCitDVF9CSU5VVElMU18yXzE5X29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMThfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfR09MRF9TVVBQT1JUU19BUkNIPXkKK0NUX0JJTlVUSUxTX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9CSU5VVElMU19GT1JDRV9MRF9CRkQ9eQorQ1RfQklOVVRJTFNfTElOS0VSX0xEPXkKK0NUX0JJTlVUSUxTX0xJTktFUlNfTElTVD0ibGQiCitDVF9CSU5VVElMU19MSU5LRVJfREVGQVVMVD0iYmZkIgorQ1RfQklOVVRJTFNfRVhUUkFfQ09ORklHX0FSUkFZPSIiCisjIENUX0JJTlVUSUxTX0ZPUl9UQVJHRVQgaXMgbm90IHNldAorCisjCisjIEMgY29tcGlsZXIKKyMKK0NUX0NDPSJnY2MiCitDVF9DQ19WRVJTSU9OPSI0LjMuNCIKK0NUX0NDX2djYz15CisjIENUX0NDX0dDQ19TSE9XX0xJTkFSTyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF82XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNl8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF81XzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzYgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF81IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzMgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8yIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM182IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNSBpcyBub3Qgc2V0CitDVF9DQ19WXzRfM180PXkKKyMgQ1RfQ0NfVl80XzNfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8yXzIgaXMgbm90IHNldAorQ1RfQ0NfR0NDXzRfMl9vcl9sYXRlcj15CitDVF9DQ19HQ0NfNF8zPXkKK0NUX0NDX0dDQ180XzNfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9DQ19HQ0NfVVNFX0dNUF9NUEZSPXkKK0NUX0NDX0xBTkdfSkFWQV9VU0VfRUNKPXkKKyMgQ1RfQ0NfTEFOR19GT1JUUkFOIGlzIG5vdCBzZXQKK0NUX0NDX1NVUFBPUlRfQ1hYPXkKK0NUX0NDX1NVUFBPUlRfRk9SVFJBTj15CitDVF9DQ19TVVBQT1JUX0pBVkE9eQorQ1RfQ0NfU1VQUE9SVF9BREE9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDPXkKK0NUX0NDX1NVUFBPUlRfT0JKQ1hYPXkKKworIworIyBBZGRpdGlvbmFsIHN1cHBvcnRlZCBsYW5ndWFnZXM6CisjCitDVF9DQ19MQU5HX0NYWD15CitDVF9DQ19MQU5HX0pBVkE9eQorIyBDVF9DQ19MQU5HX0FEQSBpcyBub3Qgc2V0CisjIENUX0NDX0xBTkdfT0JKQyBpcyBub3Qgc2V0CisjIENUX0NDX0xBTkdfT0JKQ1hYIGlzIG5vdCBzZXQKK0NUX0NDX0xBTkdfT1RIRVJTPSIiCisKKyMKKyMgZ2NjIG90aGVyIG9wdGlvbnMKKyMKK0NUX0NDX0VOQUJMRV9DWFhfRkxBR1M9IiIKK0NUX0NDX0NPUkVfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9DQ19FWFRSQV9DT05GSUdfQVJSQVk9IiIKKworIworIyBPcHRpbWlzYXRpb24gZmVhdHVyZXMKKyMKKworIworIyBTZXR0aW5ncyBmb3IgbGlicmFyaWVzIHJ1bm5pbmcgb24gdGFyZ2V0CisjCitDVF9DQ19HQ0NfRU5BQkxFX1RBUkdFVF9PUFRTUEFDRT15CisjIENUX0NDX0dDQ19MSUJNVURGTEFQIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQkdPTVAgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCU1NQIGlzIG5vdCBzZXQKKworIworIyBNaXNjLiBvYnNjdXJlIG9wdGlvbnMuCisjCitDVF9DQ19DWEFfQVRFWElUPXkKKyMgQ1RfQ0NfR0NDX0RJU0FCTEVfUENIIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX1NKTEpfRVhDRVBUSU9OUyBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfTERCTF8xMjg9bQorCisjCisjIEMtbGlicmFyeQorIworQ1RfTElCQz0iZ2xpYmMiCitDVF9MSUJDX1ZFUlNJT049IjIuOSIKKyMgQ1RfTElCQ19lZ2xpYmMgaXMgbm90IHNldAorQ1RfTElCQ19nbGliYz15CisjIENUX0xJQkNfdUNsaWJjIGlzIG5vdCBzZXQKK0NUX0xJQkNfZWdsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX2dsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX0dMSUJDX1RBUkJBTEw9eQorIyBDVF9MSUJDX0dMSUJDX1ZfMl8xNCBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfVl8yXzEzIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19WXzJfMTJfMiBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfVl8yXzEyXzEgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX1ZfMl8xMV8xIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19WXzJfMTEgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX1ZfMl8xMF8xIGlzIG5vdCBzZXQKK0NUX0xJQkNfR0xJQkNfVl8yXzk9eQorIyBDVF9MSUJDX0dMSUJDX1ZfMl84IGlzIG5vdCBzZXQKK0NUX0xJQkNfbWluZ3dfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbmV3bGliX0FWQUlMQUJMRT15CitDVF9MSUJDX25vbmVfQVZBSUxBQkxFPXkKK0NUX0xJQkNfdUNsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX1NVUFBPUlRfVEhSRUFEU19BTlk9eQorQ1RfTElCQ19TVVBQT1JUX05QVEw9eQorQ1RfVEhSRUFEUz0ibnB0bCIKKworIworIyBDb21tb24gQyBsaWJyYXJ5IG9wdGlvbnMKKyMKK0NUX1RIUkVBRFNfTlBUTD15CitDVF9MSUJDX1hMREQ9eQorQ1RfTElCQ19HTElCQ19NQVlfRk9SQ0VfUE9SVFM9eQorQ1RfTElCQ19nbGliY19mYW1pbGx5PXkKK0NUX0xJQkNfR0xJQkNfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9MSUJDX0dMSUJDX0NPTkZJR1BBUk1TPSIiCitDVF9MSUJDX0dMSUJDX0VYVFJBX0NGTEFHUz0iIgorQ1RfTElCQ19FWFRSQV9DQ19BUkdTPSIiCisjIENUX0xJQkNfRU5BQkxFX0ZPUlRJRklFRF9CVUlMRCBpcyBub3Qgc2V0CisjIENUX0xJQkNfRElTQUJMRV9WRVJTSU9OSU5HIGlzIG5vdCBzZXQKK0NUX0xJQkNfT0xERVNUX0FCST0iIgorIyBDVF9MSUJDX0dMSUJDX0ZPUkNFX1VOV0lORCBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX1VTRV9QT1JUUz15CitDVF9MSUJDX0FERE9OU19MSVNUPSIiCisjIENUX0xJQkNfTE9DQUxFUyBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfS0VSTkVMX1ZFUlNJT05fTk9ORSBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX0FTX0hFQURFUlM9eQorIyBDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX0NIT1NFTiBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX01JTl9LRVJORUw9IjIuNi4zMS4xNCIKKworIworIyBnbGliYyBvdGhlciBvcHRpb25zCisjCisKKyMKKyMgV0FSTklORyAhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIworCisjCisjICAgRm9yIGdsaWJjID49IDIuOCwgaXQgY2FuIGhhcHBlbiB0aGF0IHRoZSB0YXJiYWxscyAgICAKKyMKKworIworIyAgIGZvciB0aGUgYWRkb25zIGFyZSBub3QgYXZhaWxhYmxlIGZvciBkb3dubG9hZC4gICAgICAgCisjCisKKyMKKyMgICBJZiB0aGF0IGhhcHBlbnMsIGJhZCBsdWNrLi4uIFRyeSBhIHByZXZpb3VzIHZlcnNpb24gIAorIworCisjCisjICAgb3IgdHJ5IGFnYWluIGxhdGVyLi4uIDotKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyMKKworIworIyBEZWJ1ZyBmYWNpbGl0aWVzCisjCisjIENUX0RFQlVHX2RtYWxsb2MgaXMgbm90IHNldAorIyBDVF9ERUJVR19kdW1hIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfZ2RiIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfbHRyYWNlIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfc3RyYWNlIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzCisjCitDVF9DT01QTElCU19ORUVERUQ9eQorQ1RfR01QX05FRURFRD15CitDVF9NUEZSX05FRURFRD15CitDVF9DT01QTElCUz15CitDVF9HTVA9eQorQ1RfTVBGUj15CisjIENUX0dNUF9WXzVfMF8yIGlzIG5vdCBzZXQKKyMgQ1RfR01QX1ZfNV8wXzEgaXMgbm90IHNldAorQ1RfR01QX1ZfNF8zXzI9eQorIyBDVF9HTVBfVl80XzNfMSBpcyBub3Qgc2V0CisjIENUX0dNUF9WXzRfM18wIGlzIG5vdCBzZXQKK0NUX0dNUF9WRVJTSU9OPSI0LjMuMiIKKyMgQ1RfTVBGUl9WXzNfMF8xIGlzIG5vdCBzZXQKKyMgQ1RfTVBGUl9WXzNfMF8wIGlzIG5vdCBzZXQKK0NUX01QRlJfVl8yXzRfMj15CisjIENUX01QRlJfVl8yXzRfMSBpcyBub3Qgc2V0CisjIENUX01QRlJfVl8yXzRfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZFUlNJT049IjIuNC4yIgorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMgY29tbW9uIG9wdGlvbnMKKyMKKyMgQ1RfQ09NUExJQlNfQ0hFQ0sgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiB0b29scworIworCisjCisjIFJFQUQgSEVMUCBiZWZvcmUgeW91IHNheSAnWScgYmVsb3cgISEhCisjCisjIENUX0NPTVBfVE9PTFMgaXMgbm90IHNldAorCisjCisjIFRlc3Qgc3VpdGUKKyMKKyMgQ1RfVEVTVF9TVUlURV9HQ0MgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2FybS1pcGhvbmUtbGludXgtZ251ZWFiaS9yZXBvcnRlZC5ieSBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0taXBob25lLWxpbnV4LWdudWVhYmkvcmVwb3J0ZWQuYnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ4OThkZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0taXBob25lLWxpbnV4LWdudWVhYmkvcmVwb3J0ZWQuYnkKQEAgLTAsMCArMSwzIEBACityZXBvcnRlcl9uYW1lPSJ1bmtub3duIgorcmVwb3J0ZXJfdXJsPSJodHRwOi8vaXBob25lbGludXgub3JnL2luZGV4LnBocC9HbGliY190b29sY2hhaW5fdXNpbmdfY3Jvc3N0b29sLU5HIgorcmVwb3J0ZXJfY29tbWVudD0iQW4gKGV4cGVyaW1lbnRhbCkgdG9vbGNoYWluIHRhcmdldGluZyB0aGUgQXBwbGUncyBpUGhvbmUuIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2FybS11bmtub3duLWVhYmkvY3Jvc3N0b29sLmNvbmZpZyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0tdW5rbm93bi1lYWJpL2Nyb3NzdG9vbC5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZjYThjMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0tdW5rbm93bi1lYWJpL2Nyb3NzdG9vbC5jb25maWcKQEAgLTAsMCArMSwzNjYgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgY3Jvc3N0b29sLU5HIGhnX2RlZmF1bHRAMjcyMV83YjY0NzQ2YjBhYjMgQ29uZmlndXJhdGlvbgorIyBTdW4gT2N0IDE2IDE3OjIwOjMxIDIwMTEKKyMKK0NUX0NPTkZJR1VSRV9oYXNfeHp1dGlscz15CitDVF9DT05GSUdVUkVfaGFzX2N2cz15CitDVF9DT05GSUdVUkVfaGFzX3N2bj15CitDVF9NT0RVTEVTPXkKKworIworIyBQYXRocyBhbmQgbWlzYyBvcHRpb25zCisjCisKKyMKKyMgY3Jvc3N0b29sLU5HIGJlaGF2aW9yCisjCisjIENUX09CU09MRVRFIGlzIG5vdCBzZXQKKyMgQ1RfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfQ1QgaXMgbm90IHNldAorCisjCisjIFBhdGhzCisjCitDVF9MT0NBTF9UQVJCQUxMU19ESVI9IiR7SE9NRX0vc3JjIgorQ1RfU0FWRV9UQVJCQUxMUz15CitDVF9XT1JLX0RJUj0iJHtDVF9UT1BfRElSfS8uYnVpbGQiCitDVF9QUkVGSVhfRElSPSIke0hPTUV9L3gtdG9vbHMvJHtDVF9UQVJHRVR9IgorQ1RfSU5TVEFMTF9ESVI9IiR7Q1RfUFJFRklYX0RJUn0iCitDVF9STV9SRl9QUkVGSVhfRElSPXkKK0NUX1JFTU9WRV9ET0NTPXkKK0NUX0lOU1RBTExfRElSX1JPPXkKK0NUX1NUUklQX0FMTF9UT09MQ0hBSU5fRVhFQ1VUQUJMRVM9eQorCisjCisjIERvd25sb2FkaW5nCisjCisjIENUX0ZPUkJJRF9ET1dOTE9BRCBpcyBub3Qgc2V0CisjIENUX0ZPUkNFX0RPV05MT0FEIGlzIG5vdCBzZXQKK0NUX0NPTk5FQ1RfVElNRU9VVD0xMAorIyBDVF9PTkxZX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfVVNFX01JUlJPUiBpcyBub3Qgc2V0CisKKyMKKyMgRXh0cmFjdGluZworIworIyBDVF9GT1JDRV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX09WRVJJREVfQ09ORklHX0dVRVNTX1NVQj15CisjIENUX09OTFlfRVhUUkFDVCBpcyBub3Qgc2V0CitDVF9QQVRDSF9CVU5ETEVEPXkKKyMgQ1RfUEFUQ0hfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9CVU5ETEVEX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTE9DQUxfQlVORExFRCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfRkFMTEJBQ0tfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9GQUxMQkFDS19CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTk9ORSBpcyBub3Qgc2V0CitDVF9QQVRDSF9PUkRFUj0iYnVuZGxlZCIKKworIworIyBCdWlsZCBiZWhhdmlvcgorIworQ1RfUEFSQUxMRUxfSk9CUz0wCitDVF9MT0FEPTAKK0NUX1VTRV9QSVBFUz15CitDVF9FWFRSQV9GTEFHU19GT1JfSE9TVD0iIgorIyBDVF9DT05GSUdfU0hFTExfU0ggaXMgbm90IHNldAorIyBDVF9DT05GSUdfU0hFTExfQVNIIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTF9CQVNIPXkKKyMgQ1RfQ09ORklHX1NIRUxMX0NVU1RPTSBpcyBub3Qgc2V0CitDVF9DT05GSUdfU0hFTEw9IiR7YmFzaH0iCisKKyMKKyMgTG9nZ2luZworIworIyBDVF9MT0dfRVJST1IgaXMgbm90IHNldAorIyBDVF9MT0dfV0FSTiBpcyBub3Qgc2V0CisjIENUX0xPR19JTkZPIGlzIG5vdCBzZXQKK0NUX0xPR19FWFRSQT15CisjIENUX0xPR19BTEwgaXMgbm90IHNldAorIyBDVF9MT0dfREVCVUcgaXMgbm90IHNldAorQ1RfTE9HX0xFVkVMX01BWD0iRVhUUkEiCisjIENUX0xPR19TRUVfVE9PTFNfV0FSTiBpcyBub3Qgc2V0CitDVF9MT0dfUFJPR1JFU1NfQkFSPXkKK0NUX0xPR19UT19GSUxFPXkKK0NUX0xPR19GSUxFX0NPTVBSRVNTPXkKKworIworIyBUYXJnZXQgb3B0aW9ucworIworQ1RfQVJDSD0iYXJtIgorQ1RfQVJDSF9TVVBQT1JUU19CT1RIX01NVT15CitDVF9BUkNIX1NVUFBPUlRTX0JPVEhfRU5ESUFOPXkKK0NUX0FSQ0hfU1VQUE9SVFNfMzI9eQorQ1RfQVJDSF9TVVBQT1JUX0FSQ0g9eQorQ1RfQVJDSF9TVVBQT1JUX0NQVT15CitDVF9BUkNIX1NVUFBPUlRfVFVORT15CitDVF9BUkNIX1NVUFBPUlRfRlBVPXkKK0NUX0FSQ0hfREVGQVVMVF9IQVNfTU1VPXkKK0NUX0FSQ0hfREVGQVVMVF9MRT15CitDVF9BUkNIX0RFRkFVTFRfMzI9eQorQ1RfQVJDSF9BUkNIPSIiCitDVF9BUkNIX0NQVT0iIgorQ1RfQVJDSF9UVU5FPSIiCitDVF9BUkNIX0ZQVT0iIgorIyBDVF9BUkNIX0JFIGlzIG5vdCBzZXQKK0NUX0FSQ0hfTEU9eQorQ1RfQVJDSF8zMj15CitDVF9BUkNIX0JJVE5FU1M9MzIKK0NUX0FSQ0hfRkxPQVRfSFc9eQorIyBDVF9BUkNIX0ZMT0FUX1NXIGlzIG5vdCBzZXQKK0NUX1RBUkdFVF9DRkxBR1M9IiIKK0NUX1RBUkdFVF9MREZMQUdTPSIiCisjIENUX0FSQ0hfYWxwaGEgaXMgbm90IHNldAorQ1RfQVJDSF9hcm09eQorIyBDVF9BUkNIX2F2cjMyIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9ibGFja2ZpbiBpcyBub3Qgc2V0CisjIENUX0FSQ0hfbWlwcyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfcG93ZXJwYyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc2ggaXMgbm90IHNldAorIyBDVF9BUkNIX3NwYXJjIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF94ODYgaXMgbm90IHNldAorQ1RfQVJDSF9hbHBoYV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hcm1fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXZyMzJfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYmxhY2tmaW5fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbTY4a19BVkFJTEFCTEU9eQorQ1RfQVJDSF9taXBzX0FWQUlMQUJMRT15CitDVF9BUkNIX3Bvd2VycGNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfczM5MF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zaF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zcGFyY19BVkFJTEFCTEU9eQorQ1RfQVJDSF94ODZfQVZBSUxBQkxFPXkKKworIworIyBHZW5lcmljIHRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIX1VTRV9NTVU9eQorCisjCisjIFRhcmdldCBvcHRpbWlzYXRpb25zCisjCisKKyMKKyMgYXJtIG90aGVyIG9wdGlvbnMKKyMKK0NUX0FSQ0hfQVJNX01PREU9ImFybSIKK0NUX0FSQ0hfQVJNX01PREVfQVJNPXkKK0NUX0FSQ0hfQVJNX0VBQkk9eQorCisjCisjIFRvb2xjaGFpbiBvcHRpb25zCisjCisKKyMKKyMgR2VuZXJhbCB0b29sY2hhaW4gb3B0aW9ucworIworQ1RfRk9SQ0VfU1lTUk9PVD15CitDVF9VU0VfU1lTUk9PVD15CitDVF9TWVNST09UX05BTUU9InN5c3Jvb3QiCitDVF9TWVNST09UX0RJUl9QUkVGSVg9IiIKK0NUX1RPT0xDSEFJTl9QS0dWRVJTSU9OPSIiCitDVF9UT09MQ0hBSU5fQlVHVVJMPSIiCisKKyMKKyMgVHVwbGUgY29tcGxldGlvbiBhbmQgYWxpYXNpbmcKKyMKK0NUX1RBUkdFVF9WRU5ET1I9InVua25vd24iCitDVF9UQVJHRVRfQUxJQVNfU0VEX0VYUFI9IiIKK0NUX1RBUkdFVF9BTElBUz0iIgorCisjCisjIFRvb2xjaGFpbiB0eXBlCisjCitDVF9DUk9TUz15CitDVF9UT09MQ0hBSU5fVFlQRT0iY3Jvc3MiCisKKyMKKyMgQnVpbGQgc3lzdGVtCisjCitDVF9CVUlMRD0iIgorQ1RfQlVJTERfUFJFRklYPSIiCitDVF9CVUlMRF9TVUZGSVg9IiIKKworIworIyBPcGVyYXRpbmcgU3lzdGVtCisjCitDVF9CQVJFX01FVEFMPXkKK0NUX0tFUk5FTD0iYmFyZS1tZXRhbCIKK0NUX0tFUk5FTF9iYXJlX21ldGFsPXkKKyMgQ1RfS0VSTkVMX2xpbnV4IGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9iYXJlX21ldGFsX0FWQUlMQUJMRT15CitDVF9LRVJORUxfbGludXhfQVZBSUxBQkxFPXkKK0NUX0tFUk5FTF9taW5ndzMyX0FWQUlMQUJMRT15CisKKyMKKyMgQ29tbW9uIGtlcm5lbCBvcHRpb25zCisjCisKKyMKKyMgQmluYXJ5IHV0aWxpdGllcworIworQ1RfQVJDSF9CSU5GTVRfRUxGPXkKKworIworIyBHTlUgYmludXRpbHMKKyMKKyMgQ1RfQklOVVRJTFNfVl8yXzIxXzFhIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfVl8yXzIwXzFhIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX1ZfMl8xOV8xYT15CisjIENUX0JJTlVUSUxTX1ZfMl8xOGEgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVkVSU0lPTj0iMi4xOS4xYSIKK0NUX0JJTlVUSUxTXzJfMTlfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfMl8xOF9vcl9sYXRlcj15CitDVF9CSU5VVElMU19HT0xEX1NVUFBPUlRTX0FSQ0g9eQorQ1RfQklOVVRJTFNfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0JJTlVUSUxTX0xJTktFUl9MRD15CitDVF9CSU5VVElMU19MSU5LRVJTX0xJU1Q9ImxkIgorQ1RfQklOVVRJTFNfTElOS0VSX0RFRkFVTFQ9ImJmZCIKK0NUX0JJTlVUSUxTX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorCisjCisjIEMgY29tcGlsZXIKKyMKK0NUX0NDPSJnY2MiCitDVF9DQ19WRVJTSU9OPSI0LjMuNCIKK0NUX0NDX2djYz15CisjIENUX0NDX1ZfNF80XzYgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF81IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzMgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8yIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM182IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNSBpcyBub3Qgc2V0CitDVF9DQ19WXzRfM180PXkKKyMgQ1RfQ0NfVl80XzNfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8yXzIgaXMgbm90IHNldAorQ1RfQ0NfR0NDXzRfMl9vcl9sYXRlcj15CitDVF9DQ19HQ0NfNF8zPXkKK0NUX0NDX0dDQ180XzNfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9DQ19HQ0NfVVNFX0dNUF9NUEZSPXkKK0NUX0NDX1NVUFBPUlRfQ1hYPXkKK0NUX0NDX1NVUFBPUlRfRk9SVFJBTj15CitDVF9DQ19TVVBQT1JUX0pBVkE9eQorQ1RfQ0NfU1VQUE9SVF9BREE9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDPXkKK0NUX0NDX1NVUFBPUlRfT0JKQ1hYPXkKKworIworIyBBZGRpdGlvbmFsIHN1cHBvcnRlZCBsYW5ndWFnZXM6CisjCitDVF9DQ19MQU5HX0NYWD15CisKKyMKKyMgZ2NjIG90aGVyIG9wdGlvbnMKKyMKK0NUX0NDX0VOQUJMRV9DWFhfRkxBR1M9IiIKK0NUX0NDX0NPUkVfRVhUUkFfQ09ORklHX0FSUkFZPSIiCisKKyMKKyMgT3B0aW1pc2F0aW9uIGZlYXR1cmVzCisjCisKKyMKKyMgU2V0dGluZ3MgZm9yIGxpYnJhcmllcyBydW5uaW5nIG9uIHRhcmdldAorIworQ1RfQ0NfR0NDX0VOQUJMRV9UQVJHRVRfT1BUU1BBQ0U9eQorIyBDVF9DQ19HQ0NfTElCTVVERkxBUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJHT01QIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQlNTUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYy4gb2JzY3VyZSBvcHRpb25zLgorIworIyBDVF9DQ19HQ0NfRElTQUJMRV9QQ0ggaXMgbm90IHNldAorQ1RfQ0NfR0NDX0xEQkxfMTI4PW0KKworIworIyBDLWxpYnJhcnkKKyMKK0NUX0xJQkM9Im5ld2xpYiIKK0NUX0xJQkNfVkVSU0lPTj0iMS4xNy4wIgorQ1RfTElCQ19uZXdsaWI9eQorIyBDVF9MSUJDX25vbmUgaXMgbm90IHNldAorQ1RfTElCQ19lZ2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfZ2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbWluZ3dfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbmV3bGliX0FWQUlMQUJMRT15CitDVF9MSUJDX05FV0xJQl9WXzFfMTdfMD15CisjIENUX0xJQkNfTkVXTElCX0NWUyBpcyBub3Qgc2V0CisKKyMKKyMgQXJjaGl0ZWN0dXJlIHNwZWNpZmljIG9wdGlvbnMKKyMKK0NUX0xJQkNfbm9uZV9BVkFJTEFCTEU9eQorQ1RfTElCQ191Q2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfU1VQUE9SVF9USFJFQURTX05PTkU9eQorQ1RfVEhSRUFEUz0ibm9uZSIKKworIworIyBDb21tb24gQyBsaWJyYXJ5IG9wdGlvbnMKKyMKK0NUX1RIUkVBRFNfTk9ORT15CisKKyMKKyMgbmV3bGliIG90aGVyIG9wdGlvbnMKKyMKKyMgQ1RfTElCQ19ORVdMSUJfSU9fQzk5Rk1UIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19ORVdMSUJfSU9fTEwgaXMgbm90IHNldAorIyBDVF9MSUJDX05FV0xJQl9JT19GTE9BVCBpcyBub3Qgc2V0CisjIENUX0xJQkNfTkVXTElCX0RJU0FCTEVfU1VQUExJRURfU1lTQ0FMTFMgaXMgbm90IHNldAorCisjCisjIERlYnVnIGZhY2lsaXRpZXMKKyMKKyMgQ1RfREVCVUdfZG1hbGxvYyBpcyBub3Qgc2V0CisjIENUX0RFQlVHX2R1bWEgaXMgbm90IHNldAorQ1RfREVCVUdfZ2RiPXkKK0NUX0dEQl9DUk9TUz15CisjIENUX0dEQl9DUk9TU19TVEFUSUMgaXMgbm90IHNldAorQ1RfR0RCX0NST1NTX1BZVEhPTj15CisKKyMKKyMgSW4gYmFyZS1tZXRhbCwgeW91J2xsIG5lZWQgdG8gICAKKyMKKworIworIyBwcm92aWRlIHlvdXIgb3duIGdkYnNlcnZlciBzdHViLgorIworCisjCisjIGdkYiB2ZXJzaW9uCisjCitDVF9HREJfVl82XzhhPXkKK0NUX0dEQl9WRVJTSU9OPSI2LjhhIgorIyBDVF9ERUJVR19sdHJhY2UgaXMgbm90IHNldAorIyBDVF9ERUJVR19zdHJhY2UgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMKKyMKK0NUX0NPTVBMSUJTX05FRURFRD15CitDVF9HTVBfTkVFREVEPXkKK0NUX01QRlJfTkVFREVEPXkKK0NUX0NPTVBMSUJTPXkKK0NUX0dNUD15CitDVF9NUEZSPXkKK0NUX0dNUF9WXzRfM18yPXkKKyMgQ1RfR01QX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9HTVBfVl80XzNfMCBpcyBub3Qgc2V0CitDVF9HTVBfVkVSU0lPTj0iNC4zLjIiCisjIENUX01QRlJfVl8zXzBfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZfMl80XzI9eQorIyBDVF9NUEZSX1ZfMl80XzEgaXMgbm90IHNldAorIyBDVF9NUEZSX1ZfMl80XzAgaXMgbm90IHNldAorQ1RfTVBGUl9WRVJTSU9OPSIyLjQuMiIKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzIGNvbW1vbiBvcHRpb25zCisjCisjIENUX0NPTVBMSUJTX0NIRUNLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0tdW5rbm93bi1lYWJpL3JlcG9ydGVkLmJ5IGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2FybS11bmtub3duLWVhYmkvcmVwb3J0ZWQuYnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhOGYxNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0tdW5rbm93bi1lYWJpL3JlcG9ydGVkLmJ5CkBAIC0wLDAgKzEsMyBAQAorcmVwb3J0ZXJfbmFtZT0iWUVNIgorcmVwb3J0ZXJfdXJsPSJodHRwOi8veW1vcmluLmlzLWEtZ2Vlay5vcmcvIgorcmVwb3J0ZXJfY29tbWVudD0iIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvY3Jvc3N0b29sLmNvbmZpZyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2Nyb3NzdG9vbC5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU3OTFmOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2Nyb3NzdG9vbC5jb25maWcKQEAgLTAsMCArMSw0NTIgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgY3Jvc3N0b29sLU5HIGhnX2RlZmF1bHRAMjcyMV83YjY0NzQ2YjBhYjMgQ29uZmlndXJhdGlvbgorIyBTdW4gT2N0IDE2IDE3OjIwOjUzIDIwMTEKKyMKK0NUX0NPTkZJR1VSRV9oYXNfeHp1dGlscz15CitDVF9DT05GSUdVUkVfaGFzX2N2cz15CitDVF9DT05GSUdVUkVfaGFzX3N2bj15CitDVF9NT0RVTEVTPXkKKworIworIyBQYXRocyBhbmQgbWlzYyBvcHRpb25zCisjCisKKyMKKyMgY3Jvc3N0b29sLU5HIGJlaGF2aW9yCisjCisjIENUX09CU09MRVRFIGlzIG5vdCBzZXQKKyMgQ1RfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfQ1QgaXMgbm90IHNldAorCisjCisjIFBhdGhzCisjCitDVF9MT0NBTF9UQVJCQUxMU19ESVI9IiR7SE9NRX0vc3JjIgorQ1RfU0FWRV9UQVJCQUxMUz15CitDVF9XT1JLX0RJUj0iJHtDVF9UT1BfRElSfS8uYnVpbGQiCitDVF9QUkVGSVhfRElSPSIke0hPTUV9L3gtdG9vbHMvJHtDVF9UQVJHRVR9IgorQ1RfSU5TVEFMTF9ESVI9IiR7Q1RfUFJFRklYX0RJUn0iCitDVF9STV9SRl9QUkVGSVhfRElSPXkKKyMgQ1RfUkVNT1ZFX0RPQ1MgaXMgbm90IHNldAorQ1RfSU5TVEFMTF9ESVJfUk89eQorQ1RfU1RSSVBfQUxMX1RPT0xDSEFJTl9FWEVDVVRBQkxFUz15CisKKyMKKyMgRG93bmxvYWRpbmcKKyMKKyMgQ1RfRk9SQklEX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfRk9SQ0VfRE9XTkxPQUQgaXMgbm90IHNldAorQ1RfQ09OTkVDVF9USU1FT1VUPTEwCisjIENUX09OTFlfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9VU0VfTUlSUk9SIGlzIG5vdCBzZXQKKworIworIyBFeHRyYWN0aW5nCisjCisjIENUX0ZPUkNFX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfT1ZFUklERV9DT05GSUdfR1VFU1NfU1VCPXkKKyMgQ1RfT05MWV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX1BBVENIX0JVTkRMRUQ9eQorIyBDVF9QQVRDSF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9GQUxMQkFDS19MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0ZBTExCQUNLX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9OT05FIGlzIG5vdCBzZXQKK0NUX1BBVENIX09SREVSPSJidW5kbGVkIgorCisjCisjIEJ1aWxkIGJlaGF2aW9yCisjCitDVF9QQVJBTExFTF9KT0JTPTAKK0NUX0xPQUQ9MAorQ1RfVVNFX1BJUEVTPXkKK0NUX0VYVFJBX0ZMQUdTX0ZPUl9IT1NUPSIiCisjIENUX0NPTkZJR19TSEVMTF9TSCBpcyBub3Qgc2V0CisjIENUX0NPTkZJR19TSEVMTF9BU0ggaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMX0JBU0g9eQorIyBDVF9DT05GSUdfU0hFTExfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTD0iJHtiYXNofSIKKworIworIyBMb2dnaW5nCisjCisjIENUX0xPR19FUlJPUiBpcyBub3Qgc2V0CisjIENUX0xPR19XQVJOIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0lORk8gaXMgbm90IHNldAorQ1RfTE9HX0VYVFJBPXkKKyMgQ1RfTE9HX0FMTCBpcyBub3Qgc2V0CisjIENUX0xPR19ERUJVRyBpcyBub3Qgc2V0CitDVF9MT0dfTEVWRUxfTUFYPSJFWFRSQSIKKyMgQ1RfTE9HX1NFRV9UT09MU19XQVJOIGlzIG5vdCBzZXQKK0NUX0xPR19QUk9HUkVTU19CQVI9eQorQ1RfTE9HX1RPX0ZJTEU9eQorQ1RfTE9HX0ZJTEVfQ09NUFJFU1M9eQorCisjCisjIFRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIPSJhcm0iCitDVF9BUkNIX1NVUFBPUlRTX0JPVEhfTU1VPXkKK0NUX0FSQ0hfU1VQUE9SVFNfQk9USF9FTkRJQU49eQorQ1RfQVJDSF9TVVBQT1JUU18zMj15CitDVF9BUkNIX1NVUFBPUlRfQVJDSD15CitDVF9BUkNIX1NVUFBPUlRfQ1BVPXkKK0NUX0FSQ0hfU1VQUE9SVF9UVU5FPXkKK0NUX0FSQ0hfU1VQUE9SVF9GUFU9eQorQ1RfQVJDSF9ERUZBVUxUX0hBU19NTVU9eQorQ1RfQVJDSF9ERUZBVUxUX0xFPXkKK0NUX0FSQ0hfREVGQVVMVF8zMj15CitDVF9BUkNIX0FSQ0g9IiIKK0NUX0FSQ0hfQ1BVPSIiCitDVF9BUkNIX1RVTkU9IiIKK0NUX0FSQ0hfRlBVPSIiCisjIENUX0FSQ0hfQkUgaXMgbm90IHNldAorQ1RfQVJDSF9MRT15CitDVF9BUkNIXzMyPXkKK0NUX0FSQ0hfQklUTkVTUz0zMgorIyBDVF9BUkNIX0ZMT0FUX0hXIGlzIG5vdCBzZXQKK0NUX0FSQ0hfRkxPQVRfU1c9eQorQ1RfVEFSR0VUX0NGTEFHUz0iIgorQ1RfVEFSR0VUX0xERkxBR1M9IiIKKyMgQ1RfQVJDSF9hbHBoYSBpcyBub3Qgc2V0CitDVF9BUkNIX2FybT15CisjIENUX0FSQ0hfYXZyMzIgaXMgbm90IHNldAorIyBDVF9BUkNIX2JsYWNrZmluIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9taXBzIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9wb3dlcnBjIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zaCBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc3BhcmMgaXMgbm90IHNldAorIyBDVF9BUkNIX3g4NiBpcyBub3Qgc2V0CitDVF9BUkNIX2FscGhhX0FWQUlMQUJMRT15CitDVF9BUkNIX2FybV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hdnIzMl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9ibGFja2Zpbl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9tNjhrX0FWQUlMQUJMRT15CitDVF9BUkNIX21pcHNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfcG93ZXJwY19BVkFJTEFCTEU9eQorQ1RfQVJDSF9zMzkwX0FWQUlMQUJMRT15CitDVF9BUkNIX3NoX0FWQUlMQUJMRT15CitDVF9BUkNIX3NwYXJjX0FWQUlMQUJMRT15CitDVF9BUkNIX3g4Nl9BVkFJTEFCTEU9eQorCisjCisjIEdlbmVyaWMgdGFyZ2V0IG9wdGlvbnMKKyMKK0NUX0FSQ0hfVVNFX01NVT15CisKKyMKKyMgVGFyZ2V0IG9wdGltaXNhdGlvbnMKKyMKKworIworIyBhcm0gb3RoZXIgb3B0aW9ucworIworQ1RfQVJDSF9BUk1fTU9ERT0iYXJtIgorQ1RfQVJDSF9BUk1fTU9ERV9BUk09eQorQ1RfQVJDSF9BUk1fRUFCST15CisKKyMKKyMgVG9vbGNoYWluIG9wdGlvbnMKKyMKKworIworIyBHZW5lcmFsIHRvb2xjaGFpbiBvcHRpb25zCisjCitDVF9GT1JDRV9TWVNST09UPXkKK0NUX1VTRV9TWVNST09UPXkKK0NUX1NZU1JPT1RfTkFNRT0ic3lzcm9vdCIKK0NUX1NZU1JPT1RfRElSX1BSRUZJWD0iIgorQ1RfVE9PTENIQUlOX1BLR1ZFUlNJT049IiIKK0NUX1RPT0xDSEFJTl9CVUdVUkw9IiIKKworIworIyBUdXBsZSBjb21wbGV0aW9uIGFuZCBhbGlhc2luZworIworQ1RfVEFSR0VUX1ZFTkRPUj0idW5rbm93biIKK0NUX1RBUkdFVF9BTElBU19TRURfRVhQUj0iIgorQ1RfVEFSR0VUX0FMSUFTPSIiCisKKyMKKyMgVG9vbGNoYWluIHR5cGUKKyMKK0NUX0NST1NTPXkKK0NUX1RPT0xDSEFJTl9UWVBFPSJjcm9zcyIKKworIworIyBCdWlsZCBzeXN0ZW0KKyMKK0NUX0JVSUxEPSIiCitDVF9CVUlMRF9QUkVGSVg9IiIKK0NUX0JVSUxEX1NVRkZJWD0iIgorCisjCisjIE9wZXJhdGluZyBTeXN0ZW0KKyMKK0NUX0tFUk5FTF9TVVBQT1JUU19TSEFSRURfTElCUz15CitDVF9LRVJORUw9ImxpbnV4IgorQ1RfS0VSTkVMX1ZFUlNJT049IjMuMCIKKyMgQ1RfS0VSTkVMX2JhcmVfbWV0YWwgaXMgbm90IHNldAorQ1RfS0VSTkVMX2xpbnV4PXkKK0NUX0tFUk5FTF9iYXJlX21ldGFsX0FWQUlMQUJMRT15CitDVF9LRVJORUxfbGludXhfQVZBSUxBQkxFPXkKKyMgQ1RfS0VSTkVMX1ZfM18wXzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMyBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8yIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzEgaXMgbm90IHNldAorQ1RfS0VSTkVMX1ZfM18wPXkKKyMgQ1RfS0VSTkVMX1ZfMl82XzM5XzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzhfOCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zN182IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM2XzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzVfMTQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzRfMTAgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzNfMTkgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzJfNDYgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzFfMTQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMjdfNTkgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9taW5ndzMyX0FWQUlMQUJMRT15CisKKyMKKyMgQ29tbW9uIGtlcm5lbCBvcHRpb25zCisjCitDVF9TSEFSRURfTElCUz15CisKKyMKKyMgbGludXggb3RoZXIgb3B0aW9ucworIworQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8wPXkKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8xIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8yIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9MSU5VWF9WRVJCT1NFX0xFVkVMPTAKK0NUX0tFUk5FTF9MSU5VWF9JTlNUQUxMX0NIRUNLPXkKKworIworIyBCaW5hcnkgdXRpbGl0aWVzCisjCitDVF9BUkNIX0JJTkZNVF9FTEY9eQorCisjCisjIEdOVSBiaW51dGlscworIworIyBDVF9CSU5VVElMU19WXzJfMjFfMWEgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19WXzJfMjBfMWEgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVl8yXzE5XzFhPXkKKyMgQ1RfQklOVVRJTFNfVl8yXzE4YSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WRVJTSU9OPSIyLjE5LjFhIgorQ1RfQklOVVRJTFNfMl8xOV9vcl9sYXRlcj15CitDVF9CSU5VVElMU18yXzE4X29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTX0dPTERfU1VQUE9SVFNfQVJDSD15CitDVF9CSU5VVElMU19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQklOVVRJTFNfRk9SQ0VfTERfQkZEPXkKK0NUX0JJTlVUSUxTX0xJTktFUl9MRD15CitDVF9CSU5VVElMU19MSU5LRVJTX0xJU1Q9ImxkIgorQ1RfQklOVVRJTFNfTElOS0VSX0RFRkFVTFQ9ImJmZCIKK0NUX0JJTlVUSUxTX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVD15CitDVF9CSU5VVElMU19GT1JfVEFSR0VUX0lCRVJUWT15CitDVF9CSU5VVElMU19GT1JfVEFSR0VUX0JGRD15CisKKyMKKyMgQyBjb21waWxlcgorIworQ1RfQ0M9ImdjYyIKK0NUX0NDX1ZFUlNJT049IjQuMy4yIgorQ1RfQ0NfZ2NjPXkKKyMgQ1RfQ0NfVl80XzRfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzYgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM181IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzMgaXMgbm90IHNldAorQ1RfQ0NfVl80XzNfMj15CisjIENUX0NDX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfMl80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfMiBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfNF8yX29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzM9eQorQ1RfQ0NfR0NDXzRfM19vcl9sYXRlcj15CitDVF9DQ19HQ0NfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0NDX0dDQ19VU0VfR01QX01QRlI9eQorQ1RfQ0NfTEFOR19KQVZBX1VTRV9FQ0o9eQorQ1RfQ0NfTEFOR19GT1JUUkFOPXkKK0NUX0NDX1NVUFBPUlRfQ1hYPXkKK0NUX0NDX1NVUFBPUlRfRk9SVFJBTj15CitDVF9DQ19TVVBQT1JUX0pBVkE9eQorQ1RfQ0NfU1VQUE9SVF9BREE9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDPXkKK0NUX0NDX1NVUFBPUlRfT0JKQ1hYPXkKKworIworIyBBZGRpdGlvbmFsIHN1cHBvcnRlZCBsYW5ndWFnZXM6CisjCitDVF9DQ19MQU5HX0NYWD15CitDVF9DQ19MQU5HX0pBVkE9eQorCisjCisjIGdjYyBvdGhlciBvcHRpb25zCisjCitDVF9DQ19FTkFCTEVfQ1hYX0ZMQUdTPSIiCitDVF9DQ19DT1JFX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfQ0NfRVhUUkFfQ09ORklHX0FSUkFZPSIiCisKKyMKKyMgT3B0aW1pc2F0aW9uIGZlYXR1cmVzCisjCisKKyMKKyMgU2V0dGluZ3MgZm9yIGxpYnJhcmllcyBydW5uaW5nIG9uIHRhcmdldAorIworQ1RfQ0NfR0NDX0VOQUJMRV9UQVJHRVRfT1BUU1BBQ0U9eQorIyBDVF9DQ19HQ0NfTElCTVVERkxBUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJHT01QIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQlNTUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYy4gb2JzY3VyZSBvcHRpb25zLgorIworQ1RfQ0NfQ1hBX0FURVhJVD15CisjIENUX0NDX0dDQ19ESVNBQkxFX1BDSCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19TSkxKX0VYQ0VQVElPTlMgaXMgbm90IHNldAorQ1RfQ0NfR0NDX0xEQkxfMTI4PW0KKworIworIyBDLWxpYnJhcnkKKyMKK0NUX0xJQkM9ImdsaWJjIgorQ1RfTElCQ19WRVJTSU9OPSIyLjkiCisjIENUX0xJQkNfZWdsaWJjIGlzIG5vdCBzZXQKK0NUX0xJQkNfZ2xpYmM9eQorIyBDVF9MSUJDX3VDbGliYyBpcyBub3Qgc2V0CitDVF9MSUJDX2VnbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19nbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19HTElCQ19UQVJCQUxMPXkKK0NUX0xJQkNfR0xJQkNfVl8yXzk9eQorIyBDVF9MSUJDX0dMSUJDX1ZfMl84IGlzIG5vdCBzZXQKK0NUX0xJQkNfbWluZ3dfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbmV3bGliX0FWQUlMQUJMRT15CitDVF9MSUJDX25vbmVfQVZBSUxBQkxFPXkKK0NUX0xJQkNfdUNsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX1NVUFBPUlRfVEhSRUFEU19BTlk9eQorQ1RfTElCQ19TVVBQT1JUX05QVEw9eQorQ1RfVEhSRUFEUz0ibnB0bCIKKworIworIyBDb21tb24gQyBsaWJyYXJ5IG9wdGlvbnMKKyMKK0NUX1RIUkVBRFNfTlBUTD15CitDVF9MSUJDX1hMREQ9eQorQ1RfTElCQ19HTElCQ19NQVlfRk9SQ0VfUE9SVFM9eQorQ1RfTElCQ19nbGliY19mYW1pbGx5PXkKK0NUX0xJQkNfR0xJQkNfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9MSUJDX0dMSUJDX0NPTkZJR1BBUk1TPSIiCitDVF9MSUJDX0dMSUJDX0VYVFJBX0NGTEFHUz0iIgorQ1RfTElCQ19FWFRSQV9DQ19BUkdTPSIiCisjIENUX0xJQkNfRElTQUJMRV9WRVJTSU9OSU5HIGlzIG5vdCBzZXQKK0NUX0xJQkNfT0xERVNUX0FCST0iIgorIyBDVF9MSUJDX0dMSUJDX0ZPUkNFX1VOV0lORCBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX1VTRV9QT1JUUz15CitDVF9MSUJDX0FERE9OU19MSVNUPSIiCisjIENUX0xJQkNfTE9DQUxFUyBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfS0VSTkVMX1ZFUlNJT05fTk9ORSBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX0FTX0hFQURFUlM9eQorIyBDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX0NIT1NFTiBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX01JTl9LRVJORUw9IjMuMCIKKworIworIyBnbGliYyBvdGhlciBvcHRpb25zCisjCisKKyMKKyMgV0FSTklORyAhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIworCisjCisjICAgRm9yIGdsaWJjID49IDIuOCwgaXQgY2FuIGhhcHBlbiB0aGF0IHRoZSB0YXJiYWxscyAgICAKKyMKKworIworIyAgIGZvciB0aGUgYWRkb25zIGFyZSBub3QgYXZhaWxhYmxlIGZvciBkb3dubG9hZC4gICAgICAgCisjCisKKyMKKyMgICBJZiB0aGF0IGhhcHBlbnMsIGJhZCBsdWNrLi4uIFRyeSBhIHByZXZpb3VzIHZlcnNpb24gIAorIworCisjCisjICAgb3IgdHJ5IGFnYWluIGxhdGVyLi4uIDotKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyMKKworIworIyBEZWJ1ZyBmYWNpbGl0aWVzCisjCitDVF9ERUJVR19kbWFsbG9jPXkKK0NUX0RNQUxMT0NfVl81XzVfMj15CitDVF9ETUFMTE9DX1ZFUlNJT049IjUuNS4yIgorQ1RfREVCVUdfZHVtYT15CitDVF9EVU1BX0E9eQorQ1RfRFVNQV9TTz15CitDVF9EVU1BX1ZfMl81XzE1PXkKK0NUX0RVTUFfVkVSU0lPTj0iMl81XzE1IgorQ1RfREVCVUdfZ2RiPXkKK0NUX0dEQl9DUk9TUz15CisjIENUX0dEQl9DUk9TU19TVEFUSUMgaXMgbm90IHNldAorQ1RfR0RCX0NST1NTX1BZVEhPTj15CitDVF9HREJfTkFUSVZFPXkKKyMgQ1RfR0RCX05BVElWRV9TVEFUSUMgaXMgbm90IHNldAorQ1RfR0RCX0dEQlNFUlZFUj15CitDVF9HREJfR0RCU0VSVkVSX1NUQVRJQz15CisKKyMKKyMgZ2RiIHZlcnNpb24KKyMKK0NUX0dEQl9WXzZfOGE9eQorQ1RfR0RCX1ZFUlNJT049IjYuOGEiCitDVF9ERUJVR19sdHJhY2U9eQorQ1RfTFRSQUNFX1ZfMF81XzM9eQorIyBDVF9MVFJBQ0VfVl8wXzVfMiBpcyBub3Qgc2V0CitDVF9MVFJBQ0VfVkVSU0lPTj0iMC41LjMiCitDVF9MVFJBQ0VfMF81XzNfb3JfbGF0ZXI9eQorQ1RfREVCVUdfc3RyYWNlPXkKK0NUX1NUUkFDRV9WXzRfNV8xOT15CisjIENUX1NUUkFDRV9WXzRfNV8xOCBpcyBub3Qgc2V0CitDVF9TVFJBQ0VfVkVSU0lPTj0iNC41LjE5IgorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMKKyMKK0NUX0NPTVBMSUJTX05FRURFRD15CitDVF9HTVBfTkVFREVEPXkKK0NUX01QRlJfTkVFREVEPXkKK0NUX0NPTVBMSUJTPXkKK0NUX0dNUD15CitDVF9NUEZSPXkKK0NUX0xJQkVMRl9UQVJHRVQ9eQorQ1RfR01QX1ZfNF8zXzI9eQorIyBDVF9HTVBfVl80XzNfMSBpcyBub3Qgc2V0CisjIENUX0dNUF9WXzRfM18wIGlzIG5vdCBzZXQKK0NUX0dNUF9WRVJTSU9OPSI0LjMuMiIKKyMgQ1RfTVBGUl9WXzNfMF8wIGlzIG5vdCBzZXQKK0NUX01QRlJfVl8yXzRfMj15CisjIENUX01QRlJfVl8yXzRfMSBpcyBub3Qgc2V0CisjIENUX01QRlJfVl8yXzRfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZFUlNJT049IjIuNC4yIgorCisjCisjIGxpYmVsZiB2ZXJzaW9uIG5lZWRlZCB0byBidWlsZCBmb3IgdGFyZ2V0CisjCitDVF9MSUJFTEZfVl8wXzhfMTM9eQorIyBDVF9MSUJFTEZfVl8wXzhfMTIgaXMgbm90IHNldAorQ1RfTElCRUxGX1ZFUlNJT049IjAuOC4xMyIKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzIGNvbW1vbiBvcHRpb25zCisjCisjIENUX0NPTVBMSUJTX0NIRUNLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3JlcG9ydGVkLmJ5IGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvcmVwb3J0ZWQuYnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJkNmUzMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3JlcG9ydGVkLmJ5CkBAIC0wLDAgKzEsMyBAQAorcmVwb3J0ZXJfbmFtZT0iQWxleGFuZGVyIEJJR0dBIgorcmVwb3J0ZXJfdXJsPSJodHRwOi8vc291cmNld2FyZS5vcmcvbWwvY3Jvc3NnY2MvMjAwOC0wNi9tc2cwMDAzMS5odG1sIgorcmVwb3J0ZXJfY29tbWVudD0iIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2FybS11bmtub3duLWxpbnV4LXVjbGliY2dudWVhYmkvY3Jvc3N0b29sLmNvbmZpZyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0tdW5rbm93bi1saW51eC11Y2xpYmNnbnVlYWJpL2Nyb3NzdG9vbC5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg0OWRjYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0tdW5rbm93bi1saW51eC11Y2xpYmNnbnVlYWJpL2Nyb3NzdG9vbC5jb25maWcKQEAgLTAsMCArMSw1MDUgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgY3Jvc3N0b29sLU5HIGhnX2RlZmF1bHRAMjcyMV83YjY0NzQ2YjBhYjMgQ29uZmlndXJhdGlvbgorIyBTdW4gT2N0IDE2IDE3OjIyOjQyIDIwMTEKKyMKK0NUX0NPTkZJR1VSRV9oYXNfeHp1dGlscz15CitDVF9DT05GSUdVUkVfaGFzX2N2cz15CitDVF9DT05GSUdVUkVfaGFzX3N2bj15CitDVF9NT0RVTEVTPXkKKworIworIyBQYXRocyBhbmQgbWlzYyBvcHRpb25zCisjCisKKyMKKyMgY3Jvc3N0b29sLU5HIGJlaGF2aW9yCisjCisjIENUX09CU09MRVRFIGlzIG5vdCBzZXQKK0NUX0VYUEVSSU1FTlRBTD15CisjIENUX0RFQlVHX0NUIGlzIG5vdCBzZXQKKworIworIyBQYXRocworIworQ1RfTE9DQUxfVEFSQkFMTFNfRElSPSIke0hPTUV9L3NyYyIKK0NUX1NBVkVfVEFSQkFMTFM9eQorQ1RfV09SS19ESVI9IiR7Q1RfVE9QX0RJUn0vLmJ1aWxkIgorQ1RfUFJFRklYX0RJUj0iJHtIT01FfS94LXRvb2xzLyR7Q1RfVEFSR0VUfSIKK0NUX0lOU1RBTExfRElSPSIke0NUX1BSRUZJWF9ESVJ9IgorQ1RfUk1fUkZfUFJFRklYX0RJUj15CitDVF9SRU1PVkVfRE9DUz15CitDVF9JTlNUQUxMX0RJUl9STz15CitDVF9TVFJJUF9BTExfVE9PTENIQUlOX0VYRUNVVEFCTEVTPXkKKworIworIyBEb3dubG9hZGluZworIworIyBDVF9GT1JCSURfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9GT1JDRV9ET1dOTE9BRCBpcyBub3Qgc2V0CitDVF9DT05ORUNUX1RJTUVPVVQ9MTAKKyMgQ1RfT05MWV9ET1dOTE9BRCBpcyBub3Qgc2V0CisjIENUX1VTRV9NSVJST1IgaXMgbm90IHNldAorCisjCisjIEV4dHJhY3RpbmcKKyMKKyMgQ1RfRk9SQ0VfRVhUUkFDVCBpcyBub3Qgc2V0CitDVF9PVkVSSURFX0NPTkZJR19HVUVTU19TVUI9eQorIyBDVF9PTkxZX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfUEFUQ0hfQlVORExFRD15CisjIENUX1BBVENIX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9CVU5ETEVEX0ZBTExCQUNLX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTE9DQUxfRkFMTEJBQ0tfQlVORExFRCBpcyBub3Qgc2V0CisjIENUX1BBVENIX05PTkUgaXMgbm90IHNldAorQ1RfUEFUQ0hfT1JERVI9ImJ1bmRsZWQiCisKKyMKKyMgQnVpbGQgYmVoYXZpb3IKKyMKK0NUX1BBUkFMTEVMX0pPQlM9MAorQ1RfTE9BRD0wCitDVF9VU0VfUElQRVM9eQorQ1RfRVhUUkFfRkxBR1NfRk9SX0hPU1Q9IiIKKyMgQ1RfQ09ORklHX1NIRUxMX1NIIGlzIG5vdCBzZXQKKyMgQ1RfQ09ORklHX1NIRUxMX0FTSCBpcyBub3Qgc2V0CitDVF9DT05GSUdfU0hFTExfQkFTSD15CisjIENUX0NPTkZJR19TSEVMTF9DVVNUT00gaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMPSIke2Jhc2h9IgorCisjCisjIExvZ2dpbmcKKyMKKyMgQ1RfTE9HX0VSUk9SIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX1dBUk4gaXMgbm90IHNldAorIyBDVF9MT0dfSU5GTyBpcyBub3Qgc2V0CitDVF9MT0dfRVhUUkE9eQorIyBDVF9MT0dfQUxMIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0RFQlVHIGlzIG5vdCBzZXQKK0NUX0xPR19MRVZFTF9NQVg9IkVYVFJBIgorIyBDVF9MT0dfU0VFX1RPT0xTX1dBUk4gaXMgbm90IHNldAorQ1RfTE9HX1BST0dSRVNTX0JBUj15CitDVF9MT0dfVE9fRklMRT15CitDVF9MT0dfRklMRV9DT01QUkVTUz15CisKKyMKKyMgVGFyZ2V0IG9wdGlvbnMKKyMKK0NUX0FSQ0g9ImFybSIKK0NUX0FSQ0hfU1VQUE9SVFNfQk9USF9NTVU9eQorQ1RfQVJDSF9TVVBQT1JUU19CT1RIX0VORElBTj15CitDVF9BUkNIX1NVUFBPUlRTXzMyPXkKK0NUX0FSQ0hfU1VQUE9SVF9BUkNIPXkKK0NUX0FSQ0hfU1VQUE9SVF9DUFU9eQorQ1RfQVJDSF9TVVBQT1JUX1RVTkU9eQorQ1RfQVJDSF9TVVBQT1JUX0ZQVT15CitDVF9BUkNIX0RFRkFVTFRfSEFTX01NVT15CitDVF9BUkNIX0RFRkFVTFRfTEU9eQorQ1RfQVJDSF9ERUZBVUxUXzMyPXkKK0NUX0FSQ0hfQVJDSD0iYXJtdjV0ZSIKK0NUX0FSQ0hfQ1BVPSJ4c2NhbGUiCitDVF9BUkNIX1RVTkU9InhzY2FsZSIKK0NUX0FSQ0hfRlBVPSIiCisjIENUX0FSQ0hfQkUgaXMgbm90IHNldAorQ1RfQVJDSF9MRT15CitDVF9BUkNIXzMyPXkKK0NUX0FSQ0hfQklUTkVTUz0zMgorIyBDVF9BUkNIX0ZMT0FUX0hXIGlzIG5vdCBzZXQKK0NUX0FSQ0hfRkxPQVRfU1c9eQorQ1RfVEFSR0VUX0NGTEFHUz0iIgorQ1RfVEFSR0VUX0xERkxBR1M9IiIKKyMgQ1RfQVJDSF9hbHBoYSBpcyBub3Qgc2V0CitDVF9BUkNIX2FybT15CisjIENUX0FSQ0hfYXZyMzIgaXMgbm90IHNldAorIyBDVF9BUkNIX2JsYWNrZmluIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9tNjhrIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9taXBzIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9wb3dlcnBjIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zMzkwIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zaCBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc3BhcmMgaXMgbm90IHNldAorIyBDVF9BUkNIX3g4NiBpcyBub3Qgc2V0CitDVF9BUkNIX2FscGhhX0FWQUlMQUJMRT15CitDVF9BUkNIX2FybV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hdnIzMl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9ibGFja2Zpbl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9tNjhrX0FWQUlMQUJMRT15CitDVF9BUkNIX21pcHNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfcG93ZXJwY19BVkFJTEFCTEU9eQorQ1RfQVJDSF9zMzkwX0FWQUlMQUJMRT15CitDVF9BUkNIX3NoX0FWQUlMQUJMRT15CitDVF9BUkNIX3NwYXJjX0FWQUlMQUJMRT15CitDVF9BUkNIX3g4Nl9BVkFJTEFCTEU9eQorCisjCisjIEdlbmVyaWMgdGFyZ2V0IG9wdGlvbnMKKyMKK0NUX0FSQ0hfVVNFX01NVT15CisKKyMKKyMgVGFyZ2V0IG9wdGltaXNhdGlvbnMKKyMKKworIworIyBhcm0gb3RoZXIgb3B0aW9ucworIworQ1RfQVJDSF9BUk1fTU9ERT0iYXJtIgorQ1RfQVJDSF9BUk1fTU9ERV9BUk09eQorIyBDVF9BUkNIX0FSTV9NT0RFX1RIVU1CIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9BUk1fSU5URVJXT1JLSU5HIGlzIG5vdCBzZXQKK0NUX0FSQ0hfQVJNX0VBQkk9eQorCisjCisjIFRvb2xjaGFpbiBvcHRpb25zCisjCisKKyMKKyMgR2VuZXJhbCB0b29sY2hhaW4gb3B0aW9ucworIworQ1RfRk9SQ0VfU1lTUk9PVD15CitDVF9VU0VfU1lTUk9PVD15CitDVF9TWVNST09UX05BTUU9InN5c3Jvb3QiCitDVF9TWVNST09UX0RJUl9QUkVGSVg9IiIKK0NUX1dBTlRTX1NUQVRJQ19MSU5LPXkKKyMgQ1RfU1RBVElDX1RPT0xDSEFJTiBpcyBub3Qgc2V0CitDVF9UT09MQ0hBSU5fUEtHVkVSU0lPTj0iIgorQ1RfVE9PTENIQUlOX0JVR1VSTD0iIgorCisjCisjIFR1cGxlIGNvbXBsZXRpb24gYW5kIGFsaWFzaW5nCisjCitDVF9UQVJHRVRfVkVORE9SPSJ1bmtub3duIgorQ1RfVEFSR0VUX0FMSUFTX1NFRF9FWFBSPSIiCitDVF9UQVJHRVRfQUxJQVM9IiIKKworIworIyBUb29sY2hhaW4gdHlwZQorIworIyBDVF9OQVRJVkUgaXMgbm90IHNldAorQ1RfQ1JPU1M9eQorIyBDVF9DUk9TU19OQVRJVkUgaXMgbm90IHNldAorIyBDVF9DQU5BRElBTiBpcyBub3Qgc2V0CitDVF9UT09MQ0hBSU5fVFlQRT0iY3Jvc3MiCisKKyMKKyMgQnVpbGQgc3lzdGVtCisjCitDVF9CVUlMRD0iIgorQ1RfQlVJTERfUFJFRklYPSIiCitDVF9CVUlMRF9TVUZGSVg9IiIKKworIworIyBPcGVyYXRpbmcgU3lzdGVtCisjCitDVF9LRVJORUxfU1VQUE9SVFNfU0hBUkVEX0xJQlM9eQorQ1RfS0VSTkVMPSJsaW51eCIKK0NUX0tFUk5FTF9WRVJTSU9OPSIyLjYuMzMuMTkiCisjIENUX0tFUk5FTF9iYXJlX21ldGFsIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9saW51eD15CitDVF9LRVJORUxfYmFyZV9tZXRhbF9BVkFJTEFCTEU9eQorQ1RfS0VSTkVMX2xpbnV4X0FWQUlMQUJMRT15CisjIENUX0tFUk5FTF9WXzNfMF80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzMgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8xIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM5XzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzhfOCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zN182IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM2XzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzVfMTQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzRfMTAgaXMgbm90IHNldAorQ1RfS0VSTkVMX1ZfMl82XzMzXzE5PXkKKyMgQ1RfS0VSTkVMX1ZfMl82XzMyXzQ2IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzMxXzE0IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzI3XzU5IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX0xJTlVYX0NVU1RPTSBpcyBub3Qgc2V0CitDVF9LRVJORUxfbWluZ3czMl9BVkFJTEFCTEU9eQorCisjCisjIENvbW1vbiBrZXJuZWwgb3B0aW9ucworIworQ1RfU0hBUkVEX0xJQlM9eQorCisjCisjIGxpbnV4IG90aGVyIG9wdGlvbnMKKyMKK0NUX0tFUk5FTF9MSU5VWF9WRVJCT1NJVFlfMD15CisjIENUX0tFUk5FTF9MSU5VWF9WRVJCT1NJVFlfMSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9MSU5VWF9WRVJCT1NJVFlfMiBpcyBub3Qgc2V0CitDVF9LRVJORUxfTElOVVhfVkVSQk9TRV9MRVZFTD0wCitDVF9LRVJORUxfTElOVVhfSU5TVEFMTF9DSEVDSz15CisKKyMKKyMgQmluYXJ5IHV0aWxpdGllcworIworQ1RfQVJDSF9CSU5GTVRfRUxGPXkKKworIworIyBHTlUgYmludXRpbHMKKyMKKyMgQ1RfQklOVVRJTFNfVl8yXzIxXzUzIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfVl8yXzIxXzFhIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfVl8yXzIwXzFhIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX1ZfMl8xOV8xYT15CisjIENUX0JJTlVUSUxTX1ZfMl8xOGEgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVkVSU0lPTj0iMi4xOS4xYSIKK0NUX0JJTlVUSUxTXzJfMTlfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfMl8xOF9vcl9sYXRlcj15CitDVF9CSU5VVElMU19HT0xEX1NVUFBPUlRTX0FSQ0g9eQorQ1RfQklOVVRJTFNfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0JJTlVUSUxTX0xJTktFUl9MRD15CitDVF9CSU5VVElMU19MSU5LRVJTX0xJU1Q9ImxkIgorQ1RfQklOVVRJTFNfTElOS0VSX0RFRkFVTFQ9ImJmZCIKK0NUX0JJTlVUSUxTX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVD15CitDVF9CSU5VVElMU19GT1JfVEFSR0VUX0lCRVJUWT15CitDVF9CSU5VVElMU19GT1JfVEFSR0VUX0JGRD15CisKKyMKKyMgQyBjb21waWxlcgorIworQ1RfQ0M9ImdjYyIKK0NUX0NDX1ZFUlNJT049IjQuNC4zIgorQ1RfQ0NfZ2NjPXkKKyMgQ1RfQ0NfR0NDX1NIT1dfTElOQVJPIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzZfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF82XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF81XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF80IGlzIG5vdCBzZXQKK0NUX0NDX1ZfNF80XzM9eQorIyBDVF9DQ19WXzRfNF8yIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM182IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfMl80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfMiBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfNF8yX29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzNfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDXzRfND15CitDVF9DQ19HQ0NfNF80X29yX2xhdGVyPXkKK0NUX0NDX0dDQ19IQVNfR1JBUEhJVEU9eQorQ1RfQ0NfR0NDX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9DQ19HQ0NfVVNFX0dNUF9NUEZSPXkKK0NUX0NDX0dDQ19VU0VfUFBMX0NMT09HPXkKKyMgQ1RfQ0NfTEFOR19GT1JUUkFOIGlzIG5vdCBzZXQKK0NUX0NDX1NVUFBPUlRfQ1hYPXkKK0NUX0NDX1NVUFBPUlRfRk9SVFJBTj15CitDVF9DQ19TVVBQT1JUX0pBVkE9eQorQ1RfQ0NfU1VQUE9SVF9BREE9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDPXkKK0NUX0NDX1NVUFBPUlRfT0JKQ1hYPXkKKworIworIyBBZGRpdGlvbmFsIHN1cHBvcnRlZCBsYW5ndWFnZXM6CisjCitDVF9DQ19MQU5HX0NYWD15CisjIENUX0NDX0xBTkdfSkFWQSBpcyBub3Qgc2V0CisjIENUX0NDX0xBTkdfQURBIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfTEFOR19PQkpDIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfTEFOR19PQkpDWFggaXMgbm90IHNldAorQ1RfQ0NfTEFOR19PVEhFUlM9IiIKKworIworIyBnY2Mgb3RoZXIgb3B0aW9ucworIworQ1RfQ0NfRU5BQkxFX0NYWF9GTEFHUz0iIgorQ1RfQ0NfQ09SRV9FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0NDX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfQ0NfU1RBVElDX0xJQlNURENYWD15CisKKyMKKyMgT3B0aW1pc2F0aW9uIGZlYXR1cmVzCisjCitDVF9DQ19HQ0NfVVNFX0dSQVBISVRFPXkKKworIworIyBTZXR0aW5ncyBmb3IgbGlicmFyaWVzIHJ1bm5pbmcgb24gdGFyZ2V0CisjCitDVF9DQ19HQ0NfRU5BQkxFX1RBUkdFVF9PUFRTUEFDRT15CisjIENUX0NDX0dDQ19MSUJNVURGTEFQIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQkdPTVAgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCU1NQIGlzIG5vdCBzZXQKKworIworIyBNaXNjLiBvYnNjdXJlIG9wdGlvbnMuCisjCitDVF9DQ19DWEFfQVRFWElUPXkKKyMgQ1RfQ0NfR0NDX0RJU0FCTEVfUENIIGlzIG5vdCBzZXQKK0NUX0NDX0dDQ19TSkxKX0VYQ0VQVElPTlM9bQorQ1RfQ0NfR0NDX0xEQkxfMTI4PW0KKworIworIyBDLWxpYnJhcnkKKyMKK0NUX0xJQkM9InVDbGliYyIKK0NUX0xJQkNfVkVSU0lPTj0iMC45LjMwLjIiCisjIENUX0xJQkNfZWdsaWJjIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19nbGliYyBpcyBub3Qgc2V0CitDVF9MSUJDX3VDbGliYz15CitDVF9MSUJDX2VnbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19nbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19taW5nd19BVkFJTEFCTEU9eQorQ1RfTElCQ19uZXdsaWJfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbm9uZV9BVkFJTEFCTEU9eQorQ1RfTElCQ191Q2xpYmNfQVZBSUxBQkxFPXkKKyMgQ1RfTElCQ19VQ0xJQkNfVl8wXzlfMzIgaXMgbm90IHNldAorIyBDVF9MSUJDX1VDTElCQ19WXzBfOV8zMSBpcyBub3Qgc2V0CisjIENUX0xJQkNfVUNMSUJDX1ZfMF85XzMwXzMgaXMgbm90IHNldAorQ1RfTElCQ19VQ0xJQkNfVl8wXzlfMzBfMj15CisjIENUX0xJQkNfVUNMSUJDX1ZfMF85XzMwXzEgaXMgbm90IHNldAorIyBDVF9MSUJDX1VDTElCQ19WXzBfOV8zMCBpcyBub3Qgc2V0CisjIENUX0xJQkNfVUNMSUJDX1Zfc25hcHNob3QgaXMgbm90IHNldAorIyBDVF9MSUJDX1VDTElCQ19WX3NwZWNpZmljX2RhdGUgaXMgbm90IHNldAorQ1RfTElCQ19VQ0xJQkNfMF85XzMwX29yX2xhdGVyPXkKK0NUX0xJQkNfVUNMSUJDX1BBUkFMTEVMPXkKK0NUX0xJQkNfVUNMSUJDX1ZFUkJPU0lUWV8wPXkKKyMgQ1RfTElCQ19VQ0xJQkNfVkVSQk9TSVRZXzEgaXMgbm90IHNldAorIyBDVF9MSUJDX1VDTElCQ19WRVJCT1NJVFlfMiBpcyBub3Qgc2V0CitDVF9MSUJDX1VDTElCQ19WRVJCT1NJVFk9IiIKK0NUX0xJQkNfVUNMSUJDX0RFQlVHX0xFVkVMXzA9eQorIyBDVF9MSUJDX1VDTElCQ19ERUJVR19MRVZFTF8xIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19VQ0xJQkNfREVCVUdfTEVWRUxfMiBpcyBub3Qgc2V0CitDVF9MSUJDX1VDTElCQ19ERUJVR19MRVZFTD0wCitDVF9MSUJDX1VDTElCQ19DT05GSUdfRklMRT0iJHtDVF9MSUJfRElSfS9zYW1wbGVzLyR7Q1RfVEFSR0VUfS8ke0NUX0xJQkN9LSR7Q1RfTElCQ19WRVJTSU9OfS5jb25maWciCitDVF9MSUJDX1NVUFBPUlRfVEhSRUFEU19BTlk9eQorQ1RfTElCQ19TVVBQT1JUX0xJTlVYVEhSRUFEUz15CitDVF9MSUJDX1NVUFBPUlRfVEhSRUFEU19OT05FPXkKK0NUX1RIUkVBRFM9ImxpbnV4dGhyZWFkcyIKKworIworIyBDb21tb24gQyBsaWJyYXJ5IG9wdGlvbnMKKyMKK0NUX1RIUkVBRFNfTElOVVhUSFJFQURTPXkKKyMgQ1RfVEhSRUFEU19OT05FIGlzIG5vdCBzZXQKK0NUX0xJQkNfWExERD15CisKKyMKKyMgdUNsaWJjIG90aGVyIG9wdGlvbnMKKyMKK0NUX0xJQkNfVUNMSUJDX0xOWFRIUkRfT0xEPXkKKyMgQ1RfTElCQ19VQ0xJQkNfTE5YVEhSRF9ORVcgaXMgbm90IHNldAorQ1RfTElCQ19VQ0xJQkNfTE5YVEhSRD0ib2xkIgorIyBDVF9MSUJDX1VDTElCQ19MT0NBTEVTIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19VQ0xJQkNfV0NIQVIgaXMgbm90IHNldAorCisjCisjIERlYnVnIGZhY2lsaXRpZXMKKyMKK0NUX0RFQlVHX2RtYWxsb2M9eQorQ1RfRE1BTExPQ19WXzVfNV8yPXkKK0NUX0RNQUxMT0NfVkVSU0lPTj0iNS41LjIiCitDVF9ERUJVR19kdW1hPXkKK0NUX0RVTUFfQT15CitDVF9EVU1BX1NPPXkKK0NUX0RVTUFfVl8yXzVfMTU9eQorQ1RfRFVNQV9WRVJTSU9OPSIyXzVfMTUiCitDVF9ERUJVR19nZGI9eQorQ1RfR0RCX0NST1NTPXkKK0NUX0dEQl9DUk9TU19TVEFUSUM9eQorQ1RfR0RCX05BVElWRT15CisjIENUX0dEQl9OQVRJVkVfU1RBVElDIGlzIG5vdCBzZXQKK0NUX0dEQl9HREJTRVJWRVI9eQorQ1RfR0RCX0dEQlNFUlZFUl9TVEFUSUM9eQorCisjCisjIGdkYiB2ZXJzaW9uCisjCisjIENUX0RFQlVHX0dEQl9TSE9XX0xJTkFSTyBpcyBub3Qgc2V0CisjIENUX0dEQl9WXzdfM2EgaXMgbm90IHNldAorIyBDVF9HREJfVl83XzJhIGlzIG5vdCBzZXQKK0NUX0dEQl9WXzdfMWE9eQorIyBDVF9HREJfVl83XzBfMWEgaXMgbm90IHNldAorIyBDVF9HREJfVl83XzBhIGlzIG5vdCBzZXQKKyMgQ1RfR0RCX1ZfNl84YSBpcyBub3Qgc2V0CitDVF9HREJfN18wX29yX2xhdGVyPXkKK0NUX0dEQl9IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfR0RCX0lOU1RBTExfR0RCSU5JVD15CitDVF9HREJfVkVSU0lPTj0iNy4xYSIKK0NUX0RFQlVHX2x0cmFjZT15CitDVF9MVFJBQ0VfVl8wXzVfMz15CisjIENUX0xUUkFDRV9WXzBfNV8yIGlzIG5vdCBzZXQKK0NUX0xUUkFDRV9WRVJTSU9OPSIwLjUuMyIKK0NUX0xUUkFDRV8wXzVfM19vcl9sYXRlcj15CitDVF9ERUJVR19zdHJhY2U9eQorIyBDVF9TVFJBQ0VfVl80XzVfMjAgaXMgbm90IHNldAorQ1RfU1RSQUNFX1ZfNF81XzE5PXkKKyMgQ1RfU1RSQUNFX1ZfNF81XzE4IGlzIG5vdCBzZXQKK0NUX1NUUkFDRV9WRVJTSU9OPSI0LjUuMTkiCisKKyMKKyMgQ29tcGFuaW9uIGxpYnJhcmllcworIworQ1RfQ09NUExJQlNfTkVFREVEPXkKK0NUX0dNUF9ORUVERUQ9eQorQ1RfTVBGUl9ORUVERUQ9eQorQ1RfUFBMX05FRURFRD15CitDVF9DTE9PR19ORUVERUQ9eQorQ1RfQ09NUExJQlM9eQorQ1RfR01QPXkKK0NUX01QRlI9eQorQ1RfUFBMPXkKK0NUX0NMT09HPXkKK0NUX0xJQkVMRl9UQVJHRVQ9eQorIyBDVF9HTVBfVl81XzBfMiBpcyBub3Qgc2V0CisjIENUX0dNUF9WXzVfMF8xIGlzIG5vdCBzZXQKK0NUX0dNUF9WXzRfM18yPXkKKyMgQ1RfR01QX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9HTVBfVl80XzNfMCBpcyBub3Qgc2V0CitDVF9HTVBfVkVSU0lPTj0iNC4zLjIiCisjIENUX01QRlJfVl8zXzBfMSBpcyBub3Qgc2V0CisjIENUX01QRlJfVl8zXzBfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZfMl80XzI9eQorIyBDVF9NUEZSX1ZfMl80XzEgaXMgbm90IHNldAorIyBDVF9NUEZSX1ZfMl80XzAgaXMgbm90IHNldAorQ1RfTVBGUl9WRVJTSU9OPSIyLjQuMiIKKyMgQ1RfUFBMX1ZfMF8xMV8yIGlzIG5vdCBzZXQKKyMgQ1RfUFBMX1ZfMF8xMV8xIGlzIG5vdCBzZXQKKyMgQ1RfUFBMX1ZfMF8xMSBpcyBub3Qgc2V0CitDVF9QUExfVl8wXzEwXzI9eQorQ1RfUFBMX1ZFUlNJT049IjAuMTAuMiIKKyMgQ1RfQ0xPT0dfVl8wXzE1XzExIGlzIG5vdCBzZXQKKyMgQ1RfQ0xPT0dfVl8wXzE1XzEwIGlzIG5vdCBzZXQKK0NUX0NMT09HX1ZfMF8xNV85PXkKKyMgQ1RfQ0xPT0dfVl8wXzE1XzggaXMgbm90IHNldAorIyBDVF9DTE9PR19WXzBfMTVfNyBpcyBub3Qgc2V0CisjIENUX0NMT09HX1ZfMF8xNV82IGlzIG5vdCBzZXQKK0NUX0NMT09HX1ZFUlNJT049IjAuMTUuOSIKKworIworIyBsaWJlbGYgdmVyc2lvbiBuZWVkZWQgdG8gYnVpbGQgZm9yIHRhcmdldAorIworQ1RfTElCRUxGX1ZfMF84XzEzPXkKKyMgQ1RfTElCRUxGX1ZfMF84XzEyIGlzIG5vdCBzZXQKK0NUX0xJQkVMRl9WRVJTSU9OPSIwLjguMTMiCisKKyMKKyMgQ29tcGFuaW9uIGxpYnJhcmllcyBjb21tb24gb3B0aW9ucworIworIyBDVF9DT01QTElCU19DSEVDSyBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcGFuaW9uIHRvb2xzCisjCisKKyMKKyMgUkVBRCBIRUxQIGJlZm9yZSB5b3Ugc2F5ICdZJyBiZWxvdyAhISEKKyMKKyMgQ1RfQ09NUF9UT09MUyBpcyBub3Qgc2V0CisKKyMKKyMgVGVzdCBzdWl0ZQorIworIyBDVF9URVNUX1NVSVRFX0dDQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYXJtLXVua25vd24tbGludXgtdWNsaWJjZ251ZWFiaS9yZXBvcnRlZC5ieSBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0tdW5rbm93bi1saW51eC11Y2xpYmNnbnVlYWJpL3JlcG9ydGVkLmJ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYThmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYXJtLXVua25vd24tbGludXgtdWNsaWJjZ251ZWFiaS9yZXBvcnRlZC5ieQpAQCAtMCwwICsxLDMgQEAKK3JlcG9ydGVyX25hbWU9IllFTSIKK3JlcG9ydGVyX3VybD0iaHR0cDovL3ltb3Jpbi5pcy1hLWdlZWsub3JnLyIKK3JlcG9ydGVyX2NvbW1lbnQ9IiIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm0tdW5rbm93bi1saW51eC11Y2xpYmNnbnVlYWJpL3VDbGliYy0wLjkuMzAuMi5jb25maWcgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYXJtLXVua25vd24tbGludXgtdWNsaWJjZ251ZWFiaS91Q2xpYmMtMC45LjMwLjIuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMjY5ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYXJtLXVua25vd24tbGludXgtdWNsaWJjZ251ZWFiaS91Q2xpYmMtMC45LjMwLjIuY29uZmlnCkBAIC0wLDAgKzEsMjUzIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIFZlcnNpb246IDAuOS4zMAorIyBNb24gTm92IDE3IDEwOjMyOjUzIDIwMDgKKyMKKyMgVEFSR0VUX2FscGhhIGlzIG5vdCBzZXQKK1RBUkdFVF9hcm09eQorIyBUQVJHRVRfYXZyMzIgaXMgbm90IHNldAorIyBUQVJHRVRfYmZpbiBpcyBub3Qgc2V0CisjIFRBUkdFVF9jcmlzIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2UxIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2ZydiBpcyBub3Qgc2V0CisjIFRBUkdFVF9oODMwMCBpcyBub3Qgc2V0CisjIFRBUkdFVF9ocHBhIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2kzODYgaXMgbm90IHNldAorIyBUQVJHRVRfaTk2MCBpcyBub3Qgc2V0CisjIFRBUkdFVF9pYTY0IGlzIG5vdCBzZXQKKyMgVEFSR0VUX202OGsgaXMgbm90IHNldAorIyBUQVJHRVRfbWljcm9ibGF6ZSBpcyBub3Qgc2V0CisjIFRBUkdFVF9taXBzIGlzIG5vdCBzZXQKKyMgVEFSR0VUX25pb3MgaXMgbm90IHNldAorIyBUQVJHRVRfbmlvczIgaXMgbm90IHNldAorIyBUQVJHRVRfcG93ZXJwYyBpcyBub3Qgc2V0CisjIFRBUkdFVF9zaCBpcyBub3Qgc2V0CisjIFRBUkdFVF9zaDY0IGlzIG5vdCBzZXQKKyMgVEFSR0VUX3NwYXJjIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3Y4NTAgaXMgbm90IHNldAorIyBUQVJHRVRfdmF4IGlzIG5vdCBzZXQKKyMgVEFSR0VUX3g4Nl82NCBpcyBub3Qgc2V0CisjIFRBUkdFVF94dGVuc2EgaXMgbm90IHNldAorCisjCisjIFRhcmdldCBBcmNoaXRlY3R1cmUgRmVhdHVyZXMgYW5kIE9wdGlvbnMKKyMKK1RBUkdFVF9BUkNIPSJhcm0iCitGT1JDRV9PUFRJT05TX0ZPUl9BUkNIPXkKK0NPTkZJR19BUk1fT0FCST15CisjIENPTkZJR19BUk1fRUFCSSBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19BUk09eQorIyBDT05GSUdfQVJNNjEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk03VERNSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUk03MjBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTkyMFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJNOTIyVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk05MjZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTEwVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk0xMTM2SkZfUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk0xMTc2SlpfUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk0xMTc2SlpGX1MgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0NPUlRFWF9NMyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fQ09SVEVYX00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9TQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9YU0NBTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0lXTU1YVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX08zMl9BQkkgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19OMzJfQUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTjY0X0FCSSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0lTQV8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfSVNBXzIgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19JU0FfMyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0lTQV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfSVNBX01JUFMzMiBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0lTQV9NSVBTMzJSMiBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0lTQV9NSVBTNjQgaXMgbm90IHNldAorVEFSR0VUX1NVQkFSQ0g9IiIKKworIworIyBVc2luZyBFTEYgZmlsZSBmb3JtYXQKKyMKK0FSQ0hfQU5ZX0VORElBTj15CitBUkNIX0JJR19FTkRJQU49eQorQVJDSF9XQU5UU19CSUdfRU5ESUFOPXkKKyMgQVJDSF9XQU5UU19MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKK0FSQ0hfSEFTX01NVT15CitBUkNIX1VTRV9NTVU9eQorVUNMSUJDX0hBU19GTE9BVFM9eQorIyBVQ0xJQkNfSEFTX0ZQVSBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NPRlRfRkxPQVQ9eQorRE9fQzk5X01BVEg9eQorVUNMSUJDX0hBU19GRU5WPXkKK0tFUk5FTF9IRUFERVJTPSIvdXNyL2luY2x1ZGUiCitIQVZFX0RPVF9DT05GSUc9eQorCisjCisjIEdlbmVyYWwgTGlicmFyeSBTZXR0aW5ncworIworIyBIQVZFX05PX1BJQyBpcyBub3Qgc2V0CitET1BJQz15CisjIEFSQ0hfSEFTX05PX1NIQVJFRCBpcyBub3Qgc2V0CisjIEFSQ0hfSEFTX05PX0xEU08gaXMgbm90IHNldAorSEFWRV9TSEFSRUQ9eQorIyBGT1JDRV9TSEFSRUFCTEVfVEVYVF9TRUdNRU5UUyBpcyBub3Qgc2V0CitMRFNPX0xERF9TVVBQT1JUPXkKK0xEU09fQ0FDSEVfU1VQUE9SVD15CisjIExEU09fUFJFTE9BRF9GSUxFX1NVUFBPUlQgaXMgbm90IHNldAorTERTT19CQVNFX0ZJTEVOQU1FPSJsZC5zbyIKK1VDTElCQ19TVEFUSUNfTERDT05GSUc9eQorIyBMRFNPX1JVTlBBVEggaXMgbm90IHNldAorVUNMSUJDX0NUT1JfRFRPUj15CisjIExEU09fR05VX0hBU0hfU1VQUE9SVCBpcyBub3Qgc2V0CisjIEhBU19OT19USFJFQURTIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfVEhSRUFEUz15CisjIFBUSFJFQURTX0RFQlVHX1NVUFBPUlQgaXMgbm90IHNldAorTElOVVhUSFJFQURTX09MRD15CitVQ0xJQkNfSEFTX1NZU0xPRz15CitVQ0xJQkNfSEFTX0xGUz15CisjIE1BTExPQyBpcyBub3Qgc2V0CisjIE1BTExPQ19TSU1QTEUgaXMgbm90IHNldAorTUFMTE9DX1NUQU5EQVJEPXkKKyMgTUFMTE9DX0dMSUJDX0NPTVBBVCBpcyBub3Qgc2V0CitVQ0xJQkNfRFlOQU1JQ19BVEVYSVQ9eQorIyBDT01QQVRfQVRFWElUIGlzIG5vdCBzZXQKKyMgVUNMSUJDX1NVU1YzX0xFR0FDWSBpcyBub3Qgc2V0CisjIFVDTElCQ19TVVNWM19MRUdBQ1lfTUFDUk9TIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVFVCUyBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NIQURPVz15CisjIFVDTElCQ19IQVNfUFJPR1JBTV9JTlZPQ0FUSU9OX05BTUUgaXMgbm90IHNldAorVUNMSUJDX0hBU19QVFk9eQorQVNTVU1FX0RFVlBUUz15CitVTklYOThQVFlfT05MWT15CisjIFVDTElCQ19IQVNfR0VUUFQgaXMgbm90IHNldAorVUNMSUJDX0hBU19UTV9FWFRFTlNJT05TPXkKK1VDTElCQ19IQVNfVFpfQ0FDSElORz15CitVQ0xJQkNfSEFTX1RaX0ZJTEU9eQorVUNMSUJDX0hBU19UWl9GSUxFX1JFQURfTUFOWT15CitVQ0xJQkNfVFpfRklMRV9QQVRIPSIvZXRjL1RaIgorCisjCisjIEFkdmFuY2VkIExpYnJhcnkgU2V0dGluZ3MKKyMKK1VDTElCQ19QV0RfQlVGRkVSX1NJWkU9MjU2CitVQ0xJQkNfR1JQX0JVRkZFUl9TSVpFPTI1NgorCisjCisjIFN1cHBvcnQgdmFyaW91cyBmYW1pbGllcyBvZiBmdW5jdGlvbnMKKyMKK1VDTElCQ19MSU5VWF9NT0RVTEVfMjQ9eQorVUNMSUJDX0xJTlVYX1NQRUNJRklDPXkKK1VDTElCQ19IQVNfR05VX0VSUk9SPXkKKyMgVUNMSUJDX0JTRF9TUEVDSUZJQyBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX0JTRF9FUlI9eQorIyBVQ0xJQkNfSEFTX09CU09MRVRFX0JTRF9TSUdOQUwgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX09CU09MRVRFX1NZU1ZfU0lHTkFMIGlzIG5vdCBzZXQKKyMgVUNMSUJDX05UUF9MRUdBQ1kgaXMgbm90IHNldAorIyBVQ0xJQkNfU1Y0X0RFUFJFQ0FURUQgaXMgbm90IHNldAorVUNMSUJDX0hBU19SRUFMVElNRT15CitVQ0xJQkNfSEFTX0FEVkFOQ0VEX1JFQUxUSU1FPXkKK1VDTElCQ19IQVNfRVBPTEw9eQorVUNMSUJDX0hBU19YQVRUUj15CitVQ0xJQkNfSEFTX1BST0ZJTElORz15CitVQ0xJQkNfSEFTX0NSWVBUX0lNUEw9eQorVUNMSUJDX0hBU19DUllQVD15CitVQ0xJQkNfSEFTX05FVFdPUktfU1VQUE9SVD15CitVQ0xJQkNfSEFTX1NPQ0tFVD15CitVQ0xJQkNfSEFTX0lQVjQ9eQorIyBVQ0xJQkNfSEFTX0lQVjYgaXMgbm90IHNldAorVUNMSUJDX0hBU19SUEM9eQorVUNMSUJDX0hBU19GVUxMX1JQQz15CitVQ0xJQkNfSEFTX1JFRU5UUkFOVF9SUEM9eQorVUNMSUJDX1VTRV9ORVRMSU5LPXkKK1VDTElCQ19TVVBQT1JUX0FJX0FERFJDT05GSUc9eQorIyBVQ0xJQkNfSEFTX0JTRF9SRVNfQ0xPU0UgaXMgbm90IHNldAorCisjCisjIFN0cmluZyBhbmQgU3RkaW8gU3VwcG9ydAorIworVUNMSUJDX0hBU19TVFJJTkdfR0VORVJJQ19PUFQ9eQorVUNMSUJDX0hBU19TVFJJTkdfQVJDSF9PUFQ9eQorVUNMSUJDX0hBU19DVFlQRV9UQUJMRVM9eQorVUNMSUJDX0hBU19DVFlQRV9TSUdORUQ9eQorIyBVQ0xJQkNfSEFTX0NUWVBFX1VOU0FGRSBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfQ1RZUEVfQ0hFQ0tFRCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX0NUWVBFX0VORk9SQ0VEPXkKKyMgVUNMSUJDX0hBU19XQ0hBUiBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfTE9DQUxFIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19IRVhBREVDSU1BTF9GTE9BVFMgaXMgbm90IHNldAorVUNMSUJDX0hBU19HTElCQ19DVVNUT01fUFJJTlRGPXkKKyMgVVNFX09MRF9WRlBSSU5URiBpcyBub3Qgc2V0CitVQ0xJQkNfUFJJTlRGX1NDQU5GX1BPU0lUSU9OQUxfQVJHUz05CisjIFVDTElCQ19IQVNfU0NBTkZfR0xJQkNfQV9GTEFHIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfTk9ORSBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzI1NiBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzUxMiBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzEwMjQgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl8yMDQ4IGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfU1RESU9fQlVGU0laXzQwOTY9eQorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl84MTkyIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfU1RESU9fQlVJTFRJTl9CVUZGRVJfTk9ORT15CisjIFVDTElCQ19IQVNfU1RESU9fQlVJTFRJTl9CVUZGRVJfNCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVJTFRJTl9CVUZGRVJfOCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fU0hVVERPV05fT05fQUJPUlQgaXMgbm90IHNldAorVUNMSUJDX0hBU19TVERJT19HRVRDX01BQ1JPPXkKK1VDTElCQ19IQVNfU1RESU9fUFVUQ19NQUNSTz15CitVQ0xJQkNfSEFTX1NURElPX0FVVE9fUldfVFJBTlNJVElPTj15CisjIFVDTElCQ19IQVNfRk9QRU5fTEFSR0VGSUxFX01PREUgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0ZPUEVOX0VYQ0xVU0lWRV9NT0RFIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19HTElCQ19DVVNUT01fU1RSRUFNUyBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1BSSU5URl9NX1NQRUM9eQorVUNMSUJDX0hBU19FUlJOT19NRVNTQUdFUz15CisjIFVDTElCQ19IQVNfU1lTX0VSUkxJU1QgaXMgbm90IHNldAorVUNMSUJDX0hBU19TSUdOVU1fTUVTU0FHRVM9eQorIyBVQ0xJQkNfSEFTX1NZU19TSUdMSVNUIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfR05VX0dFVE9QVD15CitVQ0xJQkNfSEFTX0dOVV9HRVRTVUJPUFQ9eQorCisjCisjIEJpZyBhbmQgVGFsbAorIworVUNMSUJDX0hBU19SRUdFWD15CitVQ0xJQkNfSEFTX1JFR0VYX09MRD15CitVQ0xJQkNfSEFTX0ZOTUFUQ0g9eQorVUNMSUJDX0hBU19GTk1BVENIX09MRD15CisjIFVDTElCQ19IQVNfV09SREVYUCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfRlRXIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfR0xPQj15CitVQ0xJQkNfSEFTX0dOVV9HTE9CPXkKKworIworIyBMaWJyYXJ5IEluc3RhbGxhdGlvbiBPcHRpb25zCisjCitTSEFSRURfTElCX0xPQURFUl9QUkVGSVg9IiQoUlVOVElNRV9QUkVGSVgpbGliIgorUlVOVElNRV9QUkVGSVg9Ii91c3IvJChUQVJHRVRfQVJDSCktbGludXgtdWNsaWJjLyIKK0RFVkVMX1BSRUZJWD0iL3Vzci8kKFRBUkdFVF9BUkNIKS1saW51eC11Y2xpYmMvdXNyLyIKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIFVDTElCQ19CVUlMRF9QSUUgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0FSQzRSQU5ET00gaXMgbm90IHNldAorIyBIQVZFX05PX1NTUCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1NQIGlzIG5vdCBzZXQKK1VDTElCQ19CVUlMRF9SRUxSTz15CisjIFVDTElCQ19CVUlMRF9OT1cgaXMgbm90IHNldAorVUNMSUJDX0JVSUxEX05PRVhFQ1NUQUNLPXkKKworIworIyB1Q2xpYmMgZGV2ZWxvcG1lbnQvZGVidWdnaW5nIG9wdGlvbnMKKyMKK0NST1NTX0NPTVBJTEVSX1BSRUZJWD0iIgorVUNMSUJDX0VYVFJBX0NGTEFHUz0iIgorIyBET0RFQlVHIGlzIG5vdCBzZXQKKyMgRE9ERUJVR19QVCBpcyBub3Qgc2V0CisjIERPU1RSSVAgaXMgbm90IHNldAorIyBET0FTU0VSVFMgaXMgbm90IHNldAorIyBTVVBQT1JUX0xEX0RFQlVHIGlzIG5vdCBzZXQKKyMgU1VQUE9SVF9MRF9ERUJVR19FQVJMWSBpcyBub3Qgc2V0CisjIFVDTElCQ19NQUxMT0NfREVCVUdHSU5HIGlzIG5vdCBzZXQKK1dBUk5JTkdTPSItV2FsbCIKKyMgRVhUUkFfV0FSTklOR1MgaXMgbm90IHNldAorIyBET01VTFRJIGlzIG5vdCBzZXQKKyMgVUNMSUJDX01KTjNfT05MWSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYXJtZWItdW5rbm93bi1lYWJpL2Nyb3NzdG9vbC5jb25maWcgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYXJtZWItdW5rbm93bi1lYWJpL2Nyb3NzdG9vbC5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNiMjVlZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm1lYi11bmtub3duLWVhYmkvY3Jvc3N0b29sLmNvbmZpZwpAQCAtMCwwICsxLDM0NSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBjcm9zc3Rvb2wtTkcgaGdfZGVmYXVsdEAyNzIxXzdiNjQ3NDZiMGFiMyBDb25maWd1cmF0aW9uCisjIFN1biBPY3QgMTYgMTc6MjM6NDcgMjAxMQorIworQ1RfQ09ORklHVVJFX2hhc194enV0aWxzPXkKK0NUX0NPTkZJR1VSRV9oYXNfY3ZzPXkKK0NUX0NPTkZJR1VSRV9oYXNfc3ZuPXkKK0NUX01PRFVMRVM9eQorCisjCisjIFBhdGhzIGFuZCBtaXNjIG9wdGlvbnMKKyMKKworIworIyBjcm9zc3Rvb2wtTkcgYmVoYXZpb3IKKyMKKyMgQ1RfT0JTT0xFVEUgaXMgbm90IHNldAorIyBDVF9FWFBFUklNRU5UQUwgaXMgbm90IHNldAorIyBDVF9ERUJVR19DVCBpcyBub3Qgc2V0CisKKyMKKyMgUGF0aHMKKyMKK0NUX0xPQ0FMX1RBUkJBTExTX0RJUj0iJHtIT01FfS9zcmMiCitDVF9TQVZFX1RBUkJBTExTPXkKK0NUX1dPUktfRElSPSIke0NUX1RPUF9ESVJ9Ly5idWlsZCIKK0NUX1BSRUZJWF9ESVI9IiR7SE9NRX0veC10b29scy8ke0NUX1RBUkdFVH0iCitDVF9JTlNUQUxMX0RJUj0iJHtDVF9QUkVGSVhfRElSfSIKK0NUX1JNX1JGX1BSRUZJWF9ESVI9eQorQ1RfUkVNT1ZFX0RPQ1M9eQorQ1RfSU5TVEFMTF9ESVJfUk89eQorQ1RfU1RSSVBfQUxMX1RPT0xDSEFJTl9FWEVDVVRBQkxFUz15CisKKyMKKyMgRG93bmxvYWRpbmcKKyMKKyMgQ1RfRk9SQklEX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfRk9SQ0VfRE9XTkxPQUQgaXMgbm90IHNldAorQ1RfQ09OTkVDVF9USU1FT1VUPTEwCisjIENUX09OTFlfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9VU0VfTUlSUk9SIGlzIG5vdCBzZXQKKworIworIyBFeHRyYWN0aW5nCisjCisjIENUX0ZPUkNFX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfT1ZFUklERV9DT05GSUdfR1VFU1NfU1VCPXkKKyMgQ1RfT05MWV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX1BBVENIX0JVTkRMRUQ9eQorIyBDVF9QQVRDSF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9GQUxMQkFDS19MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0ZBTExCQUNLX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9OT05FIGlzIG5vdCBzZXQKK0NUX1BBVENIX09SREVSPSJidW5kbGVkIgorCisjCisjIEJ1aWxkIGJlaGF2aW9yCisjCitDVF9QQVJBTExFTF9KT0JTPTAKK0NUX0xPQUQ9MAorQ1RfVVNFX1BJUEVTPXkKK0NUX0VYVFJBX0ZMQUdTX0ZPUl9IT1NUPSIiCisjIENUX0NPTkZJR19TSEVMTF9TSCBpcyBub3Qgc2V0CisjIENUX0NPTkZJR19TSEVMTF9BU0ggaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMX0JBU0g9eQorIyBDVF9DT05GSUdfU0hFTExfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTD0iJHtiYXNofSIKKworIworIyBMb2dnaW5nCisjCisjIENUX0xPR19FUlJPUiBpcyBub3Qgc2V0CisjIENUX0xPR19XQVJOIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0lORk8gaXMgbm90IHNldAorQ1RfTE9HX0VYVFJBPXkKKyMgQ1RfTE9HX0FMTCBpcyBub3Qgc2V0CisjIENUX0xPR19ERUJVRyBpcyBub3Qgc2V0CitDVF9MT0dfTEVWRUxfTUFYPSJFWFRSQSIKKyMgQ1RfTE9HX1NFRV9UT09MU19XQVJOIGlzIG5vdCBzZXQKK0NUX0xPR19QUk9HUkVTU19CQVI9eQorQ1RfTE9HX1RPX0ZJTEU9eQorQ1RfTE9HX0ZJTEVfQ09NUFJFU1M9eQorCisjCisjIFRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIPSJhcm0iCitDVF9BUkNIX1NVUFBPUlRTX0JPVEhfTU1VPXkKK0NUX0FSQ0hfU1VQUE9SVFNfQk9USF9FTkRJQU49eQorQ1RfQVJDSF9TVVBQT1JUU18zMj15CitDVF9BUkNIX1NVUFBPUlRfQVJDSD15CitDVF9BUkNIX1NVUFBPUlRfQ1BVPXkKK0NUX0FSQ0hfU1VQUE9SVF9UVU5FPXkKK0NUX0FSQ0hfU1VQUE9SVF9GUFU9eQorQ1RfQVJDSF9ERUZBVUxUX0hBU19NTVU9eQorQ1RfQVJDSF9ERUZBVUxUX0xFPXkKK0NUX0FSQ0hfREVGQVVMVF8zMj15CitDVF9BUkNIX0FSQ0g9IiIKK0NUX0FSQ0hfQ1BVPSIiCitDVF9BUkNIX1RVTkU9IiIKK0NUX0FSQ0hfRlBVPSIiCitDVF9BUkNIX0JFPXkKKyMgQ1RfQVJDSF9MRSBpcyBub3Qgc2V0CitDVF9BUkNIXzMyPXkKK0NUX0FSQ0hfQklUTkVTUz0zMgorQ1RfQVJDSF9GTE9BVF9IVz15CisjIENUX0FSQ0hfRkxPQVRfU1cgaXMgbm90IHNldAorQ1RfVEFSR0VUX0NGTEFHUz0iIgorQ1RfVEFSR0VUX0xERkxBR1M9IiIKKyMgQ1RfQVJDSF9hbHBoYSBpcyBub3Qgc2V0CitDVF9BUkNIX2FybT15CisjIENUX0FSQ0hfYXZyMzIgaXMgbm90IHNldAorIyBDVF9BUkNIX2JsYWNrZmluIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9taXBzIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9wb3dlcnBjIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zaCBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc3BhcmMgaXMgbm90IHNldAorIyBDVF9BUkNIX3g4NiBpcyBub3Qgc2V0CitDVF9BUkNIX2FscGhhX0FWQUlMQUJMRT15CitDVF9BUkNIX2FybV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hdnIzMl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9ibGFja2Zpbl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9tNjhrX0FWQUlMQUJMRT15CitDVF9BUkNIX21pcHNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfcG93ZXJwY19BVkFJTEFCTEU9eQorQ1RfQVJDSF9zMzkwX0FWQUlMQUJMRT15CitDVF9BUkNIX3NoX0FWQUlMQUJMRT15CitDVF9BUkNIX3NwYXJjX0FWQUlMQUJMRT15CitDVF9BUkNIX3g4Nl9BVkFJTEFCTEU9eQorCisjCisjIEdlbmVyaWMgdGFyZ2V0IG9wdGlvbnMKKyMKK0NUX0FSQ0hfVVNFX01NVT15CisKKyMKKyMgVGFyZ2V0IG9wdGltaXNhdGlvbnMKKyMKKworIworIyBhcm0gb3RoZXIgb3B0aW9ucworIworQ1RfQVJDSF9BUk1fTU9ERT0iYXJtIgorQ1RfQVJDSF9BUk1fTU9ERV9BUk09eQorQ1RfQVJDSF9BUk1fRUFCST15CisKKyMKKyMgVG9vbGNoYWluIG9wdGlvbnMKKyMKKworIworIyBHZW5lcmFsIHRvb2xjaGFpbiBvcHRpb25zCisjCitDVF9GT1JDRV9TWVNST09UPXkKK0NUX1VTRV9TWVNST09UPXkKK0NUX1NZU1JPT1RfTkFNRT0ic3lzcm9vdCIKK0NUX1NZU1JPT1RfRElSX1BSRUZJWD0iIgorQ1RfVE9PTENIQUlOX1BLR1ZFUlNJT049IiIKK0NUX1RPT0xDSEFJTl9CVUdVUkw9IiIKKworIworIyBUdXBsZSBjb21wbGV0aW9uIGFuZCBhbGlhc2luZworIworQ1RfVEFSR0VUX1ZFTkRPUj0idW5rbm93biIKK0NUX1RBUkdFVF9BTElBU19TRURfRVhQUj0iIgorQ1RfVEFSR0VUX0FMSUFTPSIiCisKKyMKKyMgVG9vbGNoYWluIHR5cGUKKyMKK0NUX0NST1NTPXkKK0NUX1RPT0xDSEFJTl9UWVBFPSJjcm9zcyIKKworIworIyBCdWlsZCBzeXN0ZW0KKyMKK0NUX0JVSUxEPSIiCitDVF9CVUlMRF9QUkVGSVg9IiIKK0NUX0JVSUxEX1NVRkZJWD0iIgorCisjCisjIE9wZXJhdGluZyBTeXN0ZW0KKyMKK0NUX0JBUkVfTUVUQUw9eQorQ1RfS0VSTkVMPSJiYXJlLW1ldGFsIgorQ1RfS0VSTkVMX2JhcmVfbWV0YWw9eQorIyBDVF9LRVJORUxfbGludXggaXMgbm90IHNldAorQ1RfS0VSTkVMX2JhcmVfbWV0YWxfQVZBSUxBQkxFPXkKK0NUX0tFUk5FTF9saW51eF9BVkFJTEFCTEU9eQorQ1RfS0VSTkVMX21pbmd3MzJfQVZBSUxBQkxFPXkKKworIworIyBDb21tb24ga2VybmVsIG9wdGlvbnMKKyMKKworIworIyBCaW5hcnkgdXRpbGl0aWVzCisjCitDVF9BUkNIX0JJTkZNVF9FTEY9eQorCisjCisjIEdOVSBiaW51dGlscworIworIyBDVF9CSU5VVElMU19WXzJfMjFfMWEgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19WXzJfMjBfMWEgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVl8yXzE5XzFhPXkKKyMgQ1RfQklOVVRJTFNfVl8yXzE4YSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WRVJTSU9OPSIyLjE5LjFhIgorQ1RfQklOVVRJTFNfMl8xOV9vcl9sYXRlcj15CitDVF9CSU5VVElMU18yXzE4X29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTX0dPTERfU1VQUE9SVFNfQVJDSD15CitDVF9CSU5VVElMU19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQklOVVRJTFNfTElOS0VSX0xEPXkKK0NUX0JJTlVUSUxTX0xJTktFUlNfTElTVD0ibGQiCitDVF9CSU5VVElMU19MSU5LRVJfREVGQVVMVD0iYmZkIgorQ1RfQklOVVRJTFNfRVhUUkFfQ09ORklHX0FSUkFZPSIiCisKKyMKKyMgQyBjb21waWxlcgorIworQ1RfQ0M9ImdjYyIKK0NUX0NDX1ZFUlNJT049IjQuMy4yIgorQ1RfQ0NfZ2NjPXkKKyMgQ1RfQ0NfVl80XzRfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzYgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM181IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzMgaXMgbm90IHNldAorQ1RfQ0NfVl80XzNfMj15CisjIENUX0NDX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfMl80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfMiBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfNF8yX29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzM9eQorQ1RfQ0NfR0NDXzRfM19vcl9sYXRlcj15CitDVF9DQ19HQ0NfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0NDX0dDQ19VU0VfR01QX01QRlI9eQorQ1RfQ0NfU1VQUE9SVF9DWFg9eQorQ1RfQ0NfU1VQUE9SVF9GT1JUUkFOPXkKK0NUX0NDX1NVUFBPUlRfSkFWQT15CitDVF9DQ19TVVBQT1JUX0FEQT15CitDVF9DQ19TVVBQT1JUX09CSkM9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDWFg9eQorCisjCisjIEFkZGl0aW9uYWwgc3VwcG9ydGVkIGxhbmd1YWdlczoKKyMKKyMgQ1RfQ0NfTEFOR19DWFggaXMgbm90IHNldAorCisjCisjIGdjYyBvdGhlciBvcHRpb25zCisjCitDVF9DQ19FTkFCTEVfQ1hYX0ZMQUdTPSIiCitDVF9DQ19DT1JFX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorCisjCisjIE9wdGltaXNhdGlvbiBmZWF0dXJlcworIworCisjCisjIFNldHRpbmdzIGZvciBsaWJyYXJpZXMgcnVubmluZyBvbiB0YXJnZXQKKyMKK0NUX0NDX0dDQ19FTkFCTEVfVEFSR0VUX09QVFNQQUNFPXkKKyMgQ1RfQ0NfR0NDX0xJQk1VREZMQVAgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCR09NUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJTU1AgaXMgbm90IHNldAorCisjCisjIE1pc2MuIG9ic2N1cmUgb3B0aW9ucy4KKyMKKyMgQ1RfQ0NfR0NDX0RJU0FCTEVfUENIIGlzIG5vdCBzZXQKK0NUX0NDX0dDQ19MREJMXzEyOD1tCisKKyMKKyMgQy1saWJyYXJ5CisjCitDVF9MSUJDPSJub25lIgorIyBDVF9MSUJDX25ld2xpYiBpcyBub3Qgc2V0CitDVF9MSUJDX25vbmU9eQorQ1RfTElCQ19lZ2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfZ2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbWluZ3dfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbmV3bGliX0FWQUlMQUJMRT15CitDVF9MSUJDX25vbmVfQVZBSUxBQkxFPXkKK0NUX0xJQkNfdUNsaWJjX0FWQUlMQUJMRT15CitDVF9USFJFQURTPSJub25lIgorCisjCisjIERlYnVnIGZhY2lsaXRpZXMKKyMKKyMgQ1RfREVCVUdfZG1hbGxvYyBpcyBub3Qgc2V0CisjIENUX0RFQlVHX2R1bWEgaXMgbm90IHNldAorQ1RfREVCVUdfZ2RiPXkKK0NUX0dEQl9DUk9TUz15CisjIENUX0dEQl9DUk9TU19TVEFUSUMgaXMgbm90IHNldAorQ1RfR0RCX0NST1NTX1BZVEhPTj15CisKKyMKKyMgSW4gYmFyZS1tZXRhbCwgeW91J2xsIG5lZWQgdG8gICAKKyMKKworIworIyBwcm92aWRlIHlvdXIgb3duIGdkYnNlcnZlciBzdHViLgorIworCisjCisjIGdkYiB2ZXJzaW9uCisjCitDVF9HREJfVl82XzhhPXkKK0NUX0dEQl9WRVJTSU9OPSI2LjhhIgorIyBDVF9ERUJVR19sdHJhY2UgaXMgbm90IHNldAorIyBDVF9ERUJVR19zdHJhY2UgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMKKyMKK0NUX0NPTVBMSUJTX05FRURFRD15CitDVF9HTVBfTkVFREVEPXkKK0NUX01QRlJfTkVFREVEPXkKK0NUX0NPTVBMSUJTPXkKK0NUX0dNUD15CitDVF9NUEZSPXkKK0NUX0dNUF9WXzRfM18yPXkKKyMgQ1RfR01QX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9HTVBfVl80XzNfMCBpcyBub3Qgc2V0CitDVF9HTVBfVkVSU0lPTj0iNC4zLjIiCisjIENUX01QRlJfVl8zXzBfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZfMl80XzI9eQorIyBDVF9NUEZSX1ZfMl80XzEgaXMgbm90IHNldAorIyBDVF9NUEZSX1ZfMl80XzAgaXMgbm90IHNldAorQ1RfTVBGUl9WRVJTSU9OPSIyLjQuMiIKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzIGNvbW1vbiBvcHRpb25zCisjCisjIENUX0NPTVBMSUJTX0NIRUNLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm1lYi11bmtub3duLWVhYmkvcmVwb3J0ZWQuYnkgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYXJtZWItdW5rbm93bi1lYWJpL3JlcG9ydGVkLmJ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYThmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYXJtZWItdW5rbm93bi1lYWJpL3JlcG9ydGVkLmJ5CkBAIC0wLDAgKzEsMyBAQAorcmVwb3J0ZXJfbmFtZT0iWUVNIgorcmVwb3J0ZXJfdXJsPSJodHRwOi8veW1vcmluLmlzLWEtZ2Vlay5vcmcvIgorcmVwb3J0ZXJfY29tbWVudD0iIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2FybWViLXVua25vd24tbGludXgtZ251ZWFiaS9jcm9zc3Rvb2wuY29uZmlnIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2FybWViLXVua25vd24tbGludXgtZ251ZWFiaS9jcm9zc3Rvb2wuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMTIyYzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYXJtZWItdW5rbm93bi1saW51eC1nbnVlYWJpL2Nyb3NzdG9vbC5jb25maWcKQEAgLTAsMCArMSw1MjkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgY3Jvc3N0b29sLU5HIGhnX2RlZmF1bHRAMjcyMV83YjY0NzQ2YjBhYjMgQ29uZmlndXJhdGlvbgorIyBTdW4gT2N0IDE2IDE3OjI0OjIzIDIwMTEKKyMKK0NUX0NPTkZJR1VSRV9oYXNfeHp1dGlscz15CitDVF9DT05GSUdVUkVfaGFzX2N2cz15CitDVF9DT05GSUdVUkVfaGFzX3N2bj15CitDVF9NT0RVTEVTPXkKKworIworIyBQYXRocyBhbmQgbWlzYyBvcHRpb25zCisjCisKKyMKKyMgY3Jvc3N0b29sLU5HIGJlaGF2aW9yCisjCisjIENUX09CU09MRVRFIGlzIG5vdCBzZXQKK0NUX0VYUEVSSU1FTlRBTD15CisjIENUX0RFQlVHX0NUIGlzIG5vdCBzZXQKKworIworIyBQYXRocworIworQ1RfTE9DQUxfVEFSQkFMTFNfRElSPSIke0hPTUV9L3NyYyIKK0NUX1NBVkVfVEFSQkFMTFM9eQorQ1RfV09SS19ESVI9IiR7Q1RfVE9QX0RJUn0vLmJ1aWxkIgorQ1RfUFJFRklYX0RJUj0iJHtIT01FfS94LXRvb2xzLyR7Q1RfVEFSR0VUfSIKK0NUX0lOU1RBTExfRElSPSIke0NUX1BSRUZJWF9ESVJ9IgorQ1RfUk1fUkZfUFJFRklYX0RJUj15CitDVF9SRU1PVkVfRE9DUz15CitDVF9JTlNUQUxMX0RJUl9STz15CitDVF9TVFJJUF9BTExfVE9PTENIQUlOX0VYRUNVVEFCTEVTPXkKKworIworIyBEb3dubG9hZGluZworIworIyBDVF9GT1JCSURfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9GT1JDRV9ET1dOTE9BRCBpcyBub3Qgc2V0CitDVF9DT05ORUNUX1RJTUVPVVQ9MTAKKyMgQ1RfT05MWV9ET1dOTE9BRCBpcyBub3Qgc2V0CisjIENUX1VTRV9NSVJST1IgaXMgbm90IHNldAorCisjCisjIEV4dHJhY3RpbmcKKyMKKyMgQ1RfRk9SQ0VfRVhUUkFDVCBpcyBub3Qgc2V0CitDVF9PVkVSSURFX0NPTkZJR19HVUVTU19TVUI9eQorIyBDVF9PTkxZX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfUEFUQ0hfQlVORExFRD15CisjIENUX1BBVENIX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9CVU5ETEVEX0ZBTExCQUNLX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTE9DQUxfRkFMTEJBQ0tfQlVORExFRCBpcyBub3Qgc2V0CisjIENUX1BBVENIX05PTkUgaXMgbm90IHNldAorQ1RfUEFUQ0hfT1JERVI9ImJ1bmRsZWQiCisKKyMKKyMgQnVpbGQgYmVoYXZpb3IKKyMKK0NUX1BBUkFMTEVMX0pPQlM9MAorQ1RfTE9BRD0wCitDVF9VU0VfUElQRVM9eQorQ1RfRVhUUkFfRkxBR1NfRk9SX0hPU1Q9IiIKKyMgQ1RfQ09ORklHX1NIRUxMX1NIIGlzIG5vdCBzZXQKKyMgQ1RfQ09ORklHX1NIRUxMX0FTSCBpcyBub3Qgc2V0CitDVF9DT05GSUdfU0hFTExfQkFTSD15CisjIENUX0NPTkZJR19TSEVMTF9DVVNUT00gaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMPSIke2Jhc2h9IgorCisjCisjIExvZ2dpbmcKKyMKKyMgQ1RfTE9HX0VSUk9SIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX1dBUk4gaXMgbm90IHNldAorIyBDVF9MT0dfSU5GTyBpcyBub3Qgc2V0CitDVF9MT0dfRVhUUkE9eQorIyBDVF9MT0dfQUxMIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0RFQlVHIGlzIG5vdCBzZXQKK0NUX0xPR19MRVZFTF9NQVg9IkVYVFJBIgorIyBDVF9MT0dfU0VFX1RPT0xTX1dBUk4gaXMgbm90IHNldAorQ1RfTE9HX1BST0dSRVNTX0JBUj15CitDVF9MT0dfVE9fRklMRT15CitDVF9MT0dfRklMRV9DT01QUkVTUz15CisKKyMKKyMgVGFyZ2V0IG9wdGlvbnMKKyMKK0NUX0FSQ0g9ImFybSIKK0NUX0FSQ0hfU1VQUE9SVFNfQk9USF9NTVU9eQorQ1RfQVJDSF9TVVBQT1JUU19CT1RIX0VORElBTj15CitDVF9BUkNIX1NVUFBPUlRTXzMyPXkKK0NUX0FSQ0hfU1VQUE9SVF9BUkNIPXkKK0NUX0FSQ0hfU1VQUE9SVF9DUFU9eQorQ1RfQVJDSF9TVVBQT1JUX1RVTkU9eQorQ1RfQVJDSF9TVVBQT1JUX0ZQVT15CitDVF9BUkNIX0RFRkFVTFRfSEFTX01NVT15CitDVF9BUkNIX0RFRkFVTFRfTEU9eQorQ1RfQVJDSF9ERUZBVUxUXzMyPXkKK0NUX0FSQ0hfQVJDSD0iYXJtdjV0ZSIKK0NUX0FSQ0hfQ1BVPSJ4c2NhbGUiCitDVF9BUkNIX1RVTkU9InhzY2FsZSIKK0NUX0FSQ0hfRlBVPSIiCitDVF9BUkNIX0JFPXkKKyMgQ1RfQVJDSF9MRSBpcyBub3Qgc2V0CitDVF9BUkNIXzMyPXkKK0NUX0FSQ0hfQklUTkVTUz0zMgorIyBDVF9BUkNIX0ZMT0FUX0hXIGlzIG5vdCBzZXQKK0NUX0FSQ0hfRkxPQVRfU1c9eQorQ1RfVEFSR0VUX0NGTEFHUz0iIgorQ1RfVEFSR0VUX0xERkxBR1M9IiIKKyMgQ1RfQVJDSF9hbHBoYSBpcyBub3Qgc2V0CitDVF9BUkNIX2FybT15CisjIENUX0FSQ0hfYXZyMzIgaXMgbm90IHNldAorIyBDVF9BUkNIX2JsYWNrZmluIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9tNjhrIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9taXBzIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9wb3dlcnBjIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zMzkwIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zaCBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc3BhcmMgaXMgbm90IHNldAorIyBDVF9BUkNIX3g4NiBpcyBub3Qgc2V0CitDVF9BUkNIX2FscGhhX0FWQUlMQUJMRT15CitDVF9BUkNIX2FybV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hdnIzMl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9ibGFja2Zpbl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9tNjhrX0FWQUlMQUJMRT15CitDVF9BUkNIX21pcHNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfcG93ZXJwY19BVkFJTEFCTEU9eQorQ1RfQVJDSF9zMzkwX0FWQUlMQUJMRT15CitDVF9BUkNIX3NoX0FWQUlMQUJMRT15CitDVF9BUkNIX3NwYXJjX0FWQUlMQUJMRT15CitDVF9BUkNIX3g4Nl9BVkFJTEFCTEU9eQorCisjCisjIEdlbmVyaWMgdGFyZ2V0IG9wdGlvbnMKKyMKK0NUX0FSQ0hfVVNFX01NVT15CisKKyMKKyMgVGFyZ2V0IG9wdGltaXNhdGlvbnMKKyMKKworIworIyBhcm0gb3RoZXIgb3B0aW9ucworIworQ1RfQVJDSF9BUk1fTU9ERT0iYXJtIgorQ1RfQVJDSF9BUk1fTU9ERV9BUk09eQorIyBDVF9BUkNIX0FSTV9NT0RFX1RIVU1CIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9BUk1fSU5URVJXT1JLSU5HIGlzIG5vdCBzZXQKK0NUX0FSQ0hfQVJNX0VBQkk9eQorCisjCisjIFRvb2xjaGFpbiBvcHRpb25zCisjCisKKyMKKyMgR2VuZXJhbCB0b29sY2hhaW4gb3B0aW9ucworIworQ1RfRk9SQ0VfU1lTUk9PVD15CitDVF9VU0VfU1lTUk9PVD15CitDVF9TWVNST09UX05BTUU9InN5c3Jvb3QiCitDVF9TWVNST09UX0RJUl9QUkVGSVg9IiIKK0NUX1dBTlRTX1NUQVRJQ19MSU5LPXkKKyMgQ1RfU1RBVElDX1RPT0xDSEFJTiBpcyBub3Qgc2V0CitDVF9UT09MQ0hBSU5fUEtHVkVSU0lPTj0iIgorQ1RfVE9PTENIQUlOX0JVR1VSTD0iIgorCisjCisjIFR1cGxlIGNvbXBsZXRpb24gYW5kIGFsaWFzaW5nCisjCitDVF9UQVJHRVRfVkVORE9SPSJ1bmtub3duIgorQ1RfVEFSR0VUX0FMSUFTX1NFRF9FWFBSPSIiCitDVF9UQVJHRVRfQUxJQVM9IiIKKworIworIyBUb29sY2hhaW4gdHlwZQorIworIyBDVF9OQVRJVkUgaXMgbm90IHNldAorQ1RfQ1JPU1M9eQorIyBDVF9DUk9TU19OQVRJVkUgaXMgbm90IHNldAorIyBDVF9DQU5BRElBTiBpcyBub3Qgc2V0CitDVF9UT09MQ0hBSU5fVFlQRT0iY3Jvc3MiCisKKyMKKyMgQnVpbGQgc3lzdGVtCisjCitDVF9CVUlMRD0iIgorQ1RfQlVJTERfUFJFRklYPSIiCitDVF9CVUlMRF9TVUZGSVg9IiIKKworIworIyBPcGVyYXRpbmcgU3lzdGVtCisjCitDVF9LRVJORUxfU1VQUE9SVFNfU0hBUkVEX0xJQlM9eQorQ1RfS0VSTkVMPSJsaW51eCIKK0NUX0tFUk5FTF9WRVJTSU9OPSIzLjAiCisjIENUX0tFUk5FTF9iYXJlX21ldGFsIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9saW51eD15CitDVF9LRVJORUxfYmFyZV9tZXRhbF9BVkFJTEFCTEU9eQorQ1RfS0VSTkVMX2xpbnV4X0FWQUlMQUJMRT15CisjIENUX0tFUk5FTF9WXzNfMF80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzMgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8xIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9WXzNfMD15CisjIENUX0tFUk5FTF9WXzJfNl8zOV80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM4XzggaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzdfNiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNl80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM1XzE0IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM0XzEwIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzMzXzE5IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzMyXzQ2IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzMxXzE0IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzI3XzU5IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX0xJTlVYX0NVU1RPTSBpcyBub3Qgc2V0CitDVF9LRVJORUxfbWluZ3czMl9BVkFJTEFCTEU9eQorCisjCisjIENvbW1vbiBrZXJuZWwgb3B0aW9ucworIworQ1RfU0hBUkVEX0xJQlM9eQorCisjCisjIGxpbnV4IG90aGVyIG9wdGlvbnMKKyMKK0NUX0tFUk5FTF9MSU5VWF9WRVJCT1NJVFlfMD15CisjIENUX0tFUk5FTF9MSU5VWF9WRVJCT1NJVFlfMSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9MSU5VWF9WRVJCT1NJVFlfMiBpcyBub3Qgc2V0CitDVF9LRVJORUxfTElOVVhfVkVSQk9TRV9MRVZFTD0wCitDVF9LRVJORUxfTElOVVhfSU5TVEFMTF9DSEVDSz15CisKKyMKKyMgQmluYXJ5IHV0aWxpdGllcworIworQ1RfQVJDSF9CSU5GTVRfRUxGPXkKKworIworIyBHTlUgYmludXRpbHMKKyMKKyMgQ1RfQklOVVRJTFNfVl8yXzIxXzUzIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfVl8yXzIxXzFhIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX1ZfMl8yMF8xYT15CisjIENUX0JJTlVUSUxTX1ZfMl8xOV8xYSBpcyBub3Qgc2V0CisjIENUX0JJTlVUSUxTX1ZfMl8xOGEgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVkVSU0lPTj0iMi4yMC4xYSIKK0NUX0JJTlVUSUxTXzJfMjBfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfMl8xOV9vcl9sYXRlcj15CitDVF9CSU5VVElMU18yXzE4X29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTX0dPTERfU1VQUE9SVFNfQVJDSD15CitDVF9CSU5VVElMU19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQklOVVRJTFNfRk9SQ0VfTERfQkZEPXkKK0NUX0JJTlVUSUxTX0xJTktFUl9MRD15CisjIENUX0JJTlVUSUxTX0xJTktFUl9MRF9HT0xEIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfTElOS0VSX0dPTERfTEQgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfTElOS0VSU19MSVNUPSJsZCIKK0NUX0JJTlVUSUxTX0xJTktFUl9ERUZBVUxUPSJiZmQiCitDVF9CSU5VVElMU19FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0JJTlVUSUxTX0ZPUl9UQVJHRVQ9eQorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVF9JQkVSVFk9eQorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVF9CRkQ9eQorCisjCisjIEMgY29tcGlsZXIKKyMKK0NUX0NDPSJnY2MiCitDVF9DQ19WRVJTSU9OPSI0LjQuMyIKK0NUX0NDX2djYz15CisjIENUX0NDX0dDQ19TSE9XX0xJTkFSTyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF82XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNl8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF81XzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzYgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF81IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNCBpcyBub3Qgc2V0CitDVF9DQ19WXzRfNF8zPXkKKyMgQ1RfQ0NfVl80XzRfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM180IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8yXzIgaXMgbm90IHNldAorQ1RfQ0NfR0NDXzRfMl9vcl9sYXRlcj15CitDVF9DQ19HQ0NfNF8zX29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzQ9eQorQ1RfQ0NfR0NDXzRfNF9vcl9sYXRlcj15CitDVF9DQ19HQ0NfSEFTX0dSQVBISVRFPXkKK0NUX0NDX0dDQ19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQ0NfR0NDX1VTRV9HTVBfTVBGUj15CitDVF9DQ19HQ0NfVVNFX1BQTF9DTE9PRz15CitDVF9DQ19MQU5HX0pBVkFfVVNFX0VDSj15CitDVF9DQ19MQU5HX0ZPUlRSQU49eQorQ1RfQ0NfU1VQUE9SVF9DWFg9eQorQ1RfQ0NfU1VQUE9SVF9GT1JUUkFOPXkKK0NUX0NDX1NVUFBPUlRfSkFWQT15CitDVF9DQ19TVVBQT1JUX0FEQT15CitDVF9DQ19TVVBQT1JUX09CSkM9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDWFg9eQorCisjCisjIEFkZGl0aW9uYWwgc3VwcG9ydGVkIGxhbmd1YWdlczoKKyMKK0NUX0NDX0xBTkdfQ1hYPXkKK0NUX0NDX0xBTkdfSkFWQT15CisjIENUX0NDX0xBTkdfQURBIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfTEFOR19PQkpDIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfTEFOR19PQkpDWFggaXMgbm90IHNldAorQ1RfQ0NfTEFOR19PVEhFUlM9IiIKKworIworIyBnY2Mgb3RoZXIgb3B0aW9ucworIworQ1RfQ0NfRU5BQkxFX0NYWF9GTEFHUz0iIgorQ1RfQ0NfQ09SRV9FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0NDX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfQ0NfU1RBVElDX0xJQlNURENYWD15CisKKyMKKyMgT3B0aW1pc2F0aW9uIGZlYXR1cmVzCisjCitDVF9DQ19HQ0NfVVNFX0dSQVBISVRFPXkKKworIworIyBTZXR0aW5ncyBmb3IgbGlicmFyaWVzIHJ1bm5pbmcgb24gdGFyZ2V0CisjCitDVF9DQ19HQ0NfRU5BQkxFX1RBUkdFVF9PUFRTUEFDRT15CisjIENUX0NDX0dDQ19MSUJNVURGTEFQIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQkdPTVAgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCU1NQIGlzIG5vdCBzZXQKKworIworIyBNaXNjLiBvYnNjdXJlIG9wdGlvbnMuCisjCitDVF9DQ19DWEFfQVRFWElUPXkKKyMgQ1RfQ0NfR0NDX0RJU0FCTEVfUENIIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX1NKTEpfRVhDRVBUSU9OUyBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfTERCTF8xMjg9bQorCisjCisjIEMtbGlicmFyeQorIworQ1RfTElCQz0iZ2xpYmMiCitDVF9MSUJDX1ZFUlNJT049IjIuMTAuMSIKKyMgQ1RfTElCQ19lZ2xpYmMgaXMgbm90IHNldAorQ1RfTElCQ19nbGliYz15CisjIENUX0xJQkNfdUNsaWJjIGlzIG5vdCBzZXQKK0NUX0xJQkNfZWdsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX2dsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX0dMSUJDX1RBUkJBTEw9eQorIyBDVF9MSUJDX0dMSUJDX1ZfMl8xNCBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfVl8yXzEzIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19WXzJfMTJfMiBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfVl8yXzEyXzEgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX1ZfMl8xMV8xIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19WXzJfMTEgaXMgbm90IHNldAorQ1RfTElCQ19HTElCQ19WXzJfMTBfMT15CisjIENUX0xJQkNfR0xJQkNfVl8yXzkgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX1ZfMl84IGlzIG5vdCBzZXQKK0NUX0xJQkNfbWluZ3dfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbmV3bGliX0FWQUlMQUJMRT15CitDVF9MSUJDX25vbmVfQVZBSUxBQkxFPXkKK0NUX0xJQkNfdUNsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX1NVUFBPUlRfVEhSRUFEU19BTlk9eQorQ1RfTElCQ19TVVBQT1JUX05QVEw9eQorQ1RfVEhSRUFEUz0ibnB0bCIKKworIworIyBDb21tb24gQyBsaWJyYXJ5IG9wdGlvbnMKKyMKK0NUX1RIUkVBRFNfTlBUTD15CitDVF9MSUJDX1hMREQ9eQorQ1RfTElCQ19HTElCQ19NQVlfRk9SQ0VfUE9SVFM9eQorQ1RfTElCQ19nbGliY19mYW1pbGx5PXkKK0NUX0xJQkNfR0xJQkNfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9MSUJDX0dMSUJDX0NPTkZJR1BBUk1TPSIiCitDVF9MSUJDX0dMSUJDX0VYVFJBX0NGTEFHUz0iIgorQ1RfTElCQ19FWFRSQV9DQ19BUkdTPSIiCisjIENUX0xJQkNfRU5BQkxFX0ZPUlRJRklFRF9CVUlMRCBpcyBub3Qgc2V0CisjIENUX0xJQkNfRElTQUJMRV9WRVJTSU9OSU5HIGlzIG5vdCBzZXQKK0NUX0xJQkNfT0xERVNUX0FCST0iIgorIyBDVF9MSUJDX0dMSUJDX0ZPUkNFX1VOV0lORCBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX1VTRV9QT1JUUz15CitDVF9MSUJDX0FERE9OU19MSVNUPSIiCisjIENUX0xJQkNfTE9DQUxFUyBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfS0VSTkVMX1ZFUlNJT05fTk9ORSBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX0FTX0hFQURFUlM9eQorIyBDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX0NIT1NFTiBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX01JTl9LRVJORUw9IjMuMCIKKworIworIyBnbGliYyBvdGhlciBvcHRpb25zCisjCisKKyMKKyMgV0FSTklORyAhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIworCisjCisjICAgRm9yIGdsaWJjID49IDIuOCwgaXQgY2FuIGhhcHBlbiB0aGF0IHRoZSB0YXJiYWxscyAgICAKKyMKKworIworIyAgIGZvciB0aGUgYWRkb25zIGFyZSBub3QgYXZhaWxhYmxlIGZvciBkb3dubG9hZC4gICAgICAgCisjCisKKyMKKyMgICBJZiB0aGF0IGhhcHBlbnMsIGJhZCBsdWNrLi4uIFRyeSBhIHByZXZpb3VzIHZlcnNpb24gIAorIworCisjCisjICAgb3IgdHJ5IGFnYWluIGxhdGVyLi4uIDotKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyMKKworIworIyBEZWJ1ZyBmYWNpbGl0aWVzCisjCitDVF9ERUJVR19kbWFsbG9jPXkKK0NUX0RNQUxMT0NfVl81XzVfMj15CitDVF9ETUFMTE9DX1ZFUlNJT049IjUuNS4yIgorQ1RfREVCVUdfZHVtYT15CitDVF9EVU1BX0E9eQorQ1RfRFVNQV9TTz15CitDVF9EVU1BX1ZfMl81XzE1PXkKK0NUX0RVTUFfVkVSU0lPTj0iMl81XzE1IgorQ1RfREVCVUdfZ2RiPXkKK0NUX0dEQl9DUk9TUz15CisjIENUX0dEQl9DUk9TU19TVEFUSUMgaXMgbm90IHNldAorQ1RfR0RCX0NST1NTX1BZVEhPTj15CitDVF9HREJfTkFUSVZFPXkKKyMgQ1RfR0RCX05BVElWRV9TVEFUSUMgaXMgbm90IHNldAorQ1RfR0RCX0dEQlNFUlZFUj15CitDVF9HREJfR0RCU0VSVkVSX1NUQVRJQz15CisKKyMKKyMgZ2RiIHZlcnNpb24KKyMKKyMgQ1RfREVCVUdfR0RCX1NIT1dfTElOQVJPIGlzIG5vdCBzZXQKKyMgQ1RfR0RCX1ZfN18zYSBpcyBub3Qgc2V0CisjIENUX0dEQl9WXzdfMmEgaXMgbm90IHNldAorIyBDVF9HREJfVl83XzFhIGlzIG5vdCBzZXQKKyMgQ1RfR0RCX1ZfN18wXzFhIGlzIG5vdCBzZXQKKyMgQ1RfR0RCX1ZfN18wYSBpcyBub3Qgc2V0CitDVF9HREJfVl82XzhhPXkKK0NUX0dEQl9WRVJTSU9OPSI2LjhhIgorQ1RfREVCVUdfbHRyYWNlPXkKK0NUX0xUUkFDRV9WXzBfNV8zPXkKKyMgQ1RfTFRSQUNFX1ZfMF81XzIgaXMgbm90IHNldAorQ1RfTFRSQUNFX1ZFUlNJT049IjAuNS4zIgorQ1RfTFRSQUNFXzBfNV8zX29yX2xhdGVyPXkKK0NUX0RFQlVHX3N0cmFjZT15CisjIENUX1NUUkFDRV9WXzRfNV8yMCBpcyBub3Qgc2V0CitDVF9TVFJBQ0VfVl80XzVfMTk9eQorIyBDVF9TVFJBQ0VfVl80XzVfMTggaXMgbm90IHNldAorQ1RfU1RSQUNFX1ZFUlNJT049IjQuNS4xOSIKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzCisjCitDVF9DT01QTElCU19ORUVERUQ9eQorQ1RfR01QX05FRURFRD15CitDVF9NUEZSX05FRURFRD15CitDVF9QUExfTkVFREVEPXkKK0NUX0NMT09HX05FRURFRD15CitDVF9DT01QTElCUz15CitDVF9HTVA9eQorQ1RfTVBGUj15CitDVF9QUEw9eQorQ1RfQ0xPT0c9eQorQ1RfTElCRUxGX1RBUkdFVD15CisjIENUX0dNUF9WXzVfMF8yIGlzIG5vdCBzZXQKKyMgQ1RfR01QX1ZfNV8wXzEgaXMgbm90IHNldAorQ1RfR01QX1ZfNF8zXzI9eQorIyBDVF9HTVBfVl80XzNfMSBpcyBub3Qgc2V0CisjIENUX0dNUF9WXzRfM18wIGlzIG5vdCBzZXQKK0NUX0dNUF9WRVJTSU9OPSI0LjMuMiIKKyMgQ1RfTVBGUl9WXzNfMF8xIGlzIG5vdCBzZXQKKyMgQ1RfTVBGUl9WXzNfMF8wIGlzIG5vdCBzZXQKK0NUX01QRlJfVl8yXzRfMj15CisjIENUX01QRlJfVl8yXzRfMSBpcyBub3Qgc2V0CisjIENUX01QRlJfVl8yXzRfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZFUlNJT049IjIuNC4yIgorIyBDVF9QUExfVl8wXzExXzIgaXMgbm90IHNldAorIyBDVF9QUExfVl8wXzExXzEgaXMgbm90IHNldAorIyBDVF9QUExfVl8wXzExIGlzIG5vdCBzZXQKK0NUX1BQTF9WXzBfMTBfMj15CitDVF9QUExfVkVSU0lPTj0iMC4xMC4yIgorIyBDVF9DTE9PR19WXzBfMTVfMTEgaXMgbm90IHNldAorIyBDVF9DTE9PR19WXzBfMTVfMTAgaXMgbm90IHNldAorQ1RfQ0xPT0dfVl8wXzE1Xzk9eQorIyBDVF9DTE9PR19WXzBfMTVfOCBpcyBub3Qgc2V0CisjIENUX0NMT09HX1ZfMF8xNV83IGlzIG5vdCBzZXQKKyMgQ1RfQ0xPT0dfVl8wXzE1XzYgaXMgbm90IHNldAorQ1RfQ0xPT0dfVkVSU0lPTj0iMC4xNS45IgorCisjCisjIGxpYmVsZiB2ZXJzaW9uIG5lZWRlZCB0byBidWlsZCBmb3IgdGFyZ2V0CisjCitDVF9MSUJFTEZfVl8wXzhfMTM9eQorIyBDVF9MSUJFTEZfVl8wXzhfMTIgaXMgbm90IHNldAorQ1RfTElCRUxGX1ZFUlNJT049IjAuOC4xMyIKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzIGNvbW1vbiBvcHRpb25zCisjCisjIENUX0NPTVBMSUJTX0NIRUNLIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gdG9vbHMKKyMKKworIworIyBSRUFEIEhFTFAgYmVmb3JlIHlvdSBzYXkgJ1knIGJlbG93ICEhIQorIworIyBDVF9DT01QX1RPT0xTIGlzIG5vdCBzZXQKKworIworIyBUZXN0IHN1aXRlCisjCisjIENUX1RFU1RfU1VJVEVfR0NDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm1lYi11bmtub3duLWxpbnV4LWdudWVhYmkvcmVwb3J0ZWQuYnkgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYXJtZWItdW5rbm93bi1saW51eC1nbnVlYWJpL3JlcG9ydGVkLmJ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYThmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYXJtZWItdW5rbm93bi1saW51eC1nbnVlYWJpL3JlcG9ydGVkLmJ5CkBAIC0wLDAgKzEsMyBAQAorcmVwb3J0ZXJfbmFtZT0iWUVNIgorcmVwb3J0ZXJfdXJsPSJodHRwOi8veW1vcmluLmlzLWEtZ2Vlay5vcmcvIgorcmVwb3J0ZXJfY29tbWVudD0iIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2FybWViLXVua25vd24tbGludXgtdWNsaWJjZ251ZWFiaS9jcm9zc3Rvb2wuY29uZmlnIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2FybWViLXVua25vd24tbGludXgtdWNsaWJjZ251ZWFiaS9jcm9zc3Rvb2wuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYTFlY2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYXJtZWItdW5rbm93bi1saW51eC11Y2xpYmNnbnVlYWJpL2Nyb3NzdG9vbC5jb25maWcKQEAgLTAsMCArMSw1MzggQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgY3Jvc3N0b29sLU5HIGhnX2RlZmF1bHRAMjcyMV83YjY0NzQ2YjBhYjMgQ29uZmlndXJhdGlvbgorIyBTdW4gT2N0IDE2IDE3OjI0OjQwIDIwMTEKKyMKK0NUX0NPTkZJR1VSRV9oYXNfeHp1dGlscz15CitDVF9DT05GSUdVUkVfaGFzX2N2cz15CitDVF9DT05GSUdVUkVfaGFzX3N2bj15CitDVF9NT0RVTEVTPXkKKworIworIyBQYXRocyBhbmQgbWlzYyBvcHRpb25zCisjCisKKyMKKyMgY3Jvc3N0b29sLU5HIGJlaGF2aW9yCisjCisjIENUX09CU09MRVRFIGlzIG5vdCBzZXQKK0NUX0VYUEVSSU1FTlRBTD15CisjIENUX0RFQlVHX0NUIGlzIG5vdCBzZXQKKworIworIyBQYXRocworIworQ1RfTE9DQUxfVEFSQkFMTFNfRElSPSIke0hPTUV9L3NyYyIKK0NUX1NBVkVfVEFSQkFMTFM9eQorQ1RfV09SS19ESVI9IiR7Q1RfVE9QX0RJUn0vLmJ1aWxkIgorQ1RfUFJFRklYX0RJUj0iJHtIT01FfS94LXRvb2xzLyR7Q1RfVEFSR0VUfSIKK0NUX0lOU1RBTExfRElSPSIke0NUX1BSRUZJWF9ESVJ9IgorQ1RfUk1fUkZfUFJFRklYX0RJUj15CitDVF9SRU1PVkVfRE9DUz15CitDVF9JTlNUQUxMX0RJUl9STz15CitDVF9TVFJJUF9BTExfVE9PTENIQUlOX0VYRUNVVEFCTEVTPXkKKworIworIyBEb3dubG9hZGluZworIworIyBDVF9GT1JCSURfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9GT1JDRV9ET1dOTE9BRCBpcyBub3Qgc2V0CitDVF9DT05ORUNUX1RJTUVPVVQ9MTAKKyMgQ1RfT05MWV9ET1dOTE9BRCBpcyBub3Qgc2V0CisjIENUX1VTRV9NSVJST1IgaXMgbm90IHNldAorCisjCisjIEV4dHJhY3RpbmcKKyMKKyMgQ1RfRk9SQ0VfRVhUUkFDVCBpcyBub3Qgc2V0CitDVF9PVkVSSURFX0NPTkZJR19HVUVTU19TVUI9eQorIyBDVF9PTkxZX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfUEFUQ0hfQlVORExFRD15CisjIENUX1BBVENIX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9CVU5ETEVEX0ZBTExCQUNLX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTE9DQUxfRkFMTEJBQ0tfQlVORExFRCBpcyBub3Qgc2V0CisjIENUX1BBVENIX05PTkUgaXMgbm90IHNldAorQ1RfUEFUQ0hfT1JERVI9ImJ1bmRsZWQiCisKKyMKKyMgQnVpbGQgYmVoYXZpb3IKKyMKK0NUX1BBUkFMTEVMX0pPQlM9MAorQ1RfTE9BRD0wCitDVF9VU0VfUElQRVM9eQorQ1RfRVhUUkFfRkxBR1NfRk9SX0hPU1Q9IiIKKyMgQ1RfQ09ORklHX1NIRUxMX1NIIGlzIG5vdCBzZXQKKyMgQ1RfQ09ORklHX1NIRUxMX0FTSCBpcyBub3Qgc2V0CitDVF9DT05GSUdfU0hFTExfQkFTSD15CisjIENUX0NPTkZJR19TSEVMTF9DVVNUT00gaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMPSIke2Jhc2h9IgorCisjCisjIExvZ2dpbmcKKyMKKyMgQ1RfTE9HX0VSUk9SIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX1dBUk4gaXMgbm90IHNldAorIyBDVF9MT0dfSU5GTyBpcyBub3Qgc2V0CitDVF9MT0dfRVhUUkE9eQorIyBDVF9MT0dfQUxMIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0RFQlVHIGlzIG5vdCBzZXQKK0NUX0xPR19MRVZFTF9NQVg9IkVYVFJBIgorIyBDVF9MT0dfU0VFX1RPT0xTX1dBUk4gaXMgbm90IHNldAorQ1RfTE9HX1BST0dSRVNTX0JBUj15CitDVF9MT0dfVE9fRklMRT15CitDVF9MT0dfRklMRV9DT01QUkVTUz15CisKKyMKKyMgVGFyZ2V0IG9wdGlvbnMKKyMKK0NUX0FSQ0g9ImFybSIKK0NUX0FSQ0hfU1VQUE9SVFNfQk9USF9NTVU9eQorQ1RfQVJDSF9TVVBQT1JUU19CT1RIX0VORElBTj15CitDVF9BUkNIX1NVUFBPUlRTXzMyPXkKK0NUX0FSQ0hfU1VQUE9SVF9BUkNIPXkKK0NUX0FSQ0hfU1VQUE9SVF9DUFU9eQorQ1RfQVJDSF9TVVBQT1JUX1RVTkU9eQorQ1RfQVJDSF9TVVBQT1JUX0ZQVT15CitDVF9BUkNIX0RFRkFVTFRfSEFTX01NVT15CitDVF9BUkNIX0RFRkFVTFRfTEU9eQorQ1RfQVJDSF9ERUZBVUxUXzMyPXkKK0NUX0FSQ0hfQVJDSD0iYXJtdjV0ZSIKK0NUX0FSQ0hfQ1BVPSJ4c2NhbGUiCitDVF9BUkNIX1RVTkU9InhzY2FsZSIKK0NUX0FSQ0hfRlBVPSIiCitDVF9BUkNIX0JFPXkKKyMgQ1RfQVJDSF9MRSBpcyBub3Qgc2V0CitDVF9BUkNIXzMyPXkKK0NUX0FSQ0hfQklUTkVTUz0zMgorIyBDVF9BUkNIX0ZMT0FUX0hXIGlzIG5vdCBzZXQKK0NUX0FSQ0hfRkxPQVRfU1c9eQorQ1RfVEFSR0VUX0NGTEFHUz0iIgorQ1RfVEFSR0VUX0xERkxBR1M9IiIKKyMgQ1RfQVJDSF9hbHBoYSBpcyBub3Qgc2V0CitDVF9BUkNIX2FybT15CisjIENUX0FSQ0hfYXZyMzIgaXMgbm90IHNldAorIyBDVF9BUkNIX2JsYWNrZmluIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9tNjhrIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9taXBzIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9wb3dlcnBjIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zMzkwIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zaCBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc3BhcmMgaXMgbm90IHNldAorIyBDVF9BUkNIX3g4NiBpcyBub3Qgc2V0CitDVF9BUkNIX2FscGhhX0FWQUlMQUJMRT15CitDVF9BUkNIX2FybV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hdnIzMl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9ibGFja2Zpbl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9tNjhrX0FWQUlMQUJMRT15CitDVF9BUkNIX21pcHNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfcG93ZXJwY19BVkFJTEFCTEU9eQorQ1RfQVJDSF9zMzkwX0FWQUlMQUJMRT15CitDVF9BUkNIX3NoX0FWQUlMQUJMRT15CitDVF9BUkNIX3NwYXJjX0FWQUlMQUJMRT15CitDVF9BUkNIX3g4Nl9BVkFJTEFCTEU9eQorCisjCisjIEdlbmVyaWMgdGFyZ2V0IG9wdGlvbnMKKyMKK0NUX0FSQ0hfVVNFX01NVT15CisKKyMKKyMgVGFyZ2V0IG9wdGltaXNhdGlvbnMKKyMKKworIworIyBhcm0gb3RoZXIgb3B0aW9ucworIworQ1RfQVJDSF9BUk1fTU9ERT0iYXJtIgorQ1RfQVJDSF9BUk1fTU9ERV9BUk09eQorIyBDVF9BUkNIX0FSTV9NT0RFX1RIVU1CIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9BUk1fSU5URVJXT1JLSU5HIGlzIG5vdCBzZXQKK0NUX0FSQ0hfQVJNX0VBQkk9eQorCisjCisjIFRvb2xjaGFpbiBvcHRpb25zCisjCisKKyMKKyMgR2VuZXJhbCB0b29sY2hhaW4gb3B0aW9ucworIworQ1RfRk9SQ0VfU1lTUk9PVD15CitDVF9VU0VfU1lTUk9PVD15CitDVF9TWVNST09UX05BTUU9InN5c3Jvb3QiCitDVF9TWVNST09UX0RJUl9QUkVGSVg9IiIKK0NUX1dBTlRTX1NUQVRJQ19MSU5LPXkKKyMgQ1RfU1RBVElDX1RPT0xDSEFJTiBpcyBub3Qgc2V0CitDVF9UT09MQ0hBSU5fUEtHVkVSU0lPTj0iIgorQ1RfVE9PTENIQUlOX0JVR1VSTD0iIgorCisjCisjIFR1cGxlIGNvbXBsZXRpb24gYW5kIGFsaWFzaW5nCisjCitDVF9UQVJHRVRfVkVORE9SPSJ1bmtub3duIgorQ1RfVEFSR0VUX0FMSUFTX1NFRF9FWFBSPSIiCitDVF9UQVJHRVRfQUxJQVM9IiIKKworIworIyBUb29sY2hhaW4gdHlwZQorIworIyBDVF9OQVRJVkUgaXMgbm90IHNldAorQ1RfQ1JPU1M9eQorIyBDVF9DUk9TU19OQVRJVkUgaXMgbm90IHNldAorIyBDVF9DQU5BRElBTiBpcyBub3Qgc2V0CitDVF9UT09MQ0hBSU5fVFlQRT0iY3Jvc3MiCisKKyMKKyMgQnVpbGQgc3lzdGVtCisjCitDVF9CVUlMRD0iIgorQ1RfQlVJTERfUFJFRklYPSIiCitDVF9CVUlMRF9TVUZGSVg9IiIKKworIworIyBPcGVyYXRpbmcgU3lzdGVtCisjCitDVF9LRVJORUxfU1VQUE9SVFNfU0hBUkVEX0xJQlM9eQorQ1RfS0VSTkVMPSJsaW51eCIKK0NUX0tFUk5FTF9WRVJTSU9OPSIzLjAuNCIKKyMgQ1RfS0VSTkVMX2JhcmVfbWV0YWwgaXMgbm90IHNldAorQ1RfS0VSTkVMX2xpbnV4PXkKK0NUX0tFUk5FTF9iYXJlX21ldGFsX0FWQUlMQUJMRT15CitDVF9LRVJORUxfbGludXhfQVZBSUxBQkxFPXkKK0NUX0tFUk5FTF9WXzNfMF80PXkKKyMgQ1RfS0VSTkVMX1ZfM18wXzMgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8xIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM5XzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzhfOCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zN182IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM2XzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzVfMTQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzRfMTAgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzNfMTkgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzJfNDYgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzFfMTQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMjdfNTkgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9taW5ndzMyX0FWQUlMQUJMRT15CisKKyMKKyMgQ29tbW9uIGtlcm5lbCBvcHRpb25zCisjCitDVF9TSEFSRURfTElCUz15CisKKyMKKyMgbGludXggb3RoZXIgb3B0aW9ucworIworQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8wPXkKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8xIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8yIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9MSU5VWF9WRVJCT1NFX0xFVkVMPTAKK0NUX0tFUk5FTF9MSU5VWF9JTlNUQUxMX0NIRUNLPXkKKworIworIyBCaW5hcnkgdXRpbGl0aWVzCisjCitDVF9BUkNIX0JJTkZNVF9FTEY9eQorCisjCisjIEdOVSBiaW51dGlscworIworIyBDVF9CSU5VVElMU19WXzJfMjFfNTMgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVl8yXzIxXzFhPXkKKyMgQ1RfQklOVVRJTFNfVl8yXzIwXzFhIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfVl8yXzE5XzFhIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfVl8yXzE4YSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WRVJTSU9OPSIyLjIxLjFhIgorQ1RfQklOVVRJTFNfMl8yMV9vcl9sYXRlcj15CitDVF9CSU5VVElMU18yXzIwX29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMTlfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfMl8xOF9vcl9sYXRlcj15CitDVF9CSU5VVElMU19IQVNfR09MRD15CitDVF9CSU5VVElMU19HT0xEX1NVUFBPUlRTX0FSQ0g9eQorQ1RfQklOVVRJTFNfSEFTX1BMVUdJTlM9eQorQ1RfQklOVVRJTFNfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKKyMgQ1RfQklOVVRJTFNfTElOS0VSX0xEIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfTElOS0VSX0dPTEQgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfTElOS0VSX0xEX0dPTEQ9eQorIyBDVF9CSU5VVElMU19MSU5LRVJfR09MRF9MRCBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19HT0xEX0lOU1RBTExFRD15CitDVF9CSU5VVElMU19HT0xEX1RIUkVBRFM9eQorQ1RfQklOVVRJTFNfTElOS0VSX0JPVEg9eQorQ1RfQklOVVRJTFNfTElOS0VSU19MSVNUPSJsZCxnb2xkIgorQ1RfQklOVVRJTFNfTERfV1JBUFBFUj15CitDVF9CSU5VVElMU19MSU5LRVJfREVGQVVMVD0iYmZkIgorQ1RfQklOVVRJTFNfUExVR0lOUz15CitDVF9CSU5VVElMU19FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0JJTlVUSUxTX0ZPUl9UQVJHRVQ9eQorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVF9JQkVSVFk9eQorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVF9CRkQ9eQorCisjCisjIEMgY29tcGlsZXIKKyMKK0NUX0NDPSJnY2MiCitDVF9DQ19WRVJTSU9OPSI0LjYuMSIKK0NUX0NDX2djYz15CisjIENUX0NDX0dDQ19TSE9XX0xJTkFSTyBpcyBub3Qgc2V0CitDVF9DQ19WXzRfNl8xPXkKKyMgQ1RfQ0NfVl80XzZfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF81XzMgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8yIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF81XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF82IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM180IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8yXzIgaXMgbm90IHNldAorQ1RfQ0NfR0NDXzRfMl9vcl9sYXRlcj15CitDVF9DQ19HQ0NfNF8zX29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzRfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDXzRfNV9vcl9sYXRlcj15CitDVF9DQ19HQ0NfNF82PXkKK0NUX0NDX0dDQ180XzZfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDX0hBU19HUkFQSElURT15CitDVF9DQ19HQ0NfSEFTX0xUTz15CitDVF9DQ19HQ0NfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0NDX0dDQ19IQVNfQlVJTERfSUQ9eQorQ1RfQ0NfR0NDX0VOQUJMRV9QTFVHSU5TPXkKK0NUX0NDX0dDQ19HT0xEPXkKK0NUX0NDX0dDQ19VU0VfR01QX01QRlI9eQorQ1RfQ0NfR0NDX1VTRV9QUExfQ0xPT0c9eQorQ1RfQ0NfR0NDX1VTRV9NUEM9eQorIyBDVF9DQ19MQU5HX0ZPUlRSQU4gaXMgbm90IHNldAorQ1RfQ0NfU1VQUE9SVF9DWFg9eQorQ1RfQ0NfU1VQUE9SVF9GT1JUUkFOPXkKK0NUX0NDX1NVUFBPUlRfSkFWQT15CitDVF9DQ19TVVBQT1JUX0FEQT15CitDVF9DQ19TVVBQT1JUX09CSkM9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDWFg9eQorCisjCisjIEFkZGl0aW9uYWwgc3VwcG9ydGVkIGxhbmd1YWdlczoKKyMKK0NUX0NDX0xBTkdfQ1hYPXkKKyMgQ1RfQ0NfTEFOR19KQVZBIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfTEFOR19BREEgaXMgbm90IHNldAorIyBDVF9DQ19MQU5HX09CSkMgaXMgbm90IHNldAorIyBDVF9DQ19MQU5HX09CSkNYWCBpcyBub3Qgc2V0CitDVF9DQ19MQU5HX09USEVSUz0iIgorCisjCisjIGdjYyBvdGhlciBvcHRpb25zCisjCitDVF9DQ19FTkFCTEVfQ1hYX0ZMQUdTPSIiCitDVF9DQ19DT1JFX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfQ0NfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9DQ19TVEFUSUNfTElCU1REQ1hYPXkKKworIworIyBPcHRpbWlzYXRpb24gZmVhdHVyZXMKKyMKK0NUX0NDX0dDQ19VU0VfR1JBUEhJVEU9eQorQ1RfQ0NfR0NDX1VTRV9MVE89eQorCisjCisjIFNldHRpbmdzIGZvciBsaWJyYXJpZXMgcnVubmluZyBvbiB0YXJnZXQKKyMKK0NUX0NDX0dDQ19FTkFCTEVfVEFSR0VUX09QVFNQQUNFPXkKKyMgQ1RfQ0NfR0NDX0xJQk1VREZMQVAgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCR09NUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJTU1AgaXMgbm90IHNldAorCisjCisjIE1pc2MuIG9ic2N1cmUgb3B0aW9ucy4KKyMKK0NUX0NDX0NYQV9BVEVYSVQ9eQorQ1RfQ0NfR0NDX0RJU0FCTEVfUENIPXkKKyMgQ1RfQ0NfR0NDX1NKTEpfRVhDRVBUSU9OUyBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfTERCTF8xMjg9bQorIyBDVF9DQ19HQ0NfQlVJTERfSUQgaXMgbm90IHNldAorCisjCisjIEMtbGlicmFyeQorIworQ1RfTElCQz0idUNsaWJjIgorQ1RfTElCQ19WRVJTSU9OPSIwLjkuMzIiCisjIENUX0xJQkNfZWdsaWJjIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19nbGliYyBpcyBub3Qgc2V0CitDVF9MSUJDX3VDbGliYz15CitDVF9MSUJDX2VnbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19nbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19taW5nd19BVkFJTEFCTEU9eQorQ1RfTElCQ19uZXdsaWJfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbm9uZV9BVkFJTEFCTEU9eQorQ1RfTElCQ191Q2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfVUNMSUJDX1ZfMF85XzMyPXkKKyMgQ1RfTElCQ19VQ0xJQkNfVl8wXzlfMzEgaXMgbm90IHNldAorIyBDVF9MSUJDX1VDTElCQ19WXzBfOV8zMF8zIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19VQ0xJQkNfVl8wXzlfMzBfMiBpcyBub3Qgc2V0CisjIENUX0xJQkNfVUNMSUJDX1ZfMF85XzMwXzEgaXMgbm90IHNldAorIyBDVF9MSUJDX1VDTElCQ19WXzBfOV8zMCBpcyBub3Qgc2V0CisjIENUX0xJQkNfVUNMSUJDX1Zfc25hcHNob3QgaXMgbm90IHNldAorIyBDVF9MSUJDX1VDTElCQ19WX3NwZWNpZmljX2RhdGUgaXMgbm90IHNldAorQ1RfTElCQ19VQ0xJQkNfMF85XzMyX29yX2xhdGVyPXkKK0NUX0xJQkNfVUNMSUJDXzBfOV8zMF9vcl9sYXRlcj15CitDVF9MSUJDX1VDTElCQ19QQVJBTExFTD15CitDVF9MSUJDX1VDTElCQ19WRVJCT1NJVFlfMD15CisjIENUX0xJQkNfVUNMSUJDX1ZFUkJPU0lUWV8xIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19VQ0xJQkNfVkVSQk9TSVRZXzIgaXMgbm90IHNldAorQ1RfTElCQ19VQ0xJQkNfVkVSQk9TSVRZPSIiCitDVF9MSUJDX1VDTElCQ19ERUJVR19MRVZFTF8wPXkKKyMgQ1RfTElCQ19VQ0xJQkNfREVCVUdfTEVWRUxfMSBpcyBub3Qgc2V0CisjIENUX0xJQkNfVUNMSUJDX0RFQlVHX0xFVkVMXzIgaXMgbm90IHNldAorQ1RfTElCQ19VQ0xJQkNfREVCVUdfTEVWRUw9MAorQ1RfTElCQ19VQ0xJQkNfQ09ORklHX0ZJTEU9IiR7Q1RfTElCX0RJUn0vc2FtcGxlcy8ke0NUX1RBUkdFVH0vJHtDVF9MSUJDfS0ke0NUX0xJQkNfVkVSU0lPTn0uY29uZmlnIgorQ1RfTElCQ19TVVBQT1JUX1RIUkVBRFNfQU5ZPXkKK0NUX0xJQkNfU1VQUE9SVF9OUFRMPXkKK0NUX0xJQkNfU1VQUE9SVF9MSU5VWFRIUkVBRFM9eQorQ1RfTElCQ19TVVBQT1JUX1RIUkVBRFNfTk9ORT15CitDVF9USFJFQURTPSJucHRsIgorCisjCisjIENvbW1vbiBDIGxpYnJhcnkgb3B0aW9ucworIworQ1RfVEhSRUFEU19OUFRMPXkKKyMgQ1RfVEhSRUFEU19MSU5VWFRIUkVBRFMgaXMgbm90IHNldAorIyBDVF9USFJFQURTX05PTkUgaXMgbm90IHNldAorQ1RfTElCQ19YTEREPXkKKworIworIyB1Q2xpYmMgb3RoZXIgb3B0aW9ucworIworQ1RfTElCQ19VQ0xJQkNfTE5YVEhSRD0iIgorIyBDVF9MSUJDX1VDTElCQ19MT0NBTEVTIGlzIG5vdCBzZXQKK0NUX0xJQkNfVUNMSUJDX1dDSEFSPXkKKworIworIyBEZWJ1ZyBmYWNpbGl0aWVzCisjCitDVF9ERUJVR19kbWFsbG9jPXkKK0NUX0RNQUxMT0NfVl81XzVfMj15CitDVF9ETUFMTE9DX1ZFUlNJT049IjUuNS4yIgorQ1RfREVCVUdfZHVtYT15CitDVF9EVU1BX0E9eQorQ1RfRFVNQV9TTz15CitDVF9EVU1BX1ZfMl81XzE1PXkKK0NUX0RVTUFfVkVSU0lPTj0iMl81XzE1IgorQ1RfREVCVUdfZ2RiPXkKK0NUX0dEQl9DUk9TUz15CisjIENUX0dEQl9DUk9TU19TVEFUSUMgaXMgbm90IHNldAorQ1RfR0RCX0NST1NTX1BZVEhPTj15CitDVF9HREJfTkFUSVZFPXkKKyMgQ1RfR0RCX05BVElWRV9TVEFUSUMgaXMgbm90IHNldAorQ1RfR0RCX0dEQlNFUlZFUj15CitDVF9HREJfR0RCU0VSVkVSX1NUQVRJQz15CisKKyMKKyMgZ2RiIHZlcnNpb24KKyMKKyMgQ1RfREVCVUdfR0RCX1NIT1dfTElOQVJPIGlzIG5vdCBzZXQKK0NUX0dEQl9WXzdfM2E9eQorIyBDVF9HREJfVl83XzJhIGlzIG5vdCBzZXQKKyMgQ1RfR0RCX1ZfN18xYSBpcyBub3Qgc2V0CisjIENUX0dEQl9WXzdfMF8xYSBpcyBub3Qgc2V0CisjIENUX0dEQl9WXzdfMGEgaXMgbm90IHNldAorIyBDVF9HREJfVl82XzhhIGlzIG5vdCBzZXQKK0NUX0dEQl83XzBfb3JfbGF0ZXI9eQorQ1RfR0RCX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9HREJfSU5TVEFMTF9HREJJTklUPXkKK0NUX0dEQl9WRVJTSU9OPSI3LjNhIgorQ1RfREVCVUdfbHRyYWNlPXkKK0NUX0xUUkFDRV9WXzBfNV8zPXkKKyMgQ1RfTFRSQUNFX1ZfMF81XzIgaXMgbm90IHNldAorQ1RfTFRSQUNFX1ZFUlNJT049IjAuNS4zIgorQ1RfTFRSQUNFXzBfNV8zX29yX2xhdGVyPXkKK0NUX0RFQlVHX3N0cmFjZT15CisjIENUX1NUUkFDRV9WXzRfNV8yMCBpcyBub3Qgc2V0CitDVF9TVFJBQ0VfVl80XzVfMTk9eQorIyBDVF9TVFJBQ0VfVl80XzVfMTggaXMgbm90IHNldAorQ1RfU1RSQUNFX1ZFUlNJT049IjQuNS4xOSIKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzCisjCitDVF9DT01QTElCU19ORUVERUQ9eQorQ1RfR01QX05FRURFRD15CitDVF9NUEZSX05FRURFRD15CitDVF9QUExfTkVFREVEPXkKK0NUX0NMT09HX05FRURFRD15CitDVF9NUENfTkVFREVEPXkKK0NUX0NPTVBMSUJTPXkKK0NUX0dNUD15CitDVF9NUEZSPXkKK0NUX1BQTD15CitDVF9DTE9PRz15CitDVF9NUEM9eQorQ1RfTElCRUxGX1RBUkdFVD15CitDVF9HTVBfVl81XzBfMj15CisjIENUX0dNUF9WXzVfMF8xIGlzIG5vdCBzZXQKKyMgQ1RfR01QX1ZfNF8zXzIgaXMgbm90IHNldAorIyBDVF9HTVBfVl80XzNfMSBpcyBub3Qgc2V0CisjIENUX0dNUF9WXzRfM18wIGlzIG5vdCBzZXQKK0NUX0dNUF9WRVJTSU9OPSI1LjAuMiIKK0NUX01QRlJfVl8zXzBfMT15CisjIENUX01QRlJfVl8zXzBfMCBpcyBub3Qgc2V0CisjIENUX01QRlJfVl8yXzRfMiBpcyBub3Qgc2V0CisjIENUX01QRlJfVl8yXzRfMSBpcyBub3Qgc2V0CisjIENUX01QRlJfVl8yXzRfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZFUlNJT049IjMuMC4xIgorQ1RfUFBMX1ZfMF8xMV8yPXkKKyMgQ1RfUFBMX1ZfMF8xMV8xIGlzIG5vdCBzZXQKKyMgQ1RfUFBMX1ZfMF8xMSBpcyBub3Qgc2V0CisjIENUX1BQTF9WXzBfMTBfMiBpcyBub3Qgc2V0CitDVF9QUExfVkVSU0lPTj0iMC4xMS4yIgorQ1RfUFBMXzBfMTE9eQorQ1RfUFBMX05FRURTX0xJQlBXTD15CitDVF9DTE9PR19WXzBfMTVfMTE9eQorIyBDVF9DTE9PR19WXzBfMTVfMTAgaXMgbm90IHNldAorIyBDVF9DTE9PR19WXzBfMTVfOSBpcyBub3Qgc2V0CisjIENUX0NMT09HX1ZfMF8xNV84IGlzIG5vdCBzZXQKKyMgQ1RfQ0xPT0dfVl8wXzE1XzcgaXMgbm90IHNldAorIyBDVF9DTE9PR19WXzBfMTVfNiBpcyBub3Qgc2V0CitDVF9DTE9PR19WRVJTSU9OPSIwLjE1LjExIgorQ1RfTVBDX1ZfMF85PXkKKyMgQ1RfTVBDX1ZfMF84XzIgaXMgbm90IHNldAorIyBDVF9NUENfVl8wXzhfMSBpcyBub3Qgc2V0CisjIENUX01QQ19WXzBfNyBpcyBub3Qgc2V0CitDVF9NUENfVkVSU0lPTj0iMC45IgorCisjCisjIGxpYmVsZiB2ZXJzaW9uIG5lZWRlZCB0byBidWlsZCBmb3IgdGFyZ2V0CisjCitDVF9MSUJFTEZfVl8wXzhfMTM9eQorIyBDVF9MSUJFTEZfVl8wXzhfMTIgaXMgbm90IHNldAorQ1RfTElCRUxGX1ZFUlNJT049IjAuOC4xMyIKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzIGNvbW1vbiBvcHRpb25zCisjCisjIENUX0NPTVBMSUJTX0NIRUNLIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gdG9vbHMKKyMKKworIworIyBSRUFEIEhFTFAgYmVmb3JlIHlvdSBzYXkgJ1knIGJlbG93ICEhIQorIworIyBDVF9DT01QX1RPT0xTIGlzIG5vdCBzZXQKKworIworIyBUZXN0IHN1aXRlCisjCitDVF9URVNUX1NVSVRFPXkKK0NUX1RFU1RfU1VJVEVfR0NDPXkKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm1lYi11bmtub3duLWxpbnV4LXVjbGliY2dudWVhYmkvcmVwb3J0ZWQuYnkgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYXJtZWItdW5rbm93bi1saW51eC11Y2xpYmNnbnVlYWJpL3JlcG9ydGVkLmJ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYThmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYXJtZWItdW5rbm93bi1saW51eC11Y2xpYmNnbnVlYWJpL3JlcG9ydGVkLmJ5CkBAIC0wLDAgKzEsMyBAQAorcmVwb3J0ZXJfbmFtZT0iWUVNIgorcmVwb3J0ZXJfdXJsPSJodHRwOi8veW1vcmluLmlzLWEtZ2Vlay5vcmcvIgorcmVwb3J0ZXJfY29tbWVudD0iIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2FybWViLXVua25vd24tbGludXgtdWNsaWJjZ251ZWFiaS91Q2xpYmMtMC45LjMyLmNvbmZpZyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm1lYi11bmtub3duLWxpbnV4LXVjbGliY2dudWVhYmkvdUNsaWJjLTAuOS4zMi5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQwZWQyNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hcm1lYi11bmtub3duLWxpbnV4LXVjbGliY2dudWVhYmkvdUNsaWJjLTAuOS4zMi5jb25maWcKQEAgLTAsMCArMSwyNjIgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgVmVyc2lvbjogMC45LjMyLjEtZ2l0CisjIE1vbiBTZXAgMTIgMjI6NDE6MjAgMjAxMQorIworIyBUQVJHRVRfYWxwaGEgaXMgbm90IHNldAorVEFSR0VUX2FybT15CisjIFRBUkdFVF9hdnIzMiBpcyBub3Qgc2V0CisjIFRBUkdFVF9iZmluIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2NyaXMgaXMgbm90IHNldAorIyBUQVJHRVRfZTEgaXMgbm90IHNldAorIyBUQVJHRVRfZnJ2IGlzIG5vdCBzZXQKKyMgVEFSR0VUX2g4MzAwIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2hwcGEgaXMgbm90IHNldAorIyBUQVJHRVRfaTM4NiBpcyBub3Qgc2V0CisjIFRBUkdFVF9pOTYwIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2lhNjQgaXMgbm90IHNldAorIyBUQVJHRVRfbTY4ayBpcyBub3Qgc2V0CisjIFRBUkdFVF9taWNyb2JsYXplIGlzIG5vdCBzZXQKKyMgVEFSR0VUX21pcHMgaXMgbm90IHNldAorIyBUQVJHRVRfbmlvcyBpcyBub3Qgc2V0CisjIFRBUkdFVF9uaW9zMiBpcyBub3Qgc2V0CisjIFRBUkdFVF9wb3dlcnBjIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3NoIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3NoNjQgaXMgbm90IHNldAorIyBUQVJHRVRfc3BhcmMgaXMgbm90IHNldAorIyBUQVJHRVRfdjg1MCBpcyBub3Qgc2V0CisjIFRBUkdFVF92YXggaXMgbm90IHNldAorIyBUQVJHRVRfeDg2XzY0IGlzIG5vdCBzZXQKKyMgVEFSR0VUX3h0ZW5zYSBpcyBub3Qgc2V0CisjIFRBUkdFVF9jNnggaXMgbm90IHNldAorCisjCisjIFRhcmdldCBBcmNoaXRlY3R1cmUgRmVhdHVyZXMgYW5kIE9wdGlvbnMKKyMKK1RBUkdFVF9BUkNIPSJhcm0iCitGT1JDRV9PUFRJT05TX0ZPUl9BUkNIPXkKK0NPTkZJR19BUk1fT0FCST15CisjIENPTkZJR19BUk1fRUFCSSBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19BUk09eQorIyBDT05GSUdfQVJNNjEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk03VERNSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUk03MjBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTkyMFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJNOTIyVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk05MjZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTEwVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk0xMTM2SkZfUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk0xMTc2SlpfUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk0xMTc2SlpGX1MgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0NPUlRFWF9NMyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fQ09SVEVYX00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9TQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9YU0NBTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0lXTU1YVCBpcyBub3Qgc2V0CitUQVJHRVRfU1VCQVJDSD0iIgorCisjCisjIFVzaW5nIEVMRiBmaWxlIGZvcm1hdAorIworQVJDSF9BTllfRU5ESUFOPXkKK0FSQ0hfQklHX0VORElBTj15CitBUkNIX1dBTlRTX0JJR19FTkRJQU49eQorIyBBUkNIX1dBTlRTX0xJVFRMRV9FTkRJQU4gaXMgbm90IHNldAorQVJDSF9IQVNfTU1VPXkKK0FSQ0hfVVNFX01NVT15CitVQ0xJQkNfSEFTX0ZMT0FUUz15CisjIFVDTElCQ19IQVNfRlBVIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfU09GVF9GTE9BVD15CitET19DOTlfTUFUSD15CitET19YU0lfTUFUSD15CitVQ0xJQkNfSEFTX0ZFTlY9eQorS0VSTkVMX0hFQURFUlM9Ii91c3IvaW5jbHVkZSIKK0hBVkVfRE9UX0NPTkZJRz15CisKKyMKKyMgR2VuZXJhbCBMaWJyYXJ5IFNldHRpbmdzCisjCisjIEhBVkVfTk9fUElDIGlzIG5vdCBzZXQKK0RPUElDPXkKKyMgQVJDSF9IQVNfTk9fU0hBUkVEIGlzIG5vdCBzZXQKKyMgQVJDSF9IQVNfTk9fTERTTyBpcyBub3Qgc2V0CitIQVZFX1NIQVJFRD15CisjIEZPUkNFX1NIQVJFQUJMRV9URVhUX1NFR01FTlRTIGlzIG5vdCBzZXQKK0xEU09fTEREX1NVUFBPUlQ9eQorTERTT19DQUNIRV9TVVBQT1JUPXkKK0xEU09fUFJFTE9BRF9FTlZfU1VQUE9SVD15CisjIExEU09fUFJFTE9BRF9GSUxFX1NVUFBPUlQgaXMgbm90IHNldAorTERTT19CQVNFX0ZJTEVOQU1FPSJsZC5zbyIKK1VDTElCQ19TVEFUSUNfTERDT05GSUc9eQorIyBMRFNPX1JVTlBBVEggaXMgbm90IHNldAorIyBMRFNPX1NFQVJDSF9JTlRFUlBfUEFUSCBpcyBub3Qgc2V0CitVQ0xJQkNfQ1RPUl9EVE9SPXkKKyMgTERTT19HTlVfSEFTSF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgSEFTX05PX1RIUkVBRFMgaXMgbm90IHNldAorIyBMSU5VWFRIUkVBRFNfT0xEIGlzIG5vdCBzZXQKKyMgTElOVVhUSFJFQURTX05FVyBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1RIUkVBRFNfTkFUSVZFPXkKK1VDTElCQ19IQVNfVEhSRUFEUz15CitVQ0xJQkNfSEFTX1RMUz15CisjIFBUSFJFQURTX0RFQlVHX1NVUFBPUlQgaXMgbm90IHNldAorVUNMSUJDX0hBU19TWVNMT0c9eQorVUNMSUJDX0hBU19MRlM9eQorIyBNQUxMT0MgaXMgbm90IHNldAorIyBNQUxMT0NfU0lNUExFIGlzIG5vdCBzZXQKK01BTExPQ19TVEFOREFSRD15CisjIE1BTExPQ19HTElCQ19DT01QQVQgaXMgbm90IHNldAorVUNMSUJDX0RZTkFNSUNfQVRFWElUPXkKKyMgQ09NUEFUX0FURVhJVCBpcyBub3Qgc2V0CitVQ0xJQkNfU1VTVjNfTEVHQUNZPXkKKyMgVUNMSUJDX1NVU1YzX0xFR0FDWV9NQUNST1MgaXMgbm90IHNldAorIyBVQ0xJQkNfU1VTVjRfTEVHQUNZIGlzIG5vdCBzZXQKK1VDTElCQ19TVFJJQ1RfSEVBREVSUz15CisjIFVDTElCQ19IQVNfU1RVQlMgaXMgbm90IHNldAorVUNMSUJDX0hBU19TSEFET1c9eQorIyBVQ0xJQkNfSEFTX1BST0dSQU1fSU5WT0NBVElPTl9OQU1FIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfUFRZPXkKK0FTU1VNRV9ERVZQVFM9eQorVU5JWDk4UFRZX09OTFk9eQorIyBVQ0xJQkNfSEFTX0dFVFBUIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfTElCVVRJTD15CitVQ0xJQkNfSEFTX1RNX0VYVEVOU0lPTlM9eQorVUNMSUJDX0hBU19UWl9DQUNISU5HPXkKK1VDTElCQ19IQVNfVFpfRklMRT15CitVQ0xJQkNfSEFTX1RaX0ZJTEVfUkVBRF9NQU5ZPXkKK1VDTElCQ19UWl9GSUxFX1BBVEg9Ii9ldGMvVFoiCisjIFVDTElCQ19GQUxMQkFDS19UT19FVENfTE9DQUxUSU1FIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBMaWJyYXJ5IFNldHRpbmdzCisjCitVQ0xJQkNfUFdEX0JVRkZFUl9TSVpFPTI1NgorVUNMSUJDX0dSUF9CVUZGRVJfU0laRT0yNTYKKworIworIyBTdXBwb3J0IHZhcmlvdXMgZmFtaWxpZXMgb2YgZnVuY3Rpb25zCisjCitVQ0xJQkNfTElOVVhfTU9EVUxFXzI0PXkKK1VDTElCQ19MSU5VWF9TUEVDSUZJQz15CitVQ0xJQkNfSEFTX0dOVV9FUlJPUj15CisjIFVDTElCQ19CU0RfU1BFQ0lGSUMgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0JTRF9FUlIgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX09CU09MRVRFX0JTRF9TSUdOQUwgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX09CU09MRVRFX1NZU1ZfU0lHTkFMIGlzIG5vdCBzZXQKKyMgVUNMSUJDX05UUF9MRUdBQ1kgaXMgbm90IHNldAorIyBVQ0xJQkNfU1Y0X0RFUFJFQ0FURUQgaXMgbm90IHNldAorVUNMSUJDX0hBU19SRUFMVElNRT15CitVQ0xJQkNfSEFTX0FEVkFOQ0VEX1JFQUxUSU1FPXkKK1VDTElCQ19IQVNfRVBPTEw9eQorVUNMSUJDX0hBU19YQVRUUj15CitVQ0xJQkNfSEFTX1BST0ZJTElORz15CitVQ0xJQkNfSEFTX0NSWVBUX0lNUEw9eQorVUNMSUJDX0hBU19DUllQVD15CitVQ0xJQkNfSEFTX05FVFdPUktfU1VQUE9SVD15CitVQ0xJQkNfSEFTX1NPQ0tFVD15CitVQ0xJQkNfSEFTX0lQVjQ9eQorVUNMSUJDX0hBU19JUFY2PXkKK1VDTElCQ19IQVNfUlBDPXkKK1VDTElCQ19IQVNfRlVMTF9SUEM9eQorVUNMSUJDX0hBU19SRUVOVFJBTlRfUlBDPXkKK1VDTElCQ19VU0VfTkVUTElOSz15CitVQ0xJQkNfU1VQUE9SVF9BSV9BRERSQ09ORklHPXkKKyMgVUNMSUJDX0hBU19CU0RfUkVTX0NMT1NFIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfQ09NUEFUX1JFU19TVEFURT15CisjIFVDTElCQ19IQVNfRVhUUkFfQ09NUEFUX1JFU19TVEFURSBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfTElCUkVTT0xWX1NUVUIgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0xJQk5TTF9TVFVCIGlzIG5vdCBzZXQKKworIworIyBTdHJpbmcgYW5kIFN0ZGlvIFN1cHBvcnQKKyMKK1VDTElCQ19IQVNfU1RSSU5HX0dFTkVSSUNfT1BUPXkKK1VDTElCQ19IQVNfU1RSSU5HX0FSQ0hfT1BUPXkKK1VDTElCQ19IQVNfQ1RZUEVfVEFCTEVTPXkKK1VDTElCQ19IQVNfQ1RZUEVfU0lHTkVEPXkKKyMgVUNMSUJDX0hBU19DVFlQRV9VTlNBRkUgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0NUWVBFX0NIRUNLRUQgaXMgbm90IHNldAorVUNMSUJDX0hBU19DVFlQRV9FTkZPUkNFRD15CisjIFVDTElCQ19IQVNfV0NIQVIgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0xPQ0FMRSBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfSEVYQURFQ0lNQUxfRkxPQVRTIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfR0xJQkNfQ1VTVE9NX1BSSU5URj15CisjIFVTRV9PTERfVkZQUklOVEYgaXMgbm90IHNldAorVUNMSUJDX1BSSU5URl9TQ0FORl9QT1NJVElPTkFMX0FSR1M9OQorIyBVQ0xJQkNfSEFTX1NDQU5GX0dMSUJDX0FfRkxBRyBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laX05PTkUgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl8yNTYgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl81MTIgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl8xMDI0IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfMjA0OCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl80MDk2PXkKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfODE5MiBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NURElPX0JVSUxUSU5fQlVGRkVSX05PTkU9eQorIyBVQ0xJQkNfSEFTX1NURElPX0JVSUxUSU5fQlVGRkVSXzQgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVSUxUSU5fQlVGRkVSXzggaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX1NIVVRET1dOX09OX0FCT1JUIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfU1RESU9fR0VUQ19NQUNSTz15CitVQ0xJQkNfSEFTX1NURElPX1BVVENfTUFDUk89eQorVUNMSUJDX0hBU19TVERJT19BVVRPX1JXX1RSQU5TSVRJT049eQorIyBVQ0xJQkNfSEFTX0ZPUEVOX0xBUkdFRklMRV9NT0RFIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19GT1BFTl9FWENMVVNJVkVfTU9ERSBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfR0xJQkNfQ1VTVE9NX1NUUkVBTVMgaXMgbm90IHNldAorVUNMSUJDX0hBU19QUklOVEZfTV9TUEVDPXkKK1VDTElCQ19IQVNfRVJSTk9fTUVTU0FHRVM9eQorIyBVQ0xJQkNfSEFTX1NZU19FUlJMSVNUIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfU0lHTlVNX01FU1NBR0VTPXkKKyMgVUNMSUJDX0hBU19TWVNfU0lHTElTVCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX0dOVV9HRVRPUFQ9eQorVUNMSUJDX0hBU19TVERJT19GVVRFWEVTPXkKK1VDTElCQ19IQVNfR05VX0dFVFNVQk9QVD15CisKKyMKKyMgQmlnIGFuZCBUYWxsCisjCitVQ0xJQkNfSEFTX1JFR0VYPXkKKyMgVUNMSUJDX0hBU19SRUdFWF9PTEQgaXMgbm90IHNldAorVUNMSUJDX0hBU19GTk1BVENIPXkKKyMgVUNMSUJDX0hBU19GTk1BVENIX09MRCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfV09SREVYUCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX05GVFc9eQorIyBVQ0xJQkNfSEFTX0ZUUyBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX0dMT0I9eQorVUNMSUJDX0hBU19HTlVfR0xPQj15CisjIFVDTElCQ19IQVNfVVRNUFggaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgSW5zdGFsbGF0aW9uIE9wdGlvbnMKKyMKK1JVTlRJTUVfUFJFRklYPSIvdXNyLyQoVEFSR0VUX0FSQ0gpLWxpbnV4LXVjbGliYy8iCitERVZFTF9QUkVGSVg9Ii91c3IvJChUQVJHRVRfQVJDSCktbGludXgtdWNsaWJjL3Vzci8iCitNVUxUSUxJQl9ESVI9ImxpYiIKKyMgSEFSRFdJUkVEX0FCU1BBVEggaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgVUNMSUJDX0JVSUxEX1BJRSBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfQVJDNFJBTkRPTSBpcyBub3Qgc2V0CisjIEhBVkVfTk9fU1NQIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TU1AgaXMgbm90IHNldAorVUNMSUJDX0JVSUxEX1JFTFJPPXkKKyMgVUNMSUJDX0JVSUxEX05PVyBpcyBub3Qgc2V0CitVQ0xJQkNfQlVJTERfTk9FWEVDU1RBQ0s9eQorCisjCisjIHVDbGliYyBkZXZlbG9wbWVudC9kZWJ1Z2dpbmcgb3B0aW9ucworIworQ1JPU1NfQ09NUElMRVJfUFJFRklYPSIiCitVQ0xJQkNfRVhUUkFfQ0ZMQUdTPSIiCisjIERPREVCVUcgaXMgbm90IHNldAorIyBET1NUUklQIGlzIG5vdCBzZXQKKyMgRE9BU1NFUlRTIGlzIG5vdCBzZXQKKyMgU1VQUE9SVF9MRF9ERUJVRyBpcyBub3Qgc2V0CisjIFNVUFBPUlRfTERfREVCVUdfRUFSTFkgaXMgbm90IHNldAorIyBVQ0xJQkNfTUFMTE9DX0RFQlVHR0lORyBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX0JBQ0tUUkFDRT15CitXQVJOSU5HUz0iLVdhbGwiCitFWFRSQV9XQVJOSU5HUz15CisjIERPTVVMVEkgaXMgbm90IHNldAorIyBVQ0xJQkNfTUpOM19PTkxZIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hdnIzMi11bmtub3duLW5vbmUvY3Jvc3N0b29sLmNvbmZpZyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hdnIzMi11bmtub3duLW5vbmUvY3Jvc3N0b29sLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTBhOGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2F2cjMyLXVua25vd24tbm9uZS9jcm9zc3Rvb2wuY29uZmlnCkBAIC0wLDAgKzEsMzQzIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIGNyb3NzdG9vbC1ORyBoZ19kZWZhdWx0QDI3MjFfN2I2NDc0NmIwYWIzIENvbmZpZ3VyYXRpb24KKyMgU3VuIE9jdCAxNiAxNzoyNTowOCAyMDExCisjCitDVF9DT05GSUdVUkVfaGFzX3h6dXRpbHM9eQorQ1RfQ09ORklHVVJFX2hhc19jdnM9eQorQ1RfQ09ORklHVVJFX2hhc19zdm49eQorQ1RfTU9EVUxFUz15CisKKyMKKyMgUGF0aHMgYW5kIG1pc2Mgb3B0aW9ucworIworCisjCisjIGNyb3NzdG9vbC1ORyBiZWhhdmlvcgorIworIyBDVF9PQlNPTEVURSBpcyBub3Qgc2V0CitDVF9FWFBFUklNRU5UQUw9eQorIyBDVF9ERUJVR19DVCBpcyBub3Qgc2V0CisKKyMKKyMgUGF0aHMKKyMKK0NUX0xPQ0FMX1RBUkJBTExTX0RJUj0iJHtIT01FfS9zcmMiCitDVF9TQVZFX1RBUkJBTExTPXkKK0NUX1dPUktfRElSPSIke0NUX1RPUF9ESVJ9Ly5idWlsZCIKK0NUX1BSRUZJWF9ESVI9IiR7SE9NRX0veC10b29scy8ke0NUX1RBUkdFVH0iCitDVF9JTlNUQUxMX0RJUj0iJHtDVF9QUkVGSVhfRElSfSIKK0NUX1JNX1JGX1BSRUZJWF9ESVI9eQorQ1RfUkVNT1ZFX0RPQ1M9eQorQ1RfSU5TVEFMTF9ESVJfUk89eQorQ1RfU1RSSVBfQUxMX1RPT0xDSEFJTl9FWEVDVVRBQkxFUz15CisKKyMKKyMgRG93bmxvYWRpbmcKKyMKKyMgQ1RfRk9SQklEX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfRk9SQ0VfRE9XTkxPQUQgaXMgbm90IHNldAorQ1RfQ09OTkVDVF9USU1FT1VUPTEwCisjIENUX09OTFlfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9VU0VfTUlSUk9SIGlzIG5vdCBzZXQKKworIworIyBFeHRyYWN0aW5nCisjCisjIENUX0ZPUkNFX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfT1ZFUklERV9DT05GSUdfR1VFU1NfU1VCPXkKKyMgQ1RfT05MWV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX1BBVENIX0JVTkRMRUQ9eQorIyBDVF9QQVRDSF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9GQUxMQkFDS19MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0ZBTExCQUNLX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9OT05FIGlzIG5vdCBzZXQKK0NUX1BBVENIX09SREVSPSJidW5kbGVkIgorCisjCisjIEJ1aWxkIGJlaGF2aW9yCisjCitDVF9QQVJBTExFTF9KT0JTPTAKK0NUX0xPQUQ9MAorQ1RfVVNFX1BJUEVTPXkKK0NUX0VYVFJBX0ZMQUdTX0ZPUl9IT1NUPSIiCitDVF9DT05GSUdfU0hFTExfU0g9eQorIyBDVF9DT05GSUdfU0hFTExfQVNIIGlzIG5vdCBzZXQKKyMgQ1RfQ09ORklHX1NIRUxMX0JBU0ggaXMgbm90IHNldAorIyBDVF9DT05GSUdfU0hFTExfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTD0iL2Jpbi9zaCIKKworIworIyBMb2dnaW5nCisjCisjIENUX0xPR19FUlJPUiBpcyBub3Qgc2V0CisjIENUX0xPR19XQVJOIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0lORk8gaXMgbm90IHNldAorQ1RfTE9HX0VYVFJBPXkKKyMgQ1RfTE9HX0FMTCBpcyBub3Qgc2V0CisjIENUX0xPR19ERUJVRyBpcyBub3Qgc2V0CitDVF9MT0dfTEVWRUxfTUFYPSJFWFRSQSIKKyMgQ1RfTE9HX1NFRV9UT09MU19XQVJOIGlzIG5vdCBzZXQKK0NUX0xPR19QUk9HUkVTU19CQVI9eQorQ1RfTE9HX1RPX0ZJTEU9eQorQ1RfTE9HX0ZJTEVfQ09NUFJFU1M9eQorCisjCisjIFRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIPSJhdnIzMiIKK0NUX0FSQ0hfU1VQUE9SVFNfMzI9eQorQ1RfQVJDSF9TVVBQT1JUX0FSQ0g9eQorQ1RfQVJDSF9TVVBQT1JUX0NQVT15CitDVF9BUkNIX1NVUFBPUlRfVFVORT15CitDVF9BUkNIX1NVUFBPUlRfRlBVPXkKK0NUX0FSQ0hfREVGQVVMVF9CRT15CitDVF9BUkNIX0RFRkFVTFRfMzI9eQorQ1RfQVJDSF9BUkNIPSIiCitDVF9BUkNIX0NQVT0iIgorQ1RfQVJDSF9UVU5FPSIiCitDVF9BUkNIX0ZQVT0iIgorQ1RfQVJDSF8zMj15CitDVF9BUkNIX0JJVE5FU1M9MzIKKyMgQ1RfQVJDSF9GTE9BVF9IVyBpcyBub3Qgc2V0CitDVF9BUkNIX0ZMT0FUX1NXPXkKK0NUX1RBUkdFVF9DRkxBR1M9IiIKK0NUX1RBUkdFVF9MREZMQUdTPSIiCisjIENUX0FSQ0hfYWxwaGEgaXMgbm90IHNldAorIyBDVF9BUkNIX2FybSBpcyBub3Qgc2V0CitDVF9BUkNIX2F2cjMyPXkKKyMgQ1RfQVJDSF9ibGFja2ZpbiBpcyBub3Qgc2V0CisjIENUX0FSQ0hfbTY4ayBpcyBub3Qgc2V0CisjIENUX0FSQ0hfbWlwcyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfcG93ZXJwYyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfczM5MCBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc2ggaXMgbm90IHNldAorIyBDVF9BUkNIX3NwYXJjIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF94ODYgaXMgbm90IHNldAorQ1RfQVJDSF9hbHBoYV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hcm1fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXZyMzJfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYmxhY2tmaW5fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbTY4a19BVkFJTEFCTEU9eQorQ1RfQVJDSF9taXBzX0FWQUlMQUJMRT15CitDVF9BUkNIX3Bvd2VycGNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfczM5MF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zaF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zcGFyY19BVkFJTEFCTEU9eQorQ1RfQVJDSF94ODZfQVZBSUxBQkxFPXkKKworIworIyBHZW5lcmljIHRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIX1VTRV9NTVU9eQorCisjCisjIFRhcmdldCBvcHRpbWlzYXRpb25zCisjCisKKyMKKyMgVG9vbGNoYWluIG9wdGlvbnMKKyMKKworIworIyBHZW5lcmFsIHRvb2xjaGFpbiBvcHRpb25zCisjCitDVF9GT1JDRV9TWVNST09UPXkKK0NUX1VTRV9TWVNST09UPXkKK0NUX1NZU1JPT1RfTkFNRT0ic3lzcm9vdCIKK0NUX1NZU1JPT1RfRElSX1BSRUZJWD0iIgorIyBDVF9TVEFUSUNfVE9PTENIQUlOIGlzIG5vdCBzZXQKK0NUX1RPT0xDSEFJTl9QS0dWRVJTSU9OPSIiCitDVF9UT09MQ0hBSU5fQlVHVVJMPSIiCisKKyMKKyMgVHVwbGUgY29tcGxldGlvbiBhbmQgYWxpYXNpbmcKKyMKK0NUX1RBUkdFVF9WRU5ET1I9InVua25vd24iCitDVF9UQVJHRVRfQUxJQVNfU0VEX0VYUFI9IiIKK0NUX1RBUkdFVF9BTElBUz0iIgorCisjCisjIFRvb2xjaGFpbiB0eXBlCisjCisjIENUX05BVElWRSBpcyBub3Qgc2V0CitDVF9DUk9TUz15CisjIENUX0NST1NTX05BVElWRSBpcyBub3Qgc2V0CisjIENUX0NBTkFESUFOIGlzIG5vdCBzZXQKK0NUX1RPT0xDSEFJTl9UWVBFPSJjcm9zcyIKKworIworIyBCdWlsZCBzeXN0ZW0KKyMKK0NUX0JVSUxEPSIiCitDVF9CVUlMRF9QUkVGSVg9IiIKK0NUX0JVSUxEX1NVRkZJWD0iIgorCisjCisjIE9wZXJhdGluZyBTeXN0ZW0KKyMKK0NUX0JBUkVfTUVUQUw9eQorQ1RfS0VSTkVMPSJiYXJlLW1ldGFsIgorQ1RfS0VSTkVMX2JhcmVfbWV0YWw9eQorIyBDVF9LRVJORUxfbGludXggaXMgbm90IHNldAorQ1RfS0VSTkVMX2JhcmVfbWV0YWxfQVZBSUxBQkxFPXkKK0NUX0tFUk5FTF9saW51eF9BVkFJTEFCTEU9eQorQ1RfS0VSTkVMX21pbmd3MzJfQVZBSUxBQkxFPXkKKworIworIyBDb21tb24ga2VybmVsIG9wdGlvbnMKKyMKKworIworIyBCaW5hcnkgdXRpbGl0aWVzCisjCitDVF9BUkNIX0JJTkZNVF9FTEY9eQorCisjCisjIEdOVSBiaW51dGlscworIworIyBDVF9CSU5VVElMU19WXzJfMjFfNTMgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19WXzJfMjFfMWEgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19WXzJfMjBfMWEgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19WXzJfMTlfMWEgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVl8yXzE4YT15CitDVF9CSU5VVElMU19WRVJTSU9OPSIyLjE4YSIKK0NUX0JJTlVUSUxTXzJfMThfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0JJTlVUSUxTX0xJTktFUl9MRD15CitDVF9CSU5VVElMU19MSU5LRVJTX0xJU1Q9ImxkIgorQ1RfQklOVVRJTFNfTElOS0VSX0RFRkFVTFQ9ImJmZCIKK0NUX0JJTlVUSUxTX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorCisjCisjIEMgY29tcGlsZXIKKyMKK0NUX0NDPSJnY2MiCitDVF9DQ19WRVJTSU9OPSI0LjIuMiIKK0NUX0NDX2djYz15CisjIENUX0NDX0dDQ19TSE9XX0xJTkFSTyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF82XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNl8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF81XzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzYgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF81IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzMgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8yIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM182IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfMl80IGlzIG5vdCBzZXQKK0NUX0NDX1ZfNF8yXzI9eQorQ1RfQ0NfR0NDXzRfMj15CitDVF9DQ19HQ0NfNF8yX29yX2xhdGVyPXkKK0NUX0NDX1NVUFBPUlRfQ1hYPXkKK0NUX0NDX1NVUFBPUlRfRk9SVFJBTj15CitDVF9DQ19TVVBQT1JUX0pBVkE9eQorQ1RfQ0NfU1VQUE9SVF9BREE9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDPXkKK0NUX0NDX1NVUFBPUlRfT0JKQ1hYPXkKKworIworIyBBZGRpdGlvbmFsIHN1cHBvcnRlZCBsYW5ndWFnZXM6CisjCisjIENUX0NDX0xBTkdfQ1hYIGlzIG5vdCBzZXQKKworIworIyBnY2Mgb3RoZXIgb3B0aW9ucworIworQ1RfQ0NfRU5BQkxFX0NYWF9GTEFHUz0iIgorQ1RfQ0NfQ09SRV9FWFRSQV9DT05GSUdfQVJSQVk9IiIKKworIworIyBPcHRpbWlzYXRpb24gZmVhdHVyZXMKKyMKKworIworIyBTZXR0aW5ncyBmb3IgbGlicmFyaWVzIHJ1bm5pbmcgb24gdGFyZ2V0CisjCitDVF9DQ19HQ0NfRU5BQkxFX1RBUkdFVF9PUFRTUEFDRT15CisjIENUX0NDX0dDQ19MSUJNVURGTEFQIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQkdPTVAgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCU1NQIGlzIG5vdCBzZXQKKworIworIyBNaXNjLiBvYnNjdXJlIG9wdGlvbnMuCisjCisjIENUX0NDX0dDQ19ESVNBQkxFX1BDSCBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfTERCTF8xMjg9bQorCisjCisjIEMtbGlicmFyeQorIworQ1RfTElCQz0ibmV3bGliIgorQ1RfTElCQ19WRVJTSU9OPSIxLjE3LjAiCitDVF9MSUJDX25ld2xpYj15CisjIENUX0xJQkNfbm9uZSBpcyBub3Qgc2V0CitDVF9MSUJDX2VnbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19nbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19taW5nd19BVkFJTEFCTEU9eQorQ1RfTElCQ19uZXdsaWJfQVZBSUxBQkxFPXkKKyMgQ1RfTElCQ19ORVdMSUJfVl8xXzE5XzAgaXMgbm90IHNldAorIyBDVF9MSUJDX05FV0xJQl9WXzFfMThfMCBpcyBub3Qgc2V0CitDVF9MSUJDX05FV0xJQl9WXzFfMTdfMD15CisjIENUX0xJQkNfTkVXTElCX0NWUyBpcyBub3Qgc2V0CisKKyMKKyMgQXJjaGl0ZWN0dXJlIHNwZWNpZmljIG9wdGlvbnMKKyMKK0NUX0FUTUVMX0FWUjMyX0hFQURFUlM9eQorQ1RfTElCQ19ub25lX0FWQUlMQUJMRT15CitDVF9MSUJDX3VDbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19TVVBQT1JUX1RIUkVBRFNfTk9ORT15CitDVF9USFJFQURTPSJub25lIgorCisjCisjIENvbW1vbiBDIGxpYnJhcnkgb3B0aW9ucworIworQ1RfVEhSRUFEU19OT05FPXkKKworIworIyBuZXdsaWIgb3RoZXIgb3B0aW9ucworIworIyBDVF9MSUJDX05FV0xJQl9JT19DOTlGTVQgaXMgbm90IHNldAorIyBDVF9MSUJDX05FV0xJQl9JT19MTCBpcyBub3Qgc2V0CisjIENUX0xJQkNfTkVXTElCX0lPX0ZMT0FUIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19ORVdMSUJfRElTQUJMRV9TVVBQTElFRF9TWVNDQUxMUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVidWcgZmFjaWxpdGllcworIworIyBDVF9ERUJVR19kbWFsbG9jIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfZHVtYSBpcyBub3Qgc2V0CisjIENUX0RFQlVHX2dkYiBpcyBub3Qgc2V0CisjIENUX0RFQlVHX2x0cmFjZSBpcyBub3Qgc2V0CisjIENUX0RFQlVHX3N0cmFjZSBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcGFuaW9uIGxpYnJhcmllcworIworCisjCisjIENvbXBhbmlvbiB0b29scworIworCisjCisjIFJFQUQgSEVMUCBiZWZvcmUgeW91IHNheSAnWScgYmVsb3cgISEhCisjCisjIENUX0NPTVBfVE9PTFMgaXMgbm90IHNldAorCisjCisjIFRlc3Qgc3VpdGUKKyMKKyMgQ1RfVEVTVF9TVUlURV9HQ0MgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2F2cjMyLXVua25vd24tbm9uZS9yZXBvcnRlZC5ieSBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hdnIzMi11bmtub3duLW5vbmUvcmVwb3J0ZWQuYnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMyZjVjMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9hdnIzMi11bmtub3duLW5vbmUvcmVwb3J0ZWQuYnkKQEAgLTAsMCArMSwzIEBACityZXBvcnRlcl9uYW1lPSJNYXJ0aW4gTHVuZCIKK3JlcG9ydGVyX3VybD0iaHR0cDovL3d3dy5kb3JlZGV2ZWxvcG1lbnQuZGsiCityZXBvcnRlcl9jb21tZW50PSIiCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYmZpbi11bmtub3duLWxpbnV4LXVjbGliYy9jcm9zc3Rvb2wuY29uZmlnIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2JmaW4tdW5rbm93bi1saW51eC11Y2xpYmMvY3Jvc3N0b29sLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWUyYzk3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2JmaW4tdW5rbm93bi1saW51eC11Y2xpYmMvY3Jvc3N0b29sLmNvbmZpZwpAQCAtMCwwICsxLDM4NCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBjcm9zc3Rvb2wtTkcgaGdfZGVmYXVsdEAyNzIxXzdiNjQ3NDZiMGFiMyBDb25maWd1cmF0aW9uCisjIFN1biBPY3QgMTYgMTc6MjU6MzQgMjAxMQorIworQ1RfQ09ORklHVVJFX2hhc194enV0aWxzPXkKK0NUX0NPTkZJR1VSRV9oYXNfY3ZzPXkKK0NUX0NPTkZJR1VSRV9oYXNfc3ZuPXkKK0NUX01PRFVMRVM9eQorCisjCisjIFBhdGhzIGFuZCBtaXNjIG9wdGlvbnMKKyMKKworIworIyBjcm9zc3Rvb2wtTkcgYmVoYXZpb3IKKyMKKyMgQ1RfT0JTT0xFVEUgaXMgbm90IHNldAorIyBDVF9FWFBFUklNRU5UQUwgaXMgbm90IHNldAorIyBDVF9ERUJVR19DVCBpcyBub3Qgc2V0CisKKyMKKyMgUGF0aHMKKyMKK0NUX0xPQ0FMX1RBUkJBTExTX0RJUj0iJHtIT01FfS9zcmMiCitDVF9TQVZFX1RBUkJBTExTPXkKK0NUX1dPUktfRElSPSIke0NUX1RPUF9ESVJ9Ly5idWlsZCIKK0NUX1BSRUZJWF9ESVI9IiR7SE9NRX0veC10b29scy8ke0NUX1RBUkdFVH0iCitDVF9JTlNUQUxMX0RJUj0iJHtDVF9QUkVGSVhfRElSfSIKK0NUX1JNX1JGX1BSRUZJWF9ESVI9eQorQ1RfUkVNT1ZFX0RPQ1M9eQorQ1RfSU5TVEFMTF9ESVJfUk89eQorQ1RfU1RSSVBfQUxMX1RPT0xDSEFJTl9FWEVDVVRBQkxFUz15CisKKyMKKyMgRG93bmxvYWRpbmcKKyMKKyMgQ1RfRk9SQklEX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfRk9SQ0VfRE9XTkxPQUQgaXMgbm90IHNldAorQ1RfQ09OTkVDVF9USU1FT1VUPTEwCisjIENUX09OTFlfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9VU0VfTUlSUk9SIGlzIG5vdCBzZXQKKworIworIyBFeHRyYWN0aW5nCisjCisjIENUX0ZPUkNFX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfT1ZFUklERV9DT05GSUdfR1VFU1NfU1VCPXkKKyMgQ1RfT05MWV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX1BBVENIX0JVTkRMRUQ9eQorIyBDVF9QQVRDSF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9GQUxMQkFDS19MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0ZBTExCQUNLX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9OT05FIGlzIG5vdCBzZXQKK0NUX1BBVENIX09SREVSPSJidW5kbGVkIgorCisjCisjIEJ1aWxkIGJlaGF2aW9yCisjCitDVF9QQVJBTExFTF9KT0JTPTAKK0NUX0xPQUQ9MAorQ1RfVVNFX1BJUEVTPXkKK0NUX0VYVFJBX0ZMQUdTX0ZPUl9IT1NUPSIiCisjIENUX0NPTkZJR19TSEVMTF9TSCBpcyBub3Qgc2V0CisjIENUX0NPTkZJR19TSEVMTF9BU0ggaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMX0JBU0g9eQorIyBDVF9DT05GSUdfU0hFTExfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTD0iJHtiYXNofSIKKworIworIyBMb2dnaW5nCisjCisjIENUX0xPR19FUlJPUiBpcyBub3Qgc2V0CisjIENUX0xPR19XQVJOIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0lORk8gaXMgbm90IHNldAorQ1RfTE9HX0VYVFJBPXkKKyMgQ1RfTE9HX0FMTCBpcyBub3Qgc2V0CisjIENUX0xPR19ERUJVRyBpcyBub3Qgc2V0CitDVF9MT0dfTEVWRUxfTUFYPSJFWFRSQSIKKyMgQ1RfTE9HX1NFRV9UT09MU19XQVJOIGlzIG5vdCBzZXQKK0NUX0xPR19QUk9HUkVTU19CQVI9eQorQ1RfTE9HX1RPX0ZJTEU9eQorQ1RfTE9HX0ZJTEVfQ09NUFJFU1M9eQorCisjCisjIFRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIPSJibGFja2ZpbiIKK0NUX0FSQ0hfU1VQUE9SVFNfMzI9eQorQ1RfQVJDSF9TVVBQT1JUX0FSQ0g9eQorQ1RfQVJDSF9TVVBQT1JUX0NQVT15CitDVF9BUkNIX1NVUFBPUlRfVFVORT15CitDVF9BUkNIX1NVUFBPUlRfRlBVPXkKK0NUX0FSQ0hfREVGQVVMVF9MRT15CitDVF9BUkNIX0RFRkFVTFRfMzI9eQorQ1RfQVJDSF9BUkNIPSIiCitDVF9BUkNIX0NQVT0iIgorQ1RfQVJDSF9UVU5FPSIiCitDVF9BUkNIX0ZQVT0iIgorQ1RfQVJDSF8zMj15CitDVF9BUkNIX0JJVE5FU1M9MzIKK0NUX0FSQ0hfRkxPQVRfSFc9eQorIyBDVF9BUkNIX0ZMT0FUX1NXIGlzIG5vdCBzZXQKK0NUX1RBUkdFVF9DRkxBR1M9IiIKK0NUX1RBUkdFVF9MREZMQUdTPSIiCisjIENUX0FSQ0hfYWxwaGEgaXMgbm90IHNldAorIyBDVF9BUkNIX2FybSBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYXZyMzIgaXMgbm90IHNldAorQ1RfQVJDSF9ibGFja2Zpbj15CisjIENUX0FSQ0hfbWlwcyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfcG93ZXJwYyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc2ggaXMgbm90IHNldAorIyBDVF9BUkNIX3NwYXJjIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF94ODYgaXMgbm90IHNldAorQ1RfQVJDSF9hbHBoYV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hcm1fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXZyMzJfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYmxhY2tmaW5fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbTY4a19BVkFJTEFCTEU9eQorQ1RfQVJDSF9taXBzX0FWQUlMQUJMRT15CitDVF9BUkNIX3Bvd2VycGNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfczM5MF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zaF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zcGFyY19BVkFJTEFCTEU9eQorQ1RfQVJDSF94ODZfQVZBSUxBQkxFPXkKKworIworIyBHZW5lcmljIHRhcmdldCBvcHRpb25zCisjCisKKyMKKyMgVGFyZ2V0IG9wdGltaXNhdGlvbnMKKyMKKworIworIyBUb29sY2hhaW4gb3B0aW9ucworIworCisjCisjIEdlbmVyYWwgdG9vbGNoYWluIG9wdGlvbnMKKyMKK0NUX0ZPUkNFX1NZU1JPT1Q9eQorQ1RfVVNFX1NZU1JPT1Q9eQorQ1RfU1lTUk9PVF9OQU1FPSJzeXNyb290IgorQ1RfU1lTUk9PVF9ESVJfUFJFRklYPSIiCitDVF9UT09MQ0hBSU5fUEtHVkVSU0lPTj0iIgorQ1RfVE9PTENIQUlOX0JVR1VSTD0iIgorCisjCisjIFR1cGxlIGNvbXBsZXRpb24gYW5kIGFsaWFzaW5nCisjCitDVF9UQVJHRVRfVkVORE9SPSJ1bmtub3duIgorQ1RfVEFSR0VUX0FMSUFTX1NFRF9FWFBSPSIiCitDVF9UQVJHRVRfQUxJQVM9IiIKKworIworIyBUb29sY2hhaW4gdHlwZQorIworQ1RfQ1JPU1M9eQorQ1RfVE9PTENIQUlOX1RZUEU9ImNyb3NzIgorCisjCisjIEJ1aWxkIHN5c3RlbQorIworQ1RfQlVJTEQ9IiIKK0NUX0JVSUxEX1BSRUZJWD0iIgorQ1RfQlVJTERfU1VGRklYPSIiCisKKyMKKyMgT3BlcmF0aW5nIFN5c3RlbQorIworQ1RfS0VSTkVMX1NVUFBPUlRTX1NIQVJFRF9MSUJTPXkKK0NUX0tFUk5FTD0ibGludXgiCitDVF9LRVJORUxfVkVSU0lPTj0iMi42LjMzLjE5IgorIyBDVF9LRVJORUxfYmFyZV9tZXRhbCBpcyBub3Qgc2V0CitDVF9LRVJORUxfbGludXg9eQorQ1RfS0VSTkVMX2JhcmVfbWV0YWxfQVZBSUxBQkxFPXkKK0NUX0tFUk5FTF9saW51eF9BVkFJTEFCTEU9eQorIyBDVF9LRVJORUxfVl8zXzBfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8zIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzIgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zOV80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM4XzggaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzdfNiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNl80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM1XzE0IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM0XzEwIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9WXzJfNl8zM18xOT15CisjIENUX0tFUk5FTF9WXzJfNl8zMl80NiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zMV8xNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8yN181OSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9MSU5VWF9DVVNUT00gaXMgbm90IHNldAorQ1RfS0VSTkVMX21pbmd3MzJfQVZBSUxBQkxFPXkKKworIworIyBDb21tb24ga2VybmVsIG9wdGlvbnMKKyMKK0NUX1NIQVJFRF9MSUJTPXkKKworIworIyBsaW51eCBvdGhlciBvcHRpb25zCisjCitDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzA9eQorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzEgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzIgaXMgbm90IHNldAorQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0VfTEVWRUw9MAorQ1RfS0VSTkVMX0xJTlVYX0lOU1RBTExfQ0hFQ0s9eQorCisjCisjIEJpbmFyeSB1dGlsaXRpZXMKKyMKKyMgQ1RfQVJDSF9CSU5GTVRfRkxBVCBpcyBub3Qgc2V0CitDVF9BUkNIX0JJTkZNVF9GRFBJQz15CisKKyMKKyMgR05VIGJpbnV0aWxzCisjCisjIENUX0JJTlVUSUxTX1ZfMl8yMV8xYSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WXzJfMjBfMWE9eQorIyBDVF9CSU5VVElMU19WXzJfMTlfMWEgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19WXzJfMThhIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX1ZFUlNJT049IjIuMjAuMWEiCitDVF9CSU5VVElMU18yXzIwX29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMTlfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfMl8xOF9vcl9sYXRlcj15CitDVF9CSU5VVElMU19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQklOVVRJTFNfTElOS0VSX0xEPXkKK0NUX0JJTlVUSUxTX0xJTktFUlNfTElTVD0ibGQiCitDVF9CSU5VVElMU19MSU5LRVJfREVGQVVMVD0iYmZkIgorQ1RfQklOVVRJTFNfRVhUUkFfQ09ORklHX0FSUkFZPSIiCisjIENUX0JJTlVUSUxTX0ZPUl9UQVJHRVQgaXMgbm90IHNldAorCisjCisjIEMgY29tcGlsZXIKKyMKK0NUX0NDPSJnY2MiCitDVF9DQ19WRVJTSU9OPSI0LjMuNCIKK0NUX0NDX2djYz15CisjIENUX0NDX1ZfNF80XzYgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF81IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzMgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8yIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM182IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNSBpcyBub3Qgc2V0CitDVF9DQ19WXzRfM180PXkKKyMgQ1RfQ0NfVl80XzNfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8yXzIgaXMgbm90IHNldAorQ1RfQ0NfR0NDXzRfMl9vcl9sYXRlcj15CitDVF9DQ19HQ0NfNF8zPXkKK0NUX0NDX0dDQ180XzNfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9DQ19HQ0NfVVNFX0dNUF9NUEZSPXkKKyMgQ1RfQ0NfTEFOR19GT1JUUkFOIGlzIG5vdCBzZXQKK0NUX0NDX1NVUFBPUlRfQ1hYPXkKK0NUX0NDX1NVUFBPUlRfRk9SVFJBTj15CitDVF9DQ19TVVBQT1JUX0pBVkE9eQorQ1RfQ0NfU1VQUE9SVF9BREE9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDPXkKK0NUX0NDX1NVUFBPUlRfT0JKQ1hYPXkKKworIworIyBBZGRpdGlvbmFsIHN1cHBvcnRlZCBsYW5ndWFnZXM6CisjCisjIENUX0NDX0xBTkdfQ1hYIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfTEFOR19KQVZBIGlzIG5vdCBzZXQKKworIworIyBnY2Mgb3RoZXIgb3B0aW9ucworIworQ1RfQ0NfRU5BQkxFX0NYWF9GTEFHUz0iIgorQ1RfQ0NfQ09SRV9FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0NDX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorCisjCisjIE9wdGltaXNhdGlvbiBmZWF0dXJlcworIworCisjCisjIFNldHRpbmdzIGZvciBsaWJyYXJpZXMgcnVubmluZyBvbiB0YXJnZXQKKyMKK0NUX0NDX0dDQ19FTkFCTEVfVEFSR0VUX09QVFNQQUNFPXkKKyMgQ1RfQ0NfR0NDX0xJQk1VREZMQVAgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCR09NUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJTU1AgaXMgbm90IHNldAorCisjCisjIE1pc2MuIG9ic2N1cmUgb3B0aW9ucy4KKyMKK0NUX0NDX0NYQV9BVEVYSVQ9eQorIyBDVF9DQ19HQ0NfRElTQUJMRV9QQ0ggaXMgbm90IHNldAorQ1RfQ0NfR0NDX1NKTEpfRVhDRVBUSU9OUz1tCitDVF9DQ19HQ0NfTERCTF8xMjg9bQorCisjCisjIEMtbGlicmFyeQorIworQ1RfTElCQz0idUNsaWJjIgorQ1RfTElCQ19WRVJTSU9OPSIwLjkuMzAuMiIKK0NUX0xJQkNfdUNsaWJjPXkKK0NUX0xJQkNfZWdsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX2dsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX21pbmd3X0FWQUlMQUJMRT15CitDVF9MSUJDX25ld2xpYl9BVkFJTEFCTEU9eQorQ1RfTElCQ19ub25lX0FWQUlMQUJMRT15CitDVF9MSUJDX3VDbGliY19BVkFJTEFCTEU9eQorIyBDVF9MSUJDX1VDTElCQ19WXzBfOV8zMiBpcyBub3Qgc2V0CisjIENUX0xJQkNfVUNMSUJDX1ZfMF85XzMwXzMgaXMgbm90IHNldAorQ1RfTElCQ19VQ0xJQkNfVl8wXzlfMzBfMj15CisjIENUX0xJQkNfVUNMSUJDX1ZfMF85XzMwXzEgaXMgbm90IHNldAorIyBDVF9MSUJDX1VDTElCQ19WXzBfOV8zMCBpcyBub3Qgc2V0CitDVF9MSUJDX1VDTElCQ18wXzlfMzBfb3JfbGF0ZXI9eQorQ1RfTElCQ19VQ0xJQkNfUEFSQUxMRUw9eQorQ1RfTElCQ19VQ0xJQkNfVkVSQk9TSVRZXzA9eQorIyBDVF9MSUJDX1VDTElCQ19WRVJCT1NJVFlfMSBpcyBub3Qgc2V0CisjIENUX0xJQkNfVUNMSUJDX1ZFUkJPU0lUWV8yIGlzIG5vdCBzZXQKK0NUX0xJQkNfVUNMSUJDX1ZFUkJPU0lUWT0iIgorQ1RfTElCQ19VQ0xJQkNfREVCVUdfTEVWRUxfMD15CisjIENUX0xJQkNfVUNMSUJDX0RFQlVHX0xFVkVMXzEgaXMgbm90IHNldAorIyBDVF9MSUJDX1VDTElCQ19ERUJVR19MRVZFTF8yIGlzIG5vdCBzZXQKK0NUX0xJQkNfVUNMSUJDX0RFQlVHX0xFVkVMPTAKK0NUX0xJQkNfVUNMSUJDX0NPTkZJR19GSUxFPSIke0NUX0xJQl9ESVJ9L3NhbXBsZXMvJHtDVF9UQVJHRVR9LyR7Q1RfTElCQ30tJHtDVF9MSUJDX1ZFUlNJT059LmNvbmZpZyIKK0NUX0xJQkNfU1VQUE9SVF9USFJFQURTX0FOWT15CitDVF9MSUJDX1NVUFBPUlRfTElOVVhUSFJFQURTPXkKK0NUX0xJQkNfU1VQUE9SVF9USFJFQURTX05PTkU9eQorQ1RfVEhSRUFEUz0ibGludXh0aHJlYWRzIgorCisjCisjIENvbW1vbiBDIGxpYnJhcnkgb3B0aW9ucworIworQ1RfVEhSRUFEU19MSU5VWFRIUkVBRFM9eQorIyBDVF9USFJFQURTX05PTkUgaXMgbm90IHNldAorQ1RfTElCQ19YTEREPXkKKworIworIyB1Q2xpYmMgb3RoZXIgb3B0aW9ucworIworQ1RfTElCQ19VQ0xJQkNfTE5YVEhSRF9PTEQ9eQorIyBDVF9MSUJDX1VDTElCQ19MTlhUSFJEX05FVyBpcyBub3Qgc2V0CitDVF9MSUJDX1VDTElCQ19MTlhUSFJEPSJvbGQiCisjIENUX0xJQkNfVUNMSUJDX0xPQ0FMRVMgaXMgbm90IHNldAorIyBDVF9MSUJDX1VDTElCQ19XQ0hBUiBpcyBub3Qgc2V0CisKKyMKKyMgRGVidWcgZmFjaWxpdGllcworIworIyBDVF9ERUJVR19kbWFsbG9jIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfZHVtYSBpcyBub3Qgc2V0CisjIENUX0RFQlVHX2dkYiBpcyBub3Qgc2V0CisjIENUX0RFQlVHX2x0cmFjZSBpcyBub3Qgc2V0CisjIENUX0RFQlVHX3N0cmFjZSBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcGFuaW9uIGxpYnJhcmllcworIworQ1RfQ09NUExJQlNfTkVFREVEPXkKK0NUX0dNUF9ORUVERUQ9eQorQ1RfTVBGUl9ORUVERUQ9eQorQ1RfQ09NUExJQlM9eQorQ1RfR01QPXkKK0NUX01QRlI9eQorQ1RfR01QX1ZfNF8zXzI9eQorIyBDVF9HTVBfVl80XzNfMSBpcyBub3Qgc2V0CisjIENUX0dNUF9WXzRfM18wIGlzIG5vdCBzZXQKK0NUX0dNUF9WRVJTSU9OPSI0LjMuMiIKKyMgQ1RfTVBGUl9WXzNfMF8wIGlzIG5vdCBzZXQKK0NUX01QRlJfVl8yXzRfMj15CisjIENUX01QRlJfVl8yXzRfMSBpcyBub3Qgc2V0CisjIENUX01QRlJfVl8yXzRfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZFUlNJT049IjIuNC4yIgorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMgY29tbW9uIG9wdGlvbnMKKyMKKyMgQ1RfQ09NUExJQlNfQ0hFQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2JmaW4tdW5rbm93bi1saW51eC11Y2xpYmMvcmVwb3J0ZWQuYnkgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYmZpbi11bmtub3duLWxpbnV4LXVjbGliYy9yZXBvcnRlZC5ieQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTU0ZDMzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2JmaW4tdW5rbm93bi1saW51eC11Y2xpYmMvcmVwb3J0ZWQuYnkKQEAgLTAsMCArMSwzIEBACityZXBvcnRlcl9uYW1lPSJUaG9tYXMgUGV0YXp6b25pIgorcmVwb3J0ZXJfdXJsPSJodHRwOi8vd3d3LmZyZWUtZWxlY3Ryb25zLmNvbS8iCityZXBvcnRlcl9jb21tZW50PSJWZXJ5IGJhc2ljIHRlc3Rpbmcgb25seSIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9iZmluLXVua25vd24tbGludXgtdWNsaWJjL3VDbGliYy0wLjkuMzAuMi5jb25maWcgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYmZpbi11bmtub3duLWxpbnV4LXVjbGliYy91Q2xpYmMtMC45LjMwLjIuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1N2M4NjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvYmZpbi11bmtub3duLWxpbnV4LXVjbGliYy91Q2xpYmMtMC45LjMwLjIuY29uZmlnCkBAIC0wLDAgKzEsMjI1IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIFZlcnNpb246IDAuOS4zMC4yCisjIFR1ZSBBcHIgIDYgMTY6NDc6MzIgMjAxMAorIworIyBUQVJHRVRfYWxwaGEgaXMgbm90IHNldAorIyBUQVJHRVRfYXJtIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2F2cjMyIGlzIG5vdCBzZXQKK1RBUkdFVF9iZmluPXkKKyMgVEFSR0VUX2NyaXMgaXMgbm90IHNldAorIyBUQVJHRVRfZTEgaXMgbm90IHNldAorIyBUQVJHRVRfZnJ2IGlzIG5vdCBzZXQKKyMgVEFSR0VUX2g4MzAwIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2hwcGEgaXMgbm90IHNldAorIyBUQVJHRVRfaTM4NiBpcyBub3Qgc2V0CisjIFRBUkdFVF9pOTYwIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2lhNjQgaXMgbm90IHNldAorIyBUQVJHRVRfbTY4ayBpcyBub3Qgc2V0CisjIFRBUkdFVF9taWNyb2JsYXplIGlzIG5vdCBzZXQKKyMgVEFSR0VUX21pcHMgaXMgbm90IHNldAorIyBUQVJHRVRfbmlvcyBpcyBub3Qgc2V0CisjIFRBUkdFVF9uaW9zMiBpcyBub3Qgc2V0CisjIFRBUkdFVF9wb3dlcnBjIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3NoIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3NoNjQgaXMgbm90IHNldAorIyBUQVJHRVRfc3BhcmMgaXMgbm90IHNldAorIyBUQVJHRVRfdjg1MCBpcyBub3Qgc2V0CisjIFRBUkdFVF92YXggaXMgbm90IHNldAorIyBUQVJHRVRfeDg2XzY0IGlzIG5vdCBzZXQKKyMgVEFSR0VUX3h0ZW5zYSBpcyBub3Qgc2V0CisKKyMKKyMgVGFyZ2V0IEFyY2hpdGVjdHVyZSBGZWF0dXJlcyBhbmQgT3B0aW9ucworIworVEFSR0VUX0FSQ0g9ImJmaW4iCitGT1JDRV9PUFRJT05TX0ZPUl9BUkNIPXkKK1RBUkdFVF9TVUJBUkNIPSIiCisjIFVDTElCQ19GT1JNQVRfRUxGIGlzIG5vdCBzZXQKK1VDTElCQ19GT1JNQVRfRkRQSUNfRUxGPXkKKyMgVUNMSUJDX0ZPUk1BVF9GTEFUIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0ZPUk1BVF9GTEFUX1NFUF9EQVRBIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0ZPUk1BVF9TSEFSRURfRkxBVCBpcyBub3Qgc2V0CitBUkNIX0xJVFRMRV9FTkRJQU49eQorCisjCisjIFVzaW5nIExpdHRsZSBFbmRpYW4KKyMKK0FSQ0hfSEFTX05PX01NVT15CisKKyMKKyMgVGFyZ2V0IENQVSBsYWNrcyBhIG1lbW9yeSBtYW5hZ2VtZW50IHVuaXQgKE1NVSkKKyMKK1VDTElCQ19IQVNfRkxPQVRTPXkKK1VDTElCQ19IQVNfRlBVPXkKK0RPX0M5OV9NQVRIPXkKKyMgVUNMSUJDX0hBU19GRU5WIGlzIG5vdCBzZXQKK0tFUk5FTF9IRUFERVJTPSIvdXNyL2luY2x1ZGUiCitVQ0xJQkNfVUNMSU5VWF9CUk9LRU5fTVVOTUFQPXkKK0hBVkVfRE9UX0NPTkZJRz15CisKKyMKKyMgR2VuZXJhbCBMaWJyYXJ5IFNldHRpbmdzCisjCisjIEhBVkVfTk9fUElDIGlzIG5vdCBzZXQKK0RPUElDPXkKKyMgQVJDSF9IQVNfTk9fU0hBUkVEIGlzIG5vdCBzZXQKKyMgQVJDSF9IQVNfTk9fTERTTyBpcyBub3Qgc2V0CitIQVZFX1NIQVJFRD15CitGT1JDRV9TSEFSRUFCTEVfVEVYVF9TRUdNRU5UUz15CitMRFNPX0xERF9TVVBQT1JUPXkKK0xEU09fQ0FDSEVfU1VQUE9SVD15CisjIExEU09fUFJFTE9BRF9GSUxFX1NVUFBPUlQgaXMgbm90IHNldAorTERTT19CQVNFX0ZJTEVOQU1FPSJsZC5zbyIKK1VDTElCQ19TVEFUSUNfTERDT05GSUc9eQorIyBMRFNPX1JVTlBBVEggaXMgbm90IHNldAorVUNMSUJDX0NUT1JfRFRPUj15CisjIExEU09fR05VX0hBU0hfU1VQUE9SVCBpcyBub3Qgc2V0CisjIEhBU19OT19USFJFQURTIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfVEhSRUFEUz15CitQVEhSRUFEU19ERUJVR19TVVBQT1JUPXkKK0xJTlVYVEhSRUFEU19PTEQ9eQorVUNMSUJDX0hBU19TWVNMT0c9eQorVUNMSUJDX0hBU19MRlM9eQorTUFMTE9DPXkKKyMgTUFMTE9DX1NJTVBMRSBpcyBub3Qgc2V0CisjIE1BTExPQ19TVEFOREFSRCBpcyBub3Qgc2V0CisjIE1BTExPQ19HTElCQ19DT01QQVQgaXMgbm90IHNldAorVUNMSUJDX0RZTkFNSUNfQVRFWElUPXkKKyMgQ09NUEFUX0FURVhJVCBpcyBub3Qgc2V0CitVQ0xJQkNfU1VTVjNfTEVHQUNZPXkKK1VDTElCQ19TVVNWM19MRUdBQ1lfTUFDUk9TPXkKKyMgVUNMSUJDX0hBU19TVFVCUyBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU0hBRE9XIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfUFJPR1JBTV9JTlZPQ0FUSU9OX05BTUU9eQorVUNMSUJDX0hBU19fX1BST0dOQU1FPXkKK1VDTElCQ19IQVNfUFRZPXkKK0FTU1VNRV9ERVZQVFM9eQorVU5JWDk4UFRZX09OTFk9eQorIyBVQ0xJQkNfSEFTX0dFVFBUIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfVE1fRVhURU5TSU9OUz15CisjIFVDTElCQ19IQVNfVFpfQ0FDSElORyBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfVFpfRklMRSBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgTGlicmFyeSBTZXR0aW5ncworIworVUNMSUJDX1BXRF9CVUZGRVJfU0laRT0yNTYKK1VDTElCQ19HUlBfQlVGRkVSX1NJWkU9MjU2CisKKyMKKyMgU3VwcG9ydCB2YXJpb3VzIGZhbWlsaWVzIG9mIGZ1bmN0aW9ucworIworIyBVQ0xJQkNfTElOVVhfTU9EVUxFXzI0IGlzIG5vdCBzZXQKK1VDTElCQ19MSU5VWF9TUEVDSUZJQz15CitVQ0xJQkNfSEFTX0dOVV9FUlJPUj15CitVQ0xJQkNfQlNEX1NQRUNJRklDPXkKK1VDTElCQ19IQVNfQlNEX0VSUj15CitVQ0xJQkNfSEFTX09CU09MRVRFX0JTRF9TSUdOQUw9eQorIyBVQ0xJQkNfSEFTX09CU09MRVRFX1NZU1ZfU0lHTkFMIGlzIG5vdCBzZXQKKyMgVUNMSUJDX05UUF9MRUdBQ1kgaXMgbm90IHNldAorVUNMSUJDX1NWNF9ERVBSRUNBVEVEPXkKK1VDTElCQ19IQVNfUkVBTFRJTUU9eQorVUNMSUJDX0hBU19BRFZBTkNFRF9SRUFMVElNRT15CitVQ0xJQkNfSEFTX0VQT0xMPXkKK1VDTElCQ19IQVNfWEFUVFI9eQorVUNMSUJDX0hBU19QUk9GSUxJTkc9eQorVUNMSUJDX0hBU19DUllQVF9JTVBMPXkKK1VDTElCQ19IQVNfQ1JZUFQ9eQorVUNMSUJDX0hBU19ORVRXT1JLX1NVUFBPUlQ9eQorVUNMSUJDX0hBU19TT0NLRVQ9eQorVUNMSUJDX0hBU19JUFY0PXkKKyMgVUNMSUJDX0hBU19JUFY2IGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfUlBDPXkKK1VDTElCQ19IQVNfRlVMTF9SUEM9eQorVUNMSUJDX0hBU19SRUVOVFJBTlRfUlBDPXkKKyMgVUNMSUJDX1VTRV9ORVRMSU5LIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfQlNEX1JFU19DTE9TRT15CisKKyMKKyMgU3RyaW5nIGFuZCBTdGRpbyBTdXBwb3J0CisjCitVQ0xJQkNfSEFTX1NUUklOR19HRU5FUklDX09QVD15CitVQ0xJQkNfSEFTX1NUUklOR19BUkNIX09QVD15CitVQ0xJQkNfSEFTX0NUWVBFX1RBQkxFUz15CitVQ0xJQkNfSEFTX0NUWVBFX1NJR05FRD15CitVQ0xJQkNfSEFTX0NUWVBFX1VOU0FGRT15CisjIFVDTElCQ19IQVNfQ1RZUEVfQ0hFQ0tFRCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfQ1RZUEVfRU5GT1JDRUQgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1dDSEFSIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19MT0NBTEUgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0hFWEFERUNJTUFMX0ZMT0FUUyBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfR0xJQkNfQ1VTVE9NX1BSSU5URiBpcyBub3Qgc2V0CisjIFVTRV9PTERfVkZQUklOVEYgaXMgbm90IHNldAorVUNMSUJDX1BSSU5URl9TQ0FORl9QT1NJVElPTkFMX0FSR1M9OQorIyBVQ0xJQkNfSEFTX1NDQU5GX0dMSUJDX0FfRkxBRyBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laX05PTkUgaXMgbm90IHNldAorVUNMSUJDX0hBU19TVERJT19CVUZTSVpfMjU2PXkKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfNTEyIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfMTAyNCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzIwNDggaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl80MDk2IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfODE5MiBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NURElPX0JVSUxUSU5fQlVGRkVSX05PTkU9eQorIyBVQ0xJQkNfSEFTX1NURElPX0JVSUxUSU5fQlVGRkVSXzQgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVSUxUSU5fQlVGRkVSXzggaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX1NIVVRET1dOX09OX0FCT1JUIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfU1RESU9fR0VUQ19NQUNSTz15CitVQ0xJQkNfSEFTX1NURElPX1BVVENfTUFDUk89eQorVUNMSUJDX0hBU19TVERJT19BVVRPX1JXX1RSQU5TSVRJT049eQorIyBVQ0xJQkNfSEFTX0ZPUEVOX0xBUkdFRklMRV9NT0RFIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19GT1BFTl9FWENMVVNJVkVfTU9ERSBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfR0xJQkNfQ1VTVE9NX1NUUkVBTVMgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1BSSU5URl9NX1NQRUMgaXMgbm90IHNldAorVUNMSUJDX0hBU19FUlJOT19NRVNTQUdFUz15CisjIFVDTElCQ19IQVNfU1lTX0VSUkxJU1QgaXMgbm90IHNldAorVUNMSUJDX0hBU19TSUdOVU1fTUVTU0FHRVM9eQorIyBVQ0xJQkNfSEFTX1NZU19TSUdMSVNUIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfR05VX0dFVE9QVD15CitVQ0xJQkNfSEFTX0dOVV9HRVRTVUJPUFQ9eQorCisjCisjIEJpZyBhbmQgVGFsbAorIworVUNMSUJDX0hBU19SRUdFWD15CitVQ0xJQkNfSEFTX1JFR0VYX09MRD15CitVQ0xJQkNfSEFTX0ZOTUFUQ0g9eQorVUNMSUJDX0hBU19GTk1BVENIX09MRD15CisjIFVDTElCQ19IQVNfV09SREVYUCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfRlRXIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfR0xPQj15CisjIFVDTElCQ19IQVNfR05VX0dMT0IgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgSW5zdGFsbGF0aW9uIE9wdGlvbnMKKyMKK1NIQVJFRF9MSUJfTE9BREVSX1BSRUZJWD0iL2xpYiIKK1JVTlRJTUVfUFJFRklYPSIvIgorREVWRUxfUFJFRklYPSIvdXNyIgorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgVUNMSUJDX0hBU19BUkM0UkFORE9NIGlzIG5vdCBzZXQKKyMgSEFWRV9OT19TU1AgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NTUCBpcyBub3Qgc2V0CitVQ0xJQkNfQlVJTERfUkVMUk89eQorIyBVQ0xJQkNfQlVJTERfTk9XIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0JVSUxEX05PRVhFQ1NUQUNLIGlzIG5vdCBzZXQKKworIworIyB1Q2xpYmMgZGV2ZWxvcG1lbnQvZGVidWdnaW5nIG9wdGlvbnMKKyMKK0NST1NTX0NPTVBJTEVSX1BSRUZJWD0iYmZpbi1lbGYtIgorVUNMSUJDX0VYVFJBX0NGTEFHUz0iIgorIyBET0RFQlVHIGlzIG5vdCBzZXQKKyMgRE9ERUJVR19QVCBpcyBub3Qgc2V0CisjIERPU1RSSVAgaXMgbm90IHNldAorIyBET0FTU0VSVFMgaXMgbm90IHNldAorU1VQUE9SVF9MRF9ERUJVRz15CisjIFNVUFBPUlRfTERfREVCVUdfRUFSTFkgaXMgbm90IHNldAorIyBVQ0xJQkNfTUFMTE9DX0RFQlVHR0lORyBpcyBub3Qgc2V0CitXQVJOSU5HUz0iLVdhbGwiCisjIEVYVFJBX1dBUk5JTkdTIGlzIG5vdCBzZXQKKyMgRE9NVUxUSSBpcyBub3Qgc2V0CisjIFVDTElCQ19NSk4zX09OTFkgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2k1ODYtZ2VvZGUtbGludXgtdWNsaWJjL2Nyb3NzdG9vbC5jb25maWcgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvaTU4Ni1nZW9kZS1saW51eC11Y2xpYmMvY3Jvc3N0b29sLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDU1ZjQwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2k1ODYtZ2VvZGUtbGludXgtdWNsaWJjL2Nyb3NzdG9vbC5jb25maWcKQEAgLTAsMCArMSw0NDEgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgY3Jvc3N0b29sLU5HIGhnX2RlZmF1bHRAMjcyMV83YjY0NzQ2YjBhYjMgQ29uZmlndXJhdGlvbgorIyBTdW4gT2N0IDE2IDE3OjI2OjExIDIwMTEKKyMKK0NUX0NPTkZJR1VSRV9oYXNfeHp1dGlscz15CitDVF9DT05GSUdVUkVfaGFzX2N2cz15CitDVF9DT05GSUdVUkVfaGFzX3N2bj15CitDVF9NT0RVTEVTPXkKKworIworIyBQYXRocyBhbmQgbWlzYyBvcHRpb25zCisjCisKKyMKKyMgY3Jvc3N0b29sLU5HIGJlaGF2aW9yCisjCisjIENUX09CU09MRVRFIGlzIG5vdCBzZXQKKyMgQ1RfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfQ1QgaXMgbm90IHNldAorCisjCisjIFBhdGhzCisjCitDVF9MT0NBTF9UQVJCQUxMU19ESVI9IiR7SE9NRX0vc3JjIgorQ1RfU0FWRV9UQVJCQUxMUz15CitDVF9XT1JLX0RJUj0iJHtDVF9UT1BfRElSfS8uYnVpbGQiCitDVF9QUkVGSVhfRElSPSIke0hPTUV9L3gtdG9vbHMvJHtDVF9UQVJHRVR9IgorQ1RfSU5TVEFMTF9ESVI9IiR7Q1RfUFJFRklYX0RJUn0iCitDVF9STV9SRl9QUkVGSVhfRElSPXkKK0NUX1JFTU9WRV9ET0NTPXkKK0NUX0lOU1RBTExfRElSX1JPPXkKK0NUX1NUUklQX0FMTF9UT09MQ0hBSU5fRVhFQ1VUQUJMRVM9eQorCisjCisjIERvd25sb2FkaW5nCisjCisjIENUX0ZPUkJJRF9ET1dOTE9BRCBpcyBub3Qgc2V0CisjIENUX0ZPUkNFX0RPV05MT0FEIGlzIG5vdCBzZXQKK0NUX0NPTk5FQ1RfVElNRU9VVD0xMAorIyBDVF9PTkxZX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfVVNFX01JUlJPUiBpcyBub3Qgc2V0CisKKyMKKyMgRXh0cmFjdGluZworIworIyBDVF9GT1JDRV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX09WRVJJREVfQ09ORklHX0dVRVNTX1NVQj15CisjIENUX09OTFlfRVhUUkFDVCBpcyBub3Qgc2V0CitDVF9QQVRDSF9CVU5ETEVEPXkKKyMgQ1RfUEFUQ0hfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9CVU5ETEVEX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTE9DQUxfQlVORExFRCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfRkFMTEJBQ0tfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9GQUxMQkFDS19CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTk9ORSBpcyBub3Qgc2V0CitDVF9QQVRDSF9PUkRFUj0iYnVuZGxlZCIKKworIworIyBCdWlsZCBiZWhhdmlvcgorIworQ1RfUEFSQUxMRUxfSk9CUz0wCitDVF9MT0FEPTAKK0NUX1VTRV9QSVBFUz15CitDVF9FWFRSQV9GTEFHU19GT1JfSE9TVD0iIgorIyBDVF9DT05GSUdfU0hFTExfU0ggaXMgbm90IHNldAorIyBDVF9DT05GSUdfU0hFTExfQVNIIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTF9CQVNIPXkKKyMgQ1RfQ09ORklHX1NIRUxMX0NVU1RPTSBpcyBub3Qgc2V0CitDVF9DT05GSUdfU0hFTEw9IiR7YmFzaH0iCisKKyMKKyMgTG9nZ2luZworIworIyBDVF9MT0dfRVJST1IgaXMgbm90IHNldAorIyBDVF9MT0dfV0FSTiBpcyBub3Qgc2V0CisjIENUX0xPR19JTkZPIGlzIG5vdCBzZXQKK0NUX0xPR19FWFRSQT15CisjIENUX0xPR19BTEwgaXMgbm90IHNldAorIyBDVF9MT0dfREVCVUcgaXMgbm90IHNldAorQ1RfTE9HX0xFVkVMX01BWD0iRVhUUkEiCisjIENUX0xPR19TRUVfVE9PTFNfV0FSTiBpcyBub3Qgc2V0CitDVF9MT0dfUFJPR1JFU1NfQkFSPXkKK0NUX0xPR19UT19GSUxFPXkKK0NUX0xPR19GSUxFX0NPTVBSRVNTPXkKKworIworIyBUYXJnZXQgb3B0aW9ucworIworQ1RfQVJDSD0ieDg2IgorQ1RfQVJDSF9TVVBQT1JUU18zMj15CitDVF9BUkNIX1NVUFBPUlRTXzY0PXkKK0NUX0FSQ0hfU1VQUE9SVF9BUkNIPXkKK0NUX0FSQ0hfU1VQUE9SVF9DUFU9eQorQ1RfQVJDSF9TVVBQT1JUX1RVTkU9eQorQ1RfQVJDSF9ERUZBVUxUXzMyPXkKK0NUX0FSQ0hfQVJDSD0icGVudGl1bS1tbXgiCitDVF9BUkNIX0NQVT0iIgorQ1RfQVJDSF9UVU5FPSIiCitDVF9BUkNIXzMyPXkKKyMgQ1RfQVJDSF82NCBpcyBub3Qgc2V0CitDVF9BUkNIX0JJVE5FU1M9MzIKK0NUX0FSQ0hfRkxPQVRfSFc9eQorIyBDVF9BUkNIX0ZMT0FUX1NXIGlzIG5vdCBzZXQKK0NUX1RBUkdFVF9DRkxBR1M9IiIKK0NUX1RBUkdFVF9MREZMQUdTPSIiCisjIENUX0FSQ0hfYWxwaGEgaXMgbm90IHNldAorIyBDVF9BUkNIX2FybSBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYXZyMzIgaXMgbm90IHNldAorIyBDVF9BUkNIX2JsYWNrZmluIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9taXBzIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9wb3dlcnBjIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zaCBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc3BhcmMgaXMgbm90IHNldAorQ1RfQVJDSF94ODY9eQorQ1RfQVJDSF9hbHBoYV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hcm1fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXZyMzJfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYmxhY2tmaW5fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbTY4a19BVkFJTEFCTEU9eQorQ1RfQVJDSF9taXBzX0FWQUlMQUJMRT15CitDVF9BUkNIX3Bvd2VycGNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfczM5MF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zaF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zcGFyY19BVkFJTEFCTEU9eQorQ1RfQVJDSF94ODZfQVZBSUxBQkxFPXkKKworIworIyBHZW5lcmljIHRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIX1VTRV9NTVU9eQorCisjCisjIFRhcmdldCBvcHRpbWlzYXRpb25zCisjCisKKyMKKyMgVG9vbGNoYWluIG9wdGlvbnMKKyMKKworIworIyBHZW5lcmFsIHRvb2xjaGFpbiBvcHRpb25zCisjCitDVF9GT1JDRV9TWVNST09UPXkKK0NUX1VTRV9TWVNST09UPXkKK0NUX1NZU1JPT1RfTkFNRT0ic3lzcm9vdCIKK0NUX1NZU1JPT1RfRElSX1BSRUZJWD0iIgorQ1RfV0FOVFNfU1RBVElDX0xJTks9eQorQ1RfVE9PTENIQUlOX1BLR1ZFUlNJT049IiIKK0NUX1RPT0xDSEFJTl9CVUdVUkw9IiIKKworIworIyBUdXBsZSBjb21wbGV0aW9uIGFuZCBhbGlhc2luZworIworQ1RfVEFSR0VUX1ZFTkRPUj0iZ2VvZGUiCitDVF9UQVJHRVRfQUxJQVNfU0VEX0VYUFI9IiIKK0NUX1RBUkdFVF9BTElBUz0iIgorCisjCisjIFRvb2xjaGFpbiB0eXBlCisjCitDVF9DUk9TUz15CitDVF9UT09MQ0hBSU5fVFlQRT0iY3Jvc3MiCisKKyMKKyMgQnVpbGQgc3lzdGVtCisjCitDVF9CVUlMRD0iIgorQ1RfQlVJTERfUFJFRklYPSIiCitDVF9CVUlMRF9TVUZGSVg9IiIKKworIworIyBPcGVyYXRpbmcgU3lzdGVtCisjCitDVF9LRVJORUxfU1VQUE9SVFNfU0hBUkVEX0xJQlM9eQorQ1RfS0VSTkVMPSJsaW51eCIKK0NUX0tFUk5FTF9WRVJTSU9OPSIyLjYuMzYuNCIKKyMgQ1RfS0VSTkVMX2JhcmVfbWV0YWwgaXMgbm90IHNldAorQ1RfS0VSTkVMX2xpbnV4PXkKK0NUX0tFUk5FTF9iYXJlX21ldGFsX0FWQUlMQUJMRT15CitDVF9LRVJORUxfbGludXhfQVZBSUxBQkxFPXkKKyMgQ1RfS0VSTkVMX1ZfM18wXzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMyBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8yIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzEgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzAgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzlfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zOF84IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM3XzYgaXMgbm90IHNldAorQ1RfS0VSTkVMX1ZfMl82XzM2XzQ9eQorIyBDVF9LRVJORUxfVl8yXzZfMzVfMTQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzRfMTAgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzNfMTkgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzJfNDYgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzFfMTQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMjdfNTkgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9taW5ndzMyX0FWQUlMQUJMRT15CisKKyMKKyMgQ29tbW9uIGtlcm5lbCBvcHRpb25zCisjCitDVF9TSEFSRURfTElCUz15CisKKyMKKyMgbGludXggb3RoZXIgb3B0aW9ucworIworQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8wPXkKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8xIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8yIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9MSU5VWF9WRVJCT1NFX0xFVkVMPTAKK0NUX0tFUk5FTF9MSU5VWF9JTlNUQUxMX0NIRUNLPXkKKworIworIyBCaW5hcnkgdXRpbGl0aWVzCisjCitDVF9BUkNIX0JJTkZNVF9FTEY9eQorCisjCisjIEdOVSBiaW51dGlscworIworIyBDVF9CSU5VVElMU19WXzJfMjFfMWEgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVl8yXzIwXzFhPXkKKyMgQ1RfQklOVVRJTFNfVl8yXzE5XzFhIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfVl8yXzE4YSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WRVJTSU9OPSIyLjIwLjFhIgorQ1RfQklOVVRJTFNfMl8yMF9vcl9sYXRlcj15CitDVF9CSU5VVElMU18yXzE5X29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMThfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfR09MRF9TVVBQT1JUU19BUkNIPXkKK0NUX0JJTlVUSUxTX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9CSU5VVElMU19MSU5LRVJfTEQ9eQorQ1RfQklOVVRJTFNfTElOS0VSU19MSVNUPSJsZCIKK0NUX0JJTlVUSUxTX0xJTktFUl9ERUZBVUxUPSJiZmQiCitDVF9CSU5VVElMU19FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0JJTlVUSUxTX0ZPUl9UQVJHRVQ9eQorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVF9JQkVSVFk9eQorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVF9CRkQ9eQorCisjCisjIEMgY29tcGlsZXIKKyMKK0NUX0NDPSJnY2MiCitDVF9DQ19WRVJTSU9OPSI0LjQuNSIKK0NUX0NDX2djYz15CisjIENUX0NDX1ZfNF80XzYgaXMgbm90IHNldAorQ1RfQ0NfVl80XzRfNT15CisjIENUX0NDX1ZfNF80XzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM180IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8yXzIgaXMgbm90IHNldAorQ1RfQ0NfR0NDXzRfMl9vcl9sYXRlcj15CitDVF9DQ19HQ0NfNF8zX29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzQ9eQorQ1RfQ0NfR0NDXzRfNF9vcl9sYXRlcj15CitDVF9DQ19HQ0NfSEFTX0dSQVBISVRFPXkKK0NUX0NDX0dDQ19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQ0NfR0NDX1VTRV9HTVBfTVBGUj15CitDVF9DQ19HQ0NfVVNFX1BQTF9DTE9PRz15CitDVF9DQ19MQU5HX0pBVkFfVVNFX0VDSj15CitDVF9DQ19MQU5HX0ZPUlRSQU49eQorQ1RfQ0NfU1VQUE9SVF9DWFg9eQorQ1RfQ0NfU1VQUE9SVF9GT1JUUkFOPXkKK0NUX0NDX1NVUFBPUlRfSkFWQT15CitDVF9DQ19TVVBQT1JUX0FEQT15CitDVF9DQ19TVVBQT1JUX09CSkM9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDWFg9eQorCisjCisjIEFkZGl0aW9uYWwgc3VwcG9ydGVkIGxhbmd1YWdlczoKKyMKK0NUX0NDX0xBTkdfQ1hYPXkKK0NUX0NDX0xBTkdfSkFWQT15CisKKyMKKyMgZ2NjIG90aGVyIG9wdGlvbnMKKyMKK0NUX0NDX0VOQUJMRV9DWFhfRkxBR1M9IiIKK0NUX0NDX0NPUkVfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9DQ19FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0NDX1NUQVRJQ19MSUJTVERDWFg9eQorCisjCisjIE9wdGltaXNhdGlvbiBmZWF0dXJlcworIworQ1RfQ0NfR0NDX1VTRV9HUkFQSElURT15CisKKyMKKyMgU2V0dGluZ3MgZm9yIGxpYnJhcmllcyBydW5uaW5nIG9uIHRhcmdldAorIworQ1RfQ0NfR0NDX0VOQUJMRV9UQVJHRVRfT1BUU1BBQ0U9eQorIyBDVF9DQ19HQ0NfTElCTVVERkxBUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJHT01QIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQlNTUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYy4gb2JzY3VyZSBvcHRpb25zLgorIworQ1RfQ0NfQ1hBX0FURVhJVD15CisjIENUX0NDX0dDQ19ESVNBQkxFX1BDSCBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfU0pMSl9FWENFUFRJT05TPW0KK0NUX0NDX0dDQ19MREJMXzEyOD1tCisKKyMKKyMgQy1saWJyYXJ5CisjCitDVF9MSUJDPSJ1Q2xpYmMiCitDVF9MSUJDX1ZFUlNJT049IjAuOS4zMC4yIgorIyBDVF9MSUJDX2VnbGliYyBpcyBub3Qgc2V0CisjIENUX0xJQkNfZ2xpYmMgaXMgbm90IHNldAorQ1RfTElCQ191Q2xpYmM9eQorQ1RfTElCQ19lZ2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfZ2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbWluZ3dfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbmV3bGliX0FWQUlMQUJMRT15CitDVF9MSUJDX25vbmVfQVZBSUxBQkxFPXkKK0NUX0xJQkNfdUNsaWJjX0FWQUlMQUJMRT15CisjIENUX0xJQkNfVUNMSUJDX1ZfMF85XzMyIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19VQ0xJQkNfVl8wXzlfMzBfMyBpcyBub3Qgc2V0CitDVF9MSUJDX1VDTElCQ19WXzBfOV8zMF8yPXkKKyMgQ1RfTElCQ19VQ0xJQkNfVl8wXzlfMzBfMSBpcyBub3Qgc2V0CisjIENUX0xJQkNfVUNMSUJDX1ZfMF85XzMwIGlzIG5vdCBzZXQKK0NUX0xJQkNfVUNMSUJDXzBfOV8zMF9vcl9sYXRlcj15CitDVF9MSUJDX1VDTElCQ19QQVJBTExFTD15CitDVF9MSUJDX1VDTElCQ19WRVJCT1NJVFlfMD15CisjIENUX0xJQkNfVUNMSUJDX1ZFUkJPU0lUWV8xIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19VQ0xJQkNfVkVSQk9TSVRZXzIgaXMgbm90IHNldAorQ1RfTElCQ19VQ0xJQkNfVkVSQk9TSVRZPSIiCitDVF9MSUJDX1VDTElCQ19ERUJVR19MRVZFTF8wPXkKKyMgQ1RfTElCQ19VQ0xJQkNfREVCVUdfTEVWRUxfMSBpcyBub3Qgc2V0CisjIENUX0xJQkNfVUNMSUJDX0RFQlVHX0xFVkVMXzIgaXMgbm90IHNldAorQ1RfTElCQ19VQ0xJQkNfREVCVUdfTEVWRUw9MAorQ1RfTElCQ19VQ0xJQkNfQ09ORklHX0ZJTEU9IiR7Q1RfTElCX0RJUn0vc2FtcGxlcy8ke0NUX1RBUkdFVH0vJHtDVF9MSUJDfS0ke0NUX0xJQkNfVkVSU0lPTn0uY29uZmlnIgorQ1RfTElCQ19TVVBQT1JUX1RIUkVBRFNfQU5ZPXkKK0NUX0xJQkNfU1VQUE9SVF9MSU5VWFRIUkVBRFM9eQorQ1RfTElCQ19TVVBQT1JUX1RIUkVBRFNfTk9ORT15CitDVF9USFJFQURTPSJsaW51eHRocmVhZHMiCisKKyMKKyMgQ29tbW9uIEMgbGlicmFyeSBvcHRpb25zCisjCitDVF9USFJFQURTX0xJTlVYVEhSRUFEUz15CisjIENUX1RIUkVBRFNfTk9ORSBpcyBub3Qgc2V0CitDVF9MSUJDX1hMREQ9eQorCisjCisjIHVDbGliYyBvdGhlciBvcHRpb25zCisjCitDVF9MSUJDX1VDTElCQ19MTlhUSFJEX09MRD15CisjIENUX0xJQkNfVUNMSUJDX0xOWFRIUkRfTkVXIGlzIG5vdCBzZXQKK0NUX0xJQkNfVUNMSUJDX0xOWFRIUkQ9Im9sZCIKKyMgQ1RfTElCQ19VQ0xJQkNfTE9DQUxFUyBpcyBub3Qgc2V0CisjIENUX0xJQkNfVUNMSUJDX1dDSEFSIGlzIG5vdCBzZXQKKworIworIyBEZWJ1ZyBmYWNpbGl0aWVzCisjCitDVF9ERUJVR19kbWFsbG9jPXkKK0NUX0RNQUxMT0NfVl81XzVfMj15CitDVF9ETUFMTE9DX1ZFUlNJT049IjUuNS4yIgorQ1RfREVCVUdfZHVtYT15CitDVF9EVU1BX0E9eQorQ1RfRFVNQV9TTz15CitDVF9EVU1BX1ZfMl81XzE1PXkKK0NUX0RVTUFfVkVSU0lPTj0iMl81XzE1IgorQ1RfREVCVUdfZ2RiPXkKK0NUX0dEQl9DUk9TUz15CisjIENUX0dEQl9DUk9TU19TVEFUSUMgaXMgbm90IHNldAorQ1RfR0RCX0NST1NTX1BZVEhPTj15CitDVF9HREJfTkFUSVZFPXkKKyMgQ1RfR0RCX05BVElWRV9TVEFUSUMgaXMgbm90IHNldAorQ1RfR0RCX0dEQlNFUlZFUj15CitDVF9HREJfR0RCU0VSVkVSX1NUQVRJQz15CisKKyMKKyMgZ2RiIHZlcnNpb24KKyMKK0NUX0dEQl9WXzZfOGE9eQorQ1RfR0RCX1ZFUlNJT049IjYuOGEiCitDVF9ERUJVR19sdHJhY2U9eQorQ1RfTFRSQUNFX1ZfMF81XzM9eQorIyBDVF9MVFJBQ0VfVl8wXzVfMiBpcyBub3Qgc2V0CitDVF9MVFJBQ0VfVkVSU0lPTj0iMC41LjMiCitDVF9MVFJBQ0VfMF81XzNfb3JfbGF0ZXI9eQorQ1RfREVCVUdfc3RyYWNlPXkKK0NUX1NUUkFDRV9WXzRfNV8xOT15CisjIENUX1NUUkFDRV9WXzRfNV8xOCBpcyBub3Qgc2V0CitDVF9TVFJBQ0VfVkVSU0lPTj0iNC41LjE5IgorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMKKyMKK0NUX0NPTVBMSUJTX05FRURFRD15CitDVF9HTVBfTkVFREVEPXkKK0NUX01QRlJfTkVFREVEPXkKK0NUX1BQTF9ORUVERUQ9eQorQ1RfQ0xPT0dfTkVFREVEPXkKK0NUX0NPTVBMSUJTPXkKK0NUX0dNUD15CitDVF9NUEZSPXkKK0NUX1BQTD15CitDVF9DTE9PRz15CitDVF9MSUJFTEZfVEFSR0VUPXkKK0NUX0dNUF9WXzRfM18yPXkKKyMgQ1RfR01QX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9HTVBfVl80XzNfMCBpcyBub3Qgc2V0CitDVF9HTVBfVkVSU0lPTj0iNC4zLjIiCisjIENUX01QRlJfVl8zXzBfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZfMl80XzI9eQorIyBDVF9NUEZSX1ZfMl80XzEgaXMgbm90IHNldAorIyBDVF9NUEZSX1ZfMl80XzAgaXMgbm90IHNldAorQ1RfTVBGUl9WRVJTSU9OPSIyLjQuMiIKK0NUX1BQTF9WXzBfMTBfMj15CitDVF9QUExfVkVSU0lPTj0iMC4xMC4yIgorIyBDVF9DTE9PR19WXzBfMTVfMTAgaXMgbm90IHNldAorQ1RfQ0xPT0dfVl8wXzE1Xzk9eQorIyBDVF9DTE9PR19WXzBfMTVfOCBpcyBub3Qgc2V0CisjIENUX0NMT09HX1ZfMF8xNV83IGlzIG5vdCBzZXQKKyMgQ1RfQ0xPT0dfVl8wXzE1XzYgaXMgbm90IHNldAorQ1RfQ0xPT0dfVkVSU0lPTj0iMC4xNS45IgorCisjCisjIGxpYmVsZiB2ZXJzaW9uIG5lZWRlZCB0byBidWlsZCBmb3IgdGFyZ2V0CisjCitDVF9MSUJFTEZfVl8wXzhfMTM9eQorIyBDVF9MSUJFTEZfVl8wXzhfMTIgaXMgbm90IHNldAorQ1RfTElCRUxGX1ZFUlNJT049IjAuOC4xMyIKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzIGNvbW1vbiBvcHRpb25zCisjCisjIENUX0NPTVBMSUJTX0NIRUNLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9pNTg2LWdlb2RlLWxpbnV4LXVjbGliYy9yZXBvcnRlZC5ieSBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9pNTg2LWdlb2RlLWxpbnV4LXVjbGliYy9yZXBvcnRlZC5ieQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGJjYTYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2k1ODYtZ2VvZGUtbGludXgtdWNsaWJjL3JlcG9ydGVkLmJ5CkBAIC0wLDAgKzEsMyBAQAorcmVwb3J0ZXJfbmFtZT0iWUVNIgorcmVwb3J0ZXJfdXJsPSJodHRwOi8veW1vcmluLmlzLWEtZ2Vlay5vcmcvIgorcmVwb3J0ZXJfY29tbWVudD0iU2FtcGxlIGk1ODYgY29uZmlndXJhdGlvbiB0d2Vha2VkIHRvIGdlbmVyYXRlIGNvZGUgZm9yIHRoZSBnZW9kZS4iCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvaTU4Ni1nZW9kZS1saW51eC11Y2xpYmMvdUNsaWJjLTAuOS4zMC4yLmNvbmZpZyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9pNTg2LWdlb2RlLWxpbnV4LXVjbGliYy91Q2xpYmMtMC45LjMwLjIuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOTcyMTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvaTU4Ni1nZW9kZS1saW51eC11Y2xpYmMvdUNsaWJjLTAuOS4zMC4yLmNvbmZpZwpAQCAtMCwwICsxLDI2MyBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBWZXJzaW9uOiAwLjkuMzAKKyMgVHVlIE5vdiAxOCAwOTowNToyNiAyMDA4CisjCisjIFRBUkdFVF9hbHBoYSBpcyBub3Qgc2V0CisjIFRBUkdFVF9hcm0gaXMgbm90IHNldAorIyBUQVJHRVRfYXZyMzIgaXMgbm90IHNldAorIyBUQVJHRVRfYmZpbiBpcyBub3Qgc2V0CisjIFRBUkdFVF9jcmlzIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2UxIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2ZydiBpcyBub3Qgc2V0CisjIFRBUkdFVF9oODMwMCBpcyBub3Qgc2V0CisjIFRBUkdFVF9ocHBhIGlzIG5vdCBzZXQKK1RBUkdFVF9pMzg2PXkKKyMgVEFSR0VUX2k5NjAgaXMgbm90IHNldAorIyBUQVJHRVRfaWE2NCBpcyBub3Qgc2V0CisjIFRBUkdFVF9tNjhrIGlzIG5vdCBzZXQKKyMgVEFSR0VUX21pY3JvYmxhemUgaXMgbm90IHNldAorIyBUQVJHRVRfbWlwcyBpcyBub3Qgc2V0CisjIFRBUkdFVF9uaW9zIGlzIG5vdCBzZXQKKyMgVEFSR0VUX25pb3MyIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3Bvd2VycGMgaXMgbm90IHNldAorIyBUQVJHRVRfc2ggaXMgbm90IHNldAorIyBUQVJHRVRfc2g2NCBpcyBub3Qgc2V0CisjIFRBUkdFVF9zcGFyYyBpcyBub3Qgc2V0CisjIFRBUkdFVF92ODUwIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3ZheCBpcyBub3Qgc2V0CisjIFRBUkdFVF94ODZfNjQgaXMgbm90IHNldAorIyBUQVJHRVRfeHRlbnNhIGlzIG5vdCBzZXQKKworIworIyBUYXJnZXQgQXJjaGl0ZWN0dXJlIEZlYXR1cmVzIGFuZCBPcHRpb25zCisjCitUQVJHRVRfQVJDSD0iaTM4NiIKK0ZPUkNFX09QVElPTlNfRk9SX0FSQ0g9eQorIyBDT05GSUdfQVJNX09BQkkgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VBQkkgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19BUk0gaXMgbm90IHNldAorIyBDT05GSUdfQVJNNjEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk03VERNSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUk03MjBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTkyMFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJNOTIyVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk05MjZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTEwVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk0xMTM2SkZfUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk0xMTc2SlpfUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk0xMTc2SlpGX1MgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0NPUlRFWF9NMyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fQ09SVEVYX00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9TQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9YU0NBTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0lXTU1YVCBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDXzM4NiBpcyBub3Qgc2V0CisjIENPTkZJR18zODYgaXMgbm90IHNldAorIyBDT05GSUdfNDg2IGlzIG5vdCBzZXQKK0NPTkZJR181ODY9eQorIyBDT05GSUdfNTg2TU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHXzY4NiBpcyBub3Qgc2V0CisjIENPTkZJR19QRU5USVVNSUkgaXMgbm90IHNldAorIyBDT05GSUdfUEVOVElVTUlJSSBpcyBub3Qgc2V0CisjIENPTkZJR19QRU5USVVNNCBpcyBub3Qgc2V0CisjIENPTkZJR19LNiBpcyBub3Qgc2V0CisjIENPTkZJR19LNyBpcyBub3Qgc2V0CisjIENPTkZJR19FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSVVNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU5DSElQQzYgaXMgbm90IHNldAorIyBDT05GSUdfV0lOQ0hJUDIgaXMgbm90IHNldAorIyBDT05GSUdfQ1lSSVhJSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkVIRU1JQUggaXMgbm90IHNldAorVEFSR0VUX1NVQkFSQ0g9IiIKKworIworIyBVc2luZyBFTEYgZmlsZSBmb3JtYXQKKyMKK0FSQ0hfTElUVExFX0VORElBTj15CisjIEFSQ0hfV0FOVFNfQklHX0VORElBTiBpcyBub3Qgc2V0CisjIEFSQ0hfV0FOVFNfTElUVExFX0VORElBTiBpcyBub3Qgc2V0CisKKyMKKyMgVXNpbmcgTGl0dGxlIEVuZGlhbgorIworQVJDSF9IQVNfTU1VPXkKK0FSQ0hfVVNFX01NVT15CitVQ0xJQkNfSEFTX0ZMT0FUUz15CitVQ0xJQkNfSEFTX0ZQVT15CitET19DOTlfTUFUSD15CitVQ0xJQkNfSEFTX0ZFTlY9eQorVUNMSUJDX0hBU19MT05HX0RPVUJMRV9NQVRIPXkKK0tFUk5FTF9IRUFERVJTPSIvdXNyL2luY2x1ZGUiCitIQVZFX0RPVF9DT05GSUc9eQorCisjCisjIEdlbmVyYWwgTGlicmFyeSBTZXR0aW5ncworIworIyBIQVZFX05PX1BJQyBpcyBub3Qgc2V0CitET1BJQz15CisjIEFSQ0hfSEFTX05PX1NIQVJFRCBpcyBub3Qgc2V0CisjIEFSQ0hfSEFTX05PX0xEU08gaXMgbm90IHNldAorSEFWRV9TSEFSRUQ9eQorIyBGT1JDRV9TSEFSRUFCTEVfVEVYVF9TRUdNRU5UUyBpcyBub3Qgc2V0CitMRFNPX0xERF9TVVBQT1JUPXkKK0xEU09fQ0FDSEVfU1VQUE9SVD15CisjIExEU09fUFJFTE9BRF9GSUxFX1NVUFBPUlQgaXMgbm90IHNldAorTERTT19CQVNFX0ZJTEVOQU1FPSJsZC5zbyIKK1VDTElCQ19TVEFUSUNfTERDT05GSUc9eQorIyBMRFNPX1JVTlBBVEggaXMgbm90IHNldAorVUNMSUJDX0NUT1JfRFRPUj15CisjIExEU09fR05VX0hBU0hfU1VQUE9SVCBpcyBub3Qgc2V0CisjIEhBU19OT19USFJFQURTIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfVEhSRUFEUz15CisjIFBUSFJFQURTX0RFQlVHX1NVUFBPUlQgaXMgbm90IHNldAorTElOVVhUSFJFQURTX09MRD15CitVQ0xJQkNfSEFTX1NZU0xPRz15CitVQ0xJQkNfSEFTX0xGUz15CisjIE1BTExPQyBpcyBub3Qgc2V0CisjIE1BTExPQ19TSU1QTEUgaXMgbm90IHNldAorTUFMTE9DX1NUQU5EQVJEPXkKKyMgTUFMTE9DX0dMSUJDX0NPTVBBVCBpcyBub3Qgc2V0CitVQ0xJQkNfRFlOQU1JQ19BVEVYSVQ9eQorIyBDT01QQVRfQVRFWElUIGlzIG5vdCBzZXQKKyMgVUNMSUJDX1NVU1YzX0xFR0FDWSBpcyBub3Qgc2V0CisjIFVDTElCQ19TVVNWM19MRUdBQ1lfTUFDUk9TIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVFVCUyBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NIQURPVz15CisjIFVDTElCQ19IQVNfUFJPR1JBTV9JTlZPQ0FUSU9OX05BTUUgaXMgbm90IHNldAorVUNMSUJDX0hBU19QVFk9eQorQVNTVU1FX0RFVlBUUz15CitVTklYOThQVFlfT05MWT15CisjIFVDTElCQ19IQVNfR0VUUFQgaXMgbm90IHNldAorVUNMSUJDX0hBU19UTV9FWFRFTlNJT05TPXkKK1VDTElCQ19IQVNfVFpfQ0FDSElORz15CitVQ0xJQkNfSEFTX1RaX0ZJTEU9eQorVUNMSUJDX0hBU19UWl9GSUxFX1JFQURfTUFOWT15CitVQ0xJQkNfVFpfRklMRV9QQVRIPSIvZXRjL1RaIgorCisjCisjIEFkdmFuY2VkIExpYnJhcnkgU2V0dGluZ3MKKyMKK1VDTElCQ19QV0RfQlVGRkVSX1NJWkU9MjU2CitVQ0xJQkNfR1JQX0JVRkZFUl9TSVpFPTI1NgorCisjCisjIFN1cHBvcnQgdmFyaW91cyBmYW1pbGllcyBvZiBmdW5jdGlvbnMKKyMKK1VDTElCQ19MSU5VWF9NT0RVTEVfMjQ9eQorVUNMSUJDX0xJTlVYX1NQRUNJRklDPXkKK1VDTElCQ19IQVNfR05VX0VSUk9SPXkKKyMgVUNMSUJDX0JTRF9TUEVDSUZJQyBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX0JTRF9FUlI9eQorIyBVQ0xJQkNfSEFTX09CU09MRVRFX0JTRF9TSUdOQUwgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX09CU09MRVRFX1NZU1ZfU0lHTkFMIGlzIG5vdCBzZXQKKyMgVUNMSUJDX05UUF9MRUdBQ1kgaXMgbm90IHNldAorIyBVQ0xJQkNfU1Y0X0RFUFJFQ0FURUQgaXMgbm90IHNldAorVUNMSUJDX0hBU19SRUFMVElNRT15CitVQ0xJQkNfSEFTX0FEVkFOQ0VEX1JFQUxUSU1FPXkKK1VDTElCQ19IQVNfRVBPTEw9eQorVUNMSUJDX0hBU19YQVRUUj15CitVQ0xJQkNfSEFTX1BST0ZJTElORz15CitVQ0xJQkNfSEFTX0NSWVBUX0lNUEw9eQorVUNMSUJDX0hBU19DUllQVD15CitVQ0xJQkNfSEFTX05FVFdPUktfU1VQUE9SVD15CitVQ0xJQkNfSEFTX1NPQ0tFVD15CitVQ0xJQkNfSEFTX0lQVjQ9eQorIyBVQ0xJQkNfSEFTX0lQVjYgaXMgbm90IHNldAorVUNMSUJDX0hBU19SUEM9eQorVUNMSUJDX0hBU19GVUxMX1JQQz15CitVQ0xJQkNfSEFTX1JFRU5UUkFOVF9SUEM9eQorVUNMSUJDX1VTRV9ORVRMSU5LPXkKK1VDTElCQ19TVVBQT1JUX0FJX0FERFJDT05GSUc9eQorIyBVQ0xJQkNfSEFTX0JTRF9SRVNfQ0xPU0UgaXMgbm90IHNldAorCisjCisjIFN0cmluZyBhbmQgU3RkaW8gU3VwcG9ydAorIworVUNMSUJDX0hBU19TVFJJTkdfR0VORVJJQ19PUFQ9eQorVUNMSUJDX0hBU19TVFJJTkdfQVJDSF9PUFQ9eQorVUNMSUJDX0hBU19DVFlQRV9UQUJMRVM9eQorVUNMSUJDX0hBU19DVFlQRV9TSUdORUQ9eQorIyBVQ0xJQkNfSEFTX0NUWVBFX1VOU0FGRSBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfQ1RZUEVfQ0hFQ0tFRCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX0NUWVBFX0VORk9SQ0VEPXkKKyMgVUNMSUJDX0hBU19XQ0hBUiBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfTE9DQUxFIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19IRVhBREVDSU1BTF9GTE9BVFMgaXMgbm90IHNldAorVUNMSUJDX0hBU19HTElCQ19DVVNUT01fUFJJTlRGPXkKKyMgVVNFX09MRF9WRlBSSU5URiBpcyBub3Qgc2V0CitVQ0xJQkNfUFJJTlRGX1NDQU5GX1BPU0lUSU9OQUxfQVJHUz05CisjIFVDTElCQ19IQVNfU0NBTkZfR0xJQkNfQV9GTEFHIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfTk9ORSBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzI1NiBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzUxMiBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzEwMjQgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl8yMDQ4IGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfU1RESU9fQlVGU0laXzQwOTY9eQorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl84MTkyIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfU1RESU9fQlVJTFRJTl9CVUZGRVJfTk9ORT15CisjIFVDTElCQ19IQVNfU1RESU9fQlVJTFRJTl9CVUZGRVJfNCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVJTFRJTl9CVUZGRVJfOCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fU0hVVERPV05fT05fQUJPUlQgaXMgbm90IHNldAorVUNMSUJDX0hBU19TVERJT19HRVRDX01BQ1JPPXkKK1VDTElCQ19IQVNfU1RESU9fUFVUQ19NQUNSTz15CitVQ0xJQkNfSEFTX1NURElPX0FVVE9fUldfVFJBTlNJVElPTj15CisjIFVDTElCQ19IQVNfRk9QRU5fTEFSR0VGSUxFX01PREUgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0ZPUEVOX0VYQ0xVU0lWRV9NT0RFIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19HTElCQ19DVVNUT01fU1RSRUFNUyBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1BSSU5URl9NX1NQRUM9eQorVUNMSUJDX0hBU19FUlJOT19NRVNTQUdFUz15CisjIFVDTElCQ19IQVNfU1lTX0VSUkxJU1QgaXMgbm90IHNldAorVUNMSUJDX0hBU19TSUdOVU1fTUVTU0FHRVM9eQorIyBVQ0xJQkNfSEFTX1NZU19TSUdMSVNUIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfR05VX0dFVE9QVD15CitVQ0xJQkNfSEFTX0dOVV9HRVRTVUJPUFQ9eQorCisjCisjIEJpZyBhbmQgVGFsbAorIworVUNMSUJDX0hBU19SRUdFWD15CitVQ0xJQkNfSEFTX1JFR0VYX09MRD15CitVQ0xJQkNfSEFTX0ZOTUFUQ0g9eQorVUNMSUJDX0hBU19GTk1BVENIX09MRD15CisjIFVDTElCQ19IQVNfV09SREVYUCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfRlRXIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfR0xPQj15CitVQ0xJQkNfSEFTX0dOVV9HTE9CPXkKKworIworIyBMaWJyYXJ5IEluc3RhbGxhdGlvbiBPcHRpb25zCisjCitTSEFSRURfTElCX0xPQURFUl9QUkVGSVg9IiQoUlVOVElNRV9QUkVGSVgpbGliIgorUlVOVElNRV9QUkVGSVg9Ii91c3IvJChUQVJHRVRfQVJDSCktbGludXgtdWNsaWJjLyIKK0RFVkVMX1BSRUZJWD0iL3Vzci8kKFRBUkdFVF9BUkNIKS1saW51eC11Y2xpYmMvdXNyLyIKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIFVDTElCQ19CVUlMRF9QSUUgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0FSQzRSQU5ET00gaXMgbm90IHNldAorIyBIQVZFX05PX1NTUCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1NQIGlzIG5vdCBzZXQKK1VDTElCQ19CVUlMRF9SRUxSTz15CisjIFVDTElCQ19CVUlMRF9OT1cgaXMgbm90IHNldAorVUNMSUJDX0JVSUxEX05PRVhFQ1NUQUNLPXkKKworIworIyB1Q2xpYmMgZGV2ZWxvcG1lbnQvZGVidWdnaW5nIG9wdGlvbnMKKyMKK0NST1NTX0NPTVBJTEVSX1BSRUZJWD0iIgorVUNMSUJDX0VYVFJBX0NGTEFHUz0iIgorIyBET0RFQlVHIGlzIG5vdCBzZXQKKyMgRE9ERUJVR19QVCBpcyBub3Qgc2V0CisjIERPU1RSSVAgaXMgbm90IHNldAorIyBET0FTU0VSVFMgaXMgbm90IHNldAorIyBTVVBQT1JUX0xEX0RFQlVHIGlzIG5vdCBzZXQKKyMgU1VQUE9SVF9MRF9ERUJVR19FQVJMWSBpcyBub3Qgc2V0CisjIFVDTElCQ19NQUxMT0NfREVCVUdHSU5HIGlzIG5vdCBzZXQKK1dBUk5JTkdTPSItV2FsbCIKKyMgRVhUUkFfV0FSTklOR1MgaXMgbm90IHNldAorIyBET01VTFRJIGlzIG5vdCBzZXQKKyMgVUNMSUJDX01KTjNfT05MWSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvaTU4Ni1taW5ndzMybXN2YyxpNjg2LW5vbmUtbGludXgtZ251L2Nyb3NzdG9vbC5jb25maWcgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvaTU4Ni1taW5ndzMybXN2YyxpNjg2LW5vbmUtbGludXgtZ251L2Nyb3NzdG9vbC5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q5ZGM0NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9pNTg2LW1pbmd3MzJtc3ZjLGk2ODYtbm9uZS1saW51eC1nbnUvY3Jvc3N0b29sLmNvbmZpZwpAQCAtMCwwICsxLDQ0MCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBjcm9zc3Rvb2wtTkcgaGdfZGVmYXVsdEAyNzIxXzdiNjQ3NDZiMGFiMyBDb25maWd1cmF0aW9uCisjIFN1biBPY3QgMTYgMTc6MjY6NTQgMjAxMQorIworQ1RfQ09ORklHVVJFX2hhc194enV0aWxzPXkKK0NUX0NPTkZJR1VSRV9oYXNfY3ZzPXkKK0NUX0NPTkZJR1VSRV9oYXNfc3ZuPXkKK0NUX01PRFVMRVM9eQorCisjCisjIFBhdGhzIGFuZCBtaXNjIG9wdGlvbnMKKyMKKworIworIyBjcm9zc3Rvb2wtTkcgYmVoYXZpb3IKKyMKKyMgQ1RfT0JTT0xFVEUgaXMgbm90IHNldAorQ1RfRVhQRVJJTUVOVEFMPXkKKyMgQ1RfREVCVUdfQ1QgaXMgbm90IHNldAorCisjCisjIFBhdGhzCisjCitDVF9MT0NBTF9UQVJCQUxMU19ESVI9IiR7SE9NRX0vc3JjIgorQ1RfU0FWRV9UQVJCQUxMUz15CitDVF9XT1JLX0RJUj0iJHtDVF9UT1BfRElSfS8uYnVpbGQiCitDVF9QUkVGSVhfRElSPSIke0hPTUV9L3gtdG9vbHMvJHtDVF9UQVJHRVR9IgorQ1RfSU5TVEFMTF9ESVI9IiR7Q1RfUFJFRklYX0RJUn0iCitDVF9STV9SRl9QUkVGSVhfRElSPXkKK0NUX1JFTU9WRV9ET0NTPXkKK0NUX0lOU1RBTExfRElSX1JPPXkKK0NUX1NUUklQX0FMTF9UT09MQ0hBSU5fRVhFQ1VUQUJMRVM9eQorCisjCisjIERvd25sb2FkaW5nCisjCisjIENUX0ZPUkJJRF9ET1dOTE9BRCBpcyBub3Qgc2V0CisjIENUX0ZPUkNFX0RPV05MT0FEIGlzIG5vdCBzZXQKK0NUX0NPTk5FQ1RfVElNRU9VVD0xMAorIyBDVF9PTkxZX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfVVNFX01JUlJPUiBpcyBub3Qgc2V0CisKKyMKKyMgRXh0cmFjdGluZworIworIyBDVF9GT1JDRV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX09WRVJJREVfQ09ORklHX0dVRVNTX1NVQj15CisjIENUX09OTFlfRVhUUkFDVCBpcyBub3Qgc2V0CitDVF9QQVRDSF9CVU5ETEVEPXkKKyMgQ1RfUEFUQ0hfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9CVU5ETEVEX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTE9DQUxfQlVORExFRCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfRkFMTEJBQ0tfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9GQUxMQkFDS19CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTk9ORSBpcyBub3Qgc2V0CitDVF9QQVRDSF9PUkRFUj0iYnVuZGxlZCIKKworIworIyBCdWlsZCBiZWhhdmlvcgorIworQ1RfUEFSQUxMRUxfSk9CUz0wCitDVF9MT0FEPTAKK0NUX1VTRV9QSVBFUz15CitDVF9FWFRSQV9GTEFHU19GT1JfSE9TVD0iIgorIyBDVF9DT05GSUdfU0hFTExfU0ggaXMgbm90IHNldAorIyBDVF9DT05GSUdfU0hFTExfQVNIIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTF9CQVNIPXkKKyMgQ1RfQ09ORklHX1NIRUxMX0NVU1RPTSBpcyBub3Qgc2V0CitDVF9DT05GSUdfU0hFTEw9IiR7YmFzaH0iCisKKyMKKyMgTG9nZ2luZworIworIyBDVF9MT0dfRVJST1IgaXMgbm90IHNldAorIyBDVF9MT0dfV0FSTiBpcyBub3Qgc2V0CisjIENUX0xPR19JTkZPIGlzIG5vdCBzZXQKK0NUX0xPR19FWFRSQT15CisjIENUX0xPR19BTEwgaXMgbm90IHNldAorIyBDVF9MT0dfREVCVUcgaXMgbm90IHNldAorQ1RfTE9HX0xFVkVMX01BWD0iRVhUUkEiCisjIENUX0xPR19TRUVfVE9PTFNfV0FSTiBpcyBub3Qgc2V0CitDVF9MT0dfUFJPR1JFU1NfQkFSPXkKK0NUX0xPR19UT19GSUxFPXkKK0NUX0xPR19GSUxFX0NPTVBSRVNTPXkKKworIworIyBUYXJnZXQgb3B0aW9ucworIworQ1RfQVJDSD0ieDg2IgorQ1RfQVJDSF9TVVBQT1JUU18zMj15CitDVF9BUkNIX1NVUFBPUlRTXzY0PXkKK0NUX0FSQ0hfU1VQUE9SVF9BUkNIPXkKK0NUX0FSQ0hfU1VQUE9SVF9DUFU9eQorQ1RfQVJDSF9TVVBQT1JUX1RVTkU9eQorQ1RfQVJDSF9ERUZBVUxUXzMyPXkKK0NUX0FSQ0hfQVJDSD0iaTY4NiIKK0NUX0FSQ0hfQ1BVPSIiCitDVF9BUkNIX1RVTkU9Imk2ODYiCitDVF9BUkNIXzMyPXkKKyMgQ1RfQVJDSF82NCBpcyBub3Qgc2V0CitDVF9BUkNIX0JJVE5FU1M9MzIKK0NUX0FSQ0hfRkxPQVRfSFc9eQorIyBDVF9BUkNIX0ZMT0FUX1NXIGlzIG5vdCBzZXQKK0NUX1RBUkdFVF9DRkxBR1M9IiIKK0NUX1RBUkdFVF9MREZMQUdTPSIiCisjIENUX0FSQ0hfYWxwaGEgaXMgbm90IHNldAorIyBDVF9BUkNIX2FybSBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYXZyMzIgaXMgbm90IHNldAorIyBDVF9BUkNIX2JsYWNrZmluIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9tNjhrIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9taXBzIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9wb3dlcnBjIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zMzkwIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zaCBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc3BhcmMgaXMgbm90IHNldAorQ1RfQVJDSF94ODY9eQorQ1RfQVJDSF9hbHBoYV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hcm1fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXZyMzJfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYmxhY2tmaW5fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbTY4a19BVkFJTEFCTEU9eQorQ1RfQVJDSF9taXBzX0FWQUlMQUJMRT15CitDVF9BUkNIX3Bvd2VycGNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfczM5MF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zaF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zcGFyY19BVkFJTEFCTEU9eQorQ1RfQVJDSF94ODZfQVZBSUxBQkxFPXkKKworIworIyBHZW5lcmljIHRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIX1VTRV9NTVU9eQorCisjCisjIFRhcmdldCBvcHRpbWlzYXRpb25zCisjCisKKyMKKyMgVG9vbGNoYWluIG9wdGlvbnMKKyMKKworIworIyBHZW5lcmFsIHRvb2xjaGFpbiBvcHRpb25zCisjCitDVF9GT1JDRV9TWVNST09UPXkKK0NUX1VTRV9TWVNST09UPXkKK0NUX1NZU1JPT1RfTkFNRT0ic3lzcm9vdCIKK0NUX1NZU1JPT1RfRElSX1BSRUZJWD0iIgorIyBDVF9TVEFUSUNfVE9PTENIQUlOIGlzIG5vdCBzZXQKK0NUX1RPT0xDSEFJTl9QS0dWRVJTSU9OPSIiCitDVF9UT09MQ0hBSU5fQlVHVVJMPSIiCisKKyMKKyMgVHVwbGUgY29tcGxldGlvbiBhbmQgYWxpYXNpbmcKKyMKK0NUX1RBUkdFVF9WRU5ET1I9Im5vbmUiCitDVF9UQVJHRVRfQUxJQVNfU0VEX0VYUFI9IiIKK0NUX1RBUkdFVF9BTElBUz0iIgorCisjCisjIFRvb2xjaGFpbiB0eXBlCisjCisjIENUX05BVElWRSBpcyBub3Qgc2V0CisjIENUX0NST1NTIGlzIG5vdCBzZXQKKyMgQ1RfQ1JPU1NfTkFUSVZFIGlzIG5vdCBzZXQKK0NUX0NBTkFESUFOPXkKK0NUX1RPT0xDSEFJTl9UWVBFPSJjYW5hZGlhbiIKKworIworIyBCdWlsZCBzeXN0ZW0KKyMKK0NUX0JVSUxEPSIiCitDVF9CVUlMRF9QUkVGSVg9IiIKK0NUX0JVSUxEX1NVRkZJWD0iIgorCisjCisjIEhvc3Qgc3lzdGVtCisjCitDVF9IT1NUPSJpNTg2LW1pbmd3MzJtc3ZjIgorQ1RfSE9TVF9QUkVGSVg9IiIKK0NUX0hPU1RfU1VGRklYPSIiCisKKyMKKyMgVGFyZ2V0IHN5c3RlbQorIworQ1RfVEFSR0VUX1BSRUZJWD0iaTY4Ni1jcm9zcy1saW51eC1nbnUtIgorQ1RfVEFSR0VUX1NVRkZJWD0iIgorCisjCisjIE9wZXJhdGluZyBTeXN0ZW0KKyMKK0NUX0tFUk5FTF9TVVBQT1JUU19TSEFSRURfTElCUz15CitDVF9LRVJORUw9ImxpbnV4IgorQ1RfS0VSTkVMX1ZFUlNJT049IjIuNi4zMy4xOSIKKyMgQ1RfS0VSTkVMX2JhcmVfbWV0YWwgaXMgbm90IHNldAorQ1RfS0VSTkVMX2xpbnV4PXkKKyMgQ1RfS0VSTkVMX21pbmd3MzIgaXMgbm90IHNldAorQ1RfS0VSTkVMX2JhcmVfbWV0YWxfQVZBSUxBQkxFPXkKK0NUX0tFUk5FTF9saW51eF9BVkFJTEFCTEU9eQorIyBDVF9LRVJORUxfVl8zXzBfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8zIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzIgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zOV80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM4XzggaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzdfNiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNl80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM1XzE0IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM0XzEwIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9WXzJfNl8zM18xOT15CisjIENUX0tFUk5FTF9WXzJfNl8zMl80NiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zMV8xNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8yN181OSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9MSU5VWF9DVVNUT00gaXMgbm90IHNldAorQ1RfS0VSTkVMX21pbmd3MzJfQVZBSUxBQkxFPXkKKworIworIyBDb21tb24ga2VybmVsIG9wdGlvbnMKKyMKK0NUX1NIQVJFRF9MSUJTPXkKKworIworIyBsaW51eCBvdGhlciBvcHRpb25zCisjCitDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzA9eQorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzEgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzIgaXMgbm90IHNldAorQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0VfTEVWRUw9MAorQ1RfS0VSTkVMX0xJTlVYX0lOU1RBTExfQ0hFQ0s9eQorCisjCisjIEJpbmFyeSB1dGlsaXRpZXMKKyMKK0NUX0FSQ0hfQklORk1UX0VMRj15CisKKyMKKyMgR05VIGJpbnV0aWxzCisjCisjIENUX0JJTlVUSUxTX1ZfMl8yMV81MyBpcyBub3Qgc2V0CisjIENUX0JJTlVUSUxTX1ZfMl8yMV8xYSBpcyBub3Qgc2V0CisjIENUX0JJTlVUSUxTX1ZfMl8yMF8xYSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WXzJfMTlfMWE9eQorIyBDVF9CSU5VVElMU19WXzJfMThhIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX1ZFUlNJT049IjIuMTkuMWEiCitDVF9CSU5VVElMU18yXzE5X29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMThfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfR09MRF9TVVBQT1JUU19BUkNIPXkKK0NUX0JJTlVUSUxTX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9CSU5VVElMU19GT1JDRV9MRF9CRkQ9eQorQ1RfQklOVVRJTFNfTElOS0VSX0xEPXkKKyMgQ1RfQklOVVRJTFNfTElOS0VSX0xEX0dPTEQgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19MSU5LRVJfR09MRF9MRCBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19MSU5LRVJTX0xJU1Q9ImxkIgorQ1RfQklOVVRJTFNfTElOS0VSX0RFRkFVTFQ9ImJmZCIKK0NUX0JJTlVUSUxTX0VYVFJBX0NPTkZJR19BUlJBWT0iLS1lbmFibGUtdGFyZ2V0cz1pNjg2LW5vbmUtbGludXgtZ251IgorIyBDVF9CSU5VVElMU19GT1JfVEFSR0VUIGlzIG5vdCBzZXQKKworIworIyBDIGNvbXBpbGVyCisjCitDVF9DQz0iZ2NjIgorQ1RfQ0NfVkVSU0lPTj0iNC4zLjIiCitDVF9DQ19nY2M9eQorIyBDVF9DQ19HQ0NfU0hPV19MSU5BUk8gaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNl8xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzZfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF81XzMgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8yIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF81XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF82IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM180IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMyBpcyBub3Qgc2V0CitDVF9DQ19WXzRfM18yPXkKKyMgQ1RfQ0NfVl80XzNfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8yXzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfMl8yIGlzIG5vdCBzZXQKK0NUX0NDX0dDQ180XzJfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDXzRfMz15CitDVF9DQ19HQ0NfNF8zX29yX2xhdGVyPXkKK0NUX0NDX0dDQ19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQ0NfR0NDX1VTRV9HTVBfTVBGUj15CisjIENUX0NDX0xBTkdfRk9SVFJBTiBpcyBub3Qgc2V0CitDVF9DQ19TVVBQT1JUX0NYWD15CitDVF9DQ19TVVBQT1JUX0ZPUlRSQU49eQorQ1RfQ0NfU1VQUE9SVF9KQVZBPXkKK0NUX0NDX1NVUFBPUlRfQURBPXkKK0NUX0NDX1NVUFBPUlRfT0JKQz15CitDVF9DQ19TVVBQT1JUX09CSkNYWD15CisKKyMKKyMgQWRkaXRpb25hbCBzdXBwb3J0ZWQgbGFuZ3VhZ2VzOgorIworQ1RfQ0NfTEFOR19DWFg9eQorIyBDVF9DQ19MQU5HX0pBVkEgaXMgbm90IHNldAorIyBDVF9DQ19MQU5HX0FEQSBpcyBub3Qgc2V0CisjIENUX0NDX0xBTkdfT0JKQyBpcyBub3Qgc2V0CisjIENUX0NDX0xBTkdfT0JKQ1hYIGlzIG5vdCBzZXQKK0NUX0NDX0xBTkdfT1RIRVJTPSIiCisKKyMKKyMgZ2NjIG90aGVyIG9wdGlvbnMKKyMKK0NUX0NDX0VOQUJMRV9DWFhfRkxBR1M9IiIKK0NUX0NDX0NPUkVfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9DQ19FWFRSQV9DT05GSUdfQVJSQVk9IiIKKworIworIyBPcHRpbWlzYXRpb24gZmVhdHVyZXMKKyMKKworIworIyBTZXR0aW5ncyBmb3IgbGlicmFyaWVzIHJ1bm5pbmcgb24gdGFyZ2V0CisjCitDVF9DQ19HQ0NfRU5BQkxFX1RBUkdFVF9PUFRTUEFDRT15CisjIENUX0NDX0dDQ19MSUJNVURGTEFQIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQkdPTVAgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCU1NQIGlzIG5vdCBzZXQKKworIworIyBNaXNjLiBvYnNjdXJlIG9wdGlvbnMuCisjCitDVF9DQ19DWEFfQVRFWElUPXkKKyMgQ1RfQ0NfR0NDX0RJU0FCTEVfUENIIGlzIG5vdCBzZXQKK0NUX0NDX0dDQ19TSkxKX0VYQ0VQVElPTlM9bQorQ1RfQ0NfR0NDX0xEQkxfMTI4PW0KKworIworIyBDLWxpYnJhcnkKKyMKK0NUX0xJQkM9ImdsaWJjIgorQ1RfTElCQ19WRVJTSU9OPSIyLjkiCisjIENUX0xJQkNfZWdsaWJjIGlzIG5vdCBzZXQKK0NUX0xJQkNfZ2xpYmM9eQorIyBDVF9MSUJDX3VDbGliYyBpcyBub3Qgc2V0CitDVF9MSUJDX2VnbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19nbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19HTElCQ19UQVJCQUxMPXkKKyMgQ1RfTElCQ19HTElCQ19WXzJfMTQgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX1ZfMl8xMyBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfVl8yXzEyXzIgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX1ZfMl8xMl8xIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19WXzJfMTFfMSBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfVl8yXzExIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19WXzJfMTBfMSBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX1ZfMl85PXkKKyMgQ1RfTElCQ19HTElCQ19WXzJfOCBpcyBub3Qgc2V0CitDVF9MSUJDX21pbmd3X0FWQUlMQUJMRT15CitDVF9MSUJDX25ld2xpYl9BVkFJTEFCTEU9eQorQ1RfTElCQ19ub25lX0FWQUlMQUJMRT15CitDVF9MSUJDX3VDbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19TVVBQT1JUX1RIUkVBRFNfQU5ZPXkKK0NUX0xJQkNfU1VQUE9SVF9OUFRMPXkKK0NUX1RIUkVBRFM9Im5wdGwiCisKKyMKKyMgQ29tbW9uIEMgbGlicmFyeSBvcHRpb25zCisjCitDVF9USFJFQURTX05QVEw9eQorIyBDVF9MSUJDX1hMREQgaXMgbm90IHNldAorQ1RfTElCQ19nbGliY19mYW1pbGx5PXkKK0NUX0xJQkNfR0xJQkNfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9MSUJDX0dMSUJDX0NPTkZJR1BBUk1TPSIiCitDVF9MSUJDX0dMSUJDX0VYVFJBX0NGTEFHUz0iIgorQ1RfTElCQ19FWFRSQV9DQ19BUkdTPSIiCisjIENUX0xJQkNfRU5BQkxFX0ZPUlRJRklFRF9CVUlMRCBpcyBub3Qgc2V0CisjIENUX0xJQkNfRElTQUJMRV9WRVJTSU9OSU5HIGlzIG5vdCBzZXQKK0NUX0xJQkNfT0xERVNUX0FCST0iIgorIyBDVF9MSUJDX0dMSUJDX0ZPUkNFX1VOV0lORCBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfVVNFX1BPUlRTIGlzIG5vdCBzZXQKK0NUX0xJQkNfQURET05TX0xJU1Q9IiIKKyMgQ1RfTElCQ19MT0NBTEVTIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9OT05FIGlzIG5vdCBzZXQKK0NUX0xJQkNfR0xJQkNfS0VSTkVMX1ZFUlNJT05fQVNfSEVBREVSUz15CisjIENUX0xJQkNfR0xJQkNfS0VSTkVMX1ZFUlNJT05fQ0hPU0VOIGlzIG5vdCBzZXQKK0NUX0xJQkNfR0xJQkNfTUlOX0tFUk5FTD0iMi42LjMzLjE5IgorCisjCisjIGdsaWJjIG90aGVyIG9wdGlvbnMKKyMKKworIworIyBEZWJ1ZyBmYWNpbGl0aWVzCisjCisjIENUX0RFQlVHX2RtYWxsb2MgaXMgbm90IHNldAorIyBDVF9ERUJVR19kdW1hIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfZ2RiIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfbHRyYWNlIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfc3RyYWNlIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzCisjCitDVF9DT01QTElCU19ORUVERUQ9eQorQ1RfR01QX05FRURFRD15CitDVF9NUEZSX05FRURFRD15CitDVF9DT01QTElCUz15CitDVF9HTVA9eQorQ1RfTVBGUj15CisjIENUX0dNUF9WXzVfMF8yIGlzIG5vdCBzZXQKKyMgQ1RfR01QX1ZfNV8wXzEgaXMgbm90IHNldAorQ1RfR01QX1ZfNF8zXzI9eQorIyBDVF9HTVBfVl80XzNfMSBpcyBub3Qgc2V0CisjIENUX0dNUF9WXzRfM18wIGlzIG5vdCBzZXQKK0NUX0dNUF9WRVJTSU9OPSI0LjMuMiIKKyMgQ1RfTVBGUl9WXzNfMF8xIGlzIG5vdCBzZXQKKyMgQ1RfTVBGUl9WXzNfMF8wIGlzIG5vdCBzZXQKKyMgQ1RfTVBGUl9WXzJfNF8yIGlzIG5vdCBzZXQKK0NUX01QRlJfVl8yXzRfMT15CisjIENUX01QRlJfVl8yXzRfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZFUlNJT049IjIuNC4xIgorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMgY29tbW9uIG9wdGlvbnMKKyMKKyMgQ1RfQ09NUExJQlNfQ0hFQ0sgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiB0b29scworIworCisjCisjIFJFQUQgSEVMUCBiZWZvcmUgeW91IHNheSAnWScgYmVsb3cgISEhCisjCisjIENUX0NPTVBfVE9PTFMgaXMgbm90IHNldAorCisjCisjIFRlc3Qgc3VpdGUKKyMKKyMgQ1RfVEVTVF9TVUlURV9HQ0MgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2k1ODYtbWluZ3czMm1zdmMsaTY4Ni1ub25lLWxpbnV4LWdudS9yZXBvcnRlZC5ieSBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9pNTg2LW1pbmd3MzJtc3ZjLGk2ODYtbm9uZS1saW51eC1nbnUvcmVwb3J0ZWQuYnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc0ZWUyMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9pNTg2LW1pbmd3MzJtc3ZjLGk2ODYtbm9uZS1saW51eC1nbnUvcmVwb3J0ZWQuYnkKQEAgLTAsMCArMSwzIEBACityZXBvcnRlcl9uYW1lPSIiCityZXBvcnRlcl91cmw9IiIKK3JlcG9ydGVyX2NvbW1lbnQ9IiIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9pNjg2LW5wdGwtbGludXgtZ251L2Nyb3NzdG9vbC5jb25maWcgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvaTY4Ni1ucHRsLWxpbnV4LWdudS9jcm9zc3Rvb2wuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNzQ5ODIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvaTY4Ni1ucHRsLWxpbnV4LWdudS9jcm9zc3Rvb2wuY29uZmlnCkBAIC0wLDAgKzEsNTE3IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIGNyb3NzdG9vbC1ORyBoZ19kZWZhdWx0QDI3MjFfN2I2NDc0NmIwYWIzIENvbmZpZ3VyYXRpb24KKyMgU3VuIE9jdCAxNiAxNzoyNzo0MiAyMDExCisjCitDVF9DT05GSUdVUkVfaGFzX3h6dXRpbHM9eQorQ1RfQ09ORklHVVJFX2hhc19jdnM9eQorQ1RfQ09ORklHVVJFX2hhc19zdm49eQorQ1RfTU9EVUxFUz15CisKKyMKKyMgUGF0aHMgYW5kIG1pc2Mgb3B0aW9ucworIworCisjCisjIGNyb3NzdG9vbC1ORyBiZWhhdmlvcgorIworIyBDVF9PQlNPTEVURSBpcyBub3Qgc2V0CitDVF9FWFBFUklNRU5UQUw9eQorIyBDVF9ERUJVR19DVCBpcyBub3Qgc2V0CisKKyMKKyMgUGF0aHMKKyMKK0NUX0xPQ0FMX1RBUkJBTExTX0RJUj0iJHtIT01FfS9zcmMiCitDVF9TQVZFX1RBUkJBTExTPXkKK0NUX1dPUktfRElSPSIke0NUX1RPUF9ESVJ9Ly5idWlsZCIKK0NUX1BSRUZJWF9ESVI9IiR7SE9NRX0veC10b29scy8ke0NUX1RBUkdFVH0iCitDVF9JTlNUQUxMX0RJUj0iJHtDVF9QUkVGSVhfRElSfSIKK0NUX1JNX1JGX1BSRUZJWF9ESVI9eQorQ1RfUkVNT1ZFX0RPQ1M9eQorQ1RfSU5TVEFMTF9ESVJfUk89eQorQ1RfU1RSSVBfQUxMX1RPT0xDSEFJTl9FWEVDVVRBQkxFUz15CisKKyMKKyMgRG93bmxvYWRpbmcKKyMKKyMgQ1RfRk9SQklEX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfRk9SQ0VfRE9XTkxPQUQgaXMgbm90IHNldAorQ1RfQ09OTkVDVF9USU1FT1VUPTEwCisjIENUX09OTFlfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9VU0VfTUlSUk9SIGlzIG5vdCBzZXQKKworIworIyBFeHRyYWN0aW5nCisjCisjIENUX0ZPUkNFX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfT1ZFUklERV9DT05GSUdfR1VFU1NfU1VCPXkKKyMgQ1RfT05MWV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX1BBVENIX0JVTkRMRUQ9eQorIyBDVF9QQVRDSF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9GQUxMQkFDS19MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0ZBTExCQUNLX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9OT05FIGlzIG5vdCBzZXQKK0NUX1BBVENIX09SREVSPSJidW5kbGVkIgorCisjCisjIEJ1aWxkIGJlaGF2aW9yCisjCitDVF9QQVJBTExFTF9KT0JTPTAKK0NUX0xPQUQ9MAorQ1RfVVNFX1BJUEVTPXkKK0NUX0VYVFJBX0ZMQUdTX0ZPUl9IT1NUPSIiCisjIENUX0NPTkZJR19TSEVMTF9TSCBpcyBub3Qgc2V0CisjIENUX0NPTkZJR19TSEVMTF9BU0ggaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMX0JBU0g9eQorIyBDVF9DT05GSUdfU0hFTExfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTD0iJHtiYXNofSIKKworIworIyBMb2dnaW5nCisjCisjIENUX0xPR19FUlJPUiBpcyBub3Qgc2V0CisjIENUX0xPR19XQVJOIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0lORk8gaXMgbm90IHNldAorQ1RfTE9HX0VYVFJBPXkKKyMgQ1RfTE9HX0FMTCBpcyBub3Qgc2V0CisjIENUX0xPR19ERUJVRyBpcyBub3Qgc2V0CitDVF9MT0dfTEVWRUxfTUFYPSJFWFRSQSIKKyMgQ1RfTE9HX1NFRV9UT09MU19XQVJOIGlzIG5vdCBzZXQKK0NUX0xPR19QUk9HUkVTU19CQVI9eQorQ1RfTE9HX1RPX0ZJTEU9eQorQ1RfTE9HX0ZJTEVfQ09NUFJFU1M9eQorCisjCisjIFRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIPSJ4ODYiCitDVF9BUkNIX1NVUFBPUlRTXzMyPXkKK0NUX0FSQ0hfU1VQUE9SVFNfNjQ9eQorQ1RfQVJDSF9TVVBQT1JUX0FSQ0g9eQorQ1RfQVJDSF9TVVBQT1JUX0NQVT15CitDVF9BUkNIX1NVUFBPUlRfVFVORT15CitDVF9BUkNIX0RFRkFVTFRfMzI9eQorQ1RfQVJDSF9BUkNIPSJpNjg2IgorQ1RfQVJDSF9DUFU9IiIKK0NUX0FSQ0hfVFVORT0iIgorQ1RfQVJDSF8zMj15CisjIENUX0FSQ0hfNjQgaXMgbm90IHNldAorQ1RfQVJDSF9CSVRORVNTPTMyCitDVF9BUkNIX0ZMT0FUX0hXPXkKKyMgQ1RfQVJDSF9GTE9BVF9TVyBpcyBub3Qgc2V0CitDVF9UQVJHRVRfQ0ZMQUdTPSIiCitDVF9UQVJHRVRfTERGTEFHUz0iIgorIyBDVF9BUkNIX2FscGhhIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9hcm0gaXMgbm90IHNldAorIyBDVF9BUkNIX2F2cjMyIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9ibGFja2ZpbiBpcyBub3Qgc2V0CisjIENUX0FSQ0hfbTY4ayBpcyBub3Qgc2V0CisjIENUX0FSQ0hfbWlwcyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfcG93ZXJwYyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfczM5MCBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc2ggaXMgbm90IHNldAorIyBDVF9BUkNIX3NwYXJjIGlzIG5vdCBzZXQKK0NUX0FSQ0hfeDg2PXkKK0NUX0FSQ0hfYWxwaGFfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXJtX0FWQUlMQUJMRT15CitDVF9BUkNIX2F2cjMyX0FWQUlMQUJMRT15CitDVF9BUkNIX2JsYWNrZmluX0FWQUlMQUJMRT15CitDVF9BUkNIX202OGtfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbWlwc19BVkFJTEFCTEU9eQorQ1RfQVJDSF9wb3dlcnBjX0FWQUlMQUJMRT15CitDVF9BUkNIX3MzOTBfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfc2hfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfc3BhcmNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfeDg2X0FWQUlMQUJMRT15CisKKyMKKyMgR2VuZXJpYyB0YXJnZXQgb3B0aW9ucworIworQ1RfQVJDSF9VU0VfTU1VPXkKKworIworIyBUYXJnZXQgb3B0aW1pc2F0aW9ucworIworCisjCisjIFRvb2xjaGFpbiBvcHRpb25zCisjCisKKyMKKyMgR2VuZXJhbCB0b29sY2hhaW4gb3B0aW9ucworIworQ1RfRk9SQ0VfU1lTUk9PVD15CitDVF9VU0VfU1lTUk9PVD15CitDVF9TWVNST09UX05BTUU9InN5c3Jvb3QiCitDVF9TWVNST09UX0RJUl9QUkVGSVg9IiIKK0NUX1dBTlRTX1NUQVRJQ19MSU5LPXkKKyMgQ1RfU1RBVElDX1RPT0xDSEFJTiBpcyBub3Qgc2V0CitDVF9UT09MQ0hBSU5fUEtHVkVSU0lPTj0iIgorQ1RfVE9PTENIQUlOX0JVR1VSTD0iIgorCisjCisjIFR1cGxlIGNvbXBsZXRpb24gYW5kIGFsaWFzaW5nCisjCitDVF9UQVJHRVRfVkVORE9SPSJucHRsIgorQ1RfVEFSR0VUX0FMSUFTX1NFRF9FWFBSPSIiCitDVF9UQVJHRVRfQUxJQVM9IiIKKworIworIyBUb29sY2hhaW4gdHlwZQorIworIyBDVF9OQVRJVkUgaXMgbm90IHNldAorQ1RfQ1JPU1M9eQorIyBDVF9DUk9TU19OQVRJVkUgaXMgbm90IHNldAorIyBDVF9DQU5BRElBTiBpcyBub3Qgc2V0CitDVF9UT09MQ0hBSU5fVFlQRT0iY3Jvc3MiCisKKyMKKyMgQnVpbGQgc3lzdGVtCisjCitDVF9CVUlMRD0iIgorQ1RfQlVJTERfUFJFRklYPSIiCitDVF9CVUlMRF9TVUZGSVg9IiIKKworIworIyBPcGVyYXRpbmcgU3lzdGVtCisjCitDVF9LRVJORUxfU1VQUE9SVFNfU0hBUkVEX0xJQlM9eQorQ1RfS0VSTkVMPSJsaW51eCIKK0NUX0tFUk5FTF9WRVJTSU9OPSIyLjYuMzYuNCIKKyMgQ1RfS0VSTkVMX2JhcmVfbWV0YWwgaXMgbm90IHNldAorQ1RfS0VSTkVMX2xpbnV4PXkKKyMgQ1RfS0VSTkVMX21pbmd3MzIgaXMgbm90IHNldAorQ1RfS0VSTkVMX2JhcmVfbWV0YWxfQVZBSUxBQkxFPXkKK0NUX0tFUk5FTF9saW51eF9BVkFJTEFCTEU9eQorIyBDVF9LRVJORUxfVl8zXzBfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8zIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzIgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zOV80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM4XzggaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzdfNiBpcyBub3Qgc2V0CitDVF9LRVJORUxfVl8yXzZfMzZfND15CisjIENUX0tFUk5FTF9WXzJfNl8zNV8xNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNF8xMCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zM18xOSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zMl80NiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zMV8xNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8yN181OSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9MSU5VWF9DVVNUT00gaXMgbm90IHNldAorQ1RfS0VSTkVMX21pbmd3MzJfQVZBSUxBQkxFPXkKKworIworIyBDb21tb24ga2VybmVsIG9wdGlvbnMKKyMKK0NUX1NIQVJFRF9MSUJTPXkKKworIworIyBsaW51eCBvdGhlciBvcHRpb25zCisjCitDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzA9eQorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzEgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzIgaXMgbm90IHNldAorQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0VfTEVWRUw9MAorQ1RfS0VSTkVMX0xJTlVYX0lOU1RBTExfQ0hFQ0s9eQorCisjCisjIEJpbmFyeSB1dGlsaXRpZXMKKyMKK0NUX0FSQ0hfQklORk1UX0VMRj15CisKKyMKKyMgR05VIGJpbnV0aWxzCisjCisjIENUX0JJTlVUSUxTX1ZfMl8yMV81MyBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WXzJfMjFfMWE9eQorIyBDVF9CSU5VVElMU19WXzJfMjBfMWEgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19WXzJfMTlfMWEgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19WXzJfMThhIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX1ZFUlNJT049IjIuMjEuMWEiCitDVF9CSU5VVElMU18yXzIxX29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMjBfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfMl8xOV9vcl9sYXRlcj15CitDVF9CSU5VVElMU18yXzE4X29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTX0hBU19HT0xEPXkKK0NUX0JJTlVUSUxTX0dPTERfU1VQUE9SVFNfQVJDSD15CitDVF9CSU5VVElMU19IQVNfUExVR0lOUz15CitDVF9CSU5VVElMU19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQklOVVRJTFNfRk9SQ0VfTERfQkZEPXkKKyMgQ1RfQklOVVRJTFNfTElOS0VSX0xEIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX0xJTktFUl9MRF9HT0xEPXkKKyMgQ1RfQklOVVRJTFNfTElOS0VSX0dPTERfTEQgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfR09MRF9JTlNUQUxMRUQ9eQorQ1RfQklOVVRJTFNfR09MRF9USFJFQURTPXkKK0NUX0JJTlVUSUxTX0xJTktFUl9CT1RIPXkKK0NUX0JJTlVUSUxTX0xJTktFUlNfTElTVD0ibGQsZ29sZCIKK0NUX0JJTlVUSUxTX0xEX1dSQVBQRVI9eQorQ1RfQklOVVRJTFNfTElOS0VSX0RFRkFVTFQ9ImJmZCIKK0NUX0JJTlVUSUxTX1BMVUdJTlM9eQorQ1RfQklOVVRJTFNfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9CSU5VVElMU19GT1JfVEFSR0VUPXkKK0NUX0JJTlVUSUxTX0ZPUl9UQVJHRVRfSUJFUlRZPXkKK0NUX0JJTlVUSUxTX0ZPUl9UQVJHRVRfQkZEPXkKKworIworIyBDIGNvbXBpbGVyCisjCitDVF9DQz0iZ2NjIgorQ1RfQ0NfVkVSU0lPTj0iNC41LjIiCitDVF9DQ19nY2M9eQorIyBDVF9DQ19HQ0NfU0hPV19MSU5BUk8gaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNl8xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzZfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF81XzMgaXMgbm90IHNldAorQ1RfQ0NfVl80XzVfMj15CisjIENUX0NDX1ZfNF81XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzYgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM181IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzMgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18yIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8yXzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfMl8yIGlzIG5vdCBzZXQKK0NUX0NDX0dDQ180XzJfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDXzRfM19vcl9sYXRlcj15CitDVF9DQ19HQ0NfNF80X29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzU9eQorQ1RfQ0NfR0NDXzRfNV9vcl9sYXRlcj15CitDVF9DQ19HQ0NfSEFTX0dSQVBISVRFPXkKK0NUX0NDX0dDQ19IQVNfTFRPPXkKK0NUX0NDX0dDQ19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQ0NfR0NDX0hBU19CVUlMRF9JRD15CitDVF9DQ19HQ0NfRU5BQkxFX1BMVUdJTlM9eQorQ1RfQ0NfR0NDX0dPTEQ9eQorQ1RfQ0NfR0NDX1VTRV9HTVBfTVBGUj15CitDVF9DQ19HQ0NfVVNFX1BQTF9DTE9PRz15CitDVF9DQ19HQ0NfVVNFX01QQz15CitDVF9DQ19HQ0NfVVNFX0xJQkVMRj15CitDVF9DQ19MQU5HX0pBVkFfVVNFX0VDSj15CitDVF9DQ19MQU5HX0ZPUlRSQU49eQorQ1RfQ0NfU1VQUE9SVF9DWFg9eQorQ1RfQ0NfU1VQUE9SVF9GT1JUUkFOPXkKK0NUX0NDX1NVUFBPUlRfSkFWQT15CitDVF9DQ19TVVBQT1JUX0FEQT15CitDVF9DQ19TVVBQT1JUX09CSkM9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDWFg9eQorCisjCisjIEFkZGl0aW9uYWwgc3VwcG9ydGVkIGxhbmd1YWdlczoKKyMKK0NUX0NDX0xBTkdfQ1hYPXkKK0NUX0NDX0xBTkdfSkFWQT15CisjIENUX0NDX0xBTkdfQURBIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfTEFOR19PQkpDIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfTEFOR19PQkpDWFggaXMgbm90IHNldAorQ1RfQ0NfTEFOR19PVEhFUlM9IiIKKworIworIyBnY2Mgb3RoZXIgb3B0aW9ucworIworQ1RfQ0NfRU5BQkxFX0NYWF9GTEFHUz0iIgorQ1RfQ0NfQ09SRV9FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0NDX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfQ0NfU1RBVElDX0xJQlNURENYWD15CisKKyMKKyMgT3B0aW1pc2F0aW9uIGZlYXR1cmVzCisjCitDVF9DQ19HQ0NfVVNFX0dSQVBISVRFPXkKK0NUX0NDX0dDQ19VU0VfTFRPPXkKKworIworIyBTZXR0aW5ncyBmb3IgbGlicmFyaWVzIHJ1bm5pbmcgb24gdGFyZ2V0CisjCitDVF9DQ19HQ0NfRU5BQkxFX1RBUkdFVF9PUFRTUEFDRT15CisjIENUX0NDX0dDQ19MSUJNVURGTEFQIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQkdPTVAgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCU1NQIGlzIG5vdCBzZXQKKworIworIyBNaXNjLiBvYnNjdXJlIG9wdGlvbnMuCisjCitDVF9DQ19DWEFfQVRFWElUPXkKKyMgQ1RfQ0NfR0NDX0RJU0FCTEVfUENIIGlzIG5vdCBzZXQKK0NUX0NDX0dDQ19TSkxKX0VYQ0VQVElPTlM9bQorQ1RfQ0NfR0NDX0xEQkxfMTI4PW0KKyMgQ1RfQ0NfR0NDX0JVSUxEX0lEIGlzIG5vdCBzZXQKKworIworIyBDLWxpYnJhcnkKKyMKK0NUX0xJQkM9ImdsaWJjIgorQ1RfTElCQ19WRVJTSU9OPSIyLjkiCisjIENUX0xJQkNfZWdsaWJjIGlzIG5vdCBzZXQKK0NUX0xJQkNfZ2xpYmM9eQorIyBDVF9MSUJDX3VDbGliYyBpcyBub3Qgc2V0CitDVF9MSUJDX2VnbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19nbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19HTElCQ19UQVJCQUxMPXkKKyMgQ1RfTElCQ19HTElCQ19WXzJfMTQgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX1ZfMl8xMyBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfVl8yXzEyXzIgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX1ZfMl8xMl8xIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19WXzJfMTFfMSBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfVl8yXzExIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19WXzJfMTBfMSBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX1ZfMl85PXkKKyMgQ1RfTElCQ19HTElCQ19WXzJfOCBpcyBub3Qgc2V0CitDVF9MSUJDX21pbmd3X0FWQUlMQUJMRT15CitDVF9MSUJDX25ld2xpYl9BVkFJTEFCTEU9eQorQ1RfTElCQ19ub25lX0FWQUlMQUJMRT15CitDVF9MSUJDX3VDbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19TVVBQT1JUX1RIUkVBRFNfQU5ZPXkKK0NUX0xJQkNfU1VQUE9SVF9OUFRMPXkKK0NUX1RIUkVBRFM9Im5wdGwiCisKKyMKKyMgQ29tbW9uIEMgbGlicmFyeSBvcHRpb25zCisjCitDVF9USFJFQURTX05QVEw9eQorQ1RfTElCQ19YTEREPXkKK0NUX0xJQkNfZ2xpYmNfZmFtaWxseT15CitDVF9MSUJDX0dMSUJDX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfTElCQ19HTElCQ19DT05GSUdQQVJNUz0iIgorQ1RfTElCQ19HTElCQ19FWFRSQV9DRkxBR1M9IiIKK0NUX0xJQkNfRVhUUkFfQ0NfQVJHUz0iIgorIyBDVF9MSUJDX0VOQUJMRV9GT1JUSUZJRURfQlVJTEQgaXMgbm90IHNldAorIyBDVF9MSUJDX0RJU0FCTEVfVkVSU0lPTklORyBpcyBub3Qgc2V0CitDVF9MSUJDX09MREVTVF9BQkk9IiIKKyMgQ1RfTElCQ19HTElCQ19GT1JDRV9VTldJTkQgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX1VTRV9QT1JUUyBpcyBub3Qgc2V0CitDVF9MSUJDX0FERE9OU19MSVNUPSIiCisjIENUX0xJQkNfTE9DQUxFUyBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfS0VSTkVMX1ZFUlNJT05fTk9ORSBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX0FTX0hFQURFUlM9eQorIyBDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX0NIT1NFTiBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX01JTl9LRVJORUw9IjIuNi4zNi40IgorCisjCisjIGdsaWJjIG90aGVyIG9wdGlvbnMKKyMKKworIworIyBEZWJ1ZyBmYWNpbGl0aWVzCisjCitDVF9ERUJVR19kbWFsbG9jPXkKK0NUX0RNQUxMT0NfVl81XzVfMj15CitDVF9ETUFMTE9DX1ZFUlNJT049IjUuNS4yIgorQ1RfREVCVUdfZHVtYT15CitDVF9EVU1BX0E9eQorQ1RfRFVNQV9TTz15CitDVF9EVU1BX1ZfMl81XzE1PXkKK0NUX0RVTUFfVkVSU0lPTj0iMl81XzE1IgorQ1RfREVCVUdfZ2RiPXkKK0NUX0dEQl9DUk9TUz15CisjIENUX0dEQl9DUk9TU19TVEFUSUMgaXMgbm90IHNldAorQ1RfR0RCX0NST1NTX1BZVEhPTj15CitDVF9HREJfTkFUSVZFPXkKKyMgQ1RfR0RCX05BVElWRV9TVEFUSUMgaXMgbm90IHNldAorQ1RfR0RCX0dEQlNFUlZFUj15CitDVF9HREJfR0RCU0VSVkVSX1NUQVRJQz15CisKKyMKKyMgZ2RiIHZlcnNpb24KKyMKKyMgQ1RfREVCVUdfR0RCX1NIT1dfTElOQVJPIGlzIG5vdCBzZXQKKyMgQ1RfR0RCX1ZfN18zYSBpcyBub3Qgc2V0CisjIENUX0dEQl9WXzdfMmEgaXMgbm90IHNldAorIyBDVF9HREJfVl83XzFhIGlzIG5vdCBzZXQKKyMgQ1RfR0RCX1ZfN18wXzFhIGlzIG5vdCBzZXQKKyMgQ1RfR0RCX1ZfN18wYSBpcyBub3Qgc2V0CitDVF9HREJfVl82XzhhPXkKK0NUX0dEQl9WRVJTSU9OPSI2LjhhIgorQ1RfREVCVUdfbHRyYWNlPXkKK0NUX0xUUkFDRV9WXzBfNV8zPXkKKyMgQ1RfTFRSQUNFX1ZfMF81XzIgaXMgbm90IHNldAorQ1RfTFRSQUNFX1ZFUlNJT049IjAuNS4zIgorQ1RfTFRSQUNFXzBfNV8zX29yX2xhdGVyPXkKK0NUX0RFQlVHX3N0cmFjZT15CisjIENUX1NUUkFDRV9WXzRfNV8yMCBpcyBub3Qgc2V0CitDVF9TVFJBQ0VfVl80XzVfMTk9eQorIyBDVF9TVFJBQ0VfVl80XzVfMTggaXMgbm90IHNldAorQ1RfU1RSQUNFX1ZFUlNJT049IjQuNS4xOSIKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzCisjCitDVF9DT01QTElCU19ORUVERUQ9eQorQ1RfR01QX05FRURFRD15CitDVF9NUEZSX05FRURFRD15CitDVF9QUExfTkVFREVEPXkKK0NUX0NMT09HX05FRURFRD15CitDVF9NUENfTkVFREVEPXkKK0NUX0xJQkVMRl9ORUVERUQ9eQorQ1RfQ09NUExJQlM9eQorQ1RfR01QPXkKK0NUX01QRlI9eQorQ1RfUFBMPXkKK0NUX0NMT09HPXkKK0NUX01QQz15CitDVF9MSUJFTEY9eQorQ1RfTElCRUxGX1RBUkdFVD15CisjIENUX0dNUF9WXzVfMF8yIGlzIG5vdCBzZXQKKyMgQ1RfR01QX1ZfNV8wXzEgaXMgbm90IHNldAorQ1RfR01QX1ZfNF8zXzI9eQorIyBDVF9HTVBfVl80XzNfMSBpcyBub3Qgc2V0CisjIENUX0dNUF9WXzRfM18wIGlzIG5vdCBzZXQKK0NUX0dNUF9WRVJTSU9OPSI0LjMuMiIKKyMgQ1RfTVBGUl9WXzNfMF8xIGlzIG5vdCBzZXQKKyMgQ1RfTVBGUl9WXzNfMF8wIGlzIG5vdCBzZXQKK0NUX01QRlJfVl8yXzRfMj15CisjIENUX01QRlJfVl8yXzRfMSBpcyBub3Qgc2V0CisjIENUX01QRlJfVl8yXzRfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZFUlNJT049IjIuNC4yIgorIyBDVF9QUExfVl8wXzExXzIgaXMgbm90IHNldAorIyBDVF9QUExfVl8wXzExXzEgaXMgbm90IHNldAorIyBDVF9QUExfVl8wXzExIGlzIG5vdCBzZXQKK0NUX1BQTF9WXzBfMTBfMj15CitDVF9QUExfVkVSU0lPTj0iMC4xMC4yIgorIyBDVF9DTE9PR19WXzBfMTVfMTEgaXMgbm90IHNldAorIyBDVF9DTE9PR19WXzBfMTVfMTAgaXMgbm90IHNldAorQ1RfQ0xPT0dfVl8wXzE1Xzk9eQorIyBDVF9DTE9PR19WXzBfMTVfOCBpcyBub3Qgc2V0CisjIENUX0NMT09HX1ZfMF8xNV83IGlzIG5vdCBzZXQKKyMgQ1RfQ0xPT0dfVl8wXzE1XzYgaXMgbm90IHNldAorQ1RfQ0xPT0dfVkVSU0lPTj0iMC4xNS45IgorIyBDVF9NUENfVl8wXzkgaXMgbm90IHNldAorQ1RfTVBDX1ZfMF84XzI9eQorIyBDVF9NUENfVl8wXzhfMSBpcyBub3Qgc2V0CisjIENUX01QQ19WXzBfNyBpcyBub3Qgc2V0CitDVF9NUENfVkVSU0lPTj0iMC44LjIiCitDVF9MSUJFTEZfVl8wXzhfMTM9eQorIyBDVF9MSUJFTEZfVl8wXzhfMTIgaXMgbm90IHNldAorQ1RfTElCRUxGX1ZFUlNJT049IjAuOC4xMyIKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzIGNvbW1vbiBvcHRpb25zCisjCisjIENUX0NPTVBMSUJTX0NIRUNLIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gdG9vbHMKKyMKKworIworIyBSRUFEIEhFTFAgYmVmb3JlIHlvdSBzYXkgJ1knIGJlbG93ICEhIQorIworIyBDVF9DT01QX1RPT0xTIGlzIG5vdCBzZXQKKworIworIyBUZXN0IHN1aXRlCisjCitDVF9URVNUX1NVSVRFPXkKK0NUX1RFU1RfU1VJVEVfR0NDPXkKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9pNjg2LW5wdGwtbGludXgtZ251L3JlcG9ydGVkLmJ5IGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2k2ODYtbnB0bC1saW51eC1nbnUvcmVwb3J0ZWQuYnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhOGYxNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9pNjg2LW5wdGwtbGludXgtZ251L3JlcG9ydGVkLmJ5CkBAIC0wLDAgKzEsMyBAQAorcmVwb3J0ZXJfbmFtZT0iWUVNIgorcmVwb3J0ZXJfdXJsPSJodHRwOi8veW1vcmluLmlzLWEtZ2Vlay5vcmcvIgorcmVwb3J0ZXJfY29tbWVudD0iIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2k2ODYtcGMtbWluZ3czMi9jcm9zc3Rvb2wuY29uZmlnIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2k2ODYtcGMtbWluZ3czMi9jcm9zc3Rvb2wuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNjExZWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvaTY4Ni1wYy1taW5ndzMyL2Nyb3NzdG9vbC5jb25maWcKQEAgLTAsMCArMSw0MTQgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgY3Jvc3N0b29sLU5HIGhnX2RlZmF1bHRAMjcyMV83YjY0NzQ2YjBhYjMgQ29uZmlndXJhdGlvbgorIyBTdW4gT2N0IDE2IDE3OjI4OjAxIDIwMTEKKyMKK0NUX0NPTkZJR1VSRV9oYXNfeHp1dGlscz15CitDVF9DT05GSUdVUkVfaGFzX2N2cz15CitDVF9DT05GSUdVUkVfaGFzX3N2bj15CitDVF9NT0RVTEVTPXkKKworIworIyBQYXRocyBhbmQgbWlzYyBvcHRpb25zCisjCisKKyMKKyMgY3Jvc3N0b29sLU5HIGJlaGF2aW9yCisjCisjIENUX09CU09MRVRFIGlzIG5vdCBzZXQKK0NUX0VYUEVSSU1FTlRBTD15CisjIENUX0RFQlVHX0NUIGlzIG5vdCBzZXQKKworIworIyBQYXRocworIworQ1RfTE9DQUxfVEFSQkFMTFNfRElSPSIke0hPTUV9L3NyYyIKK0NUX1NBVkVfVEFSQkFMTFM9eQorQ1RfV09SS19ESVI9IiR7Q1RfVE9QX0RJUn0vLmJ1aWxkIgorQ1RfUFJFRklYX0RJUj0iJHtIT01FfS94LXRvb2xzLyR7Q1RfVEFSR0VUfSIKK0NUX0lOU1RBTExfRElSPSIke0NUX1BSRUZJWF9ESVJ9IgorQ1RfUk1fUkZfUFJFRklYX0RJUj15CitDVF9SRU1PVkVfRE9DUz15CitDVF9JTlNUQUxMX0RJUl9STz15CitDVF9TVFJJUF9BTExfVE9PTENIQUlOX0VYRUNVVEFCTEVTPXkKKworIworIyBEb3dubG9hZGluZworIworIyBDVF9GT1JCSURfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9GT1JDRV9ET1dOTE9BRCBpcyBub3Qgc2V0CitDVF9DT05ORUNUX1RJTUVPVVQ9MTAKKyMgQ1RfT05MWV9ET1dOTE9BRCBpcyBub3Qgc2V0CisjIENUX1VTRV9NSVJST1IgaXMgbm90IHNldAorCisjCisjIEV4dHJhY3RpbmcKKyMKKyMgQ1RfRk9SQ0VfRVhUUkFDVCBpcyBub3Qgc2V0CitDVF9PVkVSSURFX0NPTkZJR19HVUVTU19TVUI9eQorIyBDVF9PTkxZX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfUEFUQ0hfQlVORExFRD15CisjIENUX1BBVENIX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9CVU5ETEVEX0ZBTExCQUNLX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTE9DQUxfRkFMTEJBQ0tfQlVORExFRCBpcyBub3Qgc2V0CisjIENUX1BBVENIX05PTkUgaXMgbm90IHNldAorQ1RfUEFUQ0hfT1JERVI9ImJ1bmRsZWQiCisKKyMKKyMgQnVpbGQgYmVoYXZpb3IKKyMKK0NUX1BBUkFMTEVMX0pPQlM9MAorQ1RfTE9BRD0wCitDVF9VU0VfUElQRVM9eQorQ1RfRVhUUkFfRkxBR1NfRk9SX0hPU1Q9IiIKKyMgQ1RfQ09ORklHX1NIRUxMX1NIIGlzIG5vdCBzZXQKKyMgQ1RfQ09ORklHX1NIRUxMX0FTSCBpcyBub3Qgc2V0CitDVF9DT05GSUdfU0hFTExfQkFTSD15CisjIENUX0NPTkZJR19TSEVMTF9DVVNUT00gaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMPSIke2Jhc2h9IgorCisjCisjIExvZ2dpbmcKKyMKKyMgQ1RfTE9HX0VSUk9SIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX1dBUk4gaXMgbm90IHNldAorIyBDVF9MT0dfSU5GTyBpcyBub3Qgc2V0CitDVF9MT0dfRVhUUkE9eQorIyBDVF9MT0dfQUxMIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0RFQlVHIGlzIG5vdCBzZXQKK0NUX0xPR19MRVZFTF9NQVg9IkVYVFJBIgorIyBDVF9MT0dfU0VFX1RPT0xTX1dBUk4gaXMgbm90IHNldAorQ1RfTE9HX1BST0dSRVNTX0JBUj15CitDVF9MT0dfVE9fRklMRT15CitDVF9MT0dfRklMRV9DT01QUkVTUz15CisKKyMKKyMgVGFyZ2V0IG9wdGlvbnMKKyMKK0NUX0FSQ0g9Ing4NiIKK0NUX0FSQ0hfU1VQUE9SVFNfMzI9eQorQ1RfQVJDSF9TVVBQT1JUU182ND15CitDVF9BUkNIX1NVUFBPUlRfQVJDSD15CitDVF9BUkNIX1NVUFBPUlRfQ1BVPXkKK0NUX0FSQ0hfU1VQUE9SVF9UVU5FPXkKK0NUX0FSQ0hfREVGQVVMVF8zMj15CitDVF9BUkNIX0FSQ0g9Imk2ODYiCitDVF9BUkNIX0NQVT0iIgorQ1RfQVJDSF9UVU5FPSIiCitDVF9BUkNIXzMyPXkKKyMgQ1RfQVJDSF82NCBpcyBub3Qgc2V0CitDVF9BUkNIX0JJVE5FU1M9MzIKK0NUX0FSQ0hfRkxPQVRfSFc9eQorIyBDVF9BUkNIX0ZMT0FUX1NXIGlzIG5vdCBzZXQKK0NUX1RBUkdFVF9DRkxBR1M9IiIKK0NUX1RBUkdFVF9MREZMQUdTPSIiCisjIENUX0FSQ0hfYWxwaGEgaXMgbm90IHNldAorIyBDVF9BUkNIX2FybSBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYXZyMzIgaXMgbm90IHNldAorIyBDVF9BUkNIX2JsYWNrZmluIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9tNjhrIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9taXBzIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9wb3dlcnBjIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zMzkwIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zaCBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc3BhcmMgaXMgbm90IHNldAorQ1RfQVJDSF94ODY9eQorQ1RfQVJDSF9hbHBoYV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hcm1fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXZyMzJfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYmxhY2tmaW5fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbTY4a19BVkFJTEFCTEU9eQorQ1RfQVJDSF9taXBzX0FWQUlMQUJMRT15CitDVF9BUkNIX3Bvd2VycGNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfczM5MF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zaF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zcGFyY19BVkFJTEFCTEU9eQorQ1RfQVJDSF94ODZfQVZBSUxBQkxFPXkKKworIworIyBHZW5lcmljIHRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIX1VTRV9NTVU9eQorCisjCisjIFRhcmdldCBvcHRpbWlzYXRpb25zCisjCisKKyMKKyMgVG9vbGNoYWluIG9wdGlvbnMKKyMKKworIworIyBHZW5lcmFsIHRvb2xjaGFpbiBvcHRpb25zCisjCitDVF9GT1JDRV9TWVNST09UPXkKK0NUX1VTRV9TWVNST09UPXkKK0NUX1NZU1JPT1RfTkFNRT0ic3lzcm9vdCIKK0NUX1NZU1JPT1RfRElSX1BSRUZJWD0iIgorQ1RfV0FOVFNfU1RBVElDX0xJTks9eQorIyBDVF9TVEFUSUNfVE9PTENIQUlOIGlzIG5vdCBzZXQKK0NUX1RPT0xDSEFJTl9QS0dWRVJTSU9OPSIiCitDVF9UT09MQ0hBSU5fQlVHVVJMPSIiCisKKyMKKyMgVHVwbGUgY29tcGxldGlvbiBhbmQgYWxpYXNpbmcKKyMKK0NUX1RBUkdFVF9WRU5ET1I9InBjIgorQ1RfVEFSR0VUX0FMSUFTX1NFRF9FWFBSPSIiCitDVF9UQVJHRVRfQUxJQVM9IiIKKworIworIyBUb29sY2hhaW4gdHlwZQorIworIyBDVF9OQVRJVkUgaXMgbm90IHNldAorQ1RfQ1JPU1M9eQorIyBDVF9DUk9TU19OQVRJVkUgaXMgbm90IHNldAorIyBDVF9DQU5BRElBTiBpcyBub3Qgc2V0CitDVF9UT09MQ0hBSU5fVFlQRT0iY3Jvc3MiCisKKyMKKyMgQnVpbGQgc3lzdGVtCisjCitDVF9CVUlMRD0iIgorQ1RfQlVJTERfUFJFRklYPSIiCitDVF9CVUlMRF9TVUZGSVg9IiIKKworIworIyBPcGVyYXRpbmcgU3lzdGVtCisjCitDVF9NSU5HVzMyPXkKK0NUX0tFUk5FTD0ibWluZ3czMiIKKyMgQ1RfS0VSTkVMX2JhcmVfbWV0YWwgaXMgbm90IHNldAorIyBDVF9LRVJORUxfbGludXggaXMgbm90IHNldAorQ1RfS0VSTkVMX21pbmd3MzI9eQorQ1RfS0VSTkVMX2JhcmVfbWV0YWxfQVZBSUxBQkxFPXkKK0NUX0tFUk5FTF9saW51eF9BVkFJTEFCTEU9eQorQ1RfS0VSTkVMX21pbmd3MzJfQVZBSUxBQkxFPXkKK0NUX1czMkFQSV9WXzNfMTQ9eQorIyBDVF9XMzJBUElfVl9zZWxlY3QgaXMgbm90IHNldAorQ1RfVzMyQVBJX1ZFUlNJT049IjMuMTQiCisKKyMKKyMgQ29tbW9uIGtlcm5lbCBvcHRpb25zCisjCisKKyMKKyMgQmluYXJ5IHV0aWxpdGllcworIworQ1RfQVJDSF9CSU5GTVRfRUxGPXkKKworIworIyBHTlUgYmludXRpbHMKKyMKKyMgQ1RfQklOVVRJTFNfVl8yXzIxXzUzIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX1ZfMl8yMV8xYT15CisjIENUX0JJTlVUSUxTX1ZfMl8yMF8xYSBpcyBub3Qgc2V0CisjIENUX0JJTlVUSUxTX1ZfMl8xOV8xYSBpcyBub3Qgc2V0CisjIENUX0JJTlVUSUxTX1ZfMl8xOGEgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVkVSU0lPTj0iMi4yMS4xYSIKK0NUX0JJTlVUSUxTXzJfMjFfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfMl8yMF9vcl9sYXRlcj15CitDVF9CSU5VVElMU18yXzE5X29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMThfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfSEFTX0dPTEQ9eQorQ1RfQklOVVRJTFNfR09MRF9TVVBQT1JUU19BUkNIPXkKK0NUX0JJTlVUSUxTX0hBU19QTFVHSU5TPXkKK0NUX0JJTlVUSUxTX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9CSU5VVElMU19MSU5LRVJfTEQ9eQorIyBDVF9CSU5VVElMU19MSU5LRVJfR09MRCBpcyBub3Qgc2V0CisjIENUX0JJTlVUSUxTX0xJTktFUl9MRF9HT0xEIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfTElOS0VSX0dPTERfTEQgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfTElOS0VSU19MSVNUPSJsZCIKK0NUX0JJTlVUSUxTX0xJTktFUl9ERUZBVUxUPSJiZmQiCitDVF9CSU5VVElMU19QTFVHSU5TPXkKK0NUX0JJTlVUSUxTX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorIyBDVF9CSU5VVElMU19GT1JfVEFSR0VUIGlzIG5vdCBzZXQKKworIworIyBDIGNvbXBpbGVyCisjCitDVF9DQz0iZ2NjIgorQ1RfQ0NfVkVSU0lPTj0iNC40LjUiCitDVF9DQ19nY2M9eQorIyBDVF9DQ19HQ0NfU0hPV19MSU5BUk8gaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNl8xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzZfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF81XzMgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8yIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF81XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF82IGlzIG5vdCBzZXQKK0NUX0NDX1ZfNF80XzU9eQorIyBDVF9DQ19WXzRfNF80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzYgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM181IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzMgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18yIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8yXzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfMl8yIGlzIG5vdCBzZXQKK0NUX0NDX0dDQ180XzJfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDXzRfM19vcl9sYXRlcj15CitDVF9DQ19HQ0NfNF80PXkKK0NUX0NDX0dDQ180XzRfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDX0hBU19HUkFQSElURT15CitDVF9DQ19HQ0NfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0NDX0dDQ19FTkFCTEVfUExVR0lOUz15CitDVF9DQ19HQ0NfVVNFX0dNUF9NUEZSPXkKK0NUX0NDX0dDQ19VU0VfUFBMX0NMT09HPXkKKyMgQ1RfQ0NfTEFOR19GT1JUUkFOIGlzIG5vdCBzZXQKK0NUX0NDX1NVUFBPUlRfQ1hYPXkKK0NUX0NDX1NVUFBPUlRfRk9SVFJBTj15CitDVF9DQ19TVVBQT1JUX0pBVkE9eQorQ1RfQ0NfU1VQUE9SVF9BREE9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDPXkKK0NUX0NDX1NVUFBPUlRfT0JKQ1hYPXkKKworIworIyBBZGRpdGlvbmFsIHN1cHBvcnRlZCBsYW5ndWFnZXM6CisjCitDVF9DQ19MQU5HX0NYWD15CisjIENUX0NDX0xBTkdfSkFWQSBpcyBub3Qgc2V0CisjIENUX0NDX0xBTkdfQURBIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfTEFOR19PQkpDIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfTEFOR19PQkpDWFggaXMgbm90IHNldAorQ1RfQ0NfTEFOR19PVEhFUlM9IiIKKworIworIyBnY2Mgb3RoZXIgb3B0aW9ucworIworQ1RfQ0NfRU5BQkxFX0NYWF9GTEFHUz0iIgorQ1RfQ0NfQ09SRV9FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0NDX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfQ0NfU1RBVElDX0xJQlNURENYWD15CisKKyMKKyMgT3B0aW1pc2F0aW9uIGZlYXR1cmVzCisjCitDVF9DQ19HQ0NfVVNFX0dSQVBISVRFPXkKKworIworIyBTZXR0aW5ncyBmb3IgbGlicmFyaWVzIHJ1bm5pbmcgb24gdGFyZ2V0CisjCitDVF9DQ19HQ0NfRU5BQkxFX1RBUkdFVF9PUFRTUEFDRT15CisjIENUX0NDX0dDQ19MSUJNVURGTEFQIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQkdPTVAgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCU1NQIGlzIG5vdCBzZXQKKworIworIyBNaXNjLiBvYnNjdXJlIG9wdGlvbnMuCisjCitDVF9DQ19DWEFfQVRFWElUPXkKKyMgQ1RfQ0NfR0NDX0RJU0FCTEVfUENIIGlzIG5vdCBzZXQKK0NUX0NDX0dDQ19TSkxKX0VYQ0VQVElPTlM9bQorQ1RfQ0NfR0NDX0xEQkxfMTI4PW0KKworIworIyBDLWxpYnJhcnkKKyMKK0NUX0xJQkM9Im1pbmd3IgorQ1RfTElCQ19taW5ndz15CitDVF9MSUJDX2VnbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19nbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19taW5nd19BVkFJTEFCTEU9eQorQ1RfTUlOR1dSVF9WXzNfMTg9eQorIyBDVF9NSU5HV1JUX1Zfc2VsZWN0IGlzIG5vdCBzZXQKK0NUX01JTkdXUlRfVkVSU0lPTj0iMy4xOCIKK0NUX0xJQkNfbmV3bGliX0FWQUlMQUJMRT15CitDVF9MSUJDX25vbmVfQVZBSUxBQkxFPXkKK0NUX0xJQkNfdUNsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX1NVUFBPUlRfVEhSRUFEU19BTlk9eQorQ1RfTElCQ19TVVBQT1JUX1dJTjMyVEhSRUFEUz15CitDVF9USFJFQURTPSJ3aW4zMiIKKworIworIyBDb21tb24gQyBsaWJyYXJ5IG9wdGlvbnMKKyMKK0NUX1RIUkVBRFNfV0lOMzJUSFJFQURTPXkKKworIworIyBtaW5ndyBvdGhlciBvcHRpb25zCisjCitDVF9NSU5HV19ESVJFQ1RYPXkKK0NUX01JTkdXX09QRU5HTD15CitDVF9NSU5HV19QRENVUlNFUz15CitDVF9NSU5HV19QRENVUlNFU19WXzNfND15CisjIENUX01JTkdXX1BEQ1VSU0VTX1Zfc2VsZWN0IGlzIG5vdCBzZXQKK0NUX01JTkdXX1BEQ1VSU0VTX1ZFUlNJT049IjMuNCIKK0NUX01JTkdXX0dOVVJYPXkKK0NUX01JTkdXX0dOVVJYX1ZfMl81XzE9eQorIyBDVF9NSU5HV19HTlVSWF9WX3NlbGVjdCBpcyBub3Qgc2V0CitDVF9NSU5HV19HTlVSWF9WRVJTSU9OPSIyLjUuMSIKKworIworIyBEZWJ1ZyBmYWNpbGl0aWVzCisjCisjIENUX0RFQlVHX2RtYWxsb2MgaXMgbm90IHNldAorIyBDVF9ERUJVR19kdW1hIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfZ2RiIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfbHRyYWNlIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfc3RyYWNlIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzCisjCitDVF9DT01QTElCU19ORUVERUQ9eQorQ1RfR01QX05FRURFRD15CitDVF9NUEZSX05FRURFRD15CitDVF9QUExfTkVFREVEPXkKK0NUX0NMT09HX05FRURFRD15CitDVF9DT01QTElCUz15CitDVF9HTVA9eQorQ1RfTVBGUj15CitDVF9QUEw9eQorQ1RfQ0xPT0c9eQorIyBDVF9HTVBfVl81XzBfMiBpcyBub3Qgc2V0CisjIENUX0dNUF9WXzVfMF8xIGlzIG5vdCBzZXQKK0NUX0dNUF9WXzRfM18yPXkKKyMgQ1RfR01QX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9HTVBfVl80XzNfMCBpcyBub3Qgc2V0CitDVF9HTVBfVkVSU0lPTj0iNC4zLjIiCisjIENUX01QRlJfVl8zXzBfMSBpcyBub3Qgc2V0CisjIENUX01QRlJfVl8zXzBfMCBpcyBub3Qgc2V0CisjIENUX01QRlJfVl8yXzRfMiBpcyBub3Qgc2V0CitDVF9NUEZSX1ZfMl80XzE9eQorIyBDVF9NUEZSX1ZfMl80XzAgaXMgbm90IHNldAorQ1RfTVBGUl9WRVJTSU9OPSIyLjQuMSIKKyMgQ1RfUFBMX1ZfMF8xMV8yIGlzIG5vdCBzZXQKKyMgQ1RfUFBMX1ZfMF8xMV8xIGlzIG5vdCBzZXQKKyMgQ1RfUFBMX1ZfMF8xMSBpcyBub3Qgc2V0CitDVF9QUExfVl8wXzEwXzI9eQorQ1RfUFBMX1ZFUlNJT049IjAuMTAuMiIKKyMgQ1RfQ0xPT0dfVl8wXzE1XzExIGlzIG5vdCBzZXQKK0NUX0NMT09HX1ZfMF8xNV8xMD15CisjIENUX0NMT09HX1ZfMF8xNV85IGlzIG5vdCBzZXQKKyMgQ1RfQ0xPT0dfVl8wXzE1XzggaXMgbm90IHNldAorIyBDVF9DTE9PR19WXzBfMTVfNyBpcyBub3Qgc2V0CisjIENUX0NMT09HX1ZfMF8xNV82IGlzIG5vdCBzZXQKK0NUX0NMT09HX1ZFUlNJT049IjAuMTUuMTAiCisKKyMKKyMgQ29tcGFuaW9uIGxpYnJhcmllcyBjb21tb24gb3B0aW9ucworIworIyBDVF9DT01QTElCU19DSEVDSyBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcGFuaW9uIHRvb2xzCisjCisKKyMKKyMgUkVBRCBIRUxQIGJlZm9yZSB5b3Ugc2F5ICdZJyBiZWxvdyAhISEKKyMKKyMgQ1RfQ09NUF9UT09MUyBpcyBub3Qgc2V0CisKKyMKKyMgVGVzdCBzdWl0ZQorIworIyBDVF9URVNUX1NVSVRFX0dDQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvaTY4Ni1wYy1taW5ndzMyL3JlcG9ydGVkLmJ5IGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2k2ODYtcGMtbWluZ3czMi9yZXBvcnRlZC5ieQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmNhZjA4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL2k2ODYtcGMtbWluZ3czMi9yZXBvcnRlZC5ieQpAQCAtMCwwICsxLDMgQEAKK3JlcG9ydGVyX25hbWU9IkJhcnQgdmRyLiBNZXVsZW4gPGJhcnR2ZHJtZXVsZW5AZ21haWwuY29tPiIKK3JlcG9ydGVyX3VybD0iIgorcmVwb3J0ZXJfY29tbWVudD0iQ29uZmlnIHRvIGJ1aWxkIGNyb3NzLWNvbXBpbGVyIHdpdGggbWluZ3cgYXMga2VybmVsIHR5cGUiCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvbTY4ay11bmtub3duLWVsZi9jcm9zc3Rvb2wuY29uZmlnIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL202OGstdW5rbm93bi1lbGYvY3Jvc3N0b29sLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODc4MTcxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL202OGstdW5rbm93bi1lbGYvY3Jvc3N0b29sLmNvbmZpZwpAQCAtMCwwICsxLDM1MCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBjcm9zc3Rvb2wtTkcgaGdfZGVmYXVsdEAyNzIxXzdiNjQ3NDZiMGFiMyBDb25maWd1cmF0aW9uCisjIFN1biBPY3QgMTYgMTc6Mjg6MjYgMjAxMQorIworQ1RfQ09ORklHVVJFX2hhc194enV0aWxzPXkKK0NUX0NPTkZJR1VSRV9oYXNfY3ZzPXkKK0NUX0NPTkZJR1VSRV9oYXNfc3ZuPXkKK0NUX01PRFVMRVM9eQorCisjCisjIFBhdGhzIGFuZCBtaXNjIG9wdGlvbnMKKyMKKworIworIyBjcm9zc3Rvb2wtTkcgYmVoYXZpb3IKKyMKKyMgQ1RfT0JTT0xFVEUgaXMgbm90IHNldAorQ1RfRVhQRVJJTUVOVEFMPXkKKyMgQ1RfREVCVUdfQ1QgaXMgbm90IHNldAorCisjCisjIFBhdGhzCisjCitDVF9MT0NBTF9UQVJCQUxMU19ESVI9IiR7SE9NRX0vc3JjIgorQ1RfU0FWRV9UQVJCQUxMUz15CitDVF9XT1JLX0RJUj0iJHtDVF9UT1BfRElSfS8uYnVpbGQiCitDVF9QUkVGSVhfRElSPSIke0hPTUV9L3gtdG9vbHMvJHtDVF9UQVJHRVR9IgorQ1RfSU5TVEFMTF9ESVI9IiR7Q1RfUFJFRklYX0RJUn0iCitDVF9STV9SRl9QUkVGSVhfRElSPXkKK0NUX1JFTU9WRV9ET0NTPXkKK0NUX0lOU1RBTExfRElSX1JPPXkKK0NUX1NUUklQX0FMTF9UT09MQ0hBSU5fRVhFQ1VUQUJMRVM9eQorCisjCisjIERvd25sb2FkaW5nCisjCisjIENUX0ZPUkJJRF9ET1dOTE9BRCBpcyBub3Qgc2V0CisjIENUX0ZPUkNFX0RPV05MT0FEIGlzIG5vdCBzZXQKK0NUX0NPTk5FQ1RfVElNRU9VVD0xMAorIyBDVF9PTkxZX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfVVNFX01JUlJPUiBpcyBub3Qgc2V0CisKKyMKKyMgRXh0cmFjdGluZworIworIyBDVF9GT1JDRV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX09WRVJJREVfQ09ORklHX0dVRVNTX1NVQj15CisjIENUX09OTFlfRVhUUkFDVCBpcyBub3Qgc2V0CitDVF9QQVRDSF9CVU5ETEVEPXkKKyMgQ1RfUEFUQ0hfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9CVU5ETEVEX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTE9DQUxfQlVORExFRCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfRkFMTEJBQ0tfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9GQUxMQkFDS19CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTk9ORSBpcyBub3Qgc2V0CitDVF9QQVRDSF9PUkRFUj0iYnVuZGxlZCIKKworIworIyBCdWlsZCBiZWhhdmlvcgorIworQ1RfUEFSQUxMRUxfSk9CUz0wCitDVF9MT0FEPTAKK0NUX1VTRV9QSVBFUz15CitDVF9FWFRSQV9GTEFHU19GT1JfSE9TVD0iIgorIyBDVF9DT05GSUdfU0hFTExfU0ggaXMgbm90IHNldAorIyBDVF9DT05GSUdfU0hFTExfQVNIIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTF9CQVNIPXkKKyMgQ1RfQ09ORklHX1NIRUxMX0NVU1RPTSBpcyBub3Qgc2V0CitDVF9DT05GSUdfU0hFTEw9IiR7YmFzaH0iCisKKyMKKyMgTG9nZ2luZworIworIyBDVF9MT0dfRVJST1IgaXMgbm90IHNldAorIyBDVF9MT0dfV0FSTiBpcyBub3Qgc2V0CisjIENUX0xPR19JTkZPIGlzIG5vdCBzZXQKK0NUX0xPR19FWFRSQT15CisjIENUX0xPR19BTEwgaXMgbm90IHNldAorIyBDVF9MT0dfREVCVUcgaXMgbm90IHNldAorQ1RfTE9HX0xFVkVMX01BWD0iRVhUUkEiCisjIENUX0xPR19TRUVfVE9PTFNfV0FSTiBpcyBub3Qgc2V0CitDVF9MT0dfUFJPR1JFU1NfQkFSPXkKK0NUX0xPR19UT19GSUxFPXkKK0NUX0xPR19GSUxFX0NPTVBSRVNTPXkKKworIworIyBUYXJnZXQgb3B0aW9ucworIworQ1RfQVJDSD0ibTY4ayIKK0NUX0FSQ0hfU1VQUE9SVFNfMzI9eQorQ1RfQVJDSF9TVVBQT1JUX0NQVT15CitDVF9BUkNIX0RFRkFVTFRfQkU9eQorQ1RfQVJDSF9ERUZBVUxUXzMyPXkKK0NUX0FSQ0hfQ1BVPSJjcHUzMiIKK0NUX0FSQ0hfMzI9eQorQ1RfQVJDSF9CSVRORVNTPTMyCitDVF9BUkNIX0ZMT0FUX0hXPXkKKyMgQ1RfQVJDSF9GTE9BVF9TVyBpcyBub3Qgc2V0CitDVF9UQVJHRVRfQ0ZMQUdTPSIiCitDVF9UQVJHRVRfTERGTEFHUz0iIgorIyBDVF9BUkNIX2FscGhhIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9hcm0gaXMgbm90IHNldAorIyBDVF9BUkNIX2F2cjMyIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9ibGFja2ZpbiBpcyBub3Qgc2V0CitDVF9BUkNIX202OGs9eQorIyBDVF9BUkNIX21pcHMgaXMgbm90IHNldAorIyBDVF9BUkNIX3Bvd2VycGMgaXMgbm90IHNldAorIyBDVF9BUkNIX3MzOTAgaXMgbm90IHNldAorIyBDVF9BUkNIX3NoIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zcGFyYyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfeDg2IGlzIG5vdCBzZXQKK0NUX0FSQ0hfYWxwaGFfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXJtX0FWQUlMQUJMRT15CitDVF9BUkNIX2F2cjMyX0FWQUlMQUJMRT15CitDVF9BUkNIX2JsYWNrZmluX0FWQUlMQUJMRT15CitDVF9BUkNIX202OGtfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbWlwc19BVkFJTEFCTEU9eQorQ1RfQVJDSF9wb3dlcnBjX0FWQUlMQUJMRT15CitDVF9BUkNIX3MzOTBfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfc2hfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfc3BhcmNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfeDg2X0FWQUlMQUJMRT15CisKKyMKKyMgR2VuZXJpYyB0YXJnZXQgb3B0aW9ucworIworCisjCisjIFRhcmdldCBvcHRpbWlzYXRpb25zCisjCisKKyMKKyMgVG9vbGNoYWluIG9wdGlvbnMKKyMKKworIworIyBHZW5lcmFsIHRvb2xjaGFpbiBvcHRpb25zCisjCitDVF9GT1JDRV9TWVNST09UPXkKK0NUX1VTRV9TWVNST09UPXkKK0NUX1NZU1JPT1RfTkFNRT0ic3lzcm9vdCIKK0NUX1NZU1JPT1RfRElSX1BSRUZJWD0iIgorIyBDVF9TVEFUSUNfVE9PTENIQUlOIGlzIG5vdCBzZXQKK0NUX1RPT0xDSEFJTl9QS0dWRVJTSU9OPSIiCitDVF9UT09MQ0hBSU5fQlVHVVJMPSIiCisKKyMKKyMgVHVwbGUgY29tcGxldGlvbiBhbmQgYWxpYXNpbmcKKyMKK0NUX1RBUkdFVF9WRU5ET1I9InVua25vd24iCitDVF9UQVJHRVRfQUxJQVNfU0VEX0VYUFI9IiIKK0NUX1RBUkdFVF9BTElBUz0iIgorCisjCisjIFRvb2xjaGFpbiB0eXBlCisjCisjIENUX05BVElWRSBpcyBub3Qgc2V0CitDVF9DUk9TUz15CisjIENUX0NST1NTX05BVElWRSBpcyBub3Qgc2V0CisjIENUX0NBTkFESUFOIGlzIG5vdCBzZXQKK0NUX1RPT0xDSEFJTl9UWVBFPSJjcm9zcyIKKworIworIyBCdWlsZCBzeXN0ZW0KKyMKK0NUX0JVSUxEPSIiCitDVF9CVUlMRF9QUkVGSVg9IiIKK0NUX0JVSUxEX1NVRkZJWD0iIgorCisjCisjIE9wZXJhdGluZyBTeXN0ZW0KKyMKK0NUX0JBUkVfTUVUQUw9eQorQ1RfS0VSTkVMPSJiYXJlLW1ldGFsIgorQ1RfS0VSTkVMX2JhcmVfbWV0YWw9eQorIyBDVF9LRVJORUxfbGludXggaXMgbm90IHNldAorQ1RfS0VSTkVMX2JhcmVfbWV0YWxfQVZBSUxBQkxFPXkKK0NUX0tFUk5FTF9saW51eF9BVkFJTEFCTEU9eQorQ1RfS0VSTkVMX21pbmd3MzJfQVZBSUxBQkxFPXkKKworIworIyBDb21tb24ga2VybmVsIG9wdGlvbnMKKyMKKworIworIyBCaW5hcnkgdXRpbGl0aWVzCisjCisjIENUX0FSQ0hfQklORk1UX0VMRiBpcyBub3Qgc2V0CitDVF9BUkNIX0JJTkZNVF9GTEFUPXkKKyMgQ1RfQVJDSF9CSU5GTVRfRkRQSUMgaXMgbm90IHNldAorCisjCisjIEdOVSBiaW51dGlscworIworIyBDVF9CSU5VVElMU19WXzJfMjFfNTMgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19WXzJfMjFfMWEgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVl8yXzIwXzFhPXkKKyMgQ1RfQklOVVRJTFNfVl8yXzE5XzFhIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfVl8yXzE4YSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WRVJTSU9OPSIyLjIwLjFhIgorQ1RfQklOVVRJTFNfMl8yMF9vcl9sYXRlcj15CitDVF9CSU5VVElMU18yXzE5X29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMThfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0JJTlVUSUxTX0xJTktFUl9MRD15CitDVF9CSU5VVElMU19MSU5LRVJTX0xJU1Q9ImxkIgorQ1RfQklOVVRJTFNfTElOS0VSX0RFRkFVTFQ9ImJmZCIKK0NUX0JJTlVUSUxTX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorCisjCisjIGVsZjJmbHQKKyMKK0NUX0VMRjJGTFRfQ1ZTSEVBRD15CisjIENUX0VMRjJGTFRfQ1ZTX1NOQVBTSE9UIGlzIG5vdCBzZXQKK0NUX0VMRjJGTFRfVkVSU0lPTj0iaGVhZCIKK0NUX0VMRjJGTFRfRVhUUkFfQ09ORklHX0FSUkFZPSIiCisKKyMKKyMgQyBjb21waWxlcgorIworQ1RfQ0M9ImdjYyIKK0NUX0NDX1ZFUlNJT049IjQuMy40IgorQ1RfQ0NfZ2NjPXkKKyMgQ1RfQ0NfR0NDX1NIT1dfTElOQVJPIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzZfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF82XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF81XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzYgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM181IGlzIG5vdCBzZXQKK0NUX0NDX1ZfNF8zXzQ9eQorIyBDVF9DQ19WXzRfM18zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfMl80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfMiBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfNF8yX29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzM9eQorQ1RfQ0NfR0NDXzRfM19vcl9sYXRlcj15CitDVF9DQ19HQ0NfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0NDX0dDQ19VU0VfR01QX01QRlI9eQorQ1RfQ0NfU1VQUE9SVF9DWFg9eQorQ1RfQ0NfU1VQUE9SVF9GT1JUUkFOPXkKK0NUX0NDX1NVUFBPUlRfSkFWQT15CitDVF9DQ19TVVBQT1JUX0FEQT15CitDVF9DQ19TVVBQT1JUX09CSkM9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDWFg9eQorCisjCisjIEFkZGl0aW9uYWwgc3VwcG9ydGVkIGxhbmd1YWdlczoKKyMKKyMgQ1RfQ0NfTEFOR19DWFggaXMgbm90IHNldAorCisjCisjIGdjYyBvdGhlciBvcHRpb25zCisjCitDVF9DQ19FTkFCTEVfQ1hYX0ZMQUdTPSIiCitDVF9DQ19DT1JFX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorCisjCisjIE9wdGltaXNhdGlvbiBmZWF0dXJlcworIworCisjCisjIFNldHRpbmdzIGZvciBsaWJyYXJpZXMgcnVubmluZyBvbiB0YXJnZXQKKyMKK0NUX0NDX0dDQ19FTkFCTEVfVEFSR0VUX09QVFNQQUNFPXkKKyMgQ1RfQ0NfR0NDX0xJQk1VREZMQVAgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCR09NUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJTU1AgaXMgbm90IHNldAorCisjCisjIE1pc2MuIG9ic2N1cmUgb3B0aW9ucy4KKyMKKyMgQ1RfQ0NfR0NDX0RJU0FCTEVfUENIIGlzIG5vdCBzZXQKK0NUX0NDX0dDQ19MREJMXzEyOD1tCisKKyMKKyMgQy1saWJyYXJ5CisjCitDVF9MSUJDPSJub25lIgorIyBDVF9MSUJDX25ld2xpYiBpcyBub3Qgc2V0CitDVF9MSUJDX25vbmU9eQorQ1RfTElCQ19lZ2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfZ2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbWluZ3dfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbmV3bGliX0FWQUlMQUJMRT15CitDVF9MSUJDX25vbmVfQVZBSUxBQkxFPXkKK0NUX0xJQkNfdUNsaWJjX0FWQUlMQUJMRT15CitDVF9USFJFQURTPSJub25lIgorCisjCisjIERlYnVnIGZhY2lsaXRpZXMKKyMKKyMgQ1RfREVCVUdfZG1hbGxvYyBpcyBub3Qgc2V0CisjIENUX0RFQlVHX2R1bWEgaXMgbm90IHNldAorIyBDVF9ERUJVR19nZGIgaXMgbm90IHNldAorIyBDVF9ERUJVR19sdHJhY2UgaXMgbm90IHNldAorIyBDVF9ERUJVR19zdHJhY2UgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMKKyMKK0NUX0NPTVBMSUJTX05FRURFRD15CitDVF9HTVBfTkVFREVEPXkKK0NUX01QRlJfTkVFREVEPXkKK0NUX0NPTVBMSUJTPXkKK0NUX0dNUD15CitDVF9NUEZSPXkKKyMgQ1RfR01QX1ZfNV8wXzIgaXMgbm90IHNldAorIyBDVF9HTVBfVl81XzBfMSBpcyBub3Qgc2V0CitDVF9HTVBfVl80XzNfMj15CisjIENUX0dNUF9WXzRfM18xIGlzIG5vdCBzZXQKKyMgQ1RfR01QX1ZfNF8zXzAgaXMgbm90IHNldAorQ1RfR01QX1ZFUlNJT049IjQuMy4yIgorIyBDVF9NUEZSX1ZfM18wXzEgaXMgbm90IHNldAorIyBDVF9NUEZSX1ZfM18wXzAgaXMgbm90IHNldAorQ1RfTVBGUl9WXzJfNF8yPXkKKyMgQ1RfTVBGUl9WXzJfNF8xIGlzIG5vdCBzZXQKKyMgQ1RfTVBGUl9WXzJfNF8wIGlzIG5vdCBzZXQKK0NUX01QRlJfVkVSU0lPTj0iMi40LjIiCisKKyMKKyMgQ29tcGFuaW9uIGxpYnJhcmllcyBjb21tb24gb3B0aW9ucworIworIyBDVF9DT01QTElCU19DSEVDSyBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcGFuaW9uIHRvb2xzCisjCisKKyMKKyMgUkVBRCBIRUxQIGJlZm9yZSB5b3Ugc2F5ICdZJyBiZWxvdyAhISEKKyMKKyMgQ1RfQ09NUF9UT09MUyBpcyBub3Qgc2V0CisKKyMKKyMgVGVzdCBzdWl0ZQorIworIyBDVF9URVNUX1NVSVRFX0dDQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvbTY4ay11bmtub3duLWVsZi9yZXBvcnRlZC5ieSBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9tNjhrLXVua25vd24tZWxmL3JlcG9ydGVkLmJ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YmI2NTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvbTY4ay11bmtub3duLWVsZi9yZXBvcnRlZC5ieQpAQCAtMCwwICsxLDMgQEAKK3JlcG9ydGVyX25hbWU9IlJlbXkgQm9obWVyIgorcmVwb3J0ZXJfdXJsPSJsaW51eEBib2htZXIubmV0IgorcmVwb3J0ZXJfY29tbWVudD0iRXhhbXBsZSBmb3IgYnVpbGRpbmcgYSB0b29sY2hhaW4gZm9yIG02ODAwMCBiYXJlIG1ldGFsIHRhcmdldHMiCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvbWlwcy1hcjIzMTUtbGludXgtZ251L2Nyb3NzdG9vbC5jb25maWcgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvbWlwcy1hcjIzMTUtbGludXgtZ251L2Nyb3NzdG9vbC5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhmMjhiZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9taXBzLWFyMjMxNS1saW51eC1nbnUvY3Jvc3N0b29sLmNvbmZpZwpAQCAtMCwwICsxLDQ5MSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBjcm9zc3Rvb2wtTkcgaGdfZGVmYXVsdEAyNzIxXzdiNjQ3NDZiMGFiMyBDb25maWd1cmF0aW9uCisjIFN1biBPY3QgMTYgMTc6Mjk6MDQgMjAxMQorIworQ1RfQ09ORklHVVJFX2hhc194enV0aWxzPXkKK0NUX0NPTkZJR1VSRV9oYXNfY3ZzPXkKK0NUX0NPTkZJR1VSRV9oYXNfc3ZuPXkKK0NUX01PRFVMRVM9eQorCisjCisjIFBhdGhzIGFuZCBtaXNjIG9wdGlvbnMKKyMKKworIworIyBjcm9zc3Rvb2wtTkcgYmVoYXZpb3IKKyMKKyMgQ1RfT0JTT0xFVEUgaXMgbm90IHNldAorQ1RfRVhQRVJJTUVOVEFMPXkKKyMgQ1RfREVCVUdfQ1QgaXMgbm90IHNldAorCisjCisjIFBhdGhzCisjCitDVF9MT0NBTF9UQVJCQUxMU19ESVI9IiR7SE9NRX0vc3JjIgorQ1RfU0FWRV9UQVJCQUxMUz15CitDVF9XT1JLX0RJUj0iJHtDVF9UT1BfRElSfS8uYnVpbGQiCitDVF9QUkVGSVhfRElSPSIke0hPTUV9L3gtdG9vbHMvJHtDVF9UQVJHRVR9IgorQ1RfSU5TVEFMTF9ESVI9IiR7Q1RfUFJFRklYX0RJUn0iCitDVF9STV9SRl9QUkVGSVhfRElSPXkKK0NUX1JFTU9WRV9ET0NTPXkKK0NUX0lOU1RBTExfRElSX1JPPXkKK0NUX1NUUklQX0FMTF9UT09MQ0hBSU5fRVhFQ1VUQUJMRVM9eQorCisjCisjIERvd25sb2FkaW5nCisjCisjIENUX0ZPUkJJRF9ET1dOTE9BRCBpcyBub3Qgc2V0CisjIENUX0ZPUkNFX0RPV05MT0FEIGlzIG5vdCBzZXQKK0NUX0NPTk5FQ1RfVElNRU9VVD0xMAorIyBDVF9PTkxZX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfVVNFX01JUlJPUiBpcyBub3Qgc2V0CisKKyMKKyMgRXh0cmFjdGluZworIworIyBDVF9GT1JDRV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX09WRVJJREVfQ09ORklHX0dVRVNTX1NVQj15CisjIENUX09OTFlfRVhUUkFDVCBpcyBub3Qgc2V0CitDVF9QQVRDSF9CVU5ETEVEPXkKKyMgQ1RfUEFUQ0hfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9CVU5ETEVEX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTE9DQUxfQlVORExFRCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfRkFMTEJBQ0tfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9GQUxMQkFDS19CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTk9ORSBpcyBub3Qgc2V0CitDVF9QQVRDSF9PUkRFUj0iYnVuZGxlZCIKKworIworIyBCdWlsZCBiZWhhdmlvcgorIworQ1RfUEFSQUxMRUxfSk9CUz0wCitDVF9MT0FEPTAKK0NUX1VTRV9QSVBFUz15CitDVF9FWFRSQV9GTEFHU19GT1JfSE9TVD0iIgorIyBDVF9DT05GSUdfU0hFTExfU0ggaXMgbm90IHNldAorIyBDVF9DT05GSUdfU0hFTExfQVNIIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTF9CQVNIPXkKKyMgQ1RfQ09ORklHX1NIRUxMX0NVU1RPTSBpcyBub3Qgc2V0CitDVF9DT05GSUdfU0hFTEw9IiR7YmFzaH0iCisKKyMKKyMgTG9nZ2luZworIworIyBDVF9MT0dfRVJST1IgaXMgbm90IHNldAorIyBDVF9MT0dfV0FSTiBpcyBub3Qgc2V0CisjIENUX0xPR19JTkZPIGlzIG5vdCBzZXQKK0NUX0xPR19FWFRSQT15CisjIENUX0xPR19BTEwgaXMgbm90IHNldAorIyBDVF9MT0dfREVCVUcgaXMgbm90IHNldAorQ1RfTE9HX0xFVkVMX01BWD0iRVhUUkEiCisjIENUX0xPR19TRUVfVE9PTFNfV0FSTiBpcyBub3Qgc2V0CitDVF9MT0dfUFJPR1JFU1NfQkFSPXkKK0NUX0xPR19UT19GSUxFPXkKK0NUX0xPR19GSUxFX0NPTVBSRVNTPXkKKworIworIyBUYXJnZXQgb3B0aW9ucworIworQ1RfQVJDSD0ibWlwcyIKK0NUX0FSQ0hfU1VQUE9SVFNfQk9USF9FTkRJQU49eQorQ1RfQVJDSF9TVVBQT1JUU18zMj15CitDVF9BUkNIX1NVUFBPUlRTXzY0PXkKK0NUX0FSQ0hfU1VQUE9SVF9BUkNIPXkKK0NUX0FSQ0hfU1VQUE9SVF9UVU5FPXkKK0NUX0FSQ0hfREVGQVVMVF9CRT15CitDVF9BUkNIX0RFRkFVTFRfMzI9eQorQ1RfQVJDSF9BUkNIPSI0a2MiCitDVF9BUkNIX1RVTkU9IjRrYyIKK0NUX0FSQ0hfQkU9eQorIyBDVF9BUkNIX0xFIGlzIG5vdCBzZXQKK0NUX0FSQ0hfMzI9eQorIyBDVF9BUkNIXzY0IGlzIG5vdCBzZXQKK0NUX0FSQ0hfQklUTkVTUz0zMgorIyBDVF9BUkNIX0ZMT0FUX0hXIGlzIG5vdCBzZXQKK0NUX0FSQ0hfRkxPQVRfU1c9eQorQ1RfVEFSR0VUX0NGTEFHUz0iIgorQ1RfVEFSR0VUX0xERkxBR1M9IiIKKyMgQ1RfQVJDSF9hbHBoYSBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYXJtIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9hdnIzMiBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYmxhY2tmaW4gaXMgbm90IHNldAorIyBDVF9BUkNIX202OGsgaXMgbm90IHNldAorQ1RfQVJDSF9taXBzPXkKKyMgQ1RfQVJDSF9wb3dlcnBjIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zMzkwIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zaCBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc3BhcmMgaXMgbm90IHNldAorIyBDVF9BUkNIX3g4NiBpcyBub3Qgc2V0CitDVF9BUkNIX2FscGhhX0FWQUlMQUJMRT15CitDVF9BUkNIX2FybV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hdnIzMl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9ibGFja2Zpbl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9tNjhrX0FWQUlMQUJMRT15CitDVF9BUkNIX21pcHNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfcG93ZXJwY19BVkFJTEFCTEU9eQorQ1RfQVJDSF9zMzkwX0FWQUlMQUJMRT15CitDVF9BUkNIX3NoX0FWQUlMQUJMRT15CitDVF9BUkNIX3NwYXJjX0FWQUlMQUJMRT15CitDVF9BUkNIX3g4Nl9BVkFJTEFCTEU9eQorCisjCisjIEdlbmVyaWMgdGFyZ2V0IG9wdGlvbnMKKyMKK0NUX0FSQ0hfVVNFX01NVT15CisKKyMKKyMgVGFyZ2V0IG9wdGltaXNhdGlvbnMKKyMKKworIworIyBtaXBzIG90aGVyIG9wdGlvbnMKKyMKK0NUX0FSQ0hfbWlwc19vMzI9eQorQ1RfQVJDSF9taXBzX0FCST0iMzIiCisKKyMKKyMgVG9vbGNoYWluIG9wdGlvbnMKKyMKKworIworIyBHZW5lcmFsIHRvb2xjaGFpbiBvcHRpb25zCisjCitDVF9GT1JDRV9TWVNST09UPXkKK0NUX1VTRV9TWVNST09UPXkKK0NUX1NZU1JPT1RfTkFNRT0ic3lzcm9vdCIKK0NUX1NZU1JPT1RfRElSX1BSRUZJWD0iIgorIyBDVF9TVEFUSUNfVE9PTENIQUlOIGlzIG5vdCBzZXQKK0NUX1RPT0xDSEFJTl9QS0dWRVJTSU9OPSIiCitDVF9UT09MQ0hBSU5fQlVHVVJMPSIiCisKKyMKKyMgVHVwbGUgY29tcGxldGlvbiBhbmQgYWxpYXNpbmcKKyMKK0NUX1RBUkdFVF9WRU5ET1I9ImFyMjMxNSIKK0NUX1RBUkdFVF9BTElBU19TRURfRVhQUj0iIgorQ1RfVEFSR0VUX0FMSUFTPSIiCisKKyMKKyMgVG9vbGNoYWluIHR5cGUKKyMKKyMgQ1RfTkFUSVZFIGlzIG5vdCBzZXQKK0NUX0NST1NTPXkKKyMgQ1RfQ1JPU1NfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ1RfQ0FOQURJQU4gaXMgbm90IHNldAorQ1RfVE9PTENIQUlOX1RZUEU9ImNyb3NzIgorCisjCisjIEJ1aWxkIHN5c3RlbQorIworQ1RfQlVJTEQ9IiIKK0NUX0JVSUxEX1BSRUZJWD0iIgorQ1RfQlVJTERfU1VGRklYPSIiCisKKyMKKyMgT3BlcmF0aW5nIFN5c3RlbQorIworQ1RfS0VSTkVMX1NVUFBPUlRTX1NIQVJFRF9MSUJTPXkKK0NUX0tFUk5FTD0ibGludXgiCitDVF9LRVJORUxfVkVSU0lPTj0iMi42LjMzLjE5IgorIyBDVF9LRVJORUxfYmFyZV9tZXRhbCBpcyBub3Qgc2V0CitDVF9LRVJORUxfbGludXg9eQorQ1RfS0VSTkVMX2JhcmVfbWV0YWxfQVZBSUxBQkxFPXkKK0NUX0tFUk5FTF9saW51eF9BVkFJTEFCTEU9eQorIyBDVF9LRVJORUxfVl8zXzBfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8zIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzIgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zOV80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM4XzggaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzdfNiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNl80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM1XzE0IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM0XzEwIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9WXzJfNl8zM18xOT15CisjIENUX0tFUk5FTF9WXzJfNl8zMl80NiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zMV8xNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8yN181OSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9MSU5VWF9DVVNUT00gaXMgbm90IHNldAorQ1RfS0VSTkVMX21pbmd3MzJfQVZBSUxBQkxFPXkKKworIworIyBDb21tb24ga2VybmVsIG9wdGlvbnMKKyMKK0NUX1NIQVJFRF9MSUJTPXkKKworIworIyBsaW51eCBvdGhlciBvcHRpb25zCisjCitDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzA9eQorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzEgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzIgaXMgbm90IHNldAorQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0VfTEVWRUw9MAorQ1RfS0VSTkVMX0xJTlVYX0lOU1RBTExfQ0hFQ0s9eQorCisjCisjIEJpbmFyeSB1dGlsaXRpZXMKKyMKK0NUX0FSQ0hfQklORk1UX0VMRj15CisKKyMKKyMgR05VIGJpbnV0aWxzCisjCisjIENUX0JJTlVUSUxTX1ZfMl8yMV81MyBpcyBub3Qgc2V0CisjIENUX0JJTlVUSUxTX1ZfMl8yMV8xYSBpcyBub3Qgc2V0CisjIENUX0JJTlVUSUxTX1ZfMl8yMF8xYSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WXzJfMTlfMWE9eQorIyBDVF9CSU5VVElMU19WXzJfMThhIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX1ZFUlNJT049IjIuMTkuMWEiCitDVF9CSU5VVElMU18yXzE5X29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMThfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0JJTlVUSUxTX0ZPUkNFX0xEX0JGRD15CitDVF9CSU5VVElMU19MSU5LRVJfTEQ9eQorQ1RfQklOVVRJTFNfTElOS0VSU19MSVNUPSJsZCIKK0NUX0JJTlVUSUxTX0xJTktFUl9ERUZBVUxUPSJiZmQiCitDVF9CSU5VVElMU19FWFRSQV9DT05GSUdfQVJSQVk9IiIKKyMgQ1RfQklOVVRJTFNfRk9SX1RBUkdFVCBpcyBub3Qgc2V0CisKKyMKKyMgQyBjb21waWxlcgorIworQ1RfQ0M9ImdjYyIKK0NUX0NDX1ZFUlNJT049IjQuMy4yIgorQ1RfQ0NfZ2NjPXkKKyMgQ1RfQ0NfR0NDX1NIT1dfTElOQVJPIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzZfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF82XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF81XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzYgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM181IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzMgaXMgbm90IHNldAorQ1RfQ0NfVl80XzNfMj15CisjIENUX0NDX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfMl80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfMiBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfNF8yX29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzM9eQorQ1RfQ0NfR0NDXzRfM19vcl9sYXRlcj15CitDVF9DQ19HQ0NfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0NDX0dDQ19VU0VfR01QX01QRlI9eQorIyBDVF9DQ19MQU5HX0ZPUlRSQU4gaXMgbm90IHNldAorQ1RfQ0NfU1VQUE9SVF9DWFg9eQorQ1RfQ0NfU1VQUE9SVF9GT1JUUkFOPXkKK0NUX0NDX1NVUFBPUlRfSkFWQT15CitDVF9DQ19TVVBQT1JUX0FEQT15CitDVF9DQ19TVVBQT1JUX09CSkM9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDWFg9eQorCisjCisjIEFkZGl0aW9uYWwgc3VwcG9ydGVkIGxhbmd1YWdlczoKKyMKK0NUX0NDX0xBTkdfQ1hYPXkKKyMgQ1RfQ0NfTEFOR19KQVZBIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfTEFOR19BREEgaXMgbm90IHNldAorIyBDVF9DQ19MQU5HX09CSkMgaXMgbm90IHNldAorIyBDVF9DQ19MQU5HX09CSkNYWCBpcyBub3Qgc2V0CitDVF9DQ19MQU5HX09USEVSUz0iIgorCisjCisjIGdjYyBvdGhlciBvcHRpb25zCisjCitDVF9DQ19FTkFCTEVfQ1hYX0ZMQUdTPSIiCitDVF9DQ19DT1JFX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfQ0NfRVhUUkFfQ09ORklHX0FSUkFZPSIiCisKKyMKKyMgT3B0aW1pc2F0aW9uIGZlYXR1cmVzCisjCisKKyMKKyMgU2V0dGluZ3MgZm9yIGxpYnJhcmllcyBydW5uaW5nIG9uIHRhcmdldAorIworQ1RfQ0NfR0NDX0VOQUJMRV9UQVJHRVRfT1BUU1BBQ0U9eQorIyBDVF9DQ19HQ0NfTElCTVVERkxBUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJHT01QIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQlNTUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYy4gb2JzY3VyZSBvcHRpb25zLgorIworQ1RfQ0NfQ1hBX0FURVhJVD15CisjIENUX0NDX0dDQ19ESVNBQkxFX1BDSCBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfU0pMSl9FWENFUFRJT05TPW0KK0NUX0NDX0dDQ19MREJMXzEyOD1tCitDVF9DQ19HQ0NfSEFTX0FSQ0hfT1BUSU9OUz15CisKKyMKKyMgYXJjaGljdGVjdHVyZS1zcGVjaWZpYyBvcHRpb25zCisjCitDVF9DQ19HQ0NfbWlwc19sbHNjPW0KK0NUX0NDX0dDQ19taXBzX3N5bmNpPW0KKyMgQ1RfQ0NfR0NDX21pcHNfcGx0IGlzIG5vdCBzZXQKKworIworIyBDLWxpYnJhcnkKKyMKK0NUX0xJQkM9ImVnbGliYyIKK0NUX0xJQkNfVkVSU0lPTj0iMl85IgorQ1RfTElCQ19lZ2xpYmM9eQorIyBDVF9MSUJDX2dsaWJjIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ191Q2xpYmMgaXMgbm90IHNldAorQ1RfTElCQ19lZ2xpYmNfQVZBSUxBQkxFPXkKKyMgQ1RfTElCQ19FR0xJQkNfVl8yXzE0IGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19FR0xJQkNfVl8yXzEzIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19FR0xJQkNfVl8yXzEyIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19FR0xJQkNfVl8yXzExIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19FR0xJQkNfVl8yXzEwIGlzIG5vdCBzZXQKK0NUX0xJQkNfRUdMSUJDX1ZfMl85PXkKKyMgQ1RfTElCQ19FR0xJQkNfVl9UUlVOSyBpcyBub3Qgc2V0CitDVF9MSUJDX0VHTElCQ18yXzlfb3JfbGF0ZXI9eQorQ1RfTElCQ19FR0xJQkNfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0VHTElCQ19SRVZJU0lPTj0iezIwMDktMDctMjF9IgorIyBDVF9FR0xJQkNfSFRUUCBpcyBub3Qgc2V0CisjIENUX0VHTElCQ19DSEVDS09VVCBpcyBub3Qgc2V0CisjIENUX0VHTElCQ19PUFRfU0laRSBpcyBub3Qgc2V0CisjIENUX0VHTElCQ19DVVNUT01fQ09ORklHIGlzIG5vdCBzZXQKK0NUX0xJQkNfZ2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbWluZ3dfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbmV3bGliX0FWQUlMQUJMRT15CitDVF9MSUJDX25vbmVfQVZBSUxBQkxFPXkKK0NUX0xJQkNfdUNsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX1NVUFBPUlRfVEhSRUFEU19BTlk9eQorQ1RfTElCQ19TVVBQT1JUX05QVEw9eQorQ1RfTElCQ19TVVBQT1JUX0xJTlVYVEhSRUFEUz15CitDVF9USFJFQURTPSJucHRsIgorCisjCisjIENvbW1vbiBDIGxpYnJhcnkgb3B0aW9ucworIworQ1RfVEhSRUFEU19OUFRMPXkKKyMgQ1RfVEhSRUFEU19MSU5VWFRIUkVBRFMgaXMgbm90IHNldAorQ1RfTElCQ19YTEREPXkKKworIworIyBlZ2xpYmMgb3RoZXIgb3B0aW9ucworIworQ1RfTElCQ19HTElCQ19NQVlfRk9SQ0VfUE9SVFM9eQorQ1RfTElCQ19nbGliY19mYW1pbGx5PXkKK0NUX0xJQkNfR0xJQkNfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9MSUJDX0dMSUJDX0NPTkZJR1BBUk1TPSIiCitDVF9MSUJDX0dMSUJDX0VYVFJBX0NGTEFHUz0iIgorQ1RfTElCQ19FWFRSQV9DQ19BUkdTPSIiCisjIENUX0xJQkNfRU5BQkxFX0ZPUlRJRklFRF9CVUlMRCBpcyBub3Qgc2V0CisjIENUX0xJQkNfRElTQUJMRV9WRVJTSU9OSU5HIGlzIG5vdCBzZXQKK0NUX0xJQkNfT0xERVNUX0FCST0iIgorIyBDVF9MSUJDX0dMSUJDX0ZPUkNFX1VOV0lORCBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX1VTRV9QT1JUUz15CitDVF9MSUJDX0FERE9OU19MSVNUPSIiCisKKyMKKyMgV0FSTklORyAhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIworCisjCisjICAgRm9yIGdsaWJjID49IDIuOCwgaXQgY2FuIGhhcHBlbiB0aGF0IHRoZSB0YXJiYWxscyAgICAKKyMKKworIworIyAgIGZvciB0aGUgYWRkb25zIGFyZSBub3QgYXZhaWxhYmxlIGZvciBkb3dubG9hZC4gICAgICAgCisjCisKKyMKKyMgICBJZiB0aGF0IGhhcHBlbnMsIGJhZCBsdWNrLi4uIFRyeSBhIHByZXZpb3VzIHZlcnNpb24gIAorIworCisjCisjICAgb3IgdHJ5IGFnYWluIGxhdGVyLi4uIDotKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyMKKyMgQ1RfTElCQ19MT0NBTEVTIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9OT05FIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9BU19IRUFERVJTIGlzIG5vdCBzZXQKK0NUX0xJQkNfR0xJQkNfS0VSTkVMX1ZFUlNJT05fQ0hPU0VOPXkKK0NUX0xJQkNfR0xJQkNfTUlOX0tFUk5FTF9WRVJTSU9OPSIyLjYuMjUiCitDVF9MSUJDX0dMSUJDX01JTl9LRVJORUw9IjIuNi4yNSIKKworIworIyBEZWJ1ZyBmYWNpbGl0aWVzCisjCitDVF9ERUJVR19kbWFsbG9jPXkKK0NUX0RNQUxMT0NfVl81XzVfMj15CitDVF9ETUFMTE9DX1ZFUlNJT049IjUuNS4yIgorIyBDVF9ERUJVR19kdW1hIGlzIG5vdCBzZXQKK0NUX0RFQlVHX2dkYj15CitDVF9HREJfQ1JPU1M9eQorIyBDVF9HREJfQ1JPU1NfU1RBVElDIGlzIG5vdCBzZXQKK0NUX0dEQl9DUk9TU19QWVRIT049eQorIyBDVF9HREJfTkFUSVZFIGlzIG5vdCBzZXQKK0NUX0dEQl9HREJTRVJWRVI9eQorQ1RfR0RCX0dEQlNFUlZFUl9TVEFUSUM9eQorCisjCisjIGdkYiB2ZXJzaW9uCisjCisjIENUX0RFQlVHX0dEQl9TSE9XX0xJTkFSTyBpcyBub3Qgc2V0CisjIENUX0dEQl9WXzdfM2EgaXMgbm90IHNldAorIyBDVF9HREJfVl83XzJhIGlzIG5vdCBzZXQKKyMgQ1RfR0RCX1ZfN18xYSBpcyBub3Qgc2V0CisjIENUX0dEQl9WXzdfMF8xYSBpcyBub3Qgc2V0CisjIENUX0dEQl9WXzdfMGEgaXMgbm90IHNldAorQ1RfR0RCX1ZfNl84YT15CitDVF9HREJfVkVSU0lPTj0iNi44YSIKKyMgQ1RfREVCVUdfbHRyYWNlIGlzIG5vdCBzZXQKK0NUX0RFQlVHX3N0cmFjZT15CisjIENUX1NUUkFDRV9WXzRfNV8yMCBpcyBub3Qgc2V0CitDVF9TVFJBQ0VfVl80XzVfMTk9eQorIyBDVF9TVFJBQ0VfVl80XzVfMTggaXMgbm90IHNldAorQ1RfU1RSQUNFX1ZFUlNJT049IjQuNS4xOSIKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzCisjCitDVF9DT01QTElCU19ORUVERUQ9eQorQ1RfR01QX05FRURFRD15CitDVF9NUEZSX05FRURFRD15CitDVF9DT01QTElCUz15CitDVF9HTVA9eQorQ1RfTVBGUj15CisjIENUX0dNUF9WXzVfMF8yIGlzIG5vdCBzZXQKKyMgQ1RfR01QX1ZfNV8wXzEgaXMgbm90IHNldAorQ1RfR01QX1ZfNF8zXzI9eQorIyBDVF9HTVBfVl80XzNfMSBpcyBub3Qgc2V0CisjIENUX0dNUF9WXzRfM18wIGlzIG5vdCBzZXQKK0NUX0dNUF9WRVJTSU9OPSI0LjMuMiIKKyMgQ1RfTVBGUl9WXzNfMF8xIGlzIG5vdCBzZXQKKyMgQ1RfTVBGUl9WXzNfMF8wIGlzIG5vdCBzZXQKK0NUX01QRlJfVl8yXzRfMj15CisjIENUX01QRlJfVl8yXzRfMSBpcyBub3Qgc2V0CisjIENUX01QRlJfVl8yXzRfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZFUlNJT049IjIuNC4yIgorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMgY29tbW9uIG9wdGlvbnMKKyMKKyMgQ1RfQ09NUExJQlNfQ0hFQ0sgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiB0b29scworIworCisjCisjIFJFQUQgSEVMUCBiZWZvcmUgeW91IHNheSAnWScgYmVsb3cgISEhCisjCisjIENUX0NPTVBfVE9PTFMgaXMgbm90IHNldAorCisjCisjIFRlc3Qgc3VpdGUKKyMKKyMgQ1RfVEVTVF9TVUlURV9HQ0MgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL21pcHMtYXIyMzE1LWxpbnV4LWdudS9yZXBvcnRlZC5ieSBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9taXBzLWFyMjMxNS1saW51eC1nbnUvcmVwb3J0ZWQuYnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUzMmYyYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9taXBzLWFyMjMxNS1saW51eC1nbnUvcmVwb3J0ZWQuYnkKQEAgLTAsMCArMSwzIEBACityZXBvcnRlcl9uYW1lPSJHaWFtbWFyY28gWmFjaGVvIgorcmVwb3J0ZXJfdXJsPSIiCityZXBvcnRlcl9jb21tZW50PSIiCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvbWlwcy1tYWx0YS1saW51eC1nbnUvY3Jvc3N0b29sLmNvbmZpZyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9taXBzLW1hbHRhLWxpbnV4LWdudS9jcm9zc3Rvb2wuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3Y2YwMTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvbWlwcy1tYWx0YS1saW51eC1nbnUvY3Jvc3N0b29sLmNvbmZpZwpAQCAtMCwwICsxLDUwMiBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBjcm9zc3Rvb2wtTkcgaGdfZGVmYXVsdEAyNzIxXzdiNjQ3NDZiMGFiMyBDb25maWd1cmF0aW9uCisjIFN1biBPY3QgMTYgMTc6Mjk6MzMgMjAxMQorIworQ1RfQ09ORklHVVJFX2hhc194enV0aWxzPXkKK0NUX0NPTkZJR1VSRV9oYXNfY3ZzPXkKK0NUX0NPTkZJR1VSRV9oYXNfc3ZuPXkKK0NUX01PRFVMRVM9eQorCisjCisjIFBhdGhzIGFuZCBtaXNjIG9wdGlvbnMKKyMKKworIworIyBjcm9zc3Rvb2wtTkcgYmVoYXZpb3IKKyMKKyMgQ1RfT0JTT0xFVEUgaXMgbm90IHNldAorQ1RfRVhQRVJJTUVOVEFMPXkKKyMgQ1RfREVCVUdfQ1QgaXMgbm90IHNldAorCisjCisjIFBhdGhzCisjCitDVF9MT0NBTF9UQVJCQUxMU19ESVI9IiR7SE9NRX0vc3JjIgorQ1RfU0FWRV9UQVJCQUxMUz15CitDVF9XT1JLX0RJUj0iJHtDVF9UT1BfRElSfS8uYnVpbGQiCitDVF9QUkVGSVhfRElSPSIke0hPTUV9L3gtdG9vbHMvJHtDVF9UQVJHRVR9IgorQ1RfSU5TVEFMTF9ESVI9IiR7Q1RfUFJFRklYX0RJUn0iCitDVF9STV9SRl9QUkVGSVhfRElSPXkKK0NUX1JFTU9WRV9ET0NTPXkKK0NUX0lOU1RBTExfRElSX1JPPXkKK0NUX1NUUklQX0FMTF9UT09MQ0hBSU5fRVhFQ1VUQUJMRVM9eQorCisjCisjIERvd25sb2FkaW5nCisjCisjIENUX0ZPUkJJRF9ET1dOTE9BRCBpcyBub3Qgc2V0CisjIENUX0ZPUkNFX0RPV05MT0FEIGlzIG5vdCBzZXQKK0NUX0NPTk5FQ1RfVElNRU9VVD0xMAorIyBDVF9PTkxZX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfVVNFX01JUlJPUiBpcyBub3Qgc2V0CisKKyMKKyMgRXh0cmFjdGluZworIworIyBDVF9GT1JDRV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX09WRVJJREVfQ09ORklHX0dVRVNTX1NVQj15CisjIENUX09OTFlfRVhUUkFDVCBpcyBub3Qgc2V0CitDVF9QQVRDSF9CVU5ETEVEPXkKKyMgQ1RfUEFUQ0hfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9CVU5ETEVEX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTE9DQUxfQlVORExFRCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfRkFMTEJBQ0tfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9GQUxMQkFDS19CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTk9ORSBpcyBub3Qgc2V0CitDVF9QQVRDSF9PUkRFUj0iYnVuZGxlZCIKKworIworIyBCdWlsZCBiZWhhdmlvcgorIworQ1RfUEFSQUxMRUxfSk9CUz0wCitDVF9MT0FEPTAKK0NUX1VTRV9QSVBFUz15CitDVF9FWFRSQV9GTEFHU19GT1JfSE9TVD0iIgorIyBDVF9DT05GSUdfU0hFTExfU0ggaXMgbm90IHNldAorIyBDVF9DT05GSUdfU0hFTExfQVNIIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTF9CQVNIPXkKKyMgQ1RfQ09ORklHX1NIRUxMX0NVU1RPTSBpcyBub3Qgc2V0CitDVF9DT05GSUdfU0hFTEw9IiR7YmFzaH0iCisKKyMKKyMgTG9nZ2luZworIworIyBDVF9MT0dfRVJST1IgaXMgbm90IHNldAorIyBDVF9MT0dfV0FSTiBpcyBub3Qgc2V0CisjIENUX0xPR19JTkZPIGlzIG5vdCBzZXQKK0NUX0xPR19FWFRSQT15CisjIENUX0xPR19BTEwgaXMgbm90IHNldAorIyBDVF9MT0dfREVCVUcgaXMgbm90IHNldAorQ1RfTE9HX0xFVkVMX01BWD0iRVhUUkEiCisjIENUX0xPR19TRUVfVE9PTFNfV0FSTiBpcyBub3Qgc2V0CitDVF9MT0dfUFJPR1JFU1NfQkFSPXkKK0NUX0xPR19UT19GSUxFPXkKK0NUX0xPR19GSUxFX0NPTVBSRVNTPXkKKworIworIyBUYXJnZXQgb3B0aW9ucworIworQ1RfQVJDSD0ibWlwcyIKK0NUX0FSQ0hfU1VQUE9SVFNfQk9USF9FTkRJQU49eQorQ1RfQVJDSF9TVVBQT1JUU18zMj15CitDVF9BUkNIX1NVUFBPUlRTXzY0PXkKK0NUX0FSQ0hfU1VQUE9SVF9BUkNIPXkKK0NUX0FSQ0hfU1VQUE9SVF9UVU5FPXkKK0NUX0FSQ0hfREVGQVVMVF9CRT15CitDVF9BUkNIX0RFRkFVTFRfMzI9eQorQ1RfQVJDSF9BUkNIPSIiCitDVF9BUkNIX1RVTkU9IiIKK0NUX0FSQ0hfQkU9eQorIyBDVF9BUkNIX0xFIGlzIG5vdCBzZXQKK0NUX0FSQ0hfMzI9eQorIyBDVF9BUkNIXzY0IGlzIG5vdCBzZXQKK0NUX0FSQ0hfQklUTkVTUz0zMgorQ1RfQVJDSF9GTE9BVF9IVz15CisjIENUX0FSQ0hfRkxPQVRfU1cgaXMgbm90IHNldAorQ1RfVEFSR0VUX0NGTEFHUz0iIgorQ1RfVEFSR0VUX0xERkxBR1M9IiIKKyMgQ1RfQVJDSF9hbHBoYSBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYXJtIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9hdnIzMiBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYmxhY2tmaW4gaXMgbm90IHNldAorIyBDVF9BUkNIX202OGsgaXMgbm90IHNldAorQ1RfQVJDSF9taXBzPXkKKyMgQ1RfQVJDSF9wb3dlcnBjIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zMzkwIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zaCBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc3BhcmMgaXMgbm90IHNldAorIyBDVF9BUkNIX3g4NiBpcyBub3Qgc2V0CitDVF9BUkNIX2FscGhhX0FWQUlMQUJMRT15CitDVF9BUkNIX2FybV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hdnIzMl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9ibGFja2Zpbl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9tNjhrX0FWQUlMQUJMRT15CitDVF9BUkNIX21pcHNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfcG93ZXJwY19BVkFJTEFCTEU9eQorQ1RfQVJDSF9zMzkwX0FWQUlMQUJMRT15CitDVF9BUkNIX3NoX0FWQUlMQUJMRT15CitDVF9BUkNIX3NwYXJjX0FWQUlMQUJMRT15CitDVF9BUkNIX3g4Nl9BVkFJTEFCTEU9eQorCisjCisjIEdlbmVyaWMgdGFyZ2V0IG9wdGlvbnMKKyMKK0NUX0FSQ0hfVVNFX01NVT15CisKKyMKKyMgVGFyZ2V0IG9wdGltaXNhdGlvbnMKKyMKKworIworIyBtaXBzIG90aGVyIG9wdGlvbnMKKyMKK0NUX0FSQ0hfbWlwc19vMzI9eQorQ1RfQVJDSF9taXBzX0FCST0iMzIiCisKKyMKKyMgVG9vbGNoYWluIG9wdGlvbnMKKyMKKworIworIyBHZW5lcmFsIHRvb2xjaGFpbiBvcHRpb25zCisjCitDVF9GT1JDRV9TWVNST09UPXkKK0NUX1VTRV9TWVNST09UPXkKK0NUX1NZU1JPT1RfTkFNRT0ic3lzcm9vdCIKK0NUX1NZU1JPT1RfRElSX1BSRUZJWD0iIgorQ1RfV0FOVFNfU1RBVElDX0xJTks9eQorIyBDVF9TVEFUSUNfVE9PTENIQUlOIGlzIG5vdCBzZXQKK0NUX1RPT0xDSEFJTl9QS0dWRVJTSU9OPSIiCitDVF9UT09MQ0hBSU5fQlVHVVJMPSIiCisKKyMKKyMgVHVwbGUgY29tcGxldGlvbiBhbmQgYWxpYXNpbmcKKyMKK0NUX1RBUkdFVF9WRU5ET1I9Im1hbHRhIgorQ1RfVEFSR0VUX0FMSUFTX1NFRF9FWFBSPSIiCitDVF9UQVJHRVRfQUxJQVM9IiIKKworIworIyBUb29sY2hhaW4gdHlwZQorIworIyBDVF9OQVRJVkUgaXMgbm90IHNldAorQ1RfQ1JPU1M9eQorIyBDVF9DUk9TU19OQVRJVkUgaXMgbm90IHNldAorIyBDVF9DQU5BRElBTiBpcyBub3Qgc2V0CitDVF9UT09MQ0hBSU5fVFlQRT0iY3Jvc3MiCisKKyMKKyMgQnVpbGQgc3lzdGVtCisjCitDVF9CVUlMRD0iIgorQ1RfQlVJTERfUFJFRklYPSIiCitDVF9CVUlMRF9TVUZGSVg9IiIKKworIworIyBPcGVyYXRpbmcgU3lzdGVtCisjCitDVF9LRVJORUxfU1VQUE9SVFNfU0hBUkVEX0xJQlM9eQorQ1RfS0VSTkVMPSJsaW51eCIKK0NUX0tFUk5FTF9WRVJTSU9OPSIyLjYuMzguOCIKKyMgQ1RfS0VSTkVMX2JhcmVfbWV0YWwgaXMgbm90IHNldAorQ1RfS0VSTkVMX2xpbnV4PXkKK0NUX0tFUk5FTF9iYXJlX21ldGFsX0FWQUlMQUJMRT15CitDVF9LRVJORUxfbGludXhfQVZBSUxBQkxFPXkKKyMgQ1RfS0VSTkVMX1ZfM18wXzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMyBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8yIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzEgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzAgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzlfNCBpcyBub3Qgc2V0CitDVF9LRVJORUxfVl8yXzZfMzhfOD15CisjIENUX0tFUk5FTF9WXzJfNl8zN182IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM2XzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzVfMTQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzRfMTAgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzNfMTkgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzJfNDYgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzFfMTQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMjdfNTkgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9taW5ndzMyX0FWQUlMQUJMRT15CisKKyMKKyMgQ29tbW9uIGtlcm5lbCBvcHRpb25zCisjCitDVF9TSEFSRURfTElCUz15CisKKyMKKyMgbGludXggb3RoZXIgb3B0aW9ucworIworQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8wPXkKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8xIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8yIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9MSU5VWF9WRVJCT1NFX0xFVkVMPTAKK0NUX0tFUk5FTF9MSU5VWF9JTlNUQUxMX0NIRUNLPXkKKworIworIyBCaW5hcnkgdXRpbGl0aWVzCisjCitDVF9BUkNIX0JJTkZNVF9FTEY9eQorCisjCisjIEdOVSBiaW51dGlscworIworIyBDVF9CSU5VVElMU19WXzJfMjFfNTMgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVl8yXzIxXzFhPXkKKyMgQ1RfQklOVVRJTFNfVl8yXzIwXzFhIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfVl8yXzE5XzFhIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfVl8yXzE4YSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WRVJTSU9OPSIyLjIxLjFhIgorQ1RfQklOVVRJTFNfMl8yMV9vcl9sYXRlcj15CitDVF9CSU5VVElMU18yXzIwX29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMTlfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfMl8xOF9vcl9sYXRlcj15CitDVF9CSU5VVElMU19IQVNfR09MRD15CitDVF9CSU5VVElMU19IQVNfUExVR0lOUz15CitDVF9CSU5VVElMU19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQklOVVRJTFNfRk9SQ0VfTERfQkZEPXkKK0NUX0JJTlVUSUxTX0xJTktFUl9MRD15CitDVF9CSU5VVElMU19MSU5LRVJTX0xJU1Q9ImxkIgorQ1RfQklOVVRJTFNfTElOS0VSX0RFRkFVTFQ9ImJmZCIKKyMgQ1RfQklOVVRJTFNfUExVR0lOUyBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19FWFRSQV9DT05GSUdfQVJSQVk9IiIKKyMgQ1RfQklOVVRJTFNfRk9SX1RBUkdFVCBpcyBub3Qgc2V0CisKKyMKKyMgQyBjb21waWxlcgorIworQ1RfQ0M9ImdjYyIKK0NUX0NDX1ZFUlNJT049IjQuNC42IgorQ1RfQ0NfZ2NjPXkKKyMgQ1RfQ0NfR0NDX1NIT1dfTElOQVJPIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzZfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF82XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF81XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8wIGlzIG5vdCBzZXQKK0NUX0NDX1ZfNF80XzY9eQorIyBDVF9DQ19WXzRfNF81IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzMgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8yIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM182IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfMl80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfMiBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfNF8yX29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzNfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDXzRfND15CitDVF9DQ19HQ0NfNF80X29yX2xhdGVyPXkKK0NUX0NDX0dDQ19IQVNfR1JBUEhJVEU9eQorQ1RfQ0NfR0NDX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9DQ19HQ0NfVVNFX0dNUF9NUEZSPXkKKyMgQ1RfQ0NfTEFOR19GT1JUUkFOIGlzIG5vdCBzZXQKK0NUX0NDX1NVUFBPUlRfQ1hYPXkKK0NUX0NDX1NVUFBPUlRfRk9SVFJBTj15CitDVF9DQ19TVVBQT1JUX0pBVkE9eQorQ1RfQ0NfU1VQUE9SVF9BREE9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDPXkKK0NUX0NDX1NVUFBPUlRfT0JKQ1hYPXkKKworIworIyBBZGRpdGlvbmFsIHN1cHBvcnRlZCBsYW5ndWFnZXM6CisjCisjIENUX0NDX0xBTkdfQ1hYIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfTEFOR19KQVZBIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfTEFOR19BREEgaXMgbm90IHNldAorIyBDVF9DQ19MQU5HX09CSkMgaXMgbm90IHNldAorIyBDVF9DQ19MQU5HX09CSkNYWCBpcyBub3Qgc2V0CitDVF9DQ19MQU5HX09USEVSUz0iIgorCisjCisjIGdjYyBvdGhlciBvcHRpb25zCisjCitDVF9DQ19FTkFCTEVfQ1hYX0ZMQUdTPSIiCitDVF9DQ19DT1JFX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfQ0NfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9DQ19TVEFUSUNfTElCU1REQ1hYPXkKKworIworIyBPcHRpbWlzYXRpb24gZmVhdHVyZXMKKyMKKyMgQ1RfQ0NfR0NDX1VTRV9HUkFQSElURSBpcyBub3Qgc2V0CisKKyMKKyMgU2V0dGluZ3MgZm9yIGxpYnJhcmllcyBydW5uaW5nIG9uIHRhcmdldAorIworQ1RfQ0NfR0NDX0VOQUJMRV9UQVJHRVRfT1BUU1BBQ0U9eQorIyBDVF9DQ19HQ0NfTElCTVVERkxBUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJHT01QIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQlNTUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYy4gb2JzY3VyZSBvcHRpb25zLgorIworQ1RfQ0NfQ1hBX0FURVhJVD15CisjIENUX0NDX0dDQ19ESVNBQkxFX1BDSCBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfU0pMSl9FWENFUFRJT05TPW0KK0NUX0NDX0dDQ19MREJMXzEyOD1tCitDVF9DQ19HQ0NfSEFTX0FSQ0hfT1BUSU9OUz15CisKKyMKKyMgYXJjaGljdGVjdHVyZS1zcGVjaWZpYyBvcHRpb25zCisjCitDVF9DQ19HQ0NfbWlwc19sbHNjPW0KK0NUX0NDX0dDQ19taXBzX3N5bmNpPW0KKyMgQ1RfQ0NfR0NDX21pcHNfcGx0IGlzIG5vdCBzZXQKKworIworIyBDLWxpYnJhcnkKKyMKK0NUX0xJQkM9ImVnbGliYyIKK0NUX0xJQkNfVkVSU0lPTj0iMl8xMyIKK0NUX0xJQkNfZWdsaWJjPXkKKyMgQ1RfTElCQ19nbGliYyBpcyBub3Qgc2V0CisjIENUX0xJQkNfdUNsaWJjIGlzIG5vdCBzZXQKK0NUX0xJQkNfZWdsaWJjX0FWQUlMQUJMRT15CisjIENUX0xJQkNfRUdMSUJDX1ZfMl8xNCBpcyBub3Qgc2V0CitDVF9MSUJDX0VHTElCQ19WXzJfMTM9eQorIyBDVF9MSUJDX0VHTElCQ19WXzJfMTIgaXMgbm90IHNldAorIyBDVF9MSUJDX0VHTElCQ19WXzJfMTEgaXMgbm90IHNldAorIyBDVF9MSUJDX0VHTElCQ19WXzJfMTAgaXMgbm90IHNldAorIyBDVF9MSUJDX0VHTElCQ19WXzJfOSBpcyBub3Qgc2V0CisjIENUX0xJQkNfRUdMSUJDX1ZfVFJVTksgaXMgbm90IHNldAorQ1RfTElCQ19FR0xJQkNfMl8xM19vcl9sYXRlcj15CitDVF9MSUJDX0VHTElCQ18yXzEyX29yX2xhdGVyPXkKK0NUX0xJQkNfRUdMSUJDXzJfMTFfb3JfbGF0ZXI9eQorQ1RfTElCQ19FR0xJQkNfMl8xMF9vcl9sYXRlcj15CitDVF9MSUJDX0VHTElCQ18yXzlfb3JfbGF0ZXI9eQorQ1RfTElCQ19FR0xJQkNfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0VHTElCQ19SRVZJU0lPTj0iSEVBRCIKKyMgQ1RfRUdMSUJDX0hUVFAgaXMgbm90IHNldAorIyBDVF9FR0xJQkNfQ0hFQ0tPVVQgaXMgbm90IHNldAorIyBDVF9FR0xJQkNfT1BUX1NJWkUgaXMgbm90IHNldAorIyBDVF9FR0xJQkNfQ1VTVE9NX0NPTkZJRyBpcyBub3Qgc2V0CitDVF9MSUJDX2dsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX21pbmd3X0FWQUlMQUJMRT15CitDVF9MSUJDX25ld2xpYl9BVkFJTEFCTEU9eQorQ1RfTElCQ19ub25lX0FWQUlMQUJMRT15CitDVF9MSUJDX3VDbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19TVVBQT1JUX1RIUkVBRFNfQU5ZPXkKK0NUX0xJQkNfU1VQUE9SVF9OUFRMPXkKK0NUX0xJQkNfU1VQUE9SVF9MSU5VWFRIUkVBRFM9eQorQ1RfVEhSRUFEUz0ibnB0bCIKKworIworIyBDb21tb24gQyBsaWJyYXJ5IG9wdGlvbnMKKyMKK0NUX1RIUkVBRFNfTlBUTD15CisjIENUX1RIUkVBRFNfTElOVVhUSFJFQURTIGlzIG5vdCBzZXQKK0NUX0xJQkNfWExERD15CisKKyMKKyMgZWdsaWJjIG90aGVyIG9wdGlvbnMKKyMKK0NUX0xJQkNfR0xJQkNfTUFZX0ZPUkNFX1BPUlRTPXkKK0NUX0xJQkNfZ2xpYmNfZmFtaWxseT15CitDVF9MSUJDX0dMSUJDX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfTElCQ19HTElCQ19DT05GSUdQQVJNUz0iIgorQ1RfTElCQ19HTElCQ19FWFRSQV9DRkxBR1M9IiIKK0NUX0xJQkNfRVhUUkFfQ0NfQVJHUz0iIgorIyBDVF9MSUJDX0VOQUJMRV9GT1JUSUZJRURfQlVJTEQgaXMgbm90IHNldAorIyBDVF9MSUJDX0RJU0FCTEVfVkVSU0lPTklORyBpcyBub3Qgc2V0CitDVF9MSUJDX09MREVTVF9BQkk9IiIKK0NUX0xJQkNfR0xJQkNfRk9SQ0VfVU5XSU5EPXkKK0NUX0xJQkNfR0xJQkNfVVNFX1BPUlRTPXkKK0NUX0xJQkNfQURET05TX0xJU1Q9IiIKKworIworIyBXQVJOSU5HICEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjCisKKyMKKyMgICBGb3IgZ2xpYmMgPj0gMi44LCBpdCBjYW4gaGFwcGVuIHRoYXQgdGhlIHRhcmJhbGxzICAgIAorIworCisjCisjICAgZm9yIHRoZSBhZGRvbnMgYXJlIG5vdCBhdmFpbGFibGUgZm9yIGRvd25sb2FkLiAgICAgICAKKyMKKworIworIyAgIElmIHRoYXQgaGFwcGVucywgYmFkIGx1Y2suLi4gVHJ5IGEgcHJldmlvdXMgdmVyc2lvbiAgCisjCisKKyMKKyMgICBvciB0cnkgYWdhaW4gbGF0ZXIuLi4gOi0oICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIworIyBDVF9MSUJDX0xPQ0FMRVMgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX05PTkUgaXMgbm90IHNldAorQ1RfTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9BU19IRUFERVJTPXkKKyMgQ1RfTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9DSE9TRU4gaXMgbm90IHNldAorQ1RfTElCQ19HTElCQ19NSU5fS0VSTkVMPSIyLjYuMzguOCIKKworIworIyBEZWJ1ZyBmYWNpbGl0aWVzCisjCisjIENUX0RFQlVHX2RtYWxsb2MgaXMgbm90IHNldAorIyBDVF9ERUJVR19kdW1hIGlzIG5vdCBzZXQKK0NUX0RFQlVHX2dkYj15CitDVF9HREJfQ1JPU1M9eQorIyBDVF9HREJfQ1JPU1NfU1RBVElDIGlzIG5vdCBzZXQKK0NUX0dEQl9DUk9TU19QWVRIT049eQorIyBDVF9HREJfTkFUSVZFIGlzIG5vdCBzZXQKK0NUX0dEQl9HREJTRVJWRVI9eQorIyBDVF9HREJfR0RCU0VSVkVSX1NUQVRJQyBpcyBub3Qgc2V0CisKKyMKKyMgZ2RiIHZlcnNpb24KKyMKKyMgQ1RfREVCVUdfR0RCX1NIT1dfTElOQVJPIGlzIG5vdCBzZXQKKyMgQ1RfR0RCX1ZfN18zYSBpcyBub3Qgc2V0CitDVF9HREJfVl83XzJhPXkKKyMgQ1RfR0RCX1ZfN18xYSBpcyBub3Qgc2V0CisjIENUX0dEQl9WXzdfMF8xYSBpcyBub3Qgc2V0CisjIENUX0dEQl9WXzdfMGEgaXMgbm90IHNldAorIyBDVF9HREJfVl82XzhhIGlzIG5vdCBzZXQKK0NUX0dEQl83XzBfb3JfbGF0ZXI9eQorQ1RfR0RCX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9HREJfSU5TVEFMTF9HREJJTklUPXkKK0NUX0dEQl9WRVJTSU9OPSI3LjJhIgorIyBDVF9ERUJVR19sdHJhY2UgaXMgbm90IHNldAorIyBDVF9ERUJVR19zdHJhY2UgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMKKyMKK0NUX0NPTVBMSUJTX05FRURFRD15CitDVF9HTVBfTkVFREVEPXkKK0NUX01QRlJfTkVFREVEPXkKK0NUX0NPTVBMSUJTPXkKK0NUX0dNUD15CitDVF9NUEZSPXkKKyMgQ1RfR01QX1ZfNV8wXzIgaXMgbm90IHNldAorQ1RfR01QX1ZfNV8wXzE9eQorIyBDVF9HTVBfVl80XzNfMiBpcyBub3Qgc2V0CisjIENUX0dNUF9WXzRfM18xIGlzIG5vdCBzZXQKKyMgQ1RfR01QX1ZfNF8zXzAgaXMgbm90IHNldAorQ1RfR01QX1ZFUlNJT049IjUuMC4xIgorIyBDVF9NUEZSX1ZfM18wXzEgaXMgbm90IHNldAorQ1RfTVBGUl9WXzNfMF8wPXkKKyMgQ1RfTVBGUl9WXzJfNF8yIGlzIG5vdCBzZXQKKyMgQ1RfTVBGUl9WXzJfNF8xIGlzIG5vdCBzZXQKKyMgQ1RfTVBGUl9WXzJfNF8wIGlzIG5vdCBzZXQKK0NUX01QRlJfVkVSU0lPTj0iMy4wLjAiCisKKyMKKyMgQ29tcGFuaW9uIGxpYnJhcmllcyBjb21tb24gb3B0aW9ucworIworIyBDVF9DT01QTElCU19DSEVDSyBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcGFuaW9uIHRvb2xzCisjCisKKyMKKyMgUkVBRCBIRUxQIGJlZm9yZSB5b3Ugc2F5ICdZJyBiZWxvdyAhISEKKyMKKyMgQ1RfQ09NUF9UT09MUyBpcyBub3Qgc2V0CisKKyMKKyMgVGVzdCBzdWl0ZQorIworQ1RfVEVTVF9TVUlURT15CitDVF9URVNUX1NVSVRFX0dDQz15CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvbWlwcy1tYWx0YS1saW51eC1nbnUvcmVwb3J0ZWQuYnkgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvbWlwcy1tYWx0YS1saW51eC1nbnUvcmVwb3J0ZWQuYnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY1YWVlZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9taXBzLW1hbHRhLWxpbnV4LWdudS9yZXBvcnRlZC5ieQpAQCAtMCwwICsxLDMgQEAKK3JlcG9ydGVyX25hbWU9IkFudG9ueSBQYXZsb3YiCityZXBvcnRlcl91cmw9IiIKK3JlcG9ydGVyX2NvbW1lbnQ9IkV4cGVyaW1lbnRhbCB0b29sY2hhaW4gZm9yIE1JUFMzMnIyIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL21pcHMtdW5rbm93bi1lbGYvY3Jvc3N0b29sLmNvbmZpZyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9taXBzLXVua25vd24tZWxmL2Nyb3NzdG9vbC5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUxNzI1NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9taXBzLXVua25vd24tZWxmL2Nyb3NzdG9vbC5jb25maWcKQEAgLTAsMCArMSwzNDUgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgY3Jvc3N0b29sLU5HIGhnX2RlZmF1bHRAMjcyMV83YjY0NzQ2YjBhYjMgQ29uZmlndXJhdGlvbgorIyBTdW4gT2N0IDE2IDE3OjI5OjU0IDIwMTEKKyMKK0NUX0NPTkZJR1VSRV9oYXNfeHp1dGlscz15CitDVF9DT05GSUdVUkVfaGFzX2N2cz15CitDVF9DT05GSUdVUkVfaGFzX3N2bj15CitDVF9NT0RVTEVTPXkKKworIworIyBQYXRocyBhbmQgbWlzYyBvcHRpb25zCisjCisKKyMKKyMgY3Jvc3N0b29sLU5HIGJlaGF2aW9yCisjCisjIENUX09CU09MRVRFIGlzIG5vdCBzZXQKKyMgQ1RfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfQ1QgaXMgbm90IHNldAorCisjCisjIFBhdGhzCisjCitDVF9MT0NBTF9UQVJCQUxMU19ESVI9IiR7SE9NRX0vc3JjIgorQ1RfU0FWRV9UQVJCQUxMUz15CitDVF9XT1JLX0RJUj0iJHtDVF9UT1BfRElSfS8uYnVpbGQiCitDVF9QUkVGSVhfRElSPSIke0hPTUV9L3gtdG9vbHMvJHtDVF9UQVJHRVR9IgorQ1RfSU5TVEFMTF9ESVI9IiR7Q1RfUFJFRklYX0RJUn0iCitDVF9STV9SRl9QUkVGSVhfRElSPXkKK0NUX1JFTU9WRV9ET0NTPXkKK0NUX0lOU1RBTExfRElSX1JPPXkKK0NUX1NUUklQX0FMTF9UT09MQ0hBSU5fRVhFQ1VUQUJMRVM9eQorCisjCisjIERvd25sb2FkaW5nCisjCisjIENUX0ZPUkJJRF9ET1dOTE9BRCBpcyBub3Qgc2V0CisjIENUX0ZPUkNFX0RPV05MT0FEIGlzIG5vdCBzZXQKK0NUX0NPTk5FQ1RfVElNRU9VVD0xMAorIyBDVF9PTkxZX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfVVNFX01JUlJPUiBpcyBub3Qgc2V0CisKKyMKKyMgRXh0cmFjdGluZworIworIyBDVF9GT1JDRV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX09WRVJJREVfQ09ORklHX0dVRVNTX1NVQj15CisjIENUX09OTFlfRVhUUkFDVCBpcyBub3Qgc2V0CitDVF9QQVRDSF9CVU5ETEVEPXkKKyMgQ1RfUEFUQ0hfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9CVU5ETEVEX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTE9DQUxfQlVORExFRCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfRkFMTEJBQ0tfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9GQUxMQkFDS19CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTk9ORSBpcyBub3Qgc2V0CitDVF9QQVRDSF9PUkRFUj0iYnVuZGxlZCIKKworIworIyBCdWlsZCBiZWhhdmlvcgorIworQ1RfUEFSQUxMRUxfSk9CUz0wCitDVF9MT0FEPTAKK0NUX1VTRV9QSVBFUz15CitDVF9FWFRSQV9GTEFHU19GT1JfSE9TVD0iIgorIyBDVF9DT05GSUdfU0hFTExfU0ggaXMgbm90IHNldAorIyBDVF9DT05GSUdfU0hFTExfQVNIIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTF9CQVNIPXkKKyMgQ1RfQ09ORklHX1NIRUxMX0NVU1RPTSBpcyBub3Qgc2V0CitDVF9DT05GSUdfU0hFTEw9IiR7YmFzaH0iCisKKyMKKyMgTG9nZ2luZworIworIyBDVF9MT0dfRVJST1IgaXMgbm90IHNldAorIyBDVF9MT0dfV0FSTiBpcyBub3Qgc2V0CisjIENUX0xPR19JTkZPIGlzIG5vdCBzZXQKK0NUX0xPR19FWFRSQT15CisjIENUX0xPR19BTEwgaXMgbm90IHNldAorIyBDVF9MT0dfREVCVUcgaXMgbm90IHNldAorQ1RfTE9HX0xFVkVMX01BWD0iRVhUUkEiCisjIENUX0xPR19TRUVfVE9PTFNfV0FSTiBpcyBub3Qgc2V0CitDVF9MT0dfUFJPR1JFU1NfQkFSPXkKK0NUX0xPR19UT19GSUxFPXkKK0NUX0xPR19GSUxFX0NPTVBSRVNTPXkKKworIworIyBUYXJnZXQgb3B0aW9ucworIworQ1RfQVJDSD0ibWlwcyIKK0NUX0FSQ0hfU1VQUE9SVFNfQk9USF9FTkRJQU49eQorQ1RfQVJDSF9TVVBQT1JUU18zMj15CitDVF9BUkNIX1NVUFBPUlRfQVJDSD15CitDVF9BUkNIX1NVUFBPUlRfVFVORT15CitDVF9BUkNIX0RFRkFVTFRfQkU9eQorQ1RfQVJDSF9ERUZBVUxUXzMyPXkKK0NUX0FSQ0hfQVJDSD0iIgorQ1RfQVJDSF9UVU5FPSIiCitDVF9BUkNIX0JFPXkKKyMgQ1RfQVJDSF9MRSBpcyBub3Qgc2V0CitDVF9BUkNIXzMyPXkKK0NUX0FSQ0hfQklUTkVTUz0zMgorIyBDVF9BUkNIX0ZMT0FUX0hXIGlzIG5vdCBzZXQKK0NUX0FSQ0hfRkxPQVRfU1c9eQorQ1RfVEFSR0VUX0NGTEFHUz0iIgorQ1RfVEFSR0VUX0xERkxBR1M9IiIKKyMgQ1RfQVJDSF9hbHBoYSBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYXJtIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9hdnIzMiBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYmxhY2tmaW4gaXMgbm90IHNldAorQ1RfQVJDSF9taXBzPXkKKyMgQ1RfQVJDSF9wb3dlcnBjIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zaCBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc3BhcmMgaXMgbm90IHNldAorIyBDVF9BUkNIX3g4NiBpcyBub3Qgc2V0CitDVF9BUkNIX2FscGhhX0FWQUlMQUJMRT15CitDVF9BUkNIX2FybV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hdnIzMl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9ibGFja2Zpbl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9tNjhrX0FWQUlMQUJMRT15CitDVF9BUkNIX21pcHNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfcG93ZXJwY19BVkFJTEFCTEU9eQorQ1RfQVJDSF9zMzkwX0FWQUlMQUJMRT15CitDVF9BUkNIX3NoX0FWQUlMQUJMRT15CitDVF9BUkNIX3NwYXJjX0FWQUlMQUJMRT15CitDVF9BUkNIX3g4Nl9BVkFJTEFCTEU9eQorCisjCisjIEdlbmVyaWMgdGFyZ2V0IG9wdGlvbnMKKyMKK0NUX0FSQ0hfVVNFX01NVT15CisKKyMKKyMgVGFyZ2V0IG9wdGltaXNhdGlvbnMKKyMKKworIworIyBtaXBzIG90aGVyIG9wdGlvbnMKKyMKK0NUX0FSQ0hfbWlwc19vMzI9eQorQ1RfQVJDSF9taXBzX0FCST0iMzIiCisKKyMKKyMgVG9vbGNoYWluIG9wdGlvbnMKKyMKKworIworIyBHZW5lcmFsIHRvb2xjaGFpbiBvcHRpb25zCisjCitDVF9GT1JDRV9TWVNST09UPXkKK0NUX1VTRV9TWVNST09UPXkKK0NUX1NZU1JPT1RfTkFNRT0ic3lzcm9vdCIKK0NUX1NZU1JPT1RfRElSX1BSRUZJWD0iIgorQ1RfVE9PTENIQUlOX1BLR1ZFUlNJT049IiIKK0NUX1RPT0xDSEFJTl9CVUdVUkw9IiIKKworIworIyBUdXBsZSBjb21wbGV0aW9uIGFuZCBhbGlhc2luZworIworQ1RfVEFSR0VUX1ZFTkRPUj0idW5rbm93biIKK0NUX1RBUkdFVF9BTElBU19TRURfRVhQUj0iIgorQ1RfVEFSR0VUX0FMSUFTPSIiCisKKyMKKyMgVG9vbGNoYWluIHR5cGUKKyMKK0NUX0NST1NTPXkKK0NUX1RPT0xDSEFJTl9UWVBFPSJjcm9zcyIKKworIworIyBCdWlsZCBzeXN0ZW0KKyMKK0NUX0JVSUxEPSIiCitDVF9CVUlMRF9QUkVGSVg9IiIKK0NUX0JVSUxEX1NVRkZJWD0iIgorCisjCisjIE9wZXJhdGluZyBTeXN0ZW0KKyMKK0NUX0JBUkVfTUVUQUw9eQorQ1RfS0VSTkVMPSJiYXJlLW1ldGFsIgorQ1RfS0VSTkVMX2JhcmVfbWV0YWw9eQorIyBDVF9LRVJORUxfbGludXggaXMgbm90IHNldAorQ1RfS0VSTkVMX2JhcmVfbWV0YWxfQVZBSUxBQkxFPXkKK0NUX0tFUk5FTF9saW51eF9BVkFJTEFCTEU9eQorQ1RfS0VSTkVMX21pbmd3MzJfQVZBSUxBQkxFPXkKKworIworIyBDb21tb24ga2VybmVsIG9wdGlvbnMKKyMKKworIworIyBCaW5hcnkgdXRpbGl0aWVzCisjCitDVF9BUkNIX0JJTkZNVF9FTEY9eQorCisjCisjIEdOVSBiaW51dGlscworIworIyBDVF9CSU5VVElMU19WXzJfMjFfMWEgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19WXzJfMjBfMWEgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVl8yXzE5XzFhPXkKKyMgQ1RfQklOVVRJTFNfVl8yXzE4YSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WRVJTSU9OPSIyLjE5LjFhIgorQ1RfQklOVVRJTFNfMl8xOV9vcl9sYXRlcj15CitDVF9CSU5VVElMU18yXzE4X29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9CSU5VVElMU19MSU5LRVJfTEQ9eQorQ1RfQklOVVRJTFNfTElOS0VSU19MSVNUPSJsZCIKK0NUX0JJTlVUSUxTX0xJTktFUl9ERUZBVUxUPSJiZmQiCitDVF9CSU5VVElMU19FWFRSQV9DT05GSUdfQVJSQVk9IiIKKworIworIyBDIGNvbXBpbGVyCisjCitDVF9DQz0iZ2NjIgorQ1RfQ0NfVkVSU0lPTj0iNC4zLjIiCitDVF9DQ19nY2M9eQorIyBDVF9DQ19WXzRfNF82IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM180IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMyBpcyBub3Qgc2V0CitDVF9DQ19WXzRfM18yPXkKKyMgQ1RfQ0NfVl80XzNfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8yXzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfMl8yIGlzIG5vdCBzZXQKK0NUX0NDX0dDQ180XzJfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDXzRfMz15CitDVF9DQ19HQ0NfNF8zX29yX2xhdGVyPXkKK0NUX0NDX0dDQ19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQ0NfR0NDX1VTRV9HTVBfTVBGUj15CitDVF9DQ19TVVBQT1JUX0NYWD15CitDVF9DQ19TVVBQT1JUX0ZPUlRSQU49eQorQ1RfQ0NfU1VQUE9SVF9KQVZBPXkKK0NUX0NDX1NVUFBPUlRfQURBPXkKK0NUX0NDX1NVUFBPUlRfT0JKQz15CitDVF9DQ19TVVBQT1JUX09CSkNYWD15CisKKyMKKyMgQWRkaXRpb25hbCBzdXBwb3J0ZWQgbGFuZ3VhZ2VzOgorIworIyBDVF9DQ19MQU5HX0NYWCBpcyBub3Qgc2V0CisKKyMKKyMgZ2NjIG90aGVyIG9wdGlvbnMKKyMKK0NUX0NDX0VOQUJMRV9DWFhfRkxBR1M9IiIKK0NUX0NDX0NPUkVfRVhUUkFfQ09ORklHX0FSUkFZPSIiCisKKyMKKyMgT3B0aW1pc2F0aW9uIGZlYXR1cmVzCisjCisKKyMKKyMgU2V0dGluZ3MgZm9yIGxpYnJhcmllcyBydW5uaW5nIG9uIHRhcmdldAorIworQ1RfQ0NfR0NDX0VOQUJMRV9UQVJHRVRfT1BUU1BBQ0U9eQorIyBDVF9DQ19HQ0NfTElCTVVERkxBUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJHT01QIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQlNTUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYy4gb2JzY3VyZSBvcHRpb25zLgorIworIyBDVF9DQ19HQ0NfRElTQUJMRV9QQ0ggaXMgbm90IHNldAorQ1RfQ0NfR0NDX0xEQkxfMTI4PW0KK0NUX0NDX0dDQ19IQVNfQVJDSF9PUFRJT05TPXkKKworIworIyBhcmNoaWN0ZWN0dXJlLXNwZWNpZmljIG9wdGlvbnMKKyMKK0NUX0NDX0dDQ19taXBzX2xsc2M9bQorQ1RfQ0NfR0NDX21pcHNfc3luY2k9bQorIyBDVF9DQ19HQ0NfbWlwc19wbHQgaXMgbm90IHNldAorCisjCisjIEMtbGlicmFyeQorIworQ1RfTElCQz0ibm9uZSIKKyMgQ1RfTElCQ19uZXdsaWIgaXMgbm90IHNldAorQ1RfTElCQ19ub25lPXkKK0NUX0xJQkNfZWdsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX2dsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX21pbmd3X0FWQUlMQUJMRT15CitDVF9MSUJDX25ld2xpYl9BVkFJTEFCTEU9eQorQ1RfTElCQ19ub25lX0FWQUlMQUJMRT15CitDVF9MSUJDX3VDbGliY19BVkFJTEFCTEU9eQorQ1RfVEhSRUFEUz0ibm9uZSIKKworIworIyBEZWJ1ZyBmYWNpbGl0aWVzCisjCisjIENUX0RFQlVHX2RtYWxsb2MgaXMgbm90IHNldAorIyBDVF9ERUJVR19kdW1hIGlzIG5vdCBzZXQKK0NUX0RFQlVHX2dkYj15CitDVF9HREJfQ1JPU1M9eQorIyBDVF9HREJfQ1JPU1NfU1RBVElDIGlzIG5vdCBzZXQKK0NUX0dEQl9DUk9TU19QWVRIT049eQorCisjCisjIEluIGJhcmUtbWV0YWwsIHlvdSdsbCBuZWVkIHRvICAgCisjCisKKyMKKyMgcHJvdmlkZSB5b3VyIG93biBnZGJzZXJ2ZXIgc3R1Yi4KKyMKKworIworIyBnZGIgdmVyc2lvbgorIworQ1RfR0RCX1ZfNl84YT15CitDVF9HREJfVkVSU0lPTj0iNi44YSIKKyMgQ1RfREVCVUdfbHRyYWNlIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfc3RyYWNlIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzCisjCitDVF9DT01QTElCU19ORUVERUQ9eQorQ1RfR01QX05FRURFRD15CitDVF9NUEZSX05FRURFRD15CitDVF9DT01QTElCUz15CitDVF9HTVA9eQorQ1RfTVBGUj15CitDVF9HTVBfVl80XzNfMj15CisjIENUX0dNUF9WXzRfM18xIGlzIG5vdCBzZXQKKyMgQ1RfR01QX1ZfNF8zXzAgaXMgbm90IHNldAorQ1RfR01QX1ZFUlNJT049IjQuMy4yIgorIyBDVF9NUEZSX1ZfM18wXzAgaXMgbm90IHNldAorQ1RfTVBGUl9WXzJfNF8yPXkKKyMgQ1RfTVBGUl9WXzJfNF8xIGlzIG5vdCBzZXQKKyMgQ1RfTVBGUl9WXzJfNF8wIGlzIG5vdCBzZXQKK0NUX01QRlJfVkVSU0lPTj0iMi40LjIiCisKKyMKKyMgQ29tcGFuaW9uIGxpYnJhcmllcyBjb21tb24gb3B0aW9ucworIworIyBDVF9DT01QTElCU19DSEVDSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvbWlwcy11bmtub3duLWVsZi9yZXBvcnRlZC5ieSBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9taXBzLXVua25vd24tZWxmL3JlcG9ydGVkLmJ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYThmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvbWlwcy11bmtub3duLWVsZi9yZXBvcnRlZC5ieQpAQCAtMCwwICsxLDMgQEAKK3JlcG9ydGVyX25hbWU9IllFTSIKK3JlcG9ydGVyX3VybD0iaHR0cDovL3ltb3Jpbi5pcy1hLWdlZWsub3JnLyIKK3JlcG9ydGVyX2NvbW1lbnQ9IiIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9taXBzLXVua25vd24tbGludXgtdWNsaWJjL2Nyb3NzdG9vbC5jb25maWcgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvbWlwcy11bmtub3duLWxpbnV4LXVjbGliYy9jcm9zc3Rvb2wuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0OTEzOGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvbWlwcy11bmtub3duLWxpbnV4LXVjbGliYy9jcm9zc3Rvb2wuY29uZmlnCkBAIC0wLDAgKzEsNTEwIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIGNyb3NzdG9vbC1ORyBoZ19kZWZhdWx0QDI3MjFfN2I2NDc0NmIwYWIzIENvbmZpZ3VyYXRpb24KKyMgU3VuIE9jdCAxNiAxNzozMDoxMSAyMDExCisjCitDVF9DT05GSUdVUkVfaGFzX3h6dXRpbHM9eQorQ1RfQ09ORklHVVJFX2hhc19jdnM9eQorQ1RfQ09ORklHVVJFX2hhc19zdm49eQorQ1RfTU9EVUxFUz15CisKKyMKKyMgUGF0aHMgYW5kIG1pc2Mgb3B0aW9ucworIworCisjCisjIGNyb3NzdG9vbC1ORyBiZWhhdmlvcgorIworIyBDVF9PQlNPTEVURSBpcyBub3Qgc2V0CitDVF9FWFBFUklNRU5UQUw9eQorIyBDVF9ERUJVR19DVCBpcyBub3Qgc2V0CisKKyMKKyMgUGF0aHMKKyMKK0NUX0xPQ0FMX1RBUkJBTExTX0RJUj0iJHtIT01FfS9zcmMiCitDVF9TQVZFX1RBUkJBTExTPXkKK0NUX1dPUktfRElSPSIke0NUX1RPUF9ESVJ9Ly5idWlsZCIKK0NUX1BSRUZJWF9ESVI9IiR7SE9NRX0veC10b29scy8ke0NUX1RBUkdFVH0iCitDVF9JTlNUQUxMX0RJUj0iJHtDVF9QUkVGSVhfRElSfSIKK0NUX1JNX1JGX1BSRUZJWF9ESVI9eQorQ1RfUkVNT1ZFX0RPQ1M9eQorQ1RfSU5TVEFMTF9ESVJfUk89eQorQ1RfU1RSSVBfQUxMX1RPT0xDSEFJTl9FWEVDVVRBQkxFUz15CisKKyMKKyMgRG93bmxvYWRpbmcKKyMKKyMgQ1RfRk9SQklEX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfRk9SQ0VfRE9XTkxPQUQgaXMgbm90IHNldAorQ1RfQ09OTkVDVF9USU1FT1VUPTEwCisjIENUX09OTFlfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9VU0VfTUlSUk9SIGlzIG5vdCBzZXQKKworIworIyBFeHRyYWN0aW5nCisjCisjIENUX0ZPUkNFX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfT1ZFUklERV9DT05GSUdfR1VFU1NfU1VCPXkKKyMgQ1RfT05MWV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX1BBVENIX0JVTkRMRUQ9eQorIyBDVF9QQVRDSF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9GQUxMQkFDS19MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0ZBTExCQUNLX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9OT05FIGlzIG5vdCBzZXQKK0NUX1BBVENIX09SREVSPSJidW5kbGVkIgorCisjCisjIEJ1aWxkIGJlaGF2aW9yCisjCitDVF9QQVJBTExFTF9KT0JTPTAKK0NUX0xPQUQ9MAorQ1RfVVNFX1BJUEVTPXkKK0NUX0VYVFJBX0ZMQUdTX0ZPUl9IT1NUPSIiCisjIENUX0NPTkZJR19TSEVMTF9TSCBpcyBub3Qgc2V0CisjIENUX0NPTkZJR19TSEVMTF9BU0ggaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMX0JBU0g9eQorIyBDVF9DT05GSUdfU0hFTExfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTD0iJHtiYXNofSIKKworIworIyBMb2dnaW5nCisjCisjIENUX0xPR19FUlJPUiBpcyBub3Qgc2V0CisjIENUX0xPR19XQVJOIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0lORk8gaXMgbm90IHNldAorQ1RfTE9HX0VYVFJBPXkKKyMgQ1RfTE9HX0FMTCBpcyBub3Qgc2V0CisjIENUX0xPR19ERUJVRyBpcyBub3Qgc2V0CitDVF9MT0dfTEVWRUxfTUFYPSJFWFRSQSIKKyMgQ1RfTE9HX1NFRV9UT09MU19XQVJOIGlzIG5vdCBzZXQKK0NUX0xPR19QUk9HUkVTU19CQVI9eQorQ1RfTE9HX1RPX0ZJTEU9eQorQ1RfTE9HX0ZJTEVfQ09NUFJFU1M9eQorCisjCisjIFRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIPSJtaXBzIgorQ1RfQVJDSF9TVVBQT1JUU19CT1RIX0VORElBTj15CitDVF9BUkNIX1NVUFBPUlRTXzMyPXkKK0NUX0FSQ0hfU1VQUE9SVFNfNjQ9eQorQ1RfQVJDSF9TVVBQT1JUX0FSQ0g9eQorQ1RfQVJDSF9TVVBQT1JUX1RVTkU9eQorQ1RfQVJDSF9ERUZBVUxUX0JFPXkKK0NUX0FSQ0hfREVGQVVMVF8zMj15CitDVF9BUkNIX0FSQ0g9Im1pcHMxIgorQ1RfQVJDSF9UVU5FPSIiCitDVF9BUkNIX0JFPXkKKyMgQ1RfQVJDSF9MRSBpcyBub3Qgc2V0CitDVF9BUkNIXzMyPXkKKyMgQ1RfQVJDSF82NCBpcyBub3Qgc2V0CitDVF9BUkNIX0JJVE5FU1M9MzIKKyMgQ1RfQVJDSF9GTE9BVF9IVyBpcyBub3Qgc2V0CitDVF9BUkNIX0ZMT0FUX1NXPXkKK0NUX1RBUkdFVF9DRkxBR1M9IiIKK0NUX1RBUkdFVF9MREZMQUdTPSIiCisjIENUX0FSQ0hfYWxwaGEgaXMgbm90IHNldAorIyBDVF9BUkNIX2FybSBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYXZyMzIgaXMgbm90IHNldAorIyBDVF9BUkNIX2JsYWNrZmluIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9tNjhrIGlzIG5vdCBzZXQKK0NUX0FSQ0hfbWlwcz15CisjIENUX0FSQ0hfcG93ZXJwYyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfczM5MCBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc2ggaXMgbm90IHNldAorIyBDVF9BUkNIX3NwYXJjIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF94ODYgaXMgbm90IHNldAorQ1RfQVJDSF9hbHBoYV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hcm1fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXZyMzJfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYmxhY2tmaW5fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbTY4a19BVkFJTEFCTEU9eQorQ1RfQVJDSF9taXBzX0FWQUlMQUJMRT15CitDVF9BUkNIX3Bvd2VycGNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfczM5MF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zaF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zcGFyY19BVkFJTEFCTEU9eQorQ1RfQVJDSF94ODZfQVZBSUxBQkxFPXkKKworIworIyBHZW5lcmljIHRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIX1VTRV9NTVU9eQorCisjCisjIFRhcmdldCBvcHRpbWlzYXRpb25zCisjCisKKyMKKyMgbWlwcyBvdGhlciBvcHRpb25zCisjCitDVF9BUkNIX21pcHNfbzMyPXkKK0NUX0FSQ0hfbWlwc19BQkk9IjMyIgorCisjCisjIFRvb2xjaGFpbiBvcHRpb25zCisjCisKKyMKKyMgR2VuZXJhbCB0b29sY2hhaW4gb3B0aW9ucworIworQ1RfRk9SQ0VfU1lTUk9PVD15CitDVF9VU0VfU1lTUk9PVD15CitDVF9TWVNST09UX05BTUU9InN5c3Jvb3QiCitDVF9TWVNST09UX0RJUl9QUkVGSVg9IiIKK0NUX1dBTlRTX1NUQVRJQ19MSU5LPXkKKyMgQ1RfU1RBVElDX1RPT0xDSEFJTiBpcyBub3Qgc2V0CitDVF9UT09MQ0hBSU5fUEtHVkVSU0lPTj0iIgorQ1RfVE9PTENIQUlOX0JVR1VSTD0iIgorCisjCisjIFR1cGxlIGNvbXBsZXRpb24gYW5kIGFsaWFzaW5nCisjCitDVF9UQVJHRVRfVkVORE9SPSJ1bmtub3duIgorQ1RfVEFSR0VUX0FMSUFTX1NFRF9FWFBSPSIiCitDVF9UQVJHRVRfQUxJQVM9IiIKKworIworIyBUb29sY2hhaW4gdHlwZQorIworIyBDVF9OQVRJVkUgaXMgbm90IHNldAorQ1RfQ1JPU1M9eQorIyBDVF9DUk9TU19OQVRJVkUgaXMgbm90IHNldAorIyBDVF9DQU5BRElBTiBpcyBub3Qgc2V0CitDVF9UT09MQ0hBSU5fVFlQRT0iY3Jvc3MiCisKKyMKKyMgQnVpbGQgc3lzdGVtCisjCitDVF9CVUlMRD0iIgorQ1RfQlVJTERfUFJFRklYPSIiCitDVF9CVUlMRF9TVUZGSVg9IiIKKworIworIyBPcGVyYXRpbmcgU3lzdGVtCisjCitDVF9LRVJORUxfU1VQUE9SVFNfU0hBUkVEX0xJQlM9eQorQ1RfS0VSTkVMPSJsaW51eCIKK0NUX0tFUk5FTF9WRVJTSU9OPSIzLjAuNCIKKyMgQ1RfS0VSTkVMX2JhcmVfbWV0YWwgaXMgbm90IHNldAorQ1RfS0VSTkVMX2xpbnV4PXkKK0NUX0tFUk5FTF9iYXJlX21ldGFsX0FWQUlMQUJMRT15CitDVF9LRVJORUxfbGludXhfQVZBSUxBQkxFPXkKK0NUX0tFUk5FTF9WXzNfMF80PXkKKyMgQ1RfS0VSTkVMX1ZfM18wXzMgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8xIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM5XzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzhfOCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zN182IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM2XzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzVfMTQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzRfMTAgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzNfMTkgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzJfNDYgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzFfMTQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMjdfNTkgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9taW5ndzMyX0FWQUlMQUJMRT15CisKKyMKKyMgQ29tbW9uIGtlcm5lbCBvcHRpb25zCisjCitDVF9TSEFSRURfTElCUz15CisKKyMKKyMgbGludXggb3RoZXIgb3B0aW9ucworIworQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8wPXkKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8xIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8yIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9MSU5VWF9WRVJCT1NFX0xFVkVMPTAKK0NUX0tFUk5FTF9MSU5VWF9JTlNUQUxMX0NIRUNLPXkKKworIworIyBCaW5hcnkgdXRpbGl0aWVzCisjCitDVF9BUkNIX0JJTkZNVF9FTEY9eQorCisjCisjIEdOVSBiaW51dGlscworIworIyBDVF9CSU5VVElMU19WXzJfMjFfNTMgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVl8yXzIxXzFhPXkKKyMgQ1RfQklOVVRJTFNfVl8yXzIwXzFhIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfVl8yXzE5XzFhIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfVl8yXzE4YSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WRVJTSU9OPSIyLjIxLjFhIgorQ1RfQklOVVRJTFNfMl8yMV9vcl9sYXRlcj15CitDVF9CSU5VVElMU18yXzIwX29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMTlfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfMl8xOF9vcl9sYXRlcj15CitDVF9CSU5VVElMU19IQVNfR09MRD15CitDVF9CSU5VVElMU19IQVNfUExVR0lOUz15CitDVF9CSU5VVElMU19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQklOVVRJTFNfTElOS0VSX0xEPXkKK0NUX0JJTlVUSUxTX0xJTktFUlNfTElTVD0ibGQiCitDVF9CSU5VVElMU19MSU5LRVJfREVGQVVMVD0iYmZkIgorIyBDVF9CSU5VVElMU19QTFVHSU5TIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorIyBDVF9CSU5VVElMU19GT1JfVEFSR0VUIGlzIG5vdCBzZXQKKworIworIyBDIGNvbXBpbGVyCisjCitDVF9DQz0iZ2NjIgorQ1RfQ0NfVkVSU0lPTj0iNC42LjEiCitDVF9DQ19nY2M9eQorIyBDVF9DQ19HQ0NfU0hPV19MSU5BUk8gaXMgbm90IHNldAorQ1RfQ0NfVl80XzZfMT15CisjIENUX0NDX1ZfNF82XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF81XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzYgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM181IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzMgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18yIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8yXzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfMl8yIGlzIG5vdCBzZXQKK0NUX0NDX0dDQ180XzJfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDXzRfM19vcl9sYXRlcj15CitDVF9DQ19HQ0NfNF80X29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzVfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDXzRfNj15CitDVF9DQ19HQ0NfNF82X29yX2xhdGVyPXkKK0NUX0NDX0dDQ19IQVNfR1JBUEhJVEU9eQorQ1RfQ0NfR0NDX0hBU19MVE89eQorQ1RfQ0NfR0NDX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9DQ19HQ0NfSEFTX0JVSUxEX0lEPXkKK0NUX0NDX0dDQ19VU0VfR01QX01QRlI9eQorQ1RfQ0NfR0NDX1VTRV9QUExfQ0xPT0c9eQorQ1RfQ0NfR0NDX1VTRV9NUEM9eQorQ1RfQ0NfTEFOR19GT1JUUkFOPXkKK0NUX0NDX1NVUFBPUlRfQ1hYPXkKK0NUX0NDX1NVUFBPUlRfRk9SVFJBTj15CitDVF9DQ19TVVBQT1JUX0pBVkE9eQorQ1RfQ0NfU1VQUE9SVF9BREE9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDPXkKK0NUX0NDX1NVUFBPUlRfT0JKQ1hYPXkKKworIworIyBBZGRpdGlvbmFsIHN1cHBvcnRlZCBsYW5ndWFnZXM6CisjCitDVF9DQ19MQU5HX0NYWD15CisjIENUX0NDX0xBTkdfSkFWQSBpcyBub3Qgc2V0CisjIENUX0NDX0xBTkdfQURBIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfTEFOR19PQkpDIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfTEFOR19PQkpDWFggaXMgbm90IHNldAorQ1RfQ0NfTEFOR19PVEhFUlM9IiIKKworIworIyBnY2Mgb3RoZXIgb3B0aW9ucworIworQ1RfQ0NfRU5BQkxFX0NYWF9GTEFHUz0iIgorQ1RfQ0NfQ09SRV9FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0NDX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfQ0NfU1RBVElDX0xJQlNURENYWD15CisKKyMKKyMgT3B0aW1pc2F0aW9uIGZlYXR1cmVzCisjCitDVF9DQ19HQ0NfVVNFX0dSQVBISVRFPXkKK0NUX0NDX0dDQ19VU0VfTFRPPXkKKworIworIyBTZXR0aW5ncyBmb3IgbGlicmFyaWVzIHJ1bm5pbmcgb24gdGFyZ2V0CisjCitDVF9DQ19HQ0NfRU5BQkxFX1RBUkdFVF9PUFRTUEFDRT15CisjIENUX0NDX0dDQ19MSUJNVURGTEFQIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQkdPTVAgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCU1NQIGlzIG5vdCBzZXQKKworIworIyBNaXNjLiBvYnNjdXJlIG9wdGlvbnMuCisjCitDVF9DQ19DWEFfQVRFWElUPXkKKyMgQ1RfQ0NfR0NDX0RJU0FCTEVfUENIIGlzIG5vdCBzZXQKK0NUX0NDX0dDQ19TSkxKX0VYQ0VQVElPTlM9bQorQ1RfQ0NfR0NDX0xEQkxfMTI4PW0KKyMgQ1RfQ0NfR0NDX0JVSUxEX0lEIGlzIG5vdCBzZXQKK0NUX0NDX0dDQ19IQVNfQVJDSF9PUFRJT05TPXkKKworIworIyBhcmNoaWN0ZWN0dXJlLXNwZWNpZmljIG9wdGlvbnMKKyMKK0NUX0NDX0dDQ19taXBzX2xsc2M9bQorQ1RfQ0NfR0NDX21pcHNfc3luY2k9bQorIyBDVF9DQ19HQ0NfbWlwc19wbHQgaXMgbm90IHNldAorCisjCisjIEMtbGlicmFyeQorIworQ1RfTElCQz0idUNsaWJjIgorQ1RfTElCQ19WRVJTSU9OPSIwLjkuMzIiCisjIENUX0xJQkNfZWdsaWJjIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19nbGliYyBpcyBub3Qgc2V0CitDVF9MSUJDX3VDbGliYz15CitDVF9MSUJDX2VnbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19nbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19taW5nd19BVkFJTEFCTEU9eQorQ1RfTElCQ19uZXdsaWJfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbm9uZV9BVkFJTEFCTEU9eQorQ1RfTElCQ191Q2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfVUNMSUJDX1ZfMF85XzMyPXkKKyMgQ1RfTElCQ19VQ0xJQkNfVl8wXzlfMzEgaXMgbm90IHNldAorIyBDVF9MSUJDX1VDTElCQ19WXzBfOV8zMF8zIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19VQ0xJQkNfVl8wXzlfMzBfMiBpcyBub3Qgc2V0CisjIENUX0xJQkNfVUNMSUJDX1ZfMF85XzMwXzEgaXMgbm90IHNldAorIyBDVF9MSUJDX1VDTElCQ19WXzBfOV8zMCBpcyBub3Qgc2V0CisjIENUX0xJQkNfVUNMSUJDX1Zfc25hcHNob3QgaXMgbm90IHNldAorIyBDVF9MSUJDX1VDTElCQ19WX3NwZWNpZmljX2RhdGUgaXMgbm90IHNldAorQ1RfTElCQ19VQ0xJQkNfMF85XzMyX29yX2xhdGVyPXkKK0NUX0xJQkNfVUNMSUJDXzBfOV8zMF9vcl9sYXRlcj15CitDVF9MSUJDX1VDTElCQ19QQVJBTExFTD15CitDVF9MSUJDX1VDTElCQ19WRVJCT1NJVFlfMD15CisjIENUX0xJQkNfVUNMSUJDX1ZFUkJPU0lUWV8xIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19VQ0xJQkNfVkVSQk9TSVRZXzIgaXMgbm90IHNldAorQ1RfTElCQ19VQ0xJQkNfVkVSQk9TSVRZPSIiCitDVF9MSUJDX1VDTElCQ19ERUJVR19MRVZFTF8wPXkKKyMgQ1RfTElCQ19VQ0xJQkNfREVCVUdfTEVWRUxfMSBpcyBub3Qgc2V0CisjIENUX0xJQkNfVUNMSUJDX0RFQlVHX0xFVkVMXzIgaXMgbm90IHNldAorQ1RfTElCQ19VQ0xJQkNfREVCVUdfTEVWRUw9MAorQ1RfTElCQ19VQ0xJQkNfQ09ORklHX0ZJTEU9IiR7Q1RfTElCX0RJUn0vc2FtcGxlcy8ke0NUX1RBUkdFVH0vJHtDVF9MSUJDfS0ke0NUX0xJQkNfVkVSU0lPTn0uY29uZmlnIgorQ1RfTElCQ19TVVBQT1JUX1RIUkVBRFNfQU5ZPXkKK0NUX0xJQkNfU1VQUE9SVF9OUFRMPXkKK0NUX0xJQkNfU1VQUE9SVF9MSU5VWFRIUkVBRFM9eQorQ1RfTElCQ19TVVBQT1JUX1RIUkVBRFNfTk9ORT15CitDVF9USFJFQURTPSJucHRsIgorCisjCisjIENvbW1vbiBDIGxpYnJhcnkgb3B0aW9ucworIworQ1RfVEhSRUFEU19OUFRMPXkKKyMgQ1RfVEhSRUFEU19MSU5VWFRIUkVBRFMgaXMgbm90IHNldAorIyBDVF9USFJFQURTX05PTkUgaXMgbm90IHNldAorQ1RfTElCQ19YTEREPXkKKworIworIyB1Q2xpYmMgb3RoZXIgb3B0aW9ucworIworQ1RfTElCQ19VQ0xJQkNfTE5YVEhSRD0iIgorIyBDVF9MSUJDX1VDTElCQ19MT0NBTEVTIGlzIG5vdCBzZXQKK0NUX0xJQkNfVUNMSUJDX1dDSEFSPXkKKworIworIyBEZWJ1ZyBmYWNpbGl0aWVzCisjCitDVF9ERUJVR19kbWFsbG9jPXkKK0NUX0RNQUxMT0NfVl81XzVfMj15CitDVF9ETUFMTE9DX1ZFUlNJT049IjUuNS4yIgorQ1RfREVCVUdfZHVtYT15CitDVF9EVU1BX0E9eQorQ1RfRFVNQV9TTz15CitDVF9EVU1BX1ZfMl81XzE1PXkKK0NUX0RVTUFfVkVSU0lPTj0iMl81XzE1IgorQ1RfREVCVUdfZ2RiPXkKK0NUX0dEQl9DUk9TUz15CisjIENUX0dEQl9DUk9TU19TVEFUSUMgaXMgbm90IHNldAorQ1RfR0RCX0NST1NTX1BZVEhPTj15CitDVF9HREJfTkFUSVZFPXkKK0NUX0dEQl9OQVRJVkVfU1RBVElDPXkKK0NUX0dEQl9HREJTRVJWRVI9eQorQ1RfR0RCX0dEQlNFUlZFUl9TVEFUSUM9eQorCisjCisjIGdkYiB2ZXJzaW9uCisjCisjIENUX0RFQlVHX0dEQl9TSE9XX0xJTkFSTyBpcyBub3Qgc2V0CisjIENUX0dEQl9WXzdfM2EgaXMgbm90IHNldAorQ1RfR0RCX1ZfN18yYT15CisjIENUX0dEQl9WXzdfMWEgaXMgbm90IHNldAorIyBDVF9HREJfVl83XzBfMWEgaXMgbm90IHNldAorIyBDVF9HREJfVl83XzBhIGlzIG5vdCBzZXQKKyMgQ1RfR0RCX1ZfNl84YSBpcyBub3Qgc2V0CitDVF9HREJfN18wX29yX2xhdGVyPXkKK0NUX0dEQl9IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfR0RCX0lOU1RBTExfR0RCSU5JVD15CitDVF9HREJfVkVSU0lPTj0iNy4yYSIKKyMgQ1RfREVCVUdfbHRyYWNlIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfc3RyYWNlIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzCisjCitDVF9DT01QTElCU19ORUVERUQ9eQorQ1RfR01QX05FRURFRD15CitDVF9NUEZSX05FRURFRD15CitDVF9QUExfTkVFREVEPXkKK0NUX0NMT09HX05FRURFRD15CitDVF9NUENfTkVFREVEPXkKK0NUX0NPTVBMSUJTPXkKK0NUX0dNUD15CitDVF9NUEZSPXkKK0NUX1BQTD15CitDVF9DTE9PRz15CitDVF9NUEM9eQorQ1RfR01QX1ZfNV8wXzI9eQorIyBDVF9HTVBfVl81XzBfMSBpcyBub3Qgc2V0CisjIENUX0dNUF9WXzRfM18yIGlzIG5vdCBzZXQKKyMgQ1RfR01QX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9HTVBfVl80XzNfMCBpcyBub3Qgc2V0CitDVF9HTVBfVkVSU0lPTj0iNS4wLjIiCitDVF9NUEZSX1ZfM18wXzE9eQorIyBDVF9NUEZSX1ZfM18wXzAgaXMgbm90IHNldAorIyBDVF9NUEZSX1ZfMl80XzIgaXMgbm90IHNldAorIyBDVF9NUEZSX1ZfMl80XzEgaXMgbm90IHNldAorIyBDVF9NUEZSX1ZfMl80XzAgaXMgbm90IHNldAorQ1RfTVBGUl9WRVJTSU9OPSIzLjAuMSIKK0NUX1BQTF9WXzBfMTFfMj15CisjIENUX1BQTF9WXzBfMTFfMSBpcyBub3Qgc2V0CisjIENUX1BQTF9WXzBfMTEgaXMgbm90IHNldAorIyBDVF9QUExfVl8wXzEwXzIgaXMgbm90IHNldAorQ1RfUFBMX1ZFUlNJT049IjAuMTEuMiIKK0NUX1BQTF8wXzExPXkKK0NUX1BQTF9ORUVEU19MSUJQV0w9eQorQ1RfQ0xPT0dfVl8wXzE1XzExPXkKKyMgQ1RfQ0xPT0dfVl8wXzE1XzEwIGlzIG5vdCBzZXQKKyMgQ1RfQ0xPT0dfVl8wXzE1XzkgaXMgbm90IHNldAorIyBDVF9DTE9PR19WXzBfMTVfOCBpcyBub3Qgc2V0CisjIENUX0NMT09HX1ZfMF8xNV83IGlzIG5vdCBzZXQKKyMgQ1RfQ0xPT0dfVl8wXzE1XzYgaXMgbm90IHNldAorQ1RfQ0xPT0dfVkVSU0lPTj0iMC4xNS4xMSIKK0NUX01QQ19WXzBfOT15CisjIENUX01QQ19WXzBfOF8yIGlzIG5vdCBzZXQKKyMgQ1RfTVBDX1ZfMF84XzEgaXMgbm90IHNldAorIyBDVF9NUENfVl8wXzcgaXMgbm90IHNldAorQ1RfTVBDX1ZFUlNJT049IjAuOSIKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzIGNvbW1vbiBvcHRpb25zCisjCisjIENUX0NPTVBMSUJTX0NIRUNLIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gdG9vbHMKKyMKKworIworIyBSRUFEIEhFTFAgYmVmb3JlIHlvdSBzYXkgJ1knIGJlbG93ICEhIQorIworIyBDVF9DT01QX1RPT0xTIGlzIG5vdCBzZXQKKworIworIyBUZXN0IHN1aXRlCisjCisjIENUX1RFU1RfU1VJVEVfR0NDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9taXBzLXVua25vd24tbGludXgtdWNsaWJjL3JlcG9ydGVkLmJ5IGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL21pcHMtdW5rbm93bi1saW51eC11Y2xpYmMvcmVwb3J0ZWQuYnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhOGYxNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9taXBzLXVua25vd24tbGludXgtdWNsaWJjL3JlcG9ydGVkLmJ5CkBAIC0wLDAgKzEsMyBAQAorcmVwb3J0ZXJfbmFtZT0iWUVNIgorcmVwb3J0ZXJfdXJsPSJodHRwOi8veW1vcmluLmlzLWEtZ2Vlay5vcmcvIgorcmVwb3J0ZXJfY29tbWVudD0iIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL21pcHMtdW5rbm93bi1saW51eC11Y2xpYmMvdUNsaWJjLTAuOS4zMi5jb25maWcgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvbWlwcy11bmtub3duLWxpbnV4LXVjbGliYy91Q2xpYmMtMC45LjMyLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yzg3MzliCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL21pcHMtdW5rbm93bi1saW51eC11Y2xpYmMvdUNsaWJjLTAuOS4zMi5jb25maWcKQEAgLTAsMCArMSwyNTIgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgVmVyc2lvbjogMC45LjMyCisjIE1vbiBTZXAgMTIgMTQ6NTA6MjMgMjAxMQorIworIyBUQVJHRVRfYWxwaGEgaXMgbm90IHNldAorIyBUQVJHRVRfYXJtIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2F2cjMyIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2JmaW4gaXMgbm90IHNldAorIyBUQVJHRVRfY3JpcyBpcyBub3Qgc2V0CisjIFRBUkdFVF9lMSBpcyBub3Qgc2V0CisjIFRBUkdFVF9mcnYgaXMgbm90IHNldAorIyBUQVJHRVRfaDgzMDAgaXMgbm90IHNldAorIyBUQVJHRVRfaHBwYSBpcyBub3Qgc2V0CisjIFRBUkdFVF9pMzg2IGlzIG5vdCBzZXQKKyMgVEFSR0VUX2k5NjAgaXMgbm90IHNldAorIyBUQVJHRVRfaWE2NCBpcyBub3Qgc2V0CisjIFRBUkdFVF9tNjhrIGlzIG5vdCBzZXQKKyMgVEFSR0VUX21pY3JvYmxhemUgaXMgbm90IHNldAorVEFSR0VUX21pcHM9eQorIyBUQVJHRVRfbmlvcyBpcyBub3Qgc2V0CisjIFRBUkdFVF9uaW9zMiBpcyBub3Qgc2V0CisjIFRBUkdFVF9wb3dlcnBjIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3NoIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3NoNjQgaXMgbm90IHNldAorIyBUQVJHRVRfc3BhcmMgaXMgbm90IHNldAorIyBUQVJHRVRfdjg1MCBpcyBub3Qgc2V0CisjIFRBUkdFVF92YXggaXMgbm90IHNldAorIyBUQVJHRVRfeDg2XzY0IGlzIG5vdCBzZXQKKyMgVEFSR0VUX3h0ZW5zYSBpcyBub3Qgc2V0CisjIFRBUkdFVF9jNnggaXMgbm90IHNldAorCisjCisjIFRhcmdldCBBcmNoaXRlY3R1cmUgRmVhdHVyZXMgYW5kIE9wdGlvbnMKKyMKK1RBUkdFVF9BUkNIPSJtaXBzIgorRk9SQ0VfT1BUSU9OU19GT1JfQVJDSD15CitDT05GSUdfTUlQU19PMzJfQUJJPXkKKyMgQ09ORklHX01JUFNfTjMyX0FCSSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX042NF9BQkkgaXMgbm90IHNldAorQ09ORklHX01JUFNfSVNBXzE9eQorIyBDT05GSUdfTUlQU19JU0FfMiBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0lTQV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfSVNBXzQgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19JU0FfTUlQUzMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfSVNBX01JUFMzMlIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfSVNBX01JUFM2NCBpcyBub3Qgc2V0CitUQVJHRVRfU1VCQVJDSD0iIgorCisjCisjIFVzaW5nIEVMRiBmaWxlIGZvcm1hdAorIworQVJDSF9BTllfRU5ESUFOPXkKK0FSQ0hfQklHX0VORElBTj15CitBUkNIX1dBTlRTX0JJR19FTkRJQU49eQorIyBBUkNIX1dBTlRTX0xJVFRMRV9FTkRJQU4gaXMgbm90IHNldAorQVJDSF9IQVNfTU1VPXkKK0FSQ0hfVVNFX01NVT15CitVQ0xJQkNfSEFTX0ZMT0FUUz15CisjIFVDTElCQ19IQVNfRlBVIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfU09GVF9GTE9BVD15CitET19DOTlfTUFUSD15CitET19YU0lfTUFUSD15CitVQ0xJQkNfSEFTX0ZFTlY9eQorS0VSTkVMX0hFQURFUlM9Ii91c3IvaW5jbHVkZSIKK0hBVkVfRE9UX0NPTkZJRz15CisKKyMKKyMgR2VuZXJhbCBMaWJyYXJ5IFNldHRpbmdzCisjCisjIEhBVkVfTk9fUElDIGlzIG5vdCBzZXQKK0RPUElDPXkKKyMgQVJDSF9IQVNfTk9fU0hBUkVEIGlzIG5vdCBzZXQKKyMgQVJDSF9IQVNfTk9fTERTTyBpcyBub3Qgc2V0CitIQVZFX1NIQVJFRD15CisjIEZPUkNFX1NIQVJFQUJMRV9URVhUX1NFR01FTlRTIGlzIG5vdCBzZXQKK0xEU09fTEREX1NVUFBPUlQ9eQorTERTT19DQUNIRV9TVVBQT1JUPXkKK0xEU09fUFJFTE9BRF9FTlZfU1VQUE9SVD15CisjIExEU09fUFJFTE9BRF9GSUxFX1NVUFBPUlQgaXMgbm90IHNldAorTERTT19CQVNFX0ZJTEVOQU1FPSJsZC5zbyIKK1VDTElCQ19TVEFUSUNfTERDT05GSUc9eQorIyBMRFNPX1JVTlBBVEggaXMgbm90IHNldAorIyBMRFNPX1NFQVJDSF9JTlRFUlBfUEFUSCBpcyBub3Qgc2V0CitVQ0xJQkNfQ1RPUl9EVE9SPXkKKyMgTERTT19HTlVfSEFTSF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgSEFTX05PX1RIUkVBRFMgaXMgbm90IHNldAorIyBMSU5VWFRIUkVBRFNfT0xEIGlzIG5vdCBzZXQKKyMgTElOVVhUSFJFQURTX05FVyBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1RIUkVBRFNfTkFUSVZFPXkKK1VDTElCQ19IQVNfVEhSRUFEUz15CitVQ0xJQkNfSEFTX1RMUz15CisjIFBUSFJFQURTX0RFQlVHX1NVUFBPUlQgaXMgbm90IHNldAorVUNMSUJDX0hBU19TWVNMT0c9eQorVUNMSUJDX0hBU19MRlM9eQorIyBNQUxMT0MgaXMgbm90IHNldAorIyBNQUxMT0NfU0lNUExFIGlzIG5vdCBzZXQKK01BTExPQ19TVEFOREFSRD15CisjIE1BTExPQ19HTElCQ19DT01QQVQgaXMgbm90IHNldAorVUNMSUJDX0RZTkFNSUNfQVRFWElUPXkKKyMgQ09NUEFUX0FURVhJVCBpcyBub3Qgc2V0CitVQ0xJQkNfU1VTVjNfTEVHQUNZPXkKKyMgVUNMSUJDX1NVU1YzX0xFR0FDWV9NQUNST1MgaXMgbm90IHNldAorIyBVQ0xJQkNfU1VTVjRfTEVHQUNZIGlzIG5vdCBzZXQKK1VDTElCQ19TVFJJQ1RfSEVBREVSUz15CisjIFVDTElCQ19IQVNfU1RVQlMgaXMgbm90IHNldAorVUNMSUJDX0hBU19TSEFET1c9eQorIyBVQ0xJQkNfSEFTX1BST0dSQU1fSU5WT0NBVElPTl9OQU1FIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfUFRZPXkKK0FTU1VNRV9ERVZQVFM9eQorVU5JWDk4UFRZX09OTFk9eQorIyBVQ0xJQkNfSEFTX0dFVFBUIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfTElCVVRJTD15CitVQ0xJQkNfSEFTX1RNX0VYVEVOU0lPTlM9eQorVUNMSUJDX0hBU19UWl9DQUNISU5HPXkKK1VDTElCQ19IQVNfVFpfRklMRT15CitVQ0xJQkNfSEFTX1RaX0ZJTEVfUkVBRF9NQU5ZPXkKK1VDTElCQ19UWl9GSUxFX1BBVEg9Ii9ldGMvVFoiCitVQ0xJQkNfRkFMTEJBQ0tfVE9fRVRDX0xPQ0FMVElNRT15CisKKyMKKyMgQWR2YW5jZWQgTGlicmFyeSBTZXR0aW5ncworIworVUNMSUJDX1BXRF9CVUZGRVJfU0laRT0yNTYKK1VDTElCQ19HUlBfQlVGRkVSX1NJWkU9MjU2CisKKyMKKyMgU3VwcG9ydCB2YXJpb3VzIGZhbWlsaWVzIG9mIGZ1bmN0aW9ucworIworVUNMSUJDX0xJTlVYX01PRFVMRV8yND15CitVQ0xJQkNfTElOVVhfU1BFQ0lGSUM9eQorVUNMSUJDX0hBU19HTlVfRVJST1I9eQorIyBVQ0xJQkNfQlNEX1NQRUNJRklDIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfQlNEX0VSUj15CisjIFVDTElCQ19IQVNfT0JTT0xFVEVfQlNEX1NJR05BTCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfT0JTT0xFVEVfU1lTVl9TSUdOQUwgaXMgbm90IHNldAorIyBVQ0xJQkNfTlRQX0xFR0FDWSBpcyBub3Qgc2V0CisjIFVDTElCQ19TVjRfREVQUkVDQVRFRCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1JFQUxUSU1FPXkKK1VDTElCQ19IQVNfQURWQU5DRURfUkVBTFRJTUU9eQorVUNMSUJDX0hBU19FUE9MTD15CitVQ0xJQkNfSEFTX1hBVFRSPXkKK1VDTElCQ19IQVNfUFJPRklMSU5HPXkKK1VDTElCQ19IQVNfQ1JZUFRfSU1QTD15CitVQ0xJQkNfSEFTX0NSWVBUPXkKK1VDTElCQ19IQVNfTkVUV09SS19TVVBQT1JUPXkKK1VDTElCQ19IQVNfU09DS0VUPXkKK1VDTElCQ19IQVNfSVBWND15CitVQ0xJQkNfSEFTX0lQVjY9eQorVUNMSUJDX0hBU19SUEM9eQorVUNMSUJDX0hBU19GVUxMX1JQQz15CitVQ0xJQkNfSEFTX1JFRU5UUkFOVF9SUEM9eQorVUNMSUJDX1VTRV9ORVRMSU5LPXkKK1VDTElCQ19TVVBQT1JUX0FJX0FERFJDT05GSUc9eQorIyBVQ0xJQkNfSEFTX0JTRF9SRVNfQ0xPU0UgaXMgbm90IHNldAorVUNMSUJDX0hBU19DT01QQVRfUkVTX1NUQVRFPXkKKyMgVUNMSUJDX0hBU19FWFRSQV9DT01QQVRfUkVTX1NUQVRFIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfTElCUkVTT0xWX1NUVUI9eQorVUNMSUJDX0hBU19MSUJOU0xfU1RVQj15CisKKyMKKyMgU3RyaW5nIGFuZCBTdGRpbyBTdXBwb3J0CisjCitVQ0xJQkNfSEFTX1NUUklOR19HRU5FUklDX09QVD15CitVQ0xJQkNfSEFTX1NUUklOR19BUkNIX09QVD15CitVQ0xJQkNfSEFTX0NUWVBFX1RBQkxFUz15CitVQ0xJQkNfSEFTX0NUWVBFX1NJR05FRD15CisjIFVDTElCQ19IQVNfQ1RZUEVfVU5TQUZFIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19DVFlQRV9DSEVDS0VEIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfQ1RZUEVfRU5GT1JDRUQ9eQorIyBVQ0xJQkNfSEFTX1dDSEFSIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19MT0NBTEUgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0hFWEFERUNJTUFMX0ZMT0FUUyBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX0dMSUJDX0NVU1RPTV9QUklOVEY9eQorIyBVU0VfT0xEX1ZGUFJJTlRGIGlzIG5vdCBzZXQKK1VDTElCQ19QUklOVEZfU0NBTkZfUE9TSVRJT05BTF9BUkdTPTkKKyMgVUNMSUJDX0hBU19TQ0FORl9HTElCQ19BX0ZMQUcgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl9OT05FIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfMjU2IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfNTEyIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfMTAyNCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzIwNDggaXMgbm90IHNldAorVUNMSUJDX0hBU19TVERJT19CVUZTSVpfNDA5Nj15CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzgxOTIgaXMgbm90IHNldAorVUNMSUJDX0hBU19TVERJT19CVUlMVElOX0JVRkZFUl9OT05FPXkKKyMgVUNMSUJDX0hBU19TVERJT19CVUlMVElOX0JVRkZFUl80IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUlMVElOX0JVRkZFUl84IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19TSFVURE9XTl9PTl9BQk9SVCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NURElPX0dFVENfTUFDUk89eQorVUNMSUJDX0hBU19TVERJT19QVVRDX01BQ1JPPXkKK1VDTElCQ19IQVNfU1RESU9fQVVUT19SV19UUkFOU0lUSU9OPXkKKyMgVUNMSUJDX0hBU19GT1BFTl9MQVJHRUZJTEVfTU9ERSBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfRk9QRU5fRVhDTFVTSVZFX01PREUgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0dMSUJDX0NVU1RPTV9TVFJFQU1TIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfUFJJTlRGX01fU1BFQz15CitVQ0xJQkNfSEFTX0VSUk5PX01FU1NBR0VTPXkKKyMgVUNMSUJDX0hBU19TWVNfRVJSTElTVCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NJR05VTV9NRVNTQUdFUz15CisjIFVDTElCQ19IQVNfU1lTX1NJR0xJU1QgaXMgbm90IHNldAorVUNMSUJDX0hBU19HTlVfR0VUT1BUPXkKK1VDTElCQ19IQVNfU1RESU9fRlVURVhFUz15CitVQ0xJQkNfSEFTX0dOVV9HRVRTVUJPUFQ9eQorCisjCisjIEJpZyBhbmQgVGFsbAorIworVUNMSUJDX0hBU19SRUdFWD15CitVQ0xJQkNfSEFTX1JFR0VYX09MRD15CitVQ0xJQkNfSEFTX0ZOTUFUQ0g9eQorVUNMSUJDX0hBU19GTk1BVENIX09MRD15CisjIFVDTElCQ19IQVNfV09SREVYUCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX05GVFc9eQorIyBVQ0xJQkNfSEFTX0ZUUyBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX0dMT0I9eQorVUNMSUJDX0hBU19HTlVfR0xPQj15CitVQ0xJQkNfSEFTX1VUTVBYPXkKKworIworIyBMaWJyYXJ5IEluc3RhbGxhdGlvbiBPcHRpb25zCisjCitSVU5USU1FX1BSRUZJWD0iL3Vzci8kKFRBUkdFVF9BUkNIKS1saW51eC11Y2xpYmMvIgorREVWRUxfUFJFRklYPSIvdXNyLyQoVEFSR0VUX0FSQ0gpLWxpbnV4LXVjbGliYy91c3IvIgorTVVMVElMSUJfRElSPSJsaWIiCisjIEhBUkRXSVJFRF9BQlNQQVRIIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIFVDTElCQ19CVUlMRF9QSUUgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0FSQzRSQU5ET00gaXMgbm90IHNldAorIyBIQVZFX05PX1NTUCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1NQIGlzIG5vdCBzZXQKK1VDTElCQ19CVUlMRF9SRUxSTz15CisjIFVDTElCQ19CVUlMRF9OT1cgaXMgbm90IHNldAorVUNMSUJDX0JVSUxEX05PRVhFQ1NUQUNLPXkKKworIworIyB1Q2xpYmMgZGV2ZWxvcG1lbnQvZGVidWdnaW5nIG9wdGlvbnMKKyMKK0NST1NTX0NPTVBJTEVSX1BSRUZJWD0iIgorVUNMSUJDX0VYVFJBX0NGTEFHUz0iIgorIyBET0RFQlVHIGlzIG5vdCBzZXQKKyMgRE9TVFJJUCBpcyBub3Qgc2V0CisjIERPQVNTRVJUUyBpcyBub3Qgc2V0CisjIFNVUFBPUlRfTERfREVCVUcgaXMgbm90IHNldAorIyBTVVBQT1JUX0xEX0RFQlVHX0VBUkxZIGlzIG5vdCBzZXQKKyMgVUNMSUJDX01BTExPQ19ERUJVR0dJTkcgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0JBQ0tUUkFDRSBpcyBub3Qgc2V0CitXQVJOSU5HUz0iLVdhbGwiCitFWFRSQV9XQVJOSU5HUz15CisjIERPTVVMVEkgaXMgbm90IHNldAorIyBVQ0xJQkNfTUpOM19PTkxZIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9taXBzNjRlbC1uMzItbGludXgtdWNsaWJjL2Nyb3NzdG9vbC5jb25maWcgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvbWlwczY0ZWwtbjMyLWxpbnV4LXVjbGliYy9jcm9zc3Rvb2wuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMTkzZTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvbWlwczY0ZWwtbjMyLWxpbnV4LXVjbGliYy9jcm9zc3Rvb2wuY29uZmlnCkBAIC0wLDAgKzEsNDM5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIGNyb3NzdG9vbC1ORyBoZ19kZWZhdWx0QDI3MjFfN2I2NDc0NmIwYWIzIENvbmZpZ3VyYXRpb24KKyMgU3VuIE9jdCAxNiAxNzozMDozMyAyMDExCisjCitDVF9DT05GSUdVUkVfaGFzX3h6dXRpbHM9eQorQ1RfQ09ORklHVVJFX2hhc19jdnM9eQorQ1RfQ09ORklHVVJFX2hhc19zdm49eQorQ1RfTU9EVUxFUz15CisKKyMKKyMgUGF0aHMgYW5kIG1pc2Mgb3B0aW9ucworIworCisjCisjIGNyb3NzdG9vbC1ORyBiZWhhdmlvcgorIworIyBDVF9PQlNPTEVURSBpcyBub3Qgc2V0CitDVF9FWFBFUklNRU5UQUw9eQorIyBDVF9ERUJVR19DVCBpcyBub3Qgc2V0CisKKyMKKyMgUGF0aHMKKyMKK0NUX0xPQ0FMX1RBUkJBTExTX0RJUj0iJHtIT01FfS9zcmMiCitDVF9TQVZFX1RBUkJBTExTPXkKK0NUX1dPUktfRElSPSIke0NUX1RPUF9ESVJ9Ly5idWlsZCIKK0NUX1BSRUZJWF9ESVI9IiR7SE9NRX0veC10b29scy8ke0NUX1RBUkdFVH0iCitDVF9JTlNUQUxMX0RJUj0iJHtDVF9QUkVGSVhfRElSfSIKK0NUX1JNX1JGX1BSRUZJWF9ESVI9eQorQ1RfUkVNT1ZFX0RPQ1M9eQorQ1RfSU5TVEFMTF9ESVJfUk89eQorQ1RfU1RSSVBfQUxMX1RPT0xDSEFJTl9FWEVDVVRBQkxFUz15CisKKyMKKyMgRG93bmxvYWRpbmcKKyMKKyMgQ1RfRk9SQklEX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfRk9SQ0VfRE9XTkxPQUQgaXMgbm90IHNldAorQ1RfQ09OTkVDVF9USU1FT1VUPTEwCisjIENUX09OTFlfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9VU0VfTUlSUk9SIGlzIG5vdCBzZXQKKworIworIyBFeHRyYWN0aW5nCisjCisjIENUX0ZPUkNFX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfT1ZFUklERV9DT05GSUdfR1VFU1NfU1VCPXkKKyMgQ1RfT05MWV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX1BBVENIX0JVTkRMRUQ9eQorIyBDVF9QQVRDSF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9GQUxMQkFDS19MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0ZBTExCQUNLX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9OT05FIGlzIG5vdCBzZXQKK0NUX1BBVENIX09SREVSPSJidW5kbGVkIgorCisjCisjIEJ1aWxkIGJlaGF2aW9yCisjCitDVF9QQVJBTExFTF9KT0JTPTAKK0NUX0xPQUQ9MAorQ1RfVVNFX1BJUEVTPXkKK0NUX0VYVFJBX0ZMQUdTX0ZPUl9IT1NUPSIiCisjIENUX0NPTkZJR19TSEVMTF9TSCBpcyBub3Qgc2V0CisjIENUX0NPTkZJR19TSEVMTF9BU0ggaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMX0JBU0g9eQorIyBDVF9DT05GSUdfU0hFTExfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTD0iJHtiYXNofSIKKworIworIyBMb2dnaW5nCisjCisjIENUX0xPR19FUlJPUiBpcyBub3Qgc2V0CisjIENUX0xPR19XQVJOIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0lORk8gaXMgbm90IHNldAorQ1RfTE9HX0VYVFJBPXkKKyMgQ1RfTE9HX0FMTCBpcyBub3Qgc2V0CisjIENUX0xPR19ERUJVRyBpcyBub3Qgc2V0CitDVF9MT0dfTEVWRUxfTUFYPSJFWFRSQSIKKyMgQ1RfTE9HX1NFRV9UT09MU19XQVJOIGlzIG5vdCBzZXQKK0NUX0xPR19QUk9HUkVTU19CQVI9eQorQ1RfTE9HX1RPX0ZJTEU9eQorQ1RfTE9HX0ZJTEVfQ09NUFJFU1M9eQorCisjCisjIFRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIPSJtaXBzIgorQ1RfQVJDSF9TVVBQT1JUU19CT1RIX0VORElBTj15CitDVF9BUkNIX1NVUFBPUlRTXzMyPXkKK0NUX0FSQ0hfU1VQUE9SVFNfNjQ9eQorQ1RfQVJDSF9TVVBQT1JUX0FSQ0g9eQorQ1RfQVJDSF9TVVBQT1JUX1RVTkU9eQorQ1RfQVJDSF9ERUZBVUxUX0JFPXkKK0NUX0FSQ0hfREVGQVVMVF8zMj15CitDVF9BUkNIX0FSQ0g9IiIKK0NUX0FSQ0hfVFVORT0iIgorIyBDVF9BUkNIX0JFIGlzIG5vdCBzZXQKK0NUX0FSQ0hfTEU9eQorIyBDVF9BUkNIXzMyIGlzIG5vdCBzZXQKK0NUX0FSQ0hfNjQ9eQorQ1RfQVJDSF9CSVRORVNTPTY0CisjIENUX0FSQ0hfRkxPQVRfSFcgaXMgbm90IHNldAorQ1RfQVJDSF9GTE9BVF9TVz15CitDVF9UQVJHRVRfQ0ZMQUdTPSIiCitDVF9UQVJHRVRfTERGTEFHUz0iIgorIyBDVF9BUkNIX2FscGhhIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9hcm0gaXMgbm90IHNldAorIyBDVF9BUkNIX2F2cjMyIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9ibGFja2ZpbiBpcyBub3Qgc2V0CisjIENUX0FSQ0hfbTY4ayBpcyBub3Qgc2V0CitDVF9BUkNIX21pcHM9eQorIyBDVF9BUkNIX3Bvd2VycGMgaXMgbm90IHNldAorIyBDVF9BUkNIX3MzOTAgaXMgbm90IHNldAorIyBDVF9BUkNIX3NoIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zcGFyYyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfeDg2IGlzIG5vdCBzZXQKK0NUX0FSQ0hfYWxwaGFfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXJtX0FWQUlMQUJMRT15CitDVF9BUkNIX2F2cjMyX0FWQUlMQUJMRT15CitDVF9BUkNIX2JsYWNrZmluX0FWQUlMQUJMRT15CitDVF9BUkNIX202OGtfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbWlwc19BVkFJTEFCTEU9eQorQ1RfQVJDSF9wb3dlcnBjX0FWQUlMQUJMRT15CitDVF9BUkNIX3MzOTBfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfc2hfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfc3BhcmNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfeDg2X0FWQUlMQUJMRT15CisKKyMKKyMgR2VuZXJpYyB0YXJnZXQgb3B0aW9ucworIworQ1RfQVJDSF9VU0VfTU1VPXkKKworIworIyBUYXJnZXQgb3B0aW1pc2F0aW9ucworIworCisjCisjIG1pcHMgb3RoZXIgb3B0aW9ucworIworQ1RfQVJDSF9taXBzX24zMj15CisjIENUX0FSQ0hfbWlwc19uNjQgaXMgbm90IHNldAorQ1RfQVJDSF9taXBzX0FCST0ibjMyIgorCisjCisjIFRvb2xjaGFpbiBvcHRpb25zCisjCisKKyMKKyMgR2VuZXJhbCB0b29sY2hhaW4gb3B0aW9ucworIworQ1RfRk9SQ0VfU1lTUk9PVD15CitDVF9VU0VfU1lTUk9PVD15CitDVF9TWVNST09UX05BTUU9InN5c3Jvb3QiCitDVF9TWVNST09UX0RJUl9QUkVGSVg9IiIKKyMgQ1RfU1RBVElDX1RPT0xDSEFJTiBpcyBub3Qgc2V0CitDVF9UT09MQ0hBSU5fUEtHVkVSU0lPTj0iIgorQ1RfVE9PTENIQUlOX0JVR1VSTD0iIgorCisjCisjIFR1cGxlIGNvbXBsZXRpb24gYW5kIGFsaWFzaW5nCisjCitDVF9UQVJHRVRfVkVORE9SPSJuMzIiCitDVF9UQVJHRVRfQUxJQVNfU0VEX0VYUFI9IiIKK0NUX1RBUkdFVF9BTElBUz0iIgorCisjCisjIFRvb2xjaGFpbiB0eXBlCisjCisjIENUX05BVElWRSBpcyBub3Qgc2V0CitDVF9DUk9TUz15CisjIENUX0NST1NTX05BVElWRSBpcyBub3Qgc2V0CisjIENUX0NBTkFESUFOIGlzIG5vdCBzZXQKK0NUX1RPT0xDSEFJTl9UWVBFPSJjcm9zcyIKKworIworIyBCdWlsZCBzeXN0ZW0KKyMKK0NUX0JVSUxEPSIiCitDVF9CVUlMRF9QUkVGSVg9IiIKK0NUX0JVSUxEX1NVRkZJWD0iIgorCisjCisjIE9wZXJhdGluZyBTeXN0ZW0KKyMKK0NUX0tFUk5FTF9TVVBQT1JUU19TSEFSRURfTElCUz15CitDVF9LRVJORUw9ImxpbnV4IgorQ1RfS0VSTkVMX1ZFUlNJT049IjIuNi4zMS4xNCIKKyMgQ1RfS0VSTkVMX2JhcmVfbWV0YWwgaXMgbm90IHNldAorQ1RfS0VSTkVMX2xpbnV4PXkKK0NUX0tFUk5FTF9iYXJlX21ldGFsX0FWQUlMQUJMRT15CitDVF9LRVJORUxfbGludXhfQVZBSUxBQkxFPXkKKyMgQ1RfS0VSTkVMX1ZfM18wXzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMyBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8yIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzEgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzAgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzlfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zOF84IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM3XzYgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzZfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNV8xNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNF8xMCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zM18xOSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zMl80NiBpcyBub3Qgc2V0CitDVF9LRVJORUxfVl8yXzZfMzFfMTQ9eQorIyBDVF9LRVJORUxfVl8yXzZfMjdfNTkgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9taW5ndzMyX0FWQUlMQUJMRT15CisKKyMKKyMgQ29tbW9uIGtlcm5lbCBvcHRpb25zCisjCitDVF9TSEFSRURfTElCUz15CisKKyMKKyMgbGludXggb3RoZXIgb3B0aW9ucworIworQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8wPXkKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8xIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8yIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9MSU5VWF9WRVJCT1NFX0xFVkVMPTAKK0NUX0tFUk5FTF9MSU5VWF9JTlNUQUxMX0NIRUNLPXkKKworIworIyBCaW5hcnkgdXRpbGl0aWVzCisjCitDVF9BUkNIX0JJTkZNVF9FTEY9eQorCisjCisjIEdOVSBiaW51dGlscworIworIyBDVF9CSU5VVElMU19WXzJfMjFfNTMgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19WXzJfMjFfMWEgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19WXzJfMjBfMWEgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVl8yXzE5XzFhPXkKKyMgQ1RfQklOVVRJTFNfVl8yXzE4YSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WRVJTSU9OPSIyLjE5LjFhIgorQ1RfQklOVVRJTFNfMl8xOV9vcl9sYXRlcj15CitDVF9CSU5VVElMU18yXzE4X29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9CSU5VVElMU19MSU5LRVJfTEQ9eQorQ1RfQklOVVRJTFNfTElOS0VSU19MSVNUPSJsZCIKK0NUX0JJTlVUSUxTX0xJTktFUl9ERUZBVUxUPSJiZmQiCitDVF9CSU5VVElMU19FWFRSQV9DT05GSUdfQVJSQVk9IiIKKyMgQ1RfQklOVVRJTFNfRk9SX1RBUkdFVCBpcyBub3Qgc2V0CisKKyMKKyMgQyBjb21waWxlcgorIworQ1RfQ0M9ImdjYyIKK0NUX0NDX1ZFUlNJT049IjQuMy4yIgorQ1RfQ0NfZ2NjPXkKKyMgQ1RfQ0NfR0NDX1NIT1dfTElOQVJPIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzZfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF82XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF81XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzYgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM181IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzMgaXMgbm90IHNldAorQ1RfQ0NfVl80XzNfMj15CisjIENUX0NDX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfMl80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfMiBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfNF8yX29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzM9eQorQ1RfQ0NfR0NDXzRfM19vcl9sYXRlcj15CitDVF9DQ19HQ0NfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0NDX0dDQ19VU0VfR01QX01QRlI9eQorIyBDVF9DQ19MQU5HX0ZPUlRSQU4gaXMgbm90IHNldAorQ1RfQ0NfU1VQUE9SVF9DWFg9eQorQ1RfQ0NfU1VQUE9SVF9GT1JUUkFOPXkKK0NUX0NDX1NVUFBPUlRfSkFWQT15CitDVF9DQ19TVVBQT1JUX0FEQT15CitDVF9DQ19TVVBQT1JUX09CSkM9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDWFg9eQorCisjCisjIEFkZGl0aW9uYWwgc3VwcG9ydGVkIGxhbmd1YWdlczoKKyMKK0NUX0NDX0xBTkdfQ1hYPXkKKyMgQ1RfQ0NfTEFOR19KQVZBIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfTEFOR19BREEgaXMgbm90IHNldAorIyBDVF9DQ19MQU5HX09CSkMgaXMgbm90IHNldAorIyBDVF9DQ19MQU5HX09CSkNYWCBpcyBub3Qgc2V0CitDVF9DQ19MQU5HX09USEVSUz0iIgorCisjCisjIGdjYyBvdGhlciBvcHRpb25zCisjCitDVF9DQ19FTkFCTEVfQ1hYX0ZMQUdTPSIiCitDVF9DQ19DT1JFX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfQ0NfRVhUUkFfQ09ORklHX0FSUkFZPSIiCisKKyMKKyMgT3B0aW1pc2F0aW9uIGZlYXR1cmVzCisjCisKKyMKKyMgU2V0dGluZ3MgZm9yIGxpYnJhcmllcyBydW5uaW5nIG9uIHRhcmdldAorIworQ1RfQ0NfR0NDX0VOQUJMRV9UQVJHRVRfT1BUU1BBQ0U9eQorIyBDVF9DQ19HQ0NfTElCTVVERkxBUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJHT01QIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQlNTUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYy4gb2JzY3VyZSBvcHRpb25zLgorIworQ1RfQ0NfQ1hBX0FURVhJVD15CisjIENUX0NDX0dDQ19ESVNBQkxFX1BDSCBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfU0pMSl9FWENFUFRJT05TPW0KK0NUX0NDX0dDQ19MREJMXzEyOD1tCitDVF9DQ19HQ0NfSEFTX0FSQ0hfT1BUSU9OUz15CisKKyMKKyMgYXJjaGljdGVjdHVyZS1zcGVjaWZpYyBvcHRpb25zCisjCitDVF9DQ19HQ0NfbWlwc19sbHNjPW0KK0NUX0NDX0dDQ19taXBzX3N5bmNpPW0KKyMgQ1RfQ0NfR0NDX21pcHNfcGx0IGlzIG5vdCBzZXQKKworIworIyBDLWxpYnJhcnkKKyMKK0NUX0xJQkM9InVDbGliYyIKK0NUX0xJQkNfVkVSU0lPTj0iMC45LjMwLjEiCisjIENUX0xJQkNfZWdsaWJjIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19nbGliYyBpcyBub3Qgc2V0CitDVF9MSUJDX3VDbGliYz15CitDVF9MSUJDX2VnbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19nbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19taW5nd19BVkFJTEFCTEU9eQorQ1RfTElCQ19uZXdsaWJfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbm9uZV9BVkFJTEFCTEU9eQorQ1RfTElCQ191Q2xpYmNfQVZBSUxBQkxFPXkKKyMgQ1RfTElCQ19VQ0xJQkNfVl8wXzlfMzIgaXMgbm90IHNldAorIyBDVF9MSUJDX1VDTElCQ19WXzBfOV8zMSBpcyBub3Qgc2V0CisjIENUX0xJQkNfVUNMSUJDX1ZfMF85XzMwXzMgaXMgbm90IHNldAorIyBDVF9MSUJDX1VDTElCQ19WXzBfOV8zMF8yIGlzIG5vdCBzZXQKK0NUX0xJQkNfVUNMSUJDX1ZfMF85XzMwXzE9eQorIyBDVF9MSUJDX1VDTElCQ19WXzBfOV8zMCBpcyBub3Qgc2V0CisjIENUX0xJQkNfVUNMSUJDX1Zfc25hcHNob3QgaXMgbm90IHNldAorIyBDVF9MSUJDX1VDTElCQ19WX3NwZWNpZmljX2RhdGUgaXMgbm90IHNldAorQ1RfTElCQ19VQ0xJQkNfMF85XzMwX29yX2xhdGVyPXkKK0NUX0xJQkNfVUNMSUJDX1BBUkFMTEVMPXkKK0NUX0xJQkNfVUNMSUJDX1ZFUkJPU0lUWV8wPXkKKyMgQ1RfTElCQ19VQ0xJQkNfVkVSQk9TSVRZXzEgaXMgbm90IHNldAorIyBDVF9MSUJDX1VDTElCQ19WRVJCT1NJVFlfMiBpcyBub3Qgc2V0CitDVF9MSUJDX1VDTElCQ19WRVJCT1NJVFk9IiIKK0NUX0xJQkNfVUNMSUJDX0RFQlVHX0xFVkVMXzA9eQorIyBDVF9MSUJDX1VDTElCQ19ERUJVR19MRVZFTF8xIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19VQ0xJQkNfREVCVUdfTEVWRUxfMiBpcyBub3Qgc2V0CitDVF9MSUJDX1VDTElCQ19ERUJVR19MRVZFTD0wCitDVF9MSUJDX1VDTElCQ19DT05GSUdfRklMRT0iJHtDVF9MSUJfRElSfS9zYW1wbGVzLyR7Q1RfVEFSR0VUfS8ke0NUX0xJQkN9LSR7Q1RfTElCQ19WRVJTSU9OfS5jb25maWciCitDVF9MSUJDX1NVUFBPUlRfVEhSRUFEU19BTlk9eQorQ1RfTElCQ19TVVBQT1JUX0xJTlVYVEhSRUFEUz15CitDVF9MSUJDX1NVUFBPUlRfVEhSRUFEU19OT05FPXkKK0NUX1RIUkVBRFM9ImxpbnV4dGhyZWFkcyIKKworIworIyBDb21tb24gQyBsaWJyYXJ5IG9wdGlvbnMKKyMKK0NUX1RIUkVBRFNfTElOVVhUSFJFQURTPXkKKyMgQ1RfVEhSRUFEU19OT05FIGlzIG5vdCBzZXQKK0NUX0xJQkNfWExERD15CisKKyMKKyMgdUNsaWJjIG90aGVyIG9wdGlvbnMKKyMKK0NUX0xJQkNfVUNMSUJDX0xOWFRIUkRfT0xEPXkKKyMgQ1RfTElCQ19VQ0xJQkNfTE5YVEhSRF9ORVcgaXMgbm90IHNldAorQ1RfTElCQ19VQ0xJQkNfTE5YVEhSRD0ib2xkIgorIyBDVF9MSUJDX1VDTElCQ19MT0NBTEVTIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19VQ0xJQkNfV0NIQVIgaXMgbm90IHNldAorCisjCisjIERlYnVnIGZhY2lsaXRpZXMKKyMKKyMgQ1RfREVCVUdfZG1hbGxvYyBpcyBub3Qgc2V0CisjIENUX0RFQlVHX2R1bWEgaXMgbm90IHNldAorIyBDVF9ERUJVR19nZGIgaXMgbm90IHNldAorIyBDVF9ERUJVR19sdHJhY2UgaXMgbm90IHNldAorIyBDVF9ERUJVR19zdHJhY2UgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMKKyMKK0NUX0NPTVBMSUJTX05FRURFRD15CitDVF9HTVBfTkVFREVEPXkKK0NUX01QRlJfTkVFREVEPXkKK0NUX0NPTVBMSUJTPXkKK0NUX0dNUD15CitDVF9NUEZSPXkKKyMgQ1RfR01QX1ZfNV8wXzIgaXMgbm90IHNldAorIyBDVF9HTVBfVl81XzBfMSBpcyBub3Qgc2V0CitDVF9HTVBfVl80XzNfMj15CisjIENUX0dNUF9WXzRfM18xIGlzIG5vdCBzZXQKKyMgQ1RfR01QX1ZfNF8zXzAgaXMgbm90IHNldAorQ1RfR01QX1ZFUlNJT049IjQuMy4yIgorIyBDVF9NUEZSX1ZfM18wXzEgaXMgbm90IHNldAorIyBDVF9NUEZSX1ZfM18wXzAgaXMgbm90IHNldAorQ1RfTVBGUl9WXzJfNF8yPXkKKyMgQ1RfTVBGUl9WXzJfNF8xIGlzIG5vdCBzZXQKKyMgQ1RfTVBGUl9WXzJfNF8wIGlzIG5vdCBzZXQKK0NUX01QRlJfVkVSU0lPTj0iMi40LjIiCisKKyMKKyMgQ29tcGFuaW9uIGxpYnJhcmllcyBjb21tb24gb3B0aW9ucworIworIyBDVF9DT01QTElCU19DSEVDSyBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcGFuaW9uIHRvb2xzCisjCisKKyMKKyMgUkVBRCBIRUxQIGJlZm9yZSB5b3Ugc2F5ICdZJyBiZWxvdyAhISEKKyMKKyMgQ1RfQ09NUF9UT09MUyBpcyBub3Qgc2V0CisKKyMKKyMgVGVzdCBzdWl0ZQorIworIyBDVF9URVNUX1NVSVRFX0dDQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvbWlwczY0ZWwtbjMyLWxpbnV4LXVjbGliYy9yZXBvcnRlZC5ieSBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9taXBzNjRlbC1uMzItbGludXgtdWNsaWJjL3JlcG9ydGVkLmJ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYzY2YWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvbWlwczY0ZWwtbjMyLWxpbnV4LXVjbGliYy9yZXBvcnRlZC5ieQpAQCAtMCwwICsxLDMgQEAKK3JlcG9ydGVyX25hbWU9Illhbm4gRS4gTU9SSU4iCityZXBvcnRlcl91cmw9Imh0dHA6Ly95bW9yaW4uaXMtYS1nZWVrLm9yZy9wcm9qZWN0cy9jcm9zc3Rvb2wiCityZXBvcnRlcl9jb21tZW50PSJFWFBFUklNRU5UQUwgTUlQUy02NCBuMzIgdG9vbGNoYWluLiIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9taXBzNjRlbC1uMzItbGludXgtdWNsaWJjL3VDbGliYy0wLjkuMzAuMS5jb25maWcgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvbWlwczY0ZWwtbjMyLWxpbnV4LXVjbGliYy91Q2xpYmMtMC45LjMwLjEuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkODM5NWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvbWlwczY0ZWwtbjMyLWxpbnV4LXVjbGliYy91Q2xpYmMtMC45LjMwLjEuY29uZmlnCkBAIC0wLDAgKzEsMjU0IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIFZlcnNpb246IDAuOS4zMAorIyBNb24gTm92IDE3IDA5OjM2OjAwIDIwMDgKKyMKKyMgVEFSR0VUX2FscGhhIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2FybSBpcyBub3Qgc2V0CisjIFRBUkdFVF9hdnIzMiBpcyBub3Qgc2V0CisjIFRBUkdFVF9iZmluIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2NyaXMgaXMgbm90IHNldAorIyBUQVJHRVRfZTEgaXMgbm90IHNldAorIyBUQVJHRVRfZnJ2IGlzIG5vdCBzZXQKKyMgVEFSR0VUX2g4MzAwIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2hwcGEgaXMgbm90IHNldAorIyBUQVJHRVRfaTM4NiBpcyBub3Qgc2V0CisjIFRBUkdFVF9pOTYwIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2lhNjQgaXMgbm90IHNldAorIyBUQVJHRVRfbTY4ayBpcyBub3Qgc2V0CisjIFRBUkdFVF9taWNyb2JsYXplIGlzIG5vdCBzZXQKK1RBUkdFVF9taXBzPXkKKyMgVEFSR0VUX25pb3MgaXMgbm90IHNldAorIyBUQVJHRVRfbmlvczIgaXMgbm90IHNldAorIyBUQVJHRVRfcG93ZXJwYyBpcyBub3Qgc2V0CisjIFRBUkdFVF9zaCBpcyBub3Qgc2V0CisjIFRBUkdFVF9zaDY0IGlzIG5vdCBzZXQKKyMgVEFSR0VUX3NwYXJjIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3Y4NTAgaXMgbm90IHNldAorIyBUQVJHRVRfdmF4IGlzIG5vdCBzZXQKKyMgVEFSR0VUX3g4Nl82NCBpcyBub3Qgc2V0CisjIFRBUkdFVF94dGVuc2EgaXMgbm90IHNldAorCisjCisjIFRhcmdldCBBcmNoaXRlY3R1cmUgRmVhdHVyZXMgYW5kIE9wdGlvbnMKKyMKK1RBUkdFVF9BUkNIPSJtaXBzIgorRk9SQ0VfT1BUSU9OU19GT1JfQVJDSD15CitBUkNIX0NGTEFHUz0iLW1uby1zcGxpdC1hZGRyZXNzZXMiCisjIENPTkZJR19BUk1fT0FCSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fRUFCSSBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUk02MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJNNzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTdURE1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTcyMFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJNOTIwVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk05MjJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTkyNlQgaXMgbm90IHNldAorIyBDT05GSUdfQVJNMTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTExMzZKRl9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTExNzZKWl9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTExNzZKWkZfUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fQ09SVEVYX00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9DT1JURVhfTTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX1NBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX1hTQ0FMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fSVdNTVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NSVBTX08zMl9BQkk9eQorIyBDT05GSUdfTUlQU19OMzJfQUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTjY0X0FCSSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0lTQV8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfSVNBXzIgaXMgbm90IHNldAorQ09ORklHX01JUFNfSVNBXzM9eQorIyBDT05GSUdfTUlQU19JU0FfNCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0lTQV9NSVBTMzIgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19JU0FfTUlQUzMyUjIgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19JU0FfTUlQUzY0IGlzIG5vdCBzZXQKK1RBUkdFVF9TVUJBUkNIPSIiCisKKyMKKyMgVXNpbmcgRUxGIGZpbGUgZm9ybWF0CisjCitBUkNIX0FOWV9FTkRJQU49eQorQVJDSF9CSUdfRU5ESUFOPXkKK0FSQ0hfV0FOVFNfQklHX0VORElBTj15CisjIEFSQ0hfV0FOVFNfTElUVExFX0VORElBTiBpcyBub3Qgc2V0CitBUkNIX0hBU19NTVU9eQorQVJDSF9VU0VfTU1VPXkKK1VDTElCQ19IQVNfRkxPQVRTPXkKKyMgVUNMSUJDX0hBU19GUFUgaXMgbm90IHNldAorVUNMSUJDX0hBU19TT0ZUX0ZMT0FUPXkKK0RPX0M5OV9NQVRIPXkKK1VDTElCQ19IQVNfRkVOVj15CitLRVJORUxfSEVBREVSUz0iL3Vzci9pbmNsdWRlIgorSEFWRV9ET1RfQ09ORklHPXkKKworIworIyBHZW5lcmFsIExpYnJhcnkgU2V0dGluZ3MKKyMKKyMgSEFWRV9OT19QSUMgaXMgbm90IHNldAorRE9QSUM9eQorIyBBUkNIX0hBU19OT19TSEFSRUQgaXMgbm90IHNldAorIyBBUkNIX0hBU19OT19MRFNPIGlzIG5vdCBzZXQKK0hBVkVfU0hBUkVEPXkKKyMgRk9SQ0VfU0hBUkVBQkxFX1RFWFRfU0VHTUVOVFMgaXMgbm90IHNldAorTERTT19MRERfU1VQUE9SVD15CitMRFNPX0NBQ0hFX1NVUFBPUlQ9eQorIyBMRFNPX1BSRUxPQURfRklMRV9TVVBQT1JUIGlzIG5vdCBzZXQKK0xEU09fQkFTRV9GSUxFTkFNRT0ibGQuc28iCitVQ0xJQkNfU1RBVElDX0xEQ09ORklHPXkKKyMgTERTT19SVU5QQVRIIGlzIG5vdCBzZXQKK1VDTElCQ19DVE9SX0RUT1I9eQorIyBMRFNPX0dOVV9IQVNIX1NVUFBPUlQgaXMgbm90IHNldAorIyBIQVNfTk9fVEhSRUFEUyBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1RIUkVBRFM9eQorIyBQVEhSRUFEU19ERUJVR19TVVBQT1JUIGlzIG5vdCBzZXQKK0xJTlVYVEhSRUFEU19PTEQ9eQorVUNMSUJDX0hBU19TWVNMT0c9eQorVUNMSUJDX0hBU19MRlM9eQorIyBNQUxMT0MgaXMgbm90IHNldAorIyBNQUxMT0NfU0lNUExFIGlzIG5vdCBzZXQKK01BTExPQ19TVEFOREFSRD15CisjIE1BTExPQ19HTElCQ19DT01QQVQgaXMgbm90IHNldAorVUNMSUJDX0RZTkFNSUNfQVRFWElUPXkKKyMgQ09NUEFUX0FURVhJVCBpcyBub3Qgc2V0CisjIFVDTElCQ19TVVNWM19MRUdBQ1kgaXMgbm90IHNldAorIyBVQ0xJQkNfU1VTVjNfTEVHQUNZX01BQ1JPUyBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RVQlMgaXMgbm90IHNldAorVUNMSUJDX0hBU19TSEFET1c9eQorIyBVQ0xJQkNfSEFTX1BST0dSQU1fSU5WT0NBVElPTl9OQU1FIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfUFRZPXkKK0FTU1VNRV9ERVZQVFM9eQorVU5JWDk4UFRZX09OTFk9eQorIyBVQ0xJQkNfSEFTX0dFVFBUIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfVE1fRVhURU5TSU9OUz15CitVQ0xJQkNfSEFTX1RaX0NBQ0hJTkc9eQorVUNMSUJDX0hBU19UWl9GSUxFPXkKK1VDTElCQ19IQVNfVFpfRklMRV9SRUFEX01BTlk9eQorVUNMSUJDX1RaX0ZJTEVfUEFUSD0iL2V0Yy9UWiIKKworIworIyBBZHZhbmNlZCBMaWJyYXJ5IFNldHRpbmdzCisjCitVQ0xJQkNfUFdEX0JVRkZFUl9TSVpFPTI1NgorVUNMSUJDX0dSUF9CVUZGRVJfU0laRT0yNTYKKworIworIyBTdXBwb3J0IHZhcmlvdXMgZmFtaWxpZXMgb2YgZnVuY3Rpb25zCisjCitVQ0xJQkNfTElOVVhfTU9EVUxFXzI0PXkKK1VDTElCQ19MSU5VWF9TUEVDSUZJQz15CitVQ0xJQkNfSEFTX0dOVV9FUlJPUj15CisjIFVDTElCQ19CU0RfU1BFQ0lGSUMgaXMgbm90IHNldAorVUNMSUJDX0hBU19CU0RfRVJSPXkKKyMgVUNMSUJDX0hBU19PQlNPTEVURV9CU0RfU0lHTkFMIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19PQlNPTEVURV9TWVNWX1NJR05BTCBpcyBub3Qgc2V0CisjIFVDTElCQ19OVFBfTEVHQUNZIGlzIG5vdCBzZXQKKyMgVUNMSUJDX1NWNF9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfUkVBTFRJTUU9eQorVUNMSUJDX0hBU19BRFZBTkNFRF9SRUFMVElNRT15CitVQ0xJQkNfSEFTX0VQT0xMPXkKK1VDTElCQ19IQVNfWEFUVFI9eQorVUNMSUJDX0hBU19QUk9GSUxJTkc9eQorVUNMSUJDX0hBU19DUllQVF9JTVBMPXkKK1VDTElCQ19IQVNfQ1JZUFQ9eQorVUNMSUJDX0hBU19ORVRXT1JLX1NVUFBPUlQ9eQorVUNMSUJDX0hBU19TT0NLRVQ9eQorVUNMSUJDX0hBU19JUFY0PXkKKyMgVUNMSUJDX0hBU19JUFY2IGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfUlBDPXkKK1VDTElCQ19IQVNfRlVMTF9SUEM9eQorVUNMSUJDX0hBU19SRUVOVFJBTlRfUlBDPXkKK1VDTElCQ19VU0VfTkVUTElOSz15CitVQ0xJQkNfU1VQUE9SVF9BSV9BRERSQ09ORklHPXkKKyMgVUNMSUJDX0hBU19CU0RfUkVTX0NMT1NFIGlzIG5vdCBzZXQKKworIworIyBTdHJpbmcgYW5kIFN0ZGlvIFN1cHBvcnQKKyMKK1VDTElCQ19IQVNfU1RSSU5HX0dFTkVSSUNfT1BUPXkKK1VDTElCQ19IQVNfU1RSSU5HX0FSQ0hfT1BUPXkKK1VDTElCQ19IQVNfQ1RZUEVfVEFCTEVTPXkKK1VDTElCQ19IQVNfQ1RZUEVfU0lHTkVEPXkKKyMgVUNMSUJDX0hBU19DVFlQRV9VTlNBRkUgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0NUWVBFX0NIRUNLRUQgaXMgbm90IHNldAorVUNMSUJDX0hBU19DVFlQRV9FTkZPUkNFRD15CisjIFVDTElCQ19IQVNfV0NIQVIgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0xPQ0FMRSBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfSEVYQURFQ0lNQUxfRkxPQVRTIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfR0xJQkNfQ1VTVE9NX1BSSU5URj15CisjIFVTRV9PTERfVkZQUklOVEYgaXMgbm90IHNldAorVUNMSUJDX1BSSU5URl9TQ0FORl9QT1NJVElPTkFMX0FSR1M9OQorIyBVQ0xJQkNfSEFTX1NDQU5GX0dMSUJDX0FfRkxBRyBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laX05PTkUgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl8yNTYgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl81MTIgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl8xMDI0IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfMjA0OCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl80MDk2PXkKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfODE5MiBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NURElPX0JVSUxUSU5fQlVGRkVSX05PTkU9eQorIyBVQ0xJQkNfSEFTX1NURElPX0JVSUxUSU5fQlVGRkVSXzQgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVSUxUSU5fQlVGRkVSXzggaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX1NIVVRET1dOX09OX0FCT1JUIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfU1RESU9fR0VUQ19NQUNSTz15CitVQ0xJQkNfSEFTX1NURElPX1BVVENfTUFDUk89eQorVUNMSUJDX0hBU19TVERJT19BVVRPX1JXX1RSQU5TSVRJT049eQorIyBVQ0xJQkNfSEFTX0ZPUEVOX0xBUkdFRklMRV9NT0RFIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19GT1BFTl9FWENMVVNJVkVfTU9ERSBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfR0xJQkNfQ1VTVE9NX1NUUkVBTVMgaXMgbm90IHNldAorVUNMSUJDX0hBU19QUklOVEZfTV9TUEVDPXkKK1VDTElCQ19IQVNfRVJSTk9fTUVTU0FHRVM9eQorIyBVQ0xJQkNfSEFTX1NZU19FUlJMSVNUIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfU0lHTlVNX01FU1NBR0VTPXkKKyMgVUNMSUJDX0hBU19TWVNfU0lHTElTVCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX0dOVV9HRVRPUFQ9eQorVUNMSUJDX0hBU19HTlVfR0VUU1VCT1BUPXkKKworIworIyBCaWcgYW5kIFRhbGwKKyMKK1VDTElCQ19IQVNfUkVHRVg9eQorVUNMSUJDX0hBU19SRUdFWF9PTEQ9eQorVUNMSUJDX0hBU19GTk1BVENIPXkKK1VDTElCQ19IQVNfRk5NQVRDSF9PTEQ9eQorIyBVQ0xJQkNfSEFTX1dPUkRFWFAgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0ZUVyBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX0dMT0I9eQorVUNMSUJDX0hBU19HTlVfR0xPQj15CisKKyMKKyMgTGlicmFyeSBJbnN0YWxsYXRpb24gT3B0aW9ucworIworU0hBUkVEX0xJQl9MT0FERVJfUFJFRklYPSIkKFJVTlRJTUVfUFJFRklYKWxpYiIKK1JVTlRJTUVfUFJFRklYPSIvdXNyLyQoVEFSR0VUX0FSQ0gpLWxpbnV4LXVjbGliYy8iCitERVZFTF9QUkVGSVg9Ii91c3IvJChUQVJHRVRfQVJDSCktbGludXgtdWNsaWJjL3Vzci8iCisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBVQ0xJQkNfQlVJTERfUElFIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19BUkM0UkFORE9NIGlzIG5vdCBzZXQKKyMgSEFWRV9OT19TU1AgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NTUCBpcyBub3Qgc2V0CitVQ0xJQkNfQlVJTERfUkVMUk89eQorIyBVQ0xJQkNfQlVJTERfTk9XIGlzIG5vdCBzZXQKK1VDTElCQ19CVUlMRF9OT0VYRUNTVEFDSz15CisKKyMKKyMgdUNsaWJjIGRldmVsb3BtZW50L2RlYnVnZ2luZyBvcHRpb25zCisjCitDUk9TU19DT01QSUxFUl9QUkVGSVg9IiIKK1VDTElCQ19FWFRSQV9DRkxBR1M9IiIKKyMgRE9ERUJVRyBpcyBub3Qgc2V0CisjIERPREVCVUdfUFQgaXMgbm90IHNldAorIyBET1NUUklQIGlzIG5vdCBzZXQKKyMgRE9BU1NFUlRTIGlzIG5vdCBzZXQKKyMgU1VQUE9SVF9MRF9ERUJVRyBpcyBub3Qgc2V0CisjIFNVUFBPUlRfTERfREVCVUdfRUFSTFkgaXMgbm90IHNldAorIyBVQ0xJQkNfTUFMTE9DX0RFQlVHR0lORyBpcyBub3Qgc2V0CitXQVJOSU5HUz0iLVdhbGwiCisjIEVYVFJBX1dBUk5JTkdTIGlzIG5vdCBzZXQKKyMgRE9NVUxUSSBpcyBub3Qgc2V0CisjIFVDTElCQ19NSk4zX09OTFkgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL21pcHM2NGVsLW42NC1saW51eC11Y2xpYmMvY3Jvc3N0b29sLmNvbmZpZyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9taXBzNjRlbC1uNjQtbGludXgtdWNsaWJjL2Nyb3NzdG9vbC5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYyYTVjMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9taXBzNjRlbC1uNjQtbGludXgtdWNsaWJjL2Nyb3NzdG9vbC5jb25maWcKQEAgLTAsMCArMSw0MzkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgY3Jvc3N0b29sLU5HIGhnX2RlZmF1bHRAMjcyMV83YjY0NzQ2YjBhYjMgQ29uZmlndXJhdGlvbgorIyBTdW4gT2N0IDE2IDE3OjMwOjUzIDIwMTEKKyMKK0NUX0NPTkZJR1VSRV9oYXNfeHp1dGlscz15CitDVF9DT05GSUdVUkVfaGFzX2N2cz15CitDVF9DT05GSUdVUkVfaGFzX3N2bj15CitDVF9NT0RVTEVTPXkKKworIworIyBQYXRocyBhbmQgbWlzYyBvcHRpb25zCisjCisKKyMKKyMgY3Jvc3N0b29sLU5HIGJlaGF2aW9yCisjCisjIENUX09CU09MRVRFIGlzIG5vdCBzZXQKK0NUX0VYUEVSSU1FTlRBTD15CisjIENUX0RFQlVHX0NUIGlzIG5vdCBzZXQKKworIworIyBQYXRocworIworQ1RfTE9DQUxfVEFSQkFMTFNfRElSPSIke0hPTUV9L3NyYyIKK0NUX1NBVkVfVEFSQkFMTFM9eQorQ1RfV09SS19ESVI9IiR7Q1RfVE9QX0RJUn0vLmJ1aWxkIgorQ1RfUFJFRklYX0RJUj0iJHtIT01FfS94LXRvb2xzLyR7Q1RfVEFSR0VUfSIKK0NUX0lOU1RBTExfRElSPSIke0NUX1BSRUZJWF9ESVJ9IgorQ1RfUk1fUkZfUFJFRklYX0RJUj15CitDVF9SRU1PVkVfRE9DUz15CitDVF9JTlNUQUxMX0RJUl9STz15CitDVF9TVFJJUF9BTExfVE9PTENIQUlOX0VYRUNVVEFCTEVTPXkKKworIworIyBEb3dubG9hZGluZworIworIyBDVF9GT1JCSURfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9GT1JDRV9ET1dOTE9BRCBpcyBub3Qgc2V0CitDVF9DT05ORUNUX1RJTUVPVVQ9MTAKKyMgQ1RfT05MWV9ET1dOTE9BRCBpcyBub3Qgc2V0CisjIENUX1VTRV9NSVJST1IgaXMgbm90IHNldAorCisjCisjIEV4dHJhY3RpbmcKKyMKKyMgQ1RfRk9SQ0VfRVhUUkFDVCBpcyBub3Qgc2V0CitDVF9PVkVSSURFX0NPTkZJR19HVUVTU19TVUI9eQorIyBDVF9PTkxZX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfUEFUQ0hfQlVORExFRD15CisjIENUX1BBVENIX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9CVU5ETEVEX0ZBTExCQUNLX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTE9DQUxfRkFMTEJBQ0tfQlVORExFRCBpcyBub3Qgc2V0CisjIENUX1BBVENIX05PTkUgaXMgbm90IHNldAorQ1RfUEFUQ0hfT1JERVI9ImJ1bmRsZWQiCisKKyMKKyMgQnVpbGQgYmVoYXZpb3IKKyMKK0NUX1BBUkFMTEVMX0pPQlM9MAorQ1RfTE9BRD0wCitDVF9VU0VfUElQRVM9eQorQ1RfRVhUUkFfRkxBR1NfRk9SX0hPU1Q9IiIKKyMgQ1RfQ09ORklHX1NIRUxMX1NIIGlzIG5vdCBzZXQKKyMgQ1RfQ09ORklHX1NIRUxMX0FTSCBpcyBub3Qgc2V0CitDVF9DT05GSUdfU0hFTExfQkFTSD15CisjIENUX0NPTkZJR19TSEVMTF9DVVNUT00gaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMPSIke2Jhc2h9IgorCisjCisjIExvZ2dpbmcKKyMKKyMgQ1RfTE9HX0VSUk9SIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX1dBUk4gaXMgbm90IHNldAorIyBDVF9MT0dfSU5GTyBpcyBub3Qgc2V0CitDVF9MT0dfRVhUUkE9eQorIyBDVF9MT0dfQUxMIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0RFQlVHIGlzIG5vdCBzZXQKK0NUX0xPR19MRVZFTF9NQVg9IkVYVFJBIgorIyBDVF9MT0dfU0VFX1RPT0xTX1dBUk4gaXMgbm90IHNldAorQ1RfTE9HX1BST0dSRVNTX0JBUj15CitDVF9MT0dfVE9fRklMRT15CitDVF9MT0dfRklMRV9DT01QUkVTUz15CisKKyMKKyMgVGFyZ2V0IG9wdGlvbnMKKyMKK0NUX0FSQ0g9Im1pcHMiCitDVF9BUkNIX1NVUFBPUlRTX0JPVEhfRU5ESUFOPXkKK0NUX0FSQ0hfU1VQUE9SVFNfMzI9eQorQ1RfQVJDSF9TVVBQT1JUU182ND15CitDVF9BUkNIX1NVUFBPUlRfQVJDSD15CitDVF9BUkNIX1NVUFBPUlRfVFVORT15CitDVF9BUkNIX0RFRkFVTFRfQkU9eQorQ1RfQVJDSF9ERUZBVUxUXzMyPXkKK0NUX0FSQ0hfQVJDSD0iIgorQ1RfQVJDSF9UVU5FPSIiCisjIENUX0FSQ0hfQkUgaXMgbm90IHNldAorQ1RfQVJDSF9MRT15CisjIENUX0FSQ0hfMzIgaXMgbm90IHNldAorQ1RfQVJDSF82ND15CitDVF9BUkNIX0JJVE5FU1M9NjQKKyMgQ1RfQVJDSF9GTE9BVF9IVyBpcyBub3Qgc2V0CitDVF9BUkNIX0ZMT0FUX1NXPXkKK0NUX1RBUkdFVF9DRkxBR1M9IiIKK0NUX1RBUkdFVF9MREZMQUdTPSIiCisjIENUX0FSQ0hfYWxwaGEgaXMgbm90IHNldAorIyBDVF9BUkNIX2FybSBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYXZyMzIgaXMgbm90IHNldAorIyBDVF9BUkNIX2JsYWNrZmluIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9tNjhrIGlzIG5vdCBzZXQKK0NUX0FSQ0hfbWlwcz15CisjIENUX0FSQ0hfcG93ZXJwYyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfczM5MCBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc2ggaXMgbm90IHNldAorIyBDVF9BUkNIX3NwYXJjIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF94ODYgaXMgbm90IHNldAorQ1RfQVJDSF9hbHBoYV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hcm1fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXZyMzJfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYmxhY2tmaW5fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbTY4a19BVkFJTEFCTEU9eQorQ1RfQVJDSF9taXBzX0FWQUlMQUJMRT15CitDVF9BUkNIX3Bvd2VycGNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfczM5MF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zaF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zcGFyY19BVkFJTEFCTEU9eQorQ1RfQVJDSF94ODZfQVZBSUxBQkxFPXkKKworIworIyBHZW5lcmljIHRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIX1VTRV9NTVU9eQorCisjCisjIFRhcmdldCBvcHRpbWlzYXRpb25zCisjCisKKyMKKyMgbWlwcyBvdGhlciBvcHRpb25zCisjCisjIENUX0FSQ0hfbWlwc19uMzIgaXMgbm90IHNldAorQ1RfQVJDSF9taXBzX242ND15CitDVF9BUkNIX21pcHNfQUJJPSI2NCIKKworIworIyBUb29sY2hhaW4gb3B0aW9ucworIworCisjCisjIEdlbmVyYWwgdG9vbGNoYWluIG9wdGlvbnMKKyMKK0NUX0ZPUkNFX1NZU1JPT1Q9eQorQ1RfVVNFX1NZU1JPT1Q9eQorQ1RfU1lTUk9PVF9OQU1FPSJzeXNyb290IgorQ1RfU1lTUk9PVF9ESVJfUFJFRklYPSIiCisjIENUX1NUQVRJQ19UT09MQ0hBSU4gaXMgbm90IHNldAorQ1RfVE9PTENIQUlOX1BLR1ZFUlNJT049IiIKK0NUX1RPT0xDSEFJTl9CVUdVUkw9IiIKKworIworIyBUdXBsZSBjb21wbGV0aW9uIGFuZCBhbGlhc2luZworIworQ1RfVEFSR0VUX1ZFTkRPUj0ibjY0IgorQ1RfVEFSR0VUX0FMSUFTX1NFRF9FWFBSPSIiCitDVF9UQVJHRVRfQUxJQVM9IiIKKworIworIyBUb29sY2hhaW4gdHlwZQorIworIyBDVF9OQVRJVkUgaXMgbm90IHNldAorQ1RfQ1JPU1M9eQorIyBDVF9DUk9TU19OQVRJVkUgaXMgbm90IHNldAorIyBDVF9DQU5BRElBTiBpcyBub3Qgc2V0CitDVF9UT09MQ0hBSU5fVFlQRT0iY3Jvc3MiCisKKyMKKyMgQnVpbGQgc3lzdGVtCisjCitDVF9CVUlMRD0iIgorQ1RfQlVJTERfUFJFRklYPSIiCitDVF9CVUlMRF9TVUZGSVg9IiIKKworIworIyBPcGVyYXRpbmcgU3lzdGVtCisjCitDVF9LRVJORUxfU1VQUE9SVFNfU0hBUkVEX0xJQlM9eQorQ1RfS0VSTkVMPSJsaW51eCIKK0NUX0tFUk5FTF9WRVJTSU9OPSIyLjYuMzEuMTQiCisjIENUX0tFUk5FTF9iYXJlX21ldGFsIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9saW51eD15CitDVF9LRVJORUxfYmFyZV9tZXRhbF9BVkFJTEFCTEU9eQorQ1RfS0VSTkVMX2xpbnV4X0FWQUlMQUJMRT15CisjIENUX0tFUk5FTF9WXzNfMF80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzMgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8xIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM5XzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzhfOCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zN182IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM2XzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzVfMTQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzRfMTAgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzNfMTkgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzJfNDYgaXMgbm90IHNldAorQ1RfS0VSTkVMX1ZfMl82XzMxXzE0PXkKKyMgQ1RfS0VSTkVMX1ZfMl82XzI3XzU5IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX0xJTlVYX0NVU1RPTSBpcyBub3Qgc2V0CitDVF9LRVJORUxfbWluZ3czMl9BVkFJTEFCTEU9eQorCisjCisjIENvbW1vbiBrZXJuZWwgb3B0aW9ucworIworQ1RfU0hBUkVEX0xJQlM9eQorCisjCisjIGxpbnV4IG90aGVyIG9wdGlvbnMKKyMKK0NUX0tFUk5FTF9MSU5VWF9WRVJCT1NJVFlfMD15CisjIENUX0tFUk5FTF9MSU5VWF9WRVJCT1NJVFlfMSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9MSU5VWF9WRVJCT1NJVFlfMiBpcyBub3Qgc2V0CitDVF9LRVJORUxfTElOVVhfVkVSQk9TRV9MRVZFTD0wCitDVF9LRVJORUxfTElOVVhfSU5TVEFMTF9DSEVDSz15CisKKyMKKyMgQmluYXJ5IHV0aWxpdGllcworIworQ1RfQVJDSF9CSU5GTVRfRUxGPXkKKworIworIyBHTlUgYmludXRpbHMKKyMKKyMgQ1RfQklOVVRJTFNfVl8yXzIxXzUzIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfVl8yXzIxXzFhIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfVl8yXzIwXzFhIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX1ZfMl8xOV8xYT15CisjIENUX0JJTlVUSUxTX1ZfMl8xOGEgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVkVSU0lPTj0iMi4xOS4xYSIKK0NUX0JJTlVUSUxTXzJfMTlfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfMl8xOF9vcl9sYXRlcj15CitDVF9CSU5VVElMU19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQklOVVRJTFNfTElOS0VSX0xEPXkKK0NUX0JJTlVUSUxTX0xJTktFUlNfTElTVD0ibGQiCitDVF9CSU5VVElMU19MSU5LRVJfREVGQVVMVD0iYmZkIgorQ1RfQklOVVRJTFNfRVhUUkFfQ09ORklHX0FSUkFZPSIiCisjIENUX0JJTlVUSUxTX0ZPUl9UQVJHRVQgaXMgbm90IHNldAorCisjCisjIEMgY29tcGlsZXIKKyMKK0NUX0NDPSJnY2MiCitDVF9DQ19WRVJTSU9OPSI0LjMuMiIKK0NUX0NDX2djYz15CisjIENUX0NDX0dDQ19TSE9XX0xJTkFSTyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF82XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNl8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF81XzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzYgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF81IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzMgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8yIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM182IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18zIGlzIG5vdCBzZXQKK0NUX0NDX1ZfNF8zXzI9eQorIyBDVF9DQ19WXzRfM18xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8yXzIgaXMgbm90IHNldAorQ1RfQ0NfR0NDXzRfMl9vcl9sYXRlcj15CitDVF9DQ19HQ0NfNF8zPXkKK0NUX0NDX0dDQ180XzNfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9DQ19HQ0NfVVNFX0dNUF9NUEZSPXkKKyMgQ1RfQ0NfTEFOR19GT1JUUkFOIGlzIG5vdCBzZXQKK0NUX0NDX1NVUFBPUlRfQ1hYPXkKK0NUX0NDX1NVUFBPUlRfRk9SVFJBTj15CitDVF9DQ19TVVBQT1JUX0pBVkE9eQorQ1RfQ0NfU1VQUE9SVF9BREE9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDPXkKK0NUX0NDX1NVUFBPUlRfT0JKQ1hYPXkKKworIworIyBBZGRpdGlvbmFsIHN1cHBvcnRlZCBsYW5ndWFnZXM6CisjCitDVF9DQ19MQU5HX0NYWD15CisjIENUX0NDX0xBTkdfSkFWQSBpcyBub3Qgc2V0CisjIENUX0NDX0xBTkdfQURBIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfTEFOR19PQkpDIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfTEFOR19PQkpDWFggaXMgbm90IHNldAorQ1RfQ0NfTEFOR19PVEhFUlM9IiIKKworIworIyBnY2Mgb3RoZXIgb3B0aW9ucworIworQ1RfQ0NfRU5BQkxFX0NYWF9GTEFHUz0iIgorQ1RfQ0NfQ09SRV9FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0NDX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorCisjCisjIE9wdGltaXNhdGlvbiBmZWF0dXJlcworIworCisjCisjIFNldHRpbmdzIGZvciBsaWJyYXJpZXMgcnVubmluZyBvbiB0YXJnZXQKKyMKK0NUX0NDX0dDQ19FTkFCTEVfVEFSR0VUX09QVFNQQUNFPXkKKyMgQ1RfQ0NfR0NDX0xJQk1VREZMQVAgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCR09NUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJTU1AgaXMgbm90IHNldAorCisjCisjIE1pc2MuIG9ic2N1cmUgb3B0aW9ucy4KKyMKK0NUX0NDX0NYQV9BVEVYSVQ9eQorIyBDVF9DQ19HQ0NfRElTQUJMRV9QQ0ggaXMgbm90IHNldAorQ1RfQ0NfR0NDX1NKTEpfRVhDRVBUSU9OUz1tCitDVF9DQ19HQ0NfTERCTF8xMjg9bQorQ1RfQ0NfR0NDX0hBU19BUkNIX09QVElPTlM9eQorCisjCisjIGFyY2hpY3RlY3R1cmUtc3BlY2lmaWMgb3B0aW9ucworIworQ1RfQ0NfR0NDX21pcHNfbGxzYz1tCitDVF9DQ19HQ0NfbWlwc19zeW5jaT1tCisjIENUX0NDX0dDQ19taXBzX3BsdCBpcyBub3Qgc2V0CisKKyMKKyMgQy1saWJyYXJ5CisjCitDVF9MSUJDPSJ1Q2xpYmMiCitDVF9MSUJDX1ZFUlNJT049IjAuOS4zMC4xIgorIyBDVF9MSUJDX2VnbGliYyBpcyBub3Qgc2V0CisjIENUX0xJQkNfZ2xpYmMgaXMgbm90IHNldAorQ1RfTElCQ191Q2xpYmM9eQorQ1RfTElCQ19lZ2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfZ2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbWluZ3dfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbmV3bGliX0FWQUlMQUJMRT15CitDVF9MSUJDX25vbmVfQVZBSUxBQkxFPXkKK0NUX0xJQkNfdUNsaWJjX0FWQUlMQUJMRT15CisjIENUX0xJQkNfVUNMSUJDX1ZfMF85XzMyIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19VQ0xJQkNfVl8wXzlfMzEgaXMgbm90IHNldAorIyBDVF9MSUJDX1VDTElCQ19WXzBfOV8zMF8zIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19VQ0xJQkNfVl8wXzlfMzBfMiBpcyBub3Qgc2V0CitDVF9MSUJDX1VDTElCQ19WXzBfOV8zMF8xPXkKKyMgQ1RfTElCQ19VQ0xJQkNfVl8wXzlfMzAgaXMgbm90IHNldAorIyBDVF9MSUJDX1VDTElCQ19WX3NuYXBzaG90IGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19VQ0xJQkNfVl9zcGVjaWZpY19kYXRlIGlzIG5vdCBzZXQKK0NUX0xJQkNfVUNMSUJDXzBfOV8zMF9vcl9sYXRlcj15CitDVF9MSUJDX1VDTElCQ19QQVJBTExFTD15CitDVF9MSUJDX1VDTElCQ19WRVJCT1NJVFlfMD15CisjIENUX0xJQkNfVUNMSUJDX1ZFUkJPU0lUWV8xIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19VQ0xJQkNfVkVSQk9TSVRZXzIgaXMgbm90IHNldAorQ1RfTElCQ19VQ0xJQkNfVkVSQk9TSVRZPSIiCitDVF9MSUJDX1VDTElCQ19ERUJVR19MRVZFTF8wPXkKKyMgQ1RfTElCQ19VQ0xJQkNfREVCVUdfTEVWRUxfMSBpcyBub3Qgc2V0CisjIENUX0xJQkNfVUNMSUJDX0RFQlVHX0xFVkVMXzIgaXMgbm90IHNldAorQ1RfTElCQ19VQ0xJQkNfREVCVUdfTEVWRUw9MAorQ1RfTElCQ19VQ0xJQkNfQ09ORklHX0ZJTEU9IiR7Q1RfTElCX0RJUn0vc2FtcGxlcy8ke0NUX1RBUkdFVH0vJHtDVF9MSUJDfS0ke0NUX0xJQkNfVkVSU0lPTn0uY29uZmlnIgorQ1RfTElCQ19TVVBQT1JUX1RIUkVBRFNfQU5ZPXkKK0NUX0xJQkNfU1VQUE9SVF9MSU5VWFRIUkVBRFM9eQorQ1RfTElCQ19TVVBQT1JUX1RIUkVBRFNfTk9ORT15CitDVF9USFJFQURTPSJsaW51eHRocmVhZHMiCisKKyMKKyMgQ29tbW9uIEMgbGlicmFyeSBvcHRpb25zCisjCitDVF9USFJFQURTX0xJTlVYVEhSRUFEUz15CisjIENUX1RIUkVBRFNfTk9ORSBpcyBub3Qgc2V0CitDVF9MSUJDX1hMREQ9eQorCisjCisjIHVDbGliYyBvdGhlciBvcHRpb25zCisjCitDVF9MSUJDX1VDTElCQ19MTlhUSFJEX09MRD15CisjIENUX0xJQkNfVUNMSUJDX0xOWFRIUkRfTkVXIGlzIG5vdCBzZXQKK0NUX0xJQkNfVUNMSUJDX0xOWFRIUkQ9Im9sZCIKKyMgQ1RfTElCQ19VQ0xJQkNfTE9DQUxFUyBpcyBub3Qgc2V0CisjIENUX0xJQkNfVUNMSUJDX1dDSEFSIGlzIG5vdCBzZXQKKworIworIyBEZWJ1ZyBmYWNpbGl0aWVzCisjCisjIENUX0RFQlVHX2RtYWxsb2MgaXMgbm90IHNldAorIyBDVF9ERUJVR19kdW1hIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfZ2RiIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfbHRyYWNlIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfc3RyYWNlIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzCisjCitDVF9DT01QTElCU19ORUVERUQ9eQorQ1RfR01QX05FRURFRD15CitDVF9NUEZSX05FRURFRD15CitDVF9DT01QTElCUz15CitDVF9HTVA9eQorQ1RfTVBGUj15CisjIENUX0dNUF9WXzVfMF8yIGlzIG5vdCBzZXQKKyMgQ1RfR01QX1ZfNV8wXzEgaXMgbm90IHNldAorQ1RfR01QX1ZfNF8zXzI9eQorIyBDVF9HTVBfVl80XzNfMSBpcyBub3Qgc2V0CisjIENUX0dNUF9WXzRfM18wIGlzIG5vdCBzZXQKK0NUX0dNUF9WRVJTSU9OPSI0LjMuMiIKKyMgQ1RfTVBGUl9WXzNfMF8xIGlzIG5vdCBzZXQKKyMgQ1RfTVBGUl9WXzNfMF8wIGlzIG5vdCBzZXQKK0NUX01QRlJfVl8yXzRfMj15CisjIENUX01QRlJfVl8yXzRfMSBpcyBub3Qgc2V0CisjIENUX01QRlJfVl8yXzRfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZFUlNJT049IjIuNC4yIgorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMgY29tbW9uIG9wdGlvbnMKKyMKKyMgQ1RfQ09NUExJQlNfQ0hFQ0sgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiB0b29scworIworCisjCisjIFJFQUQgSEVMUCBiZWZvcmUgeW91IHNheSAnWScgYmVsb3cgISEhCisjCisjIENUX0NPTVBfVE9PTFMgaXMgbm90IHNldAorCisjCisjIFRlc3Qgc3VpdGUKKyMKKyMgQ1RfVEVTVF9TVUlURV9HQ0MgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL21pcHM2NGVsLW42NC1saW51eC11Y2xpYmMvcmVwb3J0ZWQuYnkgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvbWlwczY0ZWwtbjY0LWxpbnV4LXVjbGliYy9yZXBvcnRlZC5ieQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGU4MjY4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL21pcHM2NGVsLW42NC1saW51eC11Y2xpYmMvcmVwb3J0ZWQuYnkKQEAgLTAsMCArMSwzIEBACityZXBvcnRlcl9uYW1lPSJZYW5uIEUuIE1PUklOIgorcmVwb3J0ZXJfdXJsPSJodHRwOi8veW1vcmluLmlzLWEtZ2Vlay5vcmcvcHJvamVjdHMvY3Jvc3N0b29sIgorcmVwb3J0ZXJfY29tbWVudD0iRVhQRVJJTUVOVEFMIE1JUFMtNjQgbjY0IHRvb2xjaGFpbi4iCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvbWlwczY0ZWwtbjY0LWxpbnV4LXVjbGliYy91Q2xpYmMtMC45LjMwLjEuY29uZmlnIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL21pcHM2NGVsLW42NC1saW51eC11Y2xpYmMvdUNsaWJjLTAuOS4zMC4xLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjJmNWMyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL21pcHM2NGVsLW42NC1saW51eC11Y2xpYmMvdUNsaWJjLTAuOS4zMC4xLmNvbmZpZwpAQCAtMCwwICsxLDI1NCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBWZXJzaW9uOiAwLjkuMzAKKyMgTW9uIE5vdiAxNyAwOTozNjowMCAyMDA4CisjCisjIFRBUkdFVF9hbHBoYSBpcyBub3Qgc2V0CisjIFRBUkdFVF9hcm0gaXMgbm90IHNldAorIyBUQVJHRVRfYXZyMzIgaXMgbm90IHNldAorIyBUQVJHRVRfYmZpbiBpcyBub3Qgc2V0CisjIFRBUkdFVF9jcmlzIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2UxIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2ZydiBpcyBub3Qgc2V0CisjIFRBUkdFVF9oODMwMCBpcyBub3Qgc2V0CisjIFRBUkdFVF9ocHBhIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2kzODYgaXMgbm90IHNldAorIyBUQVJHRVRfaTk2MCBpcyBub3Qgc2V0CisjIFRBUkdFVF9pYTY0IGlzIG5vdCBzZXQKKyMgVEFSR0VUX202OGsgaXMgbm90IHNldAorIyBUQVJHRVRfbWljcm9ibGF6ZSBpcyBub3Qgc2V0CitUQVJHRVRfbWlwcz15CisjIFRBUkdFVF9uaW9zIGlzIG5vdCBzZXQKKyMgVEFSR0VUX25pb3MyIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3Bvd2VycGMgaXMgbm90IHNldAorIyBUQVJHRVRfc2ggaXMgbm90IHNldAorIyBUQVJHRVRfc2g2NCBpcyBub3Qgc2V0CisjIFRBUkdFVF9zcGFyYyBpcyBub3Qgc2V0CisjIFRBUkdFVF92ODUwIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3ZheCBpcyBub3Qgc2V0CisjIFRBUkdFVF94ODZfNjQgaXMgbm90IHNldAorIyBUQVJHRVRfeHRlbnNhIGlzIG5vdCBzZXQKKworIworIyBUYXJnZXQgQXJjaGl0ZWN0dXJlIEZlYXR1cmVzIGFuZCBPcHRpb25zCisjCitUQVJHRVRfQVJDSD0ibWlwcyIKK0ZPUkNFX09QVElPTlNfRk9SX0FSQ0g9eQorQVJDSF9DRkxBR1M9Ii1tbm8tc3BsaXQtYWRkcmVzc2VzIgorIyBDT05GSUdfQVJNX09BQkkgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VBQkkgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19BUk0gaXMgbm90IHNldAorIyBDT05GSUdfQVJNNjEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk03VERNSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUk03MjBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTkyMFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJNOTIyVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk05MjZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTEwVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk0xMTM2SkZfUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk0xMTc2SlpfUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk0xMTc2SlpGX1MgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0NPUlRFWF9NMyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fQ09SVEVYX00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9TQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9YU0NBTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0lXTU1YVCBpcyBub3Qgc2V0CitDT05GSUdfTUlQU19PMzJfQUJJPXkKKyMgQ09ORklHX01JUFNfTjMyX0FCSSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX042NF9BQkkgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19JU0FfMSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0lTQV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfSVNBXzMgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19JU0FfNCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0lTQV9NSVBTMzIgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19JU0FfTUlQUzMyUjIgaXMgbm90IHNldAorQ09ORklHX01JUFNfSVNBX01JUFM2ND15CitUQVJHRVRfU1VCQVJDSD0iIgorCisjCisjIFVzaW5nIEVMRiBmaWxlIGZvcm1hdAorIworQVJDSF9BTllfRU5ESUFOPXkKK0FSQ0hfQklHX0VORElBTj15CitBUkNIX1dBTlRTX0JJR19FTkRJQU49eQorIyBBUkNIX1dBTlRTX0xJVFRMRV9FTkRJQU4gaXMgbm90IHNldAorQVJDSF9IQVNfTU1VPXkKK0FSQ0hfVVNFX01NVT15CitVQ0xJQkNfSEFTX0ZMT0FUUz15CisjIFVDTElCQ19IQVNfRlBVIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfU09GVF9GTE9BVD15CitET19DOTlfTUFUSD15CitVQ0xJQkNfSEFTX0ZFTlY9eQorS0VSTkVMX0hFQURFUlM9Ii91c3IvaW5jbHVkZSIKK0hBVkVfRE9UX0NPTkZJRz15CisKKyMKKyMgR2VuZXJhbCBMaWJyYXJ5IFNldHRpbmdzCisjCisjIEhBVkVfTk9fUElDIGlzIG5vdCBzZXQKK0RPUElDPXkKKyMgQVJDSF9IQVNfTk9fU0hBUkVEIGlzIG5vdCBzZXQKKyMgQVJDSF9IQVNfTk9fTERTTyBpcyBub3Qgc2V0CitIQVZFX1NIQVJFRD15CisjIEZPUkNFX1NIQVJFQUJMRV9URVhUX1NFR01FTlRTIGlzIG5vdCBzZXQKK0xEU09fTEREX1NVUFBPUlQ9eQorTERTT19DQUNIRV9TVVBQT1JUPXkKKyMgTERTT19QUkVMT0FEX0ZJTEVfU1VQUE9SVCBpcyBub3Qgc2V0CitMRFNPX0JBU0VfRklMRU5BTUU9ImxkLnNvIgorVUNMSUJDX1NUQVRJQ19MRENPTkZJRz15CisjIExEU09fUlVOUEFUSCBpcyBub3Qgc2V0CitVQ0xJQkNfQ1RPUl9EVE9SPXkKKyMgTERTT19HTlVfSEFTSF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgSEFTX05PX1RIUkVBRFMgaXMgbm90IHNldAorVUNMSUJDX0hBU19USFJFQURTPXkKKyMgUFRIUkVBRFNfREVCVUdfU1VQUE9SVCBpcyBub3Qgc2V0CitMSU5VWFRIUkVBRFNfT0xEPXkKK1VDTElCQ19IQVNfU1lTTE9HPXkKK1VDTElCQ19IQVNfTEZTPXkKKyMgTUFMTE9DIGlzIG5vdCBzZXQKKyMgTUFMTE9DX1NJTVBMRSBpcyBub3Qgc2V0CitNQUxMT0NfU1RBTkRBUkQ9eQorIyBNQUxMT0NfR0xJQkNfQ09NUEFUIGlzIG5vdCBzZXQKK1VDTElCQ19EWU5BTUlDX0FURVhJVD15CisjIENPTVBBVF9BVEVYSVQgaXMgbm90IHNldAorIyBVQ0xJQkNfU1VTVjNfTEVHQUNZIGlzIG5vdCBzZXQKKyMgVUNMSUJDX1NVU1YzX0xFR0FDWV9NQUNST1MgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NUVUJTIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfU0hBRE9XPXkKKyMgVUNMSUJDX0hBU19QUk9HUkFNX0lOVk9DQVRJT05fTkFNRSBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1BUWT15CitBU1NVTUVfREVWUFRTPXkKK1VOSVg5OFBUWV9PTkxZPXkKKyMgVUNMSUJDX0hBU19HRVRQVCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1RNX0VYVEVOU0lPTlM9eQorVUNMSUJDX0hBU19UWl9DQUNISU5HPXkKK1VDTElCQ19IQVNfVFpfRklMRT15CitVQ0xJQkNfSEFTX1RaX0ZJTEVfUkVBRF9NQU5ZPXkKK1VDTElCQ19UWl9GSUxFX1BBVEg9Ii9ldGMvVFoiCisKKyMKKyMgQWR2YW5jZWQgTGlicmFyeSBTZXR0aW5ncworIworVUNMSUJDX1BXRF9CVUZGRVJfU0laRT0yNTYKK1VDTElCQ19HUlBfQlVGRkVSX1NJWkU9MjU2CisKKyMKKyMgU3VwcG9ydCB2YXJpb3VzIGZhbWlsaWVzIG9mIGZ1bmN0aW9ucworIworVUNMSUJDX0xJTlVYX01PRFVMRV8yND15CitVQ0xJQkNfTElOVVhfU1BFQ0lGSUM9eQorVUNMSUJDX0hBU19HTlVfRVJST1I9eQorIyBVQ0xJQkNfQlNEX1NQRUNJRklDIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfQlNEX0VSUj15CisjIFVDTElCQ19IQVNfT0JTT0xFVEVfQlNEX1NJR05BTCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfT0JTT0xFVEVfU1lTVl9TSUdOQUwgaXMgbm90IHNldAorIyBVQ0xJQkNfTlRQX0xFR0FDWSBpcyBub3Qgc2V0CisjIFVDTElCQ19TVjRfREVQUkVDQVRFRCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1JFQUxUSU1FPXkKK1VDTElCQ19IQVNfQURWQU5DRURfUkVBTFRJTUU9eQorVUNMSUJDX0hBU19FUE9MTD15CitVQ0xJQkNfSEFTX1hBVFRSPXkKK1VDTElCQ19IQVNfUFJPRklMSU5HPXkKK1VDTElCQ19IQVNfQ1JZUFRfSU1QTD15CitVQ0xJQkNfSEFTX0NSWVBUPXkKK1VDTElCQ19IQVNfTkVUV09SS19TVVBQT1JUPXkKK1VDTElCQ19IQVNfU09DS0VUPXkKK1VDTElCQ19IQVNfSVBWND15CisjIFVDTElCQ19IQVNfSVBWNiBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1JQQz15CitVQ0xJQkNfSEFTX0ZVTExfUlBDPXkKK1VDTElCQ19IQVNfUkVFTlRSQU5UX1JQQz15CitVQ0xJQkNfVVNFX05FVExJTks9eQorVUNMSUJDX1NVUFBPUlRfQUlfQUREUkNPTkZJRz15CisjIFVDTElCQ19IQVNfQlNEX1JFU19DTE9TRSBpcyBub3Qgc2V0CisKKyMKKyMgU3RyaW5nIGFuZCBTdGRpbyBTdXBwb3J0CisjCitVQ0xJQkNfSEFTX1NUUklOR19HRU5FUklDX09QVD15CitVQ0xJQkNfSEFTX1NUUklOR19BUkNIX09QVD15CitVQ0xJQkNfSEFTX0NUWVBFX1RBQkxFUz15CitVQ0xJQkNfSEFTX0NUWVBFX1NJR05FRD15CisjIFVDTElCQ19IQVNfQ1RZUEVfVU5TQUZFIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19DVFlQRV9DSEVDS0VEIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfQ1RZUEVfRU5GT1JDRUQ9eQorIyBVQ0xJQkNfSEFTX1dDSEFSIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19MT0NBTEUgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0hFWEFERUNJTUFMX0ZMT0FUUyBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX0dMSUJDX0NVU1RPTV9QUklOVEY9eQorIyBVU0VfT0xEX1ZGUFJJTlRGIGlzIG5vdCBzZXQKK1VDTElCQ19QUklOVEZfU0NBTkZfUE9TSVRJT05BTF9BUkdTPTkKKyMgVUNMSUJDX0hBU19TQ0FORl9HTElCQ19BX0ZMQUcgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl9OT05FIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfMjU2IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfNTEyIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfMTAyNCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzIwNDggaXMgbm90IHNldAorVUNMSUJDX0hBU19TVERJT19CVUZTSVpfNDA5Nj15CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzgxOTIgaXMgbm90IHNldAorVUNMSUJDX0hBU19TVERJT19CVUlMVElOX0JVRkZFUl9OT05FPXkKKyMgVUNMSUJDX0hBU19TVERJT19CVUlMVElOX0JVRkZFUl80IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUlMVElOX0JVRkZFUl84IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19TSFVURE9XTl9PTl9BQk9SVCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NURElPX0dFVENfTUFDUk89eQorVUNMSUJDX0hBU19TVERJT19QVVRDX01BQ1JPPXkKK1VDTElCQ19IQVNfU1RESU9fQVVUT19SV19UUkFOU0lUSU9OPXkKKyMgVUNMSUJDX0hBU19GT1BFTl9MQVJHRUZJTEVfTU9ERSBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfRk9QRU5fRVhDTFVTSVZFX01PREUgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0dMSUJDX0NVU1RPTV9TVFJFQU1TIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfUFJJTlRGX01fU1BFQz15CitVQ0xJQkNfSEFTX0VSUk5PX01FU1NBR0VTPXkKKyMgVUNMSUJDX0hBU19TWVNfRVJSTElTVCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NJR05VTV9NRVNTQUdFUz15CisjIFVDTElCQ19IQVNfU1lTX1NJR0xJU1QgaXMgbm90IHNldAorVUNMSUJDX0hBU19HTlVfR0VUT1BUPXkKK1VDTElCQ19IQVNfR05VX0dFVFNVQk9QVD15CisKKyMKKyMgQmlnIGFuZCBUYWxsCisjCitVQ0xJQkNfSEFTX1JFR0VYPXkKK1VDTElCQ19IQVNfUkVHRVhfT0xEPXkKK1VDTElCQ19IQVNfRk5NQVRDSD15CitVQ0xJQkNfSEFTX0ZOTUFUQ0hfT0xEPXkKKyMgVUNMSUJDX0hBU19XT1JERVhQIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19GVFcgaXMgbm90IHNldAorVUNMSUJDX0hBU19HTE9CPXkKK1VDTElCQ19IQVNfR05VX0dMT0I9eQorCisjCisjIExpYnJhcnkgSW5zdGFsbGF0aW9uIE9wdGlvbnMKKyMKK1NIQVJFRF9MSUJfTE9BREVSX1BSRUZJWD0iJChSVU5USU1FX1BSRUZJWClsaWIiCitSVU5USU1FX1BSRUZJWD0iL3Vzci8kKFRBUkdFVF9BUkNIKS1saW51eC11Y2xpYmMvIgorREVWRUxfUFJFRklYPSIvdXNyLyQoVEFSR0VUX0FSQ0gpLWxpbnV4LXVjbGliYy91c3IvIgorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgVUNMSUJDX0JVSUxEX1BJRSBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfQVJDNFJBTkRPTSBpcyBub3Qgc2V0CisjIEhBVkVfTk9fU1NQIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TU1AgaXMgbm90IHNldAorVUNMSUJDX0JVSUxEX1JFTFJPPXkKKyMgVUNMSUJDX0JVSUxEX05PVyBpcyBub3Qgc2V0CitVQ0xJQkNfQlVJTERfTk9FWEVDU1RBQ0s9eQorCisjCisjIHVDbGliYyBkZXZlbG9wbWVudC9kZWJ1Z2dpbmcgb3B0aW9ucworIworQ1JPU1NfQ09NUElMRVJfUFJFRklYPSIiCitVQ0xJQkNfRVhUUkFfQ0ZMQUdTPSIiCisjIERPREVCVUcgaXMgbm90IHNldAorIyBET0RFQlVHX1BUIGlzIG5vdCBzZXQKKyMgRE9TVFJJUCBpcyBub3Qgc2V0CisjIERPQVNTRVJUUyBpcyBub3Qgc2V0CisjIFNVUFBPUlRfTERfREVCVUcgaXMgbm90IHNldAorIyBTVVBQT1JUX0xEX0RFQlVHX0VBUkxZIGlzIG5vdCBzZXQKKyMgVUNMSUJDX01BTExPQ19ERUJVR0dJTkcgaXMgbm90IHNldAorV0FSTklOR1M9Ii1XYWxsIgorIyBFWFRSQV9XQVJOSU5HUyBpcyBub3Qgc2V0CisjIERPTVVMVEkgaXMgbm90IHNldAorIyBVQ0xJQkNfTUpOM19PTkxZIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9taXBzZWwtc2RlLWVsZi9jcm9zc3Rvb2wuY29uZmlnIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL21pcHNlbC1zZGUtZWxmL2Nyb3NzdG9vbC5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YxN2YwYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9taXBzZWwtc2RlLWVsZi9jcm9zc3Rvb2wuY29uZmlnCkBAIC0wLDAgKzEsMzY4IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIGNyb3NzdG9vbC1ORyBoZ19kZWZhdWx0QDI3MjFfN2I2NDc0NmIwYWIzIENvbmZpZ3VyYXRpb24KKyMgU3VuIE9jdCAxNiAxNzozMTowOCAyMDExCisjCitDVF9DT05GSUdVUkVfaGFzX3h6dXRpbHM9eQorQ1RfQ09ORklHVVJFX2hhc19jdnM9eQorQ1RfQ09ORklHVVJFX2hhc19zdm49eQorQ1RfTU9EVUxFUz15CisKKyMKKyMgUGF0aHMgYW5kIG1pc2Mgb3B0aW9ucworIworCisjCisjIGNyb3NzdG9vbC1ORyBiZWhhdmlvcgorIworIyBDVF9PQlNPTEVURSBpcyBub3Qgc2V0CisjIENUX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CisjIENUX0RFQlVHX0NUIGlzIG5vdCBzZXQKKworIworIyBQYXRocworIworQ1RfTE9DQUxfVEFSQkFMTFNfRElSPSIke0hPTUV9L3NyYyIKK0NUX1NBVkVfVEFSQkFMTFM9eQorQ1RfV09SS19ESVI9IiR7Q1RfVE9QX0RJUn0vLmJ1aWxkIgorQ1RfUFJFRklYX0RJUj0iJHtIT01FfS94LXRvb2xzLyR7Q1RfVEFSR0VUfSIKK0NUX0lOU1RBTExfRElSPSIke0NUX1BSRUZJWF9ESVJ9IgorQ1RfUk1fUkZfUFJFRklYX0RJUj15CitDVF9SRU1PVkVfRE9DUz15CitDVF9JTlNUQUxMX0RJUl9STz15CitDVF9TVFJJUF9BTExfVE9PTENIQUlOX0VYRUNVVEFCTEVTPXkKKworIworIyBEb3dubG9hZGluZworIworIyBDVF9GT1JCSURfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9GT1JDRV9ET1dOTE9BRCBpcyBub3Qgc2V0CitDVF9DT05ORUNUX1RJTUVPVVQ9MTAKKyMgQ1RfT05MWV9ET1dOTE9BRCBpcyBub3Qgc2V0CisjIENUX1VTRV9NSVJST1IgaXMgbm90IHNldAorCisjCisjIEV4dHJhY3RpbmcKKyMKKyMgQ1RfRk9SQ0VfRVhUUkFDVCBpcyBub3Qgc2V0CitDVF9PVkVSSURFX0NPTkZJR19HVUVTU19TVUI9eQorIyBDVF9PTkxZX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfUEFUQ0hfQlVORExFRD15CisjIENUX1BBVENIX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9CVU5ETEVEX0ZBTExCQUNLX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTE9DQUxfRkFMTEJBQ0tfQlVORExFRCBpcyBub3Qgc2V0CisjIENUX1BBVENIX05PTkUgaXMgbm90IHNldAorQ1RfUEFUQ0hfT1JERVI9ImJ1bmRsZWQiCisKKyMKKyMgQnVpbGQgYmVoYXZpb3IKKyMKK0NUX1BBUkFMTEVMX0pPQlM9MAorQ1RfTE9BRD0wCitDVF9VU0VfUElQRVM9eQorQ1RfRVhUUkFfRkxBR1NfRk9SX0hPU1Q9IiIKKyMgQ1RfQ09ORklHX1NIRUxMX1NIIGlzIG5vdCBzZXQKKyMgQ1RfQ09ORklHX1NIRUxMX0FTSCBpcyBub3Qgc2V0CitDVF9DT05GSUdfU0hFTExfQkFTSD15CisjIENUX0NPTkZJR19TSEVMTF9DVVNUT00gaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMPSIke2Jhc2h9IgorCisjCisjIExvZ2dpbmcKKyMKKyMgQ1RfTE9HX0VSUk9SIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX1dBUk4gaXMgbm90IHNldAorIyBDVF9MT0dfSU5GTyBpcyBub3Qgc2V0CitDVF9MT0dfRVhUUkE9eQorIyBDVF9MT0dfQUxMIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0RFQlVHIGlzIG5vdCBzZXQKK0NUX0xPR19MRVZFTF9NQVg9IkVYVFJBIgorIyBDVF9MT0dfU0VFX1RPT0xTX1dBUk4gaXMgbm90IHNldAorQ1RfTE9HX1BST0dSRVNTX0JBUj15CitDVF9MT0dfVE9fRklMRT15CitDVF9MT0dfRklMRV9DT01QUkVTUz15CisKKyMKKyMgVGFyZ2V0IG9wdGlvbnMKKyMKK0NUX0FSQ0g9Im1pcHMiCitDVF9BUkNIX1NVUFBPUlRTX0JPVEhfRU5ESUFOPXkKK0NUX0FSQ0hfU1VQUE9SVFNfMzI9eQorQ1RfQVJDSF9TVVBQT1JUX0FSQ0g9eQorQ1RfQVJDSF9TVVBQT1JUX1RVTkU9eQorQ1RfQVJDSF9ERUZBVUxUX0JFPXkKK0NUX0FSQ0hfREVGQVVMVF8zMj15CitDVF9BUkNIX0FSQ0g9IiIKK0NUX0FSQ0hfVFVORT0iIgorIyBDVF9BUkNIX0JFIGlzIG5vdCBzZXQKK0NUX0FSQ0hfTEU9eQorQ1RfQVJDSF8zMj15CitDVF9BUkNIX0JJVE5FU1M9MzIKKyMgQ1RfQVJDSF9GTE9BVF9IVyBpcyBub3Qgc2V0CitDVF9BUkNIX0ZMT0FUX1NXPXkKK0NUX1RBUkdFVF9DRkxBR1M9IiIKK0NUX1RBUkdFVF9MREZMQUdTPSIiCisjIENUX0FSQ0hfYWxwaGEgaXMgbm90IHNldAorIyBDVF9BUkNIX2FybSBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYXZyMzIgaXMgbm90IHNldAorIyBDVF9BUkNIX2JsYWNrZmluIGlzIG5vdCBzZXQKK0NUX0FSQ0hfbWlwcz15CisjIENUX0FSQ0hfcG93ZXJwYyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc2ggaXMgbm90IHNldAorIyBDVF9BUkNIX3NwYXJjIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF94ODYgaXMgbm90IHNldAorQ1RfQVJDSF9hbHBoYV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hcm1fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXZyMzJfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYmxhY2tmaW5fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbTY4a19BVkFJTEFCTEU9eQorQ1RfQVJDSF9taXBzX0FWQUlMQUJMRT15CitDVF9BUkNIX3Bvd2VycGNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfczM5MF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zaF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zcGFyY19BVkFJTEFCTEU9eQorQ1RfQVJDSF94ODZfQVZBSUxBQkxFPXkKKworIworIyBHZW5lcmljIHRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIX1VTRV9NTVU9eQorCisjCisjIFRhcmdldCBvcHRpbWlzYXRpb25zCisjCisKKyMKKyMgbWlwcyBvdGhlciBvcHRpb25zCisjCitDVF9BUkNIX21pcHNfbzMyPXkKK0NUX0FSQ0hfbWlwc19BQkk9IjMyIgorCisjCisjIFRvb2xjaGFpbiBvcHRpb25zCisjCisKKyMKKyMgR2VuZXJhbCB0b29sY2hhaW4gb3B0aW9ucworIworQ1RfRk9SQ0VfU1lTUk9PVD15CitDVF9VU0VfU1lTUk9PVD15CitDVF9TWVNST09UX05BTUU9InN5c3Jvb3QiCitDVF9TWVNST09UX0RJUl9QUkVGSVg9IiIKK0NUX1dBTlRTX1NUQVRJQ19MSU5LPXkKK0NUX1RPT0xDSEFJTl9QS0dWRVJTSU9OPSIiCitDVF9UT09MQ0hBSU5fQlVHVVJMPSIiCisKKyMKKyMgVHVwbGUgY29tcGxldGlvbiBhbmQgYWxpYXNpbmcKKyMKK0NUX1RBUkdFVF9WRU5ET1I9InNkZSIKK0NUX1RBUkdFVF9BTElBU19TRURfRVhQUj0iIgorQ1RfVEFSR0VUX0FMSUFTPSIiCisKKyMKKyMgVG9vbGNoYWluIHR5cGUKKyMKK0NUX0NST1NTPXkKK0NUX1RPT0xDSEFJTl9UWVBFPSJjcm9zcyIKKworIworIyBCdWlsZCBzeXN0ZW0KKyMKK0NUX0JVSUxEPSIiCitDVF9CVUlMRF9QUkVGSVg9IiIKK0NUX0JVSUxEX1NVRkZJWD0iIgorCisjCisjIE9wZXJhdGluZyBTeXN0ZW0KKyMKK0NUX0JBUkVfTUVUQUw9eQorQ1RfS0VSTkVMPSJiYXJlLW1ldGFsIgorQ1RfS0VSTkVMX2JhcmVfbWV0YWw9eQorIyBDVF9LRVJORUxfbGludXggaXMgbm90IHNldAorQ1RfS0VSTkVMX2JhcmVfbWV0YWxfQVZBSUxBQkxFPXkKK0NUX0tFUk5FTF9saW51eF9BVkFJTEFCTEU9eQorQ1RfS0VSTkVMX21pbmd3MzJfQVZBSUxBQkxFPXkKKworIworIyBDb21tb24ga2VybmVsIG9wdGlvbnMKKyMKKworIworIyBCaW5hcnkgdXRpbGl0aWVzCisjCitDVF9BUkNIX0JJTkZNVF9FTEY9eQorCisjCisjIEdOVSBiaW51dGlscworIworQ1RfQklOVVRJTFNfVl8yXzIxXzFhPXkKKyMgQ1RfQklOVVRJTFNfVl8yXzIwXzFhIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfVl8yXzE5XzFhIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfVl8yXzE4YSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WRVJTSU9OPSIyLjIxLjFhIgorQ1RfQklOVVRJTFNfMl8yMV9vcl9sYXRlcj15CitDVF9CSU5VVElMU18yXzIwX29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMTlfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfMl8xOF9vcl9sYXRlcj15CitDVF9CSU5VVElMU19IQVNfR09MRD15CitDVF9CSU5VVElMU19IQVNfUExVR0lOUz15CitDVF9CSU5VVElMU19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQklOVVRJTFNfTElOS0VSX0xEPXkKK0NUX0JJTlVUSUxTX0xJTktFUlNfTElTVD0ibGQiCitDVF9CSU5VVElMU19MSU5LRVJfREVGQVVMVD0iYmZkIgorIyBDVF9CSU5VVElMU19QTFVHSU5TIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorCisjCisjIEMgY29tcGlsZXIKKyMKK0NUX0NDPSJnY2MiCitDVF9DQ19WRVJTSU9OPSI0LjQuNiIKK0NUX0NDX2djYz15CitDVF9DQ19WXzRfNF82PXkKKyMgQ1RfQ0NfVl80XzRfNSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM180IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8yXzIgaXMgbm90IHNldAorQ1RfQ0NfR0NDXzRfMl9vcl9sYXRlcj15CitDVF9DQ19HQ0NfNF8zX29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzQ9eQorQ1RfQ0NfR0NDXzRfNF9vcl9sYXRlcj15CitDVF9DQ19HQ0NfSEFTX0dSQVBISVRFPXkKK0NUX0NDX0dDQ19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQ0NfR0NDX1VTRV9HTVBfTVBGUj15CitDVF9DQ19HQ0NfVVNFX1BQTF9DTE9PRz15CitDVF9DQ19TVVBQT1JUX0NYWD15CitDVF9DQ19TVVBQT1JUX0ZPUlRSQU49eQorQ1RfQ0NfU1VQUE9SVF9KQVZBPXkKK0NUX0NDX1NVUFBPUlRfQURBPXkKK0NUX0NDX1NVUFBPUlRfT0JKQz15CitDVF9DQ19TVVBQT1JUX09CSkNYWD15CisKKyMKKyMgQWRkaXRpb25hbCBzdXBwb3J0ZWQgbGFuZ3VhZ2VzOgorIworIyBDVF9DQ19MQU5HX0NYWCBpcyBub3Qgc2V0CisKKyMKKyMgZ2NjIG90aGVyIG9wdGlvbnMKKyMKK0NUX0NDX0VOQUJMRV9DWFhfRkxBR1M9IiIKK0NUX0NDX0NPUkVfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9DQ19TVEFUSUNfTElCU1REQ1hYPXkKKworIworIyBPcHRpbWlzYXRpb24gZmVhdHVyZXMKKyMKK0NUX0NDX0dDQ19VU0VfR1JBUEhJVEU9eQorCisjCisjIFNldHRpbmdzIGZvciBsaWJyYXJpZXMgcnVubmluZyBvbiB0YXJnZXQKKyMKKyMgQ1RfQ0NfR0NDX0VOQUJMRV9UQVJHRVRfT1BUU1BBQ0UgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCTVVERkxBUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJHT01QIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQlNTUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYy4gb2JzY3VyZSBvcHRpb25zLgorIworIyBDVF9DQ19HQ0NfRElTQUJMRV9QQ0ggaXMgbm90IHNldAorQ1RfQ0NfR0NDX0xEQkxfMTI4PW0KK0NUX0NDX0dDQ19IQVNfQVJDSF9PUFRJT05TPXkKKworIworIyBhcmNoaWN0ZWN0dXJlLXNwZWNpZmljIG9wdGlvbnMKKyMKK0NUX0NDX0dDQ19taXBzX2xsc2M9bQorQ1RfQ0NfR0NDX21pcHNfc3luY2k9bQorIyBDVF9DQ19HQ0NfbWlwc19wbHQgaXMgbm90IHNldAorCisjCisjIEMtbGlicmFyeQorIworQ1RfTElCQz0ibm9uZSIKKyMgQ1RfTElCQ19uZXdsaWIgaXMgbm90IHNldAorQ1RfTElCQ19ub25lPXkKK0NUX0xJQkNfZWdsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX2dsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX21pbmd3X0FWQUlMQUJMRT15CitDVF9MSUJDX25ld2xpYl9BVkFJTEFCTEU9eQorQ1RfTElCQ19ub25lX0FWQUlMQUJMRT15CitDVF9MSUJDX3VDbGliY19BVkFJTEFCTEU9eQorQ1RfVEhSRUFEUz0ibm9uZSIKKworIworIyBEZWJ1ZyBmYWNpbGl0aWVzCisjCisjIENUX0RFQlVHX2RtYWxsb2MgaXMgbm90IHNldAorIyBDVF9ERUJVR19kdW1hIGlzIG5vdCBzZXQKK0NUX0RFQlVHX2dkYj15CitDVF9HREJfQ1JPU1M9eQorIyBDVF9HREJfQ1JPU1NfU1RBVElDIGlzIG5vdCBzZXQKK0NUX0dEQl9DUk9TU19QWVRIT049eQorCisjCisjIEluIGJhcmUtbWV0YWwsIHlvdSdsbCBuZWVkIHRvICAgCisjCisKKyMKKyMgcHJvdmlkZSB5b3VyIG93biBnZGJzZXJ2ZXIgc3R1Yi4KKyMKKworIworIyBnZGIgdmVyc2lvbgorIworQ1RfR0RCX1ZfNl84YT15CitDVF9HREJfVkVSU0lPTj0iNi44YSIKKyMgQ1RfREVCVUdfbHRyYWNlIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfc3RyYWNlIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzCisjCitDVF9DT01QTElCU19ORUVERUQ9eQorQ1RfR01QX05FRURFRD15CitDVF9NUEZSX05FRURFRD15CitDVF9QUExfTkVFREVEPXkKK0NUX0NMT09HX05FRURFRD15CitDVF9DT01QTElCUz15CitDVF9HTVA9eQorQ1RfTVBGUj15CitDVF9QUEw9eQorQ1RfQ0xPT0c9eQorQ1RfR01QX1ZfNF8zXzI9eQorIyBDVF9HTVBfVl80XzNfMSBpcyBub3Qgc2V0CisjIENUX0dNUF9WXzRfM18wIGlzIG5vdCBzZXQKK0NUX0dNUF9WRVJTSU9OPSI0LjMuMiIKKyMgQ1RfTVBGUl9WXzNfMF8wIGlzIG5vdCBzZXQKK0NUX01QRlJfVl8yXzRfMj15CisjIENUX01QRlJfVl8yXzRfMSBpcyBub3Qgc2V0CisjIENUX01QRlJfVl8yXzRfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZFUlNJT049IjIuNC4yIgorQ1RfUFBMX1ZfMF8xMF8yPXkKK0NUX1BQTF9WRVJTSU9OPSIwLjEwLjIiCitDVF9DTE9PR19WXzBfMTVfMTA9eQorIyBDVF9DTE9PR19WXzBfMTVfOSBpcyBub3Qgc2V0CisjIENUX0NMT09HX1ZfMF8xNV84IGlzIG5vdCBzZXQKKyMgQ1RfQ0xPT0dfVl8wXzE1XzcgaXMgbm90IHNldAorIyBDVF9DTE9PR19WXzBfMTVfNiBpcyBub3Qgc2V0CitDVF9DTE9PR19WRVJTSU9OPSIwLjE1LjEwIgorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMgY29tbW9uIG9wdGlvbnMKKyMKKyMgQ1RfQ09NUExJQlNfQ0hFQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL21pcHNlbC1zZGUtZWxmL3JlcG9ydGVkLmJ5IGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL21pcHNlbC1zZGUtZWxmL3JlcG9ydGVkLmJ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZGI0YjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvbWlwc2VsLXNkZS1lbGYvcmVwb3J0ZWQuYnkKQEAgLTAsMCArMSwzIEBACityZXBvcnRlcl9uYW1lPSJLZXZpbiBDZXJuZWtlZSIKK3JlcG9ydGVyX3VybD0iaHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2Nyb3NzZ2NjLzIwMTEtMDkvbXNnMDAwMzcuaHRtbCIKK3JlcG9ydGVyX2NvbW1lbnQ9Ik1JUFMgU0RFLWNvbXBhdGlibGUgdG9vbGNoYWluIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL21pcHNlbC11bmtub3duLWxpbnV4LWdudS9jcm9zc3Rvb2wuY29uZmlnIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL21pcHNlbC11bmtub3duLWxpbnV4LWdudS9jcm9zc3Rvb2wuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMDNiYjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvbWlwc2VsLXVua25vd24tbGludXgtZ251L2Nyb3NzdG9vbC5jb25maWcKQEAgLTAsMCArMSw0MzkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgY3Jvc3N0b29sLU5HIGhnX2RlZmF1bHRAMjcyMV83YjY0NzQ2YjBhYjMgQ29uZmlndXJhdGlvbgorIyBTdW4gT2N0IDE2IDE3OjMxOjMxIDIwMTEKKyMKK0NUX0NPTkZJR1VSRV9oYXNfeHp1dGlscz15CitDVF9DT05GSUdVUkVfaGFzX2N2cz15CitDVF9DT05GSUdVUkVfaGFzX3N2bj15CitDVF9NT0RVTEVTPXkKKworIworIyBQYXRocyBhbmQgbWlzYyBvcHRpb25zCisjCisKKyMKKyMgY3Jvc3N0b29sLU5HIGJlaGF2aW9yCisjCisjIENUX09CU09MRVRFIGlzIG5vdCBzZXQKKyMgQ1RfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfQ1QgaXMgbm90IHNldAorCisjCisjIFBhdGhzCisjCitDVF9MT0NBTF9UQVJCQUxMU19ESVI9IiR7SE9NRX0vc3JjIgorQ1RfU0FWRV9UQVJCQUxMUz15CitDVF9XT1JLX0RJUj0iJHtDVF9UT1BfRElSfS8uYnVpbGQiCitDVF9QUkVGSVhfRElSPSIke0hPTUV9L3gtdG9vbHMvJHtDVF9UQVJHRVR9IgorQ1RfSU5TVEFMTF9ESVI9IiR7Q1RfUFJFRklYX0RJUn0iCitDVF9STV9SRl9QUkVGSVhfRElSPXkKK0NUX1JFTU9WRV9ET0NTPXkKK0NUX0lOU1RBTExfRElSX1JPPXkKK0NUX1NUUklQX0FMTF9UT09MQ0hBSU5fRVhFQ1VUQUJMRVM9eQorCisjCisjIERvd25sb2FkaW5nCisjCisjIENUX0ZPUkJJRF9ET1dOTE9BRCBpcyBub3Qgc2V0CisjIENUX0ZPUkNFX0RPV05MT0FEIGlzIG5vdCBzZXQKK0NUX0NPTk5FQ1RfVElNRU9VVD0xMAorIyBDVF9PTkxZX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfVVNFX01JUlJPUiBpcyBub3Qgc2V0CisKKyMKKyMgRXh0cmFjdGluZworIworIyBDVF9GT1JDRV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX09WRVJJREVfQ09ORklHX0dVRVNTX1NVQj15CisjIENUX09OTFlfRVhUUkFDVCBpcyBub3Qgc2V0CitDVF9QQVRDSF9CVU5ETEVEPXkKKyMgQ1RfUEFUQ0hfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9CVU5ETEVEX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTE9DQUxfQlVORExFRCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfRkFMTEJBQ0tfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9GQUxMQkFDS19CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTk9ORSBpcyBub3Qgc2V0CitDVF9QQVRDSF9PUkRFUj0iYnVuZGxlZCIKKworIworIyBCdWlsZCBiZWhhdmlvcgorIworQ1RfUEFSQUxMRUxfSk9CUz0wCitDVF9MT0FEPTAKK0NUX1VTRV9QSVBFUz15CitDVF9FWFRSQV9GTEFHU19GT1JfSE9TVD0iIgorIyBDVF9DT05GSUdfU0hFTExfU0ggaXMgbm90IHNldAorIyBDVF9DT05GSUdfU0hFTExfQVNIIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTF9CQVNIPXkKKyMgQ1RfQ09ORklHX1NIRUxMX0NVU1RPTSBpcyBub3Qgc2V0CitDVF9DT05GSUdfU0hFTEw9IiR7YmFzaH0iCisKKyMKKyMgTG9nZ2luZworIworIyBDVF9MT0dfRVJST1IgaXMgbm90IHNldAorIyBDVF9MT0dfV0FSTiBpcyBub3Qgc2V0CisjIENUX0xPR19JTkZPIGlzIG5vdCBzZXQKK0NUX0xPR19FWFRSQT15CisjIENUX0xPR19BTEwgaXMgbm90IHNldAorIyBDVF9MT0dfREVCVUcgaXMgbm90IHNldAorQ1RfTE9HX0xFVkVMX01BWD0iRVhUUkEiCisjIENUX0xPR19TRUVfVE9PTFNfV0FSTiBpcyBub3Qgc2V0CitDVF9MT0dfUFJPR1JFU1NfQkFSPXkKK0NUX0xPR19UT19GSUxFPXkKK0NUX0xPR19GSUxFX0NPTVBSRVNTPXkKKworIworIyBUYXJnZXQgb3B0aW9ucworIworQ1RfQVJDSD0ibWlwcyIKK0NUX0FSQ0hfU1VQUE9SVFNfQk9USF9FTkRJQU49eQorQ1RfQVJDSF9TVVBQT1JUU18zMj15CitDVF9BUkNIX1NVUFBPUlRfQVJDSD15CitDVF9BUkNIX1NVUFBPUlRfVFVORT15CitDVF9BUkNIX0RFRkFVTFRfQkU9eQorQ1RfQVJDSF9ERUZBVUxUXzMyPXkKK0NUX0FSQ0hfQVJDSD0ibWlwczEiCitDVF9BUkNIX1RVTkU9IiIKKyMgQ1RfQVJDSF9CRSBpcyBub3Qgc2V0CitDVF9BUkNIX0xFPXkKK0NUX0FSQ0hfMzI9eQorQ1RfQVJDSF9CSVRORVNTPTMyCisjIENUX0FSQ0hfRkxPQVRfSFcgaXMgbm90IHNldAorQ1RfQVJDSF9GTE9BVF9TVz15CitDVF9UQVJHRVRfQ0ZMQUdTPSIiCitDVF9UQVJHRVRfTERGTEFHUz0iIgorIyBDVF9BUkNIX2FscGhhIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9hcm0gaXMgbm90IHNldAorIyBDVF9BUkNIX2F2cjMyIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9ibGFja2ZpbiBpcyBub3Qgc2V0CitDVF9BUkNIX21pcHM9eQorIyBDVF9BUkNIX3Bvd2VycGMgaXMgbm90IHNldAorIyBDVF9BUkNIX3NoIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zcGFyYyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfeDg2IGlzIG5vdCBzZXQKK0NUX0FSQ0hfYWxwaGFfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXJtX0FWQUlMQUJMRT15CitDVF9BUkNIX2F2cjMyX0FWQUlMQUJMRT15CitDVF9BUkNIX2JsYWNrZmluX0FWQUlMQUJMRT15CitDVF9BUkNIX202OGtfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbWlwc19BVkFJTEFCTEU9eQorQ1RfQVJDSF9wb3dlcnBjX0FWQUlMQUJMRT15CitDVF9BUkNIX3MzOTBfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfc2hfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfc3BhcmNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfeDg2X0FWQUlMQUJMRT15CisKKyMKKyMgR2VuZXJpYyB0YXJnZXQgb3B0aW9ucworIworQ1RfQVJDSF9VU0VfTU1VPXkKKworIworIyBUYXJnZXQgb3B0aW1pc2F0aW9ucworIworCisjCisjIG1pcHMgb3RoZXIgb3B0aW9ucworIworQ1RfQVJDSF9taXBzX28zMj15CitDVF9BUkNIX21pcHNfQUJJPSIzMiIKKworIworIyBUb29sY2hhaW4gb3B0aW9ucworIworCisjCisjIEdlbmVyYWwgdG9vbGNoYWluIG9wdGlvbnMKKyMKK0NUX0ZPUkNFX1NZU1JPT1Q9eQorQ1RfVVNFX1NZU1JPT1Q9eQorQ1RfU1lTUk9PVF9OQU1FPSJzeXNyb290IgorQ1RfU1lTUk9PVF9ESVJfUFJFRklYPSIiCitDVF9UT09MQ0hBSU5fUEtHVkVSU0lPTj0iIgorQ1RfVE9PTENIQUlOX0JVR1VSTD0iIgorCisjCisjIFR1cGxlIGNvbXBsZXRpb24gYW5kIGFsaWFzaW5nCisjCitDVF9UQVJHRVRfVkVORE9SPSJ1bmtub3duIgorQ1RfVEFSR0VUX0FMSUFTX1NFRF9FWFBSPSIiCitDVF9UQVJHRVRfQUxJQVM9IiIKKworIworIyBUb29sY2hhaW4gdHlwZQorIworQ1RfQ1JPU1M9eQorQ1RfVE9PTENIQUlOX1RZUEU9ImNyb3NzIgorCisjCisjIEJ1aWxkIHN5c3RlbQorIworQ1RfQlVJTEQ9IiIKK0NUX0JVSUxEX1BSRUZJWD0iIgorQ1RfQlVJTERfU1VGRklYPSIiCisKKyMKKyMgT3BlcmF0aW5nIFN5c3RlbQorIworQ1RfS0VSTkVMX1NVUFBPUlRTX1NIQVJFRF9MSUJTPXkKK0NUX0tFUk5FTD0ibGludXgiCitDVF9LRVJORUxfVkVSU0lPTj0iMi42LjMxLjE0IgorIyBDVF9LRVJORUxfYmFyZV9tZXRhbCBpcyBub3Qgc2V0CitDVF9LRVJORUxfbGludXg9eQorQ1RfS0VSTkVMX2JhcmVfbWV0YWxfQVZBSUxBQkxFPXkKK0NUX0tFUk5FTF9saW51eF9BVkFJTEFCTEU9eQorIyBDVF9LRVJORUxfVl8zXzBfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8zIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzIgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zOV80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM4XzggaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzdfNiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNl80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM1XzE0IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM0XzEwIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzMzXzE5IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzMyXzQ2IGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9WXzJfNl8zMV8xND15CisjIENUX0tFUk5FTF9WXzJfNl8yN181OSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9MSU5VWF9DVVNUT00gaXMgbm90IHNldAorQ1RfS0VSTkVMX21pbmd3MzJfQVZBSUxBQkxFPXkKKworIworIyBDb21tb24ga2VybmVsIG9wdGlvbnMKKyMKK0NUX1NIQVJFRF9MSUJTPXkKKworIworIyBsaW51eCBvdGhlciBvcHRpb25zCisjCitDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzA9eQorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzEgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzIgaXMgbm90IHNldAorQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0VfTEVWRUw9MAorQ1RfS0VSTkVMX0xJTlVYX0lOU1RBTExfQ0hFQ0s9eQorCisjCisjIEJpbmFyeSB1dGlsaXRpZXMKKyMKK0NUX0FSQ0hfQklORk1UX0VMRj15CisKKyMKKyMgR05VIGJpbnV0aWxzCisjCisjIENUX0JJTlVUSUxTX1ZfMl8yMV8xYSBpcyBub3Qgc2V0CisjIENUX0JJTlVUSUxTX1ZfMl8yMF8xYSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WXzJfMTlfMWE9eQorIyBDVF9CSU5VVElMU19WXzJfMThhIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX1ZFUlNJT049IjIuMTkuMWEiCitDVF9CSU5VVElMU18yXzE5X29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMThfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0JJTlVUSUxTX0ZPUkNFX0xEX0JGRD15CitDVF9CSU5VVElMU19MSU5LRVJfTEQ9eQorQ1RfQklOVVRJTFNfTElOS0VSU19MSVNUPSJsZCIKK0NUX0JJTlVUSUxTX0xJTktFUl9ERUZBVUxUPSJiZmQiCitDVF9CSU5VVElMU19FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0JJTlVUSUxTX0ZPUl9UQVJHRVQ9eQorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVF9JQkVSVFk9eQorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVF9CRkQ9eQorCisjCisjIEMgY29tcGlsZXIKKyMKK0NUX0NDPSJnY2MiCitDVF9DQ19WRVJTSU9OPSI0LjMuMiIKK0NUX0NDX2djYz15CisjIENUX0NDX1ZfNF80XzYgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF81IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzMgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8yIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM182IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18zIGlzIG5vdCBzZXQKK0NUX0NDX1ZfNF8zXzI9eQorIyBDVF9DQ19WXzRfM18xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8yXzIgaXMgbm90IHNldAorQ1RfQ0NfR0NDXzRfMl9vcl9sYXRlcj15CitDVF9DQ19HQ0NfNF8zPXkKK0NUX0NDX0dDQ180XzNfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9DQ19HQ0NfVVNFX0dNUF9NUEZSPXkKKyMgQ1RfQ0NfTEFOR19GT1JUUkFOIGlzIG5vdCBzZXQKK0NUX0NDX1NVUFBPUlRfQ1hYPXkKK0NUX0NDX1NVUFBPUlRfRk9SVFJBTj15CitDVF9DQ19TVVBQT1JUX0pBVkE9eQorQ1RfQ0NfU1VQUE9SVF9BREE9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDPXkKK0NUX0NDX1NVUFBPUlRfT0JKQ1hYPXkKKworIworIyBBZGRpdGlvbmFsIHN1cHBvcnRlZCBsYW5ndWFnZXM6CisjCitDVF9DQ19MQU5HX0NYWD15CisjIENUX0NDX0xBTkdfSkFWQSBpcyBub3Qgc2V0CisKKyMKKyMgZ2NjIG90aGVyIG9wdGlvbnMKKyMKK0NUX0NDX0VOQUJMRV9DWFhfRkxBR1M9IiIKK0NUX0NDX0NPUkVfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9DQ19FWFRSQV9DT05GSUdfQVJSQVk9IiIKKworIworIyBPcHRpbWlzYXRpb24gZmVhdHVyZXMKKyMKKworIworIyBTZXR0aW5ncyBmb3IgbGlicmFyaWVzIHJ1bm5pbmcgb24gdGFyZ2V0CisjCitDVF9DQ19HQ0NfRU5BQkxFX1RBUkdFVF9PUFRTUEFDRT15CisjIENUX0NDX0dDQ19MSUJNVURGTEFQIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQkdPTVAgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCU1NQIGlzIG5vdCBzZXQKKworIworIyBNaXNjLiBvYnNjdXJlIG9wdGlvbnMuCisjCitDVF9DQ19DWEFfQVRFWElUPXkKKyMgQ1RfQ0NfR0NDX0RJU0FCTEVfUENIIGlzIG5vdCBzZXQKK0NUX0NDX0dDQ19TSkxKX0VYQ0VQVElPTlM9bQorQ1RfQ0NfR0NDX0xEQkxfMTI4PW0KK0NUX0NDX0dDQ19IQVNfQVJDSF9PUFRJT05TPXkKKworIworIyBhcmNoaWN0ZWN0dXJlLXNwZWNpZmljIG9wdGlvbnMKKyMKK0NUX0NDX0dDQ19taXBzX2xsc2M9bQorQ1RfQ0NfR0NDX21pcHNfc3luY2k9bQorIyBDVF9DQ19HQ0NfbWlwc19wbHQgaXMgbm90IHNldAorCisjCisjIEMtbGlicmFyeQorIworQ1RfTElCQz0iZ2xpYmMiCitDVF9MSUJDX1ZFUlNJT049IjIuOSIKKyMgQ1RfTElCQ19lZ2xpYmMgaXMgbm90IHNldAorQ1RfTElCQ19nbGliYz15CisjIENUX0xJQkNfdUNsaWJjIGlzIG5vdCBzZXQKK0NUX0xJQkNfZWdsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX2dsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX0dMSUJDX1RBUkJBTEw9eQorQ1RfTElCQ19HTElCQ19WXzJfOT15CisjIENUX0xJQkNfR0xJQkNfVl8yXzggaXMgbm90IHNldAorQ1RfTElCQ19taW5nd19BVkFJTEFCTEU9eQorQ1RfTElCQ19uZXdsaWJfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbm9uZV9BVkFJTEFCTEU9eQorQ1RfTElCQ191Q2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfU1VQUE9SVF9USFJFQURTX0FOWT15CitDVF9MSUJDX1NVUFBPUlRfTlBUTD15CitDVF9USFJFQURTPSJucHRsIgorCisjCisjIENvbW1vbiBDIGxpYnJhcnkgb3B0aW9ucworIworQ1RfVEhSRUFEU19OUFRMPXkKK0NUX0xJQkNfWExERD15CitDVF9MSUJDX0dMSUJDX01BWV9GT1JDRV9QT1JUUz15CitDVF9MSUJDX2dsaWJjX2ZhbWlsbHk9eQorQ1RfTElCQ19HTElCQ19FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0xJQkNfR0xJQkNfQ09ORklHUEFSTVM9IiIKK0NUX0xJQkNfR0xJQkNfRVhUUkFfQ0ZMQUdTPSIiCitDVF9MSUJDX0VYVFJBX0NDX0FSR1M9IiIKKyMgQ1RfTElCQ19ESVNBQkxFX1ZFUlNJT05JTkcgaXMgbm90IHNldAorQ1RfTElCQ19PTERFU1RfQUJJPSIiCisjIENUX0xJQkNfR0xJQkNfRk9SQ0VfVU5XSU5EIGlzIG5vdCBzZXQKK0NUX0xJQkNfR0xJQkNfVVNFX1BPUlRTPXkKK0NUX0xJQkNfQURET05TX0xJU1Q9IiIKKyMgQ1RfTElCQ19MT0NBTEVTIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9OT05FIGlzIG5vdCBzZXQKK0NUX0xJQkNfR0xJQkNfS0VSTkVMX1ZFUlNJT05fQVNfSEVBREVSUz15CisjIENUX0xJQkNfR0xJQkNfS0VSTkVMX1ZFUlNJT05fQ0hPU0VOIGlzIG5vdCBzZXQKK0NUX0xJQkNfR0xJQkNfTUlOX0tFUk5FTD0iMi42LjMxLjE0IgorCisjCisjIGdsaWJjIG90aGVyIG9wdGlvbnMKKyMKKworIworIyBXQVJOSU5HICEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjCisKKyMKKyMgICBGb3IgZ2xpYmMgPj0gMi44LCBpdCBjYW4gaGFwcGVuIHRoYXQgdGhlIHRhcmJhbGxzICAgIAorIworCisjCisjICAgZm9yIHRoZSBhZGRvbnMgYXJlIG5vdCBhdmFpbGFibGUgZm9yIGRvd25sb2FkLiAgICAgICAKKyMKKworIworIyAgIElmIHRoYXQgaGFwcGVucywgYmFkIGx1Y2suLi4gVHJ5IGEgcHJldmlvdXMgdmVyc2lvbiAgCisjCisKKyMKKyMgICBvciB0cnkgYWdhaW4gbGF0ZXIuLi4gOi0oICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIworCisjCisjIERlYnVnIGZhY2lsaXRpZXMKKyMKK0NUX0RFQlVHX2RtYWxsb2M9eQorQ1RfRE1BTExPQ19WXzVfNV8yPXkKK0NUX0RNQUxMT0NfVkVSU0lPTj0iNS41LjIiCitDVF9ERUJVR19kdW1hPXkKK0NUX0RVTUFfQT15CitDVF9EVU1BX1NPPXkKK0NUX0RVTUFfVl8yXzVfMTU9eQorQ1RfRFVNQV9WRVJTSU9OPSIyXzVfMTUiCitDVF9ERUJVR19nZGI9eQorQ1RfR0RCX0NST1NTPXkKKyMgQ1RfR0RCX0NST1NTX1NUQVRJQyBpcyBub3Qgc2V0CitDVF9HREJfQ1JPU1NfUFlUSE9OPXkKK0NUX0dEQl9OQVRJVkU9eQorIyBDVF9HREJfTkFUSVZFX1NUQVRJQyBpcyBub3Qgc2V0CitDVF9HREJfR0RCU0VSVkVSPXkKK0NUX0dEQl9HREJTRVJWRVJfU1RBVElDPXkKKworIworIyBnZGIgdmVyc2lvbgorIworQ1RfR0RCX1ZfNl84YT15CitDVF9HREJfVkVSU0lPTj0iNi44YSIKKyMgQ1RfREVCVUdfbHRyYWNlIGlzIG5vdCBzZXQKK0NUX0RFQlVHX3N0cmFjZT15CitDVF9TVFJBQ0VfVl80XzVfMTk9eQorIyBDVF9TVFJBQ0VfVl80XzVfMTggaXMgbm90IHNldAorQ1RfU1RSQUNFX1ZFUlNJT049IjQuNS4xOSIKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzCisjCitDVF9DT01QTElCU19ORUVERUQ9eQorQ1RfR01QX05FRURFRD15CitDVF9NUEZSX05FRURFRD15CitDVF9DT01QTElCUz15CitDVF9HTVA9eQorQ1RfTVBGUj15CitDVF9HTVBfVl80XzNfMj15CisjIENUX0dNUF9WXzRfM18xIGlzIG5vdCBzZXQKKyMgQ1RfR01QX1ZfNF8zXzAgaXMgbm90IHNldAorQ1RfR01QX1ZFUlNJT049IjQuMy4yIgorIyBDVF9NUEZSX1ZfM18wXzAgaXMgbm90IHNldAorQ1RfTVBGUl9WXzJfNF8yPXkKKyMgQ1RfTVBGUl9WXzJfNF8xIGlzIG5vdCBzZXQKKyMgQ1RfTVBGUl9WXzJfNF8wIGlzIG5vdCBzZXQKK0NUX01QRlJfVkVSU0lPTj0iMi40LjIiCisKKyMKKyMgQ29tcGFuaW9uIGxpYnJhcmllcyBjb21tb24gb3B0aW9ucworIworIyBDVF9DT01QTElCU19DSEVDSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvbWlwc2VsLXVua25vd24tbGludXgtZ251L3JlcG9ydGVkLmJ5IGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL21pcHNlbC11bmtub3duLWxpbnV4LWdudS9yZXBvcnRlZC5ieQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODdhOTE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL21pcHNlbC11bmtub3duLWxpbnV4LWdudS9yZXBvcnRlZC5ieQpAQCAtMCwwICsxLDMgQEAKK3JlcG9ydGVyX25hbWU9IkFsZXhhbmRlciBCSUdHQSIKK3JlcG9ydGVyX3VybD0iaHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2Nyb3NzZ2NjLzIwMDgtMDcvbXNnMDAwMDAuaHRtbCIKK3JlcG9ydGVyX2NvbW1lbnQ9IiIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9wb3dlcnBjLTQwNS1saW51eC1nbnUvY3Jvc3N0b29sLmNvbmZpZyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9wb3dlcnBjLTQwNS1saW51eC1nbnUvY3Jvc3N0b29sLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWZlMTdkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3Bvd2VycGMtNDA1LWxpbnV4LWdudS9jcm9zc3Rvb2wuY29uZmlnCkBAIC0wLDAgKzEsNDI3IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIGNyb3NzdG9vbC1ORyBoZ19kZWZhdWx0QDI3MjNfZDU2YmE2MDRiZTgwIENvbmZpZ3VyYXRpb24KKyMgU3VuIE9jdCAxNiAxODoxNDoyMiAyMDExCisjCitDVF9DT05GSUdVUkVfaGFzX3h6dXRpbHM9eQorQ1RfQ09ORklHVVJFX2hhc19jdnM9eQorQ1RfQ09ORklHVVJFX2hhc19zdm49eQorQ1RfTU9EVUxFUz15CisKKyMKKyMgUGF0aHMgYW5kIG1pc2Mgb3B0aW9ucworIworCisjCisjIGNyb3NzdG9vbC1ORyBiZWhhdmlvcgorIworIyBDVF9PQlNPTEVURSBpcyBub3Qgc2V0CisjIENUX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CisjIENUX0RFQlVHX0NUIGlzIG5vdCBzZXQKKworIworIyBQYXRocworIworQ1RfTE9DQUxfVEFSQkFMTFNfRElSPSIke0hPTUV9L3NyYyIKK0NUX1NBVkVfVEFSQkFMTFM9eQorQ1RfV09SS19ESVI9IiR7Q1RfVE9QX0RJUn0vLmJ1aWxkIgorQ1RfUFJFRklYX0RJUj0iJHtIT01FfS94LXRvb2xzLyR7Q1RfVEFSR0VUfSIKK0NUX0lOU1RBTExfRElSPSIke0NUX1BSRUZJWF9ESVJ9IgorQ1RfUk1fUkZfUFJFRklYX0RJUj15CitDVF9SRU1PVkVfRE9DUz15CitDVF9JTlNUQUxMX0RJUl9STz15CitDVF9TVFJJUF9BTExfVE9PTENIQUlOX0VYRUNVVEFCTEVTPXkKKworIworIyBEb3dubG9hZGluZworIworIyBDVF9GT1JCSURfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9GT1JDRV9ET1dOTE9BRCBpcyBub3Qgc2V0CitDVF9DT05ORUNUX1RJTUVPVVQ9MTAKKyMgQ1RfT05MWV9ET1dOTE9BRCBpcyBub3Qgc2V0CisjIENUX1VTRV9NSVJST1IgaXMgbm90IHNldAorCisjCisjIEV4dHJhY3RpbmcKKyMKKyMgQ1RfRk9SQ0VfRVhUUkFDVCBpcyBub3Qgc2V0CitDVF9PVkVSSURFX0NPTkZJR19HVUVTU19TVUI9eQorIyBDVF9PTkxZX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfUEFUQ0hfQlVORExFRD15CisjIENUX1BBVENIX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9CVU5ETEVEX0ZBTExCQUNLX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTE9DQUxfRkFMTEJBQ0tfQlVORExFRCBpcyBub3Qgc2V0CisjIENUX1BBVENIX05PTkUgaXMgbm90IHNldAorQ1RfUEFUQ0hfT1JERVI9ImJ1bmRsZWQiCisKKyMKKyMgQnVpbGQgYmVoYXZpb3IKKyMKK0NUX1BBUkFMTEVMX0pPQlM9MAorQ1RfTE9BRD0wCitDVF9VU0VfUElQRVM9eQorQ1RfRVhUUkFfRkxBR1NfRk9SX0hPU1Q9IiIKKyMgQ1RfQ09ORklHX1NIRUxMX1NIIGlzIG5vdCBzZXQKKyMgQ1RfQ09ORklHX1NIRUxMX0FTSCBpcyBub3Qgc2V0CitDVF9DT05GSUdfU0hFTExfQkFTSD15CisjIENUX0NPTkZJR19TSEVMTF9DVVNUT00gaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMPSIke2Jhc2h9IgorCisjCisjIExvZ2dpbmcKKyMKKyMgQ1RfTE9HX0VSUk9SIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX1dBUk4gaXMgbm90IHNldAorIyBDVF9MT0dfSU5GTyBpcyBub3Qgc2V0CitDVF9MT0dfRVhUUkE9eQorIyBDVF9MT0dfQUxMIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0RFQlVHIGlzIG5vdCBzZXQKK0NUX0xPR19MRVZFTF9NQVg9IkVYVFJBIgorIyBDVF9MT0dfU0VFX1RPT0xTX1dBUk4gaXMgbm90IHNldAorQ1RfTE9HX1BST0dSRVNTX0JBUj15CitDVF9MT0dfVE9fRklMRT15CitDVF9MT0dfRklMRV9DT01QUkVTUz15CisKKyMKKyMgVGFyZ2V0IG9wdGlvbnMKKyMKK0NUX0FSQ0g9InBvd2VycGMiCitDVF9BUkNIX1NVUFBPUlRTXzMyPXkKK0NUX0FSQ0hfU1VQUE9SVF9BQkk9eQorQ1RfQVJDSF9TVVBQT1JUX0NQVT15CitDVF9BUkNIX1NVUFBPUlRfVFVORT15CitDVF9BUkNIX0RFRkFVTFRfMzI9eQorQ1RfQVJDSF9BQkk9IiIKK0NUX0FSQ0hfQ1BVPSI0MDUiCitDVF9BUkNIX1RVTkU9IjQwNSIKK0NUX0FSQ0hfMzI9eQorQ1RfQVJDSF9CSVRORVNTPTMyCisjIENUX0FSQ0hfRkxPQVRfSFcgaXMgbm90IHNldAorQ1RfQVJDSF9GTE9BVF9TVz15CitDVF9UQVJHRVRfQ0ZMQUdTPSIiCitDVF9UQVJHRVRfTERGTEFHUz0iIgorIyBDVF9BUkNIX2FscGhhIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9hcm0gaXMgbm90IHNldAorIyBDVF9BUkNIX2F2cjMyIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9ibGFja2ZpbiBpcyBub3Qgc2V0CisjIENUX0FSQ0hfbWlwcyBpcyBub3Qgc2V0CitDVF9BUkNIX3Bvd2VycGM9eQorIyBDVF9BUkNIX3NoIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zcGFyYyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfeDg2IGlzIG5vdCBzZXQKK0NUX0FSQ0hfYWxwaGFfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXJtX0FWQUlMQUJMRT15CitDVF9BUkNIX2F2cjMyX0FWQUlMQUJMRT15CitDVF9BUkNIX2JsYWNrZmluX0FWQUlMQUJMRT15CitDVF9BUkNIX202OGtfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbWlwc19BVkFJTEFCTEU9eQorQ1RfQVJDSF9wb3dlcnBjX0FWQUlMQUJMRT15CitDVF9BUkNIX3MzOTBfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfc2hfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfc3BhcmNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfeDg2X0FWQUlMQUJMRT15CisKKyMKKyMgR2VuZXJpYyB0YXJnZXQgb3B0aW9ucworIworQ1RfQVJDSF9VU0VfTU1VPXkKKworIworIyBUYXJnZXQgb3B0aW1pc2F0aW9ucworIworCisjCisjIHBvd2VycGMgb3RoZXIgb3B0aW9ucworIworQ1RfQVJDSF9wb3dlcnBjX0FCST0iIgorQ1RfQVJDSF9wb3dlcnBjX0FCSV9ERUZBVUxUPXkKKyMgQ1RfQVJDSF9wb3dlcnBjX0FCSV9TUEUgaXMgbm90IHNldAorCisjCisjIFRvb2xjaGFpbiBvcHRpb25zCisjCisKKyMKKyMgR2VuZXJhbCB0b29sY2hhaW4gb3B0aW9ucworIworQ1RfRk9SQ0VfU1lTUk9PVD15CitDVF9VU0VfU1lTUk9PVD15CitDVF9TWVNST09UX05BTUU9InN5c3Jvb3QiCitDVF9TWVNST09UX0RJUl9QUkVGSVg9IiIKK0NUX1RPT0xDSEFJTl9QS0dWRVJTSU9OPSIiCitDVF9UT09MQ0hBSU5fQlVHVVJMPSIiCisKKyMKKyMgVHVwbGUgY29tcGxldGlvbiBhbmQgYWxpYXNpbmcKKyMKK0NUX1RBUkdFVF9WRU5ET1I9IjQwNSIKK0NUX1RBUkdFVF9BTElBU19TRURfRVhQUj0iIgorQ1RfVEFSR0VUX0FMSUFTPSIiCisKKyMKKyMgVG9vbGNoYWluIHR5cGUKKyMKK0NUX0NST1NTPXkKK0NUX1RPT0xDSEFJTl9UWVBFPSJjcm9zcyIKKworIworIyBCdWlsZCBzeXN0ZW0KKyMKK0NUX0JVSUxEPSIiCitDVF9CVUlMRF9QUkVGSVg9IiIKK0NUX0JVSUxEX1NVRkZJWD0iIgorCisjCisjIE9wZXJhdGluZyBTeXN0ZW0KKyMKK0NUX0tFUk5FTF9TVVBQT1JUU19TSEFSRURfTElCUz15CitDVF9LRVJORUw9ImxpbnV4IgorQ1RfS0VSTkVMX1ZFUlNJT049IjIuNi4zMS4xNCIKKyMgQ1RfS0VSTkVMX2JhcmVfbWV0YWwgaXMgbm90IHNldAorQ1RfS0VSTkVMX2xpbnV4PXkKK0NUX0tFUk5FTF9iYXJlX21ldGFsX0FWQUlMQUJMRT15CitDVF9LRVJORUxfbGludXhfQVZBSUxBQkxFPXkKKyMgQ1RfS0VSTkVMX1ZfM18wXzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMyBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8yIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzEgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzAgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzlfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zOF84IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM3XzYgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzZfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNV8xNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNF8xMCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zM18xOSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zMl80NiBpcyBub3Qgc2V0CitDVF9LRVJORUxfVl8yXzZfMzFfMTQ9eQorIyBDVF9LRVJORUxfVl8yXzZfMjdfNTkgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9taW5ndzMyX0FWQUlMQUJMRT15CisKKyMKKyMgQ29tbW9uIGtlcm5lbCBvcHRpb25zCisjCitDVF9TSEFSRURfTElCUz15CisKKyMKKyMgbGludXggb3RoZXIgb3B0aW9ucworIworQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8wPXkKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8xIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8yIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9MSU5VWF9WRVJCT1NFX0xFVkVMPTAKK0NUX0tFUk5FTF9MSU5VWF9JTlNUQUxMX0NIRUNLPXkKKworIworIyBCaW5hcnkgdXRpbGl0aWVzCisjCitDVF9BUkNIX0JJTkZNVF9FTEY9eQorCisjCisjIEdOVSBiaW51dGlscworIworIyBDVF9CSU5VVElMU19WXzJfMjFfMWEgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19WXzJfMjBfMWEgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVl8yXzE5XzFhPXkKKyMgQ1RfQklOVVRJTFNfVl8yXzE4YSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WRVJTSU9OPSIyLjE5LjFhIgorQ1RfQklOVVRJTFNfMl8xOV9vcl9sYXRlcj15CitDVF9CSU5VVElMU18yXzE4X29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9CSU5VVElMU19GT1JDRV9MRF9CRkQ9eQorQ1RfQklOVVRJTFNfTElOS0VSX0xEPXkKK0NUX0JJTlVUSUxTX0xJTktFUlNfTElTVD0ibGQiCitDVF9CSU5VVElMU19MSU5LRVJfREVGQVVMVD0iYmZkIgorQ1RfQklOVVRJTFNfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9CSU5VVElMU19GT1JfVEFSR0VUPXkKK0NUX0JJTlVUSUxTX0ZPUl9UQVJHRVRfSUJFUlRZPXkKK0NUX0JJTlVUSUxTX0ZPUl9UQVJHRVRfQkZEPXkKKworIworIyBDIGNvbXBpbGVyCisjCitDVF9DQz0iZ2NjIgorQ1RfQ0NfVkVSU0lPTj0iNC4zLjIiCitDVF9DQ19nY2M9eQorIyBDVF9DQ19WXzRfNF82IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM180IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMyBpcyBub3Qgc2V0CitDVF9DQ19WXzRfM18yPXkKKyMgQ1RfQ0NfVl80XzNfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8yXzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfMl8yIGlzIG5vdCBzZXQKK0NUX0NDX0dDQ180XzJfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDXzRfMz15CitDVF9DQ19HQ0NfNF8zX29yX2xhdGVyPXkKK0NUX0NDX0dDQ19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQ0NfR0NDX1VTRV9HTVBfTVBGUj15CitDVF9DQ19MQU5HX0pBVkFfVVNFX0VDSj15CitDVF9DQ19MQU5HX0ZPUlRSQU49eQorQ1RfQ0NfU1VQUE9SVF9DWFg9eQorQ1RfQ0NfU1VQUE9SVF9GT1JUUkFOPXkKK0NUX0NDX1NVUFBPUlRfSkFWQT15CitDVF9DQ19TVVBQT1JUX0FEQT15CitDVF9DQ19TVVBQT1JUX09CSkM9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDWFg9eQorCisjCisjIEFkZGl0aW9uYWwgc3VwcG9ydGVkIGxhbmd1YWdlczoKKyMKK0NUX0NDX0xBTkdfQ1hYPXkKK0NUX0NDX0xBTkdfSkFWQT15CisKKyMKKyMgZ2NjIG90aGVyIG9wdGlvbnMKKyMKK0NUX0NDX0VOQUJMRV9DWFhfRkxBR1M9IiIKK0NUX0NDX0NPUkVfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9DQ19FWFRSQV9DT05GSUdfQVJSQVk9IiIKKworIworIyBPcHRpbWlzYXRpb24gZmVhdHVyZXMKKyMKKworIworIyBTZXR0aW5ncyBmb3IgbGlicmFyaWVzIHJ1bm5pbmcgb24gdGFyZ2V0CisjCitDVF9DQ19HQ0NfRU5BQkxFX1RBUkdFVF9PUFRTUEFDRT15CisjIENUX0NDX0dDQ19MSUJNVURGTEFQIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQkdPTVAgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCU1NQIGlzIG5vdCBzZXQKKworIworIyBNaXNjLiBvYnNjdXJlIG9wdGlvbnMuCisjCitDVF9DQ19DWEFfQVRFWElUPXkKKyMgQ1RfQ0NfR0NDX0RJU0FCTEVfUENIIGlzIG5vdCBzZXQKK0NUX0NDX0dDQ19TSkxKX0VYQ0VQVElPTlM9bQorQ1RfQ0NfR0NDX0xEQkxfMTI4PW0KKworIworIyBDLWxpYnJhcnkKKyMKK0NUX0xJQkM9ImdsaWJjIgorQ1RfTElCQ19WRVJTSU9OPSIyLjkiCisjIENUX0xJQkNfZWdsaWJjIGlzIG5vdCBzZXQKK0NUX0xJQkNfZ2xpYmM9eQorIyBDVF9MSUJDX3VDbGliYyBpcyBub3Qgc2V0CitDVF9MSUJDX2VnbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19nbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19HTElCQ19UQVJCQUxMPXkKK0NUX0xJQkNfR0xJQkNfVl8yXzk9eQorIyBDVF9MSUJDX0dMSUJDX1ZfMl84IGlzIG5vdCBzZXQKK0NUX0xJQkNfbWluZ3dfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbmV3bGliX0FWQUlMQUJMRT15CitDVF9MSUJDX25vbmVfQVZBSUxBQkxFPXkKK0NUX0xJQkNfdUNsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX1NVUFBPUlRfVEhSRUFEU19BTlk9eQorQ1RfTElCQ19TVVBQT1JUX05QVEw9eQorQ1RfVEhSRUFEUz0ibnB0bCIKKworIworIyBDb21tb24gQyBsaWJyYXJ5IG9wdGlvbnMKKyMKK0NUX1RIUkVBRFNfTlBUTD15CitDVF9MSUJDX1hMREQ9eQorQ1RfTElCQ19nbGliY19mYW1pbGx5PXkKK0NUX0xJQkNfR0xJQkNfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9MSUJDX0dMSUJDX0NPTkZJR1BBUk1TPSIiCitDVF9MSUJDX0dMSUJDX0VYVFJBX0NGTEFHUz0iIgorQ1RfTElCQ19FWFRSQV9DQ19BUkdTPSIiCisjIENUX0xJQkNfRElTQUJMRV9WRVJTSU9OSU5HIGlzIG5vdCBzZXQKK0NUX0xJQkNfT0xERVNUX0FCST0iIgorIyBDVF9MSUJDX0dMSUJDX0ZPUkNFX1VOV0lORCBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX1VTRV9QT1JUUz15CitDVF9MSUJDX0FERE9OU19MSVNUPSIiCisjIENUX0xJQkNfTE9DQUxFUyBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfS0VSTkVMX1ZFUlNJT05fTk9ORSBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX0FTX0hFQURFUlM9eQorIyBDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX0NIT1NFTiBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX01JTl9LRVJORUw9IjIuNi4zMS4xNCIKKworIworIyBnbGliYyBvdGhlciBvcHRpb25zCisjCisKKyMKKyMgV0FSTklORyAhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIworCisjCisjICAgRm9yIGdsaWJjID49IDIuOCwgaXQgY2FuIGhhcHBlbiB0aGF0IHRoZSB0YXJiYWxscyAgICAKKyMKKworIworIyAgIGZvciB0aGUgYWRkb25zIGFyZSBub3QgYXZhaWxhYmxlIGZvciBkb3dubG9hZC4gICAgICAgCisjCisKKyMKKyMgICBJZiB0aGF0IGhhcHBlbnMsIGJhZCBsdWNrLi4uIFRyeSBhIHByZXZpb3VzIHZlcnNpb24gIAorIworCisjCisjICAgb3IgdHJ5IGFnYWluIGxhdGVyLi4uIDotKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyMKKworIworIyBEZWJ1ZyBmYWNpbGl0aWVzCisjCitDVF9ERUJVR19kbWFsbG9jPXkKK0NUX0RNQUxMT0NfVl81XzVfMj15CitDVF9ETUFMTE9DX1ZFUlNJT049IjUuNS4yIgorQ1RfREVCVUdfZHVtYT15CitDVF9EVU1BX0E9eQorQ1RfRFVNQV9TTz15CitDVF9EVU1BX1ZfMl81XzE1PXkKK0NUX0RVTUFfVkVSU0lPTj0iMl81XzE1IgorQ1RfREVCVUdfZ2RiPXkKK0NUX0dEQl9DUk9TUz15CisjIENUX0dEQl9DUk9TU19TVEFUSUMgaXMgbm90IHNldAorQ1RfR0RCX0NST1NTX1BZVEhPTj15CitDVF9HREJfTkFUSVZFPXkKKyMgQ1RfR0RCX05BVElWRV9TVEFUSUMgaXMgbm90IHNldAorQ1RfR0RCX0dEQlNFUlZFUj15CitDVF9HREJfR0RCU0VSVkVSX1NUQVRJQz15CisKKyMKKyMgZ2RiIHZlcnNpb24KKyMKK0NUX0dEQl9WXzZfOGE9eQorQ1RfR0RCX1ZFUlNJT049IjYuOGEiCisjIENUX0RFQlVHX2x0cmFjZSBpcyBub3Qgc2V0CisjIENUX0RFQlVHX3N0cmFjZSBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcGFuaW9uIGxpYnJhcmllcworIworQ1RfQ09NUExJQlNfTkVFREVEPXkKK0NUX0dNUF9ORUVERUQ9eQorQ1RfTVBGUl9ORUVERUQ9eQorQ1RfQ09NUExJQlM9eQorQ1RfR01QPXkKK0NUX01QRlI9eQorQ1RfR01QX1ZfNF8zXzI9eQorIyBDVF9HTVBfVl80XzNfMSBpcyBub3Qgc2V0CisjIENUX0dNUF9WXzRfM18wIGlzIG5vdCBzZXQKK0NUX0dNUF9WRVJTSU9OPSI0LjMuMiIKKyMgQ1RfTVBGUl9WXzNfMF8wIGlzIG5vdCBzZXQKK0NUX01QRlJfVl8yXzRfMj15CisjIENUX01QRlJfVl8yXzRfMSBpcyBub3Qgc2V0CisjIENUX01QRlJfVl8yXzRfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZFUlNJT049IjIuNC4yIgorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMgY29tbW9uIG9wdGlvbnMKKyMKKyMgQ1RfQ09NUExJQlNfQ0hFQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3Bvd2VycGMtNDA1LWxpbnV4LWdudS9yZXBvcnRlZC5ieSBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9wb3dlcnBjLTQwNS1saW51eC1nbnUvcmVwb3J0ZWQuYnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZmMzcxMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9wb3dlcnBjLTQwNS1saW51eC1nbnUvcmVwb3J0ZWQuYnkKQEAgLTAsMCArMSwzIEBACityZXBvcnRlcl9uYW1lPSJKdWxpZW4gRFVTU0VSIgorcmVwb3J0ZXJfdXJsPSJodHRwOi8vc291cmNld2FyZS5vcmcvbWwvY3Jvc3NnY2MvMjAwOC0xMC9tc2cwMDA1NC5odG1sIgorcmVwb3J0ZXJfY29tbWVudD0iU29mdC1mbG9hdCBmb3IgdGhlIDQwNSBQb3dlclBDIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3Bvd2VycGMtODYwLWxpbnV4LWdudS9jcm9zc3Rvb2wuY29uZmlnIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3Bvd2VycGMtODYwLWxpbnV4LWdudS9jcm9zc3Rvb2wuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YWUyNmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvcG93ZXJwYy04NjAtbGludXgtZ251L2Nyb3NzdG9vbC5jb25maWcKQEAgLTAsMCArMSw0MjMgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgY3Jvc3N0b29sLU5HIGhnX2RlZmF1bHRAMjcyM19kNTZiYTYwNGJlODAgQ29uZmlndXJhdGlvbgorIyBTdW4gT2N0IDE2IDE4OjE0OjUzIDIwMTEKKyMKK0NUX0NPTkZJR1VSRV9oYXNfeHp1dGlscz15CitDVF9DT05GSUdVUkVfaGFzX2N2cz15CitDVF9DT05GSUdVUkVfaGFzX3N2bj15CitDVF9NT0RVTEVTPXkKKworIworIyBQYXRocyBhbmQgbWlzYyBvcHRpb25zCisjCisKKyMKKyMgY3Jvc3N0b29sLU5HIGJlaGF2aW9yCisjCisjIENUX09CU09MRVRFIGlzIG5vdCBzZXQKKyMgQ1RfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfQ1QgaXMgbm90IHNldAorCisjCisjIFBhdGhzCisjCitDVF9MT0NBTF9UQVJCQUxMU19ESVI9IiR7SE9NRX0vc3JjIgorQ1RfU0FWRV9UQVJCQUxMUz15CitDVF9XT1JLX0RJUj0iJHtDVF9UT1BfRElSfS8uYnVpbGQiCitDVF9QUkVGSVhfRElSPSIke0hPTUV9L3gtdG9vbHMvJHtDVF9UQVJHRVR9IgorQ1RfSU5TVEFMTF9ESVI9IiR7Q1RfUFJFRklYX0RJUn0iCitDVF9STV9SRl9QUkVGSVhfRElSPXkKK0NUX1JFTU9WRV9ET0NTPXkKK0NUX0lOU1RBTExfRElSX1JPPXkKK0NUX1NUUklQX0FMTF9UT09MQ0hBSU5fRVhFQ1VUQUJMRVM9eQorCisjCisjIERvd25sb2FkaW5nCisjCisjIENUX0ZPUkJJRF9ET1dOTE9BRCBpcyBub3Qgc2V0CisjIENUX0ZPUkNFX0RPV05MT0FEIGlzIG5vdCBzZXQKK0NUX0NPTk5FQ1RfVElNRU9VVD0xMAorIyBDVF9PTkxZX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfVVNFX01JUlJPUiBpcyBub3Qgc2V0CisKKyMKKyMgRXh0cmFjdGluZworIworIyBDVF9GT1JDRV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX09WRVJJREVfQ09ORklHX0dVRVNTX1NVQj15CisjIENUX09OTFlfRVhUUkFDVCBpcyBub3Qgc2V0CitDVF9QQVRDSF9CVU5ETEVEPXkKKyMgQ1RfUEFUQ0hfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9CVU5ETEVEX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTE9DQUxfQlVORExFRCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfRkFMTEJBQ0tfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9GQUxMQkFDS19CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTk9ORSBpcyBub3Qgc2V0CitDVF9QQVRDSF9PUkRFUj0iYnVuZGxlZCIKKworIworIyBCdWlsZCBiZWhhdmlvcgorIworQ1RfUEFSQUxMRUxfSk9CUz0wCitDVF9MT0FEPTAKK0NUX1VTRV9QSVBFUz15CitDVF9FWFRSQV9GTEFHU19GT1JfSE9TVD0iIgorIyBDVF9DT05GSUdfU0hFTExfU0ggaXMgbm90IHNldAorIyBDVF9DT05GSUdfU0hFTExfQVNIIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTF9CQVNIPXkKKyMgQ1RfQ09ORklHX1NIRUxMX0NVU1RPTSBpcyBub3Qgc2V0CitDVF9DT05GSUdfU0hFTEw9IiR7YmFzaH0iCisKKyMKKyMgTG9nZ2luZworIworIyBDVF9MT0dfRVJST1IgaXMgbm90IHNldAorIyBDVF9MT0dfV0FSTiBpcyBub3Qgc2V0CisjIENUX0xPR19JTkZPIGlzIG5vdCBzZXQKK0NUX0xPR19FWFRSQT15CisjIENUX0xPR19BTEwgaXMgbm90IHNldAorIyBDVF9MT0dfREVCVUcgaXMgbm90IHNldAorQ1RfTE9HX0xFVkVMX01BWD0iRVhUUkEiCisjIENUX0xPR19TRUVfVE9PTFNfV0FSTiBpcyBub3Qgc2V0CitDVF9MT0dfUFJPR1JFU1NfQkFSPXkKK0NUX0xPR19UT19GSUxFPXkKK0NUX0xPR19GSUxFX0NPTVBSRVNTPXkKKworIworIyBUYXJnZXQgb3B0aW9ucworIworQ1RfQVJDSD0icG93ZXJwYyIKK0NUX0FSQ0hfU1VQUE9SVFNfMzI9eQorQ1RfQVJDSF9TVVBQT1JUX0FCST15CitDVF9BUkNIX1NVUFBPUlRfQ1BVPXkKK0NUX0FSQ0hfU1VQUE9SVF9UVU5FPXkKK0NUX0FSQ0hfREVGQVVMVF8zMj15CitDVF9BUkNIX0FCST0iIgorQ1RfQVJDSF9DUFU9Ijg2MCIKK0NUX0FSQ0hfVFVORT0iIgorQ1RfQVJDSF8zMj15CitDVF9BUkNIX0JJVE5FU1M9MzIKKyMgQ1RfQVJDSF9GTE9BVF9IVyBpcyBub3Qgc2V0CitDVF9BUkNIX0ZMT0FUX1NXPXkKK0NUX1RBUkdFVF9DRkxBR1M9IiIKK0NUX1RBUkdFVF9MREZMQUdTPSIiCisjIENUX0FSQ0hfYWxwaGEgaXMgbm90IHNldAorIyBDVF9BUkNIX2FybSBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYXZyMzIgaXMgbm90IHNldAorIyBDVF9BUkNIX2JsYWNrZmluIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9taXBzIGlzIG5vdCBzZXQKK0NUX0FSQ0hfcG93ZXJwYz15CisjIENUX0FSQ0hfc2ggaXMgbm90IHNldAorIyBDVF9BUkNIX3NwYXJjIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF94ODYgaXMgbm90IHNldAorQ1RfQVJDSF9hbHBoYV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hcm1fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXZyMzJfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYmxhY2tmaW5fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbTY4a19BVkFJTEFCTEU9eQorQ1RfQVJDSF9taXBzX0FWQUlMQUJMRT15CitDVF9BUkNIX3Bvd2VycGNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfczM5MF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zaF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zcGFyY19BVkFJTEFCTEU9eQorQ1RfQVJDSF94ODZfQVZBSUxBQkxFPXkKKworIworIyBHZW5lcmljIHRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIX1VTRV9NTVU9eQorCisjCisjIFRhcmdldCBvcHRpbWlzYXRpb25zCisjCisKKyMKKyMgcG93ZXJwYyBvdGhlciBvcHRpb25zCisjCitDVF9BUkNIX3Bvd2VycGNfQUJJPSIiCitDVF9BUkNIX3Bvd2VycGNfQUJJX0RFRkFVTFQ9eQorIyBDVF9BUkNIX3Bvd2VycGNfQUJJX1NQRSBpcyBub3Qgc2V0CisKKyMKKyMgVG9vbGNoYWluIG9wdGlvbnMKKyMKKworIworIyBHZW5lcmFsIHRvb2xjaGFpbiBvcHRpb25zCisjCitDVF9GT1JDRV9TWVNST09UPXkKK0NUX1VTRV9TWVNST09UPXkKK0NUX1NZU1JPT1RfTkFNRT0ic3lzcm9vdCIKK0NUX1NZU1JPT1RfRElSX1BSRUZJWD0iIgorQ1RfVE9PTENIQUlOX1BLR1ZFUlNJT049IiIKK0NUX1RPT0xDSEFJTl9CVUdVUkw9IiIKKworIworIyBUdXBsZSBjb21wbGV0aW9uIGFuZCBhbGlhc2luZworIworQ1RfVEFSR0VUX1ZFTkRPUj0iODYwIgorQ1RfVEFSR0VUX0FMSUFTX1NFRF9FWFBSPSIiCitDVF9UQVJHRVRfQUxJQVM9IiIKKworIworIyBUb29sY2hhaW4gdHlwZQorIworQ1RfQ1JPU1M9eQorQ1RfVE9PTENIQUlOX1RZUEU9ImNyb3NzIgorCisjCisjIEJ1aWxkIHN5c3RlbQorIworQ1RfQlVJTEQ9IiIKK0NUX0JVSUxEX1BSRUZJWD0iIgorQ1RfQlVJTERfU1VGRklYPSIiCisKKyMKKyMgT3BlcmF0aW5nIFN5c3RlbQorIworQ1RfS0VSTkVMX1NVUFBPUlRTX1NIQVJFRF9MSUJTPXkKK0NUX0tFUk5FTD0ibGludXgiCitDVF9LRVJORUxfVkVSU0lPTj0iMi42LjMxLjE0IgorIyBDVF9LRVJORUxfYmFyZV9tZXRhbCBpcyBub3Qgc2V0CitDVF9LRVJORUxfbGludXg9eQorQ1RfS0VSTkVMX2JhcmVfbWV0YWxfQVZBSUxBQkxFPXkKK0NUX0tFUk5FTF9saW51eF9BVkFJTEFCTEU9eQorIyBDVF9LRVJORUxfVl8zXzBfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8zIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzIgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zOV80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM4XzggaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzdfNiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNl80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM1XzE0IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM0XzEwIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzMzXzE5IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzMyXzQ2IGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9WXzJfNl8zMV8xND15CisjIENUX0tFUk5FTF9WXzJfNl8yN181OSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9MSU5VWF9DVVNUT00gaXMgbm90IHNldAorQ1RfS0VSTkVMX21pbmd3MzJfQVZBSUxBQkxFPXkKKworIworIyBDb21tb24ga2VybmVsIG9wdGlvbnMKKyMKK0NUX1NIQVJFRF9MSUJTPXkKKworIworIyBsaW51eCBvdGhlciBvcHRpb25zCisjCitDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzA9eQorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzEgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzIgaXMgbm90IHNldAorQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0VfTEVWRUw9MAorQ1RfS0VSTkVMX0xJTlVYX0lOU1RBTExfQ0hFQ0s9eQorCisjCisjIEJpbmFyeSB1dGlsaXRpZXMKKyMKK0NUX0FSQ0hfQklORk1UX0VMRj15CisKKyMKKyMgR05VIGJpbnV0aWxzCisjCisjIENUX0JJTlVUSUxTX1ZfMl8yMV8xYSBpcyBub3Qgc2V0CisjIENUX0JJTlVUSUxTX1ZfMl8yMF8xYSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WXzJfMTlfMWE9eQorIyBDVF9CSU5VVElMU19WXzJfMThhIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX1ZFUlNJT049IjIuMTkuMWEiCitDVF9CSU5VVElMU18yXzE5X29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMThfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0JJTlVUSUxTX0ZPUkNFX0xEX0JGRD15CitDVF9CSU5VVElMU19MSU5LRVJfTEQ9eQorQ1RfQklOVVRJTFNfTElOS0VSU19MSVNUPSJsZCIKK0NUX0JJTlVUSUxTX0xJTktFUl9ERUZBVUxUPSJiZmQiCitDVF9CSU5VVElMU19FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0JJTlVUSUxTX0ZPUl9UQVJHRVQ9eQorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVF9JQkVSVFk9eQorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVF9CRkQ9eQorCisjCisjIEMgY29tcGlsZXIKKyMKK0NUX0NDPSJnY2MiCitDVF9DQ19WRVJTSU9OPSI0LjMuMiIKK0NUX0NDX2djYz15CisjIENUX0NDX1ZfNF80XzYgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF81IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzMgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8yIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM182IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18zIGlzIG5vdCBzZXQKK0NUX0NDX1ZfNF8zXzI9eQorIyBDVF9DQ19WXzRfM18xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8yXzIgaXMgbm90IHNldAorQ1RfQ0NfR0NDXzRfMl9vcl9sYXRlcj15CitDVF9DQ19HQ0NfNF8zPXkKK0NUX0NDX0dDQ180XzNfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9DQ19HQ0NfVVNFX0dNUF9NUEZSPXkKK0NUX0NDX0xBTkdfRk9SVFJBTj15CitDVF9DQ19TVVBQT1JUX0NYWD15CitDVF9DQ19TVVBQT1JUX0ZPUlRSQU49eQorQ1RfQ0NfU1VQUE9SVF9KQVZBPXkKK0NUX0NDX1NVUFBPUlRfQURBPXkKK0NUX0NDX1NVUFBPUlRfT0JKQz15CitDVF9DQ19TVVBQT1JUX09CSkNYWD15CisKKyMKKyMgQWRkaXRpb25hbCBzdXBwb3J0ZWQgbGFuZ3VhZ2VzOgorIworQ1RfQ0NfTEFOR19DWFg9eQorIyBDVF9DQ19MQU5HX0pBVkEgaXMgbm90IHNldAorCisjCisjIGdjYyBvdGhlciBvcHRpb25zCisjCitDVF9DQ19FTkFCTEVfQ1hYX0ZMQUdTPSIiCitDVF9DQ19DT1JFX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfQ0NfRVhUUkFfQ09ORklHX0FSUkFZPSItLXdpdGgtY3B1PTg2MCAtLWVuYWJsZS1jeHgtZmxhZ3M9LW1jcHU9ODYwIC0td2l0aC1mbG9hdD1zb2Z0IC0tZW5hYmxlLWN4eC1mbGFncz0tbXNvZnQtZmxvYXQiCisKKyMKKyMgT3B0aW1pc2F0aW9uIGZlYXR1cmVzCisjCisKKyMKKyMgU2V0dGluZ3MgZm9yIGxpYnJhcmllcyBydW5uaW5nIG9uIHRhcmdldAorIworQ1RfQ0NfR0NDX0VOQUJMRV9UQVJHRVRfT1BUU1BBQ0U9eQorIyBDVF9DQ19HQ0NfTElCTVVERkxBUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJHT01QIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQlNTUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYy4gb2JzY3VyZSBvcHRpb25zLgorIworQ1RfQ0NfQ1hBX0FURVhJVD15CisjIENUX0NDX0dDQ19ESVNBQkxFX1BDSCBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfU0pMSl9FWENFUFRJT05TPW0KK0NUX0NDX0dDQ19MREJMXzEyOD1tCisKKyMKKyMgQy1saWJyYXJ5CisjCitDVF9MSUJDPSJnbGliYyIKK0NUX0xJQkNfVkVSU0lPTj0iMi45IgorIyBDVF9MSUJDX2VnbGliYyBpcyBub3Qgc2V0CitDVF9MSUJDX2dsaWJjPXkKKyMgQ1RfTElCQ191Q2xpYmMgaXMgbm90IHNldAorQ1RfTElCQ19lZ2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfZ2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfR0xJQkNfVEFSQkFMTD15CitDVF9MSUJDX0dMSUJDX1ZfMl85PXkKKyMgQ1RfTElCQ19HTElCQ19WXzJfOCBpcyBub3Qgc2V0CitDVF9MSUJDX21pbmd3X0FWQUlMQUJMRT15CitDVF9MSUJDX25ld2xpYl9BVkFJTEFCTEU9eQorQ1RfTElCQ19ub25lX0FWQUlMQUJMRT15CitDVF9MSUJDX3VDbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19TVVBQT1JUX1RIUkVBRFNfQU5ZPXkKK0NUX0xJQkNfU1VQUE9SVF9OUFRMPXkKK0NUX1RIUkVBRFM9Im5wdGwiCisKKyMKKyMgQ29tbW9uIEMgbGlicmFyeSBvcHRpb25zCisjCitDVF9USFJFQURTX05QVEw9eQorQ1RfTElCQ19YTEREPXkKK0NUX0xJQkNfZ2xpYmNfZmFtaWxseT15CitDVF9MSUJDX0dMSUJDX0VYVFJBX0NPTkZJR19BUlJBWT0iLS13aXRob3V0LWZwIgorQ1RfTElCQ19HTElCQ19DT05GSUdQQVJNUz0iIgorQ1RfTElCQ19HTElCQ19FWFRSQV9DRkxBR1M9IiIKK0NUX0xJQkNfRVhUUkFfQ0NfQVJHUz0iIgorIyBDVF9MSUJDX0RJU0FCTEVfVkVSU0lPTklORyBpcyBub3Qgc2V0CitDVF9MSUJDX09MREVTVF9BQkk9IiIKKyMgQ1RfTElCQ19HTElCQ19GT1JDRV9VTldJTkQgaXMgbm90IHNldAorQ1RfTElCQ19HTElCQ19VU0VfUE9SVFM9eQorQ1RfTElCQ19BRERPTlNfTElTVD0iIgorIyBDVF9MSUJDX0xPQ0FMRVMgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX05PTkUgaXMgbm90IHNldAorQ1RfTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9BU19IRUFERVJTPXkKKyMgQ1RfTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9DSE9TRU4gaXMgbm90IHNldAorQ1RfTElCQ19HTElCQ19NSU5fS0VSTkVMPSIyLjYuMzEuMTQiCisKKyMKKyMgZ2xpYmMgb3RoZXIgb3B0aW9ucworIworCisjCisjIFdBUk5JTkcgISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyMKKworIworIyAgIEZvciBnbGliYyA+PSAyLjgsIGl0IGNhbiBoYXBwZW4gdGhhdCB0aGUgdGFyYmFsbHMgICAgCisjCisKKyMKKyMgICBmb3IgdGhlIGFkZG9ucyBhcmUgbm90IGF2YWlsYWJsZSBmb3IgZG93bmxvYWQuICAgICAgIAorIworCisjCisjICAgSWYgdGhhdCBoYXBwZW5zLCBiYWQgbHVjay4uLiBUcnkgYSBwcmV2aW91cyB2ZXJzaW9uICAKKyMKKworIworIyAgIG9yIHRyeSBhZ2FpbiBsYXRlci4uLiA6LSggICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjCisKKyMKKyMgRGVidWcgZmFjaWxpdGllcworIworIyBDVF9ERUJVR19kbWFsbG9jIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfZHVtYSBpcyBub3Qgc2V0CitDVF9ERUJVR19nZGI9eQorQ1RfR0RCX0NST1NTPXkKKyMgQ1RfR0RCX0NST1NTX1NUQVRJQyBpcyBub3Qgc2V0CitDVF9HREJfQ1JPU1NfUFlUSE9OPXkKK0NUX0dEQl9OQVRJVkU9eQorIyBDVF9HREJfTkFUSVZFX1NUQVRJQyBpcyBub3Qgc2V0CitDVF9HREJfR0RCU0VSVkVSPXkKKyMgQ1RfR0RCX0dEQlNFUlZFUl9TVEFUSUMgaXMgbm90IHNldAorCisjCisjIGdkYiB2ZXJzaW9uCisjCitDVF9HREJfVl82XzhhPXkKK0NUX0dEQl9WRVJTSU9OPSI2LjhhIgorIyBDVF9ERUJVR19sdHJhY2UgaXMgbm90IHNldAorQ1RfREVCVUdfc3RyYWNlPXkKK0NUX1NUUkFDRV9WXzRfNV8xOT15CisjIENUX1NUUkFDRV9WXzRfNV8xOCBpcyBub3Qgc2V0CitDVF9TVFJBQ0VfVkVSU0lPTj0iNC41LjE5IgorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMKKyMKK0NUX0NPTVBMSUJTX05FRURFRD15CitDVF9HTVBfTkVFREVEPXkKK0NUX01QRlJfTkVFREVEPXkKK0NUX0NPTVBMSUJTPXkKK0NUX0dNUD15CitDVF9NUEZSPXkKK0NUX0dNUF9WXzRfM18yPXkKKyMgQ1RfR01QX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9HTVBfVl80XzNfMCBpcyBub3Qgc2V0CitDVF9HTVBfVkVSU0lPTj0iNC4zLjIiCisjIENUX01QRlJfVl8zXzBfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZfMl80XzI9eQorIyBDVF9NUEZSX1ZfMl80XzEgaXMgbm90IHNldAorIyBDVF9NUEZSX1ZfMl80XzAgaXMgbm90IHNldAorQ1RfTVBGUl9WRVJTSU9OPSIyLjQuMiIKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzIGNvbW1vbiBvcHRpb25zCisjCisjIENUX0NPTVBMSUJTX0NIRUNLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9wb3dlcnBjLTg2MC1saW51eC1nbnUvcmVwb3J0ZWQuYnkgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvcG93ZXJwYy04NjAtbGludXgtZ251L3JlcG9ydGVkLmJ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NDg0NzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvcG93ZXJwYy04NjAtbGludXgtZ251L3JlcG9ydGVkLmJ5CkBAIC0wLDAgKzEsMyBAQAorcmVwb3J0ZXJfbmFtZT0iTnllIExpdSIKK3JlcG9ydGVyX3VybD0iaHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2Nyb3NzZ2NjLzIwMDgtMTAvbXNnMDAwNDYuaHRtbCIKK3JlcG9ydGVyX2NvbW1lbnQ9IiIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9wb3dlcnBjLWUzMDBjMy1saW51eC1nbnUvY3Jvc3N0b29sLmNvbmZpZyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9wb3dlcnBjLWUzMDBjMy1saW51eC1nbnUvY3Jvc3N0b29sLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDc1ODMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3Bvd2VycGMtZTMwMGMzLWxpbnV4LWdudS9jcm9zc3Rvb2wuY29uZmlnCkBAIC0wLDAgKzEsNTA3IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIGNyb3NzdG9vbC1ORyBoZ19kZWZhdWx0QDI3MjNfZDU2YmE2MDRiZTgwIENvbmZpZ3VyYXRpb24KKyMgU3VuIE9jdCAxNiAxODoxNToxOSAyMDExCisjCitDVF9DT05GSUdVUkVfaGFzX3h6dXRpbHM9eQorQ1RfQ09ORklHVVJFX2hhc19jdnM9eQorQ1RfQ09ORklHVVJFX2hhc19zdm49eQorQ1RfTU9EVUxFUz15CisKKyMKKyMgUGF0aHMgYW5kIG1pc2Mgb3B0aW9ucworIworCisjCisjIGNyb3NzdG9vbC1ORyBiZWhhdmlvcgorIworIyBDVF9PQlNPTEVURSBpcyBub3Qgc2V0CitDVF9FWFBFUklNRU5UQUw9eQorIyBDVF9ERUJVR19DVCBpcyBub3Qgc2V0CisKKyMKKyMgUGF0aHMKKyMKK0NUX0xPQ0FMX1RBUkJBTExTX0RJUj0iJHtIT01FfS9zcmMiCitDVF9TQVZFX1RBUkJBTExTPXkKK0NUX1dPUktfRElSPSIke0NUX1RPUF9ESVJ9Ly5idWlsZCIKK0NUX1BSRUZJWF9ESVI9IiR7SE9NRX0veC10b29scy8ke0NUX1RBUkdFVH0iCitDVF9JTlNUQUxMX0RJUj0iJHtDVF9QUkVGSVhfRElSfSIKK0NUX1JNX1JGX1BSRUZJWF9ESVI9eQorQ1RfUkVNT1ZFX0RPQ1M9eQorQ1RfSU5TVEFMTF9ESVJfUk89eQorQ1RfU1RSSVBfQUxMX1RPT0xDSEFJTl9FWEVDVVRBQkxFUz15CisKKyMKKyMgRG93bmxvYWRpbmcKKyMKKyMgQ1RfRk9SQklEX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfRk9SQ0VfRE9XTkxPQUQgaXMgbm90IHNldAorQ1RfQ09OTkVDVF9USU1FT1VUPTEwCisjIENUX09OTFlfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9VU0VfTUlSUk9SIGlzIG5vdCBzZXQKKworIworIyBFeHRyYWN0aW5nCisjCisjIENUX0ZPUkNFX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfT1ZFUklERV9DT05GSUdfR1VFU1NfU1VCPXkKKyMgQ1RfT05MWV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX1BBVENIX0JVTkRMRUQ9eQorIyBDVF9QQVRDSF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9GQUxMQkFDS19MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0ZBTExCQUNLX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9OT05FIGlzIG5vdCBzZXQKK0NUX1BBVENIX09SREVSPSJidW5kbGVkIgorCisjCisjIEJ1aWxkIGJlaGF2aW9yCisjCitDVF9QQVJBTExFTF9KT0JTPTAKK0NUX0xPQUQ9MAorQ1RfVVNFX1BJUEVTPXkKK0NUX0VYVFJBX0ZMQUdTX0ZPUl9IT1NUPSIiCisjIENUX0NPTkZJR19TSEVMTF9TSCBpcyBub3Qgc2V0CisjIENUX0NPTkZJR19TSEVMTF9BU0ggaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMX0JBU0g9eQorIyBDVF9DT05GSUdfU0hFTExfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTD0iJHtiYXNofSIKKworIworIyBMb2dnaW5nCisjCisjIENUX0xPR19FUlJPUiBpcyBub3Qgc2V0CisjIENUX0xPR19XQVJOIGlzIG5vdCBzZXQKK0NUX0xPR19JTkZPPXkKKyMgQ1RfTE9HX0VYVFJBIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0FMTCBpcyBub3Qgc2V0CisjIENUX0xPR19ERUJVRyBpcyBub3Qgc2V0CitDVF9MT0dfTEVWRUxfTUFYPSJJTkZPIgorIyBDVF9MT0dfU0VFX1RPT0xTX1dBUk4gaXMgbm90IHNldAorQ1RfTE9HX1BST0dSRVNTX0JBUj15CitDVF9MT0dfVE9fRklMRT15CitDVF9MT0dfRklMRV9DT01QUkVTUz15CisKKyMKKyMgVGFyZ2V0IG9wdGlvbnMKKyMKK0NUX0FSQ0g9InBvd2VycGMiCitDVF9BUkNIX1NVUFBPUlRTXzMyPXkKK0NUX0FSQ0hfU1VQUE9SVFNfNjQ9eQorQ1RfQVJDSF9TVVBQT1JUX0FCST15CitDVF9BUkNIX1NVUFBPUlRfQ1BVPXkKK0NUX0FSQ0hfU1VQUE9SVF9UVU5FPXkKK0NUX0FSQ0hfREVGQVVMVF8zMj15CitDVF9BUkNIX0FCST0iIgorQ1RfQVJDSF9DUFU9ImUzMDBjMyIKK0NUX0FSQ0hfVFVORT0iZTMwMGMzIgorQ1RfQVJDSF8zMj15CisjIENUX0FSQ0hfNjQgaXMgbm90IHNldAorQ1RfQVJDSF9CSVRORVNTPTMyCitDVF9BUkNIX0ZMT0FUX0hXPXkKKyMgQ1RfQVJDSF9GTE9BVF9TVyBpcyBub3Qgc2V0CitDVF9UQVJHRVRfQ0ZMQUdTPSIiCitDVF9UQVJHRVRfTERGTEFHUz0iIgorIyBDVF9BUkNIX2FscGhhIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9hcm0gaXMgbm90IHNldAorIyBDVF9BUkNIX2F2cjMyIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9ibGFja2ZpbiBpcyBub3Qgc2V0CisjIENUX0FSQ0hfbTY4ayBpcyBub3Qgc2V0CisjIENUX0FSQ0hfbWlwcyBpcyBub3Qgc2V0CitDVF9BUkNIX3Bvd2VycGM9eQorIyBDVF9BUkNIX3MzOTAgaXMgbm90IHNldAorIyBDVF9BUkNIX3NoIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zcGFyYyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfeDg2IGlzIG5vdCBzZXQKK0NUX0FSQ0hfYWxwaGFfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXJtX0FWQUlMQUJMRT15CitDVF9BUkNIX2F2cjMyX0FWQUlMQUJMRT15CitDVF9BUkNIX2JsYWNrZmluX0FWQUlMQUJMRT15CitDVF9BUkNIX202OGtfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbWlwc19BVkFJTEFCTEU9eQorQ1RfQVJDSF9wb3dlcnBjX0FWQUlMQUJMRT15CitDVF9BUkNIX3MzOTBfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfc2hfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfc3BhcmNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfeDg2X0FWQUlMQUJMRT15CisKKyMKKyMgR2VuZXJpYyB0YXJnZXQgb3B0aW9ucworIworQ1RfQVJDSF9VU0VfTU1VPXkKKworIworIyBUYXJnZXQgb3B0aW1pc2F0aW9ucworIworCisjCisjIHBvd2VycGMgb3RoZXIgb3B0aW9ucworIworQ1RfQVJDSF9wb3dlcnBjX0FCST0iIgorQ1RfQVJDSF9wb3dlcnBjX0FCSV9ERUZBVUxUPXkKKyMgQ1RfQVJDSF9wb3dlcnBjX0FCSV9TUEUgaXMgbm90IHNldAorCisjCisjIFRvb2xjaGFpbiBvcHRpb25zCisjCisKKyMKKyMgR2VuZXJhbCB0b29sY2hhaW4gb3B0aW9ucworIworQ1RfRk9SQ0VfU1lTUk9PVD15CitDVF9VU0VfU1lTUk9PVD15CitDVF9TWVNST09UX05BTUU9InN5c3Jvb3QiCitDVF9TWVNST09UX0RJUl9QUkVGSVg9IiIKK0NUX1dBTlRTX1NUQVRJQ19MSU5LPXkKKyMgQ1RfU1RBVElDX1RPT0xDSEFJTiBpcyBub3Qgc2V0CitDVF9UT09MQ0hBSU5fUEtHVkVSU0lPTj0iIgorQ1RfVE9PTENIQUlOX0JVR1VSTD0iIgorCisjCisjIFR1cGxlIGNvbXBsZXRpb24gYW5kIGFsaWFzaW5nCisjCitDVF9UQVJHRVRfVkVORE9SPSJlMzAwYzMiCitDVF9UQVJHRVRfQUxJQVNfU0VEX0VYUFI9IiIKK0NUX1RBUkdFVF9BTElBUz0iIgorCisjCisjIFRvb2xjaGFpbiB0eXBlCisjCisjIENUX05BVElWRSBpcyBub3Qgc2V0CitDVF9DUk9TUz15CisjIENUX0NST1NTX05BVElWRSBpcyBub3Qgc2V0CisjIENUX0NBTkFESUFOIGlzIG5vdCBzZXQKK0NUX1RPT0xDSEFJTl9UWVBFPSJjcm9zcyIKKworIworIyBCdWlsZCBzeXN0ZW0KKyMKK0NUX0JVSUxEPSIiCitDVF9CVUlMRF9QUkVGSVg9IiIKK0NUX0JVSUxEX1NVRkZJWD0iIgorCisjCisjIE9wZXJhdGluZyBTeXN0ZW0KKyMKK0NUX0tFUk5FTF9TVVBQT1JUU19TSEFSRURfTElCUz15CitDVF9LRVJORUw9ImxpbnV4IgorQ1RfS0VSTkVMX1ZFUlNJT049IjIuNi4zNi40IgorIyBDVF9LRVJORUxfYmFyZV9tZXRhbCBpcyBub3Qgc2V0CitDVF9LRVJORUxfbGludXg9eQorQ1RfS0VSTkVMX2JhcmVfbWV0YWxfQVZBSUxBQkxFPXkKK0NUX0tFUk5FTF9saW51eF9BVkFJTEFCTEU9eQorIyBDVF9LRVJORUxfVl8zXzBfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8zIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzIgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zOV80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM4XzggaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzdfNiBpcyBub3Qgc2V0CitDVF9LRVJORUxfVl8yXzZfMzZfND15CisjIENUX0tFUk5FTF9WXzJfNl8zNV8xNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNF8xMCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zM18xOSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zMl80NiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zMV8xNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8yN181OSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9MSU5VWF9DVVNUT00gaXMgbm90IHNldAorQ1RfS0VSTkVMX21pbmd3MzJfQVZBSUxBQkxFPXkKKworIworIyBDb21tb24ga2VybmVsIG9wdGlvbnMKKyMKK0NUX1NIQVJFRF9MSUJTPXkKKworIworIyBsaW51eCBvdGhlciBvcHRpb25zCisjCitDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzA9eQorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzEgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzIgaXMgbm90IHNldAorQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0VfTEVWRUw9MAorQ1RfS0VSTkVMX0xJTlVYX0lOU1RBTExfQ0hFQ0s9eQorCisjCisjIEJpbmFyeSB1dGlsaXRpZXMKKyMKK0NUX0FSQ0hfQklORk1UX0VMRj15CisKKyMKKyMgR05VIGJpbnV0aWxzCisjCisjIENUX0JJTlVUSUxTX1ZfMl8yMV81MyBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WXzJfMjFfMWE9eQorIyBDVF9CSU5VVElMU19WXzJfMjBfMWEgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19WXzJfMTlfMWEgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19WXzJfMThhIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX1ZFUlNJT049IjIuMjEuMWEiCitDVF9CSU5VVElMU18yXzIxX29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMjBfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfMl8xOV9vcl9sYXRlcj15CitDVF9CSU5VVElMU18yXzE4X29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTX0hBU19HT0xEPXkKK0NUX0JJTlVUSUxTX0hBU19QTFVHSU5TPXkKK0NUX0JJTlVUSUxTX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9CSU5VVElMU19GT1JDRV9MRF9CRkQ9eQorQ1RfQklOVVRJTFNfTElOS0VSX0xEPXkKK0NUX0JJTlVUSUxTX0xJTktFUlNfTElTVD0ibGQiCitDVF9CSU5VVElMU19MSU5LRVJfREVGQVVMVD0iYmZkIgorIyBDVF9CSU5VVElMU19QTFVHSU5TIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVD15CitDVF9CSU5VVElMU19GT1JfVEFSR0VUX0lCRVJUWT15CitDVF9CSU5VVElMU19GT1JfVEFSR0VUX0JGRD15CisKKyMKKyMgQyBjb21waWxlcgorIworQ1RfQ0M9ImdjYyIKK0NUX0NDX1ZFUlNJT049IjQuNS4yIgorQ1RfQ0NfZ2NjPXkKKyMgQ1RfQ0NfR0NDX1NIT1dfTElOQVJPIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzZfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF82XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8zIGlzIG5vdCBzZXQKK0NUX0NDX1ZfNF81XzI9eQorIyBDVF9DQ19WXzRfNV8xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzYgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF81IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzMgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8yIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM182IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfMl80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfMiBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfNF8yX29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzNfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDXzRfNF9vcl9sYXRlcj15CitDVF9DQ19HQ0NfNF81PXkKK0NUX0NDX0dDQ180XzVfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDX0hBU19HUkFQSElURT15CitDVF9DQ19HQ0NfSEFTX0xUTz15CitDVF9DQ19HQ0NfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0NDX0dDQ19IQVNfQlVJTERfSUQ9eQorQ1RfQ0NfR0NDX1VTRV9HTVBfTVBGUj15CitDVF9DQ19HQ0NfVVNFX1BQTF9DTE9PRz15CitDVF9DQ19HQ0NfVVNFX01QQz15CitDVF9DQ19HQ0NfVVNFX0xJQkVMRj15CisjIENUX0NDX0xBTkdfRk9SVFJBTiBpcyBub3Qgc2V0CitDVF9DQ19TVVBQT1JUX0NYWD15CitDVF9DQ19TVVBQT1JUX0ZPUlRSQU49eQorQ1RfQ0NfU1VQUE9SVF9KQVZBPXkKK0NUX0NDX1NVUFBPUlRfQURBPXkKK0NUX0NDX1NVUFBPUlRfT0JKQz15CitDVF9DQ19TVVBQT1JUX09CSkNYWD15CisKKyMKKyMgQWRkaXRpb25hbCBzdXBwb3J0ZWQgbGFuZ3VhZ2VzOgorIworQ1RfQ0NfTEFOR19DWFg9eQorIyBDVF9DQ19MQU5HX0pBVkEgaXMgbm90IHNldAorIyBDVF9DQ19MQU5HX0FEQSBpcyBub3Qgc2V0CisjIENUX0NDX0xBTkdfT0JKQyBpcyBub3Qgc2V0CisjIENUX0NDX0xBTkdfT0JKQ1hYIGlzIG5vdCBzZXQKK0NUX0NDX0xBTkdfT1RIRVJTPSIiCisKKyMKKyMgZ2NjIG90aGVyIG9wdGlvbnMKKyMKK0NUX0NDX0VOQUJMRV9DWFhfRkxBR1M9IiIKK0NUX0NDX0NPUkVfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9DQ19FWFRSQV9DT05GSUdfQVJSQVk9Ii0td2l0aC1sb25nLWRvdWJsZS0xMjgiCitDVF9DQ19TVEFUSUNfTElCU1REQ1hYPXkKKworIworIyBPcHRpbWlzYXRpb24gZmVhdHVyZXMKKyMKK0NUX0NDX0dDQ19VU0VfR1JBUEhJVEU9eQorQ1RfQ0NfR0NDX1VTRV9MVE89eQorCisjCisjIFNldHRpbmdzIGZvciBsaWJyYXJpZXMgcnVubmluZyBvbiB0YXJnZXQKKyMKKyMgQ1RfQ0NfR0NDX0VOQUJMRV9UQVJHRVRfT1BUU1BBQ0UgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCTVVERkxBUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJHT01QIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQlNTUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYy4gb2JzY3VyZSBvcHRpb25zLgorIworQ1RfQ0NfQ1hBX0FURVhJVD15CisjIENUX0NDX0dDQ19ESVNBQkxFX1BDSCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19TSkxKX0VYQ0VQVElPTlMgaXMgbm90IHNldAorQ1RfQ0NfR0NDX0xEQkxfMTI4PW0KKyMgQ1RfQ0NfR0NDX0JVSUxEX0lEIGlzIG5vdCBzZXQKKworIworIyBDLWxpYnJhcnkKKyMKK0NUX0xJQkM9ImVnbGliYyIKK0NUX0xJQkNfVkVSU0lPTj0iMl8xMiIKK0NUX0xJQkNfZWdsaWJjPXkKKyMgQ1RfTElCQ19nbGliYyBpcyBub3Qgc2V0CisjIENUX0xJQkNfdUNsaWJjIGlzIG5vdCBzZXQKK0NUX0xJQkNfZWdsaWJjX0FWQUlMQUJMRT15CisjIENUX0xJQkNfRUdMSUJDX1ZfMl8xNCBpcyBub3Qgc2V0CisjIENUX0xJQkNfRUdMSUJDX1ZfMl8xMyBpcyBub3Qgc2V0CitDVF9MSUJDX0VHTElCQ19WXzJfMTI9eQorIyBDVF9MSUJDX0VHTElCQ19WXzJfMTEgaXMgbm90IHNldAorIyBDVF9MSUJDX0VHTElCQ19WXzJfMTAgaXMgbm90IHNldAorIyBDVF9MSUJDX0VHTElCQ19WXzJfOSBpcyBub3Qgc2V0CisjIENUX0xJQkNfRUdMSUJDX1ZfVFJVTksgaXMgbm90IHNldAorQ1RfTElCQ19FR0xJQkNfMl8xMl9vcl9sYXRlcj15CitDVF9MSUJDX0VHTElCQ18yXzExX29yX2xhdGVyPXkKK0NUX0xJQkNfRUdMSUJDXzJfMTBfb3JfbGF0ZXI9eQorQ1RfTElCQ19FR0xJQkNfMl85X29yX2xhdGVyPXkKK0NUX0xJQkNfRUdMSUJDX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9FR0xJQkNfUkVWSVNJT049IkhFQUQiCisjIENUX0VHTElCQ19IVFRQIGlzIG5vdCBzZXQKKyMgQ1RfRUdMSUJDX0NIRUNLT1VUIGlzIG5vdCBzZXQKKyMgQ1RfRUdMSUJDX09QVF9TSVpFIGlzIG5vdCBzZXQKKyMgQ1RfRUdMSUJDX0NVU1RPTV9DT05GSUcgaXMgbm90IHNldAorQ1RfTElCQ19nbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19taW5nd19BVkFJTEFCTEU9eQorQ1RfTElCQ19uZXdsaWJfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbm9uZV9BVkFJTEFCTEU9eQorQ1RfTElCQ191Q2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfU1VQUE9SVF9USFJFQURTX0FOWT15CitDVF9MSUJDX1NVUFBPUlRfTlBUTD15CitDVF9MSUJDX1NVUFBPUlRfTElOVVhUSFJFQURTPXkKK0NUX1RIUkVBRFM9Im5wdGwiCisKKyMKKyMgQ29tbW9uIEMgbGlicmFyeSBvcHRpb25zCisjCitDVF9USFJFQURTX05QVEw9eQorIyBDVF9USFJFQURTX0xJTlVYVEhSRUFEUyBpcyBub3Qgc2V0CitDVF9MSUJDX1hMREQ9eQorCisjCisjIGVnbGliYyBvdGhlciBvcHRpb25zCisjCitDVF9MSUJDX2dsaWJjX2ZhbWlsbHk9eQorQ1RfTElCQ19HTElCQ19FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0xJQkNfR0xJQkNfQ09ORklHUEFSTVM9IiIKK0NUX0xJQkNfR0xJQkNfRVhUUkFfQ0ZMQUdTPSIiCitDVF9MSUJDX0VYVFJBX0NDX0FSR1M9IiIKKyMgQ1RfTElCQ19FTkFCTEVfRk9SVElGSUVEX0JVSUxEIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19ESVNBQkxFX1ZFUlNJT05JTkcgaXMgbm90IHNldAorQ1RfTElCQ19PTERFU1RfQUJJPSIiCisjIENUX0xJQkNfR0xJQkNfRk9SQ0VfVU5XSU5EIGlzIG5vdCBzZXQKK0NUX0xJQkNfR0xJQkNfVVNFX1BPUlRTPXkKK0NUX0xJQkNfQURET05TX0xJU1Q9IiIKKworIworIyBXQVJOSU5HICEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjCisKKyMKKyMgICBGb3IgZ2xpYmMgPj0gMi44LCBpdCBjYW4gaGFwcGVuIHRoYXQgdGhlIHRhcmJhbGxzICAgIAorIworCisjCisjICAgZm9yIHRoZSBhZGRvbnMgYXJlIG5vdCBhdmFpbGFibGUgZm9yIGRvd25sb2FkLiAgICAgICAKKyMKKworIworIyAgIElmIHRoYXQgaGFwcGVucywgYmFkIGx1Y2suLi4gVHJ5IGEgcHJldmlvdXMgdmVyc2lvbiAgCisjCisKKyMKKyMgICBvciB0cnkgYWdhaW4gbGF0ZXIuLi4gOi0oICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIworIyBDVF9MSUJDX0xPQ0FMRVMgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX05PTkUgaXMgbm90IHNldAorQ1RfTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9BU19IRUFERVJTPXkKKyMgQ1RfTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9DSE9TRU4gaXMgbm90IHNldAorQ1RfTElCQ19HTElCQ19NSU5fS0VSTkVMPSIyLjYuMzYuNCIKKworIworIyBEZWJ1ZyBmYWNpbGl0aWVzCisjCisjIENUX0RFQlVHX2RtYWxsb2MgaXMgbm90IHNldAorIyBDVF9ERUJVR19kdW1hIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfZ2RiIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfbHRyYWNlIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfc3RyYWNlIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzCisjCitDVF9DT01QTElCU19ORUVERUQ9eQorQ1RfR01QX05FRURFRD15CitDVF9NUEZSX05FRURFRD15CitDVF9QUExfTkVFREVEPXkKK0NUX0NMT09HX05FRURFRD15CitDVF9NUENfTkVFREVEPXkKK0NUX0xJQkVMRl9ORUVERUQ9eQorQ1RfQ09NUExJQlM9eQorQ1RfR01QPXkKK0NUX01QRlI9eQorQ1RfUFBMPXkKK0NUX0NMT09HPXkKK0NUX01QQz15CitDVF9MSUJFTEY9eQorIyBDVF9HTVBfVl81XzBfMiBpcyBub3Qgc2V0CitDVF9HTVBfVl81XzBfMT15CisjIENUX0dNUF9WXzRfM18yIGlzIG5vdCBzZXQKKyMgQ1RfR01QX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9HTVBfVl80XzNfMCBpcyBub3Qgc2V0CitDVF9HTVBfVkVSU0lPTj0iNS4wLjEiCisjIENUX01QRlJfVl8zXzBfMSBpcyBub3Qgc2V0CitDVF9NUEZSX1ZfM18wXzA9eQorIyBDVF9NUEZSX1ZfMl80XzIgaXMgbm90IHNldAorIyBDVF9NUEZSX1ZfMl80XzEgaXMgbm90IHNldAorIyBDVF9NUEZSX1ZfMl80XzAgaXMgbm90IHNldAorQ1RfTVBGUl9WRVJTSU9OPSIzLjAuMCIKKyMgQ1RfUFBMX1ZfMF8xMV8yIGlzIG5vdCBzZXQKKyMgQ1RfUFBMX1ZfMF8xMV8xIGlzIG5vdCBzZXQKKyMgQ1RfUFBMX1ZfMF8xMSBpcyBub3Qgc2V0CitDVF9QUExfVl8wXzEwXzI9eQorQ1RfUFBMX1ZFUlNJT049IjAuMTAuMiIKKyMgQ1RfQ0xPT0dfVl8wXzE1XzExIGlzIG5vdCBzZXQKK0NUX0NMT09HX1ZfMF8xNV8xMD15CisjIENUX0NMT09HX1ZfMF8xNV85IGlzIG5vdCBzZXQKKyMgQ1RfQ0xPT0dfVl8wXzE1XzggaXMgbm90IHNldAorIyBDVF9DTE9PR19WXzBfMTVfNyBpcyBub3Qgc2V0CisjIENUX0NMT09HX1ZfMF8xNV82IGlzIG5vdCBzZXQKK0NUX0NMT09HX1ZFUlNJT049IjAuMTUuMTAiCisjIENUX01QQ19WXzBfOSBpcyBub3Qgc2V0CitDVF9NUENfVl8wXzhfMj15CisjIENUX01QQ19WXzBfOF8xIGlzIG5vdCBzZXQKKyMgQ1RfTVBDX1ZfMF83IGlzIG5vdCBzZXQKK0NUX01QQ19WRVJTSU9OPSIwLjguMiIKK0NUX0xJQkVMRl9WXzBfOF8xMz15CisjIENUX0xJQkVMRl9WXzBfOF8xMiBpcyBub3Qgc2V0CitDVF9MSUJFTEZfVkVSU0lPTj0iMC44LjEzIgorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMgY29tbW9uIG9wdGlvbnMKKyMKKyMgQ1RfQ09NUExJQlNfQ0hFQ0sgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiB0b29scworIworCisjCisjIFJFQUQgSEVMUCBiZWZvcmUgeW91IHNheSAnWScgYmVsb3cgISEhCisjCisjIENUX0NPTVBfVE9PTFMgaXMgbm90IHNldAorCisjCisjIFRlc3Qgc3VpdGUKKyMKKyMgQ1RfVEVTVF9TVUlURV9HQ0MgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3Bvd2VycGMtZTMwMGMzLWxpbnV4LWdudS9yZXBvcnRlZC5ieSBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9wb3dlcnBjLWUzMDBjMy1saW51eC1nbnUvcmVwb3J0ZWQuYnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNmZjc4MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9wb3dlcnBjLWUzMDBjMy1saW51eC1nbnUvcmVwb3J0ZWQuYnkKQEAgLTAsMCArMSwzIEBACityZXBvcnRlcl9uYW1lPSJHdXN0YXZvIFphY2FyaWFzIDxndXN0YXZvQHphY2FyaWFzLmNvbS5hcj4iCityZXBvcnRlcl91cmw9Imh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9tbC9jcm9zc2djYy8yMDExLTAzL21zZzAwMDI4Lmh0bWwiCityZXBvcnRlcl9jb21tZW50PSIiCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvcG93ZXJwYy1lNTAwdjItbGludXgtZ251c3BlL2Nyb3NzdG9vbC5jb25maWcgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvcG93ZXJwYy1lNTAwdjItbGludXgtZ251c3BlL2Nyb3NzdG9vbC5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyZTZiMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9wb3dlcnBjLWU1MDB2Mi1saW51eC1nbnVzcGUvY3Jvc3N0b29sLmNvbmZpZwpAQCAtMCwwICsxLDU0NCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBjcm9zc3Rvb2wtTkcgaGdfZGVmYXVsdEAyNzI0XzAxOTA3OTk4MTRlYiBDb25maWd1cmF0aW9uCisjIFN1biBPY3QgMTYgMTg6MTU6NDIgMjAxMQorIworQ1RfQ09ORklHVVJFX2hhc194enV0aWxzPXkKK0NUX0NPTkZJR1VSRV9oYXNfY3ZzPXkKK0NUX0NPTkZJR1VSRV9oYXNfc3ZuPXkKK0NUX01PRFVMRVM9eQorCisjCisjIFBhdGhzIGFuZCBtaXNjIG9wdGlvbnMKKyMKKworIworIyBjcm9zc3Rvb2wtTkcgYmVoYXZpb3IKKyMKKyMgQ1RfT0JTT0xFVEUgaXMgbm90IHNldAorQ1RfRVhQRVJJTUVOVEFMPXkKKyMgQ1RfREVCVUdfQ1QgaXMgbm90IHNldAorCisjCisjIFBhdGhzCisjCitDVF9MT0NBTF9UQVJCQUxMU19ESVI9IiR7SE9NRX0vc3JjIgorQ1RfU0FWRV9UQVJCQUxMUz15CitDVF9XT1JLX0RJUj0iJHtDVF9UT1BfRElSfS8uYnVpbGQiCitDVF9QUkVGSVhfRElSPSIke0hPTUV9L3gtdG9vbHMvJHtDVF9UQVJHRVR9IgorQ1RfSU5TVEFMTF9ESVI9IiR7Q1RfUFJFRklYX0RJUn0iCitDVF9STV9SRl9QUkVGSVhfRElSPXkKK0NUX1JFTU9WRV9ET0NTPXkKK0NUX0lOU1RBTExfRElSX1JPPXkKK0NUX1NUUklQX0FMTF9UT09MQ0hBSU5fRVhFQ1VUQUJMRVM9eQorCisjCisjIERvd25sb2FkaW5nCisjCisjIENUX0ZPUkJJRF9ET1dOTE9BRCBpcyBub3Qgc2V0CisjIENUX0ZPUkNFX0RPV05MT0FEIGlzIG5vdCBzZXQKK0NUX0NPTk5FQ1RfVElNRU9VVD0xMAorIyBDVF9PTkxZX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfVVNFX01JUlJPUiBpcyBub3Qgc2V0CisKKyMKKyMgRXh0cmFjdGluZworIworIyBDVF9GT1JDRV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX09WRVJJREVfQ09ORklHX0dVRVNTX1NVQj15CisjIENUX09OTFlfRVhUUkFDVCBpcyBub3Qgc2V0CitDVF9QQVRDSF9CVU5ETEVEPXkKKyMgQ1RfUEFUQ0hfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9CVU5ETEVEX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTE9DQUxfQlVORExFRCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfRkFMTEJBQ0tfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9GQUxMQkFDS19CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTk9ORSBpcyBub3Qgc2V0CitDVF9QQVRDSF9PUkRFUj0iYnVuZGxlZCIKKworIworIyBCdWlsZCBiZWhhdmlvcgorIworQ1RfUEFSQUxMRUxfSk9CUz0wCitDVF9MT0FEPTAKK0NUX1VTRV9QSVBFUz15CitDVF9FWFRSQV9GTEFHU19GT1JfSE9TVD0iIgorIyBDVF9DT05GSUdfU0hFTExfU0ggaXMgbm90IHNldAorIyBDVF9DT05GSUdfU0hFTExfQVNIIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTF9CQVNIPXkKKyMgQ1RfQ09ORklHX1NIRUxMX0NVU1RPTSBpcyBub3Qgc2V0CitDVF9DT05GSUdfU0hFTEw9IiR7YmFzaH0iCisKKyMKKyMgTG9nZ2luZworIworIyBDVF9MT0dfRVJST1IgaXMgbm90IHNldAorIyBDVF9MT0dfV0FSTiBpcyBub3Qgc2V0CisjIENUX0xPR19JTkZPIGlzIG5vdCBzZXQKK0NUX0xPR19FWFRSQT15CisjIENUX0xPR19BTEwgaXMgbm90IHNldAorIyBDVF9MT0dfREVCVUcgaXMgbm90IHNldAorQ1RfTE9HX0xFVkVMX01BWD0iRVhUUkEiCisjIENUX0xPR19TRUVfVE9PTFNfV0FSTiBpcyBub3Qgc2V0CitDVF9MT0dfUFJPR1JFU1NfQkFSPXkKK0NUX0xPR19UT19GSUxFPXkKK0NUX0xPR19GSUxFX0NPTVBSRVNTPXkKKworIworIyBUYXJnZXQgb3B0aW9ucworIworQ1RfQVJDSD0icG93ZXJwYyIKK0NUX0FSQ0hfU1VQUE9SVFNfMzI9eQorQ1RfQVJDSF9TVVBQT1JUU182ND15CitDVF9BUkNIX1NVUFBPUlRfQUJJPXkKK0NUX0FSQ0hfU1VQUE9SVF9DUFU9eQorQ1RfQVJDSF9TVVBQT1JUX1RVTkU9eQorQ1RfQVJDSF9ERUZBVUxUXzMyPXkKK0NUX0FSQ0hfQUJJPSIiCitDVF9BUkNIX0NQVT0iODU0OCIKK0NUX0FSQ0hfVFVORT0iODU0OCIKK0NUX0FSQ0hfMzI9eQorIyBDVF9BUkNIXzY0IGlzIG5vdCBzZXQKK0NUX0FSQ0hfQklUTkVTUz0zMgorQ1RfQVJDSF9GTE9BVF9IVz15CisjIENUX0FSQ0hfRkxPQVRfU1cgaXMgbm90IHNldAorQ1RfVEFSR0VUX0NGTEFHUz0iLW1mbG9hdC1ncHJzPWRvdWJsZSAtV2EsLW1lNTAweDIiCitDVF9UQVJHRVRfTERGTEFHUz0iIgorIyBDVF9BUkNIX2FscGhhIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9hcm0gaXMgbm90IHNldAorIyBDVF9BUkNIX2F2cjMyIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9ibGFja2ZpbiBpcyBub3Qgc2V0CisjIENUX0FSQ0hfbTY4ayBpcyBub3Qgc2V0CisjIENUX0FSQ0hfbWlwcyBpcyBub3Qgc2V0CitDVF9BUkNIX3Bvd2VycGM9eQorIyBDVF9BUkNIX3MzOTAgaXMgbm90IHNldAorIyBDVF9BUkNIX3NoIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zcGFyYyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfeDg2IGlzIG5vdCBzZXQKK0NUX0FSQ0hfYWxwaGFfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXJtX0FWQUlMQUJMRT15CitDVF9BUkNIX2F2cjMyX0FWQUlMQUJMRT15CitDVF9BUkNIX2JsYWNrZmluX0FWQUlMQUJMRT15CitDVF9BUkNIX202OGtfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbWlwc19BVkFJTEFCTEU9eQorQ1RfQVJDSF9wb3dlcnBjX0FWQUlMQUJMRT15CitDVF9BUkNIX3MzOTBfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfc2hfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfc3BhcmNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfeDg2X0FWQUlMQUJMRT15CisKKyMKKyMgR2VuZXJpYyB0YXJnZXQgb3B0aW9ucworIworQ1RfQVJDSF9VU0VfTU1VPXkKKworIworIyBUYXJnZXQgb3B0aW1pc2F0aW9ucworIworCisjCisjIHBvd2VycGMgb3RoZXIgb3B0aW9ucworIworQ1RfQVJDSF9wb3dlcnBjX0FCST0ic3BlIgorIyBDVF9BUkNIX3Bvd2VycGNfQUJJX0RFRkFVTFQgaXMgbm90IHNldAorQ1RfQVJDSF9wb3dlcnBjX0FCSV9TUEU9eQorCisjCisjIFRvb2xjaGFpbiBvcHRpb25zCisjCisKKyMKKyMgR2VuZXJhbCB0b29sY2hhaW4gb3B0aW9ucworIworQ1RfRk9SQ0VfU1lTUk9PVD15CitDVF9VU0VfU1lTUk9PVD15CitDVF9TWVNST09UX05BTUU9InN5c3Jvb3QiCitDVF9TWVNST09UX0RJUl9QUkVGSVg9IiIKK0NUX1dBTlRTX1NUQVRJQ19MSU5LPXkKKyMgQ1RfU1RBVElDX1RPT0xDSEFJTiBpcyBub3Qgc2V0CitDVF9UT09MQ0hBSU5fUEtHVkVSU0lPTj0iIgorQ1RfVE9PTENIQUlOX0JVR1VSTD0iIgorCisjCisjIFR1cGxlIGNvbXBsZXRpb24gYW5kIGFsaWFzaW5nCisjCitDVF9UQVJHRVRfVkVORE9SPSJlNTAwdjIiCitDVF9UQVJHRVRfQUxJQVNfU0VEX0VYUFI9IiIKK0NUX1RBUkdFVF9BTElBUz0iIgorCisjCisjIFRvb2xjaGFpbiB0eXBlCisjCisjIENUX05BVElWRSBpcyBub3Qgc2V0CitDVF9DUk9TUz15CisjIENUX0NST1NTX05BVElWRSBpcyBub3Qgc2V0CisjIENUX0NBTkFESUFOIGlzIG5vdCBzZXQKK0NUX1RPT0xDSEFJTl9UWVBFPSJjcm9zcyIKKworIworIyBCdWlsZCBzeXN0ZW0KKyMKK0NUX0JVSUxEPSIiCitDVF9CVUlMRF9QUkVGSVg9IiIKK0NUX0JVSUxEX1NVRkZJWD0iIgorCisjCisjIE9wZXJhdGluZyBTeXN0ZW0KKyMKK0NUX0tFUk5FTF9TVVBQT1JUU19TSEFSRURfTElCUz15CitDVF9LRVJORUw9ImxpbnV4IgorQ1RfS0VSTkVMX1ZFUlNJT049IjIuNi4zNi40IgorIyBDVF9LRVJORUxfYmFyZV9tZXRhbCBpcyBub3Qgc2V0CitDVF9LRVJORUxfbGludXg9eQorQ1RfS0VSTkVMX2JhcmVfbWV0YWxfQVZBSUxBQkxFPXkKK0NUX0tFUk5FTF9saW51eF9BVkFJTEFCTEU9eQorIyBDVF9LRVJORUxfVl8zXzBfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8zIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzIgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zOV80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM4XzggaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzdfNiBpcyBub3Qgc2V0CitDVF9LRVJORUxfVl8yXzZfMzZfND15CisjIENUX0tFUk5FTF9WXzJfNl8zNV8xNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNF8xMCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zM18xOSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zMl80NiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zMV8xNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8yN181OSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9MSU5VWF9DVVNUT00gaXMgbm90IHNldAorQ1RfS0VSTkVMX21pbmd3MzJfQVZBSUxBQkxFPXkKKworIworIyBDb21tb24ga2VybmVsIG9wdGlvbnMKKyMKK0NUX1NIQVJFRF9MSUJTPXkKKworIworIyBsaW51eCBvdGhlciBvcHRpb25zCisjCitDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzA9eQorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzEgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzIgaXMgbm90IHNldAorQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0VfTEVWRUw9MAorQ1RfS0VSTkVMX0xJTlVYX0lOU1RBTExfQ0hFQ0s9eQorCisjCisjIEJpbmFyeSB1dGlsaXRpZXMKKyMKK0NUX0FSQ0hfQklORk1UX0VMRj15CisKKyMKKyMgR05VIGJpbnV0aWxzCisjCisjIENUX0JJTlVUSUxTX1ZfMl8yMV81MyBpcyBub3Qgc2V0CisjIENUX0JJTlVUSUxTX1ZfMl8yMV8xYSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WXzJfMjBfMWE9eQorIyBDVF9CSU5VVElMU19WXzJfMTlfMWEgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19WXzJfMThhIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX1ZFUlNJT049IjIuMjAuMWEiCitDVF9CSU5VVElMU18yXzIwX29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMTlfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfMl8xOF9vcl9sYXRlcj15CitDVF9CSU5VVElMU19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQklOVVRJTFNfRk9SQ0VfTERfQkZEPXkKK0NUX0JJTlVUSUxTX0xJTktFUl9MRD15CitDVF9CSU5VVElMU19MSU5LRVJTX0xJU1Q9ImxkIgorQ1RfQklOVVRJTFNfTElOS0VSX0RFRkFVTFQ9ImJmZCIKK0NUX0JJTlVUSUxTX0VYVFJBX0NPTkZJR19BUlJBWT0iLS1lbmFibGUtc3BlPXllcyAtLWVuYWJsZS1lNTAweDIgLS13aXRoLWU1MDB4MiIKK0NUX0JJTlVUSUxTX0ZPUl9UQVJHRVQ9eQorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVF9JQkVSVFk9eQorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVF9CRkQ9eQorCisjCisjIEMgY29tcGlsZXIKKyMKK0NUX0NDPSJnY2MiCitDVF9DQ19WRVJTSU9OPSI0LjYuMCIKK0NUX0NDX2djYz15CitDVF9DQ19HQ0NfU0hPV19MSU5BUk89eQorIyBDVF9DQ19WX2xpbmFyb180XzZfMjAxMV8xMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF82XzEgaXMgbm90IHNldAorQ1RfQ0NfVl80XzZfMD15CisjIENUX0NDX1ZfbGluYXJvXzRfNV8yMDExXzEwIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF81XzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfbGluYXJvXzRfNF8yMDExXzAyXzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF82IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM180IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8yXzIgaXMgbm90IHNldAorQ1RfQ0NfR0NDXzRfMl9vcl9sYXRlcj15CitDVF9DQ19HQ0NfNF8zX29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzRfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDXzRfNV9vcl9sYXRlcj15CitDVF9DQ19HQ0NfNF82PXkKK0NUX0NDX0dDQ180XzZfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDX0hBU19HUkFQSElURT15CitDVF9DQ19HQ0NfSEFTX0xUTz15CitDVF9DQ19HQ0NfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0NDX0dDQ19IQVNfQlVJTERfSUQ9eQorQ1RfQ0NfR0NDX1VTRV9HTVBfTVBGUj15CitDVF9DQ19HQ0NfVVNFX1BQTF9DTE9PRz15CitDVF9DQ19HQ0NfVVNFX01QQz15CisjIENUX0NDX0xBTkdfRk9SVFJBTiBpcyBub3Qgc2V0CitDVF9DQ19TVVBQT1JUX0NYWD15CitDVF9DQ19TVVBQT1JUX0ZPUlRSQU49eQorQ1RfQ0NfU1VQUE9SVF9KQVZBPXkKK0NUX0NDX1NVUFBPUlRfQURBPXkKK0NUX0NDX1NVUFBPUlRfT0JKQz15CitDVF9DQ19TVVBQT1JUX09CSkNYWD15CisKKyMKKyMgQWRkaXRpb25hbCBzdXBwb3J0ZWQgbGFuZ3VhZ2VzOgorIworQ1RfQ0NfTEFOR19DWFg9eQorIyBDVF9DQ19MQU5HX0pBVkEgaXMgbm90IHNldAorIyBDVF9DQ19MQU5HX0FEQSBpcyBub3Qgc2V0CisjIENUX0NDX0xBTkdfT0JKQyBpcyBub3Qgc2V0CisjIENUX0NDX0xBTkdfT0JKQ1hYIGlzIG5vdCBzZXQKK0NUX0NDX0xBTkdfT1RIRVJTPSIiCisKKyMKKyMgZ2NjIG90aGVyIG9wdGlvbnMKKyMKK0NUX0NDX0VOQUJMRV9DWFhfRkxBR1M9IiIKK0NUX0NDX0NPUkVfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9DQ19FWFRSQV9DT05GSUdfQVJSQVk9Ii0td2l0aC1sb25nLWRvdWJsZS0xMjgiCitDVF9DQ19TVEFUSUNfTElCU1REQ1hYPXkKKworIworIyBPcHRpbWlzYXRpb24gZmVhdHVyZXMKKyMKK0NUX0NDX0dDQ19VU0VfR1JBUEhJVEU9eQorQ1RfQ0NfR0NDX1VTRV9MVE89eQorCisjCisjIFNldHRpbmdzIGZvciBsaWJyYXJpZXMgcnVubmluZyBvbiB0YXJnZXQKKyMKKyMgQ1RfQ0NfR0NDX0VOQUJMRV9UQVJHRVRfT1BUU1BBQ0UgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCTVVERkxBUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJHT01QIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQlNTUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYy4gb2JzY3VyZSBvcHRpb25zLgorIworQ1RfQ0NfQ1hBX0FURVhJVD15CisjIENUX0NDX0dDQ19ESVNBQkxFX1BDSCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19TSkxKX0VYQ0VQVElPTlMgaXMgbm90IHNldAorQ1RfQ0NfR0NDX0xEQkxfMTI4PW0KKyMgQ1RfQ0NfR0NDX0JVSUxEX0lEIGlzIG5vdCBzZXQKKworIworIyBDLWxpYnJhcnkKKyMKK0NUX0xJQkM9ImVnbGliYyIKK0NUX0xJQkNfVkVSU0lPTj0iMl8xMCIKK0NUX0xJQkNfZWdsaWJjPXkKKyMgQ1RfTElCQ19nbGliYyBpcyBub3Qgc2V0CisjIENUX0xJQkNfdUNsaWJjIGlzIG5vdCBzZXQKK0NUX0xJQkNfZWdsaWJjX0FWQUlMQUJMRT15CisjIENUX0xJQkNfRUdMSUJDX1ZfMl8xNCBpcyBub3Qgc2V0CisjIENUX0xJQkNfRUdMSUJDX1ZfMl8xMyBpcyBub3Qgc2V0CisjIENUX0xJQkNfRUdMSUJDX1ZfMl8xMiBpcyBub3Qgc2V0CisjIENUX0xJQkNfRUdMSUJDX1ZfMl8xMSBpcyBub3Qgc2V0CitDVF9MSUJDX0VHTElCQ19WXzJfMTA9eQorIyBDVF9MSUJDX0VHTElCQ19WXzJfOSBpcyBub3Qgc2V0CisjIENUX0xJQkNfRUdMSUJDX1ZfVFJVTksgaXMgbm90IHNldAorQ1RfTElCQ19FR0xJQkNfMl8xMF9vcl9sYXRlcj15CitDVF9MSUJDX0VHTElCQ18yXzlfb3JfbGF0ZXI9eQorQ1RfTElCQ19FR0xJQkNfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0VHTElCQ19SRVZJU0lPTj0iSEVBRCIKKyMgQ1RfRUdMSUJDX0hUVFAgaXMgbm90IHNldAorIyBDVF9FR0xJQkNfQ0hFQ0tPVVQgaXMgbm90IHNldAorIyBDVF9FR0xJQkNfT1BUX1NJWkUgaXMgbm90IHNldAorIyBDVF9FR0xJQkNfQ1VTVE9NX0NPTkZJRyBpcyBub3Qgc2V0CitDVF9MSUJDX2dsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX21pbmd3X0FWQUlMQUJMRT15CitDVF9MSUJDX25ld2xpYl9BVkFJTEFCTEU9eQorQ1RfTElCQ19ub25lX0FWQUlMQUJMRT15CitDVF9MSUJDX3VDbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19TVVBQT1JUX1RIUkVBRFNfQU5ZPXkKK0NUX0xJQkNfU1VQUE9SVF9OUFRMPXkKK0NUX0xJQkNfU1VQUE9SVF9MSU5VWFRIUkVBRFM9eQorQ1RfVEhSRUFEUz0ibnB0bCIKKworIworIyBDb21tb24gQyBsaWJyYXJ5IG9wdGlvbnMKKyMKK0NUX1RIUkVBRFNfTlBUTD15CisjIENUX1RIUkVBRFNfTElOVVhUSFJFQURTIGlzIG5vdCBzZXQKK0NUX0xJQkNfWExERD15CisKKyMKKyMgZWdsaWJjIG90aGVyIG9wdGlvbnMKKyMKK0NUX0xJQkNfZ2xpYmNfZmFtaWxseT15CitDVF9MSUJDX0dMSUJDX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfTElCQ19HTElCQ19DT05GSUdQQVJNUz0iIgorQ1RfTElCQ19HTElCQ19FWFRSQV9DRkxBR1M9IiIKK0NUX0xJQkNfRVhUUkFfQ0NfQVJHUz0iIgorIyBDVF9MSUJDX0VOQUJMRV9GT1JUSUZJRURfQlVJTEQgaXMgbm90IHNldAorIyBDVF9MSUJDX0RJU0FCTEVfVkVSU0lPTklORyBpcyBub3Qgc2V0CitDVF9MSUJDX09MREVTVF9BQkk9IiIKKyMgQ1RfTElCQ19HTElCQ19GT1JDRV9VTldJTkQgaXMgbm90IHNldAorQ1RfTElCQ19HTElCQ19VU0VfUE9SVFM9eQorQ1RfTElCQ19BRERPTlNfTElTVD0iIgorCisjCisjIFdBUk5JTkcgISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyMKKworIworIyAgIEZvciBnbGliYyA+PSAyLjgsIGl0IGNhbiBoYXBwZW4gdGhhdCB0aGUgdGFyYmFsbHMgICAgCisjCisKKyMKKyMgICBmb3IgdGhlIGFkZG9ucyBhcmUgbm90IGF2YWlsYWJsZSBmb3IgZG93bmxvYWQuICAgICAgIAorIworCisjCisjICAgSWYgdGhhdCBoYXBwZW5zLCBiYWQgbHVjay4uLiBUcnkgYSBwcmV2aW91cyB2ZXJzaW9uICAKKyMKKworIworIyAgIG9yIHRyeSBhZ2FpbiBsYXRlci4uLiA6LSggICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjCisjIENUX0xJQkNfTE9DQUxFUyBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfS0VSTkVMX1ZFUlNJT05fTk9ORSBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX0FTX0hFQURFUlM9eQorIyBDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX0NIT1NFTiBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX01JTl9LRVJORUw9IjIuNi4zNi40IgorCisjCisjIERlYnVnIGZhY2lsaXRpZXMKKyMKKyMgQ1RfREVCVUdfZG1hbGxvYyBpcyBub3Qgc2V0CitDVF9ERUJVR19kdW1hPXkKK0NUX0RVTUFfQT15CitDVF9EVU1BX1NPPXkKK0NUX0RVTUFfVl8yXzVfMTU9eQorQ1RfRFVNQV9WRVJTSU9OPSIyXzVfMTUiCitDVF9ERUJVR19nZGI9eQorQ1RfR0RCX0NST1NTPXkKKyMgQ1RfR0RCX0NST1NTX1NUQVRJQyBpcyBub3Qgc2V0CitDVF9HREJfQ1JPU1NfUFlUSE9OPXkKK0NUX0dEQl9OQVRJVkU9eQorQ1RfR0RCX05BVElWRV9TVEFUSUM9eQorQ1RfR0RCX0dEQlNFUlZFUj15CitDVF9HREJfR0RCU0VSVkVSX1NUQVRJQz15CisKKyMKKyMgZ2RiIHZlcnNpb24KKyMKKyMgQ1RfREVCVUdfR0RCX1NIT1dfTElOQVJPIGlzIG5vdCBzZXQKKyMgQ1RfR0RCX1ZfN18zYSBpcyBub3Qgc2V0CisjIENUX0dEQl9WXzdfMmEgaXMgbm90IHNldAorQ1RfR0RCX1ZfN18xYT15CisjIENUX0dEQl9WXzdfMF8xYSBpcyBub3Qgc2V0CisjIENUX0dEQl9WXzdfMGEgaXMgbm90IHNldAorIyBDVF9HREJfVl82XzhhIGlzIG5vdCBzZXQKK0NUX0dEQl83XzBfb3JfbGF0ZXI9eQorQ1RfR0RCX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9HREJfSU5TVEFMTF9HREJJTklUPXkKK0NUX0dEQl9WRVJTSU9OPSI3LjFhIgorQ1RfREVCVUdfbHRyYWNlPXkKK0NUX0xUUkFDRV9WXzBfNV8zPXkKKyMgQ1RfTFRSQUNFX1ZfMF81XzIgaXMgbm90IHNldAorQ1RfTFRSQUNFX1ZFUlNJT049IjAuNS4zIgorQ1RfTFRSQUNFXzBfNV8zX29yX2xhdGVyPXkKK0NUX0RFQlVHX3N0cmFjZT15CitDVF9TVFJBQ0VfVl80XzVfMjA9eQorIyBDVF9TVFJBQ0VfVl80XzVfMTkgaXMgbm90IHNldAorIyBDVF9TVFJBQ0VfVl80XzVfMTggaXMgbm90IHNldAorQ1RfU1RSQUNFX1ZFUlNJT049IjQuNS4yMCIKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzCisjCitDVF9DT01QTElCU19ORUVERUQ9eQorQ1RfR01QX05FRURFRD15CitDVF9NUEZSX05FRURFRD15CitDVF9QUExfTkVFREVEPXkKK0NUX0NMT09HX05FRURFRD15CitDVF9NUENfTkVFREVEPXkKK0NUX0NPTVBMSUJTPXkKK0NUX0dNUD15CitDVF9NUEZSPXkKK0NUX1BQTD15CitDVF9DTE9PRz15CitDVF9NUEM9eQorQ1RfTElCRUxGX1RBUkdFVD15CisjIENUX0dNUF9WXzVfMF8yIGlzIG5vdCBzZXQKK0NUX0dNUF9WXzVfMF8xPXkKKyMgQ1RfR01QX1ZfNF8zXzIgaXMgbm90IHNldAorIyBDVF9HTVBfVl80XzNfMSBpcyBub3Qgc2V0CisjIENUX0dNUF9WXzRfM18wIGlzIG5vdCBzZXQKK0NUX0dNUF9WRVJTSU9OPSI1LjAuMSIKKyMgQ1RfTVBGUl9WXzNfMF8xIGlzIG5vdCBzZXQKK0NUX01QRlJfVl8zXzBfMD15CisjIENUX01QRlJfVl8yXzRfMiBpcyBub3Qgc2V0CisjIENUX01QRlJfVl8yXzRfMSBpcyBub3Qgc2V0CisjIENUX01QRlJfVl8yXzRfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZFUlNJT049IjMuMC4wIgorQ1RfUFBMX1ZfMF8xMV8yPXkKKyMgQ1RfUFBMX1ZfMF8xMV8xIGlzIG5vdCBzZXQKKyMgQ1RfUFBMX1ZfMF8xMSBpcyBub3Qgc2V0CisjIENUX1BQTF9WXzBfMTBfMiBpcyBub3Qgc2V0CitDVF9QUExfVkVSU0lPTj0iMC4xMS4yIgorQ1RfUFBMXzBfMTE9eQorQ1RfUFBMX05FRURTX0xJQlBXTD15CisjIENUX0NMT09HX1ZfMF8xNV8xMSBpcyBub3Qgc2V0CitDVF9DTE9PR19WXzBfMTVfMTA9eQorIyBDVF9DTE9PR19WXzBfMTVfOSBpcyBub3Qgc2V0CisjIENUX0NMT09HX1ZfMF8xNV84IGlzIG5vdCBzZXQKKyMgQ1RfQ0xPT0dfVl8wXzE1XzcgaXMgbm90IHNldAorIyBDVF9DTE9PR19WXzBfMTVfNiBpcyBub3Qgc2V0CitDVF9DTE9PR19WRVJTSU9OPSIwLjE1LjEwIgorIyBDVF9NUENfVl8wXzkgaXMgbm90IHNldAorQ1RfTVBDX1ZfMF84XzI9eQorIyBDVF9NUENfVl8wXzhfMSBpcyBub3Qgc2V0CisjIENUX01QQ19WXzBfNyBpcyBub3Qgc2V0CitDVF9NUENfVkVSU0lPTj0iMC44LjIiCisKKyMKKyMgbGliZWxmIHZlcnNpb24gbmVlZGVkIHRvIGJ1aWxkIGZvciB0YXJnZXQKKyMKK0NUX0xJQkVMRl9WXzBfOF8xMz15CisjIENUX0xJQkVMRl9WXzBfOF8xMiBpcyBub3Qgc2V0CitDVF9MSUJFTEZfVkVSU0lPTj0iMC44LjEzIgorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMgY29tbW9uIG9wdGlvbnMKKyMKKyMgQ1RfQ09NUExJQlNfQ0hFQ0sgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiB0b29scworIworCisjCisjIFJFQUQgSEVMUCBiZWZvcmUgeW91IHNheSAnWScgYmVsb3cgISEhCisjCisjIENUX0NPTVBfVE9PTFMgaXMgbm90IHNldAorCisjCisjIFRlc3Qgc3VpdGUKKyMKK0NUX1RFU1RfU1VJVEU9eQorQ1RfVEVTVF9TVUlURV9HQ0M9eQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3Bvd2VycGMtZTUwMHYyLWxpbnV4LWdudXNwZS9yZXBvcnRlZC5ieSBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9wb3dlcnBjLWU1MDB2Mi1saW51eC1nbnVzcGUvcmVwb3J0ZWQuYnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAyMjAxOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9wb3dlcnBjLWU1MDB2Mi1saW51eC1nbnVzcGUvcmVwb3J0ZWQuYnkKQEAgLTAsMCArMSwxMiBAQAorcmVwb3J0ZXJfbmFtZT0iQW50aG9ueSBGb2lhbmkgPGFudGhvbnkuZm9pYW5pQGdtYWlsLmNvbT4iCityZXBvcnRlcl91cmw9Imh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9tbC9jcm9zc2djYy8yMDEwLTA5L21zZzAwMTAwLmh0bWwiCityZXBvcnRlcl9jb21tZW50PSJUaGlzIGlzIGEgc2FtcGxlIGNvbmZpZyBmaWxlIGZvciBGcmVlc2NhbGUgZTUwMHYyIHByb2Nlc3NvcnMgKGUuZy4sIE1QQzg1NDgsCitNUEM4NTcyKS4gSXQgdXNlcyBlZ2xpYmMgKGZvciBlNTAwL1NQRSBwYXRjaGVzKSBhbmQgYSByZWNlbnQgZ2NjICg0LjYuMCwKK2ZvciBlNTAwdjIgRFBGUCBzdXBwb3J0KSBhbmQgd2lsbCBnZW5lcmF0ZSBhcHByb3ByaWF0ZSBkdWFsLXByZWNpc2lvbgorZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zIGJ5IGRlZmF1bHQuCisKK05vdGU6IElmIGJ1aWxkaW5nIGEgTGludXgga2VybmVsIHdpdGggdGhpcyB0b29sY2hhaW4sIHlvdSB3aWxsIHdhbnQgdG8gbWFrZQorc3VyZSAtbW5vLXNwZSBBTkQgLW1zcGU9bm8gYXJlIHBhc3NlZCB0byBnY2MgdG8gcHJldmVudCBTUEUgQUJJL2luc3RydWN0aW9ucworZnJvbSBnZXR0aW5nIGludG8gdGhlIGtlcm5lbCAod2hpY2ggaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkKS4gQXQgdGhpcyB0aW1lLAordGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gcHJvcGVybHkgcGFzc2VzIHRob3NlIHR3byBvcHRpb25zLCBidXQgb2xkZXIga2VybmVscword2VyZSBvbmx5IHBhc3NpbmcgLW1uby1zcGUgYnkgZGVmYXVsdC4iCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvcG93ZXJwYy11bmtub3duLWxpbnV4LWdudS9jcm9zc3Rvb2wuY29uZmlnIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3Bvd2VycGMtdW5rbm93bi1saW51eC1nbnUvY3Jvc3N0b29sLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWViOWVkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3Bvd2VycGMtdW5rbm93bi1saW51eC1nbnUvY3Jvc3N0b29sLmNvbmZpZwpAQCAtMCwwICsxLDQxMCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBjcm9zc3Rvb2wtTkcgaGdfZGVmYXVsdEAyNzIzX2Q1NmJhNjA0YmU4MCBDb25maWd1cmF0aW9uCisjIFN1biBPY3QgMTYgMTg6MTY6MjcgMjAxMQorIworQ1RfQ09ORklHVVJFX2hhc194enV0aWxzPXkKK0NUX0NPTkZJR1VSRV9oYXNfY3ZzPXkKK0NUX0NPTkZJR1VSRV9oYXNfc3ZuPXkKK0NUX01PRFVMRVM9eQorCisjCisjIFBhdGhzIGFuZCBtaXNjIG9wdGlvbnMKKyMKKworIworIyBjcm9zc3Rvb2wtTkcgYmVoYXZpb3IKKyMKKyMgQ1RfT0JTT0xFVEUgaXMgbm90IHNldAorIyBDVF9FWFBFUklNRU5UQUwgaXMgbm90IHNldAorIyBDVF9ERUJVR19DVCBpcyBub3Qgc2V0CisKKyMKKyMgUGF0aHMKKyMKK0NUX0xPQ0FMX1RBUkJBTExTX0RJUj0iJHtIT01FfS9zcmMiCitDVF9TQVZFX1RBUkJBTExTPXkKK0NUX1dPUktfRElSPSIke0NUX1RPUF9ESVJ9Ly5idWlsZCIKK0NUX1BSRUZJWF9ESVI9IiR7SE9NRX0veC10b29scy8ke0NUX1RBUkdFVH0iCitDVF9JTlNUQUxMX0RJUj0iJHtDVF9QUkVGSVhfRElSfSIKK0NUX1JNX1JGX1BSRUZJWF9ESVI9eQorQ1RfUkVNT1ZFX0RPQ1M9eQorQ1RfSU5TVEFMTF9ESVJfUk89eQorQ1RfU1RSSVBfQUxMX1RPT0xDSEFJTl9FWEVDVVRBQkxFUz15CisKKyMKKyMgRG93bmxvYWRpbmcKKyMKKyMgQ1RfRk9SQklEX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfRk9SQ0VfRE9XTkxPQUQgaXMgbm90IHNldAorQ1RfQ09OTkVDVF9USU1FT1VUPTEwCisjIENUX09OTFlfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9VU0VfTUlSUk9SIGlzIG5vdCBzZXQKKworIworIyBFeHRyYWN0aW5nCisjCisjIENUX0ZPUkNFX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfT1ZFUklERV9DT05GSUdfR1VFU1NfU1VCPXkKKyMgQ1RfT05MWV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX1BBVENIX0JVTkRMRUQ9eQorIyBDVF9QQVRDSF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9GQUxMQkFDS19MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0ZBTExCQUNLX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9OT05FIGlzIG5vdCBzZXQKK0NUX1BBVENIX09SREVSPSJidW5kbGVkIgorCisjCisjIEJ1aWxkIGJlaGF2aW9yCisjCitDVF9QQVJBTExFTF9KT0JTPTAKK0NUX0xPQUQ9MAorQ1RfVVNFX1BJUEVTPXkKK0NUX0VYVFJBX0ZMQUdTX0ZPUl9IT1NUPSIiCisjIENUX0NPTkZJR19TSEVMTF9TSCBpcyBub3Qgc2V0CisjIENUX0NPTkZJR19TSEVMTF9BU0ggaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMX0JBU0g9eQorIyBDVF9DT05GSUdfU0hFTExfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTD0iJHtiYXNofSIKKworIworIyBMb2dnaW5nCisjCisjIENUX0xPR19FUlJPUiBpcyBub3Qgc2V0CisjIENUX0xPR19XQVJOIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0lORk8gaXMgbm90IHNldAorQ1RfTE9HX0VYVFJBPXkKKyMgQ1RfTE9HX0FMTCBpcyBub3Qgc2V0CisjIENUX0xPR19ERUJVRyBpcyBub3Qgc2V0CitDVF9MT0dfTEVWRUxfTUFYPSJFWFRSQSIKKyMgQ1RfTE9HX1NFRV9UT09MU19XQVJOIGlzIG5vdCBzZXQKK0NUX0xPR19QUk9HUkVTU19CQVI9eQorQ1RfTE9HX1RPX0ZJTEU9eQorQ1RfTE9HX0ZJTEVfQ09NUFJFU1M9eQorCisjCisjIFRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIPSJwb3dlcnBjIgorQ1RfQVJDSF9TVVBQT1JUU18zMj15CitDVF9BUkNIX1NVUFBPUlRfQUJJPXkKK0NUX0FSQ0hfU1VQUE9SVF9DUFU9eQorQ1RfQVJDSF9TVVBQT1JUX1RVTkU9eQorQ1RfQVJDSF9ERUZBVUxUXzMyPXkKK0NUX0FSQ0hfQUJJPSIiCitDVF9BUkNIX0NQVT0iIgorQ1RfQVJDSF9UVU5FPSIiCitDVF9BUkNIXzMyPXkKK0NUX0FSQ0hfQklUTkVTUz0zMgorQ1RfQVJDSF9GTE9BVF9IVz15CisjIENUX0FSQ0hfRkxPQVRfU1cgaXMgbm90IHNldAorQ1RfVEFSR0VUX0NGTEFHUz0iIgorQ1RfVEFSR0VUX0xERkxBR1M9IiIKKyMgQ1RfQVJDSF9hbHBoYSBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYXJtIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9hdnIzMiBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYmxhY2tmaW4gaXMgbm90IHNldAorIyBDVF9BUkNIX21pcHMgaXMgbm90IHNldAorQ1RfQVJDSF9wb3dlcnBjPXkKKyMgQ1RfQVJDSF9zaCBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc3BhcmMgaXMgbm90IHNldAorIyBDVF9BUkNIX3g4NiBpcyBub3Qgc2V0CitDVF9BUkNIX2FscGhhX0FWQUlMQUJMRT15CitDVF9BUkNIX2FybV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hdnIzMl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9ibGFja2Zpbl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9tNjhrX0FWQUlMQUJMRT15CitDVF9BUkNIX21pcHNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfcG93ZXJwY19BVkFJTEFCTEU9eQorQ1RfQVJDSF9zMzkwX0FWQUlMQUJMRT15CitDVF9BUkNIX3NoX0FWQUlMQUJMRT15CitDVF9BUkNIX3NwYXJjX0FWQUlMQUJMRT15CitDVF9BUkNIX3g4Nl9BVkFJTEFCTEU9eQorCisjCisjIEdlbmVyaWMgdGFyZ2V0IG9wdGlvbnMKKyMKK0NUX0FSQ0hfVVNFX01NVT15CisKKyMKKyMgVGFyZ2V0IG9wdGltaXNhdGlvbnMKKyMKKworIworIyBwb3dlcnBjIG90aGVyIG9wdGlvbnMKKyMKK0NUX0FSQ0hfcG93ZXJwY19BQkk9IiIKK0NUX0FSQ0hfcG93ZXJwY19BQklfREVGQVVMVD15CisjIENUX0FSQ0hfcG93ZXJwY19BQklfU1BFIGlzIG5vdCBzZXQKKworIworIyBUb29sY2hhaW4gb3B0aW9ucworIworCisjCisjIEdlbmVyYWwgdG9vbGNoYWluIG9wdGlvbnMKKyMKK0NUX0ZPUkNFX1NZU1JPT1Q9eQorQ1RfVVNFX1NZU1JPT1Q9eQorQ1RfU1lTUk9PVF9OQU1FPSJzeXNyb290IgorQ1RfU1lTUk9PVF9ESVJfUFJFRklYPSIiCitDVF9UT09MQ0hBSU5fUEtHVkVSU0lPTj0iIgorQ1RfVE9PTENIQUlOX0JVR1VSTD0iIgorCisjCisjIFR1cGxlIGNvbXBsZXRpb24gYW5kIGFsaWFzaW5nCisjCitDVF9UQVJHRVRfVkVORE9SPSJ1bmtub3duIgorQ1RfVEFSR0VUX0FMSUFTX1NFRF9FWFBSPSIiCitDVF9UQVJHRVRfQUxJQVM9IiIKKworIworIyBUb29sY2hhaW4gdHlwZQorIworQ1RfQ1JPU1M9eQorQ1RfVE9PTENIQUlOX1RZUEU9ImNyb3NzIgorCisjCisjIEJ1aWxkIHN5c3RlbQorIworQ1RfQlVJTEQ9IiIKK0NUX0JVSUxEX1BSRUZJWD0iIgorQ1RfQlVJTERfU1VGRklYPSIiCisKKyMKKyMgT3BlcmF0aW5nIFN5c3RlbQorIworQ1RfS0VSTkVMX1NVUFBPUlRTX1NIQVJFRF9MSUJTPXkKK0NUX0tFUk5FTD0ibGludXgiCitDVF9LRVJORUxfVkVSU0lPTj0iMi42LjMxLjE0IgorIyBDVF9LRVJORUxfYmFyZV9tZXRhbCBpcyBub3Qgc2V0CitDVF9LRVJORUxfbGludXg9eQorQ1RfS0VSTkVMX2JhcmVfbWV0YWxfQVZBSUxBQkxFPXkKK0NUX0tFUk5FTF9saW51eF9BVkFJTEFCTEU9eQorIyBDVF9LRVJORUxfVl8zXzBfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8zIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzIgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zOV80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM4XzggaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzdfNiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNl80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM1XzE0IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM0XzEwIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzMzXzE5IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzMyXzQ2IGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9WXzJfNl8zMV8xND15CisjIENUX0tFUk5FTF9WXzJfNl8yN181OSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9MSU5VWF9DVVNUT00gaXMgbm90IHNldAorQ1RfS0VSTkVMX21pbmd3MzJfQVZBSUxBQkxFPXkKKworIworIyBDb21tb24ga2VybmVsIG9wdGlvbnMKKyMKK0NUX1NIQVJFRF9MSUJTPXkKKworIworIyBsaW51eCBvdGhlciBvcHRpb25zCisjCitDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzA9eQorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzEgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzIgaXMgbm90IHNldAorQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0VfTEVWRUw9MAorQ1RfS0VSTkVMX0xJTlVYX0lOU1RBTExfQ0hFQ0s9eQorCisjCisjIEJpbmFyeSB1dGlsaXRpZXMKKyMKK0NUX0FSQ0hfQklORk1UX0VMRj15CisKKyMKKyMgR05VIGJpbnV0aWxzCisjCisjIENUX0JJTlVUSUxTX1ZfMl8yMV8xYSBpcyBub3Qgc2V0CisjIENUX0JJTlVUSUxTX1ZfMl8yMF8xYSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WXzJfMTlfMWE9eQorIyBDVF9CSU5VVElMU19WXzJfMThhIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX1ZFUlNJT049IjIuMTkuMWEiCitDVF9CSU5VVElMU18yXzE5X29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMThfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0JJTlVUSUxTX0ZPUkNFX0xEX0JGRD15CitDVF9CSU5VVElMU19MSU5LRVJfTEQ9eQorQ1RfQklOVVRJTFNfTElOS0VSU19MSVNUPSJsZCIKK0NUX0JJTlVUSUxTX0xJTktFUl9ERUZBVUxUPSJiZmQiCitDVF9CSU5VVElMU19FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0JJTlVUSUxTX0ZPUl9UQVJHRVQ9eQorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVF9JQkVSVFk9eQorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVF9CRkQ9eQorCisjCisjIEMgY29tcGlsZXIKKyMKK0NUX0NDPSJnY2MiCitDVF9DQ19WRVJTSU9OPSI0LjMuMiIKK0NUX0NDX2djYz15CisjIENUX0NDX1ZfNF80XzYgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF81IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzMgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8yIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM182IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18zIGlzIG5vdCBzZXQKK0NUX0NDX1ZfNF8zXzI9eQorIyBDVF9DQ19WXzRfM18xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8yXzIgaXMgbm90IHNldAorQ1RfQ0NfR0NDXzRfMl9vcl9sYXRlcj15CitDVF9DQ19HQ0NfNF8zPXkKK0NUX0NDX0dDQ180XzNfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9DQ19HQ0NfVVNFX0dNUF9NUEZSPXkKK0NUX0NDX0xBTkdfSkFWQV9VU0VfRUNKPXkKK0NUX0NDX0xBTkdfRk9SVFJBTj15CitDVF9DQ19TVVBQT1JUX0NYWD15CitDVF9DQ19TVVBQT1JUX0ZPUlRSQU49eQorQ1RfQ0NfU1VQUE9SVF9KQVZBPXkKK0NUX0NDX1NVUFBPUlRfQURBPXkKK0NUX0NDX1NVUFBPUlRfT0JKQz15CitDVF9DQ19TVVBQT1JUX09CSkNYWD15CisKKyMKKyMgQWRkaXRpb25hbCBzdXBwb3J0ZWQgbGFuZ3VhZ2VzOgorIworQ1RfQ0NfTEFOR19DWFg9eQorQ1RfQ0NfTEFOR19KQVZBPXkKKworIworIyBnY2Mgb3RoZXIgb3B0aW9ucworIworQ1RfQ0NfRU5BQkxFX0NYWF9GTEFHUz0iIgorQ1RfQ0NfQ09SRV9FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0NDX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorCisjCisjIE9wdGltaXNhdGlvbiBmZWF0dXJlcworIworCisjCisjIFNldHRpbmdzIGZvciBsaWJyYXJpZXMgcnVubmluZyBvbiB0YXJnZXQKKyMKK0NUX0NDX0dDQ19FTkFCTEVfVEFSR0VUX09QVFNQQUNFPXkKKyMgQ1RfQ0NfR0NDX0xJQk1VREZMQVAgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCR09NUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJTU1AgaXMgbm90IHNldAorCisjCisjIE1pc2MuIG9ic2N1cmUgb3B0aW9ucy4KKyMKK0NUX0NDX0NYQV9BVEVYSVQ9eQorIyBDVF9DQ19HQ0NfRElTQUJMRV9QQ0ggaXMgbm90IHNldAorQ1RfQ0NfR0NDX1NKTEpfRVhDRVBUSU9OUz1tCitDVF9DQ19HQ0NfTERCTF8xMjg9bQorCisjCisjIEMtbGlicmFyeQorIworQ1RfTElCQz0iZ2xpYmMiCitDVF9MSUJDX1ZFUlNJT049IjIuOSIKKyMgQ1RfTElCQ19lZ2xpYmMgaXMgbm90IHNldAorQ1RfTElCQ19nbGliYz15CisjIENUX0xJQkNfdUNsaWJjIGlzIG5vdCBzZXQKK0NUX0xJQkNfZWdsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX2dsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX0dMSUJDX1RBUkJBTEw9eQorQ1RfTElCQ19HTElCQ19WXzJfOT15CisjIENUX0xJQkNfR0xJQkNfVl8yXzggaXMgbm90IHNldAorQ1RfTElCQ19taW5nd19BVkFJTEFCTEU9eQorQ1RfTElCQ19uZXdsaWJfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbm9uZV9BVkFJTEFCTEU9eQorQ1RfTElCQ191Q2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfU1VQUE9SVF9USFJFQURTX0FOWT15CitDVF9MSUJDX1NVUFBPUlRfTlBUTD15CitDVF9USFJFQURTPSJucHRsIgorCisjCisjIENvbW1vbiBDIGxpYnJhcnkgb3B0aW9ucworIworQ1RfVEhSRUFEU19OUFRMPXkKK0NUX0xJQkNfWExERD15CitDVF9MSUJDX2dsaWJjX2ZhbWlsbHk9eQorQ1RfTElCQ19HTElCQ19FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0xJQkNfR0xJQkNfQ09ORklHUEFSTVM9IiIKK0NUX0xJQkNfR0xJQkNfRVhUUkFfQ0ZMQUdTPSIiCitDVF9MSUJDX0VYVFJBX0NDX0FSR1M9IiIKKyMgQ1RfTElCQ19ESVNBQkxFX1ZFUlNJT05JTkcgaXMgbm90IHNldAorQ1RfTElCQ19PTERFU1RfQUJJPSIiCisjIENUX0xJQkNfR0xJQkNfRk9SQ0VfVU5XSU5EIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19VU0VfUE9SVFMgaXMgbm90IHNldAorQ1RfTElCQ19BRERPTlNfTElTVD0iIgorIyBDVF9MSUJDX0xPQ0FMRVMgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX05PTkUgaXMgbm90IHNldAorQ1RfTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9BU19IRUFERVJTPXkKKyMgQ1RfTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9DSE9TRU4gaXMgbm90IHNldAorQ1RfTElCQ19HTElCQ19NSU5fS0VSTkVMPSIyLjYuMzEuMTQiCisKKyMKKyMgZ2xpYmMgb3RoZXIgb3B0aW9ucworIworCisjCisjIERlYnVnIGZhY2lsaXRpZXMKKyMKK0NUX0RFQlVHX2RtYWxsb2M9eQorQ1RfRE1BTExPQ19WXzVfNV8yPXkKK0NUX0RNQUxMT0NfVkVSU0lPTj0iNS41LjIiCitDVF9ERUJVR19kdW1hPXkKK0NUX0RVTUFfQT15CitDVF9EVU1BX1NPPXkKK0NUX0RVTUFfVl8yXzVfMTU9eQorQ1RfRFVNQV9WRVJTSU9OPSIyXzVfMTUiCitDVF9ERUJVR19nZGI9eQorQ1RfR0RCX0NST1NTPXkKKyMgQ1RfR0RCX0NST1NTX1NUQVRJQyBpcyBub3Qgc2V0CitDVF9HREJfQ1JPU1NfUFlUSE9OPXkKK0NUX0dEQl9OQVRJVkU9eQorIyBDVF9HREJfTkFUSVZFX1NUQVRJQyBpcyBub3Qgc2V0CitDVF9HREJfR0RCU0VSVkVSPXkKK0NUX0dEQl9HREJTRVJWRVJfU1RBVElDPXkKKworIworIyBnZGIgdmVyc2lvbgorIworQ1RfR0RCX1ZfNl84YT15CitDVF9HREJfVkVSU0lPTj0iNi44YSIKKyMgQ1RfREVCVUdfbHRyYWNlIGlzIG5vdCBzZXQKK0NUX0RFQlVHX3N0cmFjZT15CitDVF9TVFJBQ0VfVl80XzVfMTk9eQorIyBDVF9TVFJBQ0VfVl80XzVfMTggaXMgbm90IHNldAorQ1RfU1RSQUNFX1ZFUlNJT049IjQuNS4xOSIKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzCisjCitDVF9DT01QTElCU19ORUVERUQ9eQorQ1RfR01QX05FRURFRD15CitDVF9NUEZSX05FRURFRD15CitDVF9DT01QTElCUz15CitDVF9HTVA9eQorQ1RfTVBGUj15CitDVF9HTVBfVl80XzNfMj15CisjIENUX0dNUF9WXzRfM18xIGlzIG5vdCBzZXQKKyMgQ1RfR01QX1ZfNF8zXzAgaXMgbm90IHNldAorQ1RfR01QX1ZFUlNJT049IjQuMy4yIgorIyBDVF9NUEZSX1ZfM18wXzAgaXMgbm90IHNldAorQ1RfTVBGUl9WXzJfNF8yPXkKKyMgQ1RfTVBGUl9WXzJfNF8xIGlzIG5vdCBzZXQKKyMgQ1RfTVBGUl9WXzJfNF8wIGlzIG5vdCBzZXQKK0NUX01QRlJfVkVSU0lPTj0iMi40LjIiCisKKyMKKyMgQ29tcGFuaW9uIGxpYnJhcmllcyBjb21tb24gb3B0aW9ucworIworIyBDVF9DT01QTElCU19DSEVDSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvcG93ZXJwYy11bmtub3duLWxpbnV4LWdudS9yZXBvcnRlZC5ieSBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9wb3dlcnBjLXVua25vd24tbGludXgtZ251L3JlcG9ydGVkLmJ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5N2NlNjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvcG93ZXJwYy11bmtub3duLWxpbnV4LWdudS9yZXBvcnRlZC5ieQpAQCAtMCwwICsxLDMgQEAKK3JlcG9ydGVyX25hbWU9IlRob21hcyBKT1VSREFOIgorcmVwb3J0ZXJfdXJsPSIiCityZXBvcnRlcl9jb21tZW50PSIiCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvcG93ZXJwYy11bmtub3duLWxpbnV4LXVjbGliYy9jcm9zc3Rvb2wuY29uZmlnIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3Bvd2VycGMtdW5rbm93bi1saW51eC11Y2xpYmMvY3Jvc3N0b29sLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjAzOGNmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3Bvd2VycGMtdW5rbm93bi1saW51eC11Y2xpYmMvY3Jvc3N0b29sLmNvbmZpZwpAQCAtMCwwICsxLDQxMSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBjcm9zc3Rvb2wtTkcgaGdfZGVmYXVsdEAyNzIzX2Q1NmJhNjA0YmU4MCBDb25maWd1cmF0aW9uCisjIFN1biBPY3QgMTYgMTg6MTY6NTUgMjAxMQorIworQ1RfQ09ORklHVVJFX2hhc194enV0aWxzPXkKK0NUX0NPTkZJR1VSRV9oYXNfY3ZzPXkKK0NUX0NPTkZJR1VSRV9oYXNfc3ZuPXkKK0NUX01PRFVMRVM9eQorCisjCisjIFBhdGhzIGFuZCBtaXNjIG9wdGlvbnMKKyMKKworIworIyBjcm9zc3Rvb2wtTkcgYmVoYXZpb3IKKyMKKyMgQ1RfT0JTT0xFVEUgaXMgbm90IHNldAorIyBDVF9FWFBFUklNRU5UQUwgaXMgbm90IHNldAorIyBDVF9ERUJVR19DVCBpcyBub3Qgc2V0CisKKyMKKyMgUGF0aHMKKyMKK0NUX0xPQ0FMX1RBUkJBTExTX0RJUj0iJHtIT01FfS9zcmMiCitDVF9TQVZFX1RBUkJBTExTPXkKK0NUX1dPUktfRElSPSIke0NUX1RPUF9ESVJ9Ly5idWlsZCIKK0NUX1BSRUZJWF9ESVI9IiR7SE9NRX0veC10b29scy8ke0NUX1RBUkdFVH0iCitDVF9JTlNUQUxMX0RJUj0iJHtDVF9QUkVGSVhfRElSfSIKK0NUX1JNX1JGX1BSRUZJWF9ESVI9eQorQ1RfUkVNT1ZFX0RPQ1M9eQorQ1RfSU5TVEFMTF9ESVJfUk89eQorQ1RfU1RSSVBfQUxMX1RPT0xDSEFJTl9FWEVDVVRBQkxFUz15CisKKyMKKyMgRG93bmxvYWRpbmcKKyMKKyMgQ1RfRk9SQklEX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfRk9SQ0VfRE9XTkxPQUQgaXMgbm90IHNldAorQ1RfQ09OTkVDVF9USU1FT1VUPTEwCisjIENUX09OTFlfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9VU0VfTUlSUk9SIGlzIG5vdCBzZXQKKworIworIyBFeHRyYWN0aW5nCisjCisjIENUX0ZPUkNFX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfT1ZFUklERV9DT05GSUdfR1VFU1NfU1VCPXkKKyMgQ1RfT05MWV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX1BBVENIX0JVTkRMRUQ9eQorIyBDVF9QQVRDSF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9GQUxMQkFDS19MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0ZBTExCQUNLX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9OT05FIGlzIG5vdCBzZXQKK0NUX1BBVENIX09SREVSPSJidW5kbGVkIgorCisjCisjIEJ1aWxkIGJlaGF2aW9yCisjCitDVF9QQVJBTExFTF9KT0JTPTAKK0NUX0xPQUQ9MAorQ1RfVVNFX1BJUEVTPXkKK0NUX0VYVFJBX0ZMQUdTX0ZPUl9IT1NUPSIiCisjIENUX0NPTkZJR19TSEVMTF9TSCBpcyBub3Qgc2V0CisjIENUX0NPTkZJR19TSEVMTF9BU0ggaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMX0JBU0g9eQorIyBDVF9DT05GSUdfU0hFTExfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTD0iJHtiYXNofSIKKworIworIyBMb2dnaW5nCisjCisjIENUX0xPR19FUlJPUiBpcyBub3Qgc2V0CisjIENUX0xPR19XQVJOIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0lORk8gaXMgbm90IHNldAorQ1RfTE9HX0VYVFJBPXkKKyMgQ1RfTE9HX0FMTCBpcyBub3Qgc2V0CisjIENUX0xPR19ERUJVRyBpcyBub3Qgc2V0CitDVF9MT0dfTEVWRUxfTUFYPSJFWFRSQSIKKyMgQ1RfTE9HX1NFRV9UT09MU19XQVJOIGlzIG5vdCBzZXQKK0NUX0xPR19QUk9HUkVTU19CQVI9eQorQ1RfTE9HX1RPX0ZJTEU9eQorQ1RfTE9HX0ZJTEVfQ09NUFJFU1M9eQorCisjCisjIFRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIPSJwb3dlcnBjIgorQ1RfQVJDSF9TVVBQT1JUU18zMj15CitDVF9BUkNIX1NVUFBPUlRfQUJJPXkKK0NUX0FSQ0hfU1VQUE9SVF9DUFU9eQorQ1RfQVJDSF9TVVBQT1JUX1RVTkU9eQorQ1RfQVJDSF9ERUZBVUxUXzMyPXkKK0NUX0FSQ0hfQUJJPSIiCitDVF9BUkNIX0NQVT0iIgorQ1RfQVJDSF9UVU5FPSIiCitDVF9BUkNIXzMyPXkKK0NUX0FSQ0hfQklUTkVTUz0zMgorIyBDVF9BUkNIX0ZMT0FUX0hXIGlzIG5vdCBzZXQKK0NUX0FSQ0hfRkxPQVRfU1c9eQorQ1RfVEFSR0VUX0NGTEFHUz0iIgorQ1RfVEFSR0VUX0xERkxBR1M9IiIKKyMgQ1RfQVJDSF9hbHBoYSBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYXJtIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9hdnIzMiBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYmxhY2tmaW4gaXMgbm90IHNldAorIyBDVF9BUkNIX21pcHMgaXMgbm90IHNldAorQ1RfQVJDSF9wb3dlcnBjPXkKKyMgQ1RfQVJDSF9zaCBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc3BhcmMgaXMgbm90IHNldAorIyBDVF9BUkNIX3g4NiBpcyBub3Qgc2V0CitDVF9BUkNIX2FscGhhX0FWQUlMQUJMRT15CitDVF9BUkNIX2FybV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hdnIzMl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9ibGFja2Zpbl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9tNjhrX0FWQUlMQUJMRT15CitDVF9BUkNIX21pcHNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfcG93ZXJwY19BVkFJTEFCTEU9eQorQ1RfQVJDSF9zMzkwX0FWQUlMQUJMRT15CitDVF9BUkNIX3NoX0FWQUlMQUJMRT15CitDVF9BUkNIX3NwYXJjX0FWQUlMQUJMRT15CitDVF9BUkNIX3g4Nl9BVkFJTEFCTEU9eQorCisjCisjIEdlbmVyaWMgdGFyZ2V0IG9wdGlvbnMKKyMKK0NUX0FSQ0hfVVNFX01NVT15CisKKyMKKyMgVGFyZ2V0IG9wdGltaXNhdGlvbnMKKyMKKworIworIyBwb3dlcnBjIG90aGVyIG9wdGlvbnMKKyMKK0NUX0FSQ0hfcG93ZXJwY19BQkk9IiIKK0NUX0FSQ0hfcG93ZXJwY19BQklfREVGQVVMVD15CisjIENUX0FSQ0hfcG93ZXJwY19BQklfU1BFIGlzIG5vdCBzZXQKKworIworIyBUb29sY2hhaW4gb3B0aW9ucworIworCisjCisjIEdlbmVyYWwgdG9vbGNoYWluIG9wdGlvbnMKKyMKK0NUX0ZPUkNFX1NZU1JPT1Q9eQorQ1RfVVNFX1NZU1JPT1Q9eQorQ1RfU1lTUk9PVF9OQU1FPSJzeXNyb290IgorQ1RfU1lTUk9PVF9ESVJfUFJFRklYPSIiCitDVF9UT09MQ0hBSU5fUEtHVkVSU0lPTj0iIgorQ1RfVE9PTENIQUlOX0JVR1VSTD0iIgorCisjCisjIFR1cGxlIGNvbXBsZXRpb24gYW5kIGFsaWFzaW5nCisjCitDVF9UQVJHRVRfVkVORE9SPSJ1bmtub3duIgorQ1RfVEFSR0VUX0FMSUFTX1NFRF9FWFBSPSIiCitDVF9UQVJHRVRfQUxJQVM9IiIKKworIworIyBUb29sY2hhaW4gdHlwZQorIworQ1RfQ1JPU1M9eQorQ1RfVE9PTENIQUlOX1RZUEU9ImNyb3NzIgorCisjCisjIEJ1aWxkIHN5c3RlbQorIworQ1RfQlVJTEQ9IiIKK0NUX0JVSUxEX1BSRUZJWD0iIgorQ1RfQlVJTERfU1VGRklYPSIiCisKKyMKKyMgT3BlcmF0aW5nIFN5c3RlbQorIworQ1RfS0VSTkVMX1NVUFBPUlRTX1NIQVJFRF9MSUJTPXkKK0NUX0tFUk5FTD0ibGludXgiCitDVF9LRVJORUxfVkVSU0lPTj0iMi42LjMxLjE0IgorIyBDVF9LRVJORUxfYmFyZV9tZXRhbCBpcyBub3Qgc2V0CitDVF9LRVJORUxfbGludXg9eQorQ1RfS0VSTkVMX2JhcmVfbWV0YWxfQVZBSUxBQkxFPXkKK0NUX0tFUk5FTF9saW51eF9BVkFJTEFCTEU9eQorIyBDVF9LRVJORUxfVl8zXzBfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8zIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzIgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zOV80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM4XzggaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzdfNiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNl80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM1XzE0IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM0XzEwIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzMzXzE5IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzMyXzQ2IGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9WXzJfNl8zMV8xND15CisjIENUX0tFUk5FTF9WXzJfNl8yN181OSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9MSU5VWF9DVVNUT00gaXMgbm90IHNldAorQ1RfS0VSTkVMX21pbmd3MzJfQVZBSUxBQkxFPXkKKworIworIyBDb21tb24ga2VybmVsIG9wdGlvbnMKKyMKK0NUX1NIQVJFRF9MSUJTPXkKKworIworIyBsaW51eCBvdGhlciBvcHRpb25zCisjCitDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzA9eQorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzEgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzIgaXMgbm90IHNldAorQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0VfTEVWRUw9MAorQ1RfS0VSTkVMX0xJTlVYX0lOU1RBTExfQ0hFQ0s9eQorCisjCisjIEJpbmFyeSB1dGlsaXRpZXMKKyMKK0NUX0FSQ0hfQklORk1UX0VMRj15CisKKyMKKyMgR05VIGJpbnV0aWxzCisjCisjIENUX0JJTlVUSUxTX1ZfMl8yMV8xYSBpcyBub3Qgc2V0CisjIENUX0JJTlVUSUxTX1ZfMl8yMF8xYSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WXzJfMTlfMWE9eQorIyBDVF9CSU5VVElMU19WXzJfMThhIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX1ZFUlNJT049IjIuMTkuMWEiCitDVF9CSU5VVElMU18yXzE5X29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMThfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0JJTlVUSUxTX0xJTktFUl9MRD15CitDVF9CSU5VVElMU19MSU5LRVJTX0xJU1Q9ImxkIgorQ1RfQklOVVRJTFNfTElOS0VSX0RFRkFVTFQ9ImJmZCIKK0NUX0JJTlVUSUxTX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVD15CitDVF9CSU5VVElMU19GT1JfVEFSR0VUX0lCRVJUWT15CitDVF9CSU5VVElMU19GT1JfVEFSR0VUX0JGRD15CisKKyMKKyMgQyBjb21waWxlcgorIworQ1RfQ0M9ImdjYyIKK0NUX0NDX1ZFUlNJT049IjQuMi40IgorQ1RfQ0NfZ2NjPXkKKyMgQ1RfQ0NfVl80XzRfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzYgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM181IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzMgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18yIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMSBpcyBub3Qgc2V0CitDVF9DQ19WXzRfMl80PXkKKyMgQ1RfQ0NfVl80XzJfMiBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfNF8yPXkKK0NUX0NDX0dDQ180XzJfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDX1VTRV9HTVBfTVBGUj15CitDVF9DQ19MQU5HX0ZPUlRSQU49eQorQ1RfQ0NfU1VQUE9SVF9DWFg9eQorQ1RfQ0NfU1VQUE9SVF9GT1JUUkFOPXkKK0NUX0NDX1NVUFBPUlRfSkFWQT15CitDVF9DQ19TVVBQT1JUX0FEQT15CitDVF9DQ19TVVBQT1JUX09CSkM9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDWFg9eQorCisjCisjIEFkZGl0aW9uYWwgc3VwcG9ydGVkIGxhbmd1YWdlczoKKyMKK0NUX0NDX0xBTkdfQ1hYPXkKKyMgQ1RfQ0NfTEFOR19KQVZBIGlzIG5vdCBzZXQKKworIworIyBnY2Mgb3RoZXIgb3B0aW9ucworIworQ1RfQ0NfRU5BQkxFX0NYWF9GTEFHUz0iIgorQ1RfQ0NfQ09SRV9FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0NDX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorCisjCisjIE9wdGltaXNhdGlvbiBmZWF0dXJlcworIworCisjCisjIFNldHRpbmdzIGZvciBsaWJyYXJpZXMgcnVubmluZyBvbiB0YXJnZXQKKyMKK0NUX0NDX0dDQ19FTkFCTEVfVEFSR0VUX09QVFNQQUNFPXkKKyMgQ1RfQ0NfR0NDX0xJQk1VREZMQVAgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCR09NUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJTU1AgaXMgbm90IHNldAorCisjCisjIE1pc2MuIG9ic2N1cmUgb3B0aW9ucy4KKyMKK0NUX0NDX0NYQV9BVEVYSVQ9eQorIyBDVF9DQ19HQ0NfRElTQUJMRV9QQ0ggaXMgbm90IHNldAorQ1RfQ0NfR0NDX1NKTEpfRVhDRVBUSU9OUz1tCitDVF9DQ19HQ0NfTERCTF8xMjg9bQorCisjCisjIEMtbGlicmFyeQorIworQ1RfTElCQz0idUNsaWJjIgorQ1RfTElCQ19WRVJTSU9OPSIwLjkuMzAuMSIKKyMgQ1RfTElCQ19lZ2xpYmMgaXMgbm90IHNldAorIyBDVF9MSUJDX2dsaWJjIGlzIG5vdCBzZXQKK0NUX0xJQkNfdUNsaWJjPXkKK0NUX0xJQkNfZWdsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX2dsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX21pbmd3X0FWQUlMQUJMRT15CitDVF9MSUJDX25ld2xpYl9BVkFJTEFCTEU9eQorQ1RfTElCQ19ub25lX0FWQUlMQUJMRT15CitDVF9MSUJDX3VDbGliY19BVkFJTEFCTEU9eQorIyBDVF9MSUJDX1VDTElCQ19WXzBfOV8zMiBpcyBub3Qgc2V0CisjIENUX0xJQkNfVUNMSUJDX1ZfMF85XzMwXzMgaXMgbm90IHNldAorIyBDVF9MSUJDX1VDTElCQ19WXzBfOV8zMF8yIGlzIG5vdCBzZXQKK0NUX0xJQkNfVUNMSUJDX1ZfMF85XzMwXzE9eQorIyBDVF9MSUJDX1VDTElCQ19WXzBfOV8zMCBpcyBub3Qgc2V0CitDVF9MSUJDX1VDTElCQ18wXzlfMzBfb3JfbGF0ZXI9eQorQ1RfTElCQ19VQ0xJQkNfUEFSQUxMRUw9eQorQ1RfTElCQ19VQ0xJQkNfVkVSQk9TSVRZXzA9eQorIyBDVF9MSUJDX1VDTElCQ19WRVJCT1NJVFlfMSBpcyBub3Qgc2V0CisjIENUX0xJQkNfVUNMSUJDX1ZFUkJPU0lUWV8yIGlzIG5vdCBzZXQKK0NUX0xJQkNfVUNMSUJDX1ZFUkJPU0lUWT0iIgorQ1RfTElCQ19VQ0xJQkNfREVCVUdfTEVWRUxfMD15CisjIENUX0xJQkNfVUNMSUJDX0RFQlVHX0xFVkVMXzEgaXMgbm90IHNldAorIyBDVF9MSUJDX1VDTElCQ19ERUJVR19MRVZFTF8yIGlzIG5vdCBzZXQKK0NUX0xJQkNfVUNMSUJDX0RFQlVHX0xFVkVMPTAKK0NUX0xJQkNfVUNMSUJDX0NPTkZJR19GSUxFPSIke0NUX0xJQl9ESVJ9L3NhbXBsZXMvJHtDVF9UQVJHRVR9LyR7Q1RfTElCQ30tJHtDVF9MSUJDX1ZFUlNJT059LmNvbmZpZyIKK0NUX0xJQkNfU1VQUE9SVF9USFJFQURTX0FOWT15CitDVF9MSUJDX1NVUFBPUlRfTElOVVhUSFJFQURTPXkKK0NUX0xJQkNfU1VQUE9SVF9USFJFQURTX05PTkU9eQorQ1RfVEhSRUFEUz0ibGludXh0aHJlYWRzIgorCisjCisjIENvbW1vbiBDIGxpYnJhcnkgb3B0aW9ucworIworQ1RfVEhSRUFEU19MSU5VWFRIUkVBRFM9eQorIyBDVF9USFJFQURTX05PTkUgaXMgbm90IHNldAorQ1RfTElCQ19YTEREPXkKKworIworIyB1Q2xpYmMgb3RoZXIgb3B0aW9ucworIworQ1RfTElCQ19VQ0xJQkNfTE5YVEhSRF9PTEQ9eQorIyBDVF9MSUJDX1VDTElCQ19MTlhUSFJEX05FVyBpcyBub3Qgc2V0CitDVF9MSUJDX1VDTElCQ19MTlhUSFJEPSJvbGQiCisjIENUX0xJQkNfVUNMSUJDX0xPQ0FMRVMgaXMgbm90IHNldAorIyBDVF9MSUJDX1VDTElCQ19XQ0hBUiBpcyBub3Qgc2V0CisKKyMKKyMgRGVidWcgZmFjaWxpdGllcworIworQ1RfREVCVUdfZG1hbGxvYz15CitDVF9ETUFMTE9DX1ZfNV81XzI9eQorQ1RfRE1BTExPQ19WRVJTSU9OPSI1LjUuMiIKK0NUX0RFQlVHX2R1bWE9eQorQ1RfRFVNQV9BPXkKK0NUX0RVTUFfU089eQorQ1RfRFVNQV9WXzJfNV8xNT15CitDVF9EVU1BX1ZFUlNJT049IjJfNV8xNSIKK0NUX0RFQlVHX2dkYj15CitDVF9HREJfQ1JPU1M9eQorIyBDVF9HREJfQ1JPU1NfU1RBVElDIGlzIG5vdCBzZXQKK0NUX0dEQl9DUk9TU19QWVRIT049eQorQ1RfR0RCX05BVElWRT15CisjIENUX0dEQl9OQVRJVkVfU1RBVElDIGlzIG5vdCBzZXQKK0NUX0dEQl9HREJTRVJWRVI9eQorQ1RfR0RCX0dEQlNFUlZFUl9TVEFUSUM9eQorCisjCisjIGdkYiB2ZXJzaW9uCisjCitDVF9HREJfVl82XzhhPXkKK0NUX0dEQl9WRVJTSU9OPSI2LjhhIgorIyBDVF9ERUJVR19sdHJhY2UgaXMgbm90IHNldAorQ1RfREVCVUdfc3RyYWNlPXkKK0NUX1NUUkFDRV9WXzRfNV8xOT15CisjIENUX1NUUkFDRV9WXzRfNV8xOCBpcyBub3Qgc2V0CitDVF9TVFJBQ0VfVkVSU0lPTj0iNC41LjE5IgorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMKKyMKK0NUX0NPTVBMSUJTX05FRURFRD15CitDVF9HTVBfTkVFREVEPXkKK0NUX01QRlJfTkVFREVEPXkKK0NUX0NPTVBMSUJTPXkKK0NUX0dNUD15CitDVF9NUEZSPXkKK0NUX0dNUF9WXzRfM18yPXkKKyMgQ1RfR01QX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9HTVBfVl80XzNfMCBpcyBub3Qgc2V0CitDVF9HTVBfVkVSU0lPTj0iNC4zLjIiCisjIENUX01QRlJfVl8zXzBfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZfMl80XzI9eQorIyBDVF9NUEZSX1ZfMl80XzEgaXMgbm90IHNldAorIyBDVF9NUEZSX1ZfMl80XzAgaXMgbm90IHNldAorQ1RfTVBGUl9WRVJTSU9OPSIyLjQuMiIKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzIGNvbW1vbiBvcHRpb25zCisjCisjIENUX0NPTVBMSUJTX0NIRUNLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9wb3dlcnBjLXVua25vd24tbGludXgtdWNsaWJjL3JlcG9ydGVkLmJ5IGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3Bvd2VycGMtdW5rbm93bi1saW51eC11Y2xpYmMvcmVwb3J0ZWQuYnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgyOTE0NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9wb3dlcnBjLXVua25vd24tbGludXgtdWNsaWJjL3JlcG9ydGVkLmJ5CkBAIC0wLDAgKzEsMyBAQAorcmVwb3J0ZXJfbmFtZT0iRGFuaWVsIERJVFRNQU5OIgorcmVwb3J0ZXJfdXJsPSIiCityZXBvcnRlcl9jb21tZW50PSIiCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvcG93ZXJwYy11bmtub3duLWxpbnV4LXVjbGliYy91Q2xpYmMtMC45LjMwLjEuY29uZmlnIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3Bvd2VycGMtdW5rbm93bi1saW51eC11Y2xpYmMvdUNsaWJjLTAuOS4zMC4xLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTk5NTI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3Bvd2VycGMtdW5rbm93bi1saW51eC11Y2xpYmMvdUNsaWJjLTAuOS4zMC4xLmNvbmZpZwpAQCAtMCwwICsxLDI0OCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBWZXJzaW9uOiAwLjkuMzAKKyMgVGh1IE5vdiAyMCAyMjo0MzozOSAyMDA4CisjCisjIFRBUkdFVF9hbHBoYSBpcyBub3Qgc2V0CisjIFRBUkdFVF9hcm0gaXMgbm90IHNldAorIyBUQVJHRVRfYXZyMzIgaXMgbm90IHNldAorIyBUQVJHRVRfYmZpbiBpcyBub3Qgc2V0CisjIFRBUkdFVF9jcmlzIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2UxIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2ZydiBpcyBub3Qgc2V0CisjIFRBUkdFVF9oODMwMCBpcyBub3Qgc2V0CisjIFRBUkdFVF9ocHBhIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2kzODYgaXMgbm90IHNldAorIyBUQVJHRVRfaTk2MCBpcyBub3Qgc2V0CisjIFRBUkdFVF9pYTY0IGlzIG5vdCBzZXQKKyMgVEFSR0VUX202OGsgaXMgbm90IHNldAorIyBUQVJHRVRfbWljcm9ibGF6ZSBpcyBub3Qgc2V0CisjIFRBUkdFVF9taXBzIGlzIG5vdCBzZXQKKyMgVEFSR0VUX25pb3MgaXMgbm90IHNldAorIyBUQVJHRVRfbmlvczIgaXMgbm90IHNldAorVEFSR0VUX3Bvd2VycGM9eQorIyBUQVJHRVRfc2ggaXMgbm90IHNldAorIyBUQVJHRVRfc2g2NCBpcyBub3Qgc2V0CisjIFRBUkdFVF9zcGFyYyBpcyBub3Qgc2V0CisjIFRBUkdFVF92ODUwIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3ZheCBpcyBub3Qgc2V0CisjIFRBUkdFVF94ODZfNjQgaXMgbm90IHNldAorIyBUQVJHRVRfeHRlbnNhIGlzIG5vdCBzZXQKKworIworIyBUYXJnZXQgQXJjaGl0ZWN0dXJlIEZlYXR1cmVzIGFuZCBPcHRpb25zCisjCitUQVJHRVRfQVJDSD0icG93ZXJwYyIKK0ZPUkNFX09QVElPTlNfRk9SX0FSQ0g9eQorIyBDT05GSUdfQVJNX09BQkkgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VBQkkgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19BUk0gaXMgbm90IHNldAorIyBDT05GSUdfQVJNNjEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk03VERNSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUk03MjBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTkyMFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJNOTIyVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk05MjZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTEwVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk0xMTM2SkZfUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk0xMTc2SlpfUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk0xMTc2SlpGX1MgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0NPUlRFWF9NMyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fQ09SVEVYX00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9TQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9YU0NBTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0lXTU1YVCBpcyBub3Qgc2V0CitDT05GSUdfQ0xBU1NJQz15CisjIENPTkZJR19FNTAwIGlzIG5vdCBzZXQKK1RBUkdFVF9TVUJBUkNIPSJjbGFzc2ljIgorCisjCisjIFVzaW5nIEVMRiBmaWxlIGZvcm1hdAorIworQVJDSF9CSUdfRU5ESUFOPXkKKyMgQVJDSF9XQU5UU19CSUdfRU5ESUFOIGlzIG5vdCBzZXQKKyMgQVJDSF9XQU5UU19MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKKworIworIyBVc2luZyBCaWcgRW5kaWFuCisjCitBUkNIX0hBU19NTVU9eQorQVJDSF9VU0VfTU1VPXkKK1VDTElCQ19IQVNfRkxPQVRTPXkKK1VDTElCQ19IQVNfRlBVPXkKK0RPX0M5OV9NQVRIPXkKK1VDTElCQ19IQVNfRkVOVj15CitVQ0xJQkNfSEFTX0xPTkdfRE9VQkxFX01BVEg9eQorS0VSTkVMX0hFQURFUlM9Ii91c3IvaW5jbHVkZSIKK0hBVkVfRE9UX0NPTkZJRz15CisKKyMKKyMgR2VuZXJhbCBMaWJyYXJ5IFNldHRpbmdzCisjCisjIEhBVkVfTk9fUElDIGlzIG5vdCBzZXQKK0RPUElDPXkKKyMgQVJDSF9IQVNfTk9fU0hBUkVEIGlzIG5vdCBzZXQKKyMgQVJDSF9IQVNfTk9fTERTTyBpcyBub3Qgc2V0CitIQVZFX1NIQVJFRD15CisjIEZPUkNFX1NIQVJFQUJMRV9URVhUX1NFR01FTlRTIGlzIG5vdCBzZXQKK0xEU09fTEREX1NVUFBPUlQ9eQorTERTT19DQUNIRV9TVVBQT1JUPXkKKyMgTERTT19QUkVMT0FEX0ZJTEVfU1VQUE9SVCBpcyBub3Qgc2V0CitMRFNPX0JBU0VfRklMRU5BTUU9ImxkLnNvIgorVUNMSUJDX1NUQVRJQ19MRENPTkZJRz15CisjIExEU09fUlVOUEFUSCBpcyBub3Qgc2V0CitVQ0xJQkNfQ1RPUl9EVE9SPXkKKyMgTERTT19HTlVfSEFTSF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgSEFTX05PX1RIUkVBRFMgaXMgbm90IHNldAorVUNMSUJDX0hBU19USFJFQURTPXkKKyMgUFRIUkVBRFNfREVCVUdfU1VQUE9SVCBpcyBub3Qgc2V0CitMSU5VWFRIUkVBRFNfT0xEPXkKK1VDTElCQ19IQVNfU1lTTE9HPXkKK1VDTElCQ19IQVNfTEZTPXkKKyMgTUFMTE9DIGlzIG5vdCBzZXQKKyMgTUFMTE9DX1NJTVBMRSBpcyBub3Qgc2V0CitNQUxMT0NfU1RBTkRBUkQ9eQorIyBNQUxMT0NfR0xJQkNfQ09NUEFUIGlzIG5vdCBzZXQKK1VDTElCQ19EWU5BTUlDX0FURVhJVD15CisjIENPTVBBVF9BVEVYSVQgaXMgbm90IHNldAorIyBVQ0xJQkNfU1VTVjNfTEVHQUNZIGlzIG5vdCBzZXQKKyMgVUNMSUJDX1NVU1YzX0xFR0FDWV9NQUNST1MgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NUVUJTIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfU0hBRE9XPXkKKyMgVUNMSUJDX0hBU19QUk9HUkFNX0lOVk9DQVRJT05fTkFNRSBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1BUWT15CitBU1NVTUVfREVWUFRTPXkKK1VOSVg5OFBUWV9PTkxZPXkKKyMgVUNMSUJDX0hBU19HRVRQVCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1RNX0VYVEVOU0lPTlM9eQorVUNMSUJDX0hBU19UWl9DQUNISU5HPXkKK1VDTElCQ19IQVNfVFpfRklMRT15CitVQ0xJQkNfSEFTX1RaX0ZJTEVfUkVBRF9NQU5ZPXkKK1VDTElCQ19UWl9GSUxFX1BBVEg9Ii9ldGMvVFoiCisKKyMKKyMgQWR2YW5jZWQgTGlicmFyeSBTZXR0aW5ncworIworVUNMSUJDX1BXRF9CVUZGRVJfU0laRT0yNTYKK1VDTElCQ19HUlBfQlVGRkVSX1NJWkU9MjU2CisKKyMKKyMgU3VwcG9ydCB2YXJpb3VzIGZhbWlsaWVzIG9mIGZ1bmN0aW9ucworIworVUNMSUJDX0xJTlVYX01PRFVMRV8yND15CitVQ0xJQkNfTElOVVhfU1BFQ0lGSUM9eQorVUNMSUJDX0hBU19HTlVfRVJST1I9eQorIyBVQ0xJQkNfQlNEX1NQRUNJRklDIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfQlNEX0VSUj15CisjIFVDTElCQ19IQVNfT0JTT0xFVEVfQlNEX1NJR05BTCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfT0JTT0xFVEVfU1lTVl9TSUdOQUwgaXMgbm90IHNldAorIyBVQ0xJQkNfTlRQX0xFR0FDWSBpcyBub3Qgc2V0CisjIFVDTElCQ19TVjRfREVQUkVDQVRFRCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1JFQUxUSU1FPXkKK1VDTElCQ19IQVNfQURWQU5DRURfUkVBTFRJTUU9eQorVUNMSUJDX0hBU19FUE9MTD15CitVQ0xJQkNfSEFTX1hBVFRSPXkKK1VDTElCQ19IQVNfUFJPRklMSU5HPXkKK1VDTElCQ19IQVNfQ1JZUFRfSU1QTD15CitVQ0xJQkNfSEFTX0NSWVBUPXkKK1VDTElCQ19IQVNfTkVUV09SS19TVVBQT1JUPXkKK1VDTElCQ19IQVNfU09DS0VUPXkKK1VDTElCQ19IQVNfSVBWND15CisjIFVDTElCQ19IQVNfSVBWNiBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1JQQz15CitVQ0xJQkNfSEFTX0ZVTExfUlBDPXkKK1VDTElCQ19IQVNfUkVFTlRSQU5UX1JQQz15CitVQ0xJQkNfVVNFX05FVExJTks9eQorVUNMSUJDX1NVUFBPUlRfQUlfQUREUkNPTkZJRz15CisjIFVDTElCQ19IQVNfQlNEX1JFU19DTE9TRSBpcyBub3Qgc2V0CisKKyMKKyMgU3RyaW5nIGFuZCBTdGRpbyBTdXBwb3J0CisjCitVQ0xJQkNfSEFTX1NUUklOR19HRU5FUklDX09QVD15CitVQ0xJQkNfSEFTX1NUUklOR19BUkNIX09QVD15CitVQ0xJQkNfSEFTX0NUWVBFX1RBQkxFUz15CitVQ0xJQkNfSEFTX0NUWVBFX1NJR05FRD15CisjIFVDTElCQ19IQVNfQ1RZUEVfVU5TQUZFIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19DVFlQRV9DSEVDS0VEIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfQ1RZUEVfRU5GT1JDRUQ9eQorIyBVQ0xJQkNfSEFTX1dDSEFSIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19MT0NBTEUgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0hFWEFERUNJTUFMX0ZMT0FUUyBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX0dMSUJDX0NVU1RPTV9QUklOVEY9eQorIyBVU0VfT0xEX1ZGUFJJTlRGIGlzIG5vdCBzZXQKK1VDTElCQ19QUklOVEZfU0NBTkZfUE9TSVRJT05BTF9BUkdTPTkKKyMgVUNMSUJDX0hBU19TQ0FORl9HTElCQ19BX0ZMQUcgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl9OT05FIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfMjU2IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfNTEyIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfMTAyNCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzIwNDggaXMgbm90IHNldAorVUNMSUJDX0hBU19TVERJT19CVUZTSVpfNDA5Nj15CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzgxOTIgaXMgbm90IHNldAorVUNMSUJDX0hBU19TVERJT19CVUlMVElOX0JVRkZFUl9OT05FPXkKKyMgVUNMSUJDX0hBU19TVERJT19CVUlMVElOX0JVRkZFUl80IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUlMVElOX0JVRkZFUl84IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19TSFVURE9XTl9PTl9BQk9SVCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NURElPX0dFVENfTUFDUk89eQorVUNMSUJDX0hBU19TVERJT19QVVRDX01BQ1JPPXkKK1VDTElCQ19IQVNfU1RESU9fQVVUT19SV19UUkFOU0lUSU9OPXkKKyMgVUNMSUJDX0hBU19GT1BFTl9MQVJHRUZJTEVfTU9ERSBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfRk9QRU5fRVhDTFVTSVZFX01PREUgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0dMSUJDX0NVU1RPTV9TVFJFQU1TIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfUFJJTlRGX01fU1BFQz15CitVQ0xJQkNfSEFTX0VSUk5PX01FU1NBR0VTPXkKKyMgVUNMSUJDX0hBU19TWVNfRVJSTElTVCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NJR05VTV9NRVNTQUdFUz15CisjIFVDTElCQ19IQVNfU1lTX1NJR0xJU1QgaXMgbm90IHNldAorVUNMSUJDX0hBU19HTlVfR0VUT1BUPXkKK1VDTElCQ19IQVNfR05VX0dFVFNVQk9QVD15CisKKyMKKyMgQmlnIGFuZCBUYWxsCisjCitVQ0xJQkNfSEFTX1JFR0VYPXkKK1VDTElCQ19IQVNfUkVHRVhfT0xEPXkKK1VDTElCQ19IQVNfRk5NQVRDSD15CitVQ0xJQkNfSEFTX0ZOTUFUQ0hfT0xEPXkKKyMgVUNMSUJDX0hBU19XT1JERVhQIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19GVFcgaXMgbm90IHNldAorVUNMSUJDX0hBU19HTE9CPXkKK1VDTElCQ19IQVNfR05VX0dMT0I9eQorCisjCisjIExpYnJhcnkgSW5zdGFsbGF0aW9uIE9wdGlvbnMKKyMKK1NIQVJFRF9MSUJfTE9BREVSX1BSRUZJWD0iJChSVU5USU1FX1BSRUZJWClsaWIiCitSVU5USU1FX1BSRUZJWD0iL3Vzci8kKFRBUkdFVF9BUkNIKS1saW51eC11Y2xpYmMvIgorREVWRUxfUFJFRklYPSIvdXNyLyQoVEFSR0VUX0FSQ0gpLWxpbnV4LXVjbGliYy91c3IvIgorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgVUNMSUJDX0JVSUxEX1BJRSBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfQVJDNFJBTkRPTSBpcyBub3Qgc2V0CisjIEhBVkVfTk9fU1NQIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TU1AgaXMgbm90IHNldAorVUNMSUJDX0JVSUxEX1JFTFJPPXkKKyMgVUNMSUJDX0JVSUxEX05PVyBpcyBub3Qgc2V0CitVQ0xJQkNfQlVJTERfTk9FWEVDU1RBQ0s9eQorCisjCisjIHVDbGliYyBkZXZlbG9wbWVudC9kZWJ1Z2dpbmcgb3B0aW9ucworIworQ1JPU1NfQ09NUElMRVJfUFJFRklYPSIiCitVQ0xJQkNfRVhUUkFfQ0ZMQUdTPSIiCisjIERPREVCVUcgaXMgbm90IHNldAorIyBET0RFQlVHX1BUIGlzIG5vdCBzZXQKKyMgRE9TVFJJUCBpcyBub3Qgc2V0CisjIERPQVNTRVJUUyBpcyBub3Qgc2V0CisjIFNVUFBPUlRfTERfREVCVUcgaXMgbm90IHNldAorIyBTVVBQT1JUX0xEX0RFQlVHX0VBUkxZIGlzIG5vdCBzZXQKKyMgVUNMSUJDX01BTExPQ19ERUJVR0dJTkcgaXMgbm90IHNldAorV0FSTklOR1M9Ii1XYWxsIgorIyBFWFRSQV9XQVJOSU5HUyBpcyBub3Qgc2V0CisjIERPTVVMVEkgaXMgbm90IHNldAorIyBVQ0xJQkNfTUpOM19PTkxZIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9wb3dlcnBjLXVua25vd25fbm9mcHUtbGludXgtZ251L2Nyb3NzdG9vbC5jb25maWcgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvcG93ZXJwYy11bmtub3duX25vZnB1LWxpbnV4LWdudS9jcm9zc3Rvb2wuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZWMxMjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvcG93ZXJwYy11bmtub3duX25vZnB1LWxpbnV4LWdudS9jcm9zc3Rvb2wuY29uZmlnCkBAIC0wLDAgKzEsNDMwIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIGNyb3NzdG9vbC1ORyBoZ19kZWZhdWx0QDI3MjNfZDU2YmE2MDRiZTgwIENvbmZpZ3VyYXRpb24KKyMgU3VuIE9jdCAxNiAxODoxNzoyMyAyMDExCisjCitDVF9DT05GSUdVUkVfaGFzX3h6dXRpbHM9eQorQ1RfQ09ORklHVVJFX2hhc19jdnM9eQorQ1RfQ09ORklHVVJFX2hhc19zdm49eQorQ1RfTU9EVUxFUz15CisKKyMKKyMgUGF0aHMgYW5kIG1pc2Mgb3B0aW9ucworIworCisjCisjIGNyb3NzdG9vbC1ORyBiZWhhdmlvcgorIworIyBDVF9PQlNPTEVURSBpcyBub3Qgc2V0CisjIENUX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CisjIENUX0RFQlVHX0NUIGlzIG5vdCBzZXQKKworIworIyBQYXRocworIworQ1RfTE9DQUxfVEFSQkFMTFNfRElSPSIke0hPTUV9L3NyYyIKK0NUX1NBVkVfVEFSQkFMTFM9eQorQ1RfV09SS19ESVI9IiR7Q1RfVE9QX0RJUn0vLmJ1aWxkIgorQ1RfUFJFRklYX0RJUj0iJHtIT01FfS94LXRvb2xzLyR7Q1RfVEFSR0VUfSIKK0NUX0lOU1RBTExfRElSPSIke0NUX1BSRUZJWF9ESVJ9IgorQ1RfUk1fUkZfUFJFRklYX0RJUj15CitDVF9SRU1PVkVfRE9DUz15CitDVF9JTlNUQUxMX0RJUl9STz15CitDVF9TVFJJUF9BTExfVE9PTENIQUlOX0VYRUNVVEFCTEVTPXkKKworIworIyBEb3dubG9hZGluZworIworIyBDVF9GT1JCSURfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9GT1JDRV9ET1dOTE9BRCBpcyBub3Qgc2V0CitDVF9DT05ORUNUX1RJTUVPVVQ9MTAKKyMgQ1RfT05MWV9ET1dOTE9BRCBpcyBub3Qgc2V0CisjIENUX1VTRV9NSVJST1IgaXMgbm90IHNldAorCisjCisjIEV4dHJhY3RpbmcKKyMKKyMgQ1RfRk9SQ0VfRVhUUkFDVCBpcyBub3Qgc2V0CitDVF9PVkVSSURFX0NPTkZJR19HVUVTU19TVUI9eQorIyBDVF9PTkxZX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfUEFUQ0hfQlVORExFRD15CisjIENUX1BBVENIX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9CVU5ETEVEX0ZBTExCQUNLX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTE9DQUxfRkFMTEJBQ0tfQlVORExFRCBpcyBub3Qgc2V0CisjIENUX1BBVENIX05PTkUgaXMgbm90IHNldAorQ1RfUEFUQ0hfT1JERVI9ImJ1bmRsZWQiCisKKyMKKyMgQnVpbGQgYmVoYXZpb3IKKyMKK0NUX1BBUkFMTEVMX0pPQlM9MAorQ1RfTE9BRD0wCitDVF9VU0VfUElQRVM9eQorQ1RfRVhUUkFfRkxBR1NfRk9SX0hPU1Q9IiIKKyMgQ1RfQ09ORklHX1NIRUxMX1NIIGlzIG5vdCBzZXQKKyMgQ1RfQ09ORklHX1NIRUxMX0FTSCBpcyBub3Qgc2V0CitDVF9DT05GSUdfU0hFTExfQkFTSD15CisjIENUX0NPTkZJR19TSEVMTF9DVVNUT00gaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMPSIke2Jhc2h9IgorCisjCisjIExvZ2dpbmcKKyMKKyMgQ1RfTE9HX0VSUk9SIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX1dBUk4gaXMgbm90IHNldAorIyBDVF9MT0dfSU5GTyBpcyBub3Qgc2V0CitDVF9MT0dfRVhUUkE9eQorIyBDVF9MT0dfQUxMIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0RFQlVHIGlzIG5vdCBzZXQKK0NUX0xPR19MRVZFTF9NQVg9IkVYVFJBIgorIyBDVF9MT0dfU0VFX1RPT0xTX1dBUk4gaXMgbm90IHNldAorQ1RfTE9HX1BST0dSRVNTX0JBUj15CitDVF9MT0dfVE9fRklMRT15CitDVF9MT0dfRklMRV9DT01QUkVTUz15CisKKyMKKyMgVGFyZ2V0IG9wdGlvbnMKKyMKK0NUX0FSQ0g9InBvd2VycGMiCitDVF9BUkNIX1NVUFBPUlRTXzMyPXkKK0NUX0FSQ0hfU1VQUE9SVF9BQkk9eQorQ1RfQVJDSF9TVVBQT1JUX0NQVT15CitDVF9BUkNIX1NVUFBPUlRfVFVORT15CitDVF9BUkNIX0RFRkFVTFRfMzI9eQorQ1RfQVJDSF9BQkk9IiIKK0NUX0FSQ0hfQ1BVPSIiCitDVF9BUkNIX1RVTkU9IiIKK0NUX0FSQ0hfMzI9eQorQ1RfQVJDSF9CSVRORVNTPTMyCisjIENUX0FSQ0hfRkxPQVRfSFcgaXMgbm90IHNldAorQ1RfQVJDSF9GTE9BVF9TVz15CitDVF9UQVJHRVRfQ0ZMQUdTPSIiCitDVF9UQVJHRVRfTERGTEFHUz0iIgorIyBDVF9BUkNIX2FscGhhIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9hcm0gaXMgbm90IHNldAorIyBDVF9BUkNIX2F2cjMyIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9ibGFja2ZpbiBpcyBub3Qgc2V0CisjIENUX0FSQ0hfbWlwcyBpcyBub3Qgc2V0CitDVF9BUkNIX3Bvd2VycGM9eQorIyBDVF9BUkNIX3NoIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zcGFyYyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfeDg2IGlzIG5vdCBzZXQKK0NUX0FSQ0hfYWxwaGFfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXJtX0FWQUlMQUJMRT15CitDVF9BUkNIX2F2cjMyX0FWQUlMQUJMRT15CitDVF9BUkNIX2JsYWNrZmluX0FWQUlMQUJMRT15CitDVF9BUkNIX202OGtfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbWlwc19BVkFJTEFCTEU9eQorQ1RfQVJDSF9wb3dlcnBjX0FWQUlMQUJMRT15CitDVF9BUkNIX3MzOTBfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfc2hfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfc3BhcmNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfeDg2X0FWQUlMQUJMRT15CisKKyMKKyMgR2VuZXJpYyB0YXJnZXQgb3B0aW9ucworIworQ1RfQVJDSF9VU0VfTU1VPXkKKworIworIyBUYXJnZXQgb3B0aW1pc2F0aW9ucworIworCisjCisjIHBvd2VycGMgb3RoZXIgb3B0aW9ucworIworQ1RfQVJDSF9wb3dlcnBjX0FCST0iIgorQ1RfQVJDSF9wb3dlcnBjX0FCSV9ERUZBVUxUPXkKKyMgQ1RfQVJDSF9wb3dlcnBjX0FCSV9TUEUgaXMgbm90IHNldAorCisjCisjIFRvb2xjaGFpbiBvcHRpb25zCisjCisKKyMKKyMgR2VuZXJhbCB0b29sY2hhaW4gb3B0aW9ucworIworQ1RfRk9SQ0VfU1lTUk9PVD15CitDVF9VU0VfU1lTUk9PVD15CitDVF9TWVNST09UX05BTUU9InN5c3Jvb3QiCitDVF9TWVNST09UX0RJUl9QUkVGSVg9IiIKK0NUX1RPT0xDSEFJTl9QS0dWRVJTSU9OPSIiCitDVF9UT09MQ0hBSU5fQlVHVVJMPSIiCisKKyMKKyMgVHVwbGUgY29tcGxldGlvbiBhbmQgYWxpYXNpbmcKKyMKK0NUX1RBUkdFVF9WRU5ET1I9InVua25vd25fbm9mcHUiCitDVF9UQVJHRVRfQUxJQVNfU0VEX0VYUFI9IiIKK0NUX1RBUkdFVF9BTElBUz0iIgorCisjCisjIFRvb2xjaGFpbiB0eXBlCisjCitDVF9DUk9TUz15CitDVF9UT09MQ0hBSU5fVFlQRT0iY3Jvc3MiCisKKyMKKyMgQnVpbGQgc3lzdGVtCisjCitDVF9CVUlMRD0iIgorQ1RfQlVJTERfUFJFRklYPSIiCitDVF9CVUlMRF9TVUZGSVg9IiIKKworIworIyBPcGVyYXRpbmcgU3lzdGVtCisjCitDVF9LRVJORUxfU1VQUE9SVFNfU0hBUkVEX0xJQlM9eQorQ1RfS0VSTkVMPSJsaW51eCIKK0NUX0tFUk5FTF9WRVJTSU9OPSIyLjYuMzEuMTQiCisjIENUX0tFUk5FTF9iYXJlX21ldGFsIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9saW51eD15CitDVF9LRVJORUxfYmFyZV9tZXRhbF9BVkFJTEFCTEU9eQorQ1RfS0VSTkVMX2xpbnV4X0FWQUlMQUJMRT15CisjIENUX0tFUk5FTF9WXzNfMF80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzMgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8xIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM5XzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzhfOCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zN182IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM2XzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzVfMTQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzRfMTAgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzNfMTkgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzJfNDYgaXMgbm90IHNldAorQ1RfS0VSTkVMX1ZfMl82XzMxXzE0PXkKKyMgQ1RfS0VSTkVMX1ZfMl82XzI3XzU5IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX0xJTlVYX0NVU1RPTSBpcyBub3Qgc2V0CitDVF9LRVJORUxfbWluZ3czMl9BVkFJTEFCTEU9eQorCisjCisjIENvbW1vbiBrZXJuZWwgb3B0aW9ucworIworQ1RfU0hBUkVEX0xJQlM9eQorCisjCisjIGxpbnV4IG90aGVyIG9wdGlvbnMKKyMKK0NUX0tFUk5FTF9MSU5VWF9WRVJCT1NJVFlfMD15CisjIENUX0tFUk5FTF9MSU5VWF9WRVJCT1NJVFlfMSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9MSU5VWF9WRVJCT1NJVFlfMiBpcyBub3Qgc2V0CitDVF9LRVJORUxfTElOVVhfVkVSQk9TRV9MRVZFTD0wCitDVF9LRVJORUxfTElOVVhfSU5TVEFMTF9DSEVDSz15CisKKyMKKyMgQmluYXJ5IHV0aWxpdGllcworIworQ1RfQVJDSF9CSU5GTVRfRUxGPXkKKworIworIyBHTlUgYmludXRpbHMKKyMKKyMgQ1RfQklOVVRJTFNfVl8yXzIxXzFhIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfVl8yXzIwXzFhIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX1ZfMl8xOV8xYT15CisjIENUX0JJTlVUSUxTX1ZfMl8xOGEgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVkVSU0lPTj0iMi4xOS4xYSIKK0NUX0JJTlVUSUxTXzJfMTlfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfMl8xOF9vcl9sYXRlcj15CitDVF9CSU5VVElMU19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQklOVVRJTFNfRk9SQ0VfTERfQkZEPXkKK0NUX0JJTlVUSUxTX0xJTktFUl9MRD15CitDVF9CSU5VVElMU19MSU5LRVJTX0xJU1Q9ImxkIgorQ1RfQklOVVRJTFNfTElOS0VSX0RFRkFVTFQ9ImJmZCIKK0NUX0JJTlVUSUxTX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVD15CitDVF9CSU5VVElMU19GT1JfVEFSR0VUX0lCRVJUWT15CitDVF9CSU5VVElMU19GT1JfVEFSR0VUX0JGRD15CisKKyMKKyMgQyBjb21waWxlcgorIworQ1RfQ0M9ImdjYyIKK0NUX0NDX1ZFUlNJT049IjQuMy4yIgorQ1RfQ0NfZ2NjPXkKKyMgQ1RfQ0NfVl80XzRfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzYgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM181IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzMgaXMgbm90IHNldAorQ1RfQ0NfVl80XzNfMj15CisjIENUX0NDX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfMl80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfMiBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfNF8yX29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzM9eQorQ1RfQ0NfR0NDXzRfM19vcl9sYXRlcj15CitDVF9DQ19HQ0NfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0NDX0dDQ19VU0VfR01QX01QRlI9eQorQ1RfQ0NfTEFOR19KQVZBX1VTRV9FQ0o9eQorQ1RfQ0NfTEFOR19GT1JUUkFOPXkKK0NUX0NDX1NVUFBPUlRfQ1hYPXkKK0NUX0NDX1NVUFBPUlRfRk9SVFJBTj15CitDVF9DQ19TVVBQT1JUX0pBVkE9eQorQ1RfQ0NfU1VQUE9SVF9BREE9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDPXkKK0NUX0NDX1NVUFBPUlRfT0JKQ1hYPXkKKworIworIyBBZGRpdGlvbmFsIHN1cHBvcnRlZCBsYW5ndWFnZXM6CisjCitDVF9DQ19MQU5HX0NYWD15CitDVF9DQ19MQU5HX0pBVkE9eQorCisjCisjIGdjYyBvdGhlciBvcHRpb25zCisjCitDVF9DQ19FTkFCTEVfQ1hYX0ZMQUdTPSIiCitDVF9DQ19DT1JFX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfQ0NfRVhUUkFfQ09ORklHX0FSUkFZPSIiCisKKyMKKyMgT3B0aW1pc2F0aW9uIGZlYXR1cmVzCisjCisKKyMKKyMgU2V0dGluZ3MgZm9yIGxpYnJhcmllcyBydW5uaW5nIG9uIHRhcmdldAorIworQ1RfQ0NfR0NDX0VOQUJMRV9UQVJHRVRfT1BUU1BBQ0U9eQorIyBDVF9DQ19HQ0NfTElCTVVERkxBUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJHT01QIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQlNTUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYy4gb2JzY3VyZSBvcHRpb25zLgorIworQ1RfQ0NfQ1hBX0FURVhJVD15CisjIENUX0NDX0dDQ19ESVNBQkxFX1BDSCBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfU0pMSl9FWENFUFRJT05TPW0KK0NUX0NDX0dDQ19MREJMXzEyOD1tCisKKyMKKyMgQy1saWJyYXJ5CisjCitDVF9MSUJDPSJnbGliYyIKK0NUX0xJQkNfVkVSU0lPTj0iMi45IgorIyBDVF9MSUJDX2VnbGliYyBpcyBub3Qgc2V0CitDVF9MSUJDX2dsaWJjPXkKKyMgQ1RfTElCQ191Q2xpYmMgaXMgbm90IHNldAorQ1RfTElCQ19lZ2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfZ2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfR0xJQkNfVEFSQkFMTD15CitDVF9MSUJDX0dMSUJDX1ZfMl85PXkKKyMgQ1RfTElCQ19HTElCQ19WXzJfOCBpcyBub3Qgc2V0CitDVF9MSUJDX21pbmd3X0FWQUlMQUJMRT15CitDVF9MSUJDX25ld2xpYl9BVkFJTEFCTEU9eQorQ1RfTElCQ19ub25lX0FWQUlMQUJMRT15CitDVF9MSUJDX3VDbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19TVVBQT1JUX1RIUkVBRFNfQU5ZPXkKK0NUX0xJQkNfU1VQUE9SVF9OUFRMPXkKK0NUX1RIUkVBRFM9Im5wdGwiCisKKyMKKyMgQ29tbW9uIEMgbGlicmFyeSBvcHRpb25zCisjCitDVF9USFJFQURTX05QVEw9eQorQ1RfTElCQ19YTEREPXkKK0NUX0xJQkNfZ2xpYmNfZmFtaWxseT15CitDVF9MSUJDX0dMSUJDX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfTElCQ19HTElCQ19DT05GSUdQQVJNUz0iIgorQ1RfTElCQ19HTElCQ19FWFRSQV9DRkxBR1M9IiIKK0NUX0xJQkNfRVhUUkFfQ0NfQVJHUz0iIgorIyBDVF9MSUJDX0RJU0FCTEVfVkVSU0lPTklORyBpcyBub3Qgc2V0CitDVF9MSUJDX09MREVTVF9BQkk9IiIKKyMgQ1RfTElCQ19HTElCQ19GT1JDRV9VTldJTkQgaXMgbm90IHNldAorQ1RfTElCQ19HTElCQ19VU0VfUE9SVFM9eQorQ1RfTElCQ19BRERPTlNfTElTVD0iIgorIyBDVF9MSUJDX0xPQ0FMRVMgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX05PTkUgaXMgbm90IHNldAorQ1RfTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9BU19IRUFERVJTPXkKKyMgQ1RfTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9DSE9TRU4gaXMgbm90IHNldAorQ1RfTElCQ19HTElCQ19NSU5fS0VSTkVMPSIyLjYuMzEuMTQiCisKKyMKKyMgZ2xpYmMgb3RoZXIgb3B0aW9ucworIworCisjCisjIFdBUk5JTkcgISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyMKKworIworIyAgIEZvciBnbGliYyA+PSAyLjgsIGl0IGNhbiBoYXBwZW4gdGhhdCB0aGUgdGFyYmFsbHMgICAgCisjCisKKyMKKyMgICBmb3IgdGhlIGFkZG9ucyBhcmUgbm90IGF2YWlsYWJsZSBmb3IgZG93bmxvYWQuICAgICAgIAorIworCisjCisjICAgSWYgdGhhdCBoYXBwZW5zLCBiYWQgbHVjay4uLiBUcnkgYSBwcmV2aW91cyB2ZXJzaW9uICAKKyMKKworIworIyAgIG9yIHRyeSBhZ2FpbiBsYXRlci4uLiA6LSggICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjCisKKyMKKyMgRGVidWcgZmFjaWxpdGllcworIworQ1RfREVCVUdfZG1hbGxvYz15CitDVF9ETUFMTE9DX1ZfNV81XzI9eQorQ1RfRE1BTExPQ19WRVJTSU9OPSI1LjUuMiIKK0NUX0RFQlVHX2R1bWE9eQorQ1RfRFVNQV9BPXkKK0NUX0RVTUFfU089eQorQ1RfRFVNQV9WXzJfNV8xNT15CitDVF9EVU1BX1ZFUlNJT049IjJfNV8xNSIKK0NUX0RFQlVHX2dkYj15CitDVF9HREJfQ1JPU1M9eQorIyBDVF9HREJfQ1JPU1NfU1RBVElDIGlzIG5vdCBzZXQKK0NUX0dEQl9DUk9TU19QWVRIT049eQorQ1RfR0RCX05BVElWRT15CisjIENUX0dEQl9OQVRJVkVfU1RBVElDIGlzIG5vdCBzZXQKK0NUX0dEQl9HREJTRVJWRVI9eQorQ1RfR0RCX0dEQlNFUlZFUl9TVEFUSUM9eQorCisjCisjIGdkYiB2ZXJzaW9uCisjCitDVF9HREJfVl82XzhhPXkKK0NUX0dEQl9WRVJTSU9OPSI2LjhhIgorIyBDVF9ERUJVR19sdHJhY2UgaXMgbm90IHNldAorQ1RfREVCVUdfc3RyYWNlPXkKK0NUX1NUUkFDRV9WXzRfNV8xOT15CisjIENUX1NUUkFDRV9WXzRfNV8xOCBpcyBub3Qgc2V0CitDVF9TVFJBQ0VfVkVSU0lPTj0iNC41LjE5IgorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMKKyMKK0NUX0NPTVBMSUJTX05FRURFRD15CitDVF9HTVBfTkVFREVEPXkKK0NUX01QRlJfTkVFREVEPXkKK0NUX0NPTVBMSUJTPXkKK0NUX0dNUD15CitDVF9NUEZSPXkKK0NUX0dNUF9WXzRfM18yPXkKKyMgQ1RfR01QX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9HTVBfVl80XzNfMCBpcyBub3Qgc2V0CitDVF9HTVBfVkVSU0lPTj0iNC4zLjIiCisjIENUX01QRlJfVl8zXzBfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZfMl80XzI9eQorIyBDVF9NUEZSX1ZfMl80XzEgaXMgbm90IHNldAorIyBDVF9NUEZSX1ZfMl80XzAgaXMgbm90IHNldAorQ1RfTVBGUl9WRVJTSU9OPSIyLjQuMiIKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzIGNvbW1vbiBvcHRpb25zCisjCisjIENUX0NPTVBMSUJTX0NIRUNLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9wb3dlcnBjLXVua25vd25fbm9mcHUtbGludXgtZ251L3JlcG9ydGVkLmJ5IGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3Bvd2VycGMtdW5rbm93bl9ub2ZwdS1saW51eC1nbnUvcmVwb3J0ZWQuYnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk3Y2U2NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9wb3dlcnBjLXVua25vd25fbm9mcHUtbGludXgtZ251L3JlcG9ydGVkLmJ5CkBAIC0wLDAgKzEsMyBAQAorcmVwb3J0ZXJfbmFtZT0iVGhvbWFzIEpPVVJEQU4iCityZXBvcnRlcl91cmw9IiIKK3JlcG9ydGVyX2NvbW1lbnQ9IiIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9wb3dlcnBjNjQtdW5rbm93bi1saW51eC1nbnUvY3Jvc3N0b29sLmNvbmZpZyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9wb3dlcnBjNjQtdW5rbm93bi1saW51eC1nbnUvY3Jvc3N0b29sLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmJkOTUxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3Bvd2VycGM2NC11bmtub3duLWxpbnV4LWdudS9jcm9zc3Rvb2wuY29uZmlnCkBAIC0wLDAgKzEsNDg1IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIGNyb3NzdG9vbC1ORyBoZ19kZWZhdWx0QDI3MjNfZDU2YmE2MDRiZTgwIENvbmZpZ3VyYXRpb24KKyMgU3VuIE9jdCAxNiAxODoxNzo1MCAyMDExCisjCitDVF9DT05GSUdVUkVfaGFzX3h6dXRpbHM9eQorQ1RfQ09ORklHVVJFX2hhc19jdnM9eQorQ1RfQ09ORklHVVJFX2hhc19zdm49eQorQ1RfTU9EVUxFUz15CisKKyMKKyMgUGF0aHMgYW5kIG1pc2Mgb3B0aW9ucworIworCisjCisjIGNyb3NzdG9vbC1ORyBiZWhhdmlvcgorIworIyBDVF9PQlNPTEVURSBpcyBub3Qgc2V0CitDVF9FWFBFUklNRU5UQUw9eQorIyBDVF9ERUJVR19DVCBpcyBub3Qgc2V0CisKKyMKKyMgUGF0aHMKKyMKK0NUX0xPQ0FMX1RBUkJBTExTX0RJUj0iJHtIT01FfS9zcmMiCitDVF9TQVZFX1RBUkJBTExTPXkKK0NUX1dPUktfRElSPSIke0NUX1RPUF9ESVJ9Ly5idWlsZCIKK0NUX1BSRUZJWF9ESVI9IiR7SE9NRX0veC10b29scy8ke0NUX1RBUkdFVH0iCitDVF9JTlNUQUxMX0RJUj0iJHtDVF9QUkVGSVhfRElSfSIKK0NUX1JNX1JGX1BSRUZJWF9ESVI9eQorQ1RfUkVNT1ZFX0RPQ1M9eQorQ1RfSU5TVEFMTF9ESVJfUk89eQorQ1RfU1RSSVBfQUxMX1RPT0xDSEFJTl9FWEVDVVRBQkxFUz15CisKKyMKKyMgRG93bmxvYWRpbmcKKyMKKyMgQ1RfRk9SQklEX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfRk9SQ0VfRE9XTkxPQUQgaXMgbm90IHNldAorQ1RfQ09OTkVDVF9USU1FT1VUPTEwCisjIENUX09OTFlfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9VU0VfTUlSUk9SIGlzIG5vdCBzZXQKKworIworIyBFeHRyYWN0aW5nCisjCisjIENUX0ZPUkNFX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfT1ZFUklERV9DT05GSUdfR1VFU1NfU1VCPXkKKyMgQ1RfT05MWV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX1BBVENIX0JVTkRMRUQ9eQorIyBDVF9QQVRDSF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9GQUxMQkFDS19MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0ZBTExCQUNLX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9OT05FIGlzIG5vdCBzZXQKK0NUX1BBVENIX09SREVSPSJidW5kbGVkIgorCisjCisjIEJ1aWxkIGJlaGF2aW9yCisjCitDVF9QQVJBTExFTF9KT0JTPTAKK0NUX0xPQUQ9MAorQ1RfVVNFX1BJUEVTPXkKK0NUX0VYVFJBX0ZMQUdTX0ZPUl9IT1NUPSIiCisjIENUX0NPTkZJR19TSEVMTF9TSCBpcyBub3Qgc2V0CisjIENUX0NPTkZJR19TSEVMTF9BU0ggaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMX0JBU0g9eQorIyBDVF9DT05GSUdfU0hFTExfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTD0iJHtiYXNofSIKKworIworIyBMb2dnaW5nCisjCisjIENUX0xPR19FUlJPUiBpcyBub3Qgc2V0CisjIENUX0xPR19XQVJOIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0lORk8gaXMgbm90IHNldAorQ1RfTE9HX0VYVFJBPXkKKyMgQ1RfTE9HX0FMTCBpcyBub3Qgc2V0CisjIENUX0xPR19ERUJVRyBpcyBub3Qgc2V0CitDVF9MT0dfTEVWRUxfTUFYPSJFWFRSQSIKKyMgQ1RfTE9HX1NFRV9UT09MU19XQVJOIGlzIG5vdCBzZXQKK0NUX0xPR19QUk9HUkVTU19CQVI9eQorQ1RfTE9HX1RPX0ZJTEU9eQorQ1RfTE9HX0ZJTEVfQ09NUFJFU1M9eQorCisjCisjIFRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIPSJwb3dlcnBjIgorQ1RfQVJDSF9TVVBQT1JUU18zMj15CitDVF9BUkNIX1NVUFBPUlRTXzY0PXkKK0NUX0FSQ0hfU1VQUE9SVF9BQkk9eQorQ1RfQVJDSF9TVVBQT1JUX0NQVT15CitDVF9BUkNIX1NVUFBPUlRfVFVORT15CitDVF9BUkNIX0RFRkFVTFRfMzI9eQorQ1RfQVJDSF9BQkk9IiIKK0NUX0FSQ0hfQ1BVPSIiCitDVF9BUkNIX1RVTkU9IiIKKyMgQ1RfQVJDSF8zMiBpcyBub3Qgc2V0CitDVF9BUkNIXzY0PXkKK0NUX0FSQ0hfQklUTkVTUz02NAorQ1RfQVJDSF9GTE9BVF9IVz15CisjIENUX0FSQ0hfRkxPQVRfU1cgaXMgbm90IHNldAorQ1RfVEFSR0VUX0NGTEFHUz0iIgorQ1RfVEFSR0VUX0xERkxBR1M9IiIKKyMgQ1RfQVJDSF9hbHBoYSBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYXJtIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9hdnIzMiBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYmxhY2tmaW4gaXMgbm90IHNldAorIyBDVF9BUkNIX202OGsgaXMgbm90IHNldAorIyBDVF9BUkNIX21pcHMgaXMgbm90IHNldAorQ1RfQVJDSF9wb3dlcnBjPXkKKyMgQ1RfQVJDSF9zMzkwIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zaCBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc3BhcmMgaXMgbm90IHNldAorIyBDVF9BUkNIX3g4NiBpcyBub3Qgc2V0CitDVF9BUkNIX2FscGhhX0FWQUlMQUJMRT15CitDVF9BUkNIX2FybV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hdnIzMl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9ibGFja2Zpbl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9tNjhrX0FWQUlMQUJMRT15CitDVF9BUkNIX21pcHNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfcG93ZXJwY19BVkFJTEFCTEU9eQorQ1RfQVJDSF9zMzkwX0FWQUlMQUJMRT15CitDVF9BUkNIX3NoX0FWQUlMQUJMRT15CitDVF9BUkNIX3NwYXJjX0FWQUlMQUJMRT15CitDVF9BUkNIX3g4Nl9BVkFJTEFCTEU9eQorCisjCisjIEdlbmVyaWMgdGFyZ2V0IG9wdGlvbnMKKyMKK0NUX0FSQ0hfVVNFX01NVT15CisKKyMKKyMgVGFyZ2V0IG9wdGltaXNhdGlvbnMKKyMKKworIworIyBwb3dlcnBjIG90aGVyIG9wdGlvbnMKKyMKK0NUX0FSQ0hfcG93ZXJwY19BQkk9IiIKK0NUX0FSQ0hfcG93ZXJwY19BQklfREVGQVVMVD15CisjIENUX0FSQ0hfcG93ZXJwY19BQklfU1BFIGlzIG5vdCBzZXQKKworIworIyBUb29sY2hhaW4gb3B0aW9ucworIworCisjCisjIEdlbmVyYWwgdG9vbGNoYWluIG9wdGlvbnMKKyMKK0NUX0ZPUkNFX1NZU1JPT1Q9eQorQ1RfVVNFX1NZU1JPT1Q9eQorQ1RfU1lTUk9PVF9OQU1FPSJzeXNyb290IgorQ1RfU1lTUk9PVF9ESVJfUFJFRklYPSIiCitDVF9XQU5UU19TVEFUSUNfTElOSz15CisjIENUX1NUQVRJQ19UT09MQ0hBSU4gaXMgbm90IHNldAorQ1RfVE9PTENIQUlOX1BLR1ZFUlNJT049IiIKK0NUX1RPT0xDSEFJTl9CVUdVUkw9IiIKKworIworIyBUdXBsZSBjb21wbGV0aW9uIGFuZCBhbGlhc2luZworIworQ1RfVEFSR0VUX1ZFTkRPUj0idW5rbm93biIKK0NUX1RBUkdFVF9BTElBU19TRURfRVhQUj0iIgorQ1RfVEFSR0VUX0FMSUFTPSIiCisKKyMKKyMgVG9vbGNoYWluIHR5cGUKKyMKKyMgQ1RfTkFUSVZFIGlzIG5vdCBzZXQKK0NUX0NST1NTPXkKKyMgQ1RfQ1JPU1NfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ1RfQ0FOQURJQU4gaXMgbm90IHNldAorQ1RfVE9PTENIQUlOX1RZUEU9ImNyb3NzIgorCisjCisjIEJ1aWxkIHN5c3RlbQorIworQ1RfQlVJTEQ9IiIKK0NUX0JVSUxEX1BSRUZJWD0iIgorQ1RfQlVJTERfU1VGRklYPSIiCisKKyMKKyMgT3BlcmF0aW5nIFN5c3RlbQorIworQ1RfS0VSTkVMX1NVUFBPUlRTX1NIQVJFRF9MSUJTPXkKK0NUX0tFUk5FTD0ibGludXgiCitDVF9LRVJORUxfVkVSU0lPTj0iMi42LjMxLjE0IgorIyBDVF9LRVJORUxfYmFyZV9tZXRhbCBpcyBub3Qgc2V0CitDVF9LRVJORUxfbGludXg9eQorQ1RfS0VSTkVMX2JhcmVfbWV0YWxfQVZBSUxBQkxFPXkKK0NUX0tFUk5FTF9saW51eF9BVkFJTEFCTEU9eQorIyBDVF9LRVJORUxfVl8zXzBfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8zIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzIgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zOV80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM4XzggaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzdfNiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNl80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM1XzE0IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM0XzEwIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzMzXzE5IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzMyXzQ2IGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9WXzJfNl8zMV8xND15CisjIENUX0tFUk5FTF9WXzJfNl8yN181OSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9MSU5VWF9DVVNUT00gaXMgbm90IHNldAorQ1RfS0VSTkVMX21pbmd3MzJfQVZBSUxBQkxFPXkKKworIworIyBDb21tb24ga2VybmVsIG9wdGlvbnMKKyMKK0NUX1NIQVJFRF9MSUJTPXkKKworIworIyBsaW51eCBvdGhlciBvcHRpb25zCisjCitDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzA9eQorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzEgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfVkVSQk9TSVRZXzIgaXMgbm90IHNldAorQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0VfTEVWRUw9MAorQ1RfS0VSTkVMX0xJTlVYX0lOU1RBTExfQ0hFQ0s9eQorCisjCisjIEJpbmFyeSB1dGlsaXRpZXMKKyMKK0NUX0FSQ0hfQklORk1UX0VMRj15CisKKyMKKyMgR05VIGJpbnV0aWxzCisjCisjIENUX0JJTlVUSUxTX1ZfMl8yMV81MyBpcyBub3Qgc2V0CisjIENUX0JJTlVUSUxTX1ZfMl8yMV8xYSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WXzJfMjBfMWE9eQorIyBDVF9CSU5VVElMU19WXzJfMTlfMWEgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19WXzJfMThhIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX1ZFUlNJT049IjIuMjAuMWEiCitDVF9CSU5VVElMU18yXzIwX29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMTlfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfMl8xOF9vcl9sYXRlcj15CitDVF9CSU5VVElMU19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQklOVVRJTFNfRk9SQ0VfTERfQkZEPXkKK0NUX0JJTlVUSUxTX0xJTktFUl9MRD15CitDVF9CSU5VVElMU19MSU5LRVJTX0xJU1Q9ImxkIgorQ1RfQklOVVRJTFNfTElOS0VSX0RFRkFVTFQ9ImJmZCIKK0NUX0JJTlVUSUxTX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVD15CitDVF9CSU5VVElMU19GT1JfVEFSR0VUX0lCRVJUWT15CitDVF9CSU5VVElMU19GT1JfVEFSR0VUX0JGRD15CisKKyMKKyMgQyBjb21waWxlcgorIworQ1RfQ0M9ImdjYyIKK0NUX0NDX1ZFUlNJT049IjQuNC41IgorQ1RfQ0NfZ2NjPXkKKyMgQ1RfQ0NfR0NDX1NIT1dfTElOQVJPIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzZfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF82XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF81XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNiBpcyBub3Qgc2V0CitDVF9DQ19WXzRfNF81PXkKKyMgQ1RfQ0NfVl80XzRfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzMgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8yIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM182IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfMl80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfMiBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfNF8yX29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzNfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDXzRfND15CitDVF9DQ19HQ0NfNF80X29yX2xhdGVyPXkKK0NUX0NDX0dDQ19IQVNfR1JBUEhJVEU9eQorQ1RfQ0NfR0NDX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9DQ19HQ0NfVVNFX0dNUF9NUEZSPXkKK0NUX0NDX0dDQ19VU0VfUFBMX0NMT09HPXkKK0NUX0NDX0xBTkdfSkFWQV9VU0VfRUNKPXkKK0NUX0NDX0xBTkdfRk9SVFJBTj15CitDVF9DQ19TVVBQT1JUX0NYWD15CitDVF9DQ19TVVBQT1JUX0ZPUlRSQU49eQorQ1RfQ0NfU1VQUE9SVF9KQVZBPXkKK0NUX0NDX1NVUFBPUlRfQURBPXkKK0NUX0NDX1NVUFBPUlRfT0JKQz15CitDVF9DQ19TVVBQT1JUX09CSkNYWD15CisKKyMKKyMgQWRkaXRpb25hbCBzdXBwb3J0ZWQgbGFuZ3VhZ2VzOgorIworQ1RfQ0NfTEFOR19DWFg9eQorQ1RfQ0NfTEFOR19KQVZBPXkKKyMgQ1RfQ0NfTEFOR19BREEgaXMgbm90IHNldAorIyBDVF9DQ19MQU5HX09CSkMgaXMgbm90IHNldAorIyBDVF9DQ19MQU5HX09CSkNYWCBpcyBub3Qgc2V0CitDVF9DQ19MQU5HX09USEVSUz0iIgorCisjCisjIGdjYyBvdGhlciBvcHRpb25zCisjCitDVF9DQ19FTkFCTEVfQ1hYX0ZMQUdTPSIiCitDVF9DQ19DT1JFX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfQ0NfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9DQ19TVEFUSUNfTElCU1REQ1hYPXkKKworIworIyBPcHRpbWlzYXRpb24gZmVhdHVyZXMKKyMKK0NUX0NDX0dDQ19VU0VfR1JBUEhJVEU9eQorCisjCisjIFNldHRpbmdzIGZvciBsaWJyYXJpZXMgcnVubmluZyBvbiB0YXJnZXQKKyMKK0NUX0NDX0dDQ19FTkFCTEVfVEFSR0VUX09QVFNQQUNFPXkKKyMgQ1RfQ0NfR0NDX0xJQk1VREZMQVAgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCR09NUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJTU1AgaXMgbm90IHNldAorCisjCisjIE1pc2MuIG9ic2N1cmUgb3B0aW9ucy4KKyMKK0NUX0NDX0NYQV9BVEVYSVQ9eQorIyBDVF9DQ19HQ0NfRElTQUJMRV9QQ0ggaXMgbm90IHNldAorQ1RfQ0NfR0NDX1NKTEpfRVhDRVBUSU9OUz1tCitDVF9DQ19HQ0NfTERCTF8xMjg9bQorCisjCisjIEMtbGlicmFyeQorIworQ1RfTElCQz0iZ2xpYmMiCitDVF9MSUJDX1ZFUlNJT049IjIuOSIKKyMgQ1RfTElCQ19lZ2xpYmMgaXMgbm90IHNldAorQ1RfTElCQ19nbGliYz15CisjIENUX0xJQkNfdUNsaWJjIGlzIG5vdCBzZXQKK0NUX0xJQkNfZWdsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX2dsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX0dMSUJDX1RBUkJBTEw9eQorIyBDVF9MSUJDX0dMSUJDX1ZfMl8xNCBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfVl8yXzEzIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19WXzJfMTJfMiBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfVl8yXzEyXzEgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX1ZfMl8xMV8xIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19WXzJfMTEgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX1ZfMl8xMF8xIGlzIG5vdCBzZXQKK0NUX0xJQkNfR0xJQkNfVl8yXzk9eQorIyBDVF9MSUJDX0dMSUJDX1ZfMl84IGlzIG5vdCBzZXQKK0NUX0xJQkNfbWluZ3dfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbmV3bGliX0FWQUlMQUJMRT15CitDVF9MSUJDX25vbmVfQVZBSUxBQkxFPXkKK0NUX0xJQkNfdUNsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX1NVUFBPUlRfVEhSRUFEU19BTlk9eQorQ1RfTElCQ19TVVBQT1JUX05QVEw9eQorQ1RfVEhSRUFEUz0ibnB0bCIKKworIworIyBDb21tb24gQyBsaWJyYXJ5IG9wdGlvbnMKKyMKK0NUX1RIUkVBRFNfTlBUTD15CitDVF9MSUJDX1hMREQ9eQorQ1RfTElCQ19nbGliY19mYW1pbGx5PXkKK0NUX0xJQkNfR0xJQkNfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9MSUJDX0dMSUJDX0NPTkZJR1BBUk1TPSIiCitDVF9MSUJDX0dMSUJDX0VYVFJBX0NGTEFHUz0iIgorQ1RfTElCQ19FWFRSQV9DQ19BUkdTPSIiCisjIENUX0xJQkNfRU5BQkxFX0ZPUlRJRklFRF9CVUlMRCBpcyBub3Qgc2V0CisjIENUX0xJQkNfRElTQUJMRV9WRVJTSU9OSU5HIGlzIG5vdCBzZXQKK0NUX0xJQkNfT0xERVNUX0FCST0iIgorIyBDVF9MSUJDX0dMSUJDX0ZPUkNFX1VOV0lORCBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfVVNFX1BPUlRTIGlzIG5vdCBzZXQKK0NUX0xJQkNfQURET05TX0xJU1Q9IiIKKyMgQ1RfTElCQ19MT0NBTEVTIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9OT05FIGlzIG5vdCBzZXQKK0NUX0xJQkNfR0xJQkNfS0VSTkVMX1ZFUlNJT05fQVNfSEVBREVSUz15CisjIENUX0xJQkNfR0xJQkNfS0VSTkVMX1ZFUlNJT05fQ0hPU0VOIGlzIG5vdCBzZXQKK0NUX0xJQkNfR0xJQkNfTUlOX0tFUk5FTD0iMi42LjMxLjE0IgorCisjCisjIGdsaWJjIG90aGVyIG9wdGlvbnMKKyMKKworIworIyBEZWJ1ZyBmYWNpbGl0aWVzCisjCitDVF9ERUJVR19kbWFsbG9jPXkKK0NUX0RNQUxMT0NfVl81XzVfMj15CitDVF9ETUFMTE9DX1ZFUlNJT049IjUuNS4yIgorQ1RfREVCVUdfZHVtYT15CitDVF9EVU1BX0E9eQorQ1RfRFVNQV9TTz15CitDVF9EVU1BX1ZfMl81XzE1PXkKK0NUX0RVTUFfVkVSU0lPTj0iMl81XzE1IgorQ1RfREVCVUdfZ2RiPXkKK0NUX0dEQl9DUk9TUz15CisjIENUX0dEQl9DUk9TU19TVEFUSUMgaXMgbm90IHNldAorQ1RfR0RCX0NST1NTX1BZVEhPTj15CitDVF9HREJfTkFUSVZFPXkKKyMgQ1RfR0RCX05BVElWRV9TVEFUSUMgaXMgbm90IHNldAorQ1RfR0RCX0dEQlNFUlZFUj15CitDVF9HREJfR0RCU0VSVkVSX1NUQVRJQz15CisKKyMKKyMgZ2RiIHZlcnNpb24KKyMKKyMgQ1RfREVCVUdfR0RCX1NIT1dfTElOQVJPIGlzIG5vdCBzZXQKKyMgQ1RfR0RCX1ZfN18zYSBpcyBub3Qgc2V0CisjIENUX0dEQl9WXzdfMmEgaXMgbm90IHNldAorIyBDVF9HREJfVl83XzFhIGlzIG5vdCBzZXQKKyMgQ1RfR0RCX1ZfN18wXzFhIGlzIG5vdCBzZXQKKyMgQ1RfR0RCX1ZfN18wYSBpcyBub3Qgc2V0CitDVF9HREJfVl82XzhhPXkKK0NUX0dEQl9WRVJTSU9OPSI2LjhhIgorIyBDVF9ERUJVR19sdHJhY2UgaXMgbm90IHNldAorQ1RfREVCVUdfc3RyYWNlPXkKKyMgQ1RfU1RSQUNFX1ZfNF81XzIwIGlzIG5vdCBzZXQKK0NUX1NUUkFDRV9WXzRfNV8xOT15CisjIENUX1NUUkFDRV9WXzRfNV8xOCBpcyBub3Qgc2V0CitDVF9TVFJBQ0VfVkVSU0lPTj0iNC41LjE5IgorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMKKyMKK0NUX0NPTVBMSUJTX05FRURFRD15CitDVF9HTVBfTkVFREVEPXkKK0NUX01QRlJfTkVFREVEPXkKK0NUX1BQTF9ORUVERUQ9eQorQ1RfQ0xPT0dfTkVFREVEPXkKK0NUX0NPTVBMSUJTPXkKK0NUX0dNUD15CitDVF9NUEZSPXkKK0NUX1BQTD15CitDVF9DTE9PRz15CisjIENUX0dNUF9WXzVfMF8yIGlzIG5vdCBzZXQKK0NUX0dNUF9WXzVfMF8xPXkKKyMgQ1RfR01QX1ZfNF8zXzIgaXMgbm90IHNldAorIyBDVF9HTVBfVl80XzNfMSBpcyBub3Qgc2V0CisjIENUX0dNUF9WXzRfM18wIGlzIG5vdCBzZXQKK0NUX0dNUF9WRVJTSU9OPSI1LjAuMSIKKyMgQ1RfTVBGUl9WXzNfMF8xIGlzIG5vdCBzZXQKK0NUX01QRlJfVl8zXzBfMD15CisjIENUX01QRlJfVl8yXzRfMiBpcyBub3Qgc2V0CisjIENUX01QRlJfVl8yXzRfMSBpcyBub3Qgc2V0CisjIENUX01QRlJfVl8yXzRfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZFUlNJT049IjMuMC4wIgorIyBDVF9QUExfVl8wXzExXzIgaXMgbm90IHNldAorIyBDVF9QUExfVl8wXzExXzEgaXMgbm90IHNldAorIyBDVF9QUExfVl8wXzExIGlzIG5vdCBzZXQKK0NUX1BQTF9WXzBfMTBfMj15CitDVF9QUExfVkVSU0lPTj0iMC4xMC4yIgorIyBDVF9DTE9PR19WXzBfMTVfMTEgaXMgbm90IHNldAorQ1RfQ0xPT0dfVl8wXzE1XzEwPXkKKyMgQ1RfQ0xPT0dfVl8wXzE1XzkgaXMgbm90IHNldAorIyBDVF9DTE9PR19WXzBfMTVfOCBpcyBub3Qgc2V0CisjIENUX0NMT09HX1ZfMF8xNV83IGlzIG5vdCBzZXQKKyMgQ1RfQ0xPT0dfVl8wXzE1XzYgaXMgbm90IHNldAorQ1RfQ0xPT0dfVkVSU0lPTj0iMC4xNS4xMCIKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzIGNvbW1vbiBvcHRpb25zCisjCisjIENUX0NPTVBMSUJTX0NIRUNLIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gdG9vbHMKKyMKKworIworIyBSRUFEIEhFTFAgYmVmb3JlIHlvdSBzYXkgJ1knIGJlbG93ICEhIQorIworIyBDVF9DT01QX1RPT0xTIGlzIG5vdCBzZXQKKworIworIyBUZXN0IHN1aXRlCisjCisjIENUX1RFU1RfU1VJVEVfR0NDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9wb3dlcnBjNjQtdW5rbm93bi1saW51eC1nbnUvcmVwb3J0ZWQuYnkgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvcG93ZXJwYzY0LXVua25vd24tbGludXgtZ251L3JlcG9ydGVkLmJ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMmNiNTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvcG93ZXJwYzY0LXVua25vd24tbGludXgtZ251L3JlcG9ydGVkLmJ5CkBAIC0wLDAgKzEsMyBAQAorcmVwb3J0ZXJfbmFtZT0iWWFubiBFLiBNT1JJTiIKK3JlcG9ydGVyX3VybD0iaHR0cDovL3ltb3Jpbi5pcy1hLWdlZWsub3JnL2Rva3V3aWtpL3Byb2plY3RzL2Nyb3NzdG9vbCIKK3JlcG9ydGVyX2NvbW1lbnQ9IiIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9zMzkwLWlibS1saW51eC1nbnUvY3Jvc3N0b29sLmNvbmZpZyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9zMzkwLWlibS1saW51eC1nbnUvY3Jvc3N0b29sLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWQ3MTRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3MzOTAtaWJtLWxpbnV4LWdudS9jcm9zc3Rvb2wuY29uZmlnCkBAIC0wLDAgKzEsNDIwIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIGNyb3NzdG9vbC1ORyBoZ19kZWZhdWx0QDI3MjNfZDU2YmE2MDRiZTgwIENvbmZpZ3VyYXRpb24KKyMgU3VuIE9jdCAxNiAxODoxOTo0MSAyMDExCisjCitDVF9DT05GSUdVUkVfaGFzX3h6dXRpbHM9eQorQ1RfQ09ORklHVVJFX2hhc19jdnM9eQorQ1RfQ09ORklHVVJFX2hhc19zdm49eQorQ1RfTU9EVUxFUz15CisKKyMKKyMgUGF0aHMgYW5kIG1pc2Mgb3B0aW9ucworIworCisjCisjIGNyb3NzdG9vbC1ORyBiZWhhdmlvcgorIworIyBDVF9PQlNPTEVURSBpcyBub3Qgc2V0CitDVF9FWFBFUklNRU5UQUw9eQorIyBDVF9ERUJVR19DVCBpcyBub3Qgc2V0CisKKyMKKyMgUGF0aHMKKyMKK0NUX0xPQ0FMX1RBUkJBTExTX0RJUj0iJHtIT01FfS9zcmMiCitDVF9TQVZFX1RBUkJBTExTPXkKK0NUX1dPUktfRElSPSIke0NUX1RPUF9ESVJ9Ly5idWlsZCIKK0NUX1BSRUZJWF9ESVI9IiR7SE9NRX0veC10b29scy8ke0NUX1RBUkdFVH0iCitDVF9JTlNUQUxMX0RJUj0iJHtDVF9QUkVGSVhfRElSfSIKK0NUX1JNX1JGX1BSRUZJWF9ESVI9eQorQ1RfUkVNT1ZFX0RPQ1M9eQorQ1RfSU5TVEFMTF9ESVJfUk89eQorQ1RfU1RSSVBfQUxMX1RPT0xDSEFJTl9FWEVDVVRBQkxFUz15CisKKyMKKyMgRG93bmxvYWRpbmcKKyMKKyMgQ1RfRk9SQklEX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfRk9SQ0VfRE9XTkxPQUQgaXMgbm90IHNldAorQ1RfQ09OTkVDVF9USU1FT1VUPTEwCisjIENUX09OTFlfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9VU0VfTUlSUk9SIGlzIG5vdCBzZXQKKworIworIyBFeHRyYWN0aW5nCisjCisjIENUX0ZPUkNFX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfT1ZFUklERV9DT05GSUdfR1VFU1NfU1VCPXkKKyMgQ1RfT05MWV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX1BBVENIX0JVTkRMRUQ9eQorIyBDVF9QQVRDSF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9GQUxMQkFDS19MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0ZBTExCQUNLX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9OT05FIGlzIG5vdCBzZXQKK0NUX1BBVENIX09SREVSPSJidW5kbGVkIgorCisjCisjIEJ1aWxkIGJlaGF2aW9yCisjCitDVF9QQVJBTExFTF9KT0JTPTAKK0NUX0xPQUQ9MAorQ1RfVVNFX1BJUEVTPXkKK0NUX0VYVFJBX0ZMQUdTX0ZPUl9IT1NUPSIiCisjIENUX0NPTkZJR19TSEVMTF9TSCBpcyBub3Qgc2V0CisjIENUX0NPTkZJR19TSEVMTF9BU0ggaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMX0JBU0g9eQorIyBDVF9DT05GSUdfU0hFTExfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTD0iJHtiYXNofSIKKworIworIyBMb2dnaW5nCisjCisjIENUX0xPR19FUlJPUiBpcyBub3Qgc2V0CisjIENUX0xPR19XQVJOIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0lORk8gaXMgbm90IHNldAorQ1RfTE9HX0VYVFJBPXkKKyMgQ1RfTE9HX0FMTCBpcyBub3Qgc2V0CisjIENUX0xPR19ERUJVRyBpcyBub3Qgc2V0CitDVF9MT0dfTEVWRUxfTUFYPSJFWFRSQSIKKyMgQ1RfTE9HX1NFRV9UT09MU19XQVJOIGlzIG5vdCBzZXQKK0NUX0xPR19QUk9HUkVTU19CQVI9eQorQ1RfTE9HX1RPX0ZJTEU9eQorQ1RfTE9HX0ZJTEVfQ09NUFJFU1M9eQorCisjCisjIFRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIPSJzMzkwIgorQ1RfQVJDSF9TVVBQT1JUU18zMj15CitDVF9BUkNIX1NVUFBPUlRTXzY0PXkKK0NUX0FSQ0hfU1VQUE9SVF9GUFU9eQorQ1RfQVJDSF9ERUZBVUxUXzMyPXkKK0NUX0FSQ0hfRlBVPSIiCitDVF9BUkNIXzMyPXkKKyMgQ1RfQVJDSF82NCBpcyBub3Qgc2V0CitDVF9BUkNIX0JJVE5FU1M9MzIKK0NUX0FSQ0hfRkxPQVRfSFc9eQorIyBDVF9BUkNIX0ZMT0FUX1NXIGlzIG5vdCBzZXQKK0NUX1RBUkdFVF9DRkxBR1M9IiIKK0NUX1RBUkdFVF9MREZMQUdTPSIiCisjIENUX0FSQ0hfYWxwaGEgaXMgbm90IHNldAorIyBDVF9BUkNIX2FybSBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYXZyMzIgaXMgbm90IHNldAorIyBDVF9BUkNIX2JsYWNrZmluIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9tNjhrIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9taXBzIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9wb3dlcnBjIGlzIG5vdCBzZXQKK0NUX0FSQ0hfczM5MD15CisjIENUX0FSQ0hfc2ggaXMgbm90IHNldAorIyBDVF9BUkNIX3NwYXJjIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF94ODYgaXMgbm90IHNldAorQ1RfQVJDSF9hbHBoYV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hcm1fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXZyMzJfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYmxhY2tmaW5fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbTY4a19BVkFJTEFCTEU9eQorQ1RfQVJDSF9taXBzX0FWQUlMQUJMRT15CitDVF9BUkNIX3Bvd2VycGNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfczM5MF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zaF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zcGFyY19BVkFJTEFCTEU9eQorQ1RfQVJDSF94ODZfQVZBSUxBQkxFPXkKKworIworIyBHZW5lcmljIHRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIX1VTRV9NTVU9eQorCisjCisjIFRhcmdldCBvcHRpbWlzYXRpb25zCisjCisKKyMKKyMgVG9vbGNoYWluIG9wdGlvbnMKKyMKKworIworIyBHZW5lcmFsIHRvb2xjaGFpbiBvcHRpb25zCisjCitDVF9GT1JDRV9TWVNST09UPXkKK0NUX1VTRV9TWVNST09UPXkKK0NUX1NZU1JPT1RfTkFNRT0ic3lzcm9vdCIKK0NUX1NZU1JPT1RfRElSX1BSRUZJWD0iIgorIyBDVF9TVEFUSUNfVE9PTENIQUlOIGlzIG5vdCBzZXQKK0NUX1RPT0xDSEFJTl9QS0dWRVJTSU9OPSIiCitDVF9UT09MQ0hBSU5fQlVHVVJMPSIiCisKKyMKKyMgVHVwbGUgY29tcGxldGlvbiBhbmQgYWxpYXNpbmcKKyMKK0NUX1RBUkdFVF9WRU5ET1I9InVua25vd24iCitDVF9UQVJHRVRfQUxJQVNfU0VEX0VYUFI9IiIKK0NUX1RBUkdFVF9BTElBUz0iIgorCisjCisjIFRvb2xjaGFpbiB0eXBlCisjCisjIENUX05BVElWRSBpcyBub3Qgc2V0CitDVF9DUk9TUz15CisjIENUX0NST1NTX05BVElWRSBpcyBub3Qgc2V0CisjIENUX0NBTkFESUFOIGlzIG5vdCBzZXQKK0NUX1RPT0xDSEFJTl9UWVBFPSJjcm9zcyIKKworIworIyBCdWlsZCBzeXN0ZW0KKyMKK0NUX0JVSUxEPSIiCitDVF9CVUlMRF9QUkVGSVg9IiIKK0NUX0JVSUxEX1NVRkZJWD0iIgorCisjCisjIE9wZXJhdGluZyBTeXN0ZW0KKyMKK0NUX0tFUk5FTF9TVVBQT1JUU19TSEFSRURfTElCUz15CitDVF9LRVJORUw9ImxpbnV4IgorQ1RfS0VSTkVMX1ZFUlNJT049IjIuNi4zMS4xNCIKKyMgQ1RfS0VSTkVMX2JhcmVfbWV0YWwgaXMgbm90IHNldAorQ1RfS0VSTkVMX2xpbnV4PXkKK0NUX0tFUk5FTF9iYXJlX21ldGFsX0FWQUlMQUJMRT15CitDVF9LRVJORUxfbGludXhfQVZBSUxBQkxFPXkKKyMgQ1RfS0VSTkVMX1ZfM18wXzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMyBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8yIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzEgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzAgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzlfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zOF84IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM3XzYgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzZfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNV8xNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNF8xMCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zM18xOSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zMl80NiBpcyBub3Qgc2V0CitDVF9LRVJORUxfVl8yXzZfMzFfMTQ9eQorIyBDVF9LRVJORUxfVl8yXzZfMjdfNTkgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9taW5ndzMyX0FWQUlMQUJMRT15CisKKyMKKyMgQ29tbW9uIGtlcm5lbCBvcHRpb25zCisjCitDVF9TSEFSRURfTElCUz15CisKKyMKKyMgbGludXggb3RoZXIgb3B0aW9ucworIworQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8wPXkKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8xIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8yIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9MSU5VWF9WRVJCT1NFX0xFVkVMPTAKK0NUX0tFUk5FTF9MSU5VWF9JTlNUQUxMX0NIRUNLPXkKKworIworIyBCaW5hcnkgdXRpbGl0aWVzCisjCitDVF9BUkNIX0JJTkZNVF9FTEY9eQorCisjCisjIEdOVSBiaW51dGlscworIworIyBDVF9CSU5VVElMU19WXzJfMjFfNTMgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19WXzJfMjFfMWEgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVl8yXzIwXzFhPXkKKyMgQ1RfQklOVVRJTFNfVl8yXzE5XzFhIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfVl8yXzE4YSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WRVJTSU9OPSIyLjIwLjFhIgorQ1RfQklOVVRJTFNfMl8yMF9vcl9sYXRlcj15CitDVF9CSU5VVElMU18yXzE5X29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMThfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0JJTlVUSUxTX0ZPUkNFX0xEX0JGRD15CitDVF9CSU5VVElMU19MSU5LRVJfTEQ9eQorQ1RfQklOVVRJTFNfTElOS0VSU19MSVNUPSJsZCIKK0NUX0JJTlVUSUxTX0xJTktFUl9ERUZBVUxUPSJiZmQiCitDVF9CSU5VVElMU19FWFRSQV9DT05GSUdfQVJSQVk9IiIKKyMgQ1RfQklOVVRJTFNfRk9SX1RBUkdFVCBpcyBub3Qgc2V0CisKKyMKKyMgQyBjb21waWxlcgorIworQ1RfQ0M9ImdjYyIKK0NUX0NDX1ZFUlNJT049IjQuMy40IgorQ1RfQ0NfZ2NjPXkKKyMgQ1RfQ0NfR0NDX1NIT1dfTElOQVJPIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzZfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF82XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF81XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzYgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM181IGlzIG5vdCBzZXQKK0NUX0NDX1ZfNF8zXzQ9eQorIyBDVF9DQ19WXzRfM18zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfMl80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfMiBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfNF8yX29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzM9eQorQ1RfQ0NfR0NDXzRfM19vcl9sYXRlcj15CitDVF9DQ19HQ0NfSEFTX1BLR1ZFUlNJT05fQlVHVVJMPXkKK0NUX0NDX0dDQ19VU0VfR01QX01QRlI9eQorIyBDVF9DQ19MQU5HX0ZPUlRSQU4gaXMgbm90IHNldAorQ1RfQ0NfU1VQUE9SVF9DWFg9eQorQ1RfQ0NfU1VQUE9SVF9GT1JUUkFOPXkKK0NUX0NDX1NVUFBPUlRfSkFWQT15CitDVF9DQ19TVVBQT1JUX0FEQT15CitDVF9DQ19TVVBQT1JUX09CSkM9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDWFg9eQorCisjCisjIEFkZGl0aW9uYWwgc3VwcG9ydGVkIGxhbmd1YWdlczoKKyMKK0NUX0NDX0xBTkdfQ1hYPXkKKyMgQ1RfQ0NfTEFOR19KQVZBIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfTEFOR19BREEgaXMgbm90IHNldAorIyBDVF9DQ19MQU5HX09CSkMgaXMgbm90IHNldAorIyBDVF9DQ19MQU5HX09CSkNYWCBpcyBub3Qgc2V0CitDVF9DQ19MQU5HX09USEVSUz0iIgorCisjCisjIGdjYyBvdGhlciBvcHRpb25zCisjCitDVF9DQ19FTkFCTEVfQ1hYX0ZMQUdTPSIiCitDVF9DQ19DT1JFX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfQ0NfRVhUUkFfQ09ORklHX0FSUkFZPSIiCisKKyMKKyMgT3B0aW1pc2F0aW9uIGZlYXR1cmVzCisjCisKKyMKKyMgU2V0dGluZ3MgZm9yIGxpYnJhcmllcyBydW5uaW5nIG9uIHRhcmdldAorIworQ1RfQ0NfR0NDX0VOQUJMRV9UQVJHRVRfT1BUU1BBQ0U9eQorIyBDVF9DQ19HQ0NfTElCTVVERkxBUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJHT01QIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQlNTUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYy4gb2JzY3VyZSBvcHRpb25zLgorIworQ1RfQ0NfQ1hBX0FURVhJVD15CisjIENUX0NDX0dDQ19ESVNBQkxFX1BDSCBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfU0pMSl9FWENFUFRJT05TPW0KK0NUX0NDX0dDQ19MREJMXzEyOD1tCisKKyMKKyMgQy1saWJyYXJ5CisjCitDVF9MSUJDPSJnbGliYyIKK0NUX0xJQkNfVkVSU0lPTj0iMi45IgorIyBDVF9MSUJDX2VnbGliYyBpcyBub3Qgc2V0CitDVF9MSUJDX2dsaWJjPXkKKyMgQ1RfTElCQ191Q2xpYmMgaXMgbm90IHNldAorQ1RfTElCQ19lZ2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfZ2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfR0xJQkNfVEFSQkFMTD15CisjIENUX0xJQkNfR0xJQkNfVl8yXzE0IGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19WXzJfMTMgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX1ZfMl8xMl8yIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19WXzJfMTJfMSBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfVl8yXzExXzEgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX1ZfMl8xMSBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfVl8yXzEwXzEgaXMgbm90IHNldAorQ1RfTElCQ19HTElCQ19WXzJfOT15CisjIENUX0xJQkNfR0xJQkNfVl8yXzggaXMgbm90IHNldAorQ1RfTElCQ19taW5nd19BVkFJTEFCTEU9eQorQ1RfTElCQ19uZXdsaWJfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbm9uZV9BVkFJTEFCTEU9eQorQ1RfTElCQ191Q2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfU1VQUE9SVF9USFJFQURTX0FOWT15CitDVF9MSUJDX1NVUFBPUlRfTlBUTD15CitDVF9USFJFQURTPSJucHRsIgorCisjCisjIENvbW1vbiBDIGxpYnJhcnkgb3B0aW9ucworIworQ1RfVEhSRUFEU19OUFRMPXkKK0NUX0xJQkNfWExERD15CitDVF9MSUJDX2dsaWJjX2ZhbWlsbHk9eQorQ1RfTElCQ19HTElCQ19FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0xJQkNfR0xJQkNfQ09ORklHUEFSTVM9IiIKK0NUX0xJQkNfR0xJQkNfRVhUUkFfQ0ZMQUdTPSIiCitDVF9MSUJDX0VYVFJBX0NDX0FSR1M9IiIKKyMgQ1RfTElCQ19FTkFCTEVfRk9SVElGSUVEX0JVSUxEIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19ESVNBQkxFX1ZFUlNJT05JTkcgaXMgbm90IHNldAorQ1RfTElCQ19PTERFU1RfQUJJPSIiCitDVF9MSUJDX0dMSUJDX0ZPUkNFX1VOV0lORD15CisjIENUX0xJQkNfR0xJQkNfVVNFX1BPUlRTIGlzIG5vdCBzZXQKK0NUX0xJQkNfQURET05TX0xJU1Q9IiIKKyMgQ1RfTElCQ19MT0NBTEVTIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9OT05FIGlzIG5vdCBzZXQKK0NUX0xJQkNfR0xJQkNfS0VSTkVMX1ZFUlNJT05fQVNfSEVBREVSUz15CisjIENUX0xJQkNfR0xJQkNfS0VSTkVMX1ZFUlNJT05fQ0hPU0VOIGlzIG5vdCBzZXQKK0NUX0xJQkNfR0xJQkNfTUlOX0tFUk5FTD0iMi42LjMxLjE0IgorCisjCisjIGdsaWJjIG90aGVyIG9wdGlvbnMKKyMKKworIworIyBEZWJ1ZyBmYWNpbGl0aWVzCisjCisjIENUX0RFQlVHX2RtYWxsb2MgaXMgbm90IHNldAorIyBDVF9ERUJVR19kdW1hIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfZ2RiIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfbHRyYWNlIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfc3RyYWNlIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzCisjCitDVF9DT01QTElCU19ORUVERUQ9eQorQ1RfR01QX05FRURFRD15CitDVF9NUEZSX05FRURFRD15CitDVF9DT01QTElCUz15CitDVF9HTVA9eQorQ1RfTVBGUj15CisjIENUX0dNUF9WXzVfMF8yIGlzIG5vdCBzZXQKKyMgQ1RfR01QX1ZfNV8wXzEgaXMgbm90IHNldAorQ1RfR01QX1ZfNF8zXzI9eQorIyBDVF9HTVBfVl80XzNfMSBpcyBub3Qgc2V0CisjIENUX0dNUF9WXzRfM18wIGlzIG5vdCBzZXQKK0NUX0dNUF9WRVJTSU9OPSI0LjMuMiIKKyMgQ1RfTVBGUl9WXzNfMF8xIGlzIG5vdCBzZXQKKyMgQ1RfTVBGUl9WXzNfMF8wIGlzIG5vdCBzZXQKK0NUX01QRlJfVl8yXzRfMj15CisjIENUX01QRlJfVl8yXzRfMSBpcyBub3Qgc2V0CisjIENUX01QRlJfVl8yXzRfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZFUlNJT049IjIuNC4yIgorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMgY29tbW9uIG9wdGlvbnMKKyMKKyMgQ1RfQ09NUExJQlNfQ0hFQ0sgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiB0b29scworIworCisjCisjIFJFQUQgSEVMUCBiZWZvcmUgeW91IHNheSAnWScgYmVsb3cgISEhCisjCisjIENUX0NPTVBfVE9PTFMgaXMgbm90IHNldAorCisjCisjIFRlc3Qgc3VpdGUKKyMKKyMgQ1RfVEVTVF9TVUlURV9HQ0MgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3MzOTAtaWJtLWxpbnV4LWdudS9yZXBvcnRlZC5ieSBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9zMzkwLWlibS1saW51eC1nbnUvcmVwb3J0ZWQuYnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEzYzI5MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9zMzkwLWlibS1saW51eC1nbnUvcmVwb3J0ZWQuYnkKQEAgLTAsMCArMSwzIEBACityZXBvcnRlcl9uYW1lPSJIYXJvbGQgR3JvdmVzdGVlbiIKK3JlcG9ydGVyX3VybD0iaHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2Nyb3NzZ2NjLzIwMDktMTEvbXNnMDAwNTIuaHRtbCIKK3JlcG9ydGVyX2NvbW1lbnQ9IiIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9zMzkweC1pYm0tbGludXgtZ251L2Nyb3NzdG9vbC5jb25maWcgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvczM5MHgtaWJtLWxpbnV4LWdudS9jcm9zc3Rvb2wuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmM2ZiZjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvczM5MHgtaWJtLWxpbnV4LWdudS9jcm9zc3Rvb2wuY29uZmlnCkBAIC0wLDAgKzEsNDQxIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIGNyb3NzdG9vbC1ORyBoZ19kZWZhdWx0QDI3MjNfZDU2YmE2MDRiZTgwIENvbmZpZ3VyYXRpb24KKyMgU3VuIE9jdCAxNiAxODoyMDoxNCAyMDExCisjCitDVF9DT05GSUdVUkVfaGFzX3h6dXRpbHM9eQorQ1RfQ09ORklHVVJFX2hhc19jdnM9eQorQ1RfQ09ORklHVVJFX2hhc19zdm49eQorQ1RfTU9EVUxFUz15CisKKyMKKyMgUGF0aHMgYW5kIG1pc2Mgb3B0aW9ucworIworCisjCisjIGNyb3NzdG9vbC1ORyBiZWhhdmlvcgorIworIyBDVF9PQlNPTEVURSBpcyBub3Qgc2V0CitDVF9FWFBFUklNRU5UQUw9eQorIyBDVF9ERUJVR19DVCBpcyBub3Qgc2V0CisKKyMKKyMgUGF0aHMKKyMKK0NUX0xPQ0FMX1RBUkJBTExTX0RJUj0iJHtIT01FfS9zcmMiCitDVF9TQVZFX1RBUkJBTExTPXkKK0NUX1dPUktfRElSPSIke0NUX1RPUF9ESVJ9Ly5idWlsZCIKK0NUX1BSRUZJWF9ESVI9IiR7SE9NRX0veC10b29scy8ke0NUX1RBUkdFVH0iCitDVF9JTlNUQUxMX0RJUj0iJHtDVF9QUkVGSVhfRElSfSIKK0NUX1JNX1JGX1BSRUZJWF9ESVI9eQorQ1RfUkVNT1ZFX0RPQ1M9eQorQ1RfSU5TVEFMTF9ESVJfUk89eQorQ1RfU1RSSVBfQUxMX1RPT0xDSEFJTl9FWEVDVVRBQkxFUz15CisKKyMKKyMgRG93bmxvYWRpbmcKKyMKKyMgQ1RfRk9SQklEX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfRk9SQ0VfRE9XTkxPQUQgaXMgbm90IHNldAorQ1RfQ09OTkVDVF9USU1FT1VUPTEwCisjIENUX09OTFlfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9VU0VfTUlSUk9SIGlzIG5vdCBzZXQKKworIworIyBFeHRyYWN0aW5nCisjCisjIENUX0ZPUkNFX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfT1ZFUklERV9DT05GSUdfR1VFU1NfU1VCPXkKKyMgQ1RfT05MWV9FWFRSQUNUIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9CVU5ETEVEX0ZBTExCQUNLX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTE9DQUxfRkFMTEJBQ0tfQlVORExFRCBpcyBub3Qgc2V0CitDVF9QQVRDSF9OT05FPXkKK0NUX1BBVENIX09SREVSPSJub25lIgorCisjCisjIEJ1aWxkIGJlaGF2aW9yCisjCitDVF9QQVJBTExFTF9KT0JTPTAKK0NUX0xPQUQ9MAorQ1RfVVNFX1BJUEVTPXkKK0NUX0VYVFJBX0ZMQUdTX0ZPUl9IT1NUPSIiCisjIENUX0NPTkZJR19TSEVMTF9TSCBpcyBub3Qgc2V0CisjIENUX0NPTkZJR19TSEVMTF9BU0ggaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMX0JBU0g9eQorIyBDVF9DT05GSUdfU0hFTExfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTD0iJHtiYXNofSIKKworIworIyBMb2dnaW5nCisjCisjIENUX0xPR19FUlJPUiBpcyBub3Qgc2V0CisjIENUX0xPR19XQVJOIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0lORk8gaXMgbm90IHNldAorQ1RfTE9HX0VYVFJBPXkKKyMgQ1RfTE9HX0FMTCBpcyBub3Qgc2V0CisjIENUX0xPR19ERUJVRyBpcyBub3Qgc2V0CitDVF9MT0dfTEVWRUxfTUFYPSJFWFRSQSIKKyMgQ1RfTE9HX1NFRV9UT09MU19XQVJOIGlzIG5vdCBzZXQKK0NUX0xPR19QUk9HUkVTU19CQVI9eQorQ1RfTE9HX1RPX0ZJTEU9eQorQ1RfTE9HX0ZJTEVfQ09NUFJFU1M9eQorCisjCisjIFRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIPSJzMzkwIgorQ1RfQVJDSF9TVVBQT1JUU18zMj15CitDVF9BUkNIX1NVUFBPUlRTXzY0PXkKK0NUX0FSQ0hfU1VQUE9SVF9GUFU9eQorQ1RfQVJDSF9ERUZBVUxUXzMyPXkKK0NUX0FSQ0hfRlBVPSIiCisjIENUX0FSQ0hfMzIgaXMgbm90IHNldAorQ1RfQVJDSF82ND15CitDVF9BUkNIX0JJVE5FU1M9NjQKK0NUX0FSQ0hfRkxPQVRfSFc9eQorIyBDVF9BUkNIX0ZMT0FUX1NXIGlzIG5vdCBzZXQKK0NUX1RBUkdFVF9DRkxBR1M9IiIKK0NUX1RBUkdFVF9MREZMQUdTPSIiCisjIENUX0FSQ0hfYWxwaGEgaXMgbm90IHNldAorIyBDVF9BUkNIX2FybSBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYXZyMzIgaXMgbm90IHNldAorIyBDVF9BUkNIX2JsYWNrZmluIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9tNjhrIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9taXBzIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9wb3dlcnBjIGlzIG5vdCBzZXQKK0NUX0FSQ0hfczM5MD15CisjIENUX0FSQ0hfc2ggaXMgbm90IHNldAorIyBDVF9BUkNIX3NwYXJjIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF94ODYgaXMgbm90IHNldAorQ1RfQVJDSF9hbHBoYV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hcm1fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXZyMzJfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYmxhY2tmaW5fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbTY4a19BVkFJTEFCTEU9eQorQ1RfQVJDSF9taXBzX0FWQUlMQUJMRT15CitDVF9BUkNIX3Bvd2VycGNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfczM5MF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zaF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zcGFyY19BVkFJTEFCTEU9eQorQ1RfQVJDSF94ODZfQVZBSUxBQkxFPXkKKworIworIyBHZW5lcmljIHRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIX1VTRV9NTVU9eQorCisjCisjIFRhcmdldCBvcHRpbWlzYXRpb25zCisjCisKKyMKKyMgVG9vbGNoYWluIG9wdGlvbnMKKyMKKworIworIyBHZW5lcmFsIHRvb2xjaGFpbiBvcHRpb25zCisjCitDVF9GT1JDRV9TWVNST09UPXkKK0NUX1VTRV9TWVNST09UPXkKK0NUX1NZU1JPT1RfTkFNRT0ic3lzcm9vdCIKK0NUX1NZU1JPT1RfRElSX1BSRUZJWD0iIgorQ1RfV0FOVFNfU1RBVElDX0xJTks9eQorIyBDVF9TVEFUSUNfVE9PTENIQUlOIGlzIG5vdCBzZXQKK0NUX1RPT0xDSEFJTl9QS0dWRVJTSU9OPSIiCitDVF9UT09MQ0hBSU5fQlVHVVJMPSIiCisKKyMKKyMgVHVwbGUgY29tcGxldGlvbiBhbmQgYWxpYXNpbmcKKyMKK0NUX1RBUkdFVF9WRU5ET1I9InVua25vd24iCitDVF9UQVJHRVRfQUxJQVNfU0VEX0VYUFI9IiIKK0NUX1RBUkdFVF9BTElBUz0iIgorCisjCisjIFRvb2xjaGFpbiB0eXBlCisjCisjIENUX05BVElWRSBpcyBub3Qgc2V0CitDVF9DUk9TUz15CisjIENUX0NST1NTX05BVElWRSBpcyBub3Qgc2V0CisjIENUX0NBTkFESUFOIGlzIG5vdCBzZXQKK0NUX1RPT0xDSEFJTl9UWVBFPSJjcm9zcyIKKworIworIyBCdWlsZCBzeXN0ZW0KKyMKK0NUX0JVSUxEPSIiCitDVF9CVUlMRF9QUkVGSVg9IiIKK0NUX0JVSUxEX1NVRkZJWD0iIgorCisjCisjIE9wZXJhdGluZyBTeXN0ZW0KKyMKK0NUX0tFUk5FTF9TVVBQT1JUU19TSEFSRURfTElCUz15CitDVF9LRVJORUw9ImxpbnV4IgorQ1RfS0VSTkVMX1ZFUlNJT049IjIuNi4zMS4xNCIKKyMgQ1RfS0VSTkVMX2JhcmVfbWV0YWwgaXMgbm90IHNldAorQ1RfS0VSTkVMX2xpbnV4PXkKK0NUX0tFUk5FTF9iYXJlX21ldGFsX0FWQUlMQUJMRT15CitDVF9LRVJORUxfbGludXhfQVZBSUxBQkxFPXkKKyMgQ1RfS0VSTkVMX1ZfM18wXzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMyBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8yIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzEgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzAgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzlfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zOF84IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM3XzYgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzZfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNV8xNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNF8xMCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zM18xOSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zMl80NiBpcyBub3Qgc2V0CitDVF9LRVJORUxfVl8yXzZfMzFfMTQ9eQorIyBDVF9LRVJORUxfVl8yXzZfMjdfNTkgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9taW5ndzMyX0FWQUlMQUJMRT15CisKKyMKKyMgQ29tbW9uIGtlcm5lbCBvcHRpb25zCisjCitDVF9TSEFSRURfTElCUz15CisKKyMKKyMgbGludXggb3RoZXIgb3B0aW9ucworIworQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8wPXkKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8xIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8yIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9MSU5VWF9WRVJCT1NFX0xFVkVMPTAKK0NUX0tFUk5FTF9MSU5VWF9JTlNUQUxMX0NIRUNLPXkKKworIworIyBCaW5hcnkgdXRpbGl0aWVzCisjCitDVF9BUkNIX0JJTkZNVF9FTEY9eQorCisjCisjIEdOVSBiaW51dGlscworIworIyBDVF9CSU5VVElMU19WXzJfMjFfNTMgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19WXzJfMjFfMWEgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19WXzJfMjBfMWEgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVl8yXzE5XzFhPXkKKyMgQ1RfQklOVVRJTFNfVl8yXzE4YSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WRVJTSU9OPSIyLjE5LjFhIgorQ1RfQklOVVRJTFNfMl8xOV9vcl9sYXRlcj15CitDVF9CSU5VVElMU18yXzE4X29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9CSU5VVElMU19GT1JDRV9MRF9CRkQ9eQorQ1RfQklOVVRJTFNfTElOS0VSX0xEPXkKK0NUX0JJTlVUSUxTX0xJTktFUlNfTElTVD0ibGQiCitDVF9CSU5VVElMU19MSU5LRVJfREVGQVVMVD0iYmZkIgorQ1RfQklOVVRJTFNfRVhUUkFfQ09ORklHX0FSUkFZPSIiCisjIENUX0JJTlVUSUxTX0ZPUl9UQVJHRVQgaXMgbm90IHNldAorCisjCisjIEMgY29tcGlsZXIKKyMKK0NUX0NDPSJnY2MiCitDVF9DQ19WRVJTSU9OPSI0LjQuNSIKK0NUX0NDX2djYz15CisjIENUX0NDX0dDQ19TSE9XX0xJTkFSTyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF82XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNl8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF81XzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNV8xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzVfMCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzYgaXMgbm90IHNldAorQ1RfQ0NfVl80XzRfNT15CisjIENUX0NDX1ZfNF80XzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM180IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8yXzIgaXMgbm90IHNldAorQ1RfQ0NfR0NDXzRfMl9vcl9sYXRlcj15CitDVF9DQ19HQ0NfNF8zX29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzQ9eQorQ1RfQ0NfR0NDXzRfNF9vcl9sYXRlcj15CitDVF9DQ19HQ0NfSEFTX0dSQVBISVRFPXkKK0NUX0NDX0dDQ19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQ0NfR0NDX1VTRV9HTVBfTVBGUj15CitDVF9DQ19HQ0NfVVNFX1BQTF9DTE9PRz15CisjIENUX0NDX0xBTkdfRk9SVFJBTiBpcyBub3Qgc2V0CitDVF9DQ19TVVBQT1JUX0NYWD15CitDVF9DQ19TVVBQT1JUX0ZPUlRSQU49eQorQ1RfQ0NfU1VQUE9SVF9KQVZBPXkKK0NUX0NDX1NVUFBPUlRfQURBPXkKK0NUX0NDX1NVUFBPUlRfT0JKQz15CitDVF9DQ19TVVBQT1JUX09CSkNYWD15CisKKyMKKyMgQWRkaXRpb25hbCBzdXBwb3J0ZWQgbGFuZ3VhZ2VzOgorIworQ1RfQ0NfTEFOR19DWFg9eQorIyBDVF9DQ19MQU5HX0pBVkEgaXMgbm90IHNldAorIyBDVF9DQ19MQU5HX0FEQSBpcyBub3Qgc2V0CisjIENUX0NDX0xBTkdfT0JKQyBpcyBub3Qgc2V0CisjIENUX0NDX0xBTkdfT0JKQ1hYIGlzIG5vdCBzZXQKK0NUX0NDX0xBTkdfT1RIRVJTPSIiCisKKyMKKyMgZ2NjIG90aGVyIG9wdGlvbnMKKyMKK0NUX0NDX0VOQUJMRV9DWFhfRkxBR1M9IiIKK0NUX0NDX0NPUkVfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9DQ19FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0NDX1NUQVRJQ19MSUJTVERDWFg9eQorCisjCisjIE9wdGltaXNhdGlvbiBmZWF0dXJlcworIworQ1RfQ0NfR0NDX1VTRV9HUkFQSElURT15CisKKyMKKyMgU2V0dGluZ3MgZm9yIGxpYnJhcmllcyBydW5uaW5nIG9uIHRhcmdldAorIworQ1RfQ0NfR0NDX0VOQUJMRV9UQVJHRVRfT1BUU1BBQ0U9eQorIyBDVF9DQ19HQ0NfTElCTVVERkxBUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJHT01QIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQlNTUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYy4gb2JzY3VyZSBvcHRpb25zLgorIworQ1RfQ0NfQ1hBX0FURVhJVD15CisjIENUX0NDX0dDQ19ESVNBQkxFX1BDSCBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfU0pMSl9FWENFUFRJT05TPW0KK0NUX0NDX0dDQ19MREJMXzEyOD1tCisKKyMKKyMgQy1saWJyYXJ5CisjCitDVF9MSUJDPSJnbGliYyIKK0NUX0xJQkNfVkVSU0lPTj0iMi45IgorIyBDVF9MSUJDX2VnbGliYyBpcyBub3Qgc2V0CitDVF9MSUJDX2dsaWJjPXkKKyMgQ1RfTElCQ191Q2xpYmMgaXMgbm90IHNldAorQ1RfTElCQ19lZ2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfZ2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfR0xJQkNfVEFSQkFMTD15CisjIENUX0xJQkNfR0xJQkNfVl8yXzE0IGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19WXzJfMTMgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX1ZfMl8xMl8yIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19WXzJfMTJfMSBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfVl8yXzExXzEgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX1ZfMl8xMSBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfVl8yXzEwXzEgaXMgbm90IHNldAorQ1RfTElCQ19HTElCQ19WXzJfOT15CisjIENUX0xJQkNfR0xJQkNfVl8yXzggaXMgbm90IHNldAorQ1RfTElCQ19taW5nd19BVkFJTEFCTEU9eQorQ1RfTElCQ19uZXdsaWJfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbm9uZV9BVkFJTEFCTEU9eQorQ1RfTElCQ191Q2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfU1VQUE9SVF9USFJFQURTX0FOWT15CitDVF9MSUJDX1NVUFBPUlRfTlBUTD15CitDVF9USFJFQURTPSJucHRsIgorCisjCisjIENvbW1vbiBDIGxpYnJhcnkgb3B0aW9ucworIworQ1RfVEhSRUFEU19OUFRMPXkKK0NUX0xJQkNfWExERD15CitDVF9MSUJDX2dsaWJjX2ZhbWlsbHk9eQorQ1RfTElCQ19HTElCQ19FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0xJQkNfR0xJQkNfQ09ORklHUEFSTVM9IiIKK0NUX0xJQkNfR0xJQkNfRVhUUkFfQ0ZMQUdTPSIiCitDVF9MSUJDX0VYVFJBX0NDX0FSR1M9IiIKKyMgQ1RfTElCQ19FTkFCTEVfRk9SVElGSUVEX0JVSUxEIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19ESVNBQkxFX1ZFUlNJT05JTkcgaXMgbm90IHNldAorQ1RfTElCQ19PTERFU1RfQUJJPSIiCitDVF9MSUJDX0dMSUJDX0ZPUkNFX1VOV0lORD15CisjIENUX0xJQkNfR0xJQkNfVVNFX1BPUlRTIGlzIG5vdCBzZXQKK0NUX0xJQkNfQURET05TX0xJU1Q9IiIKKyMgQ1RfTElCQ19MT0NBTEVTIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9OT05FIGlzIG5vdCBzZXQKK0NUX0xJQkNfR0xJQkNfS0VSTkVMX1ZFUlNJT05fQVNfSEVBREVSUz15CisjIENUX0xJQkNfR0xJQkNfS0VSTkVMX1ZFUlNJT05fQ0hPU0VOIGlzIG5vdCBzZXQKK0NUX0xJQkNfR0xJQkNfTUlOX0tFUk5FTD0iMi42LjMxLjE0IgorCisjCisjIGdsaWJjIG90aGVyIG9wdGlvbnMKKyMKKworIworIyBEZWJ1ZyBmYWNpbGl0aWVzCisjCisjIENUX0RFQlVHX2RtYWxsb2MgaXMgbm90IHNldAorIyBDVF9ERUJVR19kdW1hIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfZ2RiIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfbHRyYWNlIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfc3RyYWNlIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzCisjCitDVF9DT01QTElCU19ORUVERUQ9eQorQ1RfR01QX05FRURFRD15CitDVF9NUEZSX05FRURFRD15CitDVF9QUExfTkVFREVEPXkKK0NUX0NMT09HX05FRURFRD15CitDVF9DT01QTElCUz15CitDVF9HTVA9eQorQ1RfTVBGUj15CitDVF9QUEw9eQorQ1RfQ0xPT0c9eQorIyBDVF9HTVBfVl81XzBfMiBpcyBub3Qgc2V0CisjIENUX0dNUF9WXzVfMF8xIGlzIG5vdCBzZXQKK0NUX0dNUF9WXzRfM18yPXkKKyMgQ1RfR01QX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9HTVBfVl80XzNfMCBpcyBub3Qgc2V0CitDVF9HTVBfVkVSU0lPTj0iNC4zLjIiCisjIENUX01QRlJfVl8zXzBfMSBpcyBub3Qgc2V0CisjIENUX01QRlJfVl8zXzBfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZfMl80XzI9eQorIyBDVF9NUEZSX1ZfMl80XzEgaXMgbm90IHNldAorIyBDVF9NUEZSX1ZfMl80XzAgaXMgbm90IHNldAorQ1RfTVBGUl9WRVJTSU9OPSIyLjQuMiIKKyMgQ1RfUFBMX1ZfMF8xMV8yIGlzIG5vdCBzZXQKKyMgQ1RfUFBMX1ZfMF8xMV8xIGlzIG5vdCBzZXQKKyMgQ1RfUFBMX1ZfMF8xMSBpcyBub3Qgc2V0CitDVF9QUExfVl8wXzEwXzI9eQorQ1RfUFBMX1ZFUlNJT049IjAuMTAuMiIKKyMgQ1RfQ0xPT0dfVl8wXzE1XzExIGlzIG5vdCBzZXQKK0NUX0NMT09HX1ZfMF8xNV8xMD15CisjIENUX0NMT09HX1ZfMF8xNV85IGlzIG5vdCBzZXQKKyMgQ1RfQ0xPT0dfVl8wXzE1XzggaXMgbm90IHNldAorIyBDVF9DTE9PR19WXzBfMTVfNyBpcyBub3Qgc2V0CisjIENUX0NMT09HX1ZfMF8xNV82IGlzIG5vdCBzZXQKK0NUX0NMT09HX1ZFUlNJT049IjAuMTUuMTAiCisKKyMKKyMgQ29tcGFuaW9uIGxpYnJhcmllcyBjb21tb24gb3B0aW9ucworIworIyBDVF9DT01QTElCU19DSEVDSyBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcGFuaW9uIHRvb2xzCisjCisKKyMKKyMgUkVBRCBIRUxQIGJlZm9yZSB5b3Ugc2F5ICdZJyBiZWxvdyAhISEKKyMKKyMgQ1RfQ09NUF9UT09MUyBpcyBub3Qgc2V0CisKKyMKKyMgVGVzdCBzdWl0ZQorIworIyBDVF9URVNUX1NVSVRFX0dDQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvczM5MHgtaWJtLWxpbnV4LWdudS9yZXBvcnRlZC5ieSBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9zMzkweC1pYm0tbGludXgtZ251L3JlcG9ydGVkLmJ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxM2MyOTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvczM5MHgtaWJtLWxpbnV4LWdudS9yZXBvcnRlZC5ieQpAQCAtMCwwICsxLDMgQEAKK3JlcG9ydGVyX25hbWU9Ikhhcm9sZCBHcm92ZXN0ZWVuIgorcmVwb3J0ZXJfdXJsPSJodHRwOi8vc291cmNld2FyZS5vcmcvbWwvY3Jvc3NnY2MvMjAwOS0xMS9tc2cwMDA1Mi5odG1sIgorcmVwb3J0ZXJfY29tbWVudD0iIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3NhbXBsZXMubWsgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvc2FtcGxlcy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTUxMzRkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3NhbXBsZXMubWsKQEAgLTAsMCArMSwxNTkgQEAKKyMgTWFrZWZpbGUgdG8gbWFuYWdlIHNhbXBsZXMKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEJ1aWxkIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBzYW1wbGVzCitDVF9UT1BfU0FNUExFUyA6PSAkKHBhdHN1YnN0ICQoQ1RfVE9QX0RJUikvc2FtcGxlcy8lL2Nyb3NzdG9vbC5jb25maWcsJSwkKHdpbGRjYXJkICQoQ1RfVE9QX0RJUikvc2FtcGxlcy8qL2Nyb3NzdG9vbC5jb25maWcpKQorQ1RfTElCX1NBTVBMRVMgOj0gJChmaWx0ZXItb3V0ICQoQ1RfVE9QX1NBTVBMRVMpLCQocGF0c3Vic3QgJChDVF9MSUJfRElSKS9zYW1wbGVzLyUvY3Jvc3N0b29sLmNvbmZpZywlLCQod2lsZGNhcmQgJChDVF9MSUJfRElSKS9zYW1wbGVzLyovY3Jvc3N0b29sLmNvbmZpZykpKQorQ1RfU0FNUExFUyA6PSAkKHNoZWxsIGVjaG8gJChzb3J0ICQoQ1RfVE9QX1NBTVBMRVMpICQoQ1RfTElCX1NBTVBMRVMpKSAgXAorICAgICAgICAgICAgICAgICAgICAgIHwkKHNlZCkgLXIgLWUgJ3MvIC9cbi9nOycgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIHwkKHNlZCkgLXIgLWUgJ3MvKC4qKSwoLiopL1wyLFwxLzsnICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIHxzb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIHwkKHNlZCkgLXIgLWUgJ3MvKC4qKSwoLiopL1wyLFwxLzsnICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgKQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhpcyBwYXJ0IGRlYWxzIHdpdGggdGhlIHNhbXBsZXMgaGVscCBlbnRyaWVzCisKK2hlbHAtY29uZmlnOjoKKwlAZWNobyAgJyAgc2F2ZWNvbmZpZyAgICAgICAgIC0gU2F2ZSBjdXJyZW50IGNvbmZpZyBhcyBhIHByZWNvbmZpZ3VyZWQgdGFyZ2V0JworCitoZWxwLXNhbXBsZXM6OgorCUBlY2hvICAnICBsaXN0LXNhbXBsZXMgICAgICAgLSBwcmludHMgdGhlIGxpc3Qgb2YgYWxsIHNhbXBsZXMgKGZvciBzY3JpcHRpbmcpJworCUBlY2hvICAnICBzaG93LTxzYW1wbGU+ICAgICAgLSBzaG93IGEgYnJpZWYgb3ZlcnZpZXcgb2YgPHNhbXBsZT4gKGxpc3Qgd2l0aCBsaXN0LXNhbXBsZXMpJworCUBlY2hvICAnICA8c2FtcGxlPiAgICAgICAgICAgLSBwcmVjb25maWd1cmUgY3Jvc3N0b29sLU5HIHdpdGggPHNhbXBsZT4gKGxpc3Qgd2l0aCBsaXN0LXNhbXBsZXMpJworCUBlY2hvICAnICBidWlsZC1hbGxbLiNdICAgICAgLSBCdWlsZCAqYWxsKiBzYW1wbGVzIChsaXN0IHdpdGggbGlzdC1zYW1wbGVzKSBhbmQgaW5zdGFsbCBpbicKKwlAZWNobyAgJyAgICAgICAgICAgICAgICAgICAgICAgJCR7Q1RfUFJFRklYfSAod2hpY2ggeW91IG11c3Qgc2V0KScKKworaGVscC1kaXN0cmliOjoKKwlAZWNobyAgJyAgd2lraS1zYW1wbGVzICAgICAgIC0gUHJpbnQgYSBEb2t1V2lraSB0YWJsZSBvZiBzYW1wbGVzJworCitoZWxwLWVudjo6CisJQGVjaG8gICcgIENUX1BSRUZJWD1kaXIgICAgICAtIGluc3RhbGwgc2FtcGxlcyBpbiBkaXIgKHNlZSBhY3Rpb24gImJ1aWxkLWFsbCIsIGFib3ZlKS4nCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIHBhcnQgZGVhbHMgd2l0aCBwcmludGluZyBzYW1wbGVzIGluZm9ybWF0aW9uCisKKyMgUHJpbnQgdGhlIGRldGFpbHMgb2YgY3VycmVudCBjb25maWd1cmF0aW9uCitQSE9OWSArPSBzaG93LWNvbmZpZworc2hvdy1jb25maWc6IC5jb25maWcKKwlAZXhwb3J0IGN1cnJlbnRfdHVwbGU9JChzaGVsbCAkKE1BS0UpIC1yZiAiJChDVF9ORykiIHNob3ctdHVwbGUgKTsgIFwKKwkkKENUX0xJQl9ESVIpL3NjcmlwdHMvc2hvd1NhbXBsZXMuc2ggLXYgY3VycmVudAorCisjIFByaW50cyB0aGUgZGV0YWlscyBvZiBhIHNhbXBsZQorUEhPTlkgKz0gJChwYXRzdWJzdCAlLHNob3ctJSwkKENUX1NBTVBMRVMpKQorJChwYXRzdWJzdCAlLHNob3ctJSwkKENUX1NBTVBMRVMpKToKKwlAJChDVF9MSUJfRElSKS9zY3JpcHRzL3Nob3dTYW1wbGVzLnNoIC12ICQocGF0c3Vic3Qgc2hvdy0lLCUsJChAKSkKKworIyBQcmludHMgdGhlIGRldGFpbHMgb2YgYWxsIHNhbXBsZXMKK1BIT05ZICs9IHNob3ctYWxsCitzaG93LWFsbDogJChwYXRzdWJzdCAlLHNob3ctJSwkKENUX1NBTVBMRVMpKQorCisjIHByaW50IHRoZSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgc2FtcGxlcworUEhPTlkgKz0gbGlzdC1zYW1wbGVzCitsaXN0LXNhbXBsZXM6IEZPUkNFCisJJChTSUxFTlQpJChDVF9MSUJfRElSKS9zY3JpcHRzL3Nob3dTYW1wbGVzLnNoICQoQ1RfU0FNUExFUykKKworUEhPTlkgKz0gbGlzdC1zYW1wbGVzLXNob3J0CitsaXN0LXNhbXBsZXMtc2hvcnQ6IEZPUkNFCisJJChTSUxFTlQpZm9yIHMgaW4gJChDVF9TQU1QTEVTKTsgZG8gXAorCSAgICBwcmludGYgIiQke3N9XG4iOyAgICAgICAgICAgICAgIFwKKwlkb25lCisKK1BIT05ZICs9IHdpa2ktc2FtcGxlcword2lraS1zYW1wbGVzOgorCSQoU0lMRU5UKSQoQ1RfTElCX0RJUikvc2NyaXB0cy9zaG93U2FtcGxlcy5zaCAtdyAkKENUX1NBTVBMRVMpCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIHBhcnQgZGVhbHMgd2l0aCBzYXZpbmcvcmVzdG9yaW5nIHNhbXBsZXMKKworUEhPTlkgKz0gc2FtcGxlcworc2FtcGxlczoKKwlAJChFQ0hPKSAnICBNS0RJUiAkQCcKKwkkKFNJTEVOVClta2RpciAtcCAkQAorCisjIFNhdmUgYSBzYW1wbGUKK3NhdmVjb25maWc6IC5jb25maWcgc2FtcGxlcworCSQoU0lMRU5UKSQoQ1RfTElCX0RJUikvc2NyaXB0cy9zYXZlU2FtcGxlLnNoCisKKyMgVGhlICdzYW1wbGVfZGlyJyBmdW5jdGlvbiBwcmludHMgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgc2FtcGxlIGlzLAorIyBzZWFyY2hpbmcgZmlyc3QgaW4gbG9jYWwgc2FtcGxlcywgdGhlbiBpbiBnbG9iYWwgc2FtcGxlcworZGVmaW5lIHNhbXBsZV9kaXIKKyQkKCBbIC1kICQoQ1RfVE9QX0RJUikvc2FtcGxlcy8kKDEpIF0gJiYgZWNobyAiJChDVF9UT1BfRElSKS9zYW1wbGVzLyQoMSkiIHx8IGVjaG8gIiQoQ1RfTElCX0RJUikvc2FtcGxlcy8kKDEpIikKK2VuZGVmCisKKyMgSG93IHdlIGRvIHJlY2FsbCBvbmUgc2FtcGxlCitQSE9OWSArPSAkKENUX1NBTVBMRVMpCiskKENUX1NBTVBMRVMpOgorCSQoU0lMRU5UKWNwICQoY2FsbCBzYW1wbGVfZGlyLCRAKS9jcm9zc3Rvb2wuY29uZmlnIC5jb25maWcKKwkkKFNJTEVOVCkkKE1BS0UpIC1yZiAkKENUX05HKSBWPSQoVikgb2xkY29uZmlnCisJQGVjaG8KKwlAZWNobyAgJyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqJworCUBlY2hvCisJJChTSUxFTlQpKCAuICQoY2FsbCBzYW1wbGVfZGlyLCRAKS9yZXBvcnRlZC5ieTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICBlY2hvICJJbml0aWFsbHkgcmVwb3J0ZWQgYnk6ICQke3JlcG9ydGVyX25hbWV9IjsgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIGVjaG8gIlVSTDogJCR7cmVwb3J0ZXJfdXJsfSI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgaWYgWyAtbiAiJCR7cmVwb3J0ZXJfY29tbWVudH0iIF07IHRoZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgIGVjaG8gIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgZWNobyAgIkNvbW1lbnQ6IjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICBwcmludGYgIiQke3JlcG9ydGVyX2NvbW1lbnR9XG4iOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICBmaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIGVjaG8gIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgZWNobyAgJyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqJzsgICAgIFwKKwkgKQorCSQoU0lMRU5UKWlmICQoZ3JlcCkgLUUgJ15DVF9FWFBFUklNRU5UQUw9eSQkJyAuY29uZmlnID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICAgZWNobyAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICBlY2hvICAnV0FSTklORyEgVGhpcyBzYW1wbGUgbWF5IGVuYWJsZSBleHBlcmltZW50YWwgZmVhdHVyZXMuJzsgICAgICAgICAgXAorCSAgIGVjaG8gICcgICAgICAgICBQbGVhc2UgYmUgc3VyZSB0byByZXZpZXcgdGhlIGNvbmZpZ3VyYXRpb24gcHJpb3InOyAgICAgICBcCisJICAgZWNobyAgJyAgICAgICAgIHRvIGJ1aWxkaW5nIGFuZCB1c2luZyB5b3VyIHRvb2xjaGFpbiEnOyAgICAgICAgICAgICAgICAgIFwKKwkgICBlY2hvICAnTm93LCB5b3UgaGF2ZSBiZWVuIHdhcm5lZCEnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgIGVjaG8gIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgZWNobyAgJyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqJzsgICAgIFwKKwkgZmkKKwlAZWNobworCUBlY2hvICAnTm93IGNvbmZpZ3VyZWQgZm9yICIkQCInCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTb21lIGhlbHBlciBmdW5jdGlvbnMKKworIyBDcmVhdGUgdGhlIHJ1bGUgdG8gYnVpbGQgYSBzYW1wbGUKKyMgJDE6IHNhbXBsZSB0dXBsZQorIyAkMjogcHJlZml4CitkZWZpbmUgYnVpbGRfc2FtcGxlCisJQCQoRUNITykgJyAgQ09ORiAgJCgxKScKKwkkKFNJTEVOVCljcCAkKGNhbGwgc2FtcGxlX2RpciwkKDEpKS9jcm9zc3Rvb2wuY29uZmlnIC5jb25maWcKKwkkKFNJTEVOVCkkKHNlZCkgLWkgLXIgLWUgJ3M6XihDVF9QUkVGSVhfRElSPSkuKiQkOlwxIiQoMikiOjsnIC5jb25maWcKKwkkKFNJTEVOVCkkKHNlZCkgLWkgLXIgLWUgJ3M6Xi4qKENUX0xPR18oV0FSTnxJTkZPfEVYVFJBfERFQlVHfEFMTCkpLiokJDojIFwxIGlzIG5vdCBzZXQ6OycgLmNvbmZpZworCSQoU0lMRU5UKSQoc2VkKSAtaSAtciAtZSAnczpeLiooQ1RfTE9HX0VSUk9SKS4qJCQ6XDE9eTo7JyAuY29uZmlnCisJJChTSUxFTlQpJChzZWQpIC1pIC1yIC1lICdzOl4oQ1RfTE9HX0xFVkVMX01BWCk9LiokJDpcMT0iRVJST1IiOjsnIC5jb25maWcKKwkkKFNJTEVOVCkkKHNlZCkgLWkgLXIgLWUgJ3M6Xi4qKENUX0xPR19UT19GSUxFKS4qJCQ6XDE9eTo7JyAuY29uZmlnCisJJChTSUxFTlQpJChzZWQpIC1pIC1yIC1lICdzOl4uKihDVF9MT0dfUFJPR1JFU1NfQkFSKS4qJCQ6XDE9eTo7JyAuY29uZmlnCisJJChTSUxFTlQpJChNQUtFKSAtcmYgJChDVF9ORykgVj0wIG9sZGNvbmZpZworCUAkKEVDSE8pICcgIEJVSUxEICQoMSknCisJJChTSUxFTlQpJChNQUtFKSAtcmYgJChDVF9ORykgVj0wIGJ1aWxkCitlbmRlZgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQnVpbGQgc2FtcGxlcyBmb3IgdXNlIChub3QgcmVndGVzdCEpCisKKyMgQ2hlY2sgdGhhdCBQUkVGSVggaXMgc2V0IGlmIGJ1aWxkaW5nIHNhbXBsZXMKK2lmbmVxICgkKHN0cmlwICQoTUFLRUNNREdPQUxTKSksKQoraWZuZXEgKCQoc3RyaXAgJChmaWx0ZXIgJChwYXRzdWJzdCAlLGJ1aWxkLSUsJChDVF9TQU1QTEVTKSkgYnVpbGQtYWxsLCQoTUFLRUNNREdPQUxTKSkpLCkKKworaWZlcSAoJChzdHJpcCAkKENUX1BSRUZJWCkpLCkKKyQoZXJyb3IgUGxlYXNlIHNldCAnQ1RfUFJFRklYJyB0byB3aGVyZSB5b3Ugd2FudCB0byBpbnN0YWxsIGdlbmVyYXRlZCB0b29sY2hhaW4gc2FtcGxlcyEpCitlbmRpZgorCitlbmRpZiAjIE1BS0VDTURHT0FMUyBjb250YWlucyBhIGJ1aWxkIHNhbXBsZSBydWxlCitlbmRpZiAjIE1BS0VDTURHT0FMUyAhPSAiIgorCisjIEJ1aWxkIGEgc2luZ2xlIHNhbXBsZQorJChwYXRzdWJzdCAlLGJ1aWxkLSUsJChDVF9TQU1QTEVTKSk6CisJJChjYWxsIGJ1aWxkX3NhbXBsZSwkKHBhdHN1YnN0IGJ1aWxkLSUsJSwkQCksJChDVF9QUkVGSVgpLyQocGF0c3Vic3QgYnVpbGQtJSwlLCRAKSkKKworIyBCdWlsZCBhbCBzYW1wbGVzCitidWlsZC1hbGw6ICQocGF0c3Vic3QgJSxidWlsZC0lLCQoQ1RfU0FNUExFUykpCisKKyMgQnVpbGQgYWxsIHNhbXBsZXMsIG92ZXJpZGluZyB0aGUgbnVtYmVyIG9mIC8vIGpvYnMgcGVyIHNhbXBsZQorYnVpbGQtYWxsLiU6CisJJChTSUxFTlQpJChNQUtFKSAtcmYgJChDVF9ORykgVj0kKFYpICQoc2hlbGwgZWNobyAiJChAKSIgfCQoc2VkKSAtciAtZSAnc3xeKFteLl0rKVwuKFtbOmRpZ2l0Ol1dKykkJHxcMSBDVF9KT0JTPVwyfDsnKQorCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvc2g0LXVua25vd24tbGludXgtZ251L2Nyb3NzdG9vbC5jb25maWcgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvc2g0LXVua25vd24tbGludXgtZ251L2Nyb3NzdG9vbC5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM0Mzc0ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy9zaDQtdW5rbm93bi1saW51eC1nbnUvY3Jvc3N0b29sLmNvbmZpZwpAQCAtMCwwICsxLDQwNiBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBjcm9zc3Rvb2wtTkcgaGdfZGVmYXVsdEAyNzIzX2Q1NmJhNjA0YmU4MCBDb25maWd1cmF0aW9uCisjIFN1biBPY3QgMTYgMTg6MjA6MzUgMjAxMQorIworQ1RfQ09ORklHVVJFX2hhc194enV0aWxzPXkKK0NUX0NPTkZJR1VSRV9oYXNfY3ZzPXkKK0NUX0NPTkZJR1VSRV9oYXNfc3ZuPXkKK0NUX01PRFVMRVM9eQorCisjCisjIFBhdGhzIGFuZCBtaXNjIG9wdGlvbnMKKyMKKworIworIyBjcm9zc3Rvb2wtTkcgYmVoYXZpb3IKKyMKK0NUX09CU09MRVRFPXkKKyMgQ1RfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfQ1QgaXMgbm90IHNldAorCisjCisjIFBhdGhzCisjCitDVF9MT0NBTF9UQVJCQUxMU19ESVI9IiR7SE9NRX0vc3JjIgorQ1RfU0FWRV9UQVJCQUxMUz15CitDVF9XT1JLX0RJUj0iJHtDVF9UT1BfRElSfS8uYnVpbGQiCitDVF9QUkVGSVhfRElSPSIke0hPTUV9L3gtdG9vbHMvJHtDVF9UQVJHRVR9IgorQ1RfSU5TVEFMTF9ESVI9IiR7Q1RfUFJFRklYX0RJUn0iCitDVF9STV9SRl9QUkVGSVhfRElSPXkKK0NUX1JFTU9WRV9ET0NTPXkKK0NUX0lOU1RBTExfRElSX1JPPXkKK0NUX1NUUklQX0FMTF9UT09MQ0hBSU5fRVhFQ1VUQUJMRVM9eQorCisjCisjIERvd25sb2FkaW5nCisjCisjIENUX0ZPUkJJRF9ET1dOTE9BRCBpcyBub3Qgc2V0CisjIENUX0ZPUkNFX0RPV05MT0FEIGlzIG5vdCBzZXQKK0NUX0NPTk5FQ1RfVElNRU9VVD0xMAorIyBDVF9PTkxZX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfVVNFX01JUlJPUiBpcyBub3Qgc2V0CisKKyMKKyMgRXh0cmFjdGluZworIworIyBDVF9GT1JDRV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX09WRVJJREVfQ09ORklHX0dVRVNTX1NVQj15CisjIENUX09OTFlfRVhUUkFDVCBpcyBub3Qgc2V0CitDVF9QQVRDSF9CVU5ETEVEPXkKKyMgQ1RfUEFUQ0hfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9CVU5ETEVEX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTE9DQUxfQlVORExFRCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfRkFMTEJBQ0tfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9GQUxMQkFDS19CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTk9ORSBpcyBub3Qgc2V0CitDVF9QQVRDSF9PUkRFUj0iYnVuZGxlZCIKKworIworIyBCdWlsZCBiZWhhdmlvcgorIworQ1RfUEFSQUxMRUxfSk9CUz0wCitDVF9MT0FEPTAKK0NUX1VTRV9QSVBFUz15CitDVF9FWFRSQV9GTEFHU19GT1JfSE9TVD0iIgorIyBDVF9DT05GSUdfU0hFTExfU0ggaXMgbm90IHNldAorIyBDVF9DT05GSUdfU0hFTExfQVNIIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTF9CQVNIPXkKKyMgQ1RfQ09ORklHX1NIRUxMX0NVU1RPTSBpcyBub3Qgc2V0CitDVF9DT05GSUdfU0hFTEw9IiR7YmFzaH0iCisKKyMKKyMgTG9nZ2luZworIworIyBDVF9MT0dfRVJST1IgaXMgbm90IHNldAorIyBDVF9MT0dfV0FSTiBpcyBub3Qgc2V0CisjIENUX0xPR19JTkZPIGlzIG5vdCBzZXQKK0NUX0xPR19FWFRSQT15CisjIENUX0xPR19BTEwgaXMgbm90IHNldAorIyBDVF9MT0dfREVCVUcgaXMgbm90IHNldAorQ1RfTE9HX0xFVkVMX01BWD0iRVhUUkEiCisjIENUX0xPR19TRUVfVE9PTFNfV0FSTiBpcyBub3Qgc2V0CitDVF9MT0dfUFJPR1JFU1NfQkFSPXkKK0NUX0xPR19UT19GSUxFPXkKK0NUX0xPR19GSUxFX0NPTVBSRVNTPXkKKworIworIyBUYXJnZXQgb3B0aW9ucworIworQ1RfQVJDSD0ic2giCitDVF9BUkNIX1NVUFBPUlRTX0JPVEhfRU5ESUFOPXkKK0NUX0FSQ0hfU1VQUE9SVFNfMzI9eQorQ1RfQVJDSF9ERUZBVUxUX0xFPXkKK0NUX0FSQ0hfREVGQVVMVF8zMj15CisjIENUX0FSQ0hfQkUgaXMgbm90IHNldAorQ1RfQVJDSF9MRT15CitDVF9BUkNIXzMyPXkKK0NUX0FSQ0hfQklUTkVTUz0zMgorQ1RfQVJDSF9GTE9BVF9IVz15CisjIENUX0FSQ0hfRkxPQVRfU1cgaXMgbm90IHNldAorQ1RfVEFSR0VUX0NGTEFHUz0iIgorQ1RfVEFSR0VUX0xERkxBR1M9IiIKKyMgQ1RfQVJDSF9hbHBoYSBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYXJtIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9hdnIzMiBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYmxhY2tmaW4gaXMgbm90IHNldAorIyBDVF9BUkNIX21pcHMgaXMgbm90IHNldAorIyBDVF9BUkNIX3Bvd2VycGMgaXMgbm90IHNldAorQ1RfQVJDSF9zaD15CisjIENUX0FSQ0hfc3BhcmMgaXMgbm90IHNldAorIyBDVF9BUkNIX3g4NiBpcyBub3Qgc2V0CitDVF9BUkNIX2FscGhhX0FWQUlMQUJMRT15CitDVF9BUkNIX2FybV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hdnIzMl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9ibGFja2Zpbl9BVkFJTEFCTEU9eQorQ1RfQVJDSF9tNjhrX0FWQUlMQUJMRT15CitDVF9BUkNIX21pcHNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfcG93ZXJwY19BVkFJTEFCTEU9eQorQ1RfQVJDSF9zMzkwX0FWQUlMQUJMRT15CitDVF9BUkNIX3NoX0FWQUlMQUJMRT15CitDVF9BUkNIX3NwYXJjX0FWQUlMQUJMRT15CitDVF9BUkNIX3g4Nl9BVkFJTEFCTEU9eQorCisjCisjIEdlbmVyaWMgdGFyZ2V0IG9wdGlvbnMKKyMKK0NUX0FSQ0hfVVNFX01NVT15CisKKyMKKyMgVGFyZ2V0IG9wdGltaXNhdGlvbnMKKyMKKworIworIyBzaCBvdGhlciBvcHRpb25zCisjCisjIENUX0FSQ0hfU0hfU0gzIGlzIG5vdCBzZXQKK0NUX0FSQ0hfU0hfU0g0PXkKKyMgQ1RfQVJDSF9TSF9TSDRBIGlzIG5vdCBzZXQKK0NUX0FSQ0hfU0hfVkFSSUFOVD0ic2g0IgorCisjCisjIFRvb2xjaGFpbiBvcHRpb25zCisjCisKKyMKKyMgR2VuZXJhbCB0b29sY2hhaW4gb3B0aW9ucworIworQ1RfVVNFX1NZU1JPT1Q9eQorQ1RfU1lTUk9PVF9OQU1FPSJzeXNyb290IgorQ1RfU1lTUk9PVF9ESVJfUFJFRklYPSIiCitDVF9UT09MQ0hBSU5fUEtHVkVSU0lPTj0iIgorQ1RfVE9PTENIQUlOX0JVR1VSTD0iIgorCisjCisjIFR1cGxlIGNvbXBsZXRpb24gYW5kIGFsaWFzaW5nCisjCitDVF9UQVJHRVRfVkVORE9SPSJ1bmtub3duIgorQ1RfVEFSR0VUX0FMSUFTX1NFRF9FWFBSPSIiCitDVF9UQVJHRVRfQUxJQVM9IiIKKworIworIyBUb29sY2hhaW4gdHlwZQorIworQ1RfQ1JPU1M9eQorQ1RfVE9PTENIQUlOX1RZUEU9ImNyb3NzIgorCisjCisjIEJ1aWxkIHN5c3RlbQorIworQ1RfQlVJTEQ9IiIKK0NUX0JVSUxEX1BSRUZJWD0iIgorQ1RfQlVJTERfU1VGRklYPSIiCisKKyMKKyMgT3BlcmF0aW5nIFN5c3RlbQorIworQ1RfS0VSTkVMX1NVUFBPUlRTX1NIQVJFRF9MSUJTPXkKK0NUX0tFUk5FTD0ibGludXgiCitDVF9LRVJORUxfVkVSU0lPTj0iMi42LjI3LjU5IgorIyBDVF9LRVJORUxfYmFyZV9tZXRhbCBpcyBub3Qgc2V0CitDVF9LRVJORUxfbGludXg9eQorQ1RfS0VSTkVMX2JhcmVfbWV0YWxfQVZBSUxBQkxFPXkKK0NUX0tFUk5FTF9saW51eF9BVkFJTEFCTEU9eQorIyBDVF9LRVJORUxfTElOVVhfVVNFX0NVU1RPTV9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMyBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8yIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzEgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzAgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzlfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zOF84IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM3XzYgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzZfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNV8xNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNF8xMCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zM18xOSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zMl80NiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zMV8xNCBpcyBub3Qgc2V0CitDVF9LRVJORUxfVl8yXzZfMjdfNTk9eQorIyBDVF9LRVJORUxfTElOVVhfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9taW5ndzMyX0FWQUlMQUJMRT15CisKKyMKKyMgQ29tbW9uIGtlcm5lbCBvcHRpb25zCisjCitDVF9TSEFSRURfTElCUz15CisKKyMKKyMgbGludXggb3RoZXIgb3B0aW9ucworIworQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8wPXkKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8xIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8yIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9MSU5VWF9WRVJCT1NFX0xFVkVMPTAKK0NUX0tFUk5FTF9MSU5VWF9JTlNUQUxMX0NIRUNLPXkKKworIworIyBCaW5hcnkgdXRpbGl0aWVzCisjCitDVF9BUkNIX0JJTkZNVF9FTEY9eQorCisjCisjIEdOVSBiaW51dGlscworIworIyBDVF9CSU5VVElMU19WXzJfMjFfMWEgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19WXzJfMjBfMWEgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVl8yXzE5XzFhPXkKKyMgQ1RfQklOVVRJTFNfVl8yXzE4YSBpcyBub3Qgc2V0CisjIENUX0JJTlVUSUxTX1ZfMl8xN2EgaXMgbm90IHNldAorIyBDVF9CSU5VVElMU19WXzJfMTZfMWEgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVkVSU0lPTj0iMi4xOS4xYSIKK0NUX0JJTlVUSUxTXzJfMTlfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfMl8xOF9vcl9sYXRlcj15CitDVF9CSU5VVElMU19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQklOVVRJTFNfRk9SQ0VfTERfQkZEPXkKK0NUX0JJTlVUSUxTX0xJTktFUl9MRD15CitDVF9CSU5VVElMU19MSU5LRVJTX0xJU1Q9ImxkIgorQ1RfQklOVVRJTFNfTElOS0VSX0RFRkFVTFQ9ImJmZCIKK0NUX0JJTlVUSUxTX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorIyBDVF9CSU5VVElMU19GT1JfVEFSR0VUIGlzIG5vdCBzZXQKKworIworIyBzc3RyaXAKKyMKKyMgQ1RfU1NUUklQIGlzIG5vdCBzZXQKKworIworIyBDIGNvbXBpbGVyCisjCitDVF9DQz0iZ2NjIgorQ1RfQ0NfVkVSU0lPTj0iNC4zLjIiCitDVF9DQ19nY2M9eQorIyBDVF9DQ19WXzRfNF82IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM180IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMyBpcyBub3Qgc2V0CitDVF9DQ19WXzRfM18yPXkKKyMgQ1RfQ0NfVl80XzNfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8yXzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfMl8zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8yXzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfMl8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzFfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8wXzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzNfNF82IGlzIG5vdCBzZXQKK0NUX0NDX0dDQ180XzJfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDXzRfMz15CitDVF9DQ19HQ0NfNF8zX29yX2xhdGVyPXkKK0NUX0NDX0dDQ19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQ0NfR0NDX1VTRV9HTVBfTVBGUj15CisjIENUX0NDX0xBTkdfRk9SVFJBTiBpcyBub3Qgc2V0CitDVF9DQ19TVVBQT1JUX0NYWD15CitDVF9DQ19TVVBQT1JUX0ZPUlRSQU49eQorQ1RfQ0NfU1VQUE9SVF9KQVZBPXkKK0NUX0NDX1NVUFBPUlRfQURBPXkKK0NUX0NDX1NVUFBPUlRfT0JKQz15CitDVF9DQ19TVVBQT1JUX09CSkNYWD15CisKKyMKKyMgQWRkaXRpb25hbCBzdXBwb3J0ZWQgbGFuZ3VhZ2VzOgorIworQ1RfQ0NfTEFOR19DWFg9eQorIyBDVF9DQ19MQU5HX0pBVkEgaXMgbm90IHNldAorCisjCisjIGdjYyBvdGhlciBvcHRpb25zCisjCitDVF9DQ19FTkFCTEVfQ1hYX0ZMQUdTPSIiCitDVF9DQ19DT1JFX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfQ0NfRVhUUkFfQ09ORklHX0FSUkFZPSIiCisKKyMKKyMgT3B0aW1pc2F0aW9uIGZlYXR1cmVzCisjCisKKyMKKyMgU2V0dGluZ3MgZm9yIGxpYnJhcmllcyBydW5uaW5nIG9uIHRhcmdldAorIworQ1RfQ0NfR0NDX0VOQUJMRV9UQVJHRVRfT1BUU1BBQ0U9eQorIyBDVF9DQ19HQ0NfTElCTVVERkxBUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJHT01QIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQlNTUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYy4gb2JzY3VyZSBvcHRpb25zLgorIworQ1RfQ0NfQ1hBX0FURVhJVD15CisjIENUX0NDX0dDQ19ESVNBQkxFX1BDSCBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfU0pMSl9FWENFUFRJT05TPW0KK0NUX0NDX0dDQ19MREJMXzEyOD1tCisKKyMKKyMgQy1saWJyYXJ5CisjCitDVF9MSUJDPSJnbGliYyIKK0NUX0xJQkNfVkVSU0lPTj0iMi45IgorIyBDVF9MSUJDX2VnbGliYyBpcyBub3Qgc2V0CitDVF9MSUJDX2dsaWJjPXkKKyMgQ1RfTElCQ191Q2xpYmMgaXMgbm90IHNldAorQ1RfTElCQ19lZ2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfZ2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfR0xJQkNfVEFSQkFMTD15CitDVF9MSUJDX0dMSUJDX1ZfMl85PXkKKyMgQ1RfTElCQ19HTElCQ19WXzJfOCBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfVl8yXzcgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX1ZfMl82XzEgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX1ZfMl82IGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19WXzJfNV8xIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19WXzJfNSBpcyBub3Qgc2V0CitDVF9MSUJDX21pbmd3X0FWQUlMQUJMRT15CitDVF9MSUJDX25ld2xpYl9BVkFJTEFCTEU9eQorQ1RfTElCQ19ub25lX0FWQUlMQUJMRT15CitDVF9MSUJDX3VDbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19TVVBQT1JUX1RIUkVBRFNfQU5ZPXkKK0NUX0xJQkNfU1VQUE9SVF9OUFRMPXkKK0NUX1RIUkVBRFM9Im5wdGwiCisKKyMKKyMgQ29tbW9uIEMgbGlicmFyeSBvcHRpb25zCisjCitDVF9USFJFQURTX05QVEw9eQorQ1RfTElCQ19YTEREPXkKK0NUX0xJQkNfZ2xpYmNfZmFtaWxseT15CitDVF9MSUJDX0dMSUJDX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfTElCQ19HTElCQ19DT05GSUdQQVJNUz0ibm8tei1kZWZzPXllcyIKK0NUX0xJQkNfR0xJQkNfRVhUUkFfQ0ZMQUdTPSIiCitDVF9MSUJDX0VYVFJBX0NDX0FSR1M9IiIKKyMgQ1RfTElCQ19ESVNBQkxFX1ZFUlNJT05JTkcgaXMgbm90IHNldAorQ1RfTElCQ19PTERFU1RfQUJJPSIiCisjIENUX0xJQkNfR0xJQkNfRk9SQ0VfVU5XSU5EIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19HTElCQ19VU0VfUE9SVFMgaXMgbm90IHNldAorQ1RfTElCQ19BRERPTlNfTElTVD0iIgorIyBDVF9MSUJDX0xPQ0FMRVMgaXMgbm90IHNldAorIyBDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX05PTkUgaXMgbm90IHNldAorQ1RfTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9BU19IRUFERVJTPXkKKyMgQ1RfTElCQ19HTElCQ19LRVJORUxfVkVSU0lPTl9DSE9TRU4gaXMgbm90IHNldAorQ1RfTElCQ19HTElCQ19NSU5fS0VSTkVMPSIyLjYuMjcuNTkiCisKKyMKKyMgZ2xpYmMgb3RoZXIgb3B0aW9ucworIworCisjCisjIERlYnVnIGZhY2lsaXRpZXMKKyMKKyMgQ1RfREVCVUdfZG1hbGxvYyBpcyBub3Qgc2V0CisjIENUX0RFQlVHX2R1bWEgaXMgbm90IHNldAorIyBDVF9ERUJVR19nZGIgaXMgbm90IHNldAorIyBDVF9ERUJVR19sdHJhY2UgaXMgbm90IHNldAorIyBDVF9ERUJVR19zdHJhY2UgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMKKyMKK0NUX0NPTVBMSUJTX05FRURFRD15CitDVF9HTVBfTkVFREVEPXkKK0NUX01QRlJfTkVFREVEPXkKK0NUX0NPTVBMSUJTPXkKK0NUX0dNUD15CitDVF9NUEZSPXkKK0NUX0dNUF9WXzRfM18yPXkKKyMgQ1RfR01QX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9HTVBfVl80XzNfMCBpcyBub3Qgc2V0CisjIENUX0dNUF9WXzRfMl80IGlzIG5vdCBzZXQKKyMgQ1RfR01QX1ZfNF8yXzIgaXMgbm90IHNldAorQ1RfR01QX1ZFUlNJT049IjQuMy4yIgorIyBDVF9NUEZSX1ZfM18wXzAgaXMgbm90IHNldAorQ1RfTVBGUl9WXzJfNF8yPXkKKyMgQ1RfTVBGUl9WXzJfNF8xIGlzIG5vdCBzZXQKKyMgQ1RfTVBGUl9WXzJfNF8wIGlzIG5vdCBzZXQKKyMgQ1RfTVBGUl9WXzJfM18yIGlzIG5vdCBzZXQKKyMgQ1RfTVBGUl9WXzJfM18xIGlzIG5vdCBzZXQKK0NUX01QRlJfVkVSU0lPTj0iMi40LjIiCisKKyMKKyMgQ29tcGFuaW9uIGxpYnJhcmllcyBjb21tb24gb3B0aW9ucworIworIyBDVF9DT01QTElCU19DSEVDSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMvc2g0LXVua25vd24tbGludXgtZ251L3JlcG9ydGVkLmJ5IGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3NoNC11bmtub3duLWxpbnV4LWdudS9yZXBvcnRlZC5ieQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTJlYWU3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3NoNC11bmtub3duLWxpbnV4LWdudS9yZXBvcnRlZC5ieQpAQCAtMCwwICsxLDMgQEAKK3JlcG9ydGVyX25hbWU9IllFTSIKK3JlcG9ydGVyX3VybD0iaHR0cDovL3ltb3Jpbi5pcy1hLWdlZWsub3JnLyIKK3JlcG9ydGVyX2NvbW1lbnQ9IkVYUEVSSU1FTlRBTCBTdXBlci1IIHNoNCBzYW1wbGUuIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3g4Nl82NC11bmtub3duLWxpbnV4LWdudS9jcm9zc3Rvb2wuY29uZmlnIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3g4Nl82NC11bmtub3duLWxpbnV4LWdudS9jcm9zc3Rvb2wuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOTJlODQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMveDg2XzY0LXVua25vd24tbGludXgtZ251L2Nyb3NzdG9vbC5jb25maWcKQEAgLTAsMCArMSw0MzcgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgY3Jvc3N0b29sLU5HIGhnX2RlZmF1bHRAMjcyM19kNTZiYTYwNGJlODAgQ29uZmlndXJhdGlvbgorIyBTdW4gT2N0IDE2IDE4OjIxOjA4IDIwMTEKKyMKK0NUX0NPTkZJR1VSRV9oYXNfeHp1dGlscz15CitDVF9DT05GSUdVUkVfaGFzX2N2cz15CitDVF9DT05GSUdVUkVfaGFzX3N2bj15CitDVF9NT0RVTEVTPXkKKworIworIyBQYXRocyBhbmQgbWlzYyBvcHRpb25zCisjCisKKyMKKyMgY3Jvc3N0b29sLU5HIGJlaGF2aW9yCisjCisjIENUX09CU09MRVRFIGlzIG5vdCBzZXQKKyMgQ1RfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKKyMgQ1RfREVCVUdfQ1QgaXMgbm90IHNldAorCisjCisjIFBhdGhzCisjCitDVF9MT0NBTF9UQVJCQUxMU19ESVI9IiR7SE9NRX0vc3JjIgorQ1RfU0FWRV9UQVJCQUxMUz15CitDVF9XT1JLX0RJUj0iJHtDVF9UT1BfRElSfS8uYnVpbGQiCitDVF9QUkVGSVhfRElSPSIke0hPTUV9L3gtdG9vbHMvJHtDVF9UQVJHRVR9IgorQ1RfSU5TVEFMTF9ESVI9IiR7Q1RfUFJFRklYX0RJUn0iCitDVF9STV9SRl9QUkVGSVhfRElSPXkKK0NUX1JFTU9WRV9ET0NTPXkKK0NUX0lOU1RBTExfRElSX1JPPXkKK0NUX1NUUklQX0FMTF9UT09MQ0hBSU5fRVhFQ1VUQUJMRVM9eQorCisjCisjIERvd25sb2FkaW5nCisjCisjIENUX0ZPUkJJRF9ET1dOTE9BRCBpcyBub3Qgc2V0CisjIENUX0ZPUkNFX0RPV05MT0FEIGlzIG5vdCBzZXQKK0NUX0NPTk5FQ1RfVElNRU9VVD0xMAorIyBDVF9PTkxZX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfVVNFX01JUlJPUiBpcyBub3Qgc2V0CisKKyMKKyMgRXh0cmFjdGluZworIworIyBDVF9GT1JDRV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX09WRVJJREVfQ09ORklHX0dVRVNTX1NVQj15CisjIENUX09OTFlfRVhUUkFDVCBpcyBub3Qgc2V0CitDVF9QQVRDSF9CVU5ETEVEPXkKKyMgQ1RfUEFUQ0hfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9CVU5ETEVEX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTE9DQUxfQlVORExFRCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfRkFMTEJBQ0tfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9GQUxMQkFDS19CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfTk9ORSBpcyBub3Qgc2V0CitDVF9QQVRDSF9PUkRFUj0iYnVuZGxlZCIKKworIworIyBCdWlsZCBiZWhhdmlvcgorIworQ1RfUEFSQUxMRUxfSk9CUz0wCitDVF9MT0FEPTAKK0NUX1VTRV9QSVBFUz15CitDVF9FWFRSQV9GTEFHU19GT1JfSE9TVD0iIgorIyBDVF9DT05GSUdfU0hFTExfU0ggaXMgbm90IHNldAorIyBDVF9DT05GSUdfU0hFTExfQVNIIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTF9CQVNIPXkKKyMgQ1RfQ09ORklHX1NIRUxMX0NVU1RPTSBpcyBub3Qgc2V0CitDVF9DT05GSUdfU0hFTEw9IiR7YmFzaH0iCisKKyMKKyMgTG9nZ2luZworIworIyBDVF9MT0dfRVJST1IgaXMgbm90IHNldAorIyBDVF9MT0dfV0FSTiBpcyBub3Qgc2V0CisjIENUX0xPR19JTkZPIGlzIG5vdCBzZXQKK0NUX0xPR19FWFRSQT15CisjIENUX0xPR19BTEwgaXMgbm90IHNldAorIyBDVF9MT0dfREVCVUcgaXMgbm90IHNldAorQ1RfTE9HX0xFVkVMX01BWD0iRVhUUkEiCisjIENUX0xPR19TRUVfVE9PTFNfV0FSTiBpcyBub3Qgc2V0CitDVF9MT0dfUFJPR1JFU1NfQkFSPXkKK0NUX0xPR19UT19GSUxFPXkKK0NUX0xPR19GSUxFX0NPTVBSRVNTPXkKKworIworIyBUYXJnZXQgb3B0aW9ucworIworQ1RfQVJDSD0ieDg2IgorQ1RfQVJDSF9TVVBQT1JUU18zMj15CitDVF9BUkNIX1NVUFBPUlRTXzY0PXkKK0NUX0FSQ0hfU1VQUE9SVF9BUkNIPXkKK0NUX0FSQ0hfU1VQUE9SVF9DUFU9eQorQ1RfQVJDSF9TVVBQT1JUX1RVTkU9eQorQ1RfQVJDSF9ERUZBVUxUXzMyPXkKK0NUX0FSQ0hfQVJDSD0iIgorQ1RfQVJDSF9DUFU9IiIKK0NUX0FSQ0hfVFVORT0iIgorIyBDVF9BUkNIXzMyIGlzIG5vdCBzZXQKK0NUX0FSQ0hfNjQ9eQorQ1RfQVJDSF9CSVRORVNTPTY0CitDVF9BUkNIX0ZMT0FUX0hXPXkKKyMgQ1RfQVJDSF9GTE9BVF9TVyBpcyBub3Qgc2V0CitDVF9UQVJHRVRfQ0ZMQUdTPSIiCitDVF9UQVJHRVRfTERGTEFHUz0iIgorIyBDVF9BUkNIX2FscGhhIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9hcm0gaXMgbm90IHNldAorIyBDVF9BUkNIX2F2cjMyIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9ibGFja2ZpbiBpcyBub3Qgc2V0CisjIENUX0FSQ0hfbWlwcyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfcG93ZXJwYyBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc2ggaXMgbm90IHNldAorIyBDVF9BUkNIX3NwYXJjIGlzIG5vdCBzZXQKK0NUX0FSQ0hfeDg2PXkKK0NUX0FSQ0hfYWxwaGFfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXJtX0FWQUlMQUJMRT15CitDVF9BUkNIX2F2cjMyX0FWQUlMQUJMRT15CitDVF9BUkNIX2JsYWNrZmluX0FWQUlMQUJMRT15CitDVF9BUkNIX202OGtfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbWlwc19BVkFJTEFCTEU9eQorQ1RfQVJDSF9wb3dlcnBjX0FWQUlMQUJMRT15CitDVF9BUkNIX3MzOTBfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfc2hfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfc3BhcmNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfeDg2X0FWQUlMQUJMRT15CisKKyMKKyMgR2VuZXJpYyB0YXJnZXQgb3B0aW9ucworIworQ1RfQVJDSF9VU0VfTU1VPXkKKworIworIyBUYXJnZXQgb3B0aW1pc2F0aW9ucworIworCisjCisjIFRvb2xjaGFpbiBvcHRpb25zCisjCisKKyMKKyMgR2VuZXJhbCB0b29sY2hhaW4gb3B0aW9ucworIworQ1RfRk9SQ0VfU1lTUk9PVD15CitDVF9VU0VfU1lTUk9PVD15CitDVF9TWVNST09UX05BTUU9InN5c3Jvb3QiCitDVF9TWVNST09UX0RJUl9QUkVGSVg9IiIKK0NUX1dBTlRTX1NUQVRJQ19MSU5LPXkKK0NUX1RPT0xDSEFJTl9QS0dWRVJTSU9OPSIiCitDVF9UT09MQ0hBSU5fQlVHVVJMPSIiCisKKyMKKyMgVHVwbGUgY29tcGxldGlvbiBhbmQgYWxpYXNpbmcKKyMKK0NUX1RBUkdFVF9WRU5ET1I9InVua25vd24iCitDVF9UQVJHRVRfQUxJQVNfU0VEX0VYUFI9IiIKK0NUX1RBUkdFVF9BTElBUz0iIgorCisjCisjIFRvb2xjaGFpbiB0eXBlCisjCitDVF9DUk9TUz15CitDVF9UT09MQ0hBSU5fVFlQRT0iY3Jvc3MiCisKKyMKKyMgQnVpbGQgc3lzdGVtCisjCitDVF9CVUlMRD0iIgorQ1RfQlVJTERfUFJFRklYPSIiCitDVF9CVUlMRF9TVUZGSVg9IiIKKworIworIyBPcGVyYXRpbmcgU3lzdGVtCisjCitDVF9LRVJORUxfU1VQUE9SVFNfU0hBUkVEX0xJQlM9eQorQ1RfS0VSTkVMPSJsaW51eCIKK0NUX0tFUk5FTF9WRVJTSU9OPSIyLjYuMzMuMTkiCisjIENUX0tFUk5FTF9iYXJlX21ldGFsIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9saW51eD15CitDVF9LRVJORUxfYmFyZV9tZXRhbF9BVkFJTEFCTEU9eQorQ1RfS0VSTkVMX2xpbnV4X0FWQUlMQUJMRT15CisjIENUX0tFUk5FTF9WXzNfMF80IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzMgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMiBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8xIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM5XzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzhfOCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zN182IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM2XzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzVfMTQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzRfMTAgaXMgbm90IHNldAorQ1RfS0VSTkVMX1ZfMl82XzMzXzE5PXkKKyMgQ1RfS0VSTkVMX1ZfMl82XzMyXzQ2IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzMxXzE0IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzI3XzU5IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX0xJTlVYX0NVU1RPTSBpcyBub3Qgc2V0CitDVF9LRVJORUxfbWluZ3czMl9BVkFJTEFCTEU9eQorCisjCisjIENvbW1vbiBrZXJuZWwgb3B0aW9ucworIworQ1RfU0hBUkVEX0xJQlM9eQorCisjCisjIGxpbnV4IG90aGVyIG9wdGlvbnMKKyMKK0NUX0tFUk5FTF9MSU5VWF9WRVJCT1NJVFlfMD15CisjIENUX0tFUk5FTF9MSU5VWF9WRVJCT1NJVFlfMSBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9MSU5VWF9WRVJCT1NJVFlfMiBpcyBub3Qgc2V0CitDVF9LRVJORUxfTElOVVhfVkVSQk9TRV9MRVZFTD0wCitDVF9LRVJORUxfTElOVVhfSU5TVEFMTF9DSEVDSz15CisKKyMKKyMgQmluYXJ5IHV0aWxpdGllcworIworQ1RfQVJDSF9CSU5GTVRfRUxGPXkKKworIworIyBHTlUgYmludXRpbHMKKyMKKyMgQ1RfQklOVVRJTFNfVl8yXzIxXzFhIGlzIG5vdCBzZXQKK0NUX0JJTlVUSUxTX1ZfMl8yMF8xYT15CisjIENUX0JJTlVUSUxTX1ZfMl8xOV8xYSBpcyBub3Qgc2V0CisjIENUX0JJTlVUSUxTX1ZfMl8xOGEgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVkVSU0lPTj0iMi4yMC4xYSIKK0NUX0JJTlVUSUxTXzJfMjBfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfMl8xOV9vcl9sYXRlcj15CitDVF9CSU5VVElMU18yXzE4X29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTX0dPTERfU1VQUE9SVFNfQVJDSD15CitDVF9CSU5VVElMU19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQklOVVRJTFNfRk9SQ0VfTERfQkZEPXkKK0NUX0JJTlVUSUxTX0xJTktFUl9MRD15CitDVF9CSU5VVElMU19MSU5LRVJTX0xJU1Q9ImxkIgorQ1RfQklOVVRJTFNfTElOS0VSX0RFRkFVTFQ9ImJmZCIKK0NUX0JJTlVUSUxTX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVD15CitDVF9CSU5VVElMU19GT1JfVEFSR0VUX0lCRVJUWT15CitDVF9CSU5VVElMU19GT1JfVEFSR0VUX0JGRD15CisKKyMKKyMgQyBjb21waWxlcgorIworQ1RfQ0M9ImdjYyIKK0NUX0NDX1ZFUlNJT049IjQuNC4zIgorQ1RfQ0NfZ2NjPXkKKyMgQ1RfQ0NfVl80XzRfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF80IGlzIG5vdCBzZXQKK0NUX0NDX1ZfNF80XzM9eQorIyBDVF9DQ19WXzRfNF8yIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfMSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzAgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM182IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNSBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzQgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18zIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfMl80IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfMiBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfNF8yX29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzNfb3JfbGF0ZXI9eQorQ1RfQ0NfR0NDXzRfND15CitDVF9DQ19HQ0NfNF80X29yX2xhdGVyPXkKK0NUX0NDX0dDQ19IQVNfR1JBUEhJVEU9eQorQ1RfQ0NfR0NDX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9DQ19HQ0NfVVNFX0dNUF9NUEZSPXkKK0NUX0NDX0dDQ19VU0VfUFBMX0NMT09HPXkKK0NUX0NDX0xBTkdfSkFWQV9VU0VfRUNKPXkKK0NUX0NDX0xBTkdfRk9SVFJBTj15CitDVF9DQ19TVVBQT1JUX0NYWD15CitDVF9DQ19TVVBQT1JUX0ZPUlRSQU49eQorQ1RfQ0NfU1VQUE9SVF9KQVZBPXkKK0NUX0NDX1NVUFBPUlRfQURBPXkKK0NUX0NDX1NVUFBPUlRfT0JKQz15CitDVF9DQ19TVVBQT1JUX09CSkNYWD15CisKKyMKKyMgQWRkaXRpb25hbCBzdXBwb3J0ZWQgbGFuZ3VhZ2VzOgorIworQ1RfQ0NfTEFOR19DWFg9eQorQ1RfQ0NfTEFOR19KQVZBPXkKKworIworIyBnY2Mgb3RoZXIgb3B0aW9ucworIworQ1RfQ0NfRU5BQkxFX0NYWF9GTEFHUz0iIgorQ1RfQ0NfQ09SRV9FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0NDX0VYVFJBX0NPTkZJR19BUlJBWT0iIgorQ1RfQ0NfU1RBVElDX0xJQlNURENYWD15CisKKyMKKyMgT3B0aW1pc2F0aW9uIGZlYXR1cmVzCisjCitDVF9DQ19HQ0NfVVNFX0dSQVBISVRFPXkKKworIworIyBTZXR0aW5ncyBmb3IgbGlicmFyaWVzIHJ1bm5pbmcgb24gdGFyZ2V0CisjCitDVF9DQ19HQ0NfRU5BQkxFX1RBUkdFVF9PUFRTUEFDRT15CisjIENUX0NDX0dDQ19MSUJNVURGTEFQIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQkdPTVAgaXMgbm90IHNldAorIyBDVF9DQ19HQ0NfTElCU1NQIGlzIG5vdCBzZXQKKworIworIyBNaXNjLiBvYnNjdXJlIG9wdGlvbnMuCisjCitDVF9DQ19DWEFfQVRFWElUPXkKKyMgQ1RfQ0NfR0NDX0RJU0FCTEVfUENIIGlzIG5vdCBzZXQKK0NUX0NDX0dDQ19TSkxKX0VYQ0VQVElPTlM9bQorQ1RfQ0NfR0NDX0xEQkxfMTI4PW0KKworIworIyBDLWxpYnJhcnkKKyMKK0NUX0xJQkM9ImdsaWJjIgorQ1RfTElCQ19WRVJTSU9OPSIyLjkiCisjIENUX0xJQkNfZWdsaWJjIGlzIG5vdCBzZXQKK0NUX0xJQkNfZ2xpYmM9eQorIyBDVF9MSUJDX3VDbGliYyBpcyBub3Qgc2V0CitDVF9MSUJDX2VnbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19nbGliY19BVkFJTEFCTEU9eQorQ1RfTElCQ19HTElCQ19UQVJCQUxMPXkKK0NUX0xJQkNfR0xJQkNfVl8yXzk9eQorIyBDVF9MSUJDX0dMSUJDX1ZfMl84IGlzIG5vdCBzZXQKK0NUX0xJQkNfbWluZ3dfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbmV3bGliX0FWQUlMQUJMRT15CitDVF9MSUJDX25vbmVfQVZBSUxBQkxFPXkKK0NUX0xJQkNfdUNsaWJjX0FWQUlMQUJMRT15CitDVF9MSUJDX1NVUFBPUlRfVEhSRUFEU19BTlk9eQorQ1RfTElCQ19TVVBQT1JUX05QVEw9eQorQ1RfVEhSRUFEUz0ibnB0bCIKKworIworIyBDb21tb24gQyBsaWJyYXJ5IG9wdGlvbnMKKyMKK0NUX1RIUkVBRFNfTlBUTD15CitDVF9MSUJDX1hMREQ9eQorQ1RfTElCQ19nbGliY19mYW1pbGx5PXkKK0NUX0xJQkNfR0xJQkNfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9MSUJDX0dMSUJDX0NPTkZJR1BBUk1TPSIiCitDVF9MSUJDX0dMSUJDX0VYVFJBX0NGTEFHUz0iIgorQ1RfTElCQ19FWFRSQV9DQ19BUkdTPSIiCisjIENUX0xJQkNfRElTQUJMRV9WRVJTSU9OSU5HIGlzIG5vdCBzZXQKK0NUX0xJQkNfT0xERVNUX0FCST0iIgorQ1RfTElCQ19HTElCQ19GT1JDRV9VTldJTkQ9eQorIyBDVF9MSUJDX0dMSUJDX1VTRV9QT1JUUyBpcyBub3Qgc2V0CitDVF9MSUJDX0FERE9OU19MSVNUPSIiCisjIENUX0xJQkNfTE9DQUxFUyBpcyBub3Qgc2V0CisjIENUX0xJQkNfR0xJQkNfS0VSTkVMX1ZFUlNJT05fTk9ORSBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX0FTX0hFQURFUlM9eQorIyBDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX0NIT1NFTiBpcyBub3Qgc2V0CitDVF9MSUJDX0dMSUJDX01JTl9LRVJORUw9IjIuNi4zMy4xOSIKKworIworIyBnbGliYyBvdGhlciBvcHRpb25zCisjCisKKyMKKyMgRGVidWcgZmFjaWxpdGllcworIworQ1RfREVCVUdfZG1hbGxvYz15CitDVF9ETUFMTE9DX1ZfNV81XzI9eQorQ1RfRE1BTExPQ19WRVJTSU9OPSI1LjUuMiIKK0NUX0RFQlVHX2R1bWE9eQorQ1RfRFVNQV9BPXkKK0NUX0RVTUFfU089eQorQ1RfRFVNQV9WXzJfNV8xNT15CitDVF9EVU1BX1ZFUlNJT049IjJfNV8xNSIKK0NUX0RFQlVHX2dkYj15CitDVF9HREJfQ1JPU1M9eQorIyBDVF9HREJfQ1JPU1NfU1RBVElDIGlzIG5vdCBzZXQKK0NUX0dEQl9DUk9TU19QWVRIT049eQorQ1RfR0RCX05BVElWRT15CisjIENUX0dEQl9OQVRJVkVfU1RBVElDIGlzIG5vdCBzZXQKK0NUX0dEQl9HREJTRVJWRVI9eQorQ1RfR0RCX0dEQlNFUlZFUl9TVEFUSUM9eQorCisjCisjIGdkYiB2ZXJzaW9uCisjCitDVF9HREJfVl82XzhhPXkKK0NUX0dEQl9WRVJTSU9OPSI2LjhhIgorQ1RfREVCVUdfbHRyYWNlPXkKK0NUX0xUUkFDRV9WXzBfNV8zPXkKKyMgQ1RfTFRSQUNFX1ZfMF81XzIgaXMgbm90IHNldAorQ1RfTFRSQUNFX1ZFUlNJT049IjAuNS4zIgorQ1RfTFRSQUNFXzBfNV8zX29yX2xhdGVyPXkKK0NUX0RFQlVHX3N0cmFjZT15CitDVF9TVFJBQ0VfVl80XzVfMTk9eQorIyBDVF9TVFJBQ0VfVl80XzVfMTggaXMgbm90IHNldAorQ1RfU1RSQUNFX1ZFUlNJT049IjQuNS4xOSIKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzCisjCitDVF9DT01QTElCU19ORUVERUQ9eQorQ1RfR01QX05FRURFRD15CitDVF9NUEZSX05FRURFRD15CitDVF9QUExfTkVFREVEPXkKK0NUX0NMT09HX05FRURFRD15CitDVF9DT01QTElCUz15CitDVF9HTVA9eQorQ1RfTVBGUj15CitDVF9QUEw9eQorQ1RfQ0xPT0c9eQorQ1RfTElCRUxGX1RBUkdFVD15CitDVF9HTVBfVl80XzNfMj15CisjIENUX0dNUF9WXzRfM18xIGlzIG5vdCBzZXQKKyMgQ1RfR01QX1ZfNF8zXzAgaXMgbm90IHNldAorQ1RfR01QX1ZFUlNJT049IjQuMy4yIgorIyBDVF9NUEZSX1ZfM18wXzAgaXMgbm90IHNldAorQ1RfTVBGUl9WXzJfNF8yPXkKKyMgQ1RfTVBGUl9WXzJfNF8xIGlzIG5vdCBzZXQKKyMgQ1RfTVBGUl9WXzJfNF8wIGlzIG5vdCBzZXQKK0NUX01QRlJfVkVSU0lPTj0iMi40LjIiCitDVF9QUExfVl8wXzEwXzI9eQorQ1RfUFBMX1ZFUlNJT049IjAuMTAuMiIKKyMgQ1RfQ0xPT0dfVl8wXzE1XzEwIGlzIG5vdCBzZXQKK0NUX0NMT09HX1ZfMF8xNV85PXkKKyMgQ1RfQ0xPT0dfVl8wXzE1XzggaXMgbm90IHNldAorIyBDVF9DTE9PR19WXzBfMTVfNyBpcyBub3Qgc2V0CisjIENUX0NMT09HX1ZfMF8xNV82IGlzIG5vdCBzZXQKK0NUX0NMT09HX1ZFUlNJT049IjAuMTUuOSIKKworIworIyBsaWJlbGYgdmVyc2lvbiBuZWVkZWQgdG8gYnVpbGQgZm9yIHRhcmdldAorIworQ1RfTElCRUxGX1ZfMF84XzEzPXkKKyMgQ1RfTElCRUxGX1ZfMF84XzEyIGlzIG5vdCBzZXQKK0NUX0xJQkVMRl9WRVJTSU9OPSIwLjguMTMiCisKKyMKKyMgQ29tcGFuaW9uIGxpYnJhcmllcyBjb21tb24gb3B0aW9ucworIworIyBDVF9DT01QTElCU19DSEVDSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMveDg2XzY0LXVua25vd24tbGludXgtZ251L3JlcG9ydGVkLmJ5IGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3g4Nl82NC11bmtub3duLWxpbnV4LWdudS9yZXBvcnRlZC5ieQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTdjZTY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3g4Nl82NC11bmtub3duLWxpbnV4LWdudS9yZXBvcnRlZC5ieQpAQCAtMCwwICsxLDMgQEAKK3JlcG9ydGVyX25hbWU9IlRob21hcyBKT1VSREFOIgorcmVwb3J0ZXJfdXJsPSIiCityZXBvcnRlcl9jb21tZW50PSIiCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMveDg2XzY0LXVua25vd24tbGludXgtdWNsaWJjL2Nyb3NzdG9vbC5jb25maWcgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMveDg2XzY0LXVua25vd24tbGludXgtdWNsaWJjL2Nyb3NzdG9vbC5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ2OTFiNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy94ODZfNjQtdW5rbm93bi1saW51eC11Y2xpYmMvY3Jvc3N0b29sLmNvbmZpZwpAQCAtMCwwICsxLDQ0MSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBjcm9zc3Rvb2wtTkcgaGdfZGVmYXVsdEAyNzIzX2Q1NmJhNjA0YmU4MCBDb25maWd1cmF0aW9uCisjIFN1biBPY3QgMTYgMTg6MjE6MzEgMjAxMQorIworQ1RfQ09ORklHVVJFX2hhc194enV0aWxzPXkKK0NUX0NPTkZJR1VSRV9oYXNfY3ZzPXkKK0NUX0NPTkZJR1VSRV9oYXNfc3ZuPXkKK0NUX01PRFVMRVM9eQorCisjCisjIFBhdGhzIGFuZCBtaXNjIG9wdGlvbnMKKyMKKworIworIyBjcm9zc3Rvb2wtTkcgYmVoYXZpb3IKKyMKKyMgQ1RfT0JTT0xFVEUgaXMgbm90IHNldAorIyBDVF9FWFBFUklNRU5UQUwgaXMgbm90IHNldAorIyBDVF9ERUJVR19DVCBpcyBub3Qgc2V0CisKKyMKKyMgUGF0aHMKKyMKK0NUX0xPQ0FMX1RBUkJBTExTX0RJUj0iJHtIT01FfS9zcmMiCitDVF9TQVZFX1RBUkJBTExTPXkKK0NUX1dPUktfRElSPSIke0NUX1RPUF9ESVJ9Ly5idWlsZCIKK0NUX1BSRUZJWF9ESVI9IiR7SE9NRX0veC10b29scy8ke0NUX1RBUkdFVH0iCitDVF9JTlNUQUxMX0RJUj0iJHtDVF9QUkVGSVhfRElSfSIKK0NUX1JNX1JGX1BSRUZJWF9ESVI9eQorQ1RfUkVNT1ZFX0RPQ1M9eQorQ1RfSU5TVEFMTF9ESVJfUk89eQorQ1RfU1RSSVBfQUxMX1RPT0xDSEFJTl9FWEVDVVRBQkxFUz15CisKKyMKKyMgRG93bmxvYWRpbmcKKyMKKyMgQ1RfRk9SQklEX0RPV05MT0FEIGlzIG5vdCBzZXQKKyMgQ1RfRk9SQ0VfRE9XTkxPQUQgaXMgbm90IHNldAorQ1RfQ09OTkVDVF9USU1FT1VUPTEwCisjIENUX09OTFlfRE9XTkxPQUQgaXMgbm90IHNldAorIyBDVF9VU0VfTUlSUk9SIGlzIG5vdCBzZXQKKworIworIyBFeHRyYWN0aW5nCisjCisjIENUX0ZPUkNFX0VYVFJBQ1QgaXMgbm90IHNldAorQ1RfT1ZFUklERV9DT05GSUdfR1VFU1NfU1VCPXkKKyMgQ1RfT05MWV9FWFRSQUNUIGlzIG5vdCBzZXQKK0NUX1BBVENIX0JVTkRMRUQ9eQorIyBDVF9QQVRDSF9MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0JVTkRMRURfTE9DQUwgaXMgbm90IHNldAorIyBDVF9QQVRDSF9MT0NBTF9CVU5ETEVEIGlzIG5vdCBzZXQKKyMgQ1RfUEFUQ0hfQlVORExFRF9GQUxMQkFDS19MT0NBTCBpcyBub3Qgc2V0CisjIENUX1BBVENIX0xPQ0FMX0ZBTExCQUNLX0JVTkRMRUQgaXMgbm90IHNldAorIyBDVF9QQVRDSF9OT05FIGlzIG5vdCBzZXQKK0NUX1BBVENIX09SREVSPSJidW5kbGVkIgorCisjCisjIEJ1aWxkIGJlaGF2aW9yCisjCitDVF9QQVJBTExFTF9KT0JTPTAKK0NUX0xPQUQ9MAorQ1RfVVNFX1BJUEVTPXkKK0NUX0VYVFJBX0ZMQUdTX0ZPUl9IT1NUPSIiCisjIENUX0NPTkZJR19TSEVMTF9TSCBpcyBub3Qgc2V0CisjIENUX0NPTkZJR19TSEVMTF9BU0ggaXMgbm90IHNldAorQ1RfQ09ORklHX1NIRUxMX0JBU0g9eQorIyBDVF9DT05GSUdfU0hFTExfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0NPTkZJR19TSEVMTD0iJHtiYXNofSIKKworIworIyBMb2dnaW5nCisjCisjIENUX0xPR19FUlJPUiBpcyBub3Qgc2V0CisjIENUX0xPR19XQVJOIGlzIG5vdCBzZXQKKyMgQ1RfTE9HX0lORk8gaXMgbm90IHNldAorQ1RfTE9HX0VYVFJBPXkKKyMgQ1RfTE9HX0FMTCBpcyBub3Qgc2V0CisjIENUX0xPR19ERUJVRyBpcyBub3Qgc2V0CitDVF9MT0dfTEVWRUxfTUFYPSJFWFRSQSIKKyMgQ1RfTE9HX1NFRV9UT09MU19XQVJOIGlzIG5vdCBzZXQKK0NUX0xPR19QUk9HUkVTU19CQVI9eQorQ1RfTE9HX1RPX0ZJTEU9eQorQ1RfTE9HX0ZJTEVfQ09NUFJFU1M9eQorCisjCisjIFRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIPSJ4ODYiCitDVF9BUkNIX1NVUFBPUlRTXzMyPXkKK0NUX0FSQ0hfU1VQUE9SVFNfNjQ9eQorQ1RfQVJDSF9TVVBQT1JUX0FSQ0g9eQorQ1RfQVJDSF9TVVBQT1JUX0NQVT15CitDVF9BUkNIX1NVUFBPUlRfVFVORT15CitDVF9BUkNIX0RFRkFVTFRfMzI9eQorQ1RfQVJDSF9BUkNIPSIiCitDVF9BUkNIX0NQVT0iIgorQ1RfQVJDSF9UVU5FPSIiCisjIENUX0FSQ0hfMzIgaXMgbm90IHNldAorQ1RfQVJDSF82ND15CitDVF9BUkNIX0JJVE5FU1M9NjQKK0NUX0FSQ0hfRkxPQVRfSFc9eQorIyBDVF9BUkNIX0ZMT0FUX1NXIGlzIG5vdCBzZXQKK0NUX1RBUkdFVF9DRkxBR1M9IiIKK0NUX1RBUkdFVF9MREZMQUdTPSIiCisjIENUX0FSQ0hfYWxwaGEgaXMgbm90IHNldAorIyBDVF9BUkNIX2FybSBpcyBub3Qgc2V0CisjIENUX0FSQ0hfYXZyMzIgaXMgbm90IHNldAorIyBDVF9BUkNIX2JsYWNrZmluIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9taXBzIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9wb3dlcnBjIGlzIG5vdCBzZXQKKyMgQ1RfQVJDSF9zaCBpcyBub3Qgc2V0CisjIENUX0FSQ0hfc3BhcmMgaXMgbm90IHNldAorQ1RfQVJDSF94ODY9eQorQ1RfQVJDSF9hbHBoYV9BVkFJTEFCTEU9eQorQ1RfQVJDSF9hcm1fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYXZyMzJfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfYmxhY2tmaW5fQVZBSUxBQkxFPXkKK0NUX0FSQ0hfbTY4a19BVkFJTEFCTEU9eQorQ1RfQVJDSF9taXBzX0FWQUlMQUJMRT15CitDVF9BUkNIX3Bvd2VycGNfQVZBSUxBQkxFPXkKK0NUX0FSQ0hfczM5MF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zaF9BVkFJTEFCTEU9eQorQ1RfQVJDSF9zcGFyY19BVkFJTEFCTEU9eQorQ1RfQVJDSF94ODZfQVZBSUxBQkxFPXkKKworIworIyBHZW5lcmljIHRhcmdldCBvcHRpb25zCisjCitDVF9BUkNIX1VTRV9NTVU9eQorCisjCisjIFRhcmdldCBvcHRpbWlzYXRpb25zCisjCisKKyMKKyMgVG9vbGNoYWluIG9wdGlvbnMKKyMKKworIworIyBHZW5lcmFsIHRvb2xjaGFpbiBvcHRpb25zCisjCitDVF9GT1JDRV9TWVNST09UPXkKK0NUX1VTRV9TWVNST09UPXkKK0NUX1NZU1JPT1RfTkFNRT0ic3lzcm9vdCIKK0NUX1NZU1JPT1RfRElSX1BSRUZJWD0iIgorQ1RfV0FOVFNfU1RBVElDX0xJTks9eQorQ1RfVE9PTENIQUlOX1BLR1ZFUlNJT049IiIKK0NUX1RPT0xDSEFJTl9CVUdVUkw9IiIKKworIworIyBUdXBsZSBjb21wbGV0aW9uIGFuZCBhbGlhc2luZworIworQ1RfVEFSR0VUX1ZFTkRPUj0idW5rbm93biIKK0NUX1RBUkdFVF9BTElBU19TRURfRVhQUj0iIgorQ1RfVEFSR0VUX0FMSUFTPSIiCisKKyMKKyMgVG9vbGNoYWluIHR5cGUKKyMKK0NUX0NST1NTPXkKK0NUX1RPT0xDSEFJTl9UWVBFPSJjcm9zcyIKKworIworIyBCdWlsZCBzeXN0ZW0KKyMKK0NUX0JVSUxEPSIiCitDVF9CVUlMRF9QUkVGSVg9IiIKK0NUX0JVSUxEX1NVRkZJWD0iIgorCisjCisjIE9wZXJhdGluZyBTeXN0ZW0KKyMKK0NUX0tFUk5FTF9TVVBQT1JUU19TSEFSRURfTElCUz15CitDVF9LRVJORUw9ImxpbnV4IgorQ1RfS0VSTkVMX1ZFUlNJT049IjIuNi4zMy4xOSIKKyMgQ1RfS0VSTkVMX2JhcmVfbWV0YWwgaXMgbm90IHNldAorQ1RfS0VSTkVMX2xpbnV4PXkKK0NUX0tFUk5FTF9iYXJlX21ldGFsX0FWQUlMQUJMRT15CitDVF9LRVJORUxfbGludXhfQVZBSUxBQkxFPXkKKyMgQ1RfS0VSTkVMX1ZfM18wXzQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzBfMyBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzNfMF8yIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfM18wXzEgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8zXzAgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzlfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zOF84IGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX1ZfMl82XzM3XzYgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzZfNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNV8xNCBpcyBub3Qgc2V0CisjIENUX0tFUk5FTF9WXzJfNl8zNF8xMCBpcyBub3Qgc2V0CitDVF9LRVJORUxfVl8yXzZfMzNfMTk9eQorIyBDVF9LRVJORUxfVl8yXzZfMzJfNDYgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMzFfMTQgaXMgbm90IHNldAorIyBDVF9LRVJORUxfVl8yXzZfMjdfNTkgaXMgbm90IHNldAorIyBDVF9LRVJORUxfTElOVVhfQ1VTVE9NIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9taW5ndzMyX0FWQUlMQUJMRT15CisKKyMKKyMgQ29tbW9uIGtlcm5lbCBvcHRpb25zCisjCitDVF9TSEFSRURfTElCUz15CisKKyMKKyMgbGludXggb3RoZXIgb3B0aW9ucworIworQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8wPXkKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8xIGlzIG5vdCBzZXQKKyMgQ1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0lUWV8yIGlzIG5vdCBzZXQKK0NUX0tFUk5FTF9MSU5VWF9WRVJCT1NFX0xFVkVMPTAKK0NUX0tFUk5FTF9MSU5VWF9JTlNUQUxMX0NIRUNLPXkKKworIworIyBCaW5hcnkgdXRpbGl0aWVzCisjCitDVF9BUkNIX0JJTkZNVF9FTEY9eQorCisjCisjIEdOVSBiaW51dGlscworIworIyBDVF9CSU5VVElMU19WXzJfMjFfMWEgaXMgbm90IHNldAorQ1RfQklOVVRJTFNfVl8yXzIwXzFhPXkKKyMgQ1RfQklOVVRJTFNfVl8yXzE5XzFhIGlzIG5vdCBzZXQKKyMgQ1RfQklOVVRJTFNfVl8yXzE4YSBpcyBub3Qgc2V0CitDVF9CSU5VVElMU19WRVJTSU9OPSIyLjIwLjFhIgorQ1RfQklOVVRJTFNfMl8yMF9vcl9sYXRlcj15CitDVF9CSU5VVElMU18yXzE5X29yX2xhdGVyPXkKK0NUX0JJTlVUSUxTXzJfMThfb3JfbGF0ZXI9eQorQ1RfQklOVVRJTFNfR09MRF9TVVBQT1JUU19BUkNIPXkKK0NUX0JJTlVUSUxTX0hBU19QS0dWRVJTSU9OX0JVR1VSTD15CitDVF9CSU5VVElMU19MSU5LRVJfTEQ9eQorQ1RfQklOVVRJTFNfTElOS0VSU19MSVNUPSJsZCIKK0NUX0JJTlVUSUxTX0xJTktFUl9ERUZBVUxUPSJiZmQiCitDVF9CSU5VVElMU19FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0JJTlVUSUxTX0ZPUl9UQVJHRVQ9eQorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVF9JQkVSVFk9eQorQ1RfQklOVVRJTFNfRk9SX1RBUkdFVF9CRkQ9eQorCisjCisjIEMgY29tcGlsZXIKKyMKK0NUX0NDPSJnY2MiCitDVF9DQ19WRVJTSU9OPSI0LjQuMyIKK0NUX0NDX2djYz15CisjIENUX0NDX1ZfNF80XzYgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF81IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzRfNCBpcyBub3Qgc2V0CitDVF9DQ19WXzRfNF8zPXkKKyMgQ1RfQ0NfVl80XzRfMiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF80XzEgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfNF8wIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfNiBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzUgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM180IGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzNfMyBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8zXzIgaXMgbm90IHNldAorIyBDVF9DQ19WXzRfM18xIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfVl80XzJfNCBpcyBub3Qgc2V0CisjIENUX0NDX1ZfNF8yXzIgaXMgbm90IHNldAorQ1RfQ0NfR0NDXzRfMl9vcl9sYXRlcj15CitDVF9DQ19HQ0NfNF8zX29yX2xhdGVyPXkKK0NUX0NDX0dDQ180XzQ9eQorQ1RfQ0NfR0NDXzRfNF9vcl9sYXRlcj15CitDVF9DQ19HQ0NfSEFTX0dSQVBISVRFPXkKK0NUX0NDX0dDQ19IQVNfUEtHVkVSU0lPTl9CVUdVUkw9eQorQ1RfQ0NfR0NDX1VTRV9HTVBfTVBGUj15CitDVF9DQ19HQ0NfVVNFX1BQTF9DTE9PRz15CitDVF9DQ19MQU5HX0pBVkFfVVNFX0VDSj15CitDVF9DQ19MQU5HX0ZPUlRSQU49eQorQ1RfQ0NfU1VQUE9SVF9DWFg9eQorQ1RfQ0NfU1VQUE9SVF9GT1JUUkFOPXkKK0NUX0NDX1NVUFBPUlRfSkFWQT15CitDVF9DQ19TVVBQT1JUX0FEQT15CitDVF9DQ19TVVBQT1JUX09CSkM9eQorQ1RfQ0NfU1VQUE9SVF9PQkpDWFg9eQorCisjCisjIEFkZGl0aW9uYWwgc3VwcG9ydGVkIGxhbmd1YWdlczoKKyMKK0NUX0NDX0xBTkdfQ1hYPXkKK0NUX0NDX0xBTkdfSkFWQT15CisKKyMKKyMgZ2NjIG90aGVyIG9wdGlvbnMKKyMKK0NUX0NDX0VOQUJMRV9DWFhfRkxBR1M9IiIKK0NUX0NDX0NPUkVfRVhUUkFfQ09ORklHX0FSUkFZPSIiCitDVF9DQ19FWFRSQV9DT05GSUdfQVJSQVk9IiIKK0NUX0NDX1NUQVRJQ19MSUJTVERDWFg9eQorCisjCisjIE9wdGltaXNhdGlvbiBmZWF0dXJlcworIworQ1RfQ0NfR0NDX1VTRV9HUkFQSElURT15CisKKyMKKyMgU2V0dGluZ3MgZm9yIGxpYnJhcmllcyBydW5uaW5nIG9uIHRhcmdldAorIworQ1RfQ0NfR0NDX0VOQUJMRV9UQVJHRVRfT1BUU1BBQ0U9eQorIyBDVF9DQ19HQ0NfTElCTVVERkxBUCBpcyBub3Qgc2V0CisjIENUX0NDX0dDQ19MSUJHT01QIGlzIG5vdCBzZXQKKyMgQ1RfQ0NfR0NDX0xJQlNTUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYy4gb2JzY3VyZSBvcHRpb25zLgorIworQ1RfQ0NfQ1hBX0FURVhJVD15CisjIENUX0NDX0dDQ19ESVNBQkxFX1BDSCBpcyBub3Qgc2V0CitDVF9DQ19HQ0NfU0pMSl9FWENFUFRJT05TPW0KK0NUX0NDX0dDQ19MREJMXzEyOD1tCisKKyMKKyMgQy1saWJyYXJ5CisjCitDVF9MSUJDPSJ1Q2xpYmMiCitDVF9MSUJDX1ZFUlNJT049IjAuOS4zMC4yIgorIyBDVF9MSUJDX2VnbGliYyBpcyBub3Qgc2V0CisjIENUX0xJQkNfZ2xpYmMgaXMgbm90IHNldAorQ1RfTElCQ191Q2xpYmM9eQorQ1RfTElCQ19lZ2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfZ2xpYmNfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbWluZ3dfQVZBSUxBQkxFPXkKK0NUX0xJQkNfbmV3bGliX0FWQUlMQUJMRT15CitDVF9MSUJDX25vbmVfQVZBSUxBQkxFPXkKK0NUX0xJQkNfdUNsaWJjX0FWQUlMQUJMRT15CisjIENUX0xJQkNfVUNMSUJDX1ZfMF85XzMyIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19VQ0xJQkNfVl8wXzlfMzBfMyBpcyBub3Qgc2V0CitDVF9MSUJDX1VDTElCQ19WXzBfOV8zMF8yPXkKKyMgQ1RfTElCQ19VQ0xJQkNfVl8wXzlfMzBfMSBpcyBub3Qgc2V0CisjIENUX0xJQkNfVUNMSUJDX1ZfMF85XzMwIGlzIG5vdCBzZXQKK0NUX0xJQkNfVUNMSUJDXzBfOV8zMF9vcl9sYXRlcj15CitDVF9MSUJDX1VDTElCQ19QQVJBTExFTD15CitDVF9MSUJDX1VDTElCQ19WRVJCT1NJVFlfMD15CisjIENUX0xJQkNfVUNMSUJDX1ZFUkJPU0lUWV8xIGlzIG5vdCBzZXQKKyMgQ1RfTElCQ19VQ0xJQkNfVkVSQk9TSVRZXzIgaXMgbm90IHNldAorQ1RfTElCQ19VQ0xJQkNfVkVSQk9TSVRZPSIiCitDVF9MSUJDX1VDTElCQ19ERUJVR19MRVZFTF8wPXkKKyMgQ1RfTElCQ19VQ0xJQkNfREVCVUdfTEVWRUxfMSBpcyBub3Qgc2V0CisjIENUX0xJQkNfVUNMSUJDX0RFQlVHX0xFVkVMXzIgaXMgbm90IHNldAorQ1RfTElCQ19VQ0xJQkNfREVCVUdfTEVWRUw9MAorQ1RfTElCQ19VQ0xJQkNfQ09ORklHX0ZJTEU9IiR7Q1RfTElCX0RJUn0vc2FtcGxlcy8ke0NUX1RBUkdFVH0vJHtDVF9MSUJDfS0ke0NUX0xJQkNfVkVSU0lPTn0uY29uZmlnIgorQ1RfTElCQ19TVVBQT1JUX1RIUkVBRFNfQU5ZPXkKK0NUX0xJQkNfU1VQUE9SVF9MSU5VWFRIUkVBRFM9eQorQ1RfTElCQ19TVVBQT1JUX1RIUkVBRFNfTk9ORT15CitDVF9USFJFQURTPSJsaW51eHRocmVhZHMiCisKKyMKKyMgQ29tbW9uIEMgbGlicmFyeSBvcHRpb25zCisjCitDVF9USFJFQURTX0xJTlVYVEhSRUFEUz15CisjIENUX1RIUkVBRFNfTk9ORSBpcyBub3Qgc2V0CitDVF9MSUJDX1hMREQ9eQorCisjCisjIHVDbGliYyBvdGhlciBvcHRpb25zCisjCitDVF9MSUJDX1VDTElCQ19MTlhUSFJEX09MRD15CisjIENUX0xJQkNfVUNMSUJDX0xOWFRIUkRfTkVXIGlzIG5vdCBzZXQKK0NUX0xJQkNfVUNMSUJDX0xOWFRIUkQ9Im9sZCIKKyMgQ1RfTElCQ19VQ0xJQkNfTE9DQUxFUyBpcyBub3Qgc2V0CisjIENUX0xJQkNfVUNMSUJDX1dDSEFSIGlzIG5vdCBzZXQKKworIworIyBEZWJ1ZyBmYWNpbGl0aWVzCisjCitDVF9ERUJVR19kbWFsbG9jPXkKK0NUX0RNQUxMT0NfVl81XzVfMj15CitDVF9ETUFMTE9DX1ZFUlNJT049IjUuNS4yIgorQ1RfREVCVUdfZHVtYT15CitDVF9EVU1BX0E9eQorQ1RfRFVNQV9TTz15CitDVF9EVU1BX1ZfMl81XzE1PXkKK0NUX0RVTUFfVkVSU0lPTj0iMl81XzE1IgorQ1RfREVCVUdfZ2RiPXkKK0NUX0dEQl9DUk9TUz15CisjIENUX0dEQl9DUk9TU19TVEFUSUMgaXMgbm90IHNldAorQ1RfR0RCX0NST1NTX1BZVEhPTj15CitDVF9HREJfTkFUSVZFPXkKKyMgQ1RfR0RCX05BVElWRV9TVEFUSUMgaXMgbm90IHNldAorQ1RfR0RCX0dEQlNFUlZFUj15CitDVF9HREJfR0RCU0VSVkVSX1NUQVRJQz15CisKKyMKKyMgZ2RiIHZlcnNpb24KKyMKK0NUX0dEQl9WXzZfOGE9eQorQ1RfR0RCX1ZFUlNJT049IjYuOGEiCitDVF9ERUJVR19sdHJhY2U9eQorQ1RfTFRSQUNFX1ZfMF81XzM9eQorIyBDVF9MVFJBQ0VfVl8wXzVfMiBpcyBub3Qgc2V0CitDVF9MVFJBQ0VfVkVSU0lPTj0iMC41LjMiCitDVF9MVFJBQ0VfMF81XzNfb3JfbGF0ZXI9eQorQ1RfREVCVUdfc3RyYWNlPXkKK0NUX1NUUkFDRV9WXzRfNV8xOT15CisjIENUX1NUUkFDRV9WXzRfNV8xOCBpcyBub3Qgc2V0CitDVF9TVFJBQ0VfVkVSU0lPTj0iNC41LjE5IgorCisjCisjIENvbXBhbmlvbiBsaWJyYXJpZXMKKyMKK0NUX0NPTVBMSUJTX05FRURFRD15CitDVF9HTVBfTkVFREVEPXkKK0NUX01QRlJfTkVFREVEPXkKK0NUX1BQTF9ORUVERUQ9eQorQ1RfQ0xPT0dfTkVFREVEPXkKK0NUX0NPTVBMSUJTPXkKK0NUX0dNUD15CitDVF9NUEZSPXkKK0NUX1BQTD15CitDVF9DTE9PRz15CitDVF9MSUJFTEZfVEFSR0VUPXkKK0NUX0dNUF9WXzRfM18yPXkKKyMgQ1RfR01QX1ZfNF8zXzEgaXMgbm90IHNldAorIyBDVF9HTVBfVl80XzNfMCBpcyBub3Qgc2V0CitDVF9HTVBfVkVSU0lPTj0iNC4zLjIiCisjIENUX01QRlJfVl8zXzBfMCBpcyBub3Qgc2V0CitDVF9NUEZSX1ZfMl80XzI9eQorIyBDVF9NUEZSX1ZfMl80XzEgaXMgbm90IHNldAorIyBDVF9NUEZSX1ZfMl80XzAgaXMgbm90IHNldAorQ1RfTVBGUl9WRVJTSU9OPSIyLjQuMiIKK0NUX1BQTF9WXzBfMTBfMj15CitDVF9QUExfVkVSU0lPTj0iMC4xMC4yIgorIyBDVF9DTE9PR19WXzBfMTVfMTAgaXMgbm90IHNldAorQ1RfQ0xPT0dfVl8wXzE1Xzk9eQorIyBDVF9DTE9PR19WXzBfMTVfOCBpcyBub3Qgc2V0CisjIENUX0NMT09HX1ZfMF8xNV83IGlzIG5vdCBzZXQKKyMgQ1RfQ0xPT0dfVl8wXzE1XzYgaXMgbm90IHNldAorQ1RfQ0xPT0dfVkVSU0lPTj0iMC4xNS45IgorCisjCisjIGxpYmVsZiB2ZXJzaW9uIG5lZWRlZCB0byBidWlsZCBmb3IgdGFyZ2V0CisjCitDVF9MSUJFTEZfVl8wXzhfMTM9eQorIyBDVF9MSUJFTEZfVl8wXzhfMTIgaXMgbm90IHNldAorQ1RfTElCRUxGX1ZFUlNJT049IjAuOC4xMyIKKworIworIyBDb21wYW5pb24gbGlicmFyaWVzIGNvbW1vbiBvcHRpb25zCisjCisjIENUX0NPTVBMSUJTX0NIRUNLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2FtcGxlcy94ODZfNjQtdW5rbm93bi1saW51eC11Y2xpYmMvcmVwb3J0ZWQuYnkgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMveDg2XzY0LXVua25vd24tbGludXgtdWNsaWJjL3JlcG9ydGVkLmJ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYThmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMveDg2XzY0LXVua25vd24tbGludXgtdWNsaWJjL3JlcG9ydGVkLmJ5CkBAIC0wLDAgKzEsMyBAQAorcmVwb3J0ZXJfbmFtZT0iWUVNIgorcmVwb3J0ZXJfdXJsPSJodHRwOi8veW1vcmluLmlzLWEtZ2Vlay5vcmcvIgorcmVwb3J0ZXJfY29tbWVudD0iIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3g4Nl82NC11bmtub3duLWxpbnV4LXVjbGliYy91Q2xpYmMtMC45LjMwLjEuY29uZmlnIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3g4Nl82NC11bmtub3duLWxpbnV4LXVjbGliYy91Q2xpYmMtMC45LjMwLjEuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMTYzYWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMveDg2XzY0LXVua25vd24tbGludXgtdWNsaWJjL3VDbGliYy0wLjkuMzAuMS5jb25maWcKQEAgLTAsMCArMSwyNDUgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgVmVyc2lvbjogMC45LjMwCisjIEZyaSBOb3YgMjEgMDk6MjY6MzQgMjAwOAorIworIyBUQVJHRVRfYWxwaGEgaXMgbm90IHNldAorIyBUQVJHRVRfYXJtIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2F2cjMyIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2JmaW4gaXMgbm90IHNldAorIyBUQVJHRVRfY3JpcyBpcyBub3Qgc2V0CisjIFRBUkdFVF9lMSBpcyBub3Qgc2V0CisjIFRBUkdFVF9mcnYgaXMgbm90IHNldAorIyBUQVJHRVRfaDgzMDAgaXMgbm90IHNldAorIyBUQVJHRVRfaHBwYSBpcyBub3Qgc2V0CisjIFRBUkdFVF9pMzg2IGlzIG5vdCBzZXQKKyMgVEFSR0VUX2k5NjAgaXMgbm90IHNldAorIyBUQVJHRVRfaWE2NCBpcyBub3Qgc2V0CisjIFRBUkdFVF9tNjhrIGlzIG5vdCBzZXQKKyMgVEFSR0VUX21pY3JvYmxhemUgaXMgbm90IHNldAorIyBUQVJHRVRfbWlwcyBpcyBub3Qgc2V0CisjIFRBUkdFVF9uaW9zIGlzIG5vdCBzZXQKKyMgVEFSR0VUX25pb3MyIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3Bvd2VycGMgaXMgbm90IHNldAorIyBUQVJHRVRfc2ggaXMgbm90IHNldAorIyBUQVJHRVRfc2g2NCBpcyBub3Qgc2V0CisjIFRBUkdFVF9zcGFyYyBpcyBub3Qgc2V0CisjIFRBUkdFVF92ODUwIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3ZheCBpcyBub3Qgc2V0CitUQVJHRVRfeDg2XzY0PXkKKyMgVEFSR0VUX3h0ZW5zYSBpcyBub3Qgc2V0CisKKyMKKyMgVGFyZ2V0IEFyY2hpdGVjdHVyZSBGZWF0dXJlcyBhbmQgT3B0aW9ucworIworVEFSR0VUX0FSQ0g9Ing4Nl82NCIKK0ZPUkNFX09QVElPTlNfRk9SX0FSQ0g9eQorIyBDT05GSUdfQVJNX09BQkkgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VBQkkgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19BUk0gaXMgbm90IHNldAorIyBDT05GSUdfQVJNNjEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk03VERNSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUk03MjBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTkyMFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJNOTIyVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk05MjZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTEwVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk0xMTM2SkZfUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk0xMTc2SlpfUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk0xMTc2SlpGX1MgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0NPUlRFWF9NMyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fQ09SVEVYX00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9TQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9YU0NBTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0lXTU1YVCBpcyBub3Qgc2V0CitUQVJHRVRfU1VCQVJDSD0iIgorCisjCisjIFVzaW5nIEVMRiBmaWxlIGZvcm1hdAorIworQVJDSF9MSVRUTEVfRU5ESUFOPXkKKyMgQVJDSF9XQU5UU19CSUdfRU5ESUFOIGlzIG5vdCBzZXQKKyMgQVJDSF9XQU5UU19MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKKworIworIyBVc2luZyBMaXR0bGUgRW5kaWFuCisjCitBUkNIX0hBU19NTVU9eQorQVJDSF9VU0VfTU1VPXkKK1VDTElCQ19IQVNfRkxPQVRTPXkKK1VDTElCQ19IQVNfRlBVPXkKK0RPX0M5OV9NQVRIPXkKK1VDTElCQ19IQVNfRkVOVj15CitVQ0xJQkNfSEFTX0xPTkdfRE9VQkxFX01BVEg9eQorS0VSTkVMX0hFQURFUlM9Ii91c3IvaW5jbHVkZSIKK0hBVkVfRE9UX0NPTkZJRz15CisKKyMKKyMgR2VuZXJhbCBMaWJyYXJ5IFNldHRpbmdzCisjCisjIEhBVkVfTk9fUElDIGlzIG5vdCBzZXQKK0RPUElDPXkKKyMgQVJDSF9IQVNfTk9fU0hBUkVEIGlzIG5vdCBzZXQKKyMgQVJDSF9IQVNfTk9fTERTTyBpcyBub3Qgc2V0CitIQVZFX1NIQVJFRD15CisjIEZPUkNFX1NIQVJFQUJMRV9URVhUX1NFR01FTlRTIGlzIG5vdCBzZXQKK0xEU09fTEREX1NVUFBPUlQ9eQorTERTT19DQUNIRV9TVVBQT1JUPXkKKyMgTERTT19QUkVMT0FEX0ZJTEVfU1VQUE9SVCBpcyBub3Qgc2V0CitMRFNPX0JBU0VfRklMRU5BTUU9ImxkLnNvIgorVUNMSUJDX1NUQVRJQ19MRENPTkZJRz15CisjIExEU09fUlVOUEFUSCBpcyBub3Qgc2V0CitVQ0xJQkNfQ1RPUl9EVE9SPXkKKyMgTERTT19HTlVfSEFTSF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgSEFTX05PX1RIUkVBRFMgaXMgbm90IHNldAorVUNMSUJDX0hBU19USFJFQURTPXkKKyMgUFRIUkVBRFNfREVCVUdfU1VQUE9SVCBpcyBub3Qgc2V0CitMSU5VWFRIUkVBRFNfT0xEPXkKK1VDTElCQ19IQVNfU1lTTE9HPXkKK1VDTElCQ19IQVNfTEZTPXkKKyMgTUFMTE9DIGlzIG5vdCBzZXQKKyMgTUFMTE9DX1NJTVBMRSBpcyBub3Qgc2V0CitNQUxMT0NfU1RBTkRBUkQ9eQorIyBNQUxMT0NfR0xJQkNfQ09NUEFUIGlzIG5vdCBzZXQKK1VDTElCQ19EWU5BTUlDX0FURVhJVD15CisjIENPTVBBVF9BVEVYSVQgaXMgbm90IHNldAorIyBVQ0xJQkNfU1VTVjNfTEVHQUNZIGlzIG5vdCBzZXQKKyMgVUNMSUJDX1NVU1YzX0xFR0FDWV9NQUNST1MgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NUVUJTIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfU0hBRE9XPXkKKyMgVUNMSUJDX0hBU19QUk9HUkFNX0lOVk9DQVRJT05fTkFNRSBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1BUWT15CitBU1NVTUVfREVWUFRTPXkKK1VOSVg5OFBUWV9PTkxZPXkKKyMgVUNMSUJDX0hBU19HRVRQVCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1RNX0VYVEVOU0lPTlM9eQorVUNMSUJDX0hBU19UWl9DQUNISU5HPXkKK1VDTElCQ19IQVNfVFpfRklMRT15CitVQ0xJQkNfSEFTX1RaX0ZJTEVfUkVBRF9NQU5ZPXkKK1VDTElCQ19UWl9GSUxFX1BBVEg9Ii9ldGMvVFoiCisKKyMKKyMgQWR2YW5jZWQgTGlicmFyeSBTZXR0aW5ncworIworVUNMSUJDX1BXRF9CVUZGRVJfU0laRT0yNTYKK1VDTElCQ19HUlBfQlVGRkVSX1NJWkU9MjU2CisKKyMKKyMgU3VwcG9ydCB2YXJpb3VzIGZhbWlsaWVzIG9mIGZ1bmN0aW9ucworIworVUNMSUJDX0xJTlVYX01PRFVMRV8yND15CitVQ0xJQkNfTElOVVhfU1BFQ0lGSUM9eQorVUNMSUJDX0hBU19HTlVfRVJST1I9eQorIyBVQ0xJQkNfQlNEX1NQRUNJRklDIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfQlNEX0VSUj15CisjIFVDTElCQ19IQVNfT0JTT0xFVEVfQlNEX1NJR05BTCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfT0JTT0xFVEVfU1lTVl9TSUdOQUwgaXMgbm90IHNldAorIyBVQ0xJQkNfTlRQX0xFR0FDWSBpcyBub3Qgc2V0CisjIFVDTElCQ19TVjRfREVQUkVDQVRFRCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1JFQUxUSU1FPXkKK1VDTElCQ19IQVNfQURWQU5DRURfUkVBTFRJTUU9eQorVUNMSUJDX0hBU19FUE9MTD15CitVQ0xJQkNfSEFTX1hBVFRSPXkKK1VDTElCQ19IQVNfUFJPRklMSU5HPXkKK1VDTElCQ19IQVNfQ1JZUFRfSU1QTD15CitVQ0xJQkNfSEFTX0NSWVBUPXkKK1VDTElCQ19IQVNfTkVUV09SS19TVVBQT1JUPXkKK1VDTElCQ19IQVNfU09DS0VUPXkKK1VDTElCQ19IQVNfSVBWND15CisjIFVDTElCQ19IQVNfSVBWNiBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1JQQz15CitVQ0xJQkNfSEFTX0ZVTExfUlBDPXkKK1VDTElCQ19IQVNfUkVFTlRSQU5UX1JQQz15CitVQ0xJQkNfVVNFX05FVExJTks9eQorVUNMSUJDX1NVUFBPUlRfQUlfQUREUkNPTkZJRz15CisjIFVDTElCQ19IQVNfQlNEX1JFU19DTE9TRSBpcyBub3Qgc2V0CisKKyMKKyMgU3RyaW5nIGFuZCBTdGRpbyBTdXBwb3J0CisjCitVQ0xJQkNfSEFTX1NUUklOR19HRU5FUklDX09QVD15CitVQ0xJQkNfSEFTX1NUUklOR19BUkNIX09QVD15CitVQ0xJQkNfSEFTX0NUWVBFX1RBQkxFUz15CitVQ0xJQkNfSEFTX0NUWVBFX1NJR05FRD15CisjIFVDTElCQ19IQVNfQ1RZUEVfVU5TQUZFIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19DVFlQRV9DSEVDS0VEIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfQ1RZUEVfRU5GT1JDRUQ9eQorIyBVQ0xJQkNfSEFTX1dDSEFSIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19MT0NBTEUgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0hFWEFERUNJTUFMX0ZMT0FUUyBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX0dMSUJDX0NVU1RPTV9QUklOVEY9eQorIyBVU0VfT0xEX1ZGUFJJTlRGIGlzIG5vdCBzZXQKK1VDTElCQ19QUklOVEZfU0NBTkZfUE9TSVRJT05BTF9BUkdTPTkKKyMgVUNMSUJDX0hBU19TQ0FORl9HTElCQ19BX0ZMQUcgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl9OT05FIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfMjU2IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfNTEyIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfMTAyNCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzIwNDggaXMgbm90IHNldAorVUNMSUJDX0hBU19TVERJT19CVUZTSVpfNDA5Nj15CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzgxOTIgaXMgbm90IHNldAorVUNMSUJDX0hBU19TVERJT19CVUlMVElOX0JVRkZFUl9OT05FPXkKKyMgVUNMSUJDX0hBU19TVERJT19CVUlMVElOX0JVRkZFUl80IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUlMVElOX0JVRkZFUl84IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19TSFVURE9XTl9PTl9BQk9SVCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NURElPX0dFVENfTUFDUk89eQorVUNMSUJDX0hBU19TVERJT19QVVRDX01BQ1JPPXkKK1VDTElCQ19IQVNfU1RESU9fQVVUT19SV19UUkFOU0lUSU9OPXkKKyMgVUNMSUJDX0hBU19GT1BFTl9MQVJHRUZJTEVfTU9ERSBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfRk9QRU5fRVhDTFVTSVZFX01PREUgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0dMSUJDX0NVU1RPTV9TVFJFQU1TIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfUFJJTlRGX01fU1BFQz15CitVQ0xJQkNfSEFTX0VSUk5PX01FU1NBR0VTPXkKKyMgVUNMSUJDX0hBU19TWVNfRVJSTElTVCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NJR05VTV9NRVNTQUdFUz15CisjIFVDTElCQ19IQVNfU1lTX1NJR0xJU1QgaXMgbm90IHNldAorVUNMSUJDX0hBU19HTlVfR0VUT1BUPXkKK1VDTElCQ19IQVNfR05VX0dFVFNVQk9QVD15CisKKyMKKyMgQmlnIGFuZCBUYWxsCisjCitVQ0xJQkNfSEFTX1JFR0VYPXkKK1VDTElCQ19IQVNfUkVHRVhfT0xEPXkKK1VDTElCQ19IQVNfRk5NQVRDSD15CitVQ0xJQkNfSEFTX0ZOTUFUQ0hfT0xEPXkKKyMgVUNMSUJDX0hBU19XT1JERVhQIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19GVFcgaXMgbm90IHNldAorVUNMSUJDX0hBU19HTE9CPXkKK1VDTElCQ19IQVNfR05VX0dMT0I9eQorCisjCisjIExpYnJhcnkgSW5zdGFsbGF0aW9uIE9wdGlvbnMKKyMKK1NIQVJFRF9MSUJfTE9BREVSX1BSRUZJWD0iJChSVU5USU1FX1BSRUZJWClsaWIiCitSVU5USU1FX1BSRUZJWD0iL3Vzci8kKFRBUkdFVF9BUkNIKS1saW51eC11Y2xpYmMvIgorREVWRUxfUFJFRklYPSIvdXNyLyQoVEFSR0VUX0FSQ0gpLWxpbnV4LXVjbGliYy91c3IvIgorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgVUNMSUJDX0hBU19BUkM0UkFORE9NIGlzIG5vdCBzZXQKKyMgSEFWRV9OT19TU1AgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NTUCBpcyBub3Qgc2V0CitVQ0xJQkNfQlVJTERfUkVMUk89eQorIyBVQ0xJQkNfQlVJTERfTk9XIGlzIG5vdCBzZXQKK1VDTElCQ19CVUlMRF9OT0VYRUNTVEFDSz15CisKKyMKKyMgdUNsaWJjIGRldmVsb3BtZW50L2RlYnVnZ2luZyBvcHRpb25zCisjCitDUk9TU19DT01QSUxFUl9QUkVGSVg9IiIKK1VDTElCQ19FWFRSQV9DRkxBR1M9IiIKKyMgRE9ERUJVRyBpcyBub3Qgc2V0CisjIERPREVCVUdfUFQgaXMgbm90IHNldAorIyBET1NUUklQIGlzIG5vdCBzZXQKKyMgRE9BU1NFUlRTIGlzIG5vdCBzZXQKKyMgU1VQUE9SVF9MRF9ERUJVRyBpcyBub3Qgc2V0CisjIFNVUFBPUlRfTERfREVCVUdfRUFSTFkgaXMgbm90IHNldAorIyBVQ0xJQkNfTUFMTE9DX0RFQlVHR0lORyBpcyBub3Qgc2V0CitXQVJOSU5HUz0iLVdhbGwiCisjIEVYVFJBX1dBUk5JTkdTIGlzIG5vdCBzZXQKKyMgRE9NVUxUSSBpcyBub3Qgc2V0CisjIFVDTElCQ19NSk4zX09OTFkgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3g4Nl82NC11bmtub3duLWxpbnV4LXVjbGliYy91Q2xpYmMtMC45LjMwLjIuY29uZmlnIGIvbGliL2N0LW5nLTEuMTMuNC9zYW1wbGVzL3g4Nl82NC11bmtub3duLWxpbnV4LXVjbGliYy91Q2xpYmMtMC45LjMwLjIuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMTYzYWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NhbXBsZXMveDg2XzY0LXVua25vd24tbGludXgtdWNsaWJjL3VDbGliYy0wLjkuMzAuMi5jb25maWcKQEAgLTAsMCArMSwyNDUgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgVmVyc2lvbjogMC45LjMwCisjIEZyaSBOb3YgMjEgMDk6MjY6MzQgMjAwOAorIworIyBUQVJHRVRfYWxwaGEgaXMgbm90IHNldAorIyBUQVJHRVRfYXJtIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2F2cjMyIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2JmaW4gaXMgbm90IHNldAorIyBUQVJHRVRfY3JpcyBpcyBub3Qgc2V0CisjIFRBUkdFVF9lMSBpcyBub3Qgc2V0CisjIFRBUkdFVF9mcnYgaXMgbm90IHNldAorIyBUQVJHRVRfaDgzMDAgaXMgbm90IHNldAorIyBUQVJHRVRfaHBwYSBpcyBub3Qgc2V0CisjIFRBUkdFVF9pMzg2IGlzIG5vdCBzZXQKKyMgVEFSR0VUX2k5NjAgaXMgbm90IHNldAorIyBUQVJHRVRfaWE2NCBpcyBub3Qgc2V0CisjIFRBUkdFVF9tNjhrIGlzIG5vdCBzZXQKKyMgVEFSR0VUX21pY3JvYmxhemUgaXMgbm90IHNldAorIyBUQVJHRVRfbWlwcyBpcyBub3Qgc2V0CisjIFRBUkdFVF9uaW9zIGlzIG5vdCBzZXQKKyMgVEFSR0VUX25pb3MyIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3Bvd2VycGMgaXMgbm90IHNldAorIyBUQVJHRVRfc2ggaXMgbm90IHNldAorIyBUQVJHRVRfc2g2NCBpcyBub3Qgc2V0CisjIFRBUkdFVF9zcGFyYyBpcyBub3Qgc2V0CisjIFRBUkdFVF92ODUwIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3ZheCBpcyBub3Qgc2V0CitUQVJHRVRfeDg2XzY0PXkKKyMgVEFSR0VUX3h0ZW5zYSBpcyBub3Qgc2V0CisKKyMKKyMgVGFyZ2V0IEFyY2hpdGVjdHVyZSBGZWF0dXJlcyBhbmQgT3B0aW9ucworIworVEFSR0VUX0FSQ0g9Ing4Nl82NCIKK0ZPUkNFX09QVElPTlNfRk9SX0FSQ0g9eQorIyBDT05GSUdfQVJNX09BQkkgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VBQkkgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19BUk0gaXMgbm90IHNldAorIyBDT05GSUdfQVJNNjEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk03VERNSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUk03MjBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTkyMFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJNOTIyVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk05MjZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTEwVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk0xMTM2SkZfUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk0xMTc2SlpfUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk0xMTc2SlpGX1MgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0NPUlRFWF9NMyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fQ09SVEVYX00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9TQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9YU0NBTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0lXTU1YVCBpcyBub3Qgc2V0CitUQVJHRVRfU1VCQVJDSD0iIgorCisjCisjIFVzaW5nIEVMRiBmaWxlIGZvcm1hdAorIworQVJDSF9MSVRUTEVfRU5ESUFOPXkKKyMgQVJDSF9XQU5UU19CSUdfRU5ESUFOIGlzIG5vdCBzZXQKKyMgQVJDSF9XQU5UU19MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKKworIworIyBVc2luZyBMaXR0bGUgRW5kaWFuCisjCitBUkNIX0hBU19NTVU9eQorQVJDSF9VU0VfTU1VPXkKK1VDTElCQ19IQVNfRkxPQVRTPXkKK1VDTElCQ19IQVNfRlBVPXkKK0RPX0M5OV9NQVRIPXkKK1VDTElCQ19IQVNfRkVOVj15CitVQ0xJQkNfSEFTX0xPTkdfRE9VQkxFX01BVEg9eQorS0VSTkVMX0hFQURFUlM9Ii91c3IvaW5jbHVkZSIKK0hBVkVfRE9UX0NPTkZJRz15CisKKyMKKyMgR2VuZXJhbCBMaWJyYXJ5IFNldHRpbmdzCisjCisjIEhBVkVfTk9fUElDIGlzIG5vdCBzZXQKK0RPUElDPXkKKyMgQVJDSF9IQVNfTk9fU0hBUkVEIGlzIG5vdCBzZXQKKyMgQVJDSF9IQVNfTk9fTERTTyBpcyBub3Qgc2V0CitIQVZFX1NIQVJFRD15CisjIEZPUkNFX1NIQVJFQUJMRV9URVhUX1NFR01FTlRTIGlzIG5vdCBzZXQKK0xEU09fTEREX1NVUFBPUlQ9eQorTERTT19DQUNIRV9TVVBQT1JUPXkKKyMgTERTT19QUkVMT0FEX0ZJTEVfU1VQUE9SVCBpcyBub3Qgc2V0CitMRFNPX0JBU0VfRklMRU5BTUU9ImxkLnNvIgorVUNMSUJDX1NUQVRJQ19MRENPTkZJRz15CisjIExEU09fUlVOUEFUSCBpcyBub3Qgc2V0CitVQ0xJQkNfQ1RPUl9EVE9SPXkKKyMgTERTT19HTlVfSEFTSF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgSEFTX05PX1RIUkVBRFMgaXMgbm90IHNldAorVUNMSUJDX0hBU19USFJFQURTPXkKKyMgUFRIUkVBRFNfREVCVUdfU1VQUE9SVCBpcyBub3Qgc2V0CitMSU5VWFRIUkVBRFNfT0xEPXkKK1VDTElCQ19IQVNfU1lTTE9HPXkKK1VDTElCQ19IQVNfTEZTPXkKKyMgTUFMTE9DIGlzIG5vdCBzZXQKKyMgTUFMTE9DX1NJTVBMRSBpcyBub3Qgc2V0CitNQUxMT0NfU1RBTkRBUkQ9eQorIyBNQUxMT0NfR0xJQkNfQ09NUEFUIGlzIG5vdCBzZXQKK1VDTElCQ19EWU5BTUlDX0FURVhJVD15CisjIENPTVBBVF9BVEVYSVQgaXMgbm90IHNldAorIyBVQ0xJQkNfU1VTVjNfTEVHQUNZIGlzIG5vdCBzZXQKKyMgVUNMSUJDX1NVU1YzX0xFR0FDWV9NQUNST1MgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NUVUJTIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfU0hBRE9XPXkKKyMgVUNMSUJDX0hBU19QUk9HUkFNX0lOVk9DQVRJT05fTkFNRSBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1BUWT15CitBU1NVTUVfREVWUFRTPXkKK1VOSVg5OFBUWV9PTkxZPXkKKyMgVUNMSUJDX0hBU19HRVRQVCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1RNX0VYVEVOU0lPTlM9eQorVUNMSUJDX0hBU19UWl9DQUNISU5HPXkKK1VDTElCQ19IQVNfVFpfRklMRT15CitVQ0xJQkNfSEFTX1RaX0ZJTEVfUkVBRF9NQU5ZPXkKK1VDTElCQ19UWl9GSUxFX1BBVEg9Ii9ldGMvVFoiCisKKyMKKyMgQWR2YW5jZWQgTGlicmFyeSBTZXR0aW5ncworIworVUNMSUJDX1BXRF9CVUZGRVJfU0laRT0yNTYKK1VDTElCQ19HUlBfQlVGRkVSX1NJWkU9MjU2CisKKyMKKyMgU3VwcG9ydCB2YXJpb3VzIGZhbWlsaWVzIG9mIGZ1bmN0aW9ucworIworVUNMSUJDX0xJTlVYX01PRFVMRV8yND15CitVQ0xJQkNfTElOVVhfU1BFQ0lGSUM9eQorVUNMSUJDX0hBU19HTlVfRVJST1I9eQorIyBVQ0xJQkNfQlNEX1NQRUNJRklDIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfQlNEX0VSUj15CisjIFVDTElCQ19IQVNfT0JTT0xFVEVfQlNEX1NJR05BTCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfT0JTT0xFVEVfU1lTVl9TSUdOQUwgaXMgbm90IHNldAorIyBVQ0xJQkNfTlRQX0xFR0FDWSBpcyBub3Qgc2V0CisjIFVDTElCQ19TVjRfREVQUkVDQVRFRCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1JFQUxUSU1FPXkKK1VDTElCQ19IQVNfQURWQU5DRURfUkVBTFRJTUU9eQorVUNMSUJDX0hBU19FUE9MTD15CitVQ0xJQkNfSEFTX1hBVFRSPXkKK1VDTElCQ19IQVNfUFJPRklMSU5HPXkKK1VDTElCQ19IQVNfQ1JZUFRfSU1QTD15CitVQ0xJQkNfSEFTX0NSWVBUPXkKK1VDTElCQ19IQVNfTkVUV09SS19TVVBQT1JUPXkKK1VDTElCQ19IQVNfU09DS0VUPXkKK1VDTElCQ19IQVNfSVBWND15CisjIFVDTElCQ19IQVNfSVBWNiBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1JQQz15CitVQ0xJQkNfSEFTX0ZVTExfUlBDPXkKK1VDTElCQ19IQVNfUkVFTlRSQU5UX1JQQz15CitVQ0xJQkNfVVNFX05FVExJTks9eQorVUNMSUJDX1NVUFBPUlRfQUlfQUREUkNPTkZJRz15CisjIFVDTElCQ19IQVNfQlNEX1JFU19DTE9TRSBpcyBub3Qgc2V0CisKKyMKKyMgU3RyaW5nIGFuZCBTdGRpbyBTdXBwb3J0CisjCitVQ0xJQkNfSEFTX1NUUklOR19HRU5FUklDX09QVD15CitVQ0xJQkNfSEFTX1NUUklOR19BUkNIX09QVD15CitVQ0xJQkNfSEFTX0NUWVBFX1RBQkxFUz15CitVQ0xJQkNfSEFTX0NUWVBFX1NJR05FRD15CisjIFVDTElCQ19IQVNfQ1RZUEVfVU5TQUZFIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19DVFlQRV9DSEVDS0VEIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfQ1RZUEVfRU5GT1JDRUQ9eQorIyBVQ0xJQkNfSEFTX1dDSEFSIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19MT0NBTEUgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0hFWEFERUNJTUFMX0ZMT0FUUyBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX0dMSUJDX0NVU1RPTV9QUklOVEY9eQorIyBVU0VfT0xEX1ZGUFJJTlRGIGlzIG5vdCBzZXQKK1VDTElCQ19QUklOVEZfU0NBTkZfUE9TSVRJT05BTF9BUkdTPTkKKyMgVUNMSUJDX0hBU19TQ0FORl9HTElCQ19BX0ZMQUcgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl9OT05FIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfMjU2IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfNTEyIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfMTAyNCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzIwNDggaXMgbm90IHNldAorVUNMSUJDX0hBU19TVERJT19CVUZTSVpfNDA5Nj15CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzgxOTIgaXMgbm90IHNldAorVUNMSUJDX0hBU19TVERJT19CVUlMVElOX0JVRkZFUl9OT05FPXkKKyMgVUNMSUJDX0hBU19TVERJT19CVUlMVElOX0JVRkZFUl80IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUlMVElOX0JVRkZFUl84IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19TSFVURE9XTl9PTl9BQk9SVCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NURElPX0dFVENfTUFDUk89eQorVUNMSUJDX0hBU19TVERJT19QVVRDX01BQ1JPPXkKK1VDTElCQ19IQVNfU1RESU9fQVVUT19SV19UUkFOU0lUSU9OPXkKKyMgVUNMSUJDX0hBU19GT1BFTl9MQVJHRUZJTEVfTU9ERSBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfRk9QRU5fRVhDTFVTSVZFX01PREUgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0dMSUJDX0NVU1RPTV9TVFJFQU1TIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfUFJJTlRGX01fU1BFQz15CitVQ0xJQkNfSEFTX0VSUk5PX01FU1NBR0VTPXkKKyMgVUNMSUJDX0hBU19TWVNfRVJSTElTVCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NJR05VTV9NRVNTQUdFUz15CisjIFVDTElCQ19IQVNfU1lTX1NJR0xJU1QgaXMgbm90IHNldAorVUNMSUJDX0hBU19HTlVfR0VUT1BUPXkKK1VDTElCQ19IQVNfR05VX0dFVFNVQk9QVD15CisKKyMKKyMgQmlnIGFuZCBUYWxsCisjCitVQ0xJQkNfSEFTX1JFR0VYPXkKK1VDTElCQ19IQVNfUkVHRVhfT0xEPXkKK1VDTElCQ19IQVNfRk5NQVRDSD15CitVQ0xJQkNfSEFTX0ZOTUFUQ0hfT0xEPXkKKyMgVUNMSUJDX0hBU19XT1JERVhQIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19GVFcgaXMgbm90IHNldAorVUNMSUJDX0hBU19HTE9CPXkKK1VDTElCQ19IQVNfR05VX0dMT0I9eQorCisjCisjIExpYnJhcnkgSW5zdGFsbGF0aW9uIE9wdGlvbnMKKyMKK1NIQVJFRF9MSUJfTE9BREVSX1BSRUZJWD0iJChSVU5USU1FX1BSRUZJWClsaWIiCitSVU5USU1FX1BSRUZJWD0iL3Vzci8kKFRBUkdFVF9BUkNIKS1saW51eC11Y2xpYmMvIgorREVWRUxfUFJFRklYPSIvdXNyLyQoVEFSR0VUX0FSQ0gpLWxpbnV4LXVjbGliYy91c3IvIgorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgVUNMSUJDX0hBU19BUkM0UkFORE9NIGlzIG5vdCBzZXQKKyMgSEFWRV9OT19TU1AgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NTUCBpcyBub3Qgc2V0CitVQ0xJQkNfQlVJTERfUkVMUk89eQorIyBVQ0xJQkNfQlVJTERfTk9XIGlzIG5vdCBzZXQKK1VDTElCQ19CVUlMRF9OT0VYRUNTVEFDSz15CisKKyMKKyMgdUNsaWJjIGRldmVsb3BtZW50L2RlYnVnZ2luZyBvcHRpb25zCisjCitDUk9TU19DT01QSUxFUl9QUkVGSVg9IiIKK1VDTElCQ19FWFRSQV9DRkxBR1M9IiIKKyMgRE9ERUJVRyBpcyBub3Qgc2V0CisjIERPREVCVUdfUFQgaXMgbm90IHNldAorIyBET1NUUklQIGlzIG5vdCBzZXQKKyMgRE9BU1NFUlRTIGlzIG5vdCBzZXQKKyMgU1VQUE9SVF9MRF9ERUJVRyBpcyBub3Qgc2V0CisjIFNVUFBPUlRfTERfREVCVUdfRUFSTFkgaXMgbm90IHNldAorIyBVQ0xJQkNfTUFMTE9DX0RFQlVHR0lORyBpcyBub3Qgc2V0CitXQVJOSU5HUz0iLVdhbGwiCisjIEVYVFJBX1dBUk5JTkdTIGlzIG5vdCBzZXQKKyMgRE9NVUxUSSBpcyBub3Qgc2V0CisjIFVDTElCQ19NSk4zX09OTFkgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2FyY2gvYWxwaGEuc2ggYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvYXJjaC9hbHBoYS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTUwMzM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2FyY2gvYWxwaGEuc2gKQEAgLTAsMCArMSw2IEBACisjIENvbXB1dGUgQWxwaGEtc3BlY2lmaWMgdmFsdWVzCisKK0NUX0RvQXJjaFR1cGxlVmFsdWVzICgpIHsKKyAgICAjIFRoZSBhcmNoaXRlY3R1cmUgcGFydCBvZiB0aGUgdHVwbGU6CisgICAgQ1RfVEFSR0VUX0FSQ0g9IiR7Q1RfQVJDSH0ke0NUX0FSQ0hfQUxQSEFfVkFSSUFOVH0iCit9CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvYXJjaC9hcm0uc2ggYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvYXJjaC9hcm0uc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVmYjVkYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9hcmNoL2FybS5zaApAQCAtMCwwICsxLDI3IEBACisjIENvbXB1dGUgQVJNLXNwZWNpZmljIHZhbHVlcworCitDVF9Eb0FyY2hUdXBsZVZhbHVlcygpIHsKKyAgICAjIFRoZSBhcmNoaXRlY3R1cmUgcGFydCBvZiB0aGUgdHVwbGU6CisgICAgQ1RfVEFSR0VUX0FSQ0g9IiR7Q1RfQVJDSH0ke3RhcmdldF9lbmRpYW5fZWJ9IgorCisgICAgIyBUaGUgc3lzdGVtIHBhcnQgb2YgdGhlIHR1cGxlOgorICAgIGNhc2UgIiR7Q1RfTElCQ30sJHtDVF9BUkNIX0FSTV9FQUJJfSIgaW4KKyAgICAgICAgKmdsaWJjLHkpICAgQ1RfVEFSR0VUX1NZUz1nbnVlYWJpOzsKKyAgICAgICAgdUNsaWJjLHkpICAgQ1RfVEFSR0VUX1NZUz11Y2xpYmNnbnVlYWJpOzsKKyAgICAgICAgKix5KSAgICAgICAgQ1RfVEFSR0VUX1NZUz1lYWJpOzsKKyAgICBlc2FjCisKKyAgICAjIFNldCB0aGUgZGVmYXVsdCBpbnN0cnVjdGlvbiBzZXQgbW9kZQorICAgIGNhc2UgIiR7Q1RfQVJDSF9BUk1fTU9ERX0iIGluCisgICAgICAgIGFybSkgICAgOzsKKyAgICAgICAgdGh1bWIpCisgICAgICAgICAgICBDVF9BUkNIX0NDX0NPUkVfRVhUUkFfQ09ORklHPSItLXdpdGgtbW9kZT10aHVtYiIKKyAgICAgICAgICAgIENUX0FSQ0hfQ0NfRVhUUkFfQ09ORklHPSItLXdpdGgtbW9kZT10aHVtYiIKKyMgICAgICAgICAgICBDVF9BUkNIX1RBUkdFVF9DRkxBR1M9Ii1tdGh1bWIiCisgICAgICAgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIFsgIiR7Q1RfQVJDSF9BUk1fSU5URVJXT1JLSU5HfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBDVF9BUkNIX1RBUkdFVF9DRkxBR1MrPSIgLW10aHVtYi1pbnRlcndvcmsiCisgICAgZmkKK30KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9hcmNoL2F2cjMyLnNoIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2FyY2gvYXZyMzIuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM4NDNhNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9hcmNoL2F2cjMyLnNoCkBAIC0wLDAgKzEsMTYgQEAKKyMgQ29tcHV0ZSBBVlIzMi1zcGVjaWZpYyB2YWx1ZXMKKworQ1RfRG9BcmNoVHVwbGVWYWx1ZXMoKSB7CisgICAgIyBUaGUgYXJjaGl0ZWN0dXJlIHBhcnQgb2YgdGhlIHR1cGxlOgorICAgIENUX1RBUkdFVF9BUkNIPSIke0NUX0FSQ0h9IgorCisgICAgIyBnY2MgLi9jb25maWd1cmUgZmxhZ3MKKyAgICBDVF9BUkNIX1dJVEhfQVJDSD0KKyAgICBDVF9BUkNIX1dJVEhfQUJJPQorICAgIENUX0FSQ0hfV0lUSF9DUFU9CisgICAgQ1RfQVJDSF9XSVRIX1RVTkU9CisgICAgQ1RfQVJDSF9XSVRIX0ZQVT0KKyAgICBDVF9BUkNIX1dJVEhfRkxPQVQ9CisgICAgQ1RfVEFSR0VUX1NZUz1ub25lCisKK30KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9hcmNoL2JsYWNrZmluLnNoIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2FyY2gvYmxhY2tmaW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcwNzYxNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9hcmNoL2JsYWNrZmluLnNoCkBAIC0wLDAgKzEsMTQgQEAKKyMgQ29tcHV0ZSBCbGFja2Zpbi1zcGVjaWZpYyB2YWx1ZXMKKworQ1RfRG9BcmNoVHVwbGVWYWx1ZXMoKSB7CisgICAgIyBUaGUgYXJjaGl0ZWN0dXJlIHBhcnQgb2YgdGhlIHR1cGxlOgorICAgIENUX1RBUkdFVF9BUkNIPSJiZmluIgorCisgICAgIyBnY2MgLi9jb25maWd1cmUgZmxhZ3MKKyAgICBDVF9BUkNIX1dJVEhfQVJDSD0KKyAgICBDVF9BUkNIX1dJVEhfQUJJPQorICAgIENUX0FSQ0hfV0lUSF9DUFU9CisgICAgQ1RfQVJDSF9XSVRIX1RVTkU9CisgICAgQ1RfQVJDSF9XSVRIX0ZQVT0KKyAgICBDVF9BUkNIX1dJVEhfRkxPQVQ9Cit9CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvYXJjaC9tNjhrLnNoIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2FyY2gvbTY4ay5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjI2ZDFiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2FyY2gvbTY4ay5zaApAQCAtMCwwICsxLDUgQEAKKyMgQ29tcHV0ZSBNNjhrLXNwZWNpZmljIHZhbHVlcworCitDVF9Eb0FyY2hUdXBsZVZhbHVlcygpIHsKKyAgICA6Cit9CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvYXJjaC9taXBzLnNoIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2FyY2gvbWlwcy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2ZmNWRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2FyY2gvbWlwcy5zaApAQCAtMCwwICsxLDIxIEBACisjIENvbXB1dGUgTUlQUy1zcGVjaWZpYyB2YWx1ZXMKKworQ1RfRG9BcmNoVHVwbGVWYWx1ZXMoKSB7CisgICAgIyBUaGUgYXJjaGl0ZWN0dXJlIHBhcnQgb2YgdGhlIHR1cGxlLCBvdmVycmlkZSBvbmx5IGZvciA2NC1iaXQKKyAgICBpZiBbICIke0NUX0FSQ0hfNjR9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIENUX1RBUkdFVF9BUkNIPSJtaXBzNjQke3RhcmdldF9lbmRpYW5fZWx9IgorICAgIGVsc2UKKyAgICAgICAgIyBUaGUgYXJjaGl0ZWN0dXJlIHBhcnQgb2YgdGhlIHR1cGxlOgorICAgICAgICBDVF9UQVJHRVRfQVJDSD0iJHtDVF9BUkNIfSR7dGFyZ2V0X2VuZGlhbl9lbH0iCisgICAgZmkKKworICAgICMgT3ZlcnJpZGUgQ0ZMQUdTIGZvciBlbmRpYW5uZXNzOgorICAgIGNhc2UgIiR7Q1RfQVJDSF9CRX0sJHtDVF9BUkNIX0xFfSIgaW4KKyAgICAgICAgeSwpIENUX0FSQ0hfRU5ESUFOX0NGTEFHPSItRUIiOzsKKyAgICAgICAgLHkpIENUX0FSQ0hfRU5ESUFOX0NGTEFHPSItRUwiOzsKKyAgICBlc2FjCisKKyAgICAjIE92ZXJyaWRlIEFCSSBmbGFncworICAgIENUX0FSQ0hfQUJJX0NGTEFHPSItbWFiaT0ke0NUX0FSQ0hfbWlwc19BQkl9IgorICAgIENUX0FSQ0hfV0lUSF9BQkk9Ii0td2l0aC1hYmk9JHtDVF9BUkNIX21pcHNfQUJJfSIKK30KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9hcmNoL3Bvd2VycGMuc2ggYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvYXJjaC9wb3dlcnBjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZDkxZGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvYXJjaC9wb3dlcnBjLnNoCkBAIC0wLDAgKzEsMzAgQEAKKyMgQ29tcHV0ZSBwb3dlcnBjLXNwZWNpZmljIHZhbHVlcworCitDVF9Eb0FyY2hUdXBsZVZhbHVlcyAoKSB7CisgICAgIyBUaGUgYXJjaGl0ZWN0dXJlIHBhcnQgb2YgdGhlIHR1cGxlLCBvdmVycmlkZSBvbmx5IGZvciA2NC1iaXQKKyAgICBpZiBbICIke0NUX0FSQ0hfNjR9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIENUX1RBUkdFVF9BUkNIPSJwb3dlcnBjNjQiCisgICAgZmkKKworICAgICMgT25seSBvdmVycmlkZSB2YWx1ZXMgd2hlbiBBQkkgaXMgbm90IHRoZSBkZWZhdWx0CisgICAgY2FzZSAiJHtDVF9BUkNIX3Bvd2VycGNfQUJJfSIgaW4KKyAgICAgICAgZWFiaSkKKyAgICAgICAgICAgICMgRUFCSSBpcyBvbmx5IGZvciBiYXJlLW1ldGFsLCBzbyBsaWJjIOKIiCBbbm9uZSxuZXdsaWJdCisgICAgICAgICAgICBDVF9UQVJHRVRfU1lTPSJlYWJpIgorICAgICAgICAgICAgOzsKKyAgICAgICAgc3BlKQorICAgICAgICAgICAgY2FzZSAiJHtDVF9MSUJDfSIgaW4KKyAgICAgICAgICAgICAgICBub25lfG5ld2xpYikgICAgQ1RfVEFSR0VUX1NZUz0ic3BlIjs7CisgICAgICAgICAgICAgICAgKmdsaWJjKSAgICAgICAgIENUX1RBUkdFVF9TWVM9ImdudXNwZSI7OworICAgICAgICAgICAgICAgIHVDbGliYykgICAgICAgICBDVF9UQVJHRVRfU1lTPSJ1Y2xpYmNnbnVzcGUiOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBBZGQgZXh0cmEgZmxhZ3MgZm9yIFNQRSBpZiBuZWVkZWQKKyAgICBpZiBbICIke0NUX0FSQ0hfcG93ZXJwY19BQklfU1BFfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBDVF9BUkNIX1RBUkdFVF9DRkxBR1M9Ii1tYWJpPXNwZSAtbXNwZSIKKyAgICAgICAgQ1RfQVJDSF9DQ19DT1JFX0VYVFJBX0NPTkZJRz0iLS1lbmFibGUtZTUwMF9kb3VibGUiCisgICAgICAgIENUX0FSQ0hfQ0NfRVhUUkFfQ09ORklHPSItLWVuYWJsZS1lNTAwX2RvdWJsZSIKKyAgICBmaQorfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2FyY2gvczM5MC5zaCBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9hcmNoL3MzOTAuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M4NjVlMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9hcmNoL3MzOTAuc2gKQEAgLTAsMCArMSw4IEBACisjIENvbXB1dGUgczM5MC1zcGVjaWZpYyB2YWx1ZXMKKworQ1RfRG9BcmNoVHVwbGVWYWx1ZXMoKSB7CisgICAgIyBUaGF0J3MgdGhlIG9ubHkgdGhpbmcgdG8gb3ZlcnJpZGUKKyAgICBpZiBbICIke0NUX0FSQ0hfNjR9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIENUX1RBUkdFVF9BUkNIPSJzMzkweCIKKyAgICBmaQorfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2FyY2gvc2guc2ggYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvYXJjaC9zaC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjY1MWUyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2FyY2gvc2guc2gKQEAgLTAsMCArMSwzMiBAQAorIyBDb21wdXRlIHNoLXNwZWNpZmljIHZhbHVlcworCitDVF9Eb0FyY2hUdXBsZVZhbHVlcyAoKSB7CisgICAgIyBUaGUgYXJjaGl0ZWN0dXJlIHBhcnQgb2YgdGhlIHR1cGxlOgorICAgIENUX1RBUkdFVF9BUkNIPSIke0NUX0FSQ0hfU0hfVkFSSUFOVH0ke3RhcmdldF9lbmRpYW5fZWJ9IgorCisgICAgIyBnY2MgLi9jb25maWd1cmUgZmxhZ3MKKyAgICBDVF9BUkNIX1dJVEhfQVJDSD0KKyAgICBDVF9BUkNIX1dJVEhfQUJJPQorICAgIENUX0FSQ0hfV0lUSF9DUFU9CisgICAgQ1RfQVJDSF9XSVRIX1RVTkU9CisgICAgQ1RfQVJDSF9XSVRIX0ZQVT0KKyAgICBDVF9BUkNIX1dJVEhfRkxPQVQ9CisKKyAgICAjIEVuZGlhbm5lc3Mgc3R1ZmYKKyAgICBjYXNlICIke0NUX0FSQ0hfQkV9LCR7Q1RfQVJDSF9MRX0iIGluCisgICAgICAgIHksKSBDVF9BUkNIX0VORElBTl9DRkxBRz0tbWI7OworICAgICAgICAseSkgQ1RfQVJDSF9FTkRJQU5fQ0ZMQUc9LW1sOzsKKyAgICBlc2FjCisKKyAgICAjIENGTEFHUworICAgIGNhc2UgIiR7Q1RfQVJDSF9TSF9WQVJJQU5UfSIgaW4KKyAgICAgICAgc2gzKSAgICBDVF9BUkNIX0FSQ0hfQ0ZMQUc9LW0zOzsKKyAgICAgICAgc2g0KikKKyAgICAgICAgICAgIGNhc2UgIiR7Q1RfQVJDSF9GTE9BVF9IV30sJHtDVF9BUkNIX0ZMT0FUX1NXfSIgaW4KKyAgICAgICAgICAgICAgICB5LCkgQ1RfQVJDSF9BUkNIX0NGTEFHPSItbTQke0NUX0FSQ0hfU0hfVkFSSUFOVCMjc2g/fSI7OworICAgICAgICAgICAgICAgICx5KSBDVF9BUkNIX0FSQ0hfQ0ZMQUc9Ii1tNCR7Q1RfQVJDSF9TSF9WQVJJQU5UIyNzaD99LW5vZnB1Ijs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICA7OworICAgIGVzYWMKKyAgICBDVF9BUkNIX0ZMT0FUX0NGTEFHPQorfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2FyY2gvc3BhcmMuc2ggYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvYXJjaC9zcGFyYy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGQ2MjAxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2FyY2gvc3BhcmMuc2gKQEAgLTAsMCArMSw4IEBACisjIENvbXB1dGUgc3BhcmMtc3BlY2lmaWMgdmFsdWVzCitDVF9Eb0FyY2hUdXBsZVZhbHVlcygpIHsKKyAgICAjIFRoYXQncyB0aGUgb25seSB0aGluZyB0byBvdmVycmlkZQorICAgIGlmIFsgIiR7Q1RfQVJDSF82NH0iID0gInkiIF07IHRoZW4KKyAgICAgICAgQ1RfVEFSR0VUX0FSQ0g9IiR7Q1RfQVJDSH02NCIKKyAgICBmaQorCit9CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvYXJjaC94ODYuc2ggYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvYXJjaC94ODYuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQxYTgxZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9hcmNoL3g4Ni5zaApAQCAtMCwwICsxLDIzIEBACisjIENvbXB1dGUgeDg2LXNwZWNpZmljIHZhbHVlcworCisjIFRoaXMgb25lIHJlYWxseSBuZWVkcyBhIGxpdHRsZSBsb3ZlISA6LSgKKworQ1RfRG9BcmNoVHVwbGVWYWx1ZXMoKSB7CisKKyAgICAjIE92ZXJyaWRlIHRoZSBhcmNoaXRlY3R1cmUgcGFydCBvZiB0aGUgdHVwbGU6CisgICAgaWYgWyAiJHtDVF9BUkNIXzY0fSIgPSAieSIgXTsgdGhlbgorICAgICAgICBDVF9UQVJHRVRfQVJDSD14ODZfNjQKKyAgICBlbHNlCisgICAgICAgIGFyY2g9IiR7Q1RfQVJDSF9BUkNIfSIKKyAgICAgICAgWyAteiAiJHthcmNofSIgXSAmJiBhcmNoPSIke0NUX0FSQ0hfVFVORX0iCisgICAgICAgIGNhc2UgIiR7YXJjaH0iIGluCisgICAgICAgICAgICAiIikgICAgICAgICAgICAgICAgICAgICAgICAgICBDVF9UQVJHRVRfQVJDSD1pMzg2OzsKKyAgICAgICAgICAgIGkzODZ8aTQ4NnxpNTg2fGk2ODYpICAgICAgICAgIENUX1RBUkdFVF9BUkNIPSIke2FyY2h9Ijs7CisgICAgICAgICAgICB3aW5jaGlwKikgICAgICAgICAgICAgICAgICAgICBDVF9UQVJHRVRfQVJDSD1pNDg2OzsKKyAgICAgICAgICAgIHBlbnRpdW18cGVudGl1bS1tbXh8YzMqKSAgICAgIENUX1RBUkdFVF9BUkNIPWk1ODY7OworICAgICAgICAgICAgcGVudGl1bXByb3xwZW50aXVtKnxhdGhsb24qKSAgQ1RfVEFSR0VUX0FSQ0g9aTY4Njs7CisgICAgICAgICAgICBwcmVzY290dCkgICAgICAgICAgICAgICAgICAgICBDVF9UQVJHRVRfQVJDSD1pNjg2OzsKKyAgICAgICAgICAgICopICAgICAgICAgICAgICAgICAgICAgICAgICAgIENUX1RBUkdFVF9BUkNIPWk1ODY7OworICAgICAgICBlc2FjCisgICAgZmkKK30KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9iaW51dGlscy9iaW51dGlscy1sZC5pbiBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9iaW51dGlscy9iaW51dGlscy1sZC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGY0NTkxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2JpbnV0aWxzL2JpbnV0aWxzLWxkLmluCkBAIC0wLDAgKzEsMTEgQEAKKyMhL2Jpbi9zaAorCitjYWxsX3RvPUBAREVGQVVMVF9MREBACisKK2Nhc2UgIiR7Q1ROR19MRF9JU30iIGluCisgICAgYmZkKSAgICBjYWxsX3RvPWJmZDs7CisgICAgZ29sZCkgICBjYWxsX3RvPWdvbGQ7OworZXNhYworCitleGVjICIkezB9LiR7Y2FsbF90b30iICIkQCIKK2V4aXQgJD8KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9iaW51dGlscy9iaW51dGlscy5zaCBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9iaW51dGlscy9iaW51dGlscy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzQzY2UxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2JpbnV0aWxzL2JpbnV0aWxzLnNoCkBAIC0wLDAgKzEsMTc4IEBACisjIFRoaXMgZmlsZSBhZGRzIGZ1bmN0aW9ucyB0byBidWlsZCBiaW51dGlscworIyBDb3B5cmlnaHQgMjAwNyBZYW5uIEUuIE1PUklOCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgdjIuIFNlZSBDT1BZSU5HIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZQorCisjIERvd25sb2FkIGJpbnV0aWxzCitkb19iaW51dGlsc19nZXQoKSB7CisgICAgQ1RfR2V0RmlsZSAiYmludXRpbHMtJHtDVF9CSU5VVElMU19WRVJTSU9OfSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAge2Z0cCxodHRwfTovL3tmdHAuZ251Lm9yZy9nbnUsZnRwLmtlcm5lbC5vcmcvcHViL2xpbnV4L2RldmVsfS9iaW51dGlscyAgIFwKKyAgICAgICAgICAgICAgIGZ0cDovL2djYy5nbnUub3JnL3B1Yi9iaW51dGlscy97cmVsZWFzZXMsc25hcHNob3RzfQorfQorCisjIEV4dHJhY3QgYmludXRpbHMKK2RvX2JpbnV0aWxzX2V4dHJhY3QoKSB7CisgICAgQ1RfRXh0cmFjdCAiYmludXRpbHMtJHtDVF9CSU5VVElMU19WRVJTSU9OfSIKKyAgICBDVF9QYXRjaCAiYmludXRpbHMiICIke0NUX0JJTlVUSUxTX1ZFUlNJT059IgorfQorCisjIEJ1aWxkIGJpbnV0aWxzCitkb19iaW51dGlscygpIHsKKyAgICBsb2NhbCAtYSBleHRyYV9jb25maWcKKyAgICBsb2NhbCAtYSBleHRyYV9tYWtlX2ZsYWdzCisgICAgbG9jYWwgLWEgYmludXRpbHNfdG9vbHMKKworICAgIG1rZGlyIC1wICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtYmludXRpbHMiCisgICAgY2QgIiR7Q1RfQlVJTERfRElSfS9idWlsZC1iaW51dGlscyIKKworICAgIENUX0RvU3RlcCBJTkZPICJJbnN0YWxsaW5nIGJpbnV0aWxzIgorCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkNvbmZpZ3VyaW5nIGJpbnV0aWxzIgorCisgICAgYmludXRpbHNfdG9vbHM9KCBhciBhcyBsZCBzdHJpcCApCisgICAgaWYgWyAiJHtDVF9CSU5VVElMU19IQVNfR09MRH0iID0gInkiIF07IHRoZW4KKyAgICAgICAgY2FzZSAiJHtDVF9CSU5VVElMU19MSU5LRVJTX0xJU1R9IiBpbgorICAgICAgICAgICAgbGQpCisgICAgICAgICAgICAgICAgZXh0cmFfY29uZmlnKz0oIC0tZW5hYmxlLWxkPXllcyAtLWVuYWJsZS1nb2xkPW5vICkKKyAgICAgICAgICAgICAgICBiaW51dGlsc190b29scys9KCBsZC5iZmQgKQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBnb2xkKQorICAgICAgICAgICAgICAgIGV4dHJhX2NvbmZpZys9KCAtLWVuYWJsZS1sZD1ubyAtLWVuYWJsZS1nb2xkPXllcyApCisgICAgICAgICAgICAgICAgYmludXRpbHNfdG9vbHMrPSggbGQuZ29sZCApCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGxkLGdvbGQpCisgICAgICAgICAgICAgICAgZXh0cmFfY29uZmlnKz0oIC0tZW5hYmxlLWxkPWRlZmF1bHQgLS1lbmFibGUtZ29sZD15ZXMgKQorICAgICAgICAgICAgICAgIGJpbnV0aWxzX3Rvb2xzKz0oIGxkLmJmZCBsZC5nb2xkICkKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZ29sZCxsZCkKKyAgICAgICAgICAgICAgICBleHRyYV9jb25maWcrPSggLS1lbmFibGUtbGQ9eWVzIC0tZW5hYmxlLWdvbGQ9ZGVmYXVsdCApCisgICAgICAgICAgICAgICAgYmludXRpbHNfdG9vbHMrPSggbGQuYmZkIGxkLmdvbGQgKQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgaWYgWyAiJHtDVF9CSU5VVElMU19HT0xEX1RIUkVBREVEfSIgPSAieSIgXTsgdGhlbgorICAgICAgICAgICAgZXh0cmFfY29uZmlnKz0oIC0tZW5hYmxlLXRocmVhZHMgKQorICAgICAgICBmaQorICAgIGZpCisgICAgaWYgWyAiJHtDVF9CSU5VVElMU19QTFVHSU5TfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBleHRyYV9jb25maWcrPSggLS1lbmFibGUtcGx1Z2lucyApCisgICAgZmkKKyAgICBpZiBbICIke0NUX0JJTlVUSUxTX0hBU19QS0dWRVJTSU9OX0JVR1VSTH0iID0gInkiIF07IHRoZW4KKyAgICAgICAgZXh0cmFfY29uZmlnKz0oIi0td2l0aC1wa2d2ZXJzaW9uPSR7Q1RfUEtHVkVSU0lPTn0iKQorICAgICAgICBbIC1uICIke0NUX1RPT0xDSEFJTl9CVUdVUkx9IiBdICYmIGV4dHJhX2NvbmZpZys9KCItLXdpdGgtYnVndXJsPSR7Q1RfVE9PTENIQUlOX0JVR1VSTH0iKQorICAgIGZpCisKKyAgICBDVF9Eb0xvZyBERUJVRyAiRXh0cmEgY29uZmlnIHBhc3NlZDogJyR7ZXh0cmFfY29uZmlnWypdfSciCisKKyAgICBDVF9Eb0V4ZWNMb2cgQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ0ZMQUdTPSIke0NUX0NGTEFHU19GT1JfSE9TVH0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIENYWEZMQUdTPSIke0NUX0NGTEFHU19GT1JfSE9TVH0iICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiJHtDVF9TUkNfRElSfS9iaW51dGlscy0ke0NUX0JJTlVUSUxTX1ZFUlNJT059L2NvbmZpZ3VyZSIgICBcCisgICAgICAgIC0tYnVpbGQ9JHtDVF9CVUlMRH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWhvc3Q9JHtDVF9IT1NUfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS10YXJnZXQ9JHtDVF9UQVJHRVR9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC0tcHJlZml4PSR7Q1RfUFJFRklYX0RJUn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWRpc2FibGUtbmxzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1kaXNhYmxlLW11bHRpbGliICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC0tZGlzYWJsZS13ZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAiJHtleHRyYV9jb25maWdbQF19IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgJHtDVF9BUkNIX1dJVEhfRkxPQVR9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICR7QklOVVRJTFNfU1lTUk9PVF9BUkd9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAiJHtDVF9CSU5VVElMU19FWFRSQV9DT05GSUdfQVJSQVlbQF19IgorCisgICAgaWYgWyAiJHtDVF9TVEFUSUNfVE9PTENIQUlOfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBleHRyYV9tYWtlX2ZsYWdzKz0oIkxERkxBR1M9LXN0YXRpYyAtYWxsLXN0YXRpYyIpCisgICAgICAgIENUX0RvTG9nIEVYVFJBICJQcmVwYXJlIGJpbnV0aWxzIGZvciBzdGF0aWMgYnVpbGQiCisgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSAke0pPQlNGTEFHU30gY29uZmlndXJlLWhvc3QKKyAgICBmaQorCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkJ1aWxkaW5nIGJpbnV0aWxzIgorICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSAiJHtleHRyYV9tYWtlX2ZsYWdzW0BdfSIgJHtKT0JTRkxBR1N9CisKKyAgICBDVF9Eb0xvZyBFWFRSQSAiSW5zdGFsbGluZyBiaW51dGlscyIKKyAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1ha2UgaW5zdGFsbAorCisgICAgIyBJbnN0YWxsIHRoZSB3cmFwcGVyIGlmIG5lZWRlZAorICAgIGlmIFsgIiR7Q1RfQklOVVRJTFNfTERfV1JBUFBFUn0iID0gInkiIF07IHRoZW4KKyAgICAgICAgQ1RfRG9Mb2cgRVhUUkEgIkluc3RhbGxpbmcgbGQgd3JhcHBlciIKKyAgICAgICAgcm0gLWYgIiR7Q1RfUFJFRklYX0RJUn0vYmluLyR7Q1RfVEFSR0VUfS1sZCIKKyAgICAgICAgcm0gLWYgIiR7Q1RfUFJFRklYX0RJUn0vJHtDVF9UQVJHRVR9L2Jpbi9sZCIKKyAgICAgICAgc2VkIC1yIC1lICJzL0BAREVGQVVMVF9MREBALyR7Q1RfQklOVVRJTFNfTElOS0VSX0RFRkFVTFR9LyIgXAorICAgICAgICAgICAgIiR7Q1RfTElCX0RJUn0vc2NyaXB0cy9idWlsZC9iaW51dGlscy9iaW51dGlscy1sZC5pbiIgICBcCisgICAgICAgICAgICA+IiR7Q1RfUFJFRklYX0RJUn0vYmluLyR7Q1RfVEFSR0VUfS1sZCIKKyAgICAgICAgY2htb2QgK3ggIiR7Q1RfUFJFRklYX0RJUn0vYmluLyR7Q1RfVEFSR0VUfS1sZCIKKyAgICAgICAgY3AgLWEgIiR7Q1RfUFJFRklYX0RJUn0vYmluLyR7Q1RfVEFSR0VUfS1sZCIgICAgXAorICAgICAgICAgICAgICAiJHtDVF9QUkVGSVhfRElSfS8ke0NUX1RBUkdFVH0vYmluL2xkIgorCisgICAgICAgICMgSWYgbmVlZGVkLCBmb3JjZSB1c2luZyBsZC5iZmQgZHVyaW5nIHRoZSB0b29sY2hhaW4gYnVpbGQKKyAgICAgICAgaWYgWyAiJHtDVF9CSU5VVElMU19GT1JDRV9MRF9CRkR9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgICAgICBleHBvcnQgQ1ROR19MRF9JUz1iZmQKKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgIyBNYWtlIHRob3NlIG5ldyB0b29scyBhdmFpbGFibGUgdG8gdGhlIGNvcmUgQyBjb21waWxlcnMgdG8gY29tZS4KKyAgICAjIE5vdGU6IHNvbWUgY29tcG9uZW50cyB3YW50IHRoZSAke1RBUkdFVH0te2FyLGFzLGxkLHN0cmlwfSBjb21tYW5kcyBhcworICAgICMgd2VsbC4gQ3JlYXRlIHRoYXQuCisgICAgbWtkaXIgLXAgIiR7Q1RfQ0NfQ09SRV9TVEFUSUNfUFJFRklYX0RJUn0vJHtDVF9UQVJHRVR9L2JpbiIKKyAgICBta2RpciAtcCAiJHtDVF9DQ19DT1JFX1NUQVRJQ19QUkVGSVhfRElSfS9iaW4iCisgICAgbWtkaXIgLXAgIiR7Q1RfQ0NfQ09SRV9TSEFSRURfUFJFRklYX0RJUn0vJHtDVF9UQVJHRVR9L2JpbiIKKyAgICBta2RpciAtcCAiJHtDVF9DQ19DT1JFX1NIQVJFRF9QUkVGSVhfRElSfS9iaW4iCisgICAgZm9yIHQgaW4gIiR7YmludXRpbHNfdG9vbHNbQF19IjsgZG8KKyAgICAgICAgbG4gLXN2ICIke0NUX1BSRUZJWF9ESVJ9L2Jpbi8ke0NUX1RBUkdFVH0tJHt0fSIgIiR7Q1RfQ0NfQ09SRV9TVEFUSUNfUFJFRklYX0RJUn0vJHtDVF9UQVJHRVR9L2Jpbi8ke3R9IgorICAgICAgICBsbiAtc3YgIiR7Q1RfUFJFRklYX0RJUn0vYmluLyR7Q1RfVEFSR0VUfS0ke3R9IiAiJHtDVF9DQ19DT1JFX1NUQVRJQ19QUkVGSVhfRElSfS9iaW4vJHtDVF9UQVJHRVR9LSR7dH0iCisgICAgICAgIGxuIC1zdiAiJHtDVF9QUkVGSVhfRElSfS9iaW4vJHtDVF9UQVJHRVR9LSR7dH0iICIke0NUX0NDX0NPUkVfU0hBUkVEX1BSRUZJWF9ESVJ9LyR7Q1RfVEFSR0VUfS9iaW4vJHt0fSIKKyAgICAgICAgbG4gLXN2ICIke0NUX1BSRUZJWF9ESVJ9L2Jpbi8ke0NUX1RBUkdFVH0tJHt0fSIgIiR7Q1RfQ0NfQ09SRV9TSEFSRURfUFJFRklYX0RJUn0vYmluLyR7Q1RfVEFSR0VUfS0ke3R9IgorICAgIGRvbmUgMj4mMSB8Q1RfRG9Mb2cgQUxMCisKKyAgICBDVF9FbmRTdGVwCit9CisKKyMgTm93IG9uIGZvciB0aGUgdGFyZ2V0IGxpYnJhcmllcworZG9fYmludXRpbHNfdGFyZ2V0KCkgeworICAgIGxvY2FsIC1hIGV4dHJhX2NvbmZpZworICAgIGxvY2FsIC1hIHRhcmdldHMKKyAgICBsb2NhbCAtYSBidWlsZF90YXJnZXRzCisgICAgbG9jYWwgLWEgaW5zdGFsbF90YXJnZXRzCisgICAgbG9jYWwgdAorCisgICAgWyAiJHtDVF9CSU5VVElMU19GT1JfVEFSR0VUX0lCRVJUWX0iID0gInkiIF0gJiYgdGFyZ2V0cys9KCJsaWJpYmVydHkiKQorICAgIFsgIiR7Q1RfQklOVVRJTFNfRk9SX1RBUkdFVF9CRkR9IiAgICA9ICJ5IiBdICYmIHRhcmdldHMrPSgiYmZkIikKKyAgICBmb3IgdCBpbiAiJHt0YXJnZXRzW0BdfSI7IGRvCisgICAgICAgIGJ1aWxkX3RhcmdldHMrPSgiYWxsLSR7dH0iKQorICAgICAgICBpbnN0YWxsX3RhcmdldHMrPSgiaW5zdGFsbC0ke3R9IikKKyAgICBkb25lCisKKyAgICBpZiBbICIkeyN0YXJnZXRzW0BdfSIgLW5lIDAgXTsgdGhlbgorICAgICAgICBDVF9Eb1N0ZXAgSU5GTyAiSW5zdGFsbGluZyBiaW51dGlscyBmb3IgdGFyZ2V0IgorICAgICAgICBta2RpciAtcCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLWJpbnV0aWxzLWZvci10YXJnZXQiCisgICAgICAgIENUX1B1c2hkICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtYmludXRpbHMtZm9yLXRhcmdldCIKKworICAgICAgICBDVF9Eb0xvZyBFWFRSQSAiQ29uZmlndXJpbmcgYmludXRpbHMgZm9yIHRhcmdldCIKKworICAgICAgICBpZiBbICIke0NUX0JJTlVUSUxTX0hBU19QS0dWRVJTSU9OX0JVR1VSTH0iID0gInkiIF07IHRoZW4KKyAgICAgICAgICAgIGV4dHJhX2NvbmZpZys9KCItLXdpdGgtcGtndmVyc2lvbj0ke0NUX1BLR1ZFUlNJT059IikKKyAgICAgICAgICAgIFsgLW4gIiR7Q1RfVE9PTENIQUlOX0JVR1VSTH0iIF0gJiYgZXh0cmFfY29uZmlnKz0oIi0td2l0aC1idWd1cmw9JHtDVF9UT09MQ0hBSU5fQlVHVVJMfSIpCisgICAgICAgIGZpCisKKyAgICAgICAgQ1RfRG9FeGVjTG9nIENGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAiJHtDVF9TUkNfRElSfS9iaW51dGlscy0ke0NUX0JJTlVUSUxTX1ZFUlNJT059L2NvbmZpZ3VyZSIgICBcCisgICAgICAgICAgICAtLWJ1aWxkPSR7Q1RfQlVJTER9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIC0taG9zdD0ke0NUX1RBUkdFVH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgLS10YXJnZXQ9JHtDVF9UQVJHRVR9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAtLXByZWZpeD0vdXNyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIC0tZGlzYWJsZS13ZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgLS1lbmFibGUtc2hhcmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAtLWVuYWJsZS1zdGF0aWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIC0tZGlzYWJsZS1ubHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgLS1kaXNhYmxlLW11bHRpbGliICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAiJHtleHRyYV9jb25maWdbQF19IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICR7Q1RfQVJDSF9XSVRIX0ZMT0FUfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgIiR7Q1RfQklOVVRJTFNfRVhUUkFfQ09ORklHX0FSUkFZW0BdfSIKKworICAgICAgICBDVF9Eb0xvZyBFWFRSQSAiQnVpbGRpbmcgYmludXRpbHMnIGxpYnJhcmllcyAoJHt0YXJnZXRzWypdfSkgZm9yIHRhcmdldCIKKyAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlICR7Sk9CU0ZMQUdTfSAiJHtidWlsZF90YXJnZXRzW0BdfSIKKyAgICAgICAgQ1RfRG9Mb2cgRVhUUkEgIkluc3RhbGxpbmcgYmludXRpbHMnIGxpYnJhcmllcyAoJHt0YXJnZXRzWypdfSkgZm9yIHRhcmdldCIKKyAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlIERFU1RESVI9IiR7Q1RfU1lTUk9PVF9ESVJ9IiAiJHtpbnN0YWxsX3RhcmdldHNbQF19IgorCisgICAgICAgIENUX1BvcGQKKyAgICAgICAgQ1RfRW5kU3RlcAorICAgIGZpCit9CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvYmludXRpbHMvZWxmMmZsdC5zaCBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9iaW51dGlscy9lbGYyZmx0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZTIxOWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvYmludXRpbHMvZWxmMmZsdC5zaApAQCAtMCwwICsxLDc3IEBACisjIFRoaXMgZmlsZSBhZGRzIGZ1bmN0aW9ucyB0byBidWlsZCBlbGYyZmx0CisjIENvcHlyaWdodCAyMDA5IEpvaG4gV2lsbGlhbXMKKyMgQ29weXJpZ2h0IDIwMDcgWWFubiBFLiBNT1JJTgorIyBMaWNlbnNlZCB1bmRlciB0aGUgR1BMIHYyLiBTZWUgQ09QWUlORyBpbiB0aGUgcm9vdCBvZiB0aGlzIHBhY2thZ2UKKworIyBEZWZhdWx0OiBkbyBub3RoaW5nCitkb19lbGYyZmx0X2dldCgpICAgICB7IDo7IH0KK2RvX2VsZjJmbHRfZXh0cmFjdCgpIHsgOjsgfQorZG9fZWxmMmZsdCgpICAgICAgICAgeyA6OyB9CisKK2lmIFsgLW4gIiR7Q1RfQVJDSF9CSU5GTVRfRkxBVH0iIF07IHRoZW4KKworIyBEb3dubG9hZCBlbGYyZmx0Citkb19lbGYyZmx0X2dldCgpIHsKKyAgICBDVF9HZXRDVlMgImVsZjJmbHQtY3ZzLSR7Q1RfRUxGMkZMVF9WRVJTSU9OfSIgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIjpwc2VydmVyOmFub255bW91c0BjdnMudWNsaW51eC5vcmc6L3Zhci9jdnMiIFwKKyAgICAgICAgICAgICAgImVsZjJmbHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIiIgXAorICAgICAgICAgICAgICAiZWxmMmZsdC1jdnMtJHtDVF9FTEYyRkxUX1ZFUlNJT059IgorfQorCisjIEV4dHJhY3QgZWxmMmZsdAorZG9fZWxmMmZsdF9leHRyYWN0KCkgeworICAgIENUX0V4dHJhY3QgImVsZjJmbHQtY3ZzLSR7Q1RfRUxGMkZMVF9WRVJTSU9OfSIKKyAgICBDVF9QYXRjaCAiZWxmMmZsdC1jdnMiICIke0NUX0VMRjJGTFRfVkVSU0lPTn0iCit9CisKKyMgQnVpbGQgZWxmMmZsdAorZG9fZWxmMmZsdCgpIHsKKyAgICBta2RpciAtcCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLWVsZjJmbHQiCisgICAgY2QgIiR7Q1RfQlVJTERfRElSfS9idWlsZC1lbGYyZmx0IgorCisgICAgQ1RfRG9TdGVwIElORk8gIkluc3RhbGxpbmcgZWxmMmZsdCIKKworICAgIGVsZjJmbHRfb3B0cz0KKyAgICBiaW51dGlsc19ibGQ9JHtDVF9CVUlMRF9ESVJ9L2J1aWxkLWJpbnV0aWxzCisgICAgYmludXRpbHNfc3JjPSR7Q1RfU1JDX0RJUn0vYmludXRpbHMtJHtDVF9CSU5VVElMU19WRVJTSU9OfQorCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkNvbmZpZ3VyaW5nIGVsZjJmbHQiCisgICAgQ1RfRG9FeGVjTG9nIENGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIENGTEFHUz0iJHtDVF9DRkxBR1NfRk9SX0hPU1R9IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiJHtDVF9TUkNfRElSfS9lbGYyZmx0LWN2cy0ke0NUX0VMRjJGTFRfVkVSU0lPTn0vY29uZmlndXJlIiBcCisgICAgICAgIC0tYnVpbGQ9JHtDVF9CVUlMRH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWhvc3Q9JHtDVF9IT1NUfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS10YXJnZXQ9JHtDVF9UQVJHRVR9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC0tcHJlZml4PSR7Q1RfUFJFRklYX0RJUn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLXdpdGgtYmZkLWluY2x1ZGUtZGlyPSR7YmludXRpbHNfYmxkfS9iZmQgICAgICAgICAgICAgIFwKKyAgICAgICAgLS13aXRoLWJpbnV0aWxzLWluY2x1ZGUtZGlyPSR7YmludXRpbHNfc3JjfS9pbmNsdWRlICAgICBcCisgICAgICAgIC0td2l0aC1saWJiZmQ9JHtiaW51dGlsc19ibGR9L2JmZC9saWJiZmQuYSAgICAgICAgICAgICAgXAorICAgICAgICAtLXdpdGgtbGliaWJlcnR5PSR7YmludXRpbHNfYmxkfS9saWJpYmVydHkvbGliaWJlcnR5LmEgIFwKKyAgICAgICAgJHtlbGYyZmx0X29wdHN9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICIke0NUX0VMRjJGTFRfRVhUUkFfQ09ORklHX0FSUkFZW0BdfSIKKworICAgIENUX0RvTG9nIEVYVFJBICJCdWlsZGluZyBlbGYyZmx0IgorICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSAke0pPQlNGTEFHU30KKworICAgIENUX0RvTG9nIEVYVFJBICJJbnN0YWxsaW5nIGVsZjJmbHQiCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlIGluc3RhbGwKKworICAgICMgTWFrZSB0aG9zZSBuZXcgdG9vbHMgYXZhaWxhYmxlIHRvIHRoZSBjb3JlIEMgY29tcGlsZXJzIHRvIGNvbWUuCisgICAgIyBOb3RlOiBzb21lIGNvbXBvbmVudHMgd2FudCB0aGUgJHtUQVJHRVR9LXthcixhcyxsZCxzdHJpcH0gY29tbWFuZHMgYXMKKyAgICAjIHdlbGwuIENyZWF0ZSB0aGF0LgorICAgIG1rZGlyIC1wICIke0NUX0NDX0NPUkVfU1RBVElDX1BSRUZJWF9ESVJ9LyR7Q1RfVEFSR0VUfS9iaW4iCisgICAgbWtkaXIgLXAgIiR7Q1RfQ0NfQ09SRV9TVEFUSUNfUFJFRklYX0RJUn0vYmluIgorICAgIG1rZGlyIC1wICIke0NUX0NDX0NPUkVfU0hBUkVEX1BSRUZJWF9ESVJ9LyR7Q1RfVEFSR0VUfS9iaW4iCisgICAgbWtkaXIgLXAgIiR7Q1RfQ0NfQ09SRV9TSEFSRURfUFJFRklYX0RJUn0vYmluIgorICAgIGZvciB0IGluIGVsZjJmbHQgZmx0aGRyOyBkbworICAgICAgICBsbiAtc3YgIiR7Q1RfUFJFRklYX0RJUn0vYmluLyR7Q1RfVEFSR0VUfS0ke3R9IiAiJHtDVF9DQ19DT1JFX1NUQVRJQ19QUkVGSVhfRElSfS8ke0NUX1RBUkdFVH0vYmluLyR7dH0iCisgICAgICAgIGxuIC1zdiAiJHtDVF9QUkVGSVhfRElSfS9iaW4vJHtDVF9UQVJHRVR9LSR7dH0iICIke0NUX0NDX0NPUkVfU1RBVElDX1BSRUZJWF9ESVJ9L2Jpbi8ke0NUX1RBUkdFVH0tJHt0fSIKKyAgICAgICAgbG4gLXN2ICIke0NUX1BSRUZJWF9ESVJ9L2Jpbi8ke0NUX1RBUkdFVH0tJHt0fSIgIiR7Q1RfQ0NfQ09SRV9TSEFSRURfUFJFRklYX0RJUn0vJHtDVF9UQVJHRVR9L2Jpbi8ke3R9IgorICAgICAgICBsbiAtc3YgIiR7Q1RfUFJFRklYX0RJUn0vYmluLyR7Q1RfVEFSR0VUfS0ke3R9IiAiJHtDVF9DQ19DT1JFX1NIQVJFRF9QUkVGSVhfRElSfS9iaW4vJHtDVF9UQVJHRVR9LSR7dH0iCisgICAgZG9uZSAyPiYxIHxDVF9Eb0xvZyBBTEwKKworICAgIENUX0VuZFN0ZXAKK30KKworZmkgIyBDVF9BUkNIX0JJTkZNVF9GTEFUCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvYmludXRpbHMvc3N0cmlwLnNoIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2JpbnV0aWxzL3NzdHJpcC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjUzNDk1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2JpbnV0aWxzL3NzdHJpcC5zaApAQCAtMCwwICsxLDQwIEBACisjIFRoaXMgd2lsbCBidWlsZCBhbmQgaW5zdGFsbCBzc3RyaXAgdG8gcnVuIG9uIGhvc3QgYW5kIHNzdHJpcCB0YXJnZXQgZmlsZXMKKworZG9fc3N0cmlwX2dldCgpIHsgOjsgfQorZG9fc3N0cmlwX2V4dHJhY3QoKSB7IDo7IH0KK2RvX3NzdHJpcCgpIHsgOjsgfQorCitpZiBbICIke0NUX1NTVFJJUH0iID0gInkiIF07IHRoZW4KKyAgICBkb19zc3RyaXBfZ2V0KCkgeworICAgICAgICBDVF9HZXRGaWxlIHNzdHJpcCAuYyBodHRwOi8vZ2l0LmJ1aWxkcm9vdC5uZXQvYnVpbGRyb290L3BsYWluL3Rvb2xjaGFpbi9zc3RyaXAKKyAgICB9CisKKyAgICBkb19zc3RyaXBfZXh0cmFjdCgpIHsKKyAgICAgICAgIyBXZSBsZWF2ZSB0aGUgc3N0cmlwIG1haW50ZW5hbmNlIHRvIHRoZSBidWlsZHJvb3QgcGVvcGxlOgorICAgICAgICAjIC0+IGFueSBmaXgtdXAgZ29lcyBkaXJlY3RseSB0aGVyZQorICAgICAgICAjIC0+IHdlIGRvbid0IGhhdmUgcGF0Y2hlcyBmb3IgaXQKKyAgICAgICAgIyAtPiB3ZSBkb24ndCBuZWVkIHRvIHBhdGNoIGl0CisgICAgICAgICMgLT4ganVzdCBjcmVhdGUgYSBkaXJlY3RvcnkgaW4gc3JjLywgYW5kIGNvcHkgaXQgdGhlcmUuCisgICAgICAgIENUX0RvRXhlY0xvZyBERUJVRyBta2RpciAtcCAiJHtDVF9TUkNfRElSfS9zc3RyaXAiCisgICAgICAgIENUX0RvRXhlY0xvZyBERUJVRyBjcCAtdiAiJHtDVF9UQVJCQUxMU19ESVJ9L3NzdHJpcC5jIiAiJHtDVF9TUkNfRElSfS9zc3RyaXAiCisgICAgfQorCisgICAgZG9fc3N0cmlwKCkgeworICAgICAgICBsb2NhbCBzc3RyaXBfY2ZsYWdzCisgICAgICAgIENUX0RvU3RlcCBJTkZPICJJbnN0YWxsaW5nIHNzdHJpcCIKKyAgICAgICAgbWtkaXIgLXAgIiR7Q1RfQlVJTERfRElSfS9idWlsZC1zc3RyaXAiCisgICAgICAgIGNkICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtc3N0cmlwIgorCisgICAgICAgIGlmIFsgIiR7Q1RfU1RBVElDX1RPT0xDSEFJTn0iID0gInkiIF07IHRoZW4KKyAgICAgICAgICAgIHNzdHJpcF9jZmxhZ3M9Ii1zdGF0aWMiCisgICAgICAgIGZpCisKKyAgICAgICAgQ1RfRG9Mb2cgRVhUUkEgIkJ1aWxkaW5nIHNzdHJpcCIKKyAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCAiJHtDVF9IT1NUfS1nY2MiIC1XYWxsICR7c3N0cmlwX2NmbGFnc30gLW8gc3N0cmlwICIke0NUX1NSQ19ESVJ9L3NzdHJpcC9zc3RyaXAuYyIKKworICAgICAgICBDVF9Eb0xvZyBFWFRSQSAiSW5zdGFsbGluZyBzc3RyaXAiCisgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgaW5zdGFsbCAtbSA3NTUgc3N0cmlwICIke0NUX1BSRUZJWF9ESVJ9L2Jpbi8ke0NUX1RBUkdFVH0tc3N0cmlwIgorCisgICAgICAgIENUX0VuZFN0ZXAKKyAgICB9CitmaQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2NjL2djYy5zaCBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9jYy9nY2Muc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZlNzhkZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9jYy9nY2Muc2gKQEAgLTAsMCArMSw2MzggQEAKKyMgVGhpcyBmaWxlIGFkZHMgdGhlIGZ1bmN0aW9uIHRvIGJ1aWxkIHRoZSBnY2MgQyBjb21waWxlcgorIyBDb3B5cmlnaHQgMjAwNyBZYW5uIEUuIE1PUklOCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgdjIuIFNlZSBDT1BZSU5HIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZQorCisjIERvd25sb2FkIGdjYworZG9fY2NfZ2V0KCkgeworICAgIGxvY2FsIGxpbmFyb192ZXJzaW9uCisgICAgbG9jYWwgbGluYXJvX3NlcmllcworICAgIGxvY2FsIGxpbmFyb19iYXNlX3VybD0iaHR0cDovL2xhdW5jaHBhZC5uZXQvZ2NjLWxpbmFybyIKKworCisgICAgIyBBY2NvdW50IGZvciB0aGUgTGluYXJvIHZlcnNpb25pbmcKKyAgICBsaW5hcm9fdmVyc2lvbj0iJCggZWNobyAiJHtDVF9DQ19WRVJTSU9OfSIgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgIHxzZWQgLXIgLWUgJ3MvXmxpbmFyby0vLzsnICAgXAorICAgICAgICAgICAgICAgICAgICAgKSIKKyAgICBsaW5hcm9fc2VyaWVzPSIkKCBlY2hvICIke2xpbmFyb192ZXJzaW9ufSIgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgfHNlZCAtciAtZSAncy8tLiovLzsnICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICApIgorCisgICAgIyBBaCEgZ2NjIGZvbGtzIGFyZSBraW5kIG9mICdkaWZmZXJlbnQnOiB0aGV5IHN0b3JlIHRoZSB0YXJiYWxscyBpbgorICAgICMgc3ViZGlyZWN0b3JpZXMgb2YgdGhlIHNhbWUgbmFtZSEgVGhhdCdzIGJlY2F1c2UgZ2NjIGlzIHN1Y2ggL2NyYXAvIHRoYXQKKyAgICAjIGl0IGlzIHN1Y2ggL2JpZy8gdGhhdCBpdCBuZWVkcyBiZWluZyBzcGxpdHRlZCBmb3IgZGlzdHJpYnV0aW9uISBTYWQuIDotKAorICAgICMgQXJyZ2doaCEgU29tZSBvZiB0aG9zZSB2ZXJzaW9ucyBkb2VzIG5vdCBmb2xsb3cgdGhpcyBjb252ZW50aW9uOgorICAgICMgZ2NjLTMuMy4zIGxpdmVzIGluIHJlbGVhc2VzL2djYy0zLjMuMywgd2hpbGUgZ2NjLTIuOTUuKiBpc24ndCBpbiBhCisgICAgIyBzdWJkaXJlY3RvcnkhIFlvdSBiYXN0YXJkIQorICAgIENUX0dldEZpbGUgImdjYy0ke0NUX0NDX1ZFUlNJT059IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICB7ZnRwLGh0dHB9Oi8vZnRwLmdudS5vcmcvZ251L2djY3sseywvcmVsZWFzZXN9L2djYy0ke0NUX0NDX1ZFUlNJT059fSAgICAgICAgIFwKKyAgICAgICAgICAgICAgIGZ0cDovL2Z0cC5pcmlzYS5mci9wdWIvbWlycm9ycy9nY2MuZ251Lm9yZy9nY2MvcmVsZWFzZXMvZ2NjLSR7Q1RfQ0NfVkVSU0lPTn0gXAorICAgICAgICAgICAgICAgZnRwOi8vZnRwLnV2c3EuZnIvcHViL2djYy9zbmFwc2hvdHMvJHtDVF9DQ19WRVJTSU9OfSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAiJHtsaW5hcm9fYmFzZV91cmx9LyR7bGluYXJvX3Nlcmllc30vJHtsaW5hcm9fdmVyc2lvbn0vK2Rvd25sb2FkIgorCisgICAgIyBTdGFydGluZyB3aXRoIEdDQyA0LjMsIGVjaiBpcyB1c2VkIGZvciBKYXZhLCBhbmQgd2lsbCBvbmx5IGJlCisgICAgIyBidWlsdCBpZiB0aGUgY29uZmlndXJlIHNjcmlwdCBmaW5kcyBlY2ouamFyIGF0IHRoZSB0b3Agb2YgdGhlCisgICAgIyBHQ0Mgc291cmNlIHRyZWUsIHdoaWNoIHdpbGwgbm90IGJlIHRoZXJlIHVubGVzcyB3ZSBnZXQgaXQgYW5kCisgICAgIyBwdXQgaXQgdGhlcmUgb3Vyc2VsdmVzCisgICAgaWYgWyAiJHtDVF9DQ19MQU5HX0pBVkFfVVNFX0VDSn0iID0gInkiIF07IHRoZW4KKyAgICAgICAgQ1RfR2V0RmlsZSBlY2otbGF0ZXN0IC5qYXIgZnRwOi8vZ2NjLmdudS5vcmcvcHViL2phdmEgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cDovL3NvdXJjZXdhcmUub3JnL3B1Yi9qYXZhCisgICAgZmkKK30KKworIyBFeHRyYWN0IGdjYworZG9fY2NfZXh0cmFjdCgpIHsKKyAgICBDVF9FeHRyYWN0ICJnY2MtJHtDVF9DQ19WRVJTSU9OfSIKKyAgICBDVF9QYXRjaCAiZ2NjIiAiJHtDVF9DQ19WRVJTSU9OfSIKKworICAgICMgQ29weSBlY2otbGF0ZXN0LmphciB0byBlY2ouamFyIGF0IHRoZSB0b3Agb2YgdGhlIEdDQyBzb3VyY2UgdHJlZQorICAgIGlmIFsgIiR7Q1RfQ0NfTEFOR19KQVZBX1VTRV9FQ0p9IiA9ICJ5IiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIC1hICEgLWYgIiR7Q1RfU1JDX0RJUn0vZ2NjLSR7Q1RfQ0NfVkVSU0lPTn0vZWNqLmphciIgICBcCisgICAgICAgXTsgdGhlbgorICAgICAgICBDVF9Eb0V4ZWNMb2cgQUxMIGNwIC12ICIke0NUX1RBUkJBTExTX0RJUn0vZWNqLWxhdGVzdC5qYXIiICIke0NUX1NSQ19ESVJ9L2djYy0ke0NUX0NDX1ZFUlNJT059L2Vjai5qYXIiCisgICAgZmkKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb3JlIGdjYyBwYXNzIDEKK2RvX2NjX2NvcmVfcGFzc18xKCkgeworICAgICMgSWYgd2UncmUgYnVpbGRpbmcgZm9yIGJhcmUgbWV0YWwsIGJ1aWxkIHRoZSBzdGF0aWMgY29yZSBnY2MsCisgICAgIyB3aXRoIGxpYmdjYy4KKyAgICAjIEluIGNhc2Ugd2UncmUgbm90IGJhcmUgbWV0YWwgYW5kIGJ1aWxkaW5nIGEgY2FuYWRpYW4gY29tcGlsZXIsIGRvIG5vdGhpbmcKKyAgICAjIEluIGNhc2Ugd2UncmUgbm90IGJhcmUgbWV0YWwsIGFuZCB3ZSdyZSBOUFRMLCBidWlsZCB0aGUgc3RhdGljIGNvcmUgZ2NjLgorICAgICMgSW4gYW55IG90aGVyIGNhc2UsIGRvIG5vdGhpbmcuCisgICAgY2FzZSAiJHtDVF9CQVJFX01FVEFMfSwke0NUX0NBTkFESUFOfSwke0NUX1RIUkVBRFN9IiBpbgorICAgICAgICB5LCosKikgIGRvX2NjX2NvcmUgbW9kZT1zdGF0aWM7OworICAgICAgICAseSwqKSAgIDs7CisgICAgICAgICwsbnB0bCkgZG9fY2NfY29yZSBtb2RlPXN0YXRpYzs7CisgICAgICAgICopICAgICAgOzsKKyAgICBlc2FjCit9CisKKyMgQ29yZSBnY2MgcGFzcyAyCitkb19jY19jb3JlX3Bhc3NfMigpIHsKKyAgICAjIEluIGNhc2Ugd2UncmUgYnVpbGRpbmcgZm9yIGJhcmUgbWV0YWwsIGRvIG5vdGhpbmcsIHdlIGFscmVhZHkgaGF2ZQorICAgICMgb3VyIGNvbXBpbGVyLgorICAgICMgSW4gY2FzZSB3ZSdyZSBub3QgYmFyZSBtZXRhbCBhbmQgYnVpbGRpbmcgYSBjYW5hZGlhbiBjb21waWxlciwgZG8gbm90aGluZworICAgICMgSW4gY2FzZSB3ZSdyZSBOUFRMLCBidWlsZCB0aGUgc2hhcmVkIGNvcmUgZ2NjIGFuZCB0aGUgdGFyZ2V0IGxpYmdjYy4KKyAgICAjIEluIGFueSBvdGhlciBjYXNlLCBidWlsZCB0aGUgc3RhdGljIGNvcmUgZ2NjIGFuZCwgaWYgdXNpbmcgZ2NjLTQuMyssCisgICAgIyBhbHNvIGJ1aWxkIHRoZSB0YXJnZXQgbGliZ2NjLgorICAgIGNhc2UgIiR7Q1RfQkFSRV9NRVRBTH0sJHtDVF9DQU5BRElBTn0sJHtDVF9USFJFQURTfSIgaW4KKyAgICAgICAgeSwqLCopCisgICAgICAgICAgICBpZiBbICIke0NUX1NUQVRJQ19UT09MQ0hBSU59IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgZG9fY2NfY29yZSBtb2RlPWJhcmVtZXRhbCBidWlsZF9saWJnY2M9eWVzIGJ1aWxkX2xpYnN0ZGN4eD15ZXMgYnVpbGRfc3RhdGljbGlua2VkPXllcworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRvX2NjX2NvcmUgbW9kZT1iYXJlbWV0YWwgYnVpbGRfbGliZ2NjPXllcyBidWlsZF9saWJzdGRjeHg9eWVzCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICAgICAgLHksKikgICA7OworICAgICAgICAsLG5wdGwpCisgICAgICAgICAgICBkb19jY19jb3JlIG1vZGU9c2hhcmVkIGJ1aWxkX2xpYmdjYz15ZXMKKyAgICAgICAgICAgIDs7CisgICAgICAgICwsd2luMzIpCisgICAgICAgICAgICBkb19jY19jb3JlIG1vZGU9c3RhdGljIGJ1aWxkX2xpYmdjYz15ZXMKKyAgICAgICAgICAgIDs7CisgICAgICAgICopICBpZiBbICIke0NUX0NDX0dDQ180XzNfb3JfbGF0ZXJ9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgZG9fY2NfY29yZSBtb2RlPXN0YXRpYyBidWlsZF9saWJnY2M9eWVzCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZG9fY2NfY29yZSBtb2RlPXN0YXRpYworICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEJ1aWxkIGNvcmUgZ2NjCisjIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBidWlsZCBib3RoIHRoZSBzdGF0aWMgYW5kIHRoZSBzaGFyZWQgY29yZSBDIGNvbnBpbGVyLAorIyB3aXRoIG9yIHdpdGhvdXQgdGhlIHRhcmdldCBsaWJnY2MuIFdlIG5lZWQgdG8ga25vdyB3ZXRoZXI6CisjICAtIHdlJ3JlIGJ1aWxkaW5nIHN0YXRpYywgc2hhcmVkIG9yIGJhcmUgbWV0YWw6IG1vZGU9W3N0YXRpY3xzaGFyZWR8YmFyZW1ldGFsXQorIyAgLSB3ZSBuZWVkIHRvIGJ1aWxkIGxpYmdjYyBvciBub3QgICAgICAgICAgICAgOiBidWlsZF9saWJnY2M9W3llc3xub10gICAgICAgKGRlZmF1bHQ6IG5vKQorIyAgLSB3ZSBuZWVkIHRvIGJ1aWxkIGxpYnN0ZGMrKyBvciBub3QgICAgICAgICAgOiBidWlsZF9saWJzdGRjeHg9W3llc3xub10gICAgKGRlZmF1bHQ6IG5vKQorIyAgLSB3ZSBuZWVkIHRvIGJ1aWxkIHN0YXRpY2FsbHkgbGlua2VkIG9yIG5vdCAgOiBidWlsZF9zdGF0aWNsaW5rZWQ9W3llc3xub10gKGRlZmF1bHQ6IG5vKQorIyBVc2FnZTogZG9fY2NfY29yZSBtb2RlPVtzdGF0aWN8c2hhcmVkfGJhcmVtZXRhbF0gYnVpbGRfbGliZ2NjPVt5ZXN8bm9dIGJ1aWxkX3N0YXRpY2xpbmtlZD1beWVzfG5vXQorZG9fY2NfY29yZSgpIHsKKyAgICBsb2NhbCBtb2RlCisgICAgbG9jYWwgYnVpbGRfbGliZ2NjPW5vCisgICAgbG9jYWwgYnVpbGRfbGlic3RkY3h4PW5vCisgICAgbG9jYWwgYnVpbGRfc3RhdGljbGlua2VkPW5vCisgICAgbG9jYWwgY29yZV9wcmVmaXhfZGlyCisgICAgbG9jYWwgbGFuZ19vcHQKKyAgICBsb2NhbCB0bXAKKyAgICBsb2NhbCAtYSBob3N0X2xpYnN0ZGN4eF9mbGFncworICAgIGxvY2FsIC1hIGV4dHJhX2NvbmZpZworICAgIGxvY2FsIC1hIGNvcmVfTERGTEFHUworICAgIGxvY2FsIC1hIGNvcmVfdGFyZ2V0cworCisgICAgd2hpbGUgWyAkIyAtbmUgMCBdOyBkbworICAgICAgICBldmFsICIkezEvLyAvXFwgfSIKKyAgICAgICAgc2hpZnQKKyAgICBkb25lCisKKyAgICBsYW5nX29wdD1jCisgICAgY2FzZSAiJHttb2RlfSIgaW4KKyAgICAgICAgc3RhdGljKQorICAgICAgICAgICAgY29yZV9wcmVmaXhfZGlyPSIke0NUX0NDX0NPUkVfU1RBVElDX1BSRUZJWF9ESVJ9IgorICAgICAgICAgICAgZXh0cmFfY29uZmlnKz0oIi0td2l0aC1uZXdsaWIiKQorICAgICAgICAgICAgZXh0cmFfY29uZmlnKz0oIi0tZW5hYmxlLXRocmVhZHM9bm8iKQorICAgICAgICAgICAgZXh0cmFfY29uZmlnKz0oIi0tZGlzYWJsZS1zaGFyZWQiKQorICAgICAgICAgICAgY29weV9oZWFkZXJzPXkgICMgRm9yIGJhcmVtZXRhbCwgYXMgdGhlcmUncyBubyBoZWFkZXJzIHRvIGNvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3ZSBjb3B5IGFuIGVtcHR5IGRpcmVjdG9yeS4gU28sIHdobyBjYXJlcz8KKyAgICAgICAgICAgIDs7CisgICAgICAgIHNoYXJlZCkKKyAgICAgICAgICAgIGNvcmVfcHJlZml4X2Rpcj0iJHtDVF9DQ19DT1JFX1NIQVJFRF9QUkVGSVhfRElSfSIKKyAgICAgICAgICAgIGV4dHJhX2NvbmZpZys9KCItLWVuYWJsZS1zaGFyZWQiKQorICAgICAgICAgICAgY29weV9oZWFkZXJzPXkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGJhcmVtZXRhbCkKKyAgICAgICAgICAgIGNvcmVfcHJlZml4X2Rpcj0iJHtDVF9QUkVGSVhfRElSfSIKKyAgICAgICAgICAgIGV4dHJhX2NvbmZpZys9KCItLXdpdGgtbmV3bGliIikKKyAgICAgICAgICAgIGV4dHJhX2NvbmZpZys9KCItLWVuYWJsZS10aHJlYWRzPW5vIikKKyAgICAgICAgICAgIGV4dHJhX2NvbmZpZys9KCItLWRpc2FibGUtc2hhcmVkIikKKyAgICAgICAgICAgIFsgIiR7Q1RfQ0NfTEFOR19DWFh9IiA9ICJ5IiBdICYmIGxhbmdfb3B0PSIke2xhbmdfb3B0fSxjKysiCisgICAgICAgICAgICBjb3B5X2hlYWRlcnM9bgorICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgIENUX0Fib3J0ICJJbnRlcm5hbCBFcnJvcjogJ21vZGUnIG11c3QgYmUgb25lIG9mOiAnc3RhdGljJywgJ3NoYXJlZCcgb3IgJ2JhcmVtZXRhbCcsIG5vdCAnJHttb2RlOi0oZW1wdHkpfSciCisgICAgICAgICAgICA7OworICAgIGVzYWMKKworICAgIENUX0RvU3RlcCBJTkZPICJJbnN0YWxsaW5nICR7bW9kZX0gY29yZSBDIGNvbXBpbGVyIgorICAgIG1rZGlyIC1wICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtY2MtY29yZS0ke21vZGV9IgorICAgIGNkICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtY2MtY29yZS0ke21vZGV9IgorCisgICAgaWYgWyAiJHtDVF9DQ19HQ0NfSEFTX1BLR1ZFUlNJT05fQlVHVVJMfSIgPSAieSIgXTsgdGhlbgorICAgICAgICAjIEJhcmUgbWV0YWwgZGVsaXZlcnMgdGhlIGNvcmUgY29tcGlsZXIgYXMgZmluYWwgY29tcGlsZXIsIHNvIGFkZCB2ZXJzaW9uIGluZm8gYW5kIGJ1Z3VybAorICAgICAgICBleHRyYV9jb25maWcrPSgiLS13aXRoLXBrZ3ZlcnNpb249JHtDVF9QS0dWRVJTSU9OfSIpCisgICAgICAgIFsgLW4gIiR7Q1RfVE9PTENIQUlOX0JVR1VSTH0iIF0gJiYgZXh0cmFfY29uZmlnKz0oIi0td2l0aC1idWd1cmw9JHtDVF9UT09MQ0hBSU5fQlVHVVJMfSIpCisgICAgZmkKKworICAgIGlmIFsgIiR7Y29weV9oZWFkZXJzfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBDVF9Eb0xvZyBERUJVRyAiQ29weWluZyBoZWFkZXJzIHRvIGluc3RhbGwgYXJlYSBvZiBib290c3RyYXAgZ2NjLCBzbyBpdCBjYW4gYnVpbGQgbGliZ2NjMiIKKyAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCBjcCAtYSAiJHtDVF9IRUFERVJTX0RJUn0iICIke2NvcmVfcHJlZml4X2Rpcn0vJHtDVF9UQVJHRVR9L2luY2x1ZGUiCisgICAgZmkKKworICAgIENUX0RvTG9nIEVYVFJBICJDb25maWd1cmluZyAke21vZGV9IGNvcmUgQyBjb21waWxlciIKKworICAgIGZvciB0bXAgaW4gQVJDSCBBQkkgQ1BVIFRVTkUgRlBVIEZMT0FUOyBkbworICAgICAgICBldmFsIHRtcD0iXCR7Q1RfQVJDSF9XSVRIXyR7dG1wfX0iCisgICAgICAgIGlmIFsgLW4gIiR7dG1wfSIgXTsgdGhlbgorICAgICAgICAgICAgZXh0cmFfY29uZmlnKz0oIiR7dG1wfSIpCisgICAgICAgIGZpCisgICAgZG9uZQorICAgIGlmIFsgIiR7Q1RfQ0NfQ1hBX0FURVhJVH0iID0gInkiIF07IHRoZW4KKyAgICAgICAgZXh0cmFfY29uZmlnKz0oIi0tZW5hYmxlLV9fY3hhX2F0ZXhpdCIpCisgICAgZWxzZQorICAgICAgICBleHRyYV9jb25maWcrPSgiLS1kaXNhYmxlLV9fY3hhX2F0ZXhpdCIpCisgICAgZmkKKworICAgICMgKioqIFdBUk5JTkcgISAqKioKKyAgICAjIEtlZXAgdGhpcyBmdWxsIGlmLWVsc2UtaWYtZWxpZi1maS1maSBibG9jayBpbiBzeW5jCisgICAgIyB3aXRoIHRoZSBzYW1lIGJsb2NrIGluIGRvX2NjLCBiZWxvdy4KKyAgICBpZiBbICIke2J1aWxkX3N0YXRpY2xpbmtlZH0iID0gInllcyIgXTsgdGhlbgorICAgICAgICBjb3JlX0xERkxBR1MrPSgiLXN0YXRpYyIpCisgICAgICAgIGhvc3RfbGlic3RkY3h4X2ZsYWdzKz0oIi1zdGF0aWMtbGliZ2NjIikKKyAgICAgICAgaG9zdF9saWJzdGRjeHhfZmxhZ3MrPSgiLVdsLC1Cc3RhdGljLC1sc3RkYysrIikKKyAgICAgICAgaG9zdF9saWJzdGRjeHhfZmxhZ3MrPSgiLWxtIikKKyAgICAgICAgIyBDb21wYW5pb24gbGlicmFyaWVzIGFyZSBidWlsZCBzdGF0aWMgKGVnICFzaGFyZWQpLCBzbworICAgICAgICAjIHRoZSBsaWJzdGRjKysgaXMgbm90IHB1bGxlZCBhdXRvbWF0aWNhbGx5LCBhbHRob3VnaCBpdAorICAgICAgICAjIGlzIG5lZWRlZC4gU2hvZS1ob3JuIGl0IGluIG91ciBMREZMQUdTCisgICAgICAgICMgRGl0dG8gbGlibSBvbiBzb21lIEZlZG9yYSBib3hlbgorICAgICAgICBjb3JlX0xERkxBR1MrPSgiLWxzdGRjKysiKQorICAgICAgICBjb3JlX0xERkxBR1MrPSgiLWxtIikKKyAgICBlbHNlCisgICAgICAgIGlmIFsgIiR7Q1RfQ0NfU1RBVElDX0xJQlNURENYWH0iID0gInkiIF07IHRoZW4KKyAgICAgICAgICAgICMgdGhpcyBpcyBmcm9tIENvZGVTb3VyY2VyeSBhcm0tMjAxMHExLTIwMi1hcm0tbm9uZS1saW51eC1nbnVlYWJpLnNyYy50YXIuYnoyCisgICAgICAgICAgICAjIGJ1aWxkIHNjcmlwdAorICAgICAgICAgICAgIyBJTkZPOiBpZiB0aGUgaG9zdCBnY2MgaXMgZ2NjLTQuNSB0aGVuIHByZXN1bWFibHkgd2UgY291bGQgdXNlIC1zdGF0aWMtbGlic3RkYysrLAorICAgICAgICAgICAgIyAgICAgICBzZWUgaHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMDktMDYvbXNnMDE2MzUuaHRtbAorICAgICAgICAgICAgaG9zdF9saWJzdGRjeHhfZmxhZ3MrPSgiLXN0YXRpYy1saWJnY2MiKQorICAgICAgICAgICAgaG9zdF9saWJzdGRjeHhfZmxhZ3MrPSgiLVdsLC1Cc3RhdGljLC1sc3RkYysrLC1CZHluYW1pYyIpCisgICAgICAgICAgICBob3N0X2xpYnN0ZGN4eF9mbGFncys9KCItbG0iKQorICAgICAgICBlbGlmIFsgIiR7Q1RfQ09NUExJQlNfU0hBUkVEfSIgIT0gInkiIF07IHRoZW4KKyAgICAgICAgICAgICMgV2hlbiBjb21wYW5pb24gbGlicmFyaWVzIGFyZSBidWlsZCBzdGF0aWMgKGVnICFzaGFyZWQpLAorICAgICAgICAgICAgIyB0aGUgbGlic3RkYysrIGlzIG5vdCBwdWxsZWQgYXV0b21hdGljYWxseSwgYWx0aG91Z2ggaXQKKyAgICAgICAgICAgICMgaXMgbmVlZGVkLiBTaG9lLWhvcm4gaXQgaW4gb3VyIExERkxBR1MKKyAgICAgICAgICAgICMgRGl0dG8gbGlibSBvbiBzb21lIEZlZG9yYSBib3hlbgorICAgICAgICAgICAgY29yZV9MREZMQUdTKz0oIi1sc3RkYysrIikKKyAgICAgICAgICAgIGNvcmVfTERGTEFHUys9KCItbG0iKQorICAgICAgICBmaQorICAgIGZpCisKKyAgICBpZiBbICIke0NUX0NDX0dDQ19VU0VfR01QX01QRlJ9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIGV4dHJhX2NvbmZpZys9KCItLXdpdGgtZ21wPSR7Q1RfQ09NUExJQlNfRElSfSIpCisgICAgICAgIGV4dHJhX2NvbmZpZys9KCItLXdpdGgtbXBmcj0ke0NUX0NPTVBMSUJTX0RJUn0iKQorICAgIGZpCisgICAgaWYgWyAiJHtDVF9DQ19HQ0NfVVNFX01QQ30iID0gInkiIF07IHRoZW4KKyAgICAgICAgZXh0cmFfY29uZmlnKz0oIi0td2l0aC1tcGM9JHtDVF9DT01QTElCU19ESVJ9IikKKyAgICBmaQorICAgIGlmIFsgIiR7Q1RfQ0NfR0NDX1VTRV9HUkFQSElURX0iID0gInkiIF07IHRoZW4KKyAgICAgICAgZXh0cmFfY29uZmlnKz0oIi0td2l0aC1wcGw9JHtDVF9DT01QTElCU19ESVJ9IikKKyAgICAgICAgIyBXaXRoIFBQTCAwLjExKywgYWxzbyBwdWxsIGxpYnB3bCBpZiBuZWVkZWQKKyAgICAgICAgaWYgWyAiJHtDVF9QUExfTkVFRFNfTElCUFdMfSIgPSAieSIgXTsgdGhlbgorICAgICAgICAgICAgaG9zdF9saWJzdGRjeHhfZmxhZ3MrPSgiLUwke0NUX0NPTVBMSUJTX0RJUn0vbGliIikKKyAgICAgICAgICAgIGhvc3RfbGlic3RkY3h4X2ZsYWdzKz0oIi1scHdsIikKKyAgICAgICAgZmkKKyAgICAgICAgZXh0cmFfY29uZmlnKz0oIi0td2l0aC1jbG9vZz0ke0NUX0NPTVBMSUJTX0RJUn0iKQorICAgIGVsaWYgWyAiJHtDVF9DQ19HQ0NfSEFTX0dSQVBISVRFfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBleHRyYV9jb25maWcrPSgiLS13aXRoLXBwbD1ubyIpCisgICAgICAgIGV4dHJhX2NvbmZpZys9KCItLXdpdGgtY2xvb2c9bm8iKQorICAgIGZpCisgICAgaWYgWyAiJHtDVF9DQ19HQ0NfVVNFX0xUT30iID0gInkiIF07IHRoZW4KKyAgICAgICAgZXh0cmFfY29uZmlnKz0oIi0td2l0aC1saWJlbGY9JHtDVF9DT01QTElCU19ESVJ9IikKKyAgICAgICAgZXh0cmFfY29uZmlnKz0oIi0tZW5hYmxlLWx0byIpCisgICAgZWxpZiBbICIke0NUX0NDX0dDQ19IQVNfTFRPfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBleHRyYV9jb25maWcrPSgiLS13aXRoLWxpYmVsZj1ubyIpCisgICAgICAgIGV4dHJhX2NvbmZpZys9KCItLWRpc2FibGUtbHRvIikKKyAgICBmaQorCisgICAgaWYgWyAkeyNob3N0X2xpYnN0ZGN4eF9mbGFnc1tAXX0gLW5lIDAgXTsgdGhlbgorICAgICAgICBleHRyYV9jb25maWcrPSgiLS13aXRoLWhvc3QtbGlic3RkY3h4PSR7aG9zdF9saWJzdGRjeHhfZmxhZ3NbKl19IikKKyAgICBmaQorCisgICAgaWYgWyAiJHtDVF9DQ19HQ0NfRU5BQkxFX1RBUkdFVF9PUFRTUEFDRX0iID0gInkiIF07IHRoZW4KKyAgICAgICAgZXh0cmFfY29uZmlnKz0oIi0tZW5hYmxlLXRhcmdldC1vcHRzcGFjZSIpCisgICAgZmkKKworICAgIGNhc2UgIiR7Q1RfQ0NfR0NDX0xEQkxfMTI4fSIgaW4KKyAgICAgICAgeSkgIGV4dHJhX2NvbmZpZys9KCItLXdpdGgtbG9uZy1kb3VibGUtMTI4Iik7OworICAgICAgICBtKSAgOzsKKyAgICAgICAgIiIpIGV4dHJhX2NvbmZpZys9KCItLXdpdGhvdXQtbG9uZy1kb3VibGUtMTI4Iik7OworICAgIGVzYWMKKworICAgIGlmIFsgIiR7Q1RfQ0NfR0NDX0JVSUxEX0lEfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBleHRyYV9jb25maWcrPSggLS1lbmFibGUtbGlua2VyLWJ1aWxkLWlkICkKKyAgICBmaQorCisgICAgY2FzZSAiJHtDVF9DQ19HQ0NfTE5LX0hBU0hfU1RZTEV9IiBpbgorICAgICAgICAiIikgOzsKKyAgICAgICAgKikgIGV4dHJhX2NvbmZpZys9KCAiLS13aXRoLWxpbmtlci1oYXNoLXN0eWxlPSR7Q1RfQ0NfR0NDX0xOS19IQVNIX1NUWUxFfSIgKTs7CisgICAgZXNhYworCisgICAgY2FzZSAiJHtDVF9BUkNIfSIgaW4KKyAgICAgICAgbWlwcykKKyAgICAgICAgICAgIGNhc2UgIiR7Q1RfQ0NfR0NDX21pcHNfbGxzY30iIGluCisgICAgICAgICAgICAgICAgeSkgIGV4dHJhX2NvbmZpZys9KCAtLXdpdGgtbGxzYyApOzsKKyAgICAgICAgICAgICAgICBtKSAgOzsKKyAgICAgICAgICAgICAgICAqKSAgZXh0cmFfY29uZmlnKz0oIC0td2l0aG91dC1sbHNjICk7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgY2FzZSAiJHtDVF9DQ19HQ0NfbWlwc19zeW5jaX0iIGluCisgICAgICAgICAgICAgICAgeSkgIGV4dHJhX2NvbmZpZys9KCAtLXdpdGgtc3luY2kgKTs7CisgICAgICAgICAgICAgICAgbSkgIDs7CisgICAgICAgICAgICAgICAgKikgIGV4dHJhX2NvbmZpZys9KCAtLXdpdGhvdXQtc3luY2kgKTs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBpZiBbICIke0NUX0NDX0dDQ19taXBzX3BsdH0iIF07IHRoZW4KKyAgICAgICAgICAgICAgICBleHRyYV9jb25maWcrPSggLS13aXRoLW1pcHMtcGx0ICkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OyAjIEFSQ0ggaXMgbWlwcworICAgIGVzYWMKKworICAgIGV4dHJhX2NvbmZpZys9KC0tZGlzYWJsZS1saWJnb21wKQorICAgIGV4dHJhX2NvbmZpZys9KC0tZGlzYWJsZS1saWJtdWRmbGFwKQorCisgICAgWyAiJHtDVF9DQ19HQ0NfRElTQUJMRV9QQ0h9IiA9ICJ5IiBdICYmIGV4dHJhX2NvbmZpZys9KCItLWRpc2FibGUtbGlic3RkY3h4LXBjaCIpCisKKyAgICBDVF9Eb0xvZyBERUJVRyAiRXh0cmEgY29uZmlnIHBhc3NlZDogJyR7ZXh0cmFfY29uZmlnWypdfSciCisKKyAgICAjIFVzZSAtLXdpdGgtbG9jYWwtcHJlZml4IHNvIG9sZGVyIGdjY3MgZG9uJ3QgbG9vayBpbiAvdXNyL2xvY2FsIChodHRwOi8vZ2NjLmdudS5vcmcvUFIxMDUzMikKKyAgICBDVF9Eb0V4ZWNMb2cgQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ0NfRk9SX0JVSUxEPSIke0NUX0JVSUxEfS1nY2MiICAgICAgICAgICAgICAgICAgXAorICAgIENGTEFHUz0iJHtDVF9DRkxBR1NfRk9SX0hPU1R9IiAgICAgICAgICAgICAgICAgIFwKKyAgICBMREZMQUdTPSIke2NvcmVfTERGTEFHU1sqXX0iICAgICAgICAgICAgICAgICAgICBcCisgICAgIiR7Q1RfU1JDX0RJUn0vZ2NjLSR7Q1RfQ0NfVkVSU0lPTn0vY29uZmlndXJlIiAgXAorICAgICAgICAtLWJ1aWxkPSR7Q1RfQlVJTER9ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1ob3N0PSR7Q1RfSE9TVH0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC0tdGFyZ2V0PSR7Q1RfVEFSR0VUfSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLXByZWZpeD0iJHtjb3JlX3ByZWZpeF9kaXJ9IiAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS13aXRoLWxvY2FsLXByZWZpeD0iJHtDVF9TWVNST09UX0RJUn0iICAgICBcCisgICAgICAgIC0tZGlzYWJsZS1tdWx0aWxpYiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWRpc2FibGUtbGlibXVkZmxhcCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgJHtDQ19DT1JFX1NZU1JPT1RfQVJHfSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICIke2V4dHJhX2NvbmZpZ1tAXX0iICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWRpc2FibGUtbmxzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1lbmFibGUtbGFuZ3VhZ2VzPSIke2xhbmdfb3B0fSIgICAgICAgICAgICBcCisgICAgICAgICIke0NUX0NDX0NPUkVfRVhUUkFfQ09ORklHX0FSUkFZW0BdfSIKKworICAgIGlmIFsgIiR7YnVpbGRfbGliZ2NjfSIgPSAieWVzIiBdOyB0aGVuCisgICAgICAgICMgSEFDSzogd2UgbmVlZCB0byBvdmVycmlkZSBTSExJQl9MQyBmcm9tIGdjYy9jb25maWcvdC1zbGliZ2NjLWVsZi12ZXIgb3IKKyAgICAgICAgIyBnY2MvY29uZmlnL3QtbGlidW53aW5kIHNvIC1sYyBpcyByZW1vdmVkIGZyb20gdGhlIGxpbmsgZm9yCisgICAgICAgICMgbGliZ2NjX3Muc28sIGFzIHdlIGRvIG5vdCBoYXZlIGEgdGFyZ2V0IC1sYyB5ZXQuCisgICAgICAgICMgVGhpcyBpcyBub3QgYXMgdWdseSBhcyBpdCBhcHBlYXJzIHRvIGJlIDstKSBBbGwgc3ltYm9scyBnZXQgcmVzb2x2ZWQKKyAgICAgICAgIyBkdXJpbmcgdGhlIGdsaWJjIGJ1aWxkLCBhbmQgd2UgcHJvdmlkZSBhIHByb3BlciBsaWJnY2Nfcy5zbyBmb3IgdGhlCisgICAgICAgICMgY3Jvc3MgdG9vbGNoYWluIGR1cmluZyB0aGUgZmluYWwgZ2NjIGJ1aWxkLgorICAgICAgICAjCisgICAgICAgICMgQXMgd2UgY2Fubm90IG1vZGlmeSB0aGUgc291cmNlIHRyZWUsIG5vciBvdmVycmlkZSBTSExJQl9MQyBpdHNlbGYKKyAgICAgICAgIyBkdXJpbmcgY29uZmlndXJlIG9yIG1ha2UsIHdlIGhhdmUgdG8gZWRpdCB0aGUgcmVzdWx0YW50CisgICAgICAgICMgZ2NjL2xpYmdjYy5tayBpdHNlbGYgdG8gcmVtb3ZlIC1sYyBmcm9tIHRoZSBsaW5rLgorICAgICAgICAjIFRoaXMgY2F1c2VzIHVzIHRvIGhhdmUgdG8ganVtcCB0aHJvdWdoIHNvbWUgaG9vcHMuLi4KKyAgICAgICAgIworICAgICAgICAjIFRvIHByb2R1Y2UgbGliZ2NjLm1rIHRvIGVkaXQgd2UgZmlyc3RseSByZXF1aXJlIGxpYmliZXJ0eS5hLAorICAgICAgICAjIHNvIHdlIGNvbmZpZ3VyZSB0aGVuIGJ1aWxkIGl0LgorICAgICAgICAjIE5leHQgd2UgaGF2ZSB0byBjb25maWd1cmUgZ2NjLCBjcmVhdGUgbGliZ2NjLm1rIHRoZW4gZWRpdCBpdC4uLgorICAgICAgICAjIFNvIG11Y2ggZWFzaWVyIGlmIHdlIGp1c3QgZWRpdCB0aGUgc291cmNlIHRyZWUsIGJ1dCBoZXkuLi4KKyAgICAgICAgaWYgWyAhIC1mICIke0NUX1NSQ19ESVJ9L2djYy0ke0NUX0NDX1ZFUlNJT059L2djYy9CQVNFLVZFUiIgXTsgdGhlbgorICAgICAgICAgICAgQ1RfRG9FeGVjTG9nIENGRyBtYWtlICR7Sk9CU0ZMQUdTfSBjb25maWd1cmUtbGliaWJlcnR5CisgICAgICAgICAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1ha2UgJHtKT0JTRkxBR1N9IC1DIGxpYmliZXJ0eSBsaWJpYmVydHkuYQorICAgICAgICAgICAgQ1RfRG9FeGVjTG9nIENGRyBtYWtlICR7Sk9CU0ZMQUdTfSBjb25maWd1cmUtZ2NjIGNvbmZpZ3VyZS1saWJjcHAKKyAgICAgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSAke0pPQlNGTEFHU30gYWxsLWxpYmNwcAorICAgICAgICBlbHNlCisgICAgICAgICAgICBDVF9Eb0V4ZWNMb2cgQ0ZHIG1ha2UgJHtKT0JTRkxBR1N9IGNvbmZpZ3VyZS1nY2MgY29uZmlndXJlLWxpYmNwcCBjb25maWd1cmUtYnVpbGQtbGliaWJlcnR5CisgICAgICAgICAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1ha2UgJHtKT0JTRkxBR1N9IGFsbC1saWJjcHAgYWxsLWJ1aWxkLWxpYmliZXJ0eQorICAgICAgICBmaQorICAgICAgICAjIEhBQ0s6IGdjYy00LjIgdXNlcyBsaWJkZWNudW1iZXIgdG8gYnVpbGQgbGliZ2NjLm1rLCBzbyBidWlsZCBpdCBoZXJlLgorICAgICAgICBpZiBbIC1kICIke0NUX1NSQ19ESVJ9L2djYy0ke0NUX0NDX1ZFUlNJT059L2xpYmRlY251bWJlciIgXTsgdGhlbgorICAgICAgICAgICAgQ1RfRG9FeGVjTG9nIENGRyBtYWtlICR7Sk9CU0ZMQUdTfSBjb25maWd1cmUtbGliZGVjbnVtYmVyCisgICAgICAgICAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1ha2UgJHtKT0JTRkxBR1N9IC1DIGxpYmRlY251bWJlciBsaWJkZWNudW1iZXIuYQorICAgICAgICBmaQorCisgICAgICAgICMgU3RhcnRpbmcgd2l0aCBHQ0MgNC4zLCBsaWJnY2MubWsgaXMgbm8gbG9uZ2VyIGJ1aWx0LAorICAgICAgICAjIGFuZCBsaWJnY2MubXZhcnMgaXMgdXNlZCBpbnN0ZWFkLgorCisgICAgICAgIGlmIFsgIiR7Q1RfQ0NfR0NDXzRfM19vcl9sYXRlcn0iID0gInkiIF07IHRoZW4KKyAgICAgICAgICAgIGxpYmdjY19ydWxlPSJsaWJnY2MubXZhcnMiCisgICAgICAgICAgICBjb3JlX3RhcmdldHM9KCBnY2MgdGFyZ2V0LWxpYmdjYyApCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxpYmdjY19ydWxlPSJsaWJnY2MubWsiCisgICAgICAgICAgICBjb3JlX3RhcmdldHM9KCBnY2MgKQorICAgICAgICBmaQorCisgICAgICAgICMgT24gYmFyZSBtZXRhbCBhbmQgY2FuYWRpYW4gYnVpbGQgdGhlIGhvc3QtY29tcGlsZXIgaXMgdXNlZCB3aGVuCisgICAgICAgICMgYWN0dWFsbHkgdGhlIGJ1aWxkLXN5c3RlbSBjb21waWxlciBpcyByZXF1aXJlZC4gQ2hvb3NlIHRoZSBjb3JyZWN0CisgICAgICAgICMgY29tcGlsZXJzIGZvciBjYW5hZGlhbiBidWlsZCBhbmQgdXNlIHRoZSBkZWZhdWx0cyBvbiBvdGhlcgorICAgICAgICAjIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICBpZiBbICIke0NUX0JBUkVfTUVUQUx9LCR7Q1RfQ0FOQURJQU59IiA9ICJ5LHkiIF07IHRoZW4KKyAgICAgICAgICAgIHJlcGFpcl9jYz0iQ0NfRk9SX0JVSUxEPSR7Q1RfQlVJTER9LWdjYyBcCisgICAgICAgICAgICAgICAgICAgICAgIEdDQ19GT1JfVEFSR0VUPSR7Q1RfVEFSR0VUfS1nY2MiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlcGFpcl9jYz0iIgorICAgICAgICBmaQorCisgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSAke0pPQlNGTEFHU30gLUMgZ2NjICR7bGliZ2NjX3J1bGV9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7cmVwYWlyX2NjfQorICAgICAgICBzZWQgLXIgLWkgLWUgJ3NALWxjQEBnJyBnY2MvJHtsaWJnY2NfcnVsZX0KKyAgICBlbHNlICMgYnVpbGRfbGliZ2NjCisgICAgICAgIGNvcmVfdGFyZ2V0cz0oIGdjYyApCisgICAgZmkgICAjICEgYnVpbGQgbGliZ2NjCisgICAgaWYgWyAgICAiJHtidWlsZF9saWJzdGRjeHh9IiA9ICJ5ZXMiICAgIFwKKyAgICAgICAgIC1hICIke0NUX0NDX0xBTkdfQ1hYfSIgID0gInkiICAgICAgXAorICAgICAgIF07IHRoZW4KKyAgICAgICAgY29yZV90YXJnZXRzKz0oIHRhcmdldC1saWJzdGRjKystdjMgKQorICAgIGZpCisKKyAgICBDVF9Eb0xvZyBFWFRSQSAiQnVpbGRpbmcgJHttb2RlfSBjb3JlIEMgY29tcGlsZXIiCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlICR7Sk9CU0ZMQUdTfSAiJHtjb3JlX3RhcmdldHNbQF0vIy9hbGwtfSIKKworICAgIENUX0RvTG9nIEVYVFJBICJJbnN0YWxsaW5nICR7bW9kZX0gY29yZSBDIGNvbXBpbGVyIgorICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSAke0pPQlNGTEFHU30gIiR7Y29yZV90YXJnZXRzW0BdLyMvaW5zdGFsbC19IgorCisgICAgIyBDcmVhdGUgYSBzeW1saW5rICR7Q1RfVEFSR0VUfS1jYyB0byAke0NUX1RBUkdFVH0tZ2NjIHRvIGFsd2F5cyBiZSBhYmxlCisgICAgIyB0byBjYWxsIHRoZSBDIGNvbXBpbGVyIHdpdGggdGhlIHNhbWUsIHNvbWV3aGF0IGNhbm9uaWNhbCBuYW1lLgorICAgICMgY2hlY2sgd2hldGhlciBjb21waWxlciBoYXMgYW4gZXh0ZW5zaW9uCisgICAgZmlsZT0iJCggbHMgLTEgIiR7Y29yZV9wcmVmaXhfZGlyfS9iaW4vJHtDVF9UQVJHRVR9LWdjYy4iKiAyPi9kZXYvbnVsbCB8fCB0cnVlICkiCisgICAgWyAteiAiJHtmaWxlfSIgXSB8fCBleHQ9Ii4ke2ZpbGUjIyoufSIKKyAgICBDVF9Eb0V4ZWNMb2cgQUxMIGxuIC1zZnYgIiR7Q1RfVEFSR0VUfS1nY2Mke2V4dH0iICIke2NvcmVfcHJlZml4X2Rpcn0vYmluLyR7Q1RfVEFSR0VUfS1jYyR7ZXh0fSIKKworICAgIENUX0VuZFN0ZXAKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBCdWlsZCBmaW5hbCBnY2MKK2RvX2NjKCkgeworICAgIGxvY2FsIC1hIGhvc3RfbGlic3RkY3h4X2ZsYWdzCisgICAgbG9jYWwgLWEgZXh0cmFfY29uZmlnCisgICAgbG9jYWwgLWEgZmluYWxfTERGTEFHUworICAgIGxvY2FsIHRtcAorCisgICAgIyBJZiBidWlsZGluZyBmb3IgYmFyZSBtZXRhbCwgbm90aGluZyB0byBiZSBkb25lIGhlcmUsIHRoZSBzdGF0aWMgY29yZSBjb25waWxlciBpcyBlbm91Z2ghCisgICAgWyAiJHtDVF9CQVJFX01FVEFMfSIgPSAieSIgXSAmJiByZXR1cm4gMAorCisgICAgQ1RfRG9TdGVwIElORk8gIkluc3RhbGxpbmcgZmluYWwgY29tcGlsZXIiCisKKyAgICBta2RpciAtcCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLWNjIgorICAgIGNkICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtY2MiCisKKyAgICBDVF9Eb0xvZyBFWFRSQSAiQ29uZmlndXJpbmcgZmluYWwgY29tcGlsZXIiCisKKyAgICAjIEVuYWJsZSBzZWxlY3RlZCBsYW5ndWFnZXMKKyAgICBsYW5nX29wdD0iYyIKKyAgICBbICIke0NUX0NDX0xBTkdfQ1hYfSIgPSAieSIgICAgICBdICYmIGxhbmdfb3B0PSIke2xhbmdfb3B0fSxjKysiCisgICAgWyAiJHtDVF9DQ19MQU5HX0ZPUlRSQU59IiA9ICJ5IiAgXSAmJiBsYW5nX29wdD0iJHtsYW5nX29wdH0sZm9ydHJhbiIKKyAgICBbICIke0NUX0NDX0xBTkdfQURBfSIgPSAieSIgICAgICBdICYmIGxhbmdfb3B0PSIke2xhbmdfb3B0fSxhZGEiCisgICAgWyAiJHtDVF9DQ19MQU5HX0pBVkF9IiA9ICJ5IiAgICAgXSAmJiBsYW5nX29wdD0iJHtsYW5nX29wdH0samF2YSIKKyAgICBbICIke0NUX0NDX0xBTkdfT0JKQ30iID0gInkiICAgICBdICYmIGxhbmdfb3B0PSIke2xhbmdfb3B0fSxvYmpjIgorICAgIFsgIiR7Q1RfQ0NfTEFOR19PQkpDWFh9IiA9ICJ5IiAgIF0gJiYgbGFuZ19vcHQ9IiR7bGFuZ19vcHR9LG9iai1jKysiCisgICAgQ1RfVGVzdCAiQnVpbGRpbmcgQURBIGxhbmd1YWdlIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiBXaWxsIHRyeS4uLiIgIiR7Q1RfQ0NfTEFOR19BREF9IiA9ICJ5IgorICAgIENUX1Rlc3QgIkJ1aWxkaW5nIE9iamVjdGl2ZS1DIGxhbmd1YWdlIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiBXaWxsIHRyeS4uLiIgIiR7Q1RfQ0NfTEFOR19PQkpDfSIgPSAieSIKKyAgICBDVF9UZXN0ICJCdWlsZGluZyBPYmplY3RpdmUtQysrIGxhbmd1YWdlIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiBXaWxsIHRyeS4uLiIgIiR7Q1RfQ0NfTEFOR19PQkpDWFh9IiA9ICJ5IgorICAgIENUX1Rlc3QgIkJ1aWxkaW5nICR7Q1RfQ0NfTEFOR19PVEhFUlMvLywvIH0gbGFuZ3VhZ2UocykgaXMgbm90IHlldCBzdXBwb3J0ZWQuIFdpbGwgdHJ5Li4uIiAtbiAiJHtDVF9DQ19MQU5HX09USEVSU30iCisgICAgbGFuZ19vcHQ9JChlY2hvICIke2xhbmdfb3B0fSwke0NUX0NDX0xBTkdfT1RIRVJTfSIgfHNlZCAtciAtZSAncy8sKy8sL2c7IHMvLCokLy87JykKKworICAgIGV4dHJhX2NvbmZpZys9KCItLWVuYWJsZS1sYW5ndWFnZXM9JHtsYW5nX29wdH0iKQorICAgIGV4dHJhX2NvbmZpZys9KCItLWRpc2FibGUtbXVsdGlsaWIiKQorICAgIGZvciB0bXAgaW4gQVJDSCBBQkkgQ1BVIFRVTkUgRlBVIEZMT0FUOyBkbworICAgICAgICBldmFsIHRtcD0iXCR7Q1RfQVJDSF9XSVRIXyR7dG1wfX0iCisgICAgICAgIGlmIFsgLW4gIiR7dG1wfSIgXTsgdGhlbgorICAgICAgICAgICAgZXh0cmFfY29uZmlnKz0oIiR7dG1wfSIpCisgICAgICAgIGZpCisgICAgZG9uZQorCisgICAgWyAiJHtDVF9TSEFSRURfTElCU30iID0gInkiIF0gfHwgZXh0cmFfY29uZmlnKz0oIi0tZGlzYWJsZS1zaGFyZWQiKQorICAgIGlmIFsgIiR7Q1RfQ0NfR0NDX0hBU19QS0dWRVJTSU9OX0JVR1VSTH0iID0gInkiIF07IHRoZW4KKyAgICAgICAgZXh0cmFfY29uZmlnKz0oIi0td2l0aC1wa2d2ZXJzaW9uPSR7Q1RfUEtHVkVSU0lPTn0iKQorICAgICAgICBbIC1uICIke0NUX1RPT0xDSEFJTl9CVUdVUkx9IiBdICYmIGV4dHJhX2NvbmZpZys9KCItLXdpdGgtYnVndXJsPSR7Q1RfVE9PTENIQUlOX0JVR1VSTH0iKQorICAgIGZpCisgICAgY2FzZSAiJHtDVF9DQ19HQ0NfU0pMSl9FWENFUFRJT05TfSIgaW4KKyAgICAgICAgeSkgIGV4dHJhX2NvbmZpZys9KCItLWVuYWJsZS1zamxqLWV4Y2VwdGlvbnMiKTs7CisgICAgICAgIG0pICA7OworICAgICAgICAiIikgZXh0cmFfY29uZmlnKz0oIi0tZGlzYWJsZS1zamxqLWV4Y2VwdGlvbnMiKTs7CisgICAgZXNhYworICAgIGlmIFsgIiR7Q1RfQ0NfQ1hBX0FURVhJVH0iID0gInkiIF07IHRoZW4KKyAgICAgICAgZXh0cmFfY29uZmlnKz0oIi0tZW5hYmxlLV9fY3hhX2F0ZXhpdCIpCisgICAgZWxzZQorICAgICAgICBleHRyYV9jb25maWcrPSgiLS1kaXNhYmxlLV9fY3hhX2F0ZXhpdCIpCisgICAgZmkKKyAgICBpZiBbIC1uICIke0NUX0NDX0VOQUJMRV9DWFhfRkxBR1N9IiBdOyB0aGVuCisgICAgICAgIGV4dHJhX2NvbmZpZys9KCItLWVuYWJsZS1jeHgtZmxhZ3M9JHtDVF9DQ19FTkFCTEVfQ1hYX0ZMQUdTfSIpCisgICAgZmkKKyAgICBpZiBbICIke0NUX0NDX0dDQ19MSUJNVURGTEFQfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBleHRyYV9jb25maWcrPSgtLWVuYWJsZS1saWJtdWRmbGFwKQorICAgIGVsc2UKKyAgICAgICAgZXh0cmFfY29uZmlnKz0oLS1kaXNhYmxlLWxpYm11ZGZsYXApCisgICAgZmkKKyAgICBpZiBbICIke0NUX0NDX0dDQ19MSUJHT01QfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBleHRyYV9jb25maWcrPSgtLWVuYWJsZS1saWJnb21wKQorICAgIGVsc2UKKyAgICAgICAgZXh0cmFfY29uZmlnKz0oLS1kaXNhYmxlLWxpYmdvbXApCisgICAgZmkKKyAgICBpZiBbICIke0NUX0NDX0dDQ19MSUJTU1B9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIGV4dHJhX2NvbmZpZys9KC0tZW5hYmxlLWxpYnNzcCkKKyAgICBlbHNlCisgICAgICAgIGV4dHJhX2NvbmZpZys9KC0tZGlzYWJsZS1saWJzc3ApCisgICAgZmkKKworICAgICMgKioqIFdBUk5JTkcgISAqKioKKyAgICAjIEtlZXAgdGhpcyBmdWxsIGlmLWVsc2UtaWYtZWxpZi1maS1maSBibG9jayBpbiBzeW5jCisgICAgIyB3aXRoIHRoZSBzYW1lIGJsb2NrIGluIGRvX2NjX2NvcmUsIGFib3ZlLgorICAgIGlmIFsgIiR7Q1RfU1RBVElDX1RPT0xDSEFJTn0iID0gInkiIF07IHRoZW4KKyAgICAgICAgZmluYWxfTERGTEFHUys9KCItc3RhdGljIikKKyAgICAgICAgaG9zdF9saWJzdGRjeHhfZmxhZ3MrPSgiLXN0YXRpYy1saWJnY2MiKQorICAgICAgICBob3N0X2xpYnN0ZGN4eF9mbGFncys9KCItV2wsLUJzdGF0aWMsLWxzdGRjKysiKQorICAgICAgICBob3N0X2xpYnN0ZGN4eF9mbGFncys9KCItbG0iKQorICAgICAgICAjIENvbXBhbmlvbiBsaWJyYXJpZXMgYXJlIGJ1aWxkIHN0YXRpYyAoZWcgIXNoYXJlZCksIHNvCisgICAgICAgICMgdGhlIGxpYnN0ZGMrKyBpcyBub3QgcHVsbGVkIGF1dG9tYXRpY2FsbHksIGFsdGhvdWdoIGl0CisgICAgICAgICMgaXMgbmVlZGVkLiBTaG9lLWhvcm4gaXQgaW4gb3VyIExERkxBR1MKKyAgICAgICAgIyBEaXR0byBsaWJtIG9uIHNvbWUgRmVkb3JhIGJveGVuCisgICAgICAgIGZpbmFsX0xERkxBR1MrPSgiLWxzdGRjKysiKQorICAgICAgICBmaW5hbF9MREZMQUdTKz0oIi1sbSIpCisgICAgZWxzZQorICAgICAgICBpZiBbICIke0NUX0NDX1NUQVRJQ19MSUJTVERDWFh9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgICAgICAjIHRoaXMgaXMgZnJvbSBDb2RlU291cmNlcnkgYXJtLTIwMTBxMS0yMDItYXJtLW5vbmUtbGludXgtZ251ZWFiaS5zcmMudGFyLmJ6MgorICAgICAgICAgICAgIyBidWlsZCBzY3JpcHQKKyAgICAgICAgICAgICMgSU5GTzogaWYgdGhlIGhvc3QgZ2NjIGlzIGdjYy00LjUgdGhlbiBwcmVzdW1hYmx5IHdlIGNvdWxkIHVzZSAtc3RhdGljLWxpYnN0ZGMrKywKKyAgICAgICAgICAgICMgICAgICAgc2VlIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDA5LTA2L21zZzAxNjM1Lmh0bWwKKyAgICAgICAgICAgIGhvc3RfbGlic3RkY3h4X2ZsYWdzKz0oIi1zdGF0aWMtbGliZ2NjIikKKyAgICAgICAgICAgIGhvc3RfbGlic3RkY3h4X2ZsYWdzKz0oIi1XbCwtQnN0YXRpYywtbHN0ZGMrKywtQmR5bmFtaWMiKQorICAgICAgICAgICAgaG9zdF9saWJzdGRjeHhfZmxhZ3MrPSgiLWxtIikKKyAgICAgICAgZWxpZiBbICIke0NUX0NPTVBMSUJTX1NIQVJFRH0iICE9ICJ5IiBdOyB0aGVuCisgICAgICAgICAgICAjIFdoZW4gY29tcGFuaW9uIGxpYnJhcmllcyBhcmUgYnVpbGQgc3RhdGljIChlZyAhc2hhcmVkKSwKKyAgICAgICAgICAgICMgdGhlIGxpYnN0ZGMrKyBpcyBub3QgcHVsbGVkIGF1dG9tYXRpY2FsbHksIGFsdGhvdWdoIGl0CisgICAgICAgICAgICAjIGlzIG5lZWRlZC4gU2hvZS1ob3JuIGl0IGluIG91ciBMREZMQUdTCisgICAgICAgICAgICAjIERpdHRvIGxpYm0gb24gc29tZSBGZWRvcmEgYm94ZW4KKyAgICAgICAgICAgIGZpbmFsX0xERkxBR1MrPSgiLWxzdGRjKysiKQorICAgICAgICAgICAgZmluYWxfTERGTEFHUys9KCItbG0iKQorICAgICAgICBmaQorICAgIGZpCisKKyAgICBpZiBbICIke0NUX0NDX0dDQ19VU0VfR01QX01QRlJ9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIGV4dHJhX2NvbmZpZys9KCItLXdpdGgtZ21wPSR7Q1RfQ09NUExJQlNfRElSfSIpCisgICAgICAgIGV4dHJhX2NvbmZpZys9KCItLXdpdGgtbXBmcj0ke0NUX0NPTVBMSUJTX0RJUn0iKQorICAgIGZpCisgICAgaWYgWyAiJHtDVF9DQ19HQ0NfVVNFX01QQ30iID0gInkiIF07IHRoZW4KKyAgICAgICAgZXh0cmFfY29uZmlnKz0oIi0td2l0aC1tcGM9JHtDVF9DT01QTElCU19ESVJ9IikKKyAgICBmaQorICAgIGlmIFsgIiR7Q1RfQ0NfR0NDX1VTRV9HUkFQSElURX0iID0gInkiIF07IHRoZW4KKyAgICAgICAgZXh0cmFfY29uZmlnKz0oIi0td2l0aC1wcGw9JHtDVF9DT01QTElCU19ESVJ9IikKKyAgICAgICAgIyBXaXRoIFBQTCAwLjExKywgYWxzbyBwdWxsIGxpYnB3bCBpZiBuZWVkZWQKKyAgICAgICAgaWYgWyAiJHtDVF9QUExfTkVFRFNfTElCUFdMfSIgPSAieSIgXTsgdGhlbgorICAgICAgICAgICAgaG9zdF9saWJzdGRjeHhfZmxhZ3MrPSgiLUwke0NUX0NPTVBMSUJTX0RJUn0vbGliIikKKyAgICAgICAgICAgIGhvc3RfbGlic3RkY3h4X2ZsYWdzKz0oIi1scHdsIikKKyAgICAgICAgZmkKKyAgICAgICAgZXh0cmFfY29uZmlnKz0oIi0td2l0aC1jbG9vZz0ke0NUX0NPTVBMSUJTX0RJUn0iKQorICAgIGVsaWYgWyAiJHtDVF9DQ19HQ0NfSEFTX0dSQVBISVRFfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBleHRyYV9jb25maWcrPSgiLS13aXRoLXBwbD1ubyIpCisgICAgICAgIGV4dHJhX2NvbmZpZys9KCItLXdpdGgtY2xvb2c9bm8iKQorICAgIGZpCisgICAgaWYgWyAiJHtDVF9DQ19HQ0NfVVNFX0xUT30iID0gInkiIF07IHRoZW4KKyAgICAgICAgZXh0cmFfY29uZmlnKz0oIi0td2l0aC1saWJlbGY9JHtDVF9DT01QTElCU19ESVJ9IikKKyAgICBlbGlmIFsgIiR7Q1RfQ0NfR0NDX0hBU19MVE99IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIGV4dHJhX2NvbmZpZys9KCItLXdpdGgtbGliZWxmPW5vIikKKyAgICBmaQorCisgICAgaWYgWyAkeyNob3N0X2xpYnN0ZGN4eF9mbGFnc1tAXX0gLW5lIDAgXTsgdGhlbgorICAgICAgICBleHRyYV9jb25maWcrPSgiLS13aXRoLWhvc3QtbGlic3RkY3h4PSR7aG9zdF9saWJzdGRjeHhfZmxhZ3NbKl19IikKKyAgICBmaQorCisgICAgaWYgWyAiJHtDVF9USFJFQURTfSIgPSAibm9uZSIgXTsgdGhlbgorICAgICAgICBleHRyYV9jb25maWcrPSgiLS1kaXNhYmxlLXRocmVhZHMiKQorICAgICAgICBpZiBbICIke0NUX0NDX0dDQ180XzJfb3JfbGF0ZXJ9IiA9IHkgXTsgdGhlbgorICAgICAgICAgICAgQ1RfVGVzdCAiRGlzYWJsaW5nIGxpYmdvbXAgZm9yIG5vLXRocmVhZCBnY2M+PTQuMiIgIiR7Q1RfQ0NfR0NDX0xJQkdPTVB9IiA9ICJZIgorICAgICAgICAgICAgZXh0cmFfY29uZmlnKz0oIi0tZGlzYWJsZS1saWJnb21wIikKKyAgICAgICAgZmkKKyAgICBlbHNlCisgICAgICAgIGlmIFsgIiR7Q1RfVEhSRUFEU30iID0gIndpbjMyIiBdOyB0aGVuCisgICAgICAgICAgICBleHRyYV9jb25maWcrPSgiLS1lbmFibGUtdGhyZWFkcz13aW4zMiIpCisgICAgICAgICAgICBleHRyYV9jb25maWcrPSgiLS1kaXNhYmxlLXdpbjMyLXJlZ2lzdHJ5IikKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXh0cmFfY29uZmlnKz0oIi0tZW5hYmxlLXRocmVhZHM9cG9zaXgiKQorICAgICAgICBmaQorICAgIGZpCisKKyAgICBpZiBbICIke0NUX0NDX0dDQ19FTkFCTEVfVEFSR0VUX09QVFNQQUNFfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBleHRyYV9jb25maWcrPSgiLS1lbmFibGUtdGFyZ2V0LW9wdHNwYWNlIikKKyAgICBmaQorICAgIGlmIFsgIiR7Q1RfQ0NfR0NDX0RJU0FCTEVfUENIfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBleHRyYV9jb25maWcrPSgiLS1kaXNhYmxlLWxpYnN0ZGN4eC1wY2giKQorICAgIGZpCisKKyAgICBjYXNlICIke0NUX0NDX0dDQ19MREJMXzEyOH0iIGluCisgICAgICAgIHkpICBleHRyYV9jb25maWcrPSgiLS13aXRoLWxvbmctZG91YmxlLTEyOCIpOzsKKyAgICAgICAgbSkgIDs7CisgICAgICAgICIiKSBleHRyYV9jb25maWcrPSgiLS13aXRob3V0LWxvbmctZG91YmxlLTEyOCIpOzsKKyAgICBlc2FjCisKKyAgICBpZiBbICIke0NUX0NDX0dDQ19CVUlMRF9JRH0iID0gInkiIF07IHRoZW4KKyAgICAgICAgZXh0cmFfY29uZmlnKz0oIC0tZW5hYmxlLWxpbmtlci1idWlsZC1pZCApCisgICAgZmkKKworICAgIGNhc2UgIiR7Q1RfQ0NfR0NDX0xOS19IQVNIX1NUWUxFfSIgaW4KKyAgICAgICAgIiIpIDs7CisgICAgICAgICopICBleHRyYV9jb25maWcrPSggIi0td2l0aC1saW5rZXItaGFzaC1zdHlsZT0ke0NUX0NDX0dDQ19MTktfSEFTSF9TVFlMRX0iICk7OworICAgIGVzYWMKKworICAgIGlmIFsgIiR7Q1RfQ0NfR0NDX0VOQUJMRV9QTFVHSU5TfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBleHRyYV9jb25maWcrPSggLS1lbmFibGUtcGx1Z2luICkKKyAgICBmaQorICAgIGlmIFsgIiR7Q1RfQ0NfR0NDX0dPTER9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIGV4dHJhX2NvbmZpZys9KCAtLWVuYWJsZS1nb2xkICkKKyAgICBmaQorCisgICAgY2FzZSAiJHtDVF9BUkNIfSIgaW4KKyAgICAgICAgbWlwcykKKyAgICAgICAgICAgIGNhc2UgIiR7Q1RfQ0NfR0NDX21pcHNfbGxzY30iIGluCisgICAgICAgICAgICAgICAgeSkgIGV4dHJhX2NvbmZpZys9KCAtLXdpdGgtbGxzYyApOzsKKyAgICAgICAgICAgICAgICBtKSAgOzsKKyAgICAgICAgICAgICAgICAqKSAgZXh0cmFfY29uZmlnKz0oIC0td2l0aG91dC1sbHNjICk7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgY2FzZSAiJHtDVF9DQ19HQ0NfbWlwc19zeW5jaX0iIGluCisgICAgICAgICAgICAgICAgeSkgIGV4dHJhX2NvbmZpZys9KCAtLXdpdGgtc3luY2kgKTs7CisgICAgICAgICAgICAgICAgbSkgIDs7CisgICAgICAgICAgICAgICAgKikgIGV4dHJhX2NvbmZpZys9KCAtLXdpdGhvdXQtc3luY2kgKTs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBpZiBbICIke0NUX0NDX0dDQ19taXBzX3BsdH0iIF07IHRoZW4KKyAgICAgICAgICAgICAgICBleHRyYV9jb25maWcrPSggLS13aXRoLW1pcHMtcGx0ICkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OyAjIEFSQ0ggaXMgbWlwcworICAgIGVzYWMKKworICAgIENUX0RvTG9nIERFQlVHICJFeHRyYSBjb25maWcgcGFzc2VkOiAnJHtleHRyYV9jb25maWdbKl19JyIKKworICAgICMgLS1kaXNhYmxlLW5scyB0byB3b3JrIGFyb3VuZCBjcmFzaCBidWcgb24gcHBjNDA1LCBidXQgYWxzbyBiZWNhdXNlCisgICAgIyBlbWJlZGRlZCBzeXN0ZW1zIGRvbid0IHJlYWxseSBuZWVkIG1lc3NhZ2UgY2F0YWxvZ3MuLi4KKyAgICBDVF9Eb0V4ZWNMb2cgQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ0NfRk9SX0JVSUxEPSIke0NUX0JVSUxEfS1nY2MiICAgICAgICAgICAgICAgICAgXAorICAgIENGTEFHUz0iJHtDVF9DRkxBR1NfRk9SX0hPU1R9IiAgICAgICAgICAgICAgICAgIFwKKyAgICBMREZMQUdTPSIke2ZpbmFsX0xERkxBR1NbKl19IiAgICAgICAgICAgICAgICAgICBcCisgICAgQ0ZMQUdTX0ZPUl9UQVJHRVQ9IiR7Q1RfVEFSR0VUX0NGTEFHU30iICAgICAgICAgXAorICAgIENYWEZMQUdTX0ZPUl9UQVJHRVQ9IiR7Q1RfVEFSR0VUX0NGTEFHU30iICAgICAgIFwKKyAgICBMREZMQUdTX0ZPUl9UQVJHRVQ9IiR7Q1RfVEFSR0VUX0xERkxBR1N9IiAgICAgICBcCisgICAgIiR7Q1RfU1JDX0RJUn0vZ2NjLSR7Q1RfQ0NfVkVSU0lPTn0vY29uZmlndXJlIiAgXAorICAgICAgICAtLWJ1aWxkPSR7Q1RfQlVJTER9ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1ob3N0PSR7Q1RfSE9TVH0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC0tdGFyZ2V0PSR7Q1RfVEFSR0VUfSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLXByZWZpeD0iJHtDVF9QUkVGSVhfRElSfSIgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgJHtDQ19TWVNST09UX0FSR30gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICIke2V4dHJhX2NvbmZpZ1tAXX0iICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLXdpdGgtbG9jYWwtcHJlZml4PSIke0NUX1NZU1JPT1RfRElSfSIgICAgIFwKKyAgICAgICAgLS1kaXNhYmxlLW5scyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC0tZW5hYmxlLWM5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1sb25nLWxvbmcgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIiR7Q1RfQ0NfRVhUUkFfQ09ORklHX0FSUkFZW0BdfSIKKworICAgIGlmIFsgIiR7Q1RfQ0FOQURJQU59IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIENUX0RvTG9nIEVYVFJBICJCdWlsZGluZyBsaWJpYmVydHkiCisgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSAke0pPQlNGTEFHU30gYWxsLWJ1aWxkLWxpYmliZXJ0eQorICAgIGZpCisKKyAgICBDVF9Eb0xvZyBFWFRSQSAiQnVpbGRpbmcgZmluYWwgY29tcGlsZXIiCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlICR7Sk9CU0ZMQUdTfSBhbGwKKworICAgIENUX0RvTG9nIEVYVFJBICJJbnN0YWxsaW5nIGZpbmFsIGNvbXBpbGVyIgorICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSAke0pPQlNGTEFHU30gaW5zdGFsbAorCisgICAgIyBDcmVhdGUgYSBzeW1saW5rICR7Q1RfVEFSR0VUfS1jYyB0byAke0NUX1RBUkdFVH0tZ2NjIHRvIGFsd2F5cyBiZSBhYmxlCisgICAgIyB0byBjYWxsIHRoZSBDIGNvbXBpbGVyIHdpdGggdGhlIHNhbWUsIHNvbWV3aGF0IGNhbm9uaWNhbCBuYW1lLgorICAgICMgY2hlY2sgd2hldGhlciBjb21waWxlciBoYXMgYW4gZXh0ZW5zaW9uCisgICAgZmlsZT0iJCggbHMgLTEgIiR7Q1RfUFJFRklYX0RJUn0vYmluLyR7Q1RfVEFSR0VUfS1nY2MuIiogMj4vZGV2L251bGwgfHwgdHJ1ZSApIgorICAgIFsgLXogIiR7ZmlsZX0iIF0gfHwgZXh0PSIuJHtmaWxlIyMqLn0iCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBsbiAtc2Z2ICIke0NUX1RBUkdFVH0tZ2NjJHtleHR9IiAiJHtDVF9QUkVGSVhfRElSfS9iaW4vJHtDVF9UQVJHRVR9LWNjJHtleHR9IgorCisgICAgQ1RfRW5kU3RlcAorfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2NvbXBhbmlvbl9saWJzL2Nsb29nLnNoIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2NvbXBhbmlvbl9saWJzL2Nsb29nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZjYwNzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvY29tcGFuaW9uX2xpYnMvY2xvb2cuc2gKQEAgLTAsMCArMSw3NCBAQAorIyBUaGlzIGZpbGUgYWRkcyB0aGUgZnVuY3Rpb25zIHRvIGJ1aWxkIHRoZSBDTG9vRyBsaWJyYXJ5CisjIENvcHlyaWdodCAyMDA5IFlhbm4gRS4gTU9SSU4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIEdQTCB2Mi4gU2VlIENPUFlJTkcgaW4gdGhlIHJvb3Qgb2YgdGhpcyBwYWNrYWdlCisKK2RvX2Nsb29nX2dldCgpIHsgOjsgfQorZG9fY2xvb2dfZXh0cmFjdCgpIHsgOjsgfQorZG9fY2xvb2coKSB7IDo7IH0KKworIyBPdmVyaWRlIGZ1bmN0aW9ucyBkZXBlbmRpbmcgb24gY29uZmlndXJhdGlvbgoraWYgWyAiJHtDVF9DTE9PR30iID0gInkiIF07IHRoZW4KKworIyBEb3dubG9hZCBDTG9vRworZG9fY2xvb2dfZ2V0KCkgeworICAgIENUX0dldEZpbGUgImNsb29nLXBwbC0ke0NUX0NMT09HX1ZFUlNJT059IiAgXAorICAgICAgICBmdHA6Ly9nY2MuZ251Lm9yZy9wdWIvZ2NjL2luZnJhc3RydWN0dXJlCit9CisKKyMgRXh0cmFjdCBDTG9vRworZG9fY2xvb2dfZXh0cmFjdCgpIHsKKyAgICBsb2NhbCBfdAorCisgICAgIyBWZXJzaW9uIDAuMTUuMyBoYXMgYSBkaXJuYW1lICdjbG9vZy1wcGwnICh3aXRoIG5vIHZlcnNpb24gaW4gaXQhKQorICAgICMgd2hpbGUgdmVyc2lvbnMgMC4xNS40IG9ud2FyZCBkbyBoYXZlIHRoZSB2ZXJzaW9uIGluIHRoZSBkaXJuYW1lLgorICAgICMgQnV0LCBiZWNhdXNlIHRoZSBpbmZyYXN0cnVjdHVyZSBwcm9wZXJseSBjcmVhdGVzIHRoZSBleHRyYWN0ZWQKKyAgICAjIGRpcmVjdG9yaWVzICh3aXRoIHRhcidzIC0tc3RyaXAtY29tcG9uZW50cyksIHdlIGNhbiBsaXZlIHNhZmVseS4uLgorICAgIENUX0V4dHJhY3QgImNsb29nLXBwbC0ke0NUX0NMT09HX1ZFUlNJT059IgorICAgIENUX1BhdGNoICJjbG9vZy1wcGwiICIke0NUX0NMT09HX1ZFUlNJT059IgorCisgICAgaWYgWyAiJHtDVF9DTE9PR19ORUVEU19BVVRPUkVDT05GfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBDVF9QdXNoZCAiJHtDVF9TUkNfRElSfS9jbG9vZy1wcGwtJHtDVF9DTE9PR19WRVJTSU9OfSIKKyAgICAgICAgQ1RfRG9FeGVjTG9nIENGRyAuL2F1dG9nZW4uc2gKKyAgICAgICAgQ1RfUG9wZAorICAgIGZpCit9CisKK2RvX2Nsb29nKCkgeworICAgIGxvY2FsIGNsb29nX3NyY19kaXI9IiR7Q1RfU1JDX0RJUn0vY2xvb2ctcHBsLSR7Q1RfQ0xPT0dfVkVSU0lPTn0iCisKKyAgICBta2RpciAtcCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLWNsb29nLXBwbCIKKyAgICBjZCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLWNsb29nLXBwbCIKKworICAgIENUX0RvU3RlcCBJTkZPICJJbnN0YWxsaW5nIENMb29HL3BwbCIKKworICAgIENUX0RvTG9nIEVYVFJBICJDb25maWd1cmluZyBDTG9vRy9wcGwiCisKKyAgICBDVF9Eb0V4ZWNMb2cgQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDRkxBR1M9IiR7Q1RfQ0ZMQUdTX0ZPUl9IT1NUfSIgICAgICAgICAgICAgIFwKKyAgICBMREZMQUdTPSItbG0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiJHtjbG9vZ19zcmNfZGlyfS9jb25maWd1cmUiICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1idWlsZD0ke0NUX0JVSUxEfSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1ob3N0PSR7Q1RfSE9TVH0gICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1wcmVmaXg9IiR7Q1RfQ09NUExJQlNfRElSfSIgICAgICAgICAgIFwKKyAgICAgICAgLS13aXRoLWdtcD0iJHtDVF9DT01QTElCU19ESVJ9IiAgICAgICAgIFwKKyAgICAgICAgLS13aXRoLXBwbD0iJHtDVF9DT01QTElCU19ESVJ9IiAgICAgICAgIFwKKyAgICAgICAgLS13aXRoLWJpdHM9Z21wICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS13aXRoLWhvc3QtbGlic3RkY3h4PSctbHN0ZGMrKycgICAgICAgIFwKKyAgICAgICAgLS1kaXNhYmxlLXNoYXJlZCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1lbmFibGUtc3RhdGljCisKKyAgICBDVF9Eb0xvZyBFWFRSQSAiQnVpbGRpbmcgQ0xvb0cvcHBsIgorICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSAke0pPQlNGTEFHU30gbGliY2xvb2cubGEKKworICAgIGlmIFsgIiR7Q1RfQ09NUExJQlNfQ0hFQ0t9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIENUX0RvTG9nIEVYVFJBICJDaGVja2luZyBDTG9vRy9wcGwiCisgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSAke0pPQlNGTEFHU30gLXMgY2hlY2sKKyAgICBmaQorCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkluc3RhbGxpbmcgQ0xvb0cvcHBsIgorICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSBpbnN0YWxsLWxpYkxUTElCUkFSSUVTIGluc3RhbGwtcGtnaW5jbHVkZUhFQURFUlMKKworICAgIENUX0VuZFN0ZXAKK30KKworZmkgIyBDVF9DTE9PRwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2NvbXBhbmlvbl9saWJzL2dtcC5zaCBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9jb21wYW5pb25fbGlicy9nbXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg2MDFjNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9jb21wYW5pb25fbGlicy9nbXAuc2gKQEAgLTAsMCArMSw1NyBAQAorIyBUaGlzIGZpbGUgYWRkcyB0aGUgZnVuY3Rpb25zIHRvIGJ1aWxkIHRoZSBHTVAgbGlicmFyeQorIyBDb3B5cmlnaHQgMjAwOCBZYW5uIEUuIE1PUklOCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgdjIuIFNlZSBDT1BZSU5HIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZQorCitkb19nbXBfZ2V0KCkgeyA6OyB9Citkb19nbXBfZXh0cmFjdCgpIHsgOjsgfQorZG9fZ21wKCkgeyA6OyB9CisKKyMgT3ZlcmlkZSBmdW5jdGlvbnMgZGVwZW5kaW5nIG9uIGNvbmZpZ3VyYXRpb24KK2lmIFsgIiR7Q1RfR01QfSIgPSAieSIgXTsgdGhlbgorCisjIERvd25sb2FkIEdNUAorZG9fZ21wX2dldCgpIHsKKyAgICBDVF9HZXRGaWxlICJnbXAtJHtDVF9HTVBfVkVSU0lPTn0iIHtmdHAsaHR0cH06Ly97ZnRwLnN1bmV0LnNlL3B1YixmdHAuZ251Lm9yZ30vZ251L2dtcAorfQorCisjIEV4dHJhY3QgR01QCitkb19nbXBfZXh0cmFjdCgpIHsKKyAgICBDVF9FeHRyYWN0ICJnbXAtJHtDVF9HTVBfVkVSU0lPTn0iCisgICAgQ1RfUGF0Y2ggImdtcCIgIiR7Q1RfR01QX1ZFUlNJT059IgorfQorCitkb19nbXAoKSB7CisgICAgbWtkaXIgLXAgIiR7Q1RfQlVJTERfRElSfS9idWlsZC1nbXAiCisgICAgY2QgIiR7Q1RfQlVJTERfRElSfS9idWlsZC1nbXAiCisKKyAgICBDVF9Eb1N0ZXAgSU5GTyAiSW5zdGFsbGluZyBHTVAiCisKKyAgICBDVF9Eb0xvZyBFWFRSQSAiQ29uZmlndXJpbmcgR01QIgorCisgICAgQ1RfRG9FeGVjTG9nIENGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIENGTEFHUz0iJHtDVF9DRkxBR1NfRk9SX0hPU1R9IC1mZXhjZXB0aW9ucyIgICAgIFwKKyAgICAiJHtDVF9TUkNfRElSfS9nbXAtJHtDVF9HTVBfVkVSU0lPTn0vY29uZmlndXJlIiBcCisgICAgICAgIC0tYnVpbGQ9JHtDVF9CVUlMRH0gICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWhvc3Q9JHtDVF9IT1NUfSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1wcmVmaXg9IiR7Q1RfQ09NUExJQlNfRElSfSIgICAgICAgICAgICAgICBcCisgICAgICAgIC0tZW5hYmxlLWZmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1tcGJzZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1lbmFibGUtY3h4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC0tZGlzYWJsZS1zaGFyZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1zdGF0aWMKKworICAgIENUX0RvTG9nIEVYVFJBICJCdWlsZGluZyBHTVAiCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlICR7Sk9CU0ZMQUdTfQorCisgICAgaWYgWyAiJHtDVF9DT01QTElCU19DSEVDS30iID0gInkiIF07IHRoZW4KKyAgICAgICAgQ1RfRG9Mb2cgRVhUUkEgIkNoZWNraW5nIEdNUCIKKyAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlICR7Sk9CU0ZMQUdTfSAtcyBjaGVjaworICAgIGZpCisKKyAgICBDVF9Eb0xvZyBFWFRSQSAiSW5zdGFsbGluZyBHTVAiCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlIGluc3RhbGwKKworICAgIENUX0VuZFN0ZXAKK30KKworZmkgIyBDVF9HTVAKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9jb21wYW5pb25fbGlicy9saWJlbGYuc2ggYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvY29tcGFuaW9uX2xpYnMvbGliZWxmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MDdkN2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvY29tcGFuaW9uX2xpYnMvbGliZWxmLnNoCkBAIC0wLDAgKzEsOTIgQEAKKyMgQnVpbGQgc2NyaXB0IGZvciBsaWJlbGYKKworZG9fbGliZWxmX2dldCgpIHsgOjsgfQorZG9fbGliZWxmX2V4dHJhY3QoKSB7IDo7IH0KK2RvX2xpYmVsZigpIHsgOjsgfQorZG9fbGliZWxmX3RhcmdldCgpIHsgOjsgfQorCitpZiBbICIke0NUX0xJQkVMRn0iID0gInkiIC1vICIke0NUX0xJQkVMRl9UQVJHRVR9IiA9ICJ5IiBdOyB0aGVuCisKK2RvX2xpYmVsZl9nZXQoKSB7CisgICAgIyBUaGUgc2VydmVyIGhvc3RpbmcgbGliZWxmIHdpbGwgcmV0dXJuIGFuICJIVFRQIDMwMCA6IE11bHRpcGxlIENob2ljZXMiCisgICAgIyBlcnJvciBjb2RlIGlmIHdlIHRyeSB0byBkb3dubG9hZCBhIGZpbGUgdGhhdCBkb2VzIG5vdCBleGlzdHMgdGhlcmUuCisgICAgIyBTbyB3ZSBoYXZlIHRvIHJlcXVlc3QgdGhlIGZpbGUgd2l0aCBhbiBleHBsaWNpdCBleHRlbnNpb24uCisgICAgQ1RfR2V0RmlsZSAibGliZWxmLSR7Q1RfTElCRUxGX1ZFUlNJT059IiAudGFyLmd6IGh0dHA6Ly93d3cubXI1MTEuZGUvc29mdHdhcmUvCit9CisKK2RvX2xpYmVsZl9leHRyYWN0KCkgeworICAgIENUX0V4dHJhY3QgImxpYmVsZi0ke0NUX0xJQkVMRl9WRVJTSU9OfSIKKyAgICBDVF9QYXRjaCAibGliZWxmIiAiJHtDVF9MSUJFTEZfVkVSU0lPTn0iCit9CisKK2lmIFsgIiR7Q1RfTElCRUxGfSIgPSAieSIgXTsgdGhlbgorCitkb19saWJlbGYoKSB7CisgICAgQ1RfRG9TdGVwIElORk8gIkluc3RhbGxpbmcgbGliZWxmIgorICAgIG1rZGlyIC1wICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtbGliZWxmIgorICAgIENUX1B1c2hkICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtbGliZWxmIgorCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkNvbmZpZ3VyaW5nIGxpYmVsZiIKKworICAgIENUX0RvRXhlY0xvZyBDRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIENDPSIke0NUX0hPU1R9LWdjYyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIENGTEFHUz0iLWZQSUMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIke0NUX1NSQ19ESVJ9L2xpYmVsZi0ke0NUX0xJQkVMRl9WRVJTSU9OfS9jb25maWd1cmUiICAgXAorICAgICAgICAtLWJ1aWxkPSR7Q1RfQlVJTER9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWhvc3Q9JHtDVF9IT1NUfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLXRhcmdldD0ke0NUX1RBUkdFVH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLXByZWZpeD0iJHtDVF9DT01QTElCU19ESVJ9IiAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1jb21wYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1lbGY2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1leHRlbmRlZC1mb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWRpc2FibGUtc2hhcmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1zdGF0aWMKKworICAgIENUX0RvTG9nIEVYVFJBICJCdWlsZGluZyBsaWJlbGYiCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlCisKKyAgICBDVF9Eb0xvZyBFWFRSQSAiSW5zdGFsbGluZyBsaWJlbGYiCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlIGluc3RhbGwKKworICAgIENUX1BvcGQKKyAgICBDVF9FbmRTdGVwCit9CisKK2ZpICMgQ1RfTElCRUxGCisKK2lmIFsgIiR7Q1RfTElCRUxGX1RBUkdFVH0iID0gInkiIF07IHRoZW4KKworZG9fbGliZWxmX3RhcmdldCgpIHsKKyAgICBDVF9Eb1N0ZXAgSU5GTyAiSW5zdGFsbGluZyBsaWJlbGYgZm9yIHRoZSB0YXJnZXQiCisgICAgbWtkaXIgLXAgIiR7Q1RfQlVJTERfRElSfS9idWlsZC1saWJlbGYtZm9yLXRhcmdldCIKKyAgICBDVF9QdXNoZCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLWxpYmVsZi1mb3ItdGFyZ2V0IgorCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkNvbmZpZ3VyaW5nIGxpYmVsZiIKKyAgICBDVF9Eb0V4ZWNMb2cgQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDQz0iJHtDVF9UQVJHRVR9LWdjYyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDRkxBR1M9Ii1mUElDIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBSQU5MSUI9IiR7Q1RfVEFSR0VUfS1yYW5saWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiJHtDVF9TUkNfRElSfS9saWJlbGYtJHtDVF9MSUJFTEZfVkVSU0lPTn0vY29uZmlndXJlIiAgIFwKKyAgICAgICAgLS1idWlsZD0ke0NUX0JVSUxEfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1ob3N0PSR7Q1RfVEFSR0VUfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS10YXJnZXQ9JHtDVF9UQVJHRVR9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1wcmVmaXg9L3VzciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1lbmFibGUtY29tcGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1lbmFibGUtZWxmNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1lbmFibGUtc2hhcmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1lbmFibGUtZXh0ZW5kZWQtZm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1lbmFibGUtc3RhdGljCisKKyAgICBDVF9Eb0xvZyBFWFRSQSAiQnVpbGRpbmcgbGliZWxmIgorICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZQorCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkluc3RhbGxpbmcgbGliZWxmIgorICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSBpbnN0cm9vdD0iJHtDVF9TWVNST09UX0RJUn0iIGluc3RhbGwKKworICAgIENUX1BvcGQKKyAgICBDVF9FbmRTdGVwCit9CisKK2ZpICMgQ1RfTElCRUxGX1RBUkdFVAorCitmaSAjIENUX0xJQkVMRiB8fCBDVF9MSUJFTEZfVEFSR0VUCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvY29tcGFuaW9uX2xpYnMvbXBjLnNoIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2NvbXBhbmlvbl9saWJzL21wYy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGNjODdiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2NvbXBhbmlvbl9saWJzL21wYy5zaApAQCAtMCwwICsxLDU3IEBACisjIFRoaXMgZmlsZSBhZGRzIHRoZSBmdW5jdGlvbnMgdG8gYnVpbGQgdGhlIE1QQyBsaWJyYXJ5CisjIENvcHlyaWdodCAyMDA5IFlhbm4gRS4gTU9SSU4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIEdQTCB2Mi4gU2VlIENPUFlJTkcgaW4gdGhlIHJvb3Qgb2YgdGhpcyBwYWNrYWdlCisKK2RvX21wY19nZXQoKSB7IDo7IH0KK2RvX21wY19leHRyYWN0KCkgeyA6OyB9Citkb19tcGMoKSB7IDo7IH0KKworIyBPdmVyaWRlIGZ1bmN0aW9ucyBkZXBlbmRpbmcgb24gY29uZmlndXJhdGlvbgoraWYgWyAiJHtDVF9NUEN9IiA9ICJ5IiBdOyB0aGVuCisKKyMgRG93bmxvYWQgTVBDCitkb19tcGNfZ2V0KCkgeworICAgIENUX0dldEZpbGUgIm1wYy0ke0NUX01QQ19WRVJTSU9OfSIgLnRhci5neiAgICAgIFwKKyAgICAgICAgaHR0cDovL3d3dy5tdWx0aXByZWNpc2lvbi5vcmcvbXBjL2Rvd25sb2FkCit9CisKKyMgRXh0cmFjdCBNUEMKK2RvX21wY19leHRyYWN0KCkgeworICAgIENUX0V4dHJhY3QgIm1wYy0ke0NUX01QQ19WRVJTSU9OfSIKKyAgICBDVF9QYXRjaCAibXBjIiAiJHtDVF9NUENfVkVSU0lPTn0iCit9CisKK2RvX21wYygpIHsKKyAgICBta2RpciAtcCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLW1wYyIKKyAgICBjZCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLW1wYyIKKworICAgIENUX0RvU3RlcCBJTkZPICJJbnN0YWxsaW5nIE1QQyIKKworICAgIENUX0RvTG9nIEVYVFJBICJDb25maWd1cmluZyBNUEMiCisKKyAgICBDVF9Eb0V4ZWNMb2cgQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ0ZMQUdTPSIke0NUX0NGTEFHU19GT1JfSE9TVH0iICAgICAgICAgICAgICAgICAgXAorICAgICIke0NUX1NSQ19ESVJ9L21wYy0ke0NUX01QQ19WRVJTSU9OfS9jb25maWd1cmUiIFwKKyAgICAgICAgLS1idWlsZD0ke0NUX0JVSUxEfSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC0taG9zdD0ke0NUX0hPU1R9ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLXByZWZpeD0iJHtDVF9DT01QTElCU19ESVJ9IiAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS13aXRoLWdtcD0iJHtDVF9DT01QTElCU19ESVJ9IiAgICAgICAgICAgICBcCisgICAgICAgIC0td2l0aC1tcGZyPSIke0NUX0NPTVBMSUJTX0RJUn0iICAgICAgICAgICAgXAorICAgICAgICAtLWRpc2FibGUtc2hhcmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1lbmFibGUtc3RhdGljCisKKyAgICBDVF9Eb0xvZyBFWFRSQSAiQnVpbGRpbmcgTVBDIgorICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSAke0pPQlNGTEFHU30KKworICAgIGlmIFsgIiR7Q1RfQ09NUExJQlNfQ0hFQ0t9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIENUX0RvTG9nIEVYVFJBICJDaGVja2luZyBNUEMiCisgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSAke0pPQlNGTEFHU30gLXMgY2hlY2sKKyAgICBmaQorCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkluc3RhbGxpbmcgTVBDIgorICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSBpbnN0YWxsCisKKyAgICBDVF9FbmRTdGVwCit9CisKK2ZpICMgQ1RfTVBDCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvY29tcGFuaW9uX2xpYnMvbXBmci5zaCBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9jb21wYW5pb25fbGlicy9tcGZyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MWQ1YzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvY29tcGFuaW9uX2xpYnMvbXBmci5zaApAQCAtMCwwICsxLDEwNyBAQAorIyBUaGlzIGZpbGUgYWRkcyB0aGUgZnVuY3Rpb25zIHRvIGJ1aWxkIHRoZSBNUEZSIGxpYnJhcnkKKyMgQ29weXJpZ2h0IDIwMDggWWFubiBFLiBNT1JJTgorIyBMaWNlbnNlZCB1bmRlciB0aGUgR1BMIHYyLiBTZWUgQ09QWUlORyBpbiB0aGUgcm9vdCBvZiB0aGlzIHBhY2thZ2UKKworZG9fbXBmcl9nZXQoKSB7IDo7IH0KK2RvX21wZnJfZXh0cmFjdCgpIHsgOjsgfQorZG9fbXBmcigpIHsgOjsgfQorCisjIE92ZXJpZGUgZnVuY3Rpb24gZGVwZW5kaW5nIG9uIGNvbmZpZ3VyYXRpb24KK2lmIFsgIiR7Q1RfTVBGUn0iID0gInkiIF07IHRoZW4KKworIyBEb3dubG9hZCBNUEZSCitkb19tcGZyX2dldCgpIHsKKyAgICBDVF9HZXRGaWxlICJtcGZyLSR7Q1RfTVBGUl9WRVJTSU9OfSIgaHR0cDovL3d3dy5tcGZyLm9yZy9tcGZyLWN1cnJlbnQvICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm1wZnIub3JnL21wZnItJHtDVF9NUEZSX1ZFUlNJT059LworfQorCisjIEV4dHJhY3QgTVBGUgorZG9fbXBmcl9leHRyYWN0KCkgeworICAgIENUX0V4dHJhY3QgIm1wZnItJHtDVF9NUEZSX1ZFUlNJT059IgorICAgIENUX1BhdGNoICJtcGZyIiAiJHtDVF9NUEZSX1ZFUlNJT059IgorCisgICAgIyBPSywgR2VudG9vIGhhdmUgYSBzYW5pdHkgY2hlY2sgdGhhdCBsaWJ0b29sLm00IGFuZCBsdG1haW4uc2ggaGF2ZSB0aGUKKyAgICAjIHNhbWUgdmVyc2lvbiBudW1iZXIuIFVuZm9ydHVuYXRlbHksIHNvbWUgdGFyYmFsbHMgb2YgTVBGUiBhcmUgbm90CisgICAgIyBidWlsdCBzYW5lbHksIGFuZCB0aHVzIC4vY29uZmlndXJlIGZhaWxzIG9uIEdlbnRvby4KKyAgICAjIFNlZTogaHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2Nyb3NzZ2NjLzIwMDgtMDUvbXNnMDAwODAuaHRtbAorICAgICMgYW5kOiBodHRwOi8vc291cmNld2FyZS5vcmcvbWwvY3Jvc3NnY2MvMjAwOC0wNi9tc2cwMDAwNS5odG1sCisgICAgIyBUaGlzIGhhY2sgaXMgbm90IGJhZCBwZXIgc2UsIGJ1dCB0aGUgTVBGUiBndXlzIHdvdWxkIGJlIGJldHRlciBub3QgdG8KKyAgICAjIGRvIHRoYXQgaW4gdGhlIGZ1dHVyZS4uLgorICAgICMgSXQgc2VlbXMgdGhhdCBNUEZSID49IDIuNC4wIGRvIG5vdCBuZWVkIHRoaXMuLi4KKyAgICBjYXNlICIke0NUX01QRlJfVkVSU0lPTn0iIGluCisgICAgICAgIDIuNC4qKQorICAgICAgICAgICAgQ1RfUHVzaGQgIiR7Q1RfU1JDX0RJUn0vbXBmci0ke0NUX01QRlJfVkVSU0lPTn0iCisgICAgICAgICAgICBpZiBbICEgLWYgLmF1dG9yZWNvbmYuY3QtbmcgXTsgdGhlbgorICAgICAgICAgICAgICAgIENUX0RvTG9nIERFQlVHICJSdW5uaW5nIGF1dG9yZWNvbmYiCisgICAgICAgICAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCBhdXRvcmVjb25mCisgICAgICAgICAgICAgICAgdG91Y2ggLmF1dG9yZWNvbmYuY3QtbmcKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBDVF9Qb3BkCisgICAgICAgICAgICA7OworICAgICAgICAxLip8Mi4wLip8Mi4xLip8Mi4yLip8Mi4zLiopCisgICAgICAgICAgICBDVF9QdXNoZCAiJHtDVF9TUkNfRElSfS9tcGZyLSR7Q1RfTVBGUl9WRVJTSU9OfSIKKyAgICAgICAgICAgIGlmIFsgISAtZiAuYXV0b3Rvb2xzLmN0LW5nIF07IHRoZW4KKyAgICAgICAgICAgICAgICBDVF9Eb0xvZyBERUJVRyAiUmUtYnVpbGRpbmcgYXV0b3Rvb2xzIGZpbGVzIgorICAgICAgICAgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgYXV0b3JlY29uZiAtZmkKKyAgICAgICAgICAgICAgICAjIFN0YXJ0aW5nIHdpdGggbGlidG9vbC0xLjlmLCBjb25maWcue2d1ZXNzLHN1Yn0gYXJlIG5vIGxvbmdlcgorICAgICAgICAgICAgICAgICMgaW5zdGFsbGVkIHdpdGhvdXQgLWksIGJ1dCBzdGFydGluZyB3aXRoIGxpYnRvb2wtMi4yLjYsIHRoZXkKKyAgICAgICAgICAgICAgICAjIGFyZSBubyBsb25nZXIgcmVtb3ZlZCB3aXRob3V0IC1pLiBTaWdodC4uLiBKdXN0IHVzZSAtaSB3aXRoCisgICAgICAgICAgICAgICAgIyBsaWJ0b29sID49MgorICAgICAgICAgICAgICAgICMgU2VlOiBodHRwOi8vc291cmNld2FyZS5vcmcvbWwvY3Jvc3NnY2MvMjAwOC0xMS9tc2cwMDA0Ni5odG1sCisgICAgICAgICAgICAgICAgIyBhbmQ6IGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9tbC9jcm9zc2djYy8yMDA4LTExL21zZzAwMDQ4Lmh0bWwKKyAgICAgICAgICAgICAgICBsaWJ0b29saXplX29wdD0KKyAgICAgICAgICAgICAgICBjYXNlICIkKGxpYnRvb2xpemUgLS12ZXJzaW9uIHxoZWFkIC1uIDEgfGF3ayAneyBwcmludCAkKE5GKTsgfScpIiBpbgorICAgICAgICAgICAgICAgICAgICAwLiopICAgIDs7CisgICAgICAgICAgICAgICAgICAgIDEuKikgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgKikgICAgICBsaWJ0b29saXplX29wdD0taTs7CisgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgbGlidG9vbGl6ZSAtZiAke2xpYnRvb2xpemVfb3B0fQorICAgICAgICAgICAgICAgIHRvdWNoIC5hdXRvdG9vbHMuY3QtbmcKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBDVF9Qb3BkCisgICAgICAgICAgICA7OworICAgIGVzYWMKK30KKworZG9fbXBmcigpIHsKKyAgICBta2RpciAtcCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLW1wZnIiCisgICAgY2QgIiR7Q1RfQlVJTERfRElSfS9idWlsZC1tcGZyIgorCisgICAgQ1RfRG9TdGVwIElORk8gIkluc3RhbGxpbmcgTVBGUiIKKworICAgICMgVW5kZXIgQ3lnd2luLCB3ZSBjYW4ndCBidWlsZCBhIHRocmVhZC1zYWZlIGxpYnJhcnkKKyAgICBjYXNlICIke0NUX0hPU1R9IiBpbgorICAgICAgICAqY3lnd2luKikgICBtcGZyX29wdHMrPSggLS1kaXNhYmxlLXRocmVhZC1zYWZlICk7OworICAgICAgICAqbWluZ3cqKSAgICBtcGZyX29wdHMrPSggLS1kaXNhYmxlLXRocmVhZC1zYWZlICk7OworICAgICAgICAqZGFyd2luKikgICBtcGZyX29wdHMrPSggLS1kaXNhYmxlLXRocmVhZC1zYWZlICk7OworICAgICAgICAqKSAgICAgICAgICBtcGZyX29wdHMrPSggLS1lbmFibGUtdGhyZWFkLXNhZmUgICk7OworICAgIGVzYWMKKworCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkNvbmZpZ3VyaW5nIE1QRlIiCisgICAgQ1RfRG9FeGVjTG9nIENGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDQz0iJHtDVF9IT1NUfS1nY2MiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIENGTEFHUz0iJHtDVF9DRkxBR1NfRk9SX0hPU1R9IiAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiR7Q1RfU1JDX0RJUn0vbXBmci0ke0NUX01QRlJfVkVSU0lPTn0vY29uZmlndXJlIiAgIFwKKyAgICAgICAgLS1idWlsZD0ke0NUX0JVSUxEfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWhvc3Q9JHtDVF9IT1NUfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC0tcHJlZml4PSIke0NUX0NPTVBMSUJTX0RJUn0iICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS13aXRoLWdtcD0iJHtDVF9DT01QTElCU19ESVJ9IiAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWRpc2FibGUtc2hhcmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC0tZW5hYmxlLXN0YXRpYworCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkJ1aWxkaW5nIE1QRlIiCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlICR7Sk9CU0ZMQUdTfQorCisgICAgaWYgWyAiJHtDVF9DT01QTElCU19DSEVDS30iID0gInkiIF07IHRoZW4KKyAgICAgICAgQ1RfRG9Mb2cgRVhUUkEgIkNoZWNraW5nIE1QRlIiCisgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSAke0pPQlNGTEFHU30gLXMgY2hlY2sKKyAgICBmaQorCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkluc3RhbGxpbmcgTVBGUiIKKyAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1ha2UgaW5zdGFsbAorCisgICAgQ1RfRW5kU3RlcAorfQorCitmaSAjIENUX01QRlIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9jb21wYW5pb25fbGlicy9wcGwuc2ggYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvY29tcGFuaW9uX2xpYnMvcHBsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MGM1NGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvY29tcGFuaW9uX2xpYnMvcHBsLnNoCkBAIC0wLDAgKzEsNzQgQEAKKyMgVGhpcyBmaWxlIGFkZHMgdGhlIGZ1bmN0aW9ucyB0byBidWlsZCB0aGUgUFBMIGxpYnJhcnkKKyMgQ29weXJpZ2h0IDIwMDkgWWFubiBFLiBNT1JJTgorIyBMaWNlbnNlZCB1bmRlciB0aGUgR1BMIHYyLiBTZWUgQ09QWUlORyBpbiB0aGUgcm9vdCBvZiB0aGlzIHBhY2thZ2UKKworZG9fcHBsX2dldCgpIHsgOjsgfQorZG9fcHBsX2V4dHJhY3QoKSB7IDo7IH0KK2RvX3BwbCgpIHsgOjsgfQorCisjIE92ZXJpZGUgZnVuY3Rpb25zIGRlcGVuZGluZyBvbiBjb25maWd1cmF0aW9uCitpZiBbICIke0NUX1BQTH0iID0gInkiIF07IHRoZW4KKworIyBEb3dubG9hZCBQUEwKK2RvX3BwbF9nZXQoKSB7CisgICAgQ1RfR2V0RmlsZSAicHBsLSR7Q1RfUFBMX1ZFUlNJT059IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBodHRwOi8vd3d3LmNzLnVuaXByLml0L3BwbC9Eb3dubG9hZC9mdHAvcmVsZWFzZXMvJHtDVF9QUExfVkVSU0lPTn0gIFwKKyAgICAgICAgZnRwOi8vZnRwLmNzLnVuaXByLml0L3B1Yi9wcGwvcmVsZWFzZXMvJHtDVF9QUExfVkVSU0lPTn0gICAgICAgICAgICBcCisgICAgICAgIGZ0cDovL2djYy5nbnUub3JnL3B1Yi9nY2MvaW5mcmFzdHJ1Y3R1cmUKK30KKworIyBFeHRyYWN0IFBQTAorZG9fcHBsX2V4dHJhY3QoKSB7CisgICAgQ1RfRXh0cmFjdCAicHBsLSR7Q1RfUFBMX1ZFUlNJT059IgorICAgIENUX1BhdGNoICJwcGwiICIke0NUX1BQTF9WRVJTSU9OfSIKK30KKworZG9fcHBsKCkgeworICAgIG1rZGlyIC1wICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtcHBsIgorICAgIGNkICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtcHBsIgorCisgICAgQ1RfRG9TdGVwIElORk8gIkluc3RhbGxpbmcgUFBMIgorCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkNvbmZpZ3VyaW5nIFBQTCIKKworCisgICAgQ1RfRG9FeGVjTG9nIENGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIENGTEFHUz0iJHtDVF9DRkxBR1NfRk9SX0hPU1R9IiAgICAgICAgICAgICAgICAgIFwKKyAgICBDWFhGTEFHUz0iJHtDVF9DRkxBR1NfRk9SX0hPU1R9IiAgICAgICAgICAgICAgICBcCisgICAgIiR7Q1RfU1JDX0RJUn0vcHBsLSR7Q1RfUFBMX1ZFUlNJT059L2NvbmZpZ3VyZSIgXAorICAgICAgICAtLWJ1aWxkPSR7Q1RfQlVJTER9ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1ob3N0PSR7Q1RfSE9TVH0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC0tcHJlZml4PSIke0NUX0NPTVBMSUJTX0RJUn0iICAgICAgICAgICAgICAgXAorICAgICAgICAtLXdpdGgtbGliZ21wLXByZWZpeD0iJHtDVF9DT01QTElCU19ESVJ9IiAgIFwKKyAgICAgICAgLS13aXRoLWxpYmdtcHh4LXByZWZpeD0iJHtDVF9DT01QTElCU19ESVJ9IiBcCisgICAgICAgIC0td2l0aC1nbXAtcHJlZml4PSIke0NUX0NPTVBMSUJTX0RJUn0iICAgICAgXAorICAgICAgICAtLWVuYWJsZS13YXRjaGRvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1kaXNhYmxlLWRlYnVnZ2luZyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC0tZGlzYWJsZS1hc3NlcnRpb25zICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWRpc2FibGUtcHBsX2xjZGQgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1kaXNhYmxlLXBwbF9scHNvbCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC0tZGlzYWJsZS1zaGFyZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1pbnRlcmZhY2VzPSdjIGMrKycgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1lbmFibGUtc3RhdGljCisKKyAgICAjIE1heWJlLW9wdGlvbnM6CisgICAgIyAtLWVuYWJsZS1vcHRpbWl6YXRpb249c3BlZWQgIG9yIHNzcGVlZCAoeWVzLCB3aXRoIDIgJ3MnKQorCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkJ1aWxkaW5nIFBQTCIKKyAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1ha2UgJHtKT0JTRkxBR1N9CisKKyAgICBpZiBbICIke0NUX0NPTVBMSUJTX0NIRUNLfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBDVF9Eb0xvZyBFWFRSQSAiQ2hlY2tpbmcgUFBMIgorICAgICAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1ha2UgJHtKT0JTRkxBR1N9IC1zIGNoZWNrCisgICAgZmkKKworICAgIENUX0RvTG9nIEVYVFJBICJJbnN0YWxsaW5nIFBQTCIKKyAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1ha2UgaW5zdGFsbAorCisgICAgIyBSZW1vdmUgc3B1cmlvdXNseSBpbnN0YWxsZWQgZmlsZQorICAgIENUX0RvRXhlY0xvZyBBTEwgcm0gLWYgIiR7Q1RfUFJFRklYX0RJUn0vYmluL3BwbC1jb25maWciCisKKyAgICBDVF9FbmRTdGVwCit9CisKK2ZpICMgQ1RfUFBMCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvY29tcGFuaW9uX3Rvb2xzLnNoIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2NvbXBhbmlvbl90b29scy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzAzYzQxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2NvbXBhbmlvbl90b29scy5zaApAQCAtMCwwICsxLDM4IEBACisjIFdyYXBwZXIgdG8gYnVpbGQgdGhlIGNvbXBhbmlvbiB0b29scyBmYWNpbGl0aWVzCisKKyMgTGlzdCBhbGwgY29tcGFuaW9uIHRvb2xzIGZhY2lsaXRpZXMsIGFuZCBwYXJzZSB0aGVpciBzY3JpcHRzCitDVF9DT01QX1RPT0xTX0ZBQ0lMSVRZX0xJU1Q9Citmb3IgZiBpbiAiJHtDVF9MSUJfRElSfS9zY3JpcHRzL2J1aWxkL2NvbXBhbmlvbl90b29scy8iKi5zaDsgZG8KKyAgICBfZj0iJChiYXNlbmFtZSAiJHtmfSIgLnNoKSIKKyAgICBfZj0iJHtfZiM/Pz8tfSIKKyAgICBfX2Y9IkNUX0NPTVBfVE9PTFNfJHtfZn0iCisgICAgaWYgWyAiJHshX19mfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBDVF9Eb0xvZyBERUJVRyAiRW5hYmxpbmcgY29tcGFuaW9uIHRvb2xzICcke19mfSciCisgICAgICAgIC4gIiR7Zn0iCisgICAgICAgIENUX0NPTVBfVE9PTFNfRkFDSUxJVFlfTElTVD0iJHtDVF9DT01QX1RPT0xTX0ZBQ0lMSVRZX0xJU1R9ICR7X2Z9IgorICAgIGVsc2UKKyAgICAgICAgQ1RfRG9Mb2cgREVCVUcgIkRpc2FibGluZyBjb21wYW5pb24gdG9vbHMgJyR7X2Z9JyIKKyAgICBmaQorZG9uZQorCisjIERvd25sb2FkIHRoZSBjb21wYW5pb24gdG9vbHMgZmFjaWxpdGllcworZG9fY29tcGFuaW9uX3Rvb2xzX2dldCgpIHsKKyAgICBmb3IgZiBpbiAke0NUX0NPTVBfVE9PTFNfRkFDSUxJVFlfTElTVH07IGRvCisgICAgICAgIGRvX2NvbXBhbmlvbl90b29sc18ke2Z9X2dldAorICAgIGRvbmUKK30KKworIyBFeHRyYWN0IGFuZCBwYXRjaCB0aGUgY29tcGFuaW9uIHRvb2xzIGZhY2lsaXRpZXMKK2RvX2NvbXBhbmlvbl90b29sc19leHRyYWN0KCkgeworICAgIGZvciBmIGluICR7Q1RfQ09NUF9UT09MU19GQUNJTElUWV9MSVNUfTsgZG8KKyAgICAgICAgZG9fY29tcGFuaW9uX3Rvb2xzXyR7Zn1fZXh0cmFjdAorICAgIGRvbmUKK30KKworIyBCdWlsZCB0aGUgY29tcGFuaW9uIHRvb2xzIGZhY2lsaXRpZXMKK2RvX2NvbXBhbmlvbl90b29scygpIHsKKyAgICBmb3IgZiBpbiAke0NUX0NPTVBfVE9PTFNfRkFDSUxJVFlfTElTVH07IGRvCisgICAgICAgIGRvX2NvbXBhbmlvbl90b29sc18ke2Z9X2J1aWxkCisgICAgZG9uZQorfQorCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvY29tcGFuaW9uX3Rvb2xzLzA1MC1tYWtlLnNoIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2NvbXBhbmlvbl90b29scy8wNTAtbWFrZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTI0ZTM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2NvbXBhbmlvbl90b29scy8wNTAtbWFrZS5zaApAQCAtMCwwICsxLDI3IEBACisjIEJ1aWxkIHNjcmlwdCBmb3IgbWFrZQorCitDVF9NQUtFX1ZFUlNJT049My44MQorCitkb19jb21wYW5pb25fdG9vbHNfbWFrZV9nZXQoKSB7CisgICAgQ1RfR2V0RmlsZSAibWFrZS0ke0NUX01BS0VfVkVSU0lPTn0iIFwKKyAgICAgICAgICAgICAgIHtodHRwLGZ0cH06Ly9mdHAuZ251Lm9yZy9nbnUvbWFrZQorfQorCitkb19jb21wYW5pb25fdG9vbHNfbWFrZV9leHRyYWN0KCkgeworICAgIENUX0V4dHJhY3QgIm1ha2UtJHtDVF9NQUtFX1ZFUlNJT059IgorICAgIENUX0RvRXhlY0xvZyBBTEwgY2htb2QgLVIgdSt3ICIke0NUX1NSQ19ESVJ9L21ha2UtJHtDVF9NQUtFX1ZFUlNJT059IgorICAgIENUX1BhdGNoICJtYWtlIiAiJHtDVF9NQUtFX1ZFUlNJT059IgorfQorCitkb19jb21wYW5pb25fdG9vbHNfbWFrZV9idWlsZCgpIHsKKyAgICBDVF9Eb1N0ZXAgRVhUUkEgIkluc3RhbGxpbmcgbWFrZSIKKyAgICBta2RpciAtcCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLW1ha2UiCisgICAgQ1RfUHVzaGQgIiR7Q1RfQlVJTERfRElSfS9idWlsZC1tYWtlIgorCisgICAgQ1RfRG9FeGVjTG9nIENGRyAiJHtDVF9TUkNfRElSfS9tYWtlLSR7Q1RfTUFLRV9WRVJTSU9OfS9jb25maWd1cmUiIFwKKyAgICAgICAgICAgICAgICAgICAgIC0tcHJlZml4PSIke0NUX0JVSUxEVE9PTFNfUFJFRklYX0RJUn0iCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlIGluc3RhbGwKKyAgICBDVF9Qb3BkCisgICAgQ1RfRW5kU3RlcAorfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2NvbXBhbmlvbl90b29scy8xMDAtbTQuc2ggYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvY29tcGFuaW9uX3Rvb2xzLzEwMC1tNC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjRlMTlmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2NvbXBhbmlvbl90b29scy8xMDAtbTQuc2gKQEAgLTAsMCArMSwyNyBAQAorIyBCdWlsZCBzY3JpcHQgZm9yIG00CisKK0NUX000X1ZFUlNJT049MS40LjEzCisKK2RvX2NvbXBhbmlvbl90b29sc19tNF9nZXQoKSB7CisgICAgQ1RfR2V0RmlsZSAibTQtJHtDVF9NNF9WRVJTSU9OfSIgXAorICAgICAgICAgICAgICAge2Z0cCxodHRwfTovL2Z0cC5nbnUub3JnL2dudS9tNAorfQorCitkb19jb21wYW5pb25fdG9vbHNfbTRfZXh0cmFjdCgpIHsKKyAgICBDVF9FeHRyYWN0ICJtNC0ke0NUX000X1ZFUlNJT059IgorICAgIENUX1BhdGNoICJtNCIgIiR7Q1RfTTRfVkVSU0lPTn0iCit9CisKK2RvX2NvbXBhbmlvbl90b29sc19tNF9idWlsZCgpIHsKKyAgICBDVF9Eb1N0ZXAgRVhUUkEgIkluc3RhbGxpbmcgbTQiCisgICAgbWtkaXIgLXAgIiR7Q1RfQlVJTERfRElSfS9idWlsZC1tNCIKKyAgICBDVF9QdXNoZCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLW00IgorICAgIAorICAgIENUX0RvRXhlY0xvZyBDRkcgXAorICAgICIke0NUX1NSQ19ESVJ9L200LSR7Q1RfTTRfVkVSU0lPTn0vY29uZmlndXJlIiBcCisgICAgICAgIC0tcHJlZml4PSIke0NUX0JVSUxEVE9PTFNfUFJFRklYX0RJUn0iCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlIGluc3RhbGwKKyAgICBDVF9Qb3BkCisgICAgQ1RfRW5kU3RlcAorfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2NvbXBhbmlvbl90b29scy8yMDAtYXV0b2NvbmYuc2ggYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvY29tcGFuaW9uX3Rvb2xzLzIwMC1hdXRvY29uZi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDMzMTdmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2NvbXBhbmlvbl90b29scy8yMDAtYXV0b2NvbmYuc2gKQEAgLTAsMCArMSwzMyBAQAorIyBCdWlsZCBzY3JpcHQgZm9yIGF1dG9jb25mCisKK0NUX0FVVE9DT05GX1ZFUlNJT049Mi42NQorCitkb19jb21wYW5pb25fdG9vbHNfYXV0b2NvbmZfZ2V0KCkgeworICAgIENUX0dldEZpbGUgImF1dG9jb25mLSR7Q1RfQVVUT0NPTkZfVkVSU0lPTn0iIFwKKyAgICAgICAgICAgICAgIHtmdHAsaHR0cH06Ly9mdHAuZ251Lm9yZy9nbnUvYXV0b2NvbmYKK30KKworZG9fY29tcGFuaW9uX3Rvb2xzX2F1dG9jb25mX2V4dHJhY3QoKSB7CisgICAgQ1RfRXh0cmFjdCAiYXV0b2NvbmYtJHtDVF9BVVRPQ09ORl9WRVJTSU9OfSIKKyAgICBDVF9Eb0V4ZWNMb2cgQUxMIGNobW9kIC1SIHUrdyAiJHtDVF9TUkNfRElSfS9hdXRvY29uZi0ke0NUX0FVVE9DT05GX1ZFUlNJT059IgorICAgIENUX1BhdGNoICJhdXRvY29uZiIgIiR7Q1RfQVVUT0NPTkZfVkVSU0lPTn0iCit9CisKK2RvX2NvbXBhbmlvbl90b29sc19hdXRvY29uZl9idWlsZCgpIHsKKyAgICBDVF9Eb1N0ZXAgRVhUUkEgIkluc3RhbGxpbmcgYXV0b2NvbmYiCisgICAgbWtkaXIgLXAgIiR7Q1RfQlVJTERfRElSfS9idWlsZC1hdXRvY29uZiIKKyAgICBDVF9QdXNoZCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLWF1dG9jb25mIgorICAgIAorICAgICMgRW5zdXJlIGNvbmZpZ3VyZSBnZXRzIHJ1biB1c2luZyB0aGUgQ09ORklHX1NIRUxMIGFzIGNvbmZpZ3VyZSBzZWVtcyB0bworICAgICMgaGF2ZSB0cm91YmxlIHdoZW4gQ09ORklHX1NIRUxMIGlzIHNldCBhbmQgL2Jpbi9zaCBpc24ndCBiYXNoCisgICAgIyBGb3IgcmVmZXJlbmNlIHNlZToKKyAgICAjIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvY29uZi9tYW51YWwvYXV0b2NvbmYuaHRtbCNDT05GSUdfMDA1ZlNIRUxMCisgICAgCisgICAgQ1RfRG9FeGVjTG9nIENGRyAke0NPTkZJR19TSEVMTH0gXAorICAgICIke0NUX1NSQ19ESVJ9L2F1dG9jb25mLSR7Q1RfQVVUT0NPTkZfVkVSU0lPTn0vY29uZmlndXJlIiBcCisgICAgICAgIC0tcHJlZml4PSIke0NUX0JVSUxEVE9PTFNfUFJFRklYX0RJUn0iCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlIGluc3RhbGwKKyAgICBDVF9Qb3BkCisgICAgQ1RfRW5kU3RlcAorfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2NvbXBhbmlvbl90b29scy8zMDAtYXV0b21ha2Uuc2ggYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvY29tcGFuaW9uX3Rvb2xzLzMwMC1hdXRvbWFrZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjliYjgzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2NvbXBhbmlvbl90b29scy8zMDAtYXV0b21ha2Uuc2gKQEAgLTAsMCArMSwyOCBAQAorIyBCdWlsZCBzY3JpcHQgZm9yIGF1dG9tYWtlCisKK0NUX0FVVE9NQUtFX1ZFUlNJT049MS4xMS4xCisKK2RvX2NvbXBhbmlvbl90b29sc19hdXRvbWFrZV9nZXQoKSB7CisgICAgQ1RfR2V0RmlsZSAiYXV0b21ha2UtJHtDVF9BVVRPTUFLRV9WRVJTSU9OfSIgXAorICAgICAgICAgICAgICAge2Z0cCxodHRwfTovL2Z0cC5nbnUub3JnL2dudS9hdXRvbWFrZQorfQorCitkb19jb21wYW5pb25fdG9vbHNfYXV0b21ha2VfZXh0cmFjdCgpIHsKKyAgICBDVF9FeHRyYWN0ICJhdXRvbWFrZS0ke0NUX0FVVE9NQUtFX1ZFUlNJT059IgorICAgIENUX0RvRXhlY0xvZyBBTEwgY2htb2QgLVIgdSt3ICIke0NUX1NSQ19ESVJ9L2F1dG9tYWtlLSR7Q1RfQVVUT01BS0VfVkVSU0lPTn0iCisgICAgQ1RfUGF0Y2ggImF1dG9tYWtlIiAiJHtDVF9BVVRPTUFLRV9WRVJTSU9OfSIKK30KKworZG9fY29tcGFuaW9uX3Rvb2xzX2F1dG9tYWtlX2J1aWxkKCkgeworICAgIENUX0RvU3RlcCBFWFRSQSAiSW5zdGFsbGluZyBhdXRvbWFrZSIKKyAgICBta2RpciAtcCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLWF1dG9tYWtlIgorICAgIENUX1B1c2hkICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtYXV0b21ha2UiCisgICAgCisgICAgQ1RfRG9FeGVjTG9nIENGRyBcCisgICAgIiR7Q1RfU1JDX0RJUn0vYXV0b21ha2UtJHtDVF9BVVRPTUFLRV9WRVJTSU9OfS9jb25maWd1cmUiIFwKKyAgICAgICAgLS1wcmVmaXg9IiR7Q1RfQlVJTERUT09MU19QUkVGSVhfRElSfSIKKyAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1ha2UKKyAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1ha2UgaW5zdGFsbAorICAgIENUX1BvcGQKKyAgICBDVF9FbmRTdGVwCit9CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvY29tcGFuaW9uX3Rvb2xzLzQwMC1saWJ0b29sLnNoIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2NvbXBhbmlvbl90b29scy80MDAtbGlidG9vbC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2ExZTkyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2NvbXBhbmlvbl90b29scy80MDAtbGlidG9vbC5zaApAQCAtMCwwICsxLDI4IEBACisjIEJ1aWxkIHNjcmlwdCBmb3IgbGlidG9vbAorCitDVF9MSUJUT09MX1ZFUlNJT049Mi4yLjZiCisKK2RvX2NvbXBhbmlvbl90b29sc19saWJ0b29sX2dldCgpIHsKKyAgICBDVF9HZXRGaWxlICJsaWJ0b29sLSR7Q1RfTElCVE9PTF9WRVJTSU9OfSIgXAorICAgICAgICAgICAgICAge2Z0cCxodHRwfTovL2Z0cC5nbnUub3JnL2dudS9saWJ0b29sCit9CisKK2RvX2NvbXBhbmlvbl90b29sc19saWJ0b29sX2V4dHJhY3QoKSB7CisgICAgQ1RfRXh0cmFjdCAibGlidG9vbC0ke0NUX0xJQlRPT0xfVkVSU0lPTn0iCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBjaG1vZCAtUiB1K3cgIiR7Q1RfU1JDX0RJUn0vbGlidG9vbC0ke0NUX0xJQlRPT0xfVkVSU0lPTn0iCisgICAgQ1RfUGF0Y2ggImxpYnRvb2wiICIke0NUX0xJQlRPT0xfVkVSU0lPTn0iCit9CisKK2RvX2NvbXBhbmlvbl90b29sc19saWJ0b29sX2J1aWxkKCkgeworICAgIENUX0RvU3RlcCBFWFRSQSAiSW5zdGFsbGluZyBsaWJ0b29sIgorICAgIG1rZGlyIC1wICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtbGlidG9vbCIKKyAgICBDVF9QdXNoZCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLWxpYnRvb2wiCisgICAgCisgICAgQ1RfRG9FeGVjTG9nIENGRyBcCisgICAgIiR7Q1RfU1JDX0RJUn0vbGlidG9vbC0ke0NUX0xJQlRPT0xfVkVSU0lPTn0vY29uZmlndXJlIiBcCisgICAgICAgIC0tcHJlZml4PSIke0NUX0JVSUxEVE9PTFNfUFJFRklYX0RJUn0iCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlIGluc3RhbGwKKyAgICBDVF9Qb3BkCisgICAgQ1RfRW5kU3RlcAorfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2RlYnVnLnNoIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2RlYnVnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwN2IyOTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvZGVidWcuc2gKQEAgLTAsMCArMSwzOCBAQAorIyBXcmFwcGVyIHRvIGJ1aWxkIHRoZSBkZWJ1ZyBmYWNpbGl0aWVzCisKKyMgTGlzdCBhbGwgZGVidWcgZmFjaWxpdGllcywgYW5kIHBhcnNlIHRoZWlyIHNjcmlwdHMKK0NUX0RFQlVHX0ZBQ0lMSVRZX0xJU1Q9Citmb3IgZiBpbiAiJHtDVF9MSUJfRElSfS9zY3JpcHRzL2J1aWxkL2RlYnVnLyIqLnNoOyBkbworICAgIF9mPSIkKGJhc2VuYW1lICIke2Z9IiAuc2gpIgorICAgIF9mPSIke19mIz8/Py19IgorICAgIF9fZj0iQ1RfREVCVUdfJHtfZn0iCisgICAgaWYgWyAiJHshX19mfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBDVF9Eb0xvZyBERUJVRyAiRW5hYmxpbmcgZGVidWcgJyR7X2Z9JyIKKyAgICAgICAgLiAiJHtmfSIKKyAgICAgICAgQ1RfREVCVUdfRkFDSUxJVFlfTElTVD0iJHtDVF9ERUJVR19GQUNJTElUWV9MSVNUfSAke19mfSIKKyAgICBlbHNlCisgICAgICAgIENUX0RvTG9nIERFQlVHICJEaXNhYmxpbmcgZGVidWcgJyR7X2Z9JyIKKyAgICBmaQorZG9uZQorCisjIERvd25sb2FkIHRoZSBkZWJ1ZyBmYWNpbGl0aWVzCitkb19kZWJ1Z19nZXQoKSB7CisgICAgZm9yIGYgaW4gJHtDVF9ERUJVR19GQUNJTElUWV9MSVNUfTsgZG8KKyAgICAgICAgZG9fZGVidWdfJHtmfV9nZXQKKyAgICBkb25lCit9CisKKyMgRXh0cmFjdCBhbmQgcGF0Y2ggdGhlIGRlYnVnIGZhY2lsaXRpZXMKK2RvX2RlYnVnX2V4dHJhY3QoKSB7CisgICAgZm9yIGYgaW4gJHtDVF9ERUJVR19GQUNJTElUWV9MSVNUfTsgZG8KKyAgICAgICAgZG9fZGVidWdfJHtmfV9leHRyYWN0CisgICAgZG9uZQorfQorCisjIEJ1aWxkIHRoZSBkZWJ1ZyBmYWNpbGl0aWVzCitkb19kZWJ1ZygpIHsKKyAgICBmb3IgZiBpbiAke0NUX0RFQlVHX0ZBQ0lMSVRZX0xJU1R9OyBkbworICAgICAgICBkb19kZWJ1Z18ke2Z9X2J1aWxkCisgICAgZG9uZQorfQorCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvZGVidWcvMDAwLXRlbXBsYXRlLnNoIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2RlYnVnLzAwMC10ZW1wbGF0ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2QyY2FlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2RlYnVnLzAwMC10ZW1wbGF0ZS5zaApAQCAtMCwwICsxLDM0IEBACisjIFRlbXBsYXRlIGZpbGUgZm9yIGEgZGVidWcgdXRpbGl0eQorCisjIFB1dCB5b3VyIGRvd25sb2FkIGNvZGUgaGVyZQorZG9fZGVidWdfZm9vYmFyX2dldCgpIHsKKyAgICAjIEZvciBleGFtcGxlOgorICAgICMgQ1RfR2V0RmlsZSAiZm9vYmFyLSR7Q1RfRk9PQkFSX1ZFUlNJT059IiBodHRwOi8vZm9vYmFyLmNvbS9yZWxlYXNlcy8KKyAgICA6Cit9CisKKyMgUHV0IHlvdXIgZXh0cmFjdCBjb2RlIGhlcmUKK2RvX2RlYnVnX2Zvb2Jhcl9leHRyYWN0KCkgeworICAgICMgRm9yIGV4YW1wbGU6CisgICAgIyBDVF9FeHRyYWN0ICJmb29iYXItJHtDVF9GT09CQVJfVkVSU0lPTn0iCisgICAgIyBDVF9QYXRjaCAiZm9vYmFyIiAiJHtDVF9GT09CQVJfVkVSU0lPTn0iCisgICAgOgorfQorCisjIFB1dCB5b3VyIGJ1aWxkIGNvZGUgaGVyZQorZG9fZGVidWdfZm9vYmFyX2J1aWxkKCkgeworICAgICMgRm9yIGV4YW1wbGU6CisgICAgIyBta2RpciAtcCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLWZvb2JhciIKKyAgICAjIENUX1B1c2hkICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtZm9vYmFyIgorICAgICMgQ1RfRG9FeGVjTG9nIENGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIyAiJHtDVF9TUkNfRElSfS9mb29iYXItJHtDVF9GT09CQVJfVkVSU0lPTn0vY29uZmlndXJlIiAgIFwKKyAgICAjICAgICAtLWJ1aWxkPSR7Q1RfQlVJTER9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICMgICAgIC0taG9zdD0ke0NUX1RBUkdFVH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIyAgICAgLS1wcmVmaXg9L3VzciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAjICAgICAtLWZvb2Jhci1vcHRpb25zCisgICAgIyBDVF9Eb0V4ZWNMb2cgQUxMIG1ha2UKKyAgICAjIENUX0RvRXhlY0xvZyBBTEwgbWFrZSBERVNURElSPSIke0NUX1NZU1JPT1RfRElSfSIgaW5zdGFsbAorICAgICMgQ1RfUG9wZAorICAgIDoKK30KKwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2RlYnVnLzEwMC1kbWFsbG9jLnNoIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2RlYnVnLzEwMC1kbWFsbG9jLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMmI0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvZGVidWcvMTAwLWRtYWxsb2Muc2gKQEAgLTAsMCArMSw1NCBAQAorIyBCdWlsZCBzY3JpcHQgZm9yIHRoZSBkbWFsbG9jIGRlYnVnIGxpYnJhcnkgZmFjaWxpdHkKKworZG9fZGVidWdfZG1hbGxvY19nZXQoKSB7CisgICAgQ1RfR2V0RmlsZSAiZG1hbGxvYy0ke0NUX0RNQUxMT0NfVkVSU0lPTn0iIGh0dHA6Ly9kbWFsbG9jLmNvbS9yZWxlYXNlcy8KK30KKworZG9fZGVidWdfZG1hbGxvY19leHRyYWN0KCkgeworICAgIENUX0V4dHJhY3QgImRtYWxsb2MtJHtDVF9ETUFMTE9DX1ZFUlNJT059IgorICAgIENUX1BhdGNoICJkbWFsbG9jIiAiJHtDVF9ETUFMTE9DX1ZFUlNJT059IgorfQorCitkb19kZWJ1Z19kbWFsbG9jX2J1aWxkKCkgeworICAgIGxvY2FsIC1hIGV4dHJhX2NvbmZpZworCisgICAgQ1RfRG9TdGVwIElORk8gIkluc3RhbGxpbmcgZG1hbGxvYyIKKyAgICBDVF9Eb0xvZyBFWFRSQSAiQ29uZmlndXJpbmcgZG1hbGxvYyIKKworICAgIG1rZGlyIC1wICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtZG1hbGxvYyIKKyAgICBjZCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLWRtYWxsb2MiCisKKyAgICBjYXNlICIke0NUX0NDX0xBTkdfQ1hYfSIgaW4KKyAgICAgICAgeSkgIGV4dHJhX2NvbmZpZys9KCItLWVuYWJsZS1jeHgiKTs7CisgICAgICAgICopICBleHRyYV9jb25maWcrPSgiLS1kaXNhYmxlLWN4eCIpOzsKKyAgICBlc2FjCisgICAgY2FzZSAiJHtDVF9USFJFQURTfSIgaW4KKyAgICAgICAgbm9uZSkgICBleHRyYV9jb25maWcrPSgiLS1kaXNhYmxlLXRocmVhZHMiKTs7CisgICAgICAgICopICAgICAgZXh0cmFfY29uZmlnKz0oIi0tZW5hYmxlLXRocmVhZHMiKTs7CisgICAgZXNhYworICAgIGNhc2UgIiR7Q1RfU0hBUkVEX0xJQlN9IiBpbgorICAgICAgICB5KSAgZXh0cmFfY29uZmlnKz0oIi0tZW5hYmxlLXNobGliIik7OworICAgICAgICAqKSAgZXh0cmFfY29uZmlnKz0oIi0tZGlzYWJsZS1zaGxpYiIpOzsKKyAgICBlc2FjCisKKyAgICBDVF9Eb0xvZyBERUJVRyAiRXh0cmEgY29uZmlnIHBhc3NlZDogJyR7ZXh0cmFfY29uZmlnWypdfSciCisKKyAgICBDVF9Eb0V4ZWNMb2cgQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTEQ9IiR7Q1RfVEFSR0VUfS1sZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFSPSIke0NUX1RBUkdFVH0tYXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDRkxBR1M9LWZQSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiR7Q1RfU1JDX0RJUn0vZG1hbGxvYy0ke0NUX0RNQUxMT0NfVkVSU0lPTn0vY29uZmlndXJlIiAgICAgXAorICAgICAgICAtLXByZWZpeD0vdXNyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1idWlsZD0iJHtDVF9CVUlMRH0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC0taG9zdD0iJHtDVF9UQVJHRVR9IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAiJHtleHRyYV9jb25maWdbQF19IgorCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkJ1aWxkaW5nIGRtYWxsb2MiCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlCisKKyAgICBDVF9Eb0xvZyBFWFRSQSAiSW5zdGFsbGluZyBkbWFsbG9jIgorICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSBERVNURElSPSIke0NUX1NZU1JPT1RfRElSfSIgaW5zdGFsbGluY3MgaW5zdGFsbGxpYgorICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSBERVNURElSPSIke0NUX0RFQlVHUk9PVF9ESVJ9IiBpbnN0YWxsdXRpbAorCisgICAgQ1RfRW5kU3RlcAorfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2RlYnVnLzIwMC1kdW1hLnNoIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2RlYnVnLzIwMC1kdW1hLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NmMwZjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvZGVidWcvMjAwLWR1bWEuc2gKQEAgLTAsMCArMSw2MSBAQAorIyBCdWlsZCBzY3JpcHQgZm9yIEQuVS5NLkEuCisKK2RvX2RlYnVnX2R1bWFfZ2V0KCkgeworICAgICMgRG93bmxvYWRpbmcgYW4gbm9uLWV4aXN0aW5nIGZpbGUgZnJvbSBzb3VyY2Vmb3JnZSB3aWxsIGdpdmUgeW91IGFuCisgICAgIyBIVE1MIGZpbGUgY29udGFpbmluZyBhbiBlcnJvciBtZXNzYWdlLCBpbnN0ZWFkIG9mIHJldHVybmluZyBhIDQwNC4KKyAgICAjIFNpZ2guLi4KKyAgICBDVF9HZXRGaWxlICJkdW1hXyR7Q1RfRFVNQV9WRVJTSU9OfSIgLnRhci5neiBodHRwOi8va2VudC5kbC5zb3VyY2Vmb3JnZS5uZXQvc291cmNlZm9yZ2UvZHVtYS8KKyAgICAjIERvd25sb2FkaW5nIGZyb20gc291cmNlZm9yZ2UgbWF5IGxlYXZlIGdhcmJhZ2UsIGNsZWFudXAKKyAgICBDVF9Eb0V4ZWNMb2cgQUxMIHJtIC1mICIke0NUX1RBUkJBTExTX0RJUn0vc2hvd2ZpbGVzLnBocCIqCit9CisKK2RvX2RlYnVnX2R1bWFfZXh0cmFjdCgpIHsKKyAgICBDVF9FeHRyYWN0ICJkdW1hXyR7Q1RfRFVNQV9WRVJTSU9OfSIKKyAgICBDVF9QdXNoZCAiJHtDVF9TUkNfRElSfS9kdW1hXyR7Q1RfRFVNQV9WRVJTSU9OfSIKKyAgICBDVF9QYXRjaCBub2NoZGlyICJkdW1hIiAiJHtDVF9EVU1BX1ZFUlNJT059IgorICAgIENUX1BvcGQKK30KKworZG9fZGVidWdfZHVtYV9idWlsZCgpIHsKKyAgICBDVF9Eb1N0ZXAgSU5GTyAiSW5zdGFsbGluZyBELlUuTS5BLiIKKyAgICBDVF9Eb0xvZyBFWFRSQSAiQ29weWluZyBzb3VyY2VzIgorICAgIGNwIC1hICIke0NUX1NSQ19ESVJ9L2R1bWFfJHtDVF9EVU1BX1ZFUlNJT059IiAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLWR1bWEiCisgICAgQ1RfUHVzaGQgIiR7Q1RfQlVJTERfRElSfS9idWlsZC1kdW1hIgorCisgICAgRFVNQV9DUFA9CisgICAgWyAiJHtDVF9DQ19MQU5HX0NYWH0iID0gInkiIF0gJiYgRFVNQV9DUFA9MQorCisgICAgIyBUaGUgc2hhcmVkIGxpYnJhcnkgbmVlZHMgc29tZSBsb3ZlOiBzb21lIHZlcnNpb24gaGF2ZSBsaWJkdW1hLnNvLjAuMCwKKyAgICAjIHdoaWxlIG90aGVycyBoYXZlIGxpYmR1bWEuc28uMC4wLjAKKyAgICBkdW1hX3NvPSQobWFrZSAtbiAtcCAyPiYxIHxncmVwIC1FICdebGliZHVtYS5zb1teOl0qOicgfGhlYWQgLW4gMSB8Y3V0IC1kIDogLWYgMSkKKworICAgIGxpYnM9CisgICAgWyAiJHtDVF9EVU1BX0F9IiA9ICJ5IiBdICYmIGxpYnM9IiR7bGlic30gbGliZHVtYS5hIgorICAgIFsgIiR7Q1RfRFVNQV9TT30iID0gInkiIF0gJiYgbGlicz0iJHtsaWJzfSAke2R1bWFfc299IgorICAgIGxpYnM9IiR7bGlicyMgfSIKKyAgICBDVF9Eb0xvZyBFWFRSQSAiQnVpbGRpbmcgbGlicmFyaWVzICcke2xpYnN9JyIKKyAgICBDVF9Eb0V4ZWNMb2cgQUxMICAgICAgICAgICAgICAgICAgICBcCisgICAgbWFrZSBIT1NUQ0M9IiR7Q1RfQlVJTER9LWdjYyIgICAgICAgXAorICAgICAgICAgQ0M9IiR7Q1RfVEFSR0VUfS1nY2MiICAgICAgICAgIFwKKyAgICAgICAgIENYWD0iJHtDVF9UQVJHRVR9LWdjYyIgICAgICAgICBcCisgICAgICAgICBSQU5MSUI9IiR7Q1RfVEFSR0VUfS1yYW5saWIiICAgXAorICAgICAgICAgRFVNQV9DUFA9IiR7RFVNQV9DUFB9IiAgICAgICAgIFwKKyAgICAgICAgICR7bGlic30KKyAgICBDVF9Eb0xvZyBFWFRSQSAiSW5zdGFsbGluZyBsaWJyYXJpZXMgJyR7bGlic30nIgorICAgIENUX0RvRXhlY0xvZyBBTEwgaW5zdGFsbCAtbSA2NDQgJHtsaWJzfSAiJHtDVF9TWVNST09UX0RJUn0vdXNyL2xpYiIKKyAgICBpZiBbICIke0NUX0RVTUFfU099IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIENUX0RvTG9nIEVYVFJBICJJbnN0YWxsaW5nIHNoYXJlZCBsaWJyYXJ5IGxpbmsiCisgICAgICAgIGxuIC12c2YgJHtkdW1hX3NvfSAiJHtDVF9TWVNST09UX0RJUn0vdXNyL2xpYi9saWJkdW1hLnNvIiAgIDI+JjEgfENUX0RvTG9nIEFMTAorICAgICAgICBDVF9Eb0xvZyBFWFRSQSAiSW5zdGFsbGluZyB3cmFwcGVyIHNjcmlwdCIKKyAgICAgICAgbWtkaXIgLXAgIiR7Q1RfREVCVUdST09UX0RJUn0vdXNyL2JpbiIKKyAgICAgICAgIyBJbnN0YWxsIGEgc2ltcGxlciwgc21hbGxlciwgc2FmZXIgd3JhcHBlciB0aGFuIHRoZSBvbmUgcHJvdmlkZWQgYnkgRC5VLk0uQS4KKyAgICAgICAgc2VkIC1yIC1lICdzOl5MSUJEVU1BX1NPPS4qOkxJQkRVTUFfU089L3Vzci9saWIvJyIke2R1bWFfc299Iic6OycgICBcCisgICAgICAgICAgICAiJHtDVF9MSUJfRElSfS9zY3JpcHRzL2J1aWxkL2RlYnVnL2R1bWEuaW4iICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgPiIke0NUX0RFQlVHUk9PVF9ESVJ9L3Vzci9iaW4vZHVtYSIKKyAgICAgICAgY2htb2QgNzU1ICIke0NUX0RFQlVHUk9PVF9ESVJ9L3Vzci9iaW4vZHVtYSIKKyAgICBmaQorCisgICAgQ1RfUG9wZAorICAgIENUX0VuZFN0ZXAKK30KKwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2RlYnVnLzMwMC1nZGIuc2ggYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvZGVidWcvMzAwLWdkYi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjAxMWViCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2RlYnVnLzMwMC1nZGIuc2gKQEAgLTAsMCArMSwzODkgQEAKKyMgQnVpbGQgc2NyaXB0IGZvciB0aGUgZ2RiIGRlYnVnIGZhY2lsaXR5CisKKyMgVGhlIHZlcnNpb24gb2YgbmN1cnNlcyB0byB1c2UuIFllcywgaXQncyBoYXJkLWNvZGVkLgorIyBJdCdzIHVzZWQgb25seSBpbnRlcm5hbGx5IGJ5IGNyb3NzdG9vbC1ORywgYW5kIGlzCisjIG5vdCBleHBvc2VkIG91dHNpZGUsIHNvIHdlIGRvbid0IGNhcmUgYWJvdXQgcHJvdmlkaW5nCisjIGNvbmZpZyBvcHRpb25zIGZvciB0aGlzLgorQ1RfREVCVUdfR0RCX05DVVJTRVNfVkVSU0lPTj0iNS45IgorCisjIERpdHRvIGZvciB0aGUgZXhwYXQgbGlicmFyeQorQ1RfREVCVUdfR0RCX0VYUEFUX1ZFUlNJT049IjIuMC4xIgorCitkb19kZWJ1Z19nZGJfcGFydHMoKSB7CisgICAgZG9fZ2RiPQorICAgIGRvX25jdXJzZXM9CisgICAgZG9fZXhwYXQ9CisKKyAgICBpZiBbICIke0NUX0dEQl9DUk9TU30iID0geSBdOyB0aGVuCisgICAgICAgIGRvX2dkYj15CisgICAgZmkKKworICAgIGlmIFsgIiR7Q1RfR0RCX0dEQlNFUlZFUn0iID0gInkiIF07IHRoZW4KKyAgICAgICAgZG9fZ2RiPXkKKyAgICBmaQorCisgICAgaWYgWyAiJHtDVF9HREJfTkFUSVZFfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBkb19nZGI9eQorICAgICAgICAjIEdEQiBvbiBNaW5ndyBkZXBlbmRzIG9uIFBEY3Vyc2VzLCBub3QgbmN1cnNlcworICAgICAgICBpZiBbICIke0NUX01JTkdXMzJ9IiAhPSAieSIgXTsgdGhlbgorICAgICAgICAgICAgZG9fbmN1cnNlcz15CisgICAgICAgIGZpCisgICAgICAgIGRvX2V4cGF0PXkKKyAgICBmaQorfQorCitkb19kZWJ1Z19nZGJfZ2V0KCkgeworICAgIGxvY2FsIGxpbmFyb192ZXJzaW9uCisgICAgbG9jYWwgbGluYXJvX3NlcmllcworICAgIGxvY2FsIGxpbmFyb19iYXNlX3VybD0iaHR0cDovL2xhdW5jaHBhZC5uZXQvZ2RiLWxpbmFybyIKKworICAgICMgQWNjb3VudCBmb3IgdGhlIExpbmFybyB2ZXJzaW9uaW5nCisgICAgbGluYXJvX3ZlcnNpb249IiQoIGVjaG8gIiR7Q1RfR0RCX1ZFUlNJT059IiAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgfHNlZCAtciAtZSAncy9ebGluYXJvLS8vOycgICBcCisgICAgICAgICAgICAgICAgICAgICApIgorICAgIGxpbmFyb19zZXJpZXM9IiQoIGVjaG8gIiR7bGluYXJvX3ZlcnNpb259IiAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICB8c2VkIC1yIC1lICdzLy0uKi8vOycgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICkiCisKKyAgICBkb19kZWJ1Z19nZGJfcGFydHMKKworICAgIGlmIFsgIiR7ZG9fZ2RifSIgPSAieSIgXTsgdGhlbgorICAgICAgICBDVF9HZXRGaWxlICJnZGItJHtDVF9HREJfVkVSU0lPTn0iICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAge2Z0cCxodHRwfTovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvZ2RiICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICBmdHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vcHViL2dkYi97LG9sZC19cmVsZWFzZXMgXAorICAgICAgICAgICAgICAgICAgICIke2xpbmFyb19iYXNlX3VybH0vJHtsaW5hcm9fc2VyaWVzfS8ke2xpbmFyb192ZXJzaW9ufS8rZG93bmxvYWQiCisgICAgZmkKKworICAgIGlmIFsgIiR7ZG9fbmN1cnNlc30iID0gInkiIF07IHRoZW4KKyAgICAgICAgQ1RfR2V0RmlsZSAibmN1cnNlcy0ke0NUX0RFQlVHX0dEQl9OQ1VSU0VTX1ZFUlNJT059IiAudGFyLmd6ICBcCisgICAgICAgICAgICAgICAgICAge2Z0cCxodHRwfTovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvbmN1cnNlcyBcCisgICAgICAgICAgICAgICAgICAgZnRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvbmN1cnNlcworICAgIGZpCisKKyAgICBpZiBbICIke2RvX2V4cGF0fSIgPSAieSIgXTsgdGhlbgorICAgICAgICBDVF9HZXRGaWxlICJleHBhdC0ke0NUX0RFQlVHX0dEQl9FWFBBVF9WRVJTSU9OfSIgLnRhci5neiAgICBcCisgICAgICAgICAgICAgICAgICAgaHR0cDovL2tlbnQuZGwuc291cmNlZm9yZ2UubmV0L3Byb2plY3QvZXhwYXQvZXhwYXQvJHtDVF9ERUJVR19HREJfRVhQQVRfVkVSU0lPTn0KKyAgICBmaQorfQorCitkb19kZWJ1Z19nZGJfZXh0cmFjdCgpIHsKKyAgICBkb19kZWJ1Z19nZGJfcGFydHMKKworICAgIGlmIFsgIiR7ZG9fZ2RifSIgPSAieSIgXTsgdGhlbgorICAgICAgICBDVF9FeHRyYWN0ICJnZGItJHtDVF9HREJfVkVSU0lPTn0iCisgICAgICAgIENUX1BhdGNoICJnZGIiICIke0NUX0dEQl9WRVJTSU9OfSIKKyAgICBmaQorCisgICAgaWYgWyAiJHtkb19uY3Vyc2VzfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBDVF9FeHRyYWN0ICJuY3Vyc2VzLSR7Q1RfREVCVUdfR0RCX05DVVJTRVNfVkVSU0lPTn0iCisgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgY2htb2QgLVIgdSt3ICIke0NUX1NSQ19ESVJ9L25jdXJzZXMtJHtDVF9ERUJVR19HREJfTkNVUlNFU19WRVJTSU9OfSIKKyAgICAgICAgQ1RfUGF0Y2ggIm5jdXJzZXMiICIke0NUX0RFQlVHX0dEQl9OQ1VSU0VTX1ZFUlNJT059IgorICAgIGZpCisKKyAgICBpZiBbICIke2RvX2V4cGF0fSIgPSAieSIgXTsgdGhlbgorICAgICAgICBDVF9FeHRyYWN0ICJleHBhdC0ke0NUX0RFQlVHX0dEQl9FWFBBVF9WRVJTSU9OfSIKKyAgICAgICAgQ1RfUGF0Y2ggImV4cGF0IiAiJHtDVF9ERUJVR19HREJfRVhQQVRfVkVSU0lPTn0iCisgICAgZmkKK30KKworZG9fZGVidWdfZ2RiX2J1aWxkKCkgeworICAgIGxvY2FsIC1hIGV4dHJhX2NvbmZpZworCisgICAgZG9fZGVidWdfZ2RiX3BhcnRzCisKKyAgICBnZGJfc3JjX2Rpcj0iJHtDVF9TUkNfRElSfS9nZGItJHtDVF9HREJfVkVSU0lPTn0iCisKKyAgICAjIFZlcnNpb24gNi4zIGFuZCBiZWxvdyBiZWhhdmUgYmFkbHkgd2l0aCBnZGJtaQorICAgIGNhc2UgIiR7Q1RfR0RCX1ZFUlNJT059IiBpbgorICAgICAgICA2LjIqfDYuMykgICBleHRyYV9jb25maWcrPSgiLS1kaXNhYmxlLWdkYm1pIik7OworICAgIGVzYWMKKworICAgIGlmIFsgIiR7Q1RfR0RCX0hBU19QS0dWRVJTSU9OX0JVR1VSTH0iID0gInkiIF07IHRoZW4KKyAgICAgICAgZXh0cmFfY29uZmlnKz0oIi0td2l0aC1wa2d2ZXJzaW9uPSR7Q1RfUEtHVkVSU0lPTn0iKQorICAgICAgICBbIC1uICIke0NUX1RPT0xDSEFJTl9CVUdVUkx9IiBdICYmIGV4dHJhX2NvbmZpZys9KCItLXdpdGgtYnVndXJsPSR7Q1RfVE9PTENIQUlOX0JVR1VSTH0iKQorICAgIGZpCisKKyAgICBpZiBbICIke0NUX0dEQl9DUk9TU30iID0gInkiIF07IHRoZW4KKyAgICAgICAgbG9jYWwgLWEgY3Jvc3NfZXh0cmFfY29uZmlnCisgICAgICAgIGxvY2FsIGdjY192ZXJzaW9uCisKKyAgICAgICAgQ1RfRG9TdGVwIElORk8gIkluc3RhbGxpbmcgY3Jvc3MtZ2RiIgorICAgICAgICBDVF9Eb0xvZyBFWFRSQSAiQ29uZmlndXJpbmcgY3Jvc3MtZ2RiIgorCisgICAgICAgIG1rZGlyIC1wICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtZ2RiLWNyb3NzIgorICAgICAgICBjZCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLWdkYi1jcm9zcyIKKworICAgICAgICBjcm9zc19leHRyYV9jb25maWc9KCIke2V4dHJhX2NvbmZpZ1tAXX0iKQorICAgICAgICBjYXNlICIke0NUX1RIUkVBRFN9IiBpbgorICAgICAgICAgICAgbm9uZSkgICBjcm9zc19leHRyYV9jb25maWcrPSgiLS1kaXNhYmxlLXRocmVhZHMiKTs7CisgICAgICAgICAgICAqKSAgICAgIGNyb3NzX2V4dHJhX2NvbmZpZys9KCItLWVuYWJsZS10aHJlYWRzIik7OworICAgICAgICBlc2FjCisgICAgICAgIGlmIFsgIiR7Q1RfR0RCX0NST1NTX1BZVEhPTn0iID0gInkiIF07IHRoZW4KKyAgICAgICAgICAgIGNyb3NzX2V4dHJhX2NvbmZpZys9KCAiLS13aXRoLXB5dGhvbj15ZXMiICkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY3Jvc3NfZXh0cmFfY29uZmlnKz0oICItLXdpdGgtcHl0aG9uPW5vIiApCisgICAgICAgIGZpCisKKyAgICAgICAgQ0NfZm9yX2dkYj0KKyAgICAgICAgTERfZm9yX2dkYj0KKyAgICAgICAgaWYgWyAiJHtDVF9HREJfQ1JPU1NfU1RBVElDfSIgPSAieSIgXTsgdGhlbgorICAgICAgICAgICAgQ0NfZm9yX2dkYj0iZ2NjIC1zdGF0aWMiCisgICAgICAgICAgICBMRF9mb3JfZ2RiPSJsZCAtc3RhdGljIgorICAgICAgICBmaQorCisgICAgICAgIGdkYl9jcm9zc19jb25maWd1cmU9IiR7Z2RiX3NyY19kaXJ9L2NvbmZpZ3VyZSIKKworICAgICAgICBDVF9Eb0xvZyBERUJVRyAiRXh0cmEgY29uZmlnIHBhc3NlZDogJyR7Y3Jvc3NfZXh0cmFfY29uZmlnWypdfSciCisKKyAgICAgICAgQ1RfRG9FeGVjTG9nIENGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBDQz0iJHtDQ19mb3JfZ2RifSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIExEPSIke0xEX2Zvcl9nZGJ9IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIiR7Z2RiX2Nyb3NzX2NvbmZpZ3VyZX0iICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgLS1idWlsZD0ke0NUX0JVSUxEfSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAtLWhvc3Q9JHtDVF9IT1NUfSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIC0tdGFyZ2V0PSR7Q1RfVEFSR0VUfSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgLS1wcmVmaXg9IiR7Q1RfUFJFRklYX0RJUn0iICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0iJHtDVF9TWVNST09UX0RJUn0iICAgIFwKKyAgICAgICAgICAgIC0td2l0aC1zeXNyb290PSIke0NUX1NZU1JPT1RfRElSfSIgICAgICAgICAgXAorICAgICAgICAgICAgLS13aXRoLWV4cGF0PXllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAtLWRpc2FibGUtd2Vycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICIke2Nyb3NzX2V4dHJhX2NvbmZpZ1tAXX0iCisKKyAgICAgICAgQ1RfRG9Mb2cgRVhUUkEgIkJ1aWxkaW5nIGNyb3NzLWdkYiIKKyAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlICR7Sk9CU0ZMQUdTfQorCisgICAgICAgIENUX0RvTG9nIEVYVFJBICJJbnN0YWxsaW5nIGNyb3NzLWdkYiIKKyAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlIGluc3RhbGwKKworICAgICAgICBpZiBbICIke0NUX0dEQl9JTlNUQUxMX0dEQklOSVR9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgICAgICBDVF9Eb0xvZyBFWFRSQSAiSW5zdGFsbCAnLmdkYmluaXQnIHRlbXBsYXRlIgorICAgICAgICAgICAgIyBTZWUgaW4gc2NyaXB0cy9idWlsZC9pbnRlcm5hbHMuc2ggZm9yIHdoeSB3ZSBkbyB0aGlzCisgICAgICAgICAgICBpZiBbIC1mICIke0NUX1NSQ19ESVJ9L2djYy0ke0NUX0NDX1ZFUlNJT059L2djYy9CQVNFLVZFUiIgXTsgdGhlbgorICAgICAgICAgICAgICAgIGdjY192ZXJzaW9uPSQoIGNhdCAiJHtDVF9TUkNfRElSfS9nY2MtJHtDVF9DQ19WRVJTSU9OfS9nY2MvQkFTRS1WRVIiICkKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBnY2NfdmVyc2lvbj0kKCBzZWQgLXIgLWUgJy92ZXJzaW9uX3N0cmluZy8hZDsgcy9eLis9ICIoW14iXSspIi4qJC9cMS87JyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIke0NUX1NSQ19ESVJ9L2djYy0ke0NUX0NDX1ZFUlNJT059L2djYy92ZXJzaW9uLmMiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgJHtzZWR9IC1yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgLWUgInM6QEBQUkVGSVhAQDoke0NUX1BSRUZJWF9ESVJ9OjsiICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAtZSAiczpAQFZFUlNJT05AQDoke2djY192ZXJzaW9ufTo7IiAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICIke0NUX0xJQl9ESVJ9L3NjcmlwdHMvYnVpbGQvZGVidWcvZ2RiaW5pdC5pbiIgICBcCisgICAgICAgICAgICAgICAgICAgPiIke0NUX1BSRUZJWF9ESVJ9L3NoYXJlL2dkYi9nZGJpbml0IgorICAgICAgICBmaSAjIEluc3RhbGwgZ2RiaW5pdCBzYW1wbGUKKworICAgICAgICBDVF9FbmRTdGVwCisgICAgZmkKKworICAgIGlmIFsgIiR7Q1RfR0RCX05BVElWRX0iID0gInkiIF07IHRoZW4KKyAgICAgICAgbG9jYWwgLWEgbmF0aXZlX2V4dHJhX2NvbmZpZworICAgICAgICBsb2NhbCAtYSBuY3Vyc2VzX29wdAorICAgICAgICBsb2NhbCAtYSBnZGJfbmF0aXZlX0NGTEFHUworCisgICAgICAgIENUX0RvU3RlcCBJTkZPICJJbnN0YWxsaW5nIG5hdGl2ZSBnZGIiCisKKyAgICAgICAgbmF0aXZlX2V4dHJhX2NvbmZpZz0oIiR7ZXh0cmFfY29uZmlnW0BdfSIpCisKKyAgICAgICAgIyBHREIgb24gTWluZ3cgZGVwZW5kcyBvbiBQRGN1cnNlcywgbm90IG5jdXJzZXMKKyAgICAgICAgaWYgWyAiJHtkb19uY3Vyc2VzfSIgPSAieSIgXTsgdGhlbgorICAgICAgICAgICAgQ1RfRG9Mb2cgRVhUUkEgIkJ1aWxkaW5nIHN0YXRpYyB0YXJnZXQgbmN1cnNlcyIKKworICAgICAgICAgICAgWyAiJHtDVF9DQ19MQU5HX0NYWH0iID0gInkiIF0gfHwgbmN1cnNlc19vcHRzKz0oIi0td2l0aG91dC1jeHgiICItLXdpdGhvdXQtY3h4LWJpbmRpbmciKQorICAgICAgICAgICAgWyAiJHtDVF9DQ19MQU5HX0FEQX0iID0gInkiIF0gfHwgbmN1cnNlc19vcHRzKz0oIi0td2l0aG91dC1hZGEiKQorCisgICAgICAgICAgICBta2RpciAtcCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLW5jdXJzZXMtYnVpbGQtdGljIgorICAgICAgICAgICAgY2QgIiR7Q1RfQlVJTERfRElSfS9idWlsZC1uY3Vyc2VzLWJ1aWxkLXRpYyIKKworICAgICAgICAgICAgIyBVc2UgYnVpbGQgPSBDVF9SRUFMX0JVSUxEIHNvIHRoYXQgY29uZmlndXJlIHRoaW5rcyBpdCBpcworICAgICAgICAgICAgIyBjcm9zcy1jb21waWxpbmcsIGFuZCB0aHVzIHdpbGwgdXNlIHRoZSAke0NUX0JVSUxEfS0qCisgICAgICAgICAgICAjIHRvb2xzIGluc3RlYWQgb2Ygc2VhcmNoaW5nIGZvciB0aGUgbmF0aXZlIG9uZXMuLi4KKyAgICAgICAgICAgIENUX0RvRXhlY0xvZyBDRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgIiR7Q1RfU1JDX0RJUn0vbmN1cnNlcy0ke0NUX0RFQlVHX0dEQl9OQ1VSU0VTX1ZFUlNJT059L2NvbmZpZ3VyZSIgICBcCisgICAgICAgICAgICAgICAgLS1idWlsZD0ke0NUX0JVSUxEfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAtLWhvc3Q9JHtDVF9CVUlMRH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIC0tcHJlZml4PS91c3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtc3ltbGlua3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtYnVpbGQtY2M9JHtDVF9SRUFMX0JVSUxEfS1nY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIC0td2l0aC1idWlsZC1jcHA9JHtDVF9SRUFMX0JVSUxEfS1nY2MgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgLS13aXRoLWJ1aWxkLWNmbGFncz0iJHtDVF9DRkxBR1NfRk9SX0hPU1R9IiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAiJHtuY3Vyc2VzX29wdHNbQF19IgorCisgICAgICAgICAgICAjIG5jdXJzZXMgaW5zaXN0cyBvbiBsaW5raW5nIHRpYyBzdGF0aWNhbGx5LiBJdCBkb2VzIG5vdCB3b3JrCisgICAgICAgICAgICAjIG9uIHNvbWUgT1NlcyAoZWcuIE1hY09TLVgvRGFyd2luL3doYXRldmVyLXlvdS1jYWxsLWl0KS4KKyAgICAgICAgICAgIENUX0RvRXhlY0xvZyBERUJVRyBzZWQgLXIgLWkgLWUgJ3MvLXN0YXRpYy8vZzsnICJwcm9ncy9NYWtlZmlsZSIKKworICAgICAgICAgICAgIyBVbmRlciBzb21lIG9wZXJhdGluZyBzeXN0ZW1zIChlZy4gV2luYmxvd3MpLCB0aGVyZSBpcyBhbgorICAgICAgICAgICAgIyBleHRlbnNpb24gYXBwZW5kZWQgdG8gZXhlY3V0YWJsZXMuIEZpbmQgdGhhdC4KKyAgICAgICAgICAgIHRpY19leHQ9JChncmVwIC1FICdeeFtbOnNwYWNlOl1dKj0nIHByb2dzL01ha2VmaWxlIHxzZWQgLXIgLWUgJ3MvXi4qPVtbOnNwYWNlOl1dKi8vOycpCisKKyAgICAgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSAke0pPQlNGTEFHU30gLUMgaW5jbHVkZQorICAgICAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlICR7Sk9CU0ZMQUdTfSAtQyBwcm9ncyAidGljJHt0aWNfZXh0fSIKKworICAgICAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCBpbnN0YWxsIC1kIC1tIDA3NTUgIiR7Q1RfQlVJTERUT09MU19QUkVGSVhfRElSfS9iaW4iCisgICAgICAgICAgICBDVF9Eb0V4ZWNMb2cgQUxMIGluc3RhbGwgLW0gMDc1NSAicHJvZ3MvdGljJHt0aWNfZXh0fSIgIiR7Q1RfQlVJTERUT09MU19QUkVGSVhfRElSfS9iaW4iCisKKyAgICAgICAgICAgIG1rZGlyIC1wICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtbmN1cnNlcyIKKyAgICAgICAgICAgIGNkICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtbmN1cnNlcyIKKworICAgICAgICAgICAgQ1RfRG9FeGVjTG9nIENGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBUSUNfUEFUSD0iJHtDVF9CVUlMRFRPT0xTX1BSRUZJWF9ESVJ9L2Jpbi90aWMke3RpY19leHR9IiAgICAgICAgICAgIFwKKyAgICAgICAgICAgICIke0NUX1NSQ19ESVJ9L25jdXJzZXMtJHtDVF9ERUJVR19HREJfTkNVUlNFU19WRVJTSU9OfS9jb25maWd1cmUiICAgXAorICAgICAgICAgICAgICAgIC0tYnVpbGQ9JHtDVF9CVUlMRH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgLS1ob3N0PSR7Q1RfVEFSR0VUfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtYnVpbGQtY2M9JHtDVF9CVUlMRH0tZ2NjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIC0td2l0aC1idWlsZC1jcHA9JHtDVF9CVUlMRH0tZ2NjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgLS13aXRoLWJ1aWxkLWNmbGFncz0iJHtDVF9DRkxBR1NfRk9SX0hPU1R9IiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAtLXByZWZpeD0iJHtDVF9CVUlMRF9ESVJ9L3N0YXRpYy10YXJnZXQiICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1zaGFyZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LXN5c21vdXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAtLXdpdGhvdXQtcHJvZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLXRlcm1jYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIiR7bmN1cnNlc19vcHRzW0BdfSIKKworICAgICAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlICR7Sk9CU0ZMQUdTfQorCisgICAgICAgICAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1ha2UgaW5zdGFsbAorCisgICAgICAgICAgICBuYXRpdmVfZXh0cmFfY29uZmlnKz0oIi0td2l0aC1jdXJzZXMiKQorICAgICAgICAgICAgIyBUaGVyZSdzIG5vIGJldHRlciB3YXkgdG8gdGVsbCBnZGIgd2hlcmUgdG8gZmluZCAtbGN1cnNlcy4uLiA6LSgKKyAgICAgICAgICAgIGdkYl9uYXRpdmVfQ0ZMQUdTKz0oIi1JJHtDVF9CVUlMRF9ESVJ9L3N0YXRpYy10YXJnZXQvaW5jbHVkZSIpCisgICAgICAgICAgICBnZGJfbmF0aXZlX0NGTEFHUys9KCItTCR7Q1RfQlVJTERfRElSfS9zdGF0aWMtdGFyZ2V0L2xpYiIpCisgICAgICAgIGZpICMgZG9fbmN1cnNlcworCisgICAgICAgIGlmIFsgIiR7ZG9fZXhwYXR9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgICAgICBDVF9Eb0xvZyBFWFRSQSAiQnVpbGRpbmcgc3RhdGljIHRhcmdldCBleHBhdCIKKworICAgICAgICAgICAgbWtkaXIgLXAgIiR7Q1RfQlVJTERfRElSfS9leHBhdC1idWlsZCIKKyAgICAgICAgICAgIGNkICIke0NUX0JVSUxEX0RJUn0vZXhwYXQtYnVpbGQiCisKKyAgICAgICAgICAgIENUX0RvRXhlY0xvZyBDRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAiJHtDVF9TUkNfRElSfS9leHBhdC0ke0NUX0RFQlVHX0dEQl9FWFBBVF9WRVJTSU9OfS9jb25maWd1cmUiICAgXAorICAgICAgICAgICAgICAgIC0tYnVpbGQ9JHtDVF9CVUlMRH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAtLWhvc3Q9JHtDVF9UQVJHRVR9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgLS1wcmVmaXg9IiR7Q1RfQlVJTERfRElSfS9zdGF0aWMtdGFyZ2V0IiAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLXN0YXRpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtc2hhcmVkCisKKyAgICAgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSAke0pPQlNGTEFHU30KKyAgICAgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSBpbnN0YWxsCisKKyAgICAgICAgICAgIG5hdGl2ZV9leHRyYV9jb25maWcrPSgiLS13aXRoLWV4cGF0IikKKyAgICAgICAgICAgIG5hdGl2ZV9leHRyYV9jb25maWcrPSgiLS13aXRoLWxpYmV4cGF0LXByZWZpeD0ke0NUX0JVSUxEX0RJUn0vc3RhdGljLXRhcmdldCIpCisgICAgICAgIGZpICMgZG9fZXhwYXQKKworICAgICAgICBDVF9Eb0xvZyBFWFRSQSAiQ29uZmlndXJpbmcgbmF0aXZlIGdkYiIKKworICAgICAgICBta2RpciAtcCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLWdkYi1uYXRpdmUiCisgICAgICAgIGNkICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtZ2RiLW5hdGl2ZSIKKworICAgICAgICBjYXNlICIke0NUX1RIUkVBRFN9IiBpbgorICAgICAgICAgICAgbm9uZSkgICBuYXRpdmVfZXh0cmFfY29uZmlnKz0oIi0tZGlzYWJsZS10aHJlYWRzIik7OworICAgICAgICAgICAgKikgICAgICBuYXRpdmVfZXh0cmFfY29uZmlnKz0oIi0tZW5hYmxlLXRocmVhZHMiKTs7CisgICAgICAgIGVzYWMKKworICAgICAgICBpZiBbICIke0NUX0dEQl9OQVRJVkVfU1RBVElDfSIgPSAieSIgXTsgdGhlbgorICAgICAgICAgICAgQ0NfZm9yX2dkYj0iJHtDVF9UQVJHRVR9LWdjYyAtc3RhdGljIgorICAgICAgICAgICAgTERfZm9yX2dkYj0iJHtDVF9UQVJHRVR9LWxkIC1zdGF0aWMiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIENDX2Zvcl9nZGI9IiR7Q1RfVEFSR0VUfS1nY2MiCisgICAgICAgICAgICBMRF9mb3JfZ2RiPSIke0NUX1RBUkdFVH0tbGQiCisgICAgICAgIGZpCisKKyAgICAgICAgZXhwb3J0IGFjX2N2X2Z1bmNfc3RybmNtcF93b3Jrcz15ZXMKKworICAgICAgICBDVF9Eb0xvZyBERUJVRyAiRXh0cmEgY29uZmlnIHBhc3NlZDogJyR7bmF0aXZlX2V4dHJhX2NvbmZpZ1sqXX0nIgorCisgICAgICAgIENUX0RvRXhlY0xvZyBDRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQ0M9IiR7Q0NfZm9yX2dkYn0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBMRD0iJHtMRF9mb3JfZ2RifSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIENGTEFHUz0iJHtnZGJfbmF0aXZlX0NGTEFHU1sqXX0iICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIiR7Z2RiX3NyY19kaXJ9L2NvbmZpZ3VyZSIgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgLS1idWlsZD0ke0NUX0JVSUxEfSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAtLWhvc3Q9JHtDVF9UQVJHRVR9ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIC0tdGFyZ2V0PSR7Q1RfVEFSR0VUfSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgLS1wcmVmaXg9L3VzciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0iJHtDVF9TWVNST09UX0RJUn0iICAgIFwKKyAgICAgICAgICAgIC0td2l0aG91dC11aW91dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgLS1kaXNhYmxlLXR1aSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAtLWRpc2FibGUtZ2RidGsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIC0td2l0aG91dC14ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgLS1kaXNhYmxlLXNpbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAtLWRpc2FibGUtd2Vycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIC0td2l0aG91dC1pbmNsdWRlZC1nZXR0ZXh0ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgLS13aXRob3V0LWRldmVsb3AgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAiJHtuYXRpdmVfZXh0cmFfY29uZmlnW0BdfSIKKworICAgICAgICBDVF9Eb0xvZyBFWFRSQSAiQnVpbGRpbmcgbmF0aXZlIGdkYiIKKyAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlICR7Sk9CU0ZMQUdTfSBDQz0ke0NUX1RBUkdFVH0tJHtDVF9DQ30KKworICAgICAgICBDVF9Eb0xvZyBFWFRSQSAiSW5zdGFsbGluZyBuYXRpdmUgZ2RiIgorICAgICAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1ha2UgREVTVERJUj0iJHtDVF9ERUJVR1JPT1RfRElSfSIgaW5zdGFsbAorCisgICAgICAgICMgQnVpbGRpbmcgYSBuYXRpdmUgZ2RiIGFsc28gYnVpbGRzIGEgZ2Ric2VydmVyCisgICAgICAgIGZpbmQgIiR7Q1RfREVCVUdST09UX0RJUn0iIC10eXBlIGYgLW5hbWUgZ2Ric2VydmVyIC1leGVjIHJtIC1mdiB7fSBcOyAyPiYxIHxDVF9Eb0xvZyBBTEwKKworICAgICAgICB1bnNldCBhY19jdl9mdW5jX3N0cm5jbXBfd29ya3MKKworICAgICAgICAjIEdEQiBvbiBNaW5ndyBkZXBlbmRzIG9uIFBEY3Vyc2VzLCBub3QgbmN1cnNlcworICAgICAgICBpZiBbICIke0NUX01JTkdXMzJ9IiAhPSAieSIgXTsgdGhlbgorICAgICAgICAgICAgQ1RfRG9Mb2cgRVhUUkEgIkNsZWFuaW5nIHVwIG5jdXJzZXMiCisgICAgICAgICAgICBjZCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLW5jdXJzZXMiCisgICAgICAgICAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1ha2UgREVTVERJUj0iJHtDVF9TWVNST09UX0RJUn0iIHVuaW5zdGFsbAorCisgICAgICAgICAgICBDVF9Eb0V4ZWNMb2cgREVCVUcgcm0gLXJmICIke0NUX0JVSUxEX0RJUn0vbmN1cnNlcyIKKyAgICAgICAgZmkKKworICAgICAgICBDVF9FbmRTdGVwICMgbmF0aXZlIGdkYiBidWlsZAorICAgIGZpCisKKyAgICBpZiBbICIke0NUX0dEQl9HREJTRVJWRVJ9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIGxvY2FsIC1hIGdkYnNlcnZlcl9leHRyYV9jb25maWcKKworICAgICAgICBDVF9Eb1N0ZXAgSU5GTyAiSW5zdGFsbGluZyBnZGJzZXJ2ZXIiCisgICAgICAgIENUX0RvTG9nIEVYVFJBICJDb25maWd1cmluZyBnZGJzZXJ2ZXIiCisKKyAgICAgICAgbWtkaXIgLXAgIiR7Q1RfQlVJTERfRElSfS9idWlsZC1nZGItZ2Ric2VydmVyIgorICAgICAgICBjZCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLWdkYi1nZGJzZXJ2ZXIiCisKKyAgICAgICAgIyBXb3JrYXJvdW5kIGZvciBiYWQgdmVyc2lvbnMsIHdoZXJlIHRoZSBjb25maWd1cmUKKyAgICAgICAgIyBzY3JpcHQgZm9yIGdkYnNlcnZlciBpcyBub3QgZXhlY3V0YWJsZS4uLgorICAgICAgICAjIEJhaCwgR05VIGZvbGtzIHN0cmlrZSBhZ2Fpbi4uLiA6LSgKKyAgICAgICAgY2htb2QgK3ggIiR7Z2RiX3NyY19kaXJ9L2dkYi9nZGJzZXJ2ZXIvY29uZmlndXJlIgorCisgICAgICAgIGdkYnNlcnZlcl9MREZMQUdTPQorICAgICAgICBpZiBbICIke0NUX0dEQl9HREJTRVJWRVJfU1RBVElDfSIgPSAieSIgXTsgdGhlbgorICAgICAgICAgICAgZ2Ric2VydmVyX0xERkxBR1M9LXN0YXRpYworICAgICAgICBmaQorCisgICAgICAgIGdkYnNlcnZlcl9leHRyYV9jb25maWc9KCIke2V4dHJhX2NvbmZpZ1tAXX0iKQorCisgICAgICAgIENUX0RvRXhlY0xvZyBDRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgTERGTEFHUz0iJHtnZGJzZXJ2ZXJfTERGTEFHU30iICAgICAgICAgICAgICAgICAgXAorICAgICAgICAiJHtnZGJfc3JjX2Rpcn0vZ2RiL2dkYnNlcnZlci9jb25maWd1cmUiICAgICAgICBcCisgICAgICAgICAgICAtLWJ1aWxkPSR7Q1RfQlVJTER9ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIC0taG9zdD0ke0NUX1RBUkdFVH0gICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgLS10YXJnZXQ9JHtDVF9UQVJHRVR9ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAtLXByZWZpeD0vdXNyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIC0tc3lzY29uZmRpcj0vZXRjICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgLS1sb2NhbHN0YXRlZGlyPS92YXIgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAtLWluY2x1ZGVkaXI9IiR7Q1RfSEVBREVSU19ESVJ9IiAgICAgICAgICAgIFwKKyAgICAgICAgICAgIC0td2l0aC1idWlsZC1zeXNyb290PSIke0NUX1NZU1JPT1RfRElSfSIgICAgXAorICAgICAgICAgICAgLS1wcm9ncmFtLXByZWZpeD0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAtLXdpdGhvdXQtdWlvdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIC0tZGlzYWJsZS10dWkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgLS1kaXNhYmxlLWdkYnRrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAtLXdpdGhvdXQteCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIC0td2l0aG91dC1pbmNsdWRlZC1nZXR0ZXh0ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgLS13aXRob3V0LWRldmVsb3AgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAtLWRpc2FibGUtd2Vycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICIke2dkYnNlcnZlcl9leHRyYV9jb25maWdbQF19IgorCisgICAgICAgIENUX0RvTG9nIEVYVFJBICJCdWlsZGluZyBnZGJzZXJ2ZXIiCisgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSAke0pPQlNGTEFHU30gQ0M9JHtDVF9UQVJHRVR9LSR7Q1RfQ0N9CisKKyAgICAgICAgQ1RfRG9Mb2cgRVhUUkEgIkluc3RhbGxpbmcgZ2Ric2VydmVyIgorICAgICAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1ha2UgREVTVERJUj0iJHtDVF9ERUJVR1JPT1RfRElSfSIgaW5zdGFsbAorCisgICAgICAgIENUX0VuZFN0ZXAKKyAgICBmaQorfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2RlYnVnLzQwMC1sdHJhY2Uuc2ggYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvZGVidWcvNDAwLWx0cmFjZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGY4YWYyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2RlYnVnLzQwMC1sdHJhY2Uuc2gKQEAgLTAsMCArMSw2MyBAQAorIyBCdWlsZCBzY3JpcHQgZm9yIGx0cmFjZQorCitkb19kZWJ1Z19sdHJhY2VfZ2V0KCkgeworICAgIENUX0dldEZpbGUgImx0cmFjZV8ke0NUX0xUUkFDRV9WRVJTSU9OfS5vcmlnIiAudGFyLmd6ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAge2Z0cCxodHRwfTovL2Z0cC5kZS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vbC9sdHJhY2UvCisgICAgIyBDcmVhdGUgYSBsaW5rIHNvIHRoYXQgdGhlIGZvbGxvd2luZyBzdGVwcyBhcmUgZWFzaWVyIHRvIGRvOgorICAgIENUX1B1c2hkICIke0NUX1RBUkJBTExTX0RJUn0iCisgICAgbHRyYWNlX2V4dD0kKENUX0dldEZpbGVFeHRlbnNpb24gImx0cmFjZV8ke0NUX0xUUkFDRV9WRVJTSU9OfS5vcmlnIikKKyAgICBsbiAtc2YgImx0cmFjZV8ke0NUX0xUUkFDRV9WRVJTSU9OfS5vcmlnJHtsdHJhY2VfZXh0fSIgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgImx0cmFjZS0ke0NUX0xUUkFDRV9WRVJTSU9OfSR7bHRyYWNlX2V4dH0iCisgICAgQ1RfUG9wZAorfQorCitkb19kZWJ1Z19sdHJhY2VfZXh0cmFjdCgpIHsKKyAgICBDVF9FeHRyYWN0ICJsdHJhY2UtJHtDVF9MVFJBQ0VfVkVSU0lPTn0iCisgICAgQ1RfUGF0Y2ggImx0cmFjZSIgIiR7Q1RfTFRSQUNFX1ZFUlNJT059IgorfQorCitkb19kZWJ1Z19sdHJhY2VfYnVpbGQoKSB7CisgICAgbG9jYWwgbHRyYWNlX2hvc3QKKworICAgIENUX0RvU3RlcCBJTkZPICJJbnN0YWxsaW5nIGx0cmFjZSIKKworICAgIENUX0RvTG9nIEVYVFJBICJDb3B5aW5nIHNvdXJjZXMgdG8gYnVpbGQgZGlyIgorICAgIENUX0RvRXhlY0xvZyBBTEwgY3AgLWF2ICIke0NUX1NSQ19ESVJ9L2x0cmFjZS0ke0NUX0xUUkFDRV9WRVJTSU9OfSIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtbHRyYWNlIgorICAgIENUX1B1c2hkICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtbHRyYWNlIgorCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkNvbmZpZ3VyaW5nIGx0cmFjZSIKKyAgICAjIGx0cmFjZS0wLjUuMywgYW5kIGxhdGVyLCBkb24ndCB1c2UgR05VIEF1dG90b29scyBjb25maWd1cmUgc2NyaXB0IGFueW1vcmUKKyAgICBpZiBbICIke0NUX0xUUkFDRV8wXzVfM19vcl9sYXRlcn0iID0gInkiIF07IHRoZW4KKyAgICAgICAgY2FzZSAiJHtDVF9BUkNIfToke0NUX0FSQ0hfQklUTkVTU30iIGluCisgICAgICAgICAgICB4ODY6MzIpICAgICBsdHJhY2VfaG9zdD0iaTM4NiI7OworICAgICAgICAgICAgeDg2OjY0KSAgICAgbHRyYWNlX2hvc3Q9Ing4Nl82NCI7OworICAgICAgICAgICAgcG93ZXJwYzoqKSAgbHRyYWNlX2hvc3Q9InBwYyI7OworICAgICAgICAgICAgbWlwczoqKSAgICAgbHRyYWNlX2hvc3Q9Im1pcHNlbCI7OworICAgICAgICAgICAgKikgICAgICAgICAgbHRyYWNlX2hvc3Q9IiR7Q1RfQVJDSH0iOzsKKyAgICAgICAgZXNhYworICAgICAgICBDVF9Eb0V4ZWNMb2cgQ0ZHICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQ0M9IiR7Q1RfVEFSR0VUfS0ke0NUX0NDfSIgICAgICBcCisgICAgICAgIEFSPSIke0NUX1RBUkdFVH0tYXIiICAgICAgICAgICAgXAorICAgICAgICBIT1NUPSIke2x0cmFjZV9ob3N0fSIgICAgICAgICAgIFwKKyAgICAgICAgSE9TVF9PUz0iJHtDVF9UQVJHRVRfS0VSTkVMfSIgICBcCisgICAgICAgIENGTEFHUz0iJHtDVF9UQVJHRVRfQ0ZMQUdTfSIgICAgXAorICAgICAgICAuL2NvbmZpZ3VyZSAtLXByZWZpeD0vdXNyCisgICAgZWxzZQorICAgICAgICBDVF9Eb0V4ZWNMb2cgQ0ZHICAgICAgICBcCisgICAgICAgIC4vY29uZmlndXJlICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIC0tYnVpbGQ9JHtDVF9CVUlMRH0gXAorICAgICAgICAgICAgLS1ob3N0PSR7Q1RfVEFSR0VUfSBcCisgICAgICAgICAgICAtLXByZWZpeD0vdXNyCisgICAgZmkKKworICAgIENUX0RvTG9nIEVYVFJBICJCdWlsZGluZyBsdHJhY2UiCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlCisKKyAgICBDVF9Eb0xvZyBFWFRSQSAiSW5zdGFsbGluZyBsdHJhY2UiCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlIERFU1RESVI9IiR7Q1RfREVCVUdST09UX0RJUn0iIGluc3RhbGwKKworICAgIENUX1BvcGQKKyAgICBDVF9FbmRTdGVwCit9CisKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9kZWJ1Zy81MDAtc3RyYWNlLnNoIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2RlYnVnLzUwMC1zdHJhY2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhlYWY4OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9kZWJ1Zy81MDAtc3RyYWNlLnNoCkBAIC0wLDAgKzEsMzUgQEAKKyMgQnVpbGQgc2NyaXB0IGZvciBzdHJhY2UKKworZG9fZGVidWdfc3RyYWNlX2dldCgpIHsKKyAgICBDVF9HZXRGaWxlICJzdHJhY2UtJHtDVF9TVFJBQ0VfVkVSU0lPTn0iIGh0dHA6Ly9rZW50LmRsLnNvdXJjZWZvcmdlLm5ldC9zb3VyY2Vmb3JnZS9zdHJhY2UvCisgICAgIyBEb3dubG9hZGluZyBmcm9tIHNvdXJjZWZvcmdlIGxlYXZlcyBnYXJiYWdlLCBjbGVhbnVwCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBybSAtZiAiJHtDVF9UQVJCQUxMU19ESVJ9L3Nob3dmaWxlcy5waHAiKgorfQorCitkb19kZWJ1Z19zdHJhY2VfZXh0cmFjdCgpIHsKKyAgICBDVF9FeHRyYWN0ICJzdHJhY2UtJHtDVF9TVFJBQ0VfVkVSU0lPTn0iCisgICAgQ1RfUGF0Y2ggInN0cmFjZSIgIiR7Q1RfU1RSQUNFX1ZFUlNJT059IgorfQorCitkb19kZWJ1Z19zdHJhY2VfYnVpbGQoKSB7CisgICAgQ1RfRG9TdGVwIElORk8gIkluc3RhbGxpbmcgc3RyYWNlIgorICAgIG1rZGlyIC1wICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtc3RyYWNlIgorICAgIENUX1B1c2hkICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtc3RyYWNlIgorCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkNvbmZpZ3VyaW5nIHN0cmFjZSIKKyAgICBDVF9Eb0V4ZWNMb2cgQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiJHtDVF9TUkNfRElSfS9zdHJhY2UtJHtDVF9TVFJBQ0VfVkVSU0lPTn0vY29uZmlndXJlIiAgIFwKKyAgICAgICAgLS1idWlsZD0ke0NUX0JVSUxEfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1ob3N0PSR7Q1RfVEFSR0VUfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1wcmVmaXg9L3VzcgorCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkJ1aWxkaW5nIHN0cmFjZSIKKyAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1ha2UKKworICAgIENUX0RvTG9nIEVYVFJBICJJbnN0YWxsaW5nIHN0cmFjZSIKKyAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1ha2UgREVTVERJUj0iJHtDVF9ERUJVR1JPT1RfRElSfSIgaW5zdGFsbAorCisgICAgQ1RfUG9wZAorICAgIENUX0VuZFN0ZXAKK30KKwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2RlYnVnL2R1bWEuaW4gYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvZGVidWcvZHVtYS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGFmZDY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2RlYnVnL2R1bWEuaW4KQEAgLTAsMCArMSw1NSBAQAorIyEvYmluL3NoCisjIChDKSAyMDA4IFlhbm4gRS4gTU9SSU4gPHlhbm4ubW9yaW4uMTk5OEBhbmNpZW5zLmVuaWIuZnI+CisjIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgdi4yCisKK0xJQkRVTUFfU089CisKK2Nhc2UgIiQxIiBpbgorICAtb24pCisgICAgY2FzZSAiJHtMRF9QUkVMT0FEfSIgaW4KKyAgICAgICoke0xJQkRVTUFfU099KikgOzsKKyAgICAgICopIExEX1BSRUxPQUQ9IiR7TElCRFVNQV9TT30gJHtMRF9QUkVMT0FEfSI7OworICAgIGVzYWMKKyAgICBzaGlmdAorICAgIDs7CisgIC1vZmYpCisgICAgIyBXZSB1c2UgYSBzdXBvc2VkbHkgUE9TSVgtY29tcGxpYW50IHNoZWxsOiAvYmluL3NoCisgICAgIyAgLT4gd2UgY2FuJ3QgdXNlICIke0xEX1BSRUxPQUQvLyR7TElCRFVNQV9TT30vfSIsIGl0J3Mgbm90IFBPU0lYCisgICAgIyBXZSBkb24ndCBrbm93IGlmIHNlZCB3aWxsIGJlIHByZXNlbnQgb24gdGhlIHRhcmdldAorICAgICMgIC0+IHdlIGNhbid0IHVzZSAkKGVjaG8gIiR7TERfUFJFTE9BRH0iIHxzZWQgLXIgLWUgInN8JHtMSUJEVU1BX1NPfXx8OyIpCisgICAgIyBTbywgaXRlcmF0ZSB0aHJvdWdoIExEX1BSRUxPQUQsIGFuZCBrZWVwIG9ubHkgdGhvc2UgbGlicyB0aGF0CisgICAgIyBhcmUgbm90ICIke0xJQkRVTUFfU099IgorICAgIG9sZF9MRF9QUkVMT0FEPSIke0xEX1BSRUxPQUR9IgorICAgIExEX1BSRUxPQUQ9CisgICAgZm9yIGxpYiBpbiAke29sZF9MRF9QUkVMT0FEfTsgZG8KKyAgICAgIFsgIiR7bGlifSIgPSAiJHtMSUJEVU1BX1NPfSIgXSB8fCBMRF9QUkVMT0FEPSIke0xEX1BSRUxPQUR9ICR7bGlifSIKKyAgICBkb25lCisgICAgdW5zZXQgb2xkX0xEX1BSRUxPQUQKKyAgICBzaGlmdAorICAgIDs7CisgIC1zaG93KQorICAgIGNhc2UgIiR7TERfUFJFTE9BRH0iIGluCisgICAgICAqJHtMSUJEVU1BX1NPfSopIGVjaG8gImR1bWEgaXMgZW5hYmxlZCI7OworICAgICAgKikgICAgICAgICAgICAgICBlY2hvICJkdW1hIGlzIGRpc2FibGVkIjs7CisgICAgZXNhYworICAgIGV4aXQgMAorICAgIDs7CisgICIiKQorICAgIGNhdCA8PF9FT0ZfCitVc2FnZToKKyAgICAuICQwIDwtb258LW9mZnwtc2hvdz4KKyAgICAgICAgU2V0cywgdW5zZXRzIG9yIHNob3cgRFVNQSB1c2FnZS4KKyAgICAkMCA8ZXhlY3V0YWJsZSBbYXJnLi4uXT4KKyAgICAgICAgRXhlY3V0ZSAnZXhlY3V0YWJsZScgKHdpdGggYXJndW1lbnRzICdhcmdzJykgdXNpbmcgRFVNQS4KK19FT0ZfCisgICAgZmFsc2UgIyBEb24ndCAnZXhpdCcsIHdlIGNvdWxkIHdlbGwgYmUgc291cmNlJ2QKKyAgICA7OworICAqKQorICAgIGV4ZWMgIiQwIiAtb24gIiRAIgorICAgIDs7Citlc2FjCisKK2V4cG9ydCBMRF9QUkVMT0FECitpZiBbIC1uICIkMSIgXTsgdGhlbgorICBleGVjICIkQCIKK2ZpCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvZGVidWcvZ2RiaW5pdC5pbiBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9kZWJ1Zy9nZGJpbml0LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NTAwOTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvZGVidWcvZ2RiaW5pdC5pbgpAQCAtMCwwICsxLDYgQEAKK3B5dGhvbgoraW1wb3J0IHN5cworc3lzLnBhdGguaW5zZXJ0KDAsICdAQFBSRUZJWEBAL3NoYXJlL2djYy1AQFZFUlNJT05AQC9weXRob24nKQorZnJvbSBsaWJzdGRjeHgudjYucHJpbnRlcnMgaW1wb3J0IHJlZ2lzdGVyX2xpYnN0ZGN4eF9wcmludGVycworcmVnaXN0ZXJfbGlic3RkY3h4X3ByaW50ZXJzIChOb25lKQorZW5kCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvaW50ZXJuYWxzLnNoIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2ludGVybmFscy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzY4MjA1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2ludGVybmFscy5zaApAQCAtMCwwICsxLDEyMSBAQAorIyBUaGlzIGZpbGUgY29udGFpbnMgY3Jvc3N0b29sLU5HIGludGVybmFsIHN0ZXBzCisKKyMgVGhpcyBzdGVwIGlzIGNhbGxlZCBvbmNlIGFsbCBjb21wb25lbnRzIHdlcmUgYnVpbHQsIHRvIHJlbW92ZQorIyB1bi13YW50ZWQgZmlsZXMsIHRvIGFkZCB0dXBsZSBhbGlhc2VzLCBhbmQgdG8gYWRkIHRoZSBmaW5hbAorIyBjcm9zc3Rvb2wtTkctcHJvdmlkZWQgZmlsZXMuCitkb19maW5pc2goKSB7CisgICAgbG9jYWwgX3QKKyAgICBsb2NhbCBfdHlwZQorICAgIGxvY2FsIHN0cmlwX2FyZ3MKKyAgICBsb2NhbCBnY2NfdmVyc2lvbgorCisgICAgQ1RfRG9TdGVwIElORk8gIkNsZWFuaW5nLXVwIHRoZSB0b29sY2hhaW4ncyBkaXJlY3RvcnkiCisKKyAgICBpZiBbICIke0NUX1NUUklQX0FMTF9UT09MQ0hBSU5fRVhFQ1VUQUJMRVN9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIGNhc2UgIiRDVF9IT1NUIiBpbgorICAgICAgICAgICAgKmRhcndpbiopCisgICAgICAgICAgICAgICAgc3RyaXBfYXJncz0iIgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgIHN0cmlwX2FyZ3M9Ii0tc3RyaXAtYWxsIC12IgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgQ1RfRG9Mb2cgSU5GTyAiU3RyaXBwaW5nIGFsbCB0b29sY2hhaW4gZXhlY3V0YWJsZXMiCisgICAgICAgIENUX1B1c2hkICIke0NUX1BSRUZJWF9ESVJ9IgorICAgICAgICAjIFdlIGNhbiBub3QgdXNlIHRoZSB2ZXJzaW9uIGluIENUX0NDX1ZFUlNJT04gYmVjYXVzZQorICAgICAgICAjIG9mIHRoZSBMaW5hcm8gc3R1ZmYuIFNvLCBoYXJ2ZXN0IHRoZSB2ZXJzaW9uIHN0cmluZworICAgICAgICAjIGRpcmVjdGx5IGZyb20gdGhlIGdjYyBzb3VyY2VzLi4uCisgICAgICAgICMgQWxsIGdjYyA0Lnggc2VlbSB0byBoYXZlIHRoZSB2ZXJzaW9uIGluIGdjYy9CQVNFLVZFUgorICAgICAgICAjIHdoaWxlIHZlcnNpb24gcHJpb3IgdG8gNC54IGhhdmUgdGhlIHZlcnNpb24gaW4gZ2NjL3ZlcnNpb24uYworICAgICAgICAjIE9mIGNvdXJzZSwgaGVyZSBpcyBub3QgdGhlIGJldHRlciBwbGFjZSB0byBkbyB0aGF0Li4uCisgICAgICAgIGlmIFsgLWYgIiR7Q1RfU1JDX0RJUn0vZ2NjLSR7Q1RfQ0NfVkVSU0lPTn0vZ2NjL0JBU0UtVkVSIiBdOyB0aGVuCisgICAgICAgICAgICBnY2NfdmVyc2lvbj0kKCBjYXQgIiR7Q1RfU1JDX0RJUn0vZ2NjLSR7Q1RfQ0NfVkVSU0lPTn0vZ2NjL0JBU0UtVkVSIiApCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdjY192ZXJzaW9uPSQoIHNlZCAtciAtZSAnL3ZlcnNpb25fc3RyaW5nLyFkOyBzL14uKz0gIihbXiJdKykiLiokL1wxLzsnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJHtDVF9TUkNfRElSfS9nY2MtJHtDVF9DQ19WRVJTSU9OfS9nY2MvdmVyc2lvbi5jIiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIGZpCisgICAgICAgIGZvciBfdCBpbiAiYmluLyR7Q1RfVEFSR0VUfS0iKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgIiR7Q1RfVEFSR0VUfS9iaW4vIiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICJsaWJleGVjL2djYy8ke0NUX1RBUkdFVH0vJHtnY2NfdmVyc2lvbn0vIiogICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAibGliZXhlYy9nY2MvJHtDVF9UQVJHRVR9LyR7Z2NjX3ZlcnNpb259L2luc3RhbGwtdG9vbHMvIiogXAorICAgICAgICA7IGRvCisgICAgICAgICAgICBfdHlwZT0iJCggZmlsZSAiJHtfdH0iIHxjdXQgLWQgJyAnIC1mIDItICkiCisgICAgICAgICAgICBjYXNlICIke190eXBlfSIgaW4KKyAgICAgICAgICAgICAgICAqc2NyaXB0KmV4ZWN1dGFibGUqKQorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICpleGVjdXRhYmxlKikKKyAgICAgICAgICAgICAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCAke0NUX0hPU1R9LXN0cmlwICR7c3RyaXBfYXJnc30gIiR7X3R9IgorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICBkb25lCisgICAgICAgIENUX1BvcGQKKyAgICBmaQorCisgICAgaWYgWyAiJHtDVF9CQVJFX01FVEFMfSIgIT0gInkiIF07IHRoZW4KKyAgICAgICAgQ1RfRG9Mb2cgRVhUUkEgIkluc3RhbGxpbmcgdGhlIHBvcHVsYXRlIGhlbHBlciIKKyAgICAgICAgc2VkIC1yIC1lICdzfEBAQ1RfVEFSR0VUQEB8JyIke0NUX1RBUkdFVH0iJ3xnOycgXAorICAgICAgICAgICAgICAgLWUgJ3N8QEBDVF9pbnN0YWxsQEB8JyIke2luc3RhbGx9Iid8ZzsnICBcCisgICAgICAgICAgICAgICAtZSAnc3xAQENUX2Jhc2hAQHwnIiR7YmFzaH0iJ3xnOycgICAgICAgIFwKKyAgICAgICAgICAgICAgIC1lICdzfEBAQ1RfZ3JlcEBAfCciJHtncmVwfSInfGc7JyAgICAgICAgXAorICAgICAgICAgICAgICAgLWUgJ3N8QEBDVF9tYWtlQEB8JyIke21ha2V9Iid8ZzsnICAgICAgICBcCisgICAgICAgICAgICAgICAtZSAnc3xAQENUX3NlZEBAfCciJHtzZWR9Iid8ZzsnICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICIke0NUX0xJQl9ESVJ9L3NjcmlwdHMvcG9wdWxhdGUuaW4iICAgICAgXAorICAgICAgICAgICAgICAgPiIke0NUX1BSRUZJWF9ESVJ9L2Jpbi8ke0NUX1RBUkdFVH0tcG9wdWxhdGUiCisgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgY2htb2QgNzU1ICIke0NUX1BSRUZJWF9ESVJ9L2Jpbi8ke0NUX1RBUkdFVH0tcG9wdWxhdGUiCisgICAgZmkKKworICAgIGlmIFsgIiR7Q1RfTElCQ19YTEREfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBDVF9Eb0xvZyBFWFRSQSAiSW5zdGFsbGluZyBhIGNyb3NzLWxkZCBoZWxwZXIiCisgICAgICAgIHNlZCAtciAtZSAnc3xAQENUX1ZFUlNJT05AQHwnIiR7Q1RfVkVSU0lPTn0iJ3xnOycgICBcCisgICAgICAgICAgICAgICAtZSAnc3xAQENUX1RBUkdFVEBAfCciJHtDVF9UQVJHRVR9Iid8ZzsnICAgICBcCisgICAgICAgICAgICAgICAtZSAnc3xAQENUX0JJVFNAQHwnIiR7Q1RfQVJDSF9CSVRORVNTfSInfGc7JyBcCisgICAgICAgICAgICAgICAtZSAnc3xAQENUX2luc3RhbGxAQHwnIiR7aW5zdGFsbH0iJ3xnOycgICAgICBcCisgICAgICAgICAgICAgICAtZSAnc3xAQENUX2Jhc2hAQHwnIiR7YmFzaH0iJ3xnOycgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAtZSAnc3xAQENUX2dyZXBAQHwnIiR7Z3JlcH0iJ3xnOycgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAtZSAnc3xAQENUX21ha2VAQHwnIiR7bWFrZX0iJ3xnOycgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAtZSAnc3xAQENUX3NlZEBAfCciJHtzZWR9Iid8ZzsnICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAiJHtDVF9MSUJfRElSfS9zY3JpcHRzL3hsZGQuaW4iICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICA+IiR7Q1RfUFJFRklYX0RJUn0vYmluLyR7Q1RfVEFSR0VUfS1sZGQiCisgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgY2htb2QgNzU1ICIke0NUX1BSRUZJWF9ESVJ9L2Jpbi8ke0NUX1RBUkdFVH0tbGRkIgorICAgIGZpCisKKyAgICAjIENyZWF0ZSB0aGUgYWxpYXNlcyB0byB0aGUgdGFyZ2V0IHRvb2xzCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkNyZWF0aW5nIHRvb2xjaGFpbiBhbGlhc2VzIgorICAgIENUX1B1c2hkICIke0NUX1BSRUZJWF9ESVJ9L2JpbiIKKyAgICBmb3IgdCBpbiAiJHtDVF9UQVJHRVR9LSIqOyBkbworICAgICAgICBpZiBbIC1uICIke0NUX1RBUkdFVF9BTElBU30iIF07IHRoZW4KKyAgICAgICAgICAgIF90PSQoZWNobyAiJHQiIHxzZWQgLXIgLWUgJ3MvXiciJHtDVF9UQVJHRVR9IictLyciJHtDVF9UQVJHRVRfQUxJQVN9IictLzsnKQorICAgICAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCBsbiAtc2Z2ICIke3R9IiAiJHtfdH0iCisgICAgICAgIGZpCisgICAgICAgIGlmIFsgLW4gIiR7Q1RfVEFSR0VUX0FMSUFTX1NFRF9FWFBSfSIgXTsgdGhlbgorICAgICAgICAgICAgX3Q9JChlY2hvICIkdCIgfHNlZCAtciAtZSAiJHtDVF9UQVJHRVRfQUxJQVNfU0VEX0VYUFJ9IikKKyAgICAgICAgICAgIGlmIFsgIiR7X3R9IiA9ICIke3R9IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgQ1RfRG9Mb2cgV0FSTiAiVGhlIHNlZCBleHByZXNzaW9uICcke0NUX1RBUkdFVF9BTElBU19TRURfRVhQUn0nIGhhcyBubyBlZmZlY3Qgb24gJyR7dH0nIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgbG4gLXNmdiAiJHt0fSIgIiR7X3R9IgorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICBkb25lCisgICAgQ1RfUG9wZAorCisgICAgQ1RfRG9Mb2cgRVhUUkEgIlJlbW92aW5nIGFjY2VzcyB0byB0aGUgYnVpbGQgc3lzdGVtIHRvb2xzIgorICAgIENUX0RvRXhlY0xvZyBERUJVRyBybSAtcmYgIiR7Q1RfUFJFRklYX0RJUn0vYnVpbGR0b29scyIKKworICAgICMgUmVtb3ZlIHRoZSBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcworICAgIGlmIFsgIiR7Q1RfUkVNT1ZFX0RPQ1N9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIENUX0RvTG9nIEVYVFJBICJSZW1vdmluZyBpbnN0YWxsZWQgZG9jdW1lbnRhdGlvbiIKKyAgICAgICAgQ1RfRG9Gb3JjZVJtZGlyICIke0NUX1BSRUZJWF9ESVJ9LyJ7LHVzci99eyxzaGFyZS99e21hbixpbmZvfQorICAgICAgICBDVF9Eb0ZvcmNlUm1kaXIgIiR7Q1RfU1lTUk9PVF9ESVJ9LyJ7LHVzci99eyxzaGFyZS99e21hbixpbmZvfQorICAgICAgICBDVF9Eb0ZvcmNlUm1kaXIgIiR7Q1RfREVCVUdST09UX0RJUn0vInssdXNyL317LHNoYXJlL317bWFuLGluZm99CisgICAgZmkKKworICAgICMgUmVtb3ZlIHRoZSBsaWIqIHN5bWxpbmtzLCBub3c6CisgICAgIyBUaGUgc3ltbGlua3MgYXJlIG5lZWRlZCBvbmx5IGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4KKyAgICAjIFRoZSBmaW5hbCBnY2Mgd2lsbCBzdGlsbCBzZWFyY2ggdGhvc2UgZGlycywgYnV0IHdpbGwgYWxzbyBzZWFyY2gKKyAgICAjIHRoZSBzdGFuZGFyZCBsaWIvIGRpcnMsIHNvIHdlIGNhbiBnZXQgcmlkIG9mIHRoZSBzeW1saW5rcworICAgIENUX0RvRXhlY0xvZyBBTEwgcm0gLWYgIiR7Q1RfUFJFRklYX0RJUn0vbGliMzIiCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBybSAtZiAiJHtDVF9QUkVGSVhfRElSfS9saWI2NCIKKworICAgIENUX0VuZFN0ZXAKK30KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9rZXJuZWwvYmFyZS1tZXRhbC5zaCBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9rZXJuZWwvYmFyZS1tZXRhbC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjlmNjNmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2tlcm5lbC9iYXJlLW1ldGFsLnNoCkBAIC0wLDAgKzEsMjAgQEAKKyMgVGhpcyBmaWxlIGRlY2xhcmVzIGZ1bmN0aW9ucyBmb3IgYmFyZSBtZXRhbCBrZXJuZWwgKElFLiBub25lKQorIyBDb3B5cmlnaHQgMjAwOCBZYW5uIEUuIE1PUklOCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgdjIuIFNlZSBDT1BZSU5HIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZQorCitDVF9Eb0tlcm5lbFR1cGxlVmFsdWVzKCkgeworICAgICMgRm9yIGJhcmUtbWV0YWwsIHRoZXJlIGlzIG5vIGtlcm5lbCBwYXJ0IGluIHRoZSB0dXBsZQorICAgIENUX1RBUkdFVF9LRVJORUw9Cit9CisKK2RvX2tlcm5lbF9nZXQoKSB7CisgICAgOgorfQorCitkb19rZXJuZWxfZXh0cmFjdCgpIHsKKyAgICA6Cit9CisKK2RvX2tlcm5lbF9oZWFkZXJzKCkgeworICAgIDoKK30KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9rZXJuZWwvbGludXguc2ggYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQva2VybmVsL2xpbnV4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZmJlNmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQva2VybmVsL2xpbnV4LnNoCkBAIC0wLDAgKzEsMTYzIEBACisjIFRoaXMgZmlsZSBkZWNsYXJlcyBmdW5jdGlvbnMgdG8gaW5zdGFsbCB0aGUga2VybmVsIGhlYWRlcnMgZm9yIGxpbnV4CisjIENvcHlyaWdodCAyMDA3IFlhbm4gRS4gTU9SSU4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIEdQTCB2Mi4gU2VlIENPUFlJTkcgaW4gdGhlIHJvb3Qgb2YgdGhpcyBwYWNrYWdlCisKK0NUX0RvS2VybmVsVHVwbGVWYWx1ZXMoKSB7CisgICAgaWYgWyAiJHtDVF9BUkNIX1VTRV9NTVV9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIENUX1RBUkdFVF9LRVJORUw9ImxpbnV4IgorICAgIGVsc2UKKyAgICAjIFNvbWV0aW1lLCBub01NVSBsaW51eCB0YXJnZXRzIGhhdmUgYSAtdWNsaW51eCB0dXBsZSwgd2hpbGUKKyAgICAjIHNvbWV0aW1lIGl0J3MgLWxpbnV4LiBXZSBjdXJyZW50bHkgaGF2ZSBvbmx5IG9uZSBub01NVSBsaW51eAorICAgICMgdGFyZ2V0LCBhbmQgaXQgdXNlcyAtbGludXgsIHNvIGxldCdzIGp1c3QgdXNlIHRoYXQuIFRpbWUKKyAgICAjIHRvIGZpeCB0aGF0IGxhdGVyLi4uCisgICAgIyAgICBDVF9UQVJHRVRfS0VSTkVMPSJ1Y2xpbnV4IgorICAgICAgICBDVF9UQVJHRVRfS0VSTkVMPSJsaW51eCIKKyAgICBmaQorfQorCisjIERvd25sb2FkIHRoZSBrZXJuZWwKK2RvX2tlcm5lbF9nZXQoKSB7CisgICAgbG9jYWwga192ZXIKKyAgICBsb2NhbCBjdXN0b21fbmFtZQorICAgIGxvY2FsIHJlbF9kaXIKKyAgICBsb2NhbCBrb3JnX2Jhc2UgbWlycm9yX2Jhc2UKKworICAgIGlmIFsgIiR7Q1RfS0VSTkVMX0xJTlVYX1VTRV9DVVNUT01fSEVBREVSU30iID0gInkiICBdOyB0aGVuCisgICAgICAgIHJldHVybiAwCisgICAgZmkKKworICAgIGlmIFsgIiR7Q1RfS0VSTkVMX0xJTlVYX0NVU1RPTX0iID0gInkiIF07IHRoZW4KKyAgICAgICAgaWYgWyAhIC1kICIke0NUX0tFUk5FTF9MSU5VWF9DVVNUT01fTE9DQVRJT059IiBdOyB0aGVuCisgICAgICAgICAgICAjIFdlZSBuZWVkIHRvIGtub3cgdGhlIGN1c3RvbSB0YXJiYWxsIGV4dGVuc2lvbiwKKyAgICAgICAgICAgICMgc28gd2UgY2FuIGNyZWF0ZSBhIHByb3Blcmx5LW5hbWVkIHN5bWxpbmssIHdoaWNoCisgICAgICAgICAgICAjIHdlIHVzZSBsYXRlciBvbiBpbiAnZXh0cmFjdCcKKyAgICAgICAgICAgIGNhc2UgIiR7Q1RfS0VSTkVMX0xJTlVYX0NVU1RPTV9MT0NBVElPTn0iIGluCisgICAgICAgICAgICAgICAgKi50YXIuYnoyKSAgICAgIGN1c3RvbV9uYW1lPSJsaW51eC1jdXN0b20udGFyLmJ6MiI7OworICAgICAgICAgICAgICAgICoudGFyLmd6fCoudGd6KSBjdXN0b21fbmFtZT0ibGludXgtY3VzdG9tLnRhci5neiI7OworICAgICAgICAgICAgICAgICoudGFyKSAgICAgICAgICBjdXN0b21fbmFtZT0ibGludXgtY3VzdG9tLnRhciI7OworICAgICAgICAgICAgICAgICopICBDVF9BYm9ydCAiVW5rbm93biBleHRlbnNpb24gZm9yIGN1c3RvbSBsaW51eCB0YXJiYWxsICcke0NUX0tFUk5FTF9MSU5VWF9DVVNUT01fTE9DQVRJT059JyI7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgQ1RfRG9FeGVjTG9nIERFQlVHIGxuIC1zZiAiJHtDVF9LRVJORUxfTElOVVhfQ1VTVE9NX0xPQ0FUSU9OfSIgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiR7Q1RfVEFSQkFMTFNfRElSfS8ke2N1c3RvbV9uYW1lfSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY3VzdG9tX25hbWU9ImxpbnV4LWN1c3RvbSIKKyAgICAgICAgICAgIENUX0RvRXhlY0xvZyBERUJVRyBsbiAtcyAiJHtDVF9LRVJORUxfTElOVVhfQ1VTVE9NX0xPQ0FUSU9OfSIgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiR7Q1RfU1JDX0RJUn0vJHtjdXN0b21fbmFtZX0iCisgICAgICAgIGZpCisgICAgZWxzZSAjIE5vdCBhIGN1c3RvbSB0YXJiYWxsCisgICAgICAgIGNhc2UgIiR7Q1RfS0VSTkVMX1ZFUlNJT059IiBpbgorICAgICAgICAgICAgMi42LiouKnwzLiouKikKKyAgICAgICAgICAgICAgICAjIDQtcGFydCB2ZXJzaW9ucyAoZm9yIDIuNiBzdGFibGVzIGFuZCBsb25nLXRlcm1zKSwgYW5kCisgICAgICAgICAgICAgICAgIyAzLXBhcnQgdmVyc2lvbnMgKGZvciAzLngueSBzdGFibGVzIGFuZCBsb25nLXRlcm1zKSwKKyAgICAgICAgICAgICAgICAjIHdlIG5lZWQgdG8gdHJhc2ggdGhlIGxhc3QgZGlnaXQKKyAgICAgICAgICAgICAgICBrX3Zlcj0iJHtDVF9LRVJORUxfVkVSU0lPTiUuKn0iCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIDIuNi4qfDMuKikKKyAgICAgICAgICAgICAgICAjIDMtcGFydCB2ZXJzaW9uIChmb3IgMi42LnggaW5pdGlhbCByZWxlYXNlcyksIGFuZCAyLXBhcnQKKyAgICAgICAgICAgICAgICAjIHZlcnNpb25zIChmb3IgMy54IGluaXRpYWwgcmVsZWFzZXMpLCB1c2UgYWxsIG9mIGl0CisgICAgICAgICAgICAgICAga192ZXI9IiR7Q1RfS0VSTkVMX1ZFUlNJT059IgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgY2FzZSAiJHtDVF9LRVJORUxfVkVSU0lPTn0iIGluCisgICAgICAgICAgICAyLjYuKikgIHJlbF9kaXI9djIuNjs7CisgICAgICAgICAgICAzLiopICAgIHJlbF9kaXI9djMueDs7CisgICAgICAgIGVzYWMKKyAgICAgICAga29yZ19iYXNlPSJodHRwOi8vZnRwLmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC8ke3JlbF9kaXJ9IgorICAgICAgICBtaXJyb3JfYmFzZT0iaHR0cDovL2Z0cC5mcmVlLmZyL21pcnJvcnMvZnRwLmtlcm5lbC5vcmcvL2xpbnV4L2tlcm5lbC8ke3JlbF9kaXJ9IgorICAgICAgICBDVF9HZXRGaWxlICJsaW51eC0ke0NUX0tFUk5FTF9WRVJTSU9OfSIgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICIke2tvcmdfYmFzZX0iICIke2tvcmdfYmFzZX0vbG9uZ3Rlcm0vdiR7a192ZXJ9IiAgICAgXAorICAgICAgICAgICAgICAgICAgICIke21pcnJvcl9iYXNlfSIgIiR7bWlycm9yX2Jhc2V9L2xvbmd0ZXJtL3Yke2tfdmVyfSIKKyAgICBmaQorfQorCisjIEV4dHJhY3Qga2VybmVsCitkb19rZXJuZWxfZXh0cmFjdCgpIHsKKyAgICBpZiBbICIke0NUX0tFUk5FTF9MSU5VWF9VU0VfQ1VTVE9NX0hFQURFUlN9IiA9ICJ5IiBcCisgICAgICAgICAtbyAtZCAiJHtDVF9LRVJORUxfTElOVVhfQ1VTVE9NX0xPQ0FUSU9OfSIgXTsgdGhlbgorICAgICAgICByZXR1cm4gMAorICAgIGZpCisgICAKKyAgICAjIFRoaXMgYWxzbyBoYW5kbGVzIHRoZSBjdXN0b20gdGFyYmFsbAorICAgIENUX0V4dHJhY3QgImxpbnV4LSR7Q1RfS0VSTkVMX1ZFUlNJT059IgorICAgIENUX1BhdGNoICJsaW51eCIgIiR7Q1RfS0VSTkVMX1ZFUlNJT059IgorfQorCisjIFdyYXBwZXIgdG8gdGhlIGFjdHVhbCBoZWFkZXJzIGluc3RhbGwgbWV0aG9kCitkb19rZXJuZWxfaGVhZGVycygpIHsKKyAgICBDVF9Eb1N0ZXAgSU5GTyAiSW5zdGFsbGluZyBrZXJuZWwgaGVhZGVycyIKKworICAgIGlmIFsgIiR7Q1RfS0VSTkVMX0xJTlVYX1VTRV9DVVNUT01fSEVBREVSU30iID0gInkiIF07IHRoZW4KKyAgICAgICAgZG9fa2VybmVsX2N1c3RvbQorICAgIGVsc2UKKyAgICAgICAgZG9fa2VybmVsX2luc3RhbGwKKyAgICBmaQorCisgICAgQ1RfRW5kU3RlcAorfQorCisjIEluc3RhbGwga2VybmVsIGhlYWRlcnMgdXNpbmcgaGVhZGVyc19pbnN0YWxsIGZyb20ga2VybmVsIHNvdXJjZXMuCitkb19rZXJuZWxfaW5zdGFsbCgpIHsKKyAgICBsb2NhbCBrZXJuZWxfcGF0aAorCisgICAgQ1RfRG9Mb2cgREVCVUcgIlVzaW5nIGtlcm5lbCdzIGhlYWRlcnNfaW5zdGFsbCIKKworICAgIG1rZGlyIC1wICIke0NUX0JVSUxEX0RJUn0vYnVpbGQta2VybmVsLWhlYWRlcnMiCisKKyAgICBrZXJuZWxfcGF0aD0iJHtDVF9TUkNfRElSfS9saW51eC0ke0NUX0tFUk5FTF9WRVJTSU9OfSIKKyAgICBpZiBbICIke0NUX0tFUk5FTF9MSU5VWF9DVVNUT019IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIGtlcm5lbF9wYXRoPSIke0NUX1NSQ19ESVJ9L2xpbnV4LWN1c3RvbSIKKyAgICBmaQorICAgIFZfT1BUPSJWPSR7Q1RfS0VSTkVMX0xJTlVYX1ZFUkJPU0VfTEVWRUx9IgorCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkluc3RhbGxpbmcga2VybmVsIGhlYWRlcnMiCisgICAgQ1RfRG9FeGVjTG9nIEFMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWtlIC1DICIke2tlcm5lbF9wYXRofSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgTz0iJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLWtlcm5lbC1oZWFkZXJzIiAgICAgICBcCisgICAgICAgICBBUkNIPSR7Q1RfQVJDSH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIElOU1RBTExfSERSX1BBVEg9IiR7Q1RfU1lTUk9PVF9ESVJ9L3VzciIgICAgICAgXAorICAgICAgICAgJHtWX09QVH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICBoZWFkZXJzX2luc3RhbGwKKworICAgIGlmIFsgIiR7Q1RfS0VSTkVMX0xJTlVYX0lOU1RBTExfQ0hFQ0t9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIENUX0RvTG9nIEVYVFJBICJDaGVja2luZyBpbnN0YWxsZWQgaGVhZGVycyIKKyAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbWFrZSAtQyAiJHtrZXJuZWxfcGF0aH0iICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICBPPSIke0NUX0JVSUxEX0RJUn0vYnVpbGQta2VybmVsLWhlYWRlcnMiICAgICAgIFwKKyAgICAgICAgICAgICBBUkNIPSR7Q1RfQVJDSH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICBJTlNUQUxMX0hEUl9QQVRIPSIke0NUX1NZU1JPT1RfRElSfS91c3IiICAgICAgIFwKKyAgICAgICAgICAgICAke1ZfT1BUfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICBoZWFkZXJzX2NoZWNrCisgICAgZmkKKworICAgICMgQ2xlYW51cAorICAgIGZpbmQgIiR7Q1RfU1lTUk9PVF9ESVJ9IiAtdHlwZSBmICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcKCAgICAtbmFtZSAnLmluc3RhbGwnICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtbyAtbmFtZSAnLi5pbnN0YWxsLmNtZCcgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtbyAtbmFtZSAnLmNoZWNrJyAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtbyAtbmFtZSAnLi5jaGVjay5jbWQnICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZXhlYyBybSB7fSBcOworfQorCisjIFVzZSBjdXN0b20gaGVhZGVycyAobW9zdCBwcm9iYWJseSBieSB1c2luZyBtYWtlIGhlYWRlcnNfaW5zdGFsbCBpbiBhCisjIG1vZGlmaWVkIChyZWFkOiBjdXN0b21pc2VkKSBrZXJuZWwgdHJlZSwgb3IgdXNpbmcgcHJlLTIuNi4xOCBoZWFkZXJzLCBzdWNoCisjIGFzIDIuNCkuIEluIHRoaXMgY2FzZSwgc2ltcGx5IGNvcHkgdGhlIGhlYWRlcnMgaW4gcGxhY2UKK2RvX2tlcm5lbF9jdXN0b20oKSB7CisgICAgbG9jYWwgdGFyX29wdAorCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkluc3RhbGxpbmcgY3VzdG9tIGtlcm5lbCBoZWFkZXJzIgorCisgICAgbWtkaXIgLXAgIiR7Q1RfU1lTUk9PVF9ESVJ9L3VzciIKKyAgICBjZCAiJHtDVF9TWVNST09UX0RJUn0vdXNyIgorICAgIGlmIFsgIiR7Q1RfS0VSTkVMX0xJTlVYX0NVU1RPTV9JU19UQVJCQUxMfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBjYXNlICIke0NUX0tFUk5FTF9MSU5VWF9DVVNUT01fUEFUSH0iIGluCisgICAgICAgICAgICAqLnRhcikgICAgICA7OworICAgICAgICAgICAgKi50Z3opICAgICAgdGFyX29wdD0tLWd6aXA7OworICAgICAgICAgICAgKi50YXIuZ3opICAgdGFyX29wdD0tLWd6aXA7OworICAgICAgICAgICAgKi50YXIuYnoyKSAgdGFyX29wdD0tLWJ6aXAyOzsKKyAgICAgICAgZXNhYworICAgICAgICBDVF9Eb0V4ZWNMb2cgQUxMIHRhciB4ICR7dGFyX29wdH0gLXZmICR7Q1RfS0VSTkVMX0xJTlVYX0NVU1RPTV9QQVRIfQorICAgIGVsc2UKKyAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCBjcCAtcnYgIiR7Q1RfS0VSTkVMX0xJTlVYX0NVU1RPTV9QQVRIfS9pbmNsdWRlIiAuCisgICAgZmkKK30KZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9rZXJuZWwvbWluZ3czMi5zaCBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9rZXJuZWwvbWluZ3czMi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGFiNmM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2tlcm5lbC9taW5ndzMyLnNoCkBAIC0wLDAgKzEsMjcgQEAKKyMgVGhpcyBmaWxlIGRlY2xhcmVzIGZ1bmN0aW9ucyB0byBpbnN0YWxsIHRoZSBrZXJuZWwgaGVhZGVycyBmb3IgbWluZ3cKKyMgQ29weXJpZ2h0IDIwMDkgQmFydCB2ZHIuIE1ldWxlbgorIyBMaWNlbnNlZCB1bmRlciB0aGUgR1BMIHYyLiBTZWUgQ09QWUlORyBpbiB0aGUgcm9vdCBvZiB0aGlzIHBhY2thZ2UKKworQ1RfRG9LZXJuZWxUdXBsZVZhbHVlcygpIHsKKyAgICBDVF9UQVJHRVRfS0VSTkVMPSJtaW5ndzMyIgorICAgIENUX1RBUkdFVF9TWVM9Cit9CisKK2RvX2tlcm5lbF9nZXQoKSB7CisgICAgQ1RfR2V0RmlsZSAidzMyYXBpLSR7Q1RfVzMyQVBJX1ZFUlNJT059LW1pbmd3MzItc3JjIiBcCisgICAgICAgIGh0dHA6Ly9kb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L3NvdXJjZWZvcmdlL21pbmd3Cit9CisKK2RvX2tlcm5lbF9leHRyYWN0KCkgeworICAgIENUX0V4dHJhY3QgInczMmFwaS0ke0NUX1czMkFQSV9WRVJTSU9OfS1taW5ndzMyLXNyYyIKK30KKworZG9fa2VybmVsX2hlYWRlcnMoKSB7CisgICAgQ1RfRG9TdGVwIElORk8gIkluc3RhbGxpbmcga2VybmVsIGhlYWRlcnMiCisKKyAgICBta2RpciAtcCAiJHtDVF9IRUFERVJTX0RJUn0iCisgICAgY3AgLXIgJHtDVF9TUkNfRElSfS93MzJhcGktJHtDVF9XMzJBUElfVkVSU0lPTn0tbWluZ3czMi1zcmMvaW5jbHVkZS8qICAgXAorICAgICAgICAgICR7Q1RfSEVBREVSU19ESVJ9CisKKyAgICBDVF9FbmRTdGVwCit9CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvbGliYy9lZ2xpYmMuc2ggYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvbGliYy9lZ2xpYmMuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMwZGRjMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9saWJjL2VnbGliYy5zaApAQCAtMCwwICsxLDE3MSBAQAorIyBlZ2xpYmMgYnVpbGQgZnVuY3Rpb25zIChpbml0aWFsbHkgYnkgVGhvbWFzIEpPVVJEQU4pLgorCisjIEFkZCB0aGUgZGVmaW5pdGlvbnMgY29tbW9uIHRvIGdsaWJjIGFuZCBlZ2xpYmMKKyMgICBkb19saWJjX2V4dHJhY3QKKyMgICBkb19saWJjX3N0YXJ0X2ZpbGVzCisjICAgZG9fbGliYworIyAgIGRvX2xpYmNfZmluaXNoCisjICAgZG9fbGliY19hZGRfb25zX2xpc3QKKyMgICBkb19saWJjX21pbl9rZXJuZWxfY29uZmlnCisuICIke0NUX0xJQl9ESVJ9L3NjcmlwdHMvYnVpbGQvbGliYy9nbGliYy1lZ2xpYmMuc2gtY29tbW9uIgorCisjIERvd25sb2FkIGdsaWJjCisjIGVnbGliYyBpcyBvbmx5IGF2YWlsYWJsZSB0aHJvdWdoIHN1YnZlcnNpb24sIHRoZXJlIGFyZSBubworIyBzbmFwc2hvdHMgYXZhaWxhYmxlLgorZG9fbGliY19nZXQoKSB7CisgICAgbG9jYWwgYWRkb24KKyAgICBsb2NhbCAtYSBleHRyYV9hZGRvbnMKKyAgICBsb2NhbCBzdm5fYmFzZQorCisgICAgaWYgWyAiJHtDVF9FR0xJQkNfSFRUUH0iID0gInkiIF07IHRoZW4KKyAgICAgICAgc3ZuX2Jhc2U9Imh0dHA6Ly93d3cuZWdsaWJjLm9yZy9zdm4iCisgICAgZWxzZQorICAgICAgICBzdm5fYmFzZT0ic3ZuOi8vc3ZuLmVnbGliYy5vcmciCisgICAgZmkKKworICAgIGNhc2UgIiR7Q1RfTElCQ19WRVJTSU9OfSIgaW4KKyAgICAgICAgdHJ1bmspICBzdm5fYmFzZSs9Ii90cnVuayI7OworICAgICAgICAqKSAgICAgIHN2bl9iYXNlKz0iL2JyYW5jaGVzL2VnbGliYy0ke0NUX0xJQkNfVkVSU0lPTn0iOzsKKyAgICBlc2FjCisKKyAgICBDVF9HZXRTVk4gImVnbGliYy0ke0NUX0xJQkNfVkVSU0lPTn0iICAgXAorICAgICAgICAgICAgICAiJHtzdm5fYmFzZX0vbGliYyIgICAgICAgICAgICBcCisgICAgICAgICAgICAgICIke0NUX0VHTElCQ19SRVZJU0lPTjotSEVBRH0iCisKKyAgICBpZiBbICIke0NUX0xJQkNfTE9DQUxFU30iID0gInkiIF07IHRoZW4KKyAgICAgICAgZXh0cmFfYWRkb25zKz0oImxvY2FsZWRlZiIpCisgICAgZmkKKworICAgIGZvciBhZGRvbiBpbiAkKGRvX2xpYmNfYWRkX29uc19saXN0ICIgIikgIiR7ZXh0cmFfYWRkb25zW0BdfSI7IGRvCisgICAgICAgICMgTmV2ZXIgZXZlciB0cnkgdG8gZG93bmxvYWQgdGhlc2UgYWRkLW9ucywKKyAgICAgICAgIyB0aGV5J3ZlIGFsd2F5cyBiZWVuIGludGVybmFsCisgICAgICAgIGNhc2UgIiR7YWRkb259IiBpbgorICAgICAgICAgICAgbnB0bCkgICBjb250aW51ZTs7CisgICAgICAgIGVzYWMKKworICAgICAgICBpZiAhIENUX0dldFNWTiAiZWdsaWJjLSR7YWRkb259LSR7Q1RfTElCQ19WRVJTSU9OfSIgXAorICAgICAgICAgICAgICAgICAgICAgICAiJHtzdm5fYmFzZX0vJHthZGRvbn0iICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAiJHtDVF9FR0xJQkNfUkVWSVNJT046LUhFQUR9IgorICAgICAgICB0aGVuCisgICAgICAgICAgICAjIFNvbWUgYWRkLW9ucyBhcmUgYnVuZGxlZCB3aXRoIHRoZSBtYWluIHNvdXJjZXMKKyAgICAgICAgICAgICMgc28gZmFpbHVyZSB0byBkb3dubG9hZCB0aGVtIGlzIGV4cGVjdGVkCisgICAgICAgICAgICBDVF9Eb0xvZyBERUJVRyAiQWRkb24gJyR7YWRkb259JyBjb3VsZCBub3QgYmUgZG93bmxvYWRlZC4iCisgICAgICAgICAgICBDVF9Eb0xvZyBERUJVRyAiV2UnbGwgc2VlIGxhdGVyIGlmIHdlIGNhbiBmaW5kIGl0IGluIHRoZSBzb3VyY2UgdHJlZSIKKyAgICAgICAgZmkKKyAgICBkb25lCit9CisKKyMgQ29weSB1c2VyIHByb3ZpZGVkIGVnbGliYyBjb25maWd1cmF0aW9uIGZpbGUgaWYgcHJvdmlkZWQKK2RvX2xpYmNfY2hlY2tfY29uZmlnKCkgeworICAgIGlmIFsgIiR7Q1RfRUdMSUJDX0NVU1RPTV9DT05GSUd9IiAhPSAieSIgXTsgdGhlbgorICAgICAgICByZXR1cm4gMAorICAgIGZpCisKKyAgICBDVF9Eb1N0ZXAgSU5GTyAiQ2hlY2tpbmcgQyBsaWJyYXJ5IGNvbmZpZ3VyYXRpb24iCisKKyAgICBDVF9UZXN0T3JBYm9ydCAiWW91IGRpZCBub3QgcHJvdmlkZSBhbiBlZ2xpYmMgY29uZmlnIGZpbGUhIiBcCisgICAgICAgIC1uICIke0NUX0VHTElCQ19PUFRJT05fR1JPVVBTX0ZJTEV9IiAtYSBcCisgICAgICAgIC1mICIke0NUX0VHTElCQ19PUFRJT05fR1JPVVBTX0ZJTEV9IgorCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBjcCAiJHtDVF9FR0xJQkNfT1BUSU9OX0dST1VQU19GSUxFfSIgIiR7Q1RfQ09ORklHX0RJUn0vZWdsaWJjLmNvbmZpZyIKKworICAgICMgTlNTIGNvbmZpZ3VyYXRpb24KKyAgICBpZiBncmVwIC1FICdeT1BUSU9OX0VHTElCQ19OU1NXSVRDSFtbOnNwYWNlOl1dKj1bWzpzcGFjZTpdXSpuJyAiJHtDVF9FR0xJQkNfT1BUSU9OX0dST1VQU19GSUxFfSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgIENUX0RvTG9nIERFQlVHICJVc2luZyBmaXhlZC1jb25maWd1cmF0aW9uIG5zc3dpdGNoIGZhY2lsaXR5IgorCisgICAgICAgIGlmIFsgIiR7Q1RfRUdMSUJDX0JVTkRMRURfTlNTX0NPTkZJR30iID0gInkiIF07IHRoZW4KKyAgICAgICAgICAgIG5zc19jb25maWc9IiR7Q1RfU1JDX0RJUn0vZWdsaWJjLSR7Q1RfTElCQ19WRVJTSU9OfS9uc3MvZml4ZWQtbnNzd2l0Y2guY29uZiIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbnNzX2NvbmZpZz0iJHtDVF9FR0xJQkNfTlNTX0NPTkZJR19GSUxFfSIKKyAgICAgICAgZmkKKyAgICAgICAgQ1RfVGVzdE9yQWJvcnQgIk5TUyBjb25maWcgZmlsZSBub3QgZm91bmQhIiAtbiAiJHtuc3NfY29uZmlnfSIgLWEgLWYgIiR7bnNzX2NvbmZpZ30iCisKKyAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCBjcCAiJHtuc3NfY29uZmlnfSIgIiR7Q1RfQ09ORklHX0RJUn0vbnNzd2l0Y2guY29uZmlnIgorICAgICAgICBlY2hvICJPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0NPTkZJRyA9ICR7Q1RfQ09ORklHX0RJUn0vbnNzd2l0Y2guY29uZmlnIiBcCisgICAgICAgICAgICA+PiAiJHtDVF9DT05GSUdfRElSfS9lZ2xpYmMuY29uZmlnIgorCisgICAgICAgIGlmIFsgIiR7Q1RfRUdMSUJDX0JVTkRMRURfTlNTX0ZVTkNUSU9OU30iID0gInkiIF07IHRoZW4KKyAgICAgICAgICAgIG5zc19mdW5jdGlvbnM9IiR7Q1RfU1JDX0RJUn0vZWdsaWJjLSR7Q1RfTElCQ19WRVJTSU9OfS9uc3MvZml4ZWQtbnNzd2l0Y2guZnVuY3Rpb25zIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBuc3NfZnVuY3Rpb25zPSIke0NUX0VHTElCQ19OU1NfRlVOQ1RJT05TX0ZJTEV9IgorICAgICAgICBmaQorICAgICAgICBDVF9UZXN0T3JBYm9ydCAiTlNTIGZ1bmN0aW9ucyBmaWxlIG5vdCBmb3VuZCEiIC1uICIke25zc19mdW5jdGlvbnN9IiAtYSAtZiAiJHtuc3NfZnVuY3Rpb25zfSIKKworICAgICAgICBDVF9Eb0V4ZWNMb2cgQUxMIGNwICIke25zc19mdW5jdGlvbnN9IiAiJHtDVF9DT05GSUdfRElSfS9uc3N3aXRjaC5mdW5jdGlvbnMiCisgICAgICAgIGVjaG8gIk9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfRlVOQ1RJT05TID0gJHtDVF9DT05GSUdfRElSfS9uc3N3aXRjaC5mdW5jdGlvbnMiIFwKKyAgICAgICAgICAgID4+ICIke0NUX0NPTkZJR19ESVJ9L2VnbGliYy5jb25maWciCisgICAgZWxzZQorICAgICAgICBDVF9Eb0xvZyBERUJVRyAiVXNpbmcgZnVsbC1ibG93biBuc3N3aXRjaCBmYWNpbGl0eSIKKyAgICBmaQorCisgICAgQ1RfRW5kU3RlcAorfQorCisjIEV4dHJhY3QgdGhlIGZpbGVzIHJlcXVpcmVkIGZvciB0aGUgbGliYyBsb2NhbGVzCitkb19saWJjX2xvY2FsZXNfZXh0cmFjdCgpIHsKKyAgICBDVF9FeHRyYWN0ICJlZ2xpYmMtbG9jYWxlZGVmLSR7Q1RfTElCQ19WRVJTSU9OfSIKKyAgICBDVF9QYXRjaCAiZWdsaWJjIiAibG9jYWxlZGVmLSR7Q1RfTElCQ19WRVJTSU9OfSIKK30KKworIyBCdWlsZCBhbmQgaW5zdGFsbCB0aGUgbGliYyBsb2NhbGVzCitkb19saWJjX2xvY2FsZXMoKSB7CisgICAgbG9jYWwgbGliY19zcmNfZGlyPSIke0NUX1NSQ19ESVJ9L2VnbGliYy0ke0NUX0xJQkNfVkVSU0lPTn0iCisgICAgbG9jYWwgc3JjX2Rpcj0iJHtDVF9TUkNfRElSfS9lZ2xpYmMtbG9jYWxlZGVmLSR7Q1RfTElCQ19WRVJTSU9OfSIKKyAgICBsb2NhbCAtYSBleHRyYV9jb25maWcKKyAgICBsb2NhbCAtYSBsb2NhbGVkZWZfb3B0cworCisgICAgbWtkaXIgLXAgIiR7Q1RfQlVJTERfRElSfS9idWlsZC1sb2NhbGVkZWYiCisgICAgY2QgIiR7Q1RfQlVJTERfRElSfS9idWlsZC1sb2NhbGVkZWYiCisKKyAgICBDVF9Eb0xvZyBFWFRSQSAiQ29uZmlndXJpbmcgQyBsaWJyYXJ5IGxvY2FsZWRlZiIKKworICAgIGlmIFsgIiR7Q1RfTElCQ19FR0xJQkNfSEFTX1BLR1ZFUlNJT05fQlVHVVJMfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBleHRyYV9jb25maWcrPSgiLS13aXRoLXBrZ3ZlcnNpb249JHtDVF9QS0dWRVJTSU9OfSIpCisgICAgICAgIFsgLW4gIiR7Q1RfVE9PTENIQUlOX0JVR1VSTH0iIF0gJiYgZXh0cmFfY29uZmlnKz0oIi0td2l0aC1idWd1cmw9JHtDVF9UT09MQ0hBSU5fQlVHVVJMfSIpCisgICAgZmkKKworICAgIENUX0RvTG9nIERFQlVHICJFeHRyYSBjb25maWcgYXJncyBwYXNzZWQ6ICcke2V4dHJhX2NvbmZpZ1sqXX0nIgorCisgICAgIyAuL2NvbmZpZ3VyZSBpcyBtaXNsZWQgYnkgb3VyIHRvb2xzIG92ZXJyaWRlIHdyYXBwZXIgZm9yIGJhc2gKKyAgICAjIHNvIGp1c3QgdGVsbCBpdCB3aGVyZSB0aGUgcmVhbCBiYXNoIGlzIF9vbl90aGVfdGFyZ2V0XyEKKyAgICAjIE5vdGVzOgorICAgICMgLSAke2FjX2N2X3BhdGhfQkFTSF9TSEVMTH0gaXMgb25seSB1c2VkIHRvIHNldCBCQVNIX1NIRUxMCisgICAgIyAtICR7QkFTSF9TSEVMTH0gICAgICAgICAgICBpcyBvbmx5IHVzZWQgdG8gc2V0IEJBU0gKKyAgICAjIC0gJHtCQVNIfSAgICAgICAgICAgICAgICAgIGlzIG9ubHkgdXNlZCB0byBzZXQgdGhlIHNoZWJhbmcKKyAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHR3byBzY3JpcHRzIHRvIHJ1biBvbiB0aGUgdGFyZ2V0CisgICAgIyBTbyB3ZSBjYW4gc2FmZWx5IGJ5cGFzcyBiYXNoIGRldGVjdGlvbiBhdCBjb21waWxlIHRpbWUuCisgICAgIyBTaG91bGQgdGhpcyBjaGFuZ2UgaW4gYSBmdXR1cmUgZWdsaWJjIHJlbGVhc2UsIHdlJ2QgYmV0dGVyCisgICAgIyBkaXJlY3RseSBtYW5nbGUgdGhlIGdlbmVyYXRlZCBzY3JpcHRzIF9hZnRlcl8gdGhleSBnZXQgYnVpbHQsCisgICAgIyBvciBldmVuIGFmdGVyIHRoZXkgZ2V0IGluc3RhbGxlZC4uLiBlZ2xpYmMgaXMgc3VjaCBhIHN1Y2tlci4uLgorICAgIGVjaG8gImFjX2N2X3BhdGhfQkFTSF9TSEVMTD0vYmluL2Jhc2giID4+Y29uZmlnLmNhY2hlCisKKyAgICAjIENvbmZpZ3VyZSB3aXRoIC0tcHJlZml4IHRoZSB3YXkgd2Ugd2FudCBpdCBvbiB0aGUgdGFyZ2V0Li4uCisKKyAgICBDVF9Eb0V4ZWNMb2cgQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIENQUEZMQUdTPSItRE5PVF9JTl9saWJjIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiR7c3JjX2Rpcn0vY29uZmlndXJlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1wcmVmaXg9L3VzciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWNhY2hlLWZpbGU9IiQocHdkKS9jb25maWcuY2FjaGUiICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC0td2l0aC1nbGliYz0iJHtsaWJjX3NyY19kaXJ9IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIiR7ZXh0cmFfY29uZmlnW0BdfSIKKworICAgIENUX0RvTG9nIEVYVFJBICJCdWlsZGluZyBDIGxpYnJhcnkgbG9jYWxlZGVmIgorICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSAke0pPQlNGTEFHU30KKworICAgICMgU2V0IHRoZSBsb2NhbGVkZWYgZW5kaWFubmVzcyBvcHRpb24KKyAgICBjYXNlICIke0NUX0FSQ0hfQkV9LCR7Q1RfQVJDSF9MRX0iIGluCisgICAgICAgIHksKSBsb2NhbGVkZWZfb3B0cys9KC0tYmlnLWVuZGlhbik7OworICAgICAgICAseSkgbG9jYWxlZGVmX29wdHMrPSgtLWxpdHRsZS1lbmRpYW4pOzsKKyAgICBlc2FjCisKKyAgICAjIFNldCB0aGUgbG9jYWxlZGVmIG9wdGlvbiBmb3IgdGhlIHRhcmdldCdzIHVpbnQzMl90IGFsaWdubWVudCBpbiBieXRlcy4KKyAgICAjIFRoaXMgaXMgdGFyZ2V0LXNwZWNpZmljLCBidXQgZm9yIG5vdywgMzItYml0IGFsaWdubWVudCBzaG91bGQgd29yayBmb3IgYWxsCisgICAgIyBzdXBwb3J0ZWQgdGFyZ2V0cywgZXZlbiA2NC1iaXQgb25lcy4KKyAgICBsb2NhbGVkZWZfb3B0cys9KC0tdWludDMyLWFsaWduPTQpCisKKyAgICBDVF9Eb0xvZyBFWFRSQSAiSW5zdGFsbGluZyBDIGxpYnJhcnkgbG9jYWxlcyIKKyAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1ha2UgJHtKT0JTRkxBR1N9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAiTE9DQUxFREVGX09QVFM9JHtsb2NhbGVkZWZfb3B0c1sqXX0iICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxfcm9vdD0iJHtDVF9TWVNST09UX0RJUn0iICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbC1sb2NhbGVzCit9CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvbGliYy9nbGliYy1lZ2xpYmMuc2gtY29tbW9uIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2xpYmMvZ2xpYmMtZWdsaWJjLnNoLWNvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWYzYTlhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2xpYmMvZ2xpYmMtZWdsaWJjLnNoLWNvbW1vbgpAQCAtMCwwICsxLDM2NiBAQAorIyBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyBjb21tb24gdG8gZ2xpYmMgYW5kIGVnbGliYworCisjIEV4dHJhY3QgdGhlIEMgbGlicmFyeSB0YXJiYWxsKHMpCitkb19saWJjX2V4dHJhY3QoKSB7CisgICAgbG9jYWwgYWRkb24KKworICAgICMgRXh0cmFjdCB0aGUgbWFpbiB0YXJiYWxsCisgICAgQ1RfRXh0cmFjdCAiJHtDVF9MSUJDfS0ke0NUX0xJQkNfVkVSU0lPTn0iCisgICAgQ1RfUHVzaGQgIiR7Q1RfU1JDX0RJUn0vJHtDVF9MSUJDfS0ke0NUX0xJQkNfVkVSU0lPTn0iCisgICAgQ1RfUGF0Y2ggbm9jaGRpciAiJHtDVF9MSUJDfSIgIiR7Q1RfTElCQ19WRVJTSU9OfSIKKworICAgICMgRXh0cmFjdCB0aGUgYWRkLW9wbnMKKyAgICBmb3IgYWRkb24gaW4gJChkb19saWJjX2FkZF9vbnNfbGlzdCAiICIpOyBkbworICAgICAgICAjIElmIHRoZSBhZGRvbiB3YXMgYnVuZGxlZCB3aXRoIHRoZSBtYWluIGFyY2hpdmUsIHdlIGRvIG5vdAorICAgICAgICAjIG5lZWQgdG8gZXh0cmFjdCBpdC4gV29yc2UsIGlmIHdlIHdlcmUgdG8gdHJ5IHRvIGV4dHJhY3QKKyAgICAgICAgIyBpdCwgd2UnZCBnZXQgYW4gZXJyb3IuCisgICAgICAgIGlmIFsgLWQgIiR7YWRkb259IiBdOyB0aGVuCisgICAgICAgICAgICBDVF9Eb0xvZyBERUJVRyAiQWRkLW9uIGFscmVhZHkgcHJlc2VudCwgc3BraXBwaW5nIGV4dHJhY3Rpb24iCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmaQorCisgICAgICAgIENUX0V4dHJhY3Qgbm9jaGRpciAiJHtDVF9MSUJDfS0ke2FkZG9ufS0ke0NUX0xJQkNfVkVSU0lPTn0iCisKKyAgICAgICAgQ1RfVGVzdEFuZEFib3J0ICJFcnJvciBpbiBhZGQtb24gJyR7YWRkb259JzogYm90aCBzaG9ydCBhbmQgbG9uZyBuYW1lcyBpbiB0YXJiYWxsIiBcCisgICAgICAgICAgICAtZCAiJHthZGRvbn0iIC1hIC1kICIke0NUX0xJQkN9LSR7YWRkb259LSR7Q1RfTElCQ19WRVJTSU9OfSIKKworICAgICAgICAjIFNvbWUgYWRkb25zIGhhdmUgdGhlICdsb25nJyBuYW1lLCB3aGlsZSBvdGhlcnMgaGF2ZSB0aGUKKyAgICAgICAgIyAnc2hvcnQnIG5hbWUsIGJ1dCBwYXRjaGVzIGFyZSBub24tdW5pZm9ybWx5IGJ1aWx0IHdpdGgKKyAgICAgICAgIyBlaXRoZXIgdGhlICdsb25nJyBvciAnc2hvcnQnIG5hbWUsIHdoYXRldmVyIHRoZSBhZGRvbnMgbmFtZQorICAgICAgICAjIGJ1dCB3ZSBwcmVmZXIgdGhlICdzaG9ydCcgbmFtZSBhbmQgYXZvaWQgZHVwbGljYXRlcy4KKyAgICAgICAgaWYgWyAtZCAiJHtDVF9MSUJDfS0ke2FkZG9ufS0ke0NUX0xJQkNfVkVSU0lPTn0iIF07IHRoZW4KKyAgICAgICAgICAgIENUX0RvRXhlY0xvZyBGSUxFIG12ICIke0NUX0xJQkN9LSR7YWRkb259LSR7Q1RfTElCQ19WRVJTSU9OfSIgIiR7YWRkb259IgorICAgICAgICBmaQorCisgICAgICAgIENUX0RvRXhlY0xvZyBGSUxFIGxuIC1zICIke2FkZG9ufSIgIiR7Q1RfTElCQ30tJHthZGRvbn0tJHtDVF9MSUJDX1ZFUlNJT059IgorCisgICAgICAgIENUX1BhdGNoIG5vY2hkaXIgIiR7Q1RfTElCQ30iICIke2FkZG9ufS0ke0NUX0xJQkNfVkVSU0lPTn0iCisKKyAgICAgICAgIyBSZW1vdmUgdGhlIGxvbmcgbmFtZSBzaW5jZSBpdCBjYW4gY29uZnVzZSBjb25maWd1cmUgc2NyaXB0cyB0byBydW4KKyAgICAgICAgIyB0aGUgc2FtZSBzb3VyY2UgdHdpY2UuCisgICAgICAgIHJtICIke0NUX0xJQkN9LSR7YWRkb259LSR7Q1RfTElCQ19WRVJTSU9OfSIKKyAgICBkb25lCisKKyAgICAjIFRoZSBjb25maWd1cmUgZmlsZXMgbWF5IGJlIG9sZGVyIHRoYW4gdGhlIGNvbmZpZ3VyZS5pbiBmaWxlcworICAgICMgaWYgdXNpbmcgYSBzbmFwc2hvdCAob3IgZXZlbiBzb21lIHRhcmJhbGxzKS4gRmFrZSB0aGVtIGJlaW5nCisgICAgIyB1cCB0byBkYXRlLgorICAgIGZpbmQgLiAtdHlwZSBmIC1uYW1lIGNvbmZpZ3VyZSAtZXhlYyB0b3VjaCB7fSBcOyAyPiYxIHxDVF9Eb0xvZyBBTEwKKworICAgIENUX1BvcGQKKworICAgIGlmIFsgIiR7Q1RfTElCQ19MT0NBTEVTfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBkb19saWJjX2xvY2FsZXNfZXh0cmFjdAorICAgIGZpCit9CisKKyMgQnVpbGQgYW5kIGluc3RhbGwgaGVhZGVycyBhbmQgc3RhcnQgZmlsZXMKK2RvX2xpYmNfc3RhcnRfZmlsZXMoKSB7CisgICAgIyBTdGFydCBmaWxlcyBhbmQgSGVhZGVycyBzaG91bGQgYmUgY29uZmlndXJlZCB0aGUgc2FtZSB3YXkgYXMgdGhlCisgICAgIyBmaW5hbCBsaWJjLCBidXQgYnVpbHQgYW5kIGluc3RhbGxlZCBkaWZmZXJlbnRseS4KKyAgICBkb19saWJjX2JhY2tlbmQgbGliY19tb2RlPXN0YXJ0ZmlsZXMKK30KKworIyBUaGlzIGZ1bmN0aW9uIGJ1aWxkcyBhbmQgaW5zdGFsbCB0aGUgZnVsbCBDIGxpYnJhcnkKK2RvX2xpYmMoKSB7CisgICAgZG9fbGliY19iYWNrZW5kIGxpYmNfbW9kZT1maW5hbAorfQorCitkb19saWJjX2JhY2tlbmQoKSB7CisgICAgbG9jYWwgc3JjX2Rpcj0iJHtDVF9TUkNfRElSfS8ke0NUX0xJQkN9LSR7Q1RfTElCQ19WRVJTSU9OfSIKKyAgICBsb2NhbCBsaWJjX21vZGU9ZmluYWwKKyAgICBsb2NhbCBleHRyYV9jY19hcmdzCisgICAgbG9jYWwgLWEgZXh0cmFfY29uZmlnCisgICAgbG9jYWwgLWEgZXh0cmFfbWFrZV9hcmdzCisgICAgbG9jYWwgZ2xpYmNfY2ZsYWdzCisKKyAgICB3aGlsZSBbICQjIC1uZSAwIF07IGRvCisgICAgICAgIGV2YWwgIiR7MS8vIC9cXCB9IgorICAgICAgICBzaGlmdAorICAgIGRvbmUKKworICAgIGlmIFsgIiR7bGliY19tb2RlfSIgPSAic3RhcnRmaWxlcyIgXTsgdGhlbgorICAgICAgICBDVF9Eb1N0ZXAgSU5GTyAiSW5zdGFsbGluZyBDIGxpYnJhcnkgaGVhZGVycyAmIHN0YXJ0IGZpbGVzIgorICAgICAgICBta2RpciAtcCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLWxpYmMtc3RhcnQtZmlsZXMiCisgICAgICAgIGNkICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtbGliYy1zdGFydC1maWxlcyIKKyAgICBlbHNlICMgbGliY19tb2RlID0gZmluYWwKKyAgICAgICAgQ1RfRG9TdGVwIElORk8gIkluc3RhbGxpbmcgQyBsaWJyYXJ5IgorICAgICAgICBta2RpciAtcCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLWxpYmMiCisgICAgICAgIGNkICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtbGliYyIKKyAgICBmaQorCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkNvbmZpZ3VyaW5nIEMgbGlicmFyeSIKKworICAgIGNhc2UgIiR7Q1RfTElCQ30iIGluCisgICAgICAgIGVnbGliYykKKyAgICAgICAgICAgIGlmIFsgIiR7Q1RfRUdMSUJDX0NVU1RPTV9DT05GSUd9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCBjcCAiJHtDVF9DT05GSUdfRElSfS9lZ2xpYmMuY29uZmlnIiBvcHRpb24tZ3JvdXBzLmNvbmZpZworICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGlmIFsgIiR7Q1RfRUdMSUJDX09QVF9TSVpFfSIgPSAieSIgXTsgdGhlbgorICAgICAgICAgICAgICAgIE9QVElNSVpFPS1PcworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIE9QVElNSVpFPS1PMgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGdsaWJjKQorICAgICAgICAgICAgIyBnbGliYyBjYW4ndCBiZSBidWlsdCB3aXRob3V0IC1PMiAocmVmZXJlbmNlIG5lZWRlZCEpCisgICAgICAgICAgICBPUFRJTUlaRT0tTzIKKyAgICAgICAgICAgICMgQWxzbywgaWYgdGhvc2UgdHdvIGFyZSBtaXNzaW5nLCBpY29udiBidWlsZCBicmVha3MKKyAgICAgICAgICAgIGV4dHJhX2NvbmZpZys9KCAtLWRpc2FibGUtZGVidWcgLS1kaXNhYmxlLXNhbml0eS1jaGVja3MgKQorICAgICAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIEFkZCBzb21lIGRlZmF1bHQgZ2xpYmMgY29uZmlnIG9wdGlvbnMgaWYgbm90IGdpdmVuIGJ5IHVzZXIuCisgICAgIyBXZSBkb24ndCBuZWVkIHRvIGJlIGNvbmRpdGlvbmFsIG9uIHdldGhlciB0aGUgdXNlciBkaWQgc2V0IGRpZmZlcmVudAorICAgICMgdmFsdWVzLCBhcyB0aGV5IENUX0xJQkNfR0xJQkNfRVhUUkFfQ09ORklHX0FSUkFZIGlzIHBhc3NlZCBhZnRlcgorICAgICMgZXh0cmFfY29uZmlnCisKKyAgICBleHRyYV9jb25maWcrPSgiJChkb19saWJjX21pbl9rZXJuZWxfY29uZmlnKSIpCisKKyAgICBjYXNlICIke0NUX1RIUkVBRFN9IiBpbgorICAgICAgICBucHRsKSAgICAgICAgICAgZXh0cmFfY29uZmlnKz0oIi0td2l0aC1fX3RocmVhZCIgIi0td2l0aC10bHMiKTs7CisgICAgICAgIGxpbnV4dGhyZWFkcykgICBleHRyYV9jb25maWcrPSgiLS13aXRoLV9fdGhyZWFkIiAiLS13aXRob3V0LXRscyIgIi0td2l0aG91dC1ucHRsIik7OworICAgICAgICBub25lKSAgICAgICAgICAgZXh0cmFfY29uZmlnKz0oIi0td2l0aG91dC1fX3RocmVhZCIgIi0td2l0aG91dC1ucHRsIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiR7Q1RfTElCQ19HTElCQ19FWFRSQV9DT05GSUdfQVJSQVlbKl19IiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICotdGxzKikgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKSBleHRyYV9jb25maWcrPSgiLS13aXRob3V0LXRscyIpOzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgZXNhYworCisgICAgY2FzZSAiJHtDVF9TSEFSRURfTElCU30iIGluCisgICAgICAgIHkpIGV4dHJhX2NvbmZpZys9KCItLWVuYWJsZS1zaGFyZWQiKTs7CisgICAgICAgICopIGV4dHJhX2NvbmZpZys9KCItLWRpc2FibGUtc2hhcmVkIik7OworICAgIGVzYWMKKworICAgIGNhc2UgIiR7Q1RfQVJDSF9GTE9BVF9IV30sJHtDVF9BUkNIX0ZMT0FUX1NXfSIgaW4KKyAgICAgICAgeSwpIGV4dHJhX2NvbmZpZys9KCItLXdpdGgtZnAiKTs7CisgICAgICAgICx5KSBleHRyYV9jb25maWcrPSgiLS13aXRob3V0LWZwIik7OworICAgIGVzYWMKKworICAgIGlmIFsgIiR7Q1RfTElCQ19ESVNBQkxFX1ZFUlNJT05JTkd9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIGV4dHJhX2NvbmZpZys9KCItLWRpc2FibGUtdmVyc2lvbmluZyIpCisgICAgZmkKKworICAgIGlmIFsgIiR7Q1RfTElCQ19PTERFU1RfQUJJfSIgIT0gIiIgXTsgdGhlbgorICAgICAgICBleHRyYV9jb25maWcrPSgiLS1lbmFibGUtb2xkZXN0LWFiaT0ke0NUX0xJQkNfT0xERVNUX0FCSX0iKQorICAgIGZpCisKKyAgICBjYXNlICIkKGRvX2xpYmNfYWRkX29uc19saXN0ICwpIiBpbgorICAgICAgICAiIikgZXh0cmFfY29uZmlnKz0oIi0tZW5hYmxlLWFkZC1vbnM9bm8iKTs7CisgICAgICAgICopICBleHRyYV9jb25maWcrPSgiLS1lbmFibGUtYWRkLW9ucz0kKGRvX2xpYmNfYWRkX29uc19saXN0ICwpIik7OworICAgIGVzYWMKKworICAgIGlmIFsgIiR7Q1RfTElCQ19FR0xJQkNfSEFTX1BLR1ZFUlNJT05fQlVHVVJMfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBleHRyYV9jb25maWcrPSgiLS13aXRoLXBrZ3ZlcnNpb249JHtDVF9QS0dWRVJTSU9OfSIpCisgICAgICAgIFsgLW4gIiR7Q1RfVE9PTENIQUlOX0JVR1VSTH0iIF0gJiYgZXh0cmFfY29uZmlnKz0oIi0td2l0aC1idWd1cmw9JHtDVF9UT09MQ0hBSU5fQlVHVVJMfSIpCisgICAgZmkKKworICAgIGV4dHJhX2NjX2FyZ3M9IiR7ZXh0cmFfY2NfYXJnc30gJHtDVF9BUkNIX0VORElBTl9PUFR9IgorCisgICAgdG91Y2ggY29uZmlnLmNhY2hlCisgICAgaWYgWyAiJHtDVF9MSUJDX0dMSUJDX0ZPUkNFX1VOV0lORH0iID0gInkiIF07IHRoZW4KKyAgICAgICAgZWNobyAibGliY19jdl9mb3JjZWRfdW53aW5kPXllcyIgPj5jb25maWcuY2FjaGUKKyAgICAgICAgZWNobyAibGliY19jdl9jX2NsZWFudXA9eWVzIiA+PmNvbmZpZy5jYWNoZQorICAgIGZpCisKKyAgICAjIFByZS1zZWVkIHRoZSBjb25maWdwYXJtcyBmaWxlIHdpdGggdmFsdWVzIGZyb20gdGhlIGNvbmZpZyBvcHRpb24KKyAgICBwcmludGYgIiR7Q1RfTElCQ19HTElCQ19DT05GSUdQQVJNU31cbiIgPiBjb25maWdwYXJtcworCisgICAgY3Jvc3NfY2M9JChDVF9XaGljaCAiJHtDVF9UQVJHRVR9LWdjYyIpCisKKyAgICBDVF9Eb0xvZyBERUJVRyAiVXNpbmcgZ2NjIGZvciB0YXJnZXQ6ICAgICAnJHtjcm9zc19jY30nIgorICAgIENUX0RvTG9nIERFQlVHICJDb25maWd1cmluZyB3aXRoIGFkZG9ucyA6ICckKGRvX2xpYmNfYWRkX29uc19saXN0ICwpJyIKKyAgICBDVF9Eb0xvZyBERUJVRyAiRXh0cmEgY29uZmlnIGFyZ3MgcGFzc2VkOiAnJHtleHRyYV9jb25maWdbKl19JyIKKyAgICBDVF9Eb0xvZyBERUJVRyAiRXh0cmEgQ0MgYXJncyBwYXNzZWQgICAgOiAnJHtleHRyYV9jY19hcmdzfSciCisKKyAgICBnbGliY19jZmxhZ3M9IiR7Q1RfVEFSR0VUX0NGTEFHU30gJHtDVF9MSUJDX0dMSUJDX0VYVFJBX0NGTEFHU30gJHtPUFRJTUlaRX0iCisgICAgY2FzZSAiJHtDVF9MSUJDX0VOQUJMRV9GT1JUSUZJRURfQlVJTER9IiBpbgorICAgICAgICB5KSAgOzsKKyAgICAgICAgKikgIGdsaWJjX2NmbGFncys9IiAtVV9GT1JUSUZZX1NPVVJDRSI7OworICAgIGVzYWMKKworICAgICMgLi9jb25maWd1cmUgaXMgbWlzbGVhZCBieSBvdXIgdG9vbHMgb3ZlcnJpZGUgd3JhcHBlciBmb3IgYmFzaAorICAgICMgc28ganVzdCB0ZWxsIGl0IHdoZXJlIHRoZSByZWFsIGJhc2ggaXMgX29uX3RoZV90YXJnZXRfIQorICAgICMgTm90ZXM6CisgICAgIyAtICR7YWNfY3ZfcGF0aF9CQVNIX1NIRUxMfSBpcyBvbmx5IHVzZWQgdG8gc2V0IEJBU0hfU0hFTEwKKyAgICAjIC0gJHtCQVNIX1NIRUxMfSAgICAgICAgICAgIGlzIG9ubHkgdXNlZCB0byBzZXQgQkFTSAorICAgICMgLSAke0JBU0h9ICAgICAgICAgICAgICAgICAgaXMgb25seSB1c2VkIHRvIHNldCB0aGUgc2hlYmFuZworICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdHdvIHNjcmlwdHMgdG8gcnVuIG9uIHRoZSB0YXJnZXQKKyAgICAjIFNvIHdlIGNhbiBzYWZlbHkgYnlwYXNzIGJhc2ggZGV0ZWN0aW9uIGF0IGNvbXBpbGUgdGltZS4KKyAgICAjIFNob3VsZCB0aGlzIGNoYW5nZSBpbiBhIGZ1dHVyZSBlZ2xpYmMgcmVsZWFzZSwgd2UnZCBiZXR0ZXIKKyAgICAjIGRpcmVjdGx5IG1hbmdsZSB0aGUgZ2VuZXJhdGVkIHNjcmlwdHMgX2FmdGVyXyB0aGV5IGdldCBidWlsdCwKKyAgICAjIG9yIGV2ZW4gYWZ0ZXIgdGhleSBnZXQgaW5zdGFsbGVkLi4uIGVnbGliYyBpcyBzdWNoIGEgc3Vja2VyLi4uCisgICAgZWNobyAiYWNfY3ZfcGF0aF9CQVNIX1NIRUxMPS9iaW4vYmFzaCIgPj5jb25maWcuY2FjaGUKKworICAgICMgQ29uZmlndXJlIHdpdGggLS1wcmVmaXggdGhlIHdheSB3ZSB3YW50IGl0IG9uIHRoZSB0YXJnZXQuLi4KKyAgICAjIFRoZXJlIGFyZSBhIHdob2xlIGxvdCBvZiBzZXR0aW5ncyBoZXJlLiAgWW91J2xsIHByb2JhYmx5IHdhbnQKKyAgICAjIHRvIHJlYWQgdXAgb24gd2hhdCB0aGV5IGFsbCBtZWFuLCBhbmQgY3VzdG9taXplIGEgYml0LCBwb3NzaWJseSBieSBzZXR0aW5nIEdMSUJDX0VYVFJBX0NPTkZJR19BUlJBWQorICAgICMgQ29tcGFyZSB0aGVzZSBvcHRpb25zIHdpdGggdGhlIG9uZXMgdXNlZCB3aGVuIGluc3RhbGxpbmcgdGhlIGdsaWJjIGhlYWRlcnMgYWJvdmUgLSB0aGV5J3JlIGRpZmZlcmVudC4KKyAgICAjIEFkZGluZyAiLS13aXRob3V0LWdkIiBvcHRpb24gdG8gYXZvaWQgZXJyb3IgIm1lbXVzYWdlc3RhdC5jOjM2OjE2OiBnZC5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IgorICAgICMgU2VlIGFsc28gaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9tbC9saWJjLWFscGhhLzIwMDAtMDcvbXNnMDAwMjQuaHRtbC4KKyAgICAjIFNldCBCVUlMRF9DQywgb3Igd2Ugd29uJ3QgYmUgYWJsZSB0byBidWlsZCBkYXRhZmlsZXMKKyAgICAjIFJ1biBleHBsaWNpdGx5IHRocm91Z2ggQ09ORklHX1NIRUxMLCBvciB0aGUgYnVpbGQgYnJlYWtzIGJhZGx5IChsb29wLW9mLWRlYXRoKQorICAgICMgd2hlbiB0aGUgc2hlbGwgaXMgbm90IGJhc2guLi4gU2lnaC4uLiA6LSgKKworICAgIENUX0RvRXhlY0xvZyBDRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQlVJTERfQ0M9IiR7Q1RfQlVJTER9LWdjYyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDRkxBR1M9IiR7Z2xpYmNfY2ZsYWdzfSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIENDPSIke0NUX1RBUkdFVH0tZ2NjICR7Q1RfTElCQ19FWFRSQV9DQ19BUkdTfSAke2V4dHJhX2NjX2FyZ3N9IiBcCisgICAgQVI9JHtDVF9UQVJHRVR9LWFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBSQU5MSUI9JHtDVF9UQVJHRVR9LXJhbmxpYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIke0NPTkZJR19TSEVMTH0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiR7c3JjX2Rpcn0vY29uZmlndXJlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1wcmVmaXg9L3VzciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWJ1aWxkPSR7Q1RfQlVJTER9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC0taG9zdD0ke0NUX1RBUkdFVH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1jYWNoZS1maWxlPSIkKHB3ZCkvY29uZmlnLmNhY2hlIiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLXdpdGhvdXQtY3ZzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC0tZGlzYWJsZS1wcm9maWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS13aXRob3V0LWdkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLXdpdGgtaGVhZGVycz0iJHtDVF9IRUFERVJTX0RJUn0iICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICIke2V4dHJhX2NvbmZpZ1tAXX0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIiR7Q1RfTElCQ19HTElCQ19FWFRSQV9DT05GSUdfQVJSQVlbQF19IgorCisgICAgIyBidWlsZCBoYWNrcworICAgIGNhc2UgIiR7Q1RfQVJDSH0sJHtDVF9BUkNIX0NQVX0iIGluCisgICAgICAgIHBvd2VycGMsOD8/KQorICAgICAgICAgICAgIyBodHRwOi8vc291cmNld2FyZS5vcmcvbWwvY3Jvc3NnY2MvMjAwOC0xMC9tc2cwMDA2OC5odG1sCisgICAgICAgICAgICBDVF9Eb0xvZyBERUJVRyAiQWN0aXZhdGluZyBzdXBwb3J0IGZvciBtZW1zZXQgb24gYnJva2VuIHBwYy04eHggKENQVTE1IGVycmF0dW0pIgorICAgICAgICAgICAgZXh0cmFfbWFrZV9hcmdzKz0oIEFTRkxBR1M9Ii1EQlJPS0VOX1BQQ184eHhfQ1BVMTUiICkKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgWyAiJHtsaWJjX21vZGV9IiA9ICJzdGFydGZpbGVzIiBdOyB0aGVuCisgICAgICAgIENUX0RvTG9nIEVYVFJBICJJbnN0YWxsaW5nIEMgbGlicmFyeSBoZWFkZXJzIgorCisgICAgICAgICMgdXNlIHRoZSAnaW5zdGFsbC1oZWFkZXJzJyBtYWtlZmlsZSB0YXJnZXQgdG8gaW5zdGFsbCB0aGUKKyAgICAgICAgIyBoZWFkZXJzCisgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSAke0pPQlNGTEFHU30gICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsX3Jvb3Q9JHtDVF9TWVNST09UX0RJUn0gXAorICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwtYm9vdHN0cmFwLWhlYWRlcnM9eWVzICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIiR7ZXh0cmFfbWFrZV9hcmdzW0BdfSIgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsLWhlYWRlcnMKKworICAgICAgICAjIEZvciBnbGliYywgYSBmZXcgaGVhZGVycyBuZWVkIHRvIGJlIG1hbnVhbGx5IGluc3RhbGxlZAorICAgICAgICBpZiBbICIke0NUX0xJQkN9IiA9ICJnbGliYyIgXTsgdGhlbgorICAgICAgICAgICAgIyBUd28gaGVhZGVycyAtLSBzdHVicy5oIGFuZCBmZWF0dXJlcy5oIC0tIGFyZW4ndCBpbnN0YWxsZWQgYnkgaW5zdGFsbC1oZWFkZXJzLAorICAgICAgICAgICAgIyBzbyBkbyB0aGVtIGJ5IGhhbmQuICBXZSBjYW4gdG9sZXJhdGUgYW4gZW1wdHkgc3R1YnMuaCBmb3IgdGhlIG1vbWVudC4KKyAgICAgICAgICAgICMgU2VlIGUuZy4gaHR0cDovL2djYy5nbnUub3JnL21sL2djYy8yMDAyLTAxL21zZzAwOTAwLmh0bWwKKyAgICAgICAgICAgIG1rZGlyIC1wICIke0NUX0hFQURFUlNfRElSfS9nbnUiCisgICAgICAgICAgICBDVF9Eb0V4ZWNMb2cgQUxMIHRvdWNoICIke0NUX0hFQURFUlNfRElSfS9nbnUvc3R1YnMuaCIKKyAgICAgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgY3AgLXYgIiR7Q1RfU1JDX0RJUn0vZ2xpYmMtJHtDVF9MSUJDX1ZFUlNJT059L2luY2x1ZGUvZmVhdHVyZXMuaCIgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiR7Q1RfSEVBREVSU19ESVJ9L2ZlYXR1cmVzLmgiCisKKyAgICAgICAgICAgICMgQnVpbGRpbmcgdGhlIGJvb3RzdHJhcCBnY2MgcmVxdWlyZXMgZWl0aGVyIHNldHRpbmcgaW5oaWJpdF9saWJjLCBvcgorICAgICAgICAgICAgIyBoYXZpbmcgYSBjb3B5IG9mIHN0ZGlvX2xpbS5oLi4uIHNlZQorICAgICAgICAgICAgIyBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL21sL2xpYmMtYWxwaGEvMjAwMy0xMS9tc2cwMDA0NS5odG1sCisgICAgICAgICAgICBDVF9Eb0V4ZWNMb2cgQUxMIGNwIC12IGJpdHMvc3RkaW9fbGltLmggIiR7Q1RfSEVBREVSU19ESVJ9L2JpdHMvc3RkaW9fbGltLmgiCisKKyAgICAgICAgICAgICMgRm9sbG93aW5nIGVycm9yIGJ1aWxkaW5nIGdjYy00LjAuMCdzIGdjajoKKyAgICAgICAgICAgICMgIGVycm9yOiBiaXRzL3N5c2NhbGwuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorICAgICAgICAgICAgIyBzb2x2ZWQgYnkgZm9sbG93aW5nIGNvcHk7IHNlZSBodHRwOi8vc291cmNld2FyZS5vcmcvbWwvY3Jvc3NnY2MvMjAwNS0wNS9tc2cwMDE2OC5odG1sCisgICAgICAgICAgICAjIGJ1dCBpdCBicmVha3MgYXJtLCBzZWUgaHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2Nyb3NzZ2NjLzIwMDYtMDEvbXNnMDAwOTEuaHRtbAorICAgICAgICAgICAgY2FzZSAiJHtDVF9BUkNIfSIgaW4KKyAgICAgICAgICAgICAgICBhcm0pICAgIDs7CisgICAgICAgICAgICAgICAgKikgIENUX0RvRXhlY0xvZyBBTEwgY3AgLXYgIm1pc2Mvc3lzY2FsbC1saXN0LmgiICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIke0NUX0hFQURFUlNfRElSfS9iaXRzL3N5c2NhbGwuaCIKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgZmkKKworICAgICAgICBpZiBbICIke0NUX1RIUkVBRFN9IiA9ICJucHRsIiBdOyB0aGVuCisgICAgICAgICAgICBDVF9Eb0xvZyBFWFRSQSAiSW5zdGFsbGluZyBDIGxpYnJhcnkgc3RhcnQgZmlsZXMiCisKKyAgICAgICAgICAgICMgdGhlcmUgYXJlIGEgZmV3IG9iamVjdCBmaWxlcyBuZWVkZWQgdG8gbGluayBzaGFyZWQgbGlicmFyaWVzLAorICAgICAgICAgICAgIyB3aGljaCB3ZSBidWlsZCBhbmQgaW5zdGFsbCBieSBoYW5kCisgICAgICAgICAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1rZGlyIC1wICIke0NUX1NZU1JPT1RfRElSfS91c3IvbGliIgorICAgICAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlICR7Sk9CU0ZMQUdTfSAgXAorICAgICAgICAgICAgICAgICAgICAgICAgIiR7ZXh0cmFfbWFrZV9hcmdzW0BdfSIgXAorICAgICAgICAgICAgICAgICAgICAgICAgY3N1L3N1YmRpcl9saWIKKyAgICAgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgY3AgY3N1L2NydDEubyBjc3UvY3J0aS5vIGNzdS9jcnRuLm8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJHtDVF9TWVNST09UX0RJUn0vdXNyL2xpYiIKKworICAgICAgICAgICAgIyBGaW5hbGx5LCAnbGliZ2NjX3Muc28nIHJlcXVpcmVzIGEgJ2xpYmMuc28nIHRvIGxpbmsgYWdhaW5zdC4KKyAgICAgICAgICAgICMgSG93ZXZlciwgc2luY2Ugd2Ugd2lsbCBuZXZlciBhY3R1YWxseSBleGVjdXRlIGl0cyBjb2RlLAorICAgICAgICAgICAgIyBpdCBkb2Vzbid0IG1hdHRlciB3aGF0IGl0IGNvbnRhaW5zLiAgU28sIHRyZWF0aW5nICcvZGV2L251bGwnCisgICAgICAgICAgICAjIGFzIGEgQyBzb3VyY2UgZmlsZSwgd2UgcHJvZHVjZSBhIGR1bW15ICdsaWJjLnNvJyBpbiBvbmUgc3RlcAorICAgICAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCAiJHtjcm9zc19jY30iIC1ub3N0ZGxpYiAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1ub3N0YXJ0ZmlsZXMgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zaGFyZWQgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC14IGMgL2Rldi9udWxsICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1vICIke0NUX1NZU1JPT1RfRElSfS91c3IvbGliL2xpYmMuc28iCisgICAgICAgIGZpICMgdGhyZWFkcyA9PSBucHRsCisgICAgZWxzZSAjIGxpYmNfbW9kZSA9IGZpbmFsCisgICAgICAgIENUX0RvTG9nIEVYVFJBICJCdWlsZGluZyBDIGxpYnJhcnkiCisgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSAke0pPQlNGTEFHU30gICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiR7ZXh0cmFfbWFrZV9hcmdzW0BdfSIgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbAorCisgICAgICAgIENUX0RvTG9nIEVYVFJBICJJbnN0YWxsaW5nIEMgbGlicmFyeSIKKyAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlICR7Sk9CU0ZMQUdTfSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJHtleHRyYV9tYWtlX2FyZ3NbQF19IiAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbF9yb290PSIke0NUX1NZU1JPT1RfRElSfSIgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwKKworICAgICAgICBpZiBbICIke0NUX0xJQkNfTE9DQUxFU30iID0gInkiIF07IHRoZW4KKyAgICAgICAgICAgIGRvX2xpYmNfbG9jYWxlcworICAgICAgICBmaQorICAgIGZpCisKKyAgICBDVF9FbmRTdGVwCit9CisKKyMgVGhpcyBmdW5jdGlvbiBmaW5pc2hlcyB0aGUgQyBsaWJyYXJ5IGluc3RhbGwKKyMgVGhpcyBpcyBhIG5vLW9wCitkb19saWJjX2ZpbmlzaCgpIHsKKyAgICA6Cit9CisKKyMgQnVpbGQgdXAgdGhlIGFkZG9ucyBsaXN0LCBzZXBhcmF0ZWQgd2l0aCAkMQorZG9fbGliY19hZGRfb25zX2xpc3QoKSB7CisgICAgbG9jYWwgc2VwPSIkMSIKKyAgICBsb2NhbCBhZGRvbnNfbGlzdD0iJCggZWNobyAiJHtDVF9MSUJDX0FERE9OU19MSVNUfSIgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIHxzZWQgLXIgLWUgInMvW1s6c3BhY2U6XSxdLyR7c2VwfS9nOyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgKSIKKyAgICBjYXNlICIke0NUX1RIUkVBRFN9IiBpbgorICAgICAgICBub25lKSAgIDs7CisgICAgICAgICopICAgICAgYWRkb25zX2xpc3Q9IiR7YWRkb25zX2xpc3R9JHtzZXB9JHtDVF9USFJFQURTfSI7OworICAgIGVzYWMKKyAgICBbICIke0NUX0xJQkNfR0xJQkNfVVNFX1BPUlRTfSIgPSAieSIgXSAmJiBhZGRvbnNfbGlzdD0iJHthZGRvbnNfbGlzdH0ke3NlcH1wb3J0cyIKKyAgICAjIFJlbW92ZSBkdXBsaWNhdGUsIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNlcGFyYXRvcnMKKyAgICBlY2hvICIke2FkZG9uc19saXN0fSIgfHNlZCAtciAtZSAicy8ke3NlcH0rLyR7c2VwfS9nOyBzL14ke3NlcH0vLzsgcy8ke3NlcH1cJC8vOyIKK30KKworIyBDb21wdXRlIHVwIHRoZSBtaW5pbXVtIHN1cHBvcnRlZCBMaW51eCBrZXJuZWwgdmVyc2lvbgorZG9fbGliY19taW5fa2VybmVsX2NvbmZpZygpIHsKKyAgICBsb2NhbCBtaW5fa2VybmVsX2NvbmZpZworCisgICAgY2FzZSAiJHtDVF9MSUJDX0dMSUJDX0VYVFJBX0NPTkZJR19BUlJBWVsqXX0iIGluCisgICAgICAgICotLWVuYWJsZS1rZXJuZWwqKSA7OworICAgICAgICAqKSAgaWYgWyAiJHtDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX0FTX0hFQURFUlN9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgIyBXZSBjYW4ndCByZWx5IG9uIHRoZSBrZXJuZWwgdmVyc2lvbiBmcm9tIHRoZSBjb25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpdCBtaWdodCBub3QgYmUgYXZhaWxhYmxlIGlmIHRoZSB1c2VyIHVzZXMgcHJlLWluc3RhbGxlZAorICAgICAgICAgICAgICAgICMgaGVhZGVycy4gT24gdGhlIG90aGVyIGhhbmQsIGJvdGggbWV0aG9kIHdpbGwgaGF2ZSB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgIyB2ZXJzaW9uIGluc3RhbGxlZCBpbiAidXNyL2luY2x1ZGUvbGludXgvdmVyc2lvbi5oIiBpbiB0aGUgc3lzcm9vdC4KKyAgICAgICAgICAgICAgICAjIFBhcnNlIHRoYXQgaW5zdGVhZCBvZiBoYXZpbmcgdHdvIGNvZGUtcGF0aHMuCisgICAgICAgICAgICAgICAgdmVyc2lvbl9jb2RlX2ZpbGU9IiR7Q1RfU1lTUk9PVF9ESVJ9L3Vzci9pbmNsdWRlL2xpbnV4L3ZlcnNpb24uaCIKKyAgICAgICAgICAgICAgICBpZiBbICEgLWYgIiR7dmVyc2lvbl9jb2RlX2ZpbGV9IiAtbyAhIC1yICIke3ZlcnNpb25fY29kZV9maWxlfSIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBDVF9BYm9ydCAiTGludXggdmVyc2lvbiBpcyB1bmF2YWlsYWJsZSBpbiBpbnN0YWxsZWQgaGVhZGVycyBmaWxlcyIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIHZlcnNpb25fY29kZT0iJCggZ3JlcCAtRSBMSU5VWF9WRVJTSU9OX0NPREUgIiR7dmVyc2lvbl9jb2RlX2ZpbGV9IiAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfGN1dCAtZCAnICcgLWYgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkiCisgICAgICAgICAgICAgICAgdmVyc2lvbj0kKCgodmVyc2lvbl9jb2RlPj4xNikmMHhGRikpCisgICAgICAgICAgICAgICAgcGF0Y2hsZXZlbD0kKCgodmVyc2lvbl9jb2RlPj44KSYweEZGKSkKKyAgICAgICAgICAgICAgICBzdWJsZXZlbD0kKCh2ZXJzaW9uX2NvZGUmMHhGRikpCisgICAgICAgICAgICAgICAgbWluX2tlcm5lbF9jb25maWc9IiR7dmVyc2lvbn0uJHtwYXRjaGxldmVsfS4ke3N1YmxldmVsfSIKKyAgICAgICAgICAgIGVsaWYgWyAiJHtDVF9MSUJDX0dMSUJDX0tFUk5FTF9WRVJTSU9OX0NIT1NFTn0iID0gInkiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAjIFRyaW0gdGhlIGZvdXJ0aCBwYXJ0IG9mIHRoZSBsaW51eCB2ZXJzaW9uLCBrZWVwaW5nIG9ubHkgdGhlIGZpcnN0IHRocmVlIG51bWJlcnMKKyAgICAgICAgICAgICAgICBtaW5fa2VybmVsX2NvbmZpZz0iJCggZWNobyAiJHtDVF9MSUJDX0dMSUJDX01JTl9LRVJORUxfVkVSU0lPTn0iICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8c2VkIC1yIC1lICdzL14oW14uXStcLlteLl0rXC5bXi5dKykofFwuW14uXSspJC9cMS87JyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGVjaG8gIi0tZW5hYmxlLWtlcm5lbD0ke21pbl9rZXJuZWxfY29uZmlnfSIKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2xpYmMvZ2xpYmMuc2ggYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvbGliYy9nbGliYy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGI2NjM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2xpYmMvZ2xpYmMuc2gKQEAgLTAsMCArMSwxMjcgQEAKKyMgVGhpcyBmaWxlIGFkZHMgZnVuY3Rpb25zIHRvIGJ1aWxkIGdsaWJjCisjIENvcHlyaWdodCAyMDA3IFlhbm4gRS4gTU9SSU4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIEdQTCB2Mi4gU2VlIENPUFlJTkcgaW4gdGhlIHJvb3Qgb2YgdGhpcyBwYWNrYWdlCisKKyMgQWRkIHRoZSBkZWZpbml0aW9ucyBjb21tb24gdG8gZ2xpYmMgYW5kIGVnbGliYworIyAgIGRvX2xpYmNfZXh0cmFjdAorIyAgIGRvX2xpYmNfc3RhcnRfZmlsZXMKKyMgICBkb19saWJjCisjICAgZG9fbGliY19maW5pc2gKKyMgICBkb19saWJjX2FkZF9vbnNfbGlzdAorIyAgIGRvX2xpYmNfbWluX2tlcm5lbF9jb25maWcKKy4gIiR7Q1RfTElCX0RJUn0vc2NyaXB0cy9idWlsZC9saWJjL2dsaWJjLWVnbGliYy5zaC1jb21tb24iCisKKyMgRG93bmxvYWQgZ2xpYmMKK2RvX2xpYmNfZ2V0KCkgeworICAgIGxvY2FsIGRhdGUKKyAgICBsb2NhbCB2ZXJzaW9uCisgICAgbG9jYWwgLWEgYWRkb25zX2xpc3QKKworICAgIGFkZG9uc19saXN0PSgkKGRvX2xpYmNfYWRkX29uc19saXN0ICIgIikpCisKKyAgICAjIE1haW4gc291cmNlCisgICAgQ1RfR2V0RmlsZSAiZ2xpYmMtJHtDVF9MSUJDX1ZFUlNJT059IiAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIHtmdHAsaHR0cH06Ly9mdHAuZ251Lm9yZy9nbnUvZ2xpYmMgICAgICAgXAorICAgICAgICAgICAgICAgZnRwOi8vZ2NjLmdudS5vcmcvcHViL2dsaWJjL3JlbGVhc2VzICAgICBcCisgICAgICAgICAgICAgICBmdHA6Ly9nY2MuZ251Lm9yZy9wdWIvZ2xpYmMvc25hcHNob3RzCisKKyAgICAjIEMgbGlicmFyeSBhZGRvbnMKKyAgICBmb3IgYWRkb24gaW4gIiR7YWRkb25zX2xpc3RbQF19IjsgZG8KKyAgICAgICAgIyBOZXZlciBldmVyIHRyeSB0byBkb3dubG9hZCB0aGVzZSBhZGQtb25zLAorICAgICAgICAjIHRoZXkndmUgYWx3YXlzIGJlZW4gaW50ZXJuYWwKKyAgICAgICAgY2FzZSAiJHthZGRvbn0iIGluCisgICAgICAgICAgICBucHRsKSAgIGNvbnRpbnVlOzsKKyAgICAgICAgZXNhYworCisgICAgICAgIGlmICEgQ1RfR2V0RmlsZSAiZ2xpYmMtJHthZGRvbn0tJHtDVF9MSUJDX1ZFUlNJT059IiAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAge2Z0cCxodHRwfTovL2Z0cC5nbnUub3JnL2dudS9nbGliYyAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0cDovL2djYy5nbnUub3JnL3B1Yi9nbGliYy9yZWxlYXNlcyAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBmdHA6Ly9nY2MuZ251Lm9yZy9wdWIvZ2xpYmMvc25hcHNob3RzCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgICMgU29tZSBhZGQtb25zIGFyZSBidW5kbGVkIHdpdGggZ2xpYmMsIG90aGVycyBhcmUKKyAgICAgICAgICAgICMgYnVuZGxlZCBpbiB0aGVpciBvd24gdGFyYmFsbC4gRWcuIE5QVEwgaXMgaW50ZXJuYWwsCisgICAgICAgICAgICAjIHdoaWxlIExpbnV4VGhyZWFkcyB3YXMgZXh0ZXJuYWwuIEFsc28sIGZvciBvbGQKKyAgICAgICAgICAgICMgdmVyc2lvbnMgb2YgZ2xpYmMsIHRoZSBsaWJpZG4gYWRkLW9uIHdhcyBleHRlcm5hbCwKKyAgICAgICAgICAgICMgYnV0IHdpdGggdmVyc2lvbiA+PTIuMTAsIGl0IGlzIGludGVybmFsLgorICAgICAgICAgICAgQ1RfRG9Mb2cgREVCVUcgIkFkZG9uICcke2FkZG9ufScgY291bGQgbm90IGJlIGRvd25sb2FkZWQuIgorICAgICAgICAgICAgQ1RfRG9Mb2cgREVCVUcgIldlJ2xsIHNlZSBsYXRlciBpZiB3ZSBjYW4gZmluZCBpdCBpbiB0aGUgc291cmNlIHRyZWUiCisgICAgICAgIGZpCisgICAgZG9uZQorCisgICAgcmV0dXJuIDAKK30KKworIyBUaGVyZSBpcyBub3RoaW5nIHRvIGRvIGZvciBnbGliYyBjaGVjayBjb25maWcKK2RvX2xpYmNfY2hlY2tfY29uZmlnKCkgeworICAgIDoKK30KKworIyBFeHRyYWN0IHRoZSBmaWxlcyByZXF1aXJlZCBmb3IgdGhlIGxpYmMgbG9jYWxlcworIyBOb3RoaW5nIHRvIGRvCitkb19saWJjX2xvY2FsZXNfZXh0cmFjdCgpIHsKKyAgICA6Cit9CisKKyMgQnVpbGQgYW5kIGluc3RhbGwgdGhlIGxpYmMgbG9jYWxlcworZG9fbGliY19sb2NhbGVzKCkgeworICAgIGxvY2FsIHNyY19kaXI9IiR7Q1RfU1JDX0RJUn0vZ2xpYmMtJHtDVF9MSUJDX1ZFUlNJT059IgorICAgIGxvY2FsIC1hIGV4dHJhX2NvbmZpZworICAgIGxvY2FsIGdsaWJjX2NmbGFncworCisgICAgbWtkaXIgLXAgIiR7Q1RfQlVJTERfRElSfS9idWlsZC1sb2NhbGVkZWYiCisgICAgY2QgIiR7Q1RfQlVJTERfRElSfS9idWlsZC1sb2NhbGVkZWYiCisKKyAgICBDVF9Eb0xvZyBFWFRSQSAiQ29uZmlndXJpbmcgQyBsaWJyYXJ5IGxvY2FsZWRlZiIKKworICAgIGlmIFsgIiR7Q1RfTElCQ19FR0xJQkNfSEFTX1BLR1ZFUlNJT05fQlVHVVJMfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBleHRyYV9jb25maWcrPSgiLS13aXRoLXBrZ3ZlcnNpb249JHtDVF9QS0dWRVJTSU9OfSIpCisgICAgICAgIFsgLW4gIiR7Q1RfVE9PTENIQUlOX0JVR1VSTH0iIF0gJiYgZXh0cmFfY29uZmlnKz0oIi0td2l0aC1idWd1cmw9JHtDVF9UT09MQ0hBSU5fQlVHVVJMfSIpCisgICAgZmkKKworICAgIENUX0RvTG9nIERFQlVHICJFeHRyYSBjb25maWcgYXJncyBwYXNzZWQ6ICcke2V4dHJhX2NvbmZpZ1sqXX0nIgorCisgICAgZ2xpYmNfY2ZsYWdzPSItTzIgLWZuby1zdGFjay1wcm90ZWN0b3IiCisgICAgY2FzZSAiJHtDVF9MSUJDX0VOQUJMRV9GT1JUSUZJRURfQlVJTER9IiBpbgorICAgICAgICB5KSAgOzsKKyAgICAgICAgKikgIGdsaWJjX2NmbGFncys9IiAtVV9GT1JUSUZZX1NPVVJDRSI7OworICAgIGVzYWMKKworICAgICMgLi9jb25maWd1cmUgaXMgbWlzbGVkIGJ5IG91ciB0b29scyBvdmVycmlkZSB3cmFwcGVyIGZvciBiYXNoCisgICAgIyBzbyBqdXN0IHRlbGwgaXQgd2hlcmUgdGhlIHJlYWwgYmFzaCBpcyBfb25fdGhlX3RhcmdldF8hCisgICAgIyBOb3RlczoKKyAgICAjIC0gJHthY19jdl9wYXRoX0JBU0hfU0hFTEx9IGlzIG9ubHkgdXNlZCB0byBzZXQgQkFTSF9TSEVMTAorICAgICMgLSAke0JBU0hfU0hFTEx9ICAgICAgICAgICAgaXMgb25seSB1c2VkIHRvIHNldCBCQVNICisgICAgIyAtICR7QkFTSH0gICAgICAgICAgICAgICAgICBpcyBvbmx5IHVzZWQgdG8gc2V0IHRoZSBzaGViYW5nCisgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0d28gc2NyaXB0cyB0byBydW4gb24gdGhlIHRhcmdldAorICAgICMgU28gd2UgY2FuIHNhZmVseSBieXBhc3MgYmFzaCBkZXRlY3Rpb24gYXQgY29tcGlsZSB0aW1lLgorICAgICMgU2hvdWxkIHRoaXMgY2hhbmdlIGluIGEgZnV0dXJlIGVnbGliYyByZWxlYXNlLCB3ZSdkIGJldHRlcgorICAgICMgZGlyZWN0bHkgbWFuZ2xlIHRoZSBnZW5lcmF0ZWQgc2NyaXB0cyBfYWZ0ZXJfIHRoZXkgZ2V0IGJ1aWx0LAorICAgICMgb3IgZXZlbiBhZnRlciB0aGV5IGdldCBpbnN0YWxsZWQuLi4gZWdsaWJjIGlzIHN1Y2ggYSBzdWNrZXIuLi4KKyAgICBlY2hvICJhY19jdl9wYXRoX0JBU0hfU0hFTEw9L2Jpbi9iYXNoIiA+PmNvbmZpZy5jYWNoZQorCisgICAgIyBDb25maWd1cmUgd2l0aCAtLXByZWZpeCB0aGUgd2F5IHdlIHdhbnQgaXQgb24gdGhlIHRhcmdldC4uLgorCisgICAgQ1RfRG9FeGVjTG9nIENGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDRkxBR1M9IiR7Z2xpYmNfY2ZsYWdzfSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIke3NyY19kaXJ9L2NvbmZpZ3VyZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC0tcHJlZml4PS91c3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1jYWNoZS1maWxlPSIkKHB3ZCkvY29uZmlnLmNhY2hlIiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLXdpdGhvdXQtY3ZzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC0tZGlzYWJsZS1wcm9maWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS13aXRob3V0LWdkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWRpc2FibGUtZGVidWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICIke2V4dHJhX2NvbmZpZ1tAXX0iCisKKyAgICBDVF9Eb0xvZyBFWFRSQSAiQnVpbGRpbmcgQyBsaWJyYXJ5IGxvY2FsZWRlZiIKKyAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1ha2UgJHtKT0JTRkxBR1N9CisKKyAgICAjIFRoZSB0YXJnZXQncyBlbmRpYW5uZXNzIGFuZCB1aW50MzJfdCBhbGlnbm1lbnQgc2hvdWxkIGJlIHBhc3NlZCBhcyBvcHRpb25zCisgICAgIyB0byBsb2NhbGVkZWYsIGJ1dCBnbGliYydzIGxvY2FsZWRlZiBkb2VzIG5vdCBzdXBwb3J0IHRoZXNlIG9wdGlvbnMsIHdoaWNoCisgICAgIyBtZWFucyB0aGF0IHRoZSBsb2NhbGUgZmlsZXMgZ2VuZXJhdGVkIGhlcmUgd2lsbCBiZSBzdWl0YWJsZSBmb3IgdGhlIHRhcmdldAorICAgICMgb25seSBpZiBpdCBoYXMgdGhlIHNhbWUgZW5kaWFubmVzcyBhbmQgdWludDMyX3QgYWxpZ25tZW50IGFzIHRoZSBob3N0J3MuCisKKyAgICBDVF9Eb0xvZyBFWFRSQSAiSW5zdGFsbGluZyBDIGxpYnJhcnkgbG9jYWxlcyIKKyAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1ha2UgJHtKT0JTRkxBR1N9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsX3Jvb3Q9IiR7Q1RfU1lTUk9PVF9ESVJ9IiAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZWRhdGEvaW5zdGFsbC1sb2NhbGVzCit9CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvbGliYy9taW5ndy5zaCBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC9saWJjL21pbmd3LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZDc1NDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvbGliYy9taW5ndy5zaApAQCAtMCwwICsxLDE1NiBAQAorZG9fbGliY19nZXQoKSB7CisgICAgQ1RfR2V0RmlsZSAibWluZ3dydC0ke0NUX01JTkdXUlRfVkVSU0lPTn0tbWluZ3czMi1zcmMiIFwKKyAgICAgICAgaHR0cDovL2Rvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvc291cmNlZm9yZ2UvbWluZ3cKKworICAgIGlmIFsgLW4gIiR7Q1RfTUlOR1dfRElSRUNUWH0iIF07IHRoZW4KKyAgICAgICAgQ1RfR2V0RmlsZSAiZGlyZWN0eC1kZXZlbCIgXAorICAgICAgICAgICAgaHR0cDovL3d3dy5saWJzZGwub3JnL2V4dHJhcy93aW4zMi9jb21tb24KKyAgICBmaQorICAgIGlmIFsgLW4gIiR7Q1RfTUlOR1dfT1BFTkdMfSIgXTsgdGhlbgorICAgICAgICBDVF9HZXRGaWxlICJvcGVuZ2wtZGV2ZWwiIFwKKyAgICAgICAgICAgIGh0dHA6Ly93d3cubGlic2RsLm9yZy9leHRyYXMvd2luMzIvY29tbW9uCisgICAgZmkKKyAgICBpZiBbIC1uICIke0NUX01JTkdXX1BEQ1VSU0VTfSIgXTsgdGhlbgorICAgICAgICBDVF9HZXRGaWxlICJQREN1cnNlcy0ke0NUX01JTkdXX1BEQ1VSU0VTX1ZFUlNJT059IiBcCisgICAgICAgICAgICBodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9zb3VyY2Vmb3JnZS9wZGN1cnNlcworICAgIGZpCisgICAgaWYgWyAtbiAiJHtDVF9NSU5HV19HTlVSWH0iIF07IHRoZW4KKyAgICAgICAgQ1RfR2V0RmlsZSAibWluZ3ctbGliZ251cngtJHtDVF9NSU5HV19HTlVSWF9WRVJTSU9OfS1zcmMiIFwKKyAgICAgICAgICAgIGh0dHA6Ly9kb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L3NvdXJjZWZvcmdlL21pbmd3CisgICAgZmkKK30KKworZG9fbGliY19leHRyYWN0KCkgeworICAgIENUX0V4dHJhY3QgIm1pbmd3cnQtJHtDVF9NSU5HV1JUX1ZFUlNJT059LW1pbmd3MzItc3JjIgorCisgICAgaWYgWyAtbiAiJHtDVF9NSU5HV19QRENVUlNFU30iIF07IHRoZW4KKyAgICAgICAgQ1RfRXh0cmFjdCAiUERDdXJzZXMtJHtDVF9NSU5HV19QRENVUlNFU19WRVJTSU9OfSIKKyAgICAgICAgQ1RfUGF0Y2ggIlBEQ3Vyc2VzIiAiJHtDVF9NSU5HV19QRENVUlNFU19WRVJTSU9OfSIKKyAgICBmaQorICAgIGlmIFsgLW4gIiR7Q1RfTUlOR1dfR05VUlh9IiBdOyB0aGVuCisgICAgICAgIENUX0V4dHJhY3QgIm1pbmd3LWxpYmdudXJ4LSR7Q1RfTUlOR1dfR05VUlhfVkVSU0lPTn0tc3JjIgorICAgICAgICBDVF9QYXRjaCAibWluZ3ctbGliZ251cngiICIke0NUX01JTkdXX0dOVVJYX1ZFUlNJT059LXNyYyIKKyAgICBmaQorfQorCitkb19saWJjX2NoZWNrX2NvbmZpZygpIHsKKyAgICA6Cit9CisKK2RvX2xpYmNfc3RhcnRfZmlsZXMoKSB7CisgICAgQ1RfRG9TdGVwIElORk8gIkluc3RhbGxpbmcgQyBsaWJyYXJ5IGhlYWRlcnMiCisKKyAgICBDVF9Eb0xvZyBFWFRSQSAiSW5zdGFsbGluZyBNaW5HVyBSdW50aW1lIGhlYWRlcnMiCisgICAgbWtkaXIgLXAgIiR7Q1RfSEVBREVSU19ESVJ9IgorICAgIGNwIC1yICR7Q1RfU1JDX0RJUn0vbWluZ3dydC0ke0NUX01JTkdXUlRfVkVSU0lPTn0tbWluZ3czMi1zcmMvaW5jbHVkZS8qIFwKKyAgICAgICAgICAke0NUX0hFQURFUlNfRElSfQorCisgICAgIyBJdCBzZWVtcyBtaW5ndyBpcyBzdHJhbmdlbHkgc2V0IHVwIHRvIGxvb2sgaW50byAvbWluZ3cgaW5zdGVhZCBvZgorICAgICMgL3VzciAobm90YWJseSB3aGVuIGxvb2tpbmcgZm9yIHRoZSBoZWFkZXJzKS4gVGhpcyBzeW1saW5rIGlzCisgICAgIyBoZXJlIHRvIHdvcmthcm91bmQgdGhpcywgYW5kIHNlZW1zIHRvIGJlIGhlcmUgdG8gbGFzdC4uLiA6LS8KKyAgICBDVF9Eb0V4ZWNMb2cgQUxMIGxuIC1zdiAidXNyIiAiJHtDVF9TWVNST09UX0RJUn0vbWluZ3ciCisKKyAgICBDVF9FbmRTdGVwCit9CisKK2RvX2xpYmMoKSB7CisgICAgQ1RfRG9TdGVwIElORk8gIkJ1aWxkaW5nIE1pbkdXIGZpbGVzIgorCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkNvbmZpZ3VyaW5nIFczMi1BUEkiCisKKyAgICBta2RpciAtcCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLXczMmFwaSIKKyAgICBjZCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLXczMmFwaSIKKworICAgIENUX0RvRXhlY0xvZyBDRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDRkxBR1M9Ii1JJHtDVF9IRUFERVJTX0RJUn0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTERGTEFHUz0iLUwke0NUX1NZU1JPT1RfRElSfS9saWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIke0NUX1NSQ19ESVJ9L3czMmFwaS0ke0NUX1czMkFQSV9WRVJTSU9OfS1taW5ndzMyLXNyYy9jb25maWd1cmUiIFwKKyAgICAgICAgLS1wcmVmaXg9JHtDVF9TWVNST09UX0RJUn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC0taW5jbHVkZWRpcj0ke0NUX0hFQURFUlNfRElSfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWhvc3Q9JHtDVF9UQVJHRVR9CisKKyAgICBDVF9Eb0xvZyBFWFRSQSAiQnVpbGRpbmcgVzMyLUFQSSIKKyAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1ha2UgJHtKT0JTRkxBR1N9CisKKyAgICBDVF9Eb0xvZyBFWFRSQSAiSW5zdGFsbGluZyBXMzItQVBJIgorICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSBpbnN0YWxsCisKKyAgICBDVF9Eb0xvZyBFWFRSQSAiQ29uZmlndXJpbmcgTWluR1cgUnVudGltZSIKKworICAgIG1rZGlyIC1wICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtbWluZ3dydCIKKyAgICBjZCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLW1pbmd3cnQiCisKKyAgICBDVF9Eb0V4ZWNMb2cgQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDRkxBR1M9Ii1JJHtDVF9IRUFERVJTX0RJUn0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBMREZMQUdTPSItTCR7Q1RfU1lTUk9PVF9ESVJ9L2xpYiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiJHtDVF9TUkNfRElSfS9taW5nd3J0LSR7Q1RfTUlOR1dSVF9WRVJTSU9OfS1taW5ndzMyLXNyYy9jb25maWd1cmUiIFwKKyAgICAgICAgLS1wcmVmaXg9JHtDVF9TWVNST09UX0RJUn0vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1pbmNsdWRlZGlyPSR7Q1RfSEVBREVSU19ESVJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS1ob3N0PSR7Q1RfVEFSR0VUfQorCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkJ1aWxkaW5nIE1pbkdXIFJ1bnRpbWUiCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlICR7Sk9CU0ZMQUdTfQorCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkluc3RhbGxpbmcgTWluR1cgUnVudGltZSIKKyAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1ha2UgaW5zdGFsbAorCisgICAgQ1RfRW5kU3RlcAorfQorCitkb19saWJjX2ZpbmlzaCgpIHsKKyAgICBDVF9Eb1N0ZXAgSU5GTyAiSW5zdGFsbGluZyBNaW5HVyBEZXZlbG9wbWVudCBsaWJyYXJpZXMiCisKKyAgICBDVF9QdXNoZCAiJHtDVF9TWVNST09UX0RJUn0iCisgICAgaWYgWyAtbiAiJHtDVF9NSU5HV19ESVJFQ1RYfSIgXTsgdGhlbgorICAgICAgICBDVF9Eb0xvZyBFWFRSQSAiSW5zdGFsbGluZyBEaXJlY3RYIGRldmVsb3BtZW50IHBhY2thZ2UiCisgICAgICAgIENUX0V4dHJhY3Qgbm9jaGRpciAiZGlyZWN0eC1kZXZlbCIKKyAgICBmaQorICAgIGlmIFsgLW4gIiR7Q1RfTUlOR1dfT1BFTkdMfSIgXTsgdGhlbgorICAgICAgICBDVF9Eb0xvZyBFWFRSQSAiSW5zdGFsbGluZyBPcGVuR0wgZGV2ZWxvcG1lbnQgcGFja2FnZSIKKyAgICAgICAgQ1RfRXh0cmFjdCBub2NoZGlyICJvcGVuZ2wtZGV2ZWwiCisgICAgZmkKKyAgICBDVF9Qb3BkCisKKyAgICBpZiBbIC1uICIke0NUX01JTkdXX1BEQ1VSU0VTfSIgXTsgdGhlbgorICAgICAgICBDVF9Eb0xvZyBFWFRSQSAiQnVpbGRpbmcgUERDdXJzZXMgZGV2ZWxvcG1lbnQgZmlsZXMiCisgICAgICAgIG1rZGlyIC1wICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtcGRjdXJzZXMiCisgICAgICAgIGNkICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtcGRjdXJzZXMiCisKKyAgICAgICAgbWFrZSAtZiAke0NUX1NSQ19ESVJ9L1BEQ3Vyc2VzLSR7Q1RfTUlOR1dfUERDVVJTRVNfVkVSU0lPTn0vd2luMzIvbWluZ3dpbjMyLm1hayBsaWJzIFwKKyAgICAgICAgICAgIFBEQ1VSU0VTX1NSQ0RJUj0ke0NUX1NSQ19ESVJ9L1BEQ3Vyc2VzLSR7Q1RfTUlOR1dfUERDVVJTRVNfVkVSU0lPTn0gXAorICAgICAgICAgICAgQ1JPU1NfQ09NUElMRT0ke0NUX1RBUkdFVH0tCisKKyAgICAgICAgQ1RfRG9Mb2cgRVhUUkEgIkluc3RhbGxpbmcgUERDdXJzZXMgZGV2ZWxvcG1lbnQgZmlsZXMiCisgICAgICAgIGNobW9kIGErciAke0NUX1NSQ19ESVJ9L1BEQ3Vyc2VzLSR7Q1RfTUlOR1dfUERDVVJTRVNfVkVSU0lPTn0vKi5oCisgICAgICAgIGNwICR7Q1RfU1JDX0RJUn0vUERDdXJzZXMtJHtDVF9NSU5HV19QRENVUlNFU19WRVJTSU9OfS8qLmggXAorICAgICAgICAgICAke0NUX0hFQURFUlNfRElSfS8KKyAgICAgICAgY3AgcGRjdXJzZXMuYSAke0NUX1NZU1JPT1RfRElSfS9saWIvbGlicGRjdXJzZXMuYQorICAgICAgICBjcCBwZGN1cnNlcy5hICR7Q1RfU1lTUk9PVF9ESVJ9L2xpYi9saWJuY3Vyc2VzLmEKKyAgICBmaQorCisgICAgaWYgWyAtbiAiJHtDVF9NSU5HV19HTlVSWH0iIF07IHRoZW4KKyAgICAgICAgQ1RfRG9Mb2cgRVhUUkEgIkNvbmZpZ3VyaW5nIEdudVJYIGRldmVsb3BtZW50IGZpbGVzIgorCisgICAgICAgIG1rZGlyIC1wICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtZ251cngiCisgICAgICAgIGNkICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtZ251cngiCisKKyAgICAgICAgQ1RfRG9FeGVjTG9nIENGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBDRkxBR1M9IiR7Q1RfQ0ZMQUdTX0ZPUl9UQVJHRVR9IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICIke0NUX1NSQ19ESVJ9L21pbmd3LWxpYmdudXJ4LSR7Q1RfTUlOR1dfR05VUlhfVkVSU0lPTn0tc3JjL2NvbmZpZ3VyZSIgIFwKKyAgICAgICAgICAgIC0tYnVpbGQ9JHtDVF9CVUlMRH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgLS1ob3N0PSR7Q1RfVEFSR0VUfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAtLXByZWZpeD0ke0NUX1NZU1JPT1RfRElSfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIC0taW5jbHVkZWRpcj0ke0NUX0hFQURFUlNfRElSfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgLS1lbmFibGUtc2hhcmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAtLWVuYWJsZS1zdGF0aWMKKworICAgICAgICBDVF9Eb0xvZyBFWFRSQSAiQnVpbGRpbmcgR251UlggZGV2ZWxvcG1lbnQgZmlsZXMiCisgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgbWFrZSAke0pPQlNGTEFHU30KKworICAgICAgICBDVF9Eb0xvZyBFWFRSQSAiSW5zdGFsbGluZyBHbnVSWCBkZXZlbG9wbWVudCBmaWxlcyIKKyAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlIGluc3RhbGwtZGV2CisgICAgZmkKKworICAgIENUX0VuZFN0ZXAKK30KKwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2xpYmMvbmV3bGliLnNoIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2xpYmMvbmV3bGliLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4OWM0ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvbGliYy9uZXdsaWIuc2gKQEAgLTAsMCArMSwxMjYgQEAKKyMgVGhpcyBmaWxlIGFkZHMgZnVuY3Rpb25zIHRvIGJ1aWxkIHRoZSBOZXdsaWIgQyBsaWJyYXJ5CisjIENvcHlyaWdodCAyMDA5IERvcsOpRGV2ZWxvcG1lbnQKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEdQTCB2Mi4gU2VlIENPUFlJTkcgaW4gdGhlIHJvb3Qgb2YgdGhpcyBwYWNrYWdlCisjCisjIEVkaXRlZCBieSBNYXJ0aW4gTHVuZCA8bWdsQGRvcmVkZXZlbG9wbWVudC5kaz4KKyMKKworbGliY19uZXdsaWJfdmVyc2lvbigpIHsKKyAgICBpZiBbIC16ICIke0NUX0xJQkNfTkVXTElCX0NWU30iIF07IHRoZW4KKyAgICAgICAgZWNobyAiJHtDVF9MSUJDX1ZFUlNJT059IgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiY3ZzJHtDVF9MSUJDX1ZFUlNJT046Ky0ke0NUX0xJQkNfVkVSU0lPTn19IgorICAgIGZpCit9CisKK2RvX2xpYmNfZ2V0KCkgeworICAgIGxvY2FsIGxpYmNfc3JjCisgICAgbG9jYWwgYXZyMzJoZWFkZXJzX3NyYworCisgICAgbGliY19zcmM9ImZ0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9wdWIvbmV3bGliIgorICAgIGF2cjMyaGVhZGVyc19zcmM9Imh0dHA6Ly9kZXYuZG9yZWRldmVsb3BtZW50LmRrL2F2cjMyLXRvb2xjaGFpbi9zb3VyY2VzIgorCisgICAgaWYgWyAteiAiJHtDVF9MSUJDX05FV0xJQl9DVlN9IiBdOyB0aGVuCisgICAgICAgIENUX0dldEZpbGUgIm5ld2xpYi0ke0NUX0xJQkNfVkVSU0lPTn0iICR7bGliY19zcmN9CisgICAgZWxzZQorICAgICAgICBDVF9HZXRDVlMgIm5ld2xpYi0kKGxpYmNfbmV3bGliX3ZlcnNpb24pIiAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAiOnBzZXJ2ZXI6YW5vbmN2c0Bzb3VyY2VzLnJlZGhhdC5jb206L2N2cy9zcmMiICAgIFwKKyAgICAgICAgICAgICAgICAgICJuZXdsaWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgIiR7Q1RfTElCQ19WRVJTSU9OfSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAibmV3bGliLSQobGliY19uZXdsaWJfdmVyc2lvbik9c3JjIgorICAgIGZpCisKKyAgICBpZiBbICIke0NUX0FUTUVMX0FWUjMyX0hFQURFUlN9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIENUX0dldEZpbGUgImF2cjMyaGVhZGVycyIgJHthdnIzMmhlYWRlcnNfc3JjfQorICAgIGZpCit9CisKK2RvX2xpYmNfZXh0cmFjdCgpIHsKKyAgICBDVF9FeHRyYWN0ICJuZXdsaWItJChsaWJjX25ld2xpYl92ZXJzaW9uKSIKKyAgICBDVF9QYXRjaCAibmV3bGliIiAiJChsaWJjX25ld2xpYl92ZXJzaW9uKSIKKworICAgIGlmIFsgIiR7Q1RfQVRNRUxfQVZSMzJfSEVBREVSU30iID0gInkiIF07IHRoZW4KKyAgICAgICAgQ1RfRXh0cmFjdCAiYXZyMzJoZWFkZXJzIgorICAgIGZpCit9CisKK2RvX2xpYmNfY2hlY2tfY29uZmlnKCkgeworICAgIDoKK30KKworZG9fbGliY19zdGFydF9maWxlcygpIHsKKyAgICBsb2NhbCAtYSBuZXdsaWJfb3B0cworCisgICAgQ1RfRG9TdGVwIElORk8gIkluc3RhbGxpbmcgQyBsaWJyYXJ5IgorCisgICAgbWtkaXIgLXAgIiR7Q1RfQlVJTERfRElSfS9idWlsZC1saWJjIgorICAgIGNkICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtbGliYyIKKworICAgIENUX0RvTG9nIEVYVFJBICJDb25maWd1cmluZyBDIGxpYnJhcnkiCisKKyAgICBpZiBbICIke0NUX0xJQkNfTkVXTElCX0lPX0M5OUZNVH0iID0gInkiIF07IHRoZW4KKyAgICAgICAgbmV3bGliX29wdHMrPSggIi0tZW5hYmxlLW5ld2xpYi1pby1jOTktZm9ybWF0cyIgKQorICAgIGVsc2UKKyAgICAgICAgbmV3bGliX29wdHMrPSggIi0tZGlzYWJsZS1uZXdsaWItaW8tYzk5LWZvcm1hdHMiICkKKyAgICBmaQorICAgIGlmIFsgIiR7Q1RfTElCQ19ORVdMSUJfSU9fTEx9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIG5ld2xpYl9vcHRzKz0oICItLWVuYWJsZS1uZXdsaWItaW8tbG9uZy1sb25nIiApCisgICAgZWxzZQorICAgICAgICBuZXdsaWJfb3B0cys9KCAiLS1kaXNhYmxlLW5ld2xpYi1pby1sb25nLWxvbmciICkKKyAgICBmaQorICAgIGlmIFsgIiR7Q1RfTElCQ19ORVdMSUJfSU9fRkxPQVR9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIG5ld2xpYl9vcHRzKz0oICItLWVuYWJsZS1uZXdsaWItaW8tZmxvYXQiICkKKyAgICAgICAgaWYgWyAiJHtDVF9MSUJDX05FV0xJQl9JT19MREJMfSIgPSAieSIgXTsgdGhlbgorICAgICAgICAgICAgbmV3bGliX29wdHMrPSggIi0tZW5hYmxlLW5ld2xpYi1pby1sb25nLWRvdWJsZSIgKQorICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXdsaWJfb3B0cys9KCAiLS1kaXNhYmxlLW5ld2xpYi1pby1sb25nLWRvdWJsZSIgKQorICAgICAgICBmaQorICAgIGVsc2UKKyAgICAgICAgbmV3bGliX29wdHMrPSggIi0tZGlzYWJsZS1uZXdsaWItaW8tZmxvYXQiICkKKyAgICAgICAgbmV3bGliX29wdHMrPSggIi0tZGlzYWJsZS1uZXdsaWItaW8tbG9uZy1kb3VibGUiICkKKyAgICBmaQorICAgIGlmIFsgIiR7Q1RfTElCQ19ORVdMSUJfRElTQUJMRV9TVVBQTElFRF9TWVNDQUxMU30iID0gInkiIF07IHRoZW4KKyAgICAgICAgbmV3bGliX29wdHMrPSggIi0tZGlzYWJsZS1uZXdsaWItc3VwcGxpZWQtc3lzY2FsbHMiICkKKyAgICBlbHNlCisgICAgICAgIG5ld2xpYl9vcHRzKz0oICItLWVuYWJsZS1uZXdsaWItc3VwcGxpZWQtc3lzY2FsbHMiICkKKyAgICBmaQorCisgICAgIyBOb3RlOiBuZXdsaWIgaGFuZGxlcyB0aGUgYnVpbGQvaG9zdC90YXJnZXQgYSBsaXR0bGUgYml0IGRpZmZlcmVudGx5CisgICAgIyB0aGFuIG9uZSB3b3VsZCBleHBlY3Q6CisgICAgIyAgIGJ1aWxkICA6IG5vdCB1c2VkCisgICAgIyAgIGhvc3QgICA6IHRoZSBtYWNoaW5lIGJ1aWxkaW5nIG5ld2xpYgorICAgICMgICB0YXJnZXQgOiB0aGUgbWFjaGluZSBuZXdsaWIgcnVucyBvbgorICAgIENUX0RvRXhlY0xvZyBDRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ0NfRk9SX0JVSUxEPSIke0NUX0JVSUxEfS1nY2MiICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDRkxBR1NfRk9SX1RBUkdFVD0iJHtDVF9UQVJHRVRfQ0ZMQUdTfSAtTyIgICAgICAgICAgXAorICAgIEFSPSR7Q1RfVEFSR0VUfS1hciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUkFOTElCPSR7Q1RfVEFSR0VUfS1yYW5saWIgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiJHtDVF9TUkNfRElSfS9uZXdsaWItJChsaWJjX25ld2xpYl92ZXJzaW9uKS9jb25maWd1cmUiIFwKKyAgICAgICAgLS1ob3N0PSR7Q1RfQlVJTER9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLXRhcmdldD0ke0NUX1RBUkdFVH0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC0tcHJlZml4PSR7Q1RfUFJFRklYX0RJUn0gICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIiR7bmV3bGliX29wdHNbQF19IgorCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkJ1aWxkaW5nIEMgbGlicmFyeSIKKyAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1ha2UgJHtKT0JTRkxBR1N9CisKKyAgICBDVF9Eb0xvZyBFWFRSQSAiSW5zdGFsbGluZyBDIGxpYnJhcnkiCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBtYWtlIGluc3RhbGwgaW5zdGFsbF9yb290PSIke0NUX1NZU1JPT1RfRElSfSIKKworICAgIENUX0VuZFN0ZXAKK30KKworZG9fbGliYygpIHsKKyAgICA6Cit9CisKK2RvX2xpYmNfZmluaXNoKCkgeworICAgIENUX0RvU3RlcCBJTkZPICJGaW5pc2hpbmcgQyBsaWJyYXJ5IgorICAgIAorICAgIGlmIFsgIiR7Q1RfQVRNRUxfQVZSMzJfSEVBREVSU30iID0gInkiIF07IHRoZW4KKyAgICAgICAgQ1RfRG9Mb2cgRVhUUkEgIkluc3RhbGxpbmcgQXRtZWwncyBBVlIzMiBoZWFkZXJzIgorICAgICAgICBDVF9Eb0V4ZWNMb2cgQUxMIGNwIC1yICR7Q1RfU1JDX0RJUn0vYXZyMzJoZWFkZXJzICIke0NUX1BSRUZJWF9ESVJ9LyR7Q1RfVEFSR0VUfS9pbmNsdWRlL2F2cjMyIgorICAgIGZpCisKKyAgICBDVF9FbmRTdGVwCit9CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvbGliYy9ub25lLnNoIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2xpYmMvbm9uZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzBhNGI1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2xpYmMvbm9uZS5zaApAQCAtMCwwICsxLDI3IEBACisjIFRoaXMgZmlsZSBhZGRzIGZ1bmN0aW9ucyB0byBidWlsZCB0aGUgQyBsaWJyYXJ5IGZvciBiYXJlIG1ldGFsIChJRS4gbm9uZSkKKyMgQ29weXJpZ2h0IDIwMDggWWFubiBFLiBNT1JJTgorIyBMaWNlbnNlZCB1bmRlciB0aGUgR1BMIHYyLiBTZWUgQ09QWUlORyBpbiB0aGUgcm9vdCBvZiB0aGlzIHBhY2thZ2UKKworZG9fbGliY19nZXQoKSB7CisgICAgOgorfQorCitkb19saWJjX2V4dHJhY3QoKSB7CisgICAgOgorfQorCitkb19saWJjX2NoZWNrX2NvbmZpZygpIHsKKyAgICA6Cit9CisKK2RvX2xpYmNfc3RhcnRfZmlsZXMoKSB7CisgICAgOgorfQorCitkb19saWJjKCkgeworICAgIDoKK30KKworZG9fbGliY19maW5pc2goKSB7CisgICAgOgorfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2xpYmMvdUNsaWJjLnNoIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL2xpYmMvdUNsaWJjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZGU2MjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvbGliYy91Q2xpYmMuc2gKQEAgLTAsMCArMSw1NDAgQEAKKyMgVGhpcyBmaWxlIGRlY2xhcmVzIGZ1bmN0aW9ucyB0byBpbnN0YWxsIHRoZSB1Q2xpYmMgQyBsaWJyYXJ5CisjIENvcHlyaWdodCAyMDA3IFlhbm4gRS4gTU9SSU4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIEdQTCB2Mi4gU2VlIENPUFlJTkcgaW4gdGhlIHJvb3Qgb2YgdGhpcyBwYWNrYWdlCisKKyMgVGhpcyBpcyBhIGNvbnN0YW50IGJlY2F1c2UgaXQgZG9lcyBub3QgY2hhbmdlIHZlcnkgb2Z0ZW4uCisjIFdlJ3JlIGluIDIwMTAsIGFuZCBhcmUgc3RpbGwgdXNpbmcgZGF0YSBmcm9tIDcgeWVhcnMgYWdvLgordWNsaWJjX2xvY2FsZXNfdmVyc2lvbj0wMzA4MTgKK3VjbGliY19sb2NhbF90YXJiYWxsPSJ1Q2xpYmMtbG9jYWxlLSR7dWNsaWJjX2xvY2FsZXNfdmVyc2lvbn0iCisKKyMgRG93bmxvYWQgdUNsaWJjCitkb19saWJjX2dldCgpIHsKKyAgICBsaWJjX3NyYz0iaHR0cDovL3d3dy51Y2xpYmMub3JnL2Rvd25sb2FkcworICAgICAgICAgICAgICBodHRwOi8vd3d3LnVjbGliYy5vcmcvZG93bmxvYWRzL3NuYXBzaG90cworICAgICAgICAgICAgICBodHRwOi8vd3d3LnVjbGliYy5vcmcvZG93bmxvYWRzL29sZC1yZWxlYXNlcyIKKyAgICAjIEZvciB1Q2xpYmMsIHdlIGhhdmUgYWxtb3N0IGV2ZXJ5IHRoaW5nOiByZWxlYXNlcywgYW5kIHNuYXBzaG90cworICAgICMgZm9yIHRoZSBsYXN0IG1vbnRoIG9yIHNvLiBXZSdsbCBoYXZlIHRvIGRlYWwgd2l0aCBzdm4gcmV2aXNpb25zCisgICAgIyBsYXRlci4uLgorICAgIENUX0dldEZpbGUgInVDbGliYy0ke0NUX0xJQkNfVkVSU0lPTn0iICR7bGliY19zcmN9CisgICAgIyB1Q2xpYmMgbG9jYWxlcworICAgIGlmIFsgIiR7Q1RfTElCQ19VQ0xJQkNfTE9DQUxFU19QUkVHRU5fREFUQX0iID0gInkiIF07IHRoZW4KKyAgICAgICAgQ1RfR2V0RmlsZSAiJHt1Y2xpYmNfbG9jYWxfdGFyYmFsbH0iICR7bGliY19zcmN9CisgICAgZmkKKworICAgIHJldHVybiAwCit9CisKKyMgRXh0cmFjdCB1Q2xpYmMKK2RvX2xpYmNfZXh0cmFjdCgpIHsKKyAgICBDVF9FeHRyYWN0ICJ1Q2xpYmMtJHtDVF9MSUJDX1ZFUlNJT059IgorICAgICMgRG9uJ3QgcGF0Y2ggc25hcHNob3RzCisgICAgaWYgWyAgICAteiAiJHtDVF9MSUJDX1VDTElCQ19WX3NuYXBzaG90fSIgICAgICBcCisgICAgICAgICAtYSAteiAiJHtDVF9MSUJDX1VDTElCQ19WX3NwZWNpZmljX2RhdGV9IiBcCisgICAgICAgXTsgdGhlbgorICAgICAgICBDVF9QYXRjaCAidUNsaWJjIiAiJHtDVF9MSUJDX1ZFUlNJT059IgorICAgIGZpCisKKyAgICAjIHVDbGliYyBsb2NhbGVzCisgICAgIyBFeHRyYWN0aW5nIHByZWdlbiBsb2NhbGVzIG91cnNlbHZlcyBpcyBraW5kYQorICAgICMgYnJva2VuLCBzbyBqdXN0IGxpbmsgaXQgaW4gcGxhY2UuLi4KKyAgICBpZiBbICAgICIke0NUX0xJQkNfVUNMSUJDX0xPQ0FMRVNfUFJFR0VOX0RBVEF9IiA9ICJ5IiAgICAgICAgICAgXAorICAgICAgICAgLWEgISAtZiAiJHtDVF9TUkNfRElSfS8uJHt1Y2xpYmNfbG9jYWxfdGFyYmFsbH0uZXh0cmFjdGVkIiBdOyB0aGVuCisgICAgICAgIENUX1B1c2hkICIke0NUX1NSQ19ESVJ9L3VDbGliYy0ke0NUX0xJQkNfVkVSU0lPTn0vZXh0cmEvbG9jYWxlIgorICAgICAgICBDVF9Eb0V4ZWNMb2cgQUxMIGxuIC1zICIke0NUX1RBUkJBTExTX0RJUn0vJHt1Y2xpYmNfbG9jYWxfdGFyYmFsbH0udGd6IiAuCisgICAgICAgIENUX1BvcGQKKyAgICAgICAgdG91Y2ggIiR7Q1RfU1JDX0RJUn0vLiR7dWNsaWJjX2xvY2FsX3RhcmJhbGx9LmV4dHJhY3RlZCIKKyAgICBmaQorCisgICAgcmV0dXJuIDAKK30KKworIyBDaGVjayB0aGF0IHVDbGliYyBoYXMgYmVlbiBwcmV2aW91c2x5IGNvbmZpZ3VyZWQKK2RvX2xpYmNfY2hlY2tfY29uZmlnKCkgeworICAgIENUX0RvU3RlcCBJTkZPICJDaGVja2luZyBDIGxpYnJhcnkgY29uZmlndXJhdGlvbiIKKworICAgIENUX1Rlc3RPckFib3J0ICJZb3UgZGlkIG5vdCBwcm92aWRlIGEgdUNsaWJjIGNvbmZpZyBmaWxlISIgLW4gIiR7Q1RfTElCQ19VQ0xJQkNfQ09ORklHX0ZJTEV9IiAtYSAtZiAiJHtDVF9MSUJDX1VDTElCQ19DT05GSUdfRklMRX0iCisKKyAgICBpZiBncmVwIC1FICdeS0VSTkVMX1NPVVJDRT0nICIke0NUX0xJQkNfVUNMSUJDX0NPTkZJR19GSUxFfSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgIENUX0RvTG9nIFdBUk4gIllvdXIgdUNsaWJjIHZlcnNpb24gcmVmZXJzIHRvIHRoZSBrZXJuZWwgX3NvdXJjZXNfLCB3aGljaCBpcyBiYWQuIgorICAgICAgICBDVF9Eb0xvZyBXQVJOICJJIGNhbid0IGd1YXJhbnRlZSB0aGF0IG91ciBsaXR0bGUgaGFjayB3aWxsIHdvcmsuIFBsZWFzZSB0cnkgdG8gdXBncmFkZS4iCisgICAgZmkKKworICAgIENUX0RvTG9nIEVYVFJBICJNdW5naW5nIHVDbGliYyBjb25maWd1cmF0aW9uIgorICAgIG11bmdldUNsaWJjQ29uZmlnICIke0NUX0xJQkNfVUNMSUJDX0NPTkZJR19GSUxFfSIgIiR7Q1RfQ09ORklHX0RJUn0vdUNsaWJjLmNvbmZpZyIKKworICAgIENUX0VuZFN0ZXAKK30KKworIyBCdWlsZCBhbmQgaW5zdGFsbCBoZWFkZXJzIGFuZCBzdGFydCBmaWxlcworZG9fbGliY19zdGFydF9maWxlcygpIHsKKyAgICBsb2NhbCBpbnN0YWxsX3J1bGUKKyAgICBsb2NhbCBjcm9zcworCisgICAgQ1RfRG9TdGVwIElORk8gIkluc3RhbGxpbmcgQyBsaWJyYXJ5IGhlYWRlcnMiCisKKyAgICAjIFNpbXBseSBjb3B5IGZpbGVzIHVudGlsIHVDbGliYyBoYXMgdGhlIGFiaWxpdHkgdG8gYnVpbGQgb3V0LW9mLXRyZWUKKyAgICBDVF9Eb0xvZyBFWFRSQSAiQ29weWluZyBzb3VyY2VzIHRvIGJ1aWxkIGRpciIKKyAgICBDVF9Eb0V4ZWNMb2cgQUxMIGNwIC1hdiAiJHtDVF9TUkNfRElSfS91Q2xpYmMtJHtDVF9MSUJDX1ZFUlNJT059IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLWxpYmMtaGVhZGVycyIKKyAgICBjZCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLWxpYmMtaGVhZGVycyIKKworICAgICMgUmV0cmlldmUgdGhlIGNvbmZpZyBmaWxlCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBjcCAiJHtDVF9DT05GSUdfRElSfS91Q2xpYmMuY29uZmlnIiAuY29uZmlnCisKKyAgICAjIHVDbGliYyB1c2VzIHRoZSBDUk9TUyBlbnZpcm9ubWVudCB2YXJpYWJsZSBhcyBhIHByZWZpeCB0byB0aGUKKyAgICAjIGNvbXBpbGVyIHRvb2xzIHRvIHVzZS4gIFNldHRpbmcgaXQgdG8gdGhlIGVtcHR5IHN0cmluZyBmb3JjZXMKKyAgICAjIHVzZSBvZiB0aGUgbmF0aXZlIGJ1aWxkIGhvc3QgdG9vbHMsIHdoaWNoIHdlIG5lZWQgYXQgdGhpcworICAgICMgc3RhZ2UsIGFzIHdlIGRvbid0IGhhdmUgdGFyZ2V0IHRvb2xzIHlldC4KKyAgICAjIEJVVCEgV2l0aCBOUFRMLCB3ZSBuZWVkIGEgY3Jvc3MtY29tcGlsZXIgKGFuZCB3ZSBoYXZlIGl0KQorICAgIGlmIFsgIiR7Q1RfVEhSRUFEU30iID0gIm5wdGwiIF07IHRoZW4KKyAgICAgICAgY3Jvc3M9IiR7Q1RfVEFSR0VUfS0iCisgICAgZmkKKworICAgICMgRm9yY2UgdGhlIGRhdGUgb2YgdGhlIHByZWdlbiBsb2NhbGUgZGF0YSwgYXMgdGhlCisgICAgIyBuZXdlciBvbmVzIHRoYXQgYXJlIHJlZmVyZW5jZWQgYXJlIG5vdCBhdmFpbGFibGUKKyAgICBDVF9Eb0xvZyBFWFRSQSAiQXBwbHlpbmcgY29uZmlndXJhdGlvbiIKKyAgICBDVF9Eb1llcyAiIiB8Q1RfRG9FeGVjTG9nIEFMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICBtYWtlIENST1NTPSIke2Nyb3NzfSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIFBSRUZJWD0iJHtDVF9TWVNST09UX0RJUn0vIiAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgTE9DQUxFX0RBVEFfRklMRU5BTUU9IiR7dWNsaWJjX2xvY2FsX3RhcmJhbGx9LnRneiIgXAorICAgICAgICAgICAgICAgICBvbGRjb25maWcKKworICAgIENUX0RvTG9nIEVYVFJBICJCdWlsZGluZyBoZWFkZXJzIgorICAgIENUX0RvRXhlY0xvZyBBTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1ha2UgJHtDVF9MSUJDX1VDTElCQ19WRVJCT1NJVFl9ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgQ1JPU1M9IiR7Y3Jvc3N9IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgUFJFRklYPSIke0NUX1NZU1JPT1RfRElSfS8iICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgTE9DQUxFX0RBVEFfRklMRU5BTUU9IiR7dWNsaWJjX2xvY2FsX3RhcmJhbGx9LnRneiIgXAorICAgICAgICAgaGVhZGVycworCisgICAgaWYgWyAiJHtDVF9MSUJDX1VDTElCQ18wXzlfMzBfb3JfbGF0ZXJ9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIGluc3RhbGxfcnVsZT1pbnN0YWxsX2hlYWRlcnMKKyAgICBlbHNlCisgICAgICAgIGluc3RhbGxfcnVsZT1pbnN0YWxsX2RldgorICAgIGZpCisKKyAgICBDVF9Eb0xvZyBFWFRSQSAiSW5zdGFsbGluZyBoZWFkZXJzIgorICAgIENUX0RvRXhlY0xvZyBBTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1ha2UgJHtDVF9MSUJDX1VDTElCQ19WRVJCT1NJVFl9ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgQ1JPU1M9IiR7Y3Jvc3N9IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgUFJFRklYPSIke0NUX1NZU1JPT1RfRElSfS8iICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgTE9DQUxFX0RBVEFfRklMRU5BTUU9IiR7dWNsaWJjX2xvY2FsX3RhcmJhbGx9LnRneiIgXAorICAgICAgICAgJHtpbnN0YWxsX3J1bGV9CisKKyAgICBpZiBbICIke0NUX1RIUkVBRFN9IiA9ICJucHRsIiBdOyB0aGVuCisgICAgICAgIENUX0RvTG9nIEVYVFJBICJCdWlsZGluZyBzdGFydCBmaWxlcyIKKyAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG1ha2UgJHtDVF9MSUJDX1VDTElCQ19QQVJBTExFTDorJHtKT0JTRkxBR1N9fSAgICAgICAgICAgXAorICAgICAgICAgICAgIENST1NTPSIke2Nyb3NzfSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICBQUkVGSVg9IiR7Q1RfU1lTUk9PVF9ESVJ9LyIgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgU1RSSVBUT09MPXRydWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICR7Q1RfTElCQ19VQ0xJQkNfVkVSQk9TSVRZfSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICBMT0NBTEVfREFUQV9GSUxFTkFNRT0iJHt1Y2xpYmNfbG9jYWxfdGFyYmFsbH0udGd6IiBcCisgICAgICAgICAgICAgbGliL2NydDEubyBsaWIvY3J0aS5vIGxpYi9jcnRuLm8KKworICAgICAgICAjIEZyb206ICBodHRwOi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvY2dpdC5jZ2kvb3BlbmVtYmVkZGVkL2NvbW1pdC8/aWQ9YWQ1NjY4YTdhYzdlMDQzNmRiOTJlNTVjYWFmM2ZkZjc4MmI2YmEzYgorICAgICAgICAjIGxpYm0uc28gaXMgbmVlZGVkIGZvciBwcGMsIGFzIGxpYmdjYyBpcyBsaW5rZWQgYWdhaW5zdCBsaWJtLnNvCisgICAgICAgICMgTm8gcHJvYmxlbSB0byBjcmVhdGUgaXQgZm9yIG90aGVyIGFyY2hzLgorICAgICAgICBDVF9Eb0xvZyBFWFRSQSAiQnVpbGRpbmcgZHVtbXkgc2hhcmVkIGxpYnMiCisgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgIiR7Y3Jvc3N9Z2NjIiAtbm9zdGRsaWIgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1ub3N0YXJ0ZmlsZXMgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXNoYXJlZCAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAteCBjIC9kZXYvbnVsbCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1vIGxpYmR1bW15LnNvCisKKyAgICAgICAgQ1RfRG9Mb2cgRVhUUkEgIkluc3RhbGxpbmcgc3RhcnQgZmlsZXMiCisgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgaW5zdGFsbCAtbSAwNjQ0IGxpYi9jcnQxLm8gbGliL2NydGkubyBsaWIvY3J0bi5vICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJHtDVF9TWVNST09UX0RJUn0vdXNyL2xpYiIKKworICAgICAgICBDVF9Eb0xvZyBFWFRSQSAiSW5zdGFsbGluZyBkdW1teSBzaGFyZWQgbGlicyIKKyAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCBpbnN0YWxsIC1tIDA3NTUgbGliZHVtbXkuc28gIiR7Q1RfU1lTUk9PVF9ESVJ9L3Vzci9saWIvbGliYy5zbyIKKyAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCBpbnN0YWxsIC1tIDA3NTUgbGliZHVtbXkuc28gIiR7Q1RfU1lTUk9PVF9ESVJ9L3Vzci9saWIvbGlibS5zbyIKKyAgICBmaSAjIENUX1RIUkVBRFMgPT0gbnB0bAorCisgICAgQ1RfRW5kU3RlcAorfQorCisjIFRoaXMgZnVuY3Rpb24gYnVpbGQgYW5kIGluc3RhbGwgdGhlIGZ1bGwgdUNsaWJjCitkb19saWJjKCkgeworICAgIENUX0RvU3RlcCBJTkZPICJJbnN0YWxsaW5nIEMgbGlicmFyeSIKKworICAgICMgU2ltcGx5IGNvcHkgZmlsZXMgdW50aWwgdUNsaWJjIGhhcyB0aGUgYWJpbGl0eSB0byBidWlsZCBvdXQtb2YtdHJlZQorICAgIENUX0RvTG9nIEVYVFJBICJDb3B5aW5nIHNvdXJjZXMgdG8gYnVpbGQgZGlyIgorICAgIENUX0RvRXhlY0xvZyBBTEwgY3AgLWF2ICIke0NUX1NSQ19ESVJ9L3VDbGliYy0ke0NUX0xJQkNfVkVSU0lPTn0iICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIke0NUX0JVSUxEX0RJUn0vYnVpbGQtbGliYyIKKyAgICBjZCAiJHtDVF9CVUlMRF9ESVJ9L2J1aWxkLWxpYmMiCisKKyAgICAjIFJldHJpZXZlIHRoZSBjb25maWcgZmlsZQorICAgIENUX0RvRXhlY0xvZyBBTEwgY3AgIiR7Q1RfQ09ORklHX0RJUn0vdUNsaWJjLmNvbmZpZyIgLmNvbmZpZworCisgICAgIyB1Q2xpYmMgdXNlcyB0aGUgQ1JPU1MgZW52aXJvbm1lbnQgdmFyaWFibGUgYXMgYSBwcmVmaXggdG8gdGhlIGNvbXBpbGVyCisgICAgIyB0b29scyB0byB1c2UuICBUaGUgbmV3bHkgYnVpbHQgdG9vbHMgc2hvdWxkIGJlIGluIG91ciBwYXRoLCBzbyB3ZSBuZWVkCisgICAgIyBvbmx5IGdpdmUgdGhlIGNvcnJlY3QgbmFtZSBmb3IgdGhlbS4KKyAgICAjIE5vdGUgYWJvdXQgQ0ZMQUdTOiBJbiB1Q2xpYmMsIENGTEFHUyBhcmUgZ2VuZXJhdGVkIGJ5IFJ1bGVzLm1haywKKyAgICAjIGRlcGVuZGluZyAgb24gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGxpYnJhcnkuIFRoYXQgaXMsIHRoZXkgYXJlIHRhaWxvcmVkCisgICAgIyB0byBiZXN0IGZpdCB0aGUgdGFyZ2V0LiBTbyBpdCBpcyB1c2VsZXNzIGFuZCBzZWVtcyB0byBiZSBhIGJhZCB0aGluZyB0bworICAgICMgdXNlIExJQkNfRVhUUkFfQ0ZMQUdTIGhlcmUuCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkFwcGx5aW5nIGNvbmZpZ3VyYXRpb24iCisgICAgQ1RfRG9ZZXMgIiIgfENUX0RvRXhlY0xvZyBDRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgbWFrZSBDUk9TUz0ke0NUX1RBUkdFVH0tICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICBQUkVGSVg9IiR7Q1RfU1lTUk9PVF9ESVJ9LyIgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIExPQ0FMRV9EQVRBX0ZJTEVOQU1FPSIke3VjbGliY19sb2NhbF90YXJiYWxsfS50Z3oiIFwKKyAgICAgICAgICAgICAgICAgb2xkY29uZmlnCisKKyAgICAjIFdlIGRvIF9ub3RfIHdhbnQgdG8gc3RyaXAgYW55dGhpbmcgZm9yIG5vdywgaW4gY2FzZSB3ZSBzcGVjaWZpY2FsbHkKKyAgICAjIGFza2VkIGZvciBhIGRlYnVnIHRvb2xjaGFpbiwgdGh1cyB0aGUgU1RSSVBUT09MPSBhc3NpZ25tZW50CisgICAgIyAvT2xkLyB2ZXJzaW9ucyBjYW4gbm90IGJ1aWxkIGluIC8vCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkJ1aWxkaW5nIEMgbGlicmFyeSIKKyAgICBDVF9Eb0V4ZWNMb2cgQUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWtlIC1qMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIENST1NTPSR7Q1RfVEFSR0VUfS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIFBSRUZJWD0iJHtDVF9TWVNST09UX0RJUn0vIiAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIFNUUklQVE9PTD10cnVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICR7Q1RfTElCQ19VQ0xJQkNfVkVSQk9TSVRZfSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIExPQ0FMRV9EQVRBX0ZJTEVOQU1FPSIke3VjbGliY19sb2NhbF90YXJiYWxsfS50Z3oiIFwKKyAgICAgICAgIHByZWdlbgorICAgIENUX0RvRXhlY0xvZyBBTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1ha2UgJHtDVF9MSUJDX1VDTElCQ19QQVJBTExFTDorJHtKT0JTRkxBR1N9fSAgICAgICAgICAgXAorICAgICAgICAgQ1JPU1M9JHtDVF9UQVJHRVR9LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgUFJFRklYPSIke0NUX1NZU1JPT1RfRElSfS8iICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgU1RSSVBUT09MPXRydWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgJHtDVF9MSUJDX1VDTElCQ19WRVJCT1NJVFl9ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgTE9DQUxFX0RBVEFfRklMRU5BTUU9IiR7dWNsaWJjX2xvY2FsX3RhcmJhbGx9LnRneiIgXAorICAgICAgICAgYWxsCisKKyAgICAjIFlFTS1GSVhNRToKKyAgICAjIC0gd2Ugd2FudCB0byBpbnN0YWxsICdydW50aW1lJyBmaWxlcywgZWcuIGxpYioue2Esc28qfSwgY3J0aS5vIGFuZAorICAgICMgICBzdWNoIGZpbGVzLCBleGNlcHQgdGhlIGhlYWRlcnMgYXMgdGhleSBhbHJlYWR5IGFyZSBpbnN0YWxsZWQKKyAgICAjIC0gIm1ha2UgaW5zdGFsbF9kZXYiIGluc3RhbGxzIHRoZSBoZWFkZXJzLCB0aGUgY3J0aS5vLi4uIGFuZCB0aGUKKyAgICAjICAgc3RhdGljIGxpYnMsIGJ1dCBub3QgdGhlIGR5bmFtaWMgbGlicworICAgICMgLSAibWFrZSBpbnN0YWxsX3J1bnRpbWUiIGluc3RhbGxzIHRoZSBkeW5hbWljIGxpYnMgb25seQorICAgICMgLSAibWFrZSBpbnN0YWxsIiBjYWxscyBpbnN0YWxsX3J1bnRpbWUgYW5kIGluc3RhbGxfZGV2CisgICAgIyAtIHNvIHdlJ3JlIGxlZnQgd2l0aCByZS1pbnN0YWxsaW5nIHRoZSBoZWFkZXJzLi4uIFNpZ2guLi4KKyAgICAjCisgICAgIyBXZSBkbyBfbm90XyB3YW50IHRvIHN0cmlwIGFueXRoaW5nIGZvciBub3csIGluIGNhc2Ugd2Ugc3BlY2lmaWNhbGx5CisgICAgIyBhc2tlZCBmb3IgYSBkZWJ1ZyB0b29sY2hhaW4sIGhlbmNlIHRoZSBTVFJJUFRPT0w9IGFzc2lnbm1lbnQKKyAgICAjCisgICAgIyBOb3RlOiBKT0JTRkxBR1MgaXMgbm90IHVzZWZ1bGwgZm9yIGluc3RhbGxhdGlvbi4KKyAgICAjCisgICAgQ1RfRG9Mb2cgRVhUUkEgIkluc3RhbGxpbmcgQyBsaWJyYXJ5IgorICAgIENUX0RvRXhlY0xvZyBBTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1ha2UgQ1JPU1M9JHtDVF9UQVJHRVR9LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgUFJFRklYPSIke0NUX1NZU1JPT1RfRElSfS8iICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgU1RSSVBUT09MPXRydWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgJHtDVF9MSUJDX1VDTElCQ19WRVJCT1NJVFl9ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgTE9DQUxFX0RBVEFfRklMRU5BTUU9IiR7dWNsaWJjX2xvY2FsX3RhcmJhbGx9LnRneiIgXAorICAgICAgICAgaW5zdGFsbAorCisgICAgQ1RfRW5kU3RlcAorfQorCisjIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBpbnN0YWxsIHRob3NlIGNvbXBvbmVudHMgbmVlZGluZyB0aGUgZmluYWwgQyBjb21waWxlcgorZG9fbGliY19maW5pc2goKSB7CisgICAgOgorfQorCisjIEluaXRpYWxpc2VzIHRoZSAuY29uZmlnIGZpbGUgdG8gc2Vuc2libGUgdmFsdWVzCisjICQxOiBvcmlnaW5hbCBmaWxlCisjICQyOiBtdW5nZWQgZmlsZQorbXVuZ2V1Q2xpYmNDb25maWcoKSB7CisgICAgc3JjX2NvbmZpZ19maWxlPSIkMSIKKyAgICBkc3RfY29uZmlnX2ZpbGU9IiQyIgorICAgIG11bmdlX2ZpbGU9IiR7Q1RfQlVJTERfRElSfS9tdW5nZS11Q2xpYmMtY29uZmlnLnNlZCIKKworICAgICMgU3RhcnQgd2l0aCBhIGZyZXNoIGZpbGUKKyAgICBybSAtZiAiJHttdW5nZV9maWxlfSIKKyAgICB0b3VjaCAiJHttdW5nZV9maWxlfSIKKworICAgICMgRG8gaXQgYWxsIGluIGEgc3ViLXNoZWxsLCBpdCdzIGVhc2llciB0byByZWRpcmVjdCBvdXRwdXQKKyAgICAoCisKKyAgICAjIEhhY2sgb3VyIHRhcmdldCBpbiB0aGUgY29uZmlnIGZpbGUuCisgICAgY2FzZSAiJHtDVF9BUkNIfToke0NUX0FSQ0hfQklUTkVTU30iIGluCisgICAgICAgIHg4NjozMikgICAgICBhcmNoPWkzODY7OworICAgICAgICB4ODY6NjQpICAgICAgYXJjaD14ODZfNjQ7OworICAgICAgICBzaDozMikgICAgICAgYXJjaD0ic2giOzsKKyAgICAgICAgc2g6NjQpICAgICAgIGFyY2g9InNoNjQiOzsKKyAgICAgICAgYmxhY2tmaW46MzIpIGFyY2g9ImJmaW4iOzsKKyAgICAgICAgKikgICAgICAgICAgIGFyY2g9IiR7Q1RfQVJDSH0iOzsKKyAgICBlc2FjCisgICAgIyBBbHNvIHJlbW92ZSBzdHJpcHBpbmc6IGl0cyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlCisgICAgIyBmaXJtd2FyZSBidWlsZGVyIHRvIHN0cmlwIG9yIG5vdC4KKyAgICBjYXQgPDwtRU5EU0VECisJCXMvXihUQVJHRVRfLiopPXkkLyMgXFwxIGlzIG5vdCBzZXQvCisJCXMvXiMgVEFSR0VUXyR7YXJjaH0gaXMgbm90IHNldC9UQVJHRVRfJHthcmNofT15LworCQlzL15UQVJHRVRfQVJDSD0iLioiL1RBUkdFVF9BUkNIPSIke2FyY2h9Ii8KKwkJcy8uKihET1NUUklQKS4qLyMgXFwxIGlzIG5vdCBzZXQvCisJCUVORFNFRAorCisgICAgIyBBaC4gV2UgbWF5IG9uZSBkYXkgbmVlZCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaGFuZGxlciBoZXJlLi4uCisgICAgY2FzZSAiJHtDVF9BUkNIfSIgaW4KKyAgICAgICAgYXJtKQorICAgICAgICAgICAgIyBIYWNrIHRoZSBBUk0ge0UsT31BQkkgaW50byB0aGUgY29uZmlnIGZpbGUKKyAgICAgICAgICAgIGlmIFsgIiR7Q1RfQVJDSF9BUk1fRUFCSX0iID0gInkiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBjYXQgPDwtRU5EU0VECisJCQkJCXMvLiooQ09ORklHX0FSTV9PQUJJKS4qLyMgXFwxIGlzIG5vdCBzZXQvCisJCQkJCXMvLiooQ09ORklHX0FSTV9FQUJJKS4qL1xcMT15LworCQkJCQlFTkRTRUQKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjYXQgPDwtRU5EU0VECisJCQkJCXMvLiooQ09ORklHX0FSTV9PQUJJKS4qL1xcMT15LworCQkJCQlzLy4qKENPTkZJR19BUk1fRUFCSSkuKi8jIFxcMSBpcyBub3Qgc2V0LworCQkJCQlFTkRTRUQKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworICAgICAgICBtaXBzKQorICAgICAgICAgICAgY2FzZSAiJHtDVF9BUkNIX21pcHNfQUJJfSIgaW4KKyAgICAgICAgICAgICAgICAzMikKKyAgICAgICAgICAgICAgICAgICAgY2F0IDw8LUVORFNFRAorCQkJCQkJcy8uKihDT05GSUdfTUlQU19PMzJfQUJJKS4qL1xcMT15LworCQkJCQkJcy8uKihDT05GSUdfTUlQU19OMzJfQUJJKS4qLyMgXFwxIGlzIG5vdCBzZXQvCisJCQkJCQlzLy4qKENPTkZJR19NSVBTX042NF9BQkkpLiovIyBcXDEgaXMgbm90IHNldC8KKwkJCQkJCUVORFNFRAorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICMgRm9yIG4zMiBhbmQgbjY0LCBhbHNvIGZvcmNlIHRoZSBJU0EKKyAgICAgICAgICAgICAgICAjIE5vdCBzbyBzdXJlIHRoaXMgaXMgcGVydGluZW50LCBzbyBpdCdzCisgICAgICAgICAgICAgICAgIyBjb21tZW50ZWQgb3V0IGZvciBub3cuIEl0IHdvdWxkIHRha2UgYQorICAgICAgICAgICAgICAgICMgKE1JUFMrdUNsaWJjKSBleHBlcnQgdG8gZWl0aGVyIHJlbW92ZQorICAgICAgICAgICAgICAgICMgb3IgcmUtZW5hYmxlIHRoZSBvdmVycmlkZXMuCisgICAgICAgICAgICAgICAgbjMyKQorICAgICAgICAgICAgICAgICAgICBjYXQgPDwtRU5EU0VECisJCQkJCQlzLy4qKENPTkZJR19NSVBTX08zMl9BQkkpLiovIyBcXDEgaXMgbm90IHNldC8KKwkJCQkJCXMvLiooQ09ORklHX01JUFNfTjMyX0FCSSkuKi9cXDE9eS8KKwkJCQkJCXMvLiooQ09ORklHX01JUFNfTjY0X0FCSSkuKi8jIFxcMSBpcyBub3Qgc2V0LworCQkJCQkJcy8uKihDT05GSUdfTUlQU19JU0FfLiopLiovIyBcXDEgaXMgbm90IHNldC8KKwkJCQkJCXMvLiooQ09ORklHX01JUFNfSVNBXzMpLiovXFwxPXkvCisJCQkJCQlFTkRTRUQKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICA2NCkKKyAgICAgICAgICAgICAgICAgICAgY2F0IDw8LUVORFNFRAorCQkJCQkJcy8uKihDT05GSUdfTUlQU19PMzJfQUJJKS4qLyMgXFwxIGlzIG5vdCBzZXQvCisJCQkJCQlzLy4qKENPTkZJR19NSVBTX04zMl9BQkkpLiovIyBcXDEgaXMgbm90IHNldC8KKwkJCQkJCXMvLiooQ09ORklHX01JUFNfTjY0X0FCSSkuKi9cXDE9eS8KKwkJCQkJCXMvLiooQ09ORklHX01JUFNfSVNBXy4qKS4qLyMgXFwxIGlzIG5vdCBzZXQvCisJCQkJCQlzLy4qKENPTkZJR19NSVBTX0lTQV9NSVBTNjQpLiovXFwxPXkvCisJCQkJCQlFTkRTRUQKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBBY2NvbW9kYXRlIGZvciBvbGQgYW5kIG5ldyB1Q2xpYmMgdmVyc2lvbnMsIHdoZXJlIHRoZQorICAgICMgd2F5IHRvIHNlbGVjdCBiZXR3ZWVuIGJpZy9saXR0bGUgZW5kaWFuIGhhcyBjaGFuZ2VkCisgICAgY2FzZSAiJHtDVF9BUkNIX0JFfSwke0NUX0FSQ0hfTEV9IiBpbgorICAgICAgICB5LCkgY2F0IDw8LUVORFNFRAorCQkJCXMvLiooQVJDSF9MSVRUTEVfRU5ESUFOKS4qLyMgXFwxIGlzIG5vdCBzZXQvCisJCQkJcy8uKihBUkNIX0JJR19FTkRJQU4pLiovXFwxPXkvCisJCQkJcy8uKihBUkNIX1dBTlRTX0xJVFRMRV9FTkRJQU4pLiovIyBcXDEgaXMgbm90IHNldC8KKwkJCQlzLy4qKEFSQ0hfV0FOVFNfQklHX0VORElBTikuKi9cXDE9eS8KKwkJCQlFTkRTRUQKKyAgICAgICAgOzsKKyAgICAgICAgLHkpIGNhdCA8PC1FTkRTRUQKKwkJCQlzLy4qKEFSQ0hfTElUVExFX0VORElBTikuKi9cXDE9eS8KKwkJCQlzLy4qKEFSQ0hfQklHX0VORElBTikuKi8jIFxcMSBpcyBub3Qgc2V0LworCQkJCXMvLiooQVJDSF9XQU5UU19MSVRUTEVfRU5ESUFOKS4qL1xcMT15LworCQkJCXMvLiooQVJDSF9XQU5UU19CSUdfRU5ESUFOKS4qLyMgXFwxIGlzIG5vdCBzZXQvCisJCQkJRU5EU0VECisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBBY2NvbW9kYXRlIGZvciBvbGQgYW5kIG5ldyB1Q2xpYmMgdmVyc2lvbnMsIHdoZXJlIHRoZQorICAgICMgTU1VIHNldHRpbmdzIGhhcyBkaWZmZXJlbnQgY29uZmlnIGtub2JzCisgICAgaWYgWyAiJHtDVF9BUkNIX1VTRV9NTVV9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIGNhdCA8PC1FTkRTRUQKKwkJCXMvLiooQVJDSF9IQVNfTU1VKS4qL1xcMT15XG5BUkNIX1VTRV9NTVU9eS8KKwkJCUVORFNFRAorICAgIGVsc2UKKyAgICAgICAgY2F0IDw8LUVORFNFRAorCQkJcy8uKihBUkNIX0hBU19NTVUpLiovIyBcXDEgaXMgbm90IHNldC8KKwkJCS8uKihBUkNIX1VTRV9NTVUpLiovZAorCQkJRU5EU0VECisgICAgZmkKKworICAgICMgQWNjb21vZGF0ZSBmb3Igb2xkIGFuZCBuZXcgdUNsaWJjIHZlcnNpb24sIHdoZXJlIHRoZQorICAgICMgd2F5IHRvIHNlbGVjdCBiZXR3ZWVuIGhhcmQvc29mdCBmbG9hdCBoYXMgY2hhbmdlZAorICAgIGNhc2UgIiR7Q1RfQVJDSF9GTE9BVF9IV30sJHtDVF9BUkNIX0ZMT0FUX1NXfSIgaW4KKyAgICAgICAgeSwpIGNhdCA8PC1FTkRTRUQKKwkJCQlzL15bXl9dKihIQVNfRlBVKS4qL1xcMT15LworCQkJCXMvLiooVUNMSUJDX0hBU19GUFUpLiovXFwxPXkvCisJCQkJRU5EU0VECisgICAgICAgICAgICA7OworICAgICAgICAseSkgY2F0IDw8LUVORFNFRAorCQkJCXMvXlteX10qKEhBU19GUFUpLiovXFwjIFxcMSBpcyBub3Qgc2V0LworCQkJCXMvLiooVUNMSUJDX0hBU19GUFUpLiovIyBcXDEgaXMgbm90IHNldC8KKwkJCQlFTkRTRUQKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBXZSBhbHdheXMgd2FudCBjdG9yL2R0b3IKKyAgICBjYXQgPDwtRU5EU0VECisJCXMvXiMgKFVDTElCQ19DVE9SX0RUT1IpIGlzIG5vdCBzZXQvXFwxPXkvCisJCUVORFNFRAorCisgICAgIyBDaGFuZ2UgcGF0aHMgdG8gd29yayB3aXRoIGNyb3NzdG9vbC1ORworICAgICMgRnJvbSBodHRwOi8vd3d3LnVjbGliYy5vcmcvY2dpLWJpbi92aWV3Y3ZzLmNnaT9yZXY9MTY4NDYmdmlldz1yZXYKKyAgICAjICAiIHdlIGp1c3Qgd2FudCB0aGUga2VybmVsIGhlYWRlcnMsIG5vdCB0aGUgd2hvbGUga2VybmVsIHNvdXJjZSAuLi4KKyAgICAjICAiIHNvIHBlb3BsZSBtYXkgbmVlZCB0byB1cGRhdGUgdGhlaXIgcGF0aHMgc2xpZ2h0bHkKKyAgICBxdW90ZWRfa2VybmVsX3NvdXJjZT0kKGVjaG8gIiR7Q1RfSEVBREVSU19ESVJ9IiB8IHNlZCAtciAtZSAncywvaW5jbHVkZS8/JCwsOyBzLC8sXFwvLGc7JykKKyAgICBxdW90ZWRfaGVhZGVyc19kaXI9JChlY2hvICIke0NUX0hFQURFUlNfRElSfSIgfCBzZWQgLXIgLWUgJ3MsLyxcXC8sZzsnKQorICAgICMgQ1JPU1NfQ09NUElMRVJfUFJFRklYIGlzIGxlZnQgYXMgaXMsIGFzIHRoZSBDUk9TUyBwYXJhbWV0ZXIgaXMgZm9yY2VkIG9uIHRoZSBjb21tYW5kIGxpbmUKKyAgICAjIERFVkVMX1BSRUZJWCBpcyBsZWZ0IGFzICcvdXNyLycgYmVjYXVzZSBpdCBpcyBwb3N0LXBlbmRlZCB0byAkUFJFRklYLCB3aWNoIGlzIHRoZSBjb3JyZWN0IHZhbHVlIG9mICR7UFJFRklYfS8ke1RBUkdFVH0KKyAgICAjIFNvbWUgKG9sZCkgdmVyc2lvbnMgb2YgdUNsaWJjIHVzZSBLRVJORUxfU09VUkNFICh3aGljaCBpcyBfd3JvbmdfKSwgYW5kCisgICAgIyBuZXdlciB2ZXJzaW9ucyB1c2UgS0VSTkVMX0hFQURFUlMgKHdoaWNoIGlzIHJpZ2h0KS4KKyAgICBjYXQgPDwtRU5EU0VECisJCXMvXkRFVkVMX1BSRUZJWD0iLioiL0RFVkVMX1BSRUZJWD0iXFwvdXNyXFwvIi8KKwkJcy9eUlVOVElNRV9QUkVGSVg9Ii4qIi9SVU5USU1FX1BSRUZJWD0iXFwvIi8KKwkJcy9eU0hBUkVEX0xJQl9MT0FERVJfUFJFRklYPS4qL1NIQVJFRF9MSUJfTE9BREVSX1BSRUZJWD0iXFwvbGliXFwvIi8KKwkJcy9eS0VSTkVMX1NPVVJDRT0iLioiL0tFUk5FTF9TT1VSQ0U9IiR7cXVvdGVkX2tlcm5lbF9zb3VyY2V9Ii8KKwkJcy9eS0VSTkVMX0hFQURFUlM9Ii4qIi9LRVJORUxfSEVBREVSUz0iJHtxdW90ZWRfaGVhZGVyc19kaXJ9Ii8KKwkJcy9eVUNMSUJDX0RPV05MT0FEX1BSRUdFTkVSQVRFRF9MT0NBTEU9eS9cXCMgVUNMSUJDX0RPV05MT0FEX1BSRUdFTkVSQVRFRF9MT0NBTEUgaXMgbm90IHNldC8KKwkJRU5EU0VECisKKyAgICBpZiBbICIke0NUX1VTRV9QSVBFU30iID0gInkiIF07IHRoZW4KKyAgICAgICAgaWYgZ3JlcCBVQ0xJQkNfRVhUUkFfQ0ZMQUdTIGV4dHJhL0NvbmZpZ3MvQ29uZmlnLmluID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICAgICAgIyBHb29kLCB0aGVyZSBpcyBzcGVjaWFsIHByb3Zpc2lvbiBmb3Igc3VjaCB0aGluZ3MgYXMgLXBpcGUhCisgICAgICAgICAgICBjYXQgPDwtRU5EU0VECisJCQkJcy9eKFVDTElCQ19FWFRSQV9DRkxBR1M9Ii4qKSIkL1xcMSAtcGlwZSIvCisJCQkJRU5EU0VECisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgSGFjayBvdXIgLXBpcGUgaW50byBXQVJOSU5HUywgd2hpY2ggd2lsbCBiZSBpbnRlcm5hbGx5IGluY29ycG9yYXRlZCB0bworICAgICAgICAgICAgIyBDRkxBR1MuIFRoaXMgYSBkaXJ0eSBoYWNrLCBidXQgeWV0IG5lZWRlZAorICAgICAgICAgICAgY2F0IDw8LUVORFNFRAorCQkJCXMvXihXQVJOSU5HUz0iLiopIiQvXFwxIC1waXBlIi8KKwkJCQlFTkRTRUQKKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgIyBMb2NhbGVzIHN1cHBvcnQKKyAgICAjIE5vdGUgdGhhdCB0aGUgdHdvIFBSRUdFTl9MT0NBTEUgYW5kIHRoZSBYTE9DQUxFIGxpbmVzIG1heSBiZSBtaXNzaW5nCisgICAgIyBlbnRpcmVseSBpZiBMT0NBTEUgaXMgbm90IHNldC4gIElmIExPQ0FMRSB3YXMgYWxyZWFkeSBzZXQsIHdlJ2xsCisgICAgIyBhc3N1bWUgdGhlIHVzZXIgaGFzIGFscmVhZHkgbWFkZSBhbGwgdGhlIGFwcHJvcHJpYXRlIGdlbmVyYXRpb24KKyAgICAjIGFycmFuZ2VtZW50cy4gIE5vdGUgdGhhdCBoYXZpbmcgdGhlIHVDbGliYyBNYWtlZmlsZSBkb3dubG9hZCB0aGUKKyAgICAjIHByZWdlbmVyYXRlZCBsb2NhbGVzIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggY3Jvc3N0b29sOyBiZXNpZGVzLAorICAgICMgY3Jvc3N0b29sIGRvd25sb2FkcyB0aGVtIGFzIHBhcnQgb2YgZ2V0YW5kcGF0Y2guc2guCisgICAgY2FzZSAiJHtDVF9MSUJDX1VDTElCQ19MT0NBTEVTfToke0NUX0xJQkNfVUNMSUJDX0xPQ0FMRVNfUFJFR0VOX0RBVEF9IiBpbgorICAgICAgICA6KikKKyAgICAgICAgICAgIDs7CisgICAgICAgIHk6KQorICAgICAgICAgICAgY2F0IDw8LUVORFNFRAorCQkJCXMvXiMgVUNMSUJDX0hBU19MT0NBTEUgaXMgbm90IHNldC9VQ0xJQkNfSEFTX0xPQ0FMRT15XFwKKwkJCQkjIFVDTElCQ19QUkVHRU5FUkFURURfTE9DQUxFX0RBVEEgaXMgbm90IHNldFxcCisJCQkJIyBVQ0xJQkNfRE9XTkxPQURfUFJFR0VORVJBVEVEX0xPQ0FMRV9EQVRBIGlzIG5vdCBzZXRcXAorCQkJCSMgVUNMSUJDX0hBU19YTE9DQUxFIGlzIG5vdCBzZXQvCisJCQkJRU5EU0VECisgICAgICAgICAgICA7OworICAgICAgICB5OnkpCisgICAgICAgICAgICBjYXQgPDwtRU5EU0VECisJCQkJcy9eIyBVQ0xJQkNfSEFTX0xPQ0FMRSBpcyBub3Qgc2V0L1VDTElCQ19IQVNfTE9DQUxFPXlcXAorCQkJCVVDTElCQ19QUkVHRU5FUkFURURfTE9DQUxFX0RBVEE9eVxcCisJCQkJIyBVQ0xJQkNfRE9XTkxPQURfUFJFR0VORVJBVEVEX0xPQ0FMRV9EQVRBIGlzIG5vdCBzZXRcXAorCQkJCSMgVUNMSUJDX0hBU19YTE9DQUxFIGlzIG5vdCBzZXQvCisJCQkJRU5EU0VECisgICAgICAgICAgICA7OworICAgIGVzYWMKKworICAgICMgV0NIQVIgc3VwcG9ydAorICAgIGlmIFsgIiR7Q1RfTElCQ19VQ0xJQkNfV0NIQVJ9IiA9ICJ5IiBdIDsgdGhlbgorICAgICAgICBjYXQgPDwtRU5EU0VECisJCQlzL14uKlVDTElCQ19IQVNfV0NIQVIuKi9VQ0xJQkNfSEFTX1dDSEFSPXkvCisJCQlFTkRTRUQKKyAgICBlbHNlCisgICAgICAgIGNhdCA8PC1FTkRTRUQKKwkJCXMvXi4qVUNMSUJDX0hBU19XQ0hBUi4qL1VDTElCQ19IQVNfV0NIQVI9bi8KKwkJCUVORFNFRAorICAgIGZpCisKKyAgICAjIEZvcmNlIG9uIG9wdGlvbnMgbmVlZGVkIGZvciBDKysgaWYgd2UnbGwgYmUgbWFraW5nIGEgQysrIGNvbXBpbGVyLgorICAgICMgSSdtIG5vdCBzdXJlIGxvY2FsZXMgYXJlIGEgcmVxdWlyZW1lbnQgZm9yIGRvaW5nIEMrKy4uLiBBcmUgdGhleT8KKyAgICBpZiBbICIke0NUX0NDX0xBTkdfQ1hYfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBjYXQgPDwtRU5EU0VECisJCQlzL14jIERPX0M5OV9NQVRIIGlzIG5vdCBzZXQvRE9fQzk5X01BVEg9eS8KKwkJCXMvXiMgVUNMSUJDX0hBU19HTlVfR0VUT1BUIGlzIG5vdCBzZXQvVUNMSUJDX0hBU19HTlVfR0VUT1BUPXkvCisJCQlFTkRTRUQKKyAgICBmaQorCisgICAgIyBQdXNoIHRoZSB0aHJlYWRpbmcgbW9kZWwKKyAgICAjIE5vdGU6IHdlIHRha2UgaW50byBhY2NvdW50IGFsbCBvZiB0aGUgLjI4LCAuMjksIC4zMCBhbmQgLjMxCisgICAgIyAgICAgICB2ZXJzaW9ucywgaGVyZS4gRXZlbiBzbmFwc2hvdHMgd2l0aCBOUFRMLgorICAgIGNhc2UgIiR7Q1RfVEhSRUFEU306JHtDVF9MSUJDX1VDTElCQ19MTlhUSFJEfSIgaW4KKyAgICAgICAgbm9uZTopCisgICAgICAgICAgICBjYXQgPDwtRU5EU0VECisJCQkJcy9eVUNMSUJDX0hBU19USFJFQURTPXkvIyBVQ0xJQkNfSEFTX1RIUkVBRFMgaXMgbm90IHNldC8KKwkJCQlzL15MSU5VWFRIUkVBRFNfT0xEPXkvIyBMSU5VWFRIUkVBRFNfT0xEIGlzIG5vdCBzZXQvCisJCQkJcy9eTElOVVhUSFJFQURTX05FVz15LyMgTElOVVhUSFJFQURTX05FVyBpcyBub3Qgc2V0LworCQkJCXMvXlVDTElCQ19IQVNfVEhSRUFEU19OQVRJVkU9eS8jIFVDTElCQ19IQVNfVEhSRUFEU19OQVRJVkUgaXMgbm90IHNldC8KKwkJCQlFTkRTRUQKKyAgICAgICAgICAgIDs7CisgICAgICAgIGxpbnV4dGhyZWFkczpvbGQpCisgICAgICAgICAgICBjYXQgPDwtRU5EU0VECisJCQkJcy9eIyBVQ0xJQkNfSEFTX1RIUkVBRFMgaXMgbm90IHNldC9VQ0xJQkNfSEFTX1RIUkVBRFM9eS8KKwkJCQlzL14jIExJTlVYVEhSRUFEU19PTEQgaXMgbm90IHNldC9MSU5VWFRIUkVBRFNfT0xEPXkvCisJCQkJcy9eTElOVVhUSFJFQURTX05FVz15LyMgTElOVVhUSFJFQURTX05FVyBpcyBub3Qgc2V0LworCQkJCXMvXlVDTElCQ19IQVNfVEhSRUFEU19OQVRJVkU9eS8jIFVDTElCQ19IQVNfVEhSRUFEU19OQVRJVkUgaXMgbm90IHNldC8KKwkJCQlFTkRTRUQKKyAgICAgICAgICAgIDs7CisgICAgICAgIGxpbnV4dGhyZWFkczpuZXcpCisgICAgICAgICAgICBjYXQgPDwtRU5EU0VECisJCQkJcy9eIyBVQ0xJQkNfSEFTX1RIUkVBRFMgaXMgbm90IHNldC9VQ0xJQkNfSEFTX1RIUkVBRFM9eS8KKwkJCQlzL15MSU5VWFRIUkVBRFNfT0xEPXkvIyBMSU5VWFRIUkVBRFNfT0xEIGlzIG5vdCBzZXQvCisJCQkJcy9eIyBMSU5VWFRIUkVBRFNfTkVXIGlzIG5vdCBzZXQvTElOVVhUSFJFQURTX05FVz15LworCQkJCXMvXlVDTElCQ19IQVNfVEhSRUFEU19OQVRJVkU9eS8jIFVDTElCQ19IQVNfVEhSRUFEU19OQVRJVkUgaXMgbm90IHNldC8KKwkJCQlFTkRTRUQKKyAgICAgICAgICAgIDs7CisgICAgICAgIG5wdGw6KQorICAgICAgICAgICAgY2F0IDw8LUVORFNFRAorCQkJCXMvXkhBU19OT19USFJFQURTPXkvIyBIQVNfTk9fVEhSRUFEUyBpcyBub3Qgc2V0LworCQkJCXMvXlVDTElCQ19IQVNfVEhSRUFEUz15LyMgVUNMSUJDX0hBU19USFJFQURTIGlzIG5vdCBzZXQvCisJCQkJcy9eTElOVVhUSFJFQURTX09MRD15LyMgTElOVVhUSFJFQURTX09MRCBpcyBub3Qgc2V0LworCQkJCXMvXkxJTlVYVEhSRUFEU19ORVc9eS8jIExJTlVYVEhSRUFEU19ORVcgaXMgbm90IHNldC8KKwkJCQlzL14jIFVDTElCQ19IQVNfVEhSRUFEU19OQVRJVkUgaXMgbm90IHNldC9VQ0xJQkNfSEFTX1RIUkVBRFNfTkFUSVZFPXkvCisJCQkJRU5EU0VECisgICAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgQ1RfQWJvcnQgIkluY29ycmVjdCB0aHJlYWQgc2V0dGluZ3M6IENUX1RIUkVBRFM9JyR7Q1RfVEhSRUFEfScgQ1RfTElCQ19VQ0xJQkNfTE5YVEhSRD0nJHtDVF9MSUJDX1VDTElCQ19MTlhUSFJEfSciCisgICAgICAgICAgICA7OworICAgIGVzYWMKKworICAgICMgQWx3YXlzIGJ1aWxkIHRoZSBsaWJwdGhyZWFkX2RiCisgICAgY2F0IDw8LUVORFNFRAorCQlzL14jIFBUSFJFQURTX0RFQlVHX1NVUFBPUlQgaXMgbm90IHNldC4qL1BUSFJFQURTX0RFQlVHX1NVUFBPUlQ9eS8KKwkJRU5EU0VECisKKyAgICAjIEZvcmNlIG9uIGRlYnVnIG9wdGlvbnMgaWYgYXNrZWQgZm9yCisgICAgY2FzZSAiJHtDVF9MSUJDX1VDTElCQ19ERUJVR19MRVZFTH0iIGluCisgICAgICAwKQorICAgICAgICBjYXQgPDwtRU5EU0VECisJCQlzL15ET0RFQlVHPXkvIyBET0RFQlVHIGlzIG5vdCBzZXQvCisJCQlzL15ET0RFQlVHX1BUPXkvIyBET0RFQlVHX1BUIGlzIG5vdCBzZXQvCisJCQlzL15ET0FTU0VSVFM9eS8jIERPQVNTRVJUUyBpcyBub3Qgc2V0LworCQkJcy9eU1VQUE9SVF9MRF9ERUJVRz15LyMgU1VQUE9SVF9MRF9ERUJVRyBpcyBub3Qgc2V0LworCQkJcy9eU1VQUE9SVF9MRF9ERUJVR19FQVJMWT15LyMgU1VQUE9SVF9MRF9ERUJVR19FQVJMWSBpcyBub3Qgc2V0LworCQkJcy9eVUNMSUJDX01BTExPQ19ERUJVR0dJTkc9eS8jIFVDTElCQ19NQUxMT0NfREVCVUdHSU5HIGlzIG5vdCBzZXQvCisJCQlFTkRTRUQKKyAgICAgICAgOzsKKyAgICAgIDEpCisgICAgICAgIGNhdCA8PC1FTkRTRUQKKwkJCXMvXiMgRE9ERUJVRyBpcyBub3Qgc2V0LiovRE9ERUJVRz15LworCQkJcy9eRE9ERUJVR19QVD15LyMgRE9ERUJVR19QVCBpcyBub3Qgc2V0LworCQkJcy9eRE9BU1NFUlRTPXkvIyBET0FTU0VSVFMgaXMgbm90IHNldC8KKwkJCXMvXlNVUFBPUlRfTERfREVCVUc9eS8jIFNVUFBPUlRfTERfREVCVUcgaXMgbm90IHNldC8KKwkJCXMvXlNVUFBPUlRfTERfREVCVUdfRUFSTFk9eS8jIFNVUFBPUlRfTERfREVCVUdfRUFSTFkgaXMgbm90IHNldC8KKwkJCXMvXlVDTElCQ19NQUxMT0NfREVCVUdHSU5HPXkvIyBVQ0xJQkNfTUFMTE9DX0RFQlVHR0lORyBpcyBub3Qgc2V0LworCQkJRU5EU0VECisgICAgICAgIDs7CisgICAgICAyKQorICAgICAgICBjYXQgPDwtRU5EU0VECisJCQlzL14jIERPREVCVUcgaXMgbm90IHNldC4qL0RPREVCVUc9eS8KKwkJCXMvXiMgRE9ERUJVR19QVCBpcyBub3Qgc2V0LiovRE9ERUJVR19QVD15LworCQkJcy9eIyBET0FTU0VSVFMgaXMgbm90IHNldC4qL0RPQVNTRVJUUz15LworCQkJcy9eIyBTVVBQT1JUX0xEX0RFQlVHIGlzIG5vdCBzZXQuKi9TVVBQT1JUX0xEX0RFQlVHPXkvCisJCQlzL14jIFNVUFBPUlRfTERfREVCVUdfRUFSTFkgaXMgbm90IHNldC4qL1NVUFBPUlRfTERfREVCVUdfRUFSTFk9eS8KKwkJCXMvXiMgVUNMSUJDX01BTExPQ19ERUJVR0dJTkcgaXMgbm90IHNldC9VQ0xJQkNfTUFMTE9DX0RFQlVHR0lORz15LworCQkJRU5EU0VECisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBBbmQgbm93LCB0aGlzIGlzIHRoZSBlbmQKKyAgICApID4+IiR7bXVuZ2VfZmlsZX0iCisKKyAgICBzZWQgLXIgLWYgIiR7bXVuZ2VfZmlsZX0iICIke3NyY19jb25maWdfZmlsZX0iID4iJHtkc3RfY29uZmlnX2ZpbGV9IgorfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL3Rlc3Rfc3VpdGUuc2ggYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvYnVpbGQvdGVzdF9zdWl0ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmFiZjQyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL3Rlc3Rfc3VpdGUuc2gKQEAgLTAsMCArMSw0MSBAQAorIyBXcmFwcGVyIHRvIGJ1aWxkIHRoZSB0ZXN0IHN1aXRlIGZhY2lsaXRpZXMKKyMKKyMgQ3VycmVudCBhc3N1bXB0aW9uOiB0ZXN0IHN1aXRlcyBhcmUgaW5kZXBlbmRlbnQgb2YgZWFjaCBvdGhlcgorIyAgICAgICAgICAgICAgICAgICAgIC0gbm8gb3JkZXIgaGFuZGxpbmcgcmVxdWlyZWQuCisKKyMgTGlzdCBhbGwgdGVzdCBzdWl0ZSBmYWNpbGl0aWVzLCBhbmQgcGFyc2UgdGhlaXIgc2NyaXB0cworQ1RfVEVTVF9TVUlURV9GQUNJTElUWV9MSVNUPQorZm9yIGYgaW4gIiR7Q1RfTElCX0RJUn0vc2NyaXB0cy9idWlsZC90ZXN0X3N1aXRlLyIqLnNoOyBkbworICAgIF9mPSIkKGJhc2VuYW1lICIke2Z9IiAuc2gpIgorICAgIF9fZj0iQ1RfVEVTVF9TVUlURV8ke19mfSIKKyAgICBfX2Y9YGVjaG8gJHtfX2Z9IHwgdHIgIls6bG93ZXI6XSIgIls6dXBwZXI6XSJgCisgICAgaWYgWyAiJHshX19mfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBDVF9Eb0xvZyBERUJVRyAiRW5hYmxpbmcgdGVzdCBzdWl0ZSAnJHtfZn0nIgorICAgICAgICAuICIke2Z9IgorICAgICAgICBDVF9URVNUX1NVSVRFX0ZBQ0lMSVRZX0xJU1Q9IiR7Q1RfVEVTVF9TVUlURV9GQUNJTElUWV9MSVNUfSAke19mfSIKKyAgICBlbHNlCisgICAgICAgIENUX0RvTG9nIERFQlVHICJEaXNhYmxpbmcgdGVzdCBzdWl0ZSAnJHtfZn0nIgorICAgIGZpCitkb25lCisKKyMgRG93bmxvYWQgdGhlIHRlc3Qgc3VpdGUgZmFjaWxpdGllcworZG9fdGVzdF9zdWl0ZV9nZXQoKSB7CisgICAgZm9yIGYgaW4gJHtDVF9URVNUX1NVSVRFX0ZBQ0lMSVRZX0xJU1R9OyBkbworICAgICAgICBkb190ZXN0X3N1aXRlXyR7Zn1fZ2V0CisgICAgZG9uZQorfQorCisjIEV4dHJhY3QgYW5kIHBhdGNoIHRoZSB0ZXN0IHN1aXRlIGZhY2lsaXRpZXMKK2RvX3Rlc3Rfc3VpdGVfZXh0cmFjdCgpIHsKKyAgICBmb3IgZiBpbiAke0NUX1RFU1RfU1VJVEVfRkFDSUxJVFlfTElTVH07IGRvCisgICAgICAgIGRvX3Rlc3Rfc3VpdGVfJHtmfV9leHRyYWN0CisgICAgZG9uZQorfQorCisjIEJ1aWxkIHRoZSB0ZXN0IHN1aXRlIGZhY2lsaXRpZXMKK2RvX3Rlc3Rfc3VpdGUoKSB7CisgICAgZm9yIGYgaW4gJHtDVF9URVNUX1NVSVRFX0ZBQ0lMSVRZX0xJU1R9OyBkbworICAgICAgICBkb190ZXN0X3N1aXRlXyR7Zn1fYnVpbGQKKyAgICBkb25lCit9CisKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC90ZXN0X3N1aXRlL2djYy5zaCBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9idWlsZC90ZXN0X3N1aXRlL2djYy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjQ5M2MwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2J1aWxkL3Rlc3Rfc3VpdGUvZ2NjLnNoCkBAIC0wLDAgKzEsMzAgQEAKKyMgVGhpcyBmaWxlIGFkZHMgdGhlIGZ1bmN0aW9ucyB0byBidWlsZCB0aGUgR0NDIHRlc3Qgc3VpdGUKKyMgQ29weXJpZ2h0IDIwMTAgRG9yw6lEZXZlbG9wbWVudAorIyBDcmVhdGVkIGJ5IE1hcnRpbiBMdW5kIDxtZ2xAZG9yZWRldmVsb3BtZW50LmRrPgorIyBMaWNlbnNlZCB1bmRlciB0aGUgR1BMIHYyLiBTZWUgQ09QWUlORyBpbiB0aGUgcm9vdCBvZiB0aGlzIHBhY2thZ2UKKworZG9fdGVzdF9zdWl0ZV9nY2NfZ2V0KCkgeyA6OyB9Citkb190ZXN0X3N1aXRlX2djY19leHRyYWN0KCkgeyA6OyB9Citkb190ZXN0X3N1aXRlX2djY19idWlsZCgpIHsgOjsgfQorCisjIE92ZXJpZGUgZnVuY3Rpb25zIGRlcGVuZGluZyBvbiBjb25maWd1cmF0aW9uCitpZiBbICIke0NUX1RFU1RfU1VJVEVfR0NDfSIgPSAieSIgXTsgdGhlbgorCitkb190ZXN0X3N1aXRlX2djY19idWlsZCgpIHsKKyAKKyAgICBDVF9Eb1N0ZXAgSU5GTyAiSW5zdGFsbGluZyBHQ0MgdGVzdCBzdWl0ZSIKKworICAgIENUX0RvRXhlY0xvZyBBTEwgbWtkaXIgLXAgIiR7Q1RfVEVTVF9TVUlURV9ESVJ9L2djYyIKKyAgICBDVF9Eb0V4ZWNMb2cgQUxMIGNwIC1hICIke0NUX0xJQl9ESVJ9L2NvbnRyaWIvZ2NjLXRlc3Qtc3VpdGUvZGVmYXVsdC5jZmciICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiR7Q1RfTElCX0RJUn0vY29udHJpYi9nY2MtdGVzdC1zdWl0ZS9NYWtlZmlsZSIgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiJHtDVF9MSUJfRElSfS9jb250cmliL2djYy10ZXN0LXN1aXRlL1JFQURNRSIgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIke0NUX1NSQ19ESVJ9L2djYy0ke0NUX0NDX1ZFUlNJT059L2djYy90ZXN0c3VpdGUiICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiR7Q1RfVEVTVF9TVUlURV9ESVJ9L2djYyIKKworICAgIENUX0RvRXhlY0xvZyBBTEwgc2VkIC1pIC1yIC1lICJzL0BAREdfVEFSR0VUQEAvJHtDVF9UQVJHRVR9L2c7IiAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICIke0NUX1RFU1RfU1VJVEVfRElSfS9nY2MvTWFrZWZpbGUiCisKKyAgICBDVF9FbmRTdGVwCit9CisKK2ZpICMgQ1RfVEVTVF9TVUlURV9HQ0MKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9jb25maWcuZ3Vlc3MgYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvY29uZmlnLmd1ZXNzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQwY2YwYWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvY29uZmlnLmd1ZXNzCkBAIC0wLDAgKzEsMTUyNyBAQAorIyEgL2Jpbi9zaAorIyBBdHRlbXB0IHRvIGd1ZXNzIGEgY2Fub25pY2FsIHN5c3RlbSBuYW1lLgorIyAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKyMgICAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLAorIyAgIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK3RpbWVzdGFtcD0nMjAxMS0wMi0wMicKKworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorIyAwMjExMC0xMzAxLCBVU0EuCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworCisjIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXIgQm90aG5lci4gIFBsZWFzZSBzZW5kIHBhdGNoZXMgKGNvbnRleHQKKyMgZGlmZiBmb3JtYXQpIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPiBhbmQgaW5jbHVkZSBhIENoYW5nZUxvZworIyBlbnRyeS4KKyMKKyMgVGhpcyBzY3JpcHQgYXR0ZW1wdHMgdG8gZ3Vlc3MgYSBjYW5vbmljYWwgc3lzdGVtIG5hbWUgc2ltaWxhciB0bworIyBjb25maWcuc3ViLiAgSWYgaXQgc3VjY2VlZHMsIGl0IHByaW50cyB0aGUgc3lzdGVtIG5hbWUgb24gc3Rkb3V0LCBhbmQKKyMgZXhpdHMgd2l0aCAwLiAgT3RoZXJ3aXNlLCBpdCBleGl0cyB3aXRoIDEuCisjCisjIFlvdSBjYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIHNjcmlwdCBmcm9tOgorIyBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLmd1ZXNzO2hiPUhFQUQKKworbWU9YGVjaG8gIiQwIiB8IHNlZCAtZSAncywuKi8sLCdgCisKK3VzYWdlPSJcCitVc2FnZTogJDAgW09QVElPTl0KKworT3V0cHV0IHRoZSBjb25maWd1cmF0aW9uIG5hbWUgb2YgdGhlIHN5c3RlbSBcYCRtZScgaXMgcnVuIG9uLgorCitPcGVyYXRpb24gbW9kZXM6CisgIC1oLCAtLWhlbHAgICAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtdCwgLS10aW1lLXN0YW1wICAgcHJpbnQgZGF0ZSBvZiBsYXN0IG1vZGlmaWNhdGlvbiwgdGhlbiBleGl0CisgIC12LCAtLXZlcnNpb24gICAgICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisKK1JlcG9ydCBidWdzIGFuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4iCisKK3ZlcnNpb249IlwKK0dOVSBjb25maWcuZ3Vlc3MgKCR0aW1lc3RhbXApCisKK09yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXIgQm90aG5lci4KK0NvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTword2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgorCitoZWxwPSIKK1RyeSBcYCRtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKworIyBQYXJzZSBjb21tYW5kIGxpbmUKK3doaWxlIHRlc3QgJCMgLWd0IDAgOyBkbworICBjYXNlICQxIGluCisgICAgLS10aW1lLXN0YW1wIHwgLS10aW1lKiB8IC10ICkKKyAgICAgICBlY2hvICIkdGltZXN0YW1wIiA7IGV4aXQgOzsKKyAgICAtLXZlcnNpb24gfCAtdiApCisgICAgICAgZWNobyAiJHZlcnNpb24iIDsgZXhpdCA7OworICAgIC0taGVscCB8IC0taCogfCAtaCApCisgICAgICAgZWNobyAiJHVzYWdlIjsgZXhpdCA7OworICAgIC0tICkgICAgICMgU3RvcCBvcHRpb24gcHJvY2Vzc2luZworICAgICAgIHNoaWZ0OyBicmVhayA7OworICAgIC0gKQkjIFVzZSBzdGRpbiBhcyBpbnB1dC4KKyAgICAgICBicmVhayA7OworICAgIC0qICkKKyAgICAgICBlY2hvICIkbWU6IGludmFsaWQgb3B0aW9uICQxJGhlbHAiID4mMgorICAgICAgIGV4aXQgMSA7OworICAgICogKQorICAgICAgIGJyZWFrIDs7CisgIGVzYWMKK2RvbmUKKworaWYgdGVzdCAkIyAhPSAwOyB0aGVuCisgIGVjaG8gIiRtZTogdG9vIG1hbnkgYXJndW1lbnRzJGhlbHAiID4mMgorICBleGl0IDEKK2ZpCisKK3RyYXAgJ2V4aXQgMScgMSAyIDE1CisKKyMgQ0NfRk9SX0JVSUxEIC0tIGNvbXBpbGVyIHVzZWQgYnkgdGhpcyBzY3JpcHQuIE5vdGUgdGhhdCB0aGUgdXNlIG9mIGEKKyMgY29tcGlsZXIgdG8gYWlkIGluIHN5c3RlbSBkZXRlY3Rpb24gaXMgZGlzY291cmFnZWQgYXMgaXQgcmVxdWlyZXMKKyMgdGVtcG9yYXJ5IGZpbGVzIHRvIGJlIGNyZWF0ZWQgYW5kLCBhcyB5b3UgY2FuIHNlZSBiZWxvdywgaXQgaXMgYQorIyBoZWFkYWNoZSB0byBkZWFsIHdpdGggaW4gYSBwb3J0YWJsZSBmYXNoaW9uLgorCisjIEhpc3RvcmljYWxseSwgYENDX0ZPUl9CVUlMRCcgdXNlZCB0byBiZSBuYW1lZCBgSE9TVF9DQycuIFdlIHN0aWxsCisjIHVzZSBgSE9TVF9DQycgaWYgZGVmaW5lZCwgYnV0IGl0IGlzIGRlcHJlY2F0ZWQuCisKKyMgUG9ydGFibGUgdG1wIGRpcmVjdG9yeSBjcmVhdGlvbiBpbnNwaXJlZCBieSB0aGUgQXV0b2NvbmYgdGVhbS4KKworc2V0X2NjX2Zvcl9idWlsZD0nCit0cmFwICJleGl0Y29kZT1cJD87IChybSAtZiBcJHRtcGZpbGVzIDI+L2Rldi9udWxsOyBybWRpciBcJHRtcCAyPi9kZXYvbnVsbCkgJiYgZXhpdCBcJGV4aXRjb2RlIiAwIDsKK3RyYXAgInJtIC1mIFwkdG1wZmlsZXMgMj4vZGV2L251bGw7IHJtZGlyIFwkdG1wIDI+L2Rldi9udWxsOyBleGl0IDEiIDEgMiAxMyAxNSA7Cis6ICR7VE1QRElSPS90bXB9IDsKKyB7IHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIiRUTVBESVIvY2dYWFhYWFgiKSAyPi9kZXYvbnVsbGAgJiYgdGVzdCAtbiAiJHRtcCIgJiYgdGVzdCAtZCAiJHRtcCIgOyB9IHx8CisgeyB0ZXN0IC1uICIkUkFORE9NIiAmJiB0bXA9JFRNUERJUi9jZyQkLSRSQU5ET00gJiYgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKSA7IH0gfHwKKyB7IHRtcD0kVE1QRElSL2NnLSQkICYmICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCkgJiYgZWNobyAiV2FybmluZzogY3JlYXRpbmcgaW5zZWN1cmUgdGVtcCBkaXJlY3RvcnkiID4mMiA7IH0gfHwKKyB7IGVjaG8gIiRtZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gJFRNUERJUiIgPiYyIDsgZXhpdCAxIDsgfSA7CitkdW1teT0kdG1wL2R1bW15IDsKK3RtcGZpbGVzPSIkZHVtbXkuYyAkZHVtbXkubyAkZHVtbXkucmVsICRkdW1teSIgOworY2FzZSAkQ0NfRk9SX0JVSUxELCRIT1NUX0NDLCRDQyBpbgorICwsKSAgICBlY2hvICJpbnQgeDsiID4gJGR1bW15LmMgOworCWZvciBjIGluIGNjIGdjYyBjODkgYzk5IDsgZG8KKwkgIGlmICgkYyAtYyAtbyAkZHVtbXkubyAkZHVtbXkuYykgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCSAgICAgQ0NfRk9SX0JVSUxEPSIkYyI7IGJyZWFrIDsKKwkgIGZpIDsKKwlkb25lIDsKKwlpZiB0ZXN0IHgiJENDX0ZPUl9CVUlMRCIgPSB4IDsgdGhlbgorCSAgQ0NfRk9SX0JVSUxEPW5vX2NvbXBpbGVyX2ZvdW5kIDsKKwlmaQorCTs7CisgLCwqKSAgIENDX0ZPUl9CVUlMRD0kQ0MgOzsKKyAsKiwqKSAgQ0NfRk9SX0JVSUxEPSRIT1NUX0NDIDs7Citlc2FjIDsgc2V0X2NjX2Zvcl9idWlsZD0gOycKKworIyBUaGlzIGlzIG5lZWRlZCB0byBmaW5kIHVuYW1lIG9uIGEgUHlyYW1pZCBPU3ggd2hlbiBydW4gaW4gdGhlIEJTRCB1bml2ZXJzZS4KKyMgKGdoYXppQG5vYy5ydXRnZXJzLmVkdSAxOTk0LTA4LTI0KQoraWYgKHRlc3QgLWYgLy5hdHRiaW4vdW5hbWUpID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKwlQQVRIPSRQQVRIOi8uYXR0YmluIDsgZXhwb3J0IFBBVEgKK2ZpCisKK1VOQU1FX01BQ0hJTkU9YCh1bmFtZSAtbSkgMj4vZGV2L251bGxgIHx8IFVOQU1FX01BQ0hJTkU9dW5rbm93bgorVU5BTUVfUkVMRUFTRT1gKHVuYW1lIC1yKSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfUkVMRUFTRT11bmtub3duCitVTkFNRV9TWVNURU09YCh1bmFtZSAtcykgMj4vZGV2L251bGxgICB8fCBVTkFNRV9TWVNURU09dW5rbm93bgorVU5BTUVfVkVSU0lPTj1gKHVuYW1lIC12KSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfVkVSU0lPTj11bmtub3duCisKK2lmIFsgIiR7VU5BTUVfU1lTVEVNfSIgPSAiTGludXgiIF0gOyB0aGVuCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCWNhdCA8PCBFT0YgPiAkZHVtbXkuYworCSNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCSNpZmRlZiBfX1VDTElCQ19fCisJIyBpZmRlZiBfX1VDTElCQ19DT05GSUdfVkVSU0lPTl9fCisJTElCQz11Y2xpYmMgX19VQ0xJQkNfQ09ORklHX1ZFUlNJT05fXworCSMgZWxzZQorCUxJQkM9dWNsaWJjCisJIyBlbmRpZgorCSNlbHNlCisJTElCQz1nbnUKKwkjZW5kaWYKK0VPRgorCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwIExJQkM9IHwgc2VkIC1lICdzOiA6OmcnYAorZmkKKworIyBOb3RlOiBvcmRlciBpcyBzaWduaWZpY2FudCAtIHRoZSBjYXNlIGJyYW5jaGVzIGFyZSBub3QgZXhjbHVzaXZlLgorCitjYXNlICIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9OiR7VU5BTUVfVkVSU0lPTn0iIGluCisgICAgKjpOZXRCU0Q6KjoqKQorCSMgTmV0QlNEIChuYnNkKSB0YXJnZXRzIHNob3VsZCAod2hlcmUgYXBwbGljYWJsZSkgbWF0Y2ggb25lIG9yCisJIyBtb3JlIG9mIHRoZSB0dXBwbGVzOiAqLSotbmV0YnNkZWxmKiwgKi0qLW5ldGJzZGFvdXQqLAorCSMgKi0qLW5ldGJzZGVjb2ZmKiBhbmQgKi0qLW5ldGJzZCouICBGb3IgdGFyZ2V0cyB0aGF0IHJlY2VudGx5CisJIyBzd2l0Y2hlZCB0byBFTEYsICotKi1uZXRic2QqIHdvdWxkIHNlbGVjdCB0aGUgb2xkCisJIyBvYmplY3QgZmlsZSBmb3JtYXQuICBUaGlzIHByb3ZpZGVzIGJvdGggZm9yd2FyZAorCSMgY29tcGF0aWJpbGl0eSBhbmQgYSBjb25zaXN0ZW50IG1lY2hhbmlzbSBmb3Igc2VsZWN0aW5nIHRoZQorCSMgb2JqZWN0IGZpbGUgZm9ybWF0LgorCSMKKwkjIE5vdGU6IE5ldEJTRCBkb2Vzbid0IHBhcnRpY3VsYXJseSBjYXJlIGFib3V0IHRoZSB2ZW5kb3IKKwkjIHBvcnRpb24gb2YgdGhlIG5hbWUuICBXZSBhbHdheXMgc2V0IGl0IHRvICJ1bmtub3duIi4KKwlzeXNjdGw9InN5c2N0bCAtbiBody5tYWNoaW5lX2FyY2giCisJVU5BTUVfTUFDSElORV9BUkNIPWAoL3NiaW4vJHN5c2N0bCAyPi9kZXYvbnVsbCB8fCBcCisJICAgIC91c3Ivc2Jpbi8kc3lzY3RsIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bilgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FX0FSQ0h9IiBpbgorCSAgICBhcm1lYikgbWFjaGluZT1hcm1lYi11bmtub3duIDs7CisJICAgIGFybSopIG1hY2hpbmU9YXJtLXVua25vd24gOzsKKwkgICAgc2gzZWwpIG1hY2hpbmU9c2hsLXVua25vd24gOzsKKwkgICAgc2gzZWIpIG1hY2hpbmU9c2gtdW5rbm93biA7OworCSAgICBzaDVlbCkgbWFjaGluZT1zaDVsZS11bmtub3duIDs7CisJICAgICopIG1hY2hpbmU9JHtVTkFNRV9NQUNISU5FX0FSQ0h9LXVua25vd24gOzsKKwllc2FjCisJIyBUaGUgT3BlcmF0aW5nIFN5c3RlbSBpbmNsdWRpbmcgb2JqZWN0IGZvcm1hdCwgaWYgaXQgaGFzIHN3aXRjaGVkCisJIyB0byBFTEYgcmVjZW50bHksIG9yIHdpbGwgaW4gdGhlIGZ1dHVyZS4KKwljYXNlICIke1VOQU1FX01BQ0hJTkVfQVJDSH0iIGluCisJICAgIGFybSp8aTM4NnxtNjhrfG5zMzJrfHNoMyp8c3BhcmN8dmF4KQorCQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCWlmIGVjaG8gX19FTEZfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJCQl8IGdyZXAgLXEgX19FTEZfXworCQl0aGVuCisJCSAgICAjIE9uY2UgYWxsIHV0aWxpdGllcyBjYW4gYmUgRUNPRkYgKG5ldGJzZGVjb2ZmKSBvciBhLm91dCAobmV0YnNkYW91dCkuCisJCSAgICAjIFJldHVybiBuZXRic2QgZm9yIGVpdGhlci4gIEZJWD8KKwkJICAgIG9zPW5ldGJzZAorCQllbHNlCisJCSAgICBvcz1uZXRic2RlbGYKKwkJZmkKKwkJOzsKKwkgICAgKikKKwkJb3M9bmV0YnNkCisJCTs7CisJZXNhYworCSMgVGhlIE9TIHJlbGVhc2UKKwkjIERlYmlhbiBHTlUvTmV0QlNEIG1hY2hpbmVzIGhhdmUgYSBkaWZmZXJlbnQgdXNlcmxhbmQsIGFuZAorCSMgdGh1cywgbmVlZCBhIGRpc3RpbmN0IHRyaXBsZXQuIEhvd2V2ZXIsIHRoZXkgZG8gbm90IG5lZWQKKwkjIGtlcm5lbCB2ZXJzaW9uIGluZm9ybWF0aW9uLCBzbyBpdCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhCisJIyBzdWl0YWJsZSB0YWcsIGluIHRoZSBzdHlsZSBvZiBsaW51eC1nbnUuCisJY2FzZSAiJHtVTkFNRV9WRVJTSU9OfSIgaW4KKwkgICAgRGViaWFuKikKKwkJcmVsZWFzZT0nLWdudScKKwkJOzsKKwkgICAgKikKKwkJcmVsZWFzZT1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLV9dLiovXC4vJ2AKKwkJOzsKKwllc2FjCisJIyBTaW5jZSBDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU06CisJIyBjb250YWlucyByZWR1bmRhbnQgaW5mb3JtYXRpb24sIHRoZSBzaG9ydGVyIGZvcm06CisJIyBDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTSBpcyB1c2VkLgorCWVjaG8gIiR7bWFjaGluZX0tJHtvc30ke3JlbGVhc2V9IgorCWV4aXQgOzsKKyAgICAqOk9wZW5CU0Q6KjoqKQorCVVOQU1FX01BQ0hJTkVfQVJDSD1gYXJjaCB8IHNlZCAncy9PcGVuQlNELi8vJ2AKKwllY2hvICR7VU5BTUVfTUFDSElORV9BUkNIfS11bmtub3duLW9wZW5ic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6ZWtrb0JTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZWtrb2JzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpTb2xpZEJTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc29saWRic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1hY3BwYzpNaXJCU0Q6KjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLW1pcmJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpNaXJCU0Q6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW1pcmJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgYWxwaGE6T1NGMToqOiopCisJY2FzZSAkVU5BTUVfUkVMRUFTRSBpbgorCSo0LjApCisJCVVOQU1FX1JFTEVBU0U9YC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQzfSdgCisJCTs7CisJKjUuKikKKwkJVU5BTUVfUkVMRUFTRT1gL3Vzci9zYmluL3NpemVyIC12IHwgYXdrICd7cHJpbnQgJDR9J2AKKwkJOzsKKwllc2FjCisJIyBBY2NvcmRpbmcgdG8gQ29tcGFxLCAvdXNyL3NiaW4vcHNyaW5mbyBoYXMgYmVlbiBhdmFpbGFibGUgb24KKwkjIE9TRi8xIGFuZCBUcnU2NCBzeXN0ZW1zIHByb2R1Y2VkIHNpbmNlIDE5OTUuICBJIGhvcGUgdGhhdAorCSMgY292ZXJzIG1vc3Qgc3lzdGVtcyBydW5uaW5nIHRvZGF5LiAgVGhpcyBjb2RlIHBpcGVzIHRoZSBDUFUKKwkjIHR5cGVzIHRocm91Z2ggaGVhZCAtbiAxLCBzbyB3ZSBvbmx5IGRldGVjdCB0aGUgdHlwZSBvZiBDUFUgMC4KKwlBTFBIQV9DUFVfVFlQRT1gL3Vzci9zYmluL3BzcmluZm8gLXYgfCBzZWQgLW4gLWUgJ3MvXiAgVGhlIGFscGhhIFwoLipcKSBwcm9jZXNzb3IuKiQvXDEvcCcgfCBoZWFkIC1uIDFgCisJY2FzZSAiJEFMUEhBX0NQVV9UWVBFIiBpbgorCSAgICAiRVY0ICgyMTA2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkVWNC41ICgyMTA2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkxDQTQgKDIxMDY2LzIxMDY4KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiRVY1ICgyMTE2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NSIgOzsKKwkgICAgIkVWNS42ICgyMTE2NEEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjU2IiA7OworCSAgICAiRVY1LjYgKDIxMTY0UEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFwY2E1NiIgOzsKKwkgICAgIkVWNS43ICgyMTE2NFBDKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhcGNhNTciIDs7CisJICAgICJFVjYgKDIxMjY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2IiA7OworCSAgICAiRVY2LjcgKDIxMjY0QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjciIDs7CisJICAgICJFVjYuOENCICgyMTI2NEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY4IiA7OworCSAgICAiRVY2LjhBTCAoMjEyNjRCKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OCIgOzsKKwkgICAgIkVWNi44Q1ggKDIxMjY0RCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiIDs7CisJICAgICJFVjYuOUEgKDIxMjY0L0VWNjlBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OSIgOzsKKwkgICAgIkVWNyAoMjEzNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjciIDs7CisJICAgICJFVjcuOSAoMjEzNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY3OSIgOzsKKwllc2FjCisJIyBBIFBuLm4gdmVyc2lvbiBpcyBhIHBhdGNoZWQgdmVyc2lvbi4KKwkjIEEgVm4ubiB2ZXJzaW9uIGlzIGEgcmVsZWFzZWQgdmVyc2lvbi4KKwkjIEEgVG4ubiB2ZXJzaW9uIGlzIGEgcmVsZWFzZWQgZmllbGQgdGVzdCB2ZXJzaW9uLgorCSMgQSBYbi5uIHZlcnNpb24gaXMgYW4gdW5yZWxlYXNlZCBleHBlcmltZW50YWwgYmFzZWxldmVsLgorCSMgMS4yIHVzZXMgIjEuMiIgZm9yIHVuYW1lIC1yLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtb3NmYGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9eW1BWVFhdLy8nIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYAorCSMgUmVzZXQgRVhJVCB0cmFwIGJlZm9yZSBleGl0aW5nIHRvIGF2b2lkIHNwdXJpb3VzIG5vbi16ZXJvIGV4aXQgY29kZS4KKwlleGl0Y29kZT0kPworCXRyYXAgJycgMAorCWV4aXQgJGV4aXRjb2RlIDs7CisgICAgQWxwaGFcICo6V2luZG93c19OVCo6KikKKwkjIEhvdyBkbyB3ZSBrbm93IGl0J3MgSW50ZXJpeCByYXRoZXIgdGhhbiB0aGUgZ2VuZXJpYyBQT1NJWCBzdWJzeXN0ZW0/CisJIyBTaG91bGQgd2UgY2hhbmdlIFVOQU1FX01BQ0hJTkUgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB1bmFtZSBpbnN0ZWFkCisJIyBvZiB0aGUgc3BlY2lmaWMgQWxwaGEgbW9kZWw/CisJZWNobyBhbHBoYS1wYy1pbnRlcml4CisJZXhpdCA7OworICAgIDIxMDY0OldpbmRvd3NfTlQ6NTA6MykKKwllY2hvIGFscGhhLWRlYy13aW5udDMuNQorCWV4aXQgOzsKKyAgICBBbWlnYSo6VU5JWF9TeXN0ZW1fVjo0LjA6KikKKwllY2hvIG02OGstdW5rbm93bi1zeXN2NAorCWV4aXQgOzsKKyAgICAqOltBYV1taWdhW09vXVtTc106KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWFtaWdhb3MKKwlleGl0IDs7CisgICAgKjpbTW1db3JwaFtPb11bU3NdOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1tb3JwaG9zCisJZXhpdCA7OworICAgICo6T1MvMzkwOio6KikKKwllY2hvIGkzNzAtaWJtLW9wZW5lZGl0aW9uCisJZXhpdCA7OworICAgICo6ei9WTToqOiopCisJZWNobyBzMzkwLWlibS16dm1vZQorCWV4aXQgOzsKKyAgICAqOk9TNDAwOio6KikKKwllY2hvIHBvd2VycGMtaWJtLW9zNDAwCisJZXhpdCA7OworICAgIGFybTpSSVNDKjoxLlswMTJdKjoqfGFybTpyaXNjaXg6MS5bMDEyXSo6KikKKwllY2hvIGFybS1hY29ybi1yaXNjaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGFybTpyaXNjb3M6KjoqfGFybTpSSVNDT1M6KjoqKQorCWVjaG8gYXJtLXVua25vd24tcmlzY29zCisJZXhpdCA7OworICAgIFNSMj8wMTpISS1VWC9NUFA6KjoqIHwgU1I4MDAwOkhJLVVYL01QUDoqOiopCisJZWNobyBocHBhMS4xLWhpdGFjaGktaGl1eG1wcAorCWV4aXQgOzsKKyAgICBQeXJhbWlkKjpPU3gqOio6KiB8IE1JUyo6T1N4KjoqOiogfCBNSVMqOlNNUF9EQy1PU3gqOio6KikKKwkjIGFrZWVAd3BkaXMwMy53cGFmYi5hZi5taWwgKEVhcmxlIEYuIEFrZSkgY29udHJpYnV0ZWQgTUlTIGFuZCBOSUxFLgorCWlmIHRlc3QgImAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGxgIiA9IGF0dCA7IHRoZW4KKwkJZWNobyBweXJhbWlkLXB5cmFtaWQtc3lzdjMKKwllbHNlCisJCWVjaG8gcHlyYW1pZC1weXJhbWlkLWJzZAorCWZpCisJZXhpdCA7OworICAgIE5JTEUqOio6KjpkY29zeCkKKwllY2hvIHB5cmFtaWQtcHlyYW1pZC1zdnI0CisJZXhpdCA7OworICAgIERSUz82MDAwOnVuaXg6NC4wOjYqKQorCWVjaG8gc3BhcmMtaWNsLW54NgorCWV4aXQgOzsKKyAgICBEUlM/NjAwMDpVTklYX1NWOjQuMio6NyogfCBEUlM/NjAwMDppc2lzOjQuMio6NyopCisJY2FzZSBgL3Vzci9iaW4vdW5hbWUgLXBgIGluCisJICAgIHNwYXJjKSBlY2hvIHNwYXJjLWljbC1ueDc7IGV4aXQgOzsKKwllc2FjIDs7CisgICAgczM5MHg6U3VuT1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgc3VuNEg6U3VuT1M6NS4qOiopCisJZWNobyBzcGFyYy1oYWwtc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgc3VuNCo6U3VuT1M6NS4qOiogfCB0YWRwb2xlKjpTdW5PUzo1Lio6KikKKwllY2hvIHNwYXJjLXN1bi1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBpODZwYzpBdXJvcmFVWDo1Lio6KiB8IGk4NnhlbjpBdXJvcmFVWDo1Lio6KikKKwllY2hvIGkzODYtcGMtYXVyb3JhdXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGk4NnBjOlN1bk9TOjUuKjoqIHwgaTg2eGVuOlN1bk9TOjUuKjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlTVU5fQVJDSD0iaTM4NiIKKwkjIElmIHRoZXJlIGlzIGEgY29tcGlsZXIsIHNlZSBpZiBpdCBpcyBjb25maWd1cmVkIGZvciA2NC1iaXQgb2JqZWN0cy4KKwkjIE5vdGUgdGhhdCB0aGUgU3VuIGNjIGRvZXMgbm90IHR1cm4gX19MUDY0X18gaW50byAxIGxpa2UgZ2NjIGRvZXMuCisJIyBUaGlzIHRlc3Qgd29ya3MgZm9yIGJvdGggY29tcGlsZXJzLgorCWlmIFsgIiRDQ19GT1JfQlVJTEQiICE9ICdub19jb21waWxlcl9mb3VuZCcgXTsgdGhlbgorCSAgICBpZiAoZWNobyAnI2lmZGVmIF9fYW1kNjQnOyBlY2hvIElTXzY0QklUX0FSQ0g7IGVjaG8gJyNlbmRpZicpIHwgXAorCQkoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwgXAorCQlncmVwIElTXzY0QklUX0FSQ0ggPi9kZXYvbnVsbAorCSAgICB0aGVuCisJCVNVTl9BUkNIPSJ4ODZfNjQiCisJICAgIGZpCisJZmkKKwllY2hvICR7U1VOX0FSQ0h9LXBjLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIHN1bjQqOlN1bk9TOjYqOiopCisJIyBBY2NvcmRpbmcgdG8gY29uZmlnLnN1YiwgdGhpcyBpcyB0aGUgcHJvcGVyIHdheSB0byBjYW5vbmljYWxpemUKKwkjIFN1bk9TNi4gIEhhcmQgdG8gZ3Vlc3MgZXhhY3RseSB3aGF0IFN1bk9TNiB3aWxsIGJlIGxpa2UsIGJ1dAorCSMgaXQncyBsaWtlbHkgdG8gYmUgbW9yZSBsaWtlIFNvbGFyaXMgdGhhbiBTdW5PUzQuCisJZWNobyBzcGFyYy1zdW4tc29sYXJpczNgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgc3VuNCo6U3VuT1M6KjoqKQorCWNhc2UgImAvdXNyL2Jpbi9hcmNoIC1rYCIgaW4KKwkgICAgU2VyaWVzKnxTNCopCisJCVVOQU1FX1JFTEVBU0U9YHVuYW1lIC12YAorCQk7OworCWVzYWMKKwkjIEphcGFuZXNlIExhbmd1YWdlIHZlcnNpb25zIGhhdmUgYSB2ZXJzaW9uIG51bWJlciBsaWtlIGA0LjEuMy1KTCcuCisJZWNobyBzcGFyYy1zdW4tc3Vub3NgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy8tL18vJ2AKKwlleGl0IDs7CisgICAgc3VuMyo6U3VuT1M6KjoqKQorCWVjaG8gbTY4ay1zdW4tc3Vub3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHN1bio6Kjo0LjJCU0Q6KikKKwlVTkFNRV9SRUxFQVNFPWAoc2VkIDFxIC9ldGMvbW90ZCB8IGF3ayAne3ByaW50IHN1YnN0cigkNSwxLDMpfScpIDI+L2Rldi9udWxsYAorCXRlc3QgIngke1VOQU1FX1JFTEVBU0V9IiA9ICJ4IiAmJiBVTkFNRV9SRUxFQVNFPTMKKwljYXNlICJgL2Jpbi9hcmNoYCIgaW4KKwkgICAgc3VuMykKKwkJZWNobyBtNjhrLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwkJOzsKKwkgICAgc3VuNCkKKwkJZWNobyBzcGFyYy1zdW4tc3Vub3Mke1VOQU1FX1JFTEVBU0V9CisJCTs7CisJZXNhYworCWV4aXQgOzsKKyAgICBhdXNocDpTdW5PUzoqOiopCisJZWNobyBzcGFyYy1hdXNwZXgtc3Vub3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICMgVGhlIHNpdHVhdGlvbiBmb3IgTWlOVCBpcyBhIGxpdHRsZSBjb25mdXNpbmcuICBUaGUgbWFjaGluZSBuYW1lCisgICAgIyBjYW4gYmUgdmlydHVhbGx5IGV2ZXJ5dGhpbmcgKGV2ZXJ5dGhpbmcgd2hpY2ggaXMgbm90CisgICAgIyAiYXRhcmlzdCIgb3IgImF0YXJpc3RlIiBhdCBsZWFzdCBzaG91bGQgaGF2ZSBhIHByb2Nlc3NvcgorICAgICMgPiBtNjgwMDApLiAgVGhlIHN5c3RlbSBuYW1lIHJhbmdlcyBmcm9tICJNaU5UIiBvdmVyICJGcmVlTWlOVCIKKyAgICAjIHRvIHRoZSBsb3dlcmNhc2UgdmVyc2lvbiAibWludCIgKG9yICJmcmVlbWludCIpLiAgRmluYWxseQorICAgICMgdGhlIHN5c3RlbSBuYW1lICJUT1MiIGRlbm90ZXMgYSBzeXN0ZW0gd2hpY2ggaXMgYWN0dWFsbHkgbm90CisgICAgIyBNaU5ULiAgQnV0IE1pTlQgaXMgZG93bndhcmQgY29tcGF0aWJsZSB0byBUT1MsIHNvIHRoaXMgc2hvdWxkCisgICAgIyBiZSBubyBwcm9ibGVtLgorICAgIGF0YXJpc3RbZV06Kk1pTlQ6KjoqIHwgYXRhcmlzdFtlXToqbWludDoqOiogfCBhdGFyaXN0W2VdOipUT1M6KjoqKQorCWVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBhdGFyaSo6Kk1pTlQ6KjoqIHwgYXRhcmkqOiptaW50Oio6KiB8IGF0YXJpc3RbZV06KlRPUzoqOiopCisJZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICpmYWxjb24qOipNaU5UOio6KiB8ICpmYWxjb24qOiptaW50Oio6KiB8ICpmYWxjb24qOipUT1M6KjoqKQorCWVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtaWxhbio6Kk1pTlQ6KjoqIHwgbWlsYW4qOiptaW50Oio6KiB8ICptaWxhbio6KlRPUzoqOiopCisJZWNobyBtNjhrLW1pbGFuLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGhhZGVzKjoqTWlOVDoqOiogfCBoYWRlcyo6Km1pbnQ6KjoqIHwgKmhhZGVzKjoqVE9TOio6KikKKwllY2hvIG02OGstaGFkZXMtbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjoqTWlOVDoqOiogfCAqOiptaW50Oio6KiB8ICo6KlRPUzoqOiopCisJZWNobyBtNjhrLXVua25vd24tbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbTY4azptYWNodGVuOio6KikKKwllY2hvIG02OGstYXBwbGUtbWFjaHRlbiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgcG93ZXJwYzptYWNodGVuOio6KikKKwllY2hvIHBvd2VycGMtYXBwbGUtbWFjaHRlbiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUklTQyo6TWFjaDoqOiopCisJZWNobyBtaXBzLWRlYy1tYWNoX2JzZDQuMworCWV4aXQgOzsKKyAgICBSSVNDKjpVTFRSSVg6KjoqKQorCWVjaG8gbWlwcy1kZWMtdWx0cml4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBWQVgqOlVMVFJJWCo6KjoqKQorCWVjaG8gdmF4LWRlYy11bHRyaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIDIwMjA6Q0xJWDoqOiogfCAyNDMwOkNMSVg6KjoqKQorCWVjaG8gY2xpcHBlci1pbnRlcmdyYXBoLWNsaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1pcHM6KjoqOlVNSVBTIHwgbWlwczoqOio6UklTQ29zKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworI2lmZGVmIF9fY3BsdXNwbHVzCisjaW5jbHVkZSA8c3RkaW8uaD4gIC8qIGZvciBwcmludGYoKSBwcm90b3R5cGUgKi8KKwlpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeworI2Vsc2UKKwlpbnQgbWFpbiAoYXJnYywgYXJndikgaW50IGFyZ2M7IGNoYXIgKmFyZ3ZbXTsgeworI2VuZGlmCisJI2lmIGRlZmluZWQgKGhvc3RfbWlwcykgJiYgZGVmaW5lZCAoTUlQU0VCKQorCSNpZiBkZWZpbmVkIChTWVNUWVBFX1NZU1YpCisJICBwcmludGYgKCJtaXBzLW1pcHMtcmlzY29zJXNzeXN2XG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7CisJI2VuZGlmCisJI2lmIGRlZmluZWQgKFNZU1RZUEVfU1ZSNCkKKwkgIHByaW50ZiAoIm1pcHMtbWlwcy1yaXNjb3Mlc3N2cjRcbiIsIGFyZ3ZbMV0pOyBleGl0ICgwKTsKKwkjZW5kaWYKKwkjaWYgZGVmaW5lZCAoU1lTVFlQRV9CU0Q0MykgfHwgZGVmaW5lZChTWVNUWVBFX0JTRCkKKwkgIHByaW50ZiAoIm1pcHMtbWlwcy1yaXNjb3Mlc2JzZFxuIiwgYXJndlsxXSk7IGV4aXQgKDApOworCSNlbmRpZgorCSNlbmRpZgorCSAgZXhpdCAoLTEpOworCX0KK0VPRgorCSRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmCisJICBkdW1teWFyZz1gZWNobyAiJHtVTkFNRV9SRUxFQVNFfSIgfCBzZWQgLW4gJ3MvXChbMC05XSpcKS4qL1wxL3AnYCAmJgorCSAgU1lTVEVNX05BTUU9YCRkdW1teSAkZHVtbXlhcmdgICYmCisJICAgIHsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQorCWVjaG8gbWlwcy1taXBzLXJpc2NvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgTW90b3JvbGE6UG93ZXJNQVhfT1M6KjoqKQorCWVjaG8gcG93ZXJwYy1tb3Rvcm9sYS1wb3dlcm1heAorCWV4aXQgOzsKKyAgICBNb3Rvcm9sYToqOjQuMzpQTDgtKikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VybWF4CisJZXhpdCA7OworICAgIE5pZ2h0X0hhd2s6KjoqOlBvd2VyTUFYX09TIHwgU3luZXJneTpQb3dlck1BWF9PUzoqOiopCisJZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcm1heAorCWV4aXQgOzsKKyAgICBOaWdodF9IYXdrOlBvd2VyX1VOSVg6KjoqKQorCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJ1bml4CisJZXhpdCA7OworICAgIG04OGs6Q1gvVVg6Nyo6KikKKwllY2hvIG04OGstaGFycmlzLWN4dXg3CisJZXhpdCA7OworICAgIG04OGs6Kjo0KjpSNCopCisJZWNobyBtODhrLW1vdG9yb2xhLXN5c3Y0CisJZXhpdCA7OworICAgIG04OGs6KjozKjpSMyopCisJZWNobyBtODhrLW1vdG9yb2xhLXN5c3YzCisJZXhpdCA7OworICAgIEFWaWlPTjpkZ3V4Oio6KikKKwkjIERHL1VYIHJldHVybnMgQVZpaU9OIGZvciBhbGwgYXJjaGl0ZWN0dXJlcworCVVOQU1FX1BST0NFU1NPUj1gL3Vzci9iaW4vdW5hbWUgLXBgCisJaWYgWyAkVU5BTUVfUFJPQ0VTU09SID0gbWM4ODEwMCBdIHx8IFsgJFVOQU1FX1BST0NFU1NPUiA9IG1jODgxMTAgXQorCXRoZW4KKwkgICAgaWYgWyAke1RBUkdFVF9CSU5BUllfSU5URVJGQUNFfXggPSBtODhrZGd1eGVsZnggXSB8fCBcCisJICAgICAgIFsgJHtUQVJHRVRfQklOQVJZX0lOVEVSRkFDRX14ID0geCBdCisJICAgIHRoZW4KKwkJZWNobyBtODhrLWRnLWRndXgke1VOQU1FX1JFTEVBU0V9CisJICAgIGVsc2UKKwkJZWNobyBtODhrLWRnLWRndXhiY3Mke1VOQU1FX1JFTEVBU0V9CisJICAgIGZpCisJZWxzZQorCSAgICBlY2hvIGk1ODYtZGctZGd1eCR7VU5BTUVfUkVMRUFTRX0KKwlmaQorCWV4aXQgOzsKKyAgICBNODgqOkRvbHBoaW5PUzoqOiopCSMgRG9scGhpbk9TIChTVlIzKQorCWVjaG8gbTg4ay1kb2xwaGluLXN5c3YzCisJZXhpdCA7OworICAgIE04OCo6KjpSMyo6KikKKwkjIERlbHRhIDg4ayBzeXN0ZW0gcnVubmluZyBTVlIzCisJZWNobyBtODhrLW1vdG9yb2xhLXN5c3YzCisJZXhpdCA7OworICAgIFhEODgqOio6KjoqKSAjIFRla3Ryb25peCBYRDg4IHN5c3RlbSBydW5uaW5nIFVUZWtWIChTVlIzKQorCWVjaG8gbTg4ay10ZWt0cm9uaXgtc3lzdjMKKwlleGl0IDs7CisgICAgVGVrNDNbMC05XVswLTldOlVUZWs6KjoqKSAjIFRla3Ryb25peCA0MzAwIHN5c3RlbSBydW5uaW5nIFVUZWsgKEJTRCkKKwllY2hvIG02OGstdGVrdHJvbml4LWJzZAorCWV4aXQgOzsKKyAgICAqOklSSVgqOio6KikKKwllY2hvIG1pcHMtc2dpLWlyaXhgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy8tL18vZydgCisJZXhpdCA7OworICAgID8/Pz8/Pz8/OkFJWD86WzEyXS4xOjIpICAgIyBBSVggMi4yLjEgb3IgQUlYIDIuMS4xIGlzIFJUL1BDIEFJWC4KKwllY2hvIHJvbXAtaWJtLWFpeCAgICAgIyB1bmFtZSAtbSBnaXZlcyBhbiA4IGhleC1jb2RlIENQVSBpZAorCWV4aXQgOzsgICAgICAgICAgICAgICAjIE5vdGUgdGhhdDogZWNobyAiJ2B1bmFtZSAtc2AnIiBnaXZlcyAnQUlYICcKKyAgICBpKjg2OkFJWDoqOiopCisJZWNobyBpMzg2LWlibS1haXgKKwlleGl0IDs7CisgICAgaWE2NDpBSVg6KjoqKQorCWlmIFsgLXggL3Vzci9iaW4vb3NsZXZlbCBdIDsgdGhlbgorCQlJQk1fUkVWPWAvdXNyL2Jpbi9vc2xldmVsYAorCWVsc2UKKwkJSUJNX1JFVj0ke1VOQU1FX1ZFUlNJT059LiR7VU5BTUVfUkVMRUFTRX0KKwlmaQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tYWl4JHtJQk1fUkVWfQorCWV4aXQgOzsKKyAgICAqOkFJWDoyOjMpCisJaWYgZ3JlcCBib3MzMjUgL3Vzci9pbmNsdWRlL3N0ZGlvLmggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJc2VkICdzL14JCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJCSNpbmNsdWRlIDxzeXMvc3lzdGVtY2ZnLmg+CisKKwkJbWFpbigpCisJCQl7CisJCQlpZiAoIV9fcG93ZXJfcGMoKSkKKwkJCQlleGl0KDEpOworCQkJcHV0cygicG93ZXJwYy1pYm0tYWl4My4yLjUiKTsKKwkJCWV4aXQoMCk7CisJCQl9CitFT0YKKwkJaWYgJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYgU1lTVEVNX05BTUU9YCRkdW1teWAKKwkJdGhlbgorCQkJZWNobyAiJFNZU1RFTV9OQU1FIgorCQllbHNlCisJCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yLjUKKwkJZmkKKwllbGlmIGdyZXAgYm9zMzI0IC91c3IvaW5jbHVkZS9zdGRpby5oID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yLjQKKwllbHNlCisJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIKKwlmaQorCWV4aXQgOzsKKyAgICAqOkFJWDoqOls0NTY3XSkKKwlJQk1fQ1BVX0lEPWAvdXNyL3NiaW4vbHNkZXYgLUMgLWMgcHJvY2Vzc29yIC1TIGF2YWlsYWJsZSB8IHNlZCAxcSB8IGF3ayAneyBwcmludCAkMSB9J2AKKwlpZiAvdXNyL3NiaW4vbHNhdHRyIC1FbCAke0lCTV9DUFVfSUR9IHwgZ3JlcCAnIFBPV0VSJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJSUJNX0FSQ0g9cnM2MDAwCisJZWxzZQorCQlJQk1fQVJDSD1wb3dlcnBjCisJZmkKKwlpZiBbIC14IC91c3IvYmluL29zbGV2ZWwgXSA7IHRoZW4KKwkJSUJNX1JFVj1gL3Vzci9iaW4vb3NsZXZlbGAKKwllbHNlCisJCUlCTV9SRVY9JHtVTkFNRV9WRVJTSU9OfS4ke1VOQU1FX1JFTEVBU0V9CisJZmkKKwllY2hvICR7SUJNX0FSQ0h9LWlibS1haXgke0lCTV9SRVZ9CisJZXhpdCA7OworICAgICo6QUlYOio6KikKKwllY2hvIHJzNjAwMC1pYm0tYWl4CisJZXhpdCA7OworICAgIGlibXJ0OjQuNEJTRDoqfHJvbXAtaWJtOkJTRDoqKQorCWVjaG8gcm9tcC1pYm0tYnNkNC40CisJZXhpdCA7OworICAgIGlibXJ0OipCU0Q6Knxyb21wLWlibTpCU0Q6KikgICAgICAgICAgICAjIGNvdmVycyBSVC9QQyBCU0QgYW5kCisJZWNobyByb21wLWlibS1ic2Qke1VOQU1FX1JFTEVBU0V9ICAgIyA0LjMgd2l0aCB1bmFtZSBhZGRlZCB0bworCWV4aXQgOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVwb3J0OiByb21wLWlibSBCU0QgNC4zCisgICAgKjpCT1NYOio6KikKKwllY2hvIHJzNjAwMC1idWxsLWJvc3gKKwlleGl0IDs7CisgICAgRFBYLzI/MDA6Qi5PLlMuOio6KikKKwllY2hvIG02OGstYnVsbC1zeXN2MworCWV4aXQgOzsKKyAgICA5MDAwL1szNF0/Pzo0LjNic2Q6MS4qOiopCisJZWNobyBtNjhrLWhwLWJzZAorCWV4aXQgOzsKKyAgICBocDMwMDo0LjRCU0Q6KjoqIHwgOTAwMC9bMzRdPz86NC4zYnNkOjIuKjoqKQorCWVjaG8gbTY4ay1ocC1ic2Q0LjQKKwlleGl0IDs7CisgICAgOTAwMC9bMzQ2NzhdPz86SFAtVVg6KjoqKQorCUhQVVhfUkVWPWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLlswQl0qLy8nYAorCWNhc2UgIiR7VU5BTUVfTUFDSElORX0iIGluCisJICAgIDkwMDAvMzE/ICkgICAgICAgICAgICBIUF9BUkNIPW02ODAwMCA7OworCSAgICA5MDAwL1szNF0/PyApICAgICAgICAgSFBfQVJDSD1tNjhrIDs7CisJICAgIDkwMDAvWzY3OF1bMC05XVswLTldKQorCQlpZiBbIC14IC91c3IvYmluL2dldGNvbmYgXTsgdGhlbgorCQkgICAgc2NfY3B1X3ZlcnNpb249YC91c3IvYmluL2dldGNvbmYgU0NfQ1BVX1ZFUlNJT04gMj4vZGV2L251bGxgCisJCSAgICBzY19rZXJuZWxfYml0cz1gL3Vzci9iaW4vZ2V0Y29uZiBTQ19LRVJORUxfQklUUyAyPi9kZXYvbnVsbGAKKwkJICAgIGNhc2UgIiR7c2NfY3B1X3ZlcnNpb259IiBpbgorCQkgICAgICA1MjMpIEhQX0FSQ0g9ImhwcGExLjAiIDs7ICMgQ1BVX1BBX1JJU0MxXzAKKwkJICAgICAgNTI4KSBIUF9BUkNIPSJocHBhMS4xIiA7OyAjIENQVV9QQV9SSVNDMV8xCisJCSAgICAgIDUzMikgICAgICAgICAgICAgICAgICAgICAgIyBDUFVfUEFfUklTQzJfMAorCQkJY2FzZSAiJHtzY19rZXJuZWxfYml0c30iIGluCisJCQkgIDMyKSBIUF9BUkNIPSJocHBhMi4wbiIgOzsKKwkJCSAgNjQpIEhQX0FSQ0g9ImhwcGEyLjB3IiA7OworCQkJICAnJykgSFBfQVJDSD0iaHBwYTIuMCIgOzsgICAjIEhQLVVYIDEwLjIwCisJCQllc2FjIDs7CisJCSAgICBlc2FjCisJCWZpCisJCWlmIFsgIiR7SFBfQVJDSH0iID0gIiIgXTsgdGhlbgorCQkgICAgZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQkgICAgc2VkICdzL14JCS8vJyA8PCBFT0YgPiRkdW1teS5jCisKKwkJI2RlZmluZSBfSFBVWF9TT1VSQ0UKKwkJI2luY2x1ZGUgPHN0ZGxpYi5oPgorCQkjaW5jbHVkZSA8dW5pc3RkLmg+CisKKwkJaW50IG1haW4gKCkKKwkJeworCQkjaWYgZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpCisJCSAgICBsb25nIGJpdHMgPSBzeXNjb25mKF9TQ19LRVJORUxfQklUUyk7CisJCSNlbmRpZgorCQkgICAgbG9uZyBjcHUgID0gc3lzY29uZiAoX1NDX0NQVV9WRVJTSU9OKTsKKworCQkgICAgc3dpdGNoIChjcHUpCisJCQl7CisJCQljYXNlIENQVV9QQV9SSVNDMV8wOiBwdXRzICgiaHBwYTEuMCIpOyBicmVhazsKKwkJCWNhc2UgQ1BVX1BBX1JJU0MxXzE6IHB1dHMgKCJocHBhMS4xIik7IGJyZWFrOworCQkJY2FzZSBDUFVfUEFfUklTQzJfMDoKKwkJI2lmIGRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKQorCQkJICAgIHN3aXRjaCAoYml0cykKKwkJCQl7CisJCQkJY2FzZSA2NDogcHV0cyAoImhwcGEyLjB3Iik7IGJyZWFrOworCQkJCWNhc2UgMzI6IHB1dHMgKCJocHBhMi4wbiIpOyBicmVhazsKKwkJCQlkZWZhdWx0OiBwdXRzICgiaHBwYTIuMCIpOyBicmVhazsKKwkJCQl9IGJyZWFrOworCQkjZWxzZSAgLyogIWRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKSAqLworCQkJICAgIHB1dHMgKCJocHBhMi4wIik7IGJyZWFrOworCQkjZW5kaWYKKwkJCWRlZmF1bHQ6IHB1dHMgKCJocHBhMS4wIik7IGJyZWFrOworCQkJfQorCQkgICAgZXhpdCAoMCk7CisJCX0KK0VPRgorCQkgICAgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgMj4vZGV2L251bGwpICYmIEhQX0FSQ0g9YCRkdW1teWAKKwkJICAgIHRlc3QgLXogIiRIUF9BUkNIIiAmJiBIUF9BUkNIPWhwcGEKKwkJZmkgOzsKKwllc2FjCisJaWYgWyAke0hQX0FSQ0h9ID0gImhwcGEyLjB3IiBdCisJdGhlbgorCSAgICBldmFsICRzZXRfY2NfZm9yX2J1aWxkCisKKwkgICAgIyBocHBhMi4wdy1ocC1ocHV4KiBoYXMgYSA2NC1iaXQga2VybmVsIGFuZCBhIGNvbXBpbGVyIGdlbmVyYXRpbmcKKwkgICAgIyAzMi1iaXQgY29kZS4gIGhwcGE2NC1ocC1ocHV4KiBoYXMgdGhlIHNhbWUga2VybmVsIGFuZCBhIGNvbXBpbGVyCisJICAgICMgZ2VuZXJhdGluZyA2NC1iaXQgY29kZS4gIEdOVSBhbmQgSFAgdXNlIGRpZmZlcmVudCBub21lbmNsYXR1cmU6CisJICAgICMKKwkgICAgIyAkIENDX0ZPUl9CVUlMRD1jYyAuL2NvbmZpZy5ndWVzcworCSAgICAjID0+IGhwcGEyLjB3LWhwLWhwdXgxMS4yMworCSAgICAjICQgQ0NfRk9SX0JVSUxEPSJjYyArREEyLjB3IiAuL2NvbmZpZy5ndWVzcworCSAgICAjID0+IGhwcGE2NC1ocC1ocHV4MTEuMjMKKworCSAgICBpZiBlY2hvIF9fTFA2NF9fIHwgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8CisJCWdyZXAgLXEgX19MUDY0X18KKwkgICAgdGhlbgorCQlIUF9BUkNIPSJocHBhMi4wdyIKKwkgICAgZWxzZQorCQlIUF9BUkNIPSJocHBhNjQiCisJICAgIGZpCisJZmkKKwllY2hvICR7SFBfQVJDSH0taHAtaHB1eCR7SFBVWF9SRVZ9CisJZXhpdCA7OworICAgIGlhNjQ6SFAtVVg6KjoqKQorCUhQVVhfUkVWPWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLlswQl0qLy8nYAorCWVjaG8gaWE2NC1ocC1ocHV4JHtIUFVYX1JFVn0KKwlleGl0IDs7CisgICAgMzA1MCo6SEktVVg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSNpbmNsdWRlIDx1bmlzdGQuaD4KKwlpbnQKKwltYWluICgpCisJeworCSAgbG9uZyBjcHUgPSBzeXNjb25mIChfU0NfQ1BVX1ZFUlNJT04pOworCSAgLyogVGhlIG9yZGVyIG1hdHRlcnMsIGJlY2F1c2UgQ1BVX0lTX0hQX01DNjhLIGVycm9uZW91c2x5IHJldHVybnMKKwkgICAgIHRydWUgZm9yIENQVV9QQV9SSVNDMV8wLiAgQ1BVX0lTX1BBX1JJU0MgcmV0dXJucyBjb3JyZWN0CisJICAgICByZXN1bHRzLCBob3dldmVyLiAgKi8KKwkgIGlmIChDUFVfSVNfUEFfUklTQyAoY3B1KSkKKwkgICAgeworCSAgICAgIHN3aXRjaCAoY3B1KQorCQl7CisJCSAgY2FzZSBDUFVfUEFfUklTQzFfMDogcHV0cyAoImhwcGExLjAtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQkgIGNhc2UgQ1BVX1BBX1JJU0MxXzE6IHB1dHMgKCJocHBhMS4xLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJICBjYXNlIENQVV9QQV9SSVNDMl8wOiBwdXRzICgiaHBwYTIuMC1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCSAgZGVmYXVsdDogcHV0cyAoImhwcGEtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQl9CisJICAgIH0KKwkgIGVsc2UgaWYgKENQVV9JU19IUF9NQzY4SyAoY3B1KSkKKwkgICAgcHV0cyAoIm02OGstaGl0YWNoaS1oaXV4d2UyIik7CisJICBlbHNlIHB1dHMgKCJ1bmtub3duLWhpdGFjaGktaGl1eHdlMiIpOworCSAgZXhpdCAoMCk7CisJfQorRU9GCisJJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYgU1lTVEVNX05BTUU9YCRkdW1teWAgJiYKKwkJeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CisJZWNobyB1bmtub3duLWhpdGFjaGktaGl1eHdlMgorCWV4aXQgOzsKKyAgICA5MDAwLzc/Pzo0LjNic2Q6KjoqIHwgOTAwMC84P1s3OV06NC4zYnNkOio6KiApCisJZWNobyBocHBhMS4xLWhwLWJzZAorCWV4aXQgOzsKKyAgICA5MDAwLzg/Pzo0LjNic2Q6KjoqKQorCWVjaG8gaHBwYTEuMC1ocC1ic2QKKwlleGl0IDs7CisgICAgKjk/Pyo6TVBFL2lYOio6KiB8ICozMDAwKjpNUEUvaVg6KjoqKQorCWVjaG8gaHBwYTEuMC1ocC1tcGVpeAorCWV4aXQgOzsKKyAgICBocDc/PzpPU0YxOio6KiB8IGhwOD9bNzldOk9TRjE6KjoqICkKKwllY2hvIGhwcGExLjEtaHAtb3NmCisJZXhpdCA7OworICAgIGhwOD8/Ok9TRjE6KjoqKQorCWVjaG8gaHBwYTEuMC1ocC1vc2YKKwlleGl0IDs7CisgICAgaSo4NjpPU0YxOio6KikKKwlpZiBbIC14IC91c3Ivc2Jpbi9zeXN2ZXJzaW9uIF0gOyB0aGVuCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW9zZjFtaworCWVsc2UKKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tb3NmMQorCWZpCisJZXhpdCA7OworICAgIHBhcmlzYyo6TGl0ZXMqOio6KikKKwllY2hvIGhwcGExLjEtaHAtbGl0ZXMKKwlleGl0IDs7CisgICAgQzEqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMSo6KikKKwllY2hvIGMxLWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgQzIqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMio6KikKKwlpZiBnZXRzeXNpbmZvIC1mIHNjYWxhcl9hY2MKKwl0aGVuIGVjaG8gYzMyLWNvbnZleC1ic2QKKwllbHNlIGVjaG8gYzItY29udmV4LWJzZAorCWZpCisJZXhpdCA7OworICAgIEMzNCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMzNCo6KikKKwllY2hvIGMzNC1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIEMzOCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMzOCo6KikKKwllY2hvIGMzOC1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIEM0KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzQqOiopCisJZWNobyBjNC1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIENSQVkqWS1NUDoqOio6KikKKwllY2hvIHltcC1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKltBLVpdOTA6KjoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSBcCisJfCBzZWQgLWUgJ3MvQ1JBWS4qXChbQS1aXTkwXCkvXDEvJyBcCisJICAgICAgLWUgeS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8gXAorCSAgICAgIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpUUzoqOio6KikKKwllY2hvIHQ5MC1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKlQzRToqOio6KikKKwllY2hvIGFscGhhZXY1LWNyYXktdW5pY29zbWske1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpTVjE6KjoqOiopCisJZWNobyBzdjEtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgKjpVTklDT1MvbXA6KjoqKQorCWVjaG8gY3JheW52LWNyYXktdW5pY29zbXAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgRjMwWzAxXTpVTklYX1N5c3RlbV9WOio6KiB8IEY3MDA6VU5JWF9TeXN0ZW1fVjoqOiopCisJRlVKSVRTVV9QUk9DPWB1bmFtZSAtbSB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2AKKwlGVUpJVFNVX1NZUz1gdW5hbWUgLXAgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvXC8vLydgCisJRlVKSVRTVV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy8gL18vJ2AKKwllY2hvICIke0ZVSklUU1VfUFJPQ30tZnVqaXRzdS0ke0ZVSklUU1VfU1lTfSR7RlVKSVRTVV9SRUx9IgorCWV4aXQgOzsKKyAgICA1MDAwOlVOSVhfU3lzdGVtX1Y6NC4qOiopCisJRlVKSVRTVV9TWVM9YHVuYW1lIC1wIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzL1wvLy8nYAorCUZVSklUU1VfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvIC9fLydgCisJZWNobyAic3BhcmMtZnVqaXRzdS0ke0ZVSklUU1VfU1lTfSR7RlVKSVRTVV9SRUx9IgorCWV4aXQgOzsKKyAgICBpKjg2OkJTRC8zODY6KjoqIHwgaSo4NjpCU0QvT1M6KjoqIHwgKjpBc2NlbmRcIEVtYmVkZGVkL09TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtYnNkaSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgc3BhcmMqOkJTRC9PUzoqOiopCisJZWNobyBzcGFyYy11bmtub3duLWJzZGkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6QlNEL09TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1ic2RpJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkZyZWVCU0Q6KjoqKQorCWNhc2UgJHtVTkFNRV9NQUNISU5FfSBpbgorCSAgICBwYzk4KQorCQllY2hvIGkzODYtdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYCA7OworCSAgICBhbWQ2NCkKKwkJZWNobyB4ODZfNjQtdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYCA7OworCSAgICAqKQorCQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYCA7OworCWVzYWMKKwlleGl0IDs7CisgICAgaSo6Q1lHV0lOKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1jeWd3aW4KKwlleGl0IDs7CisgICAgKjpNSU5HVyo6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluZ3czMgorCWV4aXQgOzsKKyAgICBpKjp3aW5kb3dzMzIqOiopCisJIyB1bmFtZSAtbSBpbmNsdWRlcyAiLXBjIiBvbiB0aGlzIHN5c3RlbS4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tbWluZ3czMgorCWV4aXQgOzsKKyAgICBpKjpQVyo6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtcHczMgorCWV4aXQgOzsKKyAgICAqOkludGVyaXgqOiopCisJY2FzZSAke1VOQU1FX01BQ0hJTkV9IGluCisJICAgIHg4NikKKwkJZWNobyBpNTg2LXBjLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CisJCWV4aXQgOzsKKwkgICAgYXV0aGVudGljYW1kIHwgZ2VudWluZWludGVsIHwgRU02NFQpCisJCWVjaG8geDg2XzY0LXVua25vd24taW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KKwkJZXhpdCA7OworCSAgICBJQTY0KQorCQllY2hvIGlhNjQtdW5rbm93bi1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorCQlleGl0IDs7CisJZXNhYyA7OworICAgIFszNDVdODY6V2luZG93c185NToqIHwgWzM0NV04NjpXaW5kb3dzXzk4OiogfCBbMzQ1XTg2OldpbmRvd3NfTlQ6KikKKwllY2hvIGkke1VOQU1FX01BQ0hJTkV9LXBjLW1rcworCWV4aXQgOzsKKyAgICA4NjY0OldpbmRvd3NfTlQ6KikKKwllY2hvIHg4Nl82NC1wYy1ta3MKKwlleGl0IDs7CisgICAgaSo6V2luZG93c19OVCo6KiB8IFBlbnRpdW0qOldpbmRvd3NfTlQqOiopCisJIyBIb3cgZG8gd2Uga25vdyBpdCdzIEludGVyaXggcmF0aGVyIHRoYW4gdGhlIGdlbmVyaWMgUE9TSVggc3Vic3lzdGVtPworCSMgSXQgYWxzbyBjb25mbGljdHMgd2l0aCBwcmUtMi4wIHZlcnNpb25zIG9mIEFUJlQgVVdJTi4gU2hvdWxkIHdlCisJIyBVTkFNRV9NQUNISU5FIGJhc2VkIG9uIHRoZSBvdXRwdXQgb2YgdW5hbWUgaW5zdGVhZCBvZiBpMzg2PworCWVjaG8gaTU4Ni1wYy1pbnRlcml4CisJZXhpdCA7OworICAgIGkqOlVXSU4qOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXV3aW4KKwlleGl0IDs7CisgICAgYW1kNjQ6Q1lHV0lOKjoqOiogfCB4ODZfNjQ6Q1lHV0lOKjoqOiopCisJZWNobyB4ODZfNjQtdW5rbm93bi1jeWd3aW4KKwlleGl0IDs7CisgICAgcCo6Q1lHV0lOKjoqKQorCWVjaG8gcG93ZXJwY2xlLXVua25vd24tY3lnd2luCisJZXhpdCA7OworICAgIHByZXAqOlN1bk9TOjUuKjoqKQorCWVjaG8gcG93ZXJwY2xlLXVua25vd24tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgKjpHTlU6KjoqKQorCSMgdGhlIEdOVSBzeXN0ZW0KKwllY2hvIGBlY2hvICR7VU5BTUVfTUFDSElORX18c2VkIC1lICdzLFstL10uKiQsLCdgLXVua25vd24tZ251YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MsLy4qJCwsJ2AKKwlleGl0IDs7CisgICAgKjpHTlUvKjoqOiopCisJIyBvdGhlciBzeXN0ZW1zIHdpdGggR05VIGxpYmMgYW5kIHVzZXJsYW5kCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYGVjaG8gJHtVTkFNRV9TWVNURU19IHwgc2VkICdzLF5bXi9dKi8sLCcgfCB0ciAnW0EtWl0nICdbYS16XSdgYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYC1nbnUKKwlleGl0IDs7CisgICAgaSo4NjpNaW5peDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbml4CisJZXhpdCA7OworICAgIGFscGhhOkxpbnV4Oio6KikKKwljYXNlIGBzZWQgLW4gJy9eY3B1IG1vZGVsL3MvXi4qOiBcKC4qXCkvXDEvcCcgPCAvcHJvYy9jcHVpbmZvYCBpbgorCSAgRVY1KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjUgOzsKKwkgIEVWNTYpICBVTkFNRV9NQUNISU5FPWFscGhhZXY1NiA7OworCSAgUENBNTYpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworCSAgUENBNTcpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworCSAgRVY2KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjYgOzsKKwkgIEVWNjcpICBVTkFNRV9NQUNISU5FPWFscGhhZXY2NyA7OworCSAgRVY2OCopIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7CisJZXNhYworCW9iamR1bXAgLS1wcml2YXRlLWhlYWRlcnMgL2Jpbi9zaCB8IGdyZXAgLXEgbGQuc28uMQorCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuIExJQkM9ImdudWxpYmMxIiA7IGZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBhcm0qOkxpbnV4Oio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJaWYgZWNobyBfX0FSTV9FQUJJX18gfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAorCSAgICB8IGdyZXAgLXEgX19BUk1fRUFCSV9fCisJdGhlbgorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZWxzZQorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnVlYWJpCisJZmkKKwlleGl0IDs7CisgICAgYXZyMzIqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGNyaXM6TGludXg6KjoqKQorCWVjaG8gY3Jpcy1heGlzLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgY3Jpc3YzMjpMaW51eDoqOiopCisJZWNobyBjcmlzdjMyLWF4aXMtbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBmcnY6TGludXg6KjoqKQorCWVjaG8gZnJ2LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBpKjg2OkxpbnV4Oio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkjaWZkZWYgX19kaWV0bGliY19fCisJTElCQz1kaWV0bGliYworCSNlbmRpZgorRU9GCisJZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15MSUJDJ2AKKwllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LSR7TElCQ30iCisJZXhpdCA7OworICAgIGlhNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgbTMycio6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgbTY4KjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBtaXBzOkxpbnV4Oio6KiB8IG1pcHM2NDpMaW51eDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI3VuZGVmIENQVQorCSN1bmRlZiAke1VOQU1FX01BQ0hJTkV9CisJI3VuZGVmICR7VU5BTUVfTUFDSElORX1lbAorCSNpZiBkZWZpbmVkKF9fTUlQU0VMX18pIHx8IGRlZmluZWQoX19NSVBTRUwpIHx8IGRlZmluZWQoX01JUFNFTCkgfHwgZGVmaW5lZChNSVBTRUwpCisJQ1BVPSR7VU5BTUVfTUFDSElORX1lbAorCSNlbHNlCisJI2lmIGRlZmluZWQoX19NSVBTRUJfXykgfHwgZGVmaW5lZChfX01JUFNFQikgfHwgZGVmaW5lZChfTUlQU0VCKSB8fCBkZWZpbmVkKE1JUFNFQikKKwlDUFU9JHtVTkFNRV9NQUNISU5FfQorCSNlbHNlCisJQ1BVPQorCSNlbmRpZgorCSNlbmRpZgorRU9GCisJZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15DUFUnYAorCXRlc3QgeCIke0NQVX0iICE9IHggJiYgeyBlY2hvICIke0NQVX0tdW5rbm93bi1saW51eC0ke0xJQkN9IjsgZXhpdDsgfQorCTs7CisgICAgb3IzMjpMaW51eDoqOiopCisJZWNobyBvcjMyLXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBwYWRyZTpMaW51eDoqOiopCisJZWNobyBzcGFyYy11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBwYXJpc2M2NDpMaW51eDoqOiogfCBocHBhNjQ6TGludXg6KjoqKQorCWVjaG8gaHBwYTY0LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHBhcmlzYzpMaW51eDoqOiogfCBocHBhOkxpbnV4Oio6KikKKwkjIExvb2sgZm9yIENQVSBsZXZlbAorCWNhc2UgYGdyZXAgJ15jcHVbXmEtel0qOicgL3Byb2MvY3B1aW5mbyAyPi9kZXYvbnVsbCB8IGN1dCAtZCcgJyAtZjJgIGluCisJICBQQTcqKSBlY2hvIGhwcGExLjEtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7CisJICBQQTgqKSBlY2hvIGhwcGEyLjAtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7CisJICAqKSAgICBlY2hvIGhwcGEtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7CisJZXNhYworCWV4aXQgOzsKKyAgICBwcGM2NDpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjNjQtdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHBwYzpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBzMzkwOkxpbnV4Oio6KiB8IHMzOTB4OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLWxpbnV4CisJZXhpdCA7OworICAgIHNoNjQqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHNoKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBzcGFyYzpMaW51eDoqOiogfCBzcGFyYzY0OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHRpbGUqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdGlsZXJhLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICB2YXg6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICB4ODZfNjQ6TGludXg6KjoqKQorCWVjaG8geDg2XzY0LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICB4dGVuc2EqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGkqODY6RFlOSVgvcHR4OjQqOiopCisJIyBwdHggNC4wIGRvZXMgdW5hbWUgLXMgY29ycmVjdGx5LCB3aXRoIERZTklYL3B0eCBpbiB0aGVyZS4KKwkjIGVhcmxpZXIgdmVyc2lvbnMgYXJlIG1lc3NlZCB1cCBhbmQgcHV0IHRoZSBub2RlbmFtZSBpbiBib3RoCisJIyBzeXNuYW1lIGFuZCBub2RlbmFtZS4KKwllY2hvIGkzODYtc2VxdWVudC1zeXN2NAorCWV4aXQgOzsKKyAgICBpKjg2OlVOSVhfU1Y6NC4yTVA6Mi4qKQorCSMgVW5peHdhcmUgaXMgYW4gb2Zmc2hvb3Qgb2YgU1ZSNCwgYnV0IGl0IGhhcyBpdHMgb3duIHZlcnNpb24KKwkjIG51bWJlciBzZXJpZXMgc3RhcnRpbmcgd2l0aCAyLi4uCisJIyBJIGFtIG5vdCBwb3NpdGl2ZSB0aGF0IG90aGVyIFNWUjQgc3lzdGVtcyB3b24ndCBtYXRjaCB0aGlzLAorCSMgSSBqdXN0IGhhdmUgdG8gaG9wZS4gIC0tIHJtcy4KKwkjIFVzZSBzeXN2NC4ydXcuLi4gc28gdGhhdCBzeXN2NCogbWF0Y2hlcyBpdC4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdjQuMnV3JHtVTkFNRV9WRVJTSU9OfQorCWV4aXQgOzsKKyAgICBpKjg2Ok9TLzI6KjoqKQorCSMgSWYgd2Ugd2VyZSBhYmxlIHRvIGZpbmQgYHVuYW1lJywgdGhlbiBFTVggVW5peCBjb21wYXRpYmlsaXR5CisJIyBpcyBwcm9iYWJseSBpbnN0YWxsZWQuCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW9zMi1lbXgKKwlleGl0IDs7CisgICAgaSo4NjpYVFMtMzAwOio6U1RPUCkKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zdG9wCisJZXhpdCA7OworICAgIGkqODY6YXRoZW9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1hdGhlb3MKKwlleGl0IDs7CisgICAgaSo4NjpzeWxsYWJsZToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5bGxhYmxlCisJZXhpdCA7OworICAgIGkqODY6THlueE9TOjIuKjoqIHwgaSo4NjpMeW54T1M6My5bMDFdKjoqIHwgaSo4NjpMeW54T1M6NC5bMDJdKjoqKQorCWVjaG8gaTM4Ni11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgaSo4NjoqRE9TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbXNkb3NkamdwcAorCWV4aXQgOzsKKyAgICBpKjg2Oio6NC4qOiogfCBpKjg2OlNZU1RFTV9WOjQuKjoqKQorCVVOQU1FX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkICdzL1wvTVAkLy8nYAorCWlmIGdyZXAgTm92ZWxsIC91c3IvaW5jbHVkZS9saW5rLmggPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorCQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5pdmVsLXN5c3Yke1VOQU1FX1JFTH0KKwllbHNlCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2JHtVTkFNRV9SRUx9CisJZmkKKwlleGl0IDs7CisgICAgaSo4NjoqOjU6WzY3OF0qKQorCSMgVW5peFdhcmUgNy54LCBPcGVuVU5JWCBhbmQgT3BlblNlcnZlciA2LgorCWNhc2UgYC9iaW4vdW5hbWUgLVggfCBncmVwICJeTWFjaGluZSJgIGluCisJICAgICo0ODYqKQkgICAgIFVOQU1FX01BQ0hJTkU9aTQ4NiA7OworCSAgICAqUGVudGl1bSkJICAgICBVTkFNRV9NQUNISU5FPWk1ODYgOzsKKwkgICAgKlBlbnQqfCpDZWxlcm9uKSBVTkFNRV9NQUNISU5FPWk2ODYgOzsKKwllc2FjCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0ke1VOQU1FX1NZU1RFTX0ke1VOQU1FX1ZFUlNJT059CisJZXhpdCA7OworICAgIGkqODY6KjozLjI6KikKKwlpZiB0ZXN0IC1mIC91c3Ivb3B0aW9ucy9jYi5uYW1lOyB0aGVuCisJCVVOQU1FX1JFTD1gc2VkIC1uICdzLy4qVmVyc2lvbiAvL3AnIDwvdXNyL29wdGlvbnMvY2IubmFtZWAKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWlzYyRVTkFNRV9SRUwKKwllbGlmIC9iaW4vdW5hbWUgLVggMj4vZGV2L251bGwgPi9kZXYvbnVsbCA7IHRoZW4KKwkJVU5BTUVfUkVMPWAoL2Jpbi91bmFtZSAtWHxncmVwIFJlbGVhc2V8c2VkIC1lICdzLy4qPSAvLycpYAorCQkoL2Jpbi91bmFtZSAtWHxncmVwIGk4MDQ4NiA+L2Rldi9udWxsKSAmJiBVTkFNRV9NQUNISU5FPWk0ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0nID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTU4NgorCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVudCAqSUknID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTY4NgorCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVudGl1bSBQcm8nID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTY4NgorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc2NvJFVOQU1FX1JFTAorCWVsc2UKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3YzMgorCWZpCisJZXhpdCA7OworICAgIHBjOio6KjoqKQorCSMgTGVmdCBoZXJlIGZvciBjb21wYXRpYmlsaXR5OgorCSMgdW5hbWUgLW0gcHJpbnRzIGZvciBESkdQUCBhbHdheXMgJ3BjJywgYnV0IGl0IHByaW50cyBub3RoaW5nIGFib3V0CisJIyB0aGUgcHJvY2Vzc29yLCBzbyB3ZSBwbGF5IHNhZmUgYnkgYXNzdW1pbmcgaTU4Ni4KKwkjIE5vdGU6IHdoYXRldmVyIHRoaXMgaXMsIGl0IE1VU1QgYmUgdGhlIHNhbWUgYXMgd2hhdCBjb25maWcuc3ViCisJIyBwcmludHMgZm9yIHRoZSAiZGpncHAiIGhvc3QsIG9yIGVsc2UgR0RCIGNvbmZpZ3VyeSB3aWxsIGRlY2lkZSB0aGF0CisJIyB0aGlzIGlzIGEgY3Jvc3MtYnVpbGQuCisJZWNobyBpNTg2LXBjLW1zZG9zZGpncHAKKwlleGl0IDs7CisgICAgSW50ZWw6TWFjaDozKjoqKQorCWVjaG8gaTM4Ni1wYy1tYWNoMworCWV4aXQgOzsKKyAgICBwYXJhZ29uOio6KjoqKQorCWVjaG8gaTg2MC1pbnRlbC1vc2YxCisJZXhpdCA7OworICAgIGk4NjA6Kjo0Lio6KikgIyBpODYwLVNWUjQKKwlpZiBncmVwIFN0YXJkZW50IC91c3IvaW5jbHVkZS9zeXMvdWFkbWluLmggPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCSAgZWNobyBpODYwLXN0YXJkZW50LXN5c3Yke1VOQU1FX1JFTEVBU0V9ICMgU3RhcmRlbnQgVmlzdHJhIGk4NjAtU1ZSNAorCWVsc2UgIyBBZGQgb3RoZXIgaTg2MC1TVlI0IHZlbmRvcnMgYmVsb3cgYXMgdGhleSBhcmUgZGlzY292ZXJlZC4KKwkgIGVjaG8gaTg2MC11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9ICAjIFVua25vd24gaTg2MC1TVlI0CisJZmkKKwlleGl0IDs7CisgICAgbWluaSo6Q1RJWDpTWVMqNToqKQorCSMgIm1pbmlmcmFtZSIKKwllY2hvIG02ODAxMC1jb252ZXJnZW50LXN5c3YKKwlleGl0IDs7CisgICAgbWM2OGs6VU5JWDpTWVNURU01OjMuNTFtKQorCWVjaG8gbTY4ay1jb252ZXJnZW50LXN5c3YKKwlleGl0IDs7CisgICAgTTY4MD8wOkQtTklYOjUuMzoqKQorCWVjaG8gbTY4ay1kaWFiLWRuaXgKKwlleGl0IDs7CisgICAgTTY4KjoqOlIzVls1Njc4XSo6KikKKwl0ZXN0IC1yIC9zeXNWNjggJiYgeyBlY2hvICdtNjhrLW1vdG9yb2xhLXN5c3YnOyBleGl0OyB9IDs7CisgICAgM1szNDVdPz86Kjo0LjA6My4wIHwgM1szNF0/P0E6Kjo0LjA6My4wIHwgM1szNF0/PywqOio6NC4wOjMuMCB8IDNbMzRdPz8vKjoqOjQuMDozLjAgfCA0NDAwOio6NC4wOjMuMCB8IDQ4NTA6Kjo0LjA6My4wIHwgU0tBNDA6Kjo0LjA6My4wIHwgU0RTMjoqOjQuMDozLjAgfCBTSEcyOio6NC4wOjMuMCB8IFM3NTAxKjoqOjQuMDozLjApCisJT1NfUkVMPScnCisJdGVzdCAtciAvZXRjLy5yZWxpZCBcCisJJiYgT1NfUkVMPS5gc2VkIC1uICdzL1teIF0qIFteIF0qIFwoWzAtOV1bMC05XVwpLiovXDEvcCcgPCAvZXRjLy5yZWxpZGAKKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKwkgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBlbnRpdW0gPi9kZXYvbnVsbCBcCisJICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfSA7OworICAgIDNbMzRdPz86Kjo0LjA6KiB8IDNbMzRdPz8sKjoqOjQuMDoqKQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAorCSAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0OyBleGl0OyB9IDs7CisgICAgTkNSKjoqOjQuMjoqIHwgTVBSQVMqOio6NC4yOiopCisJT1NfUkVMPScuMycKKwl0ZXN0IC1yIC9ldGMvLnJlbGlkIFwKKwkgICAgJiYgT1NfUkVMPS5gc2VkIC1uICdzL1teIF0qIFteIF0qIFwoWzAtOV1bMC05XVwpLiovXDEvcCcgPCAvZXRjLy5yZWxpZGAKKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKwkgICAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0KKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIGVudGl1bSA+L2Rldi9udWxsIFwKKwkgICAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0KKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIHB0ZXJvbiA+L2Rldi9udWxsIFwKKwkgICAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0gOzsKKyAgICBtNjgqOkx5bnhPUzoyLio6KiB8IG02OCo6THlueE9TOjMuMCo6KikKKwllY2hvIG02OGstdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1jNjgwMzA6VU5JWF9TeXN0ZW1fVjo0Lio6KikKKwllY2hvIG02OGstYXRhcmktc3lzdjQKKwlleGl0IDs7CisgICAgVFNVTkFNSTpMeW54T1M6Mi4qOiopCisJZWNobyBzcGFyYy11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgcnM2MDAwOkx5bnhPUzoyLio6KikKKwllY2hvIHJzNjAwMC11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUG93ZXJQQzpMeW54T1M6Mi4qOiogfCBQb3dlclBDOkx5bnhPUzozLlswMV0qOiogfCBQb3dlclBDOkx5bnhPUzo0LlswMl0qOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTTVtCRV1TOlVOSVhfU1Y6KjoqKQorCWVjaG8gbWlwcy1kZGUtc3lzdiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUk0qOlJlbGlhbnRVTklYLSo6KjoqKQorCWVjaG8gbWlwcy1zbmktc3lzdjQKKwlleGl0IDs7CisgICAgUk0qOlNJTklYLSo6KjoqKQorCWVjaG8gbWlwcy1zbmktc3lzdjQKKwlleGl0IDs7CisgICAgKjpTSU5JWC0qOio6KikKKwlpZiB1bmFtZSAtcCAyPi9kZXYvbnVsbCA+L2Rldi9udWxsIDsgdGhlbgorCQlVTkFNRV9NQUNISU5FPWAodW5hbWUgLXApIDI+L2Rldi9udWxsYAorCQllY2hvICR7VU5BTUVfTUFDSElORX0tc25pLXN5c3Y0CisJZWxzZQorCQllY2hvIG5zMzJrLXNuaS1zeXN2CisJZmkKKwlleGl0IDs7CisgICAgUEVOVElVTToqOjQuMCo6KikJIyBVbmlzeXMgYENsZWFyUGF0aCBITVAgSVggNDAwMCcgU1ZSNC9NUCBlZmZvcnQKKwkJCSMgc2F5cyA8UmljaGFyZC5NLkJhcnRlbEBjY01haWwuQ2Vuc3VzLkdPVj4KKwllY2hvIGk1ODYtdW5pc3lzLXN5c3Y0CisJZXhpdCA7OworICAgICo6VU5JWF9TeXN0ZW1fVjo0KjpGVFgqKQorCSMgRnJvbSBHZXJhbGQgSGV3ZXMgPGhld2VzQG9wZW5tYXJrZXQuY29tPi4KKwkjIEhvdyBhYm91dCBkaWZmZXJlbnRpYXRpbmcgYmV0d2VlbiBzdHJhdHVzIGFyY2hpdGVjdHVyZXM/IC1kam0KKwllY2hvIGhwcGExLjEtc3RyYXR1cy1zeXN2NAorCWV4aXQgOzsKKyAgICAqOio6KjpGVFgqKQorCSMgRnJvbSBzZWFuZkBzd2RjLnN0cmF0dXMuY29tLgorCWVjaG8gaTg2MC1zdHJhdHVzLXN5c3Y0CisJZXhpdCA7OworICAgIGkqODY6Vk9TOio6KikKKwkjIEZyb20gUGF1bC5HcmVlbkBzdHJhdHVzLmNvbS4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tc3RyYXR1cy12b3MKKwlleGl0IDs7CisgICAgKjpWT1M6KjoqKQorCSMgRnJvbSBQYXVsLkdyZWVuQHN0cmF0dXMuY29tLgorCWVjaG8gaHBwYTEuMS1zdHJhdHVzLXZvcworCWV4aXQgOzsKKyAgICBtYzY4KjpBL1VYOio6KikKKwllY2hvIG02OGstYXBwbGUtYXV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBuZXdzKjpORVdTLU9TOjYqOiopCisJZWNobyBtaXBzLXNvbnktbmV3c29zNgorCWV4aXQgOzsKKyAgICBSWzM0XTAwMDoqU3lzdGVtX1YqOio6KiB8IFI0MDAwOlVOSVhfU1lTVjoqOiogfCBSKjAwMDpVTklYX1NWOio6KikKKwlpZiBbIC1kIC91c3IvbmVjIF07IHRoZW4KKwkJZWNobyBtaXBzLW5lYy1zeXN2JHtVTkFNRV9SRUxFQVNFfQorCWVsc2UKKwkJZWNobyBtaXBzLXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0KKwlmaQorCWV4aXQgOzsKKyAgICBCZUJveDpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gaGFyZHdhcmUgbWFkZSBieSBCZSwgUFBDIG9ubHkuCisJZWNobyBwb3dlcnBjLWJlLWJlb3MKKwlleGl0IDs7CisgICAgQmVNYWM6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIE1hYyBvciBNYWMgY2xvbmUsIFBQQyBvbmx5LgorCWVjaG8gcG93ZXJwYy1hcHBsZS1iZW9zCisJZXhpdCA7OworICAgIEJlUEM6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIEludGVsIFBDIGNvbXBhdGlibGUuCisJZWNobyBpNTg2LXBjLWJlb3MKKwlleGl0IDs7CisgICAgQmVQQzpIYWlrdToqOiopCSMgSGFpa3UgcnVubmluZyBvbiBJbnRlbCBQQyBjb21wYXRpYmxlLgorCWVjaG8gaTU4Ni1wYy1oYWlrdQorCWV4aXQgOzsKKyAgICBTWC00OlNVUEVSLVVYOio6KikKKwllY2hvIHN4NC1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtNTpTVVBFUi1VWDoqOiopCisJZWNobyBzeDUtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTY6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g2LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC03OlNVUEVSLVVYOio6KikKKwllY2hvIHN4Ny1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtODpTVVBFUi1VWDoqOiopCisJZWNobyBzeDgtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLThSOlNVUEVSLVVYOio6KikKKwllY2hvIHN4OHItbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFBvd2VyKjpSaGFwc29keToqOiopCisJZWNobyBwb3dlcnBjLWFwcGxlLXJoYXBzb2R5JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlJoYXBzb2R5Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tYXBwbGUtcmhhcHNvZHkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6RGFyd2luOio6KikKKwlVTkFNRV9QUk9DRVNTT1I9YHVuYW1lIC1wYCB8fCBVTkFNRV9QUk9DRVNTT1I9dW5rbm93bgorCWNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgorCSAgICBpMzg2KQorCQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCWlmIFsgIiRDQ19GT1JfQlVJTEQiICE9ICdub19jb21waWxlcl9mb3VuZCcgXTsgdGhlbgorCQkgIGlmIChlY2hvICcjaWZkZWYgX19MUDY0X18nOyBlY2hvIElTXzY0QklUX0FSQ0g7IGVjaG8gJyNlbmRpZicpIHwgXAorCQkgICAgICAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwgXAorCQkgICAgICBncmVwIElTXzY0QklUX0FSQ0ggPi9kZXYvbnVsbAorCQkgIHRoZW4KKwkJICAgICAgVU5BTUVfUFJPQ0VTU09SPSJ4ODZfNjQiCisJCSAgZmkKKwkJZmkgOzsKKwkgICAgdW5rbm93bikgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGMgOzsKKwllc2FjCisJZWNobyAke1VOQU1FX1BST0NFU1NPUn0tYXBwbGUtZGFyd2luJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOnByb2NudG8qOio6KiB8ICo6UU5YOlswMTIzNDU2Nzg5XSo6KikKKwlVTkFNRV9QUk9DRVNTT1I9YHVuYW1lIC1wYAorCWlmIHRlc3QgIiRVTkFNRV9QUk9DRVNTT1IiID0gIng4NiI7IHRoZW4KKwkJVU5BTUVfUFJPQ0VTU09SPWkzODYKKwkJVU5BTUVfTUFDSElORT1wYworCWZpCisJZWNobyAke1VOQU1FX1BST0NFU1NPUn0tJHtVTkFNRV9NQUNISU5FfS1udG8tcW54JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlFOWDoqOjQqKQorCWVjaG8gaTM4Ni1wYy1xbngKKwlleGl0IDs7CisgICAgTkVPLT86Tk9OU1RPUF9LRVJORUw6KjoqKQorCWVjaG8gbmVvLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIE5TRS0/Ok5PTlNUT1BfS0VSTkVMOio6KikKKwllY2hvIG5zZS10YW5kZW0tbnNrJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBOU1ItPzpOT05TVE9QX0tFUk5FTDoqOiopCisJZWNobyBuc3ItdGFuZGVtLW5zayR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpOb25TdG9wLVVYOio6KikKKwllY2hvIG1pcHMtY29tcGFxLW5vbnN0b3B1eAorCWV4aXQgOzsKKyAgICBCUzIwMDA6UE9TSVgqOio6KikKKwllY2hvIGJzMjAwMC1zaWVtZW5zLXN5c3YKKwlleGl0IDs7CisgICAgRFMvKjpVTklYX1N5c3RlbV9WOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tJHtVTkFNRV9TWVNURU19LSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpQbGFuOToqOiopCisJIyAidW5hbWUgLW0iIGlzIG5vdCBjb25zaXN0ZW50LCBzbyB1c2UgJGNwdXR5cGUgaW5zdGVhZC4gMzg2CisJIyBpcyBjb252ZXJ0ZWQgdG8gaTM4NiBmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlciB4ODYKKwkjIG9wZXJhdGluZyBzeXN0ZW1zLgorCWlmIHRlc3QgIiRjcHV0eXBlIiA9ICIzODYiOyB0aGVuCisJICAgIFVOQU1FX01BQ0hJTkU9aTM4NgorCWVsc2UKKwkgICAgVU5BTUVfTUFDSElORT0iJGNwdXR5cGUiCisJZmkKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1wbGFuOQorCWV4aXQgOzsKKyAgICAqOlRPUFMtMTA6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi10b3BzMTAKKwlleGl0IDs7CisgICAgKjpURU5FWDoqOiopCisJZWNobyBwZHAxMC11bmtub3duLXRlbmV4CisJZXhpdCA7OworICAgIEtTMTA6VE9QUy0yMDoqOiogfCBLTDEwOlRPUFMtMjA6KjoqIHwgVFlQRTQ6VE9QUy0yMDoqOiopCisJZWNobyBwZHAxMC1kZWMtdG9wczIwCisJZXhpdCA7OworICAgIFhLTC0xOlRPUFMtMjA6KjoqIHwgVFlQRTU6VE9QUy0yMDoqOiopCisJZWNobyBwZHAxMC14a2wtdG9wczIwCisJZXhpdCA7OworICAgICo6VE9QUy0yMDoqOiopCisJZWNobyBwZHAxMC11bmtub3duLXRvcHMyMAorCWV4aXQgOzsKKyAgICAqOklUUzoqOiopCisJZWNobyBwZHAxMC11bmtub3duLWl0cworCWV4aXQgOzsKKyAgICBTRUk6KjoqOlNFSVVYKQorCWVjaG8gbWlwcy1zZWktc2VpdXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6RHJhZ29uRmx5Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1kcmFnb25mbHlgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgCisJZXhpdCA7OworICAgICo6KlZNUzoqOiopCisJVU5BTUVfTUFDSElORT1gKHVuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKwljYXNlICIke1VOQU1FX01BQ0hJTkV9IiBpbgorCSAgICBBKikgZWNobyBhbHBoYS1kZWMtdm1zIDsgZXhpdCA7OworCSAgICBJKikgZWNobyBpYTY0LWRlYy12bXMgOyBleGl0IDs7CisJICAgIFYqKSBlY2hvIHZheC1kZWMtdm1zIDsgZXhpdCA7OworCWVzYWMgOzsKKyAgICAqOlhFTklYOio6U3lzVikKKwllY2hvIGkzODYtcGMteGVuaXgKKwlleGl0IDs7CisgICAgaSo4Njpza3lvczoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXNreW9zYGVjaG8gJHtVTkFNRV9SRUxFQVNFfWAgfCBzZWQgLWUgJ3MvIC4qJC8vJworCWV4aXQgOzsKKyAgICBpKjg2OnJkb3M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1yZG9zCisJZXhpdCA7OworICAgIGkqODY6QVJPUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWFyb3MKKwlleGl0IDs7Citlc2FjCisKKyNlY2hvICcoTm8gdW5hbWUgY29tbWFuZCBvciB1bmFtZSBvdXRwdXQgbm90IHJlY29nbml6ZWQuKScgMT4mMgorI2VjaG8gIiR7VU5BTUVfTUFDSElORX06JHtVTkFNRV9TWVNURU19OiR7VU5BTUVfUkVMRUFTRX06JHtVTkFNRV9WRVJTSU9OfSIgMT4mMgorCitldmFsICRzZXRfY2NfZm9yX2J1aWxkCitjYXQgPiRkdW1teS5jIDw8RU9GCisjaWZkZWYgX1NFUVVFTlRfCisjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorIyBpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2VuZGlmCittYWluICgpCit7CisjaWYgZGVmaW5lZCAoc29ueSkKKyNpZiBkZWZpbmVkIChNSVBTRUIpCisgIC8qIEJGRCB3YW50cyAiYnNkIiBpbnN0ZWFkIG9mICJuZXdzb3MiLiAgUGVyaGFwcyBCRkQgc2hvdWxkIGJlIGNoYW5nZWQsCisgICAgIEkgZG9uJ3Qga25vdy4uLi4gICovCisgIHByaW50ZiAoIm1pcHMtc29ueS1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbHNlCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisgIHByaW50ZiAoIm02OGstc29ueS1uZXdzb3Mlc1xuIiwKKyNpZmRlZiBORVdTT1M0CisJIjQiCisjZWxzZQorCSIiCisjZW5kaWYKKwkpOyBleGl0ICgwKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfX2FybSkgJiYgZGVmaW5lZCAoX19hY29ybikgJiYgZGVmaW5lZCAoX191bml4KQorICBwcmludGYgKCJhcm0tYWNvcm4tcmlzY2l4XG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKGhwMzAwKSAmJiAhZGVmaW5lZCAoaHB1eCkKKyAgcHJpbnRmICgibTY4ay1ocC1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoTmVYVCkKKyNpZiAhZGVmaW5lZCAoX19BUkNISVRFQ1RVUkVfXykKKyNkZWZpbmUgX19BUkNISVRFQ1RVUkVfXyAibTY4ayIKKyNlbmRpZgorICBpbnQgdmVyc2lvbjsKKyAgdmVyc2lvbj1gKGhvc3RpbmZvIHwgc2VkIC1uICdzLy4qTmVYVCBNYWNoIFwoWzAtOV0qXCkuKi9cMS9wJykgMj4vZGV2L251bGxgOworICBpZiAodmVyc2lvbiA8IDQpCisgICAgcHJpbnRmICgiJXMtbmV4dC1uZXh0c3RlcCVkXG4iLCBfX0FSQ0hJVEVDVFVSRV9fLCB2ZXJzaW9uKTsKKyAgZWxzZQorICAgIHByaW50ZiAoIiVzLW5leHQtb3BlbnN0ZXAlZFxuIiwgX19BUkNISVRFQ1RVUkVfXywgdmVyc2lvbik7CisgIGV4aXQgKDApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChNVUxUSU1BWCkgfHwgZGVmaW5lZCAobjE2KQorI2lmIGRlZmluZWQgKFVNQVhWKQorICBwcmludGYgKCJuczMyay1lbmNvcmUtc3lzdlxuIik7IGV4aXQgKDApOworI2Vsc2UKKyNpZiBkZWZpbmVkIChDTVUpCisgIHByaW50ZiAoIm5zMzJrLWVuY29yZS1tYWNoXG4iKTsgZXhpdCAoMCk7CisjZWxzZQorICBwcmludGYgKCJuczMyay1lbmNvcmUtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfXzM4NkJTRF9fKQorICBwcmludGYgKCJpMzg2LXBjLWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChzZXF1ZW50KQorI2lmIGRlZmluZWQgKGkzODYpCisgIHByaW50ZiAoImkzODYtc2VxdWVudC1keW5peFxuIik7IGV4aXQgKDApOworI2VuZGlmCisjaWYgZGVmaW5lZCAobnMzMjAwMCkKKyAgcHJpbnRmICgibnMzMmstc2VxdWVudC1keW5peFxuIik7IGV4aXQgKDApOworI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9TRVFVRU5UXykKKyAgICBzdHJ1Y3QgdXRzbmFtZSB1bjsKKworICAgIHVuYW1lKCZ1bik7CisKKyAgICBpZiAoc3RybmNtcCh1bi52ZXJzaW9uLCAiVjIiLCAyKSA9PSAwKSB7CisJcHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0eDJcbiIpOyBleGl0ICgwKTsKKyAgICB9CisgICAgaWYgKHN0cm5jbXAodW4udmVyc2lvbiwgIlYxIiwgMikgPT0gMCkgeyAvKiBYWFggaXMgVjEgY29ycmVjdD8gKi8KKwlwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4MVxuIik7IGV4aXQgKDApOworICAgIH0KKyAgICBwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4XG4iKTsgZXhpdCAoMCk7CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAodmF4KQorIyBpZiAhZGVmaW5lZCAodWx0cml4KQorIyAgaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjICBpZiBkZWZpbmVkIChCU0QpCisjICAgaWYgQlNEID09IDQzCisgICAgICBwcmludGYgKCJ2YXgtZGVjLWJzZDQuM1xuIik7IGV4aXQgKDApOworIyAgIGVsc2UKKyMgICAgaWYgQlNEID09IDE5OTAwNgorICAgICAgcHJpbnRmICgidmF4LWRlYy1ic2Q0LjNyZW5vXG4iKTsgZXhpdCAoMCk7CisjICAgIGVsc2UKKyAgICAgIHByaW50ZiAoInZheC1kZWMtYnNkXG4iKTsgZXhpdCAoMCk7CisjICAgIGVuZGlmCisjICAgZW5kaWYKKyMgIGVsc2UKKyAgICBwcmludGYgKCJ2YXgtZGVjLWJzZFxuIik7IGV4aXQgKDApOworIyAgZW5kaWYKKyMgZWxzZQorICAgIHByaW50ZiAoInZheC1kZWMtdWx0cml4XG4iKTsgZXhpdCAoMCk7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKGFsbGlhbnQpICYmIGRlZmluZWQgKGk4NjApCisgIHByaW50ZiAoImk4NjAtYWxsaWFudC1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorCisgIGV4aXQgKDEpOworfQorRU9GCisKKyRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jIDI+L2Rldi9udWxsICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgICYmCisJeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CisKKyMgQXBvbGxvcyBwdXQgdGhlIHN5c3RlbSB0eXBlIGluIHRoZSBlbnZpcm9ubWVudC4KKwordGVzdCAtZCAvdXNyL2Fwb2xsbyAmJiB7IGVjaG8gJHtJU1B9LWFwb2xsby0ke1NZU1RZUEV9OyBleGl0OyB9CisKKyMgQ29udmV4IHZlcnNpb25zIHRoYXQgcHJlZGF0ZSB1bmFtZSBjYW4gdXNlIGdldHN5c2luZm8oMSkKKworaWYgWyAteCAvdXNyL2NvbnZleC9nZXRzeXNpbmZvIF0KK3RoZW4KKyAgICBjYXNlIGBnZXRzeXNpbmZvIC1mIGNwdV90eXBlYCBpbgorICAgIGMxKikKKwllY2hvIGMxLWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgYzIqKQorCWlmIGdldHN5c2luZm8gLWYgc2NhbGFyX2FjYworCXRoZW4gZWNobyBjMzItY29udmV4LWJzZAorCWVsc2UgZWNobyBjMi1jb252ZXgtYnNkCisJZmkKKwlleGl0IDs7CisgICAgYzM0KikKKwllY2hvIGMzNC1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIGMzOCopCisJZWNobyBjMzgtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBjNCopCisJZWNobyBjNC1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIGVzYWMKK2ZpCisKK2NhdCA+JjIgPDxFT0YKKyQwOiB1bmFibGUgdG8gZ3Vlc3Mgc3lzdGVtIHR5cGUKKworVGhpcyBzY3JpcHQsIGxhc3QgbW9kaWZpZWQgJHRpbWVzdGFtcCwgaGFzIGZhaWxlZCB0byByZWNvZ25pemUKK3RoZSBvcGVyYXRpbmcgc3lzdGVtIHlvdSBhcmUgdXNpbmcuIEl0IGlzIGFkdmlzZWQgdGhhdCB5b3UKK2Rvd25sb2FkIHRoZSBtb3N0IHVwIHRvIGRhdGUgdmVyc2lvbiBvZiB0aGUgY29uZmlnIHNjcmlwdHMgZnJvbQorCisgIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuZ3Vlc3M7aGI9SEVBRAorYW5kCisgIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuc3ViO2hiPUhFQUQKKworSWYgdGhlIHZlcnNpb24geW91IHJ1biAoJDApIGlzIGFscmVhZHkgdXAgdG8gZGF0ZSwgcGxlYXNlCitzZW5kIHRoZSBmb2xsb3dpbmcgZGF0YSBhbmQgYW55IGluZm9ybWF0aW9uIHlvdSB0aGluayBtaWdodCBiZQorcGVydGluZW50IHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPiBpbiBvcmRlciB0byBwcm92aWRlIHRoZSBuZWVkZWQKK2luZm9ybWF0aW9uIHRvIGhhbmRsZSB5b3VyIHN5c3RlbS4KKworY29uZmlnLmd1ZXNzIHRpbWVzdGFtcCA9ICR0aW1lc3RhbXAKKwordW5hbWUgLW0gPSBgKHVuYW1lIC1tKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtciA9IGAodW5hbWUgLXIpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1zID0gYCh1bmFtZSAtcykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXYgPSBgKHVuYW1lIC12KSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisKKy91c3IvYmluL3VuYW1lIC1wID0gYCgvdXNyL2Jpbi91bmFtZSAtcCkgMj4vZGV2L251bGxgCisvYmluL3VuYW1lIC1YICAgICA9IGAoL2Jpbi91bmFtZSAtWCkgMj4vZGV2L251bGxgCisKK2hvc3RpbmZvICAgICAgICAgICAgICAgPSBgKGhvc3RpbmZvKSAyPi9kZXYvbnVsbGAKKy9iaW4vdW5pdmVyc2UgICAgICAgICAgPSBgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsYAorL3Vzci9iaW4vYXJjaCAtayAgICAgICA9IGAoL3Vzci9iaW4vYXJjaCAtaykgMj4vZGV2L251bGxgCisvYmluL2FyY2ggICAgICAgICAgICAgID0gYCgvYmluL2FyY2gpIDI+L2Rldi9udWxsYAorL3Vzci9iaW4vb3NsZXZlbCAgICAgICA9IGAoL3Vzci9iaW4vb3NsZXZlbCkgMj4vZGV2L251bGxgCisvdXNyL2NvbnZleC9nZXRzeXNpbmZvID0gYCgvdXNyL2NvbnZleC9nZXRzeXNpbmZvKSAyPi9kZXYvbnVsbGAKKworVU5BTUVfTUFDSElORSA9ICR7VU5BTUVfTUFDSElORX0KK1VOQU1FX1JFTEVBU0UgPSAke1VOQU1FX1JFTEVBU0V9CitVTkFNRV9TWVNURU0gID0gJHtVTkFNRV9TWVNURU19CitVTkFNRV9WRVJTSU9OID0gJHtVTkFNRV9WRVJTSU9OfQorRU9GCisKK2V4aXQgMQorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAidGltZXN0YW1wPSciCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZCIKKyMgdGltZS1zdGFtcC1lbmQ6ICInIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvY29uZmlnLnN1YiBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9jb25maWcuc3ViCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhhZDE2N2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvY29uZmlnLnN1YgpAQCAtMCwwICsxLDE3NTcgQEAKKyMhIC9iaW4vc2gKKyMgQ29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIHN1YnJvdXRpbmUgc2NyaXB0LgorIyAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKyMgICAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLAorIyAgIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK3RpbWVzdGFtcD0nMjAxMS0wMi0yNCcKKworIyBUaGlzIGZpbGUgaXMgKGluIHByaW5jaXBsZSkgY29tbW9uIHRvIEFMTCBHTlUgc29mdHdhcmUuCisjIFRoZSBwcmVzZW5jZSBvZiBhIG1hY2hpbmUgaW4gdGhpcyBmaWxlIHN1Z2dlc3RzIHRoYXQgU09NRSBHTlUgc29mdHdhcmUKKyMgY2FuIGhhbmRsZSB0aGF0IG1hY2hpbmUuICBJdCBkb2VzIG5vdCBpbXBseSBBTEwgR05VIHNvZnR3YXJlIGNhbi4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyMgMDIxMTAtMTMwMSwgVVNBLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKworIyBQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4gIFN1Ym1pdCBhIGNvbnRleHQKKyMgZGlmZiBhbmQgYSBwcm9wZXJseSBmb3JtYXR0ZWQgR05VIENoYW5nZUxvZyBlbnRyeS4KKyMKKyMgQ29uZmlndXJhdGlvbiBzdWJyb3V0aW5lIHRvIHZhbGlkYXRlIGFuZCBjYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIHR5cGUuCisjIFN1cHBseSB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gdHlwZSBhcyBhbiBhcmd1bWVudC4KKyMgSWYgaXQgaXMgaW52YWxpZCwgd2UgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBvbiBzdGRlcnIgYW5kIGV4aXQgd2l0aCBjb2RlIDEuCisjIE90aGVyd2lzZSwgd2UgcHJpbnQgdGhlIGNhbm9uaWNhbCBjb25maWcgdHlwZSBvbiBzdGRvdXQgYW5kIHN1Y2NlZWQuCisKKyMgWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGZyb206CisjIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuc3ViO2hiPUhFQUQKKworIyBUaGlzIGZpbGUgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIHNhbWUgZm9yIGFsbCBHTlUgcGFja2FnZXMKKyMgYW5kIHJlY29nbml6ZSBhbGwgdGhlIENQVSB0eXBlcywgc3lzdGVtIHR5cGVzIGFuZCBhbGlhc2VzCisjIHRoYXQgYXJlIG1lYW5pbmdmdWwgd2l0aCAqYW55KiBHTlUgc29mdHdhcmUuCisjIEVhY2ggcGFja2FnZSBpcyByZXNwb25zaWJsZSBmb3IgcmVwb3J0aW5nIHdoaWNoIHZhbGlkIGNvbmZpZ3VyYXRpb25zCisjIGl0IGRvZXMgbm90IHN1cHBvcnQuICBUaGUgdXNlciBzaG91bGQgYmUgYWJsZSB0byBkaXN0aW5ndWlzaAorIyBhIGZhaWx1cmUgdG8gc3VwcG9ydCBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gZnJvbSBhIG1lYW5pbmdsZXNzCisjIGNvbmZpZ3VyYXRpb24uCisKKyMgVGhlIGdvYWwgb2YgdGhpcyBmaWxlIGlzIHRvIG1hcCBhbGwgdGhlIHZhcmlvdXMgdmFyaWF0aW9ucyBvZiBhIGdpdmVuCisjIG1hY2hpbmUgc3BlY2lmaWNhdGlvbiBpbnRvIGEgc2luZ2xlIHNwZWNpZmljYXRpb24gaW4gdGhlIGZvcm06CisjCUNQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNCisjIG9yIGluIHNvbWUgY2FzZXMsIHRoZSBuZXdlciBmb3VyLXBhcnQgZm9ybToKKyMJQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNCisjIEl0IGlzIHdyb25nIHRvIGVjaG8gYW55IG90aGVyIHR5cGUgb2Ygc3BlY2lmaWNhdGlvbi4KKworbWU9YGVjaG8gIiQwIiB8IHNlZCAtZSAncywuKi8sLCdgCisKK3VzYWdlPSJcCitVc2FnZTogJDAgW09QVElPTl0gQ1BVLU1GUi1PUFNZUworICAgICAgICQwIFtPUFRJT05dIEFMSUFTCisKK0Nhbm9uaWNhbGl6ZSBhIGNvbmZpZ3VyYXRpb24gbmFtZS4KKworT3BlcmF0aW9uIG1vZGVzOgorICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAorICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorCitSZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgorCit2ZXJzaW9uPSJcCitHTlUgY29uZmlnLnN1YiAoJHRpbWVzdGFtcCkKKworQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCisKK2hlbHA9IgorVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorCisjIFBhcnNlIGNvbW1hbmQgbGluZQord2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQorICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OworICAgIC0tdmVyc2lvbiB8IC12ICkKKyAgICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7CisgICAgLS0gKSAgICAgIyBTdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICAgc2hpZnQ7IGJyZWFrIDs7CisgICAgLSApCSMgVXNlIHN0ZGluIGFzIGlucHV0LgorICAgICAgIGJyZWFrIDs7CisgICAgLSogKQorICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIKKyAgICAgICBleGl0IDEgOzsKKworICAgICpsb2NhbCopCisgICAgICAgIyBGaXJzdCBwYXNzIHRocm91Z2ggYW55IGxvY2FsIG1hY2hpbmUgdHlwZXMuCisgICAgICAgZWNobyAkMQorICAgICAgIGV4aXQgOzsKKworICAgICogKQorICAgICAgIGJyZWFrIDs7CisgIGVzYWMKK2RvbmUKKworY2FzZSAkIyBpbgorIDApIGVjaG8gIiRtZTogbWlzc2luZyBhcmd1bWVudCRoZWxwIiA+JjIKKyAgICBleGl0IDE7OworIDEpIDs7CisgKikgZWNobyAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCisgICAgZXhpdCAxOzsKK2VzYWMKKworIyBTZXBhcmF0ZSB3aGF0IHRoZSB1c2VyIGdhdmUgaW50byBDUFUtQ09NUEFOWSBhbmQgT1Mgb3IgS0VSTkVMLU9TIChpZiBhbnkpLgorIyBIZXJlIHdlIG11c3QgcmVjb2duaXplIGFsbCB0aGUgdmFsaWQgS0VSTkVMLU9TIGNvbWJpbmF0aW9ucy4KK21heWJlX29zPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMi8nYAorY2FzZSAkbWF5YmVfb3MgaW4KKyAgbnRvLXFueCogfCBsaW51eC1nbnUqIHwgbGludXgtYW5kcm9pZCogfCBsaW51eC1kaWV0bGliYyB8IGxpbnV4LW5ld2xpYiogfCBcCisgIGxpbnV4LXVjbGliYyogfCB1Y2xpbnV4LXVjbGliYyogfCB1Y2xpbnV4LWdudSogfCBrZnJlZWJzZCotZ251KiB8IFwKKyAga25ldGJzZCotZ251KiB8IG5ldGJzZCotZ251KiB8IFwKKyAga29wZW5zb2xhcmlzKi1nbnUqIHwgXAorICBzdG9ybS1jaGFvcyogfCBvczItZW14KiB8IHJ0bWstbm92YSopCisgICAgb3M9LSRtYXliZV9vcworICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wxLydgCisgICAgOzsKKyAgKikKKyAgICBiYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkICdzLy1bXi1dKiQvLydgCisgICAgaWYgWyAkYmFzaWNfbWFjaGluZSAhPSAkMSBdCisgICAgdGhlbiBvcz1gZWNobyAkMSB8IHNlZCAncy8uKi0vLS8nYAorICAgIGVsc2Ugb3M9OyBmaQorICAgIDs7Citlc2FjCisKKyMjIyBMZXQncyByZWNvZ25pemUgY29tbW9uIG1hY2hpbmVzIGFzIG5vdCBiZWluZyBvcGVyYXRpbmcgc3lzdGVtcyBzbworIyMjIHRoYXQgdGhpbmdzIGxpa2UgY29uZmlnLnN1YiBkZWNzdGF0aW9uLTMxMDAgd29yay4gIFdlIGFsc28KKyMjIyByZWNvZ25pemUgc29tZSBtYW51ZmFjdHVyZXJzIGFzIG5vdCBiZWluZyBvcGVyYXRpbmcgc3lzdGVtcywgc28gd2UKKyMjIyBjYW4gcHJvdmlkZSBkZWZhdWx0IG9wZXJhdGluZyBzeXN0ZW1zIGJlbG93LgorY2FzZSAkb3MgaW4KKwktc3VuKm9zKikKKwkJIyBQcmV2ZW50IGZvbGxvd2luZyBjbGF1c2UgZnJvbSBoYW5kbGluZyB0aGlzIGludmFsaWQgaW5wdXQuCisJCTs7CisJLWRlYyogfCAtbWlwcyogfCAtc2VxdWVudCogfCAtZW5jb3JlKiB8IC1wYzUzMiogfCAtc2dpKiB8IC1zb255KiB8IFwKKwktYXR0KiB8IC03MzAwKiB8IC0zMzAwKiB8IC1kZWx0YSogfCAtbW90b3JvbGEqIHwgLXN1blsyMzRdKiB8IFwKKwktdW5pY29tKiB8IC1pYm0qIHwgLW5leHQgfCAtaHAgfCAtaXNpKiB8IC1hcG9sbG8gfCAtYWx0b3MqIHwgXAorCS1jb252ZXJnZW50KiB8IC1uY3IqIHwgLW5ld3MgfCAtMzIqIHwgLTM2MDAqIHwgLTMxMDAqIHwgLWhpdGFjaGkqIHxcCisJLWNbMTIzXSogfCAtY29udmV4KiB8IC1zdW4gfCAtY3JkcyB8IC1vbXJvbiogfCAtZGcgfCAtdWx0cmEgfCAtdHRpKiB8IFwKKwktaGFycmlzIHwgLWRvbHBoaW4gfCAtaGlnaGxldmVsIHwgLWdvdWxkIHwgLWNibSB8IC1ucyB8IC1tYXNzY29tcCB8IFwKKwktYXBwbGUgfCAtYXhpcyB8IC1rbnV0aCB8IC1jcmF5IHwgLW1pY3JvYmxhemUpCisJCW9zPQorCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLWJsdWVnZW5lKikKKwkJb3M9LWNuaworCQk7OworCS1zaW0gfCAtY2lzY28gfCAtb2tpIHwgLXdlYyB8IC13aW5ib25kKQorCQlvcz0KKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1zY291dCkKKwkJOzsKKwktd3JzKQorCQlvcz0tdnh3b3JrcworCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLWNob3J1c29zKikKKwkJb3M9LWNob3J1c29zCisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktY2hvcnVzcmRiKQorCQlvcz0tY2hvcnVzcmRiCisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktaGl1eCopCisJCW9zPS1oaXV4d2UyCisJCTs7CisJLXNjbzYpCisJCW9zPS1zY281djYKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY281KQorCQlvcz0tc2NvMy4ydjUKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY280KQorCQlvcz0tc2NvMy4ydjQKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY28zLjIuWzQtOV0qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3Mvc2NvMy4yLi9zY28zLjJ2LydgCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvMy4ydls0LTldKikKKwkJIyBEb24ndCBmb3JnZXQgdmVyc2lvbiBpZiBpdCBpcyAzLjJ2NCBvciBuZXdlci4KKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY281djYqKQorCQkjIERvbid0IGZvcmdldCB2ZXJzaW9uIGlmIGl0IGlzIDMuMnY0IG9yIG5ld2VyLgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbyopCisJCW9zPS1zY28zLjJ2MgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXVkayopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktaXNjKQorCQlvcz0taXNjMi4yCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktY2xpeCopCisJCWJhc2ljX21hY2hpbmU9Y2xpcHBlci1pbnRlcmdyYXBoCisJCTs7CisJLWlzYyopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktbHlueCopCisJCW9zPS1seW54b3MKKwkJOzsKKwktcHR4KikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1zZXF1ZW50LydgCisJCTs7CisJLXdpbmRvd3NudCopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAncy93aW5kb3dzbnQvd2lubnQvJ2AKKwkJOzsKKwktcHNvcyopCisJCW9zPS1wc29zCisJCTs7CisJLW1pbnQgfCAtbWludFswLTldKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWF0YXJpCisJCW9zPS1taW50CisJCTs7Citlc2FjCisKKyMgRGVjb2RlIGFsaWFzZXMgZm9yIGNlcnRhaW4gQ1BVLUNPTVBBTlkgY29tYmluYXRpb25zLgorY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aG91dCBjb21wYW55IG5hbWUuCisJIyBTb21lIGFyZSBvbWl0dGVkIGhlcmUgYmVjYXVzZSB0aGV5IGhhdmUgc3BlY2lhbCBtZWFuaW5ncyBiZWxvdy4KKwkxNzUwYSB8IDU4MCBcCisJfCBhMjlrIFwKKwl8IGFscGhhIHwgYWxwaGFldls0LThdIHwgYWxwaGFldjU2IHwgYWxwaGFldjZbNzhdIHwgYWxwaGFwY2E1WzY3XSBcCisJfCBhbHBoYTY0IHwgYWxwaGE2NGV2WzQtOF0gfCBhbHBoYTY0ZXY1NiB8IGFscGhhNjRldjZbNzhdIHwgYWxwaGE2NHBjYTVbNjddIFwKKwl8IGFtMzNfMi4wIFwKKwl8IGFyYyB8IGFybSB8IGFybVtibF1lIHwgYXJtZVtsYl0gfCBhcm12WzIzNDVdIHwgYXJtdlszNDVdW2xiXSB8IGF2ciB8IGF2cjMyIFwKKwl8IGJmaW4gXAorCXwgYzR4IHwgY2xpcHBlciBcCisJfCBkMTB2IHwgZDMwdiB8IGRseCB8IGRzcDE2eHggfCBkdnAgXAorCXwgZmlkbyB8IGZyMzAgfCBmcnYgXAorCXwgaDgzMDAgfCBoODUwMCB8IGhwcGEgfCBocHBhMS5bMDFdIHwgaHBwYTIuMCB8IGhwcGEyLjBbbnddIHwgaHBwYTY0IFwKKwl8IGkzNzAgfCBpODYwIHwgaTk2MCB8IGlhNjQgXAorCXwgaXAyayB8IGlxMjAwMCBcCisJfCBsbTMyIFwKKwl8IG0zMmMgfCBtMzJyIHwgbTMycmxlIHwgbTY4MDAwIHwgbTY4ayB8IG04OGsgXAorCXwgbWF4cSB8IG1iIHwgbWljcm9ibGF6ZSB8IG1jb3JlIHwgbWVwIHwgbWV0YWcgXAorCXwgbWlwcyB8IG1pcHNiZSB8IG1pcHNlYiB8IG1pcHNlbCB8IG1pcHNsZSBcCisJfCBtaXBzMTYgXAorCXwgbWlwczY0IHwgbWlwczY0ZWwgXAorCXwgbWlwczY0b2N0ZW9uIHwgbWlwczY0b2N0ZW9uZWwgXAorCXwgbWlwczY0b3Jpb24gfCBtaXBzNjRvcmlvbmVsIFwKKwl8IG1pcHM2NHI1OTAwIHwgbWlwczY0cjU5MDBlbCBcCisJfCBtaXBzNjR2ciB8IG1pcHM2NHZyZWwgXAorCXwgbWlwczY0dnI0MTAwIHwgbWlwczY0dnI0MTAwZWwgXAorCXwgbWlwczY0dnI0MzAwIHwgbWlwczY0dnI0MzAwZWwgXAorCXwgbWlwczY0dnI1MDAwIHwgbWlwczY0dnI1MDAwZWwgXAorCXwgbWlwczY0dnI1OTAwIHwgbWlwczY0dnI1OTAwZWwgXAorCXwgbWlwc2lzYTMyIHwgbWlwc2lzYTMyZWwgXAorCXwgbWlwc2lzYTMycjIgfCBtaXBzaXNhMzJyMmVsIFwKKwl8IG1pcHNpc2E2NCB8IG1pcHNpc2E2NGVsIFwKKwl8IG1pcHNpc2E2NHIyIHwgbWlwc2lzYTY0cjJlbCBcCisJfCBtaXBzaXNhNjRzYjEgfCBtaXBzaXNhNjRzYjFlbCBcCisJfCBtaXBzaXNhNjRzcjcxayB8IG1pcHNpc2E2NHNyNzFrZWwgXAorCXwgbWlwc3R4MzkgfCBtaXBzdHgzOWVsIFwKKwl8IG1uMTAyMDAgfCBtbjEwMzAwIFwKKwl8IG1veGllIFwKKwl8IG10IFwKKwl8IG1zcDQzMCBcCisJfCBuZHMzMiB8IG5kczMybGUgfCBuZHMzMmJlIFwKKwl8IG5pb3MgfCBuaW9zMiBcCisJfCBuczE2ayB8IG5zMzJrIFwKKwl8IG9yMzIgXAorCXwgcGRwMTAgfCBwZHAxMSB8IHBqIHwgcGpsIFwKKwl8IHBvd2VycGMgfCBwb3dlcnBjNjQgfCBwb3dlcnBjNjRsZSB8IHBvd2VycGNsZSB8IHBwY2JlIFwKKwl8IHB5cmFtaWQgXAorCXwgcnggXAorCXwgc2NvcmUgXAorCXwgc2ggfCBzaFsxMjM0XSB8IHNoWzI0XWEgfCBzaFsyNF1hZWIgfCBzaFsyM11lIHwgc2hbMzRdZWIgfCBzaGViIHwgc2hiZSB8IHNobGUgfCBzaFsxMjM0XWxlIHwgc2gzZWxlIFwKKwl8IHNoNjQgfCBzaDY0bGUgXAorCXwgc3BhcmMgfCBzcGFyYzY0IHwgc3BhcmM2NGIgfCBzcGFyYzY0diB8IHNwYXJjODZ4IHwgc3BhcmNsZXQgfCBzcGFyY2xpdGUgXAorCXwgc3BhcmN2OCB8IHNwYXJjdjkgfCBzcGFyY3Y5YiB8IHNwYXJjdjl2IFwKKwl8IHNwdSB8IHN0cm9uZ2FybSBcCisJfCB0YWhvZSB8IHRodW1iIHwgdGljNHggfCB0aWM1NHggfCB0aWM1NXggfCB0aWM2eCB8IHRpYzgwIHwgdHJvbiBcCisJfCB1Ymljb20zMiBcCisJfCB2ODUwIHwgdjg1MGUgXAorCXwgd2UzMmsgXAorCXwgeDg2IHwgeGMxNnggfCB4c2NhbGUgfCB4c2NhbGVlW2JsXSB8IHhzdG9ybXkxNiB8IHh0ZW5zYSBcCisJfCB6OGsgfCB6ODApCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQk7OworCWM1NHgpCisJCWJhc2ljX21hY2hpbmU9dGljNTR4LXVua25vd24KKwkJOzsKKwljNTV4KQorCQliYXNpY19tYWNoaW5lPXRpYzU1eC11bmtub3duCisJCTs7CisJYzZ4KQorCQliYXNpY19tYWNoaW5lPXRpYzZ4LXVua25vd24KKwkJOzsKKwltNjgxMSB8IG02OGhjMTEgfCBtNjgxMiB8IG02OGhjMTIgfCBwaWNvY2hpcCkKKwkJIyBNb3Rvcm9sYSA2OEhDMTEvMTIuCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQlvcz0tbm9uZQorCQk7OworCW04ODExMCB8IG02ODBbMTIzNDZdMCB8IG02ODM/MiB8IG02ODM2MCB8IG01MjAwIHwgdjcwIHwgdzY1IHwgejhrKQorCQk7OworCW1zMSkKKwkJYmFzaWNfbWFjaGluZT1tdC11bmtub3duCisJCTs7CisKKwkjIFdlIHVzZSBgcGMnIHJhdGhlciB0aGFuIGB1bmtub3duJworCSMgYmVjYXVzZSAoMSkgdGhhdCdzIHdoYXQgdGhleSBub3JtYWxseSBhcmUsIGFuZAorCSMgKDIpIHRoZSB3b3JkICJ1bmtub3duIiB0ZW5kcyB0byBjb25mdXNlIGJlZ2lubmluZyB1c2Vycy4KKwlpKjg2IHwgeDg2XzY0KQorCSAgYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS1wYworCSAgOzsKKwkjIE9iamVjdCBpZiBtb3JlIHRoYW4gb25lIGNvbXBhbnkgbmFtZSB3b3JkLgorCSotKi0qKQorCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxXCc6IG1hY2hpbmUgXGAkYmFzaWNfbWFjaGluZVwnIG5vdCByZWNvZ25pemVkIDE+JjIKKwkJZXhpdCAxCisJCTs7CisJIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRoIGNvbXBhbnkgbmFtZS4KKwk1ODAtKiBcCisJfCBhMjlrLSogXAorCXwgYWxwaGEtKiB8IGFscGhhZXZbNC04XS0qIHwgYWxwaGFldjU2LSogfCBhbHBoYWV2Nls3OF0tKiBcCisJfCBhbHBoYTY0LSogfCBhbHBoYTY0ZXZbNC04XS0qIHwgYWxwaGE2NGV2NTYtKiB8IGFscGhhNjRldjZbNzhdLSogXAorCXwgYWxwaGFwY2E1WzY3XS0qIHwgYWxwaGE2NHBjYTVbNjddLSogfCBhcmMtKiBcCisJfCBhcm0tKiAgfCBhcm1iZS0qIHwgYXJtbGUtKiB8IGFybWViLSogfCBhcm12Ki0qIFwKKwl8IGF2ci0qIHwgYXZyMzItKiBcCisJfCBiZmluLSogfCBiczIwMDAtKiBcCisJfCBjWzEyM10qIHwgYzMwLSogfCBbY2p0XTkwLSogfCBjNHgtKiBcCisJfCBjbGlwcGVyLSogfCBjcmF5bnYtKiB8IGN5ZHJhLSogXAorCXwgZDEwdi0qIHwgZDMwdi0qIHwgZGx4LSogXAorCXwgZWx4c2ktKiBcCisJfCBmMzBbMDFdLSogfCBmNzAwLSogfCBmaWRvLSogfCBmcjMwLSogfCBmcnYtKiB8IGZ4ODAtKiBcCisJfCBoODMwMC0qIHwgaDg1MDAtKiBcCisJfCBocHBhLSogfCBocHBhMS5bMDFdLSogfCBocHBhMi4wLSogfCBocHBhMi4wW253XS0qIHwgaHBwYTY0LSogXAorCXwgaSo4Ni0qIHwgaTg2MC0qIHwgaTk2MC0qIHwgaWE2NC0qIFwKKwl8IGlwMmstKiB8IGlxMjAwMC0qIFwKKwl8IGxtMzItKiBcCisJfCBtMzJjLSogfCBtMzJyLSogfCBtMzJybGUtKiBcCisJfCBtNjgwMDAtKiB8IG02ODBbMDEyMzQ2XTAtKiB8IG02ODM2MC0qIHwgbTY4Mz8yLSogfCBtNjhrLSogXAorCXwgbTg4MTEwLSogfCBtODhrLSogfCBtYXhxLSogfCBtY29yZS0qIHwgbWV0YWctKiB8IG1pY3JvYmxhemUtKiBcCisJfCBtaXBzLSogfCBtaXBzYmUtKiB8IG1pcHNlYi0qIHwgbWlwc2VsLSogfCBtaXBzbGUtKiBcCisJfCBtaXBzMTYtKiBcCisJfCBtaXBzNjQtKiB8IG1pcHM2NGVsLSogXAorCXwgbWlwczY0b2N0ZW9uLSogfCBtaXBzNjRvY3Rlb25lbC0qIFwKKwl8IG1pcHM2NG9yaW9uLSogfCBtaXBzNjRvcmlvbmVsLSogXAorCXwgbWlwczY0cjU5MDAtKiB8IG1pcHM2NHI1OTAwZWwtKiBcCisJfCBtaXBzNjR2ci0qIHwgbWlwczY0dnJlbC0qIFwKKwl8IG1pcHM2NHZyNDEwMC0qIHwgbWlwczY0dnI0MTAwZWwtKiBcCisJfCBtaXBzNjR2cjQzMDAtKiB8IG1pcHM2NHZyNDMwMGVsLSogXAorCXwgbWlwczY0dnI1MDAwLSogfCBtaXBzNjR2cjUwMDBlbC0qIFwKKwl8IG1pcHM2NHZyNTkwMC0qIHwgbWlwczY0dnI1OTAwZWwtKiBcCisJfCBtaXBzaXNhMzItKiB8IG1pcHNpc2EzMmVsLSogXAorCXwgbWlwc2lzYTMycjItKiB8IG1pcHNpc2EzMnIyZWwtKiBcCisJfCBtaXBzaXNhNjQtKiB8IG1pcHNpc2E2NGVsLSogXAorCXwgbWlwc2lzYTY0cjItKiB8IG1pcHNpc2E2NHIyZWwtKiBcCisJfCBtaXBzaXNhNjRzYjEtKiB8IG1pcHNpc2E2NHNiMWVsLSogXAorCXwgbWlwc2lzYTY0c3I3MWstKiB8IG1pcHNpc2E2NHNyNzFrZWwtKiBcCisJfCBtaXBzdHgzOS0qIHwgbWlwc3R4MzllbC0qIFwKKwl8IG1taXgtKiBcCisJfCBtdC0qIFwKKwl8IG1zcDQzMC0qIFwKKwl8IG5kczMyLSogfCBuZHMzMmxlLSogfCBuZHMzMmJlLSogXAorCXwgbmlvcy0qIHwgbmlvczItKiBcCisJfCBub25lLSogfCBucDEtKiB8IG5zMTZrLSogfCBuczMyay0qIFwKKwl8IG9yaW9uLSogXAorCXwgcGRwMTAtKiB8IHBkcDExLSogfCBwai0qIHwgcGpsLSogfCBwbi0qIHwgcG93ZXItKiBcCisJfCBwb3dlcnBjLSogfCBwb3dlcnBjNjQtKiB8IHBvd2VycGM2NGxlLSogfCBwb3dlcnBjbGUtKiB8IHBwY2JlLSogXAorCXwgcHlyYW1pZC0qIFwKKwl8IHJvbXAtKiB8IHJzNjAwMC0qIHwgcngtKiBcCisJfCBzaC0qIHwgc2hbMTIzNF0tKiB8IHNoWzI0XWEtKiB8IHNoWzI0XWFlYi0qIHwgc2hbMjNdZS0qIHwgc2hbMzRdZWItKiB8IHNoZWItKiB8IHNoYmUtKiBcCisJfCBzaGxlLSogfCBzaFsxMjM0XWxlLSogfCBzaDNlbGUtKiB8IHNoNjQtKiB8IHNoNjRsZS0qIFwKKwl8IHNwYXJjLSogfCBzcGFyYzY0LSogfCBzcGFyYzY0Yi0qIHwgc3BhcmM2NHYtKiB8IHNwYXJjODZ4LSogfCBzcGFyY2xldC0qIFwKKwl8IHNwYXJjbGl0ZS0qIFwKKwl8IHNwYXJjdjgtKiB8IHNwYXJjdjktKiB8IHNwYXJjdjliLSogfCBzcGFyY3Y5di0qIHwgc3Ryb25nYXJtLSogfCBzdjEtKiB8IHN4Py0qIFwKKwl8IHRhaG9lLSogfCB0aHVtYi0qIFwKKwl8IHRpYzMwLSogfCB0aWM0eC0qIHwgdGljNTR4LSogfCB0aWM1NXgtKiB8IHRpYzZ4LSogfCB0aWM4MC0qIFwKKwl8IHRpbGUtKiB8IHRpbGVneC0qIFwKKwl8IHRyb24tKiBcCisJfCB1Ymljb20zMi0qIFwKKwl8IHY4NTAtKiB8IHY4NTBlLSogfCB2YXgtKiBcCisJfCB3ZTMyay0qIFwKKwl8IHg4Ni0qIHwgeDg2XzY0LSogfCB4YzE2eC0qIHwgeHBzMTAwLSogfCB4c2NhbGUtKiB8IHhzY2FsZWVbYmxdLSogXAorCXwgeHN0b3JteTE2LSogfCB4dGVuc2EqLSogXAorCXwgeW1wLSogXAorCXwgejhrLSogfCB6ODAtKikKKwkJOzsKKwkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGhvdXQgY29tcGFueSBuYW1lLCB3aXRoIGdsb2IgbWF0Y2guCisJeHRlbnNhKikKKwkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisJCTs7CisJIyBSZWNvZ25pemUgdGhlIHZhcmlvdXMgbWFjaGluZSBuYW1lcyBhbmQgYWxpYXNlcyB3aGljaCBzdGFuZAorCSMgZm9yIGEgQ1BVIHR5cGUgYW5kIGEgY29tcGFueSBhbmQgc29tZXRpbWVzIGV2ZW4gYW4gT1MuCisJMzg2YnNkKQorCQliYXNpY19tYWNoaW5lPWkzODYtdW5rbm93bgorCQlvcz0tYnNkCisJCTs7CisJM2IxIHwgNzMwMCB8IDczMDAtYXR0IHwgYXR0LTczMDAgfCBwYzczMDAgfCBzYWZhcmkgfCB1bml4cGMpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWF0dAorCQk7OworCTNiKikKKwkJYmFzaWNfbWFjaGluZT13ZTMyay1hdHQKKwkJOzsKKwlhMjlraGlmKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS11ZGkKKwkJOzsKKwlhYmFjdXMpCisJCWJhc2ljX21hY2hpbmU9YWJhY3VzLXVua25vd24KKwkJOzsKKwlhZG9iZTY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMTAtYWRvYmUKKwkJb3M9LXNjb3V0CisJCTs7CisJYWxsaWFudCB8IGZ4ODApCisJCWJhc2ljX21hY2hpbmU9Zng4MC1hbGxpYW50CisJCTs7CisJYWx0b3MgfCBhbHRvczMwNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hbHRvcworCQk7OworCWFtMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstbm9uZQorCQlvcz0tYnNkCisJCTs7CisJYW1kNjQpCisJCWJhc2ljX21hY2hpbmU9eDg2XzY0LXBjCisJCTs7CisJYW1kNjQtKikKKwkJYmFzaWNfbWFjaGluZT14ODZfNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlhbWRhaGwpCisJCWJhc2ljX21hY2hpbmU9NTgwLWFtZGFobAorCQlvcz0tc3lzdgorCQk7OworCWFtaWdhIHwgYW1pZ2EtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJOzsKKwlhbWlnYW9zIHwgYW1pZ2Fkb3MpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1hbWlnYW9zCisJCTs7CisJYW1pZ2F1bml4IHwgYW1peCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJb3M9LXN5c3Y0CisJCTs7CisJYXBvbGxvNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcG9sbG8KKwkJb3M9LXN5c3YKKwkJOzsKKwlhcG9sbG82OGJzZCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwb2xsbworCQlvcz0tYnNkCisJCTs7CisJYXJvcykKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1hcm9zCisJCTs7CisJYXV4KQorCQliYXNpY19tYWNoaW5lPW02OGstYXBwbGUKKwkJb3M9LWF1eAorCQk7OworCWJhbGFuY2UpCisJCWJhc2ljX21hY2hpbmU9bnMzMmstc2VxdWVudAorCQlvcz0tZHluaXgKKwkJOzsKKwlibGFja2ZpbikKKwkJYmFzaWNfbWFjaGluZT1iZmluLXVua25vd24KKwkJb3M9LWxpbnV4CisJCTs7CisJYmxhY2tmaW4tKikKKwkJYmFzaWNfbWFjaGluZT1iZmluLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCW9zPS1saW51eAorCQk7OworCWJsdWVnZW5lKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWlibQorCQlvcz0tY25rCisJCTs7CisJYzU0eC0qKQorCQliYXNpY19tYWNoaW5lPXRpYzU0eC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCWM1NXgtKikKKwkJYmFzaWNfbWFjaGluZT10aWM1NXgtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwljNngtKikKKwkJYmFzaWNfbWFjaGluZT10aWM2eC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCWM5MCkKKwkJYmFzaWNfbWFjaGluZT1jOTAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJY2VnY2MpCisJCWJhc2ljX21hY2hpbmU9YXJtLXVua25vd24KKwkJb3M9LWNlZ2NjCisJCTs7CisJY29udmV4LWMxKQorCQliYXNpY19tYWNoaW5lPWMxLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMyKQorCQliYXNpY19tYWNoaW5lPWMyLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMzMikKKwkJYmFzaWNfbWFjaGluZT1jMzItY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzM0KQorCQliYXNpY19tYWNoaW5lPWMzNC1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMzgpCisJCWJhc2ljX21hY2hpbmU9YzM4LWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY3JheSB8IGo5MCkKKwkJYmFzaWNfbWFjaGluZT1qOTAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJY3JheW52KQorCQliYXNpY19tYWNoaW5lPWNyYXludi1jcmF5CisJCW9zPS11bmljb3NtcAorCQk7OworCWNyMTYgfCBjcjE2LSopCisJCWJhc2ljX21hY2hpbmU9Y3IxNi11bmtub3duCisJCW9zPS1lbGYKKwkJOzsKKwljcmRzIHwgdW5vcykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWNyZHMKKwkJOzsKKwljcmlzdjMyIHwgY3Jpc3YzMi0qIHwgZXRyYXhmcyopCisJCWJhc2ljX21hY2hpbmU9Y3Jpc3YzMi1heGlzCisJCTs7CisJY3JpcyB8IGNyaXMtKiB8IGV0cmF4KikKKwkJYmFzaWNfbWFjaGluZT1jcmlzLWF4aXMKKwkJOzsKKwljcngpCisJCWJhc2ljX21hY2hpbmU9Y3J4LXVua25vd24KKwkJb3M9LWVsZgorCQk7OworCWRhMzAgfCBkYTMwLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1kYTMwCisJCTs7CisJZGVjc3RhdGlvbiB8IGRlY3N0YXRpb24tMzEwMCB8IHBtYXggfCBwbWF4LSogfCBwbWluIHwgZGVjMzEwMCB8IGRlY3N0YXRuKQorCQliYXNpY19tYWNoaW5lPW1pcHMtZGVjCisJCTs7CisJZGVjc3lzdGVtMTAqIHwgZGVjMTAqKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLWRlYworCQlvcz0tdG9wczEwCisJCTs7CisJZGVjc3lzdGVtMjAqIHwgZGVjMjAqKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLWRlYworCQlvcz0tdG9wczIwCisJCTs7CisJZGVsdGEgfCAzMzAwIHwgbW90b3JvbGEtMzMwMCB8IG1vdG9yb2xhLWRlbHRhIFwKKwkgICAgICB8IDMzMDAtbW90b3JvbGEgfCBkZWx0YS1tb3Rvcm9sYSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW1vdG9yb2xhCisJCTs7CisJZGVsdGE4OCkKKwkJYmFzaWNfbWFjaGluZT1tODhrLW1vdG9yb2xhCisJCW9zPS1zeXN2MworCQk7OworCWRpY29zKQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJb3M9LWRpY29zCisJCTs7CisJZGpncHApCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1wYworCQlvcz0tbXNkb3NkamdwcAorCQk7OworCWRweDIwIHwgZHB4MjAtKikKKwkJYmFzaWNfbWFjaGluZT1yczYwMDAtYnVsbAorCQlvcz0tYm9zeAorCQk7OworCWRweDIqIHwgZHB4MiotYnVsbCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKKwkJb3M9LXN5c3YzCisJCTs7CisJZWJtb24yOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LWVibW9uCisJCTs7CisJZWx4c2kpCisJCWJhc2ljX21hY2hpbmU9ZWx4c2ktZWx4c2kKKwkJb3M9LWJzZAorCQk7OworCWVuY29yZSB8IHVtYXggfCBtbWF4KQorCQliYXNpY19tYWNoaW5lPW5zMzJrLWVuY29yZQorCQk7OworCWVzMTgwMCB8IE9TRTY4ayB8IG9zZTY4ayB8IG9zZSB8IE9TRSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWVyaWNzc29uCisJCW9zPS1vc2UKKwkJOzsKKwlmeDI4MDApCisJCWJhc2ljX21hY2hpbmU9aTg2MC1hbGxpYW50CisJCTs7CisJZ2VuaXgpCisJCWJhc2ljX21hY2hpbmU9bnMzMmstbnMKKwkJOzsKKwlnbWljcm8pCisJCWJhc2ljX21hY2hpbmU9dHJvbi1nbWljcm8KKwkJb3M9LXN5c3YKKwkJOzsKKwlnbzMyKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LWdvMzIKKwkJOzsKKwloMzA1MHIqIHwgaGl1eCopCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1oaXRhY2hpCisJCW9zPS1oaXV4d2UyCisJCTs7CisJaDgzMDBobXMpCisJCWJhc2ljX21hY2hpbmU9aDgzMDAtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJaDgzMDB4cmF5KQorCQliYXNpY19tYWNoaW5lPWg4MzAwLWhpdGFjaGkKKwkJb3M9LXhyYXkKKwkJOzsKKwloODUwMGhtcykKKwkJYmFzaWNfbWFjaGluZT1oODUwMC1oaXRhY2hpCisJCW9zPS1obXMKKwkJOzsKKwloYXJyaXMpCisJCWJhc2ljX21hY2hpbmU9bTg4ay1oYXJyaXMKKwkJb3M9LXN5c3YzCisJCTs7CisJaHAzMDAtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCTs7CisJaHAzMDBic2QpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQlvcz0tYnNkCisJCTs7CisJaHAzMDBocHV4KQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJb3M9LWhwdXgKKwkJOzsKKwlocDNrOVswLTldWzAtOV0gfCBocDlbMC05XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJOzsKKwlocDlrMlswLTldWzAtOV0gfCBocDlrMzFbMC05XSkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtaHAKKwkJOzsKKwlocDlrM1syLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQk7OworCWhwOWs2WzAtOV1bMC05XSB8IGhwNlswLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAorCQk7OworCWhwOWs3WzAtNzldWzAtOV0gfCBocDdbMC03OV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azc4WzAtOV0gfCBocDc4WzAtOV0pCisJCSMgRklYTUU6IHJlYWxseSBocHBhMi4wLWhwCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzY3XTEgfCBocDhbNjddMSB8IGhwOWs4MFsyNF0gfCBocDgwWzI0XSB8IGhwOWs4Wzc4XTkgfCBocDhbNzhdOSB8IGhwOWs4OTMgfCBocDg5MykKKwkJIyBGSVhNRTogcmVhbGx5IGhwcGEyLjAtaHAKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azhbMC05XVsxMzY3OV0gfCBocDhbMC05XVsxMzY3OV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzAtOV1bMC05XSB8IGhwOFswLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAorCQk7OworCWhwcGEtbmV4dCkKKwkJb3M9LW5leHRzdGVwMworCQk7OworCWhwcGFvc2YpCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQlvcz0tb3NmCisJCTs7CisJaHBwcm8pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQlvcz0tcHJvZWxmCisJCTs7CisJaTM3MC1pYm0qIHwgaWJtKikKKwkJYmFzaWNfbWFjaGluZT1pMzcwLWlibQorCQk7OworIyBJJ20gbm90IHN1cmUgd2hhdCAiU3lzdjMyIiBtZWFucy4gIFNob3VsZCB0aGlzIGJlIHN5c3YzLjI/CisJaSo4NnYzMikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zeXN2MzIKKwkJOzsKKwlpKjg2djQqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXN5c3Y0CisJCTs7CisJaSo4NnYpCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc3lzdgorCQk7OworCWkqODZzb2wyKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXNvbGFyaXMyCisJCTs7CisJaTM4Nm1hY2gpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1tYWNoCisJCW9zPS1tYWNoCisJCTs7CisJaTM4Ni12c3RhIHwgdnN0YSkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LXZzdGEKKwkJOzsKKwlpcmlzIHwgaXJpczRkKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2dpCisJCWNhc2UgJG9zIGluCisJCSAgICAtaXJpeCopCisJCQk7OworCQkgICAgKikKKwkJCW9zPS1pcml4NAorCQkJOzsKKwkJZXNhYworCQk7OworCWlzaTY4IHwgaXNpKQorCQliYXNpY19tYWNoaW5lPW02OGstaXNpCisJCW9zPS1zeXN2CisJCTs7CisJbTY4a25vbW11KQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQlvcz0tbGludXgKKwkJOzsKKwltNjhrbm9tbXUtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCW9zPS1saW51eAorCQk7OworCW04OGstb21yb24qKQorCQliYXNpY19tYWNoaW5lPW04OGstb21yb24KKwkJOzsKKwltYWdudW0gfCBtMzIzMCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLW1pcHMKKwkJb3M9LXN5c3YKKwkJOzsKKwltZXJsaW4pCisJCWJhc2ljX21hY2hpbmU9bnMzMmstdXRlaworCQlvcz0tc3lzdgorCQk7OworCW1pY3JvYmxhemUpCisJCWJhc2ljX21hY2hpbmU9bWljcm9ibGF6ZS14aWxpbngKKwkJOzsKKwltaW5ndzMyKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LW1pbmd3MzIKKwkJOzsKKwltaW5ndzMyY2UpCisJCWJhc2ljX21hY2hpbmU9YXJtLXVua25vd24KKwkJb3M9LW1pbmd3MzJjZQorCQk7OworCW1pbmlmcmFtZSkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtY29udmVyZ2VudAorCQk7OworCSptaW50IHwgLW1pbnRbMC05XSogfCAqTWlOVCB8ICpNaU5UWzAtOV0qKQorCQliYXNpY19tYWNoaW5lPW02OGstYXRhcmkKKwkJb3M9LW1pbnQKKwkJOzsKKwltaXBzRUUqIHwgZWUgfCBwczIpCisJCWJhc2ljX21hY2hpbmU9bWlwczY0cjU5MDBlbC1zY2VpCisJCWNhc2UgJG9zIGluCisJCSAgICAtbGludXgqKQorCQkJOzsKKwkJICAgICopCisJCQlvcz0tZWxmCisJCQk7OworCQllc2FjCisJCTs7CisJaW9wKQorCQliYXNpY19tYWNoaW5lPW1pcHNlbC1zY2VpCisJCW9zPS1pcngKKwkJOzsKKwlkdnApCisJCWJhc2ljX21hY2hpbmU9ZHZwLXNjZWkKKwkJb3M9LWVsZgorCQk7OworCW1pcHMzKi0qKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21pcHMzL21pcHM2NC8nYAorCQk7OworCW1pcHMzKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9taXBzMy9taXBzNjQvJ2AtdW5rbm93bgorCQk7OworCW1vbml0b3IpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1yb202OGsKKwkJb3M9LWNvZmYKKwkJOzsKKwltb3JwaG9zKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgorCQlvcz0tbW9ycGhvcworCQk7OworCW1zZG9zKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LW1zZG9zCisJCTs7CisJbXMxLSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgLWUgJ3MvbXMxLS9tdC0vJ2AKKwkJOzsKKwltdnMpCisJCWJhc2ljX21hY2hpbmU9aTM3MC1pYm0KKwkJb3M9LW12cworCQk7OworCW5jcjMwMDApCisJCWJhc2ljX21hY2hpbmU9aTQ4Ni1uY3IKKwkJb3M9LXN5c3Y0CisJCTs7CisJbmV0YnNkMzg2KQorCQliYXNpY19tYWNoaW5lPWkzODYtdW5rbm93bgorCQlvcz0tbmV0YnNkCisJCTs7CisJbmV0d2luZGVyKQorCQliYXNpY19tYWNoaW5lPWFybXY0bC1yZWJlbAorCQlvcz0tbGludXgKKwkJOzsKKwluZXdzIHwgbmV3czcwMCB8IG5ld3M4MDAgfCBuZXdzOTAwKQorCQliYXNpY19tYWNoaW5lPW02OGstc29ueQorCQlvcz0tbmV3c29zCisJCTs7CisJbmV3czEwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4MDMwLXNvbnkKKwkJb3M9LW5ld3NvcworCQk7OworCW5ld3MtMzYwMCB8IHJpc2MtbmV3cykKKwkJYmFzaWNfbWFjaGluZT1taXBzLXNvbnkKKwkJb3M9LW5ld3NvcworCQk7OworCW5lY3Y3MCkKKwkJYmFzaWNfbWFjaGluZT12NzAtbmVjCisJCW9zPS1zeXN2CisJCTs7CisJbmV4dCB8IG0qLW5leHQgKQorCQliYXNpY19tYWNoaW5lPW02OGstbmV4dAorCQljYXNlICRvcyBpbgorCQkgICAgLW5leHRzdGVwKiApCisJCQk7OworCQkgICAgLW5zMiopCisJCSAgICAgIG9zPS1uZXh0c3RlcDIKKwkJCTs7CisJCSAgICAqKQorCQkgICAgICBvcz0tbmV4dHN0ZXAzCisJCQk7OworCQllc2FjCisJCTs7CisJbmgzMDAwKQorCQliYXNpY19tYWNoaW5lPW02OGstaGFycmlzCisJCW9zPS1jeHV4CisJCTs7CisJbmhbNDVdMDAwKQorCQliYXNpY19tYWNoaW5lPW04OGstaGFycmlzCisJCW9zPS1jeHV4CisJCTs7CisJbmluZHk5NjApCisJCWJhc2ljX21hY2hpbmU9aTk2MC1pbnRlbAorCQlvcz0tbmluZHkKKwkJOzsKKwltb245NjApCisJCWJhc2ljX21hY2hpbmU9aTk2MC1pbnRlbAorCQlvcz0tbW9uOTYwCisJCTs7CisJbm9uc3RvcHV4KQorCQliYXNpY19tYWNoaW5lPW1pcHMtY29tcGFxCisJCW9zPS1ub25zdG9wdXgKKwkJOzsKKwlucDEpCisJCWJhc2ljX21hY2hpbmU9bnAxLWdvdWxkCisJCTs7CisJbmVvLXRhbmRlbSkKKwkJYmFzaWNfbWFjaGluZT1uZW8tdGFuZGVtCisJCTs7CisJbnNlLXRhbmRlbSkKKwkJYmFzaWNfbWFjaGluZT1uc2UtdGFuZGVtCisJCTs7CisJbnNyLXRhbmRlbSkKKwkJYmFzaWNfbWFjaGluZT1uc3ItdGFuZGVtCisJCTs7CisJb3A1MG4tKiB8IG9wNjBjLSopCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKKwkJb3M9LXByb2VsZgorCQk7OworCW9wZW5yaXNjIHwgb3BlbnJpc2MtKikKKwkJYmFzaWNfbWFjaGluZT1vcjMyLXVua25vd24KKwkJOzsKKwlvczQwMCkKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWlibQorCQlvcz0tb3M0MDAKKwkJOzsKKwlPU0U2ODAwMCB8IG9zZTY4MDAwKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1lcmljc3NvbgorCQlvcz0tb3NlCisJCTs7CisJb3M2OGspCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ub25lCisJCW9zPS1vczY4aworCQk7OworCXBhLWhpdGFjaGkpCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1oaXRhY2hpCisJCW9zPS1oaXV4d2UyCisJCTs7CisJcGFyYWdvbikKKwkJYmFzaWNfbWFjaGluZT1pODYwLWludGVsCisJCW9zPS1vc2YKKwkJOzsKKwlwYXJpc2MpCisJCWJhc2ljX21hY2hpbmU9aHBwYS11bmtub3duCisJCW9zPS1saW51eAorCQk7OworCXBhcmlzYy0qKQorCQliYXNpY19tYWNoaW5lPWhwcGEtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJb3M9LWxpbnV4CisJCTs7CisJcGJkKQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXR0aQorCQk7OworCXBiYikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXR0aQorCQk7OworCXBjNTMyIHwgcGM1MzItKikKKwkJYmFzaWNfbWFjaGluZT1uczMyay1wYzUzMgorCQk7OworCXBjOTgpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQk7OworCXBjOTgtKikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bSB8IHA1IHwgazUgfCBrNiB8IG5leGdlbiB8IHZpYWMzKQorCQliYXNpY19tYWNoaW5lPWk1ODYtcGMKKwkJOzsKKwlwZW50aXVtcHJvIHwgcDYgfCA2eDg2IHwgYXRobG9uIHwgYXRobG9uXyopCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQk7OworCXBlbnRpdW1paSB8IHBlbnRpdW0yIHwgcGVudGl1bWlpaSB8IHBlbnRpdW0zKQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJOzsKKwlwZW50aXVtNCkKKwkJYmFzaWNfbWFjaGluZT1pNzg2LXBjCisJCTs7CisJcGVudGl1bS0qIHwgcDUtKiB8IGs1LSogfCBrNi0qIHwgbmV4Z2VuLSogfCB2aWFjMy0qKQorCQliYXNpY19tYWNoaW5lPWk1ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtcHJvLSogfCBwNi0qIHwgNng4Ni0qIHwgYXRobG9uLSopCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBlbnRpdW1paS0qIHwgcGVudGl1bTItKiB8IHBlbnRpdW1paWktKiB8IHBlbnRpdW0zLSopCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBlbnRpdW00LSopCisJCWJhc2ljX21hY2hpbmU9aTc4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBuKQorCQliYXNpY19tYWNoaW5lPXBuLWdvdWxkCisJCTs7CisJcG93ZXIpCWJhc2ljX21hY2hpbmU9cG93ZXItaWJtCisJCTs7CisJcHBjKQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgorCQk7OworCXBwYy0qKQliYXNpY19tYWNoaW5lPXBvd2VycGMtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwcGNsZSB8IHBvd2VycGNsaXR0bGUgfCBwcGMtbGUgfCBwb3dlcnBjLWxpdHRsZSkKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjbGUtdW5rbm93bgorCQk7OworCXBwY2xlLSogfCBwb3dlcnBjbGl0dGxlLSopCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwY2xlLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcHBjNjQpCWJhc2ljX21hY2hpbmU9cG93ZXJwYzY0LXVua25vd24KKwkJOzsKKwlwcGM2NC0qKSBiYXNpY19tYWNoaW5lPXBvd2VycGM2NC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBwYzY0bGUgfCBwb3dlcnBjNjRsaXR0bGUgfCBwcGM2NC1sZSB8IHBvd2VycGM2NC1saXR0bGUpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYzY0bGUtdW5rbm93bgorCQk7OworCXBwYzY0bGUtKiB8IHBvd2VycGM2NGxpdHRsZS0qKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGM2NGxlLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcHMyKQorCQliYXNpY19tYWNoaW5lPWkzODYtaWJtCisJCTs7CisJcHczMikKKwkJYmFzaWNfbWFjaGluZT1pNTg2LXVua25vd24KKwkJb3M9LXB3MzIKKwkJOzsKKwlyZG9zKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LXJkb3MKKwkJOzsKKwlyb202OGspCisJCWJhc2ljX21hY2hpbmU9bTY4ay1yb202OGsKKwkJb3M9LWNvZmYKKwkJOzsKKwlybVs0Nl0wMCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLXNpZW1lbnMKKwkJOzsKKwlydHBjIHwgcnRwYy0qKQorCQliYXNpY19tYWNoaW5lPXJvbXAtaWJtCisJCTs7CisJczM5MCB8IHMzOTAtKikKKwkJYmFzaWNfbWFjaGluZT1zMzkwLWlibQorCQk7OworCXMzOTB4IHwgczM5MHgtKikKKwkJYmFzaWNfbWFjaGluZT1zMzkweC1pYm0KKwkJOzsKKwlzYTI5MjAwKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS11ZGkKKwkJOzsKKwlzYjEpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTY0c2IxLXVua25vd24KKwkJOzsKKwlzYjFlbCkKKwkJYmFzaWNfbWFjaGluZT1taXBzaXNhNjRzYjFlbC11bmtub3duCisJCTs7CisJc2RlKQorCQliYXNpY19tYWNoaW5lPW1pcHNpc2EzMi1zZGUKKwkJb3M9LWVsZgorCQk7OworCXNlaSkKKwkJYmFzaWNfbWFjaGluZT1taXBzLXNlaQorCQlvcz0tc2VpdXgKKwkJOzsKKwlzZXF1ZW50KQorCQliYXNpY19tYWNoaW5lPWkzODYtc2VxdWVudAorCQk7OworCXNoKQorCQliYXNpY19tYWNoaW5lPXNoLWhpdGFjaGkKKwkJb3M9LWhtcworCQk7OworCXNoNWVsKQorCQliYXNpY19tYWNoaW5lPXNoNWxlLXVua25vd24KKwkJOzsKKwlzaDY0KQorCQliYXNpY19tYWNoaW5lPXNoNjQtdW5rbm93bgorCQk7OworCXNwYXJjbGl0ZS13cnMgfCBzaW1zby13cnMpCisJCWJhc2ljX21hY2hpbmU9c3BhcmNsaXRlLXdycworCQlvcz0tdnh3b3JrcworCQk7OworCXNwczcpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1idWxsCisJCW9zPS1zeXN2MgorCQk7OworCXNwdXIpCisJCWJhc2ljX21hY2hpbmU9c3B1ci11bmtub3duCisJCTs7CisJc3QyMDAwKQorCQliYXNpY19tYWNoaW5lPW02OGstdGFuZGVtCisJCTs7CisJc3RyYXR1cykKKwkJYmFzaWNfbWFjaGluZT1pODYwLXN0cmF0dXMKKwkJb3M9LXN5c3Y0CisJCTs7CisJc3VuMikKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCisJCTs7CisJc3VuMm9zMykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCisJCW9zPS1zdW5vczMKKwkJOzsKKwlzdW4yb3M0KQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KKwkJb3M9LXN1bm9zNAorCQk7OworCXN1bjNvczMpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJb3M9LXN1bm9zMworCQk7OworCXN1bjNvczQpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJb3M9LXN1bm9zNAorCQk7OworCXN1bjRvczMpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCW9zPS1zdW5vczMKKwkJOzsKKwlzdW40b3M0KQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQlvcz0tc3Vub3M0CisJCTs7CisJc3VuNHNvbDIpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCW9zPS1zb2xhcmlzMgorCQk7OworCXN1bjMgfCBzdW4zLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJOzsKKwlzdW40KQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQk7OworCXN1bjM4NiB8IHN1bjM4NmkgfCByb2FkcnVubmVyKQorCQliYXNpY19tYWNoaW5lPWkzODYtc3VuCisJCTs7CisJc3YxKQorCQliYXNpY19tYWNoaW5lPXN2MS1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwlzeW1tZXRyeSkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXNlcXVlbnQKKwkJb3M9LWR5bml4CisJCTs7CisJdDNlKQorCQliYXNpY19tYWNoaW5lPWFscGhhZXY1LWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXQ5MCkKKwkJYmFzaWNfbWFjaGluZT10OTAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJIyBUaGlzIG11c3QgYmUgbWF0Y2hlZCBiZWZvcmUgdGlsZSouCisJdGlsZWd4KikKKwkJYmFzaWNfbWFjaGluZT10aWxlZ3gtdW5rbm93bgorCQlvcz0tbGludXgtZ251CisJCTs7CisJdGlsZSopCisJCWJhc2ljX21hY2hpbmU9dGlsZS11bmtub3duCisJCW9zPS1saW51eC1nbnUKKwkJOzsKKwl0eDM5KQorCQliYXNpY19tYWNoaW5lPW1pcHN0eDM5LXVua25vd24KKwkJOzsKKwl0eDM5ZWwpCisJCWJhc2ljX21hY2hpbmU9bWlwc3R4MzllbC11bmtub3duCisJCTs7CisJdG9hZDEpCisJCWJhc2ljX21hY2hpbmU9cGRwMTAteGtsCisJCW9zPS10b3BzMjAKKwkJOzsKKwl0b3dlciB8IHRvd2VyLTMyKQorCQliYXNpY19tYWNoaW5lPW02OGstbmNyCisJCTs7CisJdHBmKQorCQliYXNpY19tYWNoaW5lPXMzOTB4LWlibQorCQlvcz0tdHBmCisJCTs7CisJdWRpMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS11ZGkKKwkJOzsKKwl1bHRyYTMpCisJCWJhc2ljX21hY2hpbmU9YTI5ay1ueXUKKwkJb3M9LXN5bTEKKwkJOzsKKwl2ODEwIHwgbmVjdjgxMCkKKwkJYmFzaWNfbWFjaGluZT12ODEwLW5lYworCQlvcz0tbm9uZQorCQk7OworCXZheHYpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQlvcz0tc3lzdgorCQk7OworCXZtcykKKwkJYmFzaWNfbWFjaGluZT12YXgtZGVjCisJCW9zPS12bXMKKwkJOzsKKwl2cHAqfHZ4fHZ4LSopCisJCWJhc2ljX21hY2hpbmU9ZjMwMS1mdWppdHN1CisJCTs7CisJdnh3b3Jrczk2MCkKKwkJYmFzaWNfbWFjaGluZT1pOTYwLXdycworCQlvcz0tdnh3b3JrcworCQk7OworCXZ4d29ya3M2OCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXdycworCQlvcz0tdnh3b3JrcworCQk7OworCXZ4d29ya3MyOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl3NjUqKQorCQliYXNpY19tYWNoaW5lPXc2NS13ZGMKKwkJb3M9LW5vbmUKKwkJOzsKKwl3ODlrLSopCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS13aW5ib25kCisJCW9zPS1wcm9lbGYKKwkJOzsKKwl4Ym94KQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJb3M9LW1pbmd3MzIKKwkJOzsKKwl4cHMgfCB4cHMxMDApCisJCWJhc2ljX21hY2hpbmU9eHBzMTAwLWhvbmV5d2VsbAorCQk7OworCXltcCkKKwkJYmFzaWNfbWFjaGluZT15bXAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJejhrLSotY29mZikKKwkJYmFzaWNfbWFjaGluZT16OGstdW5rbm93bgorCQlvcz0tc2ltCisJCTs7CisJejgwLSotY29mZikKKwkJYmFzaWNfbWFjaGluZT16ODAtdW5rbm93bgorCQlvcz0tc2ltCisJCTs7CisJbm9uZSkKKwkJYmFzaWNfbWFjaGluZT1ub25lLW5vbmUKKwkJb3M9LW5vbmUKKwkJOzsKKworIyBIZXJlIHdlIGhhbmRsZSB0aGUgZGVmYXVsdCBtYW51ZmFjdHVyZXIgb2YgY2VydGFpbiBDUFUgdHlwZXMuICBJdCBpcyBpbgorIyBzb21lIGNhc2VzIHRoZSBvbmx5IG1hbnVmYWN0dXJlciwgaW4gb3RoZXJzLCBpdCBpcyB0aGUgbW9zdCBwb3B1bGFyLgorCXc4OWspCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS13aW5ib25kCisJCTs7CisJb3A1MG4pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKKwkJOzsKKwlvcDYwYykKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLW9raQorCQk7OworCXJvbXApCisJCWJhc2ljX21hY2hpbmU9cm9tcC1pYm0KKwkJOzsKKwltbWl4KQorCQliYXNpY19tYWNoaW5lPW1taXgta251dGgKKwkJOzsKKwlyczYwMDApCisJCWJhc2ljX21hY2hpbmU9cnM2MDAwLWlibQorCQk7OworCXZheCkKKwkJYmFzaWNfbWFjaGluZT12YXgtZGVjCisJCTs7CisJcGRwMTApCisJCSMgdGhlcmUgYXJlIG1hbnkgY2xvbmVzLCBzbyBERUMgaXMgbm90IGEgc2FmZSBiZXQKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC11bmtub3duCisJCTs7CisJcGRwMTEpCisJCWJhc2ljX21hY2hpbmU9cGRwMTEtZGVjCisJCTs7CisJd2UzMmspCisJCWJhc2ljX21hY2hpbmU9d2UzMmstYXR0CisJCTs7CisJc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMjRdYWViIHwgc2hbMzRdZWIgfCBzaFsxMjM0XWxlIHwgc2hbMjNdZWxlKQorCQliYXNpY19tYWNoaW5lPXNoLXVua25vd24KKwkJOzsKKwlzcGFyYyB8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgfCBzcGFyY3Y5dikKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJOzsKKwljeWRyYSkKKwkJYmFzaWNfbWFjaGluZT1jeWRyYS1jeWRyb21lCisJCTs7CisJb3Jpb24pCisJCWJhc2ljX21hY2hpbmU9b3Jpb24taGlnaGxldmVsCisJCTs7CisJb3Jpb24xMDUpCisJCWJhc2ljX21hY2hpbmU9Y2xpcHBlci1oaWdobGV2ZWwKKwkJOzsKKwltYWMgfCBtcHcgfCBtYWMtbXB3KQorCQliYXNpY19tYWNoaW5lPW02OGstYXBwbGUKKwkJOzsKKwlwbWFjIHwgcG1hYy1tcHcpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1hcHBsZQorCQk7OworCSotdW5rbm93bikKKwkJIyBNYWtlIHN1cmUgdG8gbWF0Y2ggYW4gYWxyZWFkeS1jYW5vbmljYWxpemVkIG1hY2hpbmUgbmFtZS4KKwkJOzsKKwkqKQorCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxXCc6IG1hY2hpbmUgXGAkYmFzaWNfbWFjaGluZVwnIG5vdCByZWNvZ25pemVkIDE+JjIKKwkJZXhpdCAxCisJCTs7Citlc2FjCisKKyMgSGVyZSB3ZSBjYW5vbmljYWxpemUgY2VydGFpbiBhbGlhc2VzIGZvciBtYW51ZmFjdHVyZXJzLgorY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCSotZGlnaXRhbCopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvZGlnaXRhbC4qL2RlYy8nYAorCQk7OworCSotY29tbW9kb3JlKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9jb21tb2RvcmUuKi9jYm0vJ2AKKwkJOzsKKwkqKQorCQk7OworZXNhYworCisjIERlY29kZSBtYW51ZmFjdHVyZXItc3BlY2lmaWMgYWxpYXNlcyBmb3IgY2VydGFpbiBvcGVyYXRpbmcgc3lzdGVtcy4KKworaWYgWyB4IiRvcyIgIT0geCIiIF0KK3RoZW4KK2Nhc2UgJG9zIGluCisJIyBGaXJzdCBtYXRjaCBzb21lIHN5c3RlbSB0eXBlIGFsaWFzZXMKKwkjIHRoYXQgbWlnaHQgZ2V0IGNvbmZ1c2VkIHdpdGggdmFsaWQgc3lzdGVtIHR5cGVzLgorCSMgLXNvbGFyaXMqIGlzIGEgYmFzaWMgc3lzdGVtIHR5cGUsIHdpdGggdGhpcyBvbmUgZXhjZXB0aW9uLgorCS1hdXJvcmF1eCkKKwkJb3M9LWF1cm9yYXV4CisJCTs7CisJLXNvbGFyaXMxIHwgLXNvbGFyaXMxLiopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzb2xhcmlzMXxzdW5vczR8J2AKKwkJOzsKKwktc29sYXJpcykKKwkJb3M9LXNvbGFyaXMyCisJCTs7CisJLXN2cjQqKQorCQlvcz0tc3lzdjQKKwkJOzsKKwktdW5peHdhcmUqKQorCQlvcz0tc3lzdjQuMnV3CisJCTs7CisJLWdudS9saW51eCopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xnbnUvbGludXh8bGludXgtZ251fCdgCisJCTs7CisJIyBGaXJzdCBhY2NlcHQgdGhlIGJhc2ljIHN5c3RlbSB0eXBlcy4KKwkjIFRoZSBwb3J0YWJsZSBzeXN0ZW1zIGNvbWVzIGZpcnN0LgorCSMgRWFjaCBhbHRlcm5hdGl2ZSBNVVNUIEVORCBJTiBBICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCisJIyAtc3lzdiogaXMgbm90IGhlcmUgYmVjYXVzZSBpdCBjb21lcyBsYXRlciwgYWZ0ZXIgc3lzdnI0LgorCS1nbnUqIHwgLWJzZCogfCAtbWFjaCogfCAtbWluaXgqIHwgLWdlbml4KiB8IC11bHRyaXgqIHwgLWlyaXgqIFwKKwkgICAgICB8IC0qdm1zKiB8IC1zY28qIHwgLWVzaXgqIHwgLWlzYyogfCAtYWl4KiB8IC1jbmsqIHwgLXN1bm9zIHwgLXN1bm9zWzM0XSpcCisJICAgICAgfCAtaHB1eCogfCAtdW5vcyogfCAtb3NmKiB8IC1sdW5hKiB8IC1kZ3V4KiB8IC1hdXJvcmF1eCogfCAtc29sYXJpcyogXAorCSAgICAgIHwgLXN5bSogfCAta29wZW5zb2xhcmlzKiBcCisJICAgICAgfCAtYW1pZ2FvcyogfCAtYW1pZ2Fkb3MqIHwgLW1zZG9zKiB8IC1uZXdzb3MqIHwgLXVuaWNvcyogfCAtYW9mKiBcCisJICAgICAgfCAtYW9zKiB8IC1hcm9zKiBcCisJICAgICAgfCAtbmluZHkqIHwgLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC1lYm1vbiogfCAtaG1zKiB8IC1tdnMqIFwKKwkgICAgICB8IC1jbGl4KiB8IC1yaXNjb3MqIHwgLXVuaXBsdXMqIHwgLWlyaXMqIHwgLXJ0dSogfCAteGVuaXgqIFwKKwkgICAgICB8IC1oaXV4KiB8IC0zODZic2QqIHwgLWtuZXRic2QqIHwgLW1pcmJzZCogfCAtbmV0YnNkKiBcCisJICAgICAgfCAtb3BlbmJzZCogfCAtc29saWRic2QqIFwKKwkgICAgICB8IC1la2tvYnNkKiB8IC1rZnJlZWJzZCogfCAtZnJlZWJzZCogfCAtcmlzY2l4KiB8IC1seW54b3MqIFwKKwkgICAgICB8IC1ib3N4KiB8IC1uZXh0c3RlcCogfCAtY3h1eCogfCAtYW91dCogfCAtZWxmKiB8IC1vYWJpKiBcCisJICAgICAgfCAtcHR4KiB8IC1jb2ZmKiB8IC1lY29mZiogfCAtd2lubnQqIHwgLWRvbWFpbiogfCAtdnN0YSogXAorCSAgICAgIHwgLXVkaSogfCAtZWFiaSogfCAtbGl0ZXMqIHwgLWllZWUqIHwgLWdvMzIqIHwgLWF1eCogXAorCSAgICAgIHwgLWNob3J1c29zKiB8IC1jaG9ydXNyZGIqIHwgLWNlZ2NjKiBcCisJICAgICAgfCAtY3lnd2luKiB8IC1wZSogfCAtcHNvcyogfCAtbW9zcyogfCAtcHJvZWxmKiB8IC1ydGVtcyogXAorCSAgICAgIHwgLW1pbmd3MzIqIHwgLWxpbnV4LWdudSogfCAtbGludXgtYW5kcm9pZCogXAorCSAgICAgIHwgLWxpbnV4LW5ld2xpYiogfCAtbGludXgtdWNsaWJjKiBcCisJICAgICAgfCAtdXhwdiogfCAtYmVvcyogfCAtbXBlaXgqIHwgLXVkayogXAorCSAgICAgIHwgLWludGVyaXgqIHwgLXV3aW4qIHwgLW1rcyogfCAtcmhhcHNvZHkqIHwgLWRhcndpbiogfCAtb3BlbmVkKiBcCisJICAgICAgfCAtb3BlbnN0ZXAqIHwgLW9za2l0KiB8IC1jb25peCogfCAtcHczMiogfCAtbm9uc3RvcHV4KiBcCisJICAgICAgfCAtc3Rvcm0tY2hhb3MqIHwgLXRvcHMxMCogfCAtdGVuZXgqIHwgLXRvcHMyMCogfCAtaXRzKiBcCisJICAgICAgfCAtb3MyKiB8IC12b3MqIHwgLXBhbG1vcyogfCAtdWNsaW51eCogfCAtbnVjbGV1cyogXAorCSAgICAgIHwgLW1vcnBob3MqIHwgLXN1cGVydXgqIHwgLXJ0bWsqIHwgLXJ0bWstbm92YSogfCAtd2luZGlzcyogXAorCSAgICAgIHwgLXBvd2VybWF4KiB8IC1kbml4KiB8IC1ueDYgfCAtbng3IHwgLXNlaSogfCAtZHJhZ29uZmx5KiBcCisJICAgICAgfCAtc2t5b3MqIHwgLWhhaWt1KiB8IC1yZG9zKiB8IC10b3BwZXJzKiB8IC1kcm9wcyogfCAtZXMqIHwgLWlyeCopCisJIyBSZW1lbWJlciwgZWFjaCBhbHRlcm5hdGl2ZSBNVVNUIEVORCBJTiAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgorCQk7OworCS1xbngqKQorCQljYXNlICRiYXNpY19tYWNoaW5lIGluCisJCSAgICB4ODYtKiB8IGkqODYtKikKKwkJCTs7CisJCSAgICAqKQorCQkJb3M9LW50byRvcworCQkJOzsKKwkJZXNhYworCQk7OworCS1udG8tcW54KikKKwkJOzsKKwktbnRvKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfG50b3xudG8tcW54fCdgCisJCTs7CisJLXNpbSB8IC1lczE4MDAqIHwgLWhtcyogfCAteHJheSB8IC1vczY4ayogfCAtbm9uZSogfCAtdjg4ciogXAorCSAgICAgIHwgLXdpbmRvd3MqIHwgLW9zeCB8IC1hYnVnIHwgLW5ldHdhcmUqIHwgLW9zOSogfCAtYmVvcyogfCAtaGFpa3UqIFwKKwkgICAgICB8IC1tYWNvcyogfCAtbXB3KiB8IC1tYWdpYyogfCAtbW1peHdhcmUqIHwgLW1vbjk2MCogfCAtbG5ld3MqKQorCQk7OworCS1tYWMqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bWFjfG1hY29zfCdgCisJCTs7CisJLWxpbnV4LWRpZXRsaWJjKQorCQlvcz0tbGludXgtZGlldGxpYmMKKwkJOzsKKwktbGludXgqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bGludXh8bGludXgtZ251fCdgCisJCTs7CisJLXN1bm9zNSopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzdW5vczV8c29sYXJpczJ8J2AKKwkJOzsKKwktc3Vub3M2KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHN1bm9zNnxzb2xhcmlzM3wnYAorCQk7OworCS1vcGVuZWQqKQorCQlvcz0tb3BlbmVkaXRpb24KKwkJOzsKKwktb3M0MDAqKQorCQlvcz0tb3M0MDAKKwkJOzsKKwktd2luY2UqKQorCQlvcz0td2luY2UKKwkJOzsKKwktb3Nmcm9zZSopCisJCW9zPS1vc2Zyb3NlCisJCTs7CisJLW9zZiopCisJCW9zPS1vc2YKKwkJOzsKKwktdXRlayopCisJCW9zPS1ic2QKKwkJOzsKKwktZHluaXgqKQorCQlvcz0tYnNkCisJCTs7CisJLWFjaXMqKQorCQlvcz0tYW9zCisJCTs7CisJLWF0aGVvcyopCisJCW9zPS1hdGhlb3MKKwkJOzsKKwktc3lsbGFibGUqKQorCQlvcz0tc3lsbGFibGUKKwkJOzsKKwktMzg2YnNkKQorCQlvcz0tYnNkCisJCTs7CisJLWN0aXgqIHwgLXV0cyopCisJCW9zPS1zeXN2CisJCTs7CisJLW5vdmEqKQorCQlvcz0tcnRtay1ub3ZhCisJCTs7CisJLW5zMiApCisJCW9zPS1uZXh0c3RlcDIKKwkJOzsKKwktbnNrKikKKwkJb3M9LW5zaworCQk7OworCSMgUHJlc2VydmUgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHNpbml4NS4KKwktc2luaXg1LiopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzaW5peHxzeXN2fCdgCisJCTs7CisJLXNpbml4KikKKwkJb3M9LXN5c3Y0CisJCTs7CisJLXRwZiopCisJCW9zPS10cGYKKwkJOzsKKwktdHJpdG9uKikKKwkJb3M9LXN5c3YzCisJCTs7CisJLW9zcyopCisJCW9zPS1zeXN2MworCQk7OworCS1zdnI0KQorCQlvcz0tc3lzdjQKKwkJOzsKKwktc3ZyMykKKwkJb3M9LXN5c3YzCisJCTs7CisJLXN5c3ZyNCkKKwkJb3M9LXN5c3Y0CisJCTs7CisJIyBUaGlzIG11c3QgY29tZSBhZnRlciAtc3lzdnI0LgorCS1zeXN2KikKKwkJOzsKKwktb3NlKikKKwkJb3M9LW9zZQorCQk7OworCS1lczE4MDAqKQorCQlvcz0tb3NlCisJCTs7CisJLXhlbml4KQorCQlvcz0teGVuaXgKKwkJOzsKKwktKm1pbnQgfCAtbWludFswLTldKiB8IC0qTWlOVCB8IC1NaU5UWzAtOV0qKQorCQlvcz0tbWludAorCQk7OworCS1hcm9zKikKKwkJb3M9LWFyb3MKKwkJOzsKKwkta2FvcyopCisJCW9zPS1rYW9zCisJCTs7CisJLXp2bW9lKQorCQlvcz0tenZtb2UKKwkJOzsKKwktZGljb3MqKQorCQlvcz0tZGljb3MKKwkJOzsKKwktbmFjbCopCisJCTs7CisJLW5vbmUpCisJCTs7CisJKikKKwkJIyBHZXQgcmlkIG9mIHRoZSBgLScgYXQgdGhlIGJlZ2lubmluZyBvZiAkb3MuCisJCW9zPWBlY2hvICRvcyB8IHNlZCAncy9bXi1dKi0vLydgCisJCWVjaG8gSW52YWxpZCBjb25maWd1cmF0aW9uIFxgJDFcJzogc3lzdGVtIFxgJG9zXCcgbm90IHJlY29nbml6ZWQgMT4mMgorCQlleGl0IDEKKwkJOzsKK2VzYWMKK2Vsc2UKKworIyBIZXJlIHdlIGhhbmRsZSB0aGUgZGVmYXVsdCBvcGVyYXRpbmcgc3lzdGVtcyB0aGF0IGNvbWUgd2l0aCB2YXJpb3VzIG1hY2hpbmVzLgorIyBUaGUgdmFsdWUgc2hvdWxkIGJlIHdoYXQgdGhlIHZlbmRvciBjdXJyZW50bHkgc2hpcHMgb3V0IHRoZSBkb29yIHdpdGggdGhlaXIKKyMgbWFjaGluZSBvciBwdXQgYW5vdGhlciB3YXksIHRoZSBtb3N0IHBvcHVsYXIgb3MgcHJvdmlkZWQgd2l0aCB0aGUgbWFjaGluZS4KKworIyBOb3RlIHRoYXQgaWYgeW91J3JlIGdvaW5nIHRvIHRyeSB0byBtYXRjaCAiLU1BTlVGQUNUVVJFUiIgaGVyZSAoc2F5LAorIyAiLXN1biIpLCB0aGVuIHlvdSBoYXZlIHRvIHRlbGwgdGhlIGNhc2Ugc3RhdGVtZW50IHVwIHRvd2FyZHMgdGhlIHRvcAorIyB0aGF0IE1BTlVGQUNUVVJFUiBpc24ndCBhbiBvcGVyYXRpbmcgc3lzdGVtLiAgT3RoZXJ3aXNlLCBjb2RlIGFib3ZlCisjIHdpbGwgc2lnbmFsIGFuIGVycm9yIHNheWluZyB0aGF0IE1BTlVGQUNUVVJFUiBpc24ndCBhbiBvcGVyYXRpbmcKKyMgc3lzdGVtLCBhbmQgd2UnbGwgbmV2ZXIgZ2V0IHRvIHRoaXMgcG9pbnQuCisKK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwlzY29yZS0qKQorCQlvcz0tZWxmCisJCTs7CisJc3B1LSopCisJCW9zPS1lbGYKKwkJOzsKKwkqLWFjb3JuKQorCQlvcz0tcmlzY2l4MS4yCisJCTs7CisJYXJtKi1yZWJlbCkKKwkJb3M9LWxpbnV4CisJCTs7CisJYXJtKi1zZW1pKQorCQlvcz0tYW91dAorCQk7OworCWM0eC0qIHwgdGljNHgtKikKKwkJb3M9LWNvZmYKKwkJOzsKKwl0aWM1NHgtKikKKwkJb3M9LWNvZmYKKwkJOzsKKwl0aWM1NXgtKikKKwkJb3M9LWNvZmYKKwkJOzsKKwl0aWM2eC0qKQorCQlvcz0tY29mZgorCQk7OworCSMgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIHRoZSAqLWRlYyBlbnRyeS4KKwlwZHAxMC0qKQorCQlvcz0tdG9wczIwCisJCTs7CisJcGRwMTEtKikKKwkJb3M9LW5vbmUKKwkJOzsKKwkqLWRlYyB8IHZheC0qKQorCQlvcz0tdWx0cml4NC4yCisJCTs7CisJbTY4Ki1hcG9sbG8pCisJCW9zPS1kb21haW4KKwkJOzsKKwlpMzg2LXN1bikKKwkJb3M9LXN1bm9zNC4wLjIKKwkJOzsKKwltNjgwMDAtc3VuKQorCQlvcz0tc3Vub3MzCisJCSMgVGhpcyBhbHNvIGV4aXN0cyBpbiB0aGUgY29uZmlndXJlIHByb2dyYW0sIGJ1dCB3YXMgbm90IHRoZQorCQkjIGRlZmF1bHQuCisJCSMgb3M9LXN1bm9zNAorCQk7OworCW02OCotY2lzY28pCisJCW9zPS1hb3V0CisJCTs7CisJbWVwLSopCisJCW9zPS1lbGYKKwkJOzsKKwltaXBzKi1jaXNjbykKKwkJb3M9LWVsZgorCQk7OworCW1pcHMqLSopCisJCW9zPS1lbGYKKwkJOzsKKwlvcjMyLSopCisJCW9zPS1jb2ZmCisJCTs7CisJKi10dGkpCSMgbXVzdCBiZSBiZWZvcmUgc3BhcmMgZW50cnkgb3Igd2UgZ2V0IHRoZSB3cm9uZyBvcy4KKwkJb3M9LXN5c3YzCisJCTs7CisJc3BhcmMtKiB8ICotc3VuKQorCQlvcz0tc3Vub3M0LjEuMQorCQk7OworCSotYmUpCisJCW9zPS1iZW9zCisJCTs7CisJKi1oYWlrdSkKKwkJb3M9LWhhaWt1CisJCTs7CisJKi1pYm0pCisJCW9zPS1haXgKKwkJOzsKKwkqLWtudXRoKQorCQlvcz0tbW1peHdhcmUKKwkJOzsKKwkqLXdlYykKKwkJb3M9LXByb2VsZgorCQk7OworCSotd2luYm9uZCkKKwkJb3M9LXByb2VsZgorCQk7OworCSotb2tpKQorCQlvcz0tcHJvZWxmCisJCTs7CisJKi1ocCkKKwkJb3M9LWhwdXgKKwkJOzsKKwkqLWhpdGFjaGkpCisJCW9zPS1oaXV4CisJCTs7CisJaTg2MC0qIHwgKi1hdHQgfCAqLW5jciB8ICotYWx0b3MgfCAqLW1vdG9yb2xhIHwgKi1jb252ZXJnZW50KQorCQlvcz0tc3lzdgorCQk7OworCSotY2JtKQorCQlvcz0tYW1pZ2FvcworCQk7OworCSotZGcpCisJCW9zPS1kZ3V4CisJCTs7CisJKi1kb2xwaGluKQorCQlvcz0tc3lzdjMKKwkJOzsKKwltNjhrLWNjdXIpCisJCW9zPS1ydHUKKwkJOzsKKwltODhrLW9tcm9uKikKKwkJb3M9LWx1bmEKKwkJOzsKKwkqLW5leHQgKQorCQlvcz0tbmV4dHN0ZXAKKwkJOzsKKwkqLXNlcXVlbnQpCisJCW9zPS1wdHgKKwkJOzsKKwkqLWNyZHMpCisJCW9zPS11bm9zCisJCTs7CisJKi1ucykKKwkJb3M9LWdlbml4CisJCTs7CisJaTM3MC0qKQorCQlvcz0tbXZzCisJCTs7CisJKi1uZXh0KQorCQlvcz0tbmV4dHN0ZXAzCisJCTs7CisJKi1nb3VsZCkKKwkJb3M9LXN5c3YKKwkJOzsKKwkqLWhpZ2hsZXZlbCkKKwkJb3M9LWJzZAorCQk7OworCSotZW5jb3JlKQorCQlvcz0tYnNkCisJCTs7CisJKi1zZ2kpCisJCW9zPS1pcml4CisJCTs7CisJKi1zaWVtZW5zKQorCQlvcz0tc3lzdjQKKwkJOzsKKwkqLW1hc3Njb21wKQorCQlvcz0tcnR1CisJCTs7CisJZjMwWzAxXS1mdWppdHN1IHwgZjcwMC1mdWppdHN1KQorCQlvcz0tdXhwdgorCQk7OworCSotcm9tNjhrKQorCQlvcz0tY29mZgorCQk7OworCSotKmJ1ZykKKwkJb3M9LWNvZmYKKwkJOzsKKwkqLWFwcGxlKQorCQlvcz0tbWFjb3MKKwkJOzsKKwkqLWF0YXJpKikKKwkJb3M9LW1pbnQKKwkJOzsKKwkqKQorCQlvcz0tbm9uZQorCQk7OworZXNhYworZmkKKworIyBIZXJlIHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBrbm93IHRoZSBvcywgYW5kIHRoZSBDUFUgdHlwZSwgYnV0IG5vdCB0aGUKKyMgbWFudWZhY3R1cmVyLiAgV2UgcGljayB0aGUgbG9naWNhbCBtYW51ZmFjdHVyZXIuCit2ZW5kb3I9dW5rbm93bgorY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCSotdW5rbm93bikKKwkJY2FzZSAkb3MgaW4KKwkJCS1yaXNjaXgqKQorCQkJCXZlbmRvcj1hY29ybgorCQkJCTs7CisJCQktc3Vub3MqKQorCQkJCXZlbmRvcj1zdW4KKwkJCQk7OworCQkJLWNuayp8LWFpeCopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktYmVvcyopCisJCQkJdmVuZG9yPWJlCisJCQkJOzsKKwkJCS1ocHV4KikKKwkJCQl2ZW5kb3I9aHAKKwkJCQk7OworCQkJLW1wZWl4KikKKwkJCQl2ZW5kb3I9aHAKKwkJCQk7OworCQkJLWhpdXgqKQorCQkJCXZlbmRvcj1oaXRhY2hpCisJCQkJOzsKKwkJCS11bm9zKikKKwkJCQl2ZW5kb3I9Y3JkcworCQkJCTs7CisJCQktZGd1eCopCisJCQkJdmVuZG9yPWRnCisJCQkJOzsKKwkJCS1sdW5hKikKKwkJCQl2ZW5kb3I9b21yb24KKwkJCQk7OworCQkJLWdlbml4KikKKwkJCQl2ZW5kb3I9bnMKKwkJCQk7OworCQkJLW12cyogfCAtb3BlbmVkKikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCS1vczQwMCopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktcHR4KikKKwkJCQl2ZW5kb3I9c2VxdWVudAorCQkJCTs7CisJCQktdHBmKikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCS12eHNpbSogfCAtdnh3b3JrcyogfCAtd2luZGlzcyopCisJCQkJdmVuZG9yPXdycworCQkJCTs7CisJCQktYXV4KikKKwkJCQl2ZW5kb3I9YXBwbGUKKwkJCQk7OworCQkJLWhtcyopCisJCQkJdmVuZG9yPWhpdGFjaGkKKwkJCQk7OworCQkJLW1wdyogfCAtbWFjb3MqKQorCQkJCXZlbmRvcj1hcHBsZQorCQkJCTs7CisJCQktKm1pbnQgfCAtbWludFswLTldKiB8IC0qTWlOVCB8IC1NaU5UWzAtOV0qKQorCQkJCXZlbmRvcj1hdGFyaQorCQkJCTs7CisJCQktdm9zKikKKwkJCQl2ZW5kb3I9c3RyYXR1cworCQkJCTs7CisJCWVzYWMKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAicy91bmtub3duLyR2ZW5kb3IvImAKKwkJOzsKK2VzYWMKKworZWNobyAkYmFzaWNfbWFjaGluZSRvcworZXhpdAorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAidGltZXN0YW1wPSciCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZCIKKyMgdGltZS1zdGFtcC1lbmQ6ICInIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvY3Jvc3N0b29sLU5HLnNoIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2Nyb3NzdG9vbC1ORy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MjNkMWM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2Nyb3NzdG9vbC1ORy5zaApAQCAtMCwwICsxLDYyNCBAQAorIyEvYmluL2Jhc2gKKyMgQ29weXJpZ2h0IDIwMDcgWWFubiBFLiBNT1JJTgorIyBMaWNlbnNlZCB1bmRlciB0aGUgR1BMIHYyLiBTZWUgQ09QWUlORyBpbiB0aGUgcm9vdCBvZiB0aGlzIHBhY2thZ2UuCisKKyMgVGhpcyBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byBjcm9zc3Rvb2wKKyMgVGhpcyB3aWxsOgorIyAgIC0gZG93bmxvYWQsIGV4dHJhY3QgYW5kIHBhdGNoIHRoZSB0b29sY2hhaW4gY29tcG9uZW50cworIyAgIC0gYnVpbGQgYW5kIGluc3RhbGwgZWFjaCBjb21wb25lbnRzIGluIHR1cm4KKyMgICAtIGFuZCBldmVudHVhbGx5IHRlc3QgdGhlIHJlc3VsdGluZyB0b29sY2hhaW4KKworIyBXaGF0IHRoaXMgZmlsZSBkb2VzIGlzIHByZXBhcmUgdGhlIGVudmlyb25tZW50LCBiYXNlZCB1cG9uIHRoZSB1c2VyLWNob29zZW4KKyMgb3B0aW9ucy4gSXQgYWxzbyBjaGVja3MgdGhlIGV4aXN0aW5nIGVudmlyb25tZW50IGZvciB1bi1mcmllbmRseSB2YXJpYWJsZXMsCisjIGFuZCBidWlsZHMgdGhlIHRvb2xzLgorCisjIFBhcnNlIHRoZSBjb21tb24gZnVuY3Rpb25zCisjIE5vdGU6IHNvbWUgaW5pdGlhbGlzYXRpb24gYW5kIHNhbml0aXppbmcgaXMgZG9uZSB3aGlsZSBwYXJzaW5nIHRoaXMgZmlsZSwKKyMgbW9zdCBub3RhYmx5OgorIyAgLSBzZXQgdHJhcCBoYW5kbGVyIG9uIGVycm9ycywKKyMgIC0gZG9uJ3QgaGFzaCBjb21tYW5kcyBsb29rdXBzLAorIyAgLSBpbml0aWFsaXNlIGxvZ2dpbmcuCisuICIke0NUX0xJQl9ESVJ9L3NjcmlwdHMvZnVuY3Rpb25zIgorCisjIFBhcnNlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKKyMgSXQgaGFzIHNvbWUgaW5mbyBhYm91dCB0aGUgbG9nZ2luZyBmYWNpbGl0eSwgc28gaW5jbHVkZSBpdCBlYXJseQorLiAuY29uZmlnLjIKKyMgWWVzISBXZSBjYW4gZG8gZnVsbCBsb2dnaW5nIGZyb20gbm93IG9uIQorCisjIE92ZXJyaWRlIHRoZSBsb2NhbGUgZWFybHksIGluIGNhc2Ugd2UgZXZlciB0cmFuc2xhdGUgY3Jvc3N0b29sLU5HIG1lc3NhZ2VzCitpZiBbIC16ICIke0NUX05PX09WRVJJREVfTENfTUVTU0FHRVN9IiBdOyB0aGVuCisgICAgZXhwb3J0IExDX0FMTD1DCisgICAgZXhwb3J0IExBTkc9QworZmkKKworIyByZW1vdmUgLiBmcm9tIFBBVEggc2luY2UgaXQgY2FuIGNhdXNlIGdjYyBidWlsZCBmYWlsdXJlcworQ1RfU2FuaXRpemVQYXRoCisKKyMgU29tZSBzYW5pdHkgY2hlY2tzIGluIHRoZSBlbnZpcm9ubWVudCBhbmQgbmVlZGVkIHRvb2xzCitDVF9Eb0xvZyBJTkZPICJQZXJmb3JtaW5nIHNvbWUgdHJpdmlhbCBzYW5pdHkgY2hlY2tzIgorQ1RfVGVzdEFuZEFib3J0ICJEb24ndCBzZXQgTERfTElCUkFSWV9QQVRILiBJdCBzY3Jld3MgdXAgdGhlIGJ1aWxkLiIgLW4gIiR7TERfTElCUkFSWV9QQVRIfSIKK0NUX1Rlc3RBbmRBYm9ydCAiRG9uJ3Qgc2V0IENGTEFHUy4gSXQgc2NyZXdzIHVwIHRoZSBidWlsZC4iIC1uICIke0NGTEFHU30iCitDVF9UZXN0QW5kQWJvcnQgIkRvbid0IHNldCBDWFhGTEFHUy4gSXQgc2NyZXdzIHVwIHRoZSBidWlsZC4iIC1uICIke0NYWEZMQUdTfSIKK0NUX1Rlc3QgIkdSRVBfT1BUSU9OUyBzY3Jld3MgdXAgdGhlIGJ1aWxkLiBSZXNldHRpbmcuIiAtbiAiJHtHUkVQX09QVElPTlN9IgorZXhwb3J0IEdSRVBfT1BUSU9OUz0KKyMgV29ya2Fyb3VuZCBhZ2FpbnN0IG9wZW5TVVNFIDEyLjEgdGhhdCBicmVha3MgLi9jb25maWd1cmUgZm9yIGNyb3NzLWNvbXBpbGF0aW9uOgorZXhwb3J0IENPTkZJR19TSVRFPQorCisjIFNvbWUgc2FuaXR5IGNoZWNrcyBvbiBwYXRocyBjb250ZW50Citmb3IgZCBpbiAgICAgICAgICAgIFwKKyAgICBMT0NBTF9UQVJCQUxMUyAgXAorICAgIFdPUksgICAgICAgICAgICBcCisgICAgUFJFRklYICAgICAgICAgIFwKKyAgICBJTlNUQUxMICAgICAgICAgXAorICAgIDsgZG8KKyAgICAgICAgZXZhbCBkaXI9Ilwke0NUXyR7ZH1fRElSfSIKKyAgICAgICAgY2FzZSAiJHtkaXJ9IiBpbgorICAgICAgICAgICAgKiIgIiopCisgICAgICAgICAgICAgICAgQ1RfQWJvcnQgIidDVF8ke2R9X0RJUic9JyR7ZGlyfScgY29udGFpbnMgYSBzcGFjZSBpbiBpdC5cbkRvbid0IHVzZSBzcGFjZXMgaW4gcGF0aHMsIGl0IGJyZWFrcyB0aGluZ3MuIgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKK2RvbmUKKworIyBXaGVyZSB3aWxsIHdlIHdvcms/CitDVF9XT1JLX0RJUj0iJHtDVF9XT1JLX0RJUjotJHtDVF9UT1BfRElSfS90YXJnZXRzfSIKK0NUX0RvRXhlY0xvZyBBTEwgbWtkaXIgLXAgIiR7Q1RfV09SS19ESVJ9IgorCisjIENoZWNrIGJ1aWxkIGZpbGUgc3lzdGVtIGNhc2Utc2Vuc2l0aXZlbmVzcworQ1RfRG9FeGVjTG9nIERFQlVHIHRvdWNoICIke0NUX1dPUktfRElSfS9mb28iCitDVF9UZXN0QW5kQWJvcnQgIllvdXIgZmlsZSBzeXN0ZW0gaW4gJyR7Q1RfV09SS19ESVJ9JyBpcyAqbm90KiBjYXNlLXNlbnNpdGl2ZSEiIC1mICIke0NUX1dPUktfRElSfS9GT08iCitDVF9Eb0V4ZWNMb2cgREVCVUcgcm0gLWYgIiR7Q1RfV09SS19ESVJ9L2ZvbyIKKworIyBDaGVjayB0aGUgdXNlciBpcyB1c2luZyBhbiBleGlzdGluZyBTSEVMTCB0byBiZSB1c2VkIGJ5IC4vY29uZmlndXJlIGFuZCBNYWtlZmlsZXMKK0NUX1Rlc3RPckFib3J0ICJUaGUgQ09ORklHX1NIRUxMICcke0NUX0NPTkZJR19TSEVMTH0nIGlzIG5vdCB2YWxpZCIgLWYgIiR7Q1RfQ09ORklHX1NIRUxMfSIgLWEgLXggIiR7Q1RfQ09ORklHX1NIRUxMfSIKKworIyBDcmVhdGUgdGhlIGJpbi1vdmVycmlkZSBlYXJseQorIyBDb250YWlucyBzeW1saW5rcyB0byB0aGUgdG9vbHMgZm91bmQgYnkgLi9jb25maWd1cmUKKyMgTm90ZTogQ1RfRG9Mb2cgYW5kIENUX0RvRXhlY0xvZyBkbyBub3QgdXNlIGFueSBvZiB0aG9zZSB0b29sLCBzbworIyB0aGV5IGNhbiBiZSBzYWZlbHkgdXNlZAorQ1RfVE9PTFNfT1ZFUklERV9ESVI9IiR7Q1RfV09SS19ESVJ9L3Rvb2xzIgorQ1RfRG9Mb2cgREVCVUcgIkNyZWF0aW5nIGJpbi1vdmVycmlkZSBmb3IgdG9vbHMgaW4gJyR7Q1RfVE9PTFNfT1ZFUklERV9ESVJ9JyIKK0NUX0RvRXhlY0xvZyBERUJVRyBta2RpciAtcCAiJHtDVF9UT09MU19PVkVSSURFX0RJUn0vYmluIgorY2F0ICIke0NUX0xJQl9ESVJ9L3BhdGhzLm1rIiB8d2hpbGUgcmVhZCB0cmFzaCBsaW5lOyBkbworICAgIHRvb2w9IiR7bGluZSUlPSp9IgorICAgIHBhdGg9IiR7bGluZSMqPX0iCisgICAgQ1RfRG9Mb2cgREVCVUcgIkNyZWF0aW5nIHNjcmlwdC1vdmVycmlkZSBmb3IgJyR7dG9vbH0nIC0+ICcke3BhdGh9JyIKKyAgICBwcmludGYgIiMke0JBTkd9JHtDVF9DT05GSUdfU0hFTEx9XG5leGVjICcke3BhdGh9JyBcIlwke0B9XCJcbiIgPiIke0NUX1RPT0xTX09WRVJJREVfRElSfS9iaW4vJHt0b29sfSIKKyAgICBDVF9Eb0V4ZWNMb2cgQUxMIGNobW9kIDcwMCAiJHtDVF9UT09MU19PVkVSSURFX0RJUn0vYmluLyR7dG9vbH0iCitkb25lCitleHBvcnQgUEFUSD0iJHtDVF9UT09MU19PVkVSSURFX0RJUn0vYmluOiR7UEFUSH0iCisKKyMgU3RhcnQgZGF0ZS4gQ2FuJ3QgYmUgZG9uZSB1bnRpbCB3ZSBrbm93IHRoZSBsb2NhbGUKKyMgQWxzbyByZXF1aXJlcyB0aGUgYmluLW92ZXJyaWRlIHRvb2xzCitDVF9TVEFSX0RBVEU9JChDVF9Eb0RhdGUgKyVzJU4pCitDVF9TVEFSX0RBVEVfSFVNQU49JChDVF9Eb0RhdGUgKyVZJW0lZC4lSCVNJVMpCisKKyMgTG9nIHJlYWwgYmVnaW5pbmcgb2YgYnVpbGQsIG5vdworQ1RfRG9Mb2cgSU5GTyAiQnVpbGQgc3RhcnRlZCAke0NUX1NUQVJfREFURV9IVU1BTn0iCisKKyMgV2UgcmVhbGx5IG5lZWQgdG8gZXh0cmFjdCBmcm9tICxjb25maWcgYW5kIG5vdCAuY29uZmlnLjIsIGFzIHdlCisjIGRvIHdhbnQgdGhlIGtjb25maWcncyB2YWx1ZXMsIG5vdCBvdXIgbWFuZ2xlZCBjb25maWcgd2l0aCBhcnJheXMuCitDVF9Eb1N0ZXAgREVCVUcgIkR1bXBpbmcgdXNlci1zdXBwbGllZCBjcm9zc3Rvb2wtTkcgY29uZmlndXJhdGlvbiIKK0NUX0RvRXhlY0xvZyBERUJVRyBncmVwIC1FICdeKCMgfClDVF8nIC5jb25maWcKK0NUX0VuZFN0ZXAKKworQ1RfRG9Mb2cgREVCVUcgIlVuc2V0dGluZyBhbmQgdW5leHBvcnRpbmcgTUFLRUZMQUdTIgordW5zZXQgTUFLRUZMQUdTCitleHBvcnQgTUFLRUZMQUdTCisKK0NUX0RvTG9nIElORk8gIkJ1aWxkaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyIKKworIyBJbmNsdWRlIHN1Yi1zY3JpcHRzIGluc3RlYWQgb2YgY2FsbGluZyB0aGVtOiB0aGF0IHdheSwgd2UgZG8gbm90IGhhdmUgdG8KKyMgZXhwb3J0IGFueSB2YXJpYWJsZSwgbm9yIHJlLXBhcnNlIHRoZSBjb25maWd1cmF0aW9uIGFuZCBmdW5jdGlvbnMgZmlsZXMuCisuICIke0NUX0xJQl9ESVJ9L3NjcmlwdHMvYnVpbGQvaW50ZXJuYWxzLnNoIgorLiAiJHtDVF9MSUJfRElSfS9zY3JpcHRzL2J1aWxkL2FyY2gvJHtDVF9BUkNIfS5zaCIKKy4gIiR7Q1RfTElCX0RJUn0vc2NyaXB0cy9idWlsZC9jb21wYW5pb25fdG9vbHMuc2giCisuICIke0NUX0xJQl9ESVJ9L3NjcmlwdHMvYnVpbGQva2VybmVsLyR7Q1RfS0VSTkVMfS5zaCIKKy4gIiR7Q1RfTElCX0RJUn0vc2NyaXB0cy9idWlsZC9jb21wYW5pb25fbGlicy9nbXAuc2giCisuICIke0NUX0xJQl9ESVJ9L3NjcmlwdHMvYnVpbGQvY29tcGFuaW9uX2xpYnMvbXBmci5zaCIKKy4gIiR7Q1RfTElCX0RJUn0vc2NyaXB0cy9idWlsZC9jb21wYW5pb25fbGlicy9wcGwuc2giCisuICIke0NUX0xJQl9ESVJ9L3NjcmlwdHMvYnVpbGQvY29tcGFuaW9uX2xpYnMvY2xvb2cuc2giCisuICIke0NUX0xJQl9ESVJ9L3NjcmlwdHMvYnVpbGQvY29tcGFuaW9uX2xpYnMvbXBjLnNoIgorLiAiJHtDVF9MSUJfRElSfS9zY3JpcHRzL2J1aWxkL2NvbXBhbmlvbl9saWJzL2xpYmVsZi5zaCIKKy4gIiR7Q1RfTElCX0RJUn0vc2NyaXB0cy9idWlsZC9iaW51dGlscy9iaW51dGlscy5zaCIKKy4gIiR7Q1RfTElCX0RJUn0vc2NyaXB0cy9idWlsZC9iaW51dGlscy9lbGYyZmx0LnNoIgorLiAiJHtDVF9MSUJfRElSfS9zY3JpcHRzL2J1aWxkL2JpbnV0aWxzL3NzdHJpcC5zaCIKKy4gIiR7Q1RfTElCX0RJUn0vc2NyaXB0cy9idWlsZC9saWJjLyR7Q1RfTElCQ30uc2giCisuICIke0NUX0xJQl9ESVJ9L3NjcmlwdHMvYnVpbGQvY2MvJHtDVF9DQ30uc2giCisuICIke0NUX0xJQl9ESVJ9L3NjcmlwdHMvYnVpbGQvZGVidWcuc2giCisuICIke0NUX0xJQl9ESVJ9L3NjcmlwdHMvYnVpbGQvdGVzdF9zdWl0ZS5zaCIKKworIyBUYXJnZXQgdHVwbGU6IENUX1RBUkdFVCBuZWVkcyBhIGxpdHRsZSBsb3ZlOgorQ1RfRG9CdWlsZFRhcmdldFR1cGxlCisKKyMgS2x1ZGdlOiBJZiBhbnkgb2YgdGhlIGNvbmZpZ3VyZWQgb3B0aW9ucyBuZWVkcyBDVF9UQVJHRVQsCisjIHRoZW4gcmVzY2FuIHRoZSBvcHRpb25zIGZpbGUgbm93OgorLiAuY29uZmlnLjIKKworIyBTYW5pdHkgY2hlY2sgc29tZSBkaXJlY3RvcmllcworQ1RfVGVzdEFuZEFib3J0ICInQ1RfUFJFRklYX0RJUicgaXMgbm90IHNldDogd2hlcmUgc2hvdWxkIEkgaW5zdGFsbD8iIC16ICIke0NUX1BSRUZJWF9ESVJ9IgorCisjIFNlY29uZCBrbHVkZ2U6IG1lcmdlIHVzZXItc3VwcGxpZWQgdGFyZ2V0IENGTEFHUyB3aXRoIGFyY2hpdGVjdHVyZS1wcm92aWRlZAorIyB0YXJnZXQgQ0ZMQUdTLiBEbyB0aGUgc2FtZSBmb3IgTERGTEFHUyBpbiBjYXNlIGl0IGhhcHBlbnMgaW4gdGhlIGZ1dHVyZS4KKyMgUHV0IHVzZXItc3VwcGxpZWQgZmxhZ3MgYXQgdGhlIGVuZCwgc28gdGhhdCB0aGV5IHRha2UgcHJlY2VkZW5jZS4KK0NUX1RBUkdFVF9DRkxBR1M9IiR7Q1RfQVJDSF9UQVJHRVRfQ0ZMQUdTfSAke0NUX1RBUkdFVF9DRkxBR1N9IgorQ1RfVEFSR0VUX0xERkxBR1M9IiR7Q1RfQVJDSF9UQVJHRVRfTERGTEFHU30gJHtDVF9UQVJHRVRfTERGTEFHU30iCitDVF9DQ19DT1JFX0VYVFJBX0NPTkZJR19BUlJBWT0oICR7Q1RfQVJDSF9DQ19DT1JFX0VYVFJBX0NPTkZJR30gIiR7Q1RfQ0NfQ09SRV9FWFRSQV9DT05GSUdfQVJSQVlbQF19IiApCitDVF9DQ19FWFRSQV9DT05GSUdfQVJSQVk9KCAke0NUX0FSQ0hfQ0NfRVhUUkFfQ09ORklHfSAiJHtDVF9DQ19FWFRSQV9DT05GSUdfQVJSQVlbQF19IiApCisKKyMgQ29tcHV0ZSB0aGUgcGFja2FnZSB2ZXJzaW9uIHN0cmluZworQ1RfUEtHVkVSU0lPTj0iY3Jvc3N0b29sLU5HICR7Q1RfVkVSU0lPTn0ke0NUX1RPT0xDSEFJTl9QS0dWRVJTSU9OOisgLSAke0NUX1RPT0xDSEFJTl9QS0dWRVJTSU9OfX0iCisKKyMgQ29tcHV0ZSB0aGUgd29ya2luZyBkaXJlY3RvcmllcyBuYW1lcworQ1RfVEFSQkFMTFNfRElSPSIke0NUX1dPUktfRElSfS90YXJiYWxscyIKK0NUX1NSQ19ESVI9IiR7Q1RfV09SS19ESVJ9L3NyYyIKK0NUX0JVSUxEX0RJUj0iJHtDVF9XT1JLX0RJUn0vJHtDVF9UQVJHRVR9L2J1aWxkIgorQ1RfQlVJTERUT09MU19QUkVGSVhfRElSPSIke0NUX1dPUktfRElSfS8ke0NUX1RBUkdFVH0vYnVpbGR0b29scyIKK0NUX1NUQVRFX0RJUj0iJHtDVF9XT1JLX0RJUn0vJHtDVF9UQVJHRVR9L3N0YXRlIgorQ1RfQ09ORklHX0RJUj0iJHtDVF9CVUlMRF9ESVJ9L2NvbmZpZ3MiCitDVF9DT01QTElCU19ESVI9IiR7Q1RfQlVJTERfRElSfS9zdGF0aWMiCisKKyMgQ29tcHV0ZSB0ZXN0IHN1aXRlIGluc3RhbGwgZGlyZWN0b3J5CitDVF9URVNUX1NVSVRFX0RJUj0ke0NUX0lOU1RBTExfRElSfS90ZXN0LXN1aXRlCisKKyMgTm90ZTogd2UnbGwgYWx3YXlzIGluc3RhbGwgdGhlIGNvcmUgY29tcGlsZXIgaW4gaXRzIG93biBkaXJlY3RvcnksIHNvIGFzIHRvCisjIG5vdCBtaXggdGhlIHR3byBidWlsZHM6IGNvcmUgYW5kIGZpbmFsLgorQ1RfQ0NfQ09SRV9TVEFUSUNfUFJFRklYX0RJUj0iJHtDVF9CVUlMRF9ESVJ9LyR7Q1RfQ0N9LWNvcmUtc3RhdGljIgorQ1RfQ0NfQ09SRV9TSEFSRURfUFJFRklYX0RJUj0iJHtDVF9CVUlMRF9ESVJ9LyR7Q1RfQ0N9LWNvcmUtc2hhcmVkIgorCisjIFdlIG11c3QgZW5zdXJlIHRoYXQgd2UgY2FuIHJlc3RhcnQgaWYgYXNrZWQgZm9yIQoraWYgWyAtbiAiJHtDVF9SRVNUQVJUfSIgLWEgISAtZCAiJHtDVF9TVEFURV9ESVJ9IiAgXTsgdGhlbgorICAgIENUX0RvTG9nIEVSUk9SICJZb3UgYXNrZWQgdG8gcmVzdGFydCBhIG5vbi1yZXN0YXJ0YWJsZSBidWlsZCIKKyAgICBDVF9Eb0xvZyBFUlJPUiAiVGhpcyBoYXBwZW5lZCBiZWNhdXNlIHlvdSBkaWRuJ3Qgc2V0IENUX0RFQlVHX0NUX1NBVkVfU1RFUFMiCisgICAgQ1RfRG9Mb2cgRVJST1IgImluIHRoZSBjb25maWcgb3B0aW9ucyBmb3IgdGhlIHByZXZpb3VzIGJ1aWxkLCBvciB0aGUgc3RhdGUiCisgICAgQ1RfRG9Mb2cgRVJST1IgImRpcmVjdG9yeSBmb3IgdGhlIHByZXZpb3VzIGJ1aWxkIHdhcyBkZWxldGVkLiIKKyAgICBDVF9BYm9ydCAiSSB3aWxsIHN0b3AgaGVyZSB0byBhdm9pZCBhbnkgY2FybmFnZSIKK2ZpCisKKyMgSWYgdGhlIGxvY2FsIHRhcmJhbGwgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LCBzYXkgc28sIGFuZCBkb24ndCB0cnkgdG8gc2F2ZSB0aGVyZSEKK2lmIFsgICAgIiR7Q1RfU0FWRV9UQVJCQUxMU30iID0gInkiICAgICBcCisgICAgIC1hICEgLWQgIiR7Q1RfTE9DQUxfVEFSQkFMTFNfRElSfSIgXTsgdGhlbgorICAgIENUX0RvTG9nIFdBUk4gIkRpcmVjdG9yeSAnJHtDVF9MT0NBTF9UQVJCQUxMU19ESVJ9JyBkb2VzIG5vdCBleGlzdC4iCisgICAgQ1RfRG9Mb2cgV0FSTiAiV2lsbCBub3Qgc2F2ZSBkb3dubG9hZGVkIHRhcmJhbGxzIHRvIGxvY2FsIHN0b3JhZ2UuIgorICAgIENUX1NBVkVfVEFSQkFMTFM9CitmaQorCisjIENoZWNrIG5vdyBpZiB3ZSBjYW4gd3JpdGUgdG8gdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeToKK2lmIFsgLWQgIiR7Q1RfSU5TVEFMTF9ESVJ9IiBdOyB0aGVuCisgICAgQ1RfVGVzdEFuZEFib3J0ICJEZXN0aW5hdGlvbiBkaXJlY3RvcnkgJyR7Q1RfSU5TVEFMTF9ESVJ9JyBpcyBub3QgcmVtb3ZhYmxlIiAhIC13ICQoZGlybmFtZSAiJHtDVF9JTlNUQUxMX0RJUn0iKQorZmkKKworIyBHb29kLCBub3cgZ3JhYiBhIGJpdCBvZiBpbmZvcm1hdGlvbnMgb24gdGhlIHN5c3RlbSB3ZSdyZSBiZWluZyBydW4gb24sCisjIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBhd29rLCBhbmQgaXQncyBub3Qgb3VyIGZhdWx0OgorQ1RfU1lTX1VTRVI9JChpZCAtdW4pCitDVF9TWVNfSE9TVE5BTUU9JChob3N0bmFtZSAtZiAyPi9kZXYvbnVsbCB8fCB0cnVlKQorIyBIbW1tLiBTb21lIG5vbi1ESENQLWVuYWJsZWQgbWFjaGluZXMgZG8gbm90IGhhdmUgYW4gRlFETi4uLiBGYWxsIGJhY2sgdG8gbm9kZSBuYW1lLgorQ1RfU1lTX0hPU1ROQU1FPSIke0NUX1NZU19IT1NUTkFNRTotJCh1bmFtZSAtbil9IgorQ1RfU1lTX0tFUk5FTD0kKHVuYW1lIC1zKQorQ1RfU1lTX1JFVklTSU9OPSQodW5hbWUgLXIpCitDVF9TWVNfT1M9JCh1bmFtZSAtcykKK0NUX1NZU19NQUNISU5FPSQodW5hbWUgLW0pCitDVF9TWVNfUFJPQ0VTU09SPSQodW5hbWUgLXApCitDVF9TWVNfR0NDPSQoZ2NjIC1kdW1wdmVyc2lvbikKK0NUX1NZU19UQVJHRVQ9JChDVF9Eb0NvbmZpZ0d1ZXNzKQorQ1RfVE9PTENIQUlOX0lEPSJjcm9zc3Rvb2wtJHtDVF9WRVJTSU9OfSBidWlsZCAke0NUX1NUQVJfREFURV9IVU1BTn0gYnkgJHtDVF9TWVNfVVNFUn1AJHtDVF9TWVNfSE9TVE5BTUV9IgorCitDVF9Eb0xvZyBFWFRSQSAiUHJlcGFyaW5nIHdvcmtpbmcgZGlyZWN0b3JpZXMiCisKKyMgQWghIFRoZSBidWlsZCBkaXJlY3Rvcnkgc2hhbGwgYmUgZXJhZGljYXRlZCwgZXZlbiBpZiB3ZSByZXN0YXJ0IQorIyBEaXR0byBmb3IgdGhlIGJ1aWxkIHRvb2xzIGluc3RhbGwgZGlyCitDVF9Eb0ZvcmNlUm1kaXIgIiR7Q1RfQlVJTERfRElSfSIgIiR7Q1RfQlVJTERUT09MU19QUkVGSVhfRElSfSIKKworIyBEb24ndCBlcmFkaWNhdGUgZGlyZWN0b3JpZXMgaWYgd2UgbmVlZCB0byByZXN0YXJ0CitpZiBbIC16ICIke0NUX1JFU1RBUlR9IiBdOyB0aGVuCisgICAgIyBHZXQgcmlkIG9mIHByZS1leGlzdGluZyBpbnN0YWxsZWQgdG9vbGNoYWluIGFuZCBwcmV2aW91cyBidWlsZCBkaXJlY3Rvcmllcy4KKyAgICBpZiBbICIke0NUX0ZPUkNFX0RPV05MT0FEfSIgPSAieSIgLWEgLWQgIiR7Q1RfVEFSQkFMTFNfRElSfSIgXTsgdGhlbgorICAgICAgICBDVF9Eb0ZvcmNlUm1kaXIgIiR7Q1RfVEFSQkFMTFNfRElSfSIKKyAgICBmaQorICAgIGlmIFsgIiR7Q1RfRk9SQ0VfRVhUUkFDVH0iID0gInkiIC1hIC1kICIke0NUX1NSQ19ESVJ9IiBdOyB0aGVuCisgICAgICAgIENUX0RvRm9yY2VSbWRpciAiJHtDVF9TUkNfRElSfSIKKyAgICBmaQorICAgIGlmIFsgLWQgIiR7Q1RfSU5TVEFMTF9ESVJ9IiAtYSAiJHtDVF9STV9SRl9QUkVGSVhfRElSfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBDVF9Eb0ZvcmNlUm1kaXIgIiR7Q1RfSU5TVEFMTF9ESVJ9IgorICAgIGZpCisgICAgIyBJbiBjYXNlIHdlIHN0YXJ0IGFuZXcsIGdldCByaWQgb2YgdGhlIHByZXZpb3VzbHkgc2F2ZWQgc3RhdGUgZGlyZWN0b3J5CisgICAgaWYgWyAtZCAiJHtDVF9TVEFURV9ESVJ9IiBdOyB0aGVuCisgICAgICAgIENUX0RvRm9yY2VSbWRpciAiJHtDVF9TVEFURV9ESVJ9IgorICAgIGZpCitmaQorCisjIENyZWF0ZSB0aGUgZGlyZWN0b3JpZXMgd2UnbGwgdXNlLCBldmVuIGlmIHJlc3RhcnRpbmc6IGl0IGRvZXMgbm8gaGFybSB0bworIyBjcmVhdGUgYWxyZWFkeSBleGlzdGVudCBkaXJlY3RvcmllcywgYW5kIENUX0JVSUxEX0RJUiBuZWVkcyB0byBiZSBjcmVhdGVkCisjIGFueXdheQorQ1RfRG9FeGVjTG9nIEFMTCBta2RpciAtcCAiJHtDVF9UQVJCQUxMU19ESVJ9IgorQ1RfRG9FeGVjTG9nIEFMTCBta2RpciAtcCAiJHtDVF9TUkNfRElSfSIKK0NUX0RvRXhlY0xvZyBBTEwgbWtkaXIgLXAgIiR7Q1RfQlVJTERfRElSfSIKK0NUX0RvRXhlY0xvZyBBTEwgbWtkaXIgLXAgIiR7Q1RfQlVJTERUT09MU19QUkVGSVhfRElSfS9iaW4iCitDVF9Eb0V4ZWNMb2cgQUxMIG1rZGlyIC1wICIke0NUX0NPTkZJR19ESVJ9IgorQ1RfRG9FeGVjTG9nIEFMTCBta2RpciAtcCAiJHtDVF9JTlNUQUxMX0RJUn0iCitDVF9Eb0V4ZWNMb2cgQUxMIG1rZGlyIC1wICIke0NUX1BSRUZJWF9ESVJ9IgorQ1RfRG9FeGVjTG9nIEFMTCBta2RpciAtcCAiJHtDVF9DT01QTElCU19ESVJ9IgoraWYgWyAteiAiJHtDVF9DQU5BRElBTn0iIF07IHRoZW4KKyAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1rZGlyIC1wICIke0NUX0NDX0NPUkVfU1RBVElDX1BSRUZJWF9ESVJ9IgorICAgIENUX0RvRXhlY0xvZyBBTEwgbWtkaXIgLXAgIiR7Q1RfQ0NfQ09SRV9TSEFSRURfUFJFRklYX0RJUn0iCitmaQorCisjIE9ubHkgY3JlYXRlIHRoZSBzdGF0ZSBkaXIgaWYgYXNrZWQgZm9yIGEgcmVzdGFydGFibGUgYnVpbGQKK1sgLW4gIiR7Q1RfREVCVUdfQ1RfU0FWRV9TVEVQU30iIF0gJiYgQ1RfRG9FeGVjTG9nIEFMTCBta2RpciAtcCAiJHtDVF9TVEFURV9ESVJ9IgorCisjIENoZWNrIGluc3RhbGwgZmlsZSBzeXN0ZW0gY2FzZS1zZW5zaXRpdmVuZXNzCitDVF9Eb0V4ZWNMb2cgREVCVUcgdG91Y2ggIiR7Q1RfUFJFRklYX0RJUn0vZm9vIgorQ1RfVGVzdEFuZEFib3J0ICJZb3VyIGZpbGUgc3lzdGVtIGluICcke0NUX1BSRUZJWF9ESVJ9JyBpcyAqbm90KiBjYXNlLXNlbnNpdGl2ZSEiIC1mICIke0NUX1BSRUZJWF9ESVJ9L0ZPTyIKK0NUX0RvRXhlY0xvZyBERUJVRyBybSAtZiAiJHtDVF9QUkVGSVhfRElSfS9mb28iCisKKyMgS2x1ZGdlOiBDVF9JTlNUQUxMX0RJUiBhbmQgQ1RfUFJFRklYX0RJUiBtaWdodCBoYXZlIGdyb3duIHJlYWQtb25seSBpZgorIyB0aGUgcHJldmlvdXMgYnVpbGQgd2FzIHN1Y2Nlc3NmdWwuCitDVF9Eb0V4ZWNMb2cgQUxMIGNobW9kIC1SIHUrdyAiJHtDVF9JTlNUQUxMX0RJUn0iICIke0NUX1BSRUZJWF9ESVJ9IgorCisjIFNldHRpbmcgdXAgdGhlIHJlc3Qgb2YgdGhlIGVudmlyb25tZW50IG9ubHkgaWYgbm90IHJlc3RhcnRpbmcKK2lmIFsgLXogIiR7Q1RfUkVTVEFSVH0iIF07IHRoZW4KKyAgICBjYXNlICIke0NUX1NZU1JPT1RfTkFNRX0iIGluCisgICAgICAgICIiKSAgICAgQ1RfU1lTUk9PVF9OQU1FPSJzeXNyb290Ijs7CisgICAgICAgIC4pICAgICAgQ1RfQWJvcnQgIlN5c3Jvb3QgbmFtZSBpcyBzZXQgdG8gJy4nIHdoaWNoIGlzIGZvcmJpZGRlbiI7OworICAgICAgICAqJyAnKikgIENUX0Fib3J0ICJTeXNyb290IG5hbWUgY29udGFpbnMgZm9yYmlkZGVuIHNwYWNlKHMpOiAnJHtDVF9TWVNST09UX05BTUV9JyI7OworICAgICAgICAqLyopICAgIENUX0Fib3J0ICJTeXNyb290IG5hbWUgY29udGFpbnMgZm9yYmlkZGVuIHNsYXNoKGVzKTogJyR7Q1RfU1lTUk9PVF9OQU1FfSciOzsKKyAgICBlc2FjCisKKyAgICAjIEFycmFuZ2UgcGF0aHMgZGVwZW5kaW5nIG9uIHdldGhlciB3ZSB1c2Ugc3lzcm9vdCBvciBub3QuCisgICAgaWYgWyAiJHtDVF9VU0VfU1lTUk9PVH0iID0gInkiIF07IHRoZW4KKyAgICAgICAgQ1RfU1lTUk9PVF9SRUxfRElSPSIke0NUX1NZU1JPT1RfRElSX1BSRUZJWDorJHtDVF9TWVNST09UX0RJUl9QUkVGSVh9L30ke0NUX1NZU1JPT1RfTkFNRX0iCisgICAgICAgIENUX1NZU1JPT1RfRElSPSIke0NUX1BSRUZJWF9ESVJ9LyR7Q1RfVEFSR0VUfS8ke0NUX1NZU1JPT1RfUkVMX0RJUn0iCisgICAgICAgIENUX0RFQlVHUk9PVF9ESVI9IiR7Q1RfUFJFRklYX0RJUn0vJHtDVF9UQVJHRVR9LyR7Q1RfU1lTUk9PVF9ESVJfUFJFRklYfS9kZWJ1Zy1yb290IgorICAgICAgICBDVF9IRUFERVJTX0RJUj0iJHtDVF9TWVNST09UX0RJUn0vdXNyL2luY2x1ZGUiCisgICAgICAgIENUX1Nhbml0aXNlVmFyRGlyIENUX1NZU1JPT1RfUkVMX0RJUiBDVF9TWVNST09UX0RJUiBDVF9ERUJVR1JPT1RfRElSIENUX0hFQURFUlNfRElSIAorICAgICAgICBCSU5VVElMU19TWVNST09UX0FSRz0iLS13aXRoLXN5c3Jvb3Q9JHtDVF9TWVNST09UX0RJUn0iCisgICAgICAgIENDX0NPUkVfU1lTUk9PVF9BUkc9Ii0td2l0aC1zeXNyb290PSR7Q1RfU1lTUk9PVF9ESVJ9IgorICAgICAgICBDQ19TWVNST09UX0FSRz0iLS13aXRoLXN5c3Jvb3Q9JHtDVF9TWVNST09UX0RJUn0iCisgICAgICAgIExJQkNfU1lTUk9PVF9BUkc9IiIKKyAgICAgICAgIyBnbGliYydzIHByZWZpeCBtdXN0IGJlIGV4YWN0bHkgL3VzciwgZWxzZSAtLXdpdGgtc3lzcm9vdCdkIGdjYyB3aWxsIGdldAorICAgICAgICAjIGNvbmZ1c2VkIHdoZW4gJHN5c3Jvb3QvdXNyL2luY2x1ZGUgaXMgbm90IHByZXNlbnQuCisgICAgICAgICMgTm90ZTogLS1wcmVmaXg9L3VzciBpcyBtYWdpYyEKKyAgICAgICAgIyBTZWUgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmMvRkFRLmh0bWwjcy0yLjIKKyAgICBlbHNlCisgICAgICAgICMgcGxhaW4gb2xkIHdheS4gQWxsIGxpYnJhcmllcyBpbiBwcmVmaXgvdGFyZ2V0L2xpYgorICAgICAgICBDVF9TWVNST09UX0RJUj0iJHtDVF9QUkVGSVhfRElSfS8ke0NUX1RBUkdFVH0iCisgICAgICAgIENUX0RFQlVHUk9PVF9ESVI9IiR7Q1RfU1lTUk9PVF9ESVJ9IgorICAgICAgICBDVF9IRUFERVJTX0RJUj0iJHtDVF9TWVNST09UX0RJUn0vaW5jbHVkZSIKKyAgICAgICAgQ1RfU2FuaXRpc2VWYXJEaXIgQ1RfU1lTUk9PVF9ESVIgQ1RfREVCVUdST09UX0RJUiBDVF9IRUFERVJTX0RJUiAKKyAgICAgICAgIyBoYWNrISAgQWx3YXlzIHVzZSAtLXdpdGgtc3lzcm9vdCBmb3IgYmludXRpbHMuCisgICAgICAgICMgYmludXRpbHMgMi4xNCBhbmQgbGF0ZXIgb2JleSBpdCwgb2xkZXIgYmludXRpbHMgaWdub3JlIGl0LgorICAgICAgICAjIExldHMgeW91IGJ1aWxkIGEgd29ya2luZyAzMi0+NjQgYml0IGNyb3NzIGdjYworICAgICAgICBCSU5VVElMU19TWVNST09UX0FSRz0iLS13aXRoLXN5c3Jvb3Q9JHtDVF9TWVNST09UX0RJUn0iCisgICAgICAgICMgVXNlIC0td2l0aC1oZWFkZXJzLCBlbHNlIGZpbmFsIGdjYyB3aWxsIGRlZmluZSBkaXNhYmxlX2dsaWJjIHdoaWxlCisgICAgICAgICMgYnVpbGRpbmcgbGliZ2NjLCBhbmQgeW91J2xsIGhhdmUgbm8gcHJvZmlsaW5nCisgICAgICAgIENDX0NPUkVfU1lTUk9PVF9BUkc9Ii0td2l0aG91dC1oZWFkZXJzIgorICAgICAgICBDQ19TWVNST09UX0FSRz0iLS13aXRoLWhlYWRlcnM9JHtDVF9IRUFERVJTX0RJUn0iCisgICAgICAgIExJQkNfU1lTUk9PVF9BUkc9InByZWZpeD0iCisgICAgZmkKKyAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1rZGlyIC1wICIke0NUX1NZU1JPT1RfRElSfSIKKyAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1rZGlyIC1wICIke0NUX0RFQlVHUk9PVF9ESVJ9IgorCisgICAgIyBQcmVwYXJlIHRoZSAnbGliJyBkaXJlY3RvcmllcyBpbiBzeXNyb290LCBlbHNlIHRoZSAuLi9saWI2NCBoYWNrIHVzZWQgYnkKKyAgICAjIDMyIC0+IDY0IGJpdCBjcm9zc2NvbXBpbGVycyB3b24ndCB3b3JrLCBhbmQgYnVpbGQgb2YgZmluYWwgZ2NjIHdpbGwgZmFpbAorICAgICMgd2l0aDogImxkOiBjYW5ub3Qgb3BlbiBjcnRpLm86IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiCisgICAgIyBBbHNvIHByZXBhcmUgdGhlIGxpYiBkaXJlY3RvcnkgaW4gdGhlIGluc3RhbGwgZGlyLCBlbHNlIHNvbWUgNjQgYml0IGFyY2hzCisgICAgIyB3b24ndCBidWlsZAorICAgIENUX0RvRXhlY0xvZyBBTEwgbWtkaXIgLXAgIiR7Q1RfUFJFRklYX0RJUn0vbGliIgorICAgIENUX0RvRXhlY0xvZyBBTEwgbWtkaXIgLXAgIiR7Q1RfU1lTUk9PVF9ESVJ9L2xpYiIKKyAgICBDVF9Eb0V4ZWNMb2cgQUxMIG1rZGlyIC1wICIke0NUX1NZU1JPT1RfRElSfS91c3IvbGliIgorICAgIENUX0RvRXhlY0xvZyBBTEwgbWtkaXIgLXAgIiR7Q1RfSEVBREVSU19ESVJ9IgorCisgICAgaWYgWyAiJHtDVF9VU0VfU1lTUk9PVH0iID0gInkiIF07IHRoZW4KKyAgICAgICAgIyBQcmV2ZW50IGdjYyBmcm9tIGluc3RhbGxpbmcgaXRzIGxpYnJhcmllcyBvdXRzaWRlIG9mIHRoZSBzeXNyb290CisgICAgICAgIENUX1B1c2hkICIke0NUX1BSRUZJWF9ESVJ9LyR7Q1RfVEFSR0VUfSIKKyAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCBsbiAtc2YgIiR7Q1RfU1lTUk9PVF9SRUxfRElSfS9saWIiICJsaWIiCisgICAgICAgIENUX1BvcGQKKyAgICBmaQorCisgICAgIyBTaW5jZSB3ZSdyZSAqbm90KiBtdWx0aWxpYiBvbiB0aGUgdGFyZ2V0IHNpZGUsIHdlIHdhbnQgYWxsIHRoZQorICAgICMgbGlicmFyaWVzIHRvIGVuZCB1cCBpbiAibGliIi4gIFdlIGNyZWF0ZSAibGliNjQiIChmb3IgNjQtYml0CisgICAgIyBidWlsZCBvciBob3N0IGFyY2hpdGVjdHVyZXMpIGFuZCAibGliMzIiIChmb3IgMzItYml0IGVtdWxhdGlvbgorICAgICMgb24gNjQtYml0KSBhcyBzeW1saW5rcyB0byAibGliIi4KKyAgICAjCisgICAgIyBOb3QgYWxsIG9mIHRoZXNlIHN5bWxpbmtzIGFyZSBuZWNlc3NhcnksIGJ1dCBiZXR0ZXIgc2FmZSB0aGFuCisgICAgIyBzb3JyeS4gVGhleSBhcmUgc3VtbWFyaWx5IHJlbW92ZWQgYnkgYnVpbGQvaW50ZXJuYWxzLnNoOmRvX2ZpbmlzaC4KKyAgICBmb3IgZCBpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICIke0NUX1BSRUZJWF9ESVJ9IiAgICAgICAgICAgICAgXAorICAgICAgICAiJHtDVF9TWVNST09UX0RJUn0iICAgICAgICAgICAgIFwKKyAgICAgICAgIiR7Q1RfU1lTUk9PVF9ESVJ9L3VzciIgICAgICAgICBcCisgICAgICAgICIke0NUX1BSRUZJWF9ESVJ9LyR7Q1RfVEFSR0VUfSIgXAorICAgIDsgZG8KKyAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCBsbiAtc2YgImxpYiIgIiR7ZH0vbGliMzIiCisgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgbG4gLXNmICJsaWIiICIke2R9L2xpYjY0IgorICAgIGRvbmUKKworICAgICMgRGV0ZXJtaW5lIGJ1aWxkIHN5c3RlbSBpZiBub3Qgc2V0IGJ5IHRoZSB1c2VyCisgICAgaWYgWyAteiAiJHtDVF9CVUlMRH0iIF07IHRoZW4KKyAgICAgICAgQ1RfQlVJTEQ9JChDVF9Eb0NvbmZpZ0d1ZXNzKQorICAgIGZpCisKKyAgICAjIFByZXBhcmUgbWFuZ2xpbmcgcGF0dGVybnMgdG8gbGF0ZXIgbW9kaWZ5IEJVSUxEIGFuZCBIT1NUIChzZWUgYmVsb3cpCisgICAgY2FzZSAiJHtDVF9UT09MQ0hBSU5fVFlQRX0iIGluCisgICAgICAgIGNyb3NzKQorICAgICAgICAgICAgIyBBIGNyb3NzLWNvbXBpbGVyIHJ1bnMgb24gdGhlIHNhbWUgbWFjaGluZSBpdCBpcyBidWlsdCBvbgorICAgICAgICAgICAgQ1RfSE9TVD0iJHtDVF9CVUlMRH0iCisgICAgICAgICAgICBidWlsZF9tYW5nbGU9ImJ1aWxkXyIKKyAgICAgICAgICAgIGhvc3RfbWFuZ2xlPSJidWlsZF8iCisgICAgICAgICAgICB0YXJnZXRfbWFuZ2xlPSIiCisgICAgICAgICAgICBpbnN0YWxsX2J1aWxkX3Rvb2xzX2Zvcj0iQlVJTEQgSE9TVCIKKyAgICAgICAgICAgIDs7CisgICAgICAgIGNhbmFkaWFuKQorICAgICAgICAgICAgYnVpbGRfbWFuZ2xlPSJidWlsZF8iCisgICAgICAgICAgICBob3N0X21hbmdsZT0iaG9zdF8iCisgICAgICAgICAgICB0YXJnZXRfbWFuZ2xlPSIiCisgICAgICAgICAgICBpbnN0YWxsX2J1aWxkX3Rvb2xzX2Zvcj0iQlVJTEQgSE9TVCBUQVJHRVQiCisgICAgICAgICAgICA7OworICAgICAgICAqKSAgQ1RfQWJvcnQgIk5vIGNvZGUgZm9yICcke0NUX1RPT0xDSEFJTl9UWVBFfScgdG9vbGNoYWluIHR5cGUhIgorICAgICAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIFNhdmUgdGhlIHJlYWwgdHVwbGVzIHRvIGdlbmVyYXRlIHNoZWxsLXdyYXBwZXJzIHRvIHRoZSByZWFsIHRvb2xzCisgICAgQ1RfUkVBTF9CVUlMRD0iJHtDVF9CVUlMRH0iCisgICAgQ1RfUkVBTF9IT1NUPSIke0NUX0hPU1R9IgorICAgIENUX1JFQUxfVEFSR0VUPSIke0NUX1RBUkdFVH0iCisKKyAgICAjIENhbm9uaWNhbGlzZSBDVF9CVUlMRCBhbmQgQ1RfSE9TVAorICAgICMgTm90IG9ubHkgd2lsbCBpdCBnaXZlIHVzIGZ1bGwtcXVhbGlmaWVkIHR1cGxlcywgYnV0IGl0IHdpbGwgYWxzbyBlbnN1cmUKKyAgICAjIHRoYXQgdGhleSBhcmUgdmFsaWQgdHVwbGVzIChpbiBjYXNlIG9mIHR5cG8gd2l0aCB1c2VyLXByb3ZpZGVkIHR1cGxlcykKKyAgICAjIFRoYXQncyB3YXkgYmV0dGVyIHRoYW4gdHJ5aW5nIHRvIHJld3JpdGUgY29uZmlnLnN1YiBvdXJzZWx2ZXMuLi4KKyAgICAjIENUX1RBUkdFVCBpcyBhbHJlYWR5IG1hZGUgY2Fub25pY2FsIGluIENUX0RvQnVpbGRUYXJnZXRUdXBsZQorICAgIENUX0JVSUxEPSQoQ1RfRG9Db25maWdTdWIgIiR7Q1RfQlVJTER9IikKKyAgICBDVF9IT1NUPSQoQ1RfRG9Db25maWdTdWIgIiR7Q1RfSE9TVH0iKQorCisgICAgIyBNb2RpZnkgQlVJTEQgYW5kIEhPU1Qgc28gdGhhdCBnY2MgYWx3YXlzIGdlbmVyYXRlIGEgY3Jvc3MtY29tcGlsZXIKKyAgICAjIGV2ZW4gaWYgYW55IG9mIHRoZSBidWlsZCwgaG9zdCBvciB0YXJnZXQgbWFjaGluZXMgYXJlIHRoZSBzYW1lLgorICAgICMgTk9URTogd2UnbGwgaGF2ZSB0byBtYW5nbGUgdGhlIChCVUlMRHxIT1NUKS0+VEFSR0VUIHgtY29tcGlsZXIgdG8KKyAgICAjICAgICAgIHN1cHBvcnQgY2FuYWRhaW4gYnVpbGQsIGxhdGVyLi4uCisgICAgQ1RfQlVJTEQ9IiR7Q1RfQlVJTEQvLS8tJHtidWlsZF9tYW5nbGV9fSIKKyAgICBDVF9IT1NUPSIke0NUX0hPU1QvLS8tJHtob3N0X21hbmdsZX19IgorICAgIENUX1RBUkdFVD0iJHtDVF9UQVJHRVQvLS8tJHt0YXJnZXRfbWFuZ2xlfX0iCisKKyAgICAjIE5vdyB3ZSBoYXZlIG1hbmdsZWQgb3VyIEJVSUxEIGFuZCBIT1NUIHR1cGxlcywgd2UgbXVzdCBmYWtlIHRoZSBuZXcKKyAgICAjIGNyb3NzLXRvb2xzIGZvciB0aG9zZSBtYW5nbGVkIHR1cGxlcy4KKyAgICBDVF9Eb0xvZyBERUJVRyAiTWFraW5nIGJ1aWxkIHN5c3RlbSB0b29scyBhdmFpbGFibGUiCisgICAgZm9yIG0gaW4gJHtpbnN0YWxsX2J1aWxkX3Rvb2xzX2Zvcn07IGRvCisgICAgICAgIHI9IkNUX1JFQUxfJHttfSIKKyAgICAgICAgdj0iQ1RfJHttfSIKKyAgICAgICAgcD0iQ1RfJHttfV9QUkVGSVgiCisgICAgICAgIHM9IkNUXyR7bX1fU1VGRklYIgorICAgICAgICBpZiBbIC1uICIkeyFwfSIgXTsgdGhlbgorICAgICAgICAgICAgdD0iJHshcH0iCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHQ9IiR7IXJ9LSIKKyAgICAgICAgZmkKKworICAgICAgICBmb3IgdG9vbCBpbiBhciBhcyBkbGx0b29sIGdjYyBnKysgZ2NqIGduYXRiaW5kIGduYXRtYWtlIGxkIG5tIG9iamNvcHkgb2JqZHVtcCByYW5saWIgc3RyaXAgd2luZHJlczsgZG8KKyAgICAgICAgICAgICMgRmlyc3QgdHJ5IHdpdGggcHJlZml4ICsgc3VmZml4CisgICAgICAgICAgICAjIFRoZW4gdHJ5IHdpdGggcHJlZml4IG9ubHkKKyAgICAgICAgICAgICMgVGhlbiB0cnkgd2l0aCBzdWZmaXggb25seSwgYnV0IG9ubHkgZm9yIEJVSUxELCBhbmQgSE9TVCBpZmYgUkVBTF9CVUlMRCA9PSBSRUFMX0hPU1QKKyAgICAgICAgICAgICMgRmluYWxseSB0cnkgd2l0aCBuZWl0aGVyIHByZWZpeCBub3Igc3VmZml4LCBidXQgb25seSBmb3IgQlVJTEQsIGFuZCBIT1NUIGlmZiBSRUFMX0JVSUxEID09IFJFQUxfSE9TVAorICAgICAgICAgICAgIyBUaGlzIGlzIG5lZWRlZCwgYmVjYXVzZSBzb21lIHRvb2xzIGhhdmUgYSBwcmVmaXggYW5kCisgICAgICAgICAgICAjIGEgc3VmZml4IChlZy4gZ2NjKSwgd2hpbGUgb3RoZXJzIG1heSBoYXZlIG9ubHkgb25lLAorICAgICAgICAgICAgIyBvciBldmVuIG5vbmUgKGVnLiBiaW51dGlscykKKyAgICAgICAgICAgIHdoZXJlPSQoQ1RfV2hpY2ggIiR7dH0ke3Rvb2x9JHshc30iKQorICAgICAgICAgICAgWyAteiAiJHt3aGVyZX0iIF0gJiYgd2hlcmU9JChDVF9XaGljaCAiJHt0fSR7dG9vbH0iKQorICAgICAgICAgICAgaWYgWyAgICAteiAiJHt3aGVyZX0iICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgLWEgXCggICAgIiR7bX0iID0gIkJVSUxEIiAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgIC1vICIke0NUX1JFQUxfQlVJTER9IiA9ICIkeyFyfSIgXCkgXTsgdGhlbgorICAgICAgICAgICAgICAgIHdoZXJlPSQoQ1RfV2hpY2ggIiR7dG9vbH0keyFzfSIpCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgaWYgWyAteiAiJHt3aGVyZX0iICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgLWEgXCggICAgIiR7bX0iID0gIkJVSUxEIiAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgIC1vICIke0NUX1JFQUxfQlVJTER9IiA9ICIkeyFyfSIgXCkgXTsgdGhlbgorICAgICAgICAgICAgICAgIHdoZXJlPSQoQ1RfV2hpY2ggIiR7dG9vbH0iKQorICAgICAgICAgICAgZmkKKworICAgICAgICAgICAgIyBOb3QgYWxsIHRvb2xzIGFyZSBhdmFpbGFibGUgZm9yIGFsbCBwbGF0Zm9ybXMsIGJ1dCBzb21lIGFyZSByZWFsbHksCisgICAgICAgICAgICAjIGJhbGx5IG5lZWRlZAorICAgICAgICAgICAgaWYgWyAtbiAiJHt3aGVyZX0iIF07IHRoZW4KKyAgICAgICAgICAgICAgICBDVF9Eb0xvZyBERUJVRyAiICAnJHshdn0tJHt0b29sfScgLT4gJyR7d2hlcmV9JyIKKyAgICAgICAgICAgICAgICBwcmludGYgIiMke0JBTkd9JHtDVF9DT05GSUdfU0hFTEx9XG5leGVjICcke3doZXJlfScgXCJcJHtAfVwiXG4iID4iJHtDVF9CVUlMRFRPT0xTX1BSRUZJWF9ESVJ9L2Jpbi8keyF2fS0ke3Rvb2x9IgorICAgICAgICAgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgY2htb2QgNzAwICIke0NUX0JVSUxEVE9PTFNfUFJFRklYX0RJUn0vYmluLyR7IXZ9LSR7dG9vbH0iCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY2FzZSAiJHt0b29sfSIgaW4KKyAgICAgICAgICAgICAgICAgICAgIyBXZSdsbCBhdCBsZWFzdCBuZWVkIHNvbWUgb2YgdGhlbS4uLgorICAgICAgICAgICAgICAgICAgICBhcnxhc3xnY2N8bGR8bm18b2JqY29weXxvYmpkdW1wfHJhbmxpYikKKyAgICAgICAgICAgICAgICAgICAgICAgIENUX0Fib3J0ICJNaXNzaW5nOiAnJHt0fSR7dG9vbH0keyFzfScgb3IgJyR7dH0ke3Rvb2x9JyBvciAnJHt0b29sfScgOiBlaXRoZXIgbmVlZGVkISIKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICMgU29tZSBhcmUgY29uZGl0aW9ubmFsbHkgcmVxdWlyZWQKKyAgICAgICAgICAgICAgICAgICAgIyBBZGQgdGhlbSBpbiBhbHBoYWJldGljYWwgKEMgbG9jYWxlKSBvcmRlcmluZworICAgICAgICAgICAgICAgICAgICBnKyspCisgICAgICAgICAgICAgICAgICAgICAgICAjIGcrKyAobmVlZGVkIGZvciBjb21wYW5pb24gbGliKSwgb25seSBuZWVkZWQgZm9yIEhPU1QKKyAgICAgICAgICAgICAgICAgICAgICAgIENUX1Rlc3RBbmRBYm9ydCAiTWlzc2luZzogJyR7dH0ke3Rvb2x9JHshc30nIG9yICcke3R9JHt0b29sfScgb3IgJyR7dG9vbH0nIDogZWl0aGVyIG5lZWRlZCEiICIke219IiA9ICJIT1NUIgorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgZ2NqKQorICAgICAgICAgICAgICAgICAgICAgICAgQ1RfVGVzdEFuZEFib3J0ICJNaXNzaW5nOiAnJHt0fSR7dG9vbH0keyFzfScgb3IgJyR7dH0ke3Rvb2x9JyBvciAnJHt0b29sfScgOiBlaXRoZXIgbmVlZGVkISIgIiR7Q1RfQ0NfTEFOR19KQVZBfSIgPSAieSIKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgIHN0cmlwKQorICAgICAgICAgICAgICAgICAgICAgICAgQ1RfVGVzdEFuZEFib3J0ICJNaXNzaW5nOiAnJHt0fSR7dG9vbH0keyFzfScgb3IgJyR7dH0ke3Rvb2x9JyBvciAnJHt0b29sfScgOiBlaXRoZXIgbmVlZGVkISIgIiR7Q1RfU1RSSVBfQUxMX1RPT0xDSEFJTl9FWEVDVVRBQkxFU30iID0gInkiCisgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAjIElmIGFueSBvdGhlciBpcyBtaXNzaW5nLCBvbmx5IHdhcm4gYXQgbG93IGxldmVsCisgICAgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgICAgICAjIEl0IGRvZXMgbm90IGRlc2VydmUgYSBXQVJOIGxldmVsLgorICAgICAgICAgICAgICAgICAgICAgICAgQ1RfRG9Mb2cgREVCVUcgIiAgTWlzc2luZzogJyR7dH0ke3Rvb2x9JHshc30nIG9yICcke3R9JHt0b29sfScgb3IgJyR7dG9vbH0nIDogbm90IHJlcXVpcmVkLiIKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgIGRvbmUKKworICAgICMgU29tZSBtYWtlaW5mbyB2ZXJzaW9ucyBhcmUgYSBwYWluIGluIFtwdXQgeW91ciBtb3N0IHNlbnNpYmxlIGJvZHkgcGFydCBoZXJlXS4KKyAgICAjIEdvIGFoZWFkIHdpdGggdGhvc2UsIGJ5IGNyZWF0aW5nIGEgd3JhcHBlciB0aGF0IGtlZXBzIHBhcnRpYWwgZmlsZXMsIGFuZCB0aGF0CisgICAgIyBuZXZlciBmYWlsczoKKyAgICBDVF9Eb0xvZyBERUJVRyAiICAnbWFrZWluZm8nIC0+ICckKENUX1doaWNoIG1ha2VpbmZvKSciCisgICAgcHJpbnRmICIjJHtCQU5HfSR7Q1RfQ09ORklHX1NIRUxMfVxuJChDVF9XaGljaCBtYWtlaW5mbykgLS1mb3JjZSBcIlwke0B9XCJcbnRydWVcbiIgPiIke0NUX0JVSUxEVE9PTFNfUFJFRklYX0RJUn0vYmluL21ha2VpbmZvIgorICAgIENUX0RvRXhlY0xvZyBBTEwgY2htb2QgNzAwICIke0NUX0JVSUxEVE9PTFNfUFJFRklYX0RJUn0vYmluL21ha2VpbmZvIgorCisgICAgIyBDYXJlZnVsbHkgYWRkIHBhdGhzIGluIHRoZSBvcmRlciB3ZSB3YW50IHRoZW06CisgICAgIyAgLSBmaXJzdCB0cnkgaW4gJHtDVF9QUkVGSVhfRElSfS9iaW4KKyAgICAjICAtIHRoZW4gdHJ5IGluICR7Q1RfQ0NfQ09SRV9TSEFSRURfUFJFRklYX0RJUn0vYmluCisgICAgIyAgLSB0aGVuIHRyeSBpbiAke0NUX0NDX0NPUkVfU1RBVElDX1BSRUZJWF9ESVJ9L2JpbgorICAgICMgIC0gZmFsbCBiYWNrIHRvIHNlYXJjaGluZyB1c2VyJ3MgUEFUSAorICAgICMgT2YgY291cnNlLCBuZWl0aGVyIGNyb3NzLW5hdGl2ZSBub3IgY2FuYWRpYW4gY2FuIHJ1biBvbiBCVUlMRCwKKyAgICAjIHNvIGRvbid0IGFkZCB0aG9zZSBQQVRIcyBpbiB0aGlzIGNhc2UuLi4KKyAgICBjYXNlICIke0NUX1RPT0xDSEFJTl9UWVBFfSIgaW4KKyAgICAgICAgY3Jvc3MpICBleHBvcnQgUEFUSD0iJHtDVF9CVUlMRFRPT0xTX1BSRUZJWF9ESVJ9L2Jpbjoke0NUX1BSRUZJWF9ESVJ9L2Jpbjoke0NUX0NDX0NPUkVfU0hBUkVEX1BSRUZJWF9ESVJ9L2Jpbjoke0NUX0NDX0NPUkVfU1RBVElDX1BSRUZJWF9ESVJ9L2Jpbjoke1BBVEh9Ijs7CisgICAgICAgIGNhbmFkaWFuKSBleHBvcnQgUEFUSD0iJHtDVF9CVUlMRFRPT0xTX1BSRUZJWF9ESVJ9L2Jpbjoke1BBVEh9Ijs7CisgICAgICAgICopICA7OworICAgIGVzYWMKKworICAgICMgTm93IHdlIGtub3cgb3VyIGhvc3QgYW5kIHdoZXJlIHRvIGZpbmQgdGhlIGhvc3QgdG9vbHMsIHdlIGNhbiBjaGVjaworICAgICMgaWYgc3RhdGljIGxpbmsgd2FzIHJlcXVlc3RlZCwgYnV0IG9ubHkgaWYgaXQgd2FzIHJlcXVlc3RlZAorICAgIGlmIFsgIiR7Q1RfV0FOVFNfU1RBVElDX0xJTkt9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIHRtcD0iJHtDVF9CVUlMRF9ESVJ9Ly5zdGF0aWMtdGVzdCIKKyAgICAgICAgaWYgISAiJHtDVF9IT1NUfS1nY2MiIC14YyAtIC1zdGF0aWMgLW8gIiR7dG1wfSIgPi9kZXYvbnVsbCAyPiYxIDw8LV9FT0ZfCisJCQkJaW50IG1haW4oKSB7IHJldHVybiAwOyB9CisJCQlfRU9GXworICAgICAgICB0aGVuCisgICAgICAgICAgICBDVF9BYm9ydCAiU3RhdGljIGxpbmtpbmcgaW1wb3NzaWJsZSBvbiB0aGUgaG9zdCBzeXN0ZW0gJyR7Q1RfSE9TVH0nIgorICAgICAgICBmaQorICAgICAgICBybSAtZiAiJHt0bXB9IgorICAgIGZpCisKKyAgICAjIEhlbHAgZ2NjCisgICAgQ1RfQ0ZMQUdTX0ZPUl9IT1NUPQorICAgIFsgIiR7Q1RfVVNFX1BJUEVTfSIgPSAieSIgXSAmJiBDVF9DRkxBR1NfRk9SX0hPU1QrPSIgLXBpcGUiCisgICAgQ1RfQ0ZMQUdTX0ZPUl9IT1NUKz0iICR7Q1RfRVhUUkFfRkxBR1NfRk9SX0hPU1R9IgorCisgICAgIyBTZXQgdGhlIHNoZWxsIHRvIGJlIHVzZWQgYnkgLi9jb25maWd1cmUgc2NyaXB0cyBhbmQgYnkgTWFrZWZpbGVzICh0aG9zZQorICAgICMgdGhhdCBzdXBwb3J0IGl0ISkuCisgICAgZXhwb3J0IENPTkZJR19TSEVMTD0iJHtDVF9DT05GSUdfU0hFTEx9IiAgICAjIGZvciAuL2NvbmZpZ3VyZQorICAgIGV4cG9ydCBTSEVMTD0iJHtDVF9DT05GSUdfU0hFTEx9IiAgICAgICAgICAgIyBmb3IgTWFrZWZpbGVzCisKKyAgICAjIEFuZCBoZWxwIG1ha2UgZ28gZmFzdGVyCisgICAgSk9CU0ZMQUdTPQorICAgICMgT3ZlcnJpZGUgdGhlIGNvbmZpZ3VyZWQgam9icyB3aXRoIHdoYXQncyBiZWVuIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUKKyAgICBbIC1uICIke0NUX0pPQlN9IiBdICYmIENUX1BBUkFMTEVMX0pPQlM9IiR7Q1RfSk9CU30iCisgICAgIyBVc2UgdGhlIG51bWJlciBvZiBwcm9jZXNzb3JzKzEgd2hlbiBhdXRvbWF0aWNhbGx5IHNldHRpbmcgdGhlIG51bWJlciBvZgorICAgICMgcGFyYWxsZWwgam9icy4gIEZhbGwgYmFjayB0byAxIGlmIHRoZSBob3N0IGRvZXNuJ3QgdXNlIEdMSUJDLgorICAgIEFVVE9fSk9CUz0kKChgZ2V0Y29uZiBfTlBST0NFU1NPUlNfT05MTiAyPiAvZGV2L251bGwgfHwgZWNobyAwYCArIDEpKQorICAgIFsgJHtDVF9QQVJBTExFTF9KT0JTfSAtZXEgMCBdICYmIEpPQlNGTEFHUz0iJHtKT0JTRkxBR1N9IC1qJHtBVVRPX0pPQlN9IgorICAgIFsgJHtDVF9QQVJBTExFTF9KT0JTfSAtZ3QgMCBdICYmIEpPQlNGTEFHUz0iJHtKT0JTRkxBR1N9IC1qJHtDVF9QQVJBTExFTF9KT0JTfSIKKyAgICBbICR7Q1RfTE9BRH0gLW5lIDAgXSAmJiBKT0JTRkxBR1M9IiR7Sk9CU0ZMQUdTfSAtbCR7Q1RfTE9BRH0iCisKKyAgICAjIFdlIG5lZWQgdG8gc2F2ZSB0aGUgcmVhbCAuY29uZmlnIHdpdGgga2NvbmZpZydzIHZhbHVlLAorICAgICMgbm90IG91ciBtYW5nbGVkIC5jb25maWcuMiB3aXRoIGFycmF5cy4KKyAgICBDVF9Eb0xvZyBFWFRSQSAiSW5zdGFsbGluZyB1c2VyLXN1cHBsaWVkIGNyb3NzdG9vbC1ORyBjb25maWd1cmF0aW9uIgorICAgIENUX0RvRXhlY0xvZyBBTEwgbWtkaXIgLXAgIiR7Q1RfUFJFRklYX0RJUn0vYmluIgorICAgIENUX0RvRXhlY0xvZyBERUJVRyBpbnN0YWxsIC1tIDA3NTUgIiR7Q1RfTElCX0RJUn0vc2NyaXB0cy90b29sY2hhaW4tY29uZmlnLmluIiAiJHtDVF9QUkVGSVhfRElSfS9iaW4vJHtDVF9UQVJHRVR9LWN0LW5nLmNvbmZpZyIKKyAgICBDVF9Eb0V4ZWNMb2cgREVCVUcgc2VkIC1pIC1lICdzLEBAZ3JlcEBALCInIiR7Z3JlcH0iJyIsOycgIiR7Q1RfUFJFRklYX0RJUn0vYmluLyR7Q1RfVEFSR0VUfS1jdC1uZy5jb25maWciCisgICAgYnppcDIgLWMgLTkgLmNvbmZpZyA+PiIke0NUX1BSRUZJWF9ESVJ9L2Jpbi8ke0NUX1RBUkdFVH0tY3QtbmcuY29uZmlnIgorCisgICAgQ1RfRG9TdGVwIEVYVFJBICJEdW1waW5nIGludGVybmFsIGNyb3NzdG9vbC1ORyBjb25maWd1cmF0aW9uIgorICAgIENUX0RvTG9nIEVYVFJBICJCdWlsZGluZyBhIHRvb2xjaGFpbiBmb3I6IgorICAgIENUX0RvTG9nIEVYVFJBICIgIGJ1aWxkICA9ICR7Q1RfUkVBTF9CVUlMRH0iCisgICAgQ1RfRG9Mb2cgRVhUUkEgIiAgaG9zdCAgID0gJHtDVF9SRUFMX0hPU1R9IgorICAgIENUX0RvTG9nIEVYVFJBICIgIHRhcmdldCA9ICR7Q1RfVEFSR0VUfSIKKyAgICBzZXQgfGdyZXAgLUUgJ15DVF8uKz0nIHxzb3J0IHxDVF9Eb0xvZyBERUJVRworICAgIENUX0RvTG9nIERFQlVHICJPdGhlciBlbnZpcm9ubWVudDoiCisgICAgcHJpbnRlbnYgfGdyZXAgLXYgLUUgJ15DVF8uKz0nIHxDVF9Eb0xvZyBERUJVRworICAgIENUX0VuZFN0ZXAKK2ZpCisKK2lmIFsgLXogIiR7Q1RfUkVTVEFSVH0iIF07IHRoZW4KKyAgICBDVF9Eb1N0ZXAgSU5GTyAiUmV0cmlldmluZyBuZWVkZWQgdG9vbGNoYWluIGNvbXBvbmVudHMnIHRhcmJhbGxzIgorICAgIGRvX2NvbXBhbmlvbl90b29sc19nZXQKKyAgICBkb19rZXJuZWxfZ2V0CisgICAgZG9fZ21wX2dldAorICAgIGRvX21wZnJfZ2V0CisgICAgZG9fcHBsX2dldAorICAgIGRvX2Nsb29nX2dldAorICAgIGRvX21wY19nZXQKKyAgICBkb19saWJlbGZfZ2V0CisgICAgZG9fYmludXRpbHNfZ2V0CisgICAgZG9fZWxmMmZsdF9nZXQKKyAgICBkb19zc3RyaXBfZ2V0CisgICAgZG9fY2NfZ2V0CisgICAgZG9fbGliY19nZXQKKyAgICBkb19kZWJ1Z19nZXQKKyAgICBkb190ZXN0X3N1aXRlX2dldAorICAgIENUX0VuZFN0ZXAKKworICAgIGlmIFsgIiR7Q1RfT05MWV9ET1dOTE9BRH0iICE9ICJ5IiBdOyB0aGVuCisgICAgICAgIGlmIFsgIiR7Q1RfRk9SQ0VfRVhUUkFDVH0iID0gInkiIF07IHRoZW4KKyAgICAgICAgICAgIENUX0RvRm9yY2VSbWRpciAiJHtDVF9TUkNfRElSfSIKKyAgICAgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgbWtkaXIgLXAgIiR7Q1RfU1JDX0RJUn0iCisgICAgICAgIGZpCisKKyAgICAgICAgaWYgWyAiJHtDVF9DT01QX1RPT0xTfSIgPSAieSIgXTsgdGhlbgorICAgICAgICAgIENUX0RvU3RlcCBJTkZPICJFeHRyYWN0aW5nLCBwYXRjaGluZyBhbmQgaW5zdGFsbGluZyBjb21wYW5pb24gdG9vbHMiCisgICAgICAgICAgZG9fY29tcGFuaW9uX3Rvb2xzX2V4dHJhY3QKKyAgICAgICAgICBkb19jb21wYW5pb25fdG9vbHMKKyAgICAgICAgICBDVF9FbmRTdGVwCisgICAgICAgIGZpCisKKyAgICAgICAgQ1RfRG9TdGVwIElORk8gIkV4dHJhY3RpbmcgYW5kIHBhdGNoaW5nIHRvb2xjaGFpbiBjb21wb25lbnRzIgorICAgICAgICBkb19rZXJuZWxfZXh0cmFjdAorICAgICAgICBkb19nbXBfZXh0cmFjdAorICAgICAgICBkb19tcGZyX2V4dHJhY3QKKyAgICAgICAgZG9fcHBsX2V4dHJhY3QKKyAgICAgICAgZG9fY2xvb2dfZXh0cmFjdAorICAgICAgICBkb19tcGNfZXh0cmFjdAorICAgICAgICBkb19saWJlbGZfZXh0cmFjdAorICAgICAgICBkb19iaW51dGlsc19leHRyYWN0CisgICAgICAgIGRvX2VsZjJmbHRfZXh0cmFjdAorICAgICAgICBkb19zc3RyaXBfZXh0cmFjdAorICAgICAgICBkb19jY19leHRyYWN0CisgICAgICAgIGRvX2xpYmNfZXh0cmFjdAorICAgICAgICBkb19kZWJ1Z19leHRyYWN0CisgICAgICAgIGRvX3Rlc3Rfc3VpdGVfZXh0cmFjdAorICAgICAgICBDVF9FbmRTdGVwCisgICAgZmkKK2ZpCisKKyMgTm93IGZvciB0aGUgam9iIGJ5IGl0c2VsZi4gR28gaGF2ZSBhIGNvZmZlZSEKK2lmIFsgIiR7Q1RfT05MWV9ET1dOTE9BRH0iICE9ICJ5IiAtYSAiJHtDVF9PTkxZX0VYVFJBQ1R9IiAhPSAieSIgXTsgdGhlbgorICAgICMgQmVjYXVzZSBvZiBDVF9SRVNUQVJULCB0aGlzIGJlY29tZXMgcXVpdGUgY29tcGxleAorICAgIGRvX3N0b3A9MAorICAgIHByZXZfc3RlcD0KKyAgICBbIC1uICIke0NUX1JFU1RBUlR9IiBdICYmIGRvX2l0PTAgfHwgZG9faXQ9MQorICAgICMgQWhhISBDVF9TVEVQUyBjb21lcyBmcm9tIHN0ZXBzLm1rIQorICAgIGZvciBzdGVwIGluICR7Q1RfU1RFUFN9OyBkbworICAgICAgICBpZiBbICR7ZG9faXR9IC1lcSAwIF07IHRoZW4KKyAgICAgICAgICAgIGlmIFsgIiR7Q1RfUkVTVEFSVH0iID0gIiR7c3RlcH0iIF07IHRoZW4KKyAgICAgICAgICAgICAgICBDVF9Eb0xvYWRTdGF0ZSAiJHtzdGVwfSIKKyAgICAgICAgICAgICAgICBkb19pdD0xCisgICAgICAgICAgICAgICAgZG9fc3RvcD0wCisgICAgICAgICAgICBmaQorICAgICAgICBlbHNlCisgICAgICAgICAgICBDVF9Eb1NhdmVTdGF0ZSAke3N0ZXB9CisgICAgICAgICAgICBpZiBbICR7ZG9fc3RvcH0gLWVxIDEgXTsgdGhlbgorICAgICAgICAgICAgICAgIENUX0RvTG9nIEVSUk9SICJTdG9wcGluZyBqdXN0IGFmdGVyIHN0ZXAgJyR7cHJldl9zdGVwfScsIGFzIHJlcXVlc3RlZC4iCisgICAgICAgICAgICAgICAgZXhpdCAwCisgICAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICBpZiBbICR7ZG9faXR9IC1lcSAxIF07IHRoZW4KKyAgICAgICAgICAgICggZG9fJHtzdGVwfSApCisgICAgICAgICAgICBpZiBbICIke0NUX1NUT1B9IiA9ICIke3N0ZXB9IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgZG9fc3RvcD0xCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgaWYgWyAiJHtDVF9ERUJVR19QQVVTRV9TVEVQU30iID0gInkiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBDVF9Eb1BhdXNlICJTdGVwICcke3N0ZXB9JyBmaW5pc2hlZCIKKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgIHByZXZfc3RlcD0iJHtzdGVwfSIKKyAgICBkb25lCitmaQorCitDVF9Eb0VuZCBJTkZPCisKKyMgRnJvbSBub3ctb24sIGl0IGNhbiBiZWNvbWUgaW1wb3NzaWJsZSB0byBsb2cgYW55IHRpbWUsIGJlY2F1c2UKKyMgZWl0aGVyIHdlJ3JlIGNvbXByZXNzaW5nIHRoZSBsb2cgZmlsZSwgb3IgaXQgY2FuIGJlY29tZSBSTyBhbnkKKyMgbW9tZW50Li4uIENvbnNpZ24gYWxsIG91cHR1dCB0byBvYmxpdmlvbi4uLgorQ1RfRG9Mb2cgSU5GTyAiRmluaXNoaW5nIGluc3RhbGxhdGlvbiAobWF5IHRha2UgYSBmZXcgc2Vjb25kcykuLi4iCitleGVjID4vZGV2L251bGwgMj4mMQorcm0gLWYgJHtDVF9QUkVGSVhfRElSfS9idWlsZC5sb2cuYnoyCitpZiBbICIke0NUX0xPR19UT19GSUxFfSIgPSAieSIgXTsgdGhlbgorICAgIGNwICIke3RtcF9sb2dfZmlsZX0iICIke0NUX1BSRUZJWF9ESVJ9L2J1aWxkLmxvZyIKKyAgICBpZiBbICIke0NUX0xPR19GSUxFX0NPTVBSRVNTfSIgPSB5IF07IHRoZW4KKyAgICAgICAgYnppcDIgLTkgIiR7Q1RfUFJFRklYX0RJUn0vYnVpbGQubG9nIgorICAgIGZpCitmaQorWyAiJHtDVF9JTlNUQUxMX0RJUl9ST30iID0gInkiICBdICYmIGNobW9kIC1SIGEtdyAiJHtDVF9JTlNUQUxMX0RJUn0iCitbICIke0NUX1RFU1RfU1VJVEV9IiA9ICJ5IiBdICYmIGNobW9kIC1SIHUrdyAiJHtDVF9URVNUX1NVSVRFX0RJUn0iCisKK3RyYXAgLSBFWElUCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvZnVuY3Rpb25zIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2Z1bmN0aW9ucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZThmYjRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2Z1bmN0aW9ucwpAQCAtMCwwICsxLDExNzYgQEAKKyMgVGhpcyBmaWxlIGNvbnRhaW5zIHNvbWUgdXNlZnVsbCBjb21tb24gZnVuY3Rpb25zIC0qLSBzaCAtKi0KKyMgQ29weXJpZ2h0IDIwMDcgWWFubiBFLiBNT1JJTgorIyBMaWNlbnNlZCB1bmRlciB0aGUgR1BMIHYyLiBTZWUgQ09QWUlORyBpbiB0aGUgcm9vdCBvZiB0aGlzIHBhY2thZ2UKKworIyBQcmVwYXJlIHRoZSBmYXVsdCBoYW5kbGVyCitDVF9PbkVycm9yKCkgeworICAgIGxvY2FsIHJldD0kPworICAgIGxvY2FsIGludHJvCisgICAgbG9jYWwgZmlsZSBsaW5lIGZ1bmMKKyAgICBsb2NhbCBzdGVwIHN0ZXBfZGVwdGgKKworICAgICMgVG8gYXZvaWQgcHJpbnRpbmcgdGhlIGJhY2t0YWNlIGZvciBlYWNoIHN1Yi1zaGVsbAorICAgICMgdXAgdG8gdGhlIHRvcC1sZXZlbCwganVzdCByZW1lbWJlciB3ZSd2ZSBkdW1wZWQgaXQKKyAgICBpZiBbICEgLWYgIiR7Q1RfQlVJTERfRElSfS9iYWNrdHJhY2UiIF07IHRoZW4KKyAgICAgICAgdG91Y2ggIiR7Q1RfQlVJTERfRElSfS9iYWNrdHJhY2UiCisKKyAgICAgICAgIyBQcmludCBzdGVwcyBiYWNrdHJhY2UKKyAgICAgICAgc3RlcF9kZXB0aD0ke0NUX1NURVBfQ09VTlR9CisgICAgICAgIENUX1NURVBfQ09VTlQ9MSAgICAgIyBUbyBoYXZlIGEgemVyby1pbmRlbnRhdGlvbgorICAgICAgICBDVF9Eb0xvZyBFUlJPUiAiIgorICAgICAgICBDVF9Eb0xvZyBFUlJPUiAiPj4iCisgICAgICAgIGludHJvPSJCdWlsZCBmYWlsZWQiCisgICAgICAgIGZvcigoc3RlcD1zdGVwX2RlcHRoOyBzdGVwPjA7IHN0ZXAtLSkpOyBkbworICAgICAgICAgICAgQ1RfRG9Mb2cgRVJST1IgIj4+ICAke2ludHJvfSBpbiBzdGVwICcke0NUX1NURVBfTUVTU0FHRVske3N0ZXB9XX0nIgorICAgICAgICAgICAgaW50cm89IiAgICAgIGNhbGxlZCIKKyAgICAgICAgZG9uZQorCisgICAgICAgICMgUHJpbnQgZnVuY3Rpb25zIGJhY2t0cmFjZQorICAgICAgICBpbnRybz0iRXJyb3IgaGFwcGVuZWQgaW4iCisgICAgICAgIENUX0RvTG9nIEVSUk9SICI+PiIKKyAgICAgICAgZm9yKChkZXB0aD0xOyAke0JBU0hfTElORU5PWyQoKCR7ZGVwdGh9LTEpKV19PjA7IGRlcHRoKyspKTsgZG8KKyAgICAgICAgICAgIGZpbGU9IiR7QkFTSF9TT1VSQ0VbJHtkZXB0aH1dIyR7Q1RfTElCX0RJUn0vfSIKKyAgICAgICAgICAgIGZ1bmM9IiR7RlVOQ05BTUVbJHtkZXB0aH1dfSIKKyAgICAgICAgICAgIGxpbmU9IkAke0JBU0hfTElORU5PWyR7ZGVwdGh9LTFdOi0/fSIKKyAgICAgICAgICAgIENUX0RvTG9nIEVSUk9SICI+PiAgJHtpbnRyb306ICR7ZnVuY31bJHtmaWxlfSR7bGluZX1dIgorICAgICAgICAgICAgaW50cm89IiAgICAgIGNhbGxlZCBmcm9tIgorICAgICAgICBkb25lCisgICAgZmkKKworICAgICMgQW5kIGZpbmFsbHksIGluIHRvcC1sZXZlbCBzaGVsbCwgcHJpbnQgc29tZSBoaW50cworICAgIGlmIFsgJHtCQVNIX1NVQlNIRUxMfSAtZXEgMCBdOyB0aGVuCisgICAgICAgICMgSGVscCBkaWFnbm9zZSB0aGUgZXJyb3IKKyAgICAgICAgQ1RfU1RFUF9DT1VOVD0xICAgICAjIFRvIGhhdmUgYSB6ZXJvLWluZGVudGF0aW9uCisgICAgICAgIENUX0RvTG9nIEVSUk9SICI+PiIKKyAgICAgICAgaWYgWyAiJHtDVF9MT0dfVE9fRklMRX0iID0gInkiIF07IHRoZW4KKyAgICAgICAgICAgIENUX0RvTG9nIEVSUk9SICI+PiAgRm9yIG1vcmUgaW5mbyBvbiB0aGlzIGVycm9yLCBsb29rIGF0IHRoZSBmaWxlOiAnJHt0bXBfbG9nX2ZpbGUjJHtDVF9UT1BfRElSfS99JyIKKyAgICAgICAgZmkKKyAgICAgICAgQ1RfRG9Mb2cgRVJST1IgIj4+ICBUaGVyZSBpcyBhIGxpc3Qgb2Yga25vd24gaXNzdWVzLCBzb21lIHdpdGggd29ya2Fyb3VuZHMsIGluOiIKKyAgICAgICAgQ1RfRG9Mb2cgRVJST1IgIj4+ICAgICAgJyR7Q1RfRE9DX0RJUiMke0NUX1RPUF9ESVJ9L30vQiAtIEtub3duIGlzc3Vlcy50eHQnIgorCisgICAgICAgIENUX0RvTG9nIEVSUk9SICIiCisgICAgICAgIENUX0RvRW5kIEVSUk9SCisgICAgICAgIHJtIC1mICIke0NUX0JVSUxEX0RJUn0vYmFja3RyYWNlIgorICAgIGZpCisgICAgZXhpdCAkcmV0Cit9CisKKyMgSW5zdGFsbCB0aGUgZmF1bHQgaGFuZGxlcgordHJhcCBDVF9PbkVycm9yIEVSUgorCisjIEluaGVyaXQgdGhlIGZhdWx0IGhhbmRsZXIgaW4gc3Vic2hlbGxzIGFuZCBmdW5jdGlvbnMKK3NldCAtRQorCisjIE1ha2UgcGlwZXMgZmFpbCBvbiB0aGUgX2ZpcnN0XyBmYWlsZWQgY29tbWFuZAorIyBOb3Qgc3VwcG9ydGVkIG9uIGJhc2ggPCAzLngsIGJ1dCB3ZSBuZWVkIGl0LCBzbyBkcm9wIHRoZSBvYnNvbGV0aW5nIGJhc2gtMi54CitzZXQgLW8gcGlwZWZhaWwKKworIyBEb24ndCBoYXNoIGNvbW1hbmRzJyBsb2NhdGlvbnMsIGFuZCBzZWFyY2ggZXZlcnkgdGltZSBpdCBpcyByZXF1ZXN0ZWQuCisjIFRoaXMgaXMgc2xvdywgYnV0IG5lZWRlZCBiZWNhdXNlIG9mIHRoZSBzdGF0aWMvc2hhcmVkIGNvcmUgZ2NjIHdoaWNoIHNoYWxsCisjIGFsd2F5cyBtYXRjaCB0byBzaGFyZWQgaWYgaXQgZXhpc3RzLCBhbmQgb25seSBmYWxsYmFjayB0byBzdGF0aWMgaWYgdGhlCisjIHNoYXJlZCBpcyBub3QgZm91bmQKK3NldCArbyBoYXNoYWxsCisKKyMgTG9nIHBvbGljeToKKyMgIC0gZmlyc3Qgb2YgYWxsLCBzYXZlIHN0ZG91dCBzbyB3ZSBjYW4gc2VlIHRoZSBsaXZlIGxvZ3M6IGZkICM2CitleGVjIDY+JjEKKyMgIC0gdGhlbiBwb2ludCBzdGRvdXQgdG8gdGhlIGxvZyBmaWxlCit0bXBfbG9nX2ZpbGU9IiR7Q1RfVE9QX0RJUn0vYnVpbGQubG9nIgorcm0gLWYgIiR7dG1wX2xvZ19maWxlfSIKK2V4ZWMgPj4iJHt0bXBfbG9nX2ZpbGV9IgorCisjIFRoZSBkaWZmZXJlbnQgbG9nIGxldmVsczoKK0NUX0xPR19MRVZFTF9FUlJPUj0wCitDVF9MT0dfTEVWRUxfV0FSTj0xCitDVF9MT0dfTEVWRUxfSU5GTz0yCitDVF9MT0dfTEVWRUxfRVhUUkE9MworQ1RfTE9HX0xFVkVMX0NGRz00CitDVF9MT0dfTEVWRUxfRklMRT01CitDVF9MT0dfTEVWRUxfU1RBVEU9NgorQ1RfTE9HX0xFVkVMX0FMTD03CitDVF9MT0dfTEVWRUxfREVCVUc9OAorCisjIE1ha2UgaXQgZWFzeSB0byB1c2UgXG4gYW5kICEKK0NSPSQocHJpbnRmICJcbiIpCitCQU5HPSchJworCisjIEEgZnVuY3Rpb24gdG8gbG9nIHdoYXQgaXMgaGFwcGVuaW5nCisjIERpZmZlcmVudCBsb2cgbGV2ZWwgYXJlIGF2YWlsYWJsZToKKyMgICAtIEVSUk9SOiAgIEEgc2VyaW91cywgZmF0YWwgZXJyb3Igb2NjdXJyZWQKKyMgICAtIFdBUk46ICAgIEEgbm9uIGZhdGFsLCBub24gc2VyaW91cyBlcnJvciBvY2N1cnJlZCwgdGFrZSB5b3VyIHJlc3BvbnNiaWxpdHkgd2l0aCB0aGUgZ2VuZXJhdGVkIGJ1aWxkCisjICAgLSBJTkZPOiAgICBJbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCisjICAgLSBFWFRSQTogICBFeHRyYSBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCisjICAgLSBDRkc6ICAgICBPdXRwdXQgb2YgdmFyaW91cyAiLi9jb25maWd1cmUiLXR5cGUgc2NyaXB0cworIyAgIC0gRklMRTogICAgRmlsZSAvIGFyY2hpdmUgdW5wYWNraW5nLgorIyAgIC0gU1RBVEU6ICAgU3RhdGUgc2F2ZSAmIHJlc3RvcmUKKyMgICAtIEFMTDogICAgIENvbXBvbmVudCdzIGJ1aWxkIG1lc3NhZ2VzCisjICAgLSBERUJVRzogICBJbnRlcm5hbCBkZWJ1ZyBtZXNzYWdlcworIyBVc2FnZTogQ1RfRG9Mb2cgPGxldmVsPiBbbWVzc2FnZV0KKyMgSWYgbWVzc2FnZSBpcyBlbXB0eSwgdGhlbiBzdGRpbiB3aWxsIGJlIGxvZ2dlZC4KK0NUX0RvTG9nKCkgeworICAgIGxvY2FsIG1heF9sZXZlbCBMRVZFTCBsZXZlbCBjdXJfbCBjdXJfTAorICAgIGxvY2FsIGwKKyAgICBldmFsIG1heF9sZXZlbD0iXCR7Q1RfTE9HX0xFVkVMXyR7Q1RfTE9HX0xFVkVMX01BWH19IgorICAgICMgU2V0IHRoZSBtYXhpbXVtIGxvZyBsZXZlbCB0byBERUJVRyBpZiB3ZSBoYXZlIG5vbmUKKyAgICBbIC16ICIke21heF9sZXZlbH0iIF0gJiYgbWF4X2xldmVsPSR7Q1RfTE9HX0xFVkVMX0RFQlVHfQorCisgICAgTEVWRUw9IiQxIjsgc2hpZnQKKyAgICBldmFsIGxldmVsPSJcJHtDVF9MT0dfTEVWRUxfJHtMRVZFTH19IgorCisgICAgaWYgWyAkIyAtZXEgMCBdOyB0aGVuCisgICAgICAgIGNhdCAtCisgICAgZWxzZQorICAgICAgICBwcmludGYgIiVzXG4iICIkeyp9IgorICAgIGZpIHwoIElGUz0iJHtDUn0iICMgV2Ugd2FudCB0aGUgZnVsbCBsaW5lcywgZXZlbiBsZWFkaW5nIHNwYWNlcworICAgICAgICAgIF9wcm9nX2Jhcl9jcHQ9MAorICAgICAgICAgIF9wcm9nX2JhclswXT0nLycKKyAgICAgICAgICBfcHJvZ19iYXJbMV09Jy0nCisgICAgICAgICAgX3Byb2dfYmFyWzJdPSdcJworICAgICAgICAgIF9wcm9nX2JhclszXT0nfCcKKyAgICAgICAgICBpbmRlbnQ9JCgoMipDVF9TVEVQX0NPVU5UKSkKKyAgICAgICAgICB3aGlsZSByZWFkIGxpbmU7IGRvCisgICAgICAgICAgICAgIGNhc2UgIiR7Q1RfTE9HX1NFRV9UT09MU19XQVJOfSwke2xpbmV9IiBpbgorICAgICAgICAgICAgICAgIHksKiJ3YXJuaW5nOiIqKSAgICAgICAgIGN1cl9MPVdBUk47IGN1cl9sPSR7Q1RfTE9HX0xFVkVMX1dBUk59OzsKKyAgICAgICAgICAgICAgICB5LCoiV0FSTklORzoiKikgICAgICAgICBjdXJfTD1XQVJOOyBjdXJfbD0ke0NUX0xPR19MRVZFTF9XQVJOfTs7CisgICAgICAgICAgICAgICAgKiJlcnJvcjoiKikgICAgICAgICAgICAgY3VyX0w9RVJST1I7IGN1cl9sPSR7Q1RfTE9HX0xFVkVMX0VSUk9SfTs7CisgICAgICAgICAgICAgICAgKiJtYWtlWyIqIl06ICoqKiBbIiopICAgY3VyX0w9RVJST1I7IGN1cl9sPSR7Q1RfTE9HX0xFVkVMX0VSUk9SfTs7CisgICAgICAgICAgICAgICAgKikgICAgICAgICAgICAgICAgICAgICAgY3VyX0w9IiR7TEVWRUx9IjsgY3VyX2w9IiR7bGV2ZWx9Ijs7CisgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgIyBUaGVyZSB3aWxsIGFsd2F5cyBiZSBhIGxvZyBmaWxlIChzdGRvdXQsIGZkICMxKSwgYmUgaXQgL2Rldi9udWxsCisgICAgICAgICAgICAgIHByaW50ZiAiWyUtNXNdJSpzJXMlc1xuIiAiJHtjdXJfTH0iICIke2luZGVudH0iICIgIiAiJHtsaW5lfSIKKyAgICAgICAgICAgICAgaWYgWyAke2N1cl9sfSAtbGUgJHttYXhfbGV2ZWx9IF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICMgT25seSBwcmludCB0byBjb25zb2xlIChmZCAjNikgaWYgbG9nIGxldmVsIGlzIGhpZ2ggZW5vdWdoLgorICAgICAgICAgICAgICAgICAgcHJpbnRmICIke0NUX0xPR19QUk9HUkVTU19CQVI6K1xyfVslLTVzXSUqcyVzJXNcbiIgIiR7Y3VyX0x9IiAiJHtpbmRlbnR9IiAiICIgIiR7bGluZX0iID4mNgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBpZiBbICIke0NUX0xPR19QUk9HUkVTU19CQVJ9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICBwcmludGYgIlxyWyUwMmQ6JTAyZF0gJXMgIiAkKChTRUNPTkRTLzYwKSkgJCgoU0VDT05EUyU2MCkpICIke19wcm9nX2JhclskKChfcHJvZ19iYXJfY3B0LzEwKSldfSIgPiY2CisgICAgICAgICAgICAgICAgICBfcHJvZ19iYXJfY3B0PSQoKChfcHJvZ19iYXJfY3B0KzEpJTQwKSkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICBkb25lCisgICAgICAgICkKKworICAgIHJldHVybiAwCit9CisKKyMgRXhlY3V0ZSBhbiBhY3Rpb24sIGFuZCBsb2cgaXRzIG1lc3NhZ2VzCisjIEl0IGlzIHBvc3NpYmxlIHRvIGV2ZW4gbG9nIGxvY2FsIHZhcmlhYmxlIGFzc2lnbm1lbnRzIChhLWxhOiB2YXI9dmFsIC4vY21kIG9wdHMpCisjIFVzYWdlOiBDVF9Eb0V4ZWNMb2cgPGxldmVsPiBbVkFSPXZhbC4uLl0gPGNvbW1hbmQ+IFtwYXJhbWV0ZXJzLi4uXQorQ1RfRG9FeGVjTG9nKCkgeworICAgIGxvY2FsIGxldmVsPSIkMSIKKyAgICBzaGlmdAorICAgICgKKyAgICBmb3IgaSBpbiAiJEAiOyBkbworICAgICAgICB0bXBfbG9nKz0iJyR7aX0nICIKKyAgICBkb25lCisgICAgd2hpbGUgdHJ1ZTsgZG8KKyAgICAgICAgY2FzZSAiJHsxfSIgaW4KKyAgICAgICAgICAgICo9KikgICAgZXZhbCBleHBvcnQgIickezF9JyI7IHNoaWZ0OzsKKyAgICAgICAgICAgICopICAgICAgYnJlYWs7OworICAgICAgICBlc2FjCisgICAgZG9uZQorICAgIENUX0RvTG9nIERFQlVHICI9PT4gRXhlY3V0aW5nOiAke3RtcF9sb2d9IgorICAgICIke0B9IiAyPiYxIHxDVF9Eb0xvZyAiJHtsZXZlbH0iCisgICAgKQorICAgICMgQ2F0Y2ggZmFpbHVyZSBvZiB0aGUgc3ViLXNoZWxsCisgICAgWyAkPyAtZXEgMCBdCit9CisKKyMgVGFpbCBtZXNzYWdlIHRvIGJlIGxvZ2dlZCB3aGF0ZXZlciBoYXBwZW5zCisjIFVzYWdlOiBDVF9Eb0VuZCA8bGV2ZWw+CitDVF9Eb0VuZCgpCit7CisgICAgbG9jYWwgbGV2ZWw9IiQxIgorICAgIENUX1NUT1BfREFURT0kKENUX0RvRGF0ZSArJXMlTikKKyAgICBDVF9TVE9QX0RBVEVfSFVNQU49JChDVF9Eb0RhdGUgKyVZJW0lZC4lSCVNJVMpCisgICAgaWYgWyAiJHtsZXZlbH0iICE9ICJFUlJPUiIgXTsgdGhlbgorICAgICAgICBDVF9Eb0xvZyAiJHtsZXZlbDotSU5GT30iICJCdWlsZCBjb21wbGV0ZWQgYXQgJHtDVF9TVE9QX0RBVEVfSFVNQU59IgorICAgIGZpCisgICAgZWxhcHNlZD0kKChDVF9TVE9QX0RBVEUtQ1RfU1RBUl9EQVRFKSkKKyAgICBlbGFwc2VkX21pbj0kKChlbGFwc2VkLyg2MCoxMDAwKjEwMDAqMTAwMCkpKQorICAgIGVsYXBzZWRfc2VjPSQocHJpbnRmICIlMDJkIiAkKCgoZWxhcHNlZCUoNjAqMTAwMCoxMDAwKjEwMDApKS8oMTAwMCoxMDAwKjEwMDApKSkpCisgICAgZWxhcHNlZF9jc2VjPSQocHJpbnRmICIlMDJkIiAkKCgoZWxhcHNlZCUoMTAwMCoxMDAwKjEwMDApKS8oMTAqMTAwMCoxMDAwKSkpKQorICAgIENUX0RvTG9nICR7bGV2ZWw6LUlORk99ICIoZWxhcHNlZDogJHtlbGFwc2VkX21pbn06JHtlbGFwc2VkX3NlY30uJHtlbGFwc2VkX2NzZWN9KSIKK30KKworIyBSZW1vdmUgZW50cmllcyByZWZlcnJpbmcgdG8gLiBhbmQgb3RoZXIgcmVsYXRpdmUgcGF0aHMKKyMgVXNhZ2U6IENUX1Nhbml0aXplUGF0aAorQ1RfU2FuaXRpemVQYXRoKCkgeworICAgIGxvY2FsIG5ldworICAgIGxvY2FsIHAKKyAgICBsb2NhbCBJRlM9OgorICAgIGZvciBwIGluICRQQVRIOyBkbworICAgICAgICAjIE9ubHkgYWNjZXB0IGFic29sdXRlIHBhdGhzOworICAgICAgICAjIE5vdGU6IGFzIGEgc3BlY2lhbCBjYXNlIHRoZSBlbXB0eSBzdHJpbmcgaW4gUEFUSCBpcyBlcXVpdmFsZW50IHRvIC4KKyAgICAgICAgaWYgWyAtbiAiJHtwfSIgLWEgLXogIiR7cCUlLyp9IiBdOyB0aGVuCisgICAgICAgICAgICBuZXc9IiR7bmV3fSR7bmV3Ois6fSR7cH0iCisgICAgICAgIGZpCisgICAgZG9uZQorICAgIFBBVEg9IiR7bmV3fSIKK30KKworIyBTYW5pdGlzZSB0aGUgZGlyZWN0b3J5IG5hbWUgY29udGFpbmVkIGluIHRoZSB2YXJpYWJsZSBwYXNzZWQgYXMgYXJndW1lbnQ6CisjIC0gcmVtb3ZlIGR1cGxpY2F0ZSAvCisjIFVzYWdlOiBDVF9TYW5pdGlzZVZhckRpciBDVF9QUkVGSVhfRElSCitDVF9TYW5pdGlzZVZhckRpcigpIHsKKyAgICBsb2NhbCB2YXIKKyAgICBsb2NhbCBvbGRfZGlyCisgICAgbG9jYWwgbmV3X2RpcgorCisgICAgZm9yIHZhciBpbiAiJEAiOyBkbworICAgICAgICBldmFsICJvbGRfZGlyPVwiXCR7JHt2YXJ9fVwiIgorICAgICAgICBuZXdfZGlyPSIkKCBwcmludGYgIiR7b2xkX2Rpcn0iICAgICBcCisgICAgICAgICAgICAgICAgICAgIHxzZWQgLXIgLWUgJ3M6Lys6LzpnOycgIFwKKyAgICAgICAgICAgICAgICAgICkiCisgICAgICAgIGV2YWwgIiR7dmFyfT1cIiR7bmV3X2Rpcn1cIiIKKyAgICAgICAgQ1RfRG9Mb2cgREVCVUcgIlNhbml0aXNlZCAnJHt2YXJ9JzogJyR7b2xkX2Rpcn0nIC0+ICcke25ld19kaXJ9JyIKKyAgICBkb25lCit9CisKKyMgQWJvcnQgdGhlIGV4ZWN1dGlvbiB3aXRoIGFuIGVycm9yIG1lc3NhZ2UKKyMgVXNhZ2U6IENUX0Fib3J0IDxtZXNzYWdlPgorQ1RfQWJvcnQoKSB7CisgICAgQ1RfRG9Mb2cgRVJST1IgIiQxIgorICAgIGV4aXQgMQorfQorCisjIFRlc3QgYSBjb25kaXRpb24sIGFuZCBwcmludCBhIG1lc3NhZ2UgaWYgc2F0aXNmaWVkCisjIFVzYWdlOiBDVF9UZXN0IDxtZXNzYWdlPiA8dGVzdHM+CitDVF9UZXN0KCkgeworICAgIGxvY2FsIHJldAorICAgIGxvY2FsIG09IiQxIgorICAgIHNoaWZ0CisgICAgQ1RfRG9Mb2cgREVCVUcgIlRlc3RpbmcgJyEgKCAkKiApJyIKKyAgICB0ZXN0ICIkQCIgJiYgQ1RfRG9Mb2cgV0FSTiAiJG0iCisgICAgcmV0dXJuIDAKK30KKworIyBUZXN0IGEgY29uZGl0aW9uLCBhbmQgYWJvcnQgd2l0aCBhbiBlcnJvciBtZXNzYWdlIGlmIHNhdGlzZmllZAorIyBVc2FnZTogQ1RfVGVzdEFuZEFib3J0IDxtZXNzYWdlPiA8dGVzdHM+CitDVF9UZXN0QW5kQWJvcnQoKSB7CisgICAgbG9jYWwgbT0iJDEiCisgICAgc2hpZnQKKyAgICBDVF9Eb0xvZyBERUJVRyAiVGVzdGluZyAnISAoICQqICknIgorICAgIHRlc3QgIiRAIiAmJiBDVF9BYm9ydCAiJG0iCisgICAgcmV0dXJuIDAKK30KKworIyBUZXN0IGEgY29uZGl0aW9uLCBhbmQgYWJvcnQgd2l0aCBhbiBlcnJvciBtZXNzYWdlIGlmIG5vdCBzYXRpc2ZpZWQKKyMgVXNhZ2U6IENUX1Rlc3RBbmRBYm9ydCA8bWVzc2FnZT4gPHRlc3RzPgorQ1RfVGVzdE9yQWJvcnQoKSB7CisgICAgbG9jYWwgbT0iJDEiCisgICAgc2hpZnQKKyAgICBDVF9Eb0xvZyBERUJVRyAiVGVzdGluZyAnJConIgorICAgIHRlc3QgIiRAIiB8fCBDVF9BYm9ydCAiJG0iCisgICAgcmV0dXJuIDAKK30KKworIyBUZXN0IHRoZSBwcmVzZW5jZSBvZiBhIHRvb2wsIG9yIGFib3J0IGlmIG5vdCBmb3VuZAorIyBVc2FnZTogQ1RfSGFzT3JBYm9ydCA8dG9vbD4KK0NUX0hhc09yQWJvcnQoKSB7CisgICAgQ1RfVGVzdEFuZEFib3J0ICInJHsxfScgbm90IGZvdW5kIGFuZCBuZWVkZWQgZm9yIHN1Y2Nlc3NmdWwgdG9vbGNoYWluIGJ1aWxkLiIgLXogIiQoQ1RfV2hpY2ggIiR7MX0iKSIKKyAgICByZXR1cm4gMAorfQorCisjIFNlYXJjaCBhIHByb2dyYW06IHdyYXAgIndoaWNoIiBmb3IgdGhvc2Ugc3lzdGVtIHdoZXJlCisjICJ3aGljaCIgdmVyYm9zZWx5IHNheXMgdGhlcmUgaXMgbm8gbWF0Y2ggKE1hbmRyaXZhIGlzCisjIHN1Y2ggYSBzdWNrZXIuLi4pCisjIFVzYWdlOiBDVF9XaGljaCA8ZmlsZW5hbWU+CitDVF9XaGljaCgpIHsKKyAgd2hpY2ggIiQxIiAyPi9kZXYvbnVsbCB8fCB0cnVlCit9CisKKyMgR2V0IGN1cnJlbnQgZGF0ZSB3aXRoIG5hbm9zZWNvbmQgcHJlY2lzaW9uCisjIE9uIHRob3NlIHN5c3RlbSBub3Qgc3VwcG9ydGluZyBuYW5vc2Vjb25kIHByZWNpc2lvbiwgZmFrZWQgd2l0aCByb3VuZGluZyBkb3duCisjIHRvIHRoZSBoaWdoZXN0IGVudGlyZSBzZWNvbmQKKyMgVXNhZ2U6IENUX0RvRGF0ZSA8Zm10PgorQ1RfRG9EYXRlKCkgeworICAgIGRhdGUgIiQxIiB8c2VkIC1yIC1lICdzLyU/TiQvMDAwMDAwMDAwLzsnCit9CisKK0NUX1NURVBfQ09VTlQ9MQorQ1RfU1RFUF9NRVNTQUdFWyR7Q1RfU1RFUF9DT1VOVH1dPSIodG9wLWxldmVsKSIKKyMgTWVtb3Jpc2UgYSBzdGVwIGJlaW5nIGRvbmUgc28gdGhhdCBhbnkgZXJyb3IgaXMgY2F1Z2h0CisjIFVzYWdlOiBDVF9Eb1N0ZXAgPGxvZ2xldmVsPiA8bWVzc2FnZT4KK0NUX0RvU3RlcCgpIHsKKyAgICBsb2NhbCBzdGFydD0kKENUX0RvRGF0ZSArJXMlTikKKyAgICBDVF9Eb0xvZyAiJDEiICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKKyAgICBDVF9Eb0xvZyAiJDEiICIkMiIKKyAgICBDVF9TVEVQX0NPVU5UPSQoKENUX1NURVBfQ09VTlQrMSkpCisgICAgQ1RfU1RFUF9MRVZFTFske0NUX1NURVBfQ09VTlR9XT0iJDEiOyBzaGlmdAorICAgIENUX1NURVBfU1RBUlRbJHtDVF9TVEVQX0NPVU5UfV09IiR7c3RhcnR9IgorICAgIENUX1NURVBfTUVTU0FHRVske0NUX1NURVBfQ09VTlR9XT0iJDEiCisgICAgcmV0dXJuIDAKK30KKworIyBFbmQgdGhlIHN0ZXAganVzdCBiZWluZyBkb25lCisjIFVzYWdlOiBDVF9FbmRTdGVwCitDVF9FbmRTdGVwKCkgeworICAgIGxvY2FsIHN0b3A9JChDVF9Eb0RhdGUgKyVzJU4pCisgICAgbG9jYWwgZHVyYXRpb249JChwcmludGYgIiUwMzJkIiAkKChzdG9wLSR7Q1RfU1RFUF9TVEFSVFske0NUX1NURVBfQ09VTlR9XX0pKSB8c2VkIC1yIC1lICdzLyhbWzpkaWdpdDpdXXsyfSlbWzpkaWdpdDpdXXs3fSQvXC5cMS87IHMvXjArLy87IHMvXlwuLzBcLi87JykKKyAgICBsb2NhbCBlbGFwc2VkPSQocHJpbnRmICIlMDJkOiUwMmQiICQoKFNFQ09ORFMvNjApKSAkKChTRUNPTkRTJTYwKSkpCisgICAgbG9jYWwgbGV2ZWw9IiR7Q1RfU1RFUF9MRVZFTFske0NUX1NURVBfQ09VTlR9XX0iCisgICAgbG9jYWwgbWVzc2FnZT0iJHtDVF9TVEVQX01FU1NBR0VbJHtDVF9TVEVQX0NPVU5UfV19IgorICAgIENUX1NURVBfQ09VTlQ9JCgoQ1RfU1RFUF9DT1VOVC0xKSkKKyAgICBDVF9Eb0xvZyAiJHtsZXZlbH0iICIke21lc3NhZ2V9OiBkb25lIGluICR7ZHVyYXRpb259cyAoYXQgJHtlbGFwc2VkfSkiCisgICAgcmV0dXJuIDAKK30KKworIyBQdXNoZXMgaW50byBhIGRpcmVjdG9yeSwgYW5kIHBvcHMgYmFjaworQ1RfUHVzaGQoKSB7CisgICAgcHVzaGQgIiQxIiA+L2Rldi9udWxsIDI+JjEKK30KK0NUX1BvcGQoKSB7CisgICAgcG9wZCA+L2Rldi9udWxsIDI+JjEKK30KKworIyBDcmVhdGVzIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeQorIyAkMTogdmFyaWFibGUgdG8gYXNzaWduIHRvCisjIFVzYWdlOiBDVF9Na3RlbXBEaXIgZm9vCitDVF9Na3RlbXBEaXIoKSB7CisgICAgIyBTb21lIG1rdGVtcCBkbyBub3QgYWxsb3cgbW9yZSB0aGFuIDYgWHMKKyAgICBldmFsICIkMSI9JChta3RlbXAgLXEgLWQgIiR7Q1RfQlVJTERfRElSfS90bXAuWFhYWFhYIikKKyAgICBDVF9UZXN0T3JBYm9ydCAiQ291bGQgbm90IG1ha2UgdGVtcG9yYXJ5IGRpcmVjdG9yeSIgLW4gIiR7ITF9IiAtYSAtZCAiJHshMX0iCisgICAgQ1RfRG9Mb2cgREVCVUcgIk1hZGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSAnJHshMX0nIgorICAgIHJldHVybiAwCit9CisKKyMgUmVtb3ZlcyBvbmUgb3IgbW9yZSBkaXJlY3RvcmllcywgZXZlbiBpZiBpdCBpcyByZWFkLW9ubHksIG9yIGl0cyBwYXJlbnQgaXMKKyMgVXNhZ2U6IENUX0RvRm9yY2VSbWRpciBkaXIgWy4uLl0KK0NUX0RvRm9yY2VSbWRpcigpIHsKKyAgICBsb2NhbCBkaXIKKyAgICBsb2NhbCBtb2RlCisgICAgZm9yIGRpciBpbiAiJHtAfSI7IGRvCisgICAgICAgIFsgLWQgIiR7ZGlyfSIgXSB8fCBjb250aW51ZQorICAgICAgICBjYXNlICIkQ1RfU1lTX09TIiBpbgorICAgICAgICAgICAgTGludXh8Q1lHV0lOKikKKyAgICAgICAgICAgICAgICBtb2RlPSIkKHN0YXQgLWMgJyVhJyAiJChkaXJuYW1lICIke2Rpcn0iKSIpIgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBEYXJ3aW58KkJTRCkKKyAgICAgICAgICAgICAgICBtb2RlPSIkKHN0YXQgLWYgJyVMcCcgIiQoZGlybmFtZSAiJHtkaXJ9IikiKSIKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICBDVF9BYm9ydCAiVW5oYW5kbGVkIGhvc3QgT1MgJENUX1NZU19PUyIKKyAgICAgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgY2htb2QgdSt3ICIkKGRpcm5hbWUgIiR7ZGlyfSIpIgorICAgICAgICBDVF9Eb0V4ZWNMb2cgQUxMIGNobW9kIC1SIHUrdyAiJHtkaXJ9IgorICAgICAgICBDVF9Eb0V4ZWNMb2cgQUxMIHJtIC1yZiAiJHtkaXJ9IgorICAgICAgICBDVF9Eb0V4ZWNMb2cgQUxMIGNobW9kICR7bW9kZX0gIiQoZGlybmFtZSAiJHtkaXJ9IikiCisgICAgZG9uZQorfQorCisjIEVjaG9lcyB0aGUgc3BlY2lmaWVkIHN0cmluZyBvbiBzdGRvdXQgdW50aWwgdGhlIHBpcGUgYnJlYWtzLgorIyBEb2Vzbid0IGZhaWwKKyMgJDE6IHN0cmluZyB0byBlY2hvCisjIFVzYWdlOiBDVF9Eb1llcyAiIiB8bWFrZSBvbGRjb25maWcKK0NUX0RvWWVzKCkgeworICAgIHllcyAiJDEiIHx8IHRydWUKK30KKworIyBBZGQgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgdG8gTERfTElCUkFSWV9QQVRILCBhbmQgZXhwb3J0IGl0CisjIElmIHRoZSBzcGVjaWZpZWQgcGF0Y2ggaXMgYWxyZWFkeSBwcmVzZW50LCBqdXN0IGV4cG9ydAorIyAkMTogcGF0aCB0byBhZGQKKyMgJDI6IGFkZCBhcyAnZmlyc3QnIG9yICdsYXN0JyBwYXRoLCAnZmlyc3QnIGlzIGFzc3VtZWQgaWYgJDIgaXMgZW1wdHkKKyMgVXNhZ2UgQ1RfU2V0TGliUGF0aCAvc29tZS93aGVyZS9saWIgW2ZpcnN0fGxhc3RdCitDVF9TZXRMaWJQYXRoKCkgeworICAgIGxvY2FsIHBhdGg9IiQxIgorICAgIGxvY2FsIHBvcz0iJDIiCisKKyAgICBjYXNlICI6JHtMRF9MSUJSQVJZX1BBVEh9OiIgaW4KKyAgICAgICAgKjoiJHtwYXRofSI6KikgIDs7CisgICAgICAgICopICBjYXNlICIke3Bvc30iIGluCisgICAgICAgICAgICAgICAgbGFzdCkKKyAgICAgICAgICAgICAgICAgICAgQ1RfRG9Mb2cgREVCVUcgIkFkZGluZyAnJHtwYXRofScgYXQgZW5kIG9mIExEX0xJQlJBUllfUEFUSCIKKyAgICAgICAgICAgICAgICAgICAgTERfTElCUkFSWV9QQVRIPSIke0xEX0xJQlJBUllfUEFUSDorJHtMRF9MSUJSQVJZX1BBVEh9On0ke3BhdGh9IgorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIGZpcnN0fCIiKQorICAgICAgICAgICAgICAgICAgICBDVF9Eb0xvZyBERUJVRyAiQWRkaW5nICcke3BhdGh9JyBhdCBzdGFydCBvZiBMRF9MSUJSQVJZX1BBVEgiCisgICAgICAgICAgICAgICAgICAgIExEX0xJQlJBUllfUEFUSD0iJHtwYXRofSR7TERfTElCUkFSWV9QQVRIOis6JHtMRF9MSUJSQVJZX1BBVEh9fSIKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgICBDVF9BYm9ydCAiSW5jb3JyZWN0IHBvc2l0aW9uICcke3Bvc30nIHRvIGFkZCAnJHtwYXRofScgdG8gTERfTElCUkFSWV9QQVRIIgorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgOzsKKyAgICBlc2FjCisgICAgQ1RfRG9Mb2cgREVCVUcgIj09PiBMRF9MSUJSQVJZX1BBVEg9JyR7TERfTElCUkFSWV9QQVRIfSciCisgICAgZXhwb3J0IExEX0xJQlJBUllfUEFUSAorfQorCisjIEJ1aWxkIHVwIHRoZSBsaXN0IG9mIGFsbG93ZWQgdGFyYmFsbCBleHRlbnNpb25zCisjIEFkZCB0aGVtIGluIHRoZSBwcmVmZXJlZCBvcmRlcjsgbW9zdCBwcmVmZXJyZWQgY29tZXMgZmlyc3QKK0NUX0RvTGlzdFRhcmJhbGxFeHQoKSB7CisgICAgaWYgWyAiJHtDVF9DT05GSUdVUkVfaGFzX3h6dXRpbHN9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIHByaW50ZiAiLnRhci54elxuIgorICAgIGZpCisgICAgaWYgWyAgICAiJHtDVF9DT05GSUdVUkVfaGFzX2x6bWF9IiA9ICJ5IiAgICBcCisgICAgICAgICAtbyAiJHtDVF9DT05GSUdVUkVfaGFzX3h6dXRpbHN9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIHByaW50ZiAiLnRhci5sem1hXG4iCisgICAgZmkKKyAgICBwcmludGYgIi50YXIuYnoyXG4iCisgICAgcHJpbnRmICIudGFyLmd6XG4udGd6XG4iCisgICAgcHJpbnRmICIudGFyXG4iCit9CisKKyMgR2V0IHRoZSBmaWxlIG5hbWUgZXh0ZW5zaW9uIG9mIGEgY29tcG9uZW50CisjIFVzYWdlOiBDVF9HZXRGaWxlRXh0ZW5zaW9uIDxjb21wb25lbnRfbmFtZS1jb21wb25lbnRfdmVyc2lvbj4gW2V4dGVuc2lvbl0KKyMgSWYgZm91bmQsIGVjaG9lcyB0aGUgZXh0ZW5zaW9uIHRvIHN0ZG91dCwgYW5kIHJldHVybiAwCisjIElmIG5vdCBmb3VuZCwgZWNob2VzIG5vdGhpbmcgb24gc3Rkb3V0LCBhbmQgcmV0dXJuICEwLgorQ1RfR2V0RmlsZUV4dGVuc2lvbigpIHsKKyAgICBsb2NhbCBleHQKKyAgICBsb2NhbCBmaWxlPSIkMSIKKyAgICBzaGlmdAorICAgIGxvY2FsIGZpcnN0X2V4dD0iJDEiCisKKyAgICAjIHdlIG5lZWQgdG8gYWxzbyBjaGVjayBmb3IgYW4gZW1wdHkgZXh0ZW5zaW9uIGZvciB0aG9zZSB2ZXJ5CisgICAgIyBwZWN1bGlhciBjb21wb25lbnRzIHRoYXQgZG9uJ3QgaGF2ZSBvbmUgKHN1Y2ggYXMgc3N0cmlwIGZyb20KKyAgICAjIGJ1aWxkcm9vdCkuCisgICAgZm9yIGV4dCBpbiAke2ZpcnN0X2V4dH0gJChDVF9Eb0xpc3RUYXJiYWxsRXh0KSAvLmdpdCAnJzsgZG8KKyAgICAgICAgaWYgWyAtZSAiJHtDVF9UQVJCQUxMU19ESVJ9LyR7ZmlsZX0ke2V4dH0iIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIiR7ZXh0fSIKKyAgICAgICAgICAgIGV4aXQgMAorICAgICAgICBmaQorICAgIGRvbmUKKworICAgIGV4aXQgMQorfQorCisjIFRyeSB0byByZXRyaWV2ZSB0aGUgc3BlY2lmaWVkIFVSTCAoSFRUUCBvciBGVFApCisjIFVzYWdlOiBDVF9Eb0dldEZpbGUgPFVSTD4KKyMgVGhpcyBmdW5jdGlvbnMgYWx3YXlzIHJldHVybnMgdHJ1ZSAoMCksIGFzIGl0IGNhbiBiZSBsZWdpdGltYXRlIG5vdAorIyB0byBmaW5kIHRoZSByZXF1ZXN0ZWQgVVJMICh0aGluayBhYm91dCBzbmFwc2hvdHMsIGRpZmZlcmVudCBsYXlvdXRzCisjIGZvciBkaWZmZXJlbnQgZ2NjIHZlcnNpb25zLCBldGMuLi4pLgorQ1RfRG9HZXRGaWxlKCkgeworICAgIGxvY2FsIHVybD0iJHsxfSIKKyAgICBsb2NhbCBkZXN0PSIke0NUX1RBUkJBTExTX0RJUn0vJHt1cmwjIyovfSIKKyAgICBsb2NhbCB0bXA9IiR7ZGVzdH0udG1wLWRsIgorCisgICAgIyBSZW1vdmUgcG90ZW50aWFsIGxlZnQtb3ZlciBmcm9tIGEgcHJldmlvdXMgcnVuCisgICAgcm0gLWYgIiR7dG1wfSIKKworICAgICMgV2UgYWxzbyByZXRyeSBhIGZldyB0aW1lcywgaW4gY2FzZSB0aGVyZSBpcyBhIHRyYW5zaWVudCBlcnJvciAoZWcuIGJlaGluZAorICAgICMgYSBkeW5hbWljIElQIHRoYXQgY2hhbmdlcyBkdXJpbmcgdGhlIHRyYW5zZmVyLi4uKQorICAgICMgV2l0aCBhdXRvbWF0ZWQgZG93bmxvYWQgYXMgd2UgYXJlIGRvaW5nLCBpdCBjYW4gYmUgdmVyeSBkYW5nZXJvdXMgdG8KKyAgICAjIGNvbnRpbnVlIHRoZSBkb3dubG9hZHMuIEl0J3MgZmFyIGJldHRlciB0byBzaW1wbHkgb3ZlcndyaXRlIHRoZQorICAgICMgZGVzdGluYXRpb24gZmlsZS4KKyAgICAjIFNvbWUgY29tcGFueSBuZXR3b3JrcyBoYXZlIGZpcmV3YWxscyB0byBjb25uZWN0IHRvIHRoZSBpbnRlcm5ldCwgYnV0IGl0J3MKKyAgICAjIG5vdCBlYXN5IHRvIGRldGVjdCB0aGVtLCBzbyBmb3JjZSBhIGdsb2JhbCAke0NUX0NPTk5FQ1RfVElNRU9VVH0tc2Vjb25kCisgICAgIyB0aW1lb3V0LgorICAgIGlmIENUX0RvRXhlY0xvZyBBTEwgd2dldCAtLXBhc3NpdmUtZnRwIC0tdHJpZXM9MyAtbmMgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtVCAke0NUX0NPTk5FQ1RfVElNRU9VVH0gICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtTyAiJHt0bXB9IiAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiR7dXJsfSIKKworCisgICAgdGhlbgorICAgICAgICAjIFN1Y2Nlc3MsIHdlIGdvdCBpdCwgZ29vZCEKKyAgICAgICAgbXYgIiR7dG1wfSIgIiR7ZGVzdH0iCisgICAgZWxzZQorICAgICAgICAjIFdvb3BzLi4uCisgICAgICAgIHJtIC1mICIke3RtcH0iCisgICAgZmkKK30KKworIyBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIHJldHJpZXZlIGEgdGFyYmFsbCBmb3JtIGEgbG9jYWwgZGlyZWN0b3J5CisjIFVzYWdlOiBDVF9HZXRMb2NhbCA8YmFzZW5hbWU+IFsuZXh0ZW5zaW9uXQorQ1RfR2V0TG9jYWwoKSB7CisgICAgbG9jYWwgYmFzZW5hbWU9IiQxIgorICAgIGxvY2FsIGZpcnN0X2V4dD0iJDIiCisgICAgbG9jYWwgZXh0CisKKyAgICAjIERvIHdlIGFscmVhZHkgaGF2ZSBpdCBpbiAqb3VyKiB0YXJiYWxscyBkaXI/CisgICAgaWYgZXh0PSIkKCBDVF9HZXRGaWxlRXh0ZW5zaW9uICIke2Jhc2VuYW1lfSIgJHtmaXJzdF9leHR9ICkiOyB0aGVuCisgICAgICAgIENUX0RvTG9nIERFQlVHICJBbHJlYWR5IGhhdmUgJyR7YmFzZW5hbWV9JyIKKyAgICAgICAgcmV0dXJuIDAKKyAgICBmaQorCisgICAgaWYgWyAtbiAiJHtDVF9MT0NBTF9UQVJCQUxMU19ESVJ9IiBdOyB0aGVuCisgICAgICAgIENUX0RvTG9nIERFQlVHICJUcnlpbmcgdG8gcmV0cmlldmUgYW4gYWxyZWFkeSBkb3dubG9hZGVkIGNvcHkgb2YgJyR7YmFzZW5hbWV9JyIKKyAgICAgICAgIyBXZSdkIHJhdGhlciBoYXZlIGEgYnppcDInZWQgdGFyYmFsbCwgdGhlbiBnemlwcGVkIHRhcmJhbGwsIHBsYWluIHRhcmJhbGwsCisgICAgICAgICMgb3IsIGFzIGEgZmFpbG92ZXIsIGEgZmlsZSB3aXRob3V0IGV4dGVuc2lvbi4KKyAgICAgICAgZm9yIGV4dCBpbiAke2ZpcnN0X2V4dH0gJChDVF9Eb0xpc3RUYXJiYWxsRXh0KSAnJzsgZG8KKyAgICAgICAgICAgIENUX0RvTG9nIERFQlVHICJUcnlpbmcgJyR7Q1RfTE9DQUxfVEFSQkFMTFNfRElSfS8ke2Jhc2VuYW1lfSR7ZXh0fSciCisgICAgICAgICAgICBpZiBbIC1yICIke0NUX0xPQ0FMX1RBUkJBTExTX0RJUn0vJHtiYXNlbmFtZX0ke2V4dH0iIC1hIFwKKyAgICAgICAgICAgICAgICAgIiR7Q1RfRk9SQ0VfRE9XTkxPQUR9IiAhPSAieSIgXTsgdGhlbgorICAgICAgICAgICAgICAgIENUX0RvTG9nIERFQlVHICJHb3QgJyR7YmFzZW5hbWV9JyBmcm9tIGxvY2FsIHN0b3JhZ2UiCisgICAgICAgICAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCBsbiAtcyAiJHtDVF9MT0NBTF9UQVJCQUxMU19ESVJ9LyR7YmFzZW5hbWV9JHtleHR9IiAiJHtDVF9UQVJCQUxMU19ESVJ9LyR7YmFzZW5hbWV9JHtleHR9IgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICAgICBmaQorICAgICAgICBkb25lCisgICAgZmkKKyAgICByZXR1cm4gMQorfQorCisjIFRoaXMgZnVuY3Rpb24gc2F2ZXMgdGhlIHNwZWNpZmllZCB0byBsb2NhbCBzdG9yYWdlIGlmIHBvc3NpYmxlLAorIyBhbmQgaWYgc28sIHN5bWxpbmtzIGl0IGZvciBsYXRlciB1c2FnZQorIyBVc2FnZTogQ1RfU2F2ZUxvY2FsIDwvZnVsbC9wYXRoL2ZpbGUubmFtZT4KK0NUX1NhdmVMb2NhbCgpIHsKKyAgICBsb2NhbCBmaWxlPSIkMSIKKyAgICBsb2NhbCBiYXNlbmFtZT0iJHtmaWxlIyMqL30iCisKKyAgICBpZiBbICIke0NUX1NBVkVfVEFSQkFMTFN9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIENUX0RvTG9nIEVYVFJBICJTYXZpbmcgJyR7YmFzZW5hbWV9JyB0byBsb2NhbCBzdG9yYWdlIgorICAgICAgICAjIFRoZSBmaWxlIG1heSBhbHJlYWR5IGV4aXN0IGlmIGRvd25sb2FkcyBhcmUgZm9yY2VkOiByZW1vdmUgaXQgZmlyc3QKKyAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCBybSAtZiAiJHtDVF9MT0NBTF9UQVJCQUxMU19ESVJ9LyR7YmFzZW5hbWV9IgorICAgICAgICBDVF9Eb0V4ZWNMb2cgQUxMIG12IC1mICIke2ZpbGV9IiAiJHtDVF9MT0NBTF9UQVJCQUxMU19ESVJ9IgorICAgICAgICBDVF9Eb0V4ZWNMb2cgQUxMIGxuIC1zICIke0NUX0xPQ0FMX1RBUkJBTExTX0RJUn0vJHtiYXNlbmFtZX0iICIke2ZpbGV9IgorICAgIGZpCit9CisKKyMgRG93bmxvYWQgdGhlIGZpbGUgZnJvbSBvbmUgb2YgdGhlIFVSTHMgcGFzc2VkIGFzIGFyZ3VtZW50CisjIFVzYWdlOiBDVF9HZXRGaWxlIDxiYXNlbmFtZT4gWy5leHRlbnNpb25dIDx1cmw+IFt1cmwgLi4uXQorQ1RfR2V0RmlsZSgpIHsKKyAgICBsb2NhbCBleHQKKyAgICBsb2NhbCAtYSBVUkxTCisgICAgbG9jYWwgdXJsCisgICAgbG9jYWwgZmlsZT0iJDEiCisgICAgbG9jYWwgZmlyc3RfZXh0CisgICAgc2hpZnQKKyAgICAjIElmIG5leHQgYXJndW1lbnQgc3RhcnRzIHdpdGggYSBkb3QsIHRoZW4gdGhpcyBpcyBub3QgYW4gVVJMLAorICAgICMgYW5kIHdlIGNhbiBjb25zaWRlciB0aGF0IGl0IGlzIGEgcHJlZmVycmVkIGV4dGVuc2lvbi4KKyAgICBjYXNlICIkMSIgaW4KKyAgICAgICAgLiopIGZpcnN0X2V4dD0iJDEiCisgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIERvZXMgaXQgZXhpc3QgbG9jYWx5PworICAgIGlmIENUX0dldExvY2FsICIke2ZpbGV9IiAke2ZpcnN0X2V4dH07IHRoZW4KKyAgICAgICAgcmV0dXJuIDAKKyAgICBmaQorICAgICMgTm8sIGl0IGRvZXMgbm90Li4uCisKKyAgICAjIFRyeSB0byByZXRyaWV2ZSB0aGUgZmlsZQorICAgIENUX0RvTG9nIEVYVFJBICJSZXRyaWV2aW5nICcke2ZpbGV9JyIKKworICAgICMgQWRkIFVSTHMgb24gdGhlIExBTiBtaXJyb3IKKyAgICBpZiBbICIke0NUX1VTRV9NSVJST1J9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIENUX1Rlc3RPckFib3J0ICJQbGVhc2Ugc2V0IHRoZSBtaXJyb3IgYmFzZSBVUkwiIC1uICIke0NUX01JUlJPUl9CQVNFX1VSTH0iCisgICAgICAgIFVSTFMrPSggIiR7Q1RfTUlSUk9SX0JBU0VfVVJMfS8ke2ZpbGUlLSp9IiApCisgICAgICAgIFVSTFMrPSggIiR7Q1RfTUlSUk9SX0JBU0VfVVJMfSIgKQorICAgIGZpCisKKyAgICBpZiBbICIke0NUX0ZPUkJJRF9ET1dOTE9BRH0iICE9ICJ5IiBdOyB0aGVuCisgICAgICAgIFVSTFMrPSggIiR7QH0iICkKKyAgICBmaQorCisgICAgIyBTY2FuIGFsbCBVUkxzIGluIHR1cm4sIGFuZCB0cnkgdG8gZ3JhYiBhIHRhcmJhbGwgZnJvbSB0aGVyZQorICAgICMgRG8gKm5vdCogdHJ5IGdpdCB0cmVlcyAoZXh0PS8uZ2l0KSwgdGhpcyBpcyBoYW5kbGVkIGluIGEgc3BlY2lmaWMKKyAgICAjIHdyYXBwZXIsIGJlbG93CisgICAgZm9yIGV4dCBpbiAke2ZpcnN0X2V4dH0gJChDVF9Eb0xpc3RUYXJiYWxsRXh0KSAnJzsgZG8KKyAgICAgICAgIyBUcnkgYWxsIHVybHMgaW4gdHVybgorICAgICAgICBmb3IgdXJsIGluICIke1VSTFNbQF19IjsgZG8KKyAgICAgICAgICAgIFsgLW4gIiR7dXJsfSIgXSB8fCBjb250aW51ZQorICAgICAgICAgICAgQ1RfRG9Mb2cgREVCVUcgIlRyeWluZyAnJHt1cmx9LyR7ZmlsZX0ke2V4dH0nIgorICAgICAgICAgICAgQ1RfRG9HZXRGaWxlICIke3VybH0vJHtmaWxlfSR7ZXh0fSIKKyAgICAgICAgICAgIGlmIFsgLWYgIiR7Q1RfVEFSQkFMTFNfRElSfS8ke2ZpbGV9JHtleHR9IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgQ1RfRG9Mb2cgREVCVUcgIkdvdCAnJHtmaWxlfScgZnJvbSB0aGUgSW50ZXJuZXQiCisgICAgICAgICAgICAgICAgQ1RfU2F2ZUxvY2FsICIke0NUX1RBUkJBTExTX0RJUn0vJHtmaWxlfSR7ZXh0fSIKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgIGRvbmUKKworICAgICMgSnVzdCByZXR1cm4gZXJyb3IsIHNvbWVvbmUgbWF5IHdhbnQgdG8gY2F0Y2ggYW5kIGhhbmRsZSB0aGUgZXJyb3IKKyAgICAjIChlZy4gZ2xpYmMvZWdsaWJjIGFkZC1vbnMgY2FuIGJlIG1pc3NpbmcpLgorICAgIHJldHVybiAxCit9CisKKyMgQ2hlY2tvdXQgZnJvbSBDVlMsIGFuZCBidWlsZCB0aGUgYXNzb2NpYXRlZCB0YXJiYWxsCisjIFRoZSB0YXJiYWxsIHdpbGwgYmUgY2FsbGVkICR7YmFzZW5hbWV9LnRhci5iejIKKyMgUHJlcmVxdWlzaXRlOiBlaXRoZXIgdGhlIHNlcnZlciBkb2VzIG5vdCByZXF1aXJlIHBhc3N3b3JkLAorIyBvciB0aGUgdXNlciBtdXN0IGFscmVhZHkgYmUgbG9nZ2VkIGluLgorIyAndGFnJyBpcyB0aGUgdGFnIHRvIHJldHJpZXZlLiBNdXN0IGJlIHNwZWNpZmllZCwgYnV0IGNhbiBiZSBlbXB0eS4KKyMgSWYgZGlybmFtZSBpcyBzcGVjaWZpZWQsIHRoZW4gbW9kdWxlIHdpbGwgYmUgcmVuYW1lZCB0byBkaXJuYW1lCisjIHByaW9yIHRvIGJ1aWxkaW5nIHRoZSB0YXJiYWxsLgorIyBVc2FnZTogQ1RfR2V0Q1ZTIDxiYXNlbmFtZT4gPHVybD4gPG1vZHVsZT4gPHRhZz4gW2Rpcm5hbWVbPXN1YmRpcl1dCisjIE5vdGU6IGlmICc9c3ViZGlyJyBpcyBnaXZlbiwgdGhlbiBpdCBpcyB1c2VkIGluc3RlYWQgb2YgJ21vZHVsZScuCitDVF9HZXRDVlMoKSB7CisgICAgbG9jYWwgYmFzZW5hbWU9IiQxIgorICAgIGxvY2FsIHVyaT0iJDIiCisgICAgbG9jYWwgbW9kdWxlPSIkMyIKKyAgICBsb2NhbCB0YWc9IiR7NDorLXIgJHs0fX0iCisgICAgbG9jYWwgZGlybmFtZT0iJDUiCisgICAgbG9jYWwgdG1wX2RpcgorCisgICAgIyBGaXJzdCB0cnkgbG9jYWxseSwgdGhlbiB0aGUgbWlycm9yCisgICAgaWYgQ1RfR2V0RmlsZSAiJHtiYXNlbmFtZX0iOyB0aGVuCisgICAgICAgICMgR290IGl0ISBSZXR1cm4gZWFybHkhIDotKQorICAgICAgICByZXR1cm4gMAorICAgIGZpCisKKyAgICBpZiBbICIke0NUX0ZPUkJJRF9ET1dOTE9BRH0iID0gInkiIF07IHRoZW4KKyAgICAgICAgQ1RfRG9Mb2cgV0FSTiAiRG93bmxvYWRzIGZvcmJpZGRlbiwgbm90IHRyeWluZyBjdnMgcmV0cmlldmFsIgorICAgICAgICByZXR1cm4gMQorICAgIGZpCisKKyAgICBDVF9Na3RlbXBEaXIgdG1wX2RpcgorICAgIENUX1B1c2hkICIke3RtcF9kaXJ9IgorCisgICAgQ1RfRG9FeGVjTG9nIEFMTCBjdnMgLXogOSAtZCAiJHt1cml9IiBjbyAtUCAke3RhZ30gIiR7bW9kdWxlfSIKKyAgICBpZiBbIC1uICIke2Rpcm5hbWV9IiBdOyB0aGVuCisgICAgICAgIGNhc2UgIiR7ZGlybmFtZX0iIGluCisgICAgICAgICAgICAqPSopCisgICAgICAgICAgICAgICAgQ1RfRG9FeGVjTG9nIERFQlVHIG12ICIke2Rpcm5hbWUjKj19IiAiJHtkaXJuYW1lJSU9Kn0iCisgICAgICAgICAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCB0YXIgY2pmICIke0NUX1RBUkJBTExTX0RJUn0vJHtiYXNlbmFtZX0udGFyLmJ6MiIgIiR7ZGlybmFtZSUlPSp9IgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgIENUX0RvRXhlY0xvZyBBTEwgbXYgIiR7bW9kdWxlfSIgIiR7ZGlybmFtZX0iCisgICAgICAgICAgICAgICAgQ1RfRG9FeGVjTG9nIEFMTCB0YXIgY2pmICIke0NUX1RBUkJBTExTX0RJUn0vJHtiYXNlbmFtZX0udGFyLmJ6MiIgIiR7ZGlybmFtZTotJHttb2R1bGV9fSIKKyAgICAgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgZmkKKyAgICBDVF9TYXZlTG9jYWwgIiR7Q1RfVEFSQkFMTFNfRElSfS8ke2Jhc2VuYW1lfS50YXIuYnoyIgorCisgICAgQ1RfUG9wZAorICAgIENUX0RvRXhlY0xvZyBBTEwgcm0gLXJmICIke3RtcF9kaXJ9IgorfQorCisjIENoZWNrIG91dCBmcm9tIFNWTiwgYW5kIGJ1aWxkIHRoZSBhc3NvY2lhdGVkIHRhcmJhbGwKKyMgVGhlIHRhcmJhbGwgd2lsbCBiZSBjYWxsZWQgJHtiYXNlbmFtZX0udGFyLmJ6MgorIyBQcmVyZXF1aXNpdGU6IGVpdGhlciB0aGUgc2VydmVyIGRvZXMgbm90IHJlcXVpcmUgcGFzc3dvcmQsCisjIG9yIHRoZSB1c2VyIG11c3QgYWxyZWFkeSBiZSBsb2dnZWQgaW4uCisjICdyZXYnIGlzIHRoZSByZXZpc2lvbiB0byByZXRyaWV2ZQorIyBVc2FnZTogQ1RfR2V0U1ZOIDxiYXNlbmFtZT4gPHVybD4gW3Jldl0KK0NUX0dldFNWTigpIHsKKyAgICBsb2NhbCBiYXNlbmFtZT0iJDEiCisgICAgbG9jYWwgdXJpPSIkMiIKKyAgICBsb2NhbCByZXY9IiQzIgorCisgICAgIyBGaXJzdCB0cnkgbG9jYWxseSwgdGhlbiB0aGUgbWlycm9yCisgICAgaWYgQ1RfR2V0RmlsZSAiJHtiYXNlbmFtZX0iOyB0aGVuCisgICAgICAgICMgR290IGl0ISBSZXR1cm4gZWFybHkhIDotKQorICAgICAgICByZXR1cm4gMAorICAgIGZpCisKKyAgICBpZiBbICIke0NUX0ZPUkJJRF9ET1dOTE9BRH0iID0gInkiIF07IHRoZW4KKyAgICAgICAgQ1RfRG9Mb2cgV0FSTiAiRG93bmxvYWRzIGZvcmJpZGRlbiwgbm90IHRyeWluZyBzdm4gcmV0cmlldmFsIgorICAgICAgICByZXR1cm4gMQorICAgIGZpCisKKyAgICBDVF9Na3RlbXBEaXIgdG1wX2RpcgorICAgIENUX1B1c2hkICIke3RtcF9kaXJ9IgorCisgICAgaWYgISBDVF9Eb0V4ZWNMb2cgQUxMIHN2biBleHBvcnQgJHtyZXY6Ky1yICR7cmV2fX0gIiR7dXJpfSIgIiR7YmFzZW5hbWV9IjsgdGhlbgorICAgICAgICBDVF9Eb0xvZyBXQVJOICJDb3VsZCBub3QgcmV0cmlldmUgJyR7YmFzZW5hbWV9JyIKKyAgICAgICAgcmV0dXJuIDEKKyAgICBmaQorICAgIENUX0RvRXhlY0xvZyBBTEwgdGFyIGNqZiAiJHtDVF9UQVJCQUxMU19ESVJ9LyR7YmFzZW5hbWV9LnRhci5iejIiICIke2Jhc2VuYW1lfSIKKyAgICBDVF9TYXZlTG9jYWwgIiR7Q1RfVEFSQkFMTFNfRElSfS8ke2Jhc2VuYW1lfS50YXIuYnoyIgorCisgICAgQ1RfUG9wZAorICAgIENUX0RvRXhlY0xvZyBBTEwgcm0gLXJmICIke3RtcF9kaXJ9IgorfQorCisjIENsb25lIGEgZ2l0IHRyZWUKKyMgVHJpZXMgdGhlIGdpdmVuIFVSTHMgaW4gdHVybiB1bnRpbCBvbmUgY2FuIGdldCBjbG9uZWQuIE5vIHRhcmJhbGwgd2lsbCBiZSBjcmVhdGVkLgorIyBQcmVyZXF1aXNpdGVzOiBlaXRoZXIgdGhlIHNlcnZlciBkb2VzIG5vdCByZXF1aXJlIHBhc3N3b3JkLAorIyBvciB0aGUgdXNlciBoYXMgYWxyZWFkeSB0YWtlbiBhbnkgYWN0aW9uIHRvIGF1dGhlbnRpY2F0ZSB0byB0aGUgc2VydmVyLgorIyBUaGUgY2xvbmVkIHRyZWUgd2lsbCAqbm90KiBiZSBzdG9yZWQgaW4gdGhlIGxvY2FsIHRhcmJhbGxzIGRpciEKKyMgVXNhZ2U6IENUX0dldEdpdCA8YmFzZW5hbWU+IDx1cmwgW3VybCAuLi5dPgorQ1RfR2V0R2l0KCkgeworICAgIGxvY2FsIGJhc2VuYW1lPSIkMSI7IHNoaWZ0CisgICAgbG9jYWwgdXJsCisgICAgbG9jYWwgY2xvbmVkPTAKKworICAgIGlmIFsgIiR7Q1RfRk9SQklEX0RPV05MT0FEfSIgPSAieSIgXTsgdGhlbgorICAgICAgICBDVF9Eb0xvZyBXQVJOICJEb3dubG9hZHMgZm9yYmlkZGVuLCBub3QgdHJ5aW5nIGdpdCByZXRyaWV2YWwiCisgICAgICAgIHJldHVybiAxCisgICAgZmkKKworICAgICMgRG8gd2UgaGF2ZSBpdCBpbiBvdXIgdGFyYmFsbHMgZGlyPworICAgIGlmIFsgLWQgIiR7Q1RfVEFSQkFMTFNfRElSfS8ke2Jhc2VuYW1lfS8uZ2l0IiBdOyB0aGVuCisgICAgICAgIENUX0RvTG9nIEVYVFJBICJVcGRhdGluZyBnaXQgdHJlZSAnJHtiYXNlbmFtZX0nIgorICAgICAgICBDVF9QdXNoZCAiJHtDVF9UQVJCQUxMU19ESVJ9LyR7YmFzZW5hbWV9IgorICAgICAgICBDVF9Eb0V4ZWNMb2cgQUxMIGdpdCBwdWxsCisgICAgICAgIENUX1BvcGQKKyAgICBlbHNlCisgICAgICAgIENUX0RvTG9nIEVYVFJBICJSZXRyaWV2aW5nIGdpdCB0cmVlICcke2Jhc2VuYW1lfSciCisgICAgICAgIGZvciB1cmwgaW4gIiR7QH0iOyBkbworICAgICAgICAgICAgQ1RfRG9Mb2cgQUxMICJUcnlpbmcgdG8gY2xvbmUgZnJvbSAnJHt1cmx9JyIKKyAgICAgICAgICAgIENUX0RvRm9yY2VSbWRpciAiJHtDVF9UQVJCQUxMU19ESVJ9LyR7YmFzZW5hbWV9IgorICAgICAgICAgICAgaWYgZ2l0IGNsb25lICIke3VybH0iICIke0NUX1RBUkJBTExTX0RJUn0vJHtiYXNlbmFtZX0iIDI+JjEgfENUX0RvTG9nIEFMTDsgdGhlbgorICAgICAgICAgICAgICAgIGNsb25lZD0xCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICAgICAgQ1RfVGVzdE9yQWJvcnQgIkNvdWxkIG5vdCBjbG9uZSAnJHtiYXNlbmFtZX0nIiAke2Nsb25lZH0gLW5lIDAKKyAgICBmaQorfQorCisjIEV4dHJhY3QgYSB0YXJiYWxsCisjIFNvbWUgdGFyYmFsbHMgbmVlZCB0byBiZSBleHRyYWN0ZWQgaW4gc3BlY2lmaWMgcGxhY2VzLiBFZy46IGdsaWJjIGFkZG9ucworIyBtdXN0IGJlIGV4dHJhY3RlZCBpbiB0aGUgZ2xpYmMgZGlyZWN0b3J5OyB1Q0xpYmMgbG9jYWxlcyBtdXN0IGJlIGV4dHJhY3RlZAorIyBpbiB0aGUgZXh0cmEvbG9jYWxlIHN1Yi1kaXJlY3Rvcnkgb2YgdUNsaWJjLiBUaGlzIGlzIHRha2VuIGludG8gYWNjb3VudAorIyBieSB0aGUgY2FsbGVyLCB0aGF0IGRpZCBhICdjZCcgaW50byB0aGUgY29ycmVjdCBwYXRoIGJlZm9yZSBjYWxsaW5nIHVzCisjIGFuZCBzZXRzIG5vY2hkaXIgdG8gJ25vY2hkaXInLgorIyBOb3RlIGFsc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGdpdCB0cmVlcyEKKyMgVXNhZ2U6IENUX0V4dHJhY3QgPGJhc2VuYW1lPiBbbm9jaGRpcl0gW29wdGlvbnNdCisjIHdoZXJlICdvcHRpb25zJyBhcmUgZGVwZW5kZW50IG9uIHRoZSBzb3VyY2UgKGVnLiBnaXQgYnJhbmNoL3RhZy4uLikKK0NUX0V4dHJhY3QoKSB7CisgICAgbG9jYWwgbm9jaGRpcj0iJDEiCisgICAgbG9jYWwgYmFzZW5hbWUKKyAgICBsb2NhbCBleHQKKyAgICBsb2NhbCBsem1hX3Byb2cKKyAgICBsb2NhbCAtYSB0YXJfb3B0cworCisgICAgaWYgWyAiJHtub2NoZGlyfSIgPSAibm9jaGRpciIgXTsgdGhlbgorICAgICAgICBzaGlmdAorICAgICAgICBub2NoZGlyPSIkKHB3ZCkiCisgICAgZWxzZQorICAgICAgICBub2NoZGlyPSIke0NUX1NSQ19ESVJ9IgorICAgIGZpCisKKyAgICBiYXNlbmFtZT0iJDEiCisgICAgc2hpZnQKKworICAgIGlmICEgZXh0PSIkKENUX0dldEZpbGVFeHRlbnNpb24gIiR7YmFzZW5hbWV9IikiOyB0aGVuCisgICAgICAgIENUX0RvTG9nIFdBUk4gIicke2Jhc2VuYW1lfScgbm90IGZvdW5kIGluICcke0NUX1RBUkJBTExTX0RJUn0nIgorICAgICAgICByZXR1cm4gMQorICAgIGZpCisgICAgbG9jYWwgZnVsbF9maWxlPSIke0NUX1RBUkJBTExTX0RJUn0vJHtiYXNlbmFtZX0ke2V4dH0iCisKKyAgICAjIENoZWNrIGlmIGFscmVhZHkgZXh0cmFjdGVkCisgICAgaWYgWyAtZSAiJHtDVF9TUkNfRElSfS8uJHtiYXNlbmFtZX0uZXh0cmFjdGVkIiBdOyB0aGVuCisgICAgICAgIENUX0RvTG9nIERFQlVHICJBbHJlYWR5IGV4dHJhY3RlZCAnJHtiYXNlbmFtZX0nIgorICAgICAgICByZXR1cm4gMAorICAgIGZpCisKKyAgICAjIENoZWNrIGlmIHByZXZpb3VzbHkgcGFydGlhbGx5IGV4dHJhY3RlZAorICAgIGlmIFsgLWUgIiR7Q1RfU1JDX0RJUn0vLiR7YmFzZW5hbWV9LmV4dHJhY3RpbmciIF07IHRoZW4KKyAgICAgICAgQ1RfRG9Mb2cgRVJST1IgIlRoZSAnJHtiYXNlbmFtZX0nIHNvdXJjZXMgd2VyZSBwYXJ0aWFsbHkgZXh0cmFjdGVkLiIKKyAgICAgICAgQ1RfRG9Mb2cgRVJST1IgIlBsZWFzZSByZW1vdmUgZmlyc3Q6IgorICAgICAgICBDVF9Eb0xvZyBFUlJPUiAiIC0gdGhlIHNvdXJjZSBkaXIgZm9yICcke2Jhc2VuYW1lfScsIGluICcke0NUX1NSQ19ESVJ9JyIKKyAgICAgICAgQ1RfRG9Mb2cgRVJST1IgIiAtIHRoZSBmaWxlICcke0NUX1NSQ19ESVJ9Ly4ke2Jhc2VuYW1lfS5leHRyYWN0aW5nJyIKKyAgICAgICAgQ1RfQWJvcnQgIkknbGwgc3RvcCBub3cgdG8gYXZvaWQgYW55IGNhcm5hZ2UuLi4iCisgICAgZmkKKyAgICBDVF9Eb0V4ZWNMb2cgREVCVUcgdG91Y2ggIiR7Q1RfU1JDX0RJUn0vLiR7YmFzZW5hbWV9LmV4dHJhY3RpbmciCisKKyAgICBDVF9QdXNoZCAiJHtub2NoZGlyfSIKKworICAgIENUX0RvTG9nIEVYVFJBICJFeHRyYWN0aW5nICcke2Jhc2VuYW1lfSciCisgICAgQ1RfRG9FeGVjTG9nIEZJTEUgbWtkaXIgLXAgIiR7YmFzZW5hbWV9IgorICAgIHRhcl9vcHRzPSggIi0tc3RyaXAtY29tcG9uZW50cz0xIiApCisgICAgdGFyX29wdHMrPSggIi1DIiAiJHtiYXNlbmFtZX0iICkKKyAgICB0YXJfb3B0cys9KCAiLXh2IiApCisKKyAgICAjIE9uZSBub3RlIGhlcmU6CisgICAgIyAtIGx6bWEgY2FuIGJlIGhhbmRsZWQgZWl0aGVyIHdpdGggJ3h6JyBvciAnbHptYScKKyAgICAjIC0gd2UgZ2V0IGx6bWEgdGFyYmFsbCBvbmx5IGlmIGVpdGhlciBvciBib3RoIGFyZSBhdmFpbGFibGUKKyAgICAjIC0gc28sIGlmIHdlIGdldCBhbiBsem1hIHRhcmJhbGwsIGFuZCBlaXRoZXIgJ3h6JyBvciAnbHptYScgaXMKKyAgICAjICAgbWlzc2luZywgd2UgY2FuIGFzc3VtZSB0aGUgb3RoZXIgaXMgYXZhaWxhYmxlCisgICAgaWYgWyAiJHtDVF9DT05GSUdVUkVfaGFzX2x6bWF9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIGx6bWFfcHJvZz0ibHptYSAtZmRjIgorICAgIGVsc2UKKyAgICAgICAgbHptYV9wcm9nPSJ4eiAtZmRjIgorICAgIGZpCisgICAgY2FzZSAiJHtleHR9IiBpbgorICAgICAgICAudGFyLnh6KSAgICAgIHh6IC1mZGMgIiR7ZnVsbF9maWxlfSIgfCBDVF9Eb0V4ZWNMb2cgRklMRSB0YXIgIiR7dGFyX29wdHNbQF19IiAtZiAtOzsKKyAgICAgICAgLnRhci5sem1hKSAgICAke2x6bWFfcHJvZ30gIiR7ZnVsbF9maWxlfSIgfCBDVF9Eb0V4ZWNMb2cgRklMRSB0YXIgIiR7dGFyX29wdHNbQF19IiAtZiAtOzsKKyAgICAgICAgLnRhci5iejIpICAgICBiemlwMiAtZGMgIiR7ZnVsbF9maWxlfSIgfCBDVF9Eb0V4ZWNMb2cgRklMRSB0YXIgIiR7dGFyX29wdHNbQF19IiAtZiAtOzsKKyAgICAgICAgLnRhci5nenwudGd6KSBnemlwIC1kYyAiJHtmdWxsX2ZpbGV9IiB8IENUX0RvRXhlY0xvZyBGSUxFIHRhciAiJHt0YXJfb3B0c1tAXX0iIC1mIC07OworICAgICAgICAudGFyKSAgICAgICAgIENUX0RvRXhlY0xvZyBGSUxFIHRhciAiJHt0YXJfb3B0c1tAXX0iIC1mICIke2Z1bGxfZmlsZX0iOzsKKyAgICAgICAgLy5naXQpICAgICAgICBDVF9FeHRyYWN0R2l0ICIke2Jhc2VuYW1lfSIgIiR7QH0iOzsKKyAgICAgICAgKikgICAgICAgICAgICBDVF9Eb0xvZyBXQVJOICJEb24ndCBrbm93IGhvdyB0byBoYW5kbGUgJyR7YmFzZW5hbWV9JHtleHR9JzogdW5rbm93biBleHRlbnNpb24iCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgICAgICAgICAgICA7OworICAgIGVzYWMKKworICAgICMgRG9uJ3QgbWFyayBhcyBiZWluZyBleHRyYWN0ZWQgZm9yIGdpdAorICAgIGNhc2UgIiR7ZXh0fSIgaW4KKyAgICAgICAgLy5naXQpICA7OworICAgICAgICAqKSAgICAgIENUX0RvRXhlY0xvZyBERUJVRyB0b3VjaCAiJHtDVF9TUkNfRElSfS8uJHtiYXNlbmFtZX0uZXh0cmFjdGVkIjs7CisgICAgZXNhYworICAgIENUX0RvRXhlY0xvZyBERUJVRyBybSAtZiAiJHtDVF9TUkNfRElSfS8uJHtiYXNlbmFtZX0uZXh0cmFjdGluZyIKKworICAgIENUX1BvcGQKK30KKworIyBDcmVhdGUgYSB3b3JraW5nIGdpdCBjbG9uZSBvZiBhIGxvY2FsIGdpdCByZXBvc2l0b3J5CisjIFVzYWdlOiBDVF9FeHRyYWN0R2l0IDxiYXNlbmFtZT4gW3JlZl0KKyMgd2hlcmUgJ3JlZicgaXMgdGhlIHJlZmVyZW5jZSB0byB1c2U6CisjICAgdGhlIGZ1bGwgbmFtZSBvZiBhIGJyYW5jaCwgbGlrZSAicmVtb3Rlcy9vcmlnaW4vYnJhbmNoX25hbWUiCisjICAgYSBkYXRlIGFzIHVuZGVyc3RhbmRhYmxlIGJ5IGdpdCwgbGlrZSAiWVlZWS1NTS1ERFsgaGhbOm1tWzpzc11dXSIKKyMgICBhIHRhZyBuYW1lCisjIElmICdyZWYnIGlzIG5vdCBnaXZlbiwgdGhlIGN1cnJlbnQgcmVwb3NpdG9yeSBIRUFEIHdpbGwgYmUgdXNlZAorQ1RfRXh0cmFjdEdpdCgpIHsKKyAgICBsb2NhbCBiYXNlbmFtZT0iJHsxfSIKKyAgICBsb2NhbCByZWY9IiR7Mn0iCisgICAgbG9jYWwgcmVwbworICAgIGxvY2FsIHJlZl90eXBlCisKKyAgICAjIHB1c2hkIG5vdyB0byBiZSBhYmxlIHRvIGdldCBnaXQgcmV2bGlzdCBpbiBjYXNlIHJlZiBpcyBhIGRhdGUKKyAgICByZXBvPSIke0NUX1RBUkJBTExTX0RJUn0vJHtiYXNlbmFtZX0iCisgICAgQ1RfUHVzaGQgIiR7cmVwb30iCisKKyAgICAjIFdoYXQga2luZCBvZiByZWZlcmVuY2UgaXMgJHtyZWZ9ID8KKyAgICBpZiBbIC16ICIke3JlZn0iIF07IHRoZW4KKyAgICAgICAgcmVmX3R5cGU9aGVhZAorICAgICAgICByZWY9JChnaXQgcmV2LWxpc3QgLW4xIEhFQUQpCisgICAgZWxpZiBnaXQgdGFnIHxncmVwIC1FICJeJHtyZWZ9JCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgIHJlZl90eXBlPXRhZworICAgIGVsaWYgZ2l0IGJyYW5jaCAtYSAtLW5vLWNvbG9yIHxncmVwIC1FICJeLiAke3JlZn0kIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAgcmVmX3R5cGU9YnJhbmNoCisgICAgZWxpZiBkYXRlIC1kICIke3JlZn0iID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICByZWZfdHlwZT1kYXRlCisgICAgICAgIHJlZj0kKGdpdCByZXYtbGlzdCAtbjEgLS1iZWZvcmU9IiR7cmVmfSIpCisgICAgZWxzZQorICAgICAgICBDVF9BYm9ydCAiUmVmZXJlbmNlICcke3JlZn0nIGlzIGFuIGluY29ycmVjdCBnaXQgcmVmZXJlbmNlOiBuZWl0aGVyIHRhZywgYnJhbmNoIG5vciBkYXRlIgorICAgIGZpCisKKyAgICBDVF9Qb3BkCisKKyAgICBDVF9Eb0V4ZWNMb2cgRklMRSBybWRpciAiJHtiYXNlbmFtZX0iCisgICAgY2FzZSAiJHtyZWZfdHlwZX0iIGluCisgICAgICAgIGJyYW5jaCkgQ1RfRG9FeGVjTG9nIEZJTEUgZ2l0IGNsb25lIC1iICIke3JlZn0iICIke3JlcG99IiAiJHtiYXNlbmFtZX0iIDs7CisgICAgICAgICopICAgICAgQ1RfRG9FeGVjTG9nIEZJTEUgZ2l0IGNsb25lICIke3JlcG99IiAiJHtiYXNlbmFtZX0iCisgICAgICAgICAgICAgICAgQ1RfUHVzaGQgIiR7YmFzZW5hbWV9IgorICAgICAgICAgICAgICAgIENUX0RvRXhlY0xvZyBGSUxFIGdpdCBjaGVja291dCAiJHtyZWZ9IgorICAgICAgICAgICAgICAgIENUX1BvcGQKKyAgICAgICAgICAgICAgICA7OworICAgIGVzYWMKK30KKworIyBQYXRjaGVzIHRoZSBzcGVjaWZpZWQgY29tcG9uZW50CisjIFNlZSBDVF9FeHRyYWN0LCBhYm92ZSwgZm9yIGV4cGxhbmF0aW9ucyBvbiAnbm9jaGRpcicKKyMgVXNhZ2U6IENUX1BhdGNoIFtub2NoZGlyXSA8cGFja2FnZW5hbWU+IDxwYWNrYWdldmVyc2lvbj4KKyMgSWYgdGhlIHBhY2thZ2UgZGlyZWN0b3J5IGlzICpub3QqIHBhY2thZ2VuYW1lLXBhY2thZ2V2ZXJzaW9uLCB0aGVuCisjIHRoZSBjYWxsZXIgbXVzdCBjZCBpbnRvIHRoZSBwcm9wZXIgZGlyZWN0b3J5IGZpcnN0LCBhbmQgY2FsbCB1cworIyB3aXRoIG5vY2hkaXIKK0NUX1BhdGNoKCkgeworICAgIGxvY2FsIG5vY2hkaXI9IiQxIgorICAgIGxvY2FsIHBrZ25hbWUKKyAgICBsb2NhbCB2ZXJzaW9uCisgICAgbG9jYWwgcGtnZGlyCisgICAgbG9jYWwgYmFzZV9maWxlCisgICAgbG9jYWwgdmVyX2ZpbGUKKyAgICBsb2NhbCBkCisgICAgbG9jYWwgLWEgcGF0Y2hfZGlycworICAgIGxvY2FsIGJ1bmRsZWRfcGF0Y2hfZGlyCisgICAgbG9jYWwgbG9jYWxfcGF0Y2hfZGlyCisKKyAgICBpZiBbICIke25vY2hkaXJ9IiA9ICJub2NoZGlyIiBdOyB0aGVuCisgICAgICAgIHNoaWZ0CisgICAgICAgIHBrZ25hbWU9IiQxIgorICAgICAgICB2ZXJzaW9uPSIkMiIKKyAgICAgICAgcGtnZGlyPSIke3BrZ25hbWV9LSR7dmVyc2lvbn0iCisgICAgICAgIG5vY2hkaXI9IiQocHdkKSIKKyAgICBlbHNlCisgICAgICAgIHBrZ25hbWU9IiQxIgorICAgICAgICB2ZXJzaW9uPSIkMiIKKyAgICAgICAgcGtnZGlyPSIke3BrZ25hbWV9LSR7dmVyc2lvbn0iCisgICAgICAgIG5vY2hkaXI9IiR7Q1RfU1JDX0RJUn0vJHtwa2dkaXJ9IgorICAgIGZpCisKKyAgICAjIENoZWNrIGlmIGFscmVhZHkgcGF0Y2hlZAorICAgIGlmIFsgLWUgIiR7Q1RfU1JDX0RJUn0vLiR7cGtnZGlyfS5wYXRjaGVkIiBdOyB0aGVuCisgICAgICAgIENUX0RvTG9nIERFQlVHICJBbHJlYWR5IHBhdGNoZWQgJyR7cGtnZGlyfSciCisgICAgICAgIHJldHVybiAwCisgICAgZmkKKworICAgICMgQ2hlY2sgaWYgYWxyZWFkeSBwYXJ0aWFsbHkgcGF0Y2hlZAorICAgIGlmIFsgLWUgIiR7Q1RfU1JDX0RJUn0vLiR7cGtnZGlyfS5wYXRjaGluZyIgXTsgdGhlbgorICAgICAgICBDVF9Eb0xvZyBFUlJPUiAiVGhlICcke3BrZ2Rpcn0nIHNvdXJjZXMgd2VyZSBwYXJ0aWFsbHkgcGF0Y2hlZC4iCisgICAgICAgIENUX0RvTG9nIEVSUk9SICJQbGVhc2UgcmVtb3ZlIGZpcnN0OiIKKyAgICAgICAgQ1RfRG9Mb2cgRVJST1IgIiAtIHRoZSBzb3VyY2UgZGlyIGZvciAnJHtwa2dkaXJ9JywgaW4gJyR7Q1RfU1JDX0RJUn0nIgorICAgICAgICBDVF9Eb0xvZyBFUlJPUiAiIC0gdGhlIGZpbGUgJyR7Q1RfU1JDX0RJUn0vLiR7cGtnZGlyfS5leHRyYWN0ZWQnIgorICAgICAgICBDVF9Eb0xvZyBFUlJPUiAiIC0gdGhlIGZpbGUgJyR7Q1RfU1JDX0RJUn0vLiR7cGtnZGlyfS5wYXRjaGluZyciCisgICAgICAgIENUX0Fib3J0ICJJJ2xsIHN0b3Agbm93IHRvIGF2b2lkIGFueSBjYXJuYWdlLi4uIgorICAgIGZpCisgICAgdG91Y2ggIiR7Q1RfU1JDX0RJUn0vLiR7cGtnZGlyfS5wYXRjaGluZyIKKworICAgIENUX1B1c2hkICIke25vY2hkaXJ9IgorCisgICAgQ1RfRG9Mb2cgRVhUUkEgIlBhdGNoaW5nICcke3BrZ2Rpcn0nIgorCisgICAgYnVuZGxlZF9wYXRjaF9kaXI9IiR7Q1RfTElCX0RJUn0vcGF0Y2hlcy8ke3BrZ25hbWV9LyR7dmVyc2lvbn0iCisgICAgbG9jYWxfcGF0Y2hfZGlyPSIke0NUX0xPQ0FMX1BBVENIX0RJUn0vJHtwa2duYW1lfS8ke3ZlcnNpb259IgorCisgICAgY2FzZSAiJHtDVF9QQVRDSF9PUkRFUn0iIGluCisgICAgICAgIGJ1bmRsZWQpICAgICAgICBwYXRjaF9kaXJzPSgiJHtidW5kbGVkX3BhdGNoX2Rpcn0iKTs7CisgICAgICAgIGxvY2FsKSAgICAgICAgICBwYXRjaF9kaXJzPSgiJHtsb2NhbF9wYXRjaF9kaXJ9Iik7OworICAgICAgICBidW5kbGVkLGxvY2FsKSAgcGF0Y2hfZGlycz0oIiR7YnVuZGxlZF9wYXRjaF9kaXJ9IiAiJHtsb2NhbF9wYXRjaF9kaXJ9Iik7OworICAgICAgICBsb2NhbCxidW5kbGVkKSAgcGF0Y2hfZGlycz0oIiR7bG9jYWxfcGF0Y2hfZGlyfSIgIiR7YnVuZGxlZF9wYXRjaF9kaXJ9Iik7OworICAgICAgICBub25lKSAgICAgICAgICAgcGF0Y2hfZGlycz07OworICAgIGVzYWMKKworICAgIGZvciBkIGluICIke3BhdGNoX2RpcnNbQF19IjsgZG8KKyAgICAgICAgQ1RfRG9Mb2cgREVCVUcgIkxvb2tpbmcgZm9yIHBhdGNoZXMgaW4gJyR7ZH0nLi4uIgorICAgICAgICBpZiBbIC1uICIke2R9IiAtYSAtZCAiJHtkfSIgXTsgdGhlbgorICAgICAgICAgICAgZm9yIHAgaW4gIiR7ZH0iLyoucGF0Y2g7IGRvCisgICAgICAgICAgICAgICAgaWYgWyAtZiAiJHtwfSIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBDVF9Eb0xvZyBERUJVRyAiQXBwbHlpbmcgcGF0Y2ggJyR7cH0nIgorICAgICAgICAgICAgICAgICAgICBDVF9Eb0V4ZWNMb2cgQUxMIHBhdGNoIC0tbm8tYmFja3VwLWlmLW1pc21hdGNoIC1nMCAtRjEgLXAxIC1mIDwiJHtwfSIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgaWYgWyAiJHtDVF9QQVRDSF9TSU5HTEV9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgZG9uZQorCisgICAgaWYgWyAiJHtDVF9PVkVSSURFX0NPTkZJR19HVUVTU19TVUJ9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIENUX0RvTG9nIEFMTCAiT3ZlcmlkaW5nIGNvbmZpZy5ndWVzcyBhbmQgY29uZmlnLnN1YiIKKyAgICAgICAgZm9yIGNmZyBpbiBjb25maWdfZ3Vlc3MgY29uZmlnX3N1YjsgZG8KKyAgICAgICAgICAgIGV2YWwgJHtjZmd9PSIke0NUX0xJQl9ESVJ9L3NjcmlwdHMvJHtjZmcvXy8ufSIKKyAgICAgICAgICAgIFsgLWUgIiR7Q1RfVE9QX0RJUn0vc2NyaXB0cy8ke2NmZy9fLy59IiBdICYmIGV2YWwgJHtjZmd9PSIke0NUX1RPUF9ESVJ9L3NjcmlwdHMvJHtjZmcvXy8ufSIKKyAgICAgICAgICAgICMgQ2FuJ3QgdXNlIENUX0RvRXhlY0xvZyBiZWNhdXNlIG9mIHRoZSAne30gXDsnIHRvIGJlIHBhc3NlZCB1bi1tYW5nbGVkIHRvIGZpbmQKKyAgICAgICAgICAgIGZpbmQgLiAtdHlwZSBmIC1uYW1lICIke2NmZy9fLy59IiAtZXhlYyBjcCAtdiAiJHshY2ZnfSIge30gXDsgfENUX0RvTG9nIEFMTAorICAgICAgICBkb25lCisgICAgZmkKKworICAgIENUX0RvRXhlY0xvZyBERUJVRyB0b3VjaCAiJHtDVF9TUkNfRElSfS8uJHtwa2dkaXJ9LnBhdGNoZWQiCisgICAgQ1RfRG9FeGVjTG9nIERFQlVHIHJtIC1mICIke0NUX1NSQ19ESVJ9Ly4ke3BrZ2Rpcn0ucGF0Y2hpbmciCisKKyAgICBDVF9Qb3BkCit9CisKKyMgVHdvIHdyYXBwZXJzIHRvIGNhbGwgY29uZmlnLihndWVzc3xzdWIpIGVpdGhlciBmcm9tIENUX1RPUF9ESVIgb3IgQ1RfTElCX0RJUi4KKyMgVGhvc2UgZnJvbSBDVF9UT1BfRElSLCBpZiB0aGV5IGV4aXN0LCB3aWxsIGJlIGJlIG1vcmUgcmVjZW50IHRoYW4gdGhvc2UgZnJvbSBDVF9MSUJfRElSLgorQ1RfRG9Db25maWdHdWVzcygpIHsKKyAgICBpZiBbIC14ICIke0NUX1RPUF9ESVJ9L3NjcmlwdHMvY29uZmlnLmd1ZXNzIiBdOyB0aGVuCisgICAgICAgICIke0NUX1RPUF9ESVJ9L3NjcmlwdHMvY29uZmlnLmd1ZXNzIgorICAgIGVsc2UKKyAgICAgICAgIiR7Q1RfTElCX0RJUn0vc2NyaXB0cy9jb25maWcuZ3Vlc3MiCisgICAgZmkKK30KKworQ1RfRG9Db25maWdTdWIoKSB7CisgICAgaWYgWyAteCAiJHtDVF9UT1BfRElSfS9zY3JpcHRzL2NvbmZpZy5zdWIiIF07IHRoZW4KKyAgICAgICAgIiR7Q1RfVE9QX0RJUn0vc2NyaXB0cy9jb25maWcuc3ViIiAiJEAiCisgICAgZWxzZQorICAgICAgICAiJHtDVF9MSUJfRElSfS9zY3JpcHRzL2NvbmZpZy5zdWIiICIkQCIKKyAgICBmaQorfQorCisjIENvbXB1dGUgdGhlIHRhcmdldCB0dXBsZSBmcm9tIHdoYXQgaXMgcHJvdmlkZWQgYnkgdGhlIHVzZXIKKyMgVXNhZ2U6IENUX0RvQnVpbGRUYXJnZXRUdXBsZQorIyBJbiBmYWN0IHRoaXMgZnVuY3Rpb24gdGFrZXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBidWlsZCB0aGUgdGFyZ2V0CisjIHR1cGxlLiBJdCBpcyBuZWVkZWQgYm90aCBieSB0aGUgbm9ybWFsIGJ1aWxkIHNlcXVlbmNlLCBhcyB3ZWxsIGFzIHRoZQorIyBzYW1wbGUgc2F2aW5nIHNlcXVlbmNlLgorQ1RfRG9CdWlsZFRhcmdldFR1cGxlKCkgeworICAgICMgU2V0IHRoZSBlbmRpYW5uZXNzIHN1ZmZpeCwgYW5kIHRoZSBkZWZhdWx0IGVuZGlhbm5lc3MgZ2NjIG9wdGlvbgorICAgIGNhc2UgIiR7Q1RfQVJDSF9CRX0sJHtDVF9BUkNIX0xFfSIgaW4KKyAgICAgICAgeSwpIHRhcmdldF9lbmRpYW5fZWI9ZWIKKyAgICAgICAgICAgIHRhcmdldF9lbmRpYW5fZWw9CisgICAgICAgICAgICBDVF9BUkNIX0VORElBTl9DRkxBRz0iLW1iaWctZW5kaWFuIgorICAgICAgICAgICAgQ1RfQVJDSF9FTkRJQU5fTERGTEFHPSItRUIiCisgICAgICAgICAgICA7OworICAgICAgICAseSkgdGFyZ2V0X2VuZGlhbl9lYj0KKyAgICAgICAgICAgIHRhcmdldF9lbmRpYW5fZWw9ZWwKKyAgICAgICAgICAgIENUX0FSQ0hfRU5ESUFOX0NGTEFHPSItbWxpdHRsZS1lbmRpYW4iCisgICAgICAgICAgICBDVF9BUkNIX0VORElBTl9MREZMQUc9Ii1FTCIKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBCdWlsZCB0aGUgZGVmYXVsdCBhcmNoaXRlY3R1cmUgdHVwbGUgcGFydAorICAgIENUX1RBUkdFVF9BUkNIPSIke0NUX0FSQ0h9IgorCisgICAgIyBTZXQgZGVmYXVsdHMgZm9yIHRoZSBzeXN0ZW0gcGFydCBvZiB0aGUgdHVwbGUuIENhbiBiZSBvdmVycmlkZW4KKyAgICAjIGJ5IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB2YWx1ZXMuCisgICAgY2FzZSAiJHtDVF9MSUJDfSIgaW4KKyAgICAgICAgKmdsaWJjKSBDVF9UQVJHRVRfU1lTPWdudTs7CisgICAgICAgIHVDbGliYykgQ1RfVEFSR0VUX1NZUz11Y2xpYmM7OworICAgICAgICAqKSAgICAgIENUX1RBUkdFVF9TWVM9ZWxmOzsKKyAgICBlc2FjCisKKyAgICAjIFNldCB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIEFSQ0gsIEFCSSwgQ1BVLCBUVU5FLCBGUFUgYW5kIEZMT0FUCisgICAgdW5zZXQgQ1RfQVJDSF9BUkNIX0NGTEFHIENUX0FSQ0hfQUJJX0NGTEFHIENUX0FSQ0hfQ1BVX0NGTEFHIENUX0FSQ0hfVFVORV9DRkxBRyBDVF9BUkNIX0ZQVV9DRkxBRyBDVF9BUkNIX0ZMT0FUX0NGTEFHCisgICAgdW5zZXQgQ1RfQVJDSF9XSVRIX0FSQ0ggQ1RfQVJDSF9XSVRIX0FCSSBDVF9BUkNIX1dJVEhfQ1BVIENUX0FSQ0hfV0lUSF9UVU5FIENUX0FSQ0hfV0lUSF9GUFUgQ1RfQVJDSF9XSVRIX0ZMT0FUCisgICAgWyAiJHtDVF9BUkNIX0FSQ0h9IiAgICAgXSAmJiB7IENUX0FSQ0hfQVJDSF9DRkxBRz0iLW1hcmNoPSR7Q1RfQVJDSF9BUkNIfSI7ICBDVF9BUkNIX1dJVEhfQVJDSD0iLS13aXRoLWFyY2g9JHtDVF9BUkNIX0FSQ0h9IjsgfQorICAgIFsgIiR7Q1RfQVJDSF9BQkl9IiAgICAgIF0gJiYgeyBDVF9BUkNIX0FCSV9DRkxBRz0iLW1hYmk9JHtDVF9BUkNIX0FCSX0iOyAgICAgQ1RfQVJDSF9XSVRIX0FCST0iLS13aXRoLWFiaT0ke0NUX0FSQ0hfQUJJfSI7ICAgIH0KKyAgICBbICIke0NUX0FSQ0hfQ1BVfSIgICAgICBdICYmIHsgQ1RfQVJDSF9DUFVfQ0ZMQUc9Ii1tY3B1PSR7Q1RfQVJDSF9DUFV9IjsgICAgIENUX0FSQ0hfV0lUSF9DUFU9Ii0td2l0aC1jcHU9JHtDVF9BUkNIX0NQVX0iOyAgICB9CisgICAgWyAiJHtDVF9BUkNIX1RVTkV9IiAgICAgXSAmJiB7IENUX0FSQ0hfVFVORV9DRkxBRz0iLW10dW5lPSR7Q1RfQVJDSF9UVU5FfSI7ICBDVF9BUkNIX1dJVEhfVFVORT0iLS13aXRoLXR1bmU9JHtDVF9BUkNIX1RVTkV9IjsgfQorICAgIFsgIiR7Q1RfQVJDSF9GUFV9IiAgICAgIF0gJiYgeyBDVF9BUkNIX0ZQVV9DRkxBRz0iLW1mcHU9JHtDVF9BUkNIX0ZQVX0iOyAgICAgQ1RfQVJDSF9XSVRIX0ZQVT0iLS13aXRoLWZwdT0ke0NUX0FSQ0hfRlBVfSI7ICAgIH0KKyAgICBbICIke0NUX0FSQ0hfRkxPQVRfU1d9IiBdICYmIHsgQ1RfQVJDSF9GTE9BVF9DRkxBRz0iLW1zb2Z0LWZsb2F0IjsgICAgICAgICAgIENUX0FSQ0hfV0lUSF9GTE9BVD0iLS13aXRoLWZsb2F0PXNvZnQiOyAgICAgICAgICB9CisKKyAgICAjIEJ1aWxkIHRoZSBkZWZhdWx0IGtlcm5lbCB0dXBsZSBwYXJ0CisgICAgQ1RfVEFSR0VUX0tFUk5FTD0iJHtDVF9LRVJORUx9IgorCisgICAgIyBPdmVyaWRlIHRoZSBkZWZhdWx0IHZhbHVlcyB3aXRoIHRoZSBjb21wb25lbnRzIHNwZWNpZmljIHNldHRpbmdzCisgICAgQ1RfRG9BcmNoVHVwbGVWYWx1ZXMKKyAgICBDVF9Eb0tlcm5lbFR1cGxlVmFsdWVzCisKKyAgICAjIEZpbmlzaCB0aGUgdGFyZ2V0IHR1cGxlIGNvbnN0cnVjdGlvbgorICAgIENUX1RBUkdFVD0iJHtDVF9UQVJHRVRfQVJDSH0iCisgICAgQ1RfVEFSR0VUPSIke0NUX1RBUkdFVH0ke0NUX1RBUkdFVF9WRU5ET1I6Ky0ke0NUX1RBUkdFVF9WRU5ET1J9fSIKKyAgICBDVF9UQVJHRVQ9IiR7Q1RfVEFSR0VUfSR7Q1RfVEFSR0VUX0tFUk5FTDorLSR7Q1RfVEFSR0VUX0tFUk5FTH19IgorICAgIENUX1RBUkdFVD0iJHtDVF9UQVJHRVR9JHtDVF9UQVJHRVRfU1lTOistJHtDVF9UQVJHRVRfU1lTfX0iCisKKyAgICAjIFNhbml0eSBjaGVja3MKKyAgICBfX3NlZF9hbGlhcz0iIgorICAgIGlmIFsgLW4gIiR7Q1RfVEFSR0VUX0FMSUFTX1NFRF9FWFBSfSIgXTsgdGhlbgorICAgICAgICBfX3NlZF9hbGlhcz0kKGVjaG8gIiR7Q1RfVEFSR0VUfSIgfHNlZCAtciAtZSAiJHtDVF9UQVJHRVRfQUxJQVNfU0VEX0VYUFJ9IikKKyAgICBmaQorICAgIGNhc2UgIjoke0NUX1RBUkdFVF9WRU5ET1J9OiR7Q1RfVEFSR0VUX0FMSUFTfToke19fc2VkX2FsaWFzfToiIGluCisgICAgICA6KiIgIio6KjoqOikgQ1RfQWJvcnQgIkRvbid0IHVzZSBzcGFjZXMgaW4gdGhlIHZlbmRvciBzdHJpbmcsIGl0IGJyZWFrcyB0aGluZ3MuIjs7CisgICAgICA6KiItIio6KjoqOikgQ1RfQWJvcnQgIkRvbid0IHVzZSBkYXNoZXMgaW4gdGhlIHZlbmRvciBzdHJpbmcsIGl0IGJyZWFrcyB0aGluZ3MuIjs7CisgICAgICA6KjoqIiAiKjoqOikgQ1RfQWJvcnQgIkRvbid0IHVzZSBzcGFjZXMgaW4gdGhlIHRhcmdldCBhbGlhcywgaXQgYnJlYWtzIHRoaW5ncy4iOzsKKyAgICAgIDoqOio6KiIgIio6KSBDVF9BYm9ydCAiRG9uJ3QgdXNlIHNwYWNlcyBpbiB0aGUgdGFyZ2V0IHNlZCB0cmFuc2Zvcm0sIGl0IGJyZWFrcyB0aGluZ3MuIjs7CisgICAgZXNhYworCisgICAgIyBDYW5vbmljYWxpc2UgaXQKKyAgICBDVF9UQVJHRVQ9JChDVF9Eb0NvbmZpZ1N1YiAiJHtDVF9UQVJHRVR9IikKKyAgICAjIFByZXBhcmUgdGhlIHRhcmdldCBDRkxBR1MKKyAgICBDVF9BUkNIX1RBUkdFVF9DRkxBR1M9IiR7Q1RfQVJDSF9UQVJHRVRfQ0ZMQUdTfSAke0NUX0FSQ0hfRU5ESUFOX0NGTEFHfSIKKyAgICBDVF9BUkNIX1RBUkdFVF9DRkxBR1M9IiR7Q1RfQVJDSF9UQVJHRVRfQ0ZMQUdTfSAke0NUX0FSQ0hfQVJDSF9DRkxBR30iCisgICAgQ1RfQVJDSF9UQVJHRVRfQ0ZMQUdTPSIke0NUX0FSQ0hfVEFSR0VUX0NGTEFHU30gJHtDVF9BUkNIX0FCSV9DRkxBR30iCisgICAgQ1RfQVJDSF9UQVJHRVRfQ0ZMQUdTPSIke0NUX0FSQ0hfVEFSR0VUX0NGTEFHU30gJHtDVF9BUkNIX0NQVV9DRkxBR30iCisgICAgQ1RfQVJDSF9UQVJHRVRfQ0ZMQUdTPSIke0NUX0FSQ0hfVEFSR0VUX0NGTEFHU30gJHtDVF9BUkNIX1RVTkVfQ0ZMQUd9IgorICAgIENUX0FSQ0hfVEFSR0VUX0NGTEFHUz0iJHtDVF9BUkNIX1RBUkdFVF9DRkxBR1N9ICR7Q1RfQVJDSF9GUFVfQ0ZMQUd9IgorICAgIENUX0FSQ0hfVEFSR0VUX0NGTEFHUz0iJHtDVF9BUkNIX1RBUkdFVF9DRkxBR1N9ICR7Q1RfQVJDSF9GTE9BVF9DRkxBR30iCisKKyAgICAjIE5vdyBvbiBmb3IgdGhlIHRhcmdldCBMREZMQUdTCisgICAgQ1RfQVJDSF9UQVJHRVRfTERGTEFHUz0iJHtDVF9BUkNIX1RBUkdFVF9MREZMQUdTfSAke0NUX0FSQ0hfRU5ESUFOX0xERkxBR30iCit9CisKKyMgVGhpcyBmdW5jdGlvbiBkb2VzIHBhdXNlIHRoZSBidWlsZCB1bnRpbCB0aGUgdXNlciBzdHJpa2VzICJSZXR1cm4iCisjIFVzYWdlOiBDVF9Eb1BhdXNlIFtvcHRpb25hbF9tZXNzYWdlXQorQ1RfRG9QYXVzZSgpIHsKKyAgICBsb2NhbCBmb28KKyAgICBsb2NhbCBtZXNzYWdlPSIkezE6LVBhdXNpbmcgZm9yIHlvdXIgcGxlYXN1cmV9IgorICAgIENUX0RvTG9nIElORk8gIiR7bWVzc2FnZX0iCisgICAgcmVhZCAtcCAiUHJlc3MgJ0VudGVyJyB0byBjb250aW51ZSwgb3IgQ3RybC1DIHRvIHN0b3AuLi4iIGZvbyA+JjYKKyAgICByZXR1cm4gMAorfQorCisjIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIHRhcmJhbGwgb2YgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnksIGJ1dAorIyBvbmx5IGlmIGl0IGV4aXN0cworIyBVc2FnZTogQ1RfRG9UYXJiYWxsSWZFeGlzdHMgPGRpcj4gPHRhcmJhbGxfYmFzZW5hbWU+IFtleHRyYV90YXJfb3B0aW9ucyBbLi4uXV0KK0NUX0RvVGFyYmFsbElmRXhpc3RzKCkgeworICAgIGxvY2FsIGRpcj0iJDEiCisgICAgbG9jYWwgdGFyYmFsbD0iJDIiCisgICAgc2hpZnQgMgorICAgIGxvY2FsIC1hIGV4dHJhX3Rhcl9vcHRzPSggIiRAIiApCisgICAgbG9jYWwgLWEgY29tcHJlc3MKKworICAgIGNhc2UgIiR7Q1RfREVCVUdfQ1RfU0FWRV9TVEVQU19HWklQfSIgaW4KKyAgICAgICAgeSkgIGNvbXByZXNzPSggZ3ppcCAtYyAtMyAtICk7IHRhcl9leHQ9Lmd6OzsKKyAgICAgICAgKikgIGNvbXByZXNzPSggY2F0IC0gKTsgICAgICAgIHRhcl9leHQ9OzsKKyAgICBlc2FjCisKKyAgICBpZiBbIC1kICIke2Rpcn0iIF07IHRoZW4KKyAgICAgICAgQ1RfRG9Mb2cgREVCVUcgIiAgU2F2aW5nICcke2Rpcn0nIgorICAgICAgICB7IHRhciBjIC1DICIke2Rpcn0iIC12IC1mIC0gIiR7ZXh0cmFfdGFyX29wdHNbQF19IiAuICAgIFwKKyAgICAgICAgICB8IiR7Y29tcHJlc3NbQF19IiA+IiR7dGFyYmFsbH0udGFyJHt0YXJfZXh0fSIgICAgICAgICA7CisgICAgICAgIH0gMj4mMSB8c2VkIC1yIC1lICdzL14vICAgIC87JyB8Q1RfRG9Mb2cgU1RBVEUKKyAgICBlbHNlCisgICAgICAgIENUX0RvTG9nIFNUQVRFICIgIE5vdCBzYXZpbmcgJyR7ZGlyfSc6IGRvZXMgbm90IGV4aXN0IgorICAgIGZpCit9CisKKyMgVGhpcyBmdW5jdGlvbiBleHRyYWN0cyBhIHRhcmJhbGwgdG8gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnksIGJ1dAorIyBvbmx5IGlmIHRoZSB0YXJiYWxsIGV4aXN0cworIyBVc2FnZTogQ1RfRG9FeHRyYWN0VGFyYmFsbElmRXhpc3RzIDx0YXJiYWxsX2Jhc2VuYW1lPiA8ZGlyPiBbZXh0cmFfdGFyX29wdGlvbnMgWy4uLl1dCitDVF9Eb0V4dHJhY3RUYXJiYWxsSWZFeGlzdHMoKSB7CisgICAgbG9jYWwgdGFyYmFsbD0iJDEiCisgICAgbG9jYWwgZGlyPSIkMiIKKyAgICBzaGlmdCAyCisgICAgbG9jYWwgLWEgZXh0cmFfdGFyX29wdHM9KCAiJEAiICkKKyAgICBsb2NhbCAtYSB1bmNvbXByZXNzCisKKyAgICBjYXNlICIke0NUX0RFQlVHX0NUX1NBVkVfU1RFUFNfR1pJUH0iIGluCisgICAgICAgIHkpICB1bmNvbXByZXNzPSggZ3ppcCAtYyAtZCApOyB0YXJfZXh0PS5nejs7CisgICAgICAgICopICB1bmNvbXByZXNzPSggY2F0ICk7ICAgICAgICB0YXJfZXh0PTs7CisgICAgZXNhYworCisgICAgaWYgWyAtZiAiJHt0YXJiYWxsfS50YXIke3Rhcl9leHR9IiBdOyB0aGVuCisgICAgICAgIENUX0RvTG9nIERFQlVHICIgIFJlc3RvcmluZyAnJHtkaXJ9JyIKKyAgICAgICAgQ1RfRG9Gb3JjZVJtZGlyICIke2Rpcn0iCisgICAgICAgIENUX0RvRXhlY0xvZyBERUJVRyBta2RpciAtcCAiJHtkaXJ9IgorICAgICAgICB7ICIke3VuY29tcHJlc3NbQF19IiAiJHt0YXJiYWxsfS50YXIke3Rhcl9leHR9IiAgICAgXAorICAgICAgICAgIHx0YXIgeCAtQyAiJHtkaXJ9IiAtdiAtZiAtICIke2V4dHJhX3Rhcl9vcHRzW0BdfSIgOworICAgICAgICB9IDI+JjEgfHNlZCAtciAtZSAncy9eLyAgICAvOycgfENUX0RvTG9nIFNUQVRFCisgICAgZWxzZQorICAgICAgICBDVF9Eb0xvZyBTVEFURSAiICBOb3QgcmVzdG9yaW5nICcke2Rpcn0nOiBkb2VzIG5vdCBleGlzdCIKKyAgICBmaQorfQorCisjIFRoaXMgZnVuY3Rpb24gc2F2ZXMgdGhlIHN0YXRlIG9mIHRoZSB0b29sY2hhaW4gdG8gYmUgYWJsZSB0byByZXN0YXJ0CisjIGF0IGFueSBvbmUgcG9pbnQKKyMgVXNhZ2U6IENUX0RvU2F2ZVN0YXRlIDxuZXh0X3N0ZXBfbmFtZT4KK0NUX0RvU2F2ZVN0YXRlKCkgeworCVsgIiR7Q1RfREVCVUdfQ1RfU0FWRV9TVEVQU30iID0gInkiIF0gfHwgcmV0dXJuIDAKKyAgICBsb2NhbCBzdGF0ZV9uYW1lPSIkMSIKKyAgICBsb2NhbCBzdGF0ZV9kaXI9IiR7Q1RfU1RBVEVfRElSfS8ke3N0YXRlX25hbWV9IgorCisgICAgIyBMb2cgdGhpcyB0byB0aGUgbG9nIGxldmVsIHJlcXVpcmVkIGJ5IHRoZSB1c2VyCisgICAgQ1RfRG9Mb2cgJHtDVF9MT0dfTEVWRUxfTUFYfSAiU2F2aW5nIHN0YXRlIHRvIHJlc3RhcnQgYXQgc3RlcCAnJHtzdGF0ZV9uYW1lfScuLi4iCisKKyAgICBybSAtcmYgIiR7c3RhdGVfZGlyfSIKKyAgICBta2RpciAtcCAiJHtzdGF0ZV9kaXJ9IgorCisgICAgQ1RfRG9Mb2cgU1RBVEUgIiAgU2F2aW5nIGVudmlyb25tZW50IGFuZCBhbGlhc2VzIgorICAgICMgV2UgbXVzdCBvbWl0IHNoZWxsIGZ1bmN0aW9ucywgYW5kIHNvbWUgc3BlY2lmaWMgYmFzaCB2YXJpYWJsZXMKKyAgICAjIHRoYXQgYnJlYWsgd2hlbiByZXN0b3JpbmcgdGhlIGVudmlyb25tZW50LCBsYXRlci4gV2UgY291bGQgZG8KKyAgICAjIGFsbCB0aGUgcHJvY2Vzc2luZyBpbiB0aGUgYXdrIHNjcmlwdCwgYnV0IGEgc2VkIGlzIGVhc2llci4uLgorICAgIHNldCB8YXdrICcKKyAgICAgICAgICAgICAgQkVHSU4geyBfcCA9IDE7IH0KKyAgICAgICAgICAgICAgJDB+L15bXiBdKyBcKFwpLyB7IF9wID0gMDsgfQorICAgICAgICAgICAgICBfcCA9PSAxCisgICAgICAgICAgICAgICQwID09ICJ9IiB7IF9wID0gMTsgfQorICAgICAgICAgICAgICAnIHxzZWQgLXIgLWUgJy9eQkFTSF8oQVJHQ3xBUkdWfExJTkVOT3xTT1VSQ0V8VkVSU0lORk8pPS9kOworICAgICAgICAgICAgICAgICAgICAgICAgICAgL14oVUlEfEVVSUQpPS9kOworICAgICAgICAgICAgICAgICAgICAgICAgICAgL14oRlVOQ05BTUV8R1JPVVBTfFBQSUR8U0hFTExPUFRTKT0vZDsnID4iJHtzdGF0ZV9kaXJ9L2Vudi5zaCIKKworICAgIENUX0RvVGFyYmFsbElmRXhpc3RzICIke0NUX0JVSUxEVE9PTFNfUFJFRklYX0RJUn0iICIke3N0YXRlX2Rpcn0vYnVpbGR0b29sc19kaXIiCisgICAgQ1RfRG9UYXJiYWxsSWZFeGlzdHMgIiR7Q1RfQ09NUExJQlNfRElSfSIgIiR7c3RhdGVfZGlyfS9jb21wbGlic19kaXIiCisgICAgQ1RfRG9UYXJiYWxsSWZFeGlzdHMgIiR7Q1RfQ09ORklHX0RJUn0iICIke3N0YXRlX2Rpcn0vY29uZmlnX2RpciIKKyAgICBDVF9Eb1RhcmJhbGxJZkV4aXN0cyAiJHtDVF9DQ19DT1JFX1NUQVRJQ19QUkVGSVhfRElSfSIgIiR7c3RhdGVfZGlyfS9jY19jb3JlX3N0YXRpY19wcmVmaXhfZGlyIgorICAgIENUX0RvVGFyYmFsbElmRXhpc3RzICIke0NUX0NDX0NPUkVfU0hBUkVEX1BSRUZJWF9ESVJ9IiAiJHtzdGF0ZV9kaXJ9L2NjX2NvcmVfc2hhcmVkX3ByZWZpeF9kaXIiCisgICAgQ1RfRG9UYXJiYWxsSWZFeGlzdHMgIiR7Q1RfUFJFRklYX0RJUn0iICIke3N0YXRlX2Rpcn0vcHJlZml4X2RpciIgLS1leGNsdWRlICcqLmxvZycKKworICAgIENUX0RvTG9nIFNUQVRFICIgIFNhdmluZyBsb2cgZmlsZSIKKyAgICBleGVjID4vZGV2L251bGwKKyAgICBjYXNlICIke0NUX0RFQlVHX0NUX1NBVkVfU1RFUFNfR1pJUH0iIGluCisgICAgICAgIHkpICBnemlwIC0zIC1jICIke3RtcF9sb2dfZmlsZX0iICA+IiR7c3RhdGVfZGlyfS9sb2cuZ3oiOzsKKyAgICAgICAgKikgIGNhdCAiJHt0bXBfbG9nX2ZpbGV9IiA+IiR7c3RhdGVfZGlyfS9sb2ciOzsKKyAgICBlc2FjCisgICAgZXhlYyA+PiIke3RtcF9sb2dfZmlsZX0iCit9CisKKyMgVGhpcyBmdW5jdGlvbiByZXN0b3JlcyBhIHByZXZpb3VzbHkgc2F2ZWQgc3RhdGUKKyMgVXNhZ2U6IENUX0RvTG9hZFN0YXRlIDxzdGF0ZV9uYW1lPgorQ1RfRG9Mb2FkU3RhdGUoKXsKKyAgICBsb2NhbCBzdGF0ZV9uYW1lPSIkMSIKKyAgICBsb2NhbCBzdGF0ZV9kaXI9IiR7Q1RfU1RBVEVfRElSfS8ke3N0YXRlX25hbWV9IgorICAgIGxvY2FsIG9sZF9SRVNUQVJUPSIke0NUX1JFU1RBUlR9IgorICAgIGxvY2FsIG9sZF9TVE9QPSIke0NUX1NUT1B9IgorCisgICAgQ1RfVGVzdE9yQWJvcnQgIlRoZSBwcmV2aW91cyBidWlsZCBkaWQgbm90IHJlYWNoIHRoZSBwb2ludCB3aGVyZSBpdCBjb3VsZCBiZSByZXN0YXJ0ZWQgYXQgJyR7Q1RfUkVTVEFSVH0nIiAtZCAiJHtzdGF0ZV9kaXJ9IgorCisgICAgIyBXZSBuZWVkIHRvIGRvIHNvbWV0aGluZyBzcGVjaWFsIHdpdGggdGhlIGxvZyBmaWxlIQorICAgIGlmIFsgIiR7Q1RfTE9HX1RPX0ZJTEV9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIGV4ZWMgPiIke3N0YXRlX2Rpcn0vdGFpbC5sb2ciCisgICAgZmkKKworICAgICMgTG9nIHRoaXMgdG8gdGhlIGxvZyBsZXZlbCByZXF1aXJlZCBieSB0aGUgdXNlcgorICAgIENUX0RvTG9nICR7Q1RfTE9HX0xFVkVMX01BWH0gIlJlc3RvcmluZyBzdGF0ZSBhdCBzdGVwICcke3N0YXRlX25hbWV9JywgYXMgcmVxdWVzdGVkLiIKKworICAgIENUX0RvRXh0cmFjdFRhcmJhbGxJZkV4aXN0cyAiJHtzdGF0ZV9kaXJ9L3ByZWZpeF9kaXIiICIke0NUX1BSRUZJWF9ESVJ9IgorICAgIENUX0RvRXh0cmFjdFRhcmJhbGxJZkV4aXN0cyAiJHtzdGF0ZV9kaXJ9L2NjX2NvcmVfc2hhcmVkX3ByZWZpeF9kaXIiICIke0NUX0NDX0NPUkVfU0hBUkVEX1BSRUZJWF9ESVJ9IgorICAgIENUX0RvRXh0cmFjdFRhcmJhbGxJZkV4aXN0cyAiJHtzdGF0ZV9kaXJ9L2NjX2NvcmVfc3RhdGljX3ByZWZpeF9kaXIiICIke0NUX0NDX0NPUkVfU1RBVElDX1BSRUZJWF9ESVJ9IgorICAgIENUX0RvRXh0cmFjdFRhcmJhbGxJZkV4aXN0cyAiJHtzdGF0ZV9kaXJ9L2NvbmZpZ19kaXIiICIke0NUX0NPTkZJR19ESVJ9IgorICAgIENUX0RvRXh0cmFjdFRhcmJhbGxJZkV4aXN0cyAiJHtzdGF0ZV9kaXJ9L2NvbXBsaWJzX2RpciIgIiR7Q1RfQ09NUExJQlNfRElSfSIKKyAgICBDVF9Eb0V4dHJhY3RUYXJiYWxsSWZFeGlzdHMgIiR7c3RhdGVfZGlyfS9idWlsZHRvb2xzX2RpciIgIiR7Q1RfQlVJTERUT09MU19QUkVGSVhfRElSfSIKKworICAgICMgUmVzdG9yZSB0aGUgZW52aXJvbm1lbnQsIGRpc2NhcmRpbmcgYW55IGVycm9yIG1lc3NhZ2UKKyAgICAjIChmb3IgZXhhbXBsZSwgcmVhZC1vbmx5IGJhc2ggaW50ZXJuYWxzKQorICAgIENUX0RvTG9nIFNUQVRFICIgIFJlc3RvcmluZyBlbnZpcm9ubWVudCIKKyAgICAuICIke3N0YXRlX2Rpcn0vZW52LnNoIiA+L2Rldi9udWxsIDI+JjEgfHwgdHJ1ZQorCisgICAgIyBSZXN0b3JlIHRoZSBuZXcgUkVTVEFSVCBhbmQgU1RPUCBzdGVwcworICAgIENUX1JFU1RBUlQ9IiR7b2xkX1JFU1RBUlR9IgorICAgIENUX1NUT1A9IiR7b2xkX1NUT1B9IgorICAgIHVuc2V0IG9sZF9zdG9wIG9sZF9yZXN0YXJ0CisKKyAgICBDVF9Eb0xvZyBTVEFURSAiICBSZXN0b3JpbmcgbG9nIGZpbGUiCisgICAgZXhlYyA+L2Rldi9udWxsCisgICAgY2FzZSAiJHtDVF9ERUJVR19DVF9TQVZFX1NURVBTX0daSVB9IiBpbgorICAgICAgICB5KSAgemNhdCAiJHtzdGF0ZV9kaXJ9L2xvZy5neiIgPiIke3RtcF9sb2dfZmlsZX0iOzsKKyAgICAgICAgKikgIGNhdCAiJHtzdGF0ZV9kaXJ9L2xvZyIgPiIke3RtcF9sb2dfZmlsZX0iOzsKKyAgICBlc2FjCisgICAgY2F0ICIke3N0YXRlX2Rpcn0vdGFpbC5sb2ciID4+IiR7dG1wX2xvZ19maWxlfSIKKyAgICBleGVjID4+IiR7dG1wX2xvZ19maWxlfSIKKyAgICBybSAtZiAiJHtzdGF0ZV9kaXJ9L3RhaWwubG9nIgorfQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL2dlbl9pbl9mcmFncy5zaCBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9nZW5faW5fZnJhZ3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjQ1MTQ5NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9nZW5faW5fZnJhZ3Muc2gKQEAgLTAsMCArMSwxNTggQEAKKyMhL2Jpbi9zaAorc2V0IC1lCisKKyMgVGhpcyBzY3JpcHRzIGdlbmVyYXRlcyBlaXRoZXIgYSBjaG9pY2Ugb3IgYSBtZW51Y29uZmlnCisjIHdpdGggdGhlIHNwZWNpZmllZCBlbnRyaWVzLgorIworIyBVc2FnZToKKyMgICBnZW5lcmF0ZSBhIGNob2ljZToKKyMgICAgICAgZ2VuX2luX2ZyYWdzLnNoIGNob2ljZSA8b3V0LWZpbGU+IDxsYWJlbD4gPGNvbmZpZy1wcmVmaXg+IDxiYXNlLWRpcj4gPGNvbmRpdGlvbmFscz4gZW50cnkgW2VudHJ5Li4uXQorIworIyAgIGdlbmVyYXRlIGEgbWVudWNvbmZpZzoKKyMgICAgICAgZ2VuX2luX2ZyYWdzLnNoIG1lbnUgPG91dC1maWxlPiA8bGFiZWw+IDxjb25maWctcHJlZml4PiA8YmFzZS1kaXI+IGVudHJ5IFtlbnRyeS4uLl0KKyMKKyMgd2hlcmU6CisjICAgb3V0LWZpbGUKKyMgICAgICAgcHV0IHRoZSBnZW5lcmF0ZWQgY2hvaWNlL21lbnVjb25maWcgaW50byB0aGF0IGZpbGUKKyMgICAgICAgZm9yIGNob2ljZXMsIGl0IGFjdHMgYXMgdGhlIGJhc2UgYm5hbWUgb2YgdGhlIGZpbGUsIHRoZSBzZWNvbmRhcnkKKyMgICAgICAgcGFydHMgKHRoZSAuaW4uMikgYXJlIHB1dCBpbiBvdXQtZmlsZS4yCisjCisjICAgbGFiZWwKKyMgICAgICAgbmFtZSBmb3IgdGhlIGVudHJpZXMgZmFtaWx5CisjICAgICAgIGVnLiBBcmNoaXRlY3R1cmUsIEtlcm5lbC4uLgorIworIyAgIGNvbmZpZy1wcmVmaXgKKyMgICAgICAgcHJlZml4IGZvciB0aGUgY2hvaWNlIGVudHJpZXMKKyMgICAgICAgZWcuIEFSQ0gsIEtFUk5FTC4uLgorIworIyAgIGJhc2UtZGlyCisjICAgICAgIGJhc2UgZGlyZWN0b3J5IGNvbnRhaW5pbmcgY29uZmlnIGZpbGVzCisjICAgICAgIGVnLiBjb25maWcvYXJjaCwgY29uZmlnL2tlcm5lbC4uLgorIworIyAgIGNvbmRpdGlvbmFscyAodmFsaWQgb25seSBmb3IgY2hvaWNlKQorIyAgICAgICBnZW5lcmF0ZSBiYWNrZW5kIGNvbmRpdGlvbmFscyBpZiBZL3ksIGRvbid0IGlmIGFueXRoaW5nIGVsc2UKKyMgICAgICAgaWYgJ1knIChvciAneScpLCBhIGRlcGVuZGVuY3kgb24gdGhlIGJhY2tlbiBtb2RlIHdpbGwgYmUgYWRkZWQKKyMgICAgICAgdG8gZWFjaCBlbnRyeQorIworIyAgIGVudHJ5IFtlbnRyeS4uLl0KKyMgICAgICAgYSBsaXN0IG9mIGVudHJ5L2llcyB0b2FkZCB0byB0aGUgY2hvaWNlL21lbnVjb25maWcKKyMgICAgICAgZWcuOgorIyAgICAgICAgICAgYXJtIG1pcHMgc2ggeDg2Li4uCisjICAgICAgICAgICBsaW51eCBjeWd3aW4gbWluZ3czMiBzb2xhcmlzLi4uCisjICAgICAgICAgICAuLi4KKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBHZW5lcmF0ZSBhIGNob2ljZQorIyBTZWUgYWJvdmUgZm9yIHVzYWdlCitnZW5fY2hvaWNlKCkgeworICAgIGxvY2FsIG91dF9maWxlPSIkezF9IgorICAgIGxvY2FsIGxhYmVsPSIkezJ9IgorICAgIGxvY2FsIGNmZ19wcmVmaXg9IiR7M30iCisgICAgbG9jYWwgYmFzZV9kaXI9IiR7NH0iCisgICAgbG9jYWwgY29uZD0iJHs1fSIKKyAgICBzaGlmdCA1CisgICAgbG9jYWwgZmlsZSBlbnRyeSBfZW50cnkKKworICAgICMgR2VuZXJhdGUgdGhlIHBhcnQtMQorICAgIGV4ZWMgPiIke291dF9maWxlfSIKKyAgICBwcmludGYgJyMgJXMgbWVudVxuJyAiJHtsYWJlbH0iCisgICAgcHJpbnRmICcjIEdlbmVyYXRlZCBmaWxlLCBkbyBub3QgZWRpdCEhIVxuJworICAgIHByaW50ZiAnXG4nCisgICAgcHJpbnRmICdjaG9pY2UgR0VOX0NIT0lDRV8lc1xuJyAiJHtjZmdfcHJlZml4fSIKKyAgICBwcmludGYgJyAgICBib29sXG4nCisgICAgcHJpbnRmICcgICAgcHJvbXB0ICIlcyJcbicgIiR7bGFiZWx9IgorICAgIHByaW50ZiAnXG4nCisgICAgZm9yIGVudHJ5IGluICIke0B9IjsgZG8KKyAgICAgICAgZmlsZT0iJHtiYXNlX2Rpcn0vJHtlbnRyeX0uaW4iCisgICAgICAgIF9lbnRyeT0kKHByaW50ZiAnJXNcbicgIiR7ZW50cnl9IiB8IiR7c2VkfSIgLXIgLXMgLWUgJ3MvWy0uK10vXy9nOycpCisgICAgICAgIHByaW50ZiAnY29uZmlnICVzXyVzXG4nICIke2NmZ19wcmVmaXh9IiAiJHtfZW50cnl9IgorICAgICAgICBwcmludGYgJyAgICBib29sXG4nCisgICAgICAgIHByaW50ZiAnICAgIHByb21wdCAiJXMiXG4nICIke2VudHJ5fSIKKyAgICAgICAgaWYgWyAiJHtjb25kfSIgPSAiWSIgLW8gIiR7Y29uZH0iID0gInkiIF07IHRoZW4KKyAgICAgICAgICAgIHByaW50ZiAnICAgIGRlcGVuZHMgb24gJXNfJXNfQVZBSUxBQkxFXG4nICIke2NmZ19wcmVmaXh9IiAiJHtfZW50cnl9IgorICAgICAgICBmaQorICAgICAgICAiJHtzZWR9IiAtciAtZSAnL14jIyBkZXBlbmRzIG9uIC8hZDsgcy9eIyMgLyAgICAvOycgJHtmaWxlfSAyPi9kZXYvbnVsbAorICAgICAgICAiJHtzZWR9IiAtciAtZSAnL14jIyBzZWxlY3QgLyFkOyBzL14jIyAvICAgIC87JyAke2ZpbGV9IDI+L2Rldi9udWxsCisgICAgICAgIGlmICIke2dyZXB9IiAtRSAnXiMjIGhlbHAnICR7ZmlsZX0gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgICAgICBwcmludGYgJyAgICBoZWxwXG4nCisgICAgICAgICAgICAiJHtzZWR9IiAtciAtZSAnL14jIyBoZWxwID8vIWQ7IHMvXiMjIGhlbHAgPy8gICAgICAvOycgJHtmaWxlfSAyPi9kZXYvbnVsbAorICAgICAgICBmaQorICAgICAgICBwcmludGYgJ1xuJworICAgIGRvbmUKKyAgICBwcmludGYgJ2VuZGNob2ljZVxuJworCisgICAgZm9yIGVudHJ5IGluICIke0B9IjsgZG8KKyAgICAgICAgZmlsZT0iJHtiYXNlX2Rpcn0vJHtlbnRyeX0uaW4iCisgICAgICAgIF9lbnRyeT0kKHByaW50ZiAnJXNcbicgIiR7ZW50cnl9IiB8IiR7c2VkfSIgLXIgLXMgLWUgJ3MvWy0uK10vXy9nOycpCisgICAgICAgIHByaW50ZiAnXG4nCisgICAgICAgIGlmIFsgIiR7Y29uZH0iID0gIlkiIC1vICIke2NvbmR9IiA9ICJ5IiBdOyB0aGVuCisgICAgICAgICAgICBwcmludGYgJ2NvbmZpZyAlc18lc19BVkFJTEFCTEVcbicgIiR7Y2ZnX3ByZWZpeH0iICIke19lbnRyeX0iCisgICAgICAgICAgICBwcmludGYgJyAgICBib29sXG4nCisgICAgICAgICAgICBwcmludGYgJyAgICBkZWZhdWx0IHkgaWYnCisgICAgICAgICAgICBwcmludGYgJyBCQUNLRU5EXyVzID0gIiVzIicgIiR7Y2ZnX3ByZWZpeH0iICIke2VudHJ5fSIKKyAgICAgICAgICAgIHByaW50ZiAnIHx8IEJBQ0tFTkRfJXMgPSAiIicgIiR7Y2ZnX3ByZWZpeH0iCisgICAgICAgICAgICBwcmludGYgJyB8fCAhIEJBQ0tFTkRcbicKKyAgICAgICAgZmkKKyAgICAgICAgcHJpbnRmICdpZiAlc18lc1xuJyAiJHtjZmdfcHJlZml4fSIgIiR7X2VudHJ5fSIKKyAgICAgICAgcHJpbnRmICdjb25maWcgJXNcbicgIiR7Y2ZnX3ByZWZpeH0iCisgICAgICAgIHByaW50ZiAnICAgIGRlZmF1bHQgIiVzIiBpZiAlc18lc1xuJyAiJHtlbnRyeX0iICIke2NmZ19wcmVmaXh9IiAiJHtfZW50cnl9IgorICAgICAgICBwcmludGYgJ3NvdXJjZSAiJXMiXG4nICIke2ZpbGV9IgorICAgICAgICBwcmludGYgJ2VuZGlmXG4nCisgICAgZG9uZQorCisgICAgIyBHZW5lcmF0ZSB0aGUgcGFydC0yCisgICAgZXhlYyA+IiR7b3V0X2ZpbGV9LjIiCisgICAgcHJpbnRmICcjICVzIHNlY29uZCBwYXJ0IG9wdGlvbnNcbicgIiR7bGFiZWx9IgorICAgIHByaW50ZiAnIyBHZW5lcmF0ZWQgZmlsZSwgZG8gbm90IGVkaXQhISFcbicKKyAgICBmb3IgZW50cnkgaW4gIiR7QH0iOyBkbworICAgICAgICBmaWxlPSIke2Jhc2VfZGlyfS8ke2VudHJ5fS5pbiIKKyAgICAgICAgX2VudHJ5PSQocHJpbnRmICclc1xuJyAiJHtlbnRyeX0iIHwiJHtzZWR9IiAtciAtcyAtZSAncy9bLS4rXS9fL2c7JykKKyAgICAgICAgaWYgWyAtZiAiJHtmaWxlfS4yIiBdOyB0aGVuCisgICAgICAgICAgICBwcmludGYgJ1xuJworICAgICAgICAgICAgcHJpbnRmICdpZiAlc18lc1xuJyAiJHtjZmdfcHJlZml4fSIgIiR7X2VudHJ5fSIKKyAgICAgICAgICAgIHByaW50ZiAnY29tbWVudCAiJXMgb3RoZXIgb3B0aW9ucyJcbicgIiR7ZW50cnl9IgorICAgICAgICAgICAgcHJpbnRmICdzb3VyY2UgIiVzLjIiXG4nICIke2ZpbGV9IgorICAgICAgICAgICAgcHJpbnRmICdlbmRpZlxuJworICAgICAgICBmaQorICAgIGRvbmUKK30KKworIyBHZW5lcmF0ZSBhIG1lbnVjb25maWcKKyMgU2VlIGFib3ZlIGZvciB1c2FnZQorZ2VuX21lbnUoKSB7CisgICAgbG9jYWwgb3V0X2ZpbGU9IiR7MX0iCisgICAgbG9jYWwgbGFiZWw9IiR7Mn0iCisgICAgbG9jYWwgY2ZnX3ByZWZpeD0iJHszfSIKKyAgICBsb2NhbCBiYXNlX2Rpcj0iJHs0fSIKKyAgICBzaGlmdCA0CisgICAgbG9jYWwgZmlsZSBlbnRyeSBfZW50cnkKKworICAgICMgR0VuZXJhdGUgdGhlIG1lbnVjb25maWcKKyAgICBleGVjID4iJHtvdXRfZmlsZX0iCisgICAgcHJpbnRmICcjICVzIG1lbnVcbicgIiR7bGFiZWx9IgorICAgIHByaW50ZiAnIyBHZW5lcmF0ZWQgZmlsZSwgZG8gbm90IGVkaXQhISFcbicKKyAgICBwcmludGYgJ1xuJworICAgIGZvciBlbnRyeSBpbiAiJHtAfSI7IGRvCisgICAgICAgIGZpbGU9IiR7YmFzZV9kaXJ9LyR7ZW50cnl9LmluIgorICAgICAgICBfZW50cnk9JChwcmludGYgJyVzXG4nICIke2VudHJ5fSIgfCIke3NlZH0iIC1yIC1zIC1lICdzL1stLitdL18vZzsnKQorICAgICAgICBwcmludGYgJ21lbnVjb25maWcgJXNfJXNcbicgIiR7Y2ZnX3ByZWZpeH0iICIke19lbnRyeX0iCisgICAgICAgIHByaW50ZiAnICAgIGJvb2xcbicKKyAgICAgICAgcHJpbnRmICcgICAgcHJvbXB0ICIlcyJcbicgIiR7ZW50cnl9IgorICAgICAgICAiJHtzZWR9IiAtciAtZSAnL14jIyBkZXBlbmRzIG9uIC8hZDsgcy9eIyMgLyAgICAvOycgJHtmaWxlfSAyPi9kZXYvbnVsbAorICAgICAgICAiJHtzZWR9IiAtciAtZSAnL14jIyBzZWxlY3QgLyFkOyBzL14jIyAvICAgIC87JyAke2ZpbGV9IDI+L2Rldi9udWxsCisgICAgICAgIGlmICIke2dyZXB9IiAtRSAnXiMjIGhlbHAnICR7ZmlsZX0gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgICAgICBwcmludGYgJyAgICBoZWxwXG4nCisgICAgICAgICAgICAiJHtzZWR9IiAtciAtZSAnL14jIyBoZWxwID8vIWQ7IHMvXiMjIGhlbHAgPy8gICAgICAvOycgJHtmaWxlfSAyPi9kZXYvbnVsbAorICAgICAgICBmaQorICAgICAgICBwcmludGYgJ1xuJworICAgICAgICBwcmludGYgJ2lmICVzXyVzXG4nICIke2NmZ19wcmVmaXh9IiAiJHtfZW50cnl9IgorICAgICAgICBwcmludGYgJ3NvdXJjZSAiJXMiXG4nICIke2ZpbGV9IgorICAgICAgICBwcmludGYgJ2VuZGlmXG4nCisgICAgICAgIHByaW50ZiAnXG4nCisgICAgZG9uZQorfQorCit0eXBlPSIkezF9Igorc2hpZnQKKyJnZW5fJHt0eXBlfSIgIiR7QH0iCmRpZmYgLS1naXQgYS9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvbWstcGF0Y2guc2ggYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvbWstcGF0Y2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2QwZDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9tay1wYXRjaC5zaApAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vc2gKKworcmVwb3M9IiQxIgorcGRpcj0iJDIiCitpZiBbIC16ICIke3JlcG9zfSIgLW8gISAtZCAiJHtyZXBvc30iIC1vIC16ICIke3BkaXJ9IiAtbyAhIC1kICIke3BkaXJ9IiBdO3RoZW4KKyAgICBwcmludGYgIlVzYWdlOiAkezAjIyovfSA8cmVwb3NfZGlyPiA8cGF0Y2hfZGlyPlxuIgorICAgIGV4aXQgMQorZmkKKworcGRpcj0iJCggY2QgIiR7cGRpcn0iOyBwd2QpIgordmVyc2lvbj0iJCggZWNobyAiJHtwZGlyfSIgfHNlZCAtciAtZSAncywuKi8oW14vXSspLyokLFwxLCcgKSIKK2JyYW5jaD0iJHt2ZXJzaW9uJS4qfSIKK249JCggbHMgLTEgIiR7cGRpcn0iIDI+L2Rldi9udWxsIHx3YyAtbCApCisKK3IxPSIkKCBoZyAtUiAiJHtyZXBvc30iIGxvZyAtYiAiJHticmFuY2h9IiAgXAorICAgICAgIHxhd2sgJworICAgICAgICAgICAgJDE9PSJjaGFuZ2VzZXQ6IiB7CisgICAgICAgICAgICAgICAgcHJldj1yZXY7CisgICAgICAgICAgICAgICAgc3BsaXQoJDIsYSwiOiIpOworICAgICAgICAgICAgICAgIHJldj1hWzFdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgJDB+L15zdW1tYXJ5OltbOnNwYWNlOl1dKyciJHticmFuY2h9OiAoYnVtcHx1cGRhdGUpIHZlcnNpb24gdG8gJHt2ZXJzaW9ufVwraGciJyQvIHsKKyAgICAgICAgICAgICAgICBwcmludGYoICIlZFxuIiwgcHJldiApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgJworICAgICApIgorCitpPTAKK2hnIC1SICIke3JlcG9zfSIgbG9nIC1iICIke2JyYW5jaH0iIC1yICIke3IxfTp0aXAiIC0tdGVtcGxhdGUgJ3tyZXZ9XG4nICAgIFwKK3x3aGlsZSByZWFkIHJldjsgZG8KKyAgICBwPSIkKCBwcmludGYgIiUwM2QiICR7aX0gKSIKKyAgICBpPSQoKGkrMSkpCisgICAgaWYgWyAkKCBscyAtMSAiJHtwZGlyfS8ke3B9LSIqLnBhdGNoIDI+L2Rldi9udWxsIHx3YyAtbCApIC1uZSAwIF07IHRoZW4KKyAgICAgICAgY29udGludWUKKyAgICBmaQorICAgIHBsb2c9JCggaGcgLVIgIiR7cmVwb3N9IiBsb2cgLXIgJHtyZXZ9IC0tdGVtcGxhdGUgJ3tkZXNjfGZpcnN0bGluZX1cbicgIFwKKyAgICAgICAgICAgIHxzZWQgLXIgLWUgJ3MsW15bOmFsbnVtOl1dLF8sZzsgcy9fKy9fL2c7JyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKQorICAgIHBuYW1lPSIke3B9LSR7cGxvZ30ucGF0Y2giCisgICAgcHJpbnRmICJSZXZpc2lvbiAnJWQnIC0tPiAnJXMnXG4iICR7cmV2fSAiJHtwbmFtZX0iCisgICAgaGcgLVIgIiR7cmVwb3N9IiBkaWZmIC1jICR7cmV2fSAtLWNvbG9yPW5ldmVyID4iJHtwZGlyfS8ke3BuYW1lfSIKKyAgICBwZGF0ZT0iJCggaGcgLVIgIiR7cmVwb3N9IiBsb2cgLXIgJHtyZXZ9IC0tdGVtcGxhdGUgJ3tkYXRlfGlzb2RhdGV9XG4nICkiCisgICAgdG91Y2ggLWQgIiR7cGRhdGV9IiAiJHtwZGlyfS8ke3BuYW1lfSIKK2RvbmUKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9tay1yZWxlYXNlLnNoIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL21rLXJlbGVhc2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODJkYjdhYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9tay1yZWxlYXNlLnNoCkBAIC0wLDAgKzEsMzUwIEBACisjIS9iaW4vYmFzaAorI3NldCAteAorCitleHBvcnQgTENfQUxMPUMKKworbXlfbmFtZT0iJCggYmFzZW5hbWUgIiR7MH0iICkiCisKK3VzYWdlKCkgeworICAgIGNhdCA8PC1fRU9GXworCQlVc2FnZToKKwkJICAgICR7bXlfbmFtZX0gPHJlcG9zX2Rpcj4gPE0ubS5wPgorCV9FT0ZfCit9CisKK3JlcG9zPSIkezF9IgordmVyc2lvbj0iJHsyfSIKKworWyAtbiAiJHtyZXBvc30iICAgXSB8fCB7IHVzYWdlOyBleGl0IDE7IH0KK1sgLWQgIiR7cmVwb3N9IiAgIF0gfHwgeyBwcmludGYgIiR7bXlfbmFtZX06ICR7cmVwb3N9OiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XG4iOyBleGl0IDE7IH0KK1sgLW4gIiR7dmVyc2lvbn0iIF0gfHwgeyB1c2FnZTsgZXhpdCAxOyB9CisKK2dlbl9ib3VuZF9yZXZzKCkgeworICAgIHIxPSQoIGhnIGxvZyAgICBcCisgICAgICAgICAgfGF3ayAnQkVHSU4geworICAgICAgICAgICAgICAgICAgZm91bmQ9MDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgJDE9PSInIiR7bGFiZWx9Iic6IiB7CisgICAgICAgICAgICAgICAgICBzcGxpdCgkMixhLCI6Iik7IHJldj1hWzFdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAkMH4vXnN1bW1hcnk6W1s6c3BhY2U6XV0qW1s6ZGlnaXQ6XV0rXC5bWzpkaWdpdDpdXSs6ICciJHttc2d9IicvIFwKKyAgICAgICAgICAgICAgICAmJiBmb3VuZD09MCB7CisgICAgICAgICAgICAgICAgICBwcmludGYoICIlZFxuIiwgcmV2ICk7IGZvdW5kPTE7CisgICAgICAgICAgICAgICAgfScKKyAgICAgICAgKQorCisgICAgcjI9JCggaGcgbG9nIC1iICIke2JyYW5jaH0iIFwKKyAgICAgICAgICB8YXdrICckMT09ImNoYW5nZXNldDoiIHsKKyAgICAgICAgICAgICAgICAgIHNwbGl0KCQyLGEsIjoiKTsKKyAgICAgICAgICAgICAgICAgIHByaW50ZiggIiVkXG4iLCBhWzFdICk7CisgICAgICAgICAgICAgICAgICBuZXh0ZmlsZTsKKyAgICAgICAgICAgICAgICB9JworICAgICAgICApCisKKyAgICByMV9sb2c9JCgocjErbG9nX29mZnNldCkpCisgICAgaWYgWyAkeyNyMV9sb2d9IC1ndCAkeyNyMn0gXTsgdGhlbgorICAgICAgICByZXZfdz0keyNyMV9sb2d9CisgICAgZWxzZQorICAgICAgICByZXZfdz0keyNyMn0KKyAgICBmaQorfQorCitwcmludF9pbnRyb19tYWlsKCkgeworICAgIGNhdCA8PC1fRU9GXworCQlIZWxsbyBhbGwhCisJCQorCQlJJ20gcGxlYXNlZCB0byBhbm5vdW5jZSB0aGUgcmVsZWFzZSBvZiBjcm9zc3Rvb2wtTkcgJHt2ZXJzaW9ufSEKKwkJCisJCUFzIHVzdWFsLCB0aGVyZSBoYXMgYmVlbiBxdWl0ZSBhIG51bWJlciBvZiBpbXByb3ZlbWVudHMsIG5ldyBmZWF0dXJlcywKKwkJYW5kIGJ1ZyBmaXhlcyBhbGwgYXJvdW5kLiBUaGUgbW9zdCBub3RhYmxlIGNoYW5nZXMgYXJlIGxpc3RlZCBiZWxvdzoKKwkJCisJCVlFTToKKwkJWUVNOiBQVVQgWU9VUiBNRVNTQUdFIEhFUkUKKwkJWUVNOgorCQkKKwkJVGhpcyBtYXJrcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSAke3Zlcl9NfS4ke3Zlcl9tfSBtYWludGVuYW5jZSBicmFuY2gsIGFuZCB0aGUgZW5kIG9mCisJCXRoZSBwcmV2aW91cyBtYWludGVuYW5jZSBicmFuY2guIEFzIGFsd2F5cywgY29tbWVudHMgYW5kIHN1Z2dlc3Rpb25zCisJCWFyZSBtb3N0IHdlbGNvbWUhCisJCQorCQlUaGUgcmVsZWFzZSBjYW4gYmUgZm91bmQgYXQgdGhlIGZvbGxvd2luZyBVUkxzOgorCQlDaGFuZ2Vsb2c6IGh0dHA6Ly9jcm9zc3Rvb2wtbmcub3JnL2Rvd25sb2FkL2Nyb3NzdG9vbC1uZy9jcm9zc3Rvb2wtbmctJHt2ZXJzaW9ufS5jaGFuZ2Vsb2cKKwkJVGFyYmFsbDogICBodHRwOi8vY3Jvc3N0b29sLW5nLm9yZy9kb3dubG9hZC9jcm9zc3Rvb2wtbmcvY3Jvc3N0b29sLW5nLSR7dmVyc2lvbn0udGFyLmJ6MgorCQlQYXRjaGVzOiAgIGh0dHA6Ly9jcm9zc3Rvb2wtbmcub3JnL2Rvd25sb2FkL2Nyb3NzdG9vbC1uZy8wMS1maXhlcy8ke3ZlcnNpb259LworCQkKKwkJQXMgYSByZW1pbmRlciwgdGhlIGhvbWUgZm9yIGNyb3NzdG9vbC1ORyBpczoKKwkJaHR0cDovL2Nyb3NzdG9vbC1uZy5vcmcvCisJCQorCQlDcm9zc3Rvb2wtTkcgYWxzbyBoYXMgYSBGcmVzaG1lYXQgcGFnZToKKwkJaHR0cDovL2ZyZXNobWVhdC5uZXQvcHJvamVjdHMvY3Jvc3N0b29sLW5nCisJX0VPRl8KK30KKworcHJpbnRfaW50cm9fY2hhbmdlbG9nX2Z1bGxfcmVsZWFzZSgpIHsKKyAgICBjYXQgPDwtX0VPRl8KKwkJY3Jvc3N0b29sLU5HICR7dmVyc2lvbn0gLS0gJHtkYXRlfQorCQkKKwkJVGhpcyBpcyBhIGZlYXR1cmUtcmVsZWFzZS4gU2lnbmlmaWNhbnQgY2hhbmdlcyBhcmU6CisJCQorCQlZRU06CisJCVlFTTogUFVUIFlPVVIgTUVTU0FHRSBIRVJFCisJCVlFTToKKwlfRU9GXworfQorCitwcmludF9pbnRyb19jaGFuZ2Vsb2dfYnVnX2ZpeCgpIHsKKyAgICBjYXQgPDwtX0VPRl8KKwkJY3Jvc3N0b29sLU5HICR7dmVyc2lvbn0gLS0gJHtkYXRlfQorCQkKKwkJVGhpcyBpcyBhIGJ1Zy1maXgtb25seSByZWxlYXNlLgorCV9FT0ZfCit9CisKK3ByaW50X2F1dGhvcl9zdGF0cygpIHsKKyAgICBwcmludGYgIlxuTWFueSB0aGFua3MgdG8gdGhlIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcyByZWxlYXNlOlxuXG4iCisgICAgcHJldl9hdXRob3I9IiIKKyAgICB0ZW1wbGF0ZT0ne2F1dGhvcnxwZXJzb259XG4nCisgICAgaGcgbG9nIC1iICIke2JyYW5jaH0iIC1yICIke3IxX2xvZ306JHtyMn0iICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAtLXRlbXBsYXRlICIke3RlbXBsYXRlfSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB8c2VkIC1yIC1lICdzLyIvL2c7JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfGF3ayAtRiAnJyAneworICAgICAgICAgICAgICAgICAgbmJbJDBdKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEVORCB7CisgICAgICAgICAgICAgICAgICBmb3IoIGF1dGhvciBpbiBuYiApIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCAiICAgJTRkICAlc1xuIiwgbmJbYXV0aG9yXSwgYXV0aG9yICk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHxzb3J0IC1zIC1rMW5yIC1rMgorfQorCitwcmludF9hdXRob3Jfc2hvcnRsb2coKSB7CisgICAgcHJpbnRmICJcbkhlcmUgaXMgdGhlIHBlci1hdXRob3Igc2hvcnRsb2c6XG4iCisgICAgcHJldl9hdXRob3I9IiIKKyAgICB0ZW1wbGF0ZT0ne2F1dGhvcnxwZXJzb259fHtyZXZ9fHticmFuY2hlc318e2Rlc2N8Zmlyc3RsaW5lfVxuJworICAgIGhnIGxvZyAtYiAiJHticmFuY2h9IiAtciAiJHtyMV9sb2d9OiR7cjJ9IiAgICAgICAgICAgICAgXAorICAgICAgICAgICAtLXRlbXBsYXRlICIke3RlbXBsYXRlfSIgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHxhd2sgLUYgJycgJ3sKKyAgICAgICAgICAgICAgICAgIG49c3BsaXQoICQwLGEsInwiICk7CisgICAgICAgICAgICAgICAgICBwcmludGYoICIlcyIsIGdlbnN1YigiXCIiLCIiLCJnIixhWzFdKSApOworICAgICAgICAgICAgICAgICAgcHJpbnRmKCAifCUwKmQiLCAnJHtyZXZfd30nLCBhWzJdICk7CisgICAgICAgICAgICAgICAgICBmb3IoaT0zO2k8PW47aSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZiggInwlcyIsIGFbaV0gKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIHByaW50ZiggIlxuIiApOworICAgICAgICAgICAgICAgIH0nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHxzb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHx3aGlsZSByZWFkIGxpbmU7IGRvCisgICAgICAgIGF1dGhvcj0iJCggZWNobyAiJHtsaW5lfSIgfGN1dCAtZCBcfCAtZiAxICkiCisgICAgICAgIHJldj0iJCggZWNobyAiJHtsaW5lfSIgfGN1dCAtZCBcfCAtZiAyICkiCisgICAgICAgIGJyPSIkKCBlY2hvICIke2xpbmV9IiB8Y3V0IC1kIFx8IC1mIDMgKSIKKyAgICAgICAgZGVzYz0iJCggZWNobyAiJHtsaW5lfSIgfGN1dCAtZCBcfCAtZiA0LSApIgorCisgICAgICAgIGNhc2UgIiR7YnJ9IiBpbgorICAgICAgICAgICAgJHticmFuY2h9KSAgOzsKKyAgICAgICAgICAgIFswLTldKi4qKSAgICBjb250aW51ZTs7CisgICAgICAgICAgICAqKSA7OworICAgICAgICBlc2FjCisKKyAgICAgICAgY2FzZSAiJHtkZXNjfSIgaW4KKyAgICAgICAgICAgIE1lcmdlLikgICAgICAgICAgICAgICAgIGNvbnRpbnVlOzsKKyAgICAgICAgICAgICoiOiBjbG9zZSAiKiIgYnJhbmNoIiopIGNvbnRpbnVlOzsKKyMgICAgICAgICAgICpcKG1lcmdlZFwpKSAgICAgICAgICAgIGNvbnRpbnVlOzsKKyAgICAgICAgZXNhYworCisgICAgICAgIGF1dGhvcj0iJCggZWNobyAiJHthdXRob3J9IiB8c2VkIC1yIC1lICdzLyIvL2c7JyApIgorCisgICAgICAgIGlmIFsgISAiJHtwcmV2X2F1dGhvcn0iID0gIiR7YXV0aG9yfSIgXTsgdGhlbgorICAgICAgICAgICAgcHJpbnRmICJcbiIKKyAgICAgICAgICAgIHByaW50ZiAiICAgICR7YXV0aG9yfTpcbiIKKyAgICAgICAgICAgIHByZXZfYXV0aG9yPSIke2F1dGhvcn0iCisgICAgICAgIGZpCisgICAgICAgIHJldj0iJCggZWNobyAiJHtyZXZ9IiB8c2VkIC1yIC1lICdzL14wKi8vOycgKSIKKworICAgICAgICBwcmludGYgIiVzXG4iICIke2Rlc2N9IiAgICAgXAorICAgICAgICB8Zm10IC13IDY1ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB8KGZpcnN0PTE7IHdoaWxlIHJlYWQgbDsgZG8KKyAgICAgICAgICAgIGlmIFsgLW4gIiR7Zmlyc3R9IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgcHJpbnRmICIgICAgICAgIFslKmRdICVzXG4iICR7cmV2X3d9ICR7cmV2fSAiJHtsfSIKKyAgICAgICAgICAgICAgICBmaXJzdD0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGYgIiAgICAgICAgICUqLipzICAlc1xuIiAke3Jldl93fSAke3Jldl93fSAnJyAiJHtsfSIKKyAgICAgICAgICAgIGZpCisgICAgICAgIGRvbmUpCisgICAgZG9uZQorfQorCitwcmludF9kaWZmc3RhdCgpIHsKKyAgICBwcmludGYgIlxuVGhlIGRpZmZzdGF0IGZvbGxvd3M6XG5cbiIKKyAgICBoZyBkaWZmIC1yICIke3IxfToke3IyfSIgLS1jb2xvcj1uZXZlciAgXAorICAgIHxkaWZmc3RhdCAtciAyIC1wIDEgLXcgMTAgICAgICAgICAgICAgICBcCisgICAgfHRhaWwgLW4gMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB8c2VkIC1yIC1lICdzL14gKi8gICAgLzsnCisKKyAgICBoZyBkaWZmIC1yICIke3IxfToke3IyfSIgLS1jb2xvcj1uZXZlciAgXAorICAgIHxkaWZmc3RhdCAtZiAxIC1yIDIgLXAgMSAtdyAxMCAgICAgICAgICBcCisgICAgfGhlYWQgLW4gLTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB8d2hpbGUgcmVhZCBmaWxlIGxpbmU7IGRvCisgICAgICAgIGlmIFsgJHsjZmlsZX0gLWd0IDU3IF07IHRoZW4KKyAgICAgICAgICAgIGZpbGU9IiQoIGVjaG8gIiR7ZmlsZX0iIHxzZWQgLXIgLWUgJ3MvXigueywyNH0pLiooLnsyOH0pJC9cMS4uLi4uXDIvOycgKSIKKyAgICAgICAgZmkKKyAgICAgICAgcHJpbnRmICIgICAgJS01N3MgJXNcbiIgIiR7ZmlsZX0iICIke2xpbmV9IgorICAgIGRvbmUKK30KKworcHJpbnRfc2hvcnRfZGlmZnN0YXQoKSB7CisgICAgcHJpbnRmICJcblRoZSBzaG9ydCBkaWZmc3RhdCBmb2xsb3dzOlxuXG4iCisKKyAgICBldmFsIHRvdGFsPSQoKCAkKAorICAgICAgICBoZyBkaWZmIC1yICIke3IxfToke3IyfSIgLS1jb2xvcj1uZXZlciAiJHtpfSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB8ZGlmZnN0YXQgLXIgMiAtcCAxIC13IDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB8dGFpbCAtbiAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB8c2VkIC1yIC1lICdzL15bWzpzcGFjZTpdXSpbWzpkaWdpdDpdXSsgZmlsZXM/IGNoYW5nZWQoLFtbOnNwYWNlOl1dK3wkKS8vOycgXAorICAgICAgICAgICAgICAgIC1lICdzLyhbWzpkaWdpdDpdXSspW14tXCtdK1woKC18XCspXCkvXDEvZzsnICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIC1lICdzLywvL2c7IHMvIC8rLzsgcy9eJC8wLzsnCisgICAgKSApKQorICAgIHByaW50ZiAiICAgICUtMjQuMjRzICU1ZCgrLy0pXG4iICJUb3RhbCIgJHt0b3RhbH0KKyAgICBvdGhlcnM9JHt0b3RhbH0KKworICAgIHsgZm9yIGkgaW4gICAgICAgICAgICAgIFwKKyAgICAgICAga2NvbmZpZy8gICAgICAgICAgICBcCisgICAgICAgIHBhdGNoZXMvICAgICAgICAgICAgXAorICAgICAgICBjb25maWcvKi8gICAgICAgICAgIFwKKyAgICAgICAgc2NyaXB0cy9idWlsZC8qLyAgICBcCisgICAgICAgIHNhbXBsZXMvICAgICAgICAgICAgXAorICAgICAgICA7IGRvCisgICAgICAgIGV2YWwgdmFsPSQoKCAkKAorICAgICAgICAgICAgaGcgZGlmZiAtciAiJHtyMX06JHtyMn0iIC0tY29sb3I9bmV2ZXIgIiR7aX0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHxkaWZmc3RhdCAtciAyIC1wIDEgLXcgMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB8dGFpbCAtbiAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfHNlZCAtciAtZSAncy9eW1s6c3BhY2U6XV0qW1s6ZGlnaXQ6XV0rIGZpbGVzPyBjaGFuZ2VkKCxbWzpzcGFjZTpdXSt8JCkvLzsnIFwKKyAgICAgICAgICAgICAgICAgICAgLWUgJ3MvKFtbOmRpZ2l0Ol1dKylbXi1cK10rXCgoLXxcKylcKS9cMS9nOycgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIC1lICdzLywvL2c7IHMvIC8rLzsgcy9eJC8wLzsnCisgICAgICAgICkgKSkKKyAgICAgICAgaWYgWyAke3ZhbH0gLWd0ICQoKHRvdGFsLzEwMCkpIF07IHRoZW4KKyAgICAgICAgICAgIHByaW50ZiAiJWQgJXNcbiIgJCgoKDEwMDAqdmFsKS90b3RhbCkpICIke2l9IgorICAgICAgICAgICAgb3RoZXJzPSQoKG90aGVycy12YWwpKQorICAgICAgICBmaQorICAgIGRvbmU7IHByaW50ZiAiJWQgT3RoZXJzXG4iICQoKCgxMDAwKm90aGVycykvdG90YWwpKTsgfSAgXAorICAgIHxzb3J0IC1uciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHx7IHdoaWxlIHJlYWQgdiBpOyBkbworICAgICAgICBpZiBbICIke2l9IiA9ICJPdGhlcnMiIF07IHRoZW4KKyAgICAgICAgICAgIG90aGVycz0ke3Z9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByaW50ZiAiICAgICUtMjQuMjRzICUzZC4lZCUlXG4iICIke2l9IiAkKCh2LzEwKSkgJCgodiUxMCkpCisgICAgICAgIGZpCisgICAgICAgZG9uZTsgcHJpbnRmICIgICAgJS0yNC4yNHMgJTNkLiVkJSVcbiIgIk90aGVycyIgJCgob3RoZXJzLzEwKSkgJCgob3RoZXJzJTEwKSk7IH0KK30KKwordmVyX009IiQoIHByaW50ZiAiJHt2ZXJzaW9ufSIgfGN1dCAtZCAuIC1mIDEgKSIKK3Zlcl9tPSIkKCBwcmludGYgIiR7dmVyc2lvbn0iIHxjdXQgLWQgLiAtZiAyICkiCit2ZXJfcD0iJCggcHJpbnRmICIke3ZlcnNpb259IiB8Y3V0IC1kIC4gLWYgMyApIgorCitwcmVmaXg9IiQocHdkKS9jcm9zc3Rvb2wtbmctJHt2ZXJzaW9ufSIKK3B1c2hkICIke3JlcG9zfSIgPi9kZXYvbnVsbCAyPiYxCisKK3ByaW50ZiAiQ2hlY2tpbmcgZm9yIGV4aXN0aW5nIHRhZzogIgoraWYgaGcgdGFncyB8Z3JlcCAtRSAnXiciY3Jvc3N0b29sLW5nLSR7dmVyc2lvbn0iJ1w+JyA+L2Rldi9udWxsOyB0aGVuCisgICAgcHJpbnRmICJhbHJlYWR5IHRhZ2dlZFxuIgorICAgIGV4aXQgMQorZmkKK3ByaW50ZiAibm9cbiIKKworaWYgWyAke3Zlcl9wfSAtZXEgMCBdOyB0aGVuCisgICAgcHJpbnRfbWFpbD0ieWVzIgorICAgIHByaW50X2ludHJvX2NoYW5nZWxvZz0icHJpbnRfaW50cm9fY2hhbmdlbG9nX2Z1bGxfcmVsZWFzZSIKKyAgICBsYWJlbD0icGFyZW50IgorICAgIG1zZz0iY3JlYXRlIG1haW50ZW5hbmNlIGJyYW5jaCwgKHVwZGF0ZXxidW1wKSB2ZXJzaW9uIHRvIFtbOmRpZ2l0Ol1dKyInXCciLltbOmRpZ2l0Ol1dKyInXCciLjAiJyQnCisgICAgYnJhbmNoPSJkZWZhdWx0IgorICAgIGxvZ19vZmZzZXQ9MAorZWxzZQorICAgIHByaW50X21haWw9Im5vIgorICAgIHByaW50X2ludHJvX2NoYW5nZWxvZz0icHJpbnRfaW50cm9fY2hhbmdlbG9nX2J1Z19maXgiCisgICAgbGFiZWw9ImNoYW5nZXNldCIKKyAgICBtc2c9Iih1cGRhdGV8YnVtcCkgdmVyc2lvbiB0byAke3Zlcl9NfSInXCciLiR7dmVyX219IidcJyIuJCgodmVyX3AtMSkpIidcK2hnJCcKKyAgICBicmFuY2g9IiR7dmVyX019LiR7dmVyX219IgorICAgIGxvZ19vZmZzZXQ9MQorZmkKKworcHJpbnRmICJDb21wdXRpbmcgYm91bmRhcnkgcmV2aXNpb25zOiIKK2dlbl9ib3VuZF9yZXZzCitwcmludGYgIiAlZDolZFxuIiAke3IxfSAke3IyfQorCitwcmludGYgIlRhZ2dpbmcgcmVsZWFzZToiCitoZyB1cCAiJHticmFuY2h9IiA+L2Rldi9udWxsCitpZiBbICR7dmVyX3B9IC1lcSAwIF07IHRoZW4KKyAgICBwcmludGYgIiB1cGRhdGUgdmVyc2lvbiIKKyAgICBoZyBicmFuY2ggIiR7dmVyX019LiR7dmVyX219IiA+L2Rldi9udWxsCisgICAgZWNobyAiJHt2ZXJzaW9ufSIgPiIudmVyc2lvbiIKKyAgICBoZyBjaSAtbSAiJHt2ZXJfTX0uJHt2ZXJfbX06IGNyZWF0ZSBtYWludGVuYW5jZSBicmFuY2gsIHVwZGF0ZSB2ZXJzaW9uIHRvICR7dmVyc2lvbn0iCitlbHNlCisgICAgcHJpbnRmICIgdXBkYXRlIHZlcnNpb24iCisgICAgZWNobyAiJHt2ZXJzaW9ufSIgPiIudmVyc2lvbiIKKyAgICBoZyBjaSAtbSAiJHt2ZXJfTX0uJHt2ZXJfbX06IHVwZGF0ZSB2ZXJzaW9uIHRvICR7dmVyc2lvbn0iCitmaQorCitwcmludGYgIiwgdGFnIgoraGcgdGFnIC1tICJUYWdnaW5nIHJlbGVhc2UgJHt2ZXJzaW9ufSIgY3Jvc3N0b29sLW5nLSR7dmVyc2lvbn0KKworcHJpbnRmICIsIHVwZGF0ZSB2ZXJzaW9uIgorZWNobyAiJHt2ZXJzaW9ufStoZyIgPiIudmVyc2lvbiIKK2hnIGNpIC1tICIke3Zlcl9NfS4ke3Zlcl9tfTogdXBkYXRlIHZlcnNpb24gdG8gJHt2ZXJzaW9ufStoZyIKKworcHJpbnRmICIsIGRhdGUiCitkYXRlPSIkKCBoZyBsb2cgLXIgY3Jvc3N0b29sLW5nLSR7dmVyc2lvbn0gLS10ZW1wbGF0ZSAne2RhdGV8aXNvZGF0ZX1cbicgICAgXAorICAgICAgICAgfHNlZCAtciAtZSAncy8tfDovL2c7IHMvIC8uLzsgcy8gLy87JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICApIgorcHJpbnRmICIsIGRvbmUuXG4iCisKK2lmIFsgJHt2ZXJfcH0gLWVxIDAgXTsgdGhlbgorICAgIHByaW50ZiAiR2VuZXJhdGluZyByZWxlYXNlIG1haWw6IgorICAgIHByaW50ZiAiIGludHJvIgorICAgIHByaW50X2ludHJvX21haWwgICAgICAgID4gIiR7cHJlZml4fS5tYWlsIgorICAgIHByaW50ZiAiLCBzdGF0cyIKKyAgICBwcmludF9hdXRob3Jfc3RhdHMgICAgICA+PiIke3ByZWZpeH0ubWFpbCIKKyAgICBwcmludGYgIiwgc2hvcnRsb2ciCisgICAgcHJpbnRfYXV0aG9yX3Nob3J0bG9nICAgPj4iJHtwcmVmaXh9Lm1haWwiCisgICAgcHJpbnRmICIsIGRpZmZzdGF0IgorICAgIHByaW50X3Nob3J0X2RpZmZzdGF0ICAgID4+IiR7cHJlZml4fS5tYWlsIgorICAgIHByaW50ZiAiLCBkb25lLlxuIgorZmkKKworcHJpbnRmICJHZW5lcmF0aW5nIHJlbGVhc2UgY2hhbmdlbG9nOiIKK3ByaW50ZiAiIGludHJvIgorJHtwcmludF9pbnRyb19jaGFuZ2Vsb2d9ICAgID4gIiR7cHJlZml4fS5jaGFuZ2Vsb2ciCitwcmludGYgIiwgc3RhdHMiCitwcmludF9hdXRob3Jfc3RhdHMgICAgICAgICAgPj4iJHtwcmVmaXh9LmNoYW5nZWxvZyIKK3ByaW50ZiAiLCBzaG9ydGxvZyIKK3ByaW50X2F1dGhvcl9zaG9ydGxvZyAgICAgICA+PiIke3ByZWZpeH0uY2hhbmdlbG9nIgorcHJpbnRmICIsIGRpZmZzdGF0IgorcHJpbnRfZGlmZnN0YXQgICAgICAgICAgICAgID4+IiR7cHJlZml4fS5jaGFuZ2Vsb2ciCitwcmludGYgIiwgZG9uZS5cbiIKKworcG9wZCA+L2Rldi9udWxsIDI+JjEKKworcHJpbnRmICJDcmVhdGluZyB0YXJiYWxsOiIKK3ByZWZpeD0iY3Jvc3N0b29sLW5nLSR7dmVyc2lvbn0iCitwcmludGYgIiBhcmNoaXZlIgoraGcgYXJjaGl2ZSAtLWN3ZCAiJHtyZXBvc30iIC1yICIke3ByZWZpeH0iIC1YICcuaGcqJyAiJChwd2QpLyR7cHJlZml4fS50YXIuYnoyIgorZGF0ZT0iJCggaGcgbG9nIC1SICIke3JlcG9zfSIgLXIgIiR7cHJlZml4fSIgLS10ZW1wbGF0ZSAne2RhdGV8cmZjODIyZGF0ZX1cbicgKSIKK3ByaW50ZiAiLCBzdW0iCitmb3IgcyBpbiBtZDUgc2hhMSBzaGE1MTI7IGRvCisgICAgJHtzfXN1bSAiJHtwcmVmaXh9LnRhci5iejIiID4iJHtwcmVmaXh9LnRhci5iejIuJHtzfSIKK2RvbmUKK3ByaW50ZiAiLCB0b3VjaCIKK3RvdWNoIC1kICIke2RhdGV9IiAiJHtwcmVmaXh9IioKK3ByaW50ZiAiLCBkb25lLlxuIgorCitpZiBbICR7dmVyX3B9IC1lcSAwIF07IHRoZW4KKyAgICBwcmludGYgIlxuQW4gZWRpdG9yIHdpbGwgYmUgbGF1bmNoZWQgZm9yIHlvdSB0byBlZGl0IHRoZSBtYWlsLlxuIgorICAgIHJlYWQgLXAgIlByZXNzIGVudGVyIHdoZW4gcmVhZHkuLi4iIGZvbworICAgIGNwICIke3ByZWZpeH0ubWFpbCJ7LC5vcmlnfQorICAgIHZpICIke3ByZWZpeH0ubWFpbCIKKyAgICBkaWZmIC1kdSAtVSAxICIke3ByZWZpeH0ubWFpbCJ7Lm9yaWcsfSB8cGF0Y2ggLXAwICIke3ByZWZpeH0uY2hhbmdlbG9nIiA+L2Rldi9udWxsCisgICAgcm0gLWYgIiR7cHJlZml4fSIue21haWwsY2hhbmdlbG9nfS5vcmlnCitmaQorCitwcmludGYgIlxuQW4gZWRpdG9yIHdpbGwgYmUgbGF1bmNoZWQgZm9yIHlvdSB0byByZXZpZXcgdGhlIGNoYW5nZWxvZy5cbiIKK3JlYWQgLXAgIlByZXNzIGVudGVyIHdoZW4gcmVhZHkuLi4iIGZvbwordmkgIiR7cHJlZml4fS5jaGFuZ2Vsb2ciCisKK3ByaW50ZiAiXG5Ob3csIHlvdSBjYW4gcHVzaCB0aGUgY2hhbmdlcyB3aXRoOiAgIGhnIHB1c2ggLVIgJyR7cmVwb3N9J1xuIgpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL3BhdGNoLXJlbnVtYmVyLnNoIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL3BhdGNoLXJlbnVtYmVyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM2MDRkZjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvcGF0Y2gtcmVudW1iZXIuc2gKQEAgLTAsMCArMSw2OCBAQAorIyEvYmluL3NoCisjIFllcywgdGhpcyBpbnRlbmRzIHRvIGJlIGEgdHJ1ZSBQT1NJWCBzY3JpcHQgZmlsZS4KK3NldCAtZQorCitteW5hbWU9IiQwIgorCisjIFBhcnNlIHRoZSB0b29scycgcGF0aHMgY29uZmlndXJhdGlvbgorIyBJdCBpcyBleHBlY3RlZCB0aGF0IHRoaXMgc2NyaXB0IGlzIG9ubHkgdG8gYmUgcnVuIGZyb20gdGhlCisjIHNvdXJjZSBkaXJlY3Rvcnkgb2YgY3Jvc3N0b29sLU5HLCBzbyBpdCBpcyB0cml2aWFsIHRvIGZpbmQKKyMgcGF0aHMubWsgKHdlIGNhbid0IHVzZSAgIi4gcGF0aHMubWsiLCBhcyBQT1NJWCBzdGF0ZXMgdGhhdAorIyAkUEFUSCBzaG91bGQgYmUgc2VhcmNoZWQgZm9yLCBhbmQgJFBBVEggbW9zdCBwcm9iYWJseSBkb2UKKyMgbm90IGluY2x1ZGUgIi4iKSwgaGVuY2UgdGhlICIuLyIuCisuICIuL3BhdGhzLm1rIgorCitkb1VzYWdlKCkgeworICBjYXQgPDxfRU9GXworVXNhZ2U6ICR7bXluYW1lfSA8c3JjX2Rpcj4gPGRzdF9kaXI+IDxiYXNlPiA8aW5jPiBbc2VkX3JlXQorICAgIFJlbnVtYmVycyBhbGwgcGF0Y2hlcyBmb3VuZCBpbiAnc3JjX2RpcicsIHN0YXJ0aW5nIGF0ICdiYXNlJywgd2l0aCBhbgorICAgIGluY3JlbWVudCBvZiAnaW5jJywgYW5kIHB1dHMgdGhlIHJlbnVtYmVyZWQgcGF0Y2hlcyBpbiAnZHN0X2RpcicuCisgICAgTGVhZGluZyBkaWdpdHMgYXJlIHJlcGxhY2VkIHdpdGggdGhlIG5ldyBpbmRleGVzLCBhbmQgYSBzdWJzZXF1ZW50ICdfJworICAgIGlzIHJlcGxhY2VkIHdpdGggYSAnLScuCisgICAgSWYgJ3NlZF9yZScgaXMgZ2l2ZW4sIGl0IGlzIGludGVycHJldGVkIGFzIGEgdmFsaWQgc2VkIGV4cHJlc3Npb24sIGFuZAorICAgIGlzIGJlIGFwcGxpZWQgdG8gdGhlIHBhdGNoIG5hbWUuCisgICAgSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEZBS0UgaXMgc2V0IHRvICd5JywgdGhlbiBub3RoaW5nIGdldHMgZG9uZSwKKyAgICB0aGUgY29tbWFuZCB0byBydW4gaXMgb25seSBiZSBwcmludGVkLCBhbmQgbm90IGV4ZWN1dGVkIChzbyB5b3UgY2FuCisgICAgY2hlY2sgYmVmb3JlaGFuZCkuCisgICAgJ2RzdF9kaXInIG11c3Qgbm90IHlldCBleGlzdC4KKyAgICBFZy46CisgICAgICBwYXRjaC1yZW51bWJlci5zaCBwYXRjaGVzL2djYy80LjIuMyBwYXRjaGVzL2djYy80LjIuNCAxMDAgMTAKKyAgICAgIHBhdGNoLXJlbnVtYmVyLnNoIC9zb21lL2Rpci9teS1wYXRjaGVzIHBhdGNoZXMvZ2NjLzQuMy4xIDEwMCAxMCAncy8oYWxsW18tXSkqKGdjY1stX10pKi8vOycKK19FT0ZfCit9CisKK1sgJCMgLWx0IDQgLW8gJCMgLWd0IDUgXSAmJiB7IGRvVXNhZ2U7IGV4aXQgMTsgfQorCitzcmM9IiR7MX0iCitkc3Q9IiR7Mn0iCitjcHQ9IiR7M30iCitpbmM9IiR7NH0iCitzZWRfcmU9IiR7NX0iCitpZiBbICEgLWQgIiR7c3JjfSIgXTsgdGhlbgorICAgIHByaW50ZiAiJXM6ICclcyc6IG5vdCBhIGRpcmVjdG9yeVxuIiAiJHtteW5hbWV9IiAiJHtzcmN9IgorICAgIGV4aXQgMQorZmkKK2lmIFsgLWQgIiR7ZHN0fSIgXTsgdGhlbgorICAgIHByaW50ZiAiJXM6ICclcyc6IGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0c1xuIiAiJHtteW5hbWV9IiAiJHtkc3R9IgorICAgIGV4aXQgMQorZmkKKworUT0KK2lmIFsgLW4gIiR7RkFLRX0iIF07IHRoZW4KKyAgICBwcmludGYgIiVzOiB3b24ndCBkbyBhbnl0aGluZzogRkFLRT0nJXMnXG4iICIke215bmFtZX0iICIke0ZBS0V9IgorICAgIFE9ImVjaG8iCitmaQorCiske1F9IG1rZGlyIC1wdiAiJHtkc3R9IgorZm9yIHAgaW4gIiR7c3JjfS8iKi5wYXRjaCo7IGRvCisgICAgWyAtZSAiJHtwfSIgXSB8fCB7IGVjaG8gIk5vIHN1Y2ggZmlsZSAnJHtwfSciOyBleGl0IDE7IH0KKyAgICBuZXduYW1lPSIkKHByaW50ZiAiJTAzZC0lcyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICIke2NwdH0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgIiQoIGJhc2VuYW1lICIke3B9IiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfCIke3NlZH0iIC1yIC1lICdzL15bWzpkaWdpdDpdXStbLV9dLy8nICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgIiR7c2VkX3JlfSIgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICApIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgKSIKKyAgICAke1F9IGNwIC12ICIke3B9IiAiJHtkc3R9LyR7bmV3bmFtZX0iCisgICAgY3B0PSQoKGNwdCtpbmMpKQorZG9uZQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL3BhdGNoLXJld29yay5zaCBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9wYXRjaC1yZXdvcmsuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2Q5Nzc5NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9wYXRjaC1yZXdvcmsuc2gKQEAgLTAsMCArMSwxOTQgQEAKKyMhL2Jpbi9zaAorCisjIEdldCBvdXIgcmVxdWlyZWQgb3B0aW9ucworYmFzZT0iJDEiCitzcmM9IiQyIgorZHN0PSIkMyIKK3NoaWZ0IDMKKworIyBUaGUgcmVtYWluZGVyIGlzIGZvciBkaWZmCitkaWZmPSIkQCIKKworZG9faGVscCgpIHsKKyAgICBjYXQgPDwtX0VPRl8KKwkJJHswIyMqL306IHRyYW5zZm9ybSBhIHBhdGNoc2V0IG9mIG5vbi1wMSBwYXRjaGVzIGludG8gLXAxIHBhdGNoZXMKKwkJCisJCVVzYWdlOgorCQkgICAgJHswIyMqL30gPGJhc2VkaXI+IDxzcmM+IDxkc3Q+IFtkaWZmb3B0cyAuLi5dCisJCQorCQlXaGVyZToKKwkJICAgIGJhc2VkaXIKKwkJICAgICAgICBwb2ludHMgdG8gdGhlIGRpcmVjdG9yeSBvZiB0aGUgY29tcG9uZW50IHRvIHBhdGNoCisJCQorCQkgICAgc3JjCisJCSAgICAgICAgcG9pbnRzIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgZXhpc3RpbmcgcGF0Y2hzZXQKKwkJICAgICAgICB0byB0cmFuc2Zvcm0KKwkJCisJCSAgICBkc3QKKwkJICAgICAgICBwb2ludHMgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBwdXQgdHJhbnNmb3JtZWQgcGF0Y2hlcworCQkKKwkJICAgIGRpZmZvcHRzCisJCSAgICAgICAgb3B0aW9uYWwgb3B0aW9ucyB0byBwYXNzIHRvIGRpZmYsIGZvciBkZWJ1ZyBwdXJwb3Nlcy4gWW91CisJCSAgICAgICAgc2hvdWxkIG5vdCBuZWVkIGl0CisJCQorCQlFeGFtcGxlOgorCQkgICAgVHJhbnNmb3JtIEdlbnRvbyBwYXRjaGVzIGFnYWluc3QgZ2NjLTQuNC4yIChzb21lIG9mIHdoaWNoIGFyZQorCQkgICAgLXAwLCAtcDEgb3IgZXZlbiAtcDIgcGF0Y2hlcykgaW50byBhbGwgLXAxIHBhdGNoZXM6CisJCQorCQkgICAgICAgIHRhciB4amYgZ2NjLTQuNC4yLnRhci5iejIKKwkJICAgICAgICBwYXRjaC1yZXdvcmsuc2ggZ2NjLTQuNC4yICAgICAgICAgICAgICAgICAgIFxcCisJCSAgICAgICAgICAgICAgICAgICAgICAgIC9wYXRoL3RvL2dlbnRvby9nY2MvcGF0Y2hlcyBcXAorCQkgICAgICAgICAgICAgICAgICAgICAgICBnY2MtNC40LjIucGF0Y2hlcworCQlfRU9GXworfQorCisjIFNhbml0eSBjaGVja3MKK2lmIFsgICAgLXogIiR7YmFzZX0iICAgICAgICAgICAgICAgICAgICBcCisgICAgIC1vICEgLWQgIiR7YmFzZX0iICAgICAgICAgICAgICAgICAgXAorICAgICAtbyAhIC1kICIke3NyY30iICAgICAgICAgICAgICAgICAgIFwKKyAgICAgLW8gLWUgIiR7ZHN0fSIgLWEgISAtZCAiJHtkc3R9IiAgICBcCisgICBdOyB0aGVuCisJZG9faGVscAorCWV4aXQgMQorZmkKKworbWtkaXIgLXAgIiR7ZHN0fSIKK2Jhc2U9IiR7YmFzZSUlL30iCitzcmM9IiQoIGNkICIke3NyY30iOyBwd2QgKSIKK2RzdD0iJCggY2QgIiR7ZHN0fSI7IHB3ZCApIgorCisjIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoYXQgdGhlIGZpbGVzIGxpc3RlZCBpbiB0aGUgZmlsZSBpbiAiJDEiCisjIGRvIGV4aXN0LCBhdCB0aGUgZ2l2ZW4gZGVwdGgtc3RyaXBwaW5nIGxldmVsIChha2EgZGlmZiAtcCMpCitkb19jaGVja19maWxlc19hdF9kZXB0aCgpIHsKKyAgbG9jYWwgZmxpc3Q9IiQxIgorICBsb2NhbCBkZXB0aD0iJDIiCisgIGxvY2FsIHJldD0wICAgIyAwOiBPSywgICEwOiBLTworCisgIGV4ZWMgNjwmMAorICBleGVjIDc8IiR7Zmxpc3R9IgorCisgIHdoaWxlIHJlYWQgLXU3IGY7IGRvCisgICAgZj0iJCggZWNobyAiJHtmfSIgfHNlZCAtciAtZSAiczpeKFteL10rLyl7JHtkZXB0aH19Ojo7IiApIgorICAgIFsgLWYgIiR7Zn0iIF0gfHwgcmV0PTEKKyAgZG9uZQorCisgIGV4ZWMgNzwmLQorICBleGVjIDwmNgorCisgIHJldHVybiAke3JldH0KK30KKworIyBJdGVyYXRlIHRocm91Z2ggcGF0Y2hlcworZm9yIHAgaW4gIiR7c3JjfS8iKi5wYXRjaDsgZG8KKyAgcG5hbWU9IiQoIGJhc2VuYW1lICIke3B9IiApIgorCisgIHByaW50ZiAiSGFuZGxpbmcgcGF0Y2ggJyR7cG5hbWV9Jy4uLlxuIgorCisgIHByaW50ZiAiICBjcmVhdGluZyByZWZlcmVuY2UuLi4iCisgIGNwIC1hICIke2Jhc2V9IiAiJHtiYXNlfS5vcmlnIgorICBwcmludGYgIiBkb25lXG4iCisKKyAgcHJpbnRmICIgIHJldHJpZXZpbmcgcGF0Y2ggY29tbWVudC4uLiIKKyAgY29tbWVudD0iJCggYXdrICcKK0JFR0lOIHsgbWFyaz0wOyB9CiskMH4vXmRpZmYgLS0vIHsgbmV4dGZpbGU7IH0KKyQxPT0iLS0tIiB7IG1hcms9MTsgbmV4dDsgfQorJDE9PSIrKysiICYmIG1hcms9PTEgeyBuZXh0ZmlsZTsgfQoreyBtYXJrPTA7IHByaW50OyB9CisnICIke3B9IiApIgorICBwcmludGYgIiBkb25lXG4iCisKKyAgcHJpbnRmICIgIGNyZWF0aW5nIHBhdGNoZWQgZmlsZSBsaXN0Li4uIgorICBkaWZmc3RhdCAtZiA0IC1yIDIgLXUgLXAgMCAiJHtwfSIgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB8aGVhZCAtbiAtMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB8YXdrICd7IGZvcihpPU5GO2k+PU5GLTU7aS0tKSB7ICQoaSkgPSAiIjsgfSBwcmludDsgfScgICAgXAorICB8c29ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICA+ImRpZmZzdGF0Lm9yaWciCisgIHByaW50ZiAiIGRvbmVcbiIKKworICBwdXNoZCAiJHtiYXNlfSIgPi9kZXYvbnVsbCAyPiYxCisKKyAgIyBDaGVjayBhbGwgZmlsZXMgZXhpc3QsIHVwIHRvIGRlcHRoIDMKKyAgcHJpbnRmICIgIGNoZWNraW5nIGRlcHRoOiIKKyAgZm9yKChkPTA7ZDw0O2QrKykpOyBkbworICAgIHByaW50ZiAiICR7ZH0iCisgICAgaWYgZG9fY2hlY2tfZmlsZXNfYXRfZGVwdGggIi4uL2RpZmZzdGF0Lm9yaWciICR7ZH07IHRoZW4KKyAgICAgIHByaW50ZiAiIG9rLCB1c2luZyBkZXB0aCAnJHtkfSdcbiIKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBpZiBbICR7ZH0gLWdlIDQgXTsgdGhlbgorICAgIHByaW50ZiAiXG4iCisgICAgcHJpbnRmICIgIGNoZWNraW5nIGRlcHRoIGZhaWxlZFxuIgorICAgIHJlYWQgLXAgIiAgLS0+IGVudGVyIHBhdGNoIGRlcHRoIChvciBDdHJsLUMgdG8gYWJvcnQpOiAiIGQKKyAgZmkKKworICAjIFN0b3JlIHRoZSBvcmlnaW5hbCBsaXN0IG9mIGZpbGVzIHRvdWNoZWQgYnkgdGhlIHBhdGNoLAorICAjIHJlbW92aW5nIHRoZSAkZCBsZWFkaW5nIGNvbXBvbmVudHMKKyAgc2VkIC1yIC1lICJzOl4oW14vXSsvKXske2R9fTo6OyIgIi4uL2RpZmZzdGF0Lm9yaWciID4iJHtkc3R9LyR7cG5hbWV9LmRpZmZzdGF0Lm9yaWciCisKKyAgIyBBcHBseSB0aGUgcGF0Y2ggcHJvcGVyLCBhbmQgY2hlY2sgaXQgYXBwbGllZCBjbGVhbmx5LgorICAjIFdlIGNhbid0IGNoZWNrIHdpdGggLS1kcnktcnVuIGJlY2F1c2Ugb2YgcGF0Y2hlcyB0aGF0CisgICMgY29udGFpbiBtdWx0aXBsZSBhY2N1bXVsYXRlZCBwYXRjaGVzIG9udG8gYSBzaW5nbGUgZmlsZS4KKyAgcHJpbnRmICIgIGFwcGx5aW5nIHBhdGNoLi4uIgorICBpZiAhIHBhdGNoIC1nMCAtRjEgLWYgLXAke2R9IDwiJHtwfSIgPiIuLi9wYXRjaC5vdXQiIDI+JjE7IHRoZW4KKyAgICBwcmludGYgIiBFUlJPUlxuXG4iCisgICAgcG9wZCA+L2Rldi9udWxsIDI+JjEKKyAgICBwcmludGYgIlRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBhcHBseWluZzpcbiAgLS0+ICAke3B9ICA8LS1cbiIKKyAgICBwcmludGYgIicke2Jhc2V9JyB3YXMgcmVzdG9yZWQgdG8gdGhlIHN0YXRlIGl0IHdhcyBwcmlvciB0byBhcHBseWluZyB0aGlzIGZhdWx0eSBwYXRjaC5cbiIKKyAgICBwcmludGYgIkhlcmUncyB0aGUgJ3BhdGNoJyBjb21tYW5kLCBhbmQgaXRzIG91dHB1dDpcbiIKKyAgICBwcmludGYgIiAgLS0tLTg8LS0tLVxuIgorICAgIHByaW50ZiAiICBwYXRjaCAtZzAgLUYxIC1mIC1wJHtkfSA8JyR7cH0nXG4iCisgICAgc2VkIC1yIC1lICdzL14vICAvOycgInBhdGNoLm91dCIKKyAgICBwcmludGYgIiAgLS0tLTg8LS0tLVxuIgorICAgIGV4aXQgMQorICBmaQorICBwcmludGYgIiBkb25lXG4iCisKKyAgcHJpbnRmICIgIHJlbW92aW5nICcub3JpZycgZmlsZXMuLi4iCisgIGZpbmQgLiAtdHlwZSBmIC1uYW1lICcqLm9yaWcnIC1leGVjIHJtIC1mIHt9ICsKKyAgcHJpbnRmICIgZG9uZVxuIgorCisgIHBvcGQgPi9kZXYvbnVsbCAyPiYxCisKKyAgcHJpbnRmICIgIHJlLWRpZmZpbmcgdGhlIHBhdGNoLi4uIgorICBwcmludGYgIiVzXG5cbiIgIiR7Y29tbWVudH0iID4iJHtkc3R9LyR7cG5hbWV9IgorICBkaWZmIC1kdXJOICIke2Jhc2V9Lm9yaWciICIke2Jhc2V9IiA+PiIke2RzdH0vJHtwbmFtZX0iCisgIHByaW50ZiAiIGRvbmVcbiIKKworICBpZiBbIC1uICIke2RpZmZ9IiBdOyB0aGVuCisgICAgcHJpbnRmICIgIGFwcGx5aW5nIGRpZmYgZmlsdGVyLi4uIgorICAgIGZpbHRlcmRpZmYgLXggIiR7ZGlmZn0iICIke2RzdH0vJHtwbmFtZX0iID4idG1wLWRpZmYiCisgICAgbXYgInRtcC1kaWZmIiAiJHtkc3R9LyR7cG5hbWV9IgorICAgIHByaW50ZiAiIGRvbmVcbiIKKyAgZmkKKworICBwcmludGYgIiAgY3JlYXRpbmcgbmV3IHBhdGNoZWQgZmlsZSBsaXN0Li4uIgorICBkaWZmc3RhdCAtZiA0IC1yIDIgLXUgLXAgMSAiJHtkc3R9LyR7cG5hbWV9IiAgICAgICAgICAgICAgXAorICB8aGVhZCAtbiAtMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB8YXdrICd7IGZvcihpPU5GO2k+PU5GLTU7aS0tKSB7ICQoaSkgPSAiIjsgfSBwcmludDsgfScgICAgXAorICB8c29ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICA+IiR7ZHN0fS8ke3BuYW1lfS5kaWZmc3RhdC5uZXciCisgIHByaW50ZiAiIGRvbmVcbiIKKworICBwcmludGYgIiAgcmVtb3ZpbmcgdGVtcG9yYXJ5IGZpbGVzL2RpcnMuLi4iCisgIHJtIC1mICJwYXRjaC5vdXQiCisgIHJtIC1mICJkaWZmc3RhdC50bXAiCisgIHJtIC1mICJkaWZmc3RhdC5vcmlnIgorICBybSAtcmYgIiR7YmFzZX0ub3JpZyIKKyAgcHJpbnRmICIgZG9uZVxuIgorZG9uZQorCisjIFNjYW4gYWxsIG5ldyBwYXRjaGVzIHRvIHNlZSBpZiB0aGV5IHRvdWNoCisjIG1vcmUgZmlsZXMgdGhhbiB0aGUgb3JpZ2luYWwgcGF0Y2hlcworcHJpbnRmICJcbkNoZWNraW5nIHJlc3VsdGluZyBwYXRjaHNldDpcbiIKK2ZvciBwIGluICIke2RzdH0vIioucGF0Y2g7IGRvCisgIHBuYW1lPSIkKCBiYXNlbmFtZSAiJHtwfSIgKSIKKworICBpZiAhIGNtcCAiJHtwfS5kaWZmc3RhdC5vcmlnIiAiJHtwfS5kaWZmc3RhdC5uZXciID4vZGV2L251bGw7IHRoZW4KKyAgICBwcmludGYgIiAgLS0+ICcke3BuYW1lfScgZGlmZmVyIGluIHRvdWNoZWQgZmlsZXMgPC0tXG4iCisgIGVsc2UKKyAgICBybSAtZiAiJHtwfS5kaWZmc3RhdC5vcmlnIiAiJHtwfS5kaWZmc3RhdC5uZXciCisgIGZpCitkb25lCitwcmludGYgIiAgZG9uZS5cbiIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9wb3B1bGF0ZS5pbiBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9wb3B1bGF0ZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDhmNTk1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL3BvcHVsYXRlLmluCkBAIC0wLDAgKzEsMjk3IEBACisjIS9iaW4vc2gKKyMgVGhpcyBzY3JpcHQgd2lsbCBwb3B1bGF0ZSB0aGUgcm9vdCBkaXJlY3Rvcnkgd2l0aCBsaWJzIGZyb20gdGhlIHN5c3Jvb3QuCisjIChDKSAyMDA3IFlhbm4gRS4gTU9SSU4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIEdQTCB2Mgorc2V0IC1lCisKKyMgVXNlIHRoZSB0b29scyBkaXNjb3ZlcmVkIGJ5IGNyb3NzdG9vbC1ORydzIC4vY29uZmlndXJlOgoraW5zdGFsbD0iQEBDVF9pbnN0YWxsQEAiCitncmVwPSJAQENUX2dyZXBAQCIKK3NlZD0iQEBDVF9zZWRAQCIKKworIyBEZXRlY3Qgd2hlcmUgdGhlIHRvb2xjaGFpbiBpczoKK0NUX1BSRUZJWF9ESVI9IiQoY2QgIiQoZGlybmFtZSAiJDAiKS8uLiI7IHB3ZCkiCitDVF9HQ0M9IiR7MCUtcG9wdWxhdGV9LWdjYyIKK0NUX1JFQURFTEY9IiR7MCUtcG9wdWxhdGV9LXJlYWRlbGYiCitDVF9DRkdfUFJFRklYX0RJUj0iJCgiJHtDVF9HQ0N9IiAtdiAyPiYxICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgfHRyICcgJyAnXG4nICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIHwiJHtncmVwfSIgLUUgLS0gJy0tcHJlZml4PScgICBcCisgICAgICAgICAgICAgICAgICAgICB8Y3V0IC1kID0gLWYgMi0KKyAgICAgICAgICAgICAgICAgICAgKSIKK0NUX0NGR19TWVNST09UX0RJUj0iJCgiJHtDVF9HQ0N9IiAtdiAyPiYxICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICB8dHIgJyAnICdcbicgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICB8IiR7Z3JlcH0iIC1FIC0tICctLXdpdGgtc3lzcm9vdD0nICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICB8Y3V0IC1kID0gLWYgMi0KKyAgICAgICAgICAgICAgICAgICAgICkiCitDVF9TWVNST09UX0RJUj0iJChwcmludGYgIiR7Q1RfQ0ZHX1NZU1JPT1RfRElSfVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgIHwiJHtzZWR9IiAtciAtZSAiczpeJHtDVF9DRkdfUFJFRklYX0RJUn06JHtDVF9QUkVGSVhfRElSfTo7IiAgXAorICAgICAgICAgICAgICAgICAgfCIke3NlZH0iIC1yIC1lICdzLC8rLC8sZzsnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICkiCisKK215bmFtZT0kKGJhc2VuYW1lICIkMCIpCisKK2RvSGVscCgpIHsKKyAgICBjYXQgPDxfRU9GXworTkFNRQorICAgICRteW5hbWUgLSBwb3B1bGF0ZSB0aGUgdGFyZ2V0IHJvb3QgZmlsZSBzeXN0ZW0KKworU1lOT1BTSVMKKyAgICAkbXluYW1lIE9QVElPTlMgLXMgc291cmNlX3Jvb3QgLWQgZGVzdGluYXRpb25fcm9vdAorCitERVNDUklQVElPTgorICAgIFRoaXMgc2NyaXB0IHdpbGwgJ3BvcHVsYXRlJyB5b3VyIHRhcmdldCByb290IGZpbGUgc3lzdGVtICdzb3VyY2Vfcm9vdCcKKyAgICB3aXRoIGxpYnJhcmllcyBmcm9tIHRoZSB0b29sY2hhaW4gKGVnLiBsaWJjLnNvLi4uKSwgc3RvcmluZyB0aGUgcmVzdWx0CisgICAgaW50byAnZHN0X2RpcicuCisKK09QVElPTlMKKyAgICAtcyBzcmNfZGlyCisgICAgICAgIFVzZSAnc3JjX2RpcicgYXMgdGhlIHVuLXBvcHVsYXRlZCAoc291cmNlKSByb290IGRpcmVjdG9yeS4KKworICAgIC1kIGRzdF9kaXIKKyAgICAgICAgVXNlICdkc3RfZGlyJyBhcyB0aGUgcGxhY2UgdG8gcHV0IHRoZSBwb3B1bGF0ZWQgcm9vdCBkaXJlY3RvcnkuCisgICAgICAgIFNlZSB0aGUgLWYgYW5kIC1tIG9wdGlvbnMsIGJlbG93LCBvbiB0aGUgcmVxdWlyZWQgKG5vbi0pZXhpc3RlbmNlCisgICAgICAgIG9mIHRoaXMgZGlyZWN0b3J5LgorCisgICAgLXIgc3lzcm9vdF9kaXIKKyAgICAgICAgVXNlICdzeXNyb290X2RpcicgYXMgdGhlIHN5c3Jvb3QgaW5zdGVhZCBvZiB0aGUgdG9vbGNoYWluIGRlZmF1bHQuCisKKyAgICAtbCBuYW1lMVs6bmFtZTJbLi4uXV0KKyAgICAgICAgQWx3YXlzIGFkZCB0aGUgc3BlY2lmaWVkIHNoYXJlZCBsaWJyYXJ5L2llcyBuYW1lMSwgbmFtZTIuLi4gZnJvbSB0aGUKKyAgICAgICAgdG9vbGNoYWluIChpbiB0aGUgc3lzcm9vdCkuIEFjdHVhbCBsaWJyYXJ5IG5hbWVzIGFyZSBzZWFyY2hlZCBhcworICAgICAgICBmb2xsb3dzICh3aGVyZSAnbmFtZScgaXMgcmVwbGFjZWQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSkgaW4gdGhlCisgICAgICAgIHN5c3Jvb3QgZGlyZWN0b3J5OgorICAgICAgICAgIC0gbGlibmFtZS5zbworICAgICAgICAgIC0gbmFtZS5zbworICAgICAgICAgIC0gbmFtZQorICAgICAgICBJZiB0aGUgZmlsZSBpcyBmb3VuZCwgdGhlbiB0aGUgU09OQU1FIG9mIHRoZSBsaWJyYXJ5IGlzIHVzZWQsIGFuZCB0aGUKKyAgICAgICAgbGlicmFyeSBpcyBjb3BpZWQgd2l0aCB0aGF0IG5hbWUuIElmIHRoZSBsaWJyYXJ5IHdhcyBub3QgZm91bmQsIHRoaXMKKyAgICAgICAgeWllbGRzIGFuIGVycm9yICh1bmxlc3MgLWYgd2FzIGdpdmVuKS4KKworICAgIC1MIGZpbGUKKyAgICAgICAgUmVhZCAnZmlsZScgZm9yIGEgbGlzdCBvZiBzaGFyZWQgbGlicmFyaWVzIHRvIGFsd2F5cyBhZGQgZnJvbSB0aGUKKyAgICAgICAgdG9vbGNoYWluLiBUaGUgZmlsZSBzaG91bGQgY29udGFpbiBvbmUgbGlicmFyeSBuYW1lIHBlciBsaW5lOyB0ZXh0CisgICAgICAgIGFmdGVyIGEgIyBpcyBpZ25vcmVkIHVudGlsIHRoZSBlbmQgb2YgdGhlIGxpbmU7IHNwYWNlcyBhcmUgaWdub3JlZDsKKyAgICAgICAgZW1wdHkgbGluZXMgYXJlIGlnbm9yZWQuIExpYnJhcmllcyBhcmUgc2VhcmNoZWQgZm9yIGFzIHdpdGggLWwuCisKKyAgICAtZiAgRm9yY2UgZXhlY3V0aW9uOiBpZiBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUKKyAgICAgICAgcmVtb3ZlZCBmaXJzdDsgaWYgYSBzcGVjaWZpZWQgbGlicmFyeSAoYWJvdmUpIHdhcyBub3QgZm91bmQsIGNvbnRpbnVlLgorICAgICAgICBOb3RlOiBpZiB1c2luZyAtbSBhbmQgdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cywgaXQKKyAgICAgICAgaXMgKm5vdCogcmVtb3ZlZCwgc2VlIGJlbG93LgorCisgICAgLW0gIE1lcmdlIHRoZSBzb3VyY2Ugcm9vdCBkaXJlY3Rvcnkgd2l0aCB0aGUgZGVzdGluYXRpb24gcm9vdCBkaXJlY3RvcnkuCisgICAgICAgIElmIHRoZSBsYXR0ZXIgZG9lcyBub3QgZXhpc3QsIGl0IGlzIGNyZWF0ZWQsIGFuZCAtbSBpcyBpZ25vcmVkLgorICAgICAgICBJZiB0aGUgZGVzdGluYXRpb24gcm9vdCBkaXJlY3RvcnkgZXhpc3RzLCB0aGVuIHRoZSBjb250ZW50IG9mIHRoZQorICAgICAgICBzb3VyY2Ugcm9vdCBkaXJlY3RvcnkgaXMgY29waWVkIGluIHRoZXJlLCBhbmQgdGhlIHJlc3VsdCBpcyBwb3B1bGF0ZWQKKyAgICAgICAgYXMgdXN1YWwuCisgICAgICAgIEl0IGNhbiBiZSB1c2VmdWwgaWYgY29uc3RydWN0aW5nIGEgcm9vdGZzIGluY3JlbWVudGFsbHkgZnJvbSBtYW55CisgICAgICAgIHNtYWxsZXIgc291cmNlIHJvb3QgZGlyZWN0b3JpZXMsIG9yIGlmIHlvdXIgZGVzdGluYXRpb24gcm9vdCBkaXJlY3RvcnkKKyAgICAgICAgaXMgYW4gTkZTIGV4cG9ydCB0aGF0IHlvdXIgdGFyZ2V0IG1vdW50cyBhcyAvIChhbmQgeW91IGRvbid0IHdhbnQgdG8KKyAgICAgICAgcmUtcnVuIGV4cG9ydGZzIC1hdiBldmVyeXRpbWUpLiBVU0UgV0lUSCBDQVJFIQorCisgICAgLXYgIEJlIHZlcmJvc2UuIEJ5IGRlZmF1bHQsIHBvcHVsYXRlIGlzIGFic29sdXRlbHkgc2lsZW50LgorCitfRU9GXworfQorCitDVF9ST09UX1NSQ19ESVI9CitDVF9ST09UX0RTVF9ESVI9CitDVF9MSUJfTElTVD0KK0NUX0xJQl9GSUxFPQorQ1RfTUVSR0U9CitDVF9GT1JDRT0KK0NUX1BSSU5URj06CitPUFRJTkQ9MQord2hpbGUgZ2V0b3B0cyAiOnM6ZDpyOmw6TDpmbXZoIiBDVF9PUFQ7IGRvCisgICAgY2FzZSAiJHtDVF9PUFR9IiBpbgorICAgICAgICBzKSAgQ1RfUk9PVF9TUkNfRElSPSIke09QVEFSR30iOzsKKyAgICAgICAgZCkgIENUX1JPT1RfRFNUX0RJUj0iJHtPUFRBUkd9Ijs7CisgICAgICAgIHIpICBDVF9TWVNST09UX0RJUj0iJHtPUFRBUkd9Ijs7CisgICAgICAgIGwpICBDVF9MSUJfTElTVD0iJHtDVF9MSUJfTElTVH06JHtPUFRBUkd9Ijs7CisgICAgICAgIEwpICBDVF9MSUJfRklMRT0iJHtPUFRBUkd9Ijs7CisgICAgICAgIGYpICBDVF9GT1JDRT15OzsKKyAgICAgICAgbSkgIENUX01FUkdFPXk7OworICAgICAgICB2KSAgQ1RfUFJJTlRGPXByaW50Zjs7CisgICAgICAgIGgpICBkb0hlbHAKKyAgICAgICAgICAgIGV4aXQgMAorICAgICAgICAgICAgOzsKKyAgICAgICAgOikgIHByaW50ZiAiJG15bmFtZTogJy0ke09QVEFSR30nIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LlxuIgorICAgICAgICAgICAgZXhpdCAxCisgICAgICAgICAgICA7OworICAgICAgICA/KSAgcHJpbnRmICIkbXluYW1lOiB1bmtub3duIG9wdGlvbiAnLSR7T1BUQVJHfScuXG4iCisgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworZG9uZQorCisjIFNhbml0eSBjaGVja3MKK2lmIFsgLXogIiR7Q1RfUk9PVF9TUkNfRElSfSIgLW8gLXogIiR7Q1RfUk9PVF9EU1RfRElSfSIgXTsgdGhlbgorICAgIGRvSGVscAorICAgIGV4aXQgMQorZmkKK2lmIFsgISAtZCAiJHtDVF9ST09UX1NSQ19ESVJ9IiBdOyB0aGVuCisgICAgcHJpbnRmICIkbXluYW1lOiAnJHtDVF9ST09UX1NSQ19ESVJ9Jzogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVxuIgorICAgIGV4aXQgMQorZmkKK2lmIFsgISAtZCAiJHtDVF9TWVNST09UX0RJUn0iIF07IHRoZW4KKyAgICBwcmludGYgIiRteW5hbWU6ICcke0NUX1NZU1JPT1RfRElSfSc6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcbiIKKyAgICBleGl0IDEKK2ZpCisjIElmIHRoZSBkZXN0IGRpciBkb2VzIG5vdCBleGlzdCwgYWxsIGlzIHdlbGwKKyMgSWYgbWVyZ2luZywgd2UgYWNjZXB0IGFuIGV4aXN0aW5nIGRlc3QgZGlyZWN0b3J5CisjIElmIGZvcmNpbmcgYW5kIG5vdCBtZXJnaW5nLCB3ZSByZW1vdmUgYW4gZXhpdGluZyBkZXN0IGRpcmVjdG9yeQorIyBJZiBub3QgZm9yY2luZyBhbmQgbm90IG1lcmdpbmcsIHdlIGRvIG5vdCBhY2NlcHQgYW4gZXhpdGluZyBkZXN0IGRpcmVjdG9yeQoraWYgWyAtZCAiJHtDVF9ST09UX0RTVF9ESVJ9IiBdOyB0aGVuCisgICAgY2FzZSAiJHtDVF9GT1JDRX06JHtDVF9NRVJHRX0iIGluCisgICAgICAgICo6eSkgICAgOzsKKyAgICAgICAgeTopICAgICBybSAtcmYgIiR7Q1RfUk9PVF9EU1RfRElSfSI7OworICAgICAgICA6KSAgICAgIHByaW50ZiAiJG15bmFtZTogJyR7Q1RfUk9PVF9EU1RfRElSfSc6IGFscmVhZHkgZXhpc3RzXG4iCisgICAgICAgICAgICAgICAgZXhpdCAxCisgICAgICAgICAgICAgICAgOzsKKyAgICBlc2FjCitmaQorc3JjX2lub2RlPSQobHMgLTFpZCAiJHtDVF9ST09UX1NSQ19ESVJ9Ly4iIHxhd2sgJ3sgcHJpbnQgJDEgfScpCitkc3RfaW5vZGU9JChscyAtMWlkICIke0NUX1JPT1RfRFNUX0RJUn0vLiIgMj4vZGV2L251bGwgfGF3ayAneyBwcmludCAkMSB9JykKK2lmIFsgIiR7c3JjX2lub2RlfSIgLWVxICIkKChkc3RfaW5vZGUrMCkpIiBdOyB0aGVuCisgICAgcHJpbnRmICIkbXluYW1lOiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZSFcbiIKKyAgICBleGl0IDEKK2ZpCisKKyMgQ2hlY2sgZXhpc3RlbmNlIG9mIHRoZSBmb3JjZWQgbGlicmFyaWVzIGZpbGUKK2lmIFsgLW4gIiR7Q1RfTElCX0ZJTEV9IiAtYSAhIFwoIC1mICIke0NUX0xJQl9GSUxFfSIgLWEgLXIgIiR7Q1RfTElCX0ZJTEV9IiBcKSBdOyB0aGVuCisgICAgcHJpbnRmICIkbXluYW1lOiBmb3JjZWQgbGlicmFyaWVzIGZpbGUgJyR7Q1RfTElCX0ZJTEV9JyBub3QgZm91bmQhXG4iCisgICAgZXhpdCAxCitmaQorCisjIENyZWF0ZSB0aGUgd29ya2luZyBjb3B5LCBubyBpc3N1ZSBpZiBhbHJlYWR5IGV4aXN0aW5nCitta2RpciAtcCAiJHtDVF9ST09UX0RTVF9ESVJ9IgorCisjIE1ha2UgYWxsIHBhdGggYWJzb2x1dGUKK0NUX1JPT1RfU1JDX0RJUj0kKGNkICIke0NUX1JPT1RfU1JDX0RJUn0iOyBwd2QpCitDVF9ST09UX0RTVF9ESVI9JChjZCAiJHtDVF9ST09UX0RTVF9ESVJ9IjsgcHdkKQorQ1RfU1lTUk9PVF9ESVI9JChjZCAiJHtDVF9TWVNST09UX0RJUn0iOyBwd2QpCisKKyMgUG9wdWxhdGUgdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSB3aXRoIGZpbGVzIGZyb20gdGhlIHNvdXJjZSBkaXJlY3RvcnkKK2NkICIke0NUX1JPT1RfU1JDX0RJUn0iCitjcCAtYSAuICIke0NUX1JPT1RfRFNUX0RJUn0iCitjZCAtID4vZGV2L251bGwKKworIyBBIGZ1bmN0aW9uIGRvIHNlYXJjaCBmb3IgYSBsaWJyYXJ5CisjIFVzYWdlOiBkb19hZGRfbGliIGxpYm5hbWUKKyMgcmV0dXJuczogMCBpZiBsaWJyYXJ5IHdhcyBmb3VuZCBhbmQgYWRkZWQsICEwIG90aGVyd2lzZQorZG9fYWRkX2xpYigpIHsKKyAgICBsb2NhbCBsaWJuYW1lPSIkMSIKKyAgICBsb2NhbCB0cnVlX2xpYm5hbWUKKyAgICBsb2NhbCBkaXIKKyAgICBsb2NhbCBtb2RlCisKKyAgICBmb3IgZGlyIGluIGxpYiB1c3IvbGliOyBkbworICAgICAgICBpZiBbIC1lICIke2Rpcn0vJHtsaWJuYW1lfSIgXTsgdGhlbgorICAgICAgICAgICAgJHtDVF9QUklOVEZ9ICIgICAgYWxyZWFkeSBwcmVzZW50XG4iCisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBmaQorICAgIGRvbmUKKyAgICBmb3IgZGlyIGluIGxpYiB1c3IvbGliOyBkbworICAgICAgICAke0NUX1BSSU5URn0gIiAgICB0cnlpbmcgaW4gJyVzJyIgIiR7ZGlyfSIKKyAgICAgICAgbGliZmlsZT0iJHtDVF9TWVNST09UX0RJUn0vJHtkaXJ9LyR7bGlibmFtZX0iCisgICAgICAgICR7Q1RfUFJJTlRGfSAiOiAnJXMnXG4iICIke2xpYmZpbGV9IgorICAgICAgICBpZiBbIC1lICIke2xpYmZpbGV9IiBdOyB0aGVuCisgICAgICAgICAgICBta2RpciAtcCAiJHtkaXJ9IgorICAgICAgICAgICAgdHJ1ZV9saWJuYW1lPSQoIiR7Q1RfUkVBREVMRn0iIC1kICIke2xpYmZpbGV9IiAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8IiR7Z3JlcH0iICJMaWJyYXJ5IHNvbmFtZToiICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwiJHtzZWR9IiAtciAtZSAncywuK1xbKC4rKVxdICokLFwxLDsnICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBjYXNlICIke2xpYmZpbGV9IiBpbgorICAgICAgICAgICAgICAgICovbGQqKSAgbW9kZT0wNzU1OzsKKyAgICAgICAgICAgICAgICAqKSAgICAgIG1vZGU9MDY0NDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAke0NUX1BSSU5URn0gIiAgICAgIGluc3RhbGxpbmcgYXMgJyVzLyVzJywgbW9kZT0nJXMnXG4iICIke2Rpcn0iICIke3RydWVfbGlibmFtZX0iICIke21vZGV9IgorICAgICAgICAgICAgIiR7aW5zdGFsbH0iIC1tICIke21vZGV9IiAiJHtsaWJmaWxlfSIgIiR7ZGlyfS8ke3RydWVfbGlibmFtZX0iCisgICAgICAgICAgICBkb19yZXNvbHZlX2RlcHMgIiR7ZGlyfS8ke3RydWVfbGlibmFtZX0iCisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBmaQorICAgIGRvbmUKKyAgICByZXR1cm4gMQorfQorCisjIEEgZnVuY3Rpb24gdG8gcmVzb2x2ZSBhbGwgTkVFREVEIGVudHJpZXMgZm9yIHRoZSBnaXZlbiBmaWxlLCByZWxhdGl2ZQorIyB0byB0aGUgd29ya2luZyBkaXJlY3RvcnkgKGVnLiBkc3RfZGlyKQorIyBVc2FnZTogZG9fcmVzb2x2ZV9kZXBzIHNvbWUvd2hlcmUvc29tZS9maWxlCisjIFJldHVybnM6IDAsIG1lYW5pbmcgYWxsIGRlcGVuZGVuY2llcyB3ZXJlIGZvdW5kCisjIElmIG5vdCBhbGwgZGVwZW5kZW5jaWVzIGNvdWxkIGJlIGZvdW5kLCBleGlzdHMgd2l0aCBlcnJvciBjb2RlIDEKKyMgKHVubGVzcyBmb3JjZWQpCitkb19yZXNvbHZlX2RlcHMoKSB7CisgICAgbG9jYWwgZmlsZT0iJHsxfSIKKyAgICBsb2NhbCBsaWJuYW1lCisgICAgCisgICAgZm9yIGxpYm5hbWUgaW4gJCgiJHtDVF9SRUFERUxGfSIgLWQgIiR7ZmlsZX0iICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgfCIke2dyZXB9IiAtRSAnXChORUVERURcKVtbOnNwYWNlOl1dK1NoYXJlZCBsaWJyYXJ5OicgIFwKKyAgICAgICAgICAgICAgICAgICAgIHwiJHtzZWR9IiAtciAtZSAncywuK1xbKC4rKVxdICokLFwxLDsnICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICk7IGRvCisgICAgICAgIFsgLW4gIiR7bGlibmFtZX0iIF0gfHwgY29udGludWUKKyAgICAgICAgJHtDVF9QUklOVEZ9ICJTZWFyY2hpbmcgZm9yICclcycgbmVlZGVkIGJ5ICclcydcbiIgIiR7bGlibmFtZX0iICIke2ZpbGV9IgorICAgICAgICBpZiAhIGRvX2FkZF9saWIgIiR7bGlibmFtZX0iOyB0aGVuCisgICAgICAgICAgICBwcmludGYgIiRteW5hbWU6IGxpYnJhcnkgJyR7bGlibmFtZX0nIG5vdCBmb3VuZCFcbiIKKyAgICAgICAgICAgIFsgIiR7Q1RfRk9SQ0V9IiA9ICJ5IiBdIHx8IGV4aXQgMQorICAgICAgICBmaQorICAgIGRvbmUKK30KKworIyBXZSdsbCB3b3JrIGluIHRoZSBjb3BpZWQgcm9vdGZzCitjZCAiJHtDVF9ST09UX0RTVF9ESVJ9IgorCisjIEZpcnN0IG9mLCBjb3B5IHRoZSBmb3JjZWQgbGlicmFyaWVzIGludG8gdGhlIHdvcmtpbmcgY29weQorbGliX2xpc3Q9CitpZiBbIC1uICIke0NUX0xJQl9GSUxFfSIgXTsgdGhlbgorICAgIGxpYl9saXN0PSQoIiR7c2VkfSIgLXIgLWUgJzpsb29wOyBzLyMuKi8vOycgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy9bWzpzcGFjZTpdXSsvL2c7JyAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzLyhbXjpdKSQvXDE6LzsnICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgJy8kL047IHMvXG4vLzsgdGxvb3A7JyAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAiJHtDVF9MSUJfRklMRX0iCisgICAgICAgICAgICAgICkKK2ZpCitDVF9MSUJfTElTVD0kKHByaW50ZiAiJHtDVF9MSUJfTElTVH06JHtsaWJfbGlzdH1cbiIgICAgICAgICBcCisgICAgICAgICAgICAgIHwiJHtzZWR9IiAtciAtZSAncy9eOisvLzsgcy86KyQvLzsgcy86Ky8gL2c7JyBcCisgICAgICAgICAgICAgKQoraWYgWyAtbiAiJHtDVF9MSUJfTElTVH0iIF07IHRoZW4KKyAgICBmb3IgbmFtZSBpbiAke0NUX0xJQl9MSVNUfTsgZG8KKyAgICAgICAgWyAteiAiJHtuYW1lfSIgXSAmJiBjb250aW51ZQorICAgICAgICBmb3VuZD0wCisgICAgICAgIGZvciBsaWJuYW1lIGluICJsaWIke25hbWV9LnNvIiAiJHtuYW1lfS5zbyIgIiR7bmFtZX0iOyBkbworICAgICAgICAgICAgJHtDVF9QUklOVEZ9ICJTZWFyY2hpbmcgZm9yIGZvcmNlZCBsaWJyYXJ5ICclcydcbiIgIiR7bGlibmFtZX0iCisgICAgICAgICAgICBpZiBkb19hZGRfbGliICIke2xpYm5hbWV9IjsgdGhlbgorICAgICAgICAgICAgICAgIGZvdW5kPTEKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgICAgICBpZiBbICR7Zm91bmR9IC1lcSAwIF07IHRoZW4KKyAgICAgICAgICAgIHByaW50ZiAiJG15bmFtZTogbGlicmFyeSAnJHtsaWJuYW1lfScgbm90IGZvdW5kIVxuIgorICAgICAgICAgICAgWyAiJHtDVF9GT1JDRX0iID0gInkiIF0gfHwgZXhpdCAxCisgICAgICAgIGZpCisgICAgZG9uZQorZmkKKworIyBDcmVhdGUgYSB0ZW1wb3JhcnkgcGxhY2Ugd2hlcmUgdG8gc3RvcmUuLi4gdGVtcCBmaWxlcy4KK3JhbmQ9IiQoIGRkIGlmPS9kZXYvdXJhbmRvbSBicz0xMDI0IGNvdW50PTEgMj4vZGV2L251bGwgXAorICAgICAgICAgfG1kNXN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICB8YXdrICd7IHByaW50ICQxOyB9JworICAgICAgICkiCitDVF9UTVBfRElSPSIke1RNUERJUjotL3RtcH0vcG9wdWxhdGUtJHtyYW5kfS0keyR9IgorKCB1bWFzayAwMDc3OyBta2RpciAiJHtDVF9UTVBfRElSfSIgKSB8fCB7IHByaW50ZiAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5XG4iOyBleGl0IDE7IH0KK3RyYXAgInJtIC1yZiAke0NUX1RNUF9ESVJ9IiBFWElUCisKKyMgTGlzdCBhbGwgRUxGIChleGVjdXRhYmxlc3xzaGFyZWQgb2JqZWN0cykuLi4KK2ZpbmQgLiAtdHlwZSBmIC1leGVjIGZpbGUge30gXDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit8IiR7Z3JlcH0iIC1FICc6IEVMRiBbWzpkaWdpdDpdXSstYml0IChMfE0pU0IgKGV4ZWN1dGFibGV8c2hhcmVkIG9iamVjdCksJyAgXAorfGN1dCAtZCAiOiIgLWYgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKz4iJHtDVF9UTVBfRElSfS9maWxlcy5saXN0IgorCisjIC4uLiBhbmQgdXNlIHRoYXQgbGlzdCB0byBmaW5kIG1pc3NpbmcgZGVwZW5kZW5jaWVzCit3aGlsZSByZWFkIGZpbGU7IGRvCisgICAgZG9fcmVzb2x2ZV9kZXBzICIke2ZpbGV9IgorZG9uZSA8IiR7Q1RfVE1QX0RJUn0vZmlsZXMubGlzdCIKKworcm0gLXJmICIke0NUX1RNUF9ESVJ9IgordHJhcCAtIEVYSVQKKworIyBPSywgd2UncmUgZG9uZS4gQmFjayBvZmYuCitjZCAtID4vZGV2L251bGwKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9zYXZlU2FtcGxlLnNoIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL3NhdmVTYW1wbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTc4ODYwYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9zYXZlU2FtcGxlLnNoCkBAIC0wLDAgKzEsMTM2IEBACisjIS9iaW4vYmFzaAorCisjIFRoaXMgc2NyaXB0IGlzIHJlc3BvbnNpYmxlIGZvciBzYXZpbmcgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpbnRvIGEKKyMgc2FtcGxlIHRvIGJlIHVzZWQgbGF0ZXIgb24gYXMgYSBwcmUtY29uZmlndXJlZCB0YXJnZXQuCisKKyMgV2hhdCB3ZSBuZWVkIHRvIHNhdmU6CisjICAtIHRoZSAuY29uZmlnIGZpbGUKKyMgIC0gdGhlIHVDbGliYyAuY29uZmlnIGZpbGUgaWYgdUNsaWJjIHNlbGVjdGVkCisjICAtIGluZm8gYWJvdXQgd2hvIHJlcG9ydGVkIHRoZSBzYW1wbGUKKworIyBQYXJzZSB0aGUgdG9vbHMnIHBhdGhzIGNvbmZpZ3VyYXRpb24KKy4gIiR7Q1RfTElCX0RJUn0vcGF0aHMubWsiCisKKyMgV2UnbGwgbmVlZCB0aGUgc3Rkb3V0IGxhdGVyLCBzYXZlIGl0CitleGVjIDc+JjEKKworLiAiJHtDVF9MSUJfRElSfS9zY3JpcHRzL2Z1bmN0aW9ucyIKKworIyBEb24ndCBjYXJlIGFib3V0IGFueSBsb2cgZmlsZQorZXhlYyA+L2Rldi9udWxsCitybSAtZiAiJHt0bXBfbG9nX2ZpbGV9IgorCisjIFBhcnNlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKKyMgRG9uJ3QgdXNlIENUX1Rlc3RPckFib3J0LCBpdCBwcmludHMgdGhlIHRlc3Qgc3RyaW5nIHRvIFtERUJVR10KKyMgTm90ZTogd2UganVzdCBuZWVkIHRoZSBub24tbWFuZ2xlZCAuY29uZmlnLCBub3QgLmNvbmZpZy4yCitpZiBbICEgLWYgLmNvbmZpZyBdOyB0aGVuCisgICAgQ1RfQWJvcnQgIkNvbmZpZ3VyYXRpb24gZmlsZSBub3QgZm91bmQuIFBsZWFzZSBjcmVhdGUgb25lLiIKK2ZpCisuIC5jb25maWcKKworIyBXZSBjYW4gbm90IHJlbGlhYmx5IHNhdmUgYSBzYW1wbGUgd2hpY2ggZWl0aGVyIHVzZXMgbG9jYWwgcGF0Y2hlcworIyBhbmQvb3IgY3VzdG9tIExpbnV4IGtlcm5lbCBoZWFkZXJzLiBXYXJuIHRoZSB1c2VyIGFib3V0IHRoaXMgaXNzdWUKKyMgYW5kIGNvbnRpbnVlIGlmIGhlL3NoZSBjb25maXJtcyBzdmluZyB0aGUgc2FtcGxlLgoraWYgWyAiJHtDVF9DVVNUT01fUEFUQ0h9IiA9ICJ5IiBdOyB0aGVuCisgICAgZXhlYyA+JjcKKyAgICBlY2hvICJZb3UgYXJlIHVzaW5nIGxvY2FsIHBhdGNoZXMuIgorICAgIGVjaG8gIllvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIChlYXNpbHkpIHNoYXJlIHRoaXMgc2FtcGxlIGluIHRoaXMgY2FzZS4iCisgICAgcmVhZCAtcCAiUHJlc3MgQ3RybC1DIHRvIHN0b3Agbm93LCBvciBFbnRlciB0byBjb250aW51ZS4uLiIKK2ZpCitpZiBbICIke0NUX0tFUk5FTF9MSU5VWF9VU0VfQ1VTVE9NX0hFQURFUlN9IiA9ICJ5IiBdOyB0aGVuCisgICAgZXhlYyA+JjcKKyAgICBlY2hvICJZb3UgYXJlIHVzaW5nIGN1c3RvbSBMaW51eCBoZWFkZXJzLiIKKyAgICBlY2hvICJZb3Ugd2lsbCBub3QgYmUgYWJsZSB0byAoZWFzaWx5KSBzaGFyZSB0aGlzIHNhbXBsZSBpbiB0aGlzIGNhc2UuIgorICAgIHJlYWQgLXAgIlByZXNzIEN0cmwtQyB0byBzdG9wIG5vdywgb3IgRW50ZXIgdG8gY29udGludWUuLi4iCitmaQorCisjIERvIG5vdCB1c2UgYSBwcm9ncmVzcyBiYXIKK3Vuc2V0IENUX0xPR19QUk9HUkVTU19CQVIKKworIyBQYXJzZSBhcmNoaXRlY3R1cmUgYW5kIGtlcm5lbCBzcGVjaWZpYyBmdW5jdGlvbnMKKy4gIiR7Q1RfTElCX0RJUn0vc2NyaXB0cy9idWlsZC9hcmNoLyR7Q1RfQVJDSH0uc2giCisuICIke0NUX0xJQl9ESVJ9L3NjcmlwdHMvYnVpbGQva2VybmVsLyR7Q1RfS0VSTkVMfS5zaCIKKworIyBUYXJnZXQgdHVwbGU6IENUX1RBUkdFVCBuZWVkcyBhIGxpdHRsZSBsb3ZlOgorQ1RfRG9CdWlsZFRhcmdldFR1cGxlCisKKyMgS2x1ZGdlOiBpZiBhbnkgb2YgdGhlIGNvbmZpZyBvcHRpb25zIG5lZWRzIGVpdGhlciBDVF9UQVJHRVQgb3IgQ1RfVE9QX0RJUiwKKyMgcmUtcGFyc2UgdGhlbToKKy4gLmNvbmZpZworCisjIE92ZXJyaWRlIGxvZyBvcHRpb25zCit1bnNldCBDVF9MT0dfUFJPR1JFU1NfQkFSIENUX0xPR19FUlJPUiBDVF9MT0dfSU5GTyBDVF9MT0dfRVhUUkEgQ1RfTE9HX0RFQlVHIExPR19BTEwKK0NUX0xPR19XQVJOPXkKK0NUX0xPR19MRVZFTF9NQVg9IldBUk4iCisKKyMgQ29tcHV0ZSB0aGUgbmFtZSBvZiB0aGUgc2FtcGxlIGRpcmVjdG9yeQorY2FzZSAiJHtDVF9UT09MQ0hBSU5fVFlQRX0iIGluCisgICAgY3Jvc3MpICAgICAgc2FtcF9uYW1lPSIke0NUX1RBUkdFVH0iOzsKKyAgICBjYW5hZGlhbikgICBzYW1wX25hbWU9IiR7Q1RfSE9TVH0sJHtDVF9UQVJHRVR9Ijs7CisgICAgKikgICAgICAgICAgQ1RfQWJvcnQgIlVuc3VwcG9ydGVkIHRvb2xjaGFpbiB0eXBlICcke0NUX1RPT0xDSEFJTl9UWVBFfSciOzsKK2VzYWMKK3NhbXBfZGlyPSJzYW1wbGVzLyR7c2FtcF9uYW1lfSIKK21rZGlyIC1wICIke3NhbXBfZGlyfSIKKworIyBTYXZlIHRoZSBjcm9zc3Rvb2wtTkcgY29uZmlnIGZpbGUKKyMgV2UgbmVlZCB0byBzYXZlIHRoZSByZWFsIC5jb25maWcgd2l0aCBrY29uZmlnJ3MgdmFsdWVzLAorIyBub3Qgb3VyIG1hbmdsZWQgLmNvbmZpZy4yIHdpdGggYXJyYXlzCisiJHtzZWR9IiAtciAtZSAnc3xeKENUX1BSRUZJWF9ESVIpPS4qfFwxPSIke0hPTUV9L3gtdG9vbHMvJHtDVF9UQVJHRVR9Inw7JyAgICAgIFwKKyAgICAgICAgICAgIC1lICdzfF4jIENUX0xPR19UT19GSUxFIGlzIG5vdCBzZXQkfENUX0xPR19UT19GSUxFPXl8OycgICAgICAgICAgICAgXAorICAgICAgICAgICAgLWUgJ3N8XiMgQ1RfTE9HX0ZJTEVfQ09NUFJFU1MgaXMgbm90IHNldCR8Q1RfTE9HX0ZJTEVfQ09NUFJFU1M9eXw7JyBcCisgICAgICAgICAgICAtZSAnc3xeKENUX0xPQ0FMX1RBUkJBTExTX0RJUik9Lip8XDE9IiR7SE9NRX0vc3JjInw7JyAgICAgICAgICAgICAgIFwKKyAgICAgICAgIDwuY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgID4iJHtzYW1wX2Rpcn0vY3Jvc3N0b29sLmNvbmZpZyIKKworIyBGdW5jdGlvbiB0byBjb3B5IGEgZmlsZSB0byB0aGUgc2FtcGxlIGRpcmVjdG9yeQorIyBOZWVkZWQgaW4gY2FzZSB0aGUgZmlsZSBpcyBhbHJlYWR5IHRoZXJlICh0aGluayBvZiBhIHByZXZpb3VzbHkgYXZhaWxhYmxlIHNhbXBsZSkKKyMgVXNhZ2U6IENUX0RvQWRkRmlsZVRvU2FtcGxlIDxzb3VyY2U+IDxkZXN0PgorQ1RfRG9BZGRGaWxlVG9TYW1wbGUoKSB7CisgICAgc291cmNlPSIkMSIKKyAgICBkZXN0PSIkMiIKKyAgICBpbm9kZV9zPSQobHMgLWkgIiR7c291cmNlfSIgfGF3ayAneyBwcmludCAkMTsgfScpCisgICAgaW5vZGVfZD0kKGxzIC1pICIke2Rlc3R9IiAyPi9kZXYvbnVsbCB8YXdrICd7IHByaW50ICQxOyB9JyB8fCB0cnVlKQorICAgIGlmIFsgIiR7aW5vZGVfc30iICE9ICIke2lub2RlX2R9IiBdOyB0aGVuCisgICAgICAgIGNwICIke3NvdXJjZX0iICIke2Rlc3R9IgorICAgIGZpCit9CisKK2lmIFsgIiR7Q1RfVE9QX0RJUn0iID0gIiR7Q1RfTElCX0RJUn0iIF07IHRoZW4KKyAgICBzYW1wX3RvcF9kaXI9Ilwke0NUX0xJQl9ESVJ9IgorZWxzZQorICAgIHNhbXBfdG9wX2Rpcj0iXCR7Q1RfVE9QX0RJUn0iCitmaQorCisjIFNhdmUgdGhlIHVDbGliYyAuY29uZmlnIGZpbGUKK2lmIFsgLW4gIiR7Q1RfTElCQ19VQ0xJQkNfQ09ORklHX0ZJTEV9IiBdOyB0aGVuCisgICAgIyBXZSBzYXZlIHRoZSBmaWxlLCBhbmQgdGhlbiBwb2ludCB0aGUgc2F2ZWQgc2FtcGxlIHRvIHRoaXMgZmlsZQorICAgIENUX0RvQWRkRmlsZVRvU2FtcGxlICIke0NUX0xJQkNfVUNMSUJDX0NPTkZJR19GSUxFfSIgIiR7c2FtcF9kaXJ9LyR7Q1RfTElCQ30tJHtDVF9MSUJDX1ZFUlNJT059LmNvbmZpZyIKKyAgICAiJHtzZWR9IiAtciAtaSAtZSAnc3xeKENUX0xJQkNfVUNMSUJDX0NPTkZJR19GSUxFKT0uKyR8XDE9IiciJHtzYW1wX3RvcF9kaXJ9Iicvc2FtcGxlcy8ke0NUX1RBUkdFVH0vJHtDVF9MSUJDfS0ke0NUX0xJQkNfVkVSU0lPTn0uY29uZmlnInw7JyBcCisgICAgICAgICAgICAgIiR7c2FtcF9kaXJ9L2Nyb3NzdG9vbC5jb25maWciCitlbHNlCisgICAgIyByZW1vdmUgYW55IGRhbmdsaW5nIGZpbGVzCisgICAgZm9yIGYgaW4gIiR7c2FtcF9kaXJ9LyR7Q1RfTElCQ30tIiouY29uZmlnOyBkbworICAgICAgICBpZiBbIC1mICIke2Z9IiBdOyB0aGVuIHJtIC1mICIke2Z9IjsgZmkKKyAgICBkb25lCitmaQorCisjIFJlc3RvcmUgc3Rkb3V0IG5vdywgdG8gYmUgaW50ZXJhY3RpdmUKK2V4ZWMgPiY3CisKKyMgRmlsbC1pbiB0aGUgcmVwb3J0ZWQtYnkgaW5mbworWyAtZiAiJHtzYW1wX2Rpcn0vcmVwb3J0ZWQuYnkiIF0gJiYgLiAiJHtzYW1wX2Rpcn0vcmVwb3J0ZWQuYnkiCitvbGRfbmFtZT0iJHtyZXBvcnRlcl9uYW1lfSIKK29sZF91cmw9IiR7cmVwb3J0ZXJfdXJsfSIKK3JlYWQgLXAgIlJlcG9ydGVyIG5hbWUgWyR7cmVwb3J0ZXJfbmFtZX1dOiAiIHJlcG9ydGVyX25hbWUKK3JlYWQgLXAgIlJlcG9ydGVyIFVSTCBbJHtyZXBvcnRlcl91cmx9XTogIiByZXBvcnRlcl91cmwKK2lmIFsgLW4gIiR7cmVwb3J0ZXJfY29tbWVudH0iIF07IHRoZW4KKyAgZWNobyAiT2xkIGNvbW1lbnQgaWYgeW91IG5lZWQgdG8gY29weS1wYXN0ZToiCisgIHByaW50ZiAiJHtyZXBvcnRlcl9jb21tZW50fVxuIgorZmkKK2VjaG8gIlJlcG9ydGVyIGNvbW1lbnQgKEN0cmwtRCB0byBmaW5pc2gpOiIKK3JlcG9ydGVyX2NvbW1lbnQ9JChjYXQpCisKKyggZWNobyAicmVwb3J0ZXJfbmFtZT1cIiR7cmVwb3J0ZXJfbmFtZTo9JHtvbGRfbmFtZX19XCIiCisgIGVjaG8gInJlcG9ydGVyX3VybD1cIiR7cmVwb3J0ZXJfdXJsOj0ke29sZF91cmx9fVwiIgorICBwcmludGYgInJlcG9ydGVyX2NvbW1lbnQ9XCIke3JlcG9ydGVyX2NvbW1lbnR9XCJcbiIKKykgPiIke3NhbXBfZGlyfS9yZXBvcnRlZC5ieSIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9zY3JpcHRzLm1rIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL3NjcmlwdHMubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM3M2Y5YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9zY3JpcHRzLm1rCkBAIC0wLDAgKzEsNTQgQEAKKyMgTWFrZWZpbGUgZm9yIHRoZSBzY3JpcHRzLyBzdWItZGlyZWN0b3J5CisKKyMgSGVyZSwgd2UgY2FuIHVwZGF0ZSB0aGUgY29uZmlnLiogc2NyaXB0cy4KKyMgSWYgd2UncmUgaW4gQ1RfTElCX0RJUiwgdGhlbiBDVF9MSUJfRElSID09IENUX1RPUF9ESVIsIGFuZCB3ZSBjYW4gdXBkYXRlIHRob3NlCisjIHNjcmlwdHMgZm9yIGxhdGVyIGluY2x1c2lvbiBtYWlubGluZS4gSWYgQ1RfTElCX0RJUiAhPSBDVF9UT1BfRElSLCB0aGVuIHRob3NlCisjIHNjcmlwdHMgYXJlIGRvd25sb2FkZWQgb25seSBmb3IgdXNlIGluIENUX1RPUF9ESVIuCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGUgdG9vbHMgaGVscCBlbnRyeQorCitoZWxwLWRpc3RyaWI6OgorCUBlY2hvICAnICB1cGRhdGV0b29scyAgICAgICAgLSBVcGRhdGUgdGhlIGNvbmZpZyB0b29scycKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFdoZXJlIHRvIGdldCB0b29scyBmcm9tLCBhbmQgd2hlcmUgdG8gc3RvcmUgdGhlbSBpbnRvCisjIFRoZSB0b29scyBhcmU6IGNvbmZpZy5ndWVzcyBhbmQgY29uZmlnLnN1YgorCitDT05GSUdfU1VCX1NSQz0iaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5zdWI7aGI9SEVBRCIKK0NPTkZJR19TVUJfREVTVD1zY3JpcHRzL2NvbmZpZy5zdWIKK0NPTkZJR19HVUVTU19TUkM9Imh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuZ3Vlc3M7aGI9SEVBRCIKK0NPTkZJR19HVUVTU19ERVNUPXNjcmlwdHMvY29uZmlnLmd1ZXNzCisKK1BIT05ZICs9IHVwZGF0ZXRvb2xzCit1cGRhdGV0b29sczogJChDT05GSUdfU1VCX0RFU1QpICQoQ09ORklHX0dVRVNTX0RFU1QpCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBIb3cgdG8gcmV0cmlldmUgdGhlIHRvb2xzCisKK3dnZXRfb3B0PS1vIC9kZXYvbnVsbAoraWZlcSAoJChzdHJpcCAkKFYpKSwyKQorICB3Z2V0X29wdD0KK2VuZGlmCisKK1BIT05ZICs9IHNjcmlwdHMKK3NjcmlwdHM6CisJQCQoRUNITykgJyAgTUtESVIgJEAnCisJJChTSUxFTlQpbWtkaXIgLXAgJEAKKworJChDT05GSUdfU1VCX0RFU1QpOiBzY3JpcHRzIEZPUkNFCisJQCQoRUNITykgJyAgV0dFVCAgJEAnCisJJChTSUxFTlQpd2dldCAkKHdnZXRfb3B0KSAtTyAkQCAkKENPTkZJR19TVUJfU1JDKQorCSQoU0lMRU5UKWNobW9kIHUrcnd4LGdvK3J4LXcgJEAKKworJChDT05GSUdfR1VFU1NfREVTVCk6IHNjcmlwdHMgRk9SQ0UKKwlAJChFQ0hPKSAnICBXR0VUICAkQCcKKwkkKFNJTEVOVCl3Z2V0ICQod2dldF9vcHQpIC1PICRAICQoQ09ORklHX0dVRVNTX1NSQykKKwkkKFNJTEVOVCljaG1vZCB1K3J3eCxnbytyeC13ICRACisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDbGVhbiB1cCB0aGUgbWVzcworCitkaXN0Y2xlYW46OgorCUAkKEVDSE8pICIgIENMRUFOIHNjcmlwdHMiCisJJChTSUxFTlQpWyAkKENUX1RPUF9ESVIpID0gJChDVF9MSUJfRElSKSBdIHx8IHJtIC1yZiAkKENUX1RPUF9ESVIpL3NjcmlwdHMKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9zaG93U2FtcGxlcy5zaCBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9zaG93U2FtcGxlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40OTAwNzBjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL3Nob3dTYW1wbGVzLnNoCkBAIC0wLDAgKzEsMTk0IEBACisjIS9iaW4vc2gKKyMgWWVzLCB0aGlzIGlzIHN1cHBvc2VkIHRvIGJlIGEgUE9TSVgtY29tcGxpYW50IHNoZWxsIHNjcmlwdC4KKworIyBQYXJzZXMgYWxsIHNhbXBsZXMgb24gdGhlIGNvbW1hbmQgbGluZSwgYW5kIGZvciBlYWNoIG9mIHRoZW0sIHByaW50cworIyB0aGUgdmVyc2lvbnMgb2YgdGhlIG1haW4gdG9vbHMKKworIyBVc2UgdG9vbHMgZGlzY292ZXJlZCBieSAuL2NvbmZpZ3VyZQorLiAiJHtDVF9MSUJfRElSfS9wYXRocy5tayIKKworWyAiJDEiID0gIi12IiBdICYmIG9wdD0iJDEiICYmIHNoaWZ0CitbICIkMSIgPSAiLXciIF0gJiYgb3B0PSIkMSIgJiYgc2hpZnQKKworIyBHUkVQX09QVElPTlMgc2NyZXdzIHRoaW5ncyB1cC4KK2V4cG9ydCBHUkVQX09QVElPTlM9CisKKyMgRHVtcCBhIHNpbmdsZSBzYW1wbGUKKyMgTm90ZTogd2UgY2FuIHF1aXRlIHNhZmVseSB1c2VkIHRoZSBub24tbWFuZ2xlZCAuY29uZmlnLjIKK2R1bXBfc2luZ2xlX3NhbXBsZSgpIHsKKyAgICBsb2NhbCB2ZXJib3NlPTAKKyAgICBsb2NhbCBjb21wbGlicworICAgIFsgIiQxIiA9ICItdiIgXSAmJiB2ZXJib3NlPTEgJiYgc2hpZnQKKyAgICBbICIkMSIgPSAiLXciIF0gJiYgd2lraT0xICYmIHNoaWZ0CisgICAgbG9jYWwgd2lkdGg9IiQxIgorICAgIGxvY2FsIHNhbXBsZT0iJDIiCisgICAgY2FzZSAiJHtzYW1wbGV9IiBpbgorICAgICAgICBjdXJyZW50KQorICAgICAgICAgICAgc2FtcGxlX3R5cGU9ImwiCisgICAgICAgICAgICBzYW1wbGU9IiR7Y3VycmVudF90dXBsZX0iCisgICAgICAgICAgICB3aWR0aD0iJHsjc2FtcGxlfSIKKyAgICAgICAgICAgIC4gJChwd2QpLy5jb25maWcKKyAgICAgICAgICAgIDs7CisgICAgICAgICopICBpZiBbIC1mICIke0NUX1RPUF9ESVJ9L3NhbXBsZXMvJHtzYW1wbGV9L2Nyb3NzdG9vbC5jb25maWciIF07IHRoZW4KKyAgICAgICAgICAgICAgICBzYW1wbGVfdG9wPSIke0NUX1RPUF9ESVJ9IgorICAgICAgICAgICAgICAgIHNhbXBsZV90eXBlPSJMIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNhbXBsZV90b3A9IiR7Q1RfTElCX0RJUn0iCisgICAgICAgICAgICAgICAgc2FtcGxlX3R5cGU9IkciCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgLiAiJHtzYW1wbGVfdG9wfS9zYW1wbGVzLyR7c2FtcGxlfS9jcm9zc3Rvb2wuY29uZmlnIgorICAgICAgICAgICAgOzsKKyAgICBlc2FjCisgICAgaWYgWyAteiAiJHt3aWtpfSIgXTsgdGhlbgorICAgICAgICB0X3dpZHRoPTE0CisgICAgICAgIHByaW50ZiAiJS0qcyAgWyVzIiAke3dpZHRofSAiJHtzYW1wbGV9IiAiJHtzYW1wbGVfdHlwZX0iCisgICAgICAgIFsgLWYgIiR7c2FtcGxlX3RvcH0vc2FtcGxlcy8ke3NhbXBsZX0vYnJva2VuIiBdICYmIHByaW50ZiAiQiIgfHwgcHJpbnRmICIgIgorICAgICAgICBbICIke0NUX0VYUEVSSU1FTlRBTH0iID0gInkiIF0gJiYgcHJpbnRmICJYIiB8fCBwcmludGYgIiAiCisgICAgICAgIGVjaG8gIl0iCisgICAgICAgIGlmIFsgJHt2ZXJib3NlfSAtbmUgMCBdOyB0aGVuCisgICAgICAgICAgICBjYXNlICIke0NUX1RPT0xDSEFJTl9UWVBFfSIgaW4KKyAgICAgICAgICAgICAgICBjcm9zcykgIDs7CisgICAgICAgICAgICAgICAgY2FuYWRpYW4pCisgICAgICAgICAgICAgICAgICAgIHByaW50ZiAiICAgICUtKnMgOiAlc1xuIiAke3Rfd2lkdGh9ICJIb3N0IiAiJHtDVF9IT1NUfSIKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIHByaW50ZiAiICAgICUtKnMgOiAlc1xuIiAke3Rfd2lkdGh9ICJPUyIgIiR7Q1RfS0VSTkVMfSR7Q1RfS0VSTkVMX1ZFUlNJT046Ky19JHtDVF9LRVJORUxfVkVSU0lPTn0iCisgICAgICAgICAgICBpZiBbICAgIC1uICIke0NUX0dNUH0iICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIC1vIC1uICIke0NUX01QRlJ9IiAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIC1vIC1uICIke0NUX1BQTH0iICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIC1vIC1uICIke0NUX0NMT09HfSIgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIC1vIC1uICIke0NUX01QQ30iICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIC1vIC1uICIke0NUX0xJQkVMRn0iICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIC1vIC1uICIke0NUX0dNUF9UQVJHRVR9IiAgICAgICBcCisgICAgICAgICAgICAgICAgIC1vIC1uICIke0NUX01QRlJfVEFSR0VUfSIgICAgICBcCisgICAgICAgICAgICAgICAgIC1vIC1uICIke0NUX1BQTF9UQVJHRVR9IiAgICAgICBcCisgICAgICAgICAgICAgICAgIC1vIC1uICIke0NUX0NMT09HX1RBUkdFVH0iICAgICBcCisgICAgICAgICAgICAgICAgIC1vIC1uICIke0NUX01QQ19UQVJHRVR9IiAgICAgICBcCisgICAgICAgICAgICAgICAgIC1vIC1uICIke0NUX0xJQkVMRl9UQVJHRVR9IiAgICBcCisgICAgICAgICAgICAgICBdOyB0aGVuCisgICAgICAgICAgICAgICAgcHJpbnRmICIgICAgJS0qcyA6IiAke3Rfd2lkdGh9ICJDb21wYW5pb24gbGlicyIKKyAgICAgICAgICAgICAgICBjb21wbGlicz0xCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgWyAteiAiJHtDVF9HTVB9IiAgICAtYSAteiAiJHtDVF9HTVBfVEFSR0VUfSIgICAgXSB8fCBwcmludGYgIiBnbXAtJXMiICAgICAgICIke0NUX0dNUF9WRVJTSU9OfSIKKyAgICAgICAgICAgIFsgLXogIiR7Q1RfTVBGUn0iICAgLWEgLXogIiR7Q1RfTVBGUl9UQVJHRVR9IiAgIF0gfHwgcHJpbnRmICIgbXBmci0lcyIgICAgICAiJHtDVF9NUEZSX1ZFUlNJT059IgorICAgICAgICAgICAgWyAteiAiJHtDVF9QUEx9IiAgICAtYSAteiAiJHtDVF9QUExfVEFSR0VUfSIgICAgXSB8fCBwcmludGYgIiBwcGwtJXMiICAgICAgICIke0NUX1BQTF9WRVJTSU9OfSIKKyAgICAgICAgICAgIFsgLXogIiR7Q1RfQ0xPT0d9IiAgLWEgLXogIiR7Q1RfQ0xPT0dfVEFSR0VUfSIgIF0gfHwgcHJpbnRmICIgY2xvb2ctcHBsLSVzIiAiJHtDVF9DTE9PR19WRVJTSU9OfSIKKyAgICAgICAgICAgIFsgLXogIiR7Q1RfTVBDfSIgICAgLWEgLXogIiR7Q1RfTVBDX1RBUkdFVH0iICAgIF0gfHwgcHJpbnRmICIgbXBjLSVzIiAgICAgICAiJHtDVF9NUENfVkVSU0lPTn0iCisgICAgICAgICAgICBbIC16ICIke0NUX0xJQkVMRn0iIC1hIC16ICIke0NUX0xJQkVMRl9UQVJHRVR9IiBdIHx8IHByaW50ZiAiIGxpYmVsZi0lcyIgICAgIiR7Q1RfTElCRUxGX1ZFUlNJT059IgorICAgICAgICAgICAgWyAteiAiJHtjb21wbGlic30iICBdIHx8IHByaW50ZiAiXG4iCisgICAgICAgICAgICBwcmludGYgICIgICAgJS0qcyA6ICVzXG4iICR7dF93aWR0aH0gImJpbnV0aWxzIiAiYmludXRpbHMtJHtDVF9CSU5VVElMU19WRVJTSU9OfSIKKyAgICAgICAgICAgIHByaW50ZiAgIiAgICAlLSpzIDogJXMiICR7dF93aWR0aH0gIkMgY29tcGlsZXIiICIke0NUX0NDfS0ke0NUX0NDX1ZFUlNJT059IChDIgorICAgICAgICAgICAgWyAiJHtDVF9DQ19MQU5HX0NYWH0iID0gInkiICAgICBdICYmIHByaW50ZiAiLEMrKyIKKyAgICAgICAgICAgIFsgIiR7Q1RfQ0NfTEFOR19GT1JUUkFOfSIgPSAieSIgXSAmJiBwcmludGYgIixGb3J0cmFuIgorICAgICAgICAgICAgWyAiJHtDVF9DQ19MQU5HX0pBVkF9IiA9ICJ5IiAgICBdICYmIHByaW50ZiAiLEphdmEiCisgICAgICAgICAgICBbICIke0NUX0NDX0xBTkdfQURBfSIgPSAieSIgICAgIF0gJiYgcHJpbnRmICIsQURBIgorICAgICAgICAgICAgWyAiJHtDVF9DQ19MQU5HX09CSkN9IiA9ICJ5IiAgICBdICYmIHByaW50ZiAiLE9iamVjdGl2ZS1DIgorICAgICAgICAgICAgWyAiJHtDVF9DQ19MQU5HX09CSkNYWH0iID0gInkiICBdICYmIHByaW50ZiAiLE9iamVjdGl2ZS1DKysiCisgICAgICAgICAgICBbIC1uICIke0NUX0NDX0xBTkdfT1RIRVJTfSIgICAgIF0gJiYgcHJpbnRmICIsJHtDVF9DQ19MQU5HX09USEVSU30iCisgICAgICAgICAgICBwcmludGYgIilcbiIKKyAgICAgICAgICAgIHByaW50ZiAgIiAgICAlLSpzIDogJXNcbiIgJHt0X3dpZHRofSAiQyBsaWJyYXJ5IiAiJHtDVF9MSUJDfSR7Q1RfTElCQ19WRVJTSU9OOistfSR7Q1RfTElCQ19WRVJTSU9OfSIKKyAgICAgICAgICAgIHByaW50ZiAgIiAgICAlLSpzIDoiICR7dF93aWR0aH0gIlRvb2xzIgorICAgICAgICAgICAgWyAiJHtDVF9UT09MX3NzdHJpcH0iICAgXSAmJiBwcmludGYgIiBzc3RyaXAiCisgICAgICAgICAgICBbICIke0NUX0RFQlVHX2RtYWxsb2N9IiBdICYmIHByaW50ZiAiIGRtYWxsb2MtJHtDVF9ETUFMTE9DX1ZFUlNJT059IgorICAgICAgICAgICAgWyAiJHtDVF9ERUJVR19kdW1hfSIgICAgXSAmJiBwcmludGYgIiBkdW1hLSR7Q1RfRFVNQV9WRVJTSU9OfSIKKyAgICAgICAgICAgIFsgIiR7Q1RfREVCVUdfZ2RifSIgICAgIF0gJiYgcHJpbnRmICIgZ2RiLSR7Q1RfR0RCX1ZFUlNJT059IgorICAgICAgICAgICAgWyAiJHtDVF9ERUJVR19sdHJhY2V9IiAgXSAmJiBwcmludGYgIiBsdHJhY2UtJHtDVF9MVFJBQ0VfVkVSU0lPTn0iCisgICAgICAgICAgICBbICIke0NUX0RFQlVHX3N0cmFjZX0iICBdICYmIHByaW50ZiAiIHN0cmFjZS0ke0NUX1NUUkFDRV9WRVJTSU9OfSIKKyAgICAgICAgICAgIHByaW50ZiAiXG4iCisgICAgICAgIGZpCisgICAgZWxzZQorICAgICAgICBjYXNlICIke0NUX1RPT0xDSEFJTl9UWVBFfSIgaW4KKyAgICAgICAgICAgIGNyb3NzKQorICAgICAgICAgICAgICAgIHByaW50ZiAifCAnJyR7c2FtcGxlfScnICB8ICIKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgY2FuYWRpYW4pCisgICAgICAgICAgICAgICAgcHJpbnRmICJ8ICcnIgorICAgICAgICAgICAgICAgIHByaW50ZiAiJHtzYW1wbGV9IiB8c2VkIC1yIC1lICdzLy4qLC8vJworICAgICAgICAgICAgICAgIHByaW50ZiAiJycgIHwgJHtDVF9IT1NUfSAgIgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKSAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIHByaW50ZiAifCAgIgorICAgICAgICBbICIke0NUX0VYUEVSSU1FTlRBTH0iID0gInkiIF0gJiYgcHJpbnRmICIqKlgqKiIKKyAgICAgICAgWyAtZiAiJHtzYW1wbGVfdG9wfS9zYW1wbGVzLyR7c2FtcGxlfS9icm9rZW4iIF0gJiYgcHJpbnRmICIqKkIqKiIKKyAgICAgICAgcHJpbnRmICIgIHwgICcnJHtDVF9LRVJORUx9JycgIHwiCisgICAgICAgIGlmIFsgIiR7Q1RfS0VSTkVMfSIgIT0gImJhcmUtbWV0YWwiIF07dGhlbgorICAgICAgICAgICAgaWYgWyAiJHtDVF9LRVJORUxfTElOVVhfSEVBREVSU19VU0VfQ1VTVE9NX0RJUn0iID0gInkiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBwcmludGYgIiAgLy9jdXN0b20vLyAgIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByaW50ZiAiICAke0NUX0tFUk5FTF9WRVJTSU9OfSAgIgorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgcHJpbnRmICJ8ICAke0NUX0JJTlVUSUxTX1ZFUlNJT059ICAiCisgICAgICAgIHByaW50ZiAifCAgJycke0NUX0NDfScnICAiCisgICAgICAgIHByaW50ZiAifCAgJHtDVF9DQ19WRVJTSU9OfSAgIgorICAgICAgICBwcmludGYgInwgICcnJHtDVF9MSUJDfScnICB8IgorICAgICAgICBpZiBbICIke0NUX0xJQkN9IiAhPSAibm9uZSIgXTsgdGhlbgorICAgICAgICAgICAgcHJpbnRmICIgICR7Q1RfTElCQ19WRVJTSU9OfSAgIgorICAgICAgICBmaQorICAgICAgICBwcmludGYgInwgICR7Q1RfVEhSRUFEUzotbm9uZX0gICIKKyAgICAgICAgcHJpbnRmICJ8ICAke0NUX0FSQ0hfRkxPQVRfSFc6K2hhcmR9JHtDVF9BUkNIX0ZMT0FUX1NXOitzb2Z0fSAgIgorICAgICAgICBwcmludGYgInwgIEMiCisgICAgICAgIFsgIiR7Q1RfQ0NfTEFOR19DWFh9IiA9ICJ5IiAgICAgXSAmJiBwcmludGYgIiwgQysrIgorICAgICAgICBbICIke0NUX0NDX0xBTkdfRk9SVFJBTn0iID0gInkiIF0gJiYgcHJpbnRmICIsIEZvcnRyYW4iCisgICAgICAgIFsgIiR7Q1RfQ0NfTEFOR19KQVZBfSIgPSAieSIgICAgXSAmJiBwcmludGYgIiwgSmF2YSIKKyAgICAgICAgWyAiJHtDVF9DQ19MQU5HX0FEQX0iID0gInkiICAgICBdICYmIHByaW50ZiAiLCBBREEiCisgICAgICAgIFsgIiR7Q1RfQ0NfTEFOR19PQkpDfSIgPSAieSIgICAgXSAmJiBwcmludGYgIiwgT2JqZWN0aXZlLUMiCisgICAgICAgIFsgIiR7Q1RfQ0NfTEFOR19PQkpDWFh9IiA9ICJ5IiAgXSAmJiBwcmludGYgIiwgT2JqZWN0aXZlLUMrKyIKKyAgICAgICAgWyAtbiAiJHtDVF9DQ19MQU5HX09USEVSU30iICAgICBdICYmIHByaW50ZiAiXFxcXFxcXFwgT3RoZXJzOiAke0NUX0NDX0xBTkdfT1RIRVJTfSIKKyAgICAgICAgcHJpbnRmICIgICIKKyAgICAgICAgKCAuICIke3NhbXBsZV90b3B9L3NhbXBsZXMvJHtzYW1wbGV9L3JlcG9ydGVkLmJ5IgorICAgICAgICAgIGlmIFsgLW4gIiR7cmVwb3J0ZXJfbmFtZX0iIF07IHRoZW4KKyAgICAgICAgICAgICAgaWYgWyAtbiAiJHtyZXBvcnRlcl91cmx9IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICBwcmludGYgInwgIFtbJHtyZXBvcnRlcl91cmx9fCR7cmVwb3J0ZXJfbmFtZX1dXSAgIgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBwcmludGYgInwgICR7cmVwb3J0ZXJfbmFtZX0gICIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHByaW50ZiAifCAgKC8vdW5rbm93bi8vKSAgIgorICAgICAgICAgIGZpCisgICAgICAgICkKKyAgICAgICAgc2FtcGxlX3VwZGF0ZWQ9IiQoIGhnIGxvZyAtbCAxIC0tdGVtcGxhdGUgJ3tkYXRlfHNob3J0ZGF0ZX0nICIke3NhbXBsZV90b3B9L3NhbXBsZXMvJHtzYW1wbGV9IiApIgorICAgICAgICBwcmludGYgInwgICR7c2FtcGxlX3VwZGF0ZWR9ICAiCisgICAgICAgIGVjaG8gInwiCisgICAgZmkKK30KKworIyBHZXQgbGFyZ2VzdCBzYW1wbGUgd2lkdGgKK3dpZHRoPTAKK2ZvciBzYW1wbGUgaW4gIiR7QH0iOyBkbworICAgIFsgJHsjc2FtcGxlfSAtZ3QgJHt3aWR0aH0gXSAmJiB3aWR0aD0keyNzYW1wbGV9Citkb25lCisKK2lmIFsgIiR7b3B0fSIgPSAtdyBdOyB0aGVuCisgICAgcHJpbnRmICJeICVzICB8fHx8fHx8fHx8fHx8fHxcbiIgIiQoIGRhdGUgIislWSVtJWQuJUglTSAleiIgKSIKKyAgICBwcmludGYgIl4gVGFyZ2V0ICAiCisgICAgcHJpbnRmICJeIEhvc3QgICIKKyAgICBwcmludGYgIl4gIFN0YXR1cyAgIgorICAgIHByaW50ZiAiXiAgS2VybmVsIGhlYWRlcnNcXFxcXFxcXCB2ZXJzaW9uICBeIgorICAgIHByaW50ZiAiXiAgYmludXRpbHNcXFxcXFxcXCB2ZXJzaW9uICAiCisgICAgcHJpbnRmICJeICBDIGNvbXBpbGVyXFxcXFxcXFwgdmVyc2lvbiAgXiIKKyAgICBwcmludGYgIl4gIEMgbGlicmFyeVxcXFxcXFxcIHZlcnNpb24gIF4iCisgICAgcHJpbnRmICJeICBUaHJlYWRpbmdcXFxcXFxcXCBtb2RlbCAgIgorICAgIHByaW50ZiAiXiAgRmxvYXRpbmcgcG9pbnRcXFxcXFxcXCBzdXBwb3J0ICAiCisgICAgcHJpbnRmICJeICBMYW5ndWFnZXMgICIKKyAgICBwcmludGYgIl4gIEluaXRpYWxseVxcXFxcXFxcIHJlcG9ydGVkIGJ5ICAiCisgICAgcHJpbnRmICJeICBMYXN0XFxcXFxcXFwgdXBkYXRlZCAgIgorICAgIGVjaG8gICAiXiIKK2VsaWYgWyAteiAiJHtvcHR9IiBdOyB0aGVuCisgICAgcHJpbnRmICIlLSpzICBTdGF0dXNcbiIgJHt3aWR0aH0gIlNhbXBsZSBuYW1lIgorZmkKKworZm9yIHNhbXBsZSBpbiAiJHtAfSI7IGRvCisgICAgKCBkdW1wX3NpbmdsZV9zYW1wbGUgJHtvcHR9ICR7d2lkdGh9ICIke3NhbXBsZX0iICkKK2RvbmUKKworaWYgWyAiJHtvcHR9IiA9IC13IF07IHRoZW4KKyAgICBwcmludGYgIl4gVG90YWw6ICR7I0B9IHNhbXBsZXMgIHx8ICoqWCoqOiBzYW1wbGUgdXNlcyBmZWF0dXJlcyBtYXJrZWQgYXMgYmVpbmcgRVhQRVJJTUVOVEFMLlxcXFxcXFxcICoqQioqOiBzYW1wbGUgaXMgY3VycmVudGx5IEJST0tFTi4gfHx8fHx8fHx8fHx8fCIKKyAgICBlY2hvICAgIiIKK2VsaWYgWyAteiAiJHtvcHR9IiBdOyB0aGVuCisgICAgZWNobyAnICAgICAgTCAoTG9jYWwpICAgICAgIDogc2FtcGxlIHdhcyBmb3VuZCBpbiBjdXJyZW50IGRpcmVjdG9yeScKKyAgICBlY2hvICcgICAgICBHIChHbG9iYWwpICAgICAgOiBzYW1wbGUgd2FzIGluc3RhbGxlZCB3aXRoIGNyb3NzdG9vbC1ORycKKyAgICBlY2hvICcgICAgICBYIChFWFBFUklNRU5UQUwpOiBzYW1wbGUgbWF5IHVzZSBFWFBFUklNRU5UQUwgZmVhdHVyZXMnCisgICAgZWNobyAnICAgICAgQiAoQlJPS0VOKSAgICAgIDogc2FtcGxlIGlzIGN1cnJlbnRseSBicm9rZW4nCitmaQpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL3Nob3dUdXBsZS5zaCBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9zaG93VHVwbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGU4ZTNiNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdC1uZy0xLjEzLjQvc2NyaXB0cy9zaG93VHVwbGUuc2gKQEAgLTAsMCArMSwzMCBAQAorIyEvYmluL2Jhc2gKKworIyBXaGF0IHdlIG5lZWQ6CisjICAtIHRoZSAuY29uZmlnIGZpbGUKKworIyBQYXJzZSB0aGUgdG9vbHMnIHBhdGhzIGNvbmZpZ3VyYXRpb24KKy4gIiR7Q1RfTElCX0RJUn0vcGF0aHMubWsiCisKKyMgV2UnbGwgbmVlZCB0aGUgc3Rkb3V0IGxhdGVyLCBzYXZlIGl0CitleGVjIDc+JjEKKworIyBQYXJzZSB0aGUgY29tbW9uIGZ1bmN0aW9ucworLiAiJHtDVF9MSUJfRElSfS9zY3JpcHRzL2Z1bmN0aW9ucyIKKworIyBEb24ndCBjYXJlIGFib3V0IGFueSBsb2cgZmlsZQorZXhlYyA+L2Rldi9udWxsCitybSAtZiAiJHt0bXBfbG9nX2ZpbGV9IgorCisjIFBhcnNlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKKy4gLmNvbmZpZy4yCisKKyMgUGFyc2UgYXJjaGl0ZWN0dXJlIGFuZCBrZXJuZWwgc3BlY2lmaWMgZnVuY3Rpb25zCisuICIke0NUX0xJQl9ESVJ9L3NjcmlwdHMvYnVpbGQvYXJjaC8ke0NUX0FSQ0h9LnNoIgorLiAiJHtDVF9MSUJfRElSfS9zY3JpcHRzL2J1aWxkL2tlcm5lbC8ke0NUX0tFUk5FTH0uc2giCisKKyMgQnVpbGQgQ1RfVEFSR0VUCitDVF9Eb0J1aWxkVGFyZ2V0VHVwbGUKKworIyBBbGwgdGhpcyBmb3IgdGhpcyBzaW5nbGUgZWNoby4uLiA6LSggU2lnaCwgSSdsbCBoYXZlIHRvIHJlLWFycmFuZ2UgdGhpbmdzLi4uCitlY2hvICIke0NUX1RBUkdFVH0iID4mNwpkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL3Rvb2xjaGFpbi1jb25maWcuaW4gYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMvdG9vbGNoYWluLWNvbmZpZy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDU0OWJjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL3Rvb2xjaGFpbi1jb25maWcuaW4KQEAgLTAsMCArMSw0IEBACisjIS9iaW4vc2gKKwordGFpbCAtbis1ICIkezB9IiB8YnpjYXQKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL3hsZGQuaW4gYi9saWIvY3QtbmctMS4xMy40L3NjcmlwdHMveGxkZC5pbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iODE5N2NjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N0LW5nLTEuMTMuNC9zY3JpcHRzL3hsZGQuaW4KQEAgLTAsMCArMSwzNTIgQEAKKyMhQEBDVF9iYXNoQEAKKworIyBOT04tQ09ORklHVVJBQkxFIFNUVUZGIQorZXhwb3J0IExDX0FMTD1DCit2ZXJzaW9uPSJAQENUX1ZFUlNJT05AQCIKK2JpdHM9IkBAQ1RfQklUU0BAIgorc2VkPSJAQENUX3NlZEBAIgorZ3JlcD0iQEBDVF9ncmVwQEAiCisKK215X25hbWU9IiQoIGJhc2VuYW1lICIkezB9IiApIgorcHJlZml4PSIkezAlLWxkZH0iCitnY2M9IiR7cHJlZml4fS1nY2MiCityZWFkZWxmPSIke3ByZWZpeH0tcmVhZGVsZiIKK2Zha2VfbG9hZF9hZGRyX3Jvb3Q9IiQoKDB4ZGVhZGJlZWYpKSIKK2Zha2VfbG9hZF9hZGRyX3JwYXRoPSIkKCgweGRlYWRjMGRlKSkiCitmYWtlX2xvYWRfYWRkcl9zeXNyb290PSIkKCgweDhiYWRmMDBkKSkiCitsZF9saWJyYXJ5X3BhdGg9Ii9saWI6L3Vzci9saWIiCisKK2RvX2Vycm9yKCkgeworICAgIHByaW50ZiAiJXM6ICVzXG4iICIke215X25hbWV9IiAiJCoiID4mMgorfQorCitkb19vcHRfZXJyb3IoKSB7CisgICAgZG9fZXJyb3IgIiRAIgorICAgIHByaW50ZiAiVHJ5IFxgJXMgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvblxuIiAiJHtteV9uYW1lfSIgPiYyCit9CisKK2RvX3RyYWNlKCkgeworICAgIGxvY2FsIGRlcHRoPTAKKworICAgIFsgLXogIiR7Q1RfWExERF9WRVJCT1NFfSIgXSAmJiByZXR1cm4gMAorCisgICAgZm9yKChkZXB0aD0wOyAiJHsjRlVOQ05BTUVbJCgoZGVwdGgrMSkpXX0iICE9IDA7IGRlcHRoKyspKTsgZG8gOjsgZG9uZQorICAgIHByaW50ZiAiJSpzIiAkKCg0KihkZXB0aC0xKSkpICIiID4mMgorICAgIHByaW50ZiAtLSAiJEAiID4mMgorfQorCitzaG93X3ZlcnNpb24oKSB7CisgICAgIyBGYWtlIGEgcmVhbCBsZGQsIGp1c3QgaW4gY2FzZSBzb21lIGR1bWIgc2NyaXB0IHdvdWxkIGNoZWNrCisgICAgY2F0IDw8X0VPRl8KK2xkZCAoY3Jvc3N0b29sLU5HKSAke3ZlcnNpb259CitDb3B5cmlnaHQgKEMpIDIwMTAgIllhbm4gRS4gTU9SSU4iIDx5YW5uLm1vcmluLjE5OThAYW5jaWVucy5lbmliLmZyPgorVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KK3dhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorTGljZW5zZWQgdW5kZXIgdGhlIEdQTHYyLCBzZWUgdGhlIGZpbGUgTElDRU5TRVMgaW4gdGhlIHRvcC1kaXJlY3Rvcnkgb2YgdGhlCitzb3VyY2VzIGZvciB0aGlzIHBhY2thZ2UuCitfRU9GXworfQorCitzaG93X2hlbHAoKSB7CisgICAgY2F0IDw8X0VPRl8KK1VzYWdlOiAke215X25hbWV9IFtPUFRJT05dLi4uIC0tcm9vdCBESVIgRklMRS4uLgorICAgICAgLS1oZWxwICAgICAgICAgICAgICBwcmludCB0aGlzIGhlbHAgYW5kIGV4aXQKKyAgICAgIC0tdmVyc2lvbiAgICAgICAgICAgcHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorICAgICAgLS1yb290IGRpciAgICAgICAgICB0cmVhdCBkaXIgYXMgYmVpbmcgdGhlIHJvb3Qgb2YgdGhlIHRhcmdldAorICAtcywgLS1zaG93LXN5c3RlbSAgICAgICBtYXJrIGxpYnMgZnJvbSB0aGUgc3lzcm9vdCB3aXRoIGEgdHJhaWxpbmcgJ1sqXScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGxpYnMgZm91bmQgdmlhIFJQQVRIIHdpdGggYSB0cmFpbGluZyAnWytdJworCitfRU9GXworICAgIGNhdCA8PF9FT0ZfIHxmbXQKKyR7bXlfbmFtZX0gdHJpZXMgdG8gbWltaWNrIHRoZSBiZWhhdmlvciBvZiBhIHJlYWwgbmF0aXZlIGxkZCwgYnV0IGNhbiBiZQordXNlZCBpbiBhIGNyb3NzLWRldmVsb3BtZW50IGVudmlyb25tZW50LiBIZXJlIGlzIGhvdyBpdCBkaWZmZXJzIGZyb20gYQorcmVhbCBuYXRpdmUgbGRkOgorCitJZiB0aGUgQ1RfWExERF9WRVJCT1NFIHZhcmlhYmxlIGlzIHNldCBhbmQgbm9uLWVtcHR5LCB0aGVuICR7bXlfbmFtZX0gd2lsbAorcHJpbnQgYSBsb3Qgb2YgZGVidWcgbWVzc2FnZXMsIGV4cGxhaW5pbmcgaG93IGl0IGJ1aWxkcyB0aGUgbGlicmFyeQorc2VhcmNoIHBhdGgsIGFuZCBob3cgZWFjaCBsaWJyYXJ5IHdhcyBmb3VuZCBhbmQgd2h5LgorCitUaGUgTERfTElCUkFSWV9QQVRIIHZhcmlhYmxlIGlzIG5vdCB1c2VkLCBhcyBpdCBjYW4gbm90IHJlbGlhYmx5IGJlCitndWVzc2VkIGV4Y2VwdCBhdCBydW50aW1lLCBhbmQgd2UgY2FuJ3QgcnVuLgorCiske215X25hbWV9IGRvZXMgbm90IHNjYW4gL2V0Yy9sZC5zby5jYWNoZSwgYnV0IGluc3RlYWQgdXNlcyAvZXRjL2xkLnNvLmNvbmYKKyhpdCB1bmRlcnN0YW5kcyB0aGUgaW5jbHVkZSBkaXJlY3RpdmVzIHRoZXJlaW4gZm9yIGxpYmNlcyB0aGF0IGhhdmUgdGhhdCkuCisKKyR7bXlfbmFtZX0gYWxzbyBpbnRlcnByZXRzICh0cmllcyB0byEpIHRoZSBSUEFUSC9SVU5QQVRIIHJlY29yZHMgZm91bmQgaW4KK3RoZSBkeW5hbWljIEVMRiBzZWN0aW9uLiBTdWNoIHBhdGhzIGFyZSBzZWFyY2hlZCBmb3Igb25seSByZWxhdGl2ZSB0bwordGhlIHNwZWNpZmllZCByb290LCBub3QgZnJvbSB0aGUgc3lzcm9vdCAoc2VlIGJlbG93KS4gQWxzbywgdGhvc2UgcGF0aHMKK2FyZSBzZWFyY2hlZCBmb3Igbm90IG9ubHkgZm9yIHRoZSBmaWxlIHRoZXkgYXBwZWFyIGluLCBidXQgYWxzbyBmb3IgaXRzCitkZXBlbmRlbmNpZXMuCisKKyR7bXlfbmFtZX0gd2lsbCBzZWFyY2ggdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgd2l0aCAtLXJvb3QgZm9yIGxpYnJhcmllcwordG8gcmVzb2x2ZSB0aGUgTkVFREVEIHRhZ3MuIElmIC0tcm9vdCBpcyBub3Qgc2V0LCB0aGVuICR7bXlfbmFtZX0gd2lsbAordXNlIHRoZSB2YWx1ZSBpbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgXCR7Q1RfWExERF9ST09UfS4gSWYgbmVpdGhlcgoraXMgc2V0LCB0aGVuIHRoaXMgaXMgYW4gZXJyb3IuCisKK0lmIE5FRURFRCBsaWJyYXJpZXMgY2FuJ3QgYmUgZm91bmQgaW4gdGhlIHNwZWNpZmllZCByb290IGRpcmVjdG9yeSwgdGhlbgorJHtteV9uYW1lfSB3aWxsIGFsc28gbG9vayBpbiB0aGUgc3lzcm9vdCBvZiB0aGUgdG9vbGNoYWluIHRvIHNlZSBpZiBpdAorY2FuIGZpbmQgdGhlbS4KKworRm9yIE5FRURFRCBsaWJyYXJpZXMgdGhhdCB3ZXJlIGZvdW5kLCB0aGUgb3V0cHV0IHdpbGwgbG9vayBsaWtlOgorICAgICAgICBsaWJuZWVkZWQuc28gPT4gL3BhdGgvdG8vbGlibmVlZGVkLnNvICgweGxvYWRhZGRyKQorCithbmQgZm9yIHRob3NlIHRoYXQgd2VyZSBub3QgZm91bmQsIHRoZSBvdXRwdXQgd2lsbCBsb29rIGxpa2U6CisgICAgICAgIGxpYm5lZWRlZC5zbyBub3QgZm91bmQKKworVGhlIHBhdGhzIGFyZSByZWxhdGl2ZSB0byB0aGUgc3BlY2lmaWVkIHJvb3QgZGlyZWN0b3J5LCBvciB0byB0aGUgc3lzcm9vdAorKGVnLiAvbGliL2xpYm5lZWRlZC5zbywgL3Vzci9saWIvbGlibmVlZGVkLnNvLCBhbmQgc28gb24uLi4pLgorCitUaGUgZXhwZWN0ZWQgbG9hZCBhZGRyZXNzICdsb2FkYWRkcicgaXMgYSBmYWtlZCBhZGRyZXNzIHRvIG1hdGNoIHRoZSBvdXRwdXQKK29mIHRoZSByZWFsIGxkZCwgYnV0IGhhcyBubyBhY3R1YWwgbWVhbmluZyAoc2V0IHRvIHNvbWUgY29uc3RhbnRzIGZvciBub3csCisweDhiYWRmMDBkIGZvciBsaWJyYXJpZXMgZnJvbSB0aGUgc3lzcm9vdCwgMHhkZWFkYzBkZSBmb3IgdGhvc2UgZm91bmQgdmlhCit0aGUgUlBBVEgvUlVOUEFUSCByZWNvcmRzLCBhbmQgMHhkZWFkYmVlZiBmb3Igb3RoZXJzKS4KK19FT0ZfCisKKyMgVW5pbXBsZW1ldGVkIHlldDoKKyMgIC1kLCAtLWRhdGEtcmVsb2NzICAgICAgIHByb2Nlc3MgZGF0YSByZWxvY2F0aW9ucworIyAgLXIsIC0tZnVuY3Rpb24tcmVsb2NzICAgcHJvY2VzcyBkYXRhIGFuZCBmdW5jdGlvbiByZWxvY2F0aW9ucworIyAgLXUsIC0tdW51c2VkICAgICAgICAgICAgcHJpbnQgdW51c2VkIGRpcmVjdCBkZXBlbmRlbmNpZXMKKyMgIC12LCAtLXZlcmJvc2UgICAgICAgICAgIHByaW50IGFsbCBpbmZvcm1hdGlvbgorCisjIFNlZSBhbHNvIHRoaXMgdGhyZWFkOgorIyAgaHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2Nyb3NzZ2NjLzIwMDgtMDkvbXNnMDAwNTcuaHRtbAorfQorCisjIFBhcnNlIGNvbW1hbmQgbGluZSBvcHRpb25zCityb290PSIke0NUX1hMRERfUk9PVH0iCitzaG93X3N5c3RlbT0KK3doaWxlIHRydWU7IGRvCisgICAgY2FzZSAiJHsxfSIgaW4KKyAgICAgICAgLS1oZWxwKQorICAgICAgICAgICAgc2hvd19oZWxwCisgICAgICAgICAgICBleGl0IDAKKyAgICAgICAgICAgIDs7CisgICAgICAgIC0tdmVyc2lvbikKKyAgICAgICAgICAgIHNob3dfdmVyc2lvbgorICAgICAgICAgICAgZXhpdCAwCisgICAgICAgICAgICA7OworICAgICAgICAtLXJvb3QpCisgICAgICAgICAgICByb290PSIkMiIKKyAgICAgICAgICAgIHNoaWZ0CisgICAgICAgICAgICA7OworICAgICAgICAtLXJvb3Q9KikKKyAgICAgICAgICAgIHJvb3Q9IiR7MSMtLXJvb3Q9fSIKKyAgICAgICAgICAgIDs7CisgICAgICAgIC0tc2hvdy1zeXN0ZW18LXMpCisgICAgICAgICAgICBzaG93X3N5c3RlbT0xCisgICAgICAgICAgICA7OworICAgICAgICAtKikKKyAgICAgICAgICAgIGRvX29wdF9lcnJvciAidW5yZWNvZ25pemVkIG9wdGlvbiBcYCR7MX0nIgorICAgICAgICAgICAgZXhpdCAxCisgICAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworICAgIHNoaWZ0Citkb25lCisKKyMgU2FuaXR5IGNoZWNrcworaWYgWyAteiAiJHtyb290fSIgXTsgdGhlbgorICAgIGRvX29wdF9lcnJvciAibm8gcm9vdCBnaXZlbiIKKyAgICBleGl0IDEKK2ZpCitpZiBbICEgLWQgIiR7cm9vdH0iIF07IHRoZW4KKyAgICBkb19lcnJvciAiXGAke3Jvb3R9Jzogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKKyAgICBleGl0IDEKK2ZpCisKK3N5c3Jvb3Q9IiQoICIke2djY30iIC1wcmludC1zeXNyb290IDI+L2Rldi9udWxsICkiCitpZiBbIC16ICIke3N5c3Jvb3R9IiBdOyB0aGVuCisgICAgc3lzcm9vdD0iJCggIiR7Z2NjfSIgLXByaW50LWZpbGUtbmFtZT1saWJjLnNvIDI+L2Rldi9udWxsICAgXAorICAgICAgICAgICAgICAgIHxzZWQgLXIgLWUgJ3M6L3Vzci9saWIvbGliYy5zbyQ6OjsnICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgKSIKK2ZpCitpZiBbIC16ICIke3N5c3Jvb3R9IiBdOyB0aGVuCisgICAgZG9fZXJyb3IgInVuYWJsZSB0byBmaW5kIHN5c3Jvb3QgZm9yIFxgJHtnY2N9JyIKK2ZpCisKK2RvX3JlcG9ydF9uZWVkZWRfZm91bmQoKSB7CisgICAgbG9jYWwgbmVlZGVkPSIkezF9IgorICAgIGxvY2FsIHBhdGg9IiR7Mn0iCisgICAgbG9jYWwgb3JpZ2luPSIkezN9IgorICAgIGxvY2FsIGxvYWRhZGRyCisgICAgbG9jYWwgc3lzCisKKyAgICBjYXNlICIke29yaWdpbn0iIGluCisgICAgICAgIHJvb3QpCisgICAgICAgICAgICBsb2FkYWRkcj0iJHtmYWtlX2xvYWRfYWRkcl9yb290fSIKKyAgICAgICAgICAgIDs7CisgICAgICAgIHJwYXRoKQorICAgICAgICAgICAgbG9hZGFkZHI9IiR7ZmFrZV9sb2FkX2FkZHJfcnBhdGh9IgorICAgICAgICAgICAgaWYgWyAtbiAiJHtzaG93X3N5c3RlbX0iIF07IHRoZW4KKyAgICAgICAgICAgICAgICBzeXM9IiBbK10iCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICAgICAgc3lzcm9vdCkKKyAgICAgICAgICAgIGxvYWRhZGRyPSIke2Zha2VfbG9hZF9hZGRyX3N5c3Jvb3R9IgorICAgICAgICAgICAgaWYgWyAtbiAiJHtzaG93X3N5c3RlbX0iIF07IHRoZW4KKyAgICAgICAgICAgICAgICBzeXM9IiBbKl0iCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBwcmludGYgIiU4cyVzID0+ICVzICgweCUwKngpJXNcbiIgICBcCisgICAgICAgICAgICIiICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAiJHtuZWVkZWR9IiAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIiR7cGF0aH0iICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICIkKChiaXRzLzQpKSIgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAiJHtsb2FkYWRkcn0iICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIiR7c3lzfSIKK30KKworIyBTZWFyY2ggYSBuZWVkZWQgZmlsZSwgc2Nhbm5pbmcgJHtsaWJfZGlyfSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkKK2RvX2ZpbmRfbmVlZGVkKCkgeworICAgIGxvY2FsIG5lZWRlZD0iJHsxfSIKKyAgICBsb2NhbCAtYSBsaXN0CisgICAgbG9jYWwgLWEgZGlycworICAgIGxvY2FsIGZvdW5kCisgICAgbG9jYWwgd2hlcmUKKyAgICBsb2NhbCBiYXNlCisgICAgbG9jYWwgZCBpCisKKyAgICBkb190cmFjZSAiU2VhcmNoaW5nIGZvciAnJXMnXG4iICIke25lZWRlZH0iCisKKyAgICAjIHJwYXRoIHNoYWxsIGNvbWUgZmlyc3QhCisgICAgbGlzdD0oICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgInJwYXRoOiR7cm9vdH0iICAgICAgICAgXAorICAgICAgICAicm9vdDoke3Jvb3R9IiAgICAgICAgICBcCisgICAgICAgICJzeXNyb290OiR7c3lzcm9vdH0iICAgIFwKKyAgICApCisKKyAgICBmb3IgaSBpbiAiJHtsaXN0W0BdfSI7IGRvCisgICAgICAgIHdoZXJlPSIke2klJToqfSIKKyAgICAgICAgYmFzZT0iJHtpIyo6fSIKKyAgICAgICAgaWYgWyAiJHt3aGVyZX0iID0gInJwYXRoIiBdOyB0aGVuCisgICAgICAgICAgICBkaXJzPSggIiR7c2VhcmNoX3JwYXRoW0BdfSIgKQorICAgICAgICBlbHNlCisgICAgICAgICAgICBkaXJzPSggIiR7bmVlZGVkX3NlYXJjaF9wYXRoW0BdfSIgKQorICAgICAgICBmaQorICAgICAgICBmb3IgZCBpbiAiJHtkaXJzW0BdfSI7IGRvCisgICAgICAgICAgICBkb190cmFjZSAiLT4gbG9va2luZyBpbiAnJXMnICglcylcbiIgIiR7ZH0iICIke3doZXJlfSIKKyAgICAgICAgICAgIGlmIFsgLWYgIiR7YmFzZX0ke2R9LyR7bmVlZGVkfSIgXTsgdGhlbgorICAgICAgICAgICAgICAgIGZvdW5kPSIke2R9LyR7bmVlZGVkfSIKKyAgICAgICAgICAgICAgICBkb190cmFjZSAiLS0tPiBmb3VuZFxuIgorICAgICAgICAgICAgICAgIGJyZWFrIDIKKyAgICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICBkb25lCisKKyAgICBpZiBbIC1uICIke2ZvdW5kfSIgXTsgdGhlbgorICAgICAgICBkb19yZXBvcnRfbmVlZGVkX2ZvdW5kICIke25lZWRlZH0iICIke2ZvdW5kfSIgIiR7d2hlcmV9IgorICAgICAgICBkb19wcm9jZXNzX2ZpbGUgIiR7YmFzZX0ke2ZvdW5kfSIKKyAgICBlbHNlCisgICAgICAgIHByaW50ZiAiJThzJXMgbm90IGZvdW5kXG4iICIiICIke25lZWRlZH0iCisgICAgZmkKKworICAgIGRvX3RyYWNlICJEb25lIHNlYXJjaGluZyBmb3IgJyVzJ1xuIiAiJHtuZWVkZWR9IgorfQorCisjIFNjYW4gYSBmaWxlIGZvciBhbGwgTkVFREVEIHRhZ3MKK2RvX3Byb2Nlc3NfZmlsZSgpIHsKKyAgICBsb2NhbCBmaWxlPSIkezF9IgorICAgIGxvY2FsIC1hIHNhdmVfc2VhcmNoX3JwYXRoCisgICAgbG9jYWwgbiBtCisgICAgbG9jYWwgZm91bmQKKworICAgIGRvX3RyYWNlICJQYXJzaW5nIGZpbGUgJyVzJ1xuIiAiJHtmaWxlfSIKKworICAgIHNhdmVfc2VhcmNoX3JwYXRoPSggIiR7c2VhcmNoX3JwYXRoW0BdfSIgKQorICAgIGZvciBuIGluICQoICIke3JlYWRlbGZ9IiAtZCAiJHtmaWxlfSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHwiJHtncmVwfSIgLUUgJ1woKFJQQVRIfFJVTlBBVEgpXCknICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHwiJHtzZWR9IiAtciAtZSAncy9eLipMaWJyYXJ5IHIofHVuKXBhdGg6W1s6c3BhY2U6XV0rXFsoLiopXF0kL1wyLzsnXAorICAgICAgICAgICAgICApOyBkbworICAgICAgICBkb190cmFjZSAiLT4gYWRkaW5nIHJwYXRoICclcydcbiIgIiR7bn0iCisgICAgICAgIHNlYXJjaF9ycGF0aCs9KCAiJHtufSIgKQorICAgIGRvbmUKKyAgICBkb190cmFjZSAiOiBzZWFyY2ggcGF0aDpcbiIKKyAgICBmb3IgbiBpbiAiJHtzZWFyY2hfcnBhdGhbQF19IiAiJHtuZWVkZWRfc2VhcmNoX3BhdGhbQF19IjsgZG8KKyAgICAgICAgZG9fdHJhY2UgIjogLSAnJXMnXG4iICIke259IgorICAgIGRvbmUKKyAgICBkb190cmFjZSAiOiBlbmQgc2VhcmNoIHBhdGgiCisKKyAgICBmb3IgbiBpbiAkKCAiJHtyZWFkZWxmfSIgLWQgIiR7ZmlsZX0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB8IiR7Z3JlcH0iIC1FICdcKE5FRURFRFwpJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB8IiR7c2VkfSIgLXIgLWUgJ3MvXi4qU2hhcmVkIGxpYnJhcnk6W1s6c3BhY2U6XV0rXFsoLiopXF0kL1wxLzsnICAgIFwKKyAgICAgICAgICAgICAgKTsgZG8KKyAgICAgICAgZm91bmQ9MAorICAgICAgICBmb3IgbSBpbiAiJHtuZWVkZWRfbGlzdFtAXX0iOyBkbworICAgICAgICAgICAgWyAiJHtufSIgPSAiJHttfSIgXSAmJiBmb3VuZD0xICYmIGJyZWFrCisgICAgICAgIGRvbmUKKyAgICAgICAgaWYgWyAke2ZvdW5kfSAtbmUgMCBdOyB0aGVuCisgICAgICAgICAgICBkb190cmFjZSAiLT4gc2tpcHBpbmcgYWxyZWFkeSBrbm93biBkZXBlbmRlbmN5ICclcydcbiIgIiR7bn0iCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmaQorICAgICAgICBkb190cmFjZSAiLT4gaGFuZGxpbmcgbmV3IGRlcGVuZGVuY3kgJyVzJ1xuIiAiJHtufSIKKyAgICAgICAgbmVlZGVkX2xpc3QrPSggIiR7bn0iICkKKyAgICAgICAgZG9fZmluZF9uZWVkZWQgIiR7bn0iCisgICAgICAgIGRvX3RyYWNlICItPiBkb25lIGhhbmRsaW5nIGRlcGVuZGVuY3kgJyVzJ1xuIiAiJHtufSIKKyAgICBkb25lCisKKyAgICBzZWFyY2hfcnBhdGg9KCAiJHtzYXZlX3NlYXJjaF9ycGF0aFtAXX0iICkKKworICAgIGRvX3RyYWNlICJGaW5pc2hlZCBwYXJzaW5nIGZpbGUgJyVzJ1xuIiAiJHtmaWxlfSIKK30KKworIyBSZWN1cnNpdmVseSBzY2FuIGEgL2V0Yy9sZC5zby5jb25mIGZpbGUKK2RvX3NjYW5fZXRjX2xkc29jb25mKCkgeworICAgIGxvY2FsIGxkc29jb25mPSIkezF9IgorICAgIGxvY2FsIGcKKyAgICBsb2NhbCBmCisKKyAgICBbIC1mICIke2xkc29jb25mfSIgXSB8fCByZXR1cm4gMAorICAgIGRvX3RyYWNlICJQYXJzaW5nIGxkLnNvLmNvbmY6ICclcydcbiIgIiR7bGRzb2NvbmZ9IgorCisgICAgd2hpbGUgcmVhZCBsaW5lOyBkbworICAgICAgICBjYXNlICIke2xpbmV9IiBpbgorICAgICAgICAgICAgaW5jbHVkZVwgKikKKyAgICAgICAgICAgICAgICBnPSIke3Jvb3R9JHtsaW5lI2luY2x1ZGUgfSIKKyAgICAgICAgICAgICAgICBkb190cmFjZSAiLT4gaGFuZGxpbmcgaW5jbHVkZSBkaXJlY3RpdmUgJyVzJ1xuIiAiJHtnfSIKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiAke2d9OyBkbworICAgICAgICAgICAgICAgICAgICBkb19zY2FuX2V0Y19sZHNvY29uZiAiJHtmfSIKKyAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgZG9fdHJhY2UgIi0+IGZpbmlzaGVkIGhhbmRsaW5nIGluY2x1ZGUgZGlyZWN0aXZlICclcydcbiIgIiR7Z30iCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIFwjKnwiIikKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICBkb190cmFjZSAiLT4gYWRkaW5nIHNlYXJjaCBkaXIgJyVzJ1xuIiAiJHtsaW5lfSIKKyAgICAgICAgICAgICAgICBuZWVkZWRfc2VhcmNoX3BhdGgrPSggIiR7bGluZX0iICkKKyAgICAgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgZG9uZSA8IiR7bGRzb2NvbmZ9IgorCisgICAgZG9fdHJhY2UgIkZpbmlzaGVkIHBhcnNpbmcgbGQuc28uY29uZjogJyVzJ1xuIiAiJHtsZHNvY29uZn0iCit9CisKKyMgQnVpbGQgdXAgdGhlIGZ1bGwgbGlzdCBvZiBzZWFyY2ggZGlyZWN0b3JpZXMKK2RlY2xhcmUgLWEgbmVlZGVkX3NlYXJjaF9wYXRoCitkb190cmFjZSAiQWRkaW5nIGJhc2ljIGxpYiBkaXJzXG4iCitsZF9saWJyYXJ5X3BhdGg9IiR7bGRfbGlicmFyeV9wYXRofToiCit3aGlsZSBbIC1uICIke2xkX2xpYnJhcnlfcGF0aH0iIF07IGRvCisgICAgZD0iJHtsZF9saWJyYXJ5X3BhdGglJToqfSIKKyAgICBpZiBbIC1uICIke2R9IiBdOyB0aGVuCisgICAgICAgIGRvX3RyYWNlICItPiBhZGRpbmcgc2VhcmNoIGRpciAnJXMnXG4iICIke2R9IgorICAgICAgICBuZWVkZWRfc2VhcmNoX3BhdGgrPSggIiR7ZH0iICkKKyAgICBmaQorICAgIGxkX2xpYnJhcnlfcGF0aD0iJHtsZF9saWJyYXJ5X3BhdGgjKjp9IgorZG9uZQorZG9fdHJhY2UgIkRvbmUgYWRkaW5nIGJhc2ljIGxpYiBkaXJzXG4iCitkb190cmFjZSAiU2Nhbm5pbmcgJy9ldGMvbGQuc28uY29uZidcbiIKK2RvX3NjYW5fZXRjX2xkc29jb25mICIke3Jvb3R9L2V0Yy9sZC5zby5jb25mIgorZG9fdHJhY2UgIkRvbmUgc2Nhbm5pbmcgJy9ldGMvbGQuc28uY29uZidcbiIKK2RvX3RyYWNlICJTZWFyY2ggcGF0aDpcbiIKK2ZvciBwIGluICIke25lZWRlZF9zZWFyY2hfcGF0aFtAXX0iOyBkbworICAgIGRvX3RyYWNlICItPiAnJXMnXG4iICIke3B9IgorZG9uZQorCitkZWNsYXJlIC1hIG5lZWRlZF9saXN0CitkZWNsYXJlIC1hIHNlYXJjaF9ycGF0aAorZG9fdHJhY2UgIlNjYW5uaW5nIGZpbGUgJyVzJ1xuIiAiJHsxfSIKK2RvX3Byb2Nlc3NfZmlsZSAiJHsxfSIKK2RvX3RyYWNlICJEb25lIHNjYW5uaW5nIGZpbGUgJyVzJ1xuIiAiJHsxfSIKZGlmZiAtLWdpdCBhL2xpYi9jdC1uZy0xLjEzLjQvc3RlcHMubWsgYi9saWIvY3QtbmctMS4xMy40L3N0ZXBzLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMzNkZDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3QtbmctMS4xMy40L3N0ZXBzLm1rCkBAIC0wLDAgKzEsNjYgQEAKKyMgTWFrZWZpbGUgZm9yIGVhY2ggc3RlcHMKKyMgQ29weXJpZ2h0IDIwMDYgWWFubiBFLiBNT1JJTiA8eWFubi5tb3Jpbi4xOTk4QGFuY2llbnMuZW5pYi5mcj4KKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgaXMgdGhlIHN0ZXBzIGhlbHAgZW50cnkKKworaGVscC1idWlsZDo6CisJQGVjaG8gICcgIGxpc3Qtc3RlcHMgICAgICAgICAtIExpc3QgYWxsIGJ1aWxkIHN0ZXBzJworCitoZWxwLWVudjo6CisJQGVjaG8gICcgIFNUT1A9c3RlcCAgICAgICAgICAtIFN0b3AgdGhlIGJ1aWxkIGp1c3QgYWZ0ZXIgdGhpcyBzdGVwIChsaXN0IHdpdGggbGlzdC1zdGVwcyknCisJQGVjaG8gICcgIFJFU1RBUlQ9c3RlcCAgICAgICAtIFJlc3RhcnQgdGhlIGJ1aWxkIGp1c3QgYmVmb3JlIHRoaXMgc3RlcCAobGlzdCB3aXRoIGxpc3Qtc3RlcHMpJworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhlIHN0ZXBzIGxpc3QKKworIyBQbGVhc2Uga2VlcCB0aGUgbGFzdCBsaW5lIHdpdGggYSAnXCcgYW5kIGtlZXAgdGhlIGZvbGxvd2luZyBlbXB5IGxpbmU6CisjIGl0IGhlbHBzIHdoZW4gZGlmZmluZyBhbmQgbWVyZ2luZy4KK0NUX1NURVBTIDo9IGxpYmNfY2hlY2tfY29uZmlnICAgXAorICAgICAgICAgICAgZ21wICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBtcGZyICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHBwbCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgY2xvb2cgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBtcGMgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGxpYmVsZiAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYmludXRpbHMgICAgICAgICAgICBcCisgICAgICAgICAgICBlbGYyZmx0ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHNzdHJpcCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgY2NfY29yZV9wYXNzXzEgICAgICBcCisgICAgICAgICAgICBrZXJuZWxfaGVhZGVycyAgICAgIFwKKyAgICAgICAgICAgIGxpYmNfc3RhcnRfZmlsZXMgICAgXAorICAgICAgICAgICAgY2NfY29yZV9wYXNzXzIgICAgICBcCisgICAgICAgICAgICBsaWJjICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNjICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgbGliY19maW5pc2ggICAgICAgICBcCisgICAgICAgICAgICBsaWJlbGZfdGFyZ2V0ICAgICAgIFwKKyAgICAgICAgICAgIGJpbnV0aWxzX3RhcmdldCAgICAgXAorICAgICAgICAgICAgZGVidWcgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0ZXN0X3N1aXRlICAgICAgICAgIFwKKyAgICAgICAgICAgIGZpbmlzaCAgICAgICAgICAgICAgXAorCisjIE1ha2UgdGhlIGxpc3QgYXZhaWxhYmxlIHRvIHN1Yi1wcm9jZXNzZXMgKHNjcmlwdHMvY3Jvc3N0b29sLU5HLnNoIG5lZWRzIGl0KQorZXhwb3J0IENUX1NURVBTCisKKyMgUHJpbnQgdGhlIHN0ZXBzIGxpc3QKK1BIT05ZICs9IGxpc3Qtc3RlcHMKK2xpc3Qtc3RlcHM6CisJQGVjaG8gICdBdmFpbGFibGUgYnVpbGQgc3RlcHMsIGluIG9yZGVyOicKKwlAZm9yIHN0ZXAgaW4gJChDVF9TVEVQUyk7IGRvICAgIFwKKwkgICAgIGVjaG8gIiAgLSAkJHtzdGVwfSI7ICAgICAgIFwKKwkgZG9uZQorCUBlY2hvICAnVXNlICI8c3RlcD4iIGFzIGFjdGlvbiB0byBleGVjdXRlIG9ubHkgdGhhdCBzdGVwLicKKwlAZWNobyAgJ1VzZSAiKzxzdGVwPiIgYXMgYWN0aW9uIHRvIGV4ZWN1dGUgdXAgdG8gdGhhdCBzdGVwLicKKwlAZWNobyAgJ1VzZSAiPHN0ZXA+KyIgYXMgYWN0aW9uIHRvIGV4ZWN1dGUgZnJvbSB0aGF0IHN0ZXAgb253YXJkLicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgcGFydCBkZWFscyB3aXRoIGV4ZWN1dGluZyBzdGVwcworCiskKENUX1NURVBTKToKKwkkKFNJTEVOVCkkKE1BS0UpIC1yZiAkKENUX05HKSBWPSQoVikgUkVTVEFSVD0kQCBTVE9QPSRAIGJ1aWxkCisKKyQocGF0c3Vic3QgJSwrJSwkKENUX1NURVBTKSk6CisJJChTSUxFTlQpJChNQUtFKSAtcmYgJChDVF9ORykgVj0kKFYpIFNUT1A9JChwYXRzdWJzdCArJSwlLCRAKSBidWlsZAorCiskKHBhdHN1YnN0ICUsJSssJChDVF9TVEVQUykpOgorCSQoU0lMRU5UKSQoTUFLRSkgLXJmICQoQ1RfTkcpIFY9JChWKSBSRVNUQVJUPSQocGF0c3Vic3QgJSssJSwkQCkgYnVpbGQKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9jcnRiZWdpbi5vIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2NydGJlZ2luLm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU3ZjAzYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9jcnRiZWdpbi5vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9jcnRiZWdpblMubyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9jcnRiZWdpblMubwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWQzOTU4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2NydGJlZ2luUy5vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9jcnRiZWdpblQubyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9jcnRiZWdpblQubwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzU2MTg2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2NydGJlZ2luVC5vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9jcnRlbmQubyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9jcnRlbmQubwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWMzNDNjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2NydGVuZC5vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9jcnRlbmRTLm8gYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvY3J0ZW5kUy5vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYzM0M2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvY3J0ZW5kUy5vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9pbmNsdWRlLWZpeGVkL1JFQURNRSBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9pbmNsdWRlLWZpeGVkL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDg2YTc3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luY2x1ZGUtZml4ZWQvUkVBRE1FCkBAIC0wLDAgKzEsMTQgQEAKK1RoaXMgUkVBRE1FIGZpbGUgaXMgY29waWVkIGludG8gdGhlIGRpcmVjdG9yeSBmb3IgR0NDLW9ubHkgaGVhZGVyIGZpbGVzCit3aGVuIGZpeGluY2x1ZGVzIGlzIHJ1biBieSB0aGUgbWFrZWZpbGUgZm9yIEdDQy4KKworTWFueSBvZiB0aGUgZmlsZXMgaW4gdGhpcyBkaXJlY3Rvcnkgd2VyZSBhdXRvbWF0aWNhbGx5IGVkaXRlZCBmcm9tIHRoZQorc3RhbmRhcmQgc3lzdGVtIGhlYWRlciBmaWxlcyBieSB0aGUgZml4aW5jbHVkZXMgcHJvY2Vzcy4gIFRoZXkgYXJlCitzeXN0ZW0tc3BlY2lmaWMsIGFuZCB3aWxsIG5vdCB3b3JrIG9uIGFueSBvdGhlciBraW5kIG9mIHN5c3RlbS4gIFRoZXkKK2FyZSBhbHNvIG5vdCBwYXJ0IG9mIEdDQy4gIFRoZSByZWFzb24gd2UgaGF2ZSB0byBkbyB0aGlzIGlzIGJlY2F1c2UKK0dDQyByZXF1aXJlcyBBTlNJIEMgaGVhZGVycyBhbmQgbWFueSB2ZW5kb3JzIHN1cHBseSBBTlNJLWluY29tcGF0aWJsZQoraGVhZGVycy4KKworQmVjYXVzZSB0aGlzIGlzIGFuIGF1dG9tYXRlZCBwcm9jZXNzLCBzb21ldGltZXMgaGVhZGVycyBnZXQgImZpeGVkIgordGhhdCBkbyBub3QsIHN0cmljdGx5IHNwZWFraW5nLCBuZWVkIGEgZml4LiAgQXMgbG9uZyBhcyBub3RoaW5nIGlzIGJyb2tlbgorYnkgdGhlIHByb2Nlc3MsIGl0IGlzIGp1c3QgYW4gdW5mb3J0dW5hdGUgY29sbGF0ZXJhbCBpbmNvbnZlbmllbmNlLgorV2Ugd291bGQgbGlrZSB0byByZWN0aWZ5IGl0LCBpZiBpdCBpcyBub3QgInRvbyBpbmNvbnZlbmllbnQiLgpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luY2x1ZGUtZml4ZWQvbGltaXRzLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5jbHVkZS1maXhlZC9saW1pdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWMzNWU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luY2x1ZGUtZml4ZWQvbGltaXRzLmgKQEAgLTAsMCArMSwxNzIgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5MiwgMTk5NCwgMTk5NywgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKK3Blcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKzMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKK3NlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogVGhpcyBhZG1pbmlzdHJpdmlhIGdldHMgYWRkZWQgdG8gdGhlIGJlZ2lubmluZyBvZiBsaW1pdHMuaAorICAgaWYgdGhlIHN5c3RlbSBoYXMgaXRzIG93biB2ZXJzaW9uIG9mIGxpbWl0cy5oLiAgKi8KKworLyogV2UgdXNlIF9HQ0NfTElNSVRTX0hfIGJlY2F1c2Ugd2Ugd2FudCB0aGlzIG5vdCB0byBtYXRjaAorICAgYW55IG1hY3JvcyB0aGF0IHRoZSBzeXN0ZW0ncyBsaW1pdHMuaCB1c2VzIGZvciBpdHMgb3duIHB1cnBvc2VzLiAgKi8KKyNpZm5kZWYgX0dDQ19MSU1JVFNfSF8gIC8qIFRlcm1pbmF0ZWQgaW4gbGltaXR5LmguICAqLworI2RlZmluZSBfR0NDX0xJTUlUU19IXworCisjaWZuZGVmIF9MSUJDX0xJTUlUU19IXworLyogVXNlICIuLi4iIHNvIHRoYXQgd2UgZmluZCBzeXNsaW1pdHMuaCBvbmx5IGluIHRoaXMgc2FtZSBkaXJlY3RvcnkuICAqLworI2luY2x1ZGUgInN5c2xpbWl0cy5oIgorI2VuZGlmCisvKiBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisgICAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1VuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCithIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9MSU1JVFNfSF9fXworI2RlZmluZSBfTElNSVRTX0hfX18KKworLyogTnVtYmVyIG9mIGJpdHMgaW4gYSBgY2hhcicuICAqLworI3VuZGVmIENIQVJfQklUCisjZGVmaW5lIENIQVJfQklUIF9fQ0hBUl9CSVRfXworCisvKiBNYXhpbXVtIGxlbmd0aCBvZiBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIuICAqLworI2lmbmRlZiBNQl9MRU5fTUFYCisjZGVmaW5lIE1CX0xFTl9NQVggMQorI2VuZGlmCisKKy8qIE1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGEgYHNpZ25lZCBjaGFyJyBjYW4gaG9sZC4gICovCisjdW5kZWYgU0NIQVJfTUlOCisjZGVmaW5lIFNDSEFSX01JTiAoLVNDSEFSX01BWCAtIDEpCisjdW5kZWYgU0NIQVJfTUFYCisjZGVmaW5lIFNDSEFSX01BWCBfX1NDSEFSX01BWF9fCisKKy8qIE1heGltdW0gdmFsdWUgYW4gYHVuc2lnbmVkIGNoYXInIGNhbiBob2xkLiAgKE1pbmltdW0gaXMgMCkuICAqLworI3VuZGVmIFVDSEFSX01BWAorI2lmIF9fU0NIQVJfTUFYX18gPT0gX19JTlRfTUFYX18KKyMgZGVmaW5lIFVDSEFSX01BWCAoU0NIQVJfTUFYICogMlUgKyAxVSkKKyNlbHNlCisjIGRlZmluZSBVQ0hBUl9NQVggKFNDSEFSX01BWCAqIDIgKyAxKQorI2VuZGlmCisKKy8qIE1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGEgYGNoYXInIGNhbiBob2xkLiAgKi8KKyNpZmRlZiBfX0NIQVJfVU5TSUdORURfXworIyB1bmRlZiBDSEFSX01JTgorIyBpZiBfX1NDSEFSX01BWF9fID09IF9fSU5UX01BWF9fCisjICBkZWZpbmUgQ0hBUl9NSU4gMFUKKyMgZWxzZQorIyAgZGVmaW5lIENIQVJfTUlOIDAKKyMgZW5kaWYKKyMgdW5kZWYgQ0hBUl9NQVgKKyMgZGVmaW5lIENIQVJfTUFYIFVDSEFSX01BWAorI2Vsc2UKKyMgdW5kZWYgQ0hBUl9NSU4KKyMgZGVmaW5lIENIQVJfTUlOIFNDSEFSX01JTgorIyB1bmRlZiBDSEFSX01BWAorIyBkZWZpbmUgQ0hBUl9NQVggU0NIQVJfTUFYCisjZW5kaWYKKworLyogTWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMgYSBgc2lnbmVkIHNob3J0IGludCcgY2FuIGhvbGQuICAqLworI3VuZGVmIFNIUlRfTUlOCisjZGVmaW5lIFNIUlRfTUlOICgtU0hSVF9NQVggLSAxKQorI3VuZGVmIFNIUlRfTUFYCisjZGVmaW5lIFNIUlRfTUFYIF9fU0hSVF9NQVhfXworCisvKiBNYXhpbXVtIHZhbHVlIGFuIGB1bnNpZ25lZCBzaG9ydCBpbnQnIGNhbiBob2xkLiAgKE1pbmltdW0gaXMgMCkuICAqLworI3VuZGVmIFVTSFJUX01BWAorI2lmIF9fU0hSVF9NQVhfXyA9PSBfX0lOVF9NQVhfXworIyBkZWZpbmUgVVNIUlRfTUFYIChTSFJUX01BWCAqIDJVICsgMVUpCisjZWxzZQorIyBkZWZpbmUgVVNIUlRfTUFYIChTSFJUX01BWCAqIDIgKyAxKQorI2VuZGlmCisKKy8qIE1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGEgYHNpZ25lZCBpbnQnIGNhbiBob2xkLiAgKi8KKyN1bmRlZiBJTlRfTUlOCisjZGVmaW5lIElOVF9NSU4gKC1JTlRfTUFYIC0gMSkKKyN1bmRlZiBJTlRfTUFYCisjZGVmaW5lIElOVF9NQVggX19JTlRfTUFYX18KKworLyogTWF4aW11bSB2YWx1ZSBhbiBgdW5zaWduZWQgaW50JyBjYW4gaG9sZC4gIChNaW5pbXVtIGlzIDApLiAgKi8KKyN1bmRlZiBVSU5UX01BWAorI2RlZmluZSBVSU5UX01BWCAoSU5UX01BWCAqIDJVICsgMVUpCisKKy8qIE1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGEgYHNpZ25lZCBsb25nIGludCcgY2FuIGhvbGQuCisgICAoU2FtZSBhcyBgaW50JykuICAqLworI3VuZGVmIExPTkdfTUlOCisjZGVmaW5lIExPTkdfTUlOICgtTE9OR19NQVggLSAxTCkKKyN1bmRlZiBMT05HX01BWAorI2RlZmluZSBMT05HX01BWCBfX0xPTkdfTUFYX18KKworLyogTWF4aW11bSB2YWx1ZSBhbiBgdW5zaWduZWQgbG9uZyBpbnQnIGNhbiBob2xkLiAgKE1pbmltdW0gaXMgMCkuICAqLworI3VuZGVmIFVMT05HX01BWAorI2RlZmluZSBVTE9OR19NQVggKExPTkdfTUFYICogMlVMICsgMVVMKQorCisjaWYgZGVmaW5lZCAoX19TVERDX1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCisvKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBhIGBzaWduZWQgbG9uZyBsb25nIGludCcgY2FuIGhvbGQuICAqLworIyB1bmRlZiBMTE9OR19NSU4KKyMgZGVmaW5lIExMT05HX01JTiAoLUxMT05HX01BWCAtIDFMTCkKKyMgdW5kZWYgTExPTkdfTUFYCisjIGRlZmluZSBMTE9OR19NQVggX19MT05HX0xPTkdfTUFYX18KKworLyogTWF4aW11bSB2YWx1ZSBhbiBgdW5zaWduZWQgbG9uZyBsb25nIGludCcgY2FuIGhvbGQuICAoTWluaW11bSBpcyAwKS4gICovCisjIHVuZGVmIFVMTE9OR19NQVgKKyMgZGVmaW5lIFVMTE9OR19NQVggKExMT05HX01BWCAqIDJVTEwgKyAxVUxMKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfX0dOVV9MSUJSQVJZX18pID8gZGVmaW5lZCAoX19VU0VfR05VKSA6ICFkZWZpbmVkIChfX1NUUklDVF9BTlNJX18pCisvKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBhIGBzaWduZWQgbG9uZyBsb25nIGludCcgY2FuIGhvbGQuICAqLworIyB1bmRlZiBMT05HX0xPTkdfTUlOCisjIGRlZmluZSBMT05HX0xPTkdfTUlOICgtTE9OR19MT05HX01BWCAtIDFMTCkKKyMgdW5kZWYgTE9OR19MT05HX01BWAorIyBkZWZpbmUgTE9OR19MT05HX01BWCBfX0xPTkdfTE9OR19NQVhfXworCisvKiBNYXhpbXVtIHZhbHVlIGFuIGB1bnNpZ25lZCBsb25nIGxvbmcgaW50JyBjYW4gaG9sZC4gIChNaW5pbXVtIGlzIDApLiAgKi8KKyMgdW5kZWYgVUxPTkdfTE9OR19NQVgKKyMgZGVmaW5lIFVMT05HX0xPTkdfTUFYIChMT05HX0xPTkdfTUFYICogMlVMTCArIDFVTEwpCisjZW5kaWYKKworI2VuZGlmIC8qIF9MSU1JVFNfSF9fXyAqLworLyogVGhpcyBhZG1pbmlzdHJpdmlhIGdldHMgYWRkZWQgdG8gdGhlIGVuZCBvZiBsaW1pdHMuaAorICAgaWYgdGhlIHN5c3RlbSBoYXMgaXRzIG93biB2ZXJzaW9uIG9mIGxpbWl0cy5oLiAgKi8KKworI2Vsc2UgLyogbm90IF9HQ0NfTElNSVRTX0hfICovCisKKyNpZmRlZiBfR0NDX05FWFRfTElNSVRTX0gKKyNpbmNsdWRlX25leHQgPGxpbWl0cy5oPgkJLyogcmVjdXJzZSBkb3duIHRvIHRoZSByZWFsIG9uZSAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBub3QgX0dDQ19MSU1JVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9pbmNsdWRlLWZpeGVkL2xpbnV4L2Eub3V0LmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5jbHVkZS1maXhlZC9saW51eC9hLm91dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ODA3NTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5jbHVkZS1maXhlZC9saW51eC9hLm91dC5oCkBAIC0wLDAgKzEsMjc5IEBACisvKiAgRE8gTk9UIEVESVQgVEhJUyBGSUxFLgorCisgICAgSXQgaGFzIGJlZW4gYXV0by1lZGl0ZWQgYnkgZml4aW5jbHVkZXMgZnJvbToKKworCSIvdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3IvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290L3Vzci9pbmNsdWRlL2xpbnV4L2Eub3V0LmgiCisKKyAgICBUaGlzIGhhZCB0byBiZSBkb25lIHRvIGNvcnJlY3Qgbm9uLXN0YW5kYXJkIHVzYWdlcyBpbiB0aGUKKyAgICBvcmlnaW5hbCwgbWFudWZhY3R1cmVyIHN1cHBsaWVkIGhlYWRlciBmaWxlLiAgKi8KKworI2lmbmRlZiBfX0FfT1VUX0dOVV9IX18KKyNkZWZpbmUgX19BX09VVF9HTlVfSF9fCisKKyNkZWZpbmUgX19HTlVfRVhFQ19NQUNST1NfXworCisjaWZuZGVmIF9fU1RSVUNUX0VYRUNfT1ZFUlJJREVfXworCisjaW5jbHVkZSA8YXNtL2Eub3V0Lmg+CisKKyNlbmRpZiAvKiBfX1NUUlVDVF9FWEVDX09WRVJSSURFX18gKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyogdGhlc2UgZ28gaW4gdGhlIE5fTUFDSFRZUEUgZmllbGQgKi8KK2VudW0gbWFjaGluZV90eXBlIHsKKyNpZiBkZWZpbmVkIChNX09MRFNVTjIpCisgIE1fX09MRFNVTjIgPSBNX09MRFNVTjIsCisjZWxzZQorICBNX09MRFNVTjIgPSAwLAorI2VuZGlmCisjaWYgZGVmaW5lZCAoTV82ODAxMCkKKyAgTV9fNjgwMTAgPSBNXzY4MDEwLAorI2Vsc2UKKyAgTV82ODAxMCA9IDEsCisjZW5kaWYKKyNpZiBkZWZpbmVkIChNXzY4MDIwKQorICBNX182ODAyMCA9IE1fNjgwMjAsCisjZWxzZQorICBNXzY4MDIwID0gMiwKKyNlbmRpZgorI2lmIGRlZmluZWQgKE1fU1BBUkMpCisgIE1fX1NQQVJDID0gTV9TUEFSQywKKyNlbHNlCisgIE1fU1BBUkMgPSAzLAorI2VuZGlmCisgIC8qIHNraXAgYSBidW5jaCBzbyB3ZSBkb24ndCBydW4gaW50byBhbnkgb2Ygc3VuJ3MgbnVtYmVycyAqLworICBNXzM4NiA9IDEwMCwKKyAgTV9NSVBTMSA9IDE1MSwJLyogTUlQUyBSMzAwMC9SMzAwMCBiaW5hcnkgKi8KKyAgTV9NSVBTMiA9IDE1MgkJLyogTUlQUyBSNjAwMC9SNDAwMCBiaW5hcnkgKi8KK307CisKKyNpZiAhZGVmaW5lZCAoTl9NQUdJQykKKyNkZWZpbmUgTl9NQUdJQyhleGVjKSAoKGV4ZWMpLmFfaW5mbyAmIDB4ZmZmZikKKyNlbmRpZgorI2RlZmluZSBOX01BQ0hUWVBFKGV4ZWMpICgoZW51bSBtYWNoaW5lX3R5cGUpKCgoZXhlYykuYV9pbmZvID4+IDE2KSAmIDB4ZmYpKQorI2RlZmluZSBOX0ZMQUdTKGV4ZWMpICgoKGV4ZWMpLmFfaW5mbyA+PiAyNCkgJiAweGZmKQorI2RlZmluZSBOX1NFVF9JTkZPKGV4ZWMsIG1hZ2ljLCB0eXBlLCBmbGFncykgXAorCSgoZXhlYykuYV9pbmZvID0gKChtYWdpYykgJiAweGZmZmYpIFwKKwkgfCAoKChpbnQpKHR5cGUpICYgMHhmZikgPDwgMTYpIFwKKwkgfCAoKChmbGFncykgJiAweGZmKSA8PCAyNCkpCisjZGVmaW5lIE5fU0VUX01BR0lDKGV4ZWMsIG1hZ2ljKSBcCisJKChleGVjKS5hX2luZm8gPSAoKChleGVjKS5hX2luZm8gJiAweGZmZmYwMDAwKSB8ICgobWFnaWMpICYgMHhmZmZmKSkpCisKKyNkZWZpbmUgTl9TRVRfTUFDSFRZUEUoZXhlYywgbWFjaHR5cGUpIFwKKwkoKGV4ZWMpLmFfaW5mbyA9IFwKKwkgKChleGVjKS5hX2luZm8mMHhmZjAwZmZmZikgfCAoKCgoaW50KShtYWNodHlwZSkpJjB4ZmYpIDw8IDE2KSkKKworI2RlZmluZSBOX1NFVF9GTEFHUyhleGVjLCBmbGFncykgXAorCSgoZXhlYykuYV9pbmZvID0gXAorCSAoKGV4ZWMpLmFfaW5mbyYweDAwZmZmZmZmKSB8ICgoKGZsYWdzKSAmIDB4ZmYpIDw8IDI0KSkKKworLyogQ29kZSBpbmRpY2F0aW5nIG9iamVjdCBmaWxlIG9yIGltcHVyZSBleGVjdXRhYmxlLiAgKi8KKyNkZWZpbmUgT01BR0lDIDA0MDcKKy8qIENvZGUgaW5kaWNhdGluZyBwdXJlIGV4ZWN1dGFibGUuICAqLworI2RlZmluZSBOTUFHSUMgMDQxMAorLyogQ29kZSBpbmRpY2F0aW5nIGRlbWFuZC1wYWdlZCBleGVjdXRhYmxlLiAgKi8KKyNkZWZpbmUgWk1BR0lDIDA0MTMKKy8qIFRoaXMgaW5kaWNhdGVzIGEgZGVtYW5kLXBhZ2VkIGV4ZWN1dGFibGUgd2l0aCB0aGUgaGVhZGVyIGluIHRoZSB0ZXh0LiAKKyAgIFRoZSBmaXJzdCBwYWdlIGlzIHVubWFwcGVkIHRvIGhlbHAgdHJhcCBOVUxMIHBvaW50ZXIgcmVmZXJlbmNlcyAqLworI2RlZmluZSBRTUFHSUMgMDMxNAorCisvKiBDb2RlIGluZGljYXRpbmcgY29yZSBmaWxlLiAgKi8KKyNkZWZpbmUgQ01BR0lDIDA0MjEKKworI2lmICFkZWZpbmVkIChOX0JBRE1BRykKKyNkZWZpbmUgTl9CQURNQUcoeCkJICAoTl9NQUdJQyh4KSAhPSBPTUFHSUMJCVwKKwkJCSYmIE5fTUFHSUMoeCkgIT0gTk1BR0lDCQlcCisgIAkJCSYmIE5fTUFHSUMoeCkgIT0gWk1BR0lDIFwKKwkJICAgICAgICAmJiBOX01BR0lDKHgpICE9IFFNQUdJQykKKyNlbmRpZgorCisjZGVmaW5lIF9OX0hEUk9GRih4KSAoMTAyNCAtIHNpemVvZiAoc3RydWN0IGV4ZWMpKQorCisjaWYgIWRlZmluZWQgKE5fVFhUT0ZGKQorI2RlZmluZSBOX1RYVE9GRih4KSBcCisgKE5fTUFHSUMoeCkgPT0gWk1BR0lDID8gX05fSERST0ZGKCh4KSkgKyBzaXplb2YgKHN0cnVjdCBleGVjKSA6IFwKKyAgKE5fTUFHSUMoeCkgPT0gUU1BR0lDID8gMCA6IHNpemVvZiAoc3RydWN0IGV4ZWMpKSkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgKE5fREFUT0ZGKQorI2RlZmluZSBOX0RBVE9GRih4KSAoTl9UWFRPRkYoeCkgKyAoeCkuYV90ZXh0KQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCAoTl9UUkVMT0ZGKQorI2RlZmluZSBOX1RSRUxPRkYoeCkgKE5fREFUT0ZGKHgpICsgKHgpLmFfZGF0YSkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgKE5fRFJFTE9GRikKKyNkZWZpbmUgTl9EUkVMT0ZGKHgpIChOX1RSRUxPRkYoeCkgKyBOX1RSU0laRSh4KSkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgKE5fU1lNT0ZGKQorI2RlZmluZSBOX1NZTU9GRih4KSAoTl9EUkVMT0ZGKHgpICsgTl9EUlNJWkUoeCkpCisjZW5kaWYKKworI2lmICFkZWZpbmVkIChOX1NUUk9GRikKKyNkZWZpbmUgTl9TVFJPRkYoeCkgKE5fU1lNT0ZGKHgpICsgTl9TWU1TSVpFKHgpKQorI2VuZGlmCisKKy8qIEFkZHJlc3Mgb2YgdGV4dCBzZWdtZW50IGluIG1lbW9yeSBhZnRlciBpdCBpcyBsb2FkZWQuICAqLworI2lmICFkZWZpbmVkIChOX1RYVEFERFIpCisjZGVmaW5lIE5fVFhUQUREUih4KSAoTl9NQUdJQyh4KSA9PSBRTUFHSUMgPyBQQUdFX1NJWkUgOiAwKQorI2VuZGlmCisKKy8qIEFkZHJlc3Mgb2YgZGF0YSBzZWdtZW50IGluIG1lbW9yeSBhZnRlciBpdCBpcyBsb2FkZWQuCisgICBOb3RlIHRoYXQgaXQgaXMgdXAgdG8geW91IHRvIGRlZmluZSBTRUdNRU5UX1NJWkUKKyAgIG9uIG1hY2hpbmVzIG5vdCBsaXN0ZWQgaGVyZS4gICovCisjaWYgZGVmaW5lZCh2YXgpIHx8IGRlZmluZWQoaHAzMDApIHx8IGRlZmluZWQocHlyKQorI2RlZmluZSBTRUdNRU5UX1NJWkUgcGFnZV9zaXplCisjZW5kaWYKKyNpZmRlZglzb255CisjZGVmaW5lCVNFR01FTlRfU0laRQkweDIwMDAKKyNlbmRpZgkvKiBTb255LiAgKi8KKyNpZmRlZiBpczY4aworI2RlZmluZSBTRUdNRU5UX1NJWkUgMHgyMDAwMAorI2VuZGlmCisjaWYgZGVmaW5lZChtNjhrKSAmJiBkZWZpbmVkKFBPUlRBUikKKyNkZWZpbmUgUEFHRV9TSVpFIDB4NDAwCisjZGVmaW5lIFNFR01FTlRfU0laRSBQQUdFX1NJWkUKKyNlbmRpZgorCisjaWZkZWYgX19saW51eF9fCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX21jNjgwMDBfXykKKyNkZWZpbmUgU0VHTUVOVF9TSVpFCTEwMjQKKyNlbHNlCisjaWZuZGVmIFNFR01FTlRfU0laRQorI2RlZmluZSBTRUdNRU5UX1NJWkUgICBnZXRwYWdlc2l6ZSgpCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgX05fU0VHTUVOVF9ST1VORCh4KSBBTElHTih4LCBTRUdNRU5UX1NJWkUpCisKKyNkZWZpbmUgX05fVFhURU5EQUREUih4KSAoTl9UWFRBRERSKHgpKyh4KS5hX3RleHQpCisKKyNpZm5kZWYgTl9EQVRBRERSCisjZGVmaW5lIE5fREFUQUREUih4KSBcCisgICAgKE5fTUFHSUMoeCk9PU9NQUdJQz8gKF9OX1RYVEVOREFERFIoeCkpIFwKKyAgICAgOiAoX05fU0VHTUVOVF9ST1VORCAoX05fVFhURU5EQUREUih4KSkpKQorI2VuZGlmCisKKy8qIEFkZHJlc3Mgb2YgYnNzIHNlZ21lbnQgaW4gbWVtb3J5IGFmdGVyIGl0IGlzIGxvYWRlZC4gICovCisjaWYgIWRlZmluZWQgKE5fQlNTQUREUikKKyNkZWZpbmUgTl9CU1NBRERSKHgpIChOX0RBVEFERFIoeCkgKyAoeCkuYV9kYXRhKQorI2VuZGlmCisMCisjaWYgIWRlZmluZWQgKE5fTkxJU1RfREVDTEFSRUQpCitzdHJ1Y3Qgbmxpc3QgeworICB1bmlvbiB7CisgICAgY2hhciAqbl9uYW1lOworICAgIHN0cnVjdCBubGlzdCAqbl9uZXh0OworICAgIGxvbmcgbl9zdHJ4OworICB9IG5fdW47CisgIHVuc2lnbmVkIGNoYXIgbl90eXBlOworICBjaGFyIG5fb3RoZXI7CisgIHNob3J0IG5fZGVzYzsKKyAgdW5zaWduZWQgbG9uZyBuX3ZhbHVlOworfTsKKyNlbmRpZiAvKiBubyBOX05MSVNUX0RFQ0xBUkVELiAgKi8KKworI2lmICFkZWZpbmVkIChOX1VOREYpCisjZGVmaW5lIE5fVU5ERiAwCisjZW5kaWYKKyNpZiAhZGVmaW5lZCAoTl9BQlMpCisjZGVmaW5lIE5fQUJTIDIKKyNlbmRpZgorI2lmICFkZWZpbmVkIChOX1RFWFQpCisjZGVmaW5lIE5fVEVYVCA0CisjZW5kaWYKKyNpZiAhZGVmaW5lZCAoTl9EQVRBKQorI2RlZmluZSBOX0RBVEEgNgorI2VuZGlmCisjaWYgIWRlZmluZWQgKE5fQlNTKQorI2RlZmluZSBOX0JTUyA4CisjZW5kaWYKKyNpZiAhZGVmaW5lZCAoTl9GTikKKyNkZWZpbmUgTl9GTiAxNQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCAoTl9FWFQpCisjZGVmaW5lIE5fRVhUIDEKKyNlbmRpZgorI2lmICFkZWZpbmVkIChOX1RZUEUpCisjZGVmaW5lIE5fVFlQRSAwMzYKKyNlbmRpZgorI2lmICFkZWZpbmVkIChOX1NUQUIpCisjZGVmaW5lIE5fU1RBQiAwMzQwCisjZW5kaWYKKworLyogVGhlIGZvbGxvd2luZyB0eXBlIGluZGljYXRlcyB0aGUgZGVmaW5pdGlvbiBvZiBhIHN5bWJvbCBhcyBiZWluZworICAgYW4gaW5kaXJlY3QgcmVmZXJlbmNlIHRvIGFub3RoZXIgc3ltYm9sLiAgVGhlIG90aGVyIHN5bWJvbAorICAgYXBwZWFycyBhcyBhbiB1bmRlZmluZWQgcmVmZXJlbmNlLCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhpcyBzeW1ib2wuCisKKyAgIEluZGlyZWN0aW9uIGlzIGFzeW1tZXRyaWNhbC4gIFRoZSBvdGhlciBzeW1ib2wncyB2YWx1ZSB3aWxsIGJlIHVzZWQKKyAgIHRvIHNhdGlzZnkgcmVxdWVzdHMgZm9yIHRoZSBpbmRpcmVjdCBzeW1ib2wsIGJ1dCBub3QgdmljZSB2ZXJzYS4KKyAgIElmIHRoZSBvdGhlciBzeW1ib2wgZG9lcyBub3QgaGF2ZSBhIGRlZmluaXRpb24sIGxpYnJhcmllcyB3aWxsCisgICBiZSBzZWFyY2hlZCB0byBmaW5kIGEgZGVmaW5pdGlvbi4gICovCisjZGVmaW5lIE5fSU5EUiAweGEKKworLyogVGhlIGZvbGxvd2luZyBzeW1ib2xzIHJlZmVyIHRvIHNldCBlbGVtZW50cy4KKyAgIEFsbCB0aGUgTl9TRVRbQVREQl0gc3ltYm9scyB3aXRoIHRoZSBzYW1lIG5hbWUgZm9ybSBvbmUgc2V0LgorICAgU3BhY2UgaXMgYWxsb2NhdGVkIGZvciB0aGUgc2V0IGluIHRoZSB0ZXh0IHNlY3Rpb24sIGFuZCBlYWNoIHNldAorICAgZWxlbWVudCdzIHZhbHVlIGlzIHN0b3JlZCBpbnRvIG9uZSB3b3JkIG9mIHRoZSBzcGFjZS4KKyAgIFRoZSBmaXJzdCB3b3JkIG9mIHRoZSBzcGFjZSBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBzZXQgKG51bWJlciBvZiBlbGVtZW50cykuCisKKyAgIFRoZSBhZGRyZXNzIG9mIHRoZSBzZXQgaXMgbWFkZSBpbnRvIGFuIE5fU0VUViBzeW1ib2wKKyAgIHdob3NlIG5hbWUgaXMgdGhlIHNhbWUgYXMgdGhlIG5hbWUgb2YgdGhlIHNldC4KKyAgIFRoaXMgc3ltYm9sIGFjdHMgbGlrZSBhIE5fREFUQSBnbG9iYWwgc3ltYm9sCisgICBpbiB0aGF0IGl0IGNhbiBzYXRpc2Z5IHVuZGVmaW5lZCBleHRlcm5hbCByZWZlcmVuY2VzLiAgKi8KKworLyogVGhlc2UgYXBwZWFyIGFzIGlucHV0IHRvIExELCBpbiBhIC5vIGZpbGUuICAqLworI2RlZmluZQlOX1NFVEEJMHgxNAkJLyogQWJzb2x1dGUgc2V0IGVsZW1lbnQgc3ltYm9sICovCisjZGVmaW5lCU5fU0VUVAkweDE2CQkvKiBUZXh0IHNldCBlbGVtZW50IHN5bWJvbCAqLworI2RlZmluZQlOX1NFVEQJMHgxOAkJLyogRGF0YSBzZXQgZWxlbWVudCBzeW1ib2wgKi8KKyNkZWZpbmUJTl9TRVRCCTB4MUEJCS8qIEJzcyBzZXQgZWxlbWVudCBzeW1ib2wgKi8KKworLyogVGhpcyBpcyBvdXRwdXQgZnJvbSBMRC4gICovCisjZGVmaW5lIE5fU0VUVgkweDFDCQkvKiBQb2ludGVyIHRvIHNldCB2ZWN0b3IgaW4gZGF0YSBhcmVhLiAgKi8KKwwKKyNpZiAhZGVmaW5lZCAoTl9SRUxPQ0FUSU9OX0lORk9fREVDTEFSRUQpCisvKiBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgYSBzaW5nbGUgcmVsb2NhdGlvbiB0byBiZSBwZXJmb3JtZWQuCisgICBUaGUgdGV4dC1yZWxvY2F0aW9uIHNlY3Rpb24gb2YgdGhlIGZpbGUgaXMgYSB2ZWN0b3Igb2YgdGhlc2Ugc3RydWN0dXJlcywKKyAgIGFsbCBvZiB3aGljaCBhcHBseSB0byB0aGUgdGV4dCBzZWN0aW9uLgorICAgTGlrZXdpc2UsIHRoZSBkYXRhLXJlbG9jYXRpb24gc2VjdGlvbiBhcHBsaWVzIHRvIHRoZSBkYXRhIHNlY3Rpb24uICAqLworCitzdHJ1Y3QgcmVsb2NhdGlvbl9pbmZvCit7CisgIC8qIEFkZHJlc3MgKHdpdGhpbiBzZWdtZW50KSB0byBiZSByZWxvY2F0ZWQuICAqLworICBpbnQgcl9hZGRyZXNzOworICAvKiBUaGUgbWVhbmluZyBvZiByX3N5bWJvbG51bSBkZXBlbmRzIG9uIHJfZXh0ZXJuLiAgKi8KKyAgdW5zaWduZWQgaW50IHJfc3ltYm9sbnVtOjI0OworICAvKiBOb256ZXJvIG1lYW5zIHZhbHVlIGlzIGEgcGMtcmVsYXRpdmUgb2Zmc2V0CisgICAgIGFuZCBpdCBzaG91bGQgYmUgcmVsb2NhdGVkIGZvciBjaGFuZ2VzIGluIGl0cyBvd24gYWRkcmVzcworICAgICBhcyB3ZWxsIGFzIGZvciBjaGFuZ2VzIGluIHRoZSBzeW1ib2wgb3Igc2VjdGlvbiBzcGVjaWZpZWQuICAqLworICB1bnNpZ25lZCBpbnQgcl9wY3JlbDoxOworICAvKiBMZW5ndGggKGFzIGV4cG9uZW50IG9mIDIpIG9mIHRoZSBmaWVsZCB0byBiZSByZWxvY2F0ZWQuCisgICAgIFRodXMsIGEgdmFsdWUgb2YgMiBpbmRpY2F0ZXMgMTw8MiBieXRlcy4gICovCisgIHVuc2lnbmVkIGludCByX2xlbmd0aDoyOworICAvKiAxID0+IHJlbG9jYXRlIHdpdGggdmFsdWUgb2Ygc3ltYm9sLgorICAgICAgICAgIHJfc3ltYm9sbnVtIGlzIHRoZSBpbmRleCBvZiB0aGUgc3ltYm9sCisJICBpbiBmaWxlJ3MgdGhlIHN5bWJvbCB0YWJsZS4KKyAgICAgMCA9PiByZWxvY2F0ZSB3aXRoIHRoZSBhZGRyZXNzIG9mIGEgc2VnbWVudC4KKyAgICAgICAgICByX3N5bWJvbG51bSBpcyBOX1RFWFQsIE5fREFUQSwgTl9CU1Mgb3IgTl9BQlMKKwkgICh0aGUgTl9FWFQgYml0IG1heSBiZSBzZXQgYWxzbywgYnV0IHNpZ25pZmllcyBub3RoaW5nKS4gICovCisgIHVuc2lnbmVkIGludCByX2V4dGVybjoxOworICAvKiBGb3VyIGJpdHMgdGhhdCBhcmVuJ3QgdXNlZCwgYnV0IHdoZW4gd3JpdGluZyBhbiBvYmplY3QgZmlsZQorICAgICBpdCBpcyBkZXNpcmFibGUgdG8gY2xlYXIgdGhlbS4gICovCisjaWZkZWYgTlMzMksKKyAgdW5zaWduZWQgcl9ic3I6MTsKKyAgdW5zaWduZWQgcl9kaXNwOjE7CisgIHVuc2lnbmVkIHJfcGFkOjI7CisjZWxzZQorICB1bnNpZ25lZCBpbnQgcl9wYWQ6NDsKKyNlbmRpZgorfTsKKyNlbmRpZiAvKiBubyBOX1JFTE9DQVRJT05fSU5GT19ERUNMQVJFRC4gICovCisKKyNlbmRpZiAvKl9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIF9fQV9PVVRfR05VX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luY2x1ZGUtZml4ZWQvc3lzbGltaXRzLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5jbHVkZS1maXhlZC9zeXNsaW1pdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzYyODAyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luY2x1ZGUtZml4ZWQvc3lzbGltaXRzLmgKQEAgLTAsMCArMSw4IEBACisvKiBzeXNsaW1pdHMuaCBzdGFuZHMgZm9yIHRoZSBzeXN0ZW0ncyBvd24gbGltaXRzLmggZmlsZS4KKyAgIElmIHdlIGNhbiB1c2UgaXQgb2sgdW5tb2RpZmllZCwgdGhlbiB3ZSBpbnN0YWxsIHRoaXMgdGV4dC4KKyAgIElmIGZpeGluY2x1ZGVzIGZpeGVzIGl0LCB0aGVuIHRoZSBmaXhlZCB2ZXJzaW9uIGlzIGluc3RhbGxlZAorICAgaW5zdGVhZCBvZiB0aGlzIHRleHQuICAqLworCisjZGVmaW5lIF9HQ0NfTkVYVF9MSU1JVFNfSAkJLyogdGVsbCBnY2MncyBsaW1pdHMuaCB0byByZWN1cnNlICovCisjaW5jbHVkZV9uZXh0IDxsaW1pdHMuaD4KKyN1bmRlZiBfR0NDX05FWFRfTElNSVRTX0gKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9pbmNsdWRlL2FybV9uZW9uLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5jbHVkZS9hcm1fbmVvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZmM3NDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5jbHVkZS9hcm1fbmVvbi5oCkBAIC0wLDAgKzEsMTIxNzYgQEAKKy8qIEFSTSBORU9OIGludHJpbnNpY3MgaW5jbHVkZSBmaWxlLiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkKKyAgIHVzaW5nIG5lb24tZ2VuLm1sLiAgUGxlYXNlIGRvIG5vdCBlZGl0IG1hbnVhbGx5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBDb2RlU291cmNlcnkuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworICAgR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91cgorICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisgICBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisgICAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKyAgIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisgICBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX0dDQ19BUk1fTkVPTl9ICisjZGVmaW5lIF9HQ0NfQVJNX05FT05fSCAxCisKKyNpZm5kZWYgX19BUk1fTkVPTl9fCisjZXJyb3IgWW91IG11c3QgZW5hYmxlIE5FT04gaW5zdHJ1Y3Rpb25zIChlLmcuIC1tZmxvYXQtYWJpPXNvZnRmcCAtbWZwdT1uZW9uKSB0byB1c2UgYXJtX25lb24uaAorI2Vsc2UKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKK3R5cGVkZWYgX19idWlsdGluX25lb25fcWkgaW50OHg4X3QJX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoOCkpKTsKK3R5cGVkZWYgX19idWlsdGluX25lb25faGkgaW50MTZ4NF90CV9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDgpKSk7Cit0eXBlZGVmIF9fYnVpbHRpbl9uZW9uX3NpIGludDMyeDJfdAlfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICg4KSkpOwordHlwZWRlZiBfX2J1aWx0aW5fbmVvbl9kaSBpbnQ2NHgxX3Q7Cit0eXBlZGVmIF9fYnVpbHRpbl9uZW9uX3NmIGZsb2F0MzJ4Ml90CV9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDgpKSk7Cit0eXBlZGVmIF9fYnVpbHRpbl9uZW9uX3BvbHk4IHBvbHk4eDhfdAlfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICg4KSkpOwordHlwZWRlZiBfX2J1aWx0aW5fbmVvbl9wb2x5MTYgcG9seTE2eDRfdAlfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICg4KSkpOwordHlwZWRlZiBfX2J1aWx0aW5fbmVvbl91cWkgdWludDh4OF90CV9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDgpKSk7Cit0eXBlZGVmIF9fYnVpbHRpbl9uZW9uX3VoaSB1aW50MTZ4NF90CV9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDgpKSk7Cit0eXBlZGVmIF9fYnVpbHRpbl9uZW9uX3VzaSB1aW50MzJ4Ml90CV9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDgpKSk7Cit0eXBlZGVmIF9fYnVpbHRpbl9uZW9uX3VkaSB1aW50NjR4MV90OwordHlwZWRlZiBfX2J1aWx0aW5fbmVvbl9xaSBpbnQ4eDE2X3QJX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoMTYpKSk7Cit0eXBlZGVmIF9fYnVpbHRpbl9uZW9uX2hpIGludDE2eDhfdAlfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgxNikpKTsKK3R5cGVkZWYgX19idWlsdGluX25lb25fc2kgaW50MzJ4NF90CV9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDE2KSkpOwordHlwZWRlZiBfX2J1aWx0aW5fbmVvbl9kaSBpbnQ2NHgyX3QJX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoMTYpKSk7Cit0eXBlZGVmIF9fYnVpbHRpbl9uZW9uX3NmIGZsb2F0MzJ4NF90CV9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDE2KSkpOwordHlwZWRlZiBfX2J1aWx0aW5fbmVvbl9wb2x5OCBwb2x5OHgxNl90CV9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDE2KSkpOwordHlwZWRlZiBfX2J1aWx0aW5fbmVvbl9wb2x5MTYgcG9seTE2eDhfdAlfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgxNikpKTsKK3R5cGVkZWYgX19idWlsdGluX25lb25fdXFpIHVpbnQ4eDE2X3QJX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoMTYpKSk7Cit0eXBlZGVmIF9fYnVpbHRpbl9uZW9uX3VoaSB1aW50MTZ4OF90CV9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDE2KSkpOwordHlwZWRlZiBfX2J1aWx0aW5fbmVvbl91c2kgdWludDMyeDRfdAlfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgxNikpKTsKK3R5cGVkZWYgX19idWlsdGluX25lb25fdWRpIHVpbnQ2NHgyX3QJX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoMTYpKSk7CisKK3R5cGVkZWYgZmxvYXQgZmxvYXQzMl90OwordHlwZWRlZiBfX2J1aWx0aW5fbmVvbl9wb2x5OCBwb2x5OF90OwordHlwZWRlZiBfX2J1aWx0aW5fbmVvbl9wb2x5MTYgcG9seTE2X3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDh4OHgyX3QKK3sKKyAgaW50OHg4X3QgdmFsWzJdOworfSBpbnQ4eDh4Ml90OworCit0eXBlZGVmIHN0cnVjdCBpbnQ4eDE2eDJfdAoreworICBpbnQ4eDE2X3QgdmFsWzJdOworfSBpbnQ4eDE2eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50MTZ4NHgyX3QKK3sKKyAgaW50MTZ4NF90IHZhbFsyXTsKK30gaW50MTZ4NHgyX3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDE2eDh4Ml90Cit7CisgIGludDE2eDhfdCB2YWxbMl07Cit9IGludDE2eDh4Ml90OworCit0eXBlZGVmIHN0cnVjdCBpbnQzMngyeDJfdAoreworICBpbnQzMngyX3QgdmFsWzJdOworfSBpbnQzMngyeDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50MzJ4NHgyX3QKK3sKKyAgaW50MzJ4NF90IHZhbFsyXTsKK30gaW50MzJ4NHgyX3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDY0eDF4Ml90Cit7CisgIGludDY0eDFfdCB2YWxbMl07Cit9IGludDY0eDF4Ml90OworCit0eXBlZGVmIHN0cnVjdCBpbnQ2NHgyeDJfdAoreworICBpbnQ2NHgyX3QgdmFsWzJdOworfSBpbnQ2NHgyeDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDh4OHgyX3QKK3sKKyAgdWludDh4OF90IHZhbFsyXTsKK30gdWludDh4OHgyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQ4eDE2eDJfdAoreworICB1aW50OHgxNl90IHZhbFsyXTsKK30gdWludDh4MTZ4Ml90OworCit0eXBlZGVmIHN0cnVjdCB1aW50MTZ4NHgyX3QKK3sKKyAgdWludDE2eDRfdCB2YWxbMl07Cit9IHVpbnQxNng0eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDE2eDh4Ml90Cit7CisgIHVpbnQxNng4X3QgdmFsWzJdOworfSB1aW50MTZ4OHgyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQzMngyeDJfdAoreworICB1aW50MzJ4Ml90IHZhbFsyXTsKK30gdWludDMyeDJ4Ml90OworCit0eXBlZGVmIHN0cnVjdCB1aW50MzJ4NHgyX3QKK3sKKyAgdWludDMyeDRfdCB2YWxbMl07Cit9IHVpbnQzMng0eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDY0eDF4Ml90Cit7CisgIHVpbnQ2NHgxX3QgdmFsWzJdOworfSB1aW50NjR4MXgyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQ2NHgyeDJfdAoreworICB1aW50NjR4Ml90IHZhbFsyXTsKK30gdWludDY0eDJ4Ml90OworCit0eXBlZGVmIHN0cnVjdCBmbG9hdDMyeDJ4Ml90Cit7CisgIGZsb2F0MzJ4Ml90IHZhbFsyXTsKK30gZmxvYXQzMngyeDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZmxvYXQzMng0eDJfdAoreworICBmbG9hdDMyeDRfdCB2YWxbMl07Cit9IGZsb2F0MzJ4NHgyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHBvbHk4eDh4Ml90Cit7CisgIHBvbHk4eDhfdCB2YWxbMl07Cit9IHBvbHk4eDh4Ml90OworCit0eXBlZGVmIHN0cnVjdCBwb2x5OHgxNngyX3QKK3sKKyAgcG9seTh4MTZfdCB2YWxbMl07Cit9IHBvbHk4eDE2eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcG9seTE2eDR4Ml90Cit7CisgIHBvbHkxNng0X3QgdmFsWzJdOworfSBwb2x5MTZ4NHgyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHBvbHkxNng4eDJfdAoreworICBwb2x5MTZ4OF90IHZhbFsyXTsKK30gcG9seTE2eDh4Ml90OworCit0eXBlZGVmIHN0cnVjdCBpbnQ4eDh4M190Cit7CisgIGludDh4OF90IHZhbFszXTsKK30gaW50OHg4eDNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50OHgxNngzX3QKK3sKKyAgaW50OHgxNl90IHZhbFszXTsKK30gaW50OHgxNngzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDE2eDR4M190Cit7CisgIGludDE2eDRfdCB2YWxbM107Cit9IGludDE2eDR4M190OworCit0eXBlZGVmIHN0cnVjdCBpbnQxNng4eDNfdAoreworICBpbnQxNng4X3QgdmFsWzNdOworfSBpbnQxNng4eDNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50MzJ4MngzX3QKK3sKKyAgaW50MzJ4Ml90IHZhbFszXTsKK30gaW50MzJ4MngzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDMyeDR4M190Cit7CisgIGludDMyeDRfdCB2YWxbM107Cit9IGludDMyeDR4M190OworCit0eXBlZGVmIHN0cnVjdCBpbnQ2NHgxeDNfdAoreworICBpbnQ2NHgxX3QgdmFsWzNdOworfSBpbnQ2NHgxeDNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50NjR4MngzX3QKK3sKKyAgaW50NjR4Ml90IHZhbFszXTsKK30gaW50NjR4MngzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQ4eDh4M190Cit7CisgIHVpbnQ4eDhfdCB2YWxbM107Cit9IHVpbnQ4eDh4M190OworCit0eXBlZGVmIHN0cnVjdCB1aW50OHgxNngzX3QKK3sKKyAgdWludDh4MTZfdCB2YWxbM107Cit9IHVpbnQ4eDE2eDNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDE2eDR4M190Cit7CisgIHVpbnQxNng0X3QgdmFsWzNdOworfSB1aW50MTZ4NHgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQxNng4eDNfdAoreworICB1aW50MTZ4OF90IHZhbFszXTsKK30gdWludDE2eDh4M190OworCit0eXBlZGVmIHN0cnVjdCB1aW50MzJ4MngzX3QKK3sKKyAgdWludDMyeDJfdCB2YWxbM107Cit9IHVpbnQzMngyeDNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDMyeDR4M190Cit7CisgIHVpbnQzMng0X3QgdmFsWzNdOworfSB1aW50MzJ4NHgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQ2NHgxeDNfdAoreworICB1aW50NjR4MV90IHZhbFszXTsKK30gdWludDY0eDF4M190OworCit0eXBlZGVmIHN0cnVjdCB1aW50NjR4MngzX3QKK3sKKyAgdWludDY0eDJfdCB2YWxbM107Cit9IHVpbnQ2NHgyeDNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZmxvYXQzMngyeDNfdAoreworICBmbG9hdDMyeDJfdCB2YWxbM107Cit9IGZsb2F0MzJ4MngzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGZsb2F0MzJ4NHgzX3QKK3sKKyAgZmxvYXQzMng0X3QgdmFsWzNdOworfSBmbG9hdDMyeDR4M190OworCit0eXBlZGVmIHN0cnVjdCBwb2x5OHg4eDNfdAoreworICBwb2x5OHg4X3QgdmFsWzNdOworfSBwb2x5OHg4eDNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcG9seTh4MTZ4M190Cit7CisgIHBvbHk4eDE2X3QgdmFsWzNdOworfSBwb2x5OHgxNngzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHBvbHkxNng0eDNfdAoreworICBwb2x5MTZ4NF90IHZhbFszXTsKK30gcG9seTE2eDR4M190OworCit0eXBlZGVmIHN0cnVjdCBwb2x5MTZ4OHgzX3QKK3sKKyAgcG9seTE2eDhfdCB2YWxbM107Cit9IHBvbHkxNng4eDNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50OHg4eDRfdAoreworICBpbnQ4eDhfdCB2YWxbNF07Cit9IGludDh4OHg0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDh4MTZ4NF90Cit7CisgIGludDh4MTZfdCB2YWxbNF07Cit9IGludDh4MTZ4NF90OworCit0eXBlZGVmIHN0cnVjdCBpbnQxNng0eDRfdAoreworICBpbnQxNng0X3QgdmFsWzRdOworfSBpbnQxNng0eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50MTZ4OHg0X3QKK3sKKyAgaW50MTZ4OF90IHZhbFs0XTsKK30gaW50MTZ4OHg0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDMyeDJ4NF90Cit7CisgIGludDMyeDJfdCB2YWxbNF07Cit9IGludDMyeDJ4NF90OworCit0eXBlZGVmIHN0cnVjdCBpbnQzMng0eDRfdAoreworICBpbnQzMng0X3QgdmFsWzRdOworfSBpbnQzMng0eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50NjR4MXg0X3QKK3sKKyAgaW50NjR4MV90IHZhbFs0XTsKK30gaW50NjR4MXg0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDY0eDJ4NF90Cit7CisgIGludDY0eDJfdCB2YWxbNF07Cit9IGludDY0eDJ4NF90OworCit0eXBlZGVmIHN0cnVjdCB1aW50OHg4eDRfdAoreworICB1aW50OHg4X3QgdmFsWzRdOworfSB1aW50OHg4eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDh4MTZ4NF90Cit7CisgIHVpbnQ4eDE2X3QgdmFsWzRdOworfSB1aW50OHgxNng0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQxNng0eDRfdAoreworICB1aW50MTZ4NF90IHZhbFs0XTsKK30gdWludDE2eDR4NF90OworCit0eXBlZGVmIHN0cnVjdCB1aW50MTZ4OHg0X3QKK3sKKyAgdWludDE2eDhfdCB2YWxbNF07Cit9IHVpbnQxNng4eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDMyeDJ4NF90Cit7CisgIHVpbnQzMngyX3QgdmFsWzRdOworfSB1aW50MzJ4Mng0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQzMng0eDRfdAoreworICB1aW50MzJ4NF90IHZhbFs0XTsKK30gdWludDMyeDR4NF90OworCit0eXBlZGVmIHN0cnVjdCB1aW50NjR4MXg0X3QKK3sKKyAgdWludDY0eDFfdCB2YWxbNF07Cit9IHVpbnQ2NHgxeDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDY0eDJ4NF90Cit7CisgIHVpbnQ2NHgyX3QgdmFsWzRdOworfSB1aW50NjR4Mng0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGZsb2F0MzJ4Mng0X3QKK3sKKyAgZmxvYXQzMngyX3QgdmFsWzRdOworfSBmbG9hdDMyeDJ4NF90OworCit0eXBlZGVmIHN0cnVjdCBmbG9hdDMyeDR4NF90Cit7CisgIGZsb2F0MzJ4NF90IHZhbFs0XTsKK30gZmxvYXQzMng0eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcG9seTh4OHg0X3QKK3sKKyAgcG9seTh4OF90IHZhbFs0XTsKK30gcG9seTh4OHg0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHBvbHk4eDE2eDRfdAoreworICBwb2x5OHgxNl90IHZhbFs0XTsKK30gcG9seTh4MTZ4NF90OworCit0eXBlZGVmIHN0cnVjdCBwb2x5MTZ4NHg0X3QKK3sKKyAgcG9seTE2eDRfdCB2YWxbNF07Cit9IHBvbHkxNng0eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcG9seTE2eDh4NF90Cit7CisgIHBvbHkxNng4X3QgdmFsWzRdOworfSBwb2x5MTZ4OHg0X3Q7CisKKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRfczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZhZGR2OHFpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZF9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZhZGR2NGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZF9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZhZGR2MnNpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZF9zNjQgKGludDY0eDFfdCBfX2EsIGludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZhZGRkaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZF9mMzIgKGZsb2F0MzJ4Ml90IF9fYSwgZmxvYXQzMngyX3QgX19iKQoreworICByZXR1cm4gKGZsb2F0MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZhZGR2MnNmIChfX2EsIF9fYiwgMyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZF91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdmFkZHY4cWkgKChpbnQ4eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92YWRkdjRoaSAoKGludDE2eDRfdCkgX19hLCAoaW50MTZ4NF90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdmFkZHYyc2kgKChpbnQzMngyX3QpIF9fYSwgKGludDMyeDJfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZF91NjQgKHVpbnQ2NHgxX3QgX19hLCB1aW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZhZGRkaSAoKGludDY0eDFfdCkgX19hLCAoaW50NjR4MV90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRxX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92YWRkdjE2cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkcV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZhZGR2OGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZHFfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92YWRkdjRzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRxX3M2NCAoaW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdmFkZHYyZGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRxX2YzMiAoZmxvYXQzMng0X3QgX19hLCBmbG9hdDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAoZmxvYXQzMng0X3QpX19idWlsdGluX25lb25fdmFkZHY0c2YgKF9fYSwgX19iLCAzKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZHFfdTggKHVpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZhZGR2MTZxaSAoKGludDh4MTZfdCkgX19hLCAoaW50OHgxNl90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkcV91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZhZGR2OGhpICgoaW50MTZ4OF90KSBfX2EsIChpbnQxNng4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRxX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdmFkZHY0c2kgKChpbnQzMng0X3QpIF9fYSwgKGludDMyeDRfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZHFfdTY0ICh1aW50NjR4Ml90IF9fYSwgdWludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92YWRkdjJkaSAoKGludDY0eDJfdCkgX19hLCAoaW50NjR4Ml90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRsX3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpX19idWlsdGluX25lb25fdmFkZGx2OHFpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZGxfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92YWRkbHY0aGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkbF9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZhZGRsdjJzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkbF91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZhZGRsdjhxaSAoKGludDh4OF90KSBfX2EsIChpbnQ4eDhfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZGxfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92YWRkbHY0aGkgKChpbnQxNng0X3QpIF9fYSwgKGludDE2eDRfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZGxfdTMyICh1aW50MzJ4Ml90IF9fYSwgdWludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92YWRkbHYyc2kgKChpbnQzMngyX3QpIF9fYSwgKGludDMyeDJfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkd19zOCAoaW50MTZ4OF90IF9fYSwgaW50OHg4X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92YWRkd3Y4cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkd19zMTYgKGludDMyeDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZhZGR3djRoaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGR3X3MzMiAoaW50NjR4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdmFkZHd2MnNpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGR3X3U4ICh1aW50MTZ4OF90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZhZGR3djhxaSAoKGludDE2eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGR3X3UxNiAodWludDMyeDRfdCBfX2EsIHVpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdmFkZHd2NGhpICgoaW50MzJ4NF90KSBfX2EsIChpbnQxNng0X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGR3X3UzMiAodWludDY0eDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdmFkZHd2MnNpICgoaW50NjR4Ml90KSBfX2EsIChpbnQzMngyX3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2aGFkZF9zOCAoaW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdmhhZGR2OHFpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmhhZGRfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92aGFkZHY0aGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2aGFkZF9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZoYWRkdjJzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZoYWRkX3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92aGFkZHY4cWkgKChpbnQ4eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZoYWRkX3UxNiAodWludDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdmhhZGR2NGhpICgoaW50MTZ4NF90KSBfX2EsIChpbnQxNng0X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZoYWRkX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdmhhZGR2MnNpICgoaW50MzJ4Ml90KSBfX2EsIChpbnQzMngyX3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmhhZGRxX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92aGFkZHYxNnFpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmhhZGRxX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpX19idWlsdGluX25lb25fdmhhZGR2OGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmhhZGRxX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdmhhZGR2NHNpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZoYWRkcV91OCAodWludDh4MTZfdCBfX2EsIHVpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdmhhZGR2MTZxaSAoKGludDh4MTZfdCkgX19hLCAoaW50OHgxNl90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2aGFkZHFfdTE2ICh1aW50MTZ4OF90IF9fYSwgdWludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92aGFkZHY4aGkgKChpbnQxNng4X3QpIF9fYSwgKGludDE2eDhfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmhhZGRxX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdmhhZGR2NHNpICgoaW50MzJ4NF90KSBfX2EsIChpbnQzMng0X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmhhZGRfczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZoYWRkdjhxaSAoX19hLCBfX2IsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyaGFkZF9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZoYWRkdjRoaSAoX19hLCBfX2IsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyaGFkZF9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZoYWRkdjJzaSAoX19hLCBfX2IsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyaGFkZF91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdmhhZGR2OHFpICgoaW50OHg4X3QpIF9fYSwgKGludDh4OF90KSBfX2IsIDQpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmhhZGRfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92aGFkZHY0aGkgKChpbnQxNng0X3QpIF9fYSwgKGludDE2eDRfdCkgX19iLCA0KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJoYWRkX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdmhhZGR2MnNpICgoaW50MzJ4Ml90KSBfX2EsIChpbnQzMngyX3QpIF9fYiwgNCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJoYWRkcV9zOCAoaW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdmhhZGR2MTZxaSAoX19hLCBfX2IsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyaGFkZHFfczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92aGFkZHY4aGkgKF9fYSwgX19iLCA1KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmhhZGRxX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdmhhZGR2NHNpIChfX2EsIF9fYiwgNSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyaGFkZHFfdTggKHVpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZoYWRkdjE2cWkgKChpbnQ4eDE2X3QpIF9fYSwgKGludDh4MTZfdCkgX19iLCA0KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJoYWRkcV91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZoYWRkdjhoaSAoKGludDE2eDhfdCkgX19hLCAoaW50MTZ4OF90KSBfX2IsIDQpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmhhZGRxX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdmhhZGR2NHNpICgoaW50MzJ4NF90KSBfX2EsIChpbnQzMng0X3QpIF9fYiwgNCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWFkZF9zOCAoaW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdnFhZGR2OHFpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFhZGRfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92cWFkZHY0aGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWFkZF9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZxYWRkdjJzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxYWRkX3M2NCAoaW50NjR4MV90IF9fYSwgaW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdnFhZGRkaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxYWRkX3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92cWFkZHY4cWkgKChpbnQ4eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxYWRkX3UxNiAodWludDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdnFhZGR2NGhpICgoaW50MTZ4NF90KSBfX2EsIChpbnQxNng0X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxYWRkX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnFhZGR2MnNpICgoaW50MzJ4Ml90KSBfX2EsIChpbnQzMngyX3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxYWRkX3U2NCAodWludDY0eDFfdCBfX2EsIHVpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdnFhZGRkaSAoKGludDY0eDFfdCkgX19hLCAoaW50NjR4MV90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxYWRkcV9zOCAoaW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdnFhZGR2MTZxaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxYWRkcV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZxYWRkdjhoaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxYWRkcV9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZxYWRkdjRzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxYWRkcV9zNjQgKGludDY0eDJfdCBfX2EsIGludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZxYWRkdjJkaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWFkZHFfdTggKHVpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZxYWRkdjE2cWkgKChpbnQ4eDE2X3QpIF9fYSwgKGludDh4MTZfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFhZGRxX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpX19idWlsdGluX25lb25fdnFhZGR2OGhpICgoaW50MTZ4OF90KSBfX2EsIChpbnQxNng4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxYWRkcV91MzIgKHVpbnQzMng0X3QgX19hLCB1aW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZxYWRkdjRzaSAoKGludDMyeDRfdCkgX19hLCAoaW50MzJ4NF90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWFkZHFfdTY0ICh1aW50NjR4Ml90IF9fYSwgdWludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92cWFkZHYyZGkgKChpbnQ2NHgyX3QpIF9fYSwgKGludDY0eDJfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRobl9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdmFkZGhudjhoaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRobl9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZhZGRobnY0c2kgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkaG5fczY0IChpbnQ2NHgyX3QgX19hLCBpbnQ2NHgyX3QgX19iKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92YWRkaG52MmRpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZGhuX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92YWRkaG52OGhpICgoaW50MTZ4OF90KSBfX2EsIChpbnQxNng4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRobl91MzIgKHVpbnQzMng0X3QgX19hLCB1aW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZhZGRobnY0c2kgKChpbnQzMng0X3QpIF9fYSwgKGludDMyeDRfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZGhuX3U2NCAodWludDY0eDJfdCBfX2EsIHVpbnQ2NHgyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdmFkZGhudjJkaSAoKGludDY0eDJfdCkgX19hLCAoaW50NjR4Ml90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJhZGRobl9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdmFkZGhudjhoaSAoX19hLCBfX2IsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyYWRkaG5fczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92YWRkaG52NHNpIChfX2EsIF9fYiwgNSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJhZGRobl9zNjQgKGludDY0eDJfdCBfX2EsIGludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZhZGRobnYyZGkgKF9fYSwgX19iLCA1KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmFkZGhuX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92YWRkaG52OGhpICgoaW50MTZ4OF90KSBfX2EsIChpbnQxNng4X3QpIF9fYiwgNCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyYWRkaG5fdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92YWRkaG52NHNpICgoaW50MzJ4NF90KSBfX2EsIChpbnQzMng0X3QpIF9fYiwgNCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyYWRkaG5fdTY0ICh1aW50NjR4Ml90IF9fYSwgdWludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92YWRkaG52MmRpICgoaW50NjR4Ml90KSBfX2EsIChpbnQ2NHgyX3QpIF9fYiwgNCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsX3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92bXVsdjhxaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92bXVsdjRoaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92bXVsdjJzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bF9mMzIgKGZsb2F0MzJ4Ml90IF9fYSwgZmxvYXQzMngyX3QgX19iKQoreworICByZXR1cm4gKGZsb2F0MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZtdWx2MnNmIChfX2EsIF9fYiwgMyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bF91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdm11bHY4cWkgKChpbnQ4eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92bXVsdjRoaSAoKGludDE2eDRfdCkgX19hLCAoaW50MTZ4NF90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdm11bHYyc2kgKChpbnQzMngyX3QpIF9fYSwgKGludDMyeDJfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsX3A4IChwb2x5OHg4X3QgX19hLCBwb2x5OHg4X3QgX19iKQoreworICByZXR1cm4gKHBvbHk4eDhfdClfX2J1aWx0aW5fbmVvbl92bXVsdjhxaSAoKGludDh4OF90KSBfX2EsIChpbnQ4eDhfdCkgX19iLCAyKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVscV9zOCAoaW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdm11bHYxNnFpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bHFfczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92bXVsdjhoaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxxX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdm11bHY0c2kgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxxX2YzMiAoZmxvYXQzMng0X3QgX19hLCBmbG9hdDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAoZmxvYXQzMng0X3QpX19idWlsdGluX25lb25fdm11bHY0c2YgKF9fYSwgX19iLCAzKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bHFfdTggKHVpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZtdWx2MTZxaSAoKGludDh4MTZfdCkgX19hLCAoaW50OHgxNl90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVscV91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZtdWx2OGhpICgoaW50MTZ4OF90KSBfX2EsIChpbnQxNng4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxxX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdm11bHY0c2kgKChpbnQzMng0X3QpIF9fYSwgKGludDMyeDRfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bHFfcDggKHBvbHk4eDE2X3QgX19hLCBwb2x5OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuIChwb2x5OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZtdWx2MTZxaSAoKGludDh4MTZfdCkgX19hLCAoaW50OHgxNl90KSBfX2IsIDIpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG11bGhfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92cWRtdWxodjRoaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG11bGhfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cWRtdWxodjJzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG11bGhxX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpX19idWlsdGluX25lb25fdnFkbXVsaHY4aGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxocV9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZxZG11bGh2NHNpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyZG11bGhfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92cWRtdWxodjRoaSAoX19hLCBfX2IsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcmRtdWxoX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdnFkbXVsaHYyc2kgKF9fYSwgX19iLCA1KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJkbXVsaHFfczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92cWRtdWxodjhoaSAoX19hLCBfX2IsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcmRtdWxocV9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZxZG11bGh2NHNpIChfX2EsIF9fYiwgNSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bGxfczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92bXVsbHY4cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsbF9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZtdWxsdjRoaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxsX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdm11bGx2MnNpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxsX3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpX19idWlsdGluX25lb25fdm11bGx2OHFpICgoaW50OHg4X3QpIF9fYSwgKGludDh4OF90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsbF91MTYgKHVpbnQxNng0X3QgX19hLCB1aW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZtdWxsdjRoaSAoKGludDE2eDRfdCkgX19hLCAoaW50MTZ4NF90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsbF91MzIgKHVpbnQzMngyX3QgX19hLCB1aW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZtdWxsdjJzaSAoKGludDMyeDJfdCkgX19hLCAoaW50MzJ4Ml90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsbF9wOCAocG9seTh4OF90IF9fYSwgcG9seTh4OF90IF9fYikKK3sKKyAgcmV0dXJuIChwb2x5MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZtdWxsdjhxaSAoKGludDh4OF90KSBfX2EsIChpbnQ4eDhfdCkgX19iLCAyKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxsX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdnFkbXVsbHY0aGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxsX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnFkbXVsbHYyc2kgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFfczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iLCBpbnQ4eDhfdCBfX2MpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdm1sYXY4cWkgKF9fYSwgX19iLCBfX2MsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iLCBpbnQxNng0X3QgX19jKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92bWxhdjRoaSAoX19hLCBfX2IsIF9fYywgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYV9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IsIGludDMyeDJfdCBfX2MpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZtbGF2MnNpIChfX2EsIF9fYiwgX19jLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFfZjMyIChmbG9hdDMyeDJfdCBfX2EsIGZsb2F0MzJ4Ml90IF9fYiwgZmxvYXQzMngyX3QgX19jKQoreworICByZXR1cm4gKGZsb2F0MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZtbGF2MnNmIChfX2EsIF9fYiwgX19jLCAzKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhX3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iLCB1aW50OHg4X3QgX19jKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92bWxhdjhxaSAoKGludDh4OF90KSBfX2EsIChpbnQ4eDhfdCkgX19iLCAoaW50OHg4X3QpIF9fYywgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IsIHVpbnQxNng0X3QgX19jKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdm1sYXY0aGkgKChpbnQxNng0X3QpIF9fYSwgKGludDE2eDRfdCkgX19iLCAoaW50MTZ4NF90KSBfX2MsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iLCB1aW50MzJ4Ml90IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZtbGF2MnNpICgoaW50MzJ4Ml90KSBfX2EsIChpbnQzMngyX3QpIF9fYiwgKGludDMyeDJfdCkgX19jLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhcV9zOCAoaW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYiwgaW50OHgxNl90IF9fYykKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdm1sYXYxNnFpIChfX2EsIF9fYiwgX19jLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhcV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IsIGludDE2eDhfdCBfX2MpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZtbGF2OGhpIChfX2EsIF9fYiwgX19jLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhcV9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IsIGludDMyeDRfdCBfX2MpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZtbGF2NHNpIChfX2EsIF9fYiwgX19jLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFxX2YzMiAoZmxvYXQzMng0X3QgX19hLCBmbG9hdDMyeDRfdCBfX2IsIGZsb2F0MzJ4NF90IF9fYykKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDRfdClfX2J1aWx0aW5fbmVvbl92bWxhdjRzZiAoX19hLCBfX2IsIF9fYywgMyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFxX3U4ICh1aW50OHgxNl90IF9fYSwgdWludDh4MTZfdCBfX2IsIHVpbnQ4eDE2X3QgX19jKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdm1sYXYxNnFpICgoaW50OHgxNl90KSBfX2EsIChpbnQ4eDE2X3QpIF9fYiwgKGludDh4MTZfdCkgX19jLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYXFfdTE2ICh1aW50MTZ4OF90IF9fYSwgdWludDE2eDhfdCBfX2IsIHVpbnQxNng4X3QgX19jKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpX19idWlsdGluX25lb25fdm1sYXY4aGkgKChpbnQxNng4X3QpIF9fYSwgKGludDE2eDhfdCkgX19iLCAoaW50MTZ4OF90KSBfX2MsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhcV91MzIgKHVpbnQzMng0X3QgX19hLCB1aW50MzJ4NF90IF9fYiwgdWludDMyeDRfdCBfX2MpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92bWxhdjRzaSAoKGludDMyeDRfdCkgX19hLCAoaW50MzJ4NF90KSBfX2IsIChpbnQzMng0X3QpIF9fYywgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYWxfczggKGludDE2eDhfdCBfX2EsIGludDh4OF90IF9fYiwgaW50OHg4X3QgX19jKQoreworICByZXR1cm4gKGludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92bWxhbHY4cWkgKF9fYSwgX19iLCBfX2MsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFsX3MxNiAoaW50MzJ4NF90IF9fYSwgaW50MTZ4NF90IF9fYiwgaW50MTZ4NF90IF9fYykKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdm1sYWx2NGhpIChfX2EsIF9fYiwgX19jLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhbF9zMzIgKGludDY0eDJfdCBfX2EsIGludDMyeDJfdCBfX2IsIGludDMyeDJfdCBfX2MpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZtbGFsdjJzaSAoX19hLCBfX2IsIF9fYywgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFsX3U4ICh1aW50MTZ4OF90IF9fYSwgdWludDh4OF90IF9fYiwgdWludDh4OF90IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZtbGFsdjhxaSAoKGludDE2eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYiwgKGludDh4OF90KSBfX2MsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhbF91MTYgKHVpbnQzMng0X3QgX19hLCB1aW50MTZ4NF90IF9fYiwgdWludDE2eDRfdCBfX2MpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92bWxhbHY0aGkgKChpbnQzMng0X3QpIF9fYSwgKGludDE2eDRfdCkgX19iLCAoaW50MTZ4NF90KSBfX2MsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhbF91MzIgKHVpbnQ2NHgyX3QgX19hLCB1aW50MzJ4Ml90IF9fYiwgdWludDMyeDJfdCBfX2MpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92bWxhbHYyc2kgKChpbnQ2NHgyX3QpIF9fYSwgKGludDMyeDJfdCkgX19iLCAoaW50MzJ4Ml90KSBfX2MsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG1sYWxfczE2IChpbnQzMng0X3QgX19hLCBpbnQxNng0X3QgX19iLCBpbnQxNng0X3QgX19jKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cWRtbGFsdjRoaSAoX19hLCBfX2IsIF9fYywgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbWxhbF9zMzIgKGludDY0eDJfdCBfX2EsIGludDMyeDJfdCBfX2IsIGludDMyeDJfdCBfX2MpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZxZG1sYWx2MnNpIChfX2EsIF9fYiwgX19jLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNfczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iLCBpbnQ4eDhfdCBfX2MpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdm1sc3Y4cWkgKF9fYSwgX19iLCBfX2MsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iLCBpbnQxNng0X3QgX19jKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92bWxzdjRoaSAoX19hLCBfX2IsIF9fYywgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc19zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IsIGludDMyeDJfdCBfX2MpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZtbHN2MnNpIChfX2EsIF9fYiwgX19jLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNfZjMyIChmbG9hdDMyeDJfdCBfX2EsIGZsb2F0MzJ4Ml90IF9fYiwgZmxvYXQzMngyX3QgX19jKQoreworICByZXR1cm4gKGZsb2F0MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZtbHN2MnNmIChfX2EsIF9fYiwgX19jLCAzKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzX3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iLCB1aW50OHg4X3QgX19jKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92bWxzdjhxaSAoKGludDh4OF90KSBfX2EsIChpbnQ4eDhfdCkgX19iLCAoaW50OHg4X3QpIF9fYywgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IsIHVpbnQxNng0X3QgX19jKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdm1sc3Y0aGkgKChpbnQxNng0X3QpIF9fYSwgKGludDE2eDRfdCkgX19iLCAoaW50MTZ4NF90KSBfX2MsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iLCB1aW50MzJ4Ml90IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZtbHN2MnNpICgoaW50MzJ4Ml90KSBfX2EsIChpbnQzMngyX3QpIF9fYiwgKGludDMyeDJfdCkgX19jLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzcV9zOCAoaW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYiwgaW50OHgxNl90IF9fYykKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdm1sc3YxNnFpIChfX2EsIF9fYiwgX19jLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzcV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IsIGludDE2eDhfdCBfX2MpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZtbHN2OGhpIChfX2EsIF9fYiwgX19jLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzcV9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IsIGludDMyeDRfdCBfX2MpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZtbHN2NHNpIChfX2EsIF9fYiwgX19jLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNxX2YzMiAoZmxvYXQzMng0X3QgX19hLCBmbG9hdDMyeDRfdCBfX2IsIGZsb2F0MzJ4NF90IF9fYykKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDRfdClfX2J1aWx0aW5fbmVvbl92bWxzdjRzZiAoX19hLCBfX2IsIF9fYywgMyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNxX3U4ICh1aW50OHgxNl90IF9fYSwgdWludDh4MTZfdCBfX2IsIHVpbnQ4eDE2X3QgX19jKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdm1sc3YxNnFpICgoaW50OHgxNl90KSBfX2EsIChpbnQ4eDE2X3QpIF9fYiwgKGludDh4MTZfdCkgX19jLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc3FfdTE2ICh1aW50MTZ4OF90IF9fYSwgdWludDE2eDhfdCBfX2IsIHVpbnQxNng4X3QgX19jKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpX19idWlsdGluX25lb25fdm1sc3Y4aGkgKChpbnQxNng4X3QpIF9fYSwgKGludDE2eDhfdCkgX19iLCAoaW50MTZ4OF90KSBfX2MsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzcV91MzIgKHVpbnQzMng0X3QgX19hLCB1aW50MzJ4NF90IF9fYiwgdWludDMyeDRfdCBfX2MpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92bWxzdjRzaSAoKGludDMyeDRfdCkgX19hLCAoaW50MzJ4NF90KSBfX2IsIChpbnQzMng0X3QpIF9fYywgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc2xfczggKGludDE2eDhfdCBfX2EsIGludDh4OF90IF9fYiwgaW50OHg4X3QgX19jKQoreworICByZXR1cm4gKGludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92bWxzbHY4cWkgKF9fYSwgX19iLCBfX2MsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNsX3MxNiAoaW50MzJ4NF90IF9fYSwgaW50MTZ4NF90IF9fYiwgaW50MTZ4NF90IF9fYykKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdm1sc2x2NGhpIChfX2EsIF9fYiwgX19jLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzbF9zMzIgKGludDY0eDJfdCBfX2EsIGludDMyeDJfdCBfX2IsIGludDMyeDJfdCBfX2MpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZtbHNsdjJzaSAoX19hLCBfX2IsIF9fYywgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNsX3U4ICh1aW50MTZ4OF90IF9fYSwgdWludDh4OF90IF9fYiwgdWludDh4OF90IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZtbHNsdjhxaSAoKGludDE2eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYiwgKGludDh4OF90KSBfX2MsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzbF91MTYgKHVpbnQzMng0X3QgX19hLCB1aW50MTZ4NF90IF9fYiwgdWludDE2eDRfdCBfX2MpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92bWxzbHY0aGkgKChpbnQzMng0X3QpIF9fYSwgKGludDE2eDRfdCkgX19iLCAoaW50MTZ4NF90KSBfX2MsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzbF91MzIgKHVpbnQ2NHgyX3QgX19hLCB1aW50MzJ4Ml90IF9fYiwgdWludDMyeDJfdCBfX2MpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92bWxzbHYyc2kgKChpbnQ2NHgyX3QpIF9fYSwgKGludDMyeDJfdCkgX19iLCAoaW50MzJ4Ml90KSBfX2MsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG1sc2xfczE2IChpbnQzMng0X3QgX19hLCBpbnQxNng0X3QgX19iLCBpbnQxNng0X3QgX19jKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cWRtbHNsdjRoaSAoX19hLCBfX2IsIF9fYywgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbWxzbF9zMzIgKGludDY0eDJfdCBfX2EsIGludDMyeDJfdCBfX2IsIGludDMyeDJfdCBfX2MpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZxZG1sc2x2MnNpIChfX2EsIF9fYiwgX19jLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJfczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZzdWJ2OHFpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1Yl9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZzdWJ2NGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1Yl9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZzdWJ2MnNpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1Yl9zNjQgKGludDY0eDFfdCBfX2EsIGludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZzdWJkaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1Yl9mMzIgKGZsb2F0MzJ4Ml90IF9fYSwgZmxvYXQzMngyX3QgX19iKQoreworICByZXR1cm4gKGZsb2F0MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZzdWJ2MnNmIChfX2EsIF9fYiwgMyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1Yl91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdnN1YnY4cWkgKChpbnQ4eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92c3VidjRoaSAoKGludDE2eDRfdCkgX19hLCAoaW50MTZ4NF90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3ViX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnN1YnYyc2kgKChpbnQzMngyX3QpIF9fYSwgKGludDMyeDJfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1Yl91NjQgKHVpbnQ2NHgxX3QgX19hLCB1aW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZzdWJkaSAoKGludDY0eDFfdCkgX19hLCAoaW50NjR4MV90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJxX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92c3VidjE2cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3VicV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZzdWJ2OGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1YnFfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92c3VidjRzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJxX3M2NCAoaW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnN1YnYyZGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJxX2YzMiAoZmxvYXQzMng0X3QgX19hLCBmbG9hdDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAoZmxvYXQzMng0X3QpX19idWlsdGluX25lb25fdnN1YnY0c2YgKF9fYSwgX19iLCAzKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1YnFfdTggKHVpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZzdWJ2MTZxaSAoKGludDh4MTZfdCkgX19hLCAoaW50OHgxNl90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3VicV91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZzdWJ2OGhpICgoaW50MTZ4OF90KSBfX2EsIChpbnQxNng4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJxX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdnN1YnY0c2kgKChpbnQzMng0X3QpIF9fYSwgKGludDMyeDRfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1YnFfdTY0ICh1aW50NjR4Ml90IF9fYSwgdWludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92c3VidjJkaSAoKGludDY0eDJfdCkgX19hLCAoaW50NjR4Ml90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJsX3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpX19idWlsdGluX25lb25fdnN1Ymx2OHFpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1YmxfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92c3VibHY0aGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3VibF9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZzdWJsdjJzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3VibF91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZzdWJsdjhxaSAoKGludDh4OF90KSBfX2EsIChpbnQ4eDhfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1YmxfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92c3VibHY0aGkgKChpbnQxNng0X3QpIF9fYSwgKGludDE2eDRfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1YmxfdTMyICh1aW50MzJ4Ml90IF9fYSwgdWludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92c3VibHYyc2kgKChpbnQzMngyX3QpIF9fYSwgKGludDMyeDJfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3Vid19zOCAoaW50MTZ4OF90IF9fYSwgaW50OHg4X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92c3Vid3Y4cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3Vid19zMTYgKGludDMyeDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZzdWJ3djRoaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJ3X3MzMiAoaW50NjR4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnN1Ynd2MnNpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJ3X3U4ICh1aW50MTZ4OF90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZzdWJ3djhxaSAoKGludDE2eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJ3X3UxNiAodWludDMyeDRfdCBfX2EsIHVpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdnN1Ynd2NGhpICgoaW50MzJ4NF90KSBfX2EsIChpbnQxNng0X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJ3X3UzMiAodWludDY0eDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnN1Ynd2MnNpICgoaW50NjR4Ml90KSBfX2EsIChpbnQzMngyX3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2aHN1Yl9zOCAoaW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdmhzdWJ2OHFpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmhzdWJfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92aHN1YnY0aGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2aHN1Yl9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3Zoc3VidjJzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zoc3ViX3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92aHN1YnY4cWkgKChpbnQ4eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zoc3ViX3UxNiAodWludDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdmhzdWJ2NGhpICgoaW50MTZ4NF90KSBfX2EsIChpbnQxNng0X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zoc3ViX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdmhzdWJ2MnNpICgoaW50MzJ4Ml90KSBfX2EsIChpbnQzMngyX3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmhzdWJxX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92aHN1YnYxNnFpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmhzdWJxX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpX19idWlsdGluX25lb25fdmhzdWJ2OGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmhzdWJxX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdmhzdWJ2NHNpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zoc3VicV91OCAodWludDh4MTZfdCBfX2EsIHVpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdmhzdWJ2MTZxaSAoKGludDh4MTZfdCkgX19hLCAoaW50OHgxNl90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2aHN1YnFfdTE2ICh1aW50MTZ4OF90IF9fYSwgdWludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92aHN1YnY4aGkgKChpbnQxNng4X3QpIF9fYSwgKGludDE2eDhfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmhzdWJxX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdmhzdWJ2NHNpICgoaW50MzJ4NF90KSBfX2EsIChpbnQzMng0X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXN1Yl9zOCAoaW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdnFzdWJ2OHFpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzdWJfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92cXN1YnY0aGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXN1Yl9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3Zxc3VidjJzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc3ViX3M2NCAoaW50NjR4MV90IF9fYSwgaW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdnFzdWJkaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc3ViX3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92cXN1YnY4cWkgKChpbnQ4eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc3ViX3UxNiAodWludDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdnFzdWJ2NGhpICgoaW50MTZ4NF90KSBfX2EsIChpbnQxNng0X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc3ViX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnFzdWJ2MnNpICgoaW50MzJ4Ml90KSBfX2EsIChpbnQzMngyX3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc3ViX3U2NCAodWludDY0eDFfdCBfX2EsIHVpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdnFzdWJkaSAoKGludDY0eDFfdCkgX19hLCAoaW50NjR4MV90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc3VicV9zOCAoaW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdnFzdWJ2MTZxaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc3VicV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3Zxc3VidjhoaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc3VicV9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3Zxc3VidjRzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc3VicV9zNjQgKGludDY0eDJfdCBfX2EsIGludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3Zxc3VidjJkaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXN1YnFfdTggKHVpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3Zxc3VidjE2cWkgKChpbnQ4eDE2X3QpIF9fYSwgKGludDh4MTZfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzdWJxX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpX19idWlsdGluX25lb25fdnFzdWJ2OGhpICgoaW50MTZ4OF90KSBfX2EsIChpbnQxNng4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc3VicV91MzIgKHVpbnQzMng0X3QgX19hLCB1aW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3Zxc3VidjRzaSAoKGludDMyeDRfdCkgX19hLCAoaW50MzJ4NF90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXN1YnFfdTY0ICh1aW50NjR4Ml90IF9fYSwgdWludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92cXN1YnYyZGkgKChpbnQ2NHgyX3QpIF9fYSwgKGludDY0eDJfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJobl9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdnN1YmhudjhoaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJobl9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZzdWJobnY0c2kgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3ViaG5fczY0IChpbnQ2NHgyX3QgX19hLCBpbnQ2NHgyX3QgX19iKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92c3ViaG52MmRpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1YmhuX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92c3ViaG52OGhpICgoaW50MTZ4OF90KSBfX2EsIChpbnQxNng4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJobl91MzIgKHVpbnQzMng0X3QgX19hLCB1aW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZzdWJobnY0c2kgKChpbnQzMng0X3QpIF9fYSwgKGludDMyeDRfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1YmhuX3U2NCAodWludDY0eDJfdCBfX2EsIHVpbnQ2NHgyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnN1YmhudjJkaSAoKGludDY0eDJfdCkgX19hLCAoaW50NjR4Ml90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzdWJobl9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdnN1YmhudjhoaSAoX19hLCBfX2IsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc3ViaG5fczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92c3ViaG52NHNpIChfX2EsIF9fYiwgNSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzdWJobl9zNjQgKGludDY0eDJfdCBfX2EsIGludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZzdWJobnYyZGkgKF9fYSwgX19iLCA1KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnN1YmhuX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92c3ViaG52OGhpICgoaW50MTZ4OF90KSBfX2EsIChpbnQxNng4X3QpIF9fYiwgNCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc3ViaG5fdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92c3ViaG52NHNpICgoaW50MzJ4NF90KSBfX2EsIChpbnQzMng0X3QpIF9fYiwgNCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc3ViaG5fdTY0ICh1aW50NjR4Ml90IF9fYSwgdWludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92c3ViaG52MmRpICgoaW50NjR4Ml90KSBfX2EsIChpbnQ2NHgyX3QpIF9fYiwgNCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNlcV9zOCAoaW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZjZXF2OHFpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZXFfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdmNlcXY0aGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNlcV9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92Y2VxdjJzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2VxX2YzMiAoZmxvYXQzMngyX3QgX19hLCBmbG9hdDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92Y2VxdjJzZiAoX19hLCBfX2IsIDMpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZXFfdTggKHVpbnQ4eDhfdCBfX2EsIHVpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZjZXF2OHFpICgoaW50OHg4X3QpIF9fYSwgKGludDh4OF90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2VxX3UxNiAodWludDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdmNlcXY0aGkgKChpbnQxNng0X3QpIF9fYSwgKGludDE2eDRfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNlcV91MzIgKHVpbnQzMngyX3QgX19hLCB1aW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZjZXF2MnNpICgoaW50MzJ4Ml90KSBfX2EsIChpbnQzMngyX3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNlcV9wOCAocG9seTh4OF90IF9fYSwgcG9seTh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdmNlcXY4cWkgKChpbnQ4eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYiwgMik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZXFxX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdmNlcXYxNnFpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZXFxX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZjZXF2OGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZXFxX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZjZXF2NHNpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZXFxX2YzMiAoZmxvYXQzMng0X3QgX19hLCBmbG9hdDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92Y2VxdjRzZiAoX19hLCBfX2IsIDMpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2VxcV91OCAodWludDh4MTZfdCBfX2EsIHVpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdmNlcXYxNnFpICgoaW50OHgxNl90KSBfX2EsIChpbnQ4eDE2X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZXFxX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpX19idWlsdGluX25lb25fdmNlcXY4aGkgKChpbnQxNng4X3QpIF9fYSwgKGludDE2eDhfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNlcXFfdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92Y2VxdjRzaSAoKGludDMyeDRfdCkgX19hLCAoaW50MzJ4NF90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2VxcV9wOCAocG9seTh4MTZfdCBfX2EsIHBvbHk4eDE2X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdmNlcXYxNnFpICgoaW50OHgxNl90KSBfX2EsIChpbnQ4eDE2X3QpIF9fYiwgMik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNnZV9zOCAoaW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZjZ2V2OHFpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ2VfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdmNnZXY0aGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNnZV9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92Y2dldjJzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2dlX2YzMiAoZmxvYXQzMngyX3QgX19hLCBmbG9hdDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92Y2dldjJzZiAoX19hLCBfX2IsIDMpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ2VfdTggKHVpbnQ4eDhfdCBfX2EsIHVpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZjZ2V2OHFpICgoaW50OHg4X3QpIF9fYSwgKGludDh4OF90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2dlX3UxNiAodWludDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdmNnZXY0aGkgKChpbnQxNng0X3QpIF9fYSwgKGludDE2eDRfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNnZV91MzIgKHVpbnQzMngyX3QgX19hLCB1aW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZjZ2V2MnNpICgoaW50MzJ4Ml90KSBfX2EsIChpbnQzMngyX3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ2VxX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdmNnZXYxNnFpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ2VxX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZjZ2V2OGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ2VxX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZjZ2V2NHNpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ2VxX2YzMiAoZmxvYXQzMng0X3QgX19hLCBmbG9hdDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92Y2dldjRzZiAoX19hLCBfX2IsIDMpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2dlcV91OCAodWludDh4MTZfdCBfX2EsIHVpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdmNnZXYxNnFpICgoaW50OHgxNl90KSBfX2EsIChpbnQ4eDE2X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ2VxX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpX19idWlsdGluX25lb25fdmNnZXY4aGkgKChpbnQxNng4X3QpIF9fYSwgKGludDE2eDhfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNnZXFfdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92Y2dldjRzaSAoKGludDMyeDRfdCkgX19hLCAoaW50MzJ4NF90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbGVfczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92Y2dldjhxaSAoX19iLCBfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xlX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZjZ2V2NGhpIChfX2IsIF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbGVfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdmNnZXYyc2kgKF9fYiwgX19hLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsZV9mMzIgKGZsb2F0MzJ4Ml90IF9fYSwgZmxvYXQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdmNnZXYyc2YgKF9fYiwgX19hLCAzKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xlX3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92Y2dldjhxaSAoKGludDh4OF90KSBfX2IsIChpbnQ4eDhfdCkgX19hLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsZV91MTYgKHVpbnQxNng0X3QgX19hLCB1aW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZjZ2V2NGhpICgoaW50MTZ4NF90KSBfX2IsIChpbnQxNng0X3QpIF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbGVfdTMyICh1aW50MzJ4Ml90IF9fYSwgdWludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92Y2dldjJzaSAoKGludDMyeDJfdCkgX19iLCAoaW50MzJ4Ml90KSBfX2EsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xlcV9zOCAoaW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZjZ2V2MTZxaSAoX19iLCBfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xlcV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92Y2dldjhoaSAoX19iLCBfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xlcV9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92Y2dldjRzaSAoX19iLCBfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xlcV9mMzIgKGZsb2F0MzJ4NF90IF9fYSwgZmxvYXQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdmNnZXY0c2YgKF9fYiwgX19hLCAzKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsZXFfdTggKHVpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZjZ2V2MTZxaSAoKGludDh4MTZfdCkgX19iLCAoaW50OHgxNl90KSBfX2EsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xlcV91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZjZ2V2OGhpICgoaW50MTZ4OF90KSBfX2IsIChpbnQxNng4X3QpIF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbGVxX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdmNnZXY0c2kgKChpbnQzMng0X3QpIF9fYiwgKGludDMyeDRfdCkgX19hLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2d0X3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdmNndHY4cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNndF9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92Y2d0djRoaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2d0X3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZjZ3R2MnNpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ3RfZjMyIChmbG9hdDMyeDJfdCBfX2EsIGZsb2F0MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZjZ3R2MnNmIChfX2EsIF9fYiwgMyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNndF91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdmNndHY4cWkgKChpbnQ4eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ3RfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92Y2d0djRoaSAoKGludDE2eDRfdCkgX19hLCAoaW50MTZ4NF90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2d0X3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdmNndHYyc2kgKChpbnQzMngyX3QpIF9fYSwgKGludDMyeDJfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNndHFfczggKGludDh4MTZfdCBfX2EsIGludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92Y2d0djE2cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNndHFfczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpX19idWlsdGluX25lb25fdmNndHY4aGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNndHFfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdmNndHY0c2kgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNndHFfZjMyIChmbG9hdDMyeDRfdCBfX2EsIGZsb2F0MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZjZ3R2NHNmIChfX2EsIF9fYiwgMyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ3RxX3U4ICh1aW50OHgxNl90IF9fYSwgdWludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92Y2d0djE2cWkgKChpbnQ4eDE2X3QpIF9fYSwgKGludDh4MTZfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNndHFfdTE2ICh1aW50MTZ4OF90IF9fYSwgdWludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92Y2d0djhoaSAoKGludDE2eDhfdCkgX19hLCAoaW50MTZ4OF90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2d0cV91MzIgKHVpbnQzMng0X3QgX19hLCB1aW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZjZ3R2NHNpICgoaW50MzJ4NF90KSBfX2EsIChpbnQzMng0X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsdF9zOCAoaW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZjZ3R2OHFpIChfX2IsIF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHRfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdmNndHY0aGkgKF9fYiwgX19hLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsdF9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92Y2d0djJzaSAoX19iLCBfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x0X2YzMiAoZmxvYXQzMngyX3QgX19hLCBmbG9hdDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92Y2d0djJzZiAoX19iLCBfX2EsIDMpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHRfdTggKHVpbnQ4eDhfdCBfX2EsIHVpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZjZ3R2OHFpICgoaW50OHg4X3QpIF9fYiwgKGludDh4OF90KSBfX2EsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x0X3UxNiAodWludDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdmNndHY0aGkgKChpbnQxNng0X3QpIF9fYiwgKGludDE2eDRfdCkgX19hLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsdF91MzIgKHVpbnQzMngyX3QgX19hLCB1aW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZjZ3R2MnNpICgoaW50MzJ4Ml90KSBfX2IsIChpbnQzMngyX3QpIF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHRxX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdmNndHYxNnFpIChfX2IsIF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHRxX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZjZ3R2OGhpIChfX2IsIF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHRxX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZjZ3R2NHNpIChfX2IsIF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHRxX2YzMiAoZmxvYXQzMng0X3QgX19hLCBmbG9hdDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92Y2d0djRzZiAoX19iLCBfX2EsIDMpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x0cV91OCAodWludDh4MTZfdCBfX2EsIHVpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdmNndHYxNnFpICgoaW50OHgxNl90KSBfX2IsIChpbnQ4eDE2X3QpIF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHRxX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpX19idWlsdGluX25lb25fdmNndHY4aGkgKChpbnQxNng4X3QpIF9fYiwgKGludDE2eDhfdCkgX19hLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsdHFfdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92Y2d0djRzaSAoKGludDMyeDRfdCkgX19iLCAoaW50MzJ4NF90KSBfX2EsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2FnZV9mMzIgKGZsb2F0MzJ4Ml90IF9fYSwgZmxvYXQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdmNhZ2V2MnNmIChfX2EsIF9fYiwgMyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjYWdlcV9mMzIgKGZsb2F0MzJ4NF90IF9fYSwgZmxvYXQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdmNhZ2V2NHNmIChfX2EsIF9fYiwgMyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjYWxlX2YzMiAoZmxvYXQzMngyX3QgX19hLCBmbG9hdDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92Y2FnZXYyc2YgKF9fYiwgX19hLCAzKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNhbGVxX2YzMiAoZmxvYXQzMng0X3QgX19hLCBmbG9hdDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92Y2FnZXY0c2YgKF9fYiwgX19hLCAzKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNhZ3RfZjMyIChmbG9hdDMyeDJfdCBfX2EsIGZsb2F0MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZjYWd0djJzZiAoX19hLCBfX2IsIDMpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2FndHFfZjMyIChmbG9hdDMyeDRfdCBfX2EsIGZsb2F0MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZjYWd0djRzZiAoX19hLCBfX2IsIDMpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2FsdF9mMzIgKGZsb2F0MzJ4Ml90IF9fYSwgZmxvYXQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdmNhZ3R2MnNmIChfX2IsIF9fYSwgMyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjYWx0cV9mMzIgKGZsb2F0MzJ4NF90IF9fYSwgZmxvYXQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdmNhZ3R2NHNmIChfX2IsIF9fYSwgMyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRzdF9zOCAoaW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3Z0c3R2OHFpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0c3RfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdnRzdHY0aGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRzdF9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92dHN0djJzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0c3RfdTggKHVpbnQ4eDhfdCBfX2EsIHVpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3Z0c3R2OHFpICgoaW50OHg4X3QpIF9fYSwgKGludDh4OF90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHN0X3UxNiAodWludDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdnRzdHY0aGkgKChpbnQxNng0X3QpIF9fYSwgKGludDE2eDRfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRzdF91MzIgKHVpbnQzMngyX3QgX19hLCB1aW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3Z0c3R2MnNpICgoaW50MzJ4Ml90KSBfX2EsIChpbnQzMngyX3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRzdF9wOCAocG9seTh4OF90IF9fYSwgcG9seTh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdnRzdHY4cWkgKChpbnQ4eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYiwgMik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0c3RxX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdnRzdHYxNnFpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0c3RxX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3Z0c3R2OGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0c3RxX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3Z0c3R2NHNpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0c3RxX3U4ICh1aW50OHgxNl90IF9fYSwgdWludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92dHN0djE2cWkgKChpbnQ4eDE2X3QpIF9fYSwgKGludDh4MTZfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRzdHFfdTE2ICh1aW50MTZ4OF90IF9fYSwgdWludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92dHN0djhoaSAoKGludDE2eDhfdCkgX19hLCAoaW50MTZ4OF90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHN0cV91MzIgKHVpbnQzMng0X3QgX19hLCB1aW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3Z0c3R2NHNpICgoaW50MzJ4NF90KSBfX2EsIChpbnQzMng0X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0c3RxX3A4IChwb2x5OHgxNl90IF9fYSwgcG9seTh4MTZfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92dHN0djE2cWkgKChpbnQ4eDE2X3QpIF9fYSwgKGludDh4MTZfdCkgX19iLCAyKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmRfczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZhYmR2OHFpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiZF9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZhYmR2NGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiZF9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZhYmR2MnNpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJkX2YzMiAoZmxvYXQzMngyX3QgX19hLCBmbG9hdDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAoZmxvYXQzMngyX3QpX19idWlsdGluX25lb25fdmFiZHYyc2YgKF9fYSwgX19iLCAzKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJkX3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92YWJkdjhxaSAoKGludDh4OF90KSBfX2EsIChpbnQ4eDhfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiZF91MTYgKHVpbnQxNng0X3QgX19hLCB1aW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZhYmR2NGhpICgoaW50MTZ4NF90KSBfX2EsIChpbnQxNng0X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmRfdTMyICh1aW50MzJ4Ml90IF9fYSwgdWludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92YWJkdjJzaSAoKGludDMyeDJfdCkgX19hLCAoaW50MzJ4Ml90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmRxX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92YWJkdjE2cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJkcV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZhYmR2OGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiZHFfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92YWJkdjRzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiZHFfZjMyIChmbG9hdDMyeDRfdCBfX2EsIGZsb2F0MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDRfdClfX2J1aWx0aW5fbmVvbl92YWJkdjRzZiAoX19hLCBfX2IsIDMpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJkcV91OCAodWludDh4MTZfdCBfX2EsIHVpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdmFiZHYxNnFpICgoaW50OHgxNl90KSBfX2EsIChpbnQ4eDE2X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmRxX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpX19idWlsdGluX25lb25fdmFiZHY4aGkgKChpbnQxNng4X3QpIF9fYSwgKGludDE2eDhfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiZHFfdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92YWJkdjRzaSAoKGludDMyeDRfdCkgX19hLCAoaW50MzJ4NF90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmRsX3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpX19idWlsdGluX25lb25fdmFiZGx2OHFpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiZGxfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92YWJkbHY0aGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJkbF9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZhYmRsdjJzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJkbF91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZhYmRsdjhxaSAoKGludDh4OF90KSBfX2EsIChpbnQ4eDhfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiZGxfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92YWJkbHY0aGkgKChpbnQxNng0X3QpIF9fYSwgKGludDE2eDRfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiZGxfdTMyICh1aW50MzJ4Ml90IF9fYSwgdWludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92YWJkbHYyc2kgKChpbnQzMngyX3QpIF9fYSwgKGludDMyeDJfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmFfczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iLCBpbnQ4eDhfdCBfX2MpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdmFiYXY4cWkgKF9fYSwgX19iLCBfX2MsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmFfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iLCBpbnQxNng0X3QgX19jKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92YWJhdjRoaSAoX19hLCBfX2IsIF9fYywgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiYV9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IsIGludDMyeDJfdCBfX2MpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZhYmF2MnNpIChfX2EsIF9fYiwgX19jLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJhX3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iLCB1aW50OHg4X3QgX19jKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92YWJhdjhxaSAoKGludDh4OF90KSBfX2EsIChpbnQ4eDhfdCkgX19iLCAoaW50OHg4X3QpIF9fYywgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmFfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IsIHVpbnQxNng0X3QgX19jKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdmFiYXY0aGkgKChpbnQxNng0X3QpIF9fYSwgKGludDE2eDRfdCkgX19iLCAoaW50MTZ4NF90KSBfX2MsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJhX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iLCB1aW50MzJ4Ml90IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZhYmF2MnNpICgoaW50MzJ4Ml90KSBfX2EsIChpbnQzMngyX3QpIF9fYiwgKGludDMyeDJfdCkgX19jLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJhcV9zOCAoaW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYiwgaW50OHgxNl90IF9fYykKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdmFiYXYxNnFpIChfX2EsIF9fYiwgX19jLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJhcV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IsIGludDE2eDhfdCBfX2MpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZhYmF2OGhpIChfX2EsIF9fYiwgX19jLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJhcV9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IsIGludDMyeDRfdCBfX2MpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZhYmF2NHNpIChfX2EsIF9fYiwgX19jLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiYXFfdTggKHVpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYiwgdWludDh4MTZfdCBfX2MpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92YWJhdjE2cWkgKChpbnQ4eDE2X3QpIF9fYSwgKGludDh4MTZfdCkgX19iLCAoaW50OHgxNl90KSBfX2MsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJhcV91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYiwgdWludDE2eDhfdCBfX2MpCit7CisgIHJldHVybiAodWludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92YWJhdjhoaSAoKGludDE2eDhfdCkgX19hLCAoaW50MTZ4OF90KSBfX2IsIChpbnQxNng4X3QpIF9fYywgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmFxX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iLCB1aW50MzJ4NF90IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZhYmF2NHNpICgoaW50MzJ4NF90KSBfX2EsIChpbnQzMng0X3QpIF9fYiwgKGludDMyeDRfdCkgX19jLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJhbF9zOCAoaW50MTZ4OF90IF9fYSwgaW50OHg4X3QgX19iLCBpbnQ4eDhfdCBfX2MpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZhYmFsdjhxaSAoX19hLCBfX2IsIF9fYywgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiYWxfczE2IChpbnQzMng0X3QgX19hLCBpbnQxNng0X3QgX19iLCBpbnQxNng0X3QgX19jKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92YWJhbHY0aGkgKF9fYSwgX19iLCBfX2MsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmFsX3MzMiAoaW50NjR4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYiwgaW50MzJ4Ml90IF9fYykKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdmFiYWx2MnNpIChfX2EsIF9fYiwgX19jLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiYWxfdTggKHVpbnQxNng4X3QgX19hLCB1aW50OHg4X3QgX19iLCB1aW50OHg4X3QgX19jKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpX19idWlsdGluX25lb25fdmFiYWx2OHFpICgoaW50MTZ4OF90KSBfX2EsIChpbnQ4eDhfdCkgX19iLCAoaW50OHg4X3QpIF9fYywgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmFsX3UxNiAodWludDMyeDRfdCBfX2EsIHVpbnQxNng0X3QgX19iLCB1aW50MTZ4NF90IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZhYmFsdjRoaSAoKGludDMyeDRfdCkgX19hLCAoaW50MTZ4NF90KSBfX2IsIChpbnQxNng0X3QpIF9fYywgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmFsX3UzMiAodWludDY0eDJfdCBfX2EsIHVpbnQzMngyX3QgX19iLCB1aW50MzJ4Ml90IF9fYykKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZhYmFsdjJzaSAoKGludDY0eDJfdCkgX19hLCAoaW50MzJ4Ml90KSBfX2IsIChpbnQzMngyX3QpIF9fYywgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWF4X3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92bWF4djhxaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtYXhfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92bWF4djRoaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtYXhfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92bWF4djJzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1heF9mMzIgKGZsb2F0MzJ4Ml90IF9fYSwgZmxvYXQzMngyX3QgX19iKQoreworICByZXR1cm4gKGZsb2F0MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZtYXh2MnNmIChfX2EsIF9fYiwgMyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1heF91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdm1heHY4cWkgKChpbnQ4eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtYXhfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92bWF4djRoaSAoKGludDE2eDRfdCkgX19hLCAoaW50MTZ4NF90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWF4X3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdm1heHYyc2kgKChpbnQzMngyX3QpIF9fYSwgKGludDMyeDJfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWF4cV9zOCAoaW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdm1heHYxNnFpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1heHFfczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92bWF4djhoaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtYXhxX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdm1heHY0c2kgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtYXhxX2YzMiAoZmxvYXQzMng0X3QgX19hLCBmbG9hdDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAoZmxvYXQzMng0X3QpX19idWlsdGluX25lb25fdm1heHY0c2YgKF9fYSwgX19iLCAzKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1heHFfdTggKHVpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZtYXh2MTZxaSAoKGludDh4MTZfdCkgX19hLCAoaW50OHgxNl90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWF4cV91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZtYXh2OGhpICgoaW50MTZ4OF90KSBfX2EsIChpbnQxNng4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtYXhxX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdm1heHY0c2kgKChpbnQzMng0X3QpIF9fYSwgKGludDMyeDRfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtaW5fczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZtaW52OHFpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1pbl9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZtaW52NGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1pbl9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZtaW52MnNpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWluX2YzMiAoZmxvYXQzMngyX3QgX19hLCBmbG9hdDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAoZmxvYXQzMngyX3QpX19idWlsdGluX25lb25fdm1pbnYyc2YgKF9fYSwgX19iLCAzKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWluX3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92bWludjhxaSAoKGludDh4OF90KSBfX2EsIChpbnQ4eDhfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1pbl91MTYgKHVpbnQxNng0X3QgX19hLCB1aW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZtaW52NGhpICgoaW50MTZ4NF90KSBfX2EsIChpbnQxNng0X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtaW5fdTMyICh1aW50MzJ4Ml90IF9fYSwgdWludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92bWludjJzaSAoKGludDMyeDJfdCkgX19hLCAoaW50MzJ4Ml90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtaW5xX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92bWludjE2cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWlucV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZtaW52OGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1pbnFfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92bWludjRzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1pbnFfZjMyIChmbG9hdDMyeDRfdCBfX2EsIGZsb2F0MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDRfdClfX2J1aWx0aW5fbmVvbl92bWludjRzZiAoX19hLCBfX2IsIDMpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWlucV91OCAodWludDh4MTZfdCBfX2EsIHVpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdm1pbnYxNnFpICgoaW50OHgxNl90KSBfX2EsIChpbnQ4eDE2X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtaW5xX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpX19idWlsdGluX25lb25fdm1pbnY4aGkgKChpbnQxNng4X3QpIF9fYSwgKGludDE2eDhfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1pbnFfdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92bWludjRzaSAoKGludDMyeDRfdCkgX19hLCAoaW50MzJ4NF90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGRfczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZwYWRkdjhxaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwYWRkX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdnBhZGR2NGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGRfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cGFkZHYyc2kgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwYWRkX2YzMiAoZmxvYXQzMngyX3QgX19hLCBmbG9hdDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAoZmxvYXQzMngyX3QpX19idWlsdGluX25lb25fdnBhZGR2MnNmIChfX2EsIF9fYiwgMyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGRfdTggKHVpbnQ4eDhfdCBfX2EsIHVpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZwYWRkdjhxaSAoKGludDh4OF90KSBfX2EsIChpbnQ4eDhfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGRfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92cGFkZHY0aGkgKChpbnQxNng0X3QpIF9fYSwgKGludDE2eDRfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGRfdTMyICh1aW50MzJ4Ml90IF9fYSwgdWludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cGFkZHYyc2kgKChpbnQzMngyX3QpIF9fYSwgKGludDMyeDJfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkZGxfczggKGludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdnBhZGRsdjhxaSAoX19hLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkZGxfczE2IChpbnQxNng0X3QgX19hKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cGFkZGx2NGhpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwYWRkbF9zMzIgKGludDMyeDJfdCBfX2EpCit7CisgIHJldHVybiAoaW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZwYWRkbHYyc2kgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwYWRkbF91OCAodWludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZwYWRkbHY4cWkgKChpbnQ4eDhfdCkgX19hLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGRsX3UxNiAodWludDE2eDRfdCBfX2EpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cGFkZGx2NGhpICgoaW50MTZ4NF90KSBfX2EsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkZGxfdTMyICh1aW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZwYWRkbHYyc2kgKChpbnQzMngyX3QpIF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGRscV9zOCAoaW50OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpX19idWlsdGluX25lb25fdnBhZGRsdjE2cWkgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGRscV9zMTYgKGludDE2eDhfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZwYWRkbHY4aGkgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGRscV9zMzIgKGludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZwYWRkbHY0c2kgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwYWRkbHFfdTggKHVpbnQ4eDE2X3QgX19hKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpX19idWlsdGluX25lb25fdnBhZGRsdjE2cWkgKChpbnQ4eDE2X3QpIF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwYWRkbHFfdTE2ICh1aW50MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZwYWRkbHY4aGkgKChpbnQxNng4X3QpIF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwYWRkbHFfdTMyICh1aW50MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZwYWRkbHY0c2kgKChpbnQzMng0X3QpIF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGFsX3M4IChpbnQxNng0X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZwYWRhbHY4cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkYWxfczE2IChpbnQzMngyX3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cGFkYWx2NGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGFsX3MzMiAoaW50NjR4MV90IF9fYSwgaW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdnBhZGFsdjJzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkYWxfdTggKHVpbnQxNng0X3QgX19hLCB1aW50OHg4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdnBhZGFsdjhxaSAoKGludDE2eDRfdCkgX19hLCAoaW50OHg4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwYWRhbF91MTYgKHVpbnQzMngyX3QgX19hLCB1aW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZwYWRhbHY0aGkgKChpbnQzMngyX3QpIF9fYSwgKGludDE2eDRfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGFsX3UzMiAodWludDY0eDFfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdnBhZGFsdjJzaSAoKGludDY0eDFfdCkgX19hLCAoaW50MzJ4Ml90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwYWRhbHFfczggKGludDE2eDhfdCBfX2EsIGludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZwYWRhbHYxNnFpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGFscV9zMTYgKGludDMyeDRfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZwYWRhbHY4aGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkYWxxX3MzMiAoaW50NjR4Ml90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnBhZGFsdjRzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkYWxxX3U4ICh1aW50MTZ4OF90IF9fYSwgdWludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92cGFkYWx2MTZxaSAoKGludDE2eDhfdCkgX19hLCAoaW50OHgxNl90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkYWxxX3UxNiAodWludDMyeDRfdCBfX2EsIHVpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdnBhZGFsdjhoaSAoKGludDMyeDRfdCkgX19hLCAoaW50MTZ4OF90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkYWxxX3UzMiAodWludDY0eDJfdCBfX2EsIHVpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnBhZGFsdjRzaSAoKGludDY0eDJfdCkgX19hLCAoaW50MzJ4NF90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBtYXhfczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZwbWF4djhxaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwbWF4X3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdnBtYXh2NGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBtYXhfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cG1heHYyc2kgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwbWF4X2YzMiAoZmxvYXQzMngyX3QgX19hLCBmbG9hdDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAoZmxvYXQzMngyX3QpX19idWlsdGluX25lb25fdnBtYXh2MnNmIChfX2EsIF9fYiwgMyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBtYXhfdTggKHVpbnQ4eDhfdCBfX2EsIHVpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZwbWF4djhxaSAoKGludDh4OF90KSBfX2EsIChpbnQ4eDhfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBtYXhfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92cG1heHY0aGkgKChpbnQxNng0X3QpIF9fYSwgKGludDE2eDRfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBtYXhfdTMyICh1aW50MzJ4Ml90IF9fYSwgdWludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cG1heHYyc2kgKChpbnQzMngyX3QpIF9fYSwgKGludDMyeDJfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwbWluX3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92cG1pbnY4cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cG1pbl9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZwbWludjRoaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwbWluX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdnBtaW52MnNpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cG1pbl9mMzIgKGZsb2F0MzJ4Ml90IF9fYSwgZmxvYXQzMngyX3QgX19iKQoreworICByZXR1cm4gKGZsb2F0MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZwbWludjJzZiAoX19hLCBfX2IsIDMpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwbWluX3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92cG1pbnY4cWkgKChpbnQ4eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwbWluX3UxNiAodWludDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdnBtaW52NGhpICgoaW50MTZ4NF90KSBfX2EsIChpbnQxNng0X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwbWluX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnBtaW52MnNpICgoaW50MzJ4Ml90KSBfX2EsIChpbnQzMngyX3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVjcHNfZjMyIChmbG9hdDMyeDJfdCBfX2EsIGZsb2F0MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cmVjcHN2MnNmIChfX2EsIF9fYiwgMyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVjcHNxX2YzMiAoZmxvYXQzMng0X3QgX19hLCBmbG9hdDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAoZmxvYXQzMng0X3QpX19idWlsdGluX25lb25fdnJlY3BzdjRzZiAoX19hLCBfX2IsIDMpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzcXJ0c19mMzIgKGZsb2F0MzJ4Ml90IF9fYSwgZmxvYXQzMngyX3QgX19iKQoreworICByZXR1cm4gKGZsb2F0MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3Zyc3FydHN2MnNmIChfX2EsIF9fYiwgMyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNxcnRzcV9mMzIgKGZsb2F0MzJ4NF90IF9fYSwgZmxvYXQzMng0X3QgX19iKQoreworICByZXR1cm4gKGZsb2F0MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3Zyc3FydHN2NHNmIChfX2EsIF9fYiwgMyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hsX3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92c2hsdjhxaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92c2hsdjRoaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92c2hsdjJzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxfczY0IChpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gKGludDY0eDFfdClfX2J1aWx0aW5fbmVvbl92c2hsZGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hsX3U4ICh1aW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZzaGx2OHFpICgoaW50OHg4X3QpIF9fYSwgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobF91MTYgKHVpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdnNobHY0aGkgKChpbnQxNng0X3QpIF9fYSwgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobF91MzIgKHVpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnNobHYyc2kgKChpbnQzMngyX3QpIF9fYSwgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobF91NjQgKHVpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdnNobGRpICgoaW50NjR4MV90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobHFfczggKGludDh4MTZfdCBfX2EsIGludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiAoaW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZzaGx2MTZxaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxxX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpX19idWlsdGluX25lb25fdnNobHY4aGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hscV9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZzaGx2NHNpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobHFfczY0IChpbnQ2NHgyX3QgX19hLCBpbnQ2NHgyX3QgX19iKQoreworICByZXR1cm4gKGludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92c2hsdjJkaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hscV91OCAodWludDh4MTZfdCBfX2EsIGludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92c2hsdjE2cWkgKChpbnQ4eDE2X3QpIF9fYSwgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobHFfdTE2ICh1aW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZzaGx2OGhpICgoaW50MTZ4OF90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxxX3UzMiAodWludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92c2hsdjRzaSAoKGludDMyeDRfdCkgX19hLCBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hscV91NjQgKHVpbnQ2NHgyX3QgX19hLCBpbnQ2NHgyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnNobHYyZGkgKChpbnQ2NHgyX3QpIF9fYSwgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hsX3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92c2hsdjhxaSAoX19hLCBfX2IsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hsX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdnNobHY0aGkgKF9fYSwgX19iLCA1KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNobF9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZzaGx2MnNpIChfX2EsIF9fYiwgNSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzaGxfczY0IChpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gKGludDY0eDFfdClfX2J1aWx0aW5fbmVvbl92c2hsZGkgKF9fYSwgX19iLCA1KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNobF91OCAodWludDh4OF90IF9fYSwgaW50OHg4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92c2hsdjhxaSAoKGludDh4OF90KSBfX2EsIF9fYiwgNCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hsX3UxNiAodWludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92c2hsdjRoaSAoKGludDE2eDRfdCkgX19hLCBfX2IsIDQpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNobF91MzIgKHVpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnNobHYyc2kgKChpbnQzMngyX3QpIF9fYSwgX19iLCA0KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzaGxfdTY0ICh1aW50NjR4MV90IF9fYSwgaW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZzaGxkaSAoKGludDY0eDFfdCkgX19hLCBfX2IsIDQpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hscV9zOCAoaW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdnNobHYxNnFpIChfX2EsIF9fYiwgNSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzaGxxX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpX19idWlsdGluX25lb25fdnNobHY4aGkgKF9fYSwgX19iLCA1KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNobHFfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92c2hsdjRzaSAoX19hLCBfX2IsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hscV9zNjQgKGludDY0eDJfdCBfX2EsIGludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZzaGx2MmRpIChfX2EsIF9fYiwgNSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hscV91OCAodWludDh4MTZfdCBfX2EsIGludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92c2hsdjE2cWkgKChpbnQ4eDE2X3QpIF9fYSwgX19iLCA0KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzaGxxX3UxNiAodWludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92c2hsdjhoaSAoKGludDE2eDhfdCkgX19hLCBfX2IsIDQpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNobHFfdTMyICh1aW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZzaGx2NHNpICgoaW50MzJ4NF90KSBfX2EsIF9fYiwgNCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hscV91NjQgKHVpbnQ2NHgyX3QgX19hLCBpbnQ2NHgyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnNobHYyZGkgKChpbnQ2NHgyX3QpIF9fYSwgX19iLCA0KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsX3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92cXNobHY4cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNobF9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3Zxc2hsdjRoaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdnFzaGx2MnNpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxfczY0IChpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gKGludDY0eDFfdClfX2J1aWx0aW5fbmVvbl92cXNobGRpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxfdTggKHVpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdnFzaGx2OHFpICgoaW50OHg4X3QpIF9fYSwgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxfdTE2ICh1aW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3Zxc2hsdjRoaSAoKGludDE2eDRfdCkgX19hLCBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNobF91MzIgKHVpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnFzaGx2MnNpICgoaW50MzJ4Ml90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsX3U2NCAodWludDY0eDFfdCBfX2EsIGludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDFfdClfX2J1aWx0aW5fbmVvbl92cXNobGRpICgoaW50NjR4MV90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxxX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92cXNobHYxNnFpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxxX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpX19idWlsdGluX25lb25fdnFzaGx2OGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxxX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdnFzaGx2NHNpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxxX3M2NCAoaW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnFzaGx2MmRpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hscV91OCAodWludDh4MTZfdCBfX2EsIGludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92cXNobHYxNnFpICgoaW50OHgxNl90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hscV91MTYgKHVpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpX19idWlsdGluX25lb25fdnFzaGx2OGhpICgoaW50MTZ4OF90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hscV91MzIgKHVpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdnFzaGx2NHNpICgoaW50MzJ4NF90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hscV91NjQgKHVpbnQ2NHgyX3QgX19hLCBpbnQ2NHgyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnFzaGx2MmRpICgoaW50NjR4Ml90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaGxfczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3Zxc2hsdjhxaSAoX19hLCBfX2IsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcnNobF9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3Zxc2hsdjRoaSAoX19hLCBfX2IsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcnNobF9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3Zxc2hsdjJzaSAoX19hLCBfX2IsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcnNobF9zNjQgKGludDY0eDFfdCBfX2EsIGludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3Zxc2hsZGkgKF9fYSwgX19iLCA1KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaGxfdTggKHVpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdnFzaGx2OHFpICgoaW50OHg4X3QpIF9fYSwgX19iLCA0KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyc2hsX3UxNiAodWludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92cXNobHY0aGkgKChpbnQxNng0X3QpIF9fYSwgX19iLCA0KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyc2hsX3UzMiAodWludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cXNobHYyc2kgKChpbnQzMngyX3QpIF9fYSwgX19iLCA0KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyc2hsX3U2NCAodWludDY0eDFfdCBfX2EsIGludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDFfdClfX2J1aWx0aW5fbmVvbl92cXNobGRpICgoaW50NjR4MV90KSBfX2EsIF9fYiwgNCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyc2hscV9zOCAoaW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdnFzaGx2MTZxaSAoX19hLCBfX2IsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcnNobHFfczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92cXNobHY4aGkgKF9fYSwgX19iLCA1KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaGxxX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdnFzaGx2NHNpIChfX2EsIF9fYiwgNSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyc2hscV9zNjQgKGludDY0eDJfdCBfX2EsIGludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3Zxc2hsdjJkaSAoX19hLCBfX2IsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaGxxX3U4ICh1aW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3Zxc2hsdjE2cWkgKChpbnQ4eDE2X3QpIF9fYSwgX19iLCA0KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyc2hscV91MTYgKHVpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpX19idWlsdGluX25lb25fdnFzaGx2OGhpICgoaW50MTZ4OF90KSBfX2EsIF9fYiwgNCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcnNobHFfdTMyICh1aW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3Zxc2hsdjRzaSAoKGludDMyeDRfdCkgX19hLCBfX2IsIDQpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaGxxX3U2NCAodWludDY0eDJfdCBfX2EsIGludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92cXNobHYyZGkgKChpbnQ2NHgyX3QpIF9fYSwgX19iLCA0KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaHJfbl9zOCAoaW50OHg4X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZzaHJfbnY4cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hyX25fczE2IChpbnQxNng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92c2hyX252NGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNocl9uX3MzMiAoaW50MzJ4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdnNocl9udjJzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaHJfbl9zNjQgKGludDY0eDFfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZzaHJfbmRpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNocl9uX3U4ICh1aW50OHg4X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92c2hyX252OHFpICgoaW50OHg4X3QpIF9fYSwgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNocl9uX3UxNiAodWludDE2eDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92c2hyX252NGhpICgoaW50MTZ4NF90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaHJfbl91MzIgKHVpbnQzMngyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnNocl9udjJzaSAoKGludDMyeDJfdCkgX19hLCBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hyX25fdTY0ICh1aW50NjR4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZzaHJfbmRpICgoaW50NjR4MV90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNocnFfbl9zOCAoaW50OHgxNl90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdnNocl9udjE2cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hycV9uX3MxNiAoaW50MTZ4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpX19idWlsdGluX25lb25fdnNocl9udjhoaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaHJxX25fczMyIChpbnQzMng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92c2hyX252NHNpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNocnFfbl9zNjQgKGludDY0eDJfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZzaHJfbnYyZGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNocnFfbl91OCAodWludDh4MTZfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92c2hyX252MTZxaSAoKGludDh4MTZfdCkgX19hLCBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hycV9uX3UxNiAodWludDE2eDhfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92c2hyX252OGhpICgoaW50MTZ4OF90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaHJxX25fdTMyICh1aW50MzJ4NF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZzaHJfbnY0c2kgKChpbnQzMng0X3QpIF9fYSwgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNocnFfbl91NjQgKHVpbnQ2NHgyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnNocl9udjJkaSAoKGludDY0eDJfdCkgX19hLCBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzaHJfbl9zOCAoaW50OHg4X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZzaHJfbnY4cWkgKF9fYSwgX19iLCA1KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNocl9uX3MxNiAoaW50MTZ4NF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdnNocl9udjRoaSAoX19hLCBfX2IsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hyX25fczMyIChpbnQzMngyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92c2hyX252MnNpIChfX2EsIF9fYiwgNSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzaHJfbl9zNjQgKGludDY0eDFfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZzaHJfbmRpIChfX2EsIF9fYiwgNSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzaHJfbl91OCAodWludDh4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdnNocl9udjhxaSAoKGludDh4OF90KSBfX2EsIF9fYiwgNCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hyX25fdTE2ICh1aW50MTZ4NF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZzaHJfbnY0aGkgKChpbnQxNng0X3QpIF9fYSwgX19iLCA0KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzaHJfbl91MzIgKHVpbnQzMngyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnNocl9udjJzaSAoKGludDMyeDJfdCkgX19hLCBfX2IsIDQpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNocl9uX3U2NCAodWludDY0eDFfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDFfdClfX2J1aWx0aW5fbmVvbl92c2hyX25kaSAoKGludDY0eDFfdCkgX19hLCBfX2IsIDQpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hycV9uX3M4IChpbnQ4eDE2X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92c2hyX252MTZxaSAoX19hLCBfX2IsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hycV9uX3MxNiAoaW50MTZ4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpX19idWlsdGluX25lb25fdnNocl9udjhoaSAoX19hLCBfX2IsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hycV9uX3MzMiAoaW50MzJ4NF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdnNocl9udjRzaSAoX19hLCBfX2IsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hycV9uX3M2NCAoaW50NjR4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnNocl9udjJkaSAoX19hLCBfX2IsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNocnFfbl91OCAodWludDh4MTZfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92c2hyX252MTZxaSAoKGludDh4MTZfdCkgX19hLCBfX2IsIDQpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNocnFfbl91MTYgKHVpbnQxNng4X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpX19idWlsdGluX25lb25fdnNocl9udjhoaSAoKGludDE2eDhfdCkgX19hLCBfX2IsIDQpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNocnFfbl91MzIgKHVpbnQzMng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdnNocl9udjRzaSAoKGludDMyeDRfdCkgX19hLCBfX2IsIDQpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNocnFfbl91NjQgKHVpbnQ2NHgyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnNocl9udjJkaSAoKGludDY0eDJfdCkgX19hLCBfX2IsIDQpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNocm5fbl9zMTYgKGludDE2eDhfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdnNocm5fbnY4aGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hybl9uX3MzMiAoaW50MzJ4NF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdnNocm5fbnY0c2kgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hybl9uX3M2NCAoaW50NjR4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdnNocm5fbnYyZGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hybl9uX3UxNiAodWludDE2eDhfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZzaHJuX252OGhpICgoaW50MTZ4OF90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaHJuX25fdTMyICh1aW50MzJ4NF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZzaHJuX252NHNpICgoaW50MzJ4NF90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaHJuX25fdTY0ICh1aW50NjR4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZzaHJuX252MmRpICgoaW50NjR4Ml90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNocm5fbl9zMTYgKGludDE2eDhfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdnNocm5fbnY4aGkgKF9fYSwgX19iLCA1KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNocm5fbl9zMzIgKGludDMyeDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZzaHJuX252NHNpIChfX2EsIF9fYiwgNSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzaHJuX25fczY0IChpbnQ2NHgyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92c2hybl9udjJkaSAoX19hLCBfX2IsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hybl9uX3UxNiAodWludDE2eDhfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZzaHJuX252OGhpICgoaW50MTZ4OF90KSBfX2EsIF9fYiwgNCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hybl9uX3UzMiAodWludDMyeDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92c2hybl9udjRzaSAoKGludDMyeDRfdCkgX19hLCBfX2IsIDQpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNocm5fbl91NjQgKHVpbnQ2NHgyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnNocm5fbnYyZGkgKChpbnQ2NHgyX3QpIF9fYSwgX19iLCA0KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hybl9uX3MxNiAoaW50MTZ4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92cXNocm5fbnY4aGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNocm5fbl9zMzIgKGludDMyeDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3Zxc2hybl9udjRzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hybl9uX3M2NCAoaW50NjR4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdnFzaHJuX252MmRpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaHJuX25fdTE2ICh1aW50MTZ4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdnFzaHJuX252OGhpICgoaW50MTZ4OF90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hybl9uX3UzMiAodWludDMyeDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92cXNocm5fbnY0c2kgKChpbnQzMng0X3QpIF9fYSwgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaHJuX25fdTY0ICh1aW50NjR4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3Zxc2hybl9udjJkaSAoKGludDY0eDJfdCkgX19hLCBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyc2hybl9uX3MxNiAoaW50MTZ4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92cXNocm5fbnY4aGkgKF9fYSwgX19iLCA1KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaHJuX25fczMyIChpbnQzMng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92cXNocm5fbnY0c2kgKF9fYSwgX19iLCA1KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaHJuX25fczY0IChpbnQ2NHgyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cXNocm5fbnYyZGkgKF9fYSwgX19iLCA1KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaHJuX25fdTE2ICh1aW50MTZ4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdnFzaHJuX252OGhpICgoaW50MTZ4OF90KSBfX2EsIF9fYiwgNCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcnNocm5fbl91MzIgKHVpbnQzMng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdnFzaHJuX252NHNpICgoaW50MzJ4NF90KSBfX2EsIF9fYiwgNCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcnNocm5fbl91NjQgKHVpbnQ2NHgyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnFzaHJuX252MmRpICgoaW50NjR4Ml90KSBfX2EsIF9fYiwgNCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaHJ1bl9uX3MxNiAoaW50MTZ4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdnFzaHJ1bl9udjhoaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNocnVuX25fczMyIChpbnQzMng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdnFzaHJ1bl9udjRzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNocnVuX25fczY0IChpbnQ2NHgyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnFzaHJ1bl9udjJkaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcnNocnVuX25fczE2IChpbnQxNng4X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92cXNocnVuX252OGhpIChfX2EsIF9fYiwgNSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcnNocnVuX25fczMyIChpbnQzMng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdnFzaHJ1bl9udjRzaSAoX19hLCBfX2IsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaHJ1bl9uX3M2NCAoaW50NjR4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3Zxc2hydW5fbnYyZGkgKF9fYSwgX19iLCA1KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxfbl9zOCAoaW50OHg4X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZzaGxfbnY4cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hsX25fczE2IChpbnQxNng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92c2hsX252NGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobF9uX3MzMiAoaW50MzJ4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdnNobF9udjJzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxfbl9zNjQgKGludDY0eDFfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZzaGxfbmRpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobF9uX3U4ICh1aW50OHg4X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92c2hsX252OHFpICgoaW50OHg4X3QpIF9fYSwgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobF9uX3UxNiAodWludDE2eDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92c2hsX252NGhpICgoaW50MTZ4NF90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxfbl91MzIgKHVpbnQzMngyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnNobF9udjJzaSAoKGludDMyeDJfdCkgX19hLCBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hsX25fdTY0ICh1aW50NjR4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZzaGxfbmRpICgoaW50NjR4MV90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobHFfbl9zOCAoaW50OHgxNl90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdnNobF9udjE2cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hscV9uX3MxNiAoaW50MTZ4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpX19idWlsdGluX25lb25fdnNobF9udjhoaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxxX25fczMyIChpbnQzMng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92c2hsX252NHNpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobHFfbl9zNjQgKGludDY0eDJfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZzaGxfbnYyZGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobHFfbl91OCAodWludDh4MTZfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92c2hsX252MTZxaSAoKGludDh4MTZfdCkgX19hLCBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hscV9uX3UxNiAodWludDE2eDhfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92c2hsX252OGhpICgoaW50MTZ4OF90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxxX25fdTMyICh1aW50MzJ4NF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZzaGxfbnY0c2kgKChpbnQzMng0X3QpIF9fYSwgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobHFfbl91NjQgKHVpbnQ2NHgyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnNobF9udjJkaSAoKGludDY0eDJfdCkgX19hLCBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxfbl9zOCAoaW50OHg4X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3Zxc2hsX252OHFpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxfbl9zMTYgKGludDE2eDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3Zxc2hsX252NGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxfbl9zMzIgKGludDMyeDJfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3Zxc2hsX252MnNpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxfbl9zNjQgKGludDY0eDFfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3Zxc2hsX25kaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsX25fdTggKHVpbnQ4eDhfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3Zxc2hsX252OHFpICgoaW50OHg4X3QpIF9fYSwgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxfbl91MTYgKHVpbnQxNng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdnFzaGxfbnY0aGkgKChpbnQxNng0X3QpIF9fYSwgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxfbl91MzIgKHVpbnQzMngyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnFzaGxfbnYyc2kgKChpbnQzMngyX3QpIF9fYSwgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxfbl91NjQgKHVpbnQ2NHgxX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdnFzaGxfbmRpICgoaW50NjR4MV90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxxX25fczggKGludDh4MTZfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3Zxc2hsX252MTZxaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hscV9uX3MxNiAoaW50MTZ4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpX19idWlsdGluX25lb25fdnFzaGxfbnY4aGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNobHFfbl9zMzIgKGludDMyeDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3Zxc2hsX252NHNpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxxX25fczY0IChpbnQ2NHgyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92cXNobF9udjJkaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNobHFfbl91OCAodWludDh4MTZfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92cXNobF9udjE2cWkgKChpbnQ4eDE2X3QpIF9fYSwgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxxX25fdTE2ICh1aW50MTZ4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3Zxc2hsX252OGhpICgoaW50MTZ4OF90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hscV9uX3UzMiAodWludDMyeDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cXNobF9udjRzaSAoKGludDMyeDRfdCkgX19hLCBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNobHFfbl91NjQgKHVpbnQ2NHgyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnFzaGxfbnYyZGkgKChpbnQ2NHgyX3QpIF9fYSwgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNobHVfbl9zOCAoaW50OHg4X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92cXNobHVfbnY4cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGx1X25fczE2IChpbnQxNng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdnFzaGx1X252NGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsdV9uX3MzMiAoaW50MzJ4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3Zxc2hsdV9udjJzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNobHVfbl9zNjQgKGludDY0eDFfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDFfdClfX2J1aWx0aW5fbmVvbl92cXNobHVfbmRpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsdXFfbl9zOCAoaW50OHgxNl90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3Zxc2hsdV9udjE2cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGx1cV9uX3MxNiAoaW50MTZ4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3Zxc2hsdV9udjhoaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNobHVxX25fczMyIChpbnQzMng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdnFzaGx1X252NHNpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsdXFfbl9zNjQgKGludDY0eDJfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92cXNobHVfbnYyZGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hsbF9uX3M4IChpbnQ4eDhfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZzaGxsX252OHFpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobGxfbl9zMTYgKGludDE2eDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZzaGxsX252NGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobGxfbl9zMzIgKGludDMyeDJfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZzaGxsX252MnNpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxsX25fdTggKHVpbnQ4eDhfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92c2hsbF9udjhxaSAoKGludDh4OF90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxsX25fdTE2ICh1aW50MTZ4NF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZzaGxsX252NGhpICgoaW50MTZ4NF90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxsX25fdTMyICh1aW50MzJ4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZzaGxsX252MnNpICgoaW50MzJ4Ml90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JhX25fczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZzcmFfbnY4cWkgKF9fYSwgX19iLCBfX2MsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzcmFfbl9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZzcmFfbnY0aGkgKF9fYSwgX19iLCBfX2MsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzcmFfbl9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZzcmFfbnYyc2kgKF9fYSwgX19iLCBfX2MsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzcmFfbl9zNjQgKGludDY0eDFfdCBfX2EsIGludDY0eDFfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZzcmFfbmRpIChfX2EsIF9fYiwgX19jLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JhX25fdTggKHVpbnQ4eDhfdCBfX2EsIHVpbnQ4eDhfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZzcmFfbnY4cWkgKChpbnQ4eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYiwgX19jLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNyYV9uX3UxNiAodWludDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdnNyYV9udjRoaSAoKGludDE2eDRfdCkgX19hLCAoaW50MTZ4NF90KSBfX2IsIF9fYywgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzcmFfbl91MzIgKHVpbnQzMngyX3QgX19hLCB1aW50MzJ4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZzcmFfbnYyc2kgKChpbnQzMngyX3QpIF9fYSwgKGludDMyeDJfdCkgX19iLCBfX2MsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JhX25fdTY0ICh1aW50NjR4MV90IF9fYSwgdWludDY0eDFfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDY0eDFfdClfX2J1aWx0aW5fbmVvbl92c3JhX25kaSAoKGludDY0eDFfdCkgX19hLCAoaW50NjR4MV90KSBfX2IsIF9fYywgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNyYXFfbl9zOCAoaW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdnNyYV9udjE2cWkgKF9fYSwgX19iLCBfX2MsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzcmFxX25fczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92c3JhX252OGhpIChfX2EsIF9fYiwgX19jLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JhcV9uX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdnNyYV9udjRzaSAoX19hLCBfX2IsIF9fYywgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNyYXFfbl9zNjQgKGludDY0eDJfdCBfX2EsIGludDY0eDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZzcmFfbnYyZGkgKF9fYSwgX19iLCBfX2MsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JhcV9uX3U4ICh1aW50OHgxNl90IF9fYSwgdWludDh4MTZfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92c3JhX252MTZxaSAoKGludDh4MTZfdCkgX19hLCAoaW50OHgxNl90KSBfX2IsIF9fYywgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzcmFxX25fdTE2ICh1aW50MTZ4OF90IF9fYSwgdWludDE2eDhfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92c3JhX252OGhpICgoaW50MTZ4OF90KSBfX2EsIChpbnQxNng4X3QpIF9fYiwgX19jLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNyYXFfbl91MzIgKHVpbnQzMng0X3QgX19hLCB1aW50MzJ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZzcmFfbnY0c2kgKChpbnQzMng0X3QpIF9fYSwgKGludDMyeDRfdCkgX19iLCBfX2MsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JhcV9uX3U2NCAodWludDY0eDJfdCBfX2EsIHVpbnQ2NHgyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnNyYV9udjJkaSAoKGludDY0eDJfdCkgX19hLCAoaW50NjR4Ml90KSBfX2IsIF9fYywgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNyYV9uX3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92c3JhX252OHFpIChfX2EsIF9fYiwgX19jLCA1KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNyYV9uX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdnNyYV9udjRoaSAoX19hLCBfX2IsIF9fYywgNSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzcmFfbl9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZzcmFfbnYyc2kgKF9fYSwgX19iLCBfX2MsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc3JhX25fczY0IChpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDY0eDFfdClfX2J1aWx0aW5fbmVvbl92c3JhX25kaSAoX19hLCBfX2IsIF9fYywgNSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzcmFfbl91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdnNyYV9udjhxaSAoKGludDh4OF90KSBfX2EsIChpbnQ4eDhfdCkgX19iLCBfX2MsIDQpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNyYV9uX3UxNiAodWludDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdnNyYV9udjRoaSAoKGludDE2eDRfdCkgX19hLCAoaW50MTZ4NF90KSBfX2IsIF9fYywgNCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc3JhX25fdTMyICh1aW50MzJ4Ml90IF9fYSwgdWludDMyeDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92c3JhX252MnNpICgoaW50MzJ4Ml90KSBfX2EsIChpbnQzMngyX3QpIF9fYiwgX19jLCA0KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzcmFfbl91NjQgKHVpbnQ2NHgxX3QgX19hLCB1aW50NjR4MV90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZzcmFfbmRpICgoaW50NjR4MV90KSBfX2EsIChpbnQ2NHgxX3QpIF9fYiwgX19jLCA0KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNyYXFfbl9zOCAoaW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdnNyYV9udjE2cWkgKF9fYSwgX19iLCBfX2MsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc3JhcV9uX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpX19idWlsdGluX25lb25fdnNyYV9udjhoaSAoX19hLCBfX2IsIF9fYywgNSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzcmFxX25fczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92c3JhX252NHNpIChfX2EsIF9fYiwgX19jLCA1KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNyYXFfbl9zNjQgKGludDY0eDJfdCBfX2EsIGludDY0eDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZzcmFfbnYyZGkgKF9fYSwgX19iLCBfX2MsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNyYXFfbl91OCAodWludDh4MTZfdCBfX2EsIHVpbnQ4eDE2X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdnNyYV9udjE2cWkgKChpbnQ4eDE2X3QpIF9fYSwgKGludDh4MTZfdCkgX19iLCBfX2MsIDQpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNyYXFfbl91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZzcmFfbnY4aGkgKChpbnQxNng4X3QpIF9fYSwgKGludDE2eDhfdCkgX19iLCBfX2MsIDQpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNyYXFfbl91MzIgKHVpbnQzMng0X3QgX19hLCB1aW50MzJ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZzcmFfbnY0c2kgKChpbnQzMng0X3QpIF9fYSwgKGludDMyeDRfdCkgX19iLCBfX2MsIDQpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNyYXFfbl91NjQgKHVpbnQ2NHgyX3QgX19hLCB1aW50NjR4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZzcmFfbnYyZGkgKChpbnQ2NHgyX3QpIF9fYSwgKGludDY0eDJfdCkgX19iLCBfX2MsIDQpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNyaV9uX3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92c3JpX252OHFpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JpX25fczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92c3JpX252NGhpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JpX25fczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92c3JpX252MnNpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JpX25fczY0IChpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDY0eDFfdClfX2J1aWx0aW5fbmVvbl92c3JpX25kaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNyaV9uX3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92c3JpX252OHFpICgoaW50OHg4X3QpIF9fYSwgKGludDh4OF90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zzcmlfbl91MTYgKHVpbnQxNng0X3QgX19hLCB1aW50MTZ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZzcmlfbnY0aGkgKChpbnQxNng0X3QpIF9fYSwgKGludDE2eDRfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JpX25fdTMyICh1aW50MzJ4Ml90IF9fYSwgdWludDMyeDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92c3JpX252MnNpICgoaW50MzJ4Ml90KSBfX2EsIChpbnQzMngyX3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNyaV9uX3U2NCAodWludDY0eDFfdCBfX2EsIHVpbnQ2NHgxX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdnNyaV9uZGkgKChpbnQ2NHgxX3QpIF9fYSwgKGludDY0eDFfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zzcmlfbl9wOCAocG9seTh4OF90IF9fYSwgcG9seTh4OF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChwb2x5OHg4X3QpX19idWlsdGluX25lb25fdnNyaV9udjhxaSAoKGludDh4OF90KSBfX2EsIChpbnQ4eDhfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JpX25fcDE2IChwb2x5MTZ4NF90IF9fYSwgcG9seTE2eDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAocG9seTE2eDRfdClfX2J1aWx0aW5fbmVvbl92c3JpX252NGhpICgoaW50MTZ4NF90KSBfX2EsIChpbnQxNng0X3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JpcV9uX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92c3JpX252MTZxaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNyaXFfbl9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZzcmlfbnY4aGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzcmlxX25fczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92c3JpX252NHNpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JpcV9uX3M2NCAoaW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnNyaV9udjJkaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzcmlxX25fdTggKHVpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZzcmlfbnYxNnFpICgoaW50OHgxNl90KSBfX2EsIChpbnQ4eDE2X3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNyaXFfbl91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZzcmlfbnY4aGkgKChpbnQxNng4X3QpIF9fYSwgKGludDE2eDhfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JpcV9uX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdnNyaV9udjRzaSAoKGludDMyeDRfdCkgX19hLCAoaW50MzJ4NF90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzcmlxX25fdTY0ICh1aW50NjR4Ml90IF9fYSwgdWludDY0eDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92c3JpX252MmRpICgoaW50NjR4Ml90KSBfX2EsIChpbnQ2NHgyX3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNyaXFfbl9wOCAocG9seTh4MTZfdCBfX2EsIHBvbHk4eDE2X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHBvbHk4eDE2X3QpX19idWlsdGluX25lb25fdnNyaV9udjE2cWkgKChpbnQ4eDE2X3QpIF9fYSwgKGludDh4MTZfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JpcV9uX3AxNiAocG9seTE2eDhfdCBfX2EsIHBvbHkxNng4X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHBvbHkxNng4X3QpX19idWlsdGluX25lb25fdnNyaV9udjhoaSAoKGludDE2eDhfdCkgX19hLCAoaW50MTZ4OF90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2xpX25fczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZzbGlfbnY4cWkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzbGlfbl9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZzbGlfbnY0aGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzbGlfbl9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZzbGlfbnYyc2kgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzbGlfbl9zNjQgKGludDY0eDFfdCBfX2EsIGludDY0eDFfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZzbGlfbmRpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2xpX25fdTggKHVpbnQ4eDhfdCBfX2EsIHVpbnQ4eDhfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZzbGlfbnY4cWkgKChpbnQ4eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNsaV9uX3UxNiAodWludDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdnNsaV9udjRoaSAoKGludDE2eDRfdCkgX19hLCAoaW50MTZ4NF90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzbGlfbl91MzIgKHVpbnQzMngyX3QgX19hLCB1aW50MzJ4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZzbGlfbnYyc2kgKChpbnQzMngyX3QpIF9fYSwgKGludDMyeDJfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2xpX25fdTY0ICh1aW50NjR4MV90IF9fYSwgdWludDY0eDFfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDY0eDFfdClfX2J1aWx0aW5fbmVvbl92c2xpX25kaSAoKGludDY0eDFfdCkgX19hLCAoaW50NjR4MV90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNsaV9uX3A4IChwb2x5OHg4X3QgX19hLCBwb2x5OHg4X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHBvbHk4eDhfdClfX2J1aWx0aW5fbmVvbl92c2xpX252OHFpICgoaW50OHg4X3QpIF9fYSwgKGludDh4OF90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzbGlfbl9wMTYgKHBvbHkxNng0X3QgX19hLCBwb2x5MTZ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChwb2x5MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZzbGlfbnY0aGkgKChpbnQxNng0X3QpIF9fYSwgKGludDE2eDRfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzbGlxX25fczggKGludDh4MTZfdCBfX2EsIGludDh4MTZfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZzbGlfbnYxNnFpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2xpcV9uX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpX19idWlsdGluX25lb25fdnNsaV9udjhoaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNsaXFfbl9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZzbGlfbnY0c2kgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzbGlxX25fczY0IChpbnQ2NHgyX3QgX19hLCBpbnQ2NHgyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92c2xpX252MmRpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNsaXFfbl91OCAodWludDh4MTZfdCBfX2EsIHVpbnQ4eDE2X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdnNsaV9udjE2cWkgKChpbnQ4eDE2X3QpIF9fYSwgKGludDh4MTZfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2xpcV9uX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpX19idWlsdGluX25lb25fdnNsaV9udjhoaSAoKGludDE2eDhfdCkgX19hLCAoaW50MTZ4OF90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzbGlxX25fdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92c2xpX252NHNpICgoaW50MzJ4NF90KSBfX2EsIChpbnQzMng0X3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNsaXFfbl91NjQgKHVpbnQ2NHgyX3QgX19hLCB1aW50NjR4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZzbGlfbnYyZGkgKChpbnQ2NHgyX3QpIF9fYSwgKGludDY0eDJfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2xpcV9uX3A4IChwb2x5OHgxNl90IF9fYSwgcG9seTh4MTZfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAocG9seTh4MTZfdClfX2J1aWx0aW5fbmVvbl92c2xpX252MTZxaSAoKGludDh4MTZfdCkgX19hLCAoaW50OHgxNl90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzbGlxX25fcDE2IChwb2x5MTZ4OF90IF9fYSwgcG9seTE2eDhfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAocG9seTE2eDhfdClfX2J1aWx0aW5fbmVvbl92c2xpX252OGhpICgoaW50MTZ4OF90KSBfX2EsIChpbnQxNng4X3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYnNfczggKGludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92YWJzdjhxaSAoX19hLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJzX3MxNiAoaW50MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdmFic3Y0aGkgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFic19zMzIgKGludDMyeDJfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZhYnN2MnNpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFic19mMzIgKGZsb2F0MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDJfdClfX2J1aWx0aW5fbmVvbl92YWJzdjJzZiAoX19hLCAzKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJzcV9zOCAoaW50OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdmFic3YxNnFpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYnNxX3MxNiAoaW50MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpX19idWlsdGluX25lb25fdmFic3Y4aGkgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFic3FfczMyIChpbnQzMng0X3QgX19hKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92YWJzdjRzaSAoX19hLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYnNxX2YzMiAoZmxvYXQzMng0X3QgX19hKQoreworICByZXR1cm4gKGZsb2F0MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZhYnN2NHNmIChfX2EsIDMpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFhYnNfczggKGludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92cWFic3Y4cWkgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFhYnNfczE2IChpbnQxNng0X3QgX19hKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92cWFic3Y0aGkgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFhYnNfczMyIChpbnQzMngyX3QgX19hKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cWFic3Yyc2kgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFhYnNxX3M4IChpbnQ4eDE2X3QgX19hKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92cWFic3YxNnFpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxYWJzcV9zMTYgKGludDE2eDhfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZxYWJzdjhoaSAoX19hLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWFic3FfczMyIChpbnQzMng0X3QgX19hKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cWFic3Y0c2kgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bmVnX3M4IChpbnQ4eDhfdCBfX2EpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdm5lZ3Y4cWkgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm5lZ19zMTYgKGludDE2eDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZuZWd2NGhpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZuZWdfczMyIChpbnQzMngyX3QgX19hKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92bmVndjJzaSAoX19hLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZuZWdfZjMyIChmbG9hdDMyeDJfdCBfX2EpCit7CisgIHJldHVybiAoZmxvYXQzMngyX3QpX19idWlsdGluX25lb25fdm5lZ3Yyc2YgKF9fYSwgMyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm5lZ3FfczggKGludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiAoaW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZuZWd2MTZxaSAoX19hLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bmVncV9zMTYgKGludDE2eDhfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZuZWd2OGhpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZuZWdxX3MzMiAoaW50MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdm5lZ3Y0c2kgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bmVncV9mMzIgKGZsb2F0MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDRfdClfX2J1aWx0aW5fbmVvbl92bmVndjRzZiAoX19hLCAzKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxbmVnX3M4IChpbnQ4eDhfdCBfX2EpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdnFuZWd2OHFpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxbmVnX3MxNiAoaW50MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdnFuZWd2NGhpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxbmVnX3MzMiAoaW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdnFuZWd2MnNpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxbmVncV9zOCAoaW50OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdnFuZWd2MTZxaSAoX19hLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cW5lZ3FfczE2IChpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKGludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92cW5lZ3Y4aGkgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFuZWdxX3MzMiAoaW50MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdnFuZWd2NHNpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm12bl9zOCAoaW50OHg4X3QgX19hKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3Ztdm52OHFpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztdm5fczE2IChpbnQxNng0X3QgX19hKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92bXZudjRoaSAoX19hLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXZuX3MzMiAoaW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdm12bnYyc2kgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm12bl91OCAodWludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdm12bnY4cWkgKChpbnQ4eDhfdCkgX19hLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm12bl91MTYgKHVpbnQxNng0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdm12bnY0aGkgKChpbnQxNng0X3QpIF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztdm5fdTMyICh1aW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3Ztdm52MnNpICgoaW50MzJ4Ml90KSBfX2EsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztdm5fcDggKHBvbHk4eDhfdCBfX2EpCit7CisgIHJldHVybiAocG9seTh4OF90KV9fYnVpbHRpbl9uZW9uX3Ztdm52OHFpICgoaW50OHg4X3QpIF9fYSwgMik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm12bnFfczggKGludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiAoaW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3Ztdm52MTZxaSAoX19hLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXZucV9zMTYgKGludDE2eDhfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3Ztdm52OGhpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztdm5xX3MzMiAoaW50MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdm12bnY0c2kgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztdm5xX3U4ICh1aW50OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3Ztdm52MTZxaSAoKGludDh4MTZfdCkgX19hLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm12bnFfdTE2ICh1aW50MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3Ztdm52OGhpICgoaW50MTZ4OF90KSBfX2EsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXZucV91MzIgKHVpbnQzMng0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdm12bnY0c2kgKChpbnQzMng0X3QpIF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztdm5xX3A4IChwb2x5OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHgxNl90KV9fYnVpbHRpbl9uZW9uX3Ztdm52MTZxaSAoKGludDh4MTZfdCkgX19hLCAyKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHNfczggKGludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92Y2xzdjhxaSAoX19hLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xzX3MxNiAoaW50MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdmNsc3Y0aGkgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsc19zMzIgKGludDMyeDJfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZjbHN2MnNpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHNxX3M4IChpbnQ4eDE2X3QgX19hKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92Y2xzdjE2cWkgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsc3FfczE2IChpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKGludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92Y2xzdjhoaSAoX19hLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xzcV9zMzIgKGludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZjbHN2NHNpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsel9zOCAoaW50OHg4X3QgX19hKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZjbHp2OHFpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHpfczE2IChpbnQxNng0X3QgX19hKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92Y2x6djRoaSAoX19hLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x6X3MzMiAoaW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdmNsenYyc2kgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsel91OCAodWludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdmNsenY4cWkgKChpbnQ4eDhfdCkgX19hLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsel91MTYgKHVpbnQxNng0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdmNsenY0aGkgKChpbnQxNng0X3QpIF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHpfdTMyICh1aW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZjbHp2MnNpICgoaW50MzJ4Ml90KSBfX2EsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHpxX3M4IChpbnQ4eDE2X3QgX19hKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92Y2x6djE2cWkgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsenFfczE2IChpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKGludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92Y2x6djhoaSAoX19hLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x6cV9zMzIgKGludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZjbHp2NHNpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x6cV91OCAodWludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92Y2x6djE2cWkgKChpbnQ4eDE2X3QpIF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHpxX3UxNiAodWludDE2eDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92Y2x6djhoaSAoKGludDE2eDhfdCkgX19hLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsenFfdTMyICh1aW50MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZjbHp2NHNpICgoaW50MzJ4NF90KSBfX2EsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNudF9zOCAoaW50OHg4X3QgX19hKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZjbnR2OHFpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbnRfdTggKHVpbnQ4eDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZjbnR2OHFpICgoaW50OHg4X3QpIF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNudF9wOCAocG9seTh4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHg4X3QpX19idWlsdGluX25lb25fdmNudHY4cWkgKChpbnQ4eDhfdCkgX19hLCAyKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y250cV9zOCAoaW50OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdmNudHYxNnFpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y250cV91OCAodWludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92Y250djE2cWkgKChpbnQ4eDE2X3QpIF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbnRxX3A4IChwb2x5OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZjbnR2MTZxaSAoKGludDh4MTZfdCkgX19hLCAyKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWNwZV9mMzIgKGZsb2F0MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cmVjcGV2MnNmIChfX2EsIDMpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVjcGVfdTMyICh1aW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZyZWNwZXYyc2kgKChpbnQzMngyX3QpIF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVjcGVxX2YzMiAoZmxvYXQzMng0X3QgX19hKQoreworICByZXR1cm4gKGZsb2F0MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZyZWNwZXY0c2YgKF9fYSwgMyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWNwZXFfdTMyICh1aW50MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZyZWNwZXY0c2kgKChpbnQzMng0X3QpIF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNxcnRlX2YzMiAoZmxvYXQzMngyX3QgX19hKQoreworICByZXR1cm4gKGZsb2F0MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3Zyc3FydGV2MnNmIChfX2EsIDMpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNxcnRlX3UzMiAodWludDMyeDJfdCBfX2EpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cnNxcnRldjJzaSAoKGludDMyeDJfdCkgX19hLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc3FydGVxX2YzMiAoZmxvYXQzMng0X3QgX19hKQoreworICByZXR1cm4gKGZsb2F0MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3Zyc3FydGV2NHNmIChfX2EsIDMpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNxcnRlcV91MzIgKHVpbnQzMng0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdnJzcXJ0ZXY0c2kgKChpbnQzMng0X3QpIF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9sYW5lX3M4IChpbnQ4eDhfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50OF90KV9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZXY4cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9sYW5lX3MxNiAoaW50MTZ4NF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNl90KV9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZXY0aGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9sYW5lX3MzMiAoaW50MzJ4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMl90KV9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZXYyc2kgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0X2xhbmVfZjMyIChmbG9hdDMyeDJfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoZmxvYXQzMl90KV9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZXYyc2YgKF9fYSwgX19iLCAzKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9sYW5lX3U4ICh1aW50OHg4X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQ4X3QpX19idWlsdGluX25lb25fdmdldF9sYW5ldjhxaSAoKGludDh4OF90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0X2xhbmVfdTE2ICh1aW50MTZ4NF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZfdClfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmV2NGhpICgoaW50MTZ4NF90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0X2xhbmVfdTMyICh1aW50MzJ4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJfdClfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmV2MnNpICgoaW50MzJ4Ml90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRfbGFuZV9wOCAocG9seTh4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChwb2x5OF90KV9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZXY4cWkgKChpbnQ4eDhfdCkgX19hLCBfX2IsIDIpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9sYW5lX3AxNiAocG9seTE2eDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAocG9seTE2X3QpX19idWlsdGluX25lb25fdmdldF9sYW5ldjRoaSAoKGludDE2eDRfdCkgX19hLCBfX2IsIDIpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0X2xhbmVfczY0IChpbnQ2NHgxX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDY0X3QpX19idWlsdGluX25lb25fdmdldF9sYW5lZGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRfbGFuZV91NjQgKHVpbnQ2NHgxX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQ2NF90KV9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZWRpICgoaW50NjR4MV90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldHFfbGFuZV9zOCAoaW50OHgxNl90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4X3QpX19idWlsdGluX25lb25fdmdldF9sYW5ldjE2cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldHFfbGFuZV9zMTYgKGludDE2eDhfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50MTZfdClfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmV2OGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRxX2xhbmVfczMyIChpbnQzMng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDMyX3QpX19idWlsdGluX25lb25fdmdldF9sYW5ldjRzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRxX2xhbmVfZjMyIChmbG9hdDMyeDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoZmxvYXQzMl90KV9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZXY0c2YgKF9fYSwgX19iLCAzKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldHFfbGFuZV91OCAodWludDh4MTZfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDhfdClfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmV2MTZxaSAoKGludDh4MTZfdCkgX19hLCBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldHFfbGFuZV91MTYgKHVpbnQxNng4X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQxNl90KV9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZXY4aGkgKChpbnQxNng4X3QpIF9fYSwgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRxX2xhbmVfdTMyICh1aW50MzJ4NF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJfdClfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmV2NHNpICgoaW50MzJ4NF90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRxX2xhbmVfcDggKHBvbHk4eDE2X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHBvbHk4X3QpX19idWlsdGluX25lb25fdmdldF9sYW5ldjE2cWkgKChpbnQ4eDE2X3QpIF9fYSwgX19iLCAyKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRxX2xhbmVfcDE2IChwb2x5MTZ4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChwb2x5MTZfdClfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmV2OGhpICgoaW50MTZ4OF90KSBfX2EsIF9fYiwgMik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRxX2xhbmVfczY0IChpbnQ2NHgyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDY0X3QpX19idWlsdGluX25lb25fdmdldF9sYW5ldjJkaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldHFfbGFuZV91NjQgKHVpbnQ2NHgyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQ2NF90KV9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZXYyZGkgKChpbnQ2NHgyX3QpIF9fYSwgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzZXRfbGFuZV9zOCAoaW50OF90IF9fYSwgaW50OHg4X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZXY4cWkgKChfX2J1aWx0aW5fbmVvbl9xaSkgX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNldF9sYW5lX3MxNiAoaW50MTZfdCBfX2EsIGludDE2eDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZXY0aGkgKChfX2J1aWx0aW5fbmVvbl9oaSkgX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNldF9sYW5lX3MzMiAoaW50MzJfdCBfX2EsIGludDMyeDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZXYyc2kgKChfX2J1aWx0aW5fbmVvbl9zaSkgX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2V0X2xhbmVfZjMyIChmbG9hdDMyX3QgX19hLCBmbG9hdDMyeDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoZmxvYXQzMngyX3QpX19idWlsdGluX25lb25fdnNldF9sYW5ldjJzZiAoKF9fYnVpbHRpbl9uZW9uX3NmKSBfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2V0X2xhbmVfdTggKHVpbnQ4X3QgX19hLCB1aW50OHg4X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmV2OHFpICgoX19idWlsdGluX25lb25fcWkpIF9fYSwgKGludDh4OF90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzZXRfbGFuZV91MTYgKHVpbnQxNl90IF9fYSwgdWludDE2eDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmV2NGhpICgoX19idWlsdGluX25lb25faGkpIF9fYSwgKGludDE2eDRfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2V0X2xhbmVfdTMyICh1aW50MzJfdCBfX2EsIHVpbnQzMngyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnNldF9sYW5ldjJzaSAoKF9fYnVpbHRpbl9uZW9uX3NpKSBfX2EsIChpbnQzMngyX3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2V0X2xhbmVfcDggKHBvbHk4X3QgX19hLCBwb2x5OHg4X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHBvbHk4eDhfdClfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmV2OHFpICgoX19idWlsdGluX25lb25fcWkpIF9fYSwgKGludDh4OF90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzZXRfbGFuZV9wMTYgKHBvbHkxNl90IF9fYSwgcG9seTE2eDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAocG9seTE2eDRfdClfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmV2NGhpICgoX19idWlsdGluX25lb25faGkpIF9fYSwgKGludDE2eDRfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzZXRfbGFuZV9zNjQgKGludDY0X3QgX19hLCBpbnQ2NHgxX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDY0eDFfdClfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVkaSAoKF9fYnVpbHRpbl9uZW9uX2RpKSBfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNldF9sYW5lX3U2NCAodWludDY0X3QgX19hLCB1aW50NjR4MV90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZWRpICgoX19idWlsdGluX25lb25fZGkpIF9fYSwgKGludDY0eDFfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzZXRxX2xhbmVfczggKGludDhfdCBfX2EsIGludDh4MTZfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZXYxNnFpICgoX19idWlsdGluX25lb25fcWkpIF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzZXRxX2xhbmVfczE2IChpbnQxNl90IF9fYSwgaW50MTZ4OF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpX19idWlsdGluX25lb25fdnNldF9sYW5ldjhoaSAoKF9fYnVpbHRpbl9uZW9uX2hpKSBfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2V0cV9sYW5lX3MzMiAoaW50MzJfdCBfX2EsIGludDMyeDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZXY0c2kgKChfX2J1aWx0aW5fbmVvbl9zaSkgX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2V0cV9sYW5lX2YzMiAoZmxvYXQzMl90IF9fYSwgZmxvYXQzMng0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGZsb2F0MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZXY0c2YgKChfX2J1aWx0aW5fbmVvbl9zZikgX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzZXRxX2xhbmVfdTggKHVpbnQ4X3QgX19hLCB1aW50OHgxNl90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZXYxNnFpICgoX19idWlsdGluX25lb25fcWkpIF9fYSwgKGludDh4MTZfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2V0cV9sYW5lX3UxNiAodWludDE2X3QgX19hLCB1aW50MTZ4OF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZXY4aGkgKChfX2J1aWx0aW5fbmVvbl9oaSkgX19hLCAoaW50MTZ4OF90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzZXRxX2xhbmVfdTMyICh1aW50MzJfdCBfX2EsIHVpbnQzMng0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdnNldF9sYW5ldjRzaSAoKF9fYnVpbHRpbl9uZW9uX3NpKSBfX2EsIChpbnQzMng0X3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNldHFfbGFuZV9wOCAocG9seThfdCBfX2EsIHBvbHk4eDE2X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHBvbHk4eDE2X3QpX19idWlsdGluX25lb25fdnNldF9sYW5ldjE2cWkgKChfX2J1aWx0aW5fbmVvbl9xaSkgX19hLCAoaW50OHgxNl90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzZXRxX2xhbmVfcDE2IChwb2x5MTZfdCBfX2EsIHBvbHkxNng4X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHBvbHkxNng4X3QpX19idWlsdGluX25lb25fdnNldF9sYW5ldjhoaSAoKF9fYnVpbHRpbl9uZW9uX2hpKSBfX2EsIChpbnQxNng4X3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2V0cV9sYW5lX3M2NCAoaW50NjRfdCBfX2EsIGludDY0eDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZXYyZGkgKChfX2J1aWx0aW5fbmVvbl9kaSkgX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzZXRxX2xhbmVfdTY0ICh1aW50NjRfdCBfX2EsIHVpbnQ2NHgyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnNldF9sYW5ldjJkaSAoKF9fYnVpbHRpbl9uZW9uX2RpKSBfX2EsIChpbnQ2NHgyX3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjcmVhdGVfczggKHVpbnQ2NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92Y3JlYXRldjhxaSAoKF9fYnVpbHRpbl9uZW9uX2RpKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjcmVhdGVfczE2ICh1aW50NjRfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZjcmVhdGV2NGhpICgoX19idWlsdGluX25lb25fZGkpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNyZWF0ZV9zMzIgKHVpbnQ2NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdmNyZWF0ZXYyc2kgKChfX2J1aWx0aW5fbmVvbl9kaSkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3JlYXRlX3M2NCAodWludDY0X3QgX19hKQoreworICByZXR1cm4gKGludDY0eDFfdClfX2J1aWx0aW5fbmVvbl92Y3JlYXRlZGkgKChfX2J1aWx0aW5fbmVvbl9kaSkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjcmVhdGVfZjMyICh1aW50NjRfdCBfX2EpCit7CisgIHJldHVybiAoZmxvYXQzMngyX3QpX19idWlsdGluX25lb25fdmNyZWF0ZXYyc2YgKChfX2J1aWx0aW5fbmVvbl9kaSkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3JlYXRlX3U4ICh1aW50NjRfdCBfX2EpCit7CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZjcmVhdGV2OHFpICgoX19idWlsdGluX25lb25fZGkpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjcmVhdGVfdTE2ICh1aW50NjRfdCBfX2EpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92Y3JlYXRldjRoaSAoKF9fYnVpbHRpbl9uZW9uX2RpKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3JlYXRlX3UzMiAodWludDY0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdmNyZWF0ZXYyc2kgKChfX2J1aWx0aW5fbmVvbl9kaSkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNyZWF0ZV91NjQgKHVpbnQ2NF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZjcmVhdGVkaSAoKF9fYnVpbHRpbl9uZW9uX2RpKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjcmVhdGVfcDggKHVpbnQ2NF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHg4X3QpX19idWlsdGluX25lb25fdmNyZWF0ZXY4cWkgKChfX2J1aWx0aW5fbmVvbl9kaSkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNyZWF0ZV9wMTYgKHVpbnQ2NF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZjcmVhdGV2NGhpICgoX19idWlsdGluX25lb25fZGkpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZHVwX25fczggKGludDhfdCBfX2EpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdmR1cF9udjhxaSAoKF9fYnVpbHRpbl9uZW9uX3FpKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZkdXBfbl9zMTYgKGludDE2X3QgX19hKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92ZHVwX252NGhpICgoX19idWlsdGluX25lb25faGkpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cF9uX3MzMiAoaW50MzJfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbnYyc2kgKChfX2J1aWx0aW5fbmVvbl9zaSkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZkdXBfbl9mMzIgKGZsb2F0MzJfdCBfX2EpCit7CisgIHJldHVybiAoZmxvYXQzMngyX3QpX19idWlsdGluX25lb25fdmR1cF9udjJzZiAoKF9fYnVpbHRpbl9uZW9uX3NmKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZkdXBfbl91OCAodWludDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbnY4cWkgKChfX2J1aWx0aW5fbmVvbl9xaSkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cF9uX3UxNiAodWludDE2X3QgX19hKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdmR1cF9udjRoaSAoKF9fYnVpbHRpbl9uZW9uX2hpKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZHVwX25fdTMyICh1aW50MzJfdCBfX2EpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92ZHVwX252MnNpICgoX19idWlsdGluX25lb25fc2kpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cF9uX3A4IChwb2x5OF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHg4X3QpX19idWlsdGluX25lb25fdmR1cF9udjhxaSAoKF9fYnVpbHRpbl9uZW9uX3FpKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZHVwX25fcDE2IChwb2x5MTZfdCBfX2EpCit7CisgIHJldHVybiAocG9seTE2eDRfdClfX2J1aWx0aW5fbmVvbl92ZHVwX252NGhpICgoX19idWlsdGluX25lb25faGkpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cF9uX3M2NCAoaW50NjRfdCBfX2EpCit7CisgIHJldHVybiAoaW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbmRpICgoX19idWlsdGluX25lb25fZGkpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZkdXBfbl91NjQgKHVpbnQ2NF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbmRpICgoX19idWlsdGluX25lb25fZGkpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cHFfbl9zOCAoaW50OF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdmR1cF9udjE2cWkgKChfX2J1aWx0aW5fbmVvbl9xaSkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZHVwcV9uX3MxNiAoaW50MTZfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbnY4aGkgKChfX2J1aWx0aW5fbmVvbl9oaSkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZHVwcV9uX3MzMiAoaW50MzJfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbnY0c2kgKChfX2J1aWx0aW5fbmVvbl9zaSkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZkdXBxX25fZjMyIChmbG9hdDMyX3QgX19hKQoreworICByZXR1cm4gKGZsb2F0MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbnY0c2YgKChfX2J1aWx0aW5fbmVvbl9zZikgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cHFfbl91OCAodWludDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92ZHVwX252MTZxaSAoKF9fYnVpbHRpbl9uZW9uX3FpKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZHVwcV9uX3UxNiAodWludDE2X3QgX19hKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpX19idWlsdGluX25lb25fdmR1cF9udjhoaSAoKF9fYnVpbHRpbl9uZW9uX2hpKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZHVwcV9uX3UzMiAodWludDMyX3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdmR1cF9udjRzaSAoKF9fYnVpbHRpbl9uZW9uX3NpKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZHVwcV9uX3A4IChwb2x5OF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbnYxNnFpICgoX19idWlsdGluX25lb25fcWkpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZkdXBxX25fcDE2IChwb2x5MTZfdCBfX2EpCit7CisgIHJldHVybiAocG9seTE2eDhfdClfX2J1aWx0aW5fbmVvbl92ZHVwX252OGhpICgoX19idWlsdGluX25lb25faGkpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cHFfbl9zNjQgKGludDY0X3QgX19hKQoreworICByZXR1cm4gKGludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92ZHVwX252MmRpICgoX19idWlsdGluX25lb25fZGkpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZkdXBxX25fdTY0ICh1aW50NjRfdCBfX2EpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92ZHVwX252MmRpICgoX19idWlsdGluX25lb25fZGkpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92X25fczggKGludDhfdCBfX2EpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdmR1cF9udjhxaSAoKF9fYnVpbHRpbl9uZW9uX3FpKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3Zfbl9zMTYgKGludDE2X3QgX19hKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92ZHVwX252NGhpICgoX19idWlsdGluX25lb25faGkpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1vdl9uX3MzMiAoaW50MzJfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbnYyc2kgKChfX2J1aWx0aW5fbmVvbl9zaSkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3Zfbl9mMzIgKGZsb2F0MzJfdCBfX2EpCit7CisgIHJldHVybiAoZmxvYXQzMngyX3QpX19idWlsdGluX25lb25fdmR1cF9udjJzZiAoKF9fYnVpbHRpbl9uZW9uX3NmKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3Zfbl91OCAodWludDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbnY4cWkgKChfX2J1aWx0aW5fbmVvbl9xaSkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1vdl9uX3UxNiAodWludDE2X3QgX19hKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdmR1cF9udjRoaSAoKF9fYnVpbHRpbl9uZW9uX2hpKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92X25fdTMyICh1aW50MzJfdCBfX2EpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92ZHVwX252MnNpICgoX19idWlsdGluX25lb25fc2kpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1vdl9uX3A4IChwb2x5OF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHg4X3QpX19idWlsdGluX25lb25fdmR1cF9udjhxaSAoKF9fYnVpbHRpbl9uZW9uX3FpKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92X25fcDE2IChwb2x5MTZfdCBfX2EpCit7CisgIHJldHVybiAocG9seTE2eDRfdClfX2J1aWx0aW5fbmVvbl92ZHVwX252NGhpICgoX19idWlsdGluX25lb25faGkpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1vdl9uX3M2NCAoaW50NjRfdCBfX2EpCit7CisgIHJldHVybiAoaW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbmRpICgoX19idWlsdGluX25lb25fZGkpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3Zfbl91NjQgKHVpbnQ2NF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbmRpICgoX19idWlsdGluX25lb25fZGkpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1vdnFfbl9zOCAoaW50OF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdmR1cF9udjE2cWkgKChfX2J1aWx0aW5fbmVvbl9xaSkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92cV9uX3MxNiAoaW50MTZfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbnY4aGkgKChfX2J1aWx0aW5fbmVvbl9oaSkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92cV9uX3MzMiAoaW50MzJfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbnY0c2kgKChfX2J1aWx0aW5fbmVvbl9zaSkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3ZxX25fZjMyIChmbG9hdDMyX3QgX19hKQoreworICByZXR1cm4gKGZsb2F0MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbnY0c2YgKChfX2J1aWx0aW5fbmVvbl9zZikgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1vdnFfbl91OCAodWludDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92ZHVwX252MTZxaSAoKF9fYnVpbHRpbl9uZW9uX3FpKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92cV9uX3UxNiAodWludDE2X3QgX19hKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpX19idWlsdGluX25lb25fdmR1cF9udjhoaSAoKF9fYnVpbHRpbl9uZW9uX2hpKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92cV9uX3UzMiAodWludDMyX3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdmR1cF9udjRzaSAoKF9fYnVpbHRpbl9uZW9uX3NpKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92cV9uX3A4IChwb2x5OF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbnYxNnFpICgoX19idWlsdGluX25lb25fcWkpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3ZxX25fcDE2IChwb2x5MTZfdCBfX2EpCit7CisgIHJldHVybiAocG9seTE2eDhfdClfX2J1aWx0aW5fbmVvbl92ZHVwX252OGhpICgoX19idWlsdGluX25lb25faGkpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1vdnFfbl9zNjQgKGludDY0X3QgX19hKQoreworICByZXR1cm4gKGludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92ZHVwX252MmRpICgoX19idWlsdGluX25lb25fZGkpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3ZxX25fdTY0ICh1aW50NjRfdCBfX2EpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92ZHVwX252MmRpICgoX19idWlsdGluX25lb25fZGkpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZHVwX2xhbmVfczggKGludDh4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92ZHVwX2xhbmV2OHFpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cF9sYW5lX3MxNiAoaW50MTZ4NF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdmR1cF9sYW5ldjRoaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZkdXBfbGFuZV9zMzIgKGludDMyeDJfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbGFuZXYyc2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZkdXBfbGFuZV9mMzIgKGZsb2F0MzJ4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDJfdClfX2J1aWx0aW5fbmVvbl92ZHVwX2xhbmV2MnNmIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cF9sYW5lX3U4ICh1aW50OHg4X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92ZHVwX2xhbmV2OHFpICgoaW50OHg4X3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cF9sYW5lX3UxNiAodWludDE2eDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92ZHVwX2xhbmV2NGhpICgoaW50MTZ4NF90KSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZkdXBfbGFuZV91MzIgKHVpbnQzMngyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdmR1cF9sYW5ldjJzaSAoKGludDMyeDJfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZkdXBfbGFuZV9wOCAocG9seTh4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChwb2x5OHg4X3QpX19idWlsdGluX25lb25fdmR1cF9sYW5ldjhxaSAoKGludDh4OF90KSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZkdXBfbGFuZV9wMTYgKHBvbHkxNng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHBvbHkxNng0X3QpX19idWlsdGluX25lb25fdmR1cF9sYW5ldjRoaSAoKGludDE2eDRfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZkdXBfbGFuZV9zNjQgKGludDY0eDFfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbGFuZWRpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZkdXBfbGFuZV91NjQgKHVpbnQ2NHgxX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdmR1cF9sYW5lZGkgKChpbnQ2NHgxX3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZHVwcV9sYW5lX3M4IChpbnQ4eDhfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbGFuZXYxNnFpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cHFfbGFuZV9zMTYgKGludDE2eDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbGFuZXY4aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZHVwcV9sYW5lX3MzMiAoaW50MzJ4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdmR1cF9sYW5ldjRzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cHFfbGFuZV9mMzIgKGZsb2F0MzJ4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDRfdClfX2J1aWx0aW5fbmVvbl92ZHVwX2xhbmV2NHNmIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZkdXBxX2xhbmVfdTggKHVpbnQ4eDhfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92ZHVwX2xhbmV2MTZxaSAoKGludDh4OF90KSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZkdXBxX2xhbmVfdTE2ICh1aW50MTZ4NF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbGFuZXY4aGkgKChpbnQxNng0X3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cHFfbGFuZV91MzIgKHVpbnQzMngyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdmR1cF9sYW5ldjRzaSAoKGludDMyeDJfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZHVwcV9sYW5lX3A4IChwb2x5OHg4X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHBvbHk4eDE2X3QpX19idWlsdGluX25lb25fdmR1cF9sYW5ldjE2cWkgKChpbnQ4eDhfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZHVwcV9sYW5lX3AxNiAocG9seTE2eDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAocG9seTE2eDhfdClfX2J1aWx0aW5fbmVvbl92ZHVwX2xhbmV2OGhpICgoaW50MTZ4NF90KSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cHFfbGFuZV9zNjQgKGludDY0eDFfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbGFuZXYyZGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cHFfbGFuZV91NjQgKHVpbnQ2NHgxX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdmR1cF9sYW5ldjJkaSAoKGludDY0eDFfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zjb21iaW5lX3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdmNvbWJpbmV2OHFpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNvbWJpbmVfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92Y29tYmluZXY0aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y29tYmluZV9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3Zjb21iaW5ldjJzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zjb21iaW5lX3M2NCAoaW50NjR4MV90IF9fYSwgaW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdmNvbWJpbmVkaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNvbWJpbmVfZjMyIChmbG9hdDMyeDJfdCBfX2EsIGZsb2F0MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDRfdClfX2J1aWx0aW5fbmVvbl92Y29tYmluZXYyc2YgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNvbWJpbmVfdTggKHVpbnQ4eDhfdCBfX2EsIHVpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92Y29tYmluZXY4cWkgKChpbnQ4eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zjb21iaW5lX3UxNiAodWludDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpX19idWlsdGluX25lb25fdmNvbWJpbmV2NGhpICgoaW50MTZ4NF90KSBfX2EsIChpbnQxNng0X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zjb21iaW5lX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdmNvbWJpbmV2MnNpICgoaW50MzJ4Ml90KSBfX2EsIChpbnQzMngyX3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zjb21iaW5lX3U2NCAodWludDY0eDFfdCBfX2EsIHVpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdmNvbWJpbmVkaSAoKGludDY0eDFfdCkgX19hLCAoaW50NjR4MV90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y29tYmluZV9wOCAocG9seTh4OF90IF9fYSwgcG9seTh4OF90IF9fYikKK3sKKyAgcmV0dXJuIChwb2x5OHgxNl90KV9fYnVpbHRpbl9uZW9uX3Zjb21iaW5ldjhxaSAoKGludDh4OF90KSBfX2EsIChpbnQ4eDhfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNvbWJpbmVfcDE2IChwb2x5MTZ4NF90IF9fYSwgcG9seTE2eDRfdCBfX2IpCit7CisgIHJldHVybiAocG9seTE2eDhfdClfX2J1aWx0aW5fbmVvbl92Y29tYmluZXY0aGkgKChpbnQxNng0X3QpIF9fYSwgKGludDE2eDRfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRfaGlnaF9zOCAoaW50OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92Z2V0X2hpZ2h2MTZxaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0X2hpZ2hfczE2IChpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92Z2V0X2hpZ2h2OGhpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRfaGlnaF9zMzIgKGludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZnZXRfaGlnaHY0c2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9oaWdoX3M2NCAoaW50NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdmdldF9oaWdodjJkaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRfaGlnaF9mMzIgKGZsb2F0MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDJfdClfX2J1aWx0aW5fbmVvbl92Z2V0X2hpZ2h2NHNmIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRfaGlnaF91OCAodWludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZnZXRfaGlnaHYxNnFpICgoaW50OHgxNl90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0X2hpZ2hfdTE2ICh1aW50MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZnZXRfaGlnaHY4aGkgKChpbnQxNng4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRfaGlnaF91MzIgKHVpbnQzMng0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdmdldF9oaWdodjRzaSAoKGludDMyeDRfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9oaWdoX3U2NCAodWludDY0eDJfdCBfX2EpCit7CisgIHJldHVybiAodWludDY0eDFfdClfX2J1aWx0aW5fbmVvbl92Z2V0X2hpZ2h2MmRpICgoaW50NjR4Ml90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRfaGlnaF9wOCAocG9seTh4MTZfdCBfX2EpCit7CisgIHJldHVybiAocG9seTh4OF90KV9fYnVpbHRpbl9uZW9uX3ZnZXRfaGlnaHYxNnFpICgoaW50OHgxNl90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0X2hpZ2hfcDE2IChwb2x5MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZnZXRfaGlnaHY4aGkgKChpbnQxNng4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0X2xvd19zOCAoaW50OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92Z2V0X2xvd3YxNnFpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRfbG93X3MxNiAoaW50MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdmdldF9sb3d2OGhpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRfbG93X3MzMiAoaW50MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdmdldF9sb3d2NHNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRfbG93X3M2NCAoaW50NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdmdldF9sb3d2MmRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9sb3dfZjMyIChmbG9hdDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAoZmxvYXQzMngyX3QpX19idWlsdGluX25lb25fdmdldF9sb3d2NHNmIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRfbG93X3U4ICh1aW50OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdmdldF9sb3d2MTZxaSAoKGludDh4MTZfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9sb3dfdTE2ICh1aW50MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZnZXRfbG93djhoaSAoKGludDE2eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9sb3dfdTMyICh1aW50MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZnZXRfbG93djRzaSAoKGludDMyeDRfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9sb3dfdTY0ICh1aW50NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZnZXRfbG93djJkaSAoKGludDY0eDJfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0X2xvd19wOCAocG9seTh4MTZfdCBfX2EpCit7CisgIHJldHVybiAocG9seTh4OF90KV9fYnVpbHRpbl9uZW9uX3ZnZXRfbG93djE2cWkgKChpbnQ4eDE2X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRfbG93X3AxNiAocG9seTE2eDhfdCBfX2EpCit7CisgIHJldHVybiAocG9seTE2eDRfdClfX2J1aWx0aW5fbmVvbl92Z2V0X2xvd3Y4aGkgKChpbnQxNng4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dF9zMzJfZjMyIChmbG9hdDMyeDJfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZjdnR2MnNmIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dF9mMzJfczMyIChpbnQzMngyX3QgX19hKQoreworICByZXR1cm4gKGZsb2F0MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZjdnR2MnNpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dF9mMzJfdTMyICh1aW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDJfdClfX2J1aWx0aW5fbmVvbl92Y3Z0djJzaSAoKGludDMyeDJfdCkgX19hLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dF91MzJfZjMyIChmbG9hdDMyeDJfdCBfX2EpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92Y3Z0djJzZiAoX19hLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0cV9zMzJfZjMyIChmbG9hdDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZjdnR2NHNmIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dHFfZjMyX3MzMiAoaW50MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDRfdClfX2J1aWx0aW5fbmVvbl92Y3Z0djRzaSAoX19hLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRxX2YzMl91MzIgKHVpbnQzMng0X3QgX19hKQoreworICByZXR1cm4gKGZsb2F0MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZjdnR2NHNpICgoaW50MzJ4NF90KSBfX2EsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0cV91MzJfZjMyIChmbG9hdDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92Y3Z0djRzZiAoX19hLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0X25fczMyX2YzMiAoZmxvYXQzMngyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92Y3Z0X252MnNmIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0X25fZjMyX3MzMiAoaW50MzJ4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDJfdClfX2J1aWx0aW5fbmVvbl92Y3Z0X252MnNpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0X25fZjMyX3UzMiAodWludDMyeDJfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoZmxvYXQzMngyX3QpX19idWlsdGluX25lb25fdmN2dF9udjJzaSAoKGludDMyeDJfdCkgX19hLCBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0X25fdTMyX2YzMiAoZmxvYXQzMngyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdmN2dF9udjJzZiAoX19hLCBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRxX25fczMyX2YzMiAoZmxvYXQzMng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92Y3Z0X252NHNmIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0cV9uX2YzMl9zMzIgKGludDMyeDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoZmxvYXQzMng0X3QpX19idWlsdGluX25lb25fdmN2dF9udjRzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dHFfbl9mMzJfdTMyICh1aW50MzJ4NF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDRfdClfX2J1aWx0aW5fbmVvbl92Y3Z0X252NHNpICgoaW50MzJ4NF90KSBfX2EsIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRxX25fdTMyX2YzMiAoZmxvYXQzMng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdmN2dF9udjRzZiAoX19hLCBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1vdm5fczE2IChpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3Ztb3ZudjhoaSAoX19hLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92bl9zMzIgKGludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3Ztb3ZudjRzaSAoX19hLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92bl9zNjQgKGludDY0eDJfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3Ztb3ZudjJkaSAoX19hLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92bl91MTYgKHVpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92bW92bnY4aGkgKChpbnQxNng4X3QpIF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3ZuX3UzMiAodWludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92bW92bnY0c2kgKChpbnQzMng0X3QpIF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3ZuX3U2NCAodWludDY0eDJfdCBfX2EpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92bW92bnYyZGkgKChpbnQ2NHgyX3QpIF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cW1vdm5fczE2IChpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZxbW92bnY4aGkgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFtb3ZuX3MzMiAoaW50MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdnFtb3ZudjRzaSAoX19hLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cW1vdm5fczY0IChpbnQ2NHgyX3QgX19hKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cW1vdm52MmRpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxbW92bl91MTYgKHVpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92cW1vdm52OGhpICgoaW50MTZ4OF90KSBfX2EsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cW1vdm5fdTMyICh1aW50MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZxbW92bnY0c2kgKChpbnQzMng0X3QpIF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxbW92bl91NjQgKHVpbnQ2NHgyX3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnFtb3ZudjJkaSAoKGludDY0eDJfdCkgX19hLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cW1vdnVuX3MxNiAoaW50MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdnFtb3Z1bnY4aGkgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxbW92dW5fczMyIChpbnQzMng0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdnFtb3Z1bnY0c2kgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxbW92dW5fczY0IChpbnQ2NHgyX3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnFtb3Z1bnYyZGkgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1vdmxfczggKGludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpX19idWlsdGluX25lb25fdm1vdmx2OHFpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3ZsX3MxNiAoaW50MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdm1vdmx2NGhpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3ZsX3MzMiAoaW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdm1vdmx2MnNpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92bF91OCAodWludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3Ztb3ZsdjhxaSAoKGludDh4OF90KSBfX2EsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92bF91MTYgKHVpbnQxNng0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdm1vdmx2NGhpICgoaW50MTZ4NF90KSBfX2EsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92bF91MzIgKHVpbnQzMngyX3QgX19hKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdm1vdmx2MnNpICgoaW50MzJ4Ml90KSBfX2EsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRibDFfczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3Z0YmwxdjhxaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0YmwxX3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92dGJsMXY4cWkgKChpbnQ4eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRibDFfcDggKHBvbHk4eDhfdCBfX2EsIHVpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAocG9seTh4OF90KV9fYnVpbHRpbl9uZW9uX3Z0YmwxdjhxaSAoKGludDh4OF90KSBfX2EsIChpbnQ4eDhfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0YmwyX3M4IChpbnQ4eDh4Ml90IF9fYSwgaW50OHg4X3QgX19iKQoreworICB1bmlvbiB7IGludDh4OHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19hdSA9IHsgX19hIH07CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdnRibDJ2OHFpIChfX2F1Ll9fbywgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dGJsMl91OCAodWludDh4OHgyX3QgX19hLCB1aW50OHg4X3QgX19iKQoreworICB1bmlvbiB7IHVpbnQ4eDh4Ml90IF9faTsgX19idWlsdGluX25lb25fdGkgX19vOyB9IF9fYXUgPSB7IF9fYSB9OworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92dGJsMnY4cWkgKF9fYXUuX19vLCAoaW50OHg4X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRibDJfcDggKHBvbHk4eDh4Ml90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgdW5pb24geyBwb2x5OHg4eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3RpIF9fbzsgfSBfX2F1ID0geyBfX2EgfTsKKyAgcmV0dXJuIChwb2x5OHg4X3QpX19idWlsdGluX25lb25fdnRibDJ2OHFpIChfX2F1Ll9fbywgKGludDh4OF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRibDNfczggKGludDh4OHgzX3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHVuaW9uIHsgaW50OHg4eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX2F1ID0geyBfX2EgfTsKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92dGJsM3Y4cWkgKF9fYXUuX19vLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0YmwzX3U4ICh1aW50OHg4eDNfdCBfX2EsIHVpbnQ4eDhfdCBfX2IpCit7CisgIHVuaW9uIHsgdWludDh4OHgzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9laSBfX287IH0gX19hdSA9IHsgX19hIH07CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3Z0YmwzdjhxaSAoX19hdS5fX28sIChpbnQ4eDhfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dGJsM19wOCAocG9seTh4OHgzX3QgX19hLCB1aW50OHg4X3QgX19iKQoreworICB1bmlvbiB7IHBvbHk4eDh4M190IF9faTsgX19idWlsdGluX25lb25fZWkgX19vOyB9IF9fYXUgPSB7IF9fYSB9OworICByZXR1cm4gKHBvbHk4eDhfdClfX2J1aWx0aW5fbmVvbl92dGJsM3Y4cWkgKF9fYXUuX19vLCAoaW50OHg4X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dGJsNF9zOCAoaW50OHg4eDRfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgdW5pb24geyBpbnQ4eDh4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fYXUgPSB7IF9fYSB9OworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3Z0Ymw0djhxaSAoX19hdS5fX28sIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRibDRfdTggKHVpbnQ4eDh4NF90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgdW5pb24geyB1aW50OHg4eDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX2F1ID0geyBfX2EgfTsKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdnRibDR2OHFpIChfX2F1Ll9fbywgKGludDh4OF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0Ymw0X3A4IChwb2x5OHg4eDRfdCBfX2EsIHVpbnQ4eDhfdCBfX2IpCit7CisgIHVuaW9uIHsgcG9seTh4OHg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19hdSA9IHsgX19hIH07CisgIHJldHVybiAocG9seTh4OF90KV9fYnVpbHRpbl9uZW9uX3Z0Ymw0djhxaSAoX19hdS5fX28sIChpbnQ4eDhfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0YngxX3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYiwgaW50OHg4X3QgX19jKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3Z0YngxdjhxaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRieDFfdTggKHVpbnQ4eDhfdCBfX2EsIHVpbnQ4eDhfdCBfX2IsIHVpbnQ4eDhfdCBfX2MpCit7CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3Z0YngxdjhxaSAoKGludDh4OF90KSBfX2EsIChpbnQ4eDhfdCkgX19iLCAoaW50OHg4X3QpIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRieDFfcDggKHBvbHk4eDhfdCBfX2EsIHBvbHk4eDhfdCBfX2IsIHVpbnQ4eDhfdCBfX2MpCit7CisgIHJldHVybiAocG9seTh4OF90KV9fYnVpbHRpbl9uZW9uX3Z0YngxdjhxaSAoKGludDh4OF90KSBfX2EsIChpbnQ4eDhfdCkgX19iLCAoaW50OHg4X3QpIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dGJ4Ml9zOCAoaW50OHg4X3QgX19hLCBpbnQ4eDh4Ml90IF9fYiwgaW50OHg4X3QgX19jKQoreworICB1bmlvbiB7IGludDh4OHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19idSA9IHsgX19iIH07CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdnRieDJ2OHFpIChfX2EsIF9fYnUuX19vLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0YngyX3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4eDJfdCBfX2IsIHVpbnQ4eDhfdCBfX2MpCit7CisgIHVuaW9uIHsgdWludDh4OHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19idSA9IHsgX19iIH07CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3Z0YngydjhxaSAoKGludDh4OF90KSBfX2EsIF9fYnUuX19vLCAoaW50OHg4X3QpIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRieDJfcDggKHBvbHk4eDhfdCBfX2EsIHBvbHk4eDh4Ml90IF9fYiwgdWludDh4OF90IF9fYykKK3sKKyAgdW5pb24geyBwb2x5OHg4eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3RpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgcmV0dXJuIChwb2x5OHg4X3QpX19idWlsdGluX25lb25fdnRieDJ2OHFpICgoaW50OHg4X3QpIF9fYSwgX19idS5fX28sIChpbnQ4eDhfdCkgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0YngzX3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OHgzX3QgX19iLCBpbnQ4eDhfdCBfX2MpCit7CisgIHVuaW9uIHsgaW50OHg4eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92dGJ4M3Y4cWkgKF9fYSwgX19idS5fX28sIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRieDNfdTggKHVpbnQ4eDhfdCBfX2EsIHVpbnQ4eDh4M190IF9fYiwgdWludDh4OF90IF9fYykKK3sKKyAgdW5pb24geyB1aW50OHg4eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdnRieDN2OHFpICgoaW50OHg4X3QpIF9fYSwgX19idS5fX28sIChpbnQ4eDhfdCkgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dGJ4M19wOCAocG9seTh4OF90IF9fYSwgcG9seTh4OHgzX3QgX19iLCB1aW50OHg4X3QgX19jKQoreworICB1bmlvbiB7IHBvbHk4eDh4M190IF9faTsgX19idWlsdGluX25lb25fZWkgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICByZXR1cm4gKHBvbHk4eDhfdClfX2J1aWx0aW5fbmVvbl92dGJ4M3Y4cWkgKChpbnQ4eDhfdCkgX19hLCBfX2J1Ll9fbywgKGludDh4OF90KSBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRieDRfczggKGludDh4OF90IF9fYSwgaW50OHg4eDRfdCBfX2IsIGludDh4OF90IF9fYykKK3sKKyAgdW5pb24geyBpbnQ4eDh4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3Z0Yng0djhxaSAoX19hLCBfX2J1Ll9fbywgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dGJ4NF91OCAodWludDh4OF90IF9fYSwgdWludDh4OHg0X3QgX19iLCB1aW50OHg4X3QgX19jKQoreworICB1bmlvbiB7IHVpbnQ4eDh4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92dGJ4NHY4cWkgKChpbnQ4eDhfdCkgX19hLCBfX2J1Ll9fbywgKGludDh4OF90KSBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0Yng0X3A4IChwb2x5OHg4X3QgX19hLCBwb2x5OHg4eDRfdCBfX2IsIHVpbnQ4eDhfdCBfX2MpCit7CisgIHVuaW9uIHsgcG9seTh4OHg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19idSA9IHsgX19iIH07CisgIHJldHVybiAocG9seTh4OF90KV9fYnVpbHRpbl9uZW9uX3Z0Yng0djhxaSAoKGludDh4OF90KSBfX2EsIF9fYnUuX19vLCAoaW50OHg4X3QpIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bF9sYW5lX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdm11bF9sYW5ldjRoaSAoX19hLCBfX2IsIF9fYywgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bF9sYW5lX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdm11bF9sYW5ldjJzaSAoX19hLCBfX2IsIF9fYywgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsX2xhbmVfZjMyIChmbG9hdDMyeDJfdCBfX2EsIGZsb2F0MzJ4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDJfdClfX2J1aWx0aW5fbmVvbl92bXVsX2xhbmV2MnNmIChfX2EsIF9fYiwgX19jLCAzKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bF9sYW5lX3UxNiAodWludDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdm11bF9sYW5ldjRoaSAoKGludDE2eDRfdCkgX19hLCAoaW50MTZ4NF90KSBfX2IsIF9fYywgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxfbGFuZV91MzIgKHVpbnQzMngyX3QgX19hLCB1aW50MzJ4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZtdWxfbGFuZXYyc2kgKChpbnQzMngyX3QpIF9fYSwgKGludDMyeDJfdCkgX19iLCBfX2MsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxxX2xhbmVfczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92bXVsX2xhbmV2OGhpIChfX2EsIF9fYiwgX19jLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVscV9sYW5lX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdm11bF9sYW5ldjRzaSAoX19hLCBfX2IsIF9fYywgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVscV9sYW5lX2YzMiAoZmxvYXQzMng0X3QgX19hLCBmbG9hdDMyeDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoZmxvYXQzMng0X3QpX19idWlsdGluX25lb25fdm11bF9sYW5ldjRzZiAoX19hLCBfX2IsIF9fYywgMyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxxX2xhbmVfdTE2ICh1aW50MTZ4OF90IF9fYSwgdWludDE2eDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92bXVsX2xhbmV2OGhpICgoaW50MTZ4OF90KSBfX2EsIChpbnQxNng0X3QpIF9fYiwgX19jLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bHFfbGFuZV91MzIgKHVpbnQzMng0X3QgX19hLCB1aW50MzJ4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZtdWxfbGFuZXY0c2kgKChpbnQzMng0X3QpIF9fYSwgKGludDMyeDJfdCkgX19iLCBfX2MsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFfbGFuZV9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IsIGludDE2eDRfdCBfX2MsIGNvbnN0IGludCBfX2QpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZtbGFfbGFuZXY0aGkgKF9fYSwgX19iLCBfX2MsIF9fZCwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYV9sYW5lX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYiwgaW50MzJ4Ml90IF9fYywgY29uc3QgaW50IF9fZCkKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdm1sYV9sYW5ldjJzaSAoX19hLCBfX2IsIF9fYywgX19kLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFfbGFuZV9mMzIgKGZsb2F0MzJ4Ml90IF9fYSwgZmxvYXQzMngyX3QgX19iLCBmbG9hdDMyeDJfdCBfX2MsIGNvbnN0IGludCBfX2QpCit7CisgIHJldHVybiAoZmxvYXQzMngyX3QpX19idWlsdGluX25lb25fdm1sYV9sYW5ldjJzZiAoX19hLCBfX2IsIF9fYywgX19kLCAzKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYV9sYW5lX3UxNiAodWludDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iLCB1aW50MTZ4NF90IF9fYywgY29uc3QgaW50IF9fZCkKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZtbGFfbGFuZXY0aGkgKChpbnQxNng0X3QpIF9fYSwgKGludDE2eDRfdCkgX19iLCAoaW50MTZ4NF90KSBfX2MsIF9fZCwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFfbGFuZV91MzIgKHVpbnQzMngyX3QgX19hLCB1aW50MzJ4Ml90IF9fYiwgdWludDMyeDJfdCBfX2MsIGNvbnN0IGludCBfX2QpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92bWxhX2xhbmV2MnNpICgoaW50MzJ4Ml90KSBfX2EsIChpbnQzMngyX3QpIF9fYiwgKGludDMyeDJfdCkgX19jLCBfX2QsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFxX2xhbmVfczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iLCBpbnQxNng0X3QgX19jLCBjb25zdCBpbnQgX19kKQoreworICByZXR1cm4gKGludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92bWxhX2xhbmV2OGhpIChfX2EsIF9fYiwgX19jLCBfX2QsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFxX2xhbmVfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iLCBpbnQzMngyX3QgX19jLCBjb25zdCBpbnQgX19kKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92bWxhX2xhbmV2NHNpIChfX2EsIF9fYiwgX19jLCBfX2QsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYXFfbGFuZV9mMzIgKGZsb2F0MzJ4NF90IF9fYSwgZmxvYXQzMng0X3QgX19iLCBmbG9hdDMyeDJfdCBfX2MsIGNvbnN0IGludCBfX2QpCit7CisgIHJldHVybiAoZmxvYXQzMng0X3QpX19idWlsdGluX25lb25fdm1sYV9sYW5ldjRzZiAoX19hLCBfX2IsIF9fYywgX19kLCAzKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYXFfbGFuZV91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYiwgdWludDE2eDRfdCBfX2MsIGNvbnN0IGludCBfX2QpCit7CisgIHJldHVybiAodWludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92bWxhX2xhbmV2OGhpICgoaW50MTZ4OF90KSBfX2EsIChpbnQxNng4X3QpIF9fYiwgKGludDE2eDRfdCkgX19jLCBfX2QsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhcV9sYW5lX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iLCB1aW50MzJ4Ml90IF9fYywgY29uc3QgaW50IF9fZCkKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZtbGFfbGFuZXY0c2kgKChpbnQzMng0X3QpIF9fYSwgKGludDMyeDRfdCkgX19iLCAoaW50MzJ4Ml90KSBfX2MsIF9fZCwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYWxfbGFuZV9zMTYgKGludDMyeDRfdCBfX2EsIGludDE2eDRfdCBfX2IsIGludDE2eDRfdCBfX2MsIGNvbnN0IGludCBfX2QpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZtbGFsX2xhbmV2NGhpIChfX2EsIF9fYiwgX19jLCBfX2QsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFsX2xhbmVfczMyIChpbnQ2NHgyX3QgX19hLCBpbnQzMngyX3QgX19iLCBpbnQzMngyX3QgX19jLCBjb25zdCBpbnQgX19kKQoreworICByZXR1cm4gKGludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92bWxhbF9sYW5ldjJzaSAoX19hLCBfX2IsIF9fYywgX19kLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYWxfbGFuZV91MTYgKHVpbnQzMng0X3QgX19hLCB1aW50MTZ4NF90IF9fYiwgdWludDE2eDRfdCBfX2MsIGNvbnN0IGludCBfX2QpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92bWxhbF9sYW5ldjRoaSAoKGludDMyeDRfdCkgX19hLCAoaW50MTZ4NF90KSBfX2IsIChpbnQxNng0X3QpIF9fYywgX19kLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYWxfbGFuZV91MzIgKHVpbnQ2NHgyX3QgX19hLCB1aW50MzJ4Ml90IF9fYiwgdWludDMyeDJfdCBfX2MsIGNvbnN0IGludCBfX2QpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92bWxhbF9sYW5ldjJzaSAoKGludDY0eDJfdCkgX19hLCAoaW50MzJ4Ml90KSBfX2IsIChpbnQzMngyX3QpIF9fYywgX19kLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtbGFsX2xhbmVfczE2IChpbnQzMng0X3QgX19hLCBpbnQxNng0X3QgX19iLCBpbnQxNng0X3QgX19jLCBjb25zdCBpbnQgX19kKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cWRtbGFsX2xhbmV2NGhpIChfX2EsIF9fYiwgX19jLCBfX2QsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG1sYWxfbGFuZV9zMzIgKGludDY0eDJfdCBfX2EsIGludDMyeDJfdCBfX2IsIGludDMyeDJfdCBfX2MsIGNvbnN0IGludCBfX2QpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxfbGFuZXYyc2kgKF9fYSwgX19iLCBfX2MsIF9fZCwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc19sYW5lX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYiwgaW50MTZ4NF90IF9fYywgY29uc3QgaW50IF9fZCkKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdm1sc19sYW5ldjRoaSAoX19hLCBfX2IsIF9fYywgX19kLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzX2xhbmVfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iLCBpbnQzMngyX3QgX19jLCBjb25zdCBpbnQgX19kKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92bWxzX2xhbmV2MnNpIChfX2EsIF9fYiwgX19jLCBfX2QsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc19sYW5lX2YzMiAoZmxvYXQzMngyX3QgX19hLCBmbG9hdDMyeDJfdCBfX2IsIGZsb2F0MzJ4Ml90IF9fYywgY29uc3QgaW50IF9fZCkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDJfdClfX2J1aWx0aW5fbmVvbl92bWxzX2xhbmV2MnNmIChfX2EsIF9fYiwgX19jLCBfX2QsIDMpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzX2xhbmVfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IsIHVpbnQxNng0X3QgX19jLCBjb25zdCBpbnQgX19kKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdm1sc19sYW5ldjRoaSAoKGludDE2eDRfdCkgX19hLCAoaW50MTZ4NF90KSBfX2IsIChpbnQxNng0X3QpIF9fYywgX19kLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc19sYW5lX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iLCB1aW50MzJ4Ml90IF9fYywgY29uc3QgaW50IF9fZCkKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZtbHNfbGFuZXYyc2kgKChpbnQzMngyX3QpIF9fYSwgKGludDMyeDJfdCkgX19iLCAoaW50MzJ4Ml90KSBfX2MsIF9fZCwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc3FfbGFuZV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IsIGludDE2eDRfdCBfX2MsIGNvbnN0IGludCBfX2QpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZtbHNfbGFuZXY4aGkgKF9fYSwgX19iLCBfX2MsIF9fZCwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc3FfbGFuZV9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IsIGludDMyeDJfdCBfX2MsIGNvbnN0IGludCBfX2QpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZtbHNfbGFuZXY0c2kgKF9fYSwgX19iLCBfX2MsIF9fZCwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzcV9sYW5lX2YzMiAoZmxvYXQzMng0X3QgX19hLCBmbG9hdDMyeDRfdCBfX2IsIGZsb2F0MzJ4Ml90IF9fYywgY29uc3QgaW50IF9fZCkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDRfdClfX2J1aWx0aW5fbmVvbl92bWxzX2xhbmV2NHNmIChfX2EsIF9fYiwgX19jLCBfX2QsIDMpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzcV9sYW5lX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iLCB1aW50MTZ4NF90IF9fYywgY29uc3QgaW50IF9fZCkKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZtbHNfbGFuZXY4aGkgKChpbnQxNng4X3QpIF9fYSwgKGludDE2eDhfdCkgX19iLCAoaW50MTZ4NF90KSBfX2MsIF9fZCwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNxX2xhbmVfdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IsIHVpbnQzMngyX3QgX19jLCBjb25zdCBpbnQgX19kKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdm1sc19sYW5ldjRzaSAoKGludDMyeDRfdCkgX19hLCAoaW50MzJ4NF90KSBfX2IsIChpbnQzMngyX3QpIF9fYywgX19kLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzbF9sYW5lX3MxNiAoaW50MzJ4NF90IF9fYSwgaW50MTZ4NF90IF9fYiwgaW50MTZ4NF90IF9fYywgY29uc3QgaW50IF9fZCkKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdm1sc2xfbGFuZXY0aGkgKF9fYSwgX19iLCBfX2MsIF9fZCwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc2xfbGFuZV9zMzIgKGludDY0eDJfdCBfX2EsIGludDMyeDJfdCBfX2IsIGludDMyeDJfdCBfX2MsIGNvbnN0IGludCBfX2QpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZtbHNsX2xhbmV2MnNpIChfX2EsIF9fYiwgX19jLCBfX2QsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzbF9sYW5lX3UxNiAodWludDMyeDRfdCBfX2EsIHVpbnQxNng0X3QgX19iLCB1aW50MTZ4NF90IF9fYywgY29uc3QgaW50IF9fZCkKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZtbHNsX2xhbmV2NGhpICgoaW50MzJ4NF90KSBfX2EsIChpbnQxNng0X3QpIF9fYiwgKGludDE2eDRfdCkgX19jLCBfX2QsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzbF9sYW5lX3UzMiAodWludDY0eDJfdCBfX2EsIHVpbnQzMngyX3QgX19iLCB1aW50MzJ4Ml90IF9fYywgY29uc3QgaW50IF9fZCkKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZtbHNsX2xhbmV2MnNpICgoaW50NjR4Ml90KSBfX2EsIChpbnQzMngyX3QpIF9fYiwgKGludDMyeDJfdCkgX19jLCBfX2QsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG1sc2xfbGFuZV9zMTYgKGludDMyeDRfdCBfX2EsIGludDE2eDRfdCBfX2IsIGludDE2eDRfdCBfX2MsIGNvbnN0IGludCBfX2QpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xfbGFuZXY0aGkgKF9fYSwgX19iLCBfX2MsIF9fZCwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbWxzbF9sYW5lX3MzMiAoaW50NjR4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYiwgaW50MzJ4Ml90IF9fYywgY29uc3QgaW50IF9fZCkKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnFkbWxzbF9sYW5ldjJzaSAoX19hLCBfX2IsIF9fYywgX19kLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsbF9sYW5lX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdm11bGxfbGFuZXY0aGkgKF9fYSwgX19iLCBfX2MsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxsX2xhbmVfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92bXVsbF9sYW5ldjJzaSAoX19hLCBfX2IsIF9fYywgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxsX2xhbmVfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92bXVsbF9sYW5ldjRoaSAoKGludDE2eDRfdCkgX19hLCAoaW50MTZ4NF90KSBfX2IsIF9fYywgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxsX2xhbmVfdTMyICh1aW50MzJ4Ml90IF9fYSwgdWludDMyeDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92bXVsbF9sYW5ldjJzaSAoKGludDMyeDJfdCkgX19hLCAoaW50MzJ4Ml90KSBfX2IsIF9fYywgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbXVsbF9sYW5lX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdnFkbXVsbF9sYW5ldjRoaSAoX19hLCBfX2IsIF9fYywgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbXVsbF9sYW5lX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnFkbXVsbF9sYW5ldjJzaSAoX19hLCBfX2IsIF9fYywgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbXVsaHFfbGFuZV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZxZG11bGhfbGFuZXY4aGkgKF9fYSwgX19iLCBfX2MsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG11bGhxX2xhbmVfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMngyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cWRtdWxoX2xhbmV2NHNpIChfX2EsIF9fYiwgX19jLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxoX2xhbmVfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92cWRtdWxoX2xhbmV2NGhpIChfX2EsIF9fYiwgX19jLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxoX2xhbmVfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cWRtdWxoX2xhbmV2MnNpIChfX2EsIF9fYiwgX19jLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJkbXVsaHFfbGFuZV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZxZG11bGhfbGFuZXY4aGkgKF9fYSwgX19iLCBfX2MsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcmRtdWxocV9sYW5lX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdnFkbXVsaF9sYW5ldjRzaSAoX19hLCBfX2IsIF9fYywgNSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyZG11bGhfbGFuZV9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZxZG11bGhfbGFuZXY0aGkgKF9fYSwgX19iLCBfX2MsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcmRtdWxoX2xhbmVfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cWRtdWxoX2xhbmV2MnNpIChfX2EsIF9fYiwgX19jLCA1KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsX25fczE2IChpbnQxNng0X3QgX19hLCBpbnQxNl90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdm11bF9udjRoaSAoX19hLCAoX19idWlsdGluX25lb25faGkpIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bF9uX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZtdWxfbnYyc2kgKF9fYSwgKF9fYnVpbHRpbl9uZW9uX3NpKSBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bF9uX2YzMiAoZmxvYXQzMngyX3QgX19hLCBmbG9hdDMyX3QgX19iKQoreworICByZXR1cm4gKGZsb2F0MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZtdWxfbnYyc2YgKF9fYSwgKF9fYnVpbHRpbl9uZW9uX3NmKSBfX2IsIDMpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsX25fdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdm11bF9udjRoaSAoKGludDE2eDRfdCkgX19hLCAoX19idWlsdGluX25lb25faGkpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxfbl91MzIgKHVpbnQzMngyX3QgX19hLCB1aW50MzJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92bXVsX252MnNpICgoaW50MzJ4Ml90KSBfX2EsIChfX2J1aWx0aW5fbmVvbl9zaSkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVscV9uX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZtdWxfbnY4aGkgKF9fYSwgKF9fYnVpbHRpbl9uZW9uX2hpKSBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxxX25fczMyIChpbnQzMng0X3QgX19hLCBpbnQzMl90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdm11bF9udjRzaSAoX19hLCAoX19idWlsdGluX25lb25fc2kpIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVscV9uX2YzMiAoZmxvYXQzMng0X3QgX19hLCBmbG9hdDMyX3QgX19iKQoreworICByZXR1cm4gKGZsb2F0MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZtdWxfbnY0c2YgKF9fYSwgKF9fYnVpbHRpbl9uZW9uX3NmKSBfX2IsIDMpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVscV9uX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZtdWxfbnY4aGkgKChpbnQxNng4X3QpIF9fYSwgKF9fYnVpbHRpbl9uZW9uX2hpKSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVscV9uX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZtdWxfbnY0c2kgKChpbnQzMng0X3QpIF9fYSwgKF9fYnVpbHRpbl9uZW9uX3NpKSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxsX25fczE2IChpbnQxNng0X3QgX19hLCBpbnQxNl90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdm11bGxfbnY0aGkgKF9fYSwgKF9fYnVpbHRpbl9uZW9uX2hpKSBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxsX25fczMyIChpbnQzMngyX3QgX19hLCBpbnQzMl90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdm11bGxfbnYyc2kgKF9fYSwgKF9fYnVpbHRpbl9uZW9uX3NpKSBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsbF9uX3UxNiAodWludDE2eDRfdCBfX2EsIHVpbnQxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZtdWxsX252NGhpICgoaW50MTZ4NF90KSBfX2EsIChfX2J1aWx0aW5fbmVvbl9oaSkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bGxfbl91MzIgKHVpbnQzMngyX3QgX19hLCB1aW50MzJfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92bXVsbF9udjJzaSAoKGludDMyeDJfdCkgX19hLCAoX19idWlsdGluX25lb25fc2kpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbXVsbF9uX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZxZG11bGxfbnY0aGkgKF9fYSwgKF9fYnVpbHRpbl9uZW9uX2hpKSBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG11bGxfbl9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyX3QgX19iKQoreworICByZXR1cm4gKGludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92cWRtdWxsX252MnNpIChfX2EsIChfX2J1aWx0aW5fbmVvbl9zaSkgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxocV9uX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZxZG11bGhfbnY4aGkgKF9fYSwgKF9fYnVpbHRpbl9uZW9uX2hpKSBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG11bGhxX25fczMyIChpbnQzMng0X3QgX19hLCBpbnQzMl90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdnFkbXVsaF9udjRzaSAoX19hLCAoX19idWlsdGluX25lb25fc2kpIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbXVsaF9uX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZxZG11bGhfbnY0aGkgKF9fYSwgKF9fYnVpbHRpbl9uZW9uX2hpKSBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG11bGhfbl9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyX3QgX19iKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cWRtdWxoX252MnNpIChfX2EsIChfX2J1aWx0aW5fbmVvbl9zaSkgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJkbXVsaHFfbl9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92cWRtdWxoX252OGhpIChfX2EsIChfX2J1aWx0aW5fbmVvbl9oaSkgX19iLCA1KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJkbXVsaHFfbl9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyX3QgX19iKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cWRtdWxoX252NHNpIChfX2EsIChfX2J1aWx0aW5fbmVvbl9zaSkgX19iLCA1KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJkbXVsaF9uX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZxZG11bGhfbnY0aGkgKF9fYSwgKF9fYnVpbHRpbl9uZW9uX2hpKSBfX2IsIDUpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcmRtdWxoX25fczMyIChpbnQzMngyX3QgX19hLCBpbnQzMl90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdnFkbXVsaF9udjJzaSAoX19hLCAoX19idWlsdGluX25lb25fc2kpIF9fYiwgNSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYV9uX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYiwgaW50MTZfdCBfX2MpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZtbGFfbnY0aGkgKF9fYSwgX19iLCAoX19idWlsdGluX25lb25faGkpIF9fYywgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYV9uX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYiwgaW50MzJfdCBfX2MpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZtbGFfbnYyc2kgKF9fYSwgX19iLCAoX19idWlsdGluX25lb25fc2kpIF9fYywgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhX25fZjMyIChmbG9hdDMyeDJfdCBfX2EsIGZsb2F0MzJ4Ml90IF9fYiwgZmxvYXQzMl90IF9fYykKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDJfdClfX2J1aWx0aW5fbmVvbl92bWxhX252MnNmIChfX2EsIF9fYiwgKF9fYnVpbHRpbl9uZW9uX3NmKSBfX2MsIDMpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhX25fdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IsIHVpbnQxNl90IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZtbGFfbnY0aGkgKChpbnQxNng0X3QpIF9fYSwgKGludDE2eDRfdCkgX19iLCAoX19idWlsdGluX25lb25faGkpIF9fYywgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFfbl91MzIgKHVpbnQzMngyX3QgX19hLCB1aW50MzJ4Ml90IF9fYiwgdWludDMyX3QgX19jKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdm1sYV9udjJzaSAoKGludDMyeDJfdCkgX19hLCAoaW50MzJ4Ml90KSBfX2IsIChfX2J1aWx0aW5fbmVvbl9zaSkgX19jLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhcV9uX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYiwgaW50MTZfdCBfX2MpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZtbGFfbnY4aGkgKF9fYSwgX19iLCAoX19idWlsdGluX25lb25faGkpIF9fYywgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYXFfbl9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IsIGludDMyX3QgX19jKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92bWxhX252NHNpIChfX2EsIF9fYiwgKF9fYnVpbHRpbl9uZW9uX3NpKSBfX2MsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYXFfbl9mMzIgKGZsb2F0MzJ4NF90IF9fYSwgZmxvYXQzMng0X3QgX19iLCBmbG9hdDMyX3QgX19jKQoreworICByZXR1cm4gKGZsb2F0MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZtbGFfbnY0c2YgKF9fYSwgX19iLCAoX19idWlsdGluX25lb25fc2YpIF9fYywgMyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFxX25fdTE2ICh1aW50MTZ4OF90IF9fYSwgdWludDE2eDhfdCBfX2IsIHVpbnQxNl90IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZtbGFfbnY4aGkgKChpbnQxNng4X3QpIF9fYSwgKGludDE2eDhfdCkgX19iLCAoX19idWlsdGluX25lb25faGkpIF9fYywgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFxX25fdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IsIHVpbnQzMl90IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZtbGFfbnY0c2kgKChpbnQzMng0X3QpIF9fYSwgKGludDMyeDRfdCkgX19iLCAoX19idWlsdGluX25lb25fc2kpIF9fYywgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYWxfbl9zMTYgKGludDMyeDRfdCBfX2EsIGludDE2eDRfdCBfX2IsIGludDE2X3QgX19jKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92bWxhbF9udjRoaSAoX19hLCBfX2IsIChfX2J1aWx0aW5fbmVvbl9oaSkgX19jLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhbF9uX3MzMiAoaW50NjR4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYiwgaW50MzJfdCBfX2MpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZtbGFsX252MnNpIChfX2EsIF9fYiwgKF9fYnVpbHRpbl9uZW9uX3NpKSBfX2MsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhbF9uX3UxNiAodWludDMyeDRfdCBfX2EsIHVpbnQxNng0X3QgX19iLCB1aW50MTZfdCBfX2MpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92bWxhbF9udjRoaSAoKGludDMyeDRfdCkgX19hLCAoaW50MTZ4NF90KSBfX2IsIChfX2J1aWx0aW5fbmVvbl9oaSkgX19jLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYWxfbl91MzIgKHVpbnQ2NHgyX3QgX19hLCB1aW50MzJ4Ml90IF9fYiwgdWludDMyX3QgX19jKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdm1sYWxfbnYyc2kgKChpbnQ2NHgyX3QpIF9fYSwgKGludDMyeDJfdCkgX19iLCAoX19idWlsdGluX25lb25fc2kpIF9fYywgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbWxhbF9uX3MxNiAoaW50MzJ4NF90IF9fYSwgaW50MTZ4NF90IF9fYiwgaW50MTZfdCBfX2MpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxfbnY0aGkgKF9fYSwgX19iLCAoX19idWlsdGluX25lb25faGkpIF9fYywgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbWxhbF9uX3MzMiAoaW50NjR4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYiwgaW50MzJfdCBfX2MpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxfbnYyc2kgKF9fYSwgX19iLCAoX19idWlsdGluX25lb25fc2kpIF9fYywgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc19uX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYiwgaW50MTZfdCBfX2MpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZtbHNfbnY0aGkgKF9fYSwgX19iLCAoX19idWlsdGluX25lb25faGkpIF9fYywgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc19uX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYiwgaW50MzJfdCBfX2MpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZtbHNfbnYyc2kgKF9fYSwgX19iLCAoX19idWlsdGluX25lb25fc2kpIF9fYywgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzX25fZjMyIChmbG9hdDMyeDJfdCBfX2EsIGZsb2F0MzJ4Ml90IF9fYiwgZmxvYXQzMl90IF9fYykKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDJfdClfX2J1aWx0aW5fbmVvbl92bWxzX252MnNmIChfX2EsIF9fYiwgKF9fYnVpbHRpbl9uZW9uX3NmKSBfX2MsIDMpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzX25fdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IsIHVpbnQxNl90IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZtbHNfbnY0aGkgKChpbnQxNng0X3QpIF9fYSwgKGludDE2eDRfdCkgX19iLCAoX19idWlsdGluX25lb25faGkpIF9fYywgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNfbl91MzIgKHVpbnQzMngyX3QgX19hLCB1aW50MzJ4Ml90IF9fYiwgdWludDMyX3QgX19jKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdm1sc19udjJzaSAoKGludDMyeDJfdCkgX19hLCAoaW50MzJ4Ml90KSBfX2IsIChfX2J1aWx0aW5fbmVvbl9zaSkgX19jLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzcV9uX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYiwgaW50MTZfdCBfX2MpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZtbHNfbnY4aGkgKF9fYSwgX19iLCAoX19idWlsdGluX25lb25faGkpIF9fYywgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc3Ffbl9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IsIGludDMyX3QgX19jKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92bWxzX252NHNpIChfX2EsIF9fYiwgKF9fYnVpbHRpbl9uZW9uX3NpKSBfX2MsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc3Ffbl9mMzIgKGZsb2F0MzJ4NF90IF9fYSwgZmxvYXQzMng0X3QgX19iLCBmbG9hdDMyX3QgX19jKQoreworICByZXR1cm4gKGZsb2F0MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZtbHNfbnY0c2YgKF9fYSwgX19iLCAoX19idWlsdGluX25lb25fc2YpIF9fYywgMyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNxX25fdTE2ICh1aW50MTZ4OF90IF9fYSwgdWludDE2eDhfdCBfX2IsIHVpbnQxNl90IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZtbHNfbnY4aGkgKChpbnQxNng4X3QpIF9fYSwgKGludDE2eDhfdCkgX19iLCAoX19idWlsdGluX25lb25faGkpIF9fYywgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNxX25fdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IsIHVpbnQzMl90IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZtbHNfbnY0c2kgKChpbnQzMng0X3QpIF9fYSwgKGludDMyeDRfdCkgX19iLCAoX19idWlsdGluX25lb25fc2kpIF9fYywgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc2xfbl9zMTYgKGludDMyeDRfdCBfX2EsIGludDE2eDRfdCBfX2IsIGludDE2X3QgX19jKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92bWxzbF9udjRoaSAoX19hLCBfX2IsIChfX2J1aWx0aW5fbmVvbl9oaSkgX19jLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzbF9uX3MzMiAoaW50NjR4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYiwgaW50MzJfdCBfX2MpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZtbHNsX252MnNpIChfX2EsIF9fYiwgKF9fYnVpbHRpbl9uZW9uX3NpKSBfX2MsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzbF9uX3UxNiAodWludDMyeDRfdCBfX2EsIHVpbnQxNng0X3QgX19iLCB1aW50MTZfdCBfX2MpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92bWxzbF9udjRoaSAoKGludDMyeDRfdCkgX19hLCAoaW50MTZ4NF90KSBfX2IsIChfX2J1aWx0aW5fbmVvbl9oaSkgX19jLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc2xfbl91MzIgKHVpbnQ2NHgyX3QgX19hLCB1aW50MzJ4Ml90IF9fYiwgdWludDMyX3QgX19jKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdm1sc2xfbnYyc2kgKChpbnQ2NHgyX3QpIF9fYSwgKGludDMyeDJfdCkgX19iLCAoX19idWlsdGluX25lb25fc2kpIF9fYywgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbWxzbF9uX3MxNiAoaW50MzJ4NF90IF9fYSwgaW50MTZ4NF90IF9fYiwgaW50MTZfdCBfX2MpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xfbnY0aGkgKF9fYSwgX19iLCAoX19idWlsdGluX25lb25faGkpIF9fYywgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbWxzbF9uX3MzMiAoaW50NjR4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYiwgaW50MzJfdCBfX2MpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xfbnYyc2kgKF9fYSwgX19iLCAoX19idWlsdGluX25lb25fc2kpIF9fYywgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZXh0X3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92ZXh0djhxaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmV4dF9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZleHR2NGhpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZXh0X3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdmV4dHYyc2kgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZleHRfczY0IChpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDY0eDFfdClfX2J1aWx0aW5fbmVvbl92ZXh0ZGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmV4dF9mMzIgKGZsb2F0MzJ4Ml90IF9fYSwgZmxvYXQzMngyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGZsb2F0MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZleHR2MnNmIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZXh0X3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92ZXh0djhxaSAoKGludDh4OF90KSBfX2EsIChpbnQ4eDhfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZXh0X3UxNiAodWludDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdmV4dHY0aGkgKChpbnQxNng0X3QpIF9fYSwgKGludDE2eDRfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZXh0X3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdmV4dHYyc2kgKChpbnQzMngyX3QpIF9fYSwgKGludDMyeDJfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZXh0X3U2NCAodWludDY0eDFfdCBfX2EsIHVpbnQ2NHgxX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdmV4dGRpICgoaW50NjR4MV90KSBfX2EsIChpbnQ2NHgxX3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZXh0X3A4IChwb2x5OHg4X3QgX19hLCBwb2x5OHg4X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHBvbHk4eDhfdClfX2J1aWx0aW5fbmVvbl92ZXh0djhxaSAoKGludDh4OF90KSBfX2EsIChpbnQ4eDhfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZXh0X3AxNiAocG9seTE2eDRfdCBfX2EsIHBvbHkxNng0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHBvbHkxNng0X3QpX19idWlsdGluX25lb25fdmV4dHY0aGkgKChpbnQxNng0X3QpIF9fYSwgKGludDE2eDRfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZleHRxX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92ZXh0djE2cWkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZleHRxX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpX19idWlsdGluX25lb25fdmV4dHY4aGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZleHRxX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdmV4dHY0c2kgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZleHRxX3M2NCAoaW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdmV4dHYyZGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmV4dHFfZjMyIChmbG9hdDMyeDRfdCBfX2EsIGZsb2F0MzJ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDRfdClfX2J1aWx0aW5fbmVvbl92ZXh0djRzZiAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZleHRxX3U4ICh1aW50OHgxNl90IF9fYSwgdWludDh4MTZfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92ZXh0djE2cWkgKChpbnQ4eDE2X3QpIF9fYSwgKGludDh4MTZfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZXh0cV91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZleHR2OGhpICgoaW50MTZ4OF90KSBfX2EsIChpbnQxNng4X3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmV4dHFfdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92ZXh0djRzaSAoKGludDMyeDRfdCkgX19hLCAoaW50MzJ4NF90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZleHRxX3U2NCAodWludDY0eDJfdCBfX2EsIHVpbnQ2NHgyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdmV4dHYyZGkgKChpbnQ2NHgyX3QpIF9fYSwgKGludDY0eDJfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZXh0cV9wOCAocG9seTh4MTZfdCBfX2EsIHBvbHk4eDE2X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHBvbHk4eDE2X3QpX19idWlsdGluX25lb25fdmV4dHYxNnFpICgoaW50OHgxNl90KSBfX2EsIChpbnQ4eDE2X3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmV4dHFfcDE2IChwb2x5MTZ4OF90IF9fYSwgcG9seTE2eDhfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAocG9seTE2eDhfdClfX2J1aWx0aW5fbmVvbl92ZXh0djhoaSAoKGludDE2eDhfdCkgX19hLCAoaW50MTZ4OF90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2NjRfczggKGludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92cmV2NjR2OHFpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZXY2NF9zMTYgKGludDE2eDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZyZXY2NHY0aGkgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJldjY0X3MzMiAoaW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdnJldjY0djJzaSAoX19hLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZXY2NF9mMzIgKGZsb2F0MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cmV2NjR2MnNmIChfX2EsIDMpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZXY2NF91OCAodWludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdnJldjY0djhxaSAoKGludDh4OF90KSBfX2EsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2NjRfdTE2ICh1aW50MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZyZXY2NHY0aGkgKChpbnQxNng0X3QpIF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZXY2NF91MzIgKHVpbnQzMngyX3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnJldjY0djJzaSAoKGludDMyeDJfdCkgX19hLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2NjRfcDggKHBvbHk4eDhfdCBfX2EpCit7CisgIHJldHVybiAocG9seTh4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZXY2NHY4cWkgKChpbnQ4eDhfdCkgX19hLCAyKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJldjY0X3AxNiAocG9seTE2eDRfdCBfX2EpCit7CisgIHJldHVybiAocG9seTE2eDRfdClfX2J1aWx0aW5fbmVvbl92cmV2NjR2NGhpICgoaW50MTZ4NF90KSBfX2EsIDIpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZXY2NHFfczggKGludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiAoaW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZyZXY2NHYxNnFpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZXY2NHFfczE2IChpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKGludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92cmV2NjR2OGhpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZXY2NHFfczMyIChpbnQzMng0X3QgX19hKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cmV2NjR2NHNpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJldjY0cV9mMzIgKGZsb2F0MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cmV2NjR2NHNmIChfX2EsIDMpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2NjRxX3U4ICh1aW50OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZyZXY2NHYxNnFpICgoaW50OHgxNl90KSBfX2EsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2NjRxX3UxNiAodWludDE2eDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92cmV2NjR2OGhpICgoaW50MTZ4OF90KSBfX2EsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2NjRxX3UzMiAodWludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cmV2NjR2NHNpICgoaW50MzJ4NF90KSBfX2EsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2NjRxX3A4IChwb2x5OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZyZXY2NHYxNnFpICgoaW50OHgxNl90KSBfX2EsIDIpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2NjRxX3AxNiAocG9seTE2eDhfdCBfX2EpCit7CisgIHJldHVybiAocG9seTE2eDhfdClfX2J1aWx0aW5fbmVvbl92cmV2NjR2OGhpICgoaW50MTZ4OF90KSBfX2EsIDIpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJldjMyX3M4IChpbnQ4eDhfdCBfX2EpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdnJldjMydjhxaSAoX19hLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2MzJfczE2IChpbnQxNng0X3QgX19hKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92cmV2MzJ2NGhpIChfX2EsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZXYzMl91OCAodWludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdnJldjMydjhxaSAoKGludDh4OF90KSBfX2EsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2MzJfdTE2ICh1aW50MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZyZXYzMnY0aGkgKChpbnQxNng0X3QpIF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJldjMyX3A4IChwb2x5OHg4X3QgX19hKQoreworICByZXR1cm4gKHBvbHk4eDhfdClfX2J1aWx0aW5fbmVvbl92cmV2MzJ2OHFpICgoaW50OHg4X3QpIF9fYSwgMik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZXYzMl9wMTYgKHBvbHkxNng0X3QgX19hKQoreworICByZXR1cm4gKHBvbHkxNng0X3QpX19idWlsdGluX25lb25fdnJldjMydjRoaSAoKGludDE2eDRfdCkgX19hLCAyKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2MzJxX3M4IChpbnQ4eDE2X3QgX19hKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92cmV2MzJ2MTZxaSAoX19hLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2MzJxX3MxNiAoaW50MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpX19idWlsdGluX25lb25fdnJldjMydjhoaSAoX19hLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJldjMycV91OCAodWludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92cmV2MzJ2MTZxaSAoKGludDh4MTZfdCkgX19hLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJldjMycV91MTYgKHVpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpX19idWlsdGluX25lb25fdnJldjMydjhoaSAoKGludDE2eDhfdCkgX19hLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJldjMycV9wOCAocG9seTh4MTZfdCBfX2EpCit7CisgIHJldHVybiAocG9seTh4MTZfdClfX2J1aWx0aW5fbmVvbl92cmV2MzJ2MTZxaSAoKGludDh4MTZfdCkgX19hLCAyKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJldjMycV9wMTYgKHBvbHkxNng4X3QgX19hKQoreworICByZXR1cm4gKHBvbHkxNng4X3QpX19idWlsdGluX25lb25fdnJldjMydjhoaSAoKGludDE2eDhfdCkgX19hLCAyKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZXYxNl9zOCAoaW50OHg4X3QgX19hKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZXYxNnY4cWkgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJldjE2X3U4ICh1aW50OHg4X3QgX19hKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92cmV2MTZ2OHFpICgoaW50OHg4X3QpIF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJldjE2X3A4IChwb2x5OHg4X3QgX19hKQoreworICByZXR1cm4gKHBvbHk4eDhfdClfX2J1aWx0aW5fbmVvbl92cmV2MTZ2OHFpICgoaW50OHg4X3QpIF9fYSwgMik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJldjE2cV9zOCAoaW50OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdnJldjE2djE2cWkgKF9fYSwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZXYxNnFfdTggKHVpbnQ4eDE2X3QgX19hKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdnJldjE2djE2cWkgKChpbnQ4eDE2X3QpIF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZXYxNnFfcDggKHBvbHk4eDE2X3QgX19hKQoreworICByZXR1cm4gKHBvbHk4eDE2X3QpX19idWlsdGluX25lb25fdnJldjE2djE2cWkgKChpbnQ4eDE2X3QpIF9fYSwgMik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YnNsX3M4ICh1aW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IsIGludDh4OF90IF9fYykKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92YnNsdjhxaSAoKGludDh4OF90KSBfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YnNsX3MxNiAodWludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IsIGludDE2eDRfdCBfX2MpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3Zic2x2NGhpICgoaW50MTZ4NF90KSBfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YnNsX3MzMiAodWludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IsIGludDMyeDJfdCBfX2MpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3Zic2x2MnNpICgoaW50MzJ4Ml90KSBfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YnNsX3M2NCAodWludDY0eDFfdCBfX2EsIGludDY0eDFfdCBfX2IsIGludDY0eDFfdCBfX2MpCit7CisgIHJldHVybiAoaW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3Zic2xkaSAoKGludDY0eDFfdCkgX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YnNsX2YzMiAodWludDMyeDJfdCBfX2EsIGZsb2F0MzJ4Ml90IF9fYiwgZmxvYXQzMngyX3QgX19jKQoreworICByZXR1cm4gKGZsb2F0MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3Zic2x2MnNmICgoaW50MzJ4Ml90KSBfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YnNsX3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iLCB1aW50OHg4X3QgX19jKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92YnNsdjhxaSAoKGludDh4OF90KSBfX2EsIChpbnQ4eDhfdCkgX19iLCAoaW50OHg4X3QpIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zic2xfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IsIHVpbnQxNng0X3QgX19jKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdmJzbHY0aGkgKChpbnQxNng0X3QpIF9fYSwgKGludDE2eDRfdCkgX19iLCAoaW50MTZ4NF90KSBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YnNsX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iLCB1aW50MzJ4Ml90IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3Zic2x2MnNpICgoaW50MzJ4Ml90KSBfX2EsIChpbnQzMngyX3QpIF9fYiwgKGludDMyeDJfdCkgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmJzbF91NjQgKHVpbnQ2NHgxX3QgX19hLCB1aW50NjR4MV90IF9fYiwgdWludDY0eDFfdCBfX2MpCit7CisgIHJldHVybiAodWludDY0eDFfdClfX2J1aWx0aW5fbmVvbl92YnNsZGkgKChpbnQ2NHgxX3QpIF9fYSwgKGludDY0eDFfdCkgX19iLCAoaW50NjR4MV90KSBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zic2xfcDggKHVpbnQ4eDhfdCBfX2EsIHBvbHk4eDhfdCBfX2IsIHBvbHk4eDhfdCBfX2MpCit7CisgIHJldHVybiAocG9seTh4OF90KV9fYnVpbHRpbl9uZW9uX3Zic2x2OHFpICgoaW50OHg4X3QpIF9fYSwgKGludDh4OF90KSBfX2IsIChpbnQ4eDhfdCkgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmJzbF9wMTYgKHVpbnQxNng0X3QgX19hLCBwb2x5MTZ4NF90IF9fYiwgcG9seTE2eDRfdCBfX2MpCit7CisgIHJldHVybiAocG9seTE2eDRfdClfX2J1aWx0aW5fbmVvbl92YnNsdjRoaSAoKGludDE2eDRfdCkgX19hLCAoaW50MTZ4NF90KSBfX2IsIChpbnQxNng0X3QpIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmJzbHFfczggKHVpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iLCBpbnQ4eDE2X3QgX19jKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92YnNsdjE2cWkgKChpbnQ4eDE2X3QpIF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zic2xxX3MxNiAodWludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IsIGludDE2eDhfdCBfX2MpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3Zic2x2OGhpICgoaW50MTZ4OF90KSBfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YnNscV9zMzIgKHVpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iLCBpbnQzMng0X3QgX19jKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92YnNsdjRzaSAoKGludDMyeDRfdCkgX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmJzbHFfczY0ICh1aW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYiwgaW50NjR4Ml90IF9fYykKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdmJzbHYyZGkgKChpbnQ2NHgyX3QpIF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmJzbHFfZjMyICh1aW50MzJ4NF90IF9fYSwgZmxvYXQzMng0X3QgX19iLCBmbG9hdDMyeDRfdCBfX2MpCit7CisgIHJldHVybiAoZmxvYXQzMng0X3QpX19idWlsdGluX25lb25fdmJzbHY0c2YgKChpbnQzMng0X3QpIF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YnNscV91OCAodWludDh4MTZfdCBfX2EsIHVpbnQ4eDE2X3QgX19iLCB1aW50OHgxNl90IF9fYykKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3Zic2x2MTZxaSAoKGludDh4MTZfdCkgX19hLCAoaW50OHgxNl90KSBfX2IsIChpbnQ4eDE2X3QpIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zic2xxX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iLCB1aW50MTZ4OF90IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3Zic2x2OGhpICgoaW50MTZ4OF90KSBfX2EsIChpbnQxNng4X3QpIF9fYiwgKGludDE2eDhfdCkgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmJzbHFfdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IsIHVpbnQzMng0X3QgX19jKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdmJzbHY0c2kgKChpbnQzMng0X3QpIF9fYSwgKGludDMyeDRfdCkgX19iLCAoaW50MzJ4NF90KSBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YnNscV91NjQgKHVpbnQ2NHgyX3QgX19hLCB1aW50NjR4Ml90IF9fYiwgdWludDY0eDJfdCBfX2MpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92YnNsdjJkaSAoKGludDY0eDJfdCkgX19hLCAoaW50NjR4Ml90KSBfX2IsIChpbnQ2NHgyX3QpIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zic2xxX3A4ICh1aW50OHgxNl90IF9fYSwgcG9seTh4MTZfdCBfX2IsIHBvbHk4eDE2X3QgX19jKQoreworICByZXR1cm4gKHBvbHk4eDE2X3QpX19idWlsdGluX25lb25fdmJzbHYxNnFpICgoaW50OHgxNl90KSBfX2EsIChpbnQ4eDE2X3QpIF9fYiwgKGludDh4MTZfdCkgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmJzbHFfcDE2ICh1aW50MTZ4OF90IF9fYSwgcG9seTE2eDhfdCBfX2IsIHBvbHkxNng4X3QgX19jKQoreworICByZXR1cm4gKHBvbHkxNng4X3QpX19idWlsdGluX25lb25fdmJzbHY4aGkgKChpbnQxNng4X3QpIF9fYSwgKGludDE2eDhfdCkgX19iLCAoaW50MTZ4OF90KSBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDh4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJuX3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgaW50OHg4eDJfdCBfX3J2OworICBfX2J1aWx0aW5fbmVvbl92dHJudjhxaSAoJl9fcnYudmFsWzBdLCBfX2EsIF9fYik7CisgIHJldHVybiBfX3J2OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRybl9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIGludDE2eDR4Ml90IF9fcnY7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm52NGhpICgmX19ydi52YWxbMF0sIF9fYSwgX19iKTsKKyAgcmV0dXJuIF9fcnY7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJuX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYikKK3sKKyAgaW50MzJ4MngyX3QgX19ydjsKKyAgX19idWlsdGluX25lb25fdnRybnYyc2kgKCZfX3J2LnZhbFswXSwgX19hLCBfX2IpOworICByZXR1cm4gX19ydjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRybl9mMzIgKGZsb2F0MzJ4Ml90IF9fYSwgZmxvYXQzMngyX3QgX19iKQoreworICBmbG9hdDMyeDJ4Ml90IF9fcnY7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm52MnNmICgmX19ydi52YWxbMF0sIF9fYSwgX19iKTsKKyAgcmV0dXJuIF9fcnY7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDh4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJuX3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iKQoreworICB1aW50OHg4eDJfdCBfX3J2OworICBfX2J1aWx0aW5fbmVvbl92dHJudjhxaSAoKGludDh4OF90ICopICZfX3J2LnZhbFswXSwgKGludDh4OF90KSBfX2EsIChpbnQ4eDhfdCkgX19iKTsKKyAgcmV0dXJuIF9fcnY7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRybl91MTYgKHVpbnQxNng0X3QgX19hLCB1aW50MTZ4NF90IF9fYikKK3sKKyAgdWludDE2eDR4Ml90IF9fcnY7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm52NGhpICgoaW50MTZ4NF90ICopICZfX3J2LnZhbFswXSwgKGludDE2eDRfdCkgX19hLCAoaW50MTZ4NF90KSBfX2IpOworICByZXR1cm4gX19ydjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJuX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICB1aW50MzJ4MngyX3QgX19ydjsKKyAgX19idWlsdGluX25lb25fdnRybnYyc2kgKChpbnQzMngyX3QgKikgJl9fcnYudmFsWzBdLCAoaW50MzJ4Ml90KSBfX2EsIChpbnQzMngyX3QpIF9fYik7CisgIHJldHVybiBfX3J2OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRybl9wOCAocG9seTh4OF90IF9fYSwgcG9seTh4OF90IF9fYikKK3sKKyAgcG9seTh4OHgyX3QgX19ydjsKKyAgX19idWlsdGluX25lb25fdnRybnY4cWkgKChpbnQ4eDhfdCAqKSAmX19ydi52YWxbMF0sIChpbnQ4eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYik7CisgIHJldHVybiBfX3J2OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0cm5fcDE2IChwb2x5MTZ4NF90IF9fYSwgcG9seTE2eDRfdCBfX2IpCit7CisgIHBvbHkxNng0eDJfdCBfX3J2OworICBfX2J1aWx0aW5fbmVvbl92dHJudjRoaSAoKGludDE2eDRfdCAqKSAmX19ydi52YWxbMF0sIChpbnQxNng0X3QpIF9fYSwgKGludDE2eDRfdCkgX19iKTsKKyAgcmV0dXJuIF9fcnY7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJucV9zOCAoaW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYikKK3sKKyAgaW50OHgxNngyX3QgX19ydjsKKyAgX19idWlsdGluX25lb25fdnRybnYxNnFpICgmX19ydi52YWxbMF0sIF9fYSwgX19iKTsKKyAgcmV0dXJuIF9fcnY7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDh4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJucV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIGludDE2eDh4Ml90IF9fcnY7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm52OGhpICgmX19ydi52YWxbMF0sIF9fYSwgX19iKTsKKyAgcmV0dXJuIF9fcnY7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJucV9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IpCit7CisgIGludDMyeDR4Ml90IF9fcnY7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm52NHNpICgmX19ydi52YWxbMF0sIF9fYSwgX19iKTsKKyAgcmV0dXJuIF9fcnY7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0cm5xX2YzMiAoZmxvYXQzMng0X3QgX19hLCBmbG9hdDMyeDRfdCBfX2IpCit7CisgIGZsb2F0MzJ4NHgyX3QgX19ydjsKKyAgX19idWlsdGluX25lb25fdnRybnY0c2YgKCZfX3J2LnZhbFswXSwgX19hLCBfX2IpOworICByZXR1cm4gX19ydjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJucV91OCAodWludDh4MTZfdCBfX2EsIHVpbnQ4eDE2X3QgX19iKQoreworICB1aW50OHgxNngyX3QgX19ydjsKKyAgX19idWlsdGluX25lb25fdnRybnYxNnFpICgoaW50OHgxNl90ICopICZfX3J2LnZhbFswXSwgKGludDh4MTZfdCkgX19hLCAoaW50OHgxNl90KSBfX2IpOworICByZXR1cm4gX19ydjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDh4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJucV91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYikKK3sKKyAgdWludDE2eDh4Ml90IF9fcnY7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm52OGhpICgoaW50MTZ4OF90ICopICZfX3J2LnZhbFswXSwgKGludDE2eDhfdCkgX19hLCAoaW50MTZ4OF90KSBfX2IpOworICByZXR1cm4gX19ydjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJucV91MzIgKHVpbnQzMng0X3QgX19hLCB1aW50MzJ4NF90IF9fYikKK3sKKyAgdWludDMyeDR4Ml90IF9fcnY7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm52NHNpICgoaW50MzJ4NF90ICopICZfX3J2LnZhbFswXSwgKGludDMyeDRfdCkgX19hLCAoaW50MzJ4NF90KSBfX2IpOworICByZXR1cm4gX19ydjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4MTZ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJucV9wOCAocG9seTh4MTZfdCBfX2EsIHBvbHk4eDE2X3QgX19iKQoreworICBwb2x5OHgxNngyX3QgX19ydjsKKyAgX19idWlsdGluX25lb25fdnRybnYxNnFpICgoaW50OHgxNl90ICopICZfX3J2LnZhbFswXSwgKGludDh4MTZfdCkgX19hLCAoaW50OHgxNl90KSBfX2IpOworICByZXR1cm4gX19ydjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDh4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJucV9wMTYgKHBvbHkxNng4X3QgX19hLCBwb2x5MTZ4OF90IF9fYikKK3sKKyAgcG9seTE2eDh4Ml90IF9fcnY7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm52OGhpICgoaW50MTZ4OF90ICopICZfX3J2LnZhbFswXSwgKGludDE2eDhfdCkgX19hLCAoaW50MTZ4OF90KSBfX2IpOworICByZXR1cm4gX19ydjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcF9zOCAoaW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIGludDh4OHgyX3QgX19ydjsKKyAgX19idWlsdGluX25lb25fdnppcHY4cWkgKCZfX3J2LnZhbFswXSwgX19hLCBfX2IpOworICByZXR1cm4gX19ydjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z6aXBfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICBpbnQxNng0eDJfdCBfX3J2OworICBfX2J1aWx0aW5fbmVvbl92emlwdjRoaSAoJl9fcnYudmFsWzBdLCBfX2EsIF9fYik7CisgIHJldHVybiBfX3J2OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcF9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIGludDMyeDJ4Ml90IF9fcnY7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXB2MnNpICgmX19ydi52YWxbMF0sIF9fYSwgX19iKTsKKyAgcmV0dXJuIF9fcnY7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4MngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z6aXBfZjMyIChmbG9hdDMyeDJfdCBfX2EsIGZsb2F0MzJ4Ml90IF9fYikKK3sKKyAgZmxvYXQzMngyeDJfdCBfX3J2OworICBfX2J1aWx0aW5fbmVvbl92emlwdjJzZiAoJl9fcnYudmFsWzBdLCBfX2EsIF9fYik7CisgIHJldHVybiBfX3J2OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcF91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgdWludDh4OHgyX3QgX19ydjsKKyAgX19idWlsdGluX25lb25fdnppcHY4cWkgKChpbnQ4eDhfdCAqKSAmX19ydi52YWxbMF0sIChpbnQ4eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYik7CisgIHJldHVybiBfX3J2OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z6aXBfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IpCit7CisgIHVpbnQxNng0eDJfdCBfX3J2OworICBfX2J1aWx0aW5fbmVvbl92emlwdjRoaSAoKGludDE2eDRfdCAqKSAmX19ydi52YWxbMF0sIChpbnQxNng0X3QpIF9fYSwgKGludDE2eDRfdCkgX19iKTsKKyAgcmV0dXJuIF9fcnY7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcF91MzIgKHVpbnQzMngyX3QgX19hLCB1aW50MzJ4Ml90IF9fYikKK3sKKyAgdWludDMyeDJ4Ml90IF9fcnY7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXB2MnNpICgoaW50MzJ4Ml90ICopICZfX3J2LnZhbFswXSwgKGludDMyeDJfdCkgX19hLCAoaW50MzJ4Ml90KSBfX2IpOworICByZXR1cm4gX19ydjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z6aXBfcDggKHBvbHk4eDhfdCBfX2EsIHBvbHk4eDhfdCBfX2IpCit7CisgIHBvbHk4eDh4Ml90IF9fcnY7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXB2OHFpICgoaW50OHg4X3QgKikgJl9fcnYudmFsWzBdLCAoaW50OHg4X3QpIF9fYSwgKGludDh4OF90KSBfX2IpOworICByZXR1cm4gX19ydjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2emlwX3AxNiAocG9seTE2eDRfdCBfX2EsIHBvbHkxNng0X3QgX19iKQoreworICBwb2x5MTZ4NHgyX3QgX19ydjsKKyAgX19idWlsdGluX25lb25fdnppcHY0aGkgKChpbnQxNng0X3QgKikgJl9fcnYudmFsWzBdLCAoaW50MTZ4NF90KSBfX2EsIChpbnQxNng0X3QpIF9fYik7CisgIHJldHVybiBfX3J2OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcHFfczggKGludDh4MTZfdCBfX2EsIGludDh4MTZfdCBfX2IpCit7CisgIGludDh4MTZ4Ml90IF9fcnY7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXB2MTZxaSAoJl9fcnYudmFsWzBdLCBfX2EsIF9fYik7CisgIHJldHVybiBfX3J2OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcHFfczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iKQoreworICBpbnQxNng4eDJfdCBfX3J2OworICBfX2J1aWx0aW5fbmVvbl92emlwdjhoaSAoJl9fcnYudmFsWzBdLCBfX2EsIF9fYik7CisgIHJldHVybiBfX3J2OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcHFfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICBpbnQzMng0eDJfdCBfX3J2OworICBfX2J1aWx0aW5fbmVvbl92emlwdjRzaSAoJl9fcnYudmFsWzBdLCBfX2EsIF9fYik7CisgIHJldHVybiBfX3J2OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2emlwcV9mMzIgKGZsb2F0MzJ4NF90IF9fYSwgZmxvYXQzMng0X3QgX19iKQoreworICBmbG9hdDMyeDR4Ml90IF9fcnY7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXB2NHNmICgmX19ydi52YWxbMF0sIF9fYSwgX19iKTsKKyAgcmV0dXJuIF9fcnY7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcHFfdTggKHVpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYikKK3sKKyAgdWludDh4MTZ4Ml90IF9fcnY7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXB2MTZxaSAoKGludDh4MTZfdCAqKSAmX19ydi52YWxbMF0sIChpbnQ4eDE2X3QpIF9fYSwgKGludDh4MTZfdCkgX19iKTsKKyAgcmV0dXJuIF9fcnY7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcHFfdTE2ICh1aW50MTZ4OF90IF9fYSwgdWludDE2eDhfdCBfX2IpCit7CisgIHVpbnQxNng4eDJfdCBfX3J2OworICBfX2J1aWx0aW5fbmVvbl92emlwdjhoaSAoKGludDE2eDhfdCAqKSAmX19ydi52YWxbMF0sIChpbnQxNng4X3QpIF9fYSwgKGludDE2eDhfdCkgX19iKTsKKyAgcmV0dXJuIF9fcnY7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcHFfdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IpCit7CisgIHVpbnQzMng0eDJfdCBfX3J2OworICBfX2J1aWx0aW5fbmVvbl92emlwdjRzaSAoKGludDMyeDRfdCAqKSAmX19ydi52YWxbMF0sIChpbnQzMng0X3QpIF9fYSwgKGludDMyeDRfdCkgX19iKTsKKyAgcmV0dXJuIF9fcnY7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDE2eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcHFfcDggKHBvbHk4eDE2X3QgX19hLCBwb2x5OHgxNl90IF9fYikKK3sKKyAgcG9seTh4MTZ4Ml90IF9fcnY7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXB2MTZxaSAoKGludDh4MTZfdCAqKSAmX19ydi52YWxbMF0sIChpbnQ4eDE2X3QpIF9fYSwgKGludDh4MTZfdCkgX19iKTsKKyAgcmV0dXJuIF9fcnY7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng4eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcHFfcDE2IChwb2x5MTZ4OF90IF9fYSwgcG9seTE2eDhfdCBfX2IpCit7CisgIHBvbHkxNng4eDJfdCBfX3J2OworICBfX2J1aWx0aW5fbmVvbl92emlwdjhoaSAoKGludDE2eDhfdCAqKSAmX19ydi52YWxbMF0sIChpbnQxNng4X3QpIF9fYSwgKGludDE2eDhfdCkgX19iKTsKKyAgcmV0dXJuIF9fcnY7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1enBfczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iKQoreworICBpbnQ4eDh4Ml90IF9fcnY7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enB2OHFpICgmX19ydi52YWxbMF0sIF9fYSwgX19iKTsKKyAgcmV0dXJuIF9fcnY7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dXpwX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYikKK3sKKyAgaW50MTZ4NHgyX3QgX19ydjsKKyAgX19idWlsdGluX25lb25fdnV6cHY0aGkgKCZfX3J2LnZhbFswXSwgX19hLCBfX2IpOworICByZXR1cm4gX19ydjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4MngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1enBfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICBpbnQzMngyeDJfdCBfX3J2OworICBfX2J1aWx0aW5fbmVvbl92dXpwdjJzaSAoJl9fcnYudmFsWzBdLCBfX2EsIF9fYik7CisgIHJldHVybiBfX3J2OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dXpwX2YzMiAoZmxvYXQzMngyX3QgX19hLCBmbG9hdDMyeDJfdCBfX2IpCit7CisgIGZsb2F0MzJ4MngyX3QgX19ydjsKKyAgX19idWlsdGluX25lb25fdnV6cHYyc2YgKCZfX3J2LnZhbFswXSwgX19hLCBfX2IpOworICByZXR1cm4gX19ydjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1enBfdTggKHVpbnQ4eDhfdCBfX2EsIHVpbnQ4eDhfdCBfX2IpCit7CisgIHVpbnQ4eDh4Ml90IF9fcnY7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enB2OHFpICgoaW50OHg4X3QgKikgJl9fcnYudmFsWzBdLCAoaW50OHg4X3QpIF9fYSwgKGludDh4OF90KSBfX2IpOworICByZXR1cm4gX19ydjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dXpwX3UxNiAodWludDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iKQoreworICB1aW50MTZ4NHgyX3QgX19ydjsKKyAgX19idWlsdGluX25lb25fdnV6cHY0aGkgKChpbnQxNng0X3QgKikgJl9fcnYudmFsWzBdLCAoaW50MTZ4NF90KSBfX2EsIChpbnQxNng0X3QpIF9fYik7CisgIHJldHVybiBfX3J2OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4MngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1enBfdTMyICh1aW50MzJ4Ml90IF9fYSwgdWludDMyeDJfdCBfX2IpCit7CisgIHVpbnQzMngyeDJfdCBfX3J2OworICBfX2J1aWx0aW5fbmVvbl92dXpwdjJzaSAoKGludDMyeDJfdCAqKSAmX19ydi52YWxbMF0sIChpbnQzMngyX3QpIF9fYSwgKGludDMyeDJfdCkgX19iKTsKKyAgcmV0dXJuIF9fcnY7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDh4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dXpwX3A4IChwb2x5OHg4X3QgX19hLCBwb2x5OHg4X3QgX19iKQoreworICBwb2x5OHg4eDJfdCBfX3J2OworICBfX2J1aWx0aW5fbmVvbl92dXpwdjhxaSAoKGludDh4OF90ICopICZfX3J2LnZhbFswXSwgKGludDh4OF90KSBfX2EsIChpbnQ4eDhfdCkgX19iKTsKKyAgcmV0dXJuIF9fcnY7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnV6cF9wMTYgKHBvbHkxNng0X3QgX19hLCBwb2x5MTZ4NF90IF9fYikKK3sKKyAgcG9seTE2eDR4Ml90IF9fcnY7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enB2NGhpICgoaW50MTZ4NF90ICopICZfX3J2LnZhbFswXSwgKGludDE2eDRfdCkgX19hLCAoaW50MTZ4NF90KSBfX2IpOworICByZXR1cm4gX19ydjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1enBxX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICBpbnQ4eDE2eDJfdCBfX3J2OworICBfX2J1aWx0aW5fbmVvbl92dXpwdjE2cWkgKCZfX3J2LnZhbFswXSwgX19hLCBfX2IpOworICByZXR1cm4gX19ydjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1enBxX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKK3sKKyAgaW50MTZ4OHgyX3QgX19ydjsKKyAgX19idWlsdGluX25lb25fdnV6cHY4aGkgKCZfX3J2LnZhbFswXSwgX19hLCBfX2IpOworICByZXR1cm4gX19ydjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1enBxX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgaW50MzJ4NHgyX3QgX19ydjsKKyAgX19idWlsdGluX25lb25fdnV6cHY0c2kgKCZfX3J2LnZhbFswXSwgX19hLCBfX2IpOworICByZXR1cm4gX19ydjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnV6cHFfZjMyIChmbG9hdDMyeDRfdCBfX2EsIGZsb2F0MzJ4NF90IF9fYikKK3sKKyAgZmxvYXQzMng0eDJfdCBfX3J2OworICBfX2J1aWx0aW5fbmVvbl92dXpwdjRzZiAoJl9fcnYudmFsWzBdLCBfX2EsIF9fYik7CisgIHJldHVybiBfX3J2OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1enBxX3U4ICh1aW50OHgxNl90IF9fYSwgdWludDh4MTZfdCBfX2IpCit7CisgIHVpbnQ4eDE2eDJfdCBfX3J2OworICBfX2J1aWx0aW5fbmVvbl92dXpwdjE2cWkgKChpbnQ4eDE2X3QgKikgJl9fcnYudmFsWzBdLCAoaW50OHgxNl90KSBfX2EsIChpbnQ4eDE2X3QpIF9fYik7CisgIHJldHVybiBfX3J2OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1enBxX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iKQoreworICB1aW50MTZ4OHgyX3QgX19ydjsKKyAgX19idWlsdGluX25lb25fdnV6cHY4aGkgKChpbnQxNng4X3QgKikgJl9fcnYudmFsWzBdLCAoaW50MTZ4OF90KSBfX2EsIChpbnQxNng4X3QpIF9fYik7CisgIHJldHVybiBfX3J2OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1enBxX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iKQoreworICB1aW50MzJ4NHgyX3QgX19ydjsKKyAgX19idWlsdGluX25lb25fdnV6cHY0c2kgKChpbnQzMng0X3QgKikgJl9fcnYudmFsWzBdLCAoaW50MzJ4NF90KSBfX2EsIChpbnQzMng0X3QpIF9fYik7CisgIHJldHVybiBfX3J2OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1enBxX3A4IChwb2x5OHgxNl90IF9fYSwgcG9seTh4MTZfdCBfX2IpCit7CisgIHBvbHk4eDE2eDJfdCBfX3J2OworICBfX2J1aWx0aW5fbmVvbl92dXpwdjE2cWkgKChpbnQ4eDE2X3QgKikgJl9fcnYudmFsWzBdLCAoaW50OHgxNl90KSBfX2EsIChpbnQ4eDE2X3QpIF9fYik7CisgIHJldHVybiBfX3J2OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4OHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1enBxX3AxNiAocG9seTE2eDhfdCBfX2EsIHBvbHkxNng4X3QgX19iKQoreworICBwb2x5MTZ4OHgyX3QgX19ydjsKKyAgX19idWlsdGluX25lb25fdnV6cHY4aGkgKChpbnQxNng4X3QgKikgJl9fcnYudmFsWzBdLCAoaW50MTZ4OF90KSBfX2EsIChpbnQxNng4X3QpIF9fYik7CisgIHJldHVybiBfX3J2OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMV9zOCAoY29uc3QgaW50OF90ICogX19hKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZsZDF2OHFpICgoY29uc3QgX19idWlsdGluX25lb25fcWkgKikgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxX3MxNiAoY29uc3QgaW50MTZfdCAqIF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdmxkMXY0aGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFfczMyIChjb25zdCBpbnQzMl90ICogX19hKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92bGQxdjJzaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMV9zNjQgKGNvbnN0IGludDY0X3QgKiBfX2EpCit7CisgIHJldHVybiAoaW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZsZDFkaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2RpICopIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxX2YzMiAoY29uc3QgZmxvYXQzMl90ICogX19hKQoreworICByZXR1cm4gKGZsb2F0MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZsZDF2MnNmICgoY29uc3QgX19idWlsdGluX25lb25fc2YgKikgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxX3U4IChjb25zdCB1aW50OF90ICogX19hKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92bGQxdjhxaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFfdTE2IChjb25zdCB1aW50MTZfdCAqIF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZsZDF2NGhpICgoY29uc3QgX19idWlsdGluX25lb25faGkgKikgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMV91MzIgKGNvbnN0IHVpbnQzMl90ICogX19hKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdmxkMXYyc2kgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxX3U2NCAoY29uc3QgdWludDY0X3QgKiBfX2EpCit7CisgIHJldHVybiAodWludDY0eDFfdClfX2J1aWx0aW5fbmVvbl92bGQxZGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9kaSAqKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFfcDggKGNvbnN0IHBvbHk4X3QgKiBfX2EpCit7CisgIHJldHVybiAocG9seTh4OF90KV9fYnVpbHRpbl9uZW9uX3ZsZDF2OHFpICgoY29uc3QgX19idWlsdGluX25lb25fcWkgKikgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMV9wMTYgKGNvbnN0IHBvbHkxNl90ICogX19hKQoreworICByZXR1cm4gKHBvbHkxNng0X3QpX19idWlsdGluX25lb25fdmxkMXY0aGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFxX3M4IChjb25zdCBpbnQ4X3QgKiBfX2EpCit7CisgIHJldHVybiAoaW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZsZDF2MTZxaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMXFfczE2IChjb25zdCBpbnQxNl90ICogX19hKQoreworICByZXR1cm4gKGludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92bGQxdjhoaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMXFfczMyIChjb25zdCBpbnQzMl90ICogX19hKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92bGQxdjRzaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMXFfczY0IChjb25zdCBpbnQ2NF90ICogX19hKQoreworICByZXR1cm4gKGludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92bGQxdjJkaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2RpICopIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxcV9mMzIgKGNvbnN0IGZsb2F0MzJfdCAqIF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDRfdClfX2J1aWx0aW5fbmVvbl92bGQxdjRzZiAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3NmICopIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFxX3U4IChjb25zdCB1aW50OF90ICogX19hKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdmxkMXYxNnFpICgoY29uc3QgX19idWlsdGluX25lb25fcWkgKikgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMXFfdTE2IChjb25zdCB1aW50MTZfdCAqIF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZsZDF2OGhpICgoY29uc3QgX19idWlsdGluX25lb25faGkgKikgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMXFfdTMyIChjb25zdCB1aW50MzJfdCAqIF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZsZDF2NHNpICgoY29uc3QgX19idWlsdGluX25lb25fc2kgKikgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMXFfdTY0IChjb25zdCB1aW50NjRfdCAqIF9fYSkKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZsZDF2MmRpICgoY29uc3QgX19idWlsdGluX25lb25fZGkgKikgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMXFfcDggKGNvbnN0IHBvbHk4X3QgKiBfX2EpCit7CisgIHJldHVybiAocG9seTh4MTZfdClfX2J1aWx0aW5fbmVvbl92bGQxdjE2cWkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxcV9wMTYgKGNvbnN0IHBvbHkxNl90ICogX19hKQoreworICByZXR1cm4gKHBvbHkxNng4X3QpX19idWlsdGluX25lb25fdmxkMXY4aGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMV9sYW5lX3M4IChjb25zdCBpbnQ4X3QgKiBfX2EsIGludDh4OF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmV2OHFpICgoY29uc3QgX19idWlsdGluX25lb25fcWkgKikgX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMV9sYW5lX3MxNiAoY29uc3QgaW50MTZfdCAqIF9fYSwgaW50MTZ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdmxkMV9sYW5ldjRoaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFfbGFuZV9zMzIgKGNvbnN0IGludDMyX3QgKiBfX2EsIGludDMyeDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZXYyc2kgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFfbGFuZV9mMzIgKGNvbnN0IGZsb2F0MzJfdCAqIF9fYSwgZmxvYXQzMngyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGZsb2F0MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZXYyc2YgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9zZiAqKSBfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxX2xhbmVfdTggKGNvbnN0IHVpbnQ4X3QgKiBfX2EsIHVpbnQ4eDhfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZXY4cWkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EsIChpbnQ4eDhfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxX2xhbmVfdTE2IChjb25zdCB1aW50MTZfdCAqIF9fYSwgdWludDE2eDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmV2NGhpICgoY29uc3QgX19idWlsdGluX25lb25faGkgKikgX19hLCAoaW50MTZ4NF90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFfbGFuZV91MzIgKGNvbnN0IHVpbnQzMl90ICogX19hLCB1aW50MzJ4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZXYyc2kgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EsIChpbnQzMngyX3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxX2xhbmVfcDggKGNvbnN0IHBvbHk4X3QgKiBfX2EsIHBvbHk4eDhfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAocG9seTh4OF90KV9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZXY4cWkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EsIChpbnQ4eDhfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxX2xhbmVfcDE2IChjb25zdCBwb2x5MTZfdCAqIF9fYSwgcG9seTE2eDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAocG9seTE2eDRfdClfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmV2NGhpICgoY29uc3QgX19idWlsdGluX25lb25faGkgKikgX19hLCAoaW50MTZ4NF90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMV9sYW5lX3M2NCAoY29uc3QgaW50NjRfdCAqIF9fYSwgaW50NjR4MV90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdmxkMV9sYW5lZGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9kaSAqKSBfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMV9sYW5lX3U2NCAoY29uc3QgdWludDY0X3QgKiBfX2EsIHVpbnQ2NHgxX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdmxkMV9sYW5lZGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9kaSAqKSBfX2EsIChpbnQ2NHgxX3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxcV9sYW5lX3M4IChjb25zdCBpbnQ4X3QgKiBfX2EsIGludDh4MTZfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZXYxNnFpICgoY29uc3QgX19idWlsdGluX25lb25fcWkgKikgX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMXFfbGFuZV9zMTYgKGNvbnN0IGludDE2X3QgKiBfX2EsIGludDE2eDhfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZXY4aGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxcV9sYW5lX3MzMiAoY29uc3QgaW50MzJfdCAqIF9fYSwgaW50MzJ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdmxkMV9sYW5ldjRzaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMXFfbGFuZV9mMzIgKGNvbnN0IGZsb2F0MzJfdCAqIF9fYSwgZmxvYXQzMng0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGZsb2F0MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZXY0c2YgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9zZiAqKSBfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMXFfbGFuZV91OCAoY29uc3QgdWludDhfdCAqIF9fYSwgdWludDh4MTZfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmV2MTZxaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSwgKGludDh4MTZfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxcV9sYW5lX3UxNiAoY29uc3QgdWludDE2X3QgKiBfX2EsIHVpbnQxNng4X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpX19idWlsdGluX25lb25fdmxkMV9sYW5ldjhoaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSwgKGludDE2eDhfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxcV9sYW5lX3UzMiAoY29uc3QgdWludDMyX3QgKiBfX2EsIHVpbnQzMng0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdmxkMV9sYW5ldjRzaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSwgKGludDMyeDRfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxcV9sYW5lX3A4IChjb25zdCBwb2x5OF90ICogX19hLCBwb2x5OHgxNl90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChwb2x5OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZXYxNnFpICgoY29uc3QgX19idWlsdGluX25lb25fcWkgKikgX19hLCAoaW50OHgxNl90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFxX2xhbmVfcDE2IChjb25zdCBwb2x5MTZfdCAqIF9fYSwgcG9seTE2eDhfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAocG9seTE2eDhfdClfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmV2OGhpICgoY29uc3QgX19idWlsdGluX25lb25faGkgKikgX19hLCAoaW50MTZ4OF90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMXFfbGFuZV9zNjQgKGNvbnN0IGludDY0X3QgKiBfX2EsIGludDY0eDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZXYyZGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9kaSAqKSBfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMXFfbGFuZV91NjQgKGNvbnN0IHVpbnQ2NF90ICogX19hLCB1aW50NjR4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZXYyZGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9kaSAqKSBfX2EsIChpbnQ2NHgyX3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFfZHVwX3M4IChjb25zdCBpbnQ4X3QgKiBfX2EpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdmxkMV9kdXB2OHFpICgoY29uc3QgX19idWlsdGluX25lb25fcWkgKikgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxX2R1cF9zMTYgKGNvbnN0IGludDE2X3QgKiBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwdjRoaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMV9kdXBfczMyIChjb25zdCBpbnQzMl90ICogX19hKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92bGQxX2R1cHYyc2kgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMV9kdXBfZjMyIChjb25zdCBmbG9hdDMyX3QgKiBfX2EpCit7CisgIHJldHVybiAoZmxvYXQzMngyX3QpX19idWlsdGluX25lb25fdmxkMV9kdXB2MnNmICgoY29uc3QgX19idWlsdGluX25lb25fc2YgKikgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxX2R1cF91OCAoY29uc3QgdWludDhfdCAqIF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdmxkMV9kdXB2OHFpICgoY29uc3QgX19idWlsdGluX25lb25fcWkgKikgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMV9kdXBfdTE2IChjb25zdCB1aW50MTZfdCAqIF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwdjRoaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFfZHVwX3UzMiAoY29uc3QgdWludDMyX3QgKiBfX2EpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92bGQxX2R1cHYyc2kgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFfZHVwX3A4IChjb25zdCBwb2x5OF90ICogX19hKQoreworICByZXR1cm4gKHBvbHk4eDhfdClfX2J1aWx0aW5fbmVvbl92bGQxX2R1cHY4cWkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxX2R1cF9wMTYgKGNvbnN0IHBvbHkxNl90ICogX19hKQoreworICByZXR1cm4gKHBvbHkxNng0X3QpX19idWlsdGluX25lb25fdmxkMV9kdXB2NGhpICgoY29uc3QgX19idWlsdGluX25lb25faGkgKikgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxX2R1cF9zNjQgKGNvbnN0IGludDY0X3QgKiBfX2EpCit7CisgIHJldHVybiAoaW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwZGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9kaSAqKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxX2R1cF91NjQgKGNvbnN0IHVpbnQ2NF90ICogX19hKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdmxkMV9kdXBkaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2RpICopIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMXFfZHVwX3M4IChjb25zdCBpbnQ4X3QgKiBfX2EpCit7CisgIHJldHVybiAoaW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwdjE2cWkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFxX2R1cF9zMTYgKGNvbnN0IGludDE2X3QgKiBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwdjhoaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMXFfZHVwX3MzMiAoY29uc3QgaW50MzJfdCAqIF9fYSkKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpX19idWlsdGluX25lb25fdmxkMV9kdXB2NHNpICgoY29uc3QgX19idWlsdGluX25lb25fc2kgKikgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFxX2R1cF9mMzIgKGNvbnN0IGZsb2F0MzJfdCAqIF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDRfdClfX2J1aWx0aW5fbmVvbl92bGQxX2R1cHY0c2YgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9zZiAqKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxcV9kdXBfdTggKGNvbnN0IHVpbnQ4X3QgKiBfX2EpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92bGQxX2R1cHYxNnFpICgoY29uc3QgX19idWlsdGluX25lb25fcWkgKikgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMXFfZHVwX3UxNiAoY29uc3QgdWludDE2X3QgKiBfX2EpCit7CisgIHJldHVybiAodWludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92bGQxX2R1cHY4aGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxcV9kdXBfdTMyIChjb25zdCB1aW50MzJfdCAqIF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwdjRzaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFxX2R1cF9wOCAoY29uc3QgcG9seThfdCAqIF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwdjE2cWkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxcV9kdXBfcDE2IChjb25zdCBwb2x5MTZfdCAqIF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwdjhoaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMXFfZHVwX3M2NCAoY29uc3QgaW50NjRfdCAqIF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdmxkMV9kdXB2MmRpICgoY29uc3QgX19idWlsdGluX25lb25fZGkgKikgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMXFfZHVwX3U2NCAoY29uc3QgdWludDY0X3QgKiBfX2EpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92bGQxX2R1cHYyZGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9kaSAqKSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QxX3M4IChpbnQ4X3QgKiBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgX19idWlsdGluX25lb25fdnN0MXY4cWkgKChfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDFfczE2IChpbnQxNl90ICogX19hLCBpbnQxNng0X3QgX19iKQoreworICBfX2J1aWx0aW5fbmVvbl92c3QxdjRoaSAoKF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MV9zMzIgKGludDMyX3QgKiBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDF2MnNpICgoX19idWlsdGluX25lb25fc2kgKikgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QxX3M2NCAoaW50NjRfdCAqIF9fYSwgaW50NjR4MV90IF9fYikKK3sKKyAgX19idWlsdGluX25lb25fdnN0MWRpICgoX19idWlsdGluX25lb25fZGkgKikgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QxX2YzMiAoZmxvYXQzMl90ICogX19hLCBmbG9hdDMyeDJfdCBfX2IpCit7CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDF2MnNmICgoX19idWlsdGluX25lb25fc2YgKikgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QxX3U4ICh1aW50OF90ICogX19hLCB1aW50OHg4X3QgX19iKQoreworICBfX2J1aWx0aW5fbmVvbl92c3QxdjhxaSAoKF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSwgKGludDh4OF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QxX3UxNiAodWludDE2X3QgKiBfX2EsIHVpbnQxNng0X3QgX19iKQoreworICBfX2J1aWx0aW5fbmVvbl92c3QxdjRoaSAoKF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSwgKGludDE2eDRfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MV91MzIgKHVpbnQzMl90ICogX19hLCB1aW50MzJ4Ml90IF9fYikKK3sKKyAgX19idWlsdGluX25lb25fdnN0MXYyc2kgKChfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EsIChpbnQzMngyX3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDFfdTY0ICh1aW50NjRfdCAqIF9fYSwgdWludDY0eDFfdCBfX2IpCit7CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFkaSAoKF9fYnVpbHRpbl9uZW9uX2RpICopIF9fYSwgKGludDY0eDFfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MV9wOCAocG9seThfdCAqIF9fYSwgcG9seTh4OF90IF9fYikKK3sKKyAgX19idWlsdGluX25lb25fdnN0MXY4cWkgKChfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EsIChpbnQ4eDhfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MV9wMTYgKHBvbHkxNl90ICogX19hLCBwb2x5MTZ4NF90IF9fYikKK3sKKyAgX19idWlsdGluX25lb25fdnN0MXY0aGkgKChfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EsIChpbnQxNng0X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDFxX3M4IChpbnQ4X3QgKiBfX2EsIGludDh4MTZfdCBfX2IpCit7CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDF2MTZxaSAoKF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MXFfczE2IChpbnQxNl90ICogX19hLCBpbnQxNng4X3QgX19iKQoreworICBfX2J1aWx0aW5fbmVvbl92c3QxdjhoaSAoKF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MXFfczMyIChpbnQzMl90ICogX19hLCBpbnQzMng0X3QgX19iKQoreworICBfX2J1aWx0aW5fbmVvbl92c3QxdjRzaSAoKF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MXFfczY0IChpbnQ2NF90ICogX19hLCBpbnQ2NHgyX3QgX19iKQoreworICBfX2J1aWx0aW5fbmVvbl92c3QxdjJkaSAoKF9fYnVpbHRpbl9uZW9uX2RpICopIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MXFfZjMyIChmbG9hdDMyX3QgKiBfX2EsIGZsb2F0MzJ4NF90IF9fYikKK3sKKyAgX19idWlsdGluX25lb25fdnN0MXY0c2YgKChfX2J1aWx0aW5fbmVvbl9zZiAqKSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDFxX3U4ICh1aW50OF90ICogX19hLCB1aW50OHgxNl90IF9fYikKK3sKKyAgX19idWlsdGluX25lb25fdnN0MXYxNnFpICgoX19idWlsdGluX25lb25fcWkgKikgX19hLCAoaW50OHgxNl90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QxcV91MTYgKHVpbnQxNl90ICogX19hLCB1aW50MTZ4OF90IF9fYikKK3sKKyAgX19idWlsdGluX25lb25fdnN0MXY4aGkgKChfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EsIChpbnQxNng4X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDFxX3UzMiAodWludDMyX3QgKiBfX2EsIHVpbnQzMng0X3QgX19iKQoreworICBfX2J1aWx0aW5fbmVvbl92c3QxdjRzaSAoKF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSwgKGludDMyeDRfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MXFfdTY0ICh1aW50NjRfdCAqIF9fYSwgdWludDY0eDJfdCBfX2IpCit7CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDF2MmRpICgoX19idWlsdGluX25lb25fZGkgKikgX19hLCAoaW50NjR4Ml90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QxcV9wOCAocG9seThfdCAqIF9fYSwgcG9seTh4MTZfdCBfX2IpCit7CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDF2MTZxaSAoKF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSwgKGludDh4MTZfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MXFfcDE2IChwb2x5MTZfdCAqIF9fYSwgcG9seTE2eDhfdCBfX2IpCit7CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDF2OGhpICgoX19idWlsdGluX25lb25faGkgKikgX19hLCAoaW50MTZ4OF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QxX2xhbmVfczggKGludDhfdCAqIF9fYSwgaW50OHg4X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmV2OHFpICgoX19idWlsdGluX25lb25fcWkgKikgX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDFfbGFuZV9zMTYgKGludDE2X3QgKiBfX2EsIGludDE2eDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZXY0aGkgKChfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MV9sYW5lX3MzMiAoaW50MzJfdCAqIF9fYSwgaW50MzJ4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5ldjJzaSAoKF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QxX2xhbmVfZjMyIChmbG9hdDMyX3QgKiBfX2EsIGZsb2F0MzJ4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5ldjJzZiAoKF9fYnVpbHRpbl9uZW9uX3NmICopIF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QxX2xhbmVfdTggKHVpbnQ4X3QgKiBfX2EsIHVpbnQ4eDhfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZXY4cWkgKChfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EsIChpbnQ4eDhfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QxX2xhbmVfdTE2ICh1aW50MTZfdCAqIF9fYSwgdWludDE2eDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZXY0aGkgKChfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EsIChpbnQxNng0X3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MV9sYW5lX3UzMiAodWludDMyX3QgKiBfX2EsIHVpbnQzMngyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmV2MnNpICgoX19idWlsdGluX25lb25fc2kgKikgX19hLCAoaW50MzJ4Ml90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDFfbGFuZV9wOCAocG9seThfdCAqIF9fYSwgcG9seTh4OF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5ldjhxaSAoKF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSwgKGludDh4OF90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDFfbGFuZV9wMTYgKHBvbHkxNl90ICogX19hLCBwb2x5MTZ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5ldjRoaSAoKF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSwgKGludDE2eDRfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QxX2xhbmVfczY0IChpbnQ2NF90ICogX19hLCBpbnQ2NHgxX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVkaSAoKF9fYnVpbHRpbl9uZW9uX2RpICopIF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QxX2xhbmVfdTY0ICh1aW50NjRfdCAqIF9fYSwgdWludDY0eDFfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZWRpICgoX19idWlsdGluX25lb25fZGkgKikgX19hLCAoaW50NjR4MV90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDFxX2xhbmVfczggKGludDhfdCAqIF9fYSwgaW50OHgxNl90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5ldjE2cWkgKChfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MXFfbGFuZV9zMTYgKGludDE2X3QgKiBfX2EsIGludDE2eDhfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZXY4aGkgKChfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MXFfbGFuZV9zMzIgKGludDMyX3QgKiBfX2EsIGludDMyeDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZXY0c2kgKChfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MXFfbGFuZV9mMzIgKGZsb2F0MzJfdCAqIF9fYSwgZmxvYXQzMng0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmV2NHNmICgoX19idWlsdGluX25lb25fc2YgKikgX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDFxX2xhbmVfdTggKHVpbnQ4X3QgKiBfX2EsIHVpbnQ4eDE2X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmV2MTZxaSAoKF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSwgKGludDh4MTZfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QxcV9sYW5lX3UxNiAodWludDE2X3QgKiBfX2EsIHVpbnQxNng4X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmV2OGhpICgoX19idWlsdGluX25lb25faGkgKikgX19hLCAoaW50MTZ4OF90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDFxX2xhbmVfdTMyICh1aW50MzJfdCAqIF9fYSwgdWludDMyeDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZXY0c2kgKChfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EsIChpbnQzMng0X3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MXFfbGFuZV9wOCAocG9seThfdCAqIF9fYSwgcG9seTh4MTZfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZXYxNnFpICgoX19idWlsdGluX25lb25fcWkgKikgX19hLCAoaW50OHgxNl90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDFxX2xhbmVfcDE2IChwb2x5MTZfdCAqIF9fYSwgcG9seTE2eDhfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZXY4aGkgKChfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EsIChpbnQxNng4X3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MXFfbGFuZV9zNjQgKGludDY0X3QgKiBfX2EsIGludDY0eDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZXYyZGkgKChfX2J1aWx0aW5fbmVvbl9kaSAqKSBfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MXFfbGFuZV91NjQgKHVpbnQ2NF90ICogX19hLCB1aW50NjR4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5ldjJkaSAoKF9fYnVpbHRpbl9uZW9uX2RpICopIF9fYSwgKGludDY0eDJfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDh4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQyX3M4IChjb25zdCBpbnQ4X3QgKiBfX2EpCit7CisgIHVuaW9uIHsgaW50OHg4eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3RpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDJ2OHFpICgoY29uc3QgX19idWlsdGluX25lb25fcWkgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMl9zMTYgKGNvbnN0IGludDE2X3QgKiBfX2EpCit7CisgIHVuaW9uIHsgaW50MTZ4NHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQydjRoaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4MngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDJfczMyIChjb25zdCBpbnQzMl90ICogX19hKQoreworICB1bmlvbiB7IGludDMyeDJ4Ml90IF9faTsgX19idWlsdGluX25lb25fdGkgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkMnYyc2kgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4MngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDJfZjMyIChjb25zdCBmbG9hdDMyX3QgKiBfX2EpCit7CisgIHVuaW9uIHsgZmxvYXQzMngyeDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3RpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDJ2MnNmICgoY29uc3QgX19idWlsdGluX25lb25fc2YgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMl91OCAoY29uc3QgdWludDhfdCAqIF9fYSkKK3sKKyAgdW5pb24geyB1aW50OHg4eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3RpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDJ2OHFpICgoY29uc3QgX19idWlsdGluX25lb25fcWkgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDJfdTE2IChjb25zdCB1aW50MTZfdCAqIF9fYSkKK3sKKyAgdW5pb24geyB1aW50MTZ4NHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQydjRoaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQyX3UzMiAoY29uc3QgdWludDMyX3QgKiBfX2EpCit7CisgIHVuaW9uIHsgdWludDMyeDJ4Ml90IF9faTsgX19idWlsdGluX25lb25fdGkgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkMnYyc2kgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDh4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQyX3A4IChjb25zdCBwb2x5OF90ICogX19hKQoreworICB1bmlvbiB7IHBvbHk4eDh4Ml90IF9faTsgX19idWlsdGluX25lb25fdGkgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkMnY4cWkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMl9wMTYgKGNvbnN0IHBvbHkxNl90ICogX19hKQoreworICB1bmlvbiB7IHBvbHkxNng0eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3RpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDJ2NGhpICgoY29uc3QgX19idWlsdGluX25lb25faGkgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMl9zNjQgKGNvbnN0IGludDY0X3QgKiBfX2EpCit7CisgIHVuaW9uIHsgaW50NjR4MXgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQyZGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9kaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMl91NjQgKGNvbnN0IHVpbnQ2NF90ICogX19hKQoreworICB1bmlvbiB7IHVpbnQ2NHgxeDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3RpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDJkaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2RpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDJxX3M4IChjb25zdCBpbnQ4X3QgKiBfX2EpCit7CisgIHVuaW9uIHsgaW50OHgxNngyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQydjE2cWkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDh4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQycV9zMTYgKGNvbnN0IGludDE2X3QgKiBfX2EpCit7CisgIHVuaW9uIHsgaW50MTZ4OHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQydjhoaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDJxX3MzMiAoY29uc3QgaW50MzJfdCAqIF9fYSkKK3sKKyAgdW5pb24geyBpbnQzMng0eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDJ2NHNpICgoY29uc3QgX19idWlsdGluX25lb25fc2kgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQycV9mMzIgKGNvbnN0IGZsb2F0MzJfdCAqIF9fYSkKK3sKKyAgdW5pb24geyBmbG9hdDMyeDR4Ml90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkMnY0c2YgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9zZiAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMnFfdTggKGNvbnN0IHVpbnQ4X3QgKiBfX2EpCit7CisgIHVuaW9uIHsgdWludDh4MTZ4Ml90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkMnYxNnFpICgoY29uc3QgX19idWlsdGluX25lb25fcWkgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDJxX3UxNiAoY29uc3QgdWludDE2X3QgKiBfX2EpCit7CisgIHVuaW9uIHsgdWludDE2eDh4Ml90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkMnY4aGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMnFfdTMyIChjb25zdCB1aW50MzJfdCAqIF9fYSkKK3sKKyAgdW5pb24geyB1aW50MzJ4NHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQydjRzaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4MTZ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQycV9wOCAoY29uc3QgcG9seThfdCAqIF9fYSkKK3sKKyAgdW5pb24geyBwb2x5OHgxNngyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQydjE2cWkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng4eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMnFfcDE2IChjb25zdCBwb2x5MTZfdCAqIF9fYSkKK3sKKyAgdW5pb24geyBwb2x5MTZ4OHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQydjhoaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMl9sYW5lX3M4IChjb25zdCBpbnQ4X3QgKiBfX2EsIGludDh4OHgyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IGludDh4OHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19idSA9IHsgX19iIH07CisgIHVuaW9uIHsgaW50OHg4eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3RpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZXY4cWkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQyX2xhbmVfczE2IChjb25zdCBpbnQxNl90ICogX19hLCBpbnQxNng0eDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgaW50MTZ4NHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19idSA9IHsgX19iIH07CisgIHVuaW9uIHsgaW50MTZ4NHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmV2NGhpICgoY29uc3QgX19idWlsdGluX25lb25faGkgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMl9sYW5lX3MzMiAoY29uc3QgaW50MzJfdCAqIF9fYSwgaW50MzJ4MngyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IGludDMyeDJ4Ml90IF9faTsgX19idWlsdGluX25lb25fdGkgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICB1bmlvbiB7IGludDMyeDJ4Ml90IF9faTsgX19idWlsdGluX25lb25fdGkgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkMl9sYW5ldjJzaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSwgX19idS5fX28sIF9fYyk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMl9sYW5lX2YzMiAoY29uc3QgZmxvYXQzMl90ICogX19hLCBmbG9hdDMyeDJ4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyBmbG9hdDMyeDJ4Ml90IF9faTsgX19idWlsdGluX25lb25fdGkgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICB1bmlvbiB7IGZsb2F0MzJ4MngyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmV2MnNmICgoY29uc3QgX19idWlsdGluX25lb25fc2YgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMl9sYW5lX3U4IChjb25zdCB1aW50OF90ICogX19hLCB1aW50OHg4eDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgdWludDh4OHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19idSA9IHsgX19iIH07CisgIHVuaW9uIHsgdWludDh4OHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmV2OHFpICgoY29uc3QgX19idWlsdGluX25lb25fcWkgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDJfbGFuZV91MTYgKGNvbnN0IHVpbnQxNl90ICogX19hLCB1aW50MTZ4NHgyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IHVpbnQxNng0eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3RpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgdW5pb24geyB1aW50MTZ4NHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmV2NGhpICgoY29uc3QgX19idWlsdGluX25lb25faGkgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4MngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDJfbGFuZV91MzIgKGNvbnN0IHVpbnQzMl90ICogX19hLCB1aW50MzJ4MngyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IHVpbnQzMngyeDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3RpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgdW5pb24geyB1aW50MzJ4MngyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmV2MnNpICgoY29uc3QgX19idWlsdGluX25lb25fc2kgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMl9sYW5lX3A4IChjb25zdCBwb2x5OF90ICogX19hLCBwb2x5OHg4eDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgcG9seTh4OHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19idSA9IHsgX19iIH07CisgIHVuaW9uIHsgcG9seTh4OHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmV2OHFpICgoY29uc3QgX19idWlsdGluX25lb25fcWkgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDJfbGFuZV9wMTYgKGNvbnN0IHBvbHkxNl90ICogX19hLCBwb2x5MTZ4NHgyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IHBvbHkxNng0eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3RpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgdW5pb24geyBwb2x5MTZ4NHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmV2NGhpICgoY29uc3QgX19idWlsdGluX25lb25faGkgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMnFfbGFuZV9zMTYgKGNvbnN0IGludDE2X3QgKiBfX2EsIGludDE2eDh4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyBpbnQxNng4eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgdW5pb24geyBpbnQxNng4eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZXY4aGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQycV9sYW5lX3MzMiAoY29uc3QgaW50MzJfdCAqIF9fYSwgaW50MzJ4NHgyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IGludDMyeDR4Ml90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICB1bmlvbiB7IGludDMyeDR4Ml90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkMl9sYW5ldjRzaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSwgX19idS5fX28sIF9fYyk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMnFfbGFuZV9mMzIgKGNvbnN0IGZsb2F0MzJfdCAqIF9fYSwgZmxvYXQzMng0eDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgZmxvYXQzMng0eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgdW5pb24geyBmbG9hdDMyeDR4Ml90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkMl9sYW5ldjRzZiAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3NmICopIF9fYSwgX19idS5fX28sIF9fYyk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDh4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQycV9sYW5lX3UxNiAoY29uc3QgdWludDE2X3QgKiBfX2EsIHVpbnQxNng4eDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgdWludDE2eDh4Ml90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICB1bmlvbiB7IHVpbnQxNng4eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZXY4aGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMnFfbGFuZV91MzIgKGNvbnN0IHVpbnQzMl90ICogX19hLCB1aW50MzJ4NHgyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IHVpbnQzMng0eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgdW5pb24geyB1aW50MzJ4NHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmV2NHNpICgoY29uc3QgX19idWlsdGluX25lb25fc2kgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4OHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDJxX2xhbmVfcDE2IChjb25zdCBwb2x5MTZfdCAqIF9fYSwgcG9seTE2eDh4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyBwb2x5MTZ4OHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19idSA9IHsgX19iIH07CisgIHVuaW9uIHsgcG9seTE2eDh4Ml90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkMl9sYW5ldjhoaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSwgX19idS5fX28sIF9fYyk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMl9kdXBfczggKGNvbnN0IGludDhfdCAqIF9fYSkKK3sKKyAgdW5pb24geyBpbnQ4eDh4Ml90IF9faTsgX19idWlsdGluX25lb25fdGkgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkMl9kdXB2OHFpICgoY29uc3QgX19idWlsdGluX25lb25fcWkgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMl9kdXBfczE2IChjb25zdCBpbnQxNl90ICogX19hKQoreworICB1bmlvbiB7IGludDE2eDR4Ml90IF9faTsgX19idWlsdGluX25lb25fdGkgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkMl9kdXB2NGhpICgoY29uc3QgX19idWlsdGluX25lb25faGkgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMl9kdXBfczMyIChjb25zdCBpbnQzMl90ICogX19hKQoreworICB1bmlvbiB7IGludDMyeDJ4Ml90IF9faTsgX19idWlsdGluX25lb25fdGkgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkMl9kdXB2MnNpICgoY29uc3QgX19idWlsdGluX25lb25fc2kgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQyX2R1cF9mMzIgKGNvbnN0IGZsb2F0MzJfdCAqIF9fYSkKK3sKKyAgdW5pb24geyBmbG9hdDMyeDJ4Ml90IF9faTsgX19idWlsdGluX25lb25fdGkgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkMl9kdXB2MnNmICgoY29uc3QgX19idWlsdGluX25lb25fc2YgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMl9kdXBfdTggKGNvbnN0IHVpbnQ4X3QgKiBfX2EpCit7CisgIHVuaW9uIHsgdWludDh4OHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cHY4cWkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMl9kdXBfdTE2IChjb25zdCB1aW50MTZfdCAqIF9fYSkKK3sKKyAgdW5pb24geyB1aW50MTZ4NHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cHY0aGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMl9kdXBfdTMyIChjb25zdCB1aW50MzJfdCAqIF9fYSkKK3sKKyAgdW5pb24geyB1aW50MzJ4MngyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cHYyc2kgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDh4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQyX2R1cF9wOCAoY29uc3QgcG9seThfdCAqIF9fYSkKK3sKKyAgdW5pb24geyBwb2x5OHg4eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3RpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwdjhxaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQyX2R1cF9wMTYgKGNvbnN0IHBvbHkxNl90ICogX19hKQoreworICB1bmlvbiB7IHBvbHkxNng0eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3RpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwdjRoaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MXgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDJfZHVwX3M2NCAoY29uc3QgaW50NjRfdCAqIF9fYSkKK3sKKyAgdW5pb24geyBpbnQ2NHgxeDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3RpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwZGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9kaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMl9kdXBfdTY0IChjb25zdCB1aW50NjRfdCAqIF9fYSkKK3sKKyAgdW5pb24geyB1aW50NjR4MXgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cGRpICgoY29uc3QgX19idWlsdGluX25lb25fZGkgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QyX3M4IChpbnQ4X3QgKiBfX2EsIGludDh4OHgyX3QgX19iKQoreworICB1bmlvbiB7IGludDh4OHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJ2OHFpICgoX19idWlsdGluX25lb25fcWkgKikgX19hLCBfX2J1Ll9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDJfczE2IChpbnQxNl90ICogX19hLCBpbnQxNng0eDJfdCBfX2IpCit7CisgIHVuaW9uIHsgaW50MTZ4NHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJ2NGhpICgoX19idWlsdGluX25lb25faGkgKikgX19hLCBfX2J1Ll9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDJfczMyIChpbnQzMl90ICogX19hLCBpbnQzMngyeDJfdCBfX2IpCit7CisgIHVuaW9uIHsgaW50MzJ4MngyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJ2MnNpICgoX19idWlsdGluX25lb25fc2kgKikgX19hLCBfX2J1Ll9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDJfZjMyIChmbG9hdDMyX3QgKiBfX2EsIGZsb2F0MzJ4MngyX3QgX19iKQoreworICB1bmlvbiB7IGZsb2F0MzJ4MngyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJ2MnNmICgoX19idWlsdGluX25lb25fc2YgKikgX19hLCBfX2J1Ll9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDJfdTggKHVpbnQ4X3QgKiBfX2EsIHVpbnQ4eDh4Ml90IF9fYikKK3sKKyAgdW5pb24geyB1aW50OHg4eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3RpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0MnY4cWkgKChfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EsIF9fYnUuX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0Ml91MTYgKHVpbnQxNl90ICogX19hLCB1aW50MTZ4NHgyX3QgX19iKQoreworICB1bmlvbiB7IHVpbnQxNng0eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3RpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0MnY0aGkgKChfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EsIF9fYnUuX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0Ml91MzIgKHVpbnQzMl90ICogX19hLCB1aW50MzJ4MngyX3QgX19iKQoreworICB1bmlvbiB7IHVpbnQzMngyeDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3RpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0MnYyc2kgKChfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EsIF9fYnUuX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0Ml9wOCAocG9seThfdCAqIF9fYSwgcG9seTh4OHgyX3QgX19iKQoreworICB1bmlvbiB7IHBvbHk4eDh4Ml90IF9faTsgX19idWlsdGluX25lb25fdGkgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3QydjhxaSAoKF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSwgX19idS5fX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QyX3AxNiAocG9seTE2X3QgKiBfX2EsIHBvbHkxNng0eDJfdCBfX2IpCit7CisgIHVuaW9uIHsgcG9seTE2eDR4Ml90IF9faTsgX19idWlsdGluX25lb25fdGkgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3QydjRoaSAoKF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSwgX19idS5fX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QyX3M2NCAoaW50NjRfdCAqIF9fYSwgaW50NjR4MXgyX3QgX19iKQoreworICB1bmlvbiB7IGludDY0eDF4Ml90IF9faTsgX19idWlsdGluX25lb25fdGkgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3QyZGkgKChfX2J1aWx0aW5fbmVvbl9kaSAqKSBfX2EsIF9fYnUuX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0Ml91NjQgKHVpbnQ2NF90ICogX19hLCB1aW50NjR4MXgyX3QgX19iKQoreworICB1bmlvbiB7IHVpbnQ2NHgxeDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3RpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0MmRpICgoX19idWlsdGluX25lb25fZGkgKikgX19hLCBfX2J1Ll9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDJxX3M4IChpbnQ4X3QgKiBfX2EsIGludDh4MTZ4Ml90IF9fYikKK3sKKyAgdW5pb24geyBpbnQ4eDE2eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0MnYxNnFpICgoX19idWlsdGluX25lb25fcWkgKikgX19hLCBfX2J1Ll9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDJxX3MxNiAoaW50MTZfdCAqIF9fYSwgaW50MTZ4OHgyX3QgX19iKQoreworICB1bmlvbiB7IGludDE2eDh4Ml90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3QydjhoaSAoKF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSwgX19idS5fX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QycV9zMzIgKGludDMyX3QgKiBfX2EsIGludDMyeDR4Ml90IF9fYikKK3sKKyAgdW5pb24geyBpbnQzMng0eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0MnY0c2kgKChfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EsIF9fYnUuX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MnFfZjMyIChmbG9hdDMyX3QgKiBfX2EsIGZsb2F0MzJ4NHgyX3QgX19iKQoreworICB1bmlvbiB7IGZsb2F0MzJ4NHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJ2NHNmICgoX19idWlsdGluX25lb25fc2YgKikgX19hLCBfX2J1Ll9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDJxX3U4ICh1aW50OF90ICogX19hLCB1aW50OHgxNngyX3QgX19iKQoreworICB1bmlvbiB7IHVpbnQ4eDE2eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0MnYxNnFpICgoX19idWlsdGluX25lb25fcWkgKikgX19hLCBfX2J1Ll9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDJxX3UxNiAodWludDE2X3QgKiBfX2EsIHVpbnQxNng4eDJfdCBfX2IpCit7CisgIHVuaW9uIHsgdWludDE2eDh4Ml90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3QydjhoaSAoKF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSwgX19idS5fX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QycV91MzIgKHVpbnQzMl90ICogX19hLCB1aW50MzJ4NHgyX3QgX19iKQoreworICB1bmlvbiB7IHVpbnQzMng0eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0MnY0c2kgKChfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EsIF9fYnUuX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MnFfcDggKHBvbHk4X3QgKiBfX2EsIHBvbHk4eDE2eDJfdCBfX2IpCit7CisgIHVuaW9uIHsgcG9seTh4MTZ4Ml90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3QydjE2cWkgKChfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EsIF9fYnUuX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MnFfcDE2IChwb2x5MTZfdCAqIF9fYSwgcG9seTE2eDh4Ml90IF9fYikKK3sKKyAgdW5pb24geyBwb2x5MTZ4OHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJ2OGhpICgoX19idWlsdGluX25lb25faGkgKikgX19hLCBfX2J1Ll9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDJfbGFuZV9zOCAoaW50OF90ICogX19hLCBpbnQ4eDh4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyBpbnQ4eDh4Ml90IF9faTsgX19idWlsdGluX25lb25fdGkgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmV2OHFpICgoX19idWlsdGluX25lb25fcWkgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0Ml9sYW5lX3MxNiAoaW50MTZfdCAqIF9fYSwgaW50MTZ4NHgyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IGludDE2eDR4Ml90IF9faTsgX19idWlsdGluX25lb25fdGkgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmV2NGhpICgoX19idWlsdGluX25lb25faGkgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0Ml9sYW5lX3MzMiAoaW50MzJfdCAqIF9fYSwgaW50MzJ4MngyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IGludDMyeDJ4Ml90IF9faTsgX19idWlsdGluX25lb25fdGkgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmV2MnNpICgoX19idWlsdGluX25lb25fc2kgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0Ml9sYW5lX2YzMiAoZmxvYXQzMl90ICogX19hLCBmbG9hdDMyeDJ4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyBmbG9hdDMyeDJ4Ml90IF9faTsgX19idWlsdGluX25lb25fdGkgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmV2MnNmICgoX19idWlsdGluX25lb25fc2YgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0Ml9sYW5lX3U4ICh1aW50OF90ICogX19hLCB1aW50OHg4eDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgdWludDh4OHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZXY4cWkgKChfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QyX2xhbmVfdTE2ICh1aW50MTZfdCAqIF9fYSwgdWludDE2eDR4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyB1aW50MTZ4NHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZXY0aGkgKChfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QyX2xhbmVfdTMyICh1aW50MzJfdCAqIF9fYSwgdWludDMyeDJ4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyB1aW50MzJ4MngyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl90aSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZXYyc2kgKChfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QyX2xhbmVfcDggKHBvbHk4X3QgKiBfX2EsIHBvbHk4eDh4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyBwb2x5OHg4eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3RpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5ldjhxaSAoKF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSwgX19idS5fX28sIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDJfbGFuZV9wMTYgKHBvbHkxNl90ICogX19hLCBwb2x5MTZ4NHgyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IHBvbHkxNng0eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3RpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5ldjRoaSAoKF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSwgX19idS5fX28sIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDJxX2xhbmVfczE2IChpbnQxNl90ICogX19hLCBpbnQxNng4eDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgaW50MTZ4OHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZXY4aGkgKChfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QycV9sYW5lX3MzMiAoaW50MzJfdCAqIF9fYSwgaW50MzJ4NHgyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IGludDMyeDR4Ml90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmV2NHNpICgoX19idWlsdGluX25lb25fc2kgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MnFfbGFuZV9mMzIgKGZsb2F0MzJfdCAqIF9fYSwgZmxvYXQzMng0eDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgZmxvYXQzMng0eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5ldjRzZiAoKF9fYnVpbHRpbl9uZW9uX3NmICopIF9fYSwgX19idS5fX28sIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDJxX2xhbmVfdTE2ICh1aW50MTZfdCAqIF9fYSwgdWludDE2eDh4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyB1aW50MTZ4OHgyX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZXY4aGkgKChfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QycV9sYW5lX3UzMiAodWludDMyX3QgKiBfX2EsIHVpbnQzMng0eDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgdWludDMyeDR4Ml90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmV2NHNpICgoX19idWlsdGluX25lb25fc2kgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MnFfbGFuZV9wMTYgKHBvbHkxNl90ICogX19hLCBwb2x5MTZ4OHgyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IHBvbHkxNng4eDJfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5ldjhoaSAoKF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSwgX19idS5fX28sIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OHgzX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDNfczggKGNvbnN0IGludDhfdCAqIF9fYSkKK3sKKyAgdW5pb24geyBpbnQ4eDh4M190IF9faTsgX19idWlsdGluX25lb25fZWkgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkM3Y4cWkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDR4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzX3MxNiAoY29uc3QgaW50MTZfdCAqIF9fYSkKK3sKKyAgdW5pb24geyBpbnQxNng0eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDN2NGhpICgoY29uc3QgX19idWlsdGluX25lb25faGkgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyeDNfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkM19zMzIgKGNvbnN0IGludDMyX3QgKiBfX2EpCit7CisgIHVuaW9uIHsgaW50MzJ4MngzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9laSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQzdjJzaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyeDNfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkM19mMzIgKGNvbnN0IGZsb2F0MzJfdCAqIF9fYSkKK3sKKyAgdW5pb24geyBmbG9hdDMyeDJ4M190IF9faTsgX19idWlsdGluX25lb25fZWkgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkM3Yyc2YgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9zZiAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDh4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzX3U4IChjb25zdCB1aW50OF90ICogX19hKQoreworICB1bmlvbiB7IHVpbnQ4eDh4M190IF9faTsgX19idWlsdGluX25lb25fZWkgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkM3Y4cWkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0eDNfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkM191MTYgKGNvbnN0IHVpbnQxNl90ICogX19hKQoreworICB1bmlvbiB7IHVpbnQxNng0eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDN2NGhpICgoY29uc3QgX19idWlsdGluX25lb25faGkgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4MngzX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDNfdTMyIChjb25zdCB1aW50MzJfdCAqIF9fYSkKK3sKKyAgdW5pb24geyB1aW50MzJ4MngzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9laSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQzdjJzaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OHgzX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDNfcDggKGNvbnN0IHBvbHk4X3QgKiBfX2EpCit7CisgIHVuaW9uIHsgcG9seTh4OHgzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9laSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQzdjhxaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDR4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzX3AxNiAoY29uc3QgcG9seTE2X3QgKiBfX2EpCit7CisgIHVuaW9uIHsgcG9seTE2eDR4M190IF9faTsgX19idWlsdGluX25lb25fZWkgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkM3Y0aGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDF4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzX3M2NCAoY29uc3QgaW50NjRfdCAqIF9fYSkKK3sKKyAgdW5pb24geyBpbnQ2NHgxeDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDNkaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2RpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDF4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzX3U2NCAoY29uc3QgdWludDY0X3QgKiBfX2EpCit7CisgIHVuaW9uIHsgdWludDY0eDF4M190IF9faTsgX19idWlsdGluX25lb25fZWkgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkM2RpICgoY29uc3QgX19idWlsdGluX25lb25fZGkgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2eDNfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkM3FfczggKGNvbnN0IGludDhfdCAqIF9fYSkKK3sKKyAgdW5pb24geyBpbnQ4eDE2eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2NpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDN2MTZxaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OHgzX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDNxX3MxNiAoY29uc3QgaW50MTZfdCAqIF9fYSkKK3sKKyAgdW5pb24geyBpbnQxNng4eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2NpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDN2OGhpICgoY29uc3QgX19idWlsdGluX25lb25faGkgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0eDNfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkM3FfczMyIChjb25zdCBpbnQzMl90ICogX19hKQoreworICB1bmlvbiB7IGludDMyeDR4M190IF9faTsgX19idWlsdGluX25lb25fY2kgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkM3Y0c2kgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NHgzX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDNxX2YzMiAoY29uc3QgZmxvYXQzMl90ICogX19hKQoreworICB1bmlvbiB7IGZsb2F0MzJ4NHgzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9jaSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQzdjRzZiAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3NmICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZ4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzcV91OCAoY29uc3QgdWludDhfdCAqIF9fYSkKK3sKKyAgdW5pb24geyB1aW50OHgxNngzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9jaSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQzdjE2cWkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4eDNfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkM3FfdTE2IChjb25zdCB1aW50MTZfdCAqIF9fYSkKK3sKKyAgdW5pb24geyB1aW50MTZ4OHgzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9jaSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQzdjhoaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDR4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzcV91MzIgKGNvbnN0IHVpbnQzMl90ICogX19hKQoreworICB1bmlvbiB7IHVpbnQzMng0eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2NpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDN2NHNpICgoY29uc3QgX19idWlsdGluX25lb25fc2kgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNngzX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDNxX3A4IChjb25zdCBwb2x5OF90ICogX19hKQoreworICB1bmlvbiB7IHBvbHk4eDE2eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2NpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDN2MTZxaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDh4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzcV9wMTYgKGNvbnN0IHBvbHkxNl90ICogX19hKQoreworICB1bmlvbiB7IHBvbHkxNng4eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2NpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDN2OGhpICgoY29uc3QgX19idWlsdGluX25lb25faGkgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDh4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzX2xhbmVfczggKGNvbnN0IGludDhfdCAqIF9fYSwgaW50OHg4eDNfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgaW50OHg4eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgdW5pb24geyBpbnQ4eDh4M190IF9faTsgX19idWlsdGluX25lb25fZWkgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkM19sYW5ldjhxaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSwgX19idS5fX28sIF9fYyk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NHgzX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDNfbGFuZV9zMTYgKGNvbnN0IGludDE2X3QgKiBfX2EsIGludDE2eDR4M190IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyBpbnQxNng0eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgdW5pb24geyBpbnQxNng0eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZXY0aGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJ4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzX2xhbmVfczMyIChjb25zdCBpbnQzMl90ICogX19hLCBpbnQzMngyeDNfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgaW50MzJ4MngzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9laSBfX287IH0gX19idSA9IHsgX19iIH07CisgIHVuaW9uIHsgaW50MzJ4MngzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9laSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmV2MnNpICgoY29uc3QgX19idWlsdGluX25lb25fc2kgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJ4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzX2xhbmVfZjMyIChjb25zdCBmbG9hdDMyX3QgKiBfX2EsIGZsb2F0MzJ4MngzX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IGZsb2F0MzJ4MngzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9laSBfX287IH0gX19idSA9IHsgX19iIH07CisgIHVuaW9uIHsgZmxvYXQzMngyeDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZXYyc2YgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9zZiAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDh4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzX2xhbmVfdTggKGNvbnN0IHVpbnQ4X3QgKiBfX2EsIHVpbnQ4eDh4M190IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyB1aW50OHg4eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgdW5pb24geyB1aW50OHg4eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZXY4cWkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0eDNfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkM19sYW5lX3UxNiAoY29uc3QgdWludDE2X3QgKiBfX2EsIHVpbnQxNng0eDNfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgdWludDE2eDR4M190IF9faTsgX19idWlsdGluX25lb25fZWkgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICB1bmlvbiB7IHVpbnQxNng0eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZXY0aGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyeDNfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkM19sYW5lX3UzMiAoY29uc3QgdWludDMyX3QgKiBfX2EsIHVpbnQzMngyeDNfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgdWludDMyeDJ4M190IF9faTsgX19idWlsdGluX25lb25fZWkgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICB1bmlvbiB7IHVpbnQzMngyeDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZXYyc2kgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDh4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzX2xhbmVfcDggKGNvbnN0IHBvbHk4X3QgKiBfX2EsIHBvbHk4eDh4M190IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyBwb2x5OHg4eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgdW5pb24geyBwb2x5OHg4eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZXY4cWkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng0eDNfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkM19sYW5lX3AxNiAoY29uc3QgcG9seTE2X3QgKiBfX2EsIHBvbHkxNng0eDNfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgcG9seTE2eDR4M190IF9faTsgX19idWlsdGluX25lb25fZWkgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICB1bmlvbiB7IHBvbHkxNng0eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZXY0aGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDh4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzcV9sYW5lX3MxNiAoY29uc3QgaW50MTZfdCAqIF9fYSwgaW50MTZ4OHgzX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IGludDE2eDh4M190IF9faTsgX19idWlsdGluX25lb25fY2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICB1bmlvbiB7IGludDE2eDh4M190IF9faTsgX19idWlsdGluX25lb25fY2kgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkM19sYW5ldjhoaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSwgX19idS5fX28sIF9fYyk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NHgzX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDNxX2xhbmVfczMyIChjb25zdCBpbnQzMl90ICogX19hLCBpbnQzMng0eDNfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgaW50MzJ4NHgzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9jaSBfX287IH0gX19idSA9IHsgX19iIH07CisgIHVuaW9uIHsgaW50MzJ4NHgzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9jaSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmV2NHNpICgoY29uc3QgX19idWlsdGluX25lb25fc2kgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDR4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzcV9sYW5lX2YzMiAoY29uc3QgZmxvYXQzMl90ICogX19hLCBmbG9hdDMyeDR4M190IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyBmbG9hdDMyeDR4M190IF9faTsgX19idWlsdGluX25lb25fY2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICB1bmlvbiB7IGZsb2F0MzJ4NHgzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9jaSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmV2NHNmICgoY29uc3QgX19idWlsdGluX25lb25fc2YgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OHgzX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDNxX2xhbmVfdTE2IChjb25zdCB1aW50MTZfdCAqIF9fYSwgdWludDE2eDh4M190IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyB1aW50MTZ4OHgzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9jaSBfX287IH0gX19idSA9IHsgX19iIH07CisgIHVuaW9uIHsgdWludDE2eDh4M190IF9faTsgX19idWlsdGluX25lb25fY2kgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkM19sYW5ldjhoaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSwgX19idS5fX28sIF9fYyk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDR4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzcV9sYW5lX3UzMiAoY29uc3QgdWludDMyX3QgKiBfX2EsIHVpbnQzMng0eDNfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgdWludDMyeDR4M190IF9faTsgX19idWlsdGluX25lb25fY2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICB1bmlvbiB7IHVpbnQzMng0eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2NpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZXY0c2kgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng4eDNfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkM3FfbGFuZV9wMTYgKGNvbnN0IHBvbHkxNl90ICogX19hLCBwb2x5MTZ4OHgzX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IHBvbHkxNng4eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2NpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgdW5pb24geyBwb2x5MTZ4OHgzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9jaSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmV2OGhpICgoY29uc3QgX19idWlsdGluX25lb25faGkgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDh4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzX2R1cF9zOCAoY29uc3QgaW50OF90ICogX19hKQoreworICB1bmlvbiB7IGludDh4OHgzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9laSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cHY4cWkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDR4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzX2R1cF9zMTYgKGNvbnN0IGludDE2X3QgKiBfX2EpCit7CisgIHVuaW9uIHsgaW50MTZ4NHgzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9laSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cHY0aGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJ4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzX2R1cF9zMzIgKGNvbnN0IGludDMyX3QgKiBfX2EpCit7CisgIHVuaW9uIHsgaW50MzJ4MngzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9laSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cHYyc2kgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4MngzX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDNfZHVwX2YzMiAoY29uc3QgZmxvYXQzMl90ICogX19hKQoreworICB1bmlvbiB7IGZsb2F0MzJ4MngzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9laSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cHYyc2YgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9zZiAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDh4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzX2R1cF91OCAoY29uc3QgdWludDhfdCAqIF9fYSkKK3sKKyAgdW5pb24geyB1aW50OHg4eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwdjhxaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDR4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzX2R1cF91MTYgKGNvbnN0IHVpbnQxNl90ICogX19hKQoreworICB1bmlvbiB7IHVpbnQxNng0eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwdjRoaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJ4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzX2R1cF91MzIgKGNvbnN0IHVpbnQzMl90ICogX19hKQoreworICB1bmlvbiB7IHVpbnQzMngyeDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwdjJzaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OHgzX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDNfZHVwX3A4IChjb25zdCBwb2x5OF90ICogX19hKQoreworICB1bmlvbiB7IHBvbHk4eDh4M190IF9faTsgX19idWlsdGluX25lb25fZWkgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkM19kdXB2OHFpICgoY29uc3QgX19idWlsdGluX25lb25fcWkgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NHgzX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDNfZHVwX3AxNiAoY29uc3QgcG9seTE2X3QgKiBfX2EpCit7CisgIHVuaW9uIHsgcG9seTE2eDR4M190IF9faTsgX19idWlsdGluX25lb25fZWkgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkM19kdXB2NGhpICgoY29uc3QgX19idWlsdGluX25lb25faGkgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxeDNfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkM19kdXBfczY0IChjb25zdCBpbnQ2NF90ICogX19hKQoreworICB1bmlvbiB7IGludDY0eDF4M190IF9faTsgX19idWlsdGluX25lb25fZWkgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkM19kdXBkaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2RpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDF4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzX2R1cF91NjQgKGNvbnN0IHVpbnQ2NF90ICogX19hKQoreworICB1bmlvbiB7IHVpbnQ2NHgxeDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwZGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9kaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDNfczggKGludDhfdCAqIF9fYSwgaW50OHg4eDNfdCBfX2IpCit7CisgIHVuaW9uIHsgaW50OHg4eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0M3Y4cWkgKChfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EsIF9fYnUuX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0M19zMTYgKGludDE2X3QgKiBfX2EsIGludDE2eDR4M190IF9fYikKK3sKKyAgdW5pb24geyBpbnQxNng0eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0M3Y0aGkgKChfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EsIF9fYnUuX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0M19zMzIgKGludDMyX3QgKiBfX2EsIGludDMyeDJ4M190IF9fYikKK3sKKyAgdW5pb24geyBpbnQzMngyeDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0M3Yyc2kgKChfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EsIF9fYnUuX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0M19mMzIgKGZsb2F0MzJfdCAqIF9fYSwgZmxvYXQzMngyeDNfdCBfX2IpCit7CisgIHVuaW9uIHsgZmxvYXQzMngyeDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0M3Yyc2YgKChfX2J1aWx0aW5fbmVvbl9zZiAqKSBfX2EsIF9fYnUuX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0M191OCAodWludDhfdCAqIF9fYSwgdWludDh4OHgzX3QgX19iKQoreworICB1bmlvbiB7IHVpbnQ4eDh4M190IF9faTsgX19idWlsdGluX25lb25fZWkgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3QzdjhxaSAoKF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSwgX19idS5fX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QzX3UxNiAodWludDE2X3QgKiBfX2EsIHVpbnQxNng0eDNfdCBfX2IpCit7CisgIHVuaW9uIHsgdWludDE2eDR4M190IF9faTsgX19idWlsdGluX25lb25fZWkgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3QzdjRoaSAoKF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSwgX19idS5fX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QzX3UzMiAodWludDMyX3QgKiBfX2EsIHVpbnQzMngyeDNfdCBfX2IpCit7CisgIHVuaW9uIHsgdWludDMyeDJ4M190IF9faTsgX19idWlsdGluX25lb25fZWkgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3QzdjJzaSAoKF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSwgX19idS5fX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QzX3A4IChwb2x5OF90ICogX19hLCBwb2x5OHg4eDNfdCBfX2IpCit7CisgIHVuaW9uIHsgcG9seTh4OHgzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9laSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDN2OHFpICgoX19idWlsdGluX25lb25fcWkgKikgX19hLCBfX2J1Ll9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDNfcDE2IChwb2x5MTZfdCAqIF9fYSwgcG9seTE2eDR4M190IF9fYikKK3sKKyAgdW5pb24geyBwb2x5MTZ4NHgzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9laSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDN2NGhpICgoX19idWlsdGluX25lb25faGkgKikgX19hLCBfX2J1Ll9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDNfczY0IChpbnQ2NF90ICogX19hLCBpbnQ2NHgxeDNfdCBfX2IpCit7CisgIHVuaW9uIHsgaW50NjR4MXgzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9laSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNkaSAoKF9fYnVpbHRpbl9uZW9uX2RpICopIF9fYSwgX19idS5fX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QzX3U2NCAodWludDY0X3QgKiBfX2EsIHVpbnQ2NHgxeDNfdCBfX2IpCit7CisgIHVuaW9uIHsgdWludDY0eDF4M190IF9faTsgX19idWlsdGluX25lb25fZWkgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3QzZGkgKChfX2J1aWx0aW5fbmVvbl9kaSAqKSBfX2EsIF9fYnUuX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0M3FfczggKGludDhfdCAqIF9fYSwgaW50OHgxNngzX3QgX19iKQoreworICB1bmlvbiB7IGludDh4MTZ4M190IF9faTsgX19idWlsdGluX25lb25fY2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3QzdjE2cWkgKChfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EsIF9fYnUuX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0M3FfczE2IChpbnQxNl90ICogX19hLCBpbnQxNng4eDNfdCBfX2IpCit7CisgIHVuaW9uIHsgaW50MTZ4OHgzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9jaSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDN2OGhpICgoX19idWlsdGluX25lb25faGkgKikgX19hLCBfX2J1Ll9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDNxX3MzMiAoaW50MzJfdCAqIF9fYSwgaW50MzJ4NHgzX3QgX19iKQoreworICB1bmlvbiB7IGludDMyeDR4M190IF9faTsgX19idWlsdGluX25lb25fY2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3QzdjRzaSAoKF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSwgX19idS5fX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QzcV9mMzIgKGZsb2F0MzJfdCAqIF9fYSwgZmxvYXQzMng0eDNfdCBfX2IpCit7CisgIHVuaW9uIHsgZmxvYXQzMng0eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2NpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0M3Y0c2YgKChfX2J1aWx0aW5fbmVvbl9zZiAqKSBfX2EsIF9fYnUuX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0M3FfdTggKHVpbnQ4X3QgKiBfX2EsIHVpbnQ4eDE2eDNfdCBfX2IpCit7CisgIHVuaW9uIHsgdWludDh4MTZ4M190IF9faTsgX19idWlsdGluX25lb25fY2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3QzdjE2cWkgKChfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EsIF9fYnUuX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0M3FfdTE2ICh1aW50MTZfdCAqIF9fYSwgdWludDE2eDh4M190IF9fYikKK3sKKyAgdW5pb24geyB1aW50MTZ4OHgzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9jaSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDN2OGhpICgoX19idWlsdGluX25lb25faGkgKikgX19hLCBfX2J1Ll9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDNxX3UzMiAodWludDMyX3QgKiBfX2EsIHVpbnQzMng0eDNfdCBfX2IpCit7CisgIHVuaW9uIHsgdWludDMyeDR4M190IF9faTsgX19idWlsdGluX25lb25fY2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3QzdjRzaSAoKF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSwgX19idS5fX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QzcV9wOCAocG9seThfdCAqIF9fYSwgcG9seTh4MTZ4M190IF9fYikKK3sKKyAgdW5pb24geyBwb2x5OHgxNngzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9jaSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDN2MTZxaSAoKF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSwgX19idS5fX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QzcV9wMTYgKHBvbHkxNl90ICogX19hLCBwb2x5MTZ4OHgzX3QgX19iKQoreworICB1bmlvbiB7IHBvbHkxNng4eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2NpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0M3Y4aGkgKChfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EsIF9fYnUuX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0M19sYW5lX3M4IChpbnQ4X3QgKiBfX2EsIGludDh4OHgzX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IGludDh4OHgzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9laSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZXY4cWkgKChfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QzX2xhbmVfczE2IChpbnQxNl90ICogX19hLCBpbnQxNng0eDNfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgaW50MTZ4NHgzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9laSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZXY0aGkgKChfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QzX2xhbmVfczMyIChpbnQzMl90ICogX19hLCBpbnQzMngyeDNfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgaW50MzJ4MngzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9laSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZXYyc2kgKChfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QzX2xhbmVfZjMyIChmbG9hdDMyX3QgKiBfX2EsIGZsb2F0MzJ4MngzX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IGZsb2F0MzJ4MngzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9laSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZXYyc2YgKChfX2J1aWx0aW5fbmVvbl9zZiAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QzX2xhbmVfdTggKHVpbnQ4X3QgKiBfX2EsIHVpbnQ4eDh4M190IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyB1aW50OHg4eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5ldjhxaSAoKF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSwgX19idS5fX28sIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDNfbGFuZV91MTYgKHVpbnQxNl90ICogX19hLCB1aW50MTZ4NHgzX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IHVpbnQxNng0eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5ldjRoaSAoKF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSwgX19idS5fX28sIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDNfbGFuZV91MzIgKHVpbnQzMl90ICogX19hLCB1aW50MzJ4MngzX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IHVpbnQzMngyeDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2VpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5ldjJzaSAoKF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSwgX19idS5fX28sIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDNfbGFuZV9wOCAocG9seThfdCAqIF9fYSwgcG9seTh4OHgzX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IHBvbHk4eDh4M190IF9faTsgX19idWlsdGluX25lb25fZWkgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmV2OHFpICgoX19idWlsdGluX25lb25fcWkgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0M19sYW5lX3AxNiAocG9seTE2X3QgKiBfX2EsIHBvbHkxNng0eDNfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgcG9seTE2eDR4M190IF9faTsgX19idWlsdGluX25lb25fZWkgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmV2NGhpICgoX19idWlsdGluX25lb25faGkgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0M3FfbGFuZV9zMTYgKGludDE2X3QgKiBfX2EsIGludDE2eDh4M190IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyBpbnQxNng4eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2NpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5ldjhoaSAoKF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSwgX19idS5fX28sIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDNxX2xhbmVfczMyIChpbnQzMl90ICogX19hLCBpbnQzMng0eDNfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgaW50MzJ4NHgzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9jaSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZXY0c2kgKChfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QzcV9sYW5lX2YzMiAoZmxvYXQzMl90ICogX19hLCBmbG9hdDMyeDR4M190IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyBmbG9hdDMyeDR4M190IF9faTsgX19idWlsdGluX25lb25fY2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmV2NHNmICgoX19idWlsdGluX25lb25fc2YgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0M3FfbGFuZV91MTYgKHVpbnQxNl90ICogX19hLCB1aW50MTZ4OHgzX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IHVpbnQxNng4eDNfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX2NpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5ldjhoaSAoKF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSwgX19idS5fX28sIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDNxX2xhbmVfdTMyICh1aW50MzJfdCAqIF9fYSwgdWludDMyeDR4M190IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyB1aW50MzJ4NHgzX3QgX19pOyBfX2J1aWx0aW5fbmVvbl9jaSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZXY0c2kgKChfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QzcV9sYW5lX3AxNiAocG9seTE2X3QgKiBfX2EsIHBvbHkxNng4eDNfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgcG9seTE2eDh4M190IF9faTsgX19idWlsdGluX25lb25fY2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmV2OGhpICgoX19idWlsdGluX25lb25faGkgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkNF9zOCAoY29uc3QgaW50OF90ICogX19hKQoreworICB1bmlvbiB7IGludDh4OHg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQ0djhxaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NHg0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRfczE2IChjb25zdCBpbnQxNl90ICogX19hKQoreworICB1bmlvbiB7IGludDE2eDR4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkNHY0aGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQ0X3MzMiAoY29uc3QgaW50MzJfdCAqIF9fYSkKK3sKKyAgdW5pb24geyBpbnQzMngyeDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDR2MnNpICgoY29uc3QgX19idWlsdGluX25lb25fc2kgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQ0X2YzMiAoY29uc3QgZmxvYXQzMl90ICogX19hKQoreworICB1bmlvbiB7IGZsb2F0MzJ4Mng0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQ0djJzZiAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3NmICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OHg0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRfdTggKGNvbnN0IHVpbnQ4X3QgKiBfX2EpCit7CisgIHVuaW9uIHsgdWludDh4OHg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQ0djhxaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDR4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQ0X3UxNiAoY29uc3QgdWludDE2X3QgKiBfX2EpCit7CisgIHVuaW9uIHsgdWludDE2eDR4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkNHY0aGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkNF91MzIgKGNvbnN0IHVpbnQzMl90ICogX19hKQoreworICB1bmlvbiB7IHVpbnQzMngyeDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDR2MnNpICgoY29uc3QgX19idWlsdGluX25lb25fc2kgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkNF9wOCAoY29uc3QgcG9seThfdCAqIF9fYSkKK3sKKyAgdW5pb24geyBwb2x5OHg4eDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDR2OHFpICgoY29uc3QgX19idWlsdGluX25lb25fcWkgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NHg0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRfcDE2IChjb25zdCBwb2x5MTZfdCAqIF9fYSkKK3sKKyAgdW5pb24geyBwb2x5MTZ4NHg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQ0djRoaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MXg0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRfczY0IChjb25zdCBpbnQ2NF90ICogX19hKQoreworICB1bmlvbiB7IGludDY0eDF4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkNGRpICgoY29uc3QgX19idWlsdGluX25lb25fZGkgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MXg0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRfdTY0IChjb25zdCB1aW50NjRfdCAqIF9fYSkKK3sKKyAgdW5pb24geyB1aW50NjR4MXg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQ0ZGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9kaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQ0cV9zOCAoY29uc3QgaW50OF90ICogX19hKQoreworICB1bmlvbiB7IGludDh4MTZ4NF90IF9faTsgX19idWlsdGluX25lb25feGkgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkNHYxNnFpICgoY29uc3QgX19idWlsdGluX25lb25fcWkgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkNHFfczE2IChjb25zdCBpbnQxNl90ICogX19hKQoreworICB1bmlvbiB7IGludDE2eDh4NF90IF9faTsgX19idWlsdGluX25lb25feGkgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkNHY4aGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDR4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQ0cV9zMzIgKGNvbnN0IGludDMyX3QgKiBfX2EpCit7CisgIHVuaW9uIHsgaW50MzJ4NHg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl94aSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQ0djRzaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkNHFfZjMyIChjb25zdCBmbG9hdDMyX3QgKiBfX2EpCit7CisgIHVuaW9uIHsgZmxvYXQzMng0eDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3hpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDR2NHNmICgoY29uc3QgX19idWlsdGluX25lb25fc2YgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRxX3U4IChjb25zdCB1aW50OF90ICogX19hKQoreworICB1bmlvbiB7IHVpbnQ4eDE2eDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3hpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDR2MTZxaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDh4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQ0cV91MTYgKGNvbnN0IHVpbnQxNl90ICogX19hKQoreworICB1bmlvbiB7IHVpbnQxNng4eDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3hpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDR2OGhpICgoY29uc3QgX19idWlsdGluX25lb25faGkgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NHg0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRxX3UzMiAoY29uc3QgdWludDMyX3QgKiBfX2EpCit7CisgIHVuaW9uIHsgdWludDMyeDR4NF90IF9faTsgX19idWlsdGluX25lb25feGkgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkNHY0c2kgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkNHFfcDggKGNvbnN0IHBvbHk4X3QgKiBfX2EpCit7CisgIHVuaW9uIHsgcG9seTh4MTZ4NF90IF9faTsgX19idWlsdGluX25lb25feGkgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkNHYxNnFpICgoY29uc3QgX19idWlsdGluX25lb25fcWkgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4OHg0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRxX3AxNiAoY29uc3QgcG9seTE2X3QgKiBfX2EpCit7CisgIHVuaW9uIHsgcG9seTE2eDh4NF90IF9faTsgX19idWlsdGluX25lb25feGkgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkNHY4aGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OHg0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRfbGFuZV9zOCAoY29uc3QgaW50OF90ICogX19hLCBpbnQ4eDh4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyBpbnQ4eDh4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICB1bmlvbiB7IGludDh4OHg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmV2OHFpICgoY29uc3QgX19idWlsdGluX25lb25fcWkgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkNF9sYW5lX3MxNiAoY29uc3QgaW50MTZfdCAqIF9fYSwgaW50MTZ4NHg0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IGludDE2eDR4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICB1bmlvbiB7IGludDE2eDR4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkNF9sYW5ldjRoaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSwgX19idS5fX28sIF9fYyk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Mng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRfbGFuZV9zMzIgKGNvbnN0IGludDMyX3QgKiBfX2EsIGludDMyeDJ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyBpbnQzMngyeDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgdW5pb24geyBpbnQzMngyeDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZXYyc2kgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Mng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRfbGFuZV9mMzIgKGNvbnN0IGZsb2F0MzJfdCAqIF9fYSwgZmxvYXQzMngyeDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgZmxvYXQzMngyeDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgdW5pb24geyBmbG9hdDMyeDJ4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkNF9sYW5ldjJzZiAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3NmICopIF9fYSwgX19idS5fX28sIF9fYyk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OHg0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRfbGFuZV91OCAoY29uc3QgdWludDhfdCAqIF9fYSwgdWludDh4OHg0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IHVpbnQ4eDh4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICB1bmlvbiB7IHVpbnQ4eDh4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkNF9sYW5ldjhxaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSwgX19idS5fX28sIF9fYyk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDR4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQ0X2xhbmVfdTE2IChjb25zdCB1aW50MTZfdCAqIF9fYSwgdWludDE2eDR4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyB1aW50MTZ4NHg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19idSA9IHsgX19iIH07CisgIHVuaW9uIHsgdWludDE2eDR4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkNF9sYW5ldjRoaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSwgX19idS5fX28sIF9fYyk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQ0X2xhbmVfdTMyIChjb25zdCB1aW50MzJfdCAqIF9fYSwgdWludDMyeDJ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyB1aW50MzJ4Mng0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19idSA9IHsgX19iIH07CisgIHVuaW9uIHsgdWludDMyeDJ4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkNF9sYW5ldjJzaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSwgX19idS5fX28sIF9fYyk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OHg0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRfbGFuZV9wOCAoY29uc3QgcG9seThfdCAqIF9fYSwgcG9seTh4OHg0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IHBvbHk4eDh4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICB1bmlvbiB7IHBvbHk4eDh4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkNF9sYW5ldjhxaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSwgX19idS5fX28sIF9fYyk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDR4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQ0X2xhbmVfcDE2IChjb25zdCBwb2x5MTZfdCAqIF9fYSwgcG9seTE2eDR4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyBwb2x5MTZ4NHg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19idSA9IHsgX19iIH07CisgIHVuaW9uIHsgcG9seTE2eDR4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkNF9sYW5ldjRoaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSwgX19idS5fX28sIF9fYyk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OHg0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRxX2xhbmVfczE2IChjb25zdCBpbnQxNl90ICogX19hLCBpbnQxNng4eDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgaW50MTZ4OHg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl94aSBfX287IH0gX19idSA9IHsgX19iIH07CisgIHVuaW9uIHsgaW50MTZ4OHg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl94aSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmV2OGhpICgoY29uc3QgX19idWlsdGluX25lb25faGkgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkNHFfbGFuZV9zMzIgKGNvbnN0IGludDMyX3QgKiBfX2EsIGludDMyeDR4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyBpbnQzMng0eDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3hpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgdW5pb24geyBpbnQzMng0eDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3hpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZXY0c2kgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9zaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NHg0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRxX2xhbmVfZjMyIChjb25zdCBmbG9hdDMyX3QgKiBfX2EsIGZsb2F0MzJ4NHg0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IGZsb2F0MzJ4NHg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl94aSBfX287IH0gX19idSA9IHsgX19iIH07CisgIHVuaW9uIHsgZmxvYXQzMng0eDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3hpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZXY0c2YgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9zZiAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkNHFfbGFuZV91MTYgKGNvbnN0IHVpbnQxNl90ICogX19hLCB1aW50MTZ4OHg0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IHVpbnQxNng4eDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3hpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgdW5pb24geyB1aW50MTZ4OHg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl94aSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmV2OGhpICgoY29uc3QgX19idWlsdGluX25lb25faGkgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NHg0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRxX2xhbmVfdTMyIChjb25zdCB1aW50MzJfdCAqIF9fYSwgdWludDMyeDR4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyB1aW50MzJ4NHg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl94aSBfX287IH0gX19idSA9IHsgX19iIH07CisgIHVuaW9uIHsgdWludDMyeDR4NF90IF9faTsgX19idWlsdGluX25lb25feGkgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkNF9sYW5ldjRzaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSwgX19idS5fX28sIF9fYyk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDh4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQ0cV9sYW5lX3AxNiAoY29uc3QgcG9seTE2X3QgKiBfX2EsIHBvbHkxNng4eDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgcG9seTE2eDh4NF90IF9faTsgX19idWlsdGluX25lb25feGkgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICB1bmlvbiB7IHBvbHkxNng4eDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3hpIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZXY4aGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OHg0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRfZHVwX3M4IChjb25zdCBpbnQ4X3QgKiBfX2EpCit7CisgIHVuaW9uIHsgaW50OHg4eDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwdjhxaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NHg0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRfZHVwX3MxNiAoY29uc3QgaW50MTZfdCAqIF9fYSkKK3sKKyAgdW5pb24geyBpbnQxNng0eDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwdjRoaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Mng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRfZHVwX3MzMiAoY29uc3QgaW50MzJfdCAqIF9fYSkKK3sKKyAgdW5pb24geyBpbnQzMngyeDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwdjJzaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkNF9kdXBfZjMyIChjb25zdCBmbG9hdDMyX3QgKiBfX2EpCit7CisgIHVuaW9uIHsgZmxvYXQzMngyeDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX3J2OworICBfX3J2Ll9fbyA9IF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwdjJzZiAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX3NmICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OHg0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRfZHVwX3U4IChjb25zdCB1aW50OF90ICogX19hKQoreworICB1bmlvbiB7IHVpbnQ4eDh4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkNF9kdXB2OHFpICgoY29uc3QgX19idWlsdGluX25lb25fcWkgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NHg0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRfZHVwX3UxNiAoY29uc3QgdWludDE2X3QgKiBfX2EpCit7CisgIHVuaW9uIHsgdWludDE2eDR4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkNF9kdXB2NGhpICgoY29uc3QgX19idWlsdGluX25lb25faGkgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Mng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRfZHVwX3UzMiAoY29uc3QgdWludDMyX3QgKiBfX2EpCit7CisgIHVuaW9uIHsgdWludDMyeDJ4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkNF9kdXB2MnNpICgoY29uc3QgX19idWlsdGluX25lb25fc2kgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkNF9kdXBfcDggKGNvbnN0IHBvbHk4X3QgKiBfX2EpCit7CisgIHVuaW9uIHsgcG9seTh4OHg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cHY4cWkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng0eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkNF9kdXBfcDE2IChjb25zdCBwb2x5MTZfdCAqIF9fYSkKK3sKKyAgdW5pb24geyBwb2x5MTZ4NHg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cHY0aGkgKChjb25zdCBfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EpOworICByZXR1cm4gX19ydi5fX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDF4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQ0X2R1cF9zNjQgKGNvbnN0IGludDY0X3QgKiBfX2EpCit7CisgIHVuaW9uIHsgaW50NjR4MXg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19ydjsKKyAgX19ydi5fX28gPSBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cGRpICgoY29uc3QgX19idWlsdGluX25lb25fZGkgKikgX19hKTsKKyAgcmV0dXJuIF9fcnYuX19pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MXg0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRfZHVwX3U2NCAoY29uc3QgdWludDY0X3QgKiBfX2EpCit7CisgIHVuaW9uIHsgdWludDY0eDF4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fcnY7CisgIF9fcnYuX19vID0gX19idWlsdGluX25lb25fdmxkNF9kdXBkaSAoKGNvbnN0IF9fYnVpbHRpbl9uZW9uX2RpICopIF9fYSk7CisgIHJldHVybiBfX3J2Ll9faTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0NF9zOCAoaW50OF90ICogX19hLCBpbnQ4eDh4NF90IF9fYikKK3sKKyAgdW5pb24geyBpbnQ4eDh4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3Q0djhxaSAoKF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSwgX19idS5fX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3Q0X3MxNiAoaW50MTZfdCAqIF9fYSwgaW50MTZ4NHg0X3QgX19iKQoreworICB1bmlvbiB7IGludDE2eDR4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3Q0djRoaSAoKF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSwgX19idS5fX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3Q0X3MzMiAoaW50MzJfdCAqIF9fYSwgaW50MzJ4Mng0X3QgX19iKQoreworICB1bmlvbiB7IGludDMyeDJ4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3Q0djJzaSAoKF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSwgX19idS5fX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3Q0X2YzMiAoZmxvYXQzMl90ICogX19hLCBmbG9hdDMyeDJ4NF90IF9fYikKK3sKKyAgdW5pb24geyBmbG9hdDMyeDJ4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3Q0djJzZiAoKF9fYnVpbHRpbl9uZW9uX3NmICopIF9fYSwgX19idS5fX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3Q0X3U4ICh1aW50OF90ICogX19hLCB1aW50OHg4eDRfdCBfX2IpCit7CisgIHVuaW9uIHsgdWludDh4OHg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDR2OHFpICgoX19idWlsdGluX25lb25fcWkgKikgX19hLCBfX2J1Ll9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDRfdTE2ICh1aW50MTZfdCAqIF9fYSwgdWludDE2eDR4NF90IF9fYikKK3sKKyAgdW5pb24geyB1aW50MTZ4NHg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDR2NGhpICgoX19idWlsdGluX25lb25faGkgKikgX19hLCBfX2J1Ll9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDRfdTMyICh1aW50MzJfdCAqIF9fYSwgdWludDMyeDJ4NF90IF9fYikKK3sKKyAgdW5pb24geyB1aW50MzJ4Mng0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDR2MnNpICgoX19idWlsdGluX25lb25fc2kgKikgX19hLCBfX2J1Ll9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDRfcDggKHBvbHk4X3QgKiBfX2EsIHBvbHk4eDh4NF90IF9fYikKK3sKKyAgdW5pb24geyBwb2x5OHg4eDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0NHY4cWkgKChfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EsIF9fYnUuX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0NF9wMTYgKHBvbHkxNl90ICogX19hLCBwb2x5MTZ4NHg0X3QgX19iKQoreworICB1bmlvbiB7IHBvbHkxNng0eDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0NHY0aGkgKChfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EsIF9fYnUuX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0NF9zNjQgKGludDY0X3QgKiBfX2EsIGludDY0eDF4NF90IF9fYikKK3sKKyAgdW5pb24geyBpbnQ2NHgxeDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0NGRpICgoX19idWlsdGluX25lb25fZGkgKikgX19hLCBfX2J1Ll9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDRfdTY0ICh1aW50NjRfdCAqIF9fYSwgdWludDY0eDF4NF90IF9fYikKK3sKKyAgdW5pb24geyB1aW50NjR4MXg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRkaSAoKF9fYnVpbHRpbl9uZW9uX2RpICopIF9fYSwgX19idS5fX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3Q0cV9zOCAoaW50OF90ICogX19hLCBpbnQ4eDE2eDRfdCBfX2IpCit7CisgIHVuaW9uIHsgaW50OHgxNng0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl94aSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDR2MTZxaSAoKF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSwgX19idS5fX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3Q0cV9zMTYgKGludDE2X3QgKiBfX2EsIGludDE2eDh4NF90IF9fYikKK3sKKyAgdW5pb24geyBpbnQxNng4eDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3hpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0NHY4aGkgKChfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EsIF9fYnUuX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0NHFfczMyIChpbnQzMl90ICogX19hLCBpbnQzMng0eDRfdCBfX2IpCit7CisgIHVuaW9uIHsgaW50MzJ4NHg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl94aSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDR2NHNpICgoX19idWlsdGluX25lb25fc2kgKikgX19hLCBfX2J1Ll9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDRxX2YzMiAoZmxvYXQzMl90ICogX19hLCBmbG9hdDMyeDR4NF90IF9fYikKK3sKKyAgdW5pb24geyBmbG9hdDMyeDR4NF90IF9faTsgX19idWlsdGluX25lb25feGkgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3Q0djRzZiAoKF9fYnVpbHRpbl9uZW9uX3NmICopIF9fYSwgX19idS5fX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3Q0cV91OCAodWludDhfdCAqIF9fYSwgdWludDh4MTZ4NF90IF9fYikKK3sKKyAgdW5pb24geyB1aW50OHgxNng0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl94aSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDR2MTZxaSAoKF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSwgX19idS5fX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3Q0cV91MTYgKHVpbnQxNl90ICogX19hLCB1aW50MTZ4OHg0X3QgX19iKQoreworICB1bmlvbiB7IHVpbnQxNng4eDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3hpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0NHY4aGkgKChfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EsIF9fYnUuX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0NHFfdTMyICh1aW50MzJfdCAqIF9fYSwgdWludDMyeDR4NF90IF9fYikKK3sKKyAgdW5pb24geyB1aW50MzJ4NHg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl94aSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDR2NHNpICgoX19idWlsdGluX25lb25fc2kgKikgX19hLCBfX2J1Ll9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDRxX3A4IChwb2x5OF90ICogX19hLCBwb2x5OHgxNng0X3QgX19iKQoreworICB1bmlvbiB7IHBvbHk4eDE2eDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3hpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0NHYxNnFpICgoX19idWlsdGluX25lb25fcWkgKikgX19hLCBfX2J1Ll9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDRxX3AxNiAocG9seTE2X3QgKiBfX2EsIHBvbHkxNng4eDRfdCBfX2IpCit7CisgIHVuaW9uIHsgcG9seTE2eDh4NF90IF9faTsgX19idWlsdGluX25lb25feGkgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3Q0djhoaSAoKF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSwgX19idS5fX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3Q0X2xhbmVfczggKGludDhfdCAqIF9fYSwgaW50OHg4eDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgaW50OHg4eDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5ldjhxaSAoKF9fYnVpbHRpbl9uZW9uX3FpICopIF9fYSwgX19idS5fX28sIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDRfbGFuZV9zMTYgKGludDE2X3QgKiBfX2EsIGludDE2eDR4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyBpbnQxNng0eDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5ldjRoaSAoKF9fYnVpbHRpbl9uZW9uX2hpICopIF9fYSwgX19idS5fX28sIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDRfbGFuZV9zMzIgKGludDMyX3QgKiBfX2EsIGludDMyeDJ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyBpbnQzMngyeDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5ldjJzaSAoKF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSwgX19idS5fX28sIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDRfbGFuZV9mMzIgKGZsb2F0MzJfdCAqIF9fYSwgZmxvYXQzMngyeDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgZmxvYXQzMngyeDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX29pIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5ldjJzZiAoKF9fYnVpbHRpbl9uZW9uX3NmICopIF9fYSwgX19idS5fX28sIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDRfbGFuZV91OCAodWludDhfdCAqIF9fYSwgdWludDh4OHg0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IHVpbnQ4eDh4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmV2OHFpICgoX19idWlsdGluX25lb25fcWkgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0NF9sYW5lX3UxNiAodWludDE2X3QgKiBfX2EsIHVpbnQxNng0eDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgdWludDE2eDR4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmV2NGhpICgoX19idWlsdGluX25lb25faGkgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0NF9sYW5lX3UzMiAodWludDMyX3QgKiBfX2EsIHVpbnQzMngyeDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgdWludDMyeDJ4NF90IF9faTsgX19idWlsdGluX25lb25fb2kgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmV2MnNpICgoX19idWlsdGluX25lb25fc2kgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0NF9sYW5lX3A4IChwb2x5OF90ICogX19hLCBwb2x5OHg4eDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgcG9seTh4OHg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZXY4cWkgKChfX2J1aWx0aW5fbmVvbl9xaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3Q0X2xhbmVfcDE2IChwb2x5MTZfdCAqIF9fYSwgcG9seTE2eDR4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyBwb2x5MTZ4NHg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl9vaSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZXY0aGkgKChfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3Q0cV9sYW5lX3MxNiAoaW50MTZfdCAqIF9fYSwgaW50MTZ4OHg0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IGludDE2eDh4NF90IF9faTsgX19idWlsdGluX25lb25feGkgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmV2OGhpICgoX19idWlsdGluX25lb25faGkgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0NHFfbGFuZV9zMzIgKGludDMyX3QgKiBfX2EsIGludDMyeDR4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyBpbnQzMng0eDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3hpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5ldjRzaSAoKF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSwgX19idS5fX28sIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDRxX2xhbmVfZjMyIChmbG9hdDMyX3QgKiBfX2EsIGZsb2F0MzJ4NHg0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IGZsb2F0MzJ4NHg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl94aSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZXY0c2YgKChfX2J1aWx0aW5fbmVvbl9zZiAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3Q0cV9sYW5lX3UxNiAodWludDE2X3QgKiBfX2EsIHVpbnQxNng4eDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHVuaW9uIHsgdWludDE2eDh4NF90IF9faTsgX19idWlsdGluX25lb25feGkgX19vOyB9IF9fYnUgPSB7IF9fYiB9OworICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmV2OGhpICgoX19idWlsdGluX25lb25faGkgKikgX19hLCBfX2J1Ll9fbywgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0NHFfbGFuZV91MzIgKHVpbnQzMl90ICogX19hLCB1aW50MzJ4NHg0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICB1bmlvbiB7IHVpbnQzMng0eDRfdCBfX2k7IF9fYnVpbHRpbl9uZW9uX3hpIF9fbzsgfSBfX2J1ID0geyBfX2IgfTsKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5ldjRzaSAoKF9fYnVpbHRpbl9uZW9uX3NpICopIF9fYSwgX19idS5fX28sIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDRxX2xhbmVfcDE2IChwb2x5MTZfdCAqIF9fYSwgcG9seTE2eDh4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgdW5pb24geyBwb2x5MTZ4OHg0X3QgX19pOyBfX2J1aWx0aW5fbmVvbl94aSBfX287IH0gX19idSA9IHsgX19iIH07CisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZXY4aGkgKChfX2J1aWx0aW5fbmVvbl9oaSAqKSBfX2EsIF9fYnUuX19vLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFuZF9zOCAoaW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdmFuZHY4cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YW5kX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdmFuZHY0aGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YW5kX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdmFuZHYyc2kgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YW5kX3M2NCAoaW50NjR4MV90IF9fYSwgaW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdmFuZGRpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFuZF91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdmFuZHY4cWkgKChpbnQ4eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhbmRfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92YW5kdjRoaSAoKGludDE2eDRfdCkgX19hLCAoaW50MTZ4NF90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YW5kX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdmFuZHYyc2kgKChpbnQzMngyX3QpIF9fYSwgKGludDMyeDJfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFuZF91NjQgKHVpbnQ2NHgxX3QgX19hLCB1aW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZhbmRkaSAoKGludDY0eDFfdCkgX19hLCAoaW50NjR4MV90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhbmRxX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92YW5kdjE2cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YW5kcV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZhbmR2OGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFuZHFfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92YW5kdjRzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhbmRxX3M2NCAoaW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdmFuZHYyZGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFuZHFfdTggKHVpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZhbmR2MTZxaSAoKGludDh4MTZfdCkgX19hLCAoaW50OHgxNl90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YW5kcV91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZhbmR2OGhpICgoaW50MTZ4OF90KSBfX2EsIChpbnQxNng4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhbmRxX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdmFuZHY0c2kgKChpbnQzMng0X3QpIF9fYSwgKGludDMyeDRfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFuZHFfdTY0ICh1aW50NjR4Ml90IF9fYSwgdWludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92YW5kdjJkaSAoKGludDY0eDJfdCkgX19hLCAoaW50NjR4Ml90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ycl9zOCAoaW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdm9ycnY4cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2b3JyX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdm9ycnY0aGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2b3JyX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdm9ycnYyc2kgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2b3JyX3M2NCAoaW50NjR4MV90IF9fYSwgaW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdm9ycmRpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ycl91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdm9ycnY4cWkgKChpbnQ4eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZvcnJfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92b3JydjRoaSAoKGludDE2eDRfdCkgX19hLCAoaW50MTZ4NF90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2b3JyX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdm9ycnYyc2kgKChpbnQzMngyX3QpIF9fYSwgKGludDMyeDJfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ycl91NjQgKHVpbnQ2NHgxX3QgX19hLCB1aW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZvcnJkaSAoKGludDY0eDFfdCkgX19hLCAoaW50NjR4MV90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZvcnJxX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92b3JydjE2cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2b3JycV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZvcnJ2OGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ycnFfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92b3JydjRzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZvcnJxX3M2NCAoaW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdm9ycnYyZGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ycnFfdTggKHVpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZvcnJ2MTZxaSAoKGludDh4MTZfdCkgX19hLCAoaW50OHgxNl90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2b3JycV91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZvcnJ2OGhpICgoaW50MTZ4OF90KSBfX2EsIChpbnQxNng4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZvcnJxX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdm9ycnY0c2kgKChpbnQzMng0X3QpIF9fYSwgKGludDMyeDRfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ycnFfdTY0ICh1aW50NjR4Ml90IF9fYSwgdWludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92b3JydjJkaSAoKGludDY0eDJfdCkgX19hLCAoaW50NjR4Ml90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmVvcl9zOCAoaW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdmVvcnY4cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZW9yX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdmVvcnY0aGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZW9yX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdmVvcnYyc2kgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZW9yX3M2NCAoaW50NjR4MV90IF9fYSwgaW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdmVvcmRpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmVvcl91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdmVvcnY4cWkgKChpbnQ4eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zlb3JfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92ZW9ydjRoaSAoKGludDE2eDRfdCkgX19hLCAoaW50MTZ4NF90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZW9yX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdmVvcnYyc2kgKChpbnQzMngyX3QpIF9fYSwgKGludDMyeDJfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmVvcl91NjQgKHVpbnQ2NHgxX3QgX19hLCB1aW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3Zlb3JkaSAoKGludDY0eDFfdCkgX19hLCAoaW50NjR4MV90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zlb3JxX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92ZW9ydjE2cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZW9ycV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3Zlb3J2OGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmVvcnFfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92ZW9ydjRzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zlb3JxX3M2NCAoaW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdmVvcnYyZGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmVvcnFfdTggKHVpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3Zlb3J2MTZxaSAoKGludDh4MTZfdCkgX19hLCAoaW50OHgxNl90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZW9ycV91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3Zlb3J2OGhpICgoaW50MTZ4OF90KSBfX2EsIChpbnQxNng4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zlb3JxX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdmVvcnY0c2kgKChpbnQzMng0X3QpIF9fYSwgKGludDMyeDRfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmVvcnFfdTY0ICh1aW50NjR4Ml90IF9fYSwgdWludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92ZW9ydjJkaSAoKGludDY0eDJfdCkgX19hLCAoaW50NjR4Ml90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmJpY19zOCAoaW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdmJpY3Y4cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YmljX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdmJpY3Y0aGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YmljX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdmJpY3Yyc2kgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YmljX3M2NCAoaW50NjR4MV90IF9fYSwgaW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdmJpY2RpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmJpY191OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdmJpY3Y4cWkgKChpbnQ4eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZiaWNfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92YmljdjRoaSAoKGludDE2eDRfdCkgX19hLCAoaW50MTZ4NF90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YmljX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdmJpY3Yyc2kgKChpbnQzMngyX3QpIF9fYSwgKGludDMyeDJfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmJpY191NjQgKHVpbnQ2NHgxX3QgX19hLCB1aW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZiaWNkaSAoKGludDY0eDFfdCkgX19hLCAoaW50NjR4MV90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZiaWNxX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92YmljdjE2cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YmljcV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZiaWN2OGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmJpY3FfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92YmljdjRzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZiaWNxX3M2NCAoaW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdmJpY3YyZGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmJpY3FfdTggKHVpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZiaWN2MTZxaSAoKGludDh4MTZfdCkgX19hLCAoaW50OHgxNl90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YmljcV91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZiaWN2OGhpICgoaW50MTZ4OF90KSBfX2EsIChpbnQxNng4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZiaWNxX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdmJpY3Y0c2kgKChpbnQzMng0X3QpIF9fYSwgKGludDMyeDRfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmJpY3FfdTY0ICh1aW50NjR4Ml90IF9fYSwgdWludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92YmljdjJkaSAoKGludDY0eDJfdCkgX19hLCAoaW50NjR4Ml90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ybl9zOCAoaW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdm9ybnY4cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2b3JuX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdm9ybnY0aGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2b3JuX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdm9ybnYyc2kgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2b3JuX3M2NCAoaW50NjR4MV90IF9fYSwgaW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdm9ybmRpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ybl91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdm9ybnY4cWkgKChpbnQ4eDhfdCkgX19hLCAoaW50OHg4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zvcm5fdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92b3JudjRoaSAoKGludDE2eDRfdCkgX19hLCAoaW50MTZ4NF90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2b3JuX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdm9ybnYyc2kgKChpbnQzMngyX3QpIF9fYSwgKGludDMyeDJfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ybl91NjQgKHVpbnQ2NHgxX3QgX19hLCB1aW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3Zvcm5kaSAoKGludDY0eDFfdCkgX19hLCAoaW50NjR4MV90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zvcm5xX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92b3JudjE2cWkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2b3JucV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3Zvcm52OGhpIChfX2EsIF9fYiwgMSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ybnFfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92b3JudjRzaSAoX19hLCBfX2IsIDEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zvcm5xX3M2NCAoaW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdm9ybnYyZGkgKF9fYSwgX19iLCAxKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ybnFfdTggKHVpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3Zvcm52MTZxaSAoKGludDh4MTZfdCkgX19hLCAoaW50OHgxNl90KSBfX2IsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2b3JucV91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3Zvcm52OGhpICgoaW50MTZ4OF90KSBfX2EsIChpbnQxNng4X3QpIF9fYiwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zvcm5xX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdm9ybnY0c2kgKChpbnQzMng0X3QpIF9fYSwgKGludDMyeDRfdCkgX19iLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ybnFfdTY0ICh1aW50NjR4Ml90IF9fYSwgdWludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92b3JudjJkaSAoKGludDY0eDJfdCkgX19hLCAoaW50NjR4Ml90KSBfX2IsIDApOworfQorCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3A4X3M4IChpbnQ4eDhfdCBfX2EpCit7CisgIHJldHVybiAocG9seTh4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4cWl2OHFpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9wOF9zMTYgKGludDE2eDRfdCBfX2EpCit7CisgIHJldHVybiAocG9seTh4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4cWl2NGhpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9wOF9zMzIgKGludDMyeDJfdCBfX2EpCit7CisgIHJldHVybiAocG9seTh4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4cWl2MnNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9wOF9zNjQgKGludDY0eDFfdCBfX2EpCit7CisgIHJldHVybiAocG9seTh4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4cWlkaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfcDhfZjMyIChmbG9hdDMyeDJfdCBfX2EpCit7CisgIHJldHVybiAocG9seTh4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4cWl2MnNmIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9wOF91OCAodWludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHg4X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djhxaXY4cWkgKChpbnQ4eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfcDhfdTE2ICh1aW50MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHg4X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djhxaXY0aGkgKChpbnQxNng0X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3A4X3UzMiAodWludDMyeDJfdCBfX2EpCit7CisgIHJldHVybiAocG9seTh4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4cWl2MnNpICgoaW50MzJ4Ml90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9wOF91NjQgKHVpbnQ2NHgxX3QgX19hKQoreworICByZXR1cm4gKHBvbHk4eDhfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2OHFpZGkgKChpbnQ2NHgxX3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3A4X3AxNiAocG9seTE2eDRfdCBfX2EpCit7CisgIHJldHVybiAocG9seTh4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4cWl2NGhpICgoaW50MTZ4NF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3A4X3M4IChpbnQ4eDE2X3QgX19hKQoreworICByZXR1cm4gKHBvbHk4eDE2X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djE2cWl2MTZxaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9wOF9zMTYgKGludDE2eDhfdCBfX2EpCit7CisgIHJldHVybiAocG9seTh4MTZfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MTZxaXY4aGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfcDhfczMyIChpbnQzMng0X3QgX19hKQoreworICByZXR1cm4gKHBvbHk4eDE2X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djE2cWl2NHNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3A4X3M2NCAoaW50NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHYxNnFpdjJkaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9wOF9mMzIgKGZsb2F0MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHYxNnFpdjRzZiAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9wOF91OCAodWludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiAocG9seTh4MTZfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MTZxaXYxNnFpICgoaW50OHgxNl90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3A4X3UxNiAodWludDE2eDhfdCBfX2EpCit7CisgIHJldHVybiAocG9seTh4MTZfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MTZxaXY4aGkgKChpbnQxNng4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfcDhfdTMyICh1aW50MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHYxNnFpdjRzaSAoKGludDMyeDRfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9wOF91NjQgKHVpbnQ2NHgyX3QgX19hKQoreworICByZXR1cm4gKHBvbHk4eDE2X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djE2cWl2MmRpICgoaW50NjR4Ml90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3A4X3AxNiAocG9seTE2eDhfdCBfX2EpCit7CisgIHJldHVybiAocG9seTh4MTZfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MTZxaXY4aGkgKChpbnQxNng4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9wMTZfczggKGludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY0aGl2OHFpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfcDE2X3MxNiAoaW50MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY0aGl2NGhpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfcDE2X3MzMiAoaW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY0aGl2MnNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfcDE2X3M2NCAoaW50NjR4MV90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY0aGlkaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3AxNl9mMzIgKGZsb2F0MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY0aGl2MnNmIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfcDE2X3U4ICh1aW50OHg4X3QgX19hKQoreworICByZXR1cm4gKHBvbHkxNng0X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djRoaXY4cWkgKChpbnQ4eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3AxNl91MTYgKHVpbnQxNng0X3QgX19hKQoreworICByZXR1cm4gKHBvbHkxNng0X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djRoaXY0aGkgKChpbnQxNng0X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9wMTZfdTMyICh1aW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY0aGl2MnNpICgoaW50MzJ4Ml90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfcDE2X3U2NCAodWludDY0eDFfdCBfX2EpCit7CisgIHJldHVybiAocG9seTE2eDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NGhpZGkgKChpbnQ2NHgxX3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9wMTZfcDggKHBvbHk4eDhfdCBfX2EpCit7CisgIHJldHVybiAocG9seTE2eDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NGhpdjhxaSAoKGludDh4OF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3AxNl9zOCAoaW50OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4aGl2MTZxaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9wMTZfczE2IChpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKHBvbHkxNng4X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djhoaXY4aGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfcDE2X3MzMiAoaW50MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4aGl2NHNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3AxNl9zNjQgKGludDY0eDJfdCBfX2EpCit7CisgIHJldHVybiAocG9seTE2eDhfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2OGhpdjJkaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9wMTZfZjMyIChmbG9hdDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAocG9seTE2eDhfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2OGhpdjRzZiAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9wMTZfdTggKHVpbnQ4eDE2X3QgX19hKQoreworICByZXR1cm4gKHBvbHkxNng4X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djhoaXYxNnFpICgoaW50OHgxNl90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3AxNl91MTYgKHVpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKHBvbHkxNng4X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djhoaXY4aGkgKChpbnQxNng4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfcDE2X3UzMiAodWludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAocG9seTE2eDhfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2OGhpdjRzaSAoKGludDMyeDRfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9wMTZfdTY0ICh1aW50NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4aGl2MmRpICgoaW50NjR4Ml90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3AxNl9wOCAocG9seTh4MTZfdCBfX2EpCit7CisgIHJldHVybiAocG9seTE2eDhfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2OGhpdjE2cWkgKChpbnQ4eDE2X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfZjMyX3M4IChpbnQ4eDhfdCBfX2EpCit7CisgIHJldHVybiAoZmxvYXQzMngyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJzZnY4cWkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfZjMyX3MxNiAoaW50MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MnNmdjRoaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9mMzJfczMyIChpbnQzMngyX3QgX19hKQoreworICByZXR1cm4gKGZsb2F0MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHYyc2Z2MnNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X2YzMl9zNjQgKGludDY0eDFfdCBfX2EpCit7CisgIHJldHVybiAoZmxvYXQzMngyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJzZmRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X2YzMl91OCAodWludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MnNmdjhxaSAoKGludDh4OF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X2YzMl91MTYgKHVpbnQxNng0X3QgX19hKQoreworICByZXR1cm4gKGZsb2F0MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHYyc2Z2NGhpICgoaW50MTZ4NF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X2YzMl91MzIgKHVpbnQzMngyX3QgX19hKQoreworICByZXR1cm4gKGZsb2F0MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHYyc2Z2MnNpICgoaW50MzJ4Ml90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X2YzMl91NjQgKHVpbnQ2NHgxX3QgX19hKQoreworICByZXR1cm4gKGZsb2F0MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHYyc2ZkaSAoKGludDY0eDFfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9mMzJfcDggKHBvbHk4eDhfdCBfX2EpCit7CisgIHJldHVybiAoZmxvYXQzMngyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJzZnY4cWkgKChpbnQ4eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9mMzJfcDE2IChwb2x5MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MnNmdjRoaSAoKGludDE2eDRfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfZjMyX3M4IChpbnQ4eDE2X3QgX19hKQoreworICByZXR1cm4gKGZsb2F0MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY0c2Z2MTZxaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfZjMyX3MxNiAoaW50MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NHNmdjhoaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfZjMyX3MzMiAoaW50MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NHNmdjRzaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfZjMyX3M2NCAoaW50NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NHNmdjJkaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfZjMyX3U4ICh1aW50OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NHNmdjE2cWkgKChpbnQ4eDE2X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX2YzMl91MTYgKHVpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKGZsb2F0MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY0c2Z2OGhpICgoaW50MTZ4OF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9mMzJfdTMyICh1aW50MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NHNmdjRzaSAoKGludDMyeDRfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfZjMyX3U2NCAodWludDY0eDJfdCBfX2EpCit7CisgIHJldHVybiAoZmxvYXQzMng0X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djRzZnYyZGkgKChpbnQ2NHgyX3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX2YzMl9wOCAocG9seTh4MTZfdCBfX2EpCit7CisgIHJldHVybiAoZmxvYXQzMng0X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djRzZnYxNnFpICgoaW50OHgxNl90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9mMzJfcDE2IChwb2x5MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NHNmdjhoaSAoKGludDE2eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczY0X3M4IChpbnQ4eDhfdCBfX2EpCit7CisgIHJldHVybiAoaW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldGRpdjhxaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczY0X3MxNiAoaW50MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0ZGl2NGhpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9zNjRfczMyIChpbnQzMngyX3QgX19hKQoreworICByZXR1cm4gKGludDY0eDFfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXRkaXYyc2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3M2NF9mMzIgKGZsb2F0MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0ZGl2MnNmIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9zNjRfdTggKHVpbnQ4eDhfdCBfX2EpCit7CisgIHJldHVybiAoaW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldGRpdjhxaSAoKGludDh4OF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9zNjRfdTE2ICh1aW50MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0ZGl2NGhpICgoaW50MTZ4NF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9zNjRfdTMyICh1aW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0ZGl2MnNpICgoaW50MzJ4Ml90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9zNjRfdTY0ICh1aW50NjR4MV90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0ZGlkaSAoKGludDY0eDFfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczY0X3A4IChwb2x5OHg4X3QgX19hKQoreworICByZXR1cm4gKGludDY0eDFfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXRkaXY4cWkgKChpbnQ4eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczY0X3AxNiAocG9seTE2eDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldGRpdjRoaSAoKGludDE2eDRfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3M2NF9zOCAoaW50OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJkaXYxNnFpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczY0X3MxNiAoaW50MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJkaXY4aGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9zNjRfczMyIChpbnQzMng0X3QgX19hKQoreworICByZXR1cm4gKGludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MmRpdjRzaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3M2NF9mMzIgKGZsb2F0MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJkaXY0c2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9zNjRfdTggKHVpbnQ4eDE2X3QgX19hKQoreworICByZXR1cm4gKGludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MmRpdjE2cWkgKChpbnQ4eDE2X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9zNjRfdTE2ICh1aW50MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJkaXY4aGkgKChpbnQxNng4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9zNjRfdTMyICh1aW50MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJkaXY0c2kgKChpbnQzMng0X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9zNjRfdTY0ICh1aW50NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJkaXYyZGkgKChpbnQ2NHgyX3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9zNjRfcDggKHBvbHk4eDE2X3QgX19hKQoreworICByZXR1cm4gKGludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MmRpdjE2cWkgKChpbnQ4eDE2X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9zNjRfcDE2IChwb2x5MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJkaXY4aGkgKChpbnQxNng4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91NjRfczggKGludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldGRpdjhxaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3U2NF9zMTYgKGludDE2eDRfdCBfX2EpCit7CisgIHJldHVybiAodWludDY0eDFfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXRkaXY0aGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91NjRfczMyIChpbnQzMngyX3QgX19hKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0ZGl2MnNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfdTY0X3M2NCAoaW50NjR4MV90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldGRpZGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91NjRfZjMyIChmbG9hdDMyeDJfdCBfX2EpCit7CisgIHJldHVybiAodWludDY0eDFfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXRkaXYyc2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91NjRfdTggKHVpbnQ4eDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDY0eDFfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXRkaXY4cWkgKChpbnQ4eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3U2NF91MTYgKHVpbnQxNng0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0ZGl2NGhpICgoaW50MTZ4NF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfdTY0X3UzMiAodWludDMyeDJfdCBfX2EpCit7CisgIHJldHVybiAodWludDY0eDFfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXRkaXYyc2kgKChpbnQzMngyX3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91NjRfcDggKHBvbHk4eDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDY0eDFfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXRkaXY4cWkgKChpbnQ4eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3U2NF9wMTYgKHBvbHkxNng0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0ZGl2NGhpICgoaW50MTZ4NF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3U2NF9zOCAoaW50OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHYyZGl2MTZxaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV91NjRfczE2IChpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJkaXY4aGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdTY0X3MzMiAoaW50MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHYyZGl2NHNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3U2NF9zNjQgKGludDY0eDJfdCBfX2EpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MmRpdjJkaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV91NjRfZjMyIChmbG9hdDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MmRpdjRzZiAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV91NjRfdTggKHVpbnQ4eDE2X3QgX19hKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJkaXYxNnFpICgoaW50OHgxNl90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3U2NF91MTYgKHVpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJkaXY4aGkgKChpbnQxNng4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdTY0X3UzMiAodWludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MmRpdjRzaSAoKGludDMyeDRfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV91NjRfcDggKHBvbHk4eDE2X3QgX19hKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJkaXYxNnFpICgoaW50OHgxNl90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3U2NF9wMTYgKHBvbHkxNng4X3QgX19hKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJkaXY4aGkgKChpbnQxNng4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczhfczE2IChpbnQxNng0X3QgX19hKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4cWl2NGhpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3M4X3MzMiAoaW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2OHFpdjJzaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9zOF9zNjQgKGludDY0eDFfdCBfX2EpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djhxaWRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3M4X2YzMiAoZmxvYXQzMngyX3QgX19hKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4cWl2MnNmIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3M4X3U4ICh1aW50OHg4X3QgX19hKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4cWl2OHFpICgoaW50OHg4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczhfdTE2ICh1aW50MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2OHFpdjRoaSAoKGludDE2eDRfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9zOF91MzIgKHVpbnQzMngyX3QgX19hKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4cWl2MnNpICgoaW50MzJ4Ml90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3M4X3U2NCAodWludDY0eDFfdCBfX2EpCit7CisgIHJldHVybiAoaW50OHg4X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djhxaWRpICgoaW50NjR4MV90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3M4X3A4IChwb2x5OHg4X3QgX19hKQoreworICByZXR1cm4gKGludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4cWl2OHFpICgoaW50OHg4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczhfcDE2IChwb2x5MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2OHFpdjRoaSAoKGludDE2eDRfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3M4X3MxNiAoaW50MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djE2cWl2OGhpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczhfczMyIChpbnQzMng0X3QgX19hKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MTZxaXY0c2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9zOF9zNjQgKGludDY0eDJfdCBfX2EpCit7CisgIHJldHVybiAoaW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHYxNnFpdjJkaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3M4X2YzMiAoZmxvYXQzMng0X3QgX19hKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MTZxaXY0c2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9zOF91OCAodWludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiAoaW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHYxNnFpdjE2cWkgKChpbnQ4eDE2X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9zOF91MTYgKHVpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MTZxaXY4aGkgKChpbnQxNng4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9zOF91MzIgKHVpbnQzMng0X3QgX19hKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MTZxaXY0c2kgKChpbnQzMng0X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9zOF91NjQgKHVpbnQ2NHgyX3QgX19hKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MTZxaXYyZGkgKChpbnQ2NHgyX3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9zOF9wOCAocG9seTh4MTZfdCBfX2EpCit7CisgIHJldHVybiAoaW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHYxNnFpdjE2cWkgKChpbnQ4eDE2X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9zOF9wMTYgKHBvbHkxNng4X3QgX19hKQoreworICByZXR1cm4gKGludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MTZxaXY4aGkgKChpbnQxNng4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3MxNl9zOCAoaW50OHg4X3QgX19hKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NGhpdjhxaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczE2X3MzMiAoaW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djRoaXYyc2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3MxNl9zNjQgKGludDY0eDFfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY0aGlkaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczE2X2YzMiAoZmxvYXQzMngyX3QgX19hKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NGhpdjJzZiAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczE2X3U4ICh1aW50OHg4X3QgX19hKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NGhpdjhxaSAoKGludDh4OF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9zMTZfdTE2ICh1aW50MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djRoaXY0aGkgKChpbnQxNng0X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3MxNl91MzIgKHVpbnQzMngyX3QgX19hKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NGhpdjJzaSAoKGludDMyeDJfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczE2X3U2NCAodWludDY0eDFfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY0aGlkaSAoKGludDY0eDFfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczE2X3A4IChwb2x5OHg4X3QgX19hKQoreworICByZXR1cm4gKGludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NGhpdjhxaSAoKGludDh4OF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9zMTZfcDE2IChwb2x5MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djRoaXY0aGkgKChpbnQxNng0X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9zMTZfczggKGludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4aGl2MTZxaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3MxNl9zMzIgKGludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4aGl2NHNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczE2X3M2NCAoaW50NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djhoaXYyZGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9zMTZfZjMyIChmbG9hdDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4aGl2NHNmIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczE2X3U4ICh1aW50OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djhoaXYxNnFpICgoaW50OHgxNl90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczE2X3UxNiAodWludDE2eDhfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4aGl2OGhpICgoaW50MTZ4OF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczE2X3UzMiAodWludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4aGl2NHNpICgoaW50MzJ4NF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczE2X3U2NCAodWludDY0eDJfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4aGl2MmRpICgoaW50NjR4Ml90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczE2X3A4IChwb2x5OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djhoaXYxNnFpICgoaW50OHgxNl90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczE2X3AxNiAocG9seTE2eDhfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4aGl2OGhpICgoaW50MTZ4OF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9zMzJfczggKGludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJzaXY4cWkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3MzMl9zMTYgKGludDE2eDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHYyc2l2NGhpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9zMzJfczY0IChpbnQ2NHgxX3QgX19hKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MnNpZGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3MzMl9mMzIgKGZsb2F0MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJzaXYyc2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3MzMl91OCAodWludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJzaXY4cWkgKChpbnQ4eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczMyX3UxNiAodWludDE2eDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHYyc2l2NGhpICgoaW50MTZ4NF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9zMzJfdTMyICh1aW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJzaXYyc2kgKChpbnQzMngyX3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3MzMl91NjQgKHVpbnQ2NHgxX3QgX19hKQoreworICByZXR1cm4gKGludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MnNpZGkgKChpbnQ2NHgxX3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3MzMl9wOCAocG9seTh4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJzaXY4cWkgKChpbnQ4eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczMyX3AxNiAocG9seTE2eDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHYyc2l2NGhpICgoaW50MTZ4NF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczMyX3M4IChpbnQ4eDE2X3QgX19hKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NHNpdjE2cWkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9zMzJfczE2IChpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NHNpdjhoaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3MzMl9zNjQgKGludDY0eDJfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY0c2l2MmRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczMyX2YzMiAoZmxvYXQzMng0X3QgX19hKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NHNpdjRzZiAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3MzMl91OCAodWludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY0c2l2MTZxaSAoKGludDh4MTZfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3MzMl91MTYgKHVpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NHNpdjhoaSAoKGludDE2eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3MzMl91MzIgKHVpbnQzMng0X3QgX19hKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NHNpdjRzaSAoKGludDMyeDRfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3MzMl91NjQgKHVpbnQ2NHgyX3QgX19hKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NHNpdjJkaSAoKGludDY0eDJfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3MzMl9wOCAocG9seTh4MTZfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY0c2l2MTZxaSAoKGludDh4MTZfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3MzMl9wMTYgKHBvbHkxNng4X3QgX19hKQoreworICByZXR1cm4gKGludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NHNpdjhoaSAoKGludDE2eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfdThfczggKGludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djhxaXY4cWkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3U4X3MxNiAoaW50MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djhxaXY0aGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3U4X3MzMiAoaW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djhxaXYyc2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3U4X3M2NCAoaW50NjR4MV90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djhxaWRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91OF9mMzIgKGZsb2F0MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djhxaXYyc2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3U4X3UxNiAodWludDE2eDRfdCBfX2EpCit7CisgIHJldHVybiAodWludDh4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4cWl2NGhpICgoaW50MTZ4NF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91OF91MzIgKHVpbnQzMngyX3QgX19hKQoreworICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2OHFpdjJzaSAoKGludDMyeDJfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfdThfdTY0ICh1aW50NjR4MV90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djhxaWRpICgoaW50NjR4MV90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91OF9wOCAocG9seTh4OF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djhxaXY4cWkgKChpbnQ4eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfdThfcDE2IChwb2x5MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djhxaXY0aGkgKChpbnQxNng0X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdThfczggKGludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MTZxaXYxNnFpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3U4X3MxNiAoaW50MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHYxNnFpdjhoaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV91OF9zMzIgKGludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MTZxaXY0c2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdThfczY0IChpbnQ2NHgyX3QgX19hKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djE2cWl2MmRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3U4X2YzMiAoZmxvYXQzMng0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djE2cWl2NHNmIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3U4X3UxNiAodWludDE2eDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MTZxaXY4aGkgKChpbnQxNng4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdThfdTMyICh1aW50MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHYxNnFpdjRzaSAoKGludDMyeDRfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV91OF91NjQgKHVpbnQ2NHgyX3QgX19hKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djE2cWl2MmRpICgoaW50NjR4Ml90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3U4X3A4IChwb2x5OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHYxNnFpdjE2cWkgKChpbnQ4eDE2X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdThfcDE2IChwb2x5MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHYxNnFpdjhoaSAoKGludDE2eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3UxNl9zOCAoaW50OHg4X3QgX19hKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djRoaXY4cWkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91MTZfczE2IChpbnQxNng0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djRoaXY0aGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91MTZfczMyIChpbnQzMngyX3QgX19hKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djRoaXYyc2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91MTZfczY0IChpbnQ2NHgxX3QgX19hKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djRoaWRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfdTE2X2YzMiAoZmxvYXQzMngyX3QgX19hKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djRoaXYyc2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91MTZfdTggKHVpbnQ4eDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NGhpdjhxaSAoKGludDh4OF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfdTE2X3UzMiAodWludDMyeDJfdCBfX2EpCit7CisgIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NGhpdjJzaSAoKGludDMyeDJfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3UxNl91NjQgKHVpbnQ2NHgxX3QgX19hKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djRoaWRpICgoaW50NjR4MV90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfdTE2X3A4IChwb2x5OHg4X3QgX19hKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djRoaXY4cWkgKChpbnQ4eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3UxNl9wMTYgKHBvbHkxNng0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djRoaXY0aGkgKChpbnQxNng0X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdTE2X3M4IChpbnQ4eDE2X3QgX19hKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djhoaXYxNnFpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3UxNl9zMTYgKGludDE2eDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2OGhpdjhoaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV91MTZfczMyIChpbnQzMng0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djhoaXY0c2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdTE2X3M2NCAoaW50NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4aGl2MmRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3UxNl9mMzIgKGZsb2F0MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4aGl2NHNmIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3UxNl91OCAodWludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiAodWludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2OGhpdjE2cWkgKChpbnQ4eDE2X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdTE2X3UzMiAodWludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAodWludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2OGhpdjRzaSAoKGludDMyeDRfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV91MTZfdTY0ICh1aW50NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY4aGl2MmRpICgoaW50NjR4Ml90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3UxNl9wOCAocG9seTh4MTZfdCBfX2EpCit7CisgIHJldHVybiAodWludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2OGhpdjE2cWkgKChpbnQ4eDE2X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdTE2X3AxNiAocG9seTE2eDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2OGhpdjhoaSAoKGludDE2eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3UzMl9zOCAoaW50OHg4X3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJzaXY4cWkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91MzJfczE2IChpbnQxNng0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJzaXY0aGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91MzJfczMyIChpbnQzMngyX3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJzaXYyc2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91MzJfczY0IChpbnQ2NHgxX3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJzaWRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfdTMyX2YzMiAoZmxvYXQzMngyX3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJzaXYyc2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91MzJfdTggKHVpbnQ4eDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MnNpdjhxaSAoKGludDh4OF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfdTMyX3UxNiAodWludDE2eDRfdCBfX2EpCit7CisgIHJldHVybiAodWludDMyeDJfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2MnNpdjRoaSAoKGludDE2eDRfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3UzMl91NjQgKHVpbnQ2NHgxX3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJzaWRpICgoaW50NjR4MV90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfdTMyX3A4IChwb2x5OHg4X3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJzaXY4cWkgKChpbnQ4eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3UzMl9wMTYgKHBvbHkxNng0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djJzaXY0aGkgKChpbnQxNng0X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdTMyX3M4IChpbnQ4eDE2X3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djRzaXYxNnFpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3UzMl9zMTYgKGludDE2eDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NHNpdjhoaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV91MzJfczMyIChpbnQzMng0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpX19idWlsdGluX25lb25fdnJlaW50ZXJwcmV0djRzaXY0c2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdTMyX3M2NCAoaW50NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY0c2l2MmRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3UzMl9mMzIgKGZsb2F0MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY0c2l2NHNmIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3UzMl91OCAodWludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NHNpdjE2cWkgKChpbnQ4eDE2X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdTMyX3UxNiAodWludDE2eDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NHNpdjhoaSAoKGludDE2eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV91MzJfdTY0ICh1aW50NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZyZWludGVycHJldHY0c2l2MmRpICgoaW50NjR4Ml90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3UzMl9wOCAocG9seTh4MTZfdCBfX2EpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NHNpdjE2cWkgKChpbnQ4eDE2X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdTMyX3AxNiAocG9seTE2eDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92cmVpbnRlcnByZXR2NHNpdjhoaSAoKGludDE2eDhfdCkgX19hKTsKK30KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5jbHVkZS9mbG9hdC5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luY2x1ZGUvZmxvYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTY5ZjFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luY2x1ZGUvZmxvYXQuaApAQCAtMCwwICsxLDIzOCBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1VuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCithIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKgorICogSVNPIEMgU3RhbmRhcmQ6ICA1LjIuNC4yLjIgIENoYXJhY3RlcmlzdGljcyBvZiBmbG9hdGluZyB0eXBlcyA8ZmxvYXQuaD4KKyAqLworCisjaWZuZGVmIF9GTE9BVF9IX19fCisjZGVmaW5lIF9GTE9BVF9IX19fCisKKy8qIFJhZGl4IG9mIGV4cG9uZW50IHJlcHJlc2VudGF0aW9uLCBiLiAqLworI3VuZGVmIEZMVF9SQURJWAorI2RlZmluZSBGTFRfUkFESVgJX19GTFRfUkFESVhfXworCisvKiBOdW1iZXIgb2YgYmFzZS1GTFRfUkFESVggZGlnaXRzIGluIHRoZSBzaWduaWZpY2FuZCwgcC4gICovCisjdW5kZWYgRkxUX01BTlRfRElHCisjdW5kZWYgREJMX01BTlRfRElHCisjdW5kZWYgTERCTF9NQU5UX0RJRworI2RlZmluZSBGTFRfTUFOVF9ESUcJX19GTFRfTUFOVF9ESUdfXworI2RlZmluZSBEQkxfTUFOVF9ESUcJX19EQkxfTUFOVF9ESUdfXworI2RlZmluZSBMREJMX01BTlRfRElHCV9fTERCTF9NQU5UX0RJR19fCisKKy8qIE51bWJlciBvZiBkZWNpbWFsIGRpZ2l0cywgcSwgc3VjaCB0aGF0IGFueSBmbG9hdGluZy1wb2ludCBudW1iZXIgd2l0aCBxCisgICBkZWNpbWFsIGRpZ2l0cyBjYW4gYmUgcm91bmRlZCBpbnRvIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIHdpdGggcCByYWRpeCBiCisgICBkaWdpdHMgYW5kIGJhY2sgYWdhaW4gd2l0aG91dCBjaGFuZ2UgdG8gdGhlIHEgZGVjaW1hbCBkaWdpdHMsCisKKwlwICogbG9nMTAoYikJCQlpZiBiIGlzIGEgcG93ZXIgb2YgMTAKKwlmbG9vcigocCAtIDEpICogbG9nMTAoYikpCW90aGVyd2lzZQorKi8KKyN1bmRlZiBGTFRfRElHCisjdW5kZWYgREJMX0RJRworI3VuZGVmIExEQkxfRElHCisjZGVmaW5lIEZMVF9ESUcJCV9fRkxUX0RJR19fCisjZGVmaW5lIERCTF9ESUcJCV9fREJMX0RJR19fCisjZGVmaW5lIExEQkxfRElHCV9fTERCTF9ESUdfXworCisvKiBNaW5pbXVtIGludCB4IHN1Y2ggdGhhdCBGTFRfUkFESVgqKih4LTEpIGlzIGEgbm9ybWFsaXplZCBmbG9hdCwgZW1pbiAqLworI3VuZGVmIEZMVF9NSU5fRVhQCisjdW5kZWYgREJMX01JTl9FWFAKKyN1bmRlZiBMREJMX01JTl9FWFAKKyNkZWZpbmUgRkxUX01JTl9FWFAJX19GTFRfTUlOX0VYUF9fCisjZGVmaW5lIERCTF9NSU5fRVhQCV9fREJMX01JTl9FWFBfXworI2RlZmluZSBMREJMX01JTl9FWFAJX19MREJMX01JTl9FWFBfXworCisvKiBNaW5pbXVtIG5lZ2F0aXZlIGludGVnZXIgc3VjaCB0aGF0IDEwIHJhaXNlZCB0byB0aGF0IHBvd2VyIGlzIGluIHRoZQorICAgcmFuZ2Ugb2Ygbm9ybWFsaXplZCBmbG9hdGluZy1wb2ludCBudW1iZXJzLAorCisJY2VpbChsb2cxMChiKSAqIChlbWluIC0gMSkpCisqLworI3VuZGVmIEZMVF9NSU5fMTBfRVhQCisjdW5kZWYgREJMX01JTl8xMF9FWFAKKyN1bmRlZiBMREJMX01JTl8xMF9FWFAKKyNkZWZpbmUgRkxUX01JTl8xMF9FWFAJX19GTFRfTUlOXzEwX0VYUF9fCisjZGVmaW5lIERCTF9NSU5fMTBfRVhQCV9fREJMX01JTl8xMF9FWFBfXworI2RlZmluZSBMREJMX01JTl8xMF9FWFAJX19MREJMX01JTl8xMF9FWFBfXworCisvKiBNYXhpbXVtIGludCB4IHN1Y2ggdGhhdCBGTFRfUkFESVgqKih4LTEpIGlzIGEgcmVwcmVzZW50YWJsZSBmbG9hdCwgZW1heC4gICovCisjdW5kZWYgRkxUX01BWF9FWFAKKyN1bmRlZiBEQkxfTUFYX0VYUAorI3VuZGVmIExEQkxfTUFYX0VYUAorI2RlZmluZSBGTFRfTUFYX0VYUAlfX0ZMVF9NQVhfRVhQX18KKyNkZWZpbmUgREJMX01BWF9FWFAJX19EQkxfTUFYX0VYUF9fCisjZGVmaW5lIExEQkxfTUFYX0VYUAlfX0xEQkxfTUFYX0VYUF9fCisKKy8qIE1heGltdW0gaW50ZWdlciBzdWNoIHRoYXQgMTAgcmFpc2VkIHRvIHRoYXQgcG93ZXIgaXMgaW4gdGhlIHJhbmdlIG9mCisgICByZXByZXNlbnRhYmxlIGZpbml0ZSBmbG9hdGluZy1wb2ludCBudW1iZXJzLAorCisJZmxvb3IobG9nMTAoKDEgLSBiKiotcCkgKiBiKiplbWF4KSkKKyovCisjdW5kZWYgRkxUX01BWF8xMF9FWFAKKyN1bmRlZiBEQkxfTUFYXzEwX0VYUAorI3VuZGVmIExEQkxfTUFYXzEwX0VYUAorI2RlZmluZSBGTFRfTUFYXzEwX0VYUAlfX0ZMVF9NQVhfMTBfRVhQX18KKyNkZWZpbmUgREJMX01BWF8xMF9FWFAJX19EQkxfTUFYXzEwX0VYUF9fCisjZGVmaW5lIExEQkxfTUFYXzEwX0VYUAlfX0xEQkxfTUFYXzEwX0VYUF9fCisKKy8qIE1heGltdW0gcmVwcmVzZW50YWJsZSBmaW5pdGUgZmxvYXRpbmctcG9pbnQgbnVtYmVyLAorCisJKDEgLSBiKiotcCkgKiBiKiplbWF4CisqLworI3VuZGVmIEZMVF9NQVgKKyN1bmRlZiBEQkxfTUFYCisjdW5kZWYgTERCTF9NQVgKKyNkZWZpbmUgRkxUX01BWAkJX19GTFRfTUFYX18KKyNkZWZpbmUgREJMX01BWAkJX19EQkxfTUFYX18KKyNkZWZpbmUgTERCTF9NQVgJX19MREJMX01BWF9fCisKKy8qIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gMSBhbmQgdGhlIGxlYXN0IHZhbHVlIGdyZWF0ZXIgdGhhbiAxIHRoYXQgaXMKKyAgIHJlcHJlc2VudGFibGUgaW4gdGhlIGdpdmVuIGZsb2F0aW5nIHBvaW50IHR5cGUsIGIqKjEtcC4gICovCisjdW5kZWYgRkxUX0VQU0lMT04KKyN1bmRlZiBEQkxfRVBTSUxPTgorI3VuZGVmIExEQkxfRVBTSUxPTgorI2RlZmluZSBGTFRfRVBTSUxPTglfX0ZMVF9FUFNJTE9OX18KKyNkZWZpbmUgREJMX0VQU0lMT04JX19EQkxfRVBTSUxPTl9fCisjZGVmaW5lIExEQkxfRVBTSUxPTglfX0xEQkxfRVBTSUxPTl9fCisKKy8qIE1pbmltdW0gbm9ybWFsaXplZCBwb3NpdGl2ZSBmbG9hdGluZy1wb2ludCBudW1iZXIsIGIqKihlbWluIC0gMSkuICAqLworI3VuZGVmIEZMVF9NSU4KKyN1bmRlZiBEQkxfTUlOCisjdW5kZWYgTERCTF9NSU4KKyNkZWZpbmUgRkxUX01JTgkJX19GTFRfTUlOX18KKyNkZWZpbmUgREJMX01JTgkJX19EQkxfTUlOX18KKyNkZWZpbmUgTERCTF9NSU4JX19MREJMX01JTl9fCisKKy8qIEFkZGl0aW9uIHJvdW5kcyB0byAwOiB6ZXJvLCAxOiBuZWFyZXN0LCAyOiAraW5mLCAzOiAtaW5mLCAtMTogdW5rbm93bi4gICovCisvKiA/Pz8gVGhpcyBpcyBzdXBwb3NlZCB0byBjaGFuZ2Ugd2l0aCBjYWxscyB0byBmZXNldHJvdW5kIGluIDxmZW52Lmg+LiAgKi8KKyN1bmRlZiBGTFRfUk9VTkRTCisjZGVmaW5lIEZMVF9ST1VORFMgMQorCisjaWYgZGVmaW5lZCAoX19TVERDX1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCisvKiBUaGUgZmxvYXRpbmctcG9pbnQgZXhwcmVzc2lvbiBldmFsdWF0aW9uIG1ldGhvZC4KKyAgICAgICAgLTEgIGluZGV0ZXJtaW5hdGUKKyAgICAgICAgIDAgIGV2YWx1YXRlIGFsbCBvcGVyYXRpb25zIGFuZCBjb25zdGFudHMganVzdCB0byB0aGUgcmFuZ2UgYW5kCisgICAgICAgICAgICBwcmVjaXNpb24gb2YgdGhlIHR5cGUKKyAgICAgICAgIDEgIGV2YWx1YXRlIG9wZXJhdGlvbnMgYW5kIGNvbnN0YW50cyBvZiB0eXBlIGZsb2F0IGFuZCBkb3VibGUKKyAgICAgICAgICAgIHRvIHRoZSByYW5nZSBhbmQgcHJlY2lzaW9uIG9mIHRoZSBkb3VibGUgdHlwZSwgZXZhbHVhdGUKKyAgICAgICAgICAgIGxvbmcgZG91YmxlIG9wZXJhdGlvbnMgYW5kIGNvbnN0YW50cyB0byB0aGUgcmFuZ2UgYW5kCisgICAgICAgICAgICBwcmVjaXNpb24gb2YgdGhlIGxvbmcgZG91YmxlIHR5cGUKKyAgICAgICAgIDIgIGV2YWx1YXRlIGFsbCBvcGVyYXRpb25zIGFuZCBjb25zdGFudHMgdG8gdGhlIHJhbmdlIGFuZAorICAgICAgICAgICAgcHJlY2lzaW9uIG9mIHRoZSBsb25nIGRvdWJsZSB0eXBlCisKKyAgID8/PyBUaGlzIG91Z2h0IHRvIGNoYW5nZSB3aXRoIHRoZSBzZXR0aW5nIG9mIHRoZSBmcCBjb250cm9sIHdvcmQ7CisgICB0aGUgdmFsdWUgcHJvdmlkZWQgYnkgdGhlIGNvbXBpbGVyIGFzc3VtZXMgdGhlIHdpZGVzdCBzZXR0aW5nLiAgKi8KKyN1bmRlZiBGTFRfRVZBTF9NRVRIT0QKKyNkZWZpbmUgRkxUX0VWQUxfTUVUSE9ECV9fRkxUX0VWQUxfTUVUSE9EX18KKworLyogTnVtYmVyIG9mIGRlY2ltYWwgZGlnaXRzLCBuLCBzdWNoIHRoYXQgYW55IGZsb2F0aW5nLXBvaW50IG51bWJlciBpbiB0aGUKKyAgIHdpZGVzdCBzdXBwb3J0ZWQgZmxvYXRpbmcgdHlwZSB3aXRoIHBtYXggcmFkaXggYiBkaWdpdHMgY2FuIGJlIHJvdW5kZWQKKyAgIHRvIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIHdpdGggbiBkZWNpbWFsIGRpZ2l0cyBhbmQgYmFjayBhZ2FpbiB3aXRob3V0CisgICBjaGFuZ2UgdG8gdGhlIHZhbHVlLAorCisJcG1heCAqIGxvZzEwKGIpCQkJaWYgYiBpcyBhIHBvd2VyIG9mIDEwCisJY2VpbCgxICsgcG1heCAqIGxvZzEwKGIpKQlvdGhlcndpc2UKKyovCisjdW5kZWYgREVDSU1BTF9ESUcKKyNkZWZpbmUgREVDSU1BTF9ESUcJX19ERUNJTUFMX0RJR19fCisKKyNlbmRpZiAvKiBDOTkgKi8KKworI2lmZGVmIF9fU1REQ19XQU5UX0RFQ19GUF9fCisvKiBEcmFmdCBUZWNobmljYWwgUmVwb3J0IDI0NzMyLCBleHRlbnNpb24gZm9yIGRlY2ltYWwgZmxvYXRpbmctcG9pbnQKKyAgIGFyaXRobWV0aWM6IENoYXJhY3RlcmlzdGljIG9mIGRlY2ltYWwgZmxvYXRpbmcgdHlwZXMgPGZsb2F0Lmg+LiAgKi8KKworLyogTnVtYmVyIG9mIGJhc2UtRkxUX1JBRElYIGRpZ2l0cyBpbiB0aGUgc2lnbmlmaWNhbmQsIHAuICAqLworI3VuZGVmIERFQzMyX01BTlRfRElHCisjdW5kZWYgREVDNjRfTUFOVF9ESUcKKyN1bmRlZiBERUMxMjhfTUFOVF9ESUcKKyNkZWZpbmUgREVDMzJfTUFOVF9ESUcJX19ERUMzMl9NQU5UX0RJR19fCisjZGVmaW5lIERFQzY0X01BTlRfRElHCV9fREVDNjRfTUFOVF9ESUdfXworI2RlZmluZSBERUMxMjhfTUFOVF9ESUcJX19ERUMxMjhfTUFOVF9ESUdfXworCisvKiBNaW5pbXVtIGV4cG9uZW50LiAqLworI3VuZGVmIERFQzMyX01JTl9FWFAKKyN1bmRlZiBERUM2NF9NSU5fRVhQCisjdW5kZWYgREVDMTI4X01JTl9FWFAKKyNkZWZpbmUgREVDMzJfTUlOX0VYUAlfX0RFQzMyX01JTl9FWFBfXworI2RlZmluZSBERUM2NF9NSU5fRVhQCV9fREVDNjRfTUlOX0VYUF9fCisjZGVmaW5lIERFQzEyOF9NSU5fRVhQCV9fREVDMTI4X01JTl9FWFBfXworCisvKiBNYXhpbXVtIGV4cG9uZW50LiAqLworI3VuZGVmIERFQzMyX01BWF9FWFAKKyN1bmRlZiBERUM2NF9NQVhfRVhQCisjdW5kZWYgREVDMTI4X01BWF9FWFAKKyNkZWZpbmUgREVDMzJfTUFYX0VYUAlfX0RFQzMyX01BWF9FWFBfXworI2RlZmluZSBERUM2NF9NQVhfRVhQCV9fREVDNjRfTUFYX0VYUF9fCisjZGVmaW5lIERFQzEyOF9NQVhfRVhQCV9fREVDMTI4X01BWF9FWFBfXworCisvKiBNYXhpbXVtIHJlcHJlc2VudGFibGUgZmluaXRlIGRlY2ltYWwgZmxvYXRpbmctcG9pbnQgbnVtYmVyCisgICAodGhlcmUgYXJlIDYsIDE1LCBhbmQgMzMgOXMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnRzIHJlc3BlY3RpdmVseSkuICovCisjdW5kZWYgREVDMzJfTUFYCisjdW5kZWYgREVDNjRfTUFYCisjdW5kZWYgREVDMTI4X01BWAorI2RlZmluZSBERUMzMl9NQVggICBfX0RFQzMyX01BWF9fCisjZGVmaW5lIERFQzY0X01BWCAgIF9fREVDNjRfTUFYX18KKyNkZWZpbmUgREVDMTI4X01BWCAgX19ERUMxMjhfTUFYX18KKworLyogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAxIGFuZCB0aGUgbGVhc3QgdmFsdWUgZ3JlYXRlciB0aGFuIDEgdGhhdCBpcworICAgcmVwcmVzZW50YWJsZSBpbiB0aGUgZ2l2ZW4gZmxvYXRpbmcgcG9pbnQgdHlwZS4gKi8KKyN1bmRlZiBERUMzMl9FUFNJTE9OCisjdW5kZWYgREVDNjRfRVBTSUxPTgorI3VuZGVmIERFQzEyOF9FUFNJTE9OCisjZGVmaW5lIERFQzMyX0VQU0lMT04JX19ERUMzMl9FUFNJTE9OX18KKyNkZWZpbmUgREVDNjRfRVBTSUxPTglfX0RFQzY0X0VQU0lMT05fXworI2RlZmluZSBERUMxMjhfRVBTSUxPTglfX0RFQzEyOF9FUFNJTE9OX18KKworLyogTWluaW11bSBub3JtYWxpemVkIHBvc2l0aXZlIGZsb2F0aW5nLXBvaW50IG51bWJlci4gKi8KKyN1bmRlZiBERUMzMl9NSU4KKyN1bmRlZiBERUM2NF9NSU4KKyN1bmRlZiBERUMxMjhfTUlOCisjZGVmaW5lIERFQzMyX01JTglfX0RFQzMyX01JTl9fCisjZGVmaW5lIERFQzY0X01JTglfX0RFQzY0X01JTl9fCisjZGVmaW5lIERFQzEyOF9NSU4JX19ERUMxMjhfTUlOX18KKworLyogTWluaW11bSBzdWJub3JtYWwgcG9zaXRpdmUgZmxvYXRpbmctcG9pbnQgbnVtYmVyLiAqLworI3VuZGVmIERFQzMyX1NVQk5PUk1BTF9NSU4KKyN1bmRlZiBERUM2NF9TVUJOT1JNQUxfTUlOCisjdW5kZWYgREVDMTI4X1NVQk5PUk1BTF9NSU4KKyNkZWZpbmUgREVDMzJfU1VCTk9STUFMX01JTiAgICAgICBfX0RFQzMyX1NVQk5PUk1BTF9NSU5fXworI2RlZmluZSBERUM2NF9TVUJOT1JNQUxfTUlOICAgICAgIF9fREVDNjRfU1VCTk9STUFMX01JTl9fCisjZGVmaW5lIERFQzEyOF9TVUJOT1JNQUxfTUlOICAgICAgX19ERUMxMjhfU1VCTk9STUFMX01JTl9fCisKKy8qIFRoZSBmbG9hdGluZy1wb2ludCBleHByZXNzaW9uIGV2YWx1YXRpb24gbWV0aG9kLgorICAgICAgICAgLTEgIGluZGV0ZXJtaW5hdGUKKyAgICAgICAgIDAgIGV2YWx1YXRlIGFsbCBvcGVyYXRpb25zIGFuZCBjb25zdGFudHMganVzdCB0byB0aGUgcmFuZ2UgYW5kCisgICAgICAgICAgICBwcmVjaXNpb24gb2YgdGhlIHR5cGUKKyAgICAgICAgIDEgIGV2YWx1YXRlIG9wZXJhdGlvbnMgYW5kIGNvbnN0YW50cyBvZiB0eXBlIF9EZWNpbWFsMzIgCisJICAgIGFuZCBfRGVjaW1hbDY0IHRvIHRoZSByYW5nZSBhbmQgcHJlY2lzaW9uIG9mIHRoZSBfRGVjaW1hbDY0IAorICAgICAgICAgICAgdHlwZSwgZXZhbHVhdGUgX0RlY2ltYWwxMjggb3BlcmF0aW9ucyBhbmQgY29uc3RhbnRzIHRvIHRoZSAKKwkgICAgcmFuZ2UgYW5kIHByZWNpc2lvbiBvZiB0aGUgX0RlY2ltYWwxMjggdHlwZTsKKwkgMiAgZXZhbHVhdGUgYWxsIG9wZXJhdGlvbnMgYW5kIGNvbnN0YW50cyB0byB0aGUgcmFuZ2UgYW5kCisJICAgIHByZWNpc2lvbiBvZiB0aGUgX0RlY2ltYWwxMjggdHlwZS4gICovCisKKyN1bmRlZiBERUNfRVZBTF9NRVRIT0QKKyNkZWZpbmUgREVDX0VWQUxfTUVUSE9ECV9fREVDX0VWQUxfTUVUSE9EX18KKworI2VuZGlmIC8qIF9fU1REQ19XQU5UX0RFQ19GUF9fICovCisKKyNlbmRpZiAvKiBfRkxPQVRfSF9fXyAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luY2x1ZGUvaXNvNjQ2LmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5jbHVkZS9pc282NDYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGZmOWQxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luY2x1ZGUvaXNvNjQ2LmgKQEAgLTAsMCArMSw0NSBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk5LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1VuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCithIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKgorICogSVNPIEMgU3RhbmRhcmQ6ICA3LjkgIEFsdGVybmF0aXZlIHNwZWxsaW5ncyAgPGlzbzY0Ni5oPgorICovCisKKyNpZm5kZWYgX0lTTzY0Nl9ICisjZGVmaW5lIF9JU082NDZfSAorCisjaWZuZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIGFuZAkmJgorI2RlZmluZSBhbmRfZXEJJj0KKyNkZWZpbmUgYml0YW5kCSYKKyNkZWZpbmUgYml0b3IJfAorI2RlZmluZSBjb21wbAl+CisjZGVmaW5lIG5vdAkhCisjZGVmaW5lIG5vdF9lcQkhPQorI2RlZmluZSBvcgl8fAorI2RlZmluZSBvcl9lcQl8PQorI2RlZmluZSB4b3IJXgorI2RlZmluZSB4b3JfZXEJXj0KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9pbmNsdWRlL21taW50cmluLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5jbHVkZS9tbWludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYzUwMGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5jbHVkZS9tbWludHJpbi5oCkBAIC0wLDAgKzEsMTI1NCBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKKyAgIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIKKyAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorICAgcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorICAgMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisgICBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworICAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9NTUlOVFJJTl9IX0lOQ0xVREVECisjZGVmaW5lIF9NTUlOVFJJTl9IX0lOQ0xVREVECisKKy8qIFRoZSBkYXRhIHR5cGUgaW50ZW5kZWQgZm9yIHVzZXIgdXNlLiAgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9fbTY0LCBfX2ludDY0OworCisvKiBJbnRlcm5hbCBkYXRhIHR5cGVzIGZvciBpbXBsZW1lbnRpbmcgdGhlIGludHJpbnNpY3MuICAqLwordHlwZWRlZiBpbnQgX192MnNpIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAoOCkpKTsKK3R5cGVkZWYgc2hvcnQgX192NGhpIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAoOCkpKTsKK3R5cGVkZWYgY2hhciBfX3Y4cWkgX19hdHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplICg4KSkpOworCisvKiAiQ29udmVydCIgX19tNjQgYW5kIF9faW50NjQgaW50byBlYWNoIG90aGVyLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NCAKK19tbV9jdnRzaTY0X202NCAoX19pbnQ2NCBfX2kpCit7CisgIHJldHVybiBfX2k7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX2ludDY0CitfbW1fY3Z0bTY0X3NpNjQgKF9fbTY0IF9faSkKK3sKKyAgcmV0dXJuIF9faTsKK30KKworc3RhdGljIF9faW5saW5lIGludAorX21tX2N2dHNpNjRfc2kzMiAoX19pbnQ2NCBfX2kpCit7CisgIHJldHVybiBfX2k7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX2ludDY0CitfbW1fY3Z0c2kzMl9zaTY0IChpbnQgX19pKQoreworICByZXR1cm4gX19pOworfQorCisvKiBQYWNrIHRoZSBmb3VyIDE2LWJpdCB2YWx1ZXMgZnJvbSBNMSBpbnRvIHRoZSBsb3dlciBmb3VyIDgtYml0IHZhbHVlcyBvZgorICAgdGhlIHJlc3VsdCwgYW5kIHRoZSBmb3VyIDE2LWJpdCB2YWx1ZXMgZnJvbSBNMiBpbnRvIHRoZSB1cHBlciBmb3VyIDgtYml0CisgICB2YWx1ZXMgb2YgdGhlIHJlc3VsdCwgYWxsIHdpdGggc2lnbmVkIHNhdHVyYXRpb24uICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fcGFja3NfcGkxNiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93cGFja2hzcyAoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOworfQorCisvKiBQYWNrIHRoZSB0d28gMzItYml0IHZhbHVlcyBmcm9tIE0xIGluIHRvIHRoZSBsb3dlciB0d28gMTYtYml0IHZhbHVlcyBvZgorICAgdGhlIHJlc3VsdCwgYW5kIHRoZSB0d28gMzItYml0IHZhbHVlcyBmcm9tIE0yIGludG8gdGhlIHVwcGVyIHR3byAxNi1iaXQKKyAgIHZhbHVlcyBvZiB0aGUgcmVzdWx0LCBhbGwgd2l0aCBzaWduZWQgc2F0dXJhdGlvbi4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9wYWNrc19waTMyIChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dwYWNrd3NzICgoX192MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7Cit9CisKKy8qIENvcHkgdGhlIDY0LWJpdCB2YWx1ZSBmcm9tIE0xIGludG8gdGhlIGxvd2VyIDMyLWJpdHMgb2YgdGhlIHJlc3VsdCwgYW5kCisgICB0aGUgNjQtYml0IHZhbHVlIGZyb20gTTIgaW50byB0aGUgdXBwZXIgMzItYml0cyBvZiB0aGUgcmVzdWx0LCBhbGwgd2l0aAorICAgc2lnbmVkIHNhdHVyYXRpb24gZm9yIHZhbHVlcyB0aGF0IGRvIG5vdCBmaXQgZXhhY3RseSBpbnRvIDMyLWJpdHMuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fcGFja3NfcGk2NCAoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93cGFja2RzcyAoKGxvbmcgbG9uZylfX20xLCAobG9uZyBsb25nKV9fbTIpOworfQorCisvKiBQYWNrIHRoZSBmb3VyIDE2LWJpdCB2YWx1ZXMgZnJvbSBNMSBpbnRvIHRoZSBsb3dlciBmb3VyIDgtYml0IHZhbHVlcyBvZgorICAgdGhlIHJlc3VsdCwgYW5kIHRoZSBmb3VyIDE2LWJpdCB2YWx1ZXMgZnJvbSBNMiBpbnRvIHRoZSB1cHBlciBmb3VyIDgtYml0CisgICB2YWx1ZXMgb2YgdGhlIHJlc3VsdCwgYWxsIHdpdGggdW5zaWduZWQgc2F0dXJhdGlvbi4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9wYWNrc19wdTE2IChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dwYWNraHVzICgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cit9CisKKy8qIFBhY2sgdGhlIHR3byAzMi1iaXQgdmFsdWVzIGZyb20gTTEgaW50byB0aGUgbG93ZXIgdHdvIDE2LWJpdCB2YWx1ZXMgb2YKKyAgIHRoZSByZXN1bHQsIGFuZCB0aGUgdHdvIDMyLWJpdCB2YWx1ZXMgZnJvbSBNMiBpbnRvIHRoZSB1cHBlciB0d28gMTYtYml0CisgICB2YWx1ZXMgb2YgdGhlIHJlc3VsdCwgYWxsIHdpdGggdW5zaWduZWQgc2F0dXJhdGlvbi4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9wYWNrc19wdTMyIChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dwYWNrd3VzICgoX192MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7Cit9CisKKy8qIENvcHkgdGhlIDY0LWJpdCB2YWx1ZSBmcm9tIE0xIGludG8gdGhlIGxvd2VyIDMyLWJpdHMgb2YgdGhlIHJlc3VsdCwgYW5kCisgICB0aGUgNjQtYml0IHZhbHVlIGZyb20gTTIgaW50byB0aGUgdXBwZXIgMzItYml0cyBvZiB0aGUgcmVzdWx0LCBhbGwgd2l0aAorICAgdW5zaWduZWQgc2F0dXJhdGlvbiBmb3IgdmFsdWVzIHRoYXQgZG8gbm90IGZpdCBleGFjdGx5IGludG8gMzItYml0cy4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9wYWNrc19wdTY0IChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dwYWNrZHVzICgobG9uZyBsb25nKV9fbTEsIChsb25nIGxvbmcpX19tMik7Cit9CisKKy8qIEludGVybGVhdmUgdGhlIGZvdXIgOC1iaXQgdmFsdWVzIGZyb20gdGhlIGhpZ2ggaGFsZiBvZiBNMSB3aXRoIHRoZSBmb3VyCisgICA4LWJpdCB2YWx1ZXMgZnJvbSB0aGUgaGlnaCBoYWxmIG9mIE0yLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX3VucGFja2hpX3BpOCAoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93dW5wY2tpaGIgKChfX3Y4cWkpX19tMSwgKF9fdjhxaSlfX20yKTsKK30KKworLyogSW50ZXJsZWF2ZSB0aGUgdHdvIDE2LWJpdCB2YWx1ZXMgZnJvbSB0aGUgaGlnaCBoYWxmIG9mIE0xIHdpdGggdGhlIHR3bworICAgMTYtYml0IHZhbHVlcyBmcm9tIHRoZSBoaWdoIGhhbGYgb2YgTTIuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fdW5wYWNraGlfcGkxNiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93dW5wY2tpaGggKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworLyogSW50ZXJsZWF2ZSB0aGUgMzItYml0IHZhbHVlIGZyb20gdGhlIGhpZ2ggaGFsZiBvZiBNMSB3aXRoIHRoZSAzMi1iaXQKKyAgIHZhbHVlIGZyb20gdGhlIGhpZ2ggaGFsZiBvZiBNMi4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV91bnBhY2toaV9waTMyIChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3d1bnBja2lodyAoKF9fdjJzaSlfX20xLCAoX192MnNpKV9fbTIpOworfQorCisvKiBJbnRlcmxlYXZlIHRoZSBmb3VyIDgtYml0IHZhbHVlcyBmcm9tIHRoZSBsb3cgaGFsZiBvZiBNMSB3aXRoIHRoZSBmb3VyCisgICA4LWJpdCB2YWx1ZXMgZnJvbSB0aGUgbG93IGhhbGYgb2YgTTIuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fdW5wYWNrbG9fcGk4IChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3d1bnBja2lsYiAoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOworfQorCisvKiBJbnRlcmxlYXZlIHRoZSB0d28gMTYtYml0IHZhbHVlcyBmcm9tIHRoZSBsb3cgaGFsZiBvZiBNMSB3aXRoIHRoZSB0d28KKyAgIDE2LWJpdCB2YWx1ZXMgZnJvbSB0aGUgbG93IGhhbGYgb2YgTTIuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fdW5wYWNrbG9fcGkxNiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93dW5wY2tpbGggKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworLyogSW50ZXJsZWF2ZSB0aGUgMzItYml0IHZhbHVlIGZyb20gdGhlIGxvdyBoYWxmIG9mIE0xIHdpdGggdGhlIDMyLWJpdAorICAgdmFsdWUgZnJvbSB0aGUgbG93IGhhbGYgb2YgTTIuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fdW5wYWNrbG9fcGkzMiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93dW5wY2tpbHcgKChfX3Yyc2kpX19tMSwgKF9fdjJzaSlfX20yKTsKK30KKworLyogVGFrZSB0aGUgZm91ciA4LWJpdCB2YWx1ZXMgZnJvbSB0aGUgbG93IGhhbGYgb2YgTTEsIHNpZ24gZXh0ZW5kIHRoZW0sCisgICBhbmQgcmV0dXJuIHRoZSByZXN1bHQgYXMgYSB2ZWN0b3Igb2YgZm91ciAxNi1iaXQgcXVhbnRpdGllcy4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV91bnBhY2tlbF9waTggKF9fbTY0IF9fbTEpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd3VucGNrZWxzYiAoKF9fdjhxaSlfX20xKTsKK30KKworLyogVGFrZSB0aGUgdHdvIDE2LWJpdCB2YWx1ZXMgZnJvbSB0aGUgbG93IGhhbGYgb2YgTTEsIHNpZ24gZXh0ZW5kIHRoZW0sCisgICBhbmQgcmV0dXJuIHRoZSByZXN1bHQgYXMgYSB2ZWN0b3Igb2YgdHdvIDMyLWJpdCBxdWFudGl0aWVzLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX3VucGFja2VsX3BpMTYgKF9fbTY0IF9fbTEpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd3VucGNrZWxzaCAoKF9fdjRoaSlfX20xKTsKK30KKworLyogVGFrZSB0aGUgMzItYml0IHZhbHVlIGZyb20gdGhlIGxvdyBoYWxmIG9mIE0xLCBhbmQgcmV0dXJuIGl0IHNpZ24gZXh0ZW5kZWQKKyAgdG8gNjQgYml0cy4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV91bnBhY2tlbF9waTMyIChfX202NCBfX20xKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3d1bnBja2Vsc3cgKChfX3Yyc2kpX19tMSk7Cit9CisKKy8qIFRha2UgdGhlIGZvdXIgOC1iaXQgdmFsdWVzIGZyb20gdGhlIGhpZ2ggaGFsZiBvZiBNMSwgc2lnbiBleHRlbmQgdGhlbSwKKyAgIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhIHZlY3RvciBvZiBmb3VyIDE2LWJpdCBxdWFudGl0aWVzLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX3VucGFja2VoX3BpOCAoX19tNjQgX19tMSkKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93dW5wY2tlaHNiICgoX192OHFpKV9fbTEpOworfQorCisvKiBUYWtlIHRoZSB0d28gMTYtYml0IHZhbHVlcyBmcm9tIHRoZSBoaWdoIGhhbGYgb2YgTTEsIHNpZ24gZXh0ZW5kIHRoZW0sCisgICBhbmQgcmV0dXJuIHRoZSByZXN1bHQgYXMgYSB2ZWN0b3Igb2YgdHdvIDMyLWJpdCBxdWFudGl0aWVzLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX3VucGFja2VoX3BpMTYgKF9fbTY0IF9fbTEpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd3VucGNrZWhzaCAoKF9fdjRoaSlfX20xKTsKK30KKworLyogVGFrZSB0aGUgMzItYml0IHZhbHVlIGZyb20gdGhlIGhpZ2ggaGFsZiBvZiBNMSwgYW5kIHJldHVybiBpdCBzaWduIGV4dGVuZGVkCisgIHRvIDY0IGJpdHMuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fdW5wYWNrZWhfcGkzMiAoX19tNjQgX19tMSkKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93dW5wY2tlaHN3ICgoX192MnNpKV9fbTEpOworfQorCisvKiBUYWtlIHRoZSBmb3VyIDgtYml0IHZhbHVlcyBmcm9tIHRoZSBsb3cgaGFsZiBvZiBNMSwgemVybyBleHRlbmQgdGhlbSwKKyAgIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhIHZlY3RvciBvZiBmb3VyIDE2LWJpdCBxdWFudGl0aWVzLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX3VucGFja2VsX3B1OCAoX19tNjQgX19tMSkKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93dW5wY2tlbHViICgoX192OHFpKV9fbTEpOworfQorCisvKiBUYWtlIHRoZSB0d28gMTYtYml0IHZhbHVlcyBmcm9tIHRoZSBsb3cgaGFsZiBvZiBNMSwgemVybyBleHRlbmQgdGhlbSwKKyAgIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhIHZlY3RvciBvZiB0d28gMzItYml0IHF1YW50aXRpZXMuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fdW5wYWNrZWxfcHUxNiAoX19tNjQgX19tMSkKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93dW5wY2tlbHVoICgoX192NGhpKV9fbTEpOworfQorCisvKiBUYWtlIHRoZSAzMi1iaXQgdmFsdWUgZnJvbSB0aGUgbG93IGhhbGYgb2YgTTEsIGFuZCByZXR1cm4gaXQgemVybyBleHRlbmRlZAorICB0byA2NCBiaXRzLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX3VucGFja2VsX3B1MzIgKF9fbTY0IF9fbTEpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd3VucGNrZWx1dyAoKF9fdjJzaSlfX20xKTsKK30KKworLyogVGFrZSB0aGUgZm91ciA4LWJpdCB2YWx1ZXMgZnJvbSB0aGUgaGlnaCBoYWxmIG9mIE0xLCB6ZXJvIGV4dGVuZCB0aGVtLAorICAgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIGEgdmVjdG9yIG9mIGZvdXIgMTYtYml0IHF1YW50aXRpZXMuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fdW5wYWNrZWhfcHU4IChfX202NCBfX20xKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3d1bnBja2VodWIgKChfX3Y4cWkpX19tMSk7Cit9CisKKy8qIFRha2UgdGhlIHR3byAxNi1iaXQgdmFsdWVzIGZyb20gdGhlIGhpZ2ggaGFsZiBvZiBNMSwgemVybyBleHRlbmQgdGhlbSwKKyAgIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhIHZlY3RvciBvZiB0d28gMzItYml0IHF1YW50aXRpZXMuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fdW5wYWNrZWhfcHUxNiAoX19tNjQgX19tMSkKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93dW5wY2tlaHVoICgoX192NGhpKV9fbTEpOworfQorCisvKiBUYWtlIHRoZSAzMi1iaXQgdmFsdWUgZnJvbSB0aGUgaGlnaCBoYWxmIG9mIE0xLCBhbmQgcmV0dXJuIGl0IHplcm8gZXh0ZW5kZWQKKyAgdG8gNjQgYml0cy4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV91bnBhY2tlaF9wdTMyIChfX202NCBfX20xKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3d1bnBja2VodXcgKChfX3Yyc2kpX19tMSk7Cit9CisKKy8qIEFkZCB0aGUgOC1iaXQgdmFsdWVzIGluIE0xIHRvIHRoZSA4LWJpdCB2YWx1ZXMgaW4gTTIuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fYWRkX3BpOCAoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93YWRkYiAoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOworfQorCisvKiBBZGQgdGhlIDE2LWJpdCB2YWx1ZXMgaW4gTTEgdG8gdGhlIDE2LWJpdCB2YWx1ZXMgaW4gTTIuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fYWRkX3BpMTYgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd2FkZGggKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworLyogQWRkIHRoZSAzMi1iaXQgdmFsdWVzIGluIE0xIHRvIHRoZSAzMi1iaXQgdmFsdWVzIGluIE0yLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX2FkZF9waTMyIChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dhZGR3ICgoX192MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7Cit9CisKKy8qIEFkZCB0aGUgOC1iaXQgdmFsdWVzIGluIE0xIHRvIHRoZSA4LWJpdCB2YWx1ZXMgaW4gTTIgdXNpbmcgc2lnbmVkCisgICBzYXR1cmF0ZWQgYXJpdGhtZXRpYy4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9hZGRzX3BpOCAoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93YWRkYnNzICgoX192OHFpKV9fbTEsIChfX3Y4cWkpX19tMik7Cit9CisKKy8qIEFkZCB0aGUgMTYtYml0IHZhbHVlcyBpbiBNMSB0byB0aGUgMTYtYml0IHZhbHVlcyBpbiBNMiB1c2luZyBzaWduZWQKKyAgIHNhdHVyYXRlZCBhcml0aG1ldGljLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX2FkZHNfcGkxNiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93YWRkaHNzICgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cit9CisKKy8qIEFkZCB0aGUgMzItYml0IHZhbHVlcyBpbiBNMSB0byB0aGUgMzItYml0IHZhbHVlcyBpbiBNMiB1c2luZyBzaWduZWQKKyAgIHNhdHVyYXRlZCBhcml0aG1ldGljLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX2FkZHNfcGkzMiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93YWRkd3NzICgoX192MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7Cit9CisKKy8qIEFkZCB0aGUgOC1iaXQgdmFsdWVzIGluIE0xIHRvIHRoZSA4LWJpdCB2YWx1ZXMgaW4gTTIgdXNpbmcgdW5zaWduZWQKKyAgIHNhdHVyYXRlZCBhcml0aG1ldGljLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX2FkZHNfcHU4IChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dhZGRidXMgKChfX3Y4cWkpX19tMSwgKF9fdjhxaSlfX20yKTsKK30KKworLyogQWRkIHRoZSAxNi1iaXQgdmFsdWVzIGluIE0xIHRvIHRoZSAxNi1iaXQgdmFsdWVzIGluIE0yIHVzaW5nIHVuc2lnbmVkCisgICBzYXR1cmF0ZWQgYXJpdGhtZXRpYy4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9hZGRzX3B1MTYgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd2FkZGh1cyAoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOworfQorCisvKiBBZGQgdGhlIDMyLWJpdCB2YWx1ZXMgaW4gTTEgdG8gdGhlIDMyLWJpdCB2YWx1ZXMgaW4gTTIgdXNpbmcgdW5zaWduZWQKKyAgIHNhdHVyYXRlZCBhcml0aG1ldGljLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX2FkZHNfcHUzMiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93YWRkd3VzICgoX192MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7Cit9CisKKy8qIFN1YnRyYWN0IHRoZSA4LWJpdCB2YWx1ZXMgaW4gTTIgZnJvbSB0aGUgOC1iaXQgdmFsdWVzIGluIE0xLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX3N1Yl9waTggKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd3N1YmIgKChfX3Y4cWkpX19tMSwgKF9fdjhxaSlfX20yKTsKK30KKworLyogU3VidHJhY3QgdGhlIDE2LWJpdCB2YWx1ZXMgaW4gTTIgZnJvbSB0aGUgMTYtYml0IHZhbHVlcyBpbiBNMS4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9zdWJfcGkxNiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93c3ViaCAoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOworfQorCisvKiBTdWJ0cmFjdCB0aGUgMzItYml0IHZhbHVlcyBpbiBNMiBmcm9tIHRoZSAzMi1iaXQgdmFsdWVzIGluIE0xLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX3N1Yl9waTMyIChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dzdWJ3ICgoX192MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7Cit9CisKKy8qIFN1YnRyYWN0IHRoZSA4LWJpdCB2YWx1ZXMgaW4gTTIgZnJvbSB0aGUgOC1iaXQgdmFsdWVzIGluIE0xIHVzaW5nIHNpZ25lZAorICAgc2F0dXJhdGluZyBhcml0aG1ldGljLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX3N1YnNfcGk4IChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dzdWJic3MgKChfX3Y4cWkpX19tMSwgKF9fdjhxaSlfX20yKTsKK30KKworLyogU3VidHJhY3QgdGhlIDE2LWJpdCB2YWx1ZXMgaW4gTTIgZnJvbSB0aGUgMTYtYml0IHZhbHVlcyBpbiBNMSB1c2luZworICAgc2lnbmVkIHNhdHVyYXRpbmcgYXJpdGhtZXRpYy4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9zdWJzX3BpMTYgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd3N1YmhzcyAoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOworfQorCisvKiBTdWJ0cmFjdCB0aGUgMzItYml0IHZhbHVlcyBpbiBNMiBmcm9tIHRoZSAzMi1iaXQgdmFsdWVzIGluIE0xIHVzaW5nCisgICBzaWduZWQgc2F0dXJhdGluZyBhcml0aG1ldGljLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX3N1YnNfcGkzMiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93c3Vid3NzICgoX192MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7Cit9CisKKy8qIFN1YnRyYWN0IHRoZSA4LWJpdCB2YWx1ZXMgaW4gTTIgZnJvbSB0aGUgOC1iaXQgdmFsdWVzIGluIE0xIHVzaW5nCisgICB1bnNpZ25lZCBzYXR1cmF0aW5nIGFyaXRobWV0aWMuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fc3Vic19wdTggKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd3N1YmJ1cyAoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOworfQorCisvKiBTdWJ0cmFjdCB0aGUgMTYtYml0IHZhbHVlcyBpbiBNMiBmcm9tIHRoZSAxNi1iaXQgdmFsdWVzIGluIE0xIHVzaW5nCisgICB1bnNpZ25lZCBzYXR1cmF0aW5nIGFyaXRobWV0aWMuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fc3Vic19wdTE2IChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dzdWJodXMgKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworLyogU3VidHJhY3QgdGhlIDMyLWJpdCB2YWx1ZXMgaW4gTTIgZnJvbSB0aGUgMzItYml0IHZhbHVlcyBpbiBNMSB1c2luZworICAgdW5zaWduZWQgc2F0dXJhdGluZyBhcml0aG1ldGljLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX3N1YnNfcHUzMiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93c3Vid3VzICgoX192MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7Cit9CisKKy8qIE11bHRpcGx5IGZvdXIgMTYtYml0IHZhbHVlcyBpbiBNMSBieSBmb3VyIDE2LWJpdCB2YWx1ZXMgaW4gTTIgcHJvZHVjaW5nCisgICBmb3VyIDMyLWJpdCBpbnRlcm1lZGlhdGUgcmVzdWx0cywgd2hpY2ggYXJlIHRoZW4gc3VtbWVkIGJ5IHBhaXJzIHRvCisgICBwcm9kdWNlIHR3byAzMi1iaXQgcmVzdWx0cy4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9tYWRkX3BpMTYgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd21hZGRzICgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cit9CisKKy8qIE11bHRpcGx5IGZvdXIgMTYtYml0IHZhbHVlcyBpbiBNMSBieSBmb3VyIDE2LWJpdCB2YWx1ZXMgaW4gTTIgcHJvZHVjaW5nCisgICBmb3VyIDMyLWJpdCBpbnRlcm1lZGlhdGUgcmVzdWx0cywgd2hpY2ggYXJlIHRoZW4gc3VtbWVkIGJ5IHBhaXJzIHRvCisgICBwcm9kdWNlIHR3byAzMi1iaXQgcmVzdWx0cy4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9tYWRkX3B1MTYgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd21hZGR1ICgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cit9CisKKy8qIE11bHRpcGx5IGZvdXIgc2lnbmVkIDE2LWJpdCB2YWx1ZXMgaW4gTTEgYnkgZm91ciBzaWduZWQgMTYtYml0IHZhbHVlcyBpbgorICAgTTIgYW5kIHByb2R1Y2UgdGhlIGhpZ2ggMTYgYml0cyBvZiB0aGUgMzItYml0IHJlc3VsdHMuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fbXVsaGlfcGkxNiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93bXVsc20gKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworLyogTXVsdGlwbHkgZm91ciBzaWduZWQgMTYtYml0IHZhbHVlcyBpbiBNMSBieSBmb3VyIHNpZ25lZCAxNi1iaXQgdmFsdWVzIGluCisgICBNMiBhbmQgcHJvZHVjZSB0aGUgaGlnaCAxNiBiaXRzIG9mIHRoZSAzMi1iaXQgcmVzdWx0cy4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9tdWxoaV9wdTE2IChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dtdWx1bSAoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOworfQorCisvKiBNdWx0aXBseSBmb3VyIDE2LWJpdCB2YWx1ZXMgaW4gTTEgYnkgZm91ciAxNi1iaXQgdmFsdWVzIGluIE0yIGFuZCBwcm9kdWNlCisgICB0aGUgbG93IDE2IGJpdHMgb2YgdGhlIHJlc3VsdHMuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fbXVsbG9fcGkxNiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93bXVsdWwgKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworLyogU2hpZnQgZm91ciAxNi1iaXQgdmFsdWVzIGluIE0gbGVmdCBieSBDT1VOVC4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9zbGxfcGkxNiAoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dzbGxoICgoX192NGhpKV9fbSwgX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX3NsbGlfcGkxNiAoX19tNjQgX19tLCBpbnQgX19jb3VudCkKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93c2xsaGkgKChfX3Y0aGkpX19tLCBfX2NvdW50KTsKK30KKworLyogU2hpZnQgdHdvIDMyLWJpdCB2YWx1ZXMgaW4gTSBsZWZ0IGJ5IENPVU5ULiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX3NsbF9waTMyIChfX202NCBfX20sIF9fbTY0IF9fY291bnQpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd3NsbHcgKChfX3Yyc2kpX19tLCBfX2NvdW50KTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fc2xsaV9waTMyIChfX202NCBfX20sIGludCBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dzbGx3aSAoKF9fdjJzaSlfX20sIF9fY291bnQpOworfQorCisvKiBTaGlmdCB0aGUgNjQtYml0IHZhbHVlIGluIE0gbGVmdCBieSBDT1VOVC4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9zbGxfc2k2NCAoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dzbGxkIChfX20sIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9zbGxpX3NpNjQgKF9fbTY0IF9fbSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd3NsbGRpIChfX20sIF9fY291bnQpOworfQorCisvKiBTaGlmdCBmb3VyIDE2LWJpdCB2YWx1ZXMgaW4gTSByaWdodCBieSBDT1VOVDsgc2hpZnQgaW4gdGhlIHNpZ24gYml0LiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX3NyYV9waTE2IChfX202NCBfX20sIF9fbTY0IF9fY291bnQpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd3NyYWggKChfX3Y0aGkpX19tLCBfX2NvdW50KTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fc3JhaV9waTE2IChfX202NCBfX20sIGludCBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dzcmFoaSAoKF9fdjRoaSlfX20sIF9fY291bnQpOworfQorCisvKiBTaGlmdCB0d28gMzItYml0IHZhbHVlcyBpbiBNIHJpZ2h0IGJ5IENPVU5UOyBzaGlmdCBpbiB0aGUgc2lnbiBiaXQuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fc3JhX3BpMzIgKF9fbTY0IF9fbSwgX19tNjQgX19jb3VudCkKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93c3JhdyAoKF9fdjJzaSlfX20sIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9zcmFpX3BpMzIgKF9fbTY0IF9fbSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd3NyYXdpICgoX192MnNpKV9fbSwgX19jb3VudCk7Cit9CisKKy8qIFNoaWZ0IHRoZSA2NC1iaXQgdmFsdWUgaW4gTSByaWdodCBieSBDT1VOVDsgc2hpZnQgaW4gdGhlIHNpZ24gYml0LiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX3NyYV9zaTY0IChfX202NCBfX20sIF9fbTY0IF9fY291bnQpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd3NyYWQgKF9fbSwgX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX3NyYWlfc2k2NCAoX19tNjQgX19tLCBpbnQgX19jb3VudCkKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93c3JhZGkgKF9fbSwgX19jb3VudCk7Cit9CisKKy8qIFNoaWZ0IGZvdXIgMTYtYml0IHZhbHVlcyBpbiBNIHJpZ2h0IGJ5IENPVU5UOyBzaGlmdCBpbiB6ZXJvcy4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9zcmxfcGkxNiAoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dzcmxoICgoX192NGhpKV9fbSwgX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX3NybGlfcGkxNiAoX19tNjQgX19tLCBpbnQgX19jb3VudCkKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93c3JsaGkgKChfX3Y0aGkpX19tLCBfX2NvdW50KTsKK30KKworLyogU2hpZnQgdHdvIDMyLWJpdCB2YWx1ZXMgaW4gTSByaWdodCBieSBDT1VOVDsgc2hpZnQgaW4gemVyb3MuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fc3JsX3BpMzIgKF9fbTY0IF9fbSwgX19tNjQgX19jb3VudCkKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93c3JsdyAoKF9fdjJzaSlfX20sIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9zcmxpX3BpMzIgKF9fbTY0IF9fbSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd3NybHdpICgoX192MnNpKV9fbSwgX19jb3VudCk7Cit9CisKKy8qIFNoaWZ0IHRoZSA2NC1iaXQgdmFsdWUgaW4gTSBsZWZ0IGJ5IENPVU5UOyBzaGlmdCBpbiB6ZXJvcy4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9zcmxfc2k2NCAoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dzcmxkIChfX20sIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9zcmxpX3NpNjQgKF9fbTY0IF9fbSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd3NybGRpIChfX20sIF9fY291bnQpOworfQorCisvKiBSb3RhdGUgZm91ciAxNi1iaXQgdmFsdWVzIGluIE0gcmlnaHQgYnkgQ09VTlQuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fcm9yX3BpMTYgKF9fbTY0IF9fbSwgX19tNjQgX19jb3VudCkKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93cm9yaCAoKF9fdjRoaSlfX20sIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9yb3JpX3BpMTYgKF9fbTY0IF9fbSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd3JvcmhpICgoX192NGhpKV9fbSwgX19jb3VudCk7Cit9CisKKy8qIFJvdGF0ZSB0d28gMzItYml0IHZhbHVlcyBpbiBNIHJpZ2h0IGJ5IENPVU5ULiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX3Jvcl9waTMyIChfX202NCBfX20sIF9fbTY0IF9fY291bnQpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd3JvcncgKChfX3Yyc2kpX19tLCBfX2NvdW50KTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fcm9yaV9waTMyIChfX202NCBfX20sIGludCBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dyb3J3aSAoKF9fdjJzaSlfX20sIF9fY291bnQpOworfQorCisvKiBSb3RhdGUgdHdvIDY0LWJpdCB2YWx1ZXMgaW4gTSByaWdodCBieSBDT1VOVC4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9yb3Jfc2k2NCAoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dyb3JkIChfX20sIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9yb3JpX3NpNjQgKF9fbTY0IF9fbSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd3JvcmRpIChfX20sIF9fY291bnQpOworfQorCisvKiBCaXQtd2lzZSBBTkQgdGhlIDY0LWJpdCB2YWx1ZXMgaW4gTTEgYW5kIE0yLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX2FuZF9zaTY0IChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICByZXR1cm4gX19idWlsdGluX2FybV93YW5kIChfX20xLCBfX20yKTsKK30KKworLyogQml0LXdpc2UgY29tcGxlbWVudCB0aGUgNjQtYml0IHZhbHVlIGluIE0xIGFuZCBiaXQtd2lzZSBBTkQgaXQgd2l0aCB0aGUKKyAgIDY0LWJpdCB2YWx1ZSBpbiBNMi4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9hbmRub3Rfc2k2NCAoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hcm1fd2FuZG4gKF9fbTEsIF9fbTIpOworfQorCisvKiBCaXQtd2lzZSBpbmNsdXNpdmUgT1IgdGhlIDY0LWJpdCB2YWx1ZXMgaW4gTTEgYW5kIE0yLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX29yX3NpNjQgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYXJtX3dvciAoX19tMSwgX19tMik7Cit9CisKKy8qIEJpdC13aXNlIGV4Y2x1c2l2ZSBPUiB0aGUgNjQtYml0IHZhbHVlcyBpbiBNMSBhbmQgTTIuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1feG9yX3NpNjQgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYXJtX3d4b3IgKF9fbTEsIF9fbTIpOworfQorCisvKiBDb21wYXJlIGVpZ2h0IDgtYml0IHZhbHVlcy4gIFRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24gaXMgMHhGRiBpZiB0aGUKKyAgIHRlc3QgaXMgdHJ1ZSBhbmQgemVybyBpZiBmYWxzZS4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9jbXBlcV9waTggKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd2NtcGVxYiAoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9jbXBndF9waTggKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd2NtcGd0c2IgKChfX3Y4cWkpX19tMSwgKF9fdjhxaSlfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fY21wZ3RfcHU4IChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3djbXBndHViICgoX192OHFpKV9fbTEsIChfX3Y4cWkpX19tMik7Cit9CisKKy8qIENvbXBhcmUgZm91ciAxNi1iaXQgdmFsdWVzLiAgVGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiBpcyAweEZGRkYgaWYKKyAgIHRoZSB0ZXN0IGlzIHRydWUgYW5kIHplcm8gaWYgZmFsc2UuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fY21wZXFfcGkxNiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93Y21wZXFoICgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX2NtcGd0X3BpMTYgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd2NtcGd0c2ggKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fY21wZ3RfcHUxNiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93Y21wZ3R1aCAoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOworfQorCisvKiBDb21wYXJlIHR3byAzMi1iaXQgdmFsdWVzLiAgVGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiBpcyAweEZGRkZGRkZGIGlmCisgICB0aGUgdGVzdCBpcyB0cnVlIGFuZCB6ZXJvIGlmIGZhbHNlLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX2NtcGVxX3BpMzIgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd2NtcGVxdyAoKF9fdjJzaSlfX20xLCAoX192MnNpKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9jbXBndF9waTMyIChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3djbXBndHN3ICgoX192MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX2NtcGd0X3B1MzIgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd2NtcGd0dXcgKChfX3Yyc2kpX19tMSwgKF9fdjJzaSlfX20yKTsKK30KKworLyogRWxlbWVudC13aXNlIG11bHRpcGxpY2F0aW9uIG9mIHVuc2lnbmVkIDE2LWJpdCB2YWx1ZXMgX19CIGFuZCBfX0MsIGZvbGxvd2VkCisgICBieSBhY2N1bXVsYXRlIGFjcm9zcyBhbGwgZWxlbWVudHMgYW5kIF9fQS4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9tYWNfcHUxNiAoX19tNjQgX19BLCBfX202NCBfX0IsIF9fbTY0IF9fQykKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hcm1fd21hY3UgKF9fQSwgKF9fdjRoaSlfX0IsIChfX3Y0aGkpX19DKTsKK30KKworLyogRWxlbWVudC13aXNlIG11bHRpcGxpY2F0aW9uIG9mIHNpZ25lZCAxNi1iaXQgdmFsdWVzIF9fQiBhbmQgX19DLCBmb2xsb3dlZAorICAgYnkgYWNjdW11bGF0ZSBhY3Jvc3MgYWxsIGVsZW1lbnRzIGFuZCBfX0EuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fbWFjX3BpMTYgKF9fbTY0IF9fQSwgX19tNjQgX19CLCBfX202NCBfX0MpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYXJtX3dtYWNzIChfX0EsIChfX3Y0aGkpX19CLCAoX192NGhpKV9fQyk7Cit9CisKKy8qIEVsZW1lbnQtd2lzZSBtdWx0aXBsaWNhdGlvbiBvZiB1bnNpZ25lZCAxNi1iaXQgdmFsdWVzIF9fQiBhbmQgX19DLCBmb2xsb3dlZAorICAgYnkgYWNjdW11bGF0ZSBhY3Jvc3MgYWxsIGVsZW1lbnRzLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX21hY3pfcHUxNiAoX19tNjQgX19BLCBfX202NCBfX0IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYXJtX3dtYWN1eiAoKF9fdjRoaSlfX0EsIChfX3Y0aGkpX19CKTsKK30KKworLyogRWxlbWVudC13aXNlIG11bHRpcGxpY2F0aW9uIG9mIHNpZ25lZCAxNi1iaXQgdmFsdWVzIF9fQiBhbmQgX19DLCBmb2xsb3dlZAorICAgYnkgYWNjdW11bGF0ZSBhY3Jvc3MgYWxsIGVsZW1lbnRzLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX21hY3pfcGkxNiAoX19tNjQgX19BLCBfX202NCBfX0IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYXJtX3dtYWNzeiAoKF9fdjRoaSlfX0EsIChfX3Y0aGkpX19CKTsKK30KKworLyogQWNjdW11bGF0ZSBhY3Jvc3MgYWxsIHVuc2lnbmVkIDgtYml0IHZhbHVlcyBpbiBfX0EuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fYWNjX3B1OCAoX19tNjQgX19BKQoreworICByZXR1cm4gX19idWlsdGluX2FybV93YWNjYiAoKF9fdjhxaSlfX0EpOworfQorCisvKiBBY2N1bXVsYXRlIGFjcm9zcyBhbGwgdW5zaWduZWQgMTYtYml0IHZhbHVlcyBpbiBfX0EuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fYWNjX3B1MTYgKF9fbTY0IF9fQSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hcm1fd2FjY2ggKChfX3Y0aGkpX19BKTsKK30KKworLyogQWNjdW11bGF0ZSBhY3Jvc3MgYWxsIHVuc2lnbmVkIDMyLWJpdCB2YWx1ZXMgaW4gX19BLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX2FjY19wdTMyIChfX202NCBfX0EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYXJtX3dhY2N3ICgoX192MnNpKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX21pYV9zaTY0IChfX202NCBfX0EsIGludCBfX0IsIGludCBfX0MpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYXJtX3RtaWEgKF9fQSwgX19CLCBfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9taWFwaF9zaTY0IChfX202NCBfX0EsIGludCBfX0IsIGludCBfX0MpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYXJtX3RtaWFwaCAoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX21pYWJiX3NpNjQgKF9fbTY0IF9fQSwgaW50IF9fQiwgaW50IF9fQykKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hcm1fdG1pYWJiIChfX0EsIF9fQiwgX19DKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fbWlhYnRfc2k2NCAoX19tNjQgX19BLCBpbnQgX19CLCBpbnQgX19DKQoreworICByZXR1cm4gX19idWlsdGluX2FybV90bWlhYnQgKF9fQSwgX19CLCBfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9taWF0Yl9zaTY0IChfX202NCBfX0EsIGludCBfX0IsIGludCBfX0MpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYXJtX3RtaWF0YiAoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX21pYXR0X3NpNjQgKF9fbTY0IF9fQSwgaW50IF9fQiwgaW50IF9fQykKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hcm1fdG1pYXR0IChfX0EsIF9fQiwgX19DKTsKK30KKworLyogRXh0cmFjdCBvbmUgb2YgdGhlIGVsZW1lbnRzIG9mIEEgYW5kIHNpZ24gZXh0ZW5kLiAgVGhlIHNlbGVjdG9yIE4gbXVzdAorICAgYmUgaW1tZWRpYXRlLiAgKi8KKyNkZWZpbmUgX21tX2V4dHJhY3RfcGk4KEEsIE4pIF9fYnVpbHRpbl9hcm1fdGV4dHJtc2IgKChfX3Y4cWkpKEEpLCAoTikpCisjZGVmaW5lIF9tbV9leHRyYWN0X3BpMTYoQSwgTikgX19idWlsdGluX2FybV90ZXh0cm1zaCAoKF9fdjRoaSkoQSksIChOKSkKKyNkZWZpbmUgX21tX2V4dHJhY3RfcGkzMihBLCBOKSBfX2J1aWx0aW5fYXJtX3RleHRybXN3ICgoX192MnNpKShBKSwgKE4pKQorCisvKiBFeHRyYWN0IG9uZSBvZiB0aGUgZWxlbWVudHMgb2YgQSBhbmQgemVybyBleHRlbmQuICBUaGUgc2VsZWN0b3IgTiBtdXN0CisgICBiZSBpbW1lZGlhdGUuICAqLworI2RlZmluZSBfbW1fZXh0cmFjdF9wdTgoQSwgTikgX19idWlsdGluX2FybV90ZXh0cm11YiAoKF9fdjhxaSkoQSksIChOKSkKKyNkZWZpbmUgX21tX2V4dHJhY3RfcHUxNihBLCBOKSBfX2J1aWx0aW5fYXJtX3RleHRybXVoICgoX192NGhpKShBKSwgKE4pKQorI2RlZmluZSBfbW1fZXh0cmFjdF9wdTMyKEEsIE4pIF9fYnVpbHRpbl9hcm1fdGV4dHJtdXcgKChfX3Yyc2kpKEEpLCAoTikpCisKKy8qIEluc2VydHMgd29yZCBEIGludG8gb25lIG9mIHRoZSBlbGVtZW50cyBvZiBBLiAgVGhlIHNlbGVjdG9yIE4gbXVzdCBiZQorICAgaW1tZWRpYXRlLiAgKi8KKyNkZWZpbmUgX21tX2luc2VydF9waTgoQSwgRCwgTikgXAorICAoKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3RpbnNyYiAoKF9fdjhxaSkoQSksIChEKSwgKE4pKSkKKyNkZWZpbmUgX21tX2luc2VydF9waTE2KEEsIEQsIE4pIFwKKyAgKChfX202NCkgX19idWlsdGluX2FybV90aW5zcmggKChfX3Y0aGkpKEEpLCAoRCksIChOKSkpCisjZGVmaW5lIF9tbV9pbnNlcnRfcGkzMihBLCBELCBOKSBcCisgICgoX19tNjQpIF9fYnVpbHRpbl9hcm1fdGluc3J3ICgoX192MnNpKShBKSwgKEQpLCAoTikpKQorCisvKiBDb21wdXRlIHRoZSBlbGVtZW50LXdpc2UgbWF4aW11bSBvZiBzaWduZWQgOC1iaXQgdmFsdWVzLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX21heF9waTggKF9fbTY0IF9fQSwgX19tNjQgX19CKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dtYXhzYiAoKF9fdjhxaSlfX0EsIChfX3Y4cWkpX19CKTsKK30KKworLyogQ29tcHV0ZSB0aGUgZWxlbWVudC13aXNlIG1heGltdW0gb2Ygc2lnbmVkIDE2LWJpdCB2YWx1ZXMuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fbWF4X3BpMTYgKF9fbTY0IF9fQSwgX19tNjQgX19CKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dtYXhzaCAoKF9fdjRoaSlfX0EsIChfX3Y0aGkpX19CKTsKK30KKworLyogQ29tcHV0ZSB0aGUgZWxlbWVudC13aXNlIG1heGltdW0gb2Ygc2lnbmVkIDMyLWJpdCB2YWx1ZXMuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fbWF4X3BpMzIgKF9fbTY0IF9fQSwgX19tNjQgX19CKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dtYXhzdyAoKF9fdjJzaSlfX0EsIChfX3Yyc2kpX19CKTsKK30KKworLyogQ29tcHV0ZSB0aGUgZWxlbWVudC13aXNlIG1heGltdW0gb2YgdW5zaWduZWQgOC1iaXQgdmFsdWVzLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX21heF9wdTggKF9fbTY0IF9fQSwgX19tNjQgX19CKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dtYXh1YiAoKF9fdjhxaSlfX0EsIChfX3Y4cWkpX19CKTsKK30KKworLyogQ29tcHV0ZSB0aGUgZWxlbWVudC13aXNlIG1heGltdW0gb2YgdW5zaWduZWQgMTYtYml0IHZhbHVlcy4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9tYXhfcHUxNiAoX19tNjQgX19BLCBfX202NCBfX0IpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd21heHVoICgoX192NGhpKV9fQSwgKF9fdjRoaSlfX0IpOworfQorCisvKiBDb21wdXRlIHRoZSBlbGVtZW50LXdpc2UgbWF4aW11bSBvZiB1bnNpZ25lZCAzMi1iaXQgdmFsdWVzLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX21heF9wdTMyIChfX202NCBfX0EsIF9fbTY0IF9fQikKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93bWF4dXcgKChfX3Yyc2kpX19BLCAoX192MnNpKV9fQik7Cit9CisKKy8qIENvbXB1dGUgdGhlIGVsZW1lbnQtd2lzZSBtaW5pbXVtIG9mIHNpZ25lZCAxNi1iaXQgdmFsdWVzLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX21pbl9waTggKF9fbTY0IF9fQSwgX19tNjQgX19CKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dtaW5zYiAoKF9fdjhxaSlfX0EsIChfX3Y4cWkpX19CKTsKK30KKworLyogQ29tcHV0ZSB0aGUgZWxlbWVudC13aXNlIG1pbmltdW0gb2Ygc2lnbmVkIDE2LWJpdCB2YWx1ZXMuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fbWluX3BpMTYgKF9fbTY0IF9fQSwgX19tNjQgX19CKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dtaW5zaCAoKF9fdjRoaSlfX0EsIChfX3Y0aGkpX19CKTsKK30KKworLyogQ29tcHV0ZSB0aGUgZWxlbWVudC13aXNlIG1pbmltdW0gb2Ygc2lnbmVkIDMyLWJpdCB2YWx1ZXMuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fbWluX3BpMzIgKF9fbTY0IF9fQSwgX19tNjQgX19CKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dtaW5zdyAoKF9fdjJzaSlfX0EsIChfX3Yyc2kpX19CKTsKK30KKworLyogQ29tcHV0ZSB0aGUgZWxlbWVudC13aXNlIG1pbmltdW0gb2YgdW5zaWduZWQgMTYtYml0IHZhbHVlcy4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9taW5fcHU4IChfX202NCBfX0EsIF9fbTY0IF9fQikKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93bWludWIgKChfX3Y4cWkpX19BLCAoX192OHFpKV9fQik7Cit9CisKKy8qIENvbXB1dGUgdGhlIGVsZW1lbnQtd2lzZSBtaW5pbXVtIG9mIHVuc2lnbmVkIDE2LWJpdCB2YWx1ZXMuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fbWluX3B1MTYgKF9fbTY0IF9fQSwgX19tNjQgX19CKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dtaW51aCAoKF9fdjRoaSlfX0EsIChfX3Y0aGkpX19CKTsKK30KKworLyogQ29tcHV0ZSB0aGUgZWxlbWVudC13aXNlIG1pbmltdW0gb2YgdW5zaWduZWQgMzItYml0IHZhbHVlcy4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9taW5fcHUzMiAoX19tNjQgX19BLCBfX202NCBfX0IpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd21pbnV3ICgoX192MnNpKV9fQSwgKF9fdjJzaSlfX0IpOworfQorCisvKiBDcmVhdGUgYW4gOC1iaXQgbWFzayBvZiB0aGUgc2lnbnMgb2YgOC1iaXQgdmFsdWVzLiAgKi8KK3N0YXRpYyBfX2lubGluZSBpbnQKK19tbV9tb3ZlbWFza19waTggKF9fbTY0IF9fQSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hcm1fdG1vdm1za2IgKChfX3Y4cWkpX19BKTsKK30KKworLyogQ3JlYXRlIGFuIDgtYml0IG1hc2sgb2YgdGhlIHNpZ25zIG9mIDE2LWJpdCB2YWx1ZXMuICAqLworc3RhdGljIF9faW5saW5lIGludAorX21tX21vdmVtYXNrX3BpMTYgKF9fbTY0IF9fQSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hcm1fdG1vdm1za2ggKChfX3Y0aGkpX19BKTsKK30KKworLyogQ3JlYXRlIGFuIDgtYml0IG1hc2sgb2YgdGhlIHNpZ25zIG9mIDMyLWJpdCB2YWx1ZXMuICAqLworc3RhdGljIF9faW5saW5lIGludAorX21tX21vdmVtYXNrX3BpMzIgKF9fbTY0IF9fQSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hcm1fdG1vdm1za3cgKChfX3Yyc2kpX19BKTsKK30KKworLyogUmV0dXJuIGEgY29tYmluYXRpb24gb2YgdGhlIGZvdXIgMTYtYml0IHZhbHVlcyBpbiBBLiAgVGhlIHNlbGVjdG9yCisgICBtdXN0IGJlIGFuIGltbWVkaWF0ZS4gICovCisjZGVmaW5lIF9tbV9zaHVmZmxlX3BpMTYoQSwgTikgXAorICAoKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dzaHVmaCAoKF9fdjRoaSkoQSksIChOKSkpCisKKworLyogQ29tcHV0ZSB0aGUgcm91bmRlZCBhdmVyYWdlcyBvZiB0aGUgdW5zaWduZWQgOC1iaXQgdmFsdWVzIGluIEEgYW5kIEIuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fYXZnX3B1OCAoX19tNjQgX19BLCBfX202NCBfX0IpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd2F2ZzJiciAoKF9fdjhxaSlfX0EsIChfX3Y4cWkpX19CKTsKK30KKworLyogQ29tcHV0ZSB0aGUgcm91bmRlZCBhdmVyYWdlcyBvZiB0aGUgdW5zaWduZWQgMTYtYml0IHZhbHVlcyBpbiBBIGFuZCBCLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX2F2Z19wdTE2IChfX202NCBfX0EsIF9fbTY0IF9fQikKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93YXZnMmhyICgoX192NGhpKV9fQSwgKF9fdjRoaSlfX0IpOworfQorCisvKiBDb21wdXRlIHRoZSBhdmVyYWdlcyBvZiB0aGUgdW5zaWduZWQgOC1iaXQgdmFsdWVzIGluIEEgYW5kIEIuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fYXZnMl9wdTggKF9fbTY0IF9fQSwgX19tNjQgX19CKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dhdmcyYiAoKF9fdjhxaSlfX0EsIChfX3Y4cWkpX19CKTsKK30KKworLyogQ29tcHV0ZSB0aGUgYXZlcmFnZXMgb2YgdGhlIHVuc2lnbmVkIDE2LWJpdCB2YWx1ZXMgaW4gQSBhbmQgQi4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9hdmcyX3B1MTYgKF9fbTY0IF9fQSwgX19tNjQgX19CKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dhdmcyaCAoKF9fdjRoaSlfX0EsIChfX3Y0aGkpX19CKTsKK30KKworLyogQ29tcHV0ZSB0aGUgc3VtIG9mIHRoZSBhYnNvbHV0ZSBkaWZmZXJlbmNlcyBvZiB0aGUgdW5zaWduZWQgOC1iaXQKKyAgIHZhbHVlcyBpbiBBIGFuZCBCLiAgUmV0dXJuIHRoZSB2YWx1ZSBpbiB0aGUgbG93ZXIgMTYtYml0IHdvcmQ7IHRoZQorICAgdXBwZXIgd29yZHMgYXJlIGNsZWFyZWQuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fc2FkX3B1OCAoX19tNjQgX19BLCBfX202NCBfX0IpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd3NhZGIgKChfX3Y4cWkpX19BLCAoX192OHFpKV9fQik7Cit9CisKKy8qIENvbXB1dGUgdGhlIHN1bSBvZiB0aGUgYWJzb2x1dGUgZGlmZmVyZW5jZXMgb2YgdGhlIHVuc2lnbmVkIDE2LWJpdAorICAgdmFsdWVzIGluIEEgYW5kIEIuICBSZXR1cm4gdGhlIHZhbHVlIGluIHRoZSBsb3dlciAzMi1iaXQgd29yZDsgdGhlCisgICB1cHBlciB3b3JkcyBhcmUgY2xlYXJlZC4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9zYWRfcHUxNiAoX19tNjQgX19BLCBfX202NCBfX0IpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd3NhZGggKChfX3Y0aGkpX19BLCAoX192NGhpKV9fQik7Cit9CisKKy8qIENvbXB1dGUgdGhlIHN1bSBvZiB0aGUgYWJzb2x1dGUgZGlmZmVyZW5jZXMgb2YgdGhlIHVuc2lnbmVkIDgtYml0CisgICB2YWx1ZXMgaW4gQSBhbmQgQi4gIFJldHVybiB0aGUgdmFsdWUgaW4gdGhlIGxvd2VyIDE2LWJpdCB3b3JkOyB0aGUKKyAgIHVwcGVyIHdvcmRzIGFyZSBjbGVhcmVkLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX3NhZHpfcHU4IChfX202NCBfX0EsIF9fbTY0IF9fQikKK3sKKyAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2FybV93c2FkYnogKChfX3Y4cWkpX19BLCAoX192OHFpKV9fQik7Cit9CisKKy8qIENvbXB1dGUgdGhlIHN1bSBvZiB0aGUgYWJzb2x1dGUgZGlmZmVyZW5jZXMgb2YgdGhlIHVuc2lnbmVkIDE2LWJpdAorICAgdmFsdWVzIGluIEEgYW5kIEIuICBSZXR1cm4gdGhlIHZhbHVlIGluIHRoZSBsb3dlciAzMi1iaXQgd29yZDsgdGhlCisgICB1cHBlciB3b3JkcyBhcmUgY2xlYXJlZC4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9zYWR6X3B1MTYgKF9fbTY0IF9fQSwgX19tNjQgX19CKQoreworICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5fYXJtX3dzYWRoeiAoKF9fdjRoaSlfX0EsIChfX3Y0aGkpX19CKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fYWxpZ25fc2k2NCAoX19tNjQgX19BLCBfX202NCBfX0IsIGludCBfX0MpCit7CisgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9hcm1fd2FsaWduICgoX192OHFpKV9fQSwgKF9fdjhxaSlfX0IsIF9fQyk7Cit9CisKKy8qIENyZWF0ZXMgYSA2NC1iaXQgemVyby4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9zZXR6ZXJvX3NpNjQgKHZvaWQpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYXJtX3d6ZXJvICgpOworfQorCisvKiBTZXQgYW5kIEdldCBhcmJpdHJhcnkgaVdNTVh0IENvbnRyb2wgcmVnaXN0ZXJzLgorICAgTm90ZSBvbmx5IHJlZ2lzdGVycyAwLTMgYW5kIDgtMTEgYXJlIGN1cnJlbnRseSBkZWZpbmVkLAorICAgdGhlIHJlc3QgYXJlIHJlc2VydmVkLiAgKi8KKworc3RhdGljIF9faW5saW5lIHZvaWQKK19tbV9zZXR3Y3ggKGNvbnN0IGludCBfX3ZhbHVlLCBjb25zdCBpbnQgX19yZWdubykKK3sKKyAgc3dpdGNoIChfX3JlZ25vKQorICAgIHsKKyAgICBjYXNlIDA6ICBfX2J1aWx0aW5fYXJtX3NldHdjeCAoX192YWx1ZSwgMCk7IGJyZWFrOworICAgIGNhc2UgMTogIF9fYnVpbHRpbl9hcm1fc2V0d2N4IChfX3ZhbHVlLCAxKTsgYnJlYWs7CisgICAgY2FzZSAyOiAgX19idWlsdGluX2FybV9zZXR3Y3ggKF9fdmFsdWUsIDIpOyBicmVhazsKKyAgICBjYXNlIDM6ICBfX2J1aWx0aW5fYXJtX3NldHdjeCAoX192YWx1ZSwgMyk7IGJyZWFrOworICAgIGNhc2UgODogIF9fYnVpbHRpbl9hcm1fc2V0d2N4IChfX3ZhbHVlLCA4KTsgYnJlYWs7CisgICAgY2FzZSA5OiAgX19idWlsdGluX2FybV9zZXR3Y3ggKF9fdmFsdWUsIDkpOyBicmVhazsKKyAgICBjYXNlIDEwOiBfX2J1aWx0aW5fYXJtX3NldHdjeCAoX192YWx1ZSwgMTApOyBicmVhazsKKyAgICBjYXNlIDExOiBfX2J1aWx0aW5fYXJtX3NldHdjeCAoX192YWx1ZSwgMTEpOyBicmVhazsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQKK19tbV9nZXR3Y3ggKGNvbnN0IGludCBfX3JlZ25vKQoreworICBzd2l0Y2ggKF9fcmVnbm8pCisgICAgeworICAgIGNhc2UgMDogIHJldHVybiBfX2J1aWx0aW5fYXJtX2dldHdjeCAoMCk7CisgICAgY2FzZSAxOiAgcmV0dXJuIF9fYnVpbHRpbl9hcm1fZ2V0d2N4ICgxKTsKKyAgICBjYXNlIDI6ICByZXR1cm4gX19idWlsdGluX2FybV9nZXR3Y3ggKDIpOworICAgIGNhc2UgMzogIHJldHVybiBfX2J1aWx0aW5fYXJtX2dldHdjeCAoMyk7CisgICAgY2FzZSA4OiAgcmV0dXJuIF9fYnVpbHRpbl9hcm1fZ2V0d2N4ICg4KTsKKyAgICBjYXNlIDk6ICByZXR1cm4gX19idWlsdGluX2FybV9nZXR3Y3ggKDkpOworICAgIGNhc2UgMTA6IHJldHVybiBfX2J1aWx0aW5fYXJtX2dldHdjeCAoMTApOworICAgIGNhc2UgMTE6IHJldHVybiBfX2J1aWx0aW5fYXJtX2dldHdjeCAoMTEpOworICAgIGRlZmF1bHQ6IHJldHVybiAwOworICAgIH0KK30KKworLyogQ3JlYXRlcyBhIHZlY3RvciBvZiB0d28gMzItYml0IHZhbHVlczsgSTAgaXMgbGVhc3Qgc2lnbmlmaWNhbnQuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fc2V0X3BpMzIgKGludCBfX2kxLCBpbnQgX19pMCkKK3sKKyAgdW5pb24geworICAgIF9fbTY0IF9fcTsKKyAgICBzdHJ1Y3QgeworICAgICAgdW5zaWduZWQgaW50IF9faTA7CisgICAgICB1bnNpZ25lZCBpbnQgX19pMTsKKyAgICB9IF9fczsKKyAgfSBfX3U7CisKKyAgX191Ll9fcy5fX2kwID0gX19pMDsKKyAgX191Ll9fcy5fX2kxID0gX19pMTsKKworICByZXR1cm4gX191Ll9fcTsKK30KKworLyogQ3JlYXRlcyBhIHZlY3RvciBvZiBmb3VyIDE2LWJpdCB2YWx1ZXM7IFcwIGlzIGxlYXN0IHNpZ25pZmljYW50LiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX3NldF9waTE2IChzaG9ydCBfX3czLCBzaG9ydCBfX3cyLCBzaG9ydCBfX3cxLCBzaG9ydCBfX3cwKQoreworICB1bnNpZ25lZCBpbnQgX19pMSA9ICh1bnNpZ25lZCBzaG9ydClfX3czIDw8IDE2IHwgKHVuc2lnbmVkIHNob3J0KV9fdzI7CisgIHVuc2lnbmVkIGludCBfX2kwID0gKHVuc2lnbmVkIHNob3J0KV9fdzEgPDwgMTYgfCAodW5zaWduZWQgc2hvcnQpX193MDsKKyAgcmV0dXJuIF9tbV9zZXRfcGkzMiAoX19pMSwgX19pMCk7CisJCSAgICAgICAKK30KKworLyogQ3JlYXRlcyBhIHZlY3RvciBvZiBlaWdodCA4LWJpdCB2YWx1ZXM7IEIwIGlzIGxlYXN0IHNpZ25pZmljYW50LiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX3NldF9waTggKGNoYXIgX19iNywgY2hhciBfX2I2LCBjaGFyIF9fYjUsIGNoYXIgX19iNCwKKwkgICAgIGNoYXIgX19iMywgY2hhciBfX2IyLCBjaGFyIF9fYjEsIGNoYXIgX19iMCkKK3sKKyAgdW5zaWduZWQgaW50IF9faTEsIF9faTA7CisKKyAgX19pMSA9ICh1bnNpZ25lZCBjaGFyKV9fYjc7CisgIF9faTEgPSBfX2kxIDw8IDggfCAodW5zaWduZWQgY2hhcilfX2I2OworICBfX2kxID0gX19pMSA8PCA4IHwgKHVuc2lnbmVkIGNoYXIpX19iNTsKKyAgX19pMSA9IF9faTEgPDwgOCB8ICh1bnNpZ25lZCBjaGFyKV9fYjQ7CisKKyAgX19pMCA9ICh1bnNpZ25lZCBjaGFyKV9fYjM7CisgIF9faTAgPSBfX2kwIDw8IDggfCAodW5zaWduZWQgY2hhcilfX2IyOworICBfX2kwID0gX19pMCA8PCA4IHwgKHVuc2lnbmVkIGNoYXIpX19iMTsKKyAgX19pMCA9IF9faTAgPDwgOCB8ICh1bnNpZ25lZCBjaGFyKV9fYjA7CisKKyAgcmV0dXJuIF9tbV9zZXRfcGkzMiAoX19pMSwgX19pMCk7Cit9CisKKy8qIFNpbWlsYXIsIGJ1dCB3aXRoIHRoZSBhcmd1bWVudHMgaW4gcmV2ZXJzZSBvcmRlci4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9zZXRyX3BpMzIgKGludCBfX2kwLCBpbnQgX19pMSkKK3sKKyAgcmV0dXJuIF9tbV9zZXRfcGkzMiAoX19pMSwgX19pMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX3NldHJfcGkxNiAoc2hvcnQgX193MCwgc2hvcnQgX193MSwgc2hvcnQgX193Miwgc2hvcnQgX193MykKK3sKKyAgcmV0dXJuIF9tbV9zZXRfcGkxNiAoX193MywgX193MiwgX193MSwgX193MCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX3NldHJfcGk4IChjaGFyIF9fYjAsIGNoYXIgX19iMSwgY2hhciBfX2IyLCBjaGFyIF9fYjMsCisJICAgICAgY2hhciBfX2I0LCBjaGFyIF9fYjUsIGNoYXIgX19iNiwgY2hhciBfX2I3KQoreworICByZXR1cm4gX21tX3NldF9waTggKF9fYjcsIF9fYjYsIF9fYjUsIF9fYjQsIF9fYjMsIF9fYjIsIF9fYjEsIF9fYjApOworfQorCisvKiBDcmVhdGVzIGEgdmVjdG9yIG9mIHR3byAzMi1iaXQgdmFsdWVzLCBib3RoIGVsZW1lbnRzIGNvbnRhaW5pbmcgSS4gICovCitzdGF0aWMgX19pbmxpbmUgX19tNjQKK19tbV9zZXQxX3BpMzIgKGludCBfX2kpCit7CisgIHJldHVybiBfbW1fc2V0X3BpMzIgKF9faSwgX19pKTsKK30KKworLyogQ3JlYXRlcyBhIHZlY3RvciBvZiBmb3VyIDE2LWJpdCB2YWx1ZXMsIGFsbCBlbGVtZW50cyBjb250YWluaW5nIFcuICAqLworc3RhdGljIF9faW5saW5lIF9fbTY0CitfbW1fc2V0MV9waTE2IChzaG9ydCBfX3cpCit7CisgIHVuc2lnbmVkIGludCBfX2kgPSAodW5zaWduZWQgc2hvcnQpX193IDw8IDE2IHwgKHVuc2lnbmVkIHNob3J0KV9fdzsKKyAgcmV0dXJuIF9tbV9zZXQxX3BpMzIgKF9faSk7Cit9CisKKy8qIENyZWF0ZXMgYSB2ZWN0b3Igb2YgZm91ciAxNi1iaXQgdmFsdWVzLCBhbGwgZWxlbWVudHMgY29udGFpbmluZyBCLiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21tX3NldDFfcGk4IChjaGFyIF9fYikKK3sKKyAgdW5zaWduZWQgaW50IF9fdyA9ICh1bnNpZ25lZCBjaGFyKV9fYiA8PCA4IHwgKHVuc2lnbmVkIGNoYXIpX19iOworICB1bnNpZ25lZCBpbnQgX19pID0gX193IDw8IDE2IHwgX193OworICByZXR1cm4gX21tX3NldDFfcGkzMiAoX19pKTsKK30KKworLyogQ29udmVydCBhbiBpbnRlZ2VyIHRvIGEgX19tNjQgb2JqZWN0LiAgKi8KK3N0YXRpYyBfX2lubGluZSBfX202NAorX21fZnJvbV9pbnQgKGludCBfX2EpCit7CisgIHJldHVybiAoX19tNjQpX19hOworfQorCisjZGVmaW5lIF9tX3BhY2tzc3diIF9tbV9wYWNrc19waTE2CisjZGVmaW5lIF9tX3BhY2tzc2R3IF9tbV9wYWNrc19waTMyCisjZGVmaW5lIF9tX3BhY2t1c3diIF9tbV9wYWNrc19wdTE2CisjZGVmaW5lIF9tX3BhY2t1c2R3IF9tbV9wYWNrc19wdTMyCisjZGVmaW5lIF9tX3BhY2tzc3FkIF9tbV9wYWNrc19waTY0CisjZGVmaW5lIF9tX3BhY2t1c3FkIF9tbV9wYWNrc19wdTY0CisjZGVmaW5lIF9tbV9wYWNrc19zaTY0IF9tbV9wYWNrc19waTY0CisjZGVmaW5lIF9tbV9wYWNrc19zdTY0IF9tbV9wYWNrc19wdTY0CisjZGVmaW5lIF9tX3B1bnBja2hidyBfbW1fdW5wYWNraGlfcGk4CisjZGVmaW5lIF9tX3B1bnBja2h3ZCBfbW1fdW5wYWNraGlfcGkxNgorI2RlZmluZSBfbV9wdW5wY2toZHEgX21tX3VucGFja2hpX3BpMzIKKyNkZWZpbmUgX21fcHVucGNrbGJ3IF9tbV91bnBhY2tsb19waTgKKyNkZWZpbmUgX21fcHVucGNrbHdkIF9tbV91bnBhY2tsb19waTE2CisjZGVmaW5lIF9tX3B1bnBja2xkcSBfbW1fdW5wYWNrbG9fcGkzMgorI2RlZmluZSBfbV9wdW5wY2tlaHNidyBfbW1fdW5wYWNrZWhfcGk4CisjZGVmaW5lIF9tX3B1bnBja2Voc3dkIF9tbV91bnBhY2tlaF9waTE2CisjZGVmaW5lIF9tX3B1bnBja2Voc2RxIF9tbV91bnBhY2tlaF9waTMyCisjZGVmaW5lIF9tX3B1bnBja2VodWJ3IF9tbV91bnBhY2tlaF9wdTgKKyNkZWZpbmUgX21fcHVucGNrZWh1d2QgX21tX3VucGFja2VoX3B1MTYKKyNkZWZpbmUgX21fcHVucGNrZWh1ZHEgX21tX3VucGFja2VoX3B1MzIKKyNkZWZpbmUgX21fcHVucGNrZWxzYncgX21tX3VucGFja2VsX3BpOAorI2RlZmluZSBfbV9wdW5wY2tlbHN3ZCBfbW1fdW5wYWNrZWxfcGkxNgorI2RlZmluZSBfbV9wdW5wY2tlbHNkcSBfbW1fdW5wYWNrZWxfcGkzMgorI2RlZmluZSBfbV9wdW5wY2tlbHVidyBfbW1fdW5wYWNrZWxfcHU4CisjZGVmaW5lIF9tX3B1bnBja2VsdXdkIF9tbV91bnBhY2tlbF9wdTE2CisjZGVmaW5lIF9tX3B1bnBja2VsdWRxIF9tbV91bnBhY2tlbF9wdTMyCisjZGVmaW5lIF9tX3BhZGRiIF9tbV9hZGRfcGk4CisjZGVmaW5lIF9tX3BhZGR3IF9tbV9hZGRfcGkxNgorI2RlZmluZSBfbV9wYWRkZCBfbW1fYWRkX3BpMzIKKyNkZWZpbmUgX21fcGFkZHNiIF9tbV9hZGRzX3BpOAorI2RlZmluZSBfbV9wYWRkc3cgX21tX2FkZHNfcGkxNgorI2RlZmluZSBfbV9wYWRkc2QgX21tX2FkZHNfcGkzMgorI2RlZmluZSBfbV9wYWRkdXNiIF9tbV9hZGRzX3B1OAorI2RlZmluZSBfbV9wYWRkdXN3IF9tbV9hZGRzX3B1MTYKKyNkZWZpbmUgX21fcGFkZHVzZCBfbW1fYWRkc19wdTMyCisjZGVmaW5lIF9tX3BzdWJiIF9tbV9zdWJfcGk4CisjZGVmaW5lIF9tX3BzdWJ3IF9tbV9zdWJfcGkxNgorI2RlZmluZSBfbV9wc3ViZCBfbW1fc3ViX3BpMzIKKyNkZWZpbmUgX21fcHN1YnNiIF9tbV9zdWJzX3BpOAorI2RlZmluZSBfbV9wc3Vic3cgX21tX3N1YnNfcGkxNgorI2RlZmluZSBfbV9wc3VidXcgX21tX3N1YnNfcGkzMgorI2RlZmluZSBfbV9wc3VidXNiIF9tbV9zdWJzX3B1OAorI2RlZmluZSBfbV9wc3VidXN3IF9tbV9zdWJzX3B1MTYKKyNkZWZpbmUgX21fcHN1YnVzZCBfbW1fc3Vic19wdTMyCisjZGVmaW5lIF9tX3BtYWRkd2QgX21tX21hZGRfcGkxNgorI2RlZmluZSBfbV9wbWFkZHV3ZCBfbW1fbWFkZF9wdTE2CisjZGVmaW5lIF9tX3BtdWxodyBfbW1fbXVsaGlfcGkxNgorI2RlZmluZSBfbV9wbXVsaHV3IF9tbV9tdWxoaV9wdTE2CisjZGVmaW5lIF9tX3BtdWxsdyBfbW1fbXVsbG9fcGkxNgorI2RlZmluZSBfbV9wbWFjc3cgX21tX21hY19waTE2CisjZGVmaW5lIF9tX3BtYWN1dyBfbW1fbWFjX3B1MTYKKyNkZWZpbmUgX21fcG1hY3N6dyBfbW1fbWFjel9waTE2CisjZGVmaW5lIF9tX3BtYWN1encgX21tX21hY3pfcHUxNgorI2RlZmluZSBfbV9wYWNjYiBfbW1fYWNjX3B1OAorI2RlZmluZSBfbV9wYWNjdyBfbW1fYWNjX3B1MTYKKyNkZWZpbmUgX21fcGFjY2QgX21tX2FjY19wdTMyCisjZGVmaW5lIF9tX3BtaWEgX21tX21pYV9zaTY0CisjZGVmaW5lIF9tX3BtaWFwaCBfbW1fbWlhcGhfc2k2NAorI2RlZmluZSBfbV9wbWlhYmIgX21tX21pYWJiX3NpNjQKKyNkZWZpbmUgX21fcG1pYWJ0IF9tbV9taWFidF9zaTY0CisjZGVmaW5lIF9tX3BtaWF0YiBfbW1fbWlhdGJfc2k2NAorI2RlZmluZSBfbV9wbWlhdHQgX21tX21pYXR0X3NpNjQKKyNkZWZpbmUgX21fcHNsbHcgX21tX3NsbF9waTE2CisjZGVmaW5lIF9tX3BzbGx3aSBfbW1fc2xsaV9waTE2CisjZGVmaW5lIF9tX3BzbGxkIF9tbV9zbGxfcGkzMgorI2RlZmluZSBfbV9wc2xsZGkgX21tX3NsbGlfcGkzMgorI2RlZmluZSBfbV9wc2xscSBfbW1fc2xsX3NpNjQKKyNkZWZpbmUgX21fcHNsbHFpIF9tbV9zbGxpX3NpNjQKKyNkZWZpbmUgX21fcHNyYXcgX21tX3NyYV9waTE2CisjZGVmaW5lIF9tX3BzcmF3aSBfbW1fc3JhaV9waTE2CisjZGVmaW5lIF9tX3BzcmFkIF9tbV9zcmFfcGkzMgorI2RlZmluZSBfbV9wc3JhZGkgX21tX3NyYWlfcGkzMgorI2RlZmluZSBfbV9wc3JhcSBfbW1fc3JhX3NpNjQKKyNkZWZpbmUgX21fcHNyYXFpIF9tbV9zcmFpX3NpNjQKKyNkZWZpbmUgX21fcHNybHcgX21tX3NybF9waTE2CisjZGVmaW5lIF9tX3Bzcmx3aSBfbW1fc3JsaV9waTE2CisjZGVmaW5lIF9tX3BzcmxkIF9tbV9zcmxfcGkzMgorI2RlZmluZSBfbV9wc3JsZGkgX21tX3NybGlfcGkzMgorI2RlZmluZSBfbV9wc3JscSBfbW1fc3JsX3NpNjQKKyNkZWZpbmUgX21fcHNybHFpIF9tbV9zcmxpX3NpNjQKKyNkZWZpbmUgX21fcHJvcncgX21tX3Jvcl9waTE2CisjZGVmaW5lIF9tX3Byb3J3aSBfbW1fcm9yaV9waTE2CisjZGVmaW5lIF9tX3Byb3JkIF9tbV9yb3JfcGkzMgorI2RlZmluZSBfbV9wcm9yZGkgX21tX3JvcmlfcGkzMgorI2RlZmluZSBfbV9wcm9ycSBfbW1fcm9yX3NpNjQKKyNkZWZpbmUgX21fcHJvcnFpIF9tbV9yb3JpX3NpNjQKKyNkZWZpbmUgX21fcGFuZCBfbW1fYW5kX3NpNjQKKyNkZWZpbmUgX21fcGFuZG4gX21tX2FuZG5vdF9zaTY0CisjZGVmaW5lIF9tX3BvciBfbW1fb3Jfc2k2NAorI2RlZmluZSBfbV9weG9yIF9tbV94b3Jfc2k2NAorI2RlZmluZSBfbV9wY21wZXFiIF9tbV9jbXBlcV9waTgKKyNkZWZpbmUgX21fcGNtcGVxdyBfbW1fY21wZXFfcGkxNgorI2RlZmluZSBfbV9wY21wZXFkIF9tbV9jbXBlcV9waTMyCisjZGVmaW5lIF9tX3BjbXBndGIgX21tX2NtcGd0X3BpOAorI2RlZmluZSBfbV9wY21wZ3R1YiBfbW1fY21wZ3RfcHU4CisjZGVmaW5lIF9tX3BjbXBndHcgX21tX2NtcGd0X3BpMTYKKyNkZWZpbmUgX21fcGNtcGd0dXcgX21tX2NtcGd0X3B1MTYKKyNkZWZpbmUgX21fcGNtcGd0ZCBfbW1fY21wZ3RfcGkzMgorI2RlZmluZSBfbV9wY21wZ3R1ZCBfbW1fY21wZ3RfcHUzMgorI2RlZmluZSBfbV9wZXh0cmIgX21tX2V4dHJhY3RfcGk4CisjZGVmaW5lIF9tX3BleHRydyBfbW1fZXh0cmFjdF9waTE2CisjZGVmaW5lIF9tX3BleHRyZCBfbW1fZXh0cmFjdF9waTMyCisjZGVmaW5lIF9tX3BleHRydWIgX21tX2V4dHJhY3RfcHU4CisjZGVmaW5lIF9tX3BleHRydXcgX21tX2V4dHJhY3RfcHUxNgorI2RlZmluZSBfbV9wZXh0cnVkIF9tbV9leHRyYWN0X3B1MzIKKyNkZWZpbmUgX21fcGluc3JiIF9tbV9pbnNlcnRfcGk4CisjZGVmaW5lIF9tX3BpbnNydyBfbW1faW5zZXJ0X3BpMTYKKyNkZWZpbmUgX21fcGluc3JkIF9tbV9pbnNlcnRfcGkzMgorI2RlZmluZSBfbV9wbWF4c2IgX21tX21heF9waTgKKyNkZWZpbmUgX21fcG1heHN3IF9tbV9tYXhfcGkxNgorI2RlZmluZSBfbV9wbWF4c2QgX21tX21heF9waTMyCisjZGVmaW5lIF9tX3BtYXh1YiBfbW1fbWF4X3B1OAorI2RlZmluZSBfbV9wbWF4dXcgX21tX21heF9wdTE2CisjZGVmaW5lIF9tX3BtYXh1ZCBfbW1fbWF4X3B1MzIKKyNkZWZpbmUgX21fcG1pbnNiIF9tbV9taW5fcGk4CisjZGVmaW5lIF9tX3BtaW5zdyBfbW1fbWluX3BpMTYKKyNkZWZpbmUgX21fcG1pbnNkIF9tbV9taW5fcGkzMgorI2RlZmluZSBfbV9wbWludWIgX21tX21pbl9wdTgKKyNkZWZpbmUgX21fcG1pbnV3IF9tbV9taW5fcHUxNgorI2RlZmluZSBfbV9wbWludWQgX21tX21pbl9wdTMyCisjZGVmaW5lIF9tX3Btb3Ztc2tiIF9tbV9tb3ZlbWFza19waTgKKyNkZWZpbmUgX21fcG1vdm1za3cgX21tX21vdmVtYXNrX3BpMTYKKyNkZWZpbmUgX21fcG1vdm1za2QgX21tX21vdmVtYXNrX3BpMzIKKyNkZWZpbmUgX21fcHNodWZ3IF9tbV9zaHVmZmxlX3BpMTYKKyNkZWZpbmUgX21fcGF2Z2IgX21tX2F2Z19wdTgKKyNkZWZpbmUgX21fcGF2Z3cgX21tX2F2Z19wdTE2CisjZGVmaW5lIF9tX3BhdmcyYiBfbW1fYXZnMl9wdTgKKyNkZWZpbmUgX21fcGF2ZzJ3IF9tbV9hdmcyX3B1MTYKKyNkZWZpbmUgX21fcHNhZGJ3IF9tbV9zYWRfcHU4CisjZGVmaW5lIF9tX3BzYWR3ZCBfbW1fc2FkX3B1MTYKKyNkZWZpbmUgX21fcHNhZHpidyBfbW1fc2Fkel9wdTgKKyNkZWZpbmUgX21fcHNhZHp3ZCBfbW1fc2Fkel9wdTE2CisjZGVmaW5lIF9tX3BhbGlnbmlxIF9tbV9hbGlnbl9zaTY0CisjZGVmaW5lIF9tX2N2dF9zaTJwaSBfbW1fY3Z0c2k2NF9tNjQKKyNkZWZpbmUgX21fY3Z0X3BpMnNpIF9tbV9jdnRtNjRfc2k2NAorCisjZW5kaWYgLyogX01NSU5UUklOX0hfSU5DTFVERUQgKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9pbmNsdWRlL3N0ZGFyZy5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luY2x1ZGUvc3RkYXJnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRkYzJlNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9pbmNsdWRlL3N0ZGFyZy5oCkBAIC0wLDAgKzEsMTMwIEBACisvKiBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCitwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCiszLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKK2EgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CitzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qCisgKiBJU08gQyBTdGFuZGFyZDogIDcuMTUgIFZhcmlhYmxlIGFyZ3VtZW50cyAgPHN0ZGFyZy5oPgorICovCisKKyNpZm5kZWYgX1NUREFSR19ICisjaWZuZGVmIF9BTlNJX1NUREFSR19IXworI2lmbmRlZiBfX25lZWRfX192YV9saXN0CisjZGVmaW5lIF9TVERBUkdfSAorI2RlZmluZSBfQU5TSV9TVERBUkdfSF8KKyNlbmRpZiAvKiBub3QgX19uZWVkX19fdmFfbGlzdCAqLworI3VuZGVmIF9fbmVlZF9fX3ZhX2xpc3QKKworLyogRGVmaW5lIF9fZ251Y192YV9saXN0LiAgKi8KKworI2lmbmRlZiBfX0dOVUNfVkFfTElTVAorI2RlZmluZSBfX0dOVUNfVkFfTElTVAordHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKKyNlbmRpZgorCisvKiBEZWZpbmUgdGhlIHN0YW5kYXJkIG1hY3JvcyBmb3IgdGhlIHVzZXIsCisgICBpZiB0aGlzIGludm9jYXRpb24gd2FzIGZyb20gdGhlIHVzZXIgcHJvZ3JhbS4gICovCisjaWZkZWYgX1NUREFSR19ICisKKyNkZWZpbmUgdmFfc3RhcnQodixsKQlfX2J1aWx0aW5fdmFfc3RhcnQodixsKQorI2RlZmluZSB2YV9lbmQodikJX19idWlsdGluX3ZhX2VuZCh2KQorI2RlZmluZSB2YV9hcmcodixsKQlfX2J1aWx0aW5fdmFfYXJnKHYsbCkKKyNpZiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pIHx8IF9fU1REQ19WRVJTSU9OX18gKyAwID49IDE5OTkwMEwgfHwgZGVmaW5lZChfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXykKKyNkZWZpbmUgdmFfY29weShkLHMpCV9fYnVpbHRpbl92YV9jb3B5KGQscykKKyNlbmRpZgorI2RlZmluZSBfX3ZhX2NvcHkoZCxzKQlfX2J1aWx0aW5fdmFfY29weShkLHMpCisKKy8qIERlZmluZSB2YV9saXN0LCBpZiBkZXNpcmVkLCBmcm9tIF9fZ251Y192YV9saXN0LiAqLworLyogV2UgZGVsaWJlcmF0ZWx5IGRvIG5vdCBkZWZpbmUgdmFfbGlzdCB3aGVuIGNhbGxlZCBmcm9tCisgICBzdGRpby5oLCBiZWNhdXNlIEFOU0kgQyBzYXlzIHRoYXQgc3RkaW8uaCBpcyBub3Qgc3VwcG9zZWQgdG8gZGVmaW5lCisgICB2YV9saXN0LiAgc3RkaW8uaCBuZWVkcyB0byBoYXZlIGFjY2VzcyB0byB0aGF0IGRhdGEgdHlwZSwgCisgICBidXQgbXVzdCBub3QgdXNlIHRoYXQgbmFtZS4gIEl0IHNob3VsZCB1c2UgdGhlIG5hbWUgX19nbnVjX3ZhX2xpc3QsCisgICB3aGljaCBpcyBzYWZlIGJlY2F1c2UgaXQgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbi4gICovCisKKyNpZmRlZiBfSElEREVOX1ZBX0xJU1QgIC8qIE9uIE9TRjEsIHRoaXMgbWVhbnMgdmFyYXJncy5oIGlzICJoYWxmLWxvYWRlZCIuICAqLworI3VuZGVmIF9WQV9MSVNUCisjZW5kaWYKKworI2lmZGVmIF9CU0RfVkFfTElTVAorI3VuZGVmIF9CU0RfVkFfTElTVAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fc3ZyNF9fKSB8fCAoZGVmaW5lZChfU0NPX0RTKSAmJiAhZGVmaW5lZChfX1ZBX0xJU1QpKQorLyogU1ZSNC4yIHVzZXMgX1ZBX0xJU1QgZm9yIGFuIGludGVybmFsIGFsaWFzIGZvciB2YV9saXN0LAorICAgc28gd2UgbXVzdCBhdm9pZCB0ZXN0aW5nIGl0IGFuZCBzZXR0aW5nIGl0IGhlcmUuCisgICBTVlI0IHVzZXMgX1ZBX0xJU1QgYXMgYSBmbGFnIGluIHN0ZGFyZy5oLCBidXQgd2Ugc2hvdWxkCisgICBoYXZlIG5vIGNvbmZsaWN0IHdpdGggdGhhdC4gICovCisjaWZuZGVmIF9WQV9MSVNUXworI2RlZmluZSBfVkFfTElTVF8KKyNpZmRlZiBfX2k4NjBfXworI2lmbmRlZiBfVkFfTElTVAorI2RlZmluZSBfVkFfTElTVCB2YV9saXN0CisjZW5kaWYKKyNlbmRpZiAvKiBfX2k4NjBfXyAqLwordHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9saXN0OworI2lmZGVmIF9TQ09fRFMKKyNkZWZpbmUgX19WQV9MSVNUCisjZW5kaWYKKyNlbmRpZiAvKiBfVkFfTElTVF8gKi8KKyNlbHNlIC8qIG5vdCBfX3N2cjRfXyB8fCBfU0NPX0RTICovCisKKy8qIFRoZSBtYWNybyBfVkFfTElTVF8gaXMgdGhlIHNhbWUgdGhpbmcgdXNlZCBieSB0aGlzIGZpbGUgaW4gVWx0cml4LgorICAgQnV0IG9uIEJTRCBORVQyIHdlIG11c3Qgbm90IHRlc3Qgb3IgZGVmaW5lIG9yIHVuZGVmIGl0LgorICAgKE5vdGUgdGhhdCB0aGUgY29tbWVudHMgaW4gTkVUIDIncyBhbnNpLmgKKyAgIGFyZSBpbmNvcnJlY3QgZm9yIF9WQV9MSVNUXy0tc2VlIHN0ZGlvLmghKSAgKi8KKyNpZiAhZGVmaW5lZCAoX1ZBX0xJU1RfKSB8fCBkZWZpbmVkIChfX0JTRF9ORVQyX18pIHx8IGRlZmluZWQgKF9fX18zODZCU0RfX19fKSB8fCBkZWZpbmVkIChfX2JzZGlfXykgfHwgZGVmaW5lZCAoX19zZXF1ZW50X18pIHx8IGRlZmluZWQgKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKFdJTk5UKQorLyogVGhlIG1hY3JvIF9WQV9MSVNUX0RFRklORUQgaXMgdXNlZCBpbiBXaW5kb3dzIE5UIDMuNSAgKi8KKyNpZm5kZWYgX1ZBX0xJU1RfREVGSU5FRAorLyogVGhlIG1hY3JvIF9WQV9MSVNUIGlzIHVzZWQgaW4gU0NPIFVuaXggMy4yLiAgKi8KKyNpZm5kZWYgX1ZBX0xJU1QKKy8qIFRoZSBtYWNybyBfVkFfTElTVF9UX0ggaXMgdXNlZCBpbiB0aGUgQnVsbCBkcHgyICAqLworI2lmbmRlZiBfVkFfTElTVF9UX0gKKy8qIFRoZSBtYWNybyBfX3ZhX2xpc3RfXyBpcyB1c2VkIGJ5IEJlT1MuICAqLworI2lmbmRlZiBfX3ZhX2xpc3RfXwordHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9saXN0OworI2VuZGlmIC8qIG5vdCBfX3ZhX2xpc3RfXyAqLworI2VuZGlmIC8qIG5vdCBfVkFfTElTVF9UX0ggKi8KKyNlbmRpZiAvKiBub3QgX1ZBX0xJU1QgKi8KKyNlbmRpZiAvKiBub3QgX1ZBX0xJU1RfREVGSU5FRCAqLworI2lmICEoZGVmaW5lZCAoX19CU0RfTkVUMl9fKSB8fCBkZWZpbmVkIChfX19fMzg2QlNEX19fXykgfHwgZGVmaW5lZCAoX19ic2RpX18pIHx8IGRlZmluZWQgKF9fc2VxdWVudF9fKSB8fCBkZWZpbmVkIChfX0ZyZWVCU0RfXykpCisjZGVmaW5lIF9WQV9MSVNUXworI2VuZGlmCisjaWZuZGVmIF9WQV9MSVNUCisjZGVmaW5lIF9WQV9MSVNUCisjZW5kaWYKKyNpZm5kZWYgX1ZBX0xJU1RfREVGSU5FRAorI2RlZmluZSBfVkFfTElTVF9ERUZJTkVECisjZW5kaWYKKyNpZm5kZWYgX1ZBX0xJU1RfVF9ICisjZGVmaW5lIF9WQV9MSVNUX1RfSAorI2VuZGlmCisjaWZuZGVmIF9fdmFfbGlzdF9fCisjZGVmaW5lIF9fdmFfbGlzdF9fCisjZW5kaWYKKworI2VuZGlmIC8qIG5vdCBfVkFfTElTVF8sIGV4Y2VwdCBvbiBjZXJ0YWluIHN5c3RlbXMgKi8KKworI2VuZGlmIC8qIG5vdCBfX3N2cjRfXyAqLworCisjZW5kaWYgLyogX1NUREFSR19IICovCisKKyNlbmRpZiAvKiBub3QgX0FOU0lfU1REQVJHX0hfICovCisjZW5kaWYgLyogbm90IF9TVERBUkdfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luY2x1ZGUvc3RkYm9vbC5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luY2x1ZGUvc3RkYm9vbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZDkxMWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5jbHVkZS9zdGRib29sLmgKQEAgLTAsMCArMSw1MCBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1VuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCithIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKgorICogSVNPIEMgU3RhbmRhcmQ6ICA3LjE2ICBCb29sZWFuIHR5cGUgYW5kIHZhbHVlcyAgPHN0ZGJvb2wuaD4KKyAqLworCisjaWZuZGVmIF9TVERCT09MX0gKKyNkZWZpbmUgX1NUREJPT0xfSAorCisjaWZuZGVmIF9fY3BsdXNwbHVzCisKKyNkZWZpbmUgYm9vbAlfQm9vbAorI2RlZmluZSB0cnVlCTEKKyNkZWZpbmUgZmFsc2UJMAorCisjZWxzZSAvKiBfX2NwbHVzcGx1cyAqLworCisvKiBTdXBwb3J0aW5nIDxzdGRib29sLmg+IGluIEMrKyBpcyBhIEdDQyBleHRlbnNpb24uICAqLworI2RlZmluZSBfQm9vbAlib29sCisjZGVmaW5lIGJvb2wJYm9vbAorI2RlZmluZSBmYWxzZQlmYWxzZQorI2RlZmluZSB0cnVlCXRydWUKKworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKy8qIFNpZ25hbCB0aGF0IGFsbCB0aGUgZGVmaW5pdGlvbnMgYXJlIHByZXNlbnQuICAqLworI2RlZmluZSBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZAkxCisKKyNlbmRpZgkvKiBzdGRib29sLmggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9pbmNsdWRlL3N0ZGRlZi5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luY2x1ZGUvc3RkZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODllNWIyZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9pbmNsdWRlL3N0ZGRlZi5oCkBAIC0wLDAgKzEsNDE2IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDIsIDIwMDQsIDIwMDkKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1VuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCithIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKgorICogSVNPIEMgU3RhbmRhcmQ6ICA3LjE3ICBDb21tb24gZGVmaW5pdGlvbnMgIDxzdGRkZWYuaD4KKyAqLworI2lmICghZGVmaW5lZChfU1REREVGX0gpICYmICFkZWZpbmVkKF9TVERERUZfSF8pICYmICFkZWZpbmVkKF9BTlNJX1NURERFRl9IKSBcCisgICAgICYmICFkZWZpbmVkKF9fU1REREVGX0hfXykpIFwKKyAgICB8fCBkZWZpbmVkKF9fbmVlZF93Y2hhcl90KSB8fCBkZWZpbmVkKF9fbmVlZF9zaXplX3QpIFwKKyAgICB8fCBkZWZpbmVkKF9fbmVlZF9wdHJkaWZmX3QpIHx8IGRlZmluZWQoX19uZWVkX05VTEwpIFwKKyAgICB8fCBkZWZpbmVkKF9fbmVlZF93aW50X3QpCisKKy8qIEFueSBvbmUgb2YgdGhlc2Ugc3ltYm9scyBfX25lZWRfKiBtZWFucyB0aGF0IEdOVSBsaWJjCisgICB3YW50cyB1cyBqdXN0IHRvIGRlZmluZSBvbmUgZGF0YSB0eXBlLiAgU28gZG9uJ3QgZGVmaW5lCisgICB0aGUgc3ltYm9scyB0aGF0IGluZGljYXRlIHRoaXMgZmlsZSdzIGVudGlyZSBqb2IgaGFzIGJlZW4gZG9uZS4gICovCisjaWYgKCFkZWZpbmVkKF9fbmVlZF93Y2hhcl90KSAmJiAhZGVmaW5lZChfX25lZWRfc2l6ZV90KQlcCisgICAgICYmICFkZWZpbmVkKF9fbmVlZF9wdHJkaWZmX3QpICYmICFkZWZpbmVkKF9fbmVlZF9OVUxMKQlcCisgICAgICYmICFkZWZpbmVkKF9fbmVlZF93aW50X3QpKQorI2RlZmluZSBfU1REREVGX0gKKyNkZWZpbmUgX1NURERFRl9IXworLyogc25hcm9mZkBuZXh0LmNvbSBzYXlzIHRoZSBOZVhUIG5lZWRzIHRoaXMuICAqLworI2RlZmluZSBfQU5TSV9TVERERUZfSAorLyogSXJpeCA1LjEgbmVlZHMgdGhpcy4gICovCisjZGVmaW5lIF9fU1REREVGX0hfXworI2VuZGlmCisKKyNpZm5kZWYgX19zeXNfc3RkdHlwZXNfaAorLyogVGhpcyBhdm9pZHMgbG9zc2FnZSBvbiBTdW5PUyBidXQgb25seSBpZiBzdGR0eXBlcy5oIGNvbWVzIGZpcnN0LgorICAgVGhlcmUncyBubyB3YXkgdG8gd2luIHdpdGggdGhlIG90aGVyIG9yZGVyISAgU3VuIGxvc3NhZ2UuICAqLworCisvKiBPbiA0LjNic2QtbmV0MiwgbWFrZSBzdXJlIGFuc2kuaCBpcyBpbmNsdWRlZCwgc28gd2UgaGF2ZQorICAgb25lIGxlc3MgY2FzZSB0byBkZWFsIHdpdGggaW4gdGhlIGZvbGxvd2luZy4gICovCisjaWYgZGVmaW5lZCAoX19CU0RfTkVUMl9fKSB8fCBkZWZpbmVkIChfX19fMzg2QlNEX19fXykgfHwgKGRlZmluZWQgKF9fRnJlZUJTRF9fKSAmJiAoX19GcmVlQlNEX18gPCA1KSkgfHwgZGVmaW5lZChfX05ldEJTRF9fKQorI2luY2x1ZGUgPG1hY2hpbmUvYW5zaS5oPgorI2VuZGlmCisvKiBPbiBGcmVlQlNEIDUsIG1hY2hpbmUvYW5zaS5oIGRvZXMgbm90IGV4aXN0IGFueW1vcmUuLi4gKi8KKyNpZiBkZWZpbmVkIChfX0ZyZWVCU0RfXykgJiYgKF9fRnJlZUJTRF9fID49IDUpCisjaW5jbHVkZSA8c3lzL190eXBlcy5oPgorI2VuZGlmCisKKy8qIEluIDQuM2JzZC1uZXQyLCBtYWNoaW5lL2Fuc2kuaCBkZWZpbmVzIHRoZXNlIHN5bWJvbHMsIHdoaWNoIGFyZQorICAgZGVmaW5lZCBpZiB0aGUgY29ycmVzcG9uZGluZyB0eXBlIGlzICpub3QqIGRlZmluZWQuCisgICBGcmVlQlNELTIuMSBkZWZpbmVzIF9NQUNISU5FX0FOU0lfSF8gaW5zdGVhZCBvZiBfQU5TSV9IXyAqLworI2lmIGRlZmluZWQoX0FOU0lfSF8pIHx8IGRlZmluZWQoX01BQ0hJTkVfQU5TSV9IXykKKyNpZiAhZGVmaW5lZChfU0laRV9UXykgJiYgIWRlZmluZWQoX0JTRF9TSVpFX1RfKQorI2RlZmluZSBfU0laRV9UCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfUFRSRElGRl9UXykgJiYgIWRlZmluZWQoX0JTRF9QVFJESUZGX1RfKQorI2RlZmluZSBfUFRSRElGRl9UCisjZW5kaWYKKy8qIE9uIEJTRC8zODYgMS4xLCBhdCBsZWFzdCwgbWFjaGluZS9hbnNpLmggZGVmaW5lcyBfQlNEX1dDSEFSX1RfCisgICBpbnN0ZWFkIG9mIF9XQ0hBUl9UXy4gKi8KKyNpZiAhZGVmaW5lZChfV0NIQVJfVF8pICYmICFkZWZpbmVkKF9CU0RfV0NIQVJfVF8pCisjaWZuZGVmIF9CU0RfV0NIQVJfVF8KKyNkZWZpbmUgX1dDSEFSX1QKKyNlbmRpZgorI2VuZGlmCisvKiBVbmRlZiBfRk9PX1RfIGlmIHdlIGFyZSBzdXBwb3NlZCB0byBkZWZpbmUgZm9vX3QuICAqLworI2lmIGRlZmluZWQgKF9fbmVlZF9wdHJkaWZmX3QpIHx8IGRlZmluZWQgKF9TVERERUZfSF8pCisjdW5kZWYgX1BUUkRJRkZfVF8KKyN1bmRlZiBfQlNEX1BUUkRJRkZfVF8KKyNlbmRpZgorI2lmIGRlZmluZWQgKF9fbmVlZF9zaXplX3QpIHx8IGRlZmluZWQgKF9TVERERUZfSF8pCisjdW5kZWYgX1NJWkVfVF8KKyN1bmRlZiBfQlNEX1NJWkVfVF8KKyNlbmRpZgorI2lmIGRlZmluZWQgKF9fbmVlZF93Y2hhcl90KSB8fCBkZWZpbmVkIChfU1REREVGX0hfKQorI3VuZGVmIF9XQ0hBUl9UXworI3VuZGVmIF9CU0RfV0NIQVJfVF8KKyNlbmRpZgorI2VuZGlmIC8qIGRlZmluZWQoX0FOU0lfSF8pIHx8IGRlZmluZWQoX01BQ0hJTkVfQU5TSV9IXykgKi8KKworLyogU2VxdWVudCdzIGhlYWRlciBmaWxlcyB1c2UgX1BUUkRJRkZfVF8gaW4gc29tZSBjb25mbGljdGluZyB3YXkuCisgICBKdXN0IGlnbm9yZSBpdC4gICovCisjaWYgZGVmaW5lZCAoX19zZXF1ZW50X18pICYmIGRlZmluZWQgKF9QVFJESUZGX1RfKQorI3VuZGVmIF9QVFJESUZGX1RfCisjZW5kaWYKKworLyogT24gVnhXb3JrcywgPHR5cGUvdnhUeXBlc0Jhc2UuaD4gbWF5IGhhdmUgZGVmaW5lZCBtYWNyb3MgbGlrZQorICAgX1RZUEVfc2l6ZV90IHdoaWNoIHdpbGwgdHlwZWRlZiBzaXplX3QuICBmaXhpbmNsdWRlcyBwYXRjaGVkIHRoZQorICAgdnhUeXBlc0Jhc2UuaCBzbyB0aGF0IHRoaXMgbWFjcm8gaXMgb25seSBkZWZpbmVkIGlmIF9HQ0NfU0laRV9UIGlzCisgICBub3QgZGVmaW5lZCwgYW5kIHNvIHRoYXQgZGVmaW5pbmcgdGhpcyBtYWNybyBkZWZpbmVzIF9HQ0NfU0laRV9ULgorICAgSWYgd2UgZmluZCB0aGF0IHRoZSBtYWNyb3MgYXJlIHN0aWxsIGRlZmluZWQgYXQgdGhpcyBwb2ludCwgd2UgbXVzdAorICAgaW52b2tlIHRoZW0gc28gdGhhdCB0aGUgdHlwZSBpcyBkZWZpbmVkIGFzIGV4cGVjdGVkLiAgKi8KKyNpZiBkZWZpbmVkIChfVFlQRV9wdHJkaWZmX3QpICYmIChkZWZpbmVkIChfX25lZWRfcHRyZGlmZl90KSB8fCBkZWZpbmVkIChfU1REREVGX0hfKSkKK19UWVBFX3B0cmRpZmZfdDsKKyN1bmRlZiBfVFlQRV9wdHJkaWZmX3QKKyNlbmRpZgorI2lmIGRlZmluZWQgKF9UWVBFX3NpemVfdCkgJiYgKGRlZmluZWQgKF9fbmVlZF9zaXplX3QpIHx8IGRlZmluZWQgKF9TVERERUZfSF8pKQorX1RZUEVfc2l6ZV90OworI3VuZGVmIF9UWVBFX3NpemVfdAorI2VuZGlmCisjaWYgZGVmaW5lZCAoX1RZUEVfd2NoYXJfdCkgJiYgKGRlZmluZWQgKF9fbmVlZF93Y2hhcl90KSB8fCBkZWZpbmVkIChfU1REREVGX0hfKSkKK19UWVBFX3djaGFyX3Q7CisjdW5kZWYgX1RZUEVfd2NoYXJfdAorI2VuZGlmCisKKy8qIEluIGNhc2Ugbm9ib2R5IGhhcyBkZWZpbmVkIHRoZXNlIHR5cGVzLCBidXQgd2UgYXJlbid0IHJ1bm5pbmcgdW5kZXIKKyAgIEdDQyAyLjAwLCBtYWtlIHN1cmUgdGhhdCBfX1BUUkRJRkZfVFlQRV9fLCBfX1NJWkVfVFlQRV9fLCBhbmQKKyAgIF9fV0NIQVJfVFlQRV9fIGhhdmUgcmVhc29uYWJsZSB2YWx1ZXMuICBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlCisgICBwYXJ0cyBvZiBHQ0MgaXMgY29tcGlsZWQgYnkgYW4gb2xkZXIgY29tcGlsZXIsIHRoYXQgYWN0dWFsbHkKKyAgIGluY2x1ZGUgZ3N0ZGRlZi5oLCBzdWNoIGFzIGNvbGxlY3QyLiAgKi8KKworLyogU2lnbmVkIHR5cGUgb2YgZGlmZmVyZW5jZSBvZiB0d28gcG9pbnRlcnMuICAqLworCisvKiBEZWZpbmUgdGhpcyB0eXBlIGlmIHdlIGFyZSBkb2luZyB0aGUgd2hvbGUgam9iLAorICAgb3IgaWYgd2Ugd2FudCB0aGlzIHR5cGUgaW4gcGFydGljdWxhci4gICovCisjaWYgZGVmaW5lZCAoX1NURERFRl9IKSB8fCBkZWZpbmVkIChfX25lZWRfcHRyZGlmZl90KQorI2lmbmRlZiBfUFRSRElGRl9UCS8qIGluIGNhc2UgPHN5cy90eXBlcy5oPiBoYXMgZGVmaW5lZCBpdC4gKi8KKyNpZm5kZWYgX1RfUFRSRElGRl8KKyNpZm5kZWYgX1RfUFRSRElGRgorI2lmbmRlZiBfX1BUUkRJRkZfVAorI2lmbmRlZiBfUFRSRElGRl9UXworI2lmbmRlZiBfQlNEX1BUUkRJRkZfVF8KKyNpZm5kZWYgX19faW50X3B0cmRpZmZfdF9oCisjaWZuZGVmIF9HQ0NfUFRSRElGRl9UCisjZGVmaW5lIF9QVFJESUZGX1QKKyNkZWZpbmUgX1RfUFRSRElGRl8KKyNkZWZpbmUgX1RfUFRSRElGRgorI2RlZmluZSBfX1BUUkRJRkZfVAorI2RlZmluZSBfUFRSRElGRl9UXworI2RlZmluZSBfQlNEX1BUUkRJRkZfVF8KKyNkZWZpbmUgX19faW50X3B0cmRpZmZfdF9oCisjZGVmaW5lIF9HQ0NfUFRSRElGRl9UCisjaWZuZGVmIF9fUFRSRElGRl9UWVBFX18KKyNkZWZpbmUgX19QVFJESUZGX1RZUEVfXyBsb25nIGludAorI2VuZGlmCit0eXBlZGVmIF9fUFRSRElGRl9UWVBFX18gcHRyZGlmZl90OworI2VuZGlmIC8qIF9HQ0NfUFRSRElGRl9UICovCisjZW5kaWYgLyogX19faW50X3B0cmRpZmZfdF9oICovCisjZW5kaWYgLyogX0JTRF9QVFJESUZGX1RfICovCisjZW5kaWYgLyogX1BUUkRJRkZfVF8gKi8KKyNlbmRpZiAvKiBfX1BUUkRJRkZfVCAqLworI2VuZGlmIC8qIF9UX1BUUkRJRkYgKi8KKyNlbmRpZiAvKiBfVF9QVFJESUZGXyAqLworI2VuZGlmIC8qIF9QVFJESUZGX1QgKi8KKworLyogSWYgdGhpcyBzeW1ib2wgaGFzIGRvbmUgaXRzIGpvYiwgZ2V0IHJpZCBvZiBpdC4gICovCisjdW5kZWYJX19uZWVkX3B0cmRpZmZfdAorCisjZW5kaWYgLyogX1NURERFRl9IIG9yIF9fbmVlZF9wdHJkaWZmX3QuICAqLworCisvKiBVbnNpZ25lZCB0eXBlIG9mIGBzaXplb2YnIHNvbWV0aGluZy4gICovCisKKy8qIERlZmluZSB0aGlzIHR5cGUgaWYgd2UgYXJlIGRvaW5nIHRoZSB3aG9sZSBqb2IsCisgICBvciBpZiB3ZSB3YW50IHRoaXMgdHlwZSBpbiBwYXJ0aWN1bGFyLiAgKi8KKyNpZiBkZWZpbmVkIChfU1REREVGX0gpIHx8IGRlZmluZWQgKF9fbmVlZF9zaXplX3QpCisjaWZuZGVmIF9fc2l6ZV90X18JLyogQmVPUyAqLworI2lmbmRlZiBfX1NJWkVfVF9fCS8qIENyYXkgVW5pY29zL01rICovCisjaWZuZGVmIF9TSVpFX1QJLyogaW4gY2FzZSA8c3lzL3R5cGVzLmg+IGhhcyBkZWZpbmVkIGl0LiAqLworI2lmbmRlZiBfU1lTX1NJWkVfVF9ICisjaWZuZGVmIF9UX1NJWkVfCisjaWZuZGVmIF9UX1NJWkUKKyNpZm5kZWYgX19TSVpFX1QKKyNpZm5kZWYgX1NJWkVfVF8KKyNpZm5kZWYgX0JTRF9TSVpFX1RfCisjaWZuZGVmIF9TSVpFX1RfREVGSU5FRF8KKyNpZm5kZWYgX1NJWkVfVF9ERUZJTkVECisjaWZuZGVmIF9CU0RfU0laRV9UX0RFRklORURfCS8qIERhcndpbiAqLworI2lmbmRlZiBfU0laRV9UX0RFQ0xBUkVECS8qIEZyZWVCU0QgNSAqLworI2lmbmRlZiBfX19pbnRfc2l6ZV90X2gKKyNpZm5kZWYgX0dDQ19TSVpFX1QKKyNpZm5kZWYgX1NJWkVUXworI2lmbmRlZiBfX3NpemVfdAorI2RlZmluZSBfX3NpemVfdF9fCS8qIEJlT1MgKi8KKyNkZWZpbmUgX19TSVpFX1RfXwkvKiBDcmF5IFVuaWNvcy9NayAqLworI2RlZmluZSBfU0laRV9UCisjZGVmaW5lIF9TWVNfU0laRV9UX0gKKyNkZWZpbmUgX1RfU0laRV8KKyNkZWZpbmUgX1RfU0laRQorI2RlZmluZSBfX1NJWkVfVAorI2RlZmluZSBfU0laRV9UXworI2RlZmluZSBfQlNEX1NJWkVfVF8KKyNkZWZpbmUgX1NJWkVfVF9ERUZJTkVEXworI2RlZmluZSBfU0laRV9UX0RFRklORUQKKyNkZWZpbmUgX0JTRF9TSVpFX1RfREVGSU5FRF8JLyogRGFyd2luICovCisjZGVmaW5lIF9TSVpFX1RfREVDTEFSRUQJLyogRnJlZUJTRCA1ICovCisjZGVmaW5lIF9fX2ludF9zaXplX3RfaAorI2RlZmluZSBfR0NDX1NJWkVfVAorI2RlZmluZSBfU0laRVRfCisjaWYgZGVmaW5lZCAoX19GcmVlQlNEX18pICYmIChfX0ZyZWVCU0RfXyA+PSA1KQorLyogX19zaXplX3QgaXMgYSB0eXBlZGVmIG9uIEZyZWVCU0QgNSEsIG11c3Qgbm90IHRyYXNoIGl0LiAqLworI2Vsc2UKKyNkZWZpbmUgX19zaXplX3QKKyNlbmRpZgorI2lmbmRlZiBfX1NJWkVfVFlQRV9fCisjZGVmaW5lIF9fU0laRV9UWVBFX18gbG9uZyB1bnNpZ25lZCBpbnQKKyNlbmRpZgorI2lmICEoZGVmaW5lZCAoX19HTlVHX18pICYmIGRlZmluZWQgKHNpemVfdCkpCit0eXBlZGVmIF9fU0laRV9UWVBFX18gc2l6ZV90OworI2lmZGVmIF9fQkVPU19fCit0eXBlZGVmIGxvbmcgc3NpemVfdDsKKyNlbmRpZiAvKiBfX0JFT1NfXyAqLworI2VuZGlmIC8qICEoZGVmaW5lZCAoX19HTlVHX18pICYmIGRlZmluZWQgKHNpemVfdCkpICovCisjZW5kaWYgLyogX19zaXplX3QgKi8KKyNlbmRpZiAvKiBfU0laRVRfICovCisjZW5kaWYgLyogX0dDQ19TSVpFX1QgKi8KKyNlbmRpZiAvKiBfX19pbnRfc2l6ZV90X2ggKi8KKyNlbmRpZiAvKiBfU0laRV9UX0RFQ0xBUkVEICovCisjZW5kaWYgLyogX0JTRF9TSVpFX1RfREVGSU5FRF8gKi8KKyNlbmRpZiAvKiBfU0laRV9UX0RFRklORUQgKi8KKyNlbmRpZiAvKiBfU0laRV9UX0RFRklORURfICovCisjZW5kaWYgLyogX0JTRF9TSVpFX1RfICovCisjZW5kaWYgLyogX1NJWkVfVF8gKi8KKyNlbmRpZiAvKiBfX1NJWkVfVCAqLworI2VuZGlmIC8qIF9UX1NJWkUgKi8KKyNlbmRpZiAvKiBfVF9TSVpFXyAqLworI2VuZGlmIC8qIF9TWVNfU0laRV9UX0ggKi8KKyNlbmRpZiAvKiBfU0laRV9UICovCisjZW5kaWYgLyogX19TSVpFX1RfXyAqLworI2VuZGlmIC8qIF9fc2l6ZV90X18gKi8KKyN1bmRlZglfX25lZWRfc2l6ZV90CisjZW5kaWYgLyogX1NURERFRl9IIG9yIF9fbmVlZF9zaXplX3QuICAqLworCisKKy8qIFdpZGUgY2hhcmFjdGVyIHR5cGUuCisgICBMb2NhbGUtd3JpdGVycyBzaG91bGQgY2hhbmdlIHRoaXMgYXMgbmVjZXNzYXJ5IHRvCisgICBiZSBiaWcgZW5vdWdoIHRvIGhvbGQgdW5pcXVlIHZhbHVlcyBub3QgYmV0d2VlbiAwIGFuZCAxMjcsCisgICBhbmQgbm90ICh3Y2hhcl90KSAtMSwgZm9yIGVhY2ggZGVmaW5lZCBtdWx0aWJ5dGUgY2hhcmFjdGVyLiAgKi8KKworLyogRGVmaW5lIHRoaXMgdHlwZSBpZiB3ZSBhcmUgZG9pbmcgdGhlIHdob2xlIGpvYiwKKyAgIG9yIGlmIHdlIHdhbnQgdGhpcyB0eXBlIGluIHBhcnRpY3VsYXIuICAqLworI2lmIGRlZmluZWQgKF9TVERERUZfSCkgfHwgZGVmaW5lZCAoX19uZWVkX3djaGFyX3QpCisjaWZuZGVmIF9fd2NoYXJfdF9fCS8qIEJlT1MgKi8KKyNpZm5kZWYgX19XQ0hBUl9UX18JLyogQ3JheSBVbmljb3MvTWsgKi8KKyNpZm5kZWYgX1dDSEFSX1QKKyNpZm5kZWYgX1RfV0NIQVJfCisjaWZuZGVmIF9UX1dDSEFSCisjaWZuZGVmIF9fV0NIQVJfVAorI2lmbmRlZiBfV0NIQVJfVF8KKyNpZm5kZWYgX0JTRF9XQ0hBUl9UXworI2lmbmRlZiBfQlNEX1dDSEFSX1RfREVGSU5FRF8gICAgLyogRGFyd2luICovCisjaWZuZGVmIF9CU0RfUlVORV9UX0RFRklORURfCS8qIERhcndpbiAqLworI2lmbmRlZiBfV0NIQVJfVF9ERUNMQVJFRCAvKiBGcmVlQlNEIDUgKi8KKyNpZm5kZWYgX1dDSEFSX1RfREVGSU5FRF8KKyNpZm5kZWYgX1dDSEFSX1RfREVGSU5FRAorI2lmbmRlZiBfV0NIQVJfVF9ICisjaWZuZGVmIF9fX2ludF93Y2hhcl90X2gKKyNpZm5kZWYgX19JTlRfV0NIQVJfVF9ICisjaWZuZGVmIF9HQ0NfV0NIQVJfVAorI2RlZmluZSBfX3djaGFyX3RfXwkvKiBCZU9TICovCisjZGVmaW5lIF9fV0NIQVJfVF9fCS8qIENyYXkgVW5pY29zL01rICovCisjZGVmaW5lIF9XQ0hBUl9UCisjZGVmaW5lIF9UX1dDSEFSXworI2RlZmluZSBfVF9XQ0hBUgorI2RlZmluZSBfX1dDSEFSX1QKKyNkZWZpbmUgX1dDSEFSX1RfCisjZGVmaW5lIF9CU0RfV0NIQVJfVF8KKyNkZWZpbmUgX1dDSEFSX1RfREVGSU5FRF8KKyNkZWZpbmUgX1dDSEFSX1RfREVGSU5FRAorI2RlZmluZSBfV0NIQVJfVF9ICisjZGVmaW5lIF9fX2ludF93Y2hhcl90X2gKKyNkZWZpbmUgX19JTlRfV0NIQVJfVF9ICisjZGVmaW5lIF9HQ0NfV0NIQVJfVAorI2RlZmluZSBfV0NIQVJfVF9ERUNMQVJFRAorCisvKiBPbiBCU0QvMzg2IDEuMSwgYXQgbGVhc3QsIG1hY2hpbmUvYW5zaS5oIGRlZmluZXMgX0JTRF9XQ0hBUl9UXworICAgaW5zdGVhZCBvZiBfV0NIQVJfVF8sIGFuZCBfQlNEX1JVTkVfVF8gKHdoaWNoLCB1bmxpa2UgdGhlIG90aGVyCisgICBzeW1ib2xzIGluIHRoZSBfRk9PX1RfIGZhbWlseSwgc3RheXMgZGVmaW5lZCBldmVuIGFmdGVyIGl0cworICAgY29ycmVzcG9uZGluZyB0eXBlIGlzIGRlZmluZWQpLiAgSWYgd2UgZGVmaW5lIHdjaGFyX3QsIHRoZW4gd2UKKyAgIG11c3QgdW5kZWYgX1dDSEFSX1RfOyBmb3IgQlNELzM4NiAxLjEgKGFuZCBwZXJoYXBzIG90aGVycyksIGlmCisgICB3ZSB1bmRlZiBfV0NIQVJfVF8sIHRoZW4gd2UgbXVzdCBhbHNvIGRlZmluZSBydW5lX3QsIHNpbmNlIAorICAgaGVhZGVycyBsaWtlIHJ1bmV0eXBlLmggYXNzdW1lIHRoYXQgaWYgbWFjaGluZS9hbnNpLmggaXMgaW5jbHVkZWQsCisgICBhbmQgX0JTRF9XQ0hBUl9UXyBpcyBub3QgZGVmaW5lZCwgdGhlbiBydW5lX3QgaXMgYXZhaWxhYmxlLgorICAgbWFjaGluZS9hbnNpLmggc2F5cywgIk5vdGUgdGhhdCBfV0NIQVJfVF8gYW5kIF9SVU5FX1RfIG11c3QgYmUgb2YKKyAgIHRoZSBzYW1lIHR5cGUuIiAqLworI2lmZGVmIF9CU0RfV0NIQVJfVF8KKyN1bmRlZiBfQlNEX1dDSEFSX1RfCisjaWZkZWYgX0JTRF9SVU5FX1RfCisjaWYgIWRlZmluZWQgKF9BTlNJX1NPVVJDRSkgJiYgIWRlZmluZWQgKF9QT1NJWF9TT1VSQ0UpCit0eXBlZGVmIF9CU0RfUlVORV9UXyBydW5lX3Q7CisjZGVmaW5lIF9CU0RfV0NIQVJfVF9ERUZJTkVEXworI2RlZmluZSBfQlNEX1JVTkVfVF9ERUZJTkVEXwkvKiBEYXJ3aW4gKi8KKyNpZiBkZWZpbmVkIChfX0ZyZWVCU0RfXykgJiYgKF9fRnJlZUJTRF9fIDwgNSkKKy8qIFdoeSBpcyB0aGlzIGZpbGUgc28gaGFyZCB0byBtYWludGFpbiBwcm9wZXJseT8gIEluIGNvbnRyYXN0IHRvCisgICB0aGUgY29tbWVudCBhYm92ZSByZWdhcmRpbmcgQlNELzM4NiAxLjEsIG9uIEZyZWVCU0QgZm9yIGFzIGxvbmcKKyAgIGFzIHRoZSBzeW1ib2wgaGFzIGV4aXN0ZWQsIF9CU0RfUlVORV9UXyBtdXN0IG5vdCBzdGF5IGRlZmluZWQgb3IKKyAgIHJlZHVuZGFudCB0eXBlZGVmcyB3aWxsIG9jY3VyIHdoZW4gc3RkbGliLmggaXMgaW5jbHVkZWQgYWZ0ZXIgdGhpcyBmaWxlLiAqLworI3VuZGVmIF9CU0RfUlVORV9UXworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisvKiBGcmVlQlNEIDUgY2FuJ3QgYmUgaGFuZGxlZCB3ZWxsIHVzaW5nICJ0cmFkaXRpb25hbCIgbG9naWMgYWJvdmUKKyAgIHNpbmNlIGl0IG5vIGxvbmdlciBkZWZpbmVzIF9CU0RfUlVORV9UXyB5ZXQgc3RpbGwgZGVzaXJlcyB0byBleHBvcnQKKyAgIHJ1bmVfdCBpbiBzb21lIGNhc2VzLi4uICovCisjaWYgZGVmaW5lZCAoX19GcmVlQlNEX18pICYmIChfX0ZyZWVCU0RfXyA+PSA1KQorI2lmICFkZWZpbmVkIChfQU5TSV9TT1VSQ0UpICYmICFkZWZpbmVkIChfUE9TSVhfU09VUkNFKQorI2lmIF9fQlNEX1ZJU0lCTEUKKyNpZm5kZWYgX1JVTkVfVF9ERUNMQVJFRAordHlwZWRlZiBfX3J1bmVfdCAgICAgICAgcnVuZV90OworI2RlZmluZSBfUlVORV9UX0RFQ0xBUkVECisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBfX1dDSEFSX1RZUEVfXworI2RlZmluZSBfX1dDSEFSX1RZUEVfXyBpbnQKKyNlbmRpZgorI2lmbmRlZiBfX2NwbHVzcGx1cwordHlwZWRlZiBfX1dDSEFSX1RZUEVfXyB3Y2hhcl90OworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYgLyogX1dDSEFSX1RfREVDTEFSRUQgKi8KKyNlbmRpZiAvKiBfQlNEX1JVTkVfVF9ERUZJTkVEXyAqLworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYgLyogX19XQ0hBUl9UX18gKi8KKyNlbmRpZiAvKiBfX3djaGFyX3RfXyAqLworI3VuZGVmCV9fbmVlZF93Y2hhcl90CisjZW5kaWYgLyogX1NURERFRl9IIG9yIF9fbmVlZF93Y2hhcl90LiAgKi8KKworI2lmIGRlZmluZWQgKF9fbmVlZF93aW50X3QpCisjaWZuZGVmIF9XSU5UX1QKKyNkZWZpbmUgX1dJTlRfVAorCisjaWZuZGVmIF9fV0lOVF9UWVBFX18KKyNkZWZpbmUgX19XSU5UX1RZUEVfXyB1bnNpZ25lZCBpbnQKKyNlbmRpZgordHlwZWRlZiBfX1dJTlRfVFlQRV9fIHdpbnRfdDsKKyNlbmRpZgorI3VuZGVmIF9fbmVlZF93aW50X3QKKyNlbmRpZgorCisvKiAgSW4gNC4zYnNkLW5ldDIsIGxlYXZlIHRoZXNlIHVuZGVmaW5lZCB0byBpbmRpY2F0ZSB0aGF0IHNpemVfdCwgZXRjLgorICAgIGFyZSBhbHJlYWR5IGRlZmluZWQuICAqLworLyogIEJTRC9PUyAzLjEgYW5kIEZyZWVCU0QgWzIzXS54IHJlcXVpcmUgdGhlIE1BQ0hJTkVfQU5TSV9IIGNoZWNrIGhlcmUuICAqLworI2lmIGRlZmluZWQoX0FOU0lfSF8pIHx8IGRlZmluZWQoX01BQ0hJTkVfQU5TSV9IXykKKy8qICBUaGUgcmVmZXJlbmNlcyB0byBfR0NDX1BUUkRJRkZfVF8sIF9HQ0NfU0laRV9UXywgYW5kIF9HQ0NfV0NIQVJfVF8KKyAgICBhcmUgcHJvYmFibHkgdHlwb3MgYW5kIHNob3VsZCBiZSByZW1vdmVkIGJlZm9yZSAyLjggaXMgcmVsZWFzZWQuICAqLworI2lmZGVmIF9HQ0NfUFRSRElGRl9UXworI3VuZGVmIF9QVFJESUZGX1RfCisjdW5kZWYgX0JTRF9QVFJESUZGX1RfCisjZW5kaWYKKyNpZmRlZiBfR0NDX1NJWkVfVF8KKyN1bmRlZiBfU0laRV9UXworI3VuZGVmIF9CU0RfU0laRV9UXworI2VuZGlmCisjaWZkZWYgX0dDQ19XQ0hBUl9UXworI3VuZGVmIF9XQ0hBUl9UXworI3VuZGVmIF9CU0RfV0NIQVJfVF8KKyNlbmRpZgorLyogIFRoZSBmb2xsb3dpbmcgb25lcyBhcmUgdGhlIHJlYWwgb25lcy4gICovCisjaWZkZWYgX0dDQ19QVFJESUZGX1QKKyN1bmRlZiBfUFRSRElGRl9UXworI3VuZGVmIF9CU0RfUFRSRElGRl9UXworI2VuZGlmCisjaWZkZWYgX0dDQ19TSVpFX1QKKyN1bmRlZiBfU0laRV9UXworI3VuZGVmIF9CU0RfU0laRV9UXworI2VuZGlmCisjaWZkZWYgX0dDQ19XQ0hBUl9UCisjdW5kZWYgX1dDSEFSX1RfCisjdW5kZWYgX0JTRF9XQ0hBUl9UXworI2VuZGlmCisjZW5kaWYgLyogX0FOU0lfSF8gfHwgX01BQ0hJTkVfQU5TSV9IXyAqLworCisjZW5kaWYgLyogX19zeXNfc3RkdHlwZXNfaCAqLworCisvKiBBIG51bGwgcG9pbnRlciBjb25zdGFudC4gICovCisKKyNpZiBkZWZpbmVkIChfU1REREVGX0gpIHx8IGRlZmluZWQgKF9fbmVlZF9OVUxMKQorI3VuZGVmIE5VTEwJCS8qIGluIGNhc2UgPHN0ZGlvLmg+IGhhcyBkZWZpbmVkIGl0LiAqLworI2lmZGVmIF9fR05VR19fCisjZGVmaW5lIE5VTEwgX19udWxsCisjZWxzZSAgIC8qIEcrKyAqLworI2lmbmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBOVUxMICgodm9pZCAqKTApCisjZWxzZSAgIC8qIEMrKyAqLworI2RlZmluZSBOVUxMIDAKKyNlbmRpZiAgLyogQysrICovCisjZW5kaWYgIC8qIEcrKyAqLworI2VuZGlmCS8qIE5VTEwgbm90IGRlZmluZWQgYW5kIDxzdGRkZWYuaD4gb3IgbmVlZCBOVUxMLiAgKi8KKyN1bmRlZglfX25lZWRfTlVMTAorCisjaWZkZWYgX1NURERFRl9ICisKKy8qIE9mZnNldCBvZiBtZW1iZXIgTUVNQkVSIGluIGEgc3RydWN0IG9mIHR5cGUgVFlQRS4gKi8KKyNkZWZpbmUgb2Zmc2V0b2YoVFlQRSwgTUVNQkVSKSBfX2J1aWx0aW5fb2Zmc2V0b2YgKFRZUEUsIE1FTUJFUikKKworI2VuZGlmIC8qIF9TVERERUZfSCB3YXMgZGVmaW5lZCB0aGlzIHRpbWUgKi8KKworI2VuZGlmIC8qICFfU1REREVGX0ggJiYgIV9TVERERUZfSF8gJiYgIV9BTlNJX1NURERFRl9IICYmICFfX1NURERFRl9IX18KKwkgIHx8IF9fbmVlZF9YWFggd2FzIG5vdCBkZWZpbmVkIGJlZm9yZSAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luY2x1ZGUvc3RkZml4LmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5jbHVkZS9zdGRmaXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzNlYzAwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luY2x1ZGUvc3RkZml4LmgKQEAgLTAsMCArMSwyMDQgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKK3Blcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKzMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKK3NlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogSVNPL0lFQyBKVEMxIFNDMjIgV0cxNCBOMTE2OQorICogRGF0ZTogMjAwNi0wNC0wNAorICogSVNPL0lFQyBUUiAxODAzNworICogUHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzIC0gQyAtIEV4dGVuc2lvbnMgdG8gc3VwcG9ydCBlbWJlZGRlZCBwcm9jZXNzb3JzCisgKi8KKworI2lmbmRlZiBfU1RERklYX0gKKyNkZWZpbmUgX1NUREZJWF9ICisKKy8qIDcuMThhLjEgSW50cm9kdWN0aW9uLiAgKi8KKworI3VuZGVmIGZyYWN0CisjdW5kZWYgYWNjdW0KKyN1bmRlZiBzYXQKKyNkZWZpbmUgZnJhY3QJCV9GcmFjdAorI2RlZmluZSBhY2N1bQkJX0FjY3VtCisjZGVmaW5lIHNhdAkJX1NhdAorCisvKiA3LjE4YS4zIFByZWNpc2lvbiBtYWNyb3MuICAqLworCisjdW5kZWYgU0ZSQUNUX0ZCSVQKKyN1bmRlZiBTRlJBQ1RfTUlOCisjdW5kZWYgU0ZSQUNUX01BWAorI3VuZGVmIFNGUkFDVF9FUFNJTE9OCisjZGVmaW5lIFNGUkFDVF9GQklUCV9fU0ZSQUNUX0ZCSVRfXworI2RlZmluZSBTRlJBQ1RfTUlOCV9fU0ZSQUNUX01JTl9fCisjZGVmaW5lIFNGUkFDVF9NQVgJX19TRlJBQ1RfTUFYX18KKyNkZWZpbmUgU0ZSQUNUX0VQU0lMT04JX19TRlJBQ1RfRVBTSUxPTl9fCisKKyN1bmRlZiBVU0ZSQUNUX0ZCSVQKKyN1bmRlZiBVU0ZSQUNUX01JTgorI3VuZGVmIFVTRlJBQ1RfTUFYCisjdW5kZWYgVVNGUkFDVF9FUFNJTE9OCisjZGVmaW5lIFVTRlJBQ1RfRkJJVAlfX1VTRlJBQ1RfRkJJVF9fCisjZGVmaW5lIFVTRlJBQ1RfTUlOCV9fVVNGUkFDVF9NSU5fXwkJLyogR0NDIGV4dGVuc2lvbi4gICovCisjZGVmaW5lIFVTRlJBQ1RfTUFYCV9fVVNGUkFDVF9NQVhfXworI2RlZmluZSBVU0ZSQUNUX0VQU0lMT04JX19VU0ZSQUNUX0VQU0lMT05fXworCisjdW5kZWYgRlJBQ1RfRkJJVAorI3VuZGVmIEZSQUNUX01JTgorI3VuZGVmIEZSQUNUX01BWAorI3VuZGVmIEZSQUNUX0VQU0lMT04KKyNkZWZpbmUgRlJBQ1RfRkJJVAlfX0ZSQUNUX0ZCSVRfXworI2RlZmluZSBGUkFDVF9NSU4JX19GUkFDVF9NSU5fXworI2RlZmluZSBGUkFDVF9NQVgJX19GUkFDVF9NQVhfXworI2RlZmluZSBGUkFDVF9FUFNJTE9OCV9fRlJBQ1RfRVBTSUxPTl9fCisKKyN1bmRlZiBVRlJBQ1RfRkJJVAorI3VuZGVmIFVGUkFDVF9NSU4KKyN1bmRlZiBVRlJBQ1RfTUFYCisjdW5kZWYgVUZSQUNUX0VQU0lMT04KKyNkZWZpbmUgVUZSQUNUX0ZCSVQJX19VRlJBQ1RfRkJJVF9fCisjZGVmaW5lIFVGUkFDVF9NSU4JX19VRlJBQ1RfTUlOX18JCS8qIEdDQyBleHRlbnNpb24uICAqLworI2RlZmluZSBVRlJBQ1RfTUFYCV9fVUZSQUNUX01BWF9fCisjZGVmaW5lIFVGUkFDVF9FUFNJTE9OCV9fVUZSQUNUX0VQU0lMT05fXworCisjdW5kZWYgTEZSQUNUX0ZCSVQKKyN1bmRlZiBMRlJBQ1RfTUlOCisjdW5kZWYgTEZSQUNUX01BWAorI3VuZGVmIExGUkFDVF9FUFNJTE9OCisjZGVmaW5lIExGUkFDVF9GQklUCV9fTEZSQUNUX0ZCSVRfXworI2RlZmluZSBMRlJBQ1RfTUlOCV9fTEZSQUNUX01JTl9fCisjZGVmaW5lIExGUkFDVF9NQVgJX19MRlJBQ1RfTUFYX18KKyNkZWZpbmUgTEZSQUNUX0VQU0lMT04JX19MRlJBQ1RfRVBTSUxPTl9fCisKKyN1bmRlZiBVTEZSQUNUX0ZCSVQKKyN1bmRlZiBVTEZSQUNUX01JTgorI3VuZGVmIFVMRlJBQ1RfTUFYCisjdW5kZWYgVUxGUkFDVF9FUFNJTE9OCisjZGVmaW5lIFVMRlJBQ1RfRkJJVAlfX1VMRlJBQ1RfRkJJVF9fCisjZGVmaW5lIFVMRlJBQ1RfTUlOCV9fVUxGUkFDVF9NSU5fXwkJLyogR0NDIGV4dGVuc2lvbi4gICovCisjZGVmaW5lIFVMRlJBQ1RfTUFYCV9fVUxGUkFDVF9NQVhfXworI2RlZmluZSBVTEZSQUNUX0VQU0lMT04JX19VTEZSQUNUX0VQU0lMT05fXworCisjdW5kZWYgTExGUkFDVF9GQklUCisjdW5kZWYgTExGUkFDVF9NSU4KKyN1bmRlZiBMTEZSQUNUX01BWAorI3VuZGVmIExMRlJBQ1RfRVBTSUxPTgorI2RlZmluZSBMTEZSQUNUX0ZCSVQJX19MTEZSQUNUX0ZCSVRfXwkvKiBHQ0MgZXh0ZW5zaW9uLiAgKi8KKyNkZWZpbmUgTExGUkFDVF9NSU4JX19MTEZSQUNUX01JTl9fCQkvKiBHQ0MgZXh0ZW5zaW9uLiAgKi8KKyNkZWZpbmUgTExGUkFDVF9NQVgJX19MTEZSQUNUX01BWF9fCQkvKiBHQ0MgZXh0ZW5zaW9uLiAgKi8KKyNkZWZpbmUgTExGUkFDVF9FUFNJTE9OCV9fTExGUkFDVF9FUFNJTE9OX18JLyogR0NDIGV4dGVuc2lvbi4gICovCisKKyN1bmRlZiBVTExGUkFDVF9GQklUCisjdW5kZWYgVUxMRlJBQ1RfTUlOCisjdW5kZWYgVUxMRlJBQ1RfTUFYCisjdW5kZWYgVUxMRlJBQ1RfRVBTSUxPTgorI2RlZmluZSBVTExGUkFDVF9GQklUCV9fVUxMRlJBQ1RfRkJJVF9fCS8qIEdDQyBleHRlbnNpb24uICAqLworI2RlZmluZSBVTExGUkFDVF9NSU4JX19VTExGUkFDVF9NSU5fXwkvKiBHQ0MgZXh0ZW5zaW9uLiAgKi8KKyNkZWZpbmUgVUxMRlJBQ1RfTUFYCV9fVUxMRlJBQ1RfTUFYX18JLyogR0NDIGV4dGVuc2lvbi4gICovCisjZGVmaW5lIFVMTEZSQUNUX0VQU0lMT04JX19VTExGUkFDVF9FUFNJTE9OX18JLyogR0NDIGV4dGVuc2lvbi4gICovCisKKyN1bmRlZiBTQUNDVU1fRkJJVAorI3VuZGVmIFNBQ0NVTV9JQklUCisjdW5kZWYgU0FDQ1VNX01JTgorI3VuZGVmIFNBQ0NVTV9NQVgKKyN1bmRlZiBTQUNDVU1fRVBTSUxPTgorI2RlZmluZSBTQUNDVU1fRkJJVAlfX1NBQ0NVTV9GQklUX18KKyNkZWZpbmUgU0FDQ1VNX0lCSVQJX19TQUNDVU1fSUJJVF9fCisjZGVmaW5lIFNBQ0NVTV9NSU4JX19TQUNDVU1fTUlOX18KKyNkZWZpbmUgU0FDQ1VNX01BWAlfX1NBQ0NVTV9NQVhfXworI2RlZmluZSBTQUNDVU1fRVBTSUxPTglfX1NBQ0NVTV9FUFNJTE9OX18KKworI3VuZGVmIFVTQUNDVU1fRkJJVAorI3VuZGVmIFVTQUNDVU1fSUJJVAorI3VuZGVmIFVTQUNDVU1fTUlOCisjdW5kZWYgVVNBQ0NVTV9NQVgKKyN1bmRlZiBVU0FDQ1VNX0VQU0lMT04KKyNkZWZpbmUgVVNBQ0NVTV9GQklUCV9fVVNBQ0NVTV9GQklUX18KKyNkZWZpbmUgVVNBQ0NVTV9JQklUCV9fVVNBQ0NVTV9JQklUX18KKyNkZWZpbmUgVVNBQ0NVTV9NSU4JX19VU0FDQ1VNX01JTl9fCQkvKiBHQ0MgZXh0ZW5zaW9uLiAgKi8KKyNkZWZpbmUgVVNBQ0NVTV9NQVgJX19VU0FDQ1VNX01BWF9fCisjZGVmaW5lIFVTQUNDVU1fRVBTSUxPTglfX1VTQUNDVU1fRVBTSUxPTl9fCisKKyN1bmRlZiBBQ0NVTV9GQklUCisjdW5kZWYgQUNDVU1fSUJJVAorI3VuZGVmIEFDQ1VNX01JTgorI3VuZGVmIEFDQ1VNX01BWAorI3VuZGVmIEFDQ1VNX0VQU0lMT04KKyNkZWZpbmUgQUNDVU1fRkJJVAlfX0FDQ1VNX0ZCSVRfXworI2RlZmluZSBBQ0NVTV9JQklUCV9fQUNDVU1fSUJJVF9fCisjZGVmaW5lIEFDQ1VNX01JTglfX0FDQ1VNX01JTl9fCisjZGVmaW5lIEFDQ1VNX01BWAlfX0FDQ1VNX01BWF9fCisjZGVmaW5lIEFDQ1VNX0VQU0lMT04JX19BQ0NVTV9FUFNJTE9OX18KKworI3VuZGVmIFVBQ0NVTV9GQklUCisjdW5kZWYgVUFDQ1VNX0lCSVQKKyN1bmRlZiBVQUNDVU1fTUlOCisjdW5kZWYgVUFDQ1VNX01BWAorI3VuZGVmIFVBQ0NVTV9FUFNJTE9OCisjZGVmaW5lIFVBQ0NVTV9GQklUCV9fVUFDQ1VNX0ZCSVRfXworI2RlZmluZSBVQUNDVU1fSUJJVAlfX1VBQ0NVTV9JQklUX18KKyNkZWZpbmUgVUFDQ1VNX01JTglfX1VBQ0NVTV9NSU5fXwkJLyogR0NDIGV4dGVuc2lvbi4gICovCisjZGVmaW5lIFVBQ0NVTV9NQVgJX19VQUNDVU1fTUFYX18KKyNkZWZpbmUgVUFDQ1VNX0VQU0lMT04JX19VQUNDVU1fRVBTSUxPTl9fCisKKyN1bmRlZiBMQUNDVU1fRkJJVAorI3VuZGVmIExBQ0NVTV9JQklUCisjdW5kZWYgTEFDQ1VNX01JTgorI3VuZGVmIExBQ0NVTV9NQVgKKyN1bmRlZiBMQUNDVU1fRVBTSUxPTgorI2RlZmluZSBMQUNDVU1fRkJJVAlfX0xBQ0NVTV9GQklUX18KKyNkZWZpbmUgTEFDQ1VNX0lCSVQJX19MQUNDVU1fSUJJVF9fCisjZGVmaW5lIExBQ0NVTV9NSU4JX19MQUNDVU1fTUlOX18KKyNkZWZpbmUgTEFDQ1VNX01BWAlfX0xBQ0NVTV9NQVhfXworI2RlZmluZSBMQUNDVU1fRVBTSUxPTglfX0xBQ0NVTV9FUFNJTE9OX18KKworI3VuZGVmIFVMQUNDVU1fRkJJVAorI3VuZGVmIFVMQUNDVU1fSUJJVAorI3VuZGVmIFVMQUNDVU1fTUlOCisjdW5kZWYgVUxBQ0NVTV9NQVgKKyN1bmRlZiBVTEFDQ1VNX0VQU0lMT04KKyNkZWZpbmUgVUxBQ0NVTV9GQklUCV9fVUxBQ0NVTV9GQklUX18KKyNkZWZpbmUgVUxBQ0NVTV9JQklUCV9fVUxBQ0NVTV9JQklUX18KKyNkZWZpbmUgVUxBQ0NVTV9NSU4JX19VTEFDQ1VNX01JTl9fCQkvKiBHQ0MgZXh0ZW5zaW9uLiAgKi8KKyNkZWZpbmUgVUxBQ0NVTV9NQVgJX19VTEFDQ1VNX01BWF9fCisjZGVmaW5lIFVMQUNDVU1fRVBTSUxPTglfX1VMQUNDVU1fRVBTSUxPTl9fCisKKyN1bmRlZiBMTEFDQ1VNX0ZCSVQKKyN1bmRlZiBMTEFDQ1VNX0lCSVQKKyN1bmRlZiBMTEFDQ1VNX01JTgorI3VuZGVmIExMQUNDVU1fTUFYCisjdW5kZWYgTExBQ0NVTV9FUFNJTE9OCisjZGVmaW5lIExMQUNDVU1fRkJJVAlfX0xMQUNDVU1fRkJJVF9fCS8qIEdDQyBleHRlbnNpb24uICAqLworI2RlZmluZSBMTEFDQ1VNX0lCSVQJX19MTEFDQ1VNX0lCSVRfXwkvKiBHQ0MgZXh0ZW5zaW9uLiAgKi8KKyNkZWZpbmUgTExBQ0NVTV9NSU4JX19MTEFDQ1VNX01JTl9fCQkvKiBHQ0MgZXh0ZW5zaW9uLiAgKi8KKyNkZWZpbmUgTExBQ0NVTV9NQVgJX19MTEFDQ1VNX01BWF9fCQkvKiBHQ0MgZXh0ZW5zaW9uLiAgKi8KKyNkZWZpbmUgTExBQ0NVTV9FUFNJTE9OCV9fTExBQ0NVTV9FUFNJTE9OX18JLyogR0NDIGV4dGVuc2lvbi4gICovCisKKyN1bmRlZiBVTExBQ0NVTV9GQklUCisjdW5kZWYgVUxMQUNDVU1fSUJJVAorI3VuZGVmIFVMTEFDQ1VNX01JTgorI3VuZGVmIFVMTEFDQ1VNX01BWAorI3VuZGVmIFVMTEFDQ1VNX0VQU0lMT04KKyNkZWZpbmUgVUxMQUNDVU1fRkJJVAlfX1VMTEFDQ1VNX0ZCSVRfXwkvKiBHQ0MgZXh0ZW5zaW9uLiAgKi8KKyNkZWZpbmUgVUxMQUNDVU1fSUJJVAlfX1VMTEFDQ1VNX0lCSVRfXwkvKiBHQ0MgZXh0ZW5zaW9uLiAgKi8KKyNkZWZpbmUgVUxMQUNDVU1fTUlOCV9fVUxMQUNDVU1fTUlOX18JLyogR0NDIGV4dGVuc2lvbi4gICovCisjZGVmaW5lIFVMTEFDQ1VNX01BWAlfX1VMTEFDQ1VNX01BWF9fCS8qIEdDQyBleHRlbnNpb24uICAqLworI2RlZmluZSBVTExBQ0NVTV9FUFNJTE9OCV9fVUxMQUNDVU1fRVBTSUxPTl9fCS8qIEdDQyBleHRlbnNpb24uICAqLworCisjZW5kaWYgLyogX1NUREZJWF9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5jbHVkZS9zdGRpbnQtZ2NjLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5jbHVkZS9zdGRpbnQtZ2NjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI3ODBhMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9pbmNsdWRlL3N0ZGludC1nY2MuaApAQCAtMCwwICsxLDI1OSBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1VuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCithIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKgorICogSVNPIEMgU3RhbmRhcmQ6ICA3LjE4ICBJbnRlZ2VyIHR5cGVzICA8c3RkaW50Lmg+CisgKi8KKworI2lmbmRlZiBfR0NDX1NURElOVF9ICisjZGVmaW5lIF9HQ0NfU1RESU5UX0gKKworLyogNy44LjEuMSBFeGFjdC13aWR0aCBpbnRlZ2VyIHR5cGVzICovCisKKyNpZmRlZiBfX0lOVDhfVFlQRV9fCit0eXBlZGVmIF9fSU5UOF9UWVBFX18gaW50OF90OworI2VuZGlmCisjaWZkZWYgX19JTlQxNl9UWVBFX18KK3R5cGVkZWYgX19JTlQxNl9UWVBFX18gaW50MTZfdDsKKyNlbmRpZgorI2lmZGVmIF9fSU5UMzJfVFlQRV9fCit0eXBlZGVmIF9fSU5UMzJfVFlQRV9fIGludDMyX3Q7CisjZW5kaWYKKyNpZmRlZiBfX0lOVDY0X1RZUEVfXwordHlwZWRlZiBfX0lOVDY0X1RZUEVfXyBpbnQ2NF90OworI2VuZGlmCisjaWZkZWYgX19VSU5UOF9UWVBFX18KK3R5cGVkZWYgX19VSU5UOF9UWVBFX18gdWludDhfdDsKKyNlbmRpZgorI2lmZGVmIF9fVUlOVDE2X1RZUEVfXwordHlwZWRlZiBfX1VJTlQxNl9UWVBFX18gdWludDE2X3Q7CisjZW5kaWYKKyNpZmRlZiBfX1VJTlQzMl9UWVBFX18KK3R5cGVkZWYgX19VSU5UMzJfVFlQRV9fIHVpbnQzMl90OworI2VuZGlmCisjaWZkZWYgX19VSU5UNjRfVFlQRV9fCit0eXBlZGVmIF9fVUlOVDY0X1RZUEVfXyB1aW50NjRfdDsKKyNlbmRpZgorCisvKiA3LjguMS4yIE1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcyAqLworCit0eXBlZGVmIF9fSU5UX0xFQVNUOF9UWVBFX18gaW50X2xlYXN0OF90OwordHlwZWRlZiBfX0lOVF9MRUFTVDE2X1RZUEVfXyBpbnRfbGVhc3QxNl90OwordHlwZWRlZiBfX0lOVF9MRUFTVDMyX1RZUEVfXyBpbnRfbGVhc3QzMl90OwordHlwZWRlZiBfX0lOVF9MRUFTVDY0X1RZUEVfXyBpbnRfbGVhc3Q2NF90OwordHlwZWRlZiBfX1VJTlRfTEVBU1Q4X1RZUEVfXyB1aW50X2xlYXN0OF90OwordHlwZWRlZiBfX1VJTlRfTEVBU1QxNl9UWVBFX18gdWludF9sZWFzdDE2X3Q7Cit0eXBlZGVmIF9fVUlOVF9MRUFTVDMyX1RZUEVfXyB1aW50X2xlYXN0MzJfdDsKK3R5cGVkZWYgX19VSU5UX0xFQVNUNjRfVFlQRV9fIHVpbnRfbGVhc3Q2NF90OworCisvKiA3LjguMS4zIEZhc3Rlc3QgbWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVzICovCisKK3R5cGVkZWYgX19JTlRfRkFTVDhfVFlQRV9fIGludF9mYXN0OF90OwordHlwZWRlZiBfX0lOVF9GQVNUMTZfVFlQRV9fIGludF9mYXN0MTZfdDsKK3R5cGVkZWYgX19JTlRfRkFTVDMyX1RZUEVfXyBpbnRfZmFzdDMyX3Q7Cit0eXBlZGVmIF9fSU5UX0ZBU1Q2NF9UWVBFX18gaW50X2Zhc3Q2NF90OwordHlwZWRlZiBfX1VJTlRfRkFTVDhfVFlQRV9fIHVpbnRfZmFzdDhfdDsKK3R5cGVkZWYgX19VSU5UX0ZBU1QxNl9UWVBFX18gdWludF9mYXN0MTZfdDsKK3R5cGVkZWYgX19VSU5UX0ZBU1QzMl9UWVBFX18gdWludF9mYXN0MzJfdDsKK3R5cGVkZWYgX19VSU5UX0ZBU1Q2NF9UWVBFX18gdWludF9mYXN0NjRfdDsKKworLyogNy44LjEuNCBJbnRlZ2VyIHR5cGVzIGNhcGFibGUgb2YgaG9sZGluZyBvYmplY3QgcG9pbnRlcnMgKi8KKworI2lmZGVmIF9fSU5UUFRSX1RZUEVfXwordHlwZWRlZiBfX0lOVFBUUl9UWVBFX18gaW50cHRyX3Q7CisjZW5kaWYKKyNpZmRlZiBfX1VJTlRQVFJfVFlQRV9fCit0eXBlZGVmIF9fVUlOVFBUUl9UWVBFX18gdWludHB0cl90OworI2VuZGlmCisKKy8qIDcuOC4xLjUgR3JlYXRlc3Qtd2lkdGggaW50ZWdlciB0eXBlcyAqLworCit0eXBlZGVmIF9fSU5UTUFYX1RZUEVfXyBpbnRtYXhfdDsKK3R5cGVkZWYgX19VSU5UTUFYX1RZUEVfXyB1aW50bWF4X3Q7CisKKyNpZiAhZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9fU1REQ19MSU1JVF9NQUNST1MKKworLyogNy4xOC4yIExpbWl0cyBvZiBzcGVjaWZpZWQtd2lkdGggaW50ZWdlciB0eXBlcyAqLworCisjaWZkZWYgX19JTlQ4X01BWF9fCisjIHVuZGVmIElOVDhfTUFYCisjIGRlZmluZSBJTlQ4X01BWCBfX0lOVDhfTUFYX18KKyMgdW5kZWYgSU5UOF9NSU4KKyMgZGVmaW5lIElOVDhfTUlOICgtSU5UOF9NQVggLSAxKQorI2VuZGlmCisjaWZkZWYgX19VSU5UOF9NQVhfXworIyB1bmRlZiBVSU5UOF9NQVgKKyMgZGVmaW5lIFVJTlQ4X01BWCBfX1VJTlQ4X01BWF9fCisjZW5kaWYKKyNpZmRlZiBfX0lOVDE2X01BWF9fCisjIHVuZGVmIElOVDE2X01BWAorIyBkZWZpbmUgSU5UMTZfTUFYIF9fSU5UMTZfTUFYX18KKyMgdW5kZWYgSU5UMTZfTUlOCisjIGRlZmluZSBJTlQxNl9NSU4gKC1JTlQxNl9NQVggLSAxKQorI2VuZGlmCisjaWZkZWYgX19VSU5UMTZfTUFYX18KKyMgdW5kZWYgVUlOVDE2X01BWAorIyBkZWZpbmUgVUlOVDE2X01BWCBfX1VJTlQxNl9NQVhfXworI2VuZGlmCisjaWZkZWYgX19JTlQzMl9NQVhfXworIyB1bmRlZiBJTlQzMl9NQVgKKyMgZGVmaW5lIElOVDMyX01BWCBfX0lOVDMyX01BWF9fCisjIHVuZGVmIElOVDMyX01JTgorIyBkZWZpbmUgSU5UMzJfTUlOICgtSU5UMzJfTUFYIC0gMSkKKyNlbmRpZgorI2lmZGVmIF9fVUlOVDMyX01BWF9fCisjIHVuZGVmIFVJTlQzMl9NQVgKKyMgZGVmaW5lIFVJTlQzMl9NQVggX19VSU5UMzJfTUFYX18KKyNlbmRpZgorI2lmZGVmIF9fSU5UNjRfTUFYX18KKyMgdW5kZWYgSU5UNjRfTUFYCisjIGRlZmluZSBJTlQ2NF9NQVggX19JTlQ2NF9NQVhfXworIyB1bmRlZiBJTlQ2NF9NSU4KKyMgZGVmaW5lIElOVDY0X01JTiAoLUlOVDY0X01BWCAtIDEpCisjZW5kaWYKKyNpZmRlZiBfX1VJTlQ2NF9NQVhfXworIyB1bmRlZiBVSU5UNjRfTUFYCisjIGRlZmluZSBVSU5UNjRfTUFYIF9fVUlOVDY0X01BWF9fCisjZW5kaWYKKworI3VuZGVmIElOVF9MRUFTVDhfTUFYCisjZGVmaW5lIElOVF9MRUFTVDhfTUFYIF9fSU5UX0xFQVNUOF9NQVhfXworI3VuZGVmIElOVF9MRUFTVDhfTUlOCisjZGVmaW5lIElOVF9MRUFTVDhfTUlOICgtSU5UX0xFQVNUOF9NQVggLSAxKQorI3VuZGVmIFVJTlRfTEVBU1Q4X01BWAorI2RlZmluZSBVSU5UX0xFQVNUOF9NQVggX19VSU5UX0xFQVNUOF9NQVhfXworI3VuZGVmIElOVF9MRUFTVDE2X01BWAorI2RlZmluZSBJTlRfTEVBU1QxNl9NQVggX19JTlRfTEVBU1QxNl9NQVhfXworI3VuZGVmIElOVF9MRUFTVDE2X01JTgorI2RlZmluZSBJTlRfTEVBU1QxNl9NSU4gKC1JTlRfTEVBU1QxNl9NQVggLSAxKQorI3VuZGVmIFVJTlRfTEVBU1QxNl9NQVgKKyNkZWZpbmUgVUlOVF9MRUFTVDE2X01BWCBfX1VJTlRfTEVBU1QxNl9NQVhfXworI3VuZGVmIElOVF9MRUFTVDMyX01BWAorI2RlZmluZSBJTlRfTEVBU1QzMl9NQVggX19JTlRfTEVBU1QzMl9NQVhfXworI3VuZGVmIElOVF9MRUFTVDMyX01JTgorI2RlZmluZSBJTlRfTEVBU1QzMl9NSU4gKC1JTlRfTEVBU1QzMl9NQVggLSAxKQorI3VuZGVmIFVJTlRfTEVBU1QzMl9NQVgKKyNkZWZpbmUgVUlOVF9MRUFTVDMyX01BWCBfX1VJTlRfTEVBU1QzMl9NQVhfXworI3VuZGVmIElOVF9MRUFTVDY0X01BWAorI2RlZmluZSBJTlRfTEVBU1Q2NF9NQVggX19JTlRfTEVBU1Q2NF9NQVhfXworI3VuZGVmIElOVF9MRUFTVDY0X01JTgorI2RlZmluZSBJTlRfTEVBU1Q2NF9NSU4gKC1JTlRfTEVBU1Q2NF9NQVggLSAxKQorI3VuZGVmIFVJTlRfTEVBU1Q2NF9NQVgKKyNkZWZpbmUgVUlOVF9MRUFTVDY0X01BWCBfX1VJTlRfTEVBU1Q2NF9NQVhfXworCisjdW5kZWYgSU5UX0ZBU1Q4X01BWAorI2RlZmluZSBJTlRfRkFTVDhfTUFYIF9fSU5UX0ZBU1Q4X01BWF9fCisjdW5kZWYgSU5UX0ZBU1Q4X01JTgorI2RlZmluZSBJTlRfRkFTVDhfTUlOICgtSU5UX0ZBU1Q4X01BWCAtIDEpCisjdW5kZWYgVUlOVF9GQVNUOF9NQVgKKyNkZWZpbmUgVUlOVF9GQVNUOF9NQVggX19VSU5UX0ZBU1Q4X01BWF9fCisjdW5kZWYgSU5UX0ZBU1QxNl9NQVgKKyNkZWZpbmUgSU5UX0ZBU1QxNl9NQVggX19JTlRfRkFTVDE2X01BWF9fCisjdW5kZWYgSU5UX0ZBU1QxNl9NSU4KKyNkZWZpbmUgSU5UX0ZBU1QxNl9NSU4gKC1JTlRfRkFTVDE2X01BWCAtIDEpCisjdW5kZWYgVUlOVF9GQVNUMTZfTUFYCisjZGVmaW5lIFVJTlRfRkFTVDE2X01BWCBfX1VJTlRfRkFTVDE2X01BWF9fCisjdW5kZWYgSU5UX0ZBU1QzMl9NQVgKKyNkZWZpbmUgSU5UX0ZBU1QzMl9NQVggX19JTlRfRkFTVDMyX01BWF9fCisjdW5kZWYgSU5UX0ZBU1QzMl9NSU4KKyNkZWZpbmUgSU5UX0ZBU1QzMl9NSU4gKC1JTlRfRkFTVDMyX01BWCAtIDEpCisjdW5kZWYgVUlOVF9GQVNUMzJfTUFYCisjZGVmaW5lIFVJTlRfRkFTVDMyX01BWCBfX1VJTlRfRkFTVDMyX01BWF9fCisjdW5kZWYgSU5UX0ZBU1Q2NF9NQVgKKyNkZWZpbmUgSU5UX0ZBU1Q2NF9NQVggX19JTlRfRkFTVDY0X01BWF9fCisjdW5kZWYgSU5UX0ZBU1Q2NF9NSU4KKyNkZWZpbmUgSU5UX0ZBU1Q2NF9NSU4gKC1JTlRfRkFTVDY0X01BWCAtIDEpCisjdW5kZWYgVUlOVF9GQVNUNjRfTUFYCisjZGVmaW5lIFVJTlRfRkFTVDY0X01BWCBfX1VJTlRfRkFTVDY0X01BWF9fCisKKyNpZmRlZiBfX0lOVFBUUl9NQVhfXworIyB1bmRlZiBJTlRQVFJfTUFYCisjIGRlZmluZSBJTlRQVFJfTUFYIF9fSU5UUFRSX01BWF9fCisjIHVuZGVmIElOVFBUUl9NSU4KKyMgZGVmaW5lIElOVFBUUl9NSU4gKC1JTlRQVFJfTUFYIC0gMSkKKyNlbmRpZgorI2lmZGVmIF9fVUlOVFBUUl9NQVhfXworIyB1bmRlZiBVSU5UUFRSX01BWAorIyBkZWZpbmUgVUlOVFBUUl9NQVggX19VSU5UUFRSX01BWF9fCisjZW5kaWYKKworI3VuZGVmIElOVE1BWF9NQVgKKyNkZWZpbmUgSU5UTUFYX01BWCBfX0lOVE1BWF9NQVhfXworI3VuZGVmIElOVE1BWF9NSU4KKyNkZWZpbmUgSU5UTUFYX01JTiAoLUlOVE1BWF9NQVggLSAxKQorI3VuZGVmIFVJTlRNQVhfTUFYCisjZGVmaW5lIFVJTlRNQVhfTUFYIF9fVUlOVE1BWF9NQVhfXworCisvKiA3LjE4LjMgTGltaXRzIG9mIG90aGVyIGludGVnZXIgdHlwZXMgKi8KKworI3VuZGVmIFBUUkRJRkZfTUFYCisjZGVmaW5lIFBUUkRJRkZfTUFYIF9fUFRSRElGRl9NQVhfXworI3VuZGVmIFBUUkRJRkZfTUlOCisjZGVmaW5lIFBUUkRJRkZfTUlOICgtUFRSRElGRl9NQVggLSAxKQorCisjdW5kZWYgU0lHX0FUT01JQ19NQVgKKyNkZWZpbmUgU0lHX0FUT01JQ19NQVggX19TSUdfQVRPTUlDX01BWF9fCisjdW5kZWYgU0lHX0FUT01JQ19NSU4KKyNkZWZpbmUgU0lHX0FUT01JQ19NSU4gX19TSUdfQVRPTUlDX01JTl9fCisKKyN1bmRlZiBTSVpFX01BWAorI2RlZmluZSBTSVpFX01BWCBfX1NJWkVfTUFYX18KKworI3VuZGVmIFdDSEFSX01BWAorI2RlZmluZSBXQ0hBUl9NQVggX19XQ0hBUl9NQVhfXworI3VuZGVmIFdDSEFSX01JTgorI2RlZmluZSBXQ0hBUl9NSU4gX19XQ0hBUl9NSU5fXworCisjdW5kZWYgV0lOVF9NQVgKKyNkZWZpbmUgV0lOVF9NQVggX19XSU5UX01BWF9fCisjdW5kZWYgV0lOVF9NSU4KKyNkZWZpbmUgV0lOVF9NSU4gX19XSU5UX01JTl9fCisKKyNlbmRpZiAvKiAhZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9fU1REQ19MSU1JVF9NQUNST1MgKi8KKworI2lmICFkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX19TVERDX0NPTlNUQU5UX01BQ1JPUworCisjdW5kZWYgSU5UOF9DCisjZGVmaW5lIElOVDhfQyhjKSBfX0lOVDhfQyhjKQorI3VuZGVmIElOVDE2X0MKKyNkZWZpbmUgSU5UMTZfQyhjKSBfX0lOVDE2X0MoYykKKyN1bmRlZiBJTlQzMl9DCisjZGVmaW5lIElOVDMyX0MoYykgX19JTlQzMl9DKGMpCisjdW5kZWYgSU5UNjRfQworI2RlZmluZSBJTlQ2NF9DKGMpIF9fSU5UNjRfQyhjKQorI3VuZGVmIFVJTlQ4X0MKKyNkZWZpbmUgVUlOVDhfQyhjKSBfX1VJTlQ4X0MoYykKKyN1bmRlZiBVSU5UMTZfQworI2RlZmluZSBVSU5UMTZfQyhjKSBfX1VJTlQxNl9DKGMpCisjdW5kZWYgVUlOVDMyX0MKKyNkZWZpbmUgVUlOVDMyX0MoYykgX19VSU5UMzJfQyhjKQorI3VuZGVmIFVJTlQ2NF9DCisjZGVmaW5lIFVJTlQ2NF9DKGMpIF9fVUlOVDY0X0MoYykKKyN1bmRlZiBJTlRNQVhfQworI2RlZmluZSBJTlRNQVhfQyhjKSBfX0lOVE1BWF9DKGMpCisjdW5kZWYgVUlOVE1BWF9DCisjZGVmaW5lIFVJTlRNQVhfQyhjKSBfX1VJTlRNQVhfQyhjKQorCisjZW5kaWYgLyogIWRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfX1NURENfQ09OU1RBTlRfTUFDUk9TICovCisKKyNlbmRpZiAvKiBfR0NDX1NURElOVF9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5jbHVkZS9zdGRpbnQuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9pbmNsdWRlL3N0ZGludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NWY4MTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5jbHVkZS9zdGRpbnQuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX0dDQ19XUkFQX1NURElOVF9ICisjaWYgX19TVERDX0hPU1RFRF9fCisjIGluY2x1ZGVfbmV4dCA8c3RkaW50Lmg+CisjZWxzZQorIyBpbmNsdWRlICJzdGRpbnQtZ2NjLmgiCisjZW5kaWYKKyNkZWZpbmUgX0dDQ19XUkFQX1NURElOVF9ICisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9pbmNsdWRlL3Vud2luZC5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luY2x1ZGUvdW53aW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTliYTEyNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9pbmNsdWRlL3Vud2luZC5oCkBAIC0wLDAgKzEsMjgxIEBACisvKiBIZWFkZXIgZmlsZSBmb3IgdGhlIEFSTSBFQUJJIHVud2luZGVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgUGF1bCBCcm9vaworCisgICBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKyAgIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKyAgIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorICAgYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKyAgIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogTGFuZ3VhZ2UtaW5kZXBlbmRlbnQgdW53aW5kZXIgaGVhZGVyIHB1YmxpYyBkZWZpbmVzLiAgVGhpcyBjb250YWlucyBib3RoCisgICBBQkkgZGVmaW5lZCBvYmplY3RzLCBhbmQgR05VIHN1cHBvcnQgcm91dGluZXMuICAqLworCisjaWZuZGVmIFVOV0lORF9BUk1fSAorI2RlZmluZSBVTldJTkRfQVJNX0gKKworI2RlZmluZSBfX0FSTV9FQUJJX1VOV0lOREVSX18gMQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisgIHR5cGVkZWYgdW5zaWduZWQgX1Vud2luZF9Xb3JkIF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fd29yZF9fKSkpOworICB0eXBlZGVmIHNpZ25lZCBfVW53aW5kX1N3b3JkIF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fd29yZF9fKSkpOworICB0eXBlZGVmIHVuc2lnbmVkIF9VbndpbmRfUHRyIF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fcG9pbnRlcl9fKSkpOworICB0eXBlZGVmIHVuc2lnbmVkIF9VbndpbmRfSW50ZXJuYWxfUHRyIF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fcG9pbnRlcl9fKSkpOworICB0eXBlZGVmIF9VbndpbmRfV29yZCBfdXc7CisgIHR5cGVkZWYgdW5zaWduZWQgX3V3NjQgX19hdHRyaWJ1dGVfXygobW9kZShfX0RJX18pKSk7CisgIHR5cGVkZWYgdW5zaWduZWQgX3V3MTYgX19hdHRyaWJ1dGVfXygobW9kZShfX0hJX18pKSk7CisgIHR5cGVkZWYgdW5zaWduZWQgX3V3OCBfX2F0dHJpYnV0ZV9fKChtb2RlKF9fUUlfXykpKTsKKworICB0eXBlZGVmIGVudW0KKyAgICB7CisgICAgICBfVVJDX09LID0gMCwgICAgICAgLyogb3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgKi8KKyAgICAgIF9VUkNfRk9SRUlHTl9FWENFUFRJT05fQ0FVR0hUID0gMSwKKyAgICAgIF9VUkNfRU5EX09GX1NUQUNLID0gNSwKKyAgICAgIF9VUkNfSEFORExFUl9GT1VORCA9IDYsCisgICAgICBfVVJDX0lOU1RBTExfQ09OVEVYVCA9IDcsCisgICAgICBfVVJDX0NPTlRJTlVFX1VOV0lORCA9IDgsCisgICAgICBfVVJDX0ZBSUxVUkUgPSA5ICAgLyogdW5zcGVjaWZpZWQgZmFpbHVyZSBvZiBzb21lIGtpbmQgKi8KKyAgICB9CisgIF9VbndpbmRfUmVhc29uX0NvZGU7CisKKyAgdHlwZWRlZiBlbnVtCisgICAgeworICAgICAgX1VTX1ZJUlRVQUxfVU5XSU5EX0ZSQU1FID0gMCwKKyAgICAgIF9VU19VTldJTkRfRlJBTUVfU1RBUlRJTkcgPSAxLAorICAgICAgX1VTX1VOV0lORF9GUkFNRV9SRVNVTUUgPSAyLAorICAgICAgX1VTX0FDVElPTl9NQVNLID0gMywKKyAgICAgIF9VU19GT1JDRV9VTldJTkQgPSA4LAorICAgICAgX1VTX0VORF9PRl9TVEFDSyA9IDE2CisgICAgfQorICBfVW53aW5kX1N0YXRlOworCisgIC8qIFByb3ZpZGVkIG9ubHkgZm9yIGZvciBjb21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcgY29kZS4gICovCisgIHR5cGVkZWYgaW50IF9VbndpbmRfQWN0aW9uOworI2RlZmluZSBfVUFfU0VBUkNIX1BIQVNFCTEKKyNkZWZpbmUgX1VBX0NMRUFOVVBfUEhBU0UJMgorI2RlZmluZSBfVUFfSEFORExFUl9GUkFNRQk0CisjZGVmaW5lIF9VQV9GT1JDRV9VTldJTkQJOAorI2RlZmluZSBfVUFfRU5EX09GX1NUQUNLCTE2CisjZGVmaW5lIF9VUkNfTk9fUkVBU09OIAlfVVJDX09LCisKKyAgdHlwZWRlZiBzdHJ1Y3QgX1Vud2luZF9Db250cm9sX0Jsb2NrIF9VbndpbmRfQ29udHJvbF9CbG9jazsKKyAgdHlwZWRlZiBzdHJ1Y3QgX1Vud2luZF9Db250ZXh0IF9VbndpbmRfQ29udGV4dDsKKyAgdHlwZWRlZiBfdXcgX1Vud2luZF9FSFRfSGVhZGVyOworCisKKyAgLyogVUNCOiAqLworCisgIHN0cnVjdCBfVW53aW5kX0NvbnRyb2xfQmxvY2sKKyAgICB7CisgICAgICBjaGFyIGV4Y2VwdGlvbl9jbGFzc1s4XTsKKyAgICAgIHZvaWQgKCpleGNlcHRpb25fY2xlYW51cCkoX1Vud2luZF9SZWFzb25fQ29kZSwgX1Vud2luZF9Db250cm9sX0Jsb2NrICopOworICAgICAgLyogVW53aW5kZXIgY2FjaGUsIHByaXZhdGUgZmllbGRzIGZvciB0aGUgdW53aW5kZXIncyB1c2UgKi8KKyAgICAgIHN0cnVjdAorCXsKKwkgIF91dyByZXNlcnZlZDE7ICAvKiBGb3JjZWQgdW53aW5kIHN0b3AgZm4sIDAgaWYgbm90IGZvcmNlZCAqLworCSAgX3V3IHJlc2VydmVkMjsgIC8qIFBlcnNvbmFsaXR5IHJvdXRpbmUgYWRkcmVzcyAqLworCSAgX3V3IHJlc2VydmVkMzsgIC8qIFNhdmVkIGNhbGxzaXRlIGFkZHJlc3MgKi8KKwkgIF91dyByZXNlcnZlZDQ7ICAvKiBGb3JjZWQgdW53aW5kIHN0b3AgYXJnICovCisJICBfdXcgcmVzZXJ2ZWQ1OworCX0KKyAgICAgIHVud2luZGVyX2NhY2hlOworICAgICAgLyogUHJvcGFnYXRpb24gYmFycmllciBjYWNoZSAodmFsaWQgYWZ0ZXIgcGhhc2UgMSk6ICovCisgICAgICBzdHJ1Y3QKKwl7CisJICBfdXcgc3A7CisJICBfdXcgYml0cGF0dGVybls1XTsKKwl9CisgICAgICBiYXJyaWVyX2NhY2hlOworICAgICAgLyogQ2xlYW51cCBjYWNoZSAocHJlc2VydmVkIG92ZXIgY2xlYW51cCk6ICovCisgICAgICBzdHJ1Y3QKKwl7CisJICBfdXcgYml0cGF0dGVybls0XTsKKwl9CisgICAgICBjbGVhbnVwX2NhY2hlOworICAgICAgLyogUHIgY2FjaGUgKGZvciBwcidzIGJlbmVmaXQpOiAqLworICAgICAgc3RydWN0CisJeworCSAgX3V3IGZuc3RhcnQ7CQkJLyogZnVuY3Rpb24gc3RhcnQgYWRkcmVzcyAqLworCSAgX1Vud2luZF9FSFRfSGVhZGVyICplaHRwOwkvKiBwb2ludGVyIHRvIEVIVCBlbnRyeSBoZWFkZXIgd29yZCAqLworCSAgX3V3IGFkZGl0aW9uYWw7CQkvKiBhZGRpdGlvbmFsIGRhdGEgKi8KKwkgIF91dyByZXNlcnZlZDE7CisJfQorICAgICAgcHJfY2FjaGU7CisgICAgICBsb25nIGxvbmcgaW50IDowOwkvKiBGb3JjZSBhbGlnbm1lbnQgdG8gOC1ieXRlIGJvdW5kYXJ5ICovCisgICAgfTsKKworICAvKiBWaXJ0dWFsIFJlZ2lzdGVyIFNldCovCisKKyAgdHlwZWRlZiBlbnVtCisgICAgeworICAgICAgX1VWUlNDX0NPUkUgPSAwLCAgICAgIC8qIGludGVnZXIgcmVnaXN0ZXIgKi8KKyAgICAgIF9VVlJTQ19WRlAgPSAxLCAgICAgICAvKiB2ZnAgKi8KKyAgICAgIF9VVlJTQ19GUEEgPSAyLCAgICAgICAvKiBmcGEgKi8KKyAgICAgIF9VVlJTQ19XTU1YRCA9IDMsICAgICAvKiBJbnRlbCBXTU1YIGRhdGEgcmVnaXN0ZXIgKi8KKyAgICAgIF9VVlJTQ19XTU1YQyA9IDQgICAgICAvKiBJbnRlbCBXTU1YIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyAgICB9CisgIF9VbndpbmRfVlJTX1JlZ0NsYXNzOworCisgIHR5cGVkZWYgZW51bQorICAgIHsKKyAgICAgIF9VVlJTRF9VSU5UMzIgPSAwLAorICAgICAgX1VWUlNEX1ZGUFggPSAxLAorICAgICAgX1VWUlNEX0ZQQVggPSAyLAorICAgICAgX1VWUlNEX1VJTlQ2NCA9IDMsCisgICAgICBfVVZSU0RfRkxPQVQgPSA0LAorICAgICAgX1VWUlNEX0RPVUJMRSA9IDUKKyAgICB9CisgIF9VbndpbmRfVlJTX0RhdGFSZXByZXNlbnRhdGlvbjsKKworICB0eXBlZGVmIGVudW0KKyAgICB7CisgICAgICBfVVZSU1JfT0sgPSAwLAorICAgICAgX1VWUlNSX05PVF9JTVBMRU1FTlRFRCA9IDEsCisgICAgICBfVVZSU1JfRkFJTEVEID0gMgorICAgIH0KKyAgX1Vud2luZF9WUlNfUmVzdWx0OworCisgIC8qIEZyYW1lIHVud2luZGluZyBzdGF0ZS4gICovCisgIHR5cGVkZWYgc3RydWN0CisgICAgeworICAgICAgLyogVGhlIGN1cnJlbnQgd29yZCAoYnl0ZXMgcGFja2VkIG1zYiBmaXJzdCkuICAqLworICAgICAgX3V3IGRhdGE7CisgICAgICAvKiBQb2ludGVyIHRvIHRoZSBuZXh0IHdvcmQgb2YgZGF0YS4gICovCisgICAgICBfdXcgKm5leHQ7CisgICAgICAvKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGxlZnQgaW4gdGhpcyB3b3JkLiAgKi8KKyAgICAgIF91dzggYnl0ZXNfbGVmdDsKKyAgICAgIC8qIFRoZSBudW1iZXIgb2Ygd29yZHMgcG9pbnRlZCB0byBieSBwdHIuICAqLworICAgICAgX3V3OCB3b3Jkc19sZWZ0OworICAgIH0KKyAgX19nbnVfdW53aW5kX3N0YXRlOworCisgIHR5cGVkZWYgX1Vud2luZF9SZWFzb25fQ29kZSAoKnBlcnNvbmFsaXR5X3JvdXRpbmUpIChfVW53aW5kX1N0YXRlLAorICAgICAgX1Vud2luZF9Db250cm9sX0Jsb2NrICosIF9VbndpbmRfQ29udGV4dCAqKTsKKworICBfVW53aW5kX1ZSU19SZXN1bHQgX1Vud2luZF9WUlNfU2V0KF9VbndpbmRfQ29udGV4dCAqLCBfVW53aW5kX1ZSU19SZWdDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdXcsIF9VbndpbmRfVlJTX0RhdGFSZXByZXNlbnRhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICopOworCisgIF9VbndpbmRfVlJTX1Jlc3VsdCBfVW53aW5kX1ZSU19HZXQoX1Vud2luZF9Db250ZXh0ICosIF9VbndpbmRfVlJTX1JlZ0NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF91dywgX1Vud2luZF9WUlNfRGF0YVJlcHJlc2VudGF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKik7CisKKyAgX1Vud2luZF9WUlNfUmVzdWx0IF9VbndpbmRfVlJTX1BvcChfVW53aW5kX0NvbnRleHQgKiwgX1Vud2luZF9WUlNfUmVnQ2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3V3LCBfVW53aW5kX1ZSU19EYXRhUmVwcmVzZW50YXRpb24pOworCisKKyAgLyogU3VwcG9ydCBmdW5jdGlvbnMgZm9yIHRoZSBQUi4gICovCisjZGVmaW5lIF9VbndpbmRfRXhjZXB0aW9uIF9VbndpbmRfQ29udHJvbF9CbG9jaworICB0eXBlZGVmIGNoYXIgX1Vud2luZF9FeGNlcHRpb25fQ2xhc3NbOF07CisKKyAgdm9pZCAqIF9VbndpbmRfR2V0TGFuZ3VhZ2VTcGVjaWZpY0RhdGEgKF9VbndpbmRfQ29udGV4dCAqKTsKKyAgX1Vud2luZF9QdHIgX1Vud2luZF9HZXRSZWdpb25TdGFydCAoX1Vud2luZF9Db250ZXh0ICopOworCisgIC8qIFRoZXNlIHR3byBzaG91bGQgbmV2ZXIgYmUgdXNlZC4gICovCisgIF9VbndpbmRfUHRyIF9VbndpbmRfR2V0RGF0YVJlbEJhc2UgKF9VbndpbmRfQ29udGV4dCAqKTsKKyAgX1Vud2luZF9QdHIgX1Vud2luZF9HZXRUZXh0UmVsQmFzZSAoX1Vud2luZF9Db250ZXh0ICopOworCisgIC8qIEludGVyZmFjZSBmdW5jdGlvbnM6ICovCisgIF9VbndpbmRfUmVhc29uX0NvZGUgX1Vud2luZF9SYWlzZUV4Y2VwdGlvbihfVW53aW5kX0NvbnRyb2xfQmxvY2sgKnVjYnApOworICB2b2lkIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkgX1Vud2luZF9SZXN1bWUoX1Vud2luZF9Db250cm9sX0Jsb2NrICp1Y2JwKTsKKyAgX1Vud2luZF9SZWFzb25fQ29kZSBfVW53aW5kX1Jlc3VtZV9vcl9SZXRocm93IChfVW53aW5kX0NvbnRyb2xfQmxvY2sgKnVjYnApOworCisgIHR5cGVkZWYgX1Vud2luZF9SZWFzb25fQ29kZSAoKl9VbndpbmRfU3RvcF9GbikKKyAgICAgICAoaW50LCBfVW53aW5kX0FjdGlvbiwgX1Vud2luZF9FeGNlcHRpb25fQ2xhc3MsCisJX1Vud2luZF9Db250cm9sX0Jsb2NrICosIHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKiwgdm9pZCAqKTsKKyAgX1Vud2luZF9SZWFzb25fQ29kZSBfVW53aW5kX0ZvcmNlZFVud2luZCAoX1Vud2luZF9Db250cm9sX0Jsb2NrICosCisJCQkJCSAgICBfVW53aW5kX1N0b3BfRm4sIHZvaWQgKik7CisgIC8qIEBAQCBVc2UgdW53aW5kIGRhdGEgdG8gcGVyZm9ybSBhIHN0YWNrIGJhY2t0cmFjZS4gIFRoZSB0cmFjZSBjYWxsYmFjaworICAgICBpcyBjYWxsZWQgZm9yIGV2ZXJ5IHN0YWNrIGZyYW1lIGluIHRoZSBjYWxsIGNoYWluLCBidXQgbm8gY2xlYW51cAorICAgICBhY3Rpb25zIGFyZSBwZXJmb3JtZWQuICAqLworICB0eXBlZGVmIF9VbndpbmRfUmVhc29uX0NvZGUgKCpfVW53aW5kX1RyYWNlX0ZuKSAoX1Vud2luZF9Db250ZXh0ICosIHZvaWQgKik7CisgIF9VbndpbmRfUmVhc29uX0NvZGUgX1Vud2luZF9CYWNrdHJhY2UoX1Vud2luZF9UcmFjZV9GbiwKKwkJCQkJdm9pZCopOworCisgIF9VbndpbmRfV29yZCBfVW53aW5kX0dldENGQSAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsKKyAgdm9pZCBfVW53aW5kX0NvbXBsZXRlKF9VbndpbmRfQ29udHJvbF9CbG9jayAqdWNicCk7CisgIHZvaWQgX1Vud2luZF9EZWxldGVFeGNlcHRpb24gKF9VbndpbmRfRXhjZXB0aW9uICopOworCisgIF9VbndpbmRfUmVhc29uX0NvZGUgX19nbnVfdW53aW5kX2ZyYW1lIChfVW53aW5kX0NvbnRyb2xfQmxvY2sgKiwKKwkJCQkJICBfVW53aW5kX0NvbnRleHQgKik7CisgIF9VbndpbmRfUmVhc29uX0NvZGUgX19nbnVfdW53aW5kX2V4ZWN1dGUgKF9VbndpbmRfQ29udGV4dCAqLAorCQkJCQkgICAgX19nbnVfdW53aW5kX3N0YXRlICopOworCisgIC8qIERlY29kZSBhbiBSX0FSTV9UQVJHRVQyIHJlbG9jYXRpb24uICAqLworICBzdGF0aWMgaW5saW5lIF9VbndpbmRfV29yZAorICBfVW53aW5kX2RlY29kZV90YXJnZXQyIChfVW53aW5kX1dvcmQgcHRyKQorICAgIHsKKyAgICAgIF9VbndpbmRfV29yZCB0bXA7CisKKyAgICAgIHRtcCA9ICooX1Vud2luZF9Xb3JkICopIHB0cjsKKyAgICAgIC8qIFplcm8gdmFsdWVzIGFyZSBhbHdheXMgTlVMTC4gICovCisgICAgICBpZiAoIXRtcCkKKwlyZXR1cm4gMDsKKworI2lmIChkZWZpbmVkKGxpbnV4KSAmJiAhZGVmaW5lZChfX3VDbGludXhfXykpIHx8IGRlZmluZWQoX19OZXRCU0RfXykKKyAgICAgIC8qIFBjLXJlbGF0aXZlIGluZGlyZWN0LiAgKi8KKyAgICAgIHRtcCArPSBwdHI7CisgICAgICB0bXAgPSAqKF9VbndpbmRfV29yZCAqKSB0bXA7CisjZWxpZiBkZWZpbmVkKF9fc3ltYmlhbl9fKSB8fCBkZWZpbmVkKF9fdUNsaW51eF9fKQorICAgICAgLyogQWJzb2x1dGUgcG9pbnRlci4gIE5vdGhpbmcgbW9yZSB0byBkby4gICovCisjZWxzZQorICAgICAgLyogUGMtcmVsYXRpdmUgcG9pbnRlci4gICovCisgICAgICB0bXAgKz0gcHRyOworI2VuZGlmCisgICAgICByZXR1cm4gdG1wOworICAgIH0KKworICBzdGF0aWMgaW5saW5lIF9VbndpbmRfV29yZAorICBfVW53aW5kX0dldEdSIChfVW53aW5kX0NvbnRleHQgKmNvbnRleHQsIGludCByZWdubykKKyAgICB7CisgICAgICBfdXcgdmFsOworICAgICAgX1Vud2luZF9WUlNfR2V0IChjb250ZXh0LCBfVVZSU0NfQ09SRSwgcmVnbm8sIF9VVlJTRF9VSU5UMzIsICZ2YWwpOworICAgICAgcmV0dXJuIHZhbDsKKyAgICB9CisKKyAgLyogUmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBpbnN0cnVjdGlvbiwgbm90IHRoZSBhY3R1YWwgSVAgdmFsdWUuICAqLworI2RlZmluZSBfVW53aW5kX0dldElQKGNvbnRleHQpIFwKKyAgKF9VbndpbmRfR2V0R1IgKGNvbnRleHQsIDE1KSAmIH4oX1Vud2luZF9Xb3JkKTEpCisKKyNkZWZpbmUgX1Vud2luZF9HZXRJUEluZm8oY29udGV4dCwgaXBfYmVmb3JlX2luc24pIFwKKyAgKCppcF9iZWZvcmVfaW5zbiA9IDAsIF9VbndpbmRfR2V0R1IgKGNvbnRleHQsIDE1KSAmIH4oX1Vud2luZF9Xb3JkKTEpCisKKyAgc3RhdGljIGlubGluZSB2b2lkCisgIF9VbndpbmRfU2V0R1IgKF9VbndpbmRfQ29udGV4dCAqY29udGV4dCwgaW50IHJlZ25vLCBfVW53aW5kX1dvcmQgdmFsKQorICAgIHsKKyAgICAgIF9VbndpbmRfVlJTX1NldCAoY29udGV4dCwgX1VWUlNDX0NPUkUsIHJlZ25vLCBfVVZSU0RfVUlOVDMyLCAmdmFsKTsKKyAgICB9CisKKyAgLyogVGhlIGR3YXJmIHVud2luZGVyIGRvZXNuJ3QgdW5kZXJzdGFuZCBhcm0vdGh1bWIgc3RhdGUuICBXZSBhc3N1bWUgdGhlCisgICAgIGxhbmRpbmcgcGFkIHVzZXMgdGhlIHNhbWUgaW5zdHJ1Y3Rpb24gc2V0IGFzIHRoZSBjYWxsIHNpdGUuICAqLworI2RlZmluZSBfVW53aW5kX1NldElQKGNvbnRleHQsIHZhbCkgXAorICBfVW53aW5kX1NldEdSIChjb250ZXh0LCAxNSwgdmFsIHwgKF9VbndpbmRfR2V0R1IgKGNvbnRleHQsIDE1KSAmIDEpKQorCisvKiBsZWIxMjggdHlwZSBudW1iZXJzIGhhdmUgYSBwb3RlbnRpYWxseSB1bmxpbWl0ZWQgc2l6ZS4KKyAgIFRoZSB0YXJnZXQgb2YgdGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBvZiBfc2xlYjEyOF90IGFuZCBfdWxlYjEyOF90CisgICBpcyB0byBoYXZlIGVmZmljaWVudCBkYXRhIHR5cGVzIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBsZWIxMjggdHlwZQorICAgbnVtYmVycyB1c2VkIGluIHRoZSB1bndpbmQgY29kZS4gICovCit0eXBlZGVmIGxvbmcgX3NsZWIxMjhfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBfdWxlYjEyOF90OworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gICAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIGRlZmluZWQgVU5XSU5EX0FSTV9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5jbHVkZS92YXJhcmdzLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5jbHVkZS92YXJhcmdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI5ODAzZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9pbmNsdWRlL3ZhcmFyZ3MuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX1ZBUkFSR1NfSAorI2RlZmluZSBfVkFSQVJHU19ICisKKyNlcnJvciAiR0NDIG5vIGxvbmdlciBpbXBsZW1lbnRzIDx2YXJhcmdzLmg+LiIKKyNlcnJvciAiUmV2aXNlIHlvdXIgY29kZSB0byB1c2UgPHN0ZGFyZy5oPi4iCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luc3RhbGwtdG9vbHMvZml4aW5jX2xpc3QgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5zdGFsbC10b29scy9maXhpbmNfbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTJiYzJiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luc3RhbGwtdG9vbHMvZml4aW5jX2xpc3QKQEAgLTAsMCArMSBAQAorOwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luc3RhbGwtdG9vbHMvZ3N5c2xpbWl0cy5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luc3RhbGwtdG9vbHMvZ3N5c2xpbWl0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNjI4MDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5zdGFsbC10b29scy9nc3lzbGltaXRzLmgKQEAgLTAsMCArMSw4IEBACisvKiBzeXNsaW1pdHMuaCBzdGFuZHMgZm9yIHRoZSBzeXN0ZW0ncyBvd24gbGltaXRzLmggZmlsZS4KKyAgIElmIHdlIGNhbiB1c2UgaXQgb2sgdW5tb2RpZmllZCwgdGhlbiB3ZSBpbnN0YWxsIHRoaXMgdGV4dC4KKyAgIElmIGZpeGluY2x1ZGVzIGZpeGVzIGl0LCB0aGVuIHRoZSBmaXhlZCB2ZXJzaW9uIGlzIGluc3RhbGxlZAorICAgaW5zdGVhZCBvZiB0aGlzIHRleHQuICAqLworCisjZGVmaW5lIF9HQ0NfTkVYVF9MSU1JVFNfSAkJLyogdGVsbCBnY2MncyBsaW1pdHMuaCB0byByZWN1cnNlICovCisjaW5jbHVkZV9uZXh0IDxsaW1pdHMuaD4KKyN1bmRlZiBfR0NDX05FWFRfTElNSVRTX0gKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9pbnN0YWxsLXRvb2xzL2luY2x1ZGUvUkVBRE1FIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luc3RhbGwtdG9vbHMvaW5jbHVkZS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA4NmE3NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9pbnN0YWxsLXRvb2xzL2luY2x1ZGUvUkVBRE1FCkBAIC0wLDAgKzEsMTQgQEAKK1RoaXMgUkVBRE1FIGZpbGUgaXMgY29waWVkIGludG8gdGhlIGRpcmVjdG9yeSBmb3IgR0NDLW9ubHkgaGVhZGVyIGZpbGVzCit3aGVuIGZpeGluY2x1ZGVzIGlzIHJ1biBieSB0aGUgbWFrZWZpbGUgZm9yIEdDQy4KKworTWFueSBvZiB0aGUgZmlsZXMgaW4gdGhpcyBkaXJlY3Rvcnkgd2VyZSBhdXRvbWF0aWNhbGx5IGVkaXRlZCBmcm9tIHRoZQorc3RhbmRhcmQgc3lzdGVtIGhlYWRlciBmaWxlcyBieSB0aGUgZml4aW5jbHVkZXMgcHJvY2Vzcy4gIFRoZXkgYXJlCitzeXN0ZW0tc3BlY2lmaWMsIGFuZCB3aWxsIG5vdCB3b3JrIG9uIGFueSBvdGhlciBraW5kIG9mIHN5c3RlbS4gIFRoZXkKK2FyZSBhbHNvIG5vdCBwYXJ0IG9mIEdDQy4gIFRoZSByZWFzb24gd2UgaGF2ZSB0byBkbyB0aGlzIGlzIGJlY2F1c2UKK0dDQyByZXF1aXJlcyBBTlNJIEMgaGVhZGVycyBhbmQgbWFueSB2ZW5kb3JzIHN1cHBseSBBTlNJLWluY29tcGF0aWJsZQoraGVhZGVycy4KKworQmVjYXVzZSB0aGlzIGlzIGFuIGF1dG9tYXRlZCBwcm9jZXNzLCBzb21ldGltZXMgaGVhZGVycyBnZXQgImZpeGVkIgordGhhdCBkbyBub3QsIHN0cmljdGx5IHNwZWFraW5nLCBuZWVkIGEgZml4LiAgQXMgbG9uZyBhcyBub3RoaW5nIGlzIGJyb2tlbgorYnkgdGhlIHByb2Nlc3MsIGl0IGlzIGp1c3QgYW4gdW5mb3J0dW5hdGUgY29sbGF0ZXJhbCBpbmNvbnZlbmllbmNlLgorV2Ugd291bGQgbGlrZSB0byByZWN0aWZ5IGl0LCBpZiBpdCBpcyBub3QgInRvbyBpbmNvbnZlbmllbnQiLgpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luc3RhbGwtdG9vbHMvaW5jbHVkZS9saW1pdHMuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9pbnN0YWxsLXRvb2xzL2luY2x1ZGUvbGltaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjMzVlOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9pbnN0YWxsLXRvb2xzL2luY2x1ZGUvbGltaXRzLmgKQEAgLTAsMCArMSwxNzIgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5MiwgMTk5NCwgMTk5NywgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKK3Blcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKzMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKK3NlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogVGhpcyBhZG1pbmlzdHJpdmlhIGdldHMgYWRkZWQgdG8gdGhlIGJlZ2lubmluZyBvZiBsaW1pdHMuaAorICAgaWYgdGhlIHN5c3RlbSBoYXMgaXRzIG93biB2ZXJzaW9uIG9mIGxpbWl0cy5oLiAgKi8KKworLyogV2UgdXNlIF9HQ0NfTElNSVRTX0hfIGJlY2F1c2Ugd2Ugd2FudCB0aGlzIG5vdCB0byBtYXRjaAorICAgYW55IG1hY3JvcyB0aGF0IHRoZSBzeXN0ZW0ncyBsaW1pdHMuaCB1c2VzIGZvciBpdHMgb3duIHB1cnBvc2VzLiAgKi8KKyNpZm5kZWYgX0dDQ19MSU1JVFNfSF8gIC8qIFRlcm1pbmF0ZWQgaW4gbGltaXR5LmguICAqLworI2RlZmluZSBfR0NDX0xJTUlUU19IXworCisjaWZuZGVmIF9MSUJDX0xJTUlUU19IXworLyogVXNlICIuLi4iIHNvIHRoYXQgd2UgZmluZCBzeXNsaW1pdHMuaCBvbmx5IGluIHRoaXMgc2FtZSBkaXJlY3RvcnkuICAqLworI2luY2x1ZGUgInN5c2xpbWl0cy5oIgorI2VuZGlmCisvKiBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisgICAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1VuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCithIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9MSU1JVFNfSF9fXworI2RlZmluZSBfTElNSVRTX0hfX18KKworLyogTnVtYmVyIG9mIGJpdHMgaW4gYSBgY2hhcicuICAqLworI3VuZGVmIENIQVJfQklUCisjZGVmaW5lIENIQVJfQklUIF9fQ0hBUl9CSVRfXworCisvKiBNYXhpbXVtIGxlbmd0aCBvZiBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIuICAqLworI2lmbmRlZiBNQl9MRU5fTUFYCisjZGVmaW5lIE1CX0xFTl9NQVggMQorI2VuZGlmCisKKy8qIE1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGEgYHNpZ25lZCBjaGFyJyBjYW4gaG9sZC4gICovCisjdW5kZWYgU0NIQVJfTUlOCisjZGVmaW5lIFNDSEFSX01JTiAoLVNDSEFSX01BWCAtIDEpCisjdW5kZWYgU0NIQVJfTUFYCisjZGVmaW5lIFNDSEFSX01BWCBfX1NDSEFSX01BWF9fCisKKy8qIE1heGltdW0gdmFsdWUgYW4gYHVuc2lnbmVkIGNoYXInIGNhbiBob2xkLiAgKE1pbmltdW0gaXMgMCkuICAqLworI3VuZGVmIFVDSEFSX01BWAorI2lmIF9fU0NIQVJfTUFYX18gPT0gX19JTlRfTUFYX18KKyMgZGVmaW5lIFVDSEFSX01BWCAoU0NIQVJfTUFYICogMlUgKyAxVSkKKyNlbHNlCisjIGRlZmluZSBVQ0hBUl9NQVggKFNDSEFSX01BWCAqIDIgKyAxKQorI2VuZGlmCisKKy8qIE1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGEgYGNoYXInIGNhbiBob2xkLiAgKi8KKyNpZmRlZiBfX0NIQVJfVU5TSUdORURfXworIyB1bmRlZiBDSEFSX01JTgorIyBpZiBfX1NDSEFSX01BWF9fID09IF9fSU5UX01BWF9fCisjICBkZWZpbmUgQ0hBUl9NSU4gMFUKKyMgZWxzZQorIyAgZGVmaW5lIENIQVJfTUlOIDAKKyMgZW5kaWYKKyMgdW5kZWYgQ0hBUl9NQVgKKyMgZGVmaW5lIENIQVJfTUFYIFVDSEFSX01BWAorI2Vsc2UKKyMgdW5kZWYgQ0hBUl9NSU4KKyMgZGVmaW5lIENIQVJfTUlOIFNDSEFSX01JTgorIyB1bmRlZiBDSEFSX01BWAorIyBkZWZpbmUgQ0hBUl9NQVggU0NIQVJfTUFYCisjZW5kaWYKKworLyogTWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMgYSBgc2lnbmVkIHNob3J0IGludCcgY2FuIGhvbGQuICAqLworI3VuZGVmIFNIUlRfTUlOCisjZGVmaW5lIFNIUlRfTUlOICgtU0hSVF9NQVggLSAxKQorI3VuZGVmIFNIUlRfTUFYCisjZGVmaW5lIFNIUlRfTUFYIF9fU0hSVF9NQVhfXworCisvKiBNYXhpbXVtIHZhbHVlIGFuIGB1bnNpZ25lZCBzaG9ydCBpbnQnIGNhbiBob2xkLiAgKE1pbmltdW0gaXMgMCkuICAqLworI3VuZGVmIFVTSFJUX01BWAorI2lmIF9fU0hSVF9NQVhfXyA9PSBfX0lOVF9NQVhfXworIyBkZWZpbmUgVVNIUlRfTUFYIChTSFJUX01BWCAqIDJVICsgMVUpCisjZWxzZQorIyBkZWZpbmUgVVNIUlRfTUFYIChTSFJUX01BWCAqIDIgKyAxKQorI2VuZGlmCisKKy8qIE1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGEgYHNpZ25lZCBpbnQnIGNhbiBob2xkLiAgKi8KKyN1bmRlZiBJTlRfTUlOCisjZGVmaW5lIElOVF9NSU4gKC1JTlRfTUFYIC0gMSkKKyN1bmRlZiBJTlRfTUFYCisjZGVmaW5lIElOVF9NQVggX19JTlRfTUFYX18KKworLyogTWF4aW11bSB2YWx1ZSBhbiBgdW5zaWduZWQgaW50JyBjYW4gaG9sZC4gIChNaW5pbXVtIGlzIDApLiAgKi8KKyN1bmRlZiBVSU5UX01BWAorI2RlZmluZSBVSU5UX01BWCAoSU5UX01BWCAqIDJVICsgMVUpCisKKy8qIE1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGEgYHNpZ25lZCBsb25nIGludCcgY2FuIGhvbGQuCisgICAoU2FtZSBhcyBgaW50JykuICAqLworI3VuZGVmIExPTkdfTUlOCisjZGVmaW5lIExPTkdfTUlOICgtTE9OR19NQVggLSAxTCkKKyN1bmRlZiBMT05HX01BWAorI2RlZmluZSBMT05HX01BWCBfX0xPTkdfTUFYX18KKworLyogTWF4aW11bSB2YWx1ZSBhbiBgdW5zaWduZWQgbG9uZyBpbnQnIGNhbiBob2xkLiAgKE1pbmltdW0gaXMgMCkuICAqLworI3VuZGVmIFVMT05HX01BWAorI2RlZmluZSBVTE9OR19NQVggKExPTkdfTUFYICogMlVMICsgMVVMKQorCisjaWYgZGVmaW5lZCAoX19TVERDX1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCisvKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBhIGBzaWduZWQgbG9uZyBsb25nIGludCcgY2FuIGhvbGQuICAqLworIyB1bmRlZiBMTE9OR19NSU4KKyMgZGVmaW5lIExMT05HX01JTiAoLUxMT05HX01BWCAtIDFMTCkKKyMgdW5kZWYgTExPTkdfTUFYCisjIGRlZmluZSBMTE9OR19NQVggX19MT05HX0xPTkdfTUFYX18KKworLyogTWF4aW11bSB2YWx1ZSBhbiBgdW5zaWduZWQgbG9uZyBsb25nIGludCcgY2FuIGhvbGQuICAoTWluaW11bSBpcyAwKS4gICovCisjIHVuZGVmIFVMTE9OR19NQVgKKyMgZGVmaW5lIFVMTE9OR19NQVggKExMT05HX01BWCAqIDJVTEwgKyAxVUxMKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfX0dOVV9MSUJSQVJZX18pID8gZGVmaW5lZCAoX19VU0VfR05VKSA6ICFkZWZpbmVkIChfX1NUUklDVF9BTlNJX18pCisvKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBhIGBzaWduZWQgbG9uZyBsb25nIGludCcgY2FuIGhvbGQuICAqLworIyB1bmRlZiBMT05HX0xPTkdfTUlOCisjIGRlZmluZSBMT05HX0xPTkdfTUlOICgtTE9OR19MT05HX01BWCAtIDFMTCkKKyMgdW5kZWYgTE9OR19MT05HX01BWAorIyBkZWZpbmUgTE9OR19MT05HX01BWCBfX0xPTkdfTE9OR19NQVhfXworCisvKiBNYXhpbXVtIHZhbHVlIGFuIGB1bnNpZ25lZCBsb25nIGxvbmcgaW50JyBjYW4gaG9sZC4gIChNaW5pbXVtIGlzIDApLiAgKi8KKyMgdW5kZWYgVUxPTkdfTE9OR19NQVgKKyMgZGVmaW5lIFVMT05HX0xPTkdfTUFYIChMT05HX0xPTkdfTUFYICogMlVMTCArIDFVTEwpCisjZW5kaWYKKworI2VuZGlmIC8qIF9MSU1JVFNfSF9fXyAqLworLyogVGhpcyBhZG1pbmlzdHJpdmlhIGdldHMgYWRkZWQgdG8gdGhlIGVuZCBvZiBsaW1pdHMuaAorICAgaWYgdGhlIHN5c3RlbSBoYXMgaXRzIG93biB2ZXJzaW9uIG9mIGxpbWl0cy5oLiAgKi8KKworI2Vsc2UgLyogbm90IF9HQ0NfTElNSVRTX0hfICovCisKKyNpZmRlZiBfR0NDX05FWFRfTElNSVRTX0gKKyNpbmNsdWRlX25leHQgPGxpbWl0cy5oPgkJLyogcmVjdXJzZSBkb3duIHRvIHRoZSByZWFsIG9uZSAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBub3QgX0dDQ19MSU1JVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9pbnN0YWxsLXRvb2xzL21hY3JvX2xpc3QgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5zdGFsbC10b29scy9tYWNyb19saXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyOGQ1Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5zdGFsbC10b29scy9tYWNyb19saXN0CkBAIC0wLDAgKzEsMiBAQAorbGludXgKK3VuaXgKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9pbnN0YWxsLXRvb2xzL21raGVhZGVycy5jb25mIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luc3RhbGwtdG9vbHMvbWtoZWFkZXJzLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M0YTJhNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9pbnN0YWxsLXRvb2xzL21raGVhZGVycy5jb25mCkBAIC0wLDAgKzEsMyBAQAorU1lTVEVNX0hFQURFUl9ESVI9Ii91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9ob3N0L3Vzci9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL3N5c3Jvb3Qke3N5c3Jvb3RfaGVhZGVyc19zdWZmaXh9L3Vzci9pbmNsdWRlIgorT1RIRVJfRklYSU5DTFVERVNfRElSUz0iIgorU1RNUF9GSVhJTkM9InN0bXAtZml4aW5jIgpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2xpYmdjYy5hIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2xpYmdjYy5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YTY5YTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvbGliZ2NjLmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2xpYmdjY19laC5hIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2xpYmdjY19laC5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZDE4YmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvbGliZ2NjX2VoLmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2xpYmdjb3YuYSBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9saWJnY292LmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNmYzQyZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9saWJnY292LmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2FkYS9nY2MtaW50ZXJmYWNlL2FkYS10cmVlLmRlZiBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9hZGEvZ2NjLWludGVyZmFjZS9hZGEtdHJlZS5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU0YjRiZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9hZGEvZ2NjLWludGVyZmFjZS9hZGEtdHJlZS5kZWYKQEAgLTAsMCArMSw3NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIENPTVBJTEVSIENPTVBPTkVOVFMgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICBHTkFULVNQRUNJRklDIEdDQyBUUkVFIENPREVTICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpY2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgIENvcHlyaWdodCAoQykgMTk5Mi0yMDA5LCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEdOQVQgaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gIHJlZGlzdHJpYnV0ZSBpdCAgYW5kL29yIG1vZGlmeSBpdCB1bmRlciAqCisgKiB0ZXJtcyBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCAgYnkgdGhlIEZyZWUgU29mdC0gKgorICogd2FyZSAgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDMsICBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXItICoKKyAqIHNpb24uICBHTkFUIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRILSAqCisgKiBPVVQgQU5ZIFdBUlJBTlRZOyAgd2l0aG91dCBldmVuIHRoZSAgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgKgorICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICoKKyAqIGZvciAgbW9yZSBkZXRhaWxzLiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgICAqCisgKiBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZSAgICAgICAgKgorICogPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBHTkFUIHdhcyBvcmlnaW5hbGx5IGRldmVsb3BlZCAgYnkgdGhlIEdOQVQgdGVhbSBhdCAgTmV3IFlvcmsgVW5pdmVyc2l0eS4gKgorICogRXh0ZW5zaXZlIGNvbnRyaWJ1dGlvbnMgd2VyZSBwcm92aWRlZCBieSBBZGEgQ29yZSBUZWNobm9sb2dpZXMgSW5jLiAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQSB0eXBlIHRoYXQgaXMgYW4gdW5jb25zdHJhaW5lZCBhcnJheS4gIFRoaXMgbm9kZSBpcyBuZXZlciBwYXNzZWQgdG8gR0NDLgorICAgVFJFRV9UWVBFIGlzIHRoZSB0eXBlIG9mIHRoZSBmYXQgcG9pbnRlciBhbmQgVFlQRV9PQkpFQ1RfUkVDT1JEX1RZUEUgaXMKKyAgIHRoZSB0eXBlIG9mIGEgcmVjb3JkIGNvbnRhaW5pbmcgdGhlIHRlbXBsYXRlIGFuZCBkYXRhLiAgKi8KK0RFRlRSRUVDT0RFIChVTkNPTlNUUkFJTkVEX0FSUkFZX1RZUEUsICJ1bmNvbnN0cmFpbmVkX2FycmF5X3R5cGUiLCB0Y2NfdHlwZSwgMCkKKworLyogQSByZWZlcmVuY2UgdG8gYW4gdW5jb25zdHJhaW5lZCBhcnJheS4gIFRoaXMgbm9kZSBvbmx5IGV4aXN0cyBhcyBhbgorICAgaW50ZXJtZWRpYXRlIG5vZGUgZHVyaW5nIHRoZSB0cmFuc2xhdGlvbiBvZiBhIEdOQVQgdHJlZSB0byBhIEdDQyB0cmVlOworICAgaXQgaXMgbmV2ZXIgcGFzc2VkIHRvIEdDQy4gIFRoZSBvbmx5IGZpZWxkIHVzZWQgaXMgb3BlcmFuZCAwLCB3aGljaAorICAgaXMgdGhlIGZhdCBwb2ludGVyIG9iamVjdC4gICovCitERUZUUkVFQ09ERSAoVU5DT05TVFJBSU5FRF9BUlJBWV9SRUYsICJ1bmNvbnN0cmFpbmVkX2FycmF5X3JlZiIsCisJICAgICB0Y2NfcmVmZXJlbmNlLCAxKQorCisvKiBBbiBleHByZXNzaW9uIHRoYXQgcmV0dXJucyBhbiBSVEwgc3VpdGFibGUgZm9yIGl0cyB0eXBlLiAgT3BlcmFuZCAwCisgICBpcyBhbiBleHByZXNzaW9uIHRvIGJlIGV2YWx1YXRlZCBmb3Igc2lkZSBlZmZlY3RzIG9ubHkuICAqLworREVGVFJFRUNPREUgKE5VTExfRVhQUiwgIm51bGxfZXhwciIsIHRjY19leHByZXNzaW9uLCAxKQorCisvKiBTYW1lIGFzIFBMVVNfRVhQUiwgZXhjZXB0IHRoYXQgbm8gbW9kdWxvIHJlZHVjdGlvbiBpcyBhcHBsaWVkLgorICAgVGhpcyBpcyB1c2VkIGZvciBsb29wcyBhbmQgbmV2ZXIgc2hvd3MgdXAgaW4gdGhlIHRyZWUuICAqLworREVGVFJFRUNPREUgKFBMVVNfTk9NT0RfRVhQUiwgInBsdXNfbm9tb2RfZXhwciIsIHRjY19iaW5hcnksIDIpCisKKy8qIFNhbWUgYXMgTUlOVVNfRVhQUiwgZXhjZXB0IHRoYXQgbm8gbW9kdWxvIHJlZHVjdGlvbiBpcyBhcHBsaWVkLgorICAgVGhpcyBpcyB1c2VkIGZvciBsb29wcyBhbmQgbmV2ZXIgc2hvd3MgdXAgaW4gdGhlIHRyZWUuICAqLworREVGVFJFRUNPREUgKE1JTlVTX05PTU9EX0VYUFIsICJtaW51c19ub21vZF9leHByIiwgdGNjX2JpbmFyeSwgMikKKworLyogU2FtZSBhcyBBRERSX0VYUFIsIGV4Y2VwdCB0aGF0IGlmIHRoZSBvcGVyYW5kIHJlcHJlc2VudHMgYSBiaXQgZmllbGQsCisgICByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIGJ5dGUgY29udGFpbmluZyB0aGUgYml0LiAgVGhpcyBpcyB1c2VkCisgICBmb3IgdGhlIEFkZHJlc3MgYXR0cmlidXRlIGFuZCBuZXZlciBzaG93cyB1cCBpbiB0aGUgdHJlZS4gICovCitERUZUUkVFQ09ERSAoQVRUUl9BRERSX0VYUFIsICJhdHRyX2FkZHJfZXhwciIsIHRjY19yZWZlcmVuY2UsIDEpCisKKy8qIEhlcmUgYXJlIHRoZSB0cmVlIGNvZGVzIGZvciB0aGUgc3RhdGVtZW50IHR5cGVzIGtub3duIHRvIEFkYS4gIFRoZXNlCisgICBtdXN0IGJlIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlIHRvIGFsbG93IElTX0FEQV9TVE1UIHRvIHdvcmsuICAqLworCisvKiBUaGlzIGlzIGhvdyByZWNvcmRfY29kZV9wb3NpdGlvbiBhbmQgaW5zZXJ0X2NvZGVfZm9yIHdvcmsuICBUaGUgZm9ybWVyCisgICBtYWtlcyB0aGlzIHRyZWUgbm9kZSwgd2hvc2Ugb3BlcmFuZCBpcyBhIHN0YXRlbWVudC4gIFRoZSBsYXR0ZXIgaW5zZXJ0cworICAgdGhlIGFjdHVhbCBzdGF0ZW1lbnRzIGludG8gdGhpcyBub2RlLiAgR2ltcGxpZmljYXRpb24gY29uc2lzdHMgb2YKKyAgIGp1c3QgcmV0dXJuaW5nIHRoZSBpbm5lciBzdGF0ZW1lbnQuICAqLworREVGVFJFRUNPREUgKFNUTVRfU1RNVCwgInN0bXRfc3RtdCIsIHRjY19zdGF0ZW1lbnQsIDEpCisKKy8qIEEgbG9vcC4gIExPT1BfU1RNVF9UT1BfQ09ORCBhbmQgTE9PUF9TVE1UX0JPVF9DT05EIGFyZSB0aGUgdGVzdHMgdG8gZXhpdCBhCisgICBsb29wIGF0IHRoZSB0b3AgYW5kIGJvdHRvbSByZXNwZWN0aXZlbHkuICBMT09QX1NUTVRfVVBEQVRFIGlzIHRoZSBzdGF0ZW1lbnQKKyAgIHRvIHVwZGF0ZSB0aGUgbG9vcCBpdGVyYXRvciBhdCB0aGUgY29udGludWUgcG9pbnQuICBMT09QX1NUTVRfQk9EWSBhcmUgdGhlCisgICBzdGF0ZW1lbnRzIGluIHRoZSBib2R5IG9mIHRoZSBsb29wLiAgTE9PUF9TVE1UX0xBQkVMIHBvaW50cyB0byB0aGUKKyAgIExBQkVMX0RFQ0wgb2YgdGhlIGVuZCBsYWJlbCBvZiB0aGUgbG9vcC4gICovCitERUZUUkVFQ09ERSAoTE9PUF9TVE1ULCAibG9vcF9zdG10IiwgdGNjX3N0YXRlbWVudCwgNSkKKworLyogQ29uZGl0aW9uYWxseSBleGl0IGEgbG9vcC4gIEVYSVRfU1RNVF9DT05EIGlzIHRoZSBjb25kaXRpb24sIHdoaWNoLCBpZgorICAgdHJ1ZSwgd2lsbCBjYXVzZSB0aGUgbG9vcCB0byBiZSBleGl0ZWQuICBJZiBubyBjb25kaXRpb24gaXMgc3BlY2lmaWVkLAorICAgdGhlIGxvb3AgaXMgdW5jb25kaXRpb25hbGx5IGV4aXRlZC4gIEVYSVRfU1RNVF9MQUJFTCBpcyB0aGUgZW5kIGxhYmVsCisgICBjb3JyZXNwb25kaW5nIHRvIHRoZSBsb29wIHRvIGV4aXQuICAqLworREVGVFJFRUNPREUgKEVYSVRfU1RNVCwgImV4aXRfc3RtdCIsIHRjY19zdGF0ZW1lbnQsIDIpCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvYWxpYXMuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9hbGlhcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MDcyMTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvYWxpYXMuaApAQCAtMCwwICsxLDU0IEBACisvKiBFeHBvcnRlZCBmdW5jdGlvbnMgZnJvbSBhbGlhcy5jCisgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19BTElBU19ICisjZGVmaW5lIEdDQ19BTElBU19ICisKKyNpbmNsdWRlICJjb3JldHlwZXMuaCIKKworLyogVGhlIHR5cGUgb2YgYW4gYWxpYXMgc2V0LiAgQ29kZSBjdXJyZW50bHkgYXNzdW1lcyB0aGF0IHZhcmlhYmxlcyBvZgorICAgdGhpcyB0eXBlIGNhbiB0YWtlIHRoZSB2YWx1ZXMgMCAodGhlIGFsaWFzIHNldCB3aGljaCBhbGlhc2VzCisgICBldmVyeXRoaW5nKSBhbmQgLTEgKHNvbWV0aW1lcyBpbmRpY2F0aW5nIHRoYXQgdGhlIGFsaWFzIHNldCBpcworICAgdW5rbm93biwgc29tZXRpbWVzIGluZGljYXRpbmcgYSBtZW1vcnkgYmFycmllcikgYW5kIC0yIChpbmRpY2F0aW5nCisgICB0aGF0IHRoZSBhbGlhcyBzZXQgc2hvdWxkIGJlIHNldCB0byBhIHVuaXF1ZSB2YWx1ZSBidXQgaGFzIG5vdCBiZWVuCisgICBzZXQgeWV0KS4gICovCit0eXBlZGVmIGludCBhbGlhc19zZXRfdHlwZTsKKworZXh0ZXJuIGFsaWFzX3NldF90eXBlIG5ld19hbGlhc19zZXQgKHZvaWQpOworZXh0ZXJuIGFsaWFzX3NldF90eXBlIGdldF9hbGlhc19zZXQgKHRyZWUpOworZXh0ZXJuIGFsaWFzX3NldF90eXBlIGdldF9kZXJlZl9hbGlhc19zZXQgKHRyZWUpOworZXh0ZXJuIGFsaWFzX3NldF90eXBlIGdldF92YXJhcmdzX2FsaWFzX3NldCAodm9pZCk7CitleHRlcm4gYWxpYXNfc2V0X3R5cGUgZ2V0X2ZyYW1lX2FsaWFzX3NldCAodm9pZCk7CitleHRlcm4gYm9vbCBjb21wb25lbnRfdXNlc19wYXJlbnRfYWxpYXNfc2V0IChjb25zdF90cmVlKTsKK2V4dGVybiBib29sIGFsaWFzX3NldF9zdWJzZXRfb2YgKGFsaWFzX3NldF90eXBlLCBhbGlhc19zZXRfdHlwZSk7CitleHRlcm4gdm9pZCByZWNvcmRfYWxpYXNfc3Vic2V0IChhbGlhc19zZXRfdHlwZSwgYWxpYXNfc2V0X3R5cGUpOworZXh0ZXJuIHZvaWQgcmVjb3JkX2NvbXBvbmVudF9hbGlhc2VzICh0cmVlKTsKK2V4dGVybiBpbnQgYWxpYXNfc2V0c19jb25mbGljdF9wIChhbGlhc19zZXRfdHlwZSwgYWxpYXNfc2V0X3R5cGUpOworZXh0ZXJuIGludCBhbGlhc19zZXRzX211c3RfY29uZmxpY3RfcCAoYWxpYXNfc2V0X3R5cGUsIGFsaWFzX3NldF90eXBlKTsKK2V4dGVybiBpbnQgb2JqZWN0c19tdXN0X2NvbmZsaWN0X3AgKHRyZWUsIHRyZWUpOworZXh0ZXJuIGludCBub25vdmVybGFwcGluZ19tZW1yZWZzX3AgKGNvbnN0X3J0eCwgY29uc3RfcnR4KTsKK2V4dGVybiBib29sIGluc25fYWxpYXNfc2V0c19jb25mbGljdF9wIChydHgsIHJ0eCk7CisKKy8qIFRoaXMgYWxpYXMgc2V0IGNhbiBiZSB1c2VkIHRvIGZvcmNlIGEgbWVtb3J5IHRvIGNvbmZsaWN0IHdpdGggYWxsCisgICBvdGhlciBtZW1vcmllcywgY3JlYXRpbmcgYSBiYXJyaWVyIGFjcm9zcyB3aGljaCBubyBtZW1vcnkgcmVmZXJlbmNlCisgICBjYW4gbW92ZS4gIE5vdGUgdGhhdCB0aGVyZSBhcmUgb3RoZXIgbGVnYWN5IHdheXMgdG8gY3JlYXRlIHN1Y2gKKyAgIG1lbW9yeSBiYXJyaWVycywgaW5jbHVkaW5nIGFuIGFkZHJlc3Mgb2YgU0NSQVRDSC4gICovCisjZGVmaW5lIEFMSUFTX1NFVF9NRU1PUllfQkFSUklFUgkoKGFsaWFzX3NldF90eXBlKSAtMSkKKworI2VuZGlmIC8qIEdDQ19BTElBU19IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvYWxsLXRyZWUuZGVmIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2FsbC10cmVlLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmRmYmMzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2FsbC10cmVlLmRlZgpAQCAtMCwwICsxLDcgQEAKKyNpbmNsdWRlICJ0cmVlLmRlZiIKK0VORF9PRl9CQVNFX1RSRUVfQ09ERVMKKyNpbmNsdWRlICJjLWNvbW1vbi5kZWYiCisjaW5jbHVkZSAiYWRhL2djYy1pbnRlcmZhY2UvYWRhLXRyZWUuZGVmIgorI2luY2x1ZGUgImNwL2NwLXRyZWUuZGVmIgorI2luY2x1ZGUgImphdmEvamF2YS10cmVlLmRlZiIKKyNpbmNsdWRlICJvYmpjL29iamMtdHJlZS5kZWYiCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvYW5zaWRlY2wuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9hbnNpZGVjbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNzY2NDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvYW5zaWRlY2wuaApAQCAtMCwwICsxLDQyMyBAQAorLyogQU5TSSBhbmQgdHJhZGl0aW9uYWwgQyBjb21wYXRhYmlsaXR5IG1hY3JvcworICAgQ29weXJpZ2h0IDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisgICAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5LCAyMDEwCisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKy8qIEFOU0kgYW5kIHRyYWRpdGlvbmFsIEMgY29tcGF0aWJpbGl0eSBtYWNyb3MKKworICAgQU5TSSBDIGlzIGFzc3VtZWQgaWYgX19TVERDX18gaXMgI2RlZmluZWQuCisKKyAgIE1hY3JvCQlBTlNJIEMgZGVmaW5pdGlvbglUcmFkaXRpb25hbCBDIGRlZmluaXRpb24KKyAgIC0tLS0tCQktLS0tIC0gLS0tLS0tLS0tLQktLS0tLS0tLS0tLSAtIC0tLS0tLS0tLS0KKyAgIEFOU0lfUFJPVE9UWVBFUwkxCQkJbm90IGRlZmluZWQKKyAgIFBUUgkJCWB2b2lkIConCQlgY2hhciAqJworICAgUFRSQ09OU1QJCWB2b2lkICpjb25zdCcJCWBjaGFyIConCisgICBMT05HX0RPVUJMRQkJYGxvbmcgZG91YmxlJwkJYGRvdWJsZScKKyAgIGNvbnN0CQlub3QgZGVmaW5lZAkJYCcKKyAgIHZvbGF0aWxlCQlub3QgZGVmaW5lZAkJYCcKKyAgIHNpZ25lZAkJbm90IGRlZmluZWQJCWAnCisgICBWQV9TVEFSVChhcCwgdmFyKQl2YV9zdGFydChhcCwgdmFyKQl2YV9zdGFydChhcCkKKworICAgTm90ZSB0aGF0IGl0IGlzIHNhZmUgdG8gd3JpdGUgInZvaWQgZm9vKCk7IiBpbmRpY2F0aW5nIGEgZnVuY3Rpb24KKyAgIHdpdGggbm8gcmV0dXJuIHZhbHVlLCBpbiBhbGwgSytSIGNvbXBpbGVycyB3ZSBoYXZlIGJlZW4gYWJsZSB0byB0ZXN0LgorCisgICBGb3IgZGVjbGFyaW5nIGZ1bmN0aW9ucyB3aXRoIHByb3RvdHlwZXMsIHdlIGFsc28gcHJvdmlkZSB0aGVzZToKKworICAgUEFSQU1TICgocHJvdG90eXBlKSkKKyAgIC0tIGZvciBmdW5jdGlvbnMgd2hpY2ggdGFrZSBhIGZpeGVkIG51bWJlciBvZiBhcmd1bWVudHMuICBVc2UgdGhpcworICAgd2hlbiBkZWNsYXJpbmcgdGhlIGZ1bmN0aW9uLiAgV2hlbiBkZWZpbmluZyB0aGUgZnVuY3Rpb24sIHdyaXRlIGEKKyAgIEsrUiBzdHlsZSBhcmd1bWVudCBsaXN0LiAgRm9yIGV4YW1wbGU6CisKKwljaGFyICpzdHJjcHkgUEFSQU1TICgoY2hhciAqZGVzdCwgY2hhciAqc291cmNlKSk7CisJLi4uCisJY2hhciAqCisJc3RyY3B5IChkZXN0LCBzb3VyY2UpCisJICAgICBjaGFyICpkZXN0OworCSAgICAgY2hhciAqc291cmNlOworCXsgLi4uIH0KKworCisgICBWUEFSQU1TICgocHJvdG90eXBlLCAuLi4pKQorICAgLS0gZm9yIGZ1bmN0aW9ucyB3aGljaCB0YWtlIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4gIFVzZQorICAgUEFSQU1TIHRvIGRlY2xhcmUgdGhlIGZ1bmN0aW9uLCBWUEFSQU1TIHRvIGRlZmluZSBpdC4gIEZvciBleGFtcGxlOgorCisJaW50IHByaW50ZiBQQVJBTVMgKChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworCS4uLgorCWludAorCXByaW50ZiBWUEFSQU1TICgoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKQorCXsKKwkgICAuLi4KKwl9CisKKyAgIEZvciB3cml0aW5nIGZ1bmN0aW9ucyB3aGljaCB0YWtlIHZhcmlhYmxlIG51bWJlcnMgb2YgYXJndW1lbnRzLCB3ZQorICAgYWxzbyBwcm92aWRlIHRoZSBWQV9PUEVOLCBWQV9DTE9TRSwgYW5kIFZBX0ZJWEVEQVJHIG1hY3Jvcy4gIFRoZXNlCisgICBoaWRlIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIEsrUiA8dmFyYXJncy5oPiBhbmQgQzg5IDxzdGRhcmcuaD4gbW9yZQorICAgdGhvcm91Z2hseSB0aGFuIHRoZSBzaW1wbGUgVkFfU1RBUlQoKSBtYWNybyBtZW50aW9uZWQgYWJvdmUuCisKKyAgIFZBX09QRU4gYW5kIFZBX0NMT1NFIGFyZSB1c2VkICppbnN0ZWFkIG9mKiB2YV9zdGFydCBhbmQgdmFfZW5kLgorICAgSW1tZWRpYXRlbHkgYWZ0ZXIgVkFfT1BFTiwgcHV0IGEgc2VxdWVuY2Ugb2YgVkFfRklYRURBUkcgY2FsbHMKKyAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxpc3Qgb2YgZml4ZWQgYXJndW1lbnRzLiAgVGhlbiB1c2UgdmFfYXJnCisgICBub3JtYWxseSB0byBnZXQgdGhlIHZhcmlhYmxlIGFyZ3VtZW50cywgb3IgcGFzcyB5b3VyIHZhX2xpc3Qgb2JqZWN0CisgICBhcm91bmQuICBZb3UgZG8gbm90IGRlY2xhcmUgdGhlIHZhX2xpc3QgeW91cnNlbGY7IFZBX09QRU4gZG9lcyBpdAorICAgZm9yIHlvdS4KKworICAgSGVyZSBpcyBhIGNvbXBsZXRlIGV4YW1wbGU6CisKKwlpbnQKKwlwcmludGYgVlBBUkFNUyAoKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSkKKwl7CisJICAgaW50IHJlc3VsdDsKKworCSAgIFZBX09QRU4gKGFwLCBmb3JtYXQpOworCSAgIFZBX0ZJWEVEQVJHIChhcCwgY29uc3QgY2hhciAqLCBmb3JtYXQpOworCisJICAgcmVzdWx0ID0gdmZwcmludGYgKHN0ZG91dCwgZm9ybWF0LCBhcCk7CisJICAgVkFfQ0xPU0UgKGFwKTsKKworCSAgIHJldHVybiByZXN1bHQ7CisJfQorCisKKyAgIFlvdSBjYW4gZGVjbGFyZSB2YXJpYWJsZXMgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgVkFfT1BFTiwKKyAgIFZBX0ZJWEVEQVJHIHNlcXVlbmNlLiAgQWxzbywgVkFfT1BFTiBhbmQgVkFfQ0xPU0UgYXJlIHRoZSBiZWdpbm5pbmcKKyAgIGFuZCBlbmQgb2YgYSBibG9jay4gIFRoZXkgbXVzdCBhcHBlYXIgYXQgdGhlIHNhbWUgbmVzdGluZyBsZXZlbCwKKyAgIGFuZCBhbnkgdmFyaWFibGVzIGRlY2xhcmVkIGFmdGVyIFZBX09QRU4gZ28gb3V0IG9mIHNjb3BlIGF0CisgICBWQV9DTE9TRS4gIFVuZm9ydHVuYXRlbHksIHdpdGggYSBLK1IgY29tcGlsZXIsIHRoYXQgaW5jbHVkZXMgdGhlCisgICBhcmd1bWVudCBsaXN0LiAgWW91IGNhbiBoYXZlIG11bHRpcGxlIGluc3RhbmNlcyBvZiBWQV9PUEVOL1ZBX0NMT1NFCisgICBwYWlycyBpbiBhIHNpbmdsZSBmdW5jdGlvbiBpbiBjYXNlIHlvdSBuZWVkIHRvIHRyYXZlcnNlIHRoZQorICAgYXJndW1lbnQgbGlzdCBtb3JlIHRoYW4gb25jZS4KKworICAgRm9yIGVhc2Ugb2Ygd3JpdGluZyBjb2RlIHdoaWNoIHVzZXMgR0NDIGV4dGVuc2lvbnMgYnV0IG5lZWRzIHRvIGJlCisgICBwb3J0YWJsZSB0byBvdGhlciBjb21waWxlcnMsIHdlIHByb3ZpZGUgdGhlIEdDQ19WRVJTSU9OIG1hY3JvIHRoYXQKKyAgIHNpbXBsaWZpZXMgdGVzdGluZyBfX0dOVUNfXyBhbmQgX19HTlVDX01JTk9SX18gdG9nZXRoZXIsIGFuZCB2YXJpb3VzCisgICB3cmFwcGVycyBhcm91bmQgX19hdHRyaWJ1dGVfXy4gIEFsc28sIF9fZXh0ZW5zaW9uX18gd2lsbCBiZSAjZGVmaW5lZAorICAgdG8gbm90aGluZyBpZiBpdCBkb2Vzbid0IHdvcmsuICBTZWUgYmVsb3cuCisKKyAgIFRoaXMgaGVhZGVyIGFsc28gZGVmaW5lcyBhIGxvdCBvZiBvYnNvbGV0ZSBtYWNyb3M6CisgICBDT05TVCwgVk9MQVRJTEUsIFNJR05FRCwgUFJPVE8sIEVYRlVOLCBERUZVTiwgREVGVU5fVk9JRCwKKyAgIEFORCwgRE9UUywgTk9BUkdTLiAgRG9uJ3QgdXNlIHRoZW0uICAqLworCisjaWZuZGVmCV9BTlNJREVDTF9ICisjZGVmaW5lIF9BTlNJREVDTF9ICTEKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBFdmVyeSBzb3VyY2UgZmlsZSBpbmNsdWRlcyB0aGlzIGZpbGUsCisgICBzbyB0aGV5IHdpbGwgYWxsIGdldCB0aGUgc3dpdGNoIGZvciBsaW50LiAgKi8KKy8qIExJTlRMSUJSQVJZICovCisKKy8qIFVzaW5nIE1BQ1JPKHgseSkgaW4gY3BwICNpZiBjb25kaXRpb25hbHMgZG9lcyBub3Qgd29yayB3aXRoIHNvbWUKKyAgIG9sZGVyIHByZXByb2Nlc3NvcnMuICBUaHVzIHdlIGNhbid0IGRlZmluZSBzb21ldGhpbmcgbGlrZSB0aGlzOgorCisjZGVmaW5lIEhBVkVfR0NDX1ZFUlNJT04oTUFKT1IsIE1JTk9SKSBcCisgIChfX0dOVUNfXyA+IChNQUpPUikgfHwgKF9fR05VQ19fID09IChNQUpPUikgJiYgX19HTlVDX01JTk9SX18gPj0gKE1JTk9SKSkpCisKK2FuZCB0aGVuIHRlc3QgIiNpZiBIQVZFX0dDQ19WRVJTSU9OKDIsNykiLgorCitTbyBpbnN0ZWFkIHdlIHVzZSB0aGUgbWFjcm8gYmVsb3cgYW5kIHRlc3QgaXQgYWdhaW5zdCBzcGVjaWZpYyB2YWx1ZXMuICAqLworCisvKiBUaGlzIG1hY3JvIHNpbXBsaWZpZXMgdGVzdGluZyB3aGV0aGVyIHdlIGFyZSB1c2luZyBnY2MsIGFuZCBpZiBpdAorICAgaXMgb2YgYSBwYXJ0aWN1bGFyIG1pbmltdW0gdmVyc2lvbi4gKEJvdGggbWFqb3IgJiBtaW5vciBudW1iZXJzIGFyZQorICAgc2lnbmlmaWNhbnQuKSAgVGhpcyBtYWNybyB3aWxsIGV2YWx1YXRlIHRvIDAgaWYgd2UgYXJlIG5vdCB1c2luZworICAgZ2NjIGF0IGFsbC4gICovCisjaWZuZGVmIEdDQ19WRVJTSU9OCisjZGVmaW5lIEdDQ19WRVJTSU9OIChfX0dOVUNfXyAqIDEwMDAgKyBfX0dOVUNfTUlOT1JfXykKKyNlbmRpZiAvKiBHQ0NfVkVSU0lPTiAqLworCisjaWYgZGVmaW5lZCAoX19TVERDX18pIHx8IGRlZmluZWQoX19jcGx1c3BsdXMpIHx8IGRlZmluZWQgKF9BSVgpIHx8IChkZWZpbmVkIChfX21pcHMpICYmIGRlZmluZWQgKF9TWVNUWVBFX1NWUjQpKSB8fCBkZWZpbmVkKF9XSU4zMikKKy8qIEFsbCBrbm93biBBSVggY29tcGlsZXJzIGltcGxlbWVudCB0aGVzZSB0aGluZ3MgKGJ1dCBkb24ndCBhbHdheXMKKyAgIGRlZmluZSBfX1NURENfXykuICBUaGUgUklTQy9PUyBNSVBTIGNvbXBpbGVyIGRlZmluZXMgdGhlc2UgdGhpbmdzCisgICBpbiBTVlI0IG1vZGUsIGJ1dCBkb2VzIG5vdCBkZWZpbmUgX19TVERDX18uICAqLworLyogZXJheHhvbkBhbHVtbmkucmljZS5lZHU6IFRoZSBDb21wYXEgQysrIGNvbXBpbGVyLCB1bmxpa2UgbWFueSBvdGhlcgorICAgQysrIGNvbXBpbGVycywgZG9lcyBub3QgZGVmaW5lIF9fU1REQ19fLCB0aG91Z2ggaXQgYWN0cyBhcyBpZiB0aGlzCisgICB3YXMgc28uIChWZXJpZmllZCB2ZXJzaW9uczogNS43LCA2LjIsIDYuMywgNi41KSAqLworCisjZGVmaW5lIEFOU0lfUFJPVE9UWVBFUwkxCisjZGVmaW5lIFBUUgkJdm9pZCAqCisjZGVmaW5lIFBUUkNPTlNUCXZvaWQgKmNvbnN0CisjZGVmaW5lIExPTkdfRE9VQkxFCWxvbmcgZG91YmxlCisKKy8qIFBBUkFNUyBpcyBvZnRlbiBkZWZpbmVkIGVsc2V3aGVyZSAoZS5nLiBieSBsaWJpbnRsLmgpLCBzbyB3cmFwIGl0IGluCisgICBhICNpZm5kZWYuICAqLworI2lmbmRlZiBQQVJBTVMKKyNkZWZpbmUgUEFSQU1TKEFSR1MpCQlBUkdTCisjZW5kaWYKKworI2RlZmluZSBWUEFSQU1TKEFSR1MpCQlBUkdTCisjZGVmaW5lIFZBX1NUQVJUKFZBX0xJU1QsIFZBUikJdmFfc3RhcnQoVkFfTElTVCwgVkFSKQorCisvKiB2YXJpYWRpYyBmdW5jdGlvbiBoZWxwZXIgbWFjcm9zICovCisvKiAic3RydWN0IFFkbXkiIHN3YWxsb3dzIHRoZSBzZW1pY29sb24gYWZ0ZXIgVkFfT1BFTi9WQV9GSVhFREFSRydzCisgICB1c2Ugd2l0aG91dCBpbmhpYml0aW5nIGZ1cnRoZXIgZGVjbHMgYW5kIHdpdGhvdXQgZGVjbGFyaW5nIGFuCisgICBhY3R1YWwgdmFyaWFibGUuICAqLworI2RlZmluZSBWQV9PUEVOKEFQLCBWQVIpCXsgdmFfbGlzdCBBUDsgdmFfc3RhcnQoQVAsIFZBUik7IHsgc3RydWN0IFFkbXkKKyNkZWZpbmUgVkFfQ0xPU0UoQVApCQl9IHZhX2VuZChBUCk7IH0KKyNkZWZpbmUgVkFfRklYRURBUkcoQVAsIFQsIE4pCXN0cnVjdCBRZG15CisgCisjdW5kZWYgY29uc3QKKyN1bmRlZiB2b2xhdGlsZQorI3VuZGVmIHNpZ25lZAorCisvKiBpbmxpbmUgcmVxdWlyZXMgc3BlY2lhbCB0cmVhdG1lbnQ7IGl0J3MgaW4gQzk5LCBhbmQgR0NDID49Mi43IHN1cHBvcnRzCisgICBpdCB0b28sIGJ1dCBpdCdzIG5vdCBpbiBDODkuICAqLworI3VuZGVmIGlubGluZQorI2lmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCB8fCBkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCAoZGVmaW5lZChfX1NVTlBST19DKSAmJiBkZWZpbmVkKF9fQzk5RkVBVFVSRVNfXykpCisvKiBpdCdzIGEga2V5d29yZCAqLworI2Vsc2UKKyMgaWYgR0NDX1ZFUlNJT04gPj0gMjAwNworIyAgZGVmaW5lIGlubGluZSBfX2lubGluZV9fICAgLyogX19pbmxpbmVfXyBwcmV2ZW50cyAtcGVkYW50aWMgd2FybmluZ3MgKi8KKyMgZWxzZQorIyAgZGVmaW5lIGlubGluZSAgLyogbm90aGluZyAqLworIyBlbmRpZgorI2VuZGlmCisKKy8qIFRoZXNlIGFyZSBvYnNvbGV0ZS4gIERvIG5vdCB1c2UuICAqLworI2lmbmRlZiBJTl9HQ0MKKyNkZWZpbmUgQ09OU1QJCWNvbnN0CisjZGVmaW5lIFZPTEFUSUxFCXZvbGF0aWxlCisjZGVmaW5lIFNJR05FRAkJc2lnbmVkCisKKyNkZWZpbmUgUFJPVE8odHlwZSwgbmFtZSwgYXJnbGlzdCkJdHlwZSBuYW1lIGFyZ2xpc3QKKyNkZWZpbmUgRVhGVU4obmFtZSwgcHJvdG8pCQluYW1lIHByb3RvCisjZGVmaW5lIERFRlVOKG5hbWUsIGFyZ2xpc3QsIGFyZ3MpCW5hbWUoYXJncykKKyNkZWZpbmUgREVGVU5fVk9JRChuYW1lKQkJbmFtZSh2b2lkKQorI2RlZmluZSBBTkQJCSwKKyNkZWZpbmUgRE9UUwkJLCAuLi4KKyNkZWZpbmUgTk9BUkdTCQl2b2lkCisjZW5kaWYgLyogISBJTl9HQ0MgKi8KKworI2Vsc2UJLyogTm90IEFOU0kgQy4gICovCisKKyN1bmRlZiAgQU5TSV9QUk9UT1RZUEVTCisjZGVmaW5lIFBUUgkJY2hhciAqCisjZGVmaW5lIFBUUkNPTlNUCVBUUgorI2RlZmluZSBMT05HX0RPVUJMRQlkb3VibGUKKworI2RlZmluZSBQQVJBTVMoYXJncykJCSgpCisjZGVmaW5lIFZQQVJBTVMoYXJncykJCSh2YV9hbGlzdCkgdmFfZGNsCisjZGVmaW5lIFZBX1NUQVJUKHZhX2xpc3QsIHZhcikJdmFfc3RhcnQodmFfbGlzdCkKKworI2RlZmluZSBWQV9PUEVOKEFQLCBWQVIpCQl7IHZhX2xpc3QgQVA7IHZhX3N0YXJ0KEFQKTsgeyBzdHJ1Y3QgUWRteQorI2RlZmluZSBWQV9DTE9TRShBUCkJCQl9IHZhX2VuZChBUCk7IH0KKyNkZWZpbmUgVkFfRklYRURBUkcoQVAsIFRZUEUsIE5BTUUpCVRZUEUgTkFNRSA9IHZhX2FyZyhBUCwgVFlQRSkKKworLyogc29tZSBzeXN0ZW1zIGRlZmluZSB0aGVzZSBpbiBoZWFkZXIgZmlsZXMgZm9yIG5vbi1hbnNpIG1vZGUgKi8KKyN1bmRlZiBjb25zdAorI3VuZGVmIHZvbGF0aWxlCisjdW5kZWYgc2lnbmVkCisjdW5kZWYgaW5saW5lCisjZGVmaW5lIGNvbnN0CisjZGVmaW5lIHZvbGF0aWxlCisjZGVmaW5lIHNpZ25lZAorI2RlZmluZSBpbmxpbmUKKworI2lmbmRlZiBJTl9HQ0MKKyNkZWZpbmUgQ09OU1QKKyNkZWZpbmUgVk9MQVRJTEUKKyNkZWZpbmUgU0lHTkVECisKKyNkZWZpbmUgUFJPVE8odHlwZSwgbmFtZSwgYXJnbGlzdCkJdHlwZSBuYW1lICgpCisjZGVmaW5lIEVYRlVOKG5hbWUsIHByb3RvKQkJbmFtZSgpCisjZGVmaW5lIERFRlVOKG5hbWUsIGFyZ2xpc3QsIGFyZ3MpCW5hbWUgYXJnbGlzdCBhcmdzOworI2RlZmluZSBERUZVTl9WT0lEKG5hbWUpCQluYW1lKCkKKyNkZWZpbmUgQU5ECQk7CisjZGVmaW5lIERPVFMKKyNkZWZpbmUgTk9BUkdTCisjZW5kaWYgLyogISBJTl9HQ0MgKi8KKworI2VuZGlmCS8qIEFOU0kgQy4gICovCisKKy8qIERlZmluZSBtYWNyb3MgZm9yIHNvbWUgZ2NjIGF0dHJpYnV0ZXMuICBUaGlzIHBlcm1pdHMgdXMgdG8gdXNlIHRoZQorICAgbWFjcm9zIGZyZWVseSwgYW5kIGtub3cgdGhhdCB0aGV5IHdpbGwgY29tZSBpbnRvIHBsYXkgZm9yIHRoZQorICAgdmVyc2lvbiBvZiBnY2MgaW4gd2hpY2ggdGhleSBhcmUgc3VwcG9ydGVkLiAgKi8KKworI2lmIChHQ0NfVkVSU0lPTiA8IDIwMDcpCisjIGRlZmluZSBfX2F0dHJpYnV0ZV9fKHgpCisjZW5kaWYKKworLyogQXR0cmlidXRlIF9fbWFsbG9jX18gb24gZnVuY3Rpb25zIHdhcyB2YWxpZCBhcyBvZiBnY2MgMi45Ni4gKi8KKyNpZm5kZWYgQVRUUklCVVRFX01BTExPQworIyBpZiAoR0NDX1ZFUlNJT04gPj0gMjA5NikKKyMgIGRlZmluZSBBVFRSSUJVVEVfTUFMTE9DIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSkKKyMgZWxzZQorIyAgZGVmaW5lIEFUVFJJQlVURV9NQUxMT0MKKyMgZW5kaWYgLyogR05VQyA+PSAyLjk2ICovCisjZW5kaWYgLyogQVRUUklCVVRFX01BTExPQyAqLworCisvKiBBdHRyaWJ1dGVzIG9uIGxhYmVscyB3ZXJlIHZhbGlkIGFzIG9mIGdjYyAyLjkzIGFuZCBnKysgNC41LiAgRm9yCisgICBnKysgYW4gYXR0cmlidXRlIG9uIGEgbGFiZWwgbXVzdCBiZSBmb2xsb3dlZCBieSBhIHNlbWljb2xvbi4gICovCisjaWZuZGVmIEFUVFJJQlVURV9VTlVTRURfTEFCRUwKKyMgaWZuZGVmIF9fY3BsdXNwbHVzCisjICBpZiBHQ0NfVkVSU0lPTiA+PSAyMDkzCisjICAgZGVmaW5lIEFUVFJJQlVURV9VTlVTRURfTEFCRUwgQVRUUklCVVRFX1VOVVNFRAorIyAgZWxzZQorIyAgIGRlZmluZSBBVFRSSUJVVEVfVU5VU0VEX0xBQkVMCisjICBlbmRpZgorIyBlbHNlCisjICBpZiBHQ0NfVkVSU0lPTiA+PSA0MDA1CisjICAgZGVmaW5lIEFUVFJJQlVURV9VTlVTRURfTEFCRUwgQVRUUklCVVRFX1VOVVNFRCA7CisjICBlbHNlCisjICAgZGVmaW5lIEFUVFJJQlVURV9VTlVTRURfTEFCRUwKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBBVFRSSUJVVEVfVU5VU0VECisjZGVmaW5lIEFUVFJJQlVURV9VTlVTRUQgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQorI2VuZGlmIC8qIEFUVFJJQlVURV9VTlVTRUQgKi8KKworLyogQmVmb3JlIEdDQyAzLjQsIHRoZSBDKysgZnJvbnRlbmQgY291bGRuJ3QgcGFyc2UgYXR0cmlidXRlcyBwbGFjZWQgYWZ0ZXIgdGhlCisgICBpZGVudGlmaWVyIG5hbWUuICAqLworI2lmICEgZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgKEdDQ19WRVJTSU9OID49IDMwMDQpCisjIGRlZmluZSBBUkdfVU5VU0VEKE5BTUUpIE5BTUUgQVRUUklCVVRFX1VOVVNFRAorI2Vsc2UgLyogIV9fY3BsdXNwbHVzIHx8IEdOVUMgPj0gMy40ICovCisjIGRlZmluZSBBUkdfVU5VU0VEKE5BTUUpIE5BTUUKKyNlbmRpZiAvKiAhX19jcGx1c3BsdXMgfHwgR05VQyA+PSAzLjQgKi8KKworI2lmbmRlZiBBVFRSSUJVVEVfTk9SRVRVUk4KKyNkZWZpbmUgQVRUUklCVVRFX05PUkVUVVJOIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKQorI2VuZGlmIC8qIEFUVFJJQlVURV9OT1JFVFVSTiAqLworCisvKiBBdHRyaWJ1dGUgYG5vbm51bGwnIHdhcyB2YWxpZCBhcyBvZiBnY2MgMy4zLiAgKi8KKyNpZm5kZWYgQVRUUklCVVRFX05PTk5VTEwKKyMgaWYgKEdDQ19WRVJTSU9OID49IDMwMDMpCisjICBkZWZpbmUgQVRUUklCVVRFX05PTk5VTEwobSkgX19hdHRyaWJ1dGVfXyAoKF9fbm9ubnVsbF9fIChtKSkpCisjIGVsc2UKKyMgIGRlZmluZSBBVFRSSUJVVEVfTk9OTlVMTChtKQorIyBlbmRpZiAvKiBHTlVDID49IDMuMyAqLworI2VuZGlmIC8qIEFUVFJJQlVURV9OT05OVUxMICovCisKKy8qIEF0dHJpYnV0ZSBgcHVyZScgd2FzIHZhbGlkIGFzIG9mIGdjYyAzLjAuICAqLworI2lmbmRlZiBBVFRSSUJVVEVfUFVSRQorIyBpZiAoR0NDX1ZFUlNJT04gPj0gMzAwMCkKKyMgIGRlZmluZSBBVFRSSUJVVEVfUFVSRSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorIyBlbHNlCisjICBkZWZpbmUgQVRUUklCVVRFX1BVUkUKKyMgZW5kaWYgLyogR05VQyA+PSAzLjAgKi8KKyNlbmRpZiAvKiBBVFRSSUJVVEVfUFVSRSAqLworCisvKiBVc2UgQVRUUklCVVRFX1BSSU5URiB3aGVuIHRoZSBmb3JtYXQgc3BlY2lmaWVyIG11c3Qgbm90IGJlIE5VTEwuCisgICBUaGlzIHdhcyB0aGUgY2FzZSBmb3IgdGhlIGBwcmludGYnIGZvcm1hdCBhdHRyaWJ1dGUgYnkgaXRzZWxmCisgICBiZWZvcmUgR0NDIDMuMywgYnV0IGFzIG9mIDMuMyB3ZSBuZWVkIHRvIGFkZCB0aGUgYG5vbm51bGwnCisgICBhdHRyaWJ1dGUgdG8gcmV0YWluIHRoaXMgYmVoYXZpb3IuICAqLworI2lmbmRlZiBBVFRSSUJVVEVfUFJJTlRGCisjZGVmaW5lIEFUVFJJQlVURV9QUklOVEYobSwgbikgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIG0sIG4pKSkgQVRUUklCVVRFX05PTk5VTEwobSkKKyNkZWZpbmUgQVRUUklCVVRFX1BSSU5URl8xIEFUVFJJQlVURV9QUklOVEYoMSwgMikKKyNkZWZpbmUgQVRUUklCVVRFX1BSSU5URl8yIEFUVFJJQlVURV9QUklOVEYoMiwgMykKKyNkZWZpbmUgQVRUUklCVVRFX1BSSU5URl8zIEFUVFJJQlVURV9QUklOVEYoMywgNCkKKyNkZWZpbmUgQVRUUklCVVRFX1BSSU5URl80IEFUVFJJQlVURV9QUklOVEYoNCwgNSkKKyNkZWZpbmUgQVRUUklCVVRFX1BSSU5URl81IEFUVFJJQlVURV9QUklOVEYoNSwgNikKKyNlbmRpZiAvKiBBVFRSSUJVVEVfUFJJTlRGICovCisKKy8qIFVzZSBBVFRSSUJVVEVfRlBUUl9QUklOVEYgd2hlbiB0aGUgZm9ybWF0IGF0dHJpYnV0ZSBpcyB0byBiZSBzZXQgb24KKyAgIGEgZnVuY3Rpb24gcG9pbnRlci4gIEZvcm1hdCBhdHRyaWJ1dGVzIHdlcmUgYWxsb3dlZCBvbiBmdW5jdGlvbgorICAgcG9pbnRlcnMgYXMgb2YgZ2NjIDMuMS4gICovCisjaWZuZGVmIEFUVFJJQlVURV9GUFRSX1BSSU5URgorIyBpZiAoR0NDX1ZFUlNJT04gPj0gMzAwMSkKKyMgIGRlZmluZSBBVFRSSUJVVEVfRlBUUl9QUklOVEYobSwgbikgQVRUUklCVVRFX1BSSU5URihtLCBuKQorIyBlbHNlCisjICBkZWZpbmUgQVRUUklCVVRFX0ZQVFJfUFJJTlRGKG0sIG4pCisjIGVuZGlmIC8qIEdOVUMgPj0gMy4xICovCisjIGRlZmluZSBBVFRSSUJVVEVfRlBUUl9QUklOVEZfMSBBVFRSSUJVVEVfRlBUUl9QUklOVEYoMSwgMikKKyMgZGVmaW5lIEFUVFJJQlVURV9GUFRSX1BSSU5URl8yIEFUVFJJQlVURV9GUFRSX1BSSU5URigyLCAzKQorIyBkZWZpbmUgQVRUUklCVVRFX0ZQVFJfUFJJTlRGXzMgQVRUUklCVVRFX0ZQVFJfUFJJTlRGKDMsIDQpCisjIGRlZmluZSBBVFRSSUJVVEVfRlBUUl9QUklOVEZfNCBBVFRSSUJVVEVfRlBUUl9QUklOVEYoNCwgNSkKKyMgZGVmaW5lIEFUVFJJQlVURV9GUFRSX1BSSU5URl81IEFUVFJJQlVURV9GUFRSX1BSSU5URig1LCA2KQorI2VuZGlmIC8qIEFUVFJJQlVURV9GUFRSX1BSSU5URiAqLworCisvKiBVc2UgQVRUUklCVVRFX05VTExfUFJJTlRGIHdoZW4gdGhlIGZvcm1hdCBzcGVjaWZpZXIgbWF5IGJlIE5VTEwuICBBCisgICBOVUxMIGZvcm1hdCBzcGVjaWZpZXIgd2FzIGFsbG93ZWQgYXMgb2YgZ2NjIDMuMy4gICovCisjaWZuZGVmIEFUVFJJQlVURV9OVUxMX1BSSU5URgorIyBpZiAoR0NDX1ZFUlNJT04gPj0gMzAwMykKKyMgIGRlZmluZSBBVFRSSUJVVEVfTlVMTF9QUklOVEYobSwgbikgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIG0sIG4pKSkKKyMgZWxzZQorIyAgZGVmaW5lIEFUVFJJQlVURV9OVUxMX1BSSU5URihtLCBuKQorIyBlbmRpZiAvKiBHTlVDID49IDMuMyAqLworIyBkZWZpbmUgQVRUUklCVVRFX05VTExfUFJJTlRGXzEgQVRUUklCVVRFX05VTExfUFJJTlRGKDEsIDIpCisjIGRlZmluZSBBVFRSSUJVVEVfTlVMTF9QUklOVEZfMiBBVFRSSUJVVEVfTlVMTF9QUklOVEYoMiwgMykKKyMgZGVmaW5lIEFUVFJJQlVURV9OVUxMX1BSSU5URl8zIEFUVFJJQlVURV9OVUxMX1BSSU5URigzLCA0KQorIyBkZWZpbmUgQVRUUklCVVRFX05VTExfUFJJTlRGXzQgQVRUUklCVVRFX05VTExfUFJJTlRGKDQsIDUpCisjIGRlZmluZSBBVFRSSUJVVEVfTlVMTF9QUklOVEZfNSBBVFRSSUJVVEVfTlVMTF9QUklOVEYoNSwgNikKKyNlbmRpZiAvKiBBVFRSSUJVVEVfTlVMTF9QUklOVEYgKi8KKworLyogQXR0cmlidXRlIGBzZW50aW5lbCcgd2FzIHZhbGlkIGFzIG9mIGdjYyAzLjUuICAqLworI2lmbmRlZiBBVFRSSUJVVEVfU0VOVElORUwKKyMgaWYgKEdDQ19WRVJTSU9OID49IDMwMDUpCisjICBkZWZpbmUgQVRUUklCVVRFX1NFTlRJTkVMIF9fYXR0cmlidXRlX18gKChfX3NlbnRpbmVsX18pKQorIyBlbHNlCisjICBkZWZpbmUgQVRUUklCVVRFX1NFTlRJTkVMCisjIGVuZGlmIC8qIEdOVUMgPj0gMy41ICovCisjZW5kaWYgLyogQVRUUklCVVRFX1NFTlRJTkVMICovCisKKworI2lmbmRlZiBBVFRSSUJVVEVfQUxJR05FRF9BTElHTk9GCisjIGlmIChHQ0NfVkVSU0lPTiA+PSAzMDAwKQorIyAgZGVmaW5lIEFUVFJJQlVURV9BTElHTkVEX0FMSUdOT0YobSkgX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fIChfX2FsaWdub2ZfXyAobSkpKSkKKyMgZWxzZQorIyAgZGVmaW5lIEFUVFJJQlVURV9BTElHTkVEX0FMSUdOT0YobSkKKyMgZW5kaWYgLyogR05VQyA+PSAzLjAgKi8KKyNlbmRpZiAvKiBBVFRSSUJVVEVfQUxJR05FRF9BTElHTk9GICovCisKKy8qIFVzZWZ1bCBmb3Igc3RydWN0dXJlcyB3aG9zZSBsYXlvdXQgbXVzdCBtdWNoIHNvbWUgYmluYXJ5IHNwZWNpZmljYXRpb24KKyAgIHJlZ2FyZGxlc3Mgb2YgdGhlIGFsaWdubWVudCBhbmQgcGFkZGluZyBxdWFsaXRpZXMgb2YgdGhlIGNvbXBpbGVyLiAgKi8KKyNpZm5kZWYgQVRUUklCVVRFX1BBQ0tFRAorIyBkZWZpbmUgQVRUUklCVVRFX1BBQ0tFRCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkKKyNlbmRpZgorCisvKiBBdHRyaWJ1dGUgYGhvdCcgYW5kIGBjb2xkJyB3YXMgdmFsaWQgYXMgb2YgZ2NjIDQuMy4gICovCisjaWZuZGVmIEFUVFJJQlVURV9DT0xECisjIGlmIChHQ0NfVkVSU0lPTiA+PSA0MDAzKQorIyAgZGVmaW5lIEFUVFJJQlVURV9DT0xEIF9fYXR0cmlidXRlX18gKChfX2NvbGRfXykpCisjIGVsc2UKKyMgIGRlZmluZSBBVFRSSUJVVEVfQ09MRAorIyBlbmRpZiAvKiBHTlVDID49IDQuMyAqLworI2VuZGlmIC8qIEFUVFJJQlVURV9DT0xEICovCisjaWZuZGVmIEFUVFJJQlVURV9IT1QKKyMgaWYgKEdDQ19WRVJTSU9OID49IDQwMDMpCisjICBkZWZpbmUgQVRUUklCVVRFX0hPVCBfX2F0dHJpYnV0ZV9fICgoX19ob3RfXykpCisjIGVsc2UKKyMgIGRlZmluZSBBVFRSSUJVVEVfSE9UCisjIGVuZGlmIC8qIEdOVUMgPj0gNC4zICovCisjZW5kaWYgLyogQVRUUklCVVRFX0hPVCAqLworCisvKiBXZSB1c2UgX19leHRlbnNpb25fXyBpbiBzb21lIHBsYWNlcyB0byBzdXBwcmVzcyAtcGVkYW50aWMgd2FybmluZ3MKKyAgIGFib3V0IEdDQyBleHRlbnNpb25zLiAgVGhpcyBmZWF0dXJlIGRpZG4ndCB3b3JrIHByb3Blcmx5IGJlZm9yZQorICAgZ2NjIDIuOC4gICovCisjaWYgR0NDX1ZFUlNJT04gPCAyMDA4CisjZGVmaW5lIF9fZXh0ZW5zaW9uX18KKyNlbmRpZgorCisvKiBUaGlzIGlzIHVzZWQgdG8gZGVjbGFyZSBhIGNvbnN0IHZhcmlhYmxlIHdoaWNoIHNob3VsZCBiZSB2aXNpYmxlCisgICBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQuICBVc2UgaXQgYXMKKyAgICAgRVhQT1JURURfQ09OU1QgaW50IGkgPSAxOworICAgVGhpcyBpcyBiZWNhdXNlIHRoZSBzZW1hbnRpY3Mgb2YgY29uc3QgYXJlIGRpZmZlcmVudCBpbiBDIGFuZCBDKysuCisgICAiZXh0ZXJuIGNvbnN0IiBpcyBwZXJtaXR0ZWQgaW4gQyBidXQgaXQgbG9va3Mgc3RyYW5nZSwgYW5kIGdjYworICAgd2FybnMgYWJvdXQgaXQgd2hlbiAtV2MrKy1jb21wYXQgaXMgbm90IHVzZWQuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIEVYUE9SVEVEX0NPTlNUIGV4dGVybiBjb25zdAorI2Vsc2UKKyNkZWZpbmUgRVhQT1JURURfQ09OU1QgY29uc3QKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYJLyogYW5zaWRlY2wuaAkqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2F1dG8taG9zdC5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2F1dG8taG9zdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZjRmNWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvYXV0by1ob3N0LmgKQEAgLTAsMCArMSwxOTExIEBACisvKiBhdXRvLWhvc3QuaC4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZy5pbiBieSBjb25maWd1cmUuICAqLworLyogY29uZmlnLmluLiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmFjIGJ5IGF1dG9oZWFkZXIuICAqLworCisvKiBEZWZpbmUgaWYgYnVpbGRpbmcgdW5pdmVyc2FsIChpbnRlcm5hbCBoZWxwZXIgbWFjcm8pICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGFzIHRoZSBudW1iZXIgb2YgYml0cyBpbiBhIGJ5dGUsIGlmIGBsaW1pdHMuaCcgZG9lc24ndC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgQ0hBUl9CSVQgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSAwLzEgdG8gZm9yY2UgdGhlIGNob2ljZSBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nIG1vZGVsLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBDT05GSUdfU0pMSl9FWENFUFRJT05TICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gZW5hYmxlIHRoZSB1c2Ugb2YgYSBkZWZhdWx0IGFzc2VtYmxlci4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgREVGQVVMVF9BU1NFTUJMRVIgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byBlbmFibGUgdGhlIHVzZSBvZiBhIGRlZmF1bHQgbGlua2VyLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBERUZBVUxUX0xJTktFUiAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IHRvIHVzZSBfX2N4YV9hdGV4aXQsIHJhdGhlciB0aGFuIGF0ZXhpdCwgdG8gcmVnaXN0ZXIgQysrCisgICBkZXN0cnVjdG9ycyBmb3IgbG9jYWwgc3RhdGljcyBhbmQgZ2xvYmFsIG9iamVjdHMuIFRoaXMgaXMgZXNzZW50aWFsIGZvcgorICAgZnVsbHkgc3RhbmRhcmRzLWNvbXBsaWFudCBoYW5kbGluZyBvZiBkZXN0cnVjdG9ycywgYnV0IHJlcXVpcmVzCisgICBfX2N4YV9hdGV4aXQgaW4gbGliYy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIERFRkFVTFRfVVNFX0NYQV9BVEVYSVQgMgorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IGFzc2VydGlvbnMgZW5hYmxlZC4gVGhpcyBpcyBhIGNoZWFwIGNoZWNrLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgRU5BQkxFX0FTU0VSVF9DSEVDS0lORyAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgbW9yZSBydW4tdGltZSBzYW5pdHkgY2hlY2tzLiBUaGlzIG9uZSBnZXRzIGEgZ3JhYiBiYWcgb2YKKyAgIG1pc2NlbGxhbmVvdXMgYnV0IHJlbGF0aXZlbHkgY2hlYXAgY2hlY2tzLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBFTkFCTEVfQ0hFQ0tJTkcgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIHRvIHNwZWNpZnkgdGhhdCB3ZSBhcmUgdXNpbmcgdGhlIEJJRCBkZWNpbWFsIGZsb2F0aW5nIHBvaW50CisgICBmb3JtYXQgaW5zdGVhZCBvZiBEUEQgKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEVOQUJMRV9ERUNJTUFMX0JJRF9GT1JNQVQgMAorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgdG8gZW5hYmxlIGRlY2ltYWwgZmxvYXQgZXh0ZW5zaW9uIHRvIEMuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBFTkFCTEVfREVDSU1BTF9GTE9BVCAwCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgbW9yZSBydW4tdGltZSBzYW5pdHkgY2hlY2tzIGZvciBkYXRhZmxvdy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgRU5BQkxFX0RGX0NIRUNLSU5HICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSB0byBlbmFibGUgZml4ZWQtcG9pbnQgYXJpdGhtZXRpYyBleHRlbnNpb24gdG8gQy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEVOQUJMRV9GSVhFRF9QT0lOVCAwCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgZm9sZCBjaGVja2VkIHRoYXQgaXQgbmV2ZXIgZGVzdHJ1Y3RzIGl0cyBhcmd1bWVudC4gVGhpcworICAgaXMgcXVpdGUgZXhwZW5zaXZlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBFTkFCTEVfRk9MRF9DSEVDS0lORyAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IHRoZSBnYXJiYWdlIGNvbGxlY3RvciB0byBvcGVyYXRlIGluIG1heGltYWxseSBwYXJhbm9pZAorICAgbW9kZSwgdmFsaWRhdGluZyB0aGUgZW50aXJlIGhlYXAgYW5kIGNvbGxlY3RpbmcgZ2FyYmFnZSBhdCBldmVyeQorICAgb3Bwb3J0dW5pdHkuIFRoaXMgaXMgZXh0cmVtZWx5IGV4cGVuc2l2ZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgRU5BQkxFX0dDX0FMV0FZU19DT0xMRUNUICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIHRvIGRvIG9iamVjdCBwb2lzb25pbmcgYW5kIG90aGVyCisgICBtZW1vcnkgYWxsb2NhdGlvbiBjaGVja3MuIFRoaXMgaXMgcXVpdGUgZXhwZW5zaXZlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBFTkFCTEVfR0NfQ0hFQ0tJTkcgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCBvcGVyYXRpb25zIG9uIEdJTVBMRSAodGhlIGJhc2ljIGRhdGEgc3RydWN0dXJlIG9mIHRoZQorICAgaGlnaC1sZXZlbCBvcHRpbWl6ZXJzKSB0byBiZSBjaGVja2VkIGZvciBkeW5hbWljIHR5cGUgc2FmZXR5IGF0IHJ1bnRpbWUuCisgICBUaGlzIGlzIG1vZGVyYXRlbHkgZXhwZW5zaXZlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBFTkFCTEVfR0lNUExFX0NIRUNLSU5HICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgZ2NjIHNob3VsZCBhbHdheXMgcGFzcyAtLWJ1aWxkLWlkIHRvIGxpbmtlci4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgRU5BQkxFX0xEX0JVSUxESUQgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byBlbmFibGUgTFRPIHN1cHBvcnQuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBFTkFCTEVfTFRPIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHRyYW5zbGF0aW9uIG9mIHByb2dyYW0gbWVzc2FnZXMgdG8gdGhlIHVzZXIncyBuYXRpdmUKKyAgIGxhbmd1YWdlIGlzIHJlcXVlc3RlZC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgRU5BQkxFX05MUyAqLworI2VuZGlmCisKKworLyogRGVmaW5lIHRvIGVuYWJsZSBwbHVnaW4gc3VwcG9ydC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEVOQUJMRV9QTFVHSU4gMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IGFsbCBvcGVyYXRpb25zIG9uIFJUTCAodGhlIGJhc2ljIGRhdGEgc3RydWN0dXJlIG9mIHRoZQorICAgb3B0aW1pemVyIGFuZCBiYWNrIGVuZCkgdG8gYmUgY2hlY2tlZCBmb3IgZHluYW1pYyB0eXBlIHNhZmV0eSBhdCBydW50aW1lLgorICAgVGhpcyBpcyBxdWl0ZSBleHBlbnNpdmUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEVOQUJMRV9SVExfQ0hFQ0tJTkcgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCBSVEwgZmxhZyBhY2Nlc3NlcyB0byBiZSBjaGVja2VkIGFnYWluc3QgdGhlIFJUTCBjb2RlcworICAgdGhhdCBhcmUgc3VwcG9ydGVkIGZvciBlYWNoIGFjY2VzcyBtYWNyby4gVGhpcyBpcyByZWxhdGl2ZWx5IGNoZWFwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBFTkFCTEVfUlRMX0ZMQUdfQ0hFQ0tJTkcgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCBydW50aW1lIGFzc2VydGlvbnMgZW5hYmxlZC4gVGhpcyBpcyBhIGNoZWFwIGNoZWNrLiAqLworI2RlZmluZSBFTkFCTEVfUlVOVElNRV9DSEVDS0lORyAxCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCBhbGwgb3BlcmF0aW9ucyBvbiB0cmVlcyAodGhlIGJhc2ljIGRhdGEgc3RydWN0dXJlIG9mIHRoZQorICAgZnJvbnQgZW5kcykgdG8gYmUgY2hlY2tlZCBmb3IgZHluYW1pYyB0eXBlIHNhZmV0eSBhdCBydW50aW1lLiBUaGlzIGlzCisgICBtb2RlcmF0ZWx5IGV4cGVuc2l2ZS4gVGhlIHRyZWUgYnJvd3NlciBkZWJ1Z2dpbmcgcm91dGluZXMgd2lsbCBhbHNvIGJlCisgICBlbmFibGVkIGJ5IHRoaXMgb3B0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBFTkFCTEVfVFJFRV9DSEVDS0lORyAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IGFsbCBnaW1wbGUgdHlwZXMgdG8gYmUgdmVyaWZpZWQgYWZ0ZXIgZ2ltcGxpZmlhdGlvbi4KKyAgIFRoaXMgaXMgY2hlYXAuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEVOQUJMRV9UWVBFU19DSEVDS0lORyAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IHRvIHJ1biBzdWJwcm9ncmFtcyBhbmQgZ2VuZXJhdGVkIHByb2dyYW1zIHRocm91Z2gKKyAgIHZhbGdyaW5kIChhIG1lbW9yeSBjaGVja2VyKS4gVGhpcyBpcyBleHRyZW1lbHkgZXhwZW5zaXZlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBFTkFCTEVfVkFMR1JJTkRfQ0hFQ0tJTkcgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIGluc3RhbGxhdGlvbiBwYXRocyBzaG91bGQgYmUgbG9va2VkIHVwIGluIHRoZSBXaW5kb3dzCisgICBSZWdpc3RyeS4gSWdub3JlZCBvbiBub24tV2luZG93cyBob3N0cy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgRU5BQkxFX1dJTjMyX1JFR0lTVFJZICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gdGhlIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBsaXN0IG9mIGV4dHJhIG1hY2hpbmUgbW9kZXMgZm9yCisgICB0aGlzIGFyY2hpdGVjdHVyZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEVYVFJBX01PREVTX0ZJTEUgImNvbmZpZy9hcm0vYXJtLW1vZGVzLmRlZiIKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byBlbmFibGUgZGV0YWlsZWQgbWVtb3J5IGFsbG9jYXRpb24gc3RhdHMgZ2F0aGVyaW5nLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBHQVRIRVJfU1RBVElTVElDUyAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHRoZSB6b25lIGNvbGxlY3RvciBpcyBpbiB1c2UgKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgR0dDX1pPTkUgKi8KKyNlbmRpZgorCisKKy8qIG1jb250ZXh0X3QgZmllbGRzIHN0YXJ0IHdpdGggX18gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFTX01DT05URVhUX1RfVU5ERVJTQ09SRVMgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyBjbXBiLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0FTX0NNUEIgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyB0aGUgRENJL0lDSSBpbnN0cnVjdGlvbnMuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfRENJICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgdGhlIC0tZGVidWctcHJlZml4LW1hcCBvcHRpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0FTX0RFQlVHX1BSRUZJWF9NQVAgMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIERGUCBpbnN0cnVjdGlvbnMuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfREZQICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgLmR0cHJlbHdvcmQuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfRFRQUkVMV09SRCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIGR3YXJmMiAuZmlsZS8ubG9jIGRpcmVjdGl2ZXMsIGFuZAorICAgcHJlc2VydmVzIGZpbGUgdGFibGUgaW5kaWNlcyBleGFjdGx5IGFzIGdpdmVuLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9BU19EV0FSRjJfREVCVUdfTElORSAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgZXhwbGljaXQgcmVsb2NhdGlvbnMuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfRVhQTElDSVRfUkVMT0NTICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgZnBybmQuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfRlBSTkQgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyB0aGUgLS1nZHdhcmYyIG9wdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfQVNfR0RXQVJGMl9ERUJVR19GTEFHIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyAuZ251X2F0dHJpYnV0ZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19HTlVfQVRUUklCVVRFICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdHJ1ZSBpZiB0aGUgYXNzZW1ibGVyIHN1cHBvcnRzICcubG9uZyBmb29AR09UT0ZGJy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19HT1RPRkZfSU5fREFUQSAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIHRoZSAtLWdzdGFicyBvcHRpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0FTX0dTVEFCU19ERUJVR19GTEFHIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyB0aGUgU3VuIHN5bnRheCBmb3IgY21vdi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19JWDg2X0NNT1ZfU1VOX1NZTlRBWCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIHRoZSBzdWJ0cmFjdGlvbiBvZiBzeW1ib2xzIGluIGRpZmZlcmVudAorICAgc2VjdGlvbnMuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfSVg4Nl9ESUZGX1NFQ1RfREVMVEEgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyB0aGUgZmZyZWVwIG1uZW1vbmljLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0FTX0lYODZfRkZSRUVQICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgdXNlcyBmaWxkcSBhbmQgZmlzdHEgbW5lbW9uaWNzLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0FTX0lYODZfRklMRFEgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciB1c2VzIGZpbGRzIGFuZCBmaXN0cyBtbmVtb25pY3MuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfSVg4Nl9GSUxEUyAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIHRoZSAucXVhZCBkaXJlY3RpdmUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfSVg4Nl9RVUFEICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdHJ1ZSBpZiB0aGUgYXNzZW1ibGVyIHN1cHBvcnRzICdyZXAgPGluc24+LCBsb2NrIDxpbnNuPicuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfSVg4Nl9SRVBfTE9DS19QUkVGSVggKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyB0aGUgc2FoZiBtbmVtb25pYyBpbiA2NGJpdCBtb2RlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0FTX0lYODZfU0FIRiAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIHRoZSBzd2FwIHN1ZmZpeC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19JWDg2X1NXQVAgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyB0aGUgbGl0dXNlX2pzcmRpcmVjdCByZWxvY2F0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0FTX0pTUkRJUkVDVF9SRUxPQ1MgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyAuc2xlYjEyOCBhbmQgLnVsZWIxMjguICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0FTX0xFQjEyOCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgdGhlIGFzc2VtYmxlciB3b24ndCBjb21wbGFpbiBhYm91dCBhIGxpbmUgc3VjaCBhcyAjIDAgIiIgMi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfQVNfTElORV9aRVJPIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyBsdG9mZnggYW5kIGxkeG1vdiByZWxvY2F0aW9ucy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19MVE9GRlhfTERYTU9WX1JFTE9DUyAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIExXU1lOQyBpbnN0cnVjdGlvbnMuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfTFdTWU5DICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgbWZjciBmaWVsZC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19NRkNSRiAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIG1mZmdwciBhbmQgbWZ0Z3ByLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0FTX01GUEdQUiAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIHRoZSAtbm8tbXVsLWJ1Zy1hYm9ydCBvcHRpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfTk9fTVVMX0JVR19BQk9SVF9PUFRJT04gKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB0aGUgYXNzZW1ibGVyIHVuZGVyc3RhbmRzIC1tbm8tc2hhcmVkLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0FTX05PX1NIQVJFRCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIG9mZnNldGFibGUgJWxvKCkuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfT0ZGU0VUQUJMRV9MTzEwICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgcG9wY250YiBmaWVsZC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19QT1BDTlRCICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgUE9QQ05URCBpbnN0cnVjdGlvbnMuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfUE9QQ05URCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIC5yZWYgKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19SRUYgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyAucmVnaXN0ZXIuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfUkVHSVNURVJfUFNFVURPX09QICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgUl9QUENfUkVMMTYgcmVsb2NzLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0FTX1JFTDE2ICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgLXJlbGF4IG9wdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19SRUxBWF9PUFRJT04gKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBhbmQgbGlua2VyIHN1cHBvcnQgR09UREFUQV9PUCByZWxvY3MuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfU1BBUkNfR09UREFUQV9PUCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIGFuZCBsaW5rZXIgc3VwcG9ydCB1bmFsaWduZWQgUEMgcmVsYXRpdmUgcmVsb2NzLgorICAgKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19TUEFSQ19VQV9QQ1JFTCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIGFuZCBsaW5rZXIgc3VwcG9ydCB1bmFsaWduZWQgUEMgcmVsYXRpdmUgcmVsb2NzCisgICBhZ2FpbnN0IGhpZGRlbiBzeW1ib2xzLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0FTX1NQQVJDX1VBX1BDUkVMX0hJRERFTiAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIHRocmVhZC1sb2NhbCBzdG9yYWdlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9BU19UTFMgMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIGFyZyBpbmZvIGZvciBfX3Rsc19nZXRfYWRkci4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19UTFNfTUFSS0VSUyAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIFZTWCBpbnN0cnVjdGlvbnMuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfVlNYICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGF0b2xsJyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfQVRPTEwgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhdG9xJyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BVE9RICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNsZWFyZXJyX3VubG9ja2VkJyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfQ0xFQVJFUlJfVU5MT0NLRUQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjbG9jaycgZnVuY3Rpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0NMT0NLIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiA8dGltZS5oPiBkZWZpbmVzIGNsb2NrX3QuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0NMT0NLX1QgMQorI2VuZGlmCisKKworLyogRGVmaW5lIDAvMSBpZiB5b3VyIGFzc2VtYmxlciBhbmQgbGlua2VyIHN1cHBvcnQgQ09NREFUIGdyb3Vwcy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfQ09NREFUX0dST1VQIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdhYm9ydCcsIG90aGVyd2lzZSBkZWZpbmUgdG8gMC4KKyAgICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfQUJPUlQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ2FzcHJpbnRmJywgb3RoZXJ3aXNlIGRlZmluZSB0bworICAgMC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9BU1BSSU5URiAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnYXRvZicsIG90aGVyd2lzZSBkZWZpbmUgdG8gMC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9BVE9GIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdhdG9sJywgb3RoZXJ3aXNlIGRlZmluZSB0byAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX0FUT0wgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ2Jhc2VuYW1lJywgb3RoZXJ3aXNlIGRlZmluZSB0bworICAgMC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9CQVNFTkFNRSAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnY2FsbG9jJywgb3RoZXJ3aXNlIGRlZmluZSB0byAwLgorICAgKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9DQUxMT0MgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ2NsZWFyZXJyX3VubG9ja2VkJywgb3RoZXJ3aXNlCisgICBkZWZpbmUgdG8gMC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9DTEVBUkVSUl9VTkxPQ0tFRCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnY2xvY2snLCBvdGhlcndpc2UgZGVmaW5lIHRvIDAuCisgICAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX0NMT0NLIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdlcnJubycsIG90aGVyd2lzZSBkZWZpbmUgdG8gMC4KKyAgICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfRVJSTk8gMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ2Zlb2ZfdW5sb2NrZWQnLCBvdGhlcndpc2UgZGVmaW5lCisgICB0byAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX0ZFT0ZfVU5MT0NLRUQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ2ZlcnJvcl91bmxvY2tlZCcsIG90aGVyd2lzZQorICAgZGVmaW5lIHRvIDAuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfRkVSUk9SX1VOTE9DS0VEIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdmZmx1c2hfdW5sb2NrZWQnLCBvdGhlcndpc2UKKyAgIGRlZmluZSB0byAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX0ZGTFVTSF9VTkxPQ0tFRCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnZmdldGNfdW5sb2NrZWQnLCBvdGhlcndpc2UKKyAgIGRlZmluZSB0byAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX0ZHRVRDX1VOTE9DS0VEIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdmZ2V0c191bmxvY2tlZCcsIG90aGVyd2lzZQorICAgZGVmaW5lIHRvIDAuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfRkdFVFNfVU5MT0NLRUQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ2ZpbGVub191bmxvY2tlZCcsIG90aGVyd2lzZQorICAgZGVmaW5lIHRvIDAuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfRklMRU5PX1VOTE9DS0VEIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdmcHJpbnRmX3VubG9ja2VkJywgb3RoZXJ3aXNlCisgICBkZWZpbmUgdG8gMC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9GUFJJTlRGX1VOTE9DS0VEIDAKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdmcHV0Y191bmxvY2tlZCcsIG90aGVyd2lzZQorICAgZGVmaW5lIHRvIDAuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfRlBVVENfVU5MT0NLRUQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ2ZwdXRzX3VubG9ja2VkJywgb3RoZXJ3aXNlCisgICBkZWZpbmUgdG8gMC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9GUFVUU19VTkxPQ0tFRCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnZnJlYWRfdW5sb2NrZWQnLCBvdGhlcndpc2UKKyAgIGRlZmluZSB0byAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX0ZSRUFEX1VOTE9DS0VEIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdmcmVlJywgb3RoZXJ3aXNlIGRlZmluZSB0byAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX0ZSRUUgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ2Z3cml0ZV91bmxvY2tlZCcsIG90aGVyd2lzZQorICAgZGVmaW5lIHRvIDAuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfRldSSVRFX1VOTE9DS0VEIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdnZXRjaGFyX3VubG9ja2VkJywgb3RoZXJ3aXNlCisgICBkZWZpbmUgdG8gMC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9HRVRDSEFSX1VOTE9DS0VEIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdnZXRjd2QnLCBvdGhlcndpc2UgZGVmaW5lIHRvIDAuCisgICAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX0dFVENXRCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnZ2V0Y191bmxvY2tlZCcsIG90aGVyd2lzZSBkZWZpbmUKKyAgIHRvIDAuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfR0VUQ19VTkxPQ0tFRCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnZ2V0ZW52Jywgb3RoZXJ3aXNlIGRlZmluZSB0byAwLgorICAgKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9HRVRFTlYgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ2dldG9wdCcsIG90aGVyd2lzZSBkZWZpbmUgdG8gMC4KKyAgICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfR0VUT1BUIDAKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdnZXRwYWdlc2l6ZScsIG90aGVyd2lzZSBkZWZpbmUKKyAgIHRvIDAuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfR0VUUEFHRVNJWkUgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ2dldHJsaW1pdCcsIG90aGVyd2lzZSBkZWZpbmUgdG8KKyAgIDAuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfR0VUUkxJTUlUIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdnZXRydXNhZ2UnLCBvdGhlcndpc2UgZGVmaW5lIHRvCisgICAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX0dFVFJVU0FHRSAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnZ2V0d2QnLCBvdGhlcndpc2UgZGVmaW5lIHRvIDAuCisgICAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX0dFVFdEIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdsZGdldG5hbWUnLCBvdGhlcndpc2UgZGVmaW5lIHRvCisgICAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX0xER0VUTkFNRSAwCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnbWFsbG9jJywgb3RoZXJ3aXNlIGRlZmluZSB0byAwLgorICAgKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9NQUxMT0MgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ3B1dGNoYXJfdW5sb2NrZWQnLCBvdGhlcndpc2UKKyAgIGRlZmluZSB0byAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX1BVVENIQVJfVU5MT0NLRUQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ3B1dGNfdW5sb2NrZWQnLCBvdGhlcndpc2UgZGVmaW5lCisgICB0byAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX1BVVENfVU5MT0NLRUQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ3JlYWxsb2MnLCBvdGhlcndpc2UgZGVmaW5lIHRvIDAuCisgICAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX1JFQUxMT0MgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ3NicmsnLCBvdGhlcndpc2UgZGVmaW5lIHRvIDAuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfU0JSSyAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnc2V0cmxpbWl0Jywgb3RoZXJ3aXNlIGRlZmluZSB0bworICAgMC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9TRVRSTElNSVQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ3NpZ2FsdHN0YWNrJywgb3RoZXJ3aXNlIGRlZmluZQorICAgdG8gMC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9TSUdBTFRTVEFDSyAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnc25wcmludGYnLCBvdGhlcndpc2UgZGVmaW5lIHRvCisgICAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX1NOUFJJTlRGIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdzdHJzaWduYWwnLCBvdGhlcndpc2UgZGVmaW5lIHRvCisgICAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX1NUUlNJR05BTCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnc3Ryc3RyJywgb3RoZXJ3aXNlIGRlZmluZSB0byAwLgorICAgKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9TVFJTVFIgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ3N0cnZlcnNjbXAnLCBvdGhlcndpc2UgZGVmaW5lIHRvCisgICAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX1NUUlZFUlNDTVAgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ3RpbWVzJywgb3RoZXJ3aXNlIGRlZmluZSB0byAwLgorICAgKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9USU1FUyAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAndmFzcHJpbnRmJywgb3RoZXJ3aXNlIGRlZmluZSB0bworICAgMC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9WQVNQUklOVEYgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ3ZzbnByaW50ZicsIG90aGVyd2lzZSBkZWZpbmUgdG8KKyAgIDAuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfVlNOUFJJTlRGIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGlyZWN0Lmg+IGhlYWRlciBmaWxlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0RJUkVDVF9IICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRsZmNuLmg+IGhlYWRlciBmaWxlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ETEZDTl9IIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZWxmX2dldHNoZHJzdHJuZHgnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9FTEZfR0VUU0hEUlNUUk5EWCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGVsZl9nZXRzaHN0cm5keCcgZnVuY3Rpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfRUxGX0dFVFNIU1RSTkRYICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgZWxmX2dldHNoc3RybmR4IGhhcyBnQUJJIGNvbmZvcm1hbnQgcmV0dXJuIHZhbHVlcy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9FTEZfR0VUU0hTVFJORFhfR0FCSSAqLworI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxmY250bC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfRkNOVExfSCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZlb2ZfdW5sb2NrZWQnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9GRU9GX1VOTE9DS0VEIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmVycm9yX3VubG9ja2VkJyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfRkVSUk9SX1VOTE9DS0VEIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmZsdXNoX3VubG9ja2VkJyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfRkZMVVNIX1VOTE9DS0VEIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmdldGNfdW5sb2NrZWQnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9GR0VUQ19VTkxPQ0tFRCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZnZXRzX3VubG9ja2VkJyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfRkdFVFNfVU5MT0NLRUQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmaWxlbm9fdW5sb2NrZWQnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9GSUxFTk9fVU5MT0NLRUQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmb3JrJyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfRk9SSyAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZwcmludGZfdW5sb2NrZWQnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0ZQUklOVEZfVU5MT0NLRUQgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZnB1dGNfdW5sb2NrZWQnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9GUFVUQ19VTkxPQ0tFRCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZwdXRzX3VubG9ja2VkJyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfRlBVVFNfVU5MT0NLRUQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmcmVhZF91bmxvY2tlZCcgZnVuY3Rpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0ZSRUFEX1VOTE9DS0VEIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZndyaXRlX3VubG9ja2VkJyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfRldSSVRFX1VOTE9DS0VEIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyBzcGVjaWZ5aW5nIHRoZSBhbGlnbm1lbnQgb2Ygb2JqZWN0cworICAgYWxsb2NhdGVkIHVzaW5nIHRoZSBHQVMgLmNvbW0gY29tbWFuZC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9HQVNfQUxJR05FRF9DT01NICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgLmJhbGlnbiBhbmQgLnAyYWxpZ24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0dBU19CQUxJR05fQU5EX1AyQUxJR04gMQorI2VuZGlmCisKKworLyogRGVmaW5lIDAvMSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyBDRkkgZGlyZWN0aXZlcy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfR0FTX0NGSV9ESVJFQ1RJVkUgMQorI2VuZGlmCisKKworLyogRGVmaW5lIDAvMSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyAuY2ZpX3BlcnNvbmFsaXR5LiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9HQVNfQ0ZJX1BFUlNPTkFMSVRZX0RJUkVDVElWRSAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgMC8xIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIC5jZmlfc2VjdGlvbnMuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0dBU19DRklfU0VDVElPTlNfRElSRUNUSVZFIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyB0aGUgLmxvYyBkaXNjcmltaW5hdG9yIHN1Yi1kaXJlY3RpdmUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0dBU19ESVNDUklNSU5BVE9SIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyBAZ251X3VuaXF1ZV9vYmplY3QuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfR0FTX0dOVV9VTklRVUVfT0JKRUNUICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgYW5kIGxpbmtlciBzdXBwb3J0IC5oaWRkZW4uICovCisjZGVmaW5lIEhBVkVfR0FTX0hJRERFTiAxCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyAubGNvbW0gd2l0aCBhbiBhbGlnbm1lbnQgZmllbGQuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfR0FTX0xDT01NX1dJVEhfQUxJR05NRU5UICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgLmxpdGVyYWwxNi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9HQVNfTElURVJBTDE2ICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgc3BlY2lmeWluZyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8KKyAgIHNraXAgd2hlbiB1c2luZyB0aGUgR0FTIC5wMmFsaWduIGNvbW1hbmQuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0dBU19NQVhfU0tJUF9QMkFMSUdOIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyAubnN1YnNwYSBjb21kYXQgb3B0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0dBU19OU1VCU1BBX0NPTURBVCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIGFuZCBsaW5rZXIgc3VwcG9ydCAzMi1iaXQgc2VjdGlvbiByZWxhdGl2ZSByZWxvY3MKKyAgIHZpYSAnLnNlY3JlbDMyIGxhYmVsJy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9HQVNfUEVfU0VDUkVMMzJfUkVMT0MgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSAwLzEgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgbWFya2luZyBzZWN0aW9ucyB3aXRoIFNIRl9NRVJHRSBmbGFnLgorICAgKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfR0FTX1NIRl9NRVJHRSAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgLnN1YnNlY3Rpb24gYW5kIC5zdWJzZWN0aW9uIC0xIHN0YXJ0cworICAgZW1pdHRpbmcgYXQgdGhlIGJlZ2lubmluZyBvZiB5b3VyIHNlY3Rpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0dBU19TVUJTRUNUSU9OX09SREVSSU5HIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyAud2Vhay4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfR0FTX1dFQUsgMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIC53ZWFrcmVmLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9HQVNfV0VBS1JFRiAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGNoYXJfdW5sb2NrZWQnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9HRVRDSEFSX1VOTE9DS0VEIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0Y191bmxvY2tlZCcgZnVuY3Rpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0dFVENfVU5MT0NLRUQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIF9VbndpbmRfR2V0SVBJbmZvIGlzIGF2YWlsYWJsZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfR0VUSVBJTkZPIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cmxpbWl0JyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfR0VUUkxJTUlUIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cnVzYWdlJyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfR0VUUlVTQUdFIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0dGltZW9mZGF5JyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB1c2luZyBHTlUgYXMuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0dOVV9BUyAwCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgdXNpbmcgR05VIGxkLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9HTlVfTEQgMAorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpY29udigpIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9JQ09OViAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGljb252Lmg+IGhlYWRlciBmaWxlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9JQ09OVl9IIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSAuaW5pdF9hcnJheS8uZmluaV9hcnJheSBzZWN0aW9ucyBhcmUgYXZhaWxhYmxlIGFuZCB3b3JraW5nLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9JTklURklOSV9BUlJBWSAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgaW50bWF4X3QnLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9JTlRNQVhfVCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgaW50cHRyX3QnLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9JTlRQVFJfVCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgYSB3b3JraW5nIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGtpbGwnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9LSUxMIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSA8bGFuZ2luZm8uaD4gYW5kIG5sX2xhbmdpbmZvKENPREVTRVQpLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9MQU5HSU5GT19DT0RFU0VUIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGFuZ2luZm8uaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0xBTkdJTkZPX0ggMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgPGxvY2FsZS5oPiBmaWxlIGRlZmluZXMgTENfTUVTU0FHRVMuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0xDX01FU1NBR0VTIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGRmY24uaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfTERGQ05fSCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgbGlua2VyIHN1cHBvcnRzIC0tYXMtbmVlZGVkIGFuZCAtLW5vLWFzLW5lZWRlZCBvcHRpb25zLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9MRF9BU19ORUVERUQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgbGlua2VyIHN1cHBvcnRzIC0tYnVpbGQtaWQuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0xEX0JVSUxESUQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgbGlua2VyIHN1cHBvcnRzIC0tZGVtYW5nbGUgb3B0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0xEX0RFTUFOR0xFICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBsaW5rZXIgc3VwcG9ydHMgLS1laC1mcmFtZS1oZHIgb3B0aW9uLiAqLworI2RlZmluZSBIQVZFX0xEX0VIX0ZSQU1FX0hEUiAxCisKKy8qIERlZmluZSBpZiB5b3VyIGxpbmtlciBzdXBwb3J0cyBnYXJiYWdlIGNvbGxlY3Rpb24gb2Ygc2VjdGlvbnMgaW4gcHJlc2VuY2UKKyAgIG9mIEVIIGZyYW1lcy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9MRF9FSF9HQ19TRUNUSU9OUyAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgUG93ZXJQQzY0IGxpbmtlciBvbmx5IG5lZWRzIGZ1bmN0aW9uIGRlc2NyaXB0b3Igc3ltcy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9MRF9OT19ET1RfU1lNUyAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgbGlua2VyIGNhbiByZWxheCBhYnNvbHV0ZSAuZWhfZnJhbWUgcGVyc29uYWxpdHkgcG9pbnRlcnMKKyAgIGludG8gUEMtcmVsYXRpdmUgZm9ybS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9MRF9QRVJTT05BTElUWV9SRUxBWEFUSU9OICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBsaW5rZXIgc3VwcG9ydHMgLXBpZSBvcHRpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0xEX1BJRSAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBsaW5rZXIgbGlua3MgYSBtaXggb2YgcmVhZC1vbmx5IGFuZCByZWFkLXdyaXRlIHNlY3Rpb25zIGludG8KKyAgIGEgcmVhZC13cml0ZSBzZWN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9MRF9ST19SV19TRUNUSU9OX01JWElORyAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBsaW5rZXIgc3VwcG9ydHMgdGhlICpfc29sMiBlbXVsYXRpb25zLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0xEX1NPTDJfRU1VTEFUSU9OICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBsaW5rZXIgc3VwcG9ydHMgLUJzdGF0aWMvLUJkeW5hbWljIG9wdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfTERfU1RBVElDX0RZTkFNSUMgMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgbGlua2VyIHN1cHBvcnRzIC0tc3lzcm9vdC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfTERfU1lTUk9PVCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbWl0cy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfTElNSVRTX0ggMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsb2NhbGUuaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0xPQ0FMRV9IIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBsb25nIGxvbmcnLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9MT05HX0xPTkcgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYGxvbmcgbG9uZyBpbnQnLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9MT05HX0xPTkdfSU5UIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWFsbG9jLmg+IGhlYWRlciBmaWxlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9NQUxMT0NfSCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1ic3Rvd2NzJyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfTUJTVE9XQ1MgMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHZhbGdyaW5kJ3MgbWVtY2hlY2suaCBoZWFkZXIgaXMgaW5zdGFsbGVkLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX01FTUNIRUNLX0ggKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9NRU1PUllfSCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1pbmNvcmUnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9NSU5DT1JFIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbW1hcCcgZnVuY3Rpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX01NQVAgMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIG1tYXAgd2l0aCBNQVBfQU5PTihZTU9VUykgd29ya3MuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX01NQVBfQU5PTiAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgbW1hcCBvZiAvZGV2L3plcm8gd29ya3MuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX01NQVBfREVWX1pFUk8gMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHJlYWQtb25seSBtbWFwIG9mIGEgcGxhaW4gZmlsZSB3b3Jrcy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfTU1BUF9GSUxFIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbmxfbGFuZ2luZm8nIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9OTF9MQU5HSU5GTyAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHB1dGNoYXJfdW5sb2NrZWQnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9QVVRDSEFSX1VOTE9DS0VEIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcHV0Y191bmxvY2tlZCcgZnVuY3Rpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1BVVENfVU5MT0NLRUQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRsb2NhbGUnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9TRVRMT0NBTEUgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRybGltaXQnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9TRVRSTElNSVQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRkZWYuaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1NURERFRl9IIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9TVERJTlRfSCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfU1RETElCX0ggMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9TVFJJTkdTX0ggMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1NUUklOR19IIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3Ryc2lnbmFsJyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfU1RSU0lHTkFMIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiA8c3lzL3RpbWVzLmg+IGRlZmluZXMgc3RydWN0IHRtcy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfU1RSVUNUX1RNUyAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN5c2NvbmYnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9TWVNDT05GIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2ZpbGUuaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1NZU19GSUxFX0ggMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvbW1hbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfU1lTX01NQU5fSCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wYXJhbS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfU1lTX1BBUkFNX0ggMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcmVzb3VyY2UuaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1NZU19SRVNPVVJDRV9IIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZXMuaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1NZU19USU1FU19IIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWUuaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1NZU19USU1FX0ggMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIDxzeXMvd2FpdC5oPiB0aGF0IGlzIFBPU0lYLjEgY29tcGF0aWJsZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfU1lTX1dBSVRfSCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHRpbWVzJyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfVElNRVMgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9USU1FX0ggMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHVpbnRtYXhfdCcuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1VJTlRNQVhfVCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdWludHB0cl90Jy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfVUlOVFBUUl9UIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9VTklTVERfSCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdW5zaWduZWQgbG9uZyBsb25nIGludCcuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHZhbGdyaW5kJ3MgdmFsZ3JpbmQvbWVtY2hlY2suaCBoZWFkZXIgaXMgaW5zdGFsbGVkLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX1ZBTEdSSU5EX01FTUNIRUNLX0ggKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdmZvcmsnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9WRk9SSyAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHZmb3JrLmg+IGhlYWRlciBmaWxlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX1ZGT1JLX0ggKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2NoYXIuaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1dDSEFSX0ggMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB3Y3N3aWR0aCcgZnVuY3Rpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1dDU1dJRFRIIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIGBmb3JrJyB3b3Jrcy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfV09SS0lOR19GT1JLIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0aGlzIG1hY3JvIGlmIG1ic3Rvd2NzIGRvZXMgbm90IGNyYXNoIHdoZW4gaXRzIGZpcnN0IGFyZ3VtZW50IGlzCisgICBOVUxMLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9XT1JLSU5HX01CU1RPV0NTIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIGB2Zm9yaycgd29ya3MuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1dPUktJTkdfVkZPUksgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYF9faW50NjQnLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX19fSU5UNjQgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiBjbG9vZyBpcyBpbiB1c2UuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX2Nsb29nIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiBsaWJlbGYgaXMgaW4gdXNlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9saWJlbGYgMQorI2VuZGlmCisKKworLyogRGVmaW5lIGFzIGNvbnN0IGlmIHRoZSBkZWNsYXJhdGlvbiBvZiBpY29udigpIG5lZWRzIGNvbnN0LiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSUNPTlZfQ09OU1QgCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3RvcnkgaW4gd2hpY2ggbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLgorICAgKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIExUX09CSkRJUiAiLmxpYnMvIgorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIGhvc3QgbWtkaXIgdGFrZXMgYSBzaW5nbGUgYXJndW1lbnQuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIE1LRElSX1RBS0VTX09ORV9BUkcgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIEhPU1RfV0lERV9JTlQgbXVzdCBiZSA2NCBiaXRzIHdpZGUgKHNlZSBod2ludC5oKS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIE5FRURfNjRCSVRfSE9TVF9XSURFX0lOVCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3VyIEMgY29tcGlsZXIgZG9lc24ndCBhY2NlcHQgLWMgYW5kIC1vIHRvZ2V0aGVyLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBOT19NSU5VU19DX01JTlVTX08gKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgIiIKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiIgorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIiIKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiIgorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIHRoZSBob21lIHBhZ2UgZm9yIHRoaXMgcGFja2FnZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIFBBQ0tBR0VfVVJMICIiCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIiCisjZW5kaWYKKworCisvKiBTcGVjaWZ5IHBsdWdpbiBsaW5rZXIgKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIFBMVUdJTl9MRCAibGQiCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gUFJFRklYL2luY2x1ZGUgaWYgY3BwIHNob3VsZCBhbHNvIHNlYXJjaCB0aGF0IGRpcmVjdG9yeS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgUFJFRklYX0lOQ0xVREVfRElSICovCisjZW5kaWYKKworCisvKiBUaGUgc2l6ZSBvZiBgaW50JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgU0laRU9GX0lOVCA0CisjZW5kaWYKKworCisvKiBUaGUgc2l6ZSBvZiBgbG9uZycsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIFNJWkVPRl9MT05HIDgKKyNlbmRpZgorCisKKy8qIFRoZSBzaXplIG9mIGBsb25nIGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBTSVpFT0ZfTE9OR19MT05HIDgKKyNlbmRpZgorCisKKy8qIFRoZSBzaXplIG9mIGBzaG9ydCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIFNJWkVPRl9TSE9SVCAyCisjZW5kaWYKKworCisvKiBUaGUgc2l6ZSBvZiBgdm9pZCAqJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgU0laRU9GX1ZPSURfUCA4CisjZW5kaWYKKworCisvKiBUaGUgc2l6ZSBvZiBgX19pbnQ2NCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgU0laRU9GX19fSU5UNjQgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgU1REQ19IRUFERVJTIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3UgY2FuIHNhZmVseSBpbmNsdWRlIGJvdGggPHN0cmluZy5oPiBhbmQgPHN0cmluZ3MuaD4uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBTVFJJTkdfV0lUSF9TVFJJTkdTIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiBURm1vZGUgbG9uZyBkb3VibGUgc2hvdWxkIGJlIHRoZSBkZWZhdWx0ICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIFRBUkdFVF9ERUZBVUxUX0xPTkdfRE9VQkxFXzEyOCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgdGFyZ2V0IEMgbGlicmFyeSBwcm92aWRlcyBzdGFjayBwcm90ZWN0b3Igc3VwcG9ydCAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgVEFSR0VUX0xJQkNfUFJPVklERVNfU1NQIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+LiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byB0aGUgZmxhZyB1c2VkIHRvIG1hcmsgVExTIHNlY3Rpb25zIGlmIHRoZSBkZWZhdWx0IChgVCcpIGRvZXNuJ3QKKyAgIHdvcmsuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIFRMU19TRUNUSU9OX0FTTV9GTEFHICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgbWlzLW9wdGltaXplcyAuZWhfZnJhbWUgZGF0YS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgVVNFX0FTX1RSQURJVElPTkFMX0ZPUk1BVCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IHRvIGdlbmVyYXRlIGNvZGUgYnkgZGVmYXVsdCB0aGF0IGFzc3VtZXMgdGhhdCB0aGUgQ3lnd2luCisgICBETEwgZXhwb3J0cyB3cmFwcGVycyB0byBzdXBwb3J0IGxpYnN0ZGMrKyBmdW5jdGlvbiByZXBsYWNlbWVudC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgVVNFX0NZR1dJTl9MSUJTVERDWFhfV1JBUFBFUlMgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSAnbG9uZyBsb25nJyAob3IgJ19faW50NjQnKSBpcyB3aWRlciB0aGFuICdsb25nJyBidXQKKyAgIHN0aWxsIGVmZmljaWVudGx5IHN1cHBvcnRlZCBieSB0aGUgaG9zdCBoYXJkd2FyZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgVVNFX0xPTkdfTE9OR19GT1JfV0lERVNUX0ZBU1RfSU5UICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgd2Ugc2hvdWxkIHVzZSBsZWFkaW5nIHVuZGVyc2NvcmUgb24gNjQgYml0IG1pbmd3IHRhcmdldHMgKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgVVNFX01JTkdXNjRfTEVBRElOR19VTkRFUlNDT1JFUyAqLworI2VuZGlmCisKKworLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gQUlYIDMsIEludGVyaXguICAqLworI2lmbmRlZiBfQUxMX1NPVVJDRQorIyBkZWZpbmUgX0FMTF9TT1VSQ0UgMQorI2VuZGlmCisvKiBFbmFibGUgR05VIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IGhhdmUgdGhlbS4gICovCisjaWZuZGVmIF9HTlVfU09VUkNFCisjIGRlZmluZSBfR05VX1NPVVJDRSAxCisjZW5kaWYKKy8qIEVuYWJsZSB0aHJlYWRpbmcgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNpZm5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisjIGRlZmluZSBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MgMQorI2VuZGlmCisvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBIUCBOb25TdG9wLiAgKi8KKyNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKyMgZGVmaW5lIF9UQU5ERU1fU09VUkNFIDEKKyNlbmRpZgorLyogRW5hYmxlIGdlbmVyYWwgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNpZm5kZWYgX19FWFRFTlNJT05TX18KKyMgZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byBiZSB0aGUgbGFzdCBjb21wb25lbnQgb2YgdGhlIFdpbmRvd3MgcmVnaXN0cnkga2V5IHVuZGVyIHdoaWNoIHRvCisgICBsb29rIGZvciBpbnN0YWxsYXRpb24gcGF0aHMuIFRoZSBmdWxsIGtleSB1c2VkIHdpbGwgYmUKKyAgIEhLRVlfTE9DQUxfTUFDSElORS9TT0ZUV0FSRS9GcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24ve1dJTjMyX1JFR0lTVFJZX0tFWX0uCisgICBUaGUgZGVmYXVsdCBpcyB0aGUgR0NDIHZlcnNpb24gbnVtYmVyLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBXSU4zMl9SRUdJU1RSWV9LRVkgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBXT1JEU19CSUdFTkRJQU4gdG8gMSBpZiB5b3VyIHByb2Nlc3NvciBzdG9yZXMgd29yZHMgd2l0aCB0aGUgbW9zdAorICAgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdCAobGlrZSBNb3Rvcm9sYSBhbmQgU1BBUkMsIHVubGlrZSBJbnRlbCkuICovCisjaWYgZGVmaW5lZCBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQKKyMgaWYgZGVmaW5lZCBfX0JJR19FTkRJQU5fXworIyAgZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCisjIGVuZGlmCisjZWxzZQorIyBpZm5kZWYgV09SRFNfQklHRU5ESUFOCisvKiAjICB1bmRlZiBXT1JEU19CSUdFTkRJQU4gKi8KKyMgZW5kaWYKKyNlbmRpZgorCisvKiBEZWZpbmUgdG8gMSBpZiBvbiBNSU5JWC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgX01JTklYICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMiBpZiB0aGUgc3lzdGVtIGRvZXMgbm90IHByb3ZpZGUgUE9TSVguMSBmZWF0dXJlcyBleGNlcHQgd2l0aAorICAgdGhpcyBkZWZpbmVkLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBfUE9TSVhfMV9TT1VSQ0UgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBuZWVkIHRvIGluIG9yZGVyIGZvciBgc3RhdCcgYW5kIG90aGVyIHRoaW5ncyB0byB3b3JrLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBfUE9TSVhfU09VUkNFICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgZm9yIFNvbGFyaXMgMi41LjEgc28gdGhlIHVpbnQzMl90IHR5cGVkZWYgZnJvbSA8c3lzL3N5bmNoLmg+LAorICAgPHB0aHJlYWQuaD4sIG9yIDxzZW1hcGhvcmUuaD4gaXMgbm90IHVzZWQuIElmIHRoZSB0eXBlZGVmIHdlcmUgYWxsb3dlZCwgdGhlCisgICAjZGVmaW5lIGJlbG93IHdvdWxkIGNhdXNlIGEgc3ludGF4IGVycm9yLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBfVUlOVDMyX1QgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBmb3IgU29sYXJpcyAyLjUuMSBzbyB0aGUgdWludDY0X3QgdHlwZWRlZiBmcm9tIDxzeXMvc3luY2guaD4sCisgICA8cHRocmVhZC5oPiwgb3IgPHNlbWFwaG9yZS5oPiBpcyBub3QgdXNlZC4gSWYgdGhlIHR5cGVkZWYgd2VyZSBhbGxvd2VkLCB0aGUKKyAgICNkZWZpbmUgYmVsb3cgd291bGQgY2F1c2UgYSBzeW50YXggZXJyb3IuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIF9VSU5UNjRfVCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGZvciBTb2xhcmlzIDIuNS4xIHNvIHRoZSB1aW50OF90IHR5cGVkZWYgZnJvbSA8c3lzL3N5bmNoLmg+LAorICAgPHB0aHJlYWQuaD4sIG9yIDxzZW1hcGhvcmUuaD4gaXMgbm90IHVzZWQuIElmIHRoZSB0eXBlZGVmIHdlcmUgYWxsb3dlZCwgdGhlCisgICAjZGVmaW5lIGJlbG93IHdvdWxkIGNhdXNlIGEgc3ludGF4IGVycm9yLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBfVUlOVDhfVCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIHRvIGBjaGFyIConIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBjYWRkcl90ICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gYF9faW5saW5lX18nIG9yIGBfX2lubGluZScgaWYgdGhhdCdzIHdoYXQgdGhlIEMgY29tcGlsZXIKKyAgIGNhbGxzIGl0LCBvciB0byBub3RoaW5nIGlmICdpbmxpbmUnIGlzIG5vdCBzdXBwb3J0ZWQgdW5kZXIgYW55IG5hbWUuICAqLworI2lmbmRlZiBfX2NwbHVzcGx1cworLyogI3VuZGVmIGlubGluZSAqLworI2VuZGlmCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhIHNpZ25lZCBpbnRlZ2VyIHR5cGUgb2Ygd2lkdGggZXhhY3RseSAxNiBiaXRzIGlmCisgICBzdWNoIGEgdHlwZSBleGlzdHMgYW5kIHRoZSBzdGFuZGFyZCBpbmNsdWRlcyBkbyBub3QgZGVmaW5lIGl0LiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBpbnQxNl90ICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYSBzaWduZWQgaW50ZWdlciB0eXBlIG9mIHdpZHRoIGV4YWN0bHkgMzIgYml0cyBpZgorICAgc3VjaCBhIHR5cGUgZXhpc3RzIGFuZCB0aGUgc3RhbmRhcmQgaW5jbHVkZXMgZG8gbm90IGRlZmluZSBpdC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgaW50MzJfdCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGEgc2lnbmVkIGludGVnZXIgdHlwZSBvZiB3aWR0aCBleGFjdGx5IDY0IGJpdHMgaWYKKyAgIHN1Y2ggYSB0eXBlIGV4aXN0cyBhbmQgdGhlIHN0YW5kYXJkIGluY2x1ZGVzIGRvIG5vdCBkZWZpbmUgaXQuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIGludDY0X3QgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhIHNpZ25lZCBpbnRlZ2VyIHR5cGUgb2Ygd2lkdGggZXhhY3RseSA4IGJpdHMgaWYgc3VjaAorICAgYSB0eXBlIGV4aXN0cyBhbmQgdGhlIHN0YW5kYXJkIGluY2x1ZGVzIGRvIG5vdCBkZWZpbmUgaXQuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIGludDhfdCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIHRvIHRoZSB3aWRlc3Qgc2lnbmVkIGludGVnZXIgdHlwZSBpZiA8c3RkaW50Lmg+IGFuZCA8aW50dHlwZXMuaD4gZG8KKyAgIG5vdCBkZWZpbmUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIGludG1heF90ICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYSBzaWduZWQgaW50ZWdlciB0eXBlIHdpZGUgZW5vdWdoIHRvIGhvbGQgYSBwb2ludGVyLAorICAgaWYgc3VjaCBhIHR5cGUgZXhpc3RzLCBhbmQgaWYgdGhlIHN5c3RlbSBkb2VzIG5vdCBkZWZpbmUgaXQuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIGludHB0cl90ICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gYGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIHBpZF90ICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gYGxvbmcnIGlmIDxzeXMvcmVzb3VyY2UuaD4gZG9lc24ndCBkZWZpbmUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIHJsaW1fdCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBzc2l6ZV90ICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlIG9mIHdpZHRoIGV4YWN0bHkgMTYgYml0cyBpZgorICAgc3VjaCBhIHR5cGUgZXhpc3RzIGFuZCB0aGUgc3RhbmRhcmQgaW5jbHVkZXMgZG8gbm90IGRlZmluZSBpdC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgdWludDE2X3QgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhbiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgb2Ygd2lkdGggZXhhY3RseSAzMiBiaXRzIGlmCisgICBzdWNoIGEgdHlwZSBleGlzdHMgYW5kIHRoZSBzdGFuZGFyZCBpbmNsdWRlcyBkbyBub3QgZGVmaW5lIGl0LiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiB1aW50MzJfdCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFuIHVuc2lnbmVkIGludGVnZXIgdHlwZSBvZiB3aWR0aCBleGFjdGx5IDY0IGJpdHMgaWYKKyAgIHN1Y2ggYSB0eXBlIGV4aXN0cyBhbmQgdGhlIHN0YW5kYXJkIGluY2x1ZGVzIGRvIG5vdCBkZWZpbmUgaXQuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIHVpbnQ2NF90ICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlIG9mIHdpZHRoIGV4YWN0bHkgOCBiaXRzIGlmCisgICBzdWNoIGEgdHlwZSBleGlzdHMgYW5kIHRoZSBzdGFuZGFyZCBpbmNsdWRlcyBkbyBub3QgZGVmaW5lIGl0LiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiB1aW50OF90ICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gdGhlIHdpZGVzdCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgaWYgPHN0ZGludC5oPiBhbmQgPGludHR5cGVzLmg+CisgICBkbyBub3QgZGVmaW5lLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiB1aW50bWF4X3QgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhbiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgd2lkZSBlbm91Z2ggdG8gaG9sZCBhCisgICBwb2ludGVyLCBpZiBzdWNoIGEgdHlwZSBleGlzdHMsIGFuZCBpZiB0aGUgc3lzdGVtIGRvZXMgbm90IGRlZmluZSBpdC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgdWludHB0cl90ICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgYXMgYGZvcmsnIGlmIGB2Zm9yaycgZG9lcyBub3Qgd29yay4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgdmZvcmsgKi8KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvYi1oZWFkZXItdmFycyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9iLWhlYWRlci12YXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MzE5YTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvYi1oZWFkZXItdmFycwpAQCAtMCwwICsxLDEwMSBAQAorVVNFUl9IPWFybV9uZW9uLmgKK1VOV0lORF9IPWNvbmZpZy9hcm0vdW53aW5kLWFybS5oCitIQVNIVEFCX0g9aGFzaHRhYi5oCitPQlNUQUNLX0g9b2JzdGFjay5oCitTUExBWV9UUkVFX0g9c3BsYXktdHJlZS5oCitGSUJIRUFQX0g9ZmliaGVhcC5oCitQQVJUSVRJT05fSD1wYXJ0aXRpb24uaAorRFdBUkYyX0g9ZHdhcmYyLmgKK0xJTktFUl9QTFVHSU5fQVBJX0g9cGx1Z2luLWFwaS5oCitMVE9fU1lNVEFCX0g9bHRvLXN5bXRhYi5oCitCQ09ORklHX0g9YmNvbmZpZy5oIGF1dG8taG9zdC5oIGFuc2lkZWNsLmgKK0NPTkZJR19IPWNvbmZpZy5oIGF1dG8taG9zdC5oIGFuc2lkZWNsLmgKK1RDT05GSUdfSD10Y29uZmlnLmggYXV0by1ob3N0LmggYW5zaWRlY2wuaAorVE1fUF9IPXRtX3AuaCBjb25maWcvYXJtL2FybS1wcm90b3MuaCB0bS1wcmVkcy5oCitHVE1fSD10bS5oIG9wdGlvbnMuaCBjb25maWcvZGJ4ZWxmLmggZGVmYXVsdHMuaAorVE1fSD10bS5oIG9wdGlvbnMuaCBjb25maWcvZGJ4ZWxmLmggZGVmYXVsdHMuaCBpbnNuLWNvbnN0YW50cy5oIGluc24tZmxhZ3MuaCBvcHRpb25zLmgKK0VYQ0VQVF9IPWV4Y2VwdC5oIHNiaXRtYXAuaCB2ZWNwcmltLmgKK1RPUExFVl9IPXRvcGxldi5oIGxpbmUtbWFwLmggaW5wdXQuaCBidmVyc2lvbi5oCitUQVJHRVRfSD10bS5oIG9wdGlvbnMuaCBjb25maWcvZGJ4ZWxmLmggZGVmYXVsdHMuaCBpbnNuLWNvbnN0YW50cy5oIGluc24tZmxhZ3MuaCBvcHRpb25zLmggdGFyZ2V0LmggaW5zbi1tb2Rlcy5oCitNQUNITU9ERV9IPW1hY2htb2RlLmggbW9kZS1jbGFzc2VzLmRlZiBpbnNuLW1vZGVzLmgKK0hPT0tTX0g9aG9va3MuaCBtYWNobW9kZS5oIG1vZGUtY2xhc3Nlcy5kZWYgaW5zbi1tb2Rlcy5oCitIT1NUSE9PS1NfREVGX0g9aG9zdGhvb2tzLWRlZi5oIGhvb2tzLmggbWFjaG1vZGUuaCBtb2RlLWNsYXNzZXMuZGVmIGluc24tbW9kZXMuaAorTEFOR0hPT0tTX0RFRl9IPWxhbmdob29rcy1kZWYuaCBob29rcy5oIG1hY2htb2RlLmggbW9kZS1jbGFzc2VzLmRlZiBpbnNuLW1vZGVzLmgKK1RBUkdFVF9ERUZfSD10YXJnZXQtZGVmLmggaG9va3MuaCBtYWNobW9kZS5oIG1vZGUtY2xhc3Nlcy5kZWYgaW5zbi1tb2Rlcy5oIHRhcmdob29rcy5oCitSVExfQkFTRV9IPXJ0bC5oIHJ0bC5kZWYgbWFjaG1vZGUuaCBtb2RlLWNsYXNzZXMuZGVmIGluc24tbW9kZXMuaCByZWctbm90ZXMuZGVmIGluc24tbm90ZXMuZGVmIGxpbmUtbWFwLmggaW5wdXQuaCByZWFsLmggbWFjaG1vZGUuaCBtb2RlLWNsYXNzZXMuZGVmIGluc24tbW9kZXMuaCBzdGF0aXN0aWNzLmggdmVjLmggZml4ZWQtdmFsdWUuaCBtYWNobW9kZS5oIG1vZGUtY2xhc3Nlcy5kZWYgaW5zbi1tb2Rlcy5oIGRvdWJsZS1pbnQuaCBhbGlhcy5oCitGSVhFRF9WQUxVRV9IPWZpeGVkLXZhbHVlLmggbWFjaG1vZGUuaCBtb2RlLWNsYXNzZXMuZGVmIGluc24tbW9kZXMuaCBkb3VibGUtaW50LmgKK1JUTF9IPXJ0bC5oIHJ0bC5kZWYgbWFjaG1vZGUuaCBtb2RlLWNsYXNzZXMuZGVmIGluc24tbW9kZXMuaCByZWctbm90ZXMuZGVmIGluc24tbm90ZXMuZGVmIGxpbmUtbWFwLmggaW5wdXQuaCByZWFsLmggbWFjaG1vZGUuaCBtb2RlLWNsYXNzZXMuZGVmIGluc24tbW9kZXMuaCBzdGF0aXN0aWNzLmggdmVjLmggZml4ZWQtdmFsdWUuaCBtYWNobW9kZS5oIG1vZGUtY2xhc3Nlcy5kZWYgaW5zbi1tb2Rlcy5oIGRvdWJsZS1pbnQuaCBhbGlhcy5oIGdlbnJ0bC5oCitQQVJBTVNfSD1wYXJhbXMuaCBwYXJhbXMuZGVmCitUUkVFX0g9dHJlZS5oIGFsbC10cmVlLmRlZiB0cmVlLmRlZiBjLWNvbW1vbi5kZWYgb2JzdGFjay5oIG9wdGlvbnMuaAorQkFTSUNfQkxPQ0tfSD1iYXNpYy1ibG9jay5oIGJpdG1hcC5oIG9ic3RhY2suaAorR0lNUExFX0g9Z2ltcGxlLmggZ2ltcGxlLmRlZiBnc3N0cnVjdC5kZWYgcG9pbnRlci1zZXQuaCB2ZWMuaCBnZ2MuaCBndHlwZS1kZXNjLmggc3RhdGlzdGljcy5oIGJhc2ljLWJsb2NrLmggYml0bWFwLmggZGVmYXVsdHMuaCBpbnNuLWNvbnN0YW50cy5oIGluc24tZmxhZ3MuaCBvcHRpb25zLmggdGFyZ2V0LmggaW5zbi1tb2Rlcy5oIHRyZWUtc3NhLW9wZXJhbmRzLmgKK0dDT1ZfSU9fSD1nY292LWlvLmggZ2Nvdi1pb3YuaCBhdXRvLWhvc3QuaAorQ09WRVJBR0VfSD1jb3ZlcmFnZS5oIGdjb3YtaW8uaCBnY292LWlvdi5oIGF1dG8taG9zdC5oCitERU1BTkdMRV9IPWRlbWFuZ2xlLmgKK1JFQ09HX0g9cmVjb2cuaAorQUxJQVNfSD1hbGlhcy5oIGNvcmV0eXBlcy5oCitFTUlUX1JUTF9IPWVtaXQtcnRsLmgKK0ZMQUdTX0g9ZmxhZ3MuaCBjb3JldHlwZXMuaCBvcHRpb25zLmgKK0ZVTkNUSU9OX0g9ZnVuY3Rpb24uaCB0cmVlLmggYWxsLXRyZWUuZGVmIHRyZWUuZGVmIGMtY29tbW9uLmRlZiBoYXNodGFiLmggdmVjcHJpbS5oCitFWFBSX0g9ZXhwci5oIGluc24tY29uZmlnLmggZnVuY3Rpb24uaCB0cmVlLmggYWxsLXRyZWUuZGVmIHRyZWUuZGVmIGMtY29tbW9uLmRlZiBvYnN0YWNrLmggb3B0aW9ucy5oIG1hY2htb2RlLmggbW9kZS1jbGFzc2VzLmRlZiBpbnNuLW1vZGVzLmggZW1pdC1ydGwuaAorT1BUQUJTX0g9b3B0YWJzLmggaW5zbi1jb2Rlcy5oCitSRUdTX0g9cmVncy5oIHZhcnJheS5oIG1hY2htb2RlLmggbW9kZS1jbGFzc2VzLmRlZiBpbnNuLW1vZGVzLmggaGFzaHRhYi5oIHZlY3ByaW0uaAorUkVTT1VSQ0VfSD1yZXNvdXJjZS5oIGhhcmQtcmVnLXNldC5oIGRmLmggYml0bWFwLmggb2JzdGFjay5oIGFsbG9jLXBvb2wuaCB0aW1ldmFyLmggdGltZXZhci5kZWYKK1NDSEVEX0lOVF9IPXNjaGVkLWludC5oIGluc24tYXR0ci5oIG9ic3RhY2suaCBhbGxvYy1wb29sLmggdGltZXZhci5oIHRpbWV2YXIuZGVmIHZlY3ByaW0uaAorU0VMX1NDSEVEX0lSX0g9c2VsLXNjaGVkLWlyLmggaW5zbi1hdHRyLmggbGluZS1tYXAuaCBpbnB1dC5oIHJlYWwuaCBtYWNobW9kZS5oIG1vZGUtY2xhc3Nlcy5kZWYgaW5zbi1tb2Rlcy5oIHN0YXRpc3RpY3MuaCB2ZWMuaCBmaXhlZC12YWx1ZS5oIG1hY2htb2RlLmggbW9kZS1jbGFzc2VzLmRlZiBpbnNuLW1vZGVzLmggZG91YmxlLWludC5oIGFsaWFzLmggZ2VucnRsLmggdmVjcHJpbS5oIGRvdWJsZS1pbnQuaAorU0VMX1NDSEVEX0RVTVBfSD1zZWwtc2NoZWQtZHVtcC5oIHNlbC1zY2hlZC1pci5oIGluc24tYXR0ci5oIGxpbmUtbWFwLmggaW5wdXQuaCByZWFsLmggbWFjaG1vZGUuaCBtb2RlLWNsYXNzZXMuZGVmIGluc24tbW9kZXMuaCBzdGF0aXN0aWNzLmggdmVjLmggZml4ZWQtdmFsdWUuaCBtYWNobW9kZS5oIG1vZGUtY2xhc3Nlcy5kZWYgaW5zbi1tb2Rlcy5oIGRvdWJsZS1pbnQuaCBhbGlhcy5oIGdlbnJ0bC5oIHZlY3ByaW0uaCBkb3VibGUtaW50LmgKK0lOVEVHUkFURV9IPWludGVncmF0ZS5oIHZhcnJheS5oIG1hY2htb2RlLmggbW9kZS1jbGFzc2VzLmRlZiBpbnNuLW1vZGVzLmggc3lzdGVtLmggaHdpbnQuaCBkZWZhdWx0cy5oIGluc24tY29uc3RhbnRzLmggaW5zbi1mbGFncy5oIG9wdGlvbnMuaAorQ0ZHTEFZT1VUX0g9Y2ZnbGF5b3V0LmggYmFzaWMtYmxvY2suaCBiaXRtYXAuaCBvYnN0YWNrLmgKK0NGR0xPT1BfSD1jZmdsb29wLmggYmFzaWMtYmxvY2suaCBiaXRtYXAuaCBsaW5lLW1hcC5oIGlucHV0LmggcmVhbC5oIG1hY2htb2RlLmggbW9kZS1jbGFzc2VzLmRlZiBpbnNuLW1vZGVzLmggc3RhdGlzdGljcy5oIHZlYy5oIGZpeGVkLXZhbHVlLmggbWFjaG1vZGUuaCBtb2RlLWNsYXNzZXMuZGVmIGluc24tbW9kZXMuaCBkb3VibGUtaW50LmggYWxpYXMuaCBnZW5ydGwuaCB2ZWNwcmltLmggZG91YmxlLWludC5oCitJUEFfVVRJTFNfSD1pcGEtdXRpbHMuaCB0cmVlLmggYWxsLXRyZWUuZGVmIHRyZWUuZGVmIGMtY29tbW9uLmRlZiBvYnN0YWNrLmggY2lmLWNvZGUuZGVmCitJUEFfUkVGRVJFTkNFX0g9aXBhLXJlZmVyZW5jZS5oIGJpdG1hcC5oIG9ic3RhY2suaCBvcHRpb25zLmgKK0lQQV9UWVBFX0VTQ0FQRV9IPWlwYS10eXBlLWVzY2FwZS5oIHRyZWUuaCBhbGwtdHJlZS5kZWYgdHJlZS5kZWYgYy1jb21tb24uZGVmIG9ic3RhY2suaCBvcHRpb25zLmgKK0NHUkFQSF9IPWNncmFwaC5oIHRyZWUuaCBhbGwtdHJlZS5kZWYgdHJlZS5kZWYgYy1jb21tb24uZGVmIG9ic3RhY2suaCBjaWYtY29kZS5kZWYKK0RGX0g9ZGYuaCBiaXRtYXAuaCBvYnN0YWNrLmggYWxsb2MtcG9vbC5oIHRpbWV2YXIuaCB0aW1ldmFyLmRlZgorUkVTT1VSQ0VfSD1yZXNvdXJjZS5oIGhhcmQtcmVnLXNldC5oIGRmLmggYml0bWFwLmggb2JzdGFjay5oIGFsbG9jLXBvb2wuaCB0aW1ldmFyLmggdGltZXZhci5kZWYKK0RER19IPWRkZy5oIHNiaXRtYXAuaCBkZi5oIGJpdG1hcC5oIG9ic3RhY2suaCBhbGxvYy1wb29sLmggdGltZXZhci5oIHRpbWV2YXIuZGVmCitHQ0NfSD1nY2MuaCB2ZXJzaW9uLmgKK0dHQ19IPWdnYy5oIGd0eXBlLWRlc2MuaCBzdGF0aXN0aWNzLmgKK1RJTUVWQVJfSD10aW1ldmFyLmggdGltZXZhci5kZWYKK0lOU05fQVRUUl9IPWluc24tYXR0ci5oIHZhcnJheS5oCitJTlNOX0FERFJfSD1pbnNuLWFkZHIuaCB2ZWNwcmltLmgKK0NfQ09NTU9OX0g9Yy1jb21tb24uaCBjcHBsaWIuaCBnZ2MuaCBndHlwZS1kZXNjLmggc3RhdGlzdGljcy5oCitDX1BSQUdNQV9IPWMtcHJhZ21hLmggY3BwbGliLmgKK0NfVFJFRV9IPWMtdHJlZS5oIGMtY29tbW9uLmggb2JzdGFjay5oIG9wdGlvbnMuaAorU1lTVEVNX0g9c3lzdGVtLmggaHdpbnQuaCBmaWxlbmFtZXMuaAorUFJFRElDVF9IPXByZWRpY3QuaCBwcmVkaWN0LmRlZgorQ1BQTElCX0g9Y3BwbGliLmgKK0lOUFVUX0g9bGluZS1tYXAuaCBpbnB1dC5oCitERUNOVU1fSD1kZWNpbWFsMTI4TG9jYWwuaAorTUtERVBTX0g9bWtkZXBzLmgKK1NZTVRBQl9IPW9ic3RhY2suaAorQ1BQX0lEX0RBVEFfSD1jcHAtaWQtZGF0YS5oCitDUFBfSU5URVJOQUxfSD1jcHAtaWQtZGF0YS5oCitUUkVFX1BBU1NfSD10cmVlLXBhc3MuaCB0aW1ldmFyLmggdGltZXZhci5kZWYKK1RSRUVfRFVNUF9IPXRyZWUtZHVtcC5oIHNwbGF5LXRyZWUuaCB0cmVlLXBhc3MuaCB0aW1ldmFyLmggdGltZXZhci5kZWYKK1RSRUVfRkxPV19IPXRyZWUtZmxvdy5oIHRyZWUtZmxvdy1pbmxpbmUuaCB0cmVlLXNzYS1vcGVyYW5kcy5oIGJpdG1hcC5oIG9ic3RhY2suaCBvcHRpb25zLmggdHJlZS1zc2EtYWxpYXMuaAorVFJFRV9TU0FfTElWRV9IPXRyZWUtc3NhLWxpdmUuaCBwYXJ0aXRpb24uaCB2ZWNwcmltLmgKK1RSRUVfVkVDVE9SSVpFUl9IPXRyZWUtdmVjdG9yaXplci5oIHRyZWUtZGF0YS1yZWYuaCBsYW1iZGEuaCB0cmVlLmggYWxsLXRyZWUuZGVmIHRyZWUuZGVmIGMtY29tbW9uLmRlZiBvYnN0YWNrLmggb3B0aW9ucy5oIHZlYy5oIGdnYy5oIGd0eXBlLWRlc2MuaCBzdGF0aXN0aWNzLmggb21lZ2EuaCBncmFwaGRzLmggdHJlZS1zY2FsYXItZXZvbHV0aW9uLmggZ2djLmggZ3R5cGUtZGVzYy5oIHN0YXRpc3RpY3MuaCB0cmVlLWNocmVjLmggcGFyYW1zLmggcGFyYW1zLmRlZgorU1NBRVhQQU5EX0g9c3NhZXhwYW5kLmggdHJlZS1zc2EtbGl2ZS5oIHBhcnRpdGlvbi5oIHZlY3ByaW0uaAorUFJFVFRZX1BSSU5UX0g9cHJldHR5LXByaW50Lmggb2JzdGFjay5oCitESUFHTk9TVElDX0g9ZGlhZ25vc3RpYy5oIGRpYWdub3N0aWMuZGVmIHByZXR0eS1wcmludC5oIG9ic3RhY2suaCBvcHRpb25zLmgKK0NfUFJFVFRZX1BSSU5UX0g9Yy1wcmV0dHktcHJpbnQuaCBwcmV0dHktcHJpbnQuaCBvYnN0YWNrLmggb3B0aW9ucy5oCitTQ0VWX0g9dHJlZS1zY2FsYXItZXZvbHV0aW9uLmggZ2djLmggZ3R5cGUtZGVzYy5oIHN0YXRpc3RpY3MuaCB0cmVlLWNocmVjLmggcGFyYW1zLmggcGFyYW1zLmRlZgorTEFNQkRBX0g9bGFtYmRhLmggdHJlZS5oIGFsbC10cmVlLmRlZiB0cmVlLmRlZiBjLWNvbW1vbi5kZWYgb2JzdGFjay5oIG9wdGlvbnMuaCB2ZWMuaCBnZ2MuaCBndHlwZS1kZXNjLmggc3RhdGlzdGljcy5oCitUUkVFX0RBVEFfUkVGX0g9dHJlZS1kYXRhLXJlZi5oIGxhbWJkYS5oIHRyZWUuaCBhbGwtdHJlZS5kZWYgdHJlZS5kZWYgYy1jb21tb24uZGVmIG9ic3RhY2suaCBvcHRpb25zLmggdmVjLmggZ2djLmggZ3R5cGUtZGVzYy5oIHN0YXRpc3RpY3MuaCBvbWVnYS5oIGdyYXBoZHMuaCB0cmVlLXNjYWxhci1ldm9sdXRpb24uaCBnZ2MuaCBndHlwZS1kZXNjLmggc3RhdGlzdGljcy5oIHRyZWUtY2hyZWMuaCBwYXJhbXMuaCBwYXJhbXMuZGVmCitWQVJSQVlfSD12YXJyYXkuaCBtYWNobW9kZS5oIG1vZGUtY2xhc3Nlcy5kZWYgaW5zbi1tb2Rlcy5oIHN5c3RlbS5oIGh3aW50LmggZGVmYXVsdHMuaCBpbnNuLWNvbnN0YW50cy5oIGluc24tZmxhZ3MuaCBvcHRpb25zLmgKK1RSRUVfSU5MSU5FX0g9dHJlZS1pbmxpbmUuaCBnaW1wbGUuaCBnaW1wbGUuZGVmIGdzc3RydWN0LmRlZiBwb2ludGVyLXNldC5oIHZlYy5oIGdnYy5oIGd0eXBlLWRlc2MuaCBzdGF0aXN0aWNzLmggYmFzaWMtYmxvY2suaCBiaXRtYXAuaCBkZWZhdWx0cy5oIGluc24tY29uc3RhbnRzLmggaW5zbi1mbGFncy5oIG9wdGlvbnMuaCB0YXJnZXQuaCBpbnNuLW1vZGVzLmggdHJlZS1zc2Etb3BlcmFuZHMuaAorUkVBTF9IPXJlYWwuaCBtYWNobW9kZS5oIG1vZGUtY2xhc3Nlcy5kZWYgaW5zbi1tb2Rlcy5oCitJUkFfSU5UX0g9aXJhLmggaXJhLWludC5oIGNmZ2xvb3AuaCBiYXNpYy1ibG9jay5oIGJpdG1hcC5oIGxpbmUtbWFwLmggaW5wdXQuaCByZWFsLmggbWFjaG1vZGUuaCBtb2RlLWNsYXNzZXMuZGVmIGluc24tbW9kZXMuaCBzdGF0aXN0aWNzLmggdmVjLmggZml4ZWQtdmFsdWUuaCBtYWNobW9kZS5oIG1vZGUtY2xhc3Nlcy5kZWYgaW5zbi1tb2Rlcy5oIGRvdWJsZS1pbnQuaCBhbGlhcy5oIGdlbnJ0bC5oIHZlY3ByaW0uaCBkb3VibGUtaW50LmggYWxsb2MtcG9vbC5oCitEQkdDTlRfSD1kYmdjbnQuaCBkYmdjbnQuZGVmCitFQklUTUFQX0g9ZWJpdG1hcC5oIHNiaXRtYXAuaAorTFRPX1NUUkVBTUVSX0g9bHRvLXN0cmVhbWVyLmggZGVmYXVsdHMuaCBpbnNuLWNvbnN0YW50cy5oIGluc24tZmxhZ3MuaCBvcHRpb25zLmggdGFyZ2V0LmggaW5zbi1tb2Rlcy5oIHRyZWUtc3NhLW9wZXJhbmRzLmgKK1RSRUVfVkVDVE9SSVpFUl9IPXRyZWUtdmVjdG9yaXplci5oIHRyZWUtZGF0YS1yZWYuaCBsYW1iZGEuaCB0cmVlLmggYWxsLXRyZWUuZGVmIHRyZWUuZGVmIGMtY29tbW9uLmRlZiBvYnN0YWNrLmggb3B0aW9ucy5oIHZlYy5oIGdnYy5oIGd0eXBlLWRlc2MuaCBzdGF0aXN0aWNzLmggb21lZ2EuaCBncmFwaGRzLmggdHJlZS1zY2FsYXItZXZvbHV0aW9uLmggZ2djLmggZ3R5cGUtZGVzYy5oIHN0YXRpc3RpY3MuaCB0cmVlLWNocmVjLmggcGFyYW1zLmggcGFyYW1zLmRlZgorSVBBX1BST1BfSD1pcGEtcHJvcC5oIHRyZWUuaCBhbGwtdHJlZS5kZWYgdHJlZS5kZWYgYy1jb21tb24uZGVmIG9ic3RhY2suaCBjaWYtY29kZS5kZWYKK0dTVEFCX0g9Z3N0YWIuaCBzdGFiLmRlZgorQklUTUFQX0g9Yml0bWFwLmggaGFzaHRhYi5oIHN0YXRpc3RpY3MuaAorR0NDX1BMVUdJTl9IPWdjYy1wbHVnaW4uaCBoaWdobGV2LXBsdWdpbi1jb21tb24uaCBjb25maWcuaCBhdXRvLWhvc3QuaCBoYXNodGFiLmgKK1BMVUdJTl9IPXBsdWdpbi5oIGdjYy1wbHVnaW4uaCBoaWdobGV2LXBsdWdpbi1jb21tb24uaCBjb25maWcuaCBhdXRvLWhvc3QuaCBoYXNodGFiLmgKK1BMVUdJTl9WRVJTSU9OX0g9cGx1Z2luLXZlcnNpb24uaCBjb25maWdhcmdzLmgKK0dURklMRVNfSD1ndC1jb3ZlcmFnZS5oIGd0LWNhbGxlci1zYXZlLmggZ3QtYWxpYXMuaCBndC1iaXRtYXAuaCBndC1jc2VsaWIuaCBndC1jZ3JhcGguaCBndC1pcGEtcHJvcC5oIGd0LWlwYS1jcC5oIGd0LWlwYS1pbmxpbmUuaCBndC1tYXRyaXgtcmVvcmcuaCBndC1kYnhvdXQuaCBndC1pcGEtc3RydWN0LXJlb3JnLmggZ3QtZHdhcmYyb3V0LmggZ3QtZHdhcmYyYXNtLmggZ3QtdHJlZS12ZWN0LWdlbmVyaWMuaCBndC1kb2p1bXAuaCBndC1lbWl0LXJ0bC5oIGd0LWV4cGxvdy5oIGd0LWV4cHIuaCBndC1mdW5jdGlvbi5oIGd0LWV4Y2VwdC5oIGd0LWdjc2UuaCBndC1pbnRlZ3JhdGUuaCBndC1saXN0cy5oIGd0LW9wdGFicy5oIGd0LXByb2ZpbGUuaCBndC1yZWdpbmZvLmggZ3QtbWNmLmggZ3QtcmVnLXN0YWNrLmggZ3QtY2ZnbGF5b3V0LmggZ3Qtc2Rib3V0LmggZ3Qtc3Rvci1sYXlvdXQuaCBndC1zdHJpbmdwb29sLmggZ3QtdHJlZS5oIGd0LXZhcmFzbS5oIGd0LWdpbXBsZS5oIGd0LXRyZWUtbXVkZmxhcC5oIGd0LXRyZWUtc3NhbmFtZXMuaCBndC10cmVlLWVoLmggZ3QtdHJlZS1zc2EtYWRkcmVzcy5oIGd0LXRyZWUtY2ZnLmggZ3QtdHJlZS1kZmEuaCBndC10cmVlLWl0ZXJhdG9yLmggZ3QtZ2ltcGxpZnkuaCBndC10cmVlLXNjYWxhci1ldm9sdXRpb24uaCBndC10cmVlLXByb2ZpbGUuaCBndC10cmVlLW5lc3RlZC5oIGd0LXZhcnBvb2wuaCBndC10cmVlLXBhcmxvb3BzLmggZ3Qtb21wLWxvdy5oIGd0LXRhcmdob29rcy5oIGd0LWFybS5oIGd0LXBhc3Nlcy5oIGd0LWNncmFwaHVuaXQuaCBndC10cmVlLXNzYS1wcm9wYWdhdGUuaCBndC10cmVlLXBoaW5vZGVzLmggZ3QtaXBhLXJlZmVyZW5jZS5oIGd0LXRyZWUtc3NhLXN0cnVjdGFsaWFzLmggZ3QtbHRvLXN5bXRhYi5oIGd0LWFkYS1kZWNsLmggZ3QtYWRhLXRyYW5zLmggZ3QtYWRhLXV0aWxzLmggZ3QtYWRhLW1pc2MuaCBndC1jcC1ydHRpLmggZ3QtY3AtbWFuZ2xlLmggZ3QtY3AtbmFtZS1sb29rdXAuaCBndC1jcC1jYWxsLmggZ3QtY3AtZGVjbC5oIGd0LWNwLWRlY2wyLmggZ3QtY3AtcHQuaCBndC1jcC1yZXBvLmggZ3QtY3Atc2VtYW50aWNzLmggZ3QtY3AtdHJlZS5oIGd0LWNwLXBhcnNlci5oIGd0LWNwLW1ldGhvZC5oIGd0LWNwLXR5cGVjazIuaCBndC1jLWNvbW1vbi5oIGd0LWMtbGV4LmggZ3QtYy1wcmFnbWEuaCBndC1jcC1jbGFzcy5oIGd0LWNwLWNwLW9iamNwLWNvbW1vbi5oIGd0LWNwLWNwLWxhbmcuaCBndC1mb3J0cmFuLWY5NS1sYW5nLmggZ3QtZm9ydHJhbi10cmFucy1kZWNsLmggZ3QtZm9ydHJhbi10cmFucy1pbnRyaW5zaWMuaCBndC1mb3J0cmFuLXRyYW5zLWlvLmggZ3QtZm9ydHJhbi10cmFucy10eXBlcy5oIGd0LWphdmEtYnVpbHRpbnMuaCBndC1qYXZhLWNsYXNzLmggZ3QtamF2YS1jb25zdGFudHMuaCBndC1qYXZhLWRlY2wuaCBndC1qYXZhLWV4cHIuaCBndC1qYXZhLWpjZi1wYXJzZS5oIGd0LWphdmEtbGFuZy5oIGd0LWphdmEtbWFuZ2xlLmggZ3QtamF2YS1yZXNvdXJjZS5oIGd0LWx0by1sdG8tbGFuZy5oIGd0LWx0by1sdG8uaCBndC1jLXBhcnNlci5oIGd0LWMtZGVjbC5oIGd0LWMtb2JqYy1jb21tb24uaCBndC1jLWNvbW1vbi5oIGd0LWMtcHJhZ21hLmggZ3Qtb2JqYy1vYmpjLWFjdC5oIGd0LW9iamNwLW9iamNwLWRlY2wuaCBndC1vYmpjLW9iamMtYWN0LmggZ3QtY3AtcnR0aS5oIGd0LWNwLW1hbmdsZS5oIGd0LWNwLW5hbWUtbG9va3VwLmggZ3QtY3AtY2FsbC5oIGd0LWNwLWRlY2wuaCBndC1jcC1kZWNsMi5oIGd0LWNwLXB0LmggZ3QtY3AtcmVwby5oIGd0LWNwLXNlbWFudGljcy5oIGd0LWNwLXRyZWUuaCBndC1jcC1wYXJzZXIuaCBndC1jcC1tZXRob2QuaCBndC1jcC10eXBlY2syLmggZ3QtYy1jb21tb24uaCBndC1jLWxleC5oIGd0LWMtcHJhZ21hLmggZ3QtY3AtY3Atb2JqY3AtY29tbW9uLmggZ3QtYy1sYW5nLmggZ3QtYy1kZWNsLmggZ3QtYy1jb21tb24uaCBndC1jLXByYWdtYS5oIGd0LWMtb2JqYy1jb21tb24uaCBndC1jLXBhcnNlci5oCitHVEZJTEVTX0xBTkdfSD1ndHlwZS1hZGEuaCBndHlwZS1jcC5oIGd0eXBlLWZvcnRyYW4uaCBndHlwZS1qYXZhLmggZ3R5cGUtbHRvLmggZ3R5cGUtb2JqYy5oIGd0eXBlLW9iamNwLmggZ3R5cGUtYy5oCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvYmFzaWMtYmxvY2suaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9iYXNpYy1ibG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNGQwMGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvYmFzaWMtYmxvY2suaApAQCAtMCwwICsxLDEwMTAgQEAKKy8qIERlZmluZSBjb250cm9sIGFuZCBkYXRhIGZsb3cgdGFibGVzLCBhbmQgcmVnc2V0cy4KKyAgIENvcHlyaWdodCAoQykgMTk4NywgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwKKyAgIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19CQVNJQ19CTE9DS19ICisjZGVmaW5lIEdDQ19CQVNJQ19CTE9DS19ICisKKyNpbmNsdWRlICJiaXRtYXAuaCIKKyNpbmNsdWRlICJzYml0bWFwLmgiCisjaW5jbHVkZSAidmFycmF5LmgiCisjaW5jbHVkZSAicGFydGl0aW9uLmgiCisjaW5jbHVkZSAiaGFyZC1yZWctc2V0LmgiCisjaW5jbHVkZSAicHJlZGljdC5oIgorI2luY2x1ZGUgInZlYy5oIgorI2luY2x1ZGUgImZ1bmN0aW9uLmgiCisKKy8qIEhlYWQgb2YgcmVnaXN0ZXIgc2V0IGxpbmtlZCBsaXN0LiAgKi8KK3R5cGVkZWYgYml0bWFwX2hlYWQgcmVnc2V0X2hlYWQ7CisKKy8qIEEgcG9pbnRlciB0byBhIHJlZ3NldF9oZWFkLiAgKi8KK3R5cGVkZWYgYml0bWFwIHJlZ3NldDsKKworLyogQWxsb2NhdGUgYSByZWdpc3RlciBzZXQgd2l0aCBvYmFsbG9jLiAgKi8KKyNkZWZpbmUgQUxMT0NfUkVHX1NFVChPQlNUQUNLKSBCSVRNQVBfQUxMT0MgKE9CU1RBQ0spCisKKy8qIERvIGFueSBjbGVhbnVwIG5lZWRlZCBvbiBhIHJlZ3NldCB3aGVuIGl0IGlzIG5vIGxvbmdlciB1c2VkLiAgKi8KKyNkZWZpbmUgRlJFRV9SRUdfU0VUKFJFR1NFVCkgQklUTUFQX0ZSRUUgKFJFR1NFVCkKKworLyogSW5pdGlhbGl6ZSBhIG5ldyByZWdzZXQuICAqLworI2RlZmluZSBJTklUX1JFR19TRVQoSEVBRCkgYml0bWFwX2luaXRpYWxpemUgKEhFQUQsICZyZWdfb2JzdGFjaykKKworLyogQ2xlYXIgYSByZWdpc3RlciBzZXQgYnkgZnJlZWluZyB1cCB0aGUgbGlua2VkIGxpc3QuICAqLworI2RlZmluZSBDTEVBUl9SRUdfU0VUKEhFQUQpIGJpdG1hcF9jbGVhciAoSEVBRCkKKworLyogQ29weSBhIHJlZ2lzdGVyIHNldCB0byBhbm90aGVyIHJlZ2lzdGVyIHNldC4gICovCisjZGVmaW5lIENPUFlfUkVHX1NFVChUTywgRlJPTSkgYml0bWFwX2NvcHkgKFRPLCBGUk9NKQorCisvKiBDb21wYXJlIHR3byByZWdpc3RlciBzZXRzLiAgKi8KKyNkZWZpbmUgUkVHX1NFVF9FUVVBTF9QKEEsIEIpIGJpdG1hcF9lcXVhbF9wIChBLCBCKQorCisvKiBgYW5kJyBhIHJlZ2lzdGVyIHNldCB3aXRoIGEgc2Vjb25kIHJlZ2lzdGVyIHNldC4gICovCisjZGVmaW5lIEFORF9SRUdfU0VUKFRPLCBGUk9NKSBiaXRtYXBfYW5kX2ludG8gKFRPLCBGUk9NKQorCisvKiBgYW5kJyB0aGUgY29tcGxlbWVudCBvZiBhIHJlZ2lzdGVyIHNldCB3aXRoIGEgcmVnaXN0ZXIgc2V0LiAgKi8KKyNkZWZpbmUgQU5EX0NPTVBMX1JFR19TRVQoVE8sIEZST00pIGJpdG1hcF9hbmRfY29tcGxfaW50byAoVE8sIEZST00pCisKKy8qIEluY2x1c2l2ZSBvciBhIHJlZ2lzdGVyIHNldCB3aXRoIGEgc2Vjb25kIHJlZ2lzdGVyIHNldC4gICovCisjZGVmaW5lIElPUl9SRUdfU0VUKFRPLCBGUk9NKSBiaXRtYXBfaW9yX2ludG8gKFRPLCBGUk9NKQorCisvKiBFeGNsdXNpdmUgb3IgYSByZWdpc3RlciBzZXQgd2l0aCBhIHNlY29uZCByZWdpc3RlciBzZXQuICAqLworI2RlZmluZSBYT1JfUkVHX1NFVChUTywgRlJPTSkgYml0bWFwX3hvcl9pbnRvIChUTywgRlJPTSkKKworLyogT3IgaW50byBUTyB0aGUgcmVnaXN0ZXIgc2V0IEZST00xIGBhbmQnZWQgd2l0aCB0aGUgY29tcGxlbWVudCBvZiBGUk9NMi4gICovCisjZGVmaW5lIElPUl9BTkRfQ09NUExfUkVHX1NFVChUTywgRlJPTTEsIEZST00yKSBcCisgIGJpdG1hcF9pb3JfYW5kX2NvbXBsX2ludG8gKFRPLCBGUk9NMSwgRlJPTTIpCisKKy8qIENsZWFyIGEgc2luZ2xlIHJlZ2lzdGVyIGluIGEgcmVnaXN0ZXIgc2V0LiAgKi8KKyNkZWZpbmUgQ0xFQVJfUkVHTk9fUkVHX1NFVChIRUFELCBSRUcpIGJpdG1hcF9jbGVhcl9iaXQgKEhFQUQsIFJFRykKKworLyogU2V0IGEgc2luZ2xlIHJlZ2lzdGVyIGluIGEgcmVnaXN0ZXIgc2V0LiAgKi8KKyNkZWZpbmUgU0VUX1JFR05PX1JFR19TRVQoSEVBRCwgUkVHKSBiaXRtYXBfc2V0X2JpdCAoSEVBRCwgUkVHKQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBhIHJlZ2lzdGVyIGlzIHNldCBpbiBhIHJlZ2lzdGVyIHNldC4gICovCisjZGVmaW5lIFJFR05PX1JFR19TRVRfUChUTywgUkVHKSBiaXRtYXBfYml0X3AgKFRPLCBSRUcpCisKKy8qIENvcHkgdGhlIGhhcmQgcmVnaXN0ZXJzIGluIGEgcmVnaXN0ZXIgc2V0IHRvIHRoZSBoYXJkIHJlZ2lzdGVyIHNldC4gICovCitleHRlcm4gdm9pZCByZWdfc2V0X3RvX2hhcmRfcmVnX3NldCAoSEFSRF9SRUdfU0VUICosIGNvbnN0X2JpdG1hcCk7CisjZGVmaW5lIFJFR19TRVRfVE9fSEFSRF9SRUdfU0VUKFRPLCBGUk9NKQkJCQlcCitkbyB7CQkJCQkJCQkJXAorICBDTEVBUl9IQVJEX1JFR19TRVQgKFRPKTsJCQkJCQlcCisgIHJlZ19zZXRfdG9faGFyZF9yZWdfc2V0ICgmVE8sIEZST00pOwkJCQkJXAorfSB3aGlsZSAoMCkKKwordHlwZWRlZiBiaXRtYXBfaXRlcmF0b3IgcmVnX3NldF9pdGVyYXRvcjsKKworLyogTG9vcCBvdmVyIGFsbCByZWdpc3RlcnMgaW4gUkVHU0VULCBzdGFydGluZyB3aXRoIE1JTiwgc2V0dGluZyBSRUdOVU0gdG8gdGhlCisgICByZWdpc3RlciBudW1iZXIgYW5kIGV4ZWN1dGluZyBDT0RFIGZvciBhbGwgcmVnaXN0ZXJzIHRoYXQgYXJlIHNldC4gICovCisjZGVmaW5lIEVYRUNVVEVfSUZfU0VUX0lOX1JFR19TRVQoUkVHU0VULCBNSU4sIFJFR05VTSwgUlNJKQlcCisgIEVYRUNVVEVfSUZfU0VUX0lOX0JJVE1BUCAoUkVHU0VULCBNSU4sIFJFR05VTSwgUlNJKQorCisvKiBMb29wIG92ZXIgYWxsIHJlZ2lzdGVycyBpbiBSRUdTRVQxIGFuZCBSRUdTRVQyLCBzdGFydGluZyB3aXRoIE1JTiwgc2V0dGluZworICAgUkVHTlVNIHRvIHRoZSByZWdpc3RlciBudW1iZXIgYW5kIGV4ZWN1dGluZyBDT0RFIGZvciBhbGwgcmVnaXN0ZXJzIHRoYXQgYXJlCisgICBzZXQgaW4gdGhlIGZpcnN0IHJlZ3NldCBhbmQgbm90IHNldCBpbiB0aGUgc2Vjb25kLiAgKi8KKyNkZWZpbmUgRVhFQ1VURV9JRl9BTkRfQ09NUExfSU5fUkVHX1NFVChSRUdTRVQxLCBSRUdTRVQyLCBNSU4sIFJFR05VTSwgUlNJKSBcCisgIEVYRUNVVEVfSUZfQU5EX0NPTVBMX0lOX0JJVE1BUCAoUkVHU0VUMSwgUkVHU0VUMiwgTUlOLCBSRUdOVU0sIFJTSSkKKworLyogTG9vcCBvdmVyIGFsbCByZWdpc3RlcnMgaW4gUkVHU0VUMSBhbmQgUkVHU0VUMiwgc3RhcnRpbmcgd2l0aCBNSU4sIHNldHRpbmcKKyAgIFJFR05VTSB0byB0aGUgcmVnaXN0ZXIgbnVtYmVyIGFuZCBleGVjdXRpbmcgQ09ERSBmb3IgYWxsIHJlZ2lzdGVycyB0aGF0IGFyZQorICAgc2V0IGluIGJvdGggcmVnc2V0cy4gICovCisjZGVmaW5lIEVYRUNVVEVfSUZfQU5EX0lOX1JFR19TRVQoUkVHU0VUMSwgUkVHU0VUMiwgTUlOLCBSRUdOVU0sIFJTSSkgXAorICBFWEVDVVRFX0lGX0FORF9JTl9CSVRNQVAgKFJFR1NFVDEsIFJFR1NFVDIsIE1JTiwgUkVHTlVNLCBSU0kpCVwKKworLyogU2FtZSBpbmZvcm1hdGlvbiBhcyBSRUdTX0lOVkFMSURBVEVEX0JZX0NBTEwgYnV0IGluIHJlZ3NldCBmb3JtIHRvIGJlIHVzZWQKKyAgIGluIGRhdGFmbG93IG1vcmUgY29udmVuaWVudGx5LiAgKi8KKworZXh0ZXJuIHJlZ3NldCByZWdzX2ludmFsaWRhdGVkX2J5X2NhbGxfcmVnc2V0OworCisvKiBUeXBlIHdlIHVzZSB0byBob2xkIGJhc2ljIGJsb2NrIGNvdW50ZXJzLiAgU2hvdWxkIGJlIGF0IGxlYXN0CisgICA2NGJpdC4gIEFsdGhvdWdoIGEgY291bnRlciBjYW5ub3QgYmUgbmVnYXRpdmUsIHdlIHVzZSBhIHNpZ25lZAorICAgdHlwZSwgYmVjYXVzZSBlcnJvbmVvdXMgbmVnYXRpdmUgY291bnRzIGNhbiBiZSBnZW5lcmF0ZWQgd2hlbiB0aGUKKyAgIGZsb3cgZ3JhcGggaXMgbWFuaXB1bGF0ZWQgYnkgdmFyaW91cyBvcHRpbWl6YXRpb25zLiAgQSBzaWduZWQgdHlwZQorICAgbWFrZXMgdGhvc2UgZWFzeSB0byBkZXRlY3QuICAqLwordHlwZWRlZiBIT1NUX1dJREVTVF9JTlQgZ2Nvdl90eXBlOworCisvKiBDb250cm9sIGZsb3cgZWRnZSBpbmZvcm1hdGlvbi4gICovCitzdHJ1Y3QgR1RZKCgpKSBlZGdlX2RlZiB7CisgIC8qIFRoZSB0d28gYmxvY2tzIGF0IHRoZSBlbmRzIG9mIHRoZSBlZGdlLiAgKi8KKyAgc3RydWN0IGJhc2ljX2Jsb2NrX2RlZiAqc3JjOworICBzdHJ1Y3QgYmFzaWNfYmxvY2tfZGVmICpkZXN0OworCisgIC8qIEluc3RydWN0aW9ucyBxdWV1ZWQgb24gdGhlIGVkZ2UuICAqLworICB1bmlvbiBlZGdlX2RlZl9pbnNucyB7CisgICAgZ2ltcGxlX3NlcSBHVFkgKCh0YWcgKCJ0cnVlIikpKSBnOworICAgIHJ0eCBHVFkgKCh0YWcgKCJmYWxzZSIpKSkgcjsKKyAgfSBHVFkgKChkZXNjICgiY3VycmVudF9pcl90eXBlICgpID09IElSX0dJTVBMRSIpKSkgaW5zbnM7CisKKyAgLyogQXV4aWxpYXJ5IGluZm8gc3BlY2lmaWMgdG8gYSBwYXNzLiAgKi8KKyAgUFRSIEdUWSAoKHNraXAgKCIiKSkpIGF1eDsKKworICAvKiBMb2NhdGlvbiBvZiBhbnkgZ290byBpbXBsaWNpdCBpbiB0aGUgZWRnZSBhbmQgYXNzb2NpYXRlZCBCTE9DSy4gICovCisgIHRyZWUgZ290b19ibG9jazsKKyAgbG9jYXRpb25fdCBnb3RvX2xvY3VzOworCisgIC8qIFRoZSBpbmRleCBudW1iZXIgY29ycmVzcG9uZGluZyB0byB0aGlzIGVkZ2UgaW4gdGhlIGVkZ2UgdmVjdG9yCisgICAgIGRlc3QtPnByZWRzLiAgKi8KKyAgdW5zaWduZWQgaW50IGRlc3RfaWR4OworCisgIGludCBmbGFnczsJCQkvKiBzZWUgRURHRV8qIGJlbG93ICAqLworICBpbnQgcHJvYmFiaWxpdHk7CQkvKiBiaWFzZWQgYnkgUkVHX0JSX1BST0JfQkFTRSAqLworICBnY292X3R5cGUgY291bnQ7CQkvKiBFeHBlY3RlZCBudW1iZXIgb2YgZXhlY3V0aW9ucyBjYWxjdWxhdGVkCisJCQkJICAgaW4gcHJvZmlsZS5jICAqLworfTsKKworREVGX1ZFQ19QKGVkZ2UpOworREVGX1ZFQ19BTExPQ19QKGVkZ2UsZ2MpOworREVGX1ZFQ19BTExPQ19QKGVkZ2UsaGVhcCk7CisKKyNkZWZpbmUgRURHRV9GQUxMVEhSVQkJMQkvKiAnU3RyYWlnaHQgbGluZScgZmxvdyAqLworI2RlZmluZSBFREdFX0FCTk9STUFMCQkyCS8qIFN0cmFuZ2UgZmxvdywgbGlrZSBjb21wdXRlZAorCQkJCQkgICBsYWJlbCwgb3IgZWggKi8KKyNkZWZpbmUgRURHRV9BQk5PUk1BTF9DQUxMCTQJLyogQ2FsbCB3aXRoIGFibm9ybWFsIGV4aXQKKwkJCQkJICAgbGlrZSBhbiBleGNlcHRpb24sIG9yIHNpYmNhbGwgKi8KKyNkZWZpbmUgRURHRV9FSAkJCTgJLyogRXhjZXB0aW9uIHRocm93ICovCisjZGVmaW5lIEVER0VfRkFLRQkJMTYJLyogTm90IGEgcmVhbCBlZGdlIChwcm9maWxlLmMpICovCisjZGVmaW5lIEVER0VfREZTX0JBQ0sJCTMyCS8qIEEgYmFja3dhcmRzIGVkZ2UgKi8KKyNkZWZpbmUgRURHRV9DQU5fRkFMTFRIUlUJNjQJLyogQ2FuZGlkYXRlIGZvciBzdHJhaWdodCBsaW5lCisJCQkJCSAgIGZsb3cuICAqLworI2RlZmluZSBFREdFX0lSUkVEVUNJQkxFX0xPT1AJMTI4CS8qIFBhcnQgb2YgaXJyZWR1Y2libGUgbG9vcC4gICovCisjZGVmaW5lIEVER0VfU0lCQ0FMTAkJMjU2CS8qIEVkZ2UgZnJvbSBzaWJjYWxsIHRvIGV4aXQuICAqLworI2RlZmluZSBFREdFX0xPT1BfRVhJVAkJNTEyCS8qIEV4aXQgb2YgYSBsb29wLiAgKi8KKyNkZWZpbmUgRURHRV9UUlVFX1ZBTFVFCQkxMDI0CS8qIEVkZ2UgdGFrZW4gd2hlbiBjb250cm9sbGluZworCQkJCQkgICBwcmVkaWNhdGUgaXMgbm9uemVyby4gICovCisjZGVmaW5lIEVER0VfRkFMU0VfVkFMVUUJMjA0OAkvKiBFZGdlIHRha2VuIHdoZW4gY29udHJvbGxpbmcKKwkJCQkJICAgcHJlZGljYXRlIGlzIHplcm8uICAqLworI2RlZmluZSBFREdFX0VYRUNVVEFCTEUJCTQwOTYJLyogRWRnZSBpcyBleGVjdXRhYmxlLiAgT25seQorCQkJCQkgICB2YWxpZCBkdXJpbmcgU1NBLUNDUC4gICovCisjZGVmaW5lIEVER0VfQ1JPU1NJTkcJCTgxOTIgICAgLyogRWRnZSBjcm9zc2VzIGJldHdlZW4gaG90CisJCQkJCSAgIGFuZCBjb2xkIHNlY3Rpb25zLCB3aGVuIHdlCisJCQkJCSAgIGRvIHBhcnRpdGlvbmluZy4gICovCisjZGVmaW5lIEVER0VfQUxMX0ZMQUdTCSAgICAgICAxNjM4MworCisjZGVmaW5lIEVER0VfQ09NUExFWAkoRURHRV9BQk5PUk1BTCB8IEVER0VfQUJOT1JNQUxfQ0FMTCB8IEVER0VfRUgpCisKKy8qIENvdW50ZXIgc3VtbWFyeSBmcm9tIHRoZSBsYXN0IHNldCBvZiBjb3ZlcmFnZSBjb3VudHMgcmVhZCBieQorICAgcHJvZmlsZS5jLiAgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgZ2Nvdl9jdHJfc3VtbWFyeSAqcHJvZmlsZV9pbmZvOworCisvKiBEZWNsYXJlZCBpbiBjZmdsb29wLmguICAqLworc3RydWN0IGxvb3A7CisKKy8qIERlY2xhcmVkIGluIHRyZWUtZmxvdy5oLiAgKi8KK3N0cnVjdCBlZGdlX3ByZWRpY3Rpb247CitzdHJ1Y3QgcnRsX2JiX2luZm87CisKKy8qIEEgYmFzaWMgYmxvY2sgaXMgYSBzZXF1ZW5jZSBvZiBpbnN0cnVjdGlvbnMgd2l0aCBvbmx5IGVudHJ5IGFuZAorICAgb25seSBvbmUgZXhpdC4gIElmIGFueSBvbmUgb2YgdGhlIGluc3RydWN0aW9ucyBhcmUgZXhlY3V0ZWQsIHRoZXkKKyAgIHdpbGwgYWxsIGJlIGV4ZWN1dGVkLCBhbmQgaW4gc2VxdWVuY2UgZnJvbSBmaXJzdCB0byBsYXN0LgorCisgICBUaGVyZSBtYXkgYmUgQ09ORF9FWEVDIGluc3RydWN0aW9ucyBpbiB0aGUgYmFzaWMgYmxvY2suICBUaGUKKyAgIENPTkRfRVhFQyAqaW5zdHJ1Y3Rpb25zKiB3aWxsIGJlIGV4ZWN1dGVkIC0tIGJ1dCBpZiB0aGUgY29uZGl0aW9uCisgICBpcyBmYWxzZSB0aGUgY29uZGl0aW9uYWxseSBleGVjdXRlZCAqZXhwcmVzc2lvbnMqIHdpbGwgb2YgY291cnNlCisgICBub3QgYmUgZXhlY3V0ZWQuICBXZSBkb24ndCBjb25zaWRlciB0aGUgY29uZGl0aW9uYWxseSBleGVjdXRlZAorICAgZXhwcmVzc2lvbiAod2hpY2ggbWlnaHQgaGF2ZSBzaWRlLWVmZmVjdHMpIHRvIGJlIGluIGEgc2VwYXJhdGUKKyAgIGJhc2ljIGJsb2NrIGJlY2F1c2UgdGhlIHByb2dyYW0gY291bnRlciB3aWxsIGFsd2F5cyBiZSBhdCB0aGUgc2FtZQorICAgbG9jYXRpb24gYWZ0ZXIgdGhlIENPTkRfRVhFQyBpbnN0cnVjdGlvbiwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZQorICAgY29uZGl0aW9uIGlzIHRydWUgb3Igbm90LgorCisgICBCYXNpYyBibG9ja3MgbmVlZCBub3Qgc3RhcnQgd2l0aCBhIGxhYmVsIG5vciBlbmQgd2l0aCBhIGp1bXAgaW5zbi4KKyAgIEZvciBleGFtcGxlLCBhIHByZXZpb3VzIGJhc2ljIGJsb2NrIG1heSBqdXN0ICJjb25kaXRpb25hbGx5IGZhbGwiCisgICBpbnRvIHRoZSBzdWNjZWVkaW5nIGJhc2ljIGJsb2NrLCBhbmQgdGhlIGxhc3QgYmFzaWMgYmxvY2sgbmVlZCBub3QKKyAgIGVuZCB3aXRoIGEganVtcCBpbnNuLiAgQmxvY2sgMCBpcyBhIGRlc2NlbmRhbnQgb2YgdGhlIGVudHJ5IGJsb2NrLgorCisgICBBIGJhc2ljIGJsb2NrIGJlZ2lubmluZyB3aXRoIHR3byBsYWJlbHMgY2Fubm90IGhhdmUgbm90ZXMgYmV0d2VlbgorICAgdGhlIGxhYmVscy4KKworICAgRGF0YSBmb3IganVtcCB0YWJsZXMgYXJlIHN0b3JlZCBpbiBqdW1wX2luc25zIHRoYXQgb2NjdXIgaW4gbm8KKyAgIGJhc2ljIGJsb2NrIGV2ZW4gdGhvdWdoIHRoZXNlIGluc25zIGNhbiBmb2xsb3cgb3IgcHJlY2VkZSBpbnNucyBpbgorICAgYmFzaWMgYmxvY2tzLiAgKi8KKworLyogQmFzaWMgYmxvY2sgaW5mb3JtYXRpb24gaW5kZXhlZCBieSBibG9jayBudW1iZXIuICAqLworc3RydWN0IEdUWSgoY2hhaW5fbmV4dCAoIiVoLm5leHRfYmIiKSwgY2hhaW5fcHJldiAoIiVoLnByZXZfYmIiKSkpIGJhc2ljX2Jsb2NrX2RlZiB7CisgIC8qIFRoZSBlZGdlcyBpbnRvIGFuZCBvdXQgb2YgdGhlIGJsb2NrLiAgKi8KKyAgVkVDKGVkZ2UsZ2MpICpwcmVkczsKKyAgVkVDKGVkZ2UsZ2MpICpzdWNjczsKKworICAvKiBBdXhpbGlhcnkgaW5mbyBzcGVjaWZpYyB0byBhIHBhc3MuICAqLworICBQVFIgR1RZICgoc2tpcCAoIiIpKSkgYXV4OworCisgIC8qIElubmVybW9zdCBsb29wIGNvbnRhaW5pbmcgdGhlIGJsb2NrLiAgKi8KKyAgc3RydWN0IGxvb3AgKmxvb3BfZmF0aGVyOworCisgIC8qIFRoZSBkb21pbmFuY2UgYW5kIHBvc3Rkb21pbmFuY2UgaW5mb3JtYXRpb24gbm9kZS4gICovCisgIHN0cnVjdCBldF9ub2RlICogR1RZICgoc2tpcCAoIiIpKSkgZG9tWzJdOworCisgIC8qIFByZXZpb3VzIGFuZCBuZXh0IGJsb2NrcyBpbiB0aGUgY2hhaW4uICAqLworICBzdHJ1Y3QgYmFzaWNfYmxvY2tfZGVmICpwcmV2X2JiOworICBzdHJ1Y3QgYmFzaWNfYmxvY2tfZGVmICpuZXh0X2JiOworCisgIHVuaW9uIGJhc2ljX2Jsb2NrX2lsX2RlcGVuZGVudCB7CisgICAgICBzdHJ1Y3QgZ2ltcGxlX2JiX2luZm8gKiBHVFkgKCh0YWcgKCIwIikpKSBnaW1wbGU7CisgICAgICBzdHJ1Y3QgcnRsX2JiX2luZm8gKiBHVFkgKCh0YWcgKCIxIikpKSBydGw7CisgICAgfSBHVFkgKChkZXNjICgiKCglMS5mbGFncyAmIEJCX1JUTCkgIT0gMCkiKSkpIGlsOworCisgIC8qIEV4cGVjdGVkIG51bWJlciBvZiBleGVjdXRpb25zOiBjYWxjdWxhdGVkIGluIHByb2ZpbGUuYy4gICovCisgIGdjb3ZfdHlwZSBjb3VudDsKKworICAvKiBUaGUgaW5kZXggb2YgdGhpcyBibG9jay4gICovCisgIGludCBpbmRleDsKKworICAvKiBUaGUgbG9vcCBkZXB0aCBvZiB0aGlzIGJsb2NrLiAgKi8KKyAgaW50IGxvb3BfZGVwdGg7CisKKyAgLyogRXhwZWN0ZWQgZnJlcXVlbmN5LiAgTm9ybWFsaXplZCB0byBiZSBpbiByYW5nZSAwIHRvIEJCX0ZSRVFfTUFYLiAgKi8KKyAgaW50IGZyZXF1ZW5jeTsKKworICAvKiBUaGUgZGlzY3JpbWluYXRvciBmb3IgdGhpcyBibG9jay4gICovCisgIGludCBkaXNjcmltaW5hdG9yOworCisgIC8qIFZhcmlvdXMgZmxhZ3MuICBTZWUgQkJfKiBiZWxvdy4gICovCisgIGludCBmbGFnczsKK307CisKK3N0cnVjdCBHVFkoKCkpIHJ0bF9iYl9pbmZvIHsKKyAgLyogVGhlIGZpcnN0IGFuZCBsYXN0IGluc25zIG9mIHRoZSBibG9jay4gICovCisgIHJ0eCBoZWFkXzsKKyAgcnR4IGVuZF87CisKKyAgLyogSW4gQ0ZHbGF5b3V0IG1vZGUgcG9pbnRzIHRvIGluc24gbm90ZXMvanVtcHRhYmxlcyB0byBiZSBwbGFjZWQganVzdCBiZWZvcmUKKyAgICAgYW5kIGFmdGVyIHRoZSBibG9jay4gICAqLworICBydHggaGVhZGVyOworICBydHggZm9vdGVyOworCisgIC8qIFRoaXMgZmllbGQgaXMgdXNlZCBieSB0aGUgYmItcmVvcmRlciBhbmQgdHJhY2VyIHBhc3Nlcy4gICovCisgIGludCB2aXNpdGVkOworfTsKKworc3RydWN0IEdUWSgoKSkgZ2ltcGxlX2JiX2luZm8geworICAvKiBTZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIGluIHRoaXMgYmxvY2suICAqLworICBnaW1wbGVfc2VxIHNlcTsKKworICAvKiBQSEkgbm9kZXMgZm9yIHRoaXMgYmxvY2suICAqLworICBnaW1wbGVfc2VxIHBoaV9ub2RlczsKK307CisKK0RFRl9WRUNfUChiYXNpY19ibG9jayk7CitERUZfVkVDX0FMTE9DX1AoYmFzaWNfYmxvY2ssZ2MpOworREVGX1ZFQ19BTExPQ19QKGJhc2ljX2Jsb2NrLGhlYXApOworCisjZGVmaW5lIEJCX0ZSRVFfTUFYIDEwMDAwCisKKy8qIE1hc2tzIGZvciBiYXNpY19ibG9jay5mbGFncy4KKworICAgQkJfSE9UX1BBUlRJVElPTiBhbmQgQkJfQ09MRF9QQVJUSVRJT04gc2hvdWxkIGJlIHByZXNlcnZlZCB0aHJvdWdob3V0CisgICB0aGUgY29tcGlsYXRpb24sIHNvIHRoZXkgYXJlIG5ldmVyIGNsZWFyZWQuCisKKyAgIEFsbCBvdGhlciBmbGFncyBtYXkgYmUgY2xlYXJlZCBieSBjbGVhcl9iYl9mbGFncygpLiAgSXQgaXMgZ2VuZXJhbGx5CisgICBhIGJhZCBpZGVhIHRvIHJlbHkgb24gYW55IGZsYWdzIGJlaW5nIHVwLXRvLWRhdGUuICAqLworCitlbnVtIGJiX2ZsYWdzCit7CisgIC8qIE9ubHkgc2V0IG9uIGJsb2NrcyB0aGF0IGhhdmUganVzdCBiZWVuIGNyZWF0ZWQgYnkgY3JlYXRlX2JiLiAgKi8KKyAgQkJfTkVXID0gMSA8PCAwLAorCisgIC8qIFNldCBieSBmaW5kX3VucmVhY2hhYmxlX2Jsb2Nrcy4gIERvIG5vdCByZWx5IG9uIHRoaXMgYmVpbmcgc2V0IGluIGFueQorICAgICBwYXNzLiAgKi8KKyAgQkJfUkVBQ0hBQkxFID0gMSA8PCAxLAorCisgIC8qIFNldCBmb3IgYmxvY2tzIGluIGFuIGlycmVkdWNpYmxlIGxvb3AgYnkgbG9vcCBhbmFseXNpcy4gICovCisgIEJCX0lSUkVEVUNJQkxFX0xPT1AgPSAxIDw8IDIsCisKKyAgLyogU2V0IG9uIGJsb2NrcyB0aGF0IG1heSBhY3R1YWxseSBub3QgYmUgc2luZ2xlLWVudHJ5IHNpbmdsZS1leGl0IGJsb2NrLiAgKi8KKyAgQkJfU1VQRVJCTE9DSyA9IDEgPDwgMywKKworICAvKiBTZXQgb24gYmFzaWMgYmxvY2tzIHRoYXQgdGhlIHNjaGVkdWxlciBzaG91bGQgbm90IHRvdWNoLiAgVGhpcyBpcyB1c2VkCisgICAgIGJ5IFNNUyB0byBwcmV2ZW50IG90aGVyIHNjaGVkdWxlcnMgZnJvbSBtZXNzaW5nIHdpdGggdGhlIGxvb3Agc2NoZWR1bGUuICAqLworICBCQl9ESVNBQkxFX1NDSEVEVUxFID0gMSA8PCA0LAorCisgIC8qIFNldCBvbiBibG9ja3MgdGhhdCBzaG91bGQgYmUgcHV0IGluIGEgaG90IHNlY3Rpb24uICAqLworICBCQl9IT1RfUEFSVElUSU9OID0gMSA8PCA1LAorCisgIC8qIFNldCBvbiBibG9ja3MgdGhhdCBzaG91bGQgYmUgcHV0IGluIGEgY29sZCBzZWN0aW9uLiAgKi8KKyAgQkJfQ09MRF9QQVJUSVRJT04gPSAxIDw8IDYsCisKKyAgLyogU2V0IG9uIGJsb2NrIHRoYXQgd2FzIGR1cGxpY2F0ZWQuICAqLworICBCQl9EVVBMSUNBVEVEID0gMSA8PCA3LAorCisgIC8qIFNldCBpZiB0aGUgbGFiZWwgYXQgdGhlIHRvcCBvZiB0aGlzIGJsb2NrIGlzIHRoZSB0YXJnZXQgb2YgYSBub24tbG9jYWwgZ290by4gICovCisgIEJCX05PTl9MT0NBTF9HT1RPX1RBUkdFVCA9IDEgPDwgOCwKKworICAvKiBTZXQgb24gYmxvY2tzIHRoYXQgYXJlIGluIFJUTCBmb3JtYXQuICAqLworICBCQl9SVEwgPSAxIDw8IDkgLAorCisgIC8qIFNldCBvbiBibG9ja3MgdGhhdCBhcmUgZm9yd2FyZGVyIGJsb2Nrcy4KKyAgICAgT25seSB1c2VkIGluIGNmZ2NsZWFudXAuYy4gICovCisgIEJCX0ZPUldBUkRFUl9CTE9DSyA9IDEgPDwgMTAsCisKKyAgLyogU2V0IG9uIGJsb2NrcyB0aGF0IGNhbm5vdCBiZSB0aHJlYWRlZCB0aHJvdWdoLgorICAgICBPbmx5IHVzZWQgaW4gY2ZnY2xlYW51cC5jLiAgKi8KKyAgQkJfTk9OVEhSRUFEQUJMRV9CTE9DSyA9IDEgPDwgMTEKK307CisKKy8qIER1bW15IGZsYWcgZm9yIGNvbnZlbmllbmNlIGluIHRoZSBob3QvY29sZCBwYXJ0aXRpb25pbmcgY29kZS4gICovCisjZGVmaW5lIEJCX1VOUEFSVElUSU9ORUQJMAorCisvKiBQYXJ0aXRpb25zLCB0byBiZSB1c2VkIHdoZW4gcGFydGl0aW9uaW5nIGhvdCBhbmQgY29sZCBiYXNpYyBibG9ja3MgaW50bworICAgc2VwYXJhdGUgc2VjdGlvbnMuICAqLworI2RlZmluZSBCQl9QQVJUSVRJT04oYmIpICgoYmIpLT5mbGFncyAmIChCQl9IT1RfUEFSVElUSU9OfEJCX0NPTERfUEFSVElUSU9OKSkKKyNkZWZpbmUgQkJfU0VUX1BBUlRJVElPTihiYiwgcGFydCkgZG8gewkJCQkJXAorICBiYXNpY19ibG9jayBiYl8gPSAoYmIpOwkJCQkJCVwKKyAgYmJfLT5mbGFncyA9ICgoYmJfLT5mbGFncyAmIH4oQkJfSE9UX1BBUlRJVElPTnxCQl9DT0xEX1BBUlRJVElPTikpCVwKKwkJfCAocGFydCkpOwkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgQkJfQ09QWV9QQVJUSVRJT04oZHN0YmIsIHNyY2JiKSBcCisgIEJCX1NFVF9QQVJUSVRJT04gKGRzdGJiLCBCQl9QQVJUSVRJT04gKHNyY2JiKSkKKworLyogU3RhdGUgb2YgZG9taW5hbmNlIGluZm9ybWF0aW9uLiAgKi8KKworZW51bSBkb21fc3RhdGUKK3sKKyAgRE9NX05PTkUsCQkvKiBOb3QgY29tcHV0ZWQgYXQgYWxsLiAgKi8KKyAgRE9NX05PX0ZBU1RfUVVFUlksCS8qIFRoZSBkYXRhIGlzIE9LLCBidXQgdGhlIGZhc3QgcXVlcnkgZGF0YSBhcmUgbm90IHVzYWJsZS4gICovCisgIERPTV9PSwkJLyogRXZlcnl0aGluZyBpcyBvay4gICovCit9OworCisvKiBXaGF0IHNvcnQgb2YgcHJvZmlsaW5nIGluZm9ybWF0aW9uIHdlIGhhdmUuICAqLworZW51bSBwcm9maWxlX3N0YXR1c19kCit7CisgIFBST0ZJTEVfQUJTRU5ULAorICBQUk9GSUxFX0dVRVNTRUQsCisgIFBST0ZJTEVfUkVBRAorfTsKKworLyogQSBzdHJ1Y3R1cmUgdG8gZ3JvdXAgYWxsIHRoZSBwZXItZnVuY3Rpb24gY29udHJvbCBmbG93IGdyYXBoIGRhdGEuCisgICBUaGUgeF8qIHByZWZpeGluZyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvdGhlcndpc2UgcmVmZXJlbmNlcyB0byB0aGUKKyAgIGZpZWxkcyBvZiB0aGlzIHN0cnVjdCBhcmUgaW50ZXJwcmV0ZWQgYXMgdGhlIGRlZmluZXMgZm9yIGJhY2t3YXJkCisgICBzb3VyY2UgY29tcGF0aWJpbGl0eSBmb2xsb3dpbmcgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBzdHJ1Y3QuICAqLworc3RydWN0IEdUWSgoKSkgY29udHJvbF9mbG93X2dyYXBoIHsKKyAgLyogQmxvY2sgcG9pbnRlcnMgZm9yIHRoZSBleGl0IGFuZCBlbnRyeSBvZiBhIGZ1bmN0aW9uLgorICAgICBUaGVzZSBhcmUgYWx3YXlzIHRoZSBoZWFkIGFuZCB0YWlsIG9mIHRoZSBiYXNpYyBibG9jayBsaXN0LiAgKi8KKyAgYmFzaWNfYmxvY2sgeF9lbnRyeV9ibG9ja19wdHI7CisgIGJhc2ljX2Jsb2NrIHhfZXhpdF9ibG9ja19wdHI7CisKKyAgLyogSW5kZXggYnkgYmFzaWMgYmxvY2sgbnVtYmVyLCBnZXQgYmFzaWMgYmxvY2sgc3RydWN0IGluZm8uICAqLworICBWRUMoYmFzaWNfYmxvY2ssZ2MpICp4X2Jhc2ljX2Jsb2NrX2luZm87CisKKyAgLyogTnVtYmVyIG9mIGJhc2ljIGJsb2NrcyBpbiB0aGlzIGZsb3cgZ3JhcGguICAqLworICBpbnQgeF9uX2Jhc2ljX2Jsb2NrczsKKworICAvKiBOdW1iZXIgb2YgZWRnZXMgaW4gdGhpcyBmbG93IGdyYXBoLiAgKi8KKyAgaW50IHhfbl9lZGdlczsKKworICAvKiBUaGUgZmlyc3QgZnJlZSBiYXNpYyBibG9jayBudW1iZXIuICAqLworICBpbnQgeF9sYXN0X2Jhc2ljX2Jsb2NrOworCisgIC8qIE1hcHBpbmcgb2YgbGFiZWxzIHRvIHRoZWlyIGFzc29jaWF0ZWQgYmxvY2tzLiAgQXQgcHJlc2VudAorICAgICBvbmx5IHVzZWQgZm9yIHRoZSBnaW1wbGUgQ0ZHLiAgKi8KKyAgVkVDKGJhc2ljX2Jsb2NrLGdjKSAqeF9sYWJlbF90b19ibG9ja19tYXA7CisKKyAgZW51bSBwcm9maWxlX3N0YXR1c19kIHhfcHJvZmlsZV9zdGF0dXM7CisKKyAgLyogV2hldGhlciB0aGUgZG9taW5hdG9ycyBhbmQgdGhlIHBvc3Rkb21pbmF0b3JzIGFyZSBhdmFpbGFibGUuICAqLworICBlbnVtIGRvbV9zdGF0ZSB4X2RvbV9jb21wdXRlZFsyXTsKKworICAvKiBOdW1iZXIgb2YgYmFzaWMgYmxvY2tzIGluIHRoZSBkb21pbmFuY2UgdHJlZS4gICovCisgIHVuc2lnbmVkIHhfbl9iYnNfaW5fZG9tX3RyZWVbMl07CisKKyAgLyogTWF4aW1hbCBudW1iZXIgb2YgZW50aXRpZXMgaW4gdGhlIHNpbmdsZSBqdW1wdGFibGUuICBVc2VkIHRvIGVzdGltYXRlCisgICAgIGZpbmFsIGZsb3dncmFwaCBzaXplLiAgKi8KKyAgaW50IG1heF9qdW1wdGFibGVfZW50czsKKworICAvKiBVSURzIGZvciBMQUJFTF9ERUNMcy4gICovCisgIGludCBsYXN0X2xhYmVsX3VpZDsKK307CisKKy8qIERlZmluZXMgZm9yIGFjY2Vzc2luZyB0aGUgZmllbGRzIG9mIHRoZSBDRkcgc3RydWN0dXJlIGZvciBmdW5jdGlvbiBGTi4gICovCisjZGVmaW5lIEVOVFJZX0JMT0NLX1BUUl9GT1JfRlVOQ1RJT04oRk4pICAgICAoKEZOKS0+Y2ZnLT54X2VudHJ5X2Jsb2NrX3B0cikKKyNkZWZpbmUgRVhJVF9CTE9DS19QVFJfRk9SX0ZVTkNUSU9OKEZOKQkgICAgICgoRk4pLT5jZmctPnhfZXhpdF9ibG9ja19wdHIpCisjZGVmaW5lIGJhc2ljX2Jsb2NrX2luZm9fZm9yX2Z1bmN0aW9uKEZOKSAgICAoKEZOKS0+Y2ZnLT54X2Jhc2ljX2Jsb2NrX2luZm8pCisjZGVmaW5lIG5fYmFzaWNfYmxvY2tzX2Zvcl9mdW5jdGlvbihGTikJICAgICAoKEZOKS0+Y2ZnLT54X25fYmFzaWNfYmxvY2tzKQorI2RlZmluZSBuX2VkZ2VzX2Zvcl9mdW5jdGlvbihGTikJICAgICAoKEZOKS0+Y2ZnLT54X25fZWRnZXMpCisjZGVmaW5lIGxhc3RfYmFzaWNfYmxvY2tfZm9yX2Z1bmN0aW9uKEZOKSAgICAoKEZOKS0+Y2ZnLT54X2xhc3RfYmFzaWNfYmxvY2spCisjZGVmaW5lIGxhYmVsX3RvX2Jsb2NrX21hcF9mb3JfZnVuY3Rpb24oRk4pICAoKEZOKS0+Y2ZnLT54X2xhYmVsX3RvX2Jsb2NrX21hcCkKKyNkZWZpbmUgcHJvZmlsZV9zdGF0dXNfZm9yX2Z1bmN0aW9uKEZOKQkgICAgICgoRk4pLT5jZmctPnhfcHJvZmlsZV9zdGF0dXMpCisKKyNkZWZpbmUgQkFTSUNfQkxPQ0tfRk9SX0ZVTkNUSU9OKEZOLE4pIFwKKyAgKFZFQ19pbmRleCAoYmFzaWNfYmxvY2ssIGJhc2ljX2Jsb2NrX2luZm9fZm9yX2Z1bmN0aW9uKEZOKSwgKE4pKSkKKyNkZWZpbmUgU0VUX0JBU0lDX0JMT0NLX0ZPUl9GVU5DVElPTihGTixOLEJCKSBcCisgIChWRUNfcmVwbGFjZSAoYmFzaWNfYmxvY2ssIGJhc2ljX2Jsb2NrX2luZm9fZm9yX2Z1bmN0aW9uKEZOKSwgKE4pLCAoQkIpKSkKKworLyogRGVmaW5lcyBmb3IgdGV4dHVhbCBiYWNrd2FyZCBzb3VyY2UgY29tcGF0aWJpbGl0eS4gICovCisjZGVmaW5lIEVOVFJZX0JMT0NLX1BUUgkJKGNmdW4tPmNmZy0+eF9lbnRyeV9ibG9ja19wdHIpCisjZGVmaW5lIEVYSVRfQkxPQ0tfUFRSCQkoY2Z1bi0+Y2ZnLT54X2V4aXRfYmxvY2tfcHRyKQorI2RlZmluZSBiYXNpY19ibG9ja19pbmZvCShjZnVuLT5jZmctPnhfYmFzaWNfYmxvY2tfaW5mbykKKyNkZWZpbmUgbl9iYXNpY19ibG9ja3MJCShjZnVuLT5jZmctPnhfbl9iYXNpY19ibG9ja3MpCisjZGVmaW5lIG5fZWRnZXMJCQkoY2Z1bi0+Y2ZnLT54X25fZWRnZXMpCisjZGVmaW5lIGxhc3RfYmFzaWNfYmxvY2sJKGNmdW4tPmNmZy0+eF9sYXN0X2Jhc2ljX2Jsb2NrKQorI2RlZmluZSBsYWJlbF90b19ibG9ja19tYXAJKGNmdW4tPmNmZy0+eF9sYWJlbF90b19ibG9ja19tYXApCisjZGVmaW5lIHByb2ZpbGVfc3RhdHVzCQkoY2Z1bi0+Y2ZnLT54X3Byb2ZpbGVfc3RhdHVzKQorCisjZGVmaW5lIEJBU0lDX0JMT0NLKE4pCQkoVkVDX2luZGV4IChiYXNpY19ibG9jaywgYmFzaWNfYmxvY2tfaW5mbywgKE4pKSkKKyNkZWZpbmUgU0VUX0JBU0lDX0JMT0NLKE4sQkIpCShWRUNfcmVwbGFjZSAoYmFzaWNfYmxvY2ssIGJhc2ljX2Jsb2NrX2luZm8sIChOKSwgKEJCKSkpCisKKy8qIEZvciBpdGVyYXRpbmcgb3ZlciBiYXNpYyBibG9ja3MuICAqLworI2RlZmluZSBGT1JfQkJfQkVUV0VFTihCQiwgRlJPTSwgVE8sIERJUikgXAorICBmb3IgKEJCID0gRlJPTTsgQkIgIT0gVE87IEJCID0gQkItPkRJUikKKworI2RlZmluZSBGT1JfRUFDSF9CQl9GTihCQiwgRk4pIFwKKyAgRk9SX0JCX0JFVFdFRU4gKEJCLCAoRk4pLT5jZmctPnhfZW50cnlfYmxvY2tfcHRyLT5uZXh0X2JiLCAoRk4pLT5jZmctPnhfZXhpdF9ibG9ja19wdHIsIG5leHRfYmIpCisKKyNkZWZpbmUgRk9SX0VBQ0hfQkIoQkIpIEZPUl9FQUNIX0JCX0ZOIChCQiwgY2Z1bikKKworI2RlZmluZSBGT1JfRUFDSF9CQl9SRVZFUlNFX0ZOKEJCLCBGTikgXAorICBGT1JfQkJfQkVUV0VFTiAoQkIsIChGTiktPmNmZy0+eF9leGl0X2Jsb2NrX3B0ci0+cHJldl9iYiwgKEZOKS0+Y2ZnLT54X2VudHJ5X2Jsb2NrX3B0ciwgcHJldl9iYikKKworI2RlZmluZSBGT1JfRUFDSF9CQl9SRVZFUlNFKEJCKSBGT1JfRUFDSF9CQl9SRVZFUlNFX0ZOKEJCLCBjZnVuKQorCisvKiBGb3IgaXRlcmF0aW5nIG92ZXIgaW5zbnMgaW4gYmFzaWMgYmxvY2suICAqLworI2RlZmluZSBGT1JfQkJfSU5TTlMoQkIsIElOU04pCQkJXAorICBmb3IgKChJTlNOKSA9IEJCX0hFQUQgKEJCKTsJCQlcCisgICAgICAgKElOU04pICYmIChJTlNOKSAhPSBORVhUX0lOU04gKEJCX0VORCAoQkIpKTsJXAorICAgICAgIChJTlNOKSA9IE5FWFRfSU5TTiAoSU5TTikpCisKKy8qIEZvciBpdGVyYXRpbmcgb3ZlciBpbnNucyBpbiBiYXNpYyBibG9jayB3aGVuIHdlIG1pZ2h0IHJlbW92ZSB0aGUKKyAgIGN1cnJlbnQgaW5zbi4gICovCisjZGVmaW5lIEZPUl9CQl9JTlNOU19TQUZFKEJCLCBJTlNOLCBDVVJSKQkJCVwKKyAgZm9yICgoSU5TTikgPSBCQl9IRUFEIChCQiksIChDVVJSKSA9IChJTlNOKSA/IE5FWFRfSU5TTiAoKElOU04pKTogTlVMTDsJXAorICAgICAgIChJTlNOKSAmJiAoSU5TTikgIT0gTkVYVF9JTlNOIChCQl9FTkQgKEJCKSk7CVwKKyAgICAgICAoSU5TTikgPSAoQ1VSUiksIChDVVJSKSA9IChJTlNOKSA/IE5FWFRfSU5TTiAoKElOU04pKSA6IE5VTEwpCisKKyNkZWZpbmUgRk9SX0JCX0lOU05TX1JFVkVSU0UoQkIsIElOU04pCQlcCisgIGZvciAoKElOU04pID0gQkJfRU5EIChCQik7CQkJXAorICAgICAgIChJTlNOKSAmJiAoSU5TTikgIT0gUFJFVl9JTlNOIChCQl9IRUFEIChCQikpOwlcCisgICAgICAgKElOU04pID0gUFJFVl9JTlNOIChJTlNOKSkKKworI2RlZmluZSBGT1JfQkJfSU5TTlNfUkVWRVJTRV9TQUZFKEJCLCBJTlNOLCBDVVJSKQlcCisgIGZvciAoKElOU04pID0gQkJfRU5EIChCQiksKENVUlIpID0gKElOU04pID8gUFJFVl9JTlNOICgoSU5TTikpIDogTlVMTDsJXAorICAgICAgIChJTlNOKSAmJiAoSU5TTikgIT0gUFJFVl9JTlNOIChCQl9IRUFEIChCQikpOwlcCisgICAgICAgKElOU04pID0gKENVUlIpLCAoQ1VSUikgPSAoSU5TTikgPyBQUkVWX0lOU04gKChJTlNOKSkgOiBOVUxMKQorCisvKiBDeWNsZXMgdGhyb3VnaCBfYWxsXyBiYXNpYyBibG9ja3MsIGV2ZW4gdGhlIGZha2Ugb25lcyAoZW50cnkgYW5kCisgICBleGl0IGJsb2NrKS4gICovCisKKyNkZWZpbmUgRk9SX0FMTF9CQihCQikgXAorICBmb3IgKEJCID0gRU5UUllfQkxPQ0tfUFRSOyBCQjsgQkIgPSBCQi0+bmV4dF9iYikKKworI2RlZmluZSBGT1JfQUxMX0JCX0ZOKEJCLCBGTikgXAorICBmb3IgKEJCID0gRU5UUllfQkxPQ0tfUFRSX0ZPUl9GVU5DVElPTiAoRk4pOyBCQjsgQkIgPSBCQi0+bmV4dF9iYikKKworZXh0ZXJuIGJpdG1hcF9vYnN0YWNrIHJlZ19vYnN0YWNrOworCisMCisvKiBTdHVmZiBmb3IgcmVjb3JkaW5nIGJhc2ljIGJsb2NrIGluZm8uICAqLworCisjZGVmaW5lIEJCX0hFQUQoQikgICAgICAoQiktPmlsLnJ0bC0+aGVhZF8KKyNkZWZpbmUgQkJfRU5EKEIpICAgICAgIChCKS0+aWwucnRsLT5lbmRfCisKKy8qIFNwZWNpYWwgYmxvY2sgbnVtYmVycyBbbWFya2Vyc10gZm9yIGVudHJ5IGFuZCBleGl0LgorICAgTmVpdGhlciBvZiB0aGVtIGlzIHN1cHBvc2VkIHRvIGhvbGQgYWN0dWFsIHN0YXRlbWVudHMuICAqLworI2RlZmluZSBFTlRSWV9CTE9DSyAoMCkKKyNkZWZpbmUgRVhJVF9CTE9DSyAoMSkKKworLyogVGhlIHR3byBibG9ja3MgdGhhdCBhcmUgYWx3YXlzIGluIHRoZSBjZmcuICAqLworI2RlZmluZSBOVU1fRklYRURfQkxPQ0tTICgyKQorCisjZGVmaW5lIHNldF9ibG9ja19mb3JfaW5zbihJTlNOLCBCQikgIChCTE9DS19GT1JfSU5TTiAoSU5TTikgPSBCQikKKworZXh0ZXJuIHZvaWQgY29tcHV0ZV9iYl9mb3JfaW5zbiAodm9pZCk7CitleHRlcm4gdW5zaWduZWQgaW50IGZyZWVfYmJfZm9yX2luc24gKHZvaWQpOworZXh0ZXJuIHZvaWQgdXBkYXRlX2JiX2Zvcl9pbnNuIChiYXNpY19ibG9jayk7CisKK2V4dGVybiB2b2lkIGluc2VydF9pbnNuX29uX2VkZ2UgKHJ0eCwgZWRnZSk7CitiYXNpY19ibG9jayBzcGxpdF9lZGdlX2FuZF9pbnNlcnQgKGVkZ2UsIHJ0eCk7CisKK2V4dGVybiB2b2lkIGNvbW1pdF9vbmVfZWRnZV9pbnNlcnRpb24gKGVkZ2UgZSk7CitleHRlcm4gdm9pZCBjb21taXRfZWRnZV9pbnNlcnRpb25zICh2b2lkKTsKKworZXh0ZXJuIHZvaWQgcmVtb3ZlX2Zha2VfZWRnZXMgKHZvaWQpOworZXh0ZXJuIHZvaWQgcmVtb3ZlX2Zha2VfZXhpdF9lZGdlcyAodm9pZCk7CitleHRlcm4gdm9pZCBhZGRfbm9yZXR1cm5fZmFrZV9leGl0X2VkZ2VzICh2b2lkKTsKK2V4dGVybiB2b2lkIGNvbm5lY3RfaW5maW5pdGVfbG9vcHNfdG9fZXhpdCAodm9pZCk7CitleHRlcm4gZWRnZSB1bmNoZWNrZWRfbWFrZV9lZGdlIChiYXNpY19ibG9jaywgYmFzaWNfYmxvY2ssIGludCk7CitleHRlcm4gZWRnZSBjYWNoZWRfbWFrZV9lZGdlIChzYml0bWFwLCBiYXNpY19ibG9jaywgYmFzaWNfYmxvY2ssIGludCk7CitleHRlcm4gZWRnZSBtYWtlX2VkZ2UgKGJhc2ljX2Jsb2NrLCBiYXNpY19ibG9jaywgaW50KTsKK2V4dGVybiBlZGdlIG1ha2Vfc2luZ2xlX3N1Y2NfZWRnZSAoYmFzaWNfYmxvY2ssIGJhc2ljX2Jsb2NrLCBpbnQpOworZXh0ZXJuIHZvaWQgcmVtb3ZlX2VkZ2VfcmF3IChlZGdlKTsKK2V4dGVybiB2b2lkIHJlZGlyZWN0X2VkZ2Vfc3VjYyAoZWRnZSwgYmFzaWNfYmxvY2spOworZXh0ZXJuIGVkZ2UgcmVkaXJlY3RfZWRnZV9zdWNjX25vZHVwIChlZGdlLCBiYXNpY19ibG9jayk7CitleHRlcm4gdm9pZCByZWRpcmVjdF9lZGdlX3ByZWQgKGVkZ2UsIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiBiYXNpY19ibG9jayBjcmVhdGVfYmFzaWNfYmxvY2tfc3RydWN0dXJlIChydHgsIHJ0eCwgcnR4LCBiYXNpY19ibG9jayk7CitleHRlcm4gdm9pZCBjbGVhcl9iYl9mbGFncyAodm9pZCk7CitleHRlcm4gaW50IHBvc3Rfb3JkZXJfY29tcHV0ZSAoaW50ICosIGJvb2wsIGJvb2wpOworZXh0ZXJuIGludCBpbnZlcnRlZF9wb3N0X29yZGVyX2NvbXB1dGUgKGludCAqKTsKK2V4dGVybiBpbnQgcHJlX2FuZF9yZXZfcG9zdF9vcmRlcl9jb21wdXRlIChpbnQgKiwgaW50ICosIGJvb2wpOworZXh0ZXJuIGludCBkZnNfZW51bWVyYXRlX2Zyb20gKGJhc2ljX2Jsb2NrLCBpbnQsCisJCQkgICAgICAgYm9vbCAoKikoY29uc3RfYmFzaWNfYmxvY2ssIGNvbnN0IHZvaWQgKiksCisJCQkgICAgICAgYmFzaWNfYmxvY2sgKiwgaW50LCBjb25zdCB2b2lkICopOworZXh0ZXJuIHZvaWQgY29tcHV0ZV9kb21pbmFuY2VfZnJvbnRpZXJzIChiaXRtYXAgKik7CitleHRlcm4gYml0bWFwIGNvbXB1dGVfaWRmIChiaXRtYXAsIGJpdG1hcCAqKTsKK2V4dGVybiB2b2lkIGR1bXBfYmJfaW5mbyAoYmFzaWNfYmxvY2ssIGJvb2wsIGJvb2wsIGludCwgY29uc3QgY2hhciAqLCBGSUxFICopOworZXh0ZXJuIHZvaWQgZHVtcF9lZGdlX2luZm8gKEZJTEUgKiwgZWRnZSwgaW50KTsKK2V4dGVybiB2b2lkIGJyaWVmX2R1bXBfY2ZnIChGSUxFICopOworZXh0ZXJuIHZvaWQgY2xlYXJfZWRnZXMgKHZvaWQpOworZXh0ZXJuIHZvaWQgc2NhbGVfYmJzX2ZyZXF1ZW5jaWVzX2ludCAoYmFzaWNfYmxvY2sgKiwgaW50LCBpbnQsIGludCk7CitleHRlcm4gdm9pZCBzY2FsZV9iYnNfZnJlcXVlbmNpZXNfZ2Nvdl90eXBlIChiYXNpY19ibG9jayAqLCBpbnQsIGdjb3ZfdHlwZSwKKwkJCQkJICAgICBnY292X3R5cGUpOworCisvKiBTdHJ1Y3R1cmUgdG8gZ3JvdXAgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB0byBwcm9jZXNzIElGLVRIRU4gYW5kCisgICBJRi1USEVOLUVMU0UgYmxvY2tzIGZvciB0aGUgY29uZGl0aW9uYWwgZXhlY3V0aW9uIHN1cHBvcnQuICBUaGlzCisgICBuZWVkcyB0byBiZSBpbiBhIHB1YmxpYyBmaWxlIGluIGNhc2UgdGhlIElGQ1ZUIG1hY3JvcyBjYWxsCisgICBmdW5jdGlvbnMgcGFzc2luZyB0aGUgY2VfaWZfYmxvY2sgZGF0YSBzdHJ1Y3R1cmUuICAqLworCit0eXBlZGVmIHN0cnVjdCBjZV9pZl9ibG9jaworeworICBiYXNpY19ibG9jayB0ZXN0X2JiOwkJCS8qIEZpcnN0IHRlc3QgYmxvY2suICAqLworICBiYXNpY19ibG9jayB0aGVuX2JiOwkJCS8qIFRIRU4gYmxvY2suICAqLworICBiYXNpY19ibG9jayBlbHNlX2JiOwkJCS8qIEVMU0UgYmxvY2sgb3IgTlVMTC4gICovCisgIGJhc2ljX2Jsb2NrIGpvaW5fYmI7CQkJLyogSm9pbiBUSEVOL0VMU0UgYmxvY2tzLiAgKi8KKyAgYmFzaWNfYmxvY2sgbGFzdF90ZXN0X2JiOwkJLyogTGFzdCBiYiB0byBob2xkICYmIG9yIHx8IHRlc3RzLiAgKi8KKyAgaW50IG51bV9tdWx0aXBsZV90ZXN0X2Jsb2NrczsJCS8qICMgb2YgJiYgYW5kIHx8IGJhc2ljIGJsb2Nrcy4gICovCisgIGludCBudW1fYW5kX2FuZF9ibG9ja3M7CQkvKiAjIG9mICYmIGJsb2Nrcy4gICovCisgIGludCBudW1fb3Jfb3JfYmxvY2tzOwkJCS8qICMgb2YgfHwgYmxvY2tzLiAgKi8KKyAgaW50IG51bV9tdWx0aXBsZV90ZXN0X2luc25zOwkJLyogIyBvZiBpbnNucyBpbiAmJiBhbmQgfHwgYmxvY2tzLiAgKi8KKyAgaW50IGFuZF9hbmRfcDsJCQkvKiBDb21wbGV4IHRlc3QgaXMgJiYuICAqLworICBpbnQgbnVtX3RoZW5faW5zbnM7CQkJLyogIyBvZiBpbnNucyBpbiBUSEVOIGJsb2NrLiAgKi8KKyAgaW50IG51bV9lbHNlX2luc25zOwkJCS8qICMgb2YgaW5zbnMgaW4gRUxTRSBibG9jay4gICovCisgIGludCBwYXNzOwkJCQkvKiBQYXNzIG51bWJlci4gICovCisKKyNpZmRlZiBJRkNWVF9FWFRSQV9GSUVMRFMKKyAgSUZDVlRfRVhUUkFfRklFTERTCQkJLyogQW55IG1hY2hpbmUgZGVwZW5kZW50IGZpZWxkcy4gICovCisjZW5kaWYKKworfSBjZV9pZl9ibG9ja190OworCisvKiBUaGlzIHN0cnVjdHVyZSBtYWludGFpbnMgYW4gZWRnZSBsaXN0IHZlY3Rvci4gICovCitzdHJ1Y3QgZWRnZV9saXN0Cit7CisgIGludCBudW1fYmxvY2tzOworICBpbnQgbnVtX2VkZ2VzOworICBlZGdlICppbmRleF90b19lZGdlOworfTsKKworLyogVGhlIGJhc2UgdmFsdWUgZm9yIGJyYW5jaCBwcm9iYWJpbGl0eSBub3RlcyBhbmQgZWRnZSBwcm9iYWJpbGl0aWVzLiAgKi8KKyNkZWZpbmUgUkVHX0JSX1BST0JfQkFTRSAgMTAwMDAKKworLyogVGhpcyBpcyB0aGUgdmFsdWUgd2hpY2ggaW5kaWNhdGVzIG5vIGVkZ2UgaXMgcHJlc2VudC4gICovCisjZGVmaW5lIEVER0VfSU5ERVhfTk9fRURHRQktMQorCisvKiBFREdFX0lOREVYIHJldHVybnMgYW4gaW50ZWdlciBpbmRleCBmb3IgYW4gZWRnZSwgb3IgRURHRV9JTkRFWF9OT19FREdFCisgICBpZiB0aGVyZSBpcyBubyBlZGdlIGJldHdlZW4gdGhlIDIgYmFzaWMgYmxvY2tzLiAgKi8KKyNkZWZpbmUgRURHRV9JTkRFWChlbCwgcHJlZCwgc3VjYykgKGZpbmRfZWRnZV9pbmRleCAoKGVsKSwgKHByZWQpLCAoc3VjYykpKQorCisvKiBJTkRFWF9FREdFX1BSRURfQkIgYW5kIElOREVYX0VER0VfU1VDQ19CQiByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBiYXNpYworICAgYmxvY2sgd2hpY2ggaXMgZWl0aGVyIHRoZSBwcmVkIG9yIHN1Y2MgZW5kIG9mIHRoZSBpbmRleGVkIGVkZ2UuICAqLworI2RlZmluZSBJTkRFWF9FREdFX1BSRURfQkIoZWwsIGluZGV4KQkoKGVsKS0+aW5kZXhfdG9fZWRnZVsoaW5kZXgpXS0+c3JjKQorI2RlZmluZSBJTkRFWF9FREdFX1NVQ0NfQkIoZWwsIGluZGV4KQkoKGVsKS0+aW5kZXhfdG9fZWRnZVsoaW5kZXgpXS0+ZGVzdCkKKworLyogSU5ERVhfRURHRSByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZWRnZS4gICovCisjZGVmaW5lIElOREVYX0VER0UoZWwsIGluZGV4KSAgICAgICAgICAgKChlbCktPmluZGV4X3RvX2VkZ2VbKGluZGV4KV0pCisKKy8qIE51bWJlciBvZiBlZGdlcyBpbiB0aGUgY29tcHJlc3NlZCBlZGdlIGxpc3QuICAqLworI2RlZmluZSBOVU1fRURHRVMoZWwpCQkJKChlbCktPm51bV9lZGdlcykKKworLyogQkIgaXMgYXNzdW1lZCB0byBjb250YWluIGNvbmRpdGlvbmFsIGp1bXAuICBSZXR1cm4gdGhlIGZhbGx0aHJ1IGVkZ2UuICAqLworI2RlZmluZSBGQUxMVEhSVV9FREdFKGJiKQkJKEVER0VfU1VDQyAoKGJiKSwgMCktPmZsYWdzICYgRURHRV9GQUxMVEhSVSBcCisJCQkJCSA/IEVER0VfU1VDQyAoKGJiKSwgMCkgOiBFREdFX1NVQ0MgKChiYiksIDEpKQorCisvKiBCQiBpcyBhc3N1bWVkIHRvIGNvbnRhaW4gY29uZGl0aW9uYWwganVtcC4gIFJldHVybiB0aGUgYnJhbmNoIGVkZ2UuICAqLworI2RlZmluZSBCUkFOQ0hfRURHRShiYikJCQkoRURHRV9TVUNDICgoYmIpLCAwKS0+ZmxhZ3MgJiBFREdFX0ZBTExUSFJVIFwKKwkJCQkJID8gRURHRV9TVUNDICgoYmIpLCAxKSA6IEVER0VfU1VDQyAoKGJiKSwgMCkpCisKKy8qIFJldHVybiBleHBlY3RlZCBleGVjdXRpb24gZnJlcXVlbmN5IG9mIHRoZSBlZGdlIEUuICAqLworI2RlZmluZSBFREdFX0ZSRVFVRU5DWShlKQkJKCgoZSktPnNyYy0+ZnJlcXVlbmN5IFwKKwkJCQkJICAqIChlKS0+cHJvYmFiaWxpdHkgXAorCQkJCQkgICsgUkVHX0JSX1BST0JfQkFTRSAvIDIpIFwKKwkJCQkJIC8gUkVHX0JSX1BST0JfQkFTRSkKKworLyogUmV0dXJuIG5vbnplcm8gaWYgZWRnZSBpcyBjcml0aWNhbC4gICovCisjZGVmaW5lIEVER0VfQ1JJVElDQUxfUChlKQkJKEVER0VfQ09VTlQgKChlKS0+c3JjLT5zdWNjcykgPj0gMiBcCisJCQkJCSAmJiBFREdFX0NPVU5UICgoZSktPmRlc3QtPnByZWRzKSA+PSAyKQorCisjZGVmaW5lIEVER0VfQ09VTlQoZXYpCQkJVkVDX2xlbmd0aCAoZWRnZSwgKGV2KSkKKyNkZWZpbmUgRURHRV9JKGV2LGkpCQkJVkVDX2luZGV4ICAoZWRnZSwgKGV2KSwgKGkpKQorI2RlZmluZSBFREdFX1BSRUQoYmIsaSkJCQlWRUNfaW5kZXggIChlZGdlLCAoYmIpLT5wcmVkcywgKGkpKQorI2RlZmluZSBFREdFX1NVQ0MoYmIsaSkJCQlWRUNfaW5kZXggIChlZGdlLCAoYmIpLT5zdWNjcywgKGkpKQorCisvKiBSZXR1cm5zIHRydWUgaWYgQkIgaGFzIHByZWNpc2VseSBvbmUgc3VjY2Vzc29yLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitzaW5nbGVfc3VjY19wIChjb25zdF9iYXNpY19ibG9jayBiYikKK3sKKyAgcmV0dXJuIEVER0VfQ09VTlQgKGJiLT5zdWNjcykgPT0gMTsKK30KKworLyogUmV0dXJucyB0cnVlIGlmIEJCIGhhcyBwcmVjaXNlbHkgb25lIHByZWRlY2Vzc29yLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitzaW5nbGVfcHJlZF9wIChjb25zdF9iYXNpY19ibG9jayBiYikKK3sKKyAgcmV0dXJuIEVER0VfQ09VTlQgKGJiLT5wcmVkcykgPT0gMTsKK30KKworLyogUmV0dXJucyB0aGUgc2luZ2xlIHN1Y2Nlc3NvciBlZGdlIG9mIGJhc2ljIGJsb2NrIEJCLiAgQWJvcnRzIGlmCisgICBCQiBkb2VzIG5vdCBoYXZlIGV4YWN0bHkgb25lIHN1Y2Nlc3Nvci4gICovCisKK3N0YXRpYyBpbmxpbmUgZWRnZQorc2luZ2xlX3N1Y2NfZWRnZSAoY29uc3RfYmFzaWNfYmxvY2sgYmIpCit7CisgIGdjY19hc3NlcnQgKHNpbmdsZV9zdWNjX3AgKGJiKSk7CisgIHJldHVybiBFREdFX1NVQ0MgKGJiLCAwKTsKK30KKworLyogUmV0dXJucyB0aGUgc2luZ2xlIHByZWRlY2Vzc29yIGVkZ2Ugb2YgYmFzaWMgYmxvY2sgQkIuICBBYm9ydHMKKyAgIGlmIEJCIGRvZXMgbm90IGhhdmUgZXhhY3RseSBvbmUgcHJlZGVjZXNzb3IuICAqLworCitzdGF0aWMgaW5saW5lIGVkZ2UKK3NpbmdsZV9wcmVkX2VkZ2UgKGNvbnN0X2Jhc2ljX2Jsb2NrIGJiKQoreworICBnY2NfYXNzZXJ0IChzaW5nbGVfcHJlZF9wIChiYikpOworICByZXR1cm4gRURHRV9QUkVEIChiYiwgMCk7Cit9CisKKy8qIFJldHVybnMgdGhlIHNpbmdsZSBzdWNjZXNzb3IgYmxvY2sgb2YgYmFzaWMgYmxvY2sgQkIuICBBYm9ydHMKKyAgIGlmIEJCIGRvZXMgbm90IGhhdmUgZXhhY3RseSBvbmUgc3VjY2Vzc29yLiAgKi8KKworc3RhdGljIGlubGluZSBiYXNpY19ibG9jaworc2luZ2xlX3N1Y2MgKGNvbnN0X2Jhc2ljX2Jsb2NrIGJiKQoreworICByZXR1cm4gc2luZ2xlX3N1Y2NfZWRnZSAoYmIpLT5kZXN0OworfQorCisvKiBSZXR1cm5zIHRoZSBzaW5nbGUgcHJlZGVjZXNzb3IgYmxvY2sgb2YgYmFzaWMgYmxvY2sgQkIuICBBYm9ydHMKKyAgIGlmIEJCIGRvZXMgbm90IGhhdmUgZXhhY3RseSBvbmUgcHJlZGVjZXNzb3IuKi8KKworc3RhdGljIGlubGluZSBiYXNpY19ibG9jaworc2luZ2xlX3ByZWQgKGNvbnN0X2Jhc2ljX2Jsb2NrIGJiKQoreworICByZXR1cm4gc2luZ2xlX3ByZWRfZWRnZSAoYmIpLT5zcmM7Cit9CisKKy8qIEl0ZXJhdG9yIG9iamVjdCBmb3IgZWRnZXMuICAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVuc2lnbmVkIGluZGV4OworICBWRUMoZWRnZSxnYykgKipjb250YWluZXI7Cit9IGVkZ2VfaXRlcmF0b3I7CisKK3N0YXRpYyBpbmxpbmUgVkVDKGVkZ2UsZ2MpICoKK2VpX2NvbnRhaW5lciAoZWRnZV9pdGVyYXRvciBpKQoreworICBnY2NfYXNzZXJ0IChpLmNvbnRhaW5lcik7CisgIHJldHVybiAqaS5jb250YWluZXI7Cit9CisKKyNkZWZpbmUgZWlfc3RhcnQoaXRlcikgZWlfc3RhcnRfMSAoJihpdGVyKSkKKyNkZWZpbmUgZWlfbGFzdChpdGVyKSBlaV9sYXN0XzEgKCYoaXRlcikpCisKKy8qIFJldHVybiBhbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgc3RhcnQgb2YgYW4gZWRnZSB2ZWN0b3IuICAqLworc3RhdGljIGlubGluZSBlZGdlX2l0ZXJhdG9yCitlaV9zdGFydF8xIChWRUMoZWRnZSxnYykgKipldikKK3sKKyAgZWRnZV9pdGVyYXRvciBpOworCisgIGkuaW5kZXggPSAwOworICBpLmNvbnRhaW5lciA9IGV2OworCisgIHJldHVybiBpOworfQorCisvKiBSZXR1cm4gYW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBlZGdlCisgICB2ZWN0b3IuICAqLworc3RhdGljIGlubGluZSBlZGdlX2l0ZXJhdG9yCitlaV9sYXN0XzEgKFZFQyhlZGdlLGdjKSAqKmV2KQoreworICBlZGdlX2l0ZXJhdG9yIGk7CisKKyAgaS5pbmRleCA9IEVER0VfQ09VTlQgKCpldikgLSAxOworICBpLmNvbnRhaW5lciA9IGV2OworCisgIHJldHVybiBpOworfQorCisvKiBJcyB0aGUgaXRlcmF0b3IgYGknIGF0IHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlPyAgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorZWlfZW5kX3AgKGVkZ2VfaXRlcmF0b3IgaSkKK3sKKyAgcmV0dXJuIChpLmluZGV4ID09IEVER0VfQ09VTlQgKGVpX2NvbnRhaW5lciAoaSkpKTsKK30KKworLyogSXMgdGhlIGl0ZXJhdG9yIGBpJyBhdCBvbmUgcG9zaXRpb24gYmVmb3JlIHRoZSBlbmQgb2YgdGhlCisgICBzZXF1ZW5jZT8gICovCitzdGF0aWMgaW5saW5lIGJvb2wKK2VpX29uZV9iZWZvcmVfZW5kX3AgKGVkZ2VfaXRlcmF0b3IgaSkKK3sKKyAgcmV0dXJuIChpLmluZGV4ICsgMSA9PSBFREdFX0NPVU5UIChlaV9jb250YWluZXIgKGkpKSk7Cit9CisKKy8qIEFkdmFuY2UgdGhlIGl0ZXJhdG9yIHRvIHRoZSBuZXh0IGVsZW1lbnQuICAqLworc3RhdGljIGlubGluZSB2b2lkCitlaV9uZXh0IChlZGdlX2l0ZXJhdG9yICppKQoreworICBnY2NfYXNzZXJ0IChpLT5pbmRleCA8IEVER0VfQ09VTlQgKGVpX2NvbnRhaW5lciAoKmkpKSk7CisgIGktPmluZGV4Kys7Cit9CisKKy8qIE1vdmUgdGhlIGl0ZXJhdG9yIHRvIHRoZSBwcmV2aW91cyBlbGVtZW50LiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZWlfcHJldiAoZWRnZV9pdGVyYXRvciAqaSkKK3sKKyAgZ2NjX2Fzc2VydCAoaS0+aW5kZXggPiAwKTsKKyAgaS0+aW5kZXgtLTsKK30KKworLyogUmV0dXJuIHRoZSBlZGdlIHBvaW50ZWQgdG8gYnkgdGhlIGl0ZXJhdG9yIGBpJy4gICovCitzdGF0aWMgaW5saW5lIGVkZ2UKK2VpX2VkZ2UgKGVkZ2VfaXRlcmF0b3IgaSkKK3sKKyAgcmV0dXJuIEVER0VfSSAoZWlfY29udGFpbmVyIChpKSwgaS5pbmRleCk7Cit9CisKKy8qIFJldHVybiBhbiBlZGdlIHBvaW50ZWQgdG8gYnkgdGhlIGl0ZXJhdG9yLiAgRG8gaXQgc2FmZWx5IHNvIHRoYXQKKyAgIE5VTEwgaXMgcmV0dXJuZWQgd2hlbiB0aGUgaXRlcmF0b3IgaXMgcG9pbnRpbmcgYXQgdGhlIGVuZCBvZiB0aGUKKyAgIHNlcXVlbmNlLiAgKi8KK3N0YXRpYyBpbmxpbmUgZWRnZQorZWlfc2FmZV9lZGdlIChlZGdlX2l0ZXJhdG9yIGkpCit7CisgIHJldHVybiAhZWlfZW5kX3AgKGkpID8gZWlfZWRnZSAoaSkgOiBOVUxMOworfQorCisvKiBSZXR1cm4gMSBpZiB3ZSBzaG91bGQgY29udGludWUgdG8gaXRlcmF0ZS4gIFJldHVybiAwIG90aGVyd2lzZS4KKyAgICpFZGdlIFAgaXMgc2V0IHRvIHRoZSBuZXh0IGVkZ2UgaWYgd2UgYXJlIHRvIGNvbnRpbnVlIHRvIGl0ZXJhdGUKKyAgIGFuZCBOVUxMIG90aGVyd2lzZS4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZWlfY29uZCAoZWRnZV9pdGVyYXRvciBlaSwgZWRnZSAqcCkKK3sKKyAgaWYgKCFlaV9lbmRfcCAoZWkpKQorICAgIHsKKyAgICAgICpwID0gZWlfZWRnZSAoZWkpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgKnAgPSBOVUxMOworICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCisvKiBUaGlzIG1hY3JvIHNlcnZlcyBhcyBhIGNvbnZlbmllbnQgd2F5IHRvIGl0ZXJhdGUgZWFjaCBlZGdlIGluIGEKKyAgIHZlY3RvciBvZiBwcmVkZWNlc3NvciBvciBzdWNjZXNzb3IgZWRnZXMuICBJdCBtdXN0IG5vdCBiZSB1c2VkIHdoZW4KKyAgIGFuIGVsZW1lbnQgbWlnaHQgYmUgcmVtb3ZlZCBkdXJpbmcgdGhlIHRyYXZlcnNhbCwgb3RoZXJ3aXNlCisgICBlbGVtZW50cyB3aWxsIGJlIG1pc3NlZC4gIEluc3RlYWQsIHVzZSBhIGZvci1sb29wIGxpa2UgdGhhdCBzaG93bgorICAgaW4gdGhlIGZvbGxvd2luZyBwc2V1ZG8tY29kZToKKworICAgRk9SIChlaSA9IGVpX3N0YXJ0IChiYi0+c3VjY3MpOyAoZSA9IGVpX3NhZmVfZWRnZSAoZWkpKTsgKQorICAgICB7CisJSUYgKGUgIT0gdGFrZW5fZWRnZSkKKwkgIHJlbW92ZV9lZGdlIChlKTsKKwlFTFNFCisJICBlaV9uZXh0ICgmZWkpOworICAgICB9CisqLworCisjZGVmaW5lIEZPUl9FQUNIX0VER0UoRURHRSxJVEVSLEVER0VfVkVDKQlcCisgIGZvciAoKElURVIpID0gZWlfc3RhcnQgKChFREdFX1ZFQykpOwkJXAorICAgICAgIGVpX2NvbmQgKChJVEVSKSwgJihFREdFKSk7CQlcCisgICAgICAgZWlfbmV4dCAoJihJVEVSKSkpCisKK3N0cnVjdCBlZGdlX2xpc3QgKiBjcmVhdGVfZWRnZV9saXN0ICh2b2lkKTsKK3ZvaWQgZnJlZV9lZGdlX2xpc3QgKHN0cnVjdCBlZGdlX2xpc3QgKik7Cit2b2lkIHByaW50X2VkZ2VfbGlzdCAoRklMRSAqLCBzdHJ1Y3QgZWRnZV9saXN0ICopOwordm9pZCB2ZXJpZnlfZWRnZV9saXN0IChGSUxFICosIHN0cnVjdCBlZGdlX2xpc3QgKik7CitpbnQgZmluZF9lZGdlX2luZGV4IChzdHJ1Y3QgZWRnZV9saXN0ICosIGJhc2ljX2Jsb2NrLCBiYXNpY19ibG9jayk7CitlZGdlIGZpbmRfZWRnZSAoYmFzaWNfYmxvY2ssIGJhc2ljX2Jsb2NrKTsKKworI2RlZmluZSBDTEVBTlVQX0VYUEVOU0lWRQkxCS8qIERvIHJlbGF0aXZlbHkgZXhwZW5zaXZlIG9wdGltaXphdGlvbnMKKwkJCQkJICAgZXhjZXB0IGZvciBlZGdlIGZvcndhcmRpbmcgKi8KKyNkZWZpbmUgQ0xFQU5VUF9DUk9TU0pVTVAJMgkvKiBEbyBjcm9zc2p1bXBpbmcuICAqLworI2RlZmluZSBDTEVBTlVQX1BPU1RfUkVHU1RBQ0sJNAkvKiBXZSBydW4gYWZ0ZXIgcmVnLXN0YWNrIGFuZCBuZWVkCisJCQkJCSAgIHRvIGNhcmUgUkVHX0RFQUQgbm90ZXMuICAqLworI2RlZmluZSBDTEVBTlVQX1RIUkVBRElORwk4CS8qIERvIGp1bXAgdGhyZWFkaW5nLiAgKi8KKyNkZWZpbmUgQ0xFQU5VUF9OT19JTlNOX0RFTAkxNgkvKiBEbyBub3QgdHJ5IHRvIGRlbGV0ZSB0cml2aWFsbHkgZGVhZAorCQkJCQkgICBpbnNucy4gICovCisjZGVmaW5lIENMRUFOVVBfQ0ZHTEFZT1VUCTMyCS8qIERvIGNsZWFudXAgaW4gY2ZnbGF5b3V0IG1vZGUuICAqLworCisvKiBJbiBsY20uYyAqLworZXh0ZXJuIHN0cnVjdCBlZGdlX2xpc3QgKnByZV9lZGdlX2xjbSAoaW50LCBzYml0bWFwICosIHNiaXRtYXAgKiwKKwkJCQkgICAgICAgc2JpdG1hcCAqLCBzYml0bWFwICosIHNiaXRtYXAgKiosCisJCQkJICAgICAgIHNiaXRtYXAgKiopOworZXh0ZXJuIHN0cnVjdCBlZGdlX2xpc3QgKnByZV9lZGdlX3Jldl9sY20gKGludCwgc2JpdG1hcCAqLAorCQkJCQkgICBzYml0bWFwICosIHNiaXRtYXAgKiwKKwkJCQkJICAgc2JpdG1hcCAqLCBzYml0bWFwICoqLAorCQkJCQkgICBzYml0bWFwICoqKTsKK2V4dGVybiB2b2lkIGNvbXB1dGVfYXZhaWxhYmxlIChzYml0bWFwICosIHNiaXRtYXAgKiwgc2JpdG1hcCAqLCBzYml0bWFwICopOworCisvKiBJbiBwcmVkaWN0LmMgKi8KK2V4dGVybiBib29sIG1heWJlX2hvdF9iYl9wIChjb25zdF9iYXNpY19ibG9jayk7CitleHRlcm4gYm9vbCBtYXliZV9ob3RfZWRnZV9wIChlZGdlKTsKK2V4dGVybiBib29sIHByb2JhYmx5X25ldmVyX2V4ZWN1dGVkX2JiX3AgKGNvbnN0X2Jhc2ljX2Jsb2NrKTsKK2V4dGVybiBib29sIG9wdGltaXplX2JiX2Zvcl9zaXplX3AgKGNvbnN0X2Jhc2ljX2Jsb2NrKTsKK2V4dGVybiBib29sIG9wdGltaXplX2JiX2Zvcl9zcGVlZF9wIChjb25zdF9iYXNpY19ibG9jayk7CitleHRlcm4gYm9vbCBvcHRpbWl6ZV9lZGdlX2Zvcl9zaXplX3AgKGVkZ2UpOworZXh0ZXJuIGJvb2wgb3B0aW1pemVfZWRnZV9mb3Jfc3BlZWRfcCAoZWRnZSk7CitleHRlcm4gYm9vbCBvcHRpbWl6ZV9mdW5jdGlvbl9mb3Jfc2l6ZV9wIChzdHJ1Y3QgZnVuY3Rpb24gKik7CitleHRlcm4gYm9vbCBvcHRpbWl6ZV9mdW5jdGlvbl9mb3Jfc3BlZWRfcCAoc3RydWN0IGZ1bmN0aW9uICopOworZXh0ZXJuIGJvb2wgb3B0aW1pemVfbG9vcF9mb3Jfc2l6ZV9wIChzdHJ1Y3QgbG9vcCAqKTsKK2V4dGVybiBib29sIG9wdGltaXplX2xvb3BfZm9yX3NwZWVkX3AgKHN0cnVjdCBsb29wICopOworZXh0ZXJuIGJvb2wgb3B0aW1pemVfbG9vcF9uZXN0X2Zvcl9zaXplX3AgKHN0cnVjdCBsb29wICopOworZXh0ZXJuIGJvb2wgb3B0aW1pemVfbG9vcF9uZXN0X2Zvcl9zcGVlZF9wIChzdHJ1Y3QgbG9vcCAqKTsKK2V4dGVybiBib29sIGdpbXBsZV9wcmVkaWN0ZWRfYnlfcCAoY29uc3RfYmFzaWNfYmxvY2ssIGVudW0gYnJfcHJlZGljdG9yKTsKK2V4dGVybiBib29sIHJ0bF9wcmVkaWN0ZWRfYnlfcCAoY29uc3RfYmFzaWNfYmxvY2ssIGVudW0gYnJfcHJlZGljdG9yKTsKK2V4dGVybiB2b2lkIGdpbXBsZV9wcmVkaWN0X2VkZ2UgKGVkZ2UsIGVudW0gYnJfcHJlZGljdG9yLCBpbnQpOworZXh0ZXJuIHZvaWQgcnRsX3ByZWRpY3RfZWRnZSAoZWRnZSwgZW51bSBicl9wcmVkaWN0b3IsIGludCk7CitleHRlcm4gdm9pZCBwcmVkaWN0X2VkZ2VfZGVmIChlZGdlLCBlbnVtIGJyX3ByZWRpY3RvciwgZW51bSBwcmVkaWN0aW9uKTsKK2V4dGVybiB2b2lkIGd1ZXNzX291dGdvaW5nX2VkZ2VfcHJvYmFiaWxpdGllcyAoYmFzaWNfYmxvY2spOworZXh0ZXJuIHZvaWQgcmVtb3ZlX3ByZWRpY3Rpb25zX2Fzc29jaWF0ZWRfd2l0aF9lZGdlIChlZGdlKTsKK2V4dGVybiBib29sIGVkZ2VfcHJvYmFiaWxpdHlfcmVsaWFibGVfcCAoY29uc3RfZWRnZSk7CitleHRlcm4gYm9vbCBicl9wcm9iX25vdGVfcmVsaWFibGVfcCAoY29uc3RfcnR4KTsKK2V4dGVybiBib29sIHByZWRpY3RhYmxlX2VkZ2VfcCAoZWRnZSk7CisKKy8qIEluIGNmZy5jICAqLworZXh0ZXJuIHZvaWQgaW5pdF9mbG93IChzdHJ1Y3QgZnVuY3Rpb24gKik7CitleHRlcm4gdm9pZCBkZWJ1Z19iYiAoYmFzaWNfYmxvY2spOworZXh0ZXJuIGJhc2ljX2Jsb2NrIGRlYnVnX2JiX24gKGludCk7CitleHRlcm4gdm9pZCBkdW1wX3JlZ3NldCAocmVnc2V0LCBGSUxFICopOworZXh0ZXJuIHZvaWQgZGVidWdfcmVnc2V0IChyZWdzZXQpOworZXh0ZXJuIHZvaWQgZXhwdW5nZV9ibG9jayAoYmFzaWNfYmxvY2spOworZXh0ZXJuIHZvaWQgbGlua19ibG9jayAoYmFzaWNfYmxvY2ssIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiB2b2lkIHVubGlua19ibG9jayAoYmFzaWNfYmxvY2spOworZXh0ZXJuIHZvaWQgY29tcGFjdF9ibG9ja3MgKHZvaWQpOworZXh0ZXJuIGJhc2ljX2Jsb2NrIGFsbG9jX2Jsb2NrICh2b2lkKTsKK2V4dGVybiB2b2lkIGFsbG9jX2F1eF9mb3JfYmxvY2sgKGJhc2ljX2Jsb2NrLCBpbnQpOworZXh0ZXJuIHZvaWQgYWxsb2NfYXV4X2Zvcl9ibG9ja3MgKGludCk7CitleHRlcm4gdm9pZCBjbGVhcl9hdXhfZm9yX2Jsb2NrcyAodm9pZCk7CitleHRlcm4gdm9pZCBmcmVlX2F1eF9mb3JfYmxvY2tzICh2b2lkKTsKK2V4dGVybiB2b2lkIGFsbG9jX2F1eF9mb3JfZWRnZSAoZWRnZSwgaW50KTsKK2V4dGVybiB2b2lkIGFsbG9jX2F1eF9mb3JfZWRnZXMgKGludCk7CitleHRlcm4gdm9pZCBjbGVhcl9hdXhfZm9yX2VkZ2VzICh2b2lkKTsKK2V4dGVybiB2b2lkIGZyZWVfYXV4X2Zvcl9lZGdlcyAodm9pZCk7CisKKy8qIEluIGNmZ2FuYWwuYyAgKi8KK2V4dGVybiB2b2lkIGZpbmRfdW5yZWFjaGFibGVfYmxvY2tzICh2b2lkKTsKK2V4dGVybiBib29sIGZvcndhcmRlcl9ibG9ja19wIChjb25zdF9iYXNpY19ibG9jayk7CitleHRlcm4gYm9vbCBjYW5fZmFsbHRocnUgKGJhc2ljX2Jsb2NrLCBiYXNpY19ibG9jayk7CitleHRlcm4gYm9vbCBjb3VsZF9mYWxsX3Rocm91Z2ggKGJhc2ljX2Jsb2NrLCBiYXNpY19ibG9jayk7CitleHRlcm4gdm9pZCBmbG93X25vZGVzX3ByaW50IChjb25zdCBjaGFyICosIGNvbnN0X3NiaXRtYXAsIEZJTEUgKik7CitleHRlcm4gdm9pZCBmbG93X2VkZ2VfbGlzdF9wcmludCAoY29uc3QgY2hhciAqLCBjb25zdCBlZGdlICosIGludCwgRklMRSAqKTsKKworLyogSW4gY2ZncnRsLmMgICovCitleHRlcm4gYmFzaWNfYmxvY2sgZm9yY2Vfbm9uZmFsbHRocnUgKGVkZ2UpOworZXh0ZXJuIHJ0eCBibG9ja19sYWJlbCAoYmFzaWNfYmxvY2spOworZXh0ZXJuIGJvb2wgcHVyZ2VfYWxsX2RlYWRfZWRnZXMgKHZvaWQpOworZXh0ZXJuIGJvb2wgcHVyZ2VfZGVhZF9lZGdlcyAoYmFzaWNfYmxvY2spOworCisvKiBJbiBjZmdidWlsZC5jLiAgKi8KK2V4dGVybiB2b2lkIGZpbmRfbWFueV9zdWJfYmFzaWNfYmxvY2tzIChzYml0bWFwKTsKK2V4dGVybiB2b2lkIHJ0bF9tYWtlX2VoX2VkZ2UgKHNiaXRtYXAsIGJhc2ljX2Jsb2NrLCBydHgpOworCisvKiBJbiBjZmdjbGVhbnVwLmMuICAqLworZXh0ZXJuIGJvb2wgY2xlYW51cF9jZmcgKGludCk7CitleHRlcm4gYm9vbCBkZWxldGVfdW5yZWFjaGFibGVfYmxvY2tzICh2b2lkKTsKKworZXh0ZXJuIGJvb2wgbWFya19kZnNfYmFja19lZGdlcyAodm9pZCk7CitleHRlcm4gdm9pZCBzZXRfZWRnZV9jYW5fZmFsbHRocnVfZmxhZyAodm9pZCk7CitleHRlcm4gdm9pZCB1cGRhdGVfYnJfcHJvYl9ub3RlIChiYXNpY19ibG9jayk7CitleHRlcm4gdm9pZCBmaXh1cF9hYm5vcm1hbF9lZGdlcyAodm9pZCk7CitleHRlcm4gYm9vbCBpbnNpZGVfYmFzaWNfYmxvY2tfcCAoY29uc3RfcnR4KTsKK2V4dGVybiBib29sIGNvbnRyb2xfZmxvd19pbnNuX3AgKGNvbnN0X3J0eCk7CitleHRlcm4gcnR4IGdldF9sYXN0X2JiX2luc24gKGJhc2ljX2Jsb2NrKTsKKworLyogSW4gYmItcmVvcmRlci5jICovCitleHRlcm4gdm9pZCByZW9yZGVyX2Jhc2ljX2Jsb2NrcyAodm9pZCk7CisKKy8qIEluIGRvbWluYW5jZS5jICovCisKK2VudW0gY2RpX2RpcmVjdGlvbgoreworICBDRElfRE9NSU5BVE9SUyA9IDEsCisgIENESV9QT1NUX0RPTUlOQVRPUlMgPSAyCit9OworCitleHRlcm4gZW51bSBkb21fc3RhdGUgZG9tX2luZm9fc3RhdGUgKGVudW0gY2RpX2RpcmVjdGlvbik7CitleHRlcm4gdm9pZCBzZXRfZG9tX2luZm9fYXZhaWxhYmlsaXR5IChlbnVtIGNkaV9kaXJlY3Rpb24sIGVudW0gZG9tX3N0YXRlKTsKK2V4dGVybiBib29sIGRvbV9pbmZvX2F2YWlsYWJsZV9wIChlbnVtIGNkaV9kaXJlY3Rpb24pOworZXh0ZXJuIHZvaWQgY2FsY3VsYXRlX2RvbWluYW5jZV9pbmZvIChlbnVtIGNkaV9kaXJlY3Rpb24pOworZXh0ZXJuIHZvaWQgZnJlZV9kb21pbmFuY2VfaW5mbyAoZW51bSBjZGlfZGlyZWN0aW9uKTsKK2V4dGVybiBiYXNpY19ibG9jayBuZWFyZXN0X2NvbW1vbl9kb21pbmF0b3IgKGVudW0gY2RpX2RpcmVjdGlvbiwKKwkJCQkJICAgICBiYXNpY19ibG9jaywgYmFzaWNfYmxvY2spOworZXh0ZXJuIGJhc2ljX2Jsb2NrIG5lYXJlc3RfY29tbW9uX2RvbWluYXRvcl9mb3Jfc2V0IChlbnVtIGNkaV9kaXJlY3Rpb24sCisJCQkJCQkgICAgIGJpdG1hcCk7CitleHRlcm4gdm9pZCBzZXRfaW1tZWRpYXRlX2RvbWluYXRvciAoZW51bSBjZGlfZGlyZWN0aW9uLCBiYXNpY19ibG9jaywKKwkJCQkgICAgIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiBiYXNpY19ibG9jayBnZXRfaW1tZWRpYXRlX2RvbWluYXRvciAoZW51bSBjZGlfZGlyZWN0aW9uLCBiYXNpY19ibG9jayk7CitleHRlcm4gYm9vbCBkb21pbmF0ZWRfYnlfcCAoZW51bSBjZGlfZGlyZWN0aW9uLCBjb25zdF9iYXNpY19ibG9jaywgY29uc3RfYmFzaWNfYmxvY2spOworZXh0ZXJuIFZFQyAoYmFzaWNfYmxvY2ssIGhlYXApICpnZXRfZG9taW5hdGVkX2J5IChlbnVtIGNkaV9kaXJlY3Rpb24sIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiBWRUMgKGJhc2ljX2Jsb2NrLCBoZWFwKSAqZ2V0X2RvbWluYXRlZF9ieV9yZWdpb24gKGVudW0gY2RpX2RpcmVjdGlvbiwKKwkJCQkJCQkgYmFzaWNfYmxvY2sgKiwKKwkJCQkJCQkgdW5zaWduZWQpOworZXh0ZXJuIFZFQyAoYmFzaWNfYmxvY2ssIGhlYXApICpnZXRfYWxsX2RvbWluYXRlZF9ibG9ja3MgKGVudW0gY2RpX2RpcmVjdGlvbiwKKwkJCQkJCQkgIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiB2b2lkIGFkZF90b19kb21pbmFuY2VfaW5mbyAoZW51bSBjZGlfZGlyZWN0aW9uLCBiYXNpY19ibG9jayk7CitleHRlcm4gdm9pZCBkZWxldGVfZnJvbV9kb21pbmFuY2VfaW5mbyAoZW51bSBjZGlfZGlyZWN0aW9uLCBiYXNpY19ibG9jayk7CitiYXNpY19ibG9jayByZWNvbXB1dGVfZG9taW5hdG9yIChlbnVtIGNkaV9kaXJlY3Rpb24sIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiB2b2lkIHJlZGlyZWN0X2ltbWVkaWF0ZV9kb21pbmF0b3JzIChlbnVtIGNkaV9kaXJlY3Rpb24sIGJhc2ljX2Jsb2NrLAorCQkJCQkgICBiYXNpY19ibG9jayk7CitleHRlcm4gdm9pZCBpdGVyYXRlX2ZpeF9kb21pbmF0b3JzIChlbnVtIGNkaV9kaXJlY3Rpb24sCisJCQkJICAgIFZFQyAoYmFzaWNfYmxvY2ssIGhlYXApICosIGJvb2wpOworZXh0ZXJuIHZvaWQgdmVyaWZ5X2RvbWluYXRvcnMgKGVudW0gY2RpX2RpcmVjdGlvbik7CitleHRlcm4gYmFzaWNfYmxvY2sgZmlyc3RfZG9tX3NvbiAoZW51bSBjZGlfZGlyZWN0aW9uLCBiYXNpY19ibG9jayk7CitleHRlcm4gYmFzaWNfYmxvY2sgbmV4dF9kb21fc29uIChlbnVtIGNkaV9kaXJlY3Rpb24sIGJhc2ljX2Jsb2NrKTsKK3Vuc2lnbmVkIGJiX2RvbV9kZnNfaW4gKGVudW0gY2RpX2RpcmVjdGlvbiwgYmFzaWNfYmxvY2spOwordW5zaWduZWQgYmJfZG9tX2Rmc19vdXQgKGVudW0gY2RpX2RpcmVjdGlvbiwgYmFzaWNfYmxvY2spOworCitleHRlcm4gZWRnZSB0cnlfcmVkaXJlY3RfYnlfcmVwbGFjaW5nX2p1bXAgKGVkZ2UsIGJhc2ljX2Jsb2NrLCBib29sKTsKK2V4dGVybiB2b2lkIGJyZWFrX3N1cGVyYmxvY2tzICh2b2lkKTsKK2V4dGVybiB2b2lkIHJlbGlua19ibG9ja19jaGFpbiAoYm9vbCk7CitleHRlcm4gdm9pZCBjaGVja19iYl9wcm9maWxlIChiYXNpY19ibG9jaywgRklMRSAqKTsKK2V4dGVybiB2b2lkIHVwZGF0ZV9iYl9wcm9maWxlX2Zvcl90aHJlYWRpbmcgKGJhc2ljX2Jsb2NrLCBpbnQsIGdjb3ZfdHlwZSwgZWRnZSk7CitleHRlcm4gdm9pZCBpbml0X3J0bF9iYl9pbmZvIChiYXNpY19ibG9jayk7CisKK2V4dGVybiB2b2lkIGluaXRpYWxpemVfb3JpZ2luYWxfY29weV90YWJsZXMgKHZvaWQpOworZXh0ZXJuIHZvaWQgZnJlZV9vcmlnaW5hbF9jb3B5X3RhYmxlcyAodm9pZCk7CitleHRlcm4gdm9pZCBzZXRfYmJfb3JpZ2luYWwgKGJhc2ljX2Jsb2NrLCBiYXNpY19ibG9jayk7CitleHRlcm4gYmFzaWNfYmxvY2sgZ2V0X2JiX29yaWdpbmFsIChiYXNpY19ibG9jayk7CitleHRlcm4gdm9pZCBzZXRfYmJfY29weSAoYmFzaWNfYmxvY2ssIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiBiYXNpY19ibG9jayBnZXRfYmJfY29weSAoYmFzaWNfYmxvY2spOwordm9pZCBzZXRfbG9vcF9jb3B5IChzdHJ1Y3QgbG9vcCAqLCBzdHJ1Y3QgbG9vcCAqKTsKK3N0cnVjdCBsb29wICpnZXRfbG9vcF9jb3B5IChzdHJ1Y3QgbG9vcCAqKTsKKworCitleHRlcm4gcnR4IGluc2VydF9pbnNuX2VuZF9iYl9uZXcgKHJ0eCwgYmFzaWNfYmxvY2spOworCisjaW5jbHVkZSAiY2ZnaG9va3MuaCIKKworLyogUmV0dXJuIHRydWUgd2hlbiBvbmUgb2YgdGhlIHByZWRlY2Vzc29yIGVkZ2VzIG9mIEJCIGlzIG1hcmtlZCB3aXRoIEVER0VfRUguICAqLworc3RhdGljIGlubGluZSBib29sCitiYl9oYXNfZWhfcHJlZCAoYmFzaWNfYmxvY2sgYmIpCit7CisgIGVkZ2UgZTsKKyAgZWRnZV9pdGVyYXRvciBlaTsKKworICBGT1JfRUFDSF9FREdFIChlLCBlaSwgYmItPnByZWRzKQorICAgIHsKKyAgICAgIGlmIChlLT5mbGFncyAmIEVER0VfRUgpCisJcmV0dXJuIHRydWU7CisgICAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKKy8qIFJldHVybiB0cnVlIHdoZW4gb25lIG9mIHRoZSBwcmVkZWNlc3NvciBlZGdlcyBvZiBCQiBpcyBtYXJrZWQgd2l0aCBFREdFX0FCTk9STUFMLiAgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorYmJfaGFzX2Fibm9ybWFsX3ByZWQgKGJhc2ljX2Jsb2NrIGJiKQoreworICBlZGdlIGU7CisgIGVkZ2VfaXRlcmF0b3IgZWk7CisKKyAgRk9SX0VBQ0hfRURHRSAoZSwgZWksIGJiLT5wcmVkcykKKyAgICB7CisgICAgICBpZiAoZS0+ZmxhZ3MgJiBFREdFX0FCTk9STUFMKQorCXJldHVybiB0cnVlOworICAgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCisvKiBJbiBjZmdsb29wbWFuaXAuYy4gICovCitleHRlcm4gZWRnZSBtZmJfa2pfZWRnZTsKK2V4dGVybiBib29sIG1mYl9rZWVwX2p1c3QgKGVkZ2UpOworCisvKiBJbiBjZmdleHBhbmQuYy4gICovCitleHRlcm4gdm9pZCBydGxfcHJvZmlsZV9mb3JfYmIgKGJhc2ljX2Jsb2NrKTsKK2V4dGVybiB2b2lkIHJ0bF9wcm9maWxlX2Zvcl9lZGdlIChlZGdlKTsKK2V4dGVybiB2b2lkIGRlZmF1bHRfcnRsX3Byb2ZpbGUgKHZvaWQpOworCisjZW5kaWYgLyogR0NDX0JBU0lDX0JMT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9iaXRtYXAuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9iaXRtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmMwZTIwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2JpdG1hcC5oCkBAIC0wLDAgKzEsNTg4IEBACisvKiBGdW5jdGlvbnMgdG8gc3VwcG9ydCBnZW5lcmFsIGVuZGVkIGJpdG1hcHMuCisgICBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsCisgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfQklUTUFQX0gKKyNkZWZpbmUgR0NDX0JJVE1BUF9ICisjaW5jbHVkZSAiaGFzaHRhYi5oIgorI2luY2x1ZGUgInN0YXRpc3RpY3MuaCIKKyNpbmNsdWRlICJvYnN0YWNrLmgiCisKKy8qIEZ1bmRhbWVudGFsIHN0b3JhZ2UgdHlwZSBmb3IgYml0bWFwLiAgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIEJJVE1BUF9XT1JEOworLyogQklUTUFQX1dPUkRfQklUUyBuZWVkcyB0byBiZSB1bnNpZ25lZCwgYnV0IGNhbm5vdCBjb250YWluIGNhc3RzIGFzCisgICBpdCBpcyB1c2VkIGluIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIC0tIGhlbmNlIHRoZSAxdS4gICovCisjZGVmaW5lIEJJVE1BUF9XT1JEX0JJVFMgKENIQVJfQklUICogU0laRU9GX0xPTkcgKiAxdSkKKworLyogTnVtYmVyIG9mIHdvcmRzIHRvIHVzZSBmb3IgZWFjaCBlbGVtZW50IGluIHRoZSBsaW5rZWQgbGlzdC4gICovCisKKyNpZm5kZWYgQklUTUFQX0VMRU1FTlRfV09SRFMKKyNkZWZpbmUgQklUTUFQX0VMRU1FTlRfV09SRFMgKCgxMjggKyBCSVRNQVBfV09SRF9CSVRTIC0gMSkgLyBCSVRNQVBfV09SRF9CSVRTKQorI2VuZGlmCisKKy8qIE51bWJlciBvZiBiaXRzIGluIGVhY2ggYWN0dWFsIGVsZW1lbnQgb2YgYSBiaXRtYXAuICAqLworCisjZGVmaW5lIEJJVE1BUF9FTEVNRU5UX0FMTF9CSVRTIChCSVRNQVBfRUxFTUVOVF9XT1JEUyAqIEJJVE1BUF9XT1JEX0JJVFMpCisKKy8qIE9ic3RhY2sgZm9yIGFsbG9jYXRpbmcgYml0bWFwcyBhbmQgZWxlbWVudHMgZnJvbS4gICovCit0eXBlZGVmIHN0cnVjdCBHVFkgKCgpKSBiaXRtYXBfb2JzdGFjayB7CisgIHN0cnVjdCBiaXRtYXBfZWxlbWVudF9kZWYgKmVsZW1lbnRzOworICBzdHJ1Y3QgYml0bWFwX2hlYWRfZGVmICpoZWFkczsKKyAgc3RydWN0IG9ic3RhY2sgR1RZICgoc2tpcCkpIG9ic3RhY2s7Cit9IGJpdG1hcF9vYnN0YWNrOworCisvKiBCaXRtYXAgc2V0IGVsZW1lbnQuICBXZSB1c2UgYSBsaW5rZWQgbGlzdCB0byBob2xkIG9ubHkgdGhlIGJpdHMgdGhhdAorICAgYXJlIHNldC4gIFRoaXMgYWxsb3dzIGZvciB1c2UgdG8gZ3JvdyB0aGUgYml0c2V0IGR5bmFtaWNhbGx5IHdpdGhvdXQKKyAgIGhhdmluZyB0byByZWFsbG9jIGFuZCBjb3B5IGEgZ2lhbnQgYml0IGFycmF5LgorCisgICBUaGUgZnJlZSBsaXN0IGlzIGltcGxlbWVudGVkIGFzIGEgbGlzdCBvZiBsaXN0cy4gIFRoZXJlIGlzIG9uZQorICAgb3V0ZXIgbGlzdCBjb25uZWN0ZWQgdG9nZXRoZXIgYnkgcHJldiBmaWVsZHMuICBFYWNoIGVsZW1lbnQgb2YgdGhhdAorICAgb3V0ZXIgaXMgYW4gaW5uZXIgbGlzdCAodGhhdCBtYXkgY29uc2lzdCBvbmx5IG9mIHRoZSBvdXRlciBsaXN0CisgICBlbGVtZW50KSB0aGF0IGFyZSBjb25uZWN0ZWQgYnkgdGhlIG5leHQgZmllbGRzLiAgVGhlIHByZXYgcG9pbnRlcgorICAgaXMgdW5kZWZpbmVkIGZvciBpbnRlcmlvciBlbGVtZW50cy4gIFRoaXMgYWxsb3dzCisgICBiaXRtYXBfZWx0X2NsZWFyX2Zyb20gdG8gYmUgaW1wbGVtZW50ZWQgaW4gdW5pdCB0aW1lIHJhdGhlciB0aGFuCisgICBsaW5lYXIgaW4gdGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBiZSBmcmVlZC4gICovCisKK3R5cGVkZWYgc3RydWN0IEdUWSgoKSkgYml0bWFwX2VsZW1lbnRfZGVmIHsKKyAgc3RydWN0IGJpdG1hcF9lbGVtZW50X2RlZiAqbmV4dDsJCS8qIE5leHQgZWxlbWVudC4gICovCisgIHN0cnVjdCBiaXRtYXBfZWxlbWVudF9kZWYgKnByZXY7CQkvKiBQcmV2aW91cyBlbGVtZW50LiAgKi8KKyAgdW5zaWduZWQgaW50IGluZHg7CQkJLyogcmVnbm8vQklUTUFQX0VMRU1FTlRfQUxMX0JJVFMuICAqLworICBCSVRNQVBfV09SRCBiaXRzW0JJVE1BUF9FTEVNRU5UX1dPUkRTXTsgLyogQml0cyB0aGF0IGFyZSBzZXQuICAqLworfSBiaXRtYXBfZWxlbWVudDsKKworc3RydWN0IGJpdG1hcF9kZXNjcmlwdG9yOworLyogSGVhZCBvZiBiaXRtYXAgbGlua2VkIGxpc3QuICBnZW5ndHlwZSBpZ25vcmVzIGlmZGVmcywgYnV0IGZvcgorICAgc3RhdGlzdGljcyB3ZSBuZWVkIHRvIGFkZCBhIGJpdG1hcCBkZXNjcmlwdG9yIHBvaW50ZXIuICBBcyBpdCBpcworICAgbm90IGNvbGxlY3RlZCwgd2UgY2FuIGp1c3QgR1RZKChza2lwKSkgaXQuICAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgR1RZKCgpKSBiaXRtYXBfaGVhZF9kZWYgeworICBiaXRtYXBfZWxlbWVudCAqZmlyc3Q7CS8qIEZpcnN0IGVsZW1lbnQgaW4gbGlua2VkIGxpc3QuICAqLworICBiaXRtYXBfZWxlbWVudCAqY3VycmVudDsJLyogTGFzdCBlbGVtZW50IGxvb2tlZCBhdC4gICovCisgIHVuc2lnbmVkIGludCBpbmR4OwkJLyogSW5kZXggb2YgbGFzdCBlbGVtZW50IGxvb2tlZCBhdC4gICovCisgIGJpdG1hcF9vYnN0YWNrICpvYnN0YWNrOwkvKiBPYnN0YWNrIHRvIGFsbG9jYXRlIGVsZW1lbnRzIGZyb20uCisJCQkJICAgSWYgTlVMTCwgdGhlbiB1c2UgZ2djX2FsbG9jLiAgKi8KKyNpZmRlZiBHQVRIRVJfU1RBVElTVElDUworICBzdHJ1Y3QgYml0bWFwX2Rlc2NyaXB0b3IgR1RZKChza2lwKSkgKmRlc2M7CisjZW5kaWYKK30gYml0bWFwX2hlYWQ7CisKKy8qIEdsb2JhbCBkYXRhICovCitleHRlcm4gYml0bWFwX2VsZW1lbnQgYml0bWFwX3plcm9fYml0czsJLyogWmVybyBiaXRtYXAgZWxlbWVudCAqLworZXh0ZXJuIGJpdG1hcF9vYnN0YWNrIGJpdG1hcF9kZWZhdWx0X29ic3RhY2s7ICAgLyogRGVmYXVsdCBiaXRtYXAgb2JzdGFjayAqLworCisvKiBDbGVhciBhIGJpdG1hcCBieSBmcmVlaW5nIHVwIHRoZSBsaW5rZWQgbGlzdC4gICovCitleHRlcm4gdm9pZCBiaXRtYXBfY2xlYXIgKGJpdG1hcCk7CisKKy8qIENvcHkgYSBiaXRtYXAgdG8gYW5vdGhlciBiaXRtYXAuICAqLworZXh0ZXJuIHZvaWQgYml0bWFwX2NvcHkgKGJpdG1hcCwgY29uc3RfYml0bWFwKTsKKworLyogVHJ1ZSBpZiB0d28gYml0bWFwcyBhcmUgaWRlbnRpY2FsLiAgKi8KK2V4dGVybiBib29sIGJpdG1hcF9lcXVhbF9wIChjb25zdF9iaXRtYXAsIGNvbnN0X2JpdG1hcCk7CisKKy8qIFRydWUgaWYgdGhlIGJpdG1hcHMgaW50ZXJzZWN0ICh0aGVpciBBTkQgaXMgbm9uLWVtcHR5KS4gICovCitleHRlcm4gYm9vbCBiaXRtYXBfaW50ZXJzZWN0X3AgKGNvbnN0X2JpdG1hcCwgY29uc3RfYml0bWFwKTsKKworLyogVHJ1ZSBpZiB0aGUgY29tcGxlbWVudCBvZiB0aGUgc2Vjb25kIGludGVyc2VjdHMgdGhlIGZpcnN0ICh0aGVpcgorICAgQU5EX0NPTVBMIGlzIG5vbi1lbXB0eSkuICAqLworZXh0ZXJuIGJvb2wgYml0bWFwX2ludGVyc2VjdF9jb21wbF9wIChjb25zdF9iaXRtYXAsIGNvbnN0X2JpdG1hcCk7CisKKy8qIFRydWUgaWYgTUFQIGlzIGFuIGVtcHR5IGJpdG1hcC4gICovCisjZGVmaW5lIGJpdG1hcF9lbXB0eV9wKE1BUCkgKCEoTUFQKS0+Zmlyc3QpCisKKy8qIFRydWUgaWYgdGhlIGJpdG1hcCBoYXMgb25seSBhIHNpbmdsZSBiaXQgc2V0LiAgKi8KK2V4dGVybiBib29sIGJpdG1hcF9zaW5nbGVfYml0X3NldF9wIChjb25zdF9iaXRtYXApOworCisvKiBDb3VudCB0aGUgbnVtYmVyIG9mIGJpdHMgc2V0IGluIHRoZSBiaXRtYXAuICAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYml0bWFwX2NvdW50X2JpdHMgKGNvbnN0X2JpdG1hcCk7CisKKy8qIEJvb2xlYW4gb3BlcmF0aW9ucyBvbiBiaXRtYXBzLiAgVGhlIF9pbnRvIHZhcmlhbnRzIGFyZSB0d28gb3BlcmFuZAorICAgdmVyc2lvbnMgdGhhdCBtb2RpZnkgdGhlIGZpcnN0IHNvdXJjZSBvcGVyYW5kLiAgVGhlIG90aGVyIHZhcmlhbnRzCisgICBhcmUgdGhyZWUgb3BlcmFuZCB2ZXJzaW9ucyB0aGF0IHRvIG5vdCBkZXN0cm95IHRoZSBzb3VyY2UgYml0bWFwcy4KKyAgIFRoZSBvcGVyYXRpb25zIHN1cHBvcnRlZCBhcmUgJiwgJiB+LCB8LCBeLiAgKi8KK2V4dGVybiB2b2lkIGJpdG1hcF9hbmQgKGJpdG1hcCwgY29uc3RfYml0bWFwLCBjb25zdF9iaXRtYXApOworZXh0ZXJuIHZvaWQgYml0bWFwX2FuZF9pbnRvIChiaXRtYXAsIGNvbnN0X2JpdG1hcCk7CitleHRlcm4gYm9vbCBiaXRtYXBfYW5kX2NvbXBsIChiaXRtYXAsIGNvbnN0X2JpdG1hcCwgY29uc3RfYml0bWFwKTsKK2V4dGVybiBib29sIGJpdG1hcF9hbmRfY29tcGxfaW50byAoYml0bWFwLCBjb25zdF9iaXRtYXApOworI2RlZmluZSBiaXRtYXBfY29tcGxfYW5kKERTVCwgQSwgQikgYml0bWFwX2FuZF9jb21wbCAoRFNULCBCLCBBKQorZXh0ZXJuIHZvaWQgYml0bWFwX2NvbXBsX2FuZF9pbnRvIChiaXRtYXAsIGNvbnN0X2JpdG1hcCk7CitleHRlcm4gdm9pZCBiaXRtYXBfY2xlYXJfcmFuZ2UgKGJpdG1hcCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgYml0bWFwX3NldF9yYW5nZSAoYml0bWFwLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CitleHRlcm4gYm9vbCBiaXRtYXBfaW9yIChiaXRtYXAsIGNvbnN0X2JpdG1hcCwgY29uc3RfYml0bWFwKTsKK2V4dGVybiBib29sIGJpdG1hcF9pb3JfaW50byAoYml0bWFwLCBjb25zdF9iaXRtYXApOworZXh0ZXJuIHZvaWQgYml0bWFwX3hvciAoYml0bWFwLCBjb25zdF9iaXRtYXAsIGNvbnN0X2JpdG1hcCk7CitleHRlcm4gdm9pZCBiaXRtYXBfeG9yX2ludG8gKGJpdG1hcCwgY29uc3RfYml0bWFwKTsKKworLyogRFNUID0gQSB8IChCICYgQykuICBSZXR1cm4gdHJ1ZSBpZiBEU1QgY2hhbmdlcy4gICovCitleHRlcm4gYm9vbCBiaXRtYXBfaW9yX2FuZF9pbnRvIChiaXRtYXAgRFNULCBjb25zdF9iaXRtYXAgQiwgY29uc3RfYml0bWFwIEMpOworLyogRFNUID0gQSB8IChCICYgfkMpLiAgUmV0dXJuIHRydWUgaWYgRFNUIGNoYW5nZXMuICAqLworZXh0ZXJuIGJvb2wgYml0bWFwX2lvcl9hbmRfY29tcGwgKGJpdG1hcCBEU1QsIGNvbnN0X2JpdG1hcCBBLCBjb25zdF9iaXRtYXAgQiwgY29uc3RfYml0bWFwIEMpOworLyogQSB8PSAoQiAmIH5DKS4gIFJldHVybiB0cnVlIGlmIEEgY2hhbmdlcy4gICovCitleHRlcm4gYm9vbCBiaXRtYXBfaW9yX2FuZF9jb21wbF9pbnRvIChiaXRtYXAgRFNULCBjb25zdF9iaXRtYXAgQiwgY29uc3RfYml0bWFwIEMpOworCisvKiBDbGVhciBhIHNpbmdsZSBiaXQgaW4gYSBiaXRtYXAuICBSZXR1cm4gdHJ1ZSBpZiB0aGUgYml0IGNoYW5nZWQuICAqLworZXh0ZXJuIGJvb2wgYml0bWFwX2NsZWFyX2JpdCAoYml0bWFwLCBpbnQpOworCisvKiBTZXQgYSBzaW5nbGUgYml0IGluIGEgYml0bWFwLiAgUmV0dXJuIHRydWUgaWYgdGhlIGJpdCBjaGFuZ2VkLiAgKi8KK2V4dGVybiBib29sIGJpdG1hcF9zZXRfYml0IChiaXRtYXAsIGludCk7CisKKy8qIFJldHVybiB0cnVlIGlmIGEgcmVnaXN0ZXIgaXMgc2V0IGluIGEgcmVnaXN0ZXIgc2V0LiAgKi8KK2V4dGVybiBpbnQgYml0bWFwX2JpdF9wIChiaXRtYXAsIGludCk7CisKKy8qIERlYnVnIGZ1bmN0aW9ucyB0byBwcmludCBhIGJpdG1hcCBsaW5rZWQgbGlzdC4gICovCitleHRlcm4gdm9pZCBkZWJ1Z19iaXRtYXAgKGNvbnN0X2JpdG1hcCk7CitleHRlcm4gdm9pZCBkZWJ1Z19iaXRtYXBfZmlsZSAoRklMRSAqLCBjb25zdF9iaXRtYXApOworCisvKiBQcmludCBhIGJpdG1hcC4gICovCitleHRlcm4gdm9pZCBiaXRtYXBfcHJpbnQgKEZJTEUgKiwgY29uc3RfYml0bWFwLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKKy8qIEluaXRpYWxpemUgYW5kIHJlbGVhc2UgYSBiaXRtYXAgb2JzdGFjay4gICovCitleHRlcm4gdm9pZCBiaXRtYXBfb2JzdGFja19pbml0aWFsaXplIChiaXRtYXBfb2JzdGFjayAqKTsKK2V4dGVybiB2b2lkIGJpdG1hcF9vYnN0YWNrX3JlbGVhc2UgKGJpdG1hcF9vYnN0YWNrICopOworZXh0ZXJuIHZvaWQgYml0bWFwX3JlZ2lzdGVyIChiaXRtYXAgTUVNX1NUQVRfREVDTCk7CitleHRlcm4gdm9pZCBkdW1wX2JpdG1hcF9zdGF0aXN0aWNzICh2b2lkKTsKKworLyogSW5pdGlhbGl6ZSBhIGJpdG1hcCBoZWFkZXIuICBPQlNUQUNLIGluZGljYXRlcyB0aGUgYml0bWFwIG9ic3RhY2sKKyAgIHRvIGFsbG9jYXRlIGZyb20sIE5VTEwgZm9yIEdDJ2QgYml0bWFwLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitiaXRtYXBfaW5pdGlhbGl6ZV9zdGF0IChiaXRtYXAgaGVhZCwgYml0bWFwX29ic3RhY2sgKm9ic3RhY2sgTUVNX1NUQVRfREVDTCkKK3sKKyAgaGVhZC0+Zmlyc3QgPSBoZWFkLT5jdXJyZW50ID0gTlVMTDsKKyAgaGVhZC0+b2JzdGFjayA9IG9ic3RhY2s7CisjaWZkZWYgR0FUSEVSX1NUQVRJU1RJQ1MKKyAgYml0bWFwX3JlZ2lzdGVyIChoZWFkIFBBU1NfTUVNX1NUQVQpOworI2VuZGlmCit9CisjZGVmaW5lIGJpdG1hcF9pbml0aWFsaXplKGgsbykgYml0bWFwX2luaXRpYWxpemVfc3RhdCAoaCxvIE1FTV9TVEFUX0lORk8pCisKKy8qIEFsbG9jYXRlIGFuZCBmcmVlIGJpdG1hcHMgZnJvbSBvYnN0YWNrLCBtYWxsb2MgYW5kIGdjJ2QgbWVtb3J5LiAgKi8KK2V4dGVybiBiaXRtYXAgYml0bWFwX29ic3RhY2tfYWxsb2Nfc3RhdCAoYml0bWFwX29ic3RhY2sgKm9ic3RhY2sgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGJpdG1hcF9vYnN0YWNrX2FsbG9jKHQpIGJpdG1hcF9vYnN0YWNrX2FsbG9jX3N0YXQgKHQgTUVNX1NUQVRfSU5GTykKK2V4dGVybiBiaXRtYXAgYml0bWFwX2djX2FsbG9jX3N0YXQgKEFMT05FX01FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBiaXRtYXBfZ2NfYWxsb2MoKSBiaXRtYXBfZ2NfYWxsb2Nfc3RhdCAoQUxPTkVfTUVNX1NUQVRfSU5GTykKK2V4dGVybiB2b2lkIGJpdG1hcF9vYnN0YWNrX2ZyZWUgKGJpdG1hcCk7CisKKy8qIEEgZmV3IGNvbXBhdGliaWxpdHkvZnVuY3Rpb25zIG1hY3JvcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHNiaXRtYXBzICovCisjZGVmaW5lIGR1bXBfYml0bWFwKGZpbGUsIGJpdG1hcCkgYml0bWFwX3ByaW50IChmaWxlLCBiaXRtYXAsICIiLCAiXG4iKQorI2RlZmluZSBiaXRtYXBfemVybyhhKSBiaXRtYXBfY2xlYXIgKGEpCitleHRlcm4gdW5zaWduZWQgYml0bWFwX2ZpcnN0X3NldF9iaXQgKGNvbnN0X2JpdG1hcCk7CitleHRlcm4gdW5zaWduZWQgYml0bWFwX2xhc3Rfc2V0X2JpdCAoY29uc3RfYml0bWFwKTsKKworLyogQ29tcHV0ZSBiaXRtYXAgaGFzaCAoZm9yIHB1cnBvc2VzIG9mIGhhc2hpbmcgZXRjLikgICovCitleHRlcm4gaGFzaHZhbF90IGJpdG1hcF9oYXNoKGNvbnN0X2JpdG1hcCk7CisKKy8qIEFsbG9jYXRlIGEgYml0bWFwIGZyb20gYSBiaXQgb2JzdGFjay4gICovCisjZGVmaW5lIEJJVE1BUF9BTExPQyhPQlNUQUNLKSBiaXRtYXBfb2JzdGFja19hbGxvYyAoT0JTVEFDSykKKworLyogQWxsb2NhdGUgYSBnYydkIGJpdG1hcC4gICovCisjZGVmaW5lIEJJVE1BUF9HR0NfQUxMT0MoKSBiaXRtYXBfZ2NfYWxsb2MgKCkKKworLyogRG8gYW55IGNsZWFudXAgbmVlZGVkIG9uIGEgYml0bWFwIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIHVzZWQuICAqLworI2RlZmluZSBCSVRNQVBfRlJFRShCSVRNQVApIFwKKyAgICAgICAoKHZvaWQpIChiaXRtYXBfb2JzdGFja19mcmVlICgoYml0bWFwKSBCSVRNQVApLCAoQklUTUFQKSA9IChiaXRtYXApIE5VTEwpKQorCisvKiBJdGVyYXRvciBmb3IgYml0bWFwcy4gICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qIFBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgYml0bWFwIGVsZW1lbnQuICAqLworICBiaXRtYXBfZWxlbWVudCAqZWx0MTsKKworICAvKiBQb2ludGVyIHRvIDJuZCBiaXRtYXAgZWxlbWVudCB3aGVuIHR3byBhcmUgaW52b2x2ZWQuICAqLworICBiaXRtYXBfZWxlbWVudCAqZWx0MjsKKworICAvKiBXb3JkIHdpdGhpbiB0aGUgY3VycmVudCBlbGVtZW50LiAgKi8KKyAgdW5zaWduZWQgd29yZF9ubzsKKworICAvKiBDb250ZW50cyBvZiB0aGUgYWN0dWFsbHkgcHJvY2Vzc2VkIHdvcmQuICBXaGVuIGZpbmRpbmcgbmV4dCBiaXQKKyAgICAgaXQgaXMgc2hpZnRlZCByaWdodCwgc28gdGhhdCB0aGUgYWN0dWFsIGJpdCBpcyBhbHdheXMgdGhlIGxlYXN0CisgICAgIHNpZ25pZmljYW50IGJpdCBvZiBBQ1RVQUwuICAqLworICBCSVRNQVBfV09SRCBiaXRzOworfSBiaXRtYXBfaXRlcmF0b3I7CisKKy8qIEluaXRpYWxpemUgYSBzaW5nbGUgYml0bWFwIGl0ZXJhdG9yLiAgU1RBUlRfQklUIGlzIHRoZSBmaXJzdCBiaXQgdG8KKyAgIGl0ZXJhdGUgZnJvbS4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYm1wX2l0ZXJfc2V0X2luaXQgKGJpdG1hcF9pdGVyYXRvciAqYmksIGNvbnN0X2JpdG1hcCBtYXAsCisJCSAgIHVuc2lnbmVkIHN0YXJ0X2JpdCwgdW5zaWduZWQgKmJpdF9ubykKK3sKKyAgYmktPmVsdDEgPSBtYXAtPmZpcnN0OworICBiaS0+ZWx0MiA9IE5VTEw7CisKKyAgLyogQWR2YW5jZSBlbHQxIHVudGlsIGl0IGlzIG5vdCBiZWZvcmUgdGhlIGJsb2NrIGNvbnRhaW5pbmcgc3RhcnRfYml0LiAgKi8KKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgaWYgKCFiaS0+ZWx0MSkKKwl7CisJICBiaS0+ZWx0MSA9ICZiaXRtYXBfemVyb19iaXRzOworCSAgYnJlYWs7CisJfQorCisgICAgICBpZiAoYmktPmVsdDEtPmluZHggPj0gc3RhcnRfYml0IC8gQklUTUFQX0VMRU1FTlRfQUxMX0JJVFMpCisJYnJlYWs7CisgICAgICBiaS0+ZWx0MSA9IGJpLT5lbHQxLT5uZXh0OworICAgIH0KKworICAvKiBXZSBtaWdodCBoYXZlIGdvbmUgcGFzdCB0aGUgc3RhcnQgYml0LCBzbyByZWluaXRpYWxpemUgaXQuICAqLworICBpZiAoYmktPmVsdDEtPmluZHggIT0gc3RhcnRfYml0IC8gQklUTUFQX0VMRU1FTlRfQUxMX0JJVFMpCisgICAgc3RhcnRfYml0ID0gYmktPmVsdDEtPmluZHggKiBCSVRNQVBfRUxFTUVOVF9BTExfQklUUzsKKworICAvKiBJbml0aWFsaXplIGZvciB3aGF0IGlzIG5vdyBzdGFydF9iaXQuICAqLworICBiaS0+d29yZF9ubyA9IHN0YXJ0X2JpdCAvIEJJVE1BUF9XT1JEX0JJVFMgJSBCSVRNQVBfRUxFTUVOVF9XT1JEUzsKKyAgYmktPmJpdHMgPSBiaS0+ZWx0MS0+Yml0c1tiaS0+d29yZF9ub107CisgIGJpLT5iaXRzID4+PSBzdGFydF9iaXQgJSBCSVRNQVBfV09SRF9CSVRTOworCisgIC8qIElmIHRoaXMgd29yZCBpcyB6ZXJvLCB3ZSBtdXN0IG1ha2Ugc3VyZSB3ZSdyZSBub3QgcG9pbnRpbmcgYXQgdGhlCisgICAgIGZpcnN0IGJpdCwgb3RoZXJ3aXNlIG91ciBpbmNyZW1lbnRpbmcgdG8gdGhlIG5leHQgd29yZCBib3VuZGFyeQorICAgICB3aWxsIGZhaWwuICBJdCB3b24ndCBtYXR0ZXIgaWYgdGhpcyBpbmNyZW1lbnQgbW92ZXMgdXMgaW50byB0aGUKKyAgICAgbmV4dCB3b3JkLiAgKi8KKyAgc3RhcnRfYml0ICs9ICFiaS0+Yml0czsKKworICAqYml0X25vID0gc3RhcnRfYml0OworfQorCisvKiBJbml0aWFsaXplIGFuIGl0ZXJhdG9yIHRvIGl0ZXJhdGUgb3ZlciB0aGUgaW50ZXJzZWN0aW9uIG9mIHR3bworICAgYml0bWFwcy4gIFNUQVJUX0JJVCBpcyB0aGUgYml0IHRvIGNvbW1lbmNlIGZyb20uICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2JtcF9pdGVyX2FuZF9pbml0IChiaXRtYXBfaXRlcmF0b3IgKmJpLCBjb25zdF9iaXRtYXAgbWFwMSwgY29uc3RfYml0bWFwIG1hcDIsCisJCSAgIHVuc2lnbmVkIHN0YXJ0X2JpdCwgdW5zaWduZWQgKmJpdF9ubykKK3sKKyAgYmktPmVsdDEgPSBtYXAxLT5maXJzdDsKKyAgYmktPmVsdDIgPSBtYXAyLT5maXJzdDsKKworICAvKiBBZHZhbmNlIGVsdDEgdW50aWwgaXQgaXMgbm90IGJlZm9yZSB0aGUgYmxvY2sgY29udGFpbmluZworICAgICBzdGFydF9iaXQuICAqLworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBpZiAoIWJpLT5lbHQxKQorCXsKKwkgIGJpLT5lbHQyID0gTlVMTDsKKwkgIGJyZWFrOworCX0KKworICAgICAgaWYgKGJpLT5lbHQxLT5pbmR4ID49IHN0YXJ0X2JpdCAvIEJJVE1BUF9FTEVNRU5UX0FMTF9CSVRTKQorCWJyZWFrOworICAgICAgYmktPmVsdDEgPSBiaS0+ZWx0MS0+bmV4dDsKKyAgICB9CisKKyAgLyogQWR2YW5jZSBlbHQyIHVudGlsIGl0IGlzIG5vdCBiZWZvcmUgZWx0MS4gICovCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGlmICghYmktPmVsdDIpCisJeworCSAgYmktPmVsdDEgPSBiaS0+ZWx0MiA9ICZiaXRtYXBfemVyb19iaXRzOworCSAgYnJlYWs7CisJfQorCisgICAgICBpZiAoYmktPmVsdDItPmluZHggPj0gYmktPmVsdDEtPmluZHgpCisJYnJlYWs7CisgICAgICBiaS0+ZWx0MiA9IGJpLT5lbHQyLT5uZXh0OworICAgIH0KKworICAvKiBJZiB3ZSdyZSBhdCB0aGUgc2FtZSBpbmRleCwgdGhlbiB3ZSBoYXZlIHNvbWUgaW50ZXJzZWN0aW5nIGJpdHMuICAqLworICBpZiAoYmktPmVsdDEtPmluZHggPT0gYmktPmVsdDItPmluZHgpCisgICAgeworICAgICAgLyogV2UgbWlnaHQgaGF2ZSBhZHZhbmNlZCBiZXlvbmQgdGhlIHN0YXJ0X2JpdCwgc28gcmVpbml0aWFsaXplCisJIGZvciB0aGF0LiAgKi8KKyAgICAgIGlmIChiaS0+ZWx0MS0+aW5keCAhPSBzdGFydF9iaXQgLyBCSVRNQVBfRUxFTUVOVF9BTExfQklUUykKKwlzdGFydF9iaXQgPSBiaS0+ZWx0MS0+aW5keCAqIEJJVE1BUF9FTEVNRU5UX0FMTF9CSVRTOworCisgICAgICBiaS0+d29yZF9ubyA9IHN0YXJ0X2JpdCAvIEJJVE1BUF9XT1JEX0JJVFMgJSBCSVRNQVBfRUxFTUVOVF9XT1JEUzsKKyAgICAgIGJpLT5iaXRzID0gYmktPmVsdDEtPmJpdHNbYmktPndvcmRfbm9dICYgYmktPmVsdDItPmJpdHNbYmktPndvcmRfbm9dOworICAgICAgYmktPmJpdHMgPj49IHN0YXJ0X2JpdCAlIEJJVE1BUF9XT1JEX0JJVFM7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogT3RoZXJ3aXNlIHdlIG11c3QgaW1tZWRpYXRlbHkgYWR2YW5jZSBlbHQxLCBzbyBpbml0aWFsaXplIGZvcgorCSB0aGF0LiAgKi8KKyAgICAgIGJpLT53b3JkX25vID0gQklUTUFQX0VMRU1FTlRfV09SRFMgLSAxOworICAgICAgYmktPmJpdHMgPSAwOworICAgIH0KKworICAvKiBJZiB0aGlzIHdvcmQgaXMgemVybywgd2UgbXVzdCBtYWtlIHN1cmUgd2UncmUgbm90IHBvaW50aW5nIGF0IHRoZQorICAgICBmaXJzdCBiaXQsIG90aGVyd2lzZSBvdXIgaW5jcmVtZW50aW5nIHRvIHRoZSBuZXh0IHdvcmQgYm91bmRhcnkKKyAgICAgd2lsbCBmYWlsLiAgSXQgd29uJ3QgbWF0dGVyIGlmIHRoaXMgaW5jcmVtZW50IG1vdmVzIHVzIGludG8gdGhlCisgICAgIG5leHQgd29yZC4gICovCisgIHN0YXJ0X2JpdCArPSAhYmktPmJpdHM7CisKKyAgKmJpdF9ubyA9IHN0YXJ0X2JpdDsKK30KKworLyogSW5pdGlhbGl6ZSBhbiBpdGVyYXRvciB0byBpdGVyYXRlIG92ZXIgdGhlIGJpdHMgaW4gTUFQMSAmIH5NQVAyLgorICAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitibXBfaXRlcl9hbmRfY29tcGxfaW5pdCAoYml0bWFwX2l0ZXJhdG9yICpiaSwgY29uc3RfYml0bWFwIG1hcDEsIGNvbnN0X2JpdG1hcCBtYXAyLAorCQkJIHVuc2lnbmVkIHN0YXJ0X2JpdCwgdW5zaWduZWQgKmJpdF9ubykKK3sKKyAgYmktPmVsdDEgPSBtYXAxLT5maXJzdDsKKyAgYmktPmVsdDIgPSBtYXAyLT5maXJzdDsKKworICAvKiBBZHZhbmNlIGVsdDEgdW50aWwgaXQgaXMgbm90IGJlZm9yZSB0aGUgYmxvY2sgY29udGFpbmluZyBzdGFydF9iaXQuICAqLworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBpZiAoIWJpLT5lbHQxKQorCXsKKwkgIGJpLT5lbHQxID0gJmJpdG1hcF96ZXJvX2JpdHM7CisJICBicmVhazsKKwl9CisKKyAgICAgIGlmIChiaS0+ZWx0MS0+aW5keCA+PSBzdGFydF9iaXQgLyBCSVRNQVBfRUxFTUVOVF9BTExfQklUUykKKwlicmVhazsKKyAgICAgIGJpLT5lbHQxID0gYmktPmVsdDEtPm5leHQ7CisgICAgfQorCisgIC8qIEFkdmFuY2UgZWx0MiB1bnRpbCBpdCBpcyBub3QgYmVmb3JlIGVsdDEuICAqLworICB3aGlsZSAoYmktPmVsdDIgJiYgYmktPmVsdDItPmluZHggPCBiaS0+ZWx0MS0+aW5keCkKKyAgICBiaS0+ZWx0MiA9IGJpLT5lbHQyLT5uZXh0OworCisgIC8qIFdlIG1pZ2h0IGhhdmUgYWR2YW5jZWQgYmV5b25kIHRoZSBzdGFydF9iaXQsIHNvIHJlaW5pdGlhbGl6ZSBmb3IKKyAgICAgdGhhdC4gICovCisgIGlmIChiaS0+ZWx0MS0+aW5keCAhPSBzdGFydF9iaXQgLyBCSVRNQVBfRUxFTUVOVF9BTExfQklUUykKKyAgICBzdGFydF9iaXQgPSBiaS0+ZWx0MS0+aW5keCAqIEJJVE1BUF9FTEVNRU5UX0FMTF9CSVRTOworCisgIGJpLT53b3JkX25vID0gc3RhcnRfYml0IC8gQklUTUFQX1dPUkRfQklUUyAlIEJJVE1BUF9FTEVNRU5UX1dPUkRTOworICBiaS0+Yml0cyA9IGJpLT5lbHQxLT5iaXRzW2JpLT53b3JkX25vXTsKKyAgaWYgKGJpLT5lbHQyICYmIGJpLT5lbHQxLT5pbmR4ID09IGJpLT5lbHQyLT5pbmR4KQorICAgIGJpLT5iaXRzICY9IH5iaS0+ZWx0Mi0+Yml0c1tiaS0+d29yZF9ub107CisgIGJpLT5iaXRzID4+PSBzdGFydF9iaXQgJSBCSVRNQVBfV09SRF9CSVRTOworCisgIC8qIElmIHRoaXMgd29yZCBpcyB6ZXJvLCB3ZSBtdXN0IG1ha2Ugc3VyZSB3ZSdyZSBub3QgcG9pbnRpbmcgYXQgdGhlCisgICAgIGZpcnN0IGJpdCwgb3RoZXJ3aXNlIG91ciBpbmNyZW1lbnRpbmcgdG8gdGhlIG5leHQgd29yZCBib3VuZGFyeQorICAgICB3aWxsIGZhaWwuICBJdCB3b24ndCBtYXR0ZXIgaWYgdGhpcyBpbmNyZW1lbnQgbW92ZXMgdXMgaW50byB0aGUKKyAgICAgbmV4dCB3b3JkLiAgKi8KKyAgc3RhcnRfYml0ICs9ICFiaS0+Yml0czsKKworICAqYml0X25vID0gc3RhcnRfYml0OworfQorCisvKiBBZHZhbmNlIHRvIHRoZSBuZXh0IGJpdCBpbiBCSS4gIFdlIGRvbid0IGFkdmFuY2UgdG8gdGhlIG5leHQKKyAgIG5vbnplcm8gYml0IHlldC4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYm1wX2l0ZXJfbmV4dCAoYml0bWFwX2l0ZXJhdG9yICpiaSwgdW5zaWduZWQgKmJpdF9ubykKK3sKKyAgYmktPmJpdHMgPj49IDE7CisgICpiaXRfbm8gKz0gMTsKK30KKworLyogQWR2YW5jZSB0byB0aGUgbmV4dCBub256ZXJvIGJpdCBvZiBhIHNpbmdsZSBiaXRtYXAsIHdlIHdpbGwgaGF2ZQorICAgYWxyZWFkeSBhZHZhbmNlZCBwYXN0IHRoZSBqdXN0IGl0ZXJhdGVkIGJpdC4gIFJldHVybiB0cnVlIGlmIHRoZXJlCisgICBpcyBhIGJpdCB0byBpdGVyYXRlLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitibXBfaXRlcl9zZXQgKGJpdG1hcF9pdGVyYXRvciAqYmksIHVuc2lnbmVkICpiaXRfbm8pCit7CisgIC8qIElmIG91ciBjdXJyZW50IHdvcmQgaXMgbm9uemVybywgaXQgY29udGFpbnMgdGhlIGJpdCB3ZSB3YW50LiAgKi8KKyAgaWYgKGJpLT5iaXRzKQorICAgIHsKKyAgICBuZXh0X2JpdDoKKyAgICAgIHdoaWxlICghKGJpLT5iaXRzICYgMSkpCisJeworCSAgYmktPmJpdHMgPj49IDE7CisJICAqYml0X25vICs9IDE7CisJfQorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgIC8qIFJvdW5kIHVwIHRvIHRoZSB3b3JkIGJvdW5kYXJ5LiAgV2UgbWlnaHQgaGF2ZSBqdXN0IGl0ZXJhdGVkIHBhc3QKKyAgICAgdGhlIGVuZCBvZiB0aGUgbGFzdCB3b3JkLCBoZW5jZSB0aGUgLTEuICBJdCBpcyBub3QgcG9zc2libGUgZm9yCisgICAgIGJpdF9ubyB0byBwb2ludCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBub3cgbGFzdCB3b3JkLiAgKi8KKyAgKmJpdF9ubyA9ICgoKmJpdF9ubyArIEJJVE1BUF9XT1JEX0JJVFMgLSAxKQorCSAgICAgLyBCSVRNQVBfV09SRF9CSVRTICogQklUTUFQX1dPUkRfQklUUyk7CisgIGJpLT53b3JkX25vKys7CisKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgLyogRmluZCB0aGUgbmV4dCBub256ZXJvIHdvcmQgaW4gdGhpcyBlbHQuICAqLworICAgICAgd2hpbGUgKGJpLT53b3JkX25vICE9IEJJVE1BUF9FTEVNRU5UX1dPUkRTKQorCXsKKwkgIGJpLT5iaXRzID0gYmktPmVsdDEtPmJpdHNbYmktPndvcmRfbm9dOworCSAgaWYgKGJpLT5iaXRzKQorCSAgICBnb3RvIG5leHRfYml0OworCSAgKmJpdF9ubyArPSBCSVRNQVBfV09SRF9CSVRTOworCSAgYmktPndvcmRfbm8rKzsKKwl9CisKKyAgICAgIC8qIEFkdmFuY2UgdG8gdGhlIG5leHQgZWxlbWVudC4gICovCisgICAgICBiaS0+ZWx0MSA9IGJpLT5lbHQxLT5uZXh0OworICAgICAgaWYgKCFiaS0+ZWx0MSkKKwlyZXR1cm4gZmFsc2U7CisgICAgICAqYml0X25vID0gYmktPmVsdDEtPmluZHggKiBCSVRNQVBfRUxFTUVOVF9BTExfQklUUzsKKyAgICAgIGJpLT53b3JkX25vID0gMDsKKyAgICB9Cit9CisKKy8qIEFkdmFuY2UgdG8gdGhlIG5leHQgbm9uemVybyBiaXQgb2YgYW4gaW50ZXJzZWN0aW5nIHBhaXIgb2YKKyAgIGJpdG1hcHMuICBXZSB3aWxsIGhhdmUgYWxyZWFkeSBhZHZhbmNlZCBwYXN0IHRoZSBqdXN0IGl0ZXJhdGVkIGJpdC4KKyAgIFJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGEgYml0IHRvIGl0ZXJhdGUuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2JtcF9pdGVyX2FuZCAoYml0bWFwX2l0ZXJhdG9yICpiaSwgdW5zaWduZWQgKmJpdF9ubykKK3sKKyAgLyogSWYgb3VyIGN1cnJlbnQgd29yZCBpcyBub256ZXJvLCBpdCBjb250YWlucyB0aGUgYml0IHdlIHdhbnQuICAqLworICBpZiAoYmktPmJpdHMpCisgICAgeworICAgIG5leHRfYml0OgorICAgICAgd2hpbGUgKCEoYmktPmJpdHMgJiAxKSkKKwl7CisJICBiaS0+Yml0cyA+Pj0gMTsKKwkgICpiaXRfbm8gKz0gMTsKKwl9CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgLyogUm91bmQgdXAgdG8gdGhlIHdvcmQgYm91bmRhcnkuICBXZSBtaWdodCBoYXZlIGp1c3QgaXRlcmF0ZWQgcGFzdAorICAgICB0aGUgZW5kIG9mIHRoZSBsYXN0IHdvcmQsIGhlbmNlIHRoZSAtMS4gIEl0IGlzIG5vdCBwb3NzaWJsZSBmb3IKKyAgICAgYml0X25vIHRvIHBvaW50IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5vdyBsYXN0IHdvcmQuICAqLworICAqYml0X25vID0gKCgqYml0X25vICsgQklUTUFQX1dPUkRfQklUUyAtIDEpCisJICAgICAvIEJJVE1BUF9XT1JEX0JJVFMgKiBCSVRNQVBfV09SRF9CSVRTKTsKKyAgYmktPndvcmRfbm8rKzsKKworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICAvKiBGaW5kIHRoZSBuZXh0IG5vbnplcm8gd29yZCBpbiB0aGlzIGVsdC4gICovCisgICAgICB3aGlsZSAoYmktPndvcmRfbm8gIT0gQklUTUFQX0VMRU1FTlRfV09SRFMpCisJeworCSAgYmktPmJpdHMgPSBiaS0+ZWx0MS0+Yml0c1tiaS0+d29yZF9ub10gJiBiaS0+ZWx0Mi0+Yml0c1tiaS0+d29yZF9ub107CisJICBpZiAoYmktPmJpdHMpCisJICAgIGdvdG8gbmV4dF9iaXQ7CisJICAqYml0X25vICs9IEJJVE1BUF9XT1JEX0JJVFM7CisJICBiaS0+d29yZF9ubysrOworCX0KKworICAgICAgLyogQWR2YW5jZSB0byB0aGUgbmV4dCBpZGVudGljYWwgZWxlbWVudC4gICovCisgICAgICBkbworCXsKKwkgIC8qIEFkdmFuY2UgZWx0MSB3aGlsZSBpdCBpcyBsZXNzIHRoYW4gZWx0Mi4gIFdlIGFsd2F5cyB3YW50CisJICAgICB0byBhZHZhbmNlIG9uZSBlbHQuICAqLworCSAgZG8KKwkgICAgeworCSAgICAgIGJpLT5lbHQxID0gYmktPmVsdDEtPm5leHQ7CisJICAgICAgaWYgKCFiaS0+ZWx0MSkKKwkJcmV0dXJuIGZhbHNlOworCSAgICB9CisJICB3aGlsZSAoYmktPmVsdDEtPmluZHggPCBiaS0+ZWx0Mi0+aW5keCk7CisKKwkgIC8qIEFkdmFuY2UgZWx0MiB0byBiZSBubyBsZXNzIHRoYW4gZWx0MS4gIFRoaXMgbWlnaHQgbm90CisJICAgICBhZHZhbmNlLiAgKi8KKwkgIHdoaWxlIChiaS0+ZWx0Mi0+aW5keCA8IGJpLT5lbHQxLT5pbmR4KQorCSAgICB7CisJICAgICAgYmktPmVsdDIgPSBiaS0+ZWx0Mi0+bmV4dDsKKwkgICAgICBpZiAoIWJpLT5lbHQyKQorCQlyZXR1cm4gZmFsc2U7CisJICAgIH0KKwl9CisgICAgICB3aGlsZSAoYmktPmVsdDEtPmluZHggIT0gYmktPmVsdDItPmluZHgpOworCisgICAgICAqYml0X25vID0gYmktPmVsdDEtPmluZHggKiBCSVRNQVBfRUxFTUVOVF9BTExfQklUUzsKKyAgICAgIGJpLT53b3JkX25vID0gMDsKKyAgICB9Cit9CisKKy8qIEFkdmFuY2UgdG8gdGhlIG5leHQgbm9uemVybyBiaXQgaW4gdGhlIGludGVyc2VjdGlvbiBvZgorICAgY29tcGxlbWVudGVkIGJpdG1hcHMuICBXZSB3aWxsIGhhdmUgYWxyZWFkeSBhZHZhbmNlZCBwYXN0IHRoZSBqdXN0CisgICBpdGVyYXRlZCBiaXQuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2JtcF9pdGVyX2FuZF9jb21wbCAoYml0bWFwX2l0ZXJhdG9yICpiaSwgdW5zaWduZWQgKmJpdF9ubykKK3sKKyAgLyogSWYgb3VyIGN1cnJlbnQgd29yZCBpcyBub256ZXJvLCBpdCBjb250YWlucyB0aGUgYml0IHdlIHdhbnQuICAqLworICBpZiAoYmktPmJpdHMpCisgICAgeworICAgIG5leHRfYml0OgorICAgICAgd2hpbGUgKCEoYmktPmJpdHMgJiAxKSkKKwl7CisJICBiaS0+Yml0cyA+Pj0gMTsKKwkgICpiaXRfbm8gKz0gMTsKKwl9CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgLyogUm91bmQgdXAgdG8gdGhlIHdvcmQgYm91bmRhcnkuICBXZSBtaWdodCBoYXZlIGp1c3QgaXRlcmF0ZWQgcGFzdAorICAgICB0aGUgZW5kIG9mIHRoZSBsYXN0IHdvcmQsIGhlbmNlIHRoZSAtMS4gIEl0IGlzIG5vdCBwb3NzaWJsZSBmb3IKKyAgICAgYml0X25vIHRvIHBvaW50IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5vdyBsYXN0IHdvcmQuICAqLworICAqYml0X25vID0gKCgqYml0X25vICsgQklUTUFQX1dPUkRfQklUUyAtIDEpCisJICAgICAvIEJJVE1BUF9XT1JEX0JJVFMgKiBCSVRNQVBfV09SRF9CSVRTKTsKKyAgYmktPndvcmRfbm8rKzsKKworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICAvKiBGaW5kIHRoZSBuZXh0IG5vbnplcm8gd29yZCBpbiB0aGlzIGVsdC4gICovCisgICAgICB3aGlsZSAoYmktPndvcmRfbm8gIT0gQklUTUFQX0VMRU1FTlRfV09SRFMpCisJeworCSAgYmktPmJpdHMgPSBiaS0+ZWx0MS0+Yml0c1tiaS0+d29yZF9ub107CisJICBpZiAoYmktPmVsdDIgJiYgYmktPmVsdDItPmluZHggPT0gYmktPmVsdDEtPmluZHgpCisJICAgIGJpLT5iaXRzICY9IH5iaS0+ZWx0Mi0+Yml0c1tiaS0+d29yZF9ub107CisJICBpZiAoYmktPmJpdHMpCisJICAgIGdvdG8gbmV4dF9iaXQ7CisJICAqYml0X25vICs9IEJJVE1BUF9XT1JEX0JJVFM7CisJICBiaS0+d29yZF9ubysrOworCX0KKworICAgICAgLyogQWR2YW5jZSB0byB0aGUgbmV4dCBlbGVtZW50IG9mIGVsdDEuICAqLworICAgICAgYmktPmVsdDEgPSBiaS0+ZWx0MS0+bmV4dDsKKyAgICAgIGlmICghYmktPmVsdDEpCisJcmV0dXJuIGZhbHNlOworCisgICAgICAvKiBBZHZhbmNlIGVsdDIgdW50aWwgaXQgaXMgbm8gbGVzcyB0aGFuIGVsdDEuICAqLworICAgICAgd2hpbGUgKGJpLT5lbHQyICYmIGJpLT5lbHQyLT5pbmR4IDwgYmktPmVsdDEtPmluZHgpCisJYmktPmVsdDIgPSBiaS0+ZWx0Mi0+bmV4dDsKKworICAgICAgKmJpdF9ubyA9IGJpLT5lbHQxLT5pbmR4ICogQklUTUFQX0VMRU1FTlRfQUxMX0JJVFM7CisgICAgICBiaS0+d29yZF9ubyA9IDA7CisgICAgfQorfQorCisvKiBMb29wIG92ZXIgYWxsIGJpdHMgc2V0IGluIEJJVE1BUCwgc3RhcnRpbmcgd2l0aCBNSU4gYW5kIHNldHRpbmcKKyAgIEJJVE5VTSB0byB0aGUgYml0IG51bWJlci4gIElURVIgaXMgYSBiaXRtYXAgaXRlcmF0b3IuICBCSVROVU0KKyAgIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgcmVhZC1vbmx5IHZhcmlhYmxlIGFzIGl0IGNvbnRhaW5zIGxvb3AKKyAgIHN0YXRlLiAgKi8KKworI2RlZmluZSBFWEVDVVRFX0lGX1NFVF9JTl9CSVRNQVAoQklUTUFQLCBNSU4sIEJJVE5VTSwgSVRFUikJCVwKKyAgZm9yIChibXBfaXRlcl9zZXRfaW5pdCAoJihJVEVSKSwgKEJJVE1BUCksIChNSU4pLCAmKEJJVE5VTSkpOwkJXAorICAgICAgIGJtcF9pdGVyX3NldCAoJihJVEVSKSwgJihCSVROVU0pKTsJCQkJXAorICAgICAgIGJtcF9pdGVyX25leHQgKCYoSVRFUiksICYoQklUTlVNKSkpCisKKy8qIExvb3Agb3ZlciBhbGwgdGhlIGJpdHMgc2V0IGluIEJJVE1BUDEgJiBCSVRNQVAyLCBzdGFydGluZyB3aXRoIE1JTgorICAgYW5kIHNldHRpbmcgQklUTlVNIHRvIHRoZSBiaXQgbnVtYmVyLiAgSVRFUiBpcyBhIGJpdG1hcCBpdGVyYXRvci4KKyAgIEJJVE5VTSBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHJlYWQtb25seSB2YXJpYWJsZSBhcyBpdCBjb250YWlucworICAgbG9vcCBzdGF0ZS4gICovCisKKyNkZWZpbmUgRVhFQ1VURV9JRl9BTkRfSU5fQklUTUFQKEJJVE1BUDEsIEJJVE1BUDIsIE1JTiwgQklUTlVNLCBJVEVSKQlcCisgIGZvciAoYm1wX2l0ZXJfYW5kX2luaXQgKCYoSVRFUiksIChCSVRNQVAxKSwgKEJJVE1BUDIpLCAoTUlOKSwJCVwKKwkJCSAgJihCSVROVU0pKTsJCQkJCVwKKyAgICAgICBibXBfaXRlcl9hbmQgKCYoSVRFUiksICYoQklUTlVNKSk7CQkJCVwKKyAgICAgICBibXBfaXRlcl9uZXh0ICgmKElURVIpLCAmKEJJVE5VTSkpKQorCisvKiBMb29wIG92ZXIgYWxsIHRoZSBiaXRzIHNldCBpbiBCSVRNQVAxICYgfkJJVE1BUDIsIHN0YXJ0aW5nIHdpdGggTUlOCisgICBhbmQgc2V0dGluZyBCSVROVU0gdG8gdGhlIGJpdCBudW1iZXIuICBJVEVSIGlzIGEgYml0bWFwIGl0ZXJhdG9yLgorICAgQklUTlVNIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgcmVhZC1vbmx5IHZhcmlhYmxlIGFzIGl0IGNvbnRhaW5zCisgICBsb29wIHN0YXRlLiAgKi8KKworI2RlZmluZSBFWEVDVVRFX0lGX0FORF9DT01QTF9JTl9CSVRNQVAoQklUTUFQMSwgQklUTUFQMiwgTUlOLCBCSVROVU0sIElURVIpIFwKKyAgZm9yIChibXBfaXRlcl9hbmRfY29tcGxfaW5pdCAoJihJVEVSKSwgKEJJVE1BUDEpLCAoQklUTUFQMiksIChNSU4pLAlcCisJCQkJJihCSVROVU0pKTsJCQkJXAorICAgICAgIGJtcF9pdGVyX2FuZF9jb21wbCAoJihJVEVSKSwgJihCSVROVU0pKTsJCQkJXAorICAgICAgIGJtcF9pdGVyX25leHQgKCYoSVRFUiksICYoQklUTlVNKSkpCisKKyNlbmRpZiAvKiBHQ0NfQklUTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9idWlsdGlucy5kZWYgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvYnVpbHRpbnMuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MTc3YTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvYnVpbHRpbnMuZGVmCkBAIC0wLDAgKzEsNzczIEBACisvKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGFuZCBkb2N1bWVudGF0aW9uIGZvciB0aGUKKyAgIGJ1aWx0aW5zIHVzZWQgaW4gdGhlIEdOVSBjb21waWxlci4KKyAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOAorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBCZWZvcmUgaW5jbHVkaW5nIHRoaXMgZmlsZSwgeW91IHNob3VsZCBkZWZpbmUgYSBtYWNybzoKKworICAgICBERUZfQlVJTFRJTiAoRU5VTSwgTkFNRSwgQ0xBU1MsIFRZUEUsIExJQlRZUEUsIEJPVEhfUCwKKyAgICAgICAgICAgICAgICAgIEZBTExCQUNLX1AsIE5PTkFOU0lfUCwgQVRUUlMsIElNUExJQ0lULCBDT05EKQorCisgICBUaGlzIG1hY3JvIHdpbGwgYmUgY2FsbGVkIG9uY2UgZm9yIGVhY2ggYnVpbHRpbiBmdW5jdGlvbi4gIFRoZQorICAgRU5VTSB3aWxsIGJlIG9mIHR5cGUgYGVudW0gYnVpbHRfaW5fZnVuY3Rpb24nLCBhbmQgd2lsbCBpbmRpY2F0ZQorICAgd2hpY2ggYnVpbHRpbiBmdW5jdGlvbiBpcyBiZWluZyBwcm9jZXNzZWQuICBUaGUgTkFNRSBvZiB0aGUgYnVpbHRpbgorICAgZnVuY3Rpb24gKHdoaWNoIHdpbGwgYWx3YXlzIHN0YXJ0IHdpdGggYF9fYnVpbHRpbl8nKSBpcyBhIHN0cmluZworICAgbGl0ZXJhbC4gIFRoZSBDTEFTUyBpcyBvZiB0eXBlIGBlbnVtIGJ1aWx0X2luX2NsYXNzJyBhbmQgaW5kaWNhdGVzCisgICB3aGF0IGtpbmQgb2YgYnVpbHRpbiBpcyBiZWluZyBwcm9jZXNzZWQuCisKKyAgIFNvbWUgYnVpbHRpbnMgYXJlIGFjdHVhbGx5IHR3byBzZXBhcmF0ZSBmdW5jdGlvbnMuICBGb3IgZXhhbXBsZSwKKyAgIGZvciBgc3RyY21wJyB0aGVyZSBhcmUgdHdvIGJ1aWx0aW4gZnVuY3Rpb25zOyBgX19idWlsdGluX3N0cmNtcCcKKyAgIGFuZCBgc3RyY21wJyBpdHNlbGYuICBCb3RoIGJlaGF2ZSBpZGVudGljYWxseS4gIE90aGVyIGJ1aWx0aW5zCisgICBkZWZpbmUgb25seSB0aGUgYF9fYnVpbHRpbicgdmFyaWFudC4gIElmIEJPVEhfUCBpcyBUUlVFLCB0aGVuIHRoaXMKKyAgIGJ1aWx0aW4gaGFzIGJvdGggdmFyaWFudHM7IG90aGVyd2lzZSwgaXQgaXMgaGFzIG9ubHkgdGhlIGZpcnN0CisgICB2YXJpYW50LgorCisgICBUWVBFIGluZGljYXRlcyB0aGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24uICBUaGUgc3ltYm9scyBjb3JyZXNwb25kIHRvCisgICBlbnVtZXJhbHMgZnJvbSBidWlsdGluLXR5cGVzLmRlZi4gIElmIEJPVEhfUCBpcyB0cnVlLCB0aGVuIExJQlRZUEUKKyAgIGlzIHRoZSB0eXBlIG9mIHRoZSBub24tYF9fYnVpbHRpbl8nIHZhcmlhbnQuICBPdGhlcndpc2UsIExJQlRZUEUKKyAgIHNob3VsZCBiZSBpZ25vcmVkLgorCisgICBJZiBGQUxMQkFDS19QIGlzIHRydWUgdGhlbiwgaWYgZm9yIHNvbWUgcmVhc29uLCB0aGUgY29tcGlsZXIgY2Fubm90CisgICBleHBhbmQgdGhlIGJ1aWx0aW4gZnVuY3Rpb24gZGlyZWN0bHksIGl0IHdpbGwgY2FsbCB0aGUKKyAgIGNvcnJlc3BvbmRpbmcgbGlicmFyeSBmdW5jdGlvbiAod2hpY2ggZG9lcyBub3QgaGF2ZSB0aGUKKyAgIGBfX2J1aWx0aW5fJyBwcmVmaXguCisKKyAgIElmIE5PTkFOU0lfUCBpcyB0cnVlLCB0aGVuIHRoZSBub24tYF9fYnVpbHRpbl8nIHZhcmlhbnQgaXMgbm90IGFuCisgICBBTlNJL0lTTyBsaWJyYXJ5IGZ1bmN0aW9uLCBhbmQgc28gd2Ugc2hvdWxkIHByZXRlbmQgaXQgZG9lcyBub3QKKyAgIGV4aXN0IHdoZW4gY29tcGlsaW5nIGluIEFOU0kgY29uZm9ybWFudCBtb2RlLgorCisgICBBVFRScyBpcyBhbiBhdHRyaWJ1dGUgbGlzdCBhcyBkZWZpbmVkIGluIGJ1aWx0aW4tYXR0cnMuZGVmIHRoYXQKKyAgIGRlc2NyaWJlcyB0aGUgYXR0cmlidXRlcyBvZiB0aGlzIGJ1aWx0aW4gZnVuY3Rpb24uCisKKyAgIElNUExJQ0lUIHNwZWNpZmllcyBjb25kaXRpb24gd2hlbiB0aGUgYnVpbHRpbiBjYW4gYmUgcHJvZHVjZWQgYnkKKyAgIGNvbXBpbGVyLiAgRm9yIGluc3RhbmNlIEM5MCByZXNlcnZlcyBmbG9vcmYgZnVuY3Rpb24sIGJ1dCBkb2VzIG5vdAorICAgZGVmaW5lIGl0J3MgbWVhbmluZy4gIFdoZW4gdXNlciB1c2VzIGZsb29yZiB3ZSBtYXkgYXNzdW1lIHRoYXQgdGhlCisgICBmbG9vcmYgaGFzIHRoZSBtZWFuaW5nIHdlIGV4cGVjdCwgYnV0IHdlIGNhbid0IHByb2R1Y2UgZmxvb3JmIGJ5CisgICBzaW1wbGlmeWluZyBmbG9vcigoZG91YmxlKWZsb2F0KSBzaW5jZSB0aGUgcnVudGltZSBuZWVkIG5vdCBpbXBsZW1lbnQKKyAgIGl0LgorCisgICBUaGUgYnVpbHRpbnMgaXMgcmVnaXN0ZXJlZCBvbmx5IGlmIENPTkQgaXMgdHJ1ZS4gICovCisKKy8qIEEgR0NDIGJ1aWx0aW4gKGxpa2UgX19idWlsdGluX3NhdmVyZWdzKSBpcyBwcm92aWRlZCBieSB0aGUKKyAgIGNvbXBpbGVyLCBidXQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIGZ1bmN0aW9uIGluIHRoZSBzdGFuZGFyZAorICAgbGlicmFyeS4gICovCisjdW5kZWYgREVGX0dDQ19CVUlMVElOCisjZGVmaW5lIERFRl9HQ0NfQlVJTFRJTihFTlVNLCBOQU1FLCBUWVBFLCBBVFRSUykJCVwKKyAgREVGX0JVSUxUSU4gKEVOVU0sICJfX2J1aWx0aW5fIiBOQU1FLCBCVUlMVF9JTl9OT1JNQUwsIFRZUEUsIEJUX0xBU1QsCVwKKwkgICAgICAgZmFsc2UsIGZhbHNlLCBmYWxzZSwgQVRUUlMsIHRydWUsIHRydWUpCisKKy8qIExpa2UgREVGX0dDQ19CVUlMVElOLCBleGNlcHQgd2UgZG9uJ3QgcHJlcGVuZCAiX19idWlsdGluXyIuICAqLworI3VuZGVmIERFRl9TWU5DX0JVSUxUSU4KKyNkZWZpbmUgREVGX1NZTkNfQlVJTFRJTihFTlVNLCBOQU1FLCBUWVBFLCBBVFRSUykJCVwKKyAgREVGX0JVSUxUSU4gKEVOVU0sIE5BTUUsIEJVSUxUX0lOX05PUk1BTCwgVFlQRSwgQlRfTEFTVCwJXAorCSAgICAgICBmYWxzZSwgZmFsc2UsIGZhbHNlLCBBVFRSUywgdHJ1ZSwgdHJ1ZSkKKworLyogQSBsaWJyYXJ5IGJ1aWx0aW4gKGxpa2UgX19idWlsdGluX3N0cmNocikgaXMgYSBidWlsdGluIGVxdWl2YWxlbnQKKyAgIG9mIGFuIEFOU0kvSVNPIHN0YW5kYXJkIGxpYnJhcnkgZnVuY3Rpb24uICBJbiBhZGRpdGlvbiB0byB0aGUKKyAgIGBfX2J1aWx0aW4nIHZlcnNpb24sIHdlIHdpbGwgY3JlYXRlIGFuIG9yZGluYXJ5IHZlcnNpb24gKGUuZywKKyAgIGBzdHJjaHInKSBhcyB3ZWxsLiAgSWYgd2UgY2Fubm90IGNvbXB1dGUgdGhlIGFuc3dlciB1c2luZyB0aGUKKyAgIGJ1aWx0aW4gZnVuY3Rpb24sIHdlIHdpbGwgZmFsbCBiYWNrIHRvIHRoZSBzdGFuZGFyZCBsaWJyYXJ5CisgICB2ZXJzaW9uLiAgKi8KKyN1bmRlZiBERUZfTElCX0JVSUxUSU4KKyNkZWZpbmUgREVGX0xJQl9CVUlMVElOKEVOVU0sIE5BTUUsIFRZUEUsIEFUVFJTKQlcCisgIERFRl9CVUlMVElOIChFTlVNLCAiX19idWlsdGluXyIgTkFNRSwgQlVJTFRfSU5fTk9STUFMLCBUWVBFLCBUWVBFLAlcCisJICAgICAgIHRydWUsIHRydWUsIGZhbHNlLCBBVFRSUywgdHJ1ZSwgdHJ1ZSkKKworLyogTGlrZSBERUZfTElCX0JVSUxUSU4sIGV4Y2VwdCB0aGF0IHRoZSBmdW5jdGlvbiBpcyBub3Qgb25lIHRoYXQgaXMKKyAgIHNwZWNpZmllZCBieSBBTlNJL0lTTyBDLiAgU28sIHdoZW4gd2UncmUgYmVpbmcgZnVsbHkgY29uZm9ybWFudCB3ZQorICAgaWdub3JlIHRoZSB2ZXJzaW9uIG9mIHRoZXNlIGJ1aWx0aW5zIHRoYXQgZG9lcyBub3QgYmVnaW4gd2l0aAorICAgX19idWlsdGluLiAgKi8KKyN1bmRlZiBERUZfRVhUX0xJQl9CVUlMVElOCisjZGVmaW5lIERFRl9FWFRfTElCX0JVSUxUSU4oRU5VTSwgTkFNRSwgVFlQRSwgQVRUUlMpCVwKKyAgREVGX0JVSUxUSU4gKEVOVU0sICJfX2J1aWx0aW5fIiBOQU1FLCBCVUlMVF9JTl9OT1JNQUwsIFRZUEUsIFRZUEUsCVwKKwkgICAgICAgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgQVRUUlMsIGZhbHNlLCB0cnVlKQorCisvKiBMaWtlIERFRl9MSUJfQlVJTFRJTiwgZXhjZXB0IHRoYXQgdGhlIGZ1bmN0aW9uIGlzIG9ubHkgYSBwYXJ0IG9mCisgICB0aGUgc3RhbmRhcmQgaW4gQzk0IG9yIGFib3ZlLiAgKi8KKyN1bmRlZiBERUZfQzk0X0JVSUxUSU4KKyNkZWZpbmUgREVGX0M5NF9CVUlMVElOKEVOVU0sIE5BTUUsIFRZUEUsIEFUVFJTKQlcCisgIERFRl9CVUlMVElOIChFTlVNLCAiX19idWlsdGluXyIgTkFNRSwgQlVJTFRfSU5fTk9STUFMLCBUWVBFLCBUWVBFLAlcCisJICAgICAgIHRydWUsIHRydWUsICFmbGFnX2lzb2M5NCwgQVRUUlMsIFRBUkdFVF9DOTlfRlVOQ1RJT05TLCB0cnVlKQorCisvKiBMaWtlIERFRl9MSUJfQlVJTFRJTiwgZXhjZXB0IHRoYXQgdGhlIGZ1bmN0aW9uIGlzIG9ubHkgYSBwYXJ0IG9mCisgICB0aGUgc3RhbmRhcmQgaW4gQzk5IG9yIGFib3ZlLiAgKi8KKyN1bmRlZiBERUZfQzk5X0JVSUxUSU4KKyNkZWZpbmUgREVGX0M5OV9CVUlMVElOKEVOVU0sIE5BTUUsIFRZUEUsIEFUVFJTKQlcCisgIERFRl9CVUlMVElOIChFTlVNLCAiX19idWlsdGluXyIgTkFNRSwgQlVJTFRfSU5fTk9STUFMLCBUWVBFLCBUWVBFLAlcCisJICAgICAgIHRydWUsIHRydWUsICFmbGFnX2lzb2M5OSwgQVRUUlMsIFRBUkdFVF9DOTlfRlVOQ1RJT05TLCB0cnVlKQorCisvKiBCdWlsdGluIHRoYXQgaXMgc3BlY2lmaWVkIGJ5IEM5OSBhbmQgQzkwIHJlc2VydmUgdGhlIG5hbWUgZm9yIGZ1dHVyZSB1c2UuCisgICBXZSBjYW4gc3RpbGwgcmVjb2duaXplIHRoZSBidWlsdGluIGluIEM5MCBtb2RlIGJ1dCB3ZSBjYW4ndCBwcm9kdWNlIGl0CisgICBpbXBsaWNpdGx5LiAgKi8KKyN1bmRlZiBERUZfQzk5X0M5MFJFU19CVUlMVElOCisjZGVmaW5lIERFRl9DOTlfQzkwUkVTX0JVSUxUSU4oRU5VTSwgTkFNRSwgVFlQRSwgQVRUUlMpCVwKKyAgREVGX0JVSUxUSU4gKEVOVU0sICJfX2J1aWx0aW5fIiBOQU1FLCBCVUlMVF9JTl9OT1JNQUwsIFRZUEUsIFRZUEUsCVwKKwkgICAgICAgdHJ1ZSwgdHJ1ZSwgIWZsYWdfaXNvYzk5LCBBVFRSUywgVEFSR0VUX0M5OV9GVU5DVElPTlMsIHRydWUpCisKKy8qIEJ1aWx0aW4gdGhhdCBDOTkgcmVzZXJ2ZSB0aGUgbmFtZSBmb3IgZnV0dXJlIHVzZS4gV2UgY2FuIHN0aWxsIHJlY29nbml6ZQorICAgdGhlIGJ1aWx0aW4gaW4gQzk5IG1vZGUgYnV0IHdlIGNhbid0IHByb2R1Y2UgaXQgaW1wbGljaXRseS4gICovCisjdW5kZWYgREVGX0VYVF9DOTlSRVNfQlVJTFRJTgorI2RlZmluZSBERUZfRVhUX0M5OVJFU19CVUlMVElOKEVOVU0sIE5BTUUsIFRZUEUsIEFUVFJTKSAgICAgICAgXAorICBERUZfQlVJTFRJTiAoRU5VTSwgIl9fYnVpbHRpbl8iIE5BTUUsIEJVSUxUX0lOX05PUk1BTCwgVFlQRSwgVFlQRSwgICBcCisJICAgICAgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgQVRUUlMsIGZhbHNlLCB0cnVlKQorCisvKiBBbGxvY2F0ZSB0aGUgZW51bSBhbmQgdGhlIG5hbWUgZm9yIGEgYnVpbHRpbiwgYnV0IGRvIG5vdCBhY3R1YWxseQorICAgZGVmaW5lIGl0IGhlcmUgYXQgYWxsLiAgKi8KKyN1bmRlZiBERUZfQlVJTFRJTl9TVFVCCisjZGVmaW5lIERFRl9CVUlMVElOX1NUVUIoRU5VTSwgTkFNRSkgXAorICBERUZfQlVJTFRJTiAoRU5VTSwgTkFNRSwgQlVJTFRfSU5fTk9STUFMLCAwLCAwLCBmYWxzZSwgZmFsc2UsIFwKKwkgICAgICAgZmFsc2UsIDAsIGZhbHNlLCBmYWxzZSkKKworLyogQnVpbHRpbiB1c2VkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBHTlUgT3Blbk1QLiAgTm9uZSBvZiB0aGVzZSBhcmUKKyAgIGFjdHVhbGx5IGltcGxlbWVudGVkIGluIHRoZSBjb21waWxlcjsgdGhleSdyZSBhbGwgaW4gbGliZ29tcC4gICovCisjdW5kZWYgREVGX0dPTVBfQlVJTFRJTgorI2RlZmluZSBERUZfR09NUF9CVUlMVElOKEVOVU0sIE5BTUUsIFRZUEUsIEFUVFJTKSBcCisgIERFRl9CVUlMVElOIChFTlVNLCAiX19idWlsdGluXyIgTkFNRSwgQlVJTFRfSU5fTk9STUFMLCBUWVBFLCBUWVBFLCAgICBcCisgICAgICAgICAgICAgICBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgQVRUUlMsIGZhbHNlLCBcCisJICAgICAgIChmbGFnX29wZW5tcCB8fCBmbGFnX3RyZWVfcGFyYWxsZWxpemVfbG9vcHMpKQorCisvKiBEZWZpbmUgYW4gYXR0cmlidXRlIGxpc3QgZm9yIG1hdGggZnVuY3Rpb25zIHRoYXQgYXJlIG5vcm1hbGx5CisgICAiaW1wdXJlIiBiZWNhdXNlIHNvbWUgb2YgdGhlbSBtYXkgd3JpdGUgaW50byBnbG9iYWwgbWVtb3J5IGZvcgorICAgYGVycm5vJy4gIElmICFmbGFnX2Vycm5vX21hdGggdGhleSBhcmUgaW5zdGVhZCAiY29uc3QiLiAgKi8KKyN1bmRlZiBBVFRSX01BVEhGTl9FUlJOTworI2RlZmluZSBBVFRSX01BVEhGTl9FUlJOTyAoZmxhZ19lcnJub19tYXRoID8gXAorCUFUVFJfTk9USFJPV19MSVNUIDogQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCisKKy8qIERlZmluZSBhbiBhdHRyaWJ1dGUgbGlzdCBmb3IgbWF0aCBmdW5jdGlvbnMgdGhhdCBhcmUgbm9ybWFsbHkKKyAgICJjb25zdCIgYnV0IGlmIGZsYWdfcm91bmRpbmdfbWF0aCBpcyBzZXQgdGhleSBhcmUgaW5zdGVhZCAicHVyZSIuCisgICBUaGlzIGRpc3RpbmN0aW9uIGFjY291bnRzIGZvciB0aGUgZmFjdCB0aGF0IHNvbWUgbWF0aCBmdW5jdGlvbnMKKyAgIGNoZWNrIHRoZSByb3VuZGluZyBtb2RlIHdoaWNoIGlzIGFraW4gdG8gZXhhbWluaW5nIGdsb2JhbAorICAgbWVtb3J5LiAgKi8KKyN1bmRlZiBBVFRSX01BVEhGTl9GUFJPVU5ESU5HCisjZGVmaW5lIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcgKGZsYWdfcm91bmRpbmdfbWF0aCA/IFwKKwlBVFRSX1BVUkVfTk9USFJPV19OT1ZPUFNfTElTVCA6IEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorCisvKiBEZWZpbmUgYW4gYXR0cmlidXRlIGxpc3QgZm9yIG1hdGggZnVuY3Rpb25zIHRoYXQgYXJlIG5vcm1hbGx5CisgICAiaW1wdXJlIiBiZWNhdXNlIHNvbWUgb2YgdGhlbSBtYXkgd3JpdGUgaW50byBnbG9iYWwgbWVtb3J5IGZvcgorICAgYGVycm5vJy4gIElmICFmbGFnX2Vycm5vX21hdGgsIHdlIGNhbiBwb3NzaWJseSB1c2UgInB1cmUiIG9yCisgICAiY29uc3QiIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlIGNhcmUgYWJvdXQgRlAgcm91bmRpbmcuICAqLworI3VuZGVmIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8KKyNkZWZpbmUgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTyAoZmxhZ19lcnJub19tYXRoID8gXAorCUFUVFJfTk9USFJPV19MSVNUIDogQVRUUl9NQVRIRk5fRlBST1VORElORykKKworLyogRGVmaW5lIGFuIGF0dHJpYnV0ZSBsaXN0IGZvciBtYXRoIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdG8gbWluZCBGUAorICAgcm91bmRpbmcsIGJ1dCBiZWNhdXNlIHRoZXkgc3RvcmUgaW50byBtZW1vcnkgdGhleSBhcmUgbmV2ZXIgImNvbnN0IgorICAgb3IgInB1cmUiLiAgVXNlIG9mIHRoaXMgbWFjcm8gaXMgbWFpbmx5IGZvciBkb2N1bWVudGF0aW9uIGFuZAorICAgbWFpbnRlbmFuY2UgcHVycG9zZXMuICAqLworI3VuZGVmIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfU1RPUkUKKyNkZWZpbmUgQVRUUl9NQVRIRk5fRlBST1VORElOR19TVE9SRSBBVFRSX05PVEhST1dfTElTVAorCisvKiBDYXRlZ29yeTogbWF0aCBidWlsdGlucy4gICovCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9BQ09TLCAiYWNvcyIsIEJUX0ZOX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9BQ09TRiwgImFjb3NmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9BQ09TSCwgImFjb3NoIiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0FDT1NIRiwgImFjb3NoZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQUNPU0hMLCAiYWNvc2hsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fQUNPU0wsICJhY29zbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0FTSU4sICJhc2luIiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX0FTSU5GLCAiYXNpbmYiLCBCVF9GTl9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0FTSU5ILCAiYXNpbmgiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQVNJTkhGLCAiYXNpbmhmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9BU0lOSEwsICJhc2luaGwiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9BU0lOTCwgImFzaW5sIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQVRBTiwgImF0YW4iLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQVRBTjIsICJhdGFuMiIsIEJUX0ZOX0RPVUJMRV9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fQVRBTjJGLCAiYXRhbjJmIiwgQlRfRk5fRkxPQVRfRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9BVEFOMkwsICJhdGFuMmwiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX0FUQU5GLCAiYXRhbmYiLCBCVF9GTl9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0FUQU5ILCAiYXRhbmgiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQVRBTkhGLCAiYXRhbmhmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9BVEFOSEwsICJhdGFuaGwiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9BVEFOTCwgImF0YW5sIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0JSVCwgImNicnQiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0JSVEYsICJjYnJ0ZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0JSVEwsICJjYnJ0bCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NFSUwsICJjZWlsIiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9DRUlMRiwgImNlaWxmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fQ0VJTEwsICJjZWlsbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DT1BZU0lHTiwgImNvcHlzaWduIiwgQlRfRk5fRE9VQkxFX0RPVUJMRV9ET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ09QWVNJR05GLCAiY29weXNpZ25mIiwgQlRfRk5fRkxPQVRfRkxPQVRfRkxPQVQsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ09QWVNJR05MLCAiY29weXNpZ25sIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ09TLCAiY29zIiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX0NPU0YsICJjb3NmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DT1NILCAiY29zaCIsIEJUX0ZOX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9DT1NIRiwgImNvc2hmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9DT1NITCwgImNvc2hsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fQ09TTCwgImNvc2wiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9EUkVNLCAiZHJlbSIsIEJUX0ZOX0RPVUJMRV9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fRFJFTUYsICJkcmVtZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fRFJFTUwsICJkcmVtbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRVJGLCAiZXJmIiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0VSRkMsICJlcmZjIiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0VSRkNGLCAiZXJmY2YiLCBCVF9GTl9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0VSRkNMLCAiZXJmY2wiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9FUkZGLCAiZXJmZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRVJGTCwgImVyZmwiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9FWFAsICJleHAiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fRVhQMTAsICJleHAxMCIsIEJUX0ZOX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9FWFAxMEYsICJleHAxMGYiLCBCVF9GTl9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0VYUDEwTCwgImV4cDEwbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0VYUDIsICJleHAyIiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0VYUDJGLCAiZXhwMmYiLCBCVF9GTl9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0VYUDJMLCAiZXhwMmwiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9FWFBGLCAiZXhwZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fRVhQTCwgImV4cGwiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9FWFBNMSwgImV4cG0xIiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0VYUE0xRiwgImV4cG0xZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRVhQTTFMLCAiZXhwbTFsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRkFCUywgImZhYnMiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX0ZBQlNGLCAiZmFic2YiLCBCVF9GTl9GTE9BVF9GTE9BVCwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9GQUJTTCwgImZhYnNsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0ZESU0sICJmZGltIiwgQlRfRk5fRE9VQkxFX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9GRElNRiwgImZkaW1mIiwgQlRfRk5fRkxPQVRfRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9GRElNTCwgImZkaW1sIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9GTE9PUiwgImZsb29yIiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9GTE9PUkYsICJmbG9vcmYiLCBCVF9GTl9GTE9BVF9GTE9BVCwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9GTE9PUkwsICJmbG9vcmwiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRk1BLCAiZm1hIiwgQlRfRk5fRE9VQkxFX0RPVUJMRV9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRk1BRiwgImZtYWYiLCBCVF9GTl9GTE9BVF9GTE9BVF9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0ZNQUwsICJmbWFsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0ZNQVgsICJmbWF4IiwgQlRfRk5fRE9VQkxFX0RPVUJMRV9ET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRk1BWEYsICJmbWF4ZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FUX0ZMT0FULCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0ZNQVhMLCAiZm1heGwiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9GTUlOLCAiZm1pbiIsIEJUX0ZOX0RPVUJMRV9ET1VCTEVfRE9VQkxFLCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0ZNSU5GLCAiZm1pbmYiLCBCVF9GTl9GTE9BVF9GTE9BVF9GTE9BVCwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9GTUlOTCwgImZtaW5sIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRk1PRCwgImZtb2QiLCBCVF9GTl9ET1VCTEVfRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX0ZNT0RGLCAiZm1vZGYiLCBCVF9GTl9GTE9BVF9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX0ZNT0RMLCAiZm1vZGwiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0ZSRVhQLCAiZnJleHAiLCBCVF9GTl9ET1VCTEVfRE9VQkxFX0lOVFBUUiwgQVRUUl9NQVRIRk5fRlBST1VORElOR19TVE9SRSkKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX0ZSRVhQRiwgImZyZXhwZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FUX0lOVFBUUiwgQVRUUl9NQVRIRk5fRlBST1VORElOR19TVE9SRSkKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX0ZSRVhQTCwgImZyZXhwbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRV9JTlRQVFIsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfU1RPUkUpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9HQU1NQSwgImdhbW1hIiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19TVE9SRSkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0dBTU1BRiwgImdhbW1hZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX1NUT1JFKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fR0FNTUFMLCAiZ2FtbWFsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX1NUT1JFKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fR0FNTUFfUiwgImdhbW1hX3IiLCBCVF9GTl9ET1VCTEVfRE9VQkxFX0lOVFBUUiwgQVRUUl9NQVRIRk5fRlBST1VORElOR19TVE9SRSkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0dBTU1BRl9SLCAiZ2FtbWFmX3IiLCBCVF9GTl9GTE9BVF9GTE9BVF9JTlRQVFIsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfU1RPUkUpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9HQU1NQUxfUiwgImdhbW1hbF9yIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFX0lOVFBUUiwgQVRUUl9NQVRIRk5fRlBST1VORElOR19TVE9SRSkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0hVR0VfVkFMLCAiaHVnZV92YWwiLCBCVF9GTl9ET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSFVHRV9WQUxGLCAiaHVnZV92YWxmIiwgQlRfRk5fRkxPQVQsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSFVHRV9WQUxMLCAiaHVnZV92YWxsIiwgQlRfRk5fTE9OR0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9IWVBPVCwgImh5cG90IiwgQlRfRk5fRE9VQkxFX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9IWVBPVEYsICJoeXBvdGYiLCBCVF9GTl9GTE9BVF9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0hZUE9UTCwgImh5cG90bCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSUxPR0IsICJpbG9nYiIsIEJUX0ZOX0lOVF9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JTE9HQkYsICJpbG9nYmYiLCBCVF9GTl9JTlRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JTE9HQkwsICJpbG9nYmwiLCBCVF9GTl9JTlRfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lORiwgImluZiIsIEJUX0ZOX0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JTkZGLCAiaW5mZiIsIEJUX0ZOX0ZMT0FULCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lORkwsICJpbmZsIiwgQlRfRk5fTE9OR0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfR0NDX0JVSUxUSU4JICAgICAgIChCVUlMVF9JTl9JTkZEMzIsICJpbmZkMzIiLCBCVF9GTl9ERkxPQVQzMiwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JTkZENjQsICJpbmZkNjQiLCBCVF9GTl9ERkxPQVQ2NCwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JTkZEMTI4LCAiaW5mZDEyOCIsIEJUX0ZOX0RGTE9BVDEyOCwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9KMCwgImowIiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0owRiwgImowZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fSjBMLCAiajBsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fSjEsICJqMSIsIEJUX0ZOX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9KMUYsICJqMWYiLCBCVF9GTl9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0oxTCwgImoxbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0pOLCAiam4iLCBCVF9GTl9ET1VCTEVfSU5UX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0pORiwgImpuZiIsIEJUX0ZOX0ZMT0FUX0lOVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0pOTCwgImpubCIsIEJUX0ZOX0xPTkdET1VCTEVfSU5UX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MQ0VJTCwgImxjZWlsIiwgQlRfRk5fTE9OR19ET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTENFSUxGLCAibGNlaWxmIiwgQlRfRk5fTE9OR19GTE9BVCwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MQ0VJTEwsICJsY2VpbGwiLCBCVF9GTl9MT05HX0xPTkdET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTERFWFAsICJsZGV4cCIsIEJUX0ZOX0RPVUJMRV9ET1VCTEVfSU5ULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fTERFWFBGLCAibGRleHBmIiwgQlRfRk5fRkxPQVRfRkxPQVRfSU5ULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fTERFWFBMLCAibGRleHBsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFX0lOVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xGTE9PUiwgImxmbG9vciIsIEJUX0ZOX0xPTkdfRE9VQkxFLCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xGTE9PUkYsICJsZmxvb3JmIiwgQlRfRk5fTE9OR19GTE9BVCwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MRkxPT1JMLCAibGZsb29ybCIsIEJUX0ZOX0xPTkdfTE9OR0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MR0FNTUEsICJsZ2FtbWEiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX1NUT1JFKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTEdBTU1BRiwgImxnYW1tYWYiLCBCVF9GTl9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19TVE9SRSkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xHQU1NQUwsICJsZ2FtbWFsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX1NUT1JFKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fTEdBTU1BX1IsICJsZ2FtbWFfciIsIEJUX0ZOX0RPVUJMRV9ET1VCTEVfSU5UUFRSLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX1NUT1JFKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fTEdBTU1BRl9SLCAibGdhbW1hZl9yIiwgQlRfRk5fRkxPQVRfRkxPQVRfSU5UUFRSLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX1NUT1JFKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fTEdBTU1BTF9SLCAibGdhbW1hbF9yIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFX0lOVFBUUiwgQVRUUl9NQVRIRk5fRlBST1VORElOR19TVE9SRSkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xMQ0VJTCwgImxsY2VpbCIsIEJUX0ZOX0xPTkdMT05HX0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MTENFSUxGLCAibGxjZWlsZiIsIEJUX0ZOX0xPTkdMT05HX0ZMT0FULCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xMQ0VJTEwsICJsbGNlaWxsIiwgQlRfRk5fTE9OR0xPTkdfTE9OR0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MTEZMT09SLCAibGxmbG9vciIsIEJUX0ZOX0xPTkdMT05HX0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MTEZMT09SRiwgImxsZmxvb3JmIiwgQlRfRk5fTE9OR0xPTkdfRkxPQVQsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTExGTE9PUkwsICJsbGZsb29ybCIsIEJUX0ZOX0xPTkdMT05HX0xPTkdET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTExSSU5ULCAibGxyaW50IiwgQlRfRk5fTE9OR0xPTkdfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTExSSU5URiwgImxscmludGYiLCBCVF9GTl9MT05HTE9OR19GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xMUklOVEwsICJsbHJpbnRsIiwgQlRfRk5fTE9OR0xPTkdfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xMUk9VTkQsICJsbHJvdW5kIiwgQlRfRk5fTE9OR0xPTkdfRE9VQkxFLCBBVFRSX01BVEhGTl9FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xMUk9VTkRGLCAibGxyb3VuZGYiLCBCVF9GTl9MT05HTE9OR19GTE9BVCwgQVRUUl9NQVRIRk5fRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MTFJPVU5ETCwgImxscm91bmRsIiwgQlRfRk5fTE9OR0xPTkdfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRVJSTk8pCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MT0csICJsb2ciLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTE9HMTAsICJsb2cxMCIsIEJUX0ZOX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9MT0cxMEYsICJsb2cxMGYiLCBCVF9GTl9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX0xPRzEwTCwgImxvZzEwbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xPRzFQLCAibG9nMXAiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTE9HMVBGLCAibG9nMXBmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MT0cxUEwsICJsb2cxcGwiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MT0cyLCAibG9nMiIsIEJUX0ZOX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MT0cyRiwgImxvZzJmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MT0cyTCwgImxvZzJsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTE9HQiwgImxvZ2IiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTE9HQkYsICJsb2diZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTE9HQkwsICJsb2dibCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX0xPR0YsICJsb2dmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9MT0dMLCAibG9nbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xSSU5ULCAibHJpbnQiLCBCVF9GTl9MT05HX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xSSU5URiwgImxyaW50ZiIsIEJUX0ZOX0xPTkdfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MUklOVEwsICJscmludGwiLCBCVF9GTl9MT05HX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MUk9VTkQsICJscm91bmQiLCBCVF9GTl9MT05HX0RPVUJMRSwgQVRUUl9NQVRIRk5fRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MUk9VTkRGLCAibHJvdW5kZiIsIEJUX0ZOX0xPTkdfRkxPQVQsIEFUVFJfTUFUSEZOX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTFJPVU5ETCwgImxyb3VuZGwiLCBCVF9GTl9MT05HX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0VSUk5PKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTU9ERiwgIm1vZGYiLCBCVF9GTl9ET1VCTEVfRE9VQkxFX0RPVUJMRVBUUiwgQVRUUl9NQVRIRk5fRlBST1VORElOR19TVE9SRSkKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX01PREZGLCAibW9kZmYiLCBCVF9GTl9GTE9BVF9GTE9BVF9GTE9BVFBUUiwgQVRUUl9NQVRIRk5fRlBST1VORElOR19TVE9SRSkKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX01PREZMLCAibW9kZmwiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEVfTE9OR0RPVUJMRVBUUiwgQVRUUl9NQVRIRk5fRlBST1VORElOR19TVE9SRSkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX05BTiwgIm5hbiIsIEJUX0ZOX0RPVUJMRV9DT05TVF9TVFJJTkcsIEFUVFJfQ09OU1RfTk9USFJPV19OT05OVUxMKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTkFORiwgIm5hbmYiLCBCVF9GTl9GTE9BVF9DT05TVF9TVFJJTkcsIEFUVFJfQ09OU1RfTk9USFJPV19OT05OVUxMKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTkFOTCwgIm5hbmwiLCBCVF9GTl9MT05HRE9VQkxFX0NPTlNUX1NUUklORywgQVRUUl9DT05TVF9OT1RIUk9XX05PTk5VTEwpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9OQU5EMzIsICJuYW5kMzIiLCBCVF9GTl9ERkxPQVQzMl9DT05TVF9TVFJJTkcsIEFUVFJfQ09OU1RfTk9USFJPV19OT05OVUxMKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTkFORDY0LCAibmFuZDY0IiwgQlRfRk5fREZMT0FUNjRfQ09OU1RfU1RSSU5HLCBBVFRSX0NPTlNUX05PVEhST1dfTk9OTlVMTCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX05BTkQxMjgsICJuYW5kMTI4IiwgQlRfRk5fREZMT0FUMTI4X0NPTlNUX1NUUklORywgQVRUUl9DT05TVF9OT1RIUk9XX05PTk5VTEwpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9OQU5TLCAibmFucyIsIEJUX0ZOX0RPVUJMRV9DT05TVF9TVFJJTkcsIEFUVFJfQ09OU1RfTk9USFJPV19OT05OVUxMKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTkFOU0YsICJuYW5zZiIsIEJUX0ZOX0ZMT0FUX0NPTlNUX1NUUklORywgQVRUUl9DT05TVF9OT1RIUk9XX05PTk5VTEwpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9OQU5TTCwgIm5hbnNsIiwgQlRfRk5fTE9OR0RPVUJMRV9DT05TVF9TVFJJTkcsIEFUVFJfQ09OU1RfTk9USFJPV19OT05OVUxMKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTkVBUkJZSU5ULCAibmVhcmJ5aW50IiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9ORUFSQllJTlRGLCAibmVhcmJ5aW50ZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX05FQVJCWUlOVEwsICJuZWFyYnlpbnRsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX05FWFRBRlRFUiwgIm5leHRhZnRlciIsIEJUX0ZOX0RPVUJMRV9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTkVYVEFGVEVSRiwgIm5leHRhZnRlcmYiLCBCVF9GTl9GTE9BVF9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX05FWFRBRlRFUkwsICJuZXh0YWZ0ZXJsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9ORVhUVE9XQVJELCAibmV4dHRvd2FyZCIsIEJUX0ZOX0RPVUJMRV9ET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX05FWFRUT1dBUkRGLCAibmV4dHRvd2FyZGYiLCBCVF9GTl9GTE9BVF9GTE9BVF9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTkVYVFRPV0FSREwsICJuZXh0dG93YXJkbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUE9XLCAicG93IiwgQlRfRk5fRE9VQkxFX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9QT1cxMCwgInBvdzEwIiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1BPVzEwRiwgInBvdzEwZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fUE9XMTBMLCAicG93MTBsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fUE9XRiwgInBvd2YiLCBCVF9GTl9GTE9BVF9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1BPV0ksICJwb3dpIiwgQlRfRk5fRE9VQkxFX0RPVUJMRV9JTlQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9QT1dJRiwgInBvd2lmIiwgQlRfRk5fRkxPQVRfRkxPQVRfSU5ULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUE9XSUwsICJwb3dpbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRV9JTlQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9QT1dMLCAicG93bCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUkVNQUlOREVSLCAicmVtYWluZGVyIiwgQlRfRk5fRE9VQkxFX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9SRU1BSU5ERVJGLCAicmVtYWluZGVyZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUkVNQUlOREVSTCwgInJlbWFpbmRlcmwiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1JFTVFVTywgInJlbXF1byIsIEJUX0ZOX0RPVUJMRV9ET1VCTEVfRE9VQkxFX0lOVFBUUiwgQVRUUl9NQVRIRk5fRlBST1VORElOR19TVE9SRSkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1JFTVFVT0YsICJyZW1xdW9mIiwgQlRfRk5fRkxPQVRfRkxPQVRfRkxPQVRfSU5UUFRSLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX1NUT1JFKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUkVNUVVPTCwgInJlbXF1b2wiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEVfTE9OR0RPVUJMRV9JTlRQVFIsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfU1RPUkUpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9SSU5ULCAicmludCIsIEJUX0ZOX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9SSU5URiwgInJpbnRmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9SSU5UTCwgInJpbnRsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUk9VTkQsICJyb3VuZCIsIEJUX0ZOX0RPVUJMRV9ET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUk9VTkRGLCAicm91bmRmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUk9VTkRMLCAicm91bmRsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1NDQUxCLCAic2NhbGIiLCBCVF9GTl9ET1VCTEVfRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1NDQUxCRiwgInNjYWxiZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fU0NBTEJMLCAic2NhbGJsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9TQ0FMQkxOLCAic2NhbGJsbiIsIEJUX0ZOX0RPVUJMRV9ET1VCTEVfTE9ORywgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1NDQUxCTE5GLCAic2NhbGJsbmYiLCBCVF9GTl9GTE9BVF9GTE9BVF9MT05HLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU0NBTEJMTkwsICJzY2FsYmxubCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRV9MT05HLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU0NBTEJOLCAic2NhbGJuIiwgQlRfRk5fRE9VQkxFX0RPVUJMRV9JTlQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9TQ0FMQk5GLCAic2NhbGJuZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FUX0lOVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1NDQUxCTkwsICJzY2FsYm5sIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFX0lOVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1NJR05CSVQsICJzaWduYml0IiwgQlRfRk5fSU5UX0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9TSUdOQklURiwgInNpZ25iaXRmIiwgQlRfRk5fSU5UX0ZMT0FULCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1NJR05CSVRMLCAic2lnbmJpdGwiLCBCVF9GTl9JTlRfTE9OR0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9TSUdOQklURDMyLCAic2lnbmJpdGQzMiIsIEJUX0ZOX0lOVF9ERkxPQVQzMiwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9TSUdOQklURDY0LCAic2lnbmJpdGQ2NCIsIEJUX0ZOX0lOVF9ERkxPQVQ2NCwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9TSUdOQklURDEyOCwgInNpZ25iaXRkMTI4IiwgQlRfRk5fSU5UX0RGTE9BVDEyOCwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9TSUdOSUZJQ0FORCwgInNpZ25pZmljYW5kIiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1NJR05JRklDQU5ERiwgInNpZ25pZmljYW5kZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fU0lHTklGSUNBTkRMLCAic2lnbmlmaWNhbmRsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU0lOLCAic2luIiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1NJTkNPUywgInNpbmNvcyIsIEJUX0ZOX1ZPSURfRE9VQkxFX0RPVUJMRVBUUl9ET1VCTEVQVFIsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfU1RPUkUpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9TSU5DT1NGLCAic2luY29zZiIsIEJUX0ZOX1ZPSURfRkxPQVRfRkxPQVRQVFJfRkxPQVRQVFIsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfU1RPUkUpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9TSU5DT1NMLCAic2luY29zbCIsIEJUX0ZOX1ZPSURfTE9OR0RPVUJMRV9MT05HRE9VQkxFUFRSX0xPTkdET1VCTEVQVFIsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfU1RPUkUpCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9TSU5GLCAic2luZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU0lOSCwgInNpbmgiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fU0lOSEYsICJzaW5oZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fU0lOSEwsICJzaW5obCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX1NJTkwsICJzaW5sIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU1FSVCwgInNxcnQiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fU1FSVEYsICJzcXJ0ZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fU1FSVEwsICJzcXJ0bCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1RBTiwgInRhbiIsIEJUX0ZOX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9UQU5GLCAidGFuZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fVEFOSCwgInRhbmgiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fVEFOSEYsICJ0YW5oZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fVEFOSEwsICJ0YW5obCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX1RBTkwsICJ0YW5sIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fVEdBTU1BLCAidGdhbW1hIiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1RHQU1NQUYsICJ0Z2FtbWFmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9UR0FNTUFMLCAidGdhbW1hbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1RSVU5DLCAidHJ1bmMiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1RSVU5DRiwgInRydW5jZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1RSVU5DTCwgInRydW5jbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9ZMCwgInkwIiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1kwRiwgInkwZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fWTBMLCAieTBsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fWTEsICJ5MSIsIEJUX0ZOX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9ZMUYsICJ5MWYiLCBCVF9GTl9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1kxTCwgInkxbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1lOLCAieW4iLCBCVF9GTl9ET1VCTEVfSU5UX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1lORiwgInluZiIsIEJUX0ZOX0ZMT0FUX0lOVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1lOTCwgInlubCIsIEJUX0ZOX0xPTkdET1VCTEVfSU5UX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCisKKy8qIENhdGVnb3J5OiBfQ29tcGxleCBtYXRoIGJ1aWx0aW5zLiAgKi8KK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NBQlMsICJjYWJzIiwgQlRfRk5fRE9VQkxFX0NPTVBMRVhfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0FCU0YsICJjYWJzZiIsIEJUX0ZOX0ZMT0FUX0NPTVBMRVhfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQUJTTCwgImNhYnNsIiwgQlRfRk5fTE9OR0RPVUJMRV9DT01QTEVYX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQUNPUywgImNhY29zIiwgQlRfRk5fQ09NUExFWF9ET1VCTEVfQ09NUExFWF9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQUNPU0YsICJjYWNvc2YiLCBCVF9GTl9DT01QTEVYX0ZMT0FUX0NPTVBMRVhfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQUNPU0gsICJjYWNvc2giLCBCVF9GTl9DT01QTEVYX0RPVUJMRV9DT01QTEVYX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NBQ09TSEYsICJjYWNvc2hmIiwgQlRfRk5fQ09NUExFWF9GTE9BVF9DT01QTEVYX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0FDT1NITCwgImNhY29zaGwiLCBCVF9GTl9DT01QTEVYX0xPTkdET1VCTEVfQ09NUExFWF9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0FDT1NMLCAiY2Fjb3NsIiwgQlRfRk5fQ09NUExFWF9MT05HRE9VQkxFX0NPTVBMRVhfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NBUkcsICJjYXJnIiwgQlRfRk5fRE9VQkxFX0NPTVBMRVhfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0FSR0YsICJjYXJnZiIsIEJUX0ZOX0ZMT0FUX0NPTVBMRVhfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQVJHTCwgImNhcmdsIiwgQlRfRk5fTE9OR0RPVUJMRV9DT01QTEVYX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQVNJTiwgImNhc2luIiwgQlRfRk5fQ09NUExFWF9ET1VCTEVfQ09NUExFWF9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQVNJTkYsICJjYXNpbmYiLCBCVF9GTl9DT01QTEVYX0ZMT0FUX0NPTVBMRVhfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQVNJTkgsICJjYXNpbmgiLCBCVF9GTl9DT01QTEVYX0RPVUJMRV9DT01QTEVYX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NBU0lOSEYsICJjYXNpbmhmIiwgQlRfRk5fQ09NUExFWF9GTE9BVF9DT01QTEVYX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0FTSU5ITCwgImNhc2luaGwiLCBCVF9GTl9DT01QTEVYX0xPTkdET1VCTEVfQ09NUExFWF9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0FTSU5MLCAiY2FzaW5sIiwgQlRfRk5fQ09NUExFWF9MT05HRE9VQkxFX0NPTVBMRVhfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NBVEFOLCAiY2F0YW4iLCBCVF9GTl9DT01QTEVYX0RPVUJMRV9DT01QTEVYX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NBVEFORiwgImNhdGFuZiIsIEJUX0ZOX0NPTVBMRVhfRkxPQVRfQ09NUExFWF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NBVEFOSCwgImNhdGFuaCIsIEJUX0ZOX0NPTVBMRVhfRE9VQkxFX0NPTVBMRVhfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0FUQU5IRiwgImNhdGFuaGYiLCBCVF9GTl9DT01QTEVYX0ZMT0FUX0NPTVBMRVhfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQVRBTkhMLCAiY2F0YW5obCIsIEJUX0ZOX0NPTVBMRVhfTE9OR0RPVUJMRV9DT01QTEVYX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQVRBTkwsICJjYXRhbmwiLCBCVF9GTl9DT01QTEVYX0xPTkdET1VCTEVfQ09NUExFWF9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0NPUywgImNjb3MiLCBCVF9GTl9DT01QTEVYX0RPVUJMRV9DT01QTEVYX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NDT1NGLCAiY2Nvc2YiLCBCVF9GTl9DT01QTEVYX0ZMT0FUX0NPTVBMRVhfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQ09TSCwgImNjb3NoIiwgQlRfRk5fQ09NUExFWF9ET1VCTEVfQ09NUExFWF9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQ09TSEYsICJjY29zaGYiLCBCVF9GTl9DT01QTEVYX0ZMT0FUX0NPTVBMRVhfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQ09TSEwsICJjY29zaGwiLCBCVF9GTl9DT01QTEVYX0xPTkdET1VCTEVfQ09NUExFWF9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0NPU0wsICJjY29zbCIsIEJUX0ZOX0NPTVBMRVhfTE9OR0RPVUJMRV9DT01QTEVYX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DRVhQLCAiY2V4cCIsIEJUX0ZOX0NPTVBMRVhfRE9VQkxFX0NPTVBMRVhfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0VYUEYsICJjZXhwZiIsIEJUX0ZOX0NPTVBMRVhfRkxPQVRfQ09NUExFWF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NFWFBMLCAiY2V4cGwiLCBCVF9GTl9DT01QTEVYX0xPTkdET1VCTEVfQ09NUExFWF9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0VYUEksICJjZXhwaSIsIEJUX0ZOX0NPTVBMRVhfRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NFWFBJRiwgImNleHBpZiIsIEJUX0ZOX0NPTVBMRVhfRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DRVhQSUwsICJjZXhwaWwiLCBCVF9GTl9DT01QTEVYX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NJTUFHLCAiY2ltYWciLCBCVF9GTl9ET1VCTEVfQ09NUExFWF9ET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0lNQUdGLCAiY2ltYWdmIiwgQlRfRk5fRkxPQVRfQ09NUExFWF9GTE9BVCwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DSU1BR0wsICJjaW1hZ2wiLCBCVF9GTl9MT05HRE9VQkxFX0NPTVBMRVhfTE9OR0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DTE9HLCAiY2xvZyIsIEJUX0ZOX0NPTVBMRVhfRE9VQkxFX0NPTVBMRVhfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0xPR0YsICJjbG9nZiIsIEJUX0ZOX0NPTVBMRVhfRkxPQVRfQ09NUExFWF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NMT0dMLCAiY2xvZ2wiLCBCVF9GTl9DT01QTEVYX0xPTkdET1VCTEVfQ09NUExFWF9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0VYVF9DOTlSRVNfQlVJTFRJTiAoQlVJTFRfSU5fQ0xPRzEwLCAiY2xvZzEwIiwgQlRfRk5fQ09NUExFWF9ET1VCTEVfQ09NUExFWF9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfRVhUX0M5OVJFU19CVUlMVElOIChCVUlMVF9JTl9DTE9HMTBGLCAiY2xvZzEwZiIsIEJUX0ZOX0NPTVBMRVhfRkxPQVRfQ09NUExFWF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9FWFRfQzk5UkVTX0JVSUxUSU4gKEJVSUxUX0lOX0NMT0cxMEwsICJjbG9nMTBsIiwgQlRfRk5fQ09NUExFWF9MT05HRE9VQkxFX0NPTVBMRVhfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NPTkosICJjb25qIiwgQlRfRk5fQ09NUExFWF9ET1VCTEVfQ09NUExFWF9ET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ09OSkYsICJjb25qZiIsIEJUX0ZOX0NPTVBMRVhfRkxPQVRfQ09NUExFWF9GTE9BVCwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DT05KTCwgImNvbmpsIiwgQlRfRk5fQ09NUExFWF9MT05HRE9VQkxFX0NPTVBMRVhfTE9OR0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DUE9XLCAiY3BvdyIsIEJUX0ZOX0NPTVBMRVhfRE9VQkxFX0NPTVBMRVhfRE9VQkxFX0NPTVBMRVhfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ1BPV0YsICJjcG93ZiIsIEJUX0ZOX0NPTVBMRVhfRkxPQVRfQ09NUExFWF9GTE9BVF9DT01QTEVYX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ1BPV0wsICJjcG93bCIsIEJUX0ZOX0NPTVBMRVhfTE9OR0RPVUJMRV9DT01QTEVYX0xPTkdET1VCTEVfQ09NUExFWF9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ1BST0osICJjcHJvaiIsIEJUX0ZOX0NPTVBMRVhfRE9VQkxFX0NPTVBMRVhfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ1BST0pGLCAiY3Byb2pmIiwgQlRfRk5fQ09NUExFWF9GTE9BVF9DT01QTEVYX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ1BST0pMLCAiY3Byb2psIiwgQlRfRk5fQ09NUExFWF9MT05HRE9VQkxFX0NPTVBMRVhfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NSRUFMLCAiY3JlYWwiLCBCVF9GTl9ET1VCTEVfQ09NUExFWF9ET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ1JFQUxGLCAiY3JlYWxmIiwgQlRfRk5fRkxPQVRfQ09NUExFWF9GTE9BVCwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DUkVBTEwsICJjcmVhbGwiLCBCVF9GTl9MT05HRE9VQkxFX0NPTVBMRVhfTE9OR0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DU0lOLCAiY3NpbiIsIEJUX0ZOX0NPTVBMRVhfRE9VQkxFX0NPTVBMRVhfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ1NJTkYsICJjc2luZiIsIEJUX0ZOX0NPTVBMRVhfRkxPQVRfQ09NUExFWF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NTSU5ILCAiY3NpbmgiLCBCVF9GTl9DT01QTEVYX0RPVUJMRV9DT01QTEVYX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NTSU5IRiwgImNzaW5oZiIsIEJUX0ZOX0NPTVBMRVhfRkxPQVRfQ09NUExFWF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NTSU5ITCwgImNzaW5obCIsIEJUX0ZOX0NPTVBMRVhfTE9OR0RPVUJMRV9DT01QTEVYX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DU0lOTCwgImNzaW5sIiwgQlRfRk5fQ09NUExFWF9MT05HRE9VQkxFX0NPTVBMRVhfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NTUVJULCAiY3NxcnQiLCBCVF9GTl9DT01QTEVYX0RPVUJMRV9DT01QTEVYX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NTUVJURiwgImNzcXJ0ZiIsIEJUX0ZOX0NPTVBMRVhfRkxPQVRfQ09NUExFWF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NTUVJUTCwgImNzcXJ0bCIsIEJUX0ZOX0NPTVBMRVhfTE9OR0RPVUJMRV9DT01QTEVYX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DVEFOLCAiY3RhbiIsIEJUX0ZOX0NPTVBMRVhfRE9VQkxFX0NPTVBMRVhfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ1RBTkYsICJjdGFuZiIsIEJUX0ZOX0NPTVBMRVhfRkxPQVRfQ09NUExFWF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NUQU5ILCAiY3RhbmgiLCBCVF9GTl9DT01QTEVYX0RPVUJMRV9DT01QTEVYX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NUQU5IRiwgImN0YW5oZiIsIEJUX0ZOX0NPTVBMRVhfRkxPQVRfQ09NUExFWF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NUQU5ITCwgImN0YW5obCIsIEJUX0ZOX0NPTVBMRVhfTE9OR0RPVUJMRV9DT01QTEVYX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DVEFOTCwgImN0YW5sIiwgQlRfRk5fQ09NUExFWF9MT05HRE9VQkxFX0NPTVBMRVhfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKKworLyogQ2F0ZWdvcnk6IHN0cmluZy9tZW1vcnkgYnVpbHRpbnMuICAqLworLyogYmNtcCwgYmNvcHkgYW5kIGJ6ZXJvIGhhdmUgdHJhZGl0aW9uYWxseSBhY2NlcHRlZCBOVUxMIHBvaW50ZXJzCisgICB3aGVuIHRoZSBsZW5ndGggcGFyYW1ldGVyIGlzIHplcm8sIHNvIGRvbid0IGFwcGx5IGF0dHJpYnV0ZSAibm9ubnVsbCIuICAqLworREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fQkNNUCwgImJjbXAiLCBCVF9GTl9JTlRfQ09OU1RfUFRSX0NPTlNUX1BUUl9TSVpFLCBBVFRSX1BVUkVfTk9USFJPV19MSVNUKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fQkNPUFksICJiY29weSIsIEJUX0ZOX1ZPSURfQ09OU1RfUFRSX1BUUl9TSVpFLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0JaRVJPLCAiYnplcm8iLCBCVF9GTl9WT0lEX1BUUl9TSVpFLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0lOREVYLCAiaW5kZXgiLCBCVF9GTl9TVFJJTkdfQ09OU1RfU1RSSU5HX0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTk9OTlVMTCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX01FTUNIUiwgIm1lbWNociIsIEJUX0ZOX1BUUl9DT05TVF9QVFJfSU5UX1NJWkUsIEFUVFJfUFVSRV9OT1RIUk9XX05PTk5VTEwpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9NRU1DTVAsICJtZW1jbXAiLCBCVF9GTl9JTlRfQ09OU1RfUFRSX0NPTlNUX1BUUl9TSVpFLCBBVFRSX1BVUkVfTk9USFJPV19OT05OVUxMKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTUVNQ1BZLCAibWVtY3B5IiwgQlRfRk5fUFRSX1BUUl9DT05TVF9QVFJfU0laRSwgQVRUUl9OT1RIUk9XX05PTk5VTEwpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9NRU1NT1ZFLCAibWVtbW92ZSIsIEJUX0ZOX1BUUl9QVFJfQ09OU1RfUFRSX1NJWkUsIEFUVFJfTk9USFJPV19OT05OVUxMKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fTUVNUENQWSwgIm1lbXBjcHkiLCBCVF9GTl9QVFJfUFRSX0NPTlNUX1BUUl9TSVpFLCBBVFRSX05PVEhST1dfTk9OTlVMTCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX01FTVNFVCwgIm1lbXNldCIsIEJUX0ZOX1BUUl9QVFJfSU5UX1NJWkUsIEFUVFJfTk9USFJPV19OT05OVUxMKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fUklOREVYLCAicmluZGV4IiwgQlRfRk5fU1RSSU5HX0NPTlNUX1NUUklOR19JTlQsIEFUVFJfUFVSRV9OT1RIUk9XX05PTk5VTEwpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9TVFBDUFksICJzdHBjcHkiLCBCVF9GTl9TVFJJTkdfU1RSSU5HX0NPTlNUX1NUUklORywgQVRUUl9OT1RIUk9XX05PTk5VTEwpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9TVFBOQ1BZLCAic3RwbmNweSIsIEJUX0ZOX1NUUklOR19TVFJJTkdfQ09OU1RfU1RSSU5HX1NJWkUsIEFUVFJfTk9USFJPV19OT05OVUxMKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fU1RSQ0FTRUNNUCwgInN0cmNhc2VjbXAiLCBCVF9GTl9JTlRfQ09OU1RfU1RSSU5HX0NPTlNUX1NUUklORywgQVRUUl9QVVJFX05PVEhST1dfTk9OTlVMTCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1NUUkNBVCwgInN0cmNhdCIsIEJUX0ZOX1NUUklOR19TVFJJTkdfQ09OU1RfU1RSSU5HLCBBVFRSX05PVEhST1dfTk9OTlVMTCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1NUUkNIUiwgInN0cmNociIsIEJUX0ZOX1NUUklOR19DT05TVF9TVFJJTkdfSU5ULCBBVFRSX1BVUkVfTk9USFJPV19OT05OVUxMKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU1RSQ01QLCAic3RyY21wIiwgQlRfRk5fSU5UX0NPTlNUX1NUUklOR19DT05TVF9TVFJJTkcsIEFUVFJfUFVSRV9OT1RIUk9XX05PTk5VTEwpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9TVFJDUFksICJzdHJjcHkiLCBCVF9GTl9TVFJJTkdfU1RSSU5HX0NPTlNUX1NUUklORywgQVRUUl9OT1RIUk9XX05PTk5VTEwpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9TVFJDU1BOLCAic3RyY3NwbiIsIEJUX0ZOX1NJWkVfQ09OU1RfU1RSSU5HX0NPTlNUX1NUUklORywgQVRUUl9QVVJFX05PVEhST1dfTk9OTlVMTCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1NUUkRVUCwgInN0cmR1cCIsIEJUX0ZOX1NUUklOR19DT05TVF9TVFJJTkcsIEFUVFJfTUFMTE9DX05PVEhST1dfTk9OTlVMTCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1NUUk5EVVAsICJzdHJuZHVwIiwgQlRfRk5fU1RSSU5HX0NPTlNUX1NUUklOR19TSVpFLCBBVFRSX01BTExPQ19OT1RIUk9XX05PTk5VTEwpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9TVFJMRU4sICJzdHJsZW4iLCBCVF9GTl9TSVpFX0NPTlNUX1NUUklORywgQVRUUl9QVVJFX05PVEhST1dfTk9OTlVMTCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1NUUk5DQVNFQ01QLCAic3RybmNhc2VjbXAiLCBCVF9GTl9JTlRfQ09OU1RfU1RSSU5HX0NPTlNUX1NUUklOR19TSVpFLCBBVFRSX1BVUkVfTk9USFJPV19OT05OVUxMKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU1RSTkNBVCwgInN0cm5jYXQiLCBCVF9GTl9TVFJJTkdfU1RSSU5HX0NPTlNUX1NUUklOR19TSVpFLCBBVFRSX05PVEhST1dfTk9OTlVMTCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1NUUk5DTVAsICJzdHJuY21wIiwgQlRfRk5fSU5UX0NPTlNUX1NUUklOR19DT05TVF9TVFJJTkdfU0laRSwgQVRUUl9QVVJFX05PVEhST1dfTk9OTlVMTCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1NUUk5DUFksICJzdHJuY3B5IiwgQlRfRk5fU1RSSU5HX1NUUklOR19DT05TVF9TVFJJTkdfU0laRSwgQVRUUl9OT1RIUk9XX05PTk5VTEwpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9TVFJQQlJLLCAic3RycGJyayIsIEJUX0ZOX1NUUklOR19DT05TVF9TVFJJTkdfQ09OU1RfU1RSSU5HLCBBVFRSX1BVUkVfTk9USFJPV19OT05OVUxMKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU1RSUkNIUiwgInN0cnJjaHIiLCBCVF9GTl9TVFJJTkdfQ09OU1RfU1RSSU5HX0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTk9OTlVMTCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1NUUlNQTiwgInN0cnNwbiIsIEJUX0ZOX1NJWkVfQ09OU1RfU1RSSU5HX0NPTlNUX1NUUklORywgQVRUUl9QVVJFX05PVEhST1dfTk9OTlVMTCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1NUUlNUUiwgInN0cnN0ciIsIEJUX0ZOX1NUUklOR19DT05TVF9TVFJJTkdfQ09OU1RfU1RSSU5HLCBBVFRSX1BVUkVfTk9USFJPV19OT05OVUxMKQorCisvKiBDYXRlZ29yeTogc3RkaW8gYnVpbHRpbnMuICAqLworREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRlBSSU5URiwgImZwcmludGYiLCBCVF9GTl9JTlRfRklMRVBUUl9DT05TVF9TVFJJTkdfVkFSLCBBVFRSX0ZPUk1BVF9QUklOVEZfMl8zKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fRlBSSU5URl9VTkxPQ0tFRCwgImZwcmludGZfdW5sb2NrZWQiLCBCVF9GTl9JTlRfRklMRVBUUl9DT05TVF9TVFJJTkdfVkFSLCBBVFRSX0ZPUk1BVF9QUklOVEZfMl8zKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUFVUQywgInB1dGMiLCBCVF9GTl9JTlRfSU5UX0ZJTEVQVFIsIEFUVFJfTk9OTlVMTF9MSVNUKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fUFVUQ19VTkxPQ0tFRCwgInB1dGNfdW5sb2NrZWQiLCBCVF9GTl9JTlRfSU5UX0ZJTEVQVFIsIEFUVFJfTk9OTlVMTF9MSVNUKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRlBVVEMsICJmcHV0YyIsIEJUX0ZOX0lOVF9JTlRfRklMRVBUUiwgQVRUUl9OT05OVUxMX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9GUFVUQ19VTkxPQ0tFRCwgImZwdXRjX3VubG9ja2VkIiwgQlRfRk5fSU5UX0lOVF9GSUxFUFRSLCBBVFRSX05PTk5VTExfTElTVCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0ZQVVRTLCAiZnB1dHMiLCBCVF9GTl9JTlRfQ09OU1RfU1RSSU5HX0ZJTEVQVFIsIEFUVFJfTk9OTlVMTF9MSVNUKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fRlBVVFNfVU5MT0NLRUQsICJmcHV0c191bmxvY2tlZCIsIEJUX0ZOX0lOVF9DT05TVF9TVFJJTkdfRklMRVBUUiwgQVRUUl9OT05OVUxMX0xJU1QpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9GU0NBTkYsICJmc2NhbmYiLCBCVF9GTl9JTlRfRklMRVBUUl9DT05TVF9TVFJJTkdfVkFSLCBBVFRSX0ZPUk1BVF9TQ0FORl8yXzMpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9GV1JJVEUsICJmd3JpdGUiLCBCVF9GTl9TSVpFX0NPTlNUX1BUUl9TSVpFX1NJWkVfRklMRVBUUiwgQVRUUl9OT05OVUxMX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9GV1JJVEVfVU5MT0NLRUQsICJmd3JpdGVfdW5sb2NrZWQiLCBCVF9GTl9TSVpFX0NPTlNUX1BUUl9TSVpFX1NJWkVfRklMRVBUUiwgQVRUUl9OT05OVUxMX0xJU1QpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9QUklOVEYsICJwcmludGYiLCBCVF9GTl9JTlRfQ09OU1RfU1RSSU5HX1ZBUiwgQVRUUl9GT1JNQVRfUFJJTlRGXzFfMikKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1BSSU5URl9VTkxPQ0tFRCwgInByaW50Zl91bmxvY2tlZCIsIEJUX0ZOX0lOVF9DT05TVF9TVFJJTkdfVkFSLCBBVFRSX0ZPUk1BVF9QUklOVEZfMV8yKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUFVUQ0hBUiwgInB1dGNoYXIiLCBCVF9GTl9JTlRfSU5ULCBBVFRSX05VTEwpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9QVVRDSEFSX1VOTE9DS0VELCAicHV0Y2hhcl91bmxvY2tlZCIsIEJUX0ZOX0lOVF9JTlQsIEFUVFJfTlVMTCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1BVVFMsICJwdXRzIiwgQlRfRk5fSU5UX0NPTlNUX1NUUklORywgQVRUUl9OT05OVUxMX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9QVVRTX1VOTE9DS0VELCAicHV0c191bmxvY2tlZCIsIEJUX0ZOX0lOVF9DT05TVF9TVFJJTkcsIEFUVFJfTk9OTlVMTF9MSVNUKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU0NBTkYsICJzY2FuZiIsIEJUX0ZOX0lOVF9DT05TVF9TVFJJTkdfVkFSLCBBVFRSX0ZPUk1BVF9TQ0FORl8xXzIpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9TTlBSSU5URiwgInNucHJpbnRmIiwgQlRfRk5fSU5UX1NUUklOR19TSVpFX0NPTlNUX1NUUklOR19WQVIsIEFUVFJfRk9STUFUX1BSSU5URl9OT1RIUk9XXzNfNCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1NQUklOVEYsICJzcHJpbnRmIiwgQlRfRk5fSU5UX1NUUklOR19DT05TVF9TVFJJTkdfVkFSLCBBVFRSX0ZPUk1BVF9QUklOVEZfTk9USFJPV18yXzMpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9TU0NBTkYsICJzc2NhbmYiLCBCVF9GTl9JTlRfQ09OU1RfU1RSSU5HX0NPTlNUX1NUUklOR19WQVIsIEFUVFJfRk9STUFUX1NDQU5GX05PVEhST1dfMl8zKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fVkZQUklOVEYsICJ2ZnByaW50ZiIsIEJUX0ZOX0lOVF9GSUxFUFRSX0NPTlNUX1NUUklOR19WQUxJU1RfQVJHLCBBVFRSX0ZPUk1BVF9QUklOVEZfMl8wKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fVkZTQ0FORiwgInZmc2NhbmYiLCBCVF9GTl9JTlRfRklMRVBUUl9DT05TVF9TVFJJTkdfVkFMSVNUX0FSRywgQVRUUl9GT1JNQVRfU0NBTkZfMl8wKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fVlBSSU5URiwgInZwcmludGYiLCBCVF9GTl9JTlRfQ09OU1RfU1RSSU5HX1ZBTElTVF9BUkcsIEFUVFJfRk9STUFUX1BSSU5URl8xXzApCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9WU0NBTkYsICJ2c2NhbmYiLCBCVF9GTl9JTlRfQ09OU1RfU1RSSU5HX1ZBTElTVF9BUkcsIEFUVFJfRk9STUFUX1NDQU5GXzFfMCkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1ZTTlBSSU5URiwgInZzbnByaW50ZiIsIEJUX0ZOX0lOVF9TVFJJTkdfU0laRV9DT05TVF9TVFJJTkdfVkFMSVNUX0FSRywgQVRUUl9GT1JNQVRfUFJJTlRGX05PVEhST1dfM18wKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fVlNQUklOVEYsICJ2c3ByaW50ZiIsIEJUX0ZOX0lOVF9TVFJJTkdfQ09OU1RfU1RSSU5HX1ZBTElTVF9BUkcsIEFUVFJfRk9STUFUX1BSSU5URl9OT1RIUk9XXzJfMCkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1ZTU0NBTkYsICJ2c3NjYW5mIiwgQlRfRk5fSU5UX0NPTlNUX1NUUklOR19DT05TVF9TVFJJTkdfVkFMSVNUX0FSRywgQVRUUl9GT1JNQVRfU0NBTkZfTk9USFJPV18yXzApCisKKy8qIENhdGVnb3J5OiBjdHlwZSBidWlsdGlucy4gICovCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JU0FMTlVNLCAiaXNhbG51bSIsIEJUX0ZOX0lOVF9JTlQsIEFUVFJfUFVSRV9OT1RIUk9XX0xJU1QpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JU0FMUEhBLCAiaXNhbHBoYSIsIEJUX0ZOX0lOVF9JTlQsIEFUVFJfUFVSRV9OT1RIUk9XX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9JU0FTQ0lJLCAiaXNhc2NpaSIsIEJUX0ZOX0lOVF9JTlQsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNCTEFOSywgImlzYmxhbmsiLCBCVF9GTl9JTlRfSU5ULCBBVFRSX1BVUkVfTk9USFJPV19MSVNUKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNDTlRSTCwgImlzY250cmwiLCBCVF9GTl9JTlRfSU5ULCBBVFRSX1BVUkVfTk9USFJPV19MSVNUKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNESUdJVCwgImlzZGlnaXQiLCBCVF9GTl9JTlRfSU5ULCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lTR1JBUEgsICJpc2dyYXBoIiwgQlRfRk5fSU5UX0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTElTVCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lTTE9XRVIsICJpc2xvd2VyIiwgQlRfRk5fSU5UX0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTElTVCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lTUFJJTlQsICJpc3ByaW50IiwgQlRfRk5fSU5UX0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTElTVCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lTUFVOQ1QsICJpc3B1bmN0IiwgQlRfRk5fSU5UX0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTElTVCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lTU1BBQ0UsICJpc3NwYWNlIiwgQlRfRk5fSU5UX0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTElTVCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lTVVBQRVIsICJpc3VwcGVyIiwgQlRfRk5fSU5UX0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTElTVCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lTWERJR0lULCAiaXN4ZGlnaXQiLCBCVF9GTl9JTlRfSU5ULCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1RPQVNDSUksICJ0b2FzY2lpIiwgQlRfRk5fSU5UX0lOVCwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9UT0xPV0VSLCAidG9sb3dlciIsIEJUX0ZOX0lOVF9JTlQsIEFUVFJfUFVSRV9OT1RIUk9XX0xJU1QpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9UT1VQUEVSLCAidG91cHBlciIsIEJUX0ZOX0lOVF9JTlQsIEFUVFJfUFVSRV9OT1RIUk9XX0xJU1QpCisKKy8qIENhdGVnb3J5OiB3Y3R5cGUgYnVpbHRpbnMuICAqLworREVGX0M5NF9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNXQUxOVU0sICJpc3dhbG51bSIsIEJUX0ZOX0lOVF9XSU5ULCBBVFRSX1BVUkVfTk9USFJPV19MSVNUKQorREVGX0M5NF9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNXQUxQSEEsICJpc3dhbHBoYSIsIEJUX0ZOX0lOVF9XSU5ULCBBVFRSX1BVUkVfTk9USFJPV19MSVNUKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNXQkxBTkssICJpc3dibGFuayIsIEJUX0ZOX0lOVF9XSU5ULCBBVFRSX1BVUkVfTk9USFJPV19MSVNUKQorREVGX0M5NF9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNXQ05UUkwsICJpc3djbnRybCIsIEJUX0ZOX0lOVF9XSU5ULCBBVFRSX1BVUkVfTk9USFJPV19MSVNUKQorREVGX0M5NF9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNXRElHSVQsICJpc3dkaWdpdCIsIEJUX0ZOX0lOVF9XSU5ULCBBVFRSX1BVUkVfTk9USFJPV19MSVNUKQorREVGX0M5NF9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNXR1JBUEgsICJpc3dncmFwaCIsIEJUX0ZOX0lOVF9XSU5ULCBBVFRSX1BVUkVfTk9USFJPV19MSVNUKQorREVGX0M5NF9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNXTE9XRVIsICJpc3dsb3dlciIsIEJUX0ZOX0lOVF9XSU5ULCBBVFRSX1BVUkVfTk9USFJPV19MSVNUKQorREVGX0M5NF9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNXUFJJTlQsICJpc3dwcmludCIsIEJUX0ZOX0lOVF9XSU5ULCBBVFRSX1BVUkVfTk9USFJPV19MSVNUKQorREVGX0M5NF9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNXUFVOQ1QsICJpc3dwdW5jdCIsIEJUX0ZOX0lOVF9XSU5ULCBBVFRSX1BVUkVfTk9USFJPV19MSVNUKQorREVGX0M5NF9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNXU1BBQ0UsICJpc3dzcGFjZSIsIEJUX0ZOX0lOVF9XSU5ULCBBVFRSX1BVUkVfTk9USFJPV19MSVNUKQorREVGX0M5NF9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNXVVBQRVIsICJpc3d1cHBlciIsIEJUX0ZOX0lOVF9XSU5ULCBBVFRSX1BVUkVfTk9USFJPV19MSVNUKQorREVGX0M5NF9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNXWERJR0lULCAiaXN3eGRpZ2l0IiwgQlRfRk5fSU5UX1dJTlQsIEFUVFJfUFVSRV9OT1RIUk9XX0xJU1QpCitERUZfQzk0X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9UT1dMT1dFUiwgInRvd2xvd2VyIiwgQlRfRk5fV0lOVF9XSU5ULCBBVFRSX1BVUkVfTk9USFJPV19MSVNUKQorREVGX0M5NF9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fVE9XVVBQRVIsICJ0b3d1cHBlciIsIEJUX0ZOX1dJTlRfV0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTElTVCkKKworLyogQ2F0ZWdvcnk6IG1pc2NlbGxhbmVvdXMgYnVpbHRpbnMuICAqLworREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQUJPUlQsICJhYm9ydCIsIEJUX0ZOX1ZPSUQsIEFUVFJfTk9SRVRVUk5fTk9USFJPV19MSVNUKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQUJTLCAiYWJzIiwgQlRfRk5fSU5UX0lOVCwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9BR0dSRUdBVEVfSU5DT01JTkdfQUREUkVTUywgImFnZ3JlZ2F0ZV9pbmNvbWluZ19hZGRyZXNzIiwgQlRfRk5fUFRSX1ZBUiwgQVRUUl9OVUxMKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fQUxMT0NBLCAiYWxsb2NhIiwgQlRfRk5fUFRSX1NJWkUsIEFUVFJfTUFMTE9DX05PVEhST1dfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0FQUExZLCAiYXBwbHkiLCBCVF9GTl9QVFJfUFRSX0ZOX1ZPSURfVkFSX1BUUl9TSVpFLCBBVFRSX05VTEwpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9BUFBMWV9BUkdTLCAiYXBwbHlfYXJncyIsIEJUX0ZOX1BUUl9WQVIsIEFUVFJfTlVMTCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0FSR1NfSU5GTywgImFyZ3NfaW5mbyIsIEJUX0ZOX0lOVF9JTlQsIEFUVFJfTlVMTCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0JTV0FQMzIsICJic3dhcDMyIiwgQlRfRk5fVUlOVDMyX1VJTlQzMiwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9CU1dBUDY0LCAiYnN3YXA2NCIsIEJUX0ZOX1VJTlQ2NF9VSU5UNjQsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fQ0xFQVJfQ0FDSEUsICJfX2NsZWFyX2NhY2hlIiwgQlRfRk5fVk9JRF9QVFJfUFRSLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NBTExPQywgImNhbGxvYyIsIEJUX0ZOX1BUUl9TSVpFX1NJWkUsIEFUVFJfTUFMTE9DX05PVEhST1dfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NMQVNTSUZZX1RZUEUsICJjbGFzc2lmeV90eXBlIiwgQlRfRk5fSU5UX1ZBUiwgQVRUUl9OVUxMKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0xaLCAiY2x6IiwgQlRfRk5fSU5UX1VJTlQsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0xaSU1BWCwgImNsemltYXgiLCBCVF9GTl9JTlRfVUlOVE1BWCwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DTFpMLCAiY2x6bCIsIEJUX0ZOX0lOVF9VTE9ORywgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DTFpMTCwgImNsemxsIiwgQlRfRk5fSU5UX1VMT05HTE9ORywgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DT05TVEFOVF9QLCAiY29uc3RhbnRfcCIsIEJUX0ZOX0lOVF9WQVIsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ1RaLCAiY3R6IiwgQlRfRk5fSU5UX1VJTlQsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ1RaSU1BWCwgImN0emltYXgiLCBCVF9GTl9JTlRfVUlOVE1BWCwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DVFpMLCAiY3R6bCIsIEJUX0ZOX0lOVF9VTE9ORywgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DVFpMTCwgImN0emxsIiwgQlRfRk5fSU5UX1VMT05HTE9ORywgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9EQ0dFVFRFWFQsICJkY2dldHRleHQiLCBCVF9GTl9TVFJJTkdfQ09OU1RfU1RSSU5HX0NPTlNUX1NUUklOR19JTlQsIEFUVFJfRk9STUFUX0FSR18yKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fREdFVFRFWFQsICJkZ2V0dGV4dCIsIEJUX0ZOX1NUUklOR19DT05TVF9TVFJJTkdfQ09OU1RfU1RSSU5HLCBBVFRSX0ZPUk1BVF9BUkdfMikKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0RXQVJGX0NGQSwgImR3YXJmX2NmYSIsIEJUX0ZOX1BUUiwgQVRUUl9OVUxMKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRFdBUkZfU1BfQ09MVU1OLCAiZHdhcmZfc3BfY29sdW1uIiwgQlRfRk5fVUlOVCwgQVRUUl9OVUxMKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRUhfUkVUVVJOLCAiZWhfcmV0dXJuIiwgQlRfRk5fVk9JRF9QVFJNT0RFX1BUUiwgQVRUUl9OT1JFVFVSTl9OT1RIUk9XX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9FSF9SRVRVUk5fREFUQV9SRUdOTywgImVoX3JldHVybl9kYXRhX3JlZ25vIiwgQlRfRk5fSU5UX0lOVCwgQVRUUl9OVUxMKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0VYRUNMLCAiZXhlY2wiLCBCVF9GTl9JTlRfQ09OU1RfU1RSSU5HX0NPTlNUX1NUUklOR19WQVIsIEFUVFJfU0VOVElORUxfTk9USFJPV19MSVNUKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0VYRUNMUCwgImV4ZWNscCIsIEJUX0ZOX0lOVF9DT05TVF9TVFJJTkdfQ09OU1RfU1RSSU5HX1ZBUiwgQVRUUl9TRU5USU5FTF9OT1RIUk9XX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRVhFQ0xFLCAiZXhlY2xlIiwgQlRfRk5fSU5UX0NPTlNUX1NUUklOR19DT05TVF9TVFJJTkdfVkFSLCBBVFRSX05PVEhST1dfU0VOVElORUxfMSkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9FWEVDViwgImV4ZWN2IiwgQlRfRk5fSU5UX0NPTlNUX1NUUklOR19QVFJfQ09OU1RfU1RSSU5HLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9FWEVDVlAsICJleGVjdnAiLCBCVF9GTl9JTlRfQ09OU1RfU1RSSU5HX1BUUl9DT05TVF9TVFJJTkcsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0VYRUNWRSwgImV4ZWN2ZSIsIEJUX0ZOX0lOVF9DT05TVF9TVFJJTkdfUFRSX0NPTlNUX1NUUklOR19QVFJfQ09OU1RfU1RSSU5HLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0VYSVQsICJleGl0IiwgQlRfRk5fVk9JRF9JTlQsIEFUVFJfTk9SRVRVUk5fTk9USFJPV19MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRVhQRUNULCAiZXhwZWN0IiwgQlRfRk5fTE9OR19MT05HX0xPTkcsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRVhURU5EX1BPSU5URVIsICJleHRlbmRfcG9pbnRlciIsIEJUX0ZOX1VOV0lORFdPUkRfUFRSLCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0VYVFJBQ1RfUkVUVVJOX0FERFIsICJleHRyYWN0X3JldHVybl9hZGRyIiwgQlRfRk5fUFRSX1BUUiwgQVRUUl9OVUxMKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fRkZTLCAiZmZzIiwgQlRfRk5fSU5UX0lOVCwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9GRlNJTUFYLCAiZmZzaW1heCIsIEJUX0ZOX0lOVF9JTlRNQVgsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fRkZTTCwgImZmc2wiLCBCVF9GTl9JTlRfTE9ORywgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9GRlNMTCwgImZmc2xsIiwgQlRfRk5fSU5UX0xPTkdMT05HLCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9GT1JLLCAiZm9yayIsIEJUX0ZOX1BJRCwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9GUkFNRV9BRERSRVNTLCAiZnJhbWVfYWRkcmVzcyIsIEJUX0ZOX1BUUl9VSU5ULCBBVFRSX05VTEwpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9GUkVFLCAiZnJlZSIsIEJUX0ZOX1ZPSURfUFRSLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0ZST0JfUkVUVVJOX0FERFIsICJmcm9iX3JldHVybl9hZGRyIiwgQlRfRk5fUFRSX1BUUiwgQVRUUl9OVUxMKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fR0VUVEVYVCwgImdldHRleHQiLCBCVF9GTl9TVFJJTkdfQ09OU1RfU1RSSU5HLCBBVFRSX0ZPUk1BVF9BUkdfMSkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lNQVhBQlMsICJpbWF4YWJzIiwgQlRfRk5fSU5UTUFYX0lOVE1BWCwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JTklUX0RXQVJGX1JFR19TSVpFUywgImluaXRfZHdhcmZfcmVnX3NpemVfdGFibGUiLCBCVF9GTl9WT0lEX1BUUiwgQVRUUl9OVUxMKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fRklOSVRFLCAiZmluaXRlIiwgQlRfRk5fSU5UX0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9GSU5JVEVGLCAiZmluaXRlZiIsIEJUX0ZOX0lOVF9GTE9BVCwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9GSU5JVEVMLCAiZmluaXRlbCIsIEJUX0ZOX0lOVF9MT05HRE9VQkxFLCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0ZJTklURUQzMiwgImZpbml0ZWQzMiIsIEJUX0ZOX0lOVF9ERkxPQVQzMiwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9GSU5JVEVENjQsICJmaW5pdGVkNjQiLCBCVF9GTl9JTlRfREZMT0FUNjQsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fRklOSVRFRDEyOCwgImZpbml0ZWQxMjgiLCBCVF9GTl9JTlRfREZMT0FUMTI4LCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0ZQQ0xBU1NJRlksICJmcGNsYXNzaWZ5IiwgQlRfRk5fSU5UX0lOVF9JTlRfSU5UX0lOVF9JTlRfVkFSLCBBVFRSX0NPTlNUX05PVEhST1dfVFlQRUdFTkVSSUMpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JU0ZJTklURSwgImlzZmluaXRlIiwgQlRfRk5fSU5UX1ZBUiwgQVRUUl9DT05TVF9OT1RIUk9XX1RZUEVHRU5FUklDKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNJTkZfU0lHTiwgImlzaW5mX3NpZ24iLCBCVF9GTl9JTlRfVkFSLCBBVFRSX0NPTlNUX05PVEhST1dfVFlQRUdFTkVSSUMpCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9JU0lORiwgImlzaW5mIiwgQlRfRk5fSU5UX1ZBUiwgQVRUUl9DT05TVF9OT1RIUk9XX1RZUEVHRU5FUklDKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fSVNJTkZGLCAiaXNpbmZmIiwgQlRfRk5fSU5UX0ZMT0FULCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0lTSU5GTCwgImlzaW5mbCIsIEJUX0ZOX0lOVF9MT05HRE9VQkxFLCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0lTSU5GRDMyLCAiaXNpbmZkMzIiLCBCVF9GTl9JTlRfREZMT0FUMzIsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fSVNJTkZENjQsICJpc2luZmQ2NCIsIEJUX0ZOX0lOVF9ERkxPQVQ2NCwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9JU0lORkQxMjgsICJpc2luZmQxMjgiLCBCVF9GTl9JTlRfREZMT0FUMTI4LCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX0lTTkFOLCAiaXNuYW4iLCBCVF9GTl9JTlRfVkFSLCBBVFRSX0NPTlNUX05PVEhST1dfVFlQRUdFTkVSSUMpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9JU05BTkYsICJpc25hbmYiLCBCVF9GTl9JTlRfRkxPQVQsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fSVNOQU5MLCAiaXNuYW5sIiwgQlRfRk5fSU5UX0xPTkdET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fSVNOQU5EMzIsICJpc25hbmQzMiIsIEJUX0ZOX0lOVF9ERkxPQVQzMiwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9JU05BTkQ2NCwgImlzbmFuZDY0IiwgQlRfRk5fSU5UX0RGTE9BVDY0LCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0lTTkFORDEyOCwgImlzbmFuZDEyOCIsIEJUX0ZOX0lOVF9ERkxPQVQxMjgsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNOT1JNQUwsICJpc25vcm1hbCIsIEJUX0ZOX0lOVF9WQVIsIEFUVFJfQ09OU1RfTk9USFJPV19UWVBFR0VORVJJQykKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lTR1JFQVRFUiwgImlzZ3JlYXRlciIsIEJUX0ZOX0lOVF9WQVIsIEFUVFJfQ09OU1RfTk9USFJPV19UWVBFR0VORVJJQykKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lTR1JFQVRFUkVRVUFMLCAiaXNncmVhdGVyZXF1YWwiLCBCVF9GTl9JTlRfVkFSLCBBVFRSX0NPTlNUX05PVEhST1dfVFlQRUdFTkVSSUMpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JU0xFU1MsICJpc2xlc3MiLCBCVF9GTl9JTlRfVkFSLCBBVFRSX0NPTlNUX05PVEhST1dfVFlQRUdFTkVSSUMpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JU0xFU1NFUVVBTCwgImlzbGVzc2VxdWFsIiwgQlRfRk5fSU5UX1ZBUiwgQVRUUl9DT05TVF9OT1RIUk9XX1RZUEVHRU5FUklDKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNMRVNTR1JFQVRFUiwgImlzbGVzc2dyZWF0ZXIiLCBCVF9GTl9JTlRfVkFSLCBBVFRSX0NPTlNUX05PVEhST1dfVFlQRUdFTkVSSUMpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JU1VOT1JERVJFRCwgImlzdW5vcmRlcmVkIiwgQlRfRk5fSU5UX1ZBUiwgQVRUUl9DT05TVF9OT1RIUk9XX1RZUEVHRU5FUklDKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTEFCUywgImxhYnMiLCBCVF9GTl9MT05HX0xPTkcsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTExBQlMsICJsbGFicyIsIEJUX0ZOX0xPTkdMT05HX0xPTkdMT05HLCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xPTkdKTVAsICJsb25nam1wIiwgQlRfRk5fVk9JRF9QVFJfSU5ULCBBVFRSX05PUkVUVVJOX05PVEhST1dfTElTVCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX01BTExPQywgIm1hbGxvYyIsIEJUX0ZOX1BUUl9TSVpFLCBBVFRSX01BTExPQ19OT1RIUk9XX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9ORVhUX0FSRywgIm5leHRfYXJnIiwgQlRfRk5fUFRSX1ZBUiwgQVRUUl9OVUxMKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUEFSSVRZLCAicGFyaXR5IiwgQlRfRk5fSU5UX1VJTlQsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUEFSSVRZSU1BWCwgInBhcml0eWltYXgiLCBCVF9GTl9JTlRfVUlOVE1BWCwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9QQVJJVFlMLCAicGFyaXR5bCIsIEJUX0ZOX0lOVF9VTE9ORywgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9QQVJJVFlMTCwgInBhcml0eWxsIiwgQlRfRk5fSU5UX1VMT05HTE9ORywgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9QT1BDT1VOVCwgInBvcGNvdW50IiwgQlRfRk5fSU5UX1VJTlQsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUE9QQ09VTlRJTUFYLCAicG9wY291bnRpbWF4IiwgQlRfRk5fSU5UX1VJTlRNQVgsIEFUVFJfQ09OU1RfTk9USFJPV19MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUE9QQ09VTlRMLCAicG9wY291bnRsIiwgQlRfRk5fSU5UX1VMT05HLCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1BPUENPVU5UTEwsICJwb3Bjb3VudGxsIiwgQlRfRk5fSU5UX1VMT05HTE9ORywgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9QUkVGRVRDSCwgInByZWZldGNoIiwgQlRfRk5fVk9JRF9DT05TVF9QVFJfVkFSLCBBVFRSX05PVk9QU19MSVNUKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUkVBTExPQywgInJlYWxsb2MiLCBCVF9GTl9QVFJfUFRSX1NJWkUsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUkVUVVJOLCAicmV0dXJuIiwgQlRfRk5fVk9JRF9QVFIsIEFUVFJfTk9SRVRVUk5fTk9USFJPV19MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUkVUVVJOX0FERFJFU1MsICJyZXR1cm5fYWRkcmVzcyIsIEJUX0ZOX1BUUl9VSU5ULCBBVFRSX05VTEwpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9TQVZFUkVHUywgInNhdmVyZWdzIiwgQlRfRk5fUFRSX1ZBUiwgQVRUUl9OVUxMKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU0VUSk1QLCAic2V0am1wIiwgQlRfRk5fSU5UX1BUUiwgQVRUUl9OVUxMKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fU1RSRk1PTiwgInN0cmZtb24iLCBCVF9GTl9TU0laRV9TVFJJTkdfU0laRV9DT05TVF9TVFJJTkdfVkFSLCBBVFRSX0ZPUk1BVF9TVFJGTU9OX05PVEhST1dfM180KQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU1RSRlRJTUUsICJzdHJmdGltZSIsIEJUX0ZOX1NJWkVfU1RSSU5HX1NJWkVfQ09OU1RfU1RSSU5HX0NPTlNUX1BUUiwgQVRUUl9GT1JNQVRfU1RSRlRJTUVfTk9USFJPV18zXzApCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9UUkFQLCAidHJhcCIsIEJUX0ZOX1ZPSUQsIEFUVFJfTk9SRVRVUk5fTk9USFJPV19MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fVU5SRUFDSEFCTEUsICJ1bnJlYWNoYWJsZSIsIEJUX0ZOX1ZPSUQsIEFUVFJfTk9SRVRVUk5fTk9USFJPV19MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fVU5XSU5EX0lOSVQsICJ1bndpbmRfaW5pdCIsIEJUX0ZOX1ZPSUQsIEFUVFJfTlVMTCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1VQREFURV9TRVRKTVBfQlVGLCAidXBkYXRlX3NldGptcF9idWYiLCBCVF9GTl9WT0lEX1BUUl9JTlQsIEFUVFJfTlVMTCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1ZBX0NPUFksICJ2YV9jb3B5IiwgQlRfRk5fVk9JRF9WQUxJU1RfUkVGX1ZBTElTVF9BUkcsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fVkFfRU5ELCAidmFfZW5kIiwgQlRfRk5fVk9JRF9WQUxJU1RfUkVGLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1ZBX1NUQVJULCAidmFfc3RhcnQiLCBCVF9GTl9WT0lEX1ZBTElTVF9SRUZfVkFSLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1ZBX0FSR19QQUNLLCAidmFfYXJnX3BhY2siLCBCVF9GTl9JTlQsIEFUVFJfUFVSRV9OT1RIUk9XX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9WQV9BUkdfUEFDS19MRU4sICJ2YV9hcmdfcGFja19sZW4iLCBCVF9GTl9JTlQsIEFUVFJfUFVSRV9OT1RIUk9XX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9fRVhJVCwgIl9leGl0IiwgQlRfRk5fVk9JRF9JTlQsIEFUVFJfTk9SRVRVUk5fTk9USFJPV19MSVNUKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fX0VYSVQyLCAiX0V4aXQiLCBCVF9GTl9WT0lEX0lOVCwgQVRUUl9OT1JFVFVSTl9OT1RIUk9XX0xJU1QpCisKKy8qIEltcGxlbWVudGluZyBuZXN0ZWQgZnVuY3Rpb25zLiAgKi8KK0RFRl9CVUlMVElOX1NUVUIgKEJVSUxUX0lOX0lOSVRfVFJBTVBPTElORSwgIl9fYnVpbHRpbl9pbml0X3RyYW1wb2xpbmUiKQorREVGX0JVSUxUSU5fU1RVQiAoQlVJTFRfSU5fQURKVVNUX1RSQU1QT0xJTkUsICJfX2J1aWx0aW5fYWRqdXN0X3RyYW1wb2xpbmUiKQorREVGX0JVSUxUSU5fU1RVQiAoQlVJTFRfSU5fTk9OTE9DQUxfR09UTywgIl9fYnVpbHRpbl9ub25sb2NhbF9nb3RvIikKKworLyogSW1wbGVtZW50aW5nIF9fYnVpbHRpbl9zZXRqbXAuICAqLworREVGX0JVSUxUSU5fU1RVQiAoQlVJTFRfSU5fU0VUSk1QX1NFVFVQLCAiX19idWlsdGluX3NldGptcF9zZXR1cCIpCitERUZfQlVJTFRJTl9TVFVCIChCVUlMVF9JTl9TRVRKTVBfRElTUEFUQ0hFUiwgIl9fYnVpbHRpbl9zZXRqbXBfZGlzcGF0Y2hlciIpCitERUZfQlVJTFRJTl9TVFVCIChCVUlMVF9JTl9TRVRKTVBfUkVDRUlWRVIsICJfX2J1aWx0aW5fc2V0am1wX3JlY2VpdmVyIikKKworLyogSW1wbGVtZW50aW5nIHZhcmlhYmxlIHNpemVkIGxvY2FsIHZhcmlhYmxlcy4gICovCitERUZfQlVJTFRJTl9TVFVCIChCVUlMVF9JTl9TVEFDS19TQVZFLCAiX19idWlsdGluX3N0YWNrX3NhdmUiKQorREVGX0JVSUxUSU5fU1RVQiAoQlVJTFRfSU5fU1RBQ0tfUkVTVE9SRSwgIl9fYnVpbHRpbl9zdGFja19yZXN0b3JlIikKKworLyogT2JqZWN0IHNpemUgY2hlY2tpbmcgYnVpbHRpbnMuICAqLworREVGX0dDQ19CVUlMVElOCSAgICAgICAoQlVJTFRfSU5fT0JKRUNUX1NJWkUsICJvYmplY3Rfc2l6ZSIsIEJUX0ZOX1NJWkVfQ09OU1RfUFRSX0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX01FTUNQWV9DSEssICJfX21lbWNweV9jaGsiLCBCVF9GTl9QVFJfUFRSX0NPTlNUX1BUUl9TSVpFX1NJWkUsIEFUVFJfTk9USFJPV19OT05OVUxMKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fTUVNTU9WRV9DSEssICJfX21lbW1vdmVfY2hrIiwgQlRfRk5fUFRSX1BUUl9DT05TVF9QVFJfU0laRV9TSVpFLCBBVFRSX05PVEhST1dfTk9OTlVMTCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX01FTVBDUFlfQ0hLLCAiX19tZW1wY3B5X2NoayIsIEJUX0ZOX1BUUl9QVFJfQ09OU1RfUFRSX1NJWkVfU0laRSwgQVRUUl9OT1RIUk9XX05PTk5VTEwpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9NRU1TRVRfQ0hLLCAiX19tZW1zZXRfY2hrIiwgQlRfRk5fUFRSX1BUUl9JTlRfU0laRV9TSVpFLCBBVFRSX05PVEhST1dfTk9OTlVMTCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1NUUENQWV9DSEssICJfX3N0cGNweV9jaGsiLCBCVF9GTl9TVFJJTkdfU1RSSU5HX0NPTlNUX1NUUklOR19TSVpFLCBBVFRSX05PVEhST1dfTk9OTlVMTCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1NUUkNBVF9DSEssICJfX3N0cmNhdF9jaGsiLCBCVF9GTl9TVFJJTkdfU1RSSU5HX0NPTlNUX1NUUklOR19TSVpFLCBBVFRSX05PVEhST1dfTk9OTlVMTCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1NUUkNQWV9DSEssICJfX3N0cmNweV9jaGsiLCBCVF9GTl9TVFJJTkdfU1RSSU5HX0NPTlNUX1NUUklOR19TSVpFLCBBVFRSX05PVEhST1dfTk9OTlVMTCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1NUUk5DQVRfQ0hLLCAiX19zdHJuY2F0X2NoayIsIEJUX0ZOX1NUUklOR19TVFJJTkdfQ09OU1RfU1RSSU5HX1NJWkVfU0laRSwgQVRUUl9OT1RIUk9XX05PTk5VTEwpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9TVFJOQ1BZX0NISywgIl9fc3RybmNweV9jaGsiLCBCVF9GTl9TVFJJTkdfU1RSSU5HX0NPTlNUX1NUUklOR19TSVpFX1NJWkUsIEFUVFJfTk9USFJPV19OT05OVUxMKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fU05QUklOVEZfQ0hLLCAiX19zbnByaW50Zl9jaGsiLCBCVF9GTl9JTlRfU1RSSU5HX1NJWkVfSU5UX1NJWkVfQ09OU1RfU1RSSU5HX1ZBUiwgQVRUUl9GT1JNQVRfUFJJTlRGX05PVEhST1dfNV82KQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fU1BSSU5URl9DSEssICJfX3NwcmludGZfY2hrIiwgQlRfRk5fSU5UX1NUUklOR19JTlRfU0laRV9DT05TVF9TVFJJTkdfVkFSLCBBVFRSX0ZPUk1BVF9QUklOVEZfTk9USFJPV180XzUpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9WU05QUklOVEZfQ0hLLCAiX192c25wcmludGZfY2hrIiwgQlRfRk5fSU5UX1NUUklOR19TSVpFX0lOVF9TSVpFX0NPTlNUX1NUUklOR19WQUxJU1RfQVJHLCBBVFRSX0ZPUk1BVF9QUklOVEZfTk9USFJPV181XzApCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9WU1BSSU5URl9DSEssICJfX3ZzcHJpbnRmX2NoayIsIEJUX0ZOX0lOVF9TVFJJTkdfSU5UX1NJWkVfQ09OU1RfU1RSSU5HX1ZBTElTVF9BUkcsIEFUVFJfRk9STUFUX1BSSU5URl9OT1RIUk9XXzRfMCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0ZQUklOVEZfQ0hLLCAiX19mcHJpbnRmX2NoayIsIEJUX0ZOX0lOVF9GSUxFUFRSX0lOVF9DT05TVF9TVFJJTkdfVkFSLCBBVFRSX0ZPUk1BVF9QUklOVEZfM180KQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fUFJJTlRGX0NISywgIl9fcHJpbnRmX2NoayIsIEJUX0ZOX0lOVF9JTlRfQ09OU1RfU1RSSU5HX1ZBUiwgQVRUUl9GT1JNQVRfUFJJTlRGXzJfMykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1ZGUFJJTlRGX0NISywgIl9fdmZwcmludGZfY2hrIiwgQlRfRk5fSU5UX0ZJTEVQVFJfSU5UX0NPTlNUX1NUUklOR19WQUxJU1RfQVJHLCBBVFRSX0ZPUk1BVF9QUklOVEZfM18wKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fVlBSSU5URl9DSEssICJfX3ZwcmludGZfY2hrIiwgQlRfRk5fSU5UX0lOVF9DT05TVF9TVFJJTkdfVkFMSVNUX0FSRywgQVRUUl9GT1JNQVRfUFJJTlRGXzJfMCkKKworLyogUHJvZmlsaW5nIGhvb2tzLiAgKi8KK0RFRl9CVUlMVElOX1NUVUIgKEJVSUxUX0lOX1BST0ZJTEVfRlVOQ19FTlRFUiwgInByb2ZpbGVfZnVuY19lbnRlciIpCitERUZfQlVJTFRJTl9TVFVCIChCVUlMVF9JTl9QUk9GSUxFX0ZVTkNfRVhJVCwgInByb2ZpbGVfZnVuY19leGl0IikKKworLyogVExTIGVtdWxhdGlvbi4gICovCitERUZfQlVJTFRJTiAoQlVJTFRfSU5fRU1VVExTX0dFVF9BRERSRVNTLCB0YXJnZXRtLmVtdXRscy5nZXRfYWRkcmVzcywKKwkgICAgIEJVSUxUX0lOX05PUk1BTCwKKwkgICAgIEJUX0ZOX1BUUl9QVFIsICBCVF9GTl9QVFJfUFRSLAorCSAgICAgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgQVRUUl9DT05TVF9OT1RIUk9XX05PTk5VTEwsIGZhbHNlLAorCSAgICAgIXRhcmdldG0uaGF2ZV90bHMpCitERUZfQlVJTFRJTiAoQlVJTFRfSU5fRU1VVExTX1JFR0lTVEVSX0NPTU1PTiwKKwkgICAgIHRhcmdldG0uZW11dGxzLnJlZ2lzdGVyX2NvbW1vbiwgQlVJTFRfSU5fTk9STUFMLAorCSAgICAgQlRfRk5fVk9JRF9QVFJfV09SRF9XT1JEX1BUUiwgQlRfRk5fVk9JRF9QVFJfV09SRF9XT1JEX1BUUiwKKwkgICAgIHRydWUsIHRydWUsIHRydWUsIEFUVFJfTk9USFJPV19MSVNULCBmYWxzZSwKKwkgICAgICF0YXJnZXRtLmhhdmVfdGxzKQorCisvKiBFeGNlcHRpb24gc3VwcG9ydC4gICovCitERUZfQlVJTFRJTl9TVFVCIChCVUlMVF9JTl9VTldJTkRfUkVTVU1FLCAiX19idWlsdGluX3Vud2luZF9yZXN1bWUiKQorREVGX0JVSUxUSU5fU1RVQiAoQlVJTFRfSU5fQ1hBX0VORF9DTEVBTlVQLCAiX19idWlsdGluX2N4YV9lbmRfY2xlYW51cCIpCitERUZfQlVJTFRJTl9TVFVCIChCVUlMVF9JTl9FSF9QT0lOVEVSLCAiX19idWlsdGluX2VoX3BvaW50ZXIiKQorREVGX0JVSUxUSU5fU1RVQiAoQlVJTFRfSU5fRUhfRklMVEVSLCAiX19idWlsdGluX2VoX2ZpbHRlciIpCitERUZfQlVJTFRJTl9TVFVCIChCVUlMVF9JTl9FSF9DT1BZX1ZBTFVFUywgIl9fYnVpbHRpbl9laF9jb3B5X3ZhbHVlcyIpCisKKy8qIFN5bmNocm9uaXphdGlvbiBQcmltaXRpdmVzLiAgKi8KKyNpbmNsdWRlICJzeW5jLWJ1aWx0aW5zLmRlZiIKKworLyogT3Blbk1QIGJ1aWx0aW5zLiAgKi8KKyNpbmNsdWRlICJvbXAtYnVpbHRpbnMuZGVmIgpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2J2ZXJzaW9uLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvYnZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTNlMWM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2J2ZXJzaW9uLmgKQEAgLTAsMCArMSw0IEBACisjZGVmaW5lIEJVSUxESU5HX0dDQ19NQUpPUiA0CisjZGVmaW5lIEJVSUxESU5HX0dDQ19NSU5PUiA1CisjZGVmaW5lIEJVSUxESU5HX0dDQ19QQVRDSExFVkVMIDMKKyNkZWZpbmUgQlVJTERJTkdfR0NDX1ZFUlNJT04gKEJVSUxESU5HX0dDQ19NQUpPUiAqIDEwMDAgKyBCVUlMRElOR19HQ0NfTUlOT1IpCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvYy1jb21tb24uZGVmIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2MtY29tbW9uLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzU5MzYzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2MtY29tbW9uLmRlZgpAQCAtMCwwICsxLDUzIEBACisvKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGFuZCBkb2N1bWVudGF0aW9uIGZvciB0aGUKKyAgIGFkZGl0aW9uYWwgdHJlZSBjb2RlcyB1c2VkIGluIHRoZSBHTlUgQyBjb21waWxlciAoc2VlIHRyZWUuZGVmCisgICBmb3IgdGhlIHN0YW5kYXJkIGNvZGVzKS4KKyAgIENvcHlyaWdodCAoQykgMTk4NywgMTk4OCwgMTk5MCwgMTk5MywgMTk5NywgMTk5OCwKKyAgIDE5OTksIDIwMDAsIDIwMDEsIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IEJlbmphbWluIENoZWxmIDxjaGVsZkBjb2Rlc291cmNlcnkuY29tPgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogVHJlZSBub2RlcyB1c2VkIGluIHRoZSBDIGZyb250ZW5kLiAgVGhlc2UgYXJlIGFsc28gc2hhcmVkIHdpdGggdGhlCisgICBDKysgYW5kIE9iamVjdGl2ZSBDIGZyb250ZW5kcy4gICovCisKKy8qIEEgQ19NQVlCRV9DT05TVF9FWFBSLCBjdXJyZW50bHkgb25seSB1c2VkIGZvciBDIGFuZCBPYmplY3RpdmUgQywKKyAgIHRyYWNrcyBpbmZvcm1hdGlvbiBhYm91dCBjb25zdGFuY3kgb2YgYW4gZXhwcmVzc2lvbiBhbmQgVkxBIHR5cGUKKyAgIHNpemVzIG9yIFZNIGV4cHJlc3Npb25zIGZyb20gdHlwZW9mIHRoYXQgbmVlZCB0byBiZSBldmFsdWF0ZWQKKyAgIGJlZm9yZSB0aGUgbWFpbiBleHByZXNzaW9uLiAgSXQgaXMgdXNlZCBkdXJpbmcgcGFyc2luZyBhbmQgcmVtb3ZlZAorICAgaW4gY19mdWxseV9mb2xkLiAgQ19NQVlCRV9DT05TVF9FWFBSX1BSRSBpcyB0aGUgZXhwcmVzc2lvbiB0bworICAgZXZhbHVhdGUgZmlyc3QsIGlmIG5vdCBOVUxMOyBDX01BWUJFX0NPTlNUX0VYUFJfRVhQUiBpcyB0aGUgbWFpbgorICAgZXhwcmVzc2lvbi4gIElmIENfTUFZQkVfQ09OU1RfRVhQUl9JTlRfT1BFUkFORFMgaXMgc2V0IHRoZW4gdGhlCisgICBleHByZXNzaW9uIG1heSBiZSB1c2VkIGluIGFuIHVuZXZhbHVhdGVkIHBhcnQgb2YgYW4gaW50ZWdlcgorICAgY29uc3RhbnQgZXhwcmVzc2lvbiwgYnV0IG5vdCBpbiBhbiBldmFsdWF0ZWQgcGFydC4gIElmCisgICBDX01BWUJFX0NPTlNUX0VYUFJfTk9OX0NPTlNUIGlzIHNldCB0aGVuIHRoZSBleHByZXNzaW9uIGNvbnRhaW5zCisgICBzb21ldGhpbmcgdGhhdCBjYW5ub3Qgb2NjdXIgaW4gYW4gZXZhbHVhdGVkIHBhcnQgb2YgYSBjb25zdGFudAorICAgZXhwcmVzc2lvbiAob3Igb3V0c2lkZSBvZiBzaXplb2YgaW4gQzkwIG1vZGUpOyBvdGhlcndpc2UgaXQgZG9lcworICAgbm90LiAgKi8KK0RFRlRSRUVDT0RFIChDX01BWUJFX0NPTlNUX0VYUFIsICJjX21heWJlX2NvbnN0X2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMikKKworLyogQW4gRVhDRVNTX1BSRUNJU0lPTl9FWFBSLCBjdXJyZW50bHkgb25seSB1c2VkIGZvciBDIGFuZCBPYmplY3RpdmUKKyAgIEMsIHJlcHJlc2VudHMgYW4gZXhwcmVzc2lvbiBldmFsdWF0ZWQgaW4gZ3JlYXRlciByYW5nZSBvciBwcmVjaXNpb24KKyAgIHRoYW4gaXRzIHR5cGUuICBUaGUgdHlwZSBvZiB0aGUgRVhDRVNTX1BSRUNJU0lPTl9FWFBSIGlzIHRoZQorICAgc2VtYW50aWMgdHlwZSB3aGlsZSB0aGUgb3BlcmFuZCByZXByZXNlbnRzIHdoYXQgaXMgYWN0dWFsbHkgYmVpbmcKKyAgIGV2YWx1YXRlZC4gICovCitERUZUUkVFQ09ERSAoRVhDRVNTX1BSRUNJU0lPTl9FWFBSLCAiZXhjZXNzX3ByZWNpc2lvbl9leHByIiwgdGNjX2V4cHJlc3Npb24sIDEpCisKKy8qCitMb2NhbCB2YXJpYWJsZXM6Cittb2RlOmMKK0VuZDoKKyovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvYy1jb21tb24uaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jLWNvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZjZhYTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvYy1jb21tb24uaApAQCAtMCwwICsxLDExODcgQEAKKy8qIERlZmluaXRpb25zIGZvciBjLWNvbW1vbi5jLgorICAgQ29weXJpZ2h0IChDKSAxOTg3LCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk3LCAxOTk4LAorICAgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCwgMjAwOQorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19DX0NPTU1PTl9ICisjZGVmaW5lIEdDQ19DX0NPTU1PTl9ICisKKyNpbmNsdWRlICJzcGxheS10cmVlLmgiCisjaW5jbHVkZSAiY3BwbGliLmgiCisjaW5jbHVkZSAiZ2djLmgiCisKKy8qIFVzYWdlIG9mIFRSRUVfTEFOR19GTEFHXz86CisgICAwOiBUUkVFX05FR0FURURfSU5UIChpbiBJTlRFR0VSX0NTVCkuCisgICAgICBJREVOVElGSUVSX01BUktFRCAodXNlZCBieSBzZWFyY2ggcm91dGluZXMpLgorICAgICAgREVDTF9QUkVUVFlfRlVOQ1RJT05fUCAoaW4gVkFSX0RFQ0wpCisgICAgICBDX01BWUJFX0NPTlNUX0VYUFJfSU5UX09QRVJBTkRTIChpbiBDX01BWUJFX0NPTlNUX0VYUFIsIGZvciBDKQorICAgMTogQ19ERUNMQVJFRF9MQUJFTF9GTEFHIChpbiBMQUJFTF9ERUNMKQorICAgICAgU1RBVEVNRU5UX0xJU1RfU1RNVF9FWFBSIChpbiBTVEFURU1FTlRfTElTVCkKKyAgICAgIENfTUFZQkVfQ09OU1RfRVhQUl9OT05fQ09OU1QgKGluIENfTUFZQkVfQ09OU1RfRVhQUiwgZm9yIEMpCisgICAyOiB1bnVzZWQKKyAgIDM6IFNUQVRFTUVOVF9MSVNUX0hBU19MQUJFTCAoaW4gU1RBVEVNRU5UX0xJU1QpCisgICA0OiB1bnVzZWQKKyovCisKKy8qIFJlc2VydmVkIGlkZW50aWZpZXJzLiAgVGhpcyBpcyB0aGUgdW5pb24gb2YgYWxsIHRoZSBrZXl3b3JkcyBmb3IgQywKKyAgIEMrKywgYW5kIE9iamVjdGl2ZS1DLiAgQWxsIHRoZSB0eXBlIG1vZGlmaWVycyBoYXZlIHRvIGJlIGluIG9uZQorICAgYmxvY2sgYXQgdGhlIGJlZ2lubmluZywgYmVjYXVzZSB0aGV5IGFyZSB1c2VkIGFzIG1hc2sgYml0cy4gIFRoZXJlCisgICBhcmUgMjcgdHlwZSBtb2RpZmllcnM7IGlmIHdlIGFkZCBtYW55IG1vcmUgd2Ugd2lsbCBoYXZlIHRvIHJlZGVzaWduCisgICB0aGUgbWFzayBtZWNoYW5pc20uICAqLworCitlbnVtIHJpZAoreworICAvKiBNb2RpZmllcnM6ICovCisgIC8qIEMsIGluIGVtcGlyaWNhbCBvcmRlciBvZiBmcmVxdWVuY3kuICAqLworICBSSURfU1RBVElDID0gMCwKKyAgUklEX1VOU0lHTkVELCBSSURfTE9ORywgICAgUklEX0NPTlNULCBSSURfRVhURVJOLAorICBSSURfUkVHSVNURVIsIFJJRF9UWVBFREVGLCBSSURfU0hPUlQsIFJJRF9JTkxJTkUsCisgIFJJRF9WT0xBVElMRSwgUklEX1NJR05FRCwgIFJJRF9BVVRPLCAgUklEX1JFU1RSSUNULAorCisgIC8qIEMgZXh0ZW5zaW9ucyAqLworICBSSURfQ09NUExFWCwgUklEX1RIUkVBRCwgUklEX1NBVCwKKworICAvKiBDKysgKi8KKyAgUklEX0ZSSUVORCwgUklEX1ZJUlRVQUwsIFJJRF9FWFBMSUNJVCwgUklEX0VYUE9SVCwgUklEX01VVEFCTEUsCisKKyAgLyogT2JqQyAqLworICBSSURfSU4sIFJJRF9PVVQsIFJJRF9JTk9VVCwgUklEX0JZQ09QWSwgUklEX0JZUkVGLCBSSURfT05FV0FZLAorCisgIC8qIEMgKHJlc2VydmVkIGFuZCBpbWFnaW5hcnkgdHlwZXMgbm90IGltcGxlbWVudGVkLCBzbyBhbnkgdXNlIGlzIGEKKyAgICAgc3ludGF4IGVycm9yKSAqLworICBSSURfSU1BR0lOQVJZLAorCisgIC8qIEMgKi8KKyAgUklEX0lOVCwgICAgIFJJRF9DSEFSLCAgIFJJRF9GTE9BVCwgICAgUklEX0RPVUJMRSwgUklEX1ZPSUQsCisgIFJJRF9FTlVNLCAgICBSSURfU1RSVUNULCBSSURfVU5JT04sICAgIFJJRF9JRiwgICAgIFJJRF9FTFNFLAorICBSSURfV0hJTEUsICAgUklEX0RPLCAgICAgUklEX0ZPUiwgICAgICBSSURfU1dJVENILCBSSURfQ0FTRSwKKyAgUklEX0RFRkFVTFQsIFJJRF9CUkVBSywgIFJJRF9DT05USU5VRSwgUklEX1JFVFVSTiwgUklEX0dPVE8sCisgIFJJRF9TSVpFT0YsCisKKyAgLyogQyBleHRlbnNpb25zICovCisgIFJJRF9BU00sICAgICAgIFJJRF9UWVBFT0YsICAgUklEX0FMSUdOT0YsICBSSURfQVRUUklCVVRFLCAgUklEX1ZBX0FSRywKKyAgUklEX0VYVEVOU0lPTiwgUklEX0lNQUdQQVJULCBSSURfUkVBTFBBUlQsIFJJRF9MQUJFTCwgICAgICBSSURfQ0hPT1NFX0VYUFIsCisgIFJJRF9UWVBFU19DT01QQVRJQkxFX1AsCisgIFJJRF9ERkxPQVQzMiwgUklEX0RGTE9BVDY0LCBSSURfREZMT0FUMTI4LAorICBSSURfRlJBQ1QsIFJJRF9BQ0NVTSwKKworICAvKiBUaGlzIG1lYW5zIHRvIHdhcm4gdGhhdCB0aGlzIGlzIGEgQysrIGtleXdvcmQsIGFuZCB0aGVuIHRyZWF0IGl0CisgICAgIGFzIGEgbm9ybWFsIGlkZW50aWZpZXIuICAqLworICBSSURfQ1hYX0NPTVBBVF9XQVJOLAorCisgIC8qIFRvbyBtYW55IHdheXMgb2YgZ2V0dGluZyB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uIGFzIGEgc3RyaW5nICovCisgIFJJRF9GVU5DVElPTl9OQU1FLCBSSURfUFJFVFRZX0ZVTkNUSU9OX05BTUUsIFJJRF9DOTlfRlVOQ1RJT05fTkFNRSwKKworICAvKiBDKysgKi8KKyAgUklEX0JPT0wsICAgICBSSURfV0NIQVIsICAgIFJJRF9DTEFTUywKKyAgUklEX1BVQkxJQywgICBSSURfUFJJVkFURSwgIFJJRF9QUk9URUNURUQsCisgIFJJRF9URU1QTEFURSwgUklEX05VTEwsICAgICBSSURfQ0FUQ0gsCisgIFJJRF9ERUxFVEUsICAgUklEX0ZBTFNFLCAgICBSSURfTkFNRVNQQUNFLAorICBSSURfTkVXLCAgICAgIFJJRF9PRkZTRVRPRiwgUklEX09QRVJBVE9SLAorICBSSURfVEhJUywgICAgIFJJRF9USFJPVywgICAgUklEX1RSVUUsCisgIFJJRF9UUlksICAgICAgUklEX1RZUEVOQU1FLCBSSURfVFlQRUlELAorICBSSURfVVNJTkcsICAgIFJJRF9DSEFSMTYsICAgUklEX0NIQVIzMiwKKworICAvKiBjYXN0cyAqLworICBSSURfQ09OU1RDQVNULCBSSURfRFlOQ0FTVCwgUklEX1JFSU5UQ0FTVCwgUklEX1NUQVRDQVNULAorCisgIC8qIEMrKyBleHRlbnNpb25zICovCisgIFJJRF9IQVNfTk9USFJPV19BU1NJR04sICAgICAgUklEX0hBU19OT1RIUk9XX0NPTlNUUlVDVE9SLAorICBSSURfSEFTX05PVEhST1dfQ09QWSwgICAgICAgIFJJRF9IQVNfVFJJVklBTF9BU1NJR04sCisgIFJJRF9IQVNfVFJJVklBTF9DT05TVFJVQ1RPUiwgUklEX0hBU19UUklWSUFMX0NPUFksCisgIFJJRF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SLCAgUklEX0hBU19WSVJUVUFMX0RFU1RSVUNUT1IsCisgIFJJRF9JU19BQlNUUkFDVCwgICAgICAgICAgICAgUklEX0lTX0JBU0VfT0YsCisgIFJJRF9JU19DT05WRVJUSUJMRV9UTywgICAgICAgUklEX0lTX0NMQVNTLAorICBSSURfSVNfRU1QVFksICAgICAgICAgICAgICAgIFJJRF9JU19FTlVNLAorICBSSURfSVNfUE9ELCAgICAgICAgICAgICAgICAgIFJJRF9JU19QT0xZTU9SUEhJQywKKyAgUklEX0lTX1NURF9MQVlPVVQsICAgICAgICAgICBSSURfSVNfVFJJVklBTCwKKyAgUklEX0lTX1VOSU9OLAorCisgIC8qIEMrKzB4ICovCisgIFJJRF9TVEFUSUNfQVNTRVJULCBSSURfQ09OU1RFWFBSLCBSSURfREVDTFRZUEUsCisKKyAgLyogT2JqZWN0aXZlLUMgKi8KKyAgUklEX0FUX0VOQ09ERSwgICBSSURfQVRfRU5ELAorICBSSURfQVRfQ0xBU1MsICAgIFJJRF9BVF9BTElBUywgICAgIFJJRF9BVF9ERUZTLAorICBSSURfQVRfUFJJVkFURSwgIFJJRF9BVF9QUk9URUNURUQsIFJJRF9BVF9QVUJMSUMsCisgIFJJRF9BVF9QUk9UT0NPTCwgUklEX0FUX1NFTEVDVE9SLAorICBSSURfQVRfVEhST1csCSAgIFJJRF9BVF9UUlksICAgICAgIFJJRF9BVF9DQVRDSCwKKyAgUklEX0FUX0ZJTkFMTFksICBSSURfQVRfU1lOQ0hST05JWkVELAorICBSSURfQVRfSU5URVJGQUNFLAorICBSSURfQVRfSU1QTEVNRU5UQVRJT04sCisKKyAgLyogTmFtZWQgYWRkcmVzcyBzdXBwb3J0LCBtYXBwaW5nIHRoZSBrZXl3b3JkIHRvIGEgcGFydGljdWxhciBuYW1lZCBhZGRyZXNzCisgICAgIG51bWJlci4gIE5hbWVkIGFkZHJlc3Mgc3BhY2UgMCBpcyByZXNlcnZlZCBmb3IgdGhlIGdlbmVyaWMgYWRkcmVzcy4gIElmCisgICAgIHRoZXJlIGFyZSBtb3JlIHRoYW4gMjU0IG5hbWVkIGFkZHJlc3NlcywgdGhlIGFkZHJfc3BhY2VfdCB0eXBlIHdpbGwgbmVlZAorICAgICB0byBiZSBncm93biBmcm9tIGFuIHVuc2lnbmVkIGNoYXIgdG8gdW5zaWduZWQgc2hvcnQuICAqLworICBSSURfQUREUl9TUEFDRV8wLAkJLyogZ2VuZXJpYyBhZGRyZXNzICovCisgIFJJRF9BRERSX1NQQUNFXzEsCisgIFJJRF9BRERSX1NQQUNFXzIsCisgIFJJRF9BRERSX1NQQUNFXzMsCisgIFJJRF9BRERSX1NQQUNFXzQsCisgIFJJRF9BRERSX1NQQUNFXzUsCisgIFJJRF9BRERSX1NQQUNFXzYsCisgIFJJRF9BRERSX1NQQUNFXzcsCisgIFJJRF9BRERSX1NQQUNFXzgsCisgIFJJRF9BRERSX1NQQUNFXzksCisgIFJJRF9BRERSX1NQQUNFXzEwLAorICBSSURfQUREUl9TUEFDRV8xMSwKKyAgUklEX0FERFJfU1BBQ0VfMTIsCisgIFJJRF9BRERSX1NQQUNFXzEzLAorICBSSURfQUREUl9TUEFDRV8xNCwKKyAgUklEX0FERFJfU1BBQ0VfMTUsCisKKyAgUklEX0ZJUlNUX0FERFJfU1BBQ0UgPSBSSURfQUREUl9TUEFDRV8wLAorICBSSURfTEFTVF9BRERSX1NQQUNFID0gUklEX0FERFJfU1BBQ0VfMTUsCisKKyAgUklEX01BWCwKKworICBSSURfRklSU1RfTU9ESUZJRVIgPSBSSURfU1RBVElDLAorICBSSURfTEFTVF9NT0RJRklFUiA9IFJJRF9PTkVXQVksCisKKyAgUklEX0ZJUlNUX0NYWDBYID0gUklEX1NUQVRJQ19BU1NFUlQsCisgIFJJRF9MQVNUX0NYWDBYID0gUklEX0RFQ0xUWVBFLAorICBSSURfRklSU1RfQVQgPSBSSURfQVRfRU5DT0RFLAorICBSSURfTEFTVF9BVCA9IFJJRF9BVF9JTVBMRU1FTlRBVElPTiwKKyAgUklEX0ZJUlNUX1BRID0gUklEX0lOLAorICBSSURfTEFTVF9QUSA9IFJJRF9PTkVXQVkKK307CisKKyNkZWZpbmUgT0JKQ19JU19BVF9LRVlXT1JEKHJpZCkgXAorICAoKHVuc2lnbmVkIGludCkgKHJpZCkgPj0gKHVuc2lnbmVkIGludCkgUklEX0ZJUlNUX0FUICYmIFwKKyAgICh1bnNpZ25lZCBpbnQpIChyaWQpIDw9ICh1bnNpZ25lZCBpbnQpIFJJRF9MQVNUX0FUKQorCisjZGVmaW5lIE9CSkNfSVNfUFFfS0VZV09SRChyaWQpIFwKKyAgKCh1bnNpZ25lZCBpbnQpIChyaWQpID49ICh1bnNpZ25lZCBpbnQpIFJJRF9GSVJTVF9QUSAmJiBcCisgICAodW5zaWduZWQgaW50KSAocmlkKSA8PSAodW5zaWduZWQgaW50KSBSSURfTEFTVF9QUSkKKworLyogVGhlIGVsZW1lbnRzIG9mIGByaWRwb2ludGVycycgYXJlIGlkZW50aWZpZXIgbm9kZXMgZm9yIHRoZSByZXNlcnZlZAorICAgdHlwZSBuYW1lcyBhbmQgc3RvcmFnZSBjbGFzc2VzLiAgSXQgaXMgaW5kZXhlZCBieSBhIFJJRF8uLi4gdmFsdWUuICAqLworZXh0ZXJuIEdUWSAoKGxlbmd0aCAoIihpbnQpIFJJRF9NQVgiKSkpIHRyZWUgKnJpZHBvaW50ZXJzOworCisvKiBTdGFuZGFyZCBuYW1lZCBvciBuYW1lbGVzcyBkYXRhIHR5cGVzIG9mIHRoZSBDIGNvbXBpbGVyLiAgKi8KKworZW51bSBjX3RyZWVfaW5kZXgKK3sKKyAgICBDVElfQ0hBUjE2X1RZUEUsCisgICAgQ1RJX0NIQVIzMl9UWVBFLAorICAgIENUSV9XQ0hBUl9UWVBFLAorICAgIENUSV9VTkRFUkxZSU5HX1dDSEFSX1RZUEUsCisgICAgQ1RJX1dJTlRfVFlQRSwKKyAgICBDVElfU0lHTkVEX1NJWkVfVFlQRSwgLyogRm9yIGZvcm1hdCBjaGVja2luZyBvbmx5LiAgKi8KKyAgICBDVElfVU5TSUdORURfUFRSRElGRl9UWVBFLCAvKiBGb3IgZm9ybWF0IGNoZWNraW5nIG9ubHkuICAqLworICAgIENUSV9JTlRNQVhfVFlQRSwKKyAgICBDVElfVUlOVE1BWF9UWVBFLAorICAgIENUSV9XSURFU1RfSU5UX0xJVF9UWVBFLAorICAgIENUSV9XSURFU1RfVUlOVF9MSVRfVFlQRSwKKworICAgIC8qIFR5cGVzIGZvciA8c3RkaW50Lmg+LCB0aGF0IG1heSBub3QgYmUgZGVmaW5lZCBvbiBhbGwKKyAgICAgICB0YXJnZXRzLiAgKi8KKyAgICBDVElfU0lHX0FUT01JQ19UWVBFLAorICAgIENUSV9JTlQ4X1RZUEUsCisgICAgQ1RJX0lOVDE2X1RZUEUsCisgICAgQ1RJX0lOVDMyX1RZUEUsCisgICAgQ1RJX0lOVDY0X1RZUEUsCisgICAgQ1RJX1VJTlQ4X1RZUEUsCisgICAgQ1RJX1VJTlQxNl9UWVBFLAorICAgIENUSV9VSU5UMzJfVFlQRSwKKyAgICBDVElfVUlOVDY0X1RZUEUsCisgICAgQ1RJX0lOVF9MRUFTVDhfVFlQRSwKKyAgICBDVElfSU5UX0xFQVNUMTZfVFlQRSwKKyAgICBDVElfSU5UX0xFQVNUMzJfVFlQRSwKKyAgICBDVElfSU5UX0xFQVNUNjRfVFlQRSwKKyAgICBDVElfVUlOVF9MRUFTVDhfVFlQRSwKKyAgICBDVElfVUlOVF9MRUFTVDE2X1RZUEUsCisgICAgQ1RJX1VJTlRfTEVBU1QzMl9UWVBFLAorICAgIENUSV9VSU5UX0xFQVNUNjRfVFlQRSwKKyAgICBDVElfSU5UX0ZBU1Q4X1RZUEUsCisgICAgQ1RJX0lOVF9GQVNUMTZfVFlQRSwKKyAgICBDVElfSU5UX0ZBU1QzMl9UWVBFLAorICAgIENUSV9JTlRfRkFTVDY0X1RZUEUsCisgICAgQ1RJX1VJTlRfRkFTVDhfVFlQRSwKKyAgICBDVElfVUlOVF9GQVNUMTZfVFlQRSwKKyAgICBDVElfVUlOVF9GQVNUMzJfVFlQRSwKKyAgICBDVElfVUlOVF9GQVNUNjRfVFlQRSwKKyAgICBDVElfSU5UUFRSX1RZUEUsCisgICAgQ1RJX1VJTlRQVFJfVFlQRSwKKworICAgIENUSV9DSEFSX0FSUkFZX1RZUEUsCisgICAgQ1RJX0NIQVIxNl9BUlJBWV9UWVBFLAorICAgIENUSV9DSEFSMzJfQVJSQVlfVFlQRSwKKyAgICBDVElfV0NIQVJfQVJSQVlfVFlQRSwKKyAgICBDVElfSU5UX0FSUkFZX1RZUEUsCisgICAgQ1RJX1NUUklOR19UWVBFLAorICAgIENUSV9DT05TVF9TVFJJTkdfVFlQRSwKKworICAgIC8qIFR5cGUgZm9yIGJvb2xlYW4gZXhwcmVzc2lvbnMgKGJvb2wgaW4gQysrLCBpbnQgaW4gQykuICAqLworICAgIENUSV9UUlVUSFZBTFVFX1RZUEUsCisgICAgQ1RJX1RSVVRIVkFMVUVfVFJVRSwKKyAgICBDVElfVFJVVEhWQUxVRV9GQUxTRSwKKworICAgIENUSV9ERUZBVUxUX0ZVTkNUSU9OX1RZUEUsCisKKyAgICAvKiBUaGVzZSBhcmUgbm90IHR5cGVzLCBidXQgd2UgaGF2ZSB0byBsb29rIHRoZW0gdXAgYWxsIHRoZSB0aW1lLiAgKi8KKyAgICBDVElfRlVOQ1RJT05fTkFNRV9ERUNMLAorICAgIENUSV9QUkVUVFlfRlVOQ1RJT05fTkFNRV9ERUNMLAorICAgIENUSV9DOTlfRlVOQ1RJT05fTkFNRV9ERUNMLAorICAgIENUSV9TQVZFRF9GVU5DVElPTl9OQU1FX0RFQ0xTLAorCisgICAgQ1RJX1ZPSURfWkVSTywKKworICAgIENUSV9OVUxMLAorCisgICAgQ1RJX01BWAorfTsKKworI2RlZmluZSBDX0NQUF9IQVNITk9ERShpZCkgXAorICAoJigoKHN0cnVjdCBjX2NvbW1vbl9pZGVudGlmaWVyICopIChpZCkpLT5ub2RlKSkKKyNkZWZpbmUgQ19SSURfQ09ERShpZCkgXAorICAoKGVudW0gcmlkKSAoKChzdHJ1Y3QgY19jb21tb25faWRlbnRpZmllciAqKSAoaWQpKS0+bm9kZS5yaWRfY29kZSkpCisjZGVmaW5lIENfU0VUX1JJRF9DT0RFKGlkLCBjb2RlKSBcCisgICgoKHN0cnVjdCBjX2NvbW1vbl9pZGVudGlmaWVyICopIChpZCkpLT5ub2RlLnJpZF9jb2RlID0gKHVuc2lnbmVkIGNoYXIpIGNvZGUpCisKKy8qIElkZW50aWZpZXIgcGFydCBjb21tb24gdG8gdGhlIEMgZnJvbnQgZW5kcy4gIEluaGVyaXRzIGZyb20KKyAgIHRyZWVfaWRlbnRpZmllciwgZGVzcGl0ZSBhcHBlYXJhbmNlcy4gICovCitzdHJ1Y3QgR1RZKCgpKSBjX2NvbW1vbl9pZGVudGlmaWVyIHsKKyAgc3RydWN0IHRyZWVfY29tbW9uIGNvbW1vbjsKKyAgc3RydWN0IGNwcF9oYXNobm9kZSBub2RlOworfTsKKworLyogQW4gZW50cnkgaW4gdGhlIHJlc2VydmVkIGtleXdvcmQgdGFibGUuICAqLworCitzdHJ1Y3QgY19jb21tb25fcmVzd29yZAoreworICBjb25zdCBjaGFyICpjb25zdCB3b3JkOworICBFTlVNX0JJVEZJRUxEKHJpZCkgY29uc3QgcmlkIDogMTY7CisgIGNvbnN0IHVuc2lnbmVkIGludCBkaXNhYmxlICAgOiAxNjsKK307CisKKy8qIERpc2FibGUgbWFzay4gIEtleXdvcmRzIGFyZSBkaXNhYmxlZCBpZiAocmVzd29yZHNbaV0uZGlzYWJsZSAmCisgICBtYXNrKSBpcyBfdHJ1ZV8uICBUaHVzIGZvciBrZXl3b3JkcyB3aGljaCBhcmUgcHJlc2VudCBpbiBhbGwKKyAgIGxhbmd1YWdlcyB0aGUgZGlzYWJsZSBmaWVsZCBpcyB6ZXJvLiAgKi8KKworI2RlZmluZSBEX0NPTkxZCQkweDAwMQkvKiBDIG9ubHkgKG5vdCBpbiBDKyspLiAgKi8KKyNkZWZpbmUgRF9DWFhPTkxZCTB4MDAyCS8qIEMrKyBvbmx5IChub3QgaW4gQykuICAqLworI2RlZmluZSBEX0M5OQkJMHgwMDQJLyogSW4gQywgQzk5IG9ubHkuICAqLworI2RlZmluZSBEX0NYWDBYICAgICAgICAgMHgwMDgJLyogSW4gQysrLCBDKyswWCBvbmx5LiAgKi8KKyNkZWZpbmUgRF9FWFQJCTB4MDEwCS8qIEdDQyBleHRlbnNpb24uICAqLworI2RlZmluZSBEX0VYVDg5CQkweDAyMAkvKiBHQ0MgZXh0ZW5zaW9uIGluY29ycG9yYXRlZCBpbiBDOTkuICAqLworI2RlZmluZSBEX0FTTQkJMHgwNDAJLyogRGlzYWJsZWQgYnkgLWZuby1hc20uICAqLworI2RlZmluZSBEX09CSkMJCTB4MDgwCS8qIEluIE9iamVjdGl2ZSBDIGFuZCBuZWl0aGVyIEMgbm9yIEMrKy4gICovCisjZGVmaW5lIERfQ1hYX09CSkMJMHgxMDAJLyogSW4gT2JqZWN0aXZlIEMsIGFuZCBDKyssIGJ1dCBub3QgQy4gICovCisjZGVmaW5lIERfQ1hYV0FSTgkweDIwMAkvKiBJbiBDIHdhcm4gd2l0aCAtV2N4eC1jb21wYXQuICAqLworCisvKiBNYWNybyBmb3IgYmFja2VuZHMgdG8gZGVmaW5lIG5hbWVkIGFkZHJlc3Mga2V5d29yZHMuICAqLworI2RlZmluZSBBRERSX1NQQUNFX0tFWVdPUkQoU1RSSU5HLCBWQUxVRSkgXAorICB7IFNUUklORywgUklEX0ZJUlNUX0FERFJfU1BBQ0UgKyAoVkFMVUUpLCBEX0NPTkxZIHwgRF9FWFQgfQorCisvKiBUaGUgcmVzZXJ2ZWQga2V5d29yZCB0YWJsZS4gICovCitleHRlcm4gY29uc3Qgc3RydWN0IGNfY29tbW9uX3Jlc3dvcmQgY19jb21tb25fcmVzd29yZHNbXTsKKworLyogVGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgcmVzZXJ2ZWQga2V5d29yZCB0YWJsZS4gICovCitleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IG51bV9jX2NvbW1vbl9yZXN3b3JkczsKKworI2RlZmluZSBjaGFyMTZfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfQ0hBUjE2X1RZUEVdCisjZGVmaW5lIGNoYXIzMl90eXBlX25vZGUJCWNfZ2xvYmFsX3RyZWVzW0NUSV9DSEFSMzJfVFlQRV0KKyNkZWZpbmUgd2NoYXJfdHlwZV9ub2RlCQkJY19nbG9iYWxfdHJlZXNbQ1RJX1dDSEFSX1RZUEVdCisjZGVmaW5lIHVuZGVybHlpbmdfd2NoYXJfdHlwZV9ub2RlCWNfZ2xvYmFsX3RyZWVzW0NUSV9VTkRFUkxZSU5HX1dDSEFSX1RZUEVdCisjZGVmaW5lIHdpbnRfdHlwZV9ub2RlCQkJY19nbG9iYWxfdHJlZXNbQ1RJX1dJTlRfVFlQRV0KKyNkZWZpbmUgc2lnbmVkX3NpemVfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfU0lHTkVEX1NJWkVfVFlQRV0KKyNkZWZpbmUgdW5zaWduZWRfcHRyZGlmZl90eXBlX25vZGUJY19nbG9iYWxfdHJlZXNbQ1RJX1VOU0lHTkVEX1BUUkRJRkZfVFlQRV0KKyNkZWZpbmUgaW50bWF4X3R5cGVfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX0lOVE1BWF9UWVBFXQorI2RlZmluZSB1aW50bWF4X3R5cGVfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX1VJTlRNQVhfVFlQRV0KKyNkZWZpbmUgd2lkZXN0X2ludGVnZXJfbGl0ZXJhbF90eXBlX25vZGUgY19nbG9iYWxfdHJlZXNbQ1RJX1dJREVTVF9JTlRfTElUX1RZUEVdCisjZGVmaW5lIHdpZGVzdF91bnNpZ25lZF9saXRlcmFsX3R5cGVfbm9kZSBjX2dsb2JhbF90cmVlc1tDVElfV0lERVNUX1VJTlRfTElUX1RZUEVdCisKKyNkZWZpbmUgc2lnX2F0b21pY190eXBlX25vZGUJCWNfZ2xvYmFsX3RyZWVzW0NUSV9TSUdfQVRPTUlDX1RZUEVdCisjZGVmaW5lIGludDhfdHlwZV9ub2RlCQkJY19nbG9iYWxfdHJlZXNbQ1RJX0lOVDhfVFlQRV0KKyNkZWZpbmUgaW50MTZfdHlwZV9ub2RlCQkJY19nbG9iYWxfdHJlZXNbQ1RJX0lOVDE2X1RZUEVdCisjZGVmaW5lIGludDMyX3R5cGVfbm9kZQkJCWNfZ2xvYmFsX3RyZWVzW0NUSV9JTlQzMl9UWVBFXQorI2RlZmluZSBpbnQ2NF90eXBlX25vZGUJCQljX2dsb2JhbF90cmVlc1tDVElfSU5UNjRfVFlQRV0KKyNkZWZpbmUgdWludDhfdHlwZV9ub2RlCQkJY19nbG9iYWxfdHJlZXNbQ1RJX1VJTlQ4X1RZUEVdCisjZGVmaW5lIHVpbnQxNl90eXBlX25vZGUJCWNfZ2xvYmFsX3RyZWVzW0NUSV9VSU5UMTZfVFlQRV0KKyNkZWZpbmUgY191aW50MzJfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfVUlOVDMyX1RZUEVdCisjZGVmaW5lIGNfdWludDY0X3R5cGVfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX1VJTlQ2NF9UWVBFXQorI2RlZmluZSBpbnRfbGVhc3Q4X3R5cGVfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX0lOVF9MRUFTVDhfVFlQRV0KKyNkZWZpbmUgaW50X2xlYXN0MTZfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfSU5UX0xFQVNUMTZfVFlQRV0KKyNkZWZpbmUgaW50X2xlYXN0MzJfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfSU5UX0xFQVNUMzJfVFlQRV0KKyNkZWZpbmUgaW50X2xlYXN0NjRfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfSU5UX0xFQVNUNjRfVFlQRV0KKyNkZWZpbmUgdWludF9sZWFzdDhfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfVUlOVF9MRUFTVDhfVFlQRV0KKyNkZWZpbmUgdWludF9sZWFzdDE2X3R5cGVfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX1VJTlRfTEVBU1QxNl9UWVBFXQorI2RlZmluZSB1aW50X2xlYXN0MzJfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfVUlOVF9MRUFTVDMyX1RZUEVdCisjZGVmaW5lIHVpbnRfbGVhc3Q2NF90eXBlX25vZGUJCWNfZ2xvYmFsX3RyZWVzW0NUSV9VSU5UX0xFQVNUNjRfVFlQRV0KKyNkZWZpbmUgaW50X2Zhc3Q4X3R5cGVfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX0lOVF9GQVNUOF9UWVBFXQorI2RlZmluZSBpbnRfZmFzdDE2X3R5cGVfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX0lOVF9GQVNUMTZfVFlQRV0KKyNkZWZpbmUgaW50X2Zhc3QzMl90eXBlX25vZGUJCWNfZ2xvYmFsX3RyZWVzW0NUSV9JTlRfRkFTVDMyX1RZUEVdCisjZGVmaW5lIGludF9mYXN0NjRfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfSU5UX0ZBU1Q2NF9UWVBFXQorI2RlZmluZSB1aW50X2Zhc3Q4X3R5cGVfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX1VJTlRfRkFTVDhfVFlQRV0KKyNkZWZpbmUgdWludF9mYXN0MTZfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfVUlOVF9GQVNUMTZfVFlQRV0KKyNkZWZpbmUgdWludF9mYXN0MzJfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfVUlOVF9GQVNUMzJfVFlQRV0KKyNkZWZpbmUgdWludF9mYXN0NjRfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfVUlOVF9GQVNUNjRfVFlQRV0KKyNkZWZpbmUgaW50cHRyX3R5cGVfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX0lOVFBUUl9UWVBFXQorI2RlZmluZSB1aW50cHRyX3R5cGVfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX1VJTlRQVFJfVFlQRV0KKworI2RlZmluZSB0cnV0aHZhbHVlX3R5cGVfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX1RSVVRIVkFMVUVfVFlQRV0KKyNkZWZpbmUgdHJ1dGh2YWx1ZV90cnVlX25vZGUJCWNfZ2xvYmFsX3RyZWVzW0NUSV9UUlVUSFZBTFVFX1RSVUVdCisjZGVmaW5lIHRydXRodmFsdWVfZmFsc2Vfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX1RSVVRIVkFMVUVfRkFMU0VdCisKKyNkZWZpbmUgY2hhcl9hcnJheV90eXBlX25vZGUJCWNfZ2xvYmFsX3RyZWVzW0NUSV9DSEFSX0FSUkFZX1RZUEVdCisjZGVmaW5lIGNoYXIxNl9hcnJheV90eXBlX25vZGUJCWNfZ2xvYmFsX3RyZWVzW0NUSV9DSEFSMTZfQVJSQVlfVFlQRV0KKyNkZWZpbmUgY2hhcjMyX2FycmF5X3R5cGVfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX0NIQVIzMl9BUlJBWV9UWVBFXQorI2RlZmluZSB3Y2hhcl9hcnJheV90eXBlX25vZGUJCWNfZ2xvYmFsX3RyZWVzW0NUSV9XQ0hBUl9BUlJBWV9UWVBFXQorI2RlZmluZSBpbnRfYXJyYXlfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfSU5UX0FSUkFZX1RZUEVdCisjZGVmaW5lIHN0cmluZ190eXBlX25vZGUJCWNfZ2xvYmFsX3RyZWVzW0NUSV9TVFJJTkdfVFlQRV0KKyNkZWZpbmUgY29uc3Rfc3RyaW5nX3R5cGVfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX0NPTlNUX1NUUklOR19UWVBFXQorCisjZGVmaW5lIGRlZmF1bHRfZnVuY3Rpb25fdHlwZQkJY19nbG9iYWxfdHJlZXNbQ1RJX0RFRkFVTFRfRlVOQ1RJT05fVFlQRV0KKworI2RlZmluZSBmdW5jdGlvbl9uYW1lX2RlY2xfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX0ZVTkNUSU9OX05BTUVfREVDTF0KKyNkZWZpbmUgcHJldHR5X2Z1bmN0aW9uX25hbWVfZGVjbF9ub2RlCWNfZ2xvYmFsX3RyZWVzW0NUSV9QUkVUVFlfRlVOQ1RJT05fTkFNRV9ERUNMXQorI2RlZmluZSBjOTlfZnVuY3Rpb25fbmFtZV9kZWNsX25vZGUJCWNfZ2xvYmFsX3RyZWVzW0NUSV9DOTlfRlVOQ1RJT05fTkFNRV9ERUNMXQorI2RlZmluZSBzYXZlZF9mdW5jdGlvbl9uYW1lX2RlY2xzCWNfZ2xvYmFsX3RyZWVzW0NUSV9TQVZFRF9GVU5DVElPTl9OQU1FX0RFQ0xTXQorCisvKiBBIG5vZGUgZm9yIGAoKHZvaWQpIDApJy4gICovCisjZGVmaW5lIHZvaWRfemVyb19ub2RlICAgICAgICAgICAgICAgICAgY19nbG9iYWxfdHJlZXNbQ1RJX1ZPSURfWkVST10KKworLyogVGhlIG5vZGUgZm9yIEMrKyBgX19udWxsJy4gICovCisjZGVmaW5lIG51bGxfbm9kZSAgICAgICAgICAgICAgICAgICAgICAgY19nbG9iYWxfdHJlZXNbQ1RJX05VTExdCisKK2V4dGVybiBHVFkoKCkpIHRyZWUgY19nbG9iYWxfdHJlZXNbQ1RJX01BWF07CisKKy8qIEluIGEgUkVDT1JEX1RZUEUsIGEgc29ydGVkIGFycmF5IG9mIHRoZSBmaWVsZHMgb2YgdGhlIHR5cGUsIG5vdCBhCisgICB0cmVlIGZvciBzaXplIHJlYXNvbnMuICAqLworc3RydWN0IEdUWSgoKSkgc29ydGVkX2ZpZWxkc190eXBlIHsKKyAgaW50IGxlbjsKKyAgdHJlZSBHVFkoKGxlbmd0aCAoIiVoLmxlbiIpKSkgZWx0c1sxXTsKK307CisKKy8qIE1hcmsgd2hpY2ggbGFiZWxzIGFyZSBleHBsaWNpdGx5IGRlY2xhcmVkLgorICAgVGhlc2UgbWF5IGJlIHNoYWRvd2VkLCBhbmQgbWF5IGJlIHJlZmVyZW5jZWQgZnJvbSBuZXN0ZWQgZnVuY3Rpb25zLiAgKi8KKyNkZWZpbmUgQ19ERUNMQVJFRF9MQUJFTF9GTEFHKGxhYmVsKSBUUkVFX0xBTkdfRkxBR18xIChsYWJlbCkKKwordHlwZWRlZiBlbnVtIGNfbGFuZ3VhZ2Vfa2luZAoreworICBjbGtfYwkJPSAwLAkJLyogQzkwLCBDOTQgb3IgQzk5ICovCisgIGNsa19vYmpjCT0gMSwJCS8qIGNsa19jIHdpdGggT2JqQyBmZWF0dXJlcy4gICovCisgIGNsa19jeHgJPSAyLAkJLyogQU5TSS9JU08gQysrICovCisgIGNsa19vYmpjeHgJPSAzCQkvKiBjbGtfY3h4IHdpdGggT2JqQyBmZWF0dXJlcy4gICovCit9CitjX2xhbmd1YWdlX2tpbmQ7CisKKy8qIFRvIHRlc3QgZm9yIGEgc3BlY2lmaWMgbGFuZ3VhZ2UgdXNlIGNfbGFuZ3VhZ2UsIGRlZmluZWQgYnkgZWFjaAorICAgZnJvbnQgZW5kLiAgRm9yICJPYmpDIGZlYXR1cmVzIiBvciAibm90IEMrKyIgdXNlIHRoZSBtYWNyb3MuICAqLworZXh0ZXJuIGNfbGFuZ3VhZ2Vfa2luZCBjX2xhbmd1YWdlOworCisjZGVmaW5lIGNfZGlhbGVjdF9jeHgoKQkJKChjX2xhbmd1YWdlICYgY2xrX2N4eCkgIT0gMCkKKyNkZWZpbmUgY19kaWFsZWN0X29iamMoKQkoKGNfbGFuZ3VhZ2UgJiBjbGtfb2JqYykgIT0gMCkKKworLyogVGhlIHZhcmlvdXMgbmFtZSBvZiBvcGVyYXRvciB0aGF0IGFwcGVhcnMgaW4gZXJyb3IgbWVzc2FnZXMuICovCit0eXBlZGVmIGVudW0gcmVmX29wZXJhdG9yIHsKKyAgLyogTlVMTCAqLworICBST19OVUxMLAorICAvKiBhcnJheSBpbmRleGluZyAqLworICBST19BUlJBWV9JTkRFWElORywKKyAgLyogdW5hcnkgKiAqLworICBST19VTkFSWV9TVEFSLAorICAvKiAtPiAqLworICBST19BUlJPVywKKyAgLyogaW1wbGljaXQgY29udmVyc2lvbiAqLworICBST19JTVBMSUNJVF9DT05WRVJTSU9OCit9IHJlZl9vcGVyYXRvcjsKKworLyogSW5mb3JtYXRpb24gYWJvdXQgYSBzdGF0ZW1lbnQgdHJlZS4gICovCisKK3N0cnVjdCBHVFkoKCkpIHN0bXRfdHJlZV9zIHsKKyAgLyogVGhlIGN1cnJlbnQgc3RhdGVtZW50IGxpc3QgYmVpbmcgY29sbGVjdGVkLiAgKi8KKyAgdHJlZSB4X2N1cl9zdG10X2xpc3Q7CisKKyAgLyogSW4gQysrLCBOb256ZXJvIGlmIHdlIHNob3VsZCB0cmVhdCBzdGF0ZW1lbnRzIGFzIGZ1bGwKKyAgICAgZXhwcmVzc2lvbnMuICBJbiBwYXJ0aWN1bGFyLCB0aGlzIHZhcmlhYmxlIGlzIG5vLXplcm8gaWYgYXQgdGhlCisgICAgIGVuZCBvZiBhIHN0YXRlbWVudCB3ZSBzaG91bGQgZGVzdHJveSBhbnkgdGVtcG9yYXJpZXMgY3JlYXRlZAorICAgICBkdXJpbmcgdGhhdCBzdGF0ZW1lbnQuICBTaW1pbGFybHksIGlmLCBhdCB0aGUgZW5kIG9mIGEgYmxvY2ssIHdlCisgICAgIHNob3VsZCBkZXN0cm95IGFueSBsb2NhbCB2YXJpYWJsZXMgaW4gdGhpcyBibG9jay4gIE5vcm1hbGx5LCB0aGlzCisgICAgIHZhcmlhYmxlIGlzIG5vbnplcm8sIHNpbmNlIHRob3NlIGFyZSB0aGUgbm9ybWFsIHNlbWFudGljcyBvZgorICAgICBDKysuCisKKyAgICAgSG93ZXZlciwgaW4gb3JkZXIgdG8gcmVwcmVzZW50IGFnZ3JlZ2F0ZSBpbml0aWFsaXphdGlvbiBjb2RlIGFzCisgICAgIHRyZWUgc3RydWN0dXJlLCB3ZSB1c2Ugc3RhdGVtZW50LWV4cHJlc3Npb25zLiAgVGhlIHN0YXRlbWVudHMKKyAgICAgd2l0aGluIHRoZSBzdGF0ZW1lbnQgZXhwcmVzc2lvbiBzaG91bGQgbm90IHJlc3VsdCBpbiBjbGVhbnVwcworICAgICBiZWluZyBydW4gdW50aWwgdGhlIGVudGlyZSBlbmNsb3Npbmcgc3RhdGVtZW50IGlzIGNvbXBsZXRlLgorCisgICAgIFRoaXMgZmxhZyBoYXMgbm8gZWZmZWN0IGluIEMuICAqLworICBpbnQgc3RtdHNfYXJlX2Z1bGxfZXhwcnNfcDsKK307CisKK3R5cGVkZWYgc3RydWN0IHN0bXRfdHJlZV9zICpzdG10X3RyZWU7CisKKy8qIEdsb2JhbCBzdGF0ZSBwZXJ0aW5lbnQgdG8gdGhlIGN1cnJlbnQgZnVuY3Rpb24uICBTb21lIEMgZGlhbGVjdHMKKyAgIGV4dGVuZCB0aGlzIHN0cnVjdHVyZSB3aXRoIGFkZGl0aW9uYWwgZmllbGRzLiAgKi8KKworc3RydWN0IEdUWSgoKSkgY19sYW5ndWFnZV9mdW5jdGlvbiB7CisgIC8qIFdoaWxlIHdlIGFyZSBwYXJzaW5nIHRoZSBmdW5jdGlvbiwgdGhpcyBjb250YWlucyBpbmZvcm1hdGlvbgorICAgICBhYm91dCB0aGUgc3RhdGVtZW50LXRyZWUgdGhhdCB3ZSBhcmUgYnVpbGRpbmcuICAqLworICBzdHJ1Y3Qgc3RtdF90cmVlX3MgeF9zdG10X3RyZWU7Cit9OworCisvKiBXaGVuIGJ1aWxkaW5nIGEgc3RhdGVtZW50LXRyZWUsIHRoaXMgaXMgdGhlIGN1cnJlbnQgc3RhdGVtZW50IGxpc3QKKyAgIGJlaW5nIGNvbGxlY3RlZC4gIEl0J3MgVFJFRV9DSEFJTiBpcyBhIGJhY2stcG9pbnRlciB0byB0aGUgcHJldmlvdXMKKyAgIHN0YXRlbWVudCBsaXN0LiAgKi8KKworI2RlZmluZSBjdXJfc3RtdF9saXN0IChjdXJyZW50X3N0bXRfdHJlZSAoKS0+eF9jdXJfc3RtdF9saXN0KQorCisvKiBMYW5ndWFnZS1zcGVjaWZpYyBob29rcy4gICovCisKKy8qIElmIG5vbi1OVUxMLCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhIHByZWNvbXBpbGUgaGVhZGVyIGZpbGUKKyAgIGlzIGxvYWRlZC4gICovCitleHRlcm4gdm9pZCAoKmxhbmdfcG9zdF9wY2hfbG9hZCkgKHZvaWQpOworCitleHRlcm4gdm9pZCBwdXNoX2ZpbGVfc2NvcGUgKHZvaWQpOworZXh0ZXJuIHZvaWQgcG9wX2ZpbGVfc2NvcGUgKHZvaWQpOworZXh0ZXJuIHN0bXRfdHJlZSBjdXJyZW50X3N0bXRfdHJlZSAodm9pZCk7CitleHRlcm4gdHJlZSBwdXNoX3N0bXRfbGlzdCAodm9pZCk7CitleHRlcm4gdHJlZSBwb3Bfc3RtdF9saXN0ICh0cmVlKTsKK2V4dGVybiB0cmVlIGFkZF9zdG10ICh0cmVlKTsKK2V4dGVybiB2b2lkIHB1c2hfY2xlYW51cCAodHJlZSwgdHJlZSwgYm9vbCk7CitleHRlcm4gdHJlZSBwdXNoZGVjbF90b3BfbGV2ZWwgKHRyZWUpOworZXh0ZXJuIHRyZWUgcHVzaGRlY2wgKHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfbW9kaWZ5X2V4cHIgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUsIGVudW0gdHJlZV9jb2RlLAorCQkJICAgICAgIGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfaW5kaXJlY3RfcmVmIChsb2NhdGlvbl90LCB0cmVlLCByZWZfb3BlcmF0b3IpOworCitleHRlcm4gaW50IGNfZXhwYW5kX2RlY2wgKHRyZWUpOworCitleHRlcm4gaW50IGZpZWxkX2RlY2xfY21wIChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CitleHRlcm4gdm9pZCByZXNvcnRfc29ydGVkX2ZpZWxkcyAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsCisJCQkJICB2b2lkICopOworZXh0ZXJuIGJvb2wgaGFzX2NfbGlua2FnZSAoY29uc3RfdHJlZSBkZWNsKTsKKwwKKy8qIFN3aXRjaGVzIGNvbW1vbiB0byB0aGUgQyBmcm9udCBlbmRzLiAgKi8KKworLyogTm9uemVybyBpZiBwcmVwcmVwcm9jZXNzaW5nIG9ubHkuICAqLworCitleHRlcm4gaW50IGZsYWdfcHJlcHJvY2Vzc19vbmx5OworCisvKiBaZXJvIG1lYW5zIHRoYXQgZmFzdGVyLCAuLi5Ob25OaWwgdmFyaWFudHMgb2Ygb2JqY19tc2dTZW5kLi4uCisgICBjYWxscyB3aWxsIGJlIHVzZWQgaW4gT2JqQzsgcGFzc2luZyBuaWwgcmVjZWl2ZXJzIHRvIHN1Y2ggY2FsbHMKKyAgIHdpbGwgbW9zdCBsaWtlbHkgcmVzdWx0IGluIGNyYXNoZXMuICAqLworZXh0ZXJuIGludCBmbGFnX25pbF9yZWNlaXZlcnM7CisKKy8qIE5vbnplcm8gbWVhbnMgdGhhdCB3ZSB3aWxsIGFsbG93IG5ldyBPYmpDIGV4Y2VwdGlvbiBzeW50YXggKEB0aHJvdywKKyAgIEB0cnksIGV0Yy4pIGluIHNvdXJjZSBjb2RlLiAgKi8KK2V4dGVybiBpbnQgZmxhZ19vYmpjX2V4Y2VwdGlvbnM7CisKKy8qIE5vbnplcm8gbWVhbnMgdGhhdCB3ZSBnZW5lcmF0ZSBOZVhUIHNldGptcCBiYXNlZCBleGNlcHRpb25zLiAgKi8KK2V4dGVybiBpbnQgZmxhZ19vYmpjX3NqbGpfZXhjZXB0aW9uczsKKworLyogTm9uemVybyBtZWFucyB0aGF0IGNvZGUgZ2VuZXJhdGlvbiB3aWxsIGJlIGFsdGVyZWQgdG8gc3VwcG9ydAorICAgInplcm8tbGluayIgZXhlY3V0aW9uLiAgVGhpcyBjdXJyZW50bHkgYWZmZWN0cyBPYmpDIG9ubHksIGJ1dCBtYXkKKyAgIGFmZmVjdCBvdGhlciBsYW5ndWFnZXMgaW4gdGhlIGZ1dHVyZS4gICovCitleHRlcm4gaW50IGZsYWdfemVyb19saW5rOworCisvKiBOb256ZXJvIG1lYW5zIGVtaXQgYW4gJ19fT0JKQywgX19pbWFnZV9pbmZvJyBmb3IgdGhlIGN1cnJlbnQgdHJhbnNsYXRpb24KKyAgIHVuaXQuICBJdCB3aWxsIGluZm9ybSB0aGUgT2JqQyBydW50aW1lIHRoYXQgY2xhc3MgZGVmaW5pdGlvbihzKSBoZXJlaW4KKyAgIGNvbnRhaW5lZCBhcmUgdG8gcmVwbGFjZSBvbmUocykgcHJldmlvdXNseSBsb2FkZWQuICAqLworZXh0ZXJuIGludCBmbGFnX3JlcGxhY2Vfb2JqY19jbGFzc2VzOworCisvKiBOb256ZXJvIG1lYW5zIGRvbid0IG91dHB1dCBsaW5lIG51bWJlciBpbmZvcm1hdGlvbi4gICovCisKK2V4dGVybiBjaGFyIGZsYWdfbm9fbGluZV9jb21tYW5kczsKKworLyogTm9uemVybyBjYXVzZXMgLUUgb3V0cHV0IG5vdCB0byBiZSBkb25lLCBidXQgZGlyZWN0aXZlcyBzdWNoIGFzCisgICAjZGVmaW5lIHRoYXQgaGF2ZSBzaWRlIGVmZmVjdHMgYXJlIHN0aWxsIG9iZXllZC4gICovCisKK2V4dGVybiBjaGFyIGZsYWdfbm9fb3V0cHV0OworCisvKiBOb256ZXJvIG1lYW5zIGR1bXAgbWFjcm9zIGluIHNvbWUgZmFzaGlvbjsgY29udGFpbnMgdGhlICdEJywgJ00nLAorICAgJ04nIG9yICdVJyBvZiB0aGUgY29tbWFuZCBsaW5lIHN3aXRjaC4gICovCisKK2V4dGVybiBjaGFyIGZsYWdfZHVtcF9tYWNyb3M7CisKKy8qIE5vbnplcm8gbWVhbnMgcGFzcyAjaW5jbHVkZSBsaW5lcyB0aHJvdWdoIHRvIHRoZSBvdXRwdXQuICAqLworCitleHRlcm4gY2hhciBmbGFnX2R1bXBfaW5jbHVkZXM7CisKKy8qIE5vbnplcm8gbWVhbnMgcHJvY2VzcyBQQ0ggZmlsZXMgd2hpbGUgcHJlcHJvY2Vzc2luZy4gICovCisKK2V4dGVybiBib29sIGZsYWdfcGNoX3ByZXByb2Nlc3M7CisKKy8qIFRoZSBmaWxlIG5hbWUgdG8gd2hpY2ggd2Ugc2hvdWxkIHdyaXRlIGEgcHJlY29tcGlsZWQgaGVhZGVyLCBvcgorICAgTlVMTCBpZiBubyBoZWFkZXIgd2lsbCBiZSB3cml0dGVuIGluIHRoaXMgY29tcGlsZS4gICovCisKK2V4dGVybiBjb25zdCBjaGFyICpwY2hfZmlsZTsKKworLyogTm9uemVybyBpZiBhbiBJU08gc3RhbmRhcmQgd2FzIHNlbGVjdGVkLiAgSXQgcmVqZWN0cyBtYWNyb3MgaW4gdGhlCisgICB1c2VyJ3MgbmFtZXNwYWNlLiAgKi8KKworZXh0ZXJuIGludCBmbGFnX2lzbzsKKworLyogTm9uemVybyBpZiAtdW5kZWYgd2FzIGdpdmVuLiAgSXQgc3VwcHJlc3NlcyB0YXJnZXQgYnVpbHQtaW4gbWFjcm9zCisgICBhbmQgYXNzZXJ0aW9ucy4gICovCisKK2V4dGVybiBpbnQgZmxhZ191bmRlZjsKKworLyogTm9uemVybyBtZWFucyBkb24ndCByZWNvZ25pemUgdGhlIG5vbi1BTlNJIGJ1aWx0aW4gZnVuY3Rpb25zLiAgKi8KKworZXh0ZXJuIGludCBmbGFnX25vX2J1aWx0aW47CisKKy8qIE5vbnplcm8gbWVhbnMgZG9uJ3QgcmVjb2duaXplIHRoZSBub24tQU5TSSBidWlsdGluIGZ1bmN0aW9ucy4KKyAgIC1hbnNpIHNldHMgdGhpcy4gICovCisKK2V4dGVybiBpbnQgZmxhZ19ub19ub25hbnNpX2J1aWx0aW47CisKKy8qIE5vbnplcm8gbWVhbnMgZ2l2ZSBgZG91YmxlJyB0aGUgc2FtZSBzaXplIGFzIGBmbG9hdCcuICAqLworCitleHRlcm4gaW50IGZsYWdfc2hvcnRfZG91YmxlOworCisvKiBOb256ZXJvIG1lYW5zIGdpdmUgYHdjaGFyX3QnIHRoZSBzYW1lIHNpemUgYXMgYHNob3J0Jy4gICovCisKK2V4dGVybiBpbnQgZmxhZ19zaG9ydF93Y2hhcjsKKworLyogTm9uemVybyBtZWFucyBhbGxvdyBpbXBsaWNpdCBjb252ZXJzaW9ucyBiZXR3ZWVuIHZlY3RvcnMgd2l0aAorICAgZGlmZmVyaW5nIG51bWJlcnMgb2Ygc3VicGFydHMgYW5kL29yIGRpZmZlcmluZyBlbGVtZW50IHR5cGVzLiAgKi8KK2V4dGVybiBpbnQgZmxhZ19sYXhfdmVjdG9yX2NvbnZlcnNpb25zOworCisvKiBOb256ZXJvIG1lYW5zIGFsbG93IE1pY3Jvc29mdCBleHRlbnNpb25zIHdpdGhvdXQgd2FybmluZ3Mgb3IgZXJyb3JzLiAgKi8KK2V4dGVybiBpbnQgZmxhZ19tc19leHRlbnNpb25zOworCisvKiBOb256ZXJvIG1lYW5zIGRvbid0IHJlY29nbml6ZSB0aGUga2V5d29yZCBgYXNtJy4gICovCisKK2V4dGVybiBpbnQgZmxhZ19ub19hc207CisKKy8qIE5vbnplcm8gbWVhbnMgZ2l2ZSBzdHJpbmcgY29uc3RhbnRzIHRoZSB0eXBlIGBjb25zdCBjaGFyIConLCBhcyBtYW5kYXRlZAorICAgYnkgdGhlIHN0YW5kYXJkLiAgKi8KKworZXh0ZXJuIGludCBmbGFnX2NvbnN0X3N0cmluZ3M7CisKKy8qIE5vbnplcm8gbWVhbnMgdG8gdHJlYXQgYml0ZmllbGRzIGFzIHNpZ25lZCB1bmxlc3MgdGhleSBzYXkgYHVuc2lnbmVkJy4gICovCisKK2V4dGVybiBpbnQgZmxhZ19zaWduZWRfYml0ZmllbGRzOworCisvKiBXYXJuIGFib3V0ICNwcmFnbWEgZGlyZWN0aXZlcyB0aGF0IGFyZSBub3QgcmVjb2duaXplZC4gICovCisKK2V4dGVybiBpbnQgd2Fybl91bmtub3duX3ByYWdtYXM7IC8qIFRyaSBzdGF0ZSB2YXJpYWJsZS4gICovCisKKy8qIFdhcm4gYWJvdXQgZm9ybWF0L2FyZ3VtZW50IGFub21hbGllcyBpbiBjYWxscyB0byBmb3JtYXR0ZWQgSS9PIGZ1bmN0aW9ucworICAgKCpwcmludGYsICpzY2FuZiwgc3RyZnRpbWUsIHN0cmZtb24sIGV0Yy4pLiAgKi8KKworZXh0ZXJuIGludCB3YXJuX2Zvcm1hdDsKKworCisvKiBDL09iakMgbGFuZ3VhZ2Ugb3B0aW9uIHZhcmlhYmxlcy4gICovCisKKworLyogTm9uemVybyBtZWFucyBhbGxvdyB0eXBlIG1pc21hdGNoZXMgaW4gY29uZGl0aW9uYWwgZXhwcmVzc2lvbnM7CisgICBqdXN0IG1ha2UgdGhlaXIgdmFsdWVzIGB2b2lkJy4gICovCisKK2V4dGVybiBpbnQgZmxhZ19jb25kX21pc21hdGNoOworCisvKiBOb256ZXJvIG1lYW5zIGVuYWJsZSBDODkgQW1lbmRtZW50IDEgZmVhdHVyZXMuICAqLworCitleHRlcm4gaW50IGZsYWdfaXNvYzk0OworCisvKiBOb256ZXJvIG1lYW5zIHVzZSB0aGUgSVNPIEM5OSBkaWFsZWN0IG9mIEMuICAqLworCitleHRlcm4gaW50IGZsYWdfaXNvYzk5OworCisvKiBOb256ZXJvIG1lYW5zIHRoYXQgd2UgaGF2ZSBidWlsdGluIGZ1bmN0aW9ucywgYW5kIG1haW4gaXMgYW4gaW50LiAgKi8KKworZXh0ZXJuIGludCBmbGFnX2hvc3RlZDsKKworLyogT2JqQyBsYW5ndWFnZSBvcHRpb24gdmFyaWFibGVzLiAgKi8KKworCisvKiBPcGVuIGFuZCBjbG9zZSB0aGUgZmlsZSBmb3Igb3V0cHV0dGluZyBjbGFzcyBkZWNsYXJhdGlvbnMsIGlmCisgICByZXF1ZXN0ZWQgKE9iakMpLiAgKi8KKworZXh0ZXJuIGludCBmbGFnX2dlbl9kZWNsYXJhdGlvbjsKKworLyogVGVsbHMgdGhlIGNvbXBpbGVyIHRoYXQgdGhpcyBpcyBhIHNwZWNpYWwgcnVuLiAgRG8gbm90IHBlcmZvcm0gYW55CisgICBjb21waWxpbmcsIGluc3RlYWQgd2UgYXJlIHRvIHRlc3Qgc29tZSBwbGF0Zm9ybSBkZXBlbmRlbnQgZmVhdHVyZXMKKyAgIGFuZCBvdXRwdXQgYSBDIGhlYWRlciBmaWxlIHdpdGggYXBwcm9wcmlhdGUgZGVmaW5pdGlvbnMuICAqLworCitleHRlcm4gaW50IHByaW50X3N0cnVjdF92YWx1ZXM7CisKKy8qID8/Py4gIFVuZG9jdW1lbnRlZC4gICovCisKK2V4dGVybiBjb25zdCBjaGFyICpjb25zdGFudF9zdHJpbmdfY2xhc3NfbmFtZTsKKworCisvKiBDKysgbGFuZ3VhZ2Ugb3B0aW9uIHZhcmlhYmxlcy4gICovCisKKworLyogTm9uemVybyBtZWFucyBkb24ndCByZWNvZ25pemUgYW55IGV4dGVuc2lvbiBrZXl3b3Jkcy4gICovCisKK2V4dGVybiBpbnQgZmxhZ19ub19nbnVfa2V5d29yZHM7CisKKy8qIE5vbnplcm8gbWVhbnMgZG8gZW1pdCBleHBvcnRlZCBpbXBsZW1lbnRhdGlvbnMgb2YgZnVuY3Rpb25zIGV2ZW4gaWYKKyAgIHRoZXkgY2FuIGJlIGlubGluZWQuICAqLworCitleHRlcm4gaW50IGZsYWdfaW1wbGVtZW50X2lubGluZXM7CisKKy8qIE5vbnplcm8gbWVhbnMgdGhhdCBpbXBsaWNpdCBpbnN0YW50aWF0aW9ucyB3aWxsIGJlIGVtaXR0ZWQgaWYgbmVlZGVkLiAgKi8KKworZXh0ZXJuIGludCBmbGFnX2ltcGxpY2l0X3RlbXBsYXRlczsKKworLyogTm9uemVybyBtZWFucyB0aGF0IGltcGxpY2l0IGluc3RhbnRpYXRpb25zIG9mIGlubGluZSB0ZW1wbGF0ZXMgd2lsbCBiZQorICAgZW1pdHRlZCBpZiBuZWVkZWQsIGV2ZW4gaWYgaW5zdGFudGlhdGlvbnMgb2Ygbm9uLWlubGluZSB0ZW1wbGF0ZXMKKyAgIGFyZW4ndC4gICovCisKK2V4dGVybiBpbnQgZmxhZ19pbXBsaWNpdF9pbmxpbmVfdGVtcGxhdGVzOworCisvKiBOb256ZXJvIG1lYW5zIGdlbmVyYXRlIHNlcGFyYXRlIGluc3RhbnRpYXRpb24gY29udHJvbCBmaWxlcyBhbmQKKyAgIGp1Z2dsZSB0aGVtIGF0IGxpbmsgdGltZS4gICovCisKK2V4dGVybiBpbnQgZmxhZ191c2VfcmVwb3NpdG9yeTsKKworLyogTm9uemVybyBpZiB3ZSB3YW50IHRvIGlzc3VlIGRpYWdub3N0aWNzIHRoYXQgdGhlIHN0YW5kYXJkIHNheXMgYXJlIG5vdAorICAgcmVxdWlyZWQuICAqLworCitleHRlcm4gaW50IGZsYWdfb3B0aW9uYWxfZGlhZ3M7CisKKy8qIE5vbnplcm8gbWVhbnMgd2Ugc2hvdWxkIGF0dGVtcHQgdG8gZWxpZGUgY29uc3RydWN0b3JzIHdoZW4gcG9zc2libGUuICAqLworCitleHRlcm4gaW50IGZsYWdfZWxpZGVfY29uc3RydWN0b3JzOworCisvKiBOb256ZXJvIG1lYW5zIHRoYXQgbWVtYmVyIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGNsYXNzIHNjb3BlIGFyZQorICAgaW5saW5lIGJ5IGRlZmF1bHQuICAqLworCitleHRlcm4gaW50IGZsYWdfZGVmYXVsdF9pbmxpbmU7CisKKy8qIENvbnRyb2xzIHdoZXRoZXIgY29tcGlsZXIgZ2VuZXJhdGVzICd0eXBlIGRlc2NyaXB0b3InIHRoYXQgZ2l2ZQorICAgcnVuLXRpbWUgdHlwZSBpbmZvcm1hdGlvbi4gICovCisKK2V4dGVybiBpbnQgZmxhZ19ydHRpOworCisvKiBOb256ZXJvIGlmIHdlIHdhbnQgdG8gY29uc2VydmUgc3BhY2UgaW4gdGhlIC5vIGZpbGVzLiAgV2UgZG8gdGhpcworICAgYnkgcHV0dGluZyB1bmluaXRpYWxpemVkIGRhdGEgYW5kIHJ1bnRpbWUgaW5pdGlhbGl6ZWQgZGF0YSBpbnRvCisgICAuY29tbW9uIGluc3RlYWQgb2YgLmRhdGEgYXQgdGhlIGV4cGVuc2Ugb2Ygbm90IGZsYWdnaW5nIG11bHRpcGxlCisgICBkZWZpbml0aW9ucy4gICovCisKK2V4dGVybiBpbnQgZmxhZ19jb25zZXJ2ZV9zcGFjZTsKKworLyogTm9uemVybyBpZiB3ZSB3YW50IHRvIG9iZXkgYWNjZXNzIGNvbnRyb2wgc2VtYW50aWNzLiAgKi8KKworZXh0ZXJuIGludCBmbGFnX2FjY2Vzc19jb250cm9sOworCisvKiBOb256ZXJvIGlmIHdlIHdhbnQgdG8gY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBvZiBuZXcgYW5kIGF2b2lkIGNhbGxpbmcKKyAgIGNvbnN0cnVjdG9ycyBpZiBpdCBpcyBhIG51bGwgcG9pbnRlci4gICovCisKK2V4dGVybiBpbnQgZmxhZ19jaGVja19uZXc7CisKKy8qIFRoZSBzdXBwb3J0ZWQgQysrIGRpYWxlY3RzLiAgKi8KKworZW51bSBjeHhfZGlhbGVjdCB7CisgIC8qIEMrKzk4ICAqLworICBjeHg5OCwKKyAgLyogRXhwZXJpbWVudGFsIGZlYXR1cmVzIHRoYXQgYXJlIGxpa2VseSB0byBiZWNvbWUgcGFydCBvZgorICAgICBDKysweC4gICovCisgIGN4eDB4Cit9OworCisvKiBUaGUgQysrIGRpYWxlY3QgYmVpbmcgdXNlZC4gQysrOTggaXMgdGhlIGRlZmF1bHQuICAqLworZXh0ZXJuIGVudW0gY3h4X2RpYWxlY3QgY3h4X2RpYWxlY3Q7CisKKy8qIE5vbnplcm8gaWYgd2Ugd2FudCB0aGUgbmV3IElTTyBydWxlcyBmb3IgcHVzaGluZyBhIG5ldyBzY29wZSBmb3IgYGZvcicKKyAgIGluaXRpYWxpemF0aW9uIHZhcmlhYmxlcy4KKyAgIDA6IE9sZCBydWxlcywgc2V0IGJ5IC1mbm8tZm9yLXNjb3BlLgorICAgMjogTmV3IElTTyBydWxlcywgc2V0IGJ5IC1mZm9yLXNjb3BlLgorICAgMTogVHJ5IHRvIGltcGxlbWVudCBuZXcgSVNPIHJ1bGVzLCBidXQgd2l0aCBiYWNrdXAgY29tcGF0aWJpbGl0eQorICAgKGFuZCB3YXJuaW5ncykuICBUaGlzIGlzIHRoZSBkZWZhdWx0LCBmb3Igbm93LiAgKi8KKworZXh0ZXJuIGludCBmbGFnX25ld19mb3Jfc2NvcGU7CisKKy8qIE5vbnplcm8gaWYgd2Ugd2FudCB0byBlbWl0IGRlZmluZWQgc3ltYm9scyB3aXRoIGNvbW1vbi1saWtlIGxpbmthZ2UgYXMKKyAgIHdlYWsgc3ltYm9scyB3aGVyZSBwb3NzaWJsZSwgaW4gb3JkZXIgdG8gY29uZm9ybSB0byBDKysgc2VtYW50aWNzLgorICAgT3RoZXJ3aXNlLCBlbWl0IHRoZW0gYXMgbG9jYWwgc3ltYm9scy4gICovCisKK2V4dGVybiBpbnQgZmxhZ193ZWFrOworCisvKiAwIG1lYW5zIHdlIHdhbnQgdGhlIHByZXByb2Nlc3NvciB0byBub3QgZW1pdCBsaW5lIGRpcmVjdGl2ZXMgZm9yCisgICB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gIDEgbWVhbnMgd2Ugd2FudCBpdCB0byBkbyBpdC4gIC0xCisgICBtZWFucyB3ZSBzaG91bGQgZGVjaWRlIGRlcGVuZGluZyBvbiB3aGV0aGVyIGRlYnVnZ2luZyBpbmZvcm1hdGlvbgorICAgaXMgYmVpbmcgZW1pdHRlZCBvciBub3QuICAqLworCitleHRlcm4gaW50IGZsYWdfd29ya2luZ19kaXJlY3Rvcnk7CisKKy8qIE5vbnplcm8gdG8gdXNlIF9fY3hhX2F0ZXhpdCwgcmF0aGVyIHRoYW4gYXRleGl0LCB0byByZWdpc3RlcgorICAgZGVzdHJ1Y3RvcnMgZm9yIGxvY2FsIHN0YXRpY3MgYW5kIGdsb2JhbCBvYmplY3RzLiAgKi8KKworZXh0ZXJuIGludCBmbGFnX3VzZV9jeGFfYXRleGl0OworCisvKiBOb256ZXJvIHRvIHVzZSBfX2N4YV9nZXRfZXhjZXB0aW9uX3B0ciBpbiB0aGUgQysrIGV4Y2VwdGlvbi1oYW5kbGluZworICAgbG9naWMuICAqLworCitleHRlcm4gaW50IGZsYWdfdXNlX2N4YV9nZXRfZXhjZXB0aW9uX3B0cjsKKworLyogTm9uemVybyBtZWFucyB0byBpbXBsZW1lbnQgc3RhbmRhcmQgc2VtYW50aWNzIGZvciBleGNlcHRpb24KKyAgIHNwZWNpZmljYXRpb25zLCBjYWxsaW5nIHVuZXhwZWN0ZWQgaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biB0aGF0CisgICBkb2Vzbid0IG1hdGNoIHRoZSBzcGVjaWZpY2F0aW9uLiAgWmVybyBtZWFucyB0byB0cmVhdCB0aGVtIGFzCisgICBhc3NlcnRpb25zIGFuZCBvcHRpbWl6ZSBhY2NvcmRpbmdseSwgYnV0IG5vdCBjaGVjayB0aGVtLiAgKi8KKworZXh0ZXJuIGludCBmbGFnX2VuZm9yY2VfZWhfc3BlY3M7CisKKy8qIE5vbnplcm8gKHRoZSBkZWZhdWx0KSBtZWFucyB0byBnZW5lcmF0ZSB0aHJlYWQtc2FmZSBjb2RlIGZvcgorICAgaW5pdGlhbGl6aW5nIGxvY2FsIHN0YXRpY3MuICAqLworCitleHRlcm4gaW50IGZsYWdfdGhyZWFkc2FmZV9zdGF0aWNzOworCisvKiBOb256ZXJvIGlmIHdlIHdhbnQgdG8gcHJldHR5LXByaW50IHRlbXBsYXRlIHNwZWNpYWxpemF0aW9ucyBhcyB0aGUKKyAgIHRlbXBsYXRlIHNpZ25hdHVyZSBmb2xsb3dlZCBieSB0aGUgYXJndW1lbnRzLiAgKi8KKworZXh0ZXJuIGludCBmbGFnX3ByZXR0eV90ZW1wbGF0ZXM7CisKKy8qIE5vbnplcm8gbWVhbnMgd2FybiBhYm91dCBpbXBsaWNpdCBkZWNsYXJhdGlvbnMuICAqLworCitleHRlcm4gaW50IHdhcm5faW1wbGljaXQ7CisKKy8qIFdhcm4gYWJvdXQgdXNpbmcgX19udWxsIChhcyBOVUxMIGluIEMrKykgYXMgc2VudGluZWwuICBGb3IgY29kZSBjb21waWxlZAorICAgd2l0aCBHQ0MgdGhpcyBkb2Vzbid0IG1hdHRlciBhcyBfX251bGwgaXMgZ3VhcmFudGVlZCB0byBoYXZlIHRoZSByaWdodAorICAgc2l6ZS4gICovCisKK2V4dGVybiBpbnQgd2Fybl9zdHJpY3RfbnVsbF9zZW50aW5lbDsKKworLyogTWF4aW11bSB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uIGRlcHRoLiAgVGhpcyBsaW1pdCBpcyByYXRoZXIKKyAgIGFyYml0cmFyeSwgYnV0IGl0IGV4aXN0cyB0byBsaW1pdCB0aGUgdGltZSBpdCB0YWtlcyB0byBub3RpY2UKKyAgIGluZmluaXRlIHRlbXBsYXRlIGluc3RhbnRpYXRpb25zLiAgKi8KKworZXh0ZXJuIGludCBtYXhfdGluc3RfZGVwdGg7CisKKy8qIE5vbnplcm8gbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGlzc3VlIHdhcm5pbmdzIGFib3V0IHByb2JsZW1zIHRoYXQKKyAgIG9jY3VyIHdoZW4gdGhlIGNvZGUgaXMgZXhlY3V0ZWQsIGJlY2F1c2UgdGhlIGNvZGUgYmVpbmcgcHJvY2Vzc2VkCisgICBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgZXhlY3V0ZWQuICBUaGlzIGlzIHNldCBkdXJpbmcgcGFyc2luZy4gIFRoaXMKKyAgIGlzIHVzZWQgZm9yIGNhc2VzIGxpa2Ugc2l6ZW9mKCkgYW5kICIwID8gYSA6IGIiLiAgVGhpcyBpcyBhIGNvdW50LAorICAgbm90IGEgYm9vbCwgYmVjYXVzZSB1bmV4ZWN1dGVkIGV4cHJlc3Npb25zIGNhbiBuZXN0LiAgKi8KKworZXh0ZXJuIGludCBjX2luaGliaXRfZXZhbHVhdGlvbl93YXJuaW5nczsKKworLyogV2hldGhlciBsZXhpbmcgaGFzIGJlZW4gY29tcGxldGVkLCBzbyBzdWJzZXF1ZW50IHByZXByb2Nlc3NvcgorICAgZXJyb3JzIHNob3VsZCB1c2UgdGhlIGNvbXBpbGVyJ3MgaW5wdXRfbG9jYXRpb24uICAqLworCitleHRlcm4gYm9vbCBkb25lX2xleGluZzsKKworLyogQyB0eXBlcyBhcmUgcGFydGl0aW9uZWQgaW50byB0aHJlZSBzdWJzZXRzOiBvYmplY3QsIGZ1bmN0aW9uLCBhbmQKKyAgIGluY29tcGxldGUgdHlwZXMuICAqLworI2RlZmluZSBDX1RZUEVfT0JKRUNUX1AodHlwZSkgXAorICAoVFJFRV9DT0RFICh0eXBlKSAhPSBGVU5DVElPTl9UWVBFICYmIFRZUEVfU0laRSAodHlwZSkpCisKKyNkZWZpbmUgQ19UWVBFX0lOQ09NUExFVEVfUCh0eXBlKSBcCisgIChUUkVFX0NPREUgKHR5cGUpICE9IEZVTkNUSU9OX1RZUEUgJiYgVFlQRV9TSVpFICh0eXBlKSA9PSAwKQorCisjZGVmaW5lIENfVFlQRV9GVU5DVElPTl9QKHR5cGUpIFwKKyAgKFRSRUVfQ09ERSAodHlwZSkgPT0gRlVOQ1RJT05fVFlQRSkKKworLyogRm9yIGNvbnZlbmllbmNlIHdlIGRlZmluZSBhIHNpbmdsZSBtYWNybyB0byBpZGVudGlmeSB0aGUgY2xhc3Mgb2YKKyAgIG9iamVjdCBvciBpbmNvbXBsZXRlIHR5cGVzLiAgKi8KKyNkZWZpbmUgQ19UWVBFX09CSkVDVF9PUl9JTkNPTVBMRVRFX1AodHlwZSkgXAorICAoIUNfVFlQRV9GVU5DVElPTl9QICh0eXBlKSkKKworLyogQXR0cmlidXRlIHRhYmxlIGNvbW1vbiB0byB0aGUgQyBmcm9udCBlbmRzLiAgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMgY19jb21tb25fYXR0cmlidXRlX3RhYmxlW107CitleHRlcm4gY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9zcGVjIGNfY29tbW9uX2Zvcm1hdF9hdHRyaWJ1dGVfdGFibGVbXTsKKworLyogUG9pbnRlciB0byBmdW5jdGlvbiB0byBsYXppbHkgZ2VuZXJhdGUgdGhlIFZBUl9ERUNMIGZvciBfX0ZVTkNUSU9OX18gZXRjLgorICAgSUQgaXMgdGhlIGlkZW50aWZpZXIgdG8gdXNlLCBOQU1FIGlzIHRoZSBzdHJpbmcuCisgICBUWVBFX0RFUCBpbmRpY2F0ZXMgd2hldGhlciBpdCBkZXBlbmRzIG9uIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIG9yIG5vdAorICAgKGkuZS4gX19QUkVUVFlfRlVOQ1RJT05fXykuICAqLworCitleHRlcm4gdHJlZSAoKm1ha2VfZm5hbWVfZGVjbCkgKGxvY2F0aW9uX3QsIHRyZWUsIGludCk7CisKK2V4dGVybiBib29sIGluX2xhdGVfYmluYXJ5X29wOworZXh0ZXJuIGNvbnN0IGNoYXIgKmNfYWRkcl9zcGFjZV9uYW1lIChhZGRyX3NwYWNlX3QgYXMpOworZXh0ZXJuIHRyZWUgaWRlbnRpZmllcl9nbG9iYWxfdmFsdWUgKHRyZWUpOworZXh0ZXJuIHZvaWQgcmVjb3JkX2J1aWx0aW5fdHlwZSAoZW51bSByaWQsIGNvbnN0IGNoYXIgKiwgdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF92b2lkX2xpc3Rfbm9kZSAodm9pZCk7CitleHRlcm4gdm9pZCBzdGFydF9mbmFtZV9kZWNscyAodm9pZCk7CitleHRlcm4gdm9pZCBmaW5pc2hfZm5hbWVfZGVjbHMgKHZvaWQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmZuYW1lX2FzX3N0cmluZyAoaW50KTsKK2V4dGVybiB0cmVlIGZuYW1lX2RlY2wgKGxvY2F0aW9uX3QsIHVuc2lnbmVkLCB0cmVlKTsKKworZXh0ZXJuIHZvaWQgY2hlY2tfZnVuY3Rpb25fYXJndW1lbnRzICh0cmVlLCBpbnQsIHRyZWUgKiwgdHJlZSk7CitleHRlcm4gdm9pZCBjaGVja19mdW5jdGlvbl9hcmd1bWVudHNfcmVjdXJzZSAodm9pZCAoKikKKwkJCQkJICAgICAgKHZvaWQgKiwgdHJlZSwKKwkJCQkJICAgICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpLAorCQkJCQkgICAgICB2b2lkICosIHRyZWUsCisJCQkJCSAgICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpOworZXh0ZXJuIGJvb2wgY2hlY2tfYnVpbHRpbl9mdW5jdGlvbl9hcmd1bWVudHMgKHRyZWUsIGludCwgdHJlZSAqKTsKK2V4dGVybiB2b2lkIGNoZWNrX2Z1bmN0aW9uX2Zvcm1hdCAodHJlZSwgaW50LCB0cmVlICopOworZXh0ZXJuIHZvaWQgc2V0X1dmb3JtYXQgKGludCk7CitleHRlcm4gdHJlZSBoYW5kbGVfZm9ybWF0X2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CitleHRlcm4gdHJlZSBoYW5kbGVfZm9ybWF0X2FyZ19hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOworZXh0ZXJuIGludCBjX2NvbW1vbl9oYW5kbGVfb3B0aW9uIChzaXplX3QgY29kZSwgY29uc3QgY2hhciAqYXJnLCBpbnQgdmFsdWUpOworZXh0ZXJuIGJvb2wgY19jb21tb25fbWlzc2luZ19hcmd1bWVudCAoY29uc3QgY2hhciAqb3B0LCBzaXplX3QgY29kZSk7CitleHRlcm4gdHJlZSBjX2NvbW1vbl90eXBlX2Zvcl9tb2RlIChlbnVtIG1hY2hpbmVfbW9kZSwgaW50KTsKK2V4dGVybiB0cmVlIGNfY29tbW9uX3R5cGVfZm9yX3NpemUgKHVuc2lnbmVkIGludCwgaW50KTsKK2V4dGVybiB0cmVlIGNfY29tbW9uX2ZpeGVkX3BvaW50X3R5cGVfZm9yX3NpemUgKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LAorCQkJCQkJaW50LCBpbnQpOworZXh0ZXJuIHRyZWUgY19jb21tb25fdW5zaWduZWRfdHlwZSAodHJlZSk7CitleHRlcm4gdHJlZSBjX2NvbW1vbl9zaWduZWRfdHlwZSAodHJlZSk7CitleHRlcm4gdHJlZSBjX2NvbW1vbl9zaWduZWRfb3JfdW5zaWduZWRfdHlwZSAoaW50LCB0cmVlKTsKK2V4dGVybiB0cmVlIGNfYnVpbGRfYml0ZmllbGRfaW50ZWdlcl90eXBlICh1bnNpZ25lZCBIT1NUX1dJREVfSU5ULCBpbnQpOworZXh0ZXJuIGJvb2wgZGVjbF93aXRoX25vbm51bGxfYWRkcl9wIChjb25zdF90cmVlKTsKK2V4dGVybiB0cmVlIGNfZnVsbHlfZm9sZCAodHJlZSwgYm9vbCwgYm9vbCAqKTsKK2V4dGVybiB0cmVlIGRlY2xfY29uc3RhbnRfdmFsdWVfZm9yX29wdGltaXphdGlvbiAodHJlZSk7CitleHRlcm4gdHJlZSBjX3dyYXBfbWF5YmVfY29uc3QgKHRyZWUsIGJvb2wpOworZXh0ZXJuIHRyZWUgY19zYXZlX2V4cHIgKHRyZWUpOworZXh0ZXJuIHRyZWUgY19jb21tb25fdHJ1dGh2YWx1ZV9jb252ZXJzaW9uIChsb2NhdGlvbl90LCB0cmVlKTsKK2V4dGVybiB2b2lkIGNfYXBwbHlfdHlwZV9xdWFsc190b19kZWNsIChpbnQsIHRyZWUpOworZXh0ZXJuIHRyZWUgY19zaXplb2Zfb3JfYWxpZ25vZl90eXBlIChsb2NhdGlvbl90LCB0cmVlLCBib29sLCBpbnQpOworZXh0ZXJuIHRyZWUgY19hbGlnbm9mX2V4cHIgKGxvY2F0aW9uX3QsIHRyZWUpOworLyogUHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBmb3IgaW52YWxpZCBvcGVyYW5kcyB0byBhcml0aCBvcGVyYXRpb24gQ09ERS4KKyAgIE5PUF9FWFBSIGlzIHVzZWQgYXMgYSBzcGVjaWFsIGNhc2UgKHNlZSB0cnV0aHZhbHVlX2NvbnZlcnNpb24pLiAgKi8KK2V4dGVybiB2b2lkIGJpbmFyeV9vcF9lcnJvciAobG9jYXRpb25fdCwgZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgZml4X3N0cmluZ190eXBlICh0cmVlKTsKK3N0cnVjdCB2YXJyYXlfaGVhZF90YWc7CitleHRlcm4gdm9pZCBjb25zdGFudF9leHByZXNzaW9uX3dhcm5pbmcgKHRyZWUpOworZXh0ZXJuIHZvaWQgY29uc3RhbnRfZXhwcmVzc2lvbl9lcnJvciAodHJlZSk7CitleHRlcm4gYm9vbCBzdHJpY3RfYWxpYXNpbmdfd2FybmluZyAodHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCB3YXJuaW5nc19mb3JfY29udmVydF9hbmRfY2hlY2sgKHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgY29udmVydF9hbmRfY2hlY2sgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgb3ZlcmZsb3dfd2FybmluZyAobG9jYXRpb25fdCwgdHJlZSk7CitleHRlcm4gdm9pZCB3YXJuX2xvZ2ljYWxfb3BlcmF0b3IgKGxvY2F0aW9uX3QsIGVudW0gdHJlZV9jb2RlLCB0cmVlLAorCQkJCSAgIGVudW0gdHJlZV9jb2RlLCB0cmVlLCBlbnVtIHRyZWVfY29kZSwgdHJlZSk7CitleHRlcm4gdm9pZCBjaGVja19tYWluX3BhcmFtZXRlcl90eXBlcyAodHJlZSBkZWNsKTsKK2V4dGVybiBib29sIGNfZGV0ZXJtaW5lX3Zpc2liaWxpdHkgKHRyZWUpOworZXh0ZXJuIGJvb2wgc2FtZV9zY2FsYXJfdHlwZV9pZ25vcmluZ19zaWduZWRuZXNzICh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIG1hcmtfdmFsaWRfbG9jYXRpb25fZm9yX3N0ZGNfcHJhZ21hIChib29sKTsKK2V4dGVybiBib29sIHZhbGlkX2xvY2F0aW9uX2Zvcl9zdGRjX3ByYWdtYV9wICh2b2lkKTsKK2V4dGVybiB2b2lkIHNldF9mbG9hdF9jb25zdF9kZWNpbWFsNjQgKHZvaWQpOworZXh0ZXJuIHZvaWQgY2xlYXJfZmxvYXRfY29uc3RfZGVjaW1hbDY0ICh2b2lkKTsKK2V4dGVybiBib29sIGZsb2F0X2NvbnN0X2RlY2ltYWw2NF9wICh2b2lkKTsKKworI2RlZmluZSBjX3NpemVvZihMT0MsIFQpICBjX3NpemVvZl9vcl9hbGlnbm9mX3R5cGUgKExPQywgVCwgdHJ1ZSwgMSkKKyNkZWZpbmUgY19hbGlnbm9mKExPQywgVCkgY19zaXplb2Zfb3JfYWxpZ25vZl90eXBlIChMT0MsIFQsIGZhbHNlLCAxKQorCisvKiBTdWJyb3V0aW5lIG9mIGJ1aWxkX2JpbmFyeV9vcCwgdXNlZCBmb3IgY2VydGFpbiBvcGVyYXRpb25zLiAgKi8KK2V4dGVybiB0cmVlIHNob3J0ZW5fYmluYXJ5X29wICh0cmVlIHJlc3VsdF90eXBlLCB0cmVlIG9wMCwgdHJlZSBvcDEsIGJvb2wgYml0d2lzZSk7CisKKy8qIFN1YnJvdXRpbmUgb2YgYnVpbGRfYmluYXJ5X29wLCB1c2VkIGZvciBjb21wYXJpc29uIG9wZXJhdGlvbnMuCisgICBTZWUgaWYgdGhlIG9wZXJhbmRzIGhhdmUgYm90aCBiZWVuIGNvbnZlcnRlZCBmcm9tIHN1YndvcmQgaW50ZWdlciB0eXBlcworICAgYW5kLCBpZiBzbywgcGVyaGFwcyBjaGFuZ2UgdGhlbSBib3RoIGJhY2sgdG8gdGhlaXIgb3JpZ2luYWwgdHlwZS4gICovCitleHRlcm4gdHJlZSBzaG9ydGVuX2NvbXBhcmUgKHRyZWUgKiwgdHJlZSAqLCB0cmVlICosIGVudW0gdHJlZV9jb2RlICopOworCitleHRlcm4gdHJlZSBwb2ludGVyX2ludF9zdW0gKGxvY2F0aW9uX3QsIGVudW0gdHJlZV9jb2RlLCB0cmVlLCB0cmVlKTsKKworLyogQWRkIHF1YWxpZmllcnMgdG8gYSB0eXBlLCBpbiB0aGUgZmFzaGlvbiBmb3IgQy4gICovCitleHRlcm4gdHJlZSBjX2J1aWxkX3F1YWxpZmllZF90eXBlICh0cmVlLCBpbnQpOworCisvKiBCdWlsZCB0cmVlIG5vZGVzIGFuZCBidWlsdGluIGZ1bmN0aW9ucyBjb21tb24gdG8gYm90aCBDIGFuZCBDKysgbGFuZ3VhZ2UKKyAgIGZyb250ZW5kcy4gICovCitleHRlcm4gdm9pZCBjX2NvbW1vbl9ub2Rlc19hbmRfYnVpbHRpbnMgKHZvaWQpOworCitleHRlcm4gdm9pZCBkaXNhYmxlX2J1aWx0aW5fZnVuY3Rpb24gKGNvbnN0IGNoYXIgKik7CisKK2V4dGVybiB2b2lkIHNldF9jb21wb3VuZF9saXRlcmFsX25hbWUgKHRyZWUgZGVjbCk7CisKK2V4dGVybiB0cmVlIGJ1aWxkX3ZhX2FyZyAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgY19jb21tb25faW5pdF9vcHRpb25zICh1bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIgKiopOworZXh0ZXJuIGJvb2wgY19jb21tb25fcG9zdF9vcHRpb25zIChjb25zdCBjaGFyICoqKTsKK2V4dGVybiBib29sIGNfY29tbW9uX2luaXQgKHZvaWQpOworZXh0ZXJuIHZvaWQgY19jb21tb25fZmluaXNoICh2b2lkKTsKK2V4dGVybiB2b2lkIGNfY29tbW9uX3BhcnNlX2ZpbGUgKGludCk7CitleHRlcm4gYWxpYXNfc2V0X3R5cGUgY19jb21tb25fZ2V0X2FsaWFzX3NldCAodHJlZSk7CitleHRlcm4gdm9pZCBjX3JlZ2lzdGVyX2J1aWx0aW5fdHlwZSAodHJlZSwgY29uc3QgY2hhciopOworZXh0ZXJuIGJvb2wgY19wcm9tb3RpbmdfaW50ZWdlcl90eXBlX3AgKGNvbnN0X3RyZWUpOworZXh0ZXJuIGludCBzZWxmX3Byb21vdGluZ19hcmdzX3AgKGNvbnN0X3RyZWUpOworZXh0ZXJuIHRyZWUgc3RyaXBfcG9pbnRlcl9vcGVyYXRvciAodHJlZSk7CitleHRlcm4gdHJlZSBzdHJpcF9wb2ludGVyX29yX2FycmF5X3R5cGVzICh0cmVlKTsKK2V4dGVybiBIT1NUX1dJREVfSU5UIGNfY29tbW9uX3RvX3RhcmdldF9jaGFyc2V0IChIT1NUX1dJREVfSU5UKTsKKworLyogVGhpcyBpcyB0aGUgYmFzaWMgcGFyc2luZyBmdW5jdGlvbi4gICovCitleHRlcm4gdm9pZCBjX3BhcnNlX2ZpbGUgKHZvaWQpOworLyogVGhpcyBpcyBtaXNuYW1lZCwgaXQgYWN0dWFsbHkgcGVyZm9ybXMgZW5kLW9mLWNvbXBpbGF0aW9uIHByb2Nlc3NpbmcuICAqLworZXh0ZXJuIHZvaWQgZmluaXNoX2ZpbGUJKHZvaWQpOworCisKKy8qIFRoZXNlIG1hY3JvcyBwcm92aWRlIGNvbnZlbmllbnQgYWNjZXNzIHRvIHRoZSB2YXJpb3VzIF9TVE1UIG5vZGVzLiAgKi8KKworLyogTm9uemVybyBpZiBhIGdpdmVuIFNUQVRFTUVOVF9MSVNUIHJlcHJlc2VudHMgdGhlIG91dGVybW9zdCBiaW5kaW5nCisgICBpZiBhIHN0YXRlbWVudCBleHByZXNzaW9uLiAgKi8KKyNkZWZpbmUgU1RBVEVNRU5UX0xJU1RfU1RNVF9FWFBSKE5PREUpIFwKKyAgVFJFRV9MQU5HX0ZMQUdfMSAoU1RBVEVNRU5UX0xJU1RfQ0hFQ0sgKE5PREUpKQorCisvKiBOb256ZXJvIGlmIGEgbGFiZWwgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIHN0YXRlbWVudCBsaXN0LiAgKi8KKyNkZWZpbmUgU1RBVEVNRU5UX0xJU1RfSEFTX0xBQkVMKE5PREUpIFwKKyAgVFJFRV9MQU5HX0ZMQUdfMyAoU1RBVEVNRU5UX0xJU1RfQ0hFQ0sgKE5PREUpKQorCisvKiBDX01BWUJFX0NPTlNUX0VYUFIgYWNjZXNzb3JzLiAgKi8KKyNkZWZpbmUgQ19NQVlCRV9DT05TVF9FWFBSX1BSRShOT0RFKQkJCVwKKyAgVFJFRV9PUEVSQU5EIChDX01BWUJFX0NPTlNUX0VYUFJfQ0hFQ0sgKE5PREUpLCAwKQorI2RlZmluZSBDX01BWUJFX0NPTlNUX0VYUFJfRVhQUihOT0RFKQkJCVwKKyAgVFJFRV9PUEVSQU5EIChDX01BWUJFX0NPTlNUX0VYUFJfQ0hFQ0sgKE5PREUpLCAxKQorI2RlZmluZSBDX01BWUJFX0NPTlNUX0VYUFJfSU5UX09QRVJBTkRTKE5PREUpCQlcCisgIFRSRUVfTEFOR19GTEFHXzAgKENfTUFZQkVfQ09OU1RfRVhQUl9DSEVDSyAoTk9ERSkpCisjZGVmaW5lIENfTUFZQkVfQ09OU1RfRVhQUl9OT05fQ09OU1QoTk9ERSkJCVwKKyAgVFJFRV9MQU5HX0ZMQUdfMSAoQ19NQVlCRV9DT05TVF9FWFBSX0NIRUNLIChOT0RFKSkKKyNkZWZpbmUgRVhQUl9JTlRfQ09OU1RfT1BFUkFORFMoRVhQUikJCQlcCisgIChJTlRFR1JBTF9UWVBFX1AgKFRSRUVfVFlQRSAoRVhQUikpCQkJXAorICAgJiYgKFRSRUVfQ09ERSAoRVhQUikgPT0gSU5URUdFUl9DU1QJCQlcCisgICAgICAgfHwgKFRSRUVfQ09ERSAoRVhQUikgPT0gQ19NQVlCRV9DT05TVF9FWFBSCVwKKwkgICAmJiBDX01BWUJFX0NPTlNUX0VYUFJfSU5UX09QRVJBTkRTIChFWFBSKSkpKQorCisvKiBJbiBhIEZJRUxEX0RFQ0wsIG5vbnplcm8gaWYgdGhlIGRlY2wgd2FzIG9yaWdpbmFsbHkgYSBiaXRmaWVsZC4gICovCisjZGVmaW5lIERFQ0xfQ19CSVRfRklFTEQoTk9ERSkgXAorICAoREVDTF9MQU5HX0ZMQUdfNCAoRklFTERfREVDTF9DSEVDSyAoTk9ERSkpID09IDEpCisjZGVmaW5lIFNFVF9ERUNMX0NfQklUX0ZJRUxEKE5PREUpIFwKKyAgKERFQ0xfTEFOR19GTEFHXzQgKEZJRUxEX0RFQ0xfQ0hFQ0sgKE5PREUpKSA9IDEpCisjZGVmaW5lIENMRUFSX0RFQ0xfQ19CSVRfRklFTEQoTk9ERSkgXAorICAoREVDTF9MQU5HX0ZMQUdfNCAoRklFTERfREVDTF9DSEVDSyAoTk9ERSkpID0gMCkKKworZXh0ZXJuIHRyZWUgZG9fY2FzZSAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9zdG10IChsb2NhdGlvbl90LCBlbnVtIHRyZWVfY29kZSwgLi4uKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2Nhc2VfbGFiZWwgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUsIHRyZWUpOworCisvKiBUaGVzZSBmdW5jdGlvbnMgbXVzdCBiZSBkZWZpbmVkIGJ5IGVhY2ggZnJvbnQtZW5kIHdoaWNoIGltcGxlbWVudHMKKyAgIGEgdmFyaWFudCBvZiB0aGUgQyBsYW5ndWFnZS4gIFRoZXkgYXJlIHVzZWQgaW4gYy1jb21tb24uYy4gICovCisKK2V4dGVybiB0cmVlIGJ1aWxkX3VuYXJ5X29wIChsb2NhdGlvbl90LCBlbnVtIHRyZWVfY29kZSwgdHJlZSwgaW50KTsKK2V4dGVybiB0cmVlIGJ1aWxkX2JpbmFyeV9vcCAobG9jYXRpb25fdCwgZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUsIGludCk7CitleHRlcm4gdHJlZSBwZXJmb3JtX2ludGVncmFsX3Byb21vdGlvbnMgKHRyZWUpOworCisvKiBUaGVzZSBmdW5jdGlvbnMgbXVzdCBiZSBkZWZpbmVkIGJ5IGVhY2ggZnJvbnQtZW5kIHdoaWNoIGltcGxlbWVudHMKKyAgIGEgdmFyaWFudCBvZiB0aGUgQyBsYW5ndWFnZS4gIFRoZXkgYXJlIHVzZWQgYnkgcG9ydCBmaWxlcy4gICovCisKK2V4dGVybiB0cmVlIGRlZmF1bHRfY29udmVyc2lvbiAodHJlZSk7CisKKy8qIEdpdmVuIHR3byBpbnRlZ2VyIG9yIHJlYWwgdHlwZXMsIHJldHVybiB0aGUgdHlwZSBmb3IgdGhlaXIgc3VtLgorICAgR2l2ZW4gdHdvIGNvbXBhdGlibGUgQU5TSSBDIHR5cGVzLCByZXR1cm5zIHRoZSBtZXJnZWQgdHlwZS4gICovCisKK2V4dGVybiB0cmVlIGNvbW1vbl90eXBlICh0cmVlLCB0cmVlKTsKKworZXh0ZXJuIHRyZWUgZGVjbF9jb25zdGFudF92YWx1ZSAodHJlZSk7CisKKy8qIEhhbmRsZSBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCBvZiBib29sZWFuIHR5cGVzLiAgKi8KK2V4dGVybiB0cmVlIGJvb2xlYW5faW5jcmVtZW50IChlbnVtIHRyZWVfY29kZSwgdHJlZSk7CisKK2V4dGVybiBpbnQgY2FzZV9jb21wYXJlIChzcGxheV90cmVlX2tleSwgc3BsYXlfdHJlZV9rZXkpOworCitleHRlcm4gdHJlZSBjX2FkZF9jYXNlX2xhYmVsIChsb2NhdGlvbl90LCBzcGxheV90cmVlLCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlKTsKKworZXh0ZXJuIHZvaWQgY19kb19zd2l0Y2hfd2FybmluZ3MgKHNwbGF5X3RyZWUsIGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUpOworCitleHRlcm4gdHJlZSBidWlsZF9mdW5jdGlvbl9jYWxsIChsb2NhdGlvbl90LCB0cmVlLCB0cmVlKTsKKworZXh0ZXJuIHRyZWUgYnVpbGRfZnVuY3Rpb25fY2FsbF92ZWMgKGxvY2F0aW9uX3QsIHRyZWUsCisgICAgCQkJCSAgICAgVkVDKHRyZWUsZ2MpICosIFZFQyh0cmVlLGdjKSAqKTsKKworZXh0ZXJuIHRyZWUgcmVzb2x2ZV9vdmVybG9hZGVkX2J1aWx0aW4gKGxvY2F0aW9uX3QsIHRyZWUsIFZFQyh0cmVlLGdjKSAqKTsKKworZXh0ZXJuIHRyZWUgZmluaXNoX2xhYmVsX2FkZHJlc3NfZXhwciAodHJlZSwgbG9jYXRpb25fdCk7CisKKy8qIFNhbWUgZnVuY3Rpb24gcHJvdG90eXBlLCBidXQgdGhlIEMgYW5kIEMrKyBmcm9udCBlbmRzIGhhdmUKKyAgIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMuICBVc2VkIGluIGMtY29tbW9uLmMuICAqLworZXh0ZXJuIHRyZWUgbG9va3VwX2xhYmVsICh0cmVlKTsKK2V4dGVybiB0cmVlIGxvb2t1cF9uYW1lICh0cmVlKTsKK2V4dGVybiBib29sIGx2YWx1ZV9wIChjb25zdF90cmVlKTsKKworZXh0ZXJuIGJvb2wgdmVjdG9yX3RhcmdldHNfY29udmVydGlibGVfcCAoY29uc3RfdHJlZSB0MSwgY29uc3RfdHJlZSB0Mik7CitleHRlcm4gYm9vbCB2ZWN0b3JfdHlwZXNfY29udmVydGlibGVfcCAoY29uc3RfdHJlZSB0MSwgY29uc3RfdHJlZSB0MiwgYm9vbCBlbWl0X2xheF9ub3RlKTsKKworZXh0ZXJuIHJ0eCBjX2V4cGFuZF9leHByICh0cmVlLCBydHgsIGVudW0gbWFjaGluZV9tb2RlLCBpbnQsIHJ0eCAqKTsKKworZXh0ZXJuIHZvaWQgaW5pdF9jX2xleCAodm9pZCk7CisKK2V4dGVybiB2b2lkIGNfY3BwX2J1aWx0aW5zIChjcHBfcmVhZGVyICopOworZXh0ZXJuIHZvaWQgY19jcHBfYnVpbHRpbnNfb3B0aW1pemVfcHJhZ21hIChjcHBfcmVhZGVyICosIHRyZWUsIHRyZWUpOworCisvKiBQb3NpdGl2ZSBpZiBhbiBpbXBsaWNpdCBgZXh0ZXJuICJDIicgc2NvcGUgaGFzIGp1c3QgYmVlbiBlbnRlcmVkOworICAgbmVnYXRpdmUgaWYgc3VjaCBhIHNjb3BlIGhhcyBqdXN0IGJlZW4gZXhpdGVkLiAgKi8KK2V4dGVybiBHVFkoKCkpIGludCBwZW5kaW5nX2xhbmdfY2hhbmdlOworCisvKiBJbmZvcm1hdGlvbiByZWNvcmRlZCBhYm91dCBlYWNoIGZpbGUgZXhhbWluZWQgZHVyaW5nIGNvbXBpbGF0aW9uLiAgKi8KKworc3RydWN0IGNfZmlsZWluZm8KK3sKKyAgaW50IHRpbWU7CS8qIFRpbWUgc3BlbnQgaW4gdGhlIGZpbGUuICAqLworCisgIC8qIEZsYWdzIHVzZWQgb25seSBieSBDKysuCisgICAgIElOVEVSRkFDRV9PTkxZIG5vbnplcm8gbWVhbnMgdGhhdCB3ZSBhcmUgaW4gYW4gImludGVyZmFjZSIgc2VjdGlvbgorICAgICBvZiB0aGUgY29tcGlsZXIuICBJTlRFUkZBQ0VfVU5LTk9XTiBub256ZXJvIG1lYW5zIHdlIGNhbm5vdCB0cnVzdAorICAgICB0aGUgdmFsdWUgb2YgSU5URVJGQUNFX09OTFkuICBJZiBJTlRFUkZBQ0VfVU5LTk9XTiBpcyB6ZXJvIGFuZAorICAgICBJTlRFUkZBQ0VfT05MWSBpcyB6ZXJvLCBpdCBtZWFucyB0aGF0IHdlIGFyZSByZXNwb25zaWJsZSBmb3IKKyAgICAgZXhwb3J0aW5nIGRlZmluaXRpb25zIHRoYXQgb3RoZXJzIG1pZ2h0IG5lZWQuICAqLworICBzaG9ydCBpbnRlcmZhY2Vfb25seTsKKyAgc2hvcnQgaW50ZXJmYWNlX3Vua25vd247Cit9OworCitzdHJ1Y3QgY19maWxlaW5mbyAqZ2V0X2ZpbGVpbmZvIChjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgZHVtcF90aW1lX3N0YXRpc3RpY3MgKHZvaWQpOworCitleHRlcm4gYm9vbCBjX2R1bXBfdHJlZSAodm9pZCAqLCB0cmVlKTsKKworZXh0ZXJuIHZvaWQgdmVyaWZ5X3NlcXVlbmNlX3BvaW50cyAodHJlZSk7CisKK2V4dGVybiB0cmVlIGZvbGRfb2Zmc2V0b2YgKHRyZWUsIHRyZWUpOworCisvKiBQbGFjZXMgd2hlcmUgYW4gbHZhbHVlLCBvciBtb2RpZmlhYmxlIGx2YWx1ZSwgbWF5IGJlIHJlcXVpcmVkLgorICAgVXNlZCB0byBzZWxlY3QgZGlhZ25vc3RpYyBtZXNzYWdlcyBpbiBsdmFsdWVfZXJyb3IgYW5kCisgICByZWFkb25seV9lcnJvci4gICovCitlbnVtIGx2YWx1ZV91c2UgeworICBsdl9hc3NpZ24sCisgIGx2X2luY3JlbWVudCwKKyAgbHZfZGVjcmVtZW50LAorICBsdl9hZGRyZXNzb2YsCisgIGx2X2FzbQorfTsKKworZXh0ZXJuIHZvaWQgbHZhbHVlX2Vycm9yIChlbnVtIGx2YWx1ZV91c2UpOworCitleHRlcm4gaW50IGNvbXBsZXRlX2FycmF5X3R5cGUgKHRyZWUgKiwgdHJlZSwgYm9vbCk7CisKK2V4dGVybiB0cmVlIGJ1aWx0aW5fdHlwZV9mb3Jfc2l6ZSAoaW50LCBib29sKTsKKworZXh0ZXJuIHZvaWQgd2Fybl9hcnJheV9zdWJzY3JpcHRfd2l0aF90eXBlX2NoYXIgKHRyZWUpOworZXh0ZXJuIHZvaWQgd2Fybl9hYm91dF9wYXJlbnRoZXNlcyAoZW51bSB0cmVlX2NvZGUsCisJCQkJICAgIGVudW0gdHJlZV9jb2RlLCB0cmVlLAorCQkJCSAgICBlbnVtIHRyZWVfY29kZSwgdHJlZSk7CitleHRlcm4gdm9pZCB3YXJuX2Zvcl91bnVzZWRfbGFiZWwgKHRyZWUgbGFiZWwpOworZXh0ZXJuIHZvaWQgd2Fybl9mb3JfZGl2X2J5X3plcm8gKGxvY2F0aW9uX3QsIHRyZWUgZGl2aXNvcik7CitleHRlcm4gdm9pZCB3YXJuX2Zvcl9zaWduX2NvbXBhcmUgKGxvY2F0aW9uX3QsCisJCQkJICAgdHJlZSBvcmlnX29wMCwgdHJlZSBvcmlnX29wMSwKKwkJCQkgICB0cmVlIG9wMCwgdHJlZSBvcDEsCisJCQkJICAgdHJlZSByZXN1bHRfdHlwZSwKKwkJCQkgICBlbnVtIHRyZWVfY29kZSByZXN1bHRjb2RlKTsKK2V4dGVybiB2b2lkIHNldF91bmRlcmx5aW5nX3R5cGUgKHRyZWUgeCk7CitleHRlcm4gYm9vbCBpc190eXBlZGVmX2RlY2wgKHRyZWUgeCk7CitleHRlcm4gVkVDKHRyZWUsZ2MpICptYWtlX3RyZWVfdmVjdG9yICh2b2lkKTsKK2V4dGVybiB2b2lkIHJlbGVhc2VfdHJlZV92ZWN0b3IgKFZFQyh0cmVlLGdjKSAqKTsKK2V4dGVybiBWRUModHJlZSxnYykgKm1ha2VfdHJlZV92ZWN0b3Jfc2luZ2xlICh0cmVlKTsKK2V4dGVybiBWRUModHJlZSxnYykgKm1ha2VfdHJlZV92ZWN0b3JfY29weSAoY29uc3QgVkVDKHRyZWUsZ2MpICopOworCisvKiBJbiBjLWdpbXBsaWZ5LmMgICovCitleHRlcm4gdm9pZCBjX2dlbmVyaWNpemUgKHRyZWUpOworZXh0ZXJuIGludCBjX2dpbXBsaWZ5X2V4cHIgKHRyZWUgKiwgZ2ltcGxlX3NlcSAqLCBnaW1wbGVfc2VxICopOworZXh0ZXJuIHRyZWUgY19idWlsZF9iaW5kX2V4cHIgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUpOworCisvKiBJbiBjLXBjaC5jICAqLworZXh0ZXJuIHZvaWQgcGNoX2luaXQgKHZvaWQpOworZXh0ZXJuIGludCBjX2NvbW1vbl92YWxpZF9wY2ggKGNwcF9yZWFkZXIgKnBmaWxlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgZmQpOworZXh0ZXJuIHZvaWQgY19jb21tb25fcmVhZF9wY2ggKGNwcF9yZWFkZXIgKnBmaWxlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgZmQsCisJCQkgICAgICAgY29uc3QgY2hhciAqb3JpZyk7CitleHRlcm4gdm9pZCBjX2NvbW1vbl93cml0ZV9wY2ggKHZvaWQpOworZXh0ZXJuIHZvaWQgY19jb21tb25fbm9fbW9yZV9wY2ggKHZvaWQpOworZXh0ZXJuIHZvaWQgY19jb21tb25fcGNoX3ByYWdtYSAoY3BwX3JlYWRlciAqcGZpbGUsIGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9pZCBjX2NvbW1vbl9wcmludF9wY2hfY2hlY2tzdW0gKEZJTEUgKmYpOworCisvKiBJbiAqLWNoZWNrc3VtLmMgKi8KK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGV4ZWN1dGFibGVfY2hlY2tzdW1bMTZdOworCisvKiBJbiBjLWNwcGJ1aWx0aW4uYyAgKi8KK2V4dGVybiB2b2lkIGJ1aWx0aW5fZGVmaW5lX3N0ZCAoY29uc3QgY2hhciAqbWFjcm8pOworZXh0ZXJuIHZvaWQgYnVpbHRpbl9kZWZpbmVfd2l0aF92YWx1ZSAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gdm9pZCBjX3N0ZGRlZl9jcHBfYnVpbHRpbnMgKHZvaWQpOworZXh0ZXJuIHZvaWQgZmVfZmlsZV9jaGFuZ2UgKGNvbnN0IHN0cnVjdCBsaW5lX21hcCAqKTsKK2V4dGVybiB2b2lkIGNfcGFyc2VfZXJyb3IgKGNvbnN0IGNoYXIgKiwgZW51bSBjcHBfdHR5cGUsIHRyZWUsIHVuc2lnbmVkIGNoYXIpOworCisvKiBPYmplY3RpdmUtQyAvIE9iamVjdGl2ZS1DKysgZW50cnkgcG9pbnRzLiAgKi8KKworLyogVGhlIGZvbGxvd2luZyBPYmpDL09iakMrKyBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSB0aGUgQyBhbmQvb3IgQysrCisgICBmcm9udC1lbmRzOyB0aGV5IGFsbCBtdXN0IGhhdmUgY29ycmVzcG9uZGluZyBzdHVicyBpbiBzdHViLW9iamMuYy4gICovCitleHRlcm4gdHJlZSBvYmpjX2lzX2NsYXNzX25hbWUgKHRyZWUpOworZXh0ZXJuIHRyZWUgb2JqY19pc19vYmplY3RfcHRyICh0cmVlKTsKK2V4dGVybiB2b2lkIG9iamNfY2hlY2tfZGVjbCAodHJlZSk7CitleHRlcm4gaW50IG9iamNfaXNfcmVzZXJ2ZWRfd29yZCAodHJlZSk7CitleHRlcm4gYm9vbCBvYmpjX2NvbXBhcmVfdHlwZXMgKHRyZWUsIHRyZWUsIGludCwgdHJlZSk7CitleHRlcm4gdm9pZCBvYmpjX3ZvbGF0aWxpemVfZGVjbCAodHJlZSk7CitleHRlcm4gYm9vbCBvYmpjX3R5cGVfcXVhbHNfbWF0Y2ggKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgb2JqY19yZXdyaXRlX2Z1bmN0aW9uX2NhbGwgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgb2JqY19tZXNzYWdlX3NlbGVjdG9yICh2b2lkKTsKK2V4dGVybiB0cmVlIG9iamNfbG9va3VwX2l2YXIgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgb2JqY19jbGVhcl9zdXBlcl9yZWNlaXZlciAodm9pZCk7CitleHRlcm4gaW50IG9iamNfaXNfcHVibGljICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIG9iamNfaXNfaWQgKHRyZWUpOworZXh0ZXJuIHZvaWQgb2JqY19kZWNsYXJlX2FsaWFzICh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIG9iamNfZGVjbGFyZV9jbGFzcyAodHJlZSk7CitleHRlcm4gdm9pZCBvYmpjX2RlY2xhcmVfcHJvdG9jb2xzICh0cmVlKTsKK2V4dGVybiB0cmVlIG9iamNfYnVpbGRfbWVzc2FnZV9leHByICh0cmVlKTsKK2V4dGVybiB0cmVlIG9iamNfZmluaXNoX21lc3NhZ2VfZXhwciAodHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBvYmpjX2J1aWxkX3NlbGVjdG9yX2V4cHIgKGxvY2F0aW9uX3QsIHRyZWUpOworZXh0ZXJuIHRyZWUgb2JqY19idWlsZF9wcm90b2NvbF9leHByICh0cmVlKTsKK2V4dGVybiB0cmVlIG9iamNfYnVpbGRfZW5jb2RlX2V4cHIgKHRyZWUpOworZXh0ZXJuIHRyZWUgb2JqY19idWlsZF9zdHJpbmdfb2JqZWN0ICh0cmVlKTsKK2V4dGVybiB0cmVlIG9iamNfZ2V0X3Byb3RvY29sX3F1YWxpZmllZF90eXBlICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIG9iamNfZ2V0X2NsYXNzX3JlZmVyZW5jZSAodHJlZSk7CitleHRlcm4gdHJlZSBvYmpjX2dldF9jbGFzc19pdmFycyAodHJlZSk7CitleHRlcm4gdm9pZCBvYmpjX3N0YXJ0X2NsYXNzX2ludGVyZmFjZSAodHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBvYmpjX3N0YXJ0X2NhdGVnb3J5X2ludGVyZmFjZSAodHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBvYmpjX3N0YXJ0X3Byb3RvY29sICh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIG9iamNfY29udGludWVfaW50ZXJmYWNlICh2b2lkKTsKK2V4dGVybiB2b2lkIG9iamNfZmluaXNoX2ludGVyZmFjZSAodm9pZCk7CitleHRlcm4gdm9pZCBvYmpjX3N0YXJ0X2NsYXNzX2ltcGxlbWVudGF0aW9uICh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIG9iamNfc3RhcnRfY2F0ZWdvcnlfaW1wbGVtZW50YXRpb24gKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgb2JqY19jb250aW51ZV9pbXBsZW1lbnRhdGlvbiAodm9pZCk7CitleHRlcm4gdm9pZCBvYmpjX2ZpbmlzaF9pbXBsZW1lbnRhdGlvbiAodm9pZCk7CitleHRlcm4gdm9pZCBvYmpjX3NldF92aXNpYmlsaXR5IChpbnQpOworZXh0ZXJuIHZvaWQgb2JqY19zZXRfbWV0aG9kX3R5cGUgKGVudW0gdHJlZV9jb2RlKTsKK2V4dGVybiB0cmVlIG9iamNfYnVpbGRfbWV0aG9kX3NpZ25hdHVyZSAodHJlZSwgdHJlZSwgdHJlZSwgYm9vbCk7CitleHRlcm4gdm9pZCBvYmpjX2FkZF9tZXRob2RfZGVjbGFyYXRpb24gKHRyZWUpOworZXh0ZXJuIHZvaWQgb2JqY19zdGFydF9tZXRob2RfZGVmaW5pdGlvbiAodHJlZSk7CitleHRlcm4gdm9pZCBvYmpjX2ZpbmlzaF9tZXRob2RfZGVmaW5pdGlvbiAodHJlZSk7CitleHRlcm4gdm9pZCBvYmpjX2FkZF9pbnN0YW5jZV92YXJpYWJsZSAodHJlZSk7CitleHRlcm4gdHJlZSBvYmpjX2J1aWxkX2tleXdvcmRfZGVjbCAodHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBvYmpjX2J1aWxkX3Rocm93X3N0bXQgKGxvY2F0aW9uX3QsIHRyZWUpOworZXh0ZXJuIHZvaWQgb2JqY19iZWdpbl90cnlfc3RtdCAobG9jYXRpb25fdCwgdHJlZSk7CitleHRlcm4gdHJlZSBvYmpjX2ZpbmlzaF90cnlfc3RtdCAodm9pZCk7CitleHRlcm4gdm9pZCBvYmpjX2JlZ2luX2NhdGNoX2NsYXVzZSAodHJlZSk7CitleHRlcm4gdm9pZCBvYmpjX2ZpbmlzaF9jYXRjaF9jbGF1c2UgKHZvaWQpOworZXh0ZXJuIHZvaWQgb2JqY19idWlsZF9maW5hbGx5X2NsYXVzZSAobG9jYXRpb25fdCwgdHJlZSk7CitleHRlcm4gdHJlZSBvYmpjX2J1aWxkX3N5bmNocm9uaXplZCAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSk7CitleHRlcm4gaW50IG9iamNfc3RhdGljX2luaXRfbmVlZGVkX3AgKHZvaWQpOworZXh0ZXJuIHRyZWUgb2JqY19nZW5lcmF0ZV9zdGF0aWNfaW5pdF9jYWxsICh0cmVlKTsKK2V4dGVybiB0cmVlIG9iamNfZ2VuZXJhdGVfd3JpdGVfYmFycmllciAodHJlZSwgZW51bSB0cmVlX2NvZGUsIHRyZWUpOworCisvKiBUaGUgZm9sbG93aW5nIGFyZSBwcm92aWRlZCBieSB0aGUgQyBhbmQgQysrIGZyb250LWVuZHMsIGFuZCBjYWxsZWQgYnkKKyAgIE9iakMvT2JqQysrLiAgKi8KK2V4dGVybiB2b2lkICpvYmpjX2dldF9jdXJyZW50X3Njb3BlICh2b2lkKTsKK2V4dGVybiB2b2lkIG9iamNfbWFya19sb2NhbHNfdm9sYXRpbGUgKHZvaWQgKik7CisKKy8qIEluIGMtcHBvdXRwdXQuYyAgKi8KK2V4dGVybiB2b2lkIGluaXRfcHBfb3V0cHV0IChGSUxFICopOworZXh0ZXJuIHZvaWQgcHJlcHJvY2Vzc19maWxlIChjcHBfcmVhZGVyICopOworZXh0ZXJuIHZvaWQgcHBfZmlsZV9jaGFuZ2UgKGNvbnN0IHN0cnVjdCBsaW5lX21hcCAqKTsKK2V4dGVybiB2b2lkIHBwX2Rpcl9jaGFuZ2UgKGNwcF9yZWFkZXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBib29sIGNoZWNrX21pc3NpbmdfZm9ybWF0X2F0dHJpYnV0ZSAodHJlZSwgdHJlZSk7CisKKy8qIEluIGMtb21wLmMgICovCitleHRlcm4gdHJlZSBjX2ZpbmlzaF9vbXBfbWFzdGVyIChsb2NhdGlvbl90LCB0cmVlKTsKK2V4dGVybiB0cmVlIGNfZmluaXNoX29tcF9jcml0aWNhbCAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBjX2ZpbmlzaF9vbXBfb3JkZXJlZCAobG9jYXRpb25fdCwgdHJlZSk7CitleHRlcm4gdm9pZCBjX2ZpbmlzaF9vbXBfYmFycmllciAobG9jYXRpb25fdCk7CitleHRlcm4gdHJlZSBjX2ZpbmlzaF9vbXBfYXRvbWljIChsb2NhdGlvbl90LCBlbnVtIHRyZWVfY29kZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBjX2ZpbmlzaF9vbXBfZmx1c2ggKGxvY2F0aW9uX3QpOworZXh0ZXJuIHZvaWQgY19maW5pc2hfb21wX3Rhc2t3YWl0IChsb2NhdGlvbl90KTsKK2V4dGVybiB0cmVlIGNfZmluaXNoX29tcF9mb3IgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgY19zcGxpdF9wYXJhbGxlbF9jbGF1c2VzIChsb2NhdGlvbl90LCB0cmVlLCB0cmVlICosIHRyZWUgKik7CitleHRlcm4gZW51bSBvbXBfY2xhdXNlX2RlZmF1bHRfa2luZCBjX29tcF9wcmVkZXRlcm1pbmVkX3NoYXJpbmcgKHRyZWUpOworCisvKiBOb3QgaW4gYy1vbXAuYzsgcHJvdmlkZWQgYnkgdGhlIGZyb250IGVuZC4gICovCitleHRlcm4gYm9vbCBjX29tcF9zaGFyaW5nX3ByZWRldGVybWluZWQgKHRyZWUpOworZXh0ZXJuIHRyZWUgY19vbXBfcmVtYXBfZGVjbCAodHJlZSwgYm9vbCk7CitleHRlcm4gdm9pZCByZWNvcmRfdHlwZXNfdXNlZF9ieV9jdXJyZW50X3Zhcl9kZWNsICh0cmVlKTsKKworLyogSW4gb3JkZXIgZm9yIHRoZSBmb3JtYXQgY2hlY2tpbmcgdG8gYWNjZXB0IHRoZSBDIGZyb250ZW5kCisgICBkaWFnbm9zdGljIGZyYW1ld29yayBleHRlbnNpb25zLCB5b3UgbXVzdCBpbmNsdWRlIHRoaXMgZmlsZSBiZWZvcmUKKyAgIHRvcGxldi5oLCBub3QgYWZ0ZXIuICBUaGUgQyBmcm9udCBlbmQgZm9ybWF0cyBhcmUgYSBzdWJzZXQgb2YgdGhvc2UKKyAgIGZvciBDKyssIHNvIHRoZXkgYXJlIHRoZSBhcHByb3ByaWF0ZSBzZXQgdG8gdXNlIGluIGNvbW1vbiBjb2RlOworICAgY3AtdHJlZS5oIG92ZXJyaWRlcyB0aGlzIGZvciBDKysuICAqLworI2lmbmRlZiBHQ0NfRElBR19TVFlMRQorI2RlZmluZSBHQ0NfRElBR19TVFlMRSBfX2djY19jZGlhZ19fCisjZW5kaWYKKworI2VuZGlmIC8qICEgR0NDX0NfQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jLXByYWdtYS5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2MtcHJhZ21hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFiMjNkYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jLXByYWdtYS5oCkBAIC0wLDAgKzEsMTMzIEBACisvKiBQcmFnbWEgcmVsYXRlZCBpbnRlcmZhY2VzLgorICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LAorICAgMjAwNywgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19DX1BSQUdNQV9ICisjZGVmaW5lIEdDQ19DX1BSQUdNQV9ICisKKyNpbmNsdWRlIDxjcHBsaWIuaD4gLyogRm9yIGVudW0gY3BwX3R0eXBlLiAgKi8KKworLyogUHJhZ21hIGlkZW50aWZpZXJzIGJ1aWx0IGluIHRvIHRoZSBmcm9udCBlbmQgcGFyc2Vycy4gIElkZW50aWZpZXJzCisgICBmb3IgYW5jaWxsYXJ5IGhhbmRsZXJzIHdpbGwgZm9sbG93IHRoZXNlLiAgKi8KK3R5cGVkZWYgZW51bSBwcmFnbWFfa2luZCB7CisgIFBSQUdNQV9OT05FID0gMCwKKworICBQUkFHTUFfT01QX0FUT01JQywKKyAgUFJBR01BX09NUF9CQVJSSUVSLAorICBQUkFHTUFfT01QX0NSSVRJQ0FMLAorICBQUkFHTUFfT01QX0ZMVVNILAorICBQUkFHTUFfT01QX0ZPUiwKKyAgUFJBR01BX09NUF9NQVNURVIsCisgIFBSQUdNQV9PTVBfT1JERVJFRCwKKyAgUFJBR01BX09NUF9QQVJBTExFTCwKKyAgUFJBR01BX09NUF9QQVJBTExFTF9GT1IsCisgIFBSQUdNQV9PTVBfUEFSQUxMRUxfU0VDVElPTlMsCisgIFBSQUdNQV9PTVBfU0VDVElPTiwKKyAgUFJBR01BX09NUF9TRUNUSU9OUywKKyAgUFJBR01BX09NUF9TSU5HTEUsCisgIFBSQUdNQV9PTVBfVEFTSywKKyAgUFJBR01BX09NUF9UQVNLV0FJVCwKKyAgUFJBR01BX09NUF9USFJFQURQUklWQVRFLAorCisgIFBSQUdNQV9HQ0NfUENIX1BSRVBST0NFU1MsCisKKyAgUFJBR01BX0ZJUlNUX0VYVEVSTkFMCit9IHByYWdtYV9raW5kOworCisKKy8qIEFsbCBjbGF1c2VzIGRlZmluZWQgYnkgT3Blbk1QIDIuNSBhbmQgMy4wLgorICAgVXNlZCBpbnRlcm5hbGx5IGJ5IGJvdGggQyBhbmQgQysrIHBhcnNlcnMuICAqLwordHlwZWRlZiBlbnVtIHByYWdtYV9vbXBfY2xhdXNlIHsKKyAgUFJBR01BX09NUF9DTEFVU0VfTk9ORSA9IDAsCisKKyAgUFJBR01BX09NUF9DTEFVU0VfQ09MTEFQU0UsCisgIFBSQUdNQV9PTVBfQ0xBVVNFX0NPUFlJTiwKKyAgUFJBR01BX09NUF9DTEFVU0VfQ09QWVBSSVZBVEUsCisgIFBSQUdNQV9PTVBfQ0xBVVNFX0RFRkFVTFQsCisgIFBSQUdNQV9PTVBfQ0xBVVNFX0ZJUlNUUFJJVkFURSwKKyAgUFJBR01BX09NUF9DTEFVU0VfSUYsCisgIFBSQUdNQV9PTVBfQ0xBVVNFX0xBU1RQUklWQVRFLAorICBQUkFHTUFfT01QX0NMQVVTRV9OT1dBSVQsCisgIFBSQUdNQV9PTVBfQ0xBVVNFX05VTV9USFJFQURTLAorICBQUkFHTUFfT01QX0NMQVVTRV9PUkRFUkVELAorICBQUkFHTUFfT01QX0NMQVVTRV9QUklWQVRFLAorICBQUkFHTUFfT01QX0NMQVVTRV9SRURVQ1RJT04sCisgIFBSQUdNQV9PTVBfQ0xBVVNFX1NDSEVEVUxFLAorICBQUkFHTUFfT01QX0NMQVVTRV9TSEFSRUQsCisgIFBSQUdNQV9PTVBfQ0xBVVNFX1VOVElFRAorfSBwcmFnbWFfb21wX2NsYXVzZTsKKworZXh0ZXJuIHN0cnVjdCBjcHBfcmVhZGVyKiBwYXJzZV9pbjsKKworI2RlZmluZSBIQU5ETEVfUFJBR01BX1dFQUsgU1VQUE9SVFNfV0VBSworCisjaWZkZWYgSEFORExFX1NZU1ZfUFJBR01BCisvKiBXZSBhbHdheXMgc3VwcG9ydCAjcHJhZ21hIHBhY2sgZm9yIFNZU1YgcHJhZ21hcy4gICovCisjaWZuZGVmIEhBTkRMRV9QUkFHTUFfUEFDSworI2RlZmluZSBIQU5ETEVfUFJBR01BX1BBQ0sgMQorI2VuZGlmCisjZW5kaWYgLyogSEFORExFX1NZU1ZfUFJBR01BICovCisKKworI2lmZGVmIEhBTkRMRV9QUkFHTUFfUEFDS19QVVNIX1BPUAorLyogSWYgd2UgYXJlIHN1cHBvcnRpbmcgI3ByYWdtYSBwYWNrKHB1c2guLi4gdGhlbiB3ZSBhdXRvbWF0aWNhbGx5CisgICBzdXBwb3J0ICNwcmFnbWEgcGFjayg8bj4pICAqLworI2RlZmluZSBIQU5ETEVfUFJBR01BX1BBQ0sgMQorI2VuZGlmIC8qIEhBTkRMRV9QUkFHTUFfUEFDS19QVVNIX1BPUCAqLworCisvKiBJdCdzIHNhZmUgdG8gYWx3YXlzIGxlYXZlIHZpc2liaWxpdHkgcHJhZ21hIGVuYWJsZWQgYXMgaWYKKyAgIHZpc2liaWxpdHkgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGUgaG9zdCBPUyBwbGF0Zm9ybSB0aGUKKyAgIHN0YXRlbWVudHMgYXJlIGlnbm9yZWQuICAqLworI2RlZmluZSBIQU5ETEVfUFJBR01BX1ZJU0lCSUxJVFkgMQorZXh0ZXJuIHZvaWQgcHVzaF92aXNpYmlsaXR5IChjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gYm9vbCBwb3BfdmlzaWJpbGl0eSAoaW50KTsKKworZXh0ZXJuIHZvaWQgaW5pdF9wcmFnbWEgKHZvaWQpOworCisvKiBGcm9udC1lbmQgd3JhcHBlcnMgZm9yIHByYWdtYSByZWdpc3RyYXRpb24uICAqLwordHlwZWRlZiB2b2lkICgqcHJhZ21hX2hhbmRsZXIpKHN0cnVjdCBjcHBfcmVhZGVyICopOworZXh0ZXJuIHZvaWQgY19yZWdpc3Rlcl9wcmFnbWEgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBwcmFnbWFfaGFuZGxlcik7CitleHRlcm4gdm9pZCBjX3JlZ2lzdGVyX3ByYWdtYV93aXRoX2V4cGFuc2lvbiAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCisJCQkJCSAgICAgIHByYWdtYV9oYW5kbGVyKTsKK2V4dGVybiB2b2lkIGNfaW52b2tlX3ByYWdtYV9oYW5kbGVyICh1bnNpZ25lZCBpbnQpOworCitleHRlcm4gdm9pZCBtYXliZV9hcHBseV9wcmFnbWFfd2VhayAodHJlZSk7CitleHRlcm4gdm9pZCBtYXliZV9hcHBseV9wZW5kaW5nX3ByYWdtYV93ZWFrcyAodm9pZCk7CitleHRlcm4gdHJlZSBtYXliZV9hcHBseV9yZW5hbWluZ19wcmFnbWEgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgYWRkX3RvX3JlbmFtaW5nX3ByYWdtYV9saXN0ICh0cmVlLCB0cmVlKTsKKworZXh0ZXJuIGVudW0gY3BwX3R0eXBlIHByYWdtYV9sZXggKHRyZWUgKik7CisKKy8qIEZsYWdzIGZvciB1c2Ugd2l0aCBjX2xleF93aXRoX2ZsYWdzLiAgVGhlIHZhbHVlcyBoZXJlIHdlcmUgcGlja2VkCisgICBzbyB0aGF0IDAgbWVhbnMgdG8gdHJhbnNsYXRlIGFuZCBqb2luIHN0cmluZ3MuICAqLworI2RlZmluZSBDX0xFWF9TVFJJTkdfTk9fVFJBTlNMQVRFIDEgLyogRG8gbm90IGxleCBzdHJpbmdzIGludG8KKwkJCQkgICAgICAgZXhlY3V0aW9uIGNoYXJhY3RlciBzZXQuICAqLworI2RlZmluZSBDX0xFWF9TVFJJTkdfTk9fSk9JTgkgIDIgLyogRG8gbm90IGNvbmNhdGVuYXRlIHN0cmluZ3MKKwkJCQkgICAgICAgbm9yIHRyYW5zbGF0ZSB0aGVtIGludG8gZXhlY3V0aW9uCisJCQkJICAgICAgIGNoYXJhY3RlciBzZXQuICAqLworCisvKiBUaGlzIGlzIG5vdCBhY3R1YWxseSBhdmFpbGFibGUgdG8gcHJhZ21hIHBhcnNlcnMuICBJdCdzIG1lcmVseSBhCisgICBjb252ZW5pZW50IGxvY2F0aW9uIHRvIGRlY2xhcmUgdGhpcyBmdW5jdGlvbiBmb3IgYy1sZXgsIGFmdGVyCisgICBoYXZpbmcgZW51bSBjcHBfdHR5cGUgZGVjbGFyZWQuICAqLworZXh0ZXJuIGVudW0gY3BwX3R0eXBlIGNfbGV4X3dpdGhfZmxhZ3MgKHRyZWUgKiwgbG9jYXRpb25fdCAqLCB1bnNpZ25lZCBjaGFyICosCisJCQkJCWludCk7CisKK2V4dGVybiB2b2lkIGNfcHBfbG9va3VwX3ByYWdtYSAodW5zaWduZWQgaW50LCBjb25zdCBjaGFyICoqLCBjb25zdCBjaGFyICoqKTsKKworI2VuZGlmIC8qIEdDQ19DX1BSQUdNQV9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvYy1wcmV0dHktcHJpbnQuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jLXByZXR0eS1wcmludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMTJiYjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvYy1wcmV0dHktcHJpbnQuaApAQCAtMCwwICsxLDIxMiBAQAorLyogVmFyaW91cyBkZWNsYXJhdGlvbnMgZm9yIHRoZSBDIGFuZCBDKysgcHJldHR5LXByaW50ZXJzLgorICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgR2FicmllbCBEb3MgUmVpcyA8Z2RyQGludGVncmFibGUtc29sdXRpb25zLm5ldD4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX0NfUFJFVFRZX1BSSU5URVIKKyNkZWZpbmUgR0NDX0NfUFJFVFRZX1BSSU5URVIKKworI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJjLWNvbW1vbi5oIgorI2luY2x1ZGUgInByZXR0eS1wcmludC5oIgorCisKK3R5cGVkZWYgZW51bQorICB7CisgICAgIHBwX2NfZmxhZ19hYnN0cmFjdCA9IDEgPDwgMSwKKyAgICAgcHBfY19mbGFnX2xhc3RfYml0ID0gMgorICB9IHBwX2NfcHJldHR5X3ByaW50X2ZsYWdzOworCisKKy8qIFRoZSBkYXRhIHR5cGUgdXNlZCB0byBidW5kbGUgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciBwcmV0dHktcHJpbnRpbmcKKyAgIGEgQyBvciBDKysgZW50aXR5LiAgKi8KK3R5cGVkZWYgc3RydWN0IGNfcHJldHR5X3ByaW50X2luZm8gY19wcmV0dHlfcHJpbnRlcjsKKworLyogVGhlIHR5cGUgb2YgYSBDIHByZXR0eS1wcmludGVyICdtZW1iZXInIGZ1bmN0aW9uLiAgKi8KK3R5cGVkZWYgdm9pZCAoKmNfcHJldHR5X3ByaW50X2ZuKSAoY19wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKKworLyogVGhlIGRhdGF0eXBlIHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciBwcmV0dHktcHJpbnRpbmcKKyAgIGEgdHJlZSB0aGF0IHJlcHJlc2VudHMgYSBDIGNvbnN0cnVjdC4gIEFueSBwcmV0dHktcHJpbnRlciBmb3IgYQorICAgbGFuZ3VhZ2UgdXNpbmcgQy9jKysgc3ludGF4IGNhbiBkZXJpdmUgZnJvbSB0aGlzIGRhdGF0eXBlIGFuZCByZXVzZQorICAgZmFjaWxpdGllcyBwcm92aWRlZCBoZXJlLiAgSXQgY2FuIGRvIHNvIGJ5IGhhdmluZyBhIHN1Ym9iamVjdCBvZiB0eXBlCisgICBjX3ByZXR0eV9wcmludGVyIGFuZCBvdmVycmlkZSB0aGUgbWFjcm8gcHBfY19iYXNlIHRvIHJldHVybiBhIHBvaW50ZXIKKyAgIHRvIHRoYXQgc3Vib2JqZWN0LiAgU3VjaCBhIHByZXR0eS1wcmludGVyIGhhcyB0aGUgcmVzcG9uc2liaWxpdHkgdG8KKyAgIGluaXRpYWxpemUgdGhlIHBwX2Jhc2UoKSBwYXJ0LCB0aGVuIGNhbGwgcHBfY19wcmV0dHlfcHJpbnRlcl9pbml0CisgICB0byBzZXQgdXAgdGhlIGNvbXBvbmVudHMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIEMgcHJldHR5LXByaW50ZXIuCisgICBBIGRlcml2ZWQgcHJldHR5LXByaW50ZXIgY2FuIG92ZXJyaWRlIGFueSBmdW5jdGlvbiBsaXN0ZWQgaW4gdGhlCisgICB2dGFibGUgYmVsb3cuICBTZWUgY3AvY3h4LXByZXR0eS1wcmludC5oIGFuZCBjcC9jeHgtcHJldHR5LXByaW50LmMKKyAgIGZvciBhbiBleGFtcGxlIG9mIGRlcml2YXRpb24uICAqLworc3RydWN0IGNfcHJldHR5X3ByaW50X2luZm8KK3sKKyAgcHJldHR5X3ByaW50ZXIgYmFzZTsKKyAgLyogUG9pbnRzIHRvIHRoZSBmaXJzdCBlbGVtZW50IG9mIGFuIGFycmF5IG9mIG9mZnNldC1saXN0LgorICAgICBOb3QgdXNlZCB5ZXQuICAqLworICBpbnQgKm9mZnNldF9saXN0OworCisgIHBwX2ZsYWdzIGZsYWdzOworCisgIC8qIFRoZXNlIG11c3QgYmUgb3ZlcnJpZGRlbiBieSBlYWNoIG9mIHRoZSBDIGFuZCBDKysgZnJvbnQtZW5kIHRvCisgICAgIHJlZmxlY3QgdGhlaXIgdW5kZXJzdGFuZGluZyBvZiBzeW50YWN0aWMgcHJvZHVjdGlvbnMgd2hlbiB0aGV5IGRpZmZlci4gICovCisgIGNfcHJldHR5X3ByaW50X2ZuIGRlY2xhcmF0aW9uOworICBjX3ByZXR0eV9wcmludF9mbiBkZWNsYXJhdGlvbl9zcGVjaWZpZXJzOworICBjX3ByZXR0eV9wcmludF9mbiBkZWNsYXJhdG9yOworICBjX3ByZXR0eV9wcmludF9mbiBhYnN0cmFjdF9kZWNsYXJhdG9yOworICBjX3ByZXR0eV9wcmludF9mbiBkaXJlY3RfYWJzdHJhY3RfZGVjbGFyYXRvcjsKKyAgY19wcmV0dHlfcHJpbnRfZm4gdHlwZV9zcGVjaWZpZXJfc2VxOworICBjX3ByZXR0eV9wcmludF9mbiBkaXJlY3RfZGVjbGFyYXRvcjsKKyAgY19wcmV0dHlfcHJpbnRfZm4gcHRyX29wZXJhdG9yOworICBjX3ByZXR0eV9wcmludF9mbiBwYXJhbWV0ZXJfbGlzdDsKKyAgY19wcmV0dHlfcHJpbnRfZm4gdHlwZV9pZDsKKyAgY19wcmV0dHlfcHJpbnRfZm4gc2ltcGxlX3R5cGVfc3BlY2lmaWVyOworICBjX3ByZXR0eV9wcmludF9mbiBmdW5jdGlvbl9zcGVjaWZpZXI7CisgIGNfcHJldHR5X3ByaW50X2ZuIHN0b3JhZ2VfY2xhc3Nfc3BlY2lmaWVyOworICBjX3ByZXR0eV9wcmludF9mbiBpbml0aWFsaXplcjsKKworICBjX3ByZXR0eV9wcmludF9mbiBzdGF0ZW1lbnQ7CisKKyAgY19wcmV0dHlfcHJpbnRfZm4gY29uc3RhbnQ7CisgIGNfcHJldHR5X3ByaW50X2ZuIGlkX2V4cHJlc3Npb247CisgIGNfcHJldHR5X3ByaW50X2ZuIHByaW1hcnlfZXhwcmVzc2lvbjsKKyAgY19wcmV0dHlfcHJpbnRfZm4gcG9zdGZpeF9leHByZXNzaW9uOworICBjX3ByZXR0eV9wcmludF9mbiB1bmFyeV9leHByZXNzaW9uOworICBjX3ByZXR0eV9wcmludF9mbiBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uOworICBjX3ByZXR0eV9wcmludF9mbiBjb25kaXRpb25hbF9leHByZXNzaW9uOworICBjX3ByZXR0eV9wcmludF9mbiBhc3NpZ25tZW50X2V4cHJlc3Npb247CisgIGNfcHJldHR5X3ByaW50X2ZuIGV4cHJlc3Npb247Cit9OworCisvKiBPdmVycmlkZSB0aGUgcHBfYmFzZSBtYWNyby4gIERlcml2ZWQgcHJldHR5LXByaW50ZXJzIHNob3VsZCBub3QKKyAgIHRvdWNoIHRoaXMgbWFjcm8uICBJbnN0ZWFkIHRoZXkgc2hvdWxkIG92ZXJyaWRlIHBwX2NfYmFzZSBpbnN0ZWFkLiAgKi8KKyN1bmRlZiBwcF9iYXNlCisjZGVmaW5lIHBwX2Jhc2UoUFApICAoJnBwX2NfYmFzZSAoUFApLT5iYXNlKQorCisKKyNkZWZpbmUgcHBfY190cmVlX2lkZW50aWZpZXIoUFBJLCBJRCkgICAgICAgICAgICAgIFwKKyAgIHBwX2NfaWRlbnRpZmllciAoUFBJLCBJREVOVElGSUVSX1BPSU5URVIgKElEKSkKKworI2RlZmluZSBwcF9kZWNsYXJhdGlvbihQUEksIFQpICAgICAgICAgICAgICAgICAgICBcCisgICBwcF9jX2Jhc2UgKFBQSSktPmRlY2xhcmF0aW9uIChwcF9jX2Jhc2UgKFBQSSksIFQpCisjZGVmaW5lIHBwX2RlY2xhcmF0aW9uX3NwZWNpZmllcnMoUFBJLCBEKSAgICAgICAgIFwKKyAgIHBwX2NfYmFzZSAoUFBJKS0+ZGVjbGFyYXRpb25fc3BlY2lmaWVycyAocHBfY19iYXNlIChQUEkpLCBEKQorI2RlZmluZSBwcF9hYnN0cmFjdF9kZWNsYXJhdG9yKFBQLCBEKSAgICAgICAgICAgICBcCisgICBwcF9jX2Jhc2UgKFBQKS0+YWJzdHJhY3RfZGVjbGFyYXRvciAocHBfY19iYXNlIChQUCksIEQpCisjZGVmaW5lIHBwX3R5cGVfc3BlY2lmaWVyX3NlcShQUEksIEQpICAgICAgICAgICAgIFwKKyAgIHBwX2NfYmFzZSAoUFBJKS0+dHlwZV9zcGVjaWZpZXJfc2VxIChwcF9jX2Jhc2UgKFBQSSksIEQpCisjZGVmaW5lIHBwX2RlY2xhcmF0b3IoUFBJLCBEKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgIHBwX2NfYmFzZSAoUFBJKS0+ZGVjbGFyYXRvciAocHBfY19iYXNlIChQUEkpLCBEKQorI2RlZmluZSBwcF9kaXJlY3RfZGVjbGFyYXRvcihQUEksIEQpICAgICAgICAgICAgICBcCisgICBwcF9jX2Jhc2UgKFBQSSktPmRpcmVjdF9kZWNsYXJhdG9yIChwcF9jX2Jhc2UgKFBQSSksIEQpCisjZGVmaW5lIHBwX2RpcmVjdF9hYnN0cmFjdF9kZWNsYXJhdG9yKFBQLCBEKSAgICAgIFwKKyAgIHBwX2NfYmFzZSAoUFApLT5kaXJlY3RfYWJzdHJhY3RfZGVjbGFyYXRvciAocHBfY19iYXNlIChQUCksIEQpCisjZGVmaW5lIHBwX3B0cl9vcGVyYXRvcihQUCwgRCkgICAgICAgICAgICAgICAgICAgIFwKKyAgIHBwX2NfYmFzZSAoUFApLT5wdHJfb3BlcmF0b3IgKHBwX2NfYmFzZSAoUFApLCBEKQorI2RlZmluZSBwcF9wYXJhbWV0ZXJfbGlzdChQUEksIFQpICAgICAgICAgICAgICAgICBcCisgIHBwX2NfYmFzZSAoUFBJKS0+cGFyYW1ldGVyX2xpc3QgKHBwX2NfYmFzZSAoUFBJKSwgVCkKKyNkZWZpbmUgcHBfdHlwZV9pZChQUEksIEQpICAgICAgICAgICAgICAgICAgICAgICAgXAorICBwcF9jX2Jhc2UgKFBQSSktPnR5cGVfaWQgKHBwX2NfYmFzZSAoUFBJKSwgRCkKKyNkZWZpbmUgcHBfc2ltcGxlX3R5cGVfc3BlY2lmaWVyKFBQLCBUKSAgICAgICAgICAgXAorICBwcF9jX2Jhc2UgKFBQKS0+c2ltcGxlX3R5cGVfc3BlY2lmaWVyIChwcF9jX2Jhc2UgKFBQKSwgVCkKKyNkZWZpbmUgcHBfZnVuY3Rpb25fc3BlY2lmaWVyKFBQLCBEKSAgICAgICAgICAgICAgXAorICBwcF9jX2Jhc2UgKFBQKS0+ZnVuY3Rpb25fc3BlY2lmaWVyIChwcF9jX2Jhc2UgKFBQKSwgRCkKKyNkZWZpbmUgcHBfc3RvcmFnZV9jbGFzc19zcGVjaWZpZXIoUFAsIEQpICAgICAgICAgXAorICBwcF9jX2Jhc2UgKFBQKS0+c3RvcmFnZV9jbGFzc19zcGVjaWZpZXIgKHBwX2NfYmFzZSAoUFApLCBEKTsKKworI2RlZmluZSBwcF9zdGF0ZW1lbnQoUFBJLCBTKSAgICAgICAgICAgICAgICAgICAgICBcCisgIHBwX2NfYmFzZSAoUFBJKS0+c3RhdGVtZW50IChwcF9jX2Jhc2UgKFBQSSksIFMpCisKKyNkZWZpbmUgcHBfY29uc3RhbnQoUFAsIEUpIFwKKyAgcHBfY19iYXNlIChQUCktPmNvbnN0YW50IChwcF9jX2Jhc2UgKFBQKSwgRSkKKyNkZWZpbmUgcHBfaWRfZXhwcmVzc2lvbihQUCwgRSkgIFwKKyAgcHBfY19iYXNlIChQUCktPmlkX2V4cHJlc3Npb24gKHBwX2NfYmFzZSAoUFApLCBFKQorI2RlZmluZSBwcF9wcmltYXJ5X2V4cHJlc3Npb24oUFBJLCBFKSAgICAgICAgICAgICBcCisgIHBwX2NfYmFzZSAoUFBJKS0+cHJpbWFyeV9leHByZXNzaW9uIChwcF9jX2Jhc2UgKFBQSSksIEUpCisjZGVmaW5lIHBwX3Bvc3RmaXhfZXhwcmVzc2lvbihQUEksIEUpICAgICAgICAgICAgIFwKKyAgcHBfY19iYXNlIChQUEkpLT5wb3N0Zml4X2V4cHJlc3Npb24gKHBwX2NfYmFzZSAoUFBJKSwgRSkKKyNkZWZpbmUgcHBfdW5hcnlfZXhwcmVzc2lvbihQUEksIEUpICAgICAgICAgICAgICAgXAorICBwcF9jX2Jhc2UgKFBQSSktPnVuYXJ5X2V4cHJlc3Npb24gKHBwX2NfYmFzZSAoUFBJKSwgRSkKKyNkZWZpbmUgcHBfaW5pdGlhbGl6ZXIoUFBJLCBFKSAgICAgICAgICAgICAgICAgICAgXAorICBwcF9jX2Jhc2UgKFBQSSktPmluaXRpYWxpemVyIChwcF9jX2Jhc2UgKFBQSSksIEUpCisjZGVmaW5lIHBwX211bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24oUFBJLCBFKSAgICAgIFwKKyAgcHBfY19iYXNlIChQUEkpLT5tdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIChwcF9jX2Jhc2UgKFBQSSksIEUpCisjZGVmaW5lIHBwX2NvbmRpdGlvbmFsX2V4cHJlc3Npb24oUFBJLCBFKSAgICAgICAgIFwKKyAgcHBfY19iYXNlIChQUEkpLT5jb25kaXRpb25hbF9leHByZXNzaW9uIChwcF9jX2Jhc2UgKFBQSSksIEUpCisjZGVmaW5lIHBwX2Fzc2lnbm1lbnRfZXhwcmVzc2lvbihQUEksIEUpICAgICAgICAgIFwKKyAgIHBwX2NfYmFzZSAoUFBJKS0+YXNzaWdubWVudF9leHByZXNzaW9uIChwcF9jX2Jhc2UgKFBQSSksIEUpCisjZGVmaW5lIHBwX2V4cHJlc3Npb24oUFAsIEUpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIHBwX2NfYmFzZSAoUFApLT5leHByZXNzaW9uIChwcF9jX2Jhc2UgKFBQKSwgRSkKKworCisvKiBSZXR1cm5zIHRoZSBjX3ByZXR0eV9wcmludGVyIGJhc2Ugb2JqZWN0IG9mIFBSRVRUWS1QUklOVEVSLiAgVGhpcworICAgbWFjcm8gbXVzdCBiZSBvdmVycmlkZGVuIGJ5IGFueSBzdWJjbGFzcyBvZiBjX3ByZXR0eV9wcmludF9pbmZvLiAgKi8KKyNkZWZpbmUgcHBfY19iYXNlKFBQKSAgKFBQKQorCitleHRlcm4gdm9pZCBwcF9jX3ByZXR0eV9wcmludGVyX2luaXQgKGNfcHJldHR5X3ByaW50ZXIgKik7Cit2b2lkIHBwX2Nfd2hpdGVzcGFjZSAoY19wcmV0dHlfcHJpbnRlciAqKTsKK3ZvaWQgcHBfY19sZWZ0X3BhcmVuIChjX3ByZXR0eV9wcmludGVyICopOwordm9pZCBwcF9jX3JpZ2h0X3BhcmVuIChjX3ByZXR0eV9wcmludGVyICopOwordm9pZCBwcF9jX2xlZnRfYnJhY2UgKGNfcHJldHR5X3ByaW50ZXIgKik7Cit2b2lkIHBwX2NfcmlnaHRfYnJhY2UgKGNfcHJldHR5X3ByaW50ZXIgKik7Cit2b2lkIHBwX2NfbGVmdF9icmFja2V0IChjX3ByZXR0eV9wcmludGVyICopOwordm9pZCBwcF9jX3JpZ2h0X2JyYWNrZXQgKGNfcHJldHR5X3ByaW50ZXIgKik7Cit2b2lkIHBwX2NfZG90IChjX3ByZXR0eV9wcmludGVyICopOwordm9pZCBwcF9jX2FtcGVyc2FuZCAoY19wcmV0dHlfcHJpbnRlciAqKTsKK3ZvaWQgcHBfY19zdGFyIChjX3ByZXR0eV9wcmludGVyICopOwordm9pZCBwcF9jX2Fycm93IChjX3ByZXR0eV9wcmludGVyICopOwordm9pZCBwcF9jX3NlbWljb2xvbiAoY19wcmV0dHlfcHJpbnRlciAqKTsKK3ZvaWQgcHBfY19jb21wbGVtZW50IChjX3ByZXR0eV9wcmludGVyICopOwordm9pZCBwcF9jX2V4Y2xhbWF0aW9uIChjX3ByZXR0eV9wcmludGVyICopOwordm9pZCBwcF9jX3NwYWNlX2Zvcl9wb2ludGVyX29wZXJhdG9yIChjX3ByZXR0eV9wcmludGVyICosIHRyZWUpOworCisvKiBEZWNsYXJhdGlvbnMuICAqLwordm9pZCBwcF9jX3RyZWVfZGVjbF9pZGVudGlmaWVyIChjX3ByZXR0eV9wcmludGVyICosIHRyZWUpOwordm9pZCBwcF9jX2Z1bmN0aW9uX2RlZmluaXRpb24gKGNfcHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7Cit2b2lkIHBwX2NfYXR0cmlidXRlcyAoY19wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKK3ZvaWQgcHBfY190eXBlX3F1YWxpZmllcl9saXN0IChjX3ByZXR0eV9wcmludGVyICosIHRyZWUpOwordm9pZCBwcF9jX3BhcmFtZXRlcl90eXBlX2xpc3QgKGNfcHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7Cit2b2lkIHBwX2NfZGVjbGFyYXRpb24gKGNfcHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7Cit2b2lkIHBwX2NfZGVjbGFyYXRpb25fc3BlY2lmaWVycyAoY19wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKK3ZvaWQgcHBfY19kZWNsYXJhdG9yIChjX3ByZXR0eV9wcmludGVyICosIHRyZWUpOwordm9pZCBwcF9jX2RpcmVjdF9kZWNsYXJhdG9yIChjX3ByZXR0eV9wcmludGVyICosIHRyZWUpOwordm9pZCBwcF9jX3NwZWNpZmllcl9xdWFsaWZpZXJfbGlzdCAoY19wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKK3ZvaWQgcHBfY19mdW5jdGlvbl9zcGVjaWZpZXIgKGNfcHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7Cit2b2lkIHBwX2NfdHlwZV9pZCAoY19wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKK3ZvaWQgcHBfY19kaXJlY3RfYWJzdHJhY3RfZGVjbGFyYXRvciAoY19wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKK3ZvaWQgcHBfY190eXBlX3NwZWNpZmllciAoY19wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKK3ZvaWQgcHBfY19zdG9yYWdlX2NsYXNzX3NwZWNpZmllciAoY19wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKKy8qIFN0YXRlbWVudHMuICAqLwordm9pZCBwcF9jX3N0YXRlbWVudCAoY19wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKKy8qIEV4cHJlc3Npb25zLiAgKi8KK3ZvaWQgcHBfY19leHByZXNzaW9uIChjX3ByZXR0eV9wcmludGVyICosIHRyZWUpOwordm9pZCBwcF9jX2xvZ2ljYWxfb3JfZXhwcmVzc2lvbiAoY19wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKK3ZvaWQgcHBfY19leHByZXNzaW9uX2xpc3QgKGNfcHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7Cit2b2lkIHBwX2NfY29uc3RydWN0b3JfZWx0cyAoY19wcmV0dHlfcHJpbnRlciAqLCBWRUMoY29uc3RydWN0b3JfZWx0LGdjKSAqKTsKK3ZvaWQgcHBfY19jYWxsX2FyZ3VtZW50X2xpc3QgKGNfcHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7Cit2b2lkIHBwX2NfdW5hcnlfZXhwcmVzc2lvbiAoY19wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKK3ZvaWQgcHBfY19jYXN0X2V4cHJlc3Npb24gKGNfcHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7Cit2b2lkIHBwX2NfcG9zdGZpeF9leHByZXNzaW9uIChjX3ByZXR0eV9wcmludGVyICosIHRyZWUpOwordm9pZCBwcF9jX3ByaW1hcnlfZXhwcmVzc2lvbiAoY19wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKK3ZvaWQgcHBfY19pbml0X2RlY2xhcmF0b3IgKGNfcHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7Cit2b2lkIHBwX2NfY29uc3RhbnQgKGNfcHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7Cit2b2lkIHBwX2NfaWRfZXhwcmVzc2lvbiAoY19wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKK3ZvaWQgcHBfY193c19zdHJpbmcgKGNfcHJldHR5X3ByaW50ZXIgKiwgY29uc3QgY2hhciAqKTsKK3ZvaWQgcHBfY19pZGVudGlmaWVyIChjX3ByZXR0eV9wcmludGVyICosIGNvbnN0IGNoYXIgKik7Cit2b2lkIHBwX2Nfc3RyaW5nX2xpdGVyYWwgKGNfcHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7CisKK3ZvaWQgcHJpbnRfY190cmVlIChGSUxFICpmaWxlLCB0cmVlIHQpOworCisjZW5kaWYgLyogR0NDX0NfUFJFVFRZX1BSSU5URVIgKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jZmdob29rcy5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NmZ2hvb2tzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc0MTc2OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jZmdob29rcy5oCkBAIC0wLDAgKzEsMTk3IEBACisvKiBIb29rcyBmb3IgY2ZnIHJlcHJlc2VudGF0aW9uIHNwZWNpZmljIGZ1bmN0aW9ucy4KKyAgIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOAorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBTZWJhc3RpYW4gUG9wIDxzLnBvcEBsYXBvc3RlLm5ldD4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX0NGR0hPT0tTX0gKKyNkZWZpbmUgR0NDX0NGR0hPT0tTX0gKKworc3RydWN0IGNmZ19ob29rcworeworICAvKiBOYW1lIG9mIHRoZSBjb3JyZXNwb25kaW5nIGlyLiAgKi8KKyAgY29uc3QgY2hhciAqbmFtZTsKKworICAvKiBEZWJ1Z2dpbmcuICAqLworICBpbnQgKCp2ZXJpZnlfZmxvd19pbmZvKSAodm9pZCk7CisgIHZvaWQgKCpkdW1wX2JiKSAoYmFzaWNfYmxvY2ssIEZJTEUgKiwgaW50LCBpbnQpOworCisgIC8qIEJhc2ljIENGRyBtYW5pcHVsYXRpb24uICAqLworCisgIC8qIFJldHVybiBuZXcgYmFzaWMgYmxvY2suICAqLworICBiYXNpY19ibG9jayAoKmNyZWF0ZV9iYXNpY19ibG9jaykgKHZvaWQgKmhlYWQsIHZvaWQgKmVuZCwgYmFzaWNfYmxvY2sgYWZ0ZXIpOworCisgIC8qIFJlZGlyZWN0IGVkZ2UgRSB0byB0aGUgZ2l2ZW4gYmFzaWMgYmxvY2sgQiBhbmQgdXBkYXRlIHVuZGVybHlpbmcgcHJvZ3JhbQorICAgICByZXByZXNlbnRhdGlvbi4gIFJldHVybnMgZWRnZSByZXByZXNlbnRpbmcgcmVkaXJlY3RlZCBicmFuY2ggKHRoYXQgbWF5IG5vdAorICAgICBiZSBlcXVpdmFsZW50IHRvIEUgaW4gdGhlIGNhc2Ugb2YgZHVwbGljYXRlIGVkZ2VzIGJlaW5nIHJlbW92ZWQpIG9yIE5VTEwKKyAgICAgaWYgZWRnZSBpcyBub3QgZWFzaWx5IHJlZGlyZWN0YWJsZSBmb3Igd2hhdGV2ZXIgcmVhc29uLiAgKi8KKyAgZWRnZSAoKnJlZGlyZWN0X2VkZ2VfYW5kX2JyYW5jaCkgKGVkZ2UgZSwgYmFzaWNfYmxvY2sgYik7CisKKyAgLyogU2FtZSBhcyB0aGUgYWJvdmUgYnV0IGFsbG93cyByZWRpcmVjdGluZyBvZiBmYWxsdGhydSBlZGdlcy4gIEluIHRoYXQgY2FzZQorICAgICBuZXdseSBjcmVhdGVkIGZvcndhcmRlciBiYXNpYyBibG9jayBpcyByZXR1cm5lZC4gIFRoZSBlZGdlIG11c3QKKyAgICAgbm90IGJlIGFibm9ybWFsLiAgKi8KKyAgYmFzaWNfYmxvY2sgKCpyZWRpcmVjdF9lZGdlX2FuZF9icmFuY2hfZm9yY2UpIChlZGdlLCBiYXNpY19ibG9jayk7CisKKyAgLyogUmV0dXJucyB0cnVlIGlmIGl0IGlzIHBvc3NpYmxlIHRvIHJlbW92ZSB0aGUgZWRnZSBieSByZWRpcmVjdGluZyBpdAorICAgICB0byB0aGUgZGVzdGluYXRpb24gb2YgdGhlIG90aGVyIGVkZ2UgZ29pbmcgZnJvbSBpdHMgc291cmNlLiAgKi8KKyAgYm9vbCAoKmNhbl9yZW1vdmVfYnJhbmNoX3ApIChjb25zdF9lZGdlKTsKKworICAvKiBSZW1vdmUgc3RhdGVtZW50cyBjb3JyZXNwb25kaW5nIHRvIGEgZ2l2ZW4gYmFzaWMgYmxvY2suICAqLworICB2b2lkICgqZGVsZXRlX2Jhc2ljX2Jsb2NrKSAoYmFzaWNfYmxvY2spOworCisgIC8qIENyZWF0ZXMgYSBuZXcgYmFzaWMgYmxvY2sganVzdCBhZnRlciBiYXNpYyBibG9jayBCIGJ5IHNwbGl0dGluZworICAgICBldmVyeXRoaW5nIGFmdGVyIHNwZWNpZmllZCBpbnN0cnVjdGlvbiBJLiAgKi8KKyAgYmFzaWNfYmxvY2sgKCpzcGxpdF9ibG9jaykgKGJhc2ljX2Jsb2NrIGIsIHZvaWQgKiBpKTsKKworICAvKiBNb3ZlIGJsb2NrIEIgaW1tZWRpYXRlbHkgYWZ0ZXIgYmxvY2sgQS4gICovCisgIGJvb2wgKCptb3ZlX2Jsb2NrX2FmdGVyKSAoYmFzaWNfYmxvY2sgYiwgYmFzaWNfYmxvY2sgYSk7CisKKyAgLyogUmV0dXJuIHRydWUgd2hlbiBibG9ja3MgQSBhbmQgQiBjYW4gYmUgbWVyZ2VkIGludG8gc2luZ2xlIGJhc2ljIGJsb2NrLiAgKi8KKyAgYm9vbCAoKmNhbl9tZXJnZV9ibG9ja3NfcCkgKGJhc2ljX2Jsb2NrIGEsIGJhc2ljX2Jsb2NrIGIpOworCisgIC8qIE1lcmdlIGJsb2NrcyBBIGFuZCBCLiAgKi8KKyAgdm9pZCAoKm1lcmdlX2Jsb2NrcykgKGJhc2ljX2Jsb2NrIGEsIGJhc2ljX2Jsb2NrIGIpOworCisgIC8qIFByZWRpY3QgZWRnZSBFIHVzaW5nIFBSRURJQ1RPUiB0byBnaXZlbiBQUk9CQUJJTElUWS4gICovCisgIHZvaWQgKCpwcmVkaWN0X2VkZ2UpIChlZGdlIGUsIGVudW0gYnJfcHJlZGljdG9yIHByZWRpY3RvciwgaW50IHByb2JhYmlsaXR5KTsKKworICAvKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgb25lIG9mIG91dGdvaW5nIGVkZ2VzIGlzIGFscmVhZHkgcHJlZGljdGVkIGJ5CisgICAgIFBSRURJQ1RPUi4gICovCisgIGJvb2wgKCpwcmVkaWN0ZWRfYnlfcCkgKGNvbnN0X2Jhc2ljX2Jsb2NrIGJiLCBlbnVtIGJyX3ByZWRpY3RvciBwcmVkaWN0b3IpOworCisgIC8qIFJldHVybiB0cnVlIHdoZW4gYmxvY2sgQSBjYW4gYmUgZHVwbGljYXRlZC4gICovCisgIGJvb2wgKCpjYW5fZHVwbGljYXRlX2Jsb2NrX3ApIChjb25zdF9iYXNpY19ibG9jayBhKTsKKworICAvKiBEdXBsaWNhdGUgYmxvY2sgQS4gICovCisgIGJhc2ljX2Jsb2NrICgqZHVwbGljYXRlX2Jsb2NrKSAoYmFzaWNfYmxvY2sgYSk7CisKKyAgLyogSGlnaGVyIGxldmVsIGZ1bmN0aW9ucyByZXByZXNlbnRhYmxlIGJ5IHByaW1pdGl2ZSBvcGVyYXRpb25zIGFib3ZlIGlmCisgICAgIHdlIGRpZG4ndCBoYXZlIHNvbWUgb2RkaXRpZXMgaW4gUlRMIGFuZCBUcmVlIHJlcHJlc2VudGF0aW9ucy4gICovCisgIGJhc2ljX2Jsb2NrICgqc3BsaXRfZWRnZSkgKGVkZ2UpOworICB2b2lkICgqbWFrZV9mb3J3YXJkZXJfYmxvY2spIChlZGdlKTsKKworICAvKiBUcmllcyB0byBtYWtlIHRoZSBlZGdlIGZhbGx0aHJ1LiAgKi8KKyAgdm9pZCAoKnRpZHlfZmFsbHRocnVfZWRnZSkgKGVkZ2UpOworCisgIC8qIFNheSB3aGV0aGVyIGEgYmxvY2sgZW5kcyB3aXRoIGEgY2FsbCwgcG9zc2libHkgZm9sbG93ZWQgYnkgc29tZQorICAgICBvdGhlciBjb2RlIHRoYXQgbXVzdCBzdGF5IHdpdGggdGhlIGNhbGwuICAqLworICBib29sICgqYmxvY2tfZW5kc193aXRoX2NhbGxfcCkgKGJhc2ljX2Jsb2NrKTsKKworICAvKiBTYXkgd2hldGhlciBhIGJsb2NrIGVuZHMgd2l0aCBhIGNvbmRpdGlvbmFsIGJyYW5jaC4gIFN3aXRjaGVzCisgICAgIGFuZCB1bmNvbmRpdGlvbmFsIGJyYW5jaGVzIGRvIG5vdCBxdWFsaWZ5LiAgKi8KKyAgYm9vbCAoKmJsb2NrX2VuZHNfd2l0aF9jb25kanVtcF9wKSAoY29uc3RfYmFzaWNfYmxvY2spOworCisgIC8qIEFkZCBmYWtlIGVkZ2VzIHRvIHRoZSBmdW5jdGlvbiBleGl0IGZvciBhbnkgbm9uIGNvbnN0YW50IGFuZCBub24gbm9yZXR1cm4KKyAgICAgY2FsbHMsIHZvbGF0aWxlIGlubGluZSBhc3NlbWJseSBpbiB0aGUgYml0bWFwIG9mIGJsb2NrcyBzcGVjaWZpZWQgYnkKKyAgICAgQkxPQ0tTIG9yIHRvIHRoZSB3aG9sZSBDRkcgaWYgQkxPQ0tTIGlzIHplcm8uICBSZXR1cm4gdGhlIG51bWJlciBvZiBibG9ja3MKKyAgICAgdGhhdCB3ZXJlIHNwbGl0LgorCisgICAgIFRoZSBnb2FsIGlzIHRvIGV4cG9zZSBjYXNlcyBpbiB3aGljaCBlbnRlcmluZyBhIGJhc2ljIGJsb2NrIGRvZXMgbm90IGltcGx5CisgICAgIHRoYXQgYWxsIHN1YnNlcXVlbnQgaW5zdHJ1Y3Rpb25zIG11c3QgYmUgZXhlY3V0ZWQuICAqLworICBpbnQgKCpmbG93X2NhbGxfZWRnZXNfYWRkKSAoc2JpdG1hcCk7CisKKyAgLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZWRnZSBFIGlzIGFkZGVkIHRvIHRoZQorICAgICBlZGdlIHZlY3RvciBFLT5kZXN0LT5wcmVkcy4gICovCisgIHZvaWQgKCpleGVjdXRlX29uX2dyb3dpbmdfcHJlZCkgKGVkZ2UpOworCisgIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGltbWVkaWF0ZWx5IGJlZm9yZSBlZGdlIEUgaXMgcmVtb3ZlZCBmcm9tCisgICAgIHRoZSBlZGdlIHZlY3RvciBFLT5kZXN0LT5wcmVkcy4gICovCisgIHZvaWQgKCpleGVjdXRlX29uX3Nocmlua2luZ19wcmVkKSAoZWRnZSk7CisKKyAgLyogQSBob29rIGZvciBkdXBsaWNhdGluZyBsb29wIGluIENGRywgY3VycmVudGx5IHRoaXMgaXMgdXNlZAorICAgICBpbiBsb29wIHZlcnNpb25pbmcuICAqLworICBib29sICgqY2ZnX2hvb2tfZHVwbGljYXRlX2xvb3BfdG9faGVhZGVyX2VkZ2UpIChzdHJ1Y3QgbG9vcCAqLCBlZGdlLAorCQkJCQkJICB1bnNpZ25lZCwgc2JpdG1hcCwKKwkJCQkJCSAgZWRnZSwgVkVDIChlZGdlLCBoZWFwKSAqKiwKKwkJCQkJCSAgaW50KTsKKworICAvKiBBZGQgY29uZGl0aW9uIHRvIG5ldyBiYXNpYyBibG9jayBhbmQgdXBkYXRlIENGRyB1c2VkIGluIGxvb3AKKyAgICAgdmVyc2lvbmluZy4gICovCisgIHZvaWQgKCpsdl9hZGRfY29uZGl0aW9uX3RvX2JiKSAoYmFzaWNfYmxvY2ssIGJhc2ljX2Jsb2NrLCBiYXNpY19ibG9jaywKKwkJCQkgIHZvaWQgKik7CisgIC8qIFVwZGF0ZSB0aGUgUEhJIG5vZGVzIGluIGNhc2Ugb2YgbG9vcCB2ZXJzaW9uaW5nLiAgKi8KKyAgdm9pZCAoKmx2X2FkanVzdF9sb29wX2hlYWRlcl9waGkpIChiYXNpY19ibG9jaywgYmFzaWNfYmxvY2ssCisJCQkJICAgICBiYXNpY19ibG9jaywgZWRnZSk7CisKKyAgLyogR2l2ZW4gYSBjb25kaXRpb24gQkIgZXh0cmFjdCB0aGUgdHJ1ZS9mYWxzZSB0YWtlbi9ub3QgdGFrZW4gZWRnZXMKKyAgICAgKGRlcGVuZGluZyBpZiB3ZSBhcmUgb24gdHJlZSdzIG9yIFJUTCkuICovCisgIHZvaWQgKCpleHRyYWN0X2NvbmRfYmJfZWRnZXMpIChiYXNpY19ibG9jaywgZWRnZSAqLCBlZGdlICopOworCisKKyAgLyogQWRkIFBISSBhcmd1bWVudHMgcXVldWVkIGluIFBFTkRJTlRfU1RNVCBsaXN0IG9uIGVkZ2UgRSB0byBlZGdlCisgICAgIEUtPmRlc3QgKG9ubHkgaW4gdHJlZS1zc2EgbG9vcCB2ZXJzaW9uaW5nLiAgKi8KKyAgdm9pZCAoKmZsdXNoX3BlbmRpbmdfc3RtdHMpIChlZGdlKTsKK307CisKK2V4dGVybiB2b2lkIHZlcmlmeV9mbG93X2luZm8gKHZvaWQpOworZXh0ZXJuIHZvaWQgZHVtcF9iYiAoYmFzaWNfYmxvY2ssIEZJTEUgKiwgaW50KTsKK2V4dGVybiBlZGdlIHJlZGlyZWN0X2VkZ2VfYW5kX2JyYW5jaCAoZWRnZSwgYmFzaWNfYmxvY2spOworZXh0ZXJuIGJhc2ljX2Jsb2NrIHJlZGlyZWN0X2VkZ2VfYW5kX2JyYW5jaF9mb3JjZSAoZWRnZSwgYmFzaWNfYmxvY2spOworZXh0ZXJuIGJvb2wgY2FuX3JlbW92ZV9icmFuY2hfcCAoY29uc3RfZWRnZSk7CitleHRlcm4gdm9pZCByZW1vdmVfYnJhbmNoIChlZGdlKTsKK2V4dGVybiB2b2lkIHJlbW92ZV9lZGdlIChlZGdlKTsKK2V4dGVybiBlZGdlIHNwbGl0X2Jsb2NrIChiYXNpY19ibG9jaywgdm9pZCAqKTsKK2V4dGVybiBlZGdlIHNwbGl0X2Jsb2NrX2FmdGVyX2xhYmVscyAoYmFzaWNfYmxvY2spOworZXh0ZXJuIGJvb2wgbW92ZV9ibG9ja19hZnRlciAoYmFzaWNfYmxvY2ssIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiB2b2lkIGRlbGV0ZV9iYXNpY19ibG9jayAoYmFzaWNfYmxvY2spOworZXh0ZXJuIGJhc2ljX2Jsb2NrIHNwbGl0X2VkZ2UgKGVkZ2UpOworZXh0ZXJuIGJhc2ljX2Jsb2NrIGNyZWF0ZV9iYXNpY19ibG9jayAodm9pZCAqLCB2b2lkICosIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiBiYXNpY19ibG9jayBjcmVhdGVfZW1wdHlfYmIgKGJhc2ljX2Jsb2NrKTsKK2V4dGVybiBib29sIGNhbl9tZXJnZV9ibG9ja3NfcCAoYmFzaWNfYmxvY2ssIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiB2b2lkIG1lcmdlX2Jsb2NrcyAoYmFzaWNfYmxvY2ssIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiBlZGdlIG1ha2VfZm9yd2FyZGVyX2Jsb2NrIChiYXNpY19ibG9jaywgYm9vbCAoKikoZWRnZSksCisJCQkJICB2b2lkICgqKSAoYmFzaWNfYmxvY2spKTsKK2V4dGVybiB2b2lkIHRpZHlfZmFsbHRocnVfZWRnZSAoZWRnZSk7CitleHRlcm4gdm9pZCB0aWR5X2ZhbGx0aHJ1X2VkZ2VzICh2b2lkKTsKK2V4dGVybiB2b2lkIHByZWRpY3RfZWRnZSAoZWRnZSBlLCBlbnVtIGJyX3ByZWRpY3RvciBwcmVkaWN0b3IsIGludCBwcm9iYWJpbGl0eSk7CitleHRlcm4gYm9vbCBwcmVkaWN0ZWRfYnlfcCAoY29uc3RfYmFzaWNfYmxvY2sgYmIsIGVudW0gYnJfcHJlZGljdG9yIHByZWRpY3Rvcik7CitleHRlcm4gYm9vbCBjYW5fZHVwbGljYXRlX2Jsb2NrX3AgKGNvbnN0X2Jhc2ljX2Jsb2NrKTsKK2V4dGVybiBiYXNpY19ibG9jayBkdXBsaWNhdGVfYmxvY2sgKGJhc2ljX2Jsb2NrLCBlZGdlLCBiYXNpY19ibG9jayk7CitleHRlcm4gYm9vbCBibG9ja19lbmRzX3dpdGhfY2FsbF9wIChiYXNpY19ibG9jayBiYik7CitleHRlcm4gYm9vbCBibG9ja19lbmRzX3dpdGhfY29uZGp1bXBfcCAoY29uc3RfYmFzaWNfYmxvY2sgYmIpOworZXh0ZXJuIGludCBmbG93X2NhbGxfZWRnZXNfYWRkIChzYml0bWFwKTsKK2V4dGVybiB2b2lkIGV4ZWN1dGVfb25fZ3Jvd2luZ19wcmVkIChlZGdlKTsKK2V4dGVybiB2b2lkIGV4ZWN1dGVfb25fc2hyaW5raW5nX3ByZWQgKGVkZ2UpOworZXh0ZXJuIGJvb2wgY2ZnX2hvb2tfZHVwbGljYXRlX2xvb3BfdG9faGVhZGVyX2VkZ2UgKHN0cnVjdCBsb29wICpsb29wLCBlZGdlLAorCQkJCQkJICAgIHVuc2lnbmVkIGludCBuZHVwbCwKKwkJCQkJCSAgICBzYml0bWFwIHdvbnRfZXhpdCwKKwkJCQkJCSAgICBlZGdlIG9yaWcsCisJCQkJCQkgICAgVkVDIChlZGdlLCBoZWFwKSAqKnRvX3JlbW92ZSwKKwkJCQkJCSAgICBpbnQgZmxhZ3MpOworCitleHRlcm4gdm9pZCBsdl9mbHVzaF9wZW5kaW5nX3N0bXRzIChlZGdlKTsKK2V4dGVybiB2b2lkIGV4dHJhY3RfY29uZF9iYl9lZGdlcyAoYmFzaWNfYmxvY2ssIGVkZ2UgKiwgZWRnZSopOworZXh0ZXJuIHZvaWQgbHZfYWRqdXN0X2xvb3BfaGVhZGVyX3BoaSAoYmFzaWNfYmxvY2ssIGJhc2ljX2Jsb2NrLCBiYXNpY19ibG9jaywKKwkJCQkgICAgICAgZWRnZSk7CitleHRlcm4gdm9pZCBsdl9hZGRfY29uZGl0aW9uX3RvX2JiIChiYXNpY19ibG9jaywgYmFzaWNfYmxvY2ssIGJhc2ljX2Jsb2NrLAorCQkJCSAgICB2b2lkICopOworCisvKiBIb29rcyBjb250YWluZXJzLiAgKi8KK2V4dGVybiBzdHJ1Y3QgY2ZnX2hvb2tzIGdpbXBsZV9jZmdfaG9va3M7CitleHRlcm4gc3RydWN0IGNmZ19ob29rcyBydGxfY2ZnX2hvb2tzOworZXh0ZXJuIHN0cnVjdCBjZmdfaG9va3MgY2ZnX2xheW91dF9ydGxfY2ZnX2hvb2tzOworCisvKiBEZWNsYXJhdGlvbnMuICAqLworZXh0ZXJuIGVudW0gaXJfdHlwZSBjdXJyZW50X2lyX3R5cGUgKHZvaWQpOworZXh0ZXJuIHZvaWQgcnRsX3JlZ2lzdGVyX2NmZ19ob29rcyAodm9pZCk7CitleHRlcm4gdm9pZCBjZmdfbGF5b3V0X3J0bF9yZWdpc3Rlcl9jZmdfaG9va3MgKHZvaWQpOworZXh0ZXJuIHZvaWQgZ2ltcGxlX3JlZ2lzdGVyX2NmZ19ob29rcyAodm9pZCk7CitleHRlcm4gc3RydWN0IGNmZ19ob29rcyBnZXRfY2ZnX2hvb2tzICh2b2lkKTsKK2V4dGVybiB2b2lkIHNldF9jZmdfaG9va3MgKHN0cnVjdCBjZmdfaG9va3MpOworCisjZW5kaWYgIC8qIEdDQ19DRkdIT09LU19IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvY2ZnbG9vcC5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NmZ2xvb3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmY5MDUwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NmZ2xvb3AuaApAQCAtMCwwICsxLDY1MyBAQAorLyogTmF0dXJhbCBsb29wIGZ1bmN0aW9ucworICAgQ29weXJpZ2h0IChDKSAxOTg3LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LAorICAgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19DRkdMT09QX0gKKyNkZWZpbmUgR0NDX0NGR0xPT1BfSAorCisjaW5jbHVkZSAiYmFzaWMtYmxvY2suaCIKKy8qIEZvciBydHhfY29kZS4gICovCisjaW5jbHVkZSAicnRsLmgiCisjaW5jbHVkZSAidmVjcHJpbS5oIgorI2luY2x1ZGUgImRvdWJsZS1pbnQuaCIKKworLyogU3RydWN0dXJlIHRvIGhvbGQgZGVjaXNpb24gYWJvdXQgdW5yb2xsaW5nL3BlZWxpbmcuICAqLworZW51bSBscHRfZGVjCit7CisgIExQVF9OT05FLAorICBMUFRfUEVFTF9DT01QTEVURUxZLAorICBMUFRfUEVFTF9TSU1QTEUsCisgIExQVF9VTlJPTExfQ09OU1RBTlQsCisgIExQVF9VTlJPTExfUlVOVElNRSwKKyAgTFBUX1VOUk9MTF9TVFVQSUQKK307CisKK3N0cnVjdCBHVFkgKCgpKSBscHRfZGVjaXNpb24geworICBlbnVtIGxwdF9kZWMgZGVjaXNpb247CisgIHVuc2lnbmVkIHRpbWVzOworfTsKKworLyogVGhlIHN0cnVjdHVyZSBkZXNjcmliaW5nIGEgYm91bmQgb24gbnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2YgYSBsb29wLiAgKi8KKworc3RydWN0IEdUWSAoKGNoYWluX25leHQgKCIlaC5uZXh0IikpKSBuYl9pdGVyX2JvdW5kIHsKKyAgLyogVGhlIHN0YXRlbWVudCBTVE1UIGlzIGV4ZWN1dGVkIGF0IG1vc3QgLi4uICAqLworICBnaW1wbGUgc3RtdDsKKworICAvKiAuLi4gQk9VTkQgKyAxIHRpbWVzIChCT1VORCBtdXN0IGJlIGFuIHVuc2lnbmVkIGNvbnN0YW50KS4KKyAgICAgVGhlICsgMSBpcyBhZGRlZCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb25zOgorCisgICAgIGEpIDAgd291bGQgb3RoZXJ3aXNlIGJlIHVudXNlZCwgd2hpbGUgd2Ugd291bGQgbmVlZCB0byBjYXJlIG1vcmUgYWJvdXQKKyAgICAgICAgb3ZlcmZsb3dzIChhcyBNQVggKyAxIGlzIHNvbWV0aW1lcyBwcm9kdWNlZCBhcyB0aGUgZXN0aW1hdGUgb24gbnVtYmVyCisJb2YgZXhlY3V0aW9ucyBvZiBTVE1UKS4KKyAgICAgYikgaXQgaXMgY29uc2lzdGVudCB3aXRoIHRoZSByZXN1bHQgb2YgbnVtYmVyX29mX2l0ZXJhdGlvbnNfZXhpdC4gICovCisgIGRvdWJsZV9pbnQgYm91bmQ7CisKKyAgLyogVHJ1ZSBpZiB0aGUgc3RhdGVtZW50IHdpbGwgY2F1c2UgdGhlIGxvb3AgdG8gYmUgbGVhdmVkIHRoZSAoYXQgbW9zdCkKKyAgICAgQk9VTkQgKyAxLXN0IHRpbWUgaXQgaXMgZXhlY3V0ZWQsIHRoYXQgaXMsIGFsbCB0aGUgc3RhdGVtZW50cyBhZnRlciBpdAorICAgICBhcmUgZXhlY3V0ZWQgYXQgbW9zdCBCT1VORCB0aW1lcy4gICovCisgIGJvb2wgaXNfZXhpdDsKKworICAvKiBUaGUgbmV4dCBib3VuZCBpbiB0aGUgbGlzdC4gICovCisgIHN0cnVjdCBuYl9pdGVyX2JvdW5kICpuZXh0OworfTsKKworLyogRGVzY3JpcHRpb24gb2YgdGhlIGxvb3AgZXhpdC4gICovCisKK3N0cnVjdCBHVFkgKCgpKSBsb29wX2V4aXQgeworICAvKiBUaGUgZXhpdCBlZGdlLiAgKi8KKyAgc3RydWN0IGVkZ2VfZGVmICplOworCisgIC8qIFByZXZpb3VzIGFuZCBuZXh0IGV4aXQgaW4gdGhlIGxpc3Qgb2YgdGhlIGV4aXRzIG9mIHRoZSBsb29wLiAgKi8KKyAgc3RydWN0IGxvb3BfZXhpdCAqcHJldjsKKyAgc3RydWN0IGxvb3BfZXhpdCAqbmV4dDsKKworICAvKiBOZXh0IGVsZW1lbnQgaW4gdGhlIGxpc3Qgb2YgbG9vcHMgZnJvbSB0aGF0IEUgZXhpdHMuICAqLworICBzdHJ1Y3QgbG9vcF9leGl0ICpuZXh0X2U7Cit9OworCit0eXBlZGVmIHN0cnVjdCBsb29wICpsb29wX3A7CitERUZfVkVDX1AgKGxvb3BfcCk7CitERUZfVkVDX0FMTE9DX1AgKGxvb3BfcCwgaGVhcCk7CitERUZfVkVDX0FMTE9DX1AgKGxvb3BfcCwgZ2MpOworCisvKiBBbiBpbnRlZ2VyIGVzdGltYXRpb24gb2YgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zLiAgRXN0aW1hdGVfc3RhdGUKKyAgIGRlc2NyaWJlcyB3aGF0IGlzIHRoZSBzdGF0ZSBvZiB0aGUgZXN0aW1hdGlvbi4gICovCitlbnVtIGxvb3BfZXN0aW1hdGlvbgoreworICAvKiBFc3RpbWF0ZSB3YXMgbm90IGNvbXB1dGVkIHlldC4gICovCisgIEVTVF9OT1RfQ09NUFVURUQsCisgIC8qIEVzdGltYXRlIGlzIHJlYWR5LiAgKi8KKyAgRVNUX0FWQUlMQUJMRQorfTsKKworLyogU3RydWN0dXJlIHRvIGhvbGQgaW5mb3JtYXRpb24gZm9yIGVhY2ggbmF0dXJhbCBsb29wLiAgKi8KK3N0cnVjdCBHVFkgKChjaGFpbl9uZXh0ICgiJWgubmV4dCIpKSkgbG9vcCB7CisgIC8qIEluZGV4IGludG8gbG9vcHMgYXJyYXkuICAqLworICBpbnQgbnVtOworCisgIC8qIE51bWJlciBvZiBsb29wIGluc25zLiAgKi8KKyAgdW5zaWduZWQgbmluc25zOworCisgIC8qIEJhc2ljIGJsb2NrIG9mIGxvb3AgaGVhZGVyLiAgKi8KKyAgc3RydWN0IGJhc2ljX2Jsb2NrX2RlZiAqaGVhZGVyOworCisgIC8qIEJhc2ljIGJsb2NrIG9mIGxvb3AgbGF0Y2guICAqLworICBzdHJ1Y3QgYmFzaWNfYmxvY2tfZGVmICpsYXRjaDsKKworICAvKiBGb3IgbG9vcCB1bnJvbGxpbmcvcGVlbGluZyBkZWNpc2lvbi4gICovCisgIHN0cnVjdCBscHRfZGVjaXNpb24gbHB0X2RlY2lzaW9uOworCisgIC8qIEF2ZXJhZ2UgbnVtYmVyIG9mIGV4ZWN1dGVkIGluc25zIHBlciBpdGVyYXRpb24uICAqLworICB1bnNpZ25lZCBhdl9uaW5zbnM7CisKKyAgLyogTnVtYmVyIG9mIGJsb2NrcyBjb250YWluZWQgd2l0aGluIHRoZSBsb29wLiAgKi8KKyAgdW5zaWduZWQgbnVtX25vZGVzOworCisgIC8qIFN1cGVybG9vcHMgb2YgdGhlIGxvb3AsIHN0YXJ0aW5nIHdpdGggdGhlIG91dGVybW9zdCBsb29wLiAgKi8KKyAgVkVDIChsb29wX3AsIGdjKSAqc3VwZXJsb29wczsKKworICAvKiBUaGUgZmlyc3QgaW5uZXIgKGNoaWxkKSBsb29wIG9yIE5VTEwgaWYgaW5uZXJtb3N0IGxvb3AuICAqLworICBzdHJ1Y3QgbG9vcCAqaW5uZXI7CisKKyAgLyogTGluayB0byB0aGUgbmV4dCAoc2libGluZykgbG9vcC4gICovCisgIHN0cnVjdCBsb29wICpuZXh0OworCisgIC8qIEF1eGlsaWFyeSBpbmZvIHNwZWNpZmljIHRvIGEgcGFzcy4gICovCisgIFBUUiBHVFkgKChza2lwICgiIikpKSBhdXg7CisKKyAgLyogVGhlIG51bWJlciBvZiB0aW1lcyB0aGUgbGF0Y2ggb2YgdGhlIGxvb3AgaXMgZXhlY3V0ZWQuCisgICAgIFRoaXMgaXMgYW4gSU5URUdFUl9DU1Qgb3IgYW4gZXhwcmVzc2lvbiBjb250YWluaW5nIHN5bWJvbGljCisgICAgIG5hbWVzLiAgRG9uJ3QgYWNjZXNzIHRoaXMgZmllbGQgZGlyZWN0bHk6CisgICAgIG51bWJlcl9vZl9sYXRjaF9leGVjdXRpb25zIGNvbXB1dGVzIGFuZCBjYWNoZXMgdGhlIGNvbXB1dGVkCisgICAgIGluZm9ybWF0aW9uIGluIHRoaXMgZmllbGQuICAqLworICB0cmVlIG5iX2l0ZXJhdGlvbnM7CisKKyAgLyogQW4gaW50ZWdlciBndWFyYW50ZWVkIHRvIGJvdW5kIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBvZiB0aGUgbG9vcAorICAgICBmcm9tIGFib3ZlLiAgKi8KKyAgZG91YmxlX2ludCBuYl9pdGVyYXRpb25zX3VwcGVyX2JvdW5kOworCisgIC8qIEFuIGludGVnZXIgZ2l2aW5nIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgaXRlcmF0aW9ucyBvZiB0aGUgbG9vcC4gICovCisgIGRvdWJsZV9pbnQgbmJfaXRlcmF0aW9uc19lc3RpbWF0ZTsKKworICBib29sIGFueV91cHBlcl9ib3VuZDsKKyAgYm9vbCBhbnlfZXN0aW1hdGU7CisKKyAgLyogQW4gaW50ZWdlciBlc3RpbWF0aW9uIG9mIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucy4gIEVzdGltYXRlX3N0YXRlCisgICAgIGRlc2NyaWJlcyB3aGF0IGlzIHRoZSBzdGF0ZSBvZiB0aGUgZXN0aW1hdGlvbi4gICovCisgIGVudW0gbG9vcF9lc3RpbWF0aW9uIGVzdGltYXRlX3N0YXRlOworCisgIC8qIFVwcGVyIGJvdW5kIG9uIG51bWJlciBvZiBpdGVyYXRpb25zIG9mIGEgbG9vcC4gICovCisgIHN0cnVjdCBuYl9pdGVyX2JvdW5kICpib3VuZHM7CisKKyAgLyogSGVhZCBvZiB0aGUgY3ljbGljIGxpc3Qgb2YgdGhlIGV4aXRzIG9mIHRoZSBsb29wLiAgKi8KKyAgc3RydWN0IGxvb3BfZXhpdCAqZXhpdHM7CisKKyAgLyogVHJ1ZSBpZiB0aGUgbG9vcCBjYW4gYmUgcGFyYWxsZWwuICAqLworICBib29sIGNhbl9iZV9wYXJhbGxlbDsKKworICAvKiBUaGUgc2luZ2xlIGluZHVjdGlvbiB2YXJpYWJsZSBvZiB0aGUgbG9vcCB3aGVuIHRoZSBsb29wIGlzIGluCisgICAgIG5vcm1hbCBmb3JtLiAgKi8KKyAgdHJlZSBzaW5nbGVfaXY7Cit9OworCisvKiBGbGFncyBmb3Igc3RhdGUgb2YgbG9vcCBzdHJ1Y3R1cmUuICAqLworZW51bQoreworICBMT09QU19IQVZFX1BSRUhFQURFUlMgPSAxLAorICBMT09QU19IQVZFX1NJTVBMRV9MQVRDSEVTID0gMiwKKyAgTE9PUFNfSEFWRV9NQVJLRURfSVJSRURVQ0lCTEVfUkVHSU9OUyA9IDQsCisgIExPT1BTX0hBVkVfUkVDT1JERURfRVhJVFMgPSA4LAorICBMT09QU19NQVlfSEFWRV9NVUxUSVBMRV9MQVRDSEVTID0gMTYsCisgIExPT1BfQ0xPU0VEX1NTQSA9IDMyLAorICBMT09QU19ORUVEX0ZJWFVQID0gNjQsCisgIExPT1BTX0hBVkVfRkFMTFRIUlVfUFJFSEVBREVSUyA9IDEyOAorfTsKKworI2RlZmluZSBMT09QU19OT1JNQUwgKExPT1BTX0hBVkVfUFJFSEVBREVSUyB8IExPT1BTX0hBVkVfU0lNUExFX0xBVENIRVMgXAorCQkgICAgICB8IExPT1BTX0hBVkVfTUFSS0VEX0lSUkVEVUNJQkxFX1JFR0lPTlMpCisjZGVmaW5lIEFWT0lEX0NGR19NT0RJRklDQVRJT05TIChMT09QU19NQVlfSEFWRV9NVUxUSVBMRV9MQVRDSEVTKQorCisvKiBTdHJ1Y3R1cmUgdG8gaG9sZCBDRkcgaW5mb3JtYXRpb24gYWJvdXQgbmF0dXJhbCBsb29wcyB3aXRoaW4gYSBmdW5jdGlvbi4gICovCitzdHJ1Y3QgR1RZICgoKSkgbG9vcHMgeworICAvKiBTdGF0ZSBvZiBsb29wcy4gICovCisgIGludCBzdGF0ZTsKKworICAvKiBBcnJheSBvZiB0aGUgbG9vcHMuICAqLworICBWRUMgKGxvb3BfcCwgZ2MpICpsYXJyYXk7CisKKyAgLyogTWFwcyBlZGdlcyB0byB0aGUgbGlzdCBvZiB0aGVpciBkZXNjcmlwdGlvbnMgYXMgbG9vcCBleGl0cy4gIEVkZ2VzCisgICAgIHdob3NlIHNvdXJjZXMgb3IgZGVzdGluYXRpb25zIGhhdmUgbG9vcF9mYXRoZXIgPT0gTlVMTCAod2hpY2ggbWF5CisgICAgIGhhcHBlbiBkdXJpbmcgdGhlIGNmZyBtYW5pcHVsYXRpb25zKSBzaG91bGQgbm90IGFwcGVhciBpbiBFWElUUy4gICovCisgIGh0YWJfdCBHVFkoKHBhcmFtX2lzIChzdHJ1Y3QgbG9vcF9leGl0KSkpIGV4aXRzOworCisgIC8qIFBvaW50ZXIgdG8gcm9vdCBvZiBsb29wIGhpZXJhcmNoeSB0cmVlLiAgKi8KKyAgc3RydWN0IGxvb3AgKnRyZWVfcm9vdDsKK307CisKKy8qIExvb3AgcmVjb2duaXRpb24uICAqLworZXh0ZXJuIGludCBmbG93X2xvb3BzX2ZpbmQgKHN0cnVjdCBsb29wcyAqKTsKK2V4dGVybiB2b2lkIGRpc2FtYmlndWF0ZV9sb29wc193aXRoX211bHRpcGxlX2xhdGNoZXMgKHZvaWQpOworZXh0ZXJuIHZvaWQgZmxvd19sb29wc19mcmVlIChzdHJ1Y3QgbG9vcHMgKik7CitleHRlcm4gdm9pZCBmbG93X2xvb3BzX2R1bXAgKEZJTEUgKiwKKwkJCSAgICAgdm9pZCAoKikoY29uc3Qgc3RydWN0IGxvb3AgKiwgRklMRSAqLCBpbnQpLCBpbnQpOworZXh0ZXJuIHZvaWQgZmxvd19sb29wX2R1bXAgKGNvbnN0IHN0cnVjdCBsb29wICosIEZJTEUgKiwKKwkJCSAgICB2b2lkICgqKShjb25zdCBzdHJ1Y3QgbG9vcCAqLCBGSUxFICosIGludCksIGludCk7CitzdHJ1Y3QgbG9vcCAqYWxsb2NfbG9vcCAodm9pZCk7CitleHRlcm4gdm9pZCBmbG93X2xvb3BfZnJlZSAoc3RydWN0IGxvb3AgKik7CitpbnQgZmxvd19sb29wX25vZGVzX2ZpbmQgKGJhc2ljX2Jsb2NrLCBzdHJ1Y3QgbG9vcCAqKTsKK3ZvaWQgZml4X2xvb3Bfc3RydWN0dXJlIChiaXRtYXAgY2hhbmdlZF9iYnMpOworYm9vbCBtYXJrX2lycmVkdWNpYmxlX2xvb3BzICh2b2lkKTsKK3ZvaWQgcmVsZWFzZV9yZWNvcmRlZF9leGl0cyAodm9pZCk7Cit2b2lkIHJlY29yZF9sb29wX2V4aXRzICh2b2lkKTsKK3ZvaWQgcmVzY2FuX2xvb3BfZXhpdCAoZWRnZSwgYm9vbCwgYm9vbCk7CisKKy8qIExvb3AgZGF0YSBzdHJ1Y3R1cmUgbWFuaXB1bGF0aW9uL3F1ZXJ5aW5nLiAgKi8KK2V4dGVybiB2b2lkIGZsb3dfbG9vcF90cmVlX25vZGVfYWRkIChzdHJ1Y3QgbG9vcCAqLCBzdHJ1Y3QgbG9vcCAqKTsKK2V4dGVybiB2b2lkIGZsb3dfbG9vcF90cmVlX25vZGVfcmVtb3ZlIChzdHJ1Y3QgbG9vcCAqKTsKK2V4dGVybiB2b2lkIGFkZF9sb29wIChzdHJ1Y3QgbG9vcCAqLCBzdHJ1Y3QgbG9vcCAqKTsKK2V4dGVybiBib29sIGZsb3dfbG9vcF9uZXN0ZWRfcAkoY29uc3Qgc3RydWN0IGxvb3AgKiwgY29uc3Qgc3RydWN0IGxvb3AgKik7CitleHRlcm4gYm9vbCBmbG93X2JiX2luc2lkZV9sb29wX3AgKGNvbnN0IHN0cnVjdCBsb29wICosIGNvbnN0X2Jhc2ljX2Jsb2NrKTsKK2V4dGVybiBzdHJ1Y3QgbG9vcCAqIGZpbmRfY29tbW9uX2xvb3AgKHN0cnVjdCBsb29wICosIHN0cnVjdCBsb29wICopOworc3RydWN0IGxvb3AgKnN1cGVybG9vcF9hdF9kZXB0aCAoc3RydWN0IGxvb3AgKiwgdW5zaWduZWQpOworc3RydWN0IGVuaV93ZWlnaHRzX2Q7CitleHRlcm4gdW5zaWduZWQgdHJlZV9udW1fbG9vcF9pbnNucyAoc3RydWN0IGxvb3AgKiwgc3RydWN0IGVuaV93ZWlnaHRzX2QgKik7CitleHRlcm4gaW50IG51bV9sb29wX2luc25zIChjb25zdCBzdHJ1Y3QgbG9vcCAqKTsKK2V4dGVybiBpbnQgYXZlcmFnZV9udW1fbG9vcF9pbnNucyAoY29uc3Qgc3RydWN0IGxvb3AgKik7CitleHRlcm4gdW5zaWduZWQgZ2V0X2xvb3BfbGV2ZWwgKGNvbnN0IHN0cnVjdCBsb29wICopOworZXh0ZXJuIGJvb2wgbG9vcF9leGl0X2VkZ2VfcCAoY29uc3Qgc3RydWN0IGxvb3AgKiwgY29uc3RfZWRnZSk7CitleHRlcm4gYm9vbCBpc19sb29wX2V4aXQgKHN0cnVjdCBsb29wICosIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiB2b2lkIG1hcmtfbG9vcF9leGl0X2VkZ2VzICh2b2lkKTsKKworLyogTG9vcHMgJiBjZmcgbWFuaXB1bGF0aW9uLiAgKi8KK2V4dGVybiBiYXNpY19ibG9jayAqZ2V0X2xvb3BfYm9keSAoY29uc3Qgc3RydWN0IGxvb3AgKik7CitleHRlcm4gdW5zaWduZWQgZ2V0X2xvb3BfYm9keV93aXRoX3NpemUgKGNvbnN0IHN0cnVjdCBsb29wICosIGJhc2ljX2Jsb2NrICosCisJCQkJCSB1bnNpZ25lZCk7CitleHRlcm4gYmFzaWNfYmxvY2sgKmdldF9sb29wX2JvZHlfaW5fZG9tX29yZGVyIChjb25zdCBzdHJ1Y3QgbG9vcCAqKTsKK2V4dGVybiBiYXNpY19ibG9jayAqZ2V0X2xvb3BfYm9keV9pbl9iZnNfb3JkZXIgKGNvbnN0IHN0cnVjdCBsb29wICopOworZXh0ZXJuIGJhc2ljX2Jsb2NrICpnZXRfbG9vcF9ib2R5X2luX2N1c3RvbV9vcmRlciAoY29uc3Qgc3RydWN0IGxvb3AgKiwKKwkJCSAgICAgICBpbnQgKCopIChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOworCitleHRlcm4gVkVDIChlZGdlLCBoZWFwKSAqZ2V0X2xvb3BfZXhpdF9lZGdlcyAoY29uc3Qgc3RydWN0IGxvb3AgKik7CitlZGdlIHNpbmdsZV9leGl0IChjb25zdCBzdHJ1Y3QgbG9vcCAqKTsKK2V4dGVybiB1bnNpZ25lZCBudW1fbG9vcF9icmFuY2hlcyAoY29uc3Qgc3RydWN0IGxvb3AgKik7CisKK2V4dGVybiBlZGdlIGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGNvbnN0IHN0cnVjdCBsb29wICopOworZXh0ZXJuIGVkZ2UgbG9vcF9sYXRjaF9lZGdlIChjb25zdCBzdHJ1Y3QgbG9vcCAqKTsKKworZXh0ZXJuIHZvaWQgYWRkX2JiX3RvX2xvb3AgKGJhc2ljX2Jsb2NrLCBzdHJ1Y3QgbG9vcCAqKTsKK2V4dGVybiB2b2lkIHJlbW92ZV9iYl9mcm9tX2xvb3BzIChiYXNpY19ibG9jayk7CisKK2V4dGVybiB2b2lkIGNhbmNlbF9sb29wX3RyZWUgKHN0cnVjdCBsb29wICopOworZXh0ZXJuIHZvaWQgZGVsZXRlX2xvb3AgKHN0cnVjdCBsb29wICopOworCitlbnVtCit7CisgIENQX1NJTVBMRV9QUkVIRUFERVJTID0gMSwKKyAgQ1BfRkFMTFRIUlVfUFJFSEVBREVSUyA9IDIKK307CisKK2Jhc2ljX2Jsb2NrIGNyZWF0ZV9wcmVoZWFkZXIgKHN0cnVjdCBsb29wICosIGludCk7CitleHRlcm4gdm9pZCBjcmVhdGVfcHJlaGVhZGVycyAoaW50KTsKK2V4dGVybiB2b2lkIGZvcmNlX3NpbmdsZV9zdWNjX2xhdGNoZXMgKHZvaWQpOworCitleHRlcm4gdm9pZCB2ZXJpZnlfbG9vcF9zdHJ1Y3R1cmUgKHZvaWQpOworCisvKiBMb29wIGFuYWx5c2lzLiAgKi8KK2V4dGVybiBib29sIGp1c3Rfb25jZV9lYWNoX2l0ZXJhdGlvbl9wIChjb25zdCBzdHJ1Y3QgbG9vcCAqLCBjb25zdF9iYXNpY19ibG9jayk7CitnY292X3R5cGUgZXhwZWN0ZWRfbG9vcF9pdGVyYXRpb25zX3VuYm91bmRlZCAoY29uc3Qgc3RydWN0IGxvb3AgKik7CitleHRlcm4gdW5zaWduZWQgZXhwZWN0ZWRfbG9vcF9pdGVyYXRpb25zIChjb25zdCBzdHJ1Y3QgbG9vcCAqKTsKK2V4dGVybiBydHggZG9sb29wX2NvbmRpdGlvbl9nZXQgKHJ0eCk7CisKK3ZvaWQgZXN0aW1hdGVfbnVtYmVyc19vZl9pdGVyYXRpb25zX2xvb3AgKHN0cnVjdCBsb29wICopOworSE9TVF9XSURFX0lOVCBlc3RpbWF0ZWRfbG9vcF9pdGVyYXRpb25zX2ludCAoc3RydWN0IGxvb3AgKiwgYm9vbCk7Citib29sIGVzdGltYXRlZF9sb29wX2l0ZXJhdGlvbnMgKHN0cnVjdCBsb29wICosIGJvb2wsIGRvdWJsZV9pbnQgKik7CisKKy8qIExvb3AgbWFuaXB1bGF0aW9uLiAgKi8KK2V4dGVybiBib29sIGNhbl9kdXBsaWNhdGVfbG9vcF9wIChjb25zdCBzdHJ1Y3QgbG9vcCAqbG9vcCk7CisKKyNkZWZpbmUgRExUSEVfRkxBR19VUERBVEVfRlJFUQkxCS8qIFVwZGF0ZSBmcmVxdWVuY2llcyBpbgorCQkJCQkgICBkdXBsaWNhdGVfbG9vcF90b19oZWFkZXJfZWRnZS4gICovCisjZGVmaW5lIERMVEhFX1JFQ09SRF9DT1BZX05VTUJFUiAyCS8qIFJlY29yZCBjb3B5IG51bWJlciBpbiB0aGUgYXV4CisJCQkJCSAgIGZpZWxkIG9mIG5ld2x5IGNyZWF0ZSBCQi4gICovCisjZGVmaW5lIERMVEhFX0ZMQUdfQ09NUExFVFRFX1BFRUwgNAkvKiBVcGRhdGUgZnJlcXVlbmNpZXMgZXhwZWN0aW5nCisJCQkJCSAgIGEgY29tcGxldGUgcGVlbGluZy4gICovCisKK2V4dGVybiBlZGdlIGNyZWF0ZV9lbXB0eV9pZl9yZWdpb25fb25fZWRnZSAoZWRnZSwgdHJlZSk7CitleHRlcm4gc3RydWN0IGxvb3AgKmNyZWF0ZV9lbXB0eV9sb29wX29uX2VkZ2UgKGVkZ2UsIHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUsCisJCQkJCSAgICAgICB0cmVlICosIHRyZWUgKiwgc3RydWN0IGxvb3AgKik7CitleHRlcm4gc3RydWN0IGxvb3AgKiBkdXBsaWNhdGVfbG9vcCAoc3RydWN0IGxvb3AgKiwgc3RydWN0IGxvb3AgKik7CitleHRlcm4gdm9pZCBkdXBsaWNhdGVfc3VibG9vcHMgKHN0cnVjdCBsb29wICosIHN0cnVjdCBsb29wICopOworZXh0ZXJuIGJvb2wgZHVwbGljYXRlX2xvb3BfdG9faGVhZGVyX2VkZ2UgKHN0cnVjdCBsb29wICosIGVkZ2UsCisJCQkJCSAgIHVuc2lnbmVkLCBzYml0bWFwLCBlZGdlLAorIAkJCQkJICAgVkVDIChlZGdlLCBoZWFwKSAqKiwgaW50KTsKK2V4dGVybiBzdHJ1Y3QgbG9vcCAqbG9vcGlmeSAoZWRnZSwgZWRnZSwKKwkJCSAgICAgYmFzaWNfYmxvY2ssIGVkZ2UsIGVkZ2UsIGJvb2wsCisJCQkgICAgIHVuc2lnbmVkLCB1bnNpZ25lZCk7CitzdHJ1Y3QgbG9vcCAqIGxvb3BfdmVyc2lvbiAoc3RydWN0IGxvb3AgKiwgdm9pZCAqLAorCQkJICAgIGJhc2ljX2Jsb2NrICosIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIGJvb2wpOworZXh0ZXJuIGJvb2wgcmVtb3ZlX3BhdGggKGVkZ2UpOwordm9pZCBzY2FsZV9sb29wX2ZyZXF1ZW5jaWVzIChzdHJ1Y3QgbG9vcCAqLCBpbnQsIGludCk7CisKKy8qIEluZHVjdGlvbiB2YXJpYWJsZSBhbmFseXNpcy4gICovCisKKy8qIFRoZSBkZXNjcmlwdGlvbiBvZiBpbmR1Y3Rpb24gdmFyaWFibGUuICBUaGUgdGhpbmdzIGFyZSBhIGJpdCBjb21wbGljYXRlZAorICAgZHVlIHRvIG5lZWQgdG8gaGFuZGxlIHN1YnJlZ3MgYW5kIGV4dGVuZHMuICBUaGUgdmFsdWUgb2YgdGhlIG9iamVjdCBkZXNjcmliZWQKKyAgIGJ5IGl0IGNhbiBiZSBvYnRhaW5lZCBhcyBmb2xsb3dzIChhbGwgY29tcHV0YXRpb25zIGFyZSBkb25lIGluIGV4dGVuZF9tb2RlKToKKworICAgVmFsdWUgaW4gaS10aCBpdGVyYXRpb24gaXMKKyAgICAgZGVsdGEgKyBtdWx0ICogZXh0ZW5kX3tleHRlbmRfbW9kZX0gKHN1YnJlZ197bW9kZX0gKGJhc2UgKyBpICogc3RlcCkpLgorCisgICBJZiBmaXJzdF9zcGVjaWFsIGlzIHRydWUsIHRoZSB2YWx1ZSBpbiB0aGUgZmlyc3QgaXRlcmF0aW9uIGlzCisgICAgIGRlbHRhICsgbXVsdCAqIGJhc2UKKworICAgSWYgZXh0ZW5kID0gVU5LTk9XTiwgZmlyc3Rfc3BlY2lhbCBtdXN0IGJlIGZhbHNlLCBkZWx0YSAwLCBtdWx0IDEgYW5kIHZhbHVlIGlzCisgICAgIHN1YnJlZ197bW9kZX0gKGJhc2UgKyBpICogc3RlcCkKKworICAgVGhlIGdldF9pdl92YWx1ZSBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBvYnRhaW4gdGhlc2UgZXhwcmVzc2lvbnMuCisKKyAgID8/PyBBZGQgYSB0aGlyZCBtb2RlIGZpZWxkIHRoYXQgd291bGQgc3BlY2lmeSB0aGUgbW9kZSBpbiB0aGF0IGlubmVyCisgICBjb21wdXRhdGlvbiBpcyBkb25lLCB3aGljaCB3b3VsZCBlbmFibGUgaXQgdG8gYmUgZGlmZmVyZW50IGZyb20gdGhlCisgICBvdXRlciBvbmU/ICAqLworCitzdHJ1Y3QgcnR4X2l2Cit7CisgIC8qIEl0cyBiYXNlIGFuZCBzdGVwIChtb2RlIG9mIGJhc2UgYW5kIHN0ZXAgaXMgc3VwcG9zZWQgdG8gYmUgZXh0ZW5kX21vZGUsCisgICAgIHNlZSB0aGUgZGVzY3JpcHRpb24gYWJvdmUpLiAgKi8KKyAgcnR4IGJhc2UsIHN0ZXA7CisKKyAgLyogVGhlIHR5cGUgb2YgZXh0ZW5kIGFwcGxpZWQgdG8gaXQgKFNJR05fRVhURU5ELCBaRVJPX0VYVEVORCBvciBVTktOT1dOKS4gICovCisgIGVudW0gcnR4X2NvZGUgZXh0ZW5kOworCisgIC8qIE9wZXJhdGlvbnMgYXBwbGllZCBpbiB0aGUgZXh0ZW5kZWQgbW9kZS4gICovCisgIHJ0eCBkZWx0YSwgbXVsdDsKKworICAvKiBUaGUgbW9kZSBpdCBpcyBleHRlbmRlZCB0by4gICovCisgIGVudW0gbWFjaGluZV9tb2RlIGV4dGVuZF9tb2RlOworCisgIC8qIFRoZSBtb2RlIHRoZSB2YXJpYWJsZSBpdGVyYXRlcyBpbi4gICovCisgIGVudW0gbWFjaGluZV9tb2RlIG1vZGU7CisKKyAgLyogV2hldGhlciB0aGUgZmlyc3QgaXRlcmF0aW9uIG5lZWRzIHRvIGJlIGhhbmRsZWQgc3BlY2lhbGx5LiAgKi8KKyAgdW5zaWduZWQgZmlyc3Rfc3BlY2lhbCA6IDE7Cit9OworCisvKiBUaGUgZGVzY3JpcHRpb24gb2YgYW4gZXhpdCBmcm9tIHRoZSBsb29wIGFuZCBvZiB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMKKyAgIHRpbGwgd2UgdGFrZSB0aGUgZXhpdC4gICovCisKK3N0cnVjdCBuaXRlcl9kZXNjCit7CisgIC8qIFRoZSBlZGdlIG91dCBvZiB0aGUgbG9vcC4gICovCisgIGVkZ2Ugb3V0X2VkZ2U7CisKKyAgLyogVGhlIG90aGVyIGVkZ2UgbGVhZGluZyBmcm9tIHRoZSBjb25kaXRpb24uICAqLworICBlZGdlIGluX2VkZ2U7CisKKyAgLyogVHJ1ZSBpZiB3ZSBhcmUgYWJsZSB0byBzYXkgYW55dGhpbmcgYWJvdXQgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2YgdGhlCisgICAgIGxvb3AuICAqLworICBib29sIHNpbXBsZV9wOworCisgIC8qIFRydWUgaWYgdGhlIGxvb3AgaXRlcmF0ZXMgdGhlIGNvbnN0YW50IG51bWJlciBvZiB0aW1lcy4gICovCisgIGJvb2wgY29uc3RfaXRlcjsKKworICAvKiBOdW1iZXIgb2YgaXRlcmF0aW9ucyBpZiBjb25zdGFudC4gICovCisgIHVuc2lnbmVkIEhPU1RfV0lERVNUX0lOVCBuaXRlcjsKKworICAvKiBVcHBlciBib3VuZCBvbiB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMuICAqLworICB1bnNpZ25lZCBIT1NUX1dJREVTVF9JTlQgbml0ZXJfbWF4OworCisgIC8qIEFzc3VtcHRpb25zIHVuZGVyIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIGluZm9ybWF0aW9uIGlzIHZhbGlkLiAgKi8KKyAgcnR4IGFzc3VtcHRpb25zOworCisgIC8qIEFzc3VtcHRpb25zIHVuZGVyIHRoYXQgdGhlIGxvb3AgZW5kcyBiZWZvcmUgcmVhY2hpbmcgdGhlIGxhdGNoLAorICAgICBldmVuIGlmIHZhbHVlIG9mIG5pdGVyX2V4cHIgc2F5cyBvdGhlcndpc2UuICAqLworICBydHggbm9sb29wX2Fzc3VtcHRpb25zOworCisgIC8qIENvbmRpdGlvbiB1bmRlciB0aGF0IHRoZSBsb29wIGlzIGluZmluaXRlLiAgKi8KKyAgcnR4IGluZmluaXRlOworCisgIC8qIFdoZXRoZXIgdGhlIGNvbXBhcmlzb24gaXMgc2lnbmVkLiAgKi8KKyAgYm9vbCBzaWduZWRfcDsKKworICAvKiBUaGUgbW9kZSBpbiB0aGF0IG5pdGVyX2V4cHIgc2hvdWxkIGJlIGNvbXB1dGVkLiAgKi8KKyAgZW51bSBtYWNoaW5lX21vZGUgbW9kZTsKKworICAvKiBUaGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2YgdGhlIGxvb3AuICAqLworICBydHggbml0ZXJfZXhwcjsKK307CisKK2V4dGVybiB2b2lkIGl2X2FuYWx5c2lzX2xvb3BfaW5pdCAoc3RydWN0IGxvb3AgKik7CitleHRlcm4gYm9vbCBpdl9hbmFseXplIChydHgsIHJ0eCwgc3RydWN0IHJ0eF9pdiAqKTsKK2V4dGVybiBib29sIGl2X2FuYWx5emVfcmVzdWx0IChydHgsIHJ0eCwgc3RydWN0IHJ0eF9pdiAqKTsKK2V4dGVybiBib29sIGl2X2FuYWx5emVfZXhwciAocnR4LCBydHgsIGVudW0gbWFjaGluZV9tb2RlLCBzdHJ1Y3QgcnR4X2l2ICopOworZXh0ZXJuIHJ0eCBnZXRfaXZfdmFsdWUgKHN0cnVjdCBydHhfaXYgKiwgcnR4KTsKK2V4dGVybiBib29sIGJpdl9wIChydHgsIHJ0eCk7CitleHRlcm4gdm9pZCBmaW5kX3NpbXBsZV9leGl0IChzdHJ1Y3QgbG9vcCAqLCBzdHJ1Y3Qgbml0ZXJfZGVzYyAqKTsKK2V4dGVybiB2b2lkIGl2X2FuYWx5c2lzX2RvbmUgKHZvaWQpOworCitleHRlcm4gc3RydWN0IG5pdGVyX2Rlc2MgKmdldF9zaW1wbGVfbG9vcF9kZXNjIChzdHJ1Y3QgbG9vcCAqbG9vcCk7CitleHRlcm4gdm9pZCBmcmVlX3NpbXBsZV9sb29wX2Rlc2MgKHN0cnVjdCBsb29wICpsb29wKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgbml0ZXJfZGVzYyAqCitzaW1wbGVfbG9vcF9kZXNjIChzdHJ1Y3QgbG9vcCAqbG9vcCkKK3sKKyAgcmV0dXJuIChzdHJ1Y3Qgbml0ZXJfZGVzYyAqKSBsb29wLT5hdXg7Cit9CisKKy8qIEFjY2Vzc29ycyBmb3IgdGhlIGxvb3Agc3RydWN0dXJlcy4gICovCisKKy8qIFJldHVybnMgdGhlIGxvb3Agd2l0aCBpbmRleCBOVU0gZnJvbSBjdXJyZW50X2xvb3BzLiAgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbG9vcCAqCitnZXRfbG9vcCAodW5zaWduZWQgbnVtKQoreworICByZXR1cm4gVkVDX2luZGV4IChsb29wX3AsIGN1cnJlbnRfbG9vcHMtPmxhcnJheSwgbnVtKTsKK30KKworLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHN1cGVybG9vcHMgb2YgTE9PUC4gICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQKK2xvb3BfZGVwdGggKGNvbnN0IHN0cnVjdCBsb29wICpsb29wKQoreworICByZXR1cm4gVkVDX2xlbmd0aCAobG9vcF9wLCBsb29wLT5zdXBlcmxvb3BzKTsKK30KKworLyogUmV0dXJucyB0aGUgaW1tZWRpYXRlIHN1cGVybG9vcCBvZiBMT09QLCBvciBOVUxMIGlmIExPT1AgaXMgdGhlIG91dGVybW9zdAorICAgbG9vcC4gICovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxvb3AgKgorbG9vcF9vdXRlciAoY29uc3Qgc3RydWN0IGxvb3AgKmxvb3ApCit7CisgIHVuc2lnbmVkIG4gPSBWRUNfbGVuZ3RoIChsb29wX3AsIGxvb3AtPnN1cGVybG9vcHMpOworCisgIGlmIChuID09IDApCisgICAgcmV0dXJuIE5VTEw7CisKKyAgcmV0dXJuIFZFQ19pbmRleCAobG9vcF9wLCBsb29wLT5zdXBlcmxvb3BzLCBuIC0gMSk7Cit9CisKKy8qIFJldHVybnMgdGhlIGxpc3Qgb2YgbG9vcHMgaW4gY3VycmVudF9sb29wcy4gICovCisKK3N0YXRpYyBpbmxpbmUgVkVDIChsb29wX3AsIGdjKSAqCitnZXRfbG9vcHMgKHZvaWQpCit7CisgIGlmICghY3VycmVudF9sb29wcykKKyAgICByZXR1cm4gTlVMTDsKKworICByZXR1cm4gY3VycmVudF9sb29wcy0+bGFycmF5OworfQorCisvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbG9vcHMgaW4gY3VycmVudF9sb29wcyAoaW5jbHVkaW5nIHRoZSByZW1vdmVkCisgICBvbmVzIGFuZCB0aGUgZmFrZSBsb29wIHRoYXQgZm9ybXMgdGhlIHJvb3Qgb2YgdGhlIGxvb3AgdHJlZSkuICAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkCitudW1iZXJfb2ZfbG9vcHMgKHZvaWQpCit7CisgIGlmICghY3VycmVudF9sb29wcykKKyAgICByZXR1cm4gMDsKKworICByZXR1cm4gVkVDX2xlbmd0aCAobG9vcF9wLCBjdXJyZW50X2xvb3BzLT5sYXJyYXkpOworfQorCisvKiBSZXR1cm5zIHRydWUgaWYgc3RhdGUgb2YgdGhlIGxvb3BzIHNhdGlzZmllcyBhbGwgcHJvcGVydGllcworICAgZGVzY3JpYmVkIGJ5IEZMQUdTLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitsb29wc19zdGF0ZV9zYXRpc2ZpZXNfcCAodW5zaWduZWQgZmxhZ3MpCit7CisgIHJldHVybiAoY3VycmVudF9sb29wcy0+c3RhdGUgJiBmbGFncykgPT0gZmxhZ3M7Cit9CisKKy8qIFNldHMgRkxBR1MgdG8gdGhlIGxvb3BzIHN0YXRlLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitsb29wc19zdGF0ZV9zZXQgKHVuc2lnbmVkIGZsYWdzKQoreworICBjdXJyZW50X2xvb3BzLT5zdGF0ZSB8PSBmbGFnczsKK30KKworLyogQ2xlYXJzIEZMQUdTIGZyb20gdGhlIGxvb3BzIHN0YXRlLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitsb29wc19zdGF0ZV9jbGVhciAodW5zaWduZWQgZmxhZ3MpCit7CisgIGlmICghY3VycmVudF9sb29wcykKKyAgICByZXR1cm47CisgIGN1cnJlbnRfbG9vcHMtPnN0YXRlICY9IH5mbGFnczsKK30KKworLyogTG9vcCBpdGVyYXRvcnMuICAqLworCisvKiBGbGFncyBmb3IgbG9vcCBpdGVyYXRpb24uICAqLworCitlbnVtIGxpX2ZsYWdzCit7CisgIExJX0lOQ0xVREVfUk9PVCA9IDEsCQkvKiBJbmNsdWRlIHRoZSBmYWtlIHJvb3Qgb2YgdGhlIGxvb3AgdHJlZS4gICovCisgIExJX0ZST01fSU5ORVJNT1NUID0gMiwJLyogSXRlcmF0ZSBvdmVyIHRoZSBsb29wcyBpbiB0aGUgcmV2ZXJzZSBvcmRlciwKKwkJCQkgICBzdGFydGluZyBmcm9tIGlubmVybW9zdCBvbmVzLiAgKi8KKyAgTElfT05MWV9JTk5FUk1PU1QgPSA0CQkvKiBJdGVyYXRlIG9ubHkgb3ZlciBpbm5lcm1vc3QgbG9vcHMuICAqLworfTsKKworLyogVGhlIGl0ZXJhdG9yIGZvciBsb29wcy4gICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qIFRoZSBsaXN0IG9mIGxvb3BzIHRvIHZpc2l0LiAgKi8KKyAgVkVDKGludCxoZWFwKSAqdG9fdmlzaXQ7CisKKyAgLyogVGhlIGluZGV4IG9mIHRoZSBhY3R1YWwgbG9vcC4gICovCisgIHVuc2lnbmVkIGlkeDsKK30gbG9vcF9pdGVyYXRvcjsKKworc3RhdGljIGlubGluZSB2b2lkCitmZWxfbmV4dCAobG9vcF9pdGVyYXRvciAqbGksIGxvb3BfcCAqbG9vcCkKK3sKKyAgaW50IGFudW07CisKKyAgd2hpbGUgKFZFQ19pdGVyYXRlIChpbnQsIGxpLT50b192aXNpdCwgbGktPmlkeCwgYW51bSkpCisgICAgeworICAgICAgbGktPmlkeCsrOworICAgICAgKmxvb3AgPSBnZXRfbG9vcCAoYW51bSk7CisgICAgICBpZiAoKmxvb3ApCisJcmV0dXJuOworICAgIH0KKworICBWRUNfZnJlZSAoaW50LCBoZWFwLCBsaS0+dG9fdmlzaXQpOworICAqbG9vcCA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZmVsX2luaXQgKGxvb3BfaXRlcmF0b3IgKmxpLCBsb29wX3AgKmxvb3AsIHVuc2lnbmVkIGZsYWdzKQoreworICBzdHJ1Y3QgbG9vcCAqYWxvb3A7CisgIHVuc2lnbmVkIGk7CisgIGludCBtbjsKKworICBsaS0+aWR4ID0gMDsKKyAgaWYgKCFjdXJyZW50X2xvb3BzKQorICAgIHsKKyAgICAgIGxpLT50b192aXNpdCA9IE5VTEw7CisgICAgICAqbG9vcCA9IE5VTEw7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGxpLT50b192aXNpdCA9IFZFQ19hbGxvYyAoaW50LCBoZWFwLCBudW1iZXJfb2ZfbG9vcHMgKCkpOworICBtbiA9IChmbGFncyAmIExJX0lOQ0xVREVfUk9PVCkgPyAwIDogMTsKKworICBpZiAoZmxhZ3MgJiBMSV9PTkxZX0lOTkVSTU9TVCkKKyAgICB7CisgICAgICBmb3IgKGkgPSAwOyBWRUNfaXRlcmF0ZSAobG9vcF9wLCBjdXJyZW50X2xvb3BzLT5sYXJyYXksIGksIGFsb29wKTsgaSsrKQorCWlmIChhbG9vcCAhPSBOVUxMCisJICAgICYmIGFsb29wLT5pbm5lciA9PSBOVUxMCisJICAgICYmIGFsb29wLT5udW0gPj0gbW4pCisJICBWRUNfcXVpY2tfcHVzaCAoaW50LCBsaS0+dG9fdmlzaXQsIGFsb29wLT5udW0pOworICAgIH0KKyAgZWxzZSBpZiAoZmxhZ3MgJiBMSV9GUk9NX0lOTkVSTU9TVCkKKyAgICB7CisgICAgICAvKiBQdXNoIHRoZSBsb29wcyB0byBMSS0+VE9fVklTSVQgaW4gcG9zdG9yZGVyLiAgKi8KKyAgICAgIGZvciAoYWxvb3AgPSBjdXJyZW50X2xvb3BzLT50cmVlX3Jvb3Q7CisJICAgYWxvb3AtPmlubmVyICE9IE5VTEw7CisJICAgYWxvb3AgPSBhbG9vcC0+aW5uZXIpCisJY29udGludWU7CisKKyAgICAgIHdoaWxlICgxKQorCXsKKwkgIGlmIChhbG9vcC0+bnVtID49IG1uKQorCSAgICBWRUNfcXVpY2tfcHVzaCAoaW50LCBsaS0+dG9fdmlzaXQsIGFsb29wLT5udW0pOworCisJICBpZiAoYWxvb3AtPm5leHQpCisJICAgIHsKKwkgICAgICBmb3IgKGFsb29wID0gYWxvb3AtPm5leHQ7CisJCSAgIGFsb29wLT5pbm5lciAhPSBOVUxMOworCQkgICBhbG9vcCA9IGFsb29wLT5pbm5lcikKKwkJY29udGludWU7CisJICAgIH0KKwkgIGVsc2UgaWYgKCFsb29wX291dGVyIChhbG9vcCkpCisJICAgIGJyZWFrOworCSAgZWxzZQorCSAgICBhbG9vcCA9IGxvb3Bfb3V0ZXIgKGFsb29wKTsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogUHVzaCB0aGUgbG9vcHMgdG8gTEktPlRPX1ZJU0lUIGluIHByZW9yZGVyLiAgKi8KKyAgICAgIGFsb29wID0gY3VycmVudF9sb29wcy0+dHJlZV9yb290OworICAgICAgd2hpbGUgKDEpCisJeworCSAgaWYgKGFsb29wLT5udW0gPj0gbW4pCisJICAgIFZFQ19xdWlja19wdXNoIChpbnQsIGxpLT50b192aXNpdCwgYWxvb3AtPm51bSk7CisKKwkgIGlmIChhbG9vcC0+aW5uZXIgIT0gTlVMTCkKKwkgICAgYWxvb3AgPSBhbG9vcC0+aW5uZXI7CisJICBlbHNlCisJICAgIHsKKwkgICAgICB3aGlsZSAoYWxvb3AgIT0gTlVMTCAmJiBhbG9vcC0+bmV4dCA9PSBOVUxMKQorCQlhbG9vcCA9IGxvb3Bfb3V0ZXIgKGFsb29wKTsKKwkgICAgICBpZiAoYWxvb3AgPT0gTlVMTCkKKwkJYnJlYWs7CisJICAgICAgYWxvb3AgPSBhbG9vcC0+bmV4dDsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgZmVsX25leHQgKGxpLCBsb29wKTsKK30KKworI2RlZmluZSBGT1JfRUFDSF9MT09QKExJLCBMT09QLCBGTEFHUykgXAorICBmb3IgKGZlbF9pbml0ICgmKExJKSwgJihMT09QKSwgRkxBR1MpOyBcCisgICAgICAgKExPT1ApOyBcCisgICAgICAgZmVsX25leHQgKCYoTEkpLCAmKExPT1ApKSkKKworI2RlZmluZSBGT1JfRUFDSF9MT09QX0JSRUFLKExJKSBcCisgIHsgXAorICAgIFZFQ19mcmVlIChpbnQsIGhlYXAsIChMSSktPnRvX3Zpc2l0KTsgXAorICAgIGJyZWFrOyBcCisgIH0KKworLyogVGhlIHByb3BlcnRpZXMgb2YgdGhlIHRhcmdldC4gICovCisKK2V4dGVybiB1bnNpZ25lZCB0YXJnZXRfYXZhaWxfcmVnczsKK2V4dGVybiB1bnNpZ25lZCB0YXJnZXRfcmVzX3JlZ3M7CitleHRlcm4gdW5zaWduZWQgdGFyZ2V0X3JlZ19jb3N0IFsyXTsKK2V4dGVybiB1bnNpZ25lZCB0YXJnZXRfc3BpbGxfY29zdCBbMl07CisKKy8qIFJlZ2lzdGVyIHByZXNzdXJlIGVzdGltYXRpb24gZm9yIGluZHVjdGlvbiB2YXJpYWJsZSBvcHRpbWl6YXRpb25zICYgbG9vcAorICAgaW52YXJpYW50IG1vdGlvbi4gICovCitleHRlcm4gdW5zaWduZWQgZXN0aW1hdGVfcmVnX3ByZXNzdXJlX2Nvc3QgKHVuc2lnbmVkLCB1bnNpZ25lZCwgYm9vbCk7CitleHRlcm4gdm9pZCBpbml0X3NldF9jb3N0cyAodm9pZCk7CisKKy8qIExvb3Agb3B0aW1pemVyIGluaXRpYWxpemF0aW9uLiAgKi8KK2V4dGVybiB2b2lkIGxvb3Bfb3B0aW1pemVyX2luaXQgKHVuc2lnbmVkKTsKK2V4dGVybiB2b2lkIGxvb3Bfb3B0aW1pemVyX2ZpbmFsaXplICh2b2lkKTsKKworLyogT3B0aW1pemF0aW9uIHBhc3Nlcy4gICovCitleHRlcm4gdm9pZCB1bnN3aXRjaF9sb29wcyAodm9pZCk7CisKK2VudW0KK3sKKyAgVUFQX1BFRUwgPSAxLAkJLyogRW5hYmxlcyBsb29wIHBlZWxpbmcuICAqLworICBVQVBfVU5ST0xMID0gMiwJLyogRW5hYmxlcyB1bnJvbGxpbmcgb2YgbG9vcHMgaWYgaXQgc2VlbXMgcHJvZml0YWJsZS4gICovCisgIFVBUF9VTlJPTExfQUxMID0gNAkvKiBFbmFibGVzIHVucm9sbGluZyBvZiBhbGwgbG9vcHMuICAqLworfTsKKworZXh0ZXJuIHZvaWQgdW5yb2xsX2FuZF9wZWVsX2xvb3BzIChpbnQpOworZXh0ZXJuIHZvaWQgZG9sb29wX29wdGltaXplX2xvb3BzICh2b2lkKTsKK2V4dGVybiB2b2lkIG1vdmVfbG9vcF9pbnZhcmlhbnRzICh2b2lkKTsKK2V4dGVybiBib29sIGZpbml0ZV9sb29wX3AgKHN0cnVjdCBsb29wICopOworCisjZW5kaWYgLyogR0NDX0NGR0xPT1BfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NncmFwaC5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NncmFwaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZDI3MzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvY2dyYXBoLmgKQEAgLTAsMCArMSw3MzQgQEAKKy8qIENhbGxncmFwaCBoYW5kbGluZyBjb2RlLgorICAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IEphbiBIdWJpY2thCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19DR1JBUEhfSAorI2RlZmluZSBHQ0NfQ0dSQVBIX0gKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiYmFzaWMtYmxvY2suaCIKKworZW51bSBhdmFpbGFiaWxpdHkKK3sKKyAgLyogTm90IHlldCBzZXQgYnkgY2dyYXBoX2Z1bmN0aW9uX2JvZHlfYXZhaWxhYmlsaXR5LiAgKi8KKyAgQVZBSUxfVU5TRVQsCisgIC8qIEZ1bmN0aW9uIGJvZHkvdmFyaWFibGUgaW5pdGlhbGl6ZXIgaXMgdW5rbm93bi4gICovCisgIEFWQUlMX05PVF9BVkFJTEFCTEUsCisgIC8qIEZ1bmN0aW9uIGJvZHkvdmFyaWFibGUgaW5pdGlhbGl6ZXIgaXMga25vd24gYnV0IG1pZ2h0IGJlIHJlcGxhY2VkCisgICAgIGJ5IGEgZGlmZmVyZW50IG9uZSBmcm9tIG90aGVyIGNvbXBpbGF0aW9uIHVuaXQgYW5kIHRodXMgbmVlZHMgdG8KKyAgICAgYmUgZGVhbHQgd2l0aCBhIGNhcmUuICBMaWtlIEFWQUlMX05PVF9BVkFJTEFCTEUgaXQgY2FuIGhhdmUKKyAgICAgYXJiaXRyYXJ5IHNpZGUgZWZmZWN0cyBvbiBlc2NhcGluZyB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucywgd2hpbGUKKyAgICAgbGlrZSBBVkFJTEFCTEUgaXQgbWlnaHQgYWNjZXNzIHN0YXRpYyB2YXJpYWJsZXMuICAqLworICBBVkFJTF9PVkVSV1JJVEFCTEUsCisgIC8qIEZ1bmN0aW9uIGJvZHkvdmFyaWFibGUgaW5pdGlhbGl6ZXIgaXMga25vd24gYW5kIHdpbGwgYmUgdXNlZCBpbiBmaW5hbAorICAgICBwcm9ncmFtLiAgKi8KKyAgQVZBSUxfQVZBSUxBQkxFLAorICAvKiBGdW5jdGlvbiBib2R5L3ZhcmlhYmxlIGluaXRpYWxpemVyIGlzIGtub3duIGFuZCBhbGwgaXQncyB1c2VzIGFyZSBleHBsaWNpdGx5CisgICAgIHZpc2libGUgd2l0aGluIGN1cnJlbnQgdW5pdCAoaWUgaXQncyBhZGRyZXNzIGlzIG5ldmVyIHRha2VuIGFuZCBpdCBpcyBub3QKKyAgICAgZXhwb3J0ZWQgdG8gb3RoZXIgdW5pdHMpLgorICAgICBDdXJyZW50bHkgdXNlZCBvbmx5IGZvciBmdW5jdGlvbnMuICAqLworICBBVkFJTF9MT0NBTAorfTsKKworLyogVGhpcyBpcyB0aGUgaW5mb3JtYXRpb24gdGhhdCBpcyBwdXQgaW50byB0aGUgY2dyYXBoIGxvY2FsIHN0cnVjdHVyZQorICAgdG8gcmVjb3ZlciBhIGZ1bmN0aW9uLiAgKi8KK3N0cnVjdCBsdG9fZmlsZV9kZWNsX2RhdGE7CisKK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY2dyYXBoX2F2YWlsYWJpbGl0eV9uYW1lc1tdOworCisvKiBGdW5jdGlvbiBpbmxpbmluZyBpbmZvcm1hdGlvbi4gICovCisKK3N0cnVjdCBHVFkoKCkpIGlubGluZV9zdW1tYXJ5Cit7CisgIC8qIEVzdGltYXRlZCBzdGFjayBmcmFtZSBjb25zdW1wdGlvbiBieSB0aGUgZnVuY3Rpb24uICAqLworICBIT1NUX1dJREVfSU5UIGVzdGltYXRlZF9zZWxmX3N0YWNrX3NpemU7CisKKyAgLyogU2l6ZSBvZiB0aGUgZnVuY3Rpb24gYm9keS4gICovCisgIGludCBzZWxmX3NpemU7CisgIC8qIEhvdyBtYW55IGluc3RydWN0aW9ucyBhcmUgbGlrZWx5IGdvaW5nIHRvIGRpc2FwcGVhciBhZnRlciBpbmxpbmluZy4gICovCisgIGludCBzaXplX2lubGluaW5nX2JlbmVmaXQ7CisgIC8qIEVzdGltYXRlZCB0aW1lIHNwZW50IGV4ZWN1dGluZyB0aGUgZnVuY3Rpb24gYm9keS4gICovCisgIGludCBzZWxmX3RpbWU7CisgIC8qIEhvdyBtdWNoIHRpbWUgaXMgZ29pbmcgdG8gYmUgc2F2ZWQgYnkgaW5saW5pbmcuICAqLworICBpbnQgdGltZV9pbmxpbmluZ19iZW5lZml0OworfTsKKworLyogSW5mb3JtYXRpb24gYWJvdXQgdGh1bmssIHVzZWQgb25seSBmb3Igc2FtZSBib2R5IGFsaWFzZXMuICAqLworCitzdHJ1Y3QgR1RZKCgpKSBjZ3JhcGhfdGh1bmtfaW5mbyB7CisgIC8qIEluZm9ybWF0aW9uIGFib3V0IHRoZSB0aHVuay4gICovCisgIEhPU1RfV0lERV9JTlQgZml4ZWRfb2Zmc2V0OworICBIT1NUX1dJREVfSU5UIHZpcnR1YWxfdmFsdWU7CisgIHRyZWUgYWxpYXM7CisgIGJvb2wgdGhpc19hZGp1c3Rpbmc7CisgIGJvb2wgdmlydHVhbF9vZmZzZXRfcDsKKyAgLyogU2V0IHRvIHRydWUgd2hlbiBhbGlhcyBub2RlIGlzIHRodW5rLiAgKi8KKyAgYm9vbCB0aHVua19wOworfTsKKworLyogSW5mb3JtYXRpb24gYWJvdXQgdGhlIGZ1bmN0aW9uIGNvbGxlY3RlZCBsb2NhbGx5LgorICAgQXZhaWxhYmxlIGFmdGVyIGZ1bmN0aW9uIGlzIGFuYWx5emVkLiAgKi8KKworc3RydWN0IEdUWSgoKSkgY2dyYXBoX2xvY2FsX2luZm8geworICAvKiBGaWxlIHN0cmVhbSB3aGVyZSB0aGlzIG5vZGUgaXMgYmVpbmcgd3JpdHRlbiB0by4gICovCisgIHN0cnVjdCBsdG9fZmlsZV9kZWNsX2RhdGEgKiBHVFkgKChza2lwKSkgbHRvX2ZpbGVfZGF0YTsKKworICBzdHJ1Y3QgaW5saW5lX3N1bW1hcnkgaW5saW5lX3N1bW1hcnk7CisKKyAgLyogU2V0IHdoZW4gZnVuY3Rpb24gZnVuY3Rpb24gaXMgdmlzaWJsZSBpbiBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQgb25seQorICAgICBhbmQgaXRzIGFkZHJlc3MgaXMgbmV2ZXIgdGFrZW4uICAqLworICB1bnNpZ25lZCBsb2NhbCA6IDE7CisKKyAgLyogU2V0IHdoZW4gZnVuY3Rpb24gaXMgdmlzaWJsZSBieSBvdGhlciB1bml0cy4gICovCisgIHVuc2lnbmVkIGV4dGVybmFsbHlfdmlzaWJsZSA6IDE7CisKKyAgLyogU2V0IG9uY2UgaXQgaGFzIGJlZW4gZmluYWxpemVkIHNvIHdlIGNvbnNpZGVyIGl0IHRvIGJlIG91dHB1dC4gICovCisgIHVuc2lnbmVkIGZpbmFsaXplZCA6IDE7CisKKyAgLyogRmFsc2Ugd2hlbiB0aGVyZSBzb21ldGhpbmcgbWFrZXMgaW5saW5pbmcgaW1wb3NzaWJsZSAoc3VjaCBhcyB2YV9hcmcpLiAgKi8KKyAgdW5zaWduZWQgaW5saW5hYmxlIDogMTsKKworICAvKiBUcnVlIHdoZW4gZnVuY3Rpb24gc2hvdWxkIGJlIGlubGluZWQgaW5kZXBlbmRlbnRseSBvbiBpdHMgc2l6ZS4gICovCisgIHVuc2lnbmVkIGRpc3JlZ2FyZF9pbmxpbmVfbGltaXRzIDogMTsKKworICAvKiBUcnVlIHdoZW4gdGhlIGZ1bmN0aW9uIGhhcyBiZWVuIG9yaWdpbmFsbHkgZXh0ZXJuIGlubGluZSwgYnV0IGl0IGlzCisgICAgIHJlZGVmaW5lZCBub3cuICAqLworICB1bnNpZ25lZCByZWRlZmluZWRfZXh0ZXJuX2lubGluZSA6IDE7CisKKyAgLyogVHJ1ZSBpZiBzdGF0aWNzX3JlYWRfZm9yX2Z1bmN0aW9uIGFuZAorICAgICBzdGF0aWNzX3dyaXR0ZW5fZm9yX2Z1bmN0aW9uIGNvbnRhaW4gdmFsaWQgZGF0YS4gICovCisgIHVuc2lnbmVkIGZvcl9mdW5jdGlvbnNfdmFsaWQgOiAxOworCisgIC8qIFRydWUgaWYgdGhlIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGVtaXR0ZWQgaW4gc29tZSBvdGhlciB0cmFuc2xhdGlvbgorICAgICB1bml0LCByZWZlcmVuY2VkIGZyb20gdnRhYmxlLiAgKi8KKyAgdW5zaWduZWQgdnRhYmxlX21ldGhvZCA6IDE7Cit9OworCisvKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgZnVuY3Rpb24gdGhhdCBuZWVkcyB0byBiZSBjb21wdXRlZCBnbG9iYWxseQorICAgb25jZSBjb21waWxhdGlvbiBpcyBmaW5pc2hlZC4gIEF2YWlsYWJsZSBvbmx5IHdpdGggLWZ1bml0LWF0LWEtdGltZS4gICovCisKK3N0cnVjdCBHVFkoKCkpIGNncmFwaF9nbG9iYWxfaW5mbyB7CisgIC8qIEVzdGltYXRlZCBzdGFjayBmcmFtZSBjb25zdW1wdGlvbiBieSB0aGUgZnVuY3Rpb24uICAqLworICBIT1NUX1dJREVfSU5UIGVzdGltYXRlZF9zdGFja19zaXplOworICAvKiBFeHBlY3RlZCBvZmZzZXQgb2YgdGhlIHN0YWNrIGZyYW1lIG9mIGlubGluZWQgZnVuY3Rpb24uICAqLworICBIT1NUX1dJREVfSU5UIHN0YWNrX2ZyYW1lX29mZnNldDsKKworICAvKiBGb3IgaW5saW5lIGNsb25lcyB0aGlzIHBvaW50cyB0byB0aGUgZnVuY3Rpb24gdGhleSB3aWxsIGJlCisgICAgIGlubGluZWQgaW50by4gICovCisgIHN0cnVjdCBjZ3JhcGhfbm9kZSAqaW5saW5lZF90bzsKKworICAvKiBFc3RpbWF0ZWQgc2l6ZSBvZiB0aGUgZnVuY3Rpb24gYWZ0ZXIgaW5saW5pbmcuICAqLworICBpbnQgdGltZTsKKyAgaW50IHNpemU7CisKKyAgLyogRXN0aW1hdGVkIGdyb3d0aCBhZnRlciBpbmxpbmluZy4gIElOVF9NSU4gaWYgbm90IGNvbXB1dGVkLiAgKi8KKyAgaW50IGVzdGltYXRlZF9ncm93dGg7CisKKyAgLyogU2V0IGlmZiB0aGUgZnVuY3Rpb24gaGFzIGJlZW4gaW5saW5lZCBhdCBsZWFzdCBvbmNlLiAgKi8KKyAgYm9vbCBpbmxpbmVkOworfTsKKworLyogSW5mb3JtYXRpb24gYWJvdXQgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgcHJvcGFnYXRlZCBieSB0aGUgUlRMIGJhY2tlbmQuCisgICBBdmFpbGFibGUgb25seSBmb3IgZnVuY3Rpb25zIHRoYXQgaGFzIGJlZW4gYWxyZWFkeSBhc3NlbWJsZWQuICAqLworCitzdHJ1Y3QgR1RZKCgpKSBjZ3JhcGhfcnRsX2luZm8geworICAgdW5zaWduZWQgaW50IHByZWZlcnJlZF9pbmNvbWluZ19zdGFja19ib3VuZGFyeTsKK307CisKKy8qIFJlcHJlc2VudCB3aGljaCBERUNMIHRyZWUgKG9yIHJlZmVyZW5jZSB0byBzdWNoIHRyZWUpCisgICB3aWxsIGJlIHJlcGxhY2VkIGJ5IGFub3RoZXIgdHJlZSB3aGlsZSB2ZXJzaW9uaW5nLiAgKi8KK3N0cnVjdCBHVFkoKCkpIGlwYV9yZXBsYWNlX21hcAoreworICAvKiBUaGUgdHJlZSB0aGF0IHdpbGwgYmUgcmVwbGFjZWQuICAqLworICB0cmVlIG9sZF90cmVlOworICAvKiBUaGUgbmV3IChyZXBsYWNpbmcpIHRyZWUuICAqLworICB0cmVlIG5ld190cmVlOworICAvKiBUcnVlIHdoZW4gYSBzdWJzdGl0dXRpb24gc2hvdWxkIGJlIGRvbmUsIGZhbHNlIG90aGVyd2lzZS4gICovCisgIGJvb2wgcmVwbGFjZV9wOworICAvKiBUcnVlIHdoZW4gd2UgcmVwbGFjZSBhIHJlZmVyZW5jZSB0byBvbGRfdHJlZS4gICovCisgIGJvb2wgcmVmX3A7Cit9OwordHlwZWRlZiBzdHJ1Y3QgaXBhX3JlcGxhY2VfbWFwICppcGFfcmVwbGFjZV9tYXBfcDsKK0RFRl9WRUNfUChpcGFfcmVwbGFjZV9tYXBfcCk7CitERUZfVkVDX0FMTE9DX1AoaXBhX3JlcGxhY2VfbWFwX3AsZ2MpOworCitzdHJ1Y3QgR1RZKCgpKSBjZ3JhcGhfY2xvbmVfaW5mbworeworICBWRUMoaXBhX3JlcGxhY2VfbWFwX3AsZ2MpKiB0cmVlX21hcDsKKyAgYml0bWFwIGFyZ3NfdG9fc2tpcDsKKyAgYml0bWFwIGNvbWJpbmVkX2FyZ3NfdG9fc2tpcDsKK307CisKKy8qIFRoZSBjZ3JhcGggZGF0YSBzdHJ1Y3R1cmUuCisgICBFYWNoIGZ1bmN0aW9uIGRlY2wgaGFzIGFzc2lnbmVkIGNncmFwaF9ub2RlIGxpc3RpbmcgY2FsbGVlcyBhbmQgY2FsbGVycy4gICovCisKK3N0cnVjdCBHVFkoKGNoYWluX25leHQgKCIlaC5uZXh0IiksIGNoYWluX3ByZXYgKCIlaC5wcmV2aW91cyIpKSkgY2dyYXBoX25vZGUgeworICB0cmVlIGRlY2w7CisgIHN0cnVjdCBjZ3JhcGhfZWRnZSAqY2FsbGVlczsKKyAgc3RydWN0IGNncmFwaF9lZGdlICpjYWxsZXJzOworICBzdHJ1Y3QgY2dyYXBoX25vZGUgKm5leHQ7CisgIHN0cnVjdCBjZ3JhcGhfbm9kZSAqcHJldmlvdXM7CisgIC8qIEZvciBuZXN0ZWQgZnVuY3Rpb25zIHBvaW50cyB0byBmdW5jdGlvbiB0aGUgbm9kZSBpcyBuZXN0ZWQgaW4uICAqLworICBzdHJ1Y3QgY2dyYXBoX25vZGUgKm9yaWdpbjsKKyAgLyogUG9pbnRzIHRvIGZpcnN0IG5lc3RlZCBmdW5jdGlvbiwgaWYgYW55LiAgKi8KKyAgc3RydWN0IGNncmFwaF9ub2RlICpuZXN0ZWQ7CisgIC8qIFBvaW50ZXIgdG8gdGhlIG5leHQgZnVuY3Rpb24gd2l0aCBzYW1lIG9yaWdpbiwgaWYgYW55LiAgKi8KKyAgc3RydWN0IGNncmFwaF9ub2RlICpuZXh0X25lc3RlZDsKKyAgLyogUG9pbnRlciB0byB0aGUgbmV4dCBmdW5jdGlvbiBpbiBjZ3JhcGhfbm9kZXNfcXVldWUuICAqLworICBzdHJ1Y3QgY2dyYXBoX25vZGUgKm5leHRfbmVlZGVkOworICAvKiBQb2ludGVyIHRvIHRoZSBuZXh0IGNsb25lLiAgKi8KKyAgc3RydWN0IGNncmFwaF9ub2RlICpuZXh0X3NpYmxpbmdfY2xvbmU7CisgIHN0cnVjdCBjZ3JhcGhfbm9kZSAqcHJldl9zaWJsaW5nX2Nsb25lOworICBzdHJ1Y3QgY2dyYXBoX25vZGUgKmNsb25lczsKKyAgc3RydWN0IGNncmFwaF9ub2RlICpjbG9uZV9vZjsKKyAgLyogRm9yIG5vcm1hbCBub2RlcyBwb2ludGVyIHRvIHRoZSBsaXN0IG9mIGFsaWFzIGFuZCB0aHVuayBub2RlcywKKyAgICAgaW4gYWxpYXMvdGh1bmsgbm9kZXMgcG9pbnRlciB0byB0aGUgbm9ybWFsIG5vZGUuICAqLworICBzdHJ1Y3QgY2dyYXBoX25vZGUgKnNhbWVfYm9keTsKKyAgLyogQ2lyY3VsYXIgbGlzdCBvZiBub2RlcyBpbiB0aGUgc2FtZSBjb21kYXQgZ3JvdXAgaWYgbm9uLU5VTEwuICAqLworICBzdHJ1Y3QgY2dyYXBoX25vZGUgKnNhbWVfY29tZGF0X2dyb3VwOworICAvKiBGb3IgZnVuY3Rpb25zIHdpdGggbWFueSBjYWxscyBzaXRlcyBpdCBob2xkcyBtYXAgZnJvbSBjYWxsIGV4cHJlc3Npb24KKyAgICAgdG8gdGhlIGVkZ2UgdG8gc3BlZWQgdXAgY2dyYXBoX2VkZ2UgZnVuY3Rpb24uICAqLworICBodGFiX3QgR1RZKChwYXJhbV9pcyAoc3RydWN0IGNncmFwaF9lZGdlKSkpIGNhbGxfc2l0ZV9oYXNoOworCisgIFBUUiBHVFkgKChza2lwKSkgYXV4OworCisgIC8qIEludGVycHJvY2VkdXJhbCBwYXNzZXMgc2NoZWR1bGVkIHRvIGhhdmUgdGhlaXIgdHJhbnNmb3JtIGZ1bmN0aW9ucworICAgICBhcHBsaWVkIG5leHQgdGltZSB3ZSBleGVjdXRlIGxvY2FsIHBhc3Mgb24gdGhlbS4gIFdlIG1haW50YWluIGl0CisgICAgIHBlci1mdW5jdGlvbiBpbiBvcmRlciB0byBhbGxvdyBJUEEgcGFzc2VzIHRvIGludHJvZHVjZSBuZXcgZnVuY3Rpb25zLiAgKi8KKyAgVkVDKGlwYV9vcHRfcGFzcyxoZWFwKSAqIEdUWSgoc2tpcCkpIGlwYV90cmFuc2Zvcm1zX3RvX2FwcGx5OworCisgIHN0cnVjdCBjZ3JhcGhfbG9jYWxfaW5mbyBsb2NhbDsKKyAgc3RydWN0IGNncmFwaF9nbG9iYWxfaW5mbyBnbG9iYWw7CisgIHN0cnVjdCBjZ3JhcGhfcnRsX2luZm8gcnRsOworICBzdHJ1Y3QgY2dyYXBoX2Nsb25lX2luZm8gY2xvbmU7CisgIHN0cnVjdCBjZ3JhcGhfdGh1bmtfaW5mbyB0aHVuazsKKworICAvKiBFeHBlY3RlZCBudW1iZXIgb2YgZXhlY3V0aW9uczogY2FsY3VsYXRlZCBpbiBwcm9maWxlLmMuICAqLworICBnY292X3R5cGUgY291bnQ7CisgIC8qIFVuaXF1ZSBpZCBvZiB0aGUgbm9kZS4gICovCisgIGludCB1aWQ7CisgIC8qIE9yZGVyaW5nIG9mIGFsbCBjZ3JhcGggbm9kZXMuICAqLworICBpbnQgb3JkZXI7CisKKyAgLyogdW5pcXVlIGlkIGZvciBwcm9maWxpbmcuIHBpZCBpcyBub3Qgc3VpdGFibGUgYmVjYXVzZSBvZiBkaWZmZXJlbnQKKyAgICAgbnVtYmVyIG9mIGNmZyBub2RlcyB3aXRoIC1mcHJvZmlsZS1nZW5lcmF0ZSBhbmQgLWZwcm9maWxlLXVzZSAqLworICBpbnQgcGlkOworCisgIC8qIFNldCB3aGVuIGZ1bmN0aW9uIG11c3QgYmUgb3V0cHV0IGZvciBzb21lIHJlYXNvbi4gIFRoZSBwcmltYXJ5CisgICAgIHVzZSBvZiB0aGlzIGZsYWcgaXMgdG8gbWFyayBmdW5jdGlvbnMgbmVlZGVkIHRvIGJlIG91dHB1dCBmb3IKKyAgICAgbm9uLXN0YW5kYXJkIHJlYXNvbi4gIEZ1bmN0aW9ucyB0aGF0IGFyZSBleHRlcm5hbGx5IHZpc2libGUKKyAgICAgb3IgcmVhY2hhYmxlIGZyb20gZnVuY3Rpb25zIG5lZWRlZCB0byBiZSBvdXRwdXQgYXJlIG1hcmtlZAorICAgICBieSBzcGVjaWFsaXplZCBmbGFncy4gICovCisgIHVuc2lnbmVkIG5lZWRlZCA6IDE7CisgIC8qIFNldCB3aGVuIGZ1bmN0aW9uIGhhcyBhZGRyZXNzIHRha2VuLgorICAgICBJbiBjdXJyZW50IGltcGxlbWVudGF0aW9uIGl0IGltcGx5IG5lZWRlZCBmbGFnLiAqLworICB1bnNpZ25lZCBhZGRyZXNzX3Rha2VuIDogMTsKKyAgLyogU2V0IHdoZW4gZGVjbCBpcyBhbiBhYnN0cmFjdCBmdW5jdGlvbiBwb2ludGVkIHRvIGJ5IHRoZQorICAgICBBQlNUUkFDVF9ERUNMX09SSUdJTiBvZiBhIHJlYWNoYWJsZSBmdW5jdGlvbi4gICovCisgIHVuc2lnbmVkIGFic3RyYWN0X2FuZF9uZWVkZWQgOiAxOworICAvKiBTZXQgd2hlbiBmdW5jdGlvbiBpcyByZWFjaGFibGUgYnkgY2FsbCBmcm9tIG90aGVyIGZ1bmN0aW9uCisgICAgIHRoYXQgaXMgZWl0aGVyIHJlYWNoYWJsZSBvciBuZWVkZWQuCisgICAgIFRoaXMgZmxhZyBpcyBjb21wdXRlZCBhdCBvcmlnaW5hbCBjZ3JhcGggY29uc3RydWN0aW9uIGFuZCB0aGVuCisgICAgIHVwZGF0ZWQgaW4gY2dyYXBoX3JlbW92ZV91bnJlYWNoYWJsZV9ub2Rlcy4gIE5vdGUgdGhhdCBhZnRlcgorICAgICBjZ3JhcGhfcmVtb3ZlX3VucmVhY2hhYmxlX25vZGVzIGNncmFwaCBzdGlsbCBjYW4gY29udGFpbiB1bnJlYWNoYWJsZQorICAgICBub2RlcyB3aGVuIHRoZXkgYXJlIG5lZWRlZCBmb3IgdmlydHVhbCBjbG9uZSBpbnN0YW50aWF0aW9uLiAgKi8KKyAgdW5zaWduZWQgcmVhY2hhYmxlIDogMTsKKyAgLyogU2V0IG9uY2UgdGhlIGZ1bmN0aW9uIGlzIGxvd2VyZWQgKGkuZS4gaXRzIENGRyBpcyBidWlsdCkuICAqLworICB1bnNpZ25lZCBsb3dlcmVkIDogMTsKKyAgLyogU2V0IG9uY2UgdGhlIGZ1bmN0aW9uIGhhcyBiZWVuIGluc3RhbnRpYXRlZCBhbmQgaXRzIGNhbGxlZQorICAgICBsaXN0cyBjcmVhdGVkLiAgKi8KKyAgdW5zaWduZWQgYW5hbHl6ZWQgOiAxOworICAvKiBTZXQgd2hlbiBmdW5jdGlvbiBpcyBzY2hlZHVsZWQgdG8gYmUgcHJvY2Vzc2VkIGJ5IGxvY2FsIHBhc3Nlcy4gICovCisgIHVuc2lnbmVkIHByb2Nlc3MgOiAxOworICAvKiBTZXQgZm9yIGFsaWFzZXMgb25jZSB0aGV5IGdvdCB0aHJvdWdoIGFzc2VtYmxlX2FsaWFzLiAgKi8KKyAgdW5zaWduZWQgYWxpYXMgOiAxOworICAvKiBTZXQgZm9yIG5vZGVzIHRoYXQgd2FzIGNvbnN0cnVjdGVkIGFuZCBmaW5hbGl6ZWQgYnkgZnJvbnRlbmQuICAqLworICB1bnNpZ25lZCBmaW5hbGl6ZWRfYnlfZnJvbnRlbmQgOiAxOworICAvKiBTZXQgZm9yIGFsaWFzIGFuZCB0aHVuayBub2Rlcywgc2FtZV9ib2R5IHBvaW50cyB0byB0aGUgbm9kZSB0aGV5IGFyZSBhbGlhcworICAgICBvZiBhbmQgdGhleSBhcmUgbGlua2VkIHRocm91Z2ggdGhlIG5leHQvcHJldmlvdXMgcG9pbnRlcnMuICAqLworICB1bnNpZ25lZCBzYW1lX2JvZHlfYWxpYXMgOiAxOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgY2dyYXBoX25vZGUgKmNncmFwaF9ub2RlX3B0cjsKKworREVGX1ZFQ19QKGNncmFwaF9ub2RlX3B0cik7CitERUZfVkVDX0FMTE9DX1AoY2dyYXBoX25vZGVfcHRyLGhlYXApOworREVGX1ZFQ19BTExPQ19QKGNncmFwaF9ub2RlX3B0cixnYyk7CisKKy8qIEEgY2dyYXBoIG5vZGUgc2V0IGlzIGEgY29sbGVjdGlvbiBvZiBjZ3JhcGggbm9kZXMuICBBIGNncmFwaCBub2RlCisgICBjYW4gYXBwZWFyIGluIG11bHRpcGxlIHNldHMuICAqLworc3RydWN0IEdUWSgoKSkgY2dyYXBoX25vZGVfc2V0X2RlZgoreworICBodGFiX3QgR1RZKChwYXJhbV9pcyAoc3RydWN0IGNncmFwaF9ub2RlX3NldF9lbGVtZW50X2RlZikpKSBoYXNodGFiOworICBWRUMoY2dyYXBoX25vZGVfcHRyLCBnYykgKm5vZGVzOworICBQVFIgR1RZICgoc2tpcCkpIGF1eDsKK307CisKK3R5cGVkZWYgc3RydWN0IGNncmFwaF9ub2RlX3NldF9kZWYgKmNncmFwaF9ub2RlX3NldDsKKworREVGX1ZFQ19QKGNncmFwaF9ub2RlX3NldCk7CitERUZfVkVDX0FMTE9DX1AoY2dyYXBoX25vZGVfc2V0LGdjKTsKK0RFRl9WRUNfQUxMT0NfUChjZ3JhcGhfbm9kZV9zZXQsaGVhcCk7CisKKy8qIEEgY2dyYXBoIG5vZGUgc2V0IGVsZW1lbnQgY29udGFpbnMgYW4gaW5kZXggaW4gdGhlIHZlY3RvciBvZiBub2RlcyBpbgorICAgdGhlIHNldC4gICovCitzdHJ1Y3QgR1RZKCgpKSBjZ3JhcGhfbm9kZV9zZXRfZWxlbWVudF9kZWYKK3sKKyAgc3RydWN0IGNncmFwaF9ub2RlICpub2RlOworICBIT1NUX1dJREVfSU5UIGluZGV4OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgY2dyYXBoX25vZGVfc2V0X2VsZW1lbnRfZGVmICpjZ3JhcGhfbm9kZV9zZXRfZWxlbWVudDsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IGNncmFwaF9ub2RlX3NldF9lbGVtZW50X2RlZiAqY29uc3RfY2dyYXBoX25vZGVfc2V0X2VsZW1lbnQ7CisKKy8qIEl0ZXJhdG9yIHN0cnVjdHVyZSBmb3IgY2dyYXBoIG5vZGUgc2V0cy4gICovCit0eXBlZGVmIHN0cnVjdAoreworICBjZ3JhcGhfbm9kZV9zZXQgc2V0OworICB1bnNpZ25lZCBpbmRleDsKK30gY2dyYXBoX25vZGVfc2V0X2l0ZXJhdG9yOworCisjZGVmaW5lIERFRkNJRkNPREUoY29kZSwgc3RyaW5nKQlDSUZfICMjIGNvZGUsCisvKiBSZWFzb25zIGZvciBpbmxpbmluZyBmYWlsdXJlcy4gICovCit0eXBlZGVmIGVudW0geworI2luY2x1ZGUgImNpZi1jb2RlLmRlZiIKKyAgQ0lGX05fUkVBU09OUworfSBjZ3JhcGhfaW5saW5lX2ZhaWxlZF90OworCitzdHJ1Y3QgR1RZKChjaGFpbl9uZXh0ICgiJWgubmV4dF9jYWxsZXIiKSwgY2hhaW5fcHJldiAoIiVoLnByZXZfY2FsbGVyIikpKSBjZ3JhcGhfZWRnZSB7CisgIC8qIEV4cGVjdGVkIG51bWJlciBvZiBleGVjdXRpb25zOiBjYWxjdWxhdGVkIGluIHByb2ZpbGUuYy4gICovCisgIGdjb3ZfdHlwZSBjb3VudDsKKyAgc3RydWN0IGNncmFwaF9ub2RlICpjYWxsZXI7CisgIHN0cnVjdCBjZ3JhcGhfbm9kZSAqY2FsbGVlOworICBzdHJ1Y3QgY2dyYXBoX2VkZ2UgKnByZXZfY2FsbGVyOworICBzdHJ1Y3QgY2dyYXBoX2VkZ2UgKm5leHRfY2FsbGVyOworICBzdHJ1Y3QgY2dyYXBoX2VkZ2UgKnByZXZfY2FsbGVlOworICBzdHJ1Y3QgY2dyYXBoX2VkZ2UgKm5leHRfY2FsbGVlOworICBnaW1wbGUgY2FsbF9zdG10OworICBQVFIgR1RZICgoc2tpcCAoIiIpKSkgYXV4OworICAvKiBXaGVuIGVxdWFsIHRvIENJRl9PSywgaW5saW5lIHRoaXMgY2FsbC4gIE90aGVyd2lzZSwgcG9pbnRzIHRvIHRoZQorICAgICBleHBsYW5hdGlvbiB3aHkgZnVuY3Rpb24gd2FzIG5vdCBpbmxpbmVkLiAgKi8KKyAgY2dyYXBoX2lubGluZV9mYWlsZWRfdCBpbmxpbmVfZmFpbGVkOworICAvKiBUaGUgc3RtdF91aWQgb2YgY2FsbF9zdG10LiAgVGhpcyBpcyB1c2VkIGJ5IExUTyB0byByZWNvdmVyIHRoZSBjYWxsX3N0bXQKKyAgICAgd2hlbiB0aGUgZnVuY3Rpb24gaXMgc2VyaWFsaXplZCBpbi4gICovCisgIHVuc2lnbmVkIGludCBsdG9fc3RtdF91aWQ7CisgIC8qIEV4cGVjdGVkIGZyZXF1ZW5jeSBvZiBleGVjdXRpb25zIHdpdGhpbiB0aGUgZnVuY3Rpb24uCisgICAgIFdoZW4gc2V0IHRvIENHUkFQSF9GUkVRX0JBU0UsIHRoZSBlZGdlIGlzIGV4cGVjdGVkIHRvIGJlIGNhbGxlZCBvbmNlCisgICAgIHBlciBmdW5jdGlvbiBjYWxsLiAgVGhlIHJhbmdlIGlzIDAgdG8gQ0dSQVBIX0ZSRVFfTUFYLiAgKi8KKyAgaW50IGZyZXF1ZW5jeTsKKyAgLyogVW5pcXVlIGlkIG9mIHRoZSBlZGdlLiAgKi8KKyAgaW50IHVpZDsKKyAgLyogRGVwdGggb2YgbG9vcCBuZXN0LCAxIG1lYW5zIG5vIGxvb3AgbmVzdC4gICovCisgIHVuc2lnbmVkIHNob3J0IGludCBsb29wX25lc3Q7CisgIC8qIFdoZXRoZXIgdGhpcyBlZGdlIGRlc2NyaWJlcyBhIGNhbGwgdGhhdCB3YXMgb3JpZ2luYWxseSBpbmRpcmVjdC4gICovCisgIHVuc2lnbmVkIGludCBpbmRpcmVjdF9jYWxsIDogMTsKKyAgLyogVHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBDQUxMIHN0bXQgY2Fubm90IGJlIGlubGluZWQuICAqLworICB1bnNpZ25lZCBpbnQgY2FsbF9zdG10X2Nhbm5vdF9pbmxpbmVfcCA6IDE7CisgIC8qIENhbiB0aGlzIGNhbGwgdGhyb3cgZXh0ZXJuYWxseT8gICovCisgIHVuc2lnbmVkIGludCBjYW5fdGhyb3dfZXh0ZXJuYWwgOiAxOworfTsKKworI2RlZmluZSBDR1JBUEhfRlJFUV9CQVNFIDEwMDAKKyNkZWZpbmUgQ0dSQVBIX0ZSRVFfTUFYIDEwMDAwMAorCit0eXBlZGVmIHN0cnVjdCBjZ3JhcGhfZWRnZSAqY2dyYXBoX2VkZ2VfcDsKKworREVGX1ZFQ19QKGNncmFwaF9lZGdlX3ApOworREVGX1ZFQ19BTExPQ19QKGNncmFwaF9lZGdlX3AsaGVhcCk7CisKKy8qIFRoZSB2YXJwb29sIGRhdGEgc3RydWN0dXJlLgorICAgRWFjaCBzdGF0aWMgdmFyaWFibGUgZGVjbCBoYXMgYXNzaWduZWQgdmFycG9vbF9ub2RlLiAgKi8KKworc3RydWN0IEdUWSgoY2hhaW5fbmV4dCAoIiVoLm5leHQiKSkpIHZhcnBvb2xfbm9kZSB7CisgIHRyZWUgZGVjbDsKKyAgLyogUG9pbnRlciB0byB0aGUgbmV4dCBmdW5jdGlvbiBpbiB2YXJwb29sX25vZGVzLiAgKi8KKyAgc3RydWN0IHZhcnBvb2xfbm9kZSAqbmV4dDsKKyAgLyogUG9pbnRlciB0byB0aGUgbmV4dCBmdW5jdGlvbiBpbiB2YXJwb29sX25vZGVzX3F1ZXVlLiAgKi8KKyAgc3RydWN0IHZhcnBvb2xfbm9kZSAqbmV4dF9uZWVkZWQ7CisgIC8qIEZvciBub3JtYWwgbm9kZXMgYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBleHRyYSBuYW1lIGFsaWFzLiAgRm9yIGFsaWFzCisgICAgIG5vZGVzIGEgcG9pbnRlciB0byB0aGUgbm9ybWFsIG5vZGUuICAqLworICBzdHJ1Y3QgdmFycG9vbF9ub2RlICpleHRyYV9uYW1lOworICAvKiBPcmRlcmluZyBvZiBhbGwgY2dyYXBoIG5vZGVzLiAgKi8KKyAgaW50IG9yZGVyOworCisgIC8qIFNldCB3aGVuIGZ1bmN0aW9uIG11c3QgYmUgb3V0cHV0IC0gaXQgaXMgZXh0ZXJuYWxseSB2aXNpYmxlCisgICAgIG9yIGl0cyBhZGRyZXNzIGlzIHRha2VuLiAgKi8KKyAgdW5zaWduZWQgbmVlZGVkIDogMTsKKyAgLyogTmVlZGVkIHZhcmlhYmxlcyBtaWdodCBiZWNvbWUgZGVhZCBieSBvcHRpbWl6YXRpb24uICBUaGlzIGZsYWcKKyAgICAgZm9yY2VzIHRoZSB2YXJpYWJsZSB0byBiZSBvdXRwdXQgZXZlbiBpZiBpdCBhcHBlYXJzIGRlYWQgb3RoZXJ3aXNlLiAgKi8KKyAgdW5zaWduZWQgZm9yY2Vfb3V0cHV0IDogMTsKKyAgLyogU2V0IG9uY2UgdGhlIHZhcmlhYmxlIGhhcyBiZWVuIGluc3RhbnRpYXRlZCBhbmQgaXRzIGNhbGxlZQorICAgICBsaXN0cyBjcmVhdGVkLiAgKi8KKyAgdW5zaWduZWQgYW5hbHl6ZWQgOiAxOworICAvKiBTZXQgb25jZSBpdCBoYXMgYmVlbiBmaW5hbGl6ZWQgc28gd2UgY29uc2lkZXIgaXQgdG8gYmUgb3V0cHV0LiAgKi8KKyAgdW5zaWduZWQgZmluYWxpemVkIDogMTsKKyAgLyogU2V0IHdoZW4gdmFyaWFibGUgaXMgc2NoZWR1bGVkIHRvIGJlIGFzc2VtYmxlZC4gICovCisgIHVuc2lnbmVkIG91dHB1dCA6IDE7CisgIC8qIFNldCB3aGVuIGZ1bmN0aW9uIGlzIHZpc2libGUgYnkgb3RoZXIgdW5pdHMuICAqLworICB1bnNpZ25lZCBleHRlcm5hbGx5X3Zpc2libGUgOiAxOworICAvKiBTZXQgZm9yIGFsaWFzZXMgb25jZSB0aGV5IGdvdCB0aHJvdWdoIGFzc2VtYmxlX2FsaWFzLiAgQWxzbyBzZXQgZm9yCisgICAgIGV4dHJhIG5hbWUgYWxpYXNlcyBpbiB2YXJwb29sX2V4dHJhX25hbWVfYWxpYXMuICAqLworICB1bnNpZ25lZCBhbGlhcyA6IDE7Cit9OworCisvKiBFdmVyeSB0b3AgbGV2ZWwgYXNtIHN0YXRlbWVudCBpcyBwdXQgaW50byBhIGNncmFwaF9hc21fbm9kZS4gICovCisKK3N0cnVjdCBHVFkoKCkpIGNncmFwaF9hc21fbm9kZSB7CisgIC8qIE5leHQgYXNtIG5vZGUuICAqLworICBzdHJ1Y3QgY2dyYXBoX2FzbV9ub2RlICpuZXh0OworICAvKiBTdHJpbmcgZm9yIHRoaXMgYXNtIG5vZGUuICAqLworICB0cmVlIGFzbV9zdHI7CisgIC8qIE9yZGVyaW5nIG9mIGFsbCBjZ3JhcGggbm9kZXMuICAqLworICBpbnQgb3JkZXI7Cit9OworCitleHRlcm4gR1RZKCgpKSBzdHJ1Y3QgY2dyYXBoX25vZGUgKmNncmFwaF9ub2RlczsKK2V4dGVybiBHVFkoKCkpIGludCBjZ3JhcGhfbl9ub2RlczsKK2V4dGVybiBHVFkoKCkpIGludCBjZ3JhcGhfbWF4X3VpZDsKK2V4dGVybiBHVFkoKCkpIGludCBjZ3JhcGhfZWRnZV9tYXhfdWlkOworZXh0ZXJuIEdUWSgoKSkgaW50IGNncmFwaF9tYXhfcGlkOworZXh0ZXJuIGJvb2wgY2dyYXBoX2dsb2JhbF9pbmZvX3JlYWR5OworZW51bSBjZ3JhcGhfc3RhdGUKK3sKKyAgLyogQ2FsbGdyYXBoIGlzIGJlaW5nIGNvbnN0cnVjdGVkLiAgSXQgaXMgc2FmZSB0byBhZGQgbmV3IGZ1bmN0aW9ucy4gICovCisgIENHUkFQSF9TVEFURV9DT05TVFJVQ1RJT04sCisgIC8qIENhbGxncmFwaCBpcyBidWlsdCBhbmQgSVBBIHBhc3NlcyBhcmUgYmVpbmcgcnVuLiAgKi8KKyAgQ0dSQVBIX1NUQVRFX0lQQSwKKyAgLyogQ2FsbGdyYXBoIGlzIGJ1aWx0IGFuZCBhbGwgZnVuY3Rpb25zIGFyZSB0cmFuc2Zvcm1lZCB0byBTU0EgZm9ybS4gICovCisgIENHUkFQSF9TVEFURV9JUEFfU1NBLAorICAvKiBGdW5jdGlvbnMgYXJlIG5vdyBvcmRlcmVkIGFuZCBiZWluZyBwYXNzZWQgdG8gUlRMIGV4cGFuZGVycy4gICovCisgIENHUkFQSF9TVEFURV9FWFBBTlNJT04sCisgIC8qIEFsbCBjZ3JhcGggZXhwYW5zaW9uIGlzIGRvbmUuICAqLworICBDR1JBUEhfU1RBVEVfRklOSVNIRUQKK307CitleHRlcm4gZW51bSBjZ3JhcGhfc3RhdGUgY2dyYXBoX3N0YXRlOworZXh0ZXJuIGJvb2wgY2dyYXBoX2Z1bmN0aW9uX2ZsYWdzX3JlYWR5OworZXh0ZXJuIEdUWSgoKSkgc3RydWN0IGNncmFwaF9ub2RlICpjZ3JhcGhfbm9kZXNfcXVldWU7CitleHRlcm4gR1RZKCgpKSBzdHJ1Y3QgY2dyYXBoX25vZGUgKmNncmFwaF9uZXdfbm9kZXM7CisKK2V4dGVybiBHVFkoKCkpIHN0cnVjdCBjZ3JhcGhfYXNtX25vZGUgKmNncmFwaF9hc21fbm9kZXM7CitleHRlcm4gR1RZKCgpKSBpbnQgY2dyYXBoX29yZGVyOworCisvKiBJbiBjZ3JhcGguYyAgKi8KK3ZvaWQgZHVtcF9jZ3JhcGggKEZJTEUgKik7Cit2b2lkIGRlYnVnX2NncmFwaCAodm9pZCk7Cit2b2lkIGR1bXBfY2dyYXBoX25vZGUgKEZJTEUgKiwgc3RydWN0IGNncmFwaF9ub2RlICopOwordm9pZCBkZWJ1Z19jZ3JhcGhfbm9kZSAoc3RydWN0IGNncmFwaF9ub2RlICopOwordm9pZCBjZ3JhcGhfaW5zZXJ0X25vZGVfdG9faGFzaHRhYmxlIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUpOwordm9pZCBjZ3JhcGhfcmVtb3ZlX2VkZ2UgKHN0cnVjdCBjZ3JhcGhfZWRnZSAqKTsKK3ZvaWQgY2dyYXBoX3JlbW92ZV9ub2RlIChzdHJ1Y3QgY2dyYXBoX25vZGUgKik7Cit2b2lkIGNncmFwaF9yZW1vdmVfbm9kZV9hbmRfaW5saW5lX2Nsb25lcyAoc3RydWN0IGNncmFwaF9ub2RlICopOwordm9pZCBjZ3JhcGhfcmVsZWFzZV9mdW5jdGlvbl9ib2R5IChzdHJ1Y3QgY2dyYXBoX25vZGUgKik7Cit2b2lkIGNncmFwaF9ub2RlX3JlbW92ZV9jYWxsZWVzIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUpOworc3RydWN0IGNncmFwaF9lZGdlICpjZ3JhcGhfY3JlYXRlX2VkZ2UgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqLAorCQkJCQlzdHJ1Y3QgY2dyYXBoX25vZGUgKiwKKwkJCQkJZ2ltcGxlLCBnY292X3R5cGUsIGludCwgaW50KTsKKworc3RydWN0IGNncmFwaF9ub2RlICogY2dyYXBoX2dldF9ub2RlICh0cmVlKTsKK3N0cnVjdCBjZ3JhcGhfbm9kZSAqY2dyYXBoX25vZGUgKHRyZWUpOworYm9vbCBjZ3JhcGhfc2FtZV9ib2R5X2FsaWFzICh0cmVlLCB0cmVlKTsKK3ZvaWQgY2dyYXBoX2FkZF90aHVuayAodHJlZSwgdHJlZSwgYm9vbCwgSE9TVF9XSURFX0lOVCwgSE9TVF9XSURFX0lOVCwgdHJlZSwgdHJlZSk7Cit2b2lkIGNncmFwaF9yZW1vdmVfc2FtZV9ib2R5X2FsaWFzIChzdHJ1Y3QgY2dyYXBoX25vZGUgKik7CitzdHJ1Y3QgY2dyYXBoX25vZGUgKmNncmFwaF9ub2RlX2Zvcl9hc20gKHRyZWUpOworc3RydWN0IGNncmFwaF9lZGdlICpjZ3JhcGhfZWRnZSAoc3RydWN0IGNncmFwaF9ub2RlICosIGdpbXBsZSk7Cit2b2lkIGNncmFwaF9zZXRfY2FsbF9zdG10IChzdHJ1Y3QgY2dyYXBoX2VkZ2UgKiwgZ2ltcGxlKTsKK3ZvaWQgY2dyYXBoX3NldF9jYWxsX3N0bXRfaW5jbHVkaW5nX2Nsb25lcyAoc3RydWN0IGNncmFwaF9ub2RlICosIGdpbXBsZSwgZ2ltcGxlKTsKK3ZvaWQgY2dyYXBoX2NyZWF0ZV9lZGdlX2luY2x1ZGluZ19jbG9uZXMgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqLAorCQkJCQkgIHN0cnVjdCBjZ3JhcGhfbm9kZSAqLAorCQkJCQkgIGdpbXBsZSwgZ2ltcGxlLCBnY292X3R5cGUsIGludCwgaW50LAorCQkJCQkgIGNncmFwaF9pbmxpbmVfZmFpbGVkX3QpOwordm9pZCBjZ3JhcGhfdXBkYXRlX2VkZ2VzX2Zvcl9jYWxsX3N0bXQgKGdpbXBsZSwgdHJlZSwgZ2ltcGxlKTsKK3N0cnVjdCBjZ3JhcGhfbG9jYWxfaW5mbyAqY2dyYXBoX2xvY2FsX2luZm8gKHRyZWUpOworc3RydWN0IGNncmFwaF9nbG9iYWxfaW5mbyAqY2dyYXBoX2dsb2JhbF9pbmZvICh0cmVlKTsKK3N0cnVjdCBjZ3JhcGhfcnRsX2luZm8gKmNncmFwaF9ydGxfaW5mbyAodHJlZSk7Citjb25zdCBjaGFyICogY2dyYXBoX25vZGVfbmFtZSAoc3RydWN0IGNncmFwaF9ub2RlICopOworc3RydWN0IGNncmFwaF9lZGdlICogY2dyYXBoX2Nsb25lX2VkZ2UgKHN0cnVjdCBjZ3JhcGhfZWRnZSAqLAorCQkJCQlzdHJ1Y3QgY2dyYXBoX25vZGUgKiwgZ2ltcGxlLAorCQkJCQl1bnNpZ25lZCwgZ2Nvdl90eXBlLCBpbnQsIGludCwgYm9vbCk7CitzdHJ1Y3QgY2dyYXBoX25vZGUgKiBjZ3JhcGhfY2xvbmVfbm9kZSAoc3RydWN0IGNncmFwaF9ub2RlICosIGdjb3ZfdHlwZSwgaW50LAorCQkJCQlpbnQsIGJvb2wsIFZFQyhjZ3JhcGhfZWRnZV9wLGhlYXApICopOworCit2b2lkIGNncmFwaF9yZWRpcmVjdF9lZGdlX2NhbGxlZSAoc3RydWN0IGNncmFwaF9lZGdlICosIHN0cnVjdCBjZ3JhcGhfbm9kZSAqKTsKKworc3RydWN0IGNncmFwaF9hc21fbm9kZSAqY2dyYXBoX2FkZF9hc21fbm9kZSAodHJlZSk7CisKK2Jvb2wgY2dyYXBoX2Z1bmN0aW9uX3Bvc3NpYmx5X2lubGluZWRfcCAodHJlZSk7Cit2b2lkIGNncmFwaF91bm5lc3Rfbm9kZSAoc3RydWN0IGNncmFwaF9ub2RlICopOworCitlbnVtIGF2YWlsYWJpbGl0eSBjZ3JhcGhfZnVuY3Rpb25fYm9keV9hdmFpbGFiaWxpdHkgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqKTsKK3ZvaWQgY2dyYXBoX2FkZF9uZXdfZnVuY3Rpb24gKHRyZWUsIGJvb2wpOworY29uc3QgY2hhciogY2dyYXBoX2lubGluZV9mYWlsZWRfc3RyaW5nIChjZ3JhcGhfaW5saW5lX2ZhaWxlZF90KTsKK3N0cnVjdCBjZ3JhcGhfbm9kZSAqIGNncmFwaF9jcmVhdGVfdmlydHVhbF9jbG9uZSAoc3RydWN0IGNncmFwaF9ub2RlICpvbGRfbm9kZSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgVkVDKGNncmFwaF9lZGdlX3AsaGVhcCkqLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICBWRUMoaXBhX3JlcGxhY2VfbWFwX3AsZ2MpKiB0cmVlX21hcCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwIGFyZ3NfdG9fc2tpcCk7CisKK3ZvaWQgY2dyYXBoX3NldF9ub3Rocm93X2ZsYWcgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqLCBib29sKTsKK3ZvaWQgY2dyYXBoX3NldF9yZWFkb25seV9mbGFnIChzdHJ1Y3QgY2dyYXBoX25vZGUgKiwgYm9vbCk7Cit2b2lkIGNncmFwaF9zZXRfcHVyZV9mbGFnIChzdHJ1Y3QgY2dyYXBoX25vZGUgKiwgYm9vbCk7Cit2b2lkIGNncmFwaF9zZXRfbG9vcGluZ19jb25zdF9vcl9wdXJlX2ZsYWcgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqLCBib29sKTsKK3RyZWUgY2xvbmVfZnVuY3Rpb25fbmFtZSAodHJlZSk7CisKKy8qIEluIGNncmFwaHVuaXQuYyAgKi8KK3ZvaWQgY2dyYXBoX2ZpbmFsaXplX2Z1bmN0aW9uICh0cmVlLCBib29sKTsKK3ZvaWQgY2dyYXBoX21hcmtfaWZfbmVlZGVkICh0cmVlKTsKK3ZvaWQgY2dyYXBoX2ZpbmFsaXplX2NvbXBpbGF0aW9uX3VuaXQgKHZvaWQpOwordm9pZCBjZ3JhcGhfb3B0aW1pemUgKHZvaWQpOwordm9pZCBjZ3JhcGhfbWFya19uZWVkZWRfbm9kZSAoc3RydWN0IGNncmFwaF9ub2RlICopOwordm9pZCBjZ3JhcGhfbWFya19hZGRyZXNzX3Rha2VuX25vZGUgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqKTsKK3ZvaWQgY2dyYXBoX21hcmtfcmVhY2hhYmxlX25vZGUgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqKTsKK2Jvb2wgY2dyYXBoX2lubGluZV9wIChzdHJ1Y3QgY2dyYXBoX2VkZ2UgKiwgY2dyYXBoX2lubGluZV9mYWlsZWRfdCAqcmVhc29uKTsKK2Jvb2wgY2dyYXBoX3ByZXNlcnZlX2Z1bmN0aW9uX2JvZHlfcCAodHJlZSk7Cit2b2lkIHZlcmlmeV9jZ3JhcGggKHZvaWQpOwordm9pZCB2ZXJpZnlfY2dyYXBoX25vZGUgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqKTsKK3ZvaWQgY2dyYXBoX2J1aWxkX3N0YXRpY19jZHRvciAoY2hhciB3aGljaCwgdHJlZSBib2R5LCBpbnQgcHJpb3JpdHkpOwordm9pZCBjZ3JhcGhfcmVzZXRfc3RhdGljX3Zhcl9tYXBzICh2b2lkKTsKK3ZvaWQgaW5pdF9jZ3JhcGggKHZvaWQpOworc3RydWN0IGNncmFwaF9ub2RlICpjZ3JhcGhfZnVuY3Rpb25fdmVyc2lvbmluZyAoc3RydWN0IGNncmFwaF9ub2RlICosCisJCQkJCQlWRUMoY2dyYXBoX2VkZ2VfcCxoZWFwKSosCisJCQkJCQlWRUMoaXBhX3JlcGxhY2VfbWFwX3AsZ2MpKiwKKwkJCQkJCWJpdG1hcCk7Cit2b2lkIHRyZWVfZnVuY3Rpb25fdmVyc2lvbmluZyAodHJlZSwgdHJlZSwgVkVDIChpcGFfcmVwbGFjZV9tYXBfcCxnYykqLCBib29sLCBiaXRtYXApOworc3RydWN0IGNncmFwaF9ub2RlICpzYXZlX2lubGluZV9mdW5jdGlvbl9ib2R5IChzdHJ1Y3QgY2dyYXBoX25vZGUgKik7Cit2b2lkIHJlY29yZF9yZWZlcmVuY2VzX2luX2luaXRpYWxpemVyICh0cmVlLCBib29sKTsKK2Jvb2wgY2dyYXBoX3Byb2Nlc3NfbmV3X2Z1bmN0aW9ucyAodm9pZCk7CisKK2Jvb2wgY2dyYXBoX2RlY2lkZV9pc19mdW5jdGlvbl9uZWVkZWQgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqLCB0cmVlKTsKKwordHlwZWRlZiB2b2lkICgqY2dyYXBoX2VkZ2VfaG9vaykoc3RydWN0IGNncmFwaF9lZGdlICosIHZvaWQgKik7Cit0eXBlZGVmIHZvaWQgKCpjZ3JhcGhfbm9kZV9ob29rKShzdHJ1Y3QgY2dyYXBoX25vZGUgKiwgdm9pZCAqKTsKK3R5cGVkZWYgdm9pZCAoKmNncmFwaF8yZWRnZV9ob29rKShzdHJ1Y3QgY2dyYXBoX2VkZ2UgKiwgc3RydWN0IGNncmFwaF9lZGdlICosCisJCQkJICB2b2lkICopOwordHlwZWRlZiB2b2lkICgqY2dyYXBoXzJub2RlX2hvb2spKHN0cnVjdCBjZ3JhcGhfbm9kZSAqLCBzdHJ1Y3QgY2dyYXBoX25vZGUgKiwKKwkJCQkgIHZvaWQgKik7CitzdHJ1Y3QgY2dyYXBoX2VkZ2VfaG9va19saXN0Oworc3RydWN0IGNncmFwaF9ub2RlX2hvb2tfbGlzdDsKK3N0cnVjdCBjZ3JhcGhfMmVkZ2VfaG9va19saXN0Oworc3RydWN0IGNncmFwaF8ybm9kZV9ob29rX2xpc3Q7CitzdHJ1Y3QgY2dyYXBoX2VkZ2VfaG9va19saXN0ICpjZ3JhcGhfYWRkX2VkZ2VfcmVtb3ZhbF9ob29rIChjZ3JhcGhfZWRnZV9ob29rLCB2b2lkICopOwordm9pZCBjZ3JhcGhfcmVtb3ZlX2VkZ2VfcmVtb3ZhbF9ob29rIChzdHJ1Y3QgY2dyYXBoX2VkZ2VfaG9va19saXN0ICopOworc3RydWN0IGNncmFwaF9ub2RlX2hvb2tfbGlzdCAqY2dyYXBoX2FkZF9ub2RlX3JlbW92YWxfaG9vayAoY2dyYXBoX25vZGVfaG9vaywKKwkJCQkJCQkgICAgdm9pZCAqKTsKK3ZvaWQgY2dyYXBoX3JlbW92ZV9ub2RlX3JlbW92YWxfaG9vayAoc3RydWN0IGNncmFwaF9ub2RlX2hvb2tfbGlzdCAqKTsKK3N0cnVjdCBjZ3JhcGhfbm9kZV9ob29rX2xpc3QgKmNncmFwaF9hZGRfZnVuY3Rpb25faW5zZXJ0aW9uX2hvb2sgKGNncmFwaF9ub2RlX2hvb2ssCisJCQkJCQkJICAgICAgICAgIHZvaWQgKik7Cit2b2lkIGNncmFwaF9yZW1vdmVfZnVuY3Rpb25faW5zZXJ0aW9uX2hvb2sgKHN0cnVjdCBjZ3JhcGhfbm9kZV9ob29rX2xpc3QgKik7Cit2b2lkIGNncmFwaF9jYWxsX2Z1bmN0aW9uX2luc2VydGlvbl9ob29rcyAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlKTsKK3N0cnVjdCBjZ3JhcGhfMmVkZ2VfaG9va19saXN0ICpjZ3JhcGhfYWRkX2VkZ2VfZHVwbGljYXRpb25faG9vayAoY2dyYXBoXzJlZGdlX2hvb2ssIHZvaWQgKik7Cit2b2lkIGNncmFwaF9yZW1vdmVfZWRnZV9kdXBsaWNhdGlvbl9ob29rIChzdHJ1Y3QgY2dyYXBoXzJlZGdlX2hvb2tfbGlzdCAqKTsKK3N0cnVjdCBjZ3JhcGhfMm5vZGVfaG9va19saXN0ICpjZ3JhcGhfYWRkX25vZGVfZHVwbGljYXRpb25faG9vayAoY2dyYXBoXzJub2RlX2hvb2ssIHZvaWQgKik7Cit2b2lkIGNncmFwaF9yZW1vdmVfbm9kZV9kdXBsaWNhdGlvbl9ob29rIChzdHJ1Y3QgY2dyYXBoXzJub2RlX2hvb2tfbGlzdCAqKTsKK3ZvaWQgY2dyYXBoX21hdGVyaWFsaXplX2FsbF9jbG9uZXMgKHZvaWQpOworZ2ltcGxlIGNncmFwaF9yZWRpcmVjdF9lZGdlX2NhbGxfc3RtdF90b19jYWxsZWUgKHN0cnVjdCBjZ3JhcGhfZWRnZSAqKTsKKy8qIEluIGNncmFwaGJ1aWxkLmMgICovCit1bnNpZ25lZCBpbnQgcmVidWlsZF9jZ3JhcGhfZWRnZXMgKHZvaWQpOwordm9pZCByZXNldF9pbmxpbmVfZmFpbGVkIChzdHJ1Y3QgY2dyYXBoX25vZGUgKik7CitpbnQgY29tcHV0ZV9jYWxsX3N0bXRfYmJfZnJlcXVlbmN5ICh0cmVlLCBiYXNpY19ibG9jayBiYik7CisKKy8qIEluIGlwYS5jICAqLworYm9vbCBjZ3JhcGhfcmVtb3ZlX3VucmVhY2hhYmxlX25vZGVzIChib29sLCBGSUxFICopOworaW50IGNncmFwaF9wb3N0b3JkZXIgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqKik7CitjZ3JhcGhfbm9kZV9zZXQgY2dyYXBoX25vZGVfc2V0X25ldyAodm9pZCk7CitjZ3JhcGhfbm9kZV9zZXRfaXRlcmF0b3IgY2dyYXBoX25vZGVfc2V0X2ZpbmQgKGNncmFwaF9ub2RlX3NldCwKKwkJCQkJICAgICAgIHN0cnVjdCBjZ3JhcGhfbm9kZSAqKTsKK3ZvaWQgY2dyYXBoX25vZGVfc2V0X2FkZCAoY2dyYXBoX25vZGVfc2V0LCBzdHJ1Y3QgY2dyYXBoX25vZGUgKik7Cit2b2lkIGNncmFwaF9ub2RlX3NldF9yZW1vdmUgKGNncmFwaF9ub2RlX3NldCwgc3RydWN0IGNncmFwaF9ub2RlICopOwordm9pZCBkdW1wX2NncmFwaF9ub2RlX3NldCAoRklMRSAqLCBjZ3JhcGhfbm9kZV9zZXQpOwordm9pZCBkZWJ1Z19jZ3JhcGhfbm9kZV9zZXQgKGNncmFwaF9ub2RlX3NldCk7CisKKworLyogSW4gcHJlZGljdC5jICAqLworYm9vbCBjZ3JhcGhfbWF5YmVfaG90X2VkZ2VfcCAoc3RydWN0IGNncmFwaF9lZGdlICplKTsKKworLyogSW4gdmFycG9vbC5jICAqLworZXh0ZXJuIEdUWSgoKSkgc3RydWN0IHZhcnBvb2xfbm9kZSAqdmFycG9vbF9ub2Rlc19xdWV1ZTsKK2V4dGVybiBHVFkoKCkpIHN0cnVjdCB2YXJwb29sX25vZGUgKnZhcnBvb2xfbm9kZXM7CisKK3N0cnVjdCB2YXJwb29sX25vZGUgKnZhcnBvb2xfbm9kZSAodHJlZSk7CitzdHJ1Y3QgdmFycG9vbF9ub2RlICp2YXJwb29sX25vZGVfZm9yX2FzbSAodHJlZSBhc21uYW1lKTsKK3ZvaWQgdmFycG9vbF9tYXJrX25lZWRlZF9ub2RlIChzdHJ1Y3QgdmFycG9vbF9ub2RlICopOwordm9pZCBkZWJ1Z192YXJwb29sICh2b2lkKTsKK3ZvaWQgZHVtcF92YXJwb29sIChGSUxFICopOwordm9pZCBkdW1wX3ZhcnBvb2xfbm9kZSAoRklMRSAqLCBzdHJ1Y3QgdmFycG9vbF9ub2RlICopOworCit2b2lkIHZhcnBvb2xfZmluYWxpemVfZGVjbCAodHJlZSk7Citib29sIGRlY2lkZV9pc192YXJpYWJsZV9uZWVkZWQgKHN0cnVjdCB2YXJwb29sX25vZGUgKiwgdHJlZSk7CitlbnVtIGF2YWlsYWJpbGl0eSBjZ3JhcGhfdmFyaWFibGVfaW5pdGlhbGl6ZXJfYXZhaWxhYmlsaXR5IChzdHJ1Y3QgdmFycG9vbF9ub2RlICopOwordm9pZCBjZ3JhcGhfbWFrZV9kZWNsX2xvY2FsICh0cmVlKTsKK3ZvaWQgY2dyYXBoX21ha2Vfbm9kZV9sb2NhbCAoc3RydWN0IGNncmFwaF9ub2RlICopOworYm9vbCBjZ3JhcGhfbm9kZV9jYW5fYmVfbG9jYWxfcCAoc3RydWN0IGNncmFwaF9ub2RlICopOworCitib29sIHZhcnBvb2xfYXNzZW1ibGVfcGVuZGluZ19kZWNscyAodm9pZCk7Citib29sIHZhcnBvb2xfYXNzZW1ibGVfZGVjbCAoc3RydWN0IHZhcnBvb2xfbm9kZSAqbm9kZSk7Citib29sIHZhcnBvb2xfYW5hbHl6ZV9wZW5kaW5nX2RlY2xzICh2b2lkKTsKK3ZvaWQgdmFycG9vbF9yZW1vdmVfdW5yZWZlcmVuY2VkX2RlY2xzICh2b2lkKTsKK3ZvaWQgdmFycG9vbF9lbXB0eV9uZWVkZWRfcXVldWUgKHZvaWQpOworYm9vbCB2YXJwb29sX2V4dHJhX25hbWVfYWxpYXMgKHRyZWUsIHRyZWUpOworY29uc3QgY2hhciAqIHZhcnBvb2xfbm9kZV9uYW1lIChzdHJ1Y3QgdmFycG9vbF9ub2RlICpub2RlKTsKKworLyogV2FsayBhbGwgcmVhY2hhYmxlIHN0YXRpYyB2YXJpYWJsZXMuICAqLworI2RlZmluZSBGT1JfRUFDSF9TVEFUSUNfVkFSSUFCTEUobm9kZSkgXAorICAgZm9yICgobm9kZSkgPSB2YXJwb29sX25vZGVzX3F1ZXVlOyAobm9kZSk7IChub2RlKSA9IChub2RlKS0+bmV4dF9uZWVkZWQpCisKKy8qIFJldHVybiBmaXJzdCByZWFjaGFibGUgc3RhdGljIHZhcmlhYmxlIHdpdGggaW5pdGlhbGl6ZXIuICAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgdmFycG9vbF9ub2RlICoKK3ZhcnBvb2xfZmlyc3Rfc3RhdGljX2luaXRpYWxpemVyICh2b2lkKQoreworICBzdHJ1Y3QgdmFycG9vbF9ub2RlICpub2RlOworICBmb3IgKG5vZGUgPSB2YXJwb29sX25vZGVzX3F1ZXVlOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dF9uZWVkZWQpCisgICAgeworICAgICAgZ2NjX2Fzc2VydCAoVFJFRV9DT0RFIChub2RlLT5kZWNsKSA9PSBWQVJfREVDTCk7CisgICAgICBpZiAoREVDTF9JTklUSUFMIChub2RlLT5kZWNsKSkKKwlyZXR1cm4gbm9kZTsKKyAgICB9CisgIHJldHVybiBOVUxMOworfQorCisvKiBSZXR1cm4gbmV4dCByZWFjaGFibGUgc3RhdGljIHZhcmlhYmxlIHdpdGggaW5pdGlhbGl6ZXIgYWZ0ZXIgTk9ERS4gICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2YXJwb29sX25vZGUgKgordmFycG9vbF9uZXh0X3N0YXRpY19pbml0aWFsaXplciAoc3RydWN0IHZhcnBvb2xfbm9kZSAqbm9kZSkKK3sKKyAgZm9yIChub2RlID0gbm9kZS0+bmV4dF9uZWVkZWQ7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0X25lZWRlZCkKKyAgICB7CisgICAgICBnY2NfYXNzZXJ0IChUUkVFX0NPREUgKG5vZGUtPmRlY2wpID09IFZBUl9ERUNMKTsKKyAgICAgIGlmIChERUNMX0lOSVRJQUwgKG5vZGUtPmRlY2wpKQorCXJldHVybiBub2RlOworICAgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIFdhbGsgYWxsIHN0YXRpYyB2YXJpYWJsZXMgd2l0aCBpbml0aWFsaXplciBzZXQuICAqLworI2RlZmluZSBGT1JfRUFDSF9TVEFUSUNfSU5JVElBTElaRVIobm9kZSkgXAorICAgZm9yICgobm9kZSkgPSB2YXJwb29sX2ZpcnN0X3N0YXRpY19pbml0aWFsaXplciAoKTsgKG5vZGUpOyBcCisgICAgICAgIChub2RlKSA9IHZhcnBvb2xfbmV4dF9zdGF0aWNfaW5pdGlhbGl6ZXIgKG5vZGUpKQorCisvKiBJbiBpcGEtaW5saW5lLmMgICovCit2b2lkIGNncmFwaF9jbG9uZV9pbmxpbmVkX25vZGVzIChzdHJ1Y3QgY2dyYXBoX2VkZ2UgKiwgYm9vbCwgYm9vbCk7Cit1bnNpZ25lZCBpbnQgY29tcHV0ZV9pbmxpbmVfcGFyYW1ldGVycyAoc3RydWN0IGNncmFwaF9ub2RlICopOworCisKKy8qIENyZWF0ZSBhIG5ldyBzdGF0aWMgdmFyaWFibGUgb2YgdHlwZSBUWVBFLiAgKi8KK3RyZWUgYWRkX25ld19zdGF0aWNfdmFyICh0cmVlIHR5cGUpOworCisvKiBsdG8tY2dyYXBoLmMgKi8KKworZW51bSBMVE9fY2dyYXBoX3RhZ3MKK3sKKyAgLyogTXVzdCBsZWF2ZSAwIGZvciB0aGUgc3RvcHBlci4gICovCisgIExUT19jZ3JhcGhfYXZhaWxfbm9kZSA9IDEsCisgIExUT19jZ3JhcGhfb3ZlcndyaXRhYmxlX25vZGUsCisgIExUT19jZ3JhcGhfdW5hdmFpbF9ub2RlLAorICBMVE9fY2dyYXBoX2VkZ2UsCisgIExUT19jZ3JhcGhfbGFzdF90YWcKK307CisKK2V4dGVybiBjb25zdCBjaGFyICogTFRPX2NncmFwaF90YWdfbmFtZXNbTFRPX2NncmFwaF9sYXN0X3RhZ107CisKKyNkZWZpbmUgTENDX05PVF9GT1VORAkoLTEpCisKKworLyogUmV0dXJuIHRydWUgaWYgaXRlcmF0b3IgQ1NJIHBvaW50cyB0byBub3RoaW5nLiAgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorY3NpX2VuZF9wIChjZ3JhcGhfbm9kZV9zZXRfaXRlcmF0b3IgY3NpKQoreworICByZXR1cm4gY3NpLmluZGV4ID49IFZFQ19sZW5ndGggKGNncmFwaF9ub2RlX3B0ciwgY3NpLnNldC0+bm9kZXMpOworfQorCisvKiBBZHZhbmNlIGl0ZXJhdG9yIENTSS4gICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2NzaV9uZXh0IChjZ3JhcGhfbm9kZV9zZXRfaXRlcmF0b3IgKmNzaSkKK3sKKyAgY3NpLT5pbmRleCsrOworfQorCisvKiBSZXR1cm4gdGhlIG5vZGUgcG9pbnRlZCB0byBieSBDU0kuICAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2dyYXBoX25vZGUgKgorY3NpX25vZGUgKGNncmFwaF9ub2RlX3NldF9pdGVyYXRvciBjc2kpCit7CisgIHJldHVybiBWRUNfaW5kZXggKGNncmFwaF9ub2RlX3B0ciwgY3NpLnNldC0+bm9kZXMsIGNzaS5pbmRleCk7Cit9CisKKy8qIFJldHVybiBhbiBpdGVyYXRvciB0byB0aGUgZmlyc3Qgbm9kZSBpbiBTRVQuICAqLworc3RhdGljIGlubGluZSBjZ3JhcGhfbm9kZV9zZXRfaXRlcmF0b3IKK2NzaV9zdGFydCAoY2dyYXBoX25vZGVfc2V0IHNldCkKK3sKKyAgY2dyYXBoX25vZGVfc2V0X2l0ZXJhdG9yIGNzaTsKKworICBjc2kuc2V0ID0gc2V0OworICBjc2kuaW5kZXggPSAwOworICByZXR1cm4gY3NpOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBTRVQgY29udGFpbnMgTk9ERS4gICovCitzdGF0aWMgaW5saW5lIGJvb2wKK2NncmFwaF9ub2RlX2luX3NldF9wIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUsIGNncmFwaF9ub2RlX3NldCBzZXQpCit7CisgIGNncmFwaF9ub2RlX3NldF9pdGVyYXRvciBjc2k7CisgIGNzaSA9IGNncmFwaF9ub2RlX3NldF9maW5kIChzZXQsIG5vZGUpOworICByZXR1cm4gIWNzaV9lbmRfcCAoY3NpKTsKK30KKworLyogUmV0dXJuIG51bWJlciBvZiBub2RlcyBpbiBTRVQuICAqLworc3RhdGljIGlubGluZSBzaXplX3QKK2NncmFwaF9ub2RlX3NldF9zaXplIChjZ3JhcGhfbm9kZV9zZXQgc2V0KQoreworICByZXR1cm4gaHRhYl9lbGVtZW50cyAoc2V0LT5oYXNodGFiKTsKK30KKworLyogVW5pcXVpemUgYWxsIGNvbnN0YW50cyB0aGF0IGFwcGVhciBpbiBtZW1vcnkuCisgICBFYWNoIGNvbnN0YW50IGluIG1lbW9yeSB0aHVzIGZhciBvdXRwdXQgaXMgcmVjb3JkZWQKKyAgIGluIGBjb25zdF9kZXNjX3RhYmxlJy4gICovCisKK3N0cnVjdCBHVFkoKCkpIGNvbnN0YW50X2Rlc2NyaXB0b3JfdHJlZSB7CisgIC8qIEEgTUVNIGZvciB0aGUgY29uc3RhbnQuICAqLworICBydHggcnRsOworCisgIC8qIFRoZSB2YWx1ZSBvZiB0aGUgY29uc3RhbnQuICAqLworICB0cmVlIHZhbHVlOworCisgIC8qIEhhc2ggb2YgdmFsdWUuICBDb21wdXRpbmcgdGhlIGhhc2ggZnJvbSB2YWx1ZSBlYWNoIHRpbWUKKyAgICAgaGFzaGZuIGlzIGNhbGxlZCBjYW4ndCB3b3JrIHByb3Blcmx5LCBhcyB0aGF0IG1lYW5zIHJlY3Vyc2l2ZQorICAgICB1c2Ugb2YgdGhlIGhhc2ggdGFibGUgZHVyaW5nIGhhc2ggdGFibGUgZXhwYW5zaW9uLiAgKi8KKyAgaGFzaHZhbF90IGhhc2g7Cit9OworCisvKiBSZXR1cm4gdHJ1ZSB3aGVuIGZ1bmN0aW9uIE5PREUgaXMgb25seSBjYWxsZWQgZGlyZWN0bHkuCisgICBpLmUuIGl0IGlzIG5vdCBleHRlcm5hbGx5IHZpc2libGUsIGFkZHJlc3Mgd2FzIG5vdCB0YWtlbiBhbmQKKyAgIGl0IGlzIG5vdCB1c2VkIGluIGFueSBvdGhlciBub24tc3RhbmRhcmQgd2F5LiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitjZ3JhcGhfb25seV9jYWxsZWRfZGlyZWN0bHlfcCAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlKQoreworICByZXR1cm4gIW5vZGUtPm5lZWRlZCAmJiAhbm9kZS0+bG9jYWwuZXh0ZXJuYWxseV92aXNpYmxlOworfQorCisvKiBSZXR1cm4gdHJ1ZSB3aGVuIGZ1bmN0aW9uIE5PREUgY2FuIGJlIHJlbW92ZWQgZnJvbSBjYWxsZ3JhcGgKKyAgIGlmIGFsbCBkaXJlY3QgY2FsbHMgYXJlIGVsaW1pbmF0ZWQuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2NncmFwaF9jYW5fcmVtb3ZlX2lmX25vX2RpcmVjdF9jYWxsc19wIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUpCit7CisgIHJldHVybiAoIW5vZGUtPm5lZWRlZAorICAJICAmJiAoREVDTF9DT01EQVQgKG5vZGUtPmRlY2wpIHx8ICFub2RlLT5sb2NhbC5leHRlcm5hbGx5X3Zpc2libGUpKTsKK30KKworLyogQ29uc3RhbnQgcG9vbCBhY2Nlc3NvciBmdW5jdGlvbi4gICovCitodGFiX3QgY29uc3RhbnRfcG9vbF9odGFiICh2b2lkKTsKKworI2VuZGlmICAvKiBHQ0NfQ0dSQVBIX0ggICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvY2lmLWNvZGUuZGVmIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NpZi1jb2RlLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGU2M2I2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NpZi1jb2RlLmRlZgpAQCAtMCwwICsxLDg2IEBACisvKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIG9mIHRoZSBjZ3JhcGhfaW5saW5lX2ZhaWxlZF90CisgICBlbnVtcyB1c2VkIGluIEdDQy4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgRG91ZyBLd2FuIDxkb3Vna3dhbkBnb29nbGUuY29tPgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uIGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWSB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBUaGUgZm9ybWF0IG9mIHRoaXMgZmlsZSBpcworICAgREVGQ0lGQ09ERShjb2RlLCBzdHJpbmcpLgorCisgICBXaGVyZSBzeW1ib2wgaXMgdGhlIGVudW1lcmF0aW9uIG5hbWUgd2l0aG91dCB0aGUgYGAnJy4KKyAgIFRoZSBhcmd1bWVudCBTVFJJTkcgaXMgYSBleHBsYWluIHRoZSBmYWlsdXJlLiAgRXhjZXB0IGZvciBPSywKKyAgIHdoaWNoIGlzIGEgTlVMTCBwb2ludGVyLiAgKi8KKworLyogSW5saW5pbmcgc3VjY2Vzc2Z1bC4gIFRoaXMgbXVzdCBiZSB0aGUgZmlyc3QgY29kZS4gICovCitERUZDSUZDT0RFKE9LICwgTlVMTCkKKworLyogSW5saW5pbmcgZmFpbGVkIGZvciBhbiB1bnNwZWNpZmllZCByZWFzb24uICAqLworREVGQ0lGQ09ERShVTlNQRUNJRklFRCAsICIiKQorCisvKiBGdW5jdGlvbiBoYXMgbm90IGJlIGNvbnNpZGVyZWQgZm9yIGlubGluaW5nLiAgVGhpcyBpcyB0aGUgY29kZSBmb3IKKyAgIGZ1bmN0aW9ucyB0aGF0IGhhdmUgbm90IGJlZW4gcmVqZWN0ZWQgZm9yIGlubGluaW5nIHlldC4gICovCitERUZDSUZDT0RFKEZVTkNUSU9OX05PVF9DT05TSURFUkVELAorCSAgIE5fKCJmdW5jdGlvbiBub3QgY29uc2lkZXJlZCBmb3IgaW5saW5pbmciKSkKKworLyogSW5saW5pbmcgZmFpbGVkIG93aW5nIHRvIHVuYXZhaWxhYmxlIGZ1bmN0aW9uIGJvZHkuICAqLworREVGQ0lGQ09ERShCT0RZX05PVF9BVkFJTEFCTEUsIE5fKCJmdW5jdGlvbiBib2R5IG5vdCBhdmFpbGFibGUiKSkKKworREVGQ0lGQ09ERShSRURFRklORURfRVhURVJOX0lOTElORSwKKyAgICAgICAgICAgTl8oInJlZGVmaW5lZCBleHRlcm4gaW5saW5lIGZ1bmN0aW9ucyBhcmUgbm90IGNvbnNpZGVyZWQgZm9yICIKKyAgICAgICAgICAgICAgImlubGluaW5nIikpCisKKy8qIEZ1bmN0aW9uIGlzIG5vdCBpbmxpbmFibGUuICAqLworREVGQ0lGQ09ERShGVU5DVElPTl9OT1RfSU5MSU5BQkxFLCBOXygiZnVuY3Rpb24gbm90IGlubGluYWJsZSIpKQorCisvKiBGdW5jdGlvbiBpcyBub3QgYW4gaW5saW5pbmcgY2FuZGlkYXRlLiAgKi8KK0RFRkNJRkNPREUoRlVOQ1RJT05fTk9UX0lOTElORV9DQU5ESURBVEUsIE5fKCJmdW5jdGlvbiBub3QgaW5saW5lIGNhbmRpZGF0ZSIpKQorCisvKiBJbmxpbmluZyBmYWlsZWQgYmVjYXVzZSBvZiB2YXJpb3VzIGxpbWl0IHBhcmFtZXRlcnMuICAqLworREVGQ0lGQ09ERShMQVJHRV9GVU5DVElPTl9HUk9XVEhfTElNSVQsCisJICAgTl8oIi0tcGFyYW0gbGFyZ2UtZnVuY3Rpb24tZ3Jvd3RoIGxpbWl0IHJlYWNoZWQiKSkKK0RFRkNJRkNPREUoTEFSR0VfU1RBQ0tfRlJBTUVfR1JPV1RIX0xJTUlULAorCSAgIE5fKCItLXBhcmFtIGxhcmdlLXN0YWNrLWZyYW1lLWdyb3d0aCBsaW1pdCByZWFjaGVkIikpCitERUZDSUZDT0RFKE1BWF9JTkxJTkVfSU5TTlNfU0lOR0xFX0xJTUlULAorCSAgIE5fKCItLXBhcmFtIG1heC1pbmxpbmUtaW5zbnMtc2luZ2xlIGxpbWl0IHJlYWNoZWQiKSkKK0RFRkNJRkNPREUoTUFYX0lOTElORV9JTlNOU19BVVRPX0xJTUlULAorCSAgIE5fKCItLXBhcmFtIG1heC1pbmxpbmUtaW5zbnMtYXV0byBsaW1pdCByZWFjaGVkIikpCitERUZDSUZDT0RFKElOTElORV9VTklUX0dST1dUSF9MSU1JVCwKKwkgICBOXygiLS1wYXJhbSBpbmxpbmUtdW5pdC1ncm93dGggbGltaXQgcmVhY2hlZCIpKQorCisvKiBSZWN1cnNpdmUgaW5saW5pbmcuICAqLworREVGQ0lGQ09ERShSRUNVUlNJVkVfSU5MSU5JTkcsIE5fKCJyZWN1cnNpdmUgaW5saW5pbmciKSkKKworLyogQ2FsbCBpcyB1bmxpa2VseS4gICovCitERUZDSUZDT0RFKFVOTElLRUxZX0NBTEwsIE5fKCJjYWxsIGlzIHVubGlrZWx5IGFuZCBjb2RlIHNpemUgd291bGQgZ3JvdyIpKQorCisvKiBGdW5jdGlvbiBpcyBub3QgZGVjbGFyZWQgYXMgYW4gaW5saW5lLiAgKi8KK0RFRkNJRkNPREUoTk9UX0RFQ0xBUkVEX0lOTElORUQsCisJICAgTl8oImZ1bmN0aW9uIG5vdCBkZWNsYXJlZCBpbmxpbmUgYW5kIGNvZGUgc2l6ZSB3b3VsZCBncm93IikpCisKKy8qIElubGluaW5nIHN1cHByZXNzZWQgZHVlIHRvIHNpemUgb3B0aW1pemF0aW9uLiAgKi8KK0RFRkNJRkNPREUoT1BUSU1JWklOR19GT1JfU0laRSwKKwkgICBOXygib3B0aW1pemluZyBmb3Igc2l6ZSBhbmQgY29kZSBzaXplIHdvdWxkIGdyb3ciKSkKKworLyogSW5saW5pbmcgZmFpbGVkIGJlY2F1c2Ugb2YgbWlzbWF0Y2hlZCBvcHRpb25zIG9yIGFyZ3VtZW50cy4gICovCitERUZDSUZDT0RFKFRBUkdFVF9PUFRJT05fTUlTTUFUQ0gsIE5fKCJ0YXJnZXQgc3BlY2lmaWMgb3B0aW9uIG1pc21hdGNoIikpCitERUZDSUZDT0RFKE1JU01BVENIRURfQVJHVU1FTlRTLCBOXygibWlzbWF0Y2hlZCBhcmd1bWVudHMiKSkKKworLyogQ2FsbCB3YXMgb3JpZ2luYWxseSBpbmRpcmVjdC4gICovCitERUZDSUZDT0RFKE9SSUdJTkFMTFlfSU5ESVJFQ1RfQ0FMTCwKKwkgICBOXygib3JpZ2luYWxseSBpbmRpcmVjdCBmdW5jdGlvbiBjYWxsIG5vdCBjb25zaWRlcmVkIGZvciBpbmxpbmluZyIpKQpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NvbmZpZy5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNmRkNmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvY29uZmlnLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBHQ0NfQ09ORklHX0gKKyNkZWZpbmUgR0NDX0NPTkZJR19ICisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKKyNlcnJvciBjb25maWcuaCBpcyBmb3IgdGhlIGhvc3QsIG5vdCBidWlsZCwgbWFjaGluZS4KKyNlbmRpZgorI2luY2x1ZGUgImF1dG8taG9zdC5oIgorI2lmZGVmIElOX0dDQworIyBpbmNsdWRlICJhbnNpZGVjbC5oIgorI2VuZGlmCisjZW5kaWYgLyogR0NDX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvY29uZmlnL2FybS9hb3V0LmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvY29uZmlnL2FybS9hb3V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFiYWQ2NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvYXJtL2FvdXQuaApAQCAtMCwwICsxLDM2NiBAQAorLyogRGVmaW5pdGlvbnMgb2YgdGFyZ2V0IG1hY2hpbmUgZm9yIEdOVSBjb21waWxlciwgZm9yIEFSTSB3aXRoIGEub3V0CisgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDQsIDIwMDcsIDIwMDgKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgUmljaGFyZCBFYXJuc2hhdyAocmVhcm5zaGFAYXJtbHRkLmNvLnVrKS4KKyAgIAorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyCisgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgQVNNX0FQUF9PTgorI2RlZmluZSBBU01fQVBQX09OICAJCSIiCisjZW5kaWYKKyNpZm5kZWYgQVNNX0FQUF9PRkYKKyNkZWZpbmUgQVNNX0FQUF9PRkYgIAkJIiIKKyNlbmRpZgorCisvKiBTd2l0Y2ggdG8gdGhlIHRleHQgb3IgZGF0YSBzZWdtZW50LiAgKi8KKyNkZWZpbmUgVEVYVF9TRUNUSU9OX0FTTV9PUCAgCSJcdC50ZXh0IgorI2RlZmluZSBEQVRBX1NFQ1RJT05fQVNNX09QICAJIlx0LmRhdGEiCisjZGVmaW5lIEJTU19TRUNUSU9OX0FTTV9PUCAgIAkiXHQuYnNzIgorCisvKiBOb3RlOiBJZiBVU0VSX0xBQkVMX1BSRUZJWCBvciBMT0NBTF9MQUJFTF9QUkVGSVggYXJlIGNoYW5nZWQsCisgICBtYWtlIHN1cmUgdGhhdCB0aGlzIGNoYW5nZSBpcyByZWZsZWN0ZWQgaW4gdGhlIGZ1bmN0aW9uCisgICBjb2ZmX2FybV9pc19sb2NhbF9sYWJlbF9uYW1lKCkgaW4gYmZkL2NvZmYtYXJtLmMuICAqLworI2lmbmRlZiBSRUdJU1RFUl9QUkVGSVgKKyNkZWZpbmUgUkVHSVNURVJfUFJFRklYIAkiIgorI2VuZGlmCisKKyNpZm5kZWYgVVNFUl9MQUJFTF9QUkVGSVgKKyNkZWZpbmUgVVNFUl9MQUJFTF9QUkVGSVggCSJfIgorI2VuZGlmCisKKyNpZm5kZWYgTE9DQUxfTEFCRUxfUFJFRklYCisjZGVmaW5lIExPQ0FMX0xBQkVMX1BSRUZJWCAJIiIKKyNlbmRpZgorCisvKiBUaGUgYXNzZW1ibGVyJ3MgbmFtZXMgZm9yIHRoZSByZWdpc3RlcnMuICBOb3RlIHRoYXQgdGhlID94eCByZWdpc3RlcnMgYXJlCisgICB0aGVyZSBzbyB0aGF0IFZGUHYzL05FT04gcmVnaXN0ZXJzIEQxNi1EMzEgaGF2ZSB0aGUgc2FtZSBzcGFjaW5nIGFzIEQwLUQxNQorICAgKGVhY2ggb2Ygd2hpY2ggaXMgb3ZlcmxhaWQgb24gdHdvIFMgcmVnaXN0ZXJzKSwgYWx0aG91Z2ggdGhlcmUgYXJlIG5vCisgICBhY3R1YWwgc2luZ2xlLXByZWNpc2lvbiByZWdpc3RlcnMgd2hpY2ggY29ycmVzcG9uZCB0byBEMTYtRDMxLiAgKi8KKyNpZm5kZWYgUkVHSVNURVJfTkFNRVMKKyNkZWZpbmUgUkVHSVNURVJfTkFNRVMJCQkJICAgXAorewkJCQkgICAgICAgICAgICAgICAgICAgXAorICAicjAiLCAicjEiLCAicjIiLCAicjMiLCAicjQiLCAicjUiLCAicjYiLCAicjciLCAgXAorICAicjgiLCAicjkiLCAic2wiLCAiZnAiLCAiaXAiLCAic3AiLCAibHIiLCAicGMiLCAgXAorICAiZjAiLCAiZjEiLCAiZjIiLCAiZjMiLCAiZjQiLCAiZjUiLCAiZjYiLCAiZjciLCAgXAorICAiY2MiLCAic2ZwIiwgImFmcCIsCQkgICAJCSAgIFwKKyAgIm12MCIsICAgIm12MSIsICAgIm12MiIsICAgIm12MyIsCQkgICBcCisgICJtdjQiLCAgICJtdjUiLCAgICJtdjYiLCAgICJtdjciLAkJICAgXAorICAibXY4IiwgICAibXY5IiwgICAibXYxMCIsICAibXYxMSIsCQkgICBcCisgICJtdjEyIiwgICJtdjEzIiwgICJtdjE0IiwgICJtdjE1IiwJCSAgIFwKKyAgIndjZ3IwIiwgIndjZ3IxIiwgIndjZ3IyIiwgIndjZ3IzIiwJCSAgIFwKKyAgIndyMCIsICAgIndyMSIsICAgIndyMiIsICAgIndyMyIsCQkgICBcCisgICJ3cjQiLCAgICJ3cjUiLCAgICJ3cjYiLCAgICJ3cjciLAkJICAgXAorICAid3I4IiwgICAid3I5IiwgICAid3IxMCIsICAid3IxMSIsCQkgICBcCisgICJ3cjEyIiwgICJ3cjEzIiwgICJ3cjE0IiwgICJ3cjE1IiwJCSAgIFwKKyAgInMwIiwgICJzMSIsICAiczIiLCAgInMzIiwgICJzNCIsICAiczUiLCAgInM2IiwgICJzNyIsICBcCisgICJzOCIsICAiczkiLCAgInMxMCIsICJzMTEiLCAiczEyIiwgInMxMyIsICJzMTQiLCAiczE1IiwgXAorICAiczE2IiwgInMxNyIsICJzMTgiLCAiczE5IiwgInMyMCIsICJzMjEiLCAiczIyIiwgInMyMyIsIFwKKyAgInMyNCIsICJzMjUiLCAiczI2IiwgInMyNyIsICJzMjgiLCAiczI5IiwgInMzMCIsICJzMzEiLCBcCisgICJkMTYiLCAiPzE2IiwgImQxNyIsICI/MTciLCAiZDE4IiwgIj8xOCIsICJkMTkiLCAiPzE5IiwgXAorICAiZDIwIiwgIj8yMCIsICJkMjEiLCAiPzIxIiwgImQyMiIsICI/MjIiLCAiZDIzIiwgIj8yMyIsIFwKKyAgImQyNCIsICI/MjQiLCAiZDI1IiwgIj8yNSIsICJkMjYiLCAiPzI2IiwgImQyNyIsICI/MjciLCBcCisgICJkMjgiLCAiPzI4IiwgImQyOSIsICI/MjkiLCAiZDMwIiwgIj8zMCIsICJkMzEiLCAiPzMxIiwgXAorICAidmZwY2MiCQkJCQkgICBcCit9CisjZW5kaWYKKworI2lmbmRlZiBBRERJVElPTkFMX1JFR0lTVEVSX05BTUVTCisjZGVmaW5lIEFERElUSU9OQUxfUkVHSVNURVJfTkFNRVMJCVwKK3sJCQkJCQlcCisgIHsiYTEiLCAwfSwJCQkJCVwKKyAgeyJhMiIsIDF9LAkJCQkJXAorICB7ImEzIiwgMn0sCQkJCQlcCisgIHsiYTQiLCAzfSwJCQkJCVwKKyAgeyJ2MSIsIDR9LAkJCQkJXAorICB7InYyIiwgNX0sCQkJCQlcCisgIHsidjMiLCA2fSwJCQkJCVwKKyAgeyJ2NCIsIDd9LAkJCQkJXAorICB7InY1IiwgOH0sCQkJCQlcCisgIHsidjYiLCA5fSwJCQkJCVwKKyAgeyJyZnAiLCA5fSwgLyogR2NjIHVzZWQgdG8gY2FsbCBpdCB0aGlzICovCVwKKyAgeyJzYiIsIDl9LAkJCQkJXAorICB7InY3IiwgMTB9LAkJCQkJXAorICB7InIxMCIsIDEwfSwJLyogc2wgKi8JCQlcCisgIHsicjExIiwgMTF9LAkvKiBmcCAqLwkJCVwKKyAgeyJyMTIiLCAxMn0sCS8qIGlwICovCQkJXAorICB7InIxMyIsIDEzfSwJLyogc3AgKi8JCQlcCisgIHsicjE0IiwgMTR9LAkvKiBsciAqLwkJCVwKKyAgeyJyMTUiLCAxNX0sCS8qIHBjICovCQkJXAorICB7Im12ZjAiLCAyN30sCQkJCQlcCisgIHsibXZmMSIsIDI4fSwJCQkJCVwKKyAgeyJtdmYyIiwgMjl9LAkJCQkJXAorICB7Im12ZjMiLCAzMH0sCQkJCQlcCisgIHsibXZmNCIsIDMxfSwJCQkJCVwKKyAgeyJtdmY1IiwgMzJ9LAkJCQkJXAorICB7Im12ZjYiLCAzM30sCQkJCQlcCisgIHsibXZmNyIsIDM0fSwJCQkJCVwKKyAgeyJtdmY4IiwgMzV9LAkJCQkJXAorICB7Im12ZjkiLCAzNn0sCQkJCQlcCisgIHsibXZmMTAiLCAzN30sCQkJCVwKKyAgeyJtdmYxMSIsIDM4fSwJCQkJXAorICB7Im12ZjEyIiwgMzl9LAkJCQlcCisgIHsibXZmMTMiLCA0MH0sCQkJCVwKKyAgeyJtdmYxNCIsIDQxfSwJCQkJXAorICB7Im12ZjE1IiwgNDJ9LAkJCQlcCisgIHsibXZkMCIsIDI3fSwJCQkJCVwKKyAgeyJtdmQxIiwgMjh9LAkJCQkJXAorICB7Im12ZDIiLCAyOX0sCQkJCQlcCisgIHsibXZkMyIsIDMwfSwJCQkJCVwKKyAgeyJtdmQ0IiwgMzF9LAkJCQkJXAorICB7Im12ZDUiLCAzMn0sCQkJCQlcCisgIHsibXZkNiIsIDMzfSwJCQkJCVwKKyAgeyJtdmQ3IiwgMzR9LAkJCQkJXAorICB7Im12ZDgiLCAzNX0sCQkJCQlcCisgIHsibXZkOSIsIDM2fSwJCQkJCVwKKyAgeyJtdmQxMCIsIDM3fSwJCQkJXAorICB7Im12ZDExIiwgMzh9LAkJCQlcCisgIHsibXZkMTIiLCAzOX0sCQkJCVwKKyAgeyJtdmQxMyIsIDQwfSwJCQkJXAorICB7Im12ZDE0IiwgNDF9LAkJCQlcCisgIHsibXZkMTUiLCA0Mn0sCQkJCVwKKyAgeyJtdmZ4MCIsIDI3fSwJCQkJXAorICB7Im12ZngxIiwgMjh9LAkJCQlcCisgIHsibXZmeDIiLCAyOX0sCQkJCVwKKyAgeyJtdmZ4MyIsIDMwfSwJCQkJXAorICB7Im12Zng0IiwgMzF9LAkJCQlcCisgIHsibXZmeDUiLCAzMn0sCQkJCVwKKyAgeyJtdmZ4NiIsIDMzfSwJCQkJXAorICB7Im12Zng3IiwgMzR9LAkJCQlcCisgIHsibXZmeDgiLCAzNX0sCQkJCVwKKyAgeyJtdmZ4OSIsIDM2fSwJCQkJXAorICB7Im12ZngxMCIsIDM3fSwJCQkJXAorICB7Im12ZngxMSIsIDM4fSwJCQkJXAorICB7Im12ZngxMiIsIDM5fSwJCQkJXAorICB7Im12ZngxMyIsIDQwfSwJCQkJXAorICB7Im12ZngxNCIsIDQxfSwJCQkJXAorICB7Im12ZngxNSIsIDQyfSwJCQkJXAorICB7Im12ZHgwIiwgMjd9LAkJCQlcCisgIHsibXZkeDEiLCAyOH0sCQkJCVwKKyAgeyJtdmR4MiIsIDI5fSwJCQkJXAorICB7Im12ZHgzIiwgMzB9LAkJCQlcCisgIHsibXZkeDQiLCAzMX0sCQkJCVwKKyAgeyJtdmR4NSIsIDMyfSwJCQkJXAorICB7Im12ZHg2IiwgMzN9LAkJCQlcCisgIHsibXZkeDciLCAzNH0sCQkJCVwKKyAgeyJtdmR4OCIsIDM1fSwJCQkJXAorICB7Im12ZHg5IiwgMzZ9LAkJCQlcCisgIHsibXZkeDEwIiwgMzd9LAkJCQlcCisgIHsibXZkeDExIiwgMzh9LAkJCQlcCisgIHsibXZkeDEyIiwgMzl9LAkJCQlcCisgIHsibXZkeDEzIiwgNDB9LAkJCQlcCisgIHsibXZkeDE0IiwgNDF9LAkJCQlcCisgIHsibXZkeDE1IiwgNDJ9LAkJCQlcCisgIHsiZDAiLCA2M30sIHsicTAiLCA2M30sCQkJXAorICB7ImQxIiwgNjV9LAkJCQkJXAorICB7ImQyIiwgNjd9LCB7InExIiwgNjd9LAkJCVwKKyAgeyJkMyIsIDY5fSwJCQkJCVwKKyAgeyJkNCIsIDcxfSwgeyJxMiIsIDcxfSwJCQlcCisgIHsiZDUiLCA3M30sCQkJCQlcCisgIHsiZDYiLCA3NX0sIHsicTMiLCA3NX0sCQkJXAorICB7ImQ3IiwgNzd9LAkJCQkJXAorICB7ImQ4IiwgNzl9LCB7InE0IiwgNzl9LAkJCVwKKyAgeyJkOSIsIDgxfSwJCQkJCVwKKyAgeyJkMTAiLCA4M30sIHsicTUiLCA4M30sCQkJXAorICB7ImQxMSIsIDg1fSwJCQkJCVwKKyAgeyJkMTIiLCA4N30sIHsicTYiLCA4N30sCQkJXAorICB7ImQxMyIsIDg5fSwJCQkJCVwKKyAgeyJkMTQiLCA5MX0sIHsicTciLCA5MX0sCQkJXAorICB7ImQxNSIsIDkzfSwJCQkJCVwKKyAgeyJxOCIsIDk1fSwJCQkJCVwKKyAgeyJxOSIsIDk5fSwJCQkJCVwKKyAgeyJxMTAiLCAxMDN9LAkJCQkJXAorICB7InExMSIsIDEwN30sCQkJCQlcCisgIHsicTEyIiwgMTExfSwJCQkJCVwKKyAgeyJxMTMiLCAxMTV9LAkJCQkJXAorICB7InExNCIsIDExOX0sCQkJCQlcCisgIHsicTE1IiwgMTIzfQkJCQkJXAorfQorI2VuZGlmCisKKyNpZm5kZWYgTk9fRE9MTEFSX0lOX0xBQkVMCisjZGVmaW5lIE5PX0RPTExBUl9JTl9MQUJFTCAxCisjZW5kaWYKKworLyogR2VuZXJhdGUgREJYIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4gIHJpc2NpeC5oIHdpbGwgdW5kZWZpbmUgdGhpcyBiZWNhdXNlCisgICB0aGUgbmF0aXZlIGFzc2VtYmxlciBkb2VzIG5vdCBzdXBwb3J0IHN0YWJzLiAgKi8KKyNkZWZpbmUgREJYX0RFQlVHR0lOR19JTkZPIDEKKworLyogQWNvcm4gZGJ4IG1vYW5zIGFib3V0IGNvbnRpbnVhdGlvbiBjaGFycywgc28gZG9uJ3QgdXNlIGFueS4gICovCisjaWZuZGVmIERCWF9DT05USU5fTEVOR1RICisjZGVmaW5lIERCWF9DT05USU5fTEVOR1RIICAwCisjZW5kaWYKKworLyogT3V0cHV0IGEgZnVuY3Rpb24gbGFiZWwgZGVmaW5pdGlvbi4gICovCisjaWZuZGVmIEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUKKyNkZWZpbmUgQVNNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRShTVFJFQU0sIE5BTUUsIERFQ0wpCVwKKyAgZG8JCQkJCQkJXAorICAgIHsJCQkJCQkJXAorICAgICAgQVJNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRSAoU1RSRUFNLCBOQU1FLCBERUNMKTsgICBcCisgICAgICBBU01fT1VUUFVUX0xBQkVMIChTVFJFQU0sIE5BTUUpOwkJCVwKKyAgICB9CQkJCQkJCVwKKyAgd2hpbGUgKDApCisjZW5kaWYKKworLyogR2xvYmFsaXppbmcgZGlyZWN0aXZlIGZvciBhIGxhYmVsLiAgKi8KKyNkZWZpbmUgR0xPQkFMX0FTTV9PUCAiXHQuZ2xvYmFsXHQiCisKKy8qIE1ha2UgYW4gaW50ZXJuYWwgbGFiZWwgaW50byBhIHN0cmluZy4gICovCisjaWZuZGVmIEFTTV9HRU5FUkFURV9JTlRFUk5BTF9MQUJFTAorI2RlZmluZSBBU01fR0VORVJBVEVfSU5URVJOQUxfTEFCRUwoU1RSSU5HLCBQUkVGSVgsIE5VTSkgIFwKKyAgc3ByaW50ZiAoU1RSSU5HLCAiKiVzJXMldSIsIExPQ0FMX0xBQkVMX1BSRUZJWCwgUFJFRklYLCAodW5zaWduZWQgaW50KShOVU0pKQorI2VuZGlmCisgICAgIAorLyogT3V0cHV0IGFuIGVsZW1lbnQgb2YgYSBkaXNwYXRjaCB0YWJsZS4gICovCisjZGVmaW5lIEFTTV9PVVRQVVRfQUREUl9WRUNfRUxUKFNUUkVBTSwgVkFMVUUpCQkJXAorICBkbwkJCQkJCQkJXAorICAgIHsJCQkJCQkJCVwKKyAgICAgIGdjY19hc3NlcnQgKCFUQVJHRVRfVEhVTUIyKTsJCQkJXAorICAgICAgYXNtX2ZwcmludGYgKFNUUkVBTSwgIlx0LndvcmRcdCVMTCVkXG4iLCBWQUxVRSk7CQlcCisgICAgfQkJCQkJCQkJXAorICB3aGlsZSAoMCkKKwkgIAorCisvKiBUaHVtYi0yIGFsd2F5cyB1c2VzIGFkZHJfZGlmZl9lbGYgc28gdGhhdCB0aGUgVGFibGUgQnJhbmNoIGluc3RydWN0aW9ucworICAgY2FuIGJlIHVzZWQuICBGb3Igbm9uLXBpYyBjb2RlIHdoZXJlIHRoZSBvZmZzZXRzIGRvIG5vdCBzdWl0YWJsZSBmb3IKKyAgIFRCQi9UQkggdGhlIGVsZW1lbnRzIGFyZSBvdXRwdXQgYXMgYWJzb2x1dGUgbGFiZWxzLiAgKi8KKyNkZWZpbmUgQVNNX09VVFBVVF9BRERSX0RJRkZfRUxUKFNUUkVBTSwgQk9EWSwgVkFMVUUsIFJFTCkJCVwKKyAgZG8JCQkJCQkJCQlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIGlmIChUQVJHRVRfQVJNKQkJCQkJCQlcCisJYXNtX2ZwcmludGYgKFNUUkVBTSwgIlx0Ylx0JUxMJWRcbiIsIFZBTFVFKTsJCQlcCisgICAgICBlbHNlIGlmIChUQVJHRVRfVEhVTUIxKQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJICBpZiAoZmxhZ19waWMgfHwgb3B0aW1pemVfc2l6ZSkJCQkJXAorCSAgICB7CQkJCQkJCQlcCisJICAgICAgc3dpdGNoIChHRVRfTU9ERShib2R5KSkJCQkJCVwKKwkJewkJCQkJCQlcCisJCWNhc2UgUUltb2RlOgkJCQkJCVwKKwkJICBhc21fZnByaW50ZiAoU1RSRUFNLCAiXHQuYnl0ZVx0KCVMTCVkLSVMTCVkKS8yXG4iLAlcCisJCQkgICAgICAgVkFMVUUsIFJFTCk7CQkJCVwKKwkJICBicmVhazsJCQkJCQlcCisJCWNhc2UgSEltb2RlOiAvKiBUQkggKi8JCQkJCVwKKwkJICBhc21fZnByaW50ZiAoU1RSRUFNLCAiXHQuMmJ5dGVcdCglTEwlZC0lTEwlZCkvMlxuIiwJXAorCQkJICAgICAgIFZBTFVFLCBSRUwpOwkJCQlcCisJCSAgYnJlYWs7CQkJCQkJXAorCQljYXNlIFNJbW9kZToJCQkJCQlcCisJCSAgYXNtX2ZwcmludGYgKFNUUkVBTSwgIlx0LndvcmRcdCVMTCVkLSVMTCVkXG4iLAlcCisJCQkgICAgICAgVkFMVUUsIFJFTCk7CQkJCVwKKwkJICBicmVhazsJCQkJCQlcCisJCWRlZmF1bHQ6CQkJCQkJXAorCQkgIGdjY191bnJlYWNoYWJsZSgpOwkJCQkJXAorCQl9CQkJCQkJCVwKKwkgICAgfQkJCQkJCQkJXAorCSAgZWxzZQkJCQkJCQkJXAorCSAgICBhc21fZnByaW50ZiAoU1RSRUFNLCAiXHQud29yZFx0JUxMJWQrMVxuIiwgVkFMVUUpOwkJXAorCX0JCQkJCQkJCVwKKyAgICAgIGVsc2UgLyogVGh1bWItMiAqLwkJCQkJCVwKKwl7CQkJCQkJCQlcCisJICBzd2l0Y2ggKEdFVF9NT0RFKGJvZHkpKQkJCQkJXAorCSAgICB7CQkJCQkJCQlcCisJICAgIGNhc2UgUUltb2RlOiAvKiBUQkIgKi8JCQkJCVwKKwkgICAgICBhc21fZnByaW50ZiAoU1RSRUFNLCAiXHQuYnl0ZVx0KCVMTCVkLSVMTCVkKS8yXG4iLAlcCisJCQkgICBWQUxVRSwgUkVMKTsJCQkJCVwKKwkgICAgICBicmVhazsJCQkJCQkJXAorCSAgICBjYXNlIEhJbW9kZTogLyogVEJIICovCQkJCQlcCisJICAgICAgYXNtX2ZwcmludGYgKFNUUkVBTSwgIlx0LjJieXRlXHQoJUxMJWQtJUxMJWQpLzJcbiIsCVwKKwkJCSAgIFZBTFVFLCBSRUwpOwkJCQkJXAorCSAgICAgIGJyZWFrOwkJCQkJCQlcCisJICAgIGNhc2UgU0ltb2RlOgkJCQkJCVwKKwkgICAgICBpZiAoZmxhZ19waWMpCQkJCQkJXAorCQlhc21fZnByaW50ZiAoU1RSRUFNLCAiXHQud29yZFx0JUxMJWQrMS0lTEwlZFxuIiwgVkFMVUUsIFJFTCk7IFwKKwkgICAgICBlbHNlCQkJCQkJCVwKKwkJYXNtX2ZwcmludGYgKFNUUkVBTSwgIlx0LndvcmRcdCVMTCVkKzFcbiIsIFZBTFVFKTsJXAorCSAgICAgIGJyZWFrOwkJCQkJCQlcCisJICAgIGRlZmF1bHQ6CQkJCQkJCVwKKwkgICAgICBnY2NfdW5yZWFjaGFibGUoKTsJCQkJCVwKKwkgICAgfQkJCQkJCQkJXAorCX0JCQkJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorICB3aGlsZSAoMCkKKworCisjdW5kZWYgIEFTTV9PVVRQVVRfQVNDSUkKKyNkZWZpbmUgQVNNX09VVFBVVF9BU0NJSShTVFJFQU0sIFBUUiwgTEVOKSAgXAorICBvdXRwdXRfYXNjaWlfcHNldWRvX29wIChTVFJFQU0sIChjb25zdCB1bnNpZ25lZCBjaGFyICopIChQVFIpLCBMRU4pCisKKy8qIE91dHB1dCBhIGdhcC4gIEluIGZhY3Qgd2UgZmlsbCBpdCB3aXRoIG51bGxzLiAgKi8KKyN1bmRlZiAgQVNNX09VVFBVVF9TS0lQCisjZGVmaW5lIEFTTV9PVVRQVVRfU0tJUChTVFJFQU0sIE5CWVRFUykgCVwKKyAgZnByaW50ZiAoU1RSRUFNLCAiXHQuc3BhY2VcdCVkXG4iLCAoaW50KSAoTkJZVEVTKSkKKworLyogQWxpZ24gb3V0cHV0IHRvIGEgcG93ZXIgb2YgdHdvLiAgSG9ycmlibGUgL2Jpbi9hcy4gICovCisjaWZuZGVmIEFTTV9PVVRQVVRfQUxJR04gIAorI2RlZmluZSBBU01fT1VUUFVUX0FMSUdOKFNUUkVBTSwgUE9XRVIpCQkJXAorICBkbwkJCQkJCQlcCisgICAgewkJCQkJCQlcCisgICAgICByZWdpc3RlciBpbnQgYW1vdW50ID0gMSA8PCAoUE9XRVIpOwkJXAorCQkJCQkJCVwKKyAgICAgIGlmIChhbW91bnQgPT0gMikJCQkJCVwKKwlmcHJpbnRmIChTVFJFQU0sICJcdC5ldmVuXG4iKTsJCQlcCisgICAgICBlbHNlIGlmIChhbW91bnQgIT0gMSkJCQkJXAorCWZwcmludGYgKFNUUkVBTSwgIlx0LmFsaWduXHQlZFxuIiwgYW1vdW50IC0gNCk7CVwKKyAgICB9CQkJCQkJCVwKKyAgd2hpbGUgKDApCisjZW5kaWYKKworLyogT3V0cHV0IGEgY29tbW9uIGJsb2NrLiAgKi8KKyNpZm5kZWYgQVNNX09VVFBVVF9DT01NT04KKyNkZWZpbmUgQVNNX09VVFBVVF9DT01NT04oU1RSRUFNLCBOQU1FLCBTSVpFLCBST1VOREVEKQlcCisgIGRvCQkJCQkJCVwKKyAgICB7CQkJCQkJCVwKKyAgICAgIGZwcmludGYgKFNUUkVBTSwgIlx0LmNvbW1cdCIpOwkJCVwKKyAgICAgIGFzc2VtYmxlX25hbWUgKFNUUkVBTSwgTkFNRSk7CQkJXAorICAgICAgYXNtX2ZwcmludGYgKFNUUkVBTSwgIiwgJWRcdCVAICVkXG4iLCAJCVwKKwkgICAgICAgICAgIChpbnQpKFJPVU5ERUQpLCAoaW50KShTSVpFKSk7CVwKKyAgICB9CQkJCQkJCVwKKyAgd2hpbGUgKDApCisjZW5kaWYKKyAgICAgCisvKiBPdXRwdXQgYSBsb2NhbCBjb21tb24gYmxvY2suICAvYmluL2FzIGNhbid0IGRvIHRoaXMsIHNvIGhhY2sgYQorICAgYC5zcGFjZScgaW50byB0aGUgYnNzIHNlZ21lbnQuICBOb3RlIHRoYXQgdGhpcyBpcyAqYmFkKiBwcmFjdGljZSwKKyAgIHdoaWNoIGlzIGd1YXJhbnRlZWQgTk9UIHRvIHdvcmsgc2luY2UgaXQgZG9lc24ndCBkZWZpbmUgU1RBVElDCisgICBDT01NT04gc3BhY2UgYnV0IG1lcmVseSBTVEFUSUMgQlNTIHNwYWNlLiAgKi8KKyNpZm5kZWYgQVNNX09VVFBVVF9BTElHTkVEX0xPQ0FMCisjZGVmaW5lIEFTTV9PVVRQVVRfQUxJR05FRF9MT0NBTChTVFJFQU0sIE5BTUUsIFNJWkUsIEFMSUdOKQkJXAorICBkbwkJCQkJCQkJCVwKKyAgICB7CQkJCQkJCQkJXAorICAgICAgc3dpdGNoX3RvX3NlY3Rpb24gKGJzc19zZWN0aW9uKTsJCQkJCVwKKyAgICAgIEFTTV9PVVRQVVRfQUxJR04gKFNUUkVBTSwgZmxvb3JfbG9nMiAoQUxJR04gLyBCSVRTX1BFUl9VTklUKSk7CVwKKyAgICAgIEFTTV9PVVRQVVRfTEFCRUwgKFNUUkVBTSwgTkFNRSk7CQkJCQlcCisgICAgICBmcHJpbnRmIChTVFJFQU0sICJcdC5zcGFjZVx0JWRcbiIsIChpbnQpKFNJWkUpKTsJCQlcCisgICAgfQkJCQkJCQkJCVwKKyAgd2hpbGUgKDApCisjZW5kaWYKKyAgICAgCisvKiBPdXRwdXQgYSB6ZXJvLWluaXRpYWxpemVkIGJsb2NrLiAgKi8KKyNpZm5kZWYgQVNNX09VVFBVVF9BTElHTkVEX0JTUworI2RlZmluZSBBU01fT1VUUFVUX0FMSUdORURfQlNTKFNUUkVBTSwgREVDTCwgTkFNRSwgU0laRSwgQUxJR04pIFwKKyAgYXNtX291dHB1dF9hbGlnbmVkX2JzcyAoU1RSRUFNLCBERUNMLCBOQU1FLCBTSVpFLCBBTElHTikKKyNlbmRpZgorCisvKiBPdXRwdXQgYSAjaWRlbnQgZGlyZWN0aXZlLiAgKi8KKyNpZm5kZWYgQVNNX09VVFBVVF9JREVOVAorI2RlZmluZSBBU01fT1VUUFVUX0lERU5UKFNUUkVBTSxTVFJJTkcpICBcCisgIGFzbV9mcHJpbnRmIChTVFJFQU0sICIlQCAtIC0gLSBpZGVudCAlc1xuIiwgU1RSSU5HKQorI2VuZGlmCisgICAgIAorI2lmbmRlZiBBU01fQ09NTUVOVF9TVEFSVAorI2RlZmluZSBBU01fQ09NTUVOVF9TVEFSVCAJIkAiCisjZW5kaWYKKworLyogVGhpcyB3b3JrcyBmb3IgR0FTIGFuZCBzb21lIG90aGVyIGFzc2VtYmxlcnMuICAqLworI2RlZmluZSBTRVRfQVNNX09QCQkiXHQuc2V0XHQiCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvY29uZmlnL2FybS9hcm0tcHJvdG9zLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvY29uZmlnL2FybS9hcm0tcHJvdG9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc3MGVkYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvYXJtL2FybS1wcm90b3MuaApAQCAtMCwwICsxLDIxNyBAQAorLyogUHJvdG90eXBlcyBmb3IgZXhwb3J0ZWQgZnVuY3Rpb25zIGRlZmluZWQgaW4gYXJtLmMgYW5kIHBlLmMKKyAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwKKyAgIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBSaWNoYXJkIEVhcm5zaGF3IChyZWFybnNoYUBhcm0uY29tKQorICAgTWlub3IgaGFja3MgYnkgTmljayBDbGlmdG9uIChuaWNrY0BjeWdudXMuY29tKQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKKyAgIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfQVJNX1BST1RPU19ICisjZGVmaW5lIEdDQ19BUk1fUFJPVE9TX0gKKworZXh0ZXJuIHZvaWQgYXJtX292ZXJyaWRlX29wdGlvbnMgKHZvaWQpOworZXh0ZXJuIHZvaWQgYXJtX29wdGltaXphdGlvbl9vcHRpb25zIChpbnQsIGludCk7CitleHRlcm4gaW50IHVzZV9yZXR1cm5faW5zbiAoaW50LCBydHgpOworZXh0ZXJuIGVudW0gcmVnX2NsYXNzIGFybV9yZWdub19jbGFzcyAoaW50KTsKK2V4dGVybiB2b2lkIGFybV9sb2FkX3BpY19yZWdpc3RlciAodW5zaWduZWQgbG9uZyk7CitleHRlcm4gaW50IGFybV92b2xhdGlsZV9mdW5jICh2b2lkKTsKK2V4dGVybiBjb25zdCBjaGFyICphcm1fb3V0cHV0X2VwaWxvZ3VlIChydHgpOworZXh0ZXJuIHZvaWQgYXJtX2V4cGFuZF9wcm9sb2d1ZSAodm9pZCk7CitleHRlcm4gY29uc3QgY2hhciAqYXJtX3N0cmlwX25hbWVfZW5jb2RpbmcgKGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9pZCBhcm1fYXNtX291dHB1dF9sYWJlbHJlZiAoRklMRSAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgdGh1bWIyX2FzbV9vdXRwdXRfb3Bjb2RlIChGSUxFICopOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXJtX2N1cnJlbnRfZnVuY190eXBlICh2b2lkKTsKK2V4dGVybiBIT1NUX1dJREVfSU5UIGFybV9jb21wdXRlX2luaXRpYWxfZWxpbWluYXRpb25fb2Zmc2V0ICh1bnNpZ25lZCBpbnQsCisJCQkJCQkJICAgICB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIEhPU1RfV0lERV9JTlQgdGh1bWJfY29tcHV0ZV9pbml0aWFsX2VsaW1pbmF0aW9uX29mZnNldCAodW5zaWduZWQgaW50LAorCQkJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBhcm1fZGJ4X3JlZ2lzdGVyX251bWJlciAodW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIGFybV9vdXRwdXRfZm5fdW53aW5kIChGSUxFICosIGJvb2wpOworICAKKworI2lmZGVmIFJUWF9DT0RFCitleHRlcm4gYm9vbCBhcm1fdmVjdG9yX21vZGVfc3VwcG9ydGVkX3AgKGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgYXJtX2hhcmRfcmVnbm9fbW9kZV9vayAodW5zaWduZWQgaW50LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGNvbnN0X29rX2Zvcl9hcm0gKEhPU1RfV0lERV9JTlQpOworZXh0ZXJuIGludCBhcm1fc3BsaXRfY29uc3RhbnQgKFJUWF9DT0RFLCBlbnVtIG1hY2hpbmVfbW9kZSwgcnR4LAorCQkJICAgICAgIEhPU1RfV0lERV9JTlQsIHJ0eCwgcnR4LCBpbnQpOworZXh0ZXJuIFJUWF9DT0RFIGFybV9jYW5vbmljYWxpemVfY29tcGFyaXNvbiAoUlRYX0NPREUsIGVudW0gbWFjaGluZV9tb2RlLAorCQkJCQkgICAgIHJ0eCAqKTsKK2V4dGVybiBpbnQgbGVnaXRpbWF0ZV9waWNfb3BlcmFuZF9wIChydHgpOworZXh0ZXJuIHJ0eCBsZWdpdGltaXplX3BpY19hZGRyZXNzIChydHgsIGVudW0gbWFjaGluZV9tb2RlLCBydHgpOworZXh0ZXJuIHJ0eCBsZWdpdGltaXplX3Rsc19hZGRyZXNzIChydHgsIHJ0eCk7CitleHRlcm4gaW50IGFybV9sZWdpdGltYXRlX2FkZHJlc3Nfb3V0ZXJfcCAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwgUlRYX0NPREUsIGludCk7CitleHRlcm4gaW50IHRodW1iX2xlZ2l0aW1hdGVfb2Zmc2V0X3AgKGVudW0gbWFjaGluZV9tb2RlLCBIT1NUX1dJREVfSU5UKTsKK2V4dGVybiBydHggdGh1bWJfbGVnaXRpbWl6ZV9yZWxvYWRfYWRkcmVzcyAocnR4ICosIGVudW0gbWFjaGluZV9tb2RlLCBpbnQsIGludCwKKwkJCQkJICAgIGludCk7CitleHRlcm4gaW50IGFybV9jb25zdF9kb3VibGVfcnR4IChydHgpOworZXh0ZXJuIGludCBuZWdfY29uc3RfZG91YmxlX3J0eF9va19mb3JfZnBhIChydHgpOworZXh0ZXJuIGludCB2ZnAzX2NvbnN0X2RvdWJsZV9ydHggKHJ0eCk7CitleHRlcm4gaW50IG5lb25faW1tZWRpYXRlX3ZhbGlkX2Zvcl9tb3ZlIChydHgsIGVudW0gbWFjaGluZV9tb2RlLCBydHggKiwgaW50ICopOworZXh0ZXJuIGludCBuZW9uX2ltbWVkaWF0ZV92YWxpZF9mb3JfbG9naWMgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUsIGludCwgcnR4ICosCisJCQkJCSAgIGludCAqKTsKK2V4dGVybiBjaGFyICpuZW9uX291dHB1dF9sb2dpY19pbW1lZGlhdGUgKGNvbnN0IGNoYXIgKiwgcnR4ICosCisJCQkJCSAgZW51bSBtYWNoaW5lX21vZGUsIGludCwgaW50KTsKK2V4dGVybiB2b2lkIG5lb25fcGFpcndpc2VfcmVkdWNlIChydHgsIHJ0eCwgZW51bSBtYWNoaW5lX21vZGUsCisJCQkJICBydHggKCopIChydHgsIHJ0eCwgcnR4KSk7CitleHRlcm4gcnR4IG5lb25fbWFrZV9jb25zdGFudCAocnR4KTsKK2V4dGVybiB2b2lkIG5lb25fZXhwYW5kX3ZlY3Rvcl9pbml0IChydHgsIHJ0eCk7CitleHRlcm4gdm9pZCBuZW9uX2xhbmVfYm91bmRzIChydHgsIEhPU1RfV0lERV9JTlQsIEhPU1RfV0lERV9JTlQpOworZXh0ZXJuIHZvaWQgbmVvbl9jb25zdF9ib3VuZHMgKHJ0eCwgSE9TVF9XSURFX0lOVCwgSE9TVF9XSURFX0lOVCk7CitleHRlcm4gSE9TVF9XSURFX0lOVCBuZW9uX2VsZW1lbnRfYml0cyAoZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIHZvaWQgbmVvbl9yZWludGVycHJldCAocnR4LCBydHgpOworZXh0ZXJuIHZvaWQgbmVvbl9lbWl0X3BhaXJfcmVzdWx0X2luc24gKGVudW0gbWFjaGluZV9tb2RlLAorCQkJCQlydHggKCopIChydHgsIHJ0eCwgcnR4LCBydHgpLAorCQkJCQlydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiB2b2lkIG5lb25fZGlzYW1iaWd1YXRlX2NvcHkgKHJ0eCAqLCBydHggKiwgcnR4ICosIHVuc2lnbmVkIGludCk7CitleHRlcm4gZW51bSByZWdfY2xhc3MgY29wcm9jX3NlY29uZGFyeV9yZWxvYWRfY2xhc3MgKGVudW0gbWFjaGluZV9tb2RlLCBydHgsCisJCQkJCQkgICAgIGJvb2wpOworZXh0ZXJuIGJvb2wgYXJtX3Rsc19yZWZlcmVuY2VkX3AgKHJ0eCk7CitleHRlcm4gYm9vbCBhcm1fY2Fubm90X2ZvcmNlX2NvbnN0X21lbSAocnR4KTsKKworZXh0ZXJuIGludCBjaXJydXNfbWVtb3J5X29mZnNldCAocnR4KTsKK2V4dGVybiBpbnQgYXJtX2NvcHJvY19tZW1fb3BlcmFuZCAocnR4LCBib29sKTsKK2V4dGVybiBpbnQgbmVvbl92ZWN0b3JfbWVtX29wZXJhbmQgKHJ0eCwgaW50KTsKK2V4dGVybiBpbnQgbmVvbl9zdHJ1Y3RfbWVtX29wZXJhbmQgKHJ0eCk7CitleHRlcm4gaW50IGFybV9ub19lYXJseV9zdG9yZV9hZGRyX2RlcCAocnR4LCBydHgpOworZXh0ZXJuIGludCBhcm1fbm9fZWFybHlfYWx1X3NoaWZ0X2RlcCAocnR4LCBydHgpOworZXh0ZXJuIGludCBhcm1fbm9fZWFybHlfYWx1X3NoaWZ0X3ZhbHVlX2RlcCAocnR4LCBydHgpOworZXh0ZXJuIGludCBhcm1fbm9fZWFybHlfbXVsX2RlcCAocnR4LCBydHgpOworZXh0ZXJuIGludCBhcm1fbWFjX2FjY3VtdWxhdG9yX2lzX211bF9yZXN1bHQgKHJ0eCwgcnR4KTsKKworZXh0ZXJuIGludCB0bHNfbWVudGlvbmVkX3AgKHJ0eCk7CitleHRlcm4gaW50IHN5bWJvbF9tZW50aW9uZWRfcCAocnR4KTsKK2V4dGVybiBpbnQgbGFiZWxfbWVudGlvbmVkX3AgKHJ0eCk7CitleHRlcm4gUlRYX0NPREUgbWlubWF4X2NvZGUgKHJ0eCk7CitleHRlcm4gaW50IGFkamFjZW50X21lbV9sb2NhdGlvbnMgKHJ0eCwgcnR4KTsKK2V4dGVybiBpbnQgbG9hZF9tdWx0aXBsZV9zZXF1ZW5jZSAocnR4ICosIGludCwgaW50ICosIGludCAqLCBIT1NUX1dJREVfSU5UICopOworZXh0ZXJuIGNvbnN0IGNoYXIgKmVtaXRfbGRtX3NlcSAocnR4ICosIGludCk7CitleHRlcm4gaW50IHN0b3JlX211bHRpcGxlX3NlcXVlbmNlIChydHggKiwgaW50LCBpbnQgKiwgaW50ICosIEhPU1RfV0lERV9JTlQgKik7CitleHRlcm4gY29uc3QgY2hhciAqIGVtaXRfc3RtX3NlcSAocnR4ICosIGludCk7CitleHRlcm4gcnR4IGFybV9nZW5fbG9hZF9tdWx0aXBsZSAoaW50LCBpbnQsIHJ0eCwgaW50LCBpbnQsCisJCQkJICBydHgsIEhPU1RfV0lERV9JTlQgKik7CitleHRlcm4gcnR4IGFybV9nZW5fc3RvcmVfbXVsdGlwbGUgKGludCwgaW50LCBydHgsIGludCwgaW50LAorCQkJCSAgIHJ0eCwgSE9TVF9XSURFX0lOVCAqKTsKK2V4dGVybiBpbnQgYXJtX2dlbl9tb3ZtZW1xaSAocnR4ICopOworZXh0ZXJuIGVudW0gbWFjaGluZV9tb2RlIGFybV9zZWxlY3RfY2NfbW9kZSAoUlRYX0NPREUsIHJ0eCwgcnR4KTsKK2V4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSBhcm1fc2VsZWN0X2RvbWluYW5jZV9jY19tb2RlIChydHgsIHJ0eCwKKwkJCQkJCSAgICAgICBIT1NUX1dJREVfSU5UKTsKK2V4dGVybiBydHggYXJtX2dlbl9jb21wYXJlX3JlZyAoUlRYX0NPREUsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggYXJtX2dlbl9yZXR1cm5fYWRkcl9tYXNrICh2b2lkKTsKK2V4dGVybiB2b2lkIGFybV9yZWxvYWRfaW5faGkgKHJ0eCAqKTsKK2V4dGVybiB2b2lkIGFybV9yZWxvYWRfb3V0X2hpIChydHggKik7CitleHRlcm4gaW50IGFybV9jb25zdF9kb3VibGVfaW5saW5lX2Nvc3QgKHJ0eCk7CitleHRlcm4gYm9vbCBhcm1fY29uc3RfZG91YmxlX2J5X3BhcnRzIChydHgpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmZwX2ltbWVkaWF0ZV9jb25zdGFudCAocnR4KTsKK2V4dGVybiB2b2lkIGFybV9lbWl0X2NhbGxfaW5zbiAocnR4LCBydHgpOworZXh0ZXJuIGNvbnN0IGNoYXIgKm91dHB1dF9jYWxsIChydHggKik7CitleHRlcm4gY29uc3QgY2hhciAqb3V0cHV0X2NhbGxfbWVtIChydHggKik7Cit2b2lkIGFybV9lbWl0X21vdnBhaXIgKHJ0eCwgcnR4KTsKK2V4dGVybiBjb25zdCBjaGFyICpvdXRwdXRfbW92X2xvbmdfZG91YmxlX2ZwYV9mcm9tX2FybSAocnR4ICopOworZXh0ZXJuIGNvbnN0IGNoYXIgKm91dHB1dF9tb3ZfbG9uZ19kb3VibGVfYXJtX2Zyb21fZnBhIChydHggKik7CitleHRlcm4gY29uc3QgY2hhciAqb3V0cHV0X21vdl9sb25nX2RvdWJsZV9hcm1fZnJvbV9hcm0gKHJ0eCAqKTsKK2V4dGVybiBjb25zdCBjaGFyICpvdXRwdXRfbW92X2RvdWJsZV9mcGFfZnJvbV9hcm0gKHJ0eCAqKTsKK2V4dGVybiBjb25zdCBjaGFyICpvdXRwdXRfbW92X2RvdWJsZV9hcm1fZnJvbV9mcGEgKHJ0eCAqKTsKK2V4dGVybiBjb25zdCBjaGFyICpvdXRwdXRfbW92ZV9kb3VibGUgKHJ0eCAqKTsKK2V4dGVybiBjb25zdCBjaGFyICpvdXRwdXRfbW92ZV9xdWFkIChydHggKik7CitleHRlcm4gY29uc3QgY2hhciAqb3V0cHV0X21vdmVfdmZwIChydHggKm9wZXJhbmRzKTsKK2V4dGVybiBjb25zdCBjaGFyICpvdXRwdXRfbW92ZV9uZW9uIChydHggKm9wZXJhbmRzKTsKK2V4dGVybiBpbnQgYXJtX2F0dHJfbGVuZ3RoX21vdmVfbmVvbiAocnR4KTsKK2V4dGVybiBjb25zdCBjaGFyICpvdXRwdXRfYWRkX2ltbWVkaWF0ZSAocnR4ICopOworZXh0ZXJuIGNvbnN0IGNoYXIgKmFyaXRobWV0aWNfaW5zdHIgKHJ0eCwgaW50KTsKK2V4dGVybiB2b2lkIG91dHB1dF9hc2NpaV9wc2V1ZG9fb3AgKEZJTEUgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLCBpbnQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKm91dHB1dF9yZXR1cm5faW5zdHJ1Y3Rpb24gKHJ0eCwgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgYXJtX3Bva2VfZnVuY3Rpb25fbmFtZSAoRklMRSAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgYXJtX3ByaW50X29wZXJhbmQgKEZJTEUgKiwgcnR4LCBpbnQpOworZXh0ZXJuIHZvaWQgYXJtX3ByaW50X29wZXJhbmRfYWRkcmVzcyAoRklMRSAqLCBydHgpOworZXh0ZXJuIHZvaWQgYXJtX2ZpbmFsX3ByZXNjYW5faW5zbiAocnR4KTsKK2V4dGVybiBpbnQgYXJtX2RlYnVnZ2VyX2FyZ19vZmZzZXQgKGludCwgcnR4KTsKK2V4dGVybiBib29sIGFybV9pc19sb25nX2NhbGxfcCAodHJlZSk7CitleHRlcm4gaW50ICAgIGFybV9lbWl0X3ZlY3Rvcl9jb25zdCAoRklMRSAqLCBydHgpOworZXh0ZXJuIHZvaWQgYXJtX2VtaXRfZnAxNl9jb25zdCAocnR4IGMpOworZXh0ZXJuIGNvbnN0IGNoYXIgKiBhcm1fb3V0cHV0X2xvYWRfZ3IgKHJ0eCAqKTsKK2V4dGVybiBjb25zdCBjaGFyICp2ZnBfb3V0cHV0X2ZzdG1kIChydHggKik7CitleHRlcm4gdm9pZCBhcm1fc2V0X3JldHVybl9hZGRyZXNzIChydHgsIHJ0eCk7CitleHRlcm4gaW50IGFybV9lbGltaW5hYmxlX3JlZ2lzdGVyIChydHgpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmFybV9vdXRwdXRfc2hpZnQocnR4ICosIGludCk7CisKK2V4dGVybiBib29sIGFybV9vdXRwdXRfYWRkcl9jb25zdF9leHRyYSAoRklMRSAqLCBydHgpOworCisjaWYgZGVmaW5lZCBUUkVFX0NPREUKK2V4dGVybiBydHggYXJtX2Z1bmN0aW9uX2FyZyAoQ1VNVUxBVElWRV9BUkdTICosIGVudW0gbWFjaGluZV9tb2RlLCB0cmVlLCBpbnQpOworZXh0ZXJuIHZvaWQgYXJtX2Z1bmN0aW9uX2FyZ19hZHZhbmNlIChDVU1VTEFUSVZFX0FSR1MgKiwgZW51bSBtYWNoaW5lX21vZGUsCisJCQkJICAgICAgdHJlZSwgYm9vbCk7CitleHRlcm4gdm9pZCBhcm1faW5pdF9jdW11bGF0aXZlX2FyZ3MgKENVTVVMQVRJVkVfQVJHUyAqLCB0cmVlLCBydHgsIHRyZWUpOworZXh0ZXJuIGJvb2wgYXJtX3BhZF9hcmdfdXB3YXJkIChlbnVtIG1hY2hpbmVfbW9kZSwgY29uc3RfdHJlZSk7CitleHRlcm4gYm9vbCBhcm1fcGFkX3JlZ191cHdhcmQgKGVudW0gbWFjaGluZV9tb2RlLCB0cmVlLCBpbnQpOworZXh0ZXJuIGJvb2wgYXJtX25lZWRzX2RvdWJsZXdvcmRfYWxpZ24gKGVudW0gbWFjaGluZV9tb2RlLCB0cmVlKTsKKyNlbmRpZgorZXh0ZXJuIGludCBhcm1fYXBwbHlfcmVzdWx0X3NpemUgKHZvaWQpOworZXh0ZXJuIHJ0eCBhYXBjc19saWJjYWxsX3ZhbHVlIChlbnVtIG1hY2hpbmVfbW9kZSk7CisKKyNlbmRpZiAvKiBSVFhfQ09ERSAqLworCitleHRlcm4gaW50IGFybV9mbG9hdF93b3Jkc19iaWdfZW5kaWFuICh2b2lkKTsKKworLyogVGh1bWIgZnVuY3Rpb25zLiAgKi8KK2V4dGVybiB2b2lkIGFybV9pbml0X2V4cGFuZGVycyAodm9pZCk7CitleHRlcm4gY29uc3QgY2hhciAqdGh1bWJfdW5leHBhbmRlZF9lcGlsb2d1ZSAodm9pZCk7CitleHRlcm4gdm9pZCB0aHVtYjFfZXhwYW5kX3Byb2xvZ3VlICh2b2lkKTsKK2V4dGVybiB2b2lkIHRodW1iMV9leHBhbmRfZXBpbG9ndWUgKHZvaWQpOworI2lmZGVmIFRSRUVfQ09ERQorZXh0ZXJuIGludCBpc19jYWxsZWRfaW5fQVJNX21vZGUgKHRyZWUpOworI2VuZGlmCitleHRlcm4gaW50IHRodW1iX3NoaWZ0YWJsZV9jb25zdCAodW5zaWduZWQgSE9TVF9XSURFX0lOVCk7CisjaWZkZWYgUlRYX0NPREUKK2V4dGVybiB2b2lkIHRodW1iMV9maW5hbF9wcmVzY2FuX2luc24gKHJ0eCk7CitleHRlcm4gdm9pZCB0aHVtYjJfZmluYWxfcHJlc2Nhbl9pbnNuIChydHgpOworZXh0ZXJuIGNvbnN0IGNoYXIgKnRodW1iX2xvYWRfZG91YmxlX2Zyb21fYWRkcmVzcyAocnR4ICopOworZXh0ZXJuIGNvbnN0IGNoYXIgKnRodW1iX291dHB1dF9tb3ZlX21lbV9tdWx0aXBsZSAoaW50LCBydHggKik7CitleHRlcm4gY29uc3QgY2hhciAqdGh1bWJfY2FsbF92aWFfcmVnIChydHgpOworZXh0ZXJuIHZvaWQgdGh1bWJfZXhwYW5kX21vdm1lbXFpIChydHggKik7CitleHRlcm4gcnR4IGFybV9yZXR1cm5fYWRkciAoaW50LCBydHgpOworZXh0ZXJuIHZvaWQgdGh1bWJfcmVsb2FkX291dF9oaSAocnR4ICopOworZXh0ZXJuIHZvaWQgdGh1bWJfcmVsb2FkX2luX2hpIChydHggKik7CitleHRlcm4gdm9pZCB0aHVtYl9zZXRfcmV0dXJuX2FkZHJlc3MgKHJ0eCwgcnR4KTsKK2V4dGVybiBjb25zdCBjaGFyICp0aHVtYjFfb3V0cHV0X2Nhc2VzaSAocnR4ICopOworZXh0ZXJuIGNvbnN0IGNoYXIgKnRodW1iMl9vdXRwdXRfY2FzZXNpIChydHggKik7CisjZW5kaWYKKworLyogRGVmaW5lZCBpbiBwZS5jLiAgKi8KK2V4dGVybiBpbnQgYXJtX2RsbGV4cG9ydF9uYW1lX3AgKGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IGFybV9kbGxpbXBvcnRfbmFtZV9wIChjb25zdCBjaGFyICopOworCisjaWZkZWYgVFJFRV9DT0RFCitleHRlcm4gdm9pZCBhcm1fcGVfdW5pcXVlX3NlY3Rpb24gKHRyZWUsIGludCk7CitleHRlcm4gdm9pZCBhcm1fcGVfZW5jb2RlX3NlY3Rpb25faW5mbyAodHJlZSwgcnR4LCBpbnQpOworZXh0ZXJuIGludCBhcm1fZGxsZXhwb3J0X3AgKHRyZWUpOworZXh0ZXJuIGludCBhcm1fZGxsaW1wb3J0X3AgKHRyZWUpOworZXh0ZXJuIHZvaWQgYXJtX21hcmtfZGxsZXhwb3J0ICh0cmVlKTsKK2V4dGVybiB2b2lkIGFybV9tYXJrX2RsbGltcG9ydCAodHJlZSk7CisjZW5kaWYKKworZXh0ZXJuIHZvaWQgYXJtX3ByX2xvbmdfY2FsbHMgKHN0cnVjdCBjcHBfcmVhZGVyICopOworZXh0ZXJuIHZvaWQgYXJtX3ByX25vX2xvbmdfY2FsbHMgKHN0cnVjdCBjcHBfcmVhZGVyICopOworZXh0ZXJuIHZvaWQgYXJtX3ByX2xvbmdfY2FsbHNfb2ZmIChzdHJ1Y3QgY3BwX3JlYWRlciAqKTsKKworZXh0ZXJuIHZvaWQgYXJtX2xhbmdfb2JqZWN0X2F0dHJpYnV0ZXNfaW5pdCh2b2lkKTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmFybV9tYW5nbGVfdHlwZSAoY29uc3RfdHJlZSk7CisKK2V4dGVybiB2b2lkIGFybV9vcmRlcl9yZWdzX2Zvcl9sb2NhbF9hbGxvYyAodm9pZCk7CisKKyNlbmRpZiAvKiAhIEdDQ19BUk1fUFJPVE9TX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvYXJtL2FybS5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NvbmZpZy9hcm0vYXJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmZmFmOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvYXJtL2FybS5oCkBAIC0wLDAgKzEsMjc2OCBAQAorLyogRGVmaW5pdGlvbnMgb2YgdGFyZ2V0IG1hY2hpbmUgZm9yIEdOVSBjb21waWxlciwgZm9yIEFSTS4KKyAgIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKyAgIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgUGlldGVyIGBUaWdncicgU2Nob2VubWFrZXJzIChyY3BpZXRlckB3aW4udHVlLm5sKQorICAgYW5kIE1hcnRpbiBTaW1tb25zIChAaGFybGVxbi5jby51aykuCisgICBNb3JlIG1ham9yIGhhY2tzIGJ5IFJpY2hhcmQgRWFybnNoYXcgKHJlYXJuc2hhQGFybS5jb20pCisgICBNaW5vciBoYWNrcyBieSBOaWNrIENsaWZ0b24gKG5pY2tjQGN5Z251cy5jb20pCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworICAgR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91cgorICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19BUk1fSAorI2RlZmluZSBHQ0NfQVJNX0gKKworLyogV2UgY2FuJ3QgdXNlIGVudW0gbWFjaGluZV9tb2RlIGluc2lkZSBhIGdlbmVyYXRvciBmaWxlIGJlY2F1c2UgaXQKKyAgIGhhc24ndCBiZWVuIGNyZWF0ZWQgeWV0OyB3ZSBzaG91bGRuJ3QgYmUgdXNpbmcgYW55IGNvZGUgdGhhdAorICAgbmVlZHMgdGhlIHJlYWwgZGVmaW5pdGlvbiB0aG91Z2gsIHNvIHRoaXMgb3VnaHQgdG8gYmUgc2FmZS4gICovCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKKyNkZWZpbmUgTUFDSE1PREUgaW50CisjZWxzZQorI2luY2x1ZGUgImluc24tbW9kZXMuaCIKKyNkZWZpbmUgTUFDSE1PREUgZW51bSBtYWNoaW5lX21vZGUKKyNlbmRpZgorCisjaW5jbHVkZSAiY29uZmlnL3Z4d29ya3MtZHVtbXkuaCIKKworLyogVGhlIGFyY2hpdGVjdHVyZSBkZWZpbmUuICAqLworZXh0ZXJuIGNoYXIgYXJtX2FyY2hfbmFtZVtdOworCisvKiBUYXJnZXQgQ1BVIGJ1aWx0aW5zLiAgKi8KKyNkZWZpbmUgVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMoKQkJCVwKKyAgZG8JCQkJCQkJXAorICAgIHsJCQkJCQkJXAorCS8qIERlZmluZSBfX2FybV9fIGV2ZW4gd2hlbiBpbiB0aHVtYiBtb2RlLCBmb3IJXAorCSAgIGNvbnNpc3RlbmN5IHdpdGggYXJtY2MuICAqLwkJCVwKKwlidWlsdGluX2RlZmluZSAoIl9fYXJtX18iKTsJCQlcCisJYnVpbHRpbl9kZWZpbmUgKCJfX0FQQ1NfMzJfXyIpOwkJCVwKKwlpZiAoVEFSR0VUX1RIVU1CKQkJCQlcCisJICBidWlsdGluX2RlZmluZSAoIl9fdGh1bWJfXyIpOwkJCVwKKwlpZiAoVEFSR0VUX1RIVU1CMikJCQkJXAorCSAgYnVpbHRpbl9kZWZpbmUgKCJfX3RodW1iMl9fIik7CQlcCisJCQkJCQkJXAorCWlmIChUQVJHRVRfQklHX0VORCkJCQkJXAorCSAgewkJCQkJCVwKKwkgICAgYnVpbHRpbl9kZWZpbmUgKCJfX0FSTUVCX18iKTsJCVwKKwkgICAgaWYgKFRBUkdFVF9USFVNQikJCQkJXAorCSAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19USFVNQkVCX18iKTsJCVwKKwkgICAgaWYgKFRBUkdFVF9MSVRUTEVfV09SRFMpCQkJXAorCSAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19BUk1XRUxfXyIpOwkJXAorCSAgfQkJCQkJCVwKKyAgICAgICAgZWxzZQkJCQkJCVwKKwkgIHsJCQkJCQlcCisJICAgIGJ1aWx0aW5fZGVmaW5lICgiX19BUk1FTF9fIik7CQlcCisJICAgIGlmIChUQVJHRVRfVEhVTUIpCQkJCVwKKwkgICAgICBidWlsdGluX2RlZmluZSAoIl9fVEhVTUJFTF9fIik7CQlcCisJICB9CQkJCQkJXAorCQkJCQkJCVwKKwlpZiAoVEFSR0VUX1NPRlRfRkxPQVQpCQkJCVwKKwkgIGJ1aWx0aW5fZGVmaW5lICgiX19TT0ZURlBfXyIpOwkJXAorCQkJCQkJCVwKKwlpZiAoVEFSR0VUX1ZGUCkJCQkJCVwKKwkgIGJ1aWx0aW5fZGVmaW5lICgiX19WRlBfRlBfXyIpOwkJXAorCQkJCQkJCVwKKwlpZiAoVEFSR0VUX05FT04pCQkJCVwKKwkgIGJ1aWx0aW5fZGVmaW5lICgiX19BUk1fTkVPTl9fIik7CQlcCisJCQkJCQkJXAorCS8qIEFkZCBhIGRlZmluZSBmb3IgaW50ZXJ3b3JraW5nLgkJXAorCSAgIE5lZWRlZCB3aGVuIGJ1aWxkaW5nIGxpYmdjYy5hLiAgKi8JCVwKKwlpZiAoYXJtX2NwcF9pbnRlcndvcmspCQkJCVwKKwkgIGJ1aWx0aW5fZGVmaW5lICgiX19USFVNQl9JTlRFUldPUktfXyIpOwlcCisJCQkJCQkJXAorCWJ1aWx0aW5fYXNzZXJ0ICgiY3B1PWFybSIpOwkJCVwKKwlidWlsdGluX2Fzc2VydCAoIm1hY2hpbmU9YXJtIik7CQkJXAorCQkJCQkJCVwKKwlidWlsdGluX2RlZmluZSAoYXJtX2FyY2hfbmFtZSk7CQkJXAorCWlmIChhcm1fYXJjaF9jaXJydXMpCQkJCVwKKwkgIGJ1aWx0aW5fZGVmaW5lICgiX19NQVZFUklDS19fIik7CQlcCisJaWYgKGFybV9hcmNoX3hzY2FsZSkJCQkJXAorCSAgYnVpbHRpbl9kZWZpbmUgKCJfX1hTQ0FMRV9fIik7CQlcCisJaWYgKGFybV9hcmNoX2l3bW14dCkJCQkJXAorCSAgYnVpbHRpbl9kZWZpbmUgKCJfX0lXTU1YVF9fIik7CQlcCisJaWYgKFRBUkdFVF9BQVBDU19CQVNFRCkJCQkJXAorCSAgYnVpbHRpbl9kZWZpbmUgKCJfX0FSTV9FQUJJX18iKTsJCVwKKyAgICB9IHdoaWxlICgwKQorCisvKiBUaGUgdmFyaW91cyBBUk0gY29yZXMuICAqLworZW51bSBwcm9jZXNzb3JfdHlwZQoreworI2RlZmluZSBBUk1fQ09SRShOQU1FLCBJREVOVCwgQVJDSCwgRkxBR1MsIENPU1RTKSBcCisgIElERU5ULAorI2luY2x1ZGUgImFybS1jb3Jlcy5kZWYiCisjdW5kZWYgQVJNX0NPUkUKKyAgLyogVXNlZCB0byBpbmRpY2F0ZSB0aGF0IG5vIHByb2Nlc3NvciBoYXMgYmVlbiBzcGVjaWZpZWQuICAqLworICBhcm1fbm9uZQorfTsKKworZW51bSB0YXJnZXRfY3B1cworeworI2RlZmluZSBBUk1fQ09SRShOQU1FLCBJREVOVCwgQVJDSCwgRkxBR1MsIENPU1RTKSBcCisgIFRBUkdFVF9DUFVfIyNJREVOVCwKKyNpbmNsdWRlICJhcm0tY29yZXMuZGVmIgorI3VuZGVmIEFSTV9DT1JFCisgIFRBUkdFVF9DUFVfZ2VuZXJpYworfTsKKworLyogVGhlIHByb2Nlc3NvciBmb3Igd2hpY2ggaW5zdHJ1Y3Rpb25zIHNob3VsZCBiZSBzY2hlZHVsZWQuICAqLworZXh0ZXJuIGVudW0gcHJvY2Vzc29yX3R5cGUgYXJtX3R1bmU7CisKK3R5cGVkZWYgZW51bSBhcm1fY29uZF9jb2RlCit7CisgIEFSTV9FUSA9IDAsIEFSTV9ORSwgQVJNX0NTLCBBUk1fQ0MsIEFSTV9NSSwgQVJNX1BMLCBBUk1fVlMsIEFSTV9WQywKKyAgQVJNX0hJLCBBUk1fTFMsIEFSTV9HRSwgQVJNX0xULCBBUk1fR1QsIEFSTV9MRSwgQVJNX0FMLCBBUk1fTlYKK30KK2FybV9jYzsKKworZXh0ZXJuIGFybV9jYyBhcm1fY3VycmVudF9jYzsKKworI2RlZmluZSBBUk1fSU5WRVJTRV9DT05ESVRJT05fQ09ERShYKSAgKChhcm1fY2MpICgoKGludClYKSBeIDEpKQorCitleHRlcm4gaW50IGFybV90YXJnZXRfbGFiZWw7CitleHRlcm4gaW50IGFybV9jY2ZzbV9zdGF0ZTsKK2V4dGVybiBHVFkoKCkpIHJ0eCBhcm1fdGFyZ2V0X2luc247CisvKiBUaGUgbGFiZWwgb2YgdGhlIGN1cnJlbnQgY29uc3RhbnQgcG9vbC4gICovCitleHRlcm4gcnR4IHBvb2xfdmVjdG9yX2xhYmVsOworLyogU2V0IHRvIDEgd2hlbiBhIHJldHVybiBpbnNuIGlzIG91dHB1dCwgdGhpcyBtZWFucyB0aGF0IHRoZSBlcGlsb2d1ZQorICAgaXMgbm90IG5lZWRlZC4gICovCitleHRlcm4gaW50IHJldHVybl91c2VkX3RoaXNfZnVuY3Rpb247CisvKiBDYWxsYmFjayB0byBvdXRwdXQgbGFuZ3VhZ2Ugc3BlY2lmaWMgb2JqZWN0IGF0dHJpYnV0ZXMuICAqLworZXh0ZXJuIHZvaWQgKCphcm1fbGFuZ19vdXRwdXRfb2JqZWN0X2F0dHJpYnV0ZXNfaG9vaykodm9pZCk7CisMCisvKiBKdXN0IGluIGNhc2UgY29uZmlndXJlIGhhcyBmYWlsZWQgdG8gZGVmaW5lIGFueXRoaW5nLiAgKi8KKyNpZm5kZWYgVEFSR0VUX0NQVV9ERUZBVUxUCisjZGVmaW5lIFRBUkdFVF9DUFVfREVGQVVMVCBUQVJHRVRfQ1BVX2dlbmVyaWMKKyNlbmRpZgorCisKKyN1bmRlZiAgQ1BQX1NQRUMKKyNkZWZpbmUgQ1BQX1NQRUMgIiUoc3VidGFyZ2V0X2NwcF9zcGVjKQkJCQkJXAorJXttc29mdC1mbG9hdDole21oYXJkLWZsb2F0OgkJCQkJCVwKKwklZS1tc29mdC1mbG9hdCBhbmQgLW1oYXJkX2Zsb2F0IG1heSBub3QgYmUgdXNlZCB0b2dldGhlcn19CVwKKyV7bWJpZy1lbmRpYW46JXttbGl0dGxlLWVuZGlhbjoJCQkJCQlcCisJJWUtbWJpZy1lbmRpYW4gYW5kIC1tbGl0dGxlLWVuZGlhbiBtYXkgbm90IGJlIHVzZWQgdG9nZXRoZXJ9fSIKKworI2lmbmRlZiBDQzFfU1BFQworI2RlZmluZSBDQzFfU1BFQyAiIgorI2VuZGlmCisKKy8qIFRoaXMgbWFjcm8gZGVmaW5lcyBuYW1lcyBvZiBhZGRpdGlvbmFsIHNwZWNpZmljYXRpb25zIHRvIHB1dCBpbiB0aGUgc3BlY3MKKyAgIHRoYXQgY2FuIGJlIHVzZWQgaW4gdmFyaW91cyBzcGVjaWZpY2F0aW9ucyBsaWtlIENDMV9TUEVDLiAgSXRzIGRlZmluaXRpb24KKyAgIGlzIGFuIGluaXRpYWxpemVyIHdpdGggYSBzdWJncm91cGluZyBmb3IgZWFjaCBjb21tYW5kIG9wdGlvbi4KKworICAgRWFjaCBzdWJncm91cGluZyBjb250YWlucyBhIHN0cmluZyBjb25zdGFudCwgdGhhdCBkZWZpbmVzIHRoZQorICAgc3BlY2lmaWNhdGlvbiBuYW1lLCBhbmQgYSBzdHJpbmcgY29uc3RhbnQgdGhhdCB1c2VkIGJ5IHRoZSBHQ0MgZHJpdmVyCisgICBwcm9ncmFtLgorCisgICBEbyBub3QgZGVmaW5lIHRoaXMgbWFjcm8gaWYgaXQgZG9lcyBub3QgbmVlZCB0byBkbyBhbnl0aGluZy4gICovCisjZGVmaW5lIEVYVFJBX1NQRUNTCQkJCQkJXAorICB7ICJzdWJ0YXJnZXRfY3BwX3NwZWMiLAlTVUJUQVJHRVRfQ1BQX1NQRUMgfSwgICAgICAgICAgIFwKKyAgU1VCVEFSR0VUX0VYVFJBX1NQRUNTCisKKyNpZm5kZWYgU1VCVEFSR0VUX0VYVFJBX1NQRUNTCisjZGVmaW5lIFNVQlRBUkdFVF9FWFRSQV9TUEVDUworI2VuZGlmCisKKyNpZm5kZWYgU1VCVEFSR0VUX0NQUF9TUEVDCisjZGVmaW5lIFNVQlRBUkdFVF9DUFBfU1BFQyAgICAgICIiCisjZW5kaWYKKwwKKy8qIFJ1bi10aW1lIFRhcmdldCBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpZm5kZWYgVEFSR0VUX1ZFUlNJT04KKyNkZWZpbmUgVEFSR0VUX1ZFUlNJT04gZnB1dHMgKCIgKEFSTS9nZW5lcmljKSIsIHN0ZGVycik7CisjZW5kaWYKKworI2RlZmluZSBUQVJHRVRfU09GVF9GTE9BVAkJKGFybV9mbG9hdF9hYmkgPT0gQVJNX0ZMT0FUX0FCSV9TT0ZUKQorLyogVXNlIGhhcmR3YXJlIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucy4gKi8KKyNkZWZpbmUgVEFSR0VUX0hBUkRfRkxPQVQJCShhcm1fZmxvYXRfYWJpICE9IEFSTV9GTE9BVF9BQklfU09GVCkKKy8qIFVzZSBoYXJkd2FyZSBmbG9hdGluZyBwb2ludCBjYWxsaW5nIGNvbnZlbnRpb24uICAqLworI2RlZmluZSBUQVJHRVRfSEFSRF9GTE9BVF9BQkkJCShhcm1fZmxvYXRfYWJpID09IEFSTV9GTE9BVF9BQklfSEFSRCkKKyNkZWZpbmUgVEFSR0VUX0ZQQQkJKGFybV9mcHVfZGVzYy0+bW9kZWwgPT0gQVJNX0ZQX01PREVMX0ZQQSkKKyNkZWZpbmUgVEFSR0VUX01BVkVSSUNLCQkoYXJtX2ZwdV9kZXNjLT5tb2RlbCA9PSBBUk1fRlBfTU9ERUxfTUFWRVJJQ0spCisjZGVmaW5lIFRBUkdFVF9WRlAJCShhcm1fZnB1X2Rlc2MtPm1vZGVsID09IEFSTV9GUF9NT0RFTF9WRlApCisjZGVmaW5lIFRBUkdFVF9JV01NWFQJCQkoYXJtX2FyY2hfaXdtbXh0KQorI2RlZmluZSBUQVJHRVRfUkVBTExZX0lXTU1YVAkJKFRBUkdFVF9JV01NWFQgJiYgVEFSR0VUXzMyQklUKQorI2RlZmluZSBUQVJHRVRfSVdNTVhUX0FCSSAoVEFSR0VUXzMyQklUICYmIGFybV9hYmkgPT0gQVJNX0FCSV9JV01NWFQpCisjZGVmaW5lIFRBUkdFVF9BUk0gICAgICAgICAgICAgICAgICAgICAgKCEgVEFSR0VUX1RIVU1CKQorI2RlZmluZSBUQVJHRVRfRUlUSEVSCQkJMSAvKiAoVEFSR0VUX0FSTSB8IFRBUkdFVF9USFVNQikgKi8KKyNkZWZpbmUgVEFSR0VUX0JBQ0tUUkFDRQkgICAgICAgIChsZWFmX2Z1bmN0aW9uX3AgKCkgXAorCQkJCSAgICAgICAgID8gVEFSR0VUX1RQQ1NfTEVBRl9GUkFNRSBcCisJCQkJICAgICAgICAgOiBUQVJHRVRfVFBDU19GUkFNRSkKKyNkZWZpbmUgVEFSR0VUX0xEUkQJCQkoYXJtX2FyY2g1ZSAmJiBBUk1fRE9VQkxFV09SRF9BTElHTikKKyNkZWZpbmUgVEFSR0VUX0FBUENTX0JBU0VEIFwKKyAgICAoYXJtX2FiaSAhPSBBUk1fQUJJX0FQQ1MgJiYgYXJtX2FiaSAhPSBBUk1fQUJJX0FUUENTKQorCisjZGVmaW5lIFRBUkdFVF9IQVJEX1RQCQkJKHRhcmdldF90aHJlYWRfcG9pbnRlciA9PSBUUF9DUDE1KQorI2RlZmluZSBUQVJHRVRfU09GVF9UUAkJCSh0YXJnZXRfdGhyZWFkX3BvaW50ZXIgPT0gVFBfU09GVCkKKworLyogT25seSAxNi1iaXQgdGh1bWIgY29kZS4gICovCisjZGVmaW5lIFRBUkdFVF9USFVNQjEJCQkoVEFSR0VUX1RIVU1CICYmICFhcm1fYXJjaF90aHVtYjIpCisvKiBBcm0gb3IgVGh1bWItMiAzMi1iaXQgY29kZS4gICovCisjZGVmaW5lIFRBUkdFVF8zMkJJVAkJCShUQVJHRVRfQVJNIHx8IGFybV9hcmNoX3RodW1iMikKKy8qIDMyLWJpdCBUaHVtYi0yIGNvZGUuICAqLworI2RlZmluZSBUQVJHRVRfVEhVTUIyCQkJKFRBUkdFVF9USFVNQiAmJiBhcm1fYXJjaF90aHVtYjIpCisvKiBUaHVtYi0xIG9ubHkuICAqLworI2RlZmluZSBUQVJHRVRfVEhVTUIxX09OTFkJCShUQVJHRVRfVEhVTUIxICYmICFhcm1fYXJjaF9ub3RtKQorLyogRlBBIGVtdWxhdG9yIHdpdGhvdXQgTEZNLiAgKi8KKyNkZWZpbmUgVEFSR0VUX0ZQQV9FTVUyCQkJKFRBUkdFVF9GUEEgJiYgYXJtX2ZwdV9kZXNjLT5yZXYgPT0gMikKKworLyogVGhlIGZvbGxvd2luZyB0d28gbWFjcm9zIGNvbmNlcm4gdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBjb3Byb2Nlc3NvcgorICAgaW5zdHJ1Y3Rpb25zIGZvciBWRlB2MyBvciBORU9OLiAgVEFSR0VUX1ZGUDMvVEFSR0VUX1ZGUEQzMiBhcmUgY3VycmVudGx5CisgICBvbmx5IGV2ZXIgdGVzdGVkIHdoZW4gd2Uga25vdyB3ZSBhcmUgZ2VuZXJhdGluZyBmb3IgVkZQIGhhcmR3YXJlOyB3ZSBuZWVkCisgICB0byBiZSBtb3JlIGNhcmVmdWwgd2l0aCBUQVJHRVRfTkVPTiBhcyBub3RlZCBiZWxvdy4gICovCisKKy8qIEZQVSBpcyBoYXMgdGhlIGZ1bGwgVkZQdjMvTkVPTiByZWdpc3RlciBmaWxlIG9mIDMyIEQgcmVnaXN0ZXJzLiAgKi8KKyNkZWZpbmUgVEFSR0VUX1ZGUEQzMiAoVEFSR0VUX1ZGUCAmJiBhcm1fZnB1X2Rlc2MtPnJlZ3MgPT0gVkZQX1JFR19EMzIpCisKKy8qIEZQVSBzdXBwb3J0cyBWRlB2MyBpbnN0cnVjdGlvbnMuICAqLworI2RlZmluZSBUQVJHRVRfVkZQMyAoVEFSR0VUX1ZGUCAmJiBhcm1fZnB1X2Rlc2MtPnJldiA+PSAzKQorCisvKiBGUFUgb25seSBzdXBwb3J0cyBWRlAgc2luZ2xlLXByZWNpc2lvbiBpbnN0cnVjdGlvbnMuICAqLworI2RlZmluZSBUQVJHRVRfVkZQX1NJTkdMRSAoVEFSR0VUX1ZGUCAmJiBhcm1fZnB1X2Rlc2MtPnJlZ3MgPT0gVkZQX1JFR19TSU5HTEUpCisKKy8qIEZQVSBzdXBwb3J0cyBWRlAgZG91YmxlLXByZWNpc2lvbiBpbnN0cnVjdGlvbnMuICAqLworI2RlZmluZSBUQVJHRVRfVkZQX0RPVUJMRSAoVEFSR0VUX1ZGUCAmJiBhcm1fZnB1X2Rlc2MtPnJlZ3MgIT0gVkZQX1JFR19TSU5HTEUpCisKKy8qIEZQVSBzdXBwb3J0cyBoYWxmLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB3aXRoIE5FT04gZWxlbWVudCBsb2FkL3N0b3JlLiAgKi8KKyNkZWZpbmUgVEFSR0VUX05FT05fRlAxNiBcCisgIChUQVJHRVRfVkZQICYmIGFybV9mcHVfZGVzYy0+bmVvbiAmJiBhcm1fZnB1X2Rlc2MtPmZwMTYpCisKKy8qIEZQVSBzdXBwb3J0cyBWRlAgaGFsZi1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQuICAqLworI2RlZmluZSBUQVJHRVRfRlAxNiAoVEFSR0VUX1ZGUCAmJiBhcm1fZnB1X2Rlc2MtPmZwMTYpCisKKy8qIEZQVSBzdXBwb3J0cyBOZW9uIGluc3RydWN0aW9ucy4gIFRoZSBzZXR0aW5nIG9mIHRoaXMgbWFjcm8gZ2V0cworICAgcmV2ZWFsZWQgdmlhIF9fQVJNX05FT05fXyBzbyB3ZSBhZGQgZXh0cmEgZ3VhcmRzIHVwb24gVEFSR0VUXzMyQklUCisgICBhbmQgVEFSR0VUX0hBUkRfRkxPQVQgdG8gZW5zdXJlIHRoYXQgTkVPTiBpbnN0cnVjdGlvbnMgYXJlCisgICBhdmFpbGFibGUuICAqLworI2RlZmluZSBUQVJHRVRfTkVPTiAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUIFwKKwkJICAgICAmJiBUQVJHRVRfVkZQICYmIGFybV9mcHVfZGVzYy0+bmVvbikKKworLyogIkRTUCIgbXVsdGlwbHkgaW5zdHJ1Y3Rpb25zLCBlZy4gU01VTHh5LiAgKi8KKyNkZWZpbmUgVEFSR0VUX0RTUF9NVUxUSVBMWSBcCisgIChUQVJHRVRfMzJCSVQgJiYgYXJtX2FyY2g1ZSAmJiAoYXJtX2FyY2hfbm90bSB8fCBhcm1fYXJjaDdlbSkpCisvKiBJbnRlZ2VyIFNJTUQgaW5zdHJ1Y3Rpb25zLCBhbmQgZXh0ZW5kLWFjY3VtdWxhdGUgaW5zdHJ1Y3Rpb25zLiAgKi8KKyNkZWZpbmUgVEFSR0VUX0lOVF9TSU1EIFwKKyAgKFRBUkdFVF8zMkJJVCAmJiBhcm1fYXJjaDYgJiYgKGFybV9hcmNoX25vdG0gfHwgYXJtX2FyY2g3ZW0pKQorCisvKiBTaG91bGQgTU9WVy9NT1ZUIGJlIHVzZWQgaW4gcHJlZmVyZW5jZSB0byBhIGNvbnN0YW50IHBvb2wuICAqLworI2RlZmluZSBUQVJHRVRfVVNFX01PVlQgKGFybV9hcmNoX3RodW1iMiAmJiAhb3B0aW1pemVfc2l6ZSkKKworLyogV2UgY291bGQgdXNlIHVuaWZpZWQgc3ludGF4IGZvciBhcm0gbW9kZSwgYnV0IGZvciBub3cgd2UganVzdCB1c2UgaXQKKyAgIGZvciBUaHVtYi0yLiAgKi8KKyNkZWZpbmUgVEFSR0VUX1VOSUZJRURfQVNNIFRBUkdFVF9USFVNQjIKKworCisvKiBUcnVlIGlmZiB0aGUgZnVsbCBCUEFCSSBpcyBiZWluZyB1c2VkLiAgSWYgVEFSR0VUX0JQQUJJIGlzIHRydWUsCisgICB0aGVuIFRBUkdFVF9BQVBDU19CQVNFRCBtdXN0IGJlIHRydWUgLS0gYnV0IHRoZSBjb252ZXJzZSBkb2VzIG5vdAorICAgaG9sZC4gIFRBUkdFVF9CUEFCSSBpbXBsaWVzIHRoZSB1c2Ugb2YgdGhlIEJQQUJJIHJ1bnRpbWUgbGlicmFyeSwKKyAgIGV0Yy4sIGluIGFkZGl0aW9uIHRvIGp1c3QgdGhlIEFBUENTIGNhbGxpbmcgY29udmVudGlvbnMuICAqLworI2lmbmRlZiBUQVJHRVRfQlBBQkkKKyNkZWZpbmUgVEFSR0VUX0JQQUJJIGZhbHNlCisjZW5kaWYKKworLyogU3VwcG9ydCBmb3IgYSBjb21waWxlLXRpbWUgZGVmYXVsdCBDUFUsIGV0IGNldGVyYS4gIFRoZSBydWxlcyBhcmU6CisgICAtLXdpdGgtYXJjaCBpcyBpZ25vcmVkIGlmIC1tYXJjaCBvciAtbWNwdSBhcmUgc3BlY2lmaWVkLgorICAgLS13aXRoLWNwdSBpcyBpZ25vcmVkIGlmIC1tYXJjaCBvciAtbWNwdSBhcmUgc3BlY2lmaWVkLCBhbmQgaXMgb3ZlcnJpZGRlbgorICAgIGJ5IC0td2l0aC1hcmNoLgorICAgLS13aXRoLXR1bmUgaXMgaWdub3JlZCBpZiAtbXR1bmUgb3IgLW1jcHUgYXJlIHNwZWNpZmllZCAoYnV0IG5vdCBhZmZlY3RlZAorICAgICBieSAtbWFyY2gpLgorICAgLS13aXRoLWZsb2F0IGlzIGlnbm9yZWQgaWYgLW1oYXJkLWZsb2F0LCAtbXNvZnQtZmxvYXQgb3IgLW1mbG9hdC1hYmkgYXJlCisgICBzcGVjaWZpZWQuCisgICAtLXdpdGgtZnB1IGlzIGlnbm9yZWQgaWYgLW1mcHUgaXMgc3BlY2lmaWVkLgorICAgLS13aXRoLWFiaSBpcyBpZ25vcmVkIGlzIC1tYWJpIGlzIHNwZWNpZmllZC4gICovCisjZGVmaW5lIE9QVElPTl9ERUZBVUxUX1NQRUNTIFwKKyAgeyJhcmNoIiwgIiV7IW1hcmNoPSo6JXshbWNwdT0qOi1tYXJjaD0lKFZBTFVFKX19IiB9LCBcCisgIHsiY3B1IiwgIiV7IW1hcmNoPSo6JXshbWNwdT0qOi1tY3B1PSUoVkFMVUUpfX0iIH0sIFwKKyAgeyJ0dW5lIiwgIiV7IW1jcHU9KjoleyFtdHVuZT0qOi1tdHVuZT0lKFZBTFVFKX19IiB9LCBcCisgIHsiZmxvYXQiLCBcCisgICAgIiV7IW1zb2Z0LWZsb2F0OiV7IW1oYXJkLWZsb2F0OiV7IW1mbG9hdC1hYmk9KjotbWZsb2F0LWFiaT0lKFZBTFVFKX19fSIgfSwgXAorICB7ImZwdSIsICIleyFtZnB1PSo6LW1mcHU9JShWQUxVRSl9In0sIFwKKyAgeyJhYmkiLCAiJXshbWFiaT0qOi1tYWJpPSUoVkFMVUUpfSJ9LCBcCisgIHsibW9kZSIsICIleyFtYXJtOiV7IW10aHVtYjotbSUoVkFMVUUpfX0ifSwKKworLyogV2hpY2ggZmxvYXRpbmcgcG9pbnQgbW9kZWwgdG8gdXNlLiAgKi8KK2VudW0gYXJtX2ZwX21vZGVsCit7CisgIEFSTV9GUF9NT0RFTF9VTktOT1dOLAorICAvKiBGUEEgbW9kZWwgKEhhcmR3YXJlIG9yIHNvZnR3YXJlKS4gICovCisgIEFSTV9GUF9NT0RFTF9GUEEsCisgIC8qIENpcnJ1cyBNYXZlcmljayBmbG9hdGluZyBwb2ludCBtb2RlbC4gICovCisgIEFSTV9GUF9NT0RFTF9NQVZFUklDSywKKyAgLyogVkZQIGZsb2F0aW5nIHBvaW50IG1vZGVsLiAgKi8KKyAgQVJNX0ZQX01PREVMX1ZGUAorfTsKKworZW51bSB2ZnBfcmVnX3R5cGUKK3sKKyAgVkZQX05PTkUgPSAwLAorICBWRlBfUkVHX0QxNiwKKyAgVkZQX1JFR19EMzIsCisgIFZGUF9SRUdfU0lOR0xFCit9OworCitleHRlcm4gY29uc3Qgc3RydWN0IGFybV9mcHVfZGVzYworeworICBjb25zdCBjaGFyICpuYW1lOworICBlbnVtIGFybV9mcF9tb2RlbCBtb2RlbDsKKyAgaW50IHJldjsKKyAgZW51bSB2ZnBfcmVnX3R5cGUgcmVnczsKKyAgaW50IG5lb247CisgIGludCBmcDE2OworfSAqYXJtX2ZwdV9kZXNjOworCisvKiBXaGljaCBmbG9hdGluZyBwb2ludCBoYXJkd2FyZSB0byBzY2hlZHVsZSBmb3IuICAqLworZXh0ZXJuIGludCBhcm1fZnB1X2F0dHI7CisKK2VudW0gZmxvYXRfYWJpX3R5cGUKK3sKKyAgQVJNX0ZMT0FUX0FCSV9TT0ZULAorICBBUk1fRkxPQVRfQUJJX1NPRlRGUCwKKyAgQVJNX0ZMT0FUX0FCSV9IQVJECit9OworCitleHRlcm4gZW51bSBmbG9hdF9hYmlfdHlwZSBhcm1fZmxvYXRfYWJpOworCisjaWZuZGVmIFRBUkdFVF9ERUZBVUxUX0ZMT0FUX0FCSQorI2RlZmluZSBUQVJHRVRfREVGQVVMVF9GTE9BVF9BQkkgQVJNX0ZMT0FUX0FCSV9TT0ZUCisjZW5kaWYKKworLyogV2hpY2ggX19mcDE2IGZvcm1hdCB0byB1c2UuCisgICBUaGUgZW51bWVyYXRpb24gdmFsdWVzIGNvcnJlc3BvbmQgdG8gdGhlIG51bWJlcmluZyBmb3IgdGhlCisgICBUYWdfQUJJX0ZQXzE2Yml0X2Zvcm1hdCBhdHRyaWJ1dGUuCisgKi8KK2VudW0gYXJtX2ZwMTZfZm9ybWF0X3R5cGUKK3sKKyAgQVJNX0ZQMTZfRk9STUFUX05PTkUgPSAwLAorICBBUk1fRlAxNl9GT1JNQVRfSUVFRSA9IDEsCisgIEFSTV9GUDE2X0ZPUk1BVF9BTFRFUk5BVElWRSA9IDIKK307CisKK2V4dGVybiBlbnVtIGFybV9mcDE2X2Zvcm1hdF90eXBlIGFybV9mcDE2X2Zvcm1hdDsKKyNkZWZpbmUgTEFSR0VTVF9FWFBPTkVOVF9JU19OT1JNQUwoYml0cykgXAorICAgICgoYml0cykgPT0gMTYgJiYgYXJtX2ZwMTZfZm9ybWF0ID09IEFSTV9GUDE2X0ZPUk1BVF9BTFRFUk5BVElWRSkKKworLyogV2hpY2ggQUJJIHRvIHVzZS4gICovCitlbnVtIGFybV9hYmlfdHlwZQoreworICBBUk1fQUJJX0FQQ1MsCisgIEFSTV9BQklfQVRQQ1MsCisgIEFSTV9BQklfQUFQQ1MsCisgIEFSTV9BQklfSVdNTVhULAorICBBUk1fQUJJX0FBUENTX0xJTlVYCit9OworCitleHRlcm4gZW51bSBhcm1fYWJpX3R5cGUgYXJtX2FiaTsKKworI2lmbmRlZiBBUk1fREVGQVVMVF9BQkkKKyNkZWZpbmUgQVJNX0RFRkFVTFRfQUJJIEFSTV9BQklfQVBDUworI2VuZGlmCisKKy8qIFdoaWNoIHRocmVhZCBwb2ludGVyIGFjY2VzcyBzZXF1ZW5jZSB0byB1c2UuICAqLworZW51bSBhcm1fdHBfdHlwZSB7CisgIFRQX0FVVE8sCisgIFRQX1NPRlQsCisgIFRQX0NQMTUKK307CisKK2V4dGVybiBlbnVtIGFybV90cF90eXBlIHRhcmdldF90aHJlYWRfcG9pbnRlcjsKKworLyogTm9uemVybyBpZiB0aGlzIGNoaXAgc3VwcG9ydHMgdGhlIEFSTSBBcmNoaXRlY3R1cmUgM00gZXh0ZW5zaW9ucy4gICovCitleHRlcm4gaW50IGFybV9hcmNoM207CisKKy8qIE5vbnplcm8gaWYgdGhpcyBjaGlwIHN1cHBvcnRzIHRoZSBBUk0gQXJjaGl0ZWN0dXJlIDQgZXh0ZW5zaW9ucy4gICovCitleHRlcm4gaW50IGFybV9hcmNoNDsKKworLyogTm9uemVybyBpZiB0aGlzIGNoaXAgc3VwcG9ydHMgdGhlIEFSTSBBcmNoaXRlY3R1cmUgNFQgZXh0ZW5zaW9ucy4gICovCitleHRlcm4gaW50IGFybV9hcmNoNHQ7CisKKy8qIE5vbnplcm8gaWYgdGhpcyBjaGlwIHN1cHBvcnRzIHRoZSBBUk0gQXJjaGl0ZWN0dXJlIDUgZXh0ZW5zaW9ucy4gICovCitleHRlcm4gaW50IGFybV9hcmNoNTsKKworLyogTm9uemVybyBpZiB0aGlzIGNoaXAgc3VwcG9ydHMgdGhlIEFSTSBBcmNoaXRlY3R1cmUgNUUgZXh0ZW5zaW9ucy4gICovCitleHRlcm4gaW50IGFybV9hcmNoNWU7CisKKy8qIE5vbnplcm8gaWYgdGhpcyBjaGlwIHN1cHBvcnRzIHRoZSBBUk0gQXJjaGl0ZWN0dXJlIDYgZXh0ZW5zaW9ucy4gICovCitleHRlcm4gaW50IGFybV9hcmNoNjsKKworLyogTm9uemVybyBpZiBpbnN0cnVjdGlvbnMgbm90IHByZXNlbnQgaW4gdGhlICdNJyBwcm9maWxlIGNhbiBiZSB1c2VkLiAgKi8KK2V4dGVybiBpbnQgYXJtX2FyY2hfbm90bTsKKworLyogTm9uemVybyBpZiBpbnN0cnVjdGlvbnMgcHJlc2VudCBpbiBBUk12N0UtTSBjYW4gYmUgdXNlZC4gICovCitleHRlcm4gaW50IGFybV9hcmNoN2VtOworCisvKiBOb256ZXJvIGlmIHRoaXMgY2hpcCBjYW4gYmVuZWZpdCBmcm9tIGxvYWQgc2NoZWR1bGluZy4gICovCitleHRlcm4gaW50IGFybV9sZF9zY2hlZDsKKworLyogTm9uemVybyBpZiBnZW5lcmF0aW5nIHRodW1iIGNvZGUuICAqLworZXh0ZXJuIGludCB0aHVtYl9jb2RlOworCisvKiBOb256ZXJvIGlmIHRoaXMgY2hpcCBpcyBhIFN0cm9uZ0FSTS4gICovCitleHRlcm4gaW50IGFybV90dW5lX3N0cm9uZ2FybTsKKworLyogTm9uemVybyBpZiB0aGlzIGNoaXAgaXMgYSBDaXJydXMgdmFyaWFudC4gICovCitleHRlcm4gaW50IGFybV9hcmNoX2NpcnJ1czsKKworLyogTm9uemVybyBpZiB0aGlzIGNoaXAgc3VwcG9ydHMgSW50ZWwgWFNjYWxlIHdpdGggV2lyZWxlc3MgTU1YIHRlY2hub2xvZ3kuICAqLworZXh0ZXJuIGludCBhcm1fYXJjaF9pd21teHQ7CisKKy8qIE5vbnplcm8gaWYgdGhpcyBjaGlwIGlzIGFuIFhTY2FsZS4gICovCitleHRlcm4gaW50IGFybV9hcmNoX3hzY2FsZTsKKworLyogTm9uemVybyBpZiB0dW5pbmcgZm9yIFhTY2FsZS4gICovCitleHRlcm4gaW50IGFybV90dW5lX3hzY2FsZTsKKworLyogTm9uemVybyBpZiB0dW5pbmcgZm9yIHN0b3JlcyB2aWEgdGhlIHdyaXRlIGJ1ZmZlci4gICovCitleHRlcm4gaW50IGFybV90dW5lX3didWY7CisKKy8qIE5vbnplcm8gaWYgdHVuaW5nIGZvciBDb3J0ZXgtQTkuICAqLworZXh0ZXJuIGludCBhcm1fdHVuZV9jb3J0ZXhfYTk7CisKKy8qIE5vbnplcm8gaWYgd2Ugc2hvdWxkIGRlZmluZSBfX1RIVU1CX0lOVEVSV09SS19fIGluIHRoZQorICAgcHJlcHJvY2Vzc29yLgorICAgWFhYIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLCBpdCdzIGludGVuZGVkIHRvIGhlbHAgd29yayBhcm91bmQKKyAgIHByb2JsZW1zIGluIEdMRCB3aGljaCBkb2Vzbid0IHVuZGVyc3RhbmQgdGhhdCBhcm12NXQgY29kZSBpcworICAgaW50ZXJ3b3JraW5nIGNsZWFuLiAgKi8KK2V4dGVybiBpbnQgYXJtX2NwcF9pbnRlcndvcms7CisKKy8qIE5vbnplcm8gaWYgY2hpcCBzdXBwb3J0cyBUaHVtYiAyLiAgKi8KK2V4dGVybiBpbnQgYXJtX2FyY2hfdGh1bWIyOworCisvKiBOb256ZXJvIGlmIGNoaXAgc3VwcG9ydHMgaW50ZWdlciBkaXZpc2lvbiBpbnN0cnVjdGlvbi4gICovCitleHRlcm4gaW50IGFybV9hcmNoX2h3ZGl2OworCisjaWZuZGVmIFRBUkdFVF9ERUZBVUxUCisjZGVmaW5lIFRBUkdFVF9ERUZBVUxUICAoTUFTS19BUENTX0ZSQU1FKQorI2VuZGlmCisKKy8qIFRoZSBmcmFtZSBwb2ludGVyIHJlZ2lzdGVyIHVzZWQgaW4gZ2NjIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggZGVidWdnaW5nOworICAgdGhhdCBpcyBjb250cm9sbGVkIGJ5IHRoZSBBUENTLUZSQU1FIG9wdGlvbi4gICovCisjZGVmaW5lIENBTl9ERUJVR19XSVRIT1VUX0ZQCisKKyNkZWZpbmUgT1ZFUlJJREVfT1BUSU9OUyAgYXJtX292ZXJyaWRlX29wdGlvbnMgKCkKKworI2RlZmluZSBPUFRJTUlaQVRJT05fT1BUSU9OUyhMRVZFTCxTSVpFKQkJXAorCWFybV9vcHRpbWl6YXRpb25fb3B0aW9ucyAoKExFVkVMKSwgKFNJWkUpKQorCisvKiBOb256ZXJvIGlmIFBJQyBjb2RlIHJlcXVpcmVzIGV4cGxpY2l0IHF1YWxpZmllcnMgdG8gZ2VuZXJhdGUKKyAgIFBMVCBhbmQgR09UIHJlbG9jcyByYXRoZXIgdGhhbiB0aGUgYXNzZW1ibGVyIGRvaW5nIHNvIGltcGxpY2l0bHkuCisgICBTdWJ0YXJnZXRzIGNhbiBvdmVycmlkZSB0aGVzZSBpZiByZXF1aXJlZC4gICovCisjaWZuZGVmIE5FRURfR09UX1JFTE9DCisjZGVmaW5lIE5FRURfR09UX1JFTE9DCTAKKyNlbmRpZgorI2lmbmRlZiBORUVEX1BMVF9SRUxPQworI2RlZmluZSBORUVEX1BMVF9SRUxPQwkwCisjZW5kaWYKKworLyogTm9uemVybyBpZiB3ZSBuZWVkIHRvIHJlZmVyIHRvIHRoZSBHT1Qgd2l0aCBhIFBDLXJlbGF0aXZlCisgICBvZmZzZXQuICBJbiBvdGhlciB3b3JkcywgZ2VuZXJhdGUKKworICAgLndvcmQJX0dMT0JBTF9PRkZTRVRfVEFCTEVfIC0gWy4gLSAoLkx4eCArIDgpXQorCisgICByYXRoZXIgdGhhbgorCisgICAud29yZAlfR0xPQkFMX09GRlNFVF9UQUJMRV8gLSAoLkx4eCArIDgpCisKKyAgIFRoZSBkZWZhdWx0IGlzIHRydWUsIHdoaWNoIG1hdGNoZXMgTmV0QlNELiAgU3VidGFyZ2V0cyBjYW4KKyAgIG92ZXJyaWRlIHRoaXMgaWYgcmVxdWlyZWQuICAqLworI2lmbmRlZiBHT1RfUENSRUwKKyNkZWZpbmUgR09UX1BDUkVMICAgMQorI2VuZGlmCisMCisvKiBUYXJnZXQgbWFjaGluZSBzdG9yYWdlIExheW91dC4gICovCisKKworLyogRGVmaW5lIHRoaXMgbWFjcm8gaWYgaXQgaXMgYWR2aXNhYmxlIHRvIGhvbGQgc2NhbGFycyBpbiByZWdpc3RlcnMKKyAgIGluIGEgd2lkZXIgbW9kZSB0aGFuIHRoYXQgZGVjbGFyZWQgYnkgdGhlIHByb2dyYW0uICBJbiBzdWNoIGNhc2VzLAorICAgdGhlIHZhbHVlIGlzIGNvbnN0cmFpbmVkIHRvIGJlIHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBkZWNsYXJlZAorICAgdHlwZSwgYnV0IGtlcHQgdmFsaWQgaW4gdGhlIHdpZGVyIG1vZGUuICBUaGUgc2lnbmVkbmVzcyBvZiB0aGUKKyAgIGV4dGVuc2lvbiBtYXkgZGlmZmVyIGZyb20gdGhhdCBvZiB0aGUgdHlwZS4gICovCisKKy8qIEl0IGlzIGZhciBmYXN0ZXIgdG8gemVybyBleHRlbmQgY2hhcnMgdGhhbiB0byBzaWduIGV4dGVuZCB0aGVtICovCisKKyNkZWZpbmUgUFJPTU9URV9NT0RFKE1PREUsIFVOU0lHTkVEUCwgVFlQRSkJXAorICBpZiAoR0VUX01PREVfQ0xBU1MgKE1PREUpID09IE1PREVfSU5UCQlcCisgICAgICAmJiBHRVRfTU9ERV9TSVpFIChNT0RFKSA8IDQpICAgICAgCVwKKyAgICB7CQkJCQkJXAorICAgICAgaWYgKE1PREUgPT0gUUltb2RlKQkJCVwKKwlVTlNJR05FRFAgPSAxOwkJCQlcCisgICAgICBlbHNlIGlmIChNT0RFID09IEhJbW9kZSkJCQlcCisJVU5TSUdORURQID0gMTsJCQkJXAorICAgICAgKE1PREUpID0gU0ltb2RlOwkJCQlcCisgICAgfQorCisvKiBEZWZpbmUgdGhpcyBpZiBtb3N0IHNpZ25pZmljYW50IGJpdCBpcyBsb3dlc3QgbnVtYmVyZWQKKyAgIGluIGluc3RydWN0aW9ucyB0aGF0IG9wZXJhdGUgb24gbnVtYmVyZWQgYml0LWZpZWxkcy4gICovCisjZGVmaW5lIEJJVFNfQklHX0VORElBTiAgMAorCisvKiBEZWZpbmUgdGhpcyBpZiBtb3N0IHNpZ25pZmljYW50IGJ5dGUgb2YgYSB3b3JkIGlzIHRoZSBsb3dlc3QgbnVtYmVyZWQuCisgICBNb3N0IEFSTSBwcm9jZXNzb3JzIGFyZSBydW4gaW4gbGl0dGxlIGVuZGlhbiBtb2RlLCBzbyB0aGF0IGlzIHRoZSBkZWZhdWx0LgorICAgSWYgeW91IHdhbnQgdG8gaGF2ZSBpdCBydW4tdGltZSBzZWxlY3RhYmxlLCBjaGFuZ2UgdGhlIGRlZmluaXRpb24gaW4gYQorICAgY292ZXIgZmlsZSB0byBiZSBUQVJHRVRfQklHX0VORElBTi4gICovCisjZGVmaW5lIEJZVEVTX0JJR19FTkRJQU4gIChUQVJHRVRfQklHX0VORCAhPSAwKQorCisvKiBEZWZpbmUgdGhpcyBpZiBtb3N0IHNpZ25pZmljYW50IHdvcmQgb2YgYSBtdWx0aXdvcmQgbnVtYmVyIGlzIHRoZSBsb3dlc3QKKyAgIG51bWJlcmVkLgorICAgVGhpcyBpcyBhbHdheXMgZmFsc2UsIGV2ZW4gd2hlbiBpbiBiaWctZW5kaWFuIG1vZGUuICAqLworI2RlZmluZSBXT1JEU19CSUdfRU5ESUFOICAoQllURVNfQklHX0VORElBTiAmJiAhIFRBUkdFVF9MSVRUTEVfV09SRFMpCisKKy8qIExJQkdDQzJfV09SRFNfQklHX0VORElBTiBoYXMgdG8gYmUgYSBjb25zdGFudCwgc28gd2UgZGVmaW5lIHRoaXMgYmFzZWQKKyAgIG9uIHByb2Nlc3NvciBwcmUtZGVmaW5lZHMgd2hlbiBjb21waWxpbmcgbGliZ2NjMi5jLiAgKi8KKyNpZiBkZWZpbmVkKF9fQVJNRUJfXykgJiYgIWRlZmluZWQoX19BUk1XRUxfXykKKyNkZWZpbmUgTElCR0NDMl9XT1JEU19CSUdfRU5ESUFOIDEKKyNlbHNlCisjZGVmaW5lIExJQkdDQzJfV09SRFNfQklHX0VORElBTiAwCisjZW5kaWYKKworLyogRGVmaW5lIHRoaXMgaWYgbW9zdCBzaWduaWZpY2FudCB3b3JkIG9mIGRvdWJsZXMgaXMgdGhlIGxvd2VzdCBudW1iZXJlZC4KKyAgIFRoZSBydWxlcyBhcmUgZGlmZmVyZW50IGJhc2VkIG9uIHdoZXRoZXIgb3Igbm90IHdlIHVzZSBGUEEtZm9ybWF0LAorICAgVkZQLWZvcm1hdCBvciBzb21lIG90aGVyIGZsb2F0aW5nIHBvaW50IGNvLXByb2Nlc3NvcidzIGZvcm1hdCBkb3VibGVzLiAgKi8KKyNkZWZpbmUgRkxPQVRfV09SRFNfQklHX0VORElBTiAoYXJtX2Zsb2F0X3dvcmRzX2JpZ19lbmRpYW4gKCkpCisKKyNkZWZpbmUgVU5JVFNfUEVSX1dPUkQJNAorCisvKiBVc2UgdGhlIG9wdGlvbiAtbXZlY3Rvcml6ZS13aXRoLW5lb24tcXVhZCB0byBvdmVycmlkZSB0aGUgdXNlIG9mIGRvdWJsZXdvcmQKKyAgIHJlZ2lzdGVycyB3aGVuIGF1dG92ZWN0b3JpemluZyBmb3IgTmVvbiwgYXQgbGVhc3QgdW50aWwgbXVsdGlwbGUgdmVjdG9yCisgICB3aWR0aHMgYXJlIHN1cHBvcnRlZCBwcm9wZXJseSBieSB0aGUgbWlkZGxlLWVuZC4gICovCisjZGVmaW5lIFVOSVRTX1BFUl9TSU1EX1dPUkQoTU9ERSkgXAorICAoVEFSR0VUX05FT04gPyAoVEFSR0VUX05FT05fVkVDVE9SSVpFX1FVQUQgPyAxNiA6IDgpIDogVU5JVFNfUEVSX1dPUkQpCisKKy8qIFRydWUgaWYgbmF0dXJhbCBhbGlnbm1lbnQgaXMgdXNlZCBmb3IgZG91Ymxld29yZCB0eXBlcy4gICovCisjZGVmaW5lIEFSTV9ET1VCTEVXT1JEX0FMSUdOCVRBUkdFVF9BQVBDU19CQVNFRAorCisjZGVmaW5lIERPVUJMRVdPUkRfQUxJR05NRU5UIDY0CisKKyNkZWZpbmUgUEFSTV9CT1VOREFSWSAgCTMyCisKKyNkZWZpbmUgU1RBQ0tfQk9VTkRBUlkgIChBUk1fRE9VQkxFV09SRF9BTElHTiA/IERPVUJMRVdPUkRfQUxJR05NRU5UIDogMzIpCisKKyNkZWZpbmUgUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZIFwKKyAgICAoYXJtX2FiaSA9PSBBUk1fQUJJX0FUUENTID8gNjQgOiBTVEFDS19CT1VOREFSWSkKKworI2RlZmluZSBGVU5DVElPTl9CT1VOREFSWSAgKChUQVJHRVRfVEhVTUIgJiYgb3B0aW1pemVfc2l6ZSkgPyAxNiA6IDMyKQorCisvKiBUaGUgbG93ZXN0IGJpdCBpcyB1c2VkIHRvIGluZGljYXRlIFRodW1iLW1vZGUgZnVuY3Rpb25zLCBzbyB0aGUKKyAgIHZiaXQgbXVzdCBnbyBpbnRvIHRoZSBkZWx0YSBmaWVsZCBvZiBwb2ludGVycyB0byBtZW1iZXIKKyAgIGZ1bmN0aW9ucy4gICovCisjZGVmaW5lIFRBUkdFVF9QVFJNRU1GVU5DX1ZCSVRfTE9DQVRJT04gcHRybWVtZnVuY192Yml0X2luX2RlbHRhCisKKyNkZWZpbmUgRU1QVFlfRklFTERfQk9VTkRBUlkgIDMyCisKKyNkZWZpbmUgQklHR0VTVF9BTElHTk1FTlQgKEFSTV9ET1VCTEVXT1JEX0FMSUdOID8gRE9VQkxFV09SRF9BTElHTk1FTlQgOiAzMikKKworLyogWFhYIEJsYWggLS0gdGhpcyBtYWNybyBpcyB1c2VkIGRpcmVjdGx5IGJ5IGxpYm9iamMuICBTaW5jZSBpdAorICAgc3VwcG9ydHMgbm8gdmVjdG9yIG1vZGVzLCBjdXQgb3V0IHRoZSBjb21wbGV4aXR5IGFuZCBmYWxsIGJhY2sKKyAgIG9uIEJJR0dFU1RfRklFTERfQUxJR05NRU5ULiAgKi8KKyNpZmRlZiBJTl9UQVJHRVRfTElCUworI2RlZmluZSBCSUdHRVNUX0ZJRUxEX0FMSUdOTUVOVCA2NAorI2VuZGlmCisKKy8qIE1ha2Ugc3RyaW5ncyB3b3JkLWFsaWduZWQgc28gc3RyY3B5IGZyb20gY29uc3RhbnRzIHdpbGwgYmUgZmFzdGVyLiAgKi8KKyNkZWZpbmUgQ09OU1RBTlRfQUxJR05NRU5UX0ZBQ1RPUiAoVEFSR0VUX1RIVU1CIHx8ICEgYXJtX3R1bmVfeHNjYWxlID8gMSA6IDIpCisKKyNkZWZpbmUgQ09OU1RBTlRfQUxJR05NRU5UKEVYUCwgQUxJR04pCQkJCVwKKyAgICgoVFJFRV9DT0RFIChFWFApID09IFNUUklOR19DU1QJCQkJXAorICAgICAmJiAhb3B0aW1pemVfc2l6ZQkJCQkJCVwKKyAgICAgJiYgKEFMSUdOKSA8IEJJVFNfUEVSX1dPUkQgKiBDT05TVEFOVF9BTElHTk1FTlRfRkFDVE9SKQlcCisgICAgPyBCSVRTX1BFUl9XT1JEICogQ09OU1RBTlRfQUxJR05NRU5UX0ZBQ1RPUiA6IChBTElHTikpCisKKy8qIEFsaWduIGRlZmluaXRpb25zIG9mIGFycmF5cywgdW5pb25zIGFuZCBzdHJ1Y3R1cmVzIHNvIHRoYXQKKyAgIGluaXRpYWxpemF0aW9ucyBhbmQgY29waWVzIGNhbiBiZSBtYWRlIG1vcmUgZWZmaWNpZW50LiAgVGhpcyBpcyBub3QKKyAgIEFCSS1jaGFuZ2luZywgc28gaXQgb25seSBhZmZlY3RzIHBsYWNlcyB3aGVyZSB3ZSBjYW4gc2VlIHRoZQorICAgZGVmaW5pdGlvbi4gICovCisjZGVmaW5lIERBVEFfQUxJR05NRU5UKEVYUCwgQUxJR04pCQkJCQlcCisgICgoKChBTElHTikgPCBCSVRTX1BFUl9XT1JEKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJiYgKFRSRUVfQ09ERSAoRVhQKSA9PSBBUlJBWV9UWVBFCQkJCQlcCisJfHwgVFJFRV9DT0RFIChFWFApID09IFVOSU9OX1RZUEUJCQkJXAorCXx8IFRSRUVfQ09ERSAoRVhQKSA9PSBSRUNPUkRfVFlQRSkpID8gQklUU19QRVJfV09SRCA6IChBTElHTikpCisKKy8qIFNpbWlsYXJseSwgbWFrZSBzdXJlIHRoYXQgb2JqZWN0cyBvbiB0aGUgc3RhY2sgYXJlIHNlbnNpYmx5IGFsaWduZWQuICAqLworI2RlZmluZSBMT0NBTF9BTElHTk1FTlQoRVhQLCBBTElHTikgREFUQV9BTElHTk1FTlQoRVhQLCBBTElHTikKKworLyogU2V0dGluZyBTVFJVQ1RVUkVfU0laRV9CT1VOREFSWSB0byAzMiBwcm9kdWNlcyBtb3JlIGVmZmljaWVudCBjb2RlLCBidXQgdGhlCisgICB2YWx1ZSBzZXQgaW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgdGhpcyB0b29sY2hhaW4gd2FzIDgsIHdoaWNoIHByb2R1Y2VzIG1vcmUKKyAgIGNvbXBhY3Qgc3RydWN0dXJlcy4gIFRoZSBjb21tYW5kIGxpbmUgb3B0aW9uIC1tc3RydWN0dXJlX3NpemVfYm91bmRhcnk9PG4+CisgICBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhpcyB2YWx1ZS4gIEZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIEFSTSBTREsKKyAgIGhvd2V2ZXIgdGhlIHZhbHVlIHNob3VsZCBiZSBsZWZ0IGF0IDMyLiAgQVJNIFNEVCBSZWZlcmVuY2UgTWFudWFsIChBUk0gRFVJCisgICAwMDIwRCkgcGFnZSAyLTIwIHNheXMgIlN0cnVjdHVyZXMgYXJlIGFsaWduZWQgb24gd29yZCBib3VuZGFyaWVzIi4KKyAgIFRoZSBBQVBDUyBzcGVjaWZpZXMgYSB2YWx1ZSBvZiA4LiAgKi8KKyNkZWZpbmUgU1RSVUNUVVJFX1NJWkVfQk9VTkRBUlkgYXJtX3N0cnVjdHVyZV9zaXplX2JvdW5kYXJ5CitleHRlcm4gaW50IGFybV9zdHJ1Y3R1cmVfc2l6ZV9ib3VuZGFyeTsKKworLyogVGhpcyBpcyB0aGUgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGFybV9zdHJ1Y3R1cmVfc2l6ZV9ib3VuZGFyeS4gIElmIGEKKyAgIHBhcnRpY3VsYXIgYXJtIHRhcmdldCB3YW50cyB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgaXQgc2hvdWxkIGNoYW5nZQorICAgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBtYWNybywgbm90IFNUUlVDVFVSRV9TSVpFX0JPVU5EQVJZLiAgU2VlIG5ldGJzZC5oCisgICBmb3IgYW4gZXhhbXBsZSBvZiB0aGlzLiAgKi8KKyNpZm5kZWYgREVGQVVMVF9TVFJVQ1RVUkVfU0laRV9CT1VOREFSWQorI2RlZmluZSBERUZBVUxUX1NUUlVDVFVSRV9TSVpFX0JPVU5EQVJZIDMyCisjZW5kaWYKKworLyogTm9uemVybyBpZiBtb3ZlIGluc3RydWN0aW9ucyB3aWxsIGFjdHVhbGx5IGZhaWwgdG8gd29yaworICAgd2hlbiBnaXZlbiB1bmFsaWduZWQgZGF0YS4gICovCisjZGVmaW5lIFNUUklDVF9BTElHTk1FTlQgMQorCisvKiB3Y2hhcl90IGlzIHVuc2lnbmVkIHVuZGVyIHRoZSBBQVBDUy4gICovCisjaWZuZGVmIFdDSEFSX1RZUEUKKyNkZWZpbmUgV0NIQVJfVFlQRSAoVEFSR0VUX0FBUENTX0JBU0VEID8gInVuc2lnbmVkIGludCIgOiAiaW50IikKKworI2RlZmluZSBXQ0hBUl9UWVBFX1NJWkUgQklUU19QRVJfV09SRAorI2VuZGlmCisKKyNpZm5kZWYgU0laRV9UWVBFCisjZGVmaW5lIFNJWkVfVFlQRSAoVEFSR0VUX0FBUENTX0JBU0VEID8gInVuc2lnbmVkIGludCIgOiAibG9uZyB1bnNpZ25lZCBpbnQiKQorI2VuZGlmCisKKyNpZm5kZWYgUFRSRElGRl9UWVBFCisjZGVmaW5lIFBUUkRJRkZfVFlQRSAoVEFSR0VUX0FBUENTX0JBU0VEID8gImludCIgOiAibG9uZyBpbnQiKQorI2VuZGlmCisKKy8qIEFBUENTIHJlcXVpcmVzIHRoYXQgc3RydWN0dXJlIGFsaWdubWVudCBpcyBhZmZlY3RlZCBieSBiaXRmaWVsZHMuICAqLworI2lmbmRlZiBQQ0NfQklURklFTERfVFlQRV9NQVRURVJTCisjZGVmaW5lIFBDQ19CSVRGSUVMRF9UWVBFX01BVFRFUlMgVEFSR0VUX0FBUENTX0JBU0VECisjZW5kaWYKKworDAorLyogU3RhbmRhcmQgcmVnaXN0ZXIgdXNhZ2UuICAqLworCisvKiBSZWdpc3RlciBhbGxvY2F0aW9uIGluIEFSTSBQcm9jZWR1cmUgQ2FsbCBTdGFuZGFyZCAoYXMgdXNlZCBvbiBSSVNDaVgpOgorICAgKFMgLSBzYXZlZCBvdmVyIGNhbGwpLgorCisJcjAJICAgKglhcmd1bWVudCB3b3JkL2ludGVnZXIgcmVzdWx0CisJcjEtcjMJCWFyZ3VtZW50IHdvcmQKKworCXI0LXI4CSAgICAgUwlyZWdpc3RlciB2YXJpYWJsZQorCXI5CSAgICAgUwkocmZwKSByZWdpc3RlciB2YXJpYWJsZSAocmVhbCBmcmFtZSBwb2ludGVyKQorCisJcjEwICAJICAgRiBTCShzbCkgc3RhY2sgbGltaXQgKHVzZWQgYnkgLW1hcGNzLXN0YWNrLWNoZWNrKQorCXIxMSAJICAgRiBTCShmcCkgYXJndW1lbnQgcG9pbnRlcgorCXIxMgkJKGlwKSB0ZW1wIHdvcmtzcGFjZQorCXIxMyAgCSAgIEYgUwkoc3ApIGxvd2VyIGVuZCBvZiBjdXJyZW50IHN0YWNrIGZyYW1lCisJcjE0CQkobHIpIGxpbmsgYWRkcmVzcy93b3Jrc3BhY2UKKwlyMTUJICAgRgkocGMpIHByb2dyYW0gY291bnRlcgorCisJZjAJCWZsb2F0aW5nIHBvaW50IHJlc3VsdAorCWYxLWYzCQlmbG9hdGluZyBwb2ludCBzY3JhdGNoCisKKwlmNC1mNwkgICAgIFMJZmxvYXRpbmcgcG9pbnQgdmFyaWFibGUKKworCWNjCQlUaGlzIGlzIE5PVCBhIHJlYWwgcmVnaXN0ZXIsIGJ1dCBpcyB1c2VkIGludGVybmFsbHkKKwkgICAgICAgICAgICAgICAgdG8gcmVwcmVzZW50IHRoaW5ncyB0aGF0IHVzZSBvciBzZXQgdGhlIGNvbmRpdGlvbgorCQkJY29kZXMuCisJc2ZwICAgICAgICAgICAgIFRoaXMgaXNuJ3QgZWl0aGVyLiAgSXQgaXMgdXNlZCBkdXJpbmcgcnRsIGdlbmVyYXRpb24KKwkgICAgICAgICAgICAgICAgc2luY2UgdGhlIG9mZnNldCBiZXR3ZWVuIHRoZSBmcmFtZSBwb2ludGVyIGFuZCB0aGUKKwkJCWF1dG8ncyBpc24ndCBrbm93biB1bnRpbCBhZnRlciByZWdpc3RlciBhbGxvY2F0aW9uLgorCWFmcAkJTm9yIHRoaXMsIHdlIG9ubHkgbmVlZCB0aGlzIGJlY2F1c2Ugb2Ygbm9uLWxvY2FsCisJICAgICAgICAgICAgICAgIGdvdG8uICBXaXRob3V0IGl0IGZwIGFwcGVhcnMgdG8gYmUgdXNlZCBhbmQgdGhlCisJCQllbGltaW5hdGlvbiBjb2RlIHdvbid0IGdldCByaWQgb2Ygc2ZwLiAgSXQgdHJhY2tzCisJCQlmcCBleGFjdGx5IGF0IGFsbCB0aW1lcy4KKworICAgKjogU2VlIENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFICAqLworCisvKgorICAJbXZmMAkJQ2lycnVzIGZsb2F0aW5nIHBvaW50IHJlc3VsdAorCW12ZjEtbXZmMwlDaXJydXMgZmxvYXRpbmcgcG9pbnQgc2NyYXRjaAorCW12ZjQtbXZmMTUgICBTCUNpcnJ1cyBmbG9hdGluZyBwb2ludCB2YXJpYWJsZS4gICovCisKKy8qCXMwLXMxNQkJVkZQIHNjcmF0Y2ggKGFrYSBkMC1kNykuCisJczE2LXMzMQkgICAgICBTCVZGUCB2YXJpYWJsZSAoYWthIGQ4LWQxNSkuCisJdmZwY2MJCU5vdCBhIHJlYWwgcmVnaXN0ZXIuICBSZXByZXNlbnRzIHRoZSBWRlAgY29uZGl0aW9uCisJCQljb2RlIGZsYWdzLiAgKi8KKworLyogVGhlIHN0YWNrIGJhY2t0cmFjZSBzdHJ1Y3R1cmUgaXMgYXMgZm9sbG93czoKKyAgZnAgcG9pbnRzIHRvIGhlcmU6ICB8ICBzYXZlIGNvZGUgcG9pbnRlciAgfCAgICAgIFtmcF0KKyAgICAgICAgICAgICAgICAgICAgICB8ICByZXR1cm4gbGluayB2YWx1ZSAgfCAgICAgIFtmcCwgIy00XQorICAgICAgICAgICAgICAgICAgICAgIHwgIHJldHVybiBzcCB2YWx1ZSAgICB8ICAgICAgW2ZwLCAjLThdCisgICAgICAgICAgICAgICAgICAgICAgfCAgcmV0dXJuIGZwIHZhbHVlICAgIHwgICAgICBbZnAsICMtMTJdCisgICAgICAgICAgICAgICAgICAgICBbfCAgc2F2ZWQgcjEwIHZhbHVlICAgIHxdCisgICAgICAgICAgICAgICAgICAgICBbfCAgc2F2ZWQgcjkgdmFsdWUgICAgIHxdCisgICAgICAgICAgICAgICAgICAgICBbfCAgc2F2ZWQgcjggdmFsdWUgICAgIHxdCisgICAgICAgICAgICAgICAgICAgICBbfCAgc2F2ZWQgcjcgdmFsdWUgICAgIHxdCisgICAgICAgICAgICAgICAgICAgICBbfCAgc2F2ZWQgcjYgdmFsdWUgICAgIHxdCisgICAgICAgICAgICAgICAgICAgICBbfCAgc2F2ZWQgcjUgdmFsdWUgICAgIHxdCisgICAgICAgICAgICAgICAgICAgICBbfCAgc2F2ZWQgcjQgdmFsdWUgICAgIHxdCisgICAgICAgICAgICAgICAgICAgICBbfCAgc2F2ZWQgcjMgdmFsdWUgICAgIHxdCisgICAgICAgICAgICAgICAgICAgICBbfCAgc2F2ZWQgcjIgdmFsdWUgICAgIHxdCisgICAgICAgICAgICAgICAgICAgICBbfCAgc2F2ZWQgcjEgdmFsdWUgICAgIHxdCisgICAgICAgICAgICAgICAgICAgICBbfCAgc2F2ZWQgcjAgdmFsdWUgICAgIHxdCisgICAgICAgICAgICAgICAgICAgICBbfCAgc2F2ZWQgZjcgdmFsdWUgICAgIHxdICAgICB0aHJlZSB3b3JkcworICAgICAgICAgICAgICAgICAgICAgW3wgIHNhdmVkIGY2IHZhbHVlICAgICB8XSAgICAgdGhyZWUgd29yZHMKKyAgICAgICAgICAgICAgICAgICAgIFt8ICBzYXZlZCBmNSB2YWx1ZSAgICAgfF0gICAgIHRocmVlIHdvcmRzCisgICAgICAgICAgICAgICAgICAgICBbfCAgc2F2ZWQgZjQgdmFsdWUgICAgIHxdICAgICB0aHJlZSB3b3JkcworICByMC1yMyBhcmUgbm90IG5vcm1hbGx5IHNhdmVkIGluIGEgQyBmdW5jdGlvbi4gICovCisKKy8qIDEgZm9yIHJlZ2lzdGVycyB0aGF0IGhhdmUgcGVydmFzaXZlIHN0YW5kYXJkIHVzZXMKKyAgIGFuZCBhcmUgbm90IGF2YWlsYWJsZSBmb3IgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4gICovCisjZGVmaW5lIEZJWEVEX1JFR0lTVEVSUyBcCit7ICAgICAgICAgICAgICAgICAgICAgICBcCisgIDAsMCwwLDAsMCwwLDAsMCwJXAorICAwLDAsMCwwLDAsMSwwLDEsCVwKKyAgMCwwLDAsMCwwLDAsMCwwLAlcCisgIDEsMSwxLAkJXAorICAxLDEsMSwxLDEsMSwxLDEsCVwKKyAgMSwxLDEsMSwxLDEsMSwxLAlcCisgIDEsMSwxLDEsMSwxLDEsMSwJXAorICAxLDEsMSwxLDEsMSwxLDEsCVwKKyAgMSwxLDEsMSwJCVwKKyAgMSwxLDEsMSwxLDEsMSwxLAlcCisgIDEsMSwxLDEsMSwxLDEsMSwJXAorICAxLDEsMSwxLDEsMSwxLDEsCVwKKyAgMSwxLDEsMSwxLDEsMSwxLAlcCisgIDEsMSwxLDEsMSwxLDEsMSwJXAorICAxLDEsMSwxLDEsMSwxLDEsCVwKKyAgMSwxLDEsMSwxLDEsMSwxLAlcCisgIDEsMSwxLDEsMSwxLDEsMSwJXAorICAxCQkJXAorfQorCisvKiAxIGZvciByZWdpc3RlcnMgbm90IGF2YWlsYWJsZSBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuCisgICBUaGVzZSBtdXN0IGluY2x1ZGUgdGhlIEZJWEVEX1JFR0lTVEVSUyBhbmQgYWxzbyBhbnkKKyAgIHJlZ2lzdGVycyB0aGF0IGNhbiBiZSB1c2VkIHdpdGhvdXQgYmVpbmcgc2F2ZWQuCisgICBUaGUgbGF0dGVyIG11c3QgaW5jbHVkZSB0aGUgcmVnaXN0ZXJzIHdoZXJlIHZhbHVlcyBhcmUgcmV0dXJuZWQKKyAgIGFuZCB0aGUgcmVnaXN0ZXIgd2hlcmUgc3RydWN0dXJlLXZhbHVlIGFkZHJlc3NlcyBhcmUgcGFzc2VkLgorICAgQXNpZGUgZnJvbSB0aGF0LCB5b3UgY2FuIGluY2x1ZGUgYXMgbWFueSBvdGhlciByZWdpc3RlcnMgYXMgeW91IGxpa2UuCisgICBUaGUgQ0MgaXMgbm90IHByZXNlcnZlZCBvdmVyIGZ1bmN0aW9uIGNhbGxzIG9uIHRoZSBBUk0gNiwgc28gaXQgaXMKKyAgIGVhc2llciB0byBhc3N1bWUgdGhpcyBmb3IgYWxsLiAgU0ZQIGlzIHByZXNlcnZlZCwgc2luY2UgRlAgaXMuICAqLworI2RlZmluZSBDQUxMX1VTRURfUkVHSVNURVJTICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgMSwxLDEsMSwwLDAsMCwwLAkgICAgIFwKKyAgMCwwLDAsMCwxLDEsMSwxLAkgICAgIFwKKyAgMSwxLDEsMSwwLDAsMCwwLAkgICAgIFwKKyAgMSwxLDEsCQkgICAgIFwKKyAgMSwxLDEsMSwxLDEsMSwxLAkgICAgIFwKKyAgMSwxLDEsMSwxLDEsMSwxLAkgICAgIFwKKyAgMSwxLDEsMSwxLDEsMSwxLAkgICAgIFwKKyAgMSwxLDEsMSwxLDEsMSwxLAkgICAgIFwKKyAgMSwxLDEsMSwJCSAgICAgXAorICAxLDEsMSwxLDEsMSwxLDEsCSAgICAgXAorICAxLDEsMSwxLDEsMSwxLDEsCSAgICAgXAorICAxLDEsMSwxLDEsMSwxLDEsCSAgICAgXAorICAxLDEsMSwxLDEsMSwxLDEsCSAgICAgXAorICAxLDEsMSwxLDEsMSwxLDEsCSAgICAgXAorICAxLDEsMSwxLDEsMSwxLDEsCSAgICAgXAorICAxLDEsMSwxLDEsMSwxLDEsCSAgICAgXAorICAxLDEsMSwxLDEsMSwxLDEsCSAgICAgXAorICAxCQkJICAgICBcCit9CisKKyNpZm5kZWYgU1VCVEFSR0VUX0NPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFCisjZGVmaW5lIFNVQlRBUkdFVF9DT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRQorI2VuZGlmCisKKyNkZWZpbmUgQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UJCQkJXAorewkJCQkJCQkJXAorICBpbnQgcmVnbm87CQkJCQkJCVwKKwkJCQkJCQkJXAorICBpZiAoVEFSR0VUX1NPRlRfRkxPQVQgfHwgVEFSR0VUX1RIVU1CMSB8fCAhVEFSR0VUX0ZQQSkJXAorICAgIHsJCQkJCQkJCVwKKyAgICAgIGZvciAocmVnbm8gPSBGSVJTVF9GUEFfUkVHTlVNOwkJCQlcCisJICAgcmVnbm8gPD0gTEFTVF9GUEFfUkVHTlVNOyArK3JlZ25vKQkJCVwKKwlmaXhlZF9yZWdzW3JlZ25vXSA9IGNhbGxfdXNlZF9yZWdzW3JlZ25vXSA9IDE7CQlcCisgICAgfQkJCQkJCQkJXAorCQkJCQkJCQlcCisgIGlmIChUQVJHRVRfVEhVTUIgJiYgb3B0aW1pemVfc2l6ZSkJCQkJXAorICAgIHsJCQkJCQkJCVwKKyAgICAgIC8qIFdoZW4gb3B0aW1pemluZyBmb3Igc2l6ZSwgaXQncyBiZXR0ZXIgbm90IHRvIHVzZQlcCisJIHRoZSBISSByZWdzLCBiZWNhdXNlIG9mIHRoZSBvdmVyaGVhZCBvZiBzdGFja2luZyAJXAorCSB0aGVtLiAgKi8JCQkJCQlcCisgICAgICAvKiA/Pz8gSXMgdGhpcyBzdGlsbCB0cnVlIGZvciB0aHVtYjI/ICAqLwkJCVwKKyAgICAgIGZvciAocmVnbm8gPSBGSVJTVF9ISV9SRUdOVU07CQkJCVwKKwkgICByZWdubyA8PSBMQVNUX0hJX1JFR05VTTsgKytyZWdubykJCQlcCisJZml4ZWRfcmVnc1tyZWdub10gPSBjYWxsX3VzZWRfcmVnc1tyZWdub10gPSAxOwkJXAorICAgIH0JCQkJCQkJCVwKKwkJCQkJCQkJXAorICAvKiBUaGUgbGluayByZWdpc3RlciBjYW4gYmUgY2xvYmJlcmVkIGJ5IGFueSBicmFuY2ggaW5zbiwJXAorICAgICBidXQgd2UgaGF2ZSBubyB3YXkgdG8gdHJhY2sgdGhhdCBhdCBwcmVzZW50LCBzbyBtYXJrCVwKKyAgICAgaXQgYXMgdW5hdmFpbGFibGUuICAqLwkJCQkJXAorICBpZiAoVEFSR0VUX1RIVU1CMSkJCQkJCQlcCisgICAgZml4ZWRfcmVnc1tMUl9SRUdOVU1dID0gY2FsbF91c2VkX3JlZ3NbTFJfUkVHTlVNXSA9IDE7CVwKKwkJCQkJCQkJXAorICBpZiAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUKQkJCVwKKyAgICB7CQkJCQkJCQlcCisgICAgICBpZiAoVEFSR0VUX01BVkVSSUNLKQkJCQkJXAorCXsJCQkJCQkJXAorCSAgZm9yIChyZWdubyA9IEZJUlNUX0ZQQV9SRUdOVU07CQkJXAorCSAgICAgICByZWdubyA8PSBMQVNUX0ZQQV9SRUdOVU07ICsrIHJlZ25vKQkJXAorCSAgICBmaXhlZF9yZWdzW3JlZ25vXSA9IGNhbGxfdXNlZF9yZWdzW3JlZ25vXSA9IDE7CVwKKwkgIGZvciAocmVnbm8gPSBGSVJTVF9DSVJSVVNfRlBfUkVHTlVNOwkJCVwKKwkgICAgICAgcmVnbm8gPD0gTEFTVF9DSVJSVVNfRlBfUkVHTlVNOyArKyByZWdubykJXAorCSAgICB7CQkJCQkJCVwKKwkgICAgICBmaXhlZF9yZWdzW3JlZ25vXSA9IDA7CQkJCVwKKwkgICAgICBjYWxsX3VzZWRfcmVnc1tyZWdub10gPSByZWdubyA8IEZJUlNUX0NJUlJVU19GUF9SRUdOVU0gKyA0OyBcCisJICAgIH0JCQkJCQkJXAorCX0JCQkJCQkJXAorICAgICAgaWYgKFRBUkdFVF9WRlApCQkJCQkJXAorCXsJCQkJCQkJXAorCSAgLyogVkZQdjMgcmVnaXN0ZXJzIGFyZSBkaXNhYmxlZCB3aGVuIGVhcmxpZXIgVkZQCVwKKwkgICAgIHZlcnNpb25zIGFyZSBzZWxlY3RlZCBkdWUgdG8gdGhlIGRlZmluaXRpb24gb2YJXAorCSAgICAgTEFTVF9WRlBfUkVHTlVNLiAgKi8JCQkJXAorCSAgZm9yIChyZWdubyA9IEZJUlNUX1ZGUF9SRUdOVU07CQkJXAorCSAgICAgICByZWdubyA8PSBMQVNUX1ZGUF9SRUdOVU07ICsrIHJlZ25vKQkJXAorCSAgICB7CQkJCQkJCVwKKwkgICAgICBmaXhlZF9yZWdzW3JlZ25vXSA9IDA7CQkJCVwKKwkgICAgICBjYWxsX3VzZWRfcmVnc1tyZWdub10gPSByZWdubyA8IEZJUlNUX1ZGUF9SRUdOVU0gKyAxNiBcCisJICAgICAgCXx8IHJlZ25vID49IEZJUlNUX1ZGUF9SRUdOVU0gKyAzMjsJCVwKKwkgICAgfQkJCQkJCQlcCisJfQkJCQkJCQlcCisgICAgfQkJCQkJCQkJXAorCQkJCQkJCQlcCisgIGlmIChUQVJHRVRfUkVBTExZX0lXTU1YVCkJCQkJCVwKKyAgICB7CQkJCQkJCQlcCisgICAgICByZWdubyA9IEZJUlNUX0lXTU1YVF9HUl9SRUdOVU07CQkJCVwKKyAgICAgIC8qIFRoZSAyMDAyLzEwLzA5IHJldmlzaW9uIG9mIHRoZSBYU2NhbGUgQUJJIGhhcyB3Q0cwICAgICBcCisgICAgICAgICBhbmQgd0NHMSBhcyBjYWxsLXByZXNlcnZlZCByZWdpc3RlcnMuICBUaGUgMjAwMi8xMS8yMSAgXAorICAgICAgICAgcmV2aXNpb24gY2hhbmdlZCB0aGlzIHNvIHRoYXQgYWxsIHdDRyByZWdpc3RlcnMgYXJlICAgIFwKKyAgICAgICAgIHNjcmF0Y2ggcmVnaXN0ZXJzLiAgKi8JCQkJCVwKKyAgICAgIGZvciAocmVnbm8gPSBGSVJTVF9JV01NWFRfR1JfUkVHTlVNOwkJCVwKKwkgICByZWdubyA8PSBMQVNUX0lXTU1YVF9HUl9SRUdOVU07ICsrIHJlZ25vKQkJXAorCWZpeGVkX3JlZ3NbcmVnbm9dID0gMDsJCQkJCVwKKyAgICAgIC8qIFRoZSBYU2NhbGUgQUJJIGhhcyB3UjAgLSB3UjkgYXMgc2NyYXRjaCByZWdpc3RlcnMsICAgICBcCisJIHRoZSByZXN0IGFzIGNhbGwtcHJlc2VydmVkIHJlZ2lzdGVycy4gICovCQlcCisgICAgICBmb3IgKHJlZ25vID0gRklSU1RfSVdNTVhUX1JFR05VTTsJCQkJXAorCSAgIHJlZ25vIDw9IExBU1RfSVdNTVhUX1JFR05VTTsgKysgcmVnbm8pCQlcCisJewkJCQkJCQlcCisJICBmaXhlZF9yZWdzW3JlZ25vXSA9IDA7CQkJCVwKKwkgIGNhbGxfdXNlZF9yZWdzW3JlZ25vXSA9IHJlZ25vIDwgRklSU1RfSVdNTVhUX1JFR05VTSArIDEwOyBcCisJfQkJCQkJCQlcCisgICAgfQkJCQkJCQkJXAorCQkJCQkJCQlcCisgIGlmICgodW5zaWduZWQpIFBJQ19PRkZTRVRfVEFCTEVfUkVHTlVNICE9IElOVkFMSURfUkVHTlVNKQlcCisgICAgewkJCQkJCQkJXAorICAgICAgZml4ZWRfcmVnc1tQSUNfT0ZGU0VUX1RBQkxFX1JFR05VTV0gPSAxOwkJCVwKKyAgICAgIGNhbGxfdXNlZF9yZWdzW1BJQ19PRkZTRVRfVEFCTEVfUkVHTlVNXSA9IDE7CQlcCisgICAgfQkJCQkJCQkJXAorICBlbHNlIGlmIChUQVJHRVRfQVBDU19TVEFDSykJCQkJCVwKKyAgICB7CQkJCQkJCQlcCisgICAgICBmaXhlZF9yZWdzWzEwXSAgICAgPSAxOwkJCQkJXAorICAgICAgY2FsbF91c2VkX3JlZ3NbMTBdID0gMTsJCQkJCVwKKyAgICB9CQkJCQkJCQlcCisgIC8qIC1tY2FsbGVyLXN1cGVyLWludGVyd29ya2luZyByZXNlcnZlcyByMTEgZm9yIGNhbGxzIHRvCVwKKyAgICAgX2ludGVyd29ya19yMTFfY2FsbF92aWFfck4oKS4gIE1ha2luZyB0aGUgcmVnaXN0ZXIgZ2xvYmFsCVwKKyAgICAgaXMgYW4gZWFzeSB3YXkgb2YgZW5zdXJpbmcgdGhhdCBpdCByZW1haW5zIHZhbGlkIGZvciBhbGwJXAorICAgICBjYWxscy4gICovCQkJCQkJCVwKKyAgaWYgKFRBUkdFVF9BUENTX0ZSQU1FIHx8IFRBUkdFVF9DQUxMRVJfSU5URVJXT1JLSU5HCQlcCisgICAgICB8fCBUQVJHRVRfVFBDU19GUkFNRSB8fCBUQVJHRVRfVFBDU19MRUFGX0ZSQU1FKQkJXAorICAgIHsJCQkJCQkJCVwKKyAgICAgIGZpeGVkX3JlZ3NbQVJNX0hBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU1dID0gMTsJCVwKKyAgICAgIGNhbGxfdXNlZF9yZWdzW0FSTV9IQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNXSA9IDE7CVwKKyAgICAgIGlmIChUQVJHRVRfQ0FMTEVSX0lOVEVSV09SS0lORykJCQkJXAorCWdsb2JhbF9yZWdzW0FSTV9IQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNXSA9IDE7CQlcCisgICAgfQkJCQkJCQkJXAorICBTVUJUQVJHRVRfQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UJCQkJXAorfQorCisvKiBUaGVzZSBhcmUgYSBjb3VwbGUgb2YgZXh0ZW5zaW9ucyB0byB0aGUgZm9ybWF0cyBhY2NlcHRlZAorICAgYnkgYXNtX2ZwcmludGY6CisgICAgICVAIHByaW50cyBvdXQgQVNNX0NPTU1FTlRfU1RBUlQKKyAgICAgJXIgcHJpbnRzIG91dCBSRUdJU1RFUl9QUkVGSVggcmVnX25hbWVzW2FyZ10gICovCisjZGVmaW5lIEFTTV9GUFJJTlRGX0VYVEVOU0lPTlMoRklMRSwgQVJHUywgUCkJCVwKKyAgY2FzZSAnQCc6CQkJCQkJXAorICAgIGZwdXRzIChBU01fQ09NTUVOVF9TVEFSVCwgRklMRSk7CQkJXAorICAgIGJyZWFrOwkJCQkJCVwKKwkJCQkJCQlcCisgIGNhc2UgJ3InOgkJCQkJCVwKKyAgICBmcHV0cyAoUkVHSVNURVJfUFJFRklYLCBGSUxFKTsJCQlcCisgICAgZnB1dHMgKHJlZ19uYW1lcyBbdmFfYXJnIChBUkdTLCBpbnQpXSwgRklMRSk7CVwKKyAgICBicmVhazsKKworLyogUm91bmQgWCB1cCB0byB0aGUgbmVhcmVzdCB3b3JkLiAgKi8KKyNkZWZpbmUgUk9VTkRfVVBfV09SRChYKSAoKChYKSArIDMpICYgfjMpCisKKy8qIENvbnZlcnQgZnJvbiBieXRlcyB0byBpbnRzLiAgKi8KKyNkZWZpbmUgQVJNX05VTV9JTlRTKFgpICgoKFgpICsgVU5JVFNfUEVSX1dPUkQgLSAxKSAvIFVOSVRTX1BFUl9XT1JEKQorCisvKiBUaGUgbnVtYmVyIG9mIChpbnRlZ2VyKSByZWdpc3RlcnMgcmVxdWlyZWQgdG8gaG9sZCBhIHF1YW50aXR5IG9mIHR5cGUgTU9ERS4KKyAgIEFsc28gdXNlZCBmb3IgVkZQIHJlZ2lzdGVycy4gICovCisjZGVmaW5lIEFSTV9OVU1fUkVHUyhNT0RFKQkJCQlcCisgIEFSTV9OVU1fSU5UUyAoR0VUX01PREVfU0laRSAoTU9ERSkpCisKKy8qIFRoZSBudW1iZXIgb2YgKGludGVnZXIpIHJlZ2lzdGVycyByZXF1aXJlZCB0byBob2xkIGEgcXVhbnRpdHkgb2YgVFlQRSBNT0RFLiAgKi8KKyNkZWZpbmUgQVJNX05VTV9SRUdTMihNT0RFLCBUWVBFKSAgICAgICAgICAgICAgICAgICBcCisgIEFSTV9OVU1fSU5UUyAoKE1PREUpID09IEJMS21vZGUgPyAJCVwKKyAgaW50X3NpemVfaW5fYnl0ZXMgKFRZUEUpIDogR0VUX01PREVfU0laRSAoTU9ERSkpCisKKy8qIFRoZSBudW1iZXIgb2YgKGludGVnZXIpIGFyZ3VtZW50IHJlZ2lzdGVyIGF2YWlsYWJsZS4gICovCisjZGVmaW5lIE5VTV9BUkdfUkVHUwkJNAorCisvKiBBbmQgc2ltaWxhcmx5IGZvciB0aGUgVkZQLiAgKi8KKyNkZWZpbmUgTlVNX1ZGUF9BUkdfUkVHUwkxNgorCisvKiBSZXR1cm4gdGhlIHJlZ2lzdGVyIG51bWJlciBvZiB0aGUgTid0aCAoaW50ZWdlcikgYXJndW1lbnQuICAqLworI2RlZmluZSBBUkdfUkVHSVNURVIoTikgCShOIC0gMSkKKworLyogU3BlY2lmeSB0aGUgcmVnaXN0ZXJzIHVzZWQgZm9yIGNlcnRhaW4gc3RhbmRhcmQgcHVycG9zZXMuCisgICBUaGUgdmFsdWVzIG9mIHRoZXNlIG1hY3JvcyBhcmUgcmVnaXN0ZXIgbnVtYmVycy4gICovCisKKy8qIFRoZSBudW1iZXIgb2YgdGhlIGxhc3QgYXJndW1lbnQgcmVnaXN0ZXIuICAqLworI2RlZmluZSBMQVNUX0FSR19SRUdOVU0gCUFSR19SRUdJU1RFUiAoTlVNX0FSR19SRUdTKQorCisvKiBUaGUgbnVtYmVycyBvZiB0aGUgVGh1bWIgcmVnaXN0ZXIgcmFuZ2VzLiAgKi8KKyNkZWZpbmUgRklSU1RfTE9fUkVHTlVNICAJMAorI2RlZmluZSBMQVNUX0xPX1JFR05VTSAgCTcKKyNkZWZpbmUgRklSU1RfSElfUkVHTlVNCQk4CisjZGVmaW5lIExBU1RfSElfUkVHTlVNCQkxMQorCisjaWZuZGVmIFRBUkdFVF9VTldJTkRfSU5GTworLyogV2UgdXNlIHNqbGogZXhjZXB0aW9ucyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuICAqLworI2RlZmluZSBNVVNUX1VTRV9TSkxKX0VYQ0VQVElPTlMgMQorI2VuZGlmCisKKy8qIFdlIGNhbiBnZW5lcmF0ZSBEV0FSRjIgVW53aW5kIGluZm8sIGV2ZW4gdGhvdWdoIHdlIGRvbid0IHVzZSBpdC4gICovCisjZGVmaW5lIERXQVJGMl9VTldJTkRfSU5GTyAxCisKKy8qIFVzZSByMCBhbmQgcjEgdG8gcGFzcyBleGNlcHRpb24gaGFuZGxpbmcgaW5mb3JtYXRpb24uICAqLworI2RlZmluZSBFSF9SRVRVUk5fREFUQV9SRUdOTyhOKSAoKChOKSA8IDIpID8gTiA6IElOVkFMSURfUkVHTlVNKQorCisvKiBUaGUgcmVnaXN0ZXIgdGhhdCBob2xkcyB0aGUgcmV0dXJuIGFkZHJlc3MgaW4gZXhjZXB0aW9uIGhhbmRsZXJzLiAgKi8KKyNkZWZpbmUgQVJNX0VIX1NUQUNLQURKX1JFR05VTQkyCisjZGVmaW5lIEVIX1JFVFVSTl9TVEFDS0FESl9SVFgJZ2VuX3J0eF9SRUcgKFNJbW9kZSwgQVJNX0VIX1NUQUNLQURKX1JFR05VTSkKKworLyogVGhlIG5hdGl2ZSAoTm9yY3JvZnQpIFBhc2NhbCBjb21waWxlciBmb3IgdGhlIEFSTSBwYXNzZXMgdGhlIHN0YXRpYyBjaGFpbgorICAgYXMgYW4gaW52aXNpYmxlIGxhc3QgYXJndW1lbnQgKHBvc3NpYmxlIHNpbmNlIHZhcmFyZ3MgZG9uJ3QgZXhpc3QgaW4KKyAgIFBhc2NhbCksIHNvIHRoZSBmb2xsb3dpbmcgaXMgbm90IHRydWUuICAqLworI2RlZmluZSBTVEFUSUNfQ0hBSU5fUkVHTlVNCTEyCisKKy8qIERlZmluZSB0aGlzIHRvIGJlIHdoZXJlIHRoZSByZWFsIGZyYW1lIHBvaW50ZXIgaXMgaWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvCisgICB3b3JrIG91dCB0aGUgb2Zmc2V0IGJldHdlZW4gdGhlIGZyYW1lIHBvaW50ZXIgYW5kIHRoZSBhdXRvbWF0aWMgdmFyaWFibGVzCisgICB1bnRpbCBhZnRlciByZWdpc3RlciBhbGxvY2F0aW9uIGhhcyB0YWtlbiBwbGFjZS4gIEZSQU1FX1BPSU5URVJfUkVHTlVNCisgICBzaG91bGQgcG9pbnQgdG8gYSBzcGVjaWFsIHJlZ2lzdGVyIHRoYXQgd2Ugd2lsbCBtYWtlIHN1cmUgaXMgZWxpbWluYXRlZC4KKworICAgRm9yIHRoZSBUaHVtYiB3ZSBoYXZlIGFub3RoZXIgcHJvYmxlbS4gIFRoZSBUUENTIGRlZmluZXMgdGhlIGZyYW1lIHBvaW50ZXIKKyAgIGFzIHIxMSwgYW5kIEdDQyBiZWxpZXZlcyB0aGF0IGl0IGlzIGFsd2F5cyBwb3NzaWJsZSB0byB1c2UgdGhlIGZyYW1lIHBvaW50ZXIKKyAgIGFzIGJhc2UgcmVnaXN0ZXIgZm9yIGFkZHJlc3NpbmcgcHVycG9zZXMuICAoU2VlIGNvbW1lbnRzIGluCisgICBmaW5kX3JlbG9hZHNfYWRkcmVzcygpKS4gIEJ1dCAtIHRoZSBUaHVtYiBkb2VzIG5vdCBhbGxvdyBoaWdoIHJlZ2lzdGVycywKKyAgIGluY2x1ZGluZyByMTEsIHRvIGJlIHVzZWQgYXMgYmFzZSBhZGRyZXNzIHJlZ2lzdGVycy4gIEhlbmNlIG91ciBwcm9ibGVtLgorCisgICBUaGUgc29sdXRpb24gdXNlZCBoZXJlLCBhbmQgaW4gdGhlIG9sZCB0aHVtYiBwb3J0IGlzIHRvIHVzZSByNyBpbnN0ZWFkIG9mCisgICByMTEgYXMgdGhlIGhhcmQgZnJhbWUgcG9pbnRlciBhbmQgdG8gaGF2ZSBzcGVjaWFsIGNvZGUgdG8gZ2VuZXJhdGUKKyAgIGJhY2t0cmFjZSBzdHJ1Y3R1cmVzIG9uIHRoZSBzdGFjayAoaWYgcmVxdWlyZWQgdG8gZG8gc28gdmlhIGEgY29tbWFuZCBsaW5lCisgICBvcHRpb24pIHVzaW5nIHIxMS4gIFRoaXMgaXMgdGhlIG9ubHkgJ3VzZXIgdmlzaWJsZScgdXNlIG9mIHIxMSBhcyBhIGZyYW1lCisgICBwb2ludGVyLiAgKi8KKyNkZWZpbmUgQVJNX0hBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0JMTEKKyNkZWZpbmUgVEhVTUJfSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTQkgNworCisjZGVmaW5lIEhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0JCVwKKyAgKFRBUkdFVF9BUk0JCQkJCVwKKyAgID8gQVJNX0hBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0JCVwKKyAgIDogVEhVTUJfSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTSkKKworI2RlZmluZSBGUF9SRUdOVU0JICAgICAgICAgICAgICAgIEhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0KKworLyogUmVnaXN0ZXIgdG8gdXNlIGZvciBwdXNoaW5nIGZ1bmN0aW9uIGFyZ3VtZW50cy4gICovCisjZGVmaW5lIFNUQUNLX1BPSU5URVJfUkVHTlVNCVNQX1JFR05VTQorCisvKiBBUk0gZmxvYXRpbmcgcG9pbnRlciByZWdpc3RlcnMuICAqLworI2RlZmluZSBGSVJTVF9GUEFfUkVHTlVNIAkxNgorI2RlZmluZSBMQVNUX0ZQQV9SRUdOVU0gIAkyMworI2RlZmluZSBJU19GUEFfUkVHTlVNKFJFR05VTSkgXAorICAoKChSRUdOVU0pID49IEZJUlNUX0ZQQV9SRUdOVU0pICYmICgoUkVHTlVNKSA8PSBMQVNUX0ZQQV9SRUdOVU0pKQorCisjZGVmaW5lIEZJUlNUX0lXTU1YVF9HUl9SRUdOVU0JNDMKKyNkZWZpbmUgTEFTVF9JV01NWFRfR1JfUkVHTlVNCTQ2CisjZGVmaW5lIEZJUlNUX0lXTU1YVF9SRUdOVU0JNDcKKyNkZWZpbmUgTEFTVF9JV01NWFRfUkVHTlVNCTYyCisjZGVmaW5lIElTX0lXTU1YVF9SRUdOVU0oUkVHTlVNKSBcCisgICgoKFJFR05VTSkgPj0gRklSU1RfSVdNTVhUX1JFR05VTSkgJiYgKChSRUdOVU0pIDw9IExBU1RfSVdNTVhUX1JFR05VTSkpCisjZGVmaW5lIElTX0lXTU1YVF9HUl9SRUdOVU0oUkVHTlVNKSBcCisgICgoKFJFR05VTSkgPj0gRklSU1RfSVdNTVhUX0dSX1JFR05VTSkgJiYgKChSRUdOVU0pIDw9IExBU1RfSVdNTVhUX0dSX1JFR05VTSkpCisKKy8qIEJhc2UgcmVnaXN0ZXIgZm9yIGFjY2VzcyB0byBsb2NhbCB2YXJpYWJsZXMgb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgRlJBTUVfUE9JTlRFUl9SRUdOVU0JMjUKKworLyogQmFzZSByZWdpc3RlciBmb3IgYWNjZXNzIHRvIGFyZ3VtZW50cyBvZiB0aGUgZnVuY3Rpb24uICAqLworI2RlZmluZSBBUkdfUE9JTlRFUl9SRUdOVU0JMjYKKworI2RlZmluZSBGSVJTVF9DSVJSVVNfRlBfUkVHTlVNCTI3CisjZGVmaW5lIExBU1RfQ0lSUlVTX0ZQX1JFR05VTQk0MgorI2RlZmluZSBJU19DSVJSVVNfUkVHTlVNKFJFR05VTSkgXAorICAoKChSRUdOVU0pID49IEZJUlNUX0NJUlJVU19GUF9SRUdOVU0pICYmICgoUkVHTlVNKSA8PSBMQVNUX0NJUlJVU19GUF9SRUdOVU0pKQorCisjZGVmaW5lIEZJUlNUX1ZGUF9SRUdOVU0JNjMKKyNkZWZpbmUgRDdfVkZQX1JFR05VTQkJNzggIC8qIFJlZ2lzdGVycyA3NyBhbmQgNzggPT0gVkZQIHJlZyBENy4gICovCisjZGVmaW5lIExBU1RfVkZQX1JFR05VTQlcCisgIChUQVJHRVRfVkZQRDMyID8gTEFTVF9ISV9WRlBfUkVHTlVNIDogTEFTVF9MT19WRlBfUkVHTlVNKQorCisjZGVmaW5lIElTX1ZGUF9SRUdOVU0oUkVHTlVNKSBcCisgICgoKFJFR05VTSkgPj0gRklSU1RfVkZQX1JFR05VTSkgJiYgKChSRUdOVU0pIDw9IExBU1RfVkZQX1JFR05VTSkpCisKKy8qIFZGUCByZWdpc3RlcnMgYXJlIHNwbGl0IGludG8gdHdvIHR5cGVzOiB0aG9zZSBkZWZpbmVkIGJ5IFZGUCB2ZXJzaW9ucyA8IDMKKyAgIGhhdmUgRCByZWdpc3RlcnMgb3ZlcmxhaWQgb24gY29uc2VjdXRpdmUgcGFpcnMgb2YgUyByZWdpc3RlcnMuIFZGUCB2ZXJzaW9uIDMKKyAgIGRlZmluZXMgMTYgbmV3IEQgcmVnaXN0ZXJzIChkMTYtZDMxKSB3aGljaCwgZm9yIHNpbXBsaWNpdHkgYW5kIGNvcnJlY3RuZXNzCisgICBpbiB2YXJpb3VzIHBhcnRzIG9mIHRoZSBiYWNrZW5kLCB3ZSBpbXBsZW1lbnQgYXMgImZha2UiIHNpbmdsZS1wcmVjaXNpb24KKyAgIHJlZ2lzdGVycyAod2hpY2ggd291bGQgYmUgUzMyLVM2MywgYnV0IGNhbm5vdCBiZSB1c2VkIGluIHRoYXQgd2F5KS4gIFRoZQorICAgZm9sbG93aW5nIG1hY3JvcyBkZWZpbmUgdGhlc2UgcmFuZ2VzIG9mIHJlZ2lzdGVycy4gICovCisjZGVmaW5lIExBU1RfTE9fVkZQX1JFR05VTQk5NAorI2RlZmluZSBGSVJTVF9ISV9WRlBfUkVHTlVNCTk1CisjZGVmaW5lIExBU1RfSElfVkZQX1JFR05VTQkxMjYKKworI2RlZmluZSBWRlBfUkVHTk9fT0tfRk9SX1NJTkdMRShSRUdOVU0pIFwKKyAgKChSRUdOVU0pIDw9IExBU1RfTE9fVkZQX1JFR05VTSkKKworLyogREZtb2RlIHZhbHVlcyBhcmUgb25seSB2YWxpZCBpbiBldmVuIHJlZ2lzdGVyIHBhaXJzLiAgKi8KKyNkZWZpbmUgVkZQX1JFR05PX09LX0ZPUl9ET1VCTEUoUkVHTlVNKSBcCisgICgoKChSRUdOVU0pIC0gRklSU1RfVkZQX1JFR05VTSkgJiAxKSA9PSAwKQorCisvKiBOZW9uIFF1YWQgdmFsdWVzIG11c3Qgc3RhcnQgYXQgYSBtdWx0aXBsZSBvZiBmb3VyIHJlZ2lzdGVycy4gICovCisjZGVmaW5lIE5FT05fUkVHTk9fT0tfRk9SX1FVQUQoUkVHTlVNKSBcCisgICgoKChSRUdOVU0pIC0gRklSU1RfVkZQX1JFR05VTSkgJiAzKSA9PSAwKQorCisvKiBOZW9uIHN0cnVjdHVyZXMgb2YgdmVjdG9ycyBtdXN0IGJlIGluIGV2ZW4gcmVnaXN0ZXIgcGFpcnMgYW5kIHRoZXJlCisgICBtdXN0IGJlIGVub3VnaCByZWdpc3RlcnMgYXZhaWxhYmxlLiAgQmVjYXVzZSBvZiB2YXJpb3VzIHBhdHRlcm5zCisgICByZXF1aXJpbmcgcXVhZCByZWdpc3RlcnMsIHdlIHJlcXVpcmUgdGhlbSB0byBzdGFydCBhdCBhIG11bHRpcGxlIG9mCisgICBmb3VyLiAgKi8KKyNkZWZpbmUgTkVPTl9SRUdOT19PS19GT1JfTlJFR1MoUkVHTlVNLCBOKSBcCisgICgoKChSRUdOVU0pIC0gRklSU1RfVkZQX1JFR05VTSkgJiAzKSA9PSAwIFwKKyAgICYmIChMQVNUX1ZGUF9SRUdOVU0gLSAoUkVHTlVNKSA+PSAyICogKE4pIC0gMSkpCisKKy8qIFRoZSBudW1iZXIgb2YgaGFyZCByZWdpc3RlcnMgaXMgMTYgQVJNICsgOCBGUEEgKyAxIENDICsgMSBTRlAgKyAxIEFGUC4gICovCisvKiArIDE2IENpcnJ1cyByZWdpc3RlcnMgdGFrZSB1cyB1cCB0byA0My4gICovCisvKiBJbnRlbCBXaXJlbGVzcyBNTVggVGVjaG5vbG9neSByZWdpc3RlcnMgYWRkIDE2ICsgNCBtb3JlLiAgKi8KKy8qIFZGUCAoVkZQMykgYWRkcyAzMiAoNjQpICsgMSBtb3JlLiAgKi8KKyNkZWZpbmUgRklSU1RfUFNFVURPX1JFR0lTVEVSICAgMTI4CisKKyNkZWZpbmUgREJYX1JFR0lTVEVSX05VTUJFUihSRUdOTykgYXJtX2RieF9yZWdpc3Rlcl9udW1iZXIgKFJFR05PKQorCisvKiBWYWx1ZSBzaG91bGQgYmUgbm9uemVybyBpZiBmdW5jdGlvbnMgbXVzdCBoYXZlIGZyYW1lIHBvaW50ZXJzLgorICAgWmVybyBtZWFucyB0aGUgZnJhbWUgcG9pbnRlciBuZWVkIG5vdCBiZSBzZXQgdXAgKGFuZCBwYXJtcyBtYXkgYmUgYWNjZXNzZWQKKyAgIHZpYSB0aGUgc3RhY2sgcG9pbnRlcikgaW4gZnVuY3Rpb25zIHRoYXQgc2VlbSBzdWl0YWJsZS4KKyAgIElmIHdlIGhhdmUgdG8gaGF2ZSBhIGZyYW1lIHBvaW50ZXIgd2UgbWlnaHQgYXMgd2VsbCBtYWtlIHVzZSBvZiBpdC4KKyAgIEFQQ1Mgc2F5cyB0aGF0IHRoZSBmcmFtZSBwb2ludGVyIGRvZXMgbm90IG5lZWQgdG8gYmUgcHVzaGVkIGluIGxlYWYKKyAgIGZ1bmN0aW9ucywgb3Igc2ltcGxlIHRhaWwgY2FsbCBmdW5jdGlvbnMuICAqLworCisjaWZuZGVmIFNVQlRBUkdFVF9GUkFNRV9QT0lOVEVSX1JFUVVJUkVECisjZGVmaW5lIFNVQlRBUkdFVF9GUkFNRV9QT0lOVEVSX1JFUVVJUkVEIDAKKyNlbmRpZgorCisvKiBSZXR1cm4gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGhhcmQgcmVncyBuZWVkZWQgc3RhcnRpbmcgYXQgcmVnIFJFR05PCisgICB0byBob2xkIHNvbWV0aGluZyBvZiBtb2RlIE1PREUuCisgICBUaGlzIGlzIG9yZGluYXJpbHkgdGhlIGxlbmd0aCBpbiB3b3JkcyBvZiBhIHZhbHVlIG9mIG1vZGUgTU9ERQorICAgYnV0IGNhbiBiZSBsZXNzIGZvciBjZXJ0YWluIG1vZGVzIGluIHNwZWNpYWwgbG9uZyByZWdpc3RlcnMuCisKKyAgIE9uIHRoZSBBUk0gcmVncyBhcmUgVU5JVFNfUEVSX1dPUkQgYml0cyB3aWRlOyBGUEEgcmVncyBjYW4gaG9sZCBhbnkgRlAKKyAgIG1vZGUuICAqLworI2RlZmluZSBIQVJEX1JFR05PX05SRUdTKFJFR05PLCBNT0RFKSAgCVwKKyAgKChUQVJHRVRfMzJCSVQJCQlcCisgICAgJiYgUkVHTk8gPj0gRklSU1RfRlBBX1JFR05VTQlcCisgICAgJiYgUkVHTk8gIT0gRlJBTUVfUE9JTlRFUl9SRUdOVU0JXAorICAgICYmIFJFR05PICE9IEFSR19QT0lOVEVSX1JFR05VTSkJXAorICAgICYmICFJU19WRlBfUkVHTlVNIChSRUdOTykJCVwKKyAgID8gMSA6IEFSTV9OVU1fUkVHUyAoTU9ERSkpCisKKy8qIFJldHVybiB0cnVlIGlmIFJFR05PIGlzIHN1aXRhYmxlIGZvciBob2xkaW5nIGEgcXVhbnRpdHkgb2YgdHlwZSBNT0RFLiAgKi8KKyNkZWZpbmUgSEFSRF9SRUdOT19NT0RFX09LKFJFR05PLCBNT0RFKQkJCQkJXAorICBhcm1faGFyZF9yZWdub19tb2RlX29rICgoUkVHTk8pLCAoTU9ERSkpCisKKy8qIFZhbHVlIGlzIDEgaWYgaXQgaXMgYSBnb29kIGlkZWEgdG8gdGllIHR3byBwc2V1ZG8gcmVnaXN0ZXJzCisgICB3aGVuIG9uZSBoYXMgbW9kZSBNT0RFMSBhbmQgb25lIGhhcyBtb2RlIE1PREUyLgorICAgSWYgSEFSRF9SRUdOT19NT0RFX09LIGNvdWxkIHByb2R1Y2UgZGlmZmVyZW50IHZhbHVlcyBmb3IgTU9ERTEgYW5kIE1PREUyLAorICAgZm9yIGFueSBoYXJkIHJlZywgdGhlbiB0aGlzIG11c3QgYmUgMCBmb3IgY29ycmVjdCBvdXRwdXQuICAqLworI2RlZmluZSBNT0RFU19USUVBQkxFX1AoTU9ERTEsIE1PREUyKSAgXAorICAoR0VUX01PREVfQ0xBU1MgKE1PREUxKSA9PSBHRVRfTU9ERV9DTEFTUyAoTU9ERTIpKQorCisjZGVmaW5lIFZBTElEX0lXTU1YVF9SRUdfTU9ERShNT0RFKSBcCisgKGFybV92ZWN0b3JfbW9kZV9zdXBwb3J0ZWRfcCAoTU9ERSkgfHwgKE1PREUpID09IERJbW9kZSkKKworLyogTW9kZXMgdmFsaWQgZm9yIE5lb24gRCByZWdpc3RlcnMuICAqLworI2RlZmluZSBWQUxJRF9ORU9OX0RSRUdfTU9ERShNT0RFKSBcCisgICgoTU9ERSkgPT0gVjJTSW1vZGUgfHwgKE1PREUpID09IFY0SEltb2RlIHx8IChNT0RFKSA9PSBWOFFJbW9kZSBcCisgICB8fCAoTU9ERSkgPT0gVjJTRm1vZGUgfHwgKE1PREUpID09IERJbW9kZSkKKworLyogTW9kZXMgdmFsaWQgZm9yIE5lb24gUSByZWdpc3RlcnMuICAqLworI2RlZmluZSBWQUxJRF9ORU9OX1FSRUdfTU9ERShNT0RFKSBcCisgICgoTU9ERSkgPT0gVjRTSW1vZGUgfHwgKE1PREUpID09IFY4SEltb2RlIHx8IChNT0RFKSA9PSBWMTZRSW1vZGUgXAorICAgfHwgKE1PREUpID09IFY0U0Ztb2RlIHx8IChNT0RFKSA9PSBWMkRJbW9kZSkKKworLyogU3RydWN0dXJlIG1vZGVzIHZhbGlkIGZvciBOZW9uIHJlZ2lzdGVycy4gICovCisjZGVmaW5lIFZBTElEX05FT05fU1RSVUNUX01PREUoTU9ERSkgXAorICAoKE1PREUpID09IFRJbW9kZSB8fCAoTU9ERSkgPT0gRUltb2RlIHx8IChNT0RFKSA9PSBPSW1vZGUgXAorICAgfHwgKE1PREUpID09IENJbW9kZSB8fCAoTU9ERSkgPT0gWEltb2RlKQorCisvKiBUaGUgb3JkZXIgaW4gd2hpY2ggcmVnaXN0ZXIgc2hvdWxkIGJlIGFsbG9jYXRlZC4gIEl0IGlzIGdvb2QgdG8gdXNlIGlwCisgICBzaW5jZSBubyBzYXZpbmcgaXMgcmVxdWlyZWQgKHRob3VnaCBjYWxscyBjbG9iYmVyIGl0KSBhbmQgaXQgbmV2ZXIgY29udGFpbnMKKyAgIGZ1bmN0aW9uIHBhcmFtZXRlcnMuICBJdCBpcyBxdWl0ZSBnb29kIHRvIHVzZSBsciBzaW5jZSBvdGhlciBjYWxscyBtYXkKKyAgIGNsb2JiZXIgaXQgYW55d2F5LiAgQWxsb2NhdGUgcjAgdGhyb3VnaCByMyBpbiByZXZlcnNlIG9yZGVyIHNpbmNlIHIzIGlzCisgICBsZWFzdCBsaWtlbHkgdG8gY29udGFpbiBhIGZ1bmN0aW9uIHBhcmFtZXRlcjsgaW4gYWRkaXRpb24gcmVzdWx0cyBhcmUKKyAgIHJldHVybmVkIGluIHIwLgorICAgRm9yIFZGUC9WRlB2MywgYWxsb2NhdGUgRDE2LUQzMSBmaXJzdCwgdGhlbiBjYWxsZXItc2F2ZWQgcmVnaXN0ZXJzIChEMC1ENyksCisgICB0aGVuIEQ4LUQxNS4gIFRoZSByZWFzb24gZm9yIGRvaW5nIHRoaXMgaXMgdG8gYXR0ZW1wdCB0byByZWR1Y2UgcmVnaXN0ZXIKKyAgIHByZXNzdXJlIHdoZW4gYm90aCBzaW5nbGUtIGFuZCBkb3VibGUtcHJlY2lzaW9uIHJlZ2lzdGVycyBhcmUgdXNlZCBpbiBhCisgICBmdW5jdGlvbi4gICovCisKKyNkZWZpbmUgUkVHX0FMTE9DX09SREVSCQkJCVwKK3sJCQkJCQlcCisgICAgIDMsICAyLCAgMSwgIDAsIDEyLCAxNCwgIDQsICA1LAkJXAorICAgICA2LCAgNywgIDgsIDEwLCAgOSwgMTEsIDEzLCAxNSwJCVwKKyAgICAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsCQlcCisgICAgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LAkJXAorICAgIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwJCVwKKyAgICA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsCQlcCisgICAgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LAkJXAorICAgIDU5LCA2MCwgNjEsIDYyLAkJCQlcCisgICAgMjQsIDI1LCAyNiwJCQkJCVwKKyAgICA5NSwgIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLAlcCisgICAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwJXAorICAgMTExLCAxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsCVwKKyAgIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LAlcCisgICAgNzgsICA3NywgIDc2LCAgNzUsICA3NCwgIDczLCAgNzIsICA3MSwJXAorICAgIDcwLCAgNjksICA2OCwgIDY3LCAgNjYsICA2NSwgIDY0LCAgNjMsCVwKKyAgICA3OSwgIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LAlcCisgICAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwJXAorICAgMTI3CQkJCQkJXAorfQorCisvKiBVc2UgZGlmZmVyZW50IHJlZ2lzdGVyIGFsbG9jIG9yZGVyaW5nIGZvciBUaHVtYi4gICovCisjZGVmaW5lIE9SREVSX1JFR1NfRk9SX0xPQ0FMX0FMTE9DIGFybV9vcmRlcl9yZWdzX2Zvcl9sb2NhbF9hbGxvYyAoKQorCisvKiBJbnRlcnJ1cHQgZnVuY3Rpb25zIGNhbiBvbmx5IHVzZSByZWdpc3RlcnMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbgorICAgc2F2ZWQgYnkgdGhlIHByb2xvZ3VlLCBldmVuIGlmIHRoZXkgd291bGQgbm9ybWFsbHkgYmUKKyAgIGNhbGwtY2xvYmJlcmVkLiAgKi8KKyNkZWZpbmUgSEFSRF9SRUdOT19SRU5BTUVfT0soU1JDLCBEU1QpCQkJCQlcCisJKCEgSVNfSU5URVJSVVBUIChjZnVuLT5tYWNoaW5lLT5mdW5jX3R5cGUpIHx8CQkJXAorCSBkZl9yZWdzX2V2ZXJfbGl2ZV9wIChEU1QpKQorDAorLyogUmVnaXN0ZXIgYW5kIGNvbnN0YW50IGNsYXNzZXMuICAqLworCisvKiBSZWdpc3RlciBjbGFzc2VzOiB1c2VkIHRvIGJlIHNpbXBsZSwganVzdCBhbGwgQVJNIHJlZ3Mgb3IgYWxsIEZQQSByZWdzCisgICBOb3cgdGhhdCB0aGUgVGh1bWIgaXMgaW52b2x2ZWQgaXQgaGFzIGJlY29tZSBtb3JlIGNvbXBsaWNhdGVkLiAgKi8KK2VudW0gcmVnX2NsYXNzCit7CisgIE5PX1JFR1MsCisgIEZQQV9SRUdTLAorICBDSVJSVVNfUkVHUywKKyAgVkZQX0QwX0Q3X1JFR1MsCisgIFZGUF9MT19SRUdTLAorICBWRlBfSElfUkVHUywKKyAgVkZQX1JFR1MsCisgIElXTU1YVF9HUl9SRUdTLAorICBJV01NWFRfUkVHUywKKyAgTE9fUkVHUywKKyAgU1RBQ0tfUkVHLAorICBCQVNFX1JFR1MsCisgIEhJX1JFR1MsCisgIENDX1JFRywKKyAgVkZQQ0NfUkVHLAorICBHRU5FUkFMX1JFR1MsCisgIENPUkVfUkVHUywKKyAgQUxMX1JFR1MsCisgIExJTV9SRUdfQ0xBU1NFUworfTsKKworI2RlZmluZSBOX1JFR19DTEFTU0VTICAoaW50KSBMSU1fUkVHX0NMQVNTRVMKKworLyogR2l2ZSBuYW1lcyBvZiByZWdpc3RlciBjbGFzc2VzIGFzIHN0cmluZ3MgZm9yIGR1bXAgZmlsZS4gICovCisjZGVmaW5lIFJFR19DTEFTU19OQU1FUyAgXAorewkJCVwKKyAgIk5PX1JFR1MiLAkJXAorICAiRlBBX1JFR1MiLAkJXAorICAiQ0lSUlVTX1JFR1MiLAlcCisgICJWRlBfRDBfRDdfUkVHUyIsCVwKKyAgIlZGUF9MT19SRUdTIiwJXAorICAiVkZQX0hJX1JFR1MiLAlcCisgICJWRlBfUkVHUyIsCQlcCisgICJJV01NWFRfR1JfUkVHUyIsCVwKKyAgIklXTU1YVF9SRUdTIiwJXAorICAiTE9fUkVHUyIsCQlcCisgICJTVEFDS19SRUciLAkJXAorICAiQkFTRV9SRUdTIiwJCVwKKyAgIkhJX1JFR1MiLAkJXAorICAiQ0NfUkVHIiwJCVwKKyAgIlZGUENDX1JFRyIsCQlcCisgICJHRU5FUkFMX1JFR1MiLAlcCisgICJDT1JFX1JFR1MiLAkJXAorICAiQUxMX1JFR1MiLAkJXAorfQorCisvKiBEZWZpbmUgd2hpY2ggcmVnaXN0ZXJzIGZpdCBpbiB3aGljaCBjbGFzc2VzLgorICAgVGhpcyBpcyBhbiBpbml0aWFsaXplciBmb3IgYSB2ZWN0b3Igb2YgSEFSRF9SRUdfU0VUCisgICBvZiBsZW5ndGggTl9SRUdfQ0xBU1NFUy4gICovCisjZGVmaW5lIFJFR19DTEFTU19DT05URU5UUwkJCQkJCVwKK3sJCQkJCQkJCQlcCisgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LCAvKiBOT19SRUdTICAqLwlcCisgIHsgMHgwMEZGMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LCAvKiBGUEFfUkVHUyAqLwlcCisgIHsgMHhGODAwMDAwMCwgMHgwMDAwMDdGRiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LCAvKiBDSVJSVVNfUkVHUyAqLwlcCisgIHsgMHgwMDAwMDAwMCwgMHg4MDAwMDAwMCwgMHgwMDAwN0ZGRiwgMHgwMDAwMDAwMCB9LCAvKiBWRlBfRDBfRDdfUkVHUyAgKi8gXAorICB7IDB4MDAwMDAwMDAsIDB4ODAwMDAwMDAsIDB4N0ZGRkZGRkYsIDB4MDAwMDAwMDAgfSwgLyogVkZQX0xPX1JFR1MgICovIFwKKyAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDgwMDAwMDAwLCAweDdGRkZGRkZGIH0sIC8qIFZGUF9ISV9SRUdTICAqLyBcCisgIHsgMHgwMDAwMDAwMCwgMHg4MDAwMDAwMCwgMHhGRkZGRkZGRiwgMHg3RkZGRkZGRiB9LCAvKiBWRlBfUkVHUyAgKi8JXAorICB7IDB4MDAwMDAwMDAsIDB4MDAwMDc4MDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwgLyogSVdNTVhUX0dSX1JFR1MgKi8gXAorICB7IDB4MDAwMDAwMDAsIDB4N0ZGRjgwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwgLyogSVdNTVhUX1JFR1MgKi8JXAorICB7IDB4MDAwMDAwRkYsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwgLyogTE9fUkVHUyAqLwlcCisgIHsgMHgwMDAwMjAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LCAvKiBTVEFDS19SRUcgKi8JXAorICB7IDB4MDAwMDIwRkYsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwgLyogQkFTRV9SRUdTICovCVwKKyAgeyAweDAwMDBERjAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sIC8qIEhJX1JFR1MgKi8JXAorICB7IDB4MDEwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwgLyogQ0NfUkVHICovCVwKKyAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDgwMDAwMDAwIH0sIC8qIFZGUENDX1JFRyAqLwlcCisgIHsgMHgwMjAwREZGRiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LCAvKiBHRU5FUkFMX1JFR1MgKi8gXAorICB7IDB4MDIwMEZGRkYsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwgLyogQ09SRV9SRUdTICovCVwKKyAgeyAweEZBRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweDdGRkZGRkZGIH0gIC8qIEFMTF9SRUdTICovCVwKK30KKworLyogQW55IG9mIHRoZSBWRlAgcmVnaXN0ZXIgY2xhc3Nlcy4gICovCisjZGVmaW5lIElTX1ZGUF9DTEFTUyhYKSBcCisgICgoWCkgPT0gVkZQX0QwX0Q3X1JFR1MgfHwgKFgpID09IFZGUF9MT19SRUdTIFwKKyAgIHx8IChYKSA9PSBWRlBfSElfUkVHUyB8fCAoWCkgPT0gVkZQX1JFR1MpCisKKy8qIFRoZSBzYW1lIGluZm9ybWF0aW9uLCBpbnZlcnRlZDoKKyAgIFJldHVybiB0aGUgY2xhc3MgbnVtYmVyIG9mIHRoZSBzbWFsbGVzdCBjbGFzcyBjb250YWluaW5nCisgICByZWcgbnVtYmVyIFJFR05PLiAgVGhpcyBjb3VsZCBiZSBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24KKyAgIG9yIGNvdWxkIGluZGV4IGFuIGFycmF5LiAgKi8KKyNkZWZpbmUgUkVHTk9fUkVHX0NMQVNTKFJFR05PKSAgYXJtX3JlZ25vX2NsYXNzIChSRUdOTykKKworLyogVGhlIGZvbGxvd2luZyBtYWNybyBkZWZpbmVzIGNvdmVyIGNsYXNzZXMgZm9yIEludGVncmF0ZWQgUmVnaXN0ZXIKKyAgIEFsbG9jYXRvci4gIENvdmVyIGNsYXNzZXMgaXMgYSBzZXQgb2Ygbm9uLWludGVyc2VjdGVkIHJlZ2lzdGVyCisgICBjbGFzc2VzIGNvdmVyaW5nIGFsbCBoYXJkIHJlZ2lzdGVycyB1c2VkIGZvciByZWdpc3RlciBhbGxvY2F0aW9uCisgICBwdXJwb3NlLiAgQW55IG1vdmUgYmV0d2VlbiB0d28gcmVnaXN0ZXJzIG9mIGEgY292ZXIgY2xhc3Mgc2hvdWxkIGJlCisgICBjaGVhcGVyIHRoYW4gbG9hZCBvciBzdG9yZSBvZiB0aGUgcmVnaXN0ZXJzLiAgVGhlIG1hY3JvIHZhbHVlIGlzCisgICBhcnJheSBvZiByZWdpc3RlciBjbGFzc2VzIHdpdGggTElNX1JFR19DTEFTU0VTIHVzZWQgYXMgdGhlIGVuZAorICAgbWFya2VyLiAgKi8KKworI2RlZmluZSBJUkFfQ09WRVJfQ0xBU1NFUwkJCQkJCSAgICAgXAorewkJCQkJCQkJCSAgICAgXAorICBHRU5FUkFMX1JFR1MsIEZQQV9SRUdTLCBDSVJSVVNfUkVHUywgVkZQX1JFR1MsIElXTU1YVF9HUl9SRUdTLCBJV01NWFRfUkVHUyxcCisgIExJTV9SRUdfQ0xBU1NFUwkJCQkJCQkgICAgIFwKK30KKworLyogRlBBIHJlZ2lzdGVycyBjYW4ndCBkbyBzdWJyZWcgYXMgYWxsIHZhbHVlcyBhcmUgcmVmb3JtYXR0ZWQgdG8gaW50ZXJuYWwKKyAgIHByZWNpc2lvbi4gIFZGUCByZWdpc3RlcnMgbWF5IG9ubHkgYmUgYWNjZXNzZWQgaW4gdGhlIG1vZGUgdGhleQorICAgd2VyZSBzZXQuICAqLworI2RlZmluZSBDQU5OT1RfQ0hBTkdFX01PREVfQ0xBU1MoRlJPTSwgVE8sIENMQVNTKQlcCisgIChHRVRfTU9ERV9TSVpFIChGUk9NKSAhPSBHRVRfTU9ERV9TSVpFIChUTykJCVwKKyAgID8gcmVnX2NsYXNzZXNfaW50ZXJzZWN0X3AgKEZQQV9SRUdTLCAoQ0xBU1MpKQlcCisgICAgIHx8IHJlZ19jbGFzc2VzX2ludGVyc2VjdF9wIChWRlBfUkVHUywgKENMQVNTKSkJXAorICAgOiAwKQorCisvKiBXZSBuZWVkIHRvIGRlZmluZSB0aGlzIGZvciBMT19SRUdTIG9uIHRodW1iLiAgT3RoZXJ3aXNlIHdlIGNhbiBlbmQgdXAKKyAgIHVzaW5nIHIwLXI0IGZvciBmdW5jdGlvbiBhcmd1bWVudHMsIHI3IGZvciB0aGUgc3RhY2sgZnJhbWUgYW5kIGRvbid0CisgICBoYXZlIGVub3VnaCBsZWZ0IG92ZXIgdG8gZG8gZG91Ymxld29yZCBhcml0aG1ldGljLiAgKi8KKyNkZWZpbmUgQ0xBU1NfTElLRUxZX1NQSUxMRURfUChDTEFTUykJXAorICAgICgoVEFSR0VUX1RIVU1CICYmIChDTEFTUykgPT0gTE9fUkVHUykJXAorICAgICB8fCAoQ0xBU1MpID09IENDX1JFRykKKworLyogVGhlIGNsYXNzIHZhbHVlIGZvciBpbmRleCByZWdpc3RlcnMsIGFuZCB0aGUgb25lIGZvciBiYXNlIHJlZ3MuICAqLworI2RlZmluZSBJTkRFWF9SRUdfQ0xBU1MgIChUQVJHRVRfVEhVTUIxID8gTE9fUkVHUyA6IEdFTkVSQUxfUkVHUykKKyNkZWZpbmUgQkFTRV9SRUdfQ0xBU1MgICAoVEFSR0VUX1RIVU1CMSA/IExPX1JFR1MgOiBDT1JFX1JFR1MpCisKKy8qIEZvciB0aGUgVGh1bWIgdGhlIGhpZ2ggcmVnaXN0ZXJzIGNhbm5vdCBiZSB1c2VkIGFzIGJhc2UgcmVnaXN0ZXJzCisgICB3aGVuIGFkZHJlc3NpbmcgcXVhbnRpdGllcyBpbiBRSSBvciBISSBtb2RlOyBpZiB3ZSBkb24ndCBrbm93IHRoZQorICAgbW9kZSwgdGhlbiB3ZSBtdXN0IGJlIGNvbnNlcnZhdGl2ZS4gICovCisjZGVmaW5lIE1PREVfQkFTRV9SRUdfQ0xBU1MoTU9ERSkJCQkJCVwKKyAgICAoVEFSR0VUXzMyQklUID8gQ09SRV9SRUdTIDoJCQkJCVwKKyAgICAgKCgoTU9ERSkgPT0gU0ltb2RlKSA/IEJBU0VfUkVHUyA6IExPX1JFR1MpKQorCisvKiBGb3IgVGh1bWIgd2UgY2FuIG5vdCBzdXBwb3J0IFNQK3JlZyBhZGRyZXNzaW5nLCBzbyB3ZSByZXR1cm4gTE9fUkVHUworICAgaW5zdGVhZCBvZiBCQVNFX1JFR1MuICAqLworI2RlZmluZSBNT0RFX0JBU0VfUkVHX1JFR19DTEFTUyhNT0RFKSBCQVNFX1JFR19DTEFTUworCisvKiBXaGVuIFNNQUxMX1JFR0lTVEVSX0NMQVNTRVMgaXMgbm9uemVybywgdGhlIGNvbXBpbGVyIGFsbG93cworICAgcmVnaXN0ZXJzIGV4cGxpY2l0bHkgdXNlZCBpbiB0aGUgcnRsIHRvIGJlIHVzZWQgYXMgc3BpbGwgcmVnaXN0ZXJzCisgICBidXQgcHJldmVudHMgdGhlIGNvbXBpbGVyIGZyb20gZXh0ZW5kaW5nIHRoZSBsaWZldGltZSBvZiB0aGVzZQorICAgcmVnaXN0ZXJzLiAgKi8KKyNkZWZpbmUgU01BTExfUkVHSVNURVJfQ0xBU1NFUyAgIFRBUkdFVF9USFVNQjEKKworLyogR2l2ZW4gYW4gcnR4IFggYmVpbmcgcmVsb2FkZWQgaW50byBhIHJlZyByZXF1aXJlZCB0byBiZQorICAgaW4gY2xhc3MgQ0xBU1MsIHJldHVybiB0aGUgY2xhc3Mgb2YgcmVnIHRvIGFjdHVhbGx5IHVzZS4KKyAgIEluIGdlbmVyYWwgdGhpcyBpcyBqdXN0IENMQVNTLCBidXQgZm9yIHRoZSBUaHVtYiBjb3JlIHJlZ2lzdGVycyBhbmQKKyAgIGltbWVkaWF0ZSBjb25zdGFudHMgd2UgcHJlZmVyIGEgTE9fUkVHUyBjbGFzcyBvciBhIHN1YnNldC4gICovCisjZGVmaW5lIFBSRUZFUlJFRF9SRUxPQURfQ0xBU1MoWCwgQ0xBU1MpCQlcCisgIChUQVJHRVRfMzJCSVQgPyAoQ0xBU1MpIDoJCQkJXAorICAgKChDTEFTUykgPT0gR0VORVJBTF9SRUdTIHx8IChDTEFTUykgPT0gSElfUkVHUwlcCisgICAgfHwgKENMQVNTKSA9PSBOT19SRUdTIHx8IChDTEFTUykgPT0gU1RBQ0tfUkVHCVwKKyAgID8gTE9fUkVHUyA6IChDTEFTUykpKQorCisvKiBNdXN0IGxlYXZlIEJBU0VfUkVHUyByZWxvYWRzIGFsb25lICovCisjZGVmaW5lIFRIVU1CX1NFQ09OREFSWV9JTlBVVF9SRUxPQURfQ0xBU1MoQ0xBU1MsIE1PREUsIFgpCQlcCisgICgoQ0xBU1MpICE9IExPX1JFR1MgJiYgKENMQVNTKSAhPSBCQVNFX1JFR1MJCQkJXAorICAgPyAoKHRydWVfcmVnbnVtIChYKSA9PSAtMSA/IExPX1JFR1MJCQkJCVwKKyAgICAgICA6ICh0cnVlX3JlZ251bSAoWCkgKyBIQVJEX1JFR05PX05SRUdTICgwLCBNT0RFKSA+IDgpID8gTE9fUkVHUwlcCisgICAgICAgOiBOT19SRUdTKSkgCQkJCQkJCVwKKyAgIDogTk9fUkVHUykKKworI2RlZmluZSBUSFVNQl9TRUNPTkRBUllfT1VUUFVUX1JFTE9BRF9DTEFTUyhDTEFTUywgTU9ERSwgWCkJCVwKKyAgKChDTEFTUykgIT0gTE9fUkVHUyAmJiAoQ0xBU1MpICE9IEJBU0VfUkVHUwkJCQlcCisgICA/ICgodHJ1ZV9yZWdudW0gKFgpID09IC0xID8gTE9fUkVHUwkJCQkJXAorICAgICAgIDogKHRydWVfcmVnbnVtIChYKSArIEhBUkRfUkVHTk9fTlJFR1MgKDAsIE1PREUpID4gOCkgPyBMT19SRUdTCVwKKyAgICAgICA6IE5PX1JFR1MpKSAJCQkJCQkJXAorICAgOiBOT19SRUdTKQorCisvKiBSZXR1cm4gdGhlIHJlZ2lzdGVyIGNsYXNzIG9mIGEgc2NyYXRjaCByZWdpc3RlciBuZWVkZWQgdG8gY29weSBJTiBpbnRvCisgICBvciBvdXQgb2YgYSByZWdpc3RlciBpbiBDTEFTUyBpbiBNT0RFLiAgSWYgaXQgY2FuIGJlIGRvbmUgZGlyZWN0bHksCisgICBOT19SRUdTIGlzIHJldHVybmVkLiAgKi8KKyNkZWZpbmUgU0VDT05EQVJZX09VVFBVVF9SRUxPQURfQ0xBU1MoQ0xBU1MsIE1PREUsIFgpCQlcCisgIC8qIFJlc3RyaWN0IHdoaWNoIGRpcmVjdCByZWxvYWRzIGFyZSBhbGxvd2VkIGZvciBWRlAvaVdNTVh0IHJlZ3MuICAqLyBcCisgICgoVEFSR0VUX1ZGUCAmJiBUQVJHRVRfSEFSRF9GTE9BVAkJCQlcCisgICAgJiYgSVNfVkZQX0NMQVNTIChDTEFTUykpCQkJCQlcCisgICA/IGNvcHJvY19zZWNvbmRhcnlfcmVsb2FkX2NsYXNzIChNT0RFLCBYLCBGQUxTRSkJCVwKKyAgIDogKFRBUkdFVF9JV01NWFQgJiYgKENMQVNTKSA9PSBJV01NWFRfUkVHUykJCQlcCisgICA/IGNvcHJvY19zZWNvbmRhcnlfcmVsb2FkX2NsYXNzIChNT0RFLCBYLCBUUlVFKQkJXAorICAgOiBUQVJHRVRfMzJCSVQJCQkJCQlcCisgICA/ICgoKE1PREUpID09IEhJbW9kZSAmJiAhIGFybV9hcmNoNCAmJiB0cnVlX3JlZ251bSAoWCkgPT0gLTEpIFwKKyAgICA/IEdFTkVSQUxfUkVHUyA6IE5PX1JFR1MpCQkJCQlcCisgICA6IFRIVU1CX1NFQ09OREFSWV9PVVRQVVRfUkVMT0FEX0NMQVNTIChDTEFTUywgTU9ERSwgWCkpCisKKy8qIElmIHdlIG5lZWQgdG8gbG9hZCBzaG9ydHMgYnl0ZS1hdC1hLXRpbWUsIHRoZW4gd2UgbmVlZCBhIHNjcmF0Y2guICAqLworI2RlZmluZSBTRUNPTkRBUllfSU5QVVRfUkVMT0FEX0NMQVNTKENMQVNTLCBNT0RFLCBYKQkJXAorICAvKiBSZXN0cmljdCB3aGljaCBkaXJlY3QgcmVsb2FkcyBhcmUgYWxsb3dlZCBmb3IgVkZQL2lXTU1YdCByZWdzLiAgKi8gXAorICAoKFRBUkdFVF9WRlAgJiYgVEFSR0VUX0hBUkRfRkxPQVQJCQkJXAorICAgICYmIElTX1ZGUF9DTEFTUyAoQ0xBU1MpKQkJCQkJXAorICAgID8gY29wcm9jX3NlY29uZGFyeV9yZWxvYWRfY2xhc3MgKE1PREUsIFgsIEZBTFNFKSA6CQlcCisgICAgKFRBUkdFVF9JV01NWFQgJiYgKENMQVNTKSA9PSBJV01NWFRfUkVHUykgPwkJCVwKKyAgICBjb3Byb2Nfc2Vjb25kYXJ5X3JlbG9hZF9jbGFzcyAoTU9ERSwgWCwgVFJVRSkgOgkJXAorICAvKiBDYW5ub3QgbG9hZCBjb25zdGFudHMgaW50byBDaXJydXMgcmVnaXN0ZXJzLiAgKi8JCVwKKyAgIChUQVJHRVRfTUFWRVJJQ0sgJiYgVEFSR0VUX0hBUkRfRkxPQVQJCQlcCisgICAgICYmIChDTEFTUykgPT0gQ0lSUlVTX1JFR1MJCQkJCVwKKyAgICAgJiYgKENPTlNUQU5UX1AgKFgpIHx8IEdFVF9DT0RFIChYKSA9PSBTWU1CT0xfUkVGKSkJCVwKKyAgICA/IEdFTkVSQUxfUkVHUyA6CQkJCQkJXAorICAoVEFSR0VUXzMyQklUID8JCQkJCQlcCisgICAoKChDTEFTUykgPT0gSVdNTVhUX1JFR1MgfHwgKENMQVNTKSA9PSBJV01NWFRfR1JfUkVHUykJXAorICAgICAgJiYgQ09OU1RBTlRfUCAoWCkpCQkJCQlcCisgICA/IEdFTkVSQUxfUkVHUyA6CQkJCQkJXAorICAgKCgoTU9ERSkgPT0gSEltb2RlICYmICEgYXJtX2FyY2g0CQkJCVwKKyAgICAgJiYgKEdFVF9DT0RFIChYKSA9PSBNRU0JCQkJCVwKKwkgfHwgKChHRVRfQ09ERSAoWCkgPT0gUkVHIHx8IEdFVF9DT0RFIChYKSA9PSBTVUJSRUcpCVwKKwkgICAgICYmIHRydWVfcmVnbnVtIChYKSA9PSAtMSkpKQkJCVwKKyAgICA/IEdFTkVSQUxfUkVHUyA6IE5PX1JFR1MpCQkJCQlcCisgICA6IFRIVU1CX1NFQ09OREFSWV9JTlBVVF9SRUxPQURfQ0xBU1MgKENMQVNTLCBNT0RFLCBYKSkpCisKKy8qIFRyeSBhIG1hY2hpbmUtZGVwZW5kZW50IHdheSBvZiByZWxvYWRpbmcgYW4gaWxsZWdpdGltYXRlIGFkZHJlc3MKKyAgIG9wZXJhbmQuICBJZiB3ZSBmaW5kIG9uZSwgcHVzaCB0aGUgcmVsb2FkIGFuZCBqdW1wIHRvIFdJTi4gIFRoaXMKKyAgIG1hY3JvIGlzIHVzZWQgaW4gb25seSBvbmUgcGxhY2U6IGBmaW5kX3JlbG9hZHNfYWRkcmVzcycgaW4gcmVsb2FkLmMuCisKKyAgIEZvciB0aGUgQVJNLCB3ZSB3aXNoIHRvIGhhbmRsZSBsYXJnZSBkaXNwbGFjZW1lbnRzIG9mZiBhIGJhc2UKKyAgIHJlZ2lzdGVyIGJ5IHNwbGl0dGluZyB0aGUgYWRkZW5kIGFjcm9zcyBhIE1PViBhbmQgdGhlIG1lbSBpbnNuLgorICAgVGhpcyBjYW4gY3V0IHRoZSBudW1iZXIgb2YgcmVsb2FkcyBuZWVkZWQuICAqLworI2RlZmluZSBBUk1fTEVHSVRJTUlaRV9SRUxPQURfQUREUkVTUyhYLCBNT0RFLCBPUE5VTSwgVFlQRSwgSU5ELCBXSU4pCSAgIFwKKyAgZG8JCQkJCQkJCQkgICBcCisgICAgewkJCQkJCQkJCSAgIFwKKyAgICAgIGlmIChHRVRfQ09ERSAoWCkgPT0gUExVUwkJCQkJCSAgIFwKKwkgICYmIEdFVF9DT0RFIChYRVhQIChYLCAwKSkgPT0gUkVHCQkJCSAgIFwKKwkgICYmIFJFR05PIChYRVhQIChYLCAwKSkgPCBGSVJTVF9QU0VVRE9fUkVHSVNURVIJCSAgIFwKKwkgICYmIFJFR19NT0RFX09LX0ZPUl9CQVNFX1AgKFhFWFAgKFgsIDApLCBNT0RFKQkJCSAgIFwKKwkgICYmIEdFVF9DT0RFIChYRVhQIChYLCAxKSkgPT0gQ09OU1RfSU5UKQkJCSAgIFwKKwl7CQkJCQkJCQkgICBcCisJICBIT1NUX1dJREVfSU5UIHZhbCA9IElOVFZBTCAoWEVYUCAoWCwgMSkpOwkJCSAgIFwKKwkgIEhPU1RfV0lERV9JTlQgbG93LCBoaWdoOwkJCQkJICAgXAorCQkJCQkJCQkJICAgXAorCSAgaWYgKE1PREUgPT0gREltb2RlIHx8IChNT0RFID09IERGbW9kZSAmJiBUQVJHRVRfU09GVF9GTE9BVCkpCSAgIFwKKwkgICAgbG93ID0gKCh2YWwgJiAweGYpIF4gMHg4KSAtIDB4ODsJCQkJICAgXAorCSAgZWxzZSBpZiAoVEFSR0VUX01BVkVSSUNLICYmIFRBUkdFVF9IQVJEX0ZMT0FUKQkJICAgXAorCSAgICAvKiBOZWVkIHRvIGJlIGNhcmVmdWwsIC0yNTYgaXMgbm90IGEgdmFsaWQgb2Zmc2V0LiAgKi8JICAgXAorCSAgICBsb3cgPSB2YWwgPj0gMCA/ICh2YWwgJiAweGZmKSA6IC0oKC12YWwpICYgMHhmZik7CQkgICBcCisJICBlbHNlIGlmIChNT0RFID09IFNJbW9kZQkJCQkJICAgXAorCQkgICB8fCAoTU9ERSA9PSBTRm1vZGUgJiYgVEFSR0VUX1NPRlRfRkxPQVQpCQkgICBcCisJCSAgIHx8ICgoTU9ERSA9PSBISW1vZGUgfHwgTU9ERSA9PSBRSW1vZGUpICYmICEgYXJtX2FyY2g0KSkgXAorCSAgICAvKiBOZWVkIHRvIGJlIGNhcmVmdWwsIC00MDk2IGlzIG5vdCBhIHZhbGlkIG9mZnNldC4gICovCSAgIFwKKwkgICAgbG93ID0gdmFsID49IDAgPyAodmFsICYgMHhmZmYpIDogLSgoLXZhbCkgJiAweGZmZik7CQkgICBcCisJICBlbHNlIGlmICgoTU9ERSA9PSBISW1vZGUgfHwgTU9ERSA9PSBRSW1vZGUpICYmIGFybV9hcmNoNCkJICAgXAorCSAgICAvKiBOZWVkIHRvIGJlIGNhcmVmdWwsIC0yNTYgaXMgbm90IGEgdmFsaWQgb2Zmc2V0LiAgKi8JICAgXAorCSAgICBsb3cgPSB2YWwgPj0gMCA/ICh2YWwgJiAweGZmKSA6IC0oKC12YWwpICYgMHhmZik7CQkgICBcCisJICBlbHNlIGlmIChHRVRfTU9ERV9DTEFTUyAoTU9ERSkgPT0gTU9ERV9GTE9BVAkJCSAgIFwKKwkJICAgJiYgVEFSR0VUX0hBUkRfRkxPQVQgJiYgVEFSR0VUX0ZQQSkJCQkgICBcCisJICAgIC8qIE5lZWQgdG8gYmUgY2FyZWZ1bCwgLTEwMjQgaXMgbm90IGEgdmFsaWQgb2Zmc2V0LiAgKi8JICAgXAorCSAgICBsb3cgPSB2YWwgPj0gMCA/ICh2YWwgJiAweDNmZikgOiAtKCgtdmFsKSAmIDB4M2ZmKTsJCSAgIFwKKwkgIGVsc2UJCQkJCQkJCSAgIFwKKwkgICAgYnJlYWs7CQkJCQkJCSAgIFwKKwkJCQkJCQkJCSAgIFwKKwkgIGhpZ2ggPSAoKCgodmFsIC0gbG93KSAmICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKSAweGZmZmZmZmZmKQkgICBcCisJCSAgIF4gKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpIDB4ODAwMDAwMDApCQkgICBcCisJCSAgLSAodW5zaWduZWQgSE9TVF9XSURFX0lOVCkgMHg4MDAwMDAwMCk7CQkgICBcCisJICAvKiBDaGVjayBmb3Igb3ZlcmZsb3cgb3IgemVybyAqLwkJCQkgICBcCisJICBpZiAobG93ID09IDAgfHwgaGlnaCA9PSAwIHx8IChoaWdoICsgbG93ICE9IHZhbCkpCQkgICBcCisJICAgIGJyZWFrOwkJCQkJCQkgICBcCisJCQkJCQkJCQkgICBcCisJICAvKiBSZWxvYWQgdGhlIGhpZ2ggcGFydCBpbnRvIGEgYmFzZSByZWc7IGxlYXZlIHRoZSBsb3cgcGFydAkgICBcCisJICAgICBpbiB0aGUgbWVtLiAgKi8JCQkJCQkgICBcCisJICBYID0gZ2VuX3J0eF9QTFVTIChHRVRfTU9ERSAoWCksCQkJCSAgIFwKKwkJCSAgICBnZW5fcnR4X1BMVVMgKEdFVF9NT0RFIChYKSwgWEVYUCAoWCwgMCksCSAgIFwKKwkJCQkJICBHRU5fSU5UIChoaWdoKSksCQkgICBcCisJCQkgICAgR0VOX0lOVCAobG93KSk7CQkJCSAgIFwKKwkgIHB1c2hfcmVsb2FkIChYRVhQIChYLCAwKSwgTlVMTF9SVFgsICZYRVhQIChYLCAwKSwgTlVMTCwJICAgXAorCQkgICAgICAgTU9ERV9CQVNFX1JFR19DTEFTUyAoTU9ERSksIEdFVF9NT0RFIChYKSwgCSAgIFwKKwkJICAgICAgIFZPSURtb2RlLCAwLCAwLCBPUE5VTSwgVFlQRSk7CQkJICAgXAorCSAgZ290byBXSU47CQkJCQkJCSAgIFwKKwl9CQkJCQkJCQkgICBcCisgICAgfQkJCQkJCQkJCSAgIFwKKyAgd2hpbGUgKDApCisKKy8qIFhYWCBJZiBhbiBISW1vZGUgRlArbGFyZ2Vfb2Zmc2V0IGFkZHJlc3MgaXMgY29udmVydGVkIHRvIGFuIEhJbW9kZQorICAgU1ArbGFyZ2Vfb2Zmc2V0IGFkZHJlc3MsIHRoZW4gcmVsb2FkIHdvbid0IGtub3cgaG93IHRvIGZpeCBpdC4gIEl0IHNlZXMKKyAgIG9ubHkgdGhhdCBTUCBpc24ndCB2YWxpZCBmb3IgSEltb2RlLCBhbmQgc28gcmVsb2FkcyB0aGUgU1AgaW50byBhbiBpbmRleAorICAgcmVnaXN0ZXIsIGJ1dCB0aGUgcmVzdWx0aW5nIGFkZHJlc3MgaXMgc3RpbGwgaW52YWxpZCBiZWNhdXNlIHRoZSBvZmZzZXQKKyAgIGlzIHRvbyBiaWcuICBXZSBmaXggaXQgaGVyZSBpbnN0ZWFkIGJ5IHJlbG9hZGluZyB0aGUgZW50aXJlIGFkZHJlc3MuICAqLworLyogV2UgY291bGQgcHJvYmFibHkgYWNoaWV2ZSBiZXR0ZXIgcmVzdWx0cyBieSBkZWZpbmluZyBQUk9NT1RFX01PREUgdG8gaGVscAorICAgY29wZSB3aXRoIHRoZSB2YXJpYW5jZXMgYmV0d2VlbiB0aGUgVGh1bWIncyBzaWduZWQgYW5kIHVuc2lnbmVkIGJ5dGUgYW5kCisgICBoYWxmd29yZCBsb2FkIGluc3RydWN0aW9ucy4gICovCisvKiA/Pz8gVGhpcyBzaG91bGQgYmUgc2FmZSBmb3IgdGh1bWIyLCBidXQgd2UgbWF5IGJlIGFibGUgdG8gZG8gYmV0dGVyLiAgKi8KKyNkZWZpbmUgVEhVTUJfTEVHSVRJTUlaRV9SRUxPQURfQUREUkVTUyhYLCBNT0RFLCBPUE5VTSwgVFlQRSwgSU5EX0wsIFdJTikgICAgIFwKK2RvIHsJCQkJCQkJCQkgICAgICBcCisgIHJ0eCBuZXdfeCA9IHRodW1iX2xlZ2l0aW1pemVfcmVsb2FkX2FkZHJlc3MgKCZYLCBNT0RFLCBPUE5VTSwgVFlQRSwgSU5EX0wpOyBcCisgIGlmIChuZXdfeCkJCQkJCQkJCSAgICAgIFwKKyAgICB7CQkJCQkJCQkJICAgICAgXAorICAgICAgWCA9IG5ld194OwkJCQkJCQkgICAgICBcCisgICAgICBnb3RvIFdJTjsJCQkJCQkJCSAgICAgIFwKKyAgICB9CQkJCQkJCQkJICAgICAgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBMRUdJVElNSVpFX1JFTE9BRF9BRERSRVNTKFgsIE1PREUsIE9QTlVNLCBUWVBFLCBJTkRfTEVWRUxTLCBXSU4pICAgXAorICBpZiAoVEFSR0VUX0FSTSkJCQkJCQkJICAgXAorICAgIEFSTV9MRUdJVElNSVpFX1JFTE9BRF9BRERSRVNTIChYLCBNT0RFLCBPUE5VTSwgVFlQRSwgSU5EX0xFVkVMUywgV0lOKTsgXAorICBlbHNlCQkJCQkJCQkJICAgXAorICAgIFRIVU1CX0xFR0lUSU1JWkVfUkVMT0FEX0FERFJFU1MgKFgsIE1PREUsIE9QTlVNLCBUWVBFLCBJTkRfTEVWRUxTLCBXSU4pCisKKy8qIFJldHVybiB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29uc2VjdXRpdmUgcmVnaXN0ZXJzCisgICBuZWVkZWQgdG8gcmVwcmVzZW50IG1vZGUgTU9ERSBpbiBhIHJlZ2lzdGVyIG9mIGNsYXNzIENMQVNTLgorICAgQVJNIHJlZ3MgYXJlIFVOSVRTX1BFUl9XT1JEIGJpdHMgd2hpbGUgRlBBIHJlZ3MgY2FuIGhvbGQgYW55IEZQIG1vZGUgKi8KKyNkZWZpbmUgQ0xBU1NfTUFYX05SRUdTKENMQVNTLCBNT0RFKSAgXAorICAoKChDTEFTUykgPT0gRlBBX1JFR1MgfHwgKENMQVNTKSA9PSBDSVJSVVNfUkVHUykgPyAxIDogQVJNX05VTV9SRUdTIChNT0RFKSkKKworLyogSWYgZGVmaW5lZCwgZ2l2ZXMgYSBjbGFzcyBvZiByZWdpc3RlcnMgdGhhdCBjYW5ub3QgYmUgdXNlZCBhcyB0aGUKKyAgIG9wZXJhbmQgb2YgYSBTVUJSRUcgdGhhdCBjaGFuZ2VzIHRoZSBtb2RlIG9mIHRoZSBvYmplY3QgaWxsZWdhbGx5LiAgKi8KKworLyogTW92ZXMgYmV0d2VlbiBGUEFfUkVHUyBhbmQgR0VORVJBTF9SRUdTIGFyZSB0d28gbWVtb3J5IGluc25zLgorICAgTW92ZXMgYmV0d2VlbiBWRlBfUkVHUyBhbmQgR0VORVJBTF9SRUdTIGFyZSBhIHNpbmdsZSBpbnNuLCBidXQKKyAgIGl0IGlzIHR5cGljYWxseSBtb3JlIGV4cGVuc2l2ZSB0aGFuIGEgc2luZ2xlIG1lbW9yeSBhY2Nlc3MuICBXZSBzZXQKKyAgIHRoZSBjb3N0IHRvIGxlc3MgdGhhbiB0d28gbWVtb3J5IGFjY2Vzc2VzIHNvIHRoYXQgZmxvYXRpbmcKKyAgIHBvaW50IHRvIGludGVnZXIgY29udmVyc2lvbiBkb2VzIG5vdCBnbyB0aHJvdWdoIG1lbW9yeS4gICovCisjZGVmaW5lIFJFR0lTVEVSX01PVkVfQ09TVChNT0RFLCBGUk9NLCBUTykJCVwKKyAgKFRBUkdFVF8zMkJJVCA/CQkJCQkJXAorICAgKChGUk9NKSA9PSBGUEFfUkVHUyAmJiAoVE8pICE9IEZQQV9SRUdTID8gMjAgOglcCisgICAgKEZST00pICE9IEZQQV9SRUdTICYmIChUTykgPT0gRlBBX1JFR1MgPyAyMCA6CVwKKyAgICBJU19WRlBfQ0xBU1MgKEZST00pICYmICFJU19WRlBfQ0xBU1MgKFRPKSA/IDE1IDoJXAorICAgICFJU19WRlBfQ0xBU1MgKEZST00pICYmIElTX1ZGUF9DTEFTUyAoVE8pID8gMTUgOglcCisgICAgKEZST00pID09IElXTU1YVF9SRUdTICYmIChUTykgIT0gSVdNTVhUX1JFR1MgPyA0IDogIFwKKyAgICAoRlJPTSkgIT0gSVdNTVhUX1JFR1MgJiYgKFRPKSA9PSBJV01NWFRfUkVHUyA/IDQgOiAgXAorICAgIChGUk9NKSA9PSBJV01NWFRfR1JfUkVHUyB8fCAoVE8pID09IElXTU1YVF9HUl9SRUdTID8gMjAgOiAgXAorICAgIChGUk9NKSA9PSBDSVJSVVNfUkVHUyAmJiAoVE8pICE9IENJUlJVU19SRUdTID8gMjAgOglcCisgICAgKEZST00pICE9IENJUlJVU19SRUdTICYmIChUTykgPT0gQ0lSUlVTX1JFR1MgPyAyMCA6CVwKKyAgIDIpCQkJCQkJCVwKKyAgIDoJCQkJCQkJXAorICAgKChGUk9NKSA9PSBISV9SRUdTIHx8IChUTykgPT0gSElfUkVHUykgPyA0IDogMikKKwwKKy8qIFN0YWNrIGxheW91dDsgZnVuY3Rpb24gZW50cnksIGV4aXQgYW5kIGNhbGxpbmcuICAqLworCisvKiBEZWZpbmUgdGhpcyBpZiBwdXNoaW5nIGEgd29yZCBvbiB0aGUgc3RhY2sKKyAgIG1ha2VzIHRoZSBzdGFjayBwb2ludGVyIGEgc21hbGxlciBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgU1RBQ0tfR1JPV1NfRE9XTldBUkQgIDEKKworLyogRGVmaW5lIHRoaXMgdG8gbm9uemVybyBpZiB0aGUgbm9taW5hbCBhZGRyZXNzIG9mIHRoZSBzdGFjayBmcmFtZQorICAgaXMgYXQgdGhlIGhpZ2gtYWRkcmVzcyBlbmQgb2YgdGhlIGxvY2FsIHZhcmlhYmxlczsKKyAgIHRoYXQgaXMsIGVhY2ggYWRkaXRpb25hbCBsb2NhbCB2YXJpYWJsZSBhbGxvY2F0ZWQKKyAgIGdvZXMgYXQgYSBtb3JlIG5lZ2F0aXZlIG9mZnNldCBpbiB0aGUgZnJhbWUuICAqLworI2RlZmluZSBGUkFNRV9HUk9XU19ET1dOV0FSRCAxCisKKy8qIFRoZSBhbW91bnQgb2Ygc2NyYXRjaCBzcGFjZSBuZWVkZWQgYnkgX2ludGVyd29ya197cjcscjExfV9jYWxsX3ZpYV9yTigpLgorICAgV2hlbiBwcmVzZW50LCBpdCBpcyBvbmUgd29yZCBpbiBzaXplLCBhbmQgc2l0cyBhdCB0aGUgdG9wIG9mIHRoZSBmcmFtZSwKKyAgIGJldHdlZW4gdGhlIHNvZnQgZnJhbWUgcG9pbnRlciBhbmQgZWl0aGVyIHI3IG9yIHIxMS4KKworICAgV2Ugb25seSBuZWVkIF9pbnRlcndvcmtfck1fY2FsbF92aWFfck4oKSBmb3IgLW1jYWxsZXItc3VwZXItaW50ZXJ3b3JraW5nLAorICAgYW5kIG9ubHkgdGhlbiBpZiBzb21lIG91dGdvaW5nIGFyZ3VtZW50cyBhcmUgcGFzc2VkIG9uIHRoZSBzdGFjay4gIEl0IHdvdWxkCisgICBiZSB0ZW1wdGluZyB0byBhbHNvIGNoZWNrIHdoZXRoZXIgdGhlIHN0YWNrIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGJ5IGluZGlyZWN0CisgICBjYWxscywgYnV0IHRoZXJlIHNlZW1zIHRvIGJlIG5vIHJlYXNvbiBpbiBwcmluY2lwbGUgd2h5IGEgcG9zdC1yZWxvYWQgcGFzcworICAgY291bGRuJ3QgY29udmVydCBhIGRpcmVjdCBjYWxsIGludG8gYW4gaW5kaXJlY3Qgb25lLiAgKi8KKyNkZWZpbmUgQ0FMTEVSX0lOVEVSV09SS0lOR19TTE9UX1NJWkUJCQlcCisgIChUQVJHRVRfQ0FMTEVSX0lOVEVSV09SS0lORwkJCQlcCisgICAmJiBjcnRsLT5vdXRnb2luZ19hcmdzX3NpemUgIT0gMAkJXAorICAgPyBVTklUU19QRVJfV09SRCA6IDApCisKKy8qIE9mZnNldCB3aXRoaW4gc3RhY2sgZnJhbWUgdG8gc3RhcnQgYWxsb2NhdGluZyBsb2NhbCB2YXJpYWJsZXMgYXQuCisgICBJZiBGUkFNRV9HUk9XU19ET1dOV0FSRCwgdGhpcyBpcyB0aGUgb2Zmc2V0IHRvIHRoZSBFTkQgb2YgdGhlCisgICBmaXJzdCBsb2NhbCBhbGxvY2F0ZWQuICBPdGhlcndpc2UsIGl0IGlzIHRoZSBvZmZzZXQgdG8gdGhlIEJFR0lOTklORworICAgb2YgdGhlIGZpcnN0IGxvY2FsIGFsbG9jYXRlZC4gICovCisjZGVmaW5lIFNUQVJUSU5HX0ZSQU1FX09GRlNFVCAgMAorCisvKiBJZiB3ZSBnZW5lcmF0ZSBhbiBpbnNuIHRvIHB1c2ggQllURVMgYnl0ZXMsCisgICB0aGlzIHNheXMgaG93IG1hbnkgdGhlIHN0YWNrIHBvaW50ZXIgcmVhbGx5IGFkdmFuY2VzIGJ5LiAgKi8KKy8qIFRoZSBwdXNoIGluc25zIGRvIG5vdCBkbyB0aGlzIHJvdW5kaW5nIGltcGxpY2l0bHkuCisgICBTbyBkb24ndCBkZWZpbmUgdGhpcy4gICovCisvKiAjZGVmaW5lIFBVU0hfUk9VTkRJTkcoTlBVU0hFRCkgIFJPVU5EX1VQX1dPUkQgKE5QVVNIRUQpICovCisKKy8qIERlZmluZSB0aGlzIGlmIHRoZSBtYXhpbXVtIHNpemUgb2YgYWxsIHRoZSBvdXRnb2luZyBhcmdzIGlzIHRvIGJlCisgICBhY2N1bXVsYXRlZCBhbmQgcHVzaGVkIGR1cmluZyB0aGUgcHJvbG9ndWUuICBUaGUgYW1vdW50IGNhbiBiZQorICAgZm91bmQgaW4gdGhlIHZhcmlhYmxlIGNydGwtPm91dGdvaW5nX2FyZ3Nfc2l6ZS4gICovCisjZGVmaW5lIEFDQ1VNVUxBVEVfT1VUR09JTkdfQVJHUyAxCisKKy8qIE9mZnNldCBvZiBmaXJzdCBwYXJhbWV0ZXIgZnJvbSB0aGUgYXJndW1lbnQgcG9pbnRlciByZWdpc3RlciB2YWx1ZS4gICovCisjZGVmaW5lIEZJUlNUX1BBUk1fT0ZGU0VUKEZOREVDTCkgIChUQVJHRVRfQVJNID8gNCA6IDApCisKKy8qIFZhbHVlIGlzIHRoZSBudW1iZXIgb2YgYnl0ZSBvZiBhcmd1bWVudHMgYXV0b21hdGljYWxseQorICAgcG9wcGVkIHdoZW4gcmV0dXJuaW5nIGZyb20gYSBzdWJyb3V0aW5lIGNhbGwuCisgICBGVU5ERUNMIGlzIHRoZSBkZWNsYXJhdGlvbiBub2RlIG9mIHRoZSBmdW5jdGlvbiAoYXMgYSB0cmVlKSwKKyAgIEZVTlRZUEUgaXMgdGhlIGRhdGEgdHlwZSBvZiB0aGUgZnVuY3Rpb24gKGFzIGEgdHJlZSksCisgICBvciBmb3IgYSBsaWJyYXJ5IGNhbGwgaXQgaXMgYW4gaWRlbnRpZmllciBub2RlIGZvciB0aGUgc3Vicm91dGluZSBuYW1lLgorICAgU0laRSBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGFyZ3VtZW50cyBwYXNzZWQgb24gdGhlIHN0YWNrLgorCisgICBPbiB0aGUgQVJNLCB0aGUgY2FsbGVyIGRvZXMgbm90IHBvcCBhbnkgb2YgaXRzIGFyZ3VtZW50cyB0aGF0IHdlcmUgcGFzc2VkCisgICBvbiB0aGUgc3RhY2suICAqLworI2RlZmluZSBSRVRVUk5fUE9QU19BUkdTKEZVTkRFQ0wsIEZVTlRZUEUsIFNJWkUpICAwCisKKy8qIERlZmluZSBob3cgdG8gZmluZCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgYSBsaWJyYXJ5IGZ1bmN0aW9uCisgICBhc3N1bWluZyB0aGUgdmFsdWUgaGFzIG1vZGUgTU9ERS4gICovCisjZGVmaW5lIExJQkNBTExfVkFMVUUoTU9ERSkgIAkJCQkJCVwKKyAgKFRBUkdFVF9BQVBDU19CQVNFRCA/IGFhcGNzX2xpYmNhbGxfdmFsdWUgKE1PREUpCQkJXAorICAgOiAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUX0FCSSAmJiBUQVJHRVRfRlBBCQlcCisgICAgICAmJiBHRVRfTU9ERV9DTEFTUyAoTU9ERSkgPT0gTU9ERV9GTE9BVCkJCQkJXAorICAgPyBnZW5fcnR4X1JFRyAoTU9ERSwgRklSU1RfRlBBX1JFR05VTSkJCQkJXAorICAgOiBUQVJHRVRfMzJCSVQgJiYgVEFSR0VUX0hBUkRfRkxPQVRfQUJJICYmIFRBUkdFVF9NQVZFUklDSwkJXAorICAgICAmJiBHRVRfTU9ERV9DTEFTUyAoTU9ERSkgPT0gTU9ERV9GTE9BVAkJCQlcCisgICA/IGdlbl9ydHhfUkVHIChNT0RFLCBGSVJTVF9DSVJSVVNfRlBfUkVHTlVNKSAJCQlcCisgICA6IFRBUkdFVF9JV01NWFRfQUJJICYmIGFybV92ZWN0b3JfbW9kZV9zdXBwb3J0ZWRfcCAoTU9ERSkgICAgCVwKKyAgID8gZ2VuX3J0eF9SRUcgKE1PREUsIEZJUlNUX0lXTU1YVF9SRUdOVU0pIAkJCQlcCisgICA6IGdlbl9ydHhfUkVHIChNT0RFLCBBUkdfUkVHSVNURVIgKDEpKSkKKworLyogMSBpZiBSRUdOTyBpcyBhIHBvc3NpYmxlIHJlZ2lzdGVyIG51bWJlciBmb3IgYSBmdW5jdGlvbiB2YWx1ZS4gICovCisjZGVmaW5lIEZVTkNUSU9OX1ZBTFVFX1JFR05PX1AoUkVHTk8pCQkJCVwKKyAgKChSRUdOTykgPT0gQVJHX1JFR0lTVEVSICgxKQkJCQkJXAorICAgfHwgKFRBUkdFVF9BQVBDU19CQVNFRCAmJiBUQVJHRVRfMzJCSVQgCQkJXAorICAgICAgICYmIFRBUkdFVF9WRlAgJiYgVEFSR0VUX0hBUkRfRkxPQVQJCQlcCisgICAgICAgJiYgKFJFR05PKSA9PSBGSVJTVF9WRlBfUkVHTlVNKQkJCQlcCisgICB8fCAoVEFSR0VUXzMyQklUICYmICgoUkVHTk8pID09IEZJUlNUX0NJUlJVU19GUF9SRUdOVU0pCVwKKyAgICAgICAmJiBUQVJHRVRfSEFSRF9GTE9BVF9BQkkgJiYgVEFSR0VUX01BVkVSSUNLKQkJXAorICAgfHwgKChSRUdOTykgPT0gRklSU1RfSVdNTVhUX1JFR05VTSAmJiBUQVJHRVRfSVdNTVhUX0FCSSkJXAorICAgfHwgKFRBUkdFVF8zMkJJVCAmJiAoKFJFR05PKSA9PSBGSVJTVF9GUEFfUkVHTlVNKQkJXAorICAgICAgICYmIFRBUkdFVF9IQVJEX0ZMT0FUX0FCSSAmJiBUQVJHRVRfRlBBKSkKKworLyogQW1vdW50IG9mIG1lbW9yeSBuZWVkZWQgZm9yIGFuIHVudHlwZWQgY2FsbCB0byBzYXZlIGFsbCBwb3NzaWJsZSByZXR1cm4KKyAgIHJlZ2lzdGVycy4gICovCisjZGVmaW5lIEFQUExZX1JFU1VMVF9TSVpFIGFybV9hcHBseV9yZXN1bHRfc2l6ZSgpCisKKy8qIERlZmluZSBERUZBVUxUX1BDQ19TVFJVQ1RfUkVUVVJOIHRvIDEgaWYgYWxsIHN0cnVjdHVyZSBhbmQgdW5pb24gcmV0dXJuCisgICB2YWx1ZXMgbXVzdCBiZSBpbiBtZW1vcnkuICBPbiB0aGUgQVJNLCB0aGV5IG5lZWQgb25seSBkbyBzbyBpZiBsYXJnZXIKKyAgIHRoYW4gYSB3b3JkLCBvciBpZiB0aGV5IGNvbnRhaW4gZWxlbWVudHMgb2Zmc2V0IGZyb20gemVybyBpbiB0aGUgc3RydWN0LiAgKi8KKyNkZWZpbmUgREVGQVVMVF9QQ0NfU1RSVUNUX1JFVFVSTiAwCisKKy8qIFRoZXNlIGJpdHMgZGVzY3JpYmUgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBmdW5jdGlvbiBzdXBwb3J0ZWQKKyAgIGJ5IHRoZSBBUk0gYmFja2VuZC4gIFRoZXkgYXJlIGV4Y2x1c2l2ZS4gIGkuZS4gYSBmdW5jdGlvbiBjYW5ub3QgYmUgYm90aCBhCisgICBub3JtYWwgZnVuY3Rpb24gYW5kIGFuIGludGVyd29ya2VkIGZ1bmN0aW9uLCBmb3IgZXhhbXBsZS4gIEtub3dpbmcgdGhlCisgICB0eXBlIG9mIGEgZnVuY3Rpb24gaXMgaW1wb3J0YW50IGZvciBkZXRlcm1pbmluZyBpdHMgcHJvbG9ndWUgYW5kCisgICBlcGlsb2d1ZSBzZXF1ZW5jZXMuCisgICBOb3RlIHZhbHVlIDcgaXMgY3VycmVudGx5IHVuYXNzaWduZWQuICBBbHNvIG5vdGUgdGhhdCB0aGUgaW50ZXJydXB0CisgICBmdW5jdGlvbiB0eXBlcyBhbGwgaGF2ZSBiaXQgMiBzZXQsIHNvIHRoYXQgdGhleSBjYW4gYmUgdGVzdGVkIGZvciBlYXNpbHkuCisgICBOb3RlIHRoYXQgMCBpcyBkZWxpYmVyYXRlbHkgY2hvc2VuIGZvciBBUk1fRlRfVU5LTk9XTiBzbyB0aGF0IHdoZW4gdGhlCisgICBtYWNoaW5lX2Z1bmN0aW9uIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCAodG8gemVybykgZnVuY190eXBlIHdpbGwKKyAgIGRlZmF1bHQgdG8gdW5rbm93bi4gIFRoaXMgd2lsbCBmb3JjZSB0aGUgZmlyc3QgdXNlIG9mIGFybV9jdXJyZW50X2Z1bmNfdHlwZQorICAgdG8gY2FsbCBhcm1fY29tcHV0ZV9mdW5jX3R5cGUuICAqLworI2RlZmluZSBBUk1fRlRfVU5LTk9XTgkJIDAgLyogVHlwZSBoYXMgbm90IHlldCBiZWVuIGRldGVybWluZWQuICAqLworI2RlZmluZSBBUk1fRlRfTk9STUFMCQkgMSAvKiBZb3VyIG5vcm1hbCwgc3RyYWlnaHRmb3J3YXJkIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgQVJNX0ZUX0lOVEVSV09SS0VECSAyIC8qIEEgZnVuY3Rpb24gdGhhdCBzdXBwb3J0cyBpbnRlcndvcmtpbmcuICAqLworI2RlZmluZSBBUk1fRlRfSVNSCQkgNCAvKiBBbiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLiAgKi8KKyNkZWZpbmUgQVJNX0ZUX0ZJUQkJIDUgLyogQSBmYXN0IGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUuICAqLworI2RlZmluZSBBUk1fRlRfRVhDRVBUSU9OCSA2IC8qIEFuIEFSTSBleGNlcHRpb24gaGFuZGxlciAoc3ViY2FzZSBvZiBJU1IpLiAgKi8KKworI2RlZmluZSBBUk1fRlRfVFlQRV9NQVNLCSgoMSA8PCAzKSAtIDEpCisKKy8qIEluIGFkZGl0aW9uIGZ1bmN0aW9ucyBjYW4gaGF2ZSBzZXZlcmFsIHR5cGUgbW9kaWZpZXJzLAorICAgb3V0bGluZWQgYnkgdGhlc2UgYml0IG1hc2tzOiAgKi8KKyNkZWZpbmUgQVJNX0ZUX0lOVEVSUlVQVAkoMSA8PCAyKSAvKiBOb3RlIG92ZXJsYXAgd2l0aCBGVF9JU1IgYW5kIGFib3ZlLiAgKi8KKyNkZWZpbmUgQVJNX0ZUX05BS0VECQkoMSA8PCAzKSAvKiBObyBwcm9sb2d1ZSBvciBlcGlsb2d1ZS4gICovCisjZGVmaW5lIEFSTV9GVF9WT0xBVElMRQkJKDEgPDwgNCkgLyogRG9lcyBub3QgcmV0dXJuLiAgKi8KKyNkZWZpbmUgQVJNX0ZUX05FU1RFRAkJKDEgPDwgNSkgLyogRW1iZWRkZWQgaW5zaWRlIGFub3RoZXIgZnVuYy4gICovCisjZGVmaW5lIEFSTV9GVF9TVEFDS0FMSUdOCSgxIDw8IDYpIC8qIENhbGxlZCB3aXRoIG1pc2FsaWduZWQgc3RhY2suICAqLworCisvKiBTb21lIG1hY3JvcyB0byB0ZXN0IHRoZXNlIGZsYWdzLiAgKi8KKyNkZWZpbmUgQVJNX0ZVTkNfVFlQRSh0KQkodCAmIEFSTV9GVF9UWVBFX01BU0spCisjZGVmaW5lIElTX0lOVEVSUlVQVCh0KQkJKHQgJiBBUk1fRlRfSU5URVJSVVBUKQorI2RlZmluZSBJU19WT0xBVElMRSh0KSAgICAgCSh0ICYgQVJNX0ZUX1ZPTEFUSUxFKQorI2RlZmluZSBJU19OQUtFRCh0KSAgICAgICAgCSh0ICYgQVJNX0ZUX05BS0VEKQorI2RlZmluZSBJU19ORVNURUQodCkgICAgICAgCSh0ICYgQVJNX0ZUX05FU1RFRCkKKyNkZWZpbmUgSVNfU1RBQ0tBTElHTih0KSAgICAgICAJKHQgJiBBUk1fRlRfU1RBQ0tBTElHTikKKworCisvKiBTdHJ1Y3R1cmUgdXNlZCB0byBob2xkIHRoZSBmdW5jdGlvbiBzdGFjayBmcmFtZSBsYXlvdXQuICBPZmZzZXRzIGFyZQorICAgcmVsYXRpdmUgdG8gdGhlIHN0YWNrIHBvaW50ZXIgb24gZnVuY3Rpb24gZW50cnkuICBQb3NpdGl2ZSBvZmZzZXRzIGFyZQorICAgaW4gdGhlIGRpcmVjdGlvbiBvZiBzdGFjayBncm93dGguCisgICBPbmx5IHNvZnRfZnJhbWUgaXMgdXNlZCBpbiB0aHVtYiBtb2RlLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgR1RZKCgpKSBhcm1fc3RhY2tfb2Zmc2V0cworeworICBpbnQgc2F2ZWRfYXJnczsJLyogQVJHX1BPSU5URVJfUkVHTlVNLiAgKi8KKyAgaW50IGZyYW1lOwkJLyogQVJNX0hBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0uICAqLworICBpbnQgc2F2ZWRfcmVnczsKKyAgaW50IHNvZnRfZnJhbWU7CS8qIEZSQU1FX1BPSU5URVJfUkVHTlVNLiAgKi8KKyAgaW50IGxvY2Fsc19iYXNlOwkvKiBUSFVNQl9IQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNLiAgKi8KKyAgaW50IG91dGdvaW5nX2FyZ3M7CS8qIFNUQUNLX1BPSU5URVJfUkVHTlVNLiAgKi8KKyAgdW5zaWduZWQgaW50IHNhdmVkX3JlZ3NfbWFzazsKK30KK2FybV9zdGFja19vZmZzZXRzOworCisvKiBBIEMgc3RydWN0dXJlIGZvciBtYWNoaW5lLXNwZWNpZmljLCBwZXItZnVuY3Rpb24gZGF0YS4KKyAgIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGNmdW4gc3RydWN0dXJlLiAgKi8KK3R5cGVkZWYgc3RydWN0IEdUWSgoKSkgbWFjaGluZV9mdW5jdGlvbgoreworICAvKiBBZGRpdGlvbmFsIHN0YWNrIGFkanVzdG1lbnQgaW4gX19idWlsdGluX2VoX3Rocm93LiAgKi8KKyAgcnR4IGVoX2VwaWxvZ3VlX3NwX29mczsKKyAgLyogUmVjb3JkcyBpZiBMUiBoYXMgdG8gYmUgc2F2ZWQgZm9yIGZhciBqdW1wcy4gICovCisgIGludCBmYXJfanVtcF91c2VkOworICAvKiBSZWNvcmRzIGlmIEFSR19QT0lOVEVSIHdhcyBldmVyIGxpdmUuICAqLworICBpbnQgYXJnX3BvaW50ZXJfbGl2ZTsKKyAgLyogUmVjb3JkcyBpZiB0aGUgc2F2ZSBvZiBMUiBoYXMgYmVlbiBlbGltaW5hdGVkLiAgKi8KKyAgaW50IGxyX3NhdmVfZWxpbWluYXRlZDsKKyAgLyogVGhlIHNpemUgb2YgdGhlIHN0YWNrIGZyYW1lLiAgT25seSB2YWxpZCBhZnRlciByZWxvYWQuICAqLworICBhcm1fc3RhY2tfb2Zmc2V0cyBzdGFja19vZmZzZXRzOworICAvKiBSZWNvcmRzIHRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLiAgKi8KKyAgdW5zaWduZWQgbG9uZyBmdW5jX3R5cGU7CisgIC8qIFJlY29yZCBpZiB0aGUgZnVuY3Rpb24gaGFzIGEgdmFyaWFibGUgYXJndW1lbnQgbGlzdC4gICovCisgIGludCB1c2VzX2Fub255bW91c19hcmdzOworICAvKiBSZWNvcmRzIGlmIHNpYmNhbGxzIGFyZSBibG9ja2VkIGJlY2F1c2UgYW4gYXJndW1lbnQKKyAgICAgcmVnaXN0ZXIgaXMgbmVlZGVkIHRvIHByZXNlcnZlIHN0YWNrIGFsaWdubWVudC4gICovCisgIGludCBzaWJjYWxsX2Jsb2NrZWQ7CisgIC8qIFRoZSBQSUMgcmVnaXN0ZXIgZm9yIHRoaXMgZnVuY3Rpb24uICBUaGlzIG1pZ2h0IGJlIGEgcHNldWRvLiAgKi8KKyAgcnR4IHBpY19yZWc7CisgIC8qIExhYmVscyBmb3IgcGVyLWZ1bmN0aW9uIFRodW1iIGNhbGwtdmlhIHN0dWJzLiAgT25lIHBlciBwb3RlbnRpYWwgY2FsbGluZworICAgICByZWdpc3Rlci4gIFdlIGNhbiBuZXZlciBjYWxsIHZpYSBMUiBvciBQQy4gIFdlIGNhbiBjYWxsIHZpYSBTUCBpZiBhCisgICAgIHRyYW1wb2xpbmUgaGFwcGVucyB0byBiZSBvbiB0aGUgdG9wIG9mIHRoZSBzdGFjay4gICovCisgIHJ0eCBjYWxsX3ZpYVsxNF07CisgIC8qIFNldCB0byAxIHdoZW4gYSByZXR1cm4gaW5zbiBpcyBvdXRwdXQsIHRoaXMgbWVhbnMgdGhhdCB0aGUgZXBpbG9ndWUKKyAgICAgaXMgbm90IG5lZWRlZC4gICovCisgIGludCByZXR1cm5fdXNlZF90aGlzX2Z1bmN0aW9uOworfQorbWFjaGluZV9mdW5jdGlvbjsKKworLyogQXMgaW4gdGhlIG1hY2hpbmVfZnVuY3Rpb24sIGEgZ2xvYmFsIHNldCBvZiBjYWxsLXZpYSBsYWJlbHMsIGZvciBjb2RlIAorICAgdGhhdCBpcyBpbiB0ZXh0X3NlY3Rpb24uICAqLworZXh0ZXJuIEdUWSgoKSkgcnR4IHRodW1iX2NhbGxfdmlhX2xhYmVsWzE0XTsKKworLyogVGhlIG51bWJlciBvZiBwb3RlbnRpYWwgd2F5cyBvZiBhc3NpZ25pbmcgdG8gYSBjby1wcm9jZXNzb3IuICAqLworI2RlZmluZSBBUk1fTlVNX0NPUFJPQ19TTE9UUyAxCisKKy8qIEVudW1lcmF0aW9uIG9mIHByb2NlZHVyZSBjYWxsaW5nIHN0YW5kYXJkIHZhcmlhbnRzLiAgV2UgZG9uJ3QgcmVhbGx5IAorICAgc3VwcG9ydCBhbGwgb2YgdGhlc2UgeWV0LiAgKi8KK2VudW0gYXJtX3BjcworeworICBBUk1fUENTX0FBUENTLAkvKiBCYXNlIHN0YW5kYXJkIEFBUENTLiAgKi8KKyAgQVJNX1BDU19BQVBDU19WRlAsCS8qIFVzZSBWRlAgcmVnaXN0ZXJzIGZvciBmbG9hdGluZyBwb2ludCB2YWx1ZXMuICAqLworICBBUk1fUENTX0FBUENTX0lXTU1YVCwgLyogVXNlIGlXTU1YVCByZWdpc3RlcnMgZm9yIHZlY3RvcnMuICAqLworICAvKiBUaGlzIG11c3QgYmUgdGhlIGxhc3QgQUFQQ1MgdmFyaWFudC4gICovCisgIEFSTV9QQ1NfQUFQQ1NfTE9DQUwsCS8qIFByaXZhdGUgY2FsbCB3aXRoaW4gdGhpcyBjb21waWxhdGlvbiB1bml0LiAgKi8KKyAgQVJNX1BDU19BVFBDUywJLyogQVRQQ1MuICAqLworICBBUk1fUENTX0FQQ1MsCQkvKiBBUENTIChsZWdhY3kgTGludXggZXRjKS4gICovCisgIEFSTV9QQ1NfVU5LTk9XTgorfTsKKworLyogQSBDIHR5cGUgZm9yIGRlY2xhcmluZyBhIHZhcmlhYmxlIHRoYXQgaXMgdXNlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgb2YKKyAgIGBGVU5DVElPTl9BUkcnIGFuZCBvdGhlciByZWxhdGVkIHZhbHVlcy4gICovCit0eXBlZGVmIHN0cnVjdAoreworICAvKiBUaGlzIGlzIHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJzIG9mIGFyZ3VtZW50cyBzY2FubmVkIHNvIGZhci4gICovCisgIGludCBucmVnczsKKyAgLyogVGhpcyBpcyB0aGUgbnVtYmVyIG9mIGlXTU1YdCByZWdpc3RlciBhcmd1bWVudHMgc2Nhbm5lZCBzbyBmYXIuICAqLworICBpbnQgaXdtbXh0X25yZWdzOworICBpbnQgbmFtZWRfY291bnQ7CisgIGludCBuYXJnczsKKyAgLyogV2hpY2ggcHJvY2VkdXJlIGNhbGwgdmFyaWFudCB0byB1c2UgZm9yIHRoaXMgY2FsbC4gICovCisgIGVudW0gYXJtX3BjcyBwY3NfdmFyaWFudDsKKworICAvKiBBQVBDUyByZWxhdGVkIHN0YXRlIHRyYWNraW5nLiAgKi8KKyAgaW50IGFhcGNzX2FyZ19wcm9jZXNzZWQ7ICAvKiBObyBuZWVkIHRvIGxheSBvdXQgdGhpcyBhcmd1bWVudCBhZ2Fpbi4gICovCisgIGludCBhYXBjc19jcHJjX3Nsb3Q7ICAgICAgLyogSW5kZXggb2YgY28tcHJvY2Vzc29yIHJ1bGVzIHRvIGhhbmRsZQorCQkJICAgICAgIHRoaXMgYXJndW1lbnQsIG9yIC0xIGlmIHVzaW5nIGNvcmUKKwkJCSAgICAgICByZWdpc3RlcnMuICAqLworICBpbnQgYWFwY3NfbmNybjsKKyAgaW50IGFhcGNzX25leHRfbmNybjsKKyAgcnR4IGFhcGNzX3JlZzsJICAgIC8qIFJlZ2lzdGVyIGFzc2lnbmVkIHRvIHRoaXMgYXJndW1lbnQuICAqLworICBpbnQgYWFwY3NfcGFydGlhbDsJICAgIC8qIEhvdyBtYW55IGJ5dGVzIGFyZSBwYXNzZWQgaW4gcmVncyAoaWYKKwkJCSAgICAgICBzcGxpdCBiZXR3ZWVuIGNvcmUgcmVncyBhbmQgc3RhY2suCisJCQkgICAgICAgWmVybyBvdGhlcndpc2UuICAqLworICBpbnQgYWFwY3NfY3ByY19mYWlsZWRbQVJNX05VTV9DT1BST0NfU0xPVFNdOworICBpbnQgY2FuX3NwbGl0OwkgICAgLyogQXJndW1lbnQgY2FuIGJlIHNwbGl0IGJldHdlZW4gY29yZSByZWdzCisJCQkgICAgICAgYW5kIHRoZSBzdGFjay4gICovCisgIC8qIFByaXZhdGUgZGF0YSBmb3IgdHJhY2tpbmcgVkZQIHJlZ2lzdGVyIGFsbG9jYXRpb24gKi8KKyAgdW5zaWduZWQgYWFwY3NfdmZwX3JlZ3NfZnJlZTsKKyAgdW5zaWduZWQgYWFwY3NfdmZwX3JlZ19hbGxvYzsKKyAgaW50IGFhcGNzX3ZmcF9yY291bnQ7CisgIE1BQ0hNT0RFIGFhcGNzX3ZmcF9ybW9kZTsKK30gQ1VNVUxBVElWRV9BUkdTOworCisvKiBEZWZpbmUgd2hlcmUgdG8gcHV0IHRoZSBhcmd1bWVudHMgdG8gYSBmdW5jdGlvbi4KKyAgIFZhbHVlIGlzIHplcm8gdG8gcHVzaCB0aGUgYXJndW1lbnQgb24gdGhlIHN0YWNrLAorICAgb3IgYSBoYXJkIHJlZ2lzdGVyIGluIHdoaWNoIHRvIHN0b3JlIHRoZSBhcmd1bWVudC4KKworICAgTU9ERSBpcyB0aGUgYXJndW1lbnQncyBtYWNoaW5lIG1vZGUuCisgICBUWVBFIGlzIHRoZSBkYXRhIHR5cGUgb2YgdGhlIGFyZ3VtZW50IChhcyBhIHRyZWUpLgorICAgIFRoaXMgaXMgbnVsbCBmb3IgbGliY2FsbHMgd2hlcmUgdGhhdCBpbmZvcm1hdGlvbiBtYXkKKyAgICBub3QgYmUgYXZhaWxhYmxlLgorICAgQ1VNIGlzIGEgdmFyaWFibGUgb2YgdHlwZSBDVU1VTEFUSVZFX0FSR1Mgd2hpY2ggZ2l2ZXMgaW5mbyBhYm91dAorICAgIHRoZSBwcmVjZWRpbmcgYXJncyBhbmQgYWJvdXQgdGhlIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZC4KKyAgIE5BTUVEIGlzIG5vbnplcm8gaWYgdGhpcyBhcmd1bWVudCBpcyBhIG5hbWVkIHBhcmFtZXRlcgorICAgIChvdGhlcndpc2UgaXQgaXMgYW4gZXh0cmEgcGFyYW1ldGVyIG1hdGNoaW5nIGFuIGVsbGlwc2lzKS4KKworICAgT24gdGhlIEFSTSwgbm9ybWFsbHkgdGhlIGZpcnN0IDE2IGJ5dGVzIGFyZSBwYXNzZWQgaW4gcmVnaXN0ZXJzIHIwLXIzOyBhbGwKKyAgIG90aGVyIGFyZ3VtZW50cyBhcmUgcGFzc2VkIG9uIHRoZSBzdGFjay4gIElmIChOQU1FRCA9PSAwKSAod2hpY2ggaGFwcGVucworICAgb25seSBpbiBhc3NpZ25fcGFybXMsIHNpbmNlIFRBUkdFVF9TRVRVUF9JTkNPTUlOR19WQVJBUkdTIGlzCisgICBkZWZpbmVkKSwgc2F5IGl0IGlzIHBhc3NlZCBpbiB0aGUgc3RhY2sgKGZ1bmN0aW9uX3Byb2xvZ3VlIHdpbGwKKyAgIGluZGVlZCBtYWtlIGl0IHBhc3MgaW4gdGhlIHN0YWNrIGlmIG5lY2Vzc2FyeSkuICAqLworI2RlZmluZSBGVU5DVElPTl9BUkcoQ1VNLCBNT0RFLCBUWVBFLCBOQU1FRCkgXAorICBhcm1fZnVuY3Rpb25fYXJnICgmKENVTSksIChNT0RFKSwgKFRZUEUpLCAoTkFNRUQpKQorCisjZGVmaW5lIEZVTkNUSU9OX0FSR19QQURESU5HKE1PREUsIFRZUEUpIFwKKyAgKGFybV9wYWRfYXJnX3Vwd2FyZCAoTU9ERSwgVFlQRSkgPyB1cHdhcmQgOiBkb3dud2FyZCkKKworI2RlZmluZSBCTE9DS19SRUdfUEFERElORyhNT0RFLCBUWVBFLCBGSVJTVCkgXAorICAoYXJtX3BhZF9yZWdfdXB3YXJkIChNT0RFLCBUWVBFLCBGSVJTVCkgPyB1cHdhcmQgOiBkb3dud2FyZCkKKworLyogRm9yIEFBUENTLCBwYWRkaW5nIHNob3VsZCBuZXZlciBiZSBiZWxvdyB0aGUgYXJndW1lbnQuIEZvciBvdGhlciBBQklzLAorICogbWltaWMgdGhlIGRlZmF1bHQuICAqLworI2RlZmluZSBQQURfVkFSQVJHU19ET1dOIFwKKyAgKChUQVJHRVRfQUFQQ1NfQkFTRUQpID8gMCA6IEJZVEVTX0JJR19FTkRJQU4pCisKKy8qIEluaXRpYWxpemUgYSB2YXJpYWJsZSBDVU0gb2YgdHlwZSBDVU1VTEFUSVZFX0FSR1MKKyAgIGZvciBhIGNhbGwgdG8gYSBmdW5jdGlvbiB3aG9zZSBkYXRhIHR5cGUgaXMgRk5UWVBFLgorICAgRm9yIGEgbGlicmFyeSBjYWxsLCBGTlRZUEUgaXMgMC4KKyAgIE9uIHRoZSBBUk0sIHRoZSBvZmZzZXQgc3RhcnRzIGF0IDAuICAqLworI2RlZmluZSBJTklUX0NVTVVMQVRJVkVfQVJHUyhDVU0sIEZOVFlQRSwgTElCTkFNRSwgRk5ERUNMLCBOX05BTUVEX0FSR1MpIFwKKyAgYXJtX2luaXRfY3VtdWxhdGl2ZV9hcmdzICgmKENVTSksIChGTlRZUEUpLCAoTElCTkFNRSksIChGTkRFQ0wpKQorCisvKiBVcGRhdGUgdGhlIGRhdGEgaW4gQ1VNIHRvIGFkdmFuY2Ugb3ZlciBhbiBhcmd1bWVudAorICAgb2YgbW9kZSBNT0RFIGFuZCBkYXRhIHR5cGUgVFlQRS4KKyAgIChUWVBFIGlzIG51bGwgZm9yIGxpYmNhbGxzIHdoZXJlIHRoYXQgaW5mb3JtYXRpb24gbWF5IG5vdCBiZSBhdmFpbGFibGUuKSAgKi8KKyNkZWZpbmUgRlVOQ1RJT05fQVJHX0FEVkFOQ0UoQ1VNLCBNT0RFLCBUWVBFLCBOQU1FRCkJXAorICBhcm1fZnVuY3Rpb25fYXJnX2FkdmFuY2UgKCYoQ1VNKSwgKE1PREUpLCAoVFlQRSksIChOQU1FRCkpCisKKy8qIElmIGRlZmluZWQsIGEgQyBleHByZXNzaW9uIHRoYXQgZ2l2ZXMgdGhlIGFsaWdubWVudCBib3VuZGFyeSwgaW4gYml0cywgb2YgYW4KKyAgIGFyZ3VtZW50IHdpdGggdGhlIHNwZWNpZmllZCBtb2RlIGFuZCB0eXBlLiAgSWYgaXQgaXMgbm90IGRlZmluZWQsCisgICBgUEFSTV9CT1VOREFSWScgaXMgdXNlZCBmb3IgYWxsIGFyZ3VtZW50cy4gICovCisjZGVmaW5lIEZVTkNUSU9OX0FSR19CT1VOREFSWShNT0RFLFRZUEUpIFwKKyAgICgoQVJNX0RPVUJMRVdPUkRfQUxJR04gJiYgYXJtX25lZWRzX2RvdWJsZXdvcmRfYWxpZ24gKE1PREUsIFRZUEUpKSBcCisgICA/IERPVUJMRVdPUkRfQUxJR05NRU5UIFwKKyAgIDogUEFSTV9CT1VOREFSWSApCisKKy8qIDEgaWYgTiBpcyBhIHBvc3NpYmxlIHJlZ2lzdGVyIG51bWJlciBmb3IgZnVuY3Rpb24gYXJndW1lbnQgcGFzc2luZy4KKyAgIE9uIHRoZSBBUk0sIHIwLXIzIGFyZSB1c2VkIHRvIHBhc3MgYXJncy4gICovCisjZGVmaW5lIEZVTkNUSU9OX0FSR19SRUdOT19QKFJFR05PKQkJCQkJXAorICAgKElOX1JBTkdFICgoUkVHTk8pLCAwLCAzKQkJCQkJCVwKKyAgICB8fCAoVEFSR0VUX0FBUENTX0JBU0VEICYmIFRBUkdFVF9WRlAgJiYgVEFSR0VUX0hBUkRfRkxPQVQJCVwKKwkmJiBJTl9SQU5HRSAoKFJFR05PKSwgRklSU1RfVkZQX1JFR05VTSwgRklSU1RfVkZQX1JFR05VTSArIDE1KSkJXAorICAgIHx8IChUQVJHRVRfSVdNTVhUX0FCSQkJCQkJCVwKKwkmJiBJTl9SQU5HRSAoKFJFR05PKSwgRklSU1RfSVdNTVhUX1JFR05VTSwgRklSU1RfSVdNTVhUX1JFR05VTSArIDkpKSkKKworDAorLyogSWYgeW91ciB0YXJnZXQgZW52aXJvbm1lbnQgZG9lc24ndCBwcmVmaXggdXNlciBmdW5jdGlvbnMgd2l0aCBhbgorICAgdW5kZXJzY29yZSwgeW91IG1heSB3aXNoIHRvIHJlLWRlZmluZSB0aGlzIHRvIHByZXZlbnQgYW55IGNvbmZsaWN0cy4gICovCisjaWZuZGVmIEFSTV9NQ09VTlRfTkFNRQorI2RlZmluZSBBUk1fTUNPVU5UX05BTUUgIiptY291bnQiCisjZW5kaWYKKworLyogQ2FsbCB0aGUgZnVuY3Rpb24gcHJvZmlsZXIgd2l0aCBhIGdpdmVuIHByb2ZpbGUgbGFiZWwuICBUaGUgQWNvcm4KKyAgIGNvbXBpbGVyIHB1dHMgdGhpcyBCRUZPUkUgdGhlIHByb2xvZyBidXQgZ2NjIHB1dHMgaXQgYWZ0ZXJ3YXJkcy4KKyAgIE9uIHRoZSBBUk0gdGhlIGZ1bGwgcHJvZmlsZSBjb2RlIHdpbGwgbG9vayBsaWtlOgorCS5kYXRhCisJTFAxCisJCS53b3JkCTAKKwkudGV4dAorCQltb3YJaXAsIGxyCisJCWJsCW1jb3VudAorCQkud29yZAlMUDEKKworICAgcHJvZmlsZV9mdW5jdGlvbigpIGluIGZpbmFsLmMgb3V0cHV0cyB0aGUgLmRhdGEgc2VjdGlvbiwgRlVOQ1RJT05fUFJPRklMRVIKKyAgIHdpbGwgb3V0cHV0IHRoZSAudGV4dCBzZWN0aW9uLgorCisgICBUaGUgYGBtb3YgaXAsbHInJyBzZWVtcyBsaWtlIGEgZ29vZCBpZGVhIHRvIHN0aWNrIHdpdGggY2MgY29udmVudGlvbi4KKyAgIGBgcHJvZicnIGRvZXNuJ3Qgc2VlbSB0byBtaW5kIGFib3V0IHRoaXMhCisKKyAgIE5vdGUgLSB0aGlzIHZlcnNpb24gb2YgdGhlIGNvZGUgaXMgZGVzaWduZWQgdG8gd29yayBpbiBib3RoIEFSTSBhbmQKKyAgIFRodW1iIG1vZGVzLiAgKi8KKyNpZm5kZWYgQVJNX0ZVTkNUSU9OX1BST0ZJTEVSCisjZGVmaW5lIEFSTV9GVU5DVElPTl9QUk9GSUxFUihTVFJFQU0sIExBQkVMTk8pICAJXAorewkJCQkJCQlcCisgIGNoYXIgdGVtcFsyMF07CQkJCQlcCisgIHJ0eCBzeW07CQkJCQkJXAorCQkJCQkJCVwKKyAgYXNtX2ZwcmludGYgKFNUUkVBTSwgIlx0bW92XHQlciwgJXJcblx0YmxcdCIsCQlcCisJICAgSVBfUkVHTlVNLCBMUl9SRUdOVU0pOwkJCVwKKyAgYXNzZW1ibGVfbmFtZSAoU1RSRUFNLCBBUk1fTUNPVU5UX05BTUUpOwkJXAorICBmcHV0YyAoJ1xuJywgU1RSRUFNKTsJCQkJCVwKKyAgQVNNX0dFTkVSQVRFX0lOVEVSTkFMX0xBQkVMICh0ZW1wLCAiTFAiLCBMQUJFTE5PKTsJXAorICBzeW0gPSBnZW5fcnR4X1NZTUJPTF9SRUYgKFBtb2RlLCB0ZW1wKTsJCVwKKyAgYXNzZW1ibGVfYWxpZ25lZF9pbnRlZ2VyIChVTklUU19QRVJfV09SRCwgc3ltKTsJXAorfQorI2VuZGlmCisKKyNpZmRlZiBUSFVNQl9GVU5DVElPTl9QUk9GSUxFUgorI2RlZmluZSBGVU5DVElPTl9QUk9GSUxFUihTVFJFQU0sIExBQkVMTk8pCQlcCisgIGlmIChUQVJHRVRfQVJNKQkJCQkJXAorICAgIEFSTV9GVU5DVElPTl9QUk9GSUxFUiAoU1RSRUFNLCBMQUJFTE5PKQkJXAorICBlbHNlCQkJCQkJCVwKKyAgICBUSFVNQl9GVU5DVElPTl9QUk9GSUxFUiAoU1RSRUFNLCBMQUJFTE5PKQorI2Vsc2UKKyNkZWZpbmUgRlVOQ1RJT05fUFJPRklMRVIoU1RSRUFNLCBMQUJFTE5PKQkJXAorICAgIEFSTV9GVU5DVElPTl9QUk9GSUxFUiAoU1RSRUFNLCBMQUJFTE5PKQorI2VuZGlmCisKKy8qIEVYSVRfSUdOT1JFX1NUQUNLIHNob3VsZCBiZSBub256ZXJvIGlmLCB3aGVuIHJldHVybmluZyBmcm9tIGEgZnVuY3Rpb24sCisgICB0aGUgc3RhY2sgcG9pbnRlciBkb2VzIG5vdCBtYXR0ZXIuICBUaGUgdmFsdWUgaXMgdGVzdGVkIG9ubHkgaW4KKyAgIGZ1bmN0aW9ucyB0aGF0IGhhdmUgZnJhbWUgcG9pbnRlcnMuCisgICBObyBkZWZpbml0aW9uIGlzIGVxdWl2YWxlbnQgdG8gYWx3YXlzIHplcm8uCisKKyAgIE9uIHRoZSBBUk0sIHRoZSBmdW5jdGlvbiBlcGlsb2d1ZSByZWNvdmVycyB0aGUgc3RhY2sgcG9pbnRlciBmcm9tIHRoZQorICAgZnJhbWUuICAqLworI2RlZmluZSBFWElUX0lHTk9SRV9TVEFDSyAxCisKKyNkZWZpbmUgRVBJTE9HVUVfVVNFUyhSRUdOTykgKChSRUdOTykgPT0gTFJfUkVHTlVNKQorCisvKiBEZXRlcm1pbmUgaWYgdGhlIGVwaWxvZ3VlIHNob3VsZCBiZSBvdXRwdXQgYXMgUlRMLgorICAgWW91IHNob3VsZCBvdmVycmlkZSB0aGlzIGlmIHlvdSBkZWZpbmUgRlVOQ1RJT05fRVhUUkFfRVBJTE9HVUUuICAqLworLyogVGhpcyBpcyBkaXNhYmxlZCBmb3IgVGh1bWItMiBiZWNhdXNlIGl0IHdpbGwgY29uZnVzZSB0aGUKKyAgIGNvbmRpdGlvbmFsIGluc24gY291bnRlci4gICovCisjZGVmaW5lIFVTRV9SRVRVUk5fSU5TTihJU0NPTkQpCQkJCVwKKyAgKFRBUkdFVF9BUk0gPyB1c2VfcmV0dXJuX2luc24gKElTQ09ORCwgTlVMTCkgOiAwKQorCisvKiBEZWZpbml0aW9ucyBmb3IgcmVnaXN0ZXIgZWxpbWluYXRpb25zLgorCisgICBUaGlzIGlzIGFuIGFycmF5IG9mIHN0cnVjdHVyZXMuICBFYWNoIHN0cnVjdHVyZSBpbml0aWFsaXplcyBvbmUgcGFpcgorICAgb2YgZWxpbWluYWJsZSByZWdpc3RlcnMuICBUaGUgImZyb20iIHJlZ2lzdGVyIG51bWJlciBpcyBnaXZlbiBmaXJzdCwKKyAgIGZvbGxvd2VkIGJ5ICJ0byIuICBFbGltaW5hdGlvbnMgb2YgdGhlIHNhbWUgImZyb20iIHJlZ2lzdGVyIGFyZSBsaXN0ZWQKKyAgIGluIG9yZGVyIG9mIHByZWZlcmVuY2UuCisKKyAgIFdlIGhhdmUgdHdvIHJlZ2lzdGVycyB0aGF0IGNhbiBiZSBlbGltaW5hdGVkIG9uIHRoZSBBUk0uICBGaXJzdCwgdGhlCisgICBhcmcgcG9pbnRlciByZWdpc3RlciBjYW4gb2Z0ZW4gYmUgZWxpbWluYXRlZCBpbiBmYXZvciBvZiB0aGUgc3RhY2sKKyAgIHBvaW50ZXIgcmVnaXN0ZXIuICBTZWNvbmRseSwgdGhlIHBzZXVkbyBmcmFtZSBwb2ludGVyIHJlZ2lzdGVyIGNhbiBhbHdheXMKKyAgIGJlIGVsaW1pbmF0ZWQ7IGl0IGlzIHJlcGxhY2VkIHdpdGggZWl0aGVyIHRoZSBzdGFjayBvciB0aGUgcmVhbCBmcmFtZQorICAgcG9pbnRlci4gIE5vdGUgd2UgaGF2ZSB0byB1c2Uge0FSTXxUSFVNQn1fSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTQorICAgYmVjYXVzZSB0aGUgZGVmaW5pdGlvbiBvZiBIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNIGlzIG5vdCBhIGNvbnN0YW50LiAgKi8KKworI2RlZmluZSBFTElNSU5BQkxFX1JFR1MJCQkJCQlcCit7eyBBUkdfUE9JTlRFUl9SRUdOVU0sICAgICAgICBTVEFDS19QT0lOVEVSX1JFR05VTSAgICAgICAgICAgIH0sXAorIHsgQVJHX1BPSU5URVJfUkVHTlVNLCAgICAgICAgRlJBTUVfUE9JTlRFUl9SRUdOVU0gICAgICAgICAgICB9LFwKKyB7IEFSR19QT0lOVEVSX1JFR05VTSwgICAgICAgIEFSTV9IQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNICAgfSxcCisgeyBBUkdfUE9JTlRFUl9SRUdOVU0sICAgICAgICBUSFVNQl9IQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNIH0sXAorIHsgRlJBTUVfUE9JTlRFUl9SRUdOVU0sICAgICAgU1RBQ0tfUE9JTlRFUl9SRUdOVU0gICAgICAgICAgICB9LFwKKyB7IEZSQU1FX1BPSU5URVJfUkVHTlVNLCAgICAgIEFSTV9IQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNICAgfSxcCisgeyBGUkFNRV9QT0lOVEVSX1JFR05VTSwgICAgICBUSFVNQl9IQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNIH19CisKKy8qIERlZmluZSB0aGUgb2Zmc2V0IGJldHdlZW4gdHdvIHJlZ2lzdGVycywgb25lIHRvIGJlIGVsaW1pbmF0ZWQsIGFuZCB0aGUKKyAgIG90aGVyIGl0cyByZXBsYWNlbWVudCwgYXQgdGhlIHN0YXJ0IG9mIGEgcm91dGluZS4gICovCisjZGVmaW5lIElOSVRJQUxfRUxJTUlOQVRJT05fT0ZGU0VUKEZST00sIFRPLCBPRkZTRVQpCQkJXAorICBpZiAoVEFSR0VUX0FSTSkJCQkJCQkJXAorICAgIChPRkZTRVQpID0gYXJtX2NvbXB1dGVfaW5pdGlhbF9lbGltaW5hdGlvbl9vZmZzZXQgKEZST00sIFRPKTsJXAorICBlbHNlCQkJCQkJCQkJXAorICAgIChPRkZTRVQpID0gdGh1bWJfY29tcHV0ZV9pbml0aWFsX2VsaW1pbmF0aW9uX29mZnNldCAoRlJPTSwgVE8pCisKKy8qIFNwZWNpYWwgY2FzZSBoYW5kbGluZyBvZiB0aGUgbG9jYXRpb24gb2YgYXJndW1lbnRzIHBhc3NlZCBvbiB0aGUgc3RhY2suICAqLworI2RlZmluZSBERUJVR0dFUl9BUkdfT0ZGU0VUKHZhbHVlLCBhZGRyKSB2YWx1ZSA/IHZhbHVlIDogYXJtX2RlYnVnZ2VyX2FyZ19vZmZzZXQgKHZhbHVlLCBhZGRyKQorCisvKiBJbml0aWFsaXplIGRhdGEgdXNlZCBieSBpbnNuIGV4cGFuZGVycy4gIFRoaXMgaXMgY2FsbGVkIGZyb20gaW5zbl9lbWl0LAorICAgb25jZSBmb3IgZXZlcnkgZnVuY3Rpb24gYmVmb3JlIGNvZGUgaXMgZ2VuZXJhdGVkLiAgKi8KKyNkZWZpbmUgSU5JVF9FWFBBTkRFUlMgIGFybV9pbml0X2V4cGFuZGVycyAoKQorCisvKiBMZW5ndGggaW4gdW5pdHMgb2YgdGhlIHRyYW1wb2xpbmUgZm9yIGVudGVyaW5nIGEgbmVzdGVkIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgVFJBTVBPTElORV9TSVpFICAoVEFSR0VUXzMyQklUID8gMTYgOiAyMCkKKworLyogQWxpZ25tZW50IHJlcXVpcmVkIGZvciBhIHRyYW1wb2xpbmUgaW4gYml0cy4gICovCisjZGVmaW5lIFRSQU1QT0xJTkVfQUxJR05NRU5UICAzMgorDAorLyogQWRkcmVzc2luZyBtb2RlcywgYW5kIGNsYXNzaWZpY2F0aW9uIG9mIHJlZ2lzdGVycyBmb3IgdGhlbS4gICovCisjZGVmaW5lIEhBVkVfUE9TVF9JTkNSRU1FTlQgICAxCisjZGVmaW5lIEhBVkVfUFJFX0lOQ1JFTUVOVCAgICBUQVJHRVRfMzJCSVQKKyNkZWZpbmUgSEFWRV9QT1NUX0RFQ1JFTUVOVCAgIFRBUkdFVF8zMkJJVAorI2RlZmluZSBIQVZFX1BSRV9ERUNSRU1FTlQgICAgVEFSR0VUXzMyQklUCisjZGVmaW5lIEhBVkVfUFJFX01PRElGWV9ESVNQICBUQVJHRVRfMzJCSVQKKyNkZWZpbmUgSEFWRV9QT1NUX01PRElGWV9ESVNQIFRBUkdFVF8zMkJJVAorI2RlZmluZSBIQVZFX1BSRV9NT0RJRllfUkVHICAgVEFSR0VUXzMyQklUCisjZGVmaW5lIEhBVkVfUE9TVF9NT0RJRllfUkVHICBUQVJHRVRfMzJCSVQKKworLyogTWFjcm9zIHRvIGNoZWNrIHJlZ2lzdGVyIG51bWJlcnMgYWdhaW5zdCBzcGVjaWZpYyByZWdpc3RlciBjbGFzc2VzLiAgKi8KKworLyogVGhlc2UgYXNzdW1lIHRoYXQgUkVHTk8gaXMgYSBoYXJkIG9yIHBzZXVkbyByZWcgbnVtYmVyLgorICAgVGhleSBnaXZlIG5vbnplcm8gb25seSBpZiBSRUdOTyBpcyBhIGhhcmQgcmVnIG9mIHRoZSBzdWl0YWJsZSBjbGFzcworICAgb3IgYSBwc2V1ZG8gcmVnIGN1cnJlbnRseSBhbGxvY2F0ZWQgdG8gYSBzdWl0YWJsZSBoYXJkIHJlZy4KKyAgIFNpbmNlIHRoZXkgdXNlIHJlZ19yZW51bWJlciwgdGhleSBhcmUgc2FmZSBvbmx5IG9uY2UgcmVnX3JlbnVtYmVyCisgICBoYXMgYmVlbiBhbGxvY2F0ZWQsIHdoaWNoIGhhcHBlbnMgaW4gbG9jYWwtYWxsb2MuYy4gICovCisjZGVmaW5lIFRFU1RfUkVHTk8oUiwgVEVTVCwgVkFMVUUpIFwKKyAgKChSIFRFU1QgVkFMVUUpIHx8ICgodW5zaWduZWQpIHJlZ19yZW51bWJlcltSXSBURVNUIFZBTFVFKSkKKworLyogRG9uJ3QgYWxsb3cgdGhlIHBjIHRvIGJlIHVzZWQuICAqLworI2RlZmluZSBBUk1fUkVHTk9fT0tfRk9SX0JBU0VfUChSRUdOTykJCQlcCisgIChURVNUX1JFR05PIChSRUdOTywgPCwgUENfUkVHTlVNKQkJCVwKKyAgIHx8IFRFU1RfUkVHTk8gKFJFR05PLCA9PSwgRlJBTUVfUE9JTlRFUl9SRUdOVU0pCVwKKyAgIHx8IFRFU1RfUkVHTk8gKFJFR05PLCA9PSwgQVJHX1BPSU5URVJfUkVHTlVNKSkKKworI2RlZmluZSBUSFVNQjFfUkVHTk9fTU9ERV9PS19GT1JfQkFTRV9QKFJFR05PLCBNT0RFKQkJXAorICAoVEVTVF9SRUdOTyAoUkVHTk8sIDw9LCBMQVNUX0xPX1JFR05VTSkJCQlcCisgICB8fCAoR0VUX01PREVfU0laRSAoTU9ERSkgPj0gNAkJCQlcCisgICAgICAgJiYgVEVTVF9SRUdOTyAoUkVHTk8sID09LCBTVEFDS19QT0lOVEVSX1JFR05VTSkpKQorCisjZGVmaW5lIFJFR05PX01PREVfT0tfRk9SX0JBU0VfUChSRUdOTywgTU9ERSkJCVwKKyAgKFRBUkdFVF9USFVNQjEJCQkJCVwKKyAgID8gVEhVTUIxX1JFR05PX01PREVfT0tfRk9SX0JBU0VfUCAoUkVHTk8sIE1PREUpCVwKKyAgIDogQVJNX1JFR05PX09LX0ZPUl9CQVNFX1AgKFJFR05PKSkKKworLyogTm9uemVybyBpZiBYIGNhbiBiZSB0aGUgYmFzZSByZWdpc3RlciBpbiBhIHJlZytyZWcgYWRkcmVzc2luZyBtb2RlLgorICAgRm9yIFRodW1iLCB3ZSBjYW4gbm90IHVzZSBTUCArIHJlZywgc28gcmVqZWN0IFNQLiAgKi8KKyNkZWZpbmUgUkVHTk9fTU9ERV9PS19GT1JfUkVHX0JBU0VfUChYLCBNT0RFKQlcCisgIFJFR05PX01PREVfT0tfRk9SX0JBU0VfUCAoWCwgUUltb2RlKQorCisvKiBGb3IgQVJNIGNvZGUsIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIG1vZGUsIGJ1dCBmb3IgVGh1bWIsIHRoZSBpbmRleAorICAgbXVzdCBiZSBzdWl0YWJsZSBmb3IgdXNlIGluIGEgUUltb2RlIGxvYWQuICAqLworI2RlZmluZSBSRUdOT19PS19GT1JfSU5ERVhfUChSRUdOTykJXAorICAoUkVHTk9fTU9ERV9PS19GT1JfQkFTRV9QIChSRUdOTywgUUltb2RlKSBcCisgICAmJiAhVEVTVF9SRUdOTyAoUkVHTk8sID09LCBTVEFDS19QT0lOVEVSX1JFR05VTSkpCisKKy8qIE1heGltdW0gbnVtYmVyIG9mIHJlZ2lzdGVycyB0aGF0IGNhbiBhcHBlYXIgaW4gYSB2YWxpZCBtZW1vcnkgYWRkcmVzcy4KKyAgIFNoaWZ0cyBpbiBhZGRyZXNzZXMgY2FuJ3QgYmUgYnkgYSByZWdpc3Rlci4gICovCisjZGVmaW5lIE1BWF9SRUdTX1BFUl9BRERSRVNTIDIKKworLyogUmVjb2duaXplIGFueSBjb25zdGFudCB2YWx1ZSB0aGF0IGlzIGEgdmFsaWQgYWRkcmVzcy4gICovCisvKiBYWFggV2UgY2FuIGFkZHJlc3MgYW55IGNvbnN0YW50LCBldmVudHVhbGx5Li4uICAqLworLyogPz8/IFNob3VsZCB0aGUgVEFSR0VUX0FSTSBoZXJlIGFsc28gYXBwbHkgdG8gdGh1bWIyPyAgKi8KKyNkZWZpbmUgQ09OU1RBTlRfQUREUkVTU19QKFgpICAJCQlcCisgIChHRVRfQ09ERSAoWCkgPT0gU1lNQk9MX1JFRiAJCQlcCisgICAmJiAoQ09OU1RBTlRfUE9PTF9BRERSRVNTX1AgKFgpCQlcCisgICAgICAgfHwgKFRBUkdFVF9BUk0gJiYgb3B0aW1pemUgPiAwICYmIFNZTUJPTF9SRUZfRkxBRyAoWCkpKSkKKworLyogVHJ1ZSBpZiBTWU1CT0wgKyBPRkZTRVQgY29uc3RhbnRzIG11c3QgcmVmZXIgdG8gc29tZXRoaW5nIHdpdGhpbgorICAgU1lNQk9MJ3Mgc2VjdGlvbi4gICovCisjZGVmaW5lIEFSTV9PRkZTRVRTX01VU1RfQkVfV0lUSElOX1NFQ1RJT05TX1AgMAorCisvKiBOb256ZXJvIGlmIGFsbCB0YXJnZXQgcmVxdWlyZXMgYWxsIGFic29sdXRlIHJlbG9jYXRpb25zIGJlIFJfQVJNX0FCUzMyLiAgKi8KKyNpZm5kZWYgVEFSR0VUX0RFRkFVTFRfV09SRF9SRUxPQ0FUSU9OUworI2RlZmluZSBUQVJHRVRfREVGQVVMVF9XT1JEX1JFTE9DQVRJT05TIDAKKyNlbmRpZgorCisvKiBOb256ZXJvIGlmIHRoZSBjb25zdGFudCB2YWx1ZSBYIGlzIGEgbGVnaXRpbWF0ZSBnZW5lcmFsIG9wZXJhbmQuCisgICBJdCBpcyBnaXZlbiB0aGF0IFggc2F0aXNmaWVzIENPTlNUQU5UX1Agb3IgaXMgYSBDT05TVF9ET1VCTEUuCisKKyAgIE9uIHRoZSBBUk0sIGFsbG93IGFueSBpbnRlZ2VyIChpbnZhbGlkIG9uZXMgYXJlIHJlbW92ZWQgbGF0ZXIgYnkgaW5zbgorICAgcGF0dGVybnMpLCBuaWNlIGRvdWJsZXMgYW5kIHN5bWJvbF9yZWZzIHdoaWNoIHJlZmVyIHRvIHRoZSBmdW5jdGlvbidzCisgICBjb25zdGFudCBwb29sIFhYWC4KKworICAgV2hlbiBnZW5lcmF0aW5nIHBpYyBhbGxvdyBhbnl0aGluZy4gICovCisjZGVmaW5lIEFSTV9MRUdJVElNQVRFX0NPTlNUQU5UX1AoWCkJKGZsYWdfcGljIHx8ICEgbGFiZWxfbWVudGlvbmVkX3AgKFgpKQorCisjZGVmaW5lIFRIVU1CX0xFR0lUSU1BVEVfQ09OU1RBTlRfUChYKQlcCisgKCAgIEdFVF9DT0RFIChYKSA9PSBDT05TVF9JTlQJCVwKKyAgfHwgR0VUX0NPREUgKFgpID09IENPTlNUX0RPVUJMRQlcCisgIHx8IENPTlNUQU5UX0FERFJFU1NfUCAoWCkJCVwKKyAgfHwgZmxhZ19waWMpCisKKyNkZWZpbmUgTEVHSVRJTUFURV9DT05TVEFOVF9QKFgpCQkJXAorICAoIWFybV9jYW5ub3RfZm9yY2VfY29uc3RfbWVtIChYKQkJCVwKKyAgICYmIChUQVJHRVRfMzJCSVQgPyBBUk1fTEVHSVRJTUFURV9DT05TVEFOVF9QIChYKQlcCisJCSAgICA6IFRIVU1CX0xFR0lUSU1BVEVfQ09OU1RBTlRfUCAoWCkpKQorCisjaWZuZGVmIFNVQlRBUkdFVF9OQU1FX0VOQ09ESU5HX0xFTkdUSFMKKyNkZWZpbmUgU1VCVEFSR0VUX05BTUVfRU5DT0RJTkdfTEVOR1RIUworI2VuZGlmCisKKy8qIFRoaXMgaXMgYSBDIGZyYWdtZW50IGZvciB0aGUgaW5zaWRlIG9mIGEgc3dpdGNoIHN0YXRlbWVudC4KKyAgIEVhY2ggY2FzZSBsYWJlbCBzaG91bGQgcmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0bworICAgYmUgc3RyaXBwZWQgZnJvbSB0aGUgc3RhcnQgb2YgYSBmdW5jdGlvbidzIG5hbWUsIGlmIHRoYXQKKyAgIG5hbWUgc3RhcnRzIHdpdGggdGhlIGluZGljYXRlZCBjaGFyYWN0ZXIuICAqLworI2RlZmluZSBBUk1fTkFNRV9FTkNPRElOR19MRU5HVEhTCQlcCisgIGNhc2UgJyonOiAgcmV0dXJuIDE7CQkJCVwKKyAgU1VCVEFSR0VUX05BTUVfRU5DT0RJTkdfTEVOR1RIUworCisvKiBUaGlzIGlzIGhvdyB0byBvdXRwdXQgYSByZWZlcmVuY2UgdG8gYSB1c2VyLWxldmVsIGxhYmVsIG5hbWVkIE5BTUUuCisgICBgYXNzZW1ibGVfbmFtZScgdXNlcyB0aGlzLiAgKi8KKyN1bmRlZiAgQVNNX09VVFBVVF9MQUJFTFJFRgorI2RlZmluZSBBU01fT1VUUFVUX0xBQkVMUkVGKEZJTEUsIE5BTUUpCQlcCisgICBhcm1fYXNtX291dHB1dF9sYWJlbHJlZiAoRklMRSwgTkFNRSkKKworLyogT3V0cHV0IElUIGluc3RydWN0aW9ucyBmb3IgY29uZGl0aW9uYWxseSBleGVjdXRlZCBUaHVtYi0yIGluc3RydWN0aW9ucy4gICovCisjZGVmaW5lIEFTTV9PVVRQVVRfT1BDT0RFKFNUUkVBTSwgUFRSKQlcCisgIGlmIChUQVJHRVRfVEhVTUIyKQkJCVwKKyAgICB0aHVtYjJfYXNtX291dHB1dF9vcGNvZGUgKFNUUkVBTSk7CisKKy8qIFRoZSBFQUJJIHNwZWNpZmllcyB0aGF0IGNvbnN0cnVjdG9ycyBzaG91bGQgZ28gaW4gLmluaXRfYXJyYXkuCisgICBPdGhlciB0YXJnZXRzIHVzZSAuY3RvcnMgZm9yIGNvbXBhdGliaWxpdHkuICAqLworI2lmbmRlZiBBUk1fRUFCSV9DVE9SU19TRUNUSU9OX09QCisjZGVmaW5lIEFSTV9FQUJJX0NUT1JTX1NFQ1RJT05fT1AgXAorICAiXHQuc2VjdGlvblx0LmluaXRfYXJyYXksXCJhd1wiLCVpbml0X2FycmF5IgorI2VuZGlmCisjaWZuZGVmIEFSTV9FQUJJX0RUT1JTX1NFQ1RJT05fT1AKKyNkZWZpbmUgQVJNX0VBQklfRFRPUlNfU0VDVElPTl9PUCBcCisgICJcdC5zZWN0aW9uXHQuZmluaV9hcnJheSxcImF3XCIsJWZpbmlfYXJyYXkiCisjZW5kaWYKKyNkZWZpbmUgQVJNX0NUT1JTX1NFQ1RJT05fT1AgXAorICAiXHQuc2VjdGlvblx0LmN0b3JzLFwiYXdcIiwlcHJvZ2JpdHMiCisjZGVmaW5lIEFSTV9EVE9SU19TRUNUSU9OX09QIFwKKyAgIlx0LnNlY3Rpb25cdC5kdG9ycyxcImF3XCIsJXByb2diaXRzIgorCisvKiBEZWZpbmUgQ1RPUlNfU0VDVElPTl9BU01fT1AuICAqLworI3VuZGVmIENUT1JTX1NFQ1RJT05fQVNNX09QCisjdW5kZWYgRFRPUlNfU0VDVElPTl9BU01fT1AKKyNpZm5kZWYgSU5fTElCR0NDMgorIyBkZWZpbmUgQ1RPUlNfU0VDVElPTl9BU01fT1AgXAorICAgKFRBUkdFVF9BQVBDU19CQVNFRCA/IEFSTV9FQUJJX0NUT1JTX1NFQ1RJT05fT1AgOiBBUk1fQ1RPUlNfU0VDVElPTl9PUCkKKyMgZGVmaW5lIERUT1JTX1NFQ1RJT05fQVNNX09QIFwKKyAgIChUQVJHRVRfQUFQQ1NfQkFTRUQgPyBBUk1fRUFCSV9EVE9SU19TRUNUSU9OX09QIDogQVJNX0RUT1JTX1NFQ1RJT05fT1ApCisjZWxzZSAvKiAhZGVmaW5lZCAoSU5fTElCR0NDMikgKi8KKy8qIEluIGxpYmdjYywgQ1RPUlNfU0VDVElPTl9BU01fT1AgbXVzdCBiZSBhIGNvbXBpbGUtdGltZSBjb25zdGFudCwKKyAgIHNvIHdlIGNhbm5vdCB1c2UgdGhlIGRlZmluaXRpb24gYWJvdmUuICAqLworIyBpZmRlZiBfX0FSTV9FQUJJX18KKy8qIFRoZSAuY3RvcnMgc2VjdGlvbiBpcyBub3QgcGFydCBvZiB0aGUgRUFCSSwgc28gd2UgZG8gbm90IGRlZmluZQorICAgQ1RPUlNfU0VDVElPTl9BU01fT1Agd2hlbiBpbiBsaWJnY2M7IHRoYXQgcHJldmVudHMgY3J0c3R1ZmYKKyAgIGZyb20gdHJ5aW5nIHRvIHVzZSBpdC4gIFdlIGRvIGRlZmluZSBpdCB3aGVuIGRvaW5nIG5vcm1hbAorICAgY29tcGlsYXRpb24sIGFzIC5pbml0X2FycmF5IGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgLmN0b3JzLiAgKi8KKy8qIFRoZXJlIGlzIG5vIG5lZWQgdG8gZW1pdCBiZWdpbiBvciBlbmQgbWFya2VycyB3aGVuIHVzaW5nCisgICBpbml0X2FycmF5OyB0aGUgZHluYW1pYyBsaW5rZXIgd2lsbCBjb21wdXRlIHRoZSBzaXplIG9mIHRoZQorICAgYXJyYXkgaXRzZWxmIGJhc2VkIG9uIHNwZWNpYWwgc3ltYm9scyBjcmVhdGVkIGJ5IHRoZSBzdGF0aWMKKyAgIGxpbmtlci4gIEhvd2V2ZXIsIHdlIGRvIG5lZWQgdG8gYXJyYW5nZSB0byBzZXQgdXAKKyAgIGV4Y2VwdGlvbi1oYW5kbGluZyBoZXJlLiAgKi8KKyMgICBkZWZpbmUgQ1RPUl9MSVNUX0JFR0lOIGFzbSAoQVJNX0VBQklfQ1RPUlNfU0VDVElPTl9PUCkKKyMgICBkZWZpbmUgQ1RPUl9MSVNUX0VORCAvKiBlbXB0eSAqLworIyAgIGRlZmluZSBEVE9SX0xJU1RfQkVHSU4gYXNtIChBUk1fRUFCSV9EVE9SU19TRUNUSU9OX09QKQorIyAgIGRlZmluZSBEVE9SX0xJU1RfRU5EIC8qIGVtcHR5ICovCisjIGVsc2UgLyogIWRlZmluZWQgKF9fQVJNX0VBQklfXykgKi8KKyMgICBkZWZpbmUgQ1RPUlNfU0VDVElPTl9BU01fT1AgQVJNX0NUT1JTX1NFQ1RJT05fT1AKKyMgICBkZWZpbmUgRFRPUlNfU0VDVElPTl9BU01fT1AgQVJNX0RUT1JTX1NFQ1RJT05fT1AKKyMgZW5kaWYgLyogIWRlZmluZWQgKF9fQVJNX0VBQklfXykgKi8KKyNlbmRpZiAvKiAhZGVmaW5lZCAoSU5fTElCQ0MyKSAqLworCisvKiBUcnVlIGlmIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGNhbiBtZXJnZSBlbnRpdGllcyB3aXRoIHZhZ3VlIGxpbmthZ2UKKyAgIChlLmcuLCBzeW1ib2xzIGluIENPTURBVCBncm91cCkgZHVyaW5nIGR5bmFtaWMgbGlua2luZy4gICovCisjaWZuZGVmIFRBUkdFVF9BUk1fRFlOQU1JQ19WQUdVRV9MSU5LQUdFX1AKKyNkZWZpbmUgVEFSR0VUX0FSTV9EWU5BTUlDX1ZBR1VFX0xJTktBR0VfUCB0cnVlCisjZW5kaWYKKworI2RlZmluZSBBUk1fT1VUUFVUX0ZOX1VOV0lORChGLCBQUk9MT0dVRSkgYXJtX291dHB1dF9mbl91bndpbmQgKEYsIFBST0xPR1VFKQorCisjaWZkZWYgVEFSR0VUX1VOV0lORF9JTkZPCisjZGVmaW5lIEFSTV9FQUJJX1VOV0lORF9UQUJMRVMgXAorICAoKCFVU0lOR19TSkxKX0VYQ0VQVElPTlMgJiYgZmxhZ19leGNlcHRpb25zKSB8fCBmbGFnX3Vud2luZF90YWJsZXMpCisjZWxzZQorI2RlZmluZSBBUk1fRUFCSV9VTldJTkRfVEFCTEVTIDAKKyNlbmRpZgorCisvKiBUaGUgbWFjcm9zIFJFR19PS19GT1IuLi5fUCBhc3N1bWUgdGhhdCB0aGUgYXJnIGlzIGEgUkVHIHJ0eAorICAgYW5kIGNoZWNrIGl0cyB2YWxpZGl0eSBmb3IgYSBjZXJ0YWluIGNsYXNzLgorICAgV2UgaGF2ZSB0d28gYWx0ZXJuYXRlIGRlZmluaXRpb25zIGZvciBlYWNoIG9mIHRoZW0uCisgICBUaGUgdXN1YWwgZGVmaW5pdGlvbiBhY2NlcHRzIGFsbCBwc2V1ZG8gcmVnczsgdGhlIG90aGVyIHJlamVjdHMKKyAgIHRoZW0gdW5sZXNzIHRoZXkgaGF2ZSBiZWVuIGFsbG9jYXRlZCBzdWl0YWJsZSBoYXJkIHJlZ3MuCisgICBUaGUgc3ltYm9sIFJFR19PS19TVFJJQ1QgY2F1c2VzIHRoZSBsYXR0ZXIgZGVmaW5pdGlvbiB0byBiZSB1c2VkLgorICAgVGh1bWItMiBoYXMgdGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFzIGFybS4gICovCisjaWZuZGVmIFJFR19PS19TVFJJQ1QKKworI2RlZmluZSBBUk1fUkVHX09LX0ZPUl9CQVNFX1AoWCkJCVwKKyAgKFJFR05PIChYKSA8PSBMQVNUX0FSTV9SRUdOVU0JCQlcCisgICB8fCBSRUdOTyAoWCkgPj0gRklSU1RfUFNFVURPX1JFR0lTVEVSCVwKKyAgIHx8IFJFR05PIChYKSA9PSBGUkFNRV9QT0lOVEVSX1JFR05VTQkJXAorICAgfHwgUkVHTk8gKFgpID09IEFSR19QT0lOVEVSX1JFR05VTSkKKworI2RlZmluZSBBUk1fUkVHX09LX0ZPUl9JTkRFWF9QKFgpCQlcCisgICgoUkVHTk8gKFgpIDw9IExBU1RfQVJNX1JFR05VTQkJXAorICAgICYmIFJFR05PIChYKSAhPSBTVEFDS19QT0lOVEVSX1JFR05VTSkJXAorICAgfHwgUkVHTk8gKFgpID49IEZJUlNUX1BTRVVET19SRUdJU1RFUglcCisgICB8fCBSRUdOTyAoWCkgPT0gRlJBTUVfUE9JTlRFUl9SRUdOVU0JCVwKKyAgIHx8IFJFR05PIChYKSA9PSBBUkdfUE9JTlRFUl9SRUdOVU0pCisKKyNkZWZpbmUgVEhVTUIxX1JFR19NT0RFX09LX0ZPUl9CQVNFX1AoWCwgTU9ERSkJXAorICAoUkVHTk8gKFgpIDw9IExBU1RfTE9fUkVHTlVNCQkJXAorICAgfHwgUkVHTk8gKFgpID49IEZJUlNUX1BTRVVET19SRUdJU1RFUglcCisgICB8fCAoR0VUX01PREVfU0laRSAoTU9ERSkgPj0gNAkJXAorICAgICAgICYmIChSRUdOTyAoWCkgPT0gU1RBQ0tfUE9JTlRFUl9SRUdOVU0JXAorCSAgIHx8IChYKSA9PSBoYXJkX2ZyYW1lX3BvaW50ZXJfcnR4CVwKKwkgICB8fCAoWCkgPT0gYXJnX3BvaW50ZXJfcnR4KSkpCisKKyNkZWZpbmUgUkVHX1NUUklDVF9QIDAKKworI2Vsc2UgLyogUkVHX09LX1NUUklDVCAqLworCisjZGVmaW5lIEFSTV9SRUdfT0tfRk9SX0JBU0VfUChYKSAJCVwKKyAgQVJNX1JFR05PX09LX0ZPUl9CQVNFX1AgKFJFR05PIChYKSkKKworI2RlZmluZSBBUk1fUkVHX09LX0ZPUl9JTkRFWF9QKFgpIAkJXAorICBBUk1fUkVHTk9fT0tfRk9SX0lOREVYX1AgKFJFR05PIChYKSkKKworI2RlZmluZSBUSFVNQjFfUkVHX01PREVfT0tfRk9SX0JBU0VfUChYLCBNT0RFKQlcCisgIFRIVU1CMV9SRUdOT19NT0RFX09LX0ZPUl9CQVNFX1AgKFJFR05PIChYKSwgTU9ERSkKKworI2RlZmluZSBSRUdfU1RSSUNUX1AgMQorCisjZW5kaWYgLyogUkVHX09LX1NUUklDVCAqLworCisvKiBOb3cgZGVmaW5lIHNvbWUgaGVscGVycyBpbiB0ZXJtcyBvZiB0aGUgYWJvdmUuICAqLworCisjZGVmaW5lIFJFR19NT0RFX09LX0ZPUl9CQVNFX1AoWCwgTU9ERSkJCVwKKyAgKFRBUkdFVF9USFVNQjEJCQkJXAorICAgPyBUSFVNQjFfUkVHX01PREVfT0tfRk9SX0JBU0VfUCAoWCwgTU9ERSkJXAorICAgOiBBUk1fUkVHX09LX0ZPUl9CQVNFX1AgKFgpKQorCisvKiBGb3IgMTYtYml0IFRodW1iLCBhIHZhbGlkIGluZGV4IHJlZ2lzdGVyIGlzIGFueXRoaW5nIHRoYXQgY2FuIGJlIHVzZWQgaW4KKyAgIGEgYnl0ZSBsb2FkIGluc3RydWN0aW9uLiAgKi8KKyNkZWZpbmUgVEhVTUIxX1JFR19PS19GT1JfSU5ERVhfUChYKSBcCisgIFRIVU1CMV9SRUdfTU9ERV9PS19GT1JfQkFTRV9QIChYLCBRSW1vZGUpCisKKy8qIE5vbnplcm8gaWYgWCBpcyBhIGhhcmQgcmVnIHRoYXQgY2FuIGJlIHVzZWQgYXMgYW4gaW5kZXgKKyAgIG9yIGlmIGl0IGlzIGEgcHNldWRvIHJlZy4gIE9uIHRoZSBUaHVtYiwgdGhlIHN0YWNrIHBvaW50ZXIKKyAgIGlzIG5vdCBzdWl0YWJsZS4gICovCisjZGVmaW5lIFJFR19PS19GT1JfSU5ERVhfUChYKQkJCVwKKyAgKFRBUkdFVF9USFVNQjEJCQkJXAorICAgPyBUSFVNQjFfUkVHX09LX0ZPUl9JTkRFWF9QIChYKQkJXAorICAgOiBBUk1fUkVHX09LX0ZPUl9JTkRFWF9QIChYKSkKKworLyogTm9uemVybyBpZiBYIGNhbiBiZSB0aGUgYmFzZSByZWdpc3RlciBpbiBhIHJlZytyZWcgYWRkcmVzc2luZyBtb2RlLgorICAgRm9yIFRodW1iLCB3ZSBjYW4gbm90IHVzZSBTUCArIHJlZywgc28gcmVqZWN0IFNQLiAgKi8KKyNkZWZpbmUgUkVHX01PREVfT0tfRk9SX1JFR19CQVNFX1AoWCwgTU9ERSkJXAorICBSRUdfT0tfRk9SX0lOREVYX1AgKFgpCisMCisjZGVmaW5lIEFSTV9CQVNFX1JFR0lTVEVSX1JUWF9QKFgpICBcCisgIChHRVRfQ09ERSAoWCkgPT0gUkVHICYmIEFSTV9SRUdfT0tfRk9SX0JBU0VfUCAoWCkpCisKKyNkZWZpbmUgQVJNX0lOREVYX1JFR0lTVEVSX1JUWF9QKFgpICBcCisgIChHRVRfQ09ERSAoWCkgPT0gUkVHICYmIEFSTV9SRUdfT0tfRk9SX0lOREVYX1AgKFgpKQorDAorLyogRGVmaW5lIHRoaXMgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucy4gKi8KKyNkZWZpbmUgSEFORExFX1BSQUdNQV9QQUNLX1BVU0hfUE9QCisKKy8qIFNwZWNpZnkgdGhlIG1hY2hpbmUgbW9kZSB0aGF0IHRoaXMgbWFjaGluZSB1c2VzCisgICBmb3IgdGhlIGluZGV4IGluIHRoZSB0YWJsZWp1bXAgaW5zdHJ1Y3Rpb24uICAqLworI2RlZmluZSBDQVNFX1ZFQ1RPUl9NT0RFIFBtb2RlCisKKyNkZWZpbmUgQ0FTRV9WRUNUT1JfUENfUkVMQVRJVkUgKFRBUkdFVF9USFVNQjIJCQkJXAorCQkJCSB8fCAoVEFSR0VUX1RIVU1CMQkJCVwKKwkJCQkgICAgICYmIChvcHRpbWl6ZV9zaXplIHx8IGZsYWdfcGljKSkpCisKKyNkZWZpbmUgQ0FTRV9WRUNUT1JfU0hPUlRFTl9NT0RFKG1pbiwgbWF4LCBib2R5KQkJCVwKKyAgKFRBUkdFVF9USFVNQjEJCQkJCQkJXAorICAgPyAobWluID49IDAgJiYgbWF4IDwgNTEyCQkJCQkJXAorICAgICAgPyAoQUREUl9ESUZGX1ZFQ19GTEFHUyAoYm9keSkub2Zmc2V0X3Vuc2lnbmVkID0gMSwgUUltb2RlKQlcCisgICAgICA6IG1pbiA+PSAtMjU2ICYmIG1heCA8IDI1NgkJCQkJXAorICAgICAgPyAoQUREUl9ESUZGX1ZFQ19GTEFHUyAoYm9keSkub2Zmc2V0X3Vuc2lnbmVkID0gMCwgUUltb2RlKQlcCisgICAgICA6IG1pbiA+PSAwICYmIG1heCA8IDgxOTIJCQkJCQlcCisgICAgICA/IChBRERSX0RJRkZfVkVDX0ZMQUdTIChib2R5KS5vZmZzZXRfdW5zaWduZWQgPSAxLCBISW1vZGUpCVwKKyAgICAgIDogbWluID49IC00MDk2ICYmIG1heCA8IDQwOTYJCQkJCVwKKyAgICAgID8gKEFERFJfRElGRl9WRUNfRkxBR1MgKGJvZHkpLm9mZnNldF91bnNpZ25lZCA9IDAsIEhJbW9kZSkJXAorICAgICAgOiBTSW1vZGUpCQkJCQkJCQlcCisgICA6ICgobWluIDwgMCB8fCBtYXggPj0gMHgyMDAwIHx8ICFUQVJHRVRfVEhVTUIyKSA/IFNJbW9kZQkJXAorICAgICAgOiAobWF4ID49IDB4MjAwKSA/IEhJbW9kZQkJCQkJCVwKKyAgICAgIDogUUltb2RlKSkKKworLyogc2lnbmVkICdjaGFyJyBpcyBtb3N0IGNvbXBhdGlibGUsIGJ1dCBSSVNDIE9TIHdhbnRzIGl0IHVuc2lnbmVkLgorICAgdW5zaWduZWQgaXMgcHJvYmFibHkgYmVzdCwgYnV0IG1heSBicmVhayBzb21lIGNvZGUuICAqLworI2lmbmRlZiBERUZBVUxUX1NJR05FRF9DSEFSCisjZGVmaW5lIERFRkFVTFRfU0lHTkVEX0NIQVIgIDAKKyNlbmRpZgorCisvKiBNYXggbnVtYmVyIG9mIGJ5dGVzIHdlIGNhbiBtb3ZlIGZyb20gbWVtb3J5IHRvIG1lbW9yeQorICAgaW4gb25lIHJlYXNvbmFibHkgZmFzdCBpbnN0cnVjdGlvbi4gICovCisjZGVmaW5lIE1PVkVfTUFYIDQKKworI3VuZGVmICBNT1ZFX1JBVElPCisjZGVmaW5lIE1PVkVfUkFUSU8oc3BlZWQpIChhcm1fdHVuZV94c2NhbGUgPyA0IDogMikKKworLyogRGVmaW5lIGlmIG9wZXJhdGlvbnMgYmV0d2VlbiByZWdpc3RlcnMgYWx3YXlzIHBlcmZvcm0gdGhlIG9wZXJhdGlvbgorICAgb24gdGhlIGZ1bGwgcmVnaXN0ZXIgZXZlbiBpZiBhIG5hcnJvd2VyIG1vZGUgaXMgc3BlY2lmaWVkLiAgKi8KKyNkZWZpbmUgV09SRF9SRUdJU1RFUl9PUEVSQVRJT05TCisKKy8qIERlZmluZSBpZiBsb2FkaW5nIGluIE1PREUsIGFuIGludGVncmFsIG1vZGUgbmFycm93ZXIgdGhhbiBCSVRTX1BFUl9XT1JECisgICB3aWxsIGVpdGhlciB6ZXJvLWV4dGVuZCBvciBzaWduLWV4dGVuZC4gIFRoZSB2YWx1ZSBvZiB0aGlzIG1hY3JvIHNob3VsZAorICAgYmUgdGhlIGNvZGUgdGhhdCBzYXlzIHdoaWNoIG9uZSBvZiB0aGUgdHdvIG9wZXJhdGlvbnMgaXMgaW1wbGljaXRseQorICAgZG9uZSwgVU5LTk9XTiBpZiBub25lLiAgKi8KKyNkZWZpbmUgTE9BRF9FWFRFTkRfT1AoTU9ERSkJCQkJCQlcCisgIChUQVJHRVRfVEhVTUIgPyBaRVJPX0VYVEVORCA6CQkJCQkJXAorICAgKChhcm1fYXJjaDQgfHwgKE1PREUpID09IFFJbW9kZSkgPyBaRVJPX0VYVEVORAkJCVwKKyAgICA6ICgoQllURVNfQklHX0VORElBTiAmJiAoTU9ERSkgPT0gSEltb2RlKSA/IFNJR05fRVhURU5EIDogVU5LTk9XTikpKQorCisvKiBOb256ZXJvIGlmIGFjY2VzcyB0byBtZW1vcnkgYnkgYnl0ZXMgaXMgc2xvdyBhbmQgdW5kZXNpcmFibGUuICAqLworI2RlZmluZSBTTE9XX0JZVEVfQUNDRVNTIDAKKworI2RlZmluZSBTTE9XX1VOQUxJR05FRF9BQ0NFU1MoTU9ERSwgQUxJR04pIDEKKworLyogSW1tZWRpYXRlIHNoaWZ0IGNvdW50cyBhcmUgdHJ1bmNhdGVkIGJ5IHRoZSBvdXRwdXQgcm91dGluZXMgKG9yIHdhcyBpdAorICAgdGhlIGFzc2VtYmxlcj8pLiAgU2hpZnQgY291bnRzIGluIGEgcmVnaXN0ZXIgYXJlIHRydW5jYXRlZCBieSBBUk0uICBOb3RlCisgICB0aGF0IHRoZSBuYXRpdmUgY29tcGlsZXIgcHV0cyB0b28gbGFyZ2UgKD4gMzIpIGltbWVkaWF0ZSBzaGlmdCBjb3VudHMKKyAgIGludG8gYSByZWdpc3RlciBhbmQgc2hpZnRzIGJ5IHRoZSByZWdpc3RlciwgbGV0dGluZyB0aGUgQVJNIGRlY2lkZSB3aGF0CisgICB0byBkbyBpbnN0ZWFkIG9mIGRvaW5nIHRoYXQgaXRzZWxmLiAgKi8KKy8qIFRoaXMgaXMgYWxsIHdyb25nLiAgRGVmaW5pbmcgU0hJRlRfQ09VTlRfVFJVTkNBVEVEIHRlbGxzIGNvbWJpbmUgdGhhdAorICAgY29kZSBsaWtlIChYIDw8IChZICUgMzIpKSBmb3IgcmVnaXN0ZXIgWCwgWSBpcyBlcXVpdmFsZW50IHRvIChYIDw8IFkpLgorICAgT24gdGhlIGFybSwgWSBpbiBhIHJlZ2lzdGVyIGlzIHVzZWQgbW9kdWxvIDI1NiBmb3IgdGhlIHNoaWZ0LiBPbmx5IGZvcgorICAgcm90YXRlcyBpcyBtb2R1bG8gMzIgdXNlZC4gICovCisvKiAjZGVmaW5lIFNISUZUX0NPVU5UX1RSVU5DQVRFRCAxICovCisKKy8qIEFsbCBpbnRlZ2VycyBoYXZlIHRoZSBzYW1lIGZvcm1hdCBzbyB0cnVuY2F0aW9uIGlzIGVhc3kuICAqLworI2RlZmluZSBUUlVMWV9OT09QX1RSVU5DQVRJT04oT1VUUFJFQywgSU5QUkVDKSAgMQorCisvKiBDYWxsaW5nIGZyb20gcmVnaXN0ZXJzIGlzIGEgbWFzc2l2ZSBwYWluLiAgKi8KKyNkZWZpbmUgTk9fRlVOQ1RJT05fQ1NFIDEKKworLyogVGhlIG1hY2hpbmUgbW9kZXMgb2YgcG9pbnRlcnMgYW5kIGZ1bmN0aW9ucyAqLworI2RlZmluZSBQbW9kZSAgU0ltb2RlCisjZGVmaW5lIEZVTkNUSU9OX01PREUgIFBtb2RlCisKKyNkZWZpbmUgQVJNX0ZSQU1FX1JUWChYKQkJCQkJXAorICAoICAgKFgpID09IGZyYW1lX3BvaW50ZXJfcnR4IHx8IChYKSA9PSBzdGFja19wb2ludGVyX3J0eAlcCisgICB8fCAoWCkgPT0gYXJnX3BvaW50ZXJfcnR4KQorCisvKiBNb3ZlcyB0byBhbmQgZnJvbSBtZW1vcnkgYXJlIHF1aXRlIGV4cGVuc2l2ZSAqLworI2RlZmluZSBNRU1PUllfTU9WRV9DT1NUKE0sIENMQVNTLCBJTikJCQlcCisgIChUQVJHRVRfMzJCSVQgPyAxMCA6CQkJCQlcCisgICAoKEdFVF9NT0RFX1NJWkUgKE0pIDwgNCA/IDggOiAyICogR0VUX01PREVfU0laRSAoTSkpCVwKKyAgICAqIChDTEFTUyA9PSBMT19SRUdTID8gMSA6IDIpKSkKKworLyogVHJ5IHRvIGdlbmVyYXRlIHNlcXVlbmNlcyB0aGF0IGRvbid0IGludm9sdmUgYnJhbmNoZXMsIHdlIGNhbiB0aGVuIHVzZQorICAgY29uZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zICovCisjZGVmaW5lIEJSQU5DSF9DT1NUKHNwZWVkX3AsIHByZWRpY3RhYmxlX3ApIFwKKyAgKFRBUkdFVF8zMkJJVCA/IDQgOiAob3B0aW1pemUgPiAwID8gMiA6IDApKQorDAorLyogUG9zaXRpb24gSW5kZXBlbmRlbnQgQ29kZS4gICovCisvKiBXZSBkZWNpZGUgd2hpY2ggcmVnaXN0ZXIgdG8gdXNlIGJhc2VkIG9uIHRoZSBjb21waWxhdGlvbiBvcHRpb25zIGFuZAorICAgdGhlIGFzc2VtYmxlciBpbiB1c2U7IHRoaXMgaXMgbW9yZSBnZW5lcmFsIHRoYW4gdGhlIEFQQ1MgcmVzdHJpY3Rpb24gb2YKKyAgIHVzaW5nIHNiIChyOSkgYWxsIHRoZSB0aW1lLiAgKi8KK2V4dGVybiB1bnNpZ25lZCBhcm1fcGljX3JlZ2lzdGVyOworCisvKiBUaGUgcmVnaXN0ZXIgbnVtYmVyIG9mIHRoZSByZWdpc3RlciB1c2VkIHRvIGFkZHJlc3MgYSB0YWJsZSBvZiBzdGF0aWMKKyAgIGRhdGEgYWRkcmVzc2VzIGluIG1lbW9yeS4gICovCisjZGVmaW5lIFBJQ19PRkZTRVRfVEFCTEVfUkVHTlVNIGFybV9waWNfcmVnaXN0ZXIKKworLyogV2UgY2FuJ3QgZGlyZWN0bHkgYWNjZXNzIGFueXRoaW5nIHRoYXQgY29udGFpbnMgYSBzeW1ib2wsCisgICBub3IgY2FuIHdlIGluZGlyZWN0IHZpYSB0aGUgY29uc3RhbnQgcG9vbC4gIE9uZSBleGNlcHRpb24gaXMKKyAgIFVOU1BFQ19UTFMsIHdoaWNoIGlzIGFsd2F5cyBQSUMuICAqLworI2RlZmluZSBMRUdJVElNQVRFX1BJQ19PUEVSQU5EX1AoWCkJCQkJCVwKKwkoIShzeW1ib2xfbWVudGlvbmVkX3AgKFgpCQkJCQlcCisJICAgfHwgbGFiZWxfbWVudGlvbmVkX3AgKFgpCQkJCQlcCisJICAgfHwgKEdFVF9DT0RFIChYKSA9PSBTWU1CT0xfUkVGCQkJCVwKKwkgICAgICAgJiYgQ09OU1RBTlRfUE9PTF9BRERSRVNTX1AgKFgpCQkJCVwKKwkgICAgICAgJiYgKHN5bWJvbF9tZW50aW9uZWRfcCAoZ2V0X3Bvb2xfY29uc3RhbnQgKFgpKQkJXAorCQkgICB8fCBsYWJlbF9tZW50aW9uZWRfcCAoZ2V0X3Bvb2xfY29uc3RhbnQgKFgpKSkpKQlcCisJIHx8IHRsc19tZW50aW9uZWRfcCAoWCkpCisKKy8qIFdlIG5lZWQgdG8ga25vdyB3aGVuIHdlIGFyZSBtYWtpbmcgYSBjb25zdGFudCBwb29sOyB0aGlzIGRldGVybWluZXMKKyAgIHdoZXRoZXIgZGF0YSBuZWVkcyB0byBiZSBpbiB0aGUgR09UIG9yIGNhbiBiZSByZWZlcmVuY2VkIHZpYSBhIEdPVAorICAgb2Zmc2V0LiAgKi8KK2V4dGVybiBpbnQgbWFraW5nX2NvbnN0X3RhYmxlOworDAorLyogSGFuZGxlIHByYWdtYXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBJbnRlbCdzIGNvbXBpbGVycy4gICovCisvKiBBbHNvIGFidXNlIHRoaXMgdG8gcmVnaXN0ZXIgYWRkaXRpb25hbCBDIHNwZWNpZmljIEVBQkkgYXR0cmlidXRlcy4gICovCisjZGVmaW5lIFJFR0lTVEVSX1RBUkdFVF9QUkFHTUFTKCkgZG8gewkJCQkJXAorICBjX3JlZ2lzdGVyX3ByYWdtYSAoMCwgImxvbmdfY2FsbHMiLCBhcm1fcHJfbG9uZ19jYWxscyk7CQlcCisgIGNfcmVnaXN0ZXJfcHJhZ21hICgwLCAibm9fbG9uZ19jYWxscyIsIGFybV9wcl9ub19sb25nX2NhbGxzKTsJCVwKKyAgY19yZWdpc3Rlcl9wcmFnbWEgKDAsICJsb25nX2NhbGxzX29mZiIsIGFybV9wcl9sb25nX2NhbGxzX29mZik7CVwKKyAgYXJtX2xhbmdfb2JqZWN0X2F0dHJpYnV0ZXNfaW5pdCgpOyBcCit9IHdoaWxlICgwKQorCisvKiBDb25kaXRpb24gY29kZSBpbmZvcm1hdGlvbi4gICovCisvKiBHaXZlbiBhIGNvbXBhcmlzb24gY29kZSAoRVEsIE5FLCBldGMuKSBhbmQgdGhlIGZpcnN0IG9wZXJhbmQgb2YgYSBDT01QQVJFLAorICAgcmV0dXJuIHRoZSBtb2RlIHRvIGJlIHVzZWQgZm9yIHRoZSBjb21wYXJpc29uLiAgKi8KKworI2RlZmluZSBTRUxFQ1RfQ0NfTU9ERShPUCwgWCwgWSkgIGFybV9zZWxlY3RfY2NfbW9kZSAoT1AsIFgsIFkpCisKKyNkZWZpbmUgUkVWRVJTSUJMRV9DQ19NT0RFKE1PREUpIDEKKworI2RlZmluZSBSRVZFUlNFX0NPTkRJVElPTihDT0RFLE1PREUpIFwKKyAgKCgoTU9ERSkgPT0gQ0NGUG1vZGUgfHwgKE1PREUpID09IENDRlBFbW9kZSkgXAorICAgPyByZXZlcnNlX2NvbmRpdGlvbl9tYXliZV91bm9yZGVyZWQgKGNvZGUpIFwKKyAgIDogcmV2ZXJzZV9jb25kaXRpb24gKGNvZGUpKQorCisjZGVmaW5lIENBTk9OSUNBTElaRV9DT01QQVJJU09OKENPREUsIE9QMCwgT1AxKQkJCQlcCisgIGRvCQkJCQkJCQkJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICBpZiAoR0VUX0NPREUgKE9QMSkgPT0gQ09OU1RfSU5UCQkJCQlcCisgICAgICAgICAgJiYgISAoY29uc3Rfb2tfZm9yX2FybSAoSU5UVkFMIChPUDEpKQkJCQlcCisJICAgICAgICB8fCAoY29uc3Rfb2tfZm9yX2FybSAoLSBJTlRWQUwgKE9QMSkpKSkpCQlcCisgICAgICAgIHsJCQkJCQkJCVwKKyAgICAgICAgICBydHggY29uc3Rfb3AgPSBPUDE7CQkJCQkJXAorICAgICAgICAgIENPREUgPSBhcm1fY2Fub25pY2FsaXplX2NvbXBhcmlzb24gKChDT0RFKSwgR0VUX01PREUgKE9QMCksCVwKKwkJCQkJICAgICAgJmNvbnN0X29wKTsJCVwKKyAgICAgICAgICBPUDEgPSBjb25zdF9vcDsJCQkJCQlcCisgICAgICAgIH0JCQkJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorICB3aGlsZSAoMCkKKworLyogVGhlIGFybTUgY2x6IGluc3RydWN0aW9uIHJldHVybnMgMzIuICAqLworI2RlZmluZSBDTFpfREVGSU5FRF9WQUxVRV9BVF9aRVJPKE1PREUsIFZBTFVFKSAgKChWQUxVRSkgPSAzMiwgMSkKKyNkZWZpbmUgQ1RaX0RFRklORURfVkFMVUVfQVRfWkVSTyhNT0RFLCBWQUxVRSkgICgoVkFMVUUpID0gMzIsIDEpCisMCisjdW5kZWYgIEFTTV9BUFBfT0ZGCisjZGVmaW5lIEFTTV9BUFBfT0ZGIChUQVJHRVRfVEhVTUIxID8gIlx0LmNvZGVcdDE2XG4iIDogXAorCQkgICAgIFRBUkdFVF9USFVNQjIgPyAiXHQudGh1bWJcbiIgOiAiIikKKworLyogT3V0cHV0IGEgcHVzaCBvciBhIHBvcCBpbnN0cnVjdGlvbiAob25seSB1c2VkIHdoZW4gcHJvZmlsaW5nKS4KKyAgIFdlIGNhbid0IHB1c2ggU1RBVElDX0NIQUlOX1JFR05VTSAocjEyKSBkaXJlY3RseSB3aXRoIFRodW1iLTEuICBXZSBrbm93CisgICB0aGF0IEFTTV9PVVRQVVRfUkVHX1BVU0ggd2lsbCBiZSBtYXRjaGVkIHdpdGggQVNNX09VVFBVVF9SRUdfUE9QLCBhbmQKKyAgIHRoYXQgcjcgaXNuJ3QgdXNlZCBieSB0aGUgZnVuY3Rpb24gcHJvZmlsZXIsIHNvIHdlIGNhbiB1c2UgaXQgYXMgYQorICAgc2NyYXRjaCByZWcuICBXQVJOSU5HOiBUaGlzIGlzbid0IHNhZmUgaW4gdGhlIGdlbmVyYWwgY2FzZSEgIEl0IG1heSBiZQorICAgc2Vuc2l0aXZlIHRvIGZ1dHVyZSBjaGFuZ2VzIGluIGZpbmFsLmM6cHJvZmlsZV9mdW5jdGlvbi4gICovCisjZGVmaW5lIEFTTV9PVVRQVVRfUkVHX1BVU0goU1RSRUFNLCBSRUdOTykJCVwKKyAgZG8JCQkJCQkJXAorICAgIHsJCQkJCQkJXAorICAgICAgaWYgKFRBUkdFVF9BUk0pCQkJCQlcCisJYXNtX2ZwcmludGYgKFNUUkVBTSwiXHRzdG1mZFx0JXIhLHslcn1cbiIsCVwKKwkJICAgICBTVEFDS19QT0lOVEVSX1JFR05VTSwgUkVHTk8pOwlcCisgICAgICBlbHNlIGlmIChUQVJHRVRfVEhVTUIxCQkJCVwKKwkgICAgICAgJiYgKFJFR05PKSA9PSBTVEFUSUNfQ0hBSU5fUkVHTlVNKQlcCisJewkJCQkJCVwKKwkgIGFzbV9mcHJpbnRmIChTVFJFQU0sICJcdHB1c2hcdHtyN31cbiIpOwlcCisJICBhc21fZnByaW50ZiAoU1RSRUFNLCAiXHRtb3ZcdHI3LCAlclxuIiwgUkVHTk8pO1wKKwkgIGFzbV9mcHJpbnRmIChTVFJFQU0sICJcdHB1c2hcdHtyN31cbiIpOwlcCisJfQkJCQkJCVwKKyAgICAgIGVsc2UJCQkJCQlcCisJYXNtX2ZwcmludGYgKFNUUkVBTSwgIlx0cHVzaCB7JXJ9XG4iLCBSRUdOTyk7CVwKKyAgICB9IHdoaWxlICgwKQorCisKKy8qIFNlZSBjb21tZW50IGZvciBBU01fT1VUUFVUX1JFR19QVVNIIGNvbmNlcm5pbmcgVGh1bWItMSBpc3N1ZS4gICovCisjZGVmaW5lIEFTTV9PVVRQVVRfUkVHX1BPUChTVFJFQU0sIFJFR05PKQkJXAorICBkbwkJCQkJCQlcCisgICAgewkJCQkJCQlcCisgICAgICBpZiAoVEFSR0VUX0FSTSkJCQkJCVwKKwlhc21fZnByaW50ZiAoU1RSRUFNLCAiXHRsZG1mZFx0JXIhLHslcn1cbiIsCVwKKwkJICAgICBTVEFDS19QT0lOVEVSX1JFR05VTSwgUkVHTk8pOwlcCisgICAgICBlbHNlIGlmIChUQVJHRVRfVEhVTUIxCQkJCVwKKwkgICAgICAgJiYgKFJFR05PKSA9PSBTVEFUSUNfQ0hBSU5fUkVHTlVNKQlcCisJewkJCQkJCVwKKwkgIGFzbV9mcHJpbnRmIChTVFJFQU0sICJcdHBvcFx0e3I3fVxuIik7CVwKKwkgIGFzbV9mcHJpbnRmIChTVFJFQU0sICJcdG1vdlx0JXIsIHI3XG4iLCBSRUdOTyk7XAorCSAgYXNtX2ZwcmludGYgKFNUUkVBTSwgIlx0cG9wXHR7cjd9XG4iKTsJXAorCX0JCQkJCQlcCisgICAgICBlbHNlCQkJCQkJXAorCWFzbV9mcHJpbnRmIChTVFJFQU0sICJcdHBvcCB7JXJ9XG4iLCBSRUdOTyk7CVwKKyAgICB9IHdoaWxlICgwKQorCisvKiBKdW1wIHRhYmxlIGFsaWdubWVudCBpcyBleHBsaWNpdCBpbiBBU01fT1VUUFVUX0NBU0VfTEFCRUwuICAqLworI2RlZmluZSBBRERSX1ZFQ19BTElHTihKVU1QVEFCTEUpIDAKKworLyogVGhpcyBpcyBob3cgdG8gb3V0cHV0IGEgbGFiZWwgd2hpY2ggcHJlY2VkZXMgYSBqdW1wdGFibGUuICBTaW5jZQorICAgVGh1bWIgaW5zdHJ1Y3Rpb25zIGFyZSAyIGJ5dGVzLCB3ZSBtYXkgbmVlZCBleHBsaWNpdCBhbGlnbm1lbnQgaGVyZS4gICovCisjdW5kZWYgIEFTTV9PVVRQVVRfQ0FTRV9MQUJFTAorI2RlZmluZSBBU01fT1VUUFVUX0NBU0VfTEFCRUwoRklMRSwgUFJFRklYLCBOVU0sIEpVTVBUQUJMRSkJCVwKKyAgZG8JCQkJCQkJCQlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIGlmIChUQVJHRVRfVEhVTUIgJiYgR0VUX01PREUgKFBBVFRFUk4gKEpVTVBUQUJMRSkpID09IFNJbW9kZSkJXAorICAgICAgICBBU01fT1VUUFVUX0FMSUdOIChGSUxFLCAyKTsJCQkJCVwKKyAgICAgICgqdGFyZ2V0bS5hc21fb3V0LmludGVybmFsX2xhYmVsKSAoRklMRSwgUFJFRklYLCBOVU0pOwkJXAorICAgIH0JCQkJCQkJCQlcCisgIHdoaWxlICgwKQorCisvKiBNYWtlIHN1cmUgc3Vic2VxdWVudCBpbnNucyBhcmUgYWxpZ25lZCBhZnRlciBhIFRCQi4gICovCisjZGVmaW5lIEFTTV9PVVRQVVRfQ0FTRV9FTkQoRklMRSwgTlVNLCBKVU1QVEFCTEUpCVwKKyAgZG8JCQkJCQkJXAorICAgIHsJCQkJCQkJXAorICAgICAgaWYgKEdFVF9NT0RFIChQQVRURVJOIChKVU1QVEFCTEUpKSA9PSBRSW1vZGUpCVwKKwlBU01fT1VUUFVUX0FMSUdOIChGSUxFLCAxKTsJCQlcCisgICAgfQkJCQkJCQlcCisgIHdoaWxlICgwKQorCisjZGVmaW5lIEFSTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUoU1RSRUFNLCBOQU1FLCBERUNMKSAJXAorICBkbwkJCQkJCQlcCisgICAgewkJCQkJCQlcCisgICAgICBpZiAoVEFSR0VUX1RIVU1CKSAJCQkJXAorICAgICAgICB7CQkJCQkJXAorICAgICAgICAgIGlmIChpc19jYWxsZWRfaW5fQVJNX21vZGUgKERFQ0wpCQlcCisJICAgICAgfHwgKFRBUkdFVF9USFVNQjEgJiYgIVRBUkdFVF9USFVNQjFfT05MWQlcCisJCSAgJiYgY2Z1bi0+aXNfdGh1bmspKQlcCisgICAgICAgICAgICBmcHJpbnRmIChTVFJFQU0sICJcdC5jb2RlIDMyXG4iKSA7CQlcCisgICAgICAgICAgZWxzZSBpZiAoVEFSR0VUX1RIVU1CMSkJCQlcCisgICAgICAgICAgIGZwcmludGYgKFNUUkVBTSwgIlx0LmNvZGVcdDE2XG5cdC50aHVtYl9mdW5jXG4iKSA7CVwKKyAgICAgICAgICBlbHNlCQkJCQkJXAorICAgICAgICAgICBmcHJpbnRmIChTVFJFQU0sICJcdC50aHVtYlxuXHQudGh1bWJfZnVuY1xuIikgOwlcCisgICAgICAgIH0JCQkJCQlcCisgICAgICBpZiAoVEFSR0VUX1BPS0VfRlVOQ1RJT05fTkFNRSkJCQlcCisgICAgICAgIGFybV9wb2tlX2Z1bmN0aW9uX25hbWUgKFNUUkVBTSwgKGNvbnN0IGNoYXIgKikgTkFNRSk7CVwKKyAgICB9CQkJCQkJCVwKKyAgd2hpbGUgKDApCisKKy8qIEZvciBhbGlhc2VzIG9mIGZ1bmN0aW9ucyB3ZSB1c2UgLnRodW1iX3NldCBpbnN0ZWFkLiAgKi8KKyNkZWZpbmUgQVNNX09VVFBVVF9ERUZfRlJPTV9ERUNMUyhGSUxFLCBERUNMMSwgREVDTDIpCQlcCisgIGRvCQkJCQkJICAgCQlcCisgICAgewkJCQkJCQkJXAorICAgICAgY29uc3QgY2hhciAqY29uc3QgTEFCRUwxID0gWFNUUiAoWEVYUCAoREVDTF9SVEwgKGRlY2wpLCAwKSwgMCk7IFwKKyAgICAgIGNvbnN0IGNoYXIgKmNvbnN0IExBQkVMMiA9IElERU5USUZJRVJfUE9JTlRFUiAoREVDTDIpOwlcCisJCQkJCQkJCVwKKyAgICAgIGlmIChUQVJHRVRfVEhVTUIgJiYgVFJFRV9DT0RFIChERUNMMSkgPT0gRlVOQ1RJT05fREVDTCkJXAorCXsJCQkJCQkJXAorCSAgZnByaW50ZiAoRklMRSwgIlx0LnRodW1iX3NldCAiKTsJCQlcCisJICBhc3NlbWJsZV9uYW1lIChGSUxFLCBMQUJFTDEpOwkJCSAgIAlcCisJICBmcHJpbnRmIChGSUxFLCAiLCIpOwkJCSAgIAkJXAorCSAgYXNzZW1ibGVfbmFtZSAoRklMRSwgTEFCRUwyKTsJCSAgIAkJXAorCSAgZnByaW50ZiAoRklMRSwgIlxuIik7CQkJCQlcCisJfQkJCQkJCQlcCisgICAgICBlbHNlCQkJCQkJCVwKKwlBU01fT1VUUFVUX0RFRiAoRklMRSwgTEFCRUwxLCBMQUJFTDIpOwkJCVwKKyAgICB9CQkJCQkJCQlcCisgIHdoaWxlICgwKQorCisjaWZkZWYgSEFWRV9HQVNfTUFYX1NLSVBfUDJBTElHTgorLyogVG8gc3VwcG9ydCAtZmFsaWduLSogc3dpdGNoZXMgd2UgbmVlZCB0byB1c2UgLnAyYWxpZ24gc28KKyAgIHRoYXQgYWxpZ25tZW50IGRpcmVjdGl2ZXMgaW4gY29kZSBzZWN0aW9ucyB3aWxsIGJlIHBhZGRlZAorICAgd2l0aCBuby1vcCBpbnN0cnVjdGlvbnMsIHJhdGhlciB0aGFuIHplcm9lcy4gICovCisjZGVmaW5lIEFTTV9PVVRQVVRfTUFYX1NLSVBfQUxJR04oRklMRSwgTE9HLCBNQVhfU0tJUCkJCVwKKyAgaWYgKChMT0cpICE9IDApCQkJCQkJXAorICAgIHsJCQkJCQkJCVwKKyAgICAgIGlmICgoTUFYX1NLSVApID09IDApCQkJCQlcCisgICAgICAgIGZwcmludGYgKChGSUxFKSwgIlx0LnAyYWxpZ24gJWRcbiIsIChpbnQpIChMT0cpKTsJXAorICAgICAgZWxzZQkJCQkJCQlcCisgICAgICAgIGZwcmludGYgKChGSUxFKSwgIlx0LnAyYWxpZ24gJWQsLCVkXG4iLAkJCVwKKyAgICAgICAgICAgICAgICAgKGludCkgKExPRyksIChpbnQpIChNQVhfU0tJUCkpOwkJXAorICAgIH0KKyNlbmRpZgorDAorLyogQWRkIHR3byBieXRlcyB0byB0aGUgbGVuZ3RoIG9mIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZWQgVGh1bWItMgorICAgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgSVQgaW5zdHJ1Y3Rpb24uICAqLworI2RlZmluZSBBREpVU1RfSU5TTl9MRU5HVEgoaW5zbiwgbGVuZ3RoKSBcCisgIGlmIChUQVJHRVRfVEhVTUIyICYmIEdFVF9DT0RFIChQQVRURVJOIChpbnNuKSkgPT0gQ09ORF9FWEVDKSBcCisgICAgbGVuZ3RoICs9IDI7CisKKy8qIE9ubHkgcGVyZm9ybSBicmFuY2ggZWxpbWluYXRpb24gKGJ5IG1ha2luZyBpbnN0cnVjdGlvbnMgY29uZGl0aW9uYWwpIGlmCisgICB3ZSdyZSBvcHRpbWl6aW5nLiAgRm9yIFRodW1iLTIgY2hlY2sgaWYgYW55IElUIGluc3RydWN0aW9ucyBuZWVkCisgICBvdXRwdXR0aW5nLiAgKi8KKyNkZWZpbmUgRklOQUxfUFJFU0NBTl9JTlNOKElOU04sIE9QVkVDLCBOT1BFUkFORFMpCVwKKyAgaWYgKFRBUkdFVF9BUk0gJiYgb3B0aW1pemUpCQkJCVwKKyAgICBhcm1fZmluYWxfcHJlc2Nhbl9pbnNuIChJTlNOKTsJCQlcCisgIGVsc2UgaWYgKFRBUkdFVF9USFVNQjIpCQkJCVwKKyAgICB0aHVtYjJfZmluYWxfcHJlc2Nhbl9pbnNuIChJTlNOKTsJCQlcCisgIGVsc2UgaWYgKFRBUkdFVF9USFVNQjEpCQkJCVwKKyAgICB0aHVtYjFfZmluYWxfcHJlc2Nhbl9pbnNuIChJTlNOKQorCisjZGVmaW5lIFBSSU5UX09QRVJBTkRfUFVOQ1RfVkFMSURfUChDT0RFKQlcCisgIChDT0RFID09ICdAJyB8fCBDT0RFID09ICd8JyB8fCBDT0RFID09ICcuJwlcCisgICB8fCBDT0RFID09ICcoJyB8fCBDT0RFID09ICcpJyB8fCBDT0RFID09ICcjJwlcCisgICB8fCAoVEFSR0VUXzMyQklUICYmIChDT0RFID09ICc/JykpCQlcCisgICB8fCAoVEFSR0VUX1RIVU1CMiAmJiAoQ09ERSA9PSAnIScpKQkJXAorICAgfHwgKFRBUkdFVF9USFVNQiAmJiAoQ09ERSA9PSAnXycpKSkKKworLyogT3V0cHV0IGFuIG9wZXJhbmQgb2YgYW4gaW5zdHJ1Y3Rpb24uICAqLworI2RlZmluZSBQUklOVF9PUEVSQU5EKFNUUkVBTSwgWCwgQ09ERSkgIFwKKyAgYXJtX3ByaW50X29wZXJhbmQgKFNUUkVBTSwgWCwgQ09ERSkKKworI2RlZmluZSBBUk1fU0lHTl9FWFRFTkQoeCkgICgoSE9TVF9XSURFX0lOVCkJCQlcCisgIChIT1NUX0JJVFNfUEVSX1dJREVfSU5UIDw9IDMyID8gKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpICh4KQlcCisgICA6ICgoKCh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKSh4KSkgJiAodW5zaWduZWQgSE9TVF9XSURFX0lOVCkgMHhmZmZmZmZmZikgfFwKKyAgICAgICgoKCh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKSh4KSkgJiAodW5zaWduZWQgSE9TVF9XSURFX0lOVCkgMHg4MDAwMDAwMCkgXAorICAgICAgID8gKCh+ICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKSAwKQkJCVwKKwkgICYgfiAodW5zaWduZWQgSE9TVF9XSURFX0lOVCkgMHhmZmZmZmZmZikJCVwKKyAgICAgICA6IDApKSkpCisKKy8qIE91dHB1dCB0aGUgYWRkcmVzcyBvZiBhbiBvcGVyYW5kLiAgKi8KKyNkZWZpbmUgQVJNX1BSSU5UX09QRVJBTkRfQUREUkVTUyhTVFJFQU0sIFgpCQkJCVwKK3sJCQkJCQkJCQlcCisgICAgaW50IGlzX21pbnVzID0gR0VUX0NPREUgKFgpID09IE1JTlVTOwkJCQlcCisJCQkJCQkJCQlcCisgICAgaWYgKEdFVF9DT0RFIChYKSA9PSBSRUcpCQkJCQkJXAorICAgICAgYXNtX2ZwcmludGYgKFNUUkVBTSwgIlslciwgIzBdIiwgUkVHTk8gKFgpKTsJCQlcCisgICAgZWxzZSBpZiAoR0VUX0NPREUgKFgpID09IFBMVVMgfHwgaXNfbWludXMpCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJcnR4IGJhc2UgPSBYRVhQIChYLCAwKTsJCQkJCQlcCisJcnR4IGluZGV4ID0gWEVYUCAoWCwgMSk7CQkJCQlcCisJSE9TVF9XSURFX0lOVCBvZmZzZXQgPSAwOwkJCQkJXAorCWlmIChHRVRfQ09ERSAoYmFzZSkgIT0gUkVHCQkJCQlcCisJICAgIHx8IChHRVRfQ09ERSAoaW5kZXgpID09IFJFRyAmJiBSRUdOTyAoaW5kZXgpID09IFNQX1JFR05VTSkpCVwKKwkgIHsJCQkJCQkJCVwKKwkgICAgLyogRW5zdXJlIHRoYXQgQkFTRSBpcyBhIHJlZ2lzdGVyLiAgKi8JCQlcCisgICAgICAgICAgICAvKiAob25lIG9mIHRoZW0gbXVzdCBiZSkuICAqLwkJCQlcCisJICAgIC8qIEFsc28gZW5zdXJlIHRoZSBTUCBpcyBub3QgdXNlZCBhcyBpbiBpbmRleCByZWdpc3Rlci4gICovIFwKKwkgICAgcnR4IHRlbXAgPSBiYXNlOwkJCQkJCVwKKwkgICAgYmFzZSA9IGluZGV4OwkJCQkJCVwKKwkgICAgaW5kZXggPSB0ZW1wOwkJCQkJCVwKKwkgIH0JCQkJCQkJCVwKKwlzd2l0Y2ggKEdFVF9DT0RFIChpbmRleCkpCQkJCQlcCisJICB7CQkJCQkJCQlcCisJICBjYXNlIENPTlNUX0lOVDoJCQkJCQlcCisJICAgIG9mZnNldCA9IElOVFZBTCAoaW5kZXgpOwkJCQkJXAorCSAgICBpZiAoaXNfbWludXMpCQkJCQkJXAorCSAgICAgIG9mZnNldCA9IC1vZmZzZXQ7CQkJCQkJXAorCSAgICBhc21fZnByaW50ZiAoU1RSRUFNLCAiWyVyLCAjJXdkXSIsCQkJCVwKKwkJICAgICAgICAgUkVHTk8gKGJhc2UpLCBvZmZzZXQpOwkJCQlcCisJICAgIGJyZWFrOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJICBjYXNlIFJFRzoJCQkJCQkJXAorCSAgICBhc21fZnByaW50ZiAoU1RSRUFNLCAiWyVyLCAlcyVyXSIsCQkJCVwKKwkJICAgICBSRUdOTyAoYmFzZSksIGlzX21pbnVzID8gIi0iIDogIiIsCQkJXAorCQkgICAgIFJFR05PIChpbmRleCkpOwkJCQkJXAorCSAgICBicmVhazsJCQkJCQkJXAorCQkJCQkJCQkJXAorCSAgY2FzZSBNVUxUOgkJCQkJCQlcCisJICBjYXNlIEFTSElGVFJUOgkJCQkJCVwKKwkgIGNhc2UgTFNISUZUUlQ6CQkJCQkJXAorCSAgY2FzZSBBU0hJRlQ6CQkJCQkJCVwKKwkgIGNhc2UgUk9UQVRFUlQ6CQkJCQkJXAorCSAgewkJCQkJCQkJXAorCSAgICBhc21fZnByaW50ZiAoU1RSRUFNLCAiWyVyLCAlcyVyIiwJCQkJXAorCQkgICAgICAgICBSRUdOTyAoYmFzZSksIGlzX21pbnVzID8gIi0iIDogIiIsCQlcCisgICAgICAgICAgICAgICAgICAgICAgICAgUkVHTk8gKFhFWFAgKGluZGV4LCAwKSkpOwkJCVwKKwkgICAgYXJtX3ByaW50X29wZXJhbmQgKFNUUkVBTSwgaW5kZXgsICdTJyk7CQkJXAorCSAgICBmcHV0cyAoIl0iLCBTVFJFQU0pOwkJCQkJXAorCSAgICBicmVhazsJCQkJCQkJXAorCSAgfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCSAgZGVmYXVsdDoJCQkJCQkJXAorCSAgICBnY2NfdW5yZWFjaGFibGUgKCk7CQkJCQkJXAorCX0JCQkJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorICBlbHNlIGlmIChHRVRfQ09ERSAoWCkgPT0gUFJFX0lOQyB8fCBHRVRfQ09ERSAoWCkgPT0gUE9TVF9JTkMJCVwKKwkgICB8fCBHRVRfQ09ERSAoWCkgPT0gUFJFX0RFQyB8fCBHRVRfQ09ERSAoWCkgPT0gUE9TVF9ERUMpCVwKKyAgICB7CQkJCQkJCQkJXAorICAgICAgZXh0ZXJuIGVudW0gbWFjaGluZV9tb2RlIG91dHB1dF9tZW1vcnlfcmVmZXJlbmNlX21vZGU7CQlcCisJCQkJCQkJCQlcCisgICAgICBnY2NfYXNzZXJ0IChHRVRfQ09ERSAoWEVYUCAoWCwgMCkpID09IFJFRyk7CQkJXAorCQkJCQkJCQkJXAorICAgICAgaWYgKEdFVF9DT0RFIChYKSA9PSBQUkVfREVDIHx8IEdFVF9DT0RFIChYKSA9PSBQUkVfSU5DKQkJXAorCWFzbV9mcHJpbnRmIChTVFJFQU0sICJbJXIsICMlcyVkXSEiLAkJCQlcCisJCSAgICAgUkVHTk8gKFhFWFAgKFgsIDApKSwJCQkJXAorCQkgICAgIEdFVF9DT0RFIChYKSA9PSBQUkVfREVDID8gIi0iIDogIiIsCQlcCisJCSAgICAgR0VUX01PREVfU0laRSAob3V0cHV0X21lbW9yeV9yZWZlcmVuY2VfbW9kZSkpOwlcCisgICAgICBlbHNlCQkJCQkJCQlcCisJYXNtX2ZwcmludGYgKFNUUkVBTSwgIlslcl0sICMlcyVkIiwJCQkJXAorCQkgICAgIFJFR05PIChYRVhQIChYLCAwKSksCQkJCVwKKwkJICAgICBHRVRfQ09ERSAoWCkgPT0gUE9TVF9ERUMgPyAiLSIgOiAiIiwJCVwKKwkJICAgICBHRVRfTU9ERV9TSVpFIChvdXRwdXRfbWVtb3J5X3JlZmVyZW5jZV9tb2RlKSk7CVwKKyAgICB9CQkJCQkJCQkJXAorICBlbHNlIGlmIChHRVRfQ09ERSAoWCkgPT0gUFJFX01PRElGWSkJCQkJCVwKKyAgICB7CQkJCQkJCQkJXAorICAgICAgYXNtX2ZwcmludGYgKFNUUkVBTSwgIlslciwgIiwgUkVHTk8gKFhFWFAgKFgsIDApKSk7CQlcCisgICAgICBpZiAoR0VUX0NPREUgKFhFWFAgKFhFWFAgKFgsIDEpLCAxKSkgPT0gQ09OU1RfSU5UKQkJXAorCWFzbV9mcHJpbnRmIChTVFJFQU0sICIjJXdkXSEiLCAJCQkJCVwKKwkJICAgICBJTlRWQUwgKFhFWFAgKFhFWFAgKFgsIDEpLCAxKSkpOwkJCVwKKyAgICAgIGVsc2UJCQkJCQkJCVwKKwlhc21fZnByaW50ZiAoU1RSRUFNLCAiJXJdISIsIAkJCQkJXAorCQkgICAgIFJFR05PIChYRVhQIChYRVhQIChYLCAxKSwgMSkpKTsJCQlcCisgICAgfQkJCQkJCQkJCVwKKyAgZWxzZSBpZiAoR0VUX0NPREUgKFgpID09IFBPU1RfTU9ESUZZKQkJCQkJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICBhc21fZnByaW50ZiAoU1RSRUFNLCAiWyVyXSwgIiwgUkVHTk8gKFhFWFAgKFgsIDApKSk7CQlcCisgICAgICBpZiAoR0VUX0NPREUgKFhFWFAgKFhFWFAgKFgsIDEpLCAxKSkgPT0gQ09OU1RfSU5UKQkJXAorCWFzbV9mcHJpbnRmIChTVFJFQU0sICIjJXdkIiwgCQkJCQlcCisJCSAgICAgSU5UVkFMIChYRVhQIChYRVhQIChYLCAxKSwgMSkpKTsJCQlcCisgICAgICBlbHNlCQkJCQkJCQlcCisJYXNtX2ZwcmludGYgKFNUUkVBTSwgIiVyIiwgCQkJCQlcCisJCSAgICAgUkVHTk8gKFhFWFAgKFhFWFAgKFgsIDEpLCAxKSkpOwkJCVwKKyAgICB9CQkJCQkJCQkJXAorICBlbHNlIG91dHB1dF9hZGRyX2NvbnN0IChTVFJFQU0sIFgpOwkJCQkJXAorfQorCisjZGVmaW5lIFRIVU1CX1BSSU5UX09QRVJBTkRfQUREUkVTUyhTVFJFQU0sIFgpCQlcCit7CQkJCQkJCVwKKyAgaWYgKEdFVF9DT0RFIChYKSA9PSBSRUcpCQkJCVwKKyAgICBhc21fZnByaW50ZiAoU1RSRUFNLCAiWyVyXSIsIFJFR05PIChYKSk7CQlcCisgIGVsc2UgaWYgKEdFVF9DT0RFIChYKSA9PSBQT1NUX0lOQykJCQlcCisgICAgYXNtX2ZwcmludGYgKFNUUkVBTSwgIiVyISIsIFJFR05PIChYRVhQIChYLCAwKSkpOwlcCisgIGVsc2UgaWYgKEdFVF9DT0RFIChYKSA9PSBQTFVTKQkJCVwKKyAgICB7CQkJCQkJCVwKKyAgICAgIGdjY19hc3NlcnQgKEdFVF9DT0RFIChYRVhQIChYLCAwKSkgPT0gUkVHKTsJXAorICAgICAgaWYgKEdFVF9DT0RFIChYRVhQIChYLCAxKSkgPT0gQ09OU1RfSU5UKQkJXAorCWFzbV9mcHJpbnRmIChTVFJFQU0sICJbJXIsICMld2RdIiwgCQlcCisJCSAgICAgUkVHTk8gKFhFWFAgKFgsIDApKSwJCVwKKwkJICAgICBJTlRWQUwgKFhFWFAgKFgsIDEpKSk7CQlcCisgICAgICBlbHNlCQkJCQkJXAorCWFzbV9mcHJpbnRmIChTVFJFQU0sICJbJXIsICVyXSIsCQlcCisJCSAgICAgUkVHTk8gKFhFWFAgKFgsIDApKSwJCVwKKwkJICAgICBSRUdOTyAoWEVYUCAoWCwgMSkpKTsJCVwKKyAgICB9CQkJCQkJCVwKKyAgZWxzZQkJCQkJCQlcCisgICAgb3V0cHV0X2FkZHJfY29uc3QgKFNUUkVBTSwgWCk7CQkJXAorfQorCisjZGVmaW5lIFBSSU5UX09QRVJBTkRfQUREUkVTUyhTVFJFQU0sIFgpCVwKKyAgaWYgKFRBUkdFVF8zMkJJVCkJCQkJXAorICAgIEFSTV9QUklOVF9PUEVSQU5EX0FERFJFU1MgKFNUUkVBTSwgWCkJXAorICBlbHNlCQkJCQkJXAorICAgIFRIVU1CX1BSSU5UX09QRVJBTkRfQUREUkVTUyAoU1RSRUFNLCBYKQorCisjZGVmaW5lIE9VVFBVVF9BRERSX0NPTlNUX0VYVFJBKGZpbGUsIHgsIGZhaWwpCQlcCisgIGlmIChhcm1fb3V0cHV0X2FkZHJfY29uc3RfZXh0cmEgKGZpbGUsIHgpID09IEZBTFNFKQlcCisgICAgZ290byBmYWlsCisKKy8qIEEgQyBleHByZXNzaW9uIHdob3NlIHZhbHVlIGlzIFJUTCByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoZSByZXR1cm4KKyAgIGFkZHJlc3MgZm9yIHRoZSBmcmFtZSBDT1VOVCBzdGVwcyB1cCBmcm9tIHRoZSBjdXJyZW50IGZyYW1lLiAgKi8KKworI2RlZmluZSBSRVRVUk5fQUREUl9SVFgoQ09VTlQsIEZSQU1FKSBcCisgIGFybV9yZXR1cm5fYWRkciAoQ09VTlQsIEZSQU1FKQorCisvKiBNYXNrIG9mIHRoZSBiaXRzIGluIHRoZSBQQyB0aGF0IGNvbnRhaW4gdGhlIHJlYWwgcmV0dXJuIGFkZHJlc3MKKyAgIHdoZW4gcnVubmluZyBpbiAyNi1iaXQgbW9kZS4gICovCisjZGVmaW5lIFJFVFVSTl9BRERSX01BU0syNiAoMHgwM2ZmZmZmYykKKworLyogUGljayB1cCB0aGUgcmV0dXJuIGFkZHJlc3MgdXBvbiBlbnRyeSB0byBhIHByb2NlZHVyZS4gVXNlZCBmb3IKKyAgIGR3YXJmMiB1bndpbmQgaW5mb3JtYXRpb24uICBUaGlzIGFsc28gZW5hYmxlcyB0aGUgdGFibGUgZHJpdmVuCisgICBtZWNoYW5pc20uICAqLworI2RlZmluZSBJTkNPTUlOR19SRVRVUk5fQUREUl9SVFgJZ2VuX3J0eF9SRUcgKFBtb2RlLCBMUl9SRUdOVU0pCisjZGVmaW5lIERXQVJGX0ZSQU1FX1JFVFVSTl9DT0xVTU4JRFdBUkZfRlJBTUVfUkVHTlVNIChMUl9SRUdOVU0pCisKKy8qIFVzZWQgdG8gbWFzayBvdXQganVuayBiaXRzIGZyb20gdGhlIHJldHVybiBhZGRyZXNzLCBzdWNoIGFzCisgICBwcm9jZXNzb3Igc3RhdGUsIGludGVycnVwdCBzdGF0dXMsIGNvbmRpdGlvbiBjb2RlcyBhbmQgdGhlIGxpa2UuICAqLworI2RlZmluZSBNQVNLX1JFVFVSTl9BRERSIFwKKyAgLyogSWYgd2UgYXJlIGdlbmVyYXRpbmcgY29kZSBmb3IgYW4gQVJNMi9BUk0zIG1hY2hpbmUgb3IgZm9yIGFuIEFSTTYJXAorICAgICBpbiAyNiBiaXQgbW9kZSwgdGhlIGNvbmRpdGlvbiBjb2RlcyBtdXN0IGJlIG1hc2tlZCBvdXQgb2YgdGhlCVwKKyAgICAgcmV0dXJuIGFkZHJlc3MuICBUaGlzIGRvZXMgbm90IGFwcGx5IHRvIEFSTTYgYW5kIGxhdGVyIHByb2Nlc3NvcnMJXAorICAgICB3aGVuIHJ1bm5pbmcgaW4gMzIgYml0IG1vZGUuICAqLwkJCQkJXAorICAoKGFybV9hcmNoNCB8fCBUQVJHRVRfVEhVTUIpCQkJCQkJXAorICAgPyAoZ2VuX2ludF9tb2RlICgodW5zaWduZWQgbG9uZykweGZmZmZmZmZmLCBQbW9kZSkpCQkJXAorICAgOiBhcm1fZ2VuX3JldHVybl9hZGRyX21hc2sgKCkpCisKKwwKKy8qIE5lb24gZGVmaW5lcyBidWlsdGlucyBmcm9tIEFSTV9CVUlMVElOX01BWCB1cHdhcmRzLCB0aG91Z2ggdGhleSBkb24ndCBoYXZlCisgICBzeW1ib2xpYyBuYW1lcyBkZWZpbmVkIGhlcmUgKHdoaWNoIHdvdWxkIHJlcXVpcmUgdG9vIG11Y2ggZHVwbGljYXRpb24pLgorICAgRklYTUU/ICAqLworZW51bSBhcm1fYnVpbHRpbnMKK3sKKyAgQVJNX0JVSUxUSU5fR0VUV0NYLAorICBBUk1fQlVJTFRJTl9TRVRXQ1gsCisKKyAgQVJNX0JVSUxUSU5fV1pFUk8sCisKKyAgQVJNX0JVSUxUSU5fV0FWRzJCUiwKKyAgQVJNX0JVSUxUSU5fV0FWRzJIUiwKKyAgQVJNX0JVSUxUSU5fV0FWRzJCLAorICBBUk1fQlVJTFRJTl9XQVZHMkgsCisKKyAgQVJNX0JVSUxUSU5fV0FDQ0IsCisgIEFSTV9CVUlMVElOX1dBQ0NILAorICBBUk1fQlVJTFRJTl9XQUNDVywKKworICBBUk1fQlVJTFRJTl9XTUFDUywKKyAgQVJNX0JVSUxUSU5fV01BQ1NaLAorICBBUk1fQlVJTFRJTl9XTUFDVSwKKyAgQVJNX0JVSUxUSU5fV01BQ1VaLAorCisgIEFSTV9CVUlMVElOX1dTQURCLAorICBBUk1fQlVJTFRJTl9XU0FEQlosCisgIEFSTV9CVUlMVElOX1dTQURILAorICBBUk1fQlVJTFRJTl9XU0FESFosCisKKyAgQVJNX0JVSUxUSU5fV0FMSUdOLAorCisgIEFSTV9CVUlMVElOX1RNSUEsCisgIEFSTV9CVUlMVElOX1RNSUFQSCwKKyAgQVJNX0JVSUxUSU5fVE1JQUJCLAorICBBUk1fQlVJTFRJTl9UTUlBQlQsCisgIEFSTV9CVUlMVElOX1RNSUFUQiwKKyAgQVJNX0JVSUxUSU5fVE1JQVRULAorCisgIEFSTV9CVUlMVElOX1RNT1ZNU0tCLAorICBBUk1fQlVJTFRJTl9UTU9WTVNLSCwKKyAgQVJNX0JVSUxUSU5fVE1PVk1TS1csCisKKyAgQVJNX0JVSUxUSU5fVEJDU1RCLAorICBBUk1fQlVJTFRJTl9UQkNTVEgsCisgIEFSTV9CVUlMVElOX1RCQ1NUVywKKworICBBUk1fQlVJTFRJTl9XTUFERFMsCisgIEFSTV9CVUlMVElOX1dNQUREVSwKKworICBBUk1fQlVJTFRJTl9XUEFDS0hTUywKKyAgQVJNX0JVSUxUSU5fV1BBQ0tXU1MsCisgIEFSTV9CVUlMVElOX1dQQUNLRFNTLAorICBBUk1fQlVJTFRJTl9XUEFDS0hVUywKKyAgQVJNX0JVSUxUSU5fV1BBQ0tXVVMsCisgIEFSTV9CVUlMVElOX1dQQUNLRFVTLAorCisgIEFSTV9CVUlMVElOX1dBRERCLAorICBBUk1fQlVJTFRJTl9XQURESCwKKyAgQVJNX0JVSUxUSU5fV0FERFcsCisgIEFSTV9CVUlMVElOX1dBRERTU0IsCisgIEFSTV9CVUlMVElOX1dBRERTU0gsCisgIEFSTV9CVUlMVElOX1dBRERTU1csCisgIEFSTV9CVUlMVElOX1dBRERVU0IsCisgIEFSTV9CVUlMVElOX1dBRERVU0gsCisgIEFSTV9CVUlMVElOX1dBRERVU1csCisgIEFSTV9CVUlMVElOX1dTVUJCLAorICBBUk1fQlVJTFRJTl9XU1VCSCwKKyAgQVJNX0JVSUxUSU5fV1NVQlcsCisgIEFSTV9CVUlMVElOX1dTVUJTU0IsCisgIEFSTV9CVUlMVElOX1dTVUJTU0gsCisgIEFSTV9CVUlMVElOX1dTVUJTU1csCisgIEFSTV9CVUlMVElOX1dTVUJVU0IsCisgIEFSTV9CVUlMVElOX1dTVUJVU0gsCisgIEFSTV9CVUlMVElOX1dTVUJVU1csCisKKyAgQVJNX0JVSUxUSU5fV0FORCwKKyAgQVJNX0JVSUxUSU5fV0FORE4sCisgIEFSTV9CVUlMVElOX1dPUiwKKyAgQVJNX0JVSUxUSU5fV1hPUiwKKworICBBUk1fQlVJTFRJTl9XQ01QRVFCLAorICBBUk1fQlVJTFRJTl9XQ01QRVFILAorICBBUk1fQlVJTFRJTl9XQ01QRVFXLAorICBBUk1fQlVJTFRJTl9XQ01QR1RVQiwKKyAgQVJNX0JVSUxUSU5fV0NNUEdUVUgsCisgIEFSTV9CVUlMVElOX1dDTVBHVFVXLAorICBBUk1fQlVJTFRJTl9XQ01QR1RTQiwKKyAgQVJNX0JVSUxUSU5fV0NNUEdUU0gsCisgIEFSTV9CVUlMVElOX1dDTVBHVFNXLAorCisgIEFSTV9CVUlMVElOX1RFWFRSTVNCLAorICBBUk1fQlVJTFRJTl9URVhUUk1TSCwKKyAgQVJNX0JVSUxUSU5fVEVYVFJNU1csCisgIEFSTV9CVUlMVElOX1RFWFRSTVVCLAorICBBUk1fQlVJTFRJTl9URVhUUk1VSCwKKyAgQVJNX0JVSUxUSU5fVEVYVFJNVVcsCisgIEFSTV9CVUlMVElOX1RJTlNSQiwKKyAgQVJNX0JVSUxUSU5fVElOU1JILAorICBBUk1fQlVJTFRJTl9USU5TUlcsCisKKyAgQVJNX0JVSUxUSU5fV01BWFNXLAorICBBUk1fQlVJTFRJTl9XTUFYU0gsCisgIEFSTV9CVUlMVElOX1dNQVhTQiwKKyAgQVJNX0JVSUxUSU5fV01BWFVXLAorICBBUk1fQlVJTFRJTl9XTUFYVUgsCisgIEFSTV9CVUlMVElOX1dNQVhVQiwKKyAgQVJNX0JVSUxUSU5fV01JTlNXLAorICBBUk1fQlVJTFRJTl9XTUlOU0gsCisgIEFSTV9CVUlMVElOX1dNSU5TQiwKKyAgQVJNX0JVSUxUSU5fV01JTlVXLAorICBBUk1fQlVJTFRJTl9XTUlOVUgsCisgIEFSTV9CVUlMVElOX1dNSU5VQiwKKworICBBUk1fQlVJTFRJTl9XTVVMVU0sCisgIEFSTV9CVUlMVElOX1dNVUxTTSwKKyAgQVJNX0JVSUxUSU5fV01VTFVMLAorCisgIEFSTV9CVUlMVElOX1BTQURCSCwKKyAgQVJNX0JVSUxUSU5fV1NIVUZILAorCisgIEFSTV9CVUlMVElOX1dTTExILAorICBBUk1fQlVJTFRJTl9XU0xMVywKKyAgQVJNX0JVSUxUSU5fV1NMTEQsCisgIEFSTV9CVUlMVElOX1dTUkFILAorICBBUk1fQlVJTFRJTl9XU1JBVywKKyAgQVJNX0JVSUxUSU5fV1NSQUQsCisgIEFSTV9CVUlMVElOX1dTUkxILAorICBBUk1fQlVJTFRJTl9XU1JMVywKKyAgQVJNX0JVSUxUSU5fV1NSTEQsCisgIEFSTV9CVUlMVElOX1dST1JILAorICBBUk1fQlVJTFRJTl9XUk9SVywKKyAgQVJNX0JVSUxUSU5fV1JPUkQsCisgIEFSTV9CVUlMVElOX1dTTExISSwKKyAgQVJNX0JVSUxUSU5fV1NMTFdJLAorICBBUk1fQlVJTFRJTl9XU0xMREksCisgIEFSTV9CVUlMVElOX1dTUkFISSwKKyAgQVJNX0JVSUxUSU5fV1NSQVdJLAorICBBUk1fQlVJTFRJTl9XU1JBREksCisgIEFSTV9CVUlMVElOX1dTUkxISSwKKyAgQVJNX0JVSUxUSU5fV1NSTFdJLAorICBBUk1fQlVJTFRJTl9XU1JMREksCisgIEFSTV9CVUlMVElOX1dST1JISSwKKyAgQVJNX0JVSUxUSU5fV1JPUldJLAorICBBUk1fQlVJTFRJTl9XUk9SREksCisKKyAgQVJNX0JVSUxUSU5fV1VOUENLSUhCLAorICBBUk1fQlVJTFRJTl9XVU5QQ0tJSEgsCisgIEFSTV9CVUlMVElOX1dVTlBDS0lIVywKKyAgQVJNX0JVSUxUSU5fV1VOUENLSUxCLAorICBBUk1fQlVJTFRJTl9XVU5QQ0tJTEgsCisgIEFSTV9CVUlMVElOX1dVTlBDS0lMVywKKworICBBUk1fQlVJTFRJTl9XVU5QQ0tFSFNCLAorICBBUk1fQlVJTFRJTl9XVU5QQ0tFSFNILAorICBBUk1fQlVJTFRJTl9XVU5QQ0tFSFNXLAorICBBUk1fQlVJTFRJTl9XVU5QQ0tFSFVCLAorICBBUk1fQlVJTFRJTl9XVU5QQ0tFSFVILAorICBBUk1fQlVJTFRJTl9XVU5QQ0tFSFVXLAorICBBUk1fQlVJTFRJTl9XVU5QQ0tFTFNCLAorICBBUk1fQlVJTFRJTl9XVU5QQ0tFTFNILAorICBBUk1fQlVJTFRJTl9XVU5QQ0tFTFNXLAorICBBUk1fQlVJTFRJTl9XVU5QQ0tFTFVCLAorICBBUk1fQlVJTFRJTl9XVU5QQ0tFTFVILAorICBBUk1fQlVJTFRJTl9XVU5QQ0tFTFVXLAorCisgIEFSTV9CVUlMVElOX1RIUkVBRF9QT0lOVEVSLAorCisgIEFSTV9CVUlMVElOX05FT05fQkFTRSwKKworICBBUk1fQlVJTFRJTl9NQVggPSBBUk1fQlVJTFRJTl9ORU9OX0JBU0UgIC8qIEZJWE1FOiBXcm9uZyEgICovCit9OworCisvKiBEbyBub3QgZW1pdCAubm90ZS5HTlUtc3RhY2sgYnkgZGVmYXVsdC4gICovCisjaWZuZGVmIE5FRURfSU5ESUNBVEVfRVhFQ19TVEFDSworI2RlZmluZSBORUVEX0lORElDQVRFX0VYRUNfU1RBQ0sJMAorI2VuZGlmCisKKyNlbmRpZiAvKiAhIEdDQ19BUk1fSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NvbmZpZy9hcm0vYnBhYmkuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvYXJtL2JwYWJpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFiOTM0NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvYXJtL2JwYWJpLmgKQEAgLTAsMCArMSwxODAgQEAKKy8qIENvbmZpZ3VyYXRpb24gZmlsZSBmb3IgQVJNIEJQQUJJIHRhcmdldHMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDgsIDIwMDkKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgQ29kZVNvdXJjZXJ5LCBMTEMgICAKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyCisgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFVzZSB0aGUgQUFQQ1MgQUJJIGJ5IGRlZmF1bHQuICAqLworI2RlZmluZSBBUk1fREVGQVVMVF9BQkkgQVJNX0FCSV9BQVBDUworCisvKiBBc3N1bWUgdGhhdCBBQVBDUyBBQklzIHNob3VsZCBhZGhlcmUgdG8gdGhlIGZ1bGwgQlBBQkkuICAqLyAKKyNkZWZpbmUgVEFSR0VUX0JQQUJJIChUQVJHRVRfQUFQQ1NfQkFTRUQpCisKKy8qIEJQQUJJIHRhcmdldHMgdXNlIEVBQkkgZnJhbWUgdW53aW5kaW5nIHRhYmxlcy4gICovCisjZGVmaW5lIFRBUkdFVF9VTldJTkRfSU5GTyAxCisKKy8qIFNlY3Rpb24gNC4xIG9mIHRoZSBBQVBDUyByZXF1aXJlcyB0aGUgdXNlIG9mIFZGUCBmb3JtYXQuICAqLworI3VuZGVmICBGUFVUWVBFX0RFRkFVTFQKKyNkZWZpbmUgRlBVVFlQRV9ERUZBVUxUICJ2ZnAiCisKKy8qIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQgaXMgc2V0IGluCisgICBjb25maWcuZ2NjIGZvciBiaWcgZW5kaWFuIGNvbmZpZ3VyYXRpb25zLiAgKi8KKyNpZiBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUCisjZGVmaW5lIFRBUkdFVF9FTkRJQU5fREVGQVVMVCBNQVNLX0JJR19FTkQKKyNlbHNlCisjZGVmaW5lIFRBUkdFVF9FTkRJQU5fREVGQVVMVCAwCisjZW5kaWYKKworLyogRUFCSSB0YXJnZXRzIHNob3VsZCBlbmFibGUgaW50ZXJ3b3JraW5nIGJ5IGRlZmF1bHQuICAqLworI3VuZGVmICBUQVJHRVRfREVGQVVMVAorI2RlZmluZSBUQVJHRVRfREVGQVVMVCAoTUFTS19JTlRFUldPUksgfCBUQVJHRVRfRU5ESUFOX0RFRkFVTFQpCisKKy8qIFRoZSBBUk0gQlBBQkkgZnVuY3Rpb25zIHJldHVybiBhIGJvb2xlYW47IHRoZXkgdXNlIG5vIHNwZWNpYWwKKyAgIGNhbGxpbmcgY29udmVudGlvbi4gICovCisjZGVmaW5lIEZMT0FUX0xJQl9DT01QQVJFX1JFVFVSTlNfQk9PTChNT0RFLCBDT01QQVJJU09OKSBUQVJHRVRfQlBBQkkKKworLyogVGhlIEJQQUJJIGludGVnZXIgY29tcGFyaXNvbiByb3V0aW5lcyByZXR1cm4geyAtMSwgMCwgMSB9LiAgKi8KKyNkZWZpbmUgVEFSR0VUX0xJQl9JTlRfQ01QX0JJQVNFRCAhVEFSR0VUX0JQQUJJCisKKyNkZWZpbmUgVEFSR0VUX0ZJWF9WNEJYX1NQRUMgIiAle21jcHU9YXJtOHxtY3B1PWFybTgxMHxtY3B1PXN0cm9uZ2FybSp8bWFyY2g9YXJtdjQ6LS1maXgtdjRieH0iCisKKyNkZWZpbmUgQkU4X0xJTktfU1BFQyAiICV7bWJpZy1lbmRpYW46JXttYXJjaD1hcm12Ny1hfG1jcHU9Y29ydGV4LWE1fG1jcHU9Y29ydGV4LWE4fG1jcHU9Y29ydGV4LWE5OiV7IXI6LS1iZTh9fX0iCisKKy8qIFRlbGwgdGhlIGFzc2VtYmxlciB0byBidWlsZCBCUEFCSSBiaW5hcmllcy4gICovCisjdW5kZWYgIFNVQlRBUkdFVF9FWFRSQV9BU01fU1BFQworI2RlZmluZSBTVUJUQVJHRVRfRVhUUkFfQVNNX1NQRUMgIiV7bWFiaT1hcGNzLWdudXxtYWJpPWF0cGNzOi1tZWFiaT1nbnU7Oi1tZWFiaT01fSIgVEFSR0VUX0ZJWF9WNEJYX1NQRUMKKworI2lmbmRlZiBTVUJUQVJHRVRfRVhUUkFfTElOS19TUEVDCisjZGVmaW5lIFNVQlRBUkdFVF9FWFRSQV9MSU5LX1NQRUMgIiIKKyNlbmRpZgorCisvKiBUaGUgZ2VuZXJpYyBsaW5rIHNwZWMgaW4gZWxmLmggZG9lcyBub3Qgc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzLiAgKi8KKyNkZWZpbmUgQlBBQklfTElOS19TUEVDIFwKKyAgIiV7bWJpZy1lbmRpYW46LUVCfSAle21saXR0bGUtZW5kaWFuOi1FTH0gIgkJXAorICAiJXtzdGF0aWM6LUJzdGF0aWN9ICV7c2hhcmVkOi1zaGFyZWR9ICV7c3ltYm9saWM6LUJzeW1ib2xpY30gIglcCisgICItWCIgU1VCVEFSR0VUX0VYVFJBX0xJTktfU1BFQyBUQVJHRVRfRklYX1Y0QlhfU1BFQyBCRThfTElOS19TUEVDCisKKyN1bmRlZiAgTElOS19TUEVDCisjZGVmaW5lIExJTktfU1BFQyBCUEFCSV9MSU5LX1NQRUMKKworI2lmIGRlZmluZWQgKF9fdGh1bWJfXykKKyNkZWZpbmUgUkVOQU1FX0xJQlJBUllfU0VUICIudGh1bWJfc2V0IgorI2Vsc2UKKyNkZWZpbmUgUkVOQU1FX0xJQlJBUllfU0VUICIuc2V0IgorI2VuZGlmCisKKy8qIE1ha2UgX19hZWFiaV9BRUFCSV9OQU1FIGFuIGFsaWFzIGZvciBfX0dDQ19OQU1FLiAgKi8KKyNkZWZpbmUgUkVOQU1FX0xJQlJBUlkoR0NDX05BTUUsIEFFQUJJX05BTUUpCQlcCisgIF9fYXNtX18gKCIuZ2xvYmxcdF9fYWVhYmlfIiAjQUVBQklfTkFNRSAiXG4iCQlcCisJICAgUkVOQU1FX0xJQlJBUllfU0VUICJcdF9fYWVhYmlfIiAjQUVBQklfTkFNRSAJXAorCSAgICAgIiwgX18iICNHQ0NfTkFNRSAiXG4iKTsKKworLyogR2l2ZSBzb21lIGxpYmdjYyBmdW5jdGlvbnMgYW4gYWRkaXRpb25hbCBfX2FlYWJpIG5hbWUuICAqLworI2lmZGVmIExfbXVsZGkzCisjZGVmaW5lIERFQ0xBUkVfTElCUkFSWV9SRU5BTUVTIFJFTkFNRV9MSUJSQVJZIChtdWxkaTMsIGxtdWwpCisjZW5kaWYKKyNpZmRlZiBMX211bGRpMworI2RlZmluZSBERUNMQVJFX0xJQlJBUllfUkVOQU1FUyBSRU5BTUVfTElCUkFSWSAobXVsZGkzLCBsbXVsKQorI2VuZGlmCisjaWZkZWYgTF9maXhkZmRpCisjZGVmaW5lIERFQ0xBUkVfTElCUkFSWV9SRU5BTUVTIFJFTkFNRV9MSUJSQVJZIChmaXhkZmRpLCBkMmx6KSBcCisgIGV4dGVybiBEV3R5cGUgX19maXhkZmRpIChERnR5cGUpIF9fYXR0cmlidXRlX18oKHBjcygiYWFwY3MiKSkpOyBcCisgIGV4dGVybiBVRFd0eXBlIF9fZml4dW5zZGZkaSAoREZ0eXBlKSBfX2FzbV9fKCJfX2FlYWJpX2QydWx6IikgX19hdHRyaWJ1dGVfXygocGNzKCJhYXBjcyIpKSk7CisjZW5kaWYKKyNpZmRlZiBMX2ZpeHVuc2RmZGkKKyNkZWZpbmUgREVDTEFSRV9MSUJSQVJZX1JFTkFNRVMgUkVOQU1FX0xJQlJBUlkgKGZpeHVuc2RmZGksIGQydWx6KSBcCisgIGV4dGVybiBVRFd0eXBlIF9fZml4dW5zZGZkaSAoREZ0eXBlKSBfX2F0dHJpYnV0ZV9fKChwY3MoImFhcGNzIikpKTsKKyNlbmRpZgorI2lmZGVmIExfZml4c2ZkaQorI2RlZmluZSBERUNMQVJFX0xJQlJBUllfUkVOQU1FUyBSRU5BTUVfTElCUkFSWSAoZml4c2ZkaSwgZjJseikgXAorICBleHRlcm4gRFd0eXBlIF9fZml4c2ZkaSAoU0Z0eXBlKSBfX2F0dHJpYnV0ZV9fKChwY3MoImFhcGNzIikpKTsgXAorICBleHRlcm4gVURXdHlwZSBfX2ZpeHVuc3NmZGkgKFNGdHlwZSkgX19hc21fXygiX19hZWFiaV9mMnVseiIpIF9fYXR0cmlidXRlX18oKHBjcygiYWFwY3MiKSkpOworI2VuZGlmCisjaWZkZWYgTF9maXh1bnNzZmRpCisjZGVmaW5lIERFQ0xBUkVfTElCUkFSWV9SRU5BTUVTIFJFTkFNRV9MSUJSQVJZIChmaXh1bnNzZmRpLCBmMnVseikgXAorICBleHRlcm4gVURXdHlwZSBfX2ZpeHVuc3NmZGkgKFNGdHlwZSkgX19hdHRyaWJ1dGVfXygocGNzKCJhYXBjcyIpKSk7CisjZW5kaWYKKyNpZmRlZiBMX2Zsb2F0ZGlkZgorI2RlZmluZSBERUNMQVJFX0xJQlJBUllfUkVOQU1FUyBSRU5BTUVfTElCUkFSWSAoZmxvYXRkaWRmLCBsMmQpCisjZW5kaWYKKyNpZmRlZiBMX2Zsb2F0ZGlzZgorI2RlZmluZSBERUNMQVJFX0xJQlJBUllfUkVOQU1FUyBSRU5BTUVfTElCUkFSWSAoZmxvYXRkaXNmLCBsMmYpCisjZW5kaWYKKworLyogVGhlc2UgcmVuYW1lcyBhcmUgbmVlZGVkIG9uIEFSTXY2TS4gIE90aGVyIHRhcmdldHMgZ2V0IHRoZW0gZnJvbQorICAgYXNzZW1ibHkgcm91dGluZXMuICAqLworI2lmZGVmIExfZml4dW5zZGZzaQorI2RlZmluZSBERUNMQVJFX0xJQlJBUllfUkVOQU1FUyBSRU5BTUVfTElCUkFSWSAoZml4dW5zZGZzaSwgZDJ1aXopCisjZW5kaWYKKyNpZmRlZiBMX2ZpeHVuc3Nmc2kKKyNkZWZpbmUgREVDTEFSRV9MSUJSQVJZX1JFTkFNRVMgUkVOQU1FX0xJQlJBUlkgKGZpeHVuc3Nmc2ksIGYydWl6KQorI2VuZGlmCisjaWZkZWYgTF9mbG9hdHVuZGlkZgorI2RlZmluZSBERUNMQVJFX0xJQlJBUllfUkVOQU1FUyBSRU5BTUVfTElCUkFSWSAoZmxvYXR1bmRpZGYsIHVsMmQpCisjZW5kaWYKKyNpZmRlZiBMX2Zsb2F0dW5kaXNmCisjZGVmaW5lIERFQ0xBUkVfTElCUkFSWV9SRU5BTUVTIFJFTkFNRV9MSUJSQVJZIChmbG9hdHVuZGlzZiwgdWwyZikKKyNlbmRpZgorCisvKiBUaGUgQlBBQkkgcmVxdWlyZXMgdGhhdCB3ZSBhbHdheXMgdXNlIGFuIG91dC1vZi1saW5lIGltcGxlbWVudGF0aW9uCisgICBvZiBSVFRJIGNvbXBhcmlzb24sIGV2ZW4gaWYgdGhlIHRhcmdldCBzdXBwb3J0cyB3ZWFrIHN5bWJvbHMsCisgICBiZWNhdXNlIHRoZSBzYW1lIG9iamVjdCBmaWxlIG1pZ2h0IGJlIHVzZWQgb24gYSB0YXJnZXQgdGhhdCBkb2VzCisgICBub3Qgc3VwcG9ydCBtZXJnaW5nIHN5bWJvbHMgYWNyb3NzIERMTCBib3VuZGFyaWVzLiAgVGhpcyBtYWNybyBpcworICAgYnJva2VuIG91dCBzZXBhcmF0ZWx5IHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgd2l0aGluCisgICBUQVJHRVRfT1NfQ1BQX0JVSUxUSU5TIGluIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHN5c3RlbXMgYmFzZWQgb24KKyAgIHRoZSBCUEFCSS4gICovCisjZGVmaW5lIFRBUkdFVF9CUEFCSV9DUFBfQlVJTFRJTlMoKQkJCVwKKyAgZG8JCQkJCQkJXAorICAgIHsJCQkJCQkJXAorICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX0dYWF9UWVBFSU5GT19FUVVBTElUWV9JTkxJTkU9MCIpOwlcCisgICAgfQkJCQkJCQlcCisgIHdoaWxlIChmYWxzZSkKKworI3VuZGVmIFRBUkdFVF9PU19DUFBfQlVJTFRJTlMKKyNkZWZpbmUgVEFSR0VUX09TX0NQUF9CVUlMVElOUygpIFwKKyAgVEFSR0VUX0JQQUJJX0NQUF9CVUlMVElOUygpCisKKy8qIFRoZSBCUEFCSSBzcGVjaWZpZXMgdGhlIHVzZSBvZiAue2luaXQsZmluaX1fYXJyYXkuICBUaGVyZWZvcmUsIHdlCisgICBkbyBub3Qgd2FudCBHQ0MgdG8gcHV0IGFueXRoaW5nIGludG8gdGhlIC57aW5pdCxmaW5pfSBzZWN0aW9ucy4gICovCisjdW5kZWYgSU5JVF9TRUNUSU9OX0FTTV9PUAorI3VuZGVmIEZJTklfU0VDVElPTl9BU01fT1AKKyNkZWZpbmUgSU5JVF9BUlJBWV9TRUNUSU9OX0FTTV9PUCBBUk1fRUFCSV9DVE9SU19TRUNUSU9OX09QCisjZGVmaW5lIEZJTklfQVJSQVlfU0VDVElPTl9BU01fT1AgQVJNX0VBQklfRFRPUlNfU0VDVElPTl9PUAorCisvKiBUaGUgbGVnYWN5IF9tY291bnQgaW1wbGVtZW50YXRpb24gYXNzdW1lcyByMTEgcG9pbnRzIHRvIGEKKyAgICA0LXdvcmQgQVBDUyBmcmFtZS4gIFRoaXMgaXMgZ2VuZXJhbGx5IG5vdCB0cnVlIGZvciBFQUJJIHRhcmdldHMsCisgICAgcGFydGljdWxhcmx5IG5vdCBpbiBUaHVtYiBtb2RlLiAgV2UgYXNzdW1lIHRoZSBtY291bnQKKyAgICBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCByZXF1aXJlIGEgY291bnRlciB2YXJpYWJsZSAoTm8gQ291bnRlcikuCisgICAgTm90ZSB0aGF0IF9fZ251X21jb3VudF9uYyB3aWxsIGJlIGVudGVyZWQgd2l0aCBhIG1pc2FsaWduZWQgc3RhY2suCisgICAgVGhpcyBpcyBPSyBiZWNhdXNlIGl0IHVzZXMgYSBzcGVjaWFsIGNhbGxpbmcgY29udmVudGlvbiBhbnl3YXkuICAqLworCisjdW5kZWYgIE5PX1BST0ZJTEVfQ09VTlRFUlMKKyNkZWZpbmUgTk9fUFJPRklMRV9DT1VOVEVSUyAxCisjdW5kZWYgIEFSTV9GVU5DVElPTl9QUk9GSUxFUgorI2RlZmluZSBBUk1fRlVOQ1RJT05fUFJPRklMRVIoU1RSRUFNLCBMQUJFTE5PKSAgCQkJXAorewkJCQkJCQkJCVwKKyAgZnByaW50ZiAoU1RSRUFNLCAiXHRwdXNoXHR7bHJ9XG4iKTsJCQkJCVwKKyAgZnByaW50ZiAoU1RSRUFNLCAiXHRibFx0X19nbnVfbWNvdW50X25jXG4iKTsJCQkJXAorfQorCisjdW5kZWYgU1VCVEFSR0VUX0ZSQU1FX1BPSU5URVJfUkVRVUlSRUQKKyNkZWZpbmUgU1VCVEFSR0VUX0ZSQU1FX1BPSU5URVJfUkVRVUlSRUQgMAorCisvKiBfX2dudV9tY291bnRfbmMgcmVzdG9yZXMgdGhlIG9yaWdpbmFsIExSIHZhbHVlIGJlZm9yZSByZXR1cm5pbmcuICBFbnN1cmUKKyAgIHRoYXQgdGhlcmUgaXMgbm8gdW5uZWNlc3NhcnkgaG9vayBzZXQgdXAuICAqLworI3VuZGVmIFBST0ZJTEVfSE9PSwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NvbmZpZy9hcm0vZWxmLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvY29uZmlnL2FybS9lbGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODQwMDg4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NvbmZpZy9hcm0vZWxmLmgKQEAgLTAsMCArMSwxNjYgQEAKKy8qIERlZmluaXRpb25zIG9mIHRhcmdldCBtYWNoaW5lIGZvciBHTlUgY29tcGlsZXIuCisgICBGb3IgQVJNIHdpdGggRUxGIG9iaiBmb3JtYXQuCisgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDQsIDIwMDUsIDIwMDcsCisgICAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgUGhpbGlwIEJsdW5kZWxsIDxwaGlsYkBnbnUub3JnPiBhbmQKKyAgIENhdGhlcmluZSBNb29yZSA8Y2xtQGN5Z251cy5jb20+CisgICAKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworICAgR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91cgorICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIE9CSkVDVF9GT1JNQVRfRUxGCisgI2Vycm9yIGVsZi5oIGluY2x1ZGVkIGJlZm9yZSBlbGZvcy5oCisjZW5kaWYKKworI2lmbmRlZiBMT0NBTF9MQUJFTF9QUkVGSVgKKyNkZWZpbmUgTE9DQUxfTEFCRUxfUFJFRklYICIuIgorI2VuZGlmCisKKyNpZm5kZWYgU1VCVEFSR0VUX0NQUF9TUEVDCisjZGVmaW5lIFNVQlRBUkdFVF9DUFBfU1BFQyAgIi1EX19FTEZfXyIKKyNlbmRpZgorCisjaWZuZGVmIFNVQlRBUkdFVF9FWFRSQV9TUEVDUworI2RlZmluZSBTVUJUQVJHRVRfRVhUUkFfU1BFQ1MgXAorICB7ICJzdWJ0YXJnZXRfZXh0cmFfYXNtX3NwZWMiLAlTVUJUQVJHRVRfRVhUUkFfQVNNX1NQRUMgfSwgXAorICB7ICJzdWJ0YXJnZXRfYXNtX2Zsb2F0X3NwZWMiLCBTVUJUQVJHRVRfQVNNX0ZMT0FUX1NQRUMgfSwgXAorICBTVUJTVUJUQVJHRVRfRVhUUkFfU1BFQ1MKKyNlbmRpZgorCisjaWZuZGVmIFNVQlRBUkdFVF9FWFRSQV9BU01fU1BFQworI2RlZmluZSBTVUJUQVJHRVRfRVhUUkFfQVNNX1NQRUMgIiIKKyNlbmRpZgorCisjaWZuZGVmIFNVQlRBUkdFVF9BU01fRkxPQVRfU1BFQworI2RlZmluZSBTVUJUQVJHRVRfQVNNX0ZMT0FUX1NQRUMgIlwKKyV7bWFwY3MtZmxvYXQ6LW1mbG9hdH0iCisjZW5kaWYKKworI3VuZGVmIFNVQlNVQlRBUkdFVF9FWFRSQV9TUEVDUworI2RlZmluZSBTVUJTVUJUQVJHRVRfRVhUUkFfU1BFQ1MKKworI2lmbmRlZiBBU01fU1BFQworI2RlZmluZSBBU01fU1BFQyAiXAorJXttYmlnLWVuZGlhbjotRUJ9IFwKKyV7bWxpdHRsZS1lbmRpYW46LUVMfSBcCisle21jcHU9KjotbWNwdT0lKn0gXAorJXttYXJjaD0qOi1tYXJjaD0lKn0gXAorJXttYXBjcy0qOi1tYXBjcy0lKn0gXAorJShzdWJ0YXJnZXRfYXNtX2Zsb2F0X3NwZWMpIFwKKyV7bXRodW1iLWludGVyd29yazotbXRodW1iLWludGVyd29ya30gXAorJXttc29mdC1mbG9hdDotbWZsb2F0LWFiaT1zb2Z0fSAle21oYXJkLWZsb2F0Oi1tZmxvYXQtYWJpPWhhcmR9IFwKKyV7bWZsb2F0LWFiaT0qfSAle21mcHU9Kn0gXAorJShzdWJ0YXJnZXRfZXh0cmFfYXNtX3NwZWMpIgorI2VuZGlmCisKKy8qIFRoZSBBUk0gdXNlcyBAIGFyZSBhIGNvbW1lbnQgY2hhcmFjdGVyIHNvIHdlIG5lZWQgdG8gcmVkZWZpbmUKKyAgIFRZUEVfT1BFUkFORF9GTVQuICAqLworI3VuZGVmICBUWVBFX09QRVJBTkRfRk1UCisjZGVmaW5lIFRZUEVfT1BFUkFORF9GTVQJIiUlJXMiCisKKy8qIFdlIG1pZ2h0IG5lZWQgYSBBUk0gc3BlY2lmaWMgaGVhZGVyIHRvIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4gICovCisjdW5kZWYgIEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUKKyNkZWZpbmUgQVNNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRShGSUxFLCBOQU1FLCBERUNMKQkJXAorICBkbwkJCQkJCQkJXAorICAgIHsJCQkJCQkJCVwKKyAgICAgIEFSTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUgKEZJTEUsIE5BTUUsIERFQ0wpOwkJXAorICAgICAgQVNNX09VVFBVVF9UWVBFX0RJUkVDVElWRSAoRklMRSwgTkFNRSwgImZ1bmN0aW9uIik7CVwKKyAgICAgIEFTTV9ERUNMQVJFX1JFU1VMVCAoRklMRSwgREVDTF9SRVNVTFQgKERFQ0wpKTsJCVwKKyAgICAgIEFTTV9PVVRQVVRfTEFCRUwoRklMRSwgTkFNRSk7CQkJCVwKKyAgICAgIEFSTV9PVVRQVVRfRk5fVU5XSU5EIChGSUxFLCBUUlVFKTsJCQlcCisgICAgfQkJCQkJCQkJXAorICB3aGlsZSAoMCkKKworLyogV2UgbWlnaHQgbmVlZCBhbiBBUk0gc3BlY2lmaWMgdHJhaWxlciBmb3IgZnVuY3Rpb24gZGVjbGFyYXRpb25zLiAgKi8KKyN1bmRlZiAgQVNNX0RFQ0xBUkVfRlVOQ1RJT05fU0laRQorI2RlZmluZSBBU01fREVDTEFSRV9GVU5DVElPTl9TSVpFKEZJTEUsIEZOQU1FLCBERUNMKQkJXAorICBkbwkJCQkJCQkJXAorICAgIHsJCQkJCQkJCVwKKyAgICAgIEFSTV9PVVRQVVRfRk5fVU5XSU5EIChGSUxFLCBGQUxTRSk7CQkJXAorICAgICAgaWYgKCFmbGFnX2luaGliaXRfc2l6ZV9kaXJlY3RpdmUpCQkJCVwKKwlBU01fT1VUUFVUX01FQVNVUkVEX1NJWkUgKEZJTEUsIEZOQU1FKTsJCQlcCisgICAgfQkJCQkJCQkJXAorICB3aGlsZSAoMCkKKworLyogRGVmaW5lIHRoaXMgbWFjcm8gaWYganVtcCB0YWJsZXMgKGZvciBgdGFibGVqdW1wJyBpbnNucykgc2hvdWxkIGJlCisgICBvdXRwdXQgaW4gdGhlIHRleHQgc2VjdGlvbiwgYWxvbmcgd2l0aCB0aGUgYXNzZW1ibGVyIGluc3RydWN0aW9ucy4KKyAgIE90aGVyd2lzZSwgdGhlIHJlYWRvbmx5IGRhdGEgc2VjdGlvbiBpcyB1c2VkLiAgKi8KKy8qIFdlIHB1dCBBUk0gYW5kIFRodW1iLTIganVtcCB0YWJsZXMgaW4gdGhlIHRleHQgc2VjdGlvbiwgYmVjYXVzZSBpdCBtYWtlcworICAgdGhlIGNvZGUgbW9yZSBlZmZpY2llbnQsIGJ1dCBmb3IgVGh1bWItMSBpdCdzIGJldHRlciB0byBwdXQgdGhlbSBvdXQgb2YKKyAgIGJhbmQgdW5sZXNzIHdlIGFyZSBnZW5lcmF0aW5nIGNvbXByZXNzZWQgdGFibGVzLiAgKi8KKyNkZWZpbmUgSlVNUF9UQUJMRVNfSU5fVEVYVF9TRUNUSU9OCQkJCQlcCisgICAoVEFSR0VUXzMyQklUIHx8IChUQVJHRVRfVEhVTUIgJiYgKG9wdGltaXplX3NpemUgfHwgZmxhZ19waWMpKSkKKworI2lmbmRlZiBMSU5LX1NQRUMKKyNkZWZpbmUgTElOS19TUEVDICIle21iaWctZW5kaWFuOi1FQn0gJXttbGl0dGxlLWVuZGlhbjotRUx9IC1YIgorI2VuZGlmCisgIAorLyogUnVuLXRpbWUgVGFyZ2V0IFNwZWNpZmljYXRpb24uICAqLworI2lmbmRlZiBUQVJHRVRfVkVSU0lPTgorI2RlZmluZSBUQVJHRVRfVkVSU0lPTiBmcHV0cyAoIiAoQVJNL2VsZikiLCBzdGRlcnIpCisjZW5kaWYKKworI2lmbmRlZiBUQVJHRVRfREVGQVVMVAorI2RlZmluZSBUQVJHRVRfREVGQVVMVCAoTUFTS19BUENTX0ZSQU1FKQorI2VuZGlmCisKKyNpZm5kZWYgTVVMVElMSUJfREVGQVVMVFMKKyNkZWZpbmUgTVVMVElMSUJfREVGQVVMVFMgXAorICB7ICJtYXJtIiwgIm1saXR0bGUtZW5kaWFuIiwgIm1zb2Z0LWZsb2F0IiwgIm1uby10aHVtYi1pbnRlcndvcmsiLCAiZm5vLWxlYWRpbmctdW5kZXJzY29yZSIgfQorI2VuZGlmCisMCisjZGVmaW5lIFRBUkdFVF9BU01fRklMRV9TVEFSVF9BUFBfT0ZGIHRydWUKKyNkZWZpbmUgVEFSR0VUX0FTTV9GSUxFX1NUQVJUX0ZJTEVfRElSRUNUSVZFIHRydWUKKwwKKworLyogT3V0cHV0IGFuIGVsZW1lbnQgaW4gdGhlIHN0YXRpYyBjb25zdHJ1Y3RvciBhcnJheS4gICovCisjdW5kZWYgVEFSR0VUX0FTTV9DT05TVFJVQ1RPUgorI2RlZmluZSBUQVJHRVRfQVNNX0NPTlNUUlVDVE9SIGFybV9lbGZfYXNtX2NvbnN0cnVjdG9yCisKKyN1bmRlZiBUQVJHRVRfQVNNX0RFU1RSVUNUT1IKKyNkZWZpbmUgVEFSR0VUX0FTTV9ERVNUUlVDVE9SIGFybV9lbGZfYXNtX2Rlc3RydWN0b3IKKworLyogRm9yIFBJQyBjb2RlIHdlIG5lZWQgdG8gZXhwbGljaXRseSBzcGVjaWZ5IChQTFQpIGFuZCAoR09UKSByZWxvY3MuICAqLworI2RlZmluZSBORUVEX1BMVF9SRUxPQwlmbGFnX3BpYworI2RlZmluZSBORUVEX0dPVF9SRUxPQwlmbGFnX3BpYworCisvKiBUaGUgRUxGIGFzc2VtYmxlciBoYW5kbGVzIEdPVCBhZGRyZXNzaW5nIGRpZmZlcmVudGx5IHRvIE5ldEJTRC4gICovCisjZGVmaW5lIEdPVF9QQ1JFTAkwCisKKy8qIEFsaWduIG91dHB1dCB0byBhIHBvd2VyIG9mIHR3by4gIE5vdGUgIi5hbGlnbiAwIiBpcyByZWR1bmRhbnQsCisgICBhbmQgYWxzbyBHQVMgd2lsbCB0cmVhdCBpdCBhcyAiLmFsaWduIDIiIHdoaWNoIHdlIGRvIG5vdCB3YW50LiAgKi8KKyNkZWZpbmUgQVNNX09VVFBVVF9BTElHTihTVFJFQU0sIFBPV0VSKQkJCVwKKyAgZG8JCQkJCQkJXAorICAgIHsJCQkJCQkJXAorICAgICAgaWYgKChQT1dFUikgPiAwKQkJCQkJXAorCWZwcmludGYgKFNUUkVBTSwgIlx0LmFsaWduXHQlZFxuIiwgUE9XRVIpOwlcCisgICAgfQkJCQkJCQlcCisgIHdoaWxlICgwKQorCisvKiBIb3JyaWJsZSBoYWNrOiBXZSB3YW50IHRvIHByZXZlbnQgc29tZSBsaWJnY2Mgcm91dGluZXMgYmVpbmcgaW5jbHVkZWQKKyAgIGZvciBzb21lIG11bHRpbGlicy4gICovCisjaWZuZGVmIF9fQVJNX0FSQ0hfNk1fXworI3VuZGVmIExfZml4ZGZzaQorI3VuZGVmIExfZml4dW5zZGZzaQorI3VuZGVmIExfdHJ1bmNkZnNmMgorI3VuZGVmIExfZml4c2ZzaQorI3VuZGVmIExfZml4dW5zc2ZzaQorI3VuZGVmIExfZmxvYXRkaWRmCisjdW5kZWYgTF9mbG9hdGRpc2YKKyN1bmRlZiBMX2Zsb2F0dW5kaWRmCisjdW5kZWYgTF9mbG9hdHVuZGlzZgorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvYXJtL2xpbnV4LWVhYmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2UxZWQxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qIENvbmZpZ3VyYXRpb24gZmlsZSBmb3IgQVJNIEdOVS9MaW51eCBFQUJJIHRhcmdldHMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgQ29kZVNvdXJjZXJ5LCBMTEMgICAKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyCisgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIE9uIEVBQkkgR05VL0xpbnV4LCB3ZSB3YW50IGJvdGggdGhlIEJQQUJJIGJ1aWx0aW5zIGFuZCB0aGUKKyAgIEdOVS9MaW51eCBidWlsdGlucy4gICovCisjdW5kZWYgIFRBUkdFVF9PU19DUFBfQlVJTFRJTlMKKyNkZWZpbmUgVEFSR0VUX09TX0NQUF9CVUlMVElOUygpIAkJXAorICBkbyAJCQkJCQlcCisgICAgewkJCQkJCVwKKyAgICAgIFRBUkdFVF9CUEFCSV9DUFBfQlVJTFRJTlMoKTsJCVwKKyAgICAgIExJTlVYX1RBUkdFVF9PU19DUFBfQlVJTFRJTlMoKTsJCVwKKyAgICB9CQkJCQkJXAorICB3aGlsZSAoZmFsc2UpCisKKy8qIFdlIGRlZmF1bHQgdG8gYSBzb2Z0LWZsb2F0IEFCSSBzbyB0aGF0IGJpbmFyaWVzIGNhbiBydW4gb24gYWxsCisgICB0YXJnZXQgaGFyZHdhcmUuICAqLworI3VuZGVmICBUQVJHRVRfREVGQVVMVF9GTE9BVF9BQkkKKyNkZWZpbmUgVEFSR0VUX0RFRkFVTFRfRkxPQVRfQUJJIEFSTV9GTE9BVF9BQklfU09GVAorCisvKiBXZSBkZWZhdWx0IHRvIHRoZSAiYWFwY3MtbGludXgiIEFCSSBzbyB0aGF0IGVudW1zIGFyZSBpbnQtc2l6ZWQgYnkKKyAgIGRlZmF1bHQuICAqLworI3VuZGVmICBBUk1fREVGQVVMVF9BQkkKKyNkZWZpbmUgQVJNX0RFRkFVTFRfQUJJIEFSTV9BQklfQUFQQ1NfTElOVVgKKworLyogRGVmYXVsdCB0byBhcm12NXQgc28gdGhhdCB0aHVtYiBzaGFyZWQgbGlicmFyaWVzIHdvcmsuCisgICBUaGUgQVJNMTBURE1JIGNvcmUgaXMgdGhlIGRlZmF1bHQgZm9yIGFybXY1dCwgc28gc2V0CisgICBTVUJUQVJHRVRfQ1BVX0RFRkFVTFQgdG8gYWNoaWV2ZSB0aGlzLiAgKi8KKyN1bmRlZiAgU1VCVEFSR0VUX0NQVV9ERUZBVUxUCisjZGVmaW5lIFNVQlRBUkdFVF9DUFVfREVGQVVMVCBUQVJHRVRfQ1BVX2FybTEwdGRtaQorCisvKiBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUIGlzIHNldCBpbgorICAgY29uZmlnLmdjYyBmb3IgYmlnIGVuZGlhbiBjb25maWd1cmF0aW9ucy4gICovCisjdW5kZWYgIFRBUkdFVF9MSU5LRVJfRU1VTEFUSU9OCisjaWYgVEFSR0VUX0JJR19FTkRJQU5fREVGQVVMVAorI2RlZmluZSBUQVJHRVRfTElOS0VSX0VNVUxBVElPTiAiYXJtZWxmYl9saW51eF9lYWJpIgorI2Vsc2UKKyNkZWZpbmUgVEFSR0VUX0xJTktFUl9FTVVMQVRJT04gImFybWVsZl9saW51eF9lYWJpIgorI2VuZGlmCisKKyN1bmRlZiAgU1VCVEFSR0VUX0VYVFJBX0xJTktfU1BFQworI2RlZmluZSBTVUJUQVJHRVRfRVhUUkFfTElOS19TUEVDICIgLW0gIiBUQVJHRVRfTElOS0VSX0VNVUxBVElPTgorCisvKiBVc2UgbGQtbGludXguc28uMyBzbyB0aGF0IGl0IHdpbGwgYmUgcG9zc2libGUgdG8gcnVuICJjbGFzc2ljIgorICAgR05VL0xpbnV4IGJpbmFyaWVzIG9uIGFuIEVBQkkgc3lzdGVtLiAgKi8KKyN1bmRlZiAgR0xJQkNfRFlOQU1JQ19MSU5LRVIKKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMyIKKworLyogQXQgdGhpcyBwb2ludCwgYnBhYmkuaCB3aWxsIGhhdmUgY2xvYmJlcmVkIExJTktfU1BFQy4gIFdlIHdhbnQgdG8KKyAgIHVzZSB0aGUgR05VL0xpbnV4IHZlcnNpb24sIG5vdCB0aGUgZ2VuZXJpYyBCUEFCSSB2ZXJzaW9uLiAgKi8KKyN1bmRlZiAgTElOS19TUEVDCisjZGVmaW5lIExJTktfU1BFQyBMSU5VWF9UQVJHRVRfTElOS19TUEVDIEJFOF9MSU5LX1NQRUMKKworLyogVXNlIHRoZSBkZWZhdWx0IExJQkdDQ19TUEVDLCBub3QgdGhlIHZlcnNpb24gaW4gbGludXgtZWxmLmgsIGFzIHdlCisgICBkbyBub3QgdXNlIC1sZmxvYXQuICAqLworI3VuZGVmIExJQkdDQ19TUEVDCisKKy8qIENsZWFyIHRoZSBpbnN0cnVjdGlvbiBjYWNoZSBmcm9tIGBiZWcnIHRvIGBlbmQnLiAgVGhpcyBpcworICAgaW1wbGVtZW50ZWQgaW4gbGliMWZ1bmNzLmFzbSwgc28gZW5zdXJlIGFuIGVycm9yIGlmIHRoaXMgZGVmaW5pdGlvbgorICAgaXMgdXNlZC4gICovCisjdW5kZWYgIENMRUFSX0lOU05fQ0FDSEUKKyNkZWZpbmUgQ0xFQVJfSU5TTl9DQUNIRShCRUcsIEVORCkgbm90X3VzZWQKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvYXJtL2xpbnV4LWVsZi5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkY2E0MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvYXJtL2xpbnV4LWVsZi5oCkBAIC0wLDAgKzEsMTIxIEBACisvKiBEZWZpbml0aW9ucyBmb3IgQVJNIHJ1bm5pbmcgTGludXgtYmFzZWQgR05VIHN5c3RlbXMgdXNpbmcgRUxGCisgICBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsCisgICAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IFBoaWxpcCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyCisgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIGVsZm9zLmggc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGluY2x1ZGVkLiAgTm93IGp1c3Qgb3ZlcnJpZGUKKyAgIGFueSBjb25mbGljdGluZyBkZWZpbml0aW9ucyBhbmQgYWRkIGFueSBleHRyYXMuICAqLworCisvKiBSdW4tdGltZSBUYXJnZXQgU3BlY2lmaWNhdGlvbi4gICovCisjdW5kZWYgIFRBUkdFVF9WRVJTSU9OCisjZGVmaW5lIFRBUkdFVF9WRVJTSU9OICBmcHV0cyAoIiAoQVJNIEdOVS9MaW51eCB3aXRoIEVMRikiLCBzdGRlcnIpOworCisjdW5kZWYgIFRBUkdFVF9ERUZBVUxUX0ZMT0FUX0FCSQorI2RlZmluZSBUQVJHRVRfREVGQVVMVF9GTE9BVF9BQkkgQVJNX0ZMT0FUX0FCSV9IQVJECisKKy8qIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQgaXMgc2V0IGluCisgICBjb25maWcuZ2NjIGZvciBiaWcgZW5kaWFuIGNvbmZpZ3VyYXRpb25zLiAgKi8KKyNpZiBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUCisjZGVmaW5lIFRBUkdFVF9FTkRJQU5fREVGQVVMVCAgICBNQVNLX0JJR19FTkQKKyNkZWZpbmUgVEFSR0VUX0VORElBTl9PUFRJT04gICAgICJtYmlnLWVuZGlhbiIKKyNkZWZpbmUgVEFSR0VUX0xJTktFUl9FTVVMQVRJT04gICJhcm1lbGZiX2xpbnV4IgorI2Vsc2UKKyNkZWZpbmUgVEFSR0VUX0VORElBTl9ERUZBVUxUICAgIDAKKyNkZWZpbmUgVEFSR0VUX0VORElBTl9PUFRJT04gICAgICJtbGl0dGxlLWVuZGlhbiIKKyNkZWZpbmUgVEFSR0VUX0xJTktFUl9FTVVMQVRJT04gICJhcm1lbGZfbGludXgiCisjZW5kaWYKKworI3VuZGVmICBUQVJHRVRfREVGQVVMVAorI2RlZmluZSBUQVJHRVRfREVGQVVMVCAoVEFSR0VUX0VORElBTl9ERUZBVUxUKQorCisjZGVmaW5lIFNVQlRBUkdFVF9DUFVfREVGQVVMVCBUQVJHRVRfQ1BVX2FybTYKKworI2RlZmluZSBTVUJUQVJHRVRfRVhUUkFfTElOS19TUEVDICIgLW0gIiBUQVJHRVRfTElOS0VSX0VNVUxBVElPTiAiIC1wIgorCisjdW5kZWYgIE1VTFRJTElCX0RFRkFVTFRTCisjZGVmaW5lIE1VTFRJTElCX0RFRkFVTFRTIFwKKwl7ICJtYXJtIiwgIm1saXR0bGUtZW5kaWFuIiwgIm1oYXJkLWZsb2F0IiwgIm1uby10aHVtYi1pbnRlcndvcmsiIH0KKworLyogTm93IHdlIGRlZmluZSB0aGUgc3RyaW5ncyB1c2VkIHRvIGJ1aWxkIHRoZSBzcGVjIGZpbGUuICAqLworI3VuZGVmICBMSUJfU1BFQworI2RlZmluZSBMSUJfU1BFQyBcCisgICIle3B0aHJlYWQ6LWxwdGhyZWFkfSBcCisgICAle3NoYXJlZDotbGN9IFwKKyAgICV7IXNoYXJlZDole3Byb2ZpbGU6LWxjX3B9JXshcHJvZmlsZTotbGN9fSIKKworI2RlZmluZSBMSUJHQ0NfU1BFQyAiJXttc29mdC1mbG9hdDotbGZsb2F0fSAle21mbG9hdC1hYmk9c29mdCo6LWxmbG9hdH0gLWxnY2MiCisKKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKworI2RlZmluZSBMSU5VWF9UQVJHRVRfTElOS19TUEVDICAiJXtoKn0gJXt2ZXJzaW9uOi12fSBcCisgICAle2J9IFwKKyAgICV7c3RhdGljOi1Cc3RhdGljfSBcCisgICAle3NoYXJlZDotc2hhcmVkfSBcCisgICAle3N5bWJvbGljOi1Cc3ltYm9saWN9IFwKKyAgICV7cmR5bmFtaWM6LWV4cG9ydC1keW5hbWljfSBcCisgICAleyFkeW5hbWljLWxpbmtlcjotZHluYW1pYy1saW5rZXIgIiBMSU5VWF9EWU5BTUlDX0xJTktFUiAifSBcCisgICAtWCBcCisgICAle21iaWctZW5kaWFuOi1FQn0gJXttbGl0dGxlLWVuZGlhbjotRUx9IiBcCisgICBTVUJUQVJHRVRfRVhUUkFfTElOS19TUEVDCisKKyN1bmRlZiAgTElOS19TUEVDCisjZGVmaW5lIExJTktfU1BFQyBMSU5VWF9UQVJHRVRfTElOS19TUEVDCisKKyNkZWZpbmUgVEFSR0VUX09TX0NQUF9CVUlMVElOUygpCQlcCisgIGRvCQkJCQkJXAorICAgIHsJCQkJCQlcCisJTElOVVhfVEFSR0VUX09TX0NQUF9CVUlMVElOUygpOwkJXAorICAgIH0JCQkJCQlcCisgIHdoaWxlICgwKQorCisvKiBUaGlzIGlzIGhvdyB3ZSB0ZWxsIHRoZSBhc3NlbWJsZXIgdGhhdCB0d28gc3ltYm9scyBoYXZlIHRoZSBzYW1lIHZhbHVlLiAgKi8KKyNkZWZpbmUgQVNNX09VVFBVVF9ERUYoRklMRSwgTkFNRTEsIE5BTUUyKSBcCisgIGRvCQkJCQkgICBcCisgICAgewkJCQkJICAgXAorICAgICAgYXNzZW1ibGVfbmFtZSAoRklMRSwgTkFNRTEpOyAJICAgXAorICAgICAgZnB1dHMgKCIgPSAiLCBGSUxFKTsJCSAgIFwKKyAgICAgIGFzc2VtYmxlX25hbWUgKEZJTEUsIE5BTUUyKTsJICAgXAorICAgICAgZnB1dGMgKCdcbicsIEZJTEUpOwkJICAgXAorICAgIH0JCQkJCSAgIFwKKyAgd2hpbGUgKDApCisKKy8qIE5XRlBFIGFsd2F5cyB1bmRlcnN0YW5kcyBGUEEgaW5zdHJ1Y3Rpb25zLiAgKi8KKyN1bmRlZiAgRlBVVFlQRV9ERUZBVUxUCisjZGVmaW5lIEZQVVRZUEVfREVGQVVMVCAiZnBlMyIKKworLyogQ2FsbCB0aGUgZnVuY3Rpb24gcHJvZmlsZXIgd2l0aCBhIGdpdmVuIHByb2ZpbGUgbGFiZWwuICAqLworI3VuZGVmICBBUk1fRlVOQ1RJT05fUFJPRklMRVIKKyNkZWZpbmUgQVJNX0ZVTkNUSU9OX1BST0ZJTEVSKFNUUkVBTSwgTEFCRUxOTykgIAkJCVwKK3sJCQkJCQkJCQlcCisgIGZwcmludGYgKFNUUkVBTSwgIlx0YmxcdG1jb3VudCVzXG4iLAkJCQkJXAorCSAgIChUQVJHRVRfQVJNICYmIE5FRURfUExUX1JFTE9DKSA/ICIoUExUKSIgOiAiIik7CQlcCit9CisKKy8qIFRoZSBHTlUvTGludXggcHJvZmlsZXIgY2xvYmJlcnMgdGhlIGxpbmsgcmVnaXN0ZXIuICBNYWtlIHN1cmUgdGhlCisgICBwcm9sb2d1ZSBrbm93cyB0byBzYXZlIGl0LiAgKi8KKyNkZWZpbmUgUFJPRklMRV9IT09LKFgpCQkJCQkJXAorICBlbWl0X2Nsb2JiZXIgKGdlbl9ydHhfUkVHIChTSW1vZGUsIExSX1JFR05VTSkpCisKKy8qIFRoZSBHTlUvTGludXggcHJvZmlsZXIgbmVlZHMgYSBmcmFtZSBwb2ludGVyLiAgKi8KKyNkZWZpbmUgU1VCVEFSR0VUX0ZSQU1FX1BPSU5URVJfUkVRVUlSRUQgY3J0bC0+cHJvZmlsZQorCisvKiBBZGQgLm5vdGUuR05VLXN0YWNrLiAgKi8KKyN1bmRlZiBORUVEX0lORElDQVRFX0VYRUNfU1RBQ0sKKyNkZWZpbmUgTkVFRF9JTkRJQ0FURV9FWEVDX1NUQUNLCTEKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvYXJtL2xpbnV4LWdhcy5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NvbmZpZy9hcm0vbGludXgtZ2FzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI2ZmNkZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvYXJtL2xpbnV4LWdhcy5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qIERlZmluaXRpb25zIG9mIHRhcmdldCBtYWNoaW5lIGZvciBHTlUgY29tcGlsZXIuCisgICBBUk0gTGludXgtYmFzZWQgR05VIHN5c3RlbXMgdmVyc2lvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwNCwgMjAwNworICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBSdXNzZWxsIEtpbmcgIDxybWs5MkBlY3Muc290b24uYWMudWs+LgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKKyAgIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIKKyAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogVGhpcyBpcyBob3cgd2UgdGVsbCB0aGUgYXNzZW1ibGVyIHRoYXQgYSBzeW1ib2wgaXMgd2Vhay4KKyAgIEdBUyBhbHdheXMgc3VwcG9ydHMgd2VhayBzeW1ib2xzLiAgKi8KKworLyogVW5zaWduZWQgY2hhcnMgcHJvZHVjZXMgbXVjaCBiZXR0ZXIgY29kZSB0aGFuIHNpZ25lZC4gICovCisjZGVmaW5lIERFRkFVTFRfU0lHTkVEX0NIQVIgMAorCisjdW5kZWYgIFNVQlRBUkdFVF9DUFBfU1BFQworI2RlZmluZSBTVUJUQVJHRVRfQ1BQX1NQRUMgICIle3Bvc2l4Oi1EX1BPU0lYX1NPVVJDRX0gJXtwdGhyZWFkOi1EX1JFRU5UUkFOVH0iCisKKyN1bmRlZiAgU0laRV9UWVBFCisjZGVmaW5lIFNJWkVfVFlQRSAidW5zaWduZWQgaW50IgorCisjdW5kZWYgIFBUUkRJRkZfVFlQRQorI2RlZmluZSBQVFJESUZGX1RZUEUgImludCIKKworLyogVXNlIHRoZSBBQVBDUyB0eXBlIGZvciB3Y2hhcl90LCBvciB0aGUgcHJldmlvdXMgTGludXggZGVmYXVsdCBmb3IKKyAgIG5vbi1BQVBDUy4gICovCisjdW5kZWYgV0NIQVJfVFlQRQorI2RlZmluZSBXQ0hBUl9UWVBFIChUQVJHRVRfQUFQQ1NfQkFTRUQgPyAidW5zaWduZWQgaW50IiA6ICJsb25nIGludCIpCisKKyN1bmRlZiAgV0NIQVJfVFlQRV9TSVpFCisjZGVmaW5lIFdDSEFSX1RZUEVfU0laRSBCSVRTX1BFUl9XT1JECisKKy8qIENsZWFyIHRoZSBpbnN0cnVjdGlvbiBjYWNoZSBmcm9tIGBiZWcnIHRvIGBlbmQnLiAgVGhpcyBtYWtlcyBhbgorICAgaW5saW5lIHN5c3RlbSBjYWxsIHRvIFNZU19jYWNoZWZsdXNoLiAgKi8KKyNkZWZpbmUgQ0xFQVJfSU5TTl9DQUNIRShCRUcsIEVORCkJCQkJCVwKK3sJCQkJCQkJCQlcCisgIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX2JlZyBfX2FzbSAoImExIikgPSAodW5zaWduZWQgbG9uZykgKEJFRyk7CVwKKyAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfZW5kIF9fYXNtICgiYTIiKSA9ICh1bnNpZ25lZCBsb25nKSAoRU5EKTsJXAorICByZWdpc3RlciB1bnNpZ25lZCBsb25nIF9mbGcgX19hc20gKCJhMyIpID0gMDsJCQkJXAorICBfX2FzbSBfX3ZvbGF0aWxlICgic3dpIDB4OWYwMDAyCQlAIHN5c19jYWNoZWZsdXNoIglcCisJCSAgICA6ICI9ciIgKF9iZWcpCQkJCQlcCisJCSAgICA6ICIwIiAoX2JlZyksICJyIiAoX2VuZCksICJyIiAoX2ZsZykpOwkJXAorfQpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NvbmZpZy9kYnhlbGYuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvZGJ4ZWxmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzYzI2NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvZGJ4ZWxmLmgKQEAgLTAsMCArMSw2OCBAQAorLyogRGVmaW5pdGlvbnMgbmVlZGVkIHdoZW4gdXNpbmcgc3RhYnMgZW1iZWRkZWQgaW4gRUxGIHNlY3Rpb25zLgorICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDA0LCAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1VuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCithIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBUaGlzIGZpbGUgbWF5IGJlIGluY2x1ZGVkIGJ5IGFueSBFTEYgdGFyZ2V0IHdoaWNoIHdpc2hlcyB0bworICAgc3VwcG9ydCAtZ3N0YWJzIGdlbmVyYXRpbmcgc3RhYnMgaW4gc2VjdGlvbnMsIGFzIHByb2R1Y2VkIGJ5IGdhcworICAgYW5kIHVuZGVyc3Rvb2QgYnkgZ2RiLiAgKi8KKworI2lmbmRlZiBHQ0NfREJYX0VMRl9ICisjZGVmaW5lIEdDQ19EQlhfRUxGX0gKKworLyogT3V0cHV0IERCWCAoc3RhYnMpIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpZiBkb2luZyAtZ3N0YWJzLiAgKi8KKworI2RlZmluZSBEQlhfREVCVUdHSU5HX0lORk8gMQorCisvKiBNYWtlIExCUkFDIGFuZCBSQlJBQyBhZGRyZXNzZXMgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZQorICAgZnVuY3Rpb24uICBUaGUgbmF0aXZlIFNvbGFyaXMgc3RhYnMgZGVidWdnaW5nIGZvcm1hdCB3b3JrcyB0aGlzCisgICB3YXksIGdkYiBleHBlY3RzIGl0LCBhbmQgaXQgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIHJlbG9jYXRpb24KKyAgIGVudHJpZXMuLi4gICovCisKKyNkZWZpbmUgREJYX0JMT0NLU19GVU5DVElPTl9SRUxBVElWRSAxCisKKy8qIC4uLiBidXQsIHRvIG1ha2UgdGhpcyB3b3JrLCBmdW5jdGlvbnMgbXVzdCBhcHBlYXIgcHJpb3IgdG8gbGluZSBpbmZvLiAgKi8KKworI2RlZmluZSBEQlhfRlVOQ1RJT05fRklSU1QKKworLyogV2hlbiBnZW5lcmF0aW5nIHN0YWJzIGRlYnVnZ2luZywgdXNlIE5fQklOQ0wgZW50cmllcy4gICovCisKKyNkZWZpbmUgREJYX1VTRV9CSU5DTAorCisvKiBUaGVyZSBpcyBubyBsaW1pdCB0byB0aGUgbGVuZ3RoIG9mIHN0YWJzIHN0cmluZ3MuICAqLworCisjaWZuZGVmIERCWF9DT05USU5fTEVOR1RICisjZGVmaW5lIERCWF9DT05USU5fTEVOR1RIIDAKKyNlbmRpZgorCisvKiBMaWtlIGJsb2NrIGFkZHJlc3Nlcywgc3RhYnMgbGluZSBudW1iZXJzIGFyZSByZWxhdGl2ZSB0byB0aGUKKyAgIGN1cnJlbnQgZnVuY3Rpb24uICAqLworCisjZGVmaW5lIERCWF9MSU5FU19GVU5DVElPTl9SRUxBVElWRSAxCisKKy8qIEdlbmVyYXRlIGEgYmxhbmsgdHJhaWxpbmcgTl9TTyB0byBtYXJrIHRoZSBlbmQgb2YgdGhlIC5vIGZpbGUsIHNpbmNlCisgICB3ZSBjYW4ndCBkZXBlbmQgdXBvbiB0aGUgbGlua2VyIHRvIG1hcmsgLm8gZmlsZSBib3VuZGFyaWVzIHdpdGgKKyAgIGVtYmVkZGVkIHN0YWJzLiAgKi8KKworI2RlZmluZSBEQlhfT1VUUFVUX05VTExfTl9TT19BVF9NQUlOX1NPVVJDRV9GSUxFX0VORAorCisjZW5kaWYgLyogISBHQ0NfREJYX0VMRl9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvY29uZmlnL2VsZm9zLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvY29uZmlnL2VsZm9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgxOGY2NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvZWxmb3MuaApAQCAtMCwwICsxLDUzNSBAQAorLyogZWxmb3MuaCAgLS0gIG9wZXJhdGluZyBzeXN0ZW0gc3BlY2lmaWMgZGVmaW5lcyB0byBiZSB1c2VkIHdoZW4KKyAgIHRhcmdldGluZyBHQ0MgZm9yIHNvbWUgZ2VuZXJpYyBFTEYgc3lzdGVtCisgICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTQsIDE5OTUsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsCisgICAyMDA3LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQmFzZWQgb24gc3ZyNC5oIGNvbnRyaWJ1dGVkIGJ5IFJvbiBHdWlsbWV0dGUgKHJmZ0BuZXRjb20uY29tKS4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKK3Blcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKzMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKK3NlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2RlZmluZSBUQVJHRVRfT0JKRk1UX0NQUF9CVUlMVElOUygpCQlcCisgIGRvCQkJCQkJXAorICAgIHsJCQkJCQlcCisJYnVpbHRpbl9kZWZpbmUgKCJfX0VMRl9fIik7CQlcCisgICAgfQkJCQkJCVwKKyAgd2hpbGUgKDApCisKKy8qIERlZmluZSBhIHN5bWJvbCBpbmRpY2F0aW5nIHRoYXQgd2UgYXJlIHVzaW5nIGVsZm9zLmguCisgICBTb21lIENQVSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGVzIHVzZSB0aGlzLiAgKi8KKyNkZWZpbmUgVVNJTkdfRUxGT1NfSAorCisvKiBUaGUgcHJlZml4IHRvIGFkZCB0byB1c2VyLXZpc2libGUgYXNzZW1ibGVyIHN5bWJvbHMuCisKKyAgIEZvciBFTEYgc3lzdGVtcyB0aGUgY29udmVudGlvbiBpcyAqbm90KiB0byBwcmVwZW5kIGEgbGVhZGluZworICAgdW5kZXJzY29yZSBvbnRvIHVzZXItbGV2ZWwgc3ltYm9sIG5hbWVzLiAgKi8KKworI3VuZGVmICBVU0VSX0xBQkVMX1BSRUZJWAorI2RlZmluZSBVU0VSX0xBQkVMX1BSRUZJWCAiIgorCisvKiBUaGUgYmlnZ2VzdCBhbGlnbm1lbnQgc3VwcG9ydGVkIGJ5IEVMRiBpbiBiaXRzLiAzMi1iaXQgRUxGIAorICAgc3VwcG9ydHMgc2VjdGlvbiBhbGlnbm1lbnQgdXAgdG8gKDB4ODAwMDAwMDAgKiA4KSwgd2hpbGUgCisgICA2NC1iaXQgRUxGIHN1cHBvcnRzICgweDgwMDAwMDAwMDAwMDAwMDAgKiA4KS4gSWYgdGhpcyBtYWNybyAKKyAgIGlzIG5vdCBkZWZpbmVkLCB0aGUgZGVmYXVsdCBpcyB0aGUgbGFyZ2VzdCBhbGlnbm1lbnQgc3VwcG9ydGVkIAorICAgYnkgMzItYml0IEVMRiBhbmQgcmVwcmVzZW50YWJsZSBvbiBhIDMyLWJpdCBob3N0LiBVc2UgdGhpcworICAgbWFjcm8gdG8gbGltaXQgdGhlIGFsaWdubWVudCB3aGljaCBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nCisgICB0aGUgYF9fYXR0cmlidXRlX18gKChhbGlnbmVkIChOKSkpJyBjb25zdHJ1Y3QuICAqLworI2lmbmRlZiBNQVhfT0ZJTEVfQUxJR05NRU5UCisjZGVmaW5lIE1BWF9PRklMRV9BTElHTk1FTlQgKCgodW5zaWduZWQgaW50KSAxIDw8IDI4KSAqIDgpCisjZW5kaWYKKworLyogVXNlIHBlcmlvZHMgcmF0aGVyIHRoYW4gZG9sbGFyIHNpZ25zIGluIHNwZWNpYWwgZysrIGFzc2VtYmxlciBuYW1lcy4gICovCisKKyNkZWZpbmUgTk9fRE9MTEFSX0lOX0xBQkVMCisKKy8qIFdyaXRpbmcgYGludCcgZm9yIGEgYml0LWZpZWxkIGZvcmNlcyBpbnQgYWxpZ25tZW50IGZvciB0aGUgc3RydWN0dXJlLiAgKi8KKworI2lmbmRlZiBQQ0NfQklURklFTERfVFlQRV9NQVRURVJTCisjZGVmaW5lIFBDQ19CSVRGSUVMRF9UWVBFX01BVFRFUlMgMQorI2VuZGlmCisKKy8qIEhhbmRsZSAjcHJhZ21hIHdlYWsgYW5kICNwcmFnbWEgcGFjay4gICovCisKKyNkZWZpbmUgSEFORExFX1NZU1ZfUFJBR01BIDEKKworLyogQWxsIEVMRiB0YXJnZXRzIGNhbiBzdXBwb3J0IERXQVJGLTIuICAqLworCisjZGVmaW5lIERXQVJGMl9ERUJVR0dJTkdfSU5GTyAxCisKKy8qIFRoZSBHTlUgdG9vbHMgb3BlcmF0ZSBiZXR0ZXIgd2l0aCBkd2FyZjIsIGFuZCBpdCBpcyByZXF1aXJlZCBieSBzb21lCisgICBwc0FCSSdzLiAgU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnkgbmF0aXZlIHRvb2xzIHRvIGJlIGNvbXBhdGlibGUgd2l0aCwKKyAgIGRlZmF1bHQgdG8gZHdhcmYyLiAgKi8KKworI2lmbmRlZiBQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUKKyNkZWZpbmUgUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFIERXQVJGMl9ERUJVRworI2VuZGlmCisKKy8qIEFsbCBTVlI0IHRhcmdldHMgdXNlIHRoZSBFTEYgb2JqZWN0IGZpbGUgZm9ybWF0LiAgKi8KKyNkZWZpbmUgT0JKRUNUX0ZPUk1BVF9FTEYKKworCisvKiBPdXRwdXQgI2lkZW50IGFzIGEgLmlkZW50LiAgKi8KKworI2RlZmluZSBBU01fT1VUUFVUX0lERU5UKEZJTEUsIE5BTUUpIFwKKyAgZnByaW50ZiAoRklMRSwgIiVzXCIlc1wiXG4iLCBJREVOVF9BU01fT1AsIE5BTUUpOworCisjZGVmaW5lIElERU5UX0FTTV9PUCAiXHQuaWRlbnRcdCIKKworI3VuZGVmICBTRVRfQVNNX09QCisjZGVmaW5lIFNFVF9BU01fT1AJIlx0LnNldFx0IgorCisvKiBNb3N0IHN2cjQgYXNzZW1ibGVycyB3YW50IGEgLmZpbGUgZGlyZWN0aXZlIGF0IHRoZSBiZWdpbm5pbmcgb2YKKyAgIHRoZWlyIGlucHV0IGZpbGUuICAqLworI2RlZmluZSBUQVJHRVRfQVNNX0ZJTEVfU1RBUlRfRklMRV9ESVJFQ1RJVkUgdHJ1ZQorCisvKiBUaGlzIGlzIGhvdyB0byBhbGxvY2F0ZSBlbXB0eSBzcGFjZSBpbiBzb21lIHNlY3Rpb24uICBUaGUgLnplcm8KKyAgIHBzZXVkby1vcCBpcyB1c2VkIGZvciB0aGlzIG9uIG1vc3Qgc3ZyNCBhc3NlbWJsZXJzLiAgKi8KKworI2RlZmluZSBTS0lQX0FTTV9PUAkiXHQuemVyb1x0IgorCisjdW5kZWYgIEFTTV9PVVRQVVRfU0tJUAorI2RlZmluZSBBU01fT1VUUFVUX1NLSVAoRklMRSwgU0laRSkgXAorICAgZnByaW50ZiAoKEZJTEUpLCAiJXMiSE9TVF9XSURFX0lOVF9QUklOVF9VTlNJR05FRCJcbiIsXAorCSAgICBTS0lQX0FTTV9PUCwgKFNJWkUpKQorCisvKiBUaGlzIGlzIGhvdyB0byBzdG9yZSBpbnRvIHRoZSBzdHJpbmcgTEFCRUwKKyAgIHRoZSBzeW1ib2xfcmVmIG5hbWUgb2YgYW4gaW50ZXJuYWwgbnVtYmVyZWQgbGFiZWwgd2hlcmUKKyAgIFBSRUZJWCBpcyB0aGUgY2xhc3Mgb2YgbGFiZWwgYW5kIE5VTSBpcyB0aGUgbnVtYmVyIHdpdGhpbiB0aGUgY2xhc3MuCisgICBUaGlzIGlzIHN1aXRhYmxlIGZvciBvdXRwdXQgd2l0aCBgYXNzZW1ibGVfbmFtZScuCisKKyAgIEZvciBtb3N0IHN2cjQgc3lzdGVtcywgdGhlIGNvbnZlbnRpb24gaXMgdGhhdCBhbnkgc3ltYm9sIHdoaWNoIGJlZ2lucworICAgd2l0aCBhIHBlcmlvZCBpcyBub3QgcHV0IGludG8gdGhlIGxpbmtlciBzeW1ib2wgdGFibGUgYnkgdGhlIGFzc2VtYmxlci4gICovCisKKyN1bmRlZiAgQVNNX0dFTkVSQVRFX0lOVEVSTkFMX0xBQkVMCisjZGVmaW5lIEFTTV9HRU5FUkFURV9JTlRFUk5BTF9MQUJFTChMQUJFTCwgUFJFRklYLCBOVU0pCQlcCisgIGRvCQkJCQkJCQlcCisgICAgewkJCQkJCQkJXAorICAgICAgc3ByaW50ZiAoTEFCRUwsICIqLiVzJXUiLCBQUkVGSVgsICh1bnNpZ25lZCkgKE5VTSkpOwlcCisgICAgfQkJCQkJCQkJXAorICB3aGlsZSAoMCkKKworLyogT3V0cHV0IHRoZSBsYWJlbCB3aGljaCBwcmVjZWRlcyBhIGp1bXB0YWJsZS4gIE5vdGUgdGhhdCBmb3IgYWxsIHN2cjQKKyAgIHN5c3RlbXMgd2hlcmUgd2UgYWN0dWFsbHkgZ2VuZXJhdGUganVtcHRhYmxlcyAod2hpY2ggaXMgdG8gc2F5IGV2ZXJ5CisgICBzdnI0IHRhcmdldCBleGNlcHQgaTM4Niwgd2hlcmUgd2UgdXNlIGNhc2VzaSBpbnN0ZWFkKSB3ZSBwdXQgdGhlIGp1bXAtCisgICB0YWJsZXMgaW50byB0aGUgLnJvZGF0YSBzZWN0aW9uIGFuZCBzaW5jZSBvdGhlciBzdHVmZiBjb3VsZCBoYXZlIGJlZW4KKyAgIHB1dCBpbnRvIHRoZSAucm9kYXRhIHNlY3Rpb24gcHJpb3IgdG8gYW55IGdpdmVuIGp1bXB0YWJsZSwgd2UgaGF2ZSB0bworICAgbWFrZSBzdXJlIHRoYXQgdGhlIGxvY2F0aW9uIGNvdW50ZXIgZm9yIHRoZSAucm9kYXRhIHNlY3Rpb24gZ2V0cyBwcm8tCisgICBwZXJseSByZS1hbGlnbmVkIHByaW9yIHRvIHRoZSBhY3R1YWwgYmVnaW5uaW5nIG9mIHRoZSBqdW1wIHRhYmxlLiAgKi8KKworI3VuZGVmIEFMSUdOX0FTTV9PUAorI2RlZmluZSBBTElHTl9BU01fT1AgIlx0LmFsaWduXHQiCisKKyNpZm5kZWYgQVNNX09VVFBVVF9CRUZPUkVfQ0FTRV9MQUJFTAorI2RlZmluZSBBU01fT1VUUFVUX0JFRk9SRV9DQVNFX0xBQkVMKEZJTEUsIFBSRUZJWCwgTlVNLCBUQUJMRSkgXAorICBBU01fT1VUUFVUX0FMSUdOICgoRklMRSksIDIpOworI2VuZGlmCisKKyN1bmRlZiAgQVNNX09VVFBVVF9DQVNFX0xBQkVMCisjZGVmaW5lIEFTTV9PVVRQVVRfQ0FTRV9MQUJFTChGSUxFLCBQUkVGSVgsIE5VTSwgSlVNUFRBQkxFKQkJXAorICBkbwkJCQkJCQkJCVwKKyAgICB7CQkJCQkJCQkJXAorICAgICAgQVNNX09VVFBVVF9CRUZPUkVfQ0FTRV9MQUJFTCAoRklMRSwgUFJFRklYLCBOVU0sIEpVTVBUQUJMRSkJXAorCSgqdGFyZ2V0bS5hc21fb3V0LmludGVybmFsX2xhYmVsKSAoRklMRSwgUFJFRklYLCBOVU0pOwkJCVwKKyAgICB9CQkJCQkJCQkJXAorICB3aGlsZSAoMCkKKworLyogVGhlIHN0YW5kYXJkIFNWUjQgYXNzZW1ibGVyIHNlZW1zIHRvIHJlcXVpcmUgdGhhdCBjZXJ0YWluIGJ1aWx0aW4KKyAgIGxpYnJhcnkgcm91dGluZXMgKGUuZy4gLnVkaXYpIGJlIGV4cGxpY2l0bHkgZGVjbGFyZWQgYXMgLmdsb2JsCisgICBpbiBlYWNoIGFzc2VtYmx5IGZpbGUgd2hlcmUgdGhleSBhcmUgcmVmZXJlbmNlZC4gICovCisKKyNkZWZpbmUgQVNNX09VVFBVVF9FWFRFUk5BTF9MSUJDQUxMKEZJTEUsIEZVTikJXAorICAoKnRhcmdldG0uYXNtX291dC5nbG9iYWxpemVfbGFiZWwpIChGSUxFLCBYU1RSIChGVU4sIDApKQorCisvKiBUaGlzIHNheXMgaG93IHRvIG91dHB1dCBhc3NlbWJsZXIgY29kZSB0byBkZWNsYXJlIGFuCisgICB1bmluaXRpYWxpemVkIGV4dGVybmFsIGxpbmthZ2UgZGF0YSBvYmplY3QuICBVbmRlciBTVlI0LAorICAgdGhlIGxpbmtlciBzZWVtcyB0byB3YW50IHRoZSBhbGlnbm1lbnQgb2YgZGF0YSBvYmplY3RzCisgICB0byBkZXBlbmQgb24gdGhlaXIgdHlwZXMuICBXZSBkbyBleGFjdGx5IHRoYXQgaGVyZS4gICovCisKKyNkZWZpbmUgQ09NTU9OX0FTTV9PUAkiXHQuY29tbVx0IgorCisjdW5kZWYgIEFTTV9PVVRQVVRfQUxJR05FRF9DT01NT04KKyNkZWZpbmUgQVNNX09VVFBVVF9BTElHTkVEX0NPTU1PTihGSUxFLCBOQU1FLCBTSVpFLCBBTElHTikJCVwKKyAgZG8JCQkJCQkJCQlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIGZwcmludGYgKChGSUxFKSwgIiVzIiwgQ09NTU9OX0FTTV9PUCk7CQkJCVwKKyAgICAgIGFzc2VtYmxlX25hbWUgKChGSUxFKSwgKE5BTUUpKTsJCQkJCVwKKyAgICAgIGZwcmludGYgKChGSUxFKSwgIiwiSE9TVF9XSURFX0lOVF9QUklOVF9VTlNJR05FRCIsJXVcbiIsCQlcCisJICAgICAgIChTSVpFKSwgKEFMSUdOKSAvIEJJVFNfUEVSX1VOSVQpOwkJCVwKKyAgICB9CQkJCQkJCQkJXAorICB3aGlsZSAoMCkKKworLyogVGhpcyBzYXlzIGhvdyB0byBvdXRwdXQgYXNzZW1ibGVyIGNvZGUgdG8gZGVjbGFyZSBhbgorICAgdW5pbml0aWFsaXplZCBpbnRlcm5hbCBsaW5rYWdlIGRhdGEgb2JqZWN0LiAgVW5kZXIgU1ZSNCwKKyAgIHRoZSBsaW5rZXIgc2VlbXMgdG8gd2FudCB0aGUgYWxpZ25tZW50IG9mIGRhdGEgb2JqZWN0cworICAgdG8gZGVwZW5kIG9uIHRoZWlyIHR5cGVzLiAgV2UgZG8gZXhhY3RseSB0aGF0IGhlcmUuICAqLworCisjZGVmaW5lIExPQ0FMX0FTTV9PUAkiXHQubG9jYWxcdCIKKworI3VuZGVmICBBU01fT1VUUFVUX0FMSUdORURfTE9DQUwKKyNkZWZpbmUgQVNNX09VVFBVVF9BTElHTkVEX0xPQ0FMKEZJTEUsIE5BTUUsIFNJWkUsIEFMSUdOKQlcCisgIGRvCQkJCQkJCQlcCisgICAgewkJCQkJCQkJXAorICAgICAgZnByaW50ZiAoKEZJTEUpLCAiJXMiLCBMT0NBTF9BU01fT1ApOwkJCVwKKyAgICAgIGFzc2VtYmxlX25hbWUgKChGSUxFKSwgKE5BTUUpKTsJCQkJXAorICAgICAgZnByaW50ZiAoKEZJTEUpLCAiXG4iKTsJCQkJCVwKKyAgICAgIEFTTV9PVVRQVVRfQUxJR05FRF9DT01NT04gKEZJTEUsIE5BTUUsIFNJWkUsIEFMSUdOKTsJXAorICAgIH0JCQkJCQkJCVwKKyAgd2hpbGUgKDApCisKKy8qIFRoaXMgaXMgdGhlIHBzZXVkby1vcCB1c2VkIHRvIGdlbmVyYXRlIGEgY29udGlndW91cyBzZXF1ZW5jZSBvZiBieXRlCisgICB2YWx1ZXMgZnJvbSBhIGRvdWJsZS1xdW90ZWQgc3RyaW5nIFdJVEhPVVQgSEFWSU5HIEEgVEVSTUlOQVRJTkcgTlVMCisgICBBVVRPTUFUSUNBTExZIEFQUEVOREVELiAgVGhpcyBpcyB0aGUgc2FtZSBmb3IgbW9zdCBzdnI0IGFzc2VtYmxlcnMuICAqLworCisjdW5kZWYgIEFTQ0lJX0RBVEFfQVNNX09QCisjZGVmaW5lIEFTQ0lJX0RBVEFfQVNNX09QCSJcdC5hc2NpaVx0IgorCisvKiBTdXBwb3J0IGEgcmVhZC1vbmx5IGRhdGEgc2VjdGlvbi4gICovCisjZGVmaW5lIFJFQURPTkxZX0RBVEFfU0VDVElPTl9BU01fT1AJIlx0LnNlY3Rpb25cdC5yb2RhdGEiCisKKy8qIE9uIHN2cjQsIHdlICpkbyogaGF2ZSBzdXBwb3J0IGZvciB0aGUgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zLCBhbmQgd2UKKyAgIGNhbiBwdXQgc3R1ZmYgaW4gdGhlcmUgdG8gYmUgZXhlY3V0ZWQgYmVmb3JlIGFuZCBhZnRlciBgbWFpbicuICBXZSBsZXQKKyAgIGNydHN0dWZmLmMgYW5kIG90aGVyIGZpbGVzIGtub3cgdGhpcyBieSBkZWZpbmluZyB0aGUgZm9sbG93aW5nIHN5bWJvbHMuCisgICBUaGUgZGVmaW5pdGlvbnMgc2F5IGhvdyB0byBjaGFuZ2Ugc2VjdGlvbnMgdG8gdGhlIC5pbml0IGFuZCAuZmluaQorICAgc2VjdGlvbnMuICBUaGlzIGlzIHRoZSBzYW1lIGZvciBhbGwga25vd24gc3ZyNCBhc3NlbWJsZXJzLiAgKi8KKworI2RlZmluZSBJTklUX1NFQ1RJT05fQVNNX09QCSJcdC5zZWN0aW9uXHQuaW5pdCIKKyNkZWZpbmUgRklOSV9TRUNUSU9OX0FTTV9PUAkiXHQuc2VjdGlvblx0LmZpbmkiCisKKy8qIE91dHB1dCBhc3NlbWJseSBkaXJlY3RpdmUgdG8gbW92ZSB0byB0aGUgYmVnaW5uaW5nIG9mIGN1cnJlbnQgc2VjdGlvbi4gICovCisjaWZkZWYgSEFWRV9HQVNfU1VCU0VDVElPTl9PUkRFUklORworIyBkZWZpbmUgQVNNX1NFQ1RJT05fU1RBUlRfT1AJIlx0LnN1YnNlY3Rpb25cdC0xIgorIyBkZWZpbmUgQVNNX09VVFBVVF9TRUNUSU9OX1NUQVJUKEZJTEUpCVwKKyAgZnByaW50ZiAoKEZJTEUpLCAiJXNcbiIsIEFTTV9TRUNUSU9OX1NUQVJUX09QKQorI2VuZGlmCisKKyNkZWZpbmUgTUFLRV9ERUNMX09ORV9PTkxZKERFQ0wpIChERUNMX1dFQUsgKERFQ0wpID0gMSkKKworLyogU3dpdGNoIGludG8gYSBnZW5lcmljIHNlY3Rpb24uICAqLworI2RlZmluZSBUQVJHRVRfQVNNX05BTUVEX1NFQ1RJT04gIGRlZmF1bHRfZWxmX2FzbV9uYW1lZF9zZWN0aW9uCisKKyN1bmRlZiAgVEFSR0VUX0FTTV9TRUxFQ1RfUlRYX1NFQ1RJT04KKyNkZWZpbmUgVEFSR0VUX0FTTV9TRUxFQ1RfUlRYX1NFQ1RJT04gZGVmYXVsdF9lbGZfc2VsZWN0X3J0eF9zZWN0aW9uCisjdW5kZWYJVEFSR0VUX0FTTV9TRUxFQ1RfU0VDVElPTgorI2RlZmluZSBUQVJHRVRfQVNNX1NFTEVDVF9TRUNUSU9OIGRlZmF1bHRfZWxmX3NlbGVjdF9zZWN0aW9uCisjdW5kZWYgIFRBUkdFVF9IQVZFX1NXSVRDSEFCTEVfQlNTX1NFQ1RJT05TCisjZGVmaW5lIFRBUkdFVF9IQVZFX1NXSVRDSEFCTEVfQlNTX1NFQ1RJT05TIHRydWUKKworLyogRGVmaW5lIHRoZSBzdHJpbmdzIHVzZWQgZm9yIHRoZSBzcGVjaWFsIHN2cjQgLnR5cGUgYW5kIC5zaXplIGRpcmVjdGl2ZXMuCisgICBUaGVzZSBzdHJpbmdzIGdlbmVyYWxseSBkbyBub3QgdmFyeSBmcm9tIG9uZSBzeXN0ZW0gcnVubmluZyBzdnI0IHRvCisgICBhbm90aGVyLCBidXQgaWYgYSBnaXZlbiBzeXN0ZW0gKGUuZy4gbTg4ayBydW5uaW5nIHN2cikgbmVlZHMgdG8gdXNlCisgICBkaWZmZXJlbnQgcHNldWRvLW9wIG5hbWVzIGZvciB0aGVzZSwgdGhleSBtYXkgYmUgb3ZlcnJpZGRlbiBpbiB0aGUKKyAgIGZpbGUgd2hpY2ggaW5jbHVkZXMgdGhpcyBvbmUuICAqLworCisjZGVmaW5lIFRZUEVfQVNNX09QCSJcdC50eXBlXHQiCisjZGVmaW5lIFNJWkVfQVNNX09QCSJcdC5zaXplXHQiCisKKy8qIFRoaXMgaXMgaG93IHdlIHRlbGwgdGhlIGFzc2VtYmxlciB0aGF0IGEgc3ltYm9sIGlzIHdlYWsuICAqLworCisjZGVmaW5lIEFTTV9XRUFLRU5fTEFCRUwoRklMRSwgTkFNRSkJXAorICBkbwkJCQkJXAorICAgIHsJCQkJCVwKKyAgICAgIGZwdXRzICgiXHQud2Vha1x0IiwgKEZJTEUpKTsJXAorICAgICAgYXNzZW1ibGVfbmFtZSAoKEZJTEUpLCAoTkFNRSkpOwlcCisgICAgICBmcHV0YyAoJ1xuJywgKEZJTEUpKTsJCVwKKyAgICB9CQkJCQlcCisgIHdoaWxlICgwKQorCisvKiBUaGUgZm9sbG93aW5nIG1hY3JvIGRlZmluZXMgdGhlIGZvcm1hdCB1c2VkIHRvIG91dHB1dCB0aGUgc2Vjb25kCisgICBvcGVyYW5kIG9mIHRoZSAudHlwZSBhc3NlbWJsZXIgZGlyZWN0aXZlLiAgRGlmZmVyZW50IHN2cjQgYXNzZW1ibGVycworICAgZXhwZWN0IHZhcmlvdXMgZGlmZmVyZW50IGZvcm1zIGZvciB0aGlzIG9wZXJhbmQuICBUaGUgb25lIGdpdmVuIGhlcmUKKyAgIGlzIGp1c3QgYSBkZWZhdWx0LiAgWW91IG1heSBuZWVkIHRvIG92ZXJyaWRlIGl0IGluIHlvdXIgbWFjaGluZS0KKyAgIHNwZWNpZmljIHRtLmggZmlsZSAoZGVwZW5kaW5nIHVwb24gdGhlIHBhcnRpY3VsYXJzIG9mIHlvdXIgYXNzZW1ibGVyKS4gICovCisKKyNkZWZpbmUgVFlQRV9PUEVSQU5EX0ZNVAkiQCVzIgorCisvKiBXcml0ZSB0aGUgZXh0cmEgYXNzZW1ibGVyIGNvZGUgbmVlZGVkIHRvIGRlY2xhcmUgYSBmdW5jdGlvbidzIHJlc3VsdC4KKyAgIE1vc3Qgc3ZyNCBhc3NlbWJsZXJzIGRvbid0IHJlcXVpcmUgYW55IHNwZWNpYWwgZGVjbGFyYXRpb24gb2YgdGhlCisgICByZXN1bHQgdmFsdWUsIGJ1dCB0aGVyZSBhcmUgZXhjZXB0aW9ucy4gICovCisKKyNpZm5kZWYgQVNNX0RFQ0xBUkVfUkVTVUxUCisjZGVmaW5lIEFTTV9ERUNMQVJFX1JFU1VMVChGSUxFLCBSRVNVTFQpCisjZW5kaWYKKworLyogVGhlc2UgbWFjcm9zIGdlbmVyYXRlIHRoZSBzcGVjaWFsIC50eXBlIGFuZCAuc2l6ZSBkaXJlY3RpdmVzIHdoaWNoCisgICBhcmUgdXNlZCB0byBzZXQgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGRzIG9mIHRoZSBsaW5rZXIgc3ltYm9sIHRhYmxlCisgICBlbnRyaWVzIGluIGFuIEVMRiBvYmplY3QgZmlsZSB1bmRlciBTVlI0LiAgVGhlc2UgbWFjcm9zIGFsc28gb3V0cHV0CisgICB0aGUgc3RhcnRpbmcgbGFiZWxzIGZvciB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zL29iamVjdHMuICAqLworCisvKiBXcml0ZSB0aGUgZXh0cmEgYXNzZW1ibGVyIGNvZGUgbmVlZGVkIHRvIGRlY2xhcmUgYSBmdW5jdGlvbiBwcm9wZXJseS4KKyAgIFNvbWUgc3ZyNCBhc3NlbWJsZXJzIG5lZWQgdG8gYWxzbyBoYXZlIHNvbWV0aGluZyBleHRyYSBzYWlkIGFib3V0IHRoZQorICAgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUuICBXZSBhbGxvdyBmb3IgdGhhdCBoZXJlLiAgKi8KKworI2lmbmRlZiBBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FCisjZGVmaW5lIEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUoRklMRSwgTkFNRSwgREVDTCkJCVwKKyAgZG8JCQkJCQkJCVwKKyAgICB7CQkJCQkJCQlcCisgICAgICBBU01fT1VUUFVUX1RZUEVfRElSRUNUSVZFIChGSUxFLCBOQU1FLCAiZnVuY3Rpb24iKTsJXAorICAgICAgQVNNX0RFQ0xBUkVfUkVTVUxUIChGSUxFLCBERUNMX1JFU1VMVCAoREVDTCkpOwkJXAorICAgICAgQVNNX09VVFBVVF9MQUJFTCAoRklMRSwgTkFNRSk7CQkJCVwKKyAgICB9CQkJCQkJCQlcCisgIHdoaWxlICgwKQorI2VuZGlmCisKKy8qIFdyaXRlIHRoZSBleHRyYSBhc3NlbWJsZXIgY29kZSBuZWVkZWQgdG8gZGVjbGFyZSBhbiBvYmplY3QgcHJvcGVybHkuICAqLworCisjaWZkZWYgSEFWRV9HQVNfR05VX1VOSVFVRV9PQkpFQ1QKKyNkZWZpbmUgVVNFX0dOVV9VTklRVUVfT0JKRUNUIDEKKyNlbHNlCisjZGVmaW5lIFVTRV9HTlVfVU5JUVVFX09CSkVDVCAwCisjZW5kaWYKKworI2RlZmluZSBBU01fREVDTEFSRV9PQkpFQ1RfTkFNRShGSUxFLCBOQU1FLCBERUNMKQkJCVwKKyAgZG8JCQkJCQkJCQlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIEhPU1RfV0lERV9JTlQgc2l6ZTsJCQkJCQlcCisJCQkJCQkJCQlcCisgICAgICAvKiBGb3IgdGVtcGxhdGUgc3RhdGljIGRhdGEgbWVtYmVyIGluc3RhbnRpYXRpb25zIG9yCQlcCisJIGlubGluZSBmbiBsb2NhbCBzdGF0aWNzIGFuZCB0aGVpciBndWFyZCB2YXJpYWJsZXMsIHVzZQkJXAorCSBnbnVfdW5pcXVlX29iamVjdCBzbyB0aGF0IHRoZXkgd2lsbCBiZSBjb21iaW5lZCBldmVuIHVuZGVyCVwKKwkgUlRMRF9MT0NBTC4gIERvbid0IHVzZSBnbnVfdW5pcXVlX29iamVjdCBmb3IgdHlwZWluZm8sCQlcCisJIHZ0YWJsZXMgYW5kIG90aGVyIHJlYWQtb25seSBhcnRpZmljaWFsIGRlY2xzLiAgKi8JCVwKKyAgICAgIGlmIChVU0VfR05VX1VOSVFVRV9PQkpFQ1QgJiYgREVDTF9PTkVfT05MWSAoREVDTCkJCQlcCisJICAmJiAoIURFQ0xfQVJUSUZJQ0lBTCAoREVDTCkgfHwgIVRSRUVfUkVBRE9OTFkgKERFQ0wpKSkJXAorCUFTTV9PVVRQVVRfVFlQRV9ESVJFQ1RJVkUgKEZJTEUsIE5BTUUsICJnbnVfdW5pcXVlX29iamVjdCIpOwlcCisgICAgICBlbHNlCQkJCQkJCQlcCisJQVNNX09VVFBVVF9UWVBFX0RJUkVDVElWRSAoRklMRSwgTkFNRSwgIm9iamVjdCIpOwkJXAorCQkJCQkJCQkJXAorICAgICAgc2l6ZV9kaXJlY3RpdmVfb3V0cHV0ID0gMDsJCQkJCVwKKyAgICAgIGlmICghZmxhZ19pbmhpYml0X3NpemVfZGlyZWN0aXZlCQkJCQlcCisJICAmJiAoREVDTCkgJiYgREVDTF9TSVpFIChERUNMKSkJCQkJXAorCXsJCQkJCQkJCVwKKwkgIHNpemVfZGlyZWN0aXZlX291dHB1dCA9IDE7CQkJCQlcCisJICBzaXplID0gaW50X3NpemVfaW5fYnl0ZXMgKFRSRUVfVFlQRSAoREVDTCkpOwkJCVwKKwkgIEFTTV9PVVRQVVRfU0laRV9ESVJFQ1RJVkUgKEZJTEUsIE5BTUUsIHNpemUpOwkJCVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCisgICAgICBBU01fT1VUUFVUX0xBQkVMIChGSUxFLCBOQU1FKTsJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorICB3aGlsZSAoMCkKKworLyogT3V0cHV0IHRoZSBzaXplIGRpcmVjdGl2ZSBmb3IgYSBkZWNsIGluIHJlc3Rfb2ZfZGVjbF9jb21waWxhdGlvbgorICAgaW4gdGhlIGNhc2Ugd2hlcmUgd2UgZGlkIG5vdCBkbyBzbyBiZWZvcmUgdGhlIGluaXRpYWxpemVyLgorICAgT25jZSB3ZSBmaW5kIHRoZSBlcnJvcl9tYXJrX25vZGUsIHdlIGtub3cgdGhhdCB0aGUgdmFsdWUgb2YKKyAgIHNpemVfZGlyZWN0aXZlX291dHB1dCB3YXMgc2V0CisgICBieSBBU01fREVDTEFSRV9PQkpFQ1RfTkFNRSB3aGVuIGl0IHdhcyBydW4gZm9yIHRoZSBzYW1lIGRlY2wuICAqLworCisjdW5kZWYgQVNNX0ZJTklTSF9ERUNMQVJFX09CSkVDVAorI2RlZmluZSBBU01fRklOSVNIX0RFQ0xBUkVfT0JKRUNUKEZJTEUsIERFQ0wsIFRPUF9MRVZFTCwgQVRfRU5EKVwKKyAgZG8JCQkJCQkJCVwKKyAgICB7CQkJCQkJCQlcCisgICAgICBjb25zdCBjaGFyICpuYW1lID0gWFNUUiAoWEVYUCAoREVDTF9SVEwgKERFQ0wpLCAwKSwgMCk7CVwKKyAgICAgIEhPU1RfV0lERV9JTlQgc2l6ZTsJCQkJCVwKKwkJCQkJCQkJXAorICAgICAgaWYgKCFmbGFnX2luaGliaXRfc2l6ZV9kaXJlY3RpdmUJCQkJXAorCSAgJiYgREVDTF9TSVpFIChERUNMKQkJCQkJXAorCSAgJiYgISBBVF9FTkQgJiYgVE9QX0xFVkVMCQkJCVwKKwkgICYmIERFQ0xfSU5JVElBTCAoREVDTCkgPT0gZXJyb3JfbWFya19ub2RlCQlcCisJICAmJiAhc2l6ZV9kaXJlY3RpdmVfb3V0cHV0KQkJCQlcCisJewkJCQkJCQlcCisJICBzaXplX2RpcmVjdGl2ZV9vdXRwdXQgPSAxOwkJCQlcCisJICBzaXplID0gaW50X3NpemVfaW5fYnl0ZXMgKFRSRUVfVFlQRSAoREVDTCkpOwkJXAorCSAgQVNNX09VVFBVVF9TSVpFX0RJUkVDVElWRSAoRklMRSwgbmFtZSwgc2l6ZSk7CQlcCisJfQkJCQkJCQlcCisgICAgfQkJCQkJCQkJXAorICB3aGlsZSAoMCkKKworLyogVGhpcyBpcyBob3cgdG8gZGVjbGFyZSB0aGUgc2l6ZSBvZiBhIGZ1bmN0aW9uLiAgKi8KKyNpZm5kZWYgQVNNX0RFQ0xBUkVfRlVOQ1RJT05fU0laRQorI2RlZmluZSBBU01fREVDTEFSRV9GVU5DVElPTl9TSVpFKEZJTEUsIEZOQU1FLCBERUNMKQkJXAorICBkbwkJCQkJCQkJXAorICAgIHsJCQkJCQkJCVwKKyAgICAgIGlmICghZmxhZ19pbmhpYml0X3NpemVfZGlyZWN0aXZlKQkJCQlcCisJQVNNX09VVFBVVF9NRUFTVVJFRF9TSVpFIChGSUxFLCBGTkFNRSk7CQkJXAorICAgIH0JCQkJCQkJCVwKKyAgd2hpbGUgKDApCisjZW5kaWYKKworLyogQSB0YWJsZSBvZiBieXRlcyBjb2RlcyB1c2VkIGJ5IHRoZSBBU01fT1VUUFVUX0FTQ0lJIGFuZAorICAgQVNNX09VVFBVVF9MSU1JVEVEX1NUUklORyBtYWNyb3MuICBFYWNoIGJ5dGUgaW4gdGhlIHRhYmxlCisgICBjb3JyZXNwb25kcyB0byBhIHBhcnRpY3VsYXIgYnl0ZSB2YWx1ZSBbMC4uMjU1XS4gIEZvciBhbnkKKyAgIGdpdmVuIGJ5dGUgdmFsdWUsIGlmIHRoZSB2YWx1ZSBpbiB0aGUgY29ycmVzcG9uZGluZyB0YWJsZQorICAgcG9zaXRpb24gaXMgemVybywgdGhlIGdpdmVuIGNoYXJhY3RlciBjYW4gYmUgb3V0cHV0IGRpcmVjdGx5LgorICAgSWYgdGhlIHRhYmxlIHZhbHVlIGlzIDEsIHRoZSBieXRlIG11c3QgYmUgb3V0cHV0IGFzIGEgXG9vbworICAgb2N0YWwgZXNjYXBlLiAgSWYgdGhlIHRhYmxlcyB2YWx1ZSBpcyBhbnl0aGluZyBlbHNlLCB0aGVuIHRoZQorICAgYnl0ZSB2YWx1ZSBzaG91bGQgYmUgb3V0cHV0IGFzIGEgXCBmb2xsb3dlZCBieSB0aGUgdmFsdWUKKyAgIGluIHRoZSB0YWJsZS4gIE5vdGUgdGhhdCB3ZSBjYW4gdXNlIHN0YW5kYXJkIFVOKlggZXNjYXBlCisgICBzZXF1ZW5jZXMgZm9yIG1hbnkgY29udHJvbCBjaGFyYWN0ZXJzLCBidXQgd2UgZG9uJ3QgdXNlCisgICBcYSB0byByZXByZXNlbnQgQkVMIGJlY2F1c2Ugc29tZSBzdnI0IGFzc2VtYmxlcnMgKGUuZy4gb24KKyAgIHRoZSBpMzg2KSBkb24ndCBrbm93IGFib3V0IHRoYXQuICBBbHNvLCB3ZSBkb24ndCB1c2UgXHYKKyAgIHNpbmNlIHNvbWUgdmVyc2lvbnMgb2YgZ2FzLCBzdWNoIGFzIDIuMiBkaWQgbm90IGFjY2VwdCBpdC4gICovCisKKyNkZWZpbmUgRVNDQVBFUyBcCisiXDFcMVwxXDFcMVwxXDFcMWJ0blwxZnJcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcCitcMFwwXCJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXAorXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcXFwwXDBcMFwKK1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDFcCitcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXAorXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwKK1wxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcCitcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxIgorCisvKiBTb21lIHN2cjQgYXNzZW1ibGVycyBoYXZlIGEgbGltaXQgb24gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdoaWNoCisgICBjYW4gYXBwZWFyIGluIHRoZSBvcGVyYW5kIG9mIGEgLnN0cmluZyBkaXJlY3RpdmUuICBJZiB5b3VyIGFzc2VtYmxlcgorICAgaGFzIHN1Y2ggYSBsaW1pdGF0aW9uLCB5b3Ugc2hvdWxkIGRlZmluZSBTVFJJTkdfTElNSVQgdG8gcmVmbGVjdCB0aGF0CisgICBsaW1pdC4gIE5vdGUgdGhhdCBhdCBsZWFzdCBzb21lIHN2cjQgYXNzZW1ibGVycyBoYXZlIGEgbGltaXQgb24gdGhlCisgICBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBkb3VibGUtcXVvdGVkIHN0cmluZywgYW5kIHRoYXQgdGhleQorICAgY291bnQgZWFjaCBjaGFyYWN0ZXIgaW4gYW4gZXNjYXBlIHNlcXVlbmNlIGFzIG9uZSBieXRlLiAgVGh1cywgYW4KKyAgIGVzY2FwZSBzZXF1ZW5jZSBsaWtlIFwzNzcgd291bGQgY291bnQgYXMgZm91ciBieXRlcy4KKworICAgSWYgeW91ciB0YXJnZXQgYXNzZW1ibGVyIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgLnN0cmluZyBkaXJlY3RpdmUsIHlvdQorICAgc2hvdWxkIGRlZmluZSB0aGlzIHRvIHplcm8uCisqLworCisjZGVmaW5lIFNUUklOR19MSU1JVAkoKHVuc2lnbmVkKSAyNTYpCisKKyNkZWZpbmUgU1RSSU5HX0FTTV9PUAkiXHQuc3RyaW5nXHQiCisKKy8qIFRoZSByb3V0aW5lIHVzZWQgdG8gb3V0cHV0IE5VTCB0ZXJtaW5hdGVkIHN0cmluZ3MuICBXZSB1c2UgYSBzcGVjaWFsCisgICB2ZXJzaW9uIG9mIHRoaXMgZm9yIG1vc3Qgc3ZyNCB0YXJnZXRzIGJlY2F1c2UgZG9pbmcgc28gbWFrZXMgdGhlCisgICBnZW5lcmF0ZWQgYXNzZW1ibHkgY29kZSBtb3JlIGNvbXBhY3QgKGFuZCB0aHVzIGZhc3RlciB0byBhc3NlbWJsZSkKKyAgIGFzIHdlbGwgYXMgbW9yZSByZWFkYWJsZSwgZXNwZWNpYWxseSBmb3IgdGFyZ2V0cyBsaWtlIHRoZSBpMzg2CisgICAod2hlcmUgdGhlIG9ubHkgYWx0ZXJuYXRpdmUgaXMgdG8gb3V0cHV0IGNoYXJhY3RlciBzZXF1ZW5jZXMgYXMKKyAgIGNvbW1hIHNlcGFyYXRlZCBsaXN0cyBvZiBudW1iZXJzKS4gICovCisKKyNkZWZpbmUgQVNNX09VVFBVVF9MSU1JVEVEX1NUUklORyhGSUxFLCBTVFIpCQlcCisgIGRvCQkJCQkJCVwKKyAgICB7CQkJCQkJCVwKKyAgICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9saW1pdGVkX3N0ciA9CVwKKwkoY29uc3QgdW5zaWduZWQgY2hhciAqKSAoU1RSKTsJCQlcCisgICAgICByZWdpc3RlciB1bnNpZ25lZCBjaDsJCQkJXAorCQkJCQkJCVwKKyAgICAgIGZwcmludGYgKChGSUxFKSwgIiVzXCIiLCBTVFJJTkdfQVNNX09QKTsJCVwKKwkJCQkJCQlcCisgICAgICBmb3IgKDsgKGNoID0gKl9saW1pdGVkX3N0cik7IF9saW1pdGVkX3N0cisrKQlcCisgICAgICAgIHsJCQkJCQlcCisJICByZWdpc3RlciBpbnQgZXNjYXBlOwkJCQlcCisJCQkJCQkJXAorCSAgc3dpdGNoIChlc2NhcGUgPSBFU0NBUEVTW2NoXSkJCQlcCisJICAgIHsJCQkJCQlcCisJICAgIGNhc2UgMDoJCQkJCVwKKwkgICAgICBwdXRjIChjaCwgKEZJTEUpKTsJCQlcCisJICAgICAgYnJlYWs7CQkJCQlcCisJICAgIGNhc2UgMToJCQkJCVwKKwkgICAgICBmcHJpbnRmICgoRklMRSksICJcXCUwM28iLCBjaCk7CQlcCisJICAgICAgYnJlYWs7CQkJCQlcCisJICAgIGRlZmF1bHQ6CQkJCQlcCisJICAgICAgcHV0YyAoJ1xcJywgKEZJTEUpKTsJCQlcCisJICAgICAgcHV0YyAoZXNjYXBlLCAoRklMRSkpOwkJCVwKKwkgICAgICBicmVhazsJCQkJCVwKKwkgICAgfQkJCQkJCVwKKyAgICAgICAgfQkJCQkJCVwKKwkJCQkJCQlcCisgICAgICBmcHJpbnRmICgoRklMRSksICJcIlxuIik7CQkJCVwKKyAgICB9CQkJCQkJCVwKKyAgd2hpbGUgKDApCisKKy8qIFRoZSByb3V0aW5lIHVzZWQgdG8gb3V0cHV0IHNlcXVlbmNlcyBvZiBieXRlIHZhbHVlcy4gIFdlIHVzZSBhIHNwZWNpYWwKKyAgIHZlcnNpb24gb2YgdGhpcyBmb3IgbW9zdCBzdnI0IHRhcmdldHMgYmVjYXVzZSBkb2luZyBzbyBtYWtlcyB0aGUKKyAgIGdlbmVyYXRlZCBhc3NlbWJseSBjb2RlIG1vcmUgY29tcGFjdCAoYW5kIHRodXMgZmFzdGVyIHRvIGFzc2VtYmxlKQorICAgYXMgd2VsbCBhcyBtb3JlIHJlYWRhYmxlLiAgTm90ZSB0aGF0IGlmIHdlIGZpbmQgc3VicGFydHMgb2YgdGhlCisgICBjaGFyYWN0ZXIgc2VxdWVuY2Ugd2hpY2ggZW5kIHdpdGggTlVMIChhbmQgd2hpY2ggYXJlIHNob3J0ZXIgdGhhbgorICAgU1RSSU5HX0xJTUlUKSB3ZSBvdXRwdXQgdGhvc2UgdXNpbmcgQVNNX09VVFBVVF9MSU1JVEVEX1NUUklORy4gICovCisKKyN1bmRlZiAgQVNNX09VVFBVVF9BU0NJSQorI2RlZmluZSBBU01fT1VUUFVUX0FTQ0lJKEZJTEUsIFNUUiwgTEVOR1RIKQkJCQlcCisgIGRvCQkJCQkJCQkJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpfYXNjaWlfYnl0ZXMgPQkJCQlcCisJKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgKFNUUik7CQkJCQlcCisgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpsaW1pdCA9IF9hc2NpaV9ieXRlcyArIChMRU5HVEgpOwkJXAorICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbGFzdF9udWxsID0gTlVMTDsJCQkJXAorICAgICAgdW5zaWduZWQgYnl0ZXNfaW5fY2h1bmsgPSAwOwkJCQkJXAorCQkJCQkJCQkJXAorICAgICAgZm9yICg7IF9hc2NpaV9ieXRlcyA8IGxpbWl0OyBfYXNjaWlfYnl0ZXMrKykJCQlcCisgICAgICAgIHsJCQkJCQkJCVwKKwkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7CQkJCQlcCisJCQkJCQkJCQlcCisJICBpZiAoYnl0ZXNfaW5fY2h1bmsgPj0gNjApCQkJCQlcCisJICAgIHsJCQkJCQkJCVwKKwkgICAgICBmcHJpbnRmICgoRklMRSksICJcIlxuIik7CQkJCQlcCisJICAgICAgYnl0ZXNfaW5fY2h1bmsgPSAwOwkJCQkJXAorCSAgICB9CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJICBpZiAoX2FzY2lpX2J5dGVzID4gbGFzdF9udWxsKQkJCQkJXAorCSAgICB7CQkJCQkJCQlcCisJICAgICAgZm9yIChwID0gX2FzY2lpX2J5dGVzOyBwIDwgbGltaXQgJiYgKnAgIT0gJ1wwJzsgcCsrKQlcCisJCWNvbnRpbnVlOwkJCQkJCVwKKwkgICAgICBsYXN0X251bGwgPSBwOwkJCQkJCVwKKwkgICAgfQkJCQkJCQkJXAorCSAgZWxzZQkJCQkJCQkJXAorCSAgICBwID0gbGFzdF9udWxsOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwkgIGlmIChwIDwgbGltaXQgJiYgKHAgLSBfYXNjaWlfYnl0ZXMpIDw9IChsb25nKVNUUklOR19MSU1JVCkJXAorCSAgICB7CQkJCQkJCQlcCisJICAgICAgaWYgKGJ5dGVzX2luX2NodW5rID4gMCkJCQkJCVwKKwkJewkJCQkJCQlcCisJCSAgZnByaW50ZiAoKEZJTEUpLCAiXCJcbiIpOwkJCQlcCisJCSAgYnl0ZXNfaW5fY2h1bmsgPSAwOwkJCQkJXAorCQl9CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwkgICAgICBBU01fT1VUUFVUX0xJTUlURURfU1RSSU5HICgoRklMRSksIF9hc2NpaV9ieXRlcyk7CQlcCisJICAgICAgX2FzY2lpX2J5dGVzID0gcDsJCQkJCQlcCisJICAgIH0JCQkJCQkJCVwKKwkgIGVsc2UJCQkJCQkJCVwKKwkgICAgewkJCQkJCQkJXAorCSAgICAgIHJlZ2lzdGVyIGludCBlc2NhcGU7CQkJCQlcCisJICAgICAgcmVnaXN0ZXIgdW5zaWduZWQgY2g7CQkJCQlcCisJCQkJCQkJCQlcCisJICAgICAgaWYgKGJ5dGVzX2luX2NodW5rID09IDApCQkJCQlcCisJCWZwcmludGYgKChGSUxFKSwgIiVzXCIiLCBBU0NJSV9EQVRBX0FTTV9PUCk7CQlcCisJCQkJCQkJCQlcCisJICAgICAgc3dpdGNoIChlc2NhcGUgPSBFU0NBUEVTW2NoID0gKl9hc2NpaV9ieXRlc10pCQlcCisJCXsJCQkJCQkJXAorCQljYXNlIDA6CQkJCQkJCVwKKwkJICBwdXRjIChjaCwgKEZJTEUpKTsJCQkJCVwKKwkJICBieXRlc19pbl9jaHVuaysrOwkJCQkJXAorCQkgIGJyZWFrOwkJCQkJCVwKKwkJY2FzZSAxOgkJCQkJCQlcCisJCSAgZnByaW50ZiAoKEZJTEUpLCAiXFwlMDNvIiwgY2gpOwkJCVwKKwkJICBieXRlc19pbl9jaHVuayArPSA0OwkJCQkJXAorCQkgIGJyZWFrOwkJCQkJCVwKKwkJZGVmYXVsdDoJCQkJCQlcCisJCSAgcHV0YyAoJ1xcJywgKEZJTEUpKTsJCQkJCVwKKwkJICBwdXRjIChlc2NhcGUsIChGSUxFKSk7CQkJCVwKKwkJICBieXRlc19pbl9jaHVuayArPSAyOwkJCQkJXAorCQkgIGJyZWFrOwkJCQkJCVwKKwkJfQkJCQkJCQlcCisJICAgIH0JCQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCisgICAgICBpZiAoYnl0ZXNfaW5fY2h1bmsgPiAwKQkJCQkJCVwKKyAgICAgICAgZnByaW50ZiAoKEZJTEUpLCAiXCJcbiIpOwkJCQkJXAorICAgIH0JCQkJCQkJCQlcCisgIHdoaWxlICgwKQorCisvKiBBbGxvdyB0aGUgdXNlIG9mIHRoZSAtZnJlY29yZC1nY2Mtc3dpdGNoZXMgc3dpdGNoIHZpYSB0aGUKKyAgIGVsZl9yZWNvcmRfZ2NjX3N3aXRjaGVzIGZ1bmN0aW9uIGRlZmluZWQgaW4gdmFyYXNtLmMuICAqLworI3VuZGVmICBUQVJHRVRfQVNNX1JFQ09SRF9HQ0NfU1dJVENIRVMKKyNkZWZpbmUgVEFSR0VUX0FTTV9SRUNPUkRfR0NDX1NXSVRDSEVTIGVsZl9yZWNvcmRfZ2NjX3N3aXRjaGVzCisKKy8qIEEgQyBzdGF0ZW1lbnQgKHNhbnMgc2VtaWNvbG9uKSB0byBvdXRwdXQgdG8gdGhlIHN0ZGlvIHN0cmVhbSBTVFJFQU0KKyAgIGFueSB0ZXh0IG5lY2Vzc2FyeSBmb3IgZGVjbGFyaW5nIHRoZSBuYW1lIG9mIGFuIGV4dGVybmFsIHN5bWJvbAorICAgbmFtZWQgTkFNRSB3aGljaCBpcyByZWZlcmVuY2VkIGluIHRoaXMgY29tcGlsYXRpb24gYnV0IG5vdCBkZWZpbmVkLgorICAgSXQgaXMgbmVlZGVkIHRvIHByb3Blcmx5IHN1cHBvcnQgbm9uLWRlZmF1bHQgdmlzaWJpbGl0eS4gICovCisKKyNpZm5kZWYgQVNNX09VVFBVVF9FWFRFUk5BTAorI2RlZmluZSBBU01fT1VUUFVUX0VYVEVSTkFMKEZJTEUsIERFQ0wsIE5BTUUpIFwKKyAgZGVmYXVsdF9lbGZfYXNtX291dHB1dF9leHRlcm5hbCAoRklMRSwgREVDTCwgTkFNRSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NvbmZpZy9nbGliYy1zdGRpbnQuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvZ2xpYmMtc3RkaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY4ZmUwNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvZ2xpYmMtc3RkaW50LmgKQEAgLTAsMCArMSw1NSBAQAorLyogRGVmaW5pdGlvbnMgZm9yIDxzdGRpbnQuaD4gdHlwZXMgb24gc3lzdGVtcyB1c2luZyBHTlUgbGliYyBvciB1Q2xpYmMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCitwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCiszLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKK2EgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CitzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNkZWZpbmUgU0lHX0FUT01JQ19UWVBFICJpbnQiCisKKyNkZWZpbmUgSU5UOF9UWVBFICJzaWduZWQgY2hhciIKKyNkZWZpbmUgSU5UMTZfVFlQRSAic2hvcnQgaW50IgorI2RlZmluZSBJTlQzMl9UWVBFICJpbnQiCisjZGVmaW5lIElOVDY0X1RZUEUgKExPTkdfVFlQRV9TSVpFID09IDY0ID8gImxvbmcgaW50IiA6ICJsb25nIGxvbmcgaW50IikKKyNkZWZpbmUgVUlOVDhfVFlQRSAidW5zaWduZWQgY2hhciIKKyNkZWZpbmUgVUlOVDE2X1RZUEUgInNob3J0IHVuc2lnbmVkIGludCIKKyNkZWZpbmUgVUlOVDMyX1RZUEUgInVuc2lnbmVkIGludCIKKyNkZWZpbmUgVUlOVDY0X1RZUEUgKExPTkdfVFlQRV9TSVpFID09IDY0ID8gImxvbmcgdW5zaWduZWQgaW50IiA6ICJsb25nIGxvbmcgdW5zaWduZWQgaW50IikKKworI2RlZmluZSBJTlRfTEVBU1Q4X1RZUEUgInNpZ25lZCBjaGFyIgorI2RlZmluZSBJTlRfTEVBU1QxNl9UWVBFICJzaG9ydCBpbnQiCisjZGVmaW5lIElOVF9MRUFTVDMyX1RZUEUgImludCIKKyNkZWZpbmUgSU5UX0xFQVNUNjRfVFlQRSAoTE9OR19UWVBFX1NJWkUgPT0gNjQgPyAibG9uZyBpbnQiIDogImxvbmcgbG9uZyBpbnQiKQorI2RlZmluZSBVSU5UX0xFQVNUOF9UWVBFICJ1bnNpZ25lZCBjaGFyIgorI2RlZmluZSBVSU5UX0xFQVNUMTZfVFlQRSAic2hvcnQgdW5zaWduZWQgaW50IgorI2RlZmluZSBVSU5UX0xFQVNUMzJfVFlQRSAidW5zaWduZWQgaW50IgorI2RlZmluZSBVSU5UX0xFQVNUNjRfVFlQRSAoTE9OR19UWVBFX1NJWkUgPT0gNjQgPyAibG9uZyB1bnNpZ25lZCBpbnQiIDogImxvbmcgbG9uZyB1bnNpZ25lZCBpbnQiKQorCisjZGVmaW5lIElOVF9GQVNUOF9UWVBFICJzaWduZWQgY2hhciIKKyNkZWZpbmUgSU5UX0ZBU1QxNl9UWVBFIChMT05HX1RZUEVfU0laRSA9PSA2NCA/ICJsb25nIGludCIgOiAiaW50IikKKyNkZWZpbmUgSU5UX0ZBU1QzMl9UWVBFIChMT05HX1RZUEVfU0laRSA9PSA2NCA/ICJsb25nIGludCIgOiAiaW50IikKKyNkZWZpbmUgSU5UX0ZBU1Q2NF9UWVBFIChMT05HX1RZUEVfU0laRSA9PSA2NCA/ICJsb25nIGludCIgOiAibG9uZyBsb25nIGludCIpCisjZGVmaW5lIFVJTlRfRkFTVDhfVFlQRSAidW5zaWduZWQgY2hhciIKKyNkZWZpbmUgVUlOVF9GQVNUMTZfVFlQRSAoTE9OR19UWVBFX1NJWkUgPT0gNjQgPyAibG9uZyB1bnNpZ25lZCBpbnQiIDogInVuc2lnbmVkIGludCIpCisjZGVmaW5lIFVJTlRfRkFTVDMyX1RZUEUgKExPTkdfVFlQRV9TSVpFID09IDY0ID8gImxvbmcgdW5zaWduZWQgaW50IiA6ICJ1bnNpZ25lZCBpbnQiKQorI2RlZmluZSBVSU5UX0ZBU1Q2NF9UWVBFIChMT05HX1RZUEVfU0laRSA9PSA2NCA/ICJsb25nIHVuc2lnbmVkIGludCIgOiAibG9uZyBsb25nIHVuc2lnbmVkIGludCIpCisKKyNkZWZpbmUgSU5UUFRSX1RZUEUgKExPTkdfVFlQRV9TSVpFID09IDY0ID8gImxvbmcgaW50IiA6ICJpbnQiKQorI2RlZmluZSBVSU5UUFRSX1RZUEUgKExPTkdfVFlQRV9TSVpFID09IDY0ID8gImxvbmcgdW5zaWduZWQgaW50IiA6ICJ1bnNpZ25lZCBpbnQiKQpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NvbmZpZy9saW51eC5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NvbmZpZy9saW51eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NjdlOWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvY29uZmlnL2xpbnV4LmgKQEAgLTAsMCArMSwxMzcgQEAKKy8qIERlZmluaXRpb25zIGZvciBMaW51eC1iYXNlZCBHTlUgc3lzdGVtcyB3aXRoIEVMRiBmb3JtYXQKKyAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwKKyAgIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBFcmljIFlvdW5nZGFsZS4KKyAgIE1vZGlmaWVkIGZvciBzdGFicy1pbi1FTEYgYnkgSC5KLiBMdSAoaGpsQGx1Y29uLm9yZykuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCitwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCiszLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKK2EgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CitzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIERvbid0IGFzc3VtZSBhbnl0aGluZyBhYm91dCB0aGUgaGVhZGVyIGZpbGVzLiAgKi8KKyNkZWZpbmUgTk9fSU1QTElDSVRfRVhURVJOX0MKKworI3VuZGVmIEFTTV9BUFBfT04KKyNkZWZpbmUgQVNNX0FQUF9PTiAiI0FQUFxuIgorCisjdW5kZWYgQVNNX0FQUF9PRkYKKyNkZWZpbmUgQVNNX0FQUF9PRkYgIiNOT19BUFBcbiIKKworI3VuZGVmIE1EX0VYRUNfUFJFRklYCisjdW5kZWYgTURfU1RBUlRGSUxFX1BSRUZJWAorCisvKiBQcm92aWRlIGEgU1RBUlRGSUxFX1NQRUMgYXBwcm9wcmlhdGUgZm9yIEdOVS9MaW51eC4gIEhlcmUgd2UgYWRkCisgICB0aGUgR05VL0xpbnV4IG1hZ2ljYWwgY3J0YmVnaW4ubyBmaWxlIChzZWUgY3J0c3R1ZmYuYykgd2hpY2gKKyAgIHByb3ZpZGVzIHBhcnQgb2YgdGhlIHN1cHBvcnQgZm9yIGdldHRpbmcgQysrIGZpbGUtc2NvcGUgc3RhdGljCisgICBvYmplY3QgY29uc3RydWN0ZWQgYmVmb3JlIGVudGVyaW5nIGBtYWluJy4gICovCisgICAKKyN1bmRlZglTVEFSVEZJTEVfU1BFQworI2lmIGRlZmluZWQgSEFWRV9MRF9QSUUKKyNkZWZpbmUgU1RBUlRGSUxFX1NQRUMgXAorICAiJXshc2hhcmVkOiAle3BnfHB8cHJvZmlsZTpnY3J0MS5vJXM7cGllOlNjcnQxLm8lczs6Y3J0MS5vJXN9fSBcCisgICBjcnRpLm8lcyAle3N0YXRpYzpjcnRiZWdpblQubyVzO3NoYXJlZHxwaWU6Y3J0YmVnaW5TLm8lczs6Y3J0YmVnaW4ubyVzfSIKKyNlbHNlCisjZGVmaW5lIFNUQVJURklMRV9TUEVDIFwKKyAgIiV7IXNoYXJlZDogJXtwZ3xwfHByb2ZpbGU6Z2NydDEubyVzOzpjcnQxLm8lc319IFwKKyAgIGNydGkubyVzICV7c3RhdGljOmNydGJlZ2luVC5vJXM7c2hhcmVkfHBpZTpjcnRiZWdpblMubyVzOzpjcnRiZWdpbi5vJXN9IgorI2VuZGlmCisKKy8qIFByb3ZpZGUgYSBFTkRGSUxFX1NQRUMgYXBwcm9wcmlhdGUgZm9yIEdOVS9MaW51eC4gIEhlcmUgd2UgdGFjayBvbgorICAgdGhlIEdOVS9MaW51eCBtYWdpY2FsIGNydGVuZC5vIGZpbGUgKHNlZSBjcnRzdHVmZi5jKSB3aGljaAorICAgcHJvdmlkZXMgcGFydCBvZiB0aGUgc3VwcG9ydCBmb3IgZ2V0dGluZyBDKysgZmlsZS1zY29wZSBzdGF0aWMKKyAgIG9iamVjdCBjb25zdHJ1Y3RlZCBiZWZvcmUgZW50ZXJpbmcgYG1haW4nLCBmb2xsb3dlZCBieSBhIG5vcm1hbAorICAgR05VL0xpbnV4ICJmaW5hbGl6ZXIiIGZpbGUsIGBjcnRuLm8nLiAgKi8KKworI3VuZGVmCUVOREZJTEVfU1BFQworI2RlZmluZSBFTkRGSUxFX1NQRUMgXAorICAiJXtzaGFyZWR8cGllOmNydGVuZFMubyVzOzpjcnRlbmQubyVzfSBjcnRuLm8lcyIKKworLyogVGhpcyBpcyBmb3IgLXByb2ZpbGUgdG8gdXNlIC1sY19wIGluc3RlYWQgb2YgLWxjLiAgKi8KKyNpZm5kZWYgQ0MxX1NQRUMKKyNkZWZpbmUgQ0MxX1NQRUMgIiV7cHJvZmlsZTotcH0iCisjZW5kaWYKKworLyogVGhlIEdOVSBDKysgc3RhbmRhcmQgbGlicmFyeSByZXF1aXJlcyB0aGF0IHRoZXNlIG1hY3JvcyBiZSBkZWZpbmVkLiAgKi8KKyN1bmRlZiBDUExVU1BMVVNfQ1BQX1NQRUMKKyNkZWZpbmUgQ1BMVVNQTFVTX0NQUF9TUEVDICItRF9HTlVfU09VUkNFICUoY3BwKSIKKworI3VuZGVmCUxJQl9TUEVDCisjZGVmaW5lIExJQl9TUEVDIFwKKyAgIiV7cHRocmVhZDotbHB0aHJlYWR9IFwKKyAgICV7c2hhcmVkOi1sY30gXAorICAgJXshc2hhcmVkOiV7bWllZWUtZnA6LWxpZWVlfSAle3Byb2ZpbGU6LWxjX3B9JXshcHJvZmlsZTotbGN9fSIKKworI2RlZmluZSBMSU5VWF9UQVJHRVRfT1NfQ1BQX0JVSUxUSU5TKCkJCQkJXAorICAgIGRvIHsJCQkJCQkJXAorCWJ1aWx0aW5fZGVmaW5lICgiX19nbnVfbGludXhfXyIpOwkJCVwKKwlidWlsdGluX2RlZmluZV9zdGQgKCJsaW51eCIpOwkJCQlcCisJYnVpbHRpbl9kZWZpbmVfc3RkICgidW5peCIpOwkJCQlcCisJYnVpbHRpbl9hc3NlcnQgKCJzeXN0ZW09bGludXgiKTsJCQlcCisJYnVpbHRpbl9hc3NlcnQgKCJzeXN0ZW09dW5peCIpOwkJCQlcCisJYnVpbHRpbl9hc3NlcnQgKCJzeXN0ZW09cG9zaXgiKTsJCQlcCisgICAgfSB3aGlsZSAoMCkKKworI2lmIGRlZmluZWQoSEFWRV9MRF9FSF9GUkFNRV9IRFIpCisjZGVmaW5lIExJTktfRUhfU1BFQyAiJXshc3RhdGljOi0tZWgtZnJhbWUtaGRyfSAiCisjZW5kaWYKKworLyogRGVmaW5lIHRoaXMgc28gd2UgY2FuIGNvbXBpbGUgTVMgY29kZSBmb3IgdXNlIHdpdGggV0lORS4gICovCisjZGVmaW5lIEhBTkRMRV9QUkFHTUFfUEFDS19QVVNIX1BPUAorCisjdW5kZWYgTElOS19HQ0NfQ19TRVFVRU5DRV9TUEVDCisjZGVmaW5lIExJTktfR0NDX0NfU0VRVUVOQ0VfU1BFQyBcCisgICIle3N0YXRpYzotLXN0YXJ0LWdyb3VwfSAlRyAlTCAle3N0YXRpYzotLWVuZC1ncm91cH0leyFzdGF0aWM6JUd9IgorCisvKiBVc2UgLS1hcy1uZWVkZWQgLWxnY2NfcyBmb3IgZWggc3VwcG9ydC4gICovCisjaWZkZWYgSEFWRV9MRF9BU19ORUVERUQKKyNkZWZpbmUgVVNFX0xEX0FTX05FRURFRCAxCisjZW5kaWYKKworLyogRGV0ZXJtaW5lIHdoaWNoIGR5bmFtaWMgbGlua2VyIHRvIHVzZSBkZXBlbmRpbmcgb24gd2hldGhlciBHTElCQyBvcgorICAgdUNsaWJjIGlzIHRoZSBkZWZhdWx0IEMgbGlicmFyeSBhbmQgd2hldGhlciAtbXVjbGliYyBvciAtbWdsaWJjIGhhcworICAgYmVlbiBwYXNzZWQgdG8gY2hhbmdlIHRoZSBkZWZhdWx0LiAgKi8KKyNpZiBVQ0xJQkNfREVGQVVMVAorI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSkgIiV7bWdsaWJjOiV7bXVjbGliYzolZS1tZ2xpYmMgYW5kIC1tdWNsaWJjIHVzZWQgdG9nZXRoZXJ9IiBHICI7OiIgVSAifSIKKyNlbHNlCisjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVKSAiJXttdWNsaWJjOiV7bWdsaWJjOiVlLW1nbGliYyBhbmQgLW11Y2xpYmMgdXNlZCB0b2dldGhlcn0iIFUgIjs6IiBHICJ9IgorI2VuZGlmCisKKy8qIEZvciBtb3N0IHRhcmdldHMgdGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBzdWZmaWNlOworICAgR0xJQkNfRFlOQU1JQ19MSU5LRVIgbXVzdCBiZSBkZWZpbmVkIGZvciBlYWNoIHRhcmdldCB1c2luZyB0aGVtLCBvcgorICAgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBhbmQgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBmb3IgdGFyZ2V0cworICAgc3VwcG9ydGluZyBib3RoIDMyLWJpdCBhbmQgNjQtYml0IGNvbXBpbGF0aW9uLiAgKi8KKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLXVDbGliYy5zby4wIgorI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWIvbGQ2NC11Q2xpYmMuc28uMCIKKyNkZWZpbmUgTElOVVhfRFlOQU1JQ19MSU5LRVIgXAorICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIgKEdMSUJDX0RZTkFNSUNfTElOS0VSLCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIpCisjZGVmaW5lIExJTlVYX0RZTkFNSUNfTElOS0VSMzIgXAorICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIgKEdMSUJDX0RZTkFNSUNfTElOS0VSMzIsIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyKQorI2RlZmluZSBMSU5VWF9EWU5BTUlDX0xJTktFUjY0IFwKKyAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSIChHTElCQ19EWU5BTUlDX0xJTktFUjY0LCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCkKKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGVudGlyZSBjOTkgcnVudGltZQorICAgaXMgcHJlc2VudCBpbiB0aGUgcnVudGltZSBsaWJyYXJ5LiAgKi8KKyNkZWZpbmUgVEFSR0VUX0M5OV9GVU5DVElPTlMgKE9QVElPTl9HTElCQykKKworLyogV2hldGhlciB3ZSBoYXZlIHNpbmNvcyB0aGF0IGZvbGxvd3MgdGhlIEdOVSBleHRlbnNpb24uICAqLworI2RlZmluZSBUQVJHRVRfSEFTX1NJTkNPUyAoT1BUSU9OX0dMSUJDKQorCisjZGVmaW5lIFRBUkdFVF9QT1NJWF9JTwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NvbmZpZ2FyZ3MuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jb25maWdhcmdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVkN2I4YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jb25maWdhcmdzLmgKQEAgLTAsMCArMSw3IEBACisvKiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseS4gKi8KK3N0YXRpYyBjb25zdCBjaGFyIGNvbmZpZ3VyYXRpb25fYXJndW1lbnRzW10gPSAiL3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2J1aWxkL2J1aWxkLXRvb2xjaGFpbi8uYnVpbGQvc3JjL2djYy00LjUuMy9jb25maWd1cmUgLS1idWlsZD14ODZfNjQtYnVpbGRfdW5rbm93bi1saW51eC1nbnUgLS1ob3N0PXg4Nl82NC1idWlsZF91bmtub3duLWxpbnV4LWdudSAtLXRhcmdldD1hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpIC0tcHJlZml4PS91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9ob3N0L3VzciAtLXdpdGgtc3lzcm9vdD0vdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3IvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290IC0tZW5hYmxlLWxhbmd1YWdlcz1jLGMrKyAtLWRpc2FibGUtbXVsdGlsaWIgLS13aXRoLWFyY2g9YXJtdjctYSAtLXdpdGgtdHVuZT1jb3J0ZXgtYTkgLS13aXRoLXBrZ3ZlcnNpb249J2Nyb3NzdG9vbC1ORyAxLjEzLjQgLSBidWlsZHJvb3QgMjAxMi4wMi0wMDA2Ni1nNWJiMjYyOScgLS1lbmFibGUtX19jeGFfYXRleGl0IC0tZGlzYWJsZS1saWJtdWRmbGFwIC0tZGlzYWJsZS1saWJnb21wIC0tZGlzYWJsZS1saWJzc3AgLS13aXRoLWdtcD0vdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvYnVpbGQvYnVpbGQtdG9vbGNoYWluLy5idWlsZC9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2J1aWxkL3N0YXRpYyAtLXdpdGgtbXBmcj0vdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvYnVpbGQvYnVpbGQtdG9vbGNoYWluLy5idWlsZC9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpL2J1aWxkL3N0YXRpYyAtLXdpdGgtbXBjPS91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9idWlsZC9idWlsZC10b29sY2hhaW4vLmJ1aWxkL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYnVpbGQvc3RhdGljIC0td2l0aC1wcGw9L3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2J1aWxkL2J1aWxkLXRvb2xjaGFpbi8uYnVpbGQvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9idWlsZC9zdGF0aWMgLS13aXRoLWNsb29nPS91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9idWlsZC9idWlsZC10b29sY2hhaW4vLmJ1aWxkL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvYnVpbGQvc3RhdGljIC0td2l0aC1saWJlbGY9L3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2J1aWxkL2J1aWxkLXRvb2xjaGFpbi8uYnVpbGQvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9idWlsZC9zdGF0aWMgLS13aXRoLWhvc3QtbGlic3RkY3h4PSctc3RhdGljLWxpYmdjYyAtV2wsLUJzdGF0aWMsLWxzdGRjKyssLUJkeW5hbWljIC1sbScgLS1lbmFibGUtdGhyZWFkcz1wb3NpeCAtLWVuYWJsZS10YXJnZXQtb3B0c3BhY2UgLS13aXRoLWxvY2FsLXByZWZpeD0vdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3IvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS9zeXNyb290IC0tZGlzYWJsZS1ubHMgLS1lbmFibGUtYzk5IC0tZW5hYmxlLWxvbmctbG9uZyI7CitzdGF0aWMgY29uc3QgY2hhciB0aHJlYWRfbW9kZWxbXSA9ICJwb3NpeCI7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lLCAqdmFsdWU7Cit9IGNvbmZpZ3VyZV9kZWZhdWx0X29wdGlvbnNbXSA9IHsgeyAiYXJjaCIsICJhcm12Ny1hIiB9LCB7ICJ0dW5lIiwgImNvcnRleC1hOSIgfSB9OwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NvcmV0eXBlcy5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NvcmV0eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiODI2MWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvY29yZXR5cGVzLmgKQEAgLTAsMCArMSwxMjggQEAKKy8qIEdDQyBjb3JlIHR5cGUgZGVjbGFyYXRpb25zLgorICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1VuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCithIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBQcm92aWRlIGZvcndhcmQgZGVjbGFyYXRpb25zIG9mIGNvcmUgdHlwZXMgd2hpY2ggYXJlIHJlZmVycmVkIHRvIGJ5CisgICBtb3N0IG9mIHRoZSBjb21waWxlci4gIFRoaXMgYWxsb3dzIGhlYWRlciBmaWxlcyB0byB1c2UgdGhlc2UgdHlwZXMKKyAgIChlLmcuIGluIGZ1bmN0aW9uIHByb3RvdHlwZXMpIHdpdGhvdXQgY29uY2VybiBmb3Igd2hldGhlciB0aGUgZnVsbAorICAgZGVmaW5pdGlvbnMgYXJlIHZpc2libGUuICBTb21lIG90aGVyIGRlY2xhcmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUKKyAgIHVuaXZlcnNhbGx5IHZpc2libGUgYXJlIGhlcmUsIHRvby4KKworICAgSW4gdGhlIGNvbnRleHQgb2YgdGNvbmZpZy5oLCBtb3N0IG9mIHRoZXNlIGhhdmUgc3BlY2lhbCBkZWZpbml0aW9ucworICAgd2hpY2ggcHJldmVudCB0aGVtIGZyb20gYmVpbmcgdXNlZCBleGNlcHQgaW4gZnVydGhlciB0eXBlCisgICBkZWNsYXJhdGlvbnMuICBUaGlzIGlzIGEga2x1ZGdlOyB0aGUgcmlnaHQgdGhpbmcgaXMgdG8gYXZvaWQKKyAgIGluY2x1ZGluZyB0aGUgInRtLmgiIGhlYWRlciBzZXQgaW4gdGhlIGNvbnRleHQgb2YgdGNvbmZpZy5oLCBidXQKKyAgIHdlJ3JlIG5vdCB0aGVyZSB5ZXQuICAqLworCisjaWZuZGVmIEdDQ19DT1JFVFlQRVNfSAorI2RlZmluZSBHQ0NfQ09SRVRZUEVTX0gKKworI2lmbmRlZiBHVFkKKyNkZWZpbmUgR1RZKHgpICAvKiBub3RoaW5nIC0gbWFya2VyIGZvciBnZW5ndHlwZSAqLworI2VuZGlmCisKKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisKK3N0cnVjdCBiaXRtYXBfaGVhZF9kZWY7Cit0eXBlZGVmIHN0cnVjdCBiaXRtYXBfaGVhZF9kZWYgKmJpdG1hcDsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IGJpdG1hcF9oZWFkX2RlZiAqY29uc3RfYml0bWFwOworc3RydWN0IHJ0eF9kZWY7Cit0eXBlZGVmIHN0cnVjdCBydHhfZGVmICpydHg7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBydHhfZGVmICpjb25zdF9ydHg7CitzdHJ1Y3QgcnR2ZWNfZGVmOwordHlwZWRlZiBzdHJ1Y3QgcnR2ZWNfZGVmICpydHZlYzsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IHJ0dmVjX2RlZiAqY29uc3RfcnR2ZWM7Cit1bmlvbiB0cmVlX25vZGU7Cit0eXBlZGVmIHVuaW9uIHRyZWVfbm9kZSAqdHJlZTsKK3VuaW9uIGdpbXBsZV9zdGF0ZW1lbnRfZDsKK3R5cGVkZWYgdW5pb24gZ2ltcGxlX3N0YXRlbWVudF9kICpnaW1wbGU7Cit0eXBlZGVmIGNvbnN0IHVuaW9uIHRyZWVfbm9kZSAqY29uc3RfdHJlZTsKK3R5cGVkZWYgY29uc3QgdW5pb24gZ2ltcGxlX3N0YXRlbWVudF9kICpjb25zdF9naW1wbGU7Cit1bmlvbiBzZWN0aW9uOwordHlwZWRlZiB1bmlvbiBzZWN0aW9uIHNlY3Rpb247CitzdHJ1Y3QgY2xfdGFyZ2V0X29wdGlvbjsKK3N0cnVjdCBjbF9vcHRpbWl6YXRpb247CitzdHJ1Y3QgZ2ltcGxlX3NlcV9kOwordHlwZWRlZiBzdHJ1Y3QgZ2ltcGxlX3NlcV9kICpnaW1wbGVfc2VxOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgZ2ltcGxlX3NlcV9kICpjb25zdF9naW1wbGVfc2VxOworc3RydWN0IGdpbXBsZV9zZXFfbm9kZV9kOwordHlwZWRlZiBzdHJ1Y3QgZ2ltcGxlX3NlcV9ub2RlX2QgKmdpbXBsZV9zZXFfbm9kZTsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IGdpbXBsZV9zZXFfbm9kZV9kICpjb25zdF9naW1wbGVfc2VxX25vZGU7CisKKy8qIEFkZHJlc3Mgc3BhY2UgbnVtYmVyIGZvciBuYW1lZCBhZGRyZXNzIHNwYWNlIHN1cHBvcnQuICAqLwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIGFkZHJfc3BhY2VfdDsKKworLyogVGhlIHZhbHVlIG9mIGFkZHJfc3BhY2VfdCB0aGF0IHJlcHJlc2VudHMgdGhlIGdlbmVyaWMgYWRkcmVzcyBzcGFjZS4gICovCisjZGVmaW5lIEFERFJfU1BBQ0VfR0VORVJJQyAwCisjZGVmaW5lIEFERFJfU1BBQ0VfR0VORVJJQ19QKEFTKSAoKEFTKSA9PSBBRERSX1NQQUNFX0dFTkVSSUMpCisKKy8qIFRoZSBtYWpvciBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb25zIG9mIEdDQy4gICovCitlbnVtIGlyX3R5cGUgeworICBJUl9HSU1QTEUsCisgIElSX1JUTF9DRkdSVEwsCisgIElSX1JUTF9DRkdMQVlPVVQKK307CisKKy8qIFByb3ZpZGUgZm9yd2FyZCBzdHJ1Y3QgZGVjbGFyYXRpb24gc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGluY2x1ZGUKKyAgIGFsbCBvZiBjcHBsaWIuaCB3aGVuZXZlciBhIHJhbmRvbSBwcm90b3R5cGUgaW5jbHVkZXMgYSBwb2ludGVyLgorICAgTm90ZSB0aGF0IHRoZSBjcHBfcmVhZGVyIGFuZCBjcHBfdG9rZW4gdHlwZWRlZnMgcmVtYWluIHBhcnQgb2YKKyAgIGNwcGxpYi5oLiAgKi8KKworc3RydWN0IGNwcF9yZWFkZXI7CitzdHJ1Y3QgY3BwX3Rva2VuOworCisvKiBUaGUgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgbW9kZWwgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gVkFSX0RFQ0wKKyAgIG9yIFNZTUJPTF9SRUYuICBUaGlzIGlzbid0IHVzZWQgbXVjaCwgYnV0IGJvdGggdHJlZXMgYW5kIFJUTCByZWZlcgorICAgdG8gaXQsIHNvIGl0J3MgaGVyZS4gICovCitlbnVtIHRsc19tb2RlbCB7CisgIFRMU19NT0RFTF9OT05FLAorICBUTFNfTU9ERUxfRU1VTEFURUQsCisgIFRMU19NT0RFTF9SRUFMLAorICBUTFNfTU9ERUxfR0xPQkFMX0RZTkFNSUMgPSBUTFNfTU9ERUxfUkVBTCwKKyAgVExTX01PREVMX0xPQ0FMX0RZTkFNSUMsCisgIFRMU19NT0RFTF9JTklUSUFMX0VYRUMsCisgIFRMU19NT0RFTF9MT0NBTF9FWEVDCit9OworCitzdHJ1Y3QgZWRnZV9kZWY7Cit0eXBlZGVmIHN0cnVjdCBlZGdlX2RlZiAqZWRnZTsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IGVkZ2VfZGVmICpjb25zdF9lZGdlOworc3RydWN0IGJhc2ljX2Jsb2NrX2RlZjsKK3R5cGVkZWYgc3RydWN0IGJhc2ljX2Jsb2NrX2RlZiAqYmFzaWNfYmxvY2s7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBiYXNpY19ibG9ja19kZWYgKmNvbnN0X2Jhc2ljX2Jsb2NrOworI2Vsc2UKKworc3RydWN0IF9kb250X3VzZV9ydHhfaGVyZV87CitzdHJ1Y3QgX2RvbnRfdXNlX3J0dmVjX2hlcmVfOwordW5pb24gX2RvbnRfdXNlX3RyZWVfaGVyZV87CisjZGVmaW5lIHJ0eCBzdHJ1Y3QgX2RvbnRfdXNlX3J0eF9oZXJlXyAqCisjZGVmaW5lIGNvbnN0X3J0eCBzdHJ1Y3QgX2RvbnRfdXNlX3J0eF9oZXJlXyAqCisjZGVmaW5lIHJ0dmVjIHN0cnVjdCBfZG9udF91c2VfcnR2ZWNfaGVyZSAqCisjZGVmaW5lIGNvbnN0X3J0dmVjIHN0cnVjdCBfZG9udF91c2VfcnR2ZWNfaGVyZSAqCisjZGVmaW5lIHRyZWUgdW5pb24gX2RvbnRfdXNlX3RyZWVfaGVyZV8gKgorI2RlZmluZSBjb25zdF90cmVlIHVuaW9uIF9kb250X3VzZV90cmVlX2hlcmVfICoKKworI2VuZGlmCisKKyNlbmRpZiAvKiBjb3JldHlwZXMuaCAqLworCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvY3AvY3AtdHJlZS5kZWYgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvY3AvY3AtdHJlZS5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcxZjk0YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jcC9jcC10cmVlLmRlZgpAQCAtMCwwICsxLDQ1NiBAQAorLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBhbmQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlCisgICBhZGRpdGlvbmFsIHRyZWUgY29kZXMgdXNlZCBpbiB0aGUgR05VIEMrKyBjb21waWxlciAoc2VlIHRyZWUuZGVmCisgICBmb3IgdGhlIHN0YW5kYXJkIGNvZGVzKS4KKyAgIENvcHlyaWdodCAoQykgMTk4NywgMTk4OCwgMTk5MCwgMTk5MywgMTk5NywgMTk5OCwgMjAwMywgMjAwNCwgMjAwNSwKKyAgIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDcKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgSGFja2VkIGJ5IE1pY2hhZWwgVGllbWFubiAodGllbWFubkBjeWdudXMuY29tKQorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworCisvKiBBbiBPRkZTRVRfUkVGIGlzIHVzZWQgaW4gdHdvIHNpdHVhdGlvbnM6CisKKyAgIDEuIEFuIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYEE6Om0nIHdoZXJlIGBBJyBpcyBhIGNsYXNzIGFuZCBgbScgaXMKKyAgICAgIGEgbm9uLXN0YXRpYyBtZW1iZXIuICBJbiB0aGlzIGNhc2UsIG9wZXJhbmQgMCB3aWxsIGJlIGEgVFlQRQorICAgICAgKGNvcnJlc3BvbmRpbmcgdG8gYEEnKSBhbmQgb3BlcmFuZCAxIHdpbGwgYmUgYSBGSUVMRF9ERUNMLAorICAgICAgQkFTRUxJTkssIG9yIFRFTVBMQVRFX0lEX0VYUFIgKGNvcnJlc3BvbmRpbmcgdG8gYG0nKS4KKworICAgICAgVGhlIGV4cHJlc3Npb24gaXMgYSBwb2ludGVyLXRvLW1lbWJlciBpZiBpdHMgYWRkcmVzcyBpcyB0YWtlbiwKKyAgICAgIGJ1dCBzaW1wbHkgZGVub3RlcyBhIG1lbWJlciBvZiB0aGUgb2JqZWN0IGlmIGl0cyBhZGRyZXNzIGlzIG5vdAorICAgICAgdGFrZW4uCisKKyAgICAgIFRoaXMgZm9ybSBpcyBvbmx5IHVzZWQgZHVyaW5nIHRoZSBwYXJzaW5nIHBoYXNlOyBvbmNlIHNlbWFudGljCisgICAgICBhbmFseXNpcyBoYXMgdGFrZW4gcGxhY2UgdGhleSBhcmUgZWxpbWluYXRlZC4KKworICAgMi4gQW4gZXhwcmVzc2lvbiBvZiB0aGUgZm9ybSBgeC4qcCcuICBJbiB0aGlzIGNhc2UsIG9wZXJhbmQgMCB3aWxsCisgICAgICBiZSBhbiBleHByZXNzaW9uIGNvcnJlc3BvbmRpbmcgdG8gYHgnIGFuZCBvcGVyYW5kIDEgd2lsbCBiZSBhbgorICAgICAgZXhwcmVzc2lvbiB3aXRoIHBvaW50ZXItdG8tbWVtYmVyIHR5cGUuICAqLworREVGVFJFRUNPREUgKE9GRlNFVF9SRUYsICJvZmZzZXRfcmVmIiwgdGNjX3JlZmVyZW5jZSwgMikKKworLyogQSBwb2ludGVyLXRvLW1lbWJlciBjb25zdGFudC4gIEZvciBhIHBvaW50ZXItdG8tbWVtYmVyIGNvbnN0YW50CisgICBgWDo6WScgVGhlIFBUUk1FTV9DU1RfQ0xBU1MgaXMgdGhlIFJFQ09SRF9UWVBFIGZvciBgWCcgYW5kIHRoZQorICAgUFRSTUVNX0NTVF9NRU1CRVIgaXMgdGhlIF9ERUNMIGZvciBgWScuICAqLworREVGVFJFRUNPREUgKFBUUk1FTV9DU1QsICJwdHJtZW1fY3N0IiwgdGNjX2NvbnN0YW50LCAwKQorCisvKiBGb3IgTkVXX0VYUFIsIG9wZXJhbmQgMCBpcyB0aGUgcGxhY2VtZW50IGxpc3QuCisgICBPcGVyYW5kIDEgaXMgdGhlIG5ldy1kZWNsYXJhdG9yLgorICAgT3BlcmFuZCAyIGlzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGFycmF5LgorICAgT3BlcmFuZCAzIGlzIHRoZSBpbml0aWFsaXplci4gICovCitERUZUUkVFQ09ERSAoTkVXX0VYUFIsICJud19leHByIiwgdGNjX2V4cHJlc3Npb24sIDQpCitERUZUUkVFQ09ERSAoVkVDX05FV19FWFBSLCAidmVjX253X2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMykKKworLyogRm9yIERFTEVURV9FWFBSLCBvcGVyYW5kIDAgaXMgdGhlIHN0b3JlIHRvIGJlIGRlc3Ryb3llZC4KKyAgIE9wZXJhbmQgMSBpcyB0aGUgdmFsdWUgdG8gcGFzcyB0byB0aGUgZGVzdHJveWluZyBmdW5jdGlvbgorICAgc2F5aW5nIHdoZXRoZXIgdGhlIHN0b3JlIHNob3VsZCBiZSBkZWFsbG9jYXRlZCBhcyB3ZWxsLiAgKi8KK0RFRlRSRUVDT0RFIChERUxFVEVfRVhQUiwgImRsX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMikKK0RFRlRSRUVDT0RFIChWRUNfREVMRVRFX0VYUFIsICJ2ZWNfZGxfZXhwciIsIHRjY19leHByZXNzaW9uLCAyKQorCisvKiBWYWx1ZSBpcyByZWZlcmVuY2UgdG8gcGFydGljdWxhciBvdmVybG9hZGVkIGNsYXNzIG1ldGhvZC4KKyAgIE9wZXJhbmQgMCBpcyB0aGUgY2xhc3MsIG9wZXJhbmQgMSBpcyB0aGUgZmllbGQKKyAgIFRoZSBDT01QTEVYSVRZIGZpZWxkIGhvbGRzIHRoZSBjbGFzcyBsZXZlbCAodXN1YWxseSAwKS4gICovCitERUZUUkVFQ09ERSAoU0NPUEVfUkVGLCAic2NvcGVfcmVmIiwgdGNjX3JlZmVyZW5jZSwgMikKKworLyogV2hlbiBjb21wb3NpbmcgYW4gb2JqZWN0IHdpdGggYSBtZW1iZXIsIHRoaXMgaXMgdGhlIHJlc3VsdC4KKyAgIE9wZXJhbmQgMCBpcyB0aGUgb2JqZWN0LiAgT3BlcmFuZCAxIGlzIHRoZSBtZW1iZXIgKHVzdWFsbHkKKyAgIGEgZGVyZWZlcmVuY2VkIHBvaW50ZXIgdG8gbWVtYmVyKS4gICovCitERUZUUkVFQ09ERSAoTUVNQkVSX1JFRiwgIm1lbWJlcl9yZWYiLCB0Y2NfcmVmZXJlbmNlLCAyKQorCisvKiBUeXBlIGNvbnZlcnNpb24gb3BlcmF0b3IgaW4gQysrLiAgVFJFRV9UWVBFIGlzIHR5cGUgdGhhdCB0aGlzCisgICBvcGVyYXRvciBjb252ZXJ0cyB0by4gIE9wZXJhbmQgaXMgZXhwcmVzc2lvbiB0byBiZSBjb252ZXJ0ZWQuICAqLworREVGVFJFRUNPREUgKFRZUEVfRVhQUiwgInR5cGVfZXhwciIsIHRjY19leHByZXNzaW9uLCAxKQorCisvKiBBR0dSX0lOSVRfRVhQUnMgaGF2ZSBhIHZhcmlhYmx5LXNpemVkIHJlcHJlc2VudGF0aW9uIHNpbWlsYXIgdG8KKyAgIHRoYXQgb2YgQ0FMTF9FWFBScy4gIE9wZXJhbmQgMCBpcyBhbiBJTlRFR0VSX0NTVCBub2RlIGNvbnRhaW5pbmcgdGhlCisgICBvcGVyYW5kIGNvdW50LCBvcGVyYW5kIDEgaXMgdGhlIGZ1bmN0aW9uIHdoaWNoIHBlcmZvcm1zIGluaXRpYWxpemF0aW9uLAorICAgb3BlcmFuZCAyIGlzIHRoZSBzbG90IHdoaWNoIHdhcyBhbGxvY2F0ZWQgZm9yIHRoaXMgZXhwcmVzc2lvbiwgYW5kCisgICB0aGUgcmVtYWluaW5nIG9wZXJhbmRzIGFyZSB0aGUgYXJndW1lbnRzIHRvIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gICovCitERUZUUkVFQ09ERSAoQUdHUl9JTklUX0VYUFIsICJhZ2dyX2luaXRfZXhwciIsIHRjY192bF9leHAsIDMpCisKKy8qIEluaXRpYWxpemF0aW9uIG9mIGFuIGFycmF5IGZyb20gYW5vdGhlciBhcnJheSwgZXhwcmVzc2VkIGF0IGEgaGlnaCBsZXZlbAorICAgc28gdGhhdCBpdCB3b3JrcyB3aXRoIFRBUkdFVF9FWFBSLiAgT3BlcmFuZCAwIGlzIHRoZSB0YXJnZXQsIG9wZXJhbmQgMQorICAgaXMgdGhlIGluaXRpYWxpemVyLiAgKi8KK0RFRlRSRUVDT0RFIChWRUNfSU5JVF9FWFBSLCAidmVjX2luaXRfZXhwciIsIHRjY19leHByZXNzaW9uLCAyKQorCisvKiBBIHRocm93IGV4cHJlc3Npb24uICBvcGVyYW5kIDAgaXMgdGhlIGV4cHJlc3Npb24sIGlmIHRoZXJlIHdhcyBvbmUsCisgICBlbHNlIGl0IGlzIE5VTExfVFJFRS4gICovCitERUZUUkVFQ09ERSAoVEhST1dfRVhQUiwgInRocm93X2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMSkKKworLyogQW4gZW1wdHkgY2xhc3Mgb2JqZWN0LiAgVGhlIFRSRUVfVFlQRSBnaXZlcyB0aGUgY2xhc3MgdHlwZS4gIFdlIHVzZQorICAgdGhlc2UgdG8gYXZvaWQgYWN0dWFsbHkgY3JlYXRpbmcgaW5zdGFuY2VzIG9mIHRoZSBlbXB0eSBjbGFzc2VzLiAgKi8KK0RFRlRSRUVDT0RFIChFTVBUWV9DTEFTU19FWFBSLCAiZW1wdHlfY2xhc3NfZXhwciIsIHRjY19leHByZXNzaW9uLCAwKQorCisvKiBBIHJlZmVyZW5jZSB0byBhIG1lbWJlciBmdW5jdGlvbiBvciBtZW1iZXIgZnVuY3Rpb25zIGZyb20gYSBiYXNlCisgICBjbGFzcy4gIEJBU0VMSU5LX0ZVTkNUSU9OUyBnaXZlcyB0aGUgRlVOQ1RJT05fREVDTCwKKyAgIFRFTVBMQVRFX0RFQ0wsIE9WRVJMT0FELCBvciBURU1QTEFURV9JRF9FWFBSIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisgICBmdW5jdGlvbnMuICBCQVNFTElOS19CSU5GTyBnaXZlcyB0aGUgYmFzZSBmcm9tIHdoaWNoIHRoZSBmdW5jdGlvbnMKKyAgIGNvbWUsIGkuZS4sIHRoZSBiYXNlIHRvIHdoaWNoIHRoZSBgdGhpcycgcG9pbnRlciBtdXN0IGJlIGNvbnZlcnRlZAorICAgYmVmb3JlIHRoZSBmdW5jdGlvbnMgYXJlIGNhbGxlZC4gIEJBU0VMSU5LX0FDQ0VTU19CSU5GTyBnaXZlcyB0aGUKKyAgIGJhc2UgdXNlZCB0byBuYW1lIHRoZSBmdW5jdGlvbnMuCisKKyAgIEEgQkFTRUxJTksgaXMgYW4gZXhwcmVzc2lvbjsgdGhlIFRSRUVfVFlQRSBvZiB0aGUgQkFTRUxJTksgZ2l2ZXMKKyAgIHRoZSB0eXBlIG9mIHRoZSBleHByZXNzaW9uLiAgVGhpcyB0eXBlIGlzIGVpdGhlciBhIEZVTkNUSU9OX1RZUEUsCisgICBNRVRIT0RfVFlQRSwgb3IgYHVua25vd25fdHlwZV9ub2RlJyBpbmRpY2F0aW5nIHRoYXQgdGhlIGZ1bmN0aW9uIGlzCisgICBvdmVybG9hZGVkLiAgKi8KK0RFRlRSRUVDT0RFIChCQVNFTElOSywgImJhc2VsaW5rIiwgdGNjX2V4Y2VwdGlvbmFsLCAwKQorCisvKiBUZW1wbGF0ZSBkZWZpbml0aW9uLiAgVGhlIGZvbGxvd2luZyBmaWVsZHMgaGF2ZSB0aGUgc3BlY2lmaWVkIHVzZXMsCisgICBhbHRob3VnaCB0aGVyZSBhcmUgb3RoZXIgbWFjcm9zIGluIGNwLXRyZWUuaCB0aGF0IHNob3VsZCBiZSB1c2VkIGZvcgorICAgYWNjZXNzaW5nIHRoaXMgZGF0YS4KKwlERUNMX0FSR1VNRU5UUwkJdGVtcGxhdGUgcGFybSB2ZWN0b3IKKwlERUNMX1RFTVBMQVRFX0lORk8gICAgICB0ZW1wbGF0ZSB0ZXh0ICZjCisJREVDTF9WSU5ERVgJCWxpc3Qgb2YgaW5zdGFudGlhdGlvbnMgYWxyZWFkeSBwcm9kdWNlZDsKKwkJCQlvbmx5IGRvbmUgZm9yIGZ1bmN0aW9ucyBzbyBmYXIKKyAgIEZvciBjbGFzcyB0ZW1wbGF0ZToKKwlERUNMX0lOSVRJQUwJCWFzc29jaWF0ZWQgdGVtcGxhdGVzIChtZXRob2RzICZjKQorCURFQ0xfVEVNUExBVEVfUkVTVUxUICAgIG51bGwKKyAgIEZvciBub24tY2xhc3MgdGVtcGxhdGVzOgorCVRSRUVfVFlQRQkJdHlwZSBvZiBvYmplY3QgdG8gYmUgY29uc3RydWN0ZWQKKwlERUNMX1RFTVBMQVRFX1JFU1VMVCAgICBkZWNsIGZvciBvYmplY3QgdG8gYmUgY3JlYXRlZAorCQkJCShlLmcuLCBGVU5DVElPTl9ERUNMIHdpdGggdG1wbCBwYXJtcyB1c2VkKQorICovCitERUZUUkVFQ09ERSAoVEVNUExBVEVfREVDTCwgInRlbXBsYXRlX2RlY2wiLCB0Y2NfZGVjbGFyYXRpb24sIDApCisKKy8qIEluZGV4IGludG8gYSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgbGlzdC4gIFRoZSBURU1QTEFURV9QQVJNX0lEWCBnaXZlcworICAgdGhlIGluZGV4IChmcm9tIDApIG9mIHRoZSBwYXJhbWV0ZXIsIHdoaWxlIHRoZSBURU1QTEFURV9QQVJNX0xFVkVMCisgICBnaXZlcyB0aGUgbGV2ZWwgKGZyb20gMSkgb2YgdGhlIHBhcmFtZXRlci4KKworICAgSGVyZSdzIGFuIGV4YW1wbGU6CisKKyAgIHRlbXBsYXRlIDxjbGFzcyBUPiAvLyBJbmRleCAwLCBMZXZlbCAxLgorICAgc3RydWN0IFMKKyAgIHsKKyAgICAgIHRlbXBsYXRlIDxjbGFzcyBVLCAvLyBJbmRleCAwLCBMZXZlbCAyLgorCQljbGFzcyBWPiAvLyBJbmRleCAxLCBMZXZlbCAyLgorICAgICAgdm9pZCBmKCk7CisgICB9OworCisgICBUaGUgREVTQ0VOREFOVFMgd2lsbCBiZSBhIGNoYWluIG9mIFRFTVBMQVRFX1BBUk1fSU5ERVhzIGRlc2NlbmRlZAorICAgZnJvbSB0aGlzIG9uZS4gIFRoZSBmaXJzdCBkZXNjZW5kYW50IHdpbGwgaGF2ZSB0aGUgc2FtZSBJRFgsIGJ1dAorICAgaXRzIExFVkVMIHdpbGwgYmUgb25lIGxlc3MuICBUaGUgVFJFRV9DSEFJTiBmaWVsZCBpcyB1c2VkIHRvIGNoYWluCisgICB0b2dldGhlciB0aGUgZGVzY2VuZGFudHMuICBUaGUgVEVNUExBVEVfUEFSTV9ERUNMIGlzIHRoZQorICAgZGVjbGFyYXRpb24gb2YgdGhpcyBwYXJhbWV0ZXIsIGVpdGhlciBhIFRZUEVfREVDTCBvciBDT05TVF9ERUNMLgorICAgVGhlIFRFTVBMQVRFX1BBUk1fT1JJR19MRVZFTCBpcyB0aGUgTEVWRUwgb2YgdGhlIG1vc3QgZGlzdGFudAorICAgcGFyZW50LCBpLmUuLCB0aGUgTEVWRUwgdGhhdCB0aGUgcGFyYW1ldGVyIG9yaWdpbmFsbHkgaGFkIHdoZW4gaXQKKyAgIHdhcyBkZWNsYXJlZC4gIEZvciBleGFtcGxlLCBpZiB3ZSBpbnN0YW50aWF0ZSBTPGludD4sIHdlIHdpbGwgaGF2ZToKKworICAgc3RydWN0IFM8aW50PgorICAgeworICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVSwgLy8gSW5kZXggMCwgTGV2ZWwgMSwgT3JpZyBMZXZlbCAyCisJICAgICAgIGNsYXNzIFY+IC8vIEluZGV4IDEsIExldmVsIDEsIE9yaWcgTGV2ZWwgMgorICAgICB2b2lkIGYoKTsKKyAgIH07CisKKyAgIFRoZSBMRVZFTCBpcyB0aGUgbGV2ZWwgb2YgdGhlIHBhcmFtZXRlciB3aGVuIHdlIGFyZSB3b3JyeWluZyBhYm91dAorICAgdGhlIHR5cGVzIG9mIHRoaW5nczsgdGhlIE9SSUdfTEVWRUwgaXMgdGhlIGxldmVsIHdoZW4gd2UgYXJlCisgICB3b3JyeWluZyBhYm91dCBpbnN0YW50aWF0aW5nIHRoaW5ncy4gICovCitERUZUUkVFQ09ERSAoVEVNUExBVEVfUEFSTV9JTkRFWCwgInRlbXBsYXRlX3Bhcm1faW5kZXgiLCB0Y2NfZXhjZXB0aW9uYWwsIDApCisKKy8qIEluZGV4IGludG8gYSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgbGlzdCBmb3IgdGVtcGxhdGUgdGVtcGxhdGUgcGFyYW1ldGVycy4KKyAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSB0eXBlLiAgVGhlIFRZUEVfRklFTERTIHZhbHVlIHdpbGwgYmUgYQorICAgVEVNUExBVEVfUEFSTV9JTkRFWC4KKworICAgSXQgaXMgdXNlZCB3aXRob3V0IHRlbXBsYXRlIGFyZ3VtZW50cyBsaWtlIFRUIGluIEM8VFQ+LAorICAgVEVNUExBVEVfVEVNUExBVEVfUEFSTV9URU1QTEFURV9JTkZPIGlzIE5VTExfVFJFRQorICAgYW5kIFRZUEVfTkFNRSBpcyBhIFRFTVBMQVRFX0RFQ0wuICAqLworREVGVFJFRUNPREUgKFRFTVBMQVRFX1RFTVBMQVRFX1BBUk0sICJ0ZW1wbGF0ZV90ZW1wbGF0ZV9wYXJtIiwgdGNjX3R5cGUsIDApCisKKy8qIFRoZSBvcmRlcmluZyBvZiB0aGUgZm9sbG93aW5nIGNvZGVzIGlzIG9wdGltaXplZCBmb3IgdGhlIGNoZWNraW5nCisgICBtYWNyb3MgaW4gdHJlZS5oLiAgQ2hhbmdpbmcgdGhlIG9yZGVyIHdpbGwgZGVncmFkZSB0aGUgc3BlZWQgb2YgdGhlCisgICBjb21waWxlci4gIFRFTVBMQVRFX1RZUEVfUEFSTSwgVFlQRU5BTUVfVFlQRSwgVFlQRU9GX1RZUEUsCisgICBCT1VORF9URU1QTEFURV9URU1QTEFURV9QQVJNLiAgKi8KKworLyogSW5kZXggaW50byBhIHRlbXBsYXRlIHBhcmFtZXRlciBsaXN0LiAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIHR5cGUuCisgICBUaGUgdHlwZS52YWx1ZXMgZmllbGQgd2lsbCBiZSBhIFRFTVBMQVRFX1BBUk1fSU5ERVguICAqLworREVGVFJFRUNPREUgKFRFTVBMQVRFX1RZUEVfUEFSTSwgInRlbXBsYXRlX3R5cGVfcGFybSIsIHRjY190eXBlLCAwKQorCisvKiBBIHR5cGUgZGVzaWduYXRlZCBieSBgdHlwZW5hbWUgVDo6dCcuICBUWVBFX0NPTlRFWFQgaXMgYFQnLAorICAgVFlQRV9OQU1FIGlzIGFuIElERU5USUZJRVJfTk9ERSBmb3IgYHQnLiAgSWYgdGhlIHR5cGUgd2FzIG5hbWVkIHZpYQorICAgdGVtcGxhdGUtaWQsIFRZUEVOQU1FX1RZUEVfRlVMTE5BTUUgd2lsbCBob2xkIHRoZSBURU1QTEFURV9JRF9FWFBSLgorICAgVFJFRV9UWVBFIGlzIGFsd2F5cyBOVUxMLiAgKi8KK0RFRlRSRUVDT0RFIChUWVBFTkFNRV9UWVBFLCAidHlwZW5hbWVfdHlwZSIsIHRjY190eXBlLCAwKQorCisvKiBBIHR5cGUgZGVzaWduYXRlZCBieSBgX190eXBlb2YgKGV4cHIpJy4gIFRZUEVPRl9UWVBFX0VYUFIgaXMgdGhlCisgICBleHByZXNzaW9uIGluIHF1ZXN0aW9uLiAgKi8KK0RFRlRSRUVDT0RFIChUWVBFT0ZfVFlQRSwgInR5cGVvZl90eXBlIiwgdGNjX3R5cGUsIDApCisKKy8qIExpa2UgVEVNUExBVEVfVEVNUExBVEVfUEFSTSBpdCBpcyB1c2VkIHdpdGggYm91bmQgdGVtcGxhdGUgYXJndW1lbnRzCisgICBsaWtlIFRUPGludD4uCisgICBJbiB0aGlzIGNhc2UsIFRFTVBMQVRFX1RFTVBMQVRFX1BBUk1fVEVNUExBVEVfSU5GTyBjb250YWlucyB0aGUKKyAgIHRlbXBsYXRlIG5hbWUgYW5kIGl0cyBib3VuZCBhcmd1bWVudHMuICBUWVBFX05BTUUgaXMgYSBUWVBFX0RFQ0wuICAqLworREVGVFJFRUNPREUgKEJPVU5EX1RFTVBMQVRFX1RFTVBMQVRFX1BBUk0sICJib3VuZF90ZW1wbGF0ZV90ZW1wbGF0ZV9wYXJtIiwKKwkgICAgIHRjY190eXBlLCAwKQorCisvKiBGb3IgdGVtcGxhdGUgdGVtcGxhdGUgYXJndW1lbnQgb2YgdGhlIGZvcm0gYFQ6OnRlbXBsYXRlIEMnLgorICAgVFlQRV9DT05URVhUIGlzIGBUJywgdGhlIHRlbXBsYXRlIHBhcmFtZXRlciBkZXBlbmRlbnQgb2JqZWN0LgorICAgVFlQRV9OQU1FIGlzIGFuIElERU5USUZJRVJfTk9ERSBmb3IgYEMnLCB0aGUgbWVtYmVyIGNsYXNzIHRlbXBsYXRlLiAgKi8KK0RFRlRSRUVDT0RFIChVTkJPVU5EX0NMQVNTX1RFTVBMQVRFLCAidW5ib3VuZF9jbGFzc190ZW1wbGF0ZSIsIHRjY190eXBlLCAwKQorCisvKiBBIHVzaW5nIGRlY2xhcmF0aW9uLiAgVVNJTkdfREVDTF9TQ09QRSBjb250YWlucyB0aGUgc3BlY2lmaWVkCisgICBzY29wZS4gIEluIGEgbWVtYmVyIHVzaW5nIGRlY2wsIHVubGVzcyBERUNMX0RFUEVOREVOVF9QIGlzIHRydWUsCisgICBVU0lOR19ERUNMX0RFQ0xTIGNvbnRhaW5zIHRoZSBfREVDTCBvciBPVkVSTE9BRCBzbyBuYW1lZC4gIFRoaXMgaXMKKyAgIG5vdCBhbiBhbGlhcywgYnV0IGlzIGxhdGVyIGV4cGFuZGVkIGludG8gbXVsdGlwbGUgYWxpYXNlcy4gICovCitERUZUUkVFQ09ERSAoVVNJTkdfREVDTCwgInVzaW5nX2RlY2wiLCB0Y2NfZGVjbGFyYXRpb24sIDApCisKKy8qIEEgdXNpbmcgZGlyZWN0aXZlLiBUaGUgb3BlcmFuZCBpcyBVU0lOR19TVE1UX05BTUVTUEFDRS4gICovCitERUZUUkVFQ09ERSAoVVNJTkdfU1RNVCwgInVzaW5nX2RpcmVjdGl2ZSIsIHRjY19zdGF0ZW1lbnQsIDEpCisKKy8qIEFuIHVuLXBhcnNlZCBkZWZhdWx0IGFyZ3VtZW50LiAgSG9sZHMgYSB2ZWN0b3Igb2YgaW5wdXQgdG9rZW5zIGFuZAorICAgYSB2ZWN0b3Igb2YgcGxhY2VzIHdoZXJlIHRoZSBhcmd1bWVudCB3YXMgaW5zdGFudGlhdGVkIGJlZm9yZQorICAgcGFyc2luZyBoYWQgb2NjdXJyZWQuICAqLworREVGVFJFRUNPREUgKERFRkFVTFRfQVJHLCAiZGVmYXVsdF9hcmciLCB0Y2NfZXhjZXB0aW9uYWwsIDApCisKKy8qIEEgdGVtcGxhdGUtaWQsIGxpa2UgZm9vPGludD4uICBUaGUgZmlyc3Qgb3BlcmFuZCBpcyB0aGUgdGVtcGxhdGUuCisgICBUaGUgc2Vjb25kIGlzIE5VTEwgaWYgdGhlcmUgYXJlIG5vIGV4cGxpY2l0IGFyZ3VtZW50cywgb3IgYQorICAgVFJFRV9WRUMgb2YgYXJndW1lbnRzLiAgVGhlIHRlbXBsYXRlIHdpbGwgYmUgYSBGVU5DVElPTl9ERUNMLAorICAgVEVNUExBVEVfREVDTCwgb3IgYW4gT1ZFUkxPQUQuICBJZiB0aGUgdGVtcGxhdGUtaWQgcmVmZXJzIHRvIGEKKyAgIG1lbWJlciB0ZW1wbGF0ZSwgdGhlIHRlbXBsYXRlIG1heSBiZSBhbiBJREVOVElGSUVSX05PREUuICAqLworREVGVFJFRUNPREUgKFRFTVBMQVRFX0lEX0VYUFIsICJ0ZW1wbGF0ZV9pZF9leHByIiwgdGNjX2V4cHJlc3Npb24sIDIpCisKKy8qIEEgbGlzdC1saWtlIG5vZGUgZm9yIGNoYWluaW5nIG92ZXJsb2FkaW5nIGNhbmRpZGF0ZXMuIFRSRUVfVFlQRSBpcworICAgdGhlIG9yaWdpbmFsIG5hbWUsIGFuZCB0aGUgcGFyYW1ldGVyIGlzIHRoZSBGVU5DVElPTl9ERUNMLiAgKi8KK0RFRlRSRUVDT0RFIChPVkVSTE9BRCwgIm92ZXJsb2FkIiwgdGNjX2V4Y2VwdGlvbmFsLCAwKQorCisvKiBBIHBzZXVkby1kZXN0cnVjdG9yLCBvZiB0aGUgZm9ybSAiT0JKRUNULn5ERVNUUlVDVE9SIiBvcgorICAgIk9CSkVDVC5TQ09QRTo6fkRFU1RSVUNUT1IuICBUaGUgZmlyc3Qgb3BlcmFuZCBpcyB0aGUgT0JKRUNULiAgVGhlCisgICBzZWNvbmQgb3BlcmFuZCAoaWYgbm9uLU5VTEwpIGlzIHRoZSBTQ09QRS4gIFRoZSB0aGlyZCBvcGVyYW5kIGlzCisgICB0aGUgVFlQRSBub2RlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIERFU1RSVUNUT1IuICBUaGUgdHlwZSBvZiB0aGUKKyAgIGZpcnN0IG9wZXJhbmQgd2lsbCBhbHdheXMgYmUgYSBzY2FsYXIgdHlwZS4KKworICAgVGhlIHR5cGUgb2YgYSBQU0VVRE9fRFRPUl9FWFBSIGlzIGFsd2F5cyAidm9pZCIsIGV2ZW4gdGhvdWdoIGl0IGNhbgorICAgYmUgdXNlZCBhcyBpZiBpdCB3ZXJlIGEgemVyby1hcmd1bWVudCBmdW5jdGlvbi4gIFdlIGhhbmRsZSB0aGUKKyAgIGZ1bmN0aW9uLWNhbGwgY2FzZSBzcGVjaWFsbHksIGFuZCBnaXZpbmcgaXQgInZvaWQiIHR5cGUgcHJldmVudHMgaXQKKyAgIGJlaW5nIHVzZWQgaW4gZXhwcmVzc2lvbnMgaW4gd2F5cyB0aGF0IGFyZSBub3QgcGVybWl0dGVkLiAgKi8KK0RFRlRSRUVDT0RFIChQU0VVRE9fRFRPUl9FWFBSLCAicHNldWRvX2R0b3JfZXhwciIsIHRjY19leHByZXNzaW9uLCAzKQorCisvKiBBIHdob2xlIGJ1bmNoIG9mIHRyZWUgY29kZXMgZm9yIHRoZSBpbml0aWFsLCBzdXBlcmZpY2lhbCBwYXJzaW5nIG9mCisgICB0ZW1wbGF0ZXMuICAqLworREVGVFJFRUNPREUgKE1PRE9QX0VYUFIsICJtb2RvcF9leHByIiwgdGNjX2V4cHJlc3Npb24sIDMpCitERUZUUkVFQ09ERSAoQ0FTVF9FWFBSLCAiY2FzdF9leHByIiwgdGNjX3VuYXJ5LCAxKQorREVGVFJFRUNPREUgKFJFSU5URVJQUkVUX0NBU1RfRVhQUiwgInJlaW50ZXJwcmV0X2Nhc3RfZXhwciIsIHRjY191bmFyeSwgMSkKK0RFRlRSRUVDT0RFIChDT05TVF9DQVNUX0VYUFIsICJjb25zdF9jYXN0X2V4cHIiLCB0Y2NfdW5hcnksIDEpCitERUZUUkVFQ09ERSAoU1RBVElDX0NBU1RfRVhQUiwgInN0YXRpY19jYXN0X2V4cHIiLCB0Y2NfdW5hcnksIDEpCitERUZUUkVFQ09ERSAoRFlOQU1JQ19DQVNUX0VYUFIsICJkeW5hbWljX2Nhc3RfZXhwciIsIHRjY191bmFyeSwgMSkKK0RFRlRSRUVDT0RFIChET1RTVEFSX0VYUFIsICJkb3RzdGFyX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMikKK0RFRlRSRUVDT0RFIChUWVBFSURfRVhQUiwgInR5cGVpZF9leHByIiwgdGNjX2V4cHJlc3Npb24sIDEpCisKKy8qIEEgcGxhY2Vob2xkZXIgZm9yIGFuIGV4cHJlc3Npb24gdGhhdCBpcyBub3QgdHlwZS1kZXBlbmRlbnQsIGJ1dAorICAgZG9lcyBvY2N1ciBpbiBhIHRlbXBsYXRlLiAgV2hlbiBhbiBleHByZXNzaW9uIHRoYXQgaXMgbm90CisgICB0eXBlLWRlcGVuZGVudCBhcHBlYXJzIGluIGEgbGFyZ2VyIGV4cHJlc3Npb24sIHdlIG11c3QgY29tcHV0ZSB0aGUKKyAgIHR5cGUgb2YgdGhhdCBsYXJnZXIgZXhwcmVzc2lvbi4gIFRoYXQgY29tcHV0YXRpb24gd291bGQgbm9ybWFsbHkKKyAgIG1vZGlmeSB0aGUgb3JpZ2luYWwgZXhwcmVzc2lvbiwgd2hpY2ggd291bGQgY2hhbmdlIHRoZSBtYW5nbGluZyBvZgorICAgdGhhdCBleHByZXNzaW9uIGlmIGl0IGFwcGVhcmVkIGluIGEgdGVtcGxhdGUgYXJndW1lbnQgbGlzdC4gIEluCisgICB0aGF0IHNpdHVhdGlvbiwgd2UgY3JlYXRlIGEgTk9OX0RFUEVOREVOVF9FWFBSIHRvIHRha2UgdGhlIHBsYWNlIG9mCisgICB0aGUgb3JpZ2luYWwgZXhwcmVzc2lvbi4gIFRoZSBleHByZXNzaW9uIGlzIHRoZSBvbmx5IG9wZXJhbmQgLS0gaXQKKyAgIGlzIG9ubHkgbmVlZGVkIGZvciBkaWFnbm9zdGljcy4gICovCitERUZUUkVFQ09ERSAoTk9OX0RFUEVOREVOVF9FWFBSLCAibm9uX2RlcGVuZGVudF9leHByIiwgdGNjX2V4cHJlc3Npb24sIDEpCisKKy8qIENUT1JfSU5JVElBTElaRVIgaXMgYSBwbGFjZWhvbGRlciBpbiB0ZW1wbGF0ZSBjb2RlIGZvciBhIGNhbGwgdG8KKyAgIHNldHVwX3Z0YmxfcG9pbnRlciAoYW5kIGFwcGVhcnMgaW4gYWxsIGZ1bmN0aW9ucywgbm90IGp1c3QgY3RvcnMpLiAgKi8KK0RFRlRSRUVDT0RFIChDVE9SX0lOSVRJQUxJWkVSLCAiY3Rvcl9pbml0aWFsaXplciIsIHRjY19leHByZXNzaW9uLCAxKQorCitERUZUUkVFQ09ERSAoVFJZX0JMT0NLLCAidHJ5X2Jsb2NrIiwgdGNjX3N0YXRlbWVudCwgMikKKworREVGVFJFRUNPREUgKEVIX1NQRUNfQkxPQ0ssICJlaF9zcGVjX2Jsb2NrIiwgdGNjX3N0YXRlbWVudCwgMikKKworLyogQSBIQU5ETEVSIHdyYXBzIGEgY2F0Y2ggaGFuZGxlciBmb3IgdGhlIEhBTkRMRVJfVFlQRS4gIElmIHRoaXMgaXMKKyAgIENBVENIX0FMTF9UWVBFLCB0aGVuIHRoZSBoYW5kbGVyIGNhdGNoZXMgYWxsIHR5cGVzLiAgVGhlIGRlY2xhcmF0aW9uIG9mCisgICB0aGUgY2F0Y2ggdmFyaWFibGUgaXMgaW4gSEFORExFUl9QQVJNUywgYW5kIHRoZSBib2R5IGJsb2NrIGluCisgICBIQU5ETEVSX0JPRFkuICAqLworREVGVFJFRUNPREUgKEhBTkRMRVIsICJoYW5kbGVyIiwgdGNjX3N0YXRlbWVudCwgMikKKworLyogQSBNVVNUX05PVF9USFJPV19FWFBSIHdyYXBzIGFuIGV4cHJlc3Npb24gdGhhdCBtYXkgbm90CisgICB0aHJvdywgYW5kIG11c3QgY2FsbCB0ZXJtaW5hdGUgaWYgaXQgZG9lcy4gICovCitERUZUUkVFQ09ERSAoTVVTVF9OT1RfVEhST1dfRVhQUiwgIm11c3Rfbm90X3Rocm93X2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMSkKKworLyogQSBDTEVBTlVQX1NUTVQgbWFya3MgdGhlIHBvaW50IGF0IHdoaWNoIGEgZGVjbGFyYXRpb24gaXMgZnVsbHkKKyAgIGNvbnN0cnVjdGVkLiAgVGhlIENMRUFOVVBfRVhQUiBpcyBydW4gb24gYmVoYWxmIG9mIENMRUFOVVBfREVDTAorICAgd2hlbiBDTEVBTlVQX0JPRFkgY29tcGxldGVzLiAgKi8KK0RFRlRSRUVDT0RFIChDTEVBTlVQX1NUTVQsICJjbGVhbnVwX3N0bXQiLCB0Y2Nfc3RhdGVtZW50LCAzKQorCisvKiBSZXByZXNlbnRzIGFuICdpZicgc3RhdGVtZW50LiBUaGUgb3BlcmFuZHMgYXJlIElGX0NPTkQsCisgICBUSEVOX0NMQVVTRSwgYW5kIEVMU0VfQ0xBVVNFLCByZXNwZWN0aXZlbHkuICAqLworLyogPz8/IEl0IGlzIGN1cnJlbnRseSBzdGlsbCBuZWNlc3NhcnkgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBJRl9TVE1UCisgICBhbmQgQ09ORF9FWFBSIGZvciB0aGUgYmVuZWZpdCBvZiB0ZW1wbGF0ZXMuICAqLworREVGVFJFRUNPREUgKElGX1NUTVQsICJpZl9zdG10IiwgdGNjX3N0YXRlbWVudCwgMykKKworLyogVXNlZCB0byByZXByZXNlbnQgYSBgZm9yJyBzdGF0ZW1lbnQuIFRoZSBvcGVyYW5kcyBhcmUKKyAgIEZPUl9JTklUX1NUTVQsIEZPUl9DT05ELCBGT1JfRVhQUiwgYW5kIEZPUl9CT0RZLCByZXNwZWN0aXZlbHkuICAqLworREVGVFJFRUNPREUgKEZPUl9TVE1ULCAiZm9yX3N0bXQiLCB0Y2Nfc3RhdGVtZW50LCA0KQorCisvKiBVc2VkIHRvIHJlcHJlc2VudCBhICd3aGlsZScgc3RhdGVtZW50LiBUaGUgb3BlcmFuZHMgYXJlIFdISUxFX0NPTkQKKyAgIGFuZCBXSElMRV9CT0RZLCByZXNwZWN0aXZlbHkuICAqLworREVGVFJFRUNPREUgKFdISUxFX1NUTVQsICJ3aGlsZV9zdG10IiwgdGNjX3N0YXRlbWVudCwgMikKKworLyogVXNlZCB0byByZXByZXNlbnQgYSAnZG8nIHN0YXRlbWVudC4gVGhlIG9wZXJhbmRzIGFyZSBET19CT0RZIGFuZAorICAgRE9fQ09ORCwgcmVzcGVjdGl2ZWx5LiAgKi8KK0RFRlRSRUVDT0RFIChET19TVE1ULCAiZG9fc3RtdCIsIHRjY19zdGF0ZW1lbnQsIDIpCisKKy8qIFVzZWQgdG8gcmVwcmVzZW50IGEgJ2JyZWFrJyBzdGF0ZW1lbnQuICAqLworREVGVFJFRUNPREUgKEJSRUFLX1NUTVQsICJicmVha19zdG10IiwgdGNjX3N0YXRlbWVudCwgMCkKKworLyogVXNlZCB0byByZXByZXNlbnQgYSAnY29udGludWUnIHN0YXRlbWVudC4gICovCitERUZUUkVFQ09ERSAoQ09OVElOVUVfU1RNVCwgImNvbnRpbnVlX3N0bXQiLCB0Y2Nfc3RhdGVtZW50LCAwKQorCisvKiBVc2VkIHRvIHJlcHJlc2VudCBhICdzd2l0Y2gnIHN0YXRlbWVudC4gVGhlIG9wZXJhbmRzIGFyZQorICAgU1dJVENIX1NUTVRfQ09ORCwgU1dJVENIX1NUTVRfQk9EWSBhbmQgU1dJVENIX1NUTVRfVFlQRSwgcmVzcGVjdGl2ZWx5LiAgKi8KK0RFRlRSRUVDT0RFIChTV0lUQ0hfU1RNVCwgInN3aXRjaF9zdG10IiwgdGNjX3N0YXRlbWVudCwgMykKKworLyogVXNlZCB0byByZXByZXNlbnQgYW4gZXhwcmVzc2lvbiBzdGF0ZW1lbnQuICBVc2UgYEVYUFJfU1RNVF9FWFBSJyB0bworICAgb2J0YWluIHRoZSBleHByZXNzaW9uLiAgKi8KK0RFRlRSRUVDT0RFIChFWFBSX1NUTVQsICJleHByX3N0bXQiLCB0Y2NfZXhwcmVzc2lvbiwgMSkKKworREVGVFJFRUNPREUgKFRBR19ERUZOLCAidGFnX2RlZm4iLCB0Y2NfZXhwcmVzc2lvbiwgMCkKKworLyogUmVwcmVzZW50cyBhbiAnb2Zmc2V0b2YnIGV4cHJlc3Npb24gZHVyaW5nIHRlbXBsYXRlIGV4cGFuc2lvbi4gICovCitERUZUUkVFQ09ERSAoT0ZGU0VUT0ZfRVhQUiwgIm9mZnNldG9mX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMSkKKworLyogUmVwcmVzZW50cyBhICdzaXplb2YnIGV4cHJlc3Npb24gZHVyaW5nIHRlbXBsYXRlIGV4cGFuc2lvbi4gICovCitERUZUUkVFQ09ERSAoU0laRU9GX0VYUFIsICJzaXplb2ZfZXhwciIsIHRjY19leHByZXNzaW9uLCAxKQorCisvKiBSZXByZXNlbnRzIHRoZSAtPiBvcGVyYXRvciBkdXJpbmcgdGVtcGxhdGUgZXhwYW5zaW9uLiAgKi8KK0RFRlRSRUVDT0RFIChBUlJPV19FWFBSLCAiYXJyb3dfZXhwciIsIHRjY19leHByZXNzaW9uLCAxKQorCisvKiBSZXByZXNlbnRzIGFuICdfX2FsaWdub2ZfXycgZXhwcmVzc2lvbiBkdXJpbmcgdGVtcGxhdGUKKyAgIGV4cGFuc2lvbi4gICovCitERUZUUkVFQ09ERSAoQUxJR05PRl9FWFBSLCAiYWxpZ25vZl9leHByIiwgdGNjX2V4cHJlc3Npb24sIDEpCisKKy8qIEEgU1RNVF9FWFBSIHJlcHJlc2VudHMgYSBzdGF0ZW1lbnQtZXhwcmVzc2lvbiBkdXJpbmcgdGVtcGxhdGUKKyAgIGV4cGFuc2lvbi4gIFRoaXMgaXMgdGhlIEdDQyBleHRlbnNpb24geyAoIC4uLiApIH0uICBUaGUKKyAgIFNUTVRfRVhQUl9TVE1UIGlzIHRoZSBzdGF0ZW1lbnQgZ2l2ZW4gYnkgdGhlIGV4cHJlc3Npb24uICAqLworREVGVFJFRUNPREUgKFNUTVRfRVhQUiwgInN0bXRfZXhwciIsIHRjY19leHByZXNzaW9uLCAxKQorCisvKiBVbmFyeSBwbHVzLiBPcGVyYW5kIDAgaXMgdGhlIGV4cHJlc3Npb24gdG8gd2hpY2ggdGhlIHVuYXJ5IHBsdXMKKyAgIGlzIGFwcGxpZWQuICAqLworREVGVFJFRUNPREUgKFVOQVJZX1BMVVNfRVhQUiwgInVuYXJ5X3BsdXNfZXhwciIsIHRjY191bmFyeSwgMSkKKworLyoqIEMrKzB4IGV4dGVuc2lvbnMuICovCisKKy8qIEEgc3RhdGljIGFzc2VydGlvbi4gIFRoaXMgaXMgYSBDKysweCBleHRlbnNpb24uCisgICBTVEFUSUNfQVNTRVJUX0NPTkRJVElPTiBjb250YWlucyB0aGUgY29uZGl0aW9uIHRoYXQgaXMgYmVpbmcKKyAgIGNoZWNrZWQuICBTVEFUSUNfQVNTRVJUX01FU1NBR0UgY29udGFpbnMgdGhlIG1lc3NhZ2UgKGEgc3RyaW5nCisgICBsaXRlcmFsKSB0byBiZSBkaXNwbGF5ZWQgaWYgdGhlIGNvbmRpdGlvbiBmYWlscyB0byBob2xkLiAgKi8KK0RFRlRSRUVDT0RFIChTVEFUSUNfQVNTRVJULCAic3RhdGljX2Fzc2VydCIsIHRjY19leGNlcHRpb25hbCwgMCkKKworLyogUmVwcmVzZW50cyBhbiBhcmd1bWVudCBwYWNrIG9mIHR5cGVzIChvciB0ZW1wbGF0ZXMpLiBBbiBhcmd1bWVudAorICAgcGFjayBzdG9yZXMgemVybyBvciBtb3JlIGFyZ3VtZW50cyB0aGF0IHdpbGwgYmUgdXNlZCB0byBpbnN0YW50aWF0ZQorICAgYSBwYXJhbWV0ZXIgcGFjay4gCisKKyAgIEFSR1VNRU5UX1BBQ0tfQVJHUyByZXRyaWV2ZXMgdGhlIGFyZ3VtZW50cyBzdG9yZWQgaW4gdGhlIGFyZ3VtZW50CisgICBwYWNrLgorCisgICBFeGFtcGxlOgorICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBWYWx1ZXM+CisgICAgIGNsYXNzIHR1cGxlIHsgLi4uIH07CisKKyAgICAgdHVwbGU8aW50LCBmbG9hdCwgZG91YmxlPiB0OworCisgICBWYWx1ZXMgaXMgYSAodGVtcGxhdGUpIHBhcmFtZXRlciBwYWNrLiBXaGVuIHR1cGxlPGludCwgZmxvYXQsCisgICBkb3VibGU+IGlzIGluc3RhbnRpYXRlZCwgdGhlIFZhbHVlcyBwYXJhbWV0ZXIgcGFjayBpcyBpbnN0YW50aWF0ZWQKKyAgIHdpdGggdGhlIGFyZ3VtZW50IHBhY2sgPGludCwgZmxvYXQsIGRvdWJsZT4uIEFSR1VNRU5UX1BBQ0tfQVJHUyB3aWxsCisgICBiZSBhIFRSRUVfVkVDIGNvbnRhaW5pbmcgaW50LCBmbG9hdCwgYW5kIGRvdWJsZS4gICovCitERUZUUkVFQ09ERSAoVFlQRV9BUkdVTUVOVF9QQUNLLCAidHlwZV9hcmd1bWVudF9wYWNrIiwgdGNjX3R5cGUsIDApCisKKy8qIFJlcHJlc2VudHMgYW4gYXJndW1lbnQgcGFjayBvZiB2YWx1ZXMsIHdoaWNoIGNhbiBiZSB1c2VkIGVpdGhlciBmb3IKKyAgIG5vbi10eXBlIHRlbXBsYXRlIGFyZ3VtZW50cyBvciBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50cy4gCisKKyAgIE5PTlRZUEVfQVJHVU1FTlRfUEFDSyBwbGF5cyBwcmVjaXNlbHkgdGhlIHNhbWUgcm9sZSBhcworICAgVFlQRV9BUkdVTUVOVF9QQUNLLCBidXQgd2lsbCBiZSB1c2VkIGZvciBwYWNraW5nIG5vbi10eXBlIHRlbXBsYXRlCisgICBhcmd1bWVudHMgKGUuZy4sICJpbnQuLi4gRGltZW5zaW9ucyIpIG9yIGZ1bmN0aW9uIGFyZ3VtZW50cyAoImNvbnN0CisgICBBcmdzJi4uLiBhcmdzIikuICovCitERUZUUkVFQ09ERSAoTk9OVFlQRV9BUkdVTUVOVF9QQUNLLCAibm9udHlwZV9hcmd1bWVudF9wYWNrIiwgdGNjX2V4cHJlc3Npb24sIDEpCisKKy8qIFJlcHJlc2VudHMgYSB0eXBlIGV4cHJlc3Npb24gdGhhdCB3aWxsIGJlIGV4cGFuZGVkIGludG8gYSBsaXN0IG9mCisgICB0eXBlcyB3aGVuIGluc3RhbnRpYXRlZCB3aXRoIG9uZSBvciBtb3JlIGFyZ3VtZW50IHBhY2tzLgorCisgICBQQUNLX0VYUEFOU0lPTl9QQVRURVJOIHJldHJpZXZlcyB0aGUgZXhwYW5zaW9uIHBhdHRlcm4uIFRoaXMgaXMKKyAgIHRoZSB0eXBlIG9yIGV4cHJlc3Npb24gdGhhdCB3ZSB3aWxsIHN1YnN0aXR1dGUgaW50byB3aXRoIGVhY2gKKyAgIGFyZ3VtZW50IGluIGFuIGFyZ3VtZW50IHBhY2suCisKKyAgIFNFVF9QQUNLX0VYUEFOU0lPTl9QQVRURVJOIHNldHMgdGhlIGV4cGFuc2lvbiBwYXR0ZXJuLgorCisgICBQQUNLX0VYUEFOU0lPTl9QQVJBTUVURVJfUEFDS1MgY29udGFpbnMgYSBUUkVFX0xJU1Qgb2YgdGhlIHBhcmFtZXRlcgorICAgcGFja3MgdGhhdCBhcmUgdXNlZCBpbiB0aGlzIHBhY2sgZXhwYW5zaW9uLgorCisgICBFeGFtcGxlOgorICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBWYWx1ZXM+CisgICAgIHN0cnVjdCB0aWVkIDogdHVwbGU8VmFsdWVzJi4uLj4geyAKKyAgICAgICAvLyAuLi4KKyAgICAgfTsKKworICAgVGhlIGRlcml2YXRpb24gZnJvbSB0dXBsZSBjb250YWlucyBhIFRZUEVfUEFDS19FWFBBTlNJT04gZm9yIHRoZQorICAgdGVtcGxhdGUgYXJndW1lbnRzLiBJdHMgUEFDS19FWFBBTlNJT05fUEFUVEVSTiBpcyAiVmFsdWVzJiIgYW5kIGl0cworICAgUEFDS19FWFBBTlNJT05fUEFSQU1FVEVSX1BBQ0tTIHdpbGwgY29udGFpbiAiVmFsdWVzIi4gICovCitERUZUUkVFQ09ERSAoVFlQRV9QQUNLX0VYUEFOU0lPTiwgInR5cGVfcGFja19leHBhbnNpb24iLCB0Y2NfdHlwZSwgMCkKKworLyogUmVwcmVzZW50cyBhbiBleHByZXNzaW9uIHRoYXQgd2lsbCBiZSBleHBhbmRlZCBpbnRvIGEgbGlzdCBvZgorICAgZXhwcmVzc2lvbnMgd2hlbiBpbnN0YW50aWF0ZWQgd2l0aCBvbmUgb3IgbW9yZSBhcmd1bWVudCBwYWNrcy4KKworICAgRVhQUl9QQUNLX0VYUEFOU0lPTiBwbGF5cyBwcmVjaXNlbHkgdGhlIHNhbWUgcm9sZSBhcyBUWVBFX1BBQ0tfRVhQQU5TSU9OLAorICAgYnV0IHdpbGwgYmUgdXNlZCBmb3IgZXhwcmVzc2lvbnMuICAqLworREVGVFJFRUNPREUgKEVYUFJfUEFDS19FWFBBTlNJT04sICJleHByX3BhY2tfZXhwYW5zaW9uIiwgdGNjX2V4cHJlc3Npb24sIDEpCisKKy8qIFNlbGVjdHMgdGhlIEl0aCBwYXJhbWV0ZXIgb3V0IG9mIGFuIGFyZ3VtZW50IHBhY2suIFRoaXMgbm9kZSB3aWxsCisgICBiZSB1c2VkIHdoZW4gaW5zdGFudGlhdGluZyBwYWNrIGV4cGFuc2lvbnM7IHNlZQorICAgdHN1YnN0X3BhY2tfZXhwYW5zaW9uLiAKKworICAgQVJHVU1FTlRfUEFDS19TRUxFQ1RfRlJPTV9QQUNLIGNvbnRhaW5zIHRoZSAqX0FSR1VNRU5UX1BBQ0sgbm9kZQorICAgZnJvbSB3aGljaCB0aGUgYXJndW1lbnQgd2lsbCBiZSBzZWxlY3RlZC4KKworICAgQVJHVU1FTlRfUEFDS19TRUxFQ1RfSU5ERVggY29udGFpbnMgdGhlIGluZGV4IGludG8gdGhlIGFyZ3VtZW50CisgICBwYWNrIHRoYXQgd2lsbCBiZSByZXR1cm5lZCBieSB0aGlzIEFSR1VNRU5UX1BBQ0tfU0VMRUNUIG5vZGUuIFRoZQorICAgaW5kZXggaXMgYSBtYWNoaW5lIGludGVnZXIuICAqLworREVGVFJFRUNPREUgKEFSR1VNRU5UX1BBQ0tfU0VMRUNULCAiYXJndW1lbnRfcGFja19zZWxlY3QiLCB0Y2NfZXhjZXB0aW9uYWwsIDApCisKKy8qKiBDKysgZXh0ZW5zaW9ucy4gKi8KKworLyogUmVwcmVzZW50cyBhIHRyYWl0IGV4cHJlc3Npb24gZHVyaW5nIHRlbXBsYXRlIGV4cGFuc2lvbi4gICovCitERUZUUkVFQ09ERSAoVFJBSVRfRVhQUiwgInRyYWl0X2V4cHIiLCB0Y2NfZXhjZXB0aW9uYWwsIDApCisKKy8qIEEgbGFtYmRhIGV4cHJlc3Npb24uICBUaGlzIGlzIGEgQysrMHggZXh0ZW5zaW9uLgorICAgTEFNQkRBX0VYUFJfREVGQVVMVF9DQVBUVVJFX01PREUgaXMgYW4gZW51bSBmb3IgdGhlIGRlZmF1bHQsIHdoaWNoIG1heSBiZQorICAgbm9uZS4KKyAgIExBTUJEQV9FWFBSX0NBUFRVUkVfTElTVCBob2xkcyB0aGUgY2FwdHVyZS1saXN0LCBpbmNsdWRpbmcgYHRoaXMnLgorICAgTEFNQkRBX0VYUFJfVEhJU19DQVBUVVJFIGdvZXMgc3RyYWlnaHQgdG8gdGhlIGNhcHR1cmUgb2YgYHRoaXMnLCBpZiBpdCBleGlzdHMuCisgICBMQU1CREFfRVhQUl9NVVRBQkxFX1Agc2lnbmFscyB3aGV0aGVyIHRoaXMgbGFtYmRhIHdhcyBkZWNsYXJlZCBtdXRhYmxlLgorICAgTEFNQkRBX0VYUFJfUkVUVVJOX1RZUEUgaG9sZHMgdGhlIHJldHVybiB0eXBlLCBpZiBpdCB3YXMgc3BlY2lmaWVkLiAgKi8KK0RFRlRSRUVDT0RFIChMQU1CREFfRVhQUiwgImxhbWJkYV9leHByIiwgdGNjX2V4Y2VwdGlvbmFsLCAwKQorCisvKiBUaGUgZGVjbGFyZWQgdHlwZSBvZiBhbiBleHByZXNzaW9uLiAgVGhpcyBpcyBhIEMrKzB4IGV4dGVuc2lvbi4KKyAgIERFQ0xUWVBFX1RZUEVfRVhQUiBpcyB0aGUgZXhwcmVzc2lvbiB3aG9zZSB0eXBlIHdlIGFyZSBjb21wdXRpbmcuCisgICBERUNMVFlQRV9UWVBFX0lEX0VYUFJfT1JfTUVNQkVSX0FDQ0VTU19QIHN0YXRlcyB3aGV0aGVyIHRoZQorICAgZXhwcmVzc2lvbiB3YXMgcGFyc2VkIGFzIGFuIGlkLWV4cHJlc3Npb24gb3IgYSBtZW1iZXIgYWNjZXNzCisgICBleHByZXNzaW9uLiBXaGVuIGZhbHNlLCBpdCB3YXMgcGFyc2VkIGFzIGEgZnVsbCBleHByZXNzaW9uLgorICAgREVDTFRZUEVfRk9SX0xBTUJEQV9DQVBUVVJFIGlzIHNldCBpZiB3ZSB3YW50IGxhbWJkYSBjYXB0dXJlIHNlbWFudGljcy4KKyAgIERFQ0xUWVBFX0ZPUl9MQU1CREFfUkVUVVJOIGlzIHNldCBpZiB3ZSB3YW50IGxhbWJkYSByZXR1cm4gZGVkdWN0aW9uLiAgKi8KK0RFRlRSRUVDT0RFIChERUNMVFlQRV9UWVBFLCAiZGVjbHR5cGVfdHlwZSIsIHRjY190eXBlLCAwKQorCisvKiBVc2VkIHRvIHJlcHJlc2VudCB0aGUgdGVtcGxhdGUgaW5mb3JtYXRpb24gc3RvcmVkIGJ5IHRlbXBsYXRlCisgICBzcGVjaWFsaXphdGlvbnMuCisgICBUaGUgYWNjZXNzb3JzIGFyZToKKyAgIFRJX1RFTVBMQVRFIHRoZSB0ZW1wbGF0ZSBkZWNsYXJhdGlvbiBhc3NvY2lhdGVkIHRvIHRoZSBzcGVjaWFsaXphdGlvbgorICAgVElfQVJHUyB0aGUgYXJndW1lbnRzIG9mIHRoZSB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbgorICAgVElfVFlQRURFRlNfTkVFRElOR19BQ0NFU1NfQ0hFQ0tJTkcgdGhlIHZlY3RvciBvZiB0eXBlZGVmcyB1c2VkIGluCisgICB0aGUgcGF0dGVybiBvZiB0aGUgdGVtcGxhdGUgZm9yIHdoaWNoIGFjY2VzcyBjaGVjayBpcyBuZWVkZWQgYXQgdGVtcGxhdGUKKyAgIGluc3RhbnRpYXRpb24gdGltZS4gICovCitERUZUUkVFQ09ERSAoVEVNUExBVEVfSU5GTywgInRlbXBsYXRlX2luZm8iLCB0Y2NfZXhjZXB0aW9uYWwsIDApCisKKy8qCitMb2NhbCB2YXJpYWJsZXM6Cittb2RlOmMKK0VuZDoKKyovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvY3AvY3AtdHJlZS5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NwL2NwLXRyZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTAyNTYyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NwL2NwLXRyZWUuaApAQCAtMCwwICsxLDU0NzggQEAKKy8qIERlZmluaXRpb25zIGZvciBDKysgcGFyc2luZyBhbmQgdHlwZSBjaGVja2luZy4KKyAgIENvcHlyaWdodCAoQykgMTk4NywgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKyAgIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgTWljaGFlbCBUaWVtYW5uICh0aWVtYW5uQGN5Z251cy5jb20pCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19DUF9UUkVFX0gKKyNkZWZpbmUgR0NDX0NQX1RSRUVfSAorCisjaW5jbHVkZSAiZ2djLmgiCisjaW5jbHVkZSAiZnVuY3Rpb24uaCIKKyNpbmNsdWRlICJoYXNodGFiLmgiCisjaW5jbHVkZSAic3BsYXktdHJlZS5oIgorI2luY2x1ZGUgInZlYy5oIgorI2luY2x1ZGUgInZhcnJheS5oIgorI2luY2x1ZGUgImMtY29tbW9uLmgiCisjaW5jbHVkZSAibmFtZS1sb29rdXAuaCIKKworLyogSW4gb3JkZXIgZm9yIHRoZSBmb3JtYXQgY2hlY2tpbmcgdG8gYWNjZXB0IHRoZSBDKysgZnJvbnQgZW5kCisgICBkaWFnbm9zdGljIGZyYW1ld29yayBleHRlbnNpb25zLCB5b3UgbXVzdCBpbmNsdWRlIHRoaXMgZmlsZSBiZWZvcmUKKyAgIHRvcGxldi5oLCBub3QgYWZ0ZXIuICBXZSBvdmVycmlkZSB0aGUgZGVmaW5pdGlvbiBvZiBHQ0NfRElBR19TVFlMRQorICAgaW4gYy1jb21tb24uaC4gICovCisjdW5kZWYgR0NDX0RJQUdfU1RZTEUKKyNkZWZpbmUgR0NDX0RJQUdfU1RZTEUgX19nY2NfY3h4ZGlhZ19fCisjaWYgR0NDX1ZFUlNJT04gPj0gNDAwMQorI2RlZmluZSBBVFRSSUJVVEVfR0NDX0NYWERJQUcobSwgbikgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKEdDQ19ESUFHX1NUWUxFLCBtLCBuKSkpIEFUVFJJQlVURV9OT05OVUxMKG0pCisjZWxzZQorI2RlZmluZSBBVFRSSUJVVEVfR0NDX0NYWERJQUcobSwgbikgQVRUUklCVVRFX05PTk5VTEwobSkKKyNlbmRpZgorI2lmZGVmIEdDQ19UT1BMRVZfSAorI2Vycm9yIFwKK0luIG9yZGVyIGZvciB0aGUgZm9ybWF0IGNoZWNraW5nIHRvIGFjY2VwdCB0aGUgQysrIGZyb250IGVuZCBkaWFnbm9zdGljIFwKK2ZyYW1ld29yayBleHRlbnNpb25zLCB5b3UgbXVzdCBpbmNsdWRlIHRoaXMgZmlsZSBiZWZvcmUgdG9wbGV2LmgsIG5vdCBhZnRlci4KKyNlbmRpZgorI2luY2x1ZGUgInRvcGxldi5oIgorI2luY2x1ZGUgImRpYWdub3N0aWMuaCIKKworLyogVXNhZ2Ugb2YgVFJFRV9MQU5HX0ZMQUdfPzoKKyAgIDA6IElERU5USUZJRVJfTUFSS0VEIChJREVOVElGSUVSX05PREVzKQorICAgICAgTkVXX0VYUFJfVVNFX0dMT0JBTCAoaW4gTkVXX0VYUFIpLgorICAgICAgREVMRVRFX0VYUFJfVVNFX0dMT0JBTCAoaW4gREVMRVRFX0VYUFIpLgorICAgICAgQ09NUE9VTkRfRVhQUl9PVkVSTE9BREVEIChpbiBDT01QT1VORF9FWFBSKS4KKyAgICAgIFRSRUVfSU5ESVJFQ1RfVVNJTkcgKGluIE5BTUVTUEFDRV9ERUNMKS4KKyAgICAgIENMRUFOVVBfUCAoaW4gVFJZX0JMT0NLKQorICAgICAgQUdHUl9JTklUX1ZJQV9DVE9SX1AgKGluIEFHR1JfSU5JVF9FWFBSKQorICAgICAgUFRSTUVNX09LX1AgKGluIEFERFJfRVhQUiwgT0ZGU0VUX1JFRikKKyAgICAgIFBBUkVOX1NUUklOR19MSVRFUkFMIChpbiBTVFJJTkdfQ1NUKQorICAgICAgREVDTF9QUkVUVFlfRlVOQ1RJT05fUCAoaW4gVkFSX0RFQ0wpCisgICAgICBLT0VOSUdfTE9PS1VQX1AgKGluIENBTExfRVhQUikKKyAgICAgIFNUQVRFTUVOVF9MSVNUX05PX1NDT1BFIChpbiBTVEFURU1FTlRfTElTVCkuCisgICAgICBFWFBSX1NUTVRfU1RNVF9FWFBSX1JFU1VMVCAoaW4gRVhQUl9TVE1UKQorICAgICAgU1RNVF9FWFBSX05PX1NDT1BFIChpbiBTVE1UX0VYUFIpCisgICAgICBCSU5EX0VYUFJfVFJZX0JMT0NLIChpbiBCSU5EX0VYUFIpCisgICAgICBUWVBFTkFNRV9JU19FTlVNX1AgKGluIFRZUEVOQU1FX1RZUEUpCisgICAgICBSRUZFUkVOQ0VfUkVGX1AgKGluIElORElSRUNUX0VYUFIpCisgICAgICBRVUFMSUZJRURfTkFNRV9JU19URU1QTEFURSAoaW4gU0NPUEVfUkVGKQorICAgICAgT01QX0ZPUl9HSU1QTElGWUlOR19QIChpbiBPTVBfRk9SKQorICAgICAgQkFTRUxJTktfUVVBTElGSUVEX1AgKGluIEJBU0VMSU5LKQorICAgICAgVEFSR0VUX0VYUFJfSU1QTElDSVRfUCAoaW4gVEFSR0VUX0VYUFIpCisgICAgICBURU1QTEFURV9QQVJNX1BBUkFNRVRFUl9QQUNLIChpbiBURU1QTEFURV9QQVJNX0lOREVYKQorICAgICAgVFlQRV9SRUZfSVNfUlZBTFVFIChpbiBSRUZFUkVOQ0VfVFlQRSkKKyAgICAgIEFUVFJfSVNfREVQRU5ERU5UIChpbiB0aGUgVFJFRV9MSVNUIGZvciBhbiBhdHRyaWJ1dGUpCisgICAgICBDT05TVFJVQ1RPUl9JU19ESVJFQ1RfSU5JVCAoaW4gQ09OU1RSVUNUT1IpCisgICAgICBMQU1CREFfRVhQUl9DQVBUVVJFU19USElTX1AgKGluIExBTUJEQV9FWFBSKQorICAgICAgREVDTFRZUEVfRk9SX0xBTUJEQV9DQVBUVVJFIChpbiBERUNMVFlQRV9UWVBFKQorICAgMTogSURFTlRJRklFUl9WSVJUVUFMX1AgKGluIElERU5USUZJRVJfTk9ERSkKKyAgICAgIFRJX1BFTkRJTkdfVEVNUExBVEVfRkxBRy4KKyAgICAgIFRFTVBMQVRFX1BBUk1TX0ZPUl9JTkxJTkUuCisgICAgICBERUxFVEVfRVhQUl9VU0VfVkVDIChpbiBERUxFVEVfRVhQUikuCisgICAgICAoVFJFRV9DQUxMU19ORVcpIChpbiBfRVhQUiBvciBfUkVGKSAoY29tbWVudGVkLW91dCkuCisgICAgICBJQ1NfRUxMSVBTSVNfRkxBRyAoaW4gX0NPTlYpCisgICAgICBERUNMX0lOSVRJQUxJWkVEX1AgKGluIFZBUl9ERUNMKQorICAgICAgVFlQRU5BTUVfSVNfQ0xBU1NfUCAoaW4gVFlQRU5BTUVfVFlQRSkKKyAgICAgIFNUTVRfSVNfRlVMTF9FWFBSX1AgKGluIF9TVE1UKQorICAgICAgVEFSR0VUX0VYUFJfTElTVF9JTklUX1AgKGluIFRBUkdFVF9FWFBSKQorICAgICAgTEFNQkRBX0VYUFJfTVVUQUJMRV9QIChpbiBMQU1CREFfRVhQUikKKyAgICAgIERFQ0xUWVBFX0ZPUl9MQU1CREFfUkVUVVJOIChpbiBERUNMVFlQRV9UWVBFKQorICAgMjogSURFTlRJRklFUl9PUE5BTUVfUCAoaW4gSURFTlRJRklFUl9OT0RFKQorICAgICAgSUNTX1RISVNfRkxBRyAoaW4gX0NPTlYpCisgICAgICBERUNMX0lOSVRJQUxJWkVEX0JZX0NPTlNUQU5UX0VYUFJFU1NJT05fUCAoaW4gVkFSX0RFQ0wpCisgICAgICBTVEFURU1FTlRfTElTVF9UUllfQkxPQ0sgKGluIFNUQVRFTUVOVF9MSVNUKQorICAgICAgVFlQRU5BTUVfSVNfUkVTT0xWSU5HX1AgKGluIFRZUEVfTkFNRV9UWVBFKQorICAgICAgTEFNQkRBX0VYUFJfREVEVUNFX1JFVFVSTl9UWVBFX1AgKGluIExBTUJEQV9FWFBSKQorICAgICAgVEFSR0VUX0VYUFJfRElSRUNUX0lOSVRfUCAoaW4gVEFSR0VUX0VYUFIpCisgICAzOiAoVFJFRV9SRUZFUkVOQ0VfRVhQUikgKGluIE5PTl9MVkFMVUVfRVhQUikgKGNvbW1lbnRlZC1vdXQpLgorICAgICAgSUNTX0JBRF9GTEFHIChpbiBfQ09OVikKKyAgICAgIEZOX1RSWV9CTE9DS19QIChpbiBUUllfQkxPQ0spCisgICAgICBJREVOVElGSUVSX0NUT1JfT1JfRFRPUl9QIChpbiBJREVOVElGSUVSX05PREUpCisgICAgICBCSU5EX0VYUFJfQk9EWV9CTE9DSyAoaW4gQklORF9FWFBSKQorICAgICAgREVDTF9OT05fVFJJVklBTExZX0lOSVRJQUxJWkVEX1AgKGluIFZBUl9ERUNMKQorICAgNDogVFJFRV9IQVNfQ09OU1RSVUNUT1IgKGluIElORElSRUNUX1JFRiwgU0FWRV9FWFBSLCBDT05TVFJVQ1RPUiwKKwkgIG9yIEZJRUxEX0RFQ0wpLgorICAgICAgSURFTlRJRklFUl9UWVBFTkFNRV9QIChpbiBJREVOVElGSUVSX05PREUpCisgICAgICBERUNMX1RJTkZPX1AgKGluIFZBUl9ERUNMKQorICAgNTogQ19JU19SRVNFUlZFRF9XT1JEIChpbiBJREVOVElGSUVSX05PREUpCisgICAgICBERUNMX1ZUQUJMRV9PUl9WVFRfUCAoaW4gVkFSX0RFQ0wpCisgICA2OiBJREVOVElGSUVSX1JFUE9fQ0hPU0VOIChpbiBJREVOVElGSUVSX05PREUpCisgICAgICBERUNMX0NPTlNUUlVDVElPTl9WVEFCTEVfUCAoaW4gVkFSX0RFQ0wpCisgICAgICBUWVBFX01BUktFRF9QIChpbiBfVFlQRSkKKworICAgVXNhZ2Ugb2YgVFlQRV9MQU5HX0ZMQUdfPzoKKyAgIDA6IFRZUEVfREVQRU5ERU5UX1AKKyAgIDE6IFRZUEVfSEFTX1VTRVJfQ09OU1RSVUNUT1IuCisgICAyOiB1bnVzZWQKKyAgIDM6IFRZUEVfRk9SX0pBVkEuCisgICA0OiBUWVBFX0hBU19OT05UUklWSUFMX0RFU1RSVUNUT1IKKyAgIDU6IENMQVNTX1RZUEVfUCAoaW4gUkVDT1JEX1RZUEUgYW5kIFVOSU9OX1RZUEUpCisgICAgICBTQ09QRURfRU5VTV9QIChpbiBFTlVNRVJBTF9UWVBFKQorICAgNjogVFlQRV9ERVBFTkRFTlRfUF9WQUxJRAorCisgICBVc2FnZSBvZiBERUNMX0xBTkdfRkxBR18/OgorICAgMDogREVDTF9FUlJPUl9SRVBPUlRFRCAoaW4gVkFSX0RFQ0wpLgorICAgICAgREVDTF9URU1QTEFURV9QQVJNX1AgKGluIFBBUk1fREVDTCwgQ09OU1RfREVDTCwgVFlQRV9ERUNMLCBvciBURU1QTEFURV9ERUNMKQorICAgICAgREVDTF9MT0NBTF9GVU5DVElPTl9QIChpbiBGVU5DVElPTl9ERUNMKQorICAgICAgREVDTF9NVVRBQkxFX1AgKGluIEZJRUxEX0RFQ0wpCisgICAgICBERUNMX0RFUEVOREVOVF9QIChpbiBVU0lOR19ERUNMKQorICAgMTogQ19UWVBFREVGX0VYUExJQ0lUTFlfU0lHTkVEIChpbiBUWVBFX0RFQ0wpLgorICAgICAgREVDTF9URU1QTEFURV9JTlNUQU5USUFURUQgKGluIGEgVkFSX0RFQ0wgb3IgYSBGVU5DVElPTl9ERUNMKQorICAgICAgREVDTF9NRU1CRVJfVEVNUExBVEVfUCAoaW4gVEVNUExBVEVfREVDTCkKKyAgICAgIEZVTkNUSU9OX1BBUkFNRVRFUl9QQUNLX1AgKGluIFBBUk1fREVDTCkKKyAgIDI6IERFQ0xfVEhJU19FWFRFUk4gKGluIFZBUl9ERUNMIG9yIEZVTkNUSU9OX0RFQ0wpLgorICAgICAgREVDTF9JTVBMSUNJVF9UWVBFREVGX1AgKGluIGEgVFlQRV9ERUNMKQorICAgMzogREVDTF9JTl9BR0dSX1AuCisgICA0OiBERUNMX0NfQklUX0ZJRUxEIChpbiBhIEZJRUxEX0RFQ0wpCisgICAgICBERUNMX0FOT05fVU5JT05fVkFSX1AgKGluIGEgVkFSX0RFQ0wpCisgICAgICBERUNMX1NFTEZfUkVGRVJFTkNFX1AgKGluIGEgVFlQRV9ERUNMKQorICAgICAgREVDTF9JTlZBTElEX09WRVJSSURFUl9QIChpbiBhIEZVTkNUSU9OX0RFQ0wpCisgICA1OiBERUNMX0lOVEVSRkFDRV9LTk9XTi4KKyAgIDY6IERFQ0xfVEhJU19TVEFUSUMgKGluIFZBUl9ERUNMIG9yIEZVTkNUSU9OX0RFQ0wpLgorICAgICAgREVDTF9GSUVMRF9JU19CQVNFIChpbiBGSUVMRF9ERUNMKQorICAgNzogREVDTF9ERUFEX0ZPUl9MT0NBTCAoaW4gVkFSX0RFQ0wpLgorICAgICAgREVDTF9USFVOS19QIChpbiBhIG1lbWJlciBGVU5DVElPTl9ERUNMKQorICAgICAgREVDTF9OT1JNQUxfQ0FQVFVSRV9QIChpbiBGSUVMRF9ERUNMKQorICAgODogREVDTF9ERUNMQVJFRF9DT05TVEVYUFJfUCAoaW4gVkFSX0RFQ0wsIEZVTkNUSU9OX0RFQ0wpCisKKyAgIFVzYWdlIG9mIGxhbmd1YWdlLWluZGVwZW5kZW50IGZpZWxkcyBpbiBhIGxhbmd1YWdlLWRlcGVuZGVudCBtYW5uZXI6CisKKyAgIFRZUEVfQUxJQVNfU0VUCisgICAgIFRoaXMgZmllbGQgaXMgdXNlZCBieSBUWVBFTkFNRV9UWVBFcywgVEVNUExBVEVfVFlQRV9QQVJNcywgYW5kIHNvCisgICAgIGZvcnRoIGFzIGEgc3Vic3RpdHV0ZSBmb3IgdGhlIG1hcmsgYml0cyBwcm92aWRlZCBpbiBgbGFuZ190eXBlJy4KKyAgICAgQXQgcHJlc2VudCwgb25seSB0aGUgc2l4IGxvdy1vcmRlciBiaXRzIGFyZSB1c2VkLgorCisgICBUWVBFX0xBTkdfU0xPVF8xCisgICAgIEZvciBhbiBFTlVNRVJBTF9UWVBFLCB0aGlzIGlzIEVOVU1fVEVNUExBVEVfSU5GTy4KKyAgICAgRm9yIGEgRlVOQ1RJT05fVFlQRSBvciBNRVRIT0RfVFlQRSwgdGhpcyBpcyBUWVBFX1JBSVNFU19FWENFUFRJT05TCisKKyAgQklORk9fVklSVFVBTFMKKyAgICAgRm9yIGEgYmluZm8sIHRoaXMgaXMgYSBUUkVFX0xJU1QuICBUaGVyZSBpcyBhbiBlbnRyeSBmb3IgZWFjaAorICAgICB2aXJ0dWFsIGZ1bmN0aW9uIGRlY2xhcmVkIGVpdGhlciBpbiBCSU5GTyBvciBpdHMgZGlyZWN0IGFuZAorICAgICBpbmRpcmVjdCBwcmltYXJ5IGJhc2VzLgorCisgICAgIFRoZSBCVl9ERUxUQSBvZiBlYWNoIG5vZGUgZ2l2ZXMgdGhlIGFtb3VudCBieSB3aGljaCB0byBhZGp1c3QgdGhlCisgICAgIGB0aGlzJyBwb2ludGVyIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb24uICBJZiB0aGUgbWV0aG9kIGlzIGFuCisgICAgIG92ZXJyaWRkZW4gdmVyc2lvbiBvZiBhIGJhc2UgY2xhc3MgbWV0aG9kLCB0aGVuIGl0IGlzIGFzc3VtZWQKKyAgICAgdGhhdCwgcHJpb3IgdG8gYWRqdXN0bWVudCwgdGhlIHRoaXMgcG9pbnRlciBwb2ludHMgdG8gYW4gb2JqZWN0CisgICAgIG9mIHRoZSBiYXNlIGNsYXNzLgorCisgICAgIFRoZSBCVl9WQ0FMTF9JTkRFWCBvZiBlYWNoIG5vZGUsIGlmIG5vbi1OVUxMLCBnaXZlcyB0aGUgdnRhYmxlCisgICAgIGluZGV4IG9mIHRoZSB2Y2FsbCBvZmZzZXQgZm9yIHRoaXMgZW50cnkuCisKKyAgICAgVGhlIEJWX0ZOIGlzIHRoZSBkZWNsYXJhdGlvbiBmb3IgdGhlIHZpcnR1YWwgZnVuY3Rpb24gaXRzZWxmLgorCisgICBCSU5GT19WVEFCTEUKKyAgICAgVGhpcyBpcyBhbiBleHByZXNzaW9uIHdpdGggUE9JTlRFUl9UWVBFIHRoYXQgZ2l2ZXMgdGhlIHZhbHVlCisgICAgIHRvIHdoaWNoIHRoZSB2cHRyIHNob3VsZCBiZSBpbml0aWFsaXplZC4gIFVzZSBnZXRfdnRibF9kZWNsX2Zvcl9iaW5mbworICAgICB0byBleHRyYWN0IHRoZSBWQVJfREVDTCBmb3IgdGhlIGNvbXBsZXRlIHZ0YWJsZS4KKworICAgREVDTF9WSU5ERVgKKyAgICAgVGhpcyBmaWVsZCBpcyBOVUxMIGZvciBhIG5vbi12aXJ0dWFsIGZ1bmN0aW9uLiAgRm9yIGEgdmlydHVhbAorICAgICBmdW5jdGlvbiwgaXQgaXMgZXZlbnR1YWxseSBzZXQgdG8gYW4gSU5URUdFUl9DU1QgaW5kaWNhdGluZyB0aGUKKyAgICAgaW5kZXggaW4gdGhlIHZ0YWJsZSBhdCB3aGljaCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBmb3VuZC4gIFdoZW4KKyAgICAgYSB2aXJ0dWFsIGZ1bmN0aW9uIGlzIGRlY2xhcmVkLCBidXQgYmVmb3JlIGl0IGlzIGtub3duIHdoYXQKKyAgICAgZnVuY3Rpb24gaXMgb3ZlcnJpZGRlbiwgdGhpcyBmaWVsZCBpcyB0aGUgZXJyb3JfbWFya19ub2RlLgorCisgICAgIFRlbXBvcmFyaWx5LCBpdCBtYXkgYmUgc2V0IHRvIGEgVFJFRV9MSVNUIHdob3NlIFRSRUVfVkFMVUUgaXMKKyAgICAgdGhlIHZpcnR1YWwgZnVuY3Rpb24gdGhpcyBvbmUgb3ZlcnJpZGVzLCBhbmQgd2hvc2UgVFJFRV9DSEFJTiBpcworICAgICB0aGUgb2xkIERFQ0xfVklOREVYLiAgKi8KKworLyogTGFuZ3VhZ2Utc3BlY2lmaWMgdHJlZSBjaGVja2Vycy4gICovCisKKyNkZWZpbmUgVkFSX09SX0ZVTkNUSU9OX0RFQ0xfQ0hFQ0soTk9ERSkgXAorICBUUkVFX0NIRUNLMihOT0RFLFZBUl9ERUNMLEZVTkNUSU9OX0RFQ0wpCisKKyNkZWZpbmUgVkFSX0ZVTkNUSU9OX09SX1BBUk1fREVDTF9DSEVDSyhOT0RFKSBcCisgIFRSRUVfQ0hFQ0szKE5PREUsVkFSX0RFQ0wsRlVOQ1RJT05fREVDTCxQQVJNX0RFQ0wpCisKKyNkZWZpbmUgVkFSX1RFTVBMX1RZUEVfT1JfRlVOQ1RJT05fREVDTF9DSEVDSyhOT0RFKSBcCisgIFRSRUVfQ0hFQ0s0KE5PREUsVkFSX0RFQ0wsRlVOQ1RJT05fREVDTCxUWVBFX0RFQ0wsVEVNUExBVEVfREVDTCkKKworI2RlZmluZSBCT1VORF9URU1QTEFURV9URU1QTEFURV9QQVJNX1RZUEVfQ0hFQ0soTk9ERSkgXAorICBUUkVFX0NIRUNLKE5PREUsQk9VTkRfVEVNUExBVEVfVEVNUExBVEVfUEFSTSkKKworI2lmIGRlZmluZWQgRU5BQkxFX1RSRUVfQ0hFQ0tJTkcgJiYgKEdDQ19WRVJTSU9OID49IDIwMDcpCisjZGVmaW5lIFRIVU5LX0ZVTkNUSU9OX0NIRUNLKE5PREUpIF9fZXh0ZW5zaW9uX18JCQlcCisoeyAgX190eXBlb2YgKE5PREUpIGNvbnN0IF9fdCA9IChOT0RFKTsJCQkJCVwKKyAgICBpZiAoVFJFRV9DT0RFIChfX3QpICE9IEZVTkNUSU9OX0RFQ0wgfHwgIV9fdC0+ZGVjbF9jb21tb24ubGFuZ19zcGVjaWZpYyBcCisJfHwgIV9fdC0+ZGVjbF9jb21tb24ubGFuZ19zcGVjaWZpYy0+dS5mbi50aHVua19wKQkJXAorICAgICAgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18sIDApOwlcCisgICAgIF9fdDsgfSkKKyNlbHNlCisjZGVmaW5lIFRIVU5LX0ZVTkNUSU9OX0NIRUNLKE5PREUpIChOT0RFKQorI2VuZGlmCisMCisvKiBMYW5ndWFnZS1kZXBlbmRlbnQgY29udGVudHMgb2YgYW4gaWRlbnRpZmllci4gICovCisKK3N0cnVjdCBHVFkoKCkpIGxhbmdfaWRlbnRpZmllciB7CisgIHN0cnVjdCBjX2NvbW1vbl9pZGVudGlmaWVyIGNfY29tbW9uOworICBjeHhfYmluZGluZyAqbmFtZXNwYWNlX2JpbmRpbmdzOworICBjeHhfYmluZGluZyAqYmluZGluZ3M7CisgIHRyZWUgY2xhc3NfdGVtcGxhdGVfaW5mbzsKKyAgdHJlZSBsYWJlbF92YWx1ZTsKK307CisKKy8qIEluIGFuIElERU5USUZJRVJfTk9ERSwgbm9uemVybyBpZiB0aGlzIGlkZW50aWZpZXIgaXMgYWN0dWFsbHkgYQorICAga2V5d29yZC4gIENfUklEX0NPREUgKG5vZGUpIGlzIHRoZW4gdGhlIFJJRF8qIHZhbHVlIG9mIHRoZSBrZXl3b3JkLAorICAgYW5kIENfUklEX1lZQ09ERSBpcyB0aGUgdG9rZW4gbnVtYmVyIHdhbnRlZCBieSBZYWNjLiAgKi8KKworI2RlZmluZSBDX0lTX1JFU0VSVkVEX1dPUkQoSUQpIFRSRUVfTEFOR19GTEFHXzUgKElEKQorCisjZGVmaW5lIExBTkdfSURFTlRJRklFUl9DQVNUKE5PREUpIFwKKwkoKHN0cnVjdCBsYW5nX2lkZW50aWZpZXIqKUlERU5USUZJRVJfTk9ERV9DSEVDSyAoTk9ERSkpCisKK3N0cnVjdCBHVFkoKCkpIHRlbXBsYXRlX3Bhcm1faW5kZXhfcyB7CisgIHN0cnVjdCB0cmVlX2NvbW1vbiBjb21tb247CisgIGludCBpbmRleDsKKyAgaW50IGxldmVsOworICBpbnQgb3JpZ19sZXZlbDsKKyAgdHJlZSBkZWNsOworfTsKK3R5cGVkZWYgc3RydWN0IHRlbXBsYXRlX3Bhcm1faW5kZXhfcyB0ZW1wbGF0ZV9wYXJtX2luZGV4OworCitzdHJ1Y3QgR1RZKCgpKSBwdHJtZW1fY3N0IHsKKyAgc3RydWN0IHRyZWVfY29tbW9uIGNvbW1vbjsKKyAgLyogVGhpcyBpc24ndCB1c2VkLCBidXQgdGhlIG1pZGRsZS1lbmQgZXhwZWN0cyBhbGwgY29uc3RhbnRzIHRvIGhhdmUKKyAgICAgdGhpcyBmaWVsZC4gICovCisgIHJ0eCBydGw7CisgIHRyZWUgbWVtYmVyOworfTsKK3R5cGVkZWYgc3RydWN0IHB0cm1lbV9jc3QgKiBwdHJtZW1fY3N0X3Q7CisKKyNkZWZpbmUgSURFTlRJRklFUl9HTE9CQUxfVkFMVUUoTk9ERSkgXAorICBuYW1lc3BhY2VfYmluZGluZyAoKE5PREUpLCBnbG9iYWxfbmFtZXNwYWNlKQorI2RlZmluZSBTRVRfSURFTlRJRklFUl9HTE9CQUxfVkFMVUUoTk9ERSwgVkFMKSBcCisgIHNldF9uYW1lc3BhY2VfYmluZGluZyAoKE5PREUpLCBnbG9iYWxfbmFtZXNwYWNlLCAoVkFMKSkKKyNkZWZpbmUgSURFTlRJRklFUl9OQU1FU1BBQ0VfVkFMVUUoTk9ERSkgXAorICBuYW1lc3BhY2VfYmluZGluZyAoKE5PREUpLCBjdXJyZW50X25hbWVzcGFjZSkKKyNkZWZpbmUgU0VUX0lERU5USUZJRVJfTkFNRVNQQUNFX1ZBTFVFKE5PREUsIFZBTCkgXAorICBzZXRfbmFtZXNwYWNlX2JpbmRpbmcgKChOT0RFKSwgY3VycmVudF9uYW1lc3BhY2UsIChWQUwpKQorCisjZGVmaW5lIENMRUFOVVBfUChOT0RFKQkJVFJFRV9MQU5HX0ZMQUdfMCAoVFJZX0JMT0NLX0NIRUNLIChOT0RFKSkKKworI2RlZmluZSBCSU5EX0VYUFJfVFJZX0JMT0NLKE5PREUpIFwKKyAgVFJFRV9MQU5HX0ZMQUdfMCAoQklORF9FWFBSX0NIRUNLIChOT0RFKSkKKworLyogVXNlZCB0byBtYXJrIHRoZSBibG9jayBhcm91bmQgdGhlIG1lbWJlciBpbml0aWFsaXplcnMgYW5kIGNsZWFudXBzLiAgKi8KKyNkZWZpbmUgQklORF9FWFBSX0JPRFlfQkxPQ0soTk9ERSkgXAorICBUUkVFX0xBTkdfRkxBR18zIChCSU5EX0VYUFJfQ0hFQ0sgKE5PREUpKQorI2RlZmluZSBGVU5DVElPTl9ORUVEU19CT0RZX0JMT0NLKE5PREUpIFwKKyAgKERFQ0xfQ09OU1RSVUNUT1JfUCAoTk9ERSkgfHwgREVDTF9ERVNUUlVDVE9SX1AgKE5PREUpKQorCisjZGVmaW5lIFNUQVRFTUVOVF9MSVNUX05PX1NDT1BFKE5PREUpIFwKKyAgVFJFRV9MQU5HX0ZMQUdfMCAoU1RBVEVNRU5UX0xJU1RfQ0hFQ0sgKE5PREUpKQorI2RlZmluZSBTVEFURU1FTlRfTElTVF9UUllfQkxPQ0soTk9ERSkgXAorICBUUkVFX0xBTkdfRkxBR18yIChTVEFURU1FTlRfTElTVF9DSEVDSyAoTk9ERSkpCisKKy8qIE5vbnplcm8gaWYgdGhpcyBzdGF0ZW1lbnQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSBmdWxsLWV4cHJlc3Npb24sCisgICBpLmUuLCBpZiB0ZW1wb3JhcmllcyBjcmVhdGVkIGR1cmluZyB0aGlzIHN0YXRlbWVudCBzaG91bGQgaGF2ZQorICAgdGhlaXIgZGVzdHJ1Y3RvcnMgcnVuIGF0IHRoZSBlbmQgb2YgdGhpcyBzdGF0ZW1lbnQuICAqLworI2RlZmluZSBTVE1UX0lTX0ZVTExfRVhQUl9QKE5PREUpIFRSRUVfTEFOR19GTEFHXzEgKChOT0RFKSkKKworLyogTWFya3MgdGhlIHJlc3VsdCBvZiBhIHN0YXRlbWVudCBleHByZXNzaW9uLiAgKi8KKyNkZWZpbmUgRVhQUl9TVE1UX1NUTVRfRVhQUl9SRVNVTFQoTk9ERSkgXAorICBUUkVFX0xBTkdfRkxBR18wIChFWFBSX1NUTVRfQ0hFQ0sgKE5PREUpKQorCisvKiBOb256ZXJvIGlmIHRoaXMgc3RhdGVtZW50LWV4cHJlc3Npb24gZG9lcyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIHNjb3BlLiAgKi8KKyNkZWZpbmUgU1RNVF9FWFBSX05PX1NDT1BFKE5PREUpIFwKKyAgIFRSRUVfTEFOR19GTEFHXzAgKFNUTVRfRVhQUl9DSEVDSyAoTk9ERSkpCisKKy8qIFJldHVybnMgbm9uemVybyBpZmYgVFlQRTEgYW5kIFRZUEUyIGFyZSB0aGUgc2FtZSB0eXBlLCBpbiB0aGUgdXN1YWwKKyAgIHNlbnNlIG9mIGBzYW1lJy4gICovCisjZGVmaW5lIHNhbWVfdHlwZV9wKFRZUEUxLCBUWVBFMikgXAorICBjb21wdHlwZXMgKChUWVBFMSksIChUWVBFMiksIENPTVBBUkVfU1RSSUNUKQorCisvKiBSZXR1cm5zIG5vbnplcm8gaWZmIFRZUEUxIGFuZCBUWVBFMiBhcmUgdGhlIHNhbWUgdHlwZSwgaWdub3JpbmcKKyAgIHRvcC1sZXZlbCBxdWFsaWZpZXJzLiAgKi8KKyNkZWZpbmUgc2FtZV90eXBlX2lnbm9yaW5nX3RvcF9sZXZlbF9xdWFsaWZpZXJzX3AoVFlQRTEsIFRZUEUyKSBcCisgIHNhbWVfdHlwZV9wIChUWVBFX01BSU5fVkFSSUFOVCAoVFlQRTEpLCBUWVBFX01BSU5fVkFSSUFOVCAoVFlQRTIpKQorCisvKiBOb256ZXJvIGlmIHdlIGFyZSBwcmVzZW50bHkgYnVpbGRpbmcgYSBzdGF0ZW1lbnQgdHJlZSwgcmF0aGVyCisgICB0aGFuIGV4cGFuZGluZyBlYWNoIHN0YXRlbWVudCBhcyB3ZSBlbmNvdW50ZXIgaXQuICAqLworI2RlZmluZSBidWlsZGluZ19zdG10X3RyZWUoKSAgKGN1cl9zdG10X2xpc3QgIT0gTlVMTF9UUkVFKQorCisvKiBSZXR1cm5zIG5vbnplcm8gaWZmIE5PREUgaXMgYSBkZWNsYXJhdGlvbiBmb3IgdGhlIGdsb2JhbCBmdW5jdGlvbgorICAgYG1haW4nLiAgKi8KKyNkZWZpbmUgREVDTF9NQUlOX1AoTk9ERSkJCQkJXAorICAgKERFQ0xfRVhURVJOX0NfRlVOQ1RJT05fUCAoTk9ERSkJCQlcCisgICAgJiYgREVDTF9OQU1FIChOT0RFKSAhPSBOVUxMX1RSRUUJCQlcCisgICAgJiYgTUFJTl9OQU1FX1AgKERFQ0xfTkFNRSAoTk9ERSkpCQkJXAorICAgICYmIGZsYWdfaG9zdGVkKQorCisvKiBUaGUgb3ZlcmxvYWRlZCBGVU5DVElPTl9ERUNMLiAgKi8KKyNkZWZpbmUgT1ZMX0ZVTkNUSU9OKE5PREUpIFwKKyAgKCgoc3RydWN0IHRyZWVfb3ZlcmxvYWQqKU9WRVJMT0FEX0NIRUNLIChOT0RFKSktPmZ1bmN0aW9uKQorI2RlZmluZSBPVkxfQ0hBSU4oTk9ERSkgICAgICBUUkVFX0NIQUlOIChOT0RFKQorLyogUG9seW1vcnBoaWMgYWNjZXNzIHRvIEZVTkNUSU9OIGFuZCBDSEFJTi4gICovCisjZGVmaW5lIE9WTF9DVVJSRU5UKE5PREUpCVwKKyAgKChUUkVFX0NPREUgKE5PREUpID09IE9WRVJMT0FEKSA/IE9WTF9GVU5DVElPTiAoTk9ERSkgOiAoTk9ERSkpCisjZGVmaW5lIE9WTF9ORVhUKE5PREUpCQlcCisgICgoVFJFRV9DT0RFIChOT0RFKSA9PSBPVkVSTE9BRCkgPyBUUkVFX0NIQUlOIChOT0RFKSA6IE5VTExfVFJFRSkKKy8qIElmIHNldCwgdGhpcyB3YXMgaW1wb3J0ZWQgaW4gYSB1c2luZyBkZWNsYXJhdGlvbi4KKyAgIFRoaXMgaXMgbm90IHRvIGNvbmZ1c2Ugd2l0aCBiZWluZyB1c2VkIHNvbWV3aGVyZSwgd2hpY2gKKyAgIGlzIG5vdCBpbXBvcnRhbnQgZm9yIHRoaXMgbm9kZS4gICovCisjZGVmaW5lIE9WTF9VU0VEKE5PREUpCQlUUkVFX1VTRUQgKE5PREUpCisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfb3ZlcmxvYWQgeworICBzdHJ1Y3QgdHJlZV9jb21tb24gY29tbW9uOworICB0cmVlIGZ1bmN0aW9uOworfTsKKworLyogUmV0dXJucyB0cnVlIGlmZiBOT0RFIGlzIGEgQkFTRUxJTksuICAqLworI2RlZmluZSBCQVNFTElOS19QKE5PREUpIFwKKyAgKFRSRUVfQ09ERSAoTk9ERSkgPT0gQkFTRUxJTkspCisvKiBUaGUgQklORk8gaW5kaWNhdGluZyB0aGUgYmFzZSBmcm9tIHdoaWNoIHRoZSBCQVNFTElOS19GVU5DVElPTlMgY2FtZS4gICovCisjZGVmaW5lIEJBU0VMSU5LX0JJTkZPKE5PREUpIFwKKyAgKCgoc3RydWN0IHRyZWVfYmFzZWxpbmsqKSBCQVNFTElOS19DSEVDSyAoTk9ERSkpLT5iaW5mbykKKy8qIFRoZSBmdW5jdGlvbnMgcmVmZXJyZWQgdG8gYnkgdGhlIEJBU0VMSU5LOyBlaXRoZXIgYSBGVU5DVElPTl9ERUNMLAorICAgYSBURU1QTEFURV9ERUNMLCBhbiBPVkVSTE9BRCwgb3IgYSBURU1QTEFURV9JRF9FWFBSLiAgKi8KKyNkZWZpbmUgQkFTRUxJTktfRlVOQ1RJT05TKE5PREUpIFwKKyAgKCgoc3RydWN0IHRyZWVfYmFzZWxpbmsqKSBCQVNFTElOS19DSEVDSyAoTk9ERSkpLT5mdW5jdGlvbnMpCisvKiBUaGUgQklORk8gaW4gd2hpY2ggdGhlIHNlYXJjaCBmb3IgdGhlIGZ1bmN0aW9ucyBpbmRpY2F0ZWQgYnkgdGhpcyBiYXNlbGluaworICAgYmVnYW4uICBUaGlzIGJhc2UgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGFjY2Vzc2liaWxpdHkgb2YgZnVuY3Rpb25zCisgICBzZWxlY3RlZCBieSBvdmVybG9hZCByZXNvbHV0aW9uLiAgKi8KKyNkZWZpbmUgQkFTRUxJTktfQUNDRVNTX0JJTkZPKE5PREUpIFwKKyAgKCgoc3RydWN0IHRyZWVfYmFzZWxpbmsqKSBCQVNFTElOS19DSEVDSyAoTk9ERSkpLT5hY2Nlc3NfYmluZm8pCisvKiBGb3IgYSB0eXBlLWNvbnZlcnNpb24gb3BlcmF0b3IsIHRoZSBCQVNFTElOS19PUFRZUEUgaW5kaWNhdGVzIHRoZSB0eXBlCisgICB0byB3aGljaCB0aGUgY29udmVyc2lvbiBzaG91bGQgb2NjdXIuICBUaGlzIHZhbHVlIGlzIGltcG9ydGFudCBpZgorICAgdGhlIEJBU0VMSU5LX0ZVTkNUSU9OUyBpbmNsdWRlIGEgdGVtcGxhdGUgY29udmVyc2lvbiBvcGVyYXRvciAtLQorICAgdGhlIEJBU0VMSU5LX09QVFlQRSBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgd2hhdCB0eXBlIHRoZSB1c2VyCisgICByZXF1ZXN0ZWQuICAqLworI2RlZmluZSBCQVNFTElOS19PUFRZUEUoTk9ERSkgXAorICAoVFJFRV9DSEFJTiAoQkFTRUxJTktfQ0hFQ0sgKE5PREUpKSkKKy8qIE5vbnplcm8gaWYgdGhpcyBiYXNlbGluayB3YXMgZnJvbSBhIHF1YWxpZmllZCBsb29rdXAuICAqLworI2RlZmluZSBCQVNFTElOS19RVUFMSUZJRURfUChOT0RFKSBcCisgIFRSRUVfTEFOR19GTEFHXzAgKEJBU0VMSU5LX0NIRUNLIChOT0RFKSkKKworc3RydWN0IEdUWSgoKSkgdHJlZV9iYXNlbGluayB7CisgIHN0cnVjdCB0cmVlX2NvbW1vbiBjb21tb247CisgIHRyZWUgYmluZm87CisgIHRyZWUgZnVuY3Rpb25zOworICB0cmVlIGFjY2Vzc19iaW5mbzsKK307CisKKy8qIFRoZSBkaWZmZXJlbnQga2luZHMgb2YgaWRzIHRoYXQgd2UgZW5jb3VudGVyLiAgKi8KKwordHlwZWRlZiBlbnVtIGNwX2lkX2tpbmQKK3sKKyAgLyogTm90IGFuIGlkIGF0IGFsbC4gICovCisgIENQX0lEX0tJTkRfTk9ORSwKKyAgLyogQW4gdW5xdWFsaWZpZWQtaWQgdGhhdCBpcyBub3QgYSB0ZW1wbGF0ZS1pZC4gICovCisgIENQX0lEX0tJTkRfVU5RVUFMSUZJRUQsCisgIC8qIEFuIHVucXVhbGlmaWVkLWlkIHRoYXQgaXMgYSBkZXBlbmRlbnQgbmFtZS4gICovCisgIENQX0lEX0tJTkRfVU5RVUFMSUZJRURfREVQRU5ERU5ULAorICAvKiBBbiB1bnF1YWxpZmllZCB0ZW1wbGF0ZS1pZC4gICovCisgIENQX0lEX0tJTkRfVEVNUExBVEVfSUQsCisgIC8qIEEgcXVhbGlmaWVkLWlkLiAgKi8KKyAgQ1BfSURfS0lORF9RVUFMSUZJRUQKK30gY3BfaWRfa2luZDsKKworCisvKiBUaGUgdmFyaW91cyBraW5kcyBvZiBDKysweCB3YXJuaW5ncyB3ZSBlbmNvdW50ZXIuICovCisKK3R5cGVkZWYgZW51bSBjcHAweF93YXJuX3N0cgoreworICAvKiBleHRlbmRlZCBpbml0aWFsaXplciBsaXN0cyAqLworICBDUFAwWF9JTklUSUFMSVpFUl9MSVNUUywKKyAgLyogZXhwbGljaXQgY29udmVyc2lvbiBvcGVyYXRvcnMgKi8KKyAgQ1BQMFhfRVhQTElDSVRfQ09OVkVSU0lPTiwKKyAgLyogdmFyaWFkaWMgdGVtcGxhdGVzICovCisgIENQUDBYX1ZBUklBRElDX1RFTVBMQVRFUywKKyAgLyogbGFtYmRhIGV4cHJlc3Npb25zICovCisgIENQUDBYX0xBTUJEQV9FWFBSLAorICAvKiBDKysweCBhdXRvICovCisgIENQUDBYX0FVVE8sCisgIC8qIHNjb3BlZCBlbnVtcyAqLworICBDUFAwWF9TQ09QRURfRU5VTVMsCisgIC8qIGRlZmF1bHRlZCBhbmQgZGVsZXRlZCBmdW5jdGlvbnMgKi8KKyAgQ1BQMFhfREVGQVVMVEVEX0RFTEVURUQKK30gY3BwMHhfd2Fybl9zdHI7CisgIAorLyogVGhlIHZhcmlvdXMga2luZHMgb2Ygb3BlcmF0aW9uIHVzZWQgYnkgY29tcG9zaXRlX3BvaW50ZXJfdHlwZS4gKi8KKwordHlwZWRlZiBlbnVtIGNvbXBvc2l0ZV9wb2ludGVyX29wZXJhdGlvbgoreworICAvKiBjb21wYXJpc29uICovCisgIENQT19DT01QQVJJU09OLAorICAvKiBjb252ZXJzaW9uICovCisgIENQT19DT05WRVJTSU9OLAorICAvKiBjb25kaXRpb25hbCBleHByZXNzaW9uICovCisgIENQT19DT05ESVRJT05BTF9FWFBSCit9IGNvbXBvc2l0ZV9wb2ludGVyX29wZXJhdGlvbjsKKworLyogVGhlIHZhcmlvdXMgcmVhZG9ubHkgZXJyb3Igc3RyaW5nIHVzZWQgYnkgcmVhZG9ubHlfZXJyb3IuICAqLwordHlwZWRlZiBlbnVtIHJlYWRvbmx5X2Vycm9yX2tpbmQKK3sKKyAgLyogYXNzaWdubWVudCAqLworICBSRUtfQVNTSUdOTUVOVCwKKyAgLyogYXNzaWdubWVudCAodmlhICdhc20nIG91dHB1dCkgKi8KKyAgUkVLX0FTU0lHTk1FTlRfQVNNLAorICAvKiBpbmNyZW1lbnQgKi8KKyAgUkVLX0lOQ1JFTUVOVCwKKyAgLyogZGVjcmVtZW50ICovCisgIFJFS19ERUNSRU1FTlQKK30gcmVhZG9ubHlfZXJyb3Jfa2luZDsKKworLyogTWFjcm9zIGZvciBhY2Nlc3MgdG8gbGFuZ3VhZ2Utc3BlY2lmaWMgc2xvdHMgaW4gYW4gaWRlbnRpZmllci4gICovCisKKyNkZWZpbmUgSURFTlRJRklFUl9OQU1FU1BBQ0VfQklORElOR1MoTk9ERSkJXAorICAoTEFOR19JREVOVElGSUVSX0NBU1QgKE5PREUpLT5uYW1lc3BhY2VfYmluZGluZ3MpCisjZGVmaW5lIElERU5USUZJRVJfVEVNUExBVEUoTk9ERSkJXAorICAoTEFOR19JREVOVElGSUVSX0NBU1QgKE5PREUpLT5jbGFzc190ZW1wbGF0ZV9pbmZvKQorCisvKiBUaGUgSURFTlRJRklFUl9CSU5ESU5HIGlzIHRoZSBpbm5lcm1vc3QgY3h4X2JpbmRpbmcgZm9yIHRoZQorICAgIGlkZW50aWZpZXIuICBJdCdzIFBSRVZJT1VTIGlzIHRoZSBuZXh0IG91dGVybW9zdCBiaW5kaW5nLiAgRWFjaAorICAgIFZBTFVFIGZpZWxkIGlzIGEgREVDTCBmb3IgdGhlIGFzc29jaWF0ZWQgZGVjbGFyYXRpb24uICBUaHVzLAorICAgIG5hbWUgbG9va3VwIGNvbnNpc3RzIHNpbXBseSBvZiBwdWxsaW5nIG9mZiB0aGUgbm9kZSBhdCB0aGUgZnJvbnQKKyAgICBvZiB0aGUgbGlzdCAobW9kdWxvIG9kZGl0aWVzIGZvciBsb29raW5nIHVwIHRoZSBuYW1lcyBvZiB0eXBlcywKKyAgICBhbmQgc3VjaC4pICBZb3UgY2FuIHVzZSBTQ09QRSBmaWVsZCB0byBkZXRlcm1pbmUgdGhlIHNjb3BlCisgICAgdGhhdCBib3VuZCB0aGUgbmFtZS4gICovCisjZGVmaW5lIElERU5USUZJRVJfQklORElORyhOT0RFKSBcCisgIChMQU5HX0lERU5USUZJRVJfQ0FTVCAoTk9ERSktPmJpbmRpbmdzKQorCisvKiBUUkVFX1RZUEUgb25seSBpbmRpY2F0ZXMgb24gbG9jYWwgYW5kIGNsYXNzIHNjb3BlIHRoZSBjdXJyZW50CisgICB0eXBlLiBGb3IgbmFtZXNwYWNlIHNjb3BlLCB0aGUgcHJlc2VuY2Ugb2YgYSB0eXBlIGluIGFueSBuYW1lc3BhY2UKKyAgIGlzIGluZGljYXRlZCB3aXRoIGdsb2JhbF90eXBlX25vZGUsIGFuZCB0aGUgcmVhbCB0eXBlIGJlaGluZCBtdXN0CisgICBiZSBmb3VuZCB0aHJvdWdoIGxvb2t1cC4gICovCisjZGVmaW5lIElERU5USUZJRVJfVFlQRV9WQUxVRShOT0RFKSBpZGVudGlmaWVyX3R5cGVfdmFsdWUgKE5PREUpCisjZGVmaW5lIFJFQUxfSURFTlRJRklFUl9UWVBFX1ZBTFVFKE5PREUpIFRSRUVfVFlQRSAoTk9ERSkKKyNkZWZpbmUgU0VUX0lERU5USUZJRVJfVFlQRV9WQUxVRShOT0RFLFRZUEUpIChUUkVFX1RZUEUgKE5PREUpID0gKFRZUEUpKQorI2RlZmluZSBJREVOVElGSUVSX0hBU19UWVBFX1ZBTFVFKE5PREUpIChJREVOVElGSUVSX1RZUEVfVkFMVUUgKE5PREUpID8gMSA6IDApCisKKyNkZWZpbmUgSURFTlRJRklFUl9MQUJFTF9WQUxVRShOT0RFKSBcCisgIChMQU5HX0lERU5USUZJRVJfQ0FTVCAoTk9ERSktPmxhYmVsX3ZhbHVlKQorI2RlZmluZSBTRVRfSURFTlRJRklFUl9MQUJFTF9WQUxVRShOT0RFLCBWQUxVRSkgICBcCisgIElERU5USUZJRVJfTEFCRUxfVkFMVUUgKE5PREUpID0gKFZBTFVFKQorCisvKiBOb256ZXJvIGlmIHRoaXMgaWRlbnRpZmllciBpcyB1c2VkIGFzIGEgdmlydHVhbCBmdW5jdGlvbiBuYW1lIHNvbWV3aGVyZQorICAgKG9wdGltaXplcyBzZWFyY2hlcykuICAqLworI2RlZmluZSBJREVOVElGSUVSX1ZJUlRVQUxfUChOT0RFKSBUUkVFX0xBTkdfRkxBR18xIChOT0RFKQorCisvKiBOb256ZXJvIGlmIHRoaXMgaWRlbnRpZmllciBpcyB0aGUgcHJlZml4IGZvciBhIG1hbmdsZWQgQysrIG9wZXJhdG9yCisgICBuYW1lLiAgKi8KKyNkZWZpbmUgSURFTlRJRklFUl9PUE5BTUVfUChOT0RFKSBUUkVFX0xBTkdfRkxBR18yIChOT0RFKQorCisvKiBOb256ZXJvIGlmIHRoaXMgaWRlbnRpZmllciBpcyB0aGUgbmFtZSBvZiBhIHR5cGUtY29udmVyc2lvbgorICAgb3BlcmF0b3IuICAqLworI2RlZmluZSBJREVOVElGSUVSX1RZUEVOQU1FX1AoTk9ERSkgXAorICBUUkVFX0xBTkdfRkxBR180IChOT0RFKQorCisvKiBOb256ZXJvIGlmIHRoaXMgaWRlbnRpZmllciBpcyB0aGUgbmFtZSBvZiBhIGNvbnN0cnVjdG9yIG9yCisgICBkZXN0cnVjdG9yLiAgKi8KKyNkZWZpbmUgSURFTlRJRklFUl9DVE9SX09SX0RUT1JfUChOT0RFKSBcCisgIFRSRUVfTEFOR19GTEFHXzMgKE5PREUpCisKKy8qIFRydWUgaWZmIE5BTUUgaXMgdGhlIERFQ0xfQVNTRU1CTEVSX05BTUUgZm9yIGFuIGVudGl0eSB3aXRoIHZhZ3VlCisgICBsaW5rYWdlIHdoaWNoIHRoZSBwcmVsaW5rZXIgaGFzIGFzc2lnbmVkIHRvIHRoaXMgdHJhbnNsYXRpb24KKyAgIHVuaXQuICAqLworI2RlZmluZSBJREVOVElGSUVSX1JFUE9fQ0hPU0VOKE5BTUUpIFwKKyAgKFRSRUVfTEFOR19GTEFHXzYgKE5BTUUpKQorCisvKiBJbiBhIFJFQ09SRF9UWVBFIG9yIFVOSU9OX1RZUEUsIG5vbnplcm8gaWYgYW55IGNvbXBvbmVudCBpcyByZWFkLW9ubHkuICAqLworI2RlZmluZSBDX1RZUEVfRklFTERTX1JFQURPTkxZKFRZUEUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoVFlQRSktPmZpZWxkc19yZWFkb25seSkKKworLyogVGhlIHRva2VucyBzdG9yZWQgaW4gdGhlIGRlZmF1bHQgYXJndW1lbnQuICAqLworCisjZGVmaW5lIERFRkFSR19UT0tFTlMoTk9ERSkgXAorICAoKChzdHJ1Y3QgdHJlZV9kZWZhdWx0X2FyZyAqKURFRkFVTFRfQVJHX0NIRUNLIChOT0RFKSktPnRva2VucykKKyNkZWZpbmUgREVGQVJHX0lOU1RBTlRJQVRJT05TKE5PREUpIFwKKyAgKCgoc3RydWN0IHRyZWVfZGVmYXVsdF9hcmcgKilERUZBVUxUX0FSR19DSEVDSyAoTk9ERSkpLT5pbnN0YW50aWF0aW9ucykKKworc3RydWN0IEdUWSAoKCkpIHRyZWVfZGVmYXVsdF9hcmcgeworICBzdHJ1Y3QgdHJlZV9jb21tb24gY29tbW9uOworICBzdHJ1Y3QgY3BfdG9rZW5fY2FjaGUgKnRva2VuczsKKyAgVkVDKHRyZWUsZ2MpICppbnN0YW50aWF0aW9uczsKK307CisKKy8qIFRoZSBjb25kaXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGF0aWMgYXNzZXJ0aW9uLiAgVGhpcyBtdXN0IGJlCisgICBhbiBpbnRlZ3JhbCBjb25zdGFudCBleHByZXNzaW9uLiAgKi8KKyNkZWZpbmUgU1RBVElDX0FTU0VSVF9DT05ESVRJT04oTk9ERSkgXAorICAoKChzdHJ1Y3QgdHJlZV9zdGF0aWNfYXNzZXJ0ICopU1RBVElDX0FTU0VSVF9DSEVDSyAoTk9ERSkpLT5jb25kaXRpb24pCisKKy8qIFRoZSBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RhdGljIGFzc2VydGlvbi4gIFRoaXMgbXVzdCBiZSBhCisgICBzdHJpbmcgY29uc3RhbnQsIHdoaWNoIHdpbGwgYmUgZW1pdHRlZCBhcyBhbiBlcnJvciBtZXNzYWdlIHdoZW4gdGhlCisgICBzdGF0aWMgYXNzZXJ0IGNvbmRpdGlvbiBpcyBmYWxzZS4gICovCisjZGVmaW5lIFNUQVRJQ19BU1NFUlRfTUVTU0FHRShOT0RFKSBcCisgICgoKHN0cnVjdCB0cmVlX3N0YXRpY19hc3NlcnQgKilTVEFUSUNfQVNTRVJUX0NIRUNLIChOT0RFKSktPm1lc3NhZ2UpCisKKy8qIFNvdXJjZSBsb2NhdGlvbiBpbmZvcm1hdGlvbiBmb3IgYSBzdGF0aWMgYXNzZXJ0aW9uLiAgKi8KKyNkZWZpbmUgU1RBVElDX0FTU0VSVF9TT1VSQ0VfTE9DQVRJT04oTk9ERSkgXAorICAoKChzdHJ1Y3QgdHJlZV9zdGF0aWNfYXNzZXJ0ICopU1RBVElDX0FTU0VSVF9DSEVDSyAoTk9ERSkpLT5sb2NhdGlvbikKKworc3RydWN0IEdUWSAoKCkpIHRyZWVfc3RhdGljX2Fzc2VydCB7CisgIHN0cnVjdCB0cmVlX2NvbW1vbiBjb21tb247CisgIHRyZWUgY29uZGl0aW9uOworICB0cmVlIG1lc3NhZ2U7CisgIGxvY2F0aW9uX3QgbG9jYXRpb247Cit9OworCitzdHJ1Y3QgR1RZICgoKSkgdHJlZV9hcmd1bWVudF9wYWNrX3NlbGVjdCB7CisgIHN0cnVjdCB0cmVlX2NvbW1vbiBjb21tb247CisgIHRyZWUgYXJndW1lbnRfcGFjazsKKyAgaW50IGluZGV4OworfTsKKworLyogVGhlIGRpZmZlcmVudCBraW5kcyBvZiB0cmFpdHMgdGhhdCB3ZSBlbmNvdW50ZXIuICAqLworCit0eXBlZGVmIGVudW0gY3BfdHJhaXRfa2luZAoreworICBDUFRLX0hBU19OT1RIUk9XX0FTU0lHTiwKKyAgQ1BUS19IQVNfTk9USFJPV19DT05TVFJVQ1RPUiwKKyAgQ1BUS19IQVNfTk9USFJPV19DT1BZLAorICBDUFRLX0hBU19UUklWSUFMX0FTU0lHTiwKKyAgQ1BUS19IQVNfVFJJVklBTF9DT05TVFJVQ1RPUiwKKyAgQ1BUS19IQVNfVFJJVklBTF9DT1BZLAorICBDUFRLX0hBU19UUklWSUFMX0RFU1RSVUNUT1IsCisgIENQVEtfSEFTX1ZJUlRVQUxfREVTVFJVQ1RPUiwKKyAgQ1BUS19JU19BQlNUUkFDVCwKKyAgQ1BUS19JU19CQVNFX09GLAorICBDUFRLX0lTX0NMQVNTLAorICBDUFRLX0lTX0NPTlZFUlRJQkxFX1RPLAorICBDUFRLX0lTX0VNUFRZLAorICBDUFRLX0lTX0VOVU0sCisgIENQVEtfSVNfUE9ELAorICBDUFRLX0lTX1BPTFlNT1JQSElDLAorICBDUFRLX0lTX1NURF9MQVlPVVQsCisgIENQVEtfSVNfVFJJVklBTCwKKyAgQ1BUS19JU19VTklPTgorfSBjcF90cmFpdF9raW5kOworCisvKiBUaGUgdHlwZXMgdGhhdCB3ZSBhcmUgcHJvY2Vzc2luZy4gICovCisjZGVmaW5lIFRSQUlUX0VYUFJfVFlQRTEoTk9ERSkgXAorICAoKChzdHJ1Y3QgdHJlZV90cmFpdF9leHByICopVFJBSVRfRVhQUl9DSEVDSyAoTk9ERSkpLT50eXBlMSkKKworI2RlZmluZSBUUkFJVF9FWFBSX1RZUEUyKE5PREUpIFwKKyAgKCgoc3RydWN0IHRyZWVfdHJhaXRfZXhwciAqKVRSQUlUX0VYUFJfQ0hFQ0sgKE5PREUpKS0+dHlwZTIpCisKKy8qIFRoZSBzcGVjaWZpYyB0cmFpdCB0aGF0IHdlIGFyZSBwcm9jZXNzaW5nLiAgKi8KKyNkZWZpbmUgVFJBSVRfRVhQUl9LSU5EKE5PREUpIFwKKyAgKCgoc3RydWN0IHRyZWVfdHJhaXRfZXhwciAqKVRSQUlUX0VYUFJfQ0hFQ0sgKE5PREUpKS0+a2luZCkKKworc3RydWN0IEdUWSAoKCkpIHRyZWVfdHJhaXRfZXhwciB7CisgIHN0cnVjdCB0cmVlX2NvbW1vbiBjb21tb247CisgIHRyZWUgdHlwZTE7CisgIHRyZWUgdHlwZTI7ICAKKyAgZW51bSBjcF90cmFpdF9raW5kIGtpbmQ7Cit9OworCisvKiBCYXNlZCBvZmYgb2YgVFlQRV9BTk9OWU1PVVNfUC4gICovCisjZGVmaW5lIExBTUJEQV9UWVBFX1AoTk9ERSkgXAorICAoQ0xBU1NfVFlQRV9QIChOT0RFKSAmJiBMQU1CREFOQU1FX1AgKFRZUEVfTElOS0FHRV9JREVOVElGSUVSIChOT0RFKSkpCisKKy8qIFRlc3QgaWYgRlVOQ1RJT05fREVDTCBpcyBhIGxhbWJkYSBmdW5jdGlvbi4gICovCisjZGVmaW5lIExBTUJEQV9GVU5DVElPTl9QKEZOREVDTCkgXAorICAoREVDTF9PVkVSTE9BREVEX09QRVJBVE9SX1AgKEZOREVDTCkgPT0gQ0FMTF9FWFBSIFwKKyAgICYmIExBTUJEQV9UWVBFX1AgKENQX0RFQ0xfQ09OVEVYVCAoRk5ERUNMKSkpCisKK2VudW0gY3BfbGFtYmRhX2RlZmF1bHRfY2FwdHVyZV9tb2RlX3R5cGUgeworICBDUExEX05PTkUsCisgIENQTERfQ09QWSwKKyAgQ1BMRF9SRUZFUkVOQ0UKK307CisKKy8qIFRoZSBtZXRob2Qgb2YgZGVmYXVsdCBjYXB0dXJlLCBpZiBhbnkuICAqLworI2RlZmluZSBMQU1CREFfRVhQUl9ERUZBVUxUX0NBUFRVUkVfTU9ERShOT0RFKSBcCisgICgoKHN0cnVjdCB0cmVlX2xhbWJkYV9leHByICopTEFNQkRBX0VYUFJfQ0hFQ0sgKE5PREUpKS0+ZGVmYXVsdF9jYXB0dXJlX21vZGUpCisKKy8qIFRoZSBjYXB0dXJlLWxpc3QsIGluY2x1ZGluZyBgdGhpcycuICBFYWNoIGNhcHR1cmUgaXMgc3RvcmVkIGFzIGEgRklFTERfREVDTAorICogc28gdGhhdCB0aGUgbmFtZSwgdHlwZSwgYW5kIGZpZWxkIGFyZSBhbGwgdG9nZXRoZXIsIHdoZXRoZXIgb3Igbm90IGl0IGhhcworICogYmVlbiBhZGRlZCB0byB0aGUgbGFtYmRhJ3MgY2xhc3MgdHlwZS4KKyAgIFRSRUVfTElTVDoKKyAgICAgVFJFRV9QVVJQT1NFOiBUaGUgRklFTERfREVDTCBmb3IgdGhpcyBjYXB0dXJlLgorICAgICBUUkVFX1ZBTFVFOiBUaGUgaW5pdGlhbGl6ZXIuIFRoaXMgaXMgcGFydCBvZiBhIEdOVSBleHRlbnNpb24uICAqLworI2RlZmluZSBMQU1CREFfRVhQUl9DQVBUVVJFX0xJU1QoTk9ERSkgXAorICAoKChzdHJ1Y3QgdHJlZV9sYW1iZGFfZXhwciAqKUxBTUJEQV9FWFBSX0NIRUNLIChOT0RFKSktPmNhcHR1cmVfbGlzdCkKKworLyogVGhlIG5vZGUgaW4gdGhlIGNhcHR1cmUtbGlzdCB0aGF0IGhvbGRzIHRoZSAndGhpcycgY2FwdHVyZS4gICovCisjZGVmaW5lIExBTUJEQV9FWFBSX1RISVNfQ0FQVFVSRShOT0RFKSBcCisgICgoKHN0cnVjdCB0cmVlX2xhbWJkYV9leHByICopTEFNQkRBX0VYUFJfQ0hFQ0sgKE5PREUpKS0+dGhpc19jYXB0dXJlKQorCisvKiBQcmVkaWNhdGUgdHJhY2tpbmcgd2hldGhlciBgdGhpcycgaXMgaW4gdGhlIGVmZmVjdGl2ZSBjYXB0dXJlIHNldC4gICovCisjZGVmaW5lIExBTUJEQV9FWFBSX0NBUFRVUkVTX1RISVNfUChOT0RFKSBcCisgIExBTUJEQV9FWFBSX1RISVNfQ0FQVFVSRShOT0RFKQorCisvKiBQcmVkaWNhdGUgdHJhY2tpbmcgd2hldGhlciB0aGUgbGFtYmRhIHdhcyBkZWNsYXJlZCAnbXV0YWJsZScuICAqLworI2RlZmluZSBMQU1CREFfRVhQUl9NVVRBQkxFX1AoTk9ERSkgXAorICBUUkVFX0xBTkdfRkxBR18xIChMQU1CREFfRVhQUl9DSEVDSyAoTk9ERSkpCisKKy8qIFRydWUgaWZmIHdlIHNob3VsZCB0cnkgdG8gZGVkdWNlIHRoZSBsYW1iZGEgcmV0dXJuIHR5cGUgZnJvbSBhbnkgcmV0dXJuCisgICBzdGF0ZW1lbnQuICAqLworI2RlZmluZSBMQU1CREFfRVhQUl9ERURVQ0VfUkVUVVJOX1RZUEVfUChOT0RFKSBcCisgIFRSRUVfTEFOR19GTEFHXzIgKExBTUJEQV9FWFBSX0NIRUNLIChOT0RFKSkKKworLyogVGhlIHJldHVybiB0eXBlIGluIHRoZSBleHByZXNzaW9uLgorICogTlVMTF9UUkVFIGluZGljYXRlcyB0aGF0IG5vbmUgd2FzIHNwZWNpZmllZC4gICovCisjZGVmaW5lIExBTUJEQV9FWFBSX1JFVFVSTl9UWVBFKE5PREUpIFwKKyAgKCgoc3RydWN0IHRyZWVfbGFtYmRhX2V4cHIgKilMQU1CREFfRVhQUl9DSEVDSyAoTk9ERSkpLT5yZXR1cm5fdHlwZSkKKworLyogVGhlIHNvdXJjZSBsb2NhdGlvbiBvZiB0aGUgbGFtYmRhLiAgKi8KKyNkZWZpbmUgTEFNQkRBX0VYUFJfTE9DQVRJT04oTk9ERSkgXAorICAoKChzdHJ1Y3QgdHJlZV9sYW1iZGFfZXhwciAqKUxBTUJEQV9FWFBSX0NIRUNLIChOT0RFKSktPmxvY3VzKQorCisvKiBUaGUgbWFuZ2xpbmcgc2NvcGUgZm9yIHRoZSBsYW1iZGE6IEZVTkNUSU9OX0RFQ0wsIFBBUk1fREVDTCwgVkFSX0RFQ0wsCisgICBGSUVMRF9ERUNMIG9yIE5VTExfVFJFRS4gIElmIHRoaXMgaXMgTlVMTF9UUkVFLCB3ZSBoYXZlIG5vIGxpbmthZ2UuICAqLworI2RlZmluZSBMQU1CREFfRVhQUl9FWFRSQV9TQ09QRShOT0RFKSBcCisgICgoKHN0cnVjdCB0cmVlX2xhbWJkYV9leHByICopTEFNQkRBX0VYUFJfQ0hFQ0sgKE5PREUpKS0+ZXh0cmFfc2NvcGUpCisKKy8qIElmIEVYVFJBX1NDT1BFLCB0aGlzIGlzIHRoZSBudW1iZXIgb2YgdGhlIGxhbWJkYSB3aXRoaW4gdGhhdCBzY29wZS4gICovCisjZGVmaW5lIExBTUJEQV9FWFBSX0RJU0NSSU1JTkFUT1IoTk9ERSkgXAorICAoKChzdHJ1Y3QgdHJlZV9sYW1iZGFfZXhwciAqKUxBTUJEQV9FWFBSX0NIRUNLIChOT0RFKSktPmRpc2NyaW1pbmF0b3IpCisKK3N0cnVjdCBHVFkgKCgpKSB0cmVlX2xhbWJkYV9leHByCit7CisgIHN0cnVjdCB0cmVlX2NvbW1vbiBjb21tb247CisgIGxvY2F0aW9uX3QgbG9jdXM7CisgIGVudW0gY3BfbGFtYmRhX2RlZmF1bHRfY2FwdHVyZV9tb2RlX3R5cGUgZGVmYXVsdF9jYXB0dXJlX21vZGU7CisgIHRyZWUgY2FwdHVyZV9saXN0OworICB0cmVlIHRoaXNfY2FwdHVyZTsKKyAgdHJlZSByZXR1cm5fdHlwZTsKKyAgdHJlZSBleHRyYV9zY29wZTsKKyAgaW50IGRpc2NyaW1pbmF0b3I7Cit9OworCisvKiBBICh0eXBlZGVmLGNvbnRleHQsdXNhZ2UgbG9jYXRpb24pIHRyaXBsZXQuCisgICBJdCByZXByZXNlbnRzIGEgdHlwZWRlZiB1c2VkIHRocm91Z2ggYQorICAgY29udGV4dCBhdCBhIGdpdmVuIHNvdXJjZSBsb2NhdGlvbi4KKyAgIGUuZy4KKyAgIHN0cnVjdCBmb28geworICAgICB0eXBlZGVmIGludCBteWludDsKKyAgIH07CisKKyAgIHN0cnVjdCBiYXIgeworICAgIGZvbzo6bXlpbnQgdjsgLy8gIzE8LS0gdGhpcyBsb2NhdGlvbi4KKyAgIH07CisKKyAgIEluIGJhciwgdGhlIHRyaXBsZXQgd2lsbCBiZSAobXlpbnQsIGZvbywgIzEpLgorICAgKi8KK3N0cnVjdCBHVFkoKCkpIHF1YWxpZmllZF90eXBlZGVmX3VzYWdlX3MgeworICB0cmVlIHR5cGVkZWZfZGVjbDsKKyAgdHJlZSBjb250ZXh0OworICBsb2NhdGlvbl90IGxvY3VzOworfTsKK3R5cGVkZWYgc3RydWN0IHF1YWxpZmllZF90eXBlZGVmX3VzYWdlX3MgcXVhbGlmaWVkX3R5cGVkZWZfdXNhZ2VfdDsKK0RFRl9WRUNfTyAocXVhbGlmaWVkX3R5cGVkZWZfdXNhZ2VfdCk7CitERUZfVkVDX0FMTE9DX08gKHF1YWxpZmllZF90eXBlZGVmX3VzYWdlX3QsZ2MpOworCitzdHJ1Y3QgR1RZKCgpKSB0cmVlX3RlbXBsYXRlX2luZm8geworICBzdHJ1Y3QgdHJlZV9jb21tb24gY29tbW9uOworICBWRUMocXVhbGlmaWVkX3R5cGVkZWZfdXNhZ2VfdCxnYykgKnR5cGVkZWZzX25lZWRpbmdfYWNjZXNzX2NoZWNraW5nOworfTsKKworZW51bSBjcF90cmVlX25vZGVfc3RydWN0dXJlX2VudW0geworICBUU19DUF9HRU5FUklDLAorICBUU19DUF9JREVOVElGSUVSLAorICBUU19DUF9UUEksCisgIFRTX0NQX1BUUk1FTSwKKyAgVFNfQ1BfQklORElORywKKyAgVFNfQ1BfT1ZFUkxPQUQsCisgIFRTX0NQX0JBU0VMSU5LLAorICBUU19DUF9XUkFQUEVSLAorICBUU19DUF9ERUZBVUxUX0FSRywKKyAgVFNfQ1BfU1RBVElDX0FTU0VSVCwKKyAgVFNfQ1BfQVJHVU1FTlRfUEFDS19TRUxFQ1QsCisgIFRTX0NQX1RSQUlUX0VYUFIsCisgIFRTX0NQX0xBTUJEQV9FWFBSLAorICBUU19DUF9URU1QTEFURV9JTkZPLAorICBMQVNUX1RTX0NQX0VOVU0KK307CisKKy8qIFRoZSByZXN1bHRpbmcgdHJlZSB0eXBlLiAgKi8KK3VuaW9uIEdUWSgoZGVzYyAoImNwX3RyZWVfbm9kZV9zdHJ1Y3R1cmUgKCYlaCkiKSwKKyAgICAgICBjaGFpbl9uZXh0ICgiKHVuaW9uIGxhbmdfdHJlZV9ub2RlICopVFJFRV9DSEFJTiAoJiVoLmdlbmVyaWMpIikpKSBsYW5nX3RyZWVfbm9kZSB7CisgIHVuaW9uIHRyZWVfbm9kZSBHVFkgKCh0YWcgKCJUU19DUF9HRU5FUklDIiksCisJCQlkZXNjICgidHJlZV9ub2RlX3N0cnVjdHVyZSAoJiVoKSIpKSkgZ2VuZXJpYzsKKyAgc3RydWN0IHRlbXBsYXRlX3Bhcm1faW5kZXhfcyBHVFkgKCh0YWcgKCJUU19DUF9UUEkiKSkpIHRwaTsKKyAgc3RydWN0IHB0cm1lbV9jc3QgR1RZICgodGFnICgiVFNfQ1BfUFRSTUVNIikpKSBwdHJtZW07CisgIHN0cnVjdCB0cmVlX292ZXJsb2FkIEdUWSAoKHRhZyAoIlRTX0NQX09WRVJMT0FEIikpKSBvdmVybG9hZDsKKyAgc3RydWN0IHRyZWVfYmFzZWxpbmsgR1RZICgodGFnICgiVFNfQ1BfQkFTRUxJTksiKSkpIGJhc2VsaW5rOworICBzdHJ1Y3QgdHJlZV9kZWZhdWx0X2FyZyBHVFkgKCh0YWcgKCJUU19DUF9ERUZBVUxUX0FSRyIpKSkgZGVmYXVsdF9hcmc7CisgIHN0cnVjdCBsYW5nX2lkZW50aWZpZXIgR1RZICgodGFnICgiVFNfQ1BfSURFTlRJRklFUiIpKSkgaWRlbnRpZmllcjsKKyAgc3RydWN0IHRyZWVfc3RhdGljX2Fzc2VydCBHVFkgKCh0YWcgKCJUU19DUF9TVEFUSUNfQVNTRVJUIikpKSAKKyAgICBzdGF0aWNfYXNzZXJ0aW9uOworICBzdHJ1Y3QgdHJlZV9hcmd1bWVudF9wYWNrX3NlbGVjdCBHVFkgKCh0YWcgKCJUU19DUF9BUkdVTUVOVF9QQUNLX1NFTEVDVCIpKSkKKyAgICBhcmd1bWVudF9wYWNrX3NlbGVjdDsKKyAgc3RydWN0IHRyZWVfdHJhaXRfZXhwciBHVFkgKCh0YWcgKCJUU19DUF9UUkFJVF9FWFBSIikpKQorICAgIHRyYWl0X2V4cHJlc3Npb247CisgIHN0cnVjdCB0cmVlX2xhbWJkYV9leHByIEdUWSAoKHRhZyAoIlRTX0NQX0xBTUJEQV9FWFBSIikpKQorICAgIGxhbWJkYV9leHByZXNzaW9uOworICBzdHJ1Y3QgdHJlZV90ZW1wbGF0ZV9pbmZvIEdUWSAoKHRhZyAoIlRTX0NQX1RFTVBMQVRFX0lORk8iKSkpCisgICAgdGVtcGxhdGVfaW5mbzsKK307CisKKwwKK2VudW0gY3BfdHJlZV9pbmRleAoreworICAgIENQVElfSkFWQV9CWVRFX1RZUEUsCisgICAgQ1BUSV9KQVZBX1NIT1JUX1RZUEUsCisgICAgQ1BUSV9KQVZBX0lOVF9UWVBFLAorICAgIENQVElfSkFWQV9MT05HX1RZUEUsCisgICAgQ1BUSV9KQVZBX0ZMT0FUX1RZUEUsCisgICAgQ1BUSV9KQVZBX0RPVUJMRV9UWVBFLAorICAgIENQVElfSkFWQV9DSEFSX1RZUEUsCisgICAgQ1BUSV9KQVZBX0JPT0xFQU5fVFlQRSwKKworICAgIENQVElfV0NIQVJfREVDTCwKKyAgICBDUFRJX1ZUQUJMRV9FTlRSWV9UWVBFLAorICAgIENQVElfREVMVEFfVFlQRSwKKyAgICBDUFRJX1ZUQUJMRV9JTkRFWF9UWVBFLAorICAgIENQVElfQ0xFQU5VUF9UWVBFLAorICAgIENQVElfVlRUX1BBUk1fVFlQRSwKKworICAgIENQVElfQ0xBU1NfVFlQRSwKKyAgICBDUFRJX1VOS05PV05fVFlQRSwKKyAgICBDUFRJX0lOSVRfTElTVF9UWVBFLAorICAgIENQVElfVlRCTF9UWVBFLAorICAgIENQVElfVlRCTF9QVFJfVFlQRSwKKyAgICBDUFRJX1NURCwKKyAgICBDUFRJX0FCSSwKKyAgICBDUFRJX0NPTlNUX1RZUEVfSU5GT19UWVBFLAorICAgIENQVElfVFlQRV9JTkZPX1BUUl9UWVBFLAorICAgIENQVElfQUJPUlRfRk5ERUNMLAorICAgIENQVElfR0xPQkFMX0RFTEVURV9GTkRFQ0wsCisgICAgQ1BUSV9BR0dSX1RBRywKKworICAgIENQVElfQ1RPUl9JREVOVElGSUVSLAorICAgIENQVElfQ09NUExFVEVfQ1RPUl9JREVOVElGSUVSLAorICAgIENQVElfQkFTRV9DVE9SX0lERU5USUZJRVIsCisgICAgQ1BUSV9EVE9SX0lERU5USUZJRVIsCisgICAgQ1BUSV9DT01QTEVURV9EVE9SX0lERU5USUZJRVIsCisgICAgQ1BUSV9CQVNFX0RUT1JfSURFTlRJRklFUiwKKyAgICBDUFRJX0RFTEVUSU5HX0RUT1JfSURFTlRJRklFUiwKKyAgICBDUFRJX0RFTFRBX0lERU5USUZJRVIsCisgICAgQ1BUSV9JTl9DSEFSR0VfSURFTlRJRklFUiwKKyAgICBDUFRJX1ZUVF9QQVJNX0lERU5USUZJRVIsCisgICAgQ1BUSV9ORUxUU19JREVOVElGSUVSLAorICAgIENQVElfVEhJU19JREVOVElGSUVSLAorICAgIENQVElfUEZOX0lERU5USUZJRVIsCisgICAgQ1BUSV9WUFRSX0lERU5USUZJRVIsCisgICAgQ1BUSV9TVERfSURFTlRJRklFUiwKKworICAgIENQVElfTEFOR19OQU1FX0MsCisgICAgQ1BUSV9MQU5HX05BTUVfQ1BMVVNQTFVTLAorICAgIENQVElfTEFOR19OQU1FX0pBVkEsCisKKyAgICBDUFRJX0VNUFRZX0VYQ0VQVF9TUEVDLAorICAgIENQVElfSkNMQVNTLAorICAgIENQVElfVEVSTUlOQVRFLAorICAgIENQVElfQ0FMTF9VTkVYUEVDVEVELAorICAgIENQVElfQVRFWElUX0ZOX1BUUl9UWVBFLAorICAgIENQVElfQVRFWElULAorICAgIENQVElfRFNPX0hBTkRMRSwKKyAgICBDUFRJX0RDQVNULAorCisgICAgQ1BUSV9LRVlFRF9DTEFTU0VTLAorCisgICAgQ1BUSV9NQVgKK307CisKK2V4dGVybiBHVFkoKCkpIHRyZWUgY3BfZ2xvYmFsX3RyZWVzW0NQVElfTUFYXTsKKworI2RlZmluZSBqYXZhX2J5dGVfdHlwZV9ub2RlCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9KQVZBX0JZVEVfVFlQRV0KKyNkZWZpbmUgamF2YV9zaG9ydF90eXBlX25vZGUJCWNwX2dsb2JhbF90cmVlc1tDUFRJX0pBVkFfU0hPUlRfVFlQRV0KKyNkZWZpbmUgamF2YV9pbnRfdHlwZV9ub2RlCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9KQVZBX0lOVF9UWVBFXQorI2RlZmluZSBqYXZhX2xvbmdfdHlwZV9ub2RlCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9KQVZBX0xPTkdfVFlQRV0KKyNkZWZpbmUgamF2YV9mbG9hdF90eXBlX25vZGUJCWNwX2dsb2JhbF90cmVlc1tDUFRJX0pBVkFfRkxPQVRfVFlQRV0KKyNkZWZpbmUgamF2YV9kb3VibGVfdHlwZV9ub2RlCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9KQVZBX0RPVUJMRV9UWVBFXQorI2RlZmluZSBqYXZhX2NoYXJfdHlwZV9ub2RlCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9KQVZBX0NIQVJfVFlQRV0KKyNkZWZpbmUgamF2YV9ib29sZWFuX3R5cGVfbm9kZQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfSkFWQV9CT09MRUFOX1RZUEVdCisKKyNkZWZpbmUgd2NoYXJfZGVjbF9ub2RlCQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfV0NIQVJfREVDTF0KKyNkZWZpbmUgdnRhYmxlX2VudHJ5X3R5cGUJCWNwX2dsb2JhbF90cmVlc1tDUFRJX1ZUQUJMRV9FTlRSWV9UWVBFXQorLyogVGhlIHR5cGUgdXNlZCB0byByZXByZXNlbnQgYW4gb2Zmc2V0IGJ5IHdoaWNoIHRvIGFkanVzdCB0aGUgYHRoaXMnCisgICBwb2ludGVyIGluIHBvaW50ZXItdG8tbWVtYmVyIHR5cGVzLiAgKi8KKyNkZWZpbmUgZGVsdGFfdHlwZV9ub2RlCQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfREVMVEFfVFlQRV0KKy8qIFRoZSB0eXBlIHVzZWQgdG8gcmVwcmVzZW50IGFuIGluZGV4IGludG8gdGhlIHZ0YWJsZS4gICovCisjZGVmaW5lIHZ0YWJsZV9pbmRleF90eXBlCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9WVEFCTEVfSU5ERVhfVFlQRV0KKworI2RlZmluZSBjbGFzc190eXBlX25vZGUJCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9DTEFTU19UWVBFXQorI2RlZmluZSB1bmtub3duX3R5cGVfbm9kZQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfVU5LTk9XTl9UWVBFXQorI2RlZmluZSBpbml0X2xpc3RfdHlwZV9ub2RlCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9JTklUX0xJU1RfVFlQRV0KKyNkZWZpbmUgdnRibF90eXBlX25vZGUJCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9WVEJMX1RZUEVdCisjZGVmaW5lIHZ0YmxfcHRyX3R5cGVfbm9kZQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfVlRCTF9QVFJfVFlQRV0KKyNkZWZpbmUgc3RkX25vZGUJCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9TVERdCisjZGVmaW5lIGFiaV9ub2RlCQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfQUJJXQorI2RlZmluZSBjb25zdF90eXBlX2luZm9fdHlwZV9ub2RlCWNwX2dsb2JhbF90cmVlc1tDUFRJX0NPTlNUX1RZUEVfSU5GT19UWVBFXQorI2RlZmluZSB0eXBlX2luZm9fcHRyX3R5cGUJCWNwX2dsb2JhbF90cmVlc1tDUFRJX1RZUEVfSU5GT19QVFJfVFlQRV0KKyNkZWZpbmUgYWJvcnRfZm5kZWNsCQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfQUJPUlRfRk5ERUNMXQorI2RlZmluZSBnbG9iYWxfZGVsZXRlX2ZuZGVjbAkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfR0xPQkFMX0RFTEVURV9GTkRFQ0xdCisjZGVmaW5lIGN1cnJlbnRfYWdncgkJCWNwX2dsb2JhbF90cmVlc1tDUFRJX0FHR1JfVEFHXQorCisvKiBXZSBjYWNoZSB0aGVzZSB0cmVlIG5vZGVzIHNvIGFzIHRvIGNhbGwgZ2V0X2lkZW50aWZpZXIgbGVzcworICAgZnJlcXVlbnRseS4gICovCisKKy8qIFRoZSBuYW1lIG9mIGEgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBhbiBpbi1jaGFyZ2UgcGFyYW1ldGVyIHRvCisgICBkZWNpZGUgd2hldGhlciBvciBub3QgdG8gY29uc3RydWN0IHZpcnR1YWwgYmFzZSBjbGFzc2VzLiAgKi8KKyNkZWZpbmUgY3Rvcl9pZGVudGlmaWVyCQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfQ1RPUl9JREVOVElGSUVSXQorLyogVGhlIG5hbWUgb2YgYSBjb25zdHJ1Y3RvciB0aGF0IGNvbnN0cnVjdHMgdmlydHVhbCBiYXNlIGNsYXNzZXMuICAqLworI2RlZmluZSBjb21wbGV0ZV9jdG9yX2lkZW50aWZpZXIJY3BfZ2xvYmFsX3RyZWVzW0NQVElfQ09NUExFVEVfQ1RPUl9JREVOVElGSUVSXQorLyogVGhlIG5hbWUgb2YgYSBjb25zdHJ1Y3RvciB0aGF0IGRvZXMgbm90IGNvbnN0cnVjdCB2aXJ0dWFsIGJhc2UgY2xhc3Nlcy4gICovCisjZGVmaW5lIGJhc2VfY3Rvcl9pZGVudGlmaWVyCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9CQVNFX0NUT1JfSURFTlRJRklFUl0KKy8qIFRoZSBuYW1lIG9mIGEgZGVzdHJ1Y3RvciB0aGF0IHRha2VzIGFuIGluLWNoYXJnZSBwYXJhbWV0ZXIgdG8KKyAgIGRlY2lkZSB3aGV0aGVyIG9yIG5vdCB0byBkZXN0cm95IHZpcnR1YWwgYmFzZSBjbGFzc2VzIGFuZCB3aGV0aGVyCisgICBvciBub3QgdG8gZGVsZXRlIHRoZSBvYmplY3QuICAqLworI2RlZmluZSBkdG9yX2lkZW50aWZpZXIJCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9EVE9SX0lERU5USUZJRVJdCisvKiBUaGUgbmFtZSBvZiBhIGRlc3RydWN0b3IgdGhhdCBkZXN0cm95cyB2aXJ0dWFsIGJhc2UgY2xhc3Nlcy4gICovCisjZGVmaW5lIGNvbXBsZXRlX2R0b3JfaWRlbnRpZmllcgljcF9nbG9iYWxfdHJlZXNbQ1BUSV9DT01QTEVURV9EVE9SX0lERU5USUZJRVJdCisvKiBUaGUgbmFtZSBvZiBhIGRlc3RydWN0b3IgdGhhdCBkb2VzIG5vdCBkZXN0cm95IHZpcnR1YWwgYmFzZQorICAgY2xhc3Nlcy4gICovCisjZGVmaW5lIGJhc2VfZHRvcl9pZGVudGlmaWVyCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9CQVNFX0RUT1JfSURFTlRJRklFUl0KKy8qIFRoZSBuYW1lIG9mIGEgZGVzdHJ1Y3RvciB0aGF0IGRlc3Ryb3lzIHZpcnR1YWwgYmFzZSBjbGFzc2VzLCBhbmQKKyAgIHRoZW4gZGVsZXRlcyB0aGUgZW50aXJlIG9iamVjdC4gICovCisjZGVmaW5lIGRlbGV0aW5nX2R0b3JfaWRlbnRpZmllcgljcF9nbG9iYWxfdHJlZXNbQ1BUSV9ERUxFVElOR19EVE9SX0lERU5USUZJRVJdCisjZGVmaW5lIGRlbHRhX2lkZW50aWZpZXIJCWNwX2dsb2JhbF90cmVlc1tDUFRJX0RFTFRBX0lERU5USUZJRVJdCisjZGVmaW5lIGluX2NoYXJnZV9pZGVudGlmaWVyCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9JTl9DSEFSR0VfSURFTlRJRklFUl0KKy8qIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIgdGhhdCBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlIFZUVCB0byB1c2UKKyAgIGZvciB0aGlzIHN1Ym9iamVjdCBjb25zdHJ1Y3RvciBvciBkZXN0cnVjdG9yLiAgKi8KKyNkZWZpbmUgdnR0X3Bhcm1faWRlbnRpZmllcgkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfVlRUX1BBUk1fSURFTlRJRklFUl0KKyNkZWZpbmUgbmVsdHNfaWRlbnRpZmllcgkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfTkVMVFNfSURFTlRJRklFUl0KKyNkZWZpbmUgdGhpc19pZGVudGlmaWVyCQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfVEhJU19JREVOVElGSUVSXQorI2RlZmluZSBwZm5faWRlbnRpZmllcgkJCWNwX2dsb2JhbF90cmVlc1tDUFRJX1BGTl9JREVOVElGSUVSXQorI2RlZmluZSB2cHRyX2lkZW50aWZpZXIJCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9WUFRSX0lERU5USUZJRVJdCisvKiBUaGUgbmFtZSBvZiB0aGUgc3RkIG5hbWVzcGFjZS4gICovCisjZGVmaW5lIHN0ZF9pZGVudGlmaWVyCQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfU1REX0lERU5USUZJRVJdCisjZGVmaW5lIGxhbmdfbmFtZV9jCQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfTEFOR19OQU1FX0NdCisjZGVmaW5lIGxhbmdfbmFtZV9jcGx1c3BsdXMJCWNwX2dsb2JhbF90cmVlc1tDUFRJX0xBTkdfTkFNRV9DUExVU1BMVVNdCisjZGVmaW5lIGxhbmdfbmFtZV9qYXZhCQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfTEFOR19OQU1FX0pBVkFdCisKKy8qIEV4Y2VwdGlvbiBzcGVjaWZpZXIgdXNlZCBmb3IgdGhyb3coKS4gICovCisjZGVmaW5lIGVtcHR5X2V4Y2VwdF9zcGVjCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9FTVBUWV9FWENFUFRfU1BFQ10KKworLyogSWYgbm9uLU5VTEwsIGEgUE9JTlRFUl9UWVBFIGVxdWl2YWxlbnQgdG8gKGphdmE6Omxhbmc6OkNsYXNzKikuICAqLworI2RlZmluZSBqY2xhc3Nfbm9kZQkJCWNwX2dsb2JhbF90cmVlc1tDUFRJX0pDTEFTU10KKworLyogVGhlIGRlY2xhcmF0aW9uIGZvciBgc3RkOjp0ZXJtaW5hdGUnLiAgKi8KKyNkZWZpbmUgdGVybWluYXRlX25vZGUJCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9URVJNSU5BVEVdCisKKy8qIFRoZSBkZWNsYXJhdGlvbiBmb3IgIl9fY3hhX2NhbGxfdW5leHBlY3RlZCIuICAqLworI2RlZmluZSBjYWxsX3VuZXhwZWN0ZWRfbm9kZQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfQ0FMTF9VTkVYUEVDVEVEXQorCisvKiBUaGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24tcG9pbnRlciBhcmd1bWVudCB0byAiX19jeGFfYXRleGl0IiAob3IKKyAgICJzdGQ6OmF0ZXhpdCIsIGlmICJfX2N4YV9hdGV4aXQiIGlzIG5vdCBiZWluZyB1c2VkKS4gICovCisjZGVmaW5lIGF0ZXhpdF9mbl9wdHJfdHlwZV9ub2RlICAgICAgICAgY3BfZ2xvYmFsX3RyZWVzW0NQVElfQVRFWElUX0ZOX1BUUl9UWVBFXQorCisvKiBBIHBvaW50ZXIgdG8gYHN0ZDo6YXRleGl0Jy4gICovCisjZGVmaW5lIGF0ZXhpdF9ub2RlCQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfQVRFWElUXQorCisvKiBBIHBvaW50ZXIgdG8gYF9fZHNvX2hhbmRsZScuICAqLworI2RlZmluZSBkc29faGFuZGxlX25vZGUJCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9EU09fSEFORExFXQorCisvKiBUaGUgZGVjbGFyYXRpb24gb2YgdGhlIGR5bmFtaWNfY2FzdCBydW50aW1lLiAgKi8KKyNkZWZpbmUgZHluYW1pY19jYXN0X25vZGUJCWNwX2dsb2JhbF90cmVlc1tDUFRJX0RDQVNUXQorCisvKiBUaGUgdHlwZSBvZiBhIGRlc3RydWN0b3IuICAqLworI2RlZmluZSBjbGVhbnVwX3R5cGUJCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9DTEVBTlVQX1RZUEVdCisKKy8qIFRoZSB0eXBlIG9mIHRoZSB2dHQgcGFyYW1ldGVyIHBhc3NlZCB0byBzdWJvYmplY3QgY29uc3RydWN0b3JzIGFuZAorICAgZGVzdHJ1Y3RvcnMuICAqLworI2RlZmluZSB2dHRfcGFybV90eXBlCQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfVlRUX1BBUk1fVFlQRV0KKworLyogQSBUUkVFX0xJU1Qgb2YgdGhlIGR5bmFtaWMgY2xhc3NlcyB3aG9zZSB2dGFibGVzIG1heSBoYXZlIHRvIGJlCisgICBlbWl0dGVkIGluIHRoaXMgdHJhbnNsYXRpb24gdW5pdC4gICovCisKKyNkZWZpbmUga2V5ZWRfY2xhc3NlcwkJCWNwX2dsb2JhbF90cmVlc1tDUFRJX0tFWUVEX0NMQVNTRVNdCisKKy8qIE5vZGUgdG8gaW5kaWNhdGUgZGVmYXVsdCBhY2Nlc3MuIFRoaXMgbXVzdCBiZSBkaXN0aW5jdCBmcm9tIHRoZQorICAgYWNjZXNzIG5vZGVzIGluIHRyZWUuaC4gICovCisKKyNkZWZpbmUgYWNjZXNzX2RlZmF1bHRfbm9kZQkJbnVsbF9ub2RlCisKKy8qIEdsb2JhbCBzdGF0ZS4gICovCisKK3N0cnVjdCBHVFkoKCkpIHNhdmVkX3Njb3BlIHsKKyAgVkVDKGN4eF9zYXZlZF9iaW5kaW5nLGdjKSAqb2xkX2JpbmRpbmdzOworICB0cmVlIG9sZF9uYW1lc3BhY2U7CisgIHRyZWUgZGVjbF9uc19saXN0OworICB0cmVlIGNsYXNzX25hbWU7CisgIHRyZWUgY2xhc3NfdHlwZTsKKyAgdHJlZSBhY2Nlc3Nfc3BlY2lmaWVyOworICB0cmVlIGZ1bmN0aW9uX2RlY2w7CisgIFZFQyh0cmVlLGdjKSAqbGFuZ19iYXNlOworICB0cmVlIGxhbmdfbmFtZTsKKyAgdHJlZSB0ZW1wbGF0ZV9wYXJtczsKKyAgc3RydWN0IGNwX2JpbmRpbmdfbGV2ZWwgKnhfcHJldmlvdXNfY2xhc3NfbGV2ZWw7CisgIHRyZWUgeF9zYXZlZF90cmVlOworCisgIGludCB4X3Byb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbDsKKyAgaW50IHhfcHJvY2Vzc2luZ19zcGVjaWFsaXphdGlvbjsKKyAgQk9PTF9CSVRGSUVMRCB4X3Byb2Nlc3NpbmdfZXhwbGljaXRfaW5zdGFudGlhdGlvbiA6IDE7CisgIEJPT0xfQklURklFTEQgbmVlZF9wb3BfZnVuY3Rpb25fY29udGV4dCA6IDE7CisKKyAgaW50IHVuZXZhbHVhdGVkX29wZXJhbmQ7CisgIGludCBpbmhpYml0X2V2YWx1YXRpb25fd2FybmluZ3M7CisKKyAgc3RydWN0IHN0bXRfdHJlZV9zIHhfc3RtdF90cmVlOworCisgIHN0cnVjdCBjcF9iaW5kaW5nX2xldmVsICpjbGFzc19iaW5kaW5nczsKKyAgc3RydWN0IGNwX2JpbmRpbmdfbGV2ZWwgKmJpbmRpbmdzOworCisgIHN0cnVjdCBzYXZlZF9zY29wZSAqcHJldjsKK307CisKKy8qIFRoZSBjdXJyZW50IG9wZW4gbmFtZXNwYWNlLiAgKi8KKworI2RlZmluZSBjdXJyZW50X25hbWVzcGFjZSBzY29wZV9jaGFpbi0+b2xkX25hbWVzcGFjZQorCisvKiBUaGUgc3RhY2sgZm9yIG5hbWVzcGFjZXMgb2YgY3VycmVudCBkZWNsYXJhdGlvbnMuICAqLworCisjZGVmaW5lIGRlY2xfbmFtZXNwYWNlX2xpc3Qgc2NvcGVfY2hhaW4tPmRlY2xfbnNfbGlzdAorCisvKiBJREVOVElGSUVSX05PREU6IG5hbWUgb2YgY3VycmVudCBjbGFzcyAqLworCisjZGVmaW5lIGN1cnJlbnRfY2xhc3NfbmFtZSBzY29wZV9jaGFpbi0+Y2xhc3NfbmFtZQorCisvKiBfVFlQRTogdGhlIHR5cGUgb2YgdGhlIGN1cnJlbnQgY2xhc3MgKi8KKworI2RlZmluZSBjdXJyZW50X2NsYXNzX3R5cGUgc2NvcGVfY2hhaW4tPmNsYXNzX3R5cGUKKworLyogV2hlbiBwYXJzaW5nIGEgY2xhc3MgZGVmaW5pdGlvbiwgdGhlIGFjY2VzcyBzcGVjaWZpZXIgbW9zdCByZWNlbnRseQorICAgZ2l2ZW4gYnkgdGhlIHVzZXIsIG9yLCBpZiBubyBhY2Nlc3Mgc3BlY2lmaWVyIHdhcyBnaXZlbiwgdGhlCisgICBkZWZhdWx0IHZhbHVlIGFwcHJvcHJpYXRlIGZvciB0aGUga2luZCBvZiBjbGFzcyAoaS5lLiwgc3RydWN0LAorICAgY2xhc3MsIG9yIHVuaW9uKS4gICovCisKKyNkZWZpbmUgY3VycmVudF9hY2Nlc3Nfc3BlY2lmaWVyIHNjb3BlX2NoYWluLT5hY2Nlc3Nfc3BlY2lmaWVyCisKKy8qIFBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgbGFuZ3VhZ2UgbmFtZSBzdGFjay4gICovCisKKyNkZWZpbmUgY3VycmVudF9sYW5nX2Jhc2Ugc2NvcGVfY2hhaW4tPmxhbmdfYmFzZQorI2RlZmluZSBjdXJyZW50X2xhbmdfbmFtZSBzY29wZV9jaGFpbi0+bGFuZ19uYW1lCisKKy8qIFdoZW4gcGFyc2luZyBhIHRlbXBsYXRlIGRlY2xhcmF0aW9uLCBhIFRSRUVfTElTVCByZXByZXNlbnRzIHRoZQorICAgYWN0aXZlIHRlbXBsYXRlIHBhcmFtZXRlcnMuICBFYWNoIG5vZGUgaW4gdGhlIGxpc3QgcmVwcmVzZW50cyBvbmUKKyAgIGxldmVsIG9mIHRlbXBsYXRlIHBhcmFtZXRlcnMuICBUaGUgaW5uZXJtb3N0IGxldmVsIGlzIGZpcnN0IGluIHRoZQorICAgbGlzdC4gIFRoZSBkZXB0aCBvZiBlYWNoIGxldmVsIGlzIHN0b3JlZCBhcyBhbiBJTlRFR0VSX0NTVCBpbiB0aGUKKyAgIFRSRUVfUFVSUE9TRSBvZiBlYWNoIG5vZGUuICBUaGUgcGFyYW1ldGVycyBmb3IgdGhhdCBsZXZlbCBhcmUKKyAgIHN0b3JlZCBpbiB0aGUgVFJFRV9WQUxVRS4gICovCisKKyNkZWZpbmUgY3VycmVudF90ZW1wbGF0ZV9wYXJtcyBzY29wZV9jaGFpbi0+dGVtcGxhdGVfcGFybXMKKworI2RlZmluZSBwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2wgc2NvcGVfY2hhaW4tPnhfcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsCisjZGVmaW5lIHByb2Nlc3Npbmdfc3BlY2lhbGl6YXRpb24gc2NvcGVfY2hhaW4tPnhfcHJvY2Vzc2luZ19zcGVjaWFsaXphdGlvbgorI2RlZmluZSBwcm9jZXNzaW5nX2V4cGxpY2l0X2luc3RhbnRpYXRpb24gc2NvcGVfY2hhaW4tPnhfcHJvY2Vzc2luZ19leHBsaWNpdF9pbnN0YW50aWF0aW9uCisKKy8qIFRoZSBjYWNoZWQgY2xhc3MgYmluZGluZyBsZXZlbCwgZnJvbSB0aGUgbW9zdCByZWNlbnRseSBleGl0ZWQKKyAgIGNsYXNzLCBvciBOVUxMIGlmIG5vbmUuICAqLworCisjZGVmaW5lIHByZXZpb3VzX2NsYXNzX2xldmVsIHNjb3BlX2NoYWluLT54X3ByZXZpb3VzX2NsYXNzX2xldmVsCisKKy8qIEEgbGlzdCBvZiBwcml2YXRlIHR5cGVzIG1lbnRpb25lZCwgZm9yIGRlZmVycmVkIGFjY2VzcyBjaGVja2luZy4gICovCisKK2V4dGVybiBHVFkoKCkpIHN0cnVjdCBzYXZlZF9zY29wZSAqc2NvcGVfY2hhaW47CisKK3N0cnVjdCBHVFkoKCkpIGN4eF9pbnRfdHJlZV9tYXAgeworICB1bnNpZ25lZCBpbnQgdWlkOworICB0cmVlIHRvOworfTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBjeHhfaW50X3RyZWVfbWFwX2hhc2ggKGNvbnN0IHZvaWQgKik7CitleHRlcm4gaW50IGN4eF9pbnRfdHJlZV9tYXBfZXEgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKKworLyogR2xvYmFsIHN0YXRlIHBlcnRpbmVudCB0byB0aGUgY3VycmVudCBmdW5jdGlvbi4gICovCisKK3N0cnVjdCBHVFkoKCkpIGxhbmd1YWdlX2Z1bmN0aW9uIHsKKyAgc3RydWN0IGNfbGFuZ3VhZ2VfZnVuY3Rpb24gYmFzZTsKKworICB0cmVlIHhfY2R0b3JfbGFiZWw7CisgIHRyZWUgeF9jdXJyZW50X2NsYXNzX3B0cjsKKyAgdHJlZSB4X2N1cnJlbnRfY2xhc3NfcmVmOworICB0cmVlIHhfZWhfc3BlY19ibG9jazsKKyAgdHJlZSB4X2luX2NoYXJnZV9wYXJtOworICB0cmVlIHhfdnR0X3Bhcm07CisgIHRyZWUgeF9yZXR1cm5fdmFsdWU7CisKKyAgQk9PTF9CSVRGSUVMRCByZXR1cm5zX3ZhbHVlIDogMTsKKyAgQk9PTF9CSVRGSUVMRCByZXR1cm5zX251bGwgOiAxOworICBCT09MX0JJVEZJRUxEIHJldHVybnNfYWJub3JtYWxseSA6IDE7CisgIEJPT0xfQklURklFTEQgaW5fZnVuY3Rpb25fdHJ5X2hhbmRsZXIgOiAxOworICBCT09MX0JJVEZJRUxEIGluX2Jhc2VfaW5pdGlhbGl6ZXIgOiAxOworCisgIC8qIFRydWUgaWYgdGhpcyBmdW5jdGlvbiBjYW4gdGhyb3cgYW4gZXhjZXB0aW9uLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCBjYW5fdGhyb3cgOiAxOworCisgIGh0YWJfdCBHVFkoKHBhcmFtX2lzKHN0cnVjdCBuYW1lZF9sYWJlbF9lbnRyeSkpKSB4X25hbWVkX2xhYmVsczsKKyAgc3RydWN0IGNwX2JpbmRpbmdfbGV2ZWwgKmJpbmRpbmdzOworICBWRUModHJlZSxnYykgKnhfbG9jYWxfbmFtZXM7CisgIGh0YWJfdCBHVFkoKHBhcmFtX2lzIChzdHJ1Y3QgY3h4X2ludF90cmVlX21hcCkpKSBleHRlcm5fZGVjbF9tYXA7Cit9OworCisvKiBUaGUgY3VycmVudCBDKystc3BlY2lmaWMgcGVyLWZ1bmN0aW9uIGdsb2JhbCB2YXJpYWJsZXMuICAqLworCisjZGVmaW5lIGNwX2Z1bmN0aW9uX2NoYWluIChjZnVuLT5sYW5ndWFnZSkKKworLyogSW4gYSBjb25zdHJ1Y3RvciBkZXN0cnVjdG9yLCB0aGUgcG9pbnQgYXQgd2hpY2ggYWxsIGRlcml2ZWQgY2xhc3MKKyAgIGRlc3Ryb3lpbmcvY29uc3RydWN0aW9uIGhhcyBiZWVuIGRvbmUuICBJLmUuLCBqdXN0IGJlZm9yZSBhCisgICBjb25zdHJ1Y3RvciByZXR1cm5zLCBvciBiZWZvcmUgYW55IGJhc2UgY2xhc3MgZGVzdHJveWluZyB3aWxsIGJlIGRvbmUKKyAgIGluIGEgZGVzdHJ1Y3Rvci4gICovCisKKyNkZWZpbmUgY2R0b3JfbGFiZWwgY3BfZnVuY3Rpb25fY2hhaW4tPnhfY2R0b3JfbGFiZWwKKworLyogV2hlbiB3ZSdyZSBwcm9jZXNzaW5nIGEgbWVtYmVyIGZ1bmN0aW9uLCBjdXJyZW50X2NsYXNzX3B0ciBpcyB0aGUKKyAgIFBBUk1fREVDTCBmb3IgdGhlIGB0aGlzJyBwb2ludGVyLiAgVGhlIGN1cnJlbnRfY2xhc3NfcmVmIGlzIGFuCisgICBleHByZXNzaW9uIGZvciBgKnRoaXMnLiAgKi8KKworI2RlZmluZSBjdXJyZW50X2NsYXNzX3B0ciBcCisgIChjZnVuICYmIGNwX2Z1bmN0aW9uX2NoYWluCQkJCQlcCisgICA/IGNwX2Z1bmN0aW9uX2NoYWluLT54X2N1cnJlbnRfY2xhc3NfcHRyIDogTlVMTF9UUkVFKQorI2RlZmluZSBjdXJyZW50X2NsYXNzX3JlZiBcCisgIChjZnVuID8gY3BfZnVuY3Rpb25fY2hhaW4tPnhfY3VycmVudF9jbGFzc19yZWYgOiBOVUxMX1RSRUUpCisKKy8qIFRoZSBFSF9TUEVDX0JMT0NLIGZvciB0aGUgZXhjZXB0aW9uLXNwZWNpZmllcnMgZm9yIHRoZSBjdXJyZW50CisgICBmdW5jdGlvbiwgaWYgYW55LiAgKi8KKworI2RlZmluZSBjdXJyZW50X2VoX3NwZWNfYmxvY2sgY3BfZnVuY3Rpb25fY2hhaW4tPnhfZWhfc3BlY19ibG9jaworCisvKiBUaGUgYF9faW5fY2hyZycgcGFyYW1ldGVyIGZvciB0aGUgY3VycmVudCBmdW5jdGlvbi4gIE9ubHkgdXNlZCBmb3IKKyAgIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMuICAqLworCisjZGVmaW5lIGN1cnJlbnRfaW5fY2hhcmdlX3Bhcm0gY3BfZnVuY3Rpb25fY2hhaW4tPnhfaW5fY2hhcmdlX3Bhcm0KKworLyogVGhlIGBfX3Z0dF9wYXJtJyBwYXJhbWV0ZXIgZm9yIHRoZSBjdXJyZW50IGZ1bmN0aW9uLiAgT25seSB1c2VkIGZvcgorICAgY29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycy4gICovCisKKyNkZWZpbmUgY3VycmVudF92dHRfcGFybSBjcF9mdW5jdGlvbl9jaGFpbi0+eF92dHRfcGFybQorCisvKiBTZXQgdG8gMCBhdCBiZWdpbm5pbmcgb2YgYSBmdW5jdGlvbiBkZWZpbml0aW9uLCBzZXQgdG8gMSBpZgorICAgYSByZXR1cm4gc3RhdGVtZW50IHRoYXQgc3BlY2lmaWVzIGEgcmV0dXJuIHZhbHVlIGlzIHNlZW4uICAqLworCisjZGVmaW5lIGN1cnJlbnRfZnVuY3Rpb25fcmV0dXJuc192YWx1ZSBjcF9mdW5jdGlvbl9jaGFpbi0+cmV0dXJuc192YWx1ZQorCisvKiBTZXQgdG8gMCBhdCBiZWdpbm5pbmcgb2YgYSBmdW5jdGlvbiBkZWZpbml0aW9uLCBzZXQgdG8gMSBpZgorICAgYSByZXR1cm4gc3RhdGVtZW50IHdpdGggbm8gYXJndW1lbnQgaXMgc2Vlbi4gICovCisKKyNkZWZpbmUgY3VycmVudF9mdW5jdGlvbl9yZXR1cm5zX251bGwgY3BfZnVuY3Rpb25fY2hhaW4tPnJldHVybnNfbnVsbAorCisvKiBTZXQgdG8gMCBhdCBiZWdpbm5pbmcgb2YgYSBmdW5jdGlvbiBkZWZpbml0aW9uLCBzZXQgdG8gMSBpZgorICAgYSBjYWxsIHRvIGEgbm9yZXR1cm4gZnVuY3Rpb24gaXMgc2Vlbi4gICovCisKKyNkZWZpbmUgY3VycmVudF9mdW5jdGlvbl9yZXR1cm5zX2Fibm9ybWFsbHkgXAorICBjcF9mdW5jdGlvbl9jaGFpbi0+cmV0dXJuc19hYm5vcm1hbGx5CisKKy8qIE5vbnplcm8gaWYgd2UgYXJlIHByb2Nlc3NpbmcgYSBiYXNlIGluaXRpYWxpemVyLiAgWmVybyBlbHNld2hlcmUuICAqLworI2RlZmluZSBpbl9iYXNlX2luaXRpYWxpemVyIGNwX2Z1bmN0aW9uX2NoYWluLT5pbl9iYXNlX2luaXRpYWxpemVyCisKKyNkZWZpbmUgaW5fZnVuY3Rpb25fdHJ5X2hhbmRsZXIgY3BfZnVuY3Rpb25fY2hhaW4tPmluX2Z1bmN0aW9uX3RyeV9oYW5kbGVyCisKKy8qIEV4cHJlc3Npb24gYWx3YXlzIHJldHVybmVkIGZyb20gZnVuY3Rpb24sIG9yIGVycm9yX21hcmtfbm9kZQorICAgb3RoZXJ3aXNlLCBmb3IgdXNlIGJ5IHRoZSBhdXRvbWF0aWMgbmFtZWQgcmV0dXJuIHZhbHVlIG9wdGltaXphdGlvbi4gICovCisKKyNkZWZpbmUgY3VycmVudF9mdW5jdGlvbl9yZXR1cm5fdmFsdWUgXAorICAoY3BfZnVuY3Rpb25fY2hhaW4tPnhfcmV0dXJuX3ZhbHVlKQorCisvKiBUcnVlIGlmIE5BTUUgaXMgdGhlIElERU5USUZJRVJfTk9ERSBmb3IgYW4gb3ZlcmxvYWRlZCAib3BlcmF0b3IKKyAgIG5ldyIgb3IgIm9wZXJhdG9yIGRlbGV0ZSIuICAqLworI2RlZmluZSBORVdfREVMRVRFX09QTkFNRV9QKE5BTUUpCQlcCisgICgoTkFNRSkgPT0gYW5zaV9vcG5hbWUgKE5FV19FWFBSKQkJXAorICAgfHwgKE5BTUUpID09IGFuc2lfb3BuYW1lIChWRUNfTkVXX0VYUFIpCVwKKyAgIHx8IChOQU1FKSA9PSBhbnNpX29wbmFtZSAoREVMRVRFX0VYUFIpCVwKKyAgIHx8IChOQU1FKSA9PSBhbnNpX29wbmFtZSAoVkVDX0RFTEVURV9FWFBSKSkKKworI2RlZmluZSBhbnNpX29wbmFtZShDT0RFKSBcCisgIChvcGVyYXRvcl9uYW1lX2luZm9bKGludCkgKENPREUpXS5pZGVudGlmaWVyKQorI2RlZmluZSBhbnNpX2Fzc29wbmFtZShDT0RFKSBcCisgIChhc3NpZ25tZW50X29wZXJhdG9yX25hbWVfaW5mb1soaW50KSAoQ09ERSldLmlkZW50aWZpZXIpCisKKy8qIFRydWUgaWYgTk9ERSBpcyBhbiBlcnJvbmVvdXMgZXhwcmVzc2lvbi4gICovCisKKyNkZWZpbmUgZXJyb3Jfb3BlcmFuZF9wKE5PREUpCQkJCQlcCisgICgoTk9ERSkgPT0gZXJyb3JfbWFya19ub2RlCQkJCQlcCisgICB8fCAoKE5PREUpICYmIFRSRUVfVFlQRSAoKE5PREUpKSA9PSBlcnJvcl9tYXJrX25vZGUpKQorDAorLyogVFJVRSBpZiBhIHRyZWUgY29kZSByZXByZXNlbnRzIGEgc3RhdGVtZW50LiAgKi8KK2V4dGVybiBib29sIHN0YXRlbWVudF9jb2RlX3BbTUFYX1RSRUVfQ09ERVNdOworCisjZGVmaW5lIFNUQVRFTUVOVF9DT0RFX1AoQ09ERSkgc3RhdGVtZW50X2NvZGVfcFsoaW50KSAoQ09ERSldCisKK2VudW0gbGFuZ3VhZ2VzIHsgbGFuZ19jLCBsYW5nX2NwbHVzcGx1cywgbGFuZ19qYXZhIH07CisKKy8qIE1hY3JvcyB0byBtYWtlIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbnMnIGxpdmVzIGVhc2llci4gICovCisjZGVmaW5lIFRZUEVfSURFTlRJRklFUihOT0RFKSAoREVDTF9OQU1FIChUWVBFX05BTUUgKE5PREUpKSkKKyNkZWZpbmUgVFlQRV9MSU5LQUdFX0lERU5USUZJRVIoTk9ERSkgXAorICAoVFlQRV9JREVOVElGSUVSIChUWVBFX01BSU5fVkFSSUFOVCAoTk9ERSkpKQorI2RlZmluZSBUWVBFX05BTUVfU1RSSU5HKE5PREUpIChJREVOVElGSUVSX1BPSU5URVIgKFRZUEVfSURFTlRJRklFUiAoTk9ERSkpKQorI2RlZmluZSBUWVBFX05BTUVfTEVOR1RIKE5PREUpIChJREVOVElGSUVSX0xFTkdUSCAoVFlQRV9JREVOVElGSUVSIChOT0RFKSkpCisKKy8qIE5vbnplcm8gaWYgTk9ERSBoYXMgbm8gbmFtZSBmb3IgbGlua2FnZSBwdXJwb3Nlcy4gICovCisjZGVmaW5lIFRZUEVfQU5PTllNT1VTX1AoTk9ERSkgXAorICAoVEFHR0VEX1RZUEVfUCAoTk9ERSkgJiYgQU5PTl9BR0dSTkFNRV9QIChUWVBFX0xJTktBR0VfSURFTlRJRklFUiAoTk9ERSkpKQorCisvKiBUaGUgX0RFQ0wgZm9yIHRoaXMgX1RZUEUuICAqLworI2RlZmluZSBUWVBFX01BSU5fREVDTChOT0RFKSAoVFlQRV9TVFVCX0RFQ0wgKFRZUEVfTUFJTl9WQVJJQU5UIChOT0RFKSkpCisKKy8qIE5vbnplcm8gaWYgVCBpcyBhIGNsYXNzIChvciBzdHJ1Y3Qgb3IgdW5pb24pIHR5cGUuICBBbHNvIG5vbnplcm8KKyAgIGZvciB0ZW1wbGF0ZSB0eXBlIHBhcmFtZXRlcnMsIHR5cGVuYW1lIHR5cGVzLCBhbmQgaW5zdGFudGlhdGVkCisgICB0ZW1wbGF0ZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLiAgS2VlcCB0aGVzZSBjaGVja3MgaW4gYXNjZW5kaW5nIGNvZGUKKyAgIG9yZGVyLiAgKi8KKyNkZWZpbmUgTUFZQkVfQ0xBU1NfVFlQRV9QKFQpCQkJCQlcCisgIChUUkVFX0NPREUgKFQpID09IFRFTVBMQVRFX1RZUEVfUEFSTQkJCVwKKyAgIHx8IFRSRUVfQ09ERSAoVCkgPT0gVFlQRU5BTUVfVFlQRQkJCVwKKyAgIHx8IFRSRUVfQ09ERSAoVCkgPT0gVFlQRU9GX1RZUEUJCQlcCisgICB8fCBUUkVFX0NPREUgKFQpID09IEJPVU5EX1RFTVBMQVRFX1RFTVBMQVRFX1BBUk0JXAorICAgfHwgVFJFRV9DT0RFIChUKSA9PSBERUNMVFlQRV9UWVBFCQkJXAorICAgfHwgQ0xBU1NfVFlQRV9QIChUKSkKKworLyogU2V0IENMQVNTX1RZUEVfUCBmb3IgVCB0byBWQUwuICBUIG11c3QgYmUgYSBjbGFzcywgc3RydWN0LCBvcgorICAgdW5pb24gdHlwZS4gICovCisjZGVmaW5lIFNFVF9DTEFTU19UWVBFX1AoVCwgVkFMKSBcCisgIChUWVBFX0xBTkdfRkxBR181IChUKSA9IChWQUwpKQorCisvKiBOb256ZXJvIGlmIFQgaXMgYSBjbGFzcyB0eXBlLiAgWmVybyBmb3IgdGVtcGxhdGUgdHlwZSBwYXJhbWV0ZXJzLAorICAgdHlwZW5hbWUgdHlwZXMsIGFuZCBzbyBmb3J0aC4gICovCisjZGVmaW5lIENMQVNTX1RZUEVfUChUKSBcCisgIChSRUNPUkRfT1JfVU5JT05fQ09ERV9QIChUUkVFX0NPREUgKFQpKSAmJiBUWVBFX0xBTkdfRkxBR181IChUKSkKKworLyogTm9uemVybyBpZiBUIGlzIGEgY2xhc3MgdHlwZSBidXQgbm90IGFuIHVuaW9uLiAgKi8KKyNkZWZpbmUgTk9OX1VOSU9OX0NMQVNTX1RZUEVfUChUKSBcCisgIChDTEFTU19UWVBFX1AgKFQpICYmIFRSRUVfQ09ERSAoVCkgIT0gVU5JT05fVFlQRSkKKworLyogS2VlcCB0aGVzZSBjaGVja3MgaW4gYXNjZW5kaW5nIGNvZGUgb3JkZXIuICAqLworI2RlZmluZSBSRUNPUkRfT1JfVU5JT05fQ09ERV9QKFQpCVwKKyAgKChUKSA9PSBSRUNPUkRfVFlQRSB8fCAoVCkgPT0gVU5JT05fVFlQRSkKKyNkZWZpbmUgVEFHR0VEX1RZUEVfUChUKSBcCisgIChDTEFTU19UWVBFX1AgKFQpIHx8IFRSRUVfQ09ERSAoVCkgPT0gRU5VTUVSQUxfVFlQRSkKKyNkZWZpbmUgSVNfT1ZFUkxPQURfVFlQRShUKSBUQUdHRURfVFlQRV9QIChUKQorCisvKiBUcnVlIGlmIHRoaXMgYSAiSmF2YSIgdHlwZSwgZGVmaW5lZCBpbiAnZXh0ZXJuICJKYXZhIicuICAqLworI2RlZmluZSBUWVBFX0ZPUl9KQVZBKE5PREUpIFRZUEVfTEFOR19GTEFHXzMgKE5PREUpCisKKy8qIFRydWUgaWYgdGhpcyB0eXBlIGlzIGRlcGVuZGVudC4gIFRoaXMgcHJlZGljYXRlIGlzIG9ubHkgdmFsaWQgaWYKKyAgIFRZUEVfREVQRU5ERU5UX1BfVkFMSUQgaXMgdHJ1ZS4gICovCisjZGVmaW5lIFRZUEVfREVQRU5ERU5UX1AoTk9ERSkgVFlQRV9MQU5HX0ZMQUdfMCAoTk9ERSkKKworLyogVHJ1ZSBpZiBkZXBlbmRlbnRfdHlwZV9wIGhhcyBiZWVuIGNhbGxlZCBmb3IgdGhpcyB0eXBlLCB3aXRoIHRoZQorICAgcmVzdWx0IHRoYXQgVFlQRV9ERVBFTkRFTlRfUCBpcyB2YWxpZC4gICovCisjZGVmaW5lIFRZUEVfREVQRU5ERU5UX1BfVkFMSUQoTk9ERSkgVFlQRV9MQU5HX0ZMQUdfNihOT0RFKQorCisvKiBOb256ZXJvIGlmIHRoaXMgdHlwZSBpcyBjb25zdC1xdWFsaWZpZWQuICAqLworI2RlZmluZSBDUF9UWVBFX0NPTlNUX1AoTk9ERSkJCQkJXAorICAoKGNwX3R5cGVfcXVhbHMgKE5PREUpICYgVFlQRV9RVUFMX0NPTlNUKSAhPSAwKQorCisvKiBOb256ZXJvIGlmIHRoaXMgdHlwZSBpcyB2b2xhdGlsZS1xdWFsaWZpZWQuICAqLworI2RlZmluZSBDUF9UWVBFX1ZPTEFUSUxFX1AoTk9ERSkJCQlcCisgICgoY3BfdHlwZV9xdWFscyAoTk9ERSkgJiBUWVBFX1FVQUxfVk9MQVRJTEUpICE9IDApCisKKy8qIE5vbnplcm8gaWYgdGhpcyB0eXBlIGlzIHJlc3RyaWN0LXF1YWxpZmllZC4gICovCisjZGVmaW5lIENQX1RZUEVfUkVTVFJJQ1RfUChOT0RFKQkJCVwKKyAgKChjcF90eXBlX3F1YWxzIChOT0RFKSAmIFRZUEVfUVVBTF9SRVNUUklDVCkgIT0gMCkKKworLyogTm9uemVybyBpZiB0aGlzIHR5cGUgaXMgY29uc3QtcXVhbGlmaWVkLCBidXQgbm90CisgICB2b2xhdGlsZS1xdWFsaWZpZWQuICBPdGhlciBxdWFsaWZpZXJzIGFyZSBpZ25vcmVkLiAgVGhpcyBtYWNybyBpcworICAgdXNlZCB0byB0ZXN0IHdoZXRoZXIgb3Igbm90IGl0IGlzIE9LIHRvIGJpbmQgYW4gcnZhbHVlIHRvIGEKKyAgIHJlZmVyZW5jZS4gICovCisjZGVmaW5lIENQX1RZUEVfQ09OU1RfTk9OX1ZPTEFUSUxFX1AoTk9ERSkJCQkJXAorICAoKGNwX3R5cGVfcXVhbHMgKE5PREUpICYgKFRZUEVfUVVBTF9DT05TVCB8IFRZUEVfUVVBTF9WT0xBVElMRSkpCVwKKyAgID09IFRZUEVfUVVBTF9DT05TVCkKKworI2RlZmluZSBGVU5DVElPTl9BUkdfQ0hBSU4oTk9ERSkgXAorICBUUkVFX0NIQUlOIChUWVBFX0FSR19UWVBFUyAoVFJFRV9UWVBFIChOT0RFKSkpCisKKy8qIEdpdmVuIGEgRlVOQ1RJT05fREVDTCwgcmV0dXJucyB0aGUgZmlyc3QgVFJFRV9MSVNUIG91dCBvZiBUWVBFX0FSR19UWVBFUworICAgd2hpY2ggcmVmZXJzIHRvIGEgdXNlci13cml0dGVuIHBhcmFtZXRlci4gICovCisjZGVmaW5lIEZVTkNUSU9OX0ZJUlNUX1VTRVJfUEFSTVRZUEUoTk9ERSkgXAorICBza2lwX2FydGlmaWNpYWxfcGFybXNfZm9yICgoTk9ERSksIFRZUEVfQVJHX1RZUEVTIChUUkVFX1RZUEUgKE5PREUpKSkKKworLyogU2ltaWxhcmx5LCBidXQgZm9yIERFQ0xfQVJHVU1FTlRTLiAgKi8KKyNkZWZpbmUgRlVOQ1RJT05fRklSU1RfVVNFUl9QQVJNKE5PREUpIFwKKyAgc2tpcF9hcnRpZmljaWFsX3Bhcm1zX2ZvciAoKE5PREUpLCBERUNMX0FSR1VNRU5UUyAoTk9ERSkpCisKKy8qIE5vbnplcm8gaWZmIFRZUEUgaXMgZGVyaXZlZCBmcm9tIFBBUkVOVC4gSWdub3JlcyBhY2Nlc3NpYmlsaXR5IGFuZAorICAgYW1iaWd1aXR5IGlzc3Vlcy4gICovCisjZGVmaW5lIERFUklWRURfRlJPTV9QKFBBUkVOVCwgVFlQRSkgXAorICAobG9va3VwX2Jhc2UgKChUWVBFKSwgKFBBUkVOVCksIGJhX2FueSwgTlVMTCkgIT0gTlVMTF9UUkVFKQorLyogTm9uemVybyBpZmYgVFlQRSBpcyB1bmlxdWVseSBkZXJpdmVkIGZyb20gUEFSRU5ULiBJZ25vcmVzCisgICBhY2Nlc3NpYmlsaXR5LiAgKi8KKyNkZWZpbmUgVU5JUVVFTFlfREVSSVZFRF9GUk9NX1AoUEFSRU5ULCBUWVBFKSBcCisgIChsb29rdXBfYmFzZSAoKFRZUEUpLCAoUEFSRU5UKSwgYmFfdW5pcXVlIHwgYmFfcXVpZXQsIE5VTEwpICE9IE5VTExfVFJFRSkKKy8qIE5vbnplcm8gaWZmIFRZUEUgaXMgcHVibGljbHkgJiB1bmlxdWVseSBkZXJpdmVkIGZyb20gUEFSRU5ULiAgKi8KKyNkZWZpbmUgUFVCTElDTFlfVU5JUVVFTFlfREVSSVZFRF9QKFBBUkVOVCwgVFlQRSkgXAorICAobG9va3VwX2Jhc2UgKChUWVBFKSwgKFBBUkVOVCksIGJhX2lnbm9yZV9zY29wZSB8IGJhX2NoZWNrIHwgYmFfcXVpZXQsIFwKKwkJTlVMTCkgIT0gTlVMTF9UUkVFKQorCisvKiBHaXZlcyB0aGUgdmlzaWJpbGl0eSBzcGVjaWZpY2F0aW9uIGZvciBhIGNsYXNzIHR5cGUuICAqLworI2RlZmluZSBDTEFTU1RZUEVfVklTSUJJTElUWShUWVBFKQkJXAorCURFQ0xfVklTSUJJTElUWSAoVFlQRV9OQU1FIChUWVBFKSkKKyNkZWZpbmUgQ0xBU1NUWVBFX1ZJU0lCSUxJVFlfU1BFQ0lGSUVEKFRZUEUpCVwKKwlERUNMX1ZJU0lCSUxJVFlfU1BFQ0lGSUVEIChUWVBFX05BTUUgKFRZUEUpKQorCit0eXBlZGVmIHN0cnVjdCBHVFkgKCgpKSB0cmVlX3BhaXJfcyB7CisgIHRyZWUgcHVycG9zZTsKKyAgdHJlZSB2YWx1ZTsKK30gdHJlZV9wYWlyX3M7Cit0eXBlZGVmIHRyZWVfcGFpcl9zICp0cmVlX3BhaXJfcDsKK0RFRl9WRUNfTyAodHJlZV9wYWlyX3MpOworREVGX1ZFQ19BTExPQ19PICh0cmVlX3BhaXJfcyxnYyk7CisKKy8qIFRoaXMgaXMgYSBmZXcgaGVhZGVyIGZsYWdzIGZvciAnc3RydWN0IGxhbmdfdHlwZScuICBBY3R1YWxseSwKKyAgIGFsbCBidXQgdGhlIGZpcnN0IGFyZSB1c2VkIG9ubHkgZm9yIGxhbmdfdHlwZV9jbGFzczsgdGhleQorICAgYXJlIHB1dCBpbiB0aGlzIHN0cnVjdHVyZSB0byBzYXZlIHNwYWNlLiAgKi8KK3N0cnVjdCBHVFkoKCkpIGxhbmdfdHlwZV9oZWFkZXIgeworICBCT09MX0JJVEZJRUxEIGlzX2xhbmdfdHlwZV9jbGFzcyA6IDE7CisKKyAgQk9PTF9CSVRGSUVMRCBoYXNfdHlwZV9jb252ZXJzaW9uIDogMTsKKyAgQk9PTF9CSVRGSUVMRCBoYXNfaW5pdF9yZWYgOiAxOworICBCT09MX0JJVEZJRUxEIGhhc19kZWZhdWx0X2N0b3IgOiAxOworICBCT09MX0JJVEZJRUxEIGNvbnN0X25lZWRzX2luaXQgOiAxOworICBCT09MX0JJVEZJRUxEIHJlZl9uZWVkc19pbml0IDogMTsKKyAgQk9PTF9CSVRGSUVMRCBoYXNfY29uc3RfYXNzaWduX3JlZiA6IDE7CisKKyAgQk9PTF9CSVRGSUVMRCBzcGFyZSA6IDE7Cit9OworCisvKiBUaGlzIHN0cnVjdHVyZSBwcm92aWRlcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3ZlIGFuZCBiZXlvbmQKKyAgIHdoYXQgaXMgcHJvdmlkZSBpbiB0aGUgb3JkaW5hcnkgdHJlZV90eXBlLiAgSW4gdGhlIHBhc3QsIHdlIHVzZWQgaXQKKyAgIGZvciB0aGUgdHlwZXMgb2YgY2xhc3MgdHlwZXMsIHRlbXBsYXRlIHBhcmFtZXRlcnMgdHlwZXMsIHR5cGVuYW1lCisgICB0eXBlcywgYW5kIHNvIGZvcnRoLiAgSG93ZXZlciwgdGhlcmUgY2FuIGJlIG1hbnkgKHRlbnMgdG8gaHVuZHJlZHMKKyAgIG9mIHRob3VzYW5kcykgb2YgdGVtcGxhdGUgcGFyYW1ldGVyIHR5cGVzIGluIGEgY29tcGlsYXRpb24sIGFuZAorICAgdGhlcmUncyBubyBuZWVkIGZvciB0aGlzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGhhdCBjYXNlLgorICAgVGhlcmVmb3JlLCB3ZSBub3cgdXNlIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgb25seSBmb3IgY2xhc3MgdHlwZXMuCisKKyAgIEluIHRoZSBwYXN0LCBpdCB3YXMgdGhvdWdodCB0aGF0IHRoZXJlIHdvdWxkIGJlIHJlbGF0aXZlbHkgZmV3CisgICBjbGFzcyB0eXBlcy4gIEhvd2V2ZXIsIGluIHRoZSBwcmVzZW5jZSBvZiBoZWF2eSB1c2Ugb2YgdGVtcGxhdGVzLAorICAgbWFueSAoaS5lLiwgdGhvdXNhbmRzKSBvZiBjbGFzc2VzIGNhbiBlYXNpbHkgYmUgZ2VuZXJhdGVkLgorICAgVGhlcmVmb3JlLCB3ZSBzaG91bGQgZW5kZWF2b3IgdG8ga2VlcCB0aGUgc2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSB0bworICAgYSBtaW5pbXVtLiAgKi8KK3N0cnVjdCBHVFkoKCkpIGxhbmdfdHlwZV9jbGFzcyB7CisgIHN0cnVjdCBsYW5nX3R5cGVfaGVhZGVyIGg7CisKKyAgdW5zaWduZWQgY2hhciBhbGlnbjsKKworICB1bnNpZ25lZCBoYXNfbXV0YWJsZSA6IDE7CisgIHVuc2lnbmVkIGNvbV9pbnRlcmZhY2UgOiAxOworICB1bnNpZ25lZCBub25fcG9kX2NsYXNzIDogMTsKKyAgdW5zaWduZWQgbmVhcmx5X2VtcHR5X3AgOiAxOworICB1bnNpZ25lZCB1c2VyX2FsaWduIDogMTsKKyAgdW5zaWduZWQgaGFzX2Fzc2lnbl9yZWYgOiAxOworICB1bnNpZ25lZCBoYXNfbmV3IDogMTsKKyAgdW5zaWduZWQgaGFzX2FycmF5X25ldyA6IDE7CisKKyAgdW5zaWduZWQgZ2V0c19kZWxldGUgOiAyOworICB1bnNpZ25lZCBpbnRlcmZhY2Vfb25seSA6IDE7CisgIHVuc2lnbmVkIGludGVyZmFjZV91bmtub3duIDogMTsKKyAgdW5zaWduZWQgY29udGFpbnNfZW1wdHlfY2xhc3NfcCA6IDE7CisgIHVuc2lnbmVkIGFub25fYWdnciA6IDE7CisgIHVuc2lnbmVkIG5vbl96ZXJvX2luaXQgOiAxOworICB1bnNpZ25lZCBlbXB0eV9wIDogMTsKKworICB1bnNpZ25lZCB2ZWNfbmV3X3VzZXNfY29va2llIDogMTsKKyAgdW5zaWduZWQgZGVjbGFyZWRfY2xhc3MgOiAxOworICB1bnNpZ25lZCBkaWFtb25kX3NoYXBlZCA6IDE7CisgIHVuc2lnbmVkIHJlcGVhdGVkX2Jhc2UgOiAxOworICB1bnNpZ25lZCBiZWluZ19kZWZpbmVkIDogMTsKKyAgdW5zaWduZWQgamF2YV9pbnRlcmZhY2UgOiAxOworICB1bnNpZ25lZCBkZWJ1Z19yZXF1ZXN0ZWQgOiAxOworICB1bnNpZ25lZCBmaWVsZHNfcmVhZG9ubHkgOiAxOworCisgIHVuc2lnbmVkIHVzZV90ZW1wbGF0ZSA6IDI7CisgIHVuc2lnbmVkIHB0cm1lbWZ1bmNfZmxhZyA6IDE7CisgIHVuc2lnbmVkIHdhc19hbm9ueW1vdXMgOiAxOworICB1bnNpZ25lZCBsYXp5X2RlZmF1bHRfY3RvciA6IDE7CisgIHVuc2lnbmVkIGxhenlfY29weV9jdG9yIDogMTsKKyAgdW5zaWduZWQgbGF6eV9hc3NpZ25tZW50X29wIDogMTsKKyAgdW5zaWduZWQgbGF6eV9kZXN0cnVjdG9yIDogMTsKKworICB1bnNpZ25lZCBoYXNfY29uc3RfaW5pdF9yZWYgOiAxOworICB1bnNpZ25lZCBoYXNfY29tcGxleF9pbml0X3JlZiA6IDE7CisgIHVuc2lnbmVkIGhhc19jb21wbGV4X2Fzc2lnbl9yZWYgOiAxOworICB1bnNpZ25lZCBub25fYWdncmVnYXRlIDogMTsKKyAgdW5zaWduZWQgaGFzX2NvbXBsZXhfZGZsdCA6IDE7CisgIHVuc2lnbmVkIGhhc19saXN0X2N0b3IgOiAxOworICB1bnNpZ25lZCBub25fc3RkX2xheW91dCA6IDE7CisgIHVuc2lnbmVkIGxhenlfbW92ZV9jdG9yIDogMTsKKyAgdW5zaWduZWQgaXNfbGl0ZXJhbCA6IDE7CisKKyAgLyogV2hlbiBhZGRpbmcgYSBmbGFnIGhlcmUsIGNvbnNpZGVyIHdoZXRoZXIgb3Igbm90IGl0IG91Z2h0IHRvCisgICAgIGFwcGx5IHRvIGEgdGVtcGxhdGUgaW5zdGFuY2UgaWYgaXQgYXBwbGllcyB0byB0aGUgdGVtcGxhdGUuICBJZgorICAgICBzbywgbWFrZSBzdXJlIHRvIGNvcHkgaXQgaW4gaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUhICAqLworCisgIC8qIFRoZXJlIGFyZSBzb21lIGJpdHMgbGVmdCB0byBmaWxsIG91dCBhIDMyLWJpdCB3b3JkLiAgS2VlcCB0cmFjaworICAgICBvZiB0aGlzIGJ5IHVwZGF0aW5nIHRoZSBzaXplIG9mIHRoaXMgYml0ZmllbGQgd2hlbmV2ZXIgeW91IGFkZCBvcgorICAgICByZW1vdmUgYSBmbGFnLiAgKi8KKyAgdW5zaWduZWQgZHVtbXkgOiA3OworCisgIHRyZWUgcHJpbWFyeV9iYXNlOworICBWRUModHJlZV9wYWlyX3MsZ2MpICp2Y2FsbF9pbmRpY2VzOworICB0cmVlIHZ0YWJsZXM7CisgIHRyZWUgdHlwZWluZm9fdmFyOworICBWRUModHJlZSxnYykgKnZiYXNlczsKKyAgYmluZGluZ190YWJsZSBuZXN0ZWRfdWR0czsKKyAgdHJlZSBhc19iYXNlOworICBWRUModHJlZSxnYykgKnB1cmVfdmlydHVhbHM7CisgIHRyZWUgZnJpZW5kX2NsYXNzZXM7CisgIFZFQyh0cmVlLGdjKSAqIEdUWSgocmVvcmRlciAoInJlc29ydF90eXBlX21ldGhvZF92ZWMiKSkpIG1ldGhvZHM7CisgIHRyZWUga2V5X21ldGhvZDsKKyAgdHJlZSBkZWNsX2xpc3Q7CisgIHRyZWUgdGVtcGxhdGVfaW5mbzsKKyAgdHJlZSBiZWZyaWVuZGluZ19jbGFzc2VzOworICAvKiBJbiBhIFJFQ09SRF9UWVBFLCBpbmZvcm1hdGlvbiBzcGVjaWZpYyB0byBPYmplY3RpdmUtQysrLCBzdWNoCisgICAgIGFzIGEgbGlzdCBvZiBhZG9wdGVkIHByb3RvY29scyBvciBhIHBvaW50ZXIgdG8gYSBjb3JyZXNwb25kaW5nCisgICAgIEBpbnRlcmZhY2UuICBTZWUgb2JqYy9vYmpjLWFjdC5oIGZvciBkZXRhaWxzLiAgKi8KKyAgdHJlZSBvYmpjX2luZm87CisgIC8qIHNvcnRlZF9maWVsZHMgaXMgc29ydGVkIGJhc2VkIG9uIGEgcG9pbnRlciwgc28gd2UgbmVlZCB0byBiZSBhYmxlCisgICAgIHRvIHJlc29ydCBpdCBpZiBwb2ludGVycyBnZXQgcmVhcnJhbmdlZC4gICovCisgIHN0cnVjdCBzb3J0ZWRfZmllbGRzX3R5cGUgKiBHVFkgKChyZW9yZGVyICgicmVzb3J0X3NvcnRlZF9maWVsZHMiKSkpCisgICAgc29ydGVkX2ZpZWxkczsKKyAgLyogRklYTUUgcmV1c2UgYW5vdGhlciBmaWVsZD8gICovCisgIHRyZWUgbGFtYmRhX2V4cHI7Cit9OworCitzdHJ1Y3QgR1RZKCgpKSBsYW5nX3R5cGVfcHRybWVtIHsKKyAgc3RydWN0IGxhbmdfdHlwZV9oZWFkZXIgaDsKKyAgdHJlZSByZWNvcmQ7Cit9OworCitzdHJ1Y3QgR1RZKCgpKSBsYW5nX3R5cGUgeworICB1bmlvbiBsYW5nX3R5cGVfdQorICB7CisgICAgc3RydWN0IGxhbmdfdHlwZV9oZWFkZXIgR1RZKChza2lwICgiIikpKSBoOworICAgIHN0cnVjdCBsYW5nX3R5cGVfY2xhc3MgIEdUWSgodGFnICgiMSIpKSkgYzsKKyAgICBzdHJ1Y3QgbGFuZ190eXBlX3B0cm1lbSBHVFkoKHRhZyAoIjAiKSkpIHB0cm1lbTsKKyAgfSBHVFkoKGRlc2MgKCIlaC5oLmlzX2xhbmdfdHlwZV9jbGFzcyIpKSkgdTsKK307CisKKyNpZiBkZWZpbmVkIEVOQUJMRV9UUkVFX0NIRUNLSU5HICYmIChHQ0NfVkVSU0lPTiA+PSAyMDA3KQorCisjZGVmaW5lIExBTkdfVFlQRV9DTEFTU19DSEVDSyhOT0RFKSBfX2V4dGVuc2lvbl9fCQlcCisoeyAgc3RydWN0IGxhbmdfdHlwZSAqbHQgPSBUWVBFX0xBTkdfU1BFQ0lGSUMgKE5PREUpOwkJXAorICAgIGlmICghIGx0LT51LmguaXNfbGFuZ190eXBlX2NsYXNzKQkJCQlcCisgICAgICBsYW5nX2NoZWNrX2ZhaWxlZCAoX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pOwlcCisgICAgJmx0LT51LmM7IH0pCisKKyNkZWZpbmUgTEFOR19UWVBFX1BUUk1FTV9DSEVDSyhOT0RFKSBfX2V4dGVuc2lvbl9fCQlcCisoeyAgc3RydWN0IGxhbmdfdHlwZSAqbHQgPSBUWVBFX0xBTkdfU1BFQ0lGSUMgKE5PREUpOwkJXAorICAgIGlmIChsdC0+dS5oLmlzX2xhbmdfdHlwZV9jbGFzcykJCQkJXAorICAgICAgbGFuZ19jaGVja19mYWlsZWQgKF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKTsJXAorICAgICZsdC0+dS5wdHJtZW07IH0pCisKKyNlbHNlCisKKyNkZWZpbmUgTEFOR19UWVBFX0NMQVNTX0NIRUNLKE5PREUpICgmVFlQRV9MQU5HX1NQRUNJRklDIChOT0RFKS0+dS5jKQorI2RlZmluZSBMQU5HX1RZUEVfUFRSTUVNX0NIRUNLKE5PREUpICgmVFlQRV9MQU5HX1NQRUNJRklDIChOT0RFKS0+dS5wdHJtZW0pCisKKyNlbmRpZiAvKiBFTkFCTEVfVFJFRV9DSEVDS0lORyAqLworCisvKiBOb256ZXJvIGZvciBfQ0xBU1NUWVBFIG1lYW5zIHRoYXQgb3BlcmF0b3IgZGVsZXRlIGlzIGRlZmluZWQuICAqLworI2RlZmluZSBUWVBFX0dFVFNfREVMRVRFKE5PREUpIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5nZXRzX2RlbGV0ZSkKKyNkZWZpbmUgVFlQRV9HRVRTX1JFR19ERUxFVEUoTk9ERSkgKFRZUEVfR0VUU19ERUxFVEUgKE5PREUpICYgMSkKKworLyogTm9uemVybyBpZiBgbmV3IE5PREVbeF0nIHNob3VsZCBjYXVzZSB0aGUgYWxsb2NhdGlvbiBvZiBleHRyYQorICAgc3RvcmFnZSB0byBpbmRpY2F0ZSBob3cgbWFueSBhcnJheSBlbGVtZW50cyBhcmUgaW4gdXNlLiAgKi8KKyNkZWZpbmUgVFlQRV9WRUNfTkVXX1VTRVNfQ09PS0lFKE5PREUpCQkJXAorICAoQ0xBU1NfVFlQRV9QIChOT0RFKQkJCQkJXAorICAgJiYgTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+dmVjX25ld191c2VzX2Nvb2tpZSkKKworLyogTm9uemVybyBtZWFucyB0aGF0IHRoaXMgX0NMQVNTVFlQRSBub2RlIGRlZmluZXMgd2F5cyBvZiBjb252ZXJ0aW5nCisgICBpdHNlbGYgdG8gb3RoZXIgdHlwZXMuICAqLworI2RlZmluZSBUWVBFX0hBU19DT05WRVJTSU9OKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmguaGFzX3R5cGVfY29udmVyc2lvbikKKworLyogTm9uemVybyBtZWFucyB0aGF0IE5PREUgKGEgY2xhc3MgdHlwZSkgaGFzIGEgZGVmYXVsdCBjb25zdHJ1Y3RvciAtLQorICAgYnV0IHRoYXQgaXQgaGFzIG5vdCB5ZXQgYmVlbiBkZWNsYXJlZC4gICovCisjZGVmaW5lIENMQVNTVFlQRV9MQVpZX0RFRkFVTFRfQ1RPUihOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5sYXp5X2RlZmF1bHRfY3RvcikKKworLyogTm9uemVybyBtZWFucyB0aGF0IE5PREUgKGEgY2xhc3MgdHlwZSkgaGFzIGEgY29weSBjb25zdHJ1Y3RvciAtLQorICAgYnV0IHRoYXQgaXQgaGFzIG5vdCB5ZXQgYmVlbiBkZWNsYXJlZC4gICovCisjZGVmaW5lIENMQVNTVFlQRV9MQVpZX0NPUFlfQ1RPUihOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5sYXp5X2NvcHlfY3RvcikKKworLyogTm9uemVybyBtZWFucyB0aGF0IE5PREUgKGEgY2xhc3MgdHlwZSkgaGFzIGEgbW92ZSBjb25zdHJ1Y3RvciAtLQorICAgYnV0IHRoYXQgaXQgaGFzIG5vdCB5ZXQgYmVlbiBkZWNsYXJlZC4gICovCisjZGVmaW5lIENMQVNTVFlQRV9MQVpZX01PVkVfQ1RPUihOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5sYXp5X21vdmVfY3RvcikKKworLyogTm9uemVybyBtZWFucyB0aGF0IE5PREUgKGEgY2xhc3MgdHlwZSkgaGFzIGFuIGFzc2lnbm1lbnQgb3BlcmF0b3IKKyAgIC0tIGJ1dCB0aGF0IGl0IGhhcyBub3QgeWV0IGJlZW4gZGVjbGFyZWQuICAqLworI2RlZmluZSBDTEFTU1RZUEVfTEFaWV9BU1NJR05NRU5UX09QKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmxhenlfYXNzaWdubWVudF9vcCkKKworLyogTm9uemVybyBtZWFucyB0aGF0IE5PREUgKGEgY2xhc3MgdHlwZSkgaGFzIGEgZGVzdHJ1Y3RvciAtLSBidXQgdGhhdAorICAgaXQgaGFzIG5vdCB5ZXQgYmVlbiBkZWNsYXJlZC4gICovCisjZGVmaW5lIENMQVNTVFlQRV9MQVpZX0RFU1RSVUNUT1IoTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+bGF6eV9kZXN0cnVjdG9yKQorCisvKiBOb256ZXJvIG1lYW5zIHRoYXQgdGhpcyBfQ0xBU1NUWVBFIG5vZGUgb3ZlcmxvYWRzIG9wZXJhdG9yPShYJikuICAqLworI2RlZmluZSBUWVBFX0hBU19BU1NJR05fUkVGKE5PREUpIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5oYXNfYXNzaWduX3JlZikKKworLyogVHJ1ZSBpZmYgdGhlIGNsYXNzIHR5cGUgTk9ERSBoYXMgYW4gIm9wZXJhdG9yID0iIHdob3NlIHBhcmFtZXRlcgorICAgaGFzIGEgcGFyYW1ldGVyIG9mIHR5cGUgImNvbnN0IFgmIi4gICovCisjZGVmaW5lIFRZUEVfSEFTX0NPTlNUX0FTU0lHTl9SRUYoTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+aC5oYXNfY29uc3RfYXNzaWduX3JlZikKKworLyogTm9uemVybyBtZWFucyB0aGF0IHRoaXMgX0NMQVNTVFlQRSBub2RlIGhhcyBhbiBYKFgmKSBjb25zdHJ1Y3Rvci4gICovCisjZGVmaW5lIFRZUEVfSEFTX0lOSVRfUkVGKE5PREUpIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5oLmhhc19pbml0X3JlZikKKyNkZWZpbmUgVFlQRV9IQVNfQ09OU1RfSU5JVF9SRUYoTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+aGFzX2NvbnN0X2luaXRfcmVmKQorCisvKiBOb256ZXJvIGlmIHRoaXMgY2xhc3MgaGFzIGFuIFgoaW5pdGlhbGl6ZXJfbGlzdDxUPikgY29uc3RydWN0b3IuICAqLworI2RlZmluZSBUWVBFX0hBU19MSVNUX0NUT1IoTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+aGFzX2xpc3RfY3RvcikKKworLyogTm9uemVybyBpZiB0aGlzIGNsYXNzIGRlZmluZXMgYW4gb3ZlcmxvYWRlZCBvcGVyYXRvciBuZXcuICAoQW4KKyAgIG9wZXJhdG9yIG5ldyBbXSBkb2Vzbid0IGNvdW50LikgICovCisjZGVmaW5lIFRZUEVfSEFTX05FV19PUEVSQVRPUihOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5oYXNfbmV3KQorCisvKiBOb256ZXJvIGlmIHRoaXMgY2xhc3MgZGVmaW5lcyBhbiBvdmVybG9hZGVkIG9wZXJhdG9yIG5ld1tdLiAgKi8KKyNkZWZpbmUgVFlQRV9IQVNfQVJSQVlfTkVXX09QRVJBVE9SKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmhhc19hcnJheV9uZXcpCisKKy8qIE5vbnplcm8gbWVhbnMgdGhhdCB0aGlzIHR5cGUgaXMgYmVpbmcgZGVmaW5lZC4gIEkuZS4sIHRoZSBsZWZ0IGJyYWNlCisgICBzdGFydGluZyB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIHR5cGUgaGFzIGJlZW4gc2Vlbi4gICovCisjZGVmaW5lIFRZUEVfQkVJTkdfREVGSU5FRChOT0RFKSAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+YmVpbmdfZGVmaW5lZCkKKworLyogTWFyayBiaXRzIGZvciByZXBlYXRlZCBiYXNlIGNoZWNrcy4gICovCisjZGVmaW5lIFRZUEVfTUFSS0VEX1AoTk9ERSkgVFJFRV9MQU5HX0ZMQUdfNiAoVFlQRV9DSEVDSyAoTk9ERSkpCisKKy8qIE5vbnplcm8gaWYgdGhlIGNsYXNzIE5PREUgaGFzIG11bHRpcGxlIHBhdGhzIHRvIHRoZSBzYW1lICh2aXJ0dWFsKQorICAgYmFzZSBvYmplY3QuICAqLworI2RlZmluZSBDTEFTU1RZUEVfRElBTU9ORF9TSEFQRURfUChOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0soTk9ERSktPmRpYW1vbmRfc2hhcGVkKQorCisvKiBOb256ZXJvIGlmIHRoZSBjbGFzcyBOT0RFIGhhcyBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgYmFzZQorICAgdHlwZS4gICovCisjZGVmaW5lIENMQVNTVFlQRV9SRVBFQVRFRF9CQVNFX1AoTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLKE5PREUpLT5yZXBlYXRlZF9iYXNlKQorCisvKiBUaGUgbWVtYmVyIGZ1bmN0aW9uIHdpdGggd2hpY2ggdGhlIHZ0YWJsZSB3aWxsIGJlIGVtaXR0ZWQ6CisgICB0aGUgZmlyc3Qgbm9uaW5saW5lIG5vbi1wdXJlLXZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9uLiAgTlVMTF9UUkVFCisgICBpZiB0aGVyZSBpcyBubyBrZXkgZnVuY3Rpb24gb3IgaWYgdGhpcyBpcyBhIGNsYXNzIHRlbXBsYXRlICovCisjZGVmaW5lIENMQVNTVFlQRV9LRVlfTUVUSE9EKE5PREUpIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5rZXlfbWV0aG9kKQorCisvKiBWZWN0b3IgbWVtYmVyIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoaXMgY2xhc3MuICBFYWNoIGVsZW1lbnQgaXMKKyAgIGVpdGhlciBhIEZVTkNUSU9OX0RFQ0wsIGEgVEVNUExBVEVfREVDTCwgb3IgYW4gT1ZFUkxPQUQuICBBbGwKKyAgIGZ1bmN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUgZW5kIHVwIGluIHRoZSBzYW1lIHNsb3QuICBUaGUgZmlyc3QKKyAgIHR3byBlbGVtZW50cyBhcmUgZm9yIGNvbnN0cnVjdG9ycywgYW5kIGRlc3RydWN0b3JzLCByZXNwZWN0aXZlbHkuCisgICBBbGwgdGVtcGxhdGUgY29udmVyc2lvbiBvcGVyYXRvcnMgdG8gaW5uZXJtb3N0IHRlbXBsYXRlIGRlcGVuZGVudAorICAgdHlwZXMgYXJlIG92ZXJsb2FkZWQgb24gdGhlIG5leHQgc2xvdCwgaWYgdGhleSBleGlzdC4gIE5vdGUsIHRoZQorICAgbmFtZXMgZm9yIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIG5vdCBhbGwgYmUgdGhlIHNhbWUuICBUaGUKKyAgIG5vbi10ZW1wbGF0ZSBjb252ZXJzaW9uIG9wZXJhdG9ycyAmIHRlbXBsYXRlZCBjb252ZXJzaW9ucyB0bworICAgbm9uLWlubmVybW9zdCB0ZW1wbGF0ZSB0eXBlcyBhcmUgbmV4dCwgZm9sbG93ZWQgYnkgb3JkaW5hcnkgbWVtYmVyCisgICBmdW5jdGlvbnMuICBUaGVyZSBtYXkgYmUgZW1wdHkgZW50cmllcyBhdCB0aGUgZW5kIG9mIHRoZSB2ZWN0b3IuCisgICBUaGUgY29udmVyc2lvbiBvcGVyYXRvcnMgYXJlIHVuc29ydGVkLiBUaGUgb3JkaW5hcnkgbWVtYmVyCisgICBmdW5jdGlvbnMgYXJlIHNvcnRlZCwgb25jZSB0aGUgY2xhc3MgaXMgY29tcGxldGUuICAqLworI2RlZmluZSBDTEFTU1RZUEVfTUVUSE9EX1ZFQyhOT0RFKSAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+bWV0aG9kcykKKworLyogRm9yIGNsYXNzIHRlbXBsYXRlcywgdGhpcyBpcyBhIFRSRUVfTElTVCBvZiBhbGwgbWVtYmVyIGRhdGEsCisgICBmdW5jdGlvbnMsIHR5cGVzLCBhbmQgZnJpZW5kcyBpbiB0aGUgb3JkZXIgb2YgZGVjbGFyYXRpb24uCisgICBUaGUgVFJFRV9QVVJQT1NFIG9mIGVhY2ggVFJFRV9MSVNUIGlzIE5VTExfVFJFRSBmb3IgYSBmcmllbmQsCisgICBhbmQgdGhlIFJFQ09SRF9UWVBFIGZvciB0aGUgY2xhc3MgdGVtcGxhdGUgb3RoZXJ3aXNlLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX0RFQ0xfTElTVChOT0RFKSAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+ZGVjbF9saXN0KQorCisvKiBUaGUgc2xvdCBpbiB0aGUgQ0xBU1NUWVBFX01FVEhPRF9WRUMgd2hlcmUgY29uc3RydWN0b3JzIGdvLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX0NPTlNUUlVDVE9SX1NMT1QgMAorCisvKiBUaGUgc2xvdCBpbiB0aGUgQ0xBU1NUWVBFX01FVEhPRF9WRUMgd2hlcmUgZGVzdHJ1Y3RvcnMgZ28uICAqLworI2RlZmluZSBDTEFTU1RZUEVfREVTVFJVQ1RPUl9TTE9UIDEKKworLyogVGhlIGZpcnN0IHNsb3QgaW4gdGhlIENMQVNTVFlQRV9NRVRIT0RfVkVDIHdoZXJlIGNvbnZlcnNpb24KKyAgIG9wZXJhdG9ycyBjYW4gYXBwZWFyLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX0ZJUlNUX0NPTlZFUlNJT05fU0xPVCAyCisKKy8qIEEgRlVOQ1RJT05fREVDTCBvciBPVkVSTE9BRCBmb3IgdGhlIGNvbnN0cnVjdG9ycyBmb3IgTk9ERS4gIFRoZXNlCisgICBhcmUgdGhlIGNvbnN0cnVjdG9ycyB0aGF0IHRha2UgYW4gaW4tY2hhcmdlIHBhcmFtZXRlci4gICovCisjZGVmaW5lIENMQVNTVFlQRV9DT05TVFJVQ1RPUlMoTk9ERSkgXAorICAoVkVDX2luZGV4ICh0cmVlLCBDTEFTU1RZUEVfTUVUSE9EX1ZFQyAoTk9ERSksIENMQVNTVFlQRV9DT05TVFJVQ1RPUl9TTE9UKSkKKworLyogQSBGVU5DVElPTl9ERUNMIGZvciB0aGUgZGVzdHJ1Y3RvciBmb3IgTk9ERS4gIFRoZXNlIGFyZSB0aGUKKyAgIGRlc3RydWN0b3JzIHRoYXQgdGFrZSBhbiBpbi1jaGFyZ2UgcGFyYW1ldGVyLiAgSWYKKyAgIENMQVNTVFlQRV9MQVpZX0RFU1RSVUNUT1IgaXMgdHJ1ZSwgdGhlbiB0aGlzIGVudHJ5IHdpbGwgYmUgTlVMTAorICAgdW50aWwgdGhlIGRlc3RydWN0b3IgaXMgY3JlYXRlZCB3aXRoIGxhemlseV9kZWNsYXJlX2ZuLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX0RFU1RSVUNUT1JTKE5PREUpIFwKKyAgKENMQVNTVFlQRV9NRVRIT0RfVkVDIChOT0RFKQkJCQkJCSAgICAgIFwKKyAgID8gVkVDX2luZGV4ICh0cmVlLCBDTEFTU1RZUEVfTUVUSE9EX1ZFQyAoTk9ERSksIENMQVNTVFlQRV9ERVNUUlVDVE9SX1NMT1QpIFwKKyAgIDogTlVMTF9UUkVFKQorCisvKiBBIGRpY3Rpb25hcnkgb2YgdGhlIG5lc3RlZCB1c2VyLWRlZmluZWQtdHlwZXMgKGNsYXNzLXR5cGVzLCBvciBlbnVtcykKKyAgIGZvdW5kIHdpdGhpbiB0aGlzIGNsYXNzLiAgVGhpcyB0YWJsZSBpbmNsdWRlcyBuZXN0ZWQgbWVtYmVyIGNsYXNzCisgICB0ZW1wbGF0ZXMuICAqLworI2RlZmluZSBDTEFTU1RZUEVfTkVTVEVEX1VURFMoTk9ERSkgXAorICAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPm5lc3RlZF91ZHRzKQorCisvKiBOb256ZXJvIGlmIE5PREUgaGFzIGEgcHJpbWFyeSBiYXNlIGNsYXNzLCBpLmUuLCBhIGJhc2UgY2xhc3Mgd2l0aAorICAgd2hpY2ggaXQgc2hhcmVzIHRoZSB2aXJ0dWFsIGZ1bmN0aW9uIHRhYmxlIHBvaW50ZXIuICAqLworI2RlZmluZSBDTEFTU1RZUEVfSEFTX1BSSU1BUllfQkFTRV9QKE5PREUpIFwKKyAgKENMQVNTVFlQRV9QUklNQVJZX0JJTkZPIChOT0RFKSAhPSBOVUxMX1RSRUUpCisKKy8qIElmIG5vbi1OVUxMLCB0aGlzIGlzIHRoZSBiaW5mbyBmb3IgdGhlIHByaW1hcnkgYmFzZSBjbGFzcywgaS5lLiwKKyAgIHRoZSBiYXNlIGNsYXNzIHdoaWNoIGNvbnRhaW5zIHRoZSB2aXJ0dWFsIGZ1bmN0aW9uIHRhYmxlIHBvaW50ZXIKKyAgIGZvciB0aGlzIGNsYXNzLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX1BSSU1BUllfQklORk8oTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+cHJpbWFyeV9iYXNlKQorCisvKiBBIHZlY3RvciBvZiBCSU5GT3MgZm9yIHRoZSBkaXJlY3QgYW5kIGluZGlyZWN0IHZpcnR1YWwgYmFzZSBjbGFzc2VzCisgICB0aGF0IHRoaXMgdHlwZSB1c2VzIGluIGEgcG9zdC1vcmRlciBkZXB0aC1maXJzdCBsZWZ0LXRvLXJpZ2h0CisgICBvcmRlci4gIChJbiBvdGhlciB3b3JkcywgdGhlc2UgYmFzZXMgYXBwZWFyIGluIHRoZSBvcmRlciB0aGF0IHRoZXkKKyAgIHNob3VsZCBiZSBpbml0aWFsaXplZC4pICAqLworI2RlZmluZSBDTEFTU1RZUEVfVkJBU0VDTEFTU0VTKE5PREUpIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT52YmFzZXMpCisKKy8qIFRoZSB0eXBlIGNvcnJlc3BvbmRpbmcgdG8gTk9ERSB3aGVuIE5PREUgaXMgdXNlZCBhcyBhIGJhc2UgY2xhc3MsCisgICBpLmUuLCBOT0RFIHdpdGhvdXQgdmlydHVhbCBiYXNlIGNsYXNzZXMuICAqLworCisjZGVmaW5lIENMQVNTVFlQRV9BU19CQVNFKE5PREUpIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5hc19iYXNlKQorCisvKiBUcnVlIGlmZiBOT0RFIGlzIHRoZSBDTEFTU1RZUEVfQVNfQkFTRSB2ZXJzaW9uIG9mIHNvbWUgdHlwZS4gICovCisKKyNkZWZpbmUgSVNfRkFLRV9CQVNFX1RZUEUoTk9ERSkJCQkJCVwKKyAgKFRSRUVfQ09ERSAoTk9ERSkgPT0gUkVDT1JEX1RZUEUJCQkJXAorICAgJiYgVFlQRV9DT05URVhUIChOT0RFKSAmJiBDTEFTU19UWVBFX1AgKFRZUEVfQ09OVEVYVCAoTk9ERSkpCVwKKyAgICYmIENMQVNTVFlQRV9BU19CQVNFIChUWVBFX0NPTlRFWFQgKE5PREUpKSA9PSAoTk9ERSkpCisKKy8qIFRoZXNlIGFyZSB0aGUgc2l6ZSBhbmQgYWxpZ25tZW50IG9mIHRoZSB0eXBlIHdpdGhvdXQgaXRzIHZpcnR1YWwKKyAgIGJhc2UgY2xhc3NlcywgZm9yIHdoZW4gd2UgdXNlIHRoaXMgdHlwZSBhcyBhIGJhc2UgaXRzZWxmLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX1NJWkUoTk9ERSkgVFlQRV9TSVpFIChDTEFTU1RZUEVfQVNfQkFTRSAoTk9ERSkpCisjZGVmaW5lIENMQVNTVFlQRV9TSVpFX1VOSVQoTk9ERSkgVFlQRV9TSVpFX1VOSVQgKENMQVNTVFlQRV9BU19CQVNFIChOT0RFKSkKKyNkZWZpbmUgQ0xBU1NUWVBFX0FMSUdOKE5PREUpIFRZUEVfQUxJR04gKENMQVNTVFlQRV9BU19CQVNFIChOT0RFKSkKKyNkZWZpbmUgQ0xBU1NUWVBFX1VTRVJfQUxJR04oTk9ERSkgVFlQRV9VU0VSX0FMSUdOIChDTEFTU1RZUEVfQVNfQkFTRSAoTk9ERSkpCisKKy8qIFRoZSBhbGlnbm1lbnQgb2YgTk9ERSwgd2l0aG91dCBpdHMgdmlydHVhbCBiYXNlcywgaW4gYnl0ZXMuICAqLworI2RlZmluZSBDTEFTU1RZUEVfQUxJR05fVU5JVChOT0RFKSBcCisgIChDTEFTU1RZUEVfQUxJR04gKE5PREUpIC8gQklUU19QRVJfVU5JVCkKKworLyogVHJ1ZSBpZiB0aGlzIGEgSmF2YSBpbnRlcmZhY2UgdHlwZSwgZGVjbGFyZWQgd2l0aAorICAgJ19fYXR0cmlidXRlX18gKChqYXZhX2ludGVyZmFjZSkpJy4gICovCisjZGVmaW5lIFRZUEVfSkFWQV9JTlRFUkZBQ0UoTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+amF2YV9pbnRlcmZhY2UpCisKKy8qIEEgVkVDKHRyZWUpIG9mIHZpcnR1YWwgZnVuY3Rpb25zIHdoaWNoIGNhbm5vdCBiZSBpbmhlcml0ZWQgYnkKKyAgIGRlcml2ZWQgY2xhc3Nlcy4gIFdoZW4gZGVyaXZpbmcgZnJvbSB0aGlzIHR5cGUsIHRoZSBkZXJpdmVkCisgICBjbGFzcyBtdXN0IHByb3ZpZGUgaXRzIG93biBkZWZpbml0aW9uIGZvciBlYWNoIG9mIHRoZXNlIGZ1bmN0aW9ucy4gICovCisjZGVmaW5lIENMQVNTVFlQRV9QVVJFX1ZJUlRVQUxTKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPnB1cmVfdmlydHVhbHMpCisKKy8qIE5vbnplcm8gbWVhbnMgdGhhdCB0aGlzIHR5cGUgaGFzIGFuIFgoKSBjb25zdHJ1Y3Rvci4gICovCisjZGVmaW5lIFRZUEVfSEFTX0RFRkFVTFRfQ09OU1RSVUNUT1IoTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+aC5oYXNfZGVmYXVsdF9jdG9yKQorCisvKiBOb256ZXJvIG1lYW5zIHRoYXQgdGhpcyB0eXBlIGNvbnRhaW5zIGEgbXV0YWJsZSBtZW1iZXIuICAqLworI2RlZmluZSBDTEFTU1RZUEVfSEFTX01VVEFCTEUoTk9ERSkgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmhhc19tdXRhYmxlKQorI2RlZmluZSBUWVBFX0hBU19NVVRBQkxFX1AoTk9ERSkgKGNwX2hhc19tdXRhYmxlX3AgKE5PREUpKQorCisvKiBOb256ZXJvIG1lYW5zIHRoYXQgdGhpcyBjbGFzcyB0eXBlIGlzIG5vdCBQT0QgZm9yIHRoZSBwdXJwb3NlIG9mIGxheW91dAorICAgKGFzIGRlZmluZWQgaW4gdGhlIEFCSSkuICBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBsYW5ndWFnZSdzIFBPRC4gICovCisjZGVmaW5lIENMQVNTVFlQRV9OT05fTEFZT1VUX1BPRF9QKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPm5vbl9wb2RfY2xhc3MpCisKKy8qIE5vbnplcm8gbWVhbnMgdGhhdCB0aGlzIGNsYXNzIHR5cGUgaXMgYSBub24tc3RhbmRhcmQtbGF5b3V0IGNsYXNzLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX05PTl9TVERfTEFZT1VUKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPm5vbl9zdGRfbGF5b3V0KQorCisvKiBOb256ZXJvIG1lYW5zIHRoYXQgdGhpcyBjbGFzcyBjb250YWlucyBwb2QgdHlwZXMgd2hvc2UgZGVmYXVsdAorICAgaW5pdGlhbGl6YXRpb24gaXMgbm90IGEgemVybyBpbml0aWFsaXphdGlvbiAobmFtZWx5LCBwb2ludGVycyB0bworICAgZGF0YSBtZW1iZXJzKS4gICovCisjZGVmaW5lIENMQVNTVFlQRV9OT05fWkVST19JTklUX1AoTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+bm9uX3plcm9faW5pdCkKKworLyogTm9uemVybyBpZiB0aGlzIGNsYXNzIGlzICJlbXB0eSIgaW4gdGhlIHNlbnNlIG9mIHRoZSBDKysgQUJJLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX0VNUFRZX1AoTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+ZW1wdHlfcCkKKworLyogTm9uemVybyBpZiB0aGlzIGNsYXNzIGlzICJuZWFybHkgZW1wdHkiLCBpLmUuLCBjb250YWlucyBvbmx5IGEKKyAgIHZpcnR1YWwgZnVuY3Rpb24gdGFibGUgcG9pbnRlci4gICovCisjZGVmaW5lIENMQVNTVFlQRV9ORUFSTFlfRU1QVFlfUChOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5uZWFybHlfZW1wdHlfcCkKKworLyogTm9uemVybyBpZiB0aGlzIGNsYXNzIGNvbnRhaW5zIGFuIGVtcHR5IHN1Ym9iamVjdC4gICovCisjZGVmaW5lIENMQVNTVFlQRV9DT05UQUlOU19FTVBUWV9DTEFTU19QKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmNvbnRhaW5zX2VtcHR5X2NsYXNzX3ApCisKKy8qIEEgbGlzdCBvZiBjbGFzcyB0eXBlcyBvZiB3aGljaCB0aGlzIHR5cGUgaXMgYSBmcmllbmQuICBUaGUKKyAgIFRSRUVfVkFMVUUgaXMgbm9ybWFsbHkgYSBUWVBFLCBidXQgd2lsbCBiZSBhIFRFTVBMQVRFX0RFQ0wgaW4gdGhlCisgICBjYXNlIG9mIGEgdGVtcGxhdGUgZnJpZW5kLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX0ZSSUVORF9DTEFTU0VTKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmZyaWVuZF9jbGFzc2VzKQorCisvKiBBIGxpc3Qgb2YgdGhlIGNsYXNzZXMgd2hpY2ggZ3JhbnQgZnJpZW5kc2hpcCB0byB0aGlzIGNsYXNzLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX0JFRlJJRU5ESU5HX0NMQVNTRVMoTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+YmVmcmllbmRpbmdfY2xhc3NlcykKKworLyogVGhlIGFzc29jaWF0ZWQgTEFNQkRBX0VYUFIgdGhhdCBtYWRlIHRoaXMgY2xhc3MuICAqLworI2RlZmluZSBDTEFTU1RZUEVfTEFNQkRBX0VYUFIoTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+bGFtYmRhX2V4cHIpCisvKiBUaGUgZXh0cmEgbWFuZ2xpbmcgc2NvcGUgZm9yIHRoaXMgY2xvc3VyZSB0eXBlLiAgKi8KKyNkZWZpbmUgTEFNQkRBX1RZUEVfRVhUUkFfU0NPUEUoTk9ERSkgXAorICAoTEFNQkRBX0VYUFJfRVhUUkFfU0NPUEUgKENMQVNTVFlQRV9MQU1CREFfRVhQUiAoTk9ERSkpKQorCisvKiBTYXkgd2hldGhlciB0aGlzIG5vZGUgd2FzIGRlY2xhcmVkIGFzIGEgImNsYXNzIiBvciBhICJzdHJ1Y3QiLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX0RFQ0xBUkVEX0NMQVNTKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmRlY2xhcmVkX2NsYXNzKQorCisvKiBOb256ZXJvIGlmIHRoaXMgY2xhc3MgaGFzIGNvbnN0IG1lbWJlcnMKKyAgIHdoaWNoIGhhdmUgbm8gc3BlY2lmaWVkIGluaXRpYWxpemF0aW9uLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX1JFQURPTkxZX0ZJRUxEU19ORUVEX0lOSVQoTk9ERSkJXAorICAoVFlQRV9MQU5HX1NQRUNJRklDIChOT0RFKQkJCQlcCisgICA/IExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmguY29uc3RfbmVlZHNfaW5pdCA6IDApCisjZGVmaW5lIFNFVF9DTEFTU1RZUEVfUkVBRE9OTFlfRklFTERTX05FRURfSU5JVChOT0RFLCBWQUxVRSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+aC5jb25zdF9uZWVkc19pbml0ID0gKFZBTFVFKSkKKworLyogTm9uemVybyBpZiB0aGlzIGNsYXNzIGhhcyByZWYgbWVtYmVycworICAgd2hpY2ggaGF2ZSBubyBzcGVjaWZpZWQgaW5pdGlhbGl6YXRpb24uICAqLworI2RlZmluZSBDTEFTU1RZUEVfUkVGX0ZJRUxEU19ORUVEX0lOSVQoTk9ERSkJCVwKKyAgKFRZUEVfTEFOR19TUEVDSUZJQyAoTk9ERSkJCQkJXAorICAgPyBMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5oLnJlZl9uZWVkc19pbml0IDogMCkKKyNkZWZpbmUgU0VUX0NMQVNTVFlQRV9SRUZfRklFTERTX05FRURfSU5JVChOT0RFLCBWQUxVRSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+aC5yZWZfbmVlZHNfaW5pdCA9IChWQUxVRSkpCisKKy8qIE5vbnplcm8gaWYgdGhpcyBjbGFzcyBpcyBpbmNsdWRlZCBmcm9tIGEgaGVhZGVyIGZpbGUgd2hpY2ggZW1wbG95cworICAgYCNwcmFnbWEgaW50ZXJmYWNlJywgYW5kIGl0IGlzIG5vdCBpbmNsdWRlZCBpbiBpdHMgaW1wbGVtZW50YXRpb24gZmlsZS4gICovCisjZGVmaW5lIENMQVNTVFlQRV9JTlRFUkZBQ0VfT05MWShOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5pbnRlcmZhY2Vfb25seSkKKworLyogVHJ1ZSBpZiB3ZSBoYXZlIGFscmVhZHkgZGV0ZXJtaW5lZCB3aGV0aGVyIG9yIG5vdCB2dGFibGVzLCBWVFRzLAorICAgdHlwZWluZm8sIGFuZCBvdGhlciBzaW1pbGFyIHBlci1jbGFzcyBkYXRhIHNob3VsZCBiZSBlbWl0dGVkIGluCisgICB0aGlzIHRyYW5zbGF0aW9uIHVuaXQuICBUaGlzIGZsYWcgZG9lcyBub3QgaW5kaWNhdGUgd2hldGhlciBvciBub3QKKyAgIHRoZXNlIGl0ZW1zIHNob3VsZCBiZSBlbWl0dGVkOyBpdCBvbmx5IGluZGljYXRlcyB0aGF0IHdlIGtub3cgb25lCisgICB3YXkgb3IgdGhlIG90aGVyLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX0lOVEVSRkFDRV9LTk9XTihOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5pbnRlcmZhY2VfdW5rbm93biA9PSAwKQorLyogVGhlIG9wcG9zaXRlIG9mIENMQVNTVFlQRV9JTlRFUkZBQ0VfS05PV04uICAqLworI2RlZmluZSBDTEFTU1RZUEVfSU5URVJGQUNFX1VOS05PV04oTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+aW50ZXJmYWNlX3Vua25vd24pCisKKyNkZWZpbmUgU0VUX0NMQVNTVFlQRV9JTlRFUkZBQ0VfVU5LTk9XTl9YKE5PREUsWCkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+aW50ZXJmYWNlX3Vua25vd24gPSAhIShYKSkKKyNkZWZpbmUgU0VUX0NMQVNTVFlQRV9JTlRFUkZBQ0VfVU5LTk9XTihOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5pbnRlcmZhY2VfdW5rbm93biA9IDEpCisjZGVmaW5lIFNFVF9DTEFTU1RZUEVfSU5URVJGQUNFX0tOT1dOKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmludGVyZmFjZV91bmtub3duID0gMCkKKworLyogTm9uemVybyBpZiBhIF9ERUNMIG5vZGUgcmVxdWlyZXMgdXMgdG8gb3V0cHV0IGRlYnVnIGluZm8gZm9yIHRoaXMgY2xhc3MuICAqLworI2RlZmluZSBDTEFTU1RZUEVfREVCVUdfUkVRVUVTVEVEKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmRlYnVnX3JlcXVlc3RlZCkKKwwKKy8qIEFkZGl0aW9uYWwgbWFjcm9zIGZvciBpbmhlcml0YW5jZSBpbmZvcm1hdGlvbi4gICovCisKKy8qIE5vbnplcm8gbWVhbnMgdGhhdCB0aGlzIGNsYXNzIGlzIG9uIGEgcGF0aCBsZWFkaW5nIHRvIGEgbmV3IHZ0YWJsZS4gICovCisjZGVmaW5lIEJJTkZPX1ZUQUJMRV9QQVRIX01BUktFRChOT0RFKSBCSU5GT19GTEFHXzEgKE5PREUpCisKKy8qIE5vbnplcm8gbWVhbnMgQiAoYSBCSU5GTykgaGFzIGl0cyBvd24gdnRhYmxlLiAgQW55IGNvcGllcyB3aWxsIG5vdAorICAgaGF2ZSB0aGlzIGZsYWcgc2V0LiAgKi8KKyNkZWZpbmUgQklORk9fTkVXX1ZUQUJMRV9NQVJLRUQoQikgKEJJTkZPX0ZMQUdfMiAoQikpCisKKy8qIENvbXBhcmUgYSBCSU5GT19UWVBFIHdpdGggYW5vdGhlciB0eXBlIGZvciBlcXVhbGl0eS4gIEZvciBhIGJpbmZvLAorICAgdGhpcyBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byB1c2luZyBzYW1lX3R5cGVfcCwgYnV0CisgICBtZWFzdXJhYmx5IGZhc3Rlci4gIEF0IGxlYXN0IG9uZSBvZiB0aGUgYXJndW1lbnRzIG11c3QgYmUgYQorICAgQklORk9fVFlQRS4gIFRoZSBvdGhlciBjYW4gYmUgYSBCSU5GT19UWVBFIG9yIGEgcmVndWxhciB0eXBlLiAgSWYKKyAgIEJJTkZPX1RZUEUoVCkgZXZlciBzdG9wcyBiZWluZyB0aGUgbWFpbiB2YXJpYW50IG9mIHRoZSBjbGFzcyB0aGUKKyAgIGJpbmZvIGlzIGZvciwgdGhpcyBtYWNybyBtdXN0IGNoYW5nZS4gICovCisjZGVmaW5lIFNBTUVfQklORk9fVFlQRV9QKEEsIEIpICgoQSkgPT0gKEIpKQorCisvKiBBbnkgc3Vib2JqZWN0IHRoYXQgbmVlZHMgYSBuZXcgdnRhYmxlIG11c3QgaGF2ZSBhIHZwdHIgYW5kIG11c3Qgbm90CisgICBiZSBhIG5vbi12aXJ0dWFsIHByaW1hcnkgYmFzZSAoc2luY2UgaXQgd291bGQgdGhlbiB1c2UgdGhlIHZ0YWJsZSBmcm9tIGEKKyAgIGRlcml2ZWQgY2xhc3MgYW5kIG5ldmVyIGJlY29tZSBub24tcHJpbWFyeS4pICAqLworI2RlZmluZSBTRVRfQklORk9fTkVXX1ZUQUJMRV9NQVJLRUQoQikJCQkJCSBcCisgIChCSU5GT19ORVdfVlRBQkxFX01BUktFRCAoQikgPSAxLAkJCQkJIFwKKyAgIGdjY19hc3NlcnQgKCFCSU5GT19QUklNQVJZX1AgKEIpIHx8IEJJTkZPX1ZJUlRVQUxfUCAoQikpLAkJIFwKKyAgIGdjY19hc3NlcnQgKFRZUEVfVkZJRUxEIChCSU5GT19UWVBFIChCKSkpKQorCisvKiBOb256ZXJvIGlmIHRoaXMgYmluZm8gaXMgZm9yIGEgZGVwZW5kZW50IGJhc2UgLSBvbmUgdGhhdCBzaG91bGQgbm90CisgICBiZSBzZWFyY2hlZC4gICovCisjZGVmaW5lIEJJTkZPX0RFUEVOREVOVF9CQVNFX1AoTk9ERSkgQklORk9fRkxBR18zIChOT0RFKQorCisvKiBOb256ZXJvIGlmIHRoaXMgYmluZm8gaGFzIGxvc3QgaXRzIHByaW1hcnkgYmFzZSBiaW5mbyAoYmVjYXVzZSB0aGF0CisgICBpcyBhIG5lYXJseS1lbXB0eSB2aXJ0dWFsIGJhc2UgdGhhdCBoYXMgYmVlbiB0YWtlbiBieSBzb21lIG90aGVyCisgICBiYXNlIGluIHRoZSBjb21wbGV0ZSBoaWVyYXJjaHkuICAqLworI2RlZmluZSBCSU5GT19MT1NUX1BSSU1BUllfUChOT0RFKSBCSU5GT19GTEFHXzQgKE5PREUpCisKKy8qIE5vbnplcm8gaWYgdGhpcyBCSU5GTyBpcyBhIHByaW1hcnkgYmFzZSBjbGFzcy4gICovCisjZGVmaW5lIEJJTkZPX1BSSU1BUllfUChOT0RFKSBCSU5GT19GTEFHXzUoTk9ERSkKKworLyogVXNlZCBieSB2YXJpb3VzIHNlYXJjaCByb3V0aW5lcy4gICovCisjZGVmaW5lIElERU5USUZJRVJfTUFSS0VEKE5PREUpIFRSRUVfTEFOR19GTEFHXzAgKE5PREUpCisMCisvKiBBIFZFQyh0cmVlX3BhaXJfcykgb2YgdGhlIHZjYWxsIGluZGljZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFzcworICAgTk9ERS4gIFRoZSBQVVJQT1NFIG9mIGVhY2ggZWxlbWVudCBpcyBhIEZVTkNUSU9OX0RFQ0wgZm9yIGEgdmlydHVhbAorICAgZnVuY3Rpb24uICBUaGUgVkFMVUUgaXMgdGhlIGluZGV4IGludG8gdGhlIHZpcnR1YWwgdGFibGUgd2hlcmUgdGhlCisgICB2Y2FsbCBvZmZzZXQgZm9yIHRoYXQgZnVuY3Rpb24gaXMgc3RvcmVkLCB3aGVuIE5PREUgaXMgYSB2aXJ0dWFsCisgICBiYXNlLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX1ZDQUxMX0lORElDRVMoTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+dmNhbGxfaW5kaWNlcykKKworLyogVGhlIHZhcmlvdXMgdnRhYmxlcyBmb3IgdGhlIGNsYXNzIE5PREUuICBUaGUgcHJpbWFyeSB2dGFibGUgd2lsbCBiZQorICAgZmlyc3QsIGZvbGxvd2VkIGJ5IHRoZSBjb25zdHJ1Y3Rpb24gdnRhYmxlcyBhbmQgVlRULCBpZiBhbnkuICAqLworI2RlZmluZSBDTEFTU1RZUEVfVlRBQkxFUyhOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT52dGFibGVzKQorCisvKiBUaGUgc3RkOjp0eXBlX2luZm8gdmFyaWFibGUgcmVwcmVzZW50aW5nIHRoaXMgY2xhc3MsIG9yIE5VTEwgaWYgbm8KKyAgIHN1Y2ggdmFyaWFibGUgaGFzIGJlZW4gY3JlYXRlZC4gIFRoaXMgZmllbGQgaXMgb25seSBzZXQgZm9yIHRoZQorICAgVFlQRV9NQUlOX1ZBUklBTlQgb2YgdGhlIGNsYXNzLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX1RZUEVJTkZPX1ZBUihOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT50eXBlaW5mb192YXIpCisKKy8qIEFjY2Vzc29yIG1hY3JvcyBmb3IgdGhlIEJJTkZPX1ZJUlRVQUxTIGxpc3QuICAqLworCisvKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGJ5IHdoaWNoIHRvIGFkanVzdCB0aGUgYHRoaXMnIHBvaW50ZXIgd2hlbgorICAgY2FsbGluZyB0aGlzIHZpcnR1YWwgZnVuY3Rpb24uICBTdWJ0cmFjdCB0aGlzIHZhbHVlIGZyb20gdGhlIHRoaXMKKyAgIHBvaW50ZXIuIEFsd2F5cyBub24tTlVMTCwgbWlnaHQgYmUgY29uc3RhbnQgemVybyB0aG91Z2guICAqLworI2RlZmluZSBCVl9ERUxUQShOT0RFKSAoVFJFRV9QVVJQT1NFIChOT0RFKSkKKworLyogSWYgbm9uLU5VTEwsIHRoZSB2dGFibGUgaW5kZXggYXQgd2hpY2ggdG8gZmluZCB0aGUgdmNhbGwgb2Zmc2V0CisgICB3aGVuIGNhbGxpbmcgdGhpcyB2aXJ0dWFsIGZ1bmN0aW9uLiAgQWRkIHRoZSB2YWx1ZSBhdCB0aGF0IHZ0YWJsZQorICAgaW5kZXggdG8gdGhlIHRoaXMgcG9pbnRlci4gICovCisjZGVmaW5lIEJWX1ZDQUxMX0lOREVYKE5PREUpIChUUkVFX1RZUEUgKE5PREUpKQorCisvKiBUaGUgZnVuY3Rpb24gdG8gY2FsbC4gICovCisjZGVmaW5lIEJWX0ZOKE5PREUpIChUUkVFX1ZBTFVFIChOT0RFKSkKKworDAorLyogRm9yIEZVTkNUSU9OX1RZUEUgb3IgTUVUSE9EX1RZUEUsIGEgbGlzdCBvZiB0aGUgZXhjZXB0aW9ucyB0aGF0CisgICB0aGlzIHR5cGUgY2FuIHJhaXNlLiAgRWFjaCBUUkVFX1ZBTFVFIGlzIGEgX1RZUEUuICBUaGUgVFJFRV9WQUxVRQorICAgd2lsbCBiZSBOVUxMX1RSRUUgdG8gaW5kaWNhdGUgYSB0aHJvdyBzcGVjaWZpY2F0aW9uIG9mIGAoKScsIG9yCisgICBubyBleGNlcHRpb25zIGFsbG93ZWQuICAqLworI2RlZmluZSBUWVBFX1JBSVNFU19FWENFUFRJT05TKE5PREUpIFRZUEVfTEFOR19TTE9UXzEgKE5PREUpCisKKy8qIEZvciBGVU5DVElPTl9UWVBFIG9yIE1FVEhPRF9UWVBFLCByZXR1cm4gMSBpZmYgaXQgaXMgZGVjbGFyZWQgYHRocm93KCknLiAgKi8KKyNkZWZpbmUgVFlQRV9OT1RIUk9XX1AoTk9ERSkgXAorICAoVFlQRV9SQUlTRVNfRVhDRVBUSU9OUyAoTk9ERSkgXAorICAgJiYgVFJFRV9WQUxVRSAoVFlQRV9SQUlTRVNfRVhDRVBUSU9OUyAoTk9ERSkpID09IE5VTExfVFJFRSkKKworLyogVGhlIGJpbmRpbmcgbGV2ZWwgYXNzb2NpYXRlZCB3aXRoIHRoZSBuYW1lc3BhY2UuICAqLworI2RlZmluZSBOQU1FU1BBQ0VfTEVWRUwoTk9ERSkgXAorICAoTEFOR19ERUNMX05TX0NIRUNLIChOT0RFKS0+bGV2ZWwpCisMCisvKiBGbGFncyBzaGFyZWQgYnkgYWxsIGZvcm1zIG9mIERFQ0xfTEFOR19TUEVDSUZJQy4KKworICAgU29tZSBvZiB0aGUgZmxhZ3MgbGl2ZSBoZXJlIG9ubHkgdG8gbWFrZSBsYW5nX2RlY2xfbWluL2ZuIHNtYWxsZXIuICBEbworICAgbm90IG1ha2UgdGhpcyBzdHJ1Y3QgbGFyZ2VyIHRoYW4gMzIgYml0czsgaW5zdGVhZCwgbWFrZSBzZWwgc21hbGxlci4gICovCisKK3N0cnVjdCBHVFkoKCkpIGxhbmdfZGVjbF9iYXNlIHsKKyAgdW5zaWduZWQgc2VsZWN0b3IgOiAxNjsgICAvKiBMYXJnZXIgdGhhbiBuZWNlc3NhcnkgZm9yIGZhc3RlciBhY2Nlc3MuICAqLworICBFTlVNX0JJVEZJRUxEKGxhbmd1YWdlcykgbGFuZ3VhZ2UgOiA0OworICB1bnNpZ25lZCB1c2VfdGVtcGxhdGUgOiAyOworICB1bnNpZ25lZCBub3RfcmVhbGx5X2V4dGVybiA6IDE7CSAgIC8qIHZhciBvciBmbiAqLworICB1bnNpZ25lZCBpbml0aWFsaXplZF9pbl9jbGFzcyA6IDE7CSAgIC8qIHZhciBvciBmbiAqLworICB1bnNpZ25lZCByZXBvX2F2YWlsYWJsZV9wIDogMTsJICAgLyogdmFyIG9yIGZuICovCisgIHVuc2lnbmVkIHRocmVhZHByaXZhdGVfb3JfZGVsZXRlZF9wIDogMTsgLyogdmFyIG9yIGZuICovCisgIHVuc2lnbmVkIGFudGljaXBhdGVkX3AgOiAxOwkJICAgLyogZm4gb3IgdHlwZSAqLworICB1bnNpZ25lZCBmcmllbmRfYXR0ciA6IDE7CQkgICAvKiBmbiBvciB0eXBlICovCisgIHVuc2lnbmVkIHRlbXBsYXRlX2NvbnZfcCA6IDE7CQkgICAvKiB0ZW1wbGF0ZSBvbmx5PyAqLworICB1bnNpZ25lZCBvZHJfdXNlZCA6IDE7CQkgICAvKiB2YXIgb3IgZm4gKi8KKyAgdW5zaWduZWQgdTJzZWwgOiAxOworICAvKiAxIHNwYXJlIGJpdCAqLworfTsKKworLyogVHJ1ZSBmb3IgREVDTCBjb2RlcyB3aGljaCBoYXZlIHRlbXBsYXRlIGluZm8gYW5kIGFjY2Vzcy4gICovCisjZGVmaW5lIExBTkdfREVDTF9IQVNfTUlOKE5PREUpCQkJXAorICAoVFJFRV9DT0RFIChOT0RFKSA9PSBGVU5DVElPTl9ERUNMCQlcCisgICB8fCBUUkVFX0NPREUgKE5PREUpID09IEZJRUxEX0RFQ0wJCVwKKyAgIHx8IFRSRUVfQ09ERSAoTk9ERSkgPT0gVkFSX0RFQ0wJCVwKKyAgIHx8IFRSRUVfQ09ERSAoTk9ERSkgPT0gQ09OU1RfREVDTAkJXAorICAgfHwgVFJFRV9DT0RFIChOT0RFKSA9PSBUWVBFX0RFQ0wJCVwKKyAgIHx8IFRSRUVfQ09ERSAoTk9ERSkgPT0gVEVNUExBVEVfREVDTAkJXAorICAgfHwgVFJFRV9DT0RFIChOT0RFKSA9PSBVU0lOR19ERUNMKQorCisvKiBERUNMX0xBTkdfU1BFQ0lGSUMgZm9yIHRoZSBhYm92ZSBjb2Rlcy4gICovCisKK3N0cnVjdCBHVFkoKCkpIGxhbmdfZGVjbF9taW4geworICBzdHJ1Y3QgbGFuZ19kZWNsX2Jhc2UgYmFzZTsKKworICAvKiBJbiBhIEZVTkNUSU9OX0RFQ0wgZm9yIHdoaWNoIERFQ0xfVEhVTktfUCBob2xkcywgdGhpcyBpcworICAgICBUSFVOS19BTElBUy4KKyAgICAgSW4gYSBGVU5DVElPTl9ERUNMIGZvciB3aGljaCBERUNMX1RIVU5LX1AgZG9lcyBub3QgaG9sZCwKKyAgICAgVkFSX0RFQ0wsIFRZUEVfREVDTCwgb3IgVEVNUExBVEVfREVDTCwgdGhpcyBpcworICAgICBERUNMX1RFTVBMQVRFX0lORk8uICAqLworICB0cmVlIHRlbXBsYXRlX2luZm87CisKKyAgdW5pb24gbGFuZ19kZWNsX3UyIHsKKyAgICAvKiBJbiBhIEZVTkNUSU9OX0RFQ0wgZm9yIHdoaWNoIERFQ0xfVEhVTktfUCBob2xkcywgdGhpcyBpcworICAgICAgIFRIVU5LX1ZJUlRVQUxfT0ZGU0VULgorICAgICAgIE90aGVyd2lzZSB0aGlzIGlzIERFQ0xfQUNDRVNTLiAgKi8KKyAgICB0cmVlIEdUWSAoKHRhZyAoIjAiKSkpIGFjY2VzczsKKworICAgIC8qIEZvciBWQVJfREVDTCBpbiBmdW5jdGlvbiwgdGhpcyBpcyBERUNMX0RJU0NSSU1JTkFUT1IuICAqLworICAgIGludCBHVFkgKCh0YWcgKCIxIikpKSBkaXNjcmltaW5hdG9yOworICB9IEdUWSAoKGRlc2MgKCIlMC51LmJhc2UudTJzZWwiKSkpIHUyOworfTsKKworLyogQWRkaXRpb25hbCBERUNMX0xBTkdfU1BFQ0lGSUMgaW5mb3JtYXRpb24gZm9yIGZ1bmN0aW9ucy4gICovCisKK3N0cnVjdCBHVFkoKCkpIGxhbmdfZGVjbF9mbiB7CisgIHN0cnVjdCBsYW5nX2RlY2xfbWluIG1pbjsKKworICAvKiBJbiBhbiBvdmVybG9hZGVkIG9wZXJhdG9yLCB0aGlzIGlzIHRoZSB2YWx1ZSBvZgorICAgICBERUNMX09WRVJMT0FERURfT1BFUkFUT1JfUC4gICovCisgIEVOVU1fQklURklFTEQgKHRyZWVfY29kZSkgb3BlcmF0b3JfY29kZSA6IDE2OworCisgIHVuc2lnbmVkIGdsb2JhbF9jdG9yX3AgOiAxOworICB1bnNpZ25lZCBnbG9iYWxfZHRvcl9wIDogMTsKKyAgdW5zaWduZWQgY29uc3RydWN0b3JfYXR0ciA6IDE7CisgIHVuc2lnbmVkIGRlc3RydWN0b3JfYXR0ciA6IDE7CisgIHVuc2lnbmVkIGFzc2lnbm1lbnRfb3BlcmF0b3JfcCA6IDE7CisgIHVuc2lnbmVkIHN0YXRpY19mdW5jdGlvbiA6IDE7CisgIHVuc2lnbmVkIHB1cmVfdmlydHVhbCA6IDE7CisgIHVuc2lnbmVkIGRlZmF1bHRlZF9wIDogMTsKKworICB1bnNpZ25lZCBoYXNfaW5fY2hhcmdlX3Bhcm1fcCA6IDE7CisgIHVuc2lnbmVkIGhhc192dHRfcGFybV9wIDogMTsKKyAgdW5zaWduZWQgcGVuZGluZ19pbmxpbmVfcCA6IDE7CisgIHVuc2lnbmVkIG5vbmNvbnZlcnRpbmcgOiAxOworICB1bnNpZ25lZCB0aHVua19wIDogMTsKKyAgdW5zaWduZWQgdGhpc190aHVua19wIDogMTsKKyAgdW5zaWduZWQgaGlkZGVuX2ZyaWVuZF9wIDogMTsKKyAgLyogMSBzcGFyZSBiaXQuICAqLworCisgIC8qIEZvciBhIG5vbi10aHVuayBmdW5jdGlvbiBkZWNsLCB0aGlzIGlzIGEgdHJlZSBsaXN0IG9mCisgICAgIGZyaWVuZGx5IGNsYXNzZXMuIEZvciBhIHRodW5rIGZ1bmN0aW9uIGRlY2wsIGl0IGlzIHRoZQorICAgICB0aHVua2VkIHRvIGZ1bmN0aW9uIGRlY2wuICAqLworICB0cmVlIGJlZnJpZW5kaW5nX2NsYXNzZXM7CisKKyAgLyogRm9yIGEgbm9uLXZpcnR1YWwgRlVOQ1RJT05fREVDTCwgdGhpcyBpcworICAgICBERUNMX0ZSSUVORF9DT05URVhULiAgRm9yIGEgdmlydHVhbCBGVU5DVElPTl9ERUNMIGZvciB3aGljaAorICAgICBERUNMX1RISVNfVEhVTktfUCBkb2VzIG5vdCBob2xkLCB0aGlzIGlzIERFQ0xfVEhVTktTLiBCb3RoCisgICAgIHRoaXMgcG9pbnRlciBhbmQgcmVzdWx0IHBvaW50ZXIgYWRqdXN0aW5nIHRodW5rcyBhcmUKKyAgICAgY2hhaW5lZCBoZXJlLiAgVGhpcyBwb2ludGVyIHRodW5rcyB0byByZXR1cm4gcG9pbnRlciB0aHVua3MKKyAgICAgd2lsbCBiZSBjaGFpbmVkIG9uIHRoZSByZXR1cm4gcG9pbnRlciB0aHVuay4gICovCisgIHRyZWUgY29udGV4dDsKKworICB1bmlvbiBsYW5nX2RlY2xfdTUKKyAgeworICAgIC8qIEluIGEgbm9uLXRodW5rIEZVTkNUSU9OX0RFQ0wgb3IgVEVNUExBVEVfREVDTCwgdGhpcyBpcworICAgICAgIERFQ0xfQ0xPTkVEX0ZVTkNUSU9OLiAgKi8KKyAgICB0cmVlIEdUWSAoKHRhZyAoIjAiKSkpIGNsb25lZF9mdW5jdGlvbjsKKworICAgIC8qIEluIGEgRlVOQ1RJT05fREVDTCBmb3Igd2hpY2ggVEhVTktfUCBob2xkcyB0aGlzIGlzIHRoZQorICAgICAgIFRIVU5LX0ZJWEVEX09GRlNFVC4gICovCisgICAgSE9TVF9XSURFX0lOVCBHVFkgKCh0YWcgKCIxIikpKSBmaXhlZF9vZmZzZXQ7CisgIH0gR1RZICgoZGVzYyAoIiUxLnRodW5rX3AiKSkpIHU1OworCisgIHVuaW9uIGxhbmdfZGVjbF91MworICB7CisgICAgc3RydWN0IGNwX3Rva2VuX2NhY2hlICogR1RZICgodGFnICgiMSIpKSkgcGVuZGluZ19pbmxpbmVfaW5mbzsKKyAgICBzdHJ1Y3QgbGFuZ3VhZ2VfZnVuY3Rpb24gKiBHVFkgKCh0YWcgKCIwIikpKQorICAgICAgc2F2ZWRfbGFuZ3VhZ2VfZnVuY3Rpb247CisgIH0gR1RZICgoZGVzYyAoIiUxLnBlbmRpbmdfaW5saW5lX3AiKSkpIHU7CisKK307CisKKy8qIERFQ0xfTEFOR19TUEVDSUZJQyBmb3IgbmFtZXNwYWNlcy4gICovCisKK3N0cnVjdCBHVFkoKCkpIGxhbmdfZGVjbF9ucyB7CisgIHN0cnVjdCBsYW5nX2RlY2xfYmFzZSBiYXNlOworICBzdHJ1Y3QgY3BfYmluZGluZ19sZXZlbCAqbGV2ZWw7Cit9OworCisvKiBERUNMX0xBTkdfU1BFQ0lGSUMgZm9yIHBhcmFtZXRlcnMuICAqLworCitzdHJ1Y3QgR1RZKCgpKSBsYW5nX2RlY2xfcGFybSB7CisgIHN0cnVjdCBsYW5nX2RlY2xfYmFzZSBiYXNlOworICBpbnQgaW5kZXg7Cit9OworCisvKiBERUNMX0xBTkdfU1BFQ0lGSUMgZm9yIGFsbCB0eXBlcy4gIEl0IHdvdWxkIGJlIG5pY2UgdG8ganVzdCBtYWtlIHRoaXMgYQorICAgdW5pb24gcmF0aGVyIHRoYW4gYSBzdHJ1Y3QgY29udGFpbmluZyBhIHVuaW9uIGFzIGl0cyBvbmx5IGZpZWxkLCBidXQKKyAgIHRyZWUuaCBkZWNsYXJlcyBpdCBhcyBhIHN0cnVjdC4gICovCisKK3N0cnVjdCBHVFkoKCkpIGxhbmdfZGVjbCB7CisgIHVuaW9uIEdUWSgoZGVzYyAoIiVoLmJhc2Uuc2VsZWN0b3IiKSkpIGxhbmdfZGVjbF91IHsKKyAgICBzdHJ1Y3QgbGFuZ19kZWNsX2Jhc2UgR1RZICgoZGVmYXVsdCkpIGJhc2U7CisgICAgc3RydWN0IGxhbmdfZGVjbF9taW4gR1RZKCh0YWcgKCIwIikpKSBtaW47CisgICAgc3RydWN0IGxhbmdfZGVjbF9mbiBHVFkgKCh0YWcgKCIxIikpKSBmbjsKKyAgICBzdHJ1Y3QgbGFuZ19kZWNsX25zIEdUWSgodGFnICgiMiIpKSkgbnM7CisgICAgc3RydWN0IGxhbmdfZGVjbF9wYXJtIEdUWSgodGFnICgiMyIpKSkgcGFybTsKKyAgfSB1OworfTsKKworLyogTG9va3MgdGhyb3VnaCBhIHRlbXBsYXRlIChpZiBwcmVzZW50KSB0byBmaW5kIHdoYXQgaXQgZGVjbGFyZXMuICAqLworI2RlZmluZSBTVFJJUF9URU1QTEFURShOT0RFKSBcCisgIChUUkVFX0NPREUgKE5PREUpID09IFRFTVBMQVRFX0RFQ0wgPyBERUNMX1RFTVBMQVRFX1JFU1VMVCAoTk9ERSkgOiBOT0RFKQorCisjaWYgZGVmaW5lZCBFTkFCTEVfVFJFRV9DSEVDS0lORyAmJiAoR0NDX1ZFUlNJT04gPj0gMjAwNykKKworI2RlZmluZSBMQU5HX0RFQ0xfTUlOX0NIRUNLKE5PREUpIF9fZXh0ZW5zaW9uX18JCQlcCisoeyBzdHJ1Y3QgbGFuZ19kZWNsICpsdCA9IERFQ0xfTEFOR19TUEVDSUZJQyAoTk9ERSk7CQlcCisgICBpZiAoIUxBTkdfREVDTF9IQVNfTUlOIChOT0RFKSkJCQkJXAorICAgICBsYW5nX2NoZWNrX2ZhaWxlZCAoX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pOwlcCisgICAmbHQtPnUubWluOyB9KQorCisvKiBXZSB3YW50IHRvIGJlIGFibGUgdG8gY2hlY2sgREVDTF9DT05TVFJVQ1RPUl9QIGFuZCBzdWNoIG9uIGEgZnVuY3Rpb24KKyAgIHRlbXBsYXRlLCBub3QganVzdCBvbiBhIEZVTkNUSU9OX0RFQ0wuICBTbyB3aGVuIGxvb2tpbmcgZm9yIHRoaW5ncyBpbgorICAgbGFuZ19kZWNsX2ZuLCBsb29rIGRvd24gdGhyb3VnaCBhIFRFTVBMQVRFX0RFQ0wgaW50byBpdHMgcmVzdWx0LiAgKi8KKyNkZWZpbmUgTEFOR19ERUNMX0ZOX0NIRUNLKE5PREUpIF9fZXh0ZW5zaW9uX18JCQkJXAorKHsgc3RydWN0IGxhbmdfZGVjbCAqbHQgPSBERUNMX0xBTkdfU1BFQ0lGSUMgKFNUUklQX1RFTVBMQVRFIChOT0RFKSk7CVwKKyAgIGlmICghREVDTF9ERUNMQVJFU19GVU5DVElPTl9QIChOT0RFKSB8fCBsdC0+dS5iYXNlLnNlbGVjdG9yICE9IDEpCVwKKyAgICAgbGFuZ19jaGVja19mYWlsZWQgKF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKTsJCVwKKyAgICZsdC0+dS5mbjsgfSkKKworI2RlZmluZSBMQU5HX0RFQ0xfTlNfQ0hFQ0soTk9ERSkgX19leHRlbnNpb25fXwkJCQlcCisoeyBzdHJ1Y3QgbGFuZ19kZWNsICpsdCA9IERFQ0xfTEFOR19TUEVDSUZJQyAoTk9ERSk7CQkJXAorICAgaWYgKFRSRUVfQ09ERSAoTk9ERSkgIT0gTkFNRVNQQUNFX0RFQ0wgfHwgbHQtPnUuYmFzZS5zZWxlY3RvciAhPSAyKQlcCisgICAgIGxhbmdfY2hlY2tfZmFpbGVkIChfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7CQlcCisgICAmbHQtPnUubnM7IH0pCisKKyNkZWZpbmUgTEFOR19ERUNMX1BBUk1fQ0hFQ0soTk9ERSkgX19leHRlbnNpb25fXwkJXAorKHsgc3RydWN0IGxhbmdfZGVjbCAqbHQgPSBERUNMX0xBTkdfU1BFQ0lGSUMgKE5PREUpOwkJXAorICBpZiAoVFJFRV9DT0RFIChOT0RFKSAhPSBQQVJNX0RFQ0wpCQkJCVwKKyAgICBsYW5nX2NoZWNrX2ZhaWxlZCAoX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pOwlcCisgICZsdC0+dS5wYXJtOyB9KQorCisjZGVmaW5lIExBTkdfREVDTF9VMl9DSEVDSyhOT0RFLCBURikgX19leHRlbnNpb25fXwkJXAorKHsgIHN0cnVjdCBsYW5nX2RlY2wgKmx0ID0gREVDTF9MQU5HX1NQRUNJRklDIChOT0RFKTsJCVwKKyAgICBpZiAoIUxBTkdfREVDTF9IQVNfTUlOIChOT0RFKSB8fCBsdC0+dS5iYXNlLnUyc2VsICE9IFRGKQlcCisgICAgICBsYW5nX2NoZWNrX2ZhaWxlZCAoX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pOwlcCisgICAgJmx0LT51Lm1pbi51MjsgfSkKKworI2Vsc2UKKworI2RlZmluZSBMQU5HX0RFQ0xfTUlOX0NIRUNLKE5PREUpIFwKKyAgKCZERUNMX0xBTkdfU1BFQ0lGSUMgKE5PREUpLT51Lm1pbikKKworI2RlZmluZSBMQU5HX0RFQ0xfRk5fQ0hFQ0soTk9ERSkgXAorICAoJkRFQ0xfTEFOR19TUEVDSUZJQyAoU1RSSVBfVEVNUExBVEUgKE5PREUpKS0+dS5mbikKKworI2RlZmluZSBMQU5HX0RFQ0xfTlNfQ0hFQ0soTk9ERSkgXAorICAoJkRFQ0xfTEFOR19TUEVDSUZJQyAoTk9ERSktPnUubnMpCisKKyNkZWZpbmUgTEFOR19ERUNMX1BBUk1fQ0hFQ0soTk9ERSkgXAorICAoJkRFQ0xfTEFOR19TUEVDSUZJQyAoTk9ERSktPnUucGFybSkKKworI2RlZmluZSBMQU5HX0RFQ0xfVTJfQ0hFQ0soTk9ERSwgVEYpIFwKKyAgKCZERUNMX0xBTkdfU1BFQ0lGSUMgKE5PREUpLT51Lm1pbi51MikKKworI2VuZGlmIC8qIEVOQUJMRV9UUkVFX0NIRUNLSU5HICovCisKKy8qIEZvciBhIEZVTkNUSU9OX0RFQ0wgb3IgYSBWQVJfREVDTCwgdGhlIGxhbmd1YWdlIGxpbmthZ2UgZm9yIHRoZQorICAgZGVjbGFyYXRpb24uICBTb21lIGVudGl0aWVzIChsaWtlIGEgbWVtYmVyIGZ1bmN0aW9uIGluIGEgbG9jYWwKKyAgIGNsYXNzLCBvciBhIGxvY2FsIHZhcmlhYmxlKSBkbyBub3QgaGF2ZSBsaW5rYWdlIGF0IGFsbCwgYW5kIHRoaXMKKyAgIG1hY3JvIHNob3VsZCBub3QgYmUgdXNlZCBpbiB0aG9zZSBjYXNlcy4KKworICAgSW1wbGVtZW50YXRpb24gbm90ZTogQSBGVU5DVElPTl9ERUNMIHdpdGhvdXQgREVDTF9MQU5HX1NQRUNJRklDIHdhcworICAgY3JlYXRlZCBieSBsYW5ndWFnZS1pbmRlcGVuZGVudCBjb2RlLCBhbmQgaGFzIEMgbGlua2FnZS4gIE1vc3QKKyAgIFZBUl9ERUNMcyBoYXZlIEMrKyBsaW5rYWdlLCBhbmQgZG8gbm90IGhhdmUgREVDTF9MQU5HX1NQRUNJRklDLCBidXQKKyAgIHdlIGRvIGNyZWF0ZSBERUNMX0xBTkdfU1BFQ0lGSUMgZm9yIHZhcmlhYmxlcyB3aXRoIG5vbi1DKysgbGlua2FnZS4gICovCisjZGVmaW5lIERFQ0xfTEFOR1VBR0UoTk9ERSkJCQkJXAorICAoREVDTF9MQU5HX1NQRUNJRklDIChOT0RFKQkJCQlcCisgICA/IERFQ0xfTEFOR19TUEVDSUZJQyAoTk9ERSktPnUuYmFzZS5sYW5ndWFnZQkJXAorICAgOiAoVFJFRV9DT0RFIChOT0RFKSA9PSBGVU5DVElPTl9ERUNMCQkJXAorICAgICAgPyBsYW5nX2MgOiBsYW5nX2NwbHVzcGx1cykpCisKKy8qIFNldCB0aGUgbGFuZ3VhZ2UgbGlua2FnZSBmb3IgTk9ERSB0byBMQU5HVUFHRS4gICovCisjZGVmaW5lIFNFVF9ERUNMX0xBTkdVQUdFKE5PREUsIExBTkdVQUdFKSBcCisgIChERUNMX0xBTkdfU1BFQ0lGSUMgKE5PREUpLT51LmJhc2UubGFuZ3VhZ2UgPSAoTEFOR1VBR0UpKQorCisvKiBGb3IgRlVOQ1RJT05fREVDTHM6IG5vbnplcm8gbWVhbnMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGEgY29uc3RydWN0b3IuICAqLworI2RlZmluZSBERUNMX0NPTlNUUlVDVE9SX1AoTk9ERSkgXAorICAoTEFOR19ERUNMX0ZOX0NIRUNLIChOT0RFKS0+Y29uc3RydWN0b3JfYXR0cikKKworLyogTm9uemVybyBpZiBOT0RFIChhIEZVTkNUSU9OX0RFQ0wpIGlzIGEgY29uc3RydWN0b3IgZm9yIGEgY29tcGxldGUKKyAgIG9iamVjdC4gICovCisjZGVmaW5lIERFQ0xfQ09NUExFVEVfQ09OU1RSVUNUT1JfUChOT0RFKQkJXAorICAoREVDTF9DT05TVFJVQ1RPUl9QIChOT0RFKQkJCQlcCisgICAmJiBERUNMX05BTUUgKE5PREUpID09IGNvbXBsZXRlX2N0b3JfaWRlbnRpZmllcikKKworLyogTm9uemVybyBpZiBOT0RFIChhIEZVTkNUSU9OX0RFQ0wpIGlzIGEgY29uc3RydWN0b3IgZm9yIGEgYmFzZQorICAgb2JqZWN0LiAgKi8KKyNkZWZpbmUgREVDTF9CQVNFX0NPTlNUUlVDVE9SX1AoTk9ERSkJCVwKKyAgKERFQ0xfQ09OU1RSVUNUT1JfUCAoTk9ERSkJCQlcCisgICAmJiBERUNMX05BTUUgKE5PREUpID09IGJhc2VfY3Rvcl9pZGVudGlmaWVyKQorCisvKiBOb256ZXJvIGlmIE5PREUgKGEgRlVOQ1RJT05fREVDTCkgaXMgYSBjb25zdHJ1Y3RvciwgYnV0IG5vdCBlaXRoZXIgdGhlCisgICBzcGVjaWFsaXplZCBpbi1jaGFyZ2UgY29uc3RydWN0b3Igb3IgdGhlIHNwZWNpYWxpemVkIG5vdC1pbi1jaGFyZ2UKKyAgIGNvbnN0cnVjdG9yLiAgKi8KKyNkZWZpbmUgREVDTF9NQVlCRV9JTl9DSEFSR0VfQ09OU1RSVUNUT1JfUChOT0RFKQkJXAorICAoREVDTF9ERUNMQVJFU19GVU5DVElPTl9QIChOT0RFKSAmJiBERUNMX0NPTlNUUlVDVE9SX1AgKE5PREUpIFwKKyAgICYmICFERUNMX0NMT05FRF9GVU5DVElPTl9QIChOT0RFKSkKKworLyogTm9uemVybyBpZiBOT0RFIChhIEZVTkNUSU9OX0RFQ0wpIGlzIGEgY29weSBjb25zdHJ1Y3Rvci4gICovCisjZGVmaW5lIERFQ0xfQ09QWV9DT05TVFJVQ1RPUl9QKE5PREUpIFwKKyAgKERFQ0xfQ09OU1RSVUNUT1JfUCAoTk9ERSkgJiYgY29weV9mbl9wIChOT0RFKSA+IDApCisKKy8qIE5vbnplcm8gaWYgTk9ERSAoYSBGVU5DVElPTl9ERUNMKSBpcyBhIG1vdmUgY29uc3RydWN0b3IuICAqLworI2RlZmluZSBERUNMX01PVkVfQ09OU1RSVUNUT1JfUChOT0RFKSBcCisgIChERUNMX0NPTlNUUlVDVE9SX1AgKE5PREUpICYmIG1vdmVfZm5fcCAoTk9ERSkpCisKKy8qIE5vbnplcm8gaWYgTk9ERSBpcyBhIGRlc3RydWN0b3IuICAqLworI2RlZmluZSBERUNMX0RFU1RSVUNUT1JfUChOT0RFKQkJCQlcCisgIChMQU5HX0RFQ0xfRk5fQ0hFQ0sgKE5PREUpLT5kZXN0cnVjdG9yX2F0dHIpCisKKy8qIE5vbnplcm8gaWYgTk9ERSAoYSBGVU5DVElPTl9ERUNMKSBpcyBhIGRlc3RydWN0b3IsIGJ1dCBub3QgdGhlCisgICBzcGVjaWFsaXplZCBpbi1jaGFyZ2UgY29uc3RydWN0b3IsIGluLWNoYXJnZSBkZWxldGluZyBjb25zdHJ1Y3RvciwKKyAgIG9yIHRoZSBiYXNlIGRlc3RydWN0b3IuICAqLworI2RlZmluZSBERUNMX01BWUJFX0lOX0NIQVJHRV9ERVNUUlVDVE9SX1AoTk9ERSkJCQlcCisgIChERUNMX0RFQ0xBUkVTX0ZVTkNUSU9OX1AgKE5PREUpICYmIERFQ0xfREVTVFJVQ1RPUl9QIChOT0RFKQlcCisgICAmJiAhREVDTF9DTE9ORURfRlVOQ1RJT05fUCAoTk9ERSkpCisKKy8qIE5vbnplcm8gaWYgTk9ERSAoYSBGVU5DVElPTl9ERUNMKSBpcyBhIGRlc3RydWN0b3IgZm9yIGEgY29tcGxldGUKKyAgIG9iamVjdC4gICovCisjZGVmaW5lIERFQ0xfQ09NUExFVEVfREVTVFJVQ1RPUl9QKE5PREUpCQlcCisgIChERUNMX0RFU1RSVUNUT1JfUCAoTk9ERSkJCQkJXAorICAgJiYgREVDTF9OQU1FIChOT0RFKSA9PSBjb21wbGV0ZV9kdG9yX2lkZW50aWZpZXIpCisKKy8qIE5vbnplcm8gaWYgTk9ERSAoYSBGVU5DVElPTl9ERUNMKSBpcyBhIGRlc3RydWN0b3IgZm9yIGEgYmFzZQorICAgb2JqZWN0LiAgKi8KKyNkZWZpbmUgREVDTF9CQVNFX0RFU1RSVUNUT1JfUChOT0RFKQkJXAorICAoREVDTF9ERVNUUlVDVE9SX1AgKE5PREUpCQkJXAorICAgJiYgREVDTF9OQU1FIChOT0RFKSA9PSBiYXNlX2R0b3JfaWRlbnRpZmllcikKKworLyogTm9uemVybyBpZiBOT0RFIChhIEZVTkNUSU9OX0RFQ0wpIGlzIGEgZGVzdHJ1Y3RvciBmb3IgYSBjb21wbGV0ZQorICAgb2JqZWN0IHRoYXQgZGVsZXRlcyB0aGUgb2JqZWN0IGFmdGVyIGl0IGhhcyBiZWVuIGRlc3Ryb3llZC4gICovCisjZGVmaW5lIERFQ0xfREVMRVRJTkdfREVTVFJVQ1RPUl9QKE5PREUpCQlcCisgIChERUNMX0RFU1RSVUNUT1JfUCAoTk9ERSkJCQkJXAorICAgJiYgREVDTF9OQU1FIChOT0RFKSA9PSBkZWxldGluZ19kdG9yX2lkZW50aWZpZXIpCisKKy8qIE5vbnplcm8gaWYgTk9ERSAoYSBGVU5DVElPTl9ERUNMKSBpcyBhIGNsb25lZCBjb25zdHJ1Y3RvciBvcgorICAgZGVzdHJ1Y3Rvci4gICovCisjZGVmaW5lIERFQ0xfQ0xPTkVEX0ZVTkNUSU9OX1AoTk9ERSkgKCEhZGVjbF9jbG9uZWRfZnVuY3Rpb25fcCAoTk9ERSwgdHJ1ZSkpCisKKy8qIElmIERFQ0xfQ0xPTkVEX0ZVTkNUSU9OX1AgaG9sZHMsIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgd2FzCisgICBjbG9uZWQuICAqLworI2RlZmluZSBERUNMX0NMT05FRF9GVU5DVElPTihOT0RFKSAoKmRlY2xfY2xvbmVkX2Z1bmN0aW9uX3AgKE5PREUsIGZhbHNlKSkKKworLyogUGVyZm9ybSBhbiBhY3Rpb24gZm9yIGVhY2ggY2xvbmUgb2YgRk4sIGlmIEZOIGlzIGEgZnVuY3Rpb24gd2l0aAorICAgY2xvbmVzLiAgVGhpcyBtYWNybyBzaG91bGQgYmUgdXNlZCBsaWtlOgorCisgICAgICBGT1JfRUFDSF9DTE9ORSAoY2xvbmUsIGZuKQorCXsgLi4uIH0KKworICAqLworI2RlZmluZSBGT1JfRUFDSF9DTE9ORShDTE9ORSwgRk4pCQkJXAorICBpZiAoVFJFRV9DT0RFIChGTikgPT0gRlVOQ1RJT05fREVDTAkJCVwKKyAgICAgICYmIChERUNMX01BWUJFX0lOX0NIQVJHRV9DT05TVFJVQ1RPUl9QIChGTikJXAorCSAgfHwgREVDTF9NQVlCRV9JTl9DSEFSR0VfREVTVFJVQ1RPUl9QIChGTikpKQlcCisgICAgIGZvciAoQ0xPTkUgPSBUUkVFX0NIQUlOIChGTik7CQkJXAorCSAgQ0xPTkUgJiYgREVDTF9DTE9ORURfRlVOQ1RJT05fUCAoQ0xPTkUpOwlcCisJICBDTE9ORSA9IFRSRUVfQ0hBSU4gKENMT05FKSkKKworLyogTm9uemVybyBpZiBOT0RFIGhhcyBERUNMX0RJU0NSSU1JTkFUT1IgYW5kIG5vdCBERUNMX0FDQ0VTUy4gICovCisjZGVmaW5lIERFQ0xfRElTQ1JJTUlOQVRPUl9QKE5PREUpCVwKKyAgKFRSRUVfQ09ERSAoTk9ERSkgPT0gVkFSX0RFQ0wJCVwKKyAgICYmIERFQ0xfRlVOQ1RJT05fU0NPUEVfUCAoTk9ERSkpCisKKy8qIERpc2NyaW1pbmF0b3IgZm9yIG5hbWUgbWFuZ2xpbmcuICAqLworI2RlZmluZSBERUNMX0RJU0NSSU1JTkFUT1IoTk9ERSkgKExBTkdfREVDTF9VMl9DSEVDSyAoTk9ERSwgMSktPmRpc2NyaW1pbmF0b3IpCisKKy8qIFRydWUgaWZmIERFQ0xfRElTQ1JJTUlOQVRPUiBpcyBzZXQgZm9yIGEgREVDTF9ESVNDUklNSU5BVE9SX1AgZGVjbC4gICovCisjZGVmaW5lIERFQ0xfRElTQ1JJTUlOQVRPUl9TRVRfUChOT0RFKSBcCisgIChERUNMX0xBTkdfU1BFQ0lGSUMgKE5PREUpICYmIERFQ0xfTEFOR19TUEVDSUZJQyAoTk9ERSktPnUuYmFzZS51MnNlbCA9PSAxKQorCisvKiBUaGUgaW5kZXggb2YgYSB1c2VyLWRlY2xhcmVkIHBhcmFtZXRlciBpbiBpdHMgZnVuY3Rpb24sIHN0YXJ0aW5nIGF0IDEuCisgICBBbGwgYXJ0aWZpY2lhbCBwYXJhbWV0ZXJzIHdpbGwgaGF2ZSBpbmRleCAwLiAgKi8KKyNkZWZpbmUgREVDTF9QQVJNX0lOREVYKE5PREUpIFwKKyAgKExBTkdfREVDTF9QQVJNX0NIRUNLIChOT0RFKS0+aW5kZXgpCisKKy8qIE5vbnplcm8gaWYgdGhlIFZUVCBwYXJtIGhhcyBiZWVuIGFkZGVkIHRvIE5PREUuICAqLworI2RlZmluZSBERUNMX0hBU19WVFRfUEFSTV9QKE5PREUpIFwKKyAgKExBTkdfREVDTF9GTl9DSEVDSyAoTk9ERSktPmhhc192dHRfcGFybV9wKQorCisvKiBOb256ZXJvIGlmIE5PREUgaXMgYSBGVU5DVElPTl9ERUNMIGZvciB3aGljaCBhIFZUVCBwYXJhbWV0ZXIgaXMKKyAgIHJlcXVpcmVkLiAgKi8KKyNkZWZpbmUgREVDTF9ORUVEU19WVFRfUEFSTV9QKE5PREUpCQkJXAorICAoQ0xBU1NUWVBFX1ZCQVNFQ0xBU1NFUyAoREVDTF9DT05URVhUIChOT0RFKSkJCVwKKyAgICYmIChERUNMX0JBU0VfQ09OU1RSVUNUT1JfUCAoTk9ERSkJCQlcCisgICAgICAgfHwgREVDTF9CQVNFX0RFU1RSVUNUT1JfUCAoTk9ERSkpKQorCisvKiBOb256ZXJvIGlmIE5PREUgaXMgYSB1c2VyLWRlZmluZWQgY29udmVyc2lvbiBvcGVyYXRvci4gICovCisjZGVmaW5lIERFQ0xfQ09OVl9GTl9QKE5PREUpIFwKKyAgKERFQ0xfTkFNRSAoTk9ERSkgJiYgSURFTlRJRklFUl9UWVBFTkFNRV9QIChERUNMX05BTUUgKE5PREUpKSkKKworLyogSWYgRk4gaXMgYSBjb252ZXJzaW9uIG9wZXJhdG9yLCB0aGUgdHlwZSB0byB3aGljaCBpdCBjb252ZXJ0cy4KKyAgIE90aGVyd2lzZSwgTlVMTF9UUkVFLiAgKi8KKyNkZWZpbmUgREVDTF9DT05WX0ZOX1RZUEUoRk4pIFwKKyAgKERFQ0xfQ09OVl9GTl9QIChGTikgPyBUUkVFX1RZUEUgKERFQ0xfTkFNRSAoRk4pKSA6IE5VTExfVFJFRSkKKworLyogTm9uemVybyBpZiBOT0RFLCB3aGljaCBpcyBhIFRFTVBMQVRFX0RFQ0wsIGlzIGEgdGVtcGxhdGUKKyAgIGNvbnZlcnNpb24gb3BlcmF0b3IgdG8gYSB0eXBlIGRlcGVuZGVudCBvbiB0aGUgaW5uZXJtb3N0IHRlbXBsYXRlCisgICBhcmdzLiAgKi8KKyNkZWZpbmUgREVDTF9URU1QTEFURV9DT05WX0ZOX1AoTk9ERSkgXAorICAoREVDTF9MQU5HX1NQRUNJRklDIChURU1QTEFURV9ERUNMX0NIRUNLIChOT0RFKSktPnUuYmFzZS50ZW1wbGF0ZV9jb252X3ApCisKKy8qIFNldCB0aGUgb3ZlcmxvYWRlZCBvcGVyYXRvciBjb2RlIGZvciBOT0RFIHRvIENPREUuICAqLworI2RlZmluZSBTRVRfT1ZFUkxPQURFRF9PUEVSQVRPUl9DT0RFKE5PREUsIENPREUpIFwKKyAgKExBTkdfREVDTF9GTl9DSEVDSyAoTk9ERSktPm9wZXJhdG9yX2NvZGUgPSAoQ09ERSkpCisKKy8qIElmIE5PREUgaXMgYW4gb3ZlcmxvYWRlZCBvcGVyYXRvciwgdGhlbiB0aGlzIHJldHVybnMgdGhlIFRSRUVfQ09ERQorICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBvdmVybG9hZGVkIG9wZXJhdG9yLgorICAgREVDTF9BU1NJR05NRU5UX09QRVJBVE9SX1AgbXVzdCBhbHNvIGJlIGNoZWNrZWQgdG8gZGV0ZXJtaW5lCisgICB3aGV0aGVyIG9yIG5vdCBOT0RFIGlzIGFuIGFzc2lnbm1lbnQgb3BlcmF0b3IuICBJZiBOT0RFIGlzIG5vdCBhbgorICAgb3ZlcmxvYWRlZCBvcGVyYXRvciwgRVJST1JfTUFSSyBpcyByZXR1cm5lZC4gIFNpbmNlIHRoZSBudW1lcmljYWwKKyAgIHZhbHVlIG9mIEVSUk9SX01BUksgaXMgemVybywgdGhpcyBtYWNybyBjYW4gYmUgdXNlZCBhcyBhIHByZWRpY2F0ZQorICAgdG8gdGVzdCB3aGV0aGVyIG9yIG5vdCBOT0RFIGlzIGFuIG92ZXJsb2FkZWQgb3BlcmF0b3IuICAqLworI2RlZmluZSBERUNMX09WRVJMT0FERURfT1BFUkFUT1JfUChOT0RFKQkJXAorICAoSURFTlRJRklFUl9PUE5BTUVfUCAoREVDTF9OQU1FIChOT0RFKSkJCVwKKyAgID8gTEFOR19ERUNMX0ZOX0NIRUNLIChOT0RFKS0+b3BlcmF0b3JfY29kZSA6IEVSUk9SX01BUkspCisKKy8qIE5vbnplcm8gaWYgTk9ERSBpcyBhbiBhc3NpZ25tZW50IG9wZXJhdG9yIChpbmNsdWRpbmcgKz0gYW5kIHN1Y2gpLiAgKi8KKyNkZWZpbmUgREVDTF9BU1NJR05NRU5UX09QRVJBVE9SX1AoTk9ERSkgXAorICAoTEFOR19ERUNMX0ZOX0NIRUNLIChOT0RFKS0+YXNzaWdubWVudF9vcGVyYXRvcl9wKQorCisvKiBGb3IgRlVOQ1RJT05fREVDTHM6IG5vbnplcm8gbWVhbnMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGEKKyAgIGNvbnN0cnVjdG9yIG9yIGEgZGVzdHJ1Y3RvciB3aXRoIGFuIGV4dHJhIGluLWNoYXJnZSBwYXJhbWV0ZXIgdG8KKyAgIGNvbnRyb2wgd2hldGhlciBvciBub3QgdmlydHVhbCBiYXNlcyBhcmUgY29uc3RydWN0ZWQuICAqLworI2RlZmluZSBERUNMX0hBU19JTl9DSEFSR0VfUEFSTV9QKE5PREUpIFwKKyAgKExBTkdfREVDTF9GTl9DSEVDSyAoTk9ERSktPmhhc19pbl9jaGFyZ2VfcGFybV9wKQorCisvKiBOb256ZXJvIGlmIERFQ0wgaXMgYSBkZWNsYXJhdGlvbiBvZiBfX2J1aWx0aW5fY29uc3RhbnRfcC4gICovCisjZGVmaW5lIERFQ0xfSVNfQlVJTFRJTl9DT05TVEFOVF9QKE5PREUpCQlcCisgKFRSRUVfQ09ERSAoTk9ERSkgPT0gRlVOQ1RJT05fREVDTAkJCVwKKyAgJiYgREVDTF9CVUlMVF9JTl9DTEFTUyAoTk9ERSkgPT0gQlVJTFRfSU5fTk9STUFMCVwKKyAgJiYgREVDTF9GVU5DVElPTl9DT0RFIChOT0RFKSA9PSBCVUlMVF9JTl9DT05TVEFOVF9QKQorCisvKiBOb256ZXJvIGZvciBfREVDTCBtZWFucyB0aGF0IHRoaXMgZGVjbCBhcHBlYXJzIGluIChvciB3aWxsIGFwcGVhcgorICAgaW4pIGFzIGEgbWVtYmVyIGluIGEgUkVDT1JEX1RZUEUgb3IgVU5JT05fVFlQRSBub2RlLiAgSXQgaXMgYWxzbyBmb3IKKyAgIGRldGVjdGluZyBjaXJjdWxhcml0eSBpbiBjYXNlIG1lbWJlcnMgYXJlIG11bHRpcGx5IGRlZmluZWQuICBJbiB0aGUKKyAgIGNhc2Ugb2YgYSBWQVJfREVDTCwgaXQgaXMgYWxzbyB1c2VkIHRvIGRldGVybWluZSBob3cgcHJvZ3JhbSBzdG9yYWdlCisgICBzaG91bGQgYmUgYWxsb2NhdGVkLiAgKi8KKyNkZWZpbmUgREVDTF9JTl9BR0dSX1AoTk9ERSkgKERFQ0xfTEFOR19GTEFHXzMgKE5PREUpKQorCisvKiBOb256ZXJvIGZvciBhIFZBUl9ERUNMIG1lYW5zIHRoYXQgdGhlIHZhcmlhYmxlJ3MgaW5pdGlhbGl6YXRpb24gKGlmCisgICBhbnkpIGhhcyBiZWVuIHByb2Nlc3NlZC4gIChJbiBnZW5lcmFsLCBERUNMX0lOSVRJQUxJWkVEX1AgaXMKKyAgICFERUNMX0VYVEVSTiwgYnV0IHN0YXRpYyBkYXRhIG1lbWJlcnMgbWF5IGJlIGluaXRpYWxpemVkIGV2ZW4gaWYKKyAgIG5vdCBkZWZpbmVkLikgICovCisjZGVmaW5lIERFQ0xfSU5JVElBTElaRURfUChOT0RFKSBcCisgICAoVFJFRV9MQU5HX0ZMQUdfMSAoVkFSX0RFQ0xfQ0hFQ0sgKE5PREUpKSkKKworLyogTm9uemVybyBmb3IgYSBWQVJfREVDTCBpZmYgYW4gZXhwbGljaXQgaW5pdGlhbGl6ZXIgd2FzIHByb3ZpZGVkLiAgKi8KKyNkZWZpbmUgREVDTF9OT05UUklWSUFMTFlfSU5JVElBTElaRURfUChOT0RFKQlcCisgICAoVFJFRV9MQU5HX0ZMQUdfMyAoVkFSX0RFQ0xfQ0hFQ0sgKE5PREUpKSkKKworLyogTm9uemVybyBmb3IgYSBWQVJfREVDTCB0aGF0IHdhcyBpbml0aWFsaXplZCB3aXRoIGEKKyAgIGNvbnN0YW50LWV4cHJlc3Npb24uICAqLworI2RlZmluZSBERUNMX0lOSVRJQUxJWkVEX0JZX0NPTlNUQU5UX0VYUFJFU1NJT05fUChOT0RFKSBcCisgIChUUkVFX0xBTkdfRkxBR18yIChWQVJfREVDTF9DSEVDSyAoTk9ERSkpKQorCisvKiBOb256ZXJvIGZvciBhIFZBUl9ERUNMIHRoYXQgY2FuIGJlIHVzZWQgaW4gYW4gaW50ZWdyYWwgY29uc3RhbnQKKyAgIGV4cHJlc3Npb24uCisKKyAgICAgIFtleHByLmNvbnN0XQorCisgICAgICBBbiBpbnRlZ3JhbCBjb25zdGFudC1leHByZXNzaW9uIGNhbiBvbmx5IGludm9sdmUgLi4uIGNvbnN0CisgICAgICB2YXJpYWJsZXMgb2Ygc3RhdGljIG9yIGVudW1lcmF0aW9uIHR5cGVzIGluaXRpYWxpemVkIHdpdGgKKyAgICAgIGNvbnN0YW50IGV4cHJlc3Npb25zIC4uLgorCisgICBUaGUgc3RhbmRhcmQgZG9lcyBub3QgcmVxdWlyZSB0aGF0IHRoZSBleHByZXNzaW9uIGJlIG5vbi12b2xhdGlsZS4KKyAgIEcrKyBpbXBsZW1lbnRzIHRoZSBwcm9wb3NlZCBjb3JyZWN0aW9uIGluIERSIDQ1Ny4gICovCisjZGVmaW5lIERFQ0xfSU5URUdSQUxfQ09OU1RBTlRfVkFSX1AoTk9ERSkJCVwKKyAgKFRSRUVfQ09ERSAoTk9ERSkgPT0gVkFSX0RFQ0wJCQkJXAorICAgJiYgQ1BfVFlQRV9DT05TVF9OT05fVk9MQVRJTEVfUCAoVFJFRV9UWVBFIChOT0RFKSkJXAorICAgJiYgSU5URUdSQUxfT1JfRU5VTUVSQVRJT05fVFlQRV9QIChUUkVFX1RZUEUgKE5PREUpKQlcCisgICAmJiBERUNMX0lOSVRJQUxJWkVEX0JZX0NPTlNUQU5UX0VYUFJFU1NJT05fUCAoTk9ERSkpCisKKy8qIE5vbnplcm8gaWYgdGhlIERFQ0wgd2FzIGluaXRpYWxpemVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGl0c2VsZiwKKyAgIHJhdGhlciB0aGFuIG91dHNpZGUgdGhlIGNsYXNzLiAgVGhpcyBpcyB1c2VkIGZvciBib3RoIHN0YXRpYyBtZW1iZXIKKyAgIFZBUl9ERUNMUywgYW5kIEZVTkNUSU9OX0RFQ0xTIHRoYXQgYXJlIGRlZmluZWQgaW4gdGhlIGNsYXNzLiAgKi8KKyNkZWZpbmUgREVDTF9JTklUSUFMSVpFRF9JTl9DTEFTU19QKERFQ0wpIFwKKyAgKERFQ0xfTEFOR19TUEVDSUZJQyAoVkFSX09SX0ZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKERFQ0wpKSBcCisgICAtPnUuYmFzZS5pbml0aWFsaXplZF9pbl9jbGFzcykKKworLyogTm9uemVybyBpZiB0aGUgREVDTCBpcyB1c2VkIGluIHRoZSBzZW5zZSBvZiAzLjIgW2Jhc2ljLmRlZi5vZHJdLgorICAgT25seSBhdmFpbGFibGUgZm9yIGRlY2xzIHdpdGggREVDTF9MQU5HX1NQRUNJRklDLiAgKi8KKyNkZWZpbmUgREVDTF9PRFJfVVNFRChERUNMKSBcCisgIChERUNMX0xBTkdfU1BFQ0lGSUMgKFZBUl9PUl9GVU5DVElPTl9ERUNMX0NIRUNLIChERUNMKSkgXAorICAgLT51LmJhc2Uub2RyX3VzZWQpCisKKy8qIE5vbnplcm8gZm9yIERFQ0wgbWVhbnMgdGhhdCB0aGlzIGRlY2wgaXMganVzdCBhIGZyaWVuZCBkZWNsYXJhdGlvbiwKKyAgIGFuZCBzaG91bGQgbm90IGJlIGFkZGVkIHRvIHRoZSBsaXN0IG9mIG1lbWJlcnMgZm9yIHRoaXMgY2xhc3MuICAqLworI2RlZmluZSBERUNMX0ZSSUVORF9QKE5PREUpIChERUNMX0xBTkdfU1BFQ0lGSUMgKE5PREUpLT51LmJhc2UuZnJpZW5kX2F0dHIpCisKKy8qIEEgVFJFRV9MSVNUIG9mIHRoZSB0eXBlcyB3aGljaCBoYXZlIGJlZnJpZW5kZWQgdGhpcyBGVU5DVElPTl9ERUNMLiAgKi8KKyNkZWZpbmUgREVDTF9CRUZSSUVORElOR19DTEFTU0VTKE5PREUpIFwKKyAgKExBTkdfREVDTF9GTl9DSEVDSyAoTk9ERSktPmJlZnJpZW5kaW5nX2NsYXNzZXMpCisKKy8qIE5vbnplcm8gZm9yIEZVTkNUSU9OX0RFQ0wgbWVhbnMgdGhhdCB0aGlzIGRlY2wgaXMgYSBzdGF0aWMKKyAgIG1lbWJlciBmdW5jdGlvbi4gICovCisjZGVmaW5lIERFQ0xfU1RBVElDX0ZVTkNUSU9OX1AoTk9ERSkgXAorICAoTEFOR19ERUNMX0ZOX0NIRUNLIChOT0RFKS0+c3RhdGljX2Z1bmN0aW9uKQorCisvKiBOb256ZXJvIGZvciBGVU5DVElPTl9ERUNMIG1lYW5zIHRoYXQgdGhpcyBkZWNsIGlzIGEgbm9uLXN0YXRpYworICAgbWVtYmVyIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgREVDTF9OT05TVEFUSUNfTUVNQkVSX0ZVTkNUSU9OX1AoTk9ERSkgXAorICAoVFJFRV9DT0RFIChUUkVFX1RZUEUgKE5PREUpKSA9PSBNRVRIT0RfVFlQRSkKKworLyogTm9uemVybyBmb3IgRlVOQ1RJT05fREVDTCBtZWFucyB0aGF0IHRoaXMgZGVjbCBpcyBhIG1lbWJlciBmdW5jdGlvbgorICAgKHN0YXRpYyBvciBub24tc3RhdGljKS4gICovCisjZGVmaW5lIERFQ0xfRlVOQ1RJT05fTUVNQkVSX1AoTk9ERSkgXAorICAoREVDTF9OT05TVEFUSUNfTUVNQkVSX0ZVTkNUSU9OX1AgKE5PREUpIHx8IERFQ0xfU1RBVElDX0ZVTkNUSU9OX1AgKE5PREUpKQorCisvKiBOb256ZXJvIGZvciBGVU5DVElPTl9ERUNMIG1lYW5zIHRoYXQgdGhpcyBtZW1iZXIgZnVuY3Rpb24KKyAgIGhhcyBgdGhpcycgYXMgY29uc3QgWCAqY29uc3QuICAqLworI2RlZmluZSBERUNMX0NPTlNUX01FTUZVTkNfUChOT0RFKQkJCQkJIFwKKyAgKERFQ0xfTk9OU1RBVElDX01FTUJFUl9GVU5DVElPTl9QIChOT0RFKQkJCQkgXAorICAgJiYgQ1BfVFlQRV9DT05TVF9QIChUUkVFX1RZUEUgKFRSRUVfVkFMVUUJCQkJIFwKKwkJCQkgIChUWVBFX0FSR19UWVBFUyAoVFJFRV9UWVBFIChOT0RFKSkpKSkpCisKKy8qIE5vbnplcm8gZm9yIEZVTkNUSU9OX0RFQ0wgbWVhbnMgdGhhdCB0aGlzIG1lbWJlciBmdW5jdGlvbgorICAgaGFzIGB0aGlzJyBhcyB2b2xhdGlsZSBYICpjb25zdC4gICovCisjZGVmaW5lIERFQ0xfVk9MQVRJTEVfTUVNRlVOQ19QKE5PREUpCQkJCQkgXAorICAoREVDTF9OT05TVEFUSUNfTUVNQkVSX0ZVTkNUSU9OX1AgKE5PREUpCQkJCSBcCisgICAmJiBDUF9UWVBFX1ZPTEFUSUxFX1AgKFRSRUVfVFlQRSAoVFJFRV9WQUxVRQkJCQkgXAorCQkJCSAgKFRZUEVfQVJHX1RZUEVTIChUUkVFX1RZUEUgKE5PREUpKSkpKSkKKworLyogTm9uemVybyBmb3IgYSBERUNMIG1lYW5zIHRoYXQgdGhpcyBtZW1iZXIgaXMgYSBub24tc3RhdGljIG1lbWJlci4gICovCisjZGVmaW5lIERFQ0xfTk9OU1RBVElDX01FTUJFUl9QKE5PREUpCQlcCisgIChERUNMX05PTlNUQVRJQ19NRU1CRVJfRlVOQ1RJT05fUCAoTk9ERSkJXAorICAgfHwgVFJFRV9DT0RFIChOT0RFKSA9PSBGSUVMRF9ERUNMKQorCisvKiBOb256ZXJvIGZvciBfREVDTCBtZWFucyB0aGF0IHRoaXMgbWVtYmVyIG9iamVjdCB0eXBlCisgICBpcyBtdXRhYmxlLiAgKi8KKyNkZWZpbmUgREVDTF9NVVRBQkxFX1AoTk9ERSkgKERFQ0xfTEFOR19GTEFHXzAgKE5PREUpKQorCisvKiBOb256ZXJvIGZvciBfREVDTCBtZWFucyB0aGF0IHRoaXMgY29uc3RydWN0b3Igb3IgY29udmVyc2lvbiBmdW5jdGlvbiBpcworICAgbm9uLWNvbnZlcnRpbmcuICAqLworI2RlZmluZSBERUNMX05PTkNPTlZFUlRJTkdfUChOT0RFKSBcCisgIChMQU5HX0RFQ0xfRk5fQ0hFQ0sgKE5PREUpLT5ub25jb252ZXJ0aW5nKQorCisvKiBOb256ZXJvIGZvciBGVU5DVElPTl9ERUNMIG1lYW5zIHRoYXQgdGhpcyBtZW1iZXIgZnVuY3Rpb24gaXMgYSBwdXJlCisgICB2aXJ0dWFsIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgREVDTF9QVVJFX1ZJUlRVQUxfUChOT0RFKSBcCisgIChMQU5HX0RFQ0xfRk5fQ0hFQ0sgKE5PREUpLT5wdXJlX3ZpcnR1YWwpCisKKy8qIFRydWUgKGluIGEgRlVOQ1RJT05fREVDTCkgaWYgTk9ERSBpcyBhIHZpcnR1YWwgZnVuY3Rpb24gdGhhdCBpcyBhbgorICAgaW52YWxpZCBvdmVycmlkZXIgZm9yIGEgZnVuY3Rpb24gZnJvbSBhIGJhc2UgY2xhc3MuICBPbmNlIHdlIGhhdmUKKyAgIGNvbXBsYWluZWQgYWJvdXQgYW4gaW52YWxpZCBvdmVycmlkZXIgd2UgYXZvaWQgY29tcGxhaW5pbmcgYWJvdXQgaXQKKyAgIGFnYWluLiAgKi8KKyNkZWZpbmUgREVDTF9JTlZBTElEX09WRVJSSURFUl9QKE5PREUpIFwKKyAgKERFQ0xfTEFOR19GTEFHXzQgKE5PREUpKQorCisvKiBUaGUgdGh1bmtzIGFzc29jaWF0ZWQgd2l0aCBOT0RFLCBhIEZVTkNUSU9OX0RFQ0wuICAqLworI2RlZmluZSBERUNMX1RIVU5LUyhOT0RFKSBcCisgIChMQU5HX0RFQ0xfRk5fQ0hFQ0sgKE5PREUpLT5jb250ZXh0KQorCisvKiBOb256ZXJvIGlmIE5PREUgaXMgYSB0aHVuaywgcmF0aGVyIHRoYW4gYW4gb3JkaW5hcnkgZnVuY3Rpb24uICAqLworI2RlZmluZSBERUNMX1RIVU5LX1AoTk9ERSkJCQlcCisgIChUUkVFX0NPREUgKE5PREUpID09IEZVTkNUSU9OX0RFQ0wJCVwKKyAgICYmIERFQ0xfTEFOR19TUEVDSUZJQyAoTk9ERSkJCQlcCisgICAmJiBMQU5HX0RFQ0xfRk5fQ0hFQ0sgKE5PREUpLT50aHVua19wKQorCisvKiBTZXQgREVDTF9USFVOS19QIGZvciBub2RlLiAgKi8KKyNkZWZpbmUgU0VUX0RFQ0xfVEhVTktfUChOT0RFLCBUSElTX0FESlVTVElORykJCQlcCisgIChMQU5HX0RFQ0xfRk5fQ0hFQ0sgKE5PREUpLT50aHVua19wID0gMSwJCQlcCisgICBMQU5HX0RFQ0xfRk5fQ0hFQ0sgKE5PREUpLT50aGlzX3RodW5rX3AgPSAoVEhJU19BREpVU1RJTkcpKQorCisvKiBOb256ZXJvIGlmIE5PREUgaXMgYSB0aGlzIHBvaW50ZXIgYWRqdXN0aW5nIHRodW5rLiAgKi8KKyNkZWZpbmUgREVDTF9USElTX1RIVU5LX1AoTk9ERSkJCQlcCisgIChERUNMX1RIVU5LX1AgKE5PREUpICYmIExBTkdfREVDTF9GTl9DSEVDSyAoTk9ERSktPnRoaXNfdGh1bmtfcCkKKworLyogTm9uemVybyBpZiBOT0RFIGlzIGEgcmVzdWx0IHBvaW50ZXIgYWRqdXN0aW5nIHRodW5rLiAgKi8KKyNkZWZpbmUgREVDTF9SRVNVTFRfVEhVTktfUChOT0RFKQkJCVwKKyAgKERFQ0xfVEhVTktfUCAoTk9ERSkgJiYgIUxBTkdfREVDTF9GTl9DSEVDSyAoTk9ERSktPnRoaXNfdGh1bmtfcCkKKworLyogTm9uemVybyBpZiBOT0RFIGlzIGEgRlVOQ1RJT05fREVDTCwgYnV0IG5vdCBhIHRodW5rLiAgKi8KKyNkZWZpbmUgREVDTF9OT05fVEhVTktfRlVOQ1RJT05fUChOT0RFKQkJCQlcCisgIChUUkVFX0NPREUgKE5PREUpID09IEZVTkNUSU9OX0RFQ0wgJiYgIURFQ0xfVEhVTktfUCAoTk9ERSkpCisKKy8qIE5vbnplcm8gaWYgTk9ERSBpcyBgZXh0ZXJuICJDIicuICAqLworI2RlZmluZSBERUNMX0VYVEVSTl9DX1AoTk9ERSkgXAorICAoREVDTF9MQU5HVUFHRSAoTk9ERSkgPT0gbGFuZ19jKQorCisvKiBOb256ZXJvIGlmIE5PREUgaXMgYW4gYGV4dGVybiAiQyInIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgREVDTF9FWFRFUk5fQ19GVU5DVElPTl9QKE5PREUpIFwKKyAgKERFQ0xfTk9OX1RIVU5LX0ZVTkNUSU9OX1AgKE5PREUpICYmIERFQ0xfRVhURVJOX0NfUCAoTk9ERSkpCisKKy8qIFRydWUgaWZmIERFQ0wgaXMgYW4gZW50aXR5IHdpdGggdmFndWUgbGlua2FnZSB3aG9zZSBkZWZpbml0aW9uIGlzCisgICBhdmFpbGFibGUgaW4gdGhpcyB0cmFuc2xhdGlvbiB1bml0LiAgKi8KKyNkZWZpbmUgREVDTF9SRVBPX0FWQUlMQUJMRV9QKE5PREUpIFwKKyAgKERFQ0xfTEFOR19TUEVDSUZJQyAoTk9ERSktPnUuYmFzZS5yZXBvX2F2YWlsYWJsZV9wKQorCisvKiBUcnVlIGlmIERFQ0wgaXMgZGVjbGFyZWQgJ2NvbnN0ZXhwcicuICAqLworI2RlZmluZSBERUNMX0RFQ0xBUkVEX0NPTlNURVhQUl9QKERFQ0wpIFwKKyAgREVDTF9MQU5HX0ZMQUdfOCAoVkFSX09SX0ZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKERFQ0wpKQorCisvKiBOb256ZXJvIGlmIHRoaXMgREVDTCBpcyB0aGUgX19QUkVUVFlfRlVOQ1RJT05fXyB2YXJpYWJsZSBpbiBhCisgICB0ZW1wbGF0ZSBmdW5jdGlvbi4gICovCisjZGVmaW5lIERFQ0xfUFJFVFRZX0ZVTkNUSU9OX1AoTk9ERSkgXAorICAoVFJFRV9MQU5HX0ZMQUdfMCAoVkFSX0RFQ0xfQ0hFQ0sgKE5PREUpKSkKKworLyogVGhlIF9UWVBFIGNvbnRleHQgaW4gd2hpY2ggdGhpcyBfREVDTCBhcHBlYXJzLiAgVGhpcyBmaWVsZCBob2xkcyB0aGUKKyAgIGNsYXNzIHdoZXJlIGEgdmlydHVhbCBmdW5jdGlvbiBpbnN0YW5jZSBpcyBhY3R1YWxseSBkZWZpbmVkLiAgKi8KKyNkZWZpbmUgREVDTF9DTEFTU19DT05URVhUKE5PREUpIFwKKyAgKERFQ0xfQ0xBU1NfU0NPUEVfUCAoTk9ERSkgPyBERUNMX0NPTlRFWFQgKE5PREUpIDogTlVMTF9UUkVFKQorCisvKiBGb3IgYSBub24tbWVtYmVyIGZyaWVuZCBmdW5jdGlvbiwgdGhlIGNsYXNzIChpZiBhbnkpIGluIHdoaWNoIHRoaXMKKyAgIGZyaWVuZCB3YXMgZGVmaW5lZC4gIEZvciBleGFtcGxlLCBnaXZlbjoKKworICAgICBzdHJ1Y3QgUyB7IGZyaWVuZCB2b2lkIGYgKCk7IH07CisKKyAgIHRoZSBERUNMX0ZSSUVORF9DT05URVhUIGZvciBgZicgd2lsbCBiZSBgUycuICAqLworI2RlZmluZSBERUNMX0ZSSUVORF9DT05URVhUKE5PREUpCQkJCVwKKyAgKChERUNMX0RFQ0xBUkVTX0ZVTkNUSU9OX1AgKE5PREUpCQkJCVwKKyAgICAmJiBERUNMX0ZSSUVORF9QIChOT0RFKSAmJiAhREVDTF9GVU5DVElPTl9NRU1CRVJfUCAoTk9ERSkpCVwKKyAgID8gTEFOR19ERUNMX0ZOX0NIRUNLIChOT0RFKS0+Y29udGV4dAkJCQlcCisgICA6IE5VTExfVFJFRSkKKworLyogU2V0IHRoZSBERUNMX0ZSSUVORF9DT05URVhUIGZvciBOT0RFIHRvIENPTlRFWFQuICAqLworI2RlZmluZSBTRVRfREVDTF9GUklFTkRfQ09OVEVYVChOT0RFLCBDT05URVhUKSBcCisgIChMQU5HX0RFQ0xfRk5fQ0hFQ0sgKE5PREUpLT5jb250ZXh0ID0gKENPTlRFWFQpKQorCisvKiBOVUxMX1RSRUUgaW4gREVDTF9DT05URVhUIHJlcHJlc2VudHMgdGhlIGdsb2JhbCBuYW1lc3BhY2UuICAqLworI2RlZmluZSBDUF9ERUNMX0NPTlRFWFQoTk9ERSkgXAorICAoREVDTF9DT05URVhUIChOT0RFKSA/IERFQ0xfQ09OVEVYVCAoTk9ERSkgOiBnbG9iYWxfbmFtZXNwYWNlKQorI2RlZmluZSBDUF9UWVBFX0NPTlRFWFQoTk9ERSkgXAorICAoVFlQRV9DT05URVhUIChOT0RFKSA/IFRZUEVfQ09OVEVYVCAoTk9ERSkgOiBnbG9iYWxfbmFtZXNwYWNlKQorI2RlZmluZSBGUk9CX0NPTlRFWFQoTk9ERSkgICAoKE5PREUpID09IGdsb2JhbF9uYW1lc3BhY2UgPyBOVUxMX1RSRUUgOiAoTk9ERSkpCisKKy8qIDEgaWZmIE5PREUgaGFzIG5hbWVzcGFjZSBzY29wZSwgaW5jbHVkaW5nIHRoZSBnbG9iYWwgbmFtZXNwYWNlLiAgKi8KKyNkZWZpbmUgREVDTF9OQU1FU1BBQ0VfU0NPUEVfUChOT0RFKQkJCQlcCisgICghREVDTF9URU1QTEFURV9QQVJNX1AgKE5PREUpCQkJCQlcCisgICAmJiBUUkVFX0NPREUgKENQX0RFQ0xfQ09OVEVYVCAoTk9ERSkpID09IE5BTUVTUEFDRV9ERUNMKQorCisjZGVmaW5lIFRZUEVfTkFNRVNQQUNFX1NDT1BFX1AoTk9ERSkgXAorICAoVFJFRV9DT0RFIChDUF9UWVBFX0NPTlRFWFQgKE5PREUpKSA9PSBOQU1FU1BBQ0VfREVDTCkKKworI2RlZmluZSBOQU1FU1BBQ0VfU0NPUEVfUChOT0RFKSBcCisgICgoREVDTF9QIChOT0RFKSAmJiBERUNMX05BTUVTUEFDRV9TQ09QRV9QIChOT0RFKSkgXAorICAgfHwgKFRZUEVfUCAoTk9ERSkgJiYgVFlQRV9OQU1FU1BBQ0VfU0NPUEVfUCAoTk9ERSkpKQorCisvKiAxIGlmZiBOT0RFIGlzIGEgY2xhc3MgbWVtYmVyLiAgKi8KKyNkZWZpbmUgREVDTF9DTEFTU19TQ09QRV9QKE5PREUpIFwKKyAgKERFQ0xfQ09OVEVYVCAoTk9ERSkgJiYgVFlQRV9QIChERUNMX0NPTlRFWFQgKE5PREUpKSkKKworI2RlZmluZSBUWVBFX0NMQVNTX1NDT1BFX1AoTk9ERSkgXAorICAoVFlQRV9DT05URVhUIChOT0RFKSAmJiBUWVBFX1AgKFRZUEVfQ09OVEVYVCAoTk9ERSkpKQorCisvKiAxIGlmZiBOT0RFIGlzIGZ1bmN0aW9uLWxvY2FsLiAgKi8KKyNkZWZpbmUgREVDTF9GVU5DVElPTl9TQ09QRV9QKE5PREUpIFwKKyAgKERFQ0xfQ09OVEVYVCAoTk9ERSkgXAorICAgJiYgVFJFRV9DT0RFIChERUNMX0NPTlRFWFQgKE5PREUpKSA9PSBGVU5DVElPTl9ERUNMKQorCisjZGVmaW5lIFRZUEVfRlVOQ1RJT05fU0NPUEVfUChOT0RFKSBcCisgIChUWVBFX0NPTlRFWFQgKE5PREUpICYmIFRSRUVfQ09ERSAoVFlQRV9DT05URVhUIChOT0RFKSkgPT0gRlVOQ1RJT05fREVDTCkKKworLyogMSBpZmYgVkFSX0RFQ0wgbm9kZSBOT0RFIGlzIGEgdHlwZS1pbmZvIGRlY2wuICBUaGlzIGZsYWcgaXMgc2V0IGZvcgorICAgYm90aCB0aGUgcHJpbWFyeSB0eXBlaW5mbyBvYmplY3QgYW5kIHRoZSBhc3NvY2lhdGVkIE5UQlMgbmFtZS4gICovCisjZGVmaW5lIERFQ0xfVElORk9fUChOT0RFKSBUUkVFX0xBTkdfRkxBR180IChWQVJfREVDTF9DSEVDSyAoTk9ERSkpCisKKy8qIDEgaWZmIFZBUl9ERUNMIG5vZGUgTk9ERSBpcyB2aXJ0dWFsIHRhYmxlIG9yIFZUVC4gICovCisjZGVmaW5lIERFQ0xfVlRBQkxFX09SX1ZUVF9QKE5PREUpIFRSRUVfTEFOR19GTEFHXzUgKFZBUl9ERUNMX0NIRUNLIChOT0RFKSkKKworLyogUmV0dXJucyAxIGlmZiBWQVJfREVDTCBpcyBhIGNvbnN0cnVjdGlvbiB2aXJ0dWFsIHRhYmxlLgorICAgREVDTF9WVEFCTEVfT1JfVlRUX1Agd2lsbCBiZSB0cnVlIGluIHRoaXMgY2FzZSBhbmQgbXVzdCBiZSBjaGVja2VkCisgICBiZWZvcmUgdXNpbmcgdGhpcyBtYWNyby4gICovCisjZGVmaW5lIERFQ0xfQ09OU1RSVUNUSU9OX1ZUQUJMRV9QKE5PREUpIFwKKyAgVFJFRV9MQU5HX0ZMQUdfNiAoVkFSX0RFQ0xfQ0hFQ0sgKE5PREUpKQorCisvKiAxIGlmZiBOT0RFIGlzIGZ1bmN0aW9uLWxvY2FsLCBidXQgZm9yIHR5cGVzLiAgKi8KKyNkZWZpbmUgTE9DQUxfQ0xBU1NfUChOT0RFKQkJCQlcCisgIChkZWNsX2Z1bmN0aW9uX2NvbnRleHQgKFRZUEVfTUFJTl9ERUNMIChOT0RFKSkgIT0gTlVMTF9UUkVFKQorCisvKiBGb3IgYSBOQU1FU1BBQ0VfREVDTDogdGhlIGxpc3Qgb2YgdXNpbmcgbmFtZXNwYWNlIGRpcmVjdGl2ZXMKKyAgIFRoZSBQVVJQT1NFIGlzIHRoZSB1c2VkIG5hbWVzcGFjZSwgdGhlIHZhbHVlIGlzIHRoZSBuYW1lc3BhY2UKKyAgIHRoYXQgaXMgdGhlIGNvbW1vbiBhbmNlc3Rvci4gICovCisjZGVmaW5lIERFQ0xfTkFNRVNQQUNFX1VTSU5HKE5PREUpIERFQ0xfVklOREVYIChOQU1FU1BBQ0VfREVDTF9DSEVDSyAoTk9ERSkpCisKKy8qIEluIGEgTkFNRVNQQUNFX0RFQ0wsIHRoZSBERUNMX0lOSVRJQUwgaXMgdXNlZCB0byByZWNvcmQgYWxsIHVzZXJzCisgICBvZiBhIG5hbWVzcGFjZSwgdG8gcmVjb3JkIHRoZSB0cmFuc2l0aXZlIGNsb3N1cmUgb2YgdXNpbmcgbmFtZXNwYWNlLiAgKi8KKyNkZWZpbmUgREVDTF9OQU1FU1BBQ0VfVVNFUlMoTk9ERSkgREVDTF9JTklUSUFMIChOQU1FU1BBQ0VfREVDTF9DSEVDSyAoTk9ERSkpCisKKy8qIEluIGEgTkFNRVNQQUNFX0RFQ0wsIHRoZSBsaXN0IG9mIG5hbWVzcGFjZXMgd2hpY2ggaGF2ZSBhc3NvY2lhdGVkCisgICB0aGVtc2VsdmVzIHdpdGggdGhpcyBvbmUuICAqLworI2RlZmluZSBERUNMX05BTUVTUEFDRV9BU1NPQ0lBVElPTlMoTk9ERSkgXAorICAoTkFNRVNQQUNFX0RFQ0xfQ0hFQ0sgKE5PREUpLT5kZWNsX25vbl9jb21tb24uc2F2ZWRfdHJlZSkKKworLyogSW4gYSBOQU1FU1BBQ0VfREVDTCwgcG9pbnRzIHRvIHRoZSBvcmlnaW5hbCBuYW1lc3BhY2UgaWYgdGhpcyBpcworICAgYSBuYW1lc3BhY2UgYWxpYXMuICAqLworI2RlZmluZSBERUNMX05BTUVTUEFDRV9BTElBUyhOT0RFKSBcCisJREVDTF9BQlNUUkFDVF9PUklHSU4gKE5BTUVTUEFDRV9ERUNMX0NIRUNLIChOT0RFKSkKKyNkZWZpbmUgT1JJR0lOQUxfTkFNRVNQQUNFKE5PREUpICBcCisgIChERUNMX05BTUVTUEFDRV9BTElBUyAoTk9ERSkgPyBERUNMX05BTUVTUEFDRV9BTElBUyAoTk9ERSkgOiAoTk9ERSkpCisKKy8qIE5vbnplcm8gaWYgTk9ERSBpcyB0aGUgc3RkIG5hbWVzcGFjZS4gICovCisjZGVmaW5lIERFQ0xfTkFNRVNQQUNFX1NURF9QKE5PREUpCQkJXAorICAoVFJFRV9DT0RFIChOT0RFKSA9PSBOQU1FU1BBQ0VfREVDTAkJCVwKKyAgICYmIENQX0RFQ0xfQ09OVEVYVCAoTk9ERSkgPT0gZ2xvYmFsX25hbWVzcGFjZQlcCisgICAmJiBERUNMX05BTUUgKE5PREUpID09IHN0ZF9pZGVudGlmaWVyKQorCisvKiBJbiBhIFRSRUVfTElTVCBjb25jYXRlbmF0aW5nIHVzaW5nIGRpcmVjdGl2ZXMsIGluZGljYXRlIGluZGlyZWN0CisgICBkaXJlY3RpdmVzICAqLworI2RlZmluZSBUUkVFX0lORElSRUNUX1VTSU5HKE5PREUpIChUUkVFX0xJU1RfQ0hFQ0sgKE5PREUpLT5iYXNlLmxhbmdfZmxhZ18wKQorCisvKiBJbiBhIFRSRUVfTElTVCBpbiBhbiBhdHRyaWJ1dGUgbGlzdCwgaW5kaWNhdGVzIHRoYXQgdGhlIGF0dHJpYnV0ZQorICAgbXVzdCBiZSBhcHBsaWVkIGF0IGluc3RhbnRpYXRpb24gdGltZS4gICovCisjZGVmaW5lIEFUVFJfSVNfREVQRU5ERU5UKE5PREUpIChUUkVFX0xJU1RfQ0hFQ0sgKE5PREUpLT5iYXNlLmxhbmdfZmxhZ18wKQorCitleHRlcm4gdHJlZSBkZWNsX3NoYWRvd2VkX2Zvcl92YXJfbG9va3VwICh0cmVlKTsKK2V4dGVybiB2b2lkIGRlY2xfc2hhZG93ZWRfZm9yX3Zhcl9pbnNlcnQgKHRyZWUsIHRyZWUpOworCisvKiBOb24gemVybyBpZiB0aGlzIGlzIGEgdXNpbmcgZGVjbCBmb3IgYSBkZXBlbmRlbnQgc2NvcGUuICovCisjZGVmaW5lIERFQ0xfREVQRU5ERU5UX1AoTk9ERSkgREVDTF9MQU5HX0ZMQUdfMCAoVVNJTkdfREVDTF9DSEVDSyAoTk9ERSkpCisKKy8qIFRoZSBzY29wZSBuYW1lZCBpbiBhIHVzaW5nIGRlY2wuICAqLworI2RlZmluZSBVU0lOR19ERUNMX1NDT1BFKE5PREUpIFRSRUVfVFlQRSAoVVNJTkdfREVDTF9DSEVDSyAoTk9ERSkpCisKKy8qIFRoZSBkZWNscyBuYW1lZCBieSBhIHVzaW5nIGRlY2wuICAqLworI2RlZmluZSBVU0lOR19ERUNMX0RFQ0xTKE5PREUpIERFQ0xfSU5JVElBTCAoVVNJTkdfREVDTF9DSEVDSyAoTk9ERSkpCisKKy8qIEluIGEgVkFSX0RFQ0wsIHRydWUgaWYgd2UgaGF2ZSBhIHNoYWRvd2VkIGxvY2FsIHZhcmlhYmxlCisgICBpbiB0aGUgc2hhZG93ZWQgdmFyIHRhYmxlIGZvciB0aGlzIFZBUl9ERUNMLiAgKi8KKyNkZWZpbmUgREVDTF9IQVNfU0hBRE9XRURfRk9SX1ZBUl9QKE5PREUpIFwKKyAgKFZBUl9ERUNMX0NIRUNLIChOT0RFKS0+ZGVjbF93aXRoX3Zpcy5zaGFkb3dlZF9mb3JfdmFyX3ApCisKKy8qIEluIGEgVkFSX0RFQ0wgZm9yIGEgdmFyaWFibGUgZGVjbGFyZWQgaW4gYSBmb3Igc3RhdGVtZW50LAorICAgdGhpcyBpcyB0aGUgc2hhZG93ZWQgKGxvY2FsKSB2YXJpYWJsZS4gICovCisjZGVmaW5lIERFQ0xfU0hBRE9XRURfRk9SX1ZBUihOT0RFKSBcCisgIChERUNMX0hBU19TSEFET1dFRF9GT1JfVkFSX1AoTk9ERSkgPyBkZWNsX3NoYWRvd2VkX2Zvcl92YXJfbG9va3VwIChOT0RFKSA6IE5VTEwpCisKKyNkZWZpbmUgU0VUX0RFQ0xfU0hBRE9XRURfRk9SX1ZBUihOT0RFLCBWQUwpIFwKKyAgKGRlY2xfc2hhZG93ZWRfZm9yX3Zhcl9pbnNlcnQgKE5PREUsIFZBTCkpCisKKy8qIEluIGEgRlVOQ1RJT05fREVDTCwgdGhpcyBpcyBub256ZXJvIGlmIHRoaXMgZnVuY3Rpb24gd2FzIGRlZmluZWQgaW4KKyAgIHRoZSBjbGFzcyBkZWZpbml0aW9uLiAgV2UgaGF2ZSBzYXZlZCBhd2F5IHRoZSB0ZXh0IG9mIHRoZSBmdW5jdGlvbiwKKyAgIGJ1dCBoYXZlIG5vdCB5ZXQgcHJvY2Vzc2VkIGl0LiAgKi8KKyNkZWZpbmUgREVDTF9QRU5ESU5HX0lOTElORV9QKE5PREUpIFwKKyAgKExBTkdfREVDTF9GTl9DSEVDSyAoTk9ERSktPnBlbmRpbmdfaW5saW5lX3ApCisKKy8qIElmIERFQ0xfUEVORElOR19JTkxJTkVfUCBob2xkcywgdGhpcyBpcyB0aGUgc2F2ZWQgdGV4dCBvZiB0aGUKKyAgIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgREVDTF9QRU5ESU5HX0lOTElORV9JTkZPKE5PREUpIFwKKyAgKExBTkdfREVDTF9GTl9DSEVDSyAoTk9ERSktPnUucGVuZGluZ19pbmxpbmVfaW5mbykKKworLyogRm9yIGEgY2xhc3MgdHlwZTogaWYgdGhpcyBzdHJ1Y3R1cmUgaGFzIG1hbnkgZmllbGRzLCB3ZSdsbCBzb3J0IHRoZW0KKyAgIGFuZCBwdXQgdGhlbSBpbnRvIGEgVFJFRV9WRUMuICAqLworI2RlZmluZSBDTEFTU1RZUEVfU09SVEVEX0ZJRUxEUyhOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5zb3J0ZWRfZmllbGRzKQorCisvKiBJZiBub24tTlVMTCBmb3IgYSBWQVJfREVDTCwgRlVOQ1RJT05fREVDTCwgVFlQRV9ERUNMIG9yCisgICBURU1QTEFURV9ERUNMLCB0aGUgZW50aXR5IGlzIGVpdGhlciBhIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uIChpZgorICAgREVDTF9VU0VfVEVNUExBVEUgaXMgbm9uemVybykgb3IgdGhlIGFic3RyYWN0IGluc3RhbmNlIG9mIHRoZQorICAgdGVtcGxhdGUgaXRzZWxmLgorCisgICBJbiBlaXRoZXIgY2FzZSwgREVDTF9URU1QTEFURV9JTkZPIGlzIGEgVFJFRV9MSVNULCB3aG9zZQorICAgVFJFRV9QVVJQT1NFIGlzIHRoZSBURU1QTEFURV9ERUNMIG9mIHdoaWNoIHRoaXMgZW50aXR5IGlzIGEKKyAgIHNwZWNpYWxpemF0aW9uIG9yIGFic3RyYWN0IGluc3RhbmNlLiAgVGhlIFRSRUVfVkFMVUUgaXMgdGhlCisgICB0ZW1wbGF0ZSBhcmd1bWVudHMgdXNlZCB0byBzcGVjaWFsaXplIHRoZSB0ZW1wbGF0ZS4KKyAgIAorICAgQ29uc2lkZXI6CisKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgUyB7IGZyaWVuZCB2b2lkIGYoVCkge30gfTsKKworICAgSW4gdGhpcyBjYXNlLCBTPGludD46OmYgaXMsIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YgdGhlIGNvbXBpbGVyLAorICAgYW4gaW5zdGFudGlhdGlvbiBvZiBhIHRlbXBsYXRlIC0tIGJ1dCwgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZgorICAgdGhlIGxhbmd1YWdlLCBlYWNoIGluc3RhbnRpYXRpb24gb2YgUyByZXN1bHRzIGluIGEgd2hvbGx5IHVucmVsYXRlZAorICAgZ2xvYmFsIGZ1bmN0aW9uIGYuICBJbiB0aGlzIGNhc2UsIERFQ0xfVEVNUExBVEVfSU5GTyBmb3IgUzxpbnQ+OjpmCisgICB3aWxsIGJlIG5vbi1OVUxMLCBidXQgREVDTF9VU0VfVEVNUExBVEUgd2lsbCBiZSB6ZXJvLiAgKi8KKyNkZWZpbmUgREVDTF9URU1QTEFURV9JTkZPKE5PREUpIFwKKyAgKERFQ0xfTEFOR19TUEVDSUZJQyAoVkFSX1RFTVBMX1RZUEVfT1JfRlVOQ1RJT05fREVDTF9DSEVDSyAoTk9ERSkpIFwKKyAgIC0+dS5taW4udGVtcGxhdGVfaW5mbykKKworLyogRm9yIGEgVkFSX0RFQ0wsIGluZGljYXRlcyB0aGF0IHRoZSB2YXJpYWJsZSBpcyBhY3R1YWxseSBhCisgICBub24tc3RhdGljIGRhdGEgbWVtYmVyIG9mIGFub255bW91cyB1bmlvbiB0aGF0IGhhcyBiZWVuIHByb21vdGVkIHRvCisgICB2YXJpYWJsZSBzdGF0dXMuICAqLworI2RlZmluZSBERUNMX0FOT05fVU5JT05fVkFSX1AoTk9ERSkgXAorICAoREVDTF9MQU5HX0ZMQUdfNCAoVkFSX0RFQ0xfQ0hFQ0sgKE5PREUpKSkKKworLyogVGVtcGxhdGUgaW5mb3JtYXRpb24gZm9yIGEgUkVDT1JEX1RZUEUgb3IgVU5JT05fVFlQRS4gICovCisjZGVmaW5lIENMQVNTVFlQRV9URU1QTEFURV9JTkZPKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoUkVDT1JEX09SX1VOSU9OX0NIRUNLIChOT0RFKSktPnRlbXBsYXRlX2luZm8pCisKKy8qIFRlbXBsYXRlIGluZm9ybWF0aW9uIGZvciBhbiBFTlVNRVJBTF9UWVBFLiAgQWx0aG91Z2ggYW4gZW51bWVyYXRpb24gbWF5CisgICBub3QgYmUgYSBwcmltYXJ5IHRlbXBsYXRlLCBpdCBtYXkgYmUgZGVjbGFyZWQgd2l0aGluIHRoZSBzY29wZSBvZiBhCisgICBwcmltYXJ5IHRlbXBsYXRlIGFuZCB0aGUgZW51bWVyYXRpb24gY29uc3RhbnRzIG1heSBkZXBlbmQgb24KKyAgIG5vbi10eXBlIHRlbXBsYXRlIHBhcmFtZXRlcnMuICAqLworI2RlZmluZSBFTlVNX1RFTVBMQVRFX0lORk8oTk9ERSkgXAorICAoVFlQRV9MQU5HX1NMT1RfMSAoRU5VTUVSQUxfVFlQRV9DSEVDSyAoTk9ERSkpKQorCisvKiBUZW1wbGF0ZSBpbmZvcm1hdGlvbiBmb3IgYSB0ZW1wbGF0ZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIuICAqLworI2RlZmluZSBURU1QTEFURV9URU1QTEFURV9QQVJNX1RFTVBMQVRFX0lORk8oTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChCT1VORF9URU1QTEFURV9URU1QTEFURV9QQVJNX1RZUEVfQ0hFQ0sgKE5PREUpKSBcCisgICAtPnRlbXBsYXRlX2luZm8pCisKKy8qIFRlbXBsYXRlIGluZm9ybWF0aW9uIGZvciBhbiBFTlVNRVJBTF8sIFJFQ09SRF8sIG9yIFVOSU9OX1RZUEUuICAqLworI2RlZmluZSBUWVBFX1RFTVBMQVRFX0lORk8oTk9ERSkJCQlcCisgIChUUkVFX0NPREUgKE5PREUpID09IEVOVU1FUkFMX1RZUEUJCQlcCisgICA/IEVOVU1fVEVNUExBVEVfSU5GTyAoTk9ERSkgOgkJCVwKKyAgIChUUkVFX0NPREUgKE5PREUpID09IEJPVU5EX1RFTVBMQVRFX1RFTVBMQVRFX1BBUk0JXAorICAgID8gVEVNUExBVEVfVEVNUExBVEVfUEFSTV9URU1QTEFURV9JTkZPIChOT0RFKSA6CVwKKyAgICAoVFlQRV9MQU5HX1NQRUNJRklDIChOT0RFKQkJCQlcCisgICAgID8gQ0xBU1NUWVBFX1RFTVBMQVRFX0lORk8gKE5PREUpCQkJXAorICAgICA6IE5VTExfVFJFRSkpKQorCisvKiBTZXQgdGhlIHRlbXBsYXRlIGluZm9ybWF0aW9uIGZvciBhbiBFTlVNRVJBTF8sIFJFQ09SRF8sIG9yCisgICBVTklPTl9UWVBFIHRvIFZBTC4gICovCisjZGVmaW5lIFNFVF9UWVBFX1RFTVBMQVRFX0lORk8oTk9ERSwgVkFMKQlcCisgIChUUkVFX0NPREUgKE5PREUpID09IEVOVU1FUkFMX1RZUEUJCVwKKyAgID8gKEVOVU1fVEVNUExBVEVfSU5GTyAoTk9ERSkgPSAoVkFMKSkJXAorICAgOiAoQ0xBU1NUWVBFX1RFTVBMQVRFX0lORk8gKE5PREUpID0gKFZBTCkpKQorCisjZGVmaW5lIFRJX1RFTVBMQVRFKE5PREUpIFRSRUVfVFlQRSAoVEVNUExBVEVfSU5GT19DSEVDSyAoTk9ERSkpCisjZGVmaW5lIFRJX0FSR1MoTk9ERSkgVFJFRV9DSEFJTiAoVEVNUExBVEVfSU5GT19DSEVDSyAoTk9ERSkpCisjZGVmaW5lIFRJX1BFTkRJTkdfVEVNUExBVEVfRkxBRyhOT0RFKSBUUkVFX0xBTkdfRkxBR18xIChOT0RFKQorLyogRm9yIGEgZ2l2ZW4gVFJFRV9WRUMgY29udGFpbmluZyBhIHRlbXBsYXRlIGFyZ3VtZW50IGxpc3QsCisgICB0aGlzIHByb3BlcnR5IGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRoYXQgYXJlIG5vdAorICAgZGVmYXVsdGVkLiAgKi8KKyNkZWZpbmUgTk9OX0RFRkFVTFRfVEVNUExBVEVfQVJHU19DT1VOVChOT0RFKSBUUkVFX0NIQUlOIChUUkVFX1ZFQ19DSEVDSyAoTk9ERSkpCisvKiBCZWxvdyBhcmUgdGhlIHNldHRlciBhbmQgZ2V0dGVyIG9mIHRoZSBOT05fREVGQVVMVF9URU1QTEFURV9BUkdTX0NPVU5UCisgICBwcm9wZXJ0eS4gICovCisjZGVmaW5lIFNFVF9OT05fREVGQVVMVF9URU1QTEFURV9BUkdTX0NPVU5UKE5PREUsIElOVF9WQUxVRSkgXAorICBOT05fREVGQVVMVF9URU1QTEFURV9BUkdTX0NPVU5UKE5PREUpID0gYnVpbGRfaW50X2NzdCAoTlVMTF9UUkVFLCBJTlRfVkFMVUUpCisjaWZkZWYgRU5BQkxFX0NIRUNLSU5HCisjZGVmaW5lIEdFVF9OT05fREVGQVVMVF9URU1QTEFURV9BUkdTX0NPVU5UKE5PREUpIFwKKyAgICBpbnRfY3N0X3ZhbHVlIChOT05fREVGQVVMVF9URU1QTEFURV9BUkdTX0NPVU5UIChOT0RFKSkKKyNlbHNlCisjZGVmaW5lIEdFVF9OT05fREVGQVVMVF9URU1QTEFURV9BUkdTX0NPVU5UKE5PREUpIFwKKyAgTk9OX0RFRkFVTFRfVEVNUExBVEVfQVJHU19DT1VOVCAoTk9ERSkgXAorICA/IGludF9jc3RfdmFsdWUgKE5PTl9ERUZBVUxUX1RFTVBMQVRFX0FSR1NfQ09VTlQgKE5PREUpKSBcCisgIDogVFJFRV9WRUNfTEVOR1RIIChJTk5FUk1PU1RfVEVNUExBVEVfQVJHUyAoTk9ERSkpCisjZW5kaWYKKy8qIFRoZSBsaXN0IG9mIHR5cGVkZWZzIC0gdXNlZCBpbiB0aGUgdGVtcGxhdGUgLSB0aGF0IG5lZWQKKyAgIGFjY2VzcyBjaGVja2luZyBhdCB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uIHRpbWUuICAqLworI2RlZmluZSBUSV9UWVBFREVGU19ORUVESU5HX0FDQ0VTU19DSEVDS0lORyhOT0RFKSBcCisgICgoc3RydWN0IHRyZWVfdGVtcGxhdGVfaW5mbyopVEVNUExBVEVfSU5GT19DSEVDSyBcCisgICAgIChOT0RFKSktPnR5cGVkZWZzX25lZWRpbmdfYWNjZXNzX2NoZWNraW5nCisKKy8qIFdlIHVzZSBUUkVFX1ZFQ3MgdG8gaG9sZCB0ZW1wbGF0ZSBhcmd1bWVudHMuICBJZiB0aGVyZSBpcyBvbmx5IG9uZQorICAgbGV2ZWwgb2YgdGVtcGxhdGUgYXJndW1lbnRzLCB0aGVuIHRoZSBUUkVFX1ZFQyBjb250YWlucyB0aGUKKyAgIGFyZ3VtZW50cyBkaXJlY3RseS4gIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgbGV2ZWwgb2YgdGVtcGxhdGUKKyAgIGFyZ3VtZW50cywgdGhlbiBlYWNoIGVudHJ5IGluIHRoZSBUUkVFX1ZFQyBpcyBpdHNlbGYgYSBUUkVFX1ZFQywKKyAgIGNvbnRhaW5pbmcgdGhlIHRlbXBsYXRlIGFyZ3VtZW50cyBmb3IgYSBzaW5nbGUgbGV2ZWwuICBUaGUgZmlyc3QKKyAgIGVudHJ5IGluIHRoZSBvdXRlciBUUkVFX1ZFQyBpcyB0aGUgb3V0ZXJtb3N0IGxldmVsIG9mIHRlbXBsYXRlCisgICBwYXJhbWV0ZXJzOyB0aGUgbGFzdCBpcyB0aGUgaW5uZXJtb3N0LgorCisgICBJdCBpcyBpbmNvcnJlY3QgdG8gZXZlciBmb3JtIGEgdGVtcGxhdGUgYXJndW1lbnQgdmVjdG9yIGNvbnRhaW5pbmcKKyAgIG9ubHkgb25lIGxldmVsIG9mIGFyZ3VtZW50cywgYnV0IHdoaWNoIGlzIGEgVFJFRV9WRUMgY29udGFpbmluZyBhcworICAgaXRzIG9ubHkgZW50cnkgdGhlIFRSRUVfVkVDIGZvciB0aGF0IGxldmVsLgorCisgICBGb3IgZWFjaCBUUkVFX1ZFQyBjb250YWluaW5nIHRoZSB0ZW1wbGF0ZSBhcmd1bWVudHMgZm9yIGEgc2luZ2xlCisgICBsZXZlbCwgaXQncyBwb3NzaWJsZSB0byBnZXQgb3Igc2V0IHRoZSBudW1iZXIgb2Ygbm9uIGRlZmF1bHRlZAorICAgdGVtcGxhdGUgYXJndW1lbnRzIGJ5IHVzaW5nIHRoZSBhY2Nlc3NvciBtYWNyb3MKKyAgIEdFVF9OT05fREVGQVVMVF9URU1QTEFURV9BUkdTX0NPVU5UIG9yCisgICBTRVRfTk9OX0RFRkFVTFRfVEVNUExBVEVfQVJHU19DT1VOVC4gICovCisKKy8qIE5vbnplcm8gaWYgdGhlIHRlbXBsYXRlIGFyZ3VtZW50cyBpcyBhY3R1YWxseSBhIHZlY3RvciBvZiB2ZWN0b3JzLAorICAgcmF0aGVyIHRoYW4ganVzdCBhIHZlY3Rvci4gICovCisjZGVmaW5lIFRNUExfQVJHU19IQVZFX01VTFRJUExFX0xFVkVMUyhOT0RFKQkJICAgICBcCisgIChOT0RFICYmIFRSRUVfVkVDX0xFTkdUSCAoTk9ERSkgJiYgVFJFRV9WRUNfRUxUIChOT0RFLCAwKSAgXAorICAgJiYgVFJFRV9DT0RFIChUUkVFX1ZFQ19FTFQgKE5PREUsIDApKSA9PSBUUkVFX1ZFQykKKworLyogVGhlIGRlcHRoIG9mIGEgdGVtcGxhdGUgYXJndW1lbnQgdmVjdG9yLiAgV2hlbiBjYWxsZWQgZGlyZWN0bHkgYnkKKyAgIHRoZSBwYXJzZXIsIHdlIHVzZSBhIFRSRUVfTElTVCByYXRoZXIgdGhhbiBhIFRSRUVfVkVDIHRvIHJlcHJlc2VudAorICAgdGVtcGxhdGUgYXJndW1lbnRzLiAgSW4gZmFjdCwgd2UgbWF5IGV2ZW4gc2VlIE5VTExfVFJFRSBpZiB0aGVyZQorICAgYXJlIG5vIHRlbXBsYXRlIGFyZ3VtZW50cy4gIEluIGJvdGggb2YgdGhvc2UgY2FzZXMsIHRoZXJlIGlzIG9ubHkKKyAgIG9uZSBsZXZlbCBvZiB0ZW1wbGF0ZSBhcmd1bWVudHMuICAqLworI2RlZmluZSBUTVBMX0FSR1NfREVQVEgoTk9ERSkJCQkJCVwKKyAgKFRNUExfQVJHU19IQVZFX01VTFRJUExFX0xFVkVMUyAoTk9ERSkgPyBUUkVFX1ZFQ19MRU5HVEggKE5PREUpIDogMSkKKworLyogVGhlIExFVkVMdGggbGV2ZWwgb2YgdGhlIHRlbXBsYXRlIEFSR1MuICBUaGUgb3V0ZXJtb3N0IGxldmVsIG9mCisgICBhcmdzIGlzIGxldmVsIDEsIG5vdCBsZXZlbCAwLiAgKi8KKyNkZWZpbmUgVE1QTF9BUkdTX0xFVkVMKEFSR1MsIExFVkVMKQkJXAorICAoVE1QTF9BUkdTX0hBVkVfTVVMVElQTEVfTEVWRUxTIChBUkdTKQlcCisgICA/IFRSRUVfVkVDX0VMVCAoQVJHUywgKExFVkVMKSAtIDEpIDogKEFSR1MpKQorCisvKiBTZXQgdGhlIExFVkVMdGggbGV2ZWwgb2YgdGhlIHRlbXBsYXRlIEFSR1MgdG8gVkFMLiAgVGhpcyBtYWNybyBkb2VzCisgICBub3Qgd29yayB3aXRoIHNpbmdsZS1sZXZlbCBhcmd1bWVudCB2ZWN0b3JzLiAgKi8KKyNkZWZpbmUgU0VUX1RNUExfQVJHU19MRVZFTChBUkdTLCBMRVZFTCwgVkFMKQlcCisgIChUUkVFX1ZFQ19FTFQgKEFSR1MsIChMRVZFTCkgLSAxKSA9IChWQUwpKQorCisvKiBBY2Nlc3NlcyB0aGUgSURYdGggcGFyYW1ldGVyIGluIHRoZSBMRVZFTHRoIGxldmVsIG9mIHRoZSBBUkdTLiAgKi8KKyNkZWZpbmUgVE1QTF9BUkcoQVJHUywgTEVWRUwsIElEWCkJCQkJXAorICAoVFJFRV9WRUNfRUxUIChUTVBMX0FSR1NfTEVWRUwgKEFSR1MsIExFVkVMKSwgSURYKSkKKworLyogR2l2ZW4gYSBzaW5nbGUgbGV2ZWwgb2YgdGVtcGxhdGUgYXJndW1lbnRzIGluIE5PREUsIHJldHVybiB0aGUKKyAgIG51bWJlciBvZiBhcmd1bWVudHMuICAqLworI2RlZmluZSBOVU1fVE1QTF9BUkdTKE5PREUpCQkJCVwKKyAgKFRSRUVfVkVDX0xFTkdUSCAoTk9ERSkpCisKKy8qIFJldHVybnMgdGhlIGlubmVybW9zdCBsZXZlbCBvZiB0ZW1wbGF0ZSBhcmd1bWVudHMgaW4gQVJHUy4gICovCisjZGVmaW5lIElOTkVSTU9TVF9URU1QTEFURV9BUkdTKE5PREUpIFwKKyAgKGdldF9pbm5lcm1vc3RfdGVtcGxhdGVfYXJncyAoKE5PREUpLCAxKSkKKworLyogVGhlIG51bWJlciBvZiBsZXZlbHMgb2YgdGVtcGxhdGUgcGFyYW1ldGVycyBnaXZlbiBieSBOT0RFLiAgKi8KKyNkZWZpbmUgVE1QTF9QQVJNU19ERVBUSChOT0RFKSBcCisgICgoSE9TVF9XSURFX0lOVCkgVFJFRV9JTlRfQ1NUX0xPVyAoVFJFRV9QVVJQT1NFIChOT0RFKSkpCisKKy8qIFRoZSBURU1QTEFURV9ERUNMIGluc3RhbnRpYXRlZCBvciBzcGVjaWFsaXplZCBieSBOT0RFLiAgVGhpcworICAgVEVNUExBVEVfREVDTCB3aWxsIGJlIHRoZSBpbW1lZGlhdGUgcGFyZW50LCBub3QgdGhlIG1vc3QgZ2VuZXJhbAorICAgdGVtcGxhdGUuICBGb3IgZXhhbXBsZSwgaW46CisKKyAgICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgUyB7IHRlbXBsYXRlIDxjbGFzcyBVPiB2b2lkIGYoVSk7IH0KKworICAgdGhlIEZVTkNUSU9OX0RFQ0wgZm9yIFM8aW50Pjo6Zjxkb3VibGU+IHdpbGwgaGF2ZSwgYXMgaXRzCisgICBERUNMX1RJX1RFTVBMQVRFLCBgdGVtcGxhdGUgPGNsYXNzIFU+IFM8aW50Pjo6ZjxVPicuCisKKyAgIEFzIGEgc3BlY2lhbCBjYXNlLCBmb3IgYSBtZW1iZXIgZnJpZW5kIHRlbXBsYXRlIG9mIGEgdGVtcGxhdGUKKyAgIGNsYXNzLCB0aGlzIHZhbHVlIHdpbGwgbm90IGJlIGEgVEVNUExBVEVfREVDTCwgYnV0IHJhdGhlciBhbgorICAgSURFTlRJRklFUl9OT0RFIG9yIE9WRVJMT0FEIGluZGljYXRpbmcgdGhlIG5hbWUgb2YgdGhlIHRlbXBsYXRlIGFuZAorICAgYW55IGV4cGxpY2l0IHRlbXBsYXRlIGFyZ3VtZW50cyBwcm92aWRlZC4gIEZvciBleGFtcGxlLCBpbjoKKworICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IFMgeyBmcmllbmQgdm9pZCBmPGludD4oaW50LCBkb3VibGUpOyB9CisKKyAgIHRoZSBERUNMX1RJX1RFTVBMQVRFIHdpbGwgYmUgYW4gSURFTlRJRklFUl9OT0RFIGZvciBgZicgYW5kIHRoZQorICAgREVDTF9USV9BUkdTIHdpbGwgYmUge2ludH0uICAqLworI2RlZmluZSBERUNMX1RJX1RFTVBMQVRFKE5PREUpICAgICAgVElfVEVNUExBVEUgKERFQ0xfVEVNUExBVEVfSU5GTyAoTk9ERSkpCisKKy8qIFRoZSB0ZW1wbGF0ZSBhcmd1bWVudHMgdXNlZCB0byBvYnRhaW4gdGhpcyBkZWNsIGZyb20gdGhlIG1vc3QKKyAgIGdlbmVyYWwgZm9ybSBvZiBERUNMX1RJX1RFTVBMQVRFLiAgRm9yIHRoZSBleGFtcGxlIGdpdmVuIGZvcgorICAgREVDTF9USV9URU1QTEFURSwgdGhlIERFQ0xfVElfQVJHUyB3aWxsIGJlIHtpbnQsIGRvdWJsZX0uICBUaGVzZQorICAgYXJlIGFsd2F5cyB0aGUgZnVsbCBzZXQgb2YgYXJndW1lbnRzIHJlcXVpcmVkIHRvIGluc3RhbnRpYXRlIHRoaXMKKyAgIGRlY2xhcmF0aW9uIGZyb20gdGhlIG1vc3QgZ2VuZXJhbCB0ZW1wbGF0ZSBzcGVjaWFsaXplZCBoZXJlLiAgKi8KKyNkZWZpbmUgREVDTF9USV9BUkdTKE5PREUpCSAgICBUSV9BUkdTIChERUNMX1RFTVBMQVRFX0lORk8gKE5PREUpKQorCisvKiBUaGUgVEVNUExBVEVfREVDTCBhc3NvY2lhdGVkIHdpdGggTk9ERSwgYSBjbGFzcyB0eXBlLiAgRXZlbiBpZiBOT0RFCisgICB3aWxsIGJlIGdlbmVyYXRlZCBmcm9tIGEgcGFydGlhbCBzcGVjaWFsaXphdGlvbiwgdGhlIFRFTVBMQVRFX0RFQ0wKKyAgIHJlZmVycmVkIHRvIGhlcmUgd2lsbCBiZSB0aGUgb3JpZ2luYWwgdGVtcGxhdGUuICBGb3IgZXhhbXBsZSwKKyAgIGdpdmVuOgorCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IFMge307CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IFM8VCo+IHt9OworICAgICAgCisgICB0aGUgQ0xBU1NUUFlFX1RJX1RFTVBMQVRFIGZvciBTPGludCo+IHdpbGwgYmUgUywgbm90IHRoZSBTPFQqPi4gICovCisjZGVmaW5lIENMQVNTVFlQRV9USV9URU1QTEFURShOT0RFKSBUSV9URU1QTEFURSAoQ0xBU1NUWVBFX1RFTVBMQVRFX0lORk8gKE5PREUpKQorI2RlZmluZSBDTEFTU1RZUEVfVElfQVJHUyhOT0RFKSAgICAgVElfQVJHUyAoQ0xBU1NUWVBFX1RFTVBMQVRFX0lORk8gKE5PREUpKQorCisvKiBGb3IgYSB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uIFRZUEUsIHJldHVybnMgdGhlIFRZUEUgY29ycmVzcG9uZGluZworICAgdG8gdGhlIHByaW1hcnkgdGVtcGxhdGUuICBPdGhlcndpc2UgcmV0dXJucyBUWVBFIGl0c2VsZi4gICovCisjZGVmaW5lIENMQVNTVFlQRV9QUklNQVJZX1RFTVBMQVRFX1RZUEUoVFlQRSkJCQkJXAorICAoKENMQVNTVFlQRV9VU0VfVEVNUExBVEUgKChUWVBFKSkJCQkJCVwKKyAgICAmJiAhQ0xBU1NUWVBFX1RFTVBMQVRFX1NQRUNJQUxJWkFUSU9OICgoVFlQRSkpKQkJCVwKKyAgID8gVFJFRV9UWVBFIChERUNMX1RFTVBMQVRFX1JFU1VMVCAoREVDTF9QUklNQVJZX1RFTVBMQVRFCQlcCisJCQkJICAgICAgKENMQVNTVFlQRV9USV9URU1QTEFURSAoKFRZUEUpKSkpKSBcCisgICA6IChUWVBFKSkKKworLyogTGlrZSBDTEFTU19USV9URU1QTEFURSwgYnV0IGFsc28gd29ya3MgZm9yIEVOVU1FUkFMX1RZUEVzLiAgKi8KKyNkZWZpbmUgVFlQRV9USV9URU1QTEFURShOT0RFKQkJCVwKKyAgKFRJX1RFTVBMQVRFIChUWVBFX1RFTVBMQVRFX0lORk8gKE5PREUpKSkKKworLyogTGlrZSBERUNMX1RJX0FSR1MsIGJ1dCBmb3IgYW4gRU5VTUVSQUxfLCBSRUNPUkRfLCBvciBVTklPTl9UWVBFLiAgKi8KKyNkZWZpbmUgVFlQRV9USV9BUkdTKE5PREUpCQkJXAorICAoVElfQVJHUyAoVFlQRV9URU1QTEFURV9JTkZPIChOT0RFKSkpCisKKyNkZWZpbmUgSU5ORVJNT1NUX1RFTVBMQVRFX1BBUk1TKE5PREUpICBUUkVFX1ZBTFVFIChOT0RFKQorCisvKiBOb256ZXJvIGlmIE5PREUgKGEgVEVNUExBVEVfREVDTCkgaXMgYSBtZW1iZXIgdGVtcGxhdGUsIGluIHRoZQorICAgc2Vuc2Ugb2YgW3RlbXAubWVtXS4gICovCisjZGVmaW5lIERFQ0xfTUVNQkVSX1RFTVBMQVRFX1AoTk9ERSkgXAorICAoREVDTF9MQU5HX0ZMQUdfMSAoVEVNUExBVEVfREVDTF9DSEVDSyAoTk9ERSkpKQorCisvKiBOb256ZXJvIGlmIHRoZSBOT0RFIGNvcnJlc3BvbmRzIHRvIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIGZvciBhCisgICBtZW1iZXIgdGVtcGxhdGUsIHdob3NlIGlubGluZSBkZWZpbml0aW9uIGlzIGJlaW5nIHByb2Nlc3NlZCBhZnRlcgorICAgdGhlIGNsYXNzIGRlZmluaXRpb24gaXMgY29tcGxldGUuICAqLworI2RlZmluZSBURU1QTEFURV9QQVJNU19GT1JfSU5MSU5FKE5PREUpIFRSRUVfTEFOR19GTEFHXzEgKE5PREUpCisKKy8qIERldGVybWluZSBpZiBhIHBhcmFtZXRlciAoaS5lLiwgYSBQQVJNX0RFQ0wpIGlzIGEgZnVuY3Rpb24KKyAgIHBhcmFtZXRlciBwYWNrLiAgKi8KKyNkZWZpbmUgRlVOQ1RJT05fUEFSQU1FVEVSX1BBQ0tfUChOT0RFKSBcCisgIChERUNMX0xBTkdfRkxBR18xIChQQVJNX0RFQ0xfQ0hFQ0sgKE5PREUpKSkKKworLyogRGV0ZXJtaW5lcyBpZiBOT0RFIGlzIGFuIGV4cGFuc2lvbiBvZiBvbmUgb3IgbW9yZSBwYXJhbWV0ZXIgcGFja3MsCisgICBlLmcuLCBhIFRZUEVfUEFDS19FWFBBTlNJT04gb3IgRVhQUl9QQUNLX0VYUEFOU0lPTi4gICovCisjZGVmaW5lIFBBQ0tfRVhQQU5TSU9OX1AoTk9ERSkgICAgICAgICAgICAgICAgIFwKKyAgKFRSRUVfQ09ERSAoTk9ERSkgPT0gVFlQRV9QQUNLX0VYUEFOU0lPTiAgICAgXAorICAgfHwgVFJFRV9DT0RFIChOT0RFKSA9PSBFWFBSX1BBQ0tfRVhQQU5TSU9OKQorCisvKiBFeHRyYWN0cyB0aGUgdHlwZSBvciBleHByZXNzaW9uIHBhdHRlcm4gZnJvbSBhIFRZUEVfUEFDS19FWFBBTlNJT04gb3IKKyAgIEVYUFJfUEFDS19FWFBBTlNJT04uICAqLworI2RlZmluZSBQQUNLX0VYUEFOU0lPTl9QQVRURVJOKE5PREUpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKFRSRUVfQ09ERSAoTk9ERSkgPT0gVFlQRV9QQUNLX0VYUEFOU0lPTj8gVFJFRV9UWVBFIChOT0RFKSAgICBcCisgICA6IFRSRUVfT1BFUkFORCAoTk9ERSwgMCkpCisKKy8qIFNldHMgdGhlIHR5cGUgb3IgZXhwcmVzc2lvbiBwYXR0ZXJuIGZvciBhIFRZUEVfUEFDS19FWFBBTlNJT04gb3IKKyAgIEVYUFJfUEFDS19FWFBBTlNJT04uICAqLworI2RlZmluZSBTRVRfUEFDS19FWFBBTlNJT05fUEFUVEVSTihOT0RFLFZBTFVFKSAgXAorICBpZiAoVFJFRV9DT0RFIChOT0RFKSA9PSBUWVBFX1BBQ0tfRVhQQU5TSU9OKSAgXAorICAgIFRSRUVfVFlQRSAoTk9ERSkgPSBWQUxVRTsgICAgICAgICAgICAgICAgICAgXAorICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFRSRUVfT1BFUkFORCAoTk9ERSwgMCkgPSBWQUxVRQorCisvKiBUaGUgbGlzdCBvZiBwYXJhbWV0ZXIgcGFja3MgdXNlZCBpbiB0aGUgUEFDS19FWFBBTlNJT05fKiBub2RlLiBUaGUKKyAgIFRSRUVfVkFMVUUgb2YgZWFjaCBUUkVFX0xJU1QgY29udGFpbnMgdGhlIHBhcmFtZXRlciBwYWNrcy4gICovCisjZGVmaW5lIFBBQ0tfRVhQQU5TSU9OX1BBUkFNRVRFUl9QQUNLUyhOT0RFKSBUUkVFX0NIQUlOIChOT0RFKQorCisvKiBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhbiBhcmd1bWVudCBwYWNrLiAgKi8KKyNkZWZpbmUgQVJHVU1FTlRfUEFDS19QKE5PREUpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChUUkVFX0NPREUgKE5PREUpID09IFRZUEVfQVJHVU1FTlRfUEFDSyAgICAgICAgICAgICAgXAorICAgfHwgVFJFRV9DT0RFIChOT0RFKSA9PSBOT05UWVBFX0FSR1VNRU5UX1BBQ0spCisKKy8qIFRoZSBhcmd1bWVudHMgc3RvcmVkIGluIGFuIGFyZ3VtZW50IHBhY2suIEFyZ3VtZW50cyBhcmUgc3RvcmVkIGluIGEKKyAgIFRSRUVfVkVDLCB3aGljaCBtYXkgaGF2ZSBsZW5ndGggemVyby4gICovCisjZGVmaW5lIEFSR1VNRU5UX1BBQ0tfQVJHUyhOT0RFKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChUUkVFX0NPREUgKE5PREUpID09IFRZUEVfQVJHVU1FTlRfUEFDSz8gVFJFRV9UWVBFIChOT0RFKSAgICBcCisgICA6IFRSRUVfT1BFUkFORCAoTk9ERSwgMCkpCisKKy8qIFNldCB0aGUgYXJndW1lbnRzIHN0b3JlZCBpbiBhbiBhcmd1bWVudCBwYWNrLiBWQUxVRSBtdXN0IGJlIGEKKyAgIFRSRUVfVkVDLiAgKi8KKyNkZWZpbmUgU0VUX0FSR1VNRU5UX1BBQ0tfQVJHUyhOT0RFLFZBTFVFKSAgICAgXAorICBpZiAoVFJFRV9DT0RFIChOT0RFKSA9PSBUWVBFX0FSR1VNRU5UX1BBQ0spICBcCisgICAgVFJFRV9UWVBFIChOT0RFKSA9IFZBTFVFOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFRSRUVfT1BFUkFORCAoTk9ERSwgMCkgPSBWQUxVRQorCisvKiBXaGV0aGVyIHRoZSBhcmd1bWVudCBwYWNrIGlzICJpbmNvbXBsZXRlIiwgbWVhbmluZyB0aGF0IG1vcmUKKyAgIGFyZ3VtZW50cyBjYW4gc3RpbGwgYmUgZGVkdWNlZC4gSW5jb21wbGV0ZSBhcmd1bWVudCBwYWNrcyBhcmUgb25seQorICAgdXNlZCB3aGVuIHRoZSB1c2VyIGhhcyBwcm92aWRlZCBhbiBleHBsaWNpdCB0ZW1wbGF0ZSBhcmd1bWVudCBsaXN0CisgICBmb3IgYSB2YXJpYWRpYyBmdW5jdGlvbiB0ZW1wbGF0ZS4gU29tZSBvZiB0aGUgZXhwbGljaXQgdGVtcGxhdGUKKyAgIGFyZ3VtZW50cyB3aWxsIGJlIHBsYWNlZCBpbnRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyZ3VtZW50IHBhY2ssCisgICBidXQgYWRkaXRpb25hbCBhcmd1bWVudHMgbWlnaHQgc3RpbGwgYmUgZGVkdWNlZC4gICovCisjZGVmaW5lIEFSR1VNRU5UX1BBQ0tfSU5DT01QTEVURV9QKE5PREUpICAgICAgICBcCisgIFRSRUVfTEFOR19GTEFHXzAgKEFSR1VNRU5UX1BBQ0tfQVJHUyAoTk9ERSkpCisKKy8qIFdoZW4gQVJHVU1FTlRfUEFDS19JTkNPTVBMRVRFX1AsIHN0b3JlcyB0aGUgZXhwbGljaXQgdGVtcGxhdGUKKyAgIGFyZ3VtZW50cyB1c2VkIHRvIGZpbGwgdGhpcyBwYWNrLiAgKi8KKyNkZWZpbmUgQVJHVU1FTlRfUEFDS19FWFBMSUNJVF9BUkdTKE5PREUpICAgICAgIFwKKyAgVFJFRV9UWVBFIChBUkdVTUVOVF9QQUNLX0FSR1MgKE5PREUpKQorCisvKiBJbiBhbiBBUkdVTUVOVF9QQUNLX1NFTEVDVCwgdGhlIGFyZ3VtZW50IHBhY2sgZnJvbSB3aGljaCBhbgorICAgYXJndW1lbnQgd2lsbCBiZSBzZWxlY3RlZC4gICovCisjZGVmaW5lIEFSR1VNRU5UX1BBQ0tfU0VMRUNUX0ZST01fUEFDSyhOT0RFKQkJCQlcCisgICgoKHN0cnVjdCB0cmVlX2FyZ3VtZW50X3BhY2tfc2VsZWN0ICopQVJHVU1FTlRfUEFDS19TRUxFQ1RfQ0hFQ0sgKE5PREUpKS0+YXJndW1lbnRfcGFjaykKKworLyogSW4gYW4gQVJHVU1FTlRfUEFDS19TRUxFQ1QsIHRoZSBpbmRleCBvZiB0aGUgYXJndW1lbnQgd2Ugd2FudCB0bworICAgc2VsZWN0LiAgKi8KKyNkZWZpbmUgQVJHVU1FTlRfUEFDS19TRUxFQ1RfSU5ERVgoTk9ERSkJCQkJXAorICAoKChzdHJ1Y3QgdHJlZV9hcmd1bWVudF9wYWNrX3NlbGVjdCAqKUFSR1VNRU5UX1BBQ0tfU0VMRUNUX0NIRUNLIChOT0RFKSktPmluZGV4KQorICAKKy8qIEluIGFuIEFSR1VNRU5UX1BBQ0tfU0VMRUNULCB0aGUgYWN0dWFsIHVuZGVybHlpbmcgYXJndW1lbnQgdGhhdCB0aGUKKyAgIEFSR1VNRU5UX1BBQ0tfU0VMRUNUIHJlcHJlc2VudHMuICovCisjZGVmaW5lIEFSR1VNRU5UX1BBQ0tfU0VMRUNUX0FSRyhOT0RFKQkJCQkJXAorICBUUkVFX1ZFQ19FTFQgKEFSR1VNRU5UX1BBQ0tfQVJHUyAoQVJHVU1FTlRfUEFDS19TRUxFQ1RfRlJPTV9QQUNLIChOT0RFKSksIFwKKwkgICAgICAgIEFSR1VNRU5UX1BBQ0tfU0VMRUNUX0lOREVYIChOT0RFKSk7CisKKy8qIEluIGEgRlVOQ1RJT05fREVDTCwgdGhlIHNhdmVkIGxhbmd1YWdlLXNwZWNpZmljIHBlci1mdW5jdGlvbiBkYXRhLiAgKi8KKyNkZWZpbmUgREVDTF9TQVZFRF9GVU5DVElPTl9EQVRBKE5PREUpCQkJXAorICAoTEFOR19ERUNMX0ZOX0NIRUNLIChGVU5DVElPTl9ERUNMX0NIRUNLIChOT0RFKSkJXAorICAgLT51LnNhdmVkX2xhbmd1YWdlX2Z1bmN0aW9uKQorCisvKiBJbmRpY2F0ZXMgYW4gaW5kaXJlY3RfZXhwciBpcyBmb3IgY29udmVydGluZyBhIHJlZmVyZW5jZS4gICovCisjZGVmaW5lIFJFRkVSRU5DRV9SRUZfUChOT0RFKSBcCisgIFRSRUVfTEFOR19GTEFHXzAgKElORElSRUNUX1JFRl9DSEVDSyAoTk9ERSkpCisKKyNkZWZpbmUgTkVXX0VYUFJfVVNFX0dMT0JBTChOT0RFKSBcCisgIFRSRUVfTEFOR19GTEFHXzAgKE5FV19FWFBSX0NIRUNLIChOT0RFKSkKKyNkZWZpbmUgREVMRVRFX0VYUFJfVVNFX0dMT0JBTChOT0RFKSBcCisgIFRSRUVfTEFOR19GTEFHXzAgKERFTEVURV9FWFBSX0NIRUNLIChOT0RFKSkKKyNkZWZpbmUgREVMRVRFX0VYUFJfVVNFX1ZFQyhOT0RFKSBcCisgIFRSRUVfTEFOR19GTEFHXzEgKERFTEVURV9FWFBSX0NIRUNLIChOT0RFKSkKKworLyogSW5kaWNhdGVzIHRoYXQgdGhpcyBpcyBhIG5vbi1kZXBlbmRlbnQgQ09NUE9VTkRfRVhQUiB3aGljaCB3aWxsCisgICByZXNvbHZlIHRvIGEgZnVuY3Rpb24gY2FsbC4gICovCisjZGVmaW5lIENPTVBPVU5EX0VYUFJfT1ZFUkxPQURFRChOT0RFKSBcCisgIFRSRUVfTEFOR19GTEFHXzAgKENPTVBPVU5EX0VYUFJfQ0hFQ0sgKE5PREUpKQorCisvKiBJbiBhIENBTExfRVhQUiBhcHBlYXJpbmcgaW4gYSB0ZW1wbGF0ZSwgdHJ1ZSBpZiBLb2VuaWcgbG9va3VwCisgICBzaG91bGQgYmUgcGVyZm9ybWVkIGF0IGluc3RhbnRpYXRpb24gdGltZS4gICovCisjZGVmaW5lIEtPRU5JR19MT09LVVBfUChOT0RFKSBUUkVFX0xBTkdfRkxBR18wIChDQUxMX0VYUFJfQ0hFQ0sgKE5PREUpKQorCisvKiBJbmRpY2F0ZXMgd2hldGhlciBhIHN0cmluZyBsaXRlcmFsIGhhcyBiZWVuIHBhcmVudGhlc2l6ZWQuIFN1Y2gKKyAgIHVzYWdlcyBhcmUgZGlzYWxsb3dlZCBpbiBjZXJ0YWluIGNpcmN1bXN0YW5jZXMuICAqLworCisjZGVmaW5lIFBBUkVOX1NUUklOR19MSVRFUkFMX1AoTk9ERSkgXAorICBUUkVFX0xBTkdfRkxBR18wIChTVFJJTkdfQ1NUX0NIRUNLIChOT0RFKSkKKworLyogTm9uemVybyBpZiB0aGlzIEFHR1JfSU5JVF9FWFBSIHByb3ZpZGVzIGZvciBpbml0aWFsaXphdGlvbiB2aWEgYQorICAgY29uc3RydWN0b3IgY2FsbCwgcmF0aGVyIHRoYW4gYW4gb3JkaW5hcnkgZnVuY3Rpb24gY2FsbC4gICovCisjZGVmaW5lIEFHR1JfSU5JVF9WSUFfQ1RPUl9QKE5PREUpIFwKKyAgVFJFRV9MQU5HX0ZMQUdfMCAoQUdHUl9JTklUX0VYUFJfQ0hFQ0sgKE5PREUpKQorCisvKiBOb256ZXJvIGlmIGV4cGFuZGluZyB0aGlzIEFHR1JfSU5JVF9FWFBSIHNob3VsZCBmaXJzdCB6ZXJvLWluaXRpYWxpemUKKyAgIHRoZSBvYmplY3QuICAqLworI2RlZmluZSBBR0dSX0lOSVRfWkVST19GSVJTVChOT0RFKSBcCisgIFRSRUVfTEFOR19GTEFHXzIgKEFHR1JfSU5JVF9FWFBSX0NIRUNLIChOT0RFKSkKKworLyogQUdHUl9JTklUX0VYUFIgYWNjZXNzb3JzLiAgVGhlc2UgYXJlIGVxdWl2YWxlbnQgdG8gdGhlIENBTExfRVhQUgorICAgYWNjZXNzb3JzLCBleGNlcHQgZm9yIEFHR1JfSU5JVF9FWFBSX1NMT1QgKHdoaWNoIHRha2VzIHRoZSBwbGFjZSBvZgorICAgQ0FMTF9FWFBSX1NUQVRJQ19DSEFJTikuICAqLworCisjZGVmaW5lIEFHR1JfSU5JVF9FWFBSX0ZOKE5PREUpIFRSRUVfT1BFUkFORCAoQUdHUl9JTklUX0VYUFJfQ0hFQ0sgKE5PREUpLCAxKQorI2RlZmluZSBBR0dSX0lOSVRfRVhQUl9TTE9UKE5PREUpIFwKKyAgVFJFRV9PUEVSQU5EIChBR0dSX0lOSVRfRVhQUl9DSEVDSyAoTk9ERSksIDIpCisjZGVmaW5lIEFHR1JfSU5JVF9FWFBSX0FSRyhOT0RFLCBJKSBcCisgIFRSRUVfT1BFUkFORCAoQUdHUl9JTklUX0VYUFJfQ0hFQ0sgKE5PREUpLCAoSSkgKyAzKQorI2RlZmluZSBhZ2dyX2luaXRfZXhwcl9uYXJncyhOT0RFKSAoVkxfRVhQX09QRVJBTkRfTEVOR1RIKE5PREUpIC0gMykKKworLyogQUdHUl9JTklUX0VYUFJfQVJHUCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgYXJndW1lbnQgdmVjdG9yIGZvciBOT0RFLgorICAgV2UgY2FuJ3QgdXNlICZBR0dSX0lOSVRfRVhQUl9BUkcgKE5PREUsIDApIGJlY2F1c2UgdGhhdCB3aWxsIGNvbXBsYWluIGlmCisgICB0aGUgYXJndW1lbnQgY291bnQgaXMgemVybyB3aGVuIGNoZWNraW5nIGlzIGVuYWJsZWQuICBJbnN0ZWFkLCBkbworICAgdGhlIHBvaW50ZXIgYXJpdGhtZXRpYyB0byBhZHZhbmNlIHBhc3QgdGhlIDMgZml4ZWQgb3BlcmFuZHMgaW4gYQorICAgQUdHUl9JTklUX0VYUFIuICBUaGF0IHByb2R1Y2VzIGEgdmFsaWQgcG9pbnRlciB0byBqdXN0IHBhc3QgdGhlIGVuZCBvZgorICAgdGhlIG9wZXJhbmQgYXJyYXksIGV2ZW4gaWYgaXQncyBub3QgdmFsaWQgdG8gZGVyZWZlcmVuY2UgaXQuICAqLworI2RlZmluZSBBR0dSX0lOSVRfRVhQUl9BUkdQKE5PREUpIFwKKyAgKCYoVFJFRV9PUEVSQU5EIChBR0dSX0lOSVRfRVhQUl9DSEVDSyAoTk9ERSksIDApKSArIDMpCisKKy8qIEFic3RyYWN0IGl0ZXJhdG9ycyBmb3IgQUdHUl9JTklUX0VYUFJzLiAgKi8KKworLyogU3RydWN0dXJlIGNvbnRhaW5pbmcgaXRlcmF0b3Igc3RhdGUuICAqLwordHlwZWRlZiBzdHJ1Y3QgR1RZICgoKSkgYWdncl9pbml0X2V4cHJfYXJnX2l0ZXJhdG9yX2QgeworICB0cmVlIHQ7CS8qIHRoZSBhZ2dyX2luaXRfZXhwciAqLworICBpbnQgbjsJLyogYXJndW1lbnQgY291bnQgKi8KKyAgaW50IGk7CS8qIG5leHQgYXJndW1lbnQgaW5kZXggKi8KK30gYWdncl9pbml0X2V4cHJfYXJnX2l0ZXJhdG9yOworCisvKiBJbml0aWFsaXplIHRoZSBhYnN0cmFjdCBhcmd1bWVudCBsaXN0IGl0ZXJhdG9yIG9iamVjdCBJVEVSIHdpdGggdGhlCisgICBhcmd1bWVudHMgZnJvbSBBR0dSX0lOSVRfRVhQUiBub2RlIEVYUC4gICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2luaXRfYWdncl9pbml0X2V4cHJfYXJnX2l0ZXJhdG9yICh0cmVlIGV4cCwKKwkJCQkgICAgICAgYWdncl9pbml0X2V4cHJfYXJnX2l0ZXJhdG9yICppdGVyKQoreworICBpdGVyLT50ID0gZXhwOworICBpdGVyLT5uID0gYWdncl9pbml0X2V4cHJfbmFyZ3MgKGV4cCk7CisgIGl0ZXItPmkgPSAwOworfQorCisvKiBSZXR1cm4gdGhlIG5leHQgYXJndW1lbnQgZnJvbSBhYnN0cmFjdCBhcmd1bWVudCBsaXN0IGl0ZXJhdG9yIG9iamVjdCBJVEVSLAorICAgYW5kIGFkdmFuY2UgaXRzIHN0YXRlLiAgUmV0dXJuIE5VTExfVFJFRSBpZiB0aGVyZSBhcmUgbm8gbW9yZSBhcmd1bWVudHMuICAqLworc3RhdGljIGlubGluZSB0cmVlCituZXh0X2FnZ3JfaW5pdF9leHByX2FyZyAoYWdncl9pbml0X2V4cHJfYXJnX2l0ZXJhdG9yICppdGVyKQoreworICB0cmVlIHJlc3VsdDsKKyAgaWYgKGl0ZXItPmkgPj0gaXRlci0+bikKKyAgICByZXR1cm4gTlVMTF9UUkVFOworICByZXN1bHQgPSBBR0dSX0lOSVRfRVhQUl9BUkcgKGl0ZXItPnQsIGl0ZXItPmkpOworICBpdGVyLT5pKys7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIGFic3RyYWN0IGFyZ3VtZW50IGxpc3QgaXRlcmF0b3Igb2JqZWN0IElURVIsIHRoZW4gYWR2YW5jZQorICAgcGFzdCBhbmQgcmV0dXJuIHRoZSBmaXJzdCBhcmd1bWVudC4gIFVzZWZ1bCBpbiBmb3IgZXhwcmVzc2lvbnMsIGUuZy4KKyAgICAgZm9yIChhcmcgPSBmaXJzdF9hZ2dyX2luaXRfZXhwcl9hcmcgKGV4cCwgJml0ZXIpOyBhcmc7CisgICAgICAgICAgYXJnID0gbmV4dF9hZ2dyX2luaXRfZXhwcl9hcmcgKCZpdGVyKSkgICAqLworc3RhdGljIGlubGluZSB0cmVlCitmaXJzdF9hZ2dyX2luaXRfZXhwcl9hcmcgKHRyZWUgZXhwLCBhZ2dyX2luaXRfZXhwcl9hcmdfaXRlcmF0b3IgKml0ZXIpCit7CisgIGluaXRfYWdncl9pbml0X2V4cHJfYXJnX2l0ZXJhdG9yIChleHAsIGl0ZXIpOworICByZXR1cm4gbmV4dF9hZ2dyX2luaXRfZXhwcl9hcmcgKGl0ZXIpOworfQorCisvKiBUZXN0IHdoZXRoZXIgdGhlcmUgYXJlIG1vcmUgYXJndW1lbnRzIGluIGFic3RyYWN0IGFyZ3VtZW50IGxpc3QgaXRlcmF0b3IKKyAgIElURVIsIHdpdGhvdXQgY2hhbmdpbmcgaXRzIHN0YXRlLiAgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorbW9yZV9hZ2dyX2luaXRfZXhwcl9hcmdzX3AgKGNvbnN0IGFnZ3JfaW5pdF9leHByX2FyZ19pdGVyYXRvciAqaXRlcikKK3sKKyAgcmV0dXJuIChpdGVyLT5pIDwgaXRlci0+bik7Cit9CisKKy8qIEl0ZXJhdGUgdGhyb3VnaCBlYWNoIGFyZ3VtZW50IEFSRyBvZiBBR0dSX0lOSVRfRVhQUiBDQUxMLCB1c2luZyB2YXJpYWJsZQorICAgSVRFUiAob2YgdHlwZSBhZ2dyX2luaXRfZXhwcl9hcmdfaXRlcmF0b3IpIHRvIGhvbGQgdGhlIGl0ZXJhdGlvbiBzdGF0ZS4gICovCisjZGVmaW5lIEZPUl9FQUNIX0FHR1JfSU5JVF9FWFBSX0FSRyhhcmcsIGl0ZXIsIGNhbGwpCQkJXAorICBmb3IgKChhcmcpID0gZmlyc3RfYWdncl9pbml0X2V4cHJfYXJnICgoY2FsbCksICYoaXRlcikpOyAoYXJnKTsJXAorICAgICAgIChhcmcpID0gbmV4dF9hZ2dyX2luaXRfZXhwcl9hcmcgKCYoaXRlcikpKQorCisvKiBWRUNfSU5JVF9FWFBSIGFjY2Vzc29ycy4gICovCisjZGVmaW5lIFZFQ19JTklUX0VYUFJfU0xPVChOT0RFKSBUUkVFX09QRVJBTkQgKE5PREUsIDApCisjZGVmaW5lIFZFQ19JTklUX0VYUFJfSU5JVChOT0RFKSBUUkVFX09QRVJBTkQgKE5PREUsIDEpCisKKy8qIFRoZSBUWVBFX01BSU5fREVDTCBmb3IgYSBjbGFzcyB0ZW1wbGF0ZSB0eXBlIGlzIGEgVFlQRV9ERUNMLCBub3QgYQorICAgVEVNUExBVEVfREVDTC4gIFRoaXMgbWFjcm8gZGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBhIGdpdmVuIGNsYXNzCisgICB0eXBlIGlzIHJlYWxseSBhIHRlbXBsYXRlIHR5cGUsIGFzIG9wcG9zZWQgdG8gYW4gaW5zdGFudGlhdGlvbiBvcgorICAgc3BlY2lhbGl6YXRpb24gb2Ygb25lLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX0lTX1RFTVBMQVRFKE5PREUpICBcCisgIChDTEFTU1RZUEVfVEVNUExBVEVfSU5GTyAoTk9ERSkgICAgXAorICAgJiYgIUNMQVNTVFlQRV9VU0VfVEVNUExBVEUgKE5PREUpIFwKKyAgICYmIFBSSU1BUllfVEVNUExBVEVfUCAoQ0xBU1NUWVBFX1RJX1RFTVBMQVRFIChOT0RFKSkpCisKKy8qIFRoZSBuYW1lIHVzZWQgYnkgdGhlIHVzZXIgdG8gbmFtZSB0aGUgdHlwZW5hbWUgdHlwZS4gIFR5cGljYWxseSwKKyAgIHRoaXMgaXMgYW4gSURFTlRJRklFUl9OT0RFLCBhbmQgdGhlIHNhbWUgYXMgdGhlIERFQ0xfTkFNRSBvbiB0aGUKKyAgIGNvcnJlc3BvbmRpbmcgVFlQRV9ERUNMLiAgSG93ZXZlciwgdGhpcyBtYXkgYWxzbyBiZSBhCisgICBURU1QTEFURV9JRF9FWFBSIGlmIHdlIGhhZCBzb21ldGhpbmcgbGlrZSBgdHlwZW5hbWUgWDo6WTxUPicuICAqLworI2RlZmluZSBUWVBFTkFNRV9UWVBFX0ZVTExOQU1FKE5PREUpIChUWVBFTkFNRV9UWVBFX0NIRUNLIChOT0RFKSktPnR5cGUudmFsdWVzCisKKy8qIFRydWUgaWYgYSBUWVBFTkFNRV9UWVBFIHdhcyBkZWNsYXJlZCBhcyBhbiAiZW51bSIuICAqLworI2RlZmluZSBUWVBFTkFNRV9JU19FTlVNX1AoTk9ERSkgXAorICAoVFJFRV9MQU5HX0ZMQUdfMCAoVFlQRU5BTUVfVFlQRV9DSEVDSyAoTk9ERSkpKQorCisvKiBUcnVlIGlmIGEgVFlQRU5BTUVfVFlQRSB3YXMgZGVjbGFyZWQgYXMgYSAiY2xhc3MiLCAic3RydWN0Iiwgb3IKKyAgICJ1bmlvbiIuICAqLworI2RlZmluZSBUWVBFTkFNRV9JU19DTEFTU19QKE5PREUpIFwKKyAgKFRSRUVfTEFOR19GTEFHXzEgKFRZUEVOQU1FX1RZUEVfQ0hFQ0sgKE5PREUpKSkKKworLyogVHJ1ZSBpZiBhIFRZUEVOQU1FX1RZUEUgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgcmVzb2x2ZWQuICAqLworI2RlZmluZSBUWVBFTkFNRV9JU19SRVNPTFZJTkdfUChOT0RFKSBcCisgIChUUkVFX0xBTkdfRkxBR18yIChUWVBFTkFNRV9UWVBFX0NIRUNLIChOT0RFKSkpCisKKy8qIE5vbnplcm8gaW4gSU5URUdFUl9DU1QgbWVhbnMgdGhhdCB0aGlzIGludCBpcyBuZWdhdGl2ZSBieSBkaW50IG9mCisgICB1c2luZyBhIHR3b3MtY29tcGxlbWVudCBuZWdhdGVkIG9wZXJhbmQuICAqLworI2RlZmluZSBUUkVFX05FR0FURURfSU5UKE5PREUpIFRSRUVfTEFOR19GTEFHXzAgKElOVEVHRVJfQ1NUX0NIRUNLIChOT0RFKSkKKworLyogW2NsYXNzLnZpcnR1YWxdCisKKyAgIEEgY2xhc3MgdGhhdCBkZWNsYXJlcyBvciBpbmhlcml0cyBhIHZpcnR1YWwgZnVuY3Rpb24gaXMgY2FsbGVkIGEKKyAgIHBvbHltb3JwaGljIGNsYXNzLiAgKi8KKyNkZWZpbmUgVFlQRV9QT0xZTU9SUEhJQ19QKE5PREUpIChUUkVFX0xBTkdfRkxBR18yIChOT0RFKSkKKworLyogTm9uemVybyBpZiB0aGlzIGNsYXNzIGhhcyBhIHZpcnR1YWwgZnVuY3Rpb24gdGFibGUgcG9pbnRlci4gICovCisjZGVmaW5lIFRZUEVfQ09OVEFJTlNfVlBUUl9QKE5PREUpCQlcCisgIChUWVBFX1BPTFlNT1JQSElDX1AgKE5PREUpIHx8IENMQVNTVFlQRV9WQkFTRUNMQVNTRVMgKE5PREUpKQorCisvKiBUaGlzIGZsYWcgaXMgdHJ1ZSBvZiBhIGxvY2FsIFZBUl9ERUNMIGlmIGl0IHdhcyBkZWNsYXJlZCBpbiBhIGZvcgorICAgc3RhdGVtZW50LCBidXQgd2UgYXJlIG5vIGxvbmdlciBpbiB0aGUgc2NvcGUgb2YgdGhlIGZvci4gICovCisjZGVmaW5lIERFQ0xfREVBRF9GT1JfTE9DQUwoTk9ERSkgREVDTF9MQU5HX0ZMQUdfNyAoVkFSX0RFQ0xfQ0hFQ0sgKE5PREUpKQorCisvKiBUaGlzIGZsYWcgaXMgc2V0IG9uIGEgVkFSX0RFQ0wgdGhhdCBpcyBhIERFQ0xfREVBRF9GT1JfTE9DQUwKKyAgIGlmIHdlIGFscmVhZHkgZW1pdHRlZCBhIHdhcm5pbmcgYWJvdXQgdXNpbmcgaXQuICAqLworI2RlZmluZSBERUNMX0VSUk9SX1JFUE9SVEVEKE5PREUpIERFQ0xfTEFOR19GTEFHXzAgKFZBUl9ERUNMX0NIRUNLIChOT0RFKSkKKworLyogTm9uemVybyBpZiBOT0RFIGlzIGEgRlVOQ1RJT05fREVDTCAoZm9yIGEgZnVuY3Rpb24gd2l0aCBnbG9iYWwKKyAgIHNjb3BlKSBkZWNsYXJlZCBpbiBhIGxvY2FsIHNjb3BlLiAgKi8KKyNkZWZpbmUgREVDTF9MT0NBTF9GVU5DVElPTl9QKE5PREUpIFwKKyAgREVDTF9MQU5HX0ZMQUdfMCAoRlVOQ1RJT05fREVDTF9DSEVDSyAoTk9ERSkpCisKKy8qIE5vbnplcm8gaWYgTk9ERSBpcyBhIERFQ0wgd2hpY2ggd2Uga25vdyBhYm91dCBidXQgd2hpY2ggaGFzIG5vdAorICAgYmVlbiBleHBsaWNpdGx5IGRlY2xhcmVkLCBzdWNoIGFzIGEgYnVpbHQtaW4gZnVuY3Rpb24gb3IgYSBmcmllbmQKKyAgIGRlY2xhcmVkIGluc2lkZSBhIGNsYXNzLiAgSW4gdGhlIGxhdHRlciBjYXNlIERFQ0xfSElEREVOX0ZSSUVORF9QCisgICB3aWxsIGJlIHNldC4gICovCisjZGVmaW5lIERFQ0xfQU5USUNJUEFURUQoTk9ERSkgXAorICAoREVDTF9MQU5HX1NQRUNJRklDIChERUNMX0NPTU1PTl9DSEVDSyAoTk9ERSkpLT51LmJhc2UuYW50aWNpcGF0ZWRfcCkKKworLyogTm9uemVybyBpZiBOT0RFIGlzIGEgRlVOQ1RJT05fREVDTCB3aGljaCB3YXMgZGVjbGFyZWQgYXMgYSBmcmllbmQKKyAgIHdpdGhpbiBhIGNsYXNzIGJ1dCBoYXMgbm90IGJlZW4gZGVjbGFyZWQgaW4gdGhlIHN1cnJvdW5kaW5nIHNjb3BlLgorICAgVGhlIGZ1bmN0aW9uIGlzIGludmlzaWJsZSBleGNlcHQgdmlhIGFyZ3VtZW50IGRlcGVuZGVudCBsb29rdXAuICAqLworI2RlZmluZSBERUNMX0hJRERFTl9GUklFTkRfUChOT0RFKSBcCisgIChMQU5HX0RFQ0xfRk5fQ0hFQ0sgKERFQ0xfQ09NTU9OX0NIRUNLIChOT0RFKSktPmhpZGRlbl9mcmllbmRfcCkKKworLyogTm9uemVybyBpZiBERUNMIGhhcyBiZWVuIGRlY2xhcmVkIHRocmVhZHByaXZhdGUgYnkKKyAgICNwcmFnbWEgb21wIHRocmVhZHByaXZhdGUuICAqLworI2RlZmluZSBDUF9ERUNMX1RIUkVBRFBSSVZBVEVfUChERUNMKSBcCisgIChERUNMX0xBTkdfU1BFQ0lGSUMgKFZBUl9ERUNMX0NIRUNLIChERUNMKSktPnUuYmFzZS50aHJlYWRwcml2YXRlX29yX2RlbGV0ZWRfcCkKKworLyogTm9uemVybyBpZiBERUNMIHdhcyBkZWNsYXJlZCB3aXRoICc9IGRlbGV0ZScuICAqLworI2RlZmluZSBERUNMX0RFTEVURURfRk4oREVDTCkgXAorICAoREVDTF9MQU5HX1NQRUNJRklDIChGVU5DVElPTl9ERUNMX0NIRUNLIChERUNMKSktPnUuYmFzZS50aHJlYWRwcml2YXRlX29yX2RlbGV0ZWRfcCkKKworLyogTm9uemVybyBpZiBERUNMIHdhcyBkZWNsYXJlZCB3aXRoICc9IGRlZmF1bHQnIChtYXliZSBpbXBsaWNpdGx5KS4gICovCisjZGVmaW5lIERFQ0xfREVGQVVMVEVEX0ZOKERFQ0wpIFwKKyAgKExBTkdfREVDTF9GTl9DSEVDSyAoREVDTCktPmRlZmF1bHRlZF9wKQorCisvKiBOb256ZXJvIGlmIERFQ0wgaXMgZXhwbGljaXRseSBkZWZhdWx0ZWQgaW4gdGhlIGNsYXNzIGJvZHkuICAqLworI2RlZmluZSBERUNMX0RFRkFVTFRFRF9JTl9DTEFTU19QKERFQ0wpCQkJCQlcCisgIChERUNMX0RFRkFVTFRFRF9GTiAoREVDTCkgJiYgREVDTF9JTklUSUFMSVpFRF9JTl9DTEFTU19QIChERUNMKSkKKy8qIE5vbnplcm8gaWYgREVDTCB3YXMgZGVmYXVsdGVkIG91dHNpZGUgdGhlIGNsYXNzIGJvZHkuICAqLworI2RlZmluZSBERUNMX0RFRkFVTFRFRF9PVVRTSURFX0NMQVNTX1AoREVDTCkJCQkJXAorICAoREVDTF9ERUZBVUxURURfRk4gKERFQ0wpCQkJCQkJXAorICAgJiYgIShERUNMX0FSVElGSUNJQUwgKERFQ0wpIHx8IERFQ0xfSU5JVElBTElaRURfSU5fQ0xBU1NfUCAoREVDTCkpKQorCisvKiBSZWNvcmQgd2hldGhlciBhIHR5cGVkZWYgZm9yIHR5cGUgYGludCcgd2FzIGFjdHVhbGx5IGBzaWduZWQgaW50Jy4gICovCisjZGVmaW5lIENfVFlQRURFRl9FWFBMSUNJVExZX1NJR05FRChFWFApIERFQ0xfTEFOR19GTEFHXzEgKEVYUCkKKworLyogUmV0dXJucyBub256ZXJvIGlmIERFQ0wgaGFzIGV4dGVybmFsIGxpbmthZ2UsIGFzIHNwZWNpZmllZCBieSB0aGUKKyAgIGxhbmd1YWdlIHN0YW5kYXJkLiAgKFRoaXMgcHJlZGljYXRlIG1heSBob2xkIGV2ZW4gd2hlbiB0aGUKKyAgIGNvcnJlc3BvbmRpbmcgZW50aXR5IGlzIG5vdCBhY3R1YWxseSBnaXZlbiBleHRlcm5hbCBsaW5rYWdlIGluIHRoZQorICAgb2JqZWN0IGZpbGU7IHNlZSBkZWNsX2xpbmthZ2UgZm9yIGRldGFpbHMuKSAgKi8KKyNkZWZpbmUgREVDTF9FWFRFUk5BTF9MSU5LQUdFX1AoREVDTCkgXAorICAoZGVjbF9saW5rYWdlIChERUNMKSA9PSBsa19leHRlcm5hbCkKKworLyogS2VlcCB0aGVzZSBjb2RlcyBpbiBhc2NlbmRpbmcgY29kZSBvcmRlci4gICovCisKKyNkZWZpbmUgSU5URUdSQUxfQ09ERV9QKENPREUpCVwKKyAgKChDT0RFKSA9PSBFTlVNRVJBTF9UWVBFCVwKKyAgIHx8IChDT0RFKSA9PSBCT09MRUFOX1RZUEUJXAorICAgfHwgKENPREUpID09IElOVEVHRVJfVFlQRSkKKworLyogW2Jhc2ljLmZ1bmRhbWVudGFsXQorCisgICBUeXBlcyAgYm9vbCwgY2hhciwgd2NoYXJfdCwgYW5kIHRoZSBzaWduZWQgYW5kIHVuc2lnbmVkIGludGVnZXIgdHlwZXMKKyAgIGFyZSBjb2xsZWN0aXZlbHkgY2FsbGVkIGludGVncmFsIHR5cGVzLgorCisgICBOb3RlIHRoYXQgSU5URUdSQUxfVFlQRV9QLCBhcyBkZWZpbmVkIGluIHRyZWUuaCwgYWxsb3dzIGVudW1lcmF0aW9uCisgICB0eXBlcyBhcyB3ZWxsLCB3aGljaCBpcyBpbmNvcnJlY3QgaW4gQysrLiAgS2VlcCB0aGVzZSBjaGVja3MgaW4KKyAgIGFzY2VuZGluZyBjb2RlIG9yZGVyLiAgKi8KKyNkZWZpbmUgQ1BfSU5URUdSQUxfVFlQRV9QKFRZUEUpCQlcCisgIChUUkVFX0NPREUgKFRZUEUpID09IEJPT0xFQU5fVFlQRQkJXAorICAgfHwgVFJFRV9DT0RFIChUWVBFKSA9PSBJTlRFR0VSX1RZUEUpCisKKy8qIFJldHVybnMgdHJ1ZSBpZiBUWVBFIGlzIGFuIGludGVncmFsIG9yIGVudW1lcmF0aW9uIG5hbWUuICBLZWVwCisgICB0aGVzZSBjaGVja3MgaW4gYXNjZW5kaW5nIGNvZGUgb3JkZXIuICAqLworI2RlZmluZSBJTlRFR1JBTF9PUl9FTlVNRVJBVElPTl9UWVBFX1AoVFlQRSkgXAorICAgKFRSRUVfQ09ERSAoVFlQRSkgPT0gRU5VTUVSQUxfVFlQRSB8fCBDUF9JTlRFR1JBTF9UWVBFX1AgKFRZUEUpKQorCisvKiBSZXR1cm5zIHRydWUgaWYgVFlQRSBpcyBhbiBpbnRlZ3JhbCBvciB1bnNjb3BlZCBlbnVtZXJhdGlvbiB0eXBlLiAgKi8KKyNkZWZpbmUgSU5URUdSQUxfT1JfVU5TQ09QRURfRU5VTUVSQVRJT05fVFlQRV9QKFRZUEUpIFwKKyAgIChVTlNDT1BFRF9FTlVNX1AgKFRZUEUpIHx8IENQX0lOVEVHUkFMX1RZUEVfUCAoVFlQRSkpCisKKy8qIFRydWUgaWYgdGhlIGNsYXNzIHR5cGUgVFlQRSBpcyBhIGxpdGVyYWwgdHlwZS4gICovCisjZGVmaW5lIENMQVNTVFlQRV9MSVRFUkFMX1AoVFlQRSkgICAgICAgICAgICAgIFwKKyAgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKFRZUEUpLT5pc19saXRlcmFsKQorCisvKiBbYmFzaWMuZnVuZGFtZW50YWxdCisKKyAgIEludGVncmFsIGFuZCBmbG9hdGluZyB0eXBlcyBhcmUgY29sbGVjdGl2ZWx5IGNhbGxlZCBhcml0aG1ldGljCisgICB0eXBlcy4gIAorCisgICBBcyBhIEdOVSBleHRlbnNpb24sIHdlIGFsc28gYWNjZXB0IGNvbXBsZXggdHlwZXMuCisKKyAgIEtlZXAgdGhlc2UgY2hlY2tzIGluIGFzY2VuZGluZyBjb2RlIG9yZGVyLiAgKi8KKyNkZWZpbmUgQVJJVEhNRVRJQ19UWVBFX1AoVFlQRSkgXAorICAoQ1BfSU5URUdSQUxfVFlQRV9QIChUWVBFKSBcCisgICB8fCBUUkVFX0NPREUgKFRZUEUpID09IFJFQUxfVFlQRSBcCisgICB8fCBUUkVFX0NPREUgKFRZUEUpID09IENPTVBMRVhfVFlQRSkKKworLyogW2Jhc2ljLnR5cGVzXQorCisgICBBcml0aG1ldGljIHR5cGVzLCBlbnVtZXJhdGlvbiB0eXBlcywgcG9pbnRlciB0eXBlcywgYW5kCisgICBwb2ludGVyLXRvLW1lbWJlciB0eXBlcywgYXJlIGNvbGxlY3RpdmVseSBjYWxsZWQgc2NhbGFyIHR5cGVzLgorICAgCisgICBLZWVwIHRoZXNlIGNoZWNrcyBpbiBhc2NlbmRpbmcgY29kZSBvcmRlci4gICovCisjZGVmaW5lIFNDQUxBUl9UWVBFX1AoVFlQRSkJCQlcCisgIChUWVBFX1BUUk1FTV9QIChUWVBFKQkJCQlcCisgICB8fCBUUkVFX0NPREUgKFRZUEUpID09IEVOVU1FUkFMX1RZUEUJCVwKKyAgIHx8IEFSSVRITUVUSUNfVFlQRV9QIChUWVBFKQkJCVwKKyAgIHx8IFRZUEVfUFRSX1AgKFRZUEUpCQkJCVwKKyAgIHx8IFRZUEVfUFRSTUVNRlVOQ19QIChUWVBFKSkKKworLyogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoaXMgdHlwZSBpcyBhIEMrKzB4IHNjb3BlZCBlbnVtZXJhdGlvbgorICAgdHlwZS4gU2NvcGVkIGVudW1lcmF0aW9ucyB0eXBlcyBhcmUgaW50cm9kdWNlZCB2aWEgImVudW0gY2xhc3MiIG9yCisgICAiZW51bSBzdHJ1Y3QiLCBlLmcuLAorCisgICAgIGVudW0gY2xhc3MgQ29sb3IgeworICAgICAgIFJlZCwgR3JlZW4sIEJsdWUKKyAgICAgfTsKKworICAgU2NvcGVkIGVudW1lcmF0aW9uIHR5cGVzIGFyZSBkaWZmZXJlbnQgZnJvbSBub3JtYWwgKHVuc2NvcGVkKQorICAgZW51bWVyYXRpb24gdHlwZXMgaW4gc2V2ZXJhbCB3YXlzOgorICAgCisgICAgIC0gVGhlIGVudW1lcmF0b3JzIG9mIGEgc2NvcGVkIGVudW1lcmF0aW9uIHR5cGUgYXJlIG9ubHkgYXZhaWxhYmxlCisgICAgICAgd2l0aGluIHRoZSBzY29wZSBvZiB0aGUgZW51bWVyYXRpb24gdHlwZSBhbmQgbm90IGluIHRoZQorICAgICAgIGVuY2xvc2luZyBzY29wZS4gRm9yIGV4YW1wbGUsIHRoZSBSZWQgY29sb3IgY2FuIGJlIHJlZmVycmVkIHRvCisgICAgICAgd2l0aCAiQ29sb3I6OlJlZCIgYnV0IG5vdCAiUmVkIi4KKworICAgICAtIFNjb3BlZCBlbnVtZXJhdG9ycyBhbmQgZW51bWVyYXRpb25zIGRvIG5vdCBpbXBsaWNpdGx5IGNvbnZlcnQKKyAgICAgICB0byBpbnRlZ2VycyBvciAnYm9vbCcuCisKKyAgICAgLSBUaGUgdW5kZXJseWluZyB0eXBlIG9mIHRoZSBlbnVtIGlzIHdlbGwtZGVmaW5lZC4gICovCisjZGVmaW5lIFNDT1BFRF9FTlVNX1AoVFlQRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChUUkVFX0NPREUgKFRZUEUpID09IEVOVU1FUkFMX1RZUEUgJiYgVFlQRV9MQU5HX0ZMQUdfNSAoVFlQRSkpCisKKy8qIERldGVybWluZSB3aGV0aGVyIHRoaXMgaXMgYW4gdW5zY29wZWQgZW51bWVyYXRpb24gdHlwZS4gICovCisjZGVmaW5lIFVOU0NPUEVEX0VOVU1fUChUWVBFKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChUUkVFX0NPREUgKFRZUEUpID09IEVOVU1FUkFMX1RZUEUgJiYgIVRZUEVfTEFOR19GTEFHXzUgKFRZUEUpKQorCisvKiBTZXQgdGhlIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIGFuIEVOVU1FUkFMX1RZUEUgaXMgYSBDKysweCBzY29wZWQKKyAgIGVudW1lcmF0aW9uIHR5cGUgKDEpIG9yIGEgbm9ybWFsICh1bnNjb3BlZCkgZW51bWVyYXRpb24gdHlwZQorICAgKDApLiAgKi8KKyNkZWZpbmUgU0VUX1NDT1BFRF9FTlVNX1AoVFlQRSwgVkFMKSAgICAgICAgICAgICAgICAgICAgXAorICAoVFlQRV9MQU5HX0ZMQUdfNSAoRU5VTUVSQUxfVFlQRV9DSEVDSyAoVFlQRSkpID0gKFZBTCkpCisKKy8qIFJldHVybnMgdGhlIHVuZGVybHlpbmcgdHlwZSBvZiB0aGUgZ2l2ZW4gZW51bWVyYXRpb24gdHlwZS4gVGhlCisgICB1bmRlcmx5aW5nIHR5cGUgaXMgZGV0ZXJtaW5lZCBpbiBkaWZmZXJlbnQgd2F5cywgZGVwZW5kaW5nIG9uIHRoZQorICAgcHJvcGVydGllcyBvZiB0aGUgZW51bToKKworICAgICAtIEluIEMrKzB4LCB0aGUgdW5kZXJseWluZyB0eXBlIGNhbiBiZSBleHBsaWNpdGx5IHNwZWNpZmllZCwgZS5nLiwKKworICAgICAgICAgZW51bSBFMSA6IGNoYXIgeyAuLi4gfSAvLyB1bmRlcmx5aW5nIHR5cGUgaXMgY2hhcgorCisgICAgIC0gSW4gYSBDKysweCBzY29wZWQgZW51bWVyYXRpb24sIHRoZSB1bmRlcmx5aW5nIHR5cGUgaXMgaW50CisgICAgICAgdW5sZXNzIG90aGVyd2lzZXMgc3BlY2lmaWVkOgorCisgICAgICAgICBlbnVtIGNsYXNzIEUyIHsgLi4uIH0gLy8gdW5kZXJseWluZyB0eXBlIGlzIGludAorCisgICAgIC0gT3RoZXJ3aXNlLCB0aGUgdW5kZXJseWluZyB0eXBlIGlzIGRldGVybWluZWQgYmFzZWQgb24gdGhlCisgICAgICAgdmFsdWVzIG9mIHRoZSBlbnVtZXJhdG9ycy4gSW4gdGhpcyBjYXNlLCB0aGUKKyAgICAgICBFTlVNX1VOREVSTFlJTkdfVFlQRSB3aWxsIG5vdCBiZSBzZXQgdW50aWwgYWZ0ZXIgdGhlIGRlZmluaXRpb24KKyAgICAgICBvZiB0aGUgZW51bWVyYXRpb24gaXMgY29tcGxldGVkIGJ5IGZpbmlzaF9lbnVtLiAgKi8KKyNkZWZpbmUgRU5VTV9VTkRFUkxZSU5HX1RZUEUoVFlQRSkgXAorICBUUkVFX1RZUEUgKEVOVU1FUkFMX1RZUEVfQ0hFQ0sgKFRZUEUpKQorCisvKiBbZGNsLmluaXQuYWdncl0KKworICAgQW4gYWdncmVnYXRlIGlzIGFuIGFycmF5IG9yIGEgY2xhc3Mgd2l0aCBubyB1c2VyLWRlY2xhcmVkCisgICBjb25zdHJ1Y3RvcnMsIG5vIHByaXZhdGUgb3IgcHJvdGVjdGVkIG5vbi1zdGF0aWMgZGF0YSBtZW1iZXJzLCBubworICAgYmFzZSBjbGFzc2VzLCBhbmQgbm8gdmlydHVhbCBmdW5jdGlvbnMuCisKKyAgIEFzIGFuIGV4dGVuc2lvbiwgd2UgYWxzbyB0cmVhdCB2ZWN0b3JzIGFzIGFnZ3JlZ2F0ZXMuICBLZWVwIHRoZXNlCisgICBjaGVja3MgaW4gYXNjZW5kaW5nIGNvZGUgb3JkZXIuICAqLworI2RlZmluZSBDUF9BR0dSRUdBVEVfVFlQRV9QKFRZUEUpCQkJCVwKKyAgKFRSRUVfQ09ERSAoVFlQRSkgPT0gVkVDVE9SX1RZUEUJCQkJXAorICAgfHxUUkVFX0NPREUgKFRZUEUpID09IEFSUkFZX1RZUEUJCQkJXAorICAgfHwgKENMQVNTX1RZUEVfUCAoVFlQRSkgJiYgIUNMQVNTVFlQRV9OT05fQUdHUkVHQVRFIChUWVBFKSkpCisKKy8qIE5vbnplcm8gZm9yIGEgY2xhc3MgdHlwZSBtZWFucyB0aGF0IHRoZSBjbGFzcyB0eXBlIGhhcyBhCisgICB1c2VyLWRlY2xhcmVkIGNvbnN0cnVjdG9yLiAgKi8KKyNkZWZpbmUgVFlQRV9IQVNfVVNFUl9DT05TVFJVQ1RPUihOT0RFKSAoVFlQRV9MQU5HX0ZMQUdfMSAoTk9ERSkpCisKKy8qIFdoZW4gYXBwZWFyaW5nIGluIGFuIElORElSRUNUX1JFRiwgaXQgbWVhbnMgdGhhdCB0aGUgdHJlZSBzdHJ1Y3R1cmUKKyAgIHVuZGVybmVhdGggaXMgYWN0dWFsbHkgYSBjYWxsIHRvIGEgY29uc3RydWN0b3IuICBUaGlzIGlzIG5lZWRlZAorICAgd2hlbiB0aGUgY29uc3RydWN0b3IgbXVzdCBpbml0aWFsaXplIGxvY2FsIHN0b3JhZ2UgKHdoaWNoIGNhbgorICAgYmUgYXV0b21hdGljYWxseSBkZXN0cm95ZWQpLCByYXRoZXIgdGhhbiBhbGxvd2luZyBpdCB0byBhbGxvY2F0ZQorICAgc3BhY2UgZnJvbSB0aGUgaGVhcC4KKworICAgV2hlbiBhcHBlYXJpbmcgaW4gYSBTQVZFX0VYUFIsIGl0IG1lYW5zIHRoYXQgdW5kZXJuZWF0aAorICAgaXMgYSBjYWxsIHRvIGEgY29uc3RydWN0b3IuCisKKyAgIFdoZW4gYXBwZWFyaW5nIGluIGEgQ09OU1RSVUNUT1IsIHRoZSBleHByZXNzaW9uIGlzIGEKKyAgIGNvbXBvdW5kIGxpdGVyYWwuCisKKyAgIFdoZW4gYXBwZWFyaW5nIGluIGEgRklFTERfREVDTCwgaXQgbWVhbnMgdGhhdCB0aGlzIGZpZWxkCisgICBoYXMgYmVlbiBkdWx5IGluaXRpYWxpemVkIGluIGl0cyBjb25zdHJ1Y3Rvci4gICovCisjZGVmaW5lIFRSRUVfSEFTX0NPTlNUUlVDVE9SKE5PREUpIChUUkVFX0xBTkdfRkxBR180IChOT0RFKSkKKworLyogVHJ1ZSBpZiBOT0RFIGlzIGEgYnJhY2UtZW5jbG9zZWQgaW5pdGlhbGl6ZXIuICAqLworI2RlZmluZSBCUkFDRV9FTkNMT1NFRF9JTklUSUFMSVpFUl9QKE5PREUpIFwKKyAgKFRSRUVfQ09ERSAoTk9ERSkgPT0gQ09OU1RSVUNUT1IgJiYgVFJFRV9UWVBFIChOT0RFKSA9PSBpbml0X2xpc3RfdHlwZV9ub2RlKQorCisvKiBUcnVlIGlmIE5PREUgaXMgYSBjb21wb3VuZC1saXRlcmFsLCBpLmUuLCBhIGJyYWNlLWVuY2xvc2VkCisgICBpbml0aWFsaXplciBjYXN0IHRvIGEgcGFydGljdWxhciB0eXBlLiAgKi8KKyNkZWZpbmUgQ09NUE9VTkRfTElURVJBTF9QKE5PREUpIFwKKyAgKFRSRUVfQ09ERSAoTk9ERSkgPT0gQ09OU1RSVUNUT1IgJiYgVFJFRV9IQVNfQ09OU1RSVUNUT1IgKE5PREUpKQorCisjZGVmaW5lIEVNUFRZX0NPTlNUUlVDVE9SX1AoTk9ERSkgKFRSRUVfQ09ERSAoTk9ERSkgPT0gQ09OU1RSVUNUT1IgXAorCQkJCSAgICYmIFZFQ19lbXB0eSAoY29uc3RydWN0b3JfZWx0LCBcCisJCQkJCQkgQ09OU1RSVUNUT1JfRUxUUyAoTk9ERSkpIFwKKwkJCQkgICAmJiAhVFJFRV9IQVNfQ09OU1RSVUNUT1IgKE5PREUpKQorCisvKiBUcnVlIGlmIE5PREUgaXMgYSBpbml0LWxpc3QgdXNlZCBhcyBhIGRpcmVjdC1pbml0aWFsaXplciwgaS5lLgorICAgQiBiezEsMn0sIG5vdCBCIGIoezEsMn0pIG9yIEIgYiA9IHsxLDJ9LiAgKi8KKyNkZWZpbmUgQ09OU1RSVUNUT1JfSVNfRElSRUNUX0lOSVQoTk9ERSkgKFRSRUVfTEFOR19GTEFHXzAgKENPTlNUUlVDVE9SX0NIRUNLIChOT0RFKSkpCisKKy8qIE5vbnplcm8gbWVhbnMgdGhhdCBhbiBvYmplY3Qgb2YgdGhpcyB0eXBlIGNhbiBub3QgYmUgaW5pdGlhbGl6ZWQgdXNpbmcKKyAgIGFuIGluaXRpYWxpemVyIGxpc3QuICAqLworI2RlZmluZSBDTEFTU1RZUEVfTk9OX0FHR1JFR0FURShOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5ub25fYWdncmVnYXRlKQorI2RlZmluZSBUWVBFX05PTl9BR0dSRUdBVEVfQ0xBU1MoTk9ERSkgXAorICAoQ0xBU1NfVFlQRV9QIChOT0RFKSAmJiBDTEFTU1RZUEVfTk9OX0FHR1JFR0FURSAoTk9ERSkpCisKKy8qIE5vbnplcm8gaWYgdGhlcmUgaXMgYSB1c2VyLWRlZmluZWQgWDo6b3A9KHgmKSBmb3IgdGhpcyBjbGFzcy4gICovCisjZGVmaW5lIFRZUEVfSEFTX0NPTVBMRVhfQVNTSUdOX1JFRihOT0RFKSAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+aGFzX2NvbXBsZXhfYXNzaWduX3JlZikKKworLyogTm9uemVybyBpZiB0aGVyZSBpcyBhIHVzZXItZGVmaW5lZCBYOjpYKHgmKSBmb3IgdGhpcyBjbGFzcy4gICovCisjZGVmaW5lIFRZUEVfSEFTX0NPTVBMRVhfSU5JVF9SRUYoTk9ERSkgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmhhc19jb21wbGV4X2luaXRfcmVmKQorCisvKiBOb256ZXJvIGlmIHRoZXJlIGlzIGEgdXNlci1kZWZpbmVkIGRlZmF1bHQgY29uc3RydWN0b3IgZm9yIHRoaXMgY2xhc3MuICAqLworI2RlZmluZSBUWVBFX0hBU19DT01QTEVYX0RGTFQoTk9ERSkgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmhhc19jb21wbGV4X2RmbHQpCisKKy8qIE5vbnplcm8gaWYgVFlQRSBoYXMgYSB0cml2aWFsIGRlc3RydWN0b3IuICBGcm9tIFtjbGFzcy5kdG9yXToKKworICAgICBBIGRlc3RydWN0b3IgaXMgdHJpdmlhbCBpZiBpdCBpcyBhbiBpbXBsaWNpdGx5IGRlY2xhcmVkCisgICAgIGRlc3RydWN0b3IgYW5kIGlmOgorCisgICAgICAgLSBhbGwgb2YgdGhlIGRpcmVjdCBiYXNlIGNsYXNzZXMgb2YgaXRzIGNsYXNzIGhhdmUgdHJpdmlhbAorCSBkZXN0cnVjdG9ycywKKworICAgICAgIC0gZm9yIGFsbCBvZiB0aGUgbm9uLXN0YXRpYyBkYXRhIG1lbWJlcnMgb2YgaXRzIGNsYXNzIHRoYXQgYXJlCisJIG9mIGNsYXNzIHR5cGUgKG9yIGFycmF5IHRoZXJlb2YpLCBlYWNoIHN1Y2ggY2xhc3MgaGFzIGEKKwkgdHJpdmlhbCBkZXN0cnVjdG9yLiAgKi8KKyNkZWZpbmUgVFlQRV9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKE5PREUpIFwKKyAgKCFUWVBFX0hBU19OT05UUklWSUFMX0RFU1RSVUNUT1IgKE5PREUpKQorCisvKiBOb256ZXJvIGZvciBfVFlQRSBub2RlIG1lYW5zIHRoYXQgdGhpcyB0eXBlIGRvZXMgbm90IGhhdmUgYSB0cml2aWFsCisgICBkZXN0cnVjdG9yLiAgVGhlcmVmb3JlLCBkZXN0cm95aW5nIGFuIG9iamVjdCBvZiB0aGlzIHR5cGUgd2lsbAorICAgaW52b2x2ZSBhIGNhbGwgdG8gYSBkZXN0cnVjdG9yLiAgVGhpcyBjYW4gYXBwbHkgdG8gb2JqZWN0cyBvZgorICAgQVJSQVlfVFlQRSBpcyB0aGUgdHlwZSBvZiB0aGUgZWxlbWVudHMgbmVlZHMgYSBkZXN0cnVjdG9yLiAgKi8KKyNkZWZpbmUgVFlQRV9IQVNfTk9OVFJJVklBTF9ERVNUUlVDVE9SKE5PREUpIFwKKyAgKFRZUEVfTEFOR19GTEFHXzQgKE5PREUpKQorCisvKiBOb256ZXJvIGZvciBjbGFzcyB0eXBlIG1lYW5zIHRoYXQgdGhlIGRlZmF1bHQgY29uc3RydWN0b3IgaXMgdHJpdmlhbC4gICovCisjZGVmaW5lIFRZUEVfSEFTX1RSSVZJQUxfREZMVChOT0RFKSBcCisgIChUWVBFX0hBU19ERUZBVUxUX0NPTlNUUlVDVE9SIChOT0RFKSAmJiAhIFRZUEVfSEFTX0NPTVBMRVhfREZMVCAoTk9ERSkpCisKKy8qIE5vbnplcm8gZm9yIGNsYXNzIHR5cGUgbWVhbnMgdGhhdCBjb3B5IGluaXRpYWxpemF0aW9uIG9mIHRoaXMgdHlwZSBjYW4gdXNlCisgICBhIGJpdHdpc2UgY29weS4gICovCisjZGVmaW5lIFRZUEVfSEFTX1RSSVZJQUxfSU5JVF9SRUYoTk9ERSkgXAorICAoVFlQRV9IQVNfSU5JVF9SRUYgKE5PREUpICYmICEgVFlQRV9IQVNfQ09NUExFWF9JTklUX1JFRiAoTk9ERSkpCisKKy8qIE5vbnplcm8gZm9yIGNsYXNzIHR5cGUgbWVhbnMgdGhhdCBhc3NpZ25tZW50IG9mIHRoaXMgdHlwZSBjYW4gdXNlCisgICBhIGJpdHdpc2UgY29weS4gICovCisjZGVmaW5lIFRZUEVfSEFTX1RSSVZJQUxfQVNTSUdOX1JFRihOT0RFKSBcCisgIChUWVBFX0hBU19BU1NJR05fUkVGIChOT0RFKSAmJiAhIFRZUEVfSEFTX0NPTVBMRVhfQVNTSUdOX1JFRiAoTk9ERSkpCisKKy8qIFJldHVybnMgdHJ1ZSBpZiBOT0RFIGlzIGEgcG9pbnRlci10by1kYXRhLW1lbWJlci4gICovCisjZGVmaW5lIFRZUEVfUFRSTUVNX1AoTk9ERSkJCQlcCisgIChUUkVFX0NPREUgKE5PREUpID09IE9GRlNFVF9UWVBFKQorLyogUmV0dXJucyB0cnVlIGlmIE5PREUgaXMgYSBwb2ludGVyLiAgKi8KKyNkZWZpbmUgVFlQRV9QVFJfUChOT0RFKQkJCVwKKyAgKFRSRUVfQ09ERSAoTk9ERSkgPT0gUE9JTlRFUl9UWVBFKQorCisvKiBSZXR1cm5zIHRydWUgaWYgTk9ERSBpcyBhbiBvYmplY3QgdHlwZToKKworICAgICBbYmFzaWMudHlwZXNdCisKKyAgICAgQW4gb2JqZWN0IHR5cGUgaXMgYSAocG9zc2libHkgY3YtcXVhbGlmaWVkKSB0eXBlIHRoYXQgaXMgbm90IGEKKyAgICAgZnVuY3Rpb24gdHlwZSwgbm90IGEgcmVmZXJlbmNlIHR5cGUsIGFuZCBub3QgYSB2b2lkIHR5cGUuCisKKyAgIEtlZXAgdGhlc2UgY2hlY2tzIGluIGFzY2VuZGluZyBvcmRlciwgZm9yIHNwZWVkLiAgKi8KKyNkZWZpbmUgVFlQRV9PQkpfUChOT0RFKQkJCVwKKyAgKFRSRUVfQ09ERSAoTk9ERSkgIT0gUkVGRVJFTkNFX1RZUEUJCVwKKyAgICYmIFRSRUVfQ09ERSAoTk9ERSkgIT0gVk9JRF9UWVBFCQlcCisgICAmJiBUUkVFX0NPREUgKE5PREUpICE9IEZVTkNUSU9OX1RZUEUJCVwKKyAgICYmIFRSRUVfQ09ERSAoTk9ERSkgIT0gTUVUSE9EX1RZUEUpCisKKy8qIFJldHVybnMgdHJ1ZSBpZiBOT0RFIGlzIGEgcG9pbnRlciB0byBhbiBvYmplY3QuICBLZWVwIHRoZXNlIGNoZWNrcworICAgaW4gYXNjZW5kaW5nIHRyZWUgY29kZSBvcmRlci4gICovCisjZGVmaW5lIFRZUEVfUFRST0JfUChOT0RFKQkJCQkJXAorICAoVFlQRV9QVFJfUCAoTk9ERSkgJiYgVFlQRV9PQkpfUCAoVFJFRV9UWVBFIChOT0RFKSkpCisKKy8qIFJldHVybnMgdHJ1ZSBpZiBOT0RFIGlzIGEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdC4gIEtlZXAgdGhlc2UgY2hlY2tzCisgICBpbiBhc2NlbmRpbmcgdHJlZSBjb2RlIG9yZGVyLiAgKi8KKyNkZWZpbmUgVFlQRV9SRUZfT0JKX1AoTk9ERSkJCQkJCVwKKyAgKFRSRUVfQ09ERSAoTk9ERSkgPT0gUkVGRVJFTkNFX1RZUEUgJiYgVFlQRV9PQkpfUCAoVFJFRV9UWVBFIChOT0RFKSkpCisKKy8qIFRydWUgaWYgcmVmZXJlbmNlIHR5cGUgTk9ERSBpcyBhbiBydmFsdWUgcmVmZXJlbmNlICovCisjZGVmaW5lIFRZUEVfUkVGX0lTX1JWQUxVRShOT0RFKSBcCisgIFRSRUVfTEFOR19GTEFHXzAgKFJFRkVSRU5DRV9UWVBFX0NIRUNLIChOT0RFKSkKKworLyogUmV0dXJucyB0cnVlIGlmIE5PREUgaXMgYSBwb2ludGVyIHRvIGFuIG9iamVjdCwgb3IgYSBwb2ludGVyIHRvCisgICB2b2lkLiAgS2VlcCB0aGVzZSBjaGVja3MgaW4gYXNjZW5kaW5nIHRyZWUgY29kZSBvcmRlci4gICovCisjZGVmaW5lIFRZUEVfUFRST0JWX1AoTk9ERSkJCQkJCVwKKyAgKFRZUEVfUFRSX1AgKE5PREUpCQkJCQkJXAorICAgJiYgIShUUkVFX0NPREUgKFRSRUVfVFlQRSAoTk9ERSkpID09IEZVTkNUSU9OX1RZUEUJCVwKKwl8fCBUUkVFX0NPREUgKFRSRUVfVFlQRSAoTk9ERSkpID09IE1FVEhPRF9UWVBFKSkKKworLyogUmV0dXJucyB0cnVlIGlmIE5PREUgaXMgYSBwb2ludGVyIHRvIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgVFlQRV9QVFJGTl9QKE5PREUpCQkJCVwKKyAgKFRSRUVfQ09ERSAoTk9ERSkgPT0gUE9JTlRFUl9UWVBFCQkJXAorICAgJiYgVFJFRV9DT0RFIChUUkVFX1RZUEUgKE5PREUpKSA9PSBGVU5DVElPTl9UWVBFKQorCisvKiBSZXR1cm5zIHRydWUgaWYgTk9ERSBpcyBhIHJlZmVyZW5jZSB0byBmdW5jdGlvbi4gICovCisjZGVmaW5lIFRZUEVfUkVGRk5fUChOT0RFKQkJCQlcCisgIChUUkVFX0NPREUgKE5PREUpID09IFJFRkVSRU5DRV9UWVBFCQkJXAorICAgJiYgVFJFRV9DT0RFIChUUkVFX1RZUEUgKE5PREUpKSA9PSBGVU5DVElPTl9UWVBFKQorCisvKiBOb256ZXJvIGZvciBfVFlQRSBub2RlIG1lYW5zIHRoYXQgdGhpcyB0eXBlIGlzIGEgcG9pbnRlciB0byBtZW1iZXIKKyAgIGZ1bmN0aW9uIHR5cGUuICAqLworI2RlZmluZSBUWVBFX1BUUk1FTUZVTkNfUChOT0RFKQkJXAorICAoVFJFRV9DT0RFIChOT0RFKSA9PSBSRUNPUkRfVFlQRQlcCisgICAmJiBUWVBFX0xBTkdfU1BFQ0lGSUMgKE5PREUpCQlcCisgICAmJiBUWVBFX1BUUk1FTUZVTkNfRkxBRyAoTk9ERSkpCisKKyNkZWZpbmUgVFlQRV9QVFJNRU1GVU5DX0ZMQUcoTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+cHRybWVtZnVuY19mbGFnKQorCisvKiBSZXR1cm5zIHRydWUgaWYgTk9ERSBpcyBhIHBvaW50ZXItdG8tbWVtYmVyLiAgKi8KKyNkZWZpbmUgVFlQRV9QVFJfVE9fTUVNQkVSX1AoTk9ERSkgXAorICAoVFlQRV9QVFJNRU1fUCAoTk9ERSkgfHwgVFlQRV9QVFJNRU1GVU5DX1AgKE5PREUpKQorCisvKiBJbmRpY2F0ZXMgd2hlbiBvdmVybG9hZCByZXNvbHV0aW9uIG1heSByZXNvbHZlIHRvIGEgcG9pbnRlciB0bworICAgbWVtYmVyIGZ1bmN0aW9uLiBbZXhwci51bmFyeS5vcF0vMyAqLworI2RlZmluZSBQVFJNRU1fT0tfUChOT0RFKSBcCisgIFRSRUVfTEFOR19GTEFHXzAgKFRSRUVfQ0hFQ0syICgoTk9ERSksIEFERFJfRVhQUiwgT0ZGU0VUX1JFRikpCisKKy8qIEdldCB0aGUgUE9JTlRFUl9UWVBFIHRvIHRoZSBNRVRIT0RfVFlQRSBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb24uICBUWVBFX1BUUk1FTUZVTkNfUCBfbXVzdF8gYmUgdHJ1ZSwKKyAgIGJlZm9yZSB1c2luZyB0aGlzIG1hY3JvLiAgKi8KKyNkZWZpbmUgVFlQRV9QVFJNRU1GVU5DX0ZOX1RZUEUoTk9ERSkgXAorICAoVFJFRV9UWVBFIChUWVBFX0ZJRUxEUyAoTk9ERSkpKQorCisvKiBSZXR1cm5zIGBBJyBmb3IgYSB0eXBlIGxpa2UgYGludCAoQTo6KikoZG91YmxlKScgKi8KKyNkZWZpbmUgVFlQRV9QVFJNRU1GVU5DX09CSkVDVF9UWVBFKE5PREUpIFwKKyAgVFlQRV9NRVRIT0RfQkFTRVRZUEUgKFRSRUVfVFlQRSAoVFlQRV9QVFJNRU1GVU5DX0ZOX1RZUEUgKE5PREUpKSkKKworLyogVGhlc2UgYXJlIHVzZSB0byBtYW5pcHVsYXRlIHRoZSBjYW5vbmljYWwgUkVDT1JEX1RZUEUgZnJvbSB0aGUKKyAgIGhhc2hlZCBQT0lOVEVSX1RZUEUsIGFuZCBjYW4gb25seSBiZSB1c2VkIG9uIHRoZSBQT0lOVEVSX1RZUEUuICAqLworI2RlZmluZSBUWVBFX0dFVF9QVFJNRU1GVU5DX1RZUEUoTk9ERSkgXAorICAoVFlQRV9MQU5HX1NQRUNJRklDIChOT0RFKSA/IExBTkdfVFlQRV9QVFJNRU1fQ0hFQ0sgKE5PREUpLT5yZWNvcmQgOiBOVUxMKQorI2RlZmluZSBUWVBFX1NFVF9QVFJNRU1GVU5DX1RZUEUoTk9ERSwgVkFMVUUpCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBpZiAoVFlQRV9MQU5HX1NQRUNJRklDIChOT0RFKSA9PSBOVUxMKQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCVRZUEVfTEFOR19TUEVDSUZJQyAoTk9ERSkgPSBHR0NfQ05FV1ZBUgkJCQlcCisJIChzdHJ1Y3QgbGFuZ190eXBlLCBzaXplb2YgKHN0cnVjdCBsYW5nX3R5cGVfcHRybWVtKSk7CQlcCisJVFlQRV9MQU5HX1NQRUNJRklDIChOT0RFKS0+dS5wdHJtZW0uaC5pc19sYW5nX3R5cGVfY2xhc3MgPSAwOwlcCisgICAgICB9CQkJCQkJCQkJXAorICAgIFRZUEVfTEFOR19TUEVDSUZJQyAoTk9ERSktPnUucHRybWVtLnJlY29yZCA9IChWQUxVRSk7CQlcCisgIH0gd2hpbGUgKDApCisKKy8qIEZvciBhIHBvaW50ZXItdG8tbWVtYmVyIHR5cGUgb2YgdGhlIGZvcm0gYFQgWDo6KicsIHRoaXMgaXMgYFgnLgorICAgRm9yIGEgdHlwZSBsaWtlIGB2b2lkIChYOjoqKSgpIGNvbnN0JywgdGhpcyB0eXBlIGlzIGBYJywgbm90IGBjb25zdAorICAgWCcuICBUbyBnZXQgYXQgdGhlIGBjb25zdCBYJyB5b3UgaGF2ZSB0byBsb29rIGF0IHRoZQorICAgVFlQRV9QVFJNRU1fUE9JTlRFRF9UT19UWVBFOyB0aGVyZSwgdGhlIGZpcnN0IHBhcmFtZXRlciB3aWxsIGhhdmUKKyAgIHR5cGUgYGNvbnN0IFgqJy4gICovCisjZGVmaW5lIFRZUEVfUFRSTUVNX0NMQVNTX1RZUEUoTk9ERSkJCQlcCisgIChUWVBFX1BUUk1FTV9QIChOT0RFKQkJCQkJXAorICAgPyBUWVBFX09GRlNFVF9CQVNFVFlQRSAoTk9ERSkJCVwKKyAgIDogVFlQRV9QVFJNRU1GVU5DX09CSkVDVF9UWVBFIChOT0RFKSkKKworLyogRm9yIGEgcG9pbnRlci10by1tZW1iZXIgdHlwZSBvZiB0aGUgZm9ybSBgVCBYOjoqJywgdGhpcyBpcyBgVCcuICAqLworI2RlZmluZSBUWVBFX1BUUk1FTV9QT0lOVEVEX1RPX1RZUEUoTk9ERSkJCVwKKyAgIChUWVBFX1BUUk1FTV9QIChOT0RFKQkJCQlcCisgICAgPyBUUkVFX1RZUEUgKE5PREUpCQkJCQlcCisgICAgOiBUUkVFX1RZUEUgKFRZUEVfUFRSTUVNRlVOQ19GTl9UWVBFIChOT0RFKSkpCisKKy8qIEZvciBhIHBvaW50ZXItdG8tbWVtYmVyIGNvbnN0YW50IGBYOjpZJyB0aGlzIGlzIHRoZSBSRUNPUkRfVFlQRSBmb3IKKyAgIGBYJy4gICovCisjZGVmaW5lIFBUUk1FTV9DU1RfQ0xBU1MoTk9ERSkgXAorICBUWVBFX1BUUk1FTV9DTEFTU19UWVBFIChUUkVFX1RZUEUgKFBUUk1FTV9DU1RfQ0hFQ0sgKE5PREUpKSkKKworLyogRm9yIGEgcG9pbnRlci10by1tZW1iZXIgY29uc3RhbnQgYFg6OlknIHRoaXMgaXMgdGhlIF9ERUNMIGZvcgorICAgYFknLiAgKi8KKyNkZWZpbmUgUFRSTUVNX0NTVF9NRU1CRVIoTk9ERSkgKCgocHRybWVtX2NzdF90KVBUUk1FTV9DU1RfQ0hFQ0sgKE5PREUpKS0+bWVtYmVyKQorCisvKiBUaGUgZXhwcmVzc2lvbiBpbiBxdWVzdGlvbiBmb3IgYSBUWVBFT0ZfVFlQRS4gICovCisjZGVmaW5lIFRZUEVPRl9UWVBFX0VYUFIoTk9ERSkgKFRZUEVPRl9UWVBFX0NIRUNLIChOT0RFKSktPnR5cGUudmFsdWVzCisKKy8qIFRoZSBleHByZXNzaW9uIGluIHF1ZXN0aW9uIGZvciBhIERFQ0xUWVBFX1RZUEUuICAqLworI2RlZmluZSBERUNMVFlQRV9UWVBFX0VYUFIoTk9ERSkgKERFQ0xUWVBFX1RZUEVfQ0hFQ0sgKE5PREUpKS0+dHlwZS52YWx1ZXMKKworLyogV2hldGhlciB0aGUgREVDTFRZUEVfVFlQRV9FWFBSIG9mIE5PREUgd2FzIG9yaWdpbmFsbHkgcGFyc2VkIGFzIGFuCisgICBpZC1leHByZXNzaW9uIG9yIGEgbWVtYmVyLWFjY2VzcyBleHByZXNzaW9uLiBXaGVuIGZhbHNlLCBpdCB3YXMKKyAgIHBhcnNlZCBhcyBhIGZ1bGwgZXhwcmVzc2lvbi4gICovCisjZGVmaW5lIERFQ0xUWVBFX1RZUEVfSURfRVhQUl9PUl9NRU1CRVJfQUNDRVNTX1AoTk9ERSkgXAorICAoREVDTFRZUEVfVFlQRV9DSEVDSyAoTk9ERSkpLT50eXBlLnN0cmluZ19mbGFnCisKKy8qIFRoZXNlIGZsYWdzIGluZGljYXRlIHRoYXQgd2Ugd2FudCBkaWZmZXJlbnQgc2VtYW50aWNzIGZyb20gbm9ybWFsCisgICBkZWNsdHlwZTogbGFtYmRhIGNhcHR1cmUganVzdCBkcm9wcyByZWZlcmVuY2VzLCBsYW1iZGEgcmV0dXJuIGFsc28gZG9lcworICAgdHlwZSBkZWNheS4gICovCisjZGVmaW5lIERFQ0xUWVBFX0ZPUl9MQU1CREFfQ0FQVFVSRShOT0RFKSBcCisgIFRSRUVfTEFOR19GTEFHXzAgKERFQ0xUWVBFX1RZUEVfQ0hFQ0sgKE5PREUpKQorI2RlZmluZSBERUNMVFlQRV9GT1JfTEFNQkRBX1JFVFVSTihOT0RFKSBcCisgIFRSRUVfTEFOR19GTEFHXzEgKERFQ0xUWVBFX1RZUEVfQ0hFQ0sgKE5PREUpKQorCisvKiBOb256ZXJvIGZvciBWQVJfREVDTCBhbmQgRlVOQ1RJT05fREVDTCBub2RlIG1lYW5zIHRoYXQgYGV4dGVybicgd2FzCisgICBzcGVjaWZpZWQgaW4gaXRzIGRlY2xhcmF0aW9uLiAgVGhpcyBjYW4gYWxzbyBiZSBzZXQgZm9yIGFuCisgICBlcnJvbmVvdXNseSBkZWNsYXJlZCBQQVJNX0RFQ0wuICAqLworI2RlZmluZSBERUNMX1RISVNfRVhURVJOKE5PREUpIFwKKyAgREVDTF9MQU5HX0ZMQUdfMiAoVkFSX0ZVTkNUSU9OX09SX1BBUk1fREVDTF9DSEVDSyAoTk9ERSkpCisKKy8qIE5vbnplcm8gZm9yIFZBUl9ERUNMIGFuZCBGVU5DVElPTl9ERUNMIG5vZGUgbWVhbnMgdGhhdCBgc3RhdGljJyB3YXMKKyAgIHNwZWNpZmllZCBpbiBpdHMgZGVjbGFyYXRpb24uICBUaGlzIGNhbiBhbHNvIGJlIHNldCBmb3IgYW4KKyAgIGVycm9uZW91c2x5IGRlY2xhcmVkIFBBUk1fREVDTC4gICovCisjZGVmaW5lIERFQ0xfVEhJU19TVEFUSUMoTk9ERSkgXAorICBERUNMX0xBTkdfRkxBR182IChWQVJfRlVOQ1RJT05fT1JfUEFSTV9ERUNMX0NIRUNLIChOT0RFKSkKKworLyogTm9uemVybyBmb3IgRklFTERfREVDTCBub2RlIG1lYW5zIHRoYXQgdGhpcyBmaWVsZCBpcyBhIGJhc2UgY2xhc3MKKyAgIG9mIHRoZSBwYXJlbnQgb2JqZWN0LCBhcyBvcHBvc2VkIHRvIGEgbWVtYmVyIGZpZWxkLiAgKi8KKyNkZWZpbmUgREVDTF9GSUVMRF9JU19CQVNFKE5PREUpIFwKKyAgREVDTF9MQU5HX0ZMQUdfNiAoRklFTERfREVDTF9DSEVDSyAoTk9ERSkpCisKKy8qIE5vbnplcm8gZm9yIEZJRUxEX0RFQ0wgbm9kZSBtZWFucyB0aGF0IHRoaXMgZmllbGQgaXMgYSBzaW1wbGUgKG5vCisgICBleHBsaWNpdCBpbml0aWFsaXplcikgbGFtYmRhIGNhcHR1cmUgZmllbGQsIG1ha2luZyBpdCBpbnZpc2libGUgdG8KKyAgIG5hbWUgbG9va3VwIGluIHVuZXZhbHVhdGVkIGNvbnRleHRzLiAgKi8KKyNkZWZpbmUgREVDTF9OT1JNQUxfQ0FQVFVSRV9QKE5PREUpIFwKKyAgREVDTF9MQU5HX0ZMQUdfNyAoRklFTERfREVDTF9DSEVDSyAoTk9ERSkpCisKKy8qIE5vbnplcm8gaWYgVFlQRSBpcyBhbiBhbm9ueW1vdXMgdW5pb24gb3Igc3RydWN0IHR5cGUuICBXZSBoYXZlIHRvIHVzZSBhCisgICBmbGFnIGZvciB0aGlzIGJlY2F1c2UgIkEgdW5pb24gZm9yIHdoaWNoIG9iamVjdHMgb3IgcG9pbnRlcnMgYXJlCisgICBkZWNsYXJlZCBpcyBub3QgYW4gYW5vbnltb3VzIHVuaW9uIiBbY2xhc3MudW5pb25dLiAgKi8KKyNkZWZpbmUgQU5PTl9BR0dSX1RZUEVfUChOT0RFKQkJCQlcCisgIChDTEFTU19UWVBFX1AgKE5PREUpICYmIExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmFub25fYWdncikKKyNkZWZpbmUgU0VUX0FOT05fQUdHUl9UWVBFX1AoTk9ERSkJCQlcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5hbm9uX2FnZ3IgPSAxKQorCisvKiBOb256ZXJvIGlmIFRZUEUgaXMgYW4gYW5vbnltb3VzIHVuaW9uIHR5cGUuICAqLworI2RlZmluZSBBTk9OX1VOSU9OX1RZUEVfUChOT0RFKSBcCisgIChUUkVFX0NPREUgKE5PREUpID09IFVOSU9OX1RZUEUgJiYgQU5PTl9BR0dSX1RZUEVfUCAoTk9ERSkpCisKKyNkZWZpbmUgVU5LTk9XTl9UWVBFIExBTkdfVFlQRQorCisvKiBEZWZpbmUgZmllbGRzIGFuZCBhY2Nlc3NvcnMgZm9yIG5vZGVzIHJlcHJlc2VudGluZyBkZWNsYXJlZCBuYW1lcy4gICovCisKKyNkZWZpbmUgVFlQRV9XQVNfQU5PTllNT1VTKE5PREUpIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT53YXNfYW5vbnltb3VzKQorCisvKiBDKys6IGFsbCBvZiB0aGVzZSBhcmUgb3ZlcmxvYWRlZCEgIFRoZXNlIGFwcGx5IG9ubHkgdG8gVFlQRV9ERUNMcy4gICovCisKKy8qIFRoZSBmb3JtYXQgb2YgZWFjaCBub2RlIGluIHRoZSBERUNMX0ZSSUVORExJU1QgaXMgYXMgZm9sbG93czoKKworICAgVGhlIFRSRUVfUFVSUE9TRSB3aWxsIGJlIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24sIGkuZS4sIGFuCisgICBJREVOVElGSUVSX05PREUuICBUaGUgVFJFRV9WQUxVRSB3aWxsIGJlIGl0c2VsZiBhIFRSRUVfTElTVCwgd2hvc2UKKyAgIFRSRUVfVkFMVUVzIGFyZSBmcmllbmRzIHdpdGggdGhlIGdpdmVuIG5hbWUuICAqLworI2RlZmluZSBERUNMX0ZSSUVORExJU1QoTk9ERSkJCShERUNMX0lOSVRJQUwgKE5PREUpKQorI2RlZmluZSBGUklFTkRfTkFNRShMSVNUKSAoVFJFRV9QVVJQT1NFIChMSVNUKSkKKyNkZWZpbmUgRlJJRU5EX0RFQ0xTKExJU1QpIChUUkVFX1ZBTFVFIChMSVNUKSkKKworLyogVGhlIERFQ0xfQUNDRVNTLCBpZiBub24tTlVMTCwgaXMgYSBUUkVFX0xJU1QuICBUaGUgVFJFRV9QVVJQT1NFIG9mCisgICBlYWNoIG5vZGUgaXMgYSB0eXBlOyB0aGUgVFJFRV9WQUxVRSBpcyB0aGUgYWNjZXNzIGdyYW50ZWQgZm9yIHRoaXMKKyAgIERFQ0wgaW4gdGhhdCB0eXBlLiAgVGhlIERFQ0xfQUNDRVNTIGlzIHNldCBieSBhY2Nlc3MgZGVjbGFyYXRpb25zLgorICAgRm9yIGV4YW1wbGUsIGlmIGEgbWVtYmVyIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgcHVibGljIGluIGEKKyAgIGRlcml2ZWQgY2xhc3MgaXMgbWFkZSBwcm90ZWN0ZWQsIHRoZW4gdGhlIGRlcml2ZWQgY2xhc3MgYW5kIHRoZQorICAgcHJvdGVjdGVkX2FjY2Vzc19ub2RlIHdpbGwgYXBwZWFyIGluIHRoZSBERUNMX0FDQ0VTUyBmb3IgdGhlIG5vZGUuICAqLworI2RlZmluZSBERUNMX0FDQ0VTUyhOT0RFKSAoTEFOR19ERUNMX1UyX0NIRUNLIChOT0RFLCAwKS0+YWNjZXNzKQorCisvKiBOb256ZXJvIGlmIHRoZSBGVU5DVElPTl9ERUNMIGlzIGEgZ2xvYmFsIGNvbnN0cnVjdG9yLiAgKi8KKyNkZWZpbmUgREVDTF9HTE9CQUxfQ1RPUl9QKE5PREUpIFwKKyAgKExBTkdfREVDTF9GTl9DSEVDSyAoTk9ERSktPmdsb2JhbF9jdG9yX3ApCisKKy8qIE5vbnplcm8gaWYgdGhlIEZVTkNUSU9OX0RFQ0wgaXMgYSBnbG9iYWwgZGVzdHJ1Y3Rvci4gICovCisjZGVmaW5lIERFQ0xfR0xPQkFMX0RUT1JfUChOT0RFKSBcCisgIChMQU5HX0RFQ0xfRk5fQ0hFQ0sgKE5PREUpLT5nbG9iYWxfZHRvcl9wKQorCisvKiBBY2Nlc3NvciBtYWNyb3MgZm9yIEMrKyB0ZW1wbGF0ZSBkZWNsIG5vZGVzLiAgKi8KKworLyogVGhlIERFQ0xfVEVNUExBVEVfUEFSTVMgYXJlIGEgbGlzdC4gIFRoZSBUUkVFX1BVUlBPU0Ugb2YgZWFjaCBub2RlCisgICBpcyBhIElOVF9DU1Qgd2hvc2UgVFJFRV9JTlRfQ1NUX0xPVyBpbmRpY2F0ZXMgdGhlIGxldmVsIG9mIHRoZQorICAgdGVtcGxhdGUgcGFyYW1ldGVycywgd2l0aCAxIGJlaW5nIHRoZSBvdXRlcm1vc3Qgc2V0IG9mIHRlbXBsYXRlCisgICBwYXJhbWV0ZXJzLiAgVGhlIFRSRUVfVkFMVUUgaXMgYSB2ZWN0b3IsIHdob3NlIGVsZW1lbnRzIGFyZSB0aGUKKyAgIHRlbXBsYXRlIHBhcmFtZXRlcnMgYXQgZWFjaCBsZXZlbC4gIEVhY2ggZWxlbWVudCBpbiB0aGUgdmVjdG9yIGlzIGEKKyAgIFRSRUVfTElTVCwgd2hvc2UgVFJFRV9WQUxVRSBpcyBhIFBBUk1fREVDTCAoaWYgdGhlIHBhcmFtZXRlciBpcyBhCisgICBub24tdHlwZSBwYXJhbWV0ZXIpLCBvciBhIFRZUEVfREVDTCAoaWYgdGhlIHBhcmFtZXRlciBpcyBhIHR5cGUKKyAgIHBhcmFtZXRlcikuICBUaGUgVFJFRV9QVVJQT1NFIGlzIHRoZSBkZWZhdWx0IHZhbHVlLCBpZiBhbnkuICBUaGUKKyAgIFRFTVBMQVRFX1BBUk1fSU5ERVggZm9yIHRoZSBwYXJhbWV0ZXIgaXMgYXZhaWxhYmxlIGFzIHRoZQorICAgREVDTF9JTklUSUFMIChmb3IgYSBQQVJNX0RFQ0wpIG9yIGFzIHRoZSBUUkVFX1RZUEUgKGZvciBhCisgICBUWVBFX0RFQ0wpLiAgKi8KKyNkZWZpbmUgREVDTF9URU1QTEFURV9QQVJNUyhOT0RFKSAgICAgICBERUNMX05PTl9DT01NT05fQ0hFQ0sgKE5PREUpLT5kZWNsX25vbl9jb21tb24uYXJndW1lbnRzCisjZGVmaW5lIERFQ0xfSU5ORVJNT1NUX1RFTVBMQVRFX1BBUk1TKE5PREUpIFwKKyAgIElOTkVSTU9TVF9URU1QTEFURV9QQVJNUyAoREVDTF9URU1QTEFURV9QQVJNUyAoTk9ERSkpCisjZGVmaW5lIERFQ0xfTlRQQVJNUyhOT0RFKSBcCisgICBUUkVFX1ZFQ19MRU5HVEggKERFQ0xfSU5ORVJNT1NUX1RFTVBMQVRFX1BBUk1TIChOT0RFKSkKKy8qIEZvciBmdW5jdGlvbiwgbWV0aG9kLCBjbGFzcy1kYXRhIHRlbXBsYXRlcy4gICovCisjZGVmaW5lIERFQ0xfVEVNUExBVEVfUkVTVUxUKE5PREUpICAgICAgREVDTF9SRVNVTFRfRkxEIChOT0RFKQorLyogRm9yIGEgZnVuY3Rpb24gdGVtcGxhdGUgYXQgbmFtZXNwYWNlIHNjb3BlLCBERUNMX1RFTVBMQVRFX0lOU1RBTlRJQVRJT05TCisgICBsaXN0cyBhbGwgaW5zdGFudGlhdGlvbnMgYW5kIHNwZWNpYWxpemF0aW9ucyBvZiB0aGUgZnVuY3Rpb24gc28gdGhhdAorICAgdHN1YnN0X2ZyaWVuZF9mdW5jdGlvbiBjYW4gcmVhc3NpZ24gdGhlbSB0byBhbm90aGVyIHRlbXBsYXRlIGlmIHdlIGZpbmQKKyAgIHRoYXQgdGhlIG5hbWVzcGFjZS1zY29wZSB0ZW1wbGF0ZSBpcyByZWFsbHkgYSBwYXJ0aWFsIGluc3RhbnRpYXRpb24gb2YgYQorICAgZnJpZW5kIHRlbXBsYXRlLgorCisgICBGb3IgYSBjbGFzcyB0ZW1wbGF0ZSB0aGUgREVDTF9URU1QTEFURV9JTlNUQU5USUFUSU9OUyBsaXN0cyBob2xkcworICAgYWxsIGluc3RhbnRpYXRpb25zIGFuZCBzcGVjaWFsaXphdGlvbnMgb2YgdGhlIGNsYXNzIHR5cGUsIGluY2x1ZGluZworICAgcGFydGlhbCBpbnN0YW50aWF0aW9ucyBhbmQgcGFydGlhbCBzcGVjaWFsaXphdGlvbnMsIHNvIHRoYXQgaWYgd2UKKyAgIGV4cGxpY2l0bHkgc3BlY2lhbGl6ZSBhIHBhcnRpYWwgaW5zdGFudGlhdGlvbiB3ZSBjYW4gd2FsayB0aGUgbGlzdAorICAgaW4gbWF5YmVfcHJvY2Vzc19wYXJ0aWFsX3NwZWNpYWxpemF0aW9uIGFuZCByZWFzc2lnbiB0aGVtIG9yIGNvbXBsYWluCisgICBhcyBhcHByb3ByaWF0ZS4KKworICAgSW4gYm90aCBjYXNlcywgdGhlIFRSRUVfUFVSUE9TRSBvZiBlYWNoIG5vZGUgY29udGFpbnMgdGhlIGFyZ3VtZW50cworICAgdXNlZDsgdGhlIFRSRUVfVkFMVUUgY29udGFpbnMgdGhlIGdlbmVyYXRlZCB2YXJpYWJsZS4gIFRoZSB0ZW1wbGF0ZQorICAgYXJndW1lbnRzIGFyZSBhbHdheXMgY29tcGxldGUuICBGb3IgZXhhbXBsZSwgZ2l2ZW46CisKKyAgICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgUzEgeworCXRlbXBsYXRlIDxjbGFzcyBVPiBzdHJ1Y3QgUzIge307CisJdGVtcGxhdGUgPGNsYXNzIFU+IHN0cnVjdCBTMjxVKj4ge307CisgICAgICB9OworCisgICB0aGUgcmVjb3JkIGZvciB0aGUgcGFydGlhbCBzcGVjaWFsaXphdGlvbiB3aWxsIGNvbnRhaW4sIGFzIGl0cworICAgYXJndW1lbnQgbGlzdCwgeyB7VH0sIHtVKn0gfSwgYW5kIHdpbGwgYmUgb24gdGhlCisgICBERUNMX1RFTVBMQVRFX0lOU1RBTlRJQVRJT05TIGxpc3QgZm9yIGB0ZW1wbGF0ZSA8Y2xhc3MgVD4gdGVtcGxhdGUKKyAgIDxjbGFzcyBVPiBzdHJ1Y3QgUzE8VD46OlMyJy4KKworICAgVGhpcyBsaXN0IGlzIG5vdCB1c2VkIGZvciBvdGhlciB0ZW1wbGF0ZXMuICAqLworI2RlZmluZSBERUNMX1RFTVBMQVRFX0lOU1RBTlRJQVRJT05TKE5PREUpIERFQ0xfVklOREVYIChOT0RFKQorLyogRm9yIGEgY2xhc3MgdGVtcGxhdGUsIHRoaXMgbGlzdCBjb250YWlucyB0aGUgcGFydGlhbAorICAgc3BlY2lhbGl6YXRpb25zIG9mIHRoaXMgdGVtcGxhdGUuICAoRnVsbCBzcGVjaWFsaXphdGlvbnMgYXJlIG5vdAorICAgcmVjb3JkZWQgb24gdGhpcyBsaXN0LikgIFRoZSBUUkVFX1BVUlBPU0UgaG9sZHMgdGhlIGFyZ3VtZW50cyB1c2VkCisgICBpbiB0aGUgcGFydGlhbCBzcGVjaWFsaXphdGlvbiAoZS5nLiwgZm9yIGB0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0CisgICBTPFQqLCBpbnQ+JyB0aGlzIHdpbGwgYmUgYFQqJy4pICBUaGUgYXJndW1lbnRzIHdpbGwgYWxzbyBpbmNsdWRlCisgICBhbnkgb3V0ZXIgdGVtcGxhdGUgYXJndW1lbnRzLiAgVGhlIFRSRUVfVkFMVUUgaG9sZHMgdGhlIGlubmVybW9zdAorICAgdGVtcGxhdGUgcGFyYW1ldGVycyBmb3IgdGhlIHNwZWNpYWxpemF0aW9uIChlLmcuLCBgVCcgaW4gdGhlCisgICBleGFtcGxlIGFib3ZlLikgIFRoZSBUUkVFX1RZUEUgaXMgdGhlIF9UWVBFIG5vZGUgZm9yIHRoZSBwYXJ0aWFsCisgICBzcGVjaWFsaXphdGlvbi4KKworICAgVGhpcyBsaXN0IGlzIG5vdCB1c2VkIGZvciBvdGhlciB0ZW1wbGF0ZXMuICAqLworI2RlZmluZSBERUNMX1RFTVBMQVRFX1NQRUNJQUxJWkFUSU9OUyhOT0RFKSAgICAgREVDTF9TSVpFIChOT0RFKQorCisvKiBOb256ZXJvIGZvciBhIERFQ0wgd2hpY2ggaXMgYWN0dWFsbHkgYSB0ZW1wbGF0ZSBwYXJhbWV0ZXIuICBLZWVwCisgICB0aGVzZSBjaGVja3MgaW4gYXNjZW5kaW5nIHRyZWUgY29kZSBvcmRlci4gICAqLworI2RlZmluZSBERUNMX1RFTVBMQVRFX1BBUk1fUChOT0RFKQkJXAorICAoREVDTF9MQU5HX0ZMQUdfMCAoTk9ERSkJCQlcCisgICAmJiAoVFJFRV9DT0RFIChOT0RFKSA9PSBDT05TVF9ERUNMCQlcCisgICAgICAgfHwgVFJFRV9DT0RFIChOT0RFKSA9PSBQQVJNX0RFQ0wJCVwKKyAgICAgICB8fCBUUkVFX0NPREUgKE5PREUpID09IFRZUEVfREVDTAkJXAorICAgICAgIHx8IFRSRUVfQ09ERSAoTk9ERSkgPT0gVEVNUExBVEVfREVDTCkpCisKKy8qIE1hcmsgTk9ERSBhcyBhIHRlbXBsYXRlIHBhcmFtZXRlci4gICovCisjZGVmaW5lIFNFVF9ERUNMX1RFTVBMQVRFX1BBUk1fUChOT0RFKSBcCisgIChERUNMX0xBTkdfRkxBR18wIChOT0RFKSA9IDEpCisKKy8qIE5vbnplcm8gaWYgTk9ERSBpcyBhIHRlbXBsYXRlIHRlbXBsYXRlIHBhcmFtZXRlci4gICovCisjZGVmaW5lIERFQ0xfVEVNUExBVEVfVEVNUExBVEVfUEFSTV9QKE5PREUpIFwKKyAgKFRSRUVfQ09ERSAoTk9ERSkgPT0gVEVNUExBVEVfREVDTCAmJiBERUNMX1RFTVBMQVRFX1BBUk1fUCAoTk9ERSkpCisKKy8qIE5vbnplcm8gaWYgTk9ERSBpcyBhIFRFTVBMQVRFX0RFQ0wgcmVwcmVzZW50aW5nIGFuCisgICBVTkJPVU5EX0NMQVNTX1RFTVBMQVRFIHRyZWUgbm9kZS4gICovCisjZGVmaW5lIERFQ0xfVU5CT1VORF9DTEFTU19URU1QTEFURV9QKE5PREUpIFwKKyAgKFRSRUVfQ09ERSAoTk9ERSkgPT0gVEVNUExBVEVfREVDTCAmJiAhREVDTF9URU1QTEFURV9SRVNVTFQgKE5PREUpKQorCisjZGVmaW5lIERFQ0xfRlVOQ1RJT05fVEVNUExBVEVfUChOT0RFKSAgXAorICAoVFJFRV9DT0RFIChOT0RFKSA9PSBURU1QTEFURV9ERUNMIFwKKyAgICYmICFERUNMX1VOQk9VTkRfQ0xBU1NfVEVNUExBVEVfUCAoTk9ERSkgXAorICAgJiYgVFJFRV9DT0RFIChERUNMX1RFTVBMQVRFX1JFU1VMVCAoTk9ERSkpID09IEZVTkNUSU9OX0RFQ0wpCisKKy8qIE5vbnplcm8gZm9yIGEgREVDTCB0aGF0IHJlcHJlc2VudHMgYSB0ZW1wbGF0ZSBjbGFzcy4gICovCisjZGVmaW5lIERFQ0xfQ0xBU1NfVEVNUExBVEVfUChOT0RFKQkJCQlcCisgIChUUkVFX0NPREUgKE5PREUpID09IFRFTVBMQVRFX0RFQ0wJCQkJXAorICAgJiYgREVDTF9URU1QTEFURV9SRVNVTFQgKE5PREUpICE9IE5VTExfVFJFRQkJCVwKKyAgICYmIERFQ0xfSU1QTElDSVRfVFlQRURFRl9QIChERUNMX1RFTVBMQVRFX1JFU1VMVCAoTk9ERSkpKQorCisvKiBOb256ZXJvIGlmIE5PREUgd2hpY2ggZGVjbGFyZXMgYSB0eXBlLiAgKi8KKyNkZWZpbmUgREVDTF9ERUNMQVJFU19UWVBFX1AoTk9ERSkgXAorICAoVFJFRV9DT0RFIChOT0RFKSA9PSBUWVBFX0RFQ0wgfHwgREVDTF9DTEFTU19URU1QTEFURV9QIChOT0RFKSkKKworLyogTm9uemVybyBpZiBOT0RFIGRlY2xhcmVzIGEgZnVuY3Rpb24uICAqLworI2RlZmluZSBERUNMX0RFQ0xBUkVTX0ZVTkNUSU9OX1AoTk9ERSkgXAorICAoVFJFRV9DT0RFIChOT0RFKSA9PSBGVU5DVElPTl9ERUNMIHx8IERFQ0xfRlVOQ1RJT05fVEVNUExBVEVfUCAoTk9ERSkpCisKKy8qIE5vbnplcm8gaWYgTk9ERSBpcyB0aGUgdHlwZWRlZiBpbXBsaWNpdGx5IGdlbmVyYXRlZCBmb3IgYSB0eXBlIHdoZW4KKyAgIHRoZSB0eXBlIGlzIGRlY2xhcmVkLiAgSW4gQysrLCBgc3RydWN0IFMge307JyBpcyByb3VnaGx5CisgICBlcXVpdmFsZW50IHRvIGBzdHJ1Y3QgUyB7fTsgdHlwZWRlZiBzdHJ1Y3QgUyBTOycgaW4gQy4KKyAgIERFQ0xfSU1QTElDSVRfVFlQRURFRl9QIHdpbGwgaG9sZCBmb3IgdGhlIHR5cGVkZWYgaW5kaWNhdGVkIGluIHRoaXMKKyAgIGV4YW1wbGUuICBJbiBDKyssIHRoZXJlIGlzIGEgc2Vjb25kIGltcGxpY2l0IHR5cGVkZWYgZm9yIGVhY2gKKyAgIGNsYXNzLCBpbiB0aGUgc2NvcGUgb2YgYFMnIGl0c2VsZiwgc28gdGhhdCB5b3UgY2FuIHNheSBgUzo6UycuCisgICBERUNMX1NFTEZfUkVGRVJFTkNFX1Agd2lsbCBob2xkIGZvciB0aGF0IHNlY29uZCB0eXBlZGVmLiAgKi8KKyNkZWZpbmUgREVDTF9JTVBMSUNJVF9UWVBFREVGX1AoTk9ERSkgXAorICAoVFJFRV9DT0RFIChOT0RFKSA9PSBUWVBFX0RFQ0wgJiYgREVDTF9MQU5HX0ZMQUdfMiAoTk9ERSkpCisjZGVmaW5lIFNFVF9ERUNMX0lNUExJQ0lUX1RZUEVERUZfUChOT0RFKSBcCisgIChERUNMX0xBTkdfRkxBR18yIChOT0RFKSA9IDEpCisjZGVmaW5lIERFQ0xfU0VMRl9SRUZFUkVOQ0VfUChOT0RFKSBcCisgIChUUkVFX0NPREUgKE5PREUpID09IFRZUEVfREVDTCAmJiBERUNMX0xBTkdfRkxBR180IChOT0RFKSkKKyNkZWZpbmUgU0VUX0RFQ0xfU0VMRl9SRUZFUkVOQ0VfUChOT0RFKSBcCisgIChERUNMX0xBTkdfRkxBR180IChOT0RFKSA9IDEpCisKKy8qIEEgYHByaW1hcnknIHRlbXBsYXRlIGlzIG9uZSB0aGF0IGhhcyBpdHMgb3duIHRlbXBsYXRlIGhlYWRlci4gIEEKKyAgIG1lbWJlciBmdW5jdGlvbiBvZiBhIGNsYXNzIHRlbXBsYXRlIGlzIGEgdGVtcGxhdGUsIGJ1dCBub3QgcHJpbWFyeS4KKyAgIEEgbWVtYmVyIHRlbXBsYXRlIGlzIHByaW1hcnkuICBGcmllbmQgdGVtcGxhdGVzIGFyZSBwcmltYXJ5LCB0b28uICAqLworCisvKiBSZXR1cm5zIHRoZSBwcmltYXJ5IHRlbXBsYXRlIGNvcnJlc3BvbmRpbmcgdG8gdGhlc2UgcGFyYW1ldGVycy4gICovCisjZGVmaW5lIERFQ0xfUFJJTUFSWV9URU1QTEFURShOT0RFKSBcCisgIChUUkVFX1RZUEUgKERFQ0xfSU5ORVJNT1NUX1RFTVBMQVRFX1BBUk1TIChOT0RFKSkpCisKKy8qIFJldHVybnMgbm9uemVybyBpZiBOT0RFIGlzIGEgcHJpbWFyeSB0ZW1wbGF0ZS4gICovCisjZGVmaW5lIFBSSU1BUllfVEVNUExBVEVfUChOT0RFKSAoREVDTF9QUklNQVJZX1RFTVBMQVRFIChOT0RFKSA9PSAoTk9ERSkpCisKKy8qIE5vbnplcm8gaWZmIE5PREUgaXMgYSBzcGVjaWFsaXphdGlvbiBvZiBhIHRlbXBsYXRlLiAgVGhlIHZhbHVlCisgICBpbmRpY2F0ZXMgdGhlIHR5cGUgb2Ygc3BlY2lhbGl6YXRpb25zOgorCisgICAgIDE9aW1wbGljaXQgaW5zdGFudGlhdGlvbgorCisgICAgIDI9cGFydGlhbCBvciBleHBsaWNpdCBzcGVjaWFsaXphdGlvbiwgZS5nLjoKKworICAgICAgICB0ZW1wbGF0ZSA8PiBpbnQgbWluPGludD4gKGludCwgaW50KSwKKworICAgICAzPWV4cGxpY2l0IGluc3RhbnRpYXRpb24sIGUuZy46CisgIAorICAgICAgICB0ZW1wbGF0ZSBpbnQgbWluPGludD4gKGludCwgaW50KTsKKworICAgTm90ZSB0aGF0IE5PREUgd2lsbCBiZSBtYXJrZWQgYXMgYSBzcGVjaWFsaXphdGlvbiBldmVuIGlmIHRoZQorICAgdGVtcGxhdGUgaXQgaXMgaW5zdGFudGlhdGluZyBpcyBub3QgYSBwcmltYXJ5IHRlbXBsYXRlLiAgRm9yCisgICBleGFtcGxlLCBnaXZlbjoKKworICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IE8geyAKKyAgICAgICB2b2lkIGYoKTsKKyAgICAgICBzdHJ1Y3QgSSB7fTsgCisgICAgIH07CisgICAgCisgICBib3RoIE88aW50Pjo6ZiBhbmQgTzxpbnQ+OjpJIHdpbGwgYmUgbWFya2VkIGFzIGluc3RhbnRpYXRpb25zLgorCisgICBJZiBERUNMX1VTRV9URU1QTEFURSBpcyBub256ZXJvLCB0aGVuIERFQ0xfVEVNUExBVEVfSU5GTyB3aWxsIGFsc28KKyAgIGJlIG5vbi1OVUxMLiAgKi8KKyNkZWZpbmUgREVDTF9VU0VfVEVNUExBVEUoTk9ERSkgKERFQ0xfTEFOR19TUEVDSUZJQyAoTk9ERSktPnUuYmFzZS51c2VfdGVtcGxhdGUpCisKKy8qIExpa2UgREVDTF9VU0VfVEVNUExBVEUsIGJ1dCBmb3IgY2xhc3MgdHlwZXMuICAqLworI2RlZmluZSBDTEFTU1RZUEVfVVNFX1RFTVBMQVRFKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPnVzZV90ZW1wbGF0ZSkKKworLyogVHJ1ZSBpZiBOT0RFIGlzIGEgc3BlY2lhbGl6YXRpb24gb2YgYSBwcmltYXJ5IHRlbXBsYXRlLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX1NQRUNJQUxJWkFUSU9OX09GX1BSSU1BUllfVEVNUExBVEVfUChOT0RFKQlcCisgIChDTEFTU19UWVBFX1AgKE5PREUpCQkJCQkJXAorICAgJiYgQ0xBU1NUWVBFX1VTRV9URU1QTEFURSAoTk9ERSkJCQkJXAorICAgJiYgUFJJTUFSWV9URU1QTEFURV9QIChDTEFTU1RZUEVfVElfVEVNUExBVEUgKE5PREUpKSkKKworI2RlZmluZSBERUNMX1RFTVBMQVRFX0lOU1RBTlRJQVRJT04oTk9ERSkgKERFQ0xfVVNFX1RFTVBMQVRFIChOT0RFKSAmIDEpCisjZGVmaW5lIENMQVNTVFlQRV9URU1QTEFURV9JTlNUQU5USUFUSU9OKE5PREUpIFwKKyAgKENMQVNTVFlQRV9VU0VfVEVNUExBVEUgKE5PREUpICYgMSkKKworI2RlZmluZSBERUNMX1RFTVBMQVRFX1NQRUNJQUxJWkFUSU9OKE5PREUpIChERUNMX1VTRV9URU1QTEFURSAoTk9ERSkgPT0gMikKKyNkZWZpbmUgU0VUX0RFQ0xfVEVNUExBVEVfU1BFQ0lBTElaQVRJT04oTk9ERSkgKERFQ0xfVVNFX1RFTVBMQVRFIChOT0RFKSA9IDIpCisKKy8qIFJldHVybnMgdHJ1ZSBmb3IgYW4gZXhwbGljaXQgb3IgcGFydGlhbCBzcGVjaWFsaXphdGlvbiBvZiBhIGNsYXNzCisgICB0ZW1wbGF0ZS4gICovCisjZGVmaW5lIENMQVNTVFlQRV9URU1QTEFURV9TUEVDSUFMSVpBVElPTihOT0RFKSBcCisgIChDTEFTU1RZUEVfVVNFX1RFTVBMQVRFIChOT0RFKSA9PSAyKQorI2RlZmluZSBTRVRfQ0xBU1NUWVBFX1RFTVBMQVRFX1NQRUNJQUxJWkFUSU9OKE5PREUpIFwKKyAgKENMQVNTVFlQRV9VU0VfVEVNUExBVEUgKE5PREUpID0gMikKKworI2RlZmluZSBERUNMX0lNUExJQ0lUX0lOU1RBTlRJQVRJT04oTk9ERSkgKERFQ0xfVVNFX1RFTVBMQVRFIChOT0RFKSA9PSAxKQorI2RlZmluZSBTRVRfREVDTF9JTVBMSUNJVF9JTlNUQU5USUFUSU9OKE5PREUpIChERUNMX1VTRV9URU1QTEFURSAoTk9ERSkgPSAxKQorI2RlZmluZSBDTEFTU1RZUEVfSU1QTElDSVRfSU5TVEFOVElBVElPTihOT0RFKSBcCisgIChDTEFTU1RZUEVfVVNFX1RFTVBMQVRFIChOT0RFKSA9PSAxKQorI2RlZmluZSBTRVRfQ0xBU1NUWVBFX0lNUExJQ0lUX0lOU1RBTlRJQVRJT04oTk9ERSkgXAorICAoQ0xBU1NUWVBFX1VTRV9URU1QTEFURSAoTk9ERSkgPSAxKQorCisjZGVmaW5lIERFQ0xfRVhQTElDSVRfSU5TVEFOVElBVElPTihOT0RFKSAoREVDTF9VU0VfVEVNUExBVEUgKE5PREUpID09IDMpCisjZGVmaW5lIFNFVF9ERUNMX0VYUExJQ0lUX0lOU1RBTlRJQVRJT04oTk9ERSkgKERFQ0xfVVNFX1RFTVBMQVRFIChOT0RFKSA9IDMpCisjZGVmaW5lIENMQVNTVFlQRV9FWFBMSUNJVF9JTlNUQU5USUFUSU9OKE5PREUpIFwKKyAgKENMQVNTVFlQRV9VU0VfVEVNUExBVEUgKE5PREUpID09IDMpCisjZGVmaW5lIFNFVF9DTEFTU1RZUEVfRVhQTElDSVRfSU5TVEFOVElBVElPTihOT0RFKSBcCisgIChDTEFTU1RZUEVfVVNFX1RFTVBMQVRFIChOT0RFKSA9IDMpCisKKy8qIE5vbnplcm8gaWYgREVDTCBpcyBhIGZyaWVuZCBmdW5jdGlvbiB3aGljaCBpcyBhbiBpbnN0YW50aWF0aW9uCisgICBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIHRoZSBjb21waWxlciwgYnV0IG5vdCBmcm9tIHRoZSBwb2ludCBvZgorICAgdmlldyBvZiB0aGUgbGFuZ3VhZ2UuICBGb3IgZXhhbXBsZSBnaXZlbjoKKyAgICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgUyB7IGZyaWVuZCB2b2lkIGYoVCkge307IH07CisgICB0aGUgZGVjbGFyYXRpb24gb2YgYHZvaWQgZihpbnQpJyBnZW5lcmF0ZWQgd2hlbiBTPGludD4gaXMKKyAgIGluc3RhbnRpYXRlZCB3aWxsIG5vdCBiZSBhIERFQ0xfVEVNUExBVEVfSU5TVEFOVElBVElPTiwgYnV0IHdpbGwgYmUKKyAgIGEgREVDTF9GUklFTkRfUFNFVURPX1RFTVBMQVRFX0lOU1RBTlRJQVRJT04uICAqLworI2RlZmluZSBERUNMX0ZSSUVORF9QU0VVRE9fVEVNUExBVEVfSU5TVEFOVElBVElPTihERUNMKSBcCisgIChERUNMX1RFTVBMQVRFX0lORk8gKERFQ0wpICYmICFERUNMX1VTRV9URU1QTEFURSAoREVDTCkpCisKKy8qIE5vbnplcm8gaWZmIHdlIGFyZSBjdXJyZW50bHkgcHJvY2Vzc2luZyBhIGRlY2xhcmF0aW9uIGZvciBhbgorICAgZW50aXR5IHdpdGggaXRzIG93biB0ZW1wbGF0ZSBwYXJhbWV0ZXIgbGlzdCwgYW5kIHdoaWNoIGlzIG5vdCBhCisgICBmdWxsIHNwZWNpYWxpemF0aW9uLiAgKi8KKyNkZWZpbmUgUFJPQ0VTU0lOR19SRUFMX1RFTVBMQVRFX0RFQ0xfUCgpIFwKKyAgKHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCA+IHRlbXBsYXRlX2NsYXNzX2RlcHRoIChjdXJyZW50X3Njb3BlICgpKSkKKworLyogTm9uemVybyBpZiB0aGlzIFZBUl9ERUNMIG9yIEZVTkNUSU9OX0RFQ0wgaGFzIGFscmVhZHkgYmVlbgorICAgaW5zdGFudGlhdGVkLCBpLmUuIGl0cyBkZWZpbml0aW9uIGhhcyBiZWVuIGdlbmVyYXRlZCBmcm9tIHRoZQorICAgcGF0dGVybiBnaXZlbiBpbiB0aGUgdGVtcGxhdGUuICAqLworI2RlZmluZSBERUNMX1RFTVBMQVRFX0lOU1RBTlRJQVRFRChOT0RFKSBcCisgIERFQ0xfTEFOR19GTEFHXzEgKFZBUl9PUl9GVU5DVElPTl9ERUNMX0NIRUNLIChOT0RFKSkKKworLyogV2Uga25vdyB3aGF0IHdlJ3JlIGRvaW5nIHdpdGggdGhpcyBkZWNsIG5vdy4gICovCisjZGVmaW5lIERFQ0xfSU5URVJGQUNFX0tOT1dOKE5PREUpIERFQ0xfTEFOR19GTEFHXzUgKE5PREUpCisKKy8qIERFQ0xfRVhURVJOQUwgbXVzdCBiZSBzZXQgb24gYSBkZWNsIHVudGlsIHRoZSBkZWNsIGlzIGFjdHVhbGx5IGVtaXR0ZWQsCisgICBzbyB0aGF0IGFzc2VtYmxlX2V4dGVybmFsIHdpbGwgd29yayBwcm9wZXJseS4gIFNvIHdlIGhhdmUgdGhpcyBmbGFnIHRvCisgICB0ZWxsIHVzIHdoZXRoZXIgdGhlIGRlY2wgaXMgcmVhbGx5IG5vdCBleHRlcm5hbC4KKworICAgVGhpcyBmbGFnIGRvZXMgbm90IGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHRoZSBkZWNsIGlzIGRlZmluZWQgaW4gdGhlCisgICBjdXJyZW50IHRyYW5zbGF0aW9uIHVuaXQ7IGl0IGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgZW1pdCB0aGUKKyAgIGRlY2wgYXQgdGhlIGVuZCBvZiBjb21waWxhdGlvbiBpZiBpdCBpcyBkZWZpbmVkIGFuZCBuZWVkZWQuICAqLworI2RlZmluZSBERUNMX05PVF9SRUFMTFlfRVhURVJOKE5PREUpIFwKKyAgKERFQ0xfTEFOR19TUEVDSUZJQyAoTk9ERSktPnUuYmFzZS5ub3RfcmVhbGx5X2V4dGVybikKKworI2RlZmluZSBERUNMX1JFQUxMWV9FWFRFUk4oTk9ERSkgXAorICAoREVDTF9FWFRFUk5BTCAoTk9ERSkgJiYgISBERUNMX05PVF9SRUFMTFlfRVhURVJOIChOT0RFKSkKKworLyogQSB0aHVuayBpcyBhIHN0dWIgZnVuY3Rpb24uCisKKyAgIEEgdGh1bmsgaXMgYW4gYWx0ZXJuYXRlIGVudHJ5IHBvaW50IGZvciBhbiBvcmRpbmFyeSBGVU5DVElPTl9ERUNMLgorICAgVGhlIGFkZHJlc3Mgb2YgdGhlIG9yZGluYXJ5IEZVTkNUSU9OX0RFQ0wgaXMgZ2l2ZW4gYnkgdGhlCisgICBERUNMX0lOSVRJQUwsIHdoaWNoIGlzIGFsd2F5cyBhbiBBRERSX0VYUFIgd2hvc2Ugb3BlcmFuZCBpcyBhCisgICBGVU5DVElPTl9ERUNMLiAgVGhlIGpvYiBvZiB0aGUgdGh1bmsgaXMgdG8gZWl0aGVyIGFkanVzdCB0aGUgdGhpcworICAgcG9pbnRlciBiZWZvcmUgdHJhbnNmZXJyaW5nIGNvbnRyb2wgdG8gdGhlIEZVTkNUSU9OX0RFQ0wsIG9yIGNhbGwKKyAgIEZVTkNUSU9OX0RFQ0wgYW5kIHRoZW4gYWRqdXN0IHRoZSByZXN1bHQgdmFsdWUuIE5vdGUsIHRoZSByZXN1bHQKKyAgIHBvaW50ZXIgYWRqdXN0aW5nIHRodW5rIG11c3QgcGVyZm9ybSBhIGNhbGwgdG8gdGhlIHRodW5rZWQKKyAgIGZ1bmN0aW9uLCAob3IgYmUgaW1wbGVtZW50ZWQgdmlhIHBhc3Npbmcgc29tZSBpbnZpc2libGUgcGFyYW1ldGVyCisgICB0byB0aGUgdGh1bmtlZCBmdW5jdGlvbiwgd2hpY2ggaXMgbW9kaWZpZWQgdG8gcGVyZm9ybSB0aGUKKyAgIGFkanVzdG1lbnQganVzdCBiZWZvcmUgcmV0dXJuaW5nKS4KKworICAgQSB0aHVuayBtYXkgcGVyZm9ybSBlaXRoZXIsIG9yIGJvdGgsIG9mIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9uczoKKworICAgbyBBZGp1c3QgdGhlIHRoaXMgb3IgcmVzdWx0IHBvaW50ZXIgYnkgYSBjb25zdGFudCBvZmZzZXQuCisgICBvIEFkanVzdCB0aGUgdGhpcyBvciByZXN1bHQgcG9pbnRlciBieSBsb29raW5nIHVwIGEgdmNhbGwgb3IgdmJhc2Ugb2Zmc2V0CisgICAgIGluIHRoZSB2dGFibGUuCisKKyAgIEEgdGhpcyBwb2ludGVyIGFkanVzdGluZyB0aHVuayBjb252ZXJ0cyBmcm9tIGEgYmFzZSB0byBhIGRlcml2ZWQKKyAgIGNsYXNzLCBhbmQgaGVuY2UgYWRkcyB0aGUgb2Zmc2V0cy4gQSByZXN1bHQgcG9pbnRlciBhZGp1c3RpbmcgdGh1bmsKKyAgIGNvbnZlcnRzIGZyb20gYSBkZXJpdmVkIGNsYXNzIHRvIGEgYmFzZSwgYW5kIGhlbmNlIHN1YnRyYWN0cyB0aGUKKyAgIG9mZnNldHMuICBJZiBib3RoIG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCwgdGhlbiB0aGUgY29uc3RhbnQKKyAgIGFkanVzdG1lbnQgaXMgcGVyZm9ybWVkIGZpcnN0IGZvciB0aGlzIHBvaW50ZXIgYWRqdXN0bWVudCBhbmQgbGFzdAorICAgZm9yIHRoZSByZXN1bHQgcG9pbnRlciBhZGp1c3RtZW50LgorCisgICBUaGUgY29uc3RhbnQgYWRqdXN0bWVudCBpcyBnaXZlbiBieSBUSFVOS19GSVhFRF9PRkZTRVQuICBJZiB0aGUKKyAgIHZjYWxsIG9yIHZiYXNlIG9mZnNldCBpcyByZXF1aXJlZCwgVEhVTktfVklSVFVBTF9PRkZTRVQgaXMKKyAgIHVzZWQuIEZvciB0aGlzIHBvaW50ZXIgYWRqdXN0aW5nIHRodW5rcywgaXQgaXMgdGhlIHZjYWxsIG9mZnNldAorICAgaW50byB0aGUgdnRhYmxlLiAgRm9yIHJlc3VsdCBwb2ludGVyIGFkanVzdGluZyB0aHVua3MgaXQgaXMgdGhlCisgICBiaW5mbyBvZiB0aGUgdmlydHVhbCBiYXNlIHRvIGNvbnZlcnQgdG8uICBVc2UgdGhhdCBiaW5mbydzIHZiYXNlCisgICBvZmZzZXQuCisKKyAgIEl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgZXF1aXZhbGVudCBjb3ZhcmlhbnQgdGh1bmtzLiAgVGhlc2UgYXJlCisgICBkaXN0aW5jdCB2aXJ0dWFsIGNvdmFyaWFudCB0aHVua3Mgd2hvc2UgdmJhc2Ugb2Zmc2V0cyBoYXBwZW4gdG8KKyAgIGhhdmUgdGhlIHNhbWUgdmFsdWUuICBUSFVOS19BTElBUyBpcyB1c2VkIHRvIHBpY2sgb25lIGFzIHRoZQorICAgY2Fub25pY2FsIHRodW5rLCB3aGljaCB3aWxsIGdldCBhbGwgdGhlIHRoaXMgcG9pbnRlciBhZGp1c3RpbmcKKyAgIHRodW5rcyBhdHRhY2hlZCB0byBpdC4gICovCisKKy8qIEFuIGludGVnZXIgaW5kaWNhdGluZyBob3cgbWFueSBieXRlcyBzaG91bGQgYmUgc3VidHJhY3RlZCBmcm9tIHRoZQorICAgdGhpcyBvciByZXN1bHQgcG9pbnRlciB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiAgKi8KKyNkZWZpbmUgVEhVTktfRklYRURfT0ZGU0VUKERFQ0wpIFwKKyAgKERFQ0xfTEFOR19TUEVDSUZJQyAoVEhVTktfRlVOQ1RJT05fQ0hFQ0sgKERFQ0wpKS0+dS5mbi51NS5maXhlZF9vZmZzZXQpCisKKy8qIEEgdHJlZSBpbmRpY2F0aW5nIGhvdyB0byBwZXJmb3JtIHRoZSB2aXJ0dWFsIGFkanVzdG1lbnQuIEZvciBhIHRoaXMKKyAgIGFkanVzdGluZyB0aHVuayBpdCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIGFkZGVkIHRvIHRoZSB2dGFibGUKKyAgIHRvIGZpbmQgdGhlIHZjYWxsIG9mZnNldC4gRm9yIGEgcmVzdWx0IGFkanVzdGluZyB0aHVuaywgaXQgaXMgdGhlCisgICBiaW5mbyBvZiB0aGUgcmVsZXZhbnQgdmlydHVhbCBiYXNlLiAgSWYgTlVMTCwgdGhlbiB0aGVyZSBpcyBubworICAgdmlydHVhbCBhZGp1c3QuICAoVGhlIHZwdHIgaXMgYWx3YXlzIGxvY2F0ZWQgYXQgb2Zmc2V0IHplcm8gZnJvbQorICAgdGhlIHRoaXMgb3IgcmVzdWx0IHBvaW50ZXIuKSAgKElmIHRoZSBjb3ZhcmlhbnQgdHlwZSBpcyB3aXRoaW4gdGhlCisgICBjbGFzcyBoaWVyYXJjaHkgYmVpbmcgbGFpZCBvdXQsIHRoZSB2YmFzZSBpbmRleCBpcyBub3QgeWV0IGtub3duCisgICBhdCB0aGUgcG9pbnQgd2UgbmVlZCB0byBjcmVhdGUgdGhlIHRodW5rcywgaGVuY2UgdGhlIG5lZWQgdG8gdXNlCisgICBiaW5mb3MuKSAgKi8KKworI2RlZmluZSBUSFVOS19WSVJUVUFMX09GRlNFVChERUNMKSBcCisgIChMQU5HX0RFQ0xfVTJfQ0hFQ0sgKEZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKERFQ0wpLCAwKS0+YWNjZXNzKQorCisvKiBBIHRodW5rIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gYW5vdGhlciB0aHVuay4gICovCisjZGVmaW5lIFRIVU5LX0FMSUFTKERFQ0wpIFwKKyAgKERFQ0xfTEFOR19TUEVDSUZJQyAoRlVOQ1RJT05fREVDTF9DSEVDSyAoREVDTCkpLT51Lm1pbi50ZW1wbGF0ZV9pbmZvKQorCisvKiBGb3IgdGh1bmsgTk9ERSwgdGhpcyBpcyB0aGUgRlVOQ1RJT05fREVDTCB0aHVua2VkIHRvLiAgSXQgaXMKKyAgIHBvc3NpYmxlIGZvciB0aGUgdGFyZ2V0IHRvIGJlIGEgdGh1bmsgdG9vLiAgKi8KKyNkZWZpbmUgVEhVTktfVEFSR0VUKE5PREUpCQkJCVwKKyAgKExBTkdfREVDTF9GTl9DSEVDSyAoTk9ERSktPmJlZnJpZW5kaW5nX2NsYXNzZXMpCisKKy8qIFRydWUgZm9yIGEgU0NPUEVfUkVGIGlmZiB0aGUgInRlbXBsYXRlIiBrZXl3b3JkIHdhcyB1c2VkIHRvCisgICBpbmRpY2F0ZSB0aGF0IHRoZSBxdWFsaWZpZWQgbmFtZSBkZW5vdGVzIGEgdGVtcGxhdGUuICAqLworI2RlZmluZSBRVUFMSUZJRURfTkFNRV9JU19URU1QTEFURShOT0RFKSBcCisgIChUUkVFX0xBTkdfRkxBR18wIChTQ09QRV9SRUZfQ0hFQ0sgKE5PREUpKSkKKworLyogVHJ1ZSBmb3IgYW4gT01QX0FUT01JQyB0aGF0IGhhcyBkZXBlbmRlbnQgcGFyYW1ldGVycy4gIFRoZXNlIGFyZSBzdG9yZWQKKyAgIGFzIGFuIGV4cHIgaW4gb3BlcmFuZCAxLCBhbmQgaW50ZWdlcl96ZXJvX25vZGUgaW4gb3BlcmFuZCAwLiAgKi8KKyNkZWZpbmUgT01QX0FUT01JQ19ERVBFTkRFTlRfUChOT0RFKSBcCisgIChUUkVFX0NPREUgKFRSRUVfT1BFUkFORCAoT01QX0FUT01JQ19DSEVDSyAoTk9ERSksIDApKSA9PSBJTlRFR0VSX0NTVCkKKworLyogVXNlZCB3aGlsZSBnaW1wbGlmeWluZyBjb250aW51ZSBzdGF0ZW1lbnRzIGJvdW5kIHRvIE9NUF9GT1Igbm9kZXMuICAqLworI2RlZmluZSBPTVBfRk9SX0dJTVBMSUZZSU5HX1AoTk9ERSkgXAorICAoVFJFRV9MQU5HX0ZMQUdfMCAoT01QX0ZPUl9DSEVDSyAoTk9ERSkpKQorCisvKiBBIGxhbmd1YWdlLXNwZWNpZmljIHRva2VuIGF0dGFjaGVkIHRvIHRoZSBPcGVuTVAgZGF0YSBjbGF1c2VzIHRvCisgICBob2xkIGNvZGUgKG9yIGNvZGUgZnJhZ21lbnRzKSByZWxhdGVkIHRvIGN0b3JzLCBkdG9ycywgYW5kIG9wPS4KKyAgIFNlZSBzZW1hbnRpY3MuYyBmb3IgZGV0YWlscy4gICovCisjZGVmaW5lIENQX09NUF9DTEFVU0VfSU5GTyhOT0RFKSBcCisgIFRSRUVfVFlQRSAoT01QX0NMQVVTRV9SQU5HRV9DSEVDSyAoTk9ERSwgT01QX0NMQVVTRV9QUklWQVRFLCBcCisJCQkJICAgICBPTVBfQ0xBVVNFX0NPUFlQUklWQVRFKSkKKworLyogVGhlc2UgbWFjcm9zIHByb3ZpZGUgY29udmVuaWVudCBhY2Nlc3MgdG8gdGhlIHZhcmlvdXMgX1NUTVQgbm9kZXMKKyAgIGNyZWF0ZWQgd2hlbiBwYXJzaW5nIHRlbXBsYXRlIGRlY2xhcmF0aW9ucy4gICovCisjZGVmaW5lIFRSWV9TVE1UUyhOT0RFKQkJVFJFRV9PUEVSQU5EIChUUllfQkxPQ0tfQ0hFQ0sgKE5PREUpLCAwKQorI2RlZmluZSBUUllfSEFORExFUlMoTk9ERSkJVFJFRV9PUEVSQU5EIChUUllfQkxPQ0tfQ0hFQ0sgKE5PREUpLCAxKQorCisjZGVmaW5lIEVIX1NQRUNfU1RNVFMoTk9ERSkJVFJFRV9PUEVSQU5EIChFSF9TUEVDX0JMT0NLX0NIRUNLIChOT0RFKSwgMCkKKyNkZWZpbmUgRUhfU1BFQ19SQUlTRVMoTk9ERSkJVFJFRV9PUEVSQU5EIChFSF9TUEVDX0JMT0NLX0NIRUNLIChOT0RFKSwgMSkKKworI2RlZmluZSBVU0lOR19TVE1UX05BTUVTUEFDRShOT0RFKSBUUkVFX09QRVJBTkQgKFVTSU5HX1NUTVRfQ0hFQ0sgKE5PREUpLCAwKQorCisvKiBOb256ZXJvIGlmIHRoaXMgdHJ5IGJsb2NrIGlzIGEgZnVuY3Rpb24gdHJ5IGJsb2NrLiAgKi8KKyNkZWZpbmUgRk5fVFJZX0JMT0NLX1AoTk9ERSkJVFJFRV9MQU5HX0ZMQUdfMyAoVFJZX0JMT0NLX0NIRUNLIChOT0RFKSkKKyNkZWZpbmUgSEFORExFUl9QQVJNUyhOT0RFKQlUUkVFX09QRVJBTkQgKEhBTkRMRVJfQ0hFQ0sgKE5PREUpLCAwKQorI2RlZmluZSBIQU5ETEVSX0JPRFkoTk9ERSkJVFJFRV9PUEVSQU5EIChIQU5ETEVSX0NIRUNLIChOT0RFKSwgMSkKKyNkZWZpbmUgSEFORExFUl9UWVBFKE5PREUpCVRSRUVfVFlQRSAoSEFORExFUl9DSEVDSyAoTk9ERSkpCisKKy8qIENMRUFOVVBfU1RNVCBhY2Nlc3NvcnMuICBUaGUgc3RhdGVtZW50KHMpIGNvdmVyZWQsIHRoZSBjbGVhbnVwIHRvIHJ1bgorICAgYW5kIHRoZSBWQVJfREVDTCBmb3Igd2hpY2ggdGhpcyBjbGVhbnVwIGV4aXN0cy4gICovCisjZGVmaW5lIENMRUFOVVBfQk9EWShOT0RFKQlUUkVFX09QRVJBTkQgKENMRUFOVVBfU1RNVF9DSEVDSyAoTk9ERSksIDApCisjZGVmaW5lIENMRUFOVVBfRVhQUihOT0RFKQlUUkVFX09QRVJBTkQgKENMRUFOVVBfU1RNVF9DSEVDSyAoTk9ERSksIDEpCisjZGVmaW5lIENMRUFOVVBfREVDTChOT0RFKQlUUkVFX09QRVJBTkQgKENMRUFOVVBfU1RNVF9DSEVDSyAoTk9ERSksIDIpCisKKy8qIElGX1NUTVQgYWNjZXNzb3JzLiBUaGVzZSBnaXZlIGFjY2VzcyB0byB0aGUgY29uZGl0aW9uIG9mIHRoZSBpZgorICAgc3RhdGVtZW50LCB0aGUgdGhlbiBibG9jayBvZiB0aGUgaWYgc3RhdGVtZW50LCBhbmQgdGhlIGVsc2UgYmxvY2sKKyAgIG9mIHRoZSBpZiBzdGF0ZW1lbnQgaWYgaXQgZXhpc3RzLiAgKi8KKyNkZWZpbmUgSUZfQ09ORChOT0RFKQkJVFJFRV9PUEVSQU5EIChJRl9TVE1UX0NIRUNLIChOT0RFKSwgMCkKKyNkZWZpbmUgVEhFTl9DTEFVU0UoTk9ERSkJVFJFRV9PUEVSQU5EIChJRl9TVE1UX0NIRUNLIChOT0RFKSwgMSkKKyNkZWZpbmUgRUxTRV9DTEFVU0UoTk9ERSkJVFJFRV9PUEVSQU5EIChJRl9TVE1UX0NIRUNLIChOT0RFKSwgMikKKworLyogV0hJTEVfU1RNVCBhY2Nlc3NvcnMuIFRoZXNlIGdpdmUgYWNjZXNzIHRvIHRoZSBjb25kaXRpb24gb2YgdGhlCisgICB3aGlsZSBzdGF0ZW1lbnQgYW5kIHRoZSBib2R5IG9mIHRoZSB3aGlsZSBzdGF0ZW1lbnQsIHJlc3BlY3RpdmVseS4gICovCisjZGVmaW5lIFdISUxFX0NPTkQoTk9ERSkJVFJFRV9PUEVSQU5EIChXSElMRV9TVE1UX0NIRUNLIChOT0RFKSwgMCkKKyNkZWZpbmUgV0hJTEVfQk9EWShOT0RFKQlUUkVFX09QRVJBTkQgKFdISUxFX1NUTVRfQ0hFQ0sgKE5PREUpLCAxKQorCisvKiBET19TVE1UIGFjY2Vzc29ycy4gVGhlc2UgZ2l2ZSBhY2Nlc3MgdG8gdGhlIGNvbmRpdGlvbiBvZiB0aGUgZG8KKyAgIHN0YXRlbWVudCBhbmQgdGhlIGJvZHkgb2YgdGhlIGRvIHN0YXRlbWVudCwgcmVzcGVjdGl2ZWx5LiAgKi8KKyNkZWZpbmUgRE9fQ09ORChOT0RFKQkJVFJFRV9PUEVSQU5EIChET19TVE1UX0NIRUNLIChOT0RFKSwgMCkKKyNkZWZpbmUgRE9fQk9EWShOT0RFKQkJVFJFRV9PUEVSQU5EIChET19TVE1UX0NIRUNLIChOT0RFKSwgMSkKKworLyogRk9SX1NUTVQgYWNjZXNzb3JzLiBUaGVzZSBnaXZlIGFjY2VzcyB0byB0aGUgaW5pdCBzdGF0ZW1lbnQsCisgICBjb25kaXRpb24sIHVwZGF0ZSBleHByZXNzaW9uLCBhbmQgYm9keSBvZiB0aGUgZm9yIHN0YXRlbWVudCwKKyAgIHJlc3BlY3RpdmVseS4gICovCisjZGVmaW5lIEZPUl9JTklUX1NUTVQoTk9ERSkJVFJFRV9PUEVSQU5EIChGT1JfU1RNVF9DSEVDSyAoTk9ERSksIDApCisjZGVmaW5lIEZPUl9DT05EKE5PREUpCQlUUkVFX09QRVJBTkQgKEZPUl9TVE1UX0NIRUNLIChOT0RFKSwgMSkKKyNkZWZpbmUgRk9SX0VYUFIoTk9ERSkJCVRSRUVfT1BFUkFORCAoRk9SX1NUTVRfQ0hFQ0sgKE5PREUpLCAyKQorI2RlZmluZSBGT1JfQk9EWShOT0RFKQkJVFJFRV9PUEVSQU5EIChGT1JfU1RNVF9DSEVDSyAoTk9ERSksIDMpCisKKyNkZWZpbmUgU1dJVENIX1NUTVRfQ09ORChOT0RFKQlUUkVFX09QRVJBTkQgKFNXSVRDSF9TVE1UX0NIRUNLIChOT0RFKSwgMCkKKyNkZWZpbmUgU1dJVENIX1NUTVRfQk9EWShOT0RFKQlUUkVFX09QRVJBTkQgKFNXSVRDSF9TVE1UX0NIRUNLIChOT0RFKSwgMSkKKyNkZWZpbmUgU1dJVENIX1NUTVRfVFlQRShOT0RFKQlUUkVFX09QRVJBTkQgKFNXSVRDSF9TVE1UX0NIRUNLIChOT0RFKSwgMikKKworLyogU1RNVF9FWFBSIGFjY2Vzc29yLiAgKi8KKyNkZWZpbmUgU1RNVF9FWFBSX1NUTVQoTk9ERSkJVFJFRV9PUEVSQU5EIChTVE1UX0VYUFJfQ0hFQ0sgKE5PREUpLCAwKQorCisvKiBFWFBSX1NUTVQgYWNjZXNzb3IuIFRoaXMgZ2l2ZXMgdGhlIGV4cHJlc3Npb24gYXNzb2NpYXRlZCB3aXRoIGFuCisgICBleHByZXNzaW9uIHN0YXRlbWVudC4gICovCisjZGVmaW5lIEVYUFJfU1RNVF9FWFBSKE5PREUpCVRSRUVfT1BFUkFORCAoRVhQUl9TVE1UX0NIRUNLIChOT0RFKSwgMCkKKworLyogVHJ1ZSBpZiB0aGlzIFRBUkdFVF9FWFBSIHdhcyBjcmVhdGVkIGJ5IGJ1aWxkX2NwbHVzX25ldywgYW5kIHNvIHdlIGNhbgorICAgZGlzY2FyZCBpdCBpZiBpdCBpc24ndCB1c2VmdWwuICAqLworI2RlZmluZSBUQVJHRVRfRVhQUl9JTVBMSUNJVF9QKE5PREUpIFwKKyAgVFJFRV9MQU5HX0ZMQUdfMCAoVEFSR0VUX0VYUFJfQ0hFQ0sgKE5PREUpKQorCisvKiBUcnVlIGlmIHRoaXMgVEFSR0VUX0VYUFIgaXMgdGhlIHJlc3VsdCBvZiBsaXN0LWluaXRpYWxpemF0aW9uIG9mIGEKKyAgIHRlbXBvcmFyeS4gICovCisjZGVmaW5lIFRBUkdFVF9FWFBSX0xJU1RfSU5JVF9QKE5PREUpIFwKKyAgVFJFRV9MQU5HX0ZMQUdfMSAoVEFSR0VUX0VYUFJfQ0hFQ0sgKE5PREUpKQorCisvKiBUcnVlIGlmIHRoaXMgVEFSR0VUX0VYUFIgZXhwcmVzc2VzIGRpcmVjdC1pbml0aWFsaXphdGlvbiBvZiBhbiBvYmplY3QKKyAgIHRvIGJlIG5hbWVkIGxhdGVyLiAgKi8KKyNkZWZpbmUgVEFSR0VUX0VYUFJfRElSRUNUX0lOSVRfUChOT0RFKSBcCisgIFRSRUVfTEFOR19GTEFHXzIgKFRBUkdFVF9FWFBSX0NIRUNLIChOT0RFKSkKKworLyogVHJ1ZSBpZiBFWFBSIGV4cHJlc3NlcyBkaXJlY3QtaW5pdGlhbGl6YXRpb24gb2YgYSBUWVBFLiAgKi8KKyNkZWZpbmUgRElSRUNUX0lOSVRfRVhQUl9QKFRZUEUsRVhQUikJCQkJCVwKKyAgKFRSRUVfQ09ERSAoRVhQUikgPT0gVEFSR0VUX0VYUFIgJiYgVFJFRV9MQU5HX0ZMQUdfMiAoRVhQUikJCVwKKyAgICYmIHNhbWVfdHlwZV9pZ25vcmluZ190b3BfbGV2ZWxfcXVhbGlmaWVyc19wIChUWVBFLCBUUkVFX1RZUEUgKEVYUFIpKSkKKworLyogQW4gZW51bWVyYXRpb24gb2YgdGhlIGtpbmQgb2YgdGFncyB0aGF0IEMrKyBhY2NlcHRzLiAgKi8KK2VudW0gdGFnX3R5cGVzIHsKKyAgbm9uZV90eXBlID0gMCwgLyogTm90IGEgdGFnIHR5cGUuICAqLworICByZWNvcmRfdHlwZSwgICAvKiAic3RydWN0IiB0eXBlcy4gICovCisgIGNsYXNzX3R5cGUsICAgIC8qICJjbGFzcyIgdHlwZXMuICAqLworICB1bmlvbl90eXBlLCAgICAvKiAidW5pb24iIHR5cGVzLiAgKi8KKyAgZW51bV90eXBlLCAgICAgLyogImVudW0iIHR5cGVzLiAgKi8KKyAgdHlwZW5hbWVfdHlwZSAgLyogInR5cGVuYW1lIiB0eXBlcy4gICovCit9OworCisvKiBUaGUgdmFyaW91cyBraW5kcyBvZiBsdmFsdWVzIHdlIGRpc3Rpbmd1aXNoLiAgKi8KK2VudW0gY3BfbHZhbHVlX2tpbmRfZmxhZ3MgeworICBjbGtfbm9uZSA9IDAsICAgICAvKiBUaGluZ3MgdGhhdCBhcmUgbm90IGFuIGx2YWx1ZS4gICovCisgIGNsa19vcmRpbmFyeSA9IDEsIC8qIEFuIG9yZGluYXJ5IGx2YWx1ZS4gICovCisgIGNsa19ydmFsdWVyZWYgPSAyLC8qIEFuIHJ2YWx1ZSBmb3JtZWQgdXNpbmcgYW4gcnZhbHVlIHJlZmVyZW5jZSAqLworICBjbGtfY2xhc3MgPSA0LCAgICAvKiBBbiBydmFsdWUgb2YgY2xhc3MtdHlwZS4gICovCisgIGNsa19iaXRmaWVsZCA9IDgsIC8qIEFuIGx2YWx1ZSBmb3IgYSBiaXQtZmllbGQuICAqLworICBjbGtfcGFja2VkID0gMTYgICAvKiBBbiBsdmFsdWUgZm9yIGEgcGFja2VkIGZpZWxkLiAgKi8KK307CisKKy8qIFRoaXMgdHlwZSBpcyB1c2VkIGZvciBwYXJhbWV0ZXJzIGFuZCB2YXJpYWJsZXMgd2hpY2ggaG9sZAorICAgY29tYmluYXRpb25zIG9mIHRoZSBmbGFncyBpbiBlbnVtIGNwX2x2YWx1ZV9raW5kX2ZsYWdzLiAgKi8KK3R5cGVkZWYgaW50IGNwX2x2YWx1ZV9raW5kOworCisvKiBWYXJpb3VzIGtpbmRzIG9mIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uLCBpbnN0YW50aWF0aW9uLCBldGMuICAqLwordHlwZWRlZiBlbnVtIHRtcGxfc3BlY19raW5kIHsKKyAgdHNrX25vbmUsCQkgICAvKiBOb3QgYSB0ZW1wbGF0ZSBhdCBhbGwuICAqLworICB0c2tfaW52YWxpZF9tZW1iZXJfc3BlYywgLyogQW4gZXhwbGljaXQgbWVtYmVyIHRlbXBsYXRlCisJCQkgICAgICBzcGVjaWFsaXphdGlvbiwgYnV0IHRoZSBlbmNsb3NpbmcKKwkJCSAgICAgIGNsYXNzZXMgaGF2ZSBub3QgYWxsIGJlZW4gZXhwbGljaXRseQorCQkJICAgICAgc3BlY2lhbGl6ZWQuICAqLworICB0c2tfaW52YWxpZF9leHBsX2luc3QsICAgLyogQW4gZXhwbGljaXQgaW5zdGFudGlhdGlvbiBjb250YWluaW5nCisJCQkgICAgICB0ZW1wbGF0ZSBwYXJhbWV0ZXIgbGlzdHMuICAqLworICB0c2tfZXhjZXNzaXZlX3Bhcm1zLAkgICAvKiBBIHRlbXBsYXRlIGRlY2xhcmF0aW9uIHdpdGggdG9vIG1hbnkKKwkJCSAgICAgIHRlbXBsYXRlIHBhcmFtZXRlciBsaXN0cy4gICovCisgIHRza19pbnN1ZmZpY2llbnRfcGFybXMsICAvKiBBIHRlbXBsYXRlIGRlY2xhcmF0aW9uIHdpdGggdG9vIGZldworCQkJICAgICAgcGFyYW1ldGVyIGxpc3RzLiAgKi8KKyAgdHNrX3RlbXBsYXRlLAkJICAgLyogQSB0ZW1wbGF0ZSBkZWNsYXJhdGlvbi4gICovCisgIHRza19leHBsX3NwZWMsCSAgIC8qIEFuIGV4cGxpY2l0IHNwZWNpYWxpemF0aW9uLiAgKi8KKyAgdHNrX2V4cGxfaW5zdAkJICAgLyogQW4gZXhwbGljaXQgaW5zdGFudGlhdGlvbi4gICovCit9IHRtcGxfc3BlY19raW5kOworCisvKiBUaGUgdmFyaW91cyBraW5kcyBvZiBhY2Nlc3MuICBCSU5GT19BQ0NFU1MgZGVwZW5kcyBvbiB0aGVzZSBiZWluZworICAgdHdvIGJpdCBxdWFudGl0aWVzLiAgVGhlIG51bWVyaWNhbCB2YWx1ZXMgYXJlIGltcG9ydGFudDsgdGhleSBhcmUKKyAgIHVzZWQgdG8gaW5pdGlhbGl6ZSBSVFRJIGRhdGEgc3RydWN0dXJlcywgc28gY2hhbmdpbmcgdGhlbSBjaGFuZ2VzCisgICB0aGUgQUJJLiAgKi8KK3R5cGVkZWYgZW51bSBhY2Nlc3Nfa2luZCB7CisgIGFrX25vbmUgPSAwLAkJICAgLyogSW5hY2Nlc3NpYmxlLiAgKi8KKyAgYWtfcHVibGljID0gMSwJICAgLyogQWNjZXNzaWJsZSwgYXMgYSBgcHVibGljJyB0aGluZy4gICovCisgIGFrX3Byb3RlY3RlZCA9IDIsCSAgIC8qIEFjY2Vzc2libGUsIGFzIGEgYHByb3RlY3RlZCcgdGhpbmcuICAqLworICBha19wcml2YXRlID0gMwkgICAvKiBBY2Nlc3NpYmxlLCBhcyBhIGBwcml2YXRlJyB0aGluZy4gICovCit9IGFjY2Vzc19raW5kOworCisvKiBUaGUgdmFyaW91cyBraW5kcyBvZiBzcGVjaWFsIGZ1bmN0aW9ucy4gIElmIHlvdSBhZGQgdG8gdGhpcyBsaXN0LAorICAgeW91IHNob3VsZCB1cGRhdGUgc3BlY2lhbF9mdW5jdGlvbl9wIGFzIHdlbGwuICAqLwordHlwZWRlZiBlbnVtIHNwZWNpYWxfZnVuY3Rpb25fa2luZCB7CisgIHNma19ub25lID0gMCwJCSAgIC8qIE5vdCBhIHNwZWNpYWwgZnVuY3Rpb24uICBUaGlzIGVudW1lcmFsCisJCQkgICAgICBtdXN0IGhhdmUgdmFsdWUgemVybzsgc2VlCisJCQkgICAgICBzcGVjaWFsX2Z1bmN0aW9uX3AuICAqLworICBzZmtfY29uc3RydWN0b3IsCSAgIC8qIEEgY29uc3RydWN0b3IuICAqLworICBzZmtfY29weV9jb25zdHJ1Y3RvciwgICAgLyogQSBjb3B5IGNvbnN0cnVjdG9yLiAgKi8KKyAgc2ZrX21vdmVfY29uc3RydWN0b3IsICAgIC8qIEEgbW92ZSBjb25zdHJ1Y3Rvci4gICovCisgIHNma19hc3NpZ25tZW50X29wZXJhdG9yLCAvKiBBbiBhc3NpZ25tZW50IG9wZXJhdG9yLiAgKi8KKyAgc2ZrX2Rlc3RydWN0b3IsCSAgIC8qIEEgZGVzdHJ1Y3Rvci4gICovCisgIHNma19jb21wbGV0ZV9kZXN0cnVjdG9yLCAvKiBBIGRlc3RydWN0b3IgZm9yIGNvbXBsZXRlIG9iamVjdHMuICAqLworICBzZmtfYmFzZV9kZXN0cnVjdG9yLCAgICAgLyogQSBkZXN0cnVjdG9yIGZvciBiYXNlIHN1Ym9iamVjdHMuICAqLworICBzZmtfZGVsZXRpbmdfZGVzdHJ1Y3RvciwgLyogQSBkZXN0cnVjdG9yIGZvciBjb21wbGV0ZSBvYmplY3RzIHRoYXQKKwkJCSAgICAgIGRlbGV0ZXMgdGhlIG9iamVjdCBhZnRlciBpdCBoYXMgYmVlbgorCQkJICAgICAgZGVzdHJveWVkLiAgKi8KKyAgc2ZrX2NvbnZlcnNpb24JICAgLyogQSBjb252ZXJzaW9uIG9wZXJhdG9yLiAgKi8KK30gc3BlY2lhbF9mdW5jdGlvbl9raW5kOworCisvKiBUaGUgdmFyaW91cyBraW5kcyBvZiBsaW5rYWdlLiAgRnJvbSBbYmFzaWMubGlua10sCisKKyAgICAgIEEgbmFtZSBpcyBzYWlkIHRvIGhhdmUgbGlua2FnZSB3aGVuIGl0IG1pZ2h0IGRlbm90ZSB0aGUgc2FtZQorICAgICAgb2JqZWN0LCByZWZlcmVuY2UsIGZ1bmN0aW9uLCB0eXBlLCB0ZW1wbGF0ZSwgbmFtZXNwYWNlIG9yIHZhbHVlCisgICAgICBhcyBhIG5hbWUgaW50cm9kdWNlZCBpbiBhbm90aGVyIHNjb3BlOgorCisgICAgICAtLSBXaGVuIGEgbmFtZSBoYXMgZXh0ZXJuYWwgbGlua2FnZSwgdGhlIGVudGl0eSBpdCBkZW5vdGVzIGNhbgorCSBiZSByZWZlcnJlZCB0byBmcm9tIHNjb3BlcyBvZiBvdGhlciB0cmFuc2xhdGlvbiB1bml0cyBvciBmcm9tCisJIG90aGVyIHNjb3BlcyBvZiB0aGUgc2FtZSB0cmFuc2xhdGlvbiB1bml0LgorCisgICAgICAtLSBXaGVuIGEgbmFtZSBoYXMgaW50ZXJuYWwgbGlua2FnZSwgdGhlIGVudGl0eSBpdCBkZW5vdGVzIGNhbgorCSBiZSByZWZlcnJlZCB0byBieSBuYW1lcyBmcm9tIG90aGVyIHNjb3BlcyBpbiB0aGUgc2FtZQorCSB0cmFuc2xhdGlvbiB1bml0LgorCisgICAgICAtLSBXaGVuIGEgbmFtZSBoYXMgbm8gbGlua2FnZSwgdGhlIGVudGl0eSBpdCBkZW5vdGVzIGNhbm5vdCBiZQorCSByZWZlcnJlZCB0byBieSBuYW1lcyBmcm9tIG90aGVyIHNjb3Blcy4gICovCisKK3R5cGVkZWYgZW51bSBsaW5rYWdlX2tpbmQgeworICBsa19ub25lLAkJCS8qIE5vIGxpbmthZ2UuICAqLworICBsa19pbnRlcm5hbCwJCQkvKiBJbnRlcm5hbCBsaW5rYWdlLiAgKi8KKyAgbGtfZXh0ZXJuYWwJCQkvKiBFeHRlcm5hbCBsaW5rYWdlLiAgKi8KK30gbGlua2FnZV9raW5kOworCisvKiBCaXRtYXNrIGZsYWdzIHRvIGNvbnRyb2wgdHlwZSBzdWJzdGl0dXRpb24uICAqLworZW51bSB0c3Vic3RfZmxhZ3MgeworICB0Zl9ub25lID0gMCwJCQkgLyogbm90aGluZyBzcGVjaWFsICovCisgIHRmX2Vycm9yID0gMSA8PCAwLAkJIC8qIGdpdmUgZXJyb3IgbWVzc2FnZXMgICovCisgIHRmX3dhcm5pbmcgPSAxIDw8IDEsCSAJIC8qIGdpdmUgd2FybmluZ3MgdG9vICAqLworICB0Zl9pZ25vcmVfYmFkX3F1YWxzID0gMSA8PCAyLAkgLyogaWdub3JlIGJhZCBjdnIgcXVhbGlmaWVycyAqLworICB0Zl9rZWVwX3R5cGVfZGVjbCA9IDEgPDwgMywJIC8qIHJldGFpbiB0eXBlZGVmIHR5cGUgZGVjbHMKKwkJCQkgICAgKG1ha2VfdHlwZW5hbWVfdHlwZSB1c2UpICovCisgIHRmX3B0cm1lbV9vayA9IDEgPDwgNCwJIC8qIHBvaW50ZXJzIHRvIG1lbWJlciBvayAoaW50ZXJuYWwKKwkJCQkgICAgaW5zdGFudGlhdGVfdHlwZSB1c2UpICovCisgIHRmX3VzZXIgPSAxIDw8IDUsCQkgLyogZm91bmQgdGVtcGxhdGUgbXVzdCBiZSBhIHVzZXIgdGVtcGxhdGUKKwkJCQkgICAgKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyB1c2UpICovCisgIHRmX2NvbnYgPSAxIDw8IDYsCQkgLyogV2UgYXJlIGRldGVybWluaW5nIHdoYXQga2luZCBvZgorCQkJCSAgICBjb252ZXJzaW9uIG1pZ2h0IGJlIHBlcm1pc3NpYmxlLAorCQkJCSAgICBub3QgYWN0dWFsbHkgcGVyZm9ybWluZyB0aGUKKwkJCQkgICAgY29udmVyc2lvbi4gICovCisgIHRmX25vX2FjY2Vzc19jb250cm9sID0gMSA8PCA3LCAvKiBEbyBub3QgcGVyZm9ybSBhY2Nlc3MgY2hlY2tzLCBldmVuCisJCQkJICAgIHdoZW4gaXNzdWluZyBvdGhlciBlcnJvcnMuICAgKi8KKyAgLyogRG8gbm90IGluc3RhbnRpYXRlIGNsYXNzZXMgKHVzZWQgYnkgY291bnRfbm9uX2RlZmF1bHRfdGVtcGxhdGVfYXJncykuICovCisgIHRmX25vX2NsYXNzX2luc3RhbnRpYXRpb25zID0gMSA8PCA4LAorICAvKiBDb252ZW5pZW50IHN1YnN0aXR1dGlvbiBmbGFncyBjb21iaW5hdGlvbnMuICAqLworICB0Zl93YXJuaW5nX29yX2Vycm9yID0gdGZfd2FybmluZyB8IHRmX2Vycm9yCit9OworCisvKiBUaGlzIHR5cGUgaXMgdXNlZCBmb3IgcGFyYW1ldGVycyBhbmQgdmFyaWFibGVzIHdoaWNoIGhvbGQKKyAgIGNvbWJpbmF0aW9ucyBvZiB0aGUgZmxhZ3MgaW4gZW51bSB0c3Vic3RfZmxhZ3MuICAqLwordHlwZWRlZiBpbnQgdHN1YnN0X2ZsYWdzX3Q7CisKKy8qIFRoZSBraW5kIG9mIGNoZWNraW5nIHdlIGNhbiBkbyBsb29raW5nIGluIGEgY2xhc3MgaGllcmFyY2h5LiAgKi8KK2VudW0gYmFzZV9hY2Nlc3NfZmxhZ3MgeworICBiYV9hbnkgPSAwLCAgLyogRG8gbm90IGNoZWNrIGFjY2VzcywgYWxsb3cgYW4gYW1iaWd1b3VzIGJhc2UsCisJCSAgICAgIHByZWZlciBhIG5vbi12aXJ0dWFsIGJhc2UgKi8KKyAgYmFfdW5pcXVlID0gMSA8PCAwLCAgLyogTXVzdCBiZSBhIHVuaXF1ZSBiYXNlLiAgKi8KKyAgYmFfY2hlY2tfYml0ID0gMSA8PCAxLCAgIC8qIENoZWNrIGFjY2Vzcy4gICovCisgIGJhX2NoZWNrID0gYmFfdW5pcXVlIHwgYmFfY2hlY2tfYml0LAorICBiYV9pZ25vcmVfc2NvcGUgPSAxIDw8IDIsIC8qIElnbm9yZSBhY2Nlc3MgYWxsb3dlZCBieSBsb2NhbCBzY29wZS4gICovCisgIGJhX3F1aWV0ID0gMSA8PCAzICAgICAvKiBEbyBub3QgaXNzdWUgZXJyb3IgbWVzc2FnZXMuICAqLworfTsKKworLyogVGhpcyB0eXBlIGlzIHVzZWQgZm9yIHBhcmFtZXRlcnMgYW5kIHZhcmlhYmxlcyB3aGljaCBob2xkCisgICBjb21iaW5hdGlvbnMgb2YgdGhlIGZsYWdzIGluIGVudW0gYmFzZV9hY2Nlc3NfZmxhZ3MuICAqLwordHlwZWRlZiBpbnQgYmFzZV9hY2Nlc3M7CisKKy8qIFRoZSB2YXJpb3VzIGtpbmRzIG9mIGFjY2VzcyBjaGVjayBkdXJpbmcgcGFyc2luZy4gICovCit0eXBlZGVmIGVudW0gZGVmZXJyaW5nX2tpbmQgeworICBka19ub19kZWZlcnJlZCA9IDAsIC8qIENoZWNrIGFjY2VzcyBpbW1lZGlhdGVseSAqLworICBka19kZWZlcnJlZCA9IDEsICAgIC8qIERlZmVycmVkIGNoZWNrICovCisgIGRrX25vX2NoZWNrID0gMiAgICAgLyogTm8gYWNjZXNzIGNoZWNrICovCit9IGRlZmVycmluZ19raW5kOworCisvKiBUaGUga2luZCBvZiBiYXNlIHdlIGNhbiBmaW5kLCBsb29raW5nIGluIGEgY2xhc3MgaGllcmFyY2h5LgorICAgVmFsdWVzIDwwIGluZGljYXRlIHdlIGZhaWxlZC4gICovCit0eXBlZGVmIGVudW0gYmFzZV9raW5kIHsKKyAgYmtfaW5hY2Nlc3NpYmxlID0gLTMsICAgLyogVGhlIGJhc2UgaXMgaW5hY2Nlc3NpYmxlICovCisgIGJrX2FtYmlnID0gLTIsCSAgLyogVGhlIGJhc2UgaXMgYW1iaWd1b3VzICovCisgIGJrX25vdF9iYXNlID0gLTEsCSAgLyogSXQgaXMgbm90IGEgYmFzZSAqLworICBia19zYW1lX3R5cGUgPSAwLAkgIC8qIEl0IGlzIHRoZSBzYW1lIHR5cGUgKi8KKyAgYmtfcHJvcGVyX2Jhc2UgPSAxLAkgIC8qIEl0IGlzIGEgcHJvcGVyIGJhc2UgKi8KKyAgYmtfdmlhX3ZpcnR1YWwgPSAyCSAgLyogSXQgaXMgYSBwcm9wZXIgYmFzZSwgYnV0IHZpYSBhIHZpcnR1YWwKKwkJCSAgICAgcGF0aC4gVGhpcyBtaWdodCBub3QgYmUgdGhlIGNhbm9uaWNhbAorCQkJICAgICBiaW5mby4gICovCit9IGJhc2Vfa2luZDsKKworLyogTm9kZSBmb3IgInBvaW50ZXIgdG8gKHZpcnR1YWwpIGZ1bmN0aW9uIi4KKyAgIFRoaXMgbWF5IGJlIGRpc3RpbmN0IGZyb20gcHRyX3R5cGVfbm9kZSBzbyBnZGIgY2FuIGRpc3Rpbmd1aXNoIHRoZW0uICAqLworI2RlZmluZSB2ZnVuY19wdHJfdHlwZV9ub2RlICB2dGFibGVfZW50cnlfdHlwZQorCisKKy8qIEZvciBidWlsZGluZyBjYWxscyB0byBgZGVsZXRlJy4gICovCitleHRlcm4gR1RZKCgpKSB0cmVlIGludGVnZXJfdHdvX25vZGU7CitleHRlcm4gR1RZKCgpKSB0cmVlIGludGVnZXJfdGhyZWVfbm9kZTsKKworLyogVGhlIG51bWJlciBvZiBmdW5jdGlvbiBib2RpZXMgd2hpY2ggd2UgYXJlIGN1cnJlbnRseSBwcm9jZXNzaW5nLgorICAgKFplcm8gaWYgd2UgYXJlIGF0IG5hbWVzcGFjZSBzY29wZSwgb25lIGluc2lkZSB0aGUgYm9keSBvZiBhCisgICBmdW5jdGlvbiwgdHdvIGluc2lkZSB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uIGluIGEgbG9jYWwgY2xhc3MsIGV0Yy4pICAqLworZXh0ZXJuIGludCBmdW5jdGlvbl9kZXB0aDsKKworLyogSW4gcGFyc2VyLmMuICAqLworCisvKiBOb256ZXJvIGlmIHdlIGFyZSBwYXJzaW5nIGFuIHVuZXZhbHVhdGVkIG9wZXJhbmQ6IGFuIG9wZXJhbmQgdG8KKyAgIHNpemVvZiwgdHlwZW9mLCBvciBhbGlnbm9mLiAgVGhpcyBpcyBhIGNvdW50IHNpbmNlIG9wZXJhbmRzIHRvCisgICBzaXplb2YgY2FuIGJlIG5lc3RlZC4gICovCisKK2V4dGVybiBpbnQgY3BfdW5ldmFsdWF0ZWRfb3BlcmFuZDsKKworLyogaW4gcHQuYyAgKi8KKworLyogVGhlc2UgdmFsdWVzIGFyZSB1c2VkIGZvciB0aGUgYFNUUklDVCcgcGFyYW1ldGVyIHRvIHR5cGVfdW5pZmljYXRpb24gYW5kCisgICBmbl90eXBlX3VuaWZpY2F0aW9uLiAgVGhlaXIgbWVhbmluZ3MgYXJlIGRlc2NyaWJlZCB3aXRoIHRoZQorICAgZG9jdW1lbnRhdGlvbiBmb3IgZm5fdHlwZV91bmlmaWNhdGlvbi4gICovCisKK3R5cGVkZWYgZW51bSB1bmlmaWNhdGlvbl9raW5kX3QgeworICBERURVQ0VfQ0FMTCwKKyAgREVEVUNFX0NPTlYsCisgIERFRFVDRV9FWEFDVAorfSB1bmlmaWNhdGlvbl9raW5kX3Q7CisKKy8qIGluIGNsYXNzLmMgKi8KKworZXh0ZXJuIGludCBjdXJyZW50X2NsYXNzX2RlcHRoOworCisvKiBBbiBhcnJheSBvZiBhbGwgbG9jYWwgY2xhc3NlcyBwcmVzZW50IGluIHRoaXMgdHJhbnNsYXRpb24gdW5pdCwgaW4KKyAgIGRlY2xhcmF0aW9uIG9yZGVyLiAgKi8KK2V4dGVybiBHVFkoKCkpIFZFQyh0cmVlLGdjKSAqbG9jYWxfY2xhc3NlczsKKwwKKy8qIEhlcmUncyB3aGVyZSB3ZSBjb250cm9sIGhvdyBuYW1lIG1hbmdsaW5nIHRha2VzIHBsYWNlLiAgKi8KKworLyogQ2Fubm90IHVzZSAnJCcgdXAgZnJvbnQsIGJlY2F1c2UgdGhpcyBjb25mdXNlcyBnZGIKKyAgIChuYW1lcyBiZWdpbm5pbmcgd2l0aCAnJCcgYXJlIGdkYi1sb2NhbCBpZGVudGlmaWVycykuCisKKyAgIE5vdGUgdGhhdCBhbGwgZm9ybXMgaW4gd2hpY2ggdGhlICckJyBpcyBzaWduaWZpY2FudCBhcmUgbG9uZyBlbm91Z2gKKyAgIGZvciBkaXJlY3QgaW5kZXhpbmcgKG1lYW5pbmcgdGhhdCBpZiB3ZSBrbm93IHRoZXJlIGlzIGEgJyQnCisgICBhdCBhIHBhcnRpY3VsYXIgbG9jYXRpb24sIHdlIGNhbiBpbmRleCBpbnRvIHRoZSBzdHJpbmcgYXQKKyAgIGFueSBvdGhlciBsb2NhdGlvbiB0aGF0IHByb3ZpZGVzIGRpc3Rpbmd1aXNoaW5nIGNoYXJhY3RlcnMpLiAgKi8KKworLyogRGVmaW5lIE5PX0RPVF9JTl9MQUJFTCBpbiB5b3VyIGZhdm9yaXRlIHRtIGZpbGUgaWYgeW91ciBhc3NlbWJsZXIKKyAgIGRvZXNuJ3QgYWxsb3cgJy4nIGluIHN5bWJvbCBuYW1lcy4gICovCisjaWZuZGVmIE5PX0RPVF9JTl9MQUJFTAorCisjZGVmaW5lIEpPSU5FUiAnLicKKworI2RlZmluZSBBVVRPX1RFTVBfTkFNRSAiXy50bXBfIgorI2RlZmluZSBWRklFTERfQkFTRSAiLnZmIgorI2RlZmluZSBWRklFTERfTkFNRSAiX3ZwdHIuIgorI2RlZmluZSBWRklFTERfTkFNRV9GT1JNQVQgIl92cHRyLiVzIgorCisjZGVmaW5lIEFOT05fQUdHUk5BTUVfRk9STUFUICIuXyVkIgorCisjZWxzZSAvKiBOT19ET1RfSU5fTEFCRUwgKi8KKworI2lmbmRlZiBOT19ET0xMQVJfSU5fTEFCRUwKKworI2RlZmluZSBKT0lORVIgJyQnCisKKyNkZWZpbmUgQVVUT19URU1QX05BTUUgIl8kdG1wXyIKKyNkZWZpbmUgVkZJRUxEX0JBU0UgIiR2ZiIKKyNkZWZpbmUgVkZJRUxEX05BTUUgIl92cHRyJCIKKyNkZWZpbmUgVkZJRUxEX05BTUVfRk9STUFUICJfdnB0ciQlcyIKKyNkZWZpbmUgQU5PTl9BR0dSTkFNRV9GT1JNQVQgIiRfJWQiCisKKyNlbHNlIC8qIE5PX0RPTExBUl9JTl9MQUJFTCAqLworCisjZGVmaW5lIElOX0NIQVJHRV9OQU1FICJfX2luX2NocmciCisjZGVmaW5lIEFVVE9fVEVNUF9OQU1FICJfX3RtcF8iCisjZGVmaW5lIFRFTVBfTkFNRV9QKElEX05PREUpIFwKKyAgKCFzdHJuY21wIChJREVOVElGSUVSX1BPSU5URVIgKElEX05PREUpLCBBVVRPX1RFTVBfTkFNRSwgXAorCSAgICAgc2l6ZW9mIChBVVRPX1RFTVBfTkFNRSkgLSAxKSkKKyNkZWZpbmUgVlRBQkxFX05BTUUgIl9fdnRfIgorI2RlZmluZSBWVEFCTEVfTkFNRV9QKElEX05PREUpIFwKKyAgKCFzdHJuY21wIChJREVOVElGSUVSX1BPSU5URVIgKElEX05PREUpLCBWVEFCTEVfTkFNRSwgXAorCSAgICAgc2l6ZW9mIChWVEFCTEVfTkFNRSkgLSAxKSkKKyNkZWZpbmUgVkZJRUxEX0JBU0UgIl9fdmZiIgorI2RlZmluZSBWRklFTERfTkFNRSAiX192cHRyXyIKKyNkZWZpbmUgVkZJRUxEX05BTUVfUChJRF9OT0RFKSBcCisgICghc3RybmNtcCAoSURFTlRJRklFUl9QT0lOVEVSIChJRF9OT0RFKSwgVkZJRUxEX05BTUUsIFwKKwkgICAgc2l6ZW9mIChWRklFTERfTkFNRSkgLSAxKSkKKyNkZWZpbmUgVkZJRUxEX05BTUVfRk9STUFUICJfX3ZwdHJfJXMiCisKKyNkZWZpbmUgQU5PTl9BR0dSTkFNRV9QUkVGSVggIl9fYW5vbl8iCisjZGVmaW5lIEFOT05fQUdHUk5BTUVfUChJRF9OT0RFKSBcCisgICghc3RybmNtcCAoSURFTlRJRklFUl9QT0lOVEVSIChJRF9OT0RFKSwgQU5PTl9BR0dSTkFNRV9QUkVGSVgsIFwKKwkgICAgIHNpemVvZiAoQU5PTl9BR0dSTkFNRV9QUkVGSVgpIC0gMSkpCisjZGVmaW5lIEFOT05fQUdHUk5BTUVfRk9STUFUICJfX2Fub25fJWQiCisKKyNlbmRpZgkvKiBOT19ET0xMQVJfSU5fTEFCRUwgKi8KKyNlbmRpZgkvKiBOT19ET1RfSU5fTEFCRUwgKi8KKworI2RlZmluZSBUSElTX05BTUUgInRoaXMiCisKKyNkZWZpbmUgSU5fQ0hBUkdFX05BTUUgIl9faW5fY2hyZyIKKworI2RlZmluZSBWVEJMX1BUUl9UWVBFCQkiX192dGJsX3B0cl90eXBlIgorI2RlZmluZSBWVEFCTEVfREVMVEFfTkFNRQkiX19kZWx0YSIKKyNkZWZpbmUgVlRBQkxFX1BGTl9OQU1FCQkiX19wZm4iCisKKyNkZWZpbmUgTEFNQkRBTkFNRV9QUkVGSVggIl9fbGFtYmRhIgorI2RlZmluZSBMQU1CREFOQU1FX0ZPUk1BVCBMQU1CREFOQU1FX1BSRUZJWCAiJWQiCisjZGVmaW5lIExBTUJEQU5BTUVfUChJRF9OT0RFKSBcCisgICghc3RybmNtcCAoSURFTlRJRklFUl9QT0lOVEVSIChJRF9OT0RFKSwgXAorICAgICAgICAgICAgIExBTUJEQU5BTUVfUFJFRklYLCBcCisJICAgICBzaXplb2YgKExBTUJEQU5BTUVfUFJFRklYKSAtIDEpKQorCisjaWYgIWRlZmluZWQoTk9fRE9MTEFSX0lOX0xBQkVMKSB8fCAhZGVmaW5lZChOT19ET1RfSU5fTEFCRUwpCisKKyNkZWZpbmUgVlRBQkxFX05BTUVfUChJRF9OT0RFKSAoSURFTlRJRklFUl9QT0lOVEVSIChJRF9OT0RFKVsxXSA9PSAndicgXAorICAmJiBJREVOVElGSUVSX1BPSU5URVIgKElEX05PREUpWzJdID09ICd0JyBcCisgICYmIElERU5USUZJRVJfUE9JTlRFUiAoSURfTk9ERSlbM10gPT0gSk9JTkVSKQorCisjZGVmaW5lIFRFTVBfTkFNRV9QKElEX05PREUpIFwKKyAgKCFzdHJuY21wIChJREVOVElGSUVSX1BPSU5URVIgKElEX05PREUpLCBBVVRPX1RFTVBfTkFNRSwgc2l6ZW9mIChBVVRPX1RFTVBfTkFNRSktMSkpCisjZGVmaW5lIFZGSUVMRF9OQU1FX1AoSURfTk9ERSkgXAorICAoIXN0cm5jbXAgKElERU5USUZJRVJfUE9JTlRFUiAoSURfTk9ERSksIFZGSUVMRF9OQU1FLCBzaXplb2YoVkZJRUxEX05BTUUpLTEpKQorCisvKiBGb3IgYW5vbnltb3VzIGFnZ3JlZ2F0ZSB0eXBlcywgd2UgbmVlZCBzb21lIHNvcnQgb2YgbmFtZSB0bworICAgaG9sZCBvbiB0by4gIEluIHByYWN0aWNlLCB0aGlzIHNob3VsZCBub3QgYXBwZWFyLCBidXQgaXQgc2hvdWxkCisgICBub3QgYmUgaGFybWZ1bCBpZiBpdCBkb2VzLiAgKi8KKyNkZWZpbmUgQU5PTl9BR0dSTkFNRV9QKElEX05PREUpIChJREVOVElGSUVSX1BPSU5URVIgKElEX05PREUpWzBdID09IEpPSU5FUiBcCisJCQkJICAmJiBJREVOVElGSUVSX1BPSU5URVIgKElEX05PREUpWzFdID09ICdfJykKKyNlbmRpZiAvKiAhZGVmaW5lZChOT19ET0xMQVJfSU5fTEFCRUwpIHx8ICFkZWZpbmVkKE5PX0RPVF9JTl9MQUJFTCkgKi8KKworDAorLyogTm9uemVybyBpZiB3ZSdyZSBkb25lIHBhcnNpbmcgYW5kIGludG8gZW5kLW9mLWZpbGUgYWN0aXZpdGllcy4gICovCisKK2V4dGVybiBpbnQgYXRfZW9mOworCisvKiBBIGxpc3Qgb2YgbmFtZXNwYWNlLXNjb3BlIG9iamVjdHMgd2hpY2ggaGF2ZSBjb25zdHJ1Y3RvcnMgb3IKKyAgIGRlc3RydWN0b3JzIHdoaWNoIHJlc2lkZSBpbiB0aGUgZ2xvYmFsIHNjb3BlLiAgVGhlIGRlY2wgaXMgc3RvcmVkCisgICBpbiB0aGUgVFJFRV9WQUxVRSBzbG90IGFuZCB0aGUgaW5pdGlhbGl6ZXIgaXMgc3RvcmVkIGluIHRoZQorICAgVFJFRV9QVVJQT1NFIHNsb3QuICAqLworZXh0ZXJuIEdUWSgoKSkgdHJlZSBzdGF0aWNfYWdncmVnYXRlczsKKworZW51bSBvdmVybG9hZF9mbGFncyB7IE5PX1NQRUNJQUwgPSAwLCBEVE9SX0ZMQUcsIFRZUEVOQU1FX0ZMQUcgfTsKKworLyogVGhlc2UgYXJlIHVzZXMgYXMgYml0cyBpbiBmbGFncyBwYXNzZWQgdG8gdmFyaW91cyBmdW5jdGlvbnMgdG8KKyAgIGNvbnRyb2wgdGhlaXIgYmVoYXZpb3IuICBEZXNwaXRlIHRoZSBMT09LVVBfIHByZWZpeCwgbWFueSBvZiB0aGVzZQorICAgZG8gbm90IGNvbnRyb2wgbmFtZSBsb29rdXAuICA/Pz8gRnVuY3Rpb25zIHVzaW5nIHRoZXNlIGZsYWdzIHNob3VsZAorICAgcHJvYmFibHkgYmUgbW9kaWZpZWQgdG8gYWNjZXB0IGV4cGxpY2l0IGJvb2xlYW4gZmxhZ3MgZm9yIHRoZQorICAgYmVoYXZpb3JzIHJlbGV2YW50IHRvIHRoZW0uICAqLworLyogQ2hlY2sgZm9yIGFjY2VzcyB2aW9sYXRpb25zLiAgKi8KKyNkZWZpbmUgTE9PS1VQX1BST1RFQ1QgKDEgPDwgMCkKKy8qIENvbXBsYWluIGlmIG5vIHN1aXRhYmxlIG1lbWJlciBmdW5jdGlvbiBtYXRjaGluZyB0aGUgYXJndW1lbnRzIGlzCisgICBmb3VuZC4gICovCisjZGVmaW5lIExPT0tVUF9DT01QTEFJTiAoMSA8PCAxKQorI2RlZmluZSBMT09LVVBfTk9STUFMIChMT09LVVBfUFJPVEVDVCB8IExPT0tVUF9DT01QTEFJTikKKy8qIEV2ZW4gaWYgdGhlIGZ1bmN0aW9uIGZvdW5kIGJ5IGxvb2t1cCBpcyBhIHZpcnR1YWwgZnVuY3Rpb24sIGl0CisgICBzaG91bGQgYmUgY2FsbGVkIGRpcmVjdGx5LiAgKi8KKyNkZWZpbmUgTE9PS1VQX05PTlZJUlRVQUwgKDEgPDwgMikKKy8qIE5vbi1jb252ZXJ0aW5nIChpLmUuLCAiZXhwbGljaXQiKSBjb25zdHJ1Y3RvcnMgYXJlIG5vdCB0cmllZC4gIFRoaXMgZmxhZworICAgaW5kaWNhdGVzIHRoYXQgd2UgYXJlIG5vdCBwZXJmb3JtaW5nIGRpcmVjdC1pbml0aWFsaXphdGlvbi4gICovCisjZGVmaW5lIExPT0tVUF9PTkxZQ09OVkVSVElORyAoMSA8PCAzKQorI2RlZmluZSBMT09LVVBfSU1QTElDSVQgKExPT0tVUF9OT1JNQUwgfCBMT09LVVBfT05MWUNPTlZFUlRJTkcpCisvKiBJZiBhIHRlbXBvcmFyeSBpcyBjcmVhdGVkLCBpdCBzaG91bGQgYmUgY3JlYXRlZCBzbyB0aGF0IGl0IGxpdmVzCisgICBhcyBsb25nIGFzIHRoZSBjdXJyZW50IHZhcmlhYmxlIGJpbmRpbmdzOyBvdGhlcndpc2UgaXQgb25seSBsaXZlcworICAgdW50aWwgdGhlIGVuZCBvZiB0aGUgY29tcGxldGUtZXhwcmVzc2lvbi4gIEl0IGFsc28gZm9yY2VzCisgICBkaXJlY3QtaW5pdGlhbGl6YXRpb24gaW4gY2FzZXMgd2hlcmUgb3RoZXIgcGFydHMgb2YgdGhlIGNvbXBpbGVyCisgICBoYXZlIGFscmVhZHkgZ2VuZXJhdGVkIGEgdGVtcG9yYXJ5LCBzdWNoIGFzIHJlZmVyZW5jZQorICAgaW5pdGlhbGl6YXRpb24gYW5kIHRoZSBjYXRjaCBwYXJhbWV0ZXIuICAqLworI2RlZmluZSBESVJFQ1RfQklORCAoMSA8PCA0KQorLyogVXNlci1kZWZpbmVkIGNvbnZlcnNpb25zIGFyZSBub3QgcGVybWl0dGVkLiAgKEJ1aWx0LWluIGNvbnZlcnNpb25zCisgICBhcmUgcGVybWl0dGVkLikgICovCisjZGVmaW5lIExPT0tVUF9OT19DT05WRVJTSU9OICgxIDw8IDUpCisvKiBUaGUgdXNlciBoYXMgZXhwbGljaXRseSBjYWxsZWQgYSBkZXN0cnVjdG9yLiAgKFRoZXJlZm9yZSwgd2UgZG8KKyAgIG5vdCBuZWVkIHRvIGNoZWNrIHRoYXQgdGhlIG9iamVjdCBpcyBub24tTlVMTCBiZWZvcmUgY2FsbGluZyB0aGUKKyAgIGRlc3RydWN0b3IuKSAgKi8KKyNkZWZpbmUgTE9PS1VQX0RFU1RSVUNUT1IgKDEgPDwgNikKKy8qIERvIG5vdCBwZXJtaXQgcmVmZXJlbmNlcyB0byBiaW5kIHRvIHRlbXBvcmFyaWVzLiAgKi8KKyNkZWZpbmUgTE9PS1VQX05PX1RFTVBfQklORCAoMSA8PCA3KQorLyogRG8gbm90IGFjY2VwdCBvYmplY3RzLCBhbmQgcG9zc2libHkgbmFtZXNwYWNlcy4gICovCisjZGVmaW5lIExPT0tVUF9QUkVGRVJfVFlQRVMgKDEgPDwgOCkKKy8qIERvIG5vdCBhY2NlcHQgb2JqZWN0cywgYW5kIHBvc3NpYmx5IHR5cGVzLiAgICovCisjZGVmaW5lIExPT0tVUF9QUkVGRVJfTkFNRVNQQUNFUyAoMSA8PCA5KQorLyogQWNjZXB0IHR5cGVzIG9yIG5hbWVzcGFjZXMuICAqLworI2RlZmluZSBMT09LVVBfUFJFRkVSX0JPVEggKExPT0tVUF9QUkVGRVJfVFlQRVMgfCBMT09LVVBfUFJFRkVSX05BTUVTUEFDRVMpCisvKiBSZXR1cm4gZnJpZW5kIGRlY2xhcmF0aW9ucyBhbmQgdW4tZGVjbGFyZWQgYnVpbHRpbiBmdW5jdGlvbnMuCisgICAoTm9ybWFsbHksIHRoZXNlIGVudGl0aWVzIGFyZSByZWdpc3RlcmVkIGluIHRoZSBzeW1ib2wgdGFibGUsIGJ1dAorICAgbm90IGZvdW5kIGJ5IGxvb2t1cC4pICAqLworI2RlZmluZSBMT09LVVBfSElEREVOIChMT09LVVBfUFJFRkVSX05BTUVTUEFDRVMgPDwgMSkKKy8qIFByZWZlciB0aGF0IHRoZSBsdmFsdWUgYmUgdHJlYXRlZCBhcyBhbiBydmFsdWUuICAqLworI2RlZmluZSBMT09LVVBfUFJFRkVSX1JWQUxVRSAoTE9PS1VQX0hJRERFTiA8PCAxKQorLyogV2UncmUgaW5zaWRlIGFuIGluaXQtbGlzdCwgc28gbmFycm93aW5nIGNvbnZlcnNpb25zIGFyZSBpbGwtZm9ybWVkLiAgKi8KKyNkZWZpbmUgTE9PS1VQX05PX05BUlJPV0lORyAoTE9PS1VQX1BSRUZFUl9SVkFMVUUgPDwgMSkKKy8qIEF2b2lkIHVzZXItZGVmaW5lZCBjb252ZXJzaW9ucyBmb3IgdGhlIGZpcnN0IHBhcmFtZXRlciBvZiBhIGNvcHkKKyAgIGNvbnN0cnVjdG9yLiAgKi8KKyNkZWZpbmUgTE9PS1VQX05PX0NPUFlfQ1RPUl9DT05WRVJTSU9OIChMT09LVVBfTk9fTkFSUk9XSU5HIDw8IDEpCisvKiBUaGlzIGlzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgb2YgYSBjb3B5IGNvbnN0cnVjdG9yLiAgKi8KKyNkZWZpbmUgTE9PS1VQX0NPUFlfUEFSTSAoTE9PS1VQX05PX0NPUFlfQ1RPUl9DT05WRVJTSU9OIDw8IDEpCisKKyNkZWZpbmUgTE9PS1VQX05BTUVTUEFDRVNfT05MWShGKSAgXAorICAoKChGKSAmIExPT0tVUF9QUkVGRVJfTkFNRVNQQUNFUykgJiYgISgoRikgJiBMT09LVVBfUFJFRkVSX1RZUEVTKSkKKyNkZWZpbmUgTE9PS1VQX1RZUEVTX09OTFkoRikgIFwKKyAgKCEoKEYpICYgTE9PS1VQX1BSRUZFUl9OQU1FU1BBQ0VTKSAmJiAoKEYpICYgTE9PS1VQX1BSRUZFUl9UWVBFUykpCisjZGVmaW5lIExPT0tVUF9RVUFMSUZJRVJTX09OTFkoRikgICAgICgoRikgJiBMT09LVVBfUFJFRkVSX0JPVEgpCisKKworLyogVGhlc2UgZmxhZ3MgYXJlIHVzZWQgYnkgdGhlIGNvbnZlcnNpb24gY29kZS4KKyAgIENPTlZfSU1QTElDSVQgICA6ICBQZXJmb3JtIGltcGxpY2l0IGNvbnZlcnNpb25zIChzdGFuZGFyZCBhbmQgdXNlci1kZWZpbmVkKS4KKyAgIENPTlZfU1RBVElDICAgICA6ICBQZXJmb3JtIHRoZSBleHBsaWNpdCBjb252ZXJzaW9ucyBmb3Igc3RhdGljX2Nhc3QuCisgICBDT05WX0NPTlNUICAgICAgOiAgUGVyZm9ybSB0aGUgZXhwbGljaXQgY29udmVyc2lvbnMgZm9yIGNvbnN0X2Nhc3QuCisgICBDT05WX1JFSU5URVJQUkVUOiAgUGVyZm9ybSB0aGUgZXhwbGljaXQgY29udmVyc2lvbnMgZm9yIHJlaW50ZXJwcmV0X2Nhc3QuCisgICBDT05WX1BSSVZBVEUgICAgOiAgUGVyZm9ybSB1cGNhc3RzIHRvIHByaXZhdGUgYmFzZXMuCisgICBDT05WX0ZPUkNFX1RFTVAgOiAgUmVxdWlyZSBhIG5ldyB0ZW1wb3Jhcnkgd2hlbiBjb252ZXJ0aW5nIHRvIHRoZSBzYW1lCisJCSAgICAgIGFnZ3JlZ2F0ZSB0eXBlLiAgKi8KKworI2RlZmluZSBDT05WX0lNUExJQ0lUICAgIDEKKyNkZWZpbmUgQ09OVl9TVEFUSUMgICAgICAyCisjZGVmaW5lIENPTlZfQ09OU1QgICAgICAgNAorI2RlZmluZSBDT05WX1JFSU5URVJQUkVUIDgKKyNkZWZpbmUgQ09OVl9QUklWQVRFCSAxNgorLyogI2RlZmluZSBDT05WX05PTkNPTlZFUlRJTkcgMzIgKi8KKyNkZWZpbmUgQ09OVl9GT1JDRV9URU1QICA2NAorI2RlZmluZSBDT05WX09MRF9DT05WRVJUIChDT05WX0lNUExJQ0lUIHwgQ09OVl9TVEFUSUMgfCBDT05WX0NPTlNUIFwKKwkJCSAgfCBDT05WX1JFSU5URVJQUkVUKQorI2RlZmluZSBDT05WX0NfQ0FTVCAgICAgIChDT05WX0lNUExJQ0lUIHwgQ09OVl9TVEFUSUMgfCBDT05WX0NPTlNUIFwKKwkJCSAgfCBDT05WX1JFSU5URVJQUkVUIHwgQ09OVl9QUklWQVRFIHwgQ09OVl9GT1JDRV9URU1QKQorCisvKiBVc2VkIGJ5IGJ1aWxkX2V4cHJfdHlwZV9jb252ZXJzaW9uIHRvIGluZGljYXRlIHdoaWNoIHR5cGVzIGFyZQorICAgYWNjZXB0YWJsZSBhcyBhcmd1bWVudHMgdG8gdGhlIGV4cHJlc3Npb24gdW5kZXIgY29uc2lkZXJhdGlvbi4gICovCisKKyNkZWZpbmUgV0FOVF9JTlQJMSAvKiBpbnRlZ2VyIHR5cGVzLCBpbmNsdWRpbmcgYm9vbCAqLworI2RlZmluZSBXQU5UX0ZMT0FUCTIgLyogZmxvYXRpbmcgcG9pbnQgdHlwZXMgKi8KKyNkZWZpbmUgV0FOVF9FTlVNCTQgLyogZW51bWVyYXRlZCB0eXBlcyAqLworI2RlZmluZSBXQU5UX1BPSU5URVIJOCAvKiBwb2ludGVyIHR5cGVzICovCisjZGVmaW5lIFdBTlRfTlVMTCAgICAgIDE2IC8qIG51bGwgcG9pbnRlciBjb25zdGFudCAqLworI2RlZmluZSBXQU5UX1ZFQ1RPUl9PUl9DT01QTEVYIDMyIC8qIHZlY3RvciBvciBjb21wbGV4IHR5cGVzICovCisjZGVmaW5lIFdBTlRfQVJJVEgJKFdBTlRfSU5UIHwgV0FOVF9GTE9BVCB8IFdBTlRfVkVDVE9SX09SX0NPTVBMRVgpCisKKy8qIFVzZWQgd2l0aCBjb21wdHlwZXMsIGFuZCByZWxhdGVkIGZ1bmN0aW9ucywgdG8gZ3VpZGUgdHlwZQorICAgY29tcGFyaXNvbi4gICovCisKKyNkZWZpbmUgQ09NUEFSRV9TVFJJQ1QJICAgICAgMCAvKiBKdXN0IGNoZWNrIGlmIHRoZSB0eXBlcyBhcmUgdGhlCisJCQkJICAgc2FtZS4gICovCisjZGVmaW5lIENPTVBBUkVfQkFTRQkgICAgICAxIC8qIENoZWNrIHRvIHNlZSBpZiB0aGUgc2Vjb25kIHR5cGUgaXMKKwkJCQkgICBkZXJpdmVkIGZyb20gdGhlIGZpcnN0LiAgKi8KKyNkZWZpbmUgQ09NUEFSRV9ERVJJVkVECSAgICAgIDIgLyogTGlrZSBDT01QQVJFX0JBU0UsIGJ1dCBpbgorCQkJCSAgIHJldmVyc2UuICAqLworI2RlZmluZSBDT01QQVJFX1JFREVDTEFSQVRJT04gNCAvKiBUaGUgY29tcGFyaXNvbiBpcyBiZWluZyBkb25lIHdoZW4KKwkJCQkgICBhbm90aGVyIGRlY2xhcmF0aW9uIG9mIGFuIGV4aXN0aW5nCisJCQkJICAgZW50aXR5IGlzIHNlZW4uICAqLworI2RlZmluZSBDT01QQVJFX1NUUlVDVFVSQUwgICAgOCAvKiBUaGUgY29tcGFyaXNvbiBpcyBpbnRlbmRlZCB0byBiZQorCQkJCSAgIHN0cnVjdHVyYWwuIFRoZSBhY3R1YWwgY29tcGFyaXNvbgorCQkJCSAgIHdpbGwgYmUgaWRlbnRpY2FsIHRvCisJCQkJICAgQ09NUEFSRV9TVFJJQ1QuICAqLworCisvKiBVc2VkIHdpdGggcHVzaF9vdmVybG9hZGVkX2RlY2wuICAqLworI2RlZmluZSBQVVNIX0dMT0JBTAkgICAgIDAgIC8qIFB1c2ggdGhlIERFQ0wgaW50byBuYW1lc3BhY2Ugc2NvcGUsCisJCQkJICAgcmVnYXJkbGVzcyBvZiB0aGUgY3VycmVudCBzY29wZS4gICovCisjZGVmaW5lIFBVU0hfTE9DQUwJICAgICAxICAvKiBQdXNoIHRoZSBERUNMIGludG8gdGhlIGN1cnJlbnQKKwkJCQkgICBzY29wZS4gICovCisjZGVmaW5lIFBVU0hfVVNJTkcJICAgICAyICAvKiBXZSBhcmUgcHVzaGluZyB0aGlzIERFQ0wgYXMgdGhlCisJCQkJICAgcmVzdWx0IG9mIGEgdXNpbmcgZGVjbGFyYXRpb24uICAqLworCisvKiBVc2VkIHdpdGggc3RhcnQgZnVuY3Rpb24uICAqLworI2RlZmluZSBTRl9ERUZBVUxUCSAgICAgMCAgLyogTm8gZmxhZ3MuICAqLworI2RlZmluZSBTRl9QUkVfUEFSU0VECSAgICAgMSAgLyogVGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGhhcworCQkJCSAgIGFscmVhZHkgYmVlbiBwYXJzZWQuICAqLworI2RlZmluZSBTRl9JTkNMQVNTX0lOTElORSAgICAyICAvKiBUaGUgZnVuY3Rpb24gaXMgYW4gaW5saW5lLCBkZWZpbmVkCisJCQkJICAgaW4gdGhlIGNsYXNzIGJvZHkuICAqLworCisvKiBVc2VkIHdpdGggc3RhcnRfZGVjbCdzIGluaXRpYWxpemVkIHBhcmFtZXRlci4gICovCisjZGVmaW5lIFNEX1VOSU5JVElBTElaRUQgICAgIDAKKyNkZWZpbmUgU0RfSU5JVElBTElaRUQgICAgICAgMQorI2RlZmluZSBTRF9ERUZBVUxURUQgICAgICAgICAyCisjZGVmaW5lIFNEX0RFTEVURUQgICAgICAgICAgIDMKKworLyogUmV0dXJucyBub256ZXJvIGlmZiBUWVBFMSBhbmQgVFlQRTIgYXJlIHRoZSBzYW1lIHR5cGUsIG9yIGlmIFRZUEUyCisgICBpcyBkZXJpdmVkIGZyb20gVFlQRTEsIG9yIGlmIFRZUEUyIGlzIGEgcG9pbnRlciAocmVmZXJlbmNlKSB0byBhCisgICBjbGFzcyBkZXJpdmVkIGZyb20gdGhlIHR5cGUgcG9pbnRlZCB0byAocmVmZXJyZWQgdG8pIGJ5IFRZUEUxLiAgKi8KKyNkZWZpbmUgc2FtZV9vcl9iYXNlX3R5cGVfcChUWVBFMSwgVFlQRTIpIFwKKyAgY29tcHR5cGVzICgoVFlQRTEpLCAoVFlQRTIpLCBDT01QQVJFX0JBU0UpCisKKy8qIFRoZXNlIG1hY3JvcyBhcmUgdXNlZCB0byBhY2Nlc3MgYSBURU1QTEFURV9QQVJNX0lOREVYLiAgKi8KKyNkZWZpbmUgVEVNUExBVEVfUEFSTV9JTkRFWF9DQVNUKE5PREUpIFwKKwkoKHRlbXBsYXRlX3Bhcm1faW5kZXgqKVRFTVBMQVRFX1BBUk1fSU5ERVhfQ0hFQ0sgKE5PREUpKQorI2RlZmluZSBURU1QTEFURV9QQVJNX0lEWChOT0RFKSAoVEVNUExBVEVfUEFSTV9JTkRFWF9DQVNUIChOT0RFKS0+aW5kZXgpCisjZGVmaW5lIFRFTVBMQVRFX1BBUk1fTEVWRUwoTk9ERSkgKFRFTVBMQVRFX1BBUk1fSU5ERVhfQ0FTVCAoTk9ERSktPmxldmVsKQorI2RlZmluZSBURU1QTEFURV9QQVJNX0RFU0NFTkRBTlRTKE5PREUpIChUUkVFX0NIQUlOIChOT0RFKSkKKyNkZWZpbmUgVEVNUExBVEVfUEFSTV9PUklHX0xFVkVMKE5PREUpIChURU1QTEFURV9QQVJNX0lOREVYX0NBU1QgKE5PREUpLT5vcmlnX2xldmVsKQorI2RlZmluZSBURU1QTEFURV9QQVJNX0RFQ0woTk9ERSkgKFRFTVBMQVRFX1BBUk1fSU5ERVhfQ0FTVCAoTk9ERSktPmRlY2wpCisjZGVmaW5lIFRFTVBMQVRFX1BBUk1fUEFSQU1FVEVSX1BBQ0soTk9ERSkgXAorICAoVFJFRV9MQU5HX0ZMQUdfMCAoVEVNUExBVEVfUEFSTV9JTkRFWF9DSEVDSyAoTk9ERSkpKQorCisvKiBUaGVzZSBtYWNyb3MgYXJlIGZvciBhY2Nlc3NpbmcgdGhlIGZpZWxkcyBvZiBURU1QTEFURV9UWVBFX1BBUk0sCisgICBURU1QTEFURV9URU1QTEFURV9QQVJNIGFuZCBCT1VORF9URU1QTEFURV9URU1QTEFURV9QQVJNIG5vZGVzLiAgKi8KKyNkZWZpbmUgVEVNUExBVEVfVFlQRV9QQVJNX0lOREVYKE5PREUpCQkJCQkgXAorICAoVFJFRV9DSEVDSzMgKChOT0RFKSwgVEVNUExBVEVfVFlQRV9QQVJNLCBURU1QTEFURV9URU1QTEFURV9QQVJNLAlcCisJCUJPVU5EX1RFTVBMQVRFX1RFTVBMQVRFX1BBUk0pKS0+dHlwZS52YWx1ZXMKKyNkZWZpbmUgVEVNUExBVEVfVFlQRV9JRFgoTk9ERSkgXAorICAoVEVNUExBVEVfUEFSTV9JRFggKFRFTVBMQVRFX1RZUEVfUEFSTV9JTkRFWCAoTk9ERSkpKQorI2RlZmluZSBURU1QTEFURV9UWVBFX0xFVkVMKE5PREUpIFwKKyAgKFRFTVBMQVRFX1BBUk1fTEVWRUwgKFRFTVBMQVRFX1RZUEVfUEFSTV9JTkRFWCAoTk9ERSkpKQorI2RlZmluZSBURU1QTEFURV9UWVBFX09SSUdfTEVWRUwoTk9ERSkgXAorICAoVEVNUExBVEVfUEFSTV9PUklHX0xFVkVMIChURU1QTEFURV9UWVBFX1BBUk1fSU5ERVggKE5PREUpKSkKKyNkZWZpbmUgVEVNUExBVEVfVFlQRV9ERUNMKE5PREUpIFwKKyAgKFRFTVBMQVRFX1BBUk1fREVDTCAoVEVNUExBVEVfVFlQRV9QQVJNX0lOREVYIChOT0RFKSkpCisjZGVmaW5lIFRFTVBMQVRFX1RZUEVfUEFSQU1FVEVSX1BBQ0soTk9ERSkgXAorICAoVEVNUExBVEVfUEFSTV9QQVJBTUVURVJfUEFDSyAoVEVNUExBVEVfVFlQRV9QQVJNX0lOREVYIChOT0RFKSkpCisvKiBUaGUgbGlzdCBvZiB0ZW1wbGF0ZSBwYXJtcyB0aGF0IGEgZ2l2ZW4gdGVtcGxhdGUgcGFyYW1ldGVyIG9mIHR5cGUKKyAgIFRFTVBMQVRFX1RZUEVfUEFSTSBiZWxvbmdzIHRvLiovCisjZGVmaW5lIFRFTVBMQVRFX1RZUEVfUEFSTV9TSUJMSU5HX1BBUk1TKE5PREUpIFwKKyAgKFRSRUVfQ0hFQ0sgKChOT0RFKSwgVEVNUExBVEVfVFlQRV9QQVJNKSktPnR5cGUubWF4dmFsCisKKy8qIFRoZXNlIGNvbnN0YW50cyBjYW4gdXNlZCBhcyBiaXQgZmxhZ3MgaW4gdGhlIHByb2Nlc3Mgb2YgdHJlZSBmb3JtYXR0aW5nLgorCisgICBURkZfUExBSU5fSURFTlRJRklFUjogdW5xdWFsaWZpZWQgcGFydCBvZiBhIG5hbWUuCisgICBURkZfU0NPUEU6IGluY2x1ZGUgdGhlIGNsYXNzIGFuZCBuYW1lc3BhY2Ugc2NvcGUgb2YgdGhlIG5hbWUuCisgICBURkZfQ0hBU0VfVFlQRURFRjogcHJpbnQgdGhlIG9yaWdpbmFsIHR5cGUtaWQgaW5zdGVhZCBvZiB0aGUgdHlwZWRlZi1uYW1lLgorICAgVEZGX0RFQ0xfU1BFQ0lGSUVSUzogcHJpbnQgZGVjbC1zcGVjaWZpZXJzLgorICAgVEZGX0NMQVNTX0tFWV9PUl9FTlVNOiBwcmVjZWRlIGEgY2xhc3MtdHlwZSBuYW1lIChyZXNwLiBlbnVtIG5hbWUpIHdpdGgKKyAgICAgICBhIGNsYXNzLWtleSAocmVzcC4gYGVudW0nKS4KKyAgIFRGRl9SRVRVUk5fVFlQRTogaW5jbHVkZSBmdW5jdGlvbiByZXR1cm4gdHlwZS4KKyAgIFRGRl9GVU5DVElPTl9ERUZBVUxUX0FSR1VNRU5UUzogaW5jbHVkZSBmdW5jdGlvbiBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMuCisgICBURkZfRVhDRVBUSU9OX1NQRUNJRklDQVRJT046IHNob3cgZnVuY3Rpb24gZXhjZXB0aW9uIHNwZWNpZmljYXRpb24uCisgICBURkZfVEVNUExBVEVfSEVBREVSOiBzaG93IHRoZSB0ZW1wbGF0ZTwuLi4+IGhlYWRlciBpbiBhCisgICAgICAgdGVtcGxhdGUtZGVjbGFyYXRpb24uCisgICBURkZfVEVNUExBVEVfTkFNRTogc2hvdyBvbmx5IHRlbXBsYXRlLW5hbWUuCisgICBURkZfRVhQUl9JTl9QQVJFTlM6IHBhcmVudGhlc2l6ZSBleHByZXNzaW9ucy4KKyAgIFRGRl9OT19GVU5DVElPTl9BUkdVTUVOVFM6IGRvbid0IHNob3cgZnVuY3Rpb24gYXJndW1lbnRzLgorICAgVEZGX1VOUVVBTElGSUVEX05BTUU6IGRvIG5vdCBwcmludCB0aGUgcXVhbGlmeWluZyBzY29wZSBvZiB0aGUKKyAgICAgICB0b3AtbGV2ZWwgZW50aXR5LgorICAgVEZGX05PX09NSVRfREVGQVVMVF9URU1QTEFURV9BUkdVTUVOVFM6IGRvIG5vdCBvbWl0IHRlbXBsYXRlIGFyZ3VtZW50cworICAgICAgIGlkZW50aWNhbCB0byB0aGVpciBkZWZhdWx0cy4gICovCisKKyNkZWZpbmUgVEZGX1BMQUlOX0lERU5USUZJRVIJCQkoMCkKKyNkZWZpbmUgVEZGX1NDT1BFCQkJCSgxKQorI2RlZmluZSBURkZfQ0hBU0VfVFlQRURFRgkJCSgxIDw8IDEpCisjZGVmaW5lIFRGRl9ERUNMX1NQRUNJRklFUlMJCQkoMSA8PCAyKQorI2RlZmluZSBURkZfQ0xBU1NfS0VZX09SX0VOVU0JCQkoMSA8PCAzKQorI2RlZmluZSBURkZfUkVUVVJOX1RZUEUJCQkJKDEgPDwgNCkKKyNkZWZpbmUgVEZGX0ZVTkNUSU9OX0RFRkFVTFRfQVJHVU1FTlRTCQkoMSA8PCA1KQorI2RlZmluZSBURkZfRVhDRVBUSU9OX1NQRUNJRklDQVRJT04JCSgxIDw8IDYpCisjZGVmaW5lIFRGRl9URU1QTEFURV9IRUFERVIJCQkoMSA8PCA3KQorI2RlZmluZSBURkZfVEVNUExBVEVfTkFNRQkJCSgxIDw8IDgpCisjZGVmaW5lIFRGRl9FWFBSX0lOX1BBUkVOUwkJCSgxIDw8IDkpCisjZGVmaW5lIFRGRl9OT19GVU5DVElPTl9BUkdVTUVOVFMJCSgxIDw8IDEwKQorI2RlZmluZSBURkZfVU5RVUFMSUZJRURfTkFNRQkJCSgxIDw8IDExKQorI2RlZmluZSBURkZfTk9fT01JVF9ERUZBVUxUX1RFTVBMQVRFX0FSR1VNRU5UUwkoMSA8PCAxMikKKworLyogUmV0dXJucyB0aGUgVEVNUExBVEVfREVDTCBhc3NvY2lhdGVkIHRvIGEgVEVNUExBVEVfVEVNUExBVEVfUEFSTQorICAgbm9kZS4gICovCisjZGVmaW5lIFRFTVBMQVRFX1RFTVBMQVRFX1BBUk1fVEVNUExBVEVfREVDTChOT0RFKQlcCisgICgoVFJFRV9DT0RFIChOT0RFKSA9PSBCT1VORF9URU1QTEFURV9URU1QTEFURV9QQVJNKQlcCisgICA/IFRZUEVfVElfVEVNUExBVEUgKE5PREUpCQkJCVwKKyAgIDogVFlQRV9OQU1FIChOT0RFKSkKKworLyogaW4gbGV4LmMgICovCisKK2V4dGVybiB2b2lkIGluaXRfcmVzd29yZHMgKHZvaWQpOworCit0eXBlZGVmIHN0cnVjdCBHVFkoKCkpIG9wZXJhdG9yX25hbWVfaW5mb190IHsKKyAgLyogVGhlIElERU5USUZJRVJfTk9ERSBmb3IgdGhlIG9wZXJhdG9yLiAgKi8KKyAgdHJlZSBpZGVudGlmaWVyOworICAvKiBUaGUgbmFtZSBvZiB0aGUgb3BlcmF0b3IuICAqLworICBjb25zdCBjaGFyICpuYW1lOworICAvKiBUaGUgbWFuZ2xlZCBuYW1lIG9mIHRoZSBvcGVyYXRvci4gICovCisgIGNvbnN0IGNoYXIgKm1hbmdsZWRfbmFtZTsKKyAgLyogVGhlIGFyaXR5IG9mIHRoZSBvcGVyYXRvci4gICovCisgIGludCBhcml0eTsKK30gb3BlcmF0b3JfbmFtZV9pbmZvX3Q7CisKKy8qIEEgbWFwcGluZyBmcm9tIHRyZWUgY29kZXMgdG8gb3BlcmF0b3IgbmFtZSBpbmZvcm1hdGlvbi4gICovCitleHRlcm4gR1RZKCgpKSBvcGVyYXRvcl9uYW1lX2luZm9fdCBvcGVyYXRvcl9uYW1lX2luZm8KKyAgWyhpbnQpIE1BWF9UUkVFX0NPREVTXTsKKy8qIFNpbWlsYXIsIGJ1dCBmb3IgYXNzaWdubWVudCBvcGVyYXRvcnMuICAqLworZXh0ZXJuIEdUWSgoKSkgb3BlcmF0b3JfbmFtZV9pbmZvX3QgYXNzaWdubWVudF9vcGVyYXRvcl9uYW1lX2luZm8KKyAgWyhpbnQpIE1BWF9UUkVFX0NPREVTXTsKKworLyogQSB0eXBlLXF1YWxpZmllciwgb3IgYml0bWFzayB0aGVyZWZvcmUsIHVzaW5nIHRoZSBUWVBFX1FVQUwKKyAgIGNvbnN0YW50cy4gICovCisKK3R5cGVkZWYgaW50IGNwX2N2X3F1YWxzOworCisvKiBBIHN0b3JhZ2UgY2xhc3MuICAqLworCit0eXBlZGVmIGVudW0gY3Bfc3RvcmFnZV9jbGFzcyB7CisgIC8qIHNjX25vbmUgbXVzdCBiZSB6ZXJvIHNvIHRoYXQgemVyb2luZyBhIGNwX2RlY2xfc3BlY2lmaWVyX3NlcQorICAgICBzZXRzIHRoZSBzdG9yYWdlX2NsYXNzIGZpZWxkIHRvIHNjX25vbmUuICAqLworICBzY19ub25lID0gMCwKKyAgc2NfYXV0bywKKyAgc2NfcmVnaXN0ZXIsCisgIHNjX3N0YXRpYywKKyAgc2NfZXh0ZXJuLAorICBzY19tdXRhYmxlCit9IGNwX3N0b3JhZ2VfY2xhc3M7CisKKy8qIEFuIGluZGl2aWR1YWwgZGVjbC1zcGVjaWZpZXIuICAqLworCit0eXBlZGVmIGVudW0gY3BfZGVjbF9zcGVjIHsKKyAgZHNfZmlyc3QsCisgIGRzX3NpZ25lZCA9IGRzX2ZpcnN0LAorICBkc191bnNpZ25lZCwKKyAgZHNfc2hvcnQsCisgIGRzX2xvbmcsCisgIGRzX2NvbnN0LAorICBkc192b2xhdGlsZSwKKyAgZHNfcmVzdHJpY3QsCisgIGRzX2lubGluZSwKKyAgZHNfdmlydHVhbCwKKyAgZHNfZXhwbGljaXQsCisgIGRzX2ZyaWVuZCwKKyAgZHNfdHlwZWRlZiwKKyAgZHNfY29uc3RleHByLAorICBkc19jb21wbGV4LAorICBkc190aHJlYWQsCisgIGRzX2xhc3QKK30gY3BfZGVjbF9zcGVjOworCisvKiBBIGRlY2wtc3BlY2lmaWVyLXNlcS4gICovCisKK3R5cGVkZWYgc3RydWN0IGNwX2RlY2xfc3BlY2lmaWVyX3NlcSB7CisgIC8qIFRoZSBudW1iZXIgb2YgdGltZXMgZWFjaCBvZiB0aGUga2V5d29yZHMgaGFzIGJlZW4gc2Vlbi4gICovCisgIHVuc2lnbmVkIHNwZWNzWyhpbnQpIGRzX2xhc3RdOworICAvKiBUaGUgcHJpbWFyeSB0eXBlLCBpZiBhbnksIGdpdmVuIGJ5IHRoZSBkZWNsLXNwZWNpZmllci1zZXEuCisgICAgIE1vZGlmaWVycywgbGlrZSAic2hvcnQiLCAiY29uc3QiLCBhbmQgInVuc2lnbmVkIiBhcmUgbm90CisgICAgIHJlZmxlY3RlZCBoZXJlLiAgVGhpcyBmaWVsZCB3aWxsIGJlIGEgVFlQRSwgdW5sZXNzIGEgdHlwZWRlZi1uYW1lCisgICAgIHdhcyB1c2VkLCBpbiB3aGljaCBjYXNlIGl0IHdpbGwgYmUgYSBUWVBFX0RFQ0wuICAqLworICB0cmVlIHR5cGU7CisgIC8qIFRoZSBsb2NhdGlvbiBvZiB0aGUgcHJpbWFyeSB0eXBlLiBNYWlubHkgdXNlZCBmb3IgZXJyb3IKKyAgICAgcmVwb3J0aW5nLiAgKi8KKyAgbG9jYXRpb25fdCB0eXBlX2xvY2F0aW9uOworICAvKiBUaGUgYXR0cmlidXRlcywgaWYgYW55LCBwcm92aWRlZCB3aXRoIHRoZSBzcGVjaWZpZXIgc2VxdWVuY2UuICAqLworICB0cmVlIGF0dHJpYnV0ZXM7CisgIC8qIElmIG5vbi1OVUxMLCBhIGJ1aWx0LWluIHR5cGUgdGhhdCB0aGUgdXNlciBhdHRlbXB0ZWQgdG8gcmVkZWZpbmUKKyAgICAgdG8gc29tZSBvdGhlciB0eXBlLiAgKi8KKyAgdHJlZSByZWRlZmluZWRfYnVpbHRpbl90eXBlOworICAvKiBUaGUgc3RvcmFnZSBjbGFzcyBzcGVjaWZpZWQgLS0gb3Igc2Nfbm9uZSBpZiBubyBzdG9yYWdlIGNsYXNzIHdhcworICAgICBleHBsaWNpdGx5IHNwZWNpZmllZC4gICovCisgIGNwX3N0b3JhZ2VfY2xhc3Mgc3RvcmFnZV9jbGFzczsKKyAgLyogVHJ1ZSBpZmYgVFlQRV9TUEVDIGluZGljYXRlcyBhIHVzZXItZGVmaW5lZCB0eXBlLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCB1c2VyX2RlZmluZWRfdHlwZV9wIDogMTsKKyAgLyogVHJ1ZSBpZmYgbXVsdGlwbGUgdHlwZXMgd2VyZSAoZXJyb25lb3VzbHkpIHNwZWNpZmllZCBmb3IgdGhpcworICAgICBkZWNsLXNwZWNpZmllci1zZXEuICAqLworICBCT09MX0JJVEZJRUxEIG11bHRpcGxlX3R5cGVzX3AgOiAxOworICAvKiBUcnVlIGlmZiBtdWx0aXBsZSBzdG9yYWdlIGNsYXNzZXMgd2VyZSAoZXJyb25lb3VzbHkpIHNwZWNpZmllZAorICAgICBmb3IgdGhpcyBkZWNsLXNwZWNpZmllci1zZXEgb3IgYSBjb21iaW5hdGlvbiBvZiBhIHN0b3JhZ2UgY2xhc3MKKyAgICAgd2l0aCBhIHR5cGVkZWYgc3BlY2lmaWVyLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCBjb25mbGljdGluZ19zcGVjaWZpZXJzX3AgOiAxOworICAvKiBUcnVlIGlmZiBhdCBsZWFzdCBvbmUgZGVjbC1zcGVjaWZpZXIgd2FzIGZvdW5kLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCBhbnlfc3BlY2lmaWVyc19wIDogMTsKKyAgLyogVHJ1ZSBpZmYgYXQgbGVhc3Qgb25lIHR5cGUtc3BlY2lmaWVyIHdhcyBmb3VuZC4gICovCisgIEJPT0xfQklURklFTEQgYW55X3R5cGVfc3BlY2lmaWVyc19wIDogMTsKKyAgLyogVHJ1ZSBpZmYgImludCIgd2FzIGV4cGxpY2l0bHkgcHJvdmlkZWQuICAqLworICBCT09MX0JJVEZJRUxEIGV4cGxpY2l0X2ludF9wIDogMTsKKyAgLyogVHJ1ZSBpZmYgImNoYXIiIHdhcyBleHBsaWNpdGx5IHByb3ZpZGVkLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCBleHBsaWNpdF9jaGFyX3AgOiAxOworfSBjcF9kZWNsX3NwZWNpZmllcl9zZXE7CisKKy8qIFRoZSB2YXJpb3VzIGtpbmRzIG9mIGRlY2xhcmF0b3JzLiAgKi8KKwordHlwZWRlZiBlbnVtIGNwX2RlY2xhcmF0b3Jfa2luZCB7CisgIGNka19pZCwKKyAgY2RrX2Z1bmN0aW9uLAorICBjZGtfYXJyYXksCisgIGNka19wb2ludGVyLAorICBjZGtfcmVmZXJlbmNlLAorICBjZGtfcHRybWVtLAorICBjZGtfZXJyb3IKK30gY3BfZGVjbGFyYXRvcl9raW5kOworCisvKiBBIGRlY2xhcmF0b3IuICAqLworCit0eXBlZGVmIHN0cnVjdCBjcF9kZWNsYXJhdG9yIGNwX2RlY2xhcmF0b3I7CisKK3R5cGVkZWYgc3RydWN0IGNwX3BhcmFtZXRlcl9kZWNsYXJhdG9yIGNwX3BhcmFtZXRlcl9kZWNsYXJhdG9yOworCisvKiBBIHBhcmFtZXRlciwgYmVmb3JlIGl0IGhhcyBiZWVuIHNlbWFudGljYWxseSBhbmFseXplZC4gICovCitzdHJ1Y3QgY3BfcGFyYW1ldGVyX2RlY2xhcmF0b3IgeworICAvKiBUaGUgbmV4dCBwYXJhbWV0ZXIsIG9yIE5VTExfVFJFRSBpZiBub25lLiAgKi8KKyAgY3BfcGFyYW1ldGVyX2RlY2xhcmF0b3IgKm5leHQ7CisgIC8qIFRoZSBkZWNsLXNwZWNpZmllcnMtc2VxIGZvciB0aGUgcGFyYW1ldGVyLiAgKi8KKyAgY3BfZGVjbF9zcGVjaWZpZXJfc2VxIGRlY2xfc3BlY2lmaWVyczsKKyAgLyogVGhlIGRlY2xhcmF0b3IgZm9yIHRoZSBwYXJhbWV0ZXIuICAqLworICBjcF9kZWNsYXJhdG9yICpkZWNsYXJhdG9yOworICAvKiBUaGUgZGVmYXVsdC1hcmd1bWVudCBleHByZXNzaW9uLCBvciBOVUxMX1RSRUUsIGlmIG5vbmUuICAqLworICB0cmVlIGRlZmF1bHRfYXJndW1lbnQ7CisgIC8qIFRydWUgaWZmIHRoaXMgaXMgdGhlIGZpcnN0IHBhcmFtZXRlciBpbiB0aGUgbGlzdCBhbmQgdGhlCisgICAgIHBhcmFtZXRlciBzZXF1ZW5jZSBlbmRzIHdpdGggYW4gZWxsaXBzaXMuICAqLworICBib29sIGVsbGlwc2lzX3A7Cit9OworCisvKiBBIGRlY2xhcmF0b3IuICAqLworc3RydWN0IGNwX2RlY2xhcmF0b3IgeworICAvKiBUaGUga2luZCBvZiBkZWNsYXJhdG9yLiAgKi8KKyAgRU5VTV9CSVRGSUVMRCAoY3BfZGVjbGFyYXRvcl9raW5kKSBraW5kIDogNDsKKyAgLyogV2hldGhlciB3ZSBwYXJzZWQgYW4gZWxsaXBzaXMgKGAuLi4nKSBqdXN0IGJlZm9yZSB0aGUgZGVjbGFyYXRvciwKKyAgICAgdG8gaW5kaWNhdGUgdGhpcyBpcyBhIHBhcmFtZXRlciBwYWNrLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCBwYXJhbWV0ZXJfcGFja19wIDogMTsKKyAgLyogQXR0cmlidXRlcyB0aGF0IGFwcGx5IHRvIHRoaXMgZGVjbGFyYXRvci4gICovCisgIHRyZWUgYXR0cmlidXRlczsKKyAgLyogRm9yIGFsbCBidXQgY2RrX2lkIGFuZCBjZGtfZXJyb3IsIHRoZSBjb250YWluZWQgZGVjbGFyYXRvci4gIEZvcgorICAgICBjZGtfaWQgYW5kIGNka19lcnJvciwgZ3VhcmFudGVlZCB0byBiZSBOVUxMLiAgKi8KKyAgY3BfZGVjbGFyYXRvciAqZGVjbGFyYXRvcjsKKyAgbG9jYXRpb25fdCBpZF9sb2M7IC8qIEN1cnJlbnRseSBvbmx5IHNldCBmb3IgY2RrX2lkIGFuZCBjZGtfZnVuY3Rpb24uICovCisgIHVuaW9uIHsKKyAgICAvKiBGb3IgaWRlbnRpZmllcnMuICAqLworICAgIHN0cnVjdCB7CisgICAgICAvKiBJZiBub24tTlVMTCwgdGhlIHF1YWxpZnlpbmcgc2NvcGUgKGEgTkFNRVNQQUNFX0RFQ0wgb3IKKwkgKl9UWVBFKSBmb3IgdGhpcyBpZGVudGlmaWVyLiAgKi8KKyAgICAgIHRyZWUgcXVhbGlmeWluZ19zY29wZTsKKyAgICAgIC8qIFRoZSB1bnF1YWxpZmllZCBuYW1lIG9mIHRoZSBlbnRpdHkgLS0gYW4gSURFTlRJRklFUl9OT0RFLAorCSBCSVRfTk9UX0VYUFIsIG9yIFRFTVBMQVRFX0lEX0VYUFIuICAqLworICAgICAgdHJlZSB1bnF1YWxpZmllZF9uYW1lOworICAgICAgLyogSWYgdGhpcyBpcyB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uLCB3aGF0IGtpbmQgb2Ygc3BlY2lhbAorCSBmdW5jdGlvbiAoaWYgYW55KS4gICovCisgICAgICBzcGVjaWFsX2Z1bmN0aW9uX2tpbmQgc2ZrOworICAgIH0gaWQ7CisgICAgLyogRm9yIGZ1bmN0aW9ucy4gICovCisgICAgc3RydWN0IHsKKyAgICAgIC8qIFRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBmdW5jdGlvbiBhcyBhIFRSRUVfTElTVCBvZiBkZWNsL2RlZmF1bHQuICAqLworICAgICAgdHJlZSBwYXJhbWV0ZXJzOworICAgICAgLyogVGhlIGN2LXF1YWxpZmllcnMgZm9yIHRoZSBmdW5jdGlvbi4gICovCisgICAgICBjcF9jdl9xdWFscyBxdWFsaWZpZXJzOworICAgICAgLyogVGhlIGV4Y2VwdGlvbi1zcGVjaWZpY2F0aW9uIGZvciB0aGUgZnVuY3Rpb24uICAqLworICAgICAgdHJlZSBleGNlcHRpb25fc3BlY2lmaWNhdGlvbjsKKyAgICAgIC8qIFRoZSBsYXRlLXNwZWNpZmllZCByZXR1cm4gdHlwZSwgaWYgYW55LiAgKi8KKyAgICAgIHRyZWUgbGF0ZV9yZXR1cm5fdHlwZTsKKyAgICB9IGZ1bmN0aW9uOworICAgIC8qIEZvciBhcnJheXMuICAqLworICAgIHN0cnVjdCB7CisgICAgICAvKiBUaGUgYm91bmRzIHRvIHRoZSBhcnJheS4gICovCisgICAgICB0cmVlIGJvdW5kczsKKyAgICB9IGFycmF5OworICAgIC8qIEZvciBjZGtfcG9pbnRlciBhbmQgY2RrX3B0cm1lbS4gICovCisgICAgc3RydWN0IHsKKyAgICAgIC8qIFRoZSBjdi1xdWFsaWZpZXJzIGZvciB0aGUgcG9pbnRlci4gICovCisgICAgICBjcF9jdl9xdWFscyBxdWFsaWZpZXJzOworICAgICAgLyogRm9yIGNka19wdHJtZW0sIHRoZSBjbGFzcyB0eXBlIGNvbnRhaW5pbmcgdGhlIG1lbWJlci4gICovCisgICAgICB0cmVlIGNsYXNzX3R5cGU7CisgICAgfSBwb2ludGVyOworICAgIC8qIEZvciBjZGtfcmVmZXJlbmNlICovCisgICAgc3RydWN0IHsKKyAgICAgIC8qIFRoZSBjdi1xdWFsaWZpZXJzIGZvciB0aGUgcmVmZXJlbmNlLiAgVGhlc2UgcXVhbGlmaWVycyBhcmUKKyAgICAgICAgIG9ubHkgdXNlZCB0byBkaWFnbm9zZSBpbGwtZm9ybWVkIGNvZGUuICAqLworICAgICAgY3BfY3ZfcXVhbHMgcXVhbGlmaWVyczsKKyAgICAgIC8qIFdoZXRoZXIgdGhpcyBpcyBhbiBydmFsdWUgcmVmZXJlbmNlICovCisgICAgICBib29sIHJ2YWx1ZV9yZWY7CisgICAgfSByZWZlcmVuY2U7CisgIH0gdTsKK307CisKKy8qIEEgbGV2ZWwgb2YgdGVtcGxhdGUgaW5zdGFudGlhdGlvbi4gICovCitzdHJ1Y3QgR1RZKCgpKSB0aW5zdF9sZXZlbCB7CisgIC8qIFRoZSBpbW1lZGlhdGVseSBkZWVwZXIgbGV2ZWwgaW4gdGhlIGNoYWluLiAgKi8KKyAgc3RydWN0IHRpbnN0X2xldmVsICpuZXh0OworCisgIC8qIFRoZSBvcmlnaW5hbCBub2RlLiAgQ2FuIGJlIGVpdGhlciBhIERFQ0wgKGZvciBhIGZ1bmN0aW9uIG9yIHN0YXRpYworICAgICBkYXRhIG1lbWJlcikgb3IgYSBUWVBFIChmb3IgYSBjbGFzcyksIGRlcGVuZGluZyBvbiB3aGF0IHdlIHdlcmUKKyAgICAgYXNrZWQgdG8gaW5zdGFudGlhdGUuICAqLworICB0cmVlIGRlY2w7CisKKyAgLyogVGhlIGxvY2F0aW9uIHdoZXJlIHRoZSB0ZW1wbGF0ZSBpcyBpbnN0YW50aWF0ZWQuICAqLworICBsb2NhdGlvbl90IGxvY3VzOworCisgIC8qIFRydWUgaWYgdGhlIGxvY2F0aW9uIGlzIGluIGEgc3lzdGVtIGhlYWRlci4gICovCisgIGJvb2wgaW5fc3lzdGVtX2hlYWRlcl9wOworfTsKKworLyogQSBwYXJhbWV0ZXIgbGlzdCBpbmRpY2F0aW5nIGZvciBhIGZ1bmN0aW9uIHdpdGggbm8gcGFyYW1ldGVycywKKyAgIGUuZyAgImludCBmKHZvaWQpIi4gICovCitleHRlcm4gY3BfcGFyYW1ldGVyX2RlY2xhcmF0b3IgKm5vX3BhcmFtZXRlcnM7CisKKy8qIFRydWUgaWYgd2Ugc2F3ICIjcHJhZ21hIEdDQyBqYXZhX2V4Y2VwdGlvbnMiLiAgKi8KK2V4dGVybiBib29sIHByYWdtYV9qYXZhX2V4Y2VwdGlvbnM7CisKKy8qIGluIGNhbGwuYyAqLworZXh0ZXJuIGJvb2wgY2hlY2tfZHRvcl9uYW1lCQkJKHRyZWUsIHRyZWUpOworCitleHRlcm4gdHJlZSBidWlsZF9jb25kaXRpb25hbF9leHByCQkodHJlZSwgdHJlZSwgdHJlZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgYnVpbGRfYWRkcl9mdW5jCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfY2FsbF9hCQkJKHRyZWUsIGludCwgdHJlZSopOworZXh0ZXJuIHRyZWUgYnVpbGRfY2FsbF9uCQkJKHRyZWUsIGludCwgLi4uKTsKK2V4dGVybiBib29sIG51bGxfcHRyX2NzdF9wCQkJKHRyZWUpOworZXh0ZXJuIGJvb2wgc3VmZmljaWVudF9wYXJtc19wCQkJKGNvbnN0X3RyZWUpOworZXh0ZXJuIHRyZWUgdHlwZV9kZWNheXNfdG8JCQkodHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbgkJKHRyZWUsIHRyZWUsIGludCk7CitleHRlcm4gdHJlZSBidWlsZF9uZXdfZnVuY3Rpb25fY2FsbAkJKHRyZWUsIFZFQyh0cmVlLGdjKSAqKiwgYm9vbCwgCisJCQkJCQkgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgYnVpbGRfb3BlcmF0b3JfbmV3X2NhbGwJCSh0cmVlLCBWRUModHJlZSxnYykgKiosIHRyZWUgKiwKKwkJCQkJCSB0cmVlICosIHRyZWUgKik7CitleHRlcm4gdHJlZSBidWlsZF9uZXdfbWV0aG9kX2NhbGwJCSh0cmVlLCB0cmVlLCBWRUModHJlZSxnYykgKiosCisJCQkJCQkgdHJlZSwgaW50LCB0cmVlICosCisJCQkJCQkgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgYnVpbGRfc3BlY2lhbF9tZW1iZXJfY2FsbAkJKHRyZWUsIHRyZWUsIFZFQyh0cmVlLGdjKSAqKiwKKwkJCQkJCSB0cmVlLCBpbnQsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGJ1aWxkX25ld19vcAkJCShlbnVtIHRyZWVfY29kZSwgaW50LCB0cmVlLCAKKwkJCQkJCSB0cmVlLCB0cmVlLCBib29sICosCisJCQkJCQkgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgYnVpbGRfb3BfY2FsbAkJCSh0cmVlLCBWRUModHJlZSxnYykgKiosCisJCQkJCQkgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgYnVpbGRfb3BfZGVsZXRlX2NhbGwJCShlbnVtIHRyZWVfY29kZSwgdHJlZSwgdHJlZSwgYm9vbCwgdHJlZSwgdHJlZSk7CitleHRlcm4gYm9vbCBjYW5fY29udmVydAkJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gYm9vbCBjYW5fY29udmVydF9hcmcJCQkodHJlZSwgdHJlZSwgdHJlZSwgaW50KTsKK2V4dGVybiBib29sIGNhbl9jb252ZXJ0X2FyZ19iYWQJCQkodHJlZSwgdHJlZSwgdHJlZSwgaW50KTsKK2V4dGVybiBib29sIGVuZm9yY2VfYWNjZXNzCQkJKHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgY29udmVydF9kZWZhdWx0X2FyZwkJCSh0cmVlLCB0cmVlLCB0cmVlLCBpbnQpOworZXh0ZXJuIHRyZWUgY29udmVydF9hcmdfdG9fZWxsaXBzaXMJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX3hfdmFfYXJnCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgY3h4X3R5cGVfcHJvbW90ZXNfdG8JCSh0cmVlKTsKK2V4dGVybiB0cmVlIHR5cGVfcGFzc2VkX2FzCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgY29udmVydF9mb3JfYXJnX3Bhc3NpbmcJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiBib29sIGlzX3Byb3Blcmx5X2Rlcml2ZWRfZnJvbQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgc2V0X3VwX2V4dGVuZGVkX3JlZl90ZW1wCQkodHJlZSwgdHJlZSwgdHJlZSAqLCB0cmVlICopOworZXh0ZXJuIHRyZWUgaW5pdGlhbGl6ZV9yZWZlcmVuY2UJCSh0cmVlLCB0cmVlLCB0cmVlLCB0cmVlICosIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIG1ha2VfdGVtcG9yYXJ5X3Zhcl9mb3JfcmVmX3RvX3RlbXAJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgc3RyaXBfdG9wX3F1YWxzCQkJKHRyZWUpOworZXh0ZXJuIGJvb2wgcmVmZXJlbmNlX3JlbGF0ZWRfcAkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIHBlcmZvcm1faW1wbGljaXRfY29udmVyc2lvbgkJKHRyZWUsIHRyZWUsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIHBlcmZvcm1faW1wbGljaXRfY29udmVyc2lvbl9mbGFncwkodHJlZSwgdHJlZSwgdHN1YnN0X2ZsYWdzX3QsIGludCk7CitleHRlcm4gdHJlZSBwZXJmb3JtX2RpcmVjdF9pbml0aWFsaXphdGlvbl9pZl9wb3NzaWJsZSAodHJlZSwgdHJlZSwgYm9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBpbl9jaGFyZ2VfYXJnX2Zvcl9uYW1lCQkodHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9jeHhfY2FsbAkJCSh0cmVlLCBpbnQsIHRyZWUgKik7CitleHRlcm4gYm9vbCBpc19zdGRfaW5pdF9saXN0CQkJKHRyZWUpOworZXh0ZXJuIGJvb2wgaXNfbGlzdF9jdG9yCQkJKHRyZWUpOworI2lmZGVmIEVOQUJMRV9DSEVDS0lORworZXh0ZXJuIHZvaWQgdmFsaWRhdGVfY29udmVyc2lvbl9vYnN0YWNrCQkodm9pZCk7CisjZW5kaWYgLyogRU5BQkxFX0NIRUNLSU5HICovCisKKy8qIGluIGNsYXNzLmMgKi8KK2V4dGVybiB0cmVlIGJ1aWxkX3ZmaWVsZF9yZWYJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9iYXNlX3BhdGgJCQkoZW51bSB0cmVlX2NvZGUsIHRyZWUsCisJCQkJCQkgdHJlZSwgaW50KTsKK2V4dGVybiB0cmVlIGNvbnZlcnRfdG9fYmFzZQkJCSh0cmVlLCB0cmVlLCBib29sLCBib29sKTsKK2V4dGVybiB0cmVlIGNvbnZlcnRfdG9fYmFzZV9zdGF0aWNhbGx5CQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF92dGJsX3JlZgkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX3Zmbl9yZWYJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBnZXRfdnRhYmxlX2RlY2wJCQkodHJlZSwgaW50KTsKK2V4dGVybiB2b2lkIHJlc29ydF90eXBlX21ldGhvZF92ZWMJCSh2b2lkICosIHZvaWQgKiwKKwkJCQkJCSBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIGJvb2wgYWRkX21ldGhvZAkJCQkodHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gYm9vbCBjdXJyZW50bHlfb3Blbl9jbGFzcwkJKHRyZWUpOworZXh0ZXJuIHRyZWUgY3VycmVudGx5X29wZW5fZGVyaXZlZF9jbGFzcwkodHJlZSk7CitleHRlcm4gdHJlZSBmaW5pc2hfc3RydWN0CQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgZmluaXNoX3N0cnVjdF8xCQkJKHRyZWUpOworZXh0ZXJuIGludCByZXNvbHZlc190b19maXhlZF90eXBlX3AJCSh0cmVlLCBpbnQgKik7CitleHRlcm4gdm9pZCBpbml0X2NsYXNzX3Byb2Nlc3NpbmcJCSh2b2lkKTsKK2V4dGVybiBpbnQgaXNfZW1wdHlfY2xhc3MJCQkodHJlZSk7CitleHRlcm4gYm9vbCBpc19yZWFsbHlfZW1wdHlfY2xhc3MJCSh0cmVlKTsKK2V4dGVybiB2b2lkIHB1c2hjbGFzcwkJCQkodHJlZSk7CitleHRlcm4gdm9pZCBwb3BjbGFzcwkJCQkodm9pZCk7CitleHRlcm4gdm9pZCBwdXNoX25lc3RlZF9jbGFzcwkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIHBvcF9uZXN0ZWRfY2xhc3MJCQkodm9pZCk7CitleHRlcm4gaW50IGN1cnJlbnRfbGFuZ19kZXB0aAkJCSh2b2lkKTsKK2V4dGVybiB2b2lkIHB1c2hfbGFuZ19jb250ZXh0CQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgcG9wX2xhbmdfY29udGV4dAkJCSh2b2lkKTsKK2V4dGVybiB0cmVlIGluc3RhbnRpYXRlX3R5cGUJCQkodHJlZSwgdHJlZSwgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHZvaWQgcHJpbnRfY2xhc3Nfc3RhdGlzdGljcwkJKHZvaWQpOworZXh0ZXJuIHZvaWQgYnVpbGRfc2VsZl9yZWZlcmVuY2UJCSh2b2lkKTsKK2V4dGVybiBpbnQgc2FtZV9zaWduYXR1cmVfcAkJCShjb25zdF90cmVlLCBjb25zdF90cmVlKTsKK2V4dGVybiB2b2lkIG1heWJlX2FkZF9jbGFzc190ZW1wbGF0ZV9kZWNsX2xpc3QJKHRyZWUsIHRyZWUsIGludCk7CitleHRlcm4gdm9pZCB1bnJldmVyc2VfbWVtYmVyX2RlY2xhcmF0aW9ucwkodHJlZSk7CitleHRlcm4gdm9pZCBpbnZhbGlkYXRlX2NsYXNzX2xvb2t1cF9jYWNoZQkodm9pZCk7CitleHRlcm4gdm9pZCBtYXliZV9ub3RlX25hbWVfdXNlZF9pbl9jbGFzcwkodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBub3RlX25hbWVfZGVjbGFyZWRfaW5fY2xhc3MJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGdldF92dGJsX2RlY2xfZm9yX2JpbmZvCQkodHJlZSk7CitleHRlcm4gdm9pZCBkZWJ1Z19jbGFzcwkJCQkodHJlZSk7CitleHRlcm4gdm9pZCBkZWJ1Z190aHVua3MJCQkodHJlZSk7CitleHRlcm4gdHJlZSBjcF9mb2xkX29ial90eXBlX3JlZgkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgc2V0X2xpbmthZ2VfYWNjb3JkaW5nX3RvX3R5cGUJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgZGV0ZXJtaW5lX2tleV9tZXRob2QJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGNoZWNrX2Zvcl9vdmVycmlkZQkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIHB1c2hfY2xhc3Nfc3RhY2sJCQkodm9pZCk7CitleHRlcm4gdm9pZCBwb3BfY2xhc3Nfc3RhY2sJCQkodm9pZCk7CitleHRlcm4gYm9vbCB0eXBlX2hhc191c2VyX25vbmRlZmF1bHRfY29uc3RydWN0b3IgKHRyZWUpOworZXh0ZXJuIGJvb2wgdXNlcl9wcm92aWRlZF9wCQkJKHRyZWUpOworZXh0ZXJuIGJvb2wgdHlwZV9oYXNfdXNlcl9wcm92aWRlZF9jb25zdHJ1Y3RvciAgKHRyZWUpOworZXh0ZXJuIGJvb2wgdHlwZV9oYXNfdXNlcl9wcm92aWRlZF9kZWZhdWx0X2NvbnN0cnVjdG9yICh0cmVlKTsKK2V4dGVybiB2b2lkIGRlZmF1bHRlZF9sYXRlX2NoZWNrCQkodHJlZSk7CitleHRlcm4gYm9vbCBkZWZhdWx0YWJsZV9mbl9jaGVjawkJKHRyZWUpOworZXh0ZXJuIHZvaWQgZml4dXBfdHlwZV92YXJpYW50cwkJCSh0cmVlKTsKK2V4dGVybiB0cmVlKiBkZWNsX2Nsb25lZF9mdW5jdGlvbl9wCQkoY29uc3RfdHJlZSwgYm9vbCk7CitleHRlcm4gdm9pZCBjbG9uZV9mdW5jdGlvbl9kZWNsCQkJKHRyZWUsIGludCk7CitleHRlcm4gdm9pZCBhZGp1c3RfY2xvbmVfYXJncwkJCSh0cmVlKTsKKworLyogaW4gY3Z0LmMgKi8KK2V4dGVybiB0cmVlIGNvbnZlcnRfdG9fcmVmZXJlbmNlCQkodHJlZSwgdHJlZSwgaW50LCBpbnQsIHRyZWUpOworZXh0ZXJuIHRyZWUgY29udmVydF9mcm9tX3JlZmVyZW5jZQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgZm9yY2VfcnZhbHVlCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgb2NwX2NvbnZlcnQJCQkJKHRyZWUsIHRyZWUsIGludCwgaW50KTsKK2V4dGVybiB0cmVlIGNwX2NvbnZlcnQJCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgY3BfY29udmVydF9hbmRfY2hlY2sgICAgICAgICAgICAgICAgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgY3BfZm9sZF9jb252ZXJ0CQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgY29udmVydF90b192b2lkCSh0cmVlLCBjb25zdCBjaGFyICovKmltcGxpY2l0IGNvbnRleHQqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGNvbnZlcnRfZm9yY2UJCQkodHJlZSwgdHJlZSwgaW50KTsKK2V4dGVybiB0cmVlIGJ1aWxkX2V4cHJfdHlwZV9jb252ZXJzaW9uCQkoaW50LCB0cmVlLCBib29sKTsKK2V4dGVybiB0cmVlIHR5cGVfcHJvbW90ZXNfdG8JCQkodHJlZSk7CitleHRlcm4gdHJlZSBwZXJmb3JtX3F1YWxpZmljYXRpb25fY29udmVyc2lvbnMJKHRyZWUsIHRyZWUpOworCisvKiBpbiBuYW1lLWxvb2t1cC5jICovCitleHRlcm4gdHJlZSBwdXNoZGVjbAkJCQkodHJlZSk7CitleHRlcm4gdHJlZSBwdXNoZGVjbF9tYXliZV9mcmllbmQJCSh0cmVlLCBib29sKTsKK2V4dGVybiB2b2lkIG1heWJlX3B1c2hfY2xlYW51cF9sZXZlbAkJKHRyZWUpOworZXh0ZXJuIHRyZWUgcHVzaHRhZwkJCQkodHJlZSwgdHJlZSwgdGFnX3Njb3BlKTsKK2V4dGVybiB0cmVlIG1ha2VfYW5vbl9uYW1lCQkJKHZvaWQpOworZXh0ZXJuIHRyZWUgcHVzaGRlY2xfdG9wX2xldmVsX21heWJlX2ZyaWVuZAkodHJlZSwgYm9vbCk7CitleHRlcm4gdHJlZSBwdXNoZGVjbF90b3BfbGV2ZWxfYW5kX2ZpbmlzaAkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBjaGVja19mb3Jfb3V0X29mX3Njb3BlX3ZhcmlhYmxlCSh0cmVlKTsKK2V4dGVybiB2b2lkIHByaW50X290aGVyX2JpbmRpbmdfc3RhY2sJCShzdHJ1Y3QgY3BfYmluZGluZ19sZXZlbCAqKTsKK2V4dGVybiB0cmVlIG1heWJlX3B1c2hfZGVjbAkJCSh0cmVlKTsKKworLyogZGVjbC5jICovCitleHRlcm4gdHJlZSBwb3BsZXZlbAkJCQkoaW50LCBpbnQsIGludCk7CitleHRlcm4gdm9pZCBjeHhfaW5pdF9kZWNsX3Byb2Nlc3NpbmcJCSh2b2lkKTsKK2VudW0gY3BfdHJlZV9ub2RlX3N0cnVjdHVyZV9lbnVtIGNwX3RyZWVfbm9kZV9zdHJ1Y3R1cmUKKwkJCQkJCSh1bmlvbiBsYW5nX3RyZWVfbm9kZSAqKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9zY29wZQkJCSh2b2lkKTsKK2V4dGVybiB2b2lkIHB1c2hfc3dpdGNoCQkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIHBvcF9zd2l0Y2gJCQkJKHZvaWQpOworZXh0ZXJuIHRyZWUgbWFrZV9sYW1iZGFfbmFtZQkJCSh2b2lkKTsKK2V4dGVybiBpbnQgZGVjbHNfbWF0Y2gJCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgZHVwbGljYXRlX2RlY2xzCQkJKHRyZWUsIHRyZWUsIGJvb2wpOworZXh0ZXJuIHRyZWUgZGVjbGFyZV9sb2NhbF9sYWJlbAkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGRlZmluZV9sYWJlbAkJCShsb2NhdGlvbl90LCB0cmVlKTsKK2V4dGVybiB2b2lkIGNoZWNrX2dvdG8JCQkJKHRyZWUpOworZXh0ZXJuIGJvb2wgY2hlY2tfb21wX3JldHVybgkJCSh2b2lkKTsKK2V4dGVybiB0cmVlIG1ha2VfdHlwZW5hbWVfdHlwZQkJCSh0cmVlLCB0cmVlLCBlbnVtIHRhZ190eXBlcywgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgbWFrZV91bmJvdW5kX2NsYXNzX3RlbXBsYXRlCQkodHJlZSwgdHJlZSwgdHJlZSwgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgYnVpbGRfbGlicmFyeV9mbl9wdHIJCShjb25zdCBjaGFyICosIHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfY3BfbGlicmFyeV9mbl9wdHIJCShjb25zdCBjaGFyICosIHRyZWUpOworZXh0ZXJuIHRyZWUgcHVzaF9saWJyYXJ5X2ZuCQkJKHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgcHVzaF92b2lkX2xpYnJhcnlfZm4JCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIHB1c2hfdGhyb3dfbGlicmFyeV9mbgkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgY2hlY2tfdGFnX2RlY2wJCQkoY3BfZGVjbF9zcGVjaWZpZXJfc2VxICopOworZXh0ZXJuIHRyZWUgc2hhZG93X3RhZwkJCQkoY3BfZGVjbF9zcGVjaWZpZXJfc2VxICopOworZXh0ZXJuIHRyZWUgZ3Jva3R5cGVuYW1lCQkJKGNwX2RlY2xfc3BlY2lmaWVyX3NlcSAqLCBjb25zdCBjcF9kZWNsYXJhdG9yICosIGJvb2wpOworZXh0ZXJuIHRyZWUgc3RhcnRfZGVjbAkJCQkoY29uc3QgY3BfZGVjbGFyYXRvciAqLCBjcF9kZWNsX3NwZWNpZmllcl9zZXEgKiwgaW50LCB0cmVlLCB0cmVlLCB0cmVlICopOworZXh0ZXJuIHZvaWQgc3RhcnRfZGVjbF8xCQkJKHRyZWUsIGJvb2wpOworZXh0ZXJuIGJvb2wgY2hlY2tfYXJyYXlfaW5pdGlhbGl6ZXIJCSh0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGNwX2ZpbmlzaF9kZWNsCQkJKHRyZWUsIHRyZWUsIGJvb2wsIHRyZWUsIGludCk7CitleHRlcm4gaW50IGNwX2NvbXBsZXRlX2FycmF5X3R5cGUJCSh0cmVlICosIHRyZWUsIGJvb2wpOworZXh0ZXJuIHRyZWUgYnVpbGRfcHRybWVtZnVuY190eXBlCQkodHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9wdHJtZW1fdHlwZQkJCSh0cmVlLCB0cmVlKTsKKy8qIHRoZSBncm9rZGVjbGFyYXRvciBwcm90b3R5cGUgaXMgaW4gZGVjbC5oICovCitleHRlcm4gdHJlZSBidWlsZF90aGlzX3Bhcm0JCQkodHJlZSwgY3BfY3ZfcXVhbHMpOworZXh0ZXJuIGludCBjb3B5X2ZuX3AJCQkJKGNvbnN0X3RyZWUpOworZXh0ZXJuIGJvb2wgbW92ZV9mbl9wICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X3RyZWUpOworZXh0ZXJuIHRyZWUgZ2V0X3Njb3BlX29mX2RlY2xhcmF0b3IJCShjb25zdCBjcF9kZWNsYXJhdG9yICopOworZXh0ZXJuIHZvaWQgZ3Jva19zcGVjaWFsX21lbWJlcl9wcm9wZXJ0aWVzCSh0cmVlKTsKK2V4dGVybiBpbnQgZ3Jva19jdG9yX3Byb3BlcnRpZXMJCQkoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CitleHRlcm4gYm9vbCBncm9rX29wX3Byb3BlcnRpZXMJCQkodHJlZSwgYm9vbCk7CitleHRlcm4gdHJlZSB4cmVmX3RhZwkJCQkoZW51bSB0YWdfdHlwZXMsIHRyZWUsIHRhZ19zY29wZSwgYm9vbCk7CitleHRlcm4gdHJlZSB4cmVmX3RhZ19mcm9tX3R5cGUJCQkodHJlZSwgdHJlZSwgdGFnX3Njb3BlKTsKK2V4dGVybiBib29sIHhyZWZfYmFzZXR5cGVzCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgc3RhcnRfZW51bQkJCQkodHJlZSwgdHJlZSwgYm9vbCk7CitleHRlcm4gdm9pZCBmaW5pc2hfZW51bQkJCQkodHJlZSk7CitleHRlcm4gdm9pZCBidWlsZF9lbnVtZXJhdG9yCQkJKHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgbG9va3VwX2VudW1lcmF0b3IJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBzdGFydF9wcmVwYXJzZWRfZnVuY3Rpb24JCSh0cmVlLCB0cmVlLCBpbnQpOworZXh0ZXJuIGludCBzdGFydF9mdW5jdGlvbgkJCShjcF9kZWNsX3NwZWNpZmllcl9zZXEgKiwgY29uc3QgY3BfZGVjbGFyYXRvciAqLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJlZ2luX2Z1bmN0aW9uX2JvZHkJCQkodm9pZCk7CitleHRlcm4gdm9pZCBmaW5pc2hfZnVuY3Rpb25fYm9keQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgb3V0ZXJfY3VybHlfYnJhY2VfYmxvY2sJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGZpbmlzaF9mdW5jdGlvbgkJCShpbnQpOworZXh0ZXJuIHRyZWUgZ3Jva21ldGhvZAkJCQkoY3BfZGVjbF9zcGVjaWZpZXJfc2VxICosIGNvbnN0IGNwX2RlY2xhcmF0b3IgKiwgdHJlZSk7CitleHRlcm4gdm9pZCBtYXliZV9yZWdpc3Rlcl9pbmNvbXBsZXRlX3ZhcgkodHJlZSk7CitleHRlcm4gdm9pZCBtYXliZV9jb21tb25pemVfdmFyCQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgY29tcGxldGVfdmFycwkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9zdG10CQkJCSh2b2lkKTsKK2V4dGVybiB0cmVlIHN0YXRpY19mbl90eXBlCQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgcmV2ZXJ0X3N0YXRpY19tZW1iZXJfZm4JCSh0cmVlKTsKK2V4dGVybiB2b2lkIGZpeHVwX2Fub255bW91c19hZ2dyCQkodHJlZSk7CitleHRlcm4gaW50IGNoZWNrX3N0YXRpY192YXJpYWJsZV9kZWZpbml0aW9uCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGNvbXB1dGVfYXJyYXlfaW5kZXhfdHlwZQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgY2hlY2tfZGVmYXVsdF9hcmd1bWVudAkJKHRyZWUsIHRyZWUpOwordHlwZWRlZiBpbnQgKCp3YWxrX25hbWVzcGFjZXNfZm4pCQkodHJlZSwgdm9pZCAqKTsKK2V4dGVybiBpbnQgd2Fsa19uYW1lc3BhY2VzCQkJKHdhbGtfbmFtZXNwYWNlc19mbiwKKwkJCQkJCSB2b2lkICopOworZXh0ZXJuIGludCB3cmFwdXBfZ2xvYmFsc19mb3JfbmFtZXNwYWNlCQkodHJlZSwgdm9pZCAqKTsKK2V4dGVybiB0cmVlIGNyZWF0ZV9pbXBsaWNpdF90eXBlZGVmCQkodHJlZSwgdHJlZSk7CitleHRlcm4gaW50IGxvY2FsX3ZhcmlhYmxlX3AJCQkoY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSByZWdpc3Rlcl9kdG9yX2ZuCQkJKHRyZWUpOworZXh0ZXJuIHRtcGxfc3BlY19raW5kIGN1cnJlbnRfdG1wbF9zcGVjX2tpbmQJKGludCk7CitleHRlcm4gdHJlZSBjcF9mbmFtZV9pbml0CQkJKGNvbnN0IGNoYXIgKiwgdHJlZSAqKTsKK2V4dGVybiB0cmVlIGN4eF9idWlsdGluX2Z1bmN0aW9uCQkodHJlZSBkZWNsKTsKK2V4dGVybiB0cmVlIGN4eF9idWlsdGluX2Z1bmN0aW9uX2V4dF9zY29wZQkodHJlZSBkZWNsKTsKK2V4dGVybiB0cmVlIGNoZWNrX2VsYWJvcmF0ZWRfdHlwZV9zcGVjaWZpZXIJKGVudW0gdGFnX3R5cGVzLCB0cmVlLCBib29sKTsKK2V4dGVybiB2b2lkIHdhcm5fZXh0ZXJuX3JlZGVjbGFyZWRfc3RhdGljCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGN4eF9jb21kYXRfZ3JvdXAJCQkodHJlZSk7CitleHRlcm4gYm9vbCBjcF9taXNzaW5nX25vcmV0dXJuX29rX3AJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGluaXRpYWxpemVfYXJ0aWZpY2lhbF92YXIJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGNoZWNrX3Zhcl90eXBlCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgcmVzaGFwZV9pbml0ICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIG5leHRfaW5pdGlhbGl6YWJsZV9maWVsZCAodHJlZSk7CisKK2V4dGVybiBib29sIGRlZmVyX21hcmtfdXNlZF9jYWxsczsKK2V4dGVybiBHVFkoKCkpIFZFQyh0cmVlLCBnYykgKmRlZmVycmVkX21hcmtfdXNlZF9jYWxsczsKK2V4dGVybiB0cmVlIGZpbmlzaF9jYXNlX2xhYmVsCQkJKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgY3h4X21heWJlX2J1aWxkX2NsZWFudXAJCSh0cmVlKTsKKworLyogaW4gZGVjbDIuYyAqLworZXh0ZXJuIGJvb2wgY2hlY2tfamF2YV9tZXRob2QJCQkodHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9tZW1mbl90eXBlCQkJKHRyZWUsIHRyZWUsIGNwX2N2X3F1YWxzKTsKK2V4dGVybiB0cmVlIGNoYW5nZV9yZXR1cm5fdHlwZQkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIG1heWJlX3JldHJvZml0X2luX2NocmcJCSh0cmVlKTsKK2V4dGVybiB2b2lkIG1heWJlX21ha2Vfb25lX29ubHkJCQkodHJlZSk7CitleHRlcm4gYm9vbCB2YWd1ZV9saW5rYWdlX3AJCQkodHJlZSk7CitleHRlcm4gdm9pZCBncm9rY2xhc3NmbgkJCQkodHJlZSwgdHJlZSwKKwkJCQkJCSBlbnVtIG92ZXJsb2FkX2ZsYWdzKTsKK2V4dGVybiB0cmVlIGdyb2tfYXJyYXlfZGVjbAkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGRlbGV0ZV9zYW5pdHkJCQkodHJlZSwgdHJlZSwgYm9vbCwgaW50KTsKK2V4dGVybiB0cmVlIGNoZWNrX2NsYXNzZm4JCQkodHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBjaGVja19tZW1iZXJfdGVtcGxhdGUJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGdyb2tmaWVsZCAoY29uc3QgY3BfZGVjbGFyYXRvciAqLCBjcF9kZWNsX3NwZWNpZmllcl9zZXEgKiwKKwkJICAgICAgIHRyZWUsIGJvb2wsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgZ3Jva2JpdGZpZWxkIChjb25zdCBjcF9kZWNsYXJhdG9yICosIGNwX2RlY2xfc3BlY2lmaWVyX3NlcSAqLAorCQkJICB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGNwX3JlY29uc3RydWN0X2NvbXBsZXhfdHlwZQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgY3BsdXNfZGVjbF9hdHRyaWJ1dGVzCQkodHJlZSAqLCB0cmVlLCBpbnQpOworZXh0ZXJuIHZvaWQgZmluaXNoX2Fub25fdW5pb24JCQkodHJlZSk7CitleHRlcm4gdm9pZCBjcF93cml0ZV9nbG9iYWxfZGVjbGFyYXRpb25zCSh2b2lkKTsKK2V4dGVybiB0cmVlIGNvZXJjZV9uZXdfdHlwZQkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGNvZXJjZV9kZWxldGVfdHlwZQkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGNvbWRhdF9saW5rYWdlCQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgZGV0ZXJtaW5lX3Zpc2liaWxpdHkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGNvbnN0cmFpbl9jbGFzc192aXNpYmlsaXR5CQkodHJlZSk7CitleHRlcm4gdm9pZCBpbXBvcnRfZXhwb3J0X2RlY2wJCQkodHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9jbGVhbnVwCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfb2Zmc2V0X3JlZl9jYWxsX2Zyb21fdHJlZQkodHJlZSwgVkVDKHRyZWUsZ2MpICoqKTsKK2V4dGVybiB2b2lkIGNoZWNrX2RlZmF1bHRfYXJncwkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIG1hcmtfdXNlZAkJCQkodHJlZSk7CitleHRlcm4gdm9pZCBmaW5pc2hfc3RhdGljX2RhdGFfbWVtYmVyX2RlY2wJKHRyZWUsIHRyZWUsIGJvb2wsIHRyZWUsIGludCk7CitleHRlcm4gdHJlZSBjcF9idWlsZF9wYXJtX2RlY2wJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBnZXRfZ3VhcmQJCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgZ2V0X2d1YXJkX2NvbmQJCQkodHJlZSk7CitleHRlcm4gdHJlZSBzZXRfZ3VhcmQJCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgY3h4X2NhbGxncmFwaF9hbmFseXplX2V4cHIJCSh0cmVlICosIGludCAqKTsKK2V4dGVybiB2b2lkIG1hcmtfbmVlZGVkCQkJCSh0cmVlKTsKK2V4dGVybiBib29sIGRlY2xfbmVlZGVkX3AJCQkodHJlZSk7CitleHRlcm4gdm9pZCBub3RlX3ZhZ3VlX2xpbmthZ2VfZm4JCSh0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2FydGlmaWNpYWxfcGFybQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIGJvb2wgcG9zc2libHlfaW5saW5lZF9wCQkJKHRyZWUpOworZXh0ZXJuIGludCBwYXJtX2luZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRyZWUpOworCisvKiBpbiBlcnJvci5jICovCitleHRlcm4gdm9pZCBpbml0X2Vycm9yCQkJCSh2b2lkKTsKK2V4dGVybiBjb25zdCBjaGFyICp0eXBlX2FzX3N0cmluZwkJKHRyZWUsIGludCk7CitleHRlcm4gY29uc3QgY2hhciAqdHlwZV9hc19zdHJpbmdfdHJhbnNsYXRlCSh0cmVlLCBpbnQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmRlY2xfYXNfc3RyaW5nCQkodHJlZSwgaW50KTsKK2V4dGVybiBjb25zdCBjaGFyICpkZWNsX2FzX3N0cmluZ190cmFuc2xhdGUJKHRyZWUsIGludCk7CitleHRlcm4gY29uc3QgY2hhciAqZXhwcl9hc19zdHJpbmcJCSh0cmVlLCBpbnQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmxhbmdfZGVjbF9uYW1lCQkodHJlZSwgaW50LCBib29sKTsKK2V4dGVybiBjb25zdCBjaGFyICpsYW5ndWFnZV90b19zdHJpbmcJCShlbnVtIGxhbmd1YWdlcyk7CitleHRlcm4gY29uc3QgY2hhciAqY2xhc3Nfa2V5X29yX2VudW1fYXNfc3RyaW5nCSh0cmVlKTsKK2V4dGVybiB2b2lkIHByaW50X2luc3RhbnRpYXRpb25fY29udGV4dAkJKHZvaWQpOworZXh0ZXJuIHZvaWQgbWF5YmVfd2Fybl92YXJpYWRpY190ZW1wbGF0ZXMgICAgICAgKHZvaWQpOworZXh0ZXJuIHZvaWQgbWF5YmVfd2Fybl9jcHAweAkJCShjcHAweF93YXJuX3N0ciBzdHIpOworZXh0ZXJuIGJvb2wgcGVkd2Fybl9jeHg5OCAgICAgICAgICAgICAgICAgICAgICAgKGxvY2F0aW9uX3QsIGludCwgY29uc3QgY2hhciAqLCAuLi4pIEFUVFJJQlVURV9HQ0NfQ1hYRElBRygzLDQpOworCisvKiBpbiBleGNlcHQuYyAqLworZXh0ZXJuIHZvaWQgaW5pdF9leGNlcHRpb25fcHJvY2Vzc2luZwkJKHZvaWQpOworZXh0ZXJuIHRyZWUgZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrCQkodHJlZSk7CitleHRlcm4gdm9pZCBleHBhbmRfZW5kX2NhdGNoX2Jsb2NrCQkodm9pZCk7CitleHRlcm4gdHJlZSBidWlsZF9leGNfcHRyCQkJKHZvaWQpOworZXh0ZXJuIHRyZWUgYnVpbGRfdGhyb3cJCQkJKHRyZWUpOworZXh0ZXJuIGludCBub3Rocm93X2xpYmZuX3AJCQkoY29uc3RfdHJlZSk7CitleHRlcm4gdm9pZCBjaGVja19oYW5kbGVycwkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGNob29zZV9wZXJzb25hbGl0eV9yb3V0aW5lCQkoZW51bSBsYW5ndWFnZXMpOworZXh0ZXJuIHRyZWUgZWhfdHlwZV9pbmZvCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgYmVnaW5fZWhfc3BlY19ibG9jawkJCSh2b2lkKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9laF9zcGVjX2Jsb2NrCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9laF90eXBlX3R5cGUJCQkodHJlZSk7CisKKy8qIGluIGV4cHIuYyAqLworZXh0ZXJuIHRyZWUgY3BsdXNfZXhwYW5kX2NvbnN0YW50CQkodHJlZSk7CisKKy8qIGZyaWVuZC5jICovCitleHRlcm4gaW50IGlzX2ZyaWVuZAkJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBtYWtlX2ZyaWVuZF9jbGFzcwkJCSh0cmVlLCB0cmVlLCBib29sKTsKK2V4dGVybiB2b2lkIGFkZF9mcmllbmQJCQkJKHRyZWUsIHRyZWUsIGJvb2wpOworZXh0ZXJuIHRyZWUgZG9fZnJpZW5kCQkJCSh0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLCBlbnVtIG92ZXJsb2FkX2ZsYWdzLCBib29sKTsKKworLyogaW4gaW5pdC5jICovCitleHRlcm4gdHJlZSBleHBhbmRfbWVtYmVyX2luaXQJCQkodHJlZSk7CitleHRlcm4gdm9pZCBlbWl0X21lbV9pbml0aWFsaXplcnMJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2FnZ3JfaW5pdAkJCSh0cmVlLCB0cmVlLCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIGludCBpc19jbGFzc190eXBlCQkJKHRyZWUsIGludCk7CitleHRlcm4gdHJlZSBnZXRfdHlwZV92YWx1ZQkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX3plcm9faW5pdAkJCSh0cmVlLCB0cmVlLCBib29sKTsKK2V4dGVybiB0cmVlIGJ1aWxkX3ZhbHVlX2luaXQJCQkodHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF92YWx1ZV9pbml0X25vY3RvcgkJKHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfb2Zmc2V0X3JlZgkJCSh0cmVlLCB0cmVlLCBib29sKTsKK2V4dGVybiB0cmVlIGJ1aWxkX25ldwkJCQkoVkVDKHRyZWUsZ2MpICoqLCB0cmVlLCB0cmVlLAorCQkJCQkJIFZFQyh0cmVlLGdjKSAqKiwgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGJ1aWxkX3ZlY19pbml0CQkJKHRyZWUsIHRyZWUsIHRyZWUsIGJvb2wsIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBidWlsZF9kZWxldGUJCQkodHJlZSwgdHJlZSwKKwkJCQkJCSBzcGVjaWFsX2Z1bmN0aW9uX2tpbmQsCisJCQkJCQkgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgcHVzaF9iYXNlX2NsZWFudXBzCQkJKHZvaWQpOworZXh0ZXJuIHRyZWUgYnVpbGRfdmVjX2RlbGV0ZQkJCSh0cmVlLCB0cmVlLAorCQkJCQkJIHNwZWNpYWxfZnVuY3Rpb25fa2luZCwgaW50KTsKK2V4dGVybiB0cmVlIGNyZWF0ZV90ZW1wb3JhcnlfdmFyCQkodHJlZSk7CitleHRlcm4gdm9pZCBpbml0aWFsaXplX3Z0YmxfcHRycwkJKHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfamF2YV9jbGFzc19yZWYJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGludGVncmFsX2NvbnN0YW50X3ZhbHVlCQkodHJlZSk7CisKKy8qIGluIGxleC5jICovCitleHRlcm4gdm9pZCBjeHhfZHVwX2xhbmdfc3BlY2lmaWNfZGVjbAkJKHRyZWUpOworZXh0ZXJuIHZvaWQgeXl1bmdldGMJCQkJKGludCwgaW50KTsKKworZXh0ZXJuIHRyZWUgdW5xdWFsaWZpZWRfbmFtZV9sb29rdXBfZXJyb3IJKHRyZWUpOworZXh0ZXJuIHRyZWUgdW5xdWFsaWZpZWRfZm5fbG9va3VwX2Vycm9yCQkodHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9sYW5nX2RlY2wJCQkoZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgcmV0cm9maXRfbGFuZ19kZWNsCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgY29weV9kZWNsCQkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGNvcHlfdHlwZQkJCQkodHJlZSk7CitleHRlcm4gdHJlZSBjeHhfbWFrZV90eXBlCQkJKGVudW0gdHJlZV9jb2RlKTsKK2V4dGVybiB0cmVlIG1ha2VfY2xhc3NfdHlwZQkJCShlbnVtIHRyZWVfY29kZSk7CitleHRlcm4gYm9vbCBjeHhfaW5pdAkJCQkodm9pZCk7CitleHRlcm4gdm9pZCBjeHhfZmluaXNoCQkJCSh2b2lkKTsKK2V4dGVybiBib29sIGluX21haW5faW5wdXRfY29udGV4dAkJKHZvaWQpOworCisvKiBpbiBtZXRob2QuYyAqLworZXh0ZXJuIHZvaWQgaW5pdF9tZXRob2QJCQkJKHZvaWQpOworZXh0ZXJuIHRyZWUgbWFrZV90aHVuawkJCQkodHJlZSwgYm9vbCwgdHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBmaW5pc2hfdGh1bmsJCQkodHJlZSk7CitleHRlcm4gdm9pZCB1c2VfdGh1bmsJCQkJKHRyZWUsIGJvb2wpOworZXh0ZXJuIHZvaWQgc3ludGhlc2l6ZV9tZXRob2QJCQkodHJlZSk7CitleHRlcm4gdHJlZSBsYXppbHlfZGVjbGFyZV9mbgkJCShzcGVjaWFsX2Z1bmN0aW9uX2tpbmQsCisJCQkJCQkgdHJlZSk7CitleHRlcm4gdHJlZSBza2lwX2FydGlmaWNpYWxfcGFybXNfZm9yCQkoY29uc3RfdHJlZSwgdHJlZSk7CitleHRlcm4gaW50IG51bV9hcnRpZmljaWFsX3Bhcm1zX2ZvcgkJKGNvbnN0X3RyZWUpOworZXh0ZXJuIHRyZWUgbWFrZV9hbGlhc19mb3IJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBsb2NhdGVfY29weQkJCQkodHJlZSwgdm9pZCAqKTsKK2V4dGVybiB0cmVlIGxvY2F0ZV9jdG9yCQkJCSh0cmVlLCB2b2lkICopOworZXh0ZXJuIHRyZWUgbG9jYXRlX2R0b3IJCQkJKHRyZWUsIHZvaWQgKik7CisKKy8qIEluIG9wdGltaXplLmMgKi8KK2V4dGVybiBib29sIG1heWJlX2Nsb25lX2JvZHkJCQkodHJlZSk7CisKKy8qIGluIHB0LmMgKi8KK2V4dGVybiBib29sIGNoZWNrX3RlbXBsYXRlX3NoYWRvdwkJKHRyZWUpOworZXh0ZXJuIHRyZWUgZ2V0X2lubmVybW9zdF90ZW1wbGF0ZV9hcmdzCQkodHJlZSwgaW50KTsKK2V4dGVybiB2b2lkIG1heWJlX2JlZ2luX21lbWJlcl90ZW1wbGF0ZV9wcm9jZXNzaW5nICh0cmVlKTsKK2V4dGVybiB2b2lkIG1heWJlX2VuZF9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZyAodm9pZCk7CitleHRlcm4gdHJlZSBmaW5pc2hfbWVtYmVyX3RlbXBsYXRlX2RlY2wJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGJlZ2luX3RlbXBsYXRlX3Bhcm1fbGlzdAkJKHZvaWQpOworZXh0ZXJuIGJvb2wgYmVnaW5fc3BlY2lhbGl6YXRpb24JCSh2b2lkKTsKK2V4dGVybiB2b2lkIHJlc2V0X3NwZWNpYWxpemF0aW9uCQkodm9pZCk7CitleHRlcm4gdm9pZCBlbmRfc3BlY2lhbGl6YXRpb24JCQkodm9pZCk7CitleHRlcm4gdm9pZCBiZWdpbl9leHBsaWNpdF9pbnN0YW50aWF0aW9uCSh2b2lkKTsKK2V4dGVybiB2b2lkIGVuZF9leHBsaWNpdF9pbnN0YW50aWF0aW9uCQkodm9pZCk7CitleHRlcm4gdHJlZSBjaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbgkodHJlZSwgdHJlZSwgaW50LCBpbnQpOworZXh0ZXJuIHRyZWUgbWFrZV9hdXRvCQkJCSh2b2lkKTsKK2V4dGVybiB0cmVlIGRvX2F1dG9fZGVkdWN0aW9uCQkJKHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgdHlwZV91c2VzX2F1dG8JCQkodHJlZSk7CitleHRlcm4gdm9pZCBhcHBlbmRfdHlwZV90b190ZW1wbGF0ZV9mb3JfYWNjZXNzX2NoZWNrICh0cmVlLCB0cmVlLCB0cmVlLAorCQkJCQkJICAgICAgbG9jYXRpb25fdCk7CitleHRlcm4gdHJlZSBzcGxpY2VfbGF0ZV9yZXR1cm5fdHlwZQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIGJvb2wgaXNfYXV0bwkJCQkoY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSBwcm9jZXNzX3RlbXBsYXRlX3Bhcm0JCSh0cmVlLCBsb2NhdGlvbl90LCB0cmVlLCAKKwkJCQkJCSBib29sLCBib29sKTsKK2V4dGVybiB0cmVlIGVuZF90ZW1wbGF0ZV9wYXJtX2xpc3QJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGVuZF90ZW1wbGF0ZV9kZWNsCQkJKHZvaWQpOworZXh0ZXJuIHRyZWUgbWF5YmVfdXBkYXRlX2RlY2xfdHlwZQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIGJvb2wgY2hlY2tfZGVmYXVsdF90bXBsX2FyZ3MgICAgICAgICAgICAgKHRyZWUsIHRyZWUsIGludCwgaW50LCBpbnQpOworZXh0ZXJuIHRyZWUgcHVzaF90ZW1wbGF0ZV9kZWNsCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgcHVzaF90ZW1wbGF0ZV9kZWNsX3JlYWwJCSh0cmVlLCBib29sKTsKK2V4dGVybiBib29sIHJlZGVjbGFyZV9jbGFzc190ZW1wbGF0ZQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgbG9va3VwX3RlbXBsYXRlX2NsYXNzCQkodHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwKKwkJCQkJCSBpbnQsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGxvb2t1cF90ZW1wbGF0ZV9mdW5jdGlvbgkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIGludCB1c2VzX3RlbXBsYXRlX3Bhcm1zCQkJKHRyZWUpOworZXh0ZXJuIGludCB1c2VzX3RlbXBsYXRlX3Bhcm1zX2xldmVsCQkodHJlZSwgaW50KTsKK2V4dGVybiB0cmVlIGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlCQkodHJlZSk7CitleHRlcm4gdHJlZSBpbnN0YW50aWF0ZV90ZW1wbGF0ZQkJKHRyZWUsIHRyZWUsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiBpbnQgZm5fdHlwZV91bmlmaWNhdGlvbgkJCSh0cmVlLCB0cmVlLCB0cmVlLAorCQkJCQkJIGNvbnN0IHRyZWUgKiwgdW5zaWduZWQgaW50LAorCQkJCQkJIHRyZWUsIHVuaWZpY2F0aW9uX2tpbmRfdCwgaW50KTsKK2V4dGVybiB2b2lkIG1hcmtfZGVjbF9pbnN0YW50aWF0ZWQJCSh0cmVlLCBpbnQpOworZXh0ZXJuIGludCBtb3JlX3NwZWNpYWxpemVkX2ZuCQkJKHRyZWUsIHRyZWUsIGludCk7CitleHRlcm4gdm9pZCBkb19kZWNsX2luc3RhbnRpYXRpb24JCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGRvX3R5cGVfaW5zdGFudGlhdGlvbgkJKHRyZWUsIHRyZWUsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiBib29sIGFsd2F5c19pbnN0YW50aWF0ZV9wCQkodHJlZSk7CitleHRlcm4gdHJlZSBpbnN0YW50aWF0ZV9kZWNsCQkJKHRyZWUsIGludCwgYm9vbCk7CitleHRlcm4gaW50IGNvbXBfdGVtcGxhdGVfcGFybXMJCQkoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CitleHRlcm4gYm9vbCB1c2VzX3BhcmFtZXRlcl9wYWNrcyAgICAgICAgICAgICAgICAodHJlZSk7CitleHRlcm4gYm9vbCB0ZW1wbGF0ZV9wYXJhbWV0ZXJfcGFja19wICAgICAgICAgICAoY29uc3RfdHJlZSk7CitleHRlcm4gYm9vbCBmdW5jdGlvbl9wYXJhbWV0ZXJfcGFja19wCQkoY29uc3RfdHJlZSk7CitleHRlcm4gYm9vbCBmdW5jdGlvbl9wYXJhbWV0ZXJfZXhwYW5kZWRfZnJvbV9wYWNrX3AgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgbWFrZV9wYWNrX2V4cGFuc2lvbiAgICAgICAgICAgICAgICAgKHRyZWUpOworZXh0ZXJuIGJvb2wgY2hlY2tfZm9yX2JhcmVfcGFyYW1ldGVyX3BhY2tzICAgICAgKHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfdGVtcGxhdGVfaW5mbwkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGdldF90ZW1wbGF0ZV9pbmZvCQkJKGNvbnN0X3RyZWUpOworZXh0ZXJuIFZFQyhxdWFsaWZpZWRfdHlwZWRlZl91c2FnZV90LGdjKSogZ2V0X3R5cGVzX25lZWRpbmdfYWNjZXNzX2NoZWNrICh0cmVlKTsKK2V4dGVybiBpbnQgdGVtcGxhdGVfY2xhc3NfZGVwdGgJCQkodHJlZSk7CitleHRlcm4gaW50IGlzX3NwZWNpYWxpemF0aW9uX29mCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIGJvb2wgaXNfc3BlY2lhbGl6YXRpb25fb2ZfZnJpZW5kCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBnZXRfcGF0dGVybl9wYXJtCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIGludCBjb21wX3RlbXBsYXRlX2FyZ3MJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBtYXliZV9wcm9jZXNzX3BhcnRpYWxfc3BlY2lhbGl6YXRpb24gKHRyZWUpOworZXh0ZXJuIHRyZWUgbW9zdF9zcGVjaWFsaXplZF9pbnN0YW50aWF0aW9uCSh0cmVlKTsKK2V4dGVybiB2b2lkIHByaW50X2NhbmRpZGF0ZXMJCQkodHJlZSk7CitleHRlcm4gdm9pZCBpbnN0YW50aWF0ZV9wZW5kaW5nX3RlbXBsYXRlcwkoaW50KTsKK2V4dGVybiB0cmVlIHRzdWJzdF9kZWZhdWx0X2FyZ3VtZW50CQkodHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSB0c3Vic3QgKHRyZWUsIHRyZWUsIHRzdWJzdF9mbGFnc190LCB0cmVlKTsKK2V4dGVybiB0cmVlIHRzdWJzdF9jb3B5X2FuZF9idWlsZAkJKHRyZWUsIHRyZWUsIHRzdWJzdF9mbGFnc190LAorCQkJCQkJIHRyZWUsIGJvb2wsIGJvb2wpOworZXh0ZXJuIHRyZWUgbW9zdF9nZW5lcmFsX3RlbXBsYXRlCQkodHJlZSk7CitleHRlcm4gdHJlZSBnZXRfbW9zdGx5X2luc3RhbnRpYXRlZF9mdW5jdGlvbl90eXBlICh0cmVlKTsKK2V4dGVybiBpbnQgcHJvYmxlbWF0aWNfaW5zdGFudGlhdGlvbl9jaGFuZ2VkCSh2b2lkKTsKK2V4dGVybiB2b2lkIHJlY29yZF9sYXN0X3Byb2JsZW1hdGljX2luc3RhbnRpYXRpb24gKHZvaWQpOworZXh0ZXJuIHN0cnVjdCB0aW5zdF9sZXZlbCAqY3VycmVudF9pbnN0YW50aWF0aW9uKHZvaWQpOworZXh0ZXJuIHRyZWUgbWF5YmVfZ2V0X3RlbXBsYXRlX2RlY2xfZnJvbV90eXBlX2RlY2wgKHRyZWUpOworZXh0ZXJuIGludCBwcm9jZXNzaW5nX3RlbXBsYXRlX3Bhcm1saXN0OworZXh0ZXJuIGJvb2wgZGVwZW5kZW50X3R5cGVfcAkJCSh0cmVlKTsKK2V4dGVybiBib29sIGRlcGVuZGVudF9zY29wZV9wCQkJKHRyZWUpOworZXh0ZXJuIGJvb2wgYW55X2RlcGVuZGVudF90ZW1wbGF0ZV9hcmd1bWVudHNfcCAgKGNvbnN0X3RyZWUpOworZXh0ZXJuIGJvb2wgZGVwZW5kZW50X3RlbXBsYXRlX3AJCSh0cmVlKTsKK2V4dGVybiBib29sIGRlcGVuZGVudF90ZW1wbGF0ZV9pZF9wCQkodHJlZSwgdHJlZSk7CitleHRlcm4gYm9vbCB0eXBlX2RlcGVuZGVudF9leHByZXNzaW9uX3AJCSh0cmVlKTsKK2V4dGVybiBib29sIGFueV90eXBlX2RlcGVuZGVudF9hcmd1bWVudHNfcCAgICAgIChjb25zdCBWRUModHJlZSxnYykgKik7CitleHRlcm4gYm9vbCB0eXBlX2RlcGVuZGVudF9leHByZXNzaW9uX3BfcHVzaAkodHJlZSk7CitleHRlcm4gYm9vbCB2YWx1ZV9kZXBlbmRlbnRfZXhwcmVzc2lvbl9wCSh0cmVlKTsKK2V4dGVybiBib29sIGFueV92YWx1ZV9kZXBlbmRlbnRfZWxlbWVudHNfcCAgICAgIChjb25zdF90cmVlKTsKK2V4dGVybiBib29sIGRlcGVuZGVudF9vbXBfZm9yX3AJCQkodHJlZSwgdHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSByZXNvbHZlX3R5cGVuYW1lX3R5cGUJCSh0cmVlLCBib29sKTsKK2V4dGVybiB0cmVlIHRlbXBsYXRlX2Zvcl9zdWJzdGl0dXRpb24JCSh0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX25vbl9kZXBlbmRlbnRfZXhwcgkJKHRyZWUpOworZXh0ZXJuIHZvaWQgbWFrZV9hcmdzX25vbl9kZXBlbmRlbnQJCShWRUModHJlZSxnYykgKik7CitleHRlcm4gYm9vbCByZXJlZ2lzdGVyX3NwZWNpYWxpemF0aW9uCQkodHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBmb2xkX25vbl9kZXBlbmRlbnRfZXhwcgkJKHRyZWUpOworZXh0ZXJuIGJvb2wgZXhwbGljaXRfY2xhc3Nfc3BlY2lhbGl6YXRpb25fcCAgICAgKHRyZWUpOworZXh0ZXJuIGludCBwdXNoX3RpbnN0X2xldmVsICAgICAgICAgICAgICAgICAgICAgKHRyZWUpOworZXh0ZXJuIHZvaWQgcG9wX3RpbnN0X2xldmVsICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOworZXh0ZXJuIHN0cnVjdCB0aW5zdF9sZXZlbCAqb3V0ZXJtb3N0X3RpbnN0X2xldmVsKHZvaWQpOworZXh0ZXJuIGJvb2wgcGFyYW1ldGVyX29mX3RlbXBsYXRlX3AJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGluaXRfdGVtcGxhdGVfcHJvY2Vzc2luZwkJKHZvaWQpOworYm9vbCB0ZW1wbGF0ZV90ZW1wbGF0ZV9wYXJhbWV0ZXJfcAkJKGNvbnN0X3RyZWUpOworZXh0ZXJuIGJvb2wgcHJpbWFyeV90ZW1wbGF0ZV9pbnN0YW50aWF0aW9uX3AgICAgKGNvbnN0X3RyZWUpOworZXh0ZXJuIHRyZWUgZ2V0X3ByaW1hcnlfdGVtcGxhdGVfaW5uZXJtb3N0X3BhcmFtZXRlcnMJKGNvbnN0X3RyZWUpOworZXh0ZXJuIHRyZWUgZ2V0X3RlbXBsYXRlX3Bhcm1zX2F0X2xldmVsICh0cmVlLCBpbnQpOworZXh0ZXJuIHRyZWUgZ2V0X3RlbXBsYXRlX2lubmVybW9zdF9hcmd1bWVudHMJKGNvbnN0X3RyZWUpOworZXh0ZXJuIHRyZWUgZ2V0X3RlbXBsYXRlX2FyZ3VtZW50X3BhY2tfZWxlbXMJKGNvbnN0X3RyZWUpOworZXh0ZXJuIHRyZWUgZ2V0X2Z1bmN0aW9uX3RlbXBsYXRlX2RlY2wJCShjb25zdF90cmVlKTsKK2V4dGVybiB0cmVlIHJlc29sdmVfbm9uZGVkdWNlZF9jb250ZXh0CQkodHJlZSk7CisKKy8qIGluIHJlcG8uYyAqLworZXh0ZXJuIHZvaWQgaW5pdF9yZXBvCQkJCSh2b2lkKTsKK2V4dGVybiBpbnQgcmVwb19lbWl0X3AJCQkJKHRyZWUpOworZXh0ZXJuIGJvb2wgcmVwb19leHBvcnRfY2xhc3NfcAkJCShjb25zdF90cmVlKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9yZXBvCQkJCSh2b2lkKTsKKworLyogaW4gcnR0aS5jICovCisvKiBBIHZlY3RvciBvZiBhbGwgdGluZm8gZGVjbHMgdGhhdCBoYXZlbid0IGJlZW4gZW1pdHRlZCB5ZXQuICAqLworZXh0ZXJuIEdUWSgoKSkgVkVDKHRyZWUsZ2MpICp1bmVtaXR0ZWRfdGluZm9fZGVjbHM7CisKK2V4dGVybiB2b2lkIGluaXRfcnR0aV9wcm9jZXNzaW5nCQkodm9pZCk7CitleHRlcm4gdHJlZSBidWlsZF90eXBlaWQJCQkodHJlZSk7CitleHRlcm4gdHJlZSBnZXRfdGluZm9fZGVjbAkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGdldF90eXBlaWQJCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfaGVhZG9mCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfZHluYW1pY19jYXN0CQkJKHRyZWUsIHRyZWUsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB2b2lkIGVtaXRfc3VwcG9ydF90aW5mb3MJCQkodm9pZCk7CitleHRlcm4gYm9vbCBlbWl0X3RpbmZvX2RlY2wJCQkodHJlZSk7CisKKy8qIGluIHNlYXJjaC5jICovCitleHRlcm4gYm9vbCBhY2Nlc3NpYmxlX2Jhc2VfcAkJCSh0cmVlLCB0cmVlLCBib29sKTsKK2V4dGVybiB0cmVlIGxvb2t1cF9iYXNlCQkJCSh0cmVlLCB0cmVlLCBiYXNlX2FjY2VzcywKKwkJCQkJCSBiYXNlX2tpbmQgKik7CitleHRlcm4gdHJlZSBkY2FzdF9iYXNlX2hpbnQJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gaW50IGFjY2Vzc2libGVfcAkJCQkodHJlZSwgdHJlZSwgYm9vbCk7CitleHRlcm4gdHJlZSBsb29rdXBfZmllbGRfMQkJCSh0cmVlLCB0cmVlLCBib29sKTsKK2V4dGVybiB0cmVlIGxvb2t1cF9maWVsZAkJCSh0cmVlLCB0cmVlLCBpbnQsIGJvb2wpOworZXh0ZXJuIGludCBsb29rdXBfZm5maWVsZHNfMQkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiBpbnQgY2xhc3NfbWV0aG9kX2luZGV4X2Zvcl9mbgkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgbG9va3VwX2ZuZmllbGRzCQkJKHRyZWUsIHRyZWUsIGludCk7CitleHRlcm4gdHJlZSBsb29rdXBfbWVtYmVyCQkJKHRyZWUsIHRyZWUsIGludCwgYm9vbCk7CitleHRlcm4gaW50IGxvb2tfZm9yX292ZXJyaWRlcwkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGdldF9wdXJlX3ZpcnR1YWxzCQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgbWF5YmVfc3VwcHJlc3NfZGVidWdfaW5mbwkJKHRyZWUpOworZXh0ZXJuIHZvaWQgbm90ZV9kZWJ1Z19pbmZvX25lZWRlZAkJKHRyZWUpOworZXh0ZXJuIHZvaWQgcHJpbnRfc2VhcmNoX3N0YXRpc3RpY3MJCSh2b2lkKTsKK2V4dGVybiB2b2lkIHJlaW5pdF9zZWFyY2hfc3RhdGlzdGljcwkJKHZvaWQpOworZXh0ZXJuIHRyZWUgY3VycmVudF9zY29wZQkJCSh2b2lkKTsKK2V4dGVybiBpbnQgYXRfZnVuY3Rpb25fc2NvcGVfcAkJCSh2b2lkKTsKK2V4dGVybiBib29sIGF0X2NsYXNzX3Njb3BlX3AJCQkodm9pZCk7CitleHRlcm4gYm9vbCBhdF9uYW1lc3BhY2Vfc2NvcGVfcAkJKHZvaWQpOworZXh0ZXJuIHRyZWUgY29udGV4dF9mb3JfbmFtZV9sb29rdXAJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGxvb2t1cF9jb252ZXJzaW9ucwkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGJpbmZvX2Zyb21fdmJhc2UJCQkodHJlZSk7CitleHRlcm4gdHJlZSBiaW5mb19mb3JfdmJhc2UJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBsb29rX2Zvcl9vdmVycmlkZXNfaGVyZQkJKHRyZWUsIHRyZWUpOworI2RlZmluZSBkZnNfc2tpcF9iYXNlcyAoKHRyZWUpMSkKK2V4dGVybiB0cmVlIGRmc193YWxrX2FsbCAodHJlZSwgdHJlZSAoKikgKHRyZWUsIHZvaWQgKiksCisJCQkgIHRyZWUgKCopICh0cmVlLCB2b2lkICopLCB2b2lkICopOworZXh0ZXJuIHRyZWUgZGZzX3dhbGtfb25jZSAodHJlZSwgdHJlZSAoKikgKHRyZWUsIHZvaWQgKiksCisJCQkgICB0cmVlICgqKSAodHJlZSwgdm9pZCAqKSwgdm9pZCAqKTsKK2V4dGVybiB0cmVlIGJpbmZvX3ZpYV92aXJ0dWFsCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfYmFzZWxpbmsJCQkodHJlZSwgdHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBhZGp1c3RfcmVzdWx0X29mX3F1YWxpZmllZF9uYW1lX2xvb2t1cAorCQkJCQkJKHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgY29waWVkX2JpbmZvCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgb3JpZ2luYWxfYmluZm8JCQkodHJlZSwgdHJlZSk7CitleHRlcm4gaW50IHNoYXJlZF9tZW1iZXJfcAkJCSh0cmVlKTsKKworCisvKiBUaGUgcmVwcmVzZW50YXRpb24gb2YgYSBkZWZlcnJlZCBhY2Nlc3MgY2hlY2suICAqLworCit0eXBlZGVmIHN0cnVjdCBHVFkoKCkpIGRlZmVycmVkX2FjY2Vzc19jaGVjayB7CisgIC8qIFRoZSBiYXNlIGNsYXNzIGluIHdoaWNoIHRoZSBkZWNsYXJhdGlvbiBpcyByZWZlcmVuY2VkLiAqLworICB0cmVlIGJpbmZvOworICAvKiBUaGUgZGVjbGFyYXRpb24gd2hvc2UgYWNjZXNzIG11c3QgYmUgY2hlY2tlZC4gICovCisgIHRyZWUgZGVjbDsKKyAgLyogVGhlIGRlY2xhcmF0aW9uIHRoYXQgc2hvdWxkIGJlIHVzZWQgaW4gdGhlIGVycm9yIG1lc3NhZ2UuICAqLworICB0cmVlIGRpYWdfZGVjbDsKK30gZGVmZXJyZWRfYWNjZXNzX2NoZWNrOworREVGX1ZFQ19PKGRlZmVycmVkX2FjY2Vzc19jaGVjayk7CitERUZfVkVDX0FMTE9DX08oZGVmZXJyZWRfYWNjZXNzX2NoZWNrLGdjKTsKKworLyogaW4gc2VtYW50aWNzLmMgKi8KK2V4dGVybiB2b2lkIHB1c2hfZGVmZXJyaW5nX2FjY2Vzc19jaGVja3MJKGRlZmVycmluZ19raW5kKTsKK2V4dGVybiB2b2lkIHJlc3VtZV9kZWZlcnJpbmdfYWNjZXNzX2NoZWNrcwkodm9pZCk7CitleHRlcm4gdm9pZCBzdG9wX2RlZmVycmluZ19hY2Nlc3NfY2hlY2tzCSh2b2lkKTsKK2V4dGVybiB2b2lkIHBvcF9kZWZlcnJpbmdfYWNjZXNzX2NoZWNrcwkJKHZvaWQpOworZXh0ZXJuIFZFQyAoZGVmZXJyZWRfYWNjZXNzX2NoZWNrLGdjKSogZ2V0X2RlZmVycmVkX2FjY2Vzc19jaGVja3MJCSh2b2lkKTsKK2V4dGVybiB2b2lkIHBvcF90b19wYXJlbnRfZGVmZXJyaW5nX2FjY2Vzc19jaGVja3MgKHZvaWQpOworZXh0ZXJuIHZvaWQgcGVyZm9ybV9hY2Nlc3NfY2hlY2tzCQkoVkVDIChkZWZlcnJlZF9hY2Nlc3NfY2hlY2ssZ2MpKik7CitleHRlcm4gdm9pZCBwZXJmb3JtX2RlZmVycmVkX2FjY2Vzc19jaGVja3MJKHZvaWQpOworZXh0ZXJuIHZvaWQgcGVyZm9ybV9vcl9kZWZlcl9hY2Nlc3NfY2hlY2sJKHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIGludCBzdG10c19hcmVfZnVsbF9leHByc19wCQkodm9pZCk7CitleHRlcm4gdm9pZCBpbml0X2NwX3NlbWFudGljcwkJCSh2b2lkKTsKK2V4dGVybiB0cmVlIGRvX3BvcGxldmVsCQkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGFkZF9kZWNsX2V4cHIJCQkodHJlZSk7CitleHRlcm4gdHJlZSBmaW5pc2hfZXhwcl9zdG10CQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgYmVnaW5faWZfc3RtdAkJCSh2b2lkKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9pZl9zdG10X2NvbmQJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBmaW5pc2hfdGhlbl9jbGF1c2UJCQkodHJlZSk7CitleHRlcm4gdm9pZCBiZWdpbl9lbHNlX2NsYXVzZQkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9lbHNlX2NsYXVzZQkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9pZl9zdG10CQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgYmVnaW5fd2hpbGVfc3RtdAkJCSh2b2lkKTsKK2V4dGVybiB2b2lkIGZpbmlzaF93aGlsZV9zdG10X2NvbmQJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGZpbmlzaF93aGlsZV9zdG10CQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgYmVnaW5fZG9fc3RtdAkJCSh2b2lkKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9kb19ib2R5CQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgZmluaXNoX2RvX3N0bXQJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBmaW5pc2hfcmV0dXJuX3N0bXQJCQkodHJlZSk7CitleHRlcm4gdHJlZSBiZWdpbl9mb3Jfc3RtdAkJCSh2b2lkKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9mb3JfaW5pdF9zdG10CQkodHJlZSk7CitleHRlcm4gdm9pZCBmaW5pc2hfZm9yX2NvbmQJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBmaW5pc2hfZm9yX2V4cHIJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBmaW5pc2hfZm9yX3N0bXQJCQkodHJlZSk7CitleHRlcm4gdHJlZSBmaW5pc2hfYnJlYWtfc3RtdAkJCSh2b2lkKTsKK2V4dGVybiB0cmVlIGZpbmlzaF9jb250aW51ZV9zdG10CQkodm9pZCk7CitleHRlcm4gdHJlZSBiZWdpbl9zd2l0Y2hfc3RtdAkJCSh2b2lkKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9zd2l0Y2hfY29uZAkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9zd2l0Y2hfc3RtdAkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGZpbmlzaF9nb3RvX3N0bXQJCQkodHJlZSk7CitleHRlcm4gdHJlZSBiZWdpbl90cnlfYmxvY2sJCQkodm9pZCk7CitleHRlcm4gdm9pZCBmaW5pc2hfdHJ5X2Jsb2NrCQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgZmluaXNoX2hhbmRsZXJfc2VxdWVuY2UJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGJlZ2luX2Z1bmN0aW9uX3RyeV9ibG9jawkJKHRyZWUgKik7CitleHRlcm4gdm9pZCBmaW5pc2hfZnVuY3Rpb25fdHJ5X2Jsb2NrCQkodHJlZSk7CitleHRlcm4gdm9pZCBmaW5pc2hfZnVuY3Rpb25faGFuZGxlcl9zZXF1ZW5jZSAgICAodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBmaW5pc2hfY2xlYW51cF90cnlfYmxvY2sJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGJlZ2luX2hhbmRsZXIJCQkodm9pZCk7CitleHRlcm4gdm9pZCBmaW5pc2hfaGFuZGxlcl9wYXJtcwkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgZmluaXNoX2hhbmRsZXIJCQkodHJlZSk7CitleHRlcm4gdm9pZCBmaW5pc2hfY2xlYW51cAkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiBib29sIGxpdGVyYWxfdHlwZV9wICh0cmVlKTsKK2V4dGVybiB0cmVlIHZhbGlkYXRlX2NvbnN0ZXhwcl9mdW5kZWNsICh0cmVlKTsKK2V4dGVybiB0cmVlIGVuc3VyZV9saXRlcmFsX3R5cGVfZm9yX2NvbnN0ZXhwcl9vYmplY3QgKHRyZWUpOworCitlbnVtIHsKKyAgQkNTX05PX1NDT1BFID0gMSwKKyAgQkNTX1RSWV9CTE9DSyA9IDIsCisgIEJDU19GTl9CT0RZID0gNAorfTsKK2V4dGVybiB0cmVlIGJlZ2luX2NvbXBvdW5kX3N0bXQJCQkodW5zaWduZWQgaW50KTsKKworZXh0ZXJuIHZvaWQgZmluaXNoX2NvbXBvdW5kX3N0bXQJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGZpbmlzaF9hc21fc3RtdAkJCShpbnQsIHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUsCisJCQkJCQkgdHJlZSk7CitleHRlcm4gdHJlZSBmaW5pc2hfbGFiZWxfc3RtdAkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9sYWJlbF9kZWNsCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgZmluaXNoX3BhcmVudGhlc2l6ZWRfZXhwcgkJKHRyZWUpOworZXh0ZXJuIHRyZWUgZmluaXNoX25vbl9zdGF0aWNfZGF0YV9tZW1iZXIgICAgICAgKHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgYmVnaW5fc3RtdF9leHByCQkJKHZvaWQpOworZXh0ZXJuIHRyZWUgZmluaXNoX3N0bXRfZXhwcl9leHByCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBmaW5pc2hfc3RtdF9leHByCQkJKHRyZWUsIGJvb2wpOworZXh0ZXJuIHRyZWUgc3RtdF9leHByX3ZhbHVlX2V4cHIJCSh0cmVlKTsKK2Jvb2wgZW1wdHlfZXhwcl9zdG10X3AJCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgcGVyZm9ybV9rb2VuaWdfbG9va3VwCQkodHJlZSwgVkVDKHRyZWUsZ2MpICopOworZXh0ZXJuIHRyZWUgZmluaXNoX2NhbGxfZXhwcgkJCSh0cmVlLCBWRUModHJlZSxnYykgKiosIGJvb2wsCisJCQkJCQkgYm9vbCwgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgZmluaXNoX2luY3JlbWVudF9leHByCQkodHJlZSwgZW51bSB0cmVlX2NvZGUpOworZXh0ZXJuIHRyZWUgZmluaXNoX3RoaXNfZXhwcgkJCSh2b2lkKTsKK2V4dGVybiB0cmVlIGZpbmlzaF9wc2V1ZG9fZGVzdHJ1Y3Rvcl9leHByICAgICAgICh0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGZpbmlzaF91bmFyeV9vcF9leHByCQkoZW51bSB0cmVlX2NvZGUsIHRyZWUpOworZXh0ZXJuIHRyZWUgZmluaXNoX2NvbXBvdW5kX2xpdGVyYWwJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGZpbmlzaF9mbmFtZQkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGZpbmlzaF90cmFuc2xhdGlvbl91bml0CQkodm9pZCk7CitleHRlcm4gdHJlZSBmaW5pc2hfdGVtcGxhdGVfdHlwZV9wYXJtCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBmaW5pc2hfdGVtcGxhdGVfdGVtcGxhdGVfcGFybSAgICAgICAodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBiZWdpbl9jbGFzc19kZWZpbml0aW9uCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBmaW5pc2hfdGVtcGxhdGVfZGVjbAkJKHRyZWUpOworZXh0ZXJuIHRyZWUgZmluaXNoX3RlbXBsYXRlX3R5cGUJCSh0cmVlLCB0cmVlLCBpbnQpOworZXh0ZXJuIHRyZWUgZmluaXNoX2Jhc2Vfc3BlY2lmaWVyCQkodHJlZSwgdHJlZSwgYm9vbCk7CitleHRlcm4gdm9pZCBmaW5pc2hfbWVtYmVyX2RlY2xhcmF0aW9uCQkodHJlZSk7CitleHRlcm4gdm9pZCBxdWFsaWZpZWRfbmFtZV9sb29rdXBfZXJyb3IJCSh0cmVlLCB0cmVlLCB0cmVlLAorCQkJCQkJIGxvY2F0aW9uX3QpOworZXh0ZXJuIHRyZWUgZmluaXNoX2lkX2V4cHJlc3Npb24JCSh0cmVlLCB0cmVlLCB0cmVlLAorCQkJCQkJIGNwX2lkX2tpbmQgKiwKKwkJCQkJCSBib29sLCBib29sLCBib29sICosCisJCQkJCQkgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwKKwkJCQkJCSBjb25zdCBjaGFyICoqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uX3QpOworZXh0ZXJuIHRyZWUgZmluaXNoX3R5cGVvZgkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGZpbmlzaF9vZmZzZXRvZgkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9kZWNsX2NsZWFudXAJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBmaW5pc2hfZWhfY2xlYW51cAkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGVtaXRfYXNzb2NpYXRlZF90aHVua3MJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9tZW1faW5pdGlhbGl6ZXJzCQkodHJlZSk7CitleHRlcm4gdHJlZSBjaGVja190ZW1wbGF0ZV90ZW1wbGF0ZV9kZWZhdWx0X2FyZyAodHJlZSk7CitleHRlcm4gYm9vbCBleHBhbmRfb3JfZGVmZXJfZm5fMQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgZXhwYW5kX29yX2RlZmVyX2ZuCQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgYWRkX3R5cGVkZWZfdG9fY3VycmVudF90ZW1wbGF0ZV9mb3JfYWNjZXNzX2NoZWNrICh0cmVlLCB0cmVlLAorCQkJCQkJCSAgICAgIGxvY2F0aW9uX3QpOworZXh0ZXJuIHZvaWQgY2hlY2tfYWNjZXNzaWJpbGl0eV9vZl9xdWFsaWZpZWRfaWQgKHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgZmluaXNoX3F1YWxpZmllZF9pZF9leHByCQkodHJlZSwgdHJlZSwgYm9vbCwgYm9vbCwKKwkJCQkJCSBib29sLCBib29sKTsKK2V4dGVybiB2b2lkIHNpbXBsaWZ5X2FnZ3JfaW5pdF9leHByCQkodHJlZSAqKTsKK2V4dGVybiB2b2lkIGZpbmFsaXplX25ydgkJCSh0cmVlICosIHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgbm90ZV9kZWNsX2Zvcl9wY2gJCQkodHJlZSk7CitleHRlcm4gdHJlZSBmaW5pc2hfb21wX2NsYXVzZXMJCQkodHJlZSk7CitleHRlcm4gdm9pZCBmaW5pc2hfb21wX3RocmVhZHByaXZhdGUJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGJlZ2luX29tcF9zdHJ1Y3R1cmVkX2Jsb2NrCQkodm9pZCk7CitleHRlcm4gdHJlZSBmaW5pc2hfb21wX3N0cnVjdHVyZWRfYmxvY2sJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGJlZ2luX29tcF9wYXJhbGxlbAkJCSh2b2lkKTsKK2V4dGVybiB0cmVlIGZpbmlzaF9vbXBfcGFyYWxsZWwJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBiZWdpbl9vbXBfdGFzawkJCSh2b2lkKTsKK2V4dGVybiB0cmVlIGZpbmlzaF9vbXBfdGFzawkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGZpbmlzaF9vbXBfZm9yCQkJKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUsCisJCQkJCQkgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBmaW5pc2hfb21wX2F0b21pYwkJCShlbnVtIHRyZWVfY29kZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBmaW5pc2hfb21wX2JhcnJpZXIJCQkodm9pZCk7CitleHRlcm4gdm9pZCBmaW5pc2hfb21wX2ZsdXNoCQkJKHZvaWQpOworZXh0ZXJuIHZvaWQgZmluaXNoX29tcF90YXNrd2FpdAkJCSh2b2lkKTsKK2V4dGVybiBib29sIGN4eF9vbXBfY3JlYXRlX2NsYXVzZV9pbmZvCQkodHJlZSwgdHJlZSwgYm9vbCwgYm9vbCwgYm9vbCk7CitleHRlcm4gdHJlZSBiYXNlbGlua19mb3JfZm5zICAgICAgICAgICAgICAgICAgICAodHJlZSk7CitleHRlcm4gdm9pZCBmaW5pc2hfc3RhdGljX2Fzc2VydCAgICAgICAgICAgICAgICAodHJlZSwgdHJlZSwgbG9jYXRpb25fdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKTsKK2V4dGVybiB0cmVlIGRlc2NyaWJhYmxlX3R5cGUJCQkodHJlZSk7CitleHRlcm4gdHJlZSBmaW5pc2hfZGVjbHR5cGVfdHlwZSAgICAgICAgICAgICAgICAodHJlZSwgYm9vbCk7CitleHRlcm4gdHJlZSBmaW5pc2hfdHJhaXRfZXhwcgkJCShlbnVtIGNwX3RyYWl0X2tpbmQsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfbGFtYmRhX2V4cHIgICAgICAgICAgICAgICAgICAgKHZvaWQpOworZXh0ZXJuIHRyZWUgYnVpbGRfbGFtYmRhX29iamVjdAkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGJlZ2luX2xhbWJkYV90eXBlICAgICAgICAgICAgICAgICAgICh0cmVlKTsKK2V4dGVybiB0cmVlIGxhbWJkYV9jYXB0dXJlX2ZpZWxkX3R5cGUJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGxhbWJkYV9yZXR1cm5fdHlwZQkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGxhbWJkYV9mdW5jdGlvbgkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGFwcGx5X2xhbWJkYV9yZXR1cm5fdHlwZSAgICAgICAgICAgICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGFkZF9jYXB0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICh0cmVlLCB0cmVlLCB0cmVlLCBib29sLCBib29sKTsKK2V4dGVybiB0cmVlIGFkZF9kZWZhdWx0X2NhcHR1cmUgICAgICAgICAgICAgICAgICh0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIHJlZ2lzdGVyX2NhcHR1cmVfbWVtYmVycwkJKHRyZWUpOworZXh0ZXJuIHRyZWUgbGFtYmRhX2V4cHJfdGhpc19jYXB0dXJlICAgICAgICAgICAgKHRyZWUpOworZXh0ZXJuIHRyZWUgbm9ubGFtYmRhX21ldGhvZF9iYXNldHlwZQkJKHZvaWQpOworZXh0ZXJuIHZvaWQgbWF5YmVfYWRkX2xhbWJkYV9jb252X29wICAgICAgICAgICAgKHRyZWUpOworCisvKiBpbiB0cmVlLmMgKi8KK3ZvaWQgY3BfZnJlZV9sYW5nX2RhdGEgCQkJCSh0cmVlIHQpOworZXh0ZXJuIHRyZWUgZm9yY2VfdGFyZ2V0X2V4cHIJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF90YXJnZXRfZXhwcl93aXRoX3R5cGUJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGxhbmdfY2hlY2tfZmFpbGVkCQkJKGNvbnN0IGNoYXIgKiwgaW50LAorCQkJCQkJIGNvbnN0IGNoYXIgKikgQVRUUklCVVRFX05PUkVUVVJOOworZXh0ZXJuIHRyZWUgc3RhYmlsaXplX2V4cHIJCQkodHJlZSwgdHJlZSAqKTsKK2V4dGVybiB2b2lkIHN0YWJpbGl6ZV9jYWxsCQkJKHRyZWUsIHRyZWUgKik7CitleHRlcm4gdm9pZCBzdGFiaWxpemVfYWdncl9pbml0CQkJKHRyZWUsIHRyZWUgKik7CitleHRlcm4gYm9vbCBzdGFiaWxpemVfaW5pdAkJCSh0cmVlLCB0cmVlICopOworZXh0ZXJuIHRyZWUgYWRkX3N0bXRfdG9fY29tcG91bmQJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGluaXRfdHJlZQkJCQkodm9pZCk7CitleHRlcm4gYm9vbCBwb2RfdHlwZV9wCQkJCShjb25zdF90cmVlKTsKK2V4dGVybiBib29sIGxheW91dF9wb2RfdHlwZV9wCQkJKGNvbnN0X3RyZWUpOworZXh0ZXJuIGJvb2wgc3RkX2xheW91dF90eXBlX3AJCQkoY29uc3RfdHJlZSk7CitleHRlcm4gYm9vbCB0cml2aWFsX3R5cGVfcAkJCShjb25zdF90cmVlKTsKK2V4dGVybiBib29sIHR5cGVfaGFzX25vbnRyaXZpYWxfZGVmYXVsdF9pbml0CShjb25zdF90cmVlKTsKK2V4dGVybiBib29sIHR5cGVfaGFzX25vbnRyaXZpYWxfY29weV9pbml0CShjb25zdF90cmVlKTsKK2V4dGVybiBib29sIGNsYXNzX3RtcGxfaW1wbF9zcGVjX3AJCShjb25zdF90cmVlKTsKK2V4dGVybiBpbnQgemVyb19pbml0X3AJCQkJKGNvbnN0X3RyZWUpOworZXh0ZXJuIHRyZWUgc3RyaXBfdHlwZWRlZnMJCQkodHJlZSk7CitleHRlcm4gYm9vbCB0eXBlZGVmX3ZhcmlhbnRfcAkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGNwX3NldF91bmRlcmx5aW5nX3R5cGUJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGNvcHlfYmluZm8JCQkJKHRyZWUsIHRyZWUsIHRyZWUsCisJCQkJCQkgdHJlZSAqLCBpbnQpOworZXh0ZXJuIGludCBtZW1iZXJfcAkJCQkoY29uc3RfdHJlZSk7CitleHRlcm4gY3BfbHZhbHVlX2tpbmQgcmVhbF9sdmFsdWVfcAkJKHRyZWUpOworZXh0ZXJuIGJvb2wgbHZhbHVlX29yX3J2YWx1ZV93aXRoX2FkZHJlc3NfcAkoY29uc3RfdHJlZSk7CitleHRlcm4gYm9vbCBidWlsdGluX3ZhbGlkX2luX2NvbnN0YW50X2V4cHJfcCAgICAoY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9taW4JCQkJKGVudW0gdHJlZV9jb2RlLCB0cmVlLCAuLi4pOworZXh0ZXJuIHRyZWUgYnVpbGRfbWluX250CQkJKGVudW0gdHJlZV9jb2RlLCAuLi4pOworZXh0ZXJuIHRyZWUgYnVpbGRfbWluX25vbl9kZXAJCQkoZW51bSB0cmVlX2NvZGUsIHRyZWUsIC4uLik7CitleHRlcm4gdHJlZSBidWlsZF9taW5fbm9uX2RlcF9jYWxsX3ZlYwkJKHRyZWUsIHRyZWUsIFZFQyh0cmVlLGdjKSAqKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2NwbHVzX25ldwkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2FnZ3JfaW5pdF9leHByCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBnZXRfdGFyZ2V0X2V4cHIJCQkodHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9jcGx1c19hcnJheV90eXBlCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9hcnJheV9vZl9uX3R5cGUJCSh0cmVlLCBpbnQpOworZXh0ZXJuIHRyZWUgYnVpbGRfYXJyYXlfY29weQkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGhhc2hfdHJlZV9jb25zCQkJKHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgaGFzaF90cmVlX2NoYWluCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfcXVhbGlmaWVkX25hbWUJCSh0cmVlLCB0cmVlLCB0cmVlLCBib29sKTsKK2V4dGVybiBpbnQgaXNfb3ZlcmxvYWRlZF9mbgkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGdldF9maXJzdF9mbgkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIG92bF9jb25zCQkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX292ZXJsb2FkCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmN4eF9wcmludGFibGVfbmFtZQkJKHRyZWUsIGludCk7CitleHRlcm4gY29uc3QgY2hhciAqY3h4X3ByaW50YWJsZV9uYW1lX3RyYW5zbGF0ZQkodHJlZSwgaW50KTsKK2V4dGVybiB0cmVlIGJ1aWxkX2V4Y2VwdGlvbl92YXJpYW50CQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBiaW5kX3RlbXBsYXRlX3RlbXBsYXRlX3Bhcm0JCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGFycmF5X3R5cGVfbmVsdHNfdG90YWwJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGFycmF5X3R5cGVfbmVsdHNfdG9wCQkodHJlZSk7CitleHRlcm4gdHJlZSBicmVha19vdXRfdGFyZ2V0X2V4cHJzCQkodHJlZSk7CitleHRlcm4gdHJlZSBnZXRfdHlwZV9kZWNsCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgZGVjbF9uYW1lc3BhY2VfY29udGV4dAkJKHRyZWUpOworZXh0ZXJuIGJvb2wgZGVjbF9hbm9uX25zX21lbV9wCQkJKGNvbnN0X3RyZWUpOworZXh0ZXJuIHRyZWUgbHZhbHVlX3R5cGUJCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgZXJyb3JfdHlwZQkJCQkodHJlZSk7CitleHRlcm4gaW50IHZhcmFyZ3NfZnVuY3Rpb25fcAkJCShjb25zdF90cmVlKTsKK2V4dGVybiBib29sIHJlYWxseV9vdmVybG9hZGVkX2ZuCQkodHJlZSk7CitleHRlcm4gYm9vbCBjcF90cmVlX2VxdWFsCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgbm9fbGlua2FnZV9jaGVjawkJCSh0cmVlLCBib29sKTsKK2V4dGVybiB2b2lkIGRlYnVnX2JpbmZvCQkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2R1bW15X29iamVjdAkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIG1heWJlX2R1bW15X29iamVjdAkJCSh0cmVlLCB0cmVlICopOworZXh0ZXJuIGludCBpc19kdW1teV9vYmplY3QJCQkoY29uc3RfdHJlZSk7CitleHRlcm4gY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9zcGVjIGN4eF9hdHRyaWJ1dGVfdGFibGVbXTsKK2V4dGVybiB0cmVlIG1ha2VfcHRybWVtX2NzdAkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGNwX2J1aWxkX3R5cGVfYXR0cmlidXRlX3ZhcmlhbnQgICAgICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGNwX2J1aWxkX3JlZmVyZW5jZV90eXBlCQkodHJlZSwgYm9vbCk7CitleHRlcm4gdHJlZSBtb3ZlCQkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGNwX2J1aWxkX3F1YWxpZmllZF90eXBlX3JlYWwJKHRyZWUsIGludCwgdHN1YnN0X2ZsYWdzX3QpOworI2RlZmluZSBjcF9idWlsZF9xdWFsaWZpZWRfdHlwZShUWVBFLCBRVUFMUykgXAorICBjcF9idWlsZF9xdWFsaWZpZWRfdHlwZV9yZWFsICgoVFlQRSksIChRVUFMUyksIHRmX3dhcm5pbmdfb3JfZXJyb3IpCitleHRlcm4gYm9vbCBjdl9xdWFsaWZpZWRfcAkJCShjb25zdF90cmVlKTsKK2V4dGVybiB0cmVlIGN2X3VucXVhbGlmaWVkCQkJKHRyZWUpOworZXh0ZXJuIHNwZWNpYWxfZnVuY3Rpb25fa2luZCBzcGVjaWFsX2Z1bmN0aW9uX3AgKGNvbnN0X3RyZWUpOworZXh0ZXJuIGludCBjb3VudF90cmVlcwkJCQkodHJlZSk7CitleHRlcm4gaW50IGNoYXJfdHlwZV9wCQkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIHZlcmlmeV9zdG10X3RyZWUJCQkodHJlZSk7CitleHRlcm4gbGlua2FnZV9raW5kIGRlY2xfbGlua2FnZQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgY3Bfd2Fsa19zdWJ0cmVlcyAodHJlZSosIGludCosIHdhbGtfdHJlZV9mbiwKKwkJCSAgICAgIHZvaWQqLCBzdHJ1Y3QgcG9pbnRlcl9zZXRfdCopOworI2RlZmluZSBjcF93YWxrX3RyZWUoYSxiLGMsZCkgXAorCXdhbGtfdHJlZV8xIChhLCBiLCBjLCBkLCBjcF93YWxrX3N1YnRyZWVzKQorI2RlZmluZSBjcF93YWxrX3RyZWVfd2l0aG91dF9kdXBsaWNhdGVzKGEsYixjKSBcCisJd2Fsa190cmVlX3dpdGhvdXRfZHVwbGljYXRlc18xIChhLCBiLCBjLCBjcF93YWxrX3N1YnRyZWVzKQorZXh0ZXJuIHRyZWUgZm9sZF9pZl9ub3RfaW5fdGVtcGxhdGUJCSh0cmVlKTsKK2V4dGVybiB0cmVlIHJ2YWx1ZQkJCQkodHJlZSk7CitleHRlcm4gdHJlZSBjb252ZXJ0X2JpdGZpZWxkX3RvX2RlY2xhcmVkX3R5cGUgICAodHJlZSk7CitleHRlcm4gdHJlZSBjcF9zYXZlX2V4cHIJCQkodHJlZSk7CitleHRlcm4gYm9vbCBjYXN0X3ZhbGlkX2luX2ludGVncmFsX2NvbnN0YW50X2V4cHJlc3Npb25fcCAodHJlZSk7CitleHRlcm4gYm9vbCBjeHhfdHlwZV9oYXNoX2VxCQkJKGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUpOworCitleHRlcm4gdm9pZCBjeHhfcHJpbnRfc3RhdGlzdGljcwkJKHZvaWQpOworCisvKiBpbiBwdHJlZS5jICovCitleHRlcm4gdm9pZCBjeHhfcHJpbnRfeG5vZGUJCQkoRklMRSAqLCB0cmVlLCBpbnQpOworZXh0ZXJuIHZvaWQgY3h4X3ByaW50X2RlY2wJCQkoRklMRSAqLCB0cmVlLCBpbnQpOworZXh0ZXJuIHZvaWQgY3h4X3ByaW50X3R5cGUJCQkoRklMRSAqLCB0cmVlLCBpbnQpOworZXh0ZXJuIHZvaWQgY3h4X3ByaW50X2lkZW50aWZpZXIJCShGSUxFICosIHRyZWUsIGludCk7CitleHRlcm4gdm9pZCBjeHhfcHJpbnRfZXJyb3JfZnVuY3Rpb24JKHN0cnVjdCBkaWFnbm9zdGljX2NvbnRleHQgKiwKKwkJCQkJCSBjb25zdCBjaGFyICosCisJCQkJCQkgc3RydWN0IGRpYWdub3N0aWNfaW5mbyAqKTsKKworLyogaW4gdHlwZWNrLmMgKi8KK2V4dGVybiBib29sIGN4eF9tYXJrX2FkZHJlc3NhYmxlCQkodHJlZSk7CitleHRlcm4gaW50IHN0cmluZ19jb252X3AJCQkoY29uc3RfdHJlZSwgY29uc3RfdHJlZSwgaW50KTsKK2V4dGVybiB0cmVlIGNwX3RydXRodmFsdWVfY29udmVyc2lvbgkJKHRyZWUpOworZXh0ZXJuIHRyZWUgY29uZGl0aW9uX2NvbnZlcnNpb24JCSh0cmVlKTsKK2V4dGVybiB0cmVlIHJlcXVpcmVfY29tcGxldGVfdHlwZQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgY29tcGxldGVfdHlwZQkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGNvbXBsZXRlX3R5cGVfb3JfZWxzZQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIGludCB0eXBlX3Vua25vd25fcAkJCShjb25zdF90cmVlKTsKK2V4dGVybiBib29sIGNvbXBfZXhjZXB0X3NwZWNzCQkJKGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUsIGJvb2wpOworZXh0ZXJuIGJvb2wgY29tcHR5cGVzCQkJCSh0cmVlLCB0cmVlLCBpbnQpOworZXh0ZXJuIGJvb2wgY29tcHBhcm1zCQkJCShjb25zdF90cmVlLCBjb25zdF90cmVlKTsKK2V4dGVybiBpbnQgY29tcF9jdl9xdWFsaWZpY2F0aW9uCQkoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CitleHRlcm4gaW50IGNvbXBfY3ZfcXVhbF9zaWduYXR1cmUJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGN4eF9zaXplb2Zfb3JfYWxpZ25vZl9leHByCQkodHJlZSwgZW51bSB0cmVlX2NvZGUsIGJvb2wpOworZXh0ZXJuIHRyZWUgY3h4X3NpemVvZl9vcl9hbGlnbm9mX3R5cGUJCSh0cmVlLCBlbnVtIHRyZWVfY29kZSwgYm9vbCk7CitleHRlcm4gdHJlZSBjeHhfc2l6ZW9mX25vd2FybiAgICAgICAgICAgICAgICAgICAodHJlZSk7CitleHRlcm4gdHJlZSBpc19iaXRmaWVsZF9leHByX3dpdGhfbG93ZXJlZF90eXBlICAoY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSB1bmxvd2VyZWRfZXhwcl90eXBlICAgICAgICAgICAgICAgICAoY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSBkZWNheV9jb252ZXJzaW9uCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfY2xhc3NfbWVtYmVyX2FjY2Vzc19leHByICAgICAgKHRyZWUsIHRyZWUsIHRyZWUsIGJvb2wsCisJCQkJCQkgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgZmluaXNoX2NsYXNzX21lbWJlcl9hY2Nlc3NfZXhwciAgICAgKHRyZWUsIHRyZWUsIGJvb2wsIAorCQkJCQkJIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGJ1aWxkX3hfaW5kaXJlY3RfcmVmCQkodHJlZSwgcmVmX29wZXJhdG9yLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBjcF9idWlsZF9pbmRpcmVjdF9yZWYJCSh0cmVlLCByZWZfb3BlcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgYnVpbGRfYXJyYXlfcmVmCQkJKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgZ2V0X21lbWJlcl9mdW5jdGlvbl9mcm9tX3B0cmZ1bmMJKHRyZWUgKiwgdHJlZSk7CitleHRlcm4gdHJlZSBjcF9idWlsZF9mdW5jdGlvbl9jYWxsICAgICAgICAgICAgICAodHJlZSwgdHJlZSwgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgY3BfYnVpbGRfZnVuY3Rpb25fY2FsbF92ZWMJCSh0cmVlLCBWRUModHJlZSxnYykgKiosCisJCQkJCQkgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgYnVpbGRfeF9iaW5hcnlfb3AJCQkoZW51bSB0cmVlX2NvZGUsIHRyZWUsCisJCQkJCQkgZW51bSB0cmVlX2NvZGUsIHRyZWUsCisJCQkJCQkgZW51bSB0cmVlX2NvZGUsIGJvb2wgKiwKKwkJCQkJCSB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBidWlsZF94X2FycmF5X3JlZgkJCSh0cmVlLCB0cmVlLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBidWlsZF94X3VuYXJ5X29wCQkJKGVudW0gdHJlZV9jb2RlLCB0cmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGNwX2J1aWxkX3VuYXJ5X29wICAgICAgICAgICAgICAgICAgIChlbnVtIHRyZWVfY29kZSwgdHJlZSwgaW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSB1bmFyeV9jb21wbGV4X2x2YWx1ZQkJKGVudW0gdHJlZV9jb2RlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX3hfY29uZGl0aW9uYWxfZXhwcgkJKHRyZWUsIHRyZWUsIHRyZWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGJ1aWxkX3hfY29tcG91bmRfZXhwcl9mcm9tX2xpc3QJKHRyZWUsIGNvbnN0IGNoYXIgKik7CitleHRlcm4gdHJlZSBidWlsZF94X2NvbXBvdW5kX2V4cHJfZnJvbV92ZWMJKFZFQyh0cmVlLGdjKSAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIHRyZWUgYnVpbGRfeF9jb21wb3VuZF9leHByCQkodHJlZSwgdHJlZSwgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgYnVpbGRfY29tcG91bmRfZXhwciAgICAgICAgICAgICAgICAgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgY3BfYnVpbGRfY29tcG91bmRfZXhwcgkJKHRyZWUsIHRyZWUsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGJ1aWxkX3N0YXRpY19jYXN0CQkJKHRyZWUsIHRyZWUsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGJ1aWxkX3JlaW50ZXJwcmV0X2Nhc3QJCSh0cmVlLCB0cmVlLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBidWlsZF9jb25zdF9jYXN0CQkJKHRyZWUsIHRyZWUsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGJ1aWxkX2NfY2FzdAkJCShsb2NhdGlvbl90LCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGNwX2J1aWxkX2NfY2FzdAkJCSh0cmVlLCB0cmVlLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBidWlsZF94X21vZGlmeV9leHByCQkJKHRyZWUsIGVudW0gdHJlZV9jb2RlLCB0cmVlLAorCQkJCQkJIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGNwX2J1aWxkX21vZGlmeV9leHByCQkodHJlZSwgZW51bSB0cmVlX2NvZGUsIHRyZWUsCisJCQkJCQkgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24JCSh0cmVlLCB0cmVlLCB0cmVlLCBpbnQsCisJCQkJCQkgY29uc3QgY2hhciAqLCB0cmVlLCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIGludCBjb21wX3B0cl90dHlwZXMJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gYm9vbCBjb21wX3B0cl90dHlwZXNfY29uc3QJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiBib29sIGVycm9yX3R5cGVfcAkJCShjb25zdF90cmVlKTsKK2V4dGVybiBpbnQgcHRyX3JlYXNvbmFibHlfc2ltaWxhcgkJKGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfcHRybWVtZnVuYwkJCSh0cmVlLCB0cmVlLCBpbnQsIGJvb2wpOworZXh0ZXJuIGludCBjcF90eXBlX3F1YWxzCQkJKGNvbnN0X3RyZWUpOworZXh0ZXJuIGJvb2wgY3BfdHlwZV9yZWFkb25seQkJCShjb25zdF90cmVlKTsKK2V4dGVybiBib29sIGNwX2hhc19tdXRhYmxlX3AJCQkoY29uc3RfdHJlZSk7CitleHRlcm4gYm9vbCBhdF9sZWFzdF9hc19xdWFsaWZpZWRfcAkJKGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUpOworZXh0ZXJuIHZvaWQgY3BfYXBwbHlfdHlwZV9xdWFsc190b19kZWNsCQkoaW50LCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX3B0cm1lbWZ1bmMxCQkJKHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgZXhwYW5kX3B0cm1lbWZ1bmNfY3N0CQkodHJlZSwgdHJlZSAqLCB0cmVlICopOworZXh0ZXJuIHRyZWUgdHlwZV9hZnRlcl91c3VhbF9hcml0aG1ldGljX2NvbnZlcnNpb25zICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGNvbW1vbl9wb2ludGVyX3R5cGUgICAgICAgICAgICAgICAgICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGNvbXBvc2l0ZV9wb2ludGVyX3R5cGUJCSh0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLAorCQkJCQkJIGNvbXBvc2l0ZV9wb2ludGVyX29wZXJhdGlvbiwgCisJCQkJCQkgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgbWVyZ2VfdHlwZXMJCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgY2hlY2tfcmV0dXJuX2V4cHIJCQkodHJlZSwgYm9vbCAqKTsKK2V4dGVybiB0cmVlIGNwX2J1aWxkX2JpbmFyeV9vcCAgICAgICAgICAgICAgICAgIChsb2NhdGlvbl90LAorCQkJCQkJIGVudW0gdHJlZV9jb2RlLCB0cmVlLCB0cmVlLAorCQkJCQkJIHRzdWJzdF9mbGFnc190KTsKKyNkZWZpbmUgY3h4X3NpemVvZihUKSAgY3h4X3NpemVvZl9vcl9hbGlnbm9mX3R5cGUgKFQsIFNJWkVPRl9FWFBSLCB0cnVlKQorZXh0ZXJuIHRyZWUgYnVpbGRfcHRybWVtZnVuY19hY2Nlc3NfZXhwcgkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9hZGRyZXNzCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfdHlwZWRfYWRkcmVzcwkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX25vcAkJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBub25fcmVmZXJlbmNlCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgbG9va3VwX2Fub25fZmllbGQJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gYm9vbCBpbnZhbGlkX25vbnN0YXRpY19tZW1mbl9wCQkoY29uc3RfdHJlZSwgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgY29udmVydF9tZW1iZXJfZnVuY190b19wdHIJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGNvbnZlcnRfcHRybWVtCQkJKHRyZWUsIHRyZWUsIGJvb2wsIGJvb2wpOworZXh0ZXJuIGludCBsdmFsdWVfb3JfZWxzZQkJCSh0cmVlLCBlbnVtIGx2YWx1ZV91c2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHZvaWQgY2hlY2tfdGVtcGxhdGVfa2V5d29yZAkJKHRyZWUpOworCisvKiBpbiB0eXBlY2syLmMgKi8KK2V4dGVybiB2b2lkIHJlcXVpcmVfY29tcGxldGVfZWhfc3BlY190eXBlcwkodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBjeHhfaW5jb21wbGV0ZV90eXBlX2RpYWdub3N0aWMJKGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUsIGRpYWdub3N0aWNfdCk7CisjdW5kZWYgY3h4X2luY29tcGxldGVfdHlwZV9lcnJvcgorZXh0ZXJuIHZvaWQgY3h4X2luY29tcGxldGVfdHlwZV9lcnJvcgkJKGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUpOworI2RlZmluZSBjeHhfaW5jb21wbGV0ZV90eXBlX2Vycm9yKFYsVCkgXAorICAoY3h4X2luY29tcGxldGVfdHlwZV9kaWFnbm9zdGljICgoViksIChUKSwgREtfRVJST1IpKQorZXh0ZXJuIHRyZWUgZXJyb3Jfbm90X2Jhc2VfdHlwZQkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJpbmZvX29yX2Vsc2UJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCByZWFkb25seV9lcnJvcgkJCSh0cmVlLCByZWFkb25seV9lcnJvcl9raW5kKTsKK2V4dGVybiB2b2lkIGNvbXBsZXRlX3R5cGVfY2hlY2tfYWJzdHJhY3QJKHRyZWUpOworZXh0ZXJuIGludCBhYnN0cmFjdF92aXJ0dWFsc19lcnJvcgkJKHRyZWUsIHRyZWUpOworCitleHRlcm4gdHJlZSBzdG9yZV9pbml0X3ZhbHVlCQkJKHRyZWUsIHRyZWUsIGludCk7CitleHRlcm4gdm9pZCBjaGVja19uYXJyb3dpbmcJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBkaWdlc3RfaW5pdAkJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBkaWdlc3RfaW5pdF9mbGFncwkJCSh0cmVlLCB0cmVlLCBpbnQpOworZXh0ZXJuIHRyZWUgYnVpbGRfc2NvcGVkX3JlZgkJCSh0cmVlLCB0cmVlLCB0cmVlICopOworZXh0ZXJuIHRyZWUgYnVpbGRfeF9hcnJvdwkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX21fY29tcG9uZW50X3JlZgkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfZnVuY3Rpb25hbF9jYXN0CQkodHJlZSwgdHJlZSwgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgYWRkX2V4Y2VwdGlvbl9zcGVjaWZpZXIJCSh0cmVlLCB0cmVlLCBpbnQpOworZXh0ZXJuIHRyZWUgbWVyZ2VfZXhjZXB0aW9uX3NwZWNpZmllcnMJCSh0cmVlLCB0cmVlKTsKKworLyogaW4gbWFuZ2xlLmMgKi8KK2V4dGVybiB2b2lkIGluaXRfbWFuZ2xlCQkJCSh2b2lkKTsKK2V4dGVybiB2b2lkIG1hbmdsZV9kZWNsCQkJCSh0cmVlKTsKK2V4dGVybiBjb25zdCBjaGFyICptYW5nbGVfdHlwZV9zdHJpbmcJCSh0cmVlKTsKK2V4dGVybiB0cmVlIG1hbmdsZV90eXBlaW5mb19mb3JfdHlwZQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgbWFuZ2xlX3R5cGVpbmZvX3N0cmluZ19mb3JfdHlwZQkodHJlZSk7CitleHRlcm4gdHJlZSBtYW5nbGVfdnRibF9mb3JfdHlwZQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgbWFuZ2xlX3Z0dF9mb3JfdHlwZQkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIG1hbmdsZV9jdG9yX3Z0YmxfZm9yX3R5cGUJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIG1hbmdsZV90aHVuawkJCSh0cmVlLCBpbnQsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgbWFuZ2xlX2NvbnZfb3BfbmFtZV9mb3JfdHlwZQkodHJlZSk7CitleHRlcm4gdHJlZSBtYW5nbGVfZ3VhcmRfdmFyaWFibGUJCSh0cmVlKTsKK2V4dGVybiB0cmVlIG1hbmdsZV9yZWZfaW5pdF92YXJpYWJsZQkJKHRyZWUpOworCisvKiBpbiBkdW1wLmMgKi8KK2V4dGVybiBib29sIGNwX2R1bXBfdHJlZQkJCSh2b2lkICosIHRyZWUpOworCisvKiBJbiBjcC9jcC1vYmpjcC1jb21tb24uYy4gICovCisKK2V4dGVybiBhbGlhc19zZXRfdHlwZSBjeHhfZ2V0X2FsaWFzX3NldAkJKHRyZWUpOworZXh0ZXJuIGJvb2wgY3h4X3dhcm5fdW51c2VkX2dsb2JhbF9kZWNsCQkoY29uc3RfdHJlZSk7CitleHRlcm4gc2l6ZV90IGNwX3RyZWVfc2l6ZQkJCShlbnVtIHRyZWVfY29kZSk7CitleHRlcm4gYm9vbCBjcF92YXJfbW9kX3R5cGVfcAkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGN4eF9pbml0aWFsaXplX2RpYWdub3N0aWNzCQkoc3RydWN0IGRpYWdub3N0aWNfY29udGV4dCAqKTsKK2V4dGVybiBpbnQgY3h4X3R5cGVzX2NvbXBhdGlibGVfcAkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgaW5pdF9zaGFkb3dlZF92YXJfZm9yX2RlY2wJCSh2b2lkKTsKKworLyogaW4gY3AtZ2ltcGxpZnkuYyAqLworZXh0ZXJuIGludCBjcF9naW1wbGlmeV9leHByCQkJKHRyZWUgKiwgZ2ltcGxlX3NlcSAqLAorCQkJCQkJIGdpbXBsZV9zZXEgKik7CitleHRlcm4gdm9pZCBjcF9nZW5lcmljaXplCQkJKHRyZWUpOworZXh0ZXJuIGVudW0gb21wX2NsYXVzZV9kZWZhdWx0X2tpbmQgY3h4X29tcF9wcmVkZXRlcm1pbmVkX3NoYXJpbmcgKHRyZWUpOworZXh0ZXJuIHRyZWUgY3h4X29tcF9jbGF1c2VfZGVmYXVsdF9jdG9yCQkodHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBjeHhfb21wX2NsYXVzZV9jb3B5X2N0b3IJCSh0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGN4eF9vbXBfY2xhdXNlX2Fzc2lnbl9vcAkJKHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgY3h4X29tcF9jbGF1c2VfZHRvcgkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGN4eF9vbXBfZmluaXNoX2NsYXVzZQkJKHRyZWUpOworZXh0ZXJuIGJvb2wgY3h4X29tcF9wcml2YXRpemVfYnlfcmVmZXJlbmNlCShjb25zdF90cmVlKTsKKworLyogLS0gZW5kIG9mIEMrKyAqLworCisjZW5kaWYgLyogISBHQ0NfQ1BfVFJFRV9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvY3AvY3h4LXByZXR0eS1wcmludC5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NwL2N4eC1wcmV0dHktcHJpbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODhkNGM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NwL2N4eC1wcmV0dHktcHJpbnQuaApAQCAtMCwwICsxLDc3IEBACisvKiBJbnRlcmZhY2UgZm9yIHRoZSBHTlUgQysrIHByZXR0eS1wcmludGVyLgorICAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgR2FicmllbCBEb3MgUmVpcyA8Z2RyQGludGVncmFibGUtc29sdXRpb25zLm5ldD4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX0NYWF9QUkVUVFlfUFJJTlRfSAorI2RlZmluZSBHQ0NfQ1hYX1BSRVRUWV9QUklOVF9ICisKKyNpbmNsdWRlICJjLXByZXR0eS1wcmludC5oIgorCisjdW5kZWYgcHBfY19iYXNlCisjZGVmaW5lIHBwX2NfYmFzZShQUCkgKCYoUFApLT5jX2Jhc2UpCisKK3R5cGVkZWYgZW51bQoreworICAvKiBBc2sgZm9yIGEgcXVhbGlmaWVkLWlkLiAgKi8KKyAgcHBfY3h4X2ZsYWdfZGVmYXVsdF9hcmd1bWVudCA9IDEgPDwgcHBfY19mbGFnX2xhc3RfYml0CisKK30gY3h4X3ByZXR0eV9wcmludGVyX2ZsYWdzOworCit0eXBlZGVmIHN0cnVjdAoreworICBjX3ByZXR0eV9wcmludGVyIGNfYmFzZTsKKyAgLyogVGhpcyBpcyB0aGUgZW5jbG9zaW5nIHNjb3BlIG9mIHRoZSBlbnRpdHkgYmVpbmcgcHJldHR5LXByaW50ZWQuICAqLworICB0cmVlIGVuY2xvc2luZ19zY29wZTsKK30gY3h4X3ByZXR0eV9wcmludGVyOworCisjZGVmaW5lIHBwX2N4eF9jdl9xdWFsaWZpZXJfc2VxKFBQLCBUKSAgIFwKKyAgIHBwX2NfdHlwZV9xdWFsaWZpZXJfbGlzdCAocHBfY19iYXNlIChQUCksIFQpCisKKyNkZWZpbmUgcHBfY3h4X3doaXRlc3BhY2UoUFApCQlwcF9jX3doaXRlc3BhY2UgKHBwX2NfYmFzZSAoUFApKQorI2RlZmluZSBwcF9jeHhfbGVmdF9wYXJlbihQUCkJCXBwX2NfbGVmdF9wYXJlbiAocHBfY19iYXNlIChQUCkpCisjZGVmaW5lIHBwX2N4eF9yaWdodF9wYXJlbihQUCkJCXBwX2NfcmlnaHRfcGFyZW4gKHBwX2NfYmFzZSAoUFApKQorI2RlZmluZSBwcF9jeHhfbGVmdF9icmFjZShQUCkJCXBwX2NfbGVmdF9icmFjZSAocHBfY19iYXNlIChQUCkpCisjZGVmaW5lIHBwX2N4eF9yaWdodF9icmFjZShQUCkJCXBwX2NfcmlnaHRfYnJhY2UgKHBwX2NfYmFzZSAoUFApKQorI2RlZmluZSBwcF9jeHhfbGVmdF9icmFja2V0KFBQKQkJcHBfY19sZWZ0X2JyYWNrZXQgKHBwX2NfYmFzZSAoUFApKQorI2RlZmluZSBwcF9jeHhfcmlnaHRfYnJhY2tldChQUCkJcHBfY19yaWdodF9icmFja2V0IChwcF9jX2Jhc2UgKFBQKSkKKyNkZWZpbmUgcHBfY3h4X2RvdChQUCkJCQlwcF9jX2RvdCAocHBfY19iYXNlIChQUCkpCisjZGVmaW5lIHBwX2N4eF9hbXBlcnNhbmQoUFApCQlwcF9jX2FtcGVyc2FuZCAocHBfY19iYXNlIChQUCkpCisjZGVmaW5lIHBwX2N4eF9zdGFyKFBQKQkJCXBwX2Nfc3RhciAocHBfY19iYXNlIChQUCkpCisjZGVmaW5lIHBwX2N4eF9hcnJvdyhQUCkJCXBwX2NfYXJyb3cgKHBwX2NfYmFzZSAoUFApKQorI2RlZmluZSBwcF9jeHhfc2VtaWNvbG9uKFBQKQkJcHBfY19zZW1pY29sb24gKHBwX2NfYmFzZSAoUFApKQorI2RlZmluZSBwcF9jeHhfY29tcGxlbWVudChQUCkJCXBwX2NfY29tcGxlbWVudCAocHBfY19iYXNlIChQUCkpCisKKyNkZWZpbmUgcHBfY3h4X3dzX3N0cmluZyhQUCwgSSkJCXBwX2Nfd3Nfc3RyaW5nIChwcF9jX2Jhc2UgKFBQKSwgSSkKKyNkZWZpbmUgcHBfY3h4X2lkZW50aWZpZXIoUFAsIEkpCXBwX2NfaWRlbnRpZmllciAocHBfY19iYXNlIChQUCksIEkpCisjZGVmaW5lIHBwX2N4eF90cmVlX2lkZW50aWZpZXIoUFAsIFQpIFwKKyAgcHBfY190cmVlX2lkZW50aWZpZXIgKHBwX2NfYmFzZSAoUFApLCBUKQorCit2b2lkIHBwX2N4eF9wcmV0dHlfcHJpbnRlcl9pbml0IChjeHhfcHJldHR5X3ByaW50ZXIgKik7Cit2b2lkIHBwX2N4eF9iZWdpbl90ZW1wbGF0ZV9hcmd1bWVudF9saXN0IChjeHhfcHJldHR5X3ByaW50ZXIgKik7Cit2b2lkIHBwX2N4eF9lbmRfdGVtcGxhdGVfYXJndW1lbnRfbGlzdCAoY3h4X3ByZXR0eV9wcmludGVyICopOwordm9pZCBwcF9jeHhfY29sb25fY29sb24gKGN4eF9wcmV0dHlfcHJpbnRlciAqKTsKK3ZvaWQgcHBfY3h4X3NlcGFyYXRlX3dpdGggKGN4eF9wcmV0dHlfcHJpbnRlciAqLCBpbnQpOworCit2b2lkIHBwX2N4eF9kZWNsYXJhdGlvbiAoY3h4X3ByZXR0eV9wcmludGVyICosIHRyZWUpOwordm9pZCBwcF9jeHhfY2Fub25pY2FsX3RlbXBsYXRlX3BhcmFtZXRlciAoY3h4X3ByZXR0eV9wcmludGVyICosIHRyZWUpOwordm9pZCBwcF9jeHhfdHJhaXRfZXhwcmVzc2lvbiAoY3h4X3ByZXR0eV9wcmludGVyICosIHRyZWUpOwordm9pZCBwcF9jeHhfdmFfYXJnX2V4cHJlc3Npb24gKGN4eF9wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKK3ZvaWQgcHBfY3h4X29mZnNldG9mX2V4cHJlc3Npb24gKGN4eF9wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKKworI2VuZGlmIC8qIEdDQ19DWFhfUFJFVFRZX1BSSU5UX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jcC9uYW1lLWxvb2t1cC5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NwL25hbWUtbG9va3VwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg1MTQ4MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jcC9uYW1lLWxvb2t1cC5oCkBAIC0wLDAgKzEsMzY2IEBACisvKiBEZWNsYXJhdGlvbnMgZm9yIEMrKyBuYW1lIGxvb2t1cCByb3V0aW5lcy4KKyAgIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCwgMjAwOQorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBHYWJyaWVsIERvcyBSZWlzIDxnZHJAaW50ZWdyYWJsZS1zb2x1dGlvbnMubmV0PgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfQ1BfTkFNRV9MT09LVVBfSAorI2RlZmluZSBHQ0NfQ1BfTkFNRV9MT09LVVBfSAorCisjaW5jbHVkZSAiYy1jb21tb24uaCIKKworLyogVGhlIHR5cGUgb2YgZGljdGlvbmFyeSB1c2VkIHRvIG1hcCBuYW1lcyB0byB0eXBlcyBkZWNsYXJlZCBhdAorICAgYSBnaXZlbiBzY29wZS4gICovCit0eXBlZGVmIHN0cnVjdCBiaW5kaW5nX3RhYmxlX3MgKmJpbmRpbmdfdGFibGU7Cit0eXBlZGVmIHN0cnVjdCBiaW5kaW5nX2VudHJ5X3MgKmJpbmRpbmdfZW50cnk7CisKKy8qIFRoZSB0eXBlIG9mIGEgcm91dGluZSByZXBlYXRlZGx5IGNhbGxlZCBieSBiaW5kaW5nX3RhYmxlX2ZvcmVhY2guICAqLwordHlwZWRlZiB2b2lkICgqYnRfZm9yZWFjaF9wcm9jKSAoYmluZGluZ19lbnRyeSwgdm9pZCAqKTsKKworc3RydWN0IEdUWSgoKSkgYmluZGluZ19lbnRyeV9zIHsKKyAgYmluZGluZ19lbnRyeSBjaGFpbjsKKyAgdHJlZSBuYW1lOworICB0cmVlIHR5cGU7Cit9OworCisvKiBUaGVzZSBtYWNyb3MgaW5kaWNhdGUgdGhlIGluaXRpYWwgY2hhaW5zIGNvdW50IGZvciBiaW5kaW5nX3RhYmxlLiAgKi8KKyNkZWZpbmUgU0NPUEVfREVGQVVMVF9IVF9TSVpFCQkoMSA8PCAzKQorI2RlZmluZSBDTEFTU19TQ09QRV9IVF9TSVpFCQkoMSA8PCAzKQorI2RlZmluZSBOQU1FU1BBQ0VfT1JESU5BUllfSFRfU0laRQkoMSA8PCA1KQorI2RlZmluZSBOQU1FU1BBQ0VfU1REX0hUX1NJWkUJCSgxIDw8IDgpCisjZGVmaW5lIEdMT0JBTF9TQ09QRV9IVF9TSVpFCQkoMSA8PCA4KQorCitleHRlcm4gdm9pZCBiaW5kaW5nX3RhYmxlX2ZvcmVhY2ggKGJpbmRpbmdfdGFibGUsIGJ0X2ZvcmVhY2hfcHJvYywgdm9pZCAqKTsKK2V4dGVybiBiaW5kaW5nX2VudHJ5IGJpbmRpbmdfdGFibGVfZmluZCAoYmluZGluZ190YWJsZSwgdHJlZSk7CisMCisvKiBEYXRhdHlwZSB0aGF0IHJlcHJlc2VudHMgYmluZGluZyBlc3RhYmxpc2hlZCBieSBhIGRlY2xhcmF0aW9uIGJldHdlZW4KKyAgIGEgbmFtZSBhbmQgYSBDKysgZW50aXR5LiAgKi8KK3R5cGVkZWYgc3RydWN0IGN4eF9iaW5kaW5nIGN4eF9iaW5kaW5nOworCisvKiBUaGUgZGF0YXR5cGUgdXNlZCB0byBpbXBsZW1lbnQgQysrIHNjb3BlLiAgKi8KK3R5cGVkZWYgc3RydWN0IGNwX2JpbmRpbmdfbGV2ZWwgY3h4X3Njb3BlOworCisvKiBOb256ZXJvIGlmIHRoaXMgYmluZGluZyBpcyBmb3IgYSBsb2NhbCBzY29wZSwgYXMgb3Bwb3NlZCB0byBhIGNsYXNzCisgICBvciBuYW1lc3BhY2Ugc2NvcGUuICAqLworI2RlZmluZSBMT0NBTF9CSU5ESU5HX1AoTk9ERSkgKChOT0RFKS0+aXNfbG9jYWwpCisKKy8qIFRydWUgaWYgTk9ERS0+dmFsdWUgaXMgZnJvbSBhIGJhc2UgY2xhc3Mgb2YgdGhlIGNsYXNzIHdoaWNoIGlzCisgICBjdXJyZW50bHkgYmVpbmcgZGVmaW5lZC4gICovCisjZGVmaW5lIElOSEVSSVRFRF9WQUxVRV9CSU5ESU5HX1AoTk9ERSkgKChOT0RFKS0+dmFsdWVfaXNfaW5oZXJpdGVkKQorCitzdHJ1Y3QgR1RZKCgpKSBjeHhfYmluZGluZyB7CisgIC8qIExpbmsgdG8gY2hhaW4gdG9nZXRoZXIgdmFyaW91cyBiaW5kaW5ncyBmb3IgdGhpcyBuYW1lLiAgKi8KKyAgY3h4X2JpbmRpbmcgKnByZXZpb3VzOworICAvKiBUaGUgbm9uLXR5cGUgZW50aXR5IHRoaXMgbmFtZSBpcyBib3VuZCB0by4gICovCisgIHRyZWUgdmFsdWU7CisgIC8qIFRoZSB0eXBlIGVudGl0eSB0aGlzIG5hbWUgaXMgYm91bmQgdG8uICAqLworICB0cmVlIHR5cGU7CisgIC8qIFRoZSBzY29wZSBhdCB3aGljaCB0aGlzIGJpbmRpbmcgd2FzIG1hZGUuICAqLworICBjeHhfc2NvcGUgKnNjb3BlOworICB1bnNpZ25lZCB2YWx1ZV9pc19pbmhlcml0ZWQgOiAxOworICB1bnNpZ25lZCBpc19sb2NhbCA6IDE7Cit9OworCisvKiBEYXRhdHlwZSB1c2VkIHRvIHRlbXBvcmFyaWx5IHNhdmUgQysrIGJpbmRpbmdzIChmb3IgaW1wbGljaXQKKyAgIGluc3RhbnRpYXRpb25zIHB1cnBvc2VzIGFuZCBsaWtlKS4gIEltcGxlbWVudGVkIGluIGRlY2wuYy4gICovCit0eXBlZGVmIHN0cnVjdCBHVFkoKCkpIGN4eF9zYXZlZF9iaW5kaW5nIHsKKyAgLyogVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgYmluZGluZy4gICovCisgIHRyZWUgaWRlbnRpZmllcjsKKyAgLyogVGhlIGJpbmRpbmcgd2UncmUgc2F2aW5nLiAgKi8KKyAgY3h4X2JpbmRpbmcgKmJpbmRpbmc7CisgIHRyZWUgcmVhbF90eXBlX3ZhbHVlOworfSBjeHhfc2F2ZWRfYmluZGluZzsKKworREVGX1ZFQ19PKGN4eF9zYXZlZF9iaW5kaW5nKTsKK0RFRl9WRUNfQUxMT0NfTyhjeHhfc2F2ZWRfYmluZGluZyxnYyk7CisKK2V4dGVybiB0cmVlIGlkZW50aWZpZXJfdHlwZV92YWx1ZSAodHJlZSk7CitleHRlcm4gdm9pZCBzZXRfaWRlbnRpZmllcl90eXBlX3ZhbHVlICh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIHBvcF9iaW5kaW5nICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGNvbnN0cnVjdG9yX25hbWUgKHRyZWUpOworZXh0ZXJuIGJvb2wgY29uc3RydWN0b3JfbmFtZV9wICh0cmVlLCB0cmVlKTsKKwwKKy8qIFRoZSBraW5kcyBvZiBzY29wZXMgd2UgcmVjb2duaXplLiAgKi8KK3R5cGVkZWYgZW51bSBzY29wZV9raW5kIHsKKyAgc2tfYmxvY2sgPSAwLCAgICAgIC8qIEFuIG9yZGluYXJ5IGJsb2NrIHNjb3BlLiAgVGhpcyBlbnVtZXJhdG9yIG11c3QKKwkJCWhhdmUgdGhlIHZhbHVlIHplcm8gYmVjYXVzZSAiY3BfYmluZGluZ19sZXZlbCIKKwkJCWlzIGluaXRpYWxpemVkIGJ5IHVzaW5nICJtZW1zZXQiIHRvIHNldCB0aGUKKwkJCWNvbnRlbnRzIHRvIHplcm8sIGFuZCB0aGUgZGVmYXVsdCBzY29wZSBraW5kCisJCQlpcyAic2tfYmxvY2siLiAgKi8KKyAgc2tfY2xlYW51cCwJICAgICAvKiBBIHNjb3BlIGZvciAocHNldWRvLSlzY29wZSBmb3IgY2xlYW51cC4gIEl0IGlzCisJCQlwc2V1ZG8gaW4gdGhhdCBpdCBpcyB0cmFuc3BhcmVudCB0byBuYW1lIGxvb2t1cAorCQkJYWN0aXZpdGllcy4gICovCisgIHNrX3RyeSwJICAgICAvKiBBIHRyeS1ibG9jay4gICovCisgIHNrX2NhdGNoLAkgICAgIC8qIEEgY2F0Y2gtYmxvY2suICAqLworICBza19mb3IsCSAgICAgLyogVGhlIHNjb3BlIG9mIHRoZSB2YXJpYWJsZSBkZWNsYXJlZCBpbiBhCisJCQlmb3ItaW5pdC1zdGF0ZW1lbnQuICAqLworICBza19mdW5jdGlvbl9wYXJtcywgLyogVGhlIHNjb3BlIGNvbnRhaW5pbmcgZnVuY3Rpb24gcGFyYW1ldGVycy4gICovCisgIHNrX2NsYXNzLAkgICAgIC8qIFRoZSBzY29wZSBjb250YWluaW5nIHRoZSBtZW1iZXJzIG9mIGEgY2xhc3MuICAqLworICBza19zY29wZWRfZW51bSwgICAgLyogVGhlIHNjb3BlIGNvbnRhaW5pbmcgdGhlIGVudW1lcnRvcnMgb2YgYSBDKysweAorICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVkIGVudW1lcmF0aW9uLiAgKi8KKyAgc2tfbmFtZXNwYWNlLAkgICAgIC8qIFRoZSBzY29wZSBjb250YWluaW5nIHRoZSBtZW1iZXJzIG9mIGEKKwkJCW5hbWVzcGFjZSwgaW5jbHVkaW5nIHRoZSBnbG9iYWwgc2NvcGUuICAqLworICBza190ZW1wbGF0ZV9wYXJtcywgLyogQSBzY29wZSBmb3IgdGVtcGxhdGUgcGFyYW1ldGVycy4gICovCisgIHNrX3RlbXBsYXRlX3NwZWMsICAvKiBMaWtlIHNrX3RlbXBsYXRlX3Bhcm1zLCBidXQgZm9yIGFuIGV4cGxpY2l0CisJCQlzcGVjaWFsaXphdGlvbi4gIFNpbmNlLCBieSBkZWZpbml0aW9uLCBhbgorCQkJZXhwbGljaXQgc3BlY2lhbGl6YXRpb24gaXMgaW50cm9kdWNlZCBieQorCQkJInRlbXBsYXRlIDw+IiwgdGhpcyBzY29wZSBpcyBhbHdheXMgZW1wdHkuICAqLworICBza19vbXAJICAgICAvKiBBbiBPcGVuTVAgc3RydWN0dXJlZCBibG9jay4gICovCit9IHNjb3BlX2tpbmQ7CisKKy8qIFRoZSBzY29wZSB3aGVyZSB0aGUgY2xhc3Mvc3RydWN0L3VuaW9uL2VudW0gdGFnIGFwcGxpZXMuICAqLwordHlwZWRlZiBlbnVtIHRhZ19zY29wZSB7CisgIHRzX2N1cnJlbnQgPSAwLAkvKiBDdXJyZW50IHNjb3BlIG9ubHkuICBUaGlzIGlzIGZvciB0aGUKKwkJCSAgICAgY2xhc3Mta2V5IGlkZW50aWZpZXI7CisJCQkgICBjYXNlIG1lbnRpb25lZCBpbiBbYmFzaWMubG9va3VwLmVsYWJdLzIsCisJCQkgICBvciB0aGUgY2xhc3MvZW51bSBkZWZpbml0aW9uCisJCQkgICAgIGNsYXNzLWtleSBpZGVudGlmaWVyIHsgLi4uIH07ICAqLworICB0c19nbG9iYWwgPSAxLAkvKiBBbGwgc2NvcGVzLiAgVGhpcyBpcyB0aGUgMy40LjEKKwkJCSAgIFtiYXNpYy5sb29rdXAudW5xdWFsXSBsb29rdXAgbWVudGlvbmVkCisJCQkgICBpbiBbYmFzaWMubG9va3VwLmVsYWJdLzIuICAqLworICB0c193aXRoaW5fZW5jbG9zaW5nX25vbl9jbGFzcyA9IDIJLyogU2VhcmNoIHdpdGhpbiBlbmNsb3Npbmcgbm9uLWNsYXNzCisJCQkJCSAgIG9ubHksIGZvciBmcmllbmQgY2xhc3MgbG9va3VwCisJCQkJCSAgIGFjY29yZGluZyB0byBbbmFtZXNwYWNlLm1lbWRlZl0vMworCQkJCQkgICBhbmQgW2NsYXNzLmZyaWVuZF0vOS4gICovCit9IHRhZ19zY29wZTsKKwordHlwZWRlZiBzdHJ1Y3QgR1RZKCgpKSBjcF9jbGFzc19iaW5kaW5nIHsKKyAgY3h4X2JpbmRpbmcgYmFzZTsKKyAgLyogVGhlIGJvdW5kIG5hbWUuICAqLworICB0cmVlIGlkZW50aWZpZXI7Cit9IGNwX2NsYXNzX2JpbmRpbmc7CisKK0RFRl9WRUNfTyhjcF9jbGFzc19iaW5kaW5nKTsKK0RFRl9WRUNfQUxMT0NfTyhjcF9jbGFzc19iaW5kaW5nLGdjKTsKKworLyogRm9yIGVhY2ggYmluZGluZyBjb250b3VyIHdlIGFsbG9jYXRlIGEgYmluZGluZ19sZXZlbCBzdHJ1Y3R1cmUKKyAgIHdoaWNoIHJlY29yZHMgdGhlIG5hbWVzIGRlZmluZWQgaW4gdGhhdCBjb250b3VyLgorICAgQ29udG91cnMgaW5jbHVkZToKKyAgICAwKSB0aGUgZ2xvYmFsIG9uZQorICAgIDEpIG9uZSBmb3IgZWFjaCBmdW5jdGlvbiBkZWZpbml0aW9uLAorICAgICAgIHdoZXJlIGludGVybmFsIGRlY2xhcmF0aW9ucyBvZiB0aGUgcGFyYW1ldGVycyBhcHBlYXIuCisgICAgMikgb25lIGZvciBlYWNoIGNvbXBvdW5kIHN0YXRlbWVudCwKKyAgICAgICB0byByZWNvcmQgaXRzIGRlY2xhcmF0aW9ucy4KKworICAgVGhlIGN1cnJlbnQgbWVhbmluZyBvZiBhIG5hbWUgY2FuIGJlIGZvdW5kIGJ5IHNlYXJjaGluZyB0aGUgbGV2ZWxzCisgICBmcm9tIHRoZSBjdXJyZW50IG9uZSBvdXQgdG8gdGhlIGdsb2JhbCBvbmUuCisKKyAgIE9mZiB0byB0aGUgc2lkZSwgbWF5IGJlIHRoZSBjbGFzc19iaW5kaW5nX2xldmVsLiAgVGhpcyBleGlzdHMgb25seQorICAgdG8gY2F0Y2ggY2xhc3MtbG9jYWwgZGVjbGFyYXRpb25zLiAgSXQgaXMgb3RoZXJ3aXNlIG5vbmV4aXN0ZW50LgorCisgICBBbHNvIHRoZXJlIG1heSBiZSBiaW5kaW5nIGxldmVscyB0aGF0IGNhdGNoIGNsZWFudXBzIHRoYXQgbXVzdCBiZQorICAgcnVuIHdoZW4gZXhjZXB0aW9ucyBvY2N1ci4gIFRodXMsIHRvIHNlZSB3aGV0aGVyIGEgbmFtZSBpcyBib3VuZCBpbgorICAgdGhlIGN1cnJlbnQgc2NvcGUsIGl0IGlzIG5vdCBlbm91Z2ggdG8gbG9vayBpbiB0aGUKKyAgIENVUlJFTlRfQklORElOR19MRVZFTC4gIFlvdSBzaG91bGQgdXNlIGxvb2t1cF9uYW1lX2N1cnJlbnRfbGV2ZWwKKyAgIGluc3RlYWQuICAqLworCisvKiBOb3RlIHRoYXQgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBgbmFtZXMnIGNvbXBvbmVudCBvZiB0aGUgZ2xvYmFsIGNvbnRvdXIKKyAgIGlzIGR1cGxpY2F0ZWQgaW4gdGhlIElERU5USUZJRVJfR0xPQkFMX1ZBTFVFcyBvZiBhbGwgaWRlbnRpZmllcnMuICAqLworCitzdHJ1Y3QgR1RZKCgpKSBjcF9iaW5kaW5nX2xldmVsIHsKKyAgICAvKiBBIGNoYWluIG9mIF9ERUNMIG5vZGVzIGZvciBhbGwgdmFyaWFibGVzLCBjb25zdGFudHMsIGZ1bmN0aW9ucywKKyAgICAgICBhbmQgdHlwZWRlZiB0eXBlcy4gIFRoZXNlIGFyZSBpbiB0aGUgcmV2ZXJzZSBvZiB0aGUgb3JkZXIKKyAgICAgICBzdXBwbGllZC4gIFRoZXJlIG1heSBiZSBPVkVSTE9BRHMgb24gdGhpcyBsaXN0LCB0b28sIGJ1dCB0aGV5CisgICAgICAgYXJlIHdyYXBwZWQgaW4gVFJFRV9MSVNUczsgdGhlIFRSRUVfVkFMVUUgaXMgdGhlIE9WRVJMT0FELiAgKi8KKyAgICB0cmVlIG5hbWVzOworCisgICAgLyogQ291bnQgb2YgZWxlbWVudHMgaW4gbmFtZXMgY2hhaW4uICAqLworICAgIHNpemVfdCBuYW1lc19zaXplOworCisgICAgLyogQSBjaGFpbiBvZiBOQU1FU1BBQ0VfREVDTCBub2Rlcy4gICovCisgICAgdHJlZSBuYW1lc3BhY2VzOworCisgICAgLyogQW4gYXJyYXkgb2Ygc3RhdGljIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIChmb3IgbmFtZXNwYWNlcyBvbmx5KSAqLworICAgIFZFQyh0cmVlLGdjKSAqc3RhdGljX2RlY2xzOworCisgICAgLyogQSBsaXN0IG9mIFVTSU5HX0RFQ0wgbm9kZXMuICAqLworICAgIHRyZWUgdXNpbmdzOworCisgICAgLyogQSBsaXN0IG9mIHVzZWQgbmFtZXNwYWNlcy4gUFVSUE9TRSBpcyB0aGUgbmFtZXNwYWNlLAorICAgICAgIFZBTFVFIHRoZSBjb21tb24gYW5jZXN0b3Igd2l0aCB0aGlzIGJpbmRpbmdfbGV2ZWwncyBuYW1lc3BhY2UuICAqLworICAgIHRyZWUgdXNpbmdfZGlyZWN0aXZlczsKKworICAgIC8qIEZvciB0aGUgYmluZGluZyBsZXZlbCBjb3JyZXNwb25kaW5nIHRvIGEgY2xhc3MsIHRoZSBlbnRpdGllcworICAgICAgIGRlY2xhcmVkIGluIHRoZSBjbGFzcyBvciBpdHMgYmFzZSBjbGFzc2VzLiAgKi8KKyAgICBWRUMoY3BfY2xhc3NfYmluZGluZyxnYykgKmNsYXNzX3NoYWRvd2VkOworCisgICAgLyogU2ltaWxhciB0byBjbGFzc19zaGFkb3dlZCwgYnV0IGZvciBJREVOVElGSUVSX1RZUEVfVkFMVUUsIGFuZAorICAgICAgIGlzIHVzZWQgZm9yIGFsbCBiaW5kaW5nIGxldmVscy4gVGhlIFRSRUVfUFVSUE9TRSBpcyB0aGUgbmFtZSBvZgorICAgICAgIHRoZSBlbnRpdHksIHRoZSBUUkVFX1RZUEUgaXMgdGhlIGFzc29jaWF0ZWQgdHlwZS4gIEluIGFkZGl0aW9uCisgICAgICAgdGhlIFRSRUVfVkFMVUUgaXMgdGhlIElERU5USUZJRVJfVFlQRV9WQUxVRSBiZWZvcmUgd2UgZW50ZXJlZAorICAgICAgIHRoZSBjbGFzcy4gICovCisgICAgdHJlZSB0eXBlX3NoYWRvd2VkOworCisgICAgLyogQSBUUkVFX0xJU1QuICBFYWNoIFRSRUVfVkFMVUUgaXMgdGhlIExBQkVMX0RFQ0wgZm9yIGEgbG9jYWwKKyAgICAgICBsYWJlbCBpbiB0aGlzIHNjb3BlLiAgVGhlIFRSRUVfUFVSUE9TRSBpcyB0aGUgcHJldmlvdXMgdmFsdWUgb2YKKyAgICAgICB0aGUgSURFTlRJRklFUl9MQUJFTCBWQUxVRS4gICovCisgICAgdHJlZSBzaGFkb3dlZF9sYWJlbHM7CisKKyAgICAvKiBGb3IgZWFjaCBsZXZlbCAoZXhjZXB0IG5vdCB0aGUgZ2xvYmFsIG9uZSksCisgICAgICAgYSBjaGFpbiBvZiBCTE9DSyBub2RlcyBmb3IgYWxsIHRoZSBsZXZlbHMKKyAgICAgICB0aGF0IHdlcmUgZW50ZXJlZCBhbmQgZXhpdGVkIG9uZSBsZXZlbCBkb3duLiAgKi8KKyAgICB0cmVlIGJsb2NrczsKKworICAgIC8qIFRoZSBlbnRpdHkgKG5hbWVzcGFjZSwgY2xhc3MsIGZ1bmN0aW9uKSB0aGUgc2NvcGUgb2Ygd2hpY2ggdGhpcworICAgICAgIGJpbmRpbmcgY29udG91ciBjb3JyZXNwb25kcyB0by4gIE90aGVyd2lzZSBOVUxMLiAgKi8KKyAgICB0cmVlIHRoaXNfZW50aXR5OworCisgICAgLyogVGhlIGJpbmRpbmcgbGV2ZWwgd2hpY2ggdGhpcyBvbmUgaXMgY29udGFpbmVkIGluIChpbmhlcml0cyBmcm9tKS4gICovCisgICAgc3RydWN0IGNwX2JpbmRpbmdfbGV2ZWwgKmxldmVsX2NoYWluOworCisgICAgLyogTGlzdCBvZiBWQVJfREVDTFMgc2F2ZWQgZnJvbSBhIHByZXZpb3VzIGZvciBzdGF0ZW1lbnQuCisgICAgICAgVGhlc2Ugd291bGQgYmUgZGVhZCBpbiBJU08tY29uZm9ybWluZyBjb2RlLCBidXQgbWlnaHQKKyAgICAgICBiZSByZWZlcmVuY2VkIGluIEFSTS1lcmEgY29kZS4gIFRoZXNlIGFyZSBzdG9yZWQgaW4gYQorICAgICAgIFRSRUVfTElTVDsgdGhlIFRSRUVfVkFMVUUgaXMgdGhlIGFjdHVhbCBkZWNsYXJhdGlvbi4gICovCisgICAgdHJlZSBkZWFkX3ZhcnNfZnJvbV9mb3I7CisKKyAgICAvKiBTVEFURU1FTlRfTElTVCBmb3Igc3RhdGVtZW50cyBpbiB0aGlzIGJpbmRpbmcgY29udG91ci4KKyAgICAgICBPbmx5IHVzZWQgYXQgcHJlc2VudCBmb3IgU0tfQ0xFQU5VUCB0ZW1wb3JhcnkgYmluZGluZ3MuICAqLworICAgIHRyZWUgc3RhdGVtZW50X2xpc3Q7CisKKyAgICAvKiBCaW5kaW5nIGRlcHRoIGF0IHdoaWNoIHRoaXMgbGV2ZWwgYmVnYW4uICAqLworICAgIGludCBiaW5kaW5nX2RlcHRoOworCisgICAgLyogVGhlIGtpbmQgb2Ygc2NvcGUgdGhhdCB0aGlzIG9iamVjdCByZXByZXNlbnRzLiAgSG93ZXZlciwgYQorICAgICAgIFNLX1RFTVBMQVRFX1NQRUMgc2NvcGUgaXMgcmVwcmVzZW50ZWQgd2l0aCBLSU5EIHNldCB0bworICAgICAgIFNLX1RFTVBMQVRFX1BBUk1TIGFuZCBFWFBMSUNJVF9TUEVDX1Agc2V0IHRvIHRydWUuICAqLworICAgIEVOVU1fQklURklFTEQgKHNjb3BlX2tpbmQpIGtpbmQgOiA0OworCisgICAgLyogVHJ1ZSBpZiB0aGlzIHNjb3BlIGlzIGFuIFNLX1RFTVBMQVRFX1NQRUMgc2NvcGUuICBUaGlzIGZpZWxkIGlzCisgICAgICAgb25seSB2YWxpZCBpZiBLSU5EID09IFNLX1RFTVBMQVRFX1BBUk1TLiAgKi8KKyAgICBCT09MX0JJVEZJRUxEIGV4cGxpY2l0X3NwZWNfcCA6IDE7CisKKyAgICAvKiB0cnVlIG1lYW5zIG1ha2UgYSBCTE9DSyBmb3IgdGhpcyBsZXZlbCByZWdhcmRsZXNzIG9mIGFsbCBlbHNlLiAgKi8KKyAgICB1bnNpZ25lZCBrZWVwIDogMTsKKworICAgIC8qIE5vbnplcm8gaWYgdGhpcyBsZXZlbCBjYW4gc2FmZWx5IGhhdmUgYWRkaXRpb25hbAorICAgICAgIGNsZWFudXAtbmVlZGluZyB2YXJpYWJsZXMgYWRkZWQgdG8gaXQuICAqLworICAgIHVuc2lnbmVkIG1vcmVfY2xlYW51cHNfb2sgOiAxOworICAgIHVuc2lnbmVkIGhhdmVfY2xlYW51cHMgOiAxOworCisgICAgLyogMjQgYml0cyBsZWZ0IHRvIGZpbGwgYSAzMi1iaXQgd29yZC4gICovCisgIH07CisKKy8qIFRoZSBiaW5kaW5nIGxldmVsIGN1cnJlbnRseSBpbiBlZmZlY3QuICAqLworCisjZGVmaW5lIGN1cnJlbnRfYmluZGluZ19sZXZlbAkJCVwKKyAgKCooY2Z1biAmJiBjcF9mdW5jdGlvbl9jaGFpbiAmJiBjcF9mdW5jdGlvbl9jaGFpbi0+YmluZGluZ3MgXAorICAgPyAmY3BfZnVuY3Rpb25fY2hhaW4tPmJpbmRpbmdzCQlcCisgICA6ICZzY29wZV9jaGFpbi0+YmluZGluZ3MpKQorCisvKiBUaGUgYmluZGluZyBsZXZlbCBvZiB0aGUgY3VycmVudCBjbGFzcywgaWYgYW55LiAgKi8KKworI2RlZmluZSBjbGFzc19iaW5kaW5nX2xldmVsIHNjb3BlX2NoYWluLT5jbGFzc19iaW5kaW5ncworCisvKiBUaGUgdHJlZSBub2RlIHJlcHJlc2VudGluZyB0aGUgZ2xvYmFsIHNjb3BlLiAgKi8KK2V4dGVybiBHVFkoKCkpIHRyZWUgZ2xvYmFsX25hbWVzcGFjZTsKK2V4dGVybiBHVFkoKCkpIHRyZWUgZ2xvYmFsX3Njb3BlX25hbWU7CisKKy8qIEluZGljYXRlcyB0aGF0IHRoZXJlIGlzIGEgdHlwZSB2YWx1ZSBpbiBzb21lIG5hbWVzcGFjZSwgYWx0aG91Z2gKKyAgIHRoYXQgaXMgbm90IG5lY2Vzc2FyaWx5IGluIHNjb3BlIGF0IHRoZSBtb21lbnQuICAqLworCitleHRlcm4gR1RZKCgpKSB0cmVlIGdsb2JhbF90eXBlX25vZGU7CisKKy8qIFRydWUgaWYgU0NPUEUgZGVzaWduYXRlcyB0aGUgZ2xvYmFsIHNjb3BlIGJpbmRpbmcgY29udG91ci4gICovCisjZGVmaW5lIGdsb2JhbF9zY29wZV9wKFNDT1BFKSBcCisgICgoU0NPUEUpID09IE5BTUVTUEFDRV9MRVZFTCAoZ2xvYmFsX25hbWVzcGFjZSkpCisKK2V4dGVybiBjeHhfc2NvcGUgKmxlYXZlX3Njb3BlICh2b2lkKTsKK2V4dGVybiBib29sIGtlcHRfbGV2ZWxfcCAodm9pZCk7CitleHRlcm4gaW50IGdsb2JhbF9iaW5kaW5nc19wICh2b2lkKTsKK2V4dGVybiBib29sIHRvcGxldmVsX2JpbmRpbmdzX3AJKHZvaWQpOworZXh0ZXJuIGJvb2wgbmFtZXNwYWNlX2JpbmRpbmdzX3AgKHZvaWQpOworZXh0ZXJuIGJvb2wgdGVtcGxhdGVfcGFybV9zY29wZV9wICh2b2lkKTsKK2V4dGVybiBzY29wZV9raW5kIGlubmVybW9zdF9zY29wZV9raW5kICh2b2lkKTsKK2V4dGVybiBjeHhfc2NvcGUgKmJlZ2luX3Njb3BlIChzY29wZV9raW5kLCB0cmVlKTsKK2V4dGVybiB2b2lkIHByaW50X2JpbmRpbmdfc3RhY2sJKHZvaWQpOworZXh0ZXJuIHZvaWQgcHVzaF90b190b3BfbGV2ZWwgKHZvaWQpOworZXh0ZXJuIHZvaWQgcG9wX2Zyb21fdG9wX2xldmVsICh2b2lkKTsKK2V4dGVybiB2b2lkIHBvcF9ldmVyeXRoaW5nICh2b2lkKTsKK2V4dGVybiB2b2lkIGtlZXBfbmV4dF9sZXZlbCAoYm9vbCk7CitleHRlcm4gYm9vbCBpc19hbmNlc3RvciAodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBwdXNoX3Njb3BlICh0cmVlKTsKK2V4dGVybiB2b2lkIHBvcF9zY29wZSAodHJlZSk7CitleHRlcm4gdHJlZSBwdXNoX2lubmVyX3Njb3BlICh0cmVlKTsKK2V4dGVybiB2b2lkIHBvcF9pbm5lcl9zY29wZSAodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBwdXNoX2JpbmRpbmdfbGV2ZWwgKHN0cnVjdCBjcF9iaW5kaW5nX2xldmVsICopOworDAorZXh0ZXJuIHZvaWQgcHVzaF9uYW1lc3BhY2UgKHRyZWUpOworZXh0ZXJuIHZvaWQgcG9wX25hbWVzcGFjZSAodm9pZCk7CitleHRlcm4gdm9pZCBwdXNoX25lc3RlZF9uYW1lc3BhY2UgKHRyZWUpOworZXh0ZXJuIHZvaWQgcG9wX25lc3RlZF9uYW1lc3BhY2UgKHRyZWUpOworZXh0ZXJuIGJvb2wgaGFuZGxlX25hbWVzcGFjZV9hdHRycyAodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBwdXNobGV2ZWxfY2xhc3MgKHZvaWQpOworZXh0ZXJuIHZvaWQgcG9wbGV2ZWxfY2xhc3MgKHZvaWQpOworZXh0ZXJuIHRyZWUgcHVzaGRlY2xfd2l0aF9zY29wZSAodHJlZSwgY3h4X3Njb3BlICosIGJvb2wpOworZXh0ZXJuIHRyZWUgbG9va3VwX25hbWVfcHJlZmVyX3R5cGUgKHRyZWUsIGludCk7CitleHRlcm4gdHJlZSBsb29rdXBfbmFtZV9yZWFsICh0cmVlLCBpbnQsIGludCwgYm9vbCwgaW50LCBpbnQpOworZXh0ZXJuIHRyZWUgbG9va3VwX3R5cGVfc2NvcGUgKHRyZWUsIHRhZ19zY29wZSk7CitleHRlcm4gdHJlZSBuYW1lc3BhY2VfYmluZGluZyAodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBzZXRfbmFtZXNwYWNlX2JpbmRpbmcgKHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIGJvb2wgaGlkZGVuX25hbWVfcCAodHJlZSk7CitleHRlcm4gdHJlZSByZW1vdmVfaGlkZGVuX25hbWVzICh0cmVlKTsKK2V4dGVybiB0cmVlIGxvb2t1cF9xdWFsaWZpZWRfbmFtZSAodHJlZSwgdHJlZSwgYm9vbCwgYm9vbCk7CitleHRlcm4gdHJlZSBsb29rdXBfbmFtZV9ub25jbGFzcyAodHJlZSk7CitleHRlcm4gdHJlZSBsb29rdXBfbmFtZV9pbm5lcm1vc3Rfbm9uY2xhc3NfbGV2ZWwgKHRyZWUpOworZXh0ZXJuIGJvb2wgaXNfbG9jYWxfZXh0ZXJuICh0cmVlKTsKK2V4dGVybiB0cmVlIGxvb2t1cF9mdW5jdGlvbl9ub25jbGFzcyAodHJlZSwgVkVDKHRyZWUsZ2MpICosIGJvb2wpOworZXh0ZXJuIHZvaWQgcHVzaF9sb2NhbF9iaW5kaW5nICh0cmVlLCB0cmVlLCBpbnQpOworZXh0ZXJuIGJvb2wgcHVzaGRlY2xfY2xhc3NfbGV2ZWwgKHRyZWUpOworZXh0ZXJuIHRyZWUgcHVzaGRlY2xfbmFtZXNwYWNlX2xldmVsICh0cmVlLCBib29sKTsKK2V4dGVybiBib29sIHB1c2hfY2xhc3NfbGV2ZWxfYmluZGluZyAodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBnZXRkZWNscyAodm9pZCk7CitleHRlcm4gdHJlZSBjcF9uYW1lc3BhY2VfZGVjbHMgKHRyZWUpOworZXh0ZXJuIHZvaWQgc2V0X2RlY2xfbmFtZXNwYWNlICh0cmVlLCB0cmVlLCBib29sKTsKK2V4dGVybiB2b2lkIHB1c2hfZGVjbF9uYW1lc3BhY2UgKHRyZWUpOworZXh0ZXJuIHZvaWQgcG9wX2RlY2xfbmFtZXNwYWNlICh2b2lkKTsKK2V4dGVybiB2b2lkIGRvX25hbWVzcGFjZV9hbGlhcyAodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBkb190b3BsZXZlbF91c2luZ19kZWNsICh0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGRvX2xvY2FsX3VzaW5nX2RlY2wgKHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgZG9fY2xhc3NfdXNpbmdfZGVjbCAodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBkb191c2luZ19kaXJlY3RpdmUgKHRyZWUpOworZXh0ZXJuIHRyZWUgbG9va3VwX2FyZ19kZXBlbmRlbnQgKHRyZWUsIHRyZWUsIFZFQyh0cmVlLGdjKSAqKTsKK2V4dGVybiBib29sIGlzX2Fzc29jaWF0ZWRfbmFtZXNwYWNlICh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIHBhcnNlX3VzaW5nX2RpcmVjdGl2ZSAodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBpbm5lcm1vc3Rfbm9uX25hbWVzcGFjZV92YWx1ZSAodHJlZSk7CitleHRlcm4gY3h4X2JpbmRpbmcgKm91dGVyX2JpbmRpbmcgKHRyZWUsIGN4eF9iaW5kaW5nICosIGJvb2wpOworZXh0ZXJuIHZvaWQgY3BfZW1pdF9kZWJ1Z19pbmZvX2Zvcl91c2luZyAodHJlZSwgdHJlZSk7CisKKy8qIFNldCAqREVDTCB0byB0aGUgKG5vbi1oaWRkZW4pIGRlY2xhcmF0aW9uIGZvciBJRCBhdCBnbG9iYWwgc2NvcGUsCisgICBpZiBwcmVzZW50IGFuZCByZXR1cm4gdHJ1ZTsgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2V0X2dsb2JhbF92YWx1ZV9pZl9wcmVzZW50ICh0cmVlIGlkLCB0cmVlICpkZWNsKQoreworICB0cmVlIGdsb2JhbF92YWx1ZSA9IG5hbWVzcGFjZV9iaW5kaW5nIChpZCwgZ2xvYmFsX25hbWVzcGFjZSk7CisgIGlmIChnbG9iYWxfdmFsdWUpCisgICAgKmRlY2wgPSBnbG9iYWxfdmFsdWU7CisgIHJldHVybiBnbG9iYWxfdmFsdWUgIT0gTlVMTDsKK30KKworLyogVHJ1ZSBpcyB0aGUgYmluZGluZyBvZiBJREVOVElGSUVSIGF0IGdsb2JhbCBzY29wZSBuYW1lcyBhIHR5cGUuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2lzX3R5cGVuYW1lX2F0X2dsb2JhbF9zY29wZSAodHJlZSBpZCkKK3sKKyAgdHJlZSBnbG9iYWxfdmFsdWUgPSBuYW1lc3BhY2VfYmluZGluZyAoaWQsIGdsb2JhbF9uYW1lc3BhY2UpOworCisgIHJldHVybiBnbG9iYWxfdmFsdWUgJiYgVFJFRV9DT0RFIChnbG9iYWxfdmFsdWUpID09IFRZUEVfREVDTDsKK30KKworI2VuZGlmIC8qIEdDQ19DUF9OQU1FX0xPT0tVUF9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvY3BwZGVmYXVsdC5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NwcGRlZmF1bHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTdjNGFiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2NwcGRlZmF1bHQuaApAQCAtMCwwICsxLDcwIEBACisvKiBDUFAgTGlicmFyeS4KKyAgIENvcHlyaWdodCAoQykgMTk4NiwgMTk4NywgMTk4OSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwKKyAgIDE5OTksIDIwMDAsIDIwMDMsIDIwMDQsIDIwMDYsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBQZXIgQm90aG5lciwgMTk5NC05NS4KKyAgIEJhc2VkIG9uIENDQ1AgcHJvZ3JhbSBieSBQYXVsIFJ1YmluLCBKdW5lIDE5ODYKKyAgIEFkYXB0ZWQgdG8gQU5TSSBDLCBSaWNoYXJkIFN0YWxsbWFuLCBKYW4gMTk4NworCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX0NQUERFRkFVTFRfSAorI2RlZmluZSBHQ0NfQ1BQREVGQVVMVF9ICisKKy8qIFRoaXMgaXMgdGhlIGRlZmF1bHQgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIGluY2x1ZGUgZmlsZXMuCisgICBJdCBtYXkgYmUgb3ZlcnJpZGRlbiBieSB0aGUgdmFyaW91cyAtSSBhbmQgLWl4eHggb3B0aW9ucy4KKworICAgI2luY2x1ZGUgImZpbGUiIGxvb2tzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgY3VycmVudCBmaWxlLAorICAgdGhlbiB0aGlzIGxpc3QuCisgICAjaW5jbHVkZSA8ZmlsZT4ganVzdCBsb29rcyBpbiB0aGlzIGxpc3QuCisKKyAgIEFsbCB0aGVzZSBkaXJlY3RvcmllcyBhcmUgdHJlYXRlZCBhcyBgc3lzdGVtJyBpbmNsdWRlIGRpcmVjdG9yaWVzCisgICAodGhleSBhcmUgbm90IHN1YmplY3QgdG8gcGVkYW50aWMgd2FybmluZ3MgaW4gc29tZSBjYXNlcykuICAqLworCitzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlCit7CisgIGNvbnN0IGNoYXIgKmNvbnN0IGZuYW1lOwkvKiBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5LiAgKi8KKyAgY29uc3QgY2hhciAqY29uc3QgY29tcG9uZW50OwkvKiBUaGUgY29tcG9uZW50IGNvbnRhaW5pbmcgdGhlIGRpcmVjdG9yeQorCQkJCSAgIChzZWUgdXBkYXRlX3BhdGggaW4gcHJlZml4LmMpICovCisgIGNvbnN0IGNoYXIgY3BsdXNwbHVzOwkJLyogT25seSBsb29rIGhlcmUgaWYgd2UncmUgY29tcGlsaW5nIEMrKy4gICovCisgIGNvbnN0IGNoYXIgY3h4X2F3YXJlOwkJLyogSW5jbHVkZXMgaW4gdGhpcyBkaXJlY3RvcnkgZG9uJ3QgbmVlZCB0bworCQkJCSAgIGJlIHdyYXBwZWQgaW4gZXh0ZXJuICJDIiB3aGVuIGNvbXBpbGluZworCQkJCSAgIEMrKy4gICovCisgIGNvbnN0IGNoYXIgYWRkX3N5c3Jvb3Q7CS8qIEZOQU1FIHNob3VsZCBiZSBwcmVmaXhlZCBieQorCQkJCSAgIGNwcF9TWVNST09ULiAgKi8KKyAgY29uc3QgY2hhciBtdWx0aWxpYjsJCS8qIEZOQU1FIHNob3VsZCBoYXZlIHRoZSBtdWx0aWxpYiBwYXRoCisJCQkJICAgc3BlY2lmaWVkIHdpdGggLWltdWx0aWxpYgorCQkJCSAgIGFwcGVuZGVkLiAgKi8KK307CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlIGNwcF9pbmNsdWRlX2RlZmF1bHRzW107CitleHRlcm4gY29uc3QgY2hhciBjcHBfR0NDX0lOQ0xVREVfRElSW107CitleHRlcm4gY29uc3Qgc2l6ZV90IGNwcF9HQ0NfSU5DTFVERV9ESVJfbGVuOworCisvKiBUaGUgY29uZmlndXJlLXRpbWUgcHJlZml4LCBpLmUuLCB0aGUgdmFsdWUgc3VwcGxpZWQgYXMgdGhlIGFyZ3VtZW50CisgICB0byAtLXByZWZpeD0uICAqLworZXh0ZXJuIGNvbnN0IGNoYXIgY3BwX1BSRUZJWFtdOworLyogVGhlIGxlbmd0aCBvZiB0aGUgY29uZmlndXJlLXRpbWUgcHJlZml4LiAgKi8KK2V4dGVybiBjb25zdCBzaXplX3QgY3BwX1BSRUZJWF9sZW47CisvKiBUaGUgY29uZmlndXJlLXRpbWUgZXhlY3V0aW9uIHByZWZpeC4gIFRoaXMgaXMgdHlwaWNhbGx5IHRoZSBsaWIvZ2NjCisgICBzdWJkaXJlY3Rvcnkgb2YgY3BwX1BSRUZJWC4gICovCitleHRlcm4gY29uc3QgY2hhciBjcHBfRVhFQ19QUkVGSVhbXTsKKy8qIFRoZSBydW4tdGltZSBleGVjdXRpb24gcHJlZml4LiAgVGhpcyBpcyB0eXBpY2FsbHkgdGhlIGxpYi9nY2MKKyAgIHN1YmRpcmVjdG9yeSBvZiB0aGUgYWN0dWFsIGluc3RhbGxhdGlvbi4gICovCitleHRlcm4gY29uc3QgY2hhciAqZ2NjX2V4ZWNfcHJlZml4OworCisvKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdG9vbGNoYWluIGlzIHJlbG9jYXRlZC4gICovCitib29sIGNwcF9yZWxvY2F0ZWQgKHZvaWQpOworCisjZW5kaWYgLyogISBHQ0NfQ1BQREVGQVVMVF9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvY3BwbGliLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvY3BwbGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE3NWJiYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9jcHBsaWIuaApAQCAtMCwwICsxLDk0NiBAQAorLyogRGVmaW5pdGlvbnMgZm9yIENQUCBsaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLAorICAgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCwgMjAwOQorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IFBlciBCb3RobmVyLCAxOTk0LTk1LgorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIEluIG90aGVyIHdvcmRzLCB5b3UgYXJlIHdlbGNvbWUgdG8gdXNlLCBzaGFyZSBhbmQgaW1wcm92ZSB0aGlzIHByb2dyYW0uCisgWW91IGFyZSBmb3JiaWRkZW4gdG8gZm9yYmlkIGFueW9uZSBlbHNlIHRvIHVzZSwgc2hhcmUgYW5kIGltcHJvdmUKKyB3aGF0IHlvdSBnaXZlIHRoZW0uICAgSGVscCBzdGFtcCBvdXQgc29mdHdhcmUtaG9hcmRpbmchICAqLworI2lmbmRlZiBMSUJDUFBfQ1BQTElCX0gKKyNkZWZpbmUgTElCQ1BQX0NQUExJQl9ICisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlICJzeW10YWIuaCIKKyNpbmNsdWRlICJsaW5lLW1hcC5oIgorCit0eXBlZGVmIHN0cnVjdCBjcHBfcmVhZGVyIGNwcF9yZWFkZXI7Cit0eXBlZGVmIHN0cnVjdCBjcHBfYnVmZmVyIGNwcF9idWZmZXI7Cit0eXBlZGVmIHN0cnVjdCBjcHBfb3B0aW9ucyBjcHBfb3B0aW9uczsKK3R5cGVkZWYgc3RydWN0IGNwcF90b2tlbiBjcHBfdG9rZW47Cit0eXBlZGVmIHN0cnVjdCBjcHBfc3RyaW5nIGNwcF9zdHJpbmc7Cit0eXBlZGVmIHN0cnVjdCBjcHBfaGFzaG5vZGUgY3BwX2hhc2hub2RlOwordHlwZWRlZiBzdHJ1Y3QgY3BwX21hY3JvIGNwcF9tYWNybzsKK3R5cGVkZWYgc3RydWN0IGNwcF9jYWxsYmFja3MgY3BwX2NhbGxiYWNrczsKK3R5cGVkZWYgc3RydWN0IGNwcF9kaXIgY3BwX2RpcjsKKworc3RydWN0IGFuc3dlcjsKK3N0cnVjdCBfY3BwX2ZpbGU7CisKKy8qIFRoZSBmaXJzdCB0aHJlZSBncm91cHMsIGFwYXJ0IGZyb20gJz0nLCBjYW4gYXBwZWFyIGluIHByZXByb2Nlc3NvcgorICAgZXhwcmVzc2lvbnMgKCs9IGFuZCAtPSBhcmUgdXNlZCB0byBpbmRpY2F0ZSB1bmFyeSArIGFuZCAtIHJlc3AuKS4KKyAgIFRoaXMgYWxsb3dzIGEgbG9va3VwIHRhYmxlIHRvIGJlIGltcGxlbWVudGVkIGluIF9jcHBfcGFyc2VfZXhwci4KKworICAgVGhlIGZpcnN0IGdyb3VwLCB0byBDUFBfTEFTVF9FUSwgY2FuIGJlIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGFuCisgICAnPScuICBUaGUgbGV4ZXIgbmVlZHMgb3BlcmF0b3JzIGVuZGluZyBpbiAnPScsIGxpa2UgIj4+PSIsIHRvIGJlIGluCisgICB0aGUgc2FtZSBvcmRlciBhcyB0aGVpciBjb3VudGVycGFydHMgd2l0aG91dCB0aGUgJz0nLCBsaWtlICI+PiIuCisKKyAgIFNlZSB0aGUgY3BwX29wZXJhdG9yIHRhYmxlIG9wdGFiIGluIGV4cHIuYyBpZiB5b3UgY2hhbmdlIHRoZSBvcmRlciBvcgorICAgYWRkIG9yIHJlbW92ZSBhbnl0aGluZyBpbiB0aGUgZmlyc3QgZ3JvdXAuICAqLworCisjZGVmaW5lIFRUWVBFX1RBQkxFCQkJCQkJCVwKKyAgT1AoRVEsCQkiPSIpCQkJCQkJXAorICBPUChOT1QsCQkiISIpCQkJCQkJXAorICBPUChHUkVBVEVSLAkJIj4iKQkvKiBjb21wYXJlICovCQkJCVwKKyAgT1AoTEVTUywJCSI8IikJCQkJCQlcCisgIE9QKFBMVVMsCQkiKyIpCS8qIG1hdGggKi8JCQkJXAorICBPUChNSU5VUywJCSItIikJCQkJCQlcCisgIE9QKE1VTFQsCQkiKiIpCQkJCQkJXAorICBPUChESVYsCQkiLyIpCQkJCQkJXAorICBPUChNT0QsCQkiJSIpCQkJCQkJXAorICBPUChBTkQsCQkiJiIpCS8qIGJpdCBvcHMgKi8JCQkJXAorICBPUChPUiwJCSJ8IikJCQkJCQlcCisgIE9QKFhPUiwJCSJeIikJCQkJCQlcCisgIE9QKFJTSElGVCwJCSI+PiIpCQkJCQkJXAorICBPUChMU0hJRlQsCQkiPDwiKQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgT1AoQ09NUEwsCQkifiIpCQkJCQkJXAorICBPUChBTkRfQU5ELAkJIiYmIikJLyogbG9naWNhbCAqLwkJCQlcCisgIE9QKE9SX09SLAkJInx8IikJCQkJCQlcCisgIE9QKFFVRVJZLAkJIj8iKQkJCQkJCVwKKyAgT1AoQ09MT04sCQkiOiIpCQkJCQkJXAorICBPUChDT01NQSwJCSIsIikJLyogZ3JvdXBpbmcgKi8JCQkJXAorICBPUChPUEVOX1BBUkVOLAkiKCIpCQkJCQkJXAorICBPUChDTE9TRV9QQVJFTiwJIikiKQkJCQkJCVwKKyAgVEsoRU9GLAkJTk9ORSkJCQkJCQlcCisgIE9QKEVRX0VRLAkJIj09IikJLyogY29tcGFyZSAqLwkJCQlcCisgIE9QKE5PVF9FUSwJCSIhPSIpCQkJCQkJXAorICBPUChHUkVBVEVSX0VRLAkiPj0iKQkJCQkJCVwKKyAgT1AoTEVTU19FUSwJCSI8PSIpCQkJCQkJXAorCQkJCQkJCQkJXAorICAvKiBUaGVzZSB0d28gYXJlIHVuYXJ5ICsgLyAtIGluIHByZXByb2Nlc3NvciBleHByZXNzaW9ucy4gICovCQlcCisgIE9QKFBMVVNfRVEsCQkiKz0iKQkvKiBtYXRoICovCQkJCVwKKyAgT1AoTUlOVVNfRVEsCQkiLT0iKQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgT1AoTVVMVF9FUSwJCSIqPSIpCQkJCQkJXAorICBPUChESVZfRVEsCQkiLz0iKQkJCQkJCVwKKyAgT1AoTU9EX0VRLAkJIiU9IikJCQkJCQlcCisgIE9QKEFORF9FUSwJCSImPSIpCS8qIGJpdCBvcHMgKi8JCQkJXAorICBPUChPUl9FUSwJCSJ8PSIpCQkJCQkJXAorICBPUChYT1JfRVEsCQkiXj0iKQkJCQkJCVwKKyAgT1AoUlNISUZUX0VRLAkJIj4+PSIpCQkJCQkJXAorICBPUChMU0hJRlRfRVEsCQkiPDw9IikJCQkJCQlcCisgIC8qIERpZ3JhcGhzIHRvZ2V0aGVyLCBiZWdpbm5pbmcgd2l0aCBDUFBfRklSU1RfRElHUkFQSC4gICovCQlcCisgIE9QKEhBU0gsCQkiIyIpCS8qIGRpZ3JhcGhzICovCQkJCVwKKyAgT1AoUEFTVEUsCQkiIyMiKQkJCQkJCVwKKyAgT1AoT1BFTl9TUVVBUkUsCSJbIikJCQkJCQlcCisgIE9QKENMT1NFX1NRVUFSRSwJIl0iKQkJCQkJCVwKKyAgT1AoT1BFTl9CUkFDRSwJInsiKQkJCQkJCVwKKyAgT1AoQ0xPU0VfQlJBQ0UsCSJ9IikJCQkJCQlcCisgIC8qIFRoZSByZW1haW5kZXIgb2YgdGhlIHB1bmN0dWF0aW9uLglPcmRlciBpcyBub3Qgc2lnbmlmaWNhbnQuICAqLwlcCisgIE9QKFNFTUlDT0xPTiwJCSI7IikJLyogc3RydWN0dXJlICovCQkJCVwKKyAgT1AoRUxMSVBTSVMsCQkiLi4uIikJCQkJCQlcCisgIE9QKFBMVVNfUExVUywJCSIrKyIpCS8qIGluY3JlbWVudCAqLwkJCQlcCisgIE9QKE1JTlVTX01JTlVTLAkiLS0iKQkJCQkJCVwKKyAgT1AoREVSRUYsCQkiLT4iKQkvKiBhY2Nlc3NvcnMgKi8JCQkJXAorICBPUChET1QsCQkiLiIpCQkJCQkJXAorICBPUChTQ09QRSwJCSI6OiIpCQkJCQkJXAorICBPUChERVJFRl9TVEFSLAkiLT4qIikJCQkJCQlcCisgIE9QKERPVF9TVEFSLAkJIi4qIikJCQkJCQlcCisgIE9QKEFUU0lHTiwJCSJAIikgIC8qIHVzZWQgaW4gT2JqZWN0aXZlLUMgKi8JCQlcCisJCQkJCQkJCQlcCisgIFRLKE5BTUUsCQlJREVOVCkJIC8qIHdvcmQgKi8JCQkJXAorICBUSyhBVF9OQU1FLAkJSURFTlQpCSAvKiBAd29yZCAtIE9iamVjdGl2ZS1DICovCQlcCisgIFRLKE5VTUJFUiwJCUxJVEVSQUwpIC8qIDM0X2JlK3RhICAqLwkJCVwKKwkJCQkJCQkJCVwKKyAgVEsoQ0hBUiwJCUxJVEVSQUwpIC8qICdjaGFyJyAqLwkJCQlcCisgIFRLKFdDSEFSLAkJTElURVJBTCkgLyogTCdjaGFyJyAqLwkJCQlcCisgIFRLKENIQVIxNiwJCUxJVEVSQUwpIC8qIHUnY2hhcicgKi8JCQkJXAorICBUSyhDSEFSMzIsCQlMSVRFUkFMKSAvKiBVJ2NoYXInICovCQkJCVwKKyAgVEsoT1RIRVIsCQlMSVRFUkFMKSAvKiBzdHJheSBwdW5jdHVhdGlvbiAqLwkJXAorCQkJCQkJCQkJXAorICBUSyhTVFJJTkcsCQlMSVRFUkFMKSAvKiAic3RyaW5nIiAqLwkJCQlcCisgIFRLKFdTVFJJTkcsCQlMSVRFUkFMKSAvKiBMInN0cmluZyIgKi8JCQlcCisgIFRLKFNUUklORzE2LAkJTElURVJBTCkgLyogdSJzdHJpbmciICovCQkJXAorICBUSyhTVFJJTkczMiwJCUxJVEVSQUwpIC8qIFUic3RyaW5nIiAqLwkJCVwKKyAgVEsoVVRGOFNUUklORywJTElURVJBTCkgLyogdTgic3RyaW5nIiAqLwkJCVwKKyAgVEsoT0JKQ19TVFJJTkcsCUxJVEVSQUwpIC8qIEAic3RyaW5nIiAtIE9iamVjdGl2ZS1DICovCQlcCisgIFRLKEhFQURFUl9OQU1FLAlMSVRFUkFMKSAvKiA8c3RkaW8uaD4gaW4gI2luY2x1ZGUgKi8JCVwKKwkJCQkJCQkJCVwKKyAgVEsoQ09NTUVOVCwJCUxJVEVSQUwpIC8qIE9ubHkgaWYgb3V0cHV0IGNvbW1lbnRzLiAgKi8JXAorCQkJCSAvKiBTUEVMTF9MSVRFUkFMIGhhcHBlbnMgdG8gRFRSVC4gICovCVwKKyAgVEsoTUFDUk9fQVJHLAkJTk9ORSkJIC8qIE1hY3JvIGFyZ3VtZW50LiAgKi8JCQlcCisgIFRLKFBSQUdNQSwJCU5PTkUpCSAvKiBPbmx5IGZvciBkZWZlcnJlZCBwcmFnbWFzLiAgKi8JXAorICBUSyhQUkFHTUFfRU9MLAlOT05FKQkgLyogRW5kLW9mLWxpbmUgZm9yIGRlZmVycmVkIHByYWdtYXMuICAqLyBcCisgIFRLKFBBRERJTkcsCQlOT05FKQkgLyogV2hpdGVzcGFjZSBmb3IgLUUuCSovCisKKyNkZWZpbmUgT1AoZSwgcykgQ1BQXyAjIyBlLAorI2RlZmluZSBUSyhlLCBzKSBDUFBfICMjIGUsCitlbnVtIGNwcF90dHlwZQoreworICBUVFlQRV9UQUJMRQorICBOX1RUWVBFUywKKworICAvKiBQb3NpdGlvbnMgaW4gdGhlIHRhYmxlLiAgKi8KKyAgQ1BQX0xBU1RfRVEgICAgICAgID0gQ1BQX0xTSElGVCwKKyAgQ1BQX0ZJUlNUX0RJR1JBUEggID0gQ1BQX0hBU0gsCisgIENQUF9MQVNUX1BVTkNUVUFUT1I9IENQUF9BVFNJR04sCisgIENQUF9MQVNUX0NQUF9PUCAgICA9IENQUF9MRVNTX0VRCit9OworI3VuZGVmIE9QCisjdW5kZWYgVEsKKworLyogQyBsYW5ndWFnZSBraW5kLCB1c2VkIHdoZW4gY2FsbGluZyBjcHBfY3JlYXRlX3JlYWRlci4gICovCitlbnVtIGNfbGFuZyB7Q0xLX0dOVUM4OSA9IDAsIENMS19HTlVDOTksIENMS19TVERDODksIENMS19TVERDOTQsIENMS19TVERDOTksCisJICAgICBDTEtfR05VQ1hYLCBDTEtfQ1hYOTgsIENMS19HTlVDWFgwWCwgQ0xLX0NYWDBYLCBDTEtfQVNNfTsKKworLyogUGF5bG9hZCBvZiBhIE5VTUJFUiwgU1RSSU5HLCBDSEFSIG9yIENPTU1FTlQgdG9rZW4uICAqLworc3RydWN0IEdUWSgoKSkgY3BwX3N0cmluZyB7CisgIHVuc2lnbmVkIGludCBsZW47CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRleHQ7Cit9OworCisvKiBGbGFncyBmb3IgdGhlIGNwcF90b2tlbiBzdHJ1Y3R1cmUuICAqLworI2RlZmluZSBQUkVWX1dISVRFCSgxIDw8IDApIC8qIElmIHdoaXRlc3BhY2UgYmVmb3JlIHRoaXMgdG9rZW4uICAqLworI2RlZmluZSBESUdSQVBICQkoMSA8PCAxKSAvKiBJZiBpdCB3YXMgYSBkaWdyYXBoLiAgKi8KKyNkZWZpbmUgU1RSSU5HSUZZX0FSRwkoMSA8PCAyKSAvKiBJZiBtYWNybyBhcmd1bWVudCB0byBiZSBzdHJpbmdpZmllZC4gICovCisjZGVmaW5lIFBBU1RFX0xFRlQJKDEgPDwgMykgLyogSWYgb24gTEhTIG9mIGEgIyMgb3BlcmF0b3IuICAqLworI2RlZmluZSBOQU1FRF9PUAkoMSA8PCA0KSAvKiBDKysgbmFtZWQgb3BlcmF0b3JzLiAgKi8KKyNkZWZpbmUgTk9fRVhQQU5ECSgxIDw8IDUpIC8qIERvIG5vdCBtYWNyby1leHBhbmQgdGhpcyB0b2tlbi4gICovCisjZGVmaW5lIEJPTAkJKDEgPDwgNikgLyogVG9rZW4gYXQgYmVnaW5uaW5nIG9mIGxpbmUuICAqLworI2RlZmluZSBQVVJFX1pFUk8JKDEgPDwgNykgLyogU2luZ2xlIDAgZGlnaXQsIHVzZWQgYnkgdGhlIEMrKyBmcm9udGVuZCwKKwkJCQkgICAgc2V0IGluIGMtbGV4LmMuICAqLworI2RlZmluZSBTUF9ESUdSQVBICSgxIDw8IDgpIC8qICMgb3IgIyMgdG9rZW4gd2FzIGEgZGlncmFwaC4gICovCisjZGVmaW5lIFNQX1BSRVZfV0hJVEUJKDEgPDwgOSkgLyogSWYgd2hpdGVzcGFjZSBiZWZvcmUgYSAjIworCQkJCSAgICBvcGVyYXRvciwgb3IgYmVmb3JlIHRoaXMgdG9rZW4KKwkJCQkgICAgYWZ0ZXIgYSAjIG9wZXJhdG9yLiAgKi8KKworLyogU3BlY2lmeSB3aGljaCBmaWVsZCwgaWYgYW55LCBvZiB0aGUgY3BwX3Rva2VuIHVuaW9uIGlzIHVzZWQuICAqLworCitlbnVtIGNwcF90b2tlbl9mbGRfa2luZCB7CisgIENQUF9UT0tFTl9GTERfTk9ERSwKKyAgQ1BQX1RPS0VOX0ZMRF9TT1VSQ0UsCisgIENQUF9UT0tFTl9GTERfU1RSLAorICBDUFBfVE9LRU5fRkxEX0FSR19OTywKKyAgQ1BQX1RPS0VOX0ZMRF9UT0tFTl9OTywKKyAgQ1BQX1RPS0VOX0ZMRF9QUkFHTUEsCisgIENQUF9UT0tFTl9GTERfTk9ORQorfTsKKworLyogQSBtYWNybyBhcmd1bWVudCBpbiB0aGUgY3BwX3Rva2VuIHVuaW9uLiAgKi8KK3N0cnVjdCBHVFkoKCkpIGNwcF9tYWNyb19hcmcgeworICAvKiBBcmd1bWVudCBudW1iZXIuICAqLworICB1bnNpZ25lZCBpbnQgYXJnX25vOworfTsKKworLyogQW4gaWRlbnRpZmllciBpbiB0aGUgY3BwX3Rva2VuIHVuaW9uLiAgKi8KK3N0cnVjdCBHVFkoKCkpIGNwcF9pZGVudGlmaWVyIHsKKyAgLyogVGhlIGNhbm9uaWNhbCAoVVRGLTgpIHNwZWxsaW5nIG9mIHRoZSBpZGVudGlmaWVyLiAgKi8KKyAgY3BwX2hhc2hub2RlICoKKyAgICBHVFkgKChuZXN0ZWRfcHRyICh1bmlvbiB0cmVlX25vZGUsCisJCSIlaCA/IENQUF9IQVNITk9ERSAoR0NDX0lERU5UX1RPX0hUX0lERU5UICglaCkpIDogTlVMTCIsCisJCQkiJWggPyBIVF9JREVOVF9UT19HQ0NfSURFTlQgKEhUX05PREUgKCVoKSkgOiBOVUxMIikpKQorICAgICAgIG5vZGU7Cit9OworCisvKiBBIHByZXByb2Nlc3NpbmcgdG9rZW4uICBUaGlzIGhhcyBiZWVuIGNhcmVmdWxseSBwYWNrZWQgYW5kIHNob3VsZAorICAgb2NjdXB5IDE2IGJ5dGVzIG9uIDMyLWJpdCBob3N0cyBhbmQgMjQgYnl0ZXMgb24gNjQtYml0IGhvc3RzLiAgKi8KK3N0cnVjdCBHVFkoKCkpIGNwcF90b2tlbiB7CisgIHNvdXJjZV9sb2NhdGlvbiBzcmNfbG9jOwkvKiBMb2NhdGlvbiBvZiBmaXJzdCBjaGFyIG9mIHRva2VuLiAgKi8KKyAgRU5VTV9CSVRGSUVMRChjcHBfdHR5cGUpIHR5cGUgOiBDSEFSX0JJVDsgIC8qIHRva2VuIHR5cGUgKi8KKyAgdW5zaWduZWQgc2hvcnQgZmxhZ3M7CQkvKiBmbGFncyAtIHNlZSBhYm92ZSAqLworCisgIHVuaW9uIGNwcF90b2tlbl91CisgIHsKKyAgICAvKiBBbiBpZGVudGlmaWVyLiAgKi8KKyAgICBzdHJ1Y3QgY3BwX2lkZW50aWZpZXIgR1RZICgodGFnICgiQ1BQX1RPS0VOX0ZMRF9OT0RFIikpKSBub2RlOworCSAKKyAgICAvKiBJbmhlcml0IHBhZGRpbmcgZnJvbSB0aGlzIHRva2VuLiAgKi8KKyAgICBjcHBfdG9rZW4gKiBHVFkgKCh0YWcgKCJDUFBfVE9LRU5fRkxEX1NPVVJDRSIpKSkgc291cmNlOworCisgICAgLyogQSBzdHJpbmcsIG9yIG51bWJlci4gICovCisgICAgc3RydWN0IGNwcF9zdHJpbmcgR1RZICgodGFnICgiQ1BQX1RPS0VOX0ZMRF9TVFIiKSkpIHN0cjsKKworICAgIC8qIEFyZ3VtZW50IG5vLiBmb3IgYSBDUFBfTUFDUk9fQVJHLiAgKi8KKyAgICBzdHJ1Y3QgY3BwX21hY3JvX2FyZyBHVFkgKCh0YWcgKCJDUFBfVE9LRU5fRkxEX0FSR19OTyIpKSkgbWFjcm9fYXJnOworCisgICAgLyogT3JpZ2luYWwgdG9rZW4gbm8uIGZvciBhIENQUF9QQVNURSAoZnJvbSBhIHNlcXVlbmNlIG9mCisgICAgICAgY29uc2VjdXRpdmUgcGFzdGUgdG9rZW5zIGluIGEgbWFjcm8gZXhwYW5zaW9uKS4gICovCisgICAgdW5zaWduZWQgaW50IEdUWSAoKHRhZyAoIkNQUF9UT0tFTl9GTERfVE9LRU5fTk8iKSkpIHRva2VuX25vOworCisgICAgLyogQ2FsbGVyLXN1cHBsaWVkIGlkZW50aWZpZXIgZm9yIGEgQ1BQX1BSQUdNQS4gICovCisgICAgdW5zaWduZWQgaW50IEdUWSAoKHRhZyAoIkNQUF9UT0tFTl9GTERfUFJBR01BIikpKSBwcmFnbWE7CisgIH0gR1RZICgoZGVzYyAoImNwcF90b2tlbl92YWxfaW5kZXggKCYlMSkiKSkpIHZhbDsKK307CisKKy8qIFNheSB3aGljaCBmaWVsZCBpcyBpbiB1c2UuICAqLworZXh0ZXJuIGVudW0gY3BwX3Rva2VuX2ZsZF9raW5kIGNwcF90b2tlbl92YWxfaW5kZXggKGNwcF90b2tlbiAqdG9rKTsKKworLyogQSB0eXBlIHdpZGUgZW5vdWdoIHRvIGhvbGQgYW55IG11bHRpYnl0ZSBzb3VyY2UgY2hhcmFjdGVyLgorICAgY3BwbGliJ3MgY2hhcmFjdGVyIGNvbnN0YW50IGludGVycHJldGVyIHJlcXVpcmVzIGFuIHVuc2lnbmVkIHR5cGUuCisgICBBbHNvLCBhIHR5cGVkZWYgZm9yIHRoZSBzaWduZWQgZXF1aXZhbGVudC4KKyAgIFRoZSB3aWR0aCBvZiB0aGlzIHR5cGUgaXMgY2FwcGVkIGF0IDMyIGJpdHM7IHRoZXJlIGRvIGV4aXN0IHRhcmdldHMKKyAgIHdoZXJlIHdjaGFyX3QgaXMgNjQgYml0cywgYnV0IG9ubHkgaW4gYSBub24tZGVmYXVsdCBtb2RlLCBhbmQgdGhlcmUKKyAgIHdvdWxkIGJlIG5vIG1lYW5pbmdmdWwgaW50ZXJwcmV0YXRpb24gZm9yIGEgd2NoYXJfdCB2YWx1ZSBncmVhdGVyCisgICB0aGFuIDJeMzIgYW55d2F5IC0tIHRoZSB3aWRlc3Qgd2lkZS1jaGFyYWN0ZXIgZW5jb2RpbmcgYXJvdW5kIGlzCisgICBJU08gMTA2NDYsIHdoaWNoIHN0b3BzIGF0IDJeMzEuICAqLworI2lmIENIQVJfQklUICogU0laRU9GX0lOVCA+PSAzMgorIyBkZWZpbmUgQ1BQQ0hBUl9TSUdORURfVCBpbnQKKyNlbGlmIENIQVJfQklUICogU0laRU9GX0xPTkcgPj0gMzIKKyMgZGVmaW5lIENQUENIQVJfU0lHTkVEX1QgbG9uZworI2Vsc2UKKyMgZXJyb3IgIkNhbm5vdCBmaW5kIGEgbGVhc3QtMzItYml0IHNpZ25lZCBpbnRlZ2VyIHR5cGUiCisjZW5kaWYKK3R5cGVkZWYgdW5zaWduZWQgQ1BQQ0hBUl9TSUdORURfVCBjcHBjaGFyX3Q7Cit0eXBlZGVmIENQUENIQVJfU0lHTkVEX1QgY3BwY2hhcl9zaWduZWRfdDsKKworLyogU3R5bGUgb2YgaGVhZGVyIGRlcGVuZGVuY2llcyB0byBnZW5lcmF0ZS4gICovCitlbnVtIGNwcF9kZXBzX3N0eWxlIHsgREVQU19OT05FID0gMCwgREVQU19VU0VSLCBERVBTX1NZU1RFTSB9OworCisvKiBUaGUgcG9zc2libGUgbm9ybWFsaXphdGlvbiBsZXZlbHMsIGZyb20gbW9zdCByZXN0cmljdGl2ZSB0byBsZWFzdC4gICovCitlbnVtIGNwcF9ub3JtYWxpemVfbGV2ZWwgeworICAvKiBJbiBORktDLiAgKi8KKyAgbm9ybWFsaXplZF9LQyA9IDAsCisgIC8qIEluIE5GQy4gICovCisgIG5vcm1hbGl6ZWRfQywKKyAgLyogSW4gTkZDLCBleGNlcHQgZm9yIHN1YnNlcXVlbmNlcyB3aGVyZSBiZWluZyBpbiBORkMgd291bGQgbWFrZQorICAgICB0aGUgaWRlbnRpZmllciBpbnZhbGlkLiAgKi8KKyAgbm9ybWFsaXplZF9pZGVudGlmaWVyX0MsCisgIC8qIE5vdCBub3JtYWxpemVkIGF0IGFsbC4gICovCisgIG5vcm1hbGl6ZWRfbm9uZQorfTsKKworLyogVGhpcyBzdHJ1Y3R1cmUgaXMgbmVzdGVkIGluc2lkZSBzdHJ1Y3QgY3BwX3JlYWRlciwgYW5kCisgICBjYXJyaWVzIGFsbCB0aGUgb3B0aW9ucyB2aXNpYmxlIHRvIHRoZSBjb21tYW5kIGxpbmUuICAqLworc3RydWN0IGNwcF9vcHRpb25zCit7CisgIC8qIENoYXJhY3RlcnMgYmV0d2VlbiB0YWIgc3RvcHMuICAqLworICB1bnNpZ25lZCBpbnQgdGFic3RvcDsKKworICAvKiBUaGUgbGFuZ3VhZ2Ugd2UncmUgcHJlcHJvY2Vzc2luZy4gICovCisgIGVudW0gY19sYW5nIGxhbmc7CisKKyAgLyogTm9uemVybyBtZWFucyB1c2UgZXh0cmEgZGVmYXVsdCBpbmNsdWRlIGRpcmVjdG9yaWVzIGZvciBDKysuICAqLworICB1bnNpZ25lZCBjaGFyIGNwbHVzcGx1czsKKworICAvKiBOb256ZXJvIG1lYW5zIGhhbmRsZSBjcGx1c3BsdXMgc3R5bGUgY29tbWVudHMuICAqLworICB1bnNpZ25lZCBjaGFyIGNwbHVzcGx1c19jb21tZW50czsKKworICAvKiBOb256ZXJvIG1lYW5zIGRlZmluZSBfX09CSkNfXywgdHJlYXQgQCBhcyBhIHNwZWNpYWwgdG9rZW4sIHVzZQorICAgICB0aGUgT0JKQ1tQTFVTXV9JTkNMVURFX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsIGFuZCBhbGxvdworICAgICAiI2ltcG9ydCIuICAqLworICB1bnNpZ25lZCBjaGFyIG9iamM7CisKKyAgLyogTm9uemVybyBtZWFucyBkb24ndCBjb3B5IGNvbW1lbnRzIGludG8gdGhlIG91dHB1dCBmaWxlLiAgKi8KKyAgdW5zaWduZWQgY2hhciBkaXNjYXJkX2NvbW1lbnRzOworCisgIC8qIE5vbnplcm8gbWVhbnMgZG9uJ3QgY29weSBjb21tZW50cyBpbnRvIHRoZSBvdXRwdXQgZmlsZSBkdXJpbmcKKyAgICAgbWFjcm8gZXhwYW5zaW9uLiAgKi8KKyAgdW5zaWduZWQgY2hhciBkaXNjYXJkX2NvbW1lbnRzX2luX21hY3JvX2V4cDsKKworICAvKiBOb256ZXJvIG1lYW5zIHByb2Nlc3MgdGhlIElTTyB0cmlncmFwaCBzZXF1ZW5jZXMuICAqLworICB1bnNpZ25lZCBjaGFyIHRyaWdyYXBoczsKKworICAvKiBOb256ZXJvIG1lYW5zIHByb2Nlc3MgdGhlIElTTyBkaWdyYXBoIHNlcXVlbmNlcy4gICovCisgIHVuc2lnbmVkIGNoYXIgZGlncmFwaHM7CisKKyAgLyogTm9uemVybyBtZWFucyB0byBhbGxvdyBoZXhhZGVjaW1hbCBmbG9hdHMgYW5kIExMIHN1ZmZpeGVzLiAgKi8KKyAgdW5zaWduZWQgY2hhciBleHRlbmRlZF9udW1iZXJzOworCisgIC8qIE5vbnplcm8gbWVhbnMgcHJvY2VzcyB1L1UgcHJlZml4IGxpdGVyYWxzIChVVEYtMTYvMzIpLiAgKi8KKyAgdW5zaWduZWQgY2hhciB1bGl0ZXJhbHM7CisKKyAgLyogTm9uemVybyBtZWFucyBwcmludCBuYW1lcyBvZiBoZWFkZXIgZmlsZXMgKC1IKS4gICovCisgIHVuc2lnbmVkIGNoYXIgcHJpbnRfaW5jbHVkZV9uYW1lczsKKworICAvKiBOb256ZXJvIG1lYW5zIGNvbXBsYWluIGFib3V0IGRlcHJlY2F0ZWQgZmVhdHVyZXMuICAqLworICB1bnNpZ25lZCBjaGFyIHdhcm5fZGVwcmVjYXRlZDsKKworICAvKiBOb256ZXJvIG1lYW5zIHdhcm4gaWYgc2xhc2gtc3RhciBhcHBlYXJzIGluIGEgY29tbWVudC4gICovCisgIHVuc2lnbmVkIGNoYXIgd2Fybl9jb21tZW50czsKKworICAvKiBOb256ZXJvIG1lYW5zIHdhcm4gaWYgYSB1c2VyLXN1cHBsaWVkIGluY2x1ZGUgZGlyZWN0b3J5IGRvZXMgbm90CisgICAgIGV4aXN0LiAgKi8KKyAgdW5zaWduZWQgY2hhciB3YXJuX21pc3NpbmdfaW5jbHVkZV9kaXJzOworCisgIC8qIE5vbnplcm8gbWVhbnMgd2FybiBpZiB0aGVyZSBhcmUgYW55IHRyaWdyYXBocy4gICovCisgIHVuc2lnbmVkIGNoYXIgd2Fybl90cmlncmFwaHM7CisKKyAgLyogTm9uemVybyBtZWFucyB3YXJuIGFib3V0IG11bHRpY2hhcmFjdGVyIGNoYXJjb25zdHMuICAqLworICB1bnNpZ25lZCBjaGFyIHdhcm5fbXVsdGljaGFyOworCisgIC8qIE5vbnplcm8gbWVhbnMgd2FybiBhYm91dCB2YXJpb3VzIGluY29tcGF0aWJpbGl0aWVzIHdpdGgKKyAgICAgdHJhZGl0aW9uYWwgQy4gICovCisgIHVuc2lnbmVkIGNoYXIgd2Fybl90cmFkaXRpb25hbDsKKworICAvKiBOb256ZXJvIG1lYW5zIHdhcm4gYWJvdXQgbG9uZyBsb25nIG51bWVyaWMgY29uc3RhbnRzLiAgKi8KKyAgdW5zaWduZWQgY2hhciB3YXJuX2xvbmdfbG9uZzsKKworICAvKiBOb256ZXJvIG1lYW5zIHdhcm4gYWJvdXQgdGV4dCBhZnRlciBhbiAjZW5kaWYgKG9yICNlbHNlKS4gICovCisgIHVuc2lnbmVkIGNoYXIgd2Fybl9lbmRpZl9sYWJlbHM7CisKKyAgLyogTm9uemVybyBtZWFucyB3YXJuIGFib3V0IGltcGxpY2l0IHNpZ24gY2hhbmdlcyBvd2luZyB0byBpbnRlZ2VyCisgICAgIHByb21vdGlvbnMuICAqLworICB1bnNpZ25lZCBjaGFyIHdhcm5fbnVtX3NpZ25fY2hhbmdlOworCisgIC8qIFplcm8gbWVhbnMgZG9uJ3Qgd2FybiBhYm91dCBfX1ZBX0FSR1NfXyB1c2FnZSBpbiBjODkgcGVkYW50aWMgbW9kZS4KKyAgICAgUHJlc3VtYWJseSB0aGUgdXNhZ2UgaXMgcHJvdGVjdGVkIGJ5IHRoZSBhcHByb3ByaWF0ZSAjaWZkZWYuICAqLworICB1bnNpZ25lZCBjaGFyIHdhcm5fdmFyaWFkaWNfbWFjcm9zOworCisgIC8qIE5vbnplcm8gbWVhbnMgd2FybiBhYm91dCBidWlsdGluIG1hY3JvcyB0aGF0IGFyZSByZWRlZmluZWQgb3IKKyAgICAgZXhwbGljaXRseSB1bmRlZmluZWQuICAqLworICB1bnNpZ25lZCBjaGFyIHdhcm5fYnVpbHRpbl9tYWNyb19yZWRlZmluZWQ7CisKKyAgLyogTm9uemVybyBtZWFucyB3ZSBzaG91bGQgbG9vayBmb3IgaGVhZGVyLmdjYyBmaWxlcyB0aGF0IHJlbWFwIGZpbGUKKyAgICAgbmFtZXMuICAqLworICB1bnNpZ25lZCBjaGFyIHJlbWFwOworCisgIC8qIFplcm8gbWVhbnMgZG9sbGFyIHNpZ25zIGFyZSBwdW5jdHVhdGlvbi4gICovCisgIHVuc2lnbmVkIGNoYXIgZG9sbGFyc19pbl9pZGVudDsKKworICAvKiBOb256ZXJvIG1lYW5zIFVDTnMgYXJlIGFjY2VwdGVkIGluIGlkZW50aWZpZXJzLiAgKi8KKyAgdW5zaWduZWQgY2hhciBleHRlbmRlZF9pZGVudGlmaWVyczsKKworICAvKiBUcnVlIGlmIHdlIHNob3VsZCB3YXJuIGFib3V0IGRvbGxhcnMgaW4gaWRlbnRpZmllcnMgb3IgbnVtYmVycworICAgICBmb3IgdGhpcyB0cmFuc2xhdGlvbiB1bml0LiAgKi8KKyAgdW5zaWduZWQgY2hhciB3YXJuX2RvbGxhcnM7CisKKyAgLyogTm9uemVybyBtZWFucyB3YXJuIGlmIHVuZGVmaW5lZCBpZGVudGlmaWVycyBhcmUgZXZhbHVhdGVkIGluIGFuICNpZi4gICovCisgIHVuc2lnbmVkIGNoYXIgd2Fybl91bmRlZjsKKworICAvKiBOb256ZXJvIG1lYW5zIHdhcm4gb2YgdW51c2VkIG1hY3JvcyBmcm9tIHRoZSBtYWluIGZpbGUuICAqLworICB1bnNpZ25lZCBjaGFyIHdhcm5fdW51c2VkX21hY3JvczsKKworICAvKiBOb256ZXJvIGZvciB0aGUgMTk5OSBDIFN0YW5kYXJkLCBpbmNsdWRpbmcgY29ycmlnZW5kYSBhbmQgYW1lbmRtZW50cy4gICovCisgIHVuc2lnbmVkIGNoYXIgYzk5OworCisgIC8qIE5vbnplcm8gaWYgd2UgYXJlIGNvbmZvcm1pbmcgdG8gYSBzcGVjaWZpYyBDIG9yIEMrKyBzdGFuZGFyZC4gICovCisgIHVuc2lnbmVkIGNoYXIgc3RkOworCisgIC8qIE5vbnplcm8gbWVhbnMgZ2l2ZSBhbGwgdGhlIGVycm9yIG1lc3NhZ2VzIHRoZSBBTlNJIHN0YW5kYXJkIHJlcXVpcmVzLiAgKi8KKyAgdW5zaWduZWQgY2hhciBwZWRhbnRpYzsKKworICAvKiBOb256ZXJvIG1lYW5zIHdlJ3JlIGxvb2tpbmcgYXQgYWxyZWFkeSBwcmVwcm9jZXNzZWQgY29kZSwgc28gZG9uJ3QKKyAgICAgYm90aGVyIHRyeWluZyB0byBkbyBtYWNybyBleHBhbnNpb24gYW5kIHdoYXRub3QuICAqLworICB1bnNpZ25lZCBjaGFyIHByZXByb2Nlc3NlZDsKKworICAvKiBQcmludCBjb2x1bW4gbnVtYmVyIGluIGVycm9yIG1lc3NhZ2VzLiAgKi8KKyAgdW5zaWduZWQgY2hhciBzaG93X2NvbHVtbjsKKworICAvKiBOb256ZXJvIG1lYW5zIGhhbmRsZSBDKysgYWx0ZXJuYXRlIG9wZXJhdG9yIG5hbWVzLiAgKi8KKyAgdW5zaWduZWQgY2hhciBvcGVyYXRvcl9uYW1lczsKKworICAvKiBOb256ZXJvIG1lYW5zIHdhcm4gYWJvdXQgdXNlIG9mIEMrKyBhbHRlcm5hdGUgb3BlcmF0b3IgbmFtZXMuICAqLworICB1bnNpZ25lZCBjaGFyIHdhcm5fY3h4X29wZXJhdG9yX25hbWVzOworCisgIC8qIFRydWUgZm9yIHRyYWRpdGlvbmFsIHByZXByb2Nlc3NpbmcuICAqLworICB1bnNpZ25lZCBjaGFyIHRyYWRpdGlvbmFsOworCisgIC8qIEhvbGRzIHRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgKGV4ZWN1dGlvbikgY2hhcmFjdGVyIHNldC4gICovCisgIGNvbnN0IGNoYXIgKm5hcnJvd19jaGFyc2V0OworCisgIC8qIEhvbGRzIHRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgd2lkZSBjaGFyYWN0ZXIgc2V0LiAgKi8KKyAgY29uc3QgY2hhciAqd2lkZV9jaGFyc2V0OworCisgIC8qIEhvbGRzIHRoZSBuYW1lIG9mIHRoZSBpbnB1dCBjaGFyYWN0ZXIgc2V0LiAgKi8KKyAgY29uc3QgY2hhciAqaW5wdXRfY2hhcnNldDsKKworICAvKiBUaGUgbWluaW11bSBwZXJtaXR0ZWQgbGV2ZWwgb2Ygbm9ybWFsaXphdGlvbiBiZWZvcmUgYSB3YXJuaW5nCisgICAgIGlzIGdlbmVyYXRlZC4gICovCisgIGVudW0gY3BwX25vcm1hbGl6ZV9sZXZlbCB3YXJuX25vcm1hbGl6ZTsKKworICAvKiBUcnVlIHRvIHdhcm4gYWJvdXQgcHJlY29tcGlsZWQgaGVhZGVyIGZpbGVzIHdlIGNvdWxkbid0IHVzZS4gICovCisgIGJvb2wgd2Fybl9pbnZhbGlkX3BjaDsKKworICAvKiBUcnVlIGlmIGRlcGVuZGVuY2llcyBzaG91bGQgYmUgcmVzdG9yZWQgZnJvbSBhIHByZWNvbXBpbGVkIGhlYWRlci4gICovCisgIGJvb2wgcmVzdG9yZV9wY2hfZGVwczsKKworICAvKiBEZXBlbmRlbmN5IGdlbmVyYXRpb24uICAqLworICBzdHJ1Y3QKKyAgeworICAgIC8qIFN0eWxlIG9mIGhlYWRlciBkZXBlbmRlbmNpZXMgdG8gZ2VuZXJhdGUuICAqLworICAgIGVudW0gY3BwX2RlcHNfc3R5bGUgc3R5bGU7CisKKyAgICAvKiBBc3N1bWUgbWlzc2luZyBmaWxlcyBhcmUgZ2VuZXJhdGVkIGZpbGVzLiAgKi8KKyAgICBib29sIG1pc3NpbmdfZmlsZXM7CisKKyAgICAvKiBHZW5lcmF0ZSBwaG9ueSB0YXJnZXRzIGZvciBlYWNoIGRlcGVuZGVuY3kgYXBhcnQgZnJvbSB0aGUgZmlyc3QKKyAgICAgICBvbmUuICAqLworICAgIGJvb2wgcGhvbnlfdGFyZ2V0czsKKworICAgIC8qIElmIHRydWUsIG5vIGRlcGVuZGVuY3kgaXMgZ2VuZXJhdGVkIG9uIHRoZSBtYWluIGZpbGUuICAqLworICAgIGJvb2wgaWdub3JlX21haW5fZmlsZTsKKworICAgIC8qIElmIHRydWUsIGludGVuZCB0byB1c2UgdGhlIHByZXByb2Nlc3NvciBvdXRwdXQgKGUuZy4sIGZvciBjb21waWxhdGlvbikKKyAgICAgICBpbiBhZGRpdGlvbiB0byB0aGUgZGVwZW5kZW5jeSBpbmZvLiAgKi8KKyAgICBib29sIG5lZWRfcHJlcHJvY2Vzc29yX291dHB1dDsKKyAgfSBkZXBzOworCisgIC8qIFRhcmdldC1zcGVjaWZpYyBmZWF0dXJlcyBzZXQgYnkgdGhlIGZyb250IGVuZCBvciBjbGllbnQuICAqLworCisgIC8qIFByZWNpc2lvbiBmb3IgdGFyZ2V0IENQUCBhcml0aG1ldGljLCB0YXJnZXQgY2hhcmFjdGVycywgdGFyZ2V0CisgICAgIGludHMgYW5kIHRhcmdldCB3aWRlIGNoYXJhY3RlcnMsIHJlc3BlY3RpdmVseS4gICovCisgIHNpemVfdCBwcmVjaXNpb24sIGNoYXJfcHJlY2lzaW9uLCBpbnRfcHJlY2lzaW9uLCB3Y2hhcl9wcmVjaXNpb247CisKKyAgLyogVHJ1ZSBtZWFucyBjaGFycyAod2lkZSBjaGFycykgYXJlIHVuc2lnbmVkLiAgKi8KKyAgYm9vbCB1bnNpZ25lZF9jaGFyLCB1bnNpZ25lZF93Y2hhcjsKKworICAvKiBUcnVlIGlmIHRoZSBtb3N0IHNpZ25pZmljYW50IGJ5dGUgaW4gYSB3b3JkIGhhcyB0aGUgbG93ZXN0CisgICAgIGFkZHJlc3MgaW4gbWVtb3J5LiAgKi8KKyAgYm9vbCBieXRlc19iaWdfZW5kaWFuOworCisgIC8qIE5vbnplcm8gbWVhbnMgX19TVERDX18gc2hvdWxkIGhhdmUgdGhlIHZhbHVlIDAgaW4gc3lzdGVtIGhlYWRlcnMuICAqLworICB1bnNpZ25lZCBjaGFyIHN0ZGNfMF9pbl9zeXN0ZW1faGVhZGVyczsKKworICAvKiBUcnVlIGRpc2FibGVzIHRva2VuaXphdGlvbiBvdXRzaWRlIG9mIHByZXByb2Nlc3NpbmcgZGlyZWN0aXZlcy4gKi8KKyAgYm9vbCBkaXJlY3RpdmVzX29ubHk7Cit9OworCisvKiBDYWxsYmFjayBmb3IgaGVhZGVyIGxvb2t1cCBmb3IgSEVBREVSLCB3aGljaCBpcyB0aGUgbmFtZSBvZiBhCisgICBzb3VyY2UgZmlsZS4gIEl0IGlzIHVzZWQgYXMgYSBtZXRob2Qgb2YgbGFzdCByZXNvcnQgdG8gZmluZCBoZWFkZXJzCisgICB0aGF0IGFyZSBub3Qgb3RoZXJ3aXNlIGZvdW5kIGR1cmluZyB0aGUgbm9ybWFsIGluY2x1ZGUgcHJvY2Vzc2luZy4KKyAgIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG1hbGxvY2VkIG5hbWUgb2YgYSBoZWFkZXIgdG8gdHJ5IGFuZCBvcGVuLAorICAgaWYgYW55LCBvciBOVUxMIG90aGVyd2lzZS4gIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIG9ubHkgaWYgdGhlCisgICBoZWFkZXIgaXMgb3RoZXJ3aXNlIHVuZm91bmQuICAqLwordHlwZWRlZiBjb25zdCBjaGFyICooKm1pc3NpbmdfaGVhZGVyX2NiKShjcHBfcmVhZGVyICosIGNvbnN0IGNoYXIgKmhlYWRlciwgY3BwX2RpciAqKik7CisKKy8qIENhbGwgYmFja3MgdG8gY3BwbGliIGNsaWVudC4gICovCitzdHJ1Y3QgY3BwX2NhbGxiYWNrcworeworICAvKiBDYWxsZWQgd2hlbiBhIG5ldyBsaW5lIG9mIHByZXByb2Nlc3NlZCBvdXRwdXQgaXMgc3RhcnRlZC4gICovCisgIHZvaWQgKCpsaW5lX2NoYW5nZSkgKGNwcF9yZWFkZXIgKiwgY29uc3QgY3BwX3Rva2VuICosIGludCk7CisKKyAgLyogQ2FsbGVkIHdoZW4gc3dpdGNoaW5nIHRvL2Zyb20gYSBuZXcgZmlsZS4KKyAgICAgVGhlIGxpbmVfbWFwIGlzIGZvciB0aGUgbmV3IGZpbGUuICBJdCBpcyBOVUxMIGlmIHRoZXJlIGlzIG5vIG5ldyBmaWxlLgorICAgICAoSW4gQyB0aGlzIGhhcHBlbnMgd2hlbiBkb25lIHdpdGggPGJ1aWx0LWluPis8Y29tbWFuZCBsaW5lPiBhbmQgYWxzbworICAgICB3aGVuIGRvbmUgd2l0aCBhIG1haW4gZmlsZS4pICBUaGlzIGNhbiBiZSB1c2VkIGZvciByZXNvdXJjZSBjbGVhbnVwLiAgKi8KKyAgdm9pZCAoKmZpbGVfY2hhbmdlKSAoY3BwX3JlYWRlciAqLCBjb25zdCBzdHJ1Y3QgbGluZV9tYXAgKik7CisKKyAgdm9pZCAoKmRpcl9jaGFuZ2UpIChjcHBfcmVhZGVyICosIGNvbnN0IGNoYXIgKik7CisgIHZvaWQgKCppbmNsdWRlKSAoY3BwX3JlYWRlciAqLCB1bnNpZ25lZCBpbnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwKKwkJICAgY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNwcF90b2tlbiAqKik7CisgIHZvaWQgKCpkZWZpbmUpIChjcHBfcmVhZGVyICosIHVuc2lnbmVkIGludCwgY3BwX2hhc2hub2RlICopOworICB2b2lkICgqdW5kZWYpIChjcHBfcmVhZGVyICosIHVuc2lnbmVkIGludCwgY3BwX2hhc2hub2RlICopOworICB2b2lkICgqaWRlbnQpIChjcHBfcmVhZGVyICosIHVuc2lnbmVkIGludCwgY29uc3QgY3BwX3N0cmluZyAqKTsKKyAgdm9pZCAoKmRlZl9wcmFnbWEpIChjcHBfcmVhZGVyICosIHVuc2lnbmVkIGludCk7CisgIGludCAoKnZhbGlkX3BjaCkgKGNwcF9yZWFkZXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworICB2b2lkICgqcmVhZF9wY2gpIChjcHBfcmVhZGVyICosIGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICopOworICBtaXNzaW5nX2hlYWRlcl9jYiBtaXNzaW5nX2hlYWRlcjsKKworICAvKiBDb250ZXh0LXNlbnNpdGl2ZSBtYWNybyBzdXBwb3J0LiAgUmV0dXJucyBtYWNybyAoaWYgYW55KSB0aGF0IHNob3VsZAorICAgICBiZSBleHBhbmRlZC4gICovCisgIGNwcF9oYXNobm9kZSAqICgqbWFjcm9fdG9fZXhwYW5kKSAoY3BwX3JlYWRlciAqLCBjb25zdCBjcHBfdG9rZW4gKik7CisKKyAgLyogQ2FsbGVkIHRvIGVtaXQgYSBkaWFnbm9zdGljLiAgVGhpcyBjYWxsYmFjayByZWNlaXZlcyB0aGUKKyAgICAgdHJhbnNsYXRlZCBtZXNzYWdlLiAgKi8KKyAgYm9vbCAoKmVycm9yKSAoY3BwX3JlYWRlciAqLCBpbnQsIHNvdXJjZV9sb2NhdGlvbiwgdW5zaWduZWQgaW50LAorCQkgY29uc3QgY2hhciAqLCB2YV9saXN0ICopCisgICAgICAgQVRUUklCVVRFX0ZQVFJfUFJJTlRGKDUsMCk7CisKKyAgLyogQ2FsbGJhY2tzIGZvciB3aGVuIGEgbWFjcm8gaXMgZXhwYW5kZWQsIG9yIHRlc3RlZCAod2hldGhlcgorICAgICBkZWZpbmVkIG9yIG5vdCBhdCB0aGUgdGltZSkgaW4gI2lmZGVmLCAjaWZuZGVmIG9yICJkZWZpbmVkIi4gICovCisgIHZvaWQgKCp1c2VkX2RlZmluZSkgKGNwcF9yZWFkZXIgKiwgdW5zaWduZWQgaW50LCBjcHBfaGFzaG5vZGUgKik7CisgIHZvaWQgKCp1c2VkX3VuZGVmKSAoY3BwX3JlYWRlciAqLCB1bnNpZ25lZCBpbnQsIGNwcF9oYXNobm9kZSAqKTsKKyAgLyogQ2FsbGVkIGJlZm9yZSAjZGVmaW5lIGFuZCAjdW5kZWYgb3Igb3RoZXIgbWFjcm8gZGVmaW5pdGlvbgorICAgICBjaGFuZ2VzIGFyZSBwcm9jZXNzZWQuICAqLworICB2b2lkICgqYmVmb3JlX2RlZmluZSkgKGNwcF9yZWFkZXIgKik7CisgIC8qIENhbGxlZCB3aGVuZXZlciBhIG1hY3JvIGlzIGV4cGFuZGVkIG9yIHRlc3RlZC4KKyAgICAgU2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgZXhwYW5zaW9uLiAgKi8KKyAgdm9pZCAoKnVzZWQpIChjcHBfcmVhZGVyICosIHNvdXJjZV9sb2NhdGlvbiwgY3BwX2hhc2hub2RlICopOworfTsKKworI2lmZGVmIFZNUworI2RlZmluZSBJTk9fVF9DUFAgaW5vX3QgaW5vWzNdCisjZWxzZQorI2RlZmluZSBJTk9fVF9DUFAgaW5vX3QgaW5vCisjZW5kaWYKKworLyogQ2hhaW4gb2YgZGlyZWN0b3JpZXMgdG8gbG9vayBmb3IgaW5jbHVkZSBmaWxlcyBpbi4gICovCitzdHJ1Y3QgY3BwX2RpcgoreworICAvKiBOVUxMLXRlcm1pbmF0ZWQgc2luZ2x5LWxpbmtlZCBsaXN0LiAgKi8KKyAgc3RydWN0IGNwcF9kaXIgKm5leHQ7CisKKyAgLyogTkFNRSBvZiB0aGUgZGlyZWN0b3J5LCBOVUwtdGVybWluYXRlZC4gICovCisgIGNoYXIgKm5hbWU7CisgIHVuc2lnbmVkIGludCBsZW47CisKKyAgLyogT25lIGlmIGEgc3lzdGVtIGhlYWRlciwgdHdvIGlmIGEgc3lzdGVtIGhlYWRlciB0aGF0IGhhcyBleHRlcm4KKyAgICAgIkMiIGd1YXJkcyBmb3IgQysrLiAgKi8KKyAgdW5zaWduZWQgY2hhciBzeXNwOworCisgIC8qIElzIHRoaXMgYSB1c2VyLXN1cHBsaWVkIGRpcmVjdG9yeT8gKi8KKyAgYm9vbCB1c2VyX3N1cHBsaWVkX3A7CisKKyAgLyogVGhlIGNhbm9uaWNhbGl6ZWQgTkFNRSBhcyBkZXRlcm1pbmVkIGJ5IGxyZWFscGF0aC4gIFRoaXMgZmllbGQgCisgICAgIGlzIG9ubHkgdXNlZCBieSBob3N0cyB0aGF0IGxhY2sgcmVsaWFibGUgaW5vZGUgbnVtYmVycy4gICovCisgIGNoYXIgKmNhbm9uaWNhbF9uYW1lOworCisgIC8qIE1hcHBpbmcgb2YgZmlsZSBuYW1lcyBmb3IgdGhpcyBkaXJlY3RvcnkgZm9yIE1TLURPUyBhbmQgcmVsYXRlZAorICAgICBwbGF0Zm9ybXMuICBBIE5VTEwtdGVybWluYXRlZCBhcnJheSBvZiAoZnJvbSwgdG8pIHBhaXJzLiAgKi8KKyAgY29uc3QgY2hhciAqKm5hbWVfbWFwOworCisgIC8qIFJvdXRpbmUgdG8gY29uc3RydWN0IHBhdGhuYW1lLCBnaXZlbiB0aGUgc2VhcmNoIHBhdGggbmFtZSBhbmQgdGhlCisgICAgIEhFQURFUiB3ZSBhcmUgdHJ5aW5nIHRvIGZpbmQsIHJldHVybiBhIGNvbnN0cnVjdGVkIHBhdGhuYW1lIHRvCisgICAgIHRyeSBhbmQgb3Blbi4gIElmIHRoaXMgaXMgTlVMTCwgdGhlIGNvbnN0cnVjdGVkIHBhdGhuYW1lIGlzIGFzCisgICAgIGNvbnN0cnVjdGVkIGJ5IGFwcGVuZF9maWxlX3RvX2Rpci4gICovCisgIGNoYXIgKigqY29uc3RydWN0KSAoY29uc3QgY2hhciAqaGVhZGVyLCBjcHBfZGlyICpkaXIpOworCisgIC8qIFRoZSBDIGZyb250IGVuZCB1c2VzIHRoZXNlIHRvIHJlY29nbml6ZSBkdXBsaWNhdGVkCisgICAgIGRpcmVjdG9yaWVzIGluIHRoZSBzZWFyY2ggcGF0aC4gICovCisgIElOT19UX0NQUDsKKyAgZGV2X3QgZGV2OworfTsKKworLyogVGhlIHN0cnVjdHVyZSBvZiBhIG5vZGUgaW4gdGhlIGhhc2ggdGFibGUuICBUaGUgaGFzaCB0YWJsZSBoYXMKKyAgIGVudHJpZXMgZm9yIGFsbCBpZGVudGlmaWVyczogZWl0aGVyIG1hY3JvcyBkZWZpbmVkIGJ5ICNkZWZpbmUKKyAgIGNvbW1hbmRzICh0eXBlIE5UX01BQ1JPKSwgYXNzZXJ0aW9ucyBjcmVhdGVkIHdpdGggI2Fzc2VydAorICAgKE5UX0FTU0VSVElPTiksIG9yIG5laXRoZXIgb2YgdGhlIGFib3ZlIChOVF9WT0lEKS4gIEJ1aWx0aW4gbWFjcm9zCisgICBsaWtlIF9fTElORV9fIGFyZSBmbGFnZ2VkIE5PREVfQlVJTFRJTi4gIFBvaXNvbmVkIGlkZW50aWZpZXJzIGFyZQorICAgZmxhZ2dlZCBOT0RFX1BPSVNPTkVELiAgTk9ERV9PUEVSQVRPUiAoQysrIG9ubHkpIGluZGljYXRlcyBhbgorICAgaWRlbnRpZmllciB0aGF0IGJlaGF2ZXMgbGlrZSBhbiBvcGVyYXRvciBzdWNoIGFzICJ4b3IiLgorICAgTk9ERV9ESUFHTk9TVElDIGlzIGZvciBzcGVlZCBpbiBsZXhfdG9rZW46IGl0IGluZGljYXRlcyBhCisgICBkaWFnbm9zdGljIG1heSBiZSByZXF1aXJlZCBmb3IgdGhpcyBub2RlLiAgQ3VycmVudGx5IHRoaXMgb25seQorICAgYXBwbGllcyB0byBfX1ZBX0FSR1NfXywgcG9pc29uZWQgaWRlbnRpZmllcnMsIGFuZCAtV2MrKy1jb21wYXQKKyAgIHdhcm5pbmdzIGFib3V0IE5PREVfT1BFUkFUT1IuICAqLworCisvKiBIYXNoIG5vZGUgZmxhZ3MuICAqLworI2RlZmluZSBOT0RFX09QRVJBVE9SCSgxIDw8IDApCS8qIEMrKyBuYW1lZCBvcGVyYXRvci4gICovCisjZGVmaW5lIE5PREVfUE9JU09ORUQJKDEgPDwgMSkJLyogUG9pc29uZWQgaWRlbnRpZmllci4gICovCisjZGVmaW5lIE5PREVfQlVJTFRJTgkoMSA8PCAyKQkvKiBCdWlsdGluIG1hY3JvLiAgKi8KKyNkZWZpbmUgTk9ERV9ESUFHTk9TVElDICgxIDw8IDMpCS8qIFBvc3NpYmxlIGRpYWdub3N0aWMgd2hlbiBsZXhlZC4gICovCisjZGVmaW5lIE5PREVfV0FSTgkoMSA8PCA0KQkvKiBXYXJuIGlmIHJlZGVmaW5lZCBvciB1bmRlZmluZWQuICAqLworI2RlZmluZSBOT0RFX0RJU0FCTEVECSgxIDw8IDUpCS8qIEEgZGlzYWJsZWQgbWFjcm8uICAqLworI2RlZmluZSBOT0RFX01BQ1JPX0FSRwkoMSA8PCA2KQkvKiBVc2VkIGR1cmluZyAjZGVmaW5lIHByb2Nlc3NpbmcuICAqLworI2RlZmluZSBOT0RFX1VTRUQJKDEgPDwgNykJLyogRHVtcGVkIHdpdGggLWRVLiAgKi8KKyNkZWZpbmUgTk9ERV9DT05ESVRJT05BTCAoMSA8PCA4KQkvKiBDb25kaXRpb25hbCBtYWNybyAqLworI2RlZmluZSBOT0RFX1dBUk5fT1BFUkFUT1IgKDEgPDwgOSkJLyogV2FybiBhYm91dCBDKysgbmFtZWQgb3BlcmF0b3IuICAqLworCisvKiBEaWZmZXJlbnQgZmxhdm9ycyBvZiBoYXNoIG5vZGUuICAqLworZW51bSBub2RlX3R5cGUKK3sKKyAgTlRfVk9JRCA9IDAsCSAgIC8qIE5vIGRlZmluaXRpb24geWV0LiAgKi8KKyAgTlRfTUFDUk8sCSAgIC8qIEEgbWFjcm8gb2Ygc29tZSBmb3JtLiAgKi8KKyAgTlRfQVNTRVJUSU9OCSAgIC8qIFByZWRpY2F0ZSBmb3IgI2Fzc2VydC4gICovCit9OworCisvKiBEaWZmZXJlbnQgZmxhdm9ycyBvZiBidWlsdGluIG1hY3JvLiAgX1ByYWdtYSBpcyBhbiBvcGVyYXRvciwgYnV0IHdlCisgICBoYW5kbGUgaXQgd2l0aCB0aGUgYnVpbHRpbiBjb2RlIGZvciBlZmZpY2llbmN5IHJlYXNvbnMuICAqLworZW51bSBjcHBfYnVpbHRpbl90eXBlCit7CisgIEJUX1NQRUNMSU5FID0gMCwJCS8qIGBfX0xJTkVfXycgKi8KKyAgQlRfREFURSwJCQkvKiBgX19EQVRFX18nICovCisgIEJUX0ZJTEUsCQkJLyogYF9fRklMRV9fJyAqLworICBCVF9CQVNFX0ZJTEUsCQkJLyogYF9fQkFTRV9GSUxFX18nICovCisgIEJUX0lOQ0xVREVfTEVWRUwsCQkvKiBgX19JTkNMVURFX0xFVkVMX18nICovCisgIEJUX1RJTUUsCQkJLyogYF9fVElNRV9fJyAqLworICBCVF9TVERDLAkJCS8qIGBfX1NURENfXycgKi8KKyAgQlRfUFJBR01BLAkJCS8qIGBfUHJhZ21hJyBvcGVyYXRvciAqLworICBCVF9USU1FU1RBTVAsCQkJLyogYF9fVElNRVNUQU1QX18nICovCisgIEJUX0NPVU5URVIJCQkvKiBgX19DT1VOVEVSX18nICovCit9OworCisjZGVmaW5lIENQUF9IQVNITk9ERShITk9ERSkJKChjcHBfaGFzaG5vZGUgKikgKEhOT0RFKSkKKyNkZWZpbmUgSFRfTk9ERShOT0RFKQkJKChodF9pZGVudGlmaWVyICopIChOT0RFKSkKKyNkZWZpbmUgTk9ERV9MRU4oTk9ERSkJCUhUX0xFTiAoJihOT0RFKS0+aWRlbnQpCisjZGVmaW5lIE5PREVfTkFNRShOT0RFKQkJSFRfU1RSICgmKE5PREUpLT5pZGVudCkKKworLyogU3BlY2lmeSB3aGljaCBmaWVsZCwgaWYgYW55LCBvZiB0aGUgdW5pb24gaXMgdXNlZC4gICovCisKK2VudW0geworICBOVFZfTUFDUk8sCisgIE5UVl9BTlNXRVIsCisgIE5UVl9CVUlMVElOLAorICBOVFZfQVJHVU1FTlQsCisgIE5UVl9OT05FCit9OworCisjZGVmaW5lIENQUF9IQVNITk9ERV9WQUxVRV9JRFgoSE5PREUpCQkJCVwKKyAgKChITk9ERS5mbGFncyAmIE5PREVfTUFDUk9fQVJHKSA/IE5UVl9BUkdVTUVOVAkJXAorICAgOiBITk9ERS50eXBlID09IE5UX01BQ1JPID8gKChITk9ERS5mbGFncyAmIE5PREVfQlVJTFRJTikgCVwKKwkJCSAgICAgICA/IE5UVl9CVUlMVElOIDogTlRWX01BQ1JPKQlcCisgICA6IEhOT0RFLnR5cGUgPT0gTlRfQVNTRVJUSU9OID8gTlRWX0FOU1dFUgkJCVwKKyAgIDogTlRWX05PTkUpCisKKy8qIFRoZSBjb21tb24gcGFydCBvZiBhbiBpZGVudGlmaWVyIG5vZGUgc2hhcmVkIGFtb25nc3QgYWxsIDMgQyBmcm9udAorICAgZW5kcy4gIEFsc28gdXNlZCB0byBzdG9yZSBDUFAgaWRlbnRpZmllcnMsIHdoaWNoIGFyZSBhIHN1cGVyc2V0IG9mCisgICBpZGVudGlmaWVycyBpbiB0aGUgZ3JhbW1hdGljYWwgc2Vuc2UuICAqLworCit1bmlvbiBHVFkoKCkpIF9jcHBfaGFzaG5vZGVfdmFsdWUgeworICAvKiBJZiBhIG1hY3JvLiAgKi8KKyAgY3BwX21hY3JvICogR1RZKCh0YWcgKCJOVFZfTUFDUk8iKSkpIG1hY3JvOworICAvKiBBbnN3ZXJzIHRvIGFuIGFzc2VydGlvbi4gICovCisgIHN0cnVjdCBhbnN3ZXIgKiBHVFkgKCh0YWcgKCJOVFZfQU5TV0VSIikpKSBhbnN3ZXJzOworICAvKiBDb2RlIGZvciBhIGJ1aWx0aW4gbWFjcm8uICAqLworICBlbnVtIGNwcF9idWlsdGluX3R5cGUgR1RZICgodGFnICgiTlRWX0JVSUxUSU4iKSkpIGJ1aWx0aW47CisgIC8qIE1hY3JvIGFyZ3VtZW50IGluZGV4LiAgKi8KKyAgdW5zaWduZWQgc2hvcnQgR1RZICgodGFnICgiTlRWX0FSR1VNRU5UIikpKSBhcmdfaW5kZXg7Cit9OworCitzdHJ1Y3QgR1RZKCgpKSBjcHBfaGFzaG5vZGUgeworICBzdHJ1Y3QgaHRfaWRlbnRpZmllciBpZGVudDsKKyAgdW5zaWduZWQgaW50IGlzX2RpcmVjdGl2ZSA6IDE7CisgIHVuc2lnbmVkIGludCBkaXJlY3RpdmVfaW5kZXggOiA3OwkvKiBJZiBpc19kaXJlY3RpdmUsCisJCQkJCSAgIHRoZW4gaW5kZXggaW50byBkaXJlY3RpdmUgdGFibGUuCisJCQkJCSAgIE90aGVyd2lzZSwgYSBOT0RFX09QRVJBVE9SLiAgKi8KKyAgdW5zaWduZWQgY2hhciByaWRfY29kZTsJCS8qIFJpZCBjb2RlIC0gZm9yIGZyb250IGVuZHMuICAqLworICBFTlVNX0JJVEZJRUxEKG5vZGVfdHlwZSkgdHlwZSA6IDY7CS8qIENQUCBub2RlIHR5cGUuICAqLworICB1bnNpZ25lZCBpbnQgZmxhZ3MgOiAxMDsJCS8qIENQUCBmbGFncy4gICovCisKKyAgdW5pb24gX2NwcF9oYXNobm9kZV92YWx1ZSBHVFkgKChkZXNjICgiQ1BQX0hBU0hOT0RFX1ZBTFVFX0lEWCAoJTEpIikpKSB2YWx1ZTsKK307CisKKy8qIENhbGwgdGhpcyBmaXJzdCB0byBnZXQgYSBoYW5kbGUgdG8gcGFzcyB0byBvdGhlciBmdW5jdGlvbnMuCisKKyAgIElmIHlvdSB3YW50IGNwcGxpYiB0byBtYW5hZ2UgaXRzIG93biBoYXNodGFibGUsIHBhc3MgaW4gYSBOVUxMCisgICBwb2ludGVyLiAgT3RoZXJ3aXNlIHlvdSBzaG91bGQgcGFzcyBpbiBhbiBpbml0aWFsaXplZCBoYXNoIHRhYmxlCisgICB0aGF0IGNwcGxpYiB3aWxsIHNoYXJlOyB0aGlzIHRlY2huaXF1ZSBpcyB1c2VkIGJ5IHRoZSBDIGZyb250CisgICBlbmRzLiAgKi8KK2V4dGVybiBjcHBfcmVhZGVyICpjcHBfY3JlYXRlX3JlYWRlciAoZW51bSBjX2xhbmcsIHN0cnVjdCBodCAqLAorCQkJCSAgICAgIHN0cnVjdCBsaW5lX21hcHMgKik7CisKKy8qIFJlc2V0IHRoZSBjcHBfcmVhZGVyJ3MgbGluZV9tYXAuICBUaGlzIGlzIG9ubHkgdXNlZCBhZnRlciByZWFkaW5nIGEKKyAgIFBDSCBmaWxlLiAgKi8KK2V4dGVybiB2b2lkIGNwcF9zZXRfbGluZV9tYXAgKGNwcF9yZWFkZXIgKiwgc3RydWN0IGxpbmVfbWFwcyAqKTsKKworLyogQ2FsbCB0aGlzIHRvIGNoYW5nZSB0aGUgc2VsZWN0ZWQgbGFuZ3VhZ2Ugc3RhbmRhcmQgKGUuZy4gYmVjYXVzZSBvZgorICAgY29tbWFuZCBsaW5lIG9wdGlvbnMpLiAgKi8KK2V4dGVybiB2b2lkIGNwcF9zZXRfbGFuZyAoY3BwX3JlYWRlciAqLCBlbnVtIGNfbGFuZyk7CisKKy8qIFNldCB0aGUgaW5jbHVkZSBwYXRocy4gICovCitleHRlcm4gdm9pZCBjcHBfc2V0X2luY2x1ZGVfY2hhaW5zIChjcHBfcmVhZGVyICosIGNwcF9kaXIgKiwgY3BwX2RpciAqLCBpbnQpOworCisvKiBDYWxsIHRoZXNlIHRvIGdldCBwb2ludGVycyB0byB0aGUgb3B0aW9ucywgY2FsbGJhY2ssIGFuZCBkZXBzCisgICBzdHJ1Y3R1cmVzIGZvciBhIGdpdmVuIHJlYWRlci4gIFRoZXNlIHBvaW50ZXJzIGFyZSBnb29kIHVudGlsIHlvdQorICAgY2FsbCBjcHBfZmluaXNoIG9uIHRoYXQgcmVhZGVyLiAgWW91IGNhbiBlaXRoZXIgZWRpdCB0aGUgY2FsbGJhY2tzCisgICB0aHJvdWdoIHRoZSBwb2ludGVyIHJldHVybmVkIGZyb20gY3BwX2dldF9jYWxsYmFja3MsIG9yIHNldCB0aGVtCisgICB3aXRoIGNwcF9zZXRfY2FsbGJhY2tzLiAgKi8KK2V4dGVybiBjcHBfb3B0aW9ucyAqY3BwX2dldF9vcHRpb25zIChjcHBfcmVhZGVyICopOworZXh0ZXJuIGNwcF9jYWxsYmFja3MgKmNwcF9nZXRfY2FsbGJhY2tzIChjcHBfcmVhZGVyICopOworZXh0ZXJuIHZvaWQgY3BwX3NldF9jYWxsYmFja3MgKGNwcF9yZWFkZXIgKiwgY3BwX2NhbGxiYWNrcyAqKTsKK2V4dGVybiBzdHJ1Y3QgZGVwcyAqY3BwX2dldF9kZXBzIChjcHBfcmVhZGVyICopOworCisvKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBmaWxlLCBidXQgZG9lcyBub3Qgc3RhcnQgcHJlcHJvY2Vzc2luZy4gIEl0CisgICByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbCBmaWxlOyB0aGlzIGlzIHRoZSBzYW1lIGFzIHRoZQorICAgaW5wdXQgZmlsZSwgZXhjZXB0IGZvciBwcmVwcm9jZXNzZWQgaW5wdXQuICBUaGlzIHdpbGwgZ2VuZXJhdGUgYXQKKyAgIGxlYXN0IG9uZSBmaWxlIGNoYW5nZSBjYWxsYmFjaywgYW5kIHBvc3NpYmx5IGEgbGluZSBjaGFuZ2UgY2FsbGJhY2sKKyAgIHRvby4gIElmIHRoZXJlIHdhcyBhbiBlcnJvciBvcGVuaW5nIHRoZSBmaWxlLCBpdCByZXR1cm5zIE5VTEwuICAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKmNwcF9yZWFkX21haW5fZmlsZSAoY3BwX3JlYWRlciAqLCBjb25zdCBjaGFyICopOworCisvKiBTZXQgdXAgYnVpbHQtaW5zIHdpdGggc3BlY2lhbCBiZWhhdmlvci4gIFVzZSBjcHBfaW5pdF9idWlsdGlucygpCisgICBpbnN0ZWFkIHVubGVzcyB5b3VyIGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLiAgKi8KK2V4dGVybiB2b2lkIGNwcF9pbml0X3NwZWNpYWxfYnVpbHRpbnMgKGNwcF9yZWFkZXIgKik7CisKKy8qIFNldCB1cCBidWlsdC1pbnMgbGlrZSBfX0ZJTEVfXy4gICovCitleHRlcm4gdm9pZCBjcHBfaW5pdF9idWlsdGlucyAoY3BwX3JlYWRlciAqLCBpbnQpOworCisvKiBUaGlzIGlzIGNhbGxlZCBhZnRlciBvcHRpb25zIGhhdmUgYmVlbiBwYXJzZWQsIGFuZCBwYXJ0aWFsbHkKKyAgIHByb2Nlc3NlZC4gICovCitleHRlcm4gdm9pZCBjcHBfcG9zdF9vcHRpb25zIChjcHBfcmVhZGVyICopOworCisvKiBTZXQgdXAgdHJhbnNsYXRpb24gdG8gdGhlIHRhcmdldCBjaGFyYWN0ZXIgc2V0LiAgKi8KK2V4dGVybiB2b2lkIGNwcF9pbml0X2ljb252IChjcHBfcmVhZGVyICopOworCisvKiBDYWxsIHRoaXMgdG8gZmluaXNoIHByZXByb2Nlc3NpbmcuICBJZiB5b3UgcmVxdWVzdGVkIGRlcGVuZGVuY3kKKyAgIGdlbmVyYXRpb24sIHBhc3MgYW4gb3BlbiBzdHJlYW0gdG8gd3JpdGUgdGhlIGluZm9ybWF0aW9uIHRvLAorICAgb3RoZXJ3aXNlIE5VTEwuICBJdCBpcyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIGNsb3NlIHRoZSBzdHJlYW0uICAqLworZXh0ZXJuIHZvaWQgY3BwX2ZpbmlzaCAoY3BwX3JlYWRlciAqLCBGSUxFICpkZXBzX3N0cmVhbSk7CisKKy8qIENhbGwgdGhpcyB0byByZWxlYXNlIHRoZSBoYW5kbGUgYXQgdGhlIGVuZCBvZiBwcmVwcm9jZXNzaW5nLiAgQW55CisgICB1c2Ugb2YgdGhlIGhhbmRsZSBhZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMgaXMgaW52YWxpZC4gICovCitleHRlcm4gdm9pZCBjcHBfZGVzdHJveSAoY3BwX3JlYWRlciAqKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBjcHBfdG9rZW5fbGVuIChjb25zdCBjcHBfdG9rZW4gKik7CitleHRlcm4gdW5zaWduZWQgY2hhciAqY3BwX3Rva2VuX2FzX3RleHQgKGNwcF9yZWFkZXIgKiwgY29uc3QgY3BwX3Rva2VuICopOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgKmNwcF9zcGVsbF90b2tlbiAoY3BwX3JlYWRlciAqLCBjb25zdCBjcHBfdG9rZW4gKiwKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciAqLCBib29sKTsKK2V4dGVybiB2b2lkIGNwcF9yZWdpc3Rlcl9wcmFnbWEgKGNwcF9yZWFkZXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCisJCQkJIHZvaWQgKCopIChjcHBfcmVhZGVyICopLCBib29sKTsKK2V4dGVybiB2b2lkIGNwcF9yZWdpc3Rlcl9kZWZlcnJlZF9wcmFnbWEgKGNwcF9yZWFkZXIgKiwgY29uc3QgY2hhciAqLAorCQkJCQkgIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQsIGJvb2wsIGJvb2wpOworZXh0ZXJuIGludCBjcHBfYXZvaWRfcGFzdGUgKGNwcF9yZWFkZXIgKiwgY29uc3QgY3BwX3Rva2VuICosCisJCQkgICAgY29uc3QgY3BwX3Rva2VuICopOworZXh0ZXJuIGNvbnN0IGNwcF90b2tlbiAqY3BwX2dldF90b2tlbiAoY3BwX3JlYWRlciAqKTsKK2V4dGVybiBjb25zdCBjcHBfdG9rZW4gKmNwcF9nZXRfdG9rZW5fd2l0aF9sb2NhdGlvbiAoY3BwX3JlYWRlciAqLAorCQkJCQkJICAgICBzb3VyY2VfbG9jYXRpb24gKik7CitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciAqY3BwX21hY3JvX2RlZmluaXRpb24gKGNwcF9yZWFkZXIgKiwKKwkJCQkJCSAgY29uc3QgY3BwX2hhc2hub2RlICopOworZXh0ZXJuIHZvaWQgX2NwcF9iYWNrdXBfdG9rZW5zIChjcHBfcmVhZGVyICosIHVuc2lnbmVkIGludCk7CitleHRlcm4gY29uc3QgY3BwX3Rva2VuICpjcHBfcGVla190b2tlbiAoY3BwX3JlYWRlciAqLCBpbnQpOworCisvKiBFdmFsdWF0ZSBhIENQUF8qQ0hBUiogdG9rZW4uICAqLworZXh0ZXJuIGNwcGNoYXJfdCBjcHBfaW50ZXJwcmV0X2NoYXJjb25zdCAoY3BwX3JlYWRlciAqLCBjb25zdCBjcHBfdG9rZW4gKiwKKwkJCQkJICB1bnNpZ25lZCBpbnQgKiwgaW50ICopOworLyogRXZhbHVhdGUgYSB2ZWN0b3Igb2YgQ1BQXypTVFJJTkcqIHRva2Vucy4gICovCitleHRlcm4gYm9vbCBjcHBfaW50ZXJwcmV0X3N0cmluZyAoY3BwX3JlYWRlciAqLAorCQkJCSAgY29uc3QgY3BwX3N0cmluZyAqLCBzaXplX3QsCisJCQkJICBjcHBfc3RyaW5nICosIGVudW0gY3BwX3R0eXBlKTsKK2V4dGVybiBib29sIGNwcF9pbnRlcnByZXRfc3RyaW5nX25vdHJhbnNsYXRlIChjcHBfcmVhZGVyICosCisJCQkJCSAgICAgIGNvbnN0IGNwcF9zdHJpbmcgKiwgc2l6ZV90LAorCQkJCQkgICAgICBjcHBfc3RyaW5nICosIGVudW0gY3BwX3R0eXBlKTsKKworLyogQ29udmVydCBhIGhvc3QgY2hhcmFjdGVyIGNvbnN0YW50IHRvIHRoZSBleGVjdXRpb24gY2hhcmFjdGVyIHNldC4gICovCitleHRlcm4gY3BwY2hhcl90IGNwcF9ob3N0X3RvX2V4ZWNfY2hhcnNldCAoY3BwX3JlYWRlciAqLCBjcHBjaGFyX3QpOworCisvKiBVc2VkIHRvIHJlZ2lzdGVyIG1hY3JvcyBhbmQgYXNzZXJ0aW9ucywgcGVyaGFwcyBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCisgICBUaGUgdGV4dCBpcyB0aGUgc2FtZSBhcyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50LiAgKi8KK2V4dGVybiB2b2lkIGNwcF9kZWZpbmUgKGNwcF9yZWFkZXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIGNwcF9kZWZpbmVfZm9ybWF0dGVkIChjcHBfcmVhZGVyICpwZmlsZSwgCisJCQkJICBjb25zdCBjaGFyICpmbXQsIC4uLikgQVRUUklCVVRFX1BSSU5URl8yOworZXh0ZXJuIHZvaWQgY3BwX2Fzc2VydCAoY3BwX3JlYWRlciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgY3BwX3VuZGVmIChjcHBfcmVhZGVyICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9pZCBjcHBfdW5hc3NlcnQgKGNwcF9yZWFkZXIgKiwgY29uc3QgY2hhciAqKTsKKworZXh0ZXJuIGNwcF9tYWNybyAqY3BwX3B1c2hfZGVmaW5pdGlvbiAoY3BwX3JlYWRlciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgY3BwX3BvcF9kZWZpbml0aW9uIChjcHBfcmVhZGVyICosIGNvbnN0IGNoYXIgKiwgY3BwX21hY3JvICopOworCisvKiBVbmRlZmluZSBhbGwgbWFjcm9zIGFuZCBhc3NlcnRpb25zLiAgKi8KK2V4dGVybiB2b2lkIGNwcF91bmRlZl9hbGwgKGNwcF9yZWFkZXIgKik7CisKK2V4dGVybiBjcHBfYnVmZmVyICpjcHBfcHVzaF9idWZmZXIgKGNwcF9yZWFkZXIgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLAorCQkJCSAgICBzaXplX3QsIGludCk7CitleHRlcm4gaW50IGNwcF9kZWZpbmVkIChjcHBfcmVhZGVyICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgaW50KTsKKworLyogQSBwcmVwcm9jZXNzaW5nIG51bWJlci4gIENvZGUgYXNzdW1lcyB0aGF0IGFueSB1bnVzZWQgaGlnaCBiaXRzIG9mCisgICB0aGUgZG91YmxlIGludGVnZXIgYXJlIHNldCB0byB6ZXJvLiAgKi8KK3R5cGVkZWYgdW5zaWduZWQgSE9TVF9XSURFX0lOVCBjcHBfbnVtX3BhcnQ7Cit0eXBlZGVmIHN0cnVjdCBjcHBfbnVtIGNwcF9udW07CitzdHJ1Y3QgY3BwX251bQoreworICBjcHBfbnVtX3BhcnQgaGlnaDsKKyAgY3BwX251bV9wYXJ0IGxvdzsKKyAgYm9vbCB1bnNpZ25lZHA7ICAvKiBUcnVlIGlmIHZhbHVlIHNob3VsZCBiZSB0cmVhdGVkIGFzIHVuc2lnbmVkLiAgKi8KKyAgYm9vbCBvdmVyZmxvdzsgICAvKiBUcnVlIGlmIHRoZSBtb3N0IHJlY2VudCBjYWxjdWxhdGlvbiBvdmVyZmxvd2VkLiAgKi8KK307CisKKy8qIGNwcGxpYiBwcm92aWRlcyB0d28gaW50ZXJmYWNlcyBmb3IgaW50ZXJwcmV0YXRpb24gb2YgcHJlcHJvY2Vzc2luZworICAgbnVtYmVycy4KKworICAgY3BwX2NsYXNzaWZ5X251bWJlciBjYXRlZ29yaXplcyBudW1lcmljIGNvbnN0YW50cyBhY2NvcmRpbmcgdG8KKyAgIHRoZWlyIGZpZWxkIChpbnRlZ2VyLCBmbG9hdGluZyBwb2ludCwgb3IgaW52YWxpZCksIHJhZGl4IChkZWNpbWFsLAorICAgb2N0YWwsIGhleGFkZWNpbWFsKSwgYW5kIHR5cGUgc3VmZml4ZXMuICAqLworCisjZGVmaW5lIENQUF9OX0NBVEVHT1JZICAweDAwMEYKKyNkZWZpbmUgQ1BQX05fSU5WQUxJRAkweDAwMDAKKyNkZWZpbmUgQ1BQX05fSU5URUdFUgkweDAwMDEKKyNkZWZpbmUgQ1BQX05fRkxPQVRJTkcJMHgwMDAyCisKKyNkZWZpbmUgQ1BQX05fV0lEVEgJMHgwMEYwCisjZGVmaW5lIENQUF9OX1NNQUxMCTB4MDAxMAkvKiBpbnQsIGZsb2F0LCBzaHJvdCBfRnJhY3QvQWNjdW0gICovCisjZGVmaW5lIENQUF9OX01FRElVTQkweDAwMjAJLyogbG9uZywgZG91YmxlLCBsb25nIF9GcmFjdC9fQWNjdW0uICAqLworI2RlZmluZSBDUFBfTl9MQVJHRQkweDAwNDAJLyogbG9uZyBsb25nLCBsb25nIGRvdWJsZSwKKwkJCQkgICBsb25nIGxvbmcgX0ZyYWN0L0FjY3VtLiAgKi8KKworI2RlZmluZSBDUFBfTl9XSURUSF9NRAkweEYwMDAwCS8qIG1hY2hpbmUgZGVmaW5lZC4gICovCisjZGVmaW5lIENQUF9OX01EX1cJMHgxMDAwMAorI2RlZmluZSBDUFBfTl9NRF9RCTB4MjAwMDAKKworI2RlZmluZSBDUFBfTl9SQURJWAkweDBGMDAKKyNkZWZpbmUgQ1BQX05fREVDSU1BTAkweDAxMDAKKyNkZWZpbmUgQ1BQX05fSEVYCTB4MDIwMAorI2RlZmluZSBDUFBfTl9PQ1RBTAkweDA0MDAKKyNkZWZpbmUgQ1BQX05fQklOQVJZCTB4MDgwMAorCisjZGVmaW5lIENQUF9OX1VOU0lHTkVECTB4MTAwMAkvKiBQcm9wZXJ0aWVzLiAgKi8KKyNkZWZpbmUgQ1BQX05fSU1BR0lOQVJZCTB4MjAwMAorI2RlZmluZSBDUFBfTl9ERkxPQVQJMHg0MDAwCisjZGVmaW5lIENQUF9OX0RFRkFVTFQJMHg4MDAwCisKKyNkZWZpbmUgQ1BQX05fRlJBQ1QJMHgxMDAwMDAgLyogRnJhY3QgdHlwZXMuICAqLworI2RlZmluZSBDUFBfTl9BQ0NVTQkweDIwMDAwMCAvKiBBY2N1bSB0eXBlcy4gICovCisKKy8qIENsYXNzaWZ5IGEgQ1BQX05VTUJFUiB0b2tlbi4gIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBjb21iaW5hdGlvbiBvZgorICAgdGhlIGZsYWdzIGZyb20gdGhlIGFib3ZlIHNldHMuICAqLworZXh0ZXJuIHVuc2lnbmVkIGNwcF9jbGFzc2lmeV9udW1iZXIgKGNwcF9yZWFkZXIgKiwgY29uc3QgY3BwX3Rva2VuICopOworCisvKiBFdmFsdWF0ZSBhIHRva2VuIGNsYXNzaWZpZWQgYXMgY2F0ZWdvcnkgQ1BQX05fSU5URUdFUi4gICovCitleHRlcm4gY3BwX251bSBjcHBfaW50ZXJwcmV0X2ludGVnZXIgKGNwcF9yZWFkZXIgKiwgY29uc3QgY3BwX3Rva2VuICosCisJCQkJICAgICAgdW5zaWduZWQgaW50IHR5cGUpOworCisvKiBTaWduIGV4dGVuZCBhIG51bWJlciwgd2l0aCBQUkVDSVNJT04gc2lnbmlmaWNhbnQgYml0cyBhbmQgYWxsCisgICBvdGhlcnMgYXNzdW1lZCBjbGVhciwgdG8gZmlsbCBvdXQgYSBjcHBfbnVtIHN0cnVjdHVyZS4gICovCitjcHBfbnVtIGNwcF9udW1fc2lnbl9leHRlbmQgKGNwcF9udW0sIHNpemVfdCk7CisKKy8qIERpYWdub3N0aWMgbGV2ZWxzLiAgVG8gZ2V0IGEgZGlhZ25vc3RpYyB3aXRob3V0IGFzc29jaWF0aW5nIGEKKyAgIHBvc2l0aW9uIGluIHRoZSB0cmFuc2xhdGlvbiB1bml0IHdpdGggaXQsIHVzZSBjcHBfZXJyb3Jfd2l0aF9saW5lCisgICB3aXRoIGEgbGluZSBudW1iZXIgb2YgemVyby4gICovCisKKy8qIFdhcm5pbmcsIGFuIGVycm9yIHdpdGggLVdlcnJvci4gICovCisjZGVmaW5lIENQUF9ETF9XQVJOSU5HCQkweDAwCisvKiBTYW1lIGFzIENQUF9ETF9XQVJOSU5HLCBleGNlcHQgaXQgaXMgbm90IHN1cHByZXNzZWQgaW4gc3lzdGVtIGhlYWRlcnMuICAqLworI2RlZmluZSBDUFBfRExfV0FSTklOR19TWVNIRFIJMHgwMQorLyogV2FybmluZywgYW4gZXJyb3Igd2l0aCAtcGVkYW50aWMtZXJyb3JzIG9yIC1XZXJyb3IuICAqLworI2RlZmluZSBDUFBfRExfUEVEV0FSTgkJMHgwMgorLyogQW4gZXJyb3IuICAqLworI2RlZmluZSBDUFBfRExfRVJST1IJCTB4MDMKKy8qIEFuIGludGVybmFsIGNvbnNpc3RlbmN5IGNoZWNrIGZhaWxlZC4gIFByaW50cyAiaW50ZXJuYWwgZXJyb3I6ICIsCisgICBvdGhlcndpc2UgdGhlIHNhbWUgYXMgQ1BQX0RMX0VSUk9SLiAgKi8KKyNkZWZpbmUgQ1BQX0RMX0lDRQkJMHgwNAorLyogQW4gaW5mb3JtYXRpdmUgbm90ZSBmb2xsb3dpbmcgYSB3YXJuaW5nLiAgKi8KKyNkZWZpbmUgQ1BQX0RMX05PVEUJCTB4MDUKKy8qIEEgZmF0YWwgZXJyb3IuICAqLworI2RlZmluZSBDUFBfRExfRkFUQUwJCTB4MDYKKworLyogT3V0cHV0IGEgZGlhZ25vc3RpYyBvZiBzb21lIGtpbmQuICAqLworZXh0ZXJuIGJvb2wgY3BwX2Vycm9yIChjcHBfcmVhZGVyICosIGludCwgY29uc3QgY2hhciAqbXNnaWQsIC4uLikKKyAgQVRUUklCVVRFX1BSSU5URl8zOworCisvKiBPdXRwdXQgYSBkaWFnbm9zdGljIHdpdGggIk1TR0lEOiAiIHByZWNlZGluZyB0aGUKKyAgIGVycm9yIHN0cmluZyBvZiBlcnJuby4gIE5vIGxvY2F0aW9uIGlzIHByaW50ZWQuICAqLworZXh0ZXJuIGJvb2wgY3BwX2Vycm5vIChjcHBfcmVhZGVyICosIGludCwgY29uc3QgY2hhciAqbXNnaWQpOworCisvKiBTYW1lIGFzIGNwcF9lcnJvciwgZXhjZXB0IGFkZGl0aW9uYWxseSBzcGVjaWZpZXMgYSBwb3NpdGlvbiBhcyBhCisgICAodHJhbnNsYXRpb24gdW5pdCkgcGh5c2ljYWwgbGluZSBhbmQgcGh5c2ljYWwgY29sdW1uLiAgSWYgdGhlIGxpbmUgaXMKKyAgIHplcm8sIHRoZW4gbm8gbG9jYXRpb24gaXMgcHJpbnRlZC4gICovCitleHRlcm4gYm9vbCBjcHBfZXJyb3Jfd2l0aF9saW5lIChjcHBfcmVhZGVyICosIGludCwgc291cmNlX2xvY2F0aW9uLCB1bnNpZ25lZCwKKwkJCQkgY29uc3QgY2hhciAqbXNnaWQsIC4uLikgQVRUUklCVVRFX1BSSU5URl81OworCisvKiBJbiBsZXguYyAqLworZXh0ZXJuIGludCBjcHBfaWRlcSAoY29uc3QgY3BwX3Rva2VuICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9pZCBjcHBfb3V0cHV0X2xpbmUgKGNwcF9yZWFkZXIgKiwgRklMRSAqKTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyICpjcHBfb3V0cHV0X2xpbmVfdG9fc3RyaW5nIChjcHBfcmVhZGVyICosCisJCQkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqKTsKK2V4dGVybiB2b2lkIGNwcF9vdXRwdXRfdG9rZW4gKGNvbnN0IGNwcF90b2tlbiAqLCBGSUxFICopOworZXh0ZXJuIGNvbnN0IGNoYXIgKmNwcF90eXBlMm5hbWUgKGVudW0gY3BwX3R0eXBlLCB1bnNpZ25lZCBjaGFyIGZsYWdzKTsKKy8qIFJldHVybnMgdGhlIHZhbHVlIG9mIGFuIGVzY2FwZSBzZXF1ZW5jZSwgdHJ1bmNhdGVkIHRvIHRoZSBjb3JyZWN0CisgICB0YXJnZXQgcHJlY2lzaW9uLiAgUFNUUiBwb2ludHMgdG8gdGhlIGlucHV0IHBvaW50ZXIsIHdoaWNoIGlzIGp1c3QKKyAgIGFmdGVyIHRoZSBiYWNrc2xhc2guICBMSU1JVCBpcyBob3cgbXVjaCB0ZXh0IHdlIGhhdmUuICBXSURFIGlzIHRydWUKKyAgIGlmIHRoZSBlc2NhcGUgc2VxdWVuY2UgaXMgcGFydCBvZiBhIHdpZGUgY2hhcmFjdGVyIGNvbnN0YW50IG9yCisgICBzdHJpbmcgbGl0ZXJhbC4gIEhhbmRsZXMgYWxsIHJlbGV2YW50IGRpYWdub3N0aWNzLiAgKi8KK2V4dGVybiBjcHBjaGFyX3QgY3BwX3BhcnNlX2VzY2FwZSAoY3BwX3JlYWRlciAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICoqIHBzdHIsCisJCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqbGltaXQsIGludCB3aWRlKTsKKworLyogU3RydWN0dXJlIHVzZWQgdG8gaG9sZCBhIGNvbW1lbnQgYmxvY2sgYXQgYSBnaXZlbiBsb2NhdGlvbiBpbiB0aGUKKyAgIHNvdXJjZSBjb2RlLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgLyogVGV4dCBvZiB0aGUgY29tbWVudCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0b3JzLiAgKi8KKyAgY2hhciAqY29tbWVudDsKKworICAvKiBzb3VyY2UgbG9jYXRpb24gZm9yIHRoZSBnaXZlbiBjb21tZW50LiAgKi8KKyAgc291cmNlX2xvY2F0aW9uIHNsb2M7Cit9IGNwcF9jb21tZW50OworCisvKiBTdHJ1Y3R1cmUgaG9sZGluZyBhbGwgY29tbWVudHMgZm9yIGEgZ2l2ZW4gY3BwX3JlYWRlci4gICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qIHRhYmxlIG9mIGNvbW1lbnQgZW50cmllcy4gICovCisgIGNwcF9jb21tZW50ICplbnRyaWVzOworCisgIC8qIG51bWJlciBvZiBhY3R1YWwgZW50cmllcyBlbnRlcmVkIGluIHRoZSB0YWJsZS4gICovCisgIGludCBjb3VudDsKKworICAvKiBudW1iZXIgb2YgZW50cmllcyBhbGxvY2F0ZWQgY3VycmVudGx5LiAgKi8KKyAgaW50IGFsbG9jYXRlZDsKK30gY3BwX2NvbW1lbnRfdGFibGU7CisKKy8qIFJldHVybnMgdGhlIHRhYmxlIG9mIGNvbW1lbnRzIGVuY291bnRlcmVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IuIFRoaXMKKyAgIHRhYmxlIGlzIG9ubHkgcG9wdWxhdGVkIHdoZW4gcGZpbGUtPnN0YXRlLnNhdmVfY29tbWVudHMgaXMgdHJ1ZS4gKi8KK2V4dGVybiBjcHBfY29tbWVudF90YWJsZSAqY3BwX2dldF9jb21tZW50cyAoY3BwX3JlYWRlciAqKTsKKworLyogSW4gaGFzaC5jICovCisKKy8qIExvb2t1cCBhbiBpZGVudGlmaWVyIGluIHRoZSBoYXNodGFibGUuICBQdXRzIHRoZSBpZGVudGlmaWVyIGluIHRoZQorICAgdGFibGUgaWYgaXQgaXMgbm90IGFscmVhZHkgdGhlcmUuICAqLworZXh0ZXJuIGNwcF9oYXNobm9kZSAqY3BwX2xvb2t1cCAoY3BwX3JlYWRlciAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICosCisJCQkJIHVuc2lnbmVkIGludCk7CisKK3R5cGVkZWYgaW50ICgqY3BwX2NiKSAoY3BwX3JlYWRlciAqLCBjcHBfaGFzaG5vZGUgKiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGNwcF9mb3JhbGxfaWRlbnRpZmllcnMgKGNwcF9yZWFkZXIgKiwgY3BwX2NiLCB2b2lkICopOworCisvKiBJbiBtYWNyby5jICovCitleHRlcm4gdm9pZCBjcHBfc2Nhbl9ub291dHB1dCAoY3BwX3JlYWRlciAqKTsKK2V4dGVybiBpbnQgIGNwcF9zeXNfbWFjcm9fcCAoY3BwX3JlYWRlciAqKTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyICpjcHBfcXVvdGVfc3RyaW5nICh1bnNpZ25lZCBjaGFyICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwKKwkJCQkJdW5zaWduZWQgaW50KTsKKworLyogSW4gZmlsZXMuYyAqLworZXh0ZXJuIGJvb2wgY3BwX2luY2x1ZGVkIChjcHBfcmVhZGVyICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gYm9vbCBjcHBfaW5jbHVkZWRfYmVmb3JlIChjcHBfcmVhZGVyICosIGNvbnN0IGNoYXIgKiwgc291cmNlX2xvY2F0aW9uKTsKK2V4dGVybiB2b2lkIGNwcF9tYWtlX3N5c3RlbV9oZWFkZXIgKGNwcF9yZWFkZXIgKiwgaW50LCBpbnQpOworZXh0ZXJuIGJvb2wgY3BwX3B1c2hfaW5jbHVkZSAoY3BwX3JlYWRlciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgY3BwX2NoYW5nZV9maWxlIChjcHBfcmVhZGVyICosIGVudW0gbGNfcmVhc29uLCBjb25zdCBjaGFyICopOworZXh0ZXJuIGNvbnN0IGNoYXIgKmNwcF9nZXRfcGF0aCAoc3RydWN0IF9jcHBfZmlsZSAqKTsKK2V4dGVybiBjcHBfZGlyICpjcHBfZ2V0X2RpciAoc3RydWN0IF9jcHBfZmlsZSAqKTsKK2V4dGVybiBjcHBfYnVmZmVyICpjcHBfZ2V0X2J1ZmZlciAoY3BwX3JlYWRlciAqKTsKK2V4dGVybiBzdHJ1Y3QgX2NwcF9maWxlICpjcHBfZ2V0X2ZpbGUgKGNwcF9idWZmZXIgKik7CitleHRlcm4gY3BwX2J1ZmZlciAqY3BwX2dldF9wcmV2IChjcHBfYnVmZmVyICopOworZXh0ZXJuIHZvaWQgY3BwX2NsZWFyX2ZpbGVfY2FjaGUgKGNwcF9yZWFkZXIgKik7CisKKy8qIEluIHBjaC5jICovCitzdHJ1Y3Qgc2F2ZV9tYWNyb19kYXRhOworZXh0ZXJuIGludCBjcHBfc2F2ZV9zdGF0ZSAoY3BwX3JlYWRlciAqLCBGSUxFICopOworZXh0ZXJuIGludCBjcHBfd3JpdGVfcGNoX2RlcHMgKGNwcF9yZWFkZXIgKiwgRklMRSAqKTsKK2V4dGVybiBpbnQgY3BwX3dyaXRlX3BjaF9zdGF0ZSAoY3BwX3JlYWRlciAqLCBGSUxFICopOworZXh0ZXJuIGludCBjcHBfdmFsaWRfc3RhdGUgKGNwcF9yZWFkZXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIHZvaWQgY3BwX3ByZXBhcmVfc3RhdGUgKGNwcF9yZWFkZXIgKiwgc3RydWN0IHNhdmVfbWFjcm9fZGF0YSAqKik7CitleHRlcm4gaW50IGNwcF9yZWFkX3N0YXRlIChjcHBfcmVhZGVyICosIGNvbnN0IGNoYXIgKiwgRklMRSAqLAorCQkJICAgc3RydWN0IHNhdmVfbWFjcm9fZGF0YSAqKTsKKworI2VuZGlmIC8qICEgTElCQ1BQX0NQUExJQl9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvZGVidWcuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OWVjYjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvZGVidWcuaApAQCAtMCwwICsxLDIxNSBAQAorLyogRGVidWcgaG9va3MgZm9yIEdDQy4KKyAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNywgMjAwOAorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgIGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfREVCVUdfSAorI2RlZmluZSBHQ0NfREVCVUdfSAorCisvKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBob29rcyBmb3IgdGhlIGRlYnVnIGluZm9ybWF0aW9uIG91dHB1dAorICAgZnVuY3Rpb25zLCBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBnbG9iYWwgaW5zdGFuY2UgZGVidWdfaG9va3Mgc2V0IGluCisgICB0b3BsZXYuYyBhY2NvcmRpbmcgdG8gY29tbWFuZCBsaW5lIG9wdGlvbnMuICAqLworc3RydWN0IGdjY19kZWJ1Z19ob29rcworeworICAvKiBJbml0aWFsaXplIGRlYnVnIG91dHB1dC4gIE1BSU5fRklMRU5BTUUgaXMgdGhlIG5hbWUgb2YgdGhlIG1haW4KKyAgICAgaW5wdXQgZmlsZS4gICovCisgIHZvaWQgKCogaW5pdCkgKGNvbnN0IGNoYXIgKm1haW5fZmlsZW5hbWUpOworCisgIC8qIE91dHB1dCBkZWJ1ZyBzeW1ib2xzLiAgKi8KKyAgdm9pZCAoKiBmaW5pc2gpIChjb25zdCBjaGFyICptYWluX2ZpbGVuYW1lKTsKKworICAvKiBDYWxsZWQgZnJvbSBjZ3JhcGhfb3B0aW1pemUgYmVmb3JlIHN0YXJ0aW5nIHRvIGFzc2VtYmxlCisgICAgIGZ1bmN0aW9ucy92YXJpYWJsZXMvdG9wbGV2ZWwgYXNtcy4gICovCisgIHZvaWQgKCogYXNzZW1ibHlfc3RhcnQpICh2b2lkKTsKKworICAvKiBNYWNybyBkZWZpbmVkIG9uIGxpbmUgTElORSB3aXRoIG5hbWUgYW5kIGV4cGFuc2lvbiBURVhULiAgKi8KKyAgdm9pZCAoKiBkZWZpbmUpICh1bnNpZ25lZCBpbnQgbGluZSwgY29uc3QgY2hhciAqdGV4dCk7CisKKyAgLyogTUFDUk8gdW5kZWZpbmVkIG9uIGxpbmUgTElORS4gICovCisgIHZvaWQgKCogdW5kZWYpICh1bnNpZ25lZCBpbnQgbGluZSwgY29uc3QgY2hhciAqbWFjcm8pOworCisgIC8qIFJlY29yZCB0aGUgYmVnaW5uaW5nIG9mIGEgbmV3IHNvdXJjZSBmaWxlIEZJTEUgZnJvbSBMSU5FIG51bWJlcgorICAgICBpbiB0aGUgcHJldmlvdXMgb25lLiAgKi8KKyAgdm9pZCAoKiBzdGFydF9zb3VyY2VfZmlsZSkgKHVuc2lnbmVkIGludCBsaW5lLCBjb25zdCBjaGFyICpmaWxlKTsKKworICAvKiBSZWNvcmQgdGhlIHJlc3VtcHRpb24gb2YgYSBzb3VyY2UgZmlsZS4gIExJTkUgaXMgdGhlIGxpbmUgbnVtYmVyCisgICAgIGluIHRoZSBzb3VyY2UgZmlsZSB3ZSBhcmUgcmV0dXJuaW5nIHRvLiAgKi8KKyAgdm9pZCAoKiBlbmRfc291cmNlX2ZpbGUpICh1bnNpZ25lZCBpbnQgbGluZSk7CisKKyAgLyogUmVjb3JkIHRoZSBiZWdpbm5pbmcgb2YgYmxvY2sgTiwgY291bnRpbmcgZnJvbSAxIGFuZCBub3QKKyAgICAgaW5jbHVkaW5nIHRoZSBmdW5jdGlvbi1zY29wZSBibG9jaywgYXQgTElORS4gICovCisgIHZvaWQgKCogYmVnaW5fYmxvY2spICh1bnNpZ25lZCBpbnQgbGluZSwgdW5zaWduZWQgaW50IG4pOworCisgIC8qIFJlY29yZCB0aGUgZW5kIG9mIGEgYmxvY2suICBBcmd1bWVudHMgYXMgZm9yIGJlZ2luX2Jsb2NrLiAgKi8KKyAgdm9pZCAoKiBlbmRfYmxvY2spICh1bnNpZ25lZCBpbnQgbGluZSwgdW5zaWduZWQgaW50IG4pOworCisgIC8qIFJldHVybnMgbm9uemVybyBpZiBpdCBpcyBhcHByb3ByaWF0ZSBub3QgdG8gZW1pdCBhbnkgZGVidWdnaW5nCisgICAgIGluZm9ybWF0aW9uIGZvciBCTE9DSywgYmVjYXVzZSBpdCBkb2Vzbid0IGNvbnRhaW4gYW55CisgICAgIGluc3RydWN0aW9ucy4gIFRoaXMgbWF5IG5vdCBiZSB0aGUgY2FzZSBmb3IgYmxvY2tzIGNvbnRhaW5pbmcKKyAgICAgbmVzdGVkIGZ1bmN0aW9ucywgc2luY2Ugd2UgbWF5IGFjdHVhbGx5IGNhbGwgc3VjaCBhIGZ1bmN0aW9uIGV2ZW4KKyAgICAgdGhvdWdoIHRoZSBCTE9DSyBpbmZvcm1hdGlvbiBpcyBtZXNzZWQgdXAuICBEZWZhdWx0cyB0byB0cnVlLiAgKi8KKyAgYm9vbCAoKiBpZ25vcmVfYmxvY2spIChjb25zdF90cmVlKTsKKworICAvKiBSZWNvcmQgYSBzb3VyY2UgZmlsZSBsb2NhdGlvbiBhdCAoRklMRSwgTElORSwgRElTQ1JJTUlOQVRPUikuICAqLworICB2b2lkICgqIHNvdXJjZV9saW5lKSAodW5zaWduZWQgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGlzY3JpbWluYXRvciwgYm9vbCBpc19zdG10KTsKKworICAvKiBDYWxsZWQgYXQgc3RhcnQgb2YgcHJvbG9ndWUgY29kZS4gIExJTkUgaXMgdGhlIGZpcnN0IGxpbmUgaW4gdGhlCisgICAgIGZ1bmN0aW9uLiAgKi8KKyAgdm9pZCAoKiBiZWdpbl9wcm9sb2d1ZSkgKHVuc2lnbmVkIGludCBsaW5lLCBjb25zdCBjaGFyICpmaWxlKTsKKworICAvKiBDYWxsZWQgYXQgZW5kIG9mIHByb2xvZ3VlIGNvZGUuICBMSU5FIGlzIHRoZSBmaXJzdCBsaW5lIGluIHRoZQorICAgICBmdW5jdGlvbi4gICovCisgIHZvaWQgKCogZW5kX3Byb2xvZ3VlKSAodW5zaWduZWQgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZpbGUpOworCisgIC8qIFJlY29yZCBlbmQgb2YgZXBpbG9ndWUgY29kZS4gICovCisgIHZvaWQgKCogZW5kX2VwaWxvZ3VlKSAodW5zaWduZWQgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZpbGUpOworCisgIC8qIENhbGxlZCBhdCBzdGFydCBvZiBmdW5jdGlvbiBERUNMLCBiZWZvcmUgaXQgaXMgZGVjbGFyZWQuICAqLworICB2b2lkICgqIGJlZ2luX2Z1bmN0aW9uKSAodHJlZSBkZWNsKTsKKworICAvKiBSZWNvcmQgZW5kIG9mIGZ1bmN0aW9uLiAgTElORSBpcyBoaWdoZXN0IGxpbmUgbnVtYmVyIGluIGZ1bmN0aW9uLiAgKi8KKyAgdm9pZCAoKiBlbmRfZnVuY3Rpb24pICh1bnNpZ25lZCBpbnQgbGluZSk7CisKKyAgLyogRGVidWcgaW5mb3JtYXRpb24gZm9yIGEgZnVuY3Rpb24gREVDTC4gIFRoaXMgbWlnaHQgaW5jbHVkZSB0aGUKKyAgICAgZnVuY3Rpb24gbmFtZSAoYSBzeW1ib2wpLCBpdHMgcGFyYW1ldGVycywgYW5kIHRoZSBibG9jayB0aGF0CisgICAgIG1ha2VzIHVwIHRoZSBmdW5jdGlvbidzIGJvZHksIGFuZCB0aGUgbG9jYWwgdmFyaWFibGVzIG9mIHRoZQorICAgICBmdW5jdGlvbi4gICovCisgIHZvaWQgKCogZnVuY3Rpb25fZGVjbCkgKHRyZWUgZGVjbCk7CisKKyAgLyogRGVidWcgaW5mb3JtYXRpb24gZm9yIGEgZ2xvYmFsIERFQ0wuICBDYWxsZWQgZnJvbSB0b3BsZXYuYyBhZnRlcgorICAgICBjb21waWxhdGlvbiBwcm9wZXIgaGFzIGZpbmlzaGVkLiAgKi8KKyAgdm9pZCAoKiBnbG9iYWxfZGVjbCkgKHRyZWUgZGVjbCk7CisKKyAgLyogRGVidWcgaW5mb3JtYXRpb24gZm9yIGEgdHlwZSBERUNMLiAgQ2FsbGVkIGZyb20gdG9wbGV2LmMgYWZ0ZXIKKyAgICAgY29tcGlsYXRpb24gcHJvcGVyLCBhbHNvIGZyb20gdmFyaW91cyBsYW5ndWFnZSBmcm9udCBlbmRzIHRvCisgICAgIHJlY29yZCBidWlsdC1pbiB0eXBlcy4gIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgcHJvcGVybHkgYQorICAgICBib29sZWFuLCB3aGljaCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIHR5cGUgaXMgYSAibG9jYWwiCisgICAgIHR5cGUgYXMgZGV0ZXJtaW5lZCBieSB0aGUgbGFuZ3VhZ2UuICAoSXQncyBub3QgYSBib29sZWFuIGZvcgorICAgICBsZWdhY3kgcmVhc29ucy4pICAqLworICB2b2lkICgqIHR5cGVfZGVjbCkgKHRyZWUgZGVjbCwgaW50IGxvY2FsKTsKKworICAvKiBEZWJ1ZyBpbmZvcm1hdGlvbiBmb3IgaW1wb3J0ZWQgbW9kdWxlcyBhbmQgZGVjbGFyYXRpb25zLiAgKi8KKyAgdm9pZCAoKiBpbXBvcnRlZF9tb2R1bGVfb3JfZGVjbCkgKHRyZWUgZGVjbCwgdHJlZSBuYW1lLAorCQkJCSAgICB0cmVlIGNvbnRleHQsIGJvb2wgY2hpbGQpOworCisgIC8qIERFQ0wgaXMgYW4gaW5saW5lIGZ1bmN0aW9uLCB3aG9zZSBib2R5IGlzIHByZXNlbnQsIGJ1dCB3aGljaCBpcworICAgICBub3QgYmVpbmcgb3V0cHV0IGF0IHRoaXMgcG9pbnQuICAqLworICB2b2lkICgqIGRlZmVycmVkX2lubGluZV9mdW5jdGlvbikgKHRyZWUgZGVjbCk7CisKKyAgLyogREVDTCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24gd2hpY2ggaXMgYWJvdXQgdG8gYmUgZW1pdHRlZCBvdXQgb2YKKyAgICAgbGluZS4gIFRoZSBob29rIGlzIHVzZWZ1bCB0bywgZS5nLiwgZW1pdCBhYnN0cmFjdCBkZWJ1ZyBpbmZvIGZvcgorICAgICB0aGUgaW5saW5lIGJlZm9yZSBpdCBnZXRzIG1hbmdsZWQgYnkgb3B0aW1pemF0aW9uLiAgKi8KKyAgdm9pZCAoKiBvdXRsaW5pbmdfaW5saW5lX2Z1bmN0aW9uKSAodHJlZSBkZWNsKTsKKworICAvKiBDYWxsZWQgZnJvbSBmaW5hbF9zY2FuX2luc24gZm9yIGFueSBDT0RFX0xBQkVMIGluc24gd2hvc2UKKyAgICAgTEFCRUxfTkFNRSBpcyBub24tbnVsbC4gICovCisgIHZvaWQgKCogbGFiZWwpIChydHgpOworCisgIC8qIENhbGxlZCBhZnRlciB0aGUgc3RhcnQgYW5kIGJlZm9yZSB0aGUgZW5kIG9mIHdyaXRpbmcgYSBQQ0ggZmlsZS4KKyAgICAgVGhlIHBhcmFtZXRlciBpcyAwIGlmIGFmdGVyIHRoZSBzdGFydCwgMSBpZiBiZWZvcmUgdGhlIGVuZC4gICovCisgIHZvaWQgKCogaGFuZGxlX3BjaCkgKHVuc2lnbmVkIGludCk7CisKKyAgLyogQ2FsbGVkIGZyb20gZmluYWxfc2Nhbl9pbnNuIGZvciBhbnkgTk9URV9JTlNOX1ZBUl9MT0NBVElPTiBub3RlLiAgKi8KKyAgdm9pZCAoKiB2YXJfbG9jYXRpb24pIChydHgpOworCisgIC8qIENhbGxlZCBmcm9tIGZpbmFsX3NjYW5faW5zbiBpZiB0aGVyZSBpcyBhIHN3aXRjaCBiZXR3ZWVuIGhvdCBhbmQgY29sZAorICAgICB0ZXh0IHNlY3Rpb25zLiAgKi8KKyAgdm9pZCAoKiBzd2l0Y2hfdGV4dF9zZWN0aW9uKSAodm9pZCk7CisKKyAgLyogUmVjb3JkcyBhIGRpcmVjdCBjYWxsIHRvIHRoZSBmdW5jdGlvbiBERUNMLCBub3RpbmcgdGhlIHBvaW50IG9mIGNhbGwKKyAgICAgYW5kIHRoZSBkZWJ1ZyBpbmZvIGZvciB0aGUgZnVuY3Rpb24uICBDYWxsZWQgZnJvbSBmaW5hbF9zY2FuX2luc24KKyAgICAgd2hlbiBJQ0YgZGVidWdnaW5nIGlzIGVuYWJsZWQuICAqLworICB2b2lkICgqIGRpcmVjdF9jYWxsKSAodHJlZSBkZWNsKTsKKworICAvKiBSZWNvcmRzIHRoZSBPQkpfVFlQRV9SRUZfVE9LRU4gZm9yIGEgdmlydHVhbCBjYWxsIHRocm91Z2ggQUREUiwgd2hpY2gKKyAgICAgZm9yIEMrKyBpcyB0aGUgdnRhYmxlIHNsb3QgaW5kZXgsIG5vdGluZyB0aGUgSU5TTl9VSUQgZm9yIHRoZSBjYWxsCisgICAgIGluc3RydWN0aW9uLiAgQ2FsbGVkIGZyb20gY2FsbHMuYzplbWl0X2NhbGxfMSB3aGVuIElDRiBkZWJ1Z2dpbmcgaXMKKyAgICAgZW5hYmxlZC4gIEl0J3MgbmVjZXNzYXJ5IHRvIGRvIHRoaXMgZHVyaW5nIGxvd2VyaW5nIGJlY2F1c2UgdGhlCisgICAgIGNhbGwgaW5zdHJ1Y3Rpb24gYW5kIHRoZSBPQkpfVFlQRV9SRUYgYmVjb21lIHNlcGFyYXRlZCBhZnRlciB0aGF0CisgICAgIHBvaW50LiAgKi8KKyAgdm9pZCAoKiB2aXJ0dWFsX2NhbGxfdG9rZW4pICh0cmVlIGFkZHIsIGludCBpbnNuX3VpZCk7CisKKyAgLyogQ29waWVzIHRoZSBPQkpfVFlQRV9SRUZfVE9LRU4gZm9yIGEgdmlydHVhbCBjYWxsIGZyb20gT0xEX0lOU04gdG8KKyAgICAgTkVXX0lOU04uICBDYWxsZWQgZnJvbSBlbWl0LXJ0bC5jOnRyeV9zcGxpdCB3aGVuIGEgQ0FMTF9JTlNOIGlzCisgICAgIHNwbGl0LCBzbyB0aGF0IHRoZSB2dGFibGUgc2xvdCBpbmRleCByZW1haW5zIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAgICAgbmV3IENBTExfSU5TTi4gICovCisgIHZvaWQgKCogY29weV9jYWxsX2luZm8pIChydHggb2xkX2luc24sIHJ0eCBuZXdfaW5zbik7CisKKyAgLyogUmVjb3JkcyBhIHZpcnR1YWwgY2FsbCBnaXZlbiBJTlNOX1VJRCwgd2hpY2ggaXMgdGhlIFVJRCBvZiB0aGUgY2FsbAorICAgICBpbnN0cnVjdGlvbi4gIFRoZSBVSUQgaXMgdGhlbiBtYXBwZWQgdG8gdGhlIHZ0YWJsZSBzbG90IGluZGV4IG5vdGVkCisgICAgIGR1cmluZyB0aGUgbG93ZXJpbmcgcGhhc2UuICBDYWxsZWQgZnJvbSBmaW5hbF9zY2FuX2luc24gd2hlbiBJQ0YKKyAgICAgZGVidWdnaW5nIGlzIGVuYWJsZWQuICAqLworICB2b2lkICgqIHZpcnR1YWxfY2FsbCkgKGludCBpbnNuX3VpZCk7CisKKyAgLyogQ2FsbGVkIGZyb20gZ3Jva2RlY2xhcmF0b3IuICBSZXBsYWNlcyB0aGUgYW5vbnltb3VzIG5hbWUgd2l0aCB0aGUKKyAgICAgdHlwZSBuYW1lLiAgKi8KKyAgdm9pZCAoKiBzZXRfbmFtZSkgKHRyZWUsIHRyZWUpOworCisgIC8qIFRoaXMgaXMgMSBpZiB0aGUgZGVidWcgd3JpdGVyIHdhbnRzIHRvIHNlZSBzdGFydCBhbmQgZW5kIGNvbW1hbmRzIGZvciB0aGUKKyAgICAgbWFpbiBzb3VyY2UgZmlsZXMsIGFuZCAwIG90aGVyd2lzZS4gICovCisgIGludCBzdGFydF9lbmRfbWFpbl9zb3VyY2VfZmlsZTsKK307CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZ2NjX2RlYnVnX2hvb2tzICpkZWJ1Z19ob29rczsKKworLyogVGhlIGRvLW5vdGhpbmcgaG9va3MuICAqLworZXh0ZXJuIHZvaWQgZGVidWdfbm90aGluZ192b2lkICh2b2lkKTsKK2V4dGVybiB2b2lkIGRlYnVnX25vdGhpbmdfY2hhcnN0YXIgKGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9pZCBkZWJ1Z19ub3RoaW5nX2ludF9jaGFyc3RhciAodW5zaWduZWQgaW50LCBjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgZGVidWdfbm90aGluZ19pbnRfY2hhcnN0YXJfaW50X2Jvb2wgKHVuc2lnbmVkIGludCwgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgYm9vbCk7CitleHRlcm4gdm9pZCBkZWJ1Z19ub3RoaW5nX2ludCAodW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIGRlYnVnX25vdGhpbmdfaW50X2ludCAodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgZGVidWdfbm90aGluZ190cmVlICh0cmVlKTsKK2V4dGVybiB2b2lkIGRlYnVnX25vdGhpbmdfdHJlZV90cmVlICh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGRlYnVnX25vdGhpbmdfdHJlZV9pbnQgKHRyZWUsIGludCk7CitleHRlcm4gdm9pZCBkZWJ1Z19ub3RoaW5nX3RyZWVfdHJlZV90cmVlX2Jvb2wgKHRyZWUsIHRyZWUsIHRyZWUsIGJvb2wpOworZXh0ZXJuIGJvb2wgZGVidWdfdHJ1ZV9jb25zdF90cmVlIChjb25zdF90cmVlKTsKK2V4dGVybiB2b2lkIGRlYnVnX25vdGhpbmdfcnR4IChydHgpOworZXh0ZXJuIHZvaWQgZGVidWdfbm90aGluZ19ydHhfcnR4IChydHgsIHJ0eCk7CitleHRlcm4gdm9pZCBkZWJ1Z19ub3RoaW5nX3VpZCAoaW50KTsKKworLyogSG9va3MgZm9yIHZhcmlvdXMgZGVidWcgZm9ybWF0cy4gICovCitleHRlcm4gY29uc3Qgc3RydWN0IGdjY19kZWJ1Z19ob29rcyBkb19ub3RoaW5nX2RlYnVnX2hvb2tzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBnY2NfZGVidWdfaG9va3MgZGJ4X2RlYnVnX2hvb2tzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBnY2NfZGVidWdfaG9va3Mgc2RiX2RlYnVnX2hvb2tzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBnY2NfZGVidWdfaG9va3MgeGNvZmZfZGVidWdfaG9va3M7CitleHRlcm4gY29uc3Qgc3RydWN0IGdjY19kZWJ1Z19ob29rcyBkd2FyZjJfZGVidWdfaG9va3M7CitleHRlcm4gY29uc3Qgc3RydWN0IGdjY19kZWJ1Z19ob29rcyB2bXNkYmdfZGVidWdfaG9va3M7CisKKy8qIER3YXJmMiBmcmFtZSBpbmZvcm1hdGlvbi4gICovCisKK2V4dGVybiB2b2lkIGR3YXJmMm91dF9iZWdpbl9wcm9sb2d1ZSAodW5zaWduZWQgaW50LCBjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgZHdhcmYyb3V0X2VuZF9lcGlsb2d1ZSAodW5zaWduZWQgaW50LCBjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgZHdhcmYyb3V0X2ZyYW1lX2luaXQgKHZvaWQpOworZXh0ZXJuIHZvaWQgZHdhcmYyb3V0X2ZyYW1lX2ZpbmlzaCAodm9pZCk7CisvKiBEZWNpZGUgd2hldGhlciB3ZSB3YW50IHRvIGVtaXQgZnJhbWUgdW53aW5kIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudAorICAgdHJhbnNsYXRpb24gdW5pdC4gICovCitleHRlcm4gaW50IGR3YXJmMm91dF9kb19mcmFtZSAodm9pZCk7CitleHRlcm4gaW50IGR3YXJmMm91dF9kb19jZmlfYXNtICh2b2lkKTsKK2V4dGVybiB2b2lkIGR3YXJmMm91dF9zd2l0Y2hfdGV4dF9zZWN0aW9uICh2b2lkKTsKKworZXh0ZXJuIHZvaWQgZGVidWdfZmx1c2hfc3ltYm9sX3F1ZXVlICh2b2lkKTsKK2V4dGVybiB2b2lkIGRlYnVnX3F1ZXVlX3N5bWJvbCAodHJlZSk7CitleHRlcm4gdm9pZCBkZWJ1Z19mcmVlX3F1ZXVlICh2b2lkKTsKK2V4dGVybiBpbnQgZGVidWdfbmVzdGluZzsKK2V4dGVybiBpbnQgc3ltYm9sX3F1ZXVlX2luZGV4OworCitjb25zdCBjaGFyICpyZW1hcF9kZWJ1Z19maWxlbmFtZSAoY29uc3QgY2hhciAqKTsKK3ZvaWQgYWRkX2RlYnVnX3ByZWZpeF9tYXAgKGNvbnN0IGNoYXIgKik7CisKKyNlbmRpZiAvKiAhR0NDX0RFQlVHX0ggICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvZGVmYXVsdHMuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9kZWZhdWx0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZjkwZWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvZGVmYXVsdHMuaApAQCAtMCwwICsxLDExNjggQEAKKy8qIERlZmluaXRpb25zIG9mIHZhcmlvdXMgZGVmYXVsdHMgZm9yIHRtLmggbWFjcm9zLgorICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LAorICAgMjAwNSwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBSb24gR3VpbG1ldHRlIChyZmdAbW9ua2V5cy5jb20pCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCitwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCiszLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKK2EgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CitzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX0RFRkFVTFRTX0gKKyNkZWZpbmUgR0NDX0RFRkFVTFRTX0gKKworI2lmbmRlZiBHRVRfRU5WSVJPTk1FTlQKKyNkZWZpbmUgR0VUX0VOVklST05NRU5UKFZBTFVFLCBOQU1FKSBkbyB7IChWQUxVRSkgPSBnZXRlbnYgKE5BTUUpOyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNkZWZpbmUgb2JzdGFja19jaHVua19hbGxvYwkoKHZvaWQgKigqKSAobG9uZykpIHhtYWxsb2MpCisjZGVmaW5lIG9ic3RhY2tfY2h1bmtfZnJlZQkoKHZvaWQgKCopICh2b2lkICopKSBmcmVlKQorI2RlZmluZSBPQlNUQUNLX0NIVU5LX1NJWkUJMAorI2RlZmluZSBnY2Nfb2JzdGFja19pbml0KE9CU1RBQ0spCQkJXAorICBfb2JzdGFja19iZWdpbiAoKE9CU1RBQ0spLCBPQlNUQUNLX0NIVU5LX1NJWkUsIDAsCVwKKwkJICBvYnN0YWNrX2NodW5rX2FsbG9jLAkJCVwKKwkJICBvYnN0YWNrX2NodW5rX2ZyZWUpCisKKy8qIFN0b3JlIGluIE9VVFBVVCBhIHN0cmluZyAobWFkZSB3aXRoIGFsbG9jYSkgY29udGFpbmluZyBhbgorICAgYXNzZW1ibGVyLW5hbWUgZm9yIGEgbG9jYWwgc3RhdGljIHZhcmlhYmxlIG9yIGZ1bmN0aW9uIG5hbWVkIE5BTUUuCisgICBMQUJFTE5PIGlzIGFuIGludGVnZXIgd2hpY2ggaXMgZGlmZmVyZW50IGZvciBlYWNoIGNhbGwuICAqLworCisjaWZuZGVmIEFTTV9QTl9GT1JNQVQKKyMgaWZuZGVmIE5PX0RPVF9JTl9MQUJFTAorIyAgZGVmaW5lIEFTTV9QTl9GT1JNQVQgIiVzLiVsdSIKKyMgZWxzZQorIyAgaWZuZGVmIE5PX0RPTExBUl9JTl9MQUJFTAorIyAgIGRlZmluZSBBU01fUE5fRk9STUFUICIlcyQlbHUiCisjICBlbHNlCisjICAgZGVmaW5lIEFTTV9QTl9GT1JNQVQgIl9fJXNfJWx1IgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZiAvKiAhIEFTTV9QTl9GT1JNQVQgKi8KKworI2lmbmRlZiBBU01fRk9STUFUX1BSSVZBVEVfTkFNRQorIyBkZWZpbmUgQVNNX0ZPUk1BVF9QUklWQVRFX05BTUUoT1VUUFVULCBOQU1FLCBMQUJFTE5PKSBcCisgIGRvIHsgY29uc3QgY2hhciAqY29uc3QgbmFtZV8gPSAoTkFNRSk7IFwKKyAgICAgICBjaGFyICpjb25zdCBvdXRwdXRfID0gKE9VVFBVVCkgPSBcCisJIChjaGFyICopIGFsbG9jYSAoc3RybGVuIChuYW1lXykgKyAzMik7IFwKKyAgICAgICBzcHJpbnRmIChvdXRwdXRfLCBBU01fUE5fRk9STUFULCBuYW1lXywgKHVuc2lnbmVkIGxvbmcpKExBQkVMTk8pKTsgXAorICB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qIENob29zZSBhIHJlYXNvbmFibGUgZGVmYXVsdCBmb3IgQVNNX09VVFBVVF9BU0NJSS4gICovCisKKyNpZm5kZWYgQVNNX09VVFBVVF9BU0NJSQorI2RlZmluZSBBU01fT1VUUFVUX0FTQ0lJKE1ZRklMRSwgTVlTVFJJTkcsIE1ZTEVOR1RIKSBcCisgIGRvIHsJCQkJCQkJCQkgICAgICBcCisgICAgRklMRSAqX2hpZGVfYXNtX291dF9maWxlID0gKE1ZRklMRSk7CQkJCSAgICAgIFwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpfaGlkZV9wID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgKE1ZU1RSSU5HKTsJICAgICAgXAorICAgIGludCBfaGlkZV90aGlzc2l6ZSA9IChNWUxFTkdUSCk7CQkJCQkgICAgICBcCisgICAgewkJCQkJCQkJCSAgICAgIFwKKyAgICAgIEZJTEUgKmFzbV9vdXRfZmlsZSA9IF9oaWRlX2FzbV9vdXRfZmlsZTsJCQkJICAgICAgXAorICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IF9oaWRlX3A7CQkJCQkgICAgICBcCisgICAgICBpbnQgdGhpc3NpemUgPSBfaGlkZV90aGlzc2l6ZTsJCQkJCSAgICAgIFwKKyAgICAgIGludCBpOwkJCQkJCQkJICAgICAgXAorICAgICAgZnByaW50ZiAoYXNtX291dF9maWxlLCAiXHQuYXNjaWkgXCIiKTsJCQkJICAgICAgXAorCQkJCQkJCQkJICAgICAgXAorICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXNzaXplOyBpKyspCQkJCQkgICAgICBcCisJewkJCQkJCQkJICAgICAgXAorCSAgaW50IGMgPSBwW2ldOwkJCSAgIAkJCQkgICAgICBcCisJICBpZiAoYyA9PSAnXCInIHx8IGMgPT0gJ1xcJykJCQkJCSAgICAgIFwKKwkgICAgcHV0YyAoJ1xcJywgYXNtX291dF9maWxlKTsJCQkJCSAgICAgIFwKKwkgIGlmIChJU1BSSU5UKGMpKQkJCQkJCSAgICAgIFwKKwkgICAgcHV0YyAoYywgYXNtX291dF9maWxlKTsJCQkJCSAgICAgIFwKKwkgIGVsc2UJCQkJCQkJCSAgICAgIFwKKwkgICAgewkJCQkJCQkJICAgICAgXAorCSAgICAgIGZwcmludGYgKGFzbV9vdXRfZmlsZSwgIlxcJW8iLCBjKTsJCQkgICAgICBcCisJICAgICAgLyogQWZ0ZXIgYW4gb2N0YWwtZXNjYXBlLCBpZiBhIGRpZ2l0IGZvbGxvd3MsCQkgICAgICBcCisJCSB0ZXJtaW5hdGUgb25lIHN0cmluZyBjb25zdGFudCBhbmQgc3RhcnQgYW5vdGhlci4JICAgICAgXAorCQkgVGhlIFZBWCBhc3NlbWJsZXIgZmFpbHMgdG8gc3RvcCByZWFkaW5nIHRoZSBlc2NhcGUJICAgICAgXAorCQkgYWZ0ZXIgdGhyZWUgZGlnaXRzLCBzbyB0aGlzIGlzIHRoZSBvbmx5IHdheSB3ZQkJICAgICAgXAorCQkgY2FuIGdldCBpdCB0byBwYXJzZSB0aGUgZGF0YSBwcm9wZXJseS4gICovCQkgICAgICBcCisJICAgICAgaWYgKGkgPCB0aGlzc2l6ZSAtIDEgJiYgSVNESUdJVChwW2kgKyAxXSkpCQkgICAgICBcCisJCWZwcmludGYgKGFzbV9vdXRfZmlsZSwgIlwiXG5cdC5hc2NpaSBcIiIpOwkJICAgICAgXAorCSAgfQkJCQkJCQkJICAgICAgXAorCX0JCQkJCQkJCSAgICAgIFwKKyAgICAgIGZwcmludGYgKGFzbV9vdXRfZmlsZSwgIlwiXG4iKTsJCQkJCSAgICAgIFwKKyAgICB9CQkJCQkJCQkJICAgICAgXAorICB9CQkJCQkJCQkJICAgICAgXAorICB3aGlsZSAoMCkKKyNlbmRpZgorCisvKiBUaGlzIGlzIGhvdyB3ZSB0ZWxsIHRoZSBhc3NlbWJsZXIgdG8gZXF1YXRlIHR3byB2YWx1ZXMuICAqLworI2lmZGVmIFNFVF9BU01fT1AKKyNpZm5kZWYgQVNNX09VVFBVVF9ERUYKKyNkZWZpbmUgQVNNX09VVFBVVF9ERUYoRklMRSxMQUJFTDEsTEFCRUwyKQkJCQlcCisgZG8gewlmcHJpbnRmICgoRklMRSksICIlcyIsIFNFVF9BU01fT1ApOwkJCQlcCisJYXNzZW1ibGVfbmFtZSAoRklMRSwgTEFCRUwxKTsJCQkJCVwKKwlmcHJpbnRmIChGSUxFLCAiLCIpOwkJCQkJCVwKKwlhc3NlbWJsZV9uYW1lIChGSUxFLCBMQUJFTDIpOwkJCQkJXAorCWZwcmludGYgKEZJTEUsICJcbiIpOwkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgVExTX0NPTU1PTl9BU01fT1AKKyNkZWZpbmUgVExTX0NPTU1PTl9BU01fT1AgIi50bHNfY29tbW9uIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChIQVZFX0FTX1RMUykgJiYgIWRlZmluZWQgKEFTTV9PVVRQVVRfVExTX0NPTU1PTikKKyNkZWZpbmUgQVNNX09VVFBVVF9UTFNfQ09NTU9OKEZJTEUsIERFQ0wsIE5BTUUsIFNJWkUpCQkJXAorICBkbwkJCQkJCQkJCVwKKyAgICB7CQkJCQkJCQkJXAorICAgICAgZnByaW50ZiAoKEZJTEUpLCAiXHQlc1x0IiwgVExTX0NPTU1PTl9BU01fT1ApOwkJCVwKKyAgICAgIGFzc2VtYmxlX25hbWUgKChGSUxFKSwgKE5BTUUpKTsJCQkJCVwKKyAgICAgIGZwcmludGYgKChGSUxFKSwgIiwiSE9TVF9XSURFX0lOVF9QUklOVF9VTlNJR05FRCIsJXVcbiIsCQlcCisJICAgICAgIChTSVpFKSwgREVDTF9BTElHTiAoREVDTCkgLyBCSVRTX1BFUl9VTklUKTsJCVwKKyAgICB9CQkJCQkJCQkJXAorICB3aGlsZSAoMCkKKyNlbmRpZgorCisvKiBEZWNpZGUgd2hldGhlciB0byBkZWZlciBlbWl0dGluZyB0aGUgYXNzZW1ibGVyIG91dHB1dCBmb3IgYW4gZXF1YXRlCisgICBvZiB0d28gdmFsdWVzLiAgVGhlIGRlZmF1bHQgaXMgdG8gbm90IGRlZmVyIG91dHB1dC4gICovCisjaWZuZGVmIFRBUkdFVF9ERUZFUlJFRF9PVVRQVVRfREVGUworI2RlZmluZSBUQVJHRVRfREVGRVJSRURfT1VUUFVUX0RFRlMoREVDTCxUQVJHRVQpIGZhbHNlCisjZW5kaWYKKworLyogVGhpcyBpcyBob3cgdG8gb3V0cHV0IHRoZSBkZWZpbml0aW9uIG9mIGEgdXNlci1sZXZlbCBsYWJlbCBuYW1lZAorICAgTkFNRSwgc3VjaCBhcyB0aGUgbGFiZWwgb24gYSBzdGF0aWMgZnVuY3Rpb24gb3IgdmFyaWFibGUgTkFNRS4gICovCisKKyNpZm5kZWYgQVNNX09VVFBVVF9MQUJFTAorI2RlZmluZSBBU01fT1VUUFVUX0xBQkVMKEZJTEUsTkFNRSkgXAorICBkbyB7IGFzc2VtYmxlX25hbWUgKChGSUxFKSwgKE5BTUUpKTsgZnB1dHMgKCI6XG4iLCAoRklMRSkpOyB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qIE91dHB1dCB0aGUgZGVmaW5pdGlvbiBvZiBhIGNvbXBpbGVyLWdlbmVyYXRlZCBsYWJlbCBuYW1lZCBOQU1FLiAgKi8KKyNpZm5kZWYgQVNNX09VVFBVVF9JTlRFUk5BTF9MQUJFTAorI2RlZmluZSBBU01fT1VUUFVUX0lOVEVSTkFMX0xBQkVMKEZJTEUsTkFNRSkJXAorICBkbyB7CQkJCQkJXAorICAgIGFzc2VtYmxlX25hbWVfcmF3ICgoRklMRSksIChOQU1FKSk7CQlcCisgICAgZnB1dHMgKCI6XG4iLCAoRklMRSkpOwkJCVwKKyAgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKiBUaGlzIGlzIGhvdyB0byBvdXRwdXQgYSByZWZlcmVuY2UgdG8gYSB1c2VyLWxldmVsIGxhYmVsIG5hbWVkIE5BTUUuICAqLworCisjaWZuZGVmIEFTTV9PVVRQVVRfTEFCRUxSRUYKKyNkZWZpbmUgQVNNX09VVFBVVF9MQUJFTFJFRihGSUxFLE5BTUUpICBhc21fZnByaW50ZiAoKEZJTEUpLCAiJVUlcyIsIChOQU1FKSkKKyNlbmRpZgorCisvKiBBbGxvdyB0YXJnZXQgdG8gcHJpbnQgZGVidWcgaW5mbyBsYWJlbHMgc3BlY2lhbGx5LiAgVGhpcyBpcyB1c2VmdWwgZm9yCisgICBWTElXIHRhcmdldHMsIHNpbmNlIGRlYnVnIGluZm8gbGFiZWxzIHNob3VsZCBnbyBpbnRvIHRoZSBtaWRkbGUgb2YKKyAgIGluc3RydWN0aW9uIGJ1bmRsZXMgaW5zdGVhZCBvZiBicmVha2luZyB0aGVtLiAgKi8KKworI2lmbmRlZiBBU01fT1VUUFVUX0RFQlVHX0xBQkVMCisjZGVmaW5lIEFTTV9PVVRQVVRfREVCVUdfTEFCRUwoRklMRSwgUFJFRklYLCBOVU0pIFwKKyAgKCp0YXJnZXRtLmFzbV9vdXQuaW50ZXJuYWxfbGFiZWwpIChGSUxFLCBQUkVGSVgsIE5VTSkKKyNlbmRpZgorCisvKiBUaGlzIGlzIGhvdyB3ZSB0ZWxsIHRoZSBhc3NlbWJsZXIgdGhhdCBhIHN5bWJvbCBpcyB3ZWFrLiAgKi8KKyNpZm5kZWYgQVNNX09VVFBVVF9XRUFLX0FMSUFTCisjaWYgZGVmaW5lZCAoQVNNX1dFQUtFTl9MQUJFTCkgJiYgZGVmaW5lZCAoQVNNX09VVFBVVF9ERUYpCisjZGVmaW5lIEFTTV9PVVRQVVRfV0VBS19BTElBUyhTVFJFQU0sIE5BTUUsIFZBTFVFKQlcCisgIGRvCQkJCQkJCVwKKyAgICB7CQkJCQkJCVwKKyAgICAgIEFTTV9XRUFLRU5fTEFCRUwgKFNUUkVBTSwgTkFNRSk7CQkJXAorICAgICAgaWYgKFZBTFVFKQkJCQkJXAorICAgICAgICBBU01fT1VUUFVUX0RFRiAoU1RSRUFNLCBOQU1FLCBWQUxVRSk7CQlcCisgICAgfQkJCQkJCQlcCisgIHdoaWxlICgwKQorI2VuZGlmCisjZW5kaWYKKworLyogVGhpcyBpcyBob3cgd2UgdGVsbCB0aGUgYXNzZW1ibGVyIHRoYXQgYSBzeW1ib2wgaXMgYSB3ZWFrIGFsaWFzIHRvCisgICBhbm90aGVyIHN5bWJvbCB0aGF0IGRvZXNuJ3QgcmVxdWlyZSB0aGUgb3RoZXIgc3ltYm9sIHRvIGJlIGRlZmluZWQuCisgICBVc2VzIG9mIHRoZSBmb3JtZXIgd2lsbCB0dXJuIGludG8gd2VhayB1c2VzIG9mIHRoZSBsYXR0ZXIsIGkuZS4sCisgICB1c2VzIHRoYXQsIGluIGNhc2UgdGhlIGxhdHRlciBpcyB1bmRlZmluZWQsIHdpbGwgbm90IGNhdXNlIGVycm9ycywKKyAgIGFuZCB3aWxsIGFkZCBpdCB0byB0aGUgc3ltYm9sIHRhYmxlIGFzIHdlYWsgdW5kZWZpbmVkLiAgSG93ZXZlciwgaWYKKyAgIHRoZSBsYXR0ZXIgaXMgcmVmZXJlbmNlZCBkaXJlY3RseSwgYSBzdHJvbmcgcmVmZXJlbmNlIHByZXZhaWxzLiAgKi8KKyNpZm5kZWYgQVNNX09VVFBVVF9XRUFLUkVGCisjaWYgZGVmaW5lZCBIQVZFX0dBU19XRUFLUkVGCisjZGVmaW5lIEFTTV9PVVRQVVRfV0VBS1JFRihGSUxFLCBERUNMLCBOQU1FLCBWQUxVRSkJCQlcCisgIGRvCQkJCQkJCQkJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICBmcHJpbnRmICgoRklMRSksICJcdC53ZWFrcmVmXHQiKTsJCQkJCVwKKyAgICAgIGFzc2VtYmxlX25hbWUgKChGSUxFKSwgKE5BTUUpKTsJCQkJCVwKKyAgICAgIGZwcmludGYgKChGSUxFKSwgIiwiKTsJCQkJCQlcCisgICAgICBhc3NlbWJsZV9uYW1lICgoRklMRSksIChWQUxVRSkpOwkJCQkJXAorICAgICAgZnByaW50ZiAoKEZJTEUpLCAiXG4iKTsJCQkJCQlcCisgICAgfQkJCQkJCQkJCVwKKyAgd2hpbGUgKDApCisjZW5kaWYKKyNlbmRpZgorCisvKiBIb3cgdG8gZW1pdCBhIC50eXBlIGRpcmVjdGl2ZS4gICovCisjaWZuZGVmIEFTTV9PVVRQVVRfVFlQRV9ESVJFQ1RJVkUKKyNpZiBkZWZpbmVkIFRZUEVfQVNNX09QICYmIGRlZmluZWQgVFlQRV9PUEVSQU5EX0ZNVAorI2RlZmluZSBBU01fT1VUUFVUX1RZUEVfRElSRUNUSVZFKFNUUkVBTSwgTkFNRSwgVFlQRSkJXAorICBkbwkJCQkJCQlcCisgICAgewkJCQkJCQlcCisgICAgICBmcHV0cyAoVFlQRV9BU01fT1AsIFNUUkVBTSk7CQkJXAorICAgICAgYXNzZW1ibGVfbmFtZSAoU1RSRUFNLCBOQU1FKTsJCQlcCisgICAgICBmcHV0cyAoIiwgIiwgU1RSRUFNKTsJCQkJXAorICAgICAgZnByaW50ZiAoU1RSRUFNLCBUWVBFX09QRVJBTkRfRk1ULCBUWVBFKTsJCVwKKyAgICAgIHB1dGMgKCdcbicsIFNUUkVBTSk7CQkJCVwKKyAgICB9CQkJCQkJCVwKKyAgd2hpbGUgKDApCisjZW5kaWYKKyNlbmRpZgorCisvKiBIb3cgdG8gZW1pdCBhIC5zaXplIGRpcmVjdGl2ZS4gICovCisjaWZuZGVmIEFTTV9PVVRQVVRfU0laRV9ESVJFQ1RJVkUKKyNpZmRlZiBTSVpFX0FTTV9PUAorI2RlZmluZSBBU01fT1VUUFVUX1NJWkVfRElSRUNUSVZFKFNUUkVBTSwgTkFNRSwgU0laRSkJXAorICBkbwkJCQkJCQlcCisgICAgewkJCQkJCQlcCisgICAgICBIT1NUX1dJREVfSU5UIHNpemVfID0gKFNJWkUpOwkJCVwKKyAgICAgIGZwdXRzIChTSVpFX0FTTV9PUCwgU1RSRUFNKTsJCQlcCisgICAgICBhc3NlbWJsZV9uYW1lIChTVFJFQU0sIE5BTUUpOwkJCVwKKyAgICAgIGZwcmludGYgKFNUUkVBTSwgIiwgIiBIT1NUX1dJREVfSU5UX1BSSU5UX0RFQyAiXG4iLCBzaXplXyk7IFwKKyAgICB9CQkJCQkJCVwKKyAgd2hpbGUgKDApCisKKyNkZWZpbmUgQVNNX09VVFBVVF9NRUFTVVJFRF9TSVpFKFNUUkVBTSwgTkFNRSkJCVwKKyAgZG8JCQkJCQkJXAorICAgIHsJCQkJCQkJXAorICAgICAgZnB1dHMgKFNJWkVfQVNNX09QLCBTVFJFQU0pOwkJCVwKKyAgICAgIGFzc2VtYmxlX25hbWUgKFNUUkVBTSwgTkFNRSk7CQkJXAorICAgICAgZnB1dHMgKCIsIC4tIiwgU1RSRUFNKTsJCQkJXAorICAgICAgYXNzZW1ibGVfbmFtZSAoU1RSRUFNLCBOQU1FKTsJCQlcCisgICAgICBwdXRjICgnXG4nLCBTVFJFQU0pOwkJCQlcCisgICAgfQkJCQkJCQlcCisgIHdoaWxlICgwKQorCisjZW5kaWYKKyNlbmRpZgorCisvKiBUaGlzIGRldGVybWluZXMgd2hldGhlciBvciBub3Qgd2Ugc3VwcG9ydCB3ZWFrIHN5bWJvbHMuICAqLworI2lmbmRlZiBTVVBQT1JUU19XRUFLCisjaWYgZGVmaW5lZCAoQVNNX1dFQUtFTl9MQUJFTCkgfHwgZGVmaW5lZCAoQVNNX1dFQUtFTl9ERUNMKQorI2RlZmluZSBTVVBQT1JUU19XRUFLIDEKKyNlbHNlCisjZGVmaW5lIFNVUFBPUlRTX1dFQUsgMAorI2VuZGlmCisjZW5kaWYKKworLyogVGhpcyBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHdlIHN1cHBvcnQgdGhlIGRpc2NyaW1pbmF0b3IKKyAgIGF0dHJpYnV0ZSBpbiB0aGUgLmxvYyBkaXJlY3RpdmUuICAqLworI2lmbmRlZiBTVVBQT1JUU19ESVNDUklNSU5BVE9SCisjaWZkZWYgSEFWRV9HQVNfRElTQ1JJTUlOQVRPUgorI2RlZmluZSBTVVBQT1JUU19ESVNDUklNSU5BVE9SIDEKKyNlbHNlCisjZGVmaW5lIFNVUFBPUlRTX0RJU0NSSU1JTkFUT1IgMAorI2VuZGlmCisjZW5kaWYKKworLyogVGhpcyBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHdlIHN1cHBvcnQgbGluay1vbmNlIHNlbWFudGljcy4gICovCisjaWZuZGVmIFNVUFBPUlRTX09ORV9PTkxZCisjaWZkZWYgTUFLRV9ERUNMX09ORV9PTkxZCisjZGVmaW5lIFNVUFBPUlRTX09ORV9PTkxZIDEKKyNlbHNlCisjZGVmaW5lIFNVUFBPUlRTX09ORV9PTkxZIDAKKyNlbmRpZgorI2VuZGlmCisKKy8qIFRoaXMgZGV0ZXJtaW5lcyB3aGV0aGVyIHdlYWsgc3ltYm9scyBtdXN0IGJlIGxlZnQgb3V0IG9mIGEgc3RhdGljCisgICBhcmNoaXZlJ3MgdGFibGUgb2YgY29udGVudHMuICBEZWZpbmluZyB0aGlzIG1hY3JvIHRvIGJlIG5vbnplcm8gaGFzCisgICB0aGUgY29uc2VxdWVuY2UgdGhhdCBjZXJ0YWluIHN5bWJvbHMgd2lsbCBub3QgYmUgbWFkZSB3ZWFrIHRoYXQKKyAgIG90aGVyd2lzZSB3b3VsZCBiZS4gIFRoZSBDKysgQUJJIHJlcXVpcmVzIHRoaXMgbWFjcm8gdG8gYmUgemVybzsKKyAgIHNlZSB0aGUgZG9jdW1lbnRhdGlvbi4gICovCisjaWZuZGVmIFRBUkdFVF9XRUFLX05PVF9JTl9BUkNISVZFX1RPQworI2RlZmluZSBUQVJHRVRfV0VBS19OT1RfSU5fQVJDSElWRV9UT0MgMAorI2VuZGlmCisKKy8qIFRoaXMgZGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB3ZSBuZWVkIGxpbmtvbmNlIHVud2luZCBpbmZvcm1hdGlvbi4gICovCisjaWZuZGVmIFRBUkdFVF9VU0VTX1dFQUtfVU5XSU5EX0lORk8KKyNkZWZpbmUgVEFSR0VUX1VTRVNfV0VBS19VTldJTkRfSU5GTyAwCisjZW5kaWYKKworLyogQnkgZGVmYXVsdCwgdGhlcmUgaXMgbm8gcHJlZml4IG9uIHVzZXItZGVmaW5lZCBzeW1ib2xzLiAgKi8KKyNpZm5kZWYgVVNFUl9MQUJFTF9QUkVGSVgKKyNkZWZpbmUgVVNFUl9MQUJFTF9QUkVGSVggIiIKKyNlbmRpZgorCisvKiBJZiB0aGUgdGFyZ2V0IHN1cHBvcnRzIHdlYWsgc3ltYm9scywgZGVmaW5lIFRBUkdFVF9BVFRSSUJVVEVfV0VBSyB0bworICAgcHJvdmlkZSBhIHdlYWsgYXR0cmlidXRlLiAgRWxzZSBkZWZpbmUgaXQgdG8gbm90aGluZy4KKworICAgVGhpcyB3b3VsZCBub3JtYWxseSBiZWxvbmcgaW4gYW5zaWRlY2wuaCwgYnV0IFNVUFBPUlRTX1dFQUsgaXMKKyAgIG5vdCBhdmFpbGFibGUgYXQgdGhhdCB0aW1lLgorCisgICBOb3RlLCB0aGlzIGlzIG9ubHkgZm9yIHVzZSBieSB0YXJnZXQgZmlsZXMgd2hpY2ggd2Uga25vdyBhcmUgdG8gYmUKKyAgIGNvbXBpbGVkIGJ5IEdDQy4gICovCisjaWZuZGVmIFRBUkdFVF9BVFRSSUJVVEVfV0VBSworIyBpZiBTVVBQT1JUU19XRUFLCisjICBkZWZpbmUgVEFSR0VUX0FUVFJJQlVURV9XRUFLIF9fYXR0cmlidXRlX18gKCh3ZWFrKSkKKyMgZWxzZQorIyAgZGVmaW5lIFRBUkdFVF9BVFRSSUJVVEVfV0VBSworIyBlbmRpZgorI2VuZGlmCisKKy8qIERldGVybWluZXMgd2hldGhlciB3ZSBtYXkgdXNlIGNvbW1vbiBzeW1ib2xzIHRvIHJlcHJlc2VudCBvbmUtb25seQorICAgc2VtYW50aWNzIChhLmsuYS4gInZhZ3VlIGxpbmthZ2UiKS4gICovCisjaWZuZGVmIFVTRV9DT01NT05fRk9SX09ORV9PTkxZCisjIGRlZmluZSBVU0VfQ09NTU9OX0ZPUl9PTkVfT05MWSAxCisjZW5kaWYKKworLyogQnkgZGVmYXVsdCB3ZSBjYW4gYXNzdW1lIHRoYXQgYWxsIGdsb2JhbCBzeW1ib2xzIGFyZSBpbiBvbmUgbmFtZXNwYWNlLAorICAgYWNyb3NzIGFsbCBzaGFyZWQgbGlicmFyaWVzLiAgKi8KKyNpZm5kZWYgTVVMVElQTEVfU1lNQk9MX1NQQUNFUworIyBkZWZpbmUgTVVMVElQTEVfU1lNQk9MX1NQQUNFUyAwCisjZW5kaWYKKworLyogSWYgdGhlIHRhcmdldCBzdXBwb3J0cyBpbml0X3ByaW9yaXR5IEMrKyBhdHRyaWJ1dGUsIGdpdmUKKyAgIFNVUFBPUlRTX0lOSVRfUFJJT1JJVFkgYSBub256ZXJvIHZhbHVlLiAgKi8KKyNpZm5kZWYgU1VQUE9SVFNfSU5JVF9QUklPUklUWQorI2RlZmluZSBTVVBQT1JUU19JTklUX1BSSU9SSVRZIDEKKyNlbmRpZiAvKiBTVVBQT1JUU19JTklUX1BSSU9SSVRZICovCisKKy8qIElmIGR1cGxpY2F0ZSBsaWJyYXJ5IHNlYXJjaCBkaXJlY3RvcmllcyBjYW4gYmUgcmVtb3ZlZCBmcm9tIGEKKyAgIGxpbmtlciBjb21tYW5kIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGxpbmtlcidzIHNlbWFudGljcywgZ2l2ZSB0aGlzCisgICBzeW1ib2wgYSBub256ZXJvLiAgKi8KKyNpZm5kZWYgTElOS19FTElNSU5BVEVfRFVQTElDQVRFX0xESVJFQ1RPUklFUworI2RlZmluZSBMSU5LX0VMSU1JTkFURV9EVVBMSUNBVEVfTERJUkVDVE9SSUVTIDAKKyNlbmRpZiAvKiBMSU5LX0VMSU1JTkFURV9EVVBMSUNBVEVfTERJUkVDVE9SSUVTICovCisKKy8qIElmIHdlIGhhdmUgYSBkZWZpbml0aW9uIG9mIElOQ09NSU5HX1JFVFVSTl9BRERSX1JUWCwgYXNzdW1lIHRoYXQKKyAgIHRoZSByZXN0IG9mIHRoZSBEV0FSRiAyIGZyYW1lIHVud2luZCBzdXBwb3J0IGlzIGFsc28gcHJvdmlkZWQuICAqLworI2lmICFkZWZpbmVkIChEV0FSRjJfVU5XSU5EX0lORk8pICYmIGRlZmluZWQgKElOQ09NSU5HX1JFVFVSTl9BRERSX1JUWCkgXAorICAgICYmICFkZWZpbmVkIChUQVJHRVRfVU5XSU5EX0lORk8pCisjZGVmaW5lIERXQVJGMl9VTldJTkRfSU5GTyAxCisjZW5kaWYKKworLyogSWYgd2UgaGF2ZSBuYW1lZCBzZWN0aW9ucywgYW5kIHdlJ3JlIHVzaW5nIGNydHN0dWZmIHRvIHJ1biBjdG9ycywKKyAgIHVzZSB0aGVtIGZvciByZWdpc3RlcmluZyBlaCBmcmFtZSBpbmZvcm1hdGlvbi4gICovCisjaWYgZGVmaW5lZCAoVEFSR0VUX0FTTV9OQU1FRF9TRUNUSU9OKSAmJiBEV0FSRjJfVU5XSU5EX0lORk8gXAorICAgICYmICFkZWZpbmVkKEVIX0ZSQU1FX0lOX0RBVEFfU0VDVElPTikKKyNpZm5kZWYgRUhfRlJBTUVfU0VDVElPTl9OQU1FCisjZGVmaW5lIEVIX0ZSQU1FX1NFQ1RJT05fTkFNRSAiLmVoX2ZyYW1lIgorI2VuZGlmCisjZW5kaWYKKworLyogT24gbWFueSBzeXN0ZW1zLCBkaWZmZXJlbnQgRUggdGFibGUgZW5jb2RpbmdzIGFyZSB1c2VkIHVuZGVyCisgICBkaWZmZXJlbmNlIGNpcmN1bXN0YW5jZXMuICBTb21lIHdpbGwgcmVxdWlyZSBydW50aW1lIHJlbG9jYXRpb25zOworICAgc29tZSB3aWxsIG5vdC4gIEZvciB0aG9zZSB0aGF0IGRvIG5vdCByZXF1aXJlIHJ1bnRpbWUgcmVsb2NhdGlvbnMsCisgICB3ZSB3b3VsZCBsaWtlIHRvIG1ha2UgdGhlIHRhYmxlIHJlYWQtb25seS4gIEhvd2V2ZXIsIHNpbmNlIHRoZQorICAgcmVhZC1vbmx5IHRhYmxlcyBtYXkgbmVlZCB0byBiZSBjb21iaW5lZCB3aXRoIHJlYWQtd3JpdGUgdGFibGVzCisgICB0aGF0IGRvIHJlcXVpcmUgcnVudGltZSByZWxvY2F0aW9uLCBpdCBpcyBub3Qgc2FmZSB0byBtYWtlIHRoZQorICAgdGFibGVzIHJlYWQtb25seSB1bmxlc3MgdGhlIGxpbmtlciB3aWxsIG1lcmdlIHJlYWQtb25seSBhbmQKKyAgIHJlYWQtd3JpdGUgc2VjdGlvbnMgaW50byBhIHNpbmdsZSByZWFkLXdyaXRlIHNlY3Rpb24uICBJZiB5b3VyCisgICBsaW5rZXIgZG9lcyBub3QgaGF2ZSB0aGlzIGFiaWxpdHksIGJ1dCB5b3VyIHN5c3RlbSBpcyBzdWNoIHRoYXQgbm8KKyAgIGVuY29kaW5nIHVzZWQgd2l0aCBub24tUElDIGNvZGUgd2lsbCBldmVyIHJlcXVpcmUgYSBydW50aW1lCisgICByZWxvY2F0aW9uLCB0aGVuIHlvdSBjYW4gZGVmaW5lIEVIX1RBQkxFU19DQU5fQkVfUkVBRF9PTkxZIHRvIDEgaW4KKyAgIHlvdXIgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gZmlsZS4gICovCisjaWZuZGVmIEVIX1RBQkxFU19DQU5fQkVfUkVBRF9PTkxZCisjaWZkZWYgSEFWRV9MRF9ST19SV19TRUNUSU9OX01JWElORworI2RlZmluZSBFSF9UQUJMRVNfQ0FOX0JFX1JFQURfT05MWSAxCisjZWxzZQorI2RlZmluZSBFSF9UQUJMRVNfQ0FOX0JFX1JFQURfT05MWSAwCisjZW5kaWYKKyNlbmRpZgorCisvKiBJZiB3ZSBoYXZlIG5hbWVkIHNlY3Rpb24gYW5kIHdlIHN1cHBvcnQgd2VhayBzeW1ib2xzLCB0aGVuIHVzZSB0aGUKKyAgIC5qY3Igc2VjdGlvbiBmb3IgcmVjb3JkaW5nIGphdmEgY2xhc3NlcyB3aGljaCBuZWVkIHRvIGJlIHJlZ2lzdGVyZWQKKyAgIGF0IHByb2dyYW0gc3RhcnQtdXAgdGltZS4gICovCisjaWYgZGVmaW5lZCAoVEFSR0VUX0FTTV9OQU1FRF9TRUNUSU9OKSAmJiBTVVBQT1JUU19XRUFLCisjaWZuZGVmIEpDUl9TRUNUSU9OX05BTUUKKyNkZWZpbmUgSkNSX1NFQ1RJT05fTkFNRSAiLmpjciIKKyNlbmRpZgorI2VuZGlmCisKKy8qIFRoaXMgZGVjaXNpb24gdG8gdXNlIGEgLmpjciBzZWN0aW9uIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGRlZmluaW5nCisgICBVU0VfSkNSX1NFQ1RJT04gdG8gMCBpbiB0YXJnZXQgZmlsZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGlmIHRhcmdldAorICAgY2FuIGRlZmluZSBKQ1JfU0VDVElPTl9OQU1FIGJ1dCBkb2VzIG5vdCBoYXZlIGNydHN0dWZmIG9yCisgICBsaW5rZXIgc3VwcG9ydCBmb3IgLmpjciBzZWN0aW9uLiAgKi8KKyNpZm5kZWYgVEFSR0VUX1VTRV9KQ1JfU0VDVElPTgorI2lmZGVmIEpDUl9TRUNUSU9OX05BTUUKKyNkZWZpbmUgVEFSR0VUX1VTRV9KQ1JfU0VDVElPTiAxCisjZWxzZQorI2RlZmluZSBUQVJHRVRfVVNFX0pDUl9TRUNUSU9OIDAKKyNlbmRpZgorI2VuZGlmCisKKy8qIE51bWJlciBvZiBoYXJkd2FyZSByZWdpc3RlcnMgdGhhdCBnbyBpbnRvIHRoZSBEV0FSRi0yIHVud2luZCBpbmZvLgorICAgSWYgbm90IGRlZmluZWQsIGVxdWFscyBGSVJTVF9QU0VVRE9fUkVHSVNURVIgICovCisKKyNpZm5kZWYgRFdBUkZfRlJBTUVfUkVHSVNURVJTCisjZGVmaW5lIERXQVJGX0ZSQU1FX1JFR0lTVEVSUyBGSVJTVF9QU0VVRE9fUkVHSVNURVIKKyNlbmRpZgorCisvKiBIb3cgdG8gcmVudW1iZXIgcmVnaXN0ZXJzIGZvciBkYnggYW5kIGdkYi4gIElmIG5vdCBkZWZpbmVkLCBhc3N1bWUKKyAgIG5vIHJlbnVtYmVyaW5nIGlzIG5lY2Vzc2FyeS4gICovCisKKyNpZm5kZWYgREJYX1JFR0lTVEVSX05VTUJFUgorI2RlZmluZSBEQlhfUkVHSVNURVJfTlVNQkVSKFJFR05PKSAoUkVHTk8pCisjZW5kaWYKKworLyogRGVmYXVsdCBzaXplcyBmb3IgYmFzZSBDIHR5cGVzLiAgSWYgdGhlIHNpemVzIGFyZSBkaWZmZXJlbnQgZm9yCisgICB5b3VyIHRhcmdldCwgeW91IHNob3VsZCBvdmVycmlkZSB0aGVzZSB2YWx1ZXMgYnkgZGVmaW5pbmcgdGhlCisgICBhcHByb3ByaWF0ZSBzeW1ib2xzIGluIHlvdXIgdG0uaCBmaWxlLiAgKi8KKworI2lmbmRlZiBCSVRTX1BFUl9VTklUCisjZGVmaW5lIEJJVFNfUEVSX1VOSVQgOAorI2VuZGlmCisKKyNpZm5kZWYgQklUU19QRVJfV09SRAorI2RlZmluZSBCSVRTX1BFUl9XT1JEIChCSVRTX1BFUl9VTklUICogVU5JVFNfUEVSX1dPUkQpCisjZW5kaWYKKworI2lmbmRlZiBDSEFSX1RZUEVfU0laRQorI2RlZmluZSBDSEFSX1RZUEVfU0laRSBCSVRTX1BFUl9VTklUCisjZW5kaWYKKworI2lmbmRlZiBCT09MX1RZUEVfU0laRQorLyogYGJvb2wnIGhhcyBzaXplIGFuZCBhbGlnbm1lbnQgYDEnLCBvbiBhbG1vc3QgYWxsIHBsYXRmb3Jtcy4gICovCisjZGVmaW5lIEJPT0xfVFlQRV9TSVpFIENIQVJfVFlQRV9TSVpFCisjZW5kaWYKKworI2lmbmRlZiBTSE9SVF9UWVBFX1NJWkUKKyNkZWZpbmUgU0hPUlRfVFlQRV9TSVpFIChCSVRTX1BFUl9VTklUICogTUlOICgoVU5JVFNfUEVSX1dPUkQgKyAxKSAvIDIsIDIpKQorI2VuZGlmCisKKyNpZm5kZWYgSU5UX1RZUEVfU0laRQorI2RlZmluZSBJTlRfVFlQRV9TSVpFIEJJVFNfUEVSX1dPUkQKKyNlbmRpZgorCisjaWZuZGVmIExPTkdfVFlQRV9TSVpFCisjZGVmaW5lIExPTkdfVFlQRV9TSVpFIEJJVFNfUEVSX1dPUkQKKyNlbmRpZgorCisjaWZuZGVmIExPTkdfTE9OR19UWVBFX1NJWkUKKyNkZWZpbmUgTE9OR19MT05HX1RZUEVfU0laRSAoQklUU19QRVJfV09SRCAqIDIpCisjZW5kaWYKKworI2lmbmRlZiBXQ0hBUl9UWVBFX1NJWkUKKyNkZWZpbmUgV0NIQVJfVFlQRV9TSVpFIElOVF9UWVBFX1NJWkUKKyNlbmRpZgorCisjaWZuZGVmIEZMT0FUX1RZUEVfU0laRQorI2RlZmluZSBGTE9BVF9UWVBFX1NJWkUgQklUU19QRVJfV09SRAorI2VuZGlmCisKKyNpZm5kZWYgRE9VQkxFX1RZUEVfU0laRQorI2RlZmluZSBET1VCTEVfVFlQRV9TSVpFIChCSVRTX1BFUl9XT1JEICogMikKKyNlbmRpZgorCisjaWZuZGVmIExPTkdfRE9VQkxFX1RZUEVfU0laRQorI2RlZmluZSBMT05HX0RPVUJMRV9UWVBFX1NJWkUgKEJJVFNfUEVSX1dPUkQgKiAyKQorI2VuZGlmCisKKyNpZm5kZWYgREVDSU1BTDMyX1RZUEVfU0laRQorI2RlZmluZSBERUNJTUFMMzJfVFlQRV9TSVpFIDMyCisjZW5kaWYKKworI2lmbmRlZiBERUNJTUFMNjRfVFlQRV9TSVpFCisjZGVmaW5lIERFQ0lNQUw2NF9UWVBFX1NJWkUgNjQKKyNlbmRpZgorCisjaWZuZGVmIERFQ0lNQUwxMjhfVFlQRV9TSVpFCisjZGVmaW5lIERFQ0lNQUwxMjhfVFlQRV9TSVpFIDEyOAorI2VuZGlmCisKKyNpZm5kZWYgU0hPUlRfRlJBQ1RfVFlQRV9TSVpFCisjZGVmaW5lIFNIT1JUX0ZSQUNUX1RZUEVfU0laRSBCSVRTX1BFUl9VTklUCisjZW5kaWYKKworI2lmbmRlZiBGUkFDVF9UWVBFX1NJWkUKKyNkZWZpbmUgRlJBQ1RfVFlQRV9TSVpFIChCSVRTX1BFUl9VTklUICogMikKKyNlbmRpZgorCisjaWZuZGVmIExPTkdfRlJBQ1RfVFlQRV9TSVpFCisjZGVmaW5lIExPTkdfRlJBQ1RfVFlQRV9TSVpFIChCSVRTX1BFUl9VTklUICogNCkKKyNlbmRpZgorCisjaWZuZGVmIExPTkdfTE9OR19GUkFDVF9UWVBFX1NJWkUKKyNkZWZpbmUgTE9OR19MT05HX0ZSQUNUX1RZUEVfU0laRSAoQklUU19QRVJfVU5JVCAqIDgpCisjZW5kaWYKKworI2lmbmRlZiBTSE9SVF9BQ0NVTV9UWVBFX1NJWkUKKyNkZWZpbmUgU0hPUlRfQUNDVU1fVFlQRV9TSVpFIChTSE9SVF9GUkFDVF9UWVBFX1NJWkUgKiAyKQorI2VuZGlmCisKKyNpZm5kZWYgQUNDVU1fVFlQRV9TSVpFCisjZGVmaW5lIEFDQ1VNX1RZUEVfU0laRSAoRlJBQ1RfVFlQRV9TSVpFICogMikKKyNlbmRpZgorCisjaWZuZGVmIExPTkdfQUNDVU1fVFlQRV9TSVpFCisjZGVmaW5lIExPTkdfQUNDVU1fVFlQRV9TSVpFIChMT05HX0ZSQUNUX1RZUEVfU0laRSAqIDIpCisjZW5kaWYKKworI2lmbmRlZiBMT05HX0xPTkdfQUNDVU1fVFlQRV9TSVpFCisjZGVmaW5lIExPTkdfTE9OR19BQ0NVTV9UWVBFX1NJWkUgKExPTkdfTE9OR19GUkFDVF9UWVBFX1NJWkUgKiAyKQorI2VuZGlmCisKKy8qIFdlIGxldCB0bS5oIG92ZXJyaWRlIHRoZSB0eXBlcyB1c2VkIGhlcmUsIHRvIGhhbmRsZSB0cml2aWFsIGRpZmZlcmVuY2VzCisgICBzdWNoIGFzIHRoZSBjaG9pY2Ugb2YgdW5zaWduZWQgaW50IG9yIGxvbmcgdW5zaWduZWQgaW50IGZvciBzaXplX3QuCisgICBXaGVuIG1hY2hpbmVzIHN0YXJ0IG5lZWRpbmcgbm9udHJpdmlhbCBkaWZmZXJlbmNlcyBpbiB0aGUgc2l6ZSB0eXBlLAorICAgaXQgd291bGQgYmUgYmVzdCB0byBkbyBzb21ldGhpbmcgaGVyZSB0byBmaWd1cmUgb3V0IGF1dG9tYXRpY2FsbHkKKyAgIGZyb20gb3RoZXIgaW5mb3JtYXRpb24gd2hhdCB0eXBlIHRvIHVzZS4gICovCisKKyNpZm5kZWYgU0laRV9UWVBFCisjZGVmaW5lIFNJWkVfVFlQRSAibG9uZyB1bnNpZ25lZCBpbnQiCisjZW5kaWYKKworI2lmbmRlZiBQSURfVFlQRQorI2RlZmluZSBQSURfVFlQRSAiaW50IgorI2VuZGlmCisKKy8qIElmIEdDQyBrbm93cyB0aGUgZXhhY3QgdWludF9sZWFzdDE2X3QgYW5kIHVpbnRfbGVhc3QzMl90IHR5cGVzIGZyb20KKyAgIDxzdGRpbnQuaD4sIHVzZSB0aGVtIGZvciBjaGFyMTZfdCBhbmQgY2hhcjMyX3QuICBPdGhlcndpc2UsIHVzZQorICAgdGhlc2UgZ3Vlc3NlczsgZ2V0dGluZyB0aGUgd3JvbmcgdHlwZSBvZiBhIGdpdmVuIHdpZHRoIHdpbGwgbm90CisgICBhZmZlY3QgQysrIG5hbWUgbWFuZ2xpbmcgYmVjYXVzZSBpbiBDKysgdGhlc2UgYXJlIGRpc3RpbmN0IHR5cGVzCisgICBub3QgdHlwZWRlZnMuICAqLworCisjaWZkZWYgVUlOVF9MRUFTVDE2X1RZUEUKKyNkZWZpbmUgQ0hBUjE2X1RZUEUgVUlOVF9MRUFTVDE2X1RZUEUKKyNlbHNlCisjZGVmaW5lIENIQVIxNl9UWVBFICJzaG9ydCB1bnNpZ25lZCBpbnQiCisjZW5kaWYKKworI2lmZGVmIFVJTlRfTEVBU1QzMl9UWVBFCisjZGVmaW5lIENIQVIzMl9UWVBFIFVJTlRfTEVBU1QzMl9UWVBFCisjZWxzZQorI2RlZmluZSBDSEFSMzJfVFlQRSAidW5zaWduZWQgaW50IgorI2VuZGlmCisKKyNpZm5kZWYgV0NIQVJfVFlQRQorI2RlZmluZSBXQ0hBUl9UWVBFICJpbnQiCisjZW5kaWYKKworLyogV0NIQVJfVFlQRSBnZXRzIG92ZXJyaWRkZW4gYnkgLWZzaG9ydC13Y2hhci4gICovCisjZGVmaW5lIE1PRElGSUVEX1dDSEFSX1RZUEUgXAorCShmbGFnX3Nob3J0X3djaGFyID8gInNob3J0IHVuc2lnbmVkIGludCIgOiBXQ0hBUl9UWVBFKQorCisjaWZuZGVmIFBUUkRJRkZfVFlQRQorI2RlZmluZSBQVFJESUZGX1RZUEUgImxvbmcgaW50IgorI2VuZGlmCisKKyNpZm5kZWYgV0lOVF9UWVBFCisjZGVmaW5lIFdJTlRfVFlQRSAidW5zaWduZWQgaW50IgorI2VuZGlmCisKKyNpZm5kZWYgSU5UTUFYX1RZUEUKKyNkZWZpbmUgSU5UTUFYX1RZUEUgKChJTlRfVFlQRV9TSVpFID09IExPTkdfTE9OR19UWVBFX1NJWkUpCVwKKwkJICAgICA/ICJpbnQiCQkJCQlcCisJCSAgICAgOiAoKExPTkdfVFlQRV9TSVpFID09IExPTkdfTE9OR19UWVBFX1NJWkUpCVwKKwkJCT8gImxvbmcgaW50IgkJCQlcCisJCQk6ICJsb25nIGxvbmcgaW50IikpCisjZW5kaWYKKworI2lmbmRlZiBVSU5UTUFYX1RZUEUKKyNkZWZpbmUgVUlOVE1BWF9UWVBFICgoSU5UX1RZUEVfU0laRSA9PSBMT05HX0xPTkdfVFlQRV9TSVpFKQlcCisJCSAgICAgPyAidW5zaWduZWQgaW50IgkJCQlcCisJCSAgICAgOiAoKExPTkdfVFlQRV9TSVpFID09IExPTkdfTE9OR19UWVBFX1NJWkUpCVwKKwkJCT8gImxvbmcgdW5zaWduZWQgaW50IgkJCVwKKwkJCTogImxvbmcgbG9uZyB1bnNpZ25lZCBpbnQiKSkKKyNlbmRpZgorCisKKy8qIFRoZXJlIGFyZSBubyBkZWZhdWx0IGRlZmluaXRpb25zIG9mIHRoZXNlIDxzdGRpbnQuaD4gdHlwZXMuICAqLworCisjaWZuZGVmIFNJR19BVE9NSUNfVFlQRQorI2RlZmluZSBTSUdfQVRPTUlDX1RZUEUgKChjb25zdCBjaGFyICopIE5VTEwpCisjZW5kaWYKKworI2lmbmRlZiBJTlQ4X1RZUEUKKyNkZWZpbmUgSU5UOF9UWVBFICgoY29uc3QgY2hhciAqKSBOVUxMKQorI2VuZGlmCisKKyNpZm5kZWYgSU5UMTZfVFlQRQorI2RlZmluZSBJTlQxNl9UWVBFICgoY29uc3QgY2hhciAqKSBOVUxMKQorI2VuZGlmCisKKyNpZm5kZWYgSU5UMzJfVFlQRQorI2RlZmluZSBJTlQzMl9UWVBFICgoY29uc3QgY2hhciAqKSBOVUxMKQorI2VuZGlmCisKKyNpZm5kZWYgSU5UNjRfVFlQRQorI2RlZmluZSBJTlQ2NF9UWVBFICgoY29uc3QgY2hhciAqKSBOVUxMKQorI2VuZGlmCisKKyNpZm5kZWYgVUlOVDhfVFlQRQorI2RlZmluZSBVSU5UOF9UWVBFICgoY29uc3QgY2hhciAqKSBOVUxMKQorI2VuZGlmCisKKyNpZm5kZWYgVUlOVDE2X1RZUEUKKyNkZWZpbmUgVUlOVDE2X1RZUEUgKChjb25zdCBjaGFyICopIE5VTEwpCisjZW5kaWYKKworI2lmbmRlZiBVSU5UMzJfVFlQRQorI2RlZmluZSBVSU5UMzJfVFlQRSAoKGNvbnN0IGNoYXIgKikgTlVMTCkKKyNlbmRpZgorCisjaWZuZGVmIFVJTlQ2NF9UWVBFCisjZGVmaW5lIFVJTlQ2NF9UWVBFICgoY29uc3QgY2hhciAqKSBOVUxMKQorI2VuZGlmCisKKyNpZm5kZWYgSU5UX0xFQVNUOF9UWVBFCisjZGVmaW5lIElOVF9MRUFTVDhfVFlQRSAoKGNvbnN0IGNoYXIgKikgTlVMTCkKKyNlbmRpZgorCisjaWZuZGVmIElOVF9MRUFTVDE2X1RZUEUKKyNkZWZpbmUgSU5UX0xFQVNUMTZfVFlQRSAoKGNvbnN0IGNoYXIgKikgTlVMTCkKKyNlbmRpZgorCisjaWZuZGVmIElOVF9MRUFTVDMyX1RZUEUKKyNkZWZpbmUgSU5UX0xFQVNUMzJfVFlQRSAoKGNvbnN0IGNoYXIgKikgTlVMTCkKKyNlbmRpZgorCisjaWZuZGVmIElOVF9MRUFTVDY0X1RZUEUKKyNkZWZpbmUgSU5UX0xFQVNUNjRfVFlQRSAoKGNvbnN0IGNoYXIgKikgTlVMTCkKKyNlbmRpZgorCisjaWZuZGVmIFVJTlRfTEVBU1Q4X1RZUEUKKyNkZWZpbmUgVUlOVF9MRUFTVDhfVFlQRSAoKGNvbnN0IGNoYXIgKikgTlVMTCkKKyNlbmRpZgorCisjaWZuZGVmIFVJTlRfTEVBU1QxNl9UWVBFCisjZGVmaW5lIFVJTlRfTEVBU1QxNl9UWVBFICgoY29uc3QgY2hhciAqKSBOVUxMKQorI2VuZGlmCisKKyNpZm5kZWYgVUlOVF9MRUFTVDMyX1RZUEUKKyNkZWZpbmUgVUlOVF9MRUFTVDMyX1RZUEUgKChjb25zdCBjaGFyICopIE5VTEwpCisjZW5kaWYKKworI2lmbmRlZiBVSU5UX0xFQVNUNjRfVFlQRQorI2RlZmluZSBVSU5UX0xFQVNUNjRfVFlQRSAoKGNvbnN0IGNoYXIgKikgTlVMTCkKKyNlbmRpZgorCisjaWZuZGVmIElOVF9GQVNUOF9UWVBFCisjZGVmaW5lIElOVF9GQVNUOF9UWVBFICgoY29uc3QgY2hhciAqKSBOVUxMKQorI2VuZGlmCisKKyNpZm5kZWYgSU5UX0ZBU1QxNl9UWVBFCisjZGVmaW5lIElOVF9GQVNUMTZfVFlQRSAoKGNvbnN0IGNoYXIgKikgTlVMTCkKKyNlbmRpZgorCisjaWZuZGVmIElOVF9GQVNUMzJfVFlQRQorI2RlZmluZSBJTlRfRkFTVDMyX1RZUEUgKChjb25zdCBjaGFyICopIE5VTEwpCisjZW5kaWYKKworI2lmbmRlZiBJTlRfRkFTVDY0X1RZUEUKKyNkZWZpbmUgSU5UX0ZBU1Q2NF9UWVBFICgoY29uc3QgY2hhciAqKSBOVUxMKQorI2VuZGlmCisKKyNpZm5kZWYgVUlOVF9GQVNUOF9UWVBFCisjZGVmaW5lIFVJTlRfRkFTVDhfVFlQRSAoKGNvbnN0IGNoYXIgKikgTlVMTCkKKyNlbmRpZgorCisjaWZuZGVmIFVJTlRfRkFTVDE2X1RZUEUKKyNkZWZpbmUgVUlOVF9GQVNUMTZfVFlQRSAoKGNvbnN0IGNoYXIgKikgTlVMTCkKKyNlbmRpZgorCisjaWZuZGVmIFVJTlRfRkFTVDMyX1RZUEUKKyNkZWZpbmUgVUlOVF9GQVNUMzJfVFlQRSAoKGNvbnN0IGNoYXIgKikgTlVMTCkKKyNlbmRpZgorCisjaWZuZGVmIFVJTlRfRkFTVDY0X1RZUEUKKyNkZWZpbmUgVUlOVF9GQVNUNjRfVFlQRSAoKGNvbnN0IGNoYXIgKikgTlVMTCkKKyNlbmRpZgorCisjaWZuZGVmIElOVFBUUl9UWVBFCisjZGVmaW5lIElOVFBUUl9UWVBFICgoY29uc3QgY2hhciAqKSBOVUxMKQorI2VuZGlmCisKKyNpZm5kZWYgVUlOVFBUUl9UWVBFCisjZGVmaW5lIFVJTlRQVFJfVFlQRSAoKGNvbnN0IGNoYXIgKikgTlVMTCkKKyNlbmRpZgorCisvKiBXaWR0aCBpbiBiaXRzIG9mIGEgcG9pbnRlci4gIE1pbmQgdGhlIHZhbHVlIG9mIHRoZSBtYWNybyBgUG1vZGUnLiAgKi8KKyNpZm5kZWYgUE9JTlRFUl9TSVpFCisjZGVmaW5lIFBPSU5URVJfU0laRSBCSVRTX1BFUl9XT1JECisjZW5kaWYKKworI2lmbmRlZiBQSUNfT0ZGU0VUX1RBQkxFX1JFR05VTQorI2RlZmluZSBQSUNfT0ZGU0VUX1RBQkxFX1JFR05VTSBJTlZBTElEX1JFR05VTQorI2VuZGlmCisKKyNpZm5kZWYgVEFSR0VUX0RMTElNUE9SVF9ERUNMX0FUVFJJQlVURVMKKyNkZWZpbmUgVEFSR0VUX0RMTElNUE9SVF9ERUNMX0FUVFJJQlVURVMgMAorI2VuZGlmCisKKyNpZm5kZWYgVEFSR0VUX0RFQ0xTUEVDCisjaWYgVEFSR0VUX0RMTElNUE9SVF9ERUNMX0FUVFJJQlVURVMKKy8qIElmIHRoZSB0YXJnZXQgc3VwcG9ydHMgdGhlICJkbGxpbXBvcnQiIGF0dHJpYnV0ZSwgdXNlcnMgYXJlCisgICBwcm9iYWJseSB1c2VkIHRvIHRoZSAiX19kZWNsc3BlYyIgc3ludGF4LiAgKi8KKyNkZWZpbmUgVEFSR0VUX0RFQ0xTUEVDIDEKKyNlbHNlCisjZGVmaW5lIFRBUkdFVF9ERUNMU1BFQyAwCisjZW5kaWYKKyNlbmRpZgorCisvKiBCeSBkZWZhdWx0LCB0aGUgcHJlcHJvY2Vzc29yIHNob3VsZCBiZSBpbnZva2VkIHRoZSBzYW1lIHdheSBpbiBDKysKKyAgIGFzIGluIEMuICAqLworI2lmbmRlZiBDUExVU1BMVVNfQ1BQX1NQRUMKKyNpZmRlZiBDUFBfU1BFQworI2RlZmluZSBDUExVU1BMVVNfQ1BQX1NQRUMgQ1BQX1NQRUMKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgQUNDVU1VTEFURV9PVVRHT0lOR19BUkdTCisjZGVmaW5lIEFDQ1VNVUxBVEVfT1VUR09JTkdfQVJHUyAwCisjZW5kaWYKKworLyogU3VwcGx5IGEgZGVmYXVsdCBkZWZpbml0aW9uIGZvciBQVVNIX0FSR1MuICAqLworI2lmbmRlZiBQVVNIX0FSR1MKKyNpZmRlZiBQVVNIX1JPVU5ESU5HCisjZGVmaW5lIFBVU0hfQVJHUwkhQUNDVU1VTEFURV9PVVRHT0lOR19BUkdTCisjZWxzZQorI2RlZmluZSBQVVNIX0FSR1MJMAorI2VuZGlmCisjZW5kaWYKKworLyogRGVjaWRlIHdoZXRoZXIgYSBmdW5jdGlvbidzIGFyZ3VtZW50cyBzaG91bGQgYmUgcHJvY2Vzc2VkCisgICBmcm9tIGZpcnN0IHRvIGxhc3Qgb3IgZnJvbSBsYXN0IHRvIGZpcnN0LgorCisgICBUaGV5IHNob3VsZCBpZiB0aGUgc3RhY2sgYW5kIGFyZ3MgZ3JvdyBpbiBvcHBvc2l0ZSBkaXJlY3Rpb25zLCBidXQKKyAgIG9ubHkgaWYgd2UgaGF2ZSBwdXNoIGluc25zLiAgKi8KKworI2lmZGVmIFBVU0hfUk9VTkRJTkcKKworI2lmbmRlZiBQVVNIX0FSR1NfUkVWRVJTRUQKKyNpZiBkZWZpbmVkIChTVEFDS19HUk9XU19ET1dOV0FSRCkgIT0gZGVmaW5lZCAoQVJHU19HUk9XX0RPV05XQVJEKQorI2RlZmluZSBQVVNIX0FSR1NfUkVWRVJTRUQgIFBVU0hfQVJHUworI2VuZGlmCisjZW5kaWYKKworI2VuZGlmCisKKyNpZm5kZWYgUFVTSF9BUkdTX1JFVkVSU0VECisjZGVmaW5lIFBVU0hfQVJHU19SRVZFUlNFRCAwCisjZW5kaWYKKworLyogRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGFsaWdubWVudCAoaW4gYml0cykgYSBDIGNvbmZvcm1hbnQgbWFsbG9jIGhhcyB0bworICAgcHJvdmlkZS4gVGhpcyBkZWZhdWx0IGlzIGludGVuZGVkIHRvIGJlIHNhZmUgYW5kIGFsd2F5cyBjb3JyZWN0LiAgKi8KKyNpZm5kZWYgTUFMTE9DX0FCSV9BTElHTk1FTlQKKyNkZWZpbmUgTUFMTE9DX0FCSV9BTElHTk1FTlQgQklUU19QRVJfV09SRAorI2VuZGlmCisKKy8qIElmIFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWSBpcyBub3QgZGVmaW5lZCwgc2V0IGl0IHRvIFNUQUNLX0JPVU5EQVJZLgorICAgU1RBQ0tfQk9VTkRBUlkgaXMgcmVxdWlyZWQuICAqLworI2lmbmRlZiBQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlkKKyNkZWZpbmUgUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZIFNUQUNLX0JPVU5EQVJZCisjZW5kaWYKKworLyogU2V0IElOQ09NSU5HX1NUQUNLX0JPVU5EQVJZIHRvIFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWSBpZiBpdCBpcyBub3QKKyAgIGRlZmluZWQuICAqLworI2lmbmRlZiBJTkNPTUlOR19TVEFDS19CT1VOREFSWQorI2RlZmluZSBJTkNPTUlOR19TVEFDS19CT1VOREFSWSBQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlkKKyNlbmRpZgorCisjaWZuZGVmIFRBUkdFVF9ERUZBVUxUX1BBQ0tfU1RSVUNUCisjZGVmaW5lIFRBUkdFVF9ERUZBVUxUX1BBQ0tfU1RSVUNUIDAKKyNlbmRpZgorCisvKiBCeSBkZWZhdWx0LCB0aGUgQysrIGNvbXBpbGVyIHdpbGwgdXNlIGZ1bmN0aW9uIGFkZHJlc3NlcyBpbiB0aGUKKyAgIHZ0YWJsZSBlbnRyaWVzLiAgU2V0dGluZyB0aGlzIG5vbnplcm8gdGVsbHMgdGhlIGNvbXBpbGVyIHRvIHVzZQorICAgZnVuY3Rpb24gZGVzY3JpcHRvcnMgaW5zdGVhZC4gIFRoZSB2YWx1ZSBvZiB0aGlzIG1hY3JvIHNheXMgaG93CisgICBtYW55IHdvcmRzIHdpZGUgdGhlIGRlc2NyaXB0b3IgaXMgKG5vcm1hbGx5IDIpLiAgSXQgaXMgYXNzdW1lZAorICAgdGhhdCB0aGUgYWRkcmVzcyBvZiBhIGZ1bmN0aW9uIGRlc2NyaXB0b3IgbWF5IGJlIHRyZWF0ZWQgYXMgYQorICAgcG9pbnRlciB0byBhIGZ1bmN0aW9uLiAgKi8KKyNpZm5kZWYgVEFSR0VUX1ZUQUJMRV9VU0VTX0RFU0NSSVBUT1JTCisjZGVmaW5lIFRBUkdFVF9WVEFCTEVfVVNFU19ERVNDUklQVE9SUyAwCisjZW5kaWYKKworLyogQnkgZGVmYXVsdCwgdGhlIHZ0YWJsZSBlbnRyaWVzIGFyZSB2b2lkIHBvaW50ZXJzLCB0aGUgc28gdGhlIGFsaWdubWVudAorICAgaXMgdGhlIHNhbWUgYXMgcG9pbnRlciBhbGlnbm1lbnQuICBUaGUgdmFsdWUgb2YgdGhpcyBtYWNybyBzcGVjaWZpZXMKKyAgIHRoZSBhbGlnbm1lbnQgb2YgdGhlIHZ0YWJsZSBlbnRyeSBpbiBiaXRzLiAgSXQgc2hvdWxkIGJlIGRlZmluZWQgb25seQorICAgd2hlbiBzcGVjaWFsIGFsaWdubWVudCBpcyBuZWNlc3NhcnkuICAqLworI2lmbmRlZiBUQVJHRVRfVlRBQkxFX0VOVFJZX0FMSUdOCisjZGVmaW5lIFRBUkdFVF9WVEFCTEVfRU5UUllfQUxJR04gUE9JTlRFUl9TSVpFCisjZW5kaWYKKworLyogVGhlcmUgYXJlIGEgZmV3IG5vbi1kZXNjcmlwdG9yIGVudHJpZXMgaW4gdGhlIHZ0YWJsZSBhdCBvZmZzZXRzIGJlbG93CisgICB6ZXJvLiAgSWYgdGhlc2UgZW50cmllcyBtdXN0IGJlIHBhZGRlZCAoc2F5LCB0byBwcmVzZXJ2ZSB0aGUgYWxpZ25tZW50CisgICBzcGVjaWZpZWQgYnkgVEFSR0VUX1ZUQUJMRV9FTlRSWV9BTElHTiksIHNldCB0aGlzIHRvIHRoZSBudW1iZXIgb2YKKyAgIHdvcmRzIGluIGVhY2ggZGF0YSBlbnRyeS4gICovCisjaWZuZGVmIFRBUkdFVF9WVEFCTEVfREFUQV9FTlRSWV9ESVNUQU5DRQorI2RlZmluZSBUQVJHRVRfVlRBQkxFX0RBVEFfRU5UUllfRElTVEFOQ0UgMQorI2VuZGlmCisKKy8qIERlY2lkZSB3aGV0aGVyIGl0IGlzIHNhZmUgdG8gdXNlIGEgbG9jYWwgYWxpYXMgZm9yIGEgdmlydHVhbCBmdW5jdGlvbgorICAgd2hlbiBjb25zdHJ1Y3RpbmcgdGh1bmtzLiAgKi8KKyNpZm5kZWYgVEFSR0VUX1VTRV9MT0NBTF9USFVOS19BTElBU19QCisjaWZkZWYgQVNNX09VVFBVVF9ERUYKKyNkZWZpbmUgVEFSR0VUX1VTRV9MT0NBTF9USFVOS19BTElBU19QKERFQ0wpIDEKKyNlbHNlCisjZGVmaW5lIFRBUkdFVF9VU0VfTE9DQUxfVEhVTktfQUxJQVNfUChERUNMKSAwCisjZW5kaWYKKyNlbmRpZgorCisvKiBTZWxlY3QgYSBmb3JtYXQgdG8gZW5jb2RlIHBvaW50ZXJzIGluIGV4Y2VwdGlvbiBoYW5kbGluZyBkYXRhLiAgV2UKKyAgIHByZWZlciB0aG9zZSB0aGF0IHJlc3VsdCBpbiBmZXdlciBkeW5hbWljIHJlbG9jYXRpb25zLiAgQXNzdW1lIG5vCisgICBzcGVjaWFsIHN1cHBvcnQgaGVyZSBhbmQgZW5jb2RlIGRpcmVjdCByZWZlcmVuY2VzLiAgKi8KKyNpZm5kZWYgQVNNX1BSRUZFUlJFRF9FSF9EQVRBX0ZPUk1BVAorI2RlZmluZSBBU01fUFJFRkVSUkVEX0VIX0RBVEFfRk9STUFUKENPREUsR0xPQkFMKSAgRFdfRUhfUEVfYWJzcHRyCisjZW5kaWYKKworLyogQnkgZGVmYXVsdCwgdGhlIEMrKyBjb21waWxlciB3aWxsIHVzZSB0aGUgbG93ZXN0IGJpdCBvZiB0aGUgcG9pbnRlcgorICAgdG8gZnVuY3Rpb24gdG8gaW5kaWNhdGUgYSBwb2ludGVyLXRvLW1lbWJlci1mdW5jdGlvbiBwb2ludHMgdG8gYQorICAgdmlydHVhbCBtZW1iZXIgZnVuY3Rpb24uICBIb3dldmVyLCBpZiBGVU5DVElPTl9CT1VOREFSWSBpbmRpY2F0ZXMKKyAgIGZ1bmN0aW9uIGFkZHJlc3NlcyBhcmVuJ3QgYWx3YXlzIGV2ZW4sIHRoZSBsb3dlc3QgYml0IG9mIHRoZSBkZWx0YQorICAgZmllbGQgd2lsbCBiZSB1c2VkLiAgKi8KKyNpZm5kZWYgVEFSR0VUX1BUUk1FTUZVTkNfVkJJVF9MT0NBVElPTgorI2RlZmluZSBUQVJHRVRfUFRSTUVNRlVOQ19WQklUX0xPQ0FUSU9OIFwKKyAgKEZVTkNUSU9OX0JPVU5EQVJZID49IDIgKiBCSVRTX1BFUl9VTklUIFwKKyAgID8gcHRybWVtZnVuY192Yml0X2luX3BmbiA6IHB0cm1lbWZ1bmNfdmJpdF9pbl9kZWx0YSkKKyNlbmRpZgorCisjaWZuZGVmIERFRkFVTFRfR0RCX0VYVEVOU0lPTlMKKyNkZWZpbmUgREVGQVVMVF9HREJfRVhURU5TSU9OUyAxCisjZW5kaWYKKworLyogSWYgbW9yZSB0aGFuIG9uZSBkZWJ1Z2dpbmcgdHlwZSBpcyBzdXBwb3J0ZWQsIHlvdSBtdXN0IGRlZmluZQorICAgUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFIHRvIGNob29zZSB0aGUgZGVmYXVsdC4gICovCisKKyNpZiAxIDwgKGRlZmluZWQgKERCWF9ERUJVR0dJTkdfSU5GTykgKyBkZWZpbmVkIChTREJfREVCVUdHSU5HX0lORk8pIFwKKyAgICAgICAgICsgZGVmaW5lZCAoRFdBUkYyX0RFQlVHR0lOR19JTkZPKSArIGRlZmluZWQgKFhDT0ZGX0RFQlVHR0lOR19JTkZPKSBcCisgICAgICAgICArIGRlZmluZWQgKFZNU19ERUJVR0dJTkdfSU5GTykpCisjaWZuZGVmIFBSRUZFUlJFRF9ERUJVR0dJTkdfVFlQRQorI2Vycm9yIFlvdSBtdXN0IGRlZmluZSBQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUKKyNlbmRpZiAvKiBubyBQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUgKi8KKworLyogSWYgb25seSBvbmUgZGVidWdnaW5nIGZvcm1hdCBpcyBzdXBwb3J0ZWQsIGRlZmluZSBQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUKKyAgIGhlcmUgc28gb3RoZXIgY29kZSBuZWVkbid0IGNhcmUuICAqLworI2VsaWYgZGVmaW5lZCBEQlhfREVCVUdHSU5HX0lORk8KKyNkZWZpbmUgUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFIERCWF9ERUJVRworCisjZWxpZiBkZWZpbmVkIFNEQl9ERUJVR0dJTkdfSU5GTworI2RlZmluZSBQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUgU0RCX0RFQlVHCisKKyNlbGlmIGRlZmluZWQgRFdBUkYyX0RFQlVHR0lOR19JTkZPCisjZGVmaW5lIFBSRUZFUlJFRF9ERUJVR0dJTkdfVFlQRSBEV0FSRjJfREVCVUcKKworI2VsaWYgZGVmaW5lZCBWTVNfREVCVUdHSU5HX0lORk8KKyNkZWZpbmUgUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFIFZNU19BTkRfRFdBUkYyX0RFQlVHCisKKyNlbGlmIGRlZmluZWQgWENPRkZfREVCVUdHSU5HX0lORk8KKyNkZWZpbmUgUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFIFhDT0ZGX0RFQlVHCisKKyNlbHNlCisvKiBObyBkZWJ1Z2dpbmcgZm9ybWF0IGlzIHN1cHBvcnRlZCBieSB0aGlzIHRhcmdldC4gICovCisjZGVmaW5lIFBSRUZFUlJFRF9ERUJVR0dJTkdfVFlQRSBOT19ERUJVRworI2VuZGlmCisKKyNpZm5kZWYgTEFSR0VTVF9FWFBPTkVOVF9JU19OT1JNQUwKKyNkZWZpbmUgTEFSR0VTVF9FWFBPTkVOVF9JU19OT1JNQUwoU0laRSkgMAorI2VuZGlmCisKKyNpZm5kZWYgUk9VTkRfVE9XQVJEU19aRVJPCisjZGVmaW5lIFJPVU5EX1RPV0FSRFNfWkVSTyAwCisjZW5kaWYKKworI2lmbmRlZiBGTE9BVF9MSUJfQ09NUEFSRV9SRVRVUk5TX0JPT0wKKyNkZWZpbmUgRkxPQVRfTElCX0NPTVBBUkVfUkVUVVJOU19CT09MKE1PREUsIENPTVBBUklTT04pIGZhbHNlCisjZW5kaWYKKworLyogVHJ1ZSBpZiB0aGUgdGFyZ2V0cyBpbnRlZ2VyLWNvbXBhcmlzb24gZnVuY3Rpb25zIHJldHVybiB7IDAsIDEsIDIKKyAgIH0gdG8gaW5kaWNhdGUgeyA8LCA9PSwgPiB9LiAgRmFsc2UgaWYgeyAtMSwgMCwgMSB9IGlzIHVzZWQKKyAgIGluc3RlYWQuICBUaGUgbGliZ2NjIHJvdXRpbmVzIGFyZSBiaWFzZWQuICAqLworI2lmbmRlZiBUQVJHRVRfTElCX0lOVF9DTVBfQklBU0VECisjZGVmaW5lIFRBUkdFVF9MSUJfSU5UX0NNUF9CSUFTRUQgKHRydWUpCisjZW5kaWYKKworLyogSWYgRkxPQVRfV09SRFNfQklHX0VORElBTiBpcyBub3QgZGVmaW5lZCBpbiB0aGUgaGVhZGVyIGZpbGVzLAorICAgdGhlbiB0aGUgd29yZC1lbmRpYW5uZXNzIGlzIHRoZSBzYW1lIGFzIGZvciBpbnRlZ2Vycy4gICovCisjaWZuZGVmIEZMT0FUX1dPUkRTX0JJR19FTkRJQU4KKyNkZWZpbmUgRkxPQVRfV09SRFNfQklHX0VORElBTiBXT1JEU19CSUdfRU5ESUFOCisjZW5kaWYKKworI2lmZGVmIFRBUkdFVF9GTFRfRVZBTF9NRVRIT0QKKyNkZWZpbmUgVEFSR0VUX0ZMVF9FVkFMX01FVEhPRF9OT05fREVGQVVMVCAxCisjZWxzZQorI2RlZmluZSBUQVJHRVRfRkxUX0VWQUxfTUVUSE9EIDAKKyNkZWZpbmUgVEFSR0VUX0ZMVF9FVkFMX01FVEhPRF9OT05fREVGQVVMVCAwCisjZW5kaWYKKworI2lmbmRlZiBUQVJHRVRfREVDX0VWQUxfTUVUSE9ECisjZGVmaW5lIFRBUkdFVF9ERUNfRVZBTF9NRVRIT0QgMgorI2VuZGlmCisKKyNpZm5kZWYgSE9UX1RFWFRfU0VDVElPTl9OQU1FCisjZGVmaW5lIEhPVF9URVhUX1NFQ1RJT05fTkFNRSAiLnRleHQuaG90IgorI2VuZGlmCisKKyNpZm5kZWYgVU5MSUtFTFlfRVhFQ1VURURfVEVYVF9TRUNUSU9OX05BTUUKKyNkZWZpbmUgVU5MSUtFTFlfRVhFQ1VURURfVEVYVF9TRUNUSU9OX05BTUUgIi50ZXh0LnVubGlrZWx5IgorI2VuZGlmCisKKyNpZm5kZWYgSEFTX0xPTkdfQ09ORF9CUkFOQ0gKKyNkZWZpbmUgSEFTX0xPTkdfQ09ORF9CUkFOQ0ggMAorI2VuZGlmCisKKyNpZm5kZWYgSEFTX0xPTkdfVU5DT05EX0JSQU5DSAorI2RlZmluZSBIQVNfTE9OR19VTkNPTkRfQlJBTkNIIDAKKyNlbmRpZgorCisvKiBCeSBkZWZhdWx0LCBvbmx5IGF0dGVtcHQgdG8gcGFyYWxsZWxpemUgYml0d2lzZSBvcGVyYXRpb25zLCBhbmQKKyAgIHBvc3NpYmx5IGFkZHMvc3VidHJhY3RzIHVzaW5nIGJpdC10d2lkZGxpbmcuICAqLworI2lmbmRlZiBVTklUU19QRVJfU0lNRF9XT1JECisjZGVmaW5lIFVOSVRTX1BFUl9TSU1EX1dPUkQoTU9ERSkgVU5JVFNfUEVSX1dPUkQKKyNlbmRpZgorCisvKiBEZXRlcm1pbmUgd2hldGhlciBfX2N4YV9hdGV4aXQsIHJhdGhlciB0aGFuIGF0ZXhpdCwgaXMgdXNlZCB0bworICAgcmVnaXN0ZXIgQysrIGRlc3RydWN0b3JzIGZvciBsb2NhbCBzdGF0aWNzIGFuZCBnbG9iYWwgb2JqZWN0cy4gICovCisjaWZuZGVmIERFRkFVTFRfVVNFX0NYQV9BVEVYSVQKKyNkZWZpbmUgREVGQVVMVF9VU0VfQ1hBX0FURVhJVCAwCisjZW5kaWYKKworLyogSWYgbm9uZSBvZiB0aGVzZSBtYWNyb3MgYXJlIGRlZmluZWQsIHRoZSBwb3J0IG11c3QgdXNlIHRoZSBuZXcKKyAgIHRlY2huaXF1ZSBvZiBkZWZpbmluZyBjb25zdHJhaW50cyBpbiB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbi4KKyAgIHRtX3AuaCB3aWxsIGRlZmluZSB0aG9zZSBtYWNyb3MgdGhhdCBtYWNoaW5lLWluZGVwZW5kZW50IGNvZGUKKyAgIHN0aWxsIHVzZXMuICAqLworI2lmICAhZGVmaW5lZCBDT05TVFJBSU5UX0xFTgkJCVwKKyAgJiYgIWRlZmluZWQgUkVHX0NMQVNTX0ZST01fTEVUVEVSCQlcCisgICYmICFkZWZpbmVkIFJFR19DTEFTU19GUk9NX0NPTlNUUkFJTlQJCVwKKyAgJiYgIWRlZmluZWQgQ09OU1RfT0tfRk9SX0xFVFRFUl9QCQlcCisgICYmICFkZWZpbmVkIENPTlNUX09LX0ZPUl9DT05TVFJBSU5UX1AJCVwKKyAgJiYgIWRlZmluZWQgQ09OU1RfRE9VQkxFX09LX0ZPUl9MRVRURVJfUAlcCisgICYmICFkZWZpbmVkIENPTlNUX0RPVUJMRV9PS19GT1JfQ09OU1RSQUlOVF9QICBcCisgICYmICFkZWZpbmVkIEVYVFJBX0NPTlNUUkFJTlQJCQlcCisgICYmICFkZWZpbmVkIEVYVFJBX0NPTlNUUkFJTlRfU1RSCQlcCisgICYmICFkZWZpbmVkIEVYVFJBX01FTU9SWV9DT05TVFJBSU5UCQlcCisgICYmICFkZWZpbmVkIEVYVFJBX0FERFJFU1NfQ09OU1RSQUlOVAorCisjZGVmaW5lIFVTRV9NRF9DT05TVFJBSU5UUworCisjaWYgR0NDX1ZFUlNJT04gPj0gMzAwMCAmJiBkZWZpbmVkIElOX0dDQworLyogVGhlc2Ugb2xkIGNvbnN0cmFpbnQgbWFjcm9zIHNob3VsZG4ndCBhcHBlYXIgYW55d2hlcmUgaW4gYQorICAgY29uZmlndXJhdGlvbiB1c2luZyBNRCBjb25zdHJhaW50IGRlZmluaXRpb25zLiAgKi8KKyNwcmFnbWEgR0NDIHBvaXNvbiBSRUdfQ0xBU1NfRlJPTV9MRVRURVIgQ09OU1RfT0tfRk9SX0xFVFRFUl9QIFwKKyAgICAgICAgICAgICAgICAgICBDT05TVF9ET1VCTEVfT0tfRk9SX0xFVFRFUl9QIEVYVFJBX0NPTlNUUkFJTlQKKyNlbmRpZgorCisjZWxzZSAvKiBvbGQgY29uc3RyYWludCBtZWNoYW5pc20gaW4gdXNlICovCisKKy8qIERldGVybWluZSB3aGV0aGVyIGV4dHJhIGNvbnN0cmFpbnQgbGV0dGVyIHNob3VsZCBiZSBoYW5kbGVkCisgICB2aWEgYWRkcmVzcyByZWxvYWQgKGxpa2UgJ28nKS4gICovCisjaWZuZGVmIEVYVFJBX01FTU9SWV9DT05TVFJBSU5UCisjZGVmaW5lIEVYVFJBX01FTU9SWV9DT05TVFJBSU5UKEMsU1RSKSAwCisjZW5kaWYKKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgZXh0cmEgY29uc3RyYWludCBsZXR0ZXIgc2hvdWxkIGJlIGhhbmRsZWQKKyAgIGFzIGFuIGFkZHJlc3MgKGxpa2UgJ3AnKS4gICovCisjaWZuZGVmIEVYVFJBX0FERFJFU1NfQ09OU1RSQUlOVAorI2RlZmluZSBFWFRSQV9BRERSRVNTX0NPTlNUUkFJTlQoQyxTVFIpIDAKKyNlbmRpZgorCisvKiBXaGVuIGEgcG9ydCBkZWZpbmVzIENPTlNUUkFJTlRfTEVOLCBpdCBzaG91bGQgdXNlIERFRkFVTFRfQ09OU1RSQUlOVF9MRU4KKyAgIGZvciBhbGwgdGhlIGNoYXJhY3RlcnMgdGhhdCBpdCBkb2VzIG5vdCB3YW50IHRvIGNoYW5nZSwgc28gdGhpbmdzIGxpa2UgdGhlCisgICdsZW5ndGgnIG9mIGEgZGlnaXQgaW4gYSBtYXRjaGluZyBjb25zdHJhaW50IGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwKKyAgIGFuZCBub3QgcGFydCBvZiB0aGUgaW50ZXJmYWNlLiAgKi8KKyNkZWZpbmUgREVGQVVMVF9DT05TVFJBSU5UX0xFTihDLFNUUikgMQorCisjaWZuZGVmIENPTlNUUkFJTlRfTEVOCisjZGVmaW5lIENPTlNUUkFJTlRfTEVOKEMsU1RSKSBERUZBVUxUX0NPTlNUUkFJTlRfTEVOIChDLCBTVFIpCisjZW5kaWYKKworI2lmIGRlZmluZWQgKENPTlNUX09LX0ZPUl9MRVRURVJfUCkgJiYgISBkZWZpbmVkIChDT05TVF9PS19GT1JfQ09OU1RSQUlOVF9QKQorI2RlZmluZSBDT05TVF9PS19GT1JfQ09OU1RSQUlOVF9QKFZBTCxDLFNUUikgQ09OU1RfT0tfRk9SX0xFVFRFUl9QIChWQUwsIEMpCisjZW5kaWYKKworI2lmIGRlZmluZWQgKENPTlNUX0RPVUJMRV9PS19GT1JfTEVUVEVSX1ApICYmICEgZGVmaW5lZCAoQ09OU1RfRE9VQkxFX09LX0ZPUl9DT05TVFJBSU5UX1ApCisjZGVmaW5lIENPTlNUX0RPVUJMRV9PS19GT1JfQ09OU1RSQUlOVF9QKE9QLEMsU1RSKSBcCisgIENPTlNUX0RPVUJMRV9PS19GT1JfTEVUVEVSX1AgKE9QLCBDKQorI2VuZGlmCisKKyNpZm5kZWYgUkVHX0NMQVNTX0ZST01fQ09OU1RSQUlOVAorI2RlZmluZSBSRUdfQ0xBU1NfRlJPTV9DT05TVFJBSU5UKEMsU1RSKSBSRUdfQ0xBU1NfRlJPTV9MRVRURVIgKEMpCisjZW5kaWYKKworI2lmIGRlZmluZWQgKEVYVFJBX0NPTlNUUkFJTlQpICYmICEgZGVmaW5lZCAoRVhUUkFfQ09OU1RSQUlOVF9TVFIpCisjZGVmaW5lIEVYVFJBX0NPTlNUUkFJTlRfU1RSKE9QLCBDLFNUUikgRVhUUkFfQ09OU1RSQUlOVCAoT1AsIEMpCisjZW5kaWYKKworI2VuZGlmIC8qIG9sZCBjb25zdHJhaW50IG1lY2hhbmlzbSBpbiB1c2UgKi8KKworI2lmbmRlZiBSRUdJU1RFUl9NT1ZFX0NPU1QKKyNkZWZpbmUgUkVHSVNURVJfTU9WRV9DT1NUKG0sIHgsIHkpIDIKKyNlbmRpZgorCisvKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgZW50aXJlIGM5OSBydW50aW1lCisgICBpcyBwcmVzZW50IGluIHRoZSBydW50aW1lIGxpYnJhcnkuICAqLworI2lmbmRlZiBUQVJHRVRfQzk5X0ZVTkNUSU9OUworI2RlZmluZSBUQVJHRVRfQzk5X0ZVTkNUSU9OUyAwCisjZW5kaWYKKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHRhcmdldCBydW50aW1lIGxpYnJhcnkgaGFzCisgICBhIHNpbmNvcyBpbXBsZW1lbnRhdGlvbiBmb2xsb3dpbmcgdGhlIEdOVSBleHRlbnNpb24uICAqLworI2lmbmRlZiBUQVJHRVRfSEFTX1NJTkNPUworI2RlZmluZSBUQVJHRVRfSEFTX1NJTkNPUyAwCisjZW5kaWYKKworLyogSW5kaWNhdGUgdGhhdCBDTFogYW5kIENUWiBhcmUgdW5kZWZpbmVkIGF0IHplcm8uICAqLworI2lmbmRlZiBDTFpfREVGSU5FRF9WQUxVRV9BVF9aRVJPCisjZGVmaW5lIENMWl9ERUZJTkVEX1ZBTFVFX0FUX1pFUk8oTU9ERSwgVkFMVUUpICAwCisjZW5kaWYKKyNpZm5kZWYgQ1RaX0RFRklORURfVkFMVUVfQVRfWkVSTworI2RlZmluZSBDVFpfREVGSU5FRF9WQUxVRV9BVF9aRVJPKE1PREUsIFZBTFVFKSAgMAorI2VuZGlmCisKKy8qIFByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlIGZvciBTVE9SRV9GTEFHX1ZBTFVFLiAgKi8KKyNpZm5kZWYgU1RPUkVfRkxBR19WQUxVRQorI2RlZmluZSBTVE9SRV9GTEFHX1ZBTFVFICAxCisjZW5kaWYKKworLyogVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRldGVybWluZSB3aGF0IHRoZSBsYXJnZXN0IHVuaXQgc2l6ZSB0aGF0CisgICBtb3ZlX2J5X3BpZWNlcyBjYW4gdXNlIGlzLiAgKi8KKworLyogTU9WRV9NQVhfUElFQ0VTIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXQgYSB0aW1lIHdoaWNoIHdlIGNhbgorICAgbW92ZSBlZmZpY2llbnRseSwgYXMgb3Bwb3NlZCB0byAgTU9WRV9NQVggd2hpY2ggaXMgdGhlIG1heGltdW0KKyAgIG51bWJlciBvZiBieXRlcyB3ZSBjYW4gbW92ZSB3aXRoIGEgc2luZ2xlIGluc3RydWN0aW9uLiAgKi8KKworI2lmbmRlZiBNT1ZFX01BWF9QSUVDRVMKKyNkZWZpbmUgTU9WRV9NQVhfUElFQ0VTICAgTU9WRV9NQVgKKyNlbmRpZgorCisjaWZuZGVmIFNUQUNLX1BPSU5URVJfT0ZGU0VUCisjZGVmaW5lIFNUQUNLX1BPSU5URVJfT0ZGU0VUICAgIDAKKyNlbmRpZgorCisjaWZuZGVmIExPQ0FMX1JFR05PCisjZGVmaW5lIExPQ0FMX1JFR05PKFJFR05PKSAgMAorI2VuZGlmCisKKy8qIEVYSVRfSUdOT1JFX1NUQUNLIHNob3VsZCBiZSBub256ZXJvIGlmLCB3aGVuIHJldHVybmluZyBmcm9tIGEgZnVuY3Rpb24sCisgICB0aGUgc3RhY2sgcG9pbnRlciBkb2VzIG5vdCBtYXR0ZXIuICBUaGUgdmFsdWUgaXMgdGVzdGVkIG9ubHkgaW4KKyAgIGZ1bmN0aW9ucyB0aGF0IGhhdmUgZnJhbWUgcG9pbnRlcnMuICAqLworI2lmbmRlZiBFWElUX0lHTk9SRV9TVEFDSworI2RlZmluZSBFWElUX0lHTk9SRV9TVEFDSyAwCisjZW5kaWYKKworLyogQXNzdW1lIHRoYXQgY2FzZSB2ZWN0b3JzIGFyZSBub3QgcGMtcmVsYXRpdmUuICAqLworI2lmbmRlZiBDQVNFX1ZFQ1RPUl9QQ19SRUxBVElWRQorI2RlZmluZSBDQVNFX1ZFQ1RPUl9QQ19SRUxBVElWRSAwCisjZW5kaWYKKworLyogQXNzdW1lIHRoYXQgdHJhbXBvbGluZXMgbmVlZCBmdW5jdGlvbiBhbGlnbm1lbnQuICAqLworI2lmbmRlZiBUUkFNUE9MSU5FX0FMSUdOTUVOVAorI2RlZmluZSBUUkFNUE9MSU5FX0FMSUdOTUVOVCBGVU5DVElPTl9CT1VOREFSWQorI2VuZGlmCisKKy8qIFJlZ2lzdGVyIG1hcHBpbmdzIGZvciB0YXJnZXQgbWFjaGluZXMgd2l0aG91dCByZWdpc3RlciB3aW5kb3dzLiAgKi8KKyNpZm5kZWYgSU5DT01JTkdfUkVHTk8KKyNkZWZpbmUgSU5DT01JTkdfUkVHTk8oTikgKE4pCisjZW5kaWYKKworI2lmbmRlZiBPVVRHT0lOR19SRUdOTworI2RlZmluZSBPVVRHT0lOR19SRUdOTyhOKSAoTikKKyNlbmRpZgorCisjaWZuZGVmIFNISUZUX0NPVU5UX1RSVU5DQVRFRAorI2RlZmluZSBTSElGVF9DT1VOVF9UUlVOQ0FURUQgMAorI2VuZGlmCisKKyNpZm5kZWYgTEVHSVRJTUFURV9QSUNfT1BFUkFORF9QCisjZGVmaW5lIExFR0lUSU1BVEVfUElDX09QRVJBTkRfUChYKSAxCisjZW5kaWYKKworI2lmbmRlZiBUQVJHRVRfTUVNX0NPTlNUUkFJTlQKKyNkZWZpbmUgVEFSR0VUX01FTV9DT05TVFJBSU5UICdtJworI2VuZGlmCisKKyNpZm5kZWYgUkVWRVJTSUJMRV9DQ19NT0RFCisjZGVmaW5lIFJFVkVSU0lCTEVfQ0NfTU9ERShNT0RFKSAwCisjZW5kaWYKKworLyogQmlnZ2VzdCBhbGlnbm1lbnQgc3VwcG9ydGVkIGJ5IHRoZSBvYmplY3QgZmlsZSBmb3JtYXQgb2YgdGhpcyBtYWNoaW5lLiAgKi8KKyNpZm5kZWYgTUFYX09GSUxFX0FMSUdOTUVOVAorI2RlZmluZSBNQVhfT0ZJTEVfQUxJR05NRU5UIEJJR0dFU1RfQUxJR05NRU5UCisjZW5kaWYKKworI2lmbmRlZiBGUkFNRV9HUk9XU19ET1dOV0FSRAorI2RlZmluZSBGUkFNRV9HUk9XU19ET1dOV0FSRCAwCisjZW5kaWYKKworLyogT24gbW9zdCBtYWNoaW5lcywgdGhlIENGQSBjb2luY2lkZXMgd2l0aCB0aGUgZmlyc3QgaW5jb21pbmcgcGFybS4gICovCisjaWZuZGVmIEFSR19QT0lOVEVSX0NGQV9PRkZTRVQKKyNkZWZpbmUgQVJHX1BPSU5URVJfQ0ZBX09GRlNFVChGTkRFQ0wpIFwKKyAgKEZJUlNUX1BBUk1fT0ZGU0VUIChGTkRFQ0wpICsgY3J0bC0+YXJncy5wcmV0ZW5kX2FyZ3Nfc2l6ZSkKKyNlbmRpZgorCisvKiBPbiBtb3N0IG1hY2hpbmVzLCB3ZSB1c2UgdGhlIENGQSBhcyBEV19BVF9mcmFtZV9iYXNlLiAgKi8KKyNpZm5kZWYgQ0ZBX0ZSQU1FX0JBU0VfT0ZGU0VUCisjZGVmaW5lIENGQV9GUkFNRV9CQVNFX09GRlNFVChGTkRFQ0wpIDAKKyNlbmRpZgorCisvKiBUaGUgb2Zmc2V0IGZyb20gdGhlIGluY29taW5nIHZhbHVlIG9mICVzcCB0byB0aGUgdG9wIG9mIHRoZSBzdGFjayBmcmFtZQorICAgZm9yIHRoZSBjdXJyZW50IGZ1bmN0aW9uLiAgKi8KKyNpZm5kZWYgSU5DT01JTkdfRlJBTUVfU1BfT0ZGU0VUCisjZGVmaW5lIElOQ09NSU5HX0ZSQU1FX1NQX09GRlNFVCAwCisjZW5kaWYKKworI2lmbmRlZiBIQVJEX1JFR05PX05SRUdTX0hBU19QQURESU5HCisjZGVmaW5lIEhBUkRfUkVHTk9fTlJFR1NfSEFTX1BBRERJTkcoUkVHTk8sIE1PREUpIDAKKyNkZWZpbmUgSEFSRF9SRUdOT19OUkVHU19XSVRIX1BBRERJTkcoUkVHTk8sIE1PREUpIC0xCisjZW5kaWYKKworI2lmbmRlZiBPVVRHT0lOR19SRUdfUEFSTV9TVEFDS19TUEFDRQorI2RlZmluZSBPVVRHT0lOR19SRUdfUEFSTV9TVEFDS19TUEFDRShGTlRZUEUpIDAKKyNlbmRpZgorCisvKiBNQVhfU1RBQ0tfQUxJR05NRU5UIGlzIHRoZSBtYXhpbXVtIHN0YWNrIGFsaWdubWVudCBndWFyYW50ZWVkIGJ5CisgICB0aGUgYmFja2VuZC4gIE1BWF9TVVBQT1JURURfU1RBQ0tfQUxJR05NRU5UIGlzIHRoZSBtYXhpbXVtIGJlc3QKKyAgIGVmZm9ydCBzdGFjayBhbGlnbm1lbnQgc3VwcG9ydGVkIGJ5IHRoZSBiYWNrZW5kLiAgSWYgdGhlIGJhY2tlbmQKKyAgIHN1cHBvcnRzIHN0YWNrIGFsaWdubWVudCwgTUFYX1NVUFBPUlRFRF9TVEFDS19BTElHTk1FTlQgYW5kCisgICBNQVhfU1RBQ0tfQUxJR05NRU5UIGFyZSB0aGUgc2FtZS4gIE90aGVyd2lzZSwgdGhlIGluY29taW5nIHN0YWNrCisgICBib3VuZGFyeSB3aWxsIGxpbWl0IHRoZSBtYXhpbXVtIGd1YXJhbnRlZWQgc3RhY2sgYWxpZ25tZW50LiAgKi8KKyNpZmRlZiBNQVhfU1RBQ0tfQUxJR05NRU5UCisjZGVmaW5lIE1BWF9TVVBQT1JURURfU1RBQ0tfQUxJR05NRU5UIE1BWF9TVEFDS19BTElHTk1FTlQKKyNlbHNlCisjZGVmaW5lIE1BWF9TVEFDS19BTElHTk1FTlQgU1RBQ0tfQk9VTkRBUlkKKyNkZWZpbmUgTUFYX1NVUFBPUlRFRF9TVEFDS19BTElHTk1FTlQgUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZCisjZW5kaWYKKworI2RlZmluZSBTVVBQT1JUU19TVEFDS19BTElHTk1FTlQgKE1BWF9TVEFDS19BTElHTk1FTlQgPiBTVEFDS19CT1VOREFSWSkKKworI2lmbmRlZiBMT0NBTF9BTElHTk1FTlQKKyNkZWZpbmUgTE9DQUxfQUxJR05NRU5UKFRZUEUsIEFMSUdOTUVOVCkgQUxJR05NRU5UCisjZW5kaWYKKworI2lmbmRlZiBTVEFDS19TTE9UX0FMSUdOTUVOVAorI2RlZmluZSBTVEFDS19TTE9UX0FMSUdOTUVOVChUWVBFLE1PREUsQUxJR04pIFwKKyAgKChUWVBFKSA/IExPQ0FMX0FMSUdOTUVOVCAoKFRZUEUpLCAoQUxJR04pKSA6IChBTElHTikpCisjZW5kaWYKKworI2lmbmRlZiBMT0NBTF9ERUNMX0FMSUdOTUVOVAorI2RlZmluZSBMT0NBTF9ERUNMX0FMSUdOTUVOVChERUNMKSBcCisgIExPQ0FMX0FMSUdOTUVOVCAoVFJFRV9UWVBFIChERUNMKSwgREVDTF9BTElHTiAoREVDTCkpCisjZW5kaWYKKworI2lmbmRlZiBNSU5JTVVNX0FMSUdOTUVOVAorI2RlZmluZSBNSU5JTVVNX0FMSUdOTUVOVChFWFAsTU9ERSxBTElHTikgKEFMSUdOKQorI2VuZGlmCisKKy8qIEFsaWdubWVudCB2YWx1ZSBmb3IgYXR0cmlidXRlICgoYWxpZ25lZCkpLiAgKi8KKyNpZm5kZWYgQVRUUklCVVRFX0FMSUdORURfVkFMVUUKKyNkZWZpbmUgQVRUUklCVVRFX0FMSUdORURfVkFMVUUgQklHR0VTVF9BTElHTk1FTlQKKyNlbmRpZgorCisvKiBNYW55IHBvcnRzIGhhdmUgbm8gbW9kZS1kZXBlbmRlbnQgYWRkcmVzc2VzIChleGNlcHQgcG9zc2libHkgYXV0b2luY3JlbWVudAorICAgYW5kIGF1dG9kZWNyZW1lbnQgYWRkcmVzc2VzLCB3aGljaCBhcmUgaGFuZGxlZCBieSB0YXJnZXQtaW5kZXBlbmRlbnQgY29kZQorICAgaW4gcmVjb2cuYykuICAqLworI2lmbmRlZiBHT19JRl9NT0RFX0RFUEVOREVOVF9BRERSRVNTCisjZGVmaW5lIEdPX0lGX01PREVfREVQRU5ERU5UX0FERFJFU1MoWCwgV0lOKQorI2VuZGlmCisKKy8qIEZvciBtb3N0IHBvcnRzIGFueXRoaW5nIHRoYXQgZXZhbHVhdGVzIHRvIGEgY29uc3RhbnQgc3ltYm9saWMKKyAgIG9yIGludGVnZXIgdmFsdWUgaXMgYWNjZXB0YWJsZSBhcyBhIGNvbnN0YW50IGFkZHJlc3MuICAqLworI2lmbmRlZiBDT05TVEFOVF9BRERSRVNTX1AKKyNkZWZpbmUgQ09OU1RBTlRfQUREUkVTU19QKFgpICAgKENPTlNUQU5UX1AgKFgpICYmIEdFVF9DT0RFIChYKSAhPSBDT05TVF9ET1VCTEUpCisjZW5kaWYKKworI2VuZGlmICAvKiAhIEdDQ19ERUZBVUxUU19IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvZGlhZ25vc3RpYy5kZWYgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvZGlhZ25vc3RpYy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEzYmQzYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9kaWFnbm9zdGljLmRlZgpAQCAtMCwwICsxLDQ1IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDYsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBES19VTlNQRUNJRklFRCBtdXN0IGJlIGZpcnN0IHNvIGl0IGhhcyBhIHZhbHVlIG9mIHplcm8uICBXZSBuZXZlcgorICAgYXNzaWduIHRoaXMga2luZCB0byBhbiBhY3R1YWwgZGlhZ25vc3RpYywgd2Ugb25seSB1c2UgdGhpcyBpbgorICAgdmFyaWFibGVzIHRoYXQgY2FuIGhvbGQgYSBraW5kLCB0byBtZWFuIHRoZXkgaGF2ZSB5ZXQgdG8gaGF2ZSBhCisgICBraW5kIHNwZWNpZmllZC4gIEkuZS4gdGhleSdyZSB1bmluaXRpYWxpemVkLiAgV2l0aGluIHRoZSBkaWFnbm9zdGljCisgICBtYWNoaW5lcnksIHRoaXMga2luZCBhbHNvIG1lYW5zICJkb24ndCBjaGFuZ2UgdGhlIGV4aXN0aW5nIGtpbmQiLAorICAgbWVhbmluZyAibm8gY2hhbmdlIGlzIHNwZWNpZmllZCIuICAqLworREVGSU5FX0RJQUdOT1NUSUNfS0lORCAoREtfVU5TUEVDSUZJRUQsICIiKQorCisvKiBJZiBhIGRpYWdub3N0aWMgaXMgc2V0IHRvIERLX0lHTk9SRUQsIGl0IHdvbid0IGdldCByZXBvcnRlZCBhdCBhbGwuCisgICBUaGlzIGlzIHVzZWQgYnkgdGhlIGRpYWdub3N0aWMgbWFjaGluZXJ5IHdoZW4gaXQgd2FudHMgdG8gZGlzYWJsZSBhCisgICBkaWFnbm9zdGljIHdpdGhvdXQgZGlzYWJsaW5nIHRoZSBvcHRpb24gd2hpY2ggY2F1c2VzIGl0LiAgKi8KK0RFRklORV9ESUFHTk9TVElDX0tJTkQgKERLX0lHTk9SRUQsICIiKQorCisvKiBUaGUgcmVtYWluZGVyIGFyZSByZWFsIGRpYWdub3N0aWMgdHlwZXMuICAqLworREVGSU5FX0RJQUdOT1NUSUNfS0lORCAoREtfRkFUQUwsICJmYXRhbCBlcnJvcjogIikKK0RFRklORV9ESUFHTk9TVElDX0tJTkQgKERLX0lDRSwgImludGVybmFsIGNvbXBpbGVyIGVycm9yOiAiKQorREVGSU5FX0RJQUdOT1NUSUNfS0lORCAoREtfRVJST1IsICJlcnJvcjogIikKK0RFRklORV9ESUFHTk9TVElDX0tJTkQgKERLX1NPUlJZLCAic29ycnksIHVuaW1wbGVtZW50ZWQ6ICIpCitERUZJTkVfRElBR05PU1RJQ19LSU5EIChES19XQVJOSU5HLCAid2FybmluZzogIikKK0RFRklORV9ESUFHTk9TVElDX0tJTkQgKERLX0FOQUNIUk9OSVNNLCAiYW5hY2hyb25pc206ICIpCitERUZJTkVfRElBR05PU1RJQ19LSU5EIChES19OT1RFLCAibm90ZTogIikKK0RFRklORV9ESUFHTk9TVElDX0tJTkQgKERLX0RFQlVHLCAiZGVidWc6ICIpCisvKiBUaGVzZSB0d28gd291bGQgYmUgcmUtY2xhc3NpZmllZCBhcyBES19XQVJOSU5HIG9yIERLX0VSUk9SLCBzbyB0aGUKK3ByZWZpeCBkb2VzIG5vdCBtYXR0ZXIuICAqLworREVGSU5FX0RJQUdOT1NUSUNfS0lORCAoREtfUEVEV0FSTiwgInBlZHdhcm46ICIpCitERUZJTkVfRElBR05PU1RJQ19LSU5EIChES19QRVJNRVJST1IsICJwZXJtZXJyb3I6ICIpCisKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9kaWFnbm9zdGljLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvZGlhZ25vc3RpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YzE5ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvZGlhZ25vc3RpYy5oCkBAIC0wLDAgKzEsMjU3IEBACisvKiBWYXJpb3VzIGRlY2xhcmF0aW9ucyBmb3IgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgZGlhZ25vc3RpY3Mgc3Vicm91dGluZXMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKKyAgIDIwMTAsIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgR2FicmllbCBEb3MgUmVpcyA8Z2RyQGNvZGVzb3VyY2VyeS5jb20+CisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19ESUFHTk9TVElDX0gKKyNkZWZpbmUgR0NDX0RJQUdOT1NUSUNfSAorCisjaW5jbHVkZSAicHJldHR5LXByaW50LmgiCisjaW5jbHVkZSAib3B0aW9ucy5oIgorCisvKiBDb25zdGFudHMgdXNlZCB0byBkaXNjcmltaW5hdGUgZGlhZ25vc3RpY3MuICAqLwordHlwZWRlZiBlbnVtCit7CisjZGVmaW5lIERFRklORV9ESUFHTk9TVElDX0tJTkQoSywgbXNnaWQpIEssCisjaW5jbHVkZSAiZGlhZ25vc3RpYy5kZWYiCisjdW5kZWYgREVGSU5FX0RJQUdOT1NUSUNfS0lORAorICBES19MQVNUX0RJQUdOT1NUSUNfS0lORAorfSBkaWFnbm9zdGljX3Q7CisKKy8qIEEgZGlhZ25vc3RpYyBpcyBkZXNjcmliZWQgYnkgdGhlIE1FU1NBR0UgdG8gc2VuZCwgdGhlIEZJTEUgYW5kIExJTkUgb2YKKyAgIGl0cyBjb250ZXh0IGFuZCBpdHMgS0lORCAoaWNlLCBlcnJvciwgd2FybmluZywgbm90ZSwgLi4uKSAgU2VlIGNvbXBsZXRlCisgICBsaXN0IGluIGRpYWdub3N0aWMuZGVmLiAgKi8KK3R5cGVkZWYgc3RydWN0IGRpYWdub3N0aWNfaW5mbworeworICB0ZXh0X2luZm8gbWVzc2FnZTsKKyAgbG9jYXRpb25fdCBsb2NhdGlvbjsKKyAgdW5zaWduZWQgaW50IG92ZXJyaWRlX2NvbHVtbjsKKyAgLyogVFJFRV9CTE9DSyBpZiB0aGUgZGlhZ25vc3RpYyBpcyB0byBiZSByZXBvcnRlZCBpbiBzb21lIGlubGluZQorICAgICBmdW5jdGlvbiBpbmxpbmVkIGludG8gb3RoZXIgZnVuY3Rpb24sIG90aGVyd2lzZSBOVUxMLiAgKi8KKyAgdHJlZSBhYnN0cmFjdF9vcmlnaW47CisgIC8qIFRoZSBraW5kIG9mIGRpYWdub3N0aWMgaXQgaXMgYWJvdXQuICAqLworICBkaWFnbm9zdGljX3Qga2luZDsKKyAgLyogV2hpY2ggT1BUXyogZGlyZWN0bHkgY29udHJvbHMgdGhpcyBkaWFnbm9zdGljLiAgKi8KKyAgaW50IG9wdGlvbl9pbmRleDsKK30gZGlhZ25vc3RpY19pbmZvOworCisvKiAgRm9yd2FyZCBkZWNsYXJhdGlvbnMuICAqLwordHlwZWRlZiBzdHJ1Y3QgZGlhZ25vc3RpY19jb250ZXh0IGRpYWdub3N0aWNfY29udGV4dDsKK3R5cGVkZWYgdm9pZCAoKmRpYWdub3N0aWNfc3RhcnRlcl9mbikgKGRpYWdub3N0aWNfY29udGV4dCAqLAorCQkJCSAgICAgICBkaWFnbm9zdGljX2luZm8gKik7Cit0eXBlZGVmIGRpYWdub3N0aWNfc3RhcnRlcl9mbiBkaWFnbm9zdGljX2ZpbmFsaXplcl9mbjsKKworLyogVGhpcyBkYXRhIHN0cnVjdHVyZSBidW5kbGVzIGFsdG9nZXRoZXIgYW55IGluZm9ybWF0aW9uIHJlbGV2YW50IHRvCisgICB0aGUgY29udGV4dCBvZiBhIGRpYWdub3N0aWMgbWVzc2FnZS4gICovCitzdHJ1Y3QgZGlhZ25vc3RpY19jb250ZXh0Cit7CisgIC8qIFdoZXJlIG1vc3Qgb2YgdGhlIGRpYWdub3N0aWMgZm9ybWF0dGluZyB3b3JrIGlzIGRvbmUuICAqLworICBwcmV0dHlfcHJpbnRlciAqcHJpbnRlcjsKKworICAvKiBUaGUgbnVtYmVyIG9mIHRpbWVzIHdlIGhhdmUgaXNzdWVkIGRpYWdub3N0aWNzLiAgKi8KKyAgaW50IGRpYWdub3N0aWNfY291bnRbREtfTEFTVF9ESUFHTk9TVElDX0tJTkRdOworCisgIC8qIFRydWUgaWYgd2Ugc2hvdWxkIGRpc3BsYXkgdGhlICJ3YXJuaW5ncyBhcmUgYmVpbmcgdHJlYWQgYXMgZXJyb3IiCisgICAgIG1lc3NhZ2UsIHVzdWFsbHkgZGlzcGxheWVkIG9uY2UgcGVyIGNvbXBpbGVyIHJ1bi4gICovCisgIGJvb2wgaXNzdWVfd2FybmluZ3NfYXJlX2Vycm9yc19tZXNzYWdlOworCisgIC8qIFRydWUgaWYgaXQgaGFzIGJlZW4gcmVxdWVzdGVkIHRoYXQgd2FybmluZ3MgYmUgdHJlYXRlZCBhcyBlcnJvcnMuICAqLworICBib29sIHdhcm5pbmdfYXNfZXJyb3JfcmVxdWVzdGVkOworCisgIC8qIEZvciBlYWNoIG9wdGlvbiBpbmRleCB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gd2FybmluZygpIGV0IGFsbAorICAgICAoT1BUXyogZnJvbSBvcHRpb25zLmgpLCB0aGlzIGFycmF5IG1heSBjb250YWluIGEgbmV3IGtpbmQgdGhhdAorICAgICB0aGUgZGlhZ25vc3RpYyBzaG91bGQgYmUgY2hhbmdlZCB0byBiZWZvcmUgcmVwb3J0aW5nLCBvcgorICAgICBES19VTlNQRUNJRklFRCB0byBsZWF2ZSBpdCBhcyB0aGUgcmVwb3J0ZWQga2luZCwgb3IgREtfSUdOT1JFRCB0bworICAgICBub3QgcmVwb3J0IGl0IGF0IGFsbC4gIE5fT1BUUyBpcyBmcm9tIDxvcHRpb25zLmg+LiAgKi8KKyAgZGlhZ25vc3RpY190IGNsYXNzaWZ5X2RpYWdub3N0aWNbTl9PUFRTXTsKKworICAvKiBUcnVlIGlmIHdlIHNob3VsZCBwcmludCB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbiB3aGljaCBjb250cm9scworICAgICBlYWNoIGRpYWdub3N0aWMsIGlmIGtub3duLiAgKi8KKyAgYm9vbCBzaG93X29wdGlvbl9yZXF1ZXN0ZWQ7CisKKyAgLyogVHJ1ZSBpZiB3ZSBzaG91bGQgcmFpc2UgYSBTSUdBQlJUIG9uIGVycm9ycy4gICovCisgIGJvb2wgYWJvcnRfb25fZXJyb3I7CisKKyAgLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIGFueSBtZXNzYWdlIGlzIHByaW50ZWQgb3V0LiAgSXQgaXMKKyAgICAgcmVzcG9uc2libGUgZm9yIHByZXBhcmluZyBtZXNzYWdlIHByZWZpeCBhbmQgc3VjaC4gIEZvciBleGFtcGxlLCBpdAorICAgICBtaWdodCBzYXk6CisgICAgIEluIGZpbGUgaW5jbHVkZWQgZnJvbSAiL3Vzci9sb2NhbC9pbmNsdWRlL2N1cnNlcy5oOjU6CisgICAgICAgICAgICAgICAgICAgICAgZnJvbSAiL2hvbWUvZ2RyL3NyYy9uaWZ0eV9wcmludGVyLmg6NTY6CisgICAgICAgICAgICAgICAgICAgICAgLi4uCisgICovCisgIGRpYWdub3N0aWNfc3RhcnRlcl9mbiBiZWdpbl9kaWFnbm9zdGljOworCisgIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIHRoZSBkaWFnbm9zdGljIG1lc3NhZ2UgaXMgcHJpbnRlZC4gICovCisgIGRpYWdub3N0aWNfZmluYWxpemVyX2ZuIGVuZF9kaWFnbm9zdGljOworCisgIC8qIENsaWVudCBob29rIHRvIHJlcG9ydCBhbiBpbnRlcm5hbCBlcnJvci4gICovCisgIHZvaWQgKCppbnRlcm5hbF9lcnJvcikgKGNvbnN0IGNoYXIgKiwgdmFfbGlzdCAqKTsKKworICAvKiBGdW5jdGlvbiBvZiBsYXN0IGRpYWdub3N0aWMgbWVzc2FnZTsgbW9yZSBnZW5lcmFsbHksIGZ1bmN0aW9uIHN1Y2ggdGhhdAorICAgICBpZiBuZXh0IGRpYWdub3N0aWMgbWVzc2FnZSBpcyBpbiBpdCB0aGVuIHdlIGRvbid0IGhhdmUgdG8gbWVudGlvbiB0aGUKKyAgICAgZnVuY3Rpb24gbmFtZS4gICovCisgIHRyZWUgbGFzdF9mdW5jdGlvbjsKKworICAvKiBVc2VkIHRvIGRldGVjdCB3aGVuIHRoZSBpbnB1dCBmaWxlIHN0YWNrIGhhcyBjaGFuZ2VkIHNpbmNlIGxhc3QKKyAgICAgZGVzY3JpYmVkLiAgKi8KKyAgY29uc3Qgc3RydWN0IGxpbmVfbWFwICpsYXN0X21vZHVsZTsKKworICBpbnQgbG9jazsKKworICBib29sIGluaGliaXRfbm90ZXNfcDsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZGlhZ25vc3RpY19pbmhpYml0X25vdGVzIChkaWFnbm9zdGljX2NvbnRleHQgKiBjb250ZXh0KQoreworICBjb250ZXh0LT5pbmhpYml0X25vdGVzX3AgPSB0cnVlOworfQorCisKKy8qIENsaWVudCBzdXBwbGllZCBmdW5jdGlvbiB0byBhbm5vdW5jZSBhIGRpYWdub3N0aWMuICAqLworI2RlZmluZSBkaWFnbm9zdGljX3N0YXJ0ZXIoREMpIChEQyktPmJlZ2luX2RpYWdub3N0aWMKKworLyogQ2xpZW50IHN1cHBsaWVkIGZ1bmN0aW9uIGNhbGxlZCBhZnRlciBhIGRpYWdub3N0aWMgbWVzc2FnZSBpcworICAgZGlzcGxheWVkLiAgKi8KKyNkZWZpbmUgZGlhZ25vc3RpY19maW5hbGl6ZXIoREMpIChEQyktPmVuZF9kaWFnbm9zdGljCisKKy8qIEV4dGVuc2lvbiBob29rIGZvciBjbGllbnQuICAqLworI2RlZmluZSBkaWFnbm9zdGljX2F1eGlsaWFyeV9kYXRhKERDKSAoREMpLT54X2RhdGEKKworLyogU2FtZSBhcyBwcF9mb3JtYXRfZGVjb2Rlci4gIFdvcmtzIG9uICdkaWFnbm9zdGljX2NvbnRleHQgKicuICAqLworI2RlZmluZSBkaWFnbm9zdGljX2Zvcm1hdF9kZWNvZGVyKERDKSAoKERDKS0+cHJpbnRlci0+Zm9ybWF0X2RlY29kZXIpCisKKy8qIFNhbWUgYXMgb3V0cHV0X3ByZWZpeGluZ19ydWxlLiAgV29ya3Mgb24gJ2RpYWdub3N0aWNfY29udGV4dCAqJy4gICovCisjZGVmaW5lIGRpYWdub3N0aWNfcHJlZml4aW5nX3J1bGUoREMpICgoREMpLT5wcmludGVyLT53cmFwcGluZy5ydWxlKQorCisvKiBNYXhpbXVtIGNoYXJhY3RlcnMgcGVyIGxpbmUgaW4gYXV0b21hdGljIGxpbmUgd3JhcHBpbmcgbW9kZS4KKyAgIFplcm8gbWVhbnMgZG9uJ3Qgd3JhcCBsaW5lcy4gICovCisjZGVmaW5lIGRpYWdub3N0aWNfbGluZV9jdXRvZmYoREMpICgoREMpLT5wcmludGVyLT53cmFwcGluZy5saW5lX2N1dG9mZikKKworI2RlZmluZSBkaWFnbm9zdGljX2ZsdXNoX2J1ZmZlcihEQykgcHBfYmFzZV9mbHVzaCAoKERDKS0+cHJpbnRlcikKKworLyogVHJ1ZSBpZiB0aGUgbGFzdCBmdW5jdGlvbiBpbiB3aGljaCBhIGRpYWdub3N0aWMgd2FzIHJlcG9ydGVkIGlzCisgICBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBvbmUuICAqLworI2RlZmluZSBkaWFnbm9zdGljX2xhc3RfZnVuY3Rpb25fY2hhbmdlZChEQywgREkpIFwKKyAgKChEQyktPmxhc3RfZnVuY3Rpb24gIT0gKChESSktPmFic3RyYWN0X29yaWdpbiBcCisJCQkgICA/IChESSktPmFic3RyYWN0X29yaWdpbiA6IGN1cnJlbnRfZnVuY3Rpb25fZGVjbCkpCisKKy8qIFJlbWVtYmVyIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGFzIGJlaW5nIHRoZSBsYXN0IG9uZSBpbiB3aGljaCB3ZSByZXBvcnQKKyAgIGEgZGlhZ25vc3RpYy4gICovCisjZGVmaW5lIGRpYWdub3N0aWNfc2V0X2xhc3RfZnVuY3Rpb24oREMsIERJKSBcCisgIChEQyktPmxhc3RfZnVuY3Rpb24gPSAoKChESSkgJiYgKERJKS0+YWJzdHJhY3Rfb3JpZ2luKSBcCisJCQkgPyAoREkpLT5hYnN0cmFjdF9vcmlnaW4gOiBjdXJyZW50X2Z1bmN0aW9uX2RlY2wpCisKKy8qIFRydWUgaWYgdGhlIGxhc3QgbW9kdWxlIG9yIGZpbGUgaW4gd2hpY2ggYSBkaWFnbm9zdGljIHdhcyByZXBvcnRlZCBpcworICAgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgb25lLiAgKi8KKyNkZWZpbmUgZGlhZ25vc3RpY19sYXN0X21vZHVsZV9jaGFuZ2VkKERDLCBNQVApCVwKKyAgKChEQyktPmxhc3RfbW9kdWxlICE9IE1BUCkKKworLyogUmVtZW1iZXIgdGhlIGN1cnJlbnQgbW9kdWxlIG9yIGZpbGUgYXMgYmVpbmcgdGhlIGxhc3Qgb25lIGluIHdoaWNoIHdlCisgICByZXBvcnQgYSBkaWFnbm9zdGljLiAgKi8KKyNkZWZpbmUgZGlhZ25vc3RpY19zZXRfbGFzdF9tb2R1bGUoREMsIE1BUCkJXAorICAoREMpLT5sYXN0X21vZHVsZSA9IE1BUAorCisvKiBSYWlzZSBTSUdBQlJUIG9uIGFueSBkaWFnbm9zdGljIG9mIHNldmVyaXR5IERLX0VSUk9SIG9yIGhpZ2hlci4gICovCisjZGVmaW5lIGRpYWdub3N0aWNfYWJvcnRfb25fZXJyb3IoREMpIFwKKyAgKERDKS0+YWJvcnRfb25fZXJyb3IgPSB0cnVlCisKKy8qIFRoaXMgZGlhZ25vc3RpY19jb250ZXh0IGlzIHVzZWQgYnkgZnJvbnQtZW5kcyB0aGF0IGRpcmVjdGx5IG91dHB1dAorICAgZGlhZ25vc3RpYyBtZXNzYWdlcyB3aXRob3V0IGdvaW5nIHRocm91Z2ggYGVycm9yJywgYHdhcm5pbmcnLAorICAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zLiAgKi8KK2V4dGVybiBkaWFnbm9zdGljX2NvbnRleHQgKmdsb2JhbF9kYzsKKworLyogVGhlIHRvdGFsIGNvdW50IG9mIGEgS0lORCBvZiBkaWFnbm9zdGljcyBlbWl0dGVkIHNvIGZhci4gICovCisjZGVmaW5lIGRpYWdub3N0aWNfa2luZF9jb3VudChEQywgREspIChEQyktPmRpYWdub3N0aWNfY291bnRbKGludCkgKERLKV0KKworLyogVGhlIG51bWJlciBvZiBlcnJvcnMgdGhhdCBoYXZlIGJlZW4gaXNzdWVkIHNvIGZhci4gIElkZWFsbHksIHRoZXNlCisgICB3b3VsZCB0YWtlIGEgZGlhZ25vc3RpY19jb250ZXh0IGFzIGFuIGFyZ3VtZW50LiAgKi8KKyNkZWZpbmUgZXJyb3Jjb3VudCBkaWFnbm9zdGljX2tpbmRfY291bnQgKGdsb2JhbF9kYywgREtfRVJST1IpCisvKiBTaW1pbGFybHksIGJ1dCBmb3Igd2FybmluZ3MuICAqLworI2RlZmluZSB3YXJuaW5nY291bnQgZGlhZ25vc3RpY19raW5kX2NvdW50IChnbG9iYWxfZGMsIERLX1dBUk5JTkcpCisvKiBTaW1pbGFybHksIGJ1dCBmb3Igc29ycnlzLiAgKi8KKyNkZWZpbmUgc29ycnljb3VudCBkaWFnbm9zdGljX2tpbmRfY291bnQgKGdsb2JhbF9kYywgREtfU09SUlkpCisKKy8qIFJldHVybnMgbm9uemVybyBpZiB3YXJuaW5ncyBzaG91bGQgYmUgZW1pdHRlZC4gICovCisjZGVmaW5lIGRpYWdub3N0aWNfcmVwb3J0X3dhcm5pbmdzX3AoTE9DKQkJCVwKKyAgKCFpbmhpYml0X3dhcm5pbmdzCQkJCQlcCisgICAmJiAhKGluX3N5c3RlbV9oZWFkZXJfYXQgKExPQykgJiYgIXdhcm5fc3lzdGVtX2hlYWRlcnMpKQorCisjZGVmaW5lIHJlcG9ydF9kaWFnbm9zdGljKEQpIGRpYWdub3N0aWNfcmVwb3J0X2RpYWdub3N0aWMgKGdsb2JhbF9kYywgRCkKKworLyogT3ZlcnJpZGUgdGhlIGNvbHVtbiBudW1iZXIgdG8gYmUgdXNlZCBmb3IgcmVwb3J0aW5nIGEKKyAgIGRpYWdub3N0aWMuICAqLworI2RlZmluZSBkaWFnbm9zdGljX292ZXJyaWRlX2NvbHVtbihESSwgQ09MKSAoREkpLT5vdmVycmlkZV9jb2x1bW4gPSAoQ09MKQorCisvKiBEaWFnbm9zdGljIHJlbGF0ZWQgZnVuY3Rpb25zLiAgKi8KK2V4dGVybiB2b2lkIGRpYWdub3N0aWNfaW5pdGlhbGl6ZSAoZGlhZ25vc3RpY19jb250ZXh0ICopOworZXh0ZXJuIHZvaWQgZGlhZ25vc3RpY19yZXBvcnRfY3VycmVudF9tb2R1bGUgKGRpYWdub3N0aWNfY29udGV4dCAqKTsKK2V4dGVybiB2b2lkIGRpYWdub3N0aWNfcmVwb3J0X2N1cnJlbnRfZnVuY3Rpb24gKGRpYWdub3N0aWNfY29udGV4dCAqLAorCQkJCQkJZGlhZ25vc3RpY19pbmZvICopOworCisvKiBGb3JjZSBkaWFnbm9zdGljcyBjb250cm9sbGVkIGJ5IE9QVElEWCB0byBiZSBraW5kIEtJTkQuICAqLworZXh0ZXJuIGRpYWdub3N0aWNfdCBkaWFnbm9zdGljX2NsYXNzaWZ5X2RpYWdub3N0aWMgKGRpYWdub3N0aWNfY29udGV4dCAqLAorCQkJCQkJICAgIGludCAvKiBvcHRpZHggKi8sCisJCQkJCQkgICAgZGlhZ25vc3RpY190IC8qIGtpbmQgKi8pOworZXh0ZXJuIGJvb2wgZGlhZ25vc3RpY19yZXBvcnRfZGlhZ25vc3RpYyAoZGlhZ25vc3RpY19jb250ZXh0ICosCisJCQkJCSAgZGlhZ25vc3RpY19pbmZvICopOworI2lmZGVmIEFUVFJJQlVURV9HQ0NfRElBRworZXh0ZXJuIHZvaWQgZGlhZ25vc3RpY19zZXRfaW5mbyAoZGlhZ25vc3RpY19pbmZvICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCAqLAorCQkJCSBsb2NhdGlvbl90LCBkaWFnbm9zdGljX3QpIEFUVFJJQlVURV9HQ0NfRElBRygyLDApOworZXh0ZXJuIHZvaWQgZGlhZ25vc3RpY19zZXRfaW5mb190cmFuc2xhdGVkIChkaWFnbm9zdGljX2luZm8gKiwgY29uc3QgY2hhciAqLAorCQkJCQkgICAgdmFfbGlzdCAqLCBsb2NhdGlvbl90LAorCQkJCQkgICAgZGlhZ25vc3RpY190KQorICAgICBBVFRSSUJVVEVfR0NDX0RJQUcoMiwwKTsKK2V4dGVybiBib29sIGVtaXRfZGlhZ25vc3RpYyAoZGlhZ25vc3RpY190LCBsb2NhdGlvbl90LCBpbnQsCisJCQkgICAgIGNvbnN0IGNoYXIgKiwgLi4uKSBBVFRSSUJVVEVfR0NDX0RJQUcoNCw1KTsKKyNlbmRpZgorZXh0ZXJuIGNoYXIgKmRpYWdub3N0aWNfYnVpbGRfcHJlZml4IChkaWFnbm9zdGljX2luZm8gKik7Cit2b2lkIGRlZmF1bHRfZGlhZ25vc3RpY19zdGFydGVyIChkaWFnbm9zdGljX2NvbnRleHQgKiwgZGlhZ25vc3RpY19pbmZvICopOwordm9pZCBkZWZhdWx0X2RpYWdub3N0aWNfZmluYWxpemVyIChkaWFnbm9zdGljX2NvbnRleHQgKiwgZGlhZ25vc3RpY19pbmZvICopOworCisvKiBQdXJlIHRleHQgZm9ybWF0dGluZyBzdXBwb3J0IGZ1bmN0aW9ucy4gICovCitleHRlcm4gY2hhciAqZmlsZV9uYW1lX2FzX3ByZWZpeCAoY29uc3QgY2hhciAqKTsKKworLyogSW4gdHJlZS1wcmV0dHktcHJpbnQuYyAgKi8KK2V4dGVybiB2b2lkIHByaW50X2RlY2xhcmF0aW9uIChwcmV0dHlfcHJpbnRlciAqLCB0cmVlLCBpbnQsIGludCk7CitleHRlcm4gaW50IGR1bXBfZ2VuZXJpY19ub2RlIChwcmV0dHlfcHJpbnRlciAqLCB0cmVlLCBpbnQsIGludCwgYm9vbCk7CitleHRlcm4gdm9pZCBwcmludF9nZW5lcmljX3N0bXQgKEZJTEUgKiwgdHJlZSwgaW50KTsKK2V4dGVybiB2b2lkIHByaW50X2dlbmVyaWNfc3RtdF9pbmRlbnRlZCAoRklMRSAqLCB0cmVlLCBpbnQsIGludCk7CitleHRlcm4gdm9pZCBwcmludF9nZW5lcmljX2V4cHIgKEZJTEUgKiwgdHJlZSwgaW50KTsKK2V4dGVybiB2b2lkIHByaW50X2dlbmVyaWNfZGVjbCAoRklMRSAqLCB0cmVlLCBpbnQpOworZXh0ZXJuIHZvaWQgZGVidWdfY190cmVlICh0cmVlKTsKK2V4dGVybiB2b2lkIGR1bXBfb21wX2NsYXVzZXMgKHByZXR0eV9wcmludGVyICosIHRyZWUsIGludCwgaW50KTsKK2V4dGVybiB2b2lkIHByaW50X2NhbGxfbmFtZSAocHJldHR5X3ByaW50ZXIgKiwgdHJlZSwgaW50KTsKKworLyogSW4gZ2ltcGxlLXByZXR0eS1wcmludC5jICAqLworZXh0ZXJuIHZvaWQgZGVidWdfZ2VuZXJpY19leHByICh0cmVlKTsKK2V4dGVybiB2b2lkIGRlYnVnX2dlbmVyaWNfc3RtdCAodHJlZSk7CitleHRlcm4gdm9pZCBkZWJ1Z190cmVlX2NoYWluICh0cmVlKTsKK2V4dGVybiB2b2lkIGRlYnVnX2dpbXBsZV9zdG10IChnaW1wbGUpOworZXh0ZXJuIHZvaWQgZGVidWdfZ2ltcGxlX3NlcSAoZ2ltcGxlX3NlcSk7CitleHRlcm4gdm9pZCBwcmludF9naW1wbGVfc2VxIChGSUxFICosIGdpbXBsZV9zZXEsIGludCwgaW50KTsKK2V4dGVybiB2b2lkIHByaW50X2dpbXBsZV9zdG10IChGSUxFICosIGdpbXBsZSwgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgcHJpbnRfZ2ltcGxlX2V4cHIgKEZJTEUgKiwgZ2ltcGxlLCBpbnQsIGludCk7CitleHRlcm4gdm9pZCBkdW1wX2dpbXBsZV9zdG10IChwcmV0dHlfcHJpbnRlciAqLCBnaW1wbGUsIGludCwgaW50KTsKKworLyogSW4gdG9wbGV2LmMgICovCitleHRlcm4gYm9vbCBkZWZhdWx0X3RyZWVfcHJpbnRlciAocHJldHR5X3ByaW50ZXIgKiwgdGV4dF9pbmZvICosIGNvbnN0IGNoYXIgKiwKKwkJCQkgIGludCwgYm9vbCwgYm9vbCwgYm9vbCk7CisKKyNlbmRpZiAvKiAhIEdDQ19ESUFHTk9TVElDX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9kb3VibGUtaW50LmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvZG91YmxlLWludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MTg1ODkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvZG91YmxlLWludC5oCkBAIC0wLDAgKzEsMTg4IEBACisvKiBPcGVyYXRpb25zIHdpdGggbG9uZyBpbnRlZ2Vycy4KKyAgIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitsYXRlciB2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKK0FOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgRE9VQkxFX0lOVF9ICisjZGVmaW5lIERPVUJMRV9JTlRfSAorCisjaWZuZGVmIEdFTkVSQVRPUl9GSUxFCisjaW5jbHVkZSA8Z21wLmg+CisjZW5kaWYKKyNpbmNsdWRlICJjb3JldHlwZXMuaCIKKworLyogQSBsYXJnZSBpbnRlZ2VyIGlzIGN1cnJlbnRseSByZXByZXNlbnRlZCBhcyBhIHBhaXIgb2YgSE9TVF9XSURFX0lOVHMuCisgICBJdCB0aGVyZWZvcmUgcmVwcmVzZW50cyBhIG51bWJlciB3aXRoIHByZWNpc2lvbiBvZgorICAgMiAqIEhPU1RfQklUU19QRVJfV0lERV9JTlQgYml0cyAoaXQgaXMgaG93ZXZlciBwb3NzaWJsZSB0aGF0IHRoZQorICAgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gd2lsbCBjaGFuZ2UsIGlmIG51bWJlcnMgd2l0aCBncmVhdGVyIHByZWNpc2lvbgorICAgYXJlIG5lZWRlZCwgc28gdGhlIHVzZXJzIHNob3VsZCBub3QgcmVseSBvbiBpdCkuICBUaGUgcmVwcmVzZW50YXRpb24gZG9lcworICAgbm90IGNvbnRhaW4gYW55IGluZm9ybWF0aW9uIGFib3V0IHNpZ25lZG5lc3Mgb2YgdGhlIHJlcHJlc2VudGVkIHZhbHVlLCBzbworICAgaXQgY2FuIGJlIHVzZWQgdG8gcmVwcmVzZW50IGJvdGggc2lnbmVkIGFuZCB1bnNpZ25lZCBudW1iZXJzLiAgRm9yCisgICBvcGVyYXRpb25zIHdoZXJlIHRoZSByZXN1bHRzIGRlcGVuZCBvbiBzaWduZWRuZXNzIChkaXZpc2lvbiwgY29tcGFyaXNvbnMpLAorICAgaXQgbXVzdCBiZSBzcGVjaWZpZWQgc2VwYXJhdGVseS4gIEZvciBlYWNoIHN1Y2ggb3BlcmF0aW9uLCB0aGVyZSBhcmUgdGhyZWUKKyAgIHZlcnNpb25zIG9mIHRoZSBmdW5jdGlvbiAtLSBkb3VibGVfaW50X29wLCB0aGF0IHRha2VzIGFuIGV4dHJhIFVOUyBhcmd1bWVudAorICAgZ2l2aW5nIHRoZSBzaWduZWRuZXNzIG9mIHRoZSB2YWx1ZXMsIGFuZCBkb3VibGVfaW50X3NvcCBhbmQgZG91YmxlX2ludF91b3AKKyAgIHRoYXQgc3RhbmQgZm9yIGl0cyBzcGVjaWFsaXphdGlvbnMgZm9yIHNpZ25lZCBhbmQgdW5zaWduZWQgdmFsdWVzLgorCisgICBZb3UgbWF5IGFsc28gcmVwcmVzZW50IHdpdGggbnVtYmVycyBpbiBzbWFsbGVyIHByZWNpc2lvbiB1c2luZyBkb3VibGVfaW50LgorICAgWW91IGhvd2V2ZXIgbmVlZCB0byB1c2UgZG91YmxlX2ludF9leHQgKHRoYXQgZmlsbHMgaW4gdGhlIGJpdHMgb2YgdGhlCisgICBudW1iZXIgb3ZlciB0aGUgcHJlc2NyaWJlZCBwcmVjaXNpb24gd2l0aCB6ZXJvcyBvciB3aXRoIHRoZSBzaWduIGJpdCkgYmVmb3JlCisgICBvcGVyYXRpb25zIHRoYXQgZG8gbm90IHBlcmZvcm0gYXJpdGhtZXRpY3MgbW9kdWxvIDJecHJlY2lzaW9uIChjb21wYXJpc29ucywKKyAgIGRpdmlzaW9uKSwgYW5kIHBvc3NpYmx5IGJlZm9yZSBzdG9yaW5nIHRoZSByZXN1bHRzLCBpZiB5b3Ugd2FudCB0byBrZWVwCisgICB0aGVtIGluIHNvbWUgY2Fub25pY2FsIGZvcm0pLiAgSW4gZ2VuZXJhbCwgdGhlIHNpZ25lZG5lc3Mgb2YgZG91YmxlX2ludF9leHQKKyAgIHNob3VsZCBtYXRjaCB0aGUgc2lnbmVkbmVzcyBvZiB0aGUgb3BlcmF0aW9uLgorCisgICA/Pz8gVGhlIGNvbXBvbmVudHMgb2YgZG91YmxlX2ludCBkaWZmZXIgaW4gc2lnbmVkbmVzcyBtb3N0bHkgZm9yCisgICBoaXN0b3JpY2FsIHJlYXNvbnMgKHRoZXkgcmVwbGFjZSBhbiBvbGRlciBzdHJ1Y3R1cmUgdXNlZCB0byByZXByZXNlbnQKKyAgIG51bWJlcnMgd2l0aCBwcmVjaXNpb24gaGlnaGVyIHRoYW4gSE9TVF9XSURFX0lOVCkuICBJdCBtaWdodCBiZSBsZXNzCisgICBjb25mdXNpbmcgdG8gaGF2ZSB0aGVtIGJvdGggc2lnbmVkIG9yIGJvdGggdW5zaWduZWQuICAqLworCit0eXBlZGVmIHN0cnVjdAoreworICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGxvdzsKKyAgSE9TVF9XSURFX0lOVCBoaWdoOworfSBkb3VibGVfaW50OworCit1bmlvbiB0cmVlX25vZGU7CisKKy8qIENvbnN0cnVjdG9ycyBhbmQgY29udmVyc2lvbnMuICAqLworCit1bmlvbiB0cmVlX25vZGUgKmRvdWJsZV9pbnRfdG9fdHJlZSAodW5pb24gdHJlZV9ub2RlICosIGRvdWJsZV9pbnQpOworYm9vbCBkb3VibGVfaW50X2ZpdHNfdG9fdHJlZV9wIChjb25zdCB1bmlvbiB0cmVlX25vZGUgKiwgZG91YmxlX2ludCk7Citkb3VibGVfaW50IHRyZWVfdG9fZG91YmxlX2ludCAoY29uc3QgdW5pb24gdHJlZV9ub2RlICopOworCisvKiBDb25zdHJ1Y3RzIGRvdWJsZV9pbnQgZnJvbSBpbnRlZ2VyIENTVC4gIFRoZSBiaXRzIG92ZXIgdGhlIHByZWNpc2lvbiBvZgorICAgSE9TVF9XSURFX0lOVCBhcmUgZmlsbGVkIHdpdGggdGhlIHNpZ24gYml0LiAgKi8KKworc3RhdGljIGlubGluZSBkb3VibGVfaW50CitzaHdpX3RvX2RvdWJsZV9pbnQgKEhPU1RfV0lERV9JTlQgY3N0KQoreworICBkb3VibGVfaW50IHI7CisKKyAgci5sb3cgPSAodW5zaWduZWQgSE9TVF9XSURFX0lOVCkgY3N0OworICByLmhpZ2ggPSBjc3QgPCAwID8gLTEgOiAwOworCisgIHJldHVybiByOworfQorCisvKiBTb21lIHVzZWZ1bCBjb25zdGFudHMuICAqLworCisjZGVmaW5lIGRvdWJsZV9pbnRfbWludXNfb25lIChzaHdpX3RvX2RvdWJsZV9pbnQgKC0xKSkKKyNkZWZpbmUgZG91YmxlX2ludF96ZXJvIChzaHdpX3RvX2RvdWJsZV9pbnQgKDApKQorI2RlZmluZSBkb3VibGVfaW50X29uZSAoc2h3aV90b19kb3VibGVfaW50ICgxKSkKKyNkZWZpbmUgZG91YmxlX2ludF90d28gKHNod2lfdG9fZG91YmxlX2ludCAoMikpCisjZGVmaW5lIGRvdWJsZV9pbnRfdGVuIChzaHdpX3RvX2RvdWJsZV9pbnQgKDEwKSkKKworLyogQ29uc3RydWN0cyBkb3VibGVfaW50IGZyb20gdW5zaWduZWQgaW50ZWdlciBDU1QuICBUaGUgYml0cyBvdmVyIHRoZQorICAgcHJlY2lzaW9uIG9mIEhPU1RfV0lERV9JTlQgYXJlIGZpbGxlZCB3aXRoIHplcm9zLiAgKi8KKworc3RhdGljIGlubGluZSBkb3VibGVfaW50Cit1aHdpX3RvX2RvdWJsZV9pbnQgKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgY3N0KQoreworICBkb3VibGVfaW50IHI7CisKKyAgci5sb3cgPSBjc3Q7CisgIHIuaGlnaCA9IDA7CisKKyAgcmV0dXJuIHI7Cit9CisKKy8qIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBwZXJmb3JtIGFyaXRobWV0aWNzIG1vZHVsbyAyXnByZWNpc2lvbiwKKyAgIHNvIHlvdSBkbyBub3QgbmVlZCB0byBjYWxsIGRvdWJsZV9pbnRfZXh0IGJldHdlZW4gdGhlbSwgZXZlbiBpZgorICAgeW91IGFyZSByZXByZXNlbnRpbmcgbnVtYmVycyB3aXRoIHByZWNpc2lvbiBsZXNzIHRoYW4KKyAgIDIgKiBIT1NUX0JJVFNfUEVSX1dJREVfSU5UIGJpdHMuICAqLworCitkb3VibGVfaW50IGRvdWJsZV9pbnRfbXVsIChkb3VibGVfaW50LCBkb3VibGVfaW50KTsKK2RvdWJsZV9pbnQgZG91YmxlX2ludF9hZGQgKGRvdWJsZV9pbnQsIGRvdWJsZV9pbnQpOworZG91YmxlX2ludCBkb3VibGVfaW50X25lZyAoZG91YmxlX2ludCk7CisKKy8qIFlvdSBtdXN0IGVuc3VyZSB0aGF0IGRvdWJsZV9pbnRfZXh0IGlzIGNhbGxlZCBvbiB0aGUgb3BlcmFuZHMKKyAgIG9mIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucywgaWYgdGhlIHByZWNpc2lvbiBvZiB0aGUgbnVtYmVycworICAgaXMgbGVzcyB0aGFuIDIgKiBIT1NUX0JJVFNfUEVSX1dJREVfSU5UIGJpdHMuICAqLworYm9vbCBkb3VibGVfaW50X2ZpdHNfaW5faHdpX3AgKGRvdWJsZV9pbnQsIGJvb2wpOworYm9vbCBkb3VibGVfaW50X2ZpdHNfaW5fc2h3aV9wIChkb3VibGVfaW50KTsKK2Jvb2wgZG91YmxlX2ludF9maXRzX2luX3Vod2lfcCAoZG91YmxlX2ludCk7CitIT1NUX1dJREVfSU5UIGRvdWJsZV9pbnRfdG9fc2h3aSAoZG91YmxlX2ludCk7Cit1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGRvdWJsZV9pbnRfdG9fdWh3aSAoZG91YmxlX2ludCk7Citkb3VibGVfaW50IGRvdWJsZV9pbnRfZGl2IChkb3VibGVfaW50LCBkb3VibGVfaW50LCBib29sLCB1bnNpZ25lZCk7Citkb3VibGVfaW50IGRvdWJsZV9pbnRfc2RpdiAoZG91YmxlX2ludCwgZG91YmxlX2ludCwgdW5zaWduZWQpOworZG91YmxlX2ludCBkb3VibGVfaW50X3VkaXYgKGRvdWJsZV9pbnQsIGRvdWJsZV9pbnQsIHVuc2lnbmVkKTsKK2RvdWJsZV9pbnQgZG91YmxlX2ludF9tb2QgKGRvdWJsZV9pbnQsIGRvdWJsZV9pbnQsIGJvb2wsIHVuc2lnbmVkKTsKK2RvdWJsZV9pbnQgZG91YmxlX2ludF9zbW9kIChkb3VibGVfaW50LCBkb3VibGVfaW50LCB1bnNpZ25lZCk7Citkb3VibGVfaW50IGRvdWJsZV9pbnRfdW1vZCAoZG91YmxlX2ludCwgZG91YmxlX2ludCwgdW5zaWduZWQpOworZG91YmxlX2ludCBkb3VibGVfaW50X2Rpdm1vZCAoZG91YmxlX2ludCwgZG91YmxlX2ludCwgYm9vbCwgdW5zaWduZWQsIGRvdWJsZV9pbnQgKik7Citkb3VibGVfaW50IGRvdWJsZV9pbnRfc2Rpdm1vZCAoZG91YmxlX2ludCwgZG91YmxlX2ludCwgdW5zaWduZWQsIGRvdWJsZV9pbnQgKik7Citkb3VibGVfaW50IGRvdWJsZV9pbnRfdWRpdm1vZCAoZG91YmxlX2ludCwgZG91YmxlX2ludCwgdW5zaWduZWQsIGRvdWJsZV9pbnQgKik7Citib29sIGRvdWJsZV9pbnRfbmVnYXRpdmVfcCAoZG91YmxlX2ludCk7CitpbnQgZG91YmxlX2ludF9jbXAgKGRvdWJsZV9pbnQsIGRvdWJsZV9pbnQsIGJvb2wpOworaW50IGRvdWJsZV9pbnRfc2NtcCAoZG91YmxlX2ludCwgZG91YmxlX2ludCk7CitpbnQgZG91YmxlX2ludF91Y21wIChkb3VibGVfaW50LCBkb3VibGVfaW50KTsKK3ZvaWQgZHVtcF9kb3VibGVfaW50IChGSUxFICosIGRvdWJsZV9pbnQsIGJvb2wpOworCisvKiBaZXJvIGFuZCBzaWduIGV4dGVuc2lvbiBvZiBudW1iZXJzIGluIHNtYWxsZXIgcHJlY2lzaW9ucy4gICovCisKK2RvdWJsZV9pbnQgZG91YmxlX2ludF9leHQgKGRvdWJsZV9pbnQsIHVuc2lnbmVkLCBib29sKTsKK2RvdWJsZV9pbnQgZG91YmxlX2ludF9zZXh0IChkb3VibGVfaW50LCB1bnNpZ25lZCk7Citkb3VibGVfaW50IGRvdWJsZV9pbnRfemV4dCAoZG91YmxlX2ludCwgdW5zaWduZWQpOworZG91YmxlX2ludCBkb3VibGVfaW50X21hc2sgKHVuc2lnbmVkKTsKKworI2RlZmluZSBBTExfT05FUyAofigodW5zaWduZWQgSE9TVF9XSURFX0lOVCkgMCkpCisKKy8qIFRoZSBvcGVyYW5kcyBvZiB0aGUgZm9sbG93aW5nIGNvbXBhcmlzb24gZnVuY3Rpb25zIG11c3QgYmUgcHJvY2Vzc2VkCisgICB3aXRoIGRvdWJsZV9pbnRfZXh0LCBpZiB0aGVpciBwcmVjaXNpb24gaXMgbGVzcyB0aGFuCisgICAyICogSE9TVF9CSVRTX1BFUl9XSURFX0lOVCBiaXRzLiAgKi8KKworLyogUmV0dXJucyB0cnVlIGlmIENTVCBpcyB6ZXJvLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitkb3VibGVfaW50X3plcm9fcCAoZG91YmxlX2ludCBjc3QpCit7CisgIHJldHVybiBjc3QubG93ID09IDAgJiYgY3N0LmhpZ2ggPT0gMDsKK30KKworLyogUmV0dXJucyB0cnVlIGlmIENTVCBpcyBvbmUuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2RvdWJsZV9pbnRfb25lX3AgKGRvdWJsZV9pbnQgY3N0KQoreworICByZXR1cm4gY3N0LmxvdyA9PSAxICYmIGNzdC5oaWdoID09IDA7Cit9CisKKy8qIFJldHVybnMgdHJ1ZSBpZiBDU1QgaXMgbWludXMgb25lLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitkb3VibGVfaW50X21pbnVzX29uZV9wIChkb3VibGVfaW50IGNzdCkKK3sKKyAgcmV0dXJuIChjc3QubG93ID09IEFMTF9PTkVTICYmIGNzdC5oaWdoID09IC0xKTsKK30KKworLyogUmV0dXJucyB0cnVlIGlmIENTVDEgPT0gQ1NUMi4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZG91YmxlX2ludF9lcXVhbF9wIChkb3VibGVfaW50IGNzdDEsIGRvdWJsZV9pbnQgY3N0MikKK3sKKyAgcmV0dXJuIGNzdDEubG93ID09IGNzdDIubG93ICYmIGNzdDEuaGlnaCA9PSBjc3QyLmhpZ2g7Cit9CisKKyNpZm5kZWYgR0VORVJBVE9SX0ZJTEUKKy8qIENvbnZlcnNpb24gdG8gYW5kIGZyb20gR01QIGludGVnZXIgcmVwcmVzZW50YXRpb25zLiAgKi8KKwordm9pZCBtcHpfc2V0X2RvdWJsZV9pbnQgKG1wel90LCBkb3VibGVfaW50LCBib29sKTsKK2RvdWJsZV9pbnQgbXB6X2dldF9kb3VibGVfaW50IChjb25zdF90cmVlLCBtcHpfdCwgYm9vbCk7CisjZW5kaWYKKworI2VuZGlmIC8qIERPVUJMRV9JTlRfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2VtaXQtcnRsLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvZW1pdC1ydGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTQ3OWUxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2VtaXQtcnRsLmgKQEAgLTAsMCArMSw1NCBAQAorLyogRXhwb3J0ZWQgZnVuY3Rpb25zIGZyb20gZW1pdC1ydGwuYworICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfRU1JVF9SVExfSAorI2RlZmluZSBHQ0NfRU1JVF9SVExfSAorCisvKiBTZXQgdGhlIGFsaWFzIHNldCBvZiBNRU0gdG8gU0VULiAgKi8KK2V4dGVybiB2b2lkIHNldF9tZW1fYWxpYXNfc2V0IChydHgsIGFsaWFzX3NldF90eXBlKTsKKworLyogU2V0IHRoZSBhbGlnbm1lbnQgb2YgTUVNIHRvIEFMSUdOIGJpdHMuICAqLworZXh0ZXJuIHZvaWQgc2V0X21lbV9hbGlnbiAocnR4LCB1bnNpZ25lZCBpbnQpOworCisvKiBTZXQgdGhlIGFkZHJlc3Mgc3BhY2Ugb2YgTUVNIHRvIEFERFJTUEFDRS4gICovCitleHRlcm4gdm9pZCBzZXRfbWVtX2FkZHJfc3BhY2UgKHJ0eCwgYWRkcl9zcGFjZV90KTsKKworLyogU2V0IHRoZSBleHByIGZvciBNRU0gdG8gRVhQUi4gICovCitleHRlcm4gdm9pZCBzZXRfbWVtX2V4cHIgKHJ0eCwgdHJlZSk7CisKKy8qIFNldCB0aGUgb2Zmc2V0IGZvciBNRU0gdG8gT0ZGU0VULiAgKi8KK2V4dGVybiB2b2lkIHNldF9tZW1fb2Zmc2V0IChydHgsIHJ0eCk7CisKKy8qIFNldCB0aGUgc2l6ZSBmb3IgTUVNIHRvIFNJWkUuICAqLworZXh0ZXJuIHZvaWQgc2V0X21lbV9zaXplIChydHgsIHJ0eCk7CisKKy8qIFNldCB0aGUgYXR0cmlidXRlcyBmb3IgTUVNIGFwcHJvcHJpYXRlIGZvciBhIHNwaWxsIHNsb3QuICAqLworZXh0ZXJuIHZvaWQgc2V0X21lbV9hdHRyc19mb3Jfc3BpbGwgKHJ0eCk7CitleHRlcm4gdHJlZSBnZXRfc3BpbGxfc2xvdF9kZWNsIChib29sKTsKKworLyogUmV0dXJuIGEgbWVtb3J5IHJlZmVyZW5jZSBsaWtlIE1FTVJFRiwgYnV0IHdpdGggaXRzIGFkZHJlc3MgY2hhbmdlZCB0bworICAgQUREUi4gIFRoZSBjYWxsZXIgaXMgYXNzZXJ0aW5nIHRoYXQgdGhlIGFjdHVhbCBwaWVjZSBvZiBtZW1vcnkgcG9pbnRlZAorICAgdG8gaXMgdGhlIHNhbWUsIGp1c3QgdGhlIGZvcm0gb2YgdGhlIGFkZHJlc3MgaXMgYmVpbmcgY2hhbmdlZCwgc3VjaCBhcworICAgYnkgcHV0dGluZyBzb21ldGhpbmcgaW50byBhIHJlZ2lzdGVyLiAgKi8KK2V4dGVybiBydHggcmVwbGFjZV9lcXVpdl9hZGRyZXNzIChydHgsIHJ0eCk7CisKKy8qIExpa2V3aXNlLCBidXQgdGhlIHJlZmVyZW5jZSBpcyBub3QgcmVxdWlyZWQgdG8gYmUgdmFsaWQuICAqLworZXh0ZXJuIHJ0eCByZXBsYWNlX2VxdWl2X2FkZHJlc3NfbnYgKHJ0eCwgcnR4KTsKKworI2VuZGlmIC8qIEdDQ19FTUlUX1JUTF9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvZXhjZXB0LmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvZXhjZXB0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlmNjIwYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9leGNlcHQuaApAQCAtMCwwICsxLDM5MCBAQAorLyogRXhjZXB0aW9uIEhhbmRsaW5nIGludGVyZmFjZSByb3V0aW5lcy4KKyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwKKyAgIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgTWlrZSBTdHVtcCA8bXJzQGN5Z251cy5jb20+LgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgInNiaXRtYXAuaCIKKyNpbmNsdWRlICJ2ZWNwcmltLmgiCisKK3N0cnVjdCBmdW5jdGlvbjsKK3N0cnVjdCBlaF9yZWdpb25fZDsKK3N0cnVjdCBwb2ludGVyX21hcF90OworCisvKiBUaGUgdHlwZSBvZiBhbiBleGNlcHRpb24gcmVnaW9uLiAgKi8KK2VudW0gZWhfcmVnaW9uX3R5cGUKK3sKKyAgLyogQ0xFQU5VUCByZWdpb25zIGltcGxlbWVudCBlLmcuIGRlc3RydWN0b3JzIHJ1biB3aGVuIGV4aXRpbmcgYSBibG9jay4KKyAgICAgVGhleSBjYW4gYmUgZ2VuZXJhdGVkIGZyb20gYm90aCBHSU1QTEVfVFJZX0ZJTkFMTFkgYW5kIEdJTVBMRV9UUllfQ0FUQ0gKKyAgICAgbm9kZXMuICBJdCBpcyBleHBlY3RlZCBieSB0aGUgcnVudGltZSB0aGF0IGNsZWFudXAgcmVnaW9ucyB3aWxsICpub3QqCisgICAgIHJlc3VtZSBub3JtYWwgcHJvZ3JhbSBmbG93LCBidXQgd2lsbCBjb250aW51ZSBwcm9wYWdhdGlvbiBvZiB0aGUKKyAgICAgZXhjZXB0aW9uLiAgKi8KKyAgRVJUX0NMRUFOVVAsCisKKyAgLyogVFJZIHJlZ2lvbnMgaW1wbGVtZW50IGNhdGNoaW5nIGFuIGV4Y2VwdGlvbi4gIFRoZSBsaXN0IG9mIHR5cGVzIGFzc29jaWF0ZWQKKyAgICAgd2l0aCB0aGUgYXR0YWNoZWQgY2F0Y2ggaGFuZGxlcnMgaXMgZXhhbWluZWQgaW4gb3JkZXIgYnkgdGhlIHJ1bnRpbWUgYW5kCisgICAgIGNvbnRyb2wgaXMgdHJhbnNmZXJlZCB0byB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlci4gIE5vdGUgdGhhdCBhIE5VTEwgdHlwZQorICAgICBsaXN0IGlzIGEgY2F0Y2gtYWxsIGhhbmRsZXIsIGFuZCB0aGF0IGl0IHdpbGwgY2F0Y2ggKmFsbCogZXhjZXB0aW9ucworICAgICBpbmNsdWRpbmcgdGhvc2Ugb3JpZ2luYXRpbmcgZnJvbSBhIGRpZmZlcmVudCBsYW5ndWFnZS4gICovCisgIEVSVF9UUlksCisKKyAgLyogQUxMT1dFRF9FWENFUFRJT05TIHJlZ2lvbnMgaW1wbGVtZW50IGV4Y2VwdGlvbiBmaWx0ZXJpbmcsIGUuZy4gdGhlCisgICAgIHRocm93KHR5cGUtbGlzdCkgc3BlY2lmaWNhdGlvbiB0aGF0IGNhbiBiZSBhZGRlZCB0byBDKysgZnVuY3Rpb25zLgorICAgICBUaGUgcnVudGltZSBleGFtaW5lcyB0aGUgdGhyb3duIGV4Y2VwdGlvbiB2cyB0aGUgdHlwZSBsaXN0LCBhbmQgaWYKKyAgICAgdGhlIGV4Y2VwdGlvbiBkb2VzIG5vdCBtYXRjaCwgdHJhbnNmZXJzIGNvbnRyb2wgdG8gdGhlIGhhbmRsZXIuICBUaGUKKyAgICAgbm9ybWFsIGhhbmRsZXIgZm9yIEMrKyBjYWxscyBfX2N4YV9jYWxsX3VuZXhwZWN0ZWQuICAqLworICBFUlRfQUxMT1dFRF9FWENFUFRJT05TLAorCisgIC8qIE1VU1RfTk9UX1RIUk9XIHJlZ2lvbnMgcHJldmVudCBhbGwgZXhjZXB0aW9ucyBmcm9tIHByb3BhZ2F0aW5nLiAgVGhpcworICAgICByZWdpb24gdHlwZSBpcyB1c2VkIGluIEMrKyB0byBzdXJyb3VuZCBkZXN0cnVjdG9ycyBiZWluZyBydW4gaW5zaWRlIGEKKyAgICAgQ0xFQU5VUCByZWdpb24uICBUaGlzIGRpZmZlcnMgZnJvbSBhbiBBTExPV0VEX0VYQ0VQVElPTlMgcmVnaW9uIHdpdGgKKyAgICAgYW4gZW1wdHkgdHlwZSBsaXN0IGluIHRoYXQgdGhlIHJ1bnRpbWUgaXMgcHJlcGFyZWQgdG8gdGVybWluYXRlIHRoZQorICAgICBwcm9ncmFtIGRpcmVjdGx5LiAgV2Ugb25seSBnZW5lcmF0ZSBjb2RlIGZvciBNVVNUX05PVF9USFJPVyByZWdpb25zCisgICAgIGFsb25nIGNvbnRyb2wgcGF0aHMgdGhhdCBhcmUgYWxyZWFkeSBoYW5kbGluZyBhbiBleGNlcHRpb24gd2l0aGluIHRoZQorICAgICBjdXJyZW50IGZ1bmN0aW9uLiAgKi8KKyAgRVJUX01VU1RfTk9UX1RIUk9XCit9OworCisKKy8qIEEgbGFuZGluZyBwYWQgZm9yIGEgZ2l2ZW4gZXhjZXB0aW9uIHJlZ2lvbi4gIEFueSB0cmFuc2ZlciBvZiBjb250cm9sCisgICBmcm9tIHRoZSBFSCBydW50aW1lIHRvIHRoZSBmdW5jdGlvbiBoYXBwZW5zIGF0IGEgbGFuZGluZyBwYWQuICAqLworCitzdHJ1Y3QgR1RZKCgpKSBlaF9sYW5kaW5nX3BhZF9kCit7CisgIC8qIFRoZSBsaW5rZWQgbGlzdCBvZiBhbGwgbGFuZGluZyBwYWRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVnaW9uLiAgKi8KKyAgc3RydWN0IGVoX2xhbmRpbmdfcGFkX2QgKm5leHRfbHA7CisKKyAgLyogVGhlIHJlZ2lvbiB3aXRoIHdoaWNoIHRoaXMgbGFuZGluZyBwYWQgaXMgYXNzb2NpYXRlZC4gICovCisgIHN0cnVjdCBlaF9yZWdpb25fZCAqcmVnaW9uOworCisgIC8qIEF0IHRoZSBnaW1wbGUgbGV2ZWwsIHRoZSBsb2NhdGlvbiB0byB3aGljaCBjb250cm9sIHdpbGwgYmUgdHJhbnNmZXJlZAorICAgICBmb3IgdGhpcyBsYW5kaW5nIHBhZC4gIFRoZXJlIGNhbiBiZSBib3RoIEVIIGFuZCBub3JtYWwgZWRnZXMgaW50byB0aGUKKyAgICAgYmxvY2sgY29udGFpbmluZyB0aGUgcG9zdC1sYW5kaW5nLXBhZCBsYWJlbC4gICovCisgIHRyZWUgcG9zdF9sYW5kaW5nX3BhZDsKKworICAvKiBBdCB0aGUgcnRsIGxldmVsLCB0aGUgbG9jYXRpb24gdG8gd2hpY2ggdGhlIHJ1bnRpbWUgd2lsbCB0cmFuc2ZlcgorICAgICBjb250cm9sLiAgVGhpcyBkaWZmZXJzIGZyb20gdGhlIHBvc3QtbGFuZGluZy1wYWQgaW4gdGhhdCB0aGUgdGFyZ2V0J3MKKyAgICAgRVhDRVBUSU9OX1JFQ0VJVkVSIHBhdHRlcm4gd2lsbCBiZSBleHBhbmRlZCBoZXJlLCBhcyB3ZWxsIGFzIG90aGVyCisgICAgIGJvb2trZWVwaW5nIHNwZWNpZmljIHRvIGV4Y2VwdGlvbnMuICBUaGVyZSBtdXN0IG5vdCBiZSBub3JtYWwgZWRnZXMKKyAgICAgaW50byB0aGUgYmxvY2sgY29udGFpbmluZyB0aGUgbGFuZGluZy1wYWQgbGFiZWwuICAqLworICBydHggbGFuZGluZ19wYWQ7CisKKyAgLyogVGhlIGluZGV4IG9mIHRoaXMgbGFuZGluZyBwYWQgd2l0aGluIGZ1bi0+ZWgtPmxwX2FycmF5LiAgKi8KKyAgaW50IGluZGV4OworfTsKKworLyogQSBjYXRjaCBoYW5kbGVyIGFzc29jaWF0ZWQgd2l0aCBhbiBFUlRfVFJZIHJlZ2lvbi4gICovCisKK3N0cnVjdCBHVFkoKCkpIGVoX2NhdGNoX2QKK3sKKyAgLyogVGhlIGRvdWJsZS1saW5rZWQgbGlzdCBvZiBhbGwgY2F0Y2ggaGFuZGxlcnMgZm9yIHRoZSByZWdpb24uICAqLworICBzdHJ1Y3QgZWhfY2F0Y2hfZCAqbmV4dF9jYXRjaDsKKyAgc3RydWN0IGVoX2NhdGNoX2QgKnByZXZfY2F0Y2g7CisKKyAgLyogQSBUUkVFX0xJU1Qgb2YgcnVudGltZSB0eXBlIG9iamVjdHMgdGhhdCB0aGlzIGNhdGNoIGhhbmRsZXIKKyAgICAgd2lsbCBjYXRjaCwgb3IgTlVMTCBpZiBhbGwgZXhjZXB0aW9ucyBhcmUgY2F1Z2h0LiAgKi8KKyAgdHJlZSB0eXBlX2xpc3Q7CisKKyAgLyogQSBUUkVFX0xJU1Qgb2YgSU5URUdFUl9DU1RzIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgdHlwZV9saXN0IGVudHJpZXMsCisgICAgIGhhdmluZyBiZWVuIG1hcHBlZCBieSBhc3NpZ25fZmlsdGVyX3ZhbHVlcy4gIFRoZXNlIGludGVnZXJzIGFyZSB0byBiZQorICAgICBjb21wYXJlZCBhZ2FpbnN0IHRoZSBfX2J1aWx0aW5fZWhfZmlsdGVyIHZhbHVlLiAgKi8KKyAgdHJlZSBmaWx0ZXJfbGlzdDsKKworICAvKiBUaGUgY29kZSB0aGF0IHNob3VsZCBiZSBleGVjdXRlZCBpZiB0aGlzIGNhdGNoIGhhbmRsZXIgbWF0Y2hlcyB0aGUKKyAgICAgdGhyb3duIGV4Y2VwdGlvbi4gIFRoaXMgbGFiZWwgaXMgb25seSBtYWludGFpbmVkIHVudGlsCisgICAgIHBhc3NfbG93ZXJfZWhfZGlzcGF0Y2gsIGF0IHdoaWNoIHBvaW50IGl0IGlzIGNsZWFyZWQuICAqLworICB0cmVlIGxhYmVsOworfTsKKworLyogRGVzY3JpYmVzIG9uZSBleGNlcHRpb24gcmVnaW9uLiAgKi8KKworc3RydWN0IEdUWSgoKSkgZWhfcmVnaW9uX2QKK3sKKyAgLyogVGhlIGltbWVkaWF0ZWx5IHN1cnJvdW5kaW5nIHJlZ2lvbi4gICovCisgIHN0cnVjdCBlaF9yZWdpb25fZCAqb3V0ZXI7CisKKyAgLyogVGhlIGxpc3Qgb2YgaW1tZWRpYXRlbHkgY29udGFpbmVkIHJlZ2lvbnMuICAqLworICBzdHJ1Y3QgZWhfcmVnaW9uX2QgKmlubmVyOworICBzdHJ1Y3QgZWhfcmVnaW9uX2QgKm5leHRfcGVlcjsKKworICAvKiBUaGUgaW5kZXggb2YgdGhpcyByZWdpb24gd2l0aGluIGZ1bi0+ZWgtPnJlZ2lvbl9hcnJheS4gICovCisgIGludCBpbmRleDsKKworICAvKiBFYWNoIHJlZ2lvbiBkb2VzIGV4YWN0bHkgb25lIHRoaW5nLiAgKi8KKyAgZW51bSBlaF9yZWdpb25fdHlwZSB0eXBlOworCisgIC8qIEhvbGRzIHRoZSBhY3Rpb24gdG8gcGVyZm9ybSBiYXNlZCBvbiB0aGUgcHJlY2VkaW5nIHR5cGUuICAqLworICB1bmlvbiBlaF9yZWdpb25fdSB7CisgICAgc3RydWN0IGVoX3JlZ2lvbl91X3RyeSB7CisgICAgICAvKiBUaGUgZG91YmxlLWxpbmtlZCBsaXN0IG9mIGFsbCBjYXRjaCBoYW5kbGVycyBmb3IgdGhpcyByZWdpb24uICAqLworICAgICAgc3RydWN0IGVoX2NhdGNoX2QgKmZpcnN0X2NhdGNoOworICAgICAgc3RydWN0IGVoX2NhdGNoX2QgKmxhc3RfY2F0Y2g7CisgICAgfSBHVFkgKCh0YWcgKCJFUlRfVFJZIikpKSBlaF90cnk7CisKKyAgICBzdHJ1Y3QgZWhfcmVnaW9uX3VfYWxsb3dlZCB7CisgICAgICAvKiBBIFRSRUVfTElTVCBvZiBydW50aW1lIHR5cGUgb2JqZWN0cyBhbGxvd2VkIHRvIHBhc3MuICAqLworICAgICAgdHJlZSB0eXBlX2xpc3Q7CisgICAgICAvKiBUaGUgY29kZSB0aGF0IHNob3VsZCBiZSBleGVjdXRlZCBpZiB0aGUgdGhyb3duIGV4Y2VwdGlvbiBkb2VzCisJIG5vdCBtYXRjaCB0aGUgdHlwZSBsaXN0LiAgVGhpcyBsYWJlbCBpcyBvbmx5IG1haW50YWluZWQgdW50aWwKKwkgcGFzc19sb3dlcl9laF9kaXNwYXRjaCwgYXQgd2hpY2ggcG9pbnQgaXQgaXMgY2xlYXJlZC4gICovCisgICAgICB0cmVlIGxhYmVsOworICAgICAgLyogVGhlIGludGVnZXIgdGhhdCB3aWxsIGJlIHBhc3NlZCBieSB0aGUgcnVudGltZSB0byBzaWduYWwgdGhhdAorCSB3ZSBzaG91bGQgZXhlY3V0ZSB0aGUgY29kZSBhdCBMQUJFTC4gIFRoaXMgaW50ZWdlciBpcyBhc3NpZ25lZAorCSBieSBhc3NpZ25fZmlsdGVyX3ZhbHVlcyBhbmQgaXMgdG8gYmUgY29tcGFyZWQgYWdhaW5zdCB0aGUKKwkgX19idWlsdGluX2VoX2ZpbHRlciB2YWx1ZS4gICovCisgICAgICBpbnQgZmlsdGVyOworICAgIH0gR1RZICgodGFnICgiRVJUX0FMTE9XRURfRVhDRVBUSU9OUyIpKSkgYWxsb3dlZDsKKworICAgIHN0cnVjdCBlaF9yZWdpb25fdV9tdXN0X25vdF90aHJvdyB7CisgICAgICAvKiBBIGZ1bmN0aW9uIGRlY2wgdG8gYmUgaW52b2tlZCBpZiB0aGlzIHJlZ2lvbiBpcyBhY3R1YWxseSByZWFjaGFibGUKKwkgZnJvbSB3aXRoaW4gdGhlIGZ1bmN0aW9uLCByYXRoZXIgdGhhbiBpbXBsZW1lbnRhYmxlIGZyb20gdGhlIHJ1bnRpbWUuCisJIFRoZSBub3JtYWwgd2F5IGZvciB0aGlzIHRvIGhhcHBlbiBpcyBmb3IgdGhlcmUgdG8gYmUgYSBDTEVBTlVQIHJlZ2lvbgorCSBjb250YWluZWQgd2l0aGluIHRoaXMgTVVTVF9OT1RfVEhST1cgcmVnaW9uLiAgTm90ZSB0aGF0IGlmIHRoZQorCSBydW50aW1lIGhhbmRsZXMgdGhlIE1VU1RfTk9UX1RIUk9XIHJlZ2lvbiwgd2UgaGF2ZSBubyBjb250cm9sIG92ZXIKKwkgd2hhdCB0ZXJtaW5hdGlvbiBmdW5jdGlvbiBpcyBjYWxsZWQ7IGl0IHdpbGwgYmUgZGVjaWRlZCBieSB0aGUKKwkgcGVyc29uYWxpdHkgZnVuY3Rpb24gaW4gZWZmZWN0IGZvciB0aGlzIENJRS4gICovCisgICAgICB0cmVlIGZhaWx1cmVfZGVjbDsKKyAgICAgIC8qIFRoZSBsb2NhdGlvbiBhc3NpZ25lZCB0byB0aGUgY2FsbCBvZiBGQUlMVVJFX0RFQ0wsIGlmIGV4cGFuZGVkLiAgKi8KKyAgICAgIGxvY2F0aW9uX3QgZmFpbHVyZV9sb2M7CisgICAgfSBHVFkgKCh0YWcgKCJFUlRfTVVTVF9OT1RfVEhST1ciKSkpIG11c3Rfbm90X3Rocm93OworICB9IEdUWSAoKGRlc2MgKCIlMC50eXBlIikpKSB1OworCisgIC8qIFRoZSBsaXN0IG9mIGxhbmRpbmcgcGFkcyBhc3NvY2lhdGVkIHdpdGggdGhpcyByZWdpb24uICAqLworICBzdHJ1Y3QgZWhfbGFuZGluZ19wYWRfZCAqbGFuZGluZ19wYWRzOworCisgIC8qIEVYQ19QVFIgYW5kIEZJTFRFUiB2YWx1ZXMgY29waWVkIGZyb20gdGhlIHJ1bnRpbWUgZm9yIHRoaXMgcmVnaW9uLgorICAgICBFYWNoIHJlZ2lvbiBnZXRzIGl0cyBvd24gcHN1ZWRvcyBzbyB0aGF0IGlmIHRoZXJlIGFyZSBuZXN0ZWQgZXhjZXB0aW9ucworICAgICB3ZSBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZXMgb2YgdGhlIGZpcnN0IGV4Y2VwdGlvbi4gICovCisgIHJ0eCBleGNfcHRyX3JlZywgZmlsdGVyX3JlZzsKKworICAvKiBUcnVlIGlmIHRoaXMgcmVnaW9uIHNob3VsZCB1c2UgX19jeGFfZW5kX2NsZWFudXAgaW5zdGVhZAorICAgICBvZiBfVW53aW5kX1Jlc3VtZS4gICovCisgIGJvb2wgdXNlX2N4YV9lbmRfY2xlYW51cDsKK307CisKK3R5cGVkZWYgc3RydWN0IGVoX2xhbmRpbmdfcGFkX2QgKmVoX2xhbmRpbmdfcGFkOwordHlwZWRlZiBzdHJ1Y3QgZWhfY2F0Y2hfZCAqZWhfY2F0Y2g7Cit0eXBlZGVmIHN0cnVjdCBlaF9yZWdpb25fZCAqZWhfcmVnaW9uOworCitERUZfVkVDX1AoZWhfcmVnaW9uKTsKK0RFRl9WRUNfQUxMT0NfUChlaF9yZWdpb24sIGdjKTsKK0RFRl9WRUNfQUxMT0NfUChlaF9yZWdpb24sIGhlYXApOworCitERUZfVkVDX1AoZWhfbGFuZGluZ19wYWQpOworREVGX1ZFQ19BTExPQ19QKGVoX2xhbmRpbmdfcGFkLCBnYyk7CisKKworLyogVGhlIGV4Y2VwdGlvbiBzdGF0dXMgZm9yIGVhY2ggZnVuY3Rpb24uICAqLworCitzdHJ1Y3QgR1RZKCgpKSBlaF9zdGF0dXMKK3sKKyAgLyogVGhlIHRyZWUgb2YgYWxsIHJlZ2lvbnMgZm9yIHRoaXMgZnVuY3Rpb24uICAqLworICBlaF9yZWdpb24gcmVnaW9uX3RyZWU7CisKKyAgLyogVGhlIHNhbWUgaW5mb3JtYXRpb24gYXMgYW4gaW5kZXhhYmxlIGFycmF5LiAgKi8KKyAgVkVDKGVoX3JlZ2lvbixnYykgKnJlZ2lvbl9hcnJheTsKKworICAvKiBUaGUgbGFuZGluZyBwYWRzIGFzIGFuIGluZGV4YWJsZSBhcnJheS4gICovCisgIFZFQyhlaF9sYW5kaW5nX3BhZCxnYykgKmxwX2FycmF5OworCisgIC8qIEF0IHRoZSBnaW1wbGUgbGV2ZWwsIGEgbWFwcGluZyBmcm9tIGdpbXBsZSBzdGF0ZW1lbnQgdG8gbGFuZGluZyBwYWQKKyAgICAgb3IgbXVzdC1ub3QtdGhyb3cgcmVnaW9uLiAgU2VlIHJlY29yZF9zdG10X2VoX3JlZ2lvbi4gICovCisgIGh0YWJfdCBHVFkoKHBhcmFtX2lzIChzdHJ1Y3QgdGhyb3dfc3RtdF9ub2RlKSkpIHRocm93X3N0bXRfdGFibGU7CisKKyAgLyogQWxsIG9mIHRoZSBydW50aW1lIHR5cGUgZGF0YSB1c2VkIGJ5IHRoZSBmdW5jdGlvbi4gIFRoZXNlIG9iamVjdHMKKyAgICAgYXJlIGVtaXR0ZWQgdG8gdGhlIGxhbmctc3BlY2lmaWMtZGF0YS1hcmVhIGZvciB0aGUgZnVuY3Rpb24uICAqLworICBWRUModHJlZSxnYykgKnR0eXBlX2RhdGE7CisKKyAgLyogVGhlIHRhYmxlIG9mIGFsbCBhY3Rpb24gY2hhaW5zLiAgVGhlc2UgZW5jb2RlIHRoZSBlaF9yZWdpb24gdHJlZSBpbgorICAgICBhIGNvbXBhY3QgZm9ybSBmb3IgdXNlIGJ5IHRoZSBydW50aW1lLCBhbmQgaXMgYWxzbyBlbWl0dGVkIHRvIHRoZQorICAgICBsYW5nLXNwZWNpZmljLWRhdGEtYXJlYS4gIE5vdGUgdGhhdCB0aGUgQVJNIEVBQkkgdXNlcyBhIGRpZmZlcmVudAorICAgICBmb3JtYXQgZm9yIHRoZSBlbmNvZGluZyB0aGFuIGFsbCBvdGhlciBwb3J0cy4gICovCisgIHVuaW9uIGVoX3N0YXR1c191IHsKKyAgICBWRUModHJlZSxnYykgKiBHVFkoKHRhZyAoIjEiKSkpIGFybV9lYWJpOworICAgIFZFQyh1Y2hhcixnYykgKiBHVFkoKHRhZyAoIjAiKSkpIG90aGVyOworICB9IEdUWSAoKGRlc2MgKCJ0YXJnZXRtLmFybV9lYWJpX3Vud2luZGVyIikpKSBlaHNwZWNfZGF0YTsKK307CisKKworLyogVGVzdDogaXMgZXhjZXB0aW9uIGhhbmRsaW5nIHR1cm5lZCBvbj8gICovCitleHRlcm4gaW50IGRvaW5nX2VoIChpbnQpOworCisvKiBJbnZva2VzIENBTExCQUNLIGZvciBldmVyeSBleGNlcHRpb24gaGFuZGxlciBsYWJlbC4gIE9ubHkgdXNlZCBieSBvbGQKKyAgIGxvb3AgaGFja2VyeTsgc2hvdWxkIG5vdCBiZSB1c2VkIGJ5IG5ldyBjb2RlLiAgKi8KK2V4dGVybiB2b2lkIGZvcl9lYWNoX2VoX2xhYmVsICh2b2lkICgqKSAocnR4KSk7CisKK2V4dGVybiB2b2lkIGluaXRfZWggKHZvaWQpOworZXh0ZXJuIHZvaWQgaW5pdF9laF9mb3JfZnVuY3Rpb24gKHZvaWQpOworCitleHRlcm4gdm9pZCByZW1vdmVfZWhfbGFuZGluZ19wYWQgKGVoX2xhbmRpbmdfcGFkKTsKK2V4dGVybiB2b2lkIHJlbW92ZV9laF9oYW5kbGVyIChlaF9yZWdpb24pOworCitleHRlcm4gYm9vbCBjdXJyZW50X2Z1bmN0aW9uX2hhc19leGNlcHRpb25faGFuZGxlcnMgKHZvaWQpOworZXh0ZXJuIHZvaWQgb3V0cHV0X2Z1bmN0aW9uX2V4Y2VwdGlvbl90YWJsZSAoY29uc3QgY2hhciAqKTsKKworZXh0ZXJuIHJ0eCBleHBhbmRfYnVpbHRpbl9laF9wb2ludGVyICh0cmVlKTsKK2V4dGVybiBydHggZXhwYW5kX2J1aWx0aW5fZWhfZmlsdGVyICh0cmVlKTsKK2V4dGVybiBydHggZXhwYW5kX2J1aWx0aW5fZWhfY29weV92YWx1ZXMgKHRyZWUpOworZXh0ZXJuIHZvaWQgZXhwYW5kX2J1aWx0aW5fdW53aW5kX2luaXQgKHZvaWQpOworZXh0ZXJuIHJ0eCBleHBhbmRfYnVpbHRpbl9laF9yZXR1cm5fZGF0YV9yZWdubyAodHJlZSk7CitleHRlcm4gcnR4IGV4cGFuZF9idWlsdGluX2V4dHJhY3RfcmV0dXJuX2FkZHIgKHRyZWUpOworZXh0ZXJuIHZvaWQgZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMgKHRyZWUpOworZXh0ZXJuIHJ0eCBleHBhbmRfYnVpbHRpbl9mcm9iX3JldHVybl9hZGRyICh0cmVlKTsKK2V4dGVybiBydHggZXhwYW5kX2J1aWx0aW5fZHdhcmZfc3BfY29sdW1uICh2b2lkKTsKK2V4dGVybiB2b2lkIGV4cGFuZF9idWlsdGluX2VoX3JldHVybiAodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBleHBhbmRfZWhfcmV0dXJuICh2b2lkKTsKK2V4dGVybiBydHggZXhwYW5kX2J1aWx0aW5fZXh0ZW5kX3BvaW50ZXIgKHRyZWUpOworCit0eXBlZGVmIHRyZWUgKCpkdXBsaWNhdGVfZWhfcmVnaW9uc19tYXApICh0cmVlLCB2b2lkICopOworZXh0ZXJuIHN0cnVjdCBwb2ludGVyX21hcF90ICpkdXBsaWNhdGVfZWhfcmVnaW9ucworICAoc3RydWN0IGZ1bmN0aW9uICosIGVoX3JlZ2lvbiwgaW50LCBkdXBsaWNhdGVfZWhfcmVnaW9uc19tYXAsIHZvaWQgKik7CisKK2V4dGVybiB2b2lkIHNqbGpfZW1pdF9mdW5jdGlvbl9leGl0X2FmdGVyIChydHgpOworCitleHRlcm4gZWhfcmVnaW9uIGdlbl9laF9yZWdpb25fY2xlYW51cCAoZWhfcmVnaW9uKTsKK2V4dGVybiBlaF9yZWdpb24gZ2VuX2VoX3JlZ2lvbl90cnkgKGVoX3JlZ2lvbik7CitleHRlcm4gZWhfcmVnaW9uIGdlbl9laF9yZWdpb25fYWxsb3dlZCAoZWhfcmVnaW9uLCB0cmVlKTsKK2V4dGVybiBlaF9yZWdpb24gZ2VuX2VoX3JlZ2lvbl9tdXN0X25vdF90aHJvdyAoZWhfcmVnaW9uKTsKKworZXh0ZXJuIGVoX2NhdGNoIGdlbl9laF9yZWdpb25fY2F0Y2ggKGVoX3JlZ2lvbiwgdHJlZSk7CitleHRlcm4gZWhfbGFuZGluZ19wYWQgZ2VuX2VoX2xhbmRpbmdfcGFkIChlaF9yZWdpb24pOworCitleHRlcm4gZWhfcmVnaW9uIGdldF9laF9yZWdpb25fZnJvbV9udW1iZXJfZm4gKHN0cnVjdCBmdW5jdGlvbiAqLCBpbnQpOworZXh0ZXJuIGVoX3JlZ2lvbiBnZXRfZWhfcmVnaW9uX2Zyb21fbnVtYmVyIChpbnQpOworZXh0ZXJuIGVoX2xhbmRpbmdfcGFkIGdldF9laF9sYW5kaW5nX3BhZF9mcm9tX251bWJlcl9mbiAoc3RydWN0IGZ1bmN0aW9uKixpbnQpOworZXh0ZXJuIGVoX2xhbmRpbmdfcGFkIGdldF9laF9sYW5kaW5nX3BhZF9mcm9tX251bWJlciAoaW50KTsKK2V4dGVybiBlaF9yZWdpb24gZ2V0X2VoX3JlZ2lvbl9mcm9tX2xwX251bWJlcl9mbiAoc3RydWN0IGZ1bmN0aW9uICosIGludCk7CitleHRlcm4gZWhfcmVnaW9uIGdldF9laF9yZWdpb25fZnJvbV9scF9udW1iZXIgKGludCk7CisKK2V4dGVybiBlaF9yZWdpb24gZWhfcmVnaW9uX291dGVybW9zdCAoc3RydWN0IGZ1bmN0aW9uICosIGVoX3JlZ2lvbiwgZWhfcmVnaW9uKTsKKworZXh0ZXJuIHZvaWQgbWFrZV9yZWdfZWhfcmVnaW9uX25vdGUgKHJ0eCBpbnNuLCBpbnQgZWNmX2ZsYWdzLCBpbnQgbHBfbnIpOworZXh0ZXJuIHZvaWQgbWFrZV9yZWdfZWhfcmVnaW9uX25vdGVfbm90aHJvd19ub25vbmxvY2FsIChydHgpOworCitleHRlcm4gdm9pZCB2ZXJpZnlfZWhfdHJlZSAoc3RydWN0IGZ1bmN0aW9uICopOworZXh0ZXJuIHZvaWQgZHVtcF9laF90cmVlIChGSUxFICosIHN0cnVjdCBmdW5jdGlvbiAqKTsKK3ZvaWQgZGVidWdfZWhfdHJlZSAoc3RydWN0IGZ1bmN0aW9uICopOworZXh0ZXJuIHZvaWQgYWRkX3R5cGVfZm9yX3J1bnRpbWUgKHRyZWUpOworZXh0ZXJuIHRyZWUgbG9va3VwX3R5cGVfZm9yX3J1bnRpbWUgKHRyZWUpOworZXh0ZXJuIHZvaWQgYXNzaWduX2ZpbHRlcl92YWx1ZXMgKHZvaWQpOworCitleHRlcm4gZWhfcmVnaW9uIGdldF9laF9yZWdpb25fZnJvbV9ydHggKGNvbnN0X3J0eCk7CitleHRlcm4gZWhfbGFuZGluZ19wYWQgZ2V0X2VoX2xhbmRpbmdfcGFkX2Zyb21fcnR4IChjb25zdF9ydHgpOworCisvKiBJZiBub24tTlVMTCwgdGhpcyBpcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIGRlY2wgdG8gYmUKKyAgIGV4ZWN1dGVkIGlmIGFuIHVuaGFuZGxlZCBleGNlcHRpb24gaXMgcHJvcGFnYXRlZCBvdXQgb2YgYSBjbGVhbnVwCisgICByZWdpb24uICBGb3IgZXhhbXBsZSwgaW4gQysrLCBhbiBleGNlcHRpb24gdGhyb3duIGJ5IGEgZGVzdHJ1Y3RvcgorICAgZHVyaW5nIHN0YWNrIHVud2luZGluZyBpcyByZXF1aXJlZCB0byByZXN1bHQgaW4gYSBjYWxsIHRvCisgICBgc3RkOjp0ZXJtaW5hdGUnLCBzbyB0aGUgQysrIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEKKyAgIEZVTkNUSU9OX0RFQ0wgZm9yIGBzdGQ6OnRlcm1pbmF0ZScuICAqLworZXh0ZXJuIHRyZWUgKCpsYW5nX3Byb3RlY3RfY2xlYW51cF9hY3Rpb25zKSAodm9pZCk7CisKKy8qIFJldHVybiB0cnVlIGlmIHR5cGUgQSBjYXRjaGVzIHR5cGUgQi4gICovCitleHRlcm4gaW50ICgqbGFuZ19laF90eXBlX2NvdmVycykgKHRyZWUgYSwgdHJlZSBiKTsKKworCisvKiBKdXN0IGJlY2F1c2UgdGhlIHVzZXIgY29uZmlndXJlZCAtLXdpdGgtc2psai1leGNlcHRpb25zPW5vIGRvZXNuJ3QKKyAgIG1lYW4gdGhhdCB3ZSBjYW4gdXNlIGNhbGwgZnJhbWUgZXhjZXB0aW9ucy4gIERldGVjdCB0aGF0IHRoZSB0YXJnZXQKKyAgIGhhcyBhcHByb3ByaWF0ZSBzdXBwb3J0LiAgKi8KKworI2lmbmRlZiBNVVNUX1VTRV9TSkxKX0VYQ0VQVElPTlMKKyMgaWYgZGVmaW5lZCAoRUhfUkVUVVJOX0RBVEFfUkVHTk8pCQkJXAorICAgICAgICYmIChkZWZpbmVkIChUQVJHRVRfVU5XSU5EX0lORk8pCQkJXAorCSAgIHx8IChEV0FSRjJfVU5XSU5EX0lORk8JCQlcCisJICAgICAgICYmIChkZWZpbmVkIChFSF9SRVRVUk5fSEFORExFUl9SVFgpCVwKKwkJICAgfHwgZGVmaW5lZCAoSEFWRV9laF9yZXR1cm4pKSkpCisjICBkZWZpbmUgTVVTVF9VU0VfU0pMSl9FWENFUFRJT05TCTAKKyMgZWxzZQorIyAgZGVmaW5lIE1VU1RfVVNFX1NKTEpfRVhDRVBUSU9OUwkxCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TSkxKX0VYQ0VQVElPTlMKKyMgaWYgQ09ORklHX1NKTEpfRVhDRVBUSU9OUyA9PSAxCisjICBkZWZpbmUgVVNJTkdfU0pMSl9FWENFUFRJT05TCQkxCisjIGVuZGlmCisjIGlmIENPTkZJR19TSkxKX0VYQ0VQVElPTlMgPT0gMAorIyAgZGVmaW5lIFVTSU5HX1NKTEpfRVhDRVBUSU9OUwkJMAorIyAgaWYgIWRlZmluZWQoRUhfUkVUVVJOX0RBVEFfUkVHTk8pCisgICAgI2Vycm9yICJFSF9SRVRVUk5fREFUQV9SRUdOTyByZXF1aXJlZCIKKyMgIGVuZGlmCisjICBpZiAhIChkZWZpbmVkKFRBUkdFVF9VTldJTkRfSU5GTykgfHwgRFdBUkYyX1VOV0lORF9JTkZPKQorICAgICNlcnJvciAie0RXQVJGMixUQVJHRVR9X1VOV0lORF9JTkZPIHJlcXVpcmVkIgorIyAgZW5kaWYKKyMgIGlmICFkZWZpbmVkKFRBUkdFVF9VTldJTkRfSU5GTykgXAorCSYmICEoZGVmaW5lZChFSF9SRVRVUk5fSEFORExFUl9SVFgpIHx8IGRlZmluZWQoSEFWRV9laF9yZXR1cm4pKQorICAgICNlcnJvciAiRUhfUkVUVVJOX0hBTkRMRVJfUlRYIG9yIGVoX3JldHVybiByZXF1aXJlZCIKKyMgIGVuZGlmCisvKiBVc3VhbGx5IHRoZSBhYm92ZSBlcnJvciBjaGVja3Mgd2lsbCBoYXZlIGFscmVhZHkgdHJpZ2dlcmVkIGFuCisgICBlcnJvciwgYnV0IGJhY2tlbmRzIG1heSBzZXQgTVVTVF9VU0VfU0pMSl9FWENFUFRJT05TIGZvciB0aGVpciBvd24KKyAgIHJlYXNvbnMuICAqLworIyAgaWYgTVVTVF9VU0VfU0pMSl9FWENFUFRJT05TCisgICAgI2Vycm9yICJNdXN0IHVzZSBTSkxKIGV4Y2VwdGlvbnMgYnV0IGNvbmZpZ3VyZWQgbm90IHRvIgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBVU0lOR19TSkxKX0VYQ0VQVElPTlMJCU1VU1RfVVNFX1NKTEpfRVhDRVBUSU9OUworI2VuZGlmCisKK3N0cnVjdCBHVFkoKCkpIHRocm93X3N0bXRfbm9kZSB7CisgIGdpbXBsZSBzdG10OworICBpbnQgbHBfbnI7Cit9OworCitleHRlcm4gc3RydWN0IGh0YWIgKmdldF9laF90aHJvd19zdG10X3RhYmxlIChzdHJ1Y3QgZnVuY3Rpb24gKik7CitleHRlcm4gdm9pZCBzZXRfZWhfdGhyb3dfc3RtdF90YWJsZSAoc3RydWN0IGZ1bmN0aW9uICosIHN0cnVjdCBodGFiICopOworCitlbnVtIGVoX3BlcnNvbmFsaXR5X2tpbmQgeworICBlaF9wZXJzb25hbGl0eV9ub25lLAorICBlaF9wZXJzb25hbGl0eV9hbnksCisgIGVoX3BlcnNvbmFsaXR5X2xhbmcKK307CisKK2V4dGVybiBlbnVtIGVoX3BlcnNvbmFsaXR5X2tpbmQKK2Z1bmN0aW9uX25lZWRzX2VoX3BlcnNvbmFsaXR5IChzdHJ1Y3QgZnVuY3Rpb24gKik7CisKKy8qIFByZS1vcmRlciBpdGVyYXRpb24gd2l0aGluIHRoZSBlaF9yZWdpb24gdHJlZS4gICovCisKK3N0YXRpYyBpbmxpbmUgZWhfcmVnaW9uCitlaHJfbmV4dCAoZWhfcmVnaW9uIHIsIGVoX3JlZ2lvbiBzdGFydCkKK3sKKyAgaWYgKHItPmlubmVyKQorICAgIHIgPSByLT5pbm5lcjsKKyAgZWxzZSBpZiAoci0+bmV4dF9wZWVyICYmIHIgIT0gc3RhcnQpCisgICAgciA9IHItPm5leHRfcGVlcjsKKyAgZWxzZQorICAgIHsKKyAgICAgIGRvCisJeworCSAgciA9IHItPm91dGVyOworCSAgaWYgKHIgPT0gc3RhcnQpCisJICAgIHJldHVybiBOVUxMOworCX0KKyAgICAgIHdoaWxlIChyLT5uZXh0X3BlZXIgPT0gTlVMTCk7CisgICAgICByID0gci0+bmV4dF9wZWVyOworICAgIH0KKyAgcmV0dXJuIHI7Cit9CisKKyNkZWZpbmUgRk9SX0FMTF9FSF9SRUdJT05fQVQoUiwgU1RBUlQpIFwKKyAgZm9yICgoUikgPSAoU1RBUlQpOyAoUikgIT0gTlVMTDsgKFIpID0gZWhyX25leHQgKFIsIFNUQVJUKSkKKworI2RlZmluZSBGT1JfQUxMX0VIX1JFR0lPTl9GTihSLCBGTikgXAorICBmb3IgKChSKSA9IChGTiktPmVoLT5yZWdpb25fdHJlZTsgKFIpICE9IE5VTEw7IChSKSA9IGVocl9uZXh0IChSLCBOVUxMKSkKKworI2RlZmluZSBGT1JfQUxMX0VIX1JFR0lPTihSKSBGT1JfQUxMX0VIX1JFR0lPTl9GTiAoUiwgY2Z1bikKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9maWxlbmFtZXMuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9maWxlbmFtZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDQxMWNjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2ZpbGVuYW1lcy5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qIE1hY3JvcyBmb3IgdGFraW5nIGFwYXJ0LCBpbnRlcnByZXRpbmcgYW5kIHByb2Nlc3NpbmcgZmlsZSBuYW1lcy4KKworICAgVGhlc2UgYXJlIGhlcmUgYmVjYXVzZSBzb21lIG5vbi1Qb3NpeCAoYS5rLmEuIERPU2lzaCkgc3lzdGVtcyBoYXZlCisgICBkcml2ZSBsZXR0ZXIgYnJhaW4tZGFtYWdlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYW4gYWJzb2x1dGUgZmlsZSBuYW1lLAorICAgdXNlIGZvcndhcmQtIGFuZCBiYWNrLXNsYXNoIGluIHBhdGggbmFtZXMgaW50ZXJjaGFuZ2VhYmx5LCBhbmQKKyAgIHNvbWUgb2YgdGhlbSBoYXZlIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBuYW1lcy4KKworICAgQ29weXJpZ2h0IDIwMDAsIDIwMDEsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEJGRCwgdGhlIEJpbmFyeSBGaWxlIERlc2NyaXB0b3IgbGlicmFyeS4KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisjaWZuZGVmIEZJTEVOQU1FU19ICisjZGVmaW5lIEZJTEVOQU1FU19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19NU0RPU19fKSB8fCBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX09TMl9fKSB8fCBkZWZpbmVkIChfX0NZR1dJTl9fKQorCisjaWZuZGVmIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCisjZGVmaW5lIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNIDEKKyNlbmRpZgorCisjZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoYykJKChjKSA9PSAnLycgfHwgKGMpID09ICdcXCcpCisvKiBOb3RlIHRoYXQgSVNfQUJTT0xVVEVfUEFUSCBhY2NlcHRzIGQ6Zm9vIGFzIHdlbGwsIGFsdGhvdWdoIGl0IGlzCisgICBvbmx5IHNlbWktYWJzb2x1dGUuICBUaGlzIGlzIGJlY2F1c2UgdGhlIHVzZXJzIG9mIElTX0FCU09MVVRFX1BBVEgKKyAgIHdhbnQgdG8ga25vdyB3aGV0aGVyIHRvIHByZXBlbmQgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgdG8KKyAgIGEgZmlsZSBuYW1lLCB3aGljaCBzaG91bGQgbm90IGJlIGRvbmUgd2l0aCBhIG5hbWUgbGlrZSBkOmZvby4gICovCisjZGVmaW5lIElTX0FCU09MVVRFX1BBVEgoZikJKElTX0RJUl9TRVBBUkFUT1IoKGYpWzBdKSB8fCAoKChmKVswXSkgJiYgKChmKVsxXSA9PSAnOicpKSkKKworI2Vsc2UgIC8qIG5vdCBET1Npc2ggKi8KKworI2RlZmluZSBJU19ESVJfU0VQQVJBVE9SKGMpCSgoYykgPT0gJy8nKQorI2RlZmluZSBJU19BQlNPTFVURV9QQVRIKGYpCShJU19ESVJfU0VQQVJBVE9SKChmKVswXSkpCisKKyNlbmRpZiAvKiBub3QgRE9TaXNoICovCisKK2V4dGVybiBpbnQgZmlsZW5hbWVfY21wIChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpOworI2RlZmluZSBGSUxFTkFNRV9DTVAoczEsIHMyKQlmaWxlbmFtZV9jbXAoczEsIHMyKQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogRklMRU5BTUVTX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9maXhlZC12YWx1ZS5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2ZpeGVkLXZhbHVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EwZWU5MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9maXhlZC12YWx1ZS5oCkBAIC0wLDAgKzEsMTAwIEBACisvKiBGaXhlZC1wb2ludCBhcml0aG1ldGljIHN1cHBvcnQuCisgICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19GSVhFRF9WQUxVRV9ICisjZGVmaW5lIEdDQ19GSVhFRF9WQUxVRV9ICisKKyNpbmNsdWRlICJtYWNobW9kZS5oIgorI2luY2x1ZGUgInJlYWwuaCIKKyNpbmNsdWRlICJkb3VibGUtaW50LmgiCisKK3N0cnVjdCBHVFkoKCkpIGZpeGVkX3ZhbHVlCit7CisgIGRvdWJsZV9pbnQgZGF0YTsJCS8qIFN0b3JlIGRhdGEgdXAgdG8gMiB3aWRlIGludGVnZXJzLiAgKi8KKyAgZW51bSBtYWNoaW5lX21vZGUgbW9kZTsJLyogVXNlIG1hY2hpbmUgbW9kZSB0byBrbm93IElCSVQgYW5kIEZCSVQuICAqLworfTsKKworI2RlZmluZSBGSVhFRF9WQUxVRV9UWVBFIHN0cnVjdCBmaXhlZF92YWx1ZQorCisjZGVmaW5lIE1BWF9GQ09OU1QwCTE4CS8qIEZvciBzdG9yaW5nIDE4IGZpeGVkLXBvaW50IHplcm9zIHBlcgorCQkJCSAgIGZyYWN0LCB1ZnJhY3QsIGFjY3VtLCBhbmQgdWFjY3VtIG1vZGVzIC4gICovCisjZGVmaW5lIE1BWF9GQ09OU1QxCTgJLyogRm9yIHN0b3JpbmcgOCBmaXhlZC1wb2ludCBvbmVzIHBlciBhY2N1bQorCQkJCSAgIGFuZCB1YWNjdW0gbW9kZXMuICAqLworLyogQ29uc3RhbnQgZml4ZWQtcG9pbnQgdmFsdWVzIDAgYW5kIDEuICAqLworZXh0ZXJuIEZJWEVEX1ZBTFVFX1RZUEUgZmNvbnN0MFtNQVhfRkNPTlNUMF07CitleHRlcm4gRklYRURfVkFMVUVfVFlQRSBmY29uc3QxW01BWF9GQ09OU1QxXTsKKworLyogTWFjcm9zIHRvIGFjY2VzcyBmY29uc3QwIGFuZCBmY29uc3QxIHZpYSBtYWNoaW5lIG1vZGVzLiAgKi8KKyNkZWZpbmUgRkNPTlNUMChtb2RlKQlmY29uc3QwW21vZGUgLSBRUW1vZGVdCisjZGVmaW5lIEZDT05TVDEobW9kZSkJZmNvbnN0MVttb2RlIC0gSEFtb2RlXQorCisvKiBSZXR1cm4gYSBDT05TVF9GSVhFRCB3aXRoIHZhbHVlIFIgYW5kIG1vZGUgTS4gICovCisjZGVmaW5lIENPTlNUX0ZJWEVEX0ZST01fRklYRURfVkFMVUUociwgbSkgXAorICBjb25zdF9maXhlZF9mcm9tX2ZpeGVkX3ZhbHVlIChyLCBtKQorZXh0ZXJuIHJ0eCBjb25zdF9maXhlZF9mcm9tX2ZpeGVkX3ZhbHVlIChGSVhFRF9WQUxVRV9UWVBFLCBlbnVtIG1hY2hpbmVfbW9kZSk7CisKKy8qIEluaXRpYWxpemUgZnJvbSBhIGRlY2ltYWwgb3IgaGV4YWRlY2ltYWwgc3RyaW5nLiAgKi8KK2V4dGVybiB2b2lkIGZpeGVkX2Zyb21fc3RyaW5nIChGSVhFRF9WQUxVRV9UWVBFICosIGNvbnN0IGNoYXIgKiwKKwkJCSAgICAgICBlbnVtIG1hY2hpbmVfbW9kZSk7CisKKy8qIEluIHRyZWUuYzogd3JhcCB1cCBhIEZJWEVEX1ZBTFVFX1RZUEUgaW4gYSB0cmVlIG5vZGUuICAqLworZXh0ZXJuIHRyZWUgYnVpbGRfZml4ZWQgKHRyZWUsIEZJWEVEX1ZBTFVFX1RZUEUpOworCisvKiBFeHRlbmQgb3IgdHJ1bmNhdGUgdG8gYSBuZXcgbW9kZS4gICovCitleHRlcm4gYm9vbCBmaXhlZF9jb252ZXJ0IChGSVhFRF9WQUxVRV9UWVBFICosIGVudW0gbWFjaGluZV9tb2RlLAorCQkJICAgY29uc3QgRklYRURfVkFMVUVfVFlQRSAqLCBib29sKTsKKworLyogQ29udmVydCB0byBhIGZpeGVkLXBvaW50IG1vZGUgZnJvbSBhbiBpbnRlZ2VyLiAgKi8KK2V4dGVybiBib29sIGZpeGVkX2NvbnZlcnRfZnJvbV9pbnQgKEZJWEVEX1ZBTFVFX1RZUEUgKiwgZW51bSBtYWNoaW5lX21vZGUsCisJCQkJICAgIGRvdWJsZV9pbnQsIGJvb2wsIGJvb2wpOworCisvKiBDb252ZXJ0IHRvIGEgZml4ZWQtcG9pbnQgbW9kZSBmcm9tIGEgcmVhbC4gICovCitleHRlcm4gYm9vbCBmaXhlZF9jb252ZXJ0X2Zyb21fcmVhbCAoRklYRURfVkFMVUVfVFlQRSAqLCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCQkgICAgIGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqLCBib29sKTsKKworLyogQ29udmVydCB0byBhIHJlYWwgbW9kZSBmcm9tIGEgZml4ZWQtcG9pbnQuICAqLworZXh0ZXJuIHZvaWQgcmVhbF9jb252ZXJ0X2Zyb21fZml4ZWQgKFJFQUxfVkFMVUVfVFlQRSAqLCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCQkgICAgIGNvbnN0IEZJWEVEX1ZBTFVFX1RZUEUgKik7CisKKy8qIENvbXBhcmUgdHdvIGZpeGVkLXBvaW50IG9iamVjdHMgZm9yIGJpdHdpc2UgaWRlbnRpdHkuICAqLworZXh0ZXJuIGJvb2wgZml4ZWRfaWRlbnRpY2FsIChjb25zdCBGSVhFRF9WQUxVRV9UWVBFICosIGNvbnN0IEZJWEVEX1ZBTFVFX1RZUEUgKik7CisKKy8qIENhbGN1bGF0ZSBhIGhhc2ggdmFsdWUuICAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBmaXhlZF9oYXNoIChjb25zdCBGSVhFRF9WQUxVRV9UWVBFICopOworCisjZGVmaW5lIEZJWEVEX1ZBTFVFU19JREVOVElDQUwoeCwgeSkJZml4ZWRfaWRlbnRpY2FsICgmKHgpLCAmKHkpKQorCisvKiBEZXRlcm1pbmUgd2hldGhlciBhIGZpeGVkLXBvaW50IHZhbHVlIFggaXMgbmVnYXRpdmUuICAqLworI2RlZmluZSBGSVhFRF9WQUxVRV9ORUdBVElWRSh4KQkJZml4ZWRfaXNuZWcgKCYoeCkpCisKKy8qIFJlbmRlciBGIGFzIGEgZGVjaW1hbCBmbG9hdGluZyBwb2ludCBjb25zdGFudC4gICovCitleHRlcm4gdm9pZCBmaXhlZF90b19kZWNpbWFsIChjaGFyICpzdHIsIGNvbnN0IEZJWEVEX1ZBTFVFX1RZUEUgKiwgc2l6ZV90KTsKKworLyogQmluYXJ5IG9yIHVuYXJ5IGFyaXRobWV0aWMgb24gdHJlZV9jb2RlLiAgKi8KK2V4dGVybiBib29sIGZpeGVkX2FyaXRobWV0aWMgKEZJWEVEX1ZBTFVFX1RZUEUgKiwgaW50LCBjb25zdCBGSVhFRF9WQUxVRV9UWVBFICosCisJCQkgICAgICBjb25zdCBGSVhFRF9WQUxVRV9UWVBFICosIGJvb2wpOworCisvKiBDb21wYXJlIGZpeGVkLXBvaW50IHZhbHVlcyBieSB0cmVlX2NvZGUuICAqLworZXh0ZXJuIGJvb2wgZml4ZWRfY29tcGFyZSAoaW50LCBjb25zdCBGSVhFRF9WQUxVRV9UWVBFICosCisJCQkgICBjb25zdCBGSVhFRF9WQUxVRV9UWVBFICopOworCisvKiBEZXRlcm1pbmUgd2hldGhlciBhIGZpeGVkLXBvaW50IHZhbHVlIFggaXMgbmVnYXRpdmUuICAqLworZXh0ZXJuIGJvb2wgZml4ZWRfaXNuZWcgKGNvbnN0IEZJWEVEX1ZBTFVFX1RZUEUgKik7CisKKyNlbmRpZiAvKiBHQ0NfRklYRURfVkFMVUVfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2ZsYWdzLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvZmxhZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzUxYjJiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2ZsYWdzLmgKQEAgLTAsMCArMSwzOTIgQEAKKy8qIENvbXBpbGF0aW9uIHN3aXRjaCBmbGFnIGRlZmluaXRpb25zIGZvciBHQ0MuCisgICBDb3B5cmlnaHQgKEMpIDE5ODcsIDE5ODgsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDIsCisgICAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX0ZMQUdTX0gKKyNkZWZpbmUgR0NDX0ZMQUdTX0gKKworI2luY2x1ZGUgImNvcmV0eXBlcy5oIgorI2luY2x1ZGUgIm9wdGlvbnMuaCIKKworZW51bSBkZWJ1Z19pbmZvX3R5cGUKK3sKKyAgTk9fREVCVUcsCSAgICAvKiBXcml0ZSBubyBkZWJ1ZyBpbmZvLiAgKi8KKyAgREJYX0RFQlVHLAkgICAgLyogV3JpdGUgQlNEIC5zdGFicyBmb3IgREJYICh1c2luZyBkYnhvdXQuYykuICAqLworICBTREJfREVCVUcsCSAgICAvKiBXcml0ZSBDT0ZGIGZvciAob2xkKSBTREIgKHVzaW5nIHNkYm91dC5jKS4gICovCisgIERXQVJGMl9ERUJVRywJICAgIC8qIFdyaXRlIER3YXJmIHYyIGRlYnVnIGluZm8gKHVzaW5nIGR3YXJmMm91dC5jKS4gICovCisgIFhDT0ZGX0RFQlVHLAkgICAgLyogV3JpdGUgSUJNL1hjb2ZmIGRlYnVnIGluZm8gKHVzaW5nIGRieG91dC5jKS4gICovCisgIFZNU19ERUJVRywgICAgICAgIC8qIFdyaXRlIFZNUyBkZWJ1ZyBpbmZvICh1c2luZyB2bXNkYmdvdXQuYykuICAqLworICBWTVNfQU5EX0RXQVJGMl9ERUJVRyAvKiBXcml0ZSBWTVMgZGVidWcgaW5mbyAodXNpbmcgdm1zZGJnb3V0LmMpLgorICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgRFdBUkYgdjIgZGVidWcgaW5mbyAodXNpbmcgZHdhcmYyb3V0LmMpLiAgKi8KK307CisKKy8qIFNwZWNpZnkgd2hpY2gga2luZCBvZiBkZWJ1Z2dpbmcgaW5mbyB0byBnZW5lcmF0ZS4gICovCitleHRlcm4gZW51bSBkZWJ1Z19pbmZvX3R5cGUgd3JpdGVfc3ltYm9sczsKKworLyogTmFtZXMgb2YgZGVidWdfaW5mb190eXBlLCBmb3IgZXJyb3IgbWVzc2FnZXMuICAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IGRlYnVnX3R5cGVfbmFtZXNbXTsKKworZW51bSBkZWJ1Z19pbmZvX2xldmVsCit7CisgIERJTkZPX0xFVkVMX05PTkUsCS8qIFdyaXRlIG5vIGRlYnVnZ2luZyBpbmZvLiAgKi8KKyAgRElORk9fTEVWRUxfVEVSU0UsCS8qIFdyaXRlIG1pbmltYWwgaW5mbyB0byBzdXBwb3J0IHRyYWNlYmFja3Mgb25seS4gICovCisgIERJTkZPX0xFVkVMX05PUk1BTCwJLyogV3JpdGUgaW5mbyBmb3IgYWxsIGRlY2xhcmF0aW9ucyAoYW5kIGxpbmUgdGFibGUpLiAgKi8KKyAgRElORk9fTEVWRUxfVkVSQk9TRQkvKiBXcml0ZSBub3JtYWwgaW5mbyBwbHVzICNkZWZpbmUvI3VuZGVmIGluZm8uICAqLworfTsKKworLyogU3BlY2lmeSBob3cgbXVjaCBkZWJ1Z2dpbmcgaW5mbyB0byBnZW5lcmF0ZS4gICovCitleHRlcm4gZW51bSBkZWJ1Z19pbmZvX2xldmVsIGRlYnVnX2luZm9fbGV2ZWw7CisKKy8qIEEgbWFqb3IgY29udHJpYnV0aW9uIHRvIG9iamVjdCBhbmQgZXhlY3V0YWJsZSBzaXplIGlzIGRlYnVnCisgICBpbmZvcm1hdGlvbiBzaXplLiAgQSBtYWpvciBjb250cmlidXRpb24gdG8gZGVidWcgaW5mb3JtYXRpb24KKyAgIHNpemUgaXMgc3RydWN0IGRlc2NyaXB0aW9ucyByZXBsaWNhdGVkIGluIHNldmVyYWwgb2JqZWN0IGZpbGVzLgorICAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGRlYnVnIGluZm9ybWF0aW9uCisgICBzaG91bGQgYmUgZ2VuZXJhdGVkIGZvciBhIGdpdmVuIHN0cnVjdC4gIFRoZSBpbmRpcmVjdCBwYXJhbWV0ZXIKKyAgIGluZGljYXRlcyB0aGF0IHRoZSBzdHJ1Y3QgaXMgYmVpbmcgaGFuZGxlZCBpbmRpcmVjdGx5LCB2aWEKKyAgIGEgcG9pbnRlci4gIFNlZSBvcHRzLmMgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbi4gKi8KKworZW51bSBkZWJ1Z19pbmZvX3VzYWdlCit7CisgIERJTkZPX1VTQUdFX0RGTiwJLyogQSBzdHJ1Y3QgZGVmaW5pdGlvbi4gKi8KKyAgRElORk9fVVNBR0VfRElSX1VTRSwJLyogQSBkaXJlY3QgdXNlLCBzdWNoIGFzIHRoZSB0eXBlIG9mIGEgdmFyaWFibGUuICovCisgIERJTkZPX1VTQUdFX0lORF9VU0UsCS8qIEFuIGluZGlyZWN0IHVzZSwgc3VjaCBhcyB0aHJvdWdoIGEgcG9pbnRlci4gKi8KKyAgRElORk9fVVNBR0VfTlVNX0VOVU1TCS8qIFRoZSBudW1iZXIgb2YgZW51bWVyYXRvcnMuICovCit9OworCitleHRlcm4gYm9vbCBzaG91bGRfZW1pdF9zdHJ1Y3RfZGVidWcgKHRyZWUgdHlwZV9kZWNsLCBlbnVtIGRlYnVnX2luZm9fdXNhZ2UpOworZXh0ZXJuIHZvaWQgc2V0X3N0cnVjdF9kZWJ1Z19vcHRpb24gKGNvbnN0IGNoYXIgKnZhbHVlKTsKKworLyogTm9uemVybyBtZWFucyB1c2UgR05VLW9ubHkgZXh0ZW5zaW9ucyBpbiB0aGUgZ2VuZXJhdGVkIHN5bWJvbGljCisgICBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICAqLworZXh0ZXJuIGJvb2wgdXNlX2dudV9kZWJ1Z19pbmZvX2V4dGVuc2lvbnM7CisKKy8qIEVudW1lcmF0ZSB2aXNpYmlsaXR5IHNldHRpbmdzLiAgVGhpcyBpcyBkZWxpYmVyYXRlbHkgb3JkZXJlZCBmcm9tIG1vc3QKKyAgIHRvIGxlYXN0IHZpc2liaWxpdHkuICAqLworI2lmbmRlZiBTWU1CT0xfVklTSUJJTElUWV9ERUZJTkVECisjZGVmaW5lIFNZTUJPTF9WSVNJQklMSVRZX0RFRklORUQKK2VudW0gc3ltYm9sX3Zpc2liaWxpdHkKK3sKKyAgVklTSUJJTElUWV9ERUZBVUxULAorICBWSVNJQklMSVRZX1BST1RFQ1RFRCwKKyAgVklTSUJJTElUWV9ISURERU4sCisgIFZJU0lCSUxJVFlfSU5URVJOQUwKK307CisjZW5kaWYKKworLyogVGhlIGRlZmF1bHQgdmlzaWJpbGl0eSBmb3IgYWxsIHN5bWJvbHMgKHVubGVzcyBvdmVycmlkZGVuKS4gICovCitleHRlcm4gZW51bSBzeW1ib2xfdmlzaWJpbGl0eSBkZWZhdWx0X3Zpc2liaWxpdHk7CisKK3N0cnVjdCB2aXNpYmlsaXR5X2ZsYWdzCit7CisgIHVuc2lnbmVkIGlucHJhZ21hIDogMTsJLyogVHJ1ZSB3aGVuIGluICNwcmFnbWEgR0NDIHZpc2liaWxpdHkuICAqLworICB1bnNpZ25lZCBpbmxpbmVzX2hpZGRlbiA6IDE7CS8qIFRydWUgd2hlbiAtZmlubGluZXNoaWRkZW4gaW4gZWZmZWN0LiAgKi8KK307CisKKy8qIEdsb2JhbCB2aXNpYmlsaXR5IG9wdGlvbnMuICAqLworZXh0ZXJuIHN0cnVjdCB2aXNpYmlsaXR5X2ZsYWdzIHZpc2liaWxpdHlfb3B0aW9uczsKKworLyogTm9uemVybyBtZWFucyBkbyBvcHRpbWl6YXRpb25zLiAgLW9wdC4gICovCisKK2V4dGVybiBpbnQgb3B0aW1pemU7CisKKy8qIE5vbnplcm8gbWVhbnMgb3B0aW1pemUgZm9yIHNpemUuICAtT3MuICAqLworCitleHRlcm4gaW50IG9wdGltaXplX3NpemU7CisKKy8qIFRydWUgaWYgdGhpcyBpcyB0aGUgTFRPIGZyb250IGVuZCAobHRvMSkuICBUaGlzIGlzIHVzZWQgdG8gZGlzYWJsZQorICAgZ2ltcGxlIGdlbmVyYXRpb24gYW5kIGxvd2VyaW5nIHBhc3NlcyB0aGF0IGFyZSBub3JtYWxseSBydW4gb24gdGhlCisgICBvdXRwdXQgb2YgYSBmcm9udCBlbmQuICBUaGVzZSBwYXNzZXMgbXVzdCBiZSBieXBhc3NlZCBmb3IgbHRvIHNpbmNlCisgICB0aGV5IGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUgYmVmb3JlIHRoZSBnaW1wbGUgd2FzIHdyaXR0ZW4uICAqLworCitleHRlcm4gYm9vbCBpbl9sdG9fcDsKKworLyogTm9uemVybyBpZiB3ZSBzaG91bGQgd3JpdGUgR0lNUExFIGJ5dGVjb2RlIGZvciBsaW5rLXRpbWUgb3B0aW1pemF0aW9uLiAgKi8KKworZXh0ZXJuIGludCBmbGFnX2dlbmVyYXRlX2x0bzsKKworLyogVXNlZCB0byBzZXQgdGhlIGxldmVsIG9mIC1Xc3RyaWN0LWFsaWFzaW5nLCB3aGVuIG5vIGxldmVsIGlzIHNwZWNpZmllZC4KKyAgIFRoZSBleHRlcm5hbCB3YXkgdG8gc2V0IHRoZSBkZWZhdWx0IGxldmVsIGlzIHRvIHVzZQorICAgLVdzdHJpY3QtYWxpYXNpbmc9bGV2ZWwuCisgICBPTk9GRiBpcyBhc3N1bWVkIHRvIHRha2UgdmFsdWUgMSB3aGVuIC1Xc3RyaWN0LWFsaWFzaW5nIGlzIHNwZWNpZmllZCwKKyAgIGFuZCAwIG90aGVyd2lzZS4gIEFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgd3N0cmljdF9hbGlhc2luZyB3aWxsIGJlCisgICBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUgb2YgLVdzdHJpY3RfYWxpYXNpbmc9bGV2ZWwuICAqLworCitleHRlcm4gdm9pZCBzZXRfV3N0cmljdF9hbGlhc2luZyAoaW50IG9ub2ZmKTsKKworLyogTm9uemVybyBtZWFucyB3YXJuIGFib3V0IGFueSBvYmplY3RzIGRlZmluaXRpb25zIHdob3NlIHNpemUgaXMgbGFyZ2VyCisgICB0aGFuIE4gYnl0ZXMuICBBbHNvIHdhbnQgYWJvdXQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgd2hvc2UgcmV0dXJuZWQKKyAgIHZhbHVlcyBhcmUgbGFyZ2VyIHRoYW4gTiBieXRlcy4gVGhlIHZhbHVlIE4gaXMgaW4gYGxhcmdlcl90aGFuX3NpemUnLiAgKi8KKworZXh0ZXJuIGJvb2wgd2Fybl9sYXJnZXJfdGhhbjsKK2V4dGVybiBIT1NUX1dJREVfSU5UIGxhcmdlcl90aGFuX3NpemU7CisKKy8qIE5vbnplcm8gbWVhbnMgd2FybiBhYm91dCBhbnkgZnVuY3Rpb24gd2hvc2UgZnJhbWUgc2l6ZSBpcyBsYXJnZXIKKyAgIHRoYW4gTiBieXRlcy4gKi8KKworZXh0ZXJuIGJvb2wgd2Fybl9mcmFtZV9sYXJnZXJfdGhhbjsKK2V4dGVybiBIT1NUX1dJREVfSU5UIGZyYW1lX2xhcmdlcl90aGFuX3NpemU7CisKKy8qIE5vbnplcm8gZm9yIC1kcDogYW5ub3RhdGUgdGhlIGFzc2VtYmx5IHdpdGggYSBjb21tZW50IGRlc2NyaWJpbmcgdGhlCisgICBwYXR0ZXJuIGFuZCBhbHRlcm5hdGl2ZSB1c2VkLiAgKi8KKworZXh0ZXJuIGludCBmbGFnX3ByaW50X2FzbV9uYW1lOworDAorLyogTm93IHRoZSBzeW1ib2xzIHRoYXQgYXJlIHNldCB3aXRoIGAtZicgc3dpdGNoZXMuICAqLworCisvKiBOb256ZXJvIG1lYW5zIGBjaGFyJyBzaG91bGQgYmUgc2lnbmVkLiAgKi8KKworZXh0ZXJuIGludCBmbGFnX3NpZ25lZF9jaGFyOworCisvKiBOb256ZXJvIG1lYW5zIGdpdmUgYW4gZW51bSB0eXBlIG9ubHkgYXMgbWFueSBieXRlcyBhcyBpdCBuZWVkcy4gIEEgdmFsdWUKKyAgIG9mIDIgbWVhbnMgaXQgaGFzIG5vdCB5ZXQgYmVlbiBpbml0aWFsaXplZC4gICovCisKK2V4dGVybiBpbnQgZmxhZ19zaG9ydF9lbnVtczsKKworLyogTm9uemVybyBmb3IgLWZwY2Mtc3RydWN0LXJldHVybjogcmV0dXJuIHZhbHVlcyB0aGUgc2FtZSB3YXkgUENDIGRvZXMuICAqLworCitleHRlcm4gaW50IGZsYWdfcGNjX3N0cnVjdF9yZXR1cm47CisKKy8qIDAgbWVhbnMgc3RyYWlnaHRmb3J3YXJkIGltcGxlbWVudGF0aW9uIG9mIGNvbXBsZXggZGl2aWRlIGFjY2VwdGFibGUuCisgICAxIG1lYW5zIHdpZGUgcmFuZ2VzIG9mIGlucHV0cyBtdXN0IHdvcmsgZm9yIGNvbXBsZXggZGl2aWRlLgorICAgMiBtZWFucyBDOTktbGlrZSByZXF1aXJlbWVudHMgZm9yIGNvbXBsZXggbXVsdGlwbHkgYW5kIGRpdmlkZS4gICovCisKK2V4dGVybiBpbnQgZmxhZ19jb21wbGV4X21ldGhvZDsKKworLyogTm9uemVybyBpZiB3ZSBhcmUgb25seSB1c2luZyBjb21waWxlciB0byBjaGVjayBzeW50YXggZXJyb3JzLiAgKi8KKworZXh0ZXJuIGludCBydGxfZHVtcF9hbmRfZXhpdDsKKworLyogTm9uemVybyBtZWFucyB3ZSBzaG91bGQgc2F2ZSBhdXhpbGlhcnkgaW5mbyBpbnRvIGEgLlggZmlsZS4gICovCisKK2V4dGVybiBpbnQgZmxhZ19nZW5fYXV4X2luZm87CisKKy8qIE5vbnplcm8gbWVhbnMgc3VwcHJlc3Mgb3V0cHV0IG9mIGluc3RydWN0aW9uIG51bWJlcnMgYW5kIGxpbmUgbnVtYmVyCisgICBub3RlcyBpbiBkZWJ1Z2dpbmcgZHVtcHMuICAqLworCitleHRlcm4gaW50IGZsYWdfZHVtcF91bm51bWJlcmVkOworCisvKiBUcnVlIGlmIHByaW50aW5nIGludG8gLWZkdW1wLWZpbmFsLWluc25zPSBkdW1wLiAgKi8KKworZXh0ZXJuIGJvb2wgZmluYWxfaW5zbnNfZHVtcF9wOworCisvKiBOb256ZXJvIG1lYW5zIGNoYW5nZSBjZXJ0YWluIHdhcm5pbmdzIGludG8gZXJyb3JzLgorICAgVXN1YWxseSB0aGVzZSBhcmUgd2FybmluZ3MgYWJvdXQgZmFpbHVyZSB0byBjb25mb3JtIHRvIHNvbWUgc3RhbmRhcmQuICAqLworCitleHRlcm4gaW50IGZsYWdfcGVkYW50aWNfZXJyb3JzOworCisvKiBOb256ZXJvIG1lYW5zIG1ha2UgcGVybWVycm9yIHByb2R1Y2Ugd2FybmluZ3MgaW5zdGVhZCBvZiBlcnJvcnMuICAqLworCitleHRlcm4gaW50IGZsYWdfcGVybWlzc2l2ZTsKKworLyogTm9uemVybyBpZiB3ZSBhcmUgY29tcGlsaW5nIGNvZGUgZm9yIGEgc2hhcmVkIGxpYnJhcnksIHplcm8gZm9yCisgICBleGVjdXRhYmxlLiAgKi8KKworZXh0ZXJuIGludCBmbGFnX3NobGliOworCisvKiAtZEEgY2F1c2VzIGRlYnVnIGluZm9ybWF0aW9uIHRvIGJlIHByb2R1Y2VkIGluCisgICB0aGUgZ2VuZXJhdGVkIGFzc2VtYmx5IGNvZGUgKHRvIG1ha2UgaXQgbW9yZSByZWFkYWJsZSkuICBUaGlzIG9wdGlvbgorICAgaXMgZ2VuZXJhbGx5IG9ubHkgb2YgdXNlIHRvIHRob3NlIHdobyBhY3R1YWxseSBuZWVkIHRvIHJlYWQgdGhlCisgICBnZW5lcmF0ZWQgYXNzZW1ibHkgY29kZSAocGVyaGFwcyB3aGlsZSBkZWJ1Z2dpbmcgdGhlIGNvbXBpbGVyIGl0c2VsZikuCisgICBDdXJyZW50bHksIHRoaXMgc3dpdGNoIGlzIG9ubHkgdXNlZCBieSBkd2FyZm91dC5jOyBob3dldmVyLCBpdCBpcyBpbnRlbmRlZAorICAgdG8gYmUgYSBjYXRjaGFsbCBmb3IgcHJpbnRpbmcgZGVidWcgaW5mb3JtYXRpb24gaW4gdGhlIGFzc2VtYmxlciBmaWxlLiAgKi8KKworZXh0ZXJuIGludCBmbGFnX2RlYnVnX2FzbTsKKworLyogR2VuZXJhdGUgY29kZSBmb3IgR05VIG9yIE5lWFQgT2JqZWN0aXZlLUMgcnVudGltZSBlbnZpcm9ubWVudC4gICovCisKK2V4dGVybiBpbnQgZmxhZ19uZXh0X3J1bnRpbWU7CisKK2V4dGVybiBpbnQgZmxhZ19kdW1wX3J0bF9pbl9hc207CisKKy8qIFRoZSBhbGdvcml0aG0gdXNlZCBmb3IgdGhlIGludGVncmF0ZWQgcmVnaXN0ZXIgYWxsb2NhdG9yIChJUkEpLiAgKi8KK2VudW0gaXJhX2FsZ29yaXRobQoreworICBJUkFfQUxHT1JJVEhNX0NCLAorICBJUkFfQUxHT1JJVEhNX1BSSU9SSVRZCit9OworCitleHRlcm4gZW51bSBpcmFfYWxnb3JpdGhtIGZsYWdfaXJhX2FsZ29yaXRobTsKKworLyogVGhlIHJlZ2lvbnMgdXNlZCBmb3IgdGhlIGludGVncmF0ZWQgcmVnaXN0ZXIgYWxsb2NhdG9yIChJUkEpLiAgKi8KK2VudW0gaXJhX3JlZ2lvbgoreworICBJUkFfUkVHSU9OX09ORSwKKyAgSVJBX1JFR0lPTl9BTEwsCisgIElSQV9SRUdJT05fTUlYRUQKK307CisKK2V4dGVybiBlbnVtIGlyYV9yZWdpb24gZmxhZ19pcmFfcmVnaW9uOworCitleHRlcm4gdW5zaWduZWQgaW50IGZsYWdfaXJhX3ZlcmJvc2U7CisKKy8qIFRoZSBvcHRpb25zIGZvciBleGNlc3MgcHJlY2lzaW9uLiAgKi8KK2VudW0gZXhjZXNzX3ByZWNpc2lvbgoreworICBFWENFU1NfUFJFQ0lTSU9OX0RFRkFVTFQsCisgIEVYQ0VTU19QUkVDSVNJT05fRkFTVCwKKyAgRVhDRVNTX1BSRUNJU0lPTl9TVEFOREFSRAorfTsKKworLyogVGhlIGV4Y2VzcyBwcmVjaXNpb24gc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIG9yIGRlZmF1bHRlZCBieQorICAgdGhlIGZyb250IGVuZC4gICovCitleHRlcm4gZW51bSBleGNlc3NfcHJlY2lzaW9uIGZsYWdfZXhjZXNzX3ByZWNpc2lvbl9jbWRsaW5lOworCisvKiBUaGUgZXhjZXNzIHByZWNpc2lvbiBjdXJyZW50bHkgaW4gZWZmZWN0LiAgKi8KK2V4dGVybiBlbnVtIGV4Y2Vzc19wcmVjaXNpb24gZmxhZ19leGNlc3NfcHJlY2lzaW9uOworCisMCisvKiBPdGhlciBiYXNpYyBzdGF0dXMgaW5mbyBhYm91dCBjdXJyZW50IGZ1bmN0aW9uLiAgKi8KKworLyogTm9uemVybyBpZiBzdWJleHByZXNzaW9ucyBtdXN0IGJlIGV2YWx1YXRlZCBmcm9tIGxlZnQtdG8tcmlnaHQuICAqLworZXh0ZXJuIGludCBmbGFnX2V2YWx1YXRpb25fb3JkZXI7CisKKy8qIFZhbHVlIG9mIHRoZSAtRyB4eCBzd2l0Y2gsIGFuZCB3aGV0aGVyIGl0IHdhcyBwYXNzZWQgb3Igbm90LiAgKi8KK2V4dGVybiB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGdfc3dpdGNoX3ZhbHVlOworZXh0ZXJuIGJvb2wgZ19zd2l0Y2hfc2V0OworCisvKiBTYW1lIGZvciBzZWxlY3RpdmUgc2NoZWR1bGluZy4gICovCitleHRlcm4gYm9vbCBzZWxfc2NoZWRfc3dpdGNoX3NldDsKKworLyogV2hldGhlciB0byBydW4gdGhlIHdhcm5fdW51c2VkX3Jlc3VsdCBhdHRyaWJ1dGUgcGFzcy4gICovCitleHRlcm4gYm9vbCBmbGFnX3dhcm5fdW51c2VkX3Jlc3VsdDsKKworLyogVmFsdWVzIG9mIHRoZSAtZmFsaWduLSogZmxhZ3M6IGhvdyBtdWNoIHRvIGFsaWduIGxhYmVscyBpbiBjb2RlLgorICAgMCBtZWFucyBgdXNlIGRlZmF1bHQnLCAxIG1lYW5zIGBkb24ndCBhbGlnbicuCisgICBGb3IgZWFjaCB2YXJpYWJsZSwgdGhlcmUgaXMgYW4gX2xvZyB2YXJpYW50IHdoaWNoIGlzIHRoZSBwb3dlcgorICAgb2YgdHdvIG5vdCBsZXNzIHRoYW4gdGhlIHZhcmlhYmxlLCBmb3IgLmFsaWduIG91dHB1dC4gICovCisKK2V4dGVybiBpbnQgYWxpZ25fbG9vcHNfbG9nOworZXh0ZXJuIGludCBhbGlnbl9sb29wc19tYXhfc2tpcDsKK2V4dGVybiBpbnQgYWxpZ25fanVtcHNfbG9nOworZXh0ZXJuIGludCBhbGlnbl9qdW1wc19tYXhfc2tpcDsKK2V4dGVybiBpbnQgYWxpZ25fbGFiZWxzX2xvZzsKK2V4dGVybiBpbnQgYWxpZ25fbGFiZWxzX21heF9za2lwOworZXh0ZXJuIGludCBhbGlnbl9mdW5jdGlvbnNfbG9nOworCisvKiBOb256ZXJvIGlmIHdlIGR1bXAgaW4gVkNHIGZvcm1hdCwgbm90IHBsYWluIHRleHQuICAqLworZXh0ZXJuIGludCBkdW1wX2Zvcl9ncmFwaDsKKworLyogU2VsZWN0aW9uIG9mIHRoZSBncmFwaCBmb3JtLiAgKi8KK2VudW0gZ3JhcGhfZHVtcF90eXBlcworeworICBub19ncmFwaCA9IDAsCisgIHZjZworfTsKK2V4dGVybiBlbnVtIGdyYXBoX2R1bXBfdHlwZXMgZ3JhcGhfZHVtcF9mb3JtYXQ7CisKKy8qIE5vbnplcm8gbWVhbnMgdG8gY29sbGVjdCBzdGF0aXN0aWNzIHdoaWNoIG1pZ2h0IGJlIGV4cGVuc2l2ZQorICAgYW5kIHRvIHByaW50IHRoZW0gd2hlbiB3ZSBhcmUgZG9uZS4gICovCitleHRlcm4gaW50IGZsYWdfZGV0YWlsZWRfc3RhdGlzdGljczsKKworLyogTm9uemVybyBtZWFucyB0aGF0IHdlIGRlZmVyIGVtaXR0aW5nIGZ1bmN0aW9ucyB1bnRpbCB0aGV5IGFyZSBhY3R1YWxseQorICAgdXNlZC4gICovCitleHRlcm4gaW50IGZsYWdfcmVtb3ZlX3VucmVhY2hhYmxlX2Z1bmN0aW9uczsKKworLyogTm9uemVybyBpZiB3ZSBzaG91bGQgdHJhY2sgdmFyaWFibGVzLiAgKi8KK2V4dGVybiBpbnQgZmxhZ192YXJfdHJhY2tpbmc7CisKKy8qIFRydWUgaWYgZmxhZ19zcGVjdWxhdGl2ZV9wcmVmZXRjaGluZyB3YXMgc2V0IGJ5IHVzZXIuICBVc2VkIHRvIHN1cHByZXNzCisgICB3YXJuaW5nIG1lc3NhZ2UgaW4gY2FzZSBmbGFnIHdhcyBzZXQgYnkgLWZwcm9maWxlLXtnZW5lcmF0ZSx1c2V9LiAgKi8KK2V4dGVybiBib29sIGZsYWdfc3BlY3VsYXRpdmVfcHJlZmV0Y2hpbmdfc2V0OworCisvKiBUeXBlIG9mIHN0YWNrIGNoZWNrLiAgKi8KK2VudW0gc3RhY2tfY2hlY2tfdHlwZQoreworICAvKiBEbyBub3QgY2hlY2sgdGhlIHN0YWNrLiAgKi8KKyAgTk9fU1RBQ0tfQ0hFQ0sgPSAwLAorCisgIC8qIENoZWNrIHRoZSBzdGFjayBnZW5lcmljYWxseSwgaS5lLiBhc3N1bWUgbm8gc3BlY2lmaWMgc3VwcG9ydAorICAgICBmcm9tIHRoZSB0YXJnZXQgY29uZmlndXJhdGlvbiBmaWxlcy4gICovCisgIEdFTkVSSUNfU1RBQ0tfQ0hFQ0ssCisKKyAgLyogQ2hlY2sgdGhlIHN0YWNrIGFuZCByZWx5IG9uIHRoZSB0YXJnZXQgY29uZmlndXJhdGlvbiBmaWxlcyB0bworICAgICBjaGVjayB0aGUgc3RhdGljIGZyYW1lIG9mIGZ1bmN0aW9ucywgaS5lLiB1c2UgdGhlIGdlbmVyaWMKKyAgICAgbWVjaGFuaXNtIG9ubHkgZm9yIGR5bmFtaWMgc3RhY2sgYWxsb2NhdGlvbnMuICAqLworICBTVEFUSUNfQlVJTFRJTl9TVEFDS19DSEVDSywKKworICAvKiBDaGVjayB0aGUgc3RhY2sgYW5kIGVudGlyZWx5IHJlbHkgb24gdGhlIHRhcmdldCBjb25maWd1cmF0aW9uCisgICAgIGZpbGVzLCBpLmUuIGRvIG5vdCB1c2UgdGhlIGdlbmVyaWMgbWVjaGFuaXNtIGF0IGFsbC4gICovCisgIEZVTExfQlVJTFRJTl9TVEFDS19DSEVDSworfTsKK2V4dGVybiBlbnVtIHN0YWNrX2NoZWNrX3R5cGUgZmxhZ19zdGFja19jaGVjazsKKworLyogUmV0dXJucyBUUlVFIGlmIGdlbmVyYXRlZCBjb2RlIHNob3VsZCBtYXRjaCBBQkkgdmVyc2lvbiBOIG9yCisgICBncmVhdGVyIGlzIGluIHVzZS4gICovCisKKyNkZWZpbmUgYWJpX3ZlcnNpb25fYXRfbGVhc3QoTikgXAorICAoZmxhZ19hYmlfdmVyc2lvbiA9PSAwIHx8IGZsYWdfYWJpX3ZlcnNpb24gPj0gKE4pKQorCisvKiBSZXR1cm4gd2hldGhlciB0aGUgZnVuY3Rpb24gc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20KKyAgIGluc3RydW1lbnRhdGlvbi4gICovCitleHRlcm4gYm9vbCBmbGFnX2luc3RydW1lbnRfZnVuY3Rpb25zX2V4Y2x1ZGVfcCAodHJlZSBmbmRlY2wpOworCisvKiBUcnVlIGlmIG92ZXJmbG93IHdyYXBzIGFyb3VuZCBmb3IgdGhlIGdpdmVuIGludGVncmFsIHR5cGUuICBUaGF0CisgICBpcywgVFlQRV9NQVggKyAxID09IFRZUEVfTUlOLiAgKi8KKyNkZWZpbmUgVFlQRV9PVkVSRkxPV19XUkFQUyhUWVBFKSBcCisgIChUWVBFX1VOU0lHTkVEIChUWVBFKSB8fCBmbGFnX3dyYXB2KQorCisvKiBUcnVlIGlmIG92ZXJmbG93IGlzIHVuZGVmaW5lZCBmb3IgdGhlIGdpdmVuIGludGVncmFsIHR5cGUuICBXZSBtYXkKKyAgIG9wdGltaXplIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdmFsdWVzIGluIHRoZSB0eXBlIG5ldmVyIG92ZXJmbG93LgorCisgICBJTVBPUlRBTlQgTk9URTogQW55IG9wdGltaXphdGlvbiBiYXNlZCBvbiBUWVBFX09WRVJGTE9XX1VOREVGSU5FRAorICAgbXVzdCBpc3N1ZSBhIHdhcm5pbmcgYmFzZWQgb24gd2Fybl9zdHJpY3Rfb3ZlcmZsb3cuICBJbiBzb21lIGNhc2VzCisgICBpdCB3aWxsIGJlIGFwcHJvcHJpYXRlIHRvIGlzc3VlIHRoZSB3YXJuaW5nIGltbWVkaWF0ZWx5LCBhbmQgaW4KKyAgIG90aGVyIGNhc2VzIGl0IHdpbGwgYmUgYXBwcm9wcmlhdGUgdG8gc2ltcGx5IHNldCBhIGZsYWcgYW5kIGxldCB0aGUKKyAgIGNhbGxlciBkZWNpZGUgd2hldGhlciBhIHdhcm5pbmcgaXMgYXBwcm9wcmlhdGUgb3Igbm90LiAgKi8KKyNkZWZpbmUgVFlQRV9PVkVSRkxPV19VTkRFRklORUQoVFlQRSkgXAorICAoIVRZUEVfVU5TSUdORUQgKFRZUEUpICYmICFmbGFnX3dyYXB2ICYmICFmbGFnX3RyYXB2ICYmIGZsYWdfc3RyaWN0X292ZXJmbG93KQorCisvKiBUcnVlIGlmIG92ZXJmbG93IGZvciB0aGUgZ2l2ZW4gaW50ZWdyYWwgdHlwZSBzaG91bGQgaXNzdWUgYQorICAgdHJhcC4gICovCisjZGVmaW5lIFRZUEVfT1ZFUkZMT1dfVFJBUFMoVFlQRSkgXAorICAoIVRZUEVfVU5TSUdORUQgKFRZUEUpICYmIGZsYWdfdHJhcHYpCisKKy8qIFRydWUgaWYgcG9pbnRlciB0eXBlcyBoYXZlIHVuZGVmaW5lZCBvdmVyZmxvdy4gICovCisjZGVmaW5lIFBPSU5URVJfVFlQRV9PVkVSRkxPV19VTkRFRklORUQgKGZsYWdfc3RyaWN0X292ZXJmbG93KQorCisvKiBOYW1lcyBmb3IgdGhlIGRpZmZlcmVudCBsZXZlbHMgb2YgLVdzdHJpY3Qtb3ZlcmZsb3c9Ti4gIFRoZSBudW1lcmljCisgICB2YWx1ZXMgaGVyZSBjb3JyZXNwb25kIHRvIE4uICAqLworCitlbnVtIHdhcm5fc3RyaWN0X292ZXJmbG93X2NvZGUKK3sKKyAgLyogT3ZlcmZsb3cgd2FybmluZyB0aGF0IHNob3VsZCBiZSBpc3N1ZWQgd2l0aCAtV2FsbDogYSBxdWVzdGlvbmFibGUKKyAgICAgY29uc3RydWN0IHRoYXQgaXMgZWFzeSB0byBhdm9pZCBldmVuIHdoZW4gdXNpbmcgbWFjcm9zLiAgRXhhbXBsZToKKyAgICAgZm9sZGluZyAoeCArIENPTlNUQU5UID4geCkgdG8gMS4gICovCisgIFdBUk5fU1RSSUNUX09WRVJGTE9XX0FMTCA9IDEsCisgIC8qIE92ZXJmbG93IHdhcm5pbmcgYWJvdXQgZm9sZGluZyBhIGNvbXBhcmlzb24gdG8gYSBjb25zdGFudCBiZWNhdXNlCisgICAgIG9mIHVuZGVmaW5lZCBzaWduZWQgb3ZlcmZsb3csIG90aGVyIHRoYW4gY2FzZXMgY292ZXJlZCBieQorICAgICBXQVJOX1NUUklDVF9PVkVSRkxPV19BTEwuICBFeGFtcGxlOiBmb2xkaW5nIChhYnMgKHgpID49IDApIHRvIDEKKyAgICAgKHRoaXMgaXMgZmFsc2Ugd2hlbiB4ID09IElOVF9NSU4pLiAgKi8KKyAgV0FSTl9TVFJJQ1RfT1ZFUkZMT1dfQ09ORElUSU9OQUwgPSAyLAorICAvKiBPdmVyZmxvdyB3YXJuaW5nIGFib3V0IGNoYW5nZXMgdG8gY29tcGFyaXNvbnMgb3RoZXIgdGhhbiBmb2xkaW5nCisgICAgIHRoZW0gdG8gYSBjb25zdGFudC4gIEV4YW1wbGU6IGZvbGRpbmcgKHggKyAxID4gMSkgdG8gKHggPiAwKS4gICovCisgIFdBUk5fU1RSSUNUX09WRVJGTE9XX0NPTVBBUklTT04gPSAzLAorICAvKiBPdmVyZmxvdyB3YXJuaW5ncyBub3QgY292ZXJlZCBieSB0aGUgYWJvdmUgY2FzZXMuICBFeGFtcGxlOgorICAgICBmb2xkaW5nICgoeCAqIDEwKSAvIDUpIHRvICh4ICogMikuICAqLworICBXQVJOX1NUUklDVF9PVkVSRkxPV19NSVNDID0gNCwKKyAgLyogT3ZlcmZsb3cgd2FybmluZ3MgYWJvdXQgcmVkdWNpbmcgbWFnbml0dWRlIG9mIGNvbnN0YW50cyBpbgorICAgICBjb21wYXJpc29uLiAgRXhhbXBsZTogZm9sZGluZyAoeCArIDIgPiB5KSB0byAoeCArIDEgPj0geSkuICAqLworICBXQVJOX1NUUklDVF9PVkVSRkxPV19NQUdOSVRVREUgPSA1Cit9OworCisvKiBXaGV0aGVyIHRvIGVtaXQgYW4gb3ZlcmZsb3cgd2FybmluZyB3aG9zZSBjb2RlIGlzIEMuICAqLworI2RlZmluZSBpc3N1ZV9zdHJpY3Rfb3ZlcmZsb3dfd2FybmluZyhjKSAod2Fybl9zdHJpY3Rfb3ZlcmZsb3cgPj0gKGludCkgKGMpKQorCisjZW5kaWYgLyogISBHQ0NfRkxBR1NfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2Z1bmN0aW9uLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvZnVuY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjI5NjVhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2Z1bmN0aW9uLmgKQEAgLTAsMCArMSw3MDYgQEAKKy8qIFN0cnVjdHVyZSBmb3Igc2F2aW5nIHN0YXRlIGZvciBhIG5lc3RlZCBmdW5jdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwKKyAgIDE5OTksIDIwMDAsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfRlVOQ1RJT05fSAorI2RlZmluZSBHQ0NfRlVOQ1RJT05fSAorCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImhhc2h0YWIuaCIKKyNpbmNsdWRlICJ2ZWNwcmltLmgiCisKKy8qIFN0YWNrIG9mIHBlbmRpbmcgKGluY29tcGxldGUpIHNlcXVlbmNlcyBzYXZlZCBieSBgc3RhcnRfc2VxdWVuY2UnLgorICAgRWFjaCBlbGVtZW50IGRlc2NyaWJlcyBvbmUgcGVuZGluZyBzZXF1ZW5jZS4KKyAgIFRoZSBtYWluIGluc24tY2hhaW4gaXMgc2F2ZWQgaW4gdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgY2hhaW4sCisgICB1bmxlc3MgdGhlIGNoYWluIGlzIGVtcHR5LiAgKi8KKworc3RydWN0IEdUWSgoKSkgc2VxdWVuY2Vfc3RhY2sgeworICAvKiBGaXJzdCBhbmQgbGFzdCBpbnNucyBpbiB0aGUgY2hhaW4gb2YgdGhlIHNhdmVkIHNlcXVlbmNlLiAgKi8KKyAgcnR4IGZpcnN0OworICBydHggbGFzdDsKKyAgc3RydWN0IHNlcXVlbmNlX3N0YWNrICpuZXh0OworfTsKKwwKK3N0cnVjdCBHVFkoKCkpIGVtaXRfc3RhdHVzIHsKKyAgLyogVGhpcyBpcyByZXNldCB0byBMQVNUX1ZJUlRVQUxfUkVHSVNURVIgKyAxIGF0IHRoZSBzdGFydCBvZiBlYWNoIGZ1bmN0aW9uLgorICAgICBBZnRlciBydGwgZ2VuZXJhdGlvbiwgaXQgaXMgMSBwbHVzIHRoZSBsYXJnZXN0IHJlZ2lzdGVyIG51bWJlciB1c2VkLiAgKi8KKyAgaW50IHhfcmVnX3J0eF9ubzsKKworICAvKiBMb3dlc3QgbGFiZWwgbnVtYmVyIGluIGN1cnJlbnQgZnVuY3Rpb24uICAqLworICBpbnQgeF9maXJzdF9sYWJlbF9udW07CisKKyAgLyogVGhlIGVuZHMgb2YgdGhlIGRvdWJseS1saW5rZWQgY2hhaW4gb2YgcnRsIGZvciB0aGUgY3VycmVudCBmdW5jdGlvbi4KKyAgICAgQm90aCBhcmUgcmVzZXQgdG8gbnVsbCBhdCB0aGUgc3RhcnQgb2YgcnRsIGdlbmVyYXRpb24gZm9yIHRoZSBmdW5jdGlvbi4KKworICAgICBzdGFydF9zZXF1ZW5jZSBzYXZlcyBib3RoIG9mIHRoZXNlIG9uIGBzZXF1ZW5jZV9zdGFjaycgYW5kIHRoZW4gc3RhcnRzCisgICAgIGEgbmV3LCBuZXN0ZWQgc2VxdWVuY2Ugb2YgaW5zbnMuICAqLworICBydHggeF9maXJzdF9pbnNuOworICBydHggeF9sYXN0X2luc247CisKKyAgLyogU3RhY2sgb2YgcGVuZGluZyAoaW5jb21wbGV0ZSkgc2VxdWVuY2VzIHNhdmVkIGJ5IGBzdGFydF9zZXF1ZW5jZScuCisgICAgIEVhY2ggZWxlbWVudCBkZXNjcmliZXMgb25lIHBlbmRpbmcgc2VxdWVuY2UuCisgICAgIFRoZSBtYWluIGluc24tY2hhaW4gaXMgc2F2ZWQgaW4gdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgY2hhaW4sCisgICAgIHVubGVzcyB0aGUgY2hhaW4gaXMgZW1wdHkuICAqLworICBzdHJ1Y3Qgc2VxdWVuY2Vfc3RhY2sgKnNlcXVlbmNlX3N0YWNrOworCisgIC8qIElOU05fVUlEIGZvciBuZXh0IGluc24gZW1pdHRlZC4KKyAgICAgUmVzZXQgdG8gMSBmb3IgZWFjaCBmdW5jdGlvbiBjb21waWxlZC4gICovCisgIGludCB4X2N1cl9pbnNuX3VpZDsKKworICAvKiBJTlNOX1VJRCBmb3IgbmV4dCBkZWJ1ZyBpbnNuIGVtaXR0ZWQuICBPbmx5IHVzZWQgaWYKKyAgICAgLS1wYXJhbSBtaW4tbm9uZGVidWctaW5zbi11aWQ9PHZhbHVlPiBpcyBnaXZlbiB3aXRoIG5vbnplcm8gdmFsdWUuICAqLworICBpbnQgeF9jdXJfZGVidWdfaW5zbl91aWQ7CisKKyAgLyogTG9jYXRpb24gdGhlIGxhc3QgbGluZS1udW1iZXIgTk9URSBlbWl0dGVkLgorICAgICBUaGlzIGlzIHVzZWQgdG8gYXZvaWQgZ2VuZXJhdGluZyBkdXBsaWNhdGVzLiAgKi8KKyAgbG9jYXRpb25fdCB4X2xhc3RfbG9jYXRpb247CisKKyAgLyogVGhlIGxlbmd0aCBvZiB0aGUgcmVnbm9fcG9pbnRlcl9hbGlnbiwgcmVnbm9fZGVjbCwgYW5kIHhfcmVnbm9fcmVnX3J0eAorICAgICB2ZWN0b3JzLiAgU2luY2UgdGhlc2UgdmVjdG9ycyBhcmUgbmVlZGVkIGR1cmluZyB0aGUgZXhwYW5zaW9uIHBoYXNlIHdoZW4KKyAgICAgdGhlIHRvdGFsIG51bWJlciBvZiByZWdpc3RlcnMgaW4gdGhlIGZ1bmN0aW9uIGlzIG5vdCB5ZXQga25vd24sIHRoZQorICAgICB2ZWN0b3JzIGFyZSBjb3BpZWQgYW5kIG1hZGUgYmlnZ2VyIHdoZW4gbmVjZXNzYXJ5LiAgKi8KKyAgaW50IHJlZ25vX3BvaW50ZXJfYWxpZ25fbGVuZ3RoOworCisgIC8qIEluZGV4ZWQgYnkgcHNldWRvIHJlZ2lzdGVyIG51bWJlciwgaWYgbm9uemVybyBnaXZlcyB0aGUga25vd24gYWxpZ25tZW50CisgICAgIGZvciB0aGF0IHBzZXVkbyAoaWYgUkVHX1BPSU5URVIgaXMgc2V0IGluIHhfcmVnbm9fcmVnX3J0eCkuCisgICAgIEFsbG9jYXRlZCBpbiBwYXJhbGxlbCB3aXRoIHhfcmVnbm9fcmVnX3J0eC4gICovCisgIHVuc2lnbmVkIGNoYXIgKiBHVFkoKHNraXApKSByZWdub19wb2ludGVyX2FsaWduOworfTsKKworCisvKiBJbmRleGVkIGJ5IHBzZXVkbyByZWdpc3RlciBudW1iZXIsIGdpdmVzIHRoZSBydHggZm9yIHRoYXQgcHNldWRvLgorICAgQWxsb2NhdGVkIGluIHBhcmFsbGVsIHdpdGggcmVnbm9fcG9pbnRlcl9hbGlnbi4KKyAgIEZJWE1FOiBXZSBjb3VsZCBwdXQgaXQgaW50byBlbWl0X3N0YXR1cyBzdHJ1Y3QsIGJ1dCBnZW5ndHlwZSBpcyBub3QgYWJsZSB0byBkZWFsCisgICB3aXRoIGxlbmd0aCBhdHRyaWJ1dGUgbmVzdGVkIGluIHRvcCBsZXZlbCBzdHJ1Y3R1cmVzLiAgKi8KKworZXh0ZXJuIEdUWSAoKGxlbmd0aCAoImNydGwtPmVtaXQueF9yZWdfcnR4X25vIikpKSBydHggKiByZWdub19yZWdfcnR4OworCisvKiBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4uLiBldmVudHVhbGx5IHRoZXNlIHNob3VsZCBhbGwgZ28gYXdheS4gICovCisjZGVmaW5lIHJlZ19ydHhfbm8gKGNydGwtPmVtaXQueF9yZWdfcnR4X25vKQorI2RlZmluZSBzZXFfc3RhY2sgKGNydGwtPmVtaXQuc2VxdWVuY2Vfc3RhY2spCisKKyNkZWZpbmUgUkVHTk9fUE9JTlRFUl9BTElHTihSRUdOTykgKGNydGwtPmVtaXQucmVnbm9fcG9pbnRlcl9hbGlnbltSRUdOT10pCisKK3N0cnVjdCBHVFkoKCkpIGV4cHJfc3RhdHVzIHsKKyAgLyogTnVtYmVyIG9mIHVuaXRzIHRoYXQgd2Ugc2hvdWxkIGV2ZW50dWFsbHkgcG9wIG9mZiB0aGUgc3RhY2suCisgICAgIFRoZXNlIGFyZSB0aGUgYXJndW1lbnRzIHRvIGZ1bmN0aW9uIGNhbGxzIHRoYXQgaGF2ZSBhbHJlYWR5IHJldHVybmVkLiAgKi8KKyAgaW50IHhfcGVuZGluZ19zdGFja19hZGp1c3Q7CisKKyAgLyogVW5kZXIgc29tZSBBQklzLCBpdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gcG9wIGFyZ3VtZW50cworICAgICBwdXNoZWQgZm9yIGZ1bmN0aW9uIGNhbGxzLiAgQSBuYWl2ZSBpbXBsZW1lbnRhdGlvbiB3b3VsZCBzaW1wbHkgcG9wCisgICAgIHRoZSBhcmd1bWVudHMgaW1tZWRpYXRlbHkgYWZ0ZXIgZWFjaCBjYWxsLiAgSG93ZXZlciwgaWYgc2V2ZXJhbAorICAgICBmdW5jdGlvbiBjYWxscyBhcmUgbWFkZSBpbiBhIHJvdywgaXQgaXMgdHlwaWNhbGx5IGNoZWFwZXIgdG8gcG9wCisgICAgIGFsbCB0aGUgYXJndW1lbnRzIGFmdGVyIGFsbCBvZiB0aGUgY2FsbHMgYXJlIGNvbXBsZXRlIHNpbmNlIGEKKyAgICAgc2luZ2xlIHBvcCBpbnN0cnVjdGlvbiBjYW4gYmUgdXNlZC4gIFRoZXJlZm9yZSwgR0NDIGF0dGVtcHRzIHRvCisgICAgIGRlZmVyIHBvcHBpbmcgdGhlIGFyZ3VtZW50cyB1bnRpbCBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4gIChGb3IKKyAgICAgZXhhbXBsZSwgYXQgdGhlIGVuZCBvZiBhIGNvbmRpdGlvbmFsLCB0aGUgYXJndW1lbnRzIG11c3QgYmUgcG9wcGVkLAorICAgICBzaW5jZSBjb2RlIG91dHNpZGUgdGhlIGNvbmRpdGlvbmFsIHdvbid0IGtub3cgd2hldGhlciBvciBub3QgdGhlCisgICAgIGFyZ3VtZW50cyBuZWVkIHRvIGJlIHBvcHBlZC4pCisKKyAgICAgV2hlbiBJTkhJQklUX0RFRkVSX1BPUCBpcyBub256ZXJvLCBob3dldmVyLCB0aGUgY29tcGlsZXIgZG9lcyBub3QKKyAgICAgYXR0ZW1wdCB0byBkZWZlciBwb3BzLiAgSW5zdGVhZCwgdGhlIHN0YWNrIGlzIHBvcHBlZCBpbW1lZGlhdGVseQorICAgICBhZnRlciBlYWNoIGNhbGwuICBSYXRoZXIgdGhlbiBzZXR0aW5nIHRoaXMgdmFyaWFibGUgZGlyZWN0bHksIHVzZQorICAgICBOT19ERUZFUl9QT1AgYW5kIE9LX0RFRkVSX1BPUC4gICovCisgIGludCB4X2luaGliaXRfZGVmZXJfcG9wOworCisgIC8qIElmIFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWSBhbmQgUFVTSF9ST1VORElORyBhcmUgZGVmaW5lZCwgdGhlIHN0YWNrCisgICAgIGJvdW5kYXJ5IGNhbiBiZSBtb21lbnRhcmlseSB1bmFsaWduZWQgd2hpbGUgcHVzaGluZyB0aGUgYXJndW1lbnRzLgorICAgICBSZWNvcmQgdGhlIGRlbHRhIHNpbmNlIGxhc3QgYWxpZ25lZCBib3VuZGFyeSBoZXJlIGluIG9yZGVyIHRvIGdldAorICAgICBzdGFjayBhbGlnbm1lbnQgaW4gdGhlIG5lc3RlZCBmdW5jdGlvbiBjYWxscyB3b3JraW5nIHJpZ2h0LiAgKi8KKyAgaW50IHhfc3RhY2tfcG9pbnRlcl9kZWx0YTsKKworICAvKiBOb256ZXJvIG1lYW5zIF9fYnVpbHRpbl9zYXZlcmVncyBoYXMgYWxyZWFkeSBiZWVuIGRvbmUgaW4gdGhpcyBmdW5jdGlvbi4KKyAgICAgVGhlIHZhbHVlIGlzIHRoZSBwc2V1ZG9yZWcgY29udGFpbmluZyB0aGUgdmFsdWUgX19idWlsdGluX3NhdmVyZWdzCisgICAgIHJldHVybmVkLiAgKi8KKyAgcnR4IHhfc2F2ZXJlZ3NfdmFsdWU7CisKKyAgLyogU2ltaWxhcmx5IGZvciBfX2J1aWx0aW5fYXBwbHlfYXJncy4gICovCisgIHJ0eCB4X2FwcGx5X2FyZ3NfdmFsdWU7CisKKyAgLyogTGlzdCBvZiBsYWJlbHMgdGhhdCBtdXN0IG5ldmVyIGJlIGRlbGV0ZWQuICAqLworICBydHggeF9mb3JjZWRfbGFiZWxzOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgY2FsbF9zaXRlX3JlY29yZF9kICpjYWxsX3NpdGVfcmVjb3JkOworREVGX1ZFQ19QKGNhbGxfc2l0ZV9yZWNvcmQpOworREVGX1ZFQ19BTExPQ19QKGNhbGxfc2l0ZV9yZWNvcmQsIGdjKTsKKworLyogUlRMIHJlcHJlc2VudGF0aW9uIG9mIGV4Y2VwdGlvbiBoYW5kbGluZy4gICovCitzdHJ1Y3QgR1RZKCgpKSBydGxfZWggeworICBydHggZWhyX3N0YWNrYWRqOworICBydHggZWhyX2hhbmRsZXI7CisgIHJ0eCBlaHJfbGFiZWw7CisKKyAgcnR4IHNqbGpfZmM7CisgIHJ0eCBzamxqX2V4aXRfYWZ0ZXI7CisKKyAgVkVDKHVjaGFyLGdjKSAqYWN0aW9uX3JlY29yZF9kYXRhOworCisgIFZFQyhjYWxsX3NpdGVfcmVjb3JkLGdjKSAqY2FsbF9zaXRlX3JlY29yZFsyXTsKK307CisKKyNkZWZpbmUgcGVuZGluZ19zdGFja19hZGp1c3QgKGNydGwtPmV4cHIueF9wZW5kaW5nX3N0YWNrX2FkanVzdCkKKyNkZWZpbmUgaW5oaWJpdF9kZWZlcl9wb3AgKGNydGwtPmV4cHIueF9pbmhpYml0X2RlZmVyX3BvcCkKKyNkZWZpbmUgc2F2ZXJlZ3NfdmFsdWUgKGNydGwtPmV4cHIueF9zYXZlcmVnc192YWx1ZSkKKyNkZWZpbmUgYXBwbHlfYXJnc192YWx1ZSAoY3J0bC0+ZXhwci54X2FwcGx5X2FyZ3NfdmFsdWUpCisjZGVmaW5lIGZvcmNlZF9sYWJlbHMgKGNydGwtPmV4cHIueF9mb3JjZWRfbGFiZWxzKQorI2RlZmluZSBzdGFja19wb2ludGVyX2RlbHRhIChjcnRsLT5leHByLnhfc3RhY2tfcG9pbnRlcl9kZWx0YSkKKworc3RydWN0IGdpbXBsZV9kZjsKK3N0cnVjdCB0ZW1wX3Nsb3Q7Cit0eXBlZGVmIHN0cnVjdCB0ZW1wX3Nsb3QgKnRlbXBfc2xvdF9wOworc3RydWN0IGNhbGxfc2l0ZV9yZWNvcmRfZDsKKworREVGX1ZFQ19QKHRlbXBfc2xvdF9wKTsKK0RFRl9WRUNfQUxMT0NfUCh0ZW1wX3Nsb3RfcCxnYyk7CitzdHJ1Y3QgaXBhX29wdF9wYXNzX2Q7Cit0eXBlZGVmIHN0cnVjdCBpcGFfb3B0X3Bhc3NfZCAqaXBhX29wdF9wYXNzOworCitERUZfVkVDX1AoaXBhX29wdF9wYXNzKTsKK0RFRl9WRUNfQUxMT0NfUChpcGFfb3B0X3Bhc3MsaGVhcCk7CisKK2VudW0gZnVuY3Rpb25fZnJlcXVlbmN5IHsKKyAgLyogVGhpcyBmdW5jdGlvbiBtb3N0IGxpa2VseSB3b24ndCBiZSBleGVjdXRlZCBhdCBhbGwuCisgICAgIChzZXQgb25seSB3aGVuIHByb2ZpbGUgZmVlZGJhY2sgaXMgYXZhaWxhYmxlIG9yIHZpYSBmdW5jdGlvbiBhdHRyaWJ1dGUpLiAqLworICBGVU5DVElPTl9GUkVRVUVOQ1lfVU5MSUtFTFlfRVhFQ1VURUQsCisgIC8qIFRoZSBkZWZhdWx0IHZhbHVlLiAgKi8KKyAgRlVOQ1RJT05fRlJFUVVFTkNZX05PUk1BTCwKKyAgLyogT3B0aW1pemUgdGhpcyBmdW5jdGlvbiBoYXJkCisgICAgIChzZXQgb25seSB3aGVuIHByb2ZpbGUgZmVlZGJhY2sgaXMgYXZhaWxhYmxlIG9yIHZpYSBmdW5jdGlvbiBhdHRyaWJ1dGUpLiAqLworICBGVU5DVElPTl9GUkVRVUVOQ1lfSE9UCit9OworCitzdHJ1Y3QgR1RZKCgpKSB2YXJhc21fc3RhdHVzIHsKKyAgLyogSWYgd2UncmUgdXNpbmcgYSBwZXItZnVuY3Rpb24gY29uc3RhbnQgcG9vbCwgdGhpcyBpcyBpdC4gICovCisgIHN0cnVjdCBydHhfY29uc3RhbnRfcG9vbCAqcG9vbDsKKworICAvKiBOdW1iZXIgb2YgdHJlZS1jb25zdGFudHMgZGVmZXJyZWQgZHVyaW5nIHRoZSBleHBhbnNpb24gb2YgdGhpcworICAgICBmdW5jdGlvbi4gICovCisgIHVuc2lnbmVkIGludCBkZWZlcnJlZF9jb25zdGFudHM7Cit9OworCisvKiBJbmZvcm1hdGlvbiBtYWlubGluZWQgYWJvdXQgUlRMIHJlcHJlc2VudGF0aW9uIG9mIGluY29taW5nIGFyZ3VtZW50cy4gICovCitzdHJ1Y3QgR1RZKCgpKSBpbmNvbWluZ19hcmdzIHsKKyAgLyogTnVtYmVyIG9mIGJ5dGVzIG9mIGFyZ3MgcG9wcGVkIGJ5IGZ1bmN0aW9uIGJlaW5nIGNvbXBpbGVkIG9uIGl0cyByZXR1cm4uCisgICAgIFplcm8gaWYgbm8gYnl0ZXMgYXJlIHRvIGJlIHBvcHBlZC4KKyAgICAgTWF5IGFmZmVjdCBjb21waWxhdGlvbiBvZiByZXR1cm4gaW5zbiBvciBvZiBmdW5jdGlvbiBlcGlsb2d1ZS4gICovCisgIGludCBwb3BzX2FyZ3M7CisKKyAgLyogSWYgZnVuY3Rpb24ncyBhcmdzIGhhdmUgYSBmaXhlZCBzaXplLCB0aGlzIGlzIHRoYXQgc2l6ZSwgaW4gYnl0ZXMuCisgICAgIE90aGVyd2lzZSwgaXQgaXMgLTEuCisgICAgIE1heSBhZmZlY3QgY29tcGlsYXRpb24gb2YgcmV0dXJuIGluc24gb3Igb2YgZnVuY3Rpb24gZXBpbG9ndWUuICAqLworICBpbnQgc2l6ZTsKKworICAvKiAjIGJ5dGVzIHRoZSBwcm9sb2d1ZSBzaG91bGQgcHVzaCBhbmQgcHJldGVuZCB0aGF0IHRoZSBjYWxsZXIgcHVzaGVkIHRoZW0uCisgICAgIFRoZSBwcm9sb2d1ZSBtdXN0IGRvIHRoaXMsIGJ1dCBvbmx5IGlmIHBhcm1zIGNhbiBiZSBwYXNzZWQgaW4KKyAgICAgcmVnaXN0ZXJzLiAgKi8KKyAgaW50IHByZXRlbmRfYXJnc19zaXplOworCisgIC8qIFRoaXMgaXMgdGhlIG9mZnNldCBmcm9tIHRoZSBhcmcgcG9pbnRlciB0byB0aGUgcGxhY2Ugd2hlcmUgdGhlIGZpcnN0CisgICAgIGFub255bW91cyBhcmcgY2FuIGJlIGZvdW5kLCBpZiB0aGVyZSBpcyBvbmUuICAqLworICBydHggYXJnX29mZnNldF9ydHg7CisKKyAgLyogUXVhbnRpdGllcyBvZiB2YXJpb3VzIGtpbmRzIG9mIHJlZ2lzdGVycworICAgICB1c2VkIGZvciB0aGUgY3VycmVudCBmdW5jdGlvbidzIGFyZ3MuICAqLworICBDVU1VTEFUSVZFX0FSR1MgaW5mbzsKKworICAvKiBUaGUgYXJnIHBvaW50ZXIgaGFyZCByZWdpc3Rlciwgb3IgdGhlIHBzZXVkbyBpbnRvIHdoaWNoIGl0IHdhcyBjb3BpZWQuICAqLworICBydHggaW50ZXJuYWxfYXJnX3BvaW50ZXI7Cit9OworCisvKiBEYXRhIGZvciBmdW5jdGlvbiBwYXJ0aXRpb25pbmcuICAqLworc3RydWN0IEdUWSgoKSkgZnVuY3Rpb25fc3Vic2VjdGlvbnMgeworICAvKiBBc3NlbWJseSBsYWJlbHMgZm9yIHRoZSBob3QgYW5kIGNvbGQgdGV4dCBzZWN0aW9ucywgdG8KKyAgICAgYmUgdXNlZCBieSBkZWJ1Z2dlciBmdW5jdGlvbnMgZm9yIGRldGVybWluaW5nIHRoZSBzaXplIG9mIHRleHQKKyAgICAgc2VjdGlvbnMuICAqLworCisgIGNvbnN0IGNoYXIgKmhvdF9zZWN0aW9uX2xhYmVsOworICBjb25zdCBjaGFyICpjb2xkX3NlY3Rpb25fbGFiZWw7CisgIGNvbnN0IGNoYXIgKmhvdF9zZWN0aW9uX2VuZF9sYWJlbDsKKyAgY29uc3QgY2hhciAqY29sZF9zZWN0aW9uX2VuZF9sYWJlbDsKKworICAvKiBTdHJpbmcgdG8gYmUgdXNlZCBmb3IgbmFtZSBvZiBjb2xkIHRleHQgc2VjdGlvbnMsIHZpYQorICAgICB0YXJnZXRtLmFzbV9vdXQubmFtZWRfc2VjdGlvbi4gICovCisKKyAgY29uc3QgY2hhciAqdW5saWtlbHlfdGV4dF9zZWN0aW9uX25hbWU7Cit9OworCisvKiBEYXRhc3RydWN0dXJlcyBtYWludGFpbmVkIGZvciBjdXJyZW50bHkgcHJvY2Vzc2VkIGZ1bmN0aW9uIGluIFJUTCBmb3JtLiAgKi8KK3N0cnVjdCBHVFkoKCkpIHJ0bF9kYXRhIHsKKyAgc3RydWN0IGV4cHJfc3RhdHVzIGV4cHI7CisgIHN0cnVjdCBlbWl0X3N0YXR1cyBlbWl0OworICBzdHJ1Y3QgdmFyYXNtX3N0YXR1cyB2YXJhc207CisgIHN0cnVjdCBpbmNvbWluZ19hcmdzIGFyZ3M7CisgIHN0cnVjdCBmdW5jdGlvbl9zdWJzZWN0aW9ucyBzdWJzZWN0aW9uczsKKyAgc3RydWN0IHJ0bF9laCBlaDsKKworICAvKiBGb3IgZnVuY3Rpb24uYyAgKi8KKworICAvKiAjIG9mIGJ5dGVzIG9mIG91dGdvaW5nIGFyZ3VtZW50cy4gIElmIEFDQ1VNVUxBVEVfT1VUR09JTkdfQVJHUyBpcworICAgICBkZWZpbmVkLCB0aGUgbmVlZGVkIHNwYWNlIGlzIHB1c2hlZCBieSB0aGUgcHJvbG9ndWUuICAqLworICBpbnQgb3V0Z29pbmdfYXJnc19zaXplOworCisgIC8qIElmIG5vbnplcm8sIGFuIFJUTCBleHByZXNzaW9uIGZvciB0aGUgbG9jYXRpb24gYXQgd2hpY2ggdGhlIGN1cnJlbnQKKyAgICAgZnVuY3Rpb24gcmV0dXJucyBpdHMgcmVzdWx0LiAgSWYgdGhlIGN1cnJlbnQgZnVuY3Rpb24gcmV0dXJucyBpdHMKKyAgICAgcmVzdWx0IGluIGEgcmVnaXN0ZXIsIGN1cnJlbnRfZnVuY3Rpb25fcmV0dXJuX3J0eCB3aWxsIGFsd2F5cyBiZQorICAgICB0aGUgaGFyZCByZWdpc3RlciBjb250YWluaW5nIHRoZSByZXN1bHQuICAqLworICBydHggcmV0dXJuX3J0eDsKKworICAvKiBPcGFxdWUgcG9pbnRlciB1c2VkIGJ5IGdldF9oYXJkX3JlZ19pbml0aWFsX3ZhbCBhbmQKKyAgICAgaGFzX2hhcmRfcmVnX2luaXRpYWxfdmFsIChzZWUgaW50ZWdyYXRlLltoY10pLiAgKi8KKyAgc3RydWN0IGluaXRpYWxfdmFsdWVfc3RydWN0ICpoYXJkX3JlZ19pbml0aWFsX3ZhbHM7CisKKyAgLyogQSB2YXJpYWJsZSBsaXZpbmcgYXQgdGhlIHRvcCBvZiB0aGUgZnJhbWUgdGhhdCBob2xkcyBhIGtub3duIHZhbHVlLgorICAgICBVc2VkIGZvciBkZXRlY3Rpbmcgc3RhY2sgY2xvYmJlcnMuICAqLworICB0cmVlIHN0YWNrX3Byb3RlY3RfZ3VhcmQ7CisKKyAgLyogTGlzdCAoY2hhaW4gb2YgRVhQUl9MSVNUKSBvZiBsYWJlbHMgaGVhZGluZyB0aGUgY3VycmVudCBoYW5kbGVycyBmb3IKKyAgICAgbm9ubG9jYWwgZ290b3MuICAqLworICBydHggeF9ub25sb2NhbF9nb3RvX2hhbmRsZXJfbGFiZWxzOworCisgIC8qIExhYmVsIHRoYXQgd2lsbCBnbyBvbiBmdW5jdGlvbiBlcGlsb2d1ZS4KKyAgICAgSnVtcGluZyB0byB0aGlzIGxhYmVsIHNlcnZlcyBhcyBhICJyZXR1cm4iIGluc3RydWN0aW9uCisgICAgIG9uIG1hY2hpbmVzIHdoaWNoIHJlcXVpcmUgZXhlY3V0aW9uIG9mIHRoZSBlcGlsb2d1ZSBvbiBhbGwgcmV0dXJucy4gICovCisgIHJ0eCB4X3JldHVybl9sYWJlbDsKKworICAvKiBMYWJlbCB0aGF0IHdpbGwgZ28gb24gdGhlIGVuZCBvZiBmdW5jdGlvbiBlcGlsb2d1ZS4KKyAgICAgSnVtcGluZyB0byB0aGlzIGxhYmVsIHNlcnZlcyBhcyBhICJuYWtlZCByZXR1cm4iIGluc3RydWN0aW9uCisgICAgIG9uIG1hY2hpbmVzIHdoaWNoIHJlcXVpcmUgZXhlY3V0aW9uIG9mIHRoZSBlcGlsb2d1ZSBvbiBhbGwgcmV0dXJucy4gICovCisgIHJ0eCB4X25ha2VkX3JldHVybl9sYWJlbDsKKworICAvKiBMaXN0IChjaGFpbiBvZiBFWFBSX0xJU1RzKSBvZiBhbGwgc3RhY2sgc2xvdHMgaW4gdGhpcyBmdW5jdGlvbi4KKyAgICAgTWFkZSBmb3IgdGhlIHNha2Ugb2YgdW5zaGFyZV9hbGxfcnRsLiAgKi8KKyAgcnR4IHhfc3RhY2tfc2xvdF9saXN0OworCisgIC8qIFBsYWNlIGFmdGVyIHdoaWNoIHRvIGluc2VydCB0aGUgdGFpbF9yZWN1cnNpb25fbGFiZWwgaWYgd2UgbmVlZCBvbmUuICAqLworICBydHggeF9zdGFja19jaGVja19wcm9iZV9ub3RlOworCisgIC8qIExvY2F0aW9uIGF0IHdoaWNoIHRvIHNhdmUgdGhlIGFyZ3VtZW50IHBvaW50ZXIgaWYgaXQgd2lsbCBuZWVkIHRvIGJlCisgICAgIHJlZmVyZW5jZWQuICBUaGVyZSBhcmUgdHdvIGNhc2VzIHdoZXJlIHRoaXMgaXMgZG9uZTogaWYgbm9ubG9jYWwgZ290b3MKKyAgICAgZXhpc3QsIG9yIGlmIHZhcnMgc3RvcmVkIGF0IGFuIG9mZnNldCBmcm9tIHRoZSBhcmd1bWVudCBwb2ludGVyIHdpbGwgYmUKKyAgICAgbmVlZGVkIGJ5IGlubmVyIHJvdXRpbmVzLiAgKi8KKyAgcnR4IHhfYXJnX3BvaW50ZXJfc2F2ZV9hcmVhOworCisgIC8qIER5bmFtaWMgUmVhbGlnbiBBcmd1bWVudCBQb2ludGVyIHVzZWQgZm9yIHJlYWxpZ25pbmcgc3RhY2suICAqLworICBydHggZHJhcF9yZWc7CisKKyAgLyogT2Zmc2V0IHRvIGVuZCBvZiBhbGxvY2F0ZWQgYXJlYSBvZiBzdGFjayBmcmFtZS4KKyAgICAgSWYgc3RhY2sgZ3Jvd3MgZG93biwgdGhpcyBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgbGFzdCBzdGFjayBzbG90IGFsbG9jYXRlZC4KKyAgICAgSWYgc3RhY2sgZ3Jvd3MgdXAsIHRoaXMgaXMgdGhlIGFkZHJlc3MgZm9yIHRoZSBuZXh0IHNsb3QuICAqLworICBIT1NUX1dJREVfSU5UIHhfZnJhbWVfb2Zmc2V0OworCisgIC8qIEluc24gYWZ0ZXIgd2hpY2ggcmVnaXN0ZXIgcGFybXMgYW5kIFNBVkVfRVhQUnMgYXJlIGJvcm4sIGlmIG5vbm9wdC4gICovCisgIHJ0eCB4X3Bhcm1fYmlydGhfaW5zbjsKKworICAvKiBMaXN0IG9mIGFsbCB1c2VkIHRlbXBvcmFyaWVzIGFsbG9jYXRlZCwgYnkgbGV2ZWwuICAqLworICBWRUModGVtcF9zbG90X3AsZ2MpICp4X3VzZWRfdGVtcF9zbG90czsKKworICAvKiBMaXN0IG9mIGF2YWlsYWJsZSB0ZW1wIHNsb3RzLiAgKi8KKyAgc3RydWN0IHRlbXBfc2xvdCAqeF9hdmFpbF90ZW1wX3Nsb3RzOworCisgIC8qIEN1cnJlbnQgbmVzdGluZyBsZXZlbCBmb3IgdGVtcG9yYXJpZXMuICAqLworICBpbnQgeF90ZW1wX3Nsb3RfbGV2ZWw7CisKKyAgLyogVGhlIGxhcmdlc3QgYWxpZ25tZW50IG5lZWRlZCBvbiB0aGUgc3RhY2ssIGluY2x1ZGluZyByZXF1aXJlbWVudAorICAgICBmb3Igb3V0Z29pbmcgc3RhY2sgYWxpZ25tZW50LiAgKi8KKyAgdW5zaWduZWQgaW50IHN0YWNrX2FsaWdubWVudF9uZWVkZWQ7CisKKyAgLyogUHJlZmVycmVkIGFsaWdubWVudCBvZiB0aGUgZW5kIG9mIHN0YWNrIGZyYW1lLCB3aGljaCBpcyBwcmVmZXJyZWQKKyAgICAgdG8gY2FsbCBvdGhlciBmdW5jdGlvbnMuICAqLworICB1bnNpZ25lZCBpbnQgcHJlZmVycmVkX3N0YWNrX2JvdW5kYXJ5OworCisgIC8qIFRoZSBtaW5pbXVtIGFsaWdubWVudCBvZiBwYXJhbWV0ZXIgc3RhY2suICAqLworICB1bnNpZ25lZCBpbnQgcGFybV9zdGFja19ib3VuZGFyeTsKKworICAvKiBUaGUgbGFyZ2VzdCBhbGlnbm1lbnQgb2Ygc2xvdCBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrLiAgKi8KKyAgdW5zaWduZWQgaW50IG1heF91c2VkX3N0YWNrX3Nsb3RfYWxpZ25tZW50OworCisgIC8qIFRoZSBzdGFjayBhbGlnbm1lbnQgZXN0aW1hdGVkIGJlZm9yZSByZWxvYWQsIHdpdGggY29uc2lkZXJhdGlvbiBvZgorICAgICBmb2xsb3dpbmcgZmFjdG9yczoKKyAgICAgMS4gQWxpZ25tZW50IG9mIGxvY2FsIHN0YWNrIHZhcmlhYmxlcyAobWF4X3VzZWRfc3RhY2tfc2xvdF9hbGlnbm1lbnQpCisgICAgIDIuIEFsaWdubWVudCByZXF1aXJlbWVudCB0byBjYWxsIG90aGVyIGZ1bmN0aW9ucworICAgICAgICAocHJlZmVycmVkX3N0YWNrX2JvdW5kYXJ5KQorICAgICAzLiBBbGlnbm1lbnQgb2Ygbm9uLWxvY2FsIHN0YWNrIHZhcmlhYmxlcyBidXQgbWlnaHQgYmUgc3BpbGxlZCBpbgorICAgICAgICBsb2NhbCBzdGFjay4gICovCisgIHVuc2lnbmVkIGludCBzdGFja19hbGlnbm1lbnRfZXN0aW1hdGVkOworCisgIC8qIEZvciByZW9yZy4gICovCisKKyAgLyogSWYgc29tZSBpbnNucyBjYW4gYmUgZGVmZXJyZWQgdG8gdGhlIGRlbGF5IHNsb3RzIG9mIHRoZSBlcGlsb2d1ZSwgdGhlCisgICAgIGRlbGF5IGxpc3QgZm9yIHRoZW0gaXMgcmVjb3JkZWQgaGVyZS4gICovCisgIHJ0eCBlcGlsb2d1ZV9kZWxheV9saXN0OworCisgIC8qIE5vbnplcm8gaWYgZnVuY3Rpb24gYmVpbmcgY29tcGlsZWQgY2FsbGVkIGJ1aWx0aW5fcmV0dXJuX2FkZHIgb3IKKyAgICAgYnVpbHRpbl9mcmFtZV9hZGRyZXNzIHdpdGggbm9uemVybyBjb3VudC4gICovCisgIGJvb2wgYWNjZXNzZXNfcHJpb3JfZnJhbWVzOworCisgIC8qIE5vbnplcm8gaWYgdGhlIGZ1bmN0aW9uIGNhbGxzIF9fYnVpbHRpbl9laF9yZXR1cm4uICAqLworICBib29sIGNhbGxzX2VoX3JldHVybjsKKworICAvKiBOb256ZXJvIGlmIGZ1bmN0aW9uIHNhdmVzIGFsbCByZWdpc3RlcnMsIGUuZy4gaWYgaXQgaGFzIGEgbm9ubG9jYWwKKyAgICAgbGFiZWwgdGhhdCBjYW4gcmVhY2ggdGhlIGV4aXQgYmxvY2sgdmlhIG5vbi1leGNlcHRpb25hbCBwYXRocy4gKi8KKyAgYm9vbCBzYXZlc19hbGxfcmVnaXN0ZXJzOworCisgIC8qIE5vbnplcm8gaWYgZnVuY3Rpb24gYmVpbmcgY29tcGlsZWQgaGFzIG5vbmxvY2FsIGdvdG9zIHRvIHBhcmVudAorICAgICBmdW5jdGlvbi4gICovCisgIGJvb2wgaGFzX25vbmxvY2FsX2dvdG87CisKKyAgLyogTm9uemVybyBpZiBmdW5jdGlvbiBiZWluZyBjb21waWxlZCBoYXMgYW4gYXNtIHN0YXRlbWVudC4gICovCisgIGJvb2wgaGFzX2FzbV9zdGF0ZW1lbnQ7CisKKyAgLyogVGhpcyBiaXQgaXMgdXNlZCBieSB0aGUgZXhjZXB0aW9uIGhhbmRsaW5nIGxvZ2ljLiAgSXQgaXMgc2V0IGlmIGFsbAorICAgICBjYWxscyAoaWYgYW55KSBhcmUgc2libGluZyBjYWxscy4gIFN1Y2ggZnVuY3Rpb25zIGRvIG5vdCBoYXZlIHRvCisgICAgIGhhdmUgRUggdGFibGVzIGdlbmVyYXRlZCwgYXMgdGhleSBjYW5ub3QgdGhyb3cuICBBIGNhbGwgdG8gc3VjaCBhCisgICAgIGZ1bmN0aW9uLCBob3dldmVyLCBzaG91bGQgYmUgdHJlYXRlZCBhcyB0aHJvd2luZyBpZiBhbnkgb2YgaXRzIGNhbGxlZXMKKyAgICAgY2FuIHRocm93LiAgKi8KKyAgYm9vbCBhbGxfdGhyb3dlcnNfYXJlX3NpYmNhbGxzOworCisgIC8qIE5vbnplcm8gaWYgc3RhY2sgbGltaXQgY2hlY2tpbmcgc2hvdWxkIGJlIGVuYWJsZWQgaW4gdGhlIGN1cnJlbnQKKyAgICAgZnVuY3Rpb24uICAqLworICBib29sIGxpbWl0X3N0YWNrOworCisgIC8qIE5vbnplcm8gaWYgcHJvZmlsaW5nIGNvZGUgc2hvdWxkIGJlIGdlbmVyYXRlZC4gICovCisgIGJvb2wgcHJvZmlsZTsKKworICAvKiBOb256ZXJvIGlmIHRoZSBjdXJyZW50IGZ1bmN0aW9uIHVzZXMgdGhlIGNvbnN0YW50IHBvb2wuICAqLworICBib29sIHVzZXNfY29uc3RfcG9vbDsKKworICAvKiBOb256ZXJvIGlmIHRoZSBjdXJyZW50IGZ1bmN0aW9uIHVzZXMgcGljX29mZnNldF90YWJsZV9ydHguICAqLworICBib29sIHVzZXNfcGljX29mZnNldF90YWJsZTsKKworICAvKiBOb256ZXJvIGlmIHRoZSBjdXJyZW50IGZ1bmN0aW9uIG5lZWRzIGFuIGxzZGEgZm9yIGV4Y2VwdGlvbiBoYW5kbGluZy4gICovCisgIGJvb2wgdXNlc19laF9sc2RhOworCisgIC8qIFNldCB3aGVuIHRoZSB0YWlsIGNhbGwgaGFzIGJlZW4gcHJvZHVjZWQuICAqLworICBib29sIHRhaWxfY2FsbF9lbWl0OworCisgIC8qIE5vbnplcm8gaWYgY29kZSB0byBpbml0aWFsaXplIGFyZ19wb2ludGVyX3NhdmVfYXJlYSBoYXMgYmVlbiBlbWl0dGVkLiAgKi8KKyAgYm9vbCBhcmdfcG9pbnRlcl9zYXZlX2FyZWFfaW5pdDsKKworICAvKiBOb256ZXJvIGlmIGN1cnJlbnQgZnVuY3Rpb24gbXVzdCBiZSBnaXZlbiBhIGZyYW1lIHBvaW50ZXIuCisgICAgIFNldCBpbiBnbG9iYWwuYyBpZiBhbnl0aGluZyBpcyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIHRoZXJlLiAgKi8KKyAgYm9vbCBmcmFtZV9wb2ludGVyX25lZWRlZDsKKworICAvKiBXaGVuIHNldCwgZXhwYW5kIHNob3VsZCBvcHRpbWl6ZSBmb3Igc3BlZWQuICAqLworICBib29sIG1heWJlX2hvdF9pbnNuX3A7CisKKyAgLyogTm9uemVybyBpZiBmdW5jdGlvbiBzdGFjayByZWFsaWdubWVudCBpcyBuZWVkZWQuICBUaGlzIGZsYWcgbWF5IGJlCisgICAgIHNldCB0d2ljZTogYmVmb3JlIGFuZCBhZnRlciByZWxvYWQuICBJdCBpcyBzZXQgYmVmb3JlIHJlbG9hZCB3cnQKKyAgICAgc3RhY2sgYWxpZ25tZW50IGVzdGltYXRpb24gYmVmb3JlIHJlbG9hZC4gIEl0IHdpbGwgYmUgY2hhbmdlZCBhZnRlcgorICAgICByZWxvYWQgaWYgYnkgdGhlbiBjcml0ZXJpYSBvZiBzdGFjayByZWFsaWdubWVudCBpcyBkaWZmZXJlbnQuCisgICAgIFRoZSB2YWx1ZSBzZXQgYWZ0ZXIgcmVsb2FkIGlzIHRoZSBhY2N1cmF0ZSBvbmUgYW5kIGlzIGZpbmFsaXplZC4gICovCisgIGJvb2wgc3RhY2tfcmVhbGlnbl9uZWVkZWQ7CisKKyAgLyogTm9uemVybyBpZiBmdW5jdGlvbiBzdGFjayByZWFsaWdubWVudCBpcyB0cmllZC4gIFRoaXMgZmxhZyBpcyBzZXQKKyAgICAgb25seSBvbmNlIGJlZm9yZSByZWxvYWQuICBJdCBhZmZlY3RzIHJlZ2lzdGVyIGVsaW1pbmF0aW9uLiAgVGhpcworICAgICBpcyB1c2VkIHRvIGdlbmVyYXRlIERXQVJGIGRlYnVnIGluZm8gZm9yIHN0YWNrIHZhcmlhYmxlcy4gICovCisgIGJvb2wgc3RhY2tfcmVhbGlnbl90cmllZDsKKworICAvKiBOb256ZXJvIGlmIGZ1bmN0aW9uIGJlaW5nIGNvbXBpbGVkIG5lZWRzIGR5bmFtaWMgcmVhbGlnbmVkCisgICAgIGFyZ3VtZW50IHBvaW50ZXIgKGRyYXApIGlmIHN0YWNrIG5lZWRzIHJlYWxpZ25pbmcuICAqLworICBib29sIG5lZWRfZHJhcDsKKworICAvKiBOb256ZXJvIGlmIGZ1bmN0aW9uIHN0YWNrIHJlYWxpZ25tZW50IGVzdGltYXRpb24gaXMgZG9uZSwgbmFtZWx5CisgICAgIHN0YWNrX3JlYWxpZ25fbmVlZGVkIGZsYWcgaGFzIGJlZW4gc2V0IGJlZm9yZSByZWxvYWQgd3J0IGVzdGltYXRlZAorICAgICBzdGFjayBhbGlnbm1lbnQgaW5mby4gICovCisgIGJvb2wgc3RhY2tfcmVhbGlnbl9wcm9jZXNzZWQ7CisKKyAgLyogTm9uemVybyBpZiBmdW5jdGlvbiBzdGFjayByZWFsaWdubWVudCBoYXMgYmVlbiBmaW5hbGl6ZWQsIG5hbWVseQorICAgICBzdGFja19yZWFsaWduX25lZWRlZCBmbGFnIGhhcyBiZWVuIHNldCBhbmQgZmluYWxpemVkIGFmdGVyIHJlbG9hZC4gICovCisgIGJvb2wgc3RhY2tfcmVhbGlnbl9maW5hbGl6ZWQ7CisKKyAgLyogVHJ1ZSBpZiBkYnJfc2NoZWR1bGUgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgZm9yIHRoaXMgZnVuY3Rpb24uICAqLworICBib29sIGRicl9zY2hlZHVsZWRfcDsKKworICAvKiBUcnVlIGlmIGN1cnJlbnQgZnVuY3Rpb24gY2FuIG5vdCB0aHJvdy4gIFVubGlrZQorICAgICBUUkVFX05PVEhST1cgKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCkgaXQgaXMgc2V0IGV2ZW4gZm9yIG92ZXJ3cml0YWJsZQorICAgICBmdW5jdGlvbiB3aGVyZSBjdXJyZW50bHkgY29tcGlsZWQgdmVyc2lvbiBvZiBpdCBpcyBub3Rocm93LiAgKi8KKyAgYm9vbCBub3Rocm93OworfTsKKworI2RlZmluZSByZXR1cm5fbGFiZWwgKGNydGwtPnhfcmV0dXJuX2xhYmVsKQorI2RlZmluZSBuYWtlZF9yZXR1cm5fbGFiZWwgKGNydGwtPnhfbmFrZWRfcmV0dXJuX2xhYmVsKQorI2RlZmluZSBzdGFja19zbG90X2xpc3QgKGNydGwtPnhfc3RhY2tfc2xvdF9saXN0KQorI2RlZmluZSBwYXJtX2JpcnRoX2luc24gKGNydGwtPnhfcGFybV9iaXJ0aF9pbnNuKQorI2RlZmluZSBmcmFtZV9vZmZzZXQgKGNydGwtPnhfZnJhbWVfb2Zmc2V0KQorI2RlZmluZSBzdGFja19jaGVja19wcm9iZV9ub3RlIChjcnRsLT54X3N0YWNrX2NoZWNrX3Byb2JlX25vdGUpCisjZGVmaW5lIGFyZ19wb2ludGVyX3NhdmVfYXJlYSAoY3J0bC0+eF9hcmdfcG9pbnRlcl9zYXZlX2FyZWEpCisjZGVmaW5lIHVzZWRfdGVtcF9zbG90cyAoY3J0bC0+eF91c2VkX3RlbXBfc2xvdHMpCisjZGVmaW5lIGF2YWlsX3RlbXBfc2xvdHMgKGNydGwtPnhfYXZhaWxfdGVtcF9zbG90cykKKyNkZWZpbmUgdGVtcF9zbG90X2xldmVsIChjcnRsLT54X3RlbXBfc2xvdF9sZXZlbCkKKyNkZWZpbmUgbm9ubG9jYWxfZ290b19oYW5kbGVyX2xhYmVscyAoY3J0bC0+eF9ub25sb2NhbF9nb3RvX2hhbmRsZXJfbGFiZWxzKQorI2RlZmluZSBmcmFtZV9wb2ludGVyX25lZWRlZCAoY3J0bC0+ZnJhbWVfcG9pbnRlcl9uZWVkZWQpCisjZGVmaW5lIHN0YWNrX3JlYWxpZ25fZnAgKGNydGwtPnN0YWNrX3JlYWxpZ25fbmVlZGVkICYmICFjcnRsLT5uZWVkX2RyYXApCisjZGVmaW5lIHN0YWNrX3JlYWxpZ25fZHJhcCAoY3J0bC0+c3RhY2tfcmVhbGlnbl9uZWVkZWQgJiYgY3J0bC0+bmVlZF9kcmFwKQorCitleHRlcm4gR1RZKCgpKSBzdHJ1Y3QgcnRsX2RhdGEgeF9ydGw7CisKKy8qIEFjY2Vzc29yIHRvIFJUTCBkYXRhc3RydWN0dXJlcy4gIFdlIGtlZXAgdGhlbSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBub3cgc2luY2UKKyAgIHdlIG5ldmVyIGtlZXAgbXVsdGlwbGUgZnVuY3Rpb25zLiAgRm9yIHRocmVhZGVkIGNvbXBpbGVyIHdlIG1pZ2h0IGhvd2V2ZXIKKyAgIHdhbnQgdG8gZG8gZGlmZmVyZW50bHkuICAqLworI2RlZmluZSBjcnRsICgmeF9ydGwpCisKKy8qIFRoaXMgc3RydWN0dXJlIGNhbiBzYXZlIGFsbCB0aGUgaW1wb3J0YW50IGdsb2JhbCBhbmQgc3RhdGljIHZhcmlhYmxlcworICAgZGVzY3JpYmluZyB0aGUgc3RhdHVzIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLiAgKi8KKworc3RydWN0IEdUWSgoKSkgZnVuY3Rpb24geworICBzdHJ1Y3QgZWhfc3RhdHVzICplaDsKKworICAvKiBUaGUgY29udHJvbCBmbG93IGdyYXBoIGZvciB0aGlzIGZ1bmN0aW9uLiAgKi8KKyAgc3RydWN0IGNvbnRyb2xfZmxvd19ncmFwaCAqY2ZnOworCisgIC8qIEdJTVBMRSBib2R5IGZvciB0aGlzIGZ1bmN0aW9uLiAgKi8KKyAgc3RydWN0IGdpbXBsZV9zZXFfZCAqZ2ltcGxlX2JvZHk7CisKKyAgLyogU1NBIGFuZCBkYXRhZmxvdyBpbmZvcm1hdGlvbi4gICovCisgIHN0cnVjdCBnaW1wbGVfZGYgKmdpbXBsZV9kZjsKKworICAvKiBUaGUgbG9vcHMgaW4gdGhpcyBmdW5jdGlvbi4gICovCisgIHN0cnVjdCBsb29wcyAqeF9jdXJyZW50X2xvb3BzOworCisgIC8qIFZhbHVlIGhpc3RvZ3JhbXMgYXR0YWNoZWQgdG8gcGFydGljdWxhciBzdGF0ZW1lbnRzLiAgKi8KKyAgaHRhYl90IEdUWSgoc2tpcCkpIHZhbHVlX2hpc3RvZ3JhbXM7CisKKyAgLyogRm9yIGZ1bmN0aW9uLmMuICAqLworCisgIC8qIFBvaW50cyB0byB0aGUgRlVOQ1RJT05fREVDTCBvZiB0aGlzIGZ1bmN0aW9uLiAgKi8KKyAgdHJlZSBkZWNsOworCisgIC8qIEEgUEFSTV9ERUNMIHRoYXQgc2hvdWxkIGNvbnRhaW4gdGhlIHN0YXRpYyBjaGFpbiBmb3IgdGhpcyBmdW5jdGlvbi4KKyAgICAgSXQgd2lsbCBiZSBpbml0aWFsaXplZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbi4gICovCisgIHRyZWUgc3RhdGljX2NoYWluX2RlY2w7CisKKyAgLyogQW4gZXhwcmVzc2lvbiB0aGF0IGNvbnRhaW5zIHRoZSBub24tbG9jYWwgZ290byBzYXZlIGFyZWEuICBUaGUgZmlyc3QKKyAgICAgd29yZCBpcyB0aGUgc2F2ZWQgZnJhbWUgcG9pbnRlciBhbmQgdGhlIHNlY29uZCBpcyB0aGUgc2F2ZWQgc3RhY2sKKyAgICAgcG9pbnRlci4gICovCisgIHRyZWUgbm9ubG9jYWxfZ290b19zYXZlX2FyZWE7CisKKyAgLyogTGlzdCBvZiBmdW5jdGlvbiBsb2NhbCB2YXJpYWJsZXMsIGZ1bmN0aW9ucywgdHlwZXMgYW5kIGNvbnN0YW50cy4gICovCisgIHRyZWUgbG9jYWxfZGVjbHM7CisKKyAgLyogRm9yIG1kIGZpbGVzLiAgKi8KKworICAvKiB0bS5oIGNhbiB1c2UgdGhpcyB0byBzdG9yZSB3aGF0ZXZlciBpdCBsaWtlcy4gICovCisgIHN0cnVjdCBtYWNoaW5lX2Z1bmN0aW9uICogR1RZICgobWF5YmVfdW5kZWYpKSBtYWNoaW5lOworCisgIC8qIExhbmd1YWdlLXNwZWNpZmljIGNvZGUgY2FuIHVzZSB0aGlzIHRvIHN0b3JlIHdoYXRldmVyIGl0IGxpa2VzLiAgKi8KKyAgc3RydWN0IGxhbmd1YWdlX2Z1bmN0aW9uICogbGFuZ3VhZ2U7CisKKyAgLyogVXNlZCB0eXBlcyBoYXNoIHRhYmxlLiAgKi8KKyAgaHRhYl90IEdUWSAoKHBhcmFtX2lzICh1bmlvbiB0cmVlX25vZGUpKSkgdXNlZF90eXBlc19oYXNoOworCisgIC8qIExhc3Qgc3RhdGVtZW50IHVpZC4gICovCisgIGludCBsYXN0X3N0bXRfdWlkOworCisgIC8qIEZ1bmN0aW9uIHNlcXVlbmNlIG51bWJlciBmb3IgcHJvZmlsaW5nLCBkZWJ1Z2dpbmcsIGV0Yy4gICovCisgIGludCBmdW5jZGVmX25vOworCisgIC8qIExpbmUgbnVtYmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgZnVuY3Rpb24gZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gICovCisgIGxvY2F0aW9uX3QgZnVuY3Rpb25fc3RhcnRfbG9jdXM7CisKKyAgLyogTGluZSBudW1iZXIgb2YgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uICAqLworICBsb2NhdGlvbl90IGZ1bmN0aW9uX2VuZF9sb2N1czsKKworICAvKiBQcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIHBhc3MgbWFuYWdlci4gICovCisgIHVuc2lnbmVkIGludCBjdXJyX3Byb3BlcnRpZXM7CisgIHVuc2lnbmVkIGludCBsYXN0X3ZlcmlmaWVkOworCisgIC8qIE5vbi1udWxsIGlmIHRoZSBmdW5jdGlvbiBkb2VzIHNvbWV0aGluZyB0aGF0IHdvdWxkIHByZXZlbnQgaXQgZnJvbQorICAgICBiZWluZyBjb3BpZWQ7IHRoaXMgYXBwbGllcyB0byBib3RoIHZlcnNpb25pbmcgYW5kIGlubGluaW5nLiAgU2V0IHRvCisgICAgIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHJlYXNvbiBmb3IgZmFpbHVyZS4gICovCisgIGNvbnN0IGNoYXIgKiBHVFkoKHNraXApKSBjYW5ub3RfYmVfY29waWVkX3JlYXNvbjsKKworICAvKiBDb2xsZWN0ZWQgYml0IGZsYWdzLiAgKi8KKworICAvKiBOdW1iZXIgb2YgdW5pdHMgb2YgZ2VuZXJhbCByZWdpc3RlcnMgdGhhdCBuZWVkIHNhdmluZyBpbiBzdGRhcmcKKyAgICAgZnVuY3Rpb24uICBXaGF0IHVuaXQgaXMgZGVwZW5kcyBvbiB0aGUgYmFja2VuZCwgZWl0aGVyIGl0IGlzIG51bWJlcgorICAgICBvZiBieXRlcywgb3IgaXQgY2FuIGJlIG51bWJlciBvZiByZWdpc3RlcnMuICAqLworICB1bnNpZ25lZCBpbnQgdmFfbGlzdF9ncHJfc2l6ZSA6IDg7CisKKyAgLyogTnVtYmVyIG9mIHVuaXRzIG9mIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyB0aGF0IG5lZWQgc2F2aW5nIGluIHN0ZGFyZworICAgICBmdW5jdGlvbi4gICovCisgIHVuc2lnbmVkIGludCB2YV9saXN0X2Zwcl9zaXplIDogODsKKworICAvKiBIb3cgY29tbW9ubHkgZXhlY3V0ZWQgdGhlIGZ1bmN0aW9uIGlzLiAgSW5pdGlhbGl6ZWQgZHVyaW5nIGJyYW5jaAorICAgICBwcm9iYWJpbGl0aWVzIHBhc3MuICAqLworICBFTlVNX0JJVEZJRUxEIChmdW5jdGlvbl9mcmVxdWVuY3kpIGZ1bmN0aW9uX2ZyZXF1ZW5jeSA6IDI7CisKKyAgLyogTm9uemVybyBpZiBmdW5jdGlvbiBiZWluZyBjb21waWxlZCBjYW4gY2FsbCBzZXRqbXAuICAqLworICB1bnNpZ25lZCBpbnQgY2FsbHNfc2V0am1wIDogMTsKKworICAvKiBOb256ZXJvIGlmIGZ1bmN0aW9uIGJlaW5nIGNvbXBpbGVkIGNhbiBjYWxsIGFsbG9jYSwKKyAgICAgZWl0aGVyIGFzIGEgc3Vicm91dGluZSBvciBidWlsdGluLiAgKi8KKyAgdW5zaWduZWQgaW50IGNhbGxzX2FsbG9jYSA6IDE7CisKKyAgLyogTm9uemVybyBpZiBmdW5jdGlvbiBiZWluZyBjb21waWxlZCByZWNlaXZlcyBub25sb2NhbCBnb3RvcworICAgICBmcm9tIG5lc3RlZCBmdW5jdGlvbnMuICAqLworICB1bnNpZ25lZCBpbnQgaGFzX25vbmxvY2FsX2xhYmVsIDogMTsKKworICAvKiBOb256ZXJvIGlmIHdlJ3ZlIHNldCBjYW5ub3RfYmVfY29waWVkX3JlYXNvbi4gIEkuZS4gaWYKKyAgICAgKGNhbm5vdF9iZV9jb3BpZWRfc2V0ICYmICFjYW5ub3RfYmVfY29waWVkX3JlYXNvbiksIHRoZSBmdW5jdGlvbgorICAgICBjYW4gaW4gZmFjdCBiZSBjb3BpZWQuICAqLworICB1bnNpZ25lZCBpbnQgY2Fubm90X2JlX2NvcGllZF9zZXQgOiAxOworCisgIC8qIE5vbnplcm8gaWYgY3VycmVudCBmdW5jdGlvbiB1c2VzIHN0ZGFyZy5oIG9yIGVxdWl2YWxlbnQuICAqLworICB1bnNpZ25lZCBpbnQgc3RkYXJnIDogMTsKKworICAvKiBOb256ZXJvIGlmIHRoZSBiYWNrLWVuZCBzaG91bGQgbm90IGtlZXAgdHJhY2sgb2YgZXhwcmVzc2lvbnMgdGhhdAorICAgICBkZXRlcm1pbmUgdGhlIHNpemUgb2YgdmFyaWFibGUtc2l6ZWQgb2JqZWN0cy4gIE5vcm1hbGx5LCBzdWNoCisgICAgIGV4cHJlc3Npb25zIGFyZSBzYXZlZCBhd2F5LCBhbmQgdGhlbiBleHBhbmRlZCB3aGVuIHRoZSBuZXh0CisgICAgIGZ1bmN0aW9uIGlzIHN0YXJ0ZWQuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXJhbWV0ZXIgaGFzIGEKKyAgICAgdmFyaWFibGUtc2l6ZWQgdHlwZSwgdGhlbiB0aGUgc2l6ZSBvZiB0aGUgcGFyYW1ldGVyIGlzIGNvbXB1dGVkCisgICAgIHdoZW4gdGhlIGZ1bmN0aW9uIGJvZHkgaXMgZW50ZXJlZC4gIEhvd2V2ZXIsIHNvbWUgZnJvbnQtZW5kcyBkbworICAgICBub3QgZGVzaXJlIHRoaXMgYmVoYXZpb3IuICAqLworICB1bnNpZ25lZCBpbnQgZG9udF9zYXZlX3BlbmRpbmdfc2l6ZXNfcCA6IDE7CisKKyAgdW5zaWduZWQgaW50IGFmdGVyX2lubGluaW5nIDogMTsKKyAgdW5zaWduZWQgaW50IGFsd2F5c19pbmxpbmVfZnVuY3Rpb25zX2lubGluZWQgOiAxOworCisgIC8qIEZpZWxkcyBiZWxvdyB0aGlzIHBvaW50IGFyZSBub3Qgc2V0IGZvciBhYnN0cmFjdCBmdW5jdGlvbnM7IHNlZQorICAgICBhbGxvY2F0ZV9zdHJ1Y3RfZnVuY3Rpb24uICAqLworCisgIC8qIE5vbnplcm8gaWYgZnVuY3Rpb24gYmVpbmcgY29tcGlsZWQgbmVlZHMgdG8gYmUgZ2l2ZW4gYW4gYWRkcmVzcworICAgICB3aGVyZSB0aGUgdmFsdWUgc2hvdWxkIGJlIHN0b3JlZC4gICovCisgIHVuc2lnbmVkIGludCByZXR1cm5zX3N0cnVjdCA6IDE7CisKKyAgLyogTm9uemVybyBpZiBmdW5jdGlvbiBiZWluZyBjb21waWxlZCBuZWVkcyB0bworICAgICByZXR1cm4gdGhlIGFkZHJlc3Mgb2Ygd2hlcmUgaXQgaGFzIHB1dCBhIHN0cnVjdHVyZSB2YWx1ZS4gICovCisgIHVuc2lnbmVkIGludCByZXR1cm5zX3BjY19zdHJ1Y3QgOiAxOworCisgIC8qIE5vbnplcm8gaWYgcGFzc190cmVlX3Byb2ZpbGUgd2FzIHJ1biBvbiB0aGlzIGZ1bmN0aW9uLiAgKi8KKyAgdW5zaWduZWQgaW50IGFmdGVyX3RyZWVfcHJvZmlsZSA6IDE7CisKKyAgLyogTm9uemVybyBpZiB0aGlzIGZ1bmN0aW9uIGhhcyBsb2NhbCBERUNMX0hBUkRfUkVHSVNURVIgdmFyaWFibGVzLgorICAgICBJbiB0aGlzIGNhc2UgY29kZSBtb3Rpb24gaGFzIHRvIGJlIGRvbmUgbW9yZSBjYXJlZnVsbHkuICAqLworICB1bnNpZ25lZCBpbnQgaGFzX2xvY2FsX2V4cGxpY2l0X3JlZ192YXJzIDogMTsKKworICAvKiBOb256ZXJvIGlmIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGlzIGEgdGh1bmssIGkuZS4sIGEgbGlnaHR3ZWlnaHQKKyAgICAgZnVuY3Rpb24gaW1wbGVtZW50ZWQgYnkgdGhlIG91dHB1dF9taV90aHVuayBob29rKSB0aGF0IGp1c3QKKyAgICAgYWRqdXN0cyBvbmUgb2YgaXRzIGFyZ3VtZW50cyBhbmQgZm9yd2FyZHMgdG8gYW5vdGhlcgorICAgICBmdW5jdGlvbi4gICovCisgIHVuc2lnbmVkIGludCBpc190aHVuayA6IDE7Cit9OworCisvKiBJZiB2YV9saXN0X1tnZl1wcl9zaXplIGlzIHNldCB0byB0aGlzLCBpdCBtZWFucyB3ZSBkb24ndCBrbm93IGhvdworICAgbWFueSB1bml0cyBuZWVkIHRvIGJlIHNhdmVkLiAgKi8KKyNkZWZpbmUgVkFfTElTVF9NQVhfR1BSX1NJWkUJMjU1CisjZGVmaW5lIFZBX0xJU1RfTUFYX0ZQUl9TSVpFCTI1NQorCisvKiBUaGUgZnVuY3Rpb24gY3VycmVudGx5IGJlaW5nIGNvbXBpbGVkLiAgKi8KK2V4dGVybiBHVFkoKCkpIHN0cnVjdCBmdW5jdGlvbiAqY2Z1bjsKKworLyogSW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgY2Z1biBpcyBub3Qgc2V0IGRpcmVjdGx5LCB3ZSByZWRlZmluZSBpdCBzbworICAgdGhhdCBpdCBpcyBub3QgYW4gbHZhbHVlLiAgUmF0aGVyIHRoYW4gYXNzaWduIHRvIGNmdW4sIHVzZQorICAgcHVzaF9jZnVuIG9yIHNldF9jZnVuLiAgKi8KKyNkZWZpbmUgY2Z1biAoY2Z1biArIDApCisKKy8qIE5vbnplcm8gaWYgd2UndmUgYWxyZWFkeSBjb252ZXJ0ZWQgdmlydHVhbCByZWdzIHRvIGhhcmQgcmVncy4gICovCitleHRlcm4gaW50IHZpcnR1YWxzX2luc3RhbnRpYXRlZDsKKworLyogTm9uemVybyBpZiBhdCBsZWFzdCBvbmUgdHJhbXBvbGluZSBoYXMgYmVlbiBjcmVhdGVkLiAgKi8KK2V4dGVybiBpbnQgdHJhbXBvbGluZXNfY3JlYXRlZDsKKworc3RydWN0IEdUWSgoKSkgdHlwZXNfdXNlZF9ieV92YXJzX2VudHJ5IHsKKyAgdHJlZSB0eXBlOworICB0cmVlIHZhcl9kZWNsOworfTsKKworLyogSGFzaCB0YWJsZSBtYWtpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGEgZ2xvYmFsIHZhcmlhYmxlCisgICBhbmQgdGhlIHR5cGVzIGl0IHJlZmVyZW5jZXMgaW4gaXRzIGluaXRpYWxpemVyLiBUaGUga2V5IG9mIHRoZQorICAgZW50cnkgaXMgYSByZWZlcmVuY2VkIHR5cGUsIGFuZCB0aGUgdmFsdWUgaXMgdGhlIERFQ0wgb2YgdGhlIGdsb2JhbAorICAgdmFyaWFibGUuIHR5cGVzX3VzZV9ieV92YXJzX2RvX2hhc2ggYW5kIHR5cGVzX3VzZWRfYnlfdmFyc19lcSBiZWxvdyBhcmUKKyAgIHRoZSBoYXNoIGFuZCBlcXVhbGl0eSBmdW5jdGlvbnMgdG8gdXNlIGZvciB0aGlzIGhhc2ggdGFibGUuICAqLworZXh0ZXJuIEdUWSgocGFyYW1faXMgKHN0cnVjdCB0eXBlc191c2VkX2J5X3ZhcnNfZW50cnkpKSkgaHRhYl90CisgIHR5cGVzX3VzZWRfYnlfdmFyc19oYXNoOworCitoYXNodmFsX3QgdHlwZXNfdXNlZF9ieV92YXJzX2RvX2hhc2ggKGNvbnN0IHZvaWQqKTsKK2ludCB0eXBlc191c2VkX2J5X3ZhcnNfZXEgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKK3ZvaWQgdHlwZXNfdXNlZF9ieV92YXJfZGVjbF9pbnNlcnQgKHRyZWUgdHlwZSwgdHJlZSB2YXJfZGVjbCk7CisKKy8qIER1cmluZyBwYXJzaW5nIG9mIGEgZ2xvYmFsIHZhcmlhYmxlLCB0aGlzIGxpbmtlZCBsaXN0IHBvaW50cyB0bworICAgdGhlIGxpc3Qgb2YgdHlwZXMgcmVmZXJlbmNlZCBieSB0aGUgZ2xvYmFsIHZhcmlhYmxlLiAgKi8KK2V4dGVybiBHVFkoKCkpIHRyZWUgdHlwZXNfdXNlZF9ieV9jdXJfdmFyX2RlY2w7CisKKworLyogY2Z1biBzaG91bGRuJ3QgYmUgc2V0IGRpcmVjdGx5OyB1c2Ugb25lIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbnN0ZWFkLiAgKi8KK2V4dGVybiB2b2lkIHNldF9jZnVuIChzdHJ1Y3QgZnVuY3Rpb24gKm5ld19jZnVuKTsKK2V4dGVybiB2b2lkIHB1c2hfY2Z1biAoc3RydWN0IGZ1bmN0aW9uICpuZXdfY2Z1bik7CitleHRlcm4gdm9pZCBwb3BfY2Z1biAodm9pZCk7CitleHRlcm4gdm9pZCBpbnN0YW50aWF0ZV9kZWNsX3J0bCAocnR4IHgpOworCisvKiBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4uLiBldmVudHVhbGx5IHRoZXNlIHNob3VsZCBhbGwgZ28gYXdheS4gICovCisjZGVmaW5lIGN1cnJlbnRfZnVuY3Rpb25fZnVuY2RlZl9ubyAoY2Z1bi0+ZnVuY2RlZl9ubykKKworI2RlZmluZSBjdXJyZW50X2xvb3BzIChjZnVuLT54X2N1cnJlbnRfbG9vcHMpCisjZGVmaW5lIGRvbV9jb21wdXRlZCAoY2Z1bi0+Y2ZnLT54X2RvbV9jb21wdXRlZCkKKyNkZWZpbmUgbl9iYnNfaW5fZG9tX3RyZWUgKGNmdW4tPmNmZy0+eF9uX2Jic19pbl9kb21fdHJlZSkKKyNkZWZpbmUgVkFMVUVfSElTVE9HUkFNUyhmdW4pIChmdW4pLT52YWx1ZV9oaXN0b2dyYW1zCisKKy8qIElkZW50aWZ5IEJMT0NLcyByZWZlcmVuY2VkIGJ5IG1vcmUgdGhhbiBvbmUgTk9URV9JTlNOX0JMT0NLX3tCRUcsRU5EfSwKKyAgIGFuZCBjcmVhdGUgZHVwbGljYXRlIGJsb2Nrcy4gICovCitleHRlcm4gdm9pZCByZW9yZGVyX2Jsb2NrcyAodm9pZCk7CisKKy8qIFNldCBCTE9DS19OVU1CRVIgZm9yIGFsbCB0aGUgYmxvY2tzIGluIEZOLiAgKi8KK2V4dGVybiB2b2lkIG51bWJlcl9ibG9ja3MgKHRyZWUpOworCitleHRlcm4gdm9pZCBjbGVhcl9ibG9ja19tYXJrcyAodHJlZSk7CitleHRlcm4gdHJlZSBibG9ja3NfbnJldmVyc2UgKHRyZWUpOworCisvKiBSZXR1cm4gc2l6ZSBuZWVkZWQgZm9yIHN0YWNrIGZyYW1lIGJhc2VkIG9uIHNsb3RzIHNvIGZhciBhbGxvY2F0ZWQuCisgICBUaGlzIHNpemUgY291bnRzIGZyb20gemVyby4gIEl0IGlzIG5vdCByb3VuZGVkIHRvIFNUQUNLX0JPVU5EQVJZOworICAgdGhlIGNhbGxlciBtYXkgaGF2ZSB0byBkbyB0aGF0LiAgKi8KK2V4dGVybiBIT1NUX1dJREVfSU5UIGdldF9mcmFtZV9zaXplICh2b2lkKTsKKworLyogSXNzdWUgYW4gZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJuIFRSVUUgaWYgZnJhbWUgT0ZGU0VUIG92ZXJmbG93cyBpbgorICAgdGhlIHNpZ25lZCB0YXJnZXQgcG9pbnRlciBhcml0aG1ldGljcyBmb3IgZnVuY3Rpb24gRlVOQy4gIE90aGVyd2lzZQorICAgcmV0dXJuIEZBTFNFLiAgKi8KK2V4dGVybiBib29sIGZyYW1lX29mZnNldF9vdmVyZmxvdyAoSE9TVF9XSURFX0lOVCwgdHJlZSk7CisKKy8qIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0YXJnZXQgc3BlY2lmaWMsIHBlci1mdW5jdGlvbgorICAgZGF0YSBzdHJ1Y3R1cmVzLiAgKi8KK2V4dGVybiBzdHJ1Y3QgbWFjaGluZV9mdW5jdGlvbiAqICgqaW5pdF9tYWNoaW5lX3N0YXR1cykgKHZvaWQpOworCisvKiBTYXZlIGFuZCByZXN0b3JlIHN0YXR1cyBpbmZvcm1hdGlvbiBmb3IgYSBuZXN0ZWQgZnVuY3Rpb24uICAqLworZXh0ZXJuIHZvaWQgZnJlZV9hZnRlcl9wYXJzaW5nIChzdHJ1Y3QgZnVuY3Rpb24gKik7CitleHRlcm4gdm9pZCBmcmVlX2FmdGVyX2NvbXBpbGF0aW9uIChzdHJ1Y3QgZnVuY3Rpb24gKik7CisKK2V4dGVybiB2b2lkIGluaXRfdmFyYXNtX3N0YXR1cyAodm9pZCk7CisKKyNpZmRlZiBSVFhfQ09ERQorZXh0ZXJuIHZvaWQgZGlkZGxlX3JldHVybl92YWx1ZSAodm9pZCAoKikocnR4LCB2b2lkKiksIHZvaWQqKTsKK2V4dGVybiB2b2lkIGNsb2JiZXJfcmV0dXJuX3JlZ2lzdGVyICh2b2lkKTsKKyNlbmRpZgorCitleHRlcm4gcnR4IGdldF9hcmdfcG9pbnRlcl9zYXZlX2FyZWEgKHZvaWQpOworCisvKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLiAgKi8KK2V4dGVybiBjb25zdCBjaGFyICpjdXJyZW50X2Z1bmN0aW9uX25hbWUgKHZvaWQpOworCitleHRlcm4gdm9pZCBkb193YXJuX3VudXNlZF9wYXJhbWV0ZXIgKHRyZWUpOworCitleHRlcm4gYm9vbCBwYXNzX2J5X3JlZmVyZW5jZSAoQ1VNVUxBVElWRV9BUkdTICosIGVudW0gbWFjaGluZV9tb2RlLAorCQkJICAgICAgIHRyZWUsIGJvb2wpOworZXh0ZXJuIGJvb2wgcmVmZXJlbmNlX2NhbGxlZV9jb3BpZWQgKENVTVVMQVRJVkVfQVJHUyAqLCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCQkgICAgIHRyZWUsIGJvb2wpOworCitleHRlcm4gdm9pZCB1c2VkX3R5cGVzX2luc2VydCAodHJlZSk7CisKK2V4dGVybiBpbnQgZ2V0X25leHRfZnVuY2RlZl9ubyAodm9pZCk7CisjZW5kaWYgIC8qIEdDQ19GVU5DVElPTl9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvZ2NjLXBsdWdpbi5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2djYy1wbHVnaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzViZTFkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2djYy1wbHVnaW4uaApAQCAtMCwwICsxLDE0NCBAQAorLyogUHVibGljIGhlYWRlciBmaWxlIGZvciBwbHVnaW5zIHRvIGluY2x1ZGUuCisgICBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19QTFVHSU5fSAorI2RlZmluZSBHQ0NfUExVR0lOX0gKKworI2lmbmRlZiBJTl9HQ0MKKyNkZWZpbmUgSU5fR0NDCisjZW5kaWYKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInN5c3RlbS5oIgorI2luY2x1ZGUgImhpZ2hsZXYtcGx1Z2luLWNvbW1vbi5oIgorI2luY2x1ZGUgImhhc2h0YWIuaCIKKworLyogRXZlbnQgbmFtZXMuICAqLworZW51bSBwbHVnaW5fZXZlbnQKK3sKKyMgZGVmaW5lIERFRkVWRU5UKE5BTUUpIE5BTUUsCisjIGluY2x1ZGUgInBsdWdpbi5kZWYiCisjIHVuZGVmIERFRkVWRU5UCisgIFBMVUdJTl9FVkVOVF9GSVJTVF9EWU5BTUlDCit9OworCitleHRlcm4gY29uc3QgY2hhciAqKnBsdWdpbl9ldmVudF9uYW1lOworCitzdHJ1Y3QgcGx1Z2luX2FyZ3VtZW50Cit7CisgIGNoYXIgKmtleTsgICAgLyoga2V5IG9mIHRoZSBhcmd1bWVudC4gICovCisgIGNoYXIgKnZhbHVlOyAgLyogdmFsdWUgaXMgb3B0aW9uYWwgYW5kIGNhbiBiZSBOVUxMLiAgKi8KK307CisKKy8qIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBsdWdpbi4gVXNlZCBieSAtLWhlbHAgYW5kIC0tdmVyc2lvbi4gKi8KKworc3RydWN0IHBsdWdpbl9pbmZvCit7CisgIGNvbnN0IGNoYXIgKnZlcnNpb247CisgIGNvbnN0IGNoYXIgKmhlbHA7Cit9OworCisvKiBSZXByZXNlbnRzIHRoZSBnY2MgdmVyc2lvbi4gVXNlZCB0byBhdm9pZCB1c2luZyBhbiBpbmNvbXBhdGlibGUgcGx1Z2luLiAqLworCitzdHJ1Y3QgcGx1Z2luX2djY192ZXJzaW9uCit7CisgIGNvbnN0IGNoYXIgKmJhc2V2ZXI7CisgIGNvbnN0IGNoYXIgKmRhdGVzdGFtcDsKKyAgY29uc3QgY2hhciAqZGV2cGhhc2U7CisgIGNvbnN0IGNoYXIgKnJldmlzaW9uOworICBjb25zdCBjaGFyICpjb25maWd1cmF0aW9uX2FyZ3VtZW50czsKK307CisKKy8qIE9iamVjdCB0aGF0IGtlZXBzIHRyYWNrIG9mIHRoZSBwbHVnaW4gbmFtZSBhbmQgaXRzIGFyZ3VtZW50cy4gKi8KK3N0cnVjdCBwbHVnaW5fbmFtZV9hcmdzCit7CisgIGNoYXIgKmJhc2VfbmFtZTsgICAgICAgICAgICAgIC8qIFNob3J0IG5hbWUgb2YgdGhlIHBsdWdpbiAoZmlsZW5hbWUgd2l0aG91dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc28gc3VmZml4KS4gKi8KKyAgY29uc3QgY2hhciAqZnVsbF9uYW1lOyAgICAgICAgLyogUGF0aCB0byB0aGUgcGx1Z2luIGFzIHNwZWNpZmllZCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1mcGx1Z2luPS4gKi8KKyAgaW50IGFyZ2M7ICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIGFyZ3VtZW50cyBzcGVjaWZpZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZnBsdWdpbi1hcmctLi4uICovCisgIHN0cnVjdCBwbHVnaW5fYXJndW1lbnQgKmFyZ3Y7IC8qIEFycmF5IG9mIEFSR0Mga2V5LXZhbHVlIHBhaXJzLiAqLworICBjb25zdCBjaGFyICp2ZXJzaW9uOyAgICAgICAgICAvKiBWZXJzaW9uIHN0cmluZyBwcm92aWRlZCBieSBwbHVnaW4uICovCisgIGNvbnN0IGNoYXIgKmhlbHA7ICAgICAgICAgICAgIC8qIEhlbHAgc3RyaW5nIHByb3ZpZGVkIGJ5IHBsdWdpbi4gKi8KK307CisKKy8qIFRoZSBkZWZhdWx0IHZlcnNpb24gY2hlY2suIENvbXBhcmVzIGV2ZXJ5IGZpZWxkIGluIFZFUlNJT04uICovCisKK2V4dGVybiBib29sIHBsdWdpbl9kZWZhdWx0X3ZlcnNpb25fY2hlY2sgKHN0cnVjdCBwbHVnaW5fZ2NjX3ZlcnNpb24gKiwKKwkJCQkJICBzdHJ1Y3QgcGx1Z2luX2djY192ZXJzaW9uICopOworCisvKiBGdW5jdGlvbiB0eXBlIGZvciB0aGUgcGx1Z2luIGluaXRpYWxpemF0aW9uIHJvdXRpbmUuIEVhY2ggcGx1Z2luIG1vZHVsZQorICAgc2hvdWxkIGRlZmluZSB0aGlzIGFzIGFuIGV4dGVybmFsbHktdmlzaWJsZSBmdW5jdGlvbiB3aXRoIG5hbWUKKyAgICJwbHVnaW5faW5pdC4iCisKKyAgIFBMVUdJTl9JTkZPIC0gcGx1Z2luIGludm9jYXRpb24gaW5mb3JtYXRpb24uCisgICBWRVJTSU9OICAgICAtIHRoZSBwbHVnaW5fZ2NjX3ZlcnNpb24gc3ltYm9sIG9mIEdDQy4KKworICAgUmV0dXJucyAwIGlmIGluaXRpYWxpemF0aW9uIGZpbmlzaGVzIHN1Y2Nlc3NmdWxseS4gICovCisKK3R5cGVkZWYgaW50ICgqcGx1Z2luX2luaXRfZnVuYykgKHN0cnVjdCBwbHVnaW5fbmFtZV9hcmdzICpwbHVnaW5faW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwbHVnaW5fZ2NjX3ZlcnNpb24gKnZlcnNpb24pOworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisvKiBEZWNsYXJhdGlvbiBmb3IgInBsdWdpbl9pbml0IiBmdW5jdGlvbiBzbyB0aGF0IGl0IGRvZXNuJ3QgbmVlZCB0byBiZQorICAgZHVwbGljYXRlZCBpbiBldmVyeSBwbHVnaW4uICAqLworZXh0ZXJuIGludCBwbHVnaW5faW5pdCAoc3RydWN0IHBsdWdpbl9uYW1lX2FyZ3MgKnBsdWdpbl9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBsdWdpbl9nY2NfdmVyc2lvbiAqdmVyc2lvbik7CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisvKiBGdW5jdGlvbiB0eXBlIGZvciBhIHBsdWdpbiBjYWxsYmFjayByb3V0aW5lLgorCisgICBHQ0NfREFUQSAgLSBldmVudC1zcGVjaWZpYyBkYXRhIHByb3ZpZGVkIGJ5IEdDQworICAgVVNFUl9EQVRBIC0gcGx1Z2luLXNwZWNpZmljIGRhdGEgcHJvdmlkZWQgYnkgdGhlIHBsdWdpbiAgKi8KKwordHlwZWRlZiB2b2lkICgqcGx1Z2luX2NhbGxiYWNrX2Z1bmMpICh2b2lkICpnY2NfZGF0YSwgdm9pZCAqdXNlcl9kYXRhKTsKKworLyogQ2FsbGVkIGZyb20gdGhlIHBsdWdpbidzIGluaXRpYWxpemF0aW9uIGNvZGUuIFJlZ2lzdGVyIGEgc2luZ2xlIGNhbGxiYWNrLgorICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLgorCisgICBQTFVHSU5fTkFNRSAtIGRpc3BsYXkgbmFtZSBmb3IgdGhpcyBwbHVnaW4KKyAgIEVWRU5UICAgICAgIC0gd2hpY2ggZXZlbnQgdGhlIGNhbGxiYWNrIGlzIGZvcgorICAgQ0FMTEJBQ0sgICAgLSB0aGUgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIGF0IHRoZSBldmVudAorICAgVVNFUl9EQVRBICAgLSBwbHVnaW4tcHJvdmlkZWQgZGF0YS4KKyovCisKKy8qIE51bWJlciBvZiBldmVudCBpZHMgLyBuYW1lcyByZWdpc3RlcmVkIHNvIGZhci4gICovCisKK2V4dGVybiBpbnQgZ2V0X2V2ZW50X2xhc3QgKHZvaWQpOworCitpbnQgZ2V0X25hbWVkX2V2ZW50X2lkIChjb25zdCBjaGFyICpuYW1lLCBlbnVtIGluc2VydF9vcHRpb24gaW5zZXJ0KTsKKworLyogVGhpcyBpcyBhbHNvIGNhbGxlZCB3aXRob3V0IGEgY2FsbGJhY2sgcm91dGluZSBmb3IgdGhlCisgICBQTFVHSU5fUEFTU19NQU5BR0VSX1NFVFVQLCBQTFVHSU5fSU5GTywgUExVR0lOX1JFR0lTVEVSX0dHQ19ST09UUyBhbmQKKyAgIFBMVUdJTl9SRUdJU1RFUl9HR0NfQ0FDSEVTIHBzZXVkby1ldmVudHMsIHdpdGggYSBzcGVjaWZpYyB1c2VyX2RhdGEuCisgICovCisKK2V4dGVybiB2b2lkIHJlZ2lzdGVyX2NhbGxiYWNrIChjb25zdCBjaGFyICpwbHVnaW5fbmFtZSwKKwkJCSAgICAgICBpbnQgZXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luX2NhbGxiYWNrX2Z1bmMgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKTsKKworZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2NhbGxiYWNrIChjb25zdCBjaGFyICpwbHVnaW5fbmFtZSwgaW50IGV2ZW50KTsKKworI2VuZGlmIC8qIEdDQ19QTFVHSU5fSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2dlbnJ0bC5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2dlbnJ0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YTY5MzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvZ2VucnRsLmgKQEAgLTAsMCArMSw1ODAgQEAKKy8qIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGdlbmdlbnJ0bCBmcm9tIHJ0bC5kZWYuICAqLworCisjaWZuZGVmIEdDQ19HRU5SVExfSAorI2RlZmluZSBHQ0NfR0VOUlRMX0gKKworI2luY2x1ZGUgInN0YXRpc3RpY3MuaCIKKworZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF8wX3N0YXQJIChSVFhfQ09ERSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfMChjLCBtKVwKKyAgICAgICAgZ2VuX3J0eF9mbXRfMF9zdGF0IChjLCBtIE1FTV9TVEFUX0lORk8pCisKK2V4dGVybiBydHggZ2VuX3J0eF9mbXRfZWVfc3RhdAkgKFJUWF9DT0RFLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCQkJCSAgICAgICBydHggYXJnMCwgcnR4IGFyZzEgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGdlbl9ydHhfZm10X2VlKGMsIG0sIHAwLCBwMSlcCisgICAgICAgIGdlbl9ydHhfZm10X2VlX3N0YXQgKGMsIG0sIHAwLCBwMSBNRU1fU1RBVF9JTkZPKQorCitleHRlcm4gcnR4IGdlbl9ydHhfZm10X3VlX3N0YXQJIChSVFhfQ09ERSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwkJCQkgICAgICAgcnR4IGFyZzAsIHJ0eCBhcmcxIE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBnZW5fcnR4X2ZtdF91ZShjLCBtLCBwMCwgcDEpXAorICAgICAgICBnZW5fcnR4X2ZtdF91ZV9zdGF0IChjLCBtLCBwMCwgcDEgTUVNX1NUQVRfSU5GTykKKworZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9FX3N0YXQJIChSVFhfQ09ERSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwkJCQkgICAgICAgcnR2ZWMgYXJnMCBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfRShjLCBtLCBwMClcCisgICAgICAgIGdlbl9ydHhfZm10X0Vfc3RhdCAoYywgbSwgcDAgTUVNX1NUQVRfSU5GTykKKworZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9lX3N0YXQJIChSVFhfQ09ERSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwkJCQkgICAgICAgcnR4IGFyZzAgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGdlbl9ydHhfZm10X2UoYywgbSwgcDApXAorICAgICAgICBnZW5fcnR4X2ZtdF9lX3N0YXQgKGMsIG0sIHAwIE1FTV9TVEFUX0lORk8pCisKK2V4dGVybiBydHggZ2VuX3J0eF9mbXRfaXV1QmllaWVfc3RhdAkgKFJUWF9DT0RFLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCQkJCSAgICAgICBpbnQgYXJnMCwgcnR4IGFyZzEsIHJ0eCBhcmcyLAorCQkJCSAgICAgICBzdHJ1Y3QgYmFzaWNfYmxvY2tfZGVmICphcmczLAorCQkJCSAgICAgICBpbnQgYXJnNCwgcnR4IGFyZzUsIGludCBhcmc2LAorCQkJCSAgICAgICBydHggYXJnNyBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfaXV1QmllaWUoYywgbSwgcDAsIHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYsIHA3KVwKKyAgICAgICAgZ2VuX3J0eF9mbXRfaXV1QmllaWVfc3RhdCAoYywgbSwgcDAsIHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYsIHA3IE1FTV9TVEFUX0lORk8pCisKK2V4dGVybiBydHggZ2VuX3J0eF9mbXRfaXV1QmllaWUwX3N0YXQJIChSVFhfQ09ERSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwkJCQkgICAgICAgaW50IGFyZzAsIHJ0eCBhcmcxLCBydHggYXJnMiwKKwkJCQkgICAgICAgc3RydWN0IGJhc2ljX2Jsb2NrX2RlZiAqYXJnMywKKwkJCQkgICAgICAgaW50IGFyZzQsIHJ0eCBhcmc1LCBpbnQgYXJnNiwKKwkJCQkgICAgICAgcnR4IGFyZzcgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGdlbl9ydHhfZm10X2l1dUJpZWllMChjLCBtLCBwMCwgcDEsIHAyLCBwMywgcDQsIHA1LCBwNiwgcDcpXAorICAgICAgICBnZW5fcnR4X2ZtdF9pdXVCaWVpZTBfc3RhdCAoYywgbSwgcDAsIHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYsIHA3IE1FTV9TVEFUX0lORk8pCisKK2V4dGVybiBydHggZ2VuX3J0eF9mbXRfaXV1QmllaWVlX3N0YXQJIChSVFhfQ09ERSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwkJCQkgICAgICAgaW50IGFyZzAsIHJ0eCBhcmcxLCBydHggYXJnMiwKKwkJCQkgICAgICAgc3RydWN0IGJhc2ljX2Jsb2NrX2RlZiAqYXJnMywKKwkJCQkgICAgICAgaW50IGFyZzQsIHJ0eCBhcmc1LCBpbnQgYXJnNiwKKwkJCQkgICAgICAgcnR4IGFyZzcsIHJ0eCBhcmc4IE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBnZW5fcnR4X2ZtdF9pdXVCaWVpZWUoYywgbSwgcDAsIHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYsIHA3LCBwOClcCisgICAgICAgIGdlbl9ydHhfZm10X2l1dUJpZWllZV9zdGF0IChjLCBtLCBwMCwgcDEsIHAyLCBwMywgcDQsIHA1LCBwNiwgcDcsIHA4IE1FTV9TVEFUX0lORk8pCisKK2V4dGVybiBydHggZ2VuX3J0eF9mbXRfaXV1MDAwMDBfc3RhdAkgKFJUWF9DT0RFLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCQkJCSAgICAgICBpbnQgYXJnMCwgcnR4IGFyZzEsIHJ0eCBhcmcyIE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBnZW5fcnR4X2ZtdF9pdXUwMDAwMChjLCBtLCBwMCwgcDEsIHAyKVwKKyAgICAgICAgZ2VuX3J0eF9mbXRfaXV1MDAwMDBfc3RhdCAoYywgbSwgcDAsIHAxLCBwMiBNRU1fU1RBVF9JTkZPKQorCitleHRlcm4gcnR4IGdlbl9ydHhfZm10X2l1dUIwMGlzX3N0YXQJIChSVFhfQ09ERSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwkJCQkgICAgICAgaW50IGFyZzAsIHJ0eCBhcmcxLCBydHggYXJnMiwKKwkJCQkgICAgICAgc3RydWN0IGJhc2ljX2Jsb2NrX2RlZiAqYXJnMywKKwkJCQkgICAgICAgaW50IGFyZzQsIGNvbnN0IGNoYXIgKmFyZzUgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGdlbl9ydHhfZm10X2l1dUIwMGlzKGMsIG0sIHAwLCBwMSwgcDIsIHAzLCBwNCwgcDUpXAorICAgICAgICBnZW5fcnR4X2ZtdF9pdXVCMDBpc19zdGF0IChjLCBtLCBwMCwgcDEsIHAyLCBwMywgcDQsIHA1IE1FTV9TVEFUX0lORk8pCisKK2V4dGVybiBydHggZ2VuX3J0eF9mbXRfc2lfc3RhdAkgKFJUWF9DT0RFLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCQkJCSAgICAgICBjb25zdCBjaGFyICphcmcwLCBpbnQgYXJnMSBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfc2koYywgbSwgcDAsIHAxKVwKKyAgICAgICAgZ2VuX3J0eF9mbXRfc2lfc3RhdCAoYywgbSwgcDAsIHAxIE1FTV9TVEFUX0lORk8pCisKK2V4dGVybiBydHggZ2VuX3J0eF9mbXRfc3NpRUVFaV9zdGF0CSAoUlRYX0NPREUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmFyZzAsIGNvbnN0IGNoYXIgKmFyZzEsCisJCQkJICAgICAgIGludCBhcmcyLCBydHZlYyBhcmczLCBydHZlYyBhcmc0LAorCQkJCSAgICAgICBydHZlYyBhcmc1LCBpbnQgYXJnNiBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfc3NpRUVFaShjLCBtLCBwMCwgcDEsIHAyLCBwMywgcDQsIHA1LCBwNilcCisgICAgICAgIGdlbl9ydHhfZm10X3NzaUVFRWlfc3RhdCAoYywgbSwgcDAsIHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYgTUVNX1NUQVRfSU5GTykKKworZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9FaV9zdGF0CSAoUlRYX0NPREUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisJCQkJICAgICAgIHJ0dmVjIGFyZzAsIGludCBhcmcxIE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBnZW5fcnR4X2ZtdF9FaShjLCBtLCBwMCwgcDEpXAorICAgICAgICBnZW5fcnR4X2ZtdF9FaV9zdGF0IChjLCBtLCBwMCwgcDEgTUVNX1NUQVRfSU5GTykKKworZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9lRWVlMF9zdGF0CSAoUlRYX0NPREUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisJCQkJICAgICAgIHJ0eCBhcmcwLCBydHZlYyBhcmcxLCBydHggYXJnMiwKKwkJCQkgICAgICAgcnR4IGFyZzMgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGdlbl9ydHhfZm10X2VFZWUwKGMsIG0sIHAwLCBwMSwgcDIsIHAzKVwKKyAgICAgICAgZ2VuX3J0eF9mbXRfZUVlZTBfc3RhdCAoYywgbSwgcDAsIHAxLCBwMiwgcDMgTUVNX1NUQVRfSU5GTykKKworZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9lZWVfc3RhdAkgKFJUWF9DT0RFLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCQkJCSAgICAgICBydHggYXJnMCwgcnR4IGFyZzEsIHJ0eCBhcmcyIE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBnZW5fcnR4X2ZtdF9lZWUoYywgbSwgcDAsIHAxLCBwMilcCisgICAgICAgIGdlbl9ydHhfZm10X2VlZV9zdGF0IChjLCBtLCBwMCwgcDEsIHAyIE1FTV9TVEFUX0lORk8pCisKK2V4dGVybiBydHggZ2VuX3J0eF9mbXRfX3N0YXQJIChSVFhfQ09ERSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfKGMsIG0pXAorICAgICAgICBnZW5fcnR4X2ZtdF9fc3RhdCAoYywgbSBNRU1fU1RBVF9JTkZPKQorCitleHRlcm4gcnR4IGdlbl9ydHhfZm10X3dfc3RhdAkgKFJUWF9DT0RFLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCQkJCSAgICAgICBIT1NUX1dJREVfSU5UIGFyZzAgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGdlbl9ydHhfZm10X3coYywgbSwgcDApXAorICAgICAgICBnZW5fcnR4X2ZtdF93X3N0YXQgKGMsIG0sIHAwIE1FTV9TVEFUX0lORk8pCisKK2V4dGVybiBydHggZ2VuX3J0eF9mbXRfd3d3X3N0YXQJIChSVFhfQ09ERSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwkJCQkgICAgICAgSE9TVF9XSURFX0lOVCBhcmcwLAorCQkJCSAgICAgICBIT1NUX1dJREVfSU5UIGFyZzEsCisJCQkJICAgICAgIEhPU1RfV0lERV9JTlQgYXJnMiBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfd3d3KGMsIG0sIHAwLCBwMSwgcDIpXAorICAgICAgICBnZW5fcnR4X2ZtdF93d3dfc3RhdCAoYywgbSwgcDAsIHAxLCBwMiBNRU1fU1RBVF9JTkZPKQorCitleHRlcm4gcnR4IGdlbl9ydHhfZm10X3Nfc3RhdAkgKFJUWF9DT0RFLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCQkJCSAgICAgICBjb25zdCBjaGFyICphcmcwIE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBnZW5fcnR4X2ZtdF9zKGMsIG0sIHAwKVwKKyAgICAgICAgZ2VuX3J0eF9mbXRfc19zdGF0IChjLCBtLCBwMCBNRU1fU1RBVF9JTkZPKQorCitleHRlcm4gcnR4IGdlbl9ydHhfZm10X2kwMF9zdGF0CSAoUlRYX0NPREUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisJCQkJICAgICAgIGludCBhcmcwIE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBnZW5fcnR4X2ZtdF9pMDAoYywgbSwgcDApXAorICAgICAgICBnZW5fcnR4X2ZtdF9pMDBfc3RhdCAoYywgbSwgcDAgTUVNX1NUQVRfSU5GTykKKworZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9laV9zdGF0CSAoUlRYX0NPREUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisJCQkJICAgICAgIHJ0eCBhcmcwLCBpbnQgYXJnMSBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfZWkoYywgbSwgcDAsIHAxKVwKKyAgICAgICAgZ2VuX3J0eF9mbXRfZWlfc3RhdCAoYywgbSwgcDAsIHAxIE1FTV9TVEFUX0lORk8pCisKK2V4dGVybiBydHggZ2VuX3J0eF9mbXRfZTBfc3RhdAkgKFJUWF9DT0RFLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCQkJCSAgICAgICBydHggYXJnMCBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfZTAoYywgbSwgcDApXAorICAgICAgICBnZW5fcnR4X2ZtdF9lMF9zdGF0IChjLCBtLCBwMCBNRU1fU1RBVF9JTkZPKQorCitleHRlcm4gcnR4IGdlbl9ydHhfZm10X3Vfc3RhdAkgKFJUWF9DT0RFLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCQkJCSAgICAgICBydHggYXJnMCBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfdShjLCBtLCBwMClcCisgICAgICAgIGdlbl9ydHhfZm10X3Vfc3RhdCAoYywgbSwgcDAgTUVNX1NUQVRfSU5GTykKKworZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9zMDBfc3RhdAkgKFJUWF9DT0RFLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCQkJCSAgICAgICBjb25zdCBjaGFyICphcmcwIE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBnZW5fcnR4X2ZtdF9zMDAoYywgbSwgcDApXAorICAgICAgICBnZW5fcnR4X2ZtdF9zMDBfc3RhdCAoYywgbSwgcDAgTUVNX1NUQVRfSU5GTykKKworZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF90ZWlfc3RhdAkgKFJUWF9DT0RFLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCQkJCSAgICAgICB1bmlvbiB0cmVlX25vZGUgKmFyZzAsIHJ0eCBhcmcxLAorCQkJCSAgICAgICBpbnQgYXJnMiBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfdGVpKGMsIG0sIHAwLCBwMSwgcDIpXAorICAgICAgICBnZW5fcnR4X2ZtdF90ZWlfc3RhdCAoYywgbSwgcDAsIHAxLCBwMiBNRU1fU1RBVF9JTkZPKQorCitleHRlcm4gcnR4IGdlbl9ydHhfZm10X2lzc19zdGF0CSAoUlRYX0NPREUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisJCQkJICAgICAgIGludCBhcmcwLCBjb25zdCBjaGFyICphcmcxLAorCQkJCSAgICAgICBjb25zdCBjaGFyICphcmcyIE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBnZW5fcnR4X2ZtdF9pc3MoYywgbSwgcDAsIHAxLCBwMilcCisgICAgICAgIGdlbl9ydHhfZm10X2lzc19zdGF0IChjLCBtLCBwMCwgcDEsIHAyIE1FTV9TVEFUX0lORk8pCisKK2V4dGVybiBydHggZ2VuX3J0eF9mbXRfaXNfc3RhdAkgKFJUWF9DT0RFLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCQkJCSAgICAgICBpbnQgYXJnMCwgY29uc3QgY2hhciAqYXJnMSBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfaXMoYywgbSwgcDAsIHAxKVwKKyAgICAgICAgZ2VuX3J0eF9mbXRfaXNfc3RhdCAoYywgbSwgcDAsIHAxIE1FTV9TVEFUX0lORk8pCisKK2V4dGVybiBydHggZ2VuX3J0eF9mbXRfaXNFX3N0YXQJIChSVFhfQ09ERSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwkJCQkgICAgICAgaW50IGFyZzAsIGNvbnN0IGNoYXIgKmFyZzEsCisJCQkJICAgICAgIHJ0dmVjIGFyZzIgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGdlbl9ydHhfZm10X2lzRShjLCBtLCBwMCwgcDEsIHAyKVwKKyAgICAgICAgZ2VuX3J0eF9mbXRfaXNFX3N0YXQgKGMsIG0sIHAwLCBwMSwgcDIgTUVNX1NUQVRfSU5GTykKKworZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9pX3N0YXQJIChSVFhfQ09ERSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwkJCQkgICAgICAgaW50IGFyZzAgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGdlbl9ydHhfZm10X2koYywgbSwgcDApXAorICAgICAgICBnZW5fcnR4X2ZtdF9pX3N0YXQgKGMsIG0sIHAwIE1FTV9TVEFUX0lORk8pCisKK2V4dGVybiBydHggZ2VuX3J0eF9mbXRfaUVfc3RhdAkgKFJUWF9DT0RFLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCQkJCSAgICAgICBpbnQgYXJnMCwgcnR2ZWMgYXJnMSBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfaUUoYywgbSwgcDAsIHAxKVwKKyAgICAgICAgZ2VuX3J0eF9mbXRfaUVfc3RhdCAoYywgbSwgcDAsIHAxIE1FTV9TVEFUX0lORk8pCisKK2V4dGVybiBydHggZ2VuX3J0eF9mbXRfc3Nfc3RhdAkgKFJUWF9DT0RFLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCQkJCSAgICAgICBjb25zdCBjaGFyICphcmcwLCBjb25zdCBjaGFyICphcmcxIE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBnZW5fcnR4X2ZtdF9zcyhjLCBtLCBwMCwgcDEpXAorICAgICAgICBnZW5fcnR4X2ZtdF9zc19zdGF0IChjLCBtLCBwMCwgcDEgTUVNX1NUQVRfSU5GTykKKworZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9zRXNzX3N0YXQJIChSVFhfQ09ERSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqYXJnMCwgcnR2ZWMgYXJnMSwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqYXJnMiwgY29uc3QgY2hhciAqYXJnMyBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfc0VzcyhjLCBtLCBwMCwgcDEsIHAyLCBwMylcCisgICAgICAgIGdlbl9ydHhfZm10X3NFc3Nfc3RhdCAoYywgbSwgcDAsIHAxLCBwMiwgcDMgTUVNX1NUQVRfSU5GTykKKworZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9lRV9zdGF0CSAoUlRYX0NPREUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisJCQkJICAgICAgIHJ0eCBhcmcwLCBydHZlYyBhcmcxIE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBnZW5fcnR4X2ZtdF9lRShjLCBtLCBwMCwgcDEpXAorICAgICAgICBnZW5fcnR4X2ZtdF9lRV9zdGF0IChjLCBtLCBwMCwgcDEgTUVNX1NUQVRfSU5GTykKKworZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9Fc3Nfc3RhdAkgKFJUWF9DT0RFLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCQkJCSAgICAgICBydHZlYyBhcmcwLCBjb25zdCBjaGFyICphcmcxLAorCQkJCSAgICAgICBjb25zdCBjaGFyICphcmcyIE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBnZW5fcnR4X2ZtdF9Fc3MoYywgbSwgcDAsIHAxLCBwMilcCisgICAgICAgIGdlbl9ydHhfZm10X0Vzc19zdGF0IChjLCBtLCBwMCwgcDEsIHAyIE1FTV9TVEFUX0lORk8pCisKK2V4dGVybiBydHggZ2VuX3J0eF9mbXRfc2VzX3N0YXQJIChSVFhfQ09ERSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqYXJnMCwgcnR4IGFyZzEsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmFyZzIgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGdlbl9ydHhfZm10X3NlcyhjLCBtLCBwMCwgcDEsIHAyKVwKKyAgICAgICAgZ2VuX3J0eF9mbXRfc2VzX3N0YXQgKGMsIG0sIHAwLCBwMSwgcDIgTUVNX1NUQVRfSU5GTykKKworZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9zc3Nfc3RhdAkgKFJUWF9DT0RFLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCQkJCSAgICAgICBjb25zdCBjaGFyICphcmcwLCBjb25zdCBjaGFyICphcmcxLAorCQkJCSAgICAgICBjb25zdCBjaGFyICphcmcyIE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBnZW5fcnR4X2ZtdF9zc3MoYywgbSwgcDAsIHAxLCBwMilcCisgICAgICAgIGdlbl9ydHhfZm10X3Nzc19zdGF0IChjLCBtLCBwMCwgcDEsIHAyIE1FTV9TVEFUX0lORk8pCisKK2V4dGVybiBydHggZ2VuX3J0eF9mbXRfc3NlX3N0YXQJIChSVFhfQ09ERSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqYXJnMCwgY29uc3QgY2hhciAqYXJnMSwKKwkJCQkgICAgICAgcnR4IGFyZzIgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGdlbl9ydHhfZm10X3NzZShjLCBtLCBwMCwgcDEsIHAyKVwKKyAgICAgICAgZ2VuX3J0eF9mbXRfc3NlX3N0YXQgKGMsIG0sIHAwLCBwMSwgcDIgTUVNX1NUQVRfSU5GTykKKworZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9zaWVzX3N0YXQJIChSVFhfQ09ERSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqYXJnMCwgaW50IGFyZzEsCisJCQkJICAgICAgIHJ0eCBhcmcyLCBjb25zdCBjaGFyICphcmczIE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBnZW5fcnR4X2ZtdF9zaWVzKGMsIG0sIHAwLCBwMSwgcDIsIHAzKVwKKyAgICAgICAgZ2VuX3J0eF9mbXRfc2llc19zdGF0IChjLCBtLCBwMCwgcDEsIHAyLCBwMyBNRU1fU1RBVF9JTkZPKQorCitleHRlcm4gcnR4IGdlbl9ydHhfZm10X3NFX3N0YXQJIChSVFhfQ09ERSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqYXJnMCwgcnR2ZWMgYXJnMSBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfc0UoYywgbSwgcDAsIHAxKVwKKyAgICAgICAgZ2VuX3J0eF9mbXRfc0Vfc3RhdCAoYywgbSwgcDAsIHAxIE1FTV9TVEFUX0lORk8pCisKK2V4dGVybiBydHggZ2VuX3J0eF9mbXRfaWlfc3RhdAkgKFJUWF9DT0RFLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCQkJCSAgICAgICBpbnQgYXJnMCwgaW50IGFyZzEgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGdlbl9ydHhfZm10X2lpKGMsIG0sIHAwLCBwMSlcCisgICAgICAgIGdlbl9ydHhfZm10X2lpX3N0YXQgKGMsIG0sIHAwLCBwMSBNRU1fU1RBVF9JTkZPKQorCitleHRlcm4gcnR4IGdlbl9ydHhfZm10X0VlX3N0YXQJIChSVFhfQ09ERSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwkJCQkgICAgICAgcnR2ZWMgYXJnMCwgcnR4IGFyZzEgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGdlbl9ydHhfZm10X0VlKGMsIG0sIHAwLCBwMSlcCisgICAgICAgIGdlbl9ydHhfZm10X0VlX3N0YXQgKGMsIG0sIHAwLCBwMSBNRU1fU1RBVF9JTkZPKQorCisKKyNkZWZpbmUgZ2VuX3J0eF9WQUxVRShNT0RFKSBcCisgIGdlbl9ydHhfZm10XzAgKFZBTFVFLCAoTU9ERSkpCisjZGVmaW5lIGdlbl9ydHhfREVCVUdfRVhQUihNT0RFKSBcCisgIGdlbl9ydHhfZm10XzAgKERFQlVHX0VYUFIsIChNT0RFKSkKKyNkZWZpbmUgZ2VuX3J0eF9FWFBSX0xJU1QoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoRVhQUl9MSVNULCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X0lOU05fTElTVChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X3VlIChJTlNOX0xJU1QsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfU0VRVUVOQ0UoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9FIChTRVFVRU5DRSwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfQUREUkVTUyhNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKEFERFJFU1MsIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X0RFQlVHX0lOU04oTU9ERSwgQVJHMCwgQVJHMSwgQVJHMiwgQVJHMywgQVJHNCwgQVJHNSwgQVJHNiwgQVJHNykgXAorICBnZW5fcnR4X2ZtdF9pdXVCaWVpZSAoREVCVUdfSU5TTiwgKE1PREUpLCAoQVJHMCksIChBUkcxKSwgKEFSRzIpLCAoQVJHMyksIChBUkc0KSwgKEFSRzUpLCAoQVJHNiksIChBUkc3KSkKKyNkZWZpbmUgZ2VuX3J0eF9JTlNOKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIsIEFSRzMsIEFSRzQsIEFSRzUsIEFSRzYsIEFSRzcpIFwKKyAgZ2VuX3J0eF9mbXRfaXV1QmllaWUgKElOU04sIChNT0RFKSwgKEFSRzApLCAoQVJHMSksIChBUkcyKSwgKEFSRzMpLCAoQVJHNCksIChBUkc1KSwgKEFSRzYpLCAoQVJHNykpCisjZGVmaW5lIGdlbl9ydHhfSlVNUF9JTlNOKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIsIEFSRzMsIEFSRzQsIEFSRzUsIEFSRzYsIEFSRzcpIFwKKyAgZ2VuX3J0eF9mbXRfaXV1QmllaWUwIChKVU1QX0lOU04sIChNT0RFKSwgKEFSRzApLCAoQVJHMSksIChBUkcyKSwgKEFSRzMpLCAoQVJHNCksIChBUkc1KSwgKEFSRzYpLCAoQVJHNykpCisjZGVmaW5lIGdlbl9ydHhfQ0FMTF9JTlNOKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIsIEFSRzMsIEFSRzQsIEFSRzUsIEFSRzYsIEFSRzcsIEFSRzgpIFwKKyAgZ2VuX3J0eF9mbXRfaXV1QmllaWVlIChDQUxMX0lOU04sIChNT0RFKSwgKEFSRzApLCAoQVJHMSksIChBUkcyKSwgKEFSRzMpLCAoQVJHNCksIChBUkc1KSwgKEFSRzYpLCAoQVJHNyksIChBUkc4KSkKKyNkZWZpbmUgZ2VuX3J0eF9CQVJSSUVSKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIpIFwKKyAgZ2VuX3J0eF9mbXRfaXV1MDAwMDAgKEJBUlJJRVIsIChNT0RFKSwgKEFSRzApLCAoQVJHMSksIChBUkcyKSkKKyNkZWZpbmUgZ2VuX3J0eF9DT0RFX0xBQkVMKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIsIEFSRzMsIEFSRzQsIEFSRzUpIFwKKyAgZ2VuX3J0eF9mbXRfaXV1QjAwaXMgKENPREVfTEFCRUwsIChNT0RFKSwgKEFSRzApLCAoQVJHMSksIChBUkcyKSwgKEFSRzMpLCAoQVJHNCksIChBUkc1KSkKKyNkZWZpbmUgZ2VuX3J0eF9DT05EX0VYRUMoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoQ09ORF9FWEVDLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1BBUkFMTEVMKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfRSAoUEFSQUxMRUwsIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X0FTTV9JTlBVVChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X3NpIChBU01fSU5QVVQsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfQVNNX09QRVJBTkRTKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIsIEFSRzMsIEFSRzQsIEFSRzUsIEFSRzYpIFwKKyAgZ2VuX3J0eF9mbXRfc3NpRUVFaSAoQVNNX09QRVJBTkRTLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpLCAoQVJHMiksIChBUkczKSwgKEFSRzQpLCAoQVJHNSksIChBUkc2KSkKKyNkZWZpbmUgZ2VuX3J0eF9VTlNQRUMoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9FaSAoVU5TUEVDLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1VOU1BFQ19WT0xBVElMRShNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X0VpIChVTlNQRUNfVk9MQVRJTEUsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfQUREUl9WRUMoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9FIChBRERSX1ZFQywgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfQUREUl9ESUZGX1ZFQyhNT0RFLCBBUkcwLCBBUkcxLCBBUkcyLCBBUkczKSBcCisgIGdlbl9ydHhfZm10X2VFZWUwIChBRERSX0RJRkZfVkVDLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpLCAoQVJHMiksIChBUkczKSkKKyNkZWZpbmUgZ2VuX3J0eF9QUkVGRVRDSChNT0RFLCBBUkcwLCBBUkcxLCBBUkcyKSBcCisgIGdlbl9ydHhfZm10X2VlZSAoUFJFRkVUQ0gsIChNT0RFKSwgKEFSRzApLCAoQVJHMSksIChBUkcyKSkKKyNkZWZpbmUgZ2VuX3J0eF9TRVQoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoU0VULCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1VTRShNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKFVTRSwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfQ0xPQkJFUihNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKENMT0JCRVIsIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X0NBTEwoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoQ0FMTCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9SRVRVUk4oTU9ERSkgXAorICBnZW5fcnR4X2ZtdF8gKFJFVFVSTiwgKE1PREUpKQorI2RlZmluZSBnZW5fcnR4X0VIX1JFVFVSTihNT0RFKSBcCisgIGdlbl9ydHhfZm10XyAoRUhfUkVUVVJOLCAoTU9ERSkpCisjZGVmaW5lIGdlbl9ydHhfVFJBUF9JRihNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChUUkFQX0lGLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X3Jhd19DT05TVF9JTlQoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF93IChDT05TVF9JTlQsIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X3Jhd19DT05TVF9WRUNUT1IoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9FIChDT05TVF9WRUNUT1IsIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X0NPTlNUX1NUUklORyhNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X3MgKENPTlNUX1NUUklORywgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfQ09OU1QoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChDT05TVCwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfUEMoTU9ERSkgXAorICBnZW5fcnR4X2ZtdF8gKFBDLCAoTU9ERSkpCisjZGVmaW5lIGdlbl9ydHhfcmF3X1JFRyhNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2kwMCAoUkVHLCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9TQ1JBVENIKE1PREUpIFwKKyAgZ2VuX3J0eF9mbXRfMCAoU0NSQVRDSCwgKE1PREUpKQorI2RlZmluZSBnZW5fcnR4X3Jhd19TVUJSRUcoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9laSAoU1VCUkVHLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1NUUklDVF9MT1dfUEFSVChNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKFNUUklDVF9MT1dfUEFSVCwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfQ09OQ0FUKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKENPTkNBVCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9DT05DQVROKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfRSAoQ09OQ0FUTiwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfcmF3X01FTShNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UwIChNRU0sIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X0xBQkVMX1JFRihNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X3UgKExBQkVMX1JFRiwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfU1lNQk9MX1JFRihNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X3MwMCAoU1lNQk9MX1JFRiwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfQ0MwKE1PREUpIFwKKyAgZ2VuX3J0eF9mbXRfIChDQzAsIChNT0RFKSkKKyNkZWZpbmUgZ2VuX3J0eF9JRl9USEVOX0VMU0UoTU9ERSwgQVJHMCwgQVJHMSwgQVJHMikgXAorICBnZW5fcnR4X2ZtdF9lZWUgKElGX1RIRU5fRUxTRSwgKE1PREUpLCAoQVJHMCksIChBUkcxKSwgKEFSRzIpKQorI2RlZmluZSBnZW5fcnR4X0NPTVBBUkUoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoQ09NUEFSRSwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9QTFVTKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKFBMVVMsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfTUlOVVMoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoTUlOVVMsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfTkVHKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoTkVHLCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9NVUxUKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKE1VTFQsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfU1NfTVVMVChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChTU19NVUxULCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1VTX01VTFQoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoVVNfTVVMVCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9ESVYoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoRElWLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1NTX0RJVihNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChTU19ESVYsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfVVNfRElWKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKFVTX0RJViwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9NT0QoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoTU9ELCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1VESVYoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoVURJViwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9VTU9EKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKFVNT0QsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfQU5EKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKEFORCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9JT1IoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoSU9SLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1hPUihNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChYT1IsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfTk9UKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoTk9ULCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9BU0hJRlQoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoQVNISUZULCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1JPVEFURShNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChST1RBVEUsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfQVNISUZUUlQoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoQVNISUZUUlQsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfTFNISUZUUlQoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoTFNISUZUUlQsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfUk9UQVRFUlQoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoUk9UQVRFUlQsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfU01JTihNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChTTUlOLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1NNQVgoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoU01BWCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9VTUlOKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKFVNSU4sIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfVU1BWChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChVTUFYLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1BSRV9ERUMoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChQUkVfREVDLCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9QUkVfSU5DKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoUFJFX0lOQywgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfUE9TVF9ERUMoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChQT1NUX0RFQywgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfUE9TVF9JTkMoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChQT1NUX0lOQywgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfUFJFX01PRElGWShNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChQUkVfTU9ESUZZLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1BPU1RfTU9ESUZZKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKFBPU1RfTU9ESUZZLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X05FKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKE5FLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X0VRKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKEVRLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X0dFKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKEdFLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X0dUKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKEdULCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X0xFKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKExFLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X0xUKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKExULCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X0dFVShNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChHRVUsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfR1RVKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKEdUVSwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9MRVUoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoTEVVLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X0xUVShNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChMVFUsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfVU5PUkRFUkVEKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKFVOT1JERVJFRCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9PUkRFUkVEKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKE9SREVSRUQsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfVU5FUShNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChVTkVRLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1VOR0UoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoVU5HRSwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9VTkdUKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKFVOR1QsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfVU5MRShNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChVTkxFLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1VOTFQoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoVU5MVCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9MVEdUKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKExUR1QsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfU0lHTl9FWFRFTkQoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChTSUdOX0VYVEVORCwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfWkVST19FWFRFTkQoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChaRVJPX0VYVEVORCwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfVFJVTkNBVEUoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChUUlVOQ0FURSwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfRkxPQVRfRVhURU5EKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoRkxPQVRfRVhURU5ELCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9GTE9BVF9UUlVOQ0FURShNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKEZMT0FUX1RSVU5DQVRFLCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9GTE9BVChNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKEZMT0FULCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9GSVgoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChGSVgsIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X1VOU0lHTkVEX0ZMT0FUKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoVU5TSUdORURfRkxPQVQsIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X1VOU0lHTkVEX0ZJWChNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKFVOU0lHTkVEX0ZJWCwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfRlJBQ1RfQ09OVkVSVChNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKEZSQUNUX0NPTlZFUlQsIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X1VOU0lHTkVEX0ZSQUNUX0NPTlZFUlQoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChVTlNJR05FRF9GUkFDVF9DT05WRVJULCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9TQVRfRlJBQ1QoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChTQVRfRlJBQ1QsIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X1VOU0lHTkVEX1NBVF9GUkFDVChNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKFVOU0lHTkVEX1NBVF9GUkFDVCwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfQUJTKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoQUJTLCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9TUVJUKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoU1FSVCwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfQlNXQVAoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChCU1dBUCwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfRkZTKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoRkZTLCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9DTFooTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChDTFosIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X0NUWihNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKENUWiwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfUE9QQ09VTlQoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChQT1BDT1VOVCwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfUEFSSVRZKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoUEFSSVRZLCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9TSUdOX0VYVFJBQ1QoTU9ERSwgQVJHMCwgQVJHMSwgQVJHMikgXAorICBnZW5fcnR4X2ZtdF9lZWUgKFNJR05fRVhUUkFDVCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSwgKEFSRzIpKQorI2RlZmluZSBnZW5fcnR4X1pFUk9fRVhUUkFDVChNT0RFLCBBUkcwLCBBUkcxLCBBUkcyKSBcCisgIGdlbl9ydHhfZm10X2VlZSAoWkVST19FWFRSQUNULCAoTU9ERSksIChBUkcwKSwgKEFSRzEpLCAoQVJHMikpCisjZGVmaW5lIGdlbl9ydHhfSElHSChNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKEhJR0gsIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X0xPX1NVTShNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChMT19TVU0sIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfVkVDX01FUkdFKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIpIFwKKyAgZ2VuX3J0eF9mbXRfZWVlIChWRUNfTUVSR0UsIChNT0RFKSwgKEFSRzApLCAoQVJHMSksIChBUkcyKSkKKyNkZWZpbmUgZ2VuX3J0eF9WRUNfU0VMRUNUKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKFZFQ19TRUxFQ1QsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfVkVDX0NPTkNBVChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChWRUNfQ09OQ0FULCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1ZFQ19EVVBMSUNBVEUoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChWRUNfRFVQTElDQVRFLCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9TU19QTFVTKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKFNTX1BMVVMsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfVVNfUExVUyhNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChVU19QTFVTLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1NTX01JTlVTKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKFNTX01JTlVTLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1NTX05FRyhNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKFNTX05FRywgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfVVNfTkVHKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoVVNfTkVHLCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9TU19BQlMoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChTU19BQlMsIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X1NTX0FTSElGVChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChTU19BU0hJRlQsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfVVNfQVNISUZUKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKFVTX0FTSElGVCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9VU19NSU5VUyhNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChVU19NSU5VUywgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9TU19UUlVOQ0FURShNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKFNTX1RSVU5DQVRFLCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9VU19UUlVOQ0FURShNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKFVTX1RSVU5DQVRFLCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9WQVJfTE9DQVRJT04oTU9ERSwgQVJHMCwgQVJHMSwgQVJHMikgXAorICBnZW5fcnR4X2ZtdF90ZWkgKFZBUl9MT0NBVElPTiwgKE1PREUpLCAoQVJHMCksIChBUkcxKSwgKEFSRzIpKQorI2RlZmluZSBnZW5fcnR4X0lOQ0xVREUoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9zIChJTkNMVURFLCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9NQVRDSF9PUEVSQU5EKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIpIFwKKyAgZ2VuX3J0eF9mbXRfaXNzIChNQVRDSF9PUEVSQU5ELCAoTU9ERSksIChBUkcwKSwgKEFSRzEpLCAoQVJHMikpCisjZGVmaW5lIGdlbl9ydHhfTUFUQ0hfU0NSQVRDSChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2lzIChNQVRDSF9TQ1JBVENILCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X01BVENIX09QRVJBVE9SKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIpIFwKKyAgZ2VuX3J0eF9mbXRfaXNFIChNQVRDSF9PUEVSQVRPUiwgKE1PREUpLCAoQVJHMCksIChBUkcxKSwgKEFSRzIpKQorI2RlZmluZSBnZW5fcnR4X01BVENIX1BBUkFMTEVMKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIpIFwKKyAgZ2VuX3J0eF9mbXRfaXNFIChNQVRDSF9QQVJBTExFTCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSwgKEFSRzIpKQorI2RlZmluZSBnZW5fcnR4X01BVENIX0RVUChNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2kgKE1BVENIX0RVUCwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfTUFUQ0hfT1BfRFVQKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfaUUgKE1BVENIX09QX0RVUCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9NQVRDSF9QQVJfRFVQKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfaUUgKE1BVENIX1BBUl9EVVAsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfTUFUQ0hfQ09ERShNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X3NzIChNQVRDSF9DT0RFLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X01BVENIX1RFU1QoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9zIChNQVRDSF9URVNULCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9ERUZJTkVfRVhQQU5EKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIsIEFSRzMpIFwKKyAgZ2VuX3J0eF9mbXRfc0VzcyAoREVGSU5FX0VYUEFORCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSwgKEFSRzIpLCAoQVJHMykpCisjZGVmaW5lIGdlbl9ydHhfREVGSU5FX0RFTEFZKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZUUgKERFRklORV9ERUxBWSwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9ERUZJTkVfQ09ORF9FWEVDKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIpIFwKKyAgZ2VuX3J0eF9mbXRfRXNzIChERUZJTkVfQ09ORF9FWEVDLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpLCAoQVJHMikpCisjZGVmaW5lIGdlbl9ydHhfREVGSU5FX1BSRURJQ0FURShNT0RFLCBBUkcwLCBBUkcxLCBBUkcyKSBcCisgIGdlbl9ydHhfZm10X3NlcyAoREVGSU5FX1BSRURJQ0FURSwgKE1PREUpLCAoQVJHMCksIChBUkcxKSwgKEFSRzIpKQorI2RlZmluZSBnZW5fcnR4X0RFRklORV9TUEVDSUFMX1BSRURJQ0FURShNT0RFLCBBUkcwLCBBUkcxLCBBUkcyKSBcCisgIGdlbl9ydHhfZm10X3NlcyAoREVGSU5FX1NQRUNJQUxfUFJFRElDQVRFLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpLCAoQVJHMikpCisjZGVmaW5lIGdlbl9ydHhfREVGSU5FX1JFR0lTVEVSX0NPTlNUUkFJTlQoTU9ERSwgQVJHMCwgQVJHMSwgQVJHMikgXAorICBnZW5fcnR4X2ZtdF9zc3MgKERFRklORV9SRUdJU1RFUl9DT05TVFJBSU5ULCAoTU9ERSksIChBUkcwKSwgKEFSRzEpLCAoQVJHMikpCisjZGVmaW5lIGdlbl9ydHhfREVGSU5FX0NPTlNUUkFJTlQoTU9ERSwgQVJHMCwgQVJHMSwgQVJHMikgXAorICBnZW5fcnR4X2ZtdF9zc2UgKERFRklORV9DT05TVFJBSU5ULCAoTU9ERSksIChBUkcwKSwgKEFSRzEpLCAoQVJHMikpCisjZGVmaW5lIGdlbl9ydHhfREVGSU5FX01FTU9SWV9DT05TVFJBSU5UKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIpIFwKKyAgZ2VuX3J0eF9mbXRfc3NlIChERUZJTkVfTUVNT1JZX0NPTlNUUkFJTlQsIChNT0RFKSwgKEFSRzApLCAoQVJHMSksIChBUkcyKSkKKyNkZWZpbmUgZ2VuX3J0eF9ERUZJTkVfQUREUkVTU19DT05TVFJBSU5UKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIpIFwKKyAgZ2VuX3J0eF9mbXRfc3NlIChERUZJTkVfQUREUkVTU19DT05TVFJBSU5ULCAoTU9ERSksIChBUkcwKSwgKEFSRzEpLCAoQVJHMikpCisjZGVmaW5lIGdlbl9ydHhfRVhDTFVTSU9OX1NFVChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X3NzIChFWENMVVNJT05fU0VULCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1BSRVNFTkNFX1NFVChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X3NzIChQUkVTRU5DRV9TRVQsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfRklOQUxfUFJFU0VOQ0VfU0VUKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfc3MgKEZJTkFMX1BSRVNFTkNFX1NFVCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9BQlNFTkNFX1NFVChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X3NzIChBQlNFTkNFX1NFVCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9GSU5BTF9BQlNFTkNFX1NFVChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X3NzIChGSU5BTF9BQlNFTkNFX1NFVCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9ERUZJTkVfQVVUT01BVE9OKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfcyAoREVGSU5FX0FVVE9NQVRPTiwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfQVVUT01BVEFfT1BUSU9OKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfcyAoQVVUT01BVEFfT1BUSU9OLCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9ERUZJTkVfUkVTRVJWQVRJT04oTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9zcyAoREVGSU5FX1JFU0VSVkFUSU9OLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X0RFRklORV9JTlNOX1JFU0VSVkFUSU9OKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIsIEFSRzMpIFwKKyAgZ2VuX3J0eF9mbXRfc2llcyAoREVGSU5FX0lOU05fUkVTRVJWQVRJT04sIChNT0RFKSwgKEFSRzApLCAoQVJHMSksIChBUkcyKSwgKEFSRzMpKQorI2RlZmluZSBnZW5fcnR4X0RFRklORV9BVFRSKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIpIFwKKyAgZ2VuX3J0eF9mbXRfc3NlIChERUZJTkVfQVRUUiwgKE1PREUpLCAoQVJHMCksIChBUkcxKSwgKEFSRzIpKQorI2RlZmluZSBnZW5fcnR4X0FUVFIoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9zIChBVFRSLCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9TRVRfQVRUUihNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X3NzIChTRVRfQVRUUiwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9TRVRfQVRUUl9BTFRFUk5BVElWRShNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X3NFIChTRVRfQVRUUl9BTFRFUk5BVElWRSwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9FUV9BVFRSKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfc3MgKEVRX0FUVFIsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfRVFfQVRUUl9BTFQoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9paSAoRVFfQVRUUl9BTFQsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfQVRUUl9GTEFHKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfcyAoQVRUUl9GTEFHLCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9DT05EKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfRWUgKENPTkQsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisKKyNlbmRpZiAvKiBHQ0NfR0VOUlRMX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9nZ2MuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9nZ2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzk0ZDZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2dnYy5oCkBAIC0wLDAgKzEsMzM1IEBACisvKiBHYXJiYWdlIGNvbGxlY3Rpb24gZm9yIHRoZSBHTlUgY29tcGlsZXIuCisKKyAgIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNywKKyAgIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19HR0NfSAorI2RlZmluZSBHQ0NfR0dDX0gKKyNpbmNsdWRlICJzdGF0aXN0aWNzLmgiCisKKy8qIFN5bWJvbHMgYXJlIG1hcmtlZCB3aXRoIGBnZ2MnIGZvciBgZ2NjIGdjJyBzbyBhcyBub3QgdG8gaW50ZXJmZXJlIHdpdGgKKyAgIGFuIGV4dGVybmFsIGdjIGxpYnJhcnkgdGhhdCBtaWdodCBiZSBsaW5rZWQgaW4uICAqLworCisvKiBDb25zdGFudHMgZm9yIGdlbmVyYWwgdXNlLiAgKi8KK2V4dGVybiBjb25zdCBjaGFyIGVtcHR5X3N0cmluZ1tdOwkvKiBlbXB0eSBzdHJpbmcgKi8KK2V4dGVybiBjb25zdCBjaGFyIGRpZ2l0X3ZlY3RvcltdOwkvKiAiMCIgLi4gIjkiICovCisjZGVmaW5lIGRpZ2l0X3N0cmluZyhkKSAoZGlnaXRfdmVjdG9yICsgKChkKSAqIDIpKQorCisvKiBJbnRlcm5hbCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyB1c2VkIGJ5IHRoZSBHVFkKKyAgIG1hY2hpbmVyeS4gICovCisKKy8qIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgYSBwb2ludGVyIHRvIGEgcG9pbnRlciwgdGhlIHNlY29uZCBhIGNvb2tpZS4gICovCit0eXBlZGVmIHZvaWQgKCpndF9wb2ludGVyX29wZXJhdG9yKSAodm9pZCAqLCB2b2lkICopOworCisjaW5jbHVkZSAiZ3R5cGUtZGVzYy5oIgorCisvKiBPbmUgb2YgdGhlc2UgYXBwbGllcyBpdHMgdGhpcmQgcGFyYW1ldGVyICh3aXRoIGNvb2tpZSBpbiB0aGUgZm91cnRoCisgICBwYXJhbWV0ZXIpIHRvIGVhY2ggcG9pbnRlciBpbiB0aGUgb2JqZWN0IHBvaW50ZWQgdG8gYnkgdGhlIGZpcnN0CisgICBwYXJhbWV0ZXIsIHVzaW5nIHRoZSBzZWNvbmQgcGFyYW1ldGVyLiAgKi8KK3R5cGVkZWYgdm9pZCAoKmd0X25vdGVfcG9pbnRlcnMpICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwKKwkJCQkgIHZvaWQgKik7CisKKy8qIE9uZSBvZiB0aGVzZSBpcyBjYWxsZWQgYmVmb3JlIG9iamVjdHMgYXJlIHJlLW9yZGVyZWQgaW4gbWVtb3J5LgorICAgVGhlIGZpcnN0IHBhcmFtZXRlciBpcyB0aGUgb3JpZ2luYWwgb2JqZWN0LCB0aGUgc2Vjb25kIGlzIHRoZQorICAgc3Vib2JqZWN0IHRoYXQgaGFzIGhhZCBpdHMgcG9pbnRlcnMgcmVvcmRlcmVkLCB0aGUgdGhpcmQgcGFyYW1ldGVyCisgICBjYW4gY29tcHV0ZSB0aGUgbmV3IHZhbHVlcyBvZiBhIHBvaW50ZXIgd2hlbiBnaXZlbiB0aGUgY29va2llIGluCisgICB0aGUgZm91cnRoIHBhcmFtZXRlci4gICovCit0eXBlZGVmIHZvaWQgKCpndF9oYW5kbGVfcmVvcmRlcikgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLAorCQkJCSAgIHZvaWQgKik7CisKKy8qIFVzZWQgYnkgdGhlIGd0X3BjaF9uXyogcm91dGluZXMuICBSZWdpc3RlciBhbiBvYmplY3QgaW4gdGhlIGhhc2ggdGFibGUuICAqLworZXh0ZXJuIGludCBndF9wY2hfbm90ZV9vYmplY3QgKHZvaWQgKiwgdm9pZCAqLCBndF9ub3RlX3BvaW50ZXJzLAorCQkJICAgICAgIGVudW0gZ3RfdHlwZXNfZW51bSk7CisKKy8qIFVzZWQgYnkgdGhlIGd0X3BjaF9uXyogcm91dGluZXMuICBSZWdpc3RlciB0aGF0IGFuIG9iamVjdCBoYXMgYSByZW9yZGVyCisgICBmdW5jdGlvbi4gICovCitleHRlcm4gdm9pZCBndF9wY2hfbm90ZV9yZW9yZGVyICh2b2lkICosIHZvaWQgKiwgZ3RfaGFuZGxlX3Jlb3JkZXIpOworCisvKiBNYXJrIHRoZSBvYmplY3QgaW4gdGhlIGZpcnN0IHBhcmFtZXRlciBhbmQgYW55dGhpbmcgaXQgcG9pbnRzIHRvLiAgKi8KK3R5cGVkZWYgdm9pZCAoKmd0X3BvaW50ZXJfd2Fsa2VyKSAodm9pZCAqKTsKKworLyogU3RydWN0dXJlcyBmb3IgdGhlIGVhc3kgd2F5IHRvIG1hcmsgcm9vdHMuCisgICBJbiBhbiBhcnJheSwgdGVybWluYXRlZCBieSBoYXZpbmcgYmFzZSA9PSBOVUxMLiAgKi8KK3N0cnVjdCBnZ2Nfcm9vdF90YWIgeworICB2b2lkICpiYXNlOworICBzaXplX3QgbmVsdDsKKyAgc2l6ZV90IHN0cmlkZTsKKyAgZ3RfcG9pbnRlcl93YWxrZXIgY2I7CisgIGd0X3BvaW50ZXJfd2Fsa2VyIHBjaHc7Cit9OworI2RlZmluZSBMQVNUX0dHQ19ST09UX1RBQiB7IE5VTEwsIDAsIDAsIE5VTEwsIE5VTEwgfQorLyogUG9pbnRlcnMgdG8gYXJyYXlzIG9mIGdnY19yb290X3RhYiwgdGVybWluYXRlZCBieSBOVUxMLiAgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgZ2djX3Jvb3RfdGFiICogY29uc3QgZ3RfZ2djX3J0YWJbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZ2djX3Jvb3RfdGFiICogY29uc3QgZ3RfZ2djX2RlbGV0YWJsZV9ydGFiW107CitleHRlcm4gY29uc3Qgc3RydWN0IGdnY19yb290X3RhYiAqIGNvbnN0IGd0X3BjaF9jYWNoZV9ydGFiW107CitleHRlcm4gY29uc3Qgc3RydWN0IGdnY19yb290X3RhYiAqIGNvbnN0IGd0X3BjaF9zY2FsYXJfcnRhYltdOworCisvKiBTdHJ1Y3R1cmUgZm9yIGhhc2ggdGFibGUgY2FjaGUgbWFya2luZy4gICovCitzdHJ1Y3QgaHRhYjsKK3N0cnVjdCBnZ2NfY2FjaGVfdGFiIHsKKyAgc3RydWN0IGh0YWIgKiAqYmFzZTsKKyAgc2l6ZV90IG5lbHQ7CisgIHNpemVfdCBzdHJpZGU7CisgIGd0X3BvaW50ZXJfd2Fsa2VyIGNiOworICBndF9wb2ludGVyX3dhbGtlciBwY2h3OworICBpbnQgKCptYXJrZWRfcCkgKGNvbnN0IHZvaWQgKik7Cit9OworI2RlZmluZSBMQVNUX0dHQ19DQUNIRV9UQUIgeyBOVUxMLCAwLCAwLCBOVUxMLCBOVUxMLCBOVUxMIH0KKy8qIFBvaW50ZXJzIHRvIGFycmF5cyBvZiBnZ2NfY2FjaGVfdGFiLCB0ZXJtaW5hdGVkIGJ5IE5VTEwuICAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBnZ2NfY2FjaGVfdGFiICogY29uc3QgZ3RfZ2djX2NhY2hlX3J0YWJbXTsKKworLyogSWYgRVhQUiBpcyBub3QgTlVMTCBhbmQgcHJldmlvdXNseSB1bm1hcmtlZCwgbWFyayBpdCBhbmQgZXZhbHVhdGUKKyAgIHRvIHRydWUuICBPdGhlcndpc2UgZXZhbHVhdGUgdG8gZmFsc2UuICAqLworI2RlZmluZSBnZ2NfdGVzdF9hbmRfc2V0X21hcmsoRVhQUikgXAorICAoKEVYUFIpICE9IE5VTEwgJiYgKCh2b2lkICopIChFWFBSKSkgIT0gKHZvaWQgKikgMSAmJiAhIGdnY19zZXRfbWFyayAoRVhQUikpCisKKyNkZWZpbmUgZ2djX21hcmsoRVhQUikJCQkJXAorICBkbyB7CQkJCQkJXAorICAgIGNvbnN0IHZvaWQgKmNvbnN0IGFfXyA9IChFWFBSKTsJCVwKKyAgICBpZiAoYV9fICE9IE5VTEwgJiYgYV9fICE9ICh2b2lkICopIDEpCVwKKyAgICAgIGdnY19zZXRfbWFyayAoYV9fKTsJCQlcCisgIH0gd2hpbGUgKDApCisKKy8qIEFjdHVhbGx5IHNldCB0aGUgbWFyayBvbiBhIHBhcnRpY3VsYXIgcmVnaW9uIG9mIG1lbW9yeSwgYnV0IGRvbid0CisgICBmb2xsb3cgcG9pbnRlcnMuICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBnZ2NfbWFya18qLiAgSXQKKyAgIHJldHVybnMgemVybyBpZiB0aGUgb2JqZWN0IHdhcyBub3QgcHJldmlvdXNseSBtYXJrZWQ7IG5vbnplcm8gaWYKKyAgIHRoZSBvYmplY3Qgd2FzIGFscmVhZHkgbWFya2VkLCBvciBpZiwgZm9yIGFueSBvdGhlciByZWFzb24sCisgICBwb2ludGVycyBpbiB0aGlzIGRhdGEgc3RydWN0dXJlIHNob3VsZCBub3QgYmUgdHJhdmVyc2VkLiAgKi8KK2V4dGVybiBpbnQgZ2djX3NldF9tYXJrCShjb25zdCB2b2lkICopOworCisvKiBSZXR1cm4gMSBpZiBQIGhhcyBiZWVuIG1hcmtlZCwgemVybyBvdGhlcndpc2UuCisgICBQIG11c3QgaGF2ZSBiZWVuIGFsbG9jYXRlZCBieSB0aGUgR0MgYWxsb2NhdG9yOyBpdCBtdXN0bid0IHBvaW50IHRvCisgICBzdGF0aWMgb2JqZWN0cywgc3RhY2sgdmFyaWFibGVzLCBvciBtZW1vcnkgYWxsb2NhdGVkIHdpdGggbWFsbG9jLiAgKi8KK2V4dGVybiBpbnQgZ2djX21hcmtlZF9wCShjb25zdCB2b2lkICopOworCisvKiBNYXJrIHRoZSBlbnRyaWVzIGluIHRoZSBzdHJpbmcgcG9vbC4gICovCitleHRlcm4gdm9pZCBnZ2NfbWFya19zdHJpbmdwb29sCSh2b2lkKTsKKworLyogUHVyZ2UgdGhlIGVudHJpZXMgaW4gdGhlIHN0cmluZyBwb29sLiAgKi8KK2V4dGVybiB2b2lkIGdnY19wdXJnZV9zdHJpbmdwb29sICh2b2lkKTsKKworLyogQ2FsbCBnZ2Nfc2V0X21hcmsgb24gYWxsIHRoZSByb290cy4gICovCisKK2V4dGVybiB2b2lkIGdnY19tYXJrX3Jvb3RzICh2b2lkKTsKKworLyogU2F2ZSBhbmQgcmVzdG9yZSB0aGUgc3RyaW5nIHBvb2wgZW50cmllcyBmb3IgUENILiAgKi8KKworZXh0ZXJuIHZvaWQgZ3RfcGNoX3NhdmVfc3RyaW5ncG9vbCAodm9pZCk7CitleHRlcm4gdm9pZCBndF9wY2hfZml4dXBfc3RyaW5ncG9vbCAodm9pZCk7CitleHRlcm4gdm9pZCBndF9wY2hfcmVzdG9yZV9zdHJpbmdwb29sICh2b2lkKTsKKworLyogUENIIGFuZCBHR0MgaGFuZGxpbmcgZm9yIHN0cmluZ3MsIG1vc3RseSB0cml2aWFsLiAgKi8KKworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUyAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9TIChjb25zdCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUyAoY29uc3Qgdm9pZCAqKTsKKworLyogSW5pdGlhbGl6ZSB0aGUgc3RyaW5nIHBvb2wuICAqLworZXh0ZXJuIHZvaWQgaW5pdF9zdHJpbmdwb29sICh2b2lkKTsKKworLyogQSBHQyBpbXBsZW1lbnRhdGlvbiBtdXN0IHByb3ZpZGUgdGhlc2UgZnVuY3Rpb25zLiAgVGhleSBhcmUgaW50ZXJuYWwKKyAgIHRvIHRoZSBHQyBzeXN0ZW0uICAqLworCisvKiBGb3J3YXJkIGRlY2xhcmUgdGhlIHpvbmUgc3RydWN0dXJlLiAgT25seSBnZ2Nfem9uZSBpbXBsZW1lbnRzIHRoaXMuICAqLworc3RydWN0IGFsbG9jX3pvbmU7CisKKy8qIEluaXRpYWxpemUgdGhlIGdhcmJhZ2UgY29sbGVjdG9yLiAgKi8KK2V4dGVybiB2b2lkIGluaXRfZ2djICh2b2lkKTsKKworLyogU3RhcnQgYSBuZXcgR0dDIHpvbmUuICAqLworZXh0ZXJuIHN0cnVjdCBhbGxvY196b25lICpuZXdfZ2djX3pvbmUgKGNvbnN0IGNoYXIgKik7CisKKy8qIEZyZWUgYSBjb21wbGV0ZSBHR0Mgem9uZSwgZGVzdHJveWluZyBldmVyeXRoaW5nIGluIGl0LiAgKi8KK2V4dGVybiB2b2lkIGRlc3Ryb3lfZ2djX3pvbmUgKHN0cnVjdCBhbGxvY196b25lICopOworCitzdHJ1Y3QgZ2djX3BjaF9kYXRhOworCisvKiBSZXR1cm4gYSBuZXcgZ2djX3BjaF9kYXRhIHN0cnVjdHVyZS4gICovCitleHRlcm4gc3RydWN0IGdnY19wY2hfZGF0YSAqaW5pdF9nZ2NfcGNoICh2b2lkKTsKKworLyogVGhlIHNlY29uZCBwYXJhbWV0ZXIgYW5kIHRoaXJkIHBhcmFtZXRlcnMgZ2l2ZSB0aGUgYWRkcmVzcyBhbmQgc2l6ZQorICAgb2YgYW4gb2JqZWN0LiAgVXBkYXRlIHRoZSBnZ2NfcGNoX2RhdGEgc3RydWN0dXJlIHdpdGggYXMgbXVjaCBvZgorICAgdGhhdCBpbmZvcm1hdGlvbiBhcyBpcyBuZWNlc3NhcnkuIFRoZSBib29sIGFyZ3VtZW50IHNob3VsZCBiZSB0cnVlCisgICBpZiB0aGUgb2JqZWN0IGlzIGEgc3RyaW5nLiAgKi8KK2V4dGVybiB2b2lkIGdnY19wY2hfY291bnRfb2JqZWN0IChzdHJ1Y3QgZ2djX3BjaF9kYXRhICosIHZvaWQgKiwgc2l6ZV90LCBib29sLAorCQkJCSAgZW51bSBndF90eXBlc19lbnVtKTsKKworLyogUmV0dXJuIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4gdG8gaG9sZCBhbGwKKyAgIHRoZSBvYmplY3RzIHByZXZpb3VzbHkgcGFzc2VkIHRvIGdnY19wY2hfY291bnRfb2JqZWN0LiAgKi8KK2V4dGVybiBzaXplX3QgZ2djX3BjaF90b3RhbF9zaXplIChzdHJ1Y3QgZ2djX3BjaF9kYXRhICopOworCisvKiBUaGUgb2JqZWN0cywgd2hlbiByZWFkLCB3aWxsIG1vc3QgbGlrZWx5IGJlIGF0IHRoZSBhZGRyZXNzCisgICBpbiB0aGUgc2Vjb25kIHBhcmFtZXRlci4gICovCitleHRlcm4gdm9pZCBnZ2NfcGNoX3RoaXNfYmFzZSAoc3RydWN0IGdnY19wY2hfZGF0YSAqLCB2b2lkICopOworCisvKiBBc3N1bWluZyB0aGF0IHRoZSBvYmplY3RzIHJlYWxseSBkbyBlbmQgdXAgYXQgdGhlIGFkZHJlc3MKKyAgIHBhc3NlZCB0byBnZ2NfcGNoX3RoaXNfYmFzZSwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoaXMgb2JqZWN0LgorICAgVGhlIGJvb2wgYXJndW1lbnQgc2hvdWxkIGJlIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhIHN0cmluZy4gICovCitleHRlcm4gY2hhciAqZ2djX3BjaF9hbGxvY19vYmplY3QgKHN0cnVjdCBnZ2NfcGNoX2RhdGEgKiwgdm9pZCAqLCBzaXplX3QsIGJvb2wsCisJCQkJICAgZW51bSBndF90eXBlc19lbnVtKTsKKworLyogV3JpdGUgb3V0IGFueSBpbml0aWFsIGluZm9ybWF0aW9uIHJlcXVpcmVkLiAgKi8KK2V4dGVybiB2b2lkIGdnY19wY2hfcHJlcGFyZV93cml0ZSAoc3RydWN0IGdnY19wY2hfZGF0YSAqLCBGSUxFICopOworLyogV3JpdGUgb3V0IHRoaXMgb2JqZWN0LCBpbmNsdWRpbmcgYW55IHBhZGRpbmcuICBUaGUgbGFzdCBhcmd1bWVudCBzaG91bGQgYmUKKyAgIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhIHN0cmluZy4gICovCitleHRlcm4gdm9pZCBnZ2NfcGNoX3dyaXRlX29iamVjdCAoc3RydWN0IGdnY19wY2hfZGF0YSAqLCBGSUxFICosIHZvaWQgKiwKKwkJCQkgIHZvaWQgKiwgc2l6ZV90LCBib29sKTsKKy8qIEFsbCBvYmplY3RzIGhhdmUgYmVlbiB3cml0dGVuLCB3cml0ZSBvdXQgYW55IGZpbmFsIGluZm9ybWF0aW9uCisgICByZXF1aXJlZC4gICovCitleHRlcm4gdm9pZCBnZ2NfcGNoX2ZpbmlzaCAoc3RydWN0IGdnY19wY2hfZGF0YSAqLCBGSUxFICopOworCisvKiBBIFBDSCBmaWxlIGhhcyBqdXN0IGJlZW4gcmVhZCBpbiBhdCB0aGUgYWRkcmVzcyBzcGVjaWZpZWQgc2Vjb25kCisgICBwYXJhbWV0ZXIuICBTZXQgdXAgdGhlIEdDIGltcGxlbWVudGF0aW9uIGZvciB0aGUgbmV3IG9iamVjdHMuICAqLworZXh0ZXJuIHZvaWQgZ2djX3BjaF9yZWFkIChGSUxFICosIHZvaWQgKik7CisKKwwKKy8qIEFsbG9jYXRpb24uICAqLworCisvKiBXaGVuIHNldCwgZ2djX2NvbGxlY3Qgd2lsbCBkbyBjb2xsZWN0aW9uLiAgKi8KK2V4dGVybiBib29sIGdnY19mb3JjZV9jb2xsZWN0OworCisvKiBXaGVuIHRydWUsIGlkZW50aWZpZXIgbm9kZXMgYXJlIGNvbnNpZGVyZWQgYXMgR0Mgcm9vdHMuICBXaGVuCisgICBmYWxzZSwgaWRlbnRpZmllciBub2RlcyBhcmUgdHJlYXRlZCBsaWtlIGFueSBvdGhlciBHQy1hbGxvY2F0ZWQKKyAgIG9iamVjdCwgYW5kIHRoZSBpZGVudGlmaWVyIGhhc2ggdGFibGUgaXMgdHJlYXRlZCBhcyBhIHdlYWsKKyAgIGhhc2guICAqLworZXh0ZXJuIGJvb2wgZ2djX3Byb3RlY3RfaWRlbnRpZmllcnM7CisKKy8qIFRoZSBpbnRlcm5hbCBwcmltaXRpdmUuICAqLworZXh0ZXJuIHZvaWQgKmdnY19hbGxvY19zdGF0IChzaXplX3QgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGdnY19hbGxvYyhzKSBnZ2NfYWxsb2Nfc3RhdCAocyBNRU1fU1RBVF9JTkZPKQorLyogQWxsb2NhdGUgYW4gb2JqZWN0IG9mIHRoZSBzcGVjaWZpZWQgdHlwZSBhbmQgc2l6ZS4gICovCitleHRlcm4gdm9pZCAqZ2djX2FsbG9jX3R5cGVkX3N0YXQgKGVudW0gZ3RfdHlwZXNfZW51bSwgc2l6ZV90IE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBnZ2NfYWxsb2NfdHlwZWQocyx6KSBnZ2NfYWxsb2NfdHlwZWRfc3RhdCAocyx6IE1FTV9TVEFUX0lORk8pCisvKiBMaWtlIGdnY19hbGxvYywgYnV0IGFsbG9jYXRlcyBjbGVhcmVkIG1lbW9yeS4gICovCitleHRlcm4gdm9pZCAqZ2djX2FsbG9jX2NsZWFyZWRfc3RhdCAoc2l6ZV90IE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZChzKSBnZ2NfYWxsb2NfY2xlYXJlZF9zdGF0IChzIE1FTV9TVEFUX0lORk8pCisvKiBSZXNpemUgYSBibG9jay4gICovCitleHRlcm4gdm9pZCAqZ2djX3JlYWxsb2Nfc3RhdCAodm9pZCAqLCBzaXplX3QgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGdnY19yZWFsbG9jKHMseikgZ2djX3JlYWxsb2Nfc3RhdCAocyx6IE1FTV9TVEFUX0lORk8pCisvKiBMaWtlIGdnY19hbGxvY19jbGVhcmVkLCBidXQgcGVyZm9ybXMgYSBtdWx0aXBsaWNhdGlvbi4gICovCitleHRlcm4gdm9pZCAqZ2djX2NhbGxvYyAoc2l6ZV90LCBzaXplX3QpOworLyogRnJlZSBhIGJsb2NrLiAgVG8gYmUgdXNlZCB3aGVuIGtub3duIGZvciBjZXJ0YWluIGl0J3Mgbm90IHJlYWNoYWJsZS4gICovCitleHRlcm4gdm9pZCBnZ2NfZnJlZSAodm9pZCAqKTsKKworZXh0ZXJuIHZvaWQgZ2djX3JlY29yZF9vdmVyaGVhZCAoc2l6ZV90LCBzaXplX3QsIHZvaWQgKiBNRU1fU1RBVF9ERUNMKTsKK2V4dGVybiB2b2lkIGdnY19mcmVlX292ZXJoZWFkICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ2djX3BydW5lX292ZXJoZWFkX2xpc3QgKHZvaWQpOworCitleHRlcm4gdm9pZCBkdW1wX2dnY19sb2Nfc3RhdGlzdGljcyAoYm9vbCk7CisKKy8qIFR5cGUtc2FmZSwgQysrLWZyaWVuZGx5IHZlcnNpb25zIG9mIGdnY19hbGxvYygpIGFuZCBnY2NfY2FsbG9jKCkuICAqLworI2RlZmluZSBHR0NfTkVXKFQpCQkoKFQgKikgZ2djX2FsbG9jIChzaXplb2YgKFQpKSkKKyNkZWZpbmUgR0dDX0NORVcoVCkJCSgoVCAqKSBnZ2NfYWxsb2NfY2xlYXJlZCAoc2l6ZW9mIChUKSkpCisjZGVmaW5lIEdHQ19ORVdWRUMoVCwgTikJKChUICopIGdnY19hbGxvYyAoKE4pICogc2l6ZW9mKFQpKSkKKyNkZWZpbmUgR0dDX0NORVdWRUMoVCwgTikJKChUICopIGdnY19hbGxvY19jbGVhcmVkICgoTikgKiBzaXplb2YoVCkpKQorI2RlZmluZSBHR0NfUkVTSVpFVkVDKFQsIFAsIE4pICAoKFQgKikgZ2djX3JlYWxsb2MgKChQKSwgKE4pICogc2l6ZW9mIChUKSkpCisjZGVmaW5lIEdHQ19ORVdWQVIoVCwgUykJKChUICopIGdnY19hbGxvYyAoKFMpKSkKKyNkZWZpbmUgR0dDX0NORVdWQVIoVCwgUykJKChUICopIGdnY19hbGxvY19jbGVhcmVkICgoUykpKQorI2RlZmluZSBHR0NfUkVTSVpFVkFSKFQsIFAsIE4pICAoKFQgKikgZ2djX3JlYWxsb2MgKChQKSwgKE4pKSkKKworI2RlZmluZSBnZ2NfYWxsb2NfcnR2ZWMoTkVMVCkJCQkJCQkgXAorICAoKHJ0dmVjKSBnZ2NfYWxsb2Nfem9uZSAoc2l6ZW9mIChzdHJ1Y3QgcnR2ZWNfZGVmKSArICgoTkVMVCkgLSAxKQkgXAorCQkJICAgKiBzaXplb2YgKHJ0eCksICZydGxfem9uZSkpCisKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWUoTEVOR1RIKSAoKHRyZWUpIGdnY19hbGxvY196b25lIChMRU5HVEgsICZ0cmVlX3pvbmUpKQorCisjZGVmaW5lIGh0YWJfY3JlYXRlX2dnYyhTSVpFLCBIQVNILCBFUSwgREVMKSBcCisgIGh0YWJfY3JlYXRlX2FsbG9jIChTSVpFLCBIQVNILCBFUSwgREVMLCBnZ2NfY2FsbG9jLCBnZ2NfZnJlZSkKKworI2RlZmluZSBzcGxheV90cmVlX25ld19nZ2MoQ09NUEFSRSkJCQkJCSBcCisgIHNwbGF5X3RyZWVfbmV3X3dpdGhfYWxsb2NhdG9yIChDT01QQVJFLCBOVUxMLCBOVUxMLAkJCSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2djX3NwbGF5X2FsbG9jLCAmZ2djX3NwbGF5X2RvbnRfZnJlZSwgXAorCQkJCSBOVUxMKQorZXh0ZXJuIHZvaWQgKmdnY19zcGxheV9hbGxvYyAoaW50LCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ2djX3NwbGF5X2RvbnRfZnJlZSAodm9pZCAqLCB2b2lkICopOworCisvKiBBbGxvY2F0ZSBhIGdjLWFibGUgc3RyaW5nLCBhbmQgZmlsbCBpdCB3aXRoIExFTkdUSCBieXRlcyBmcm9tIENPTlRFTlRTLgorICAgSWYgTEVOR1RIIGlzIC0xLCB0aGVuIENPTlRFTlRTIGlzIGFzc3VtZWQgdG8gYmUgYQorICAgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBhbmQgdGhlIG1lbW9yeSBzaXplZCBhY2NvcmRpbmdseS4gICovCitleHRlcm4gY29uc3QgY2hhciAqZ2djX2FsbG9jX3N0cmluZyAoY29uc3QgY2hhciAqY29udGVudHMsIGludCBsZW5ndGgpOworCisvKiBNYWtlIGEgY29weSBvZiBTLCBpbiBHQy1hYmxlIG1lbW9yeS4gICovCisjZGVmaW5lIGdnY19zdHJkdXAoUykgZ2djX2FsbG9jX3N0cmluZygoUyksIC0xKQorCisvKiBJbnZva2UgdGhlIGNvbGxlY3Rvci4gIEdhcmJhZ2UgY29sbGVjdGlvbiBvY2N1cnMgb25seSB3aGVuIHRoaXMKKyAgIGZ1bmN0aW9uIGlzIGNhbGxlZCwgbm90IGR1cmluZyBhbGxvY2F0aW9ucy4gICovCitleHRlcm4gdm9pZCBnZ2NfY29sbGVjdAkodm9pZCk7CisKKy8qIFJlZ2lzdGVyIGFuIGFkZGl0aW9uYWwgcm9vdCB0YWJsZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3Igc29tZQorICAgcGx1Z2lucy4gIERvZXMgbm90aGluZyBpZiB0aGUgcGFzc2VkIHBvaW50ZXIgaXMgTlVMTC4gKi8KK2V4dGVybiB2b2lkIGdnY19yZWdpc3Rlcl9yb290X3RhYiAoY29uc3Qgc3RydWN0IGdnY19yb290X3RhYiAqKTsKKworLyogUmVnaXN0ZXIgYW4gYWRkaXRpb25hbCBjYWNoZSB0YWJsZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3Igc29tZQorICAgcGx1Z2lucy4gIERvZXMgbm90aGluZyBpZiB0aGUgcGFzc2VkIHBvaW50ZXIgaXMgTlVMTC4gKi8KK2V4dGVybiB2b2lkIGdnY19yZWdpc3Rlcl9jYWNoZV90YWIgKGNvbnN0IHN0cnVjdCBnZ2NfY2FjaGVfdGFiICopOworCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgYXQgdGhlIGluZGljYXRlZCBhZGRyZXNzLiAgKi8KK2V4dGVybiBzaXplX3QgZ2djX2dldF9zaXplIChjb25zdCB2b2lkICopOworCisvKiBXcml0ZSBvdXQgYWxsIEdDZWQgb2JqZWN0cyB0byBGLiAgKi8KK2V4dGVybiB2b2lkIGd0X3BjaF9zYXZlIChGSUxFICpmKTsKKworLyogUmVhZCBvYmplY3RzIHByZXZpb3VzbHkgc2F2ZWQgd2l0aCBndF9wY2hfc2F2ZSBmcm9tIEYuICAqLworZXh0ZXJuIHZvaWQgZ3RfcGNoX3Jlc3RvcmUgKEZJTEUgKmYpOworDAorLyogU3RhdGlzdGljcy4gICovCisKKy8qIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSBzdGF0aXN0aWNzIGNvbW1vbiB0byBhbGwgY29sbGVjdG9ycy4KKyAgIFBhcnRpY3VsYXIgY29sbGVjdG9ycyBjYW4gZXh0ZW5kIHRoaXMgc3RydWN0dXJlLiAgKi8KK3R5cGVkZWYgc3RydWN0IGdnY19zdGF0aXN0aWNzCit7CisgIC8qIEF0IHByZXNlbnQsIHdlIGRvbid0IHJlYWxseSBnYXRoZXIgYW55IGludGVyZXN0aW5nIHN0YXRpc3RpY3MuICAqLworICBpbnQgdW51c2VkOworfSBnZ2Nfc3RhdGlzdGljczsKKworLyogVXNlZCBieSB0aGUgdmFyaW91cyBjb2xsZWN0b3JzIHRvIGdhdGhlciBhbmQgcHJpbnQgc3RhdGlzdGljcyB0aGF0CisgICBkbyBub3QgZGVwZW5kIG9uIHRoZSBjb2xsZWN0b3IgaW4gdXNlLiAgKi8KK2V4dGVybiB2b2lkIGdnY19wcmludF9jb21tb25fc3RhdGlzdGljcyAoRklMRSAqLCBnZ2Nfc3RhdGlzdGljcyAqKTsKKworLyogUHJpbnQgYWxsb2NhdGlvbiBzdGF0aXN0aWNzLiAgKi8KK2V4dGVybiB2b2lkIGdnY19wcmludF9zdGF0aXN0aWNzICh2b2lkKTsKK2V4dGVybiB2b2lkIHN0cmluZ3Bvb2xfc3RhdGlzdGljcyAodm9pZCk7CisKKy8qIEhldXJpc3RpY3MuICAqLworZXh0ZXJuIGludCBnZ2NfbWluX2V4cGFuZF9oZXVyaXN0aWMgKHZvaWQpOworZXh0ZXJuIGludCBnZ2NfbWluX2hlYXBzaXplX2hldXJpc3RpYyAodm9pZCk7CitleHRlcm4gdm9pZCBpbml0X2dnY19oZXVyaXN0aWNzICh2b2lkKTsKKworLyogWm9uZSBjb2xsZWN0aW9uLiAgKi8KKyNpZiBkZWZpbmVkIChHR0NfWk9ORSkgJiYgIWRlZmluZWQgKEdFTkVSQVRPUl9GSUxFKQorCisvKiBGb3IgcmVndWxhciBydGwgYWxsb2NhdGlvbnMuICAqLworZXh0ZXJuIHN0cnVjdCBhbGxvY196b25lIHJ0bF96b25lOworLyogRm9yIHJlZ3VsYXIgdHJlZSBhbGxvY2F0aW9ucy4gICovCitleHRlcm4gc3RydWN0IGFsbG9jX3pvbmUgdHJlZV96b25lOworLyogRm9yIElERU5USUZJRVJfTk9ERSBhbGxvY2F0aW9ucy4gICovCitleHRlcm4gc3RydWN0IGFsbG9jX3pvbmUgdHJlZV9pZF96b25lOworCisvKiBBbGxvY2F0ZSBhbiBvYmplY3QgaW50byB0aGUgc3BlY2lmaWVkIGFsbG9jYXRpb24gem9uZS4gICovCitleHRlcm4gdm9pZCAqZ2djX2FsbG9jX3pvbmVfc3RhdCAoc2l6ZV90LCBzdHJ1Y3QgYWxsb2Nfem9uZSAqIE1FTV9TVEFUX0RFQ0wpOworIyBkZWZpbmUgZ2djX2FsbG9jX3pvbmUocyx6KSBnZ2NfYWxsb2Nfem9uZV9zdGF0IChzLHogTUVNX1NUQVRfSU5GTykKKyMgZGVmaW5lIGdnY19hbGxvY196b25lX3Bhc3Nfc3RhdChzLHopIGdnY19hbGxvY196b25lX3N0YXQgKHMseiBQQVNTX01FTV9TVEFUKQorI2Vsc2UKKworIyBkZWZpbmUgZ2djX2FsbG9jX3pvbmUocywgeikgZ2djX2FsbG9jIChzKQorIyBkZWZpbmUgZ2djX2FsbG9jX3pvbmVfcGFzc19zdGF0KHMsIHopIGdnY19hbGxvY19zdGF0IChzIFBBU1NfTUVNX1NUQVQpCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9naW1wbGUuZGVmIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2dpbXBsZS5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ExNTAzYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9naW1wbGUuZGVmCkBAIC0wLDAgKzEsMzUwIEBACisvKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIG9mIHRoZSBHSU1QTEUgSVIgdHVwbGVzIHVzZWQgaW4gR0NDLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBBbGR5IEhlcm5hbmRleiA8YWxkeWhAcmVkaGF0LmNvbT4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFRoZSBmb3JtYXQgb2YgdGhpcyBmaWxlIGlzCisgICBERUZHU0NPREUoR0lNUExFX3N5bWJvbCwgcHJpbnRhYmxlIG5hbWUsIEdTU19zeW1ib2wpLiAgKi8KKworCisvKiBFcnJvciBtYXJrZXIuICBUaGlzIGlzIHVzZWQgaW4gc2ltaWxhciB3YXlzIGFzIEVSUk9SX01BUksgaW4gdHJlZS5kZWYuICAqLworREVGR1NDT0RFKEdJTVBMRV9FUlJPUl9NQVJLLCAiZ2ltcGxlX2Vycm9yX21hcmsiLCBHU1NfQkFTRSkKKworLyogSU1QT1JUQU5ULiAgRG8gbm90IHJlYXJyYW5nZSB0aGUgY29kZXMgYmV0d2VlbiBHSU1QTEVfQ09ORCBhbmQKKyAgIEdJTVBMRV9SRVRVUk4uICBUaGUgb3JkZXJpbmcgaXMgZXhwb3NlZCBieSBnaW1wbGVfaGFzX29wcyBjYWxscy4KKyAgIFRoZXNlIGFyZSBhbGwgdGhlIEdJTVBMRSBzdGF0ZW1lbnRzIHdpdGggcmVnaXN0ZXIgb3BlcmFuZHMuICAqLworCisvKiBHSU1QTEVfQ09ORCA8Q09ORF9DT0RFLCBPUDEsIE9QMiwgVFJVRV9MQUJFTCwgRkFMU0VfTEFCRUw+CisgICByZXByZXNlbnRzIHRoZSBjb25kaXRpb25hbCBqdW1wOgorCisgICBpZiAoT1AxIENPTkRfQ09ERSBPUDIpIGdvdG8gVFJVRV9MQUJFTCBlbHNlIGdvdG8gRkFMU0VfTEFCRUwKKworICAgQ09ORF9DT0RFIGlzIHRoZSB0cmVlIGNvZGUgdXNlZCBhcyB0aGUgY29tcGFyaXNvbiBwcmVkaWNhdGUuICBJdAorICAgbXVzdCBiZSBvZiBjbGFzcyB0Y2NfY29tcGFyaXNvbi4KKworICAgT1AxIGFuZCBPUDIgYXJlIHRoZSBvcGVyYW5kcyB1c2VkIGluIHRoZSBjb21wYXJpc29uLiAgVGhleSBtdXN0IGJlCisgICBhY2NlcHRlZCBieSBpc19naW1wbGVfb3BlcmFuZC4KKworICAgVFJVRV9MQUJFTCBhbmQgRkFMU0VfTEFCRUwgYXJlIHRoZSBMQUJFTF9ERUNMIG5vZGVzIHVzZWQgYXMgdGhlCisgICBqdW1wIHRhcmdldCBmb3IgdGhlIGNvbXBhcmlzb24uICAqLworREVGR1NDT0RFKEdJTVBMRV9DT05ELCAiZ2ltcGxlX2NvbmQiLCBHU1NfV0lUSF9PUFMpCisKKy8qIEdJTVBMRV9ERUJVRyByZXByZXNlbnRzIGEgZGVidWcgc3RhdGVtZW50LiAgKi8KK0RFRkdTQ09ERShHSU1QTEVfREVCVUcsICJnaW1wbGVfZGVidWciLCBHU1NfV0lUSF9PUFMpCisKKy8qIEdJTVBMRV9HT1RPIDxUQVJHRVQ+IHJlcHJlc2VudHMgdW5jb25kaXRpb25hbCBqdW1wcy4KKyAgIFRBUkdFVCBpcyBhIExBQkVMX0RFQ0wgb3IgYW4gZXhwcmVzc2lvbiBub2RlIGZvciBjb21wdXRlZCBHT1RPcy4gICovCitERUZHU0NPREUoR0lNUExFX0dPVE8sICJnaW1wbGVfZ290byIsIEdTU19XSVRIX09QUykKKworLyogR0lNUExFX0xBQkVMIDxMQUJFTD4gcmVwcmVzZW50cyBsYWJlbCBzdGF0ZW1lbnRzLiAgTEFCRUwgaXMgYQorICAgTEFCRUxfREVDTCByZXByZXNlbnRpbmcgYSBqdW1wIHRhcmdldC4gICovCitERUZHU0NPREUoR0lNUExFX0xBQkVMLCAiZ2ltcGxlX2xhYmVsIiwgR1NTX1dJVEhfT1BTKQorCisvKiBHSU1QTEVfU1dJVENIIDxJTkRFWCwgREVGQVVMVF9MQUIsIExBQjEsIC4uLiwgTEFCTj4gcmVwcmVzZW50cyB0aGUKKyAgIG11bHRpd2F5IGJyYW5jaDoKKworICAgc3dpdGNoIChJTkRFWCkKKyAgIHsKKyAgICAgY2FzZSBMQUIxOiAuLi47IGJyZWFrOworICAgICAuLi4KKyAgICAgY2FzZSBMQUJOOiAuLi47IGJyZWFrOworICAgICBkZWZhdWx0OiAuLi4KKyAgIH0KKworICAgSU5ERVggaXMgdGhlIHZhcmlhYmxlIGV2YWx1YXRlZCB0byBkZWNpZGUgd2hpY2ggbGFiZWwgdG8ganVtcCB0by4KKworICAgREVGQVVMVF9MQUIsIExBQjEgLi4uIExBQk4gYXJlIHRoZSB0cmVlIG5vZGVzIHJlcHJlc2VudGluZyBjYXNlIGxhYmVscy4KKyAgIFRoZXkgbXVzdCBiZSBDQVNFX0xBQkVMX0VYUFIgbm9kZXMuICAqLworREVGR1NDT0RFKEdJTVBMRV9TV0lUQ0gsICJnaW1wbGVfc3dpdGNoIiwgR1NTX1dJVEhfT1BTKQorCisvKiBJTVBPUlRBTlQuCisKKyAgIERvIG5vdCByZWFycmFuZ2UgdGhlIGNvZGVzIGJldHdlZW4gR0lNUExFX0FTU0lHTiBhbmQgR0lNUExFX1JFVFVSTi4KKyAgIEl0J3MgZXhwb3NlZCBieSBHSU1QTEVfUkFOR0VfQ0hFQ0sgY2FsbHMuIFRoZXNlIGFyZSBhbGwgdGhlIEdJTVBMRQorICAgc3RhdGVtZW50cyB3aXRoIG1lbW9yeSBhbmQgcmVnaXN0ZXIgb3BlcmFuZHMuICAqLworCisvKiBHSU1QTEVfQVNTSUdOIDxTVUJDT0RFLCBMSFMsIFJIUzFbLCBSSFMyXT4gcmVwcmVzZW50cyB0aGUgYXNzaWdubWVudAorICAgc3RhdGVtZW50CisKKyAgIExIUyA9IFJIUzEgU1VCQ09ERSBSSFMyLgorCisgICBTVUJDT0RFIGlzIHRoZSB0cmVlIGNvZGUgZm9yIHRoZSBleHByZXNzaW9uIGNvbXB1dGVkIGJ5IHRoZSBSSFMgb2YgdGhlCisgICBhc3NpZ25tZW50LiAgSXQgbXVzdCBiZSBvbmUgb2YgdGhlIHRyZWUgY29kZXMgYWNjZXB0ZWQgYnkKKyAgIGdldF9naW1wbGVfcmhzX2NsYXNzLiAgSWYgTEhTIGlzIG5vdCBhIGdpbXBsZSByZWdpc3RlciBhY2NvcmRpbmcgdG8KKyAgIGlzX2dpbXBsZV9yZWcsIFNVQkNPREUgbXVzdCBiZSBvZiBjbGFzcyBHSU1QTEVfU0lOR0xFX1JIUy4KKworICAgTEhTIGlzIHRoZSBvcGVyYW5kIG9uIHRoZSBMSFMgb2YgdGhlIGFzc2lnbm1lbnQuICBJdCBtdXN0IGJlIGEgdHJlZSBub2RlCisgICBhY2NlcHRlZCBieSBpc19naW1wbGVfbHZhbHVlLgorCisgICBSSFMxIGlzIHRoZSBmaXJzdCBvcGVyYW5kIG9uIHRoZSBSSFMgb2YgdGhlIGFzc2lnbm1lbnQuICBJdCBtdXN0IGFsd2F5cyBiZQorICAgcHJlc2VudC4gIEl0IG11c3QgYmUgYSB0cmVlIG5vZGUgYWNjZXB0ZWQgYnkgaXNfZ2ltcGxlX3ZhbC4KKworICAgUkhTMiBpcyB0aGUgc2Vjb25kIG9wZXJhbmQgb24gdGhlIFJIUyBvZiB0aGUgYXNzaWdubWVudC4gIEl0IG11c3QgYmUgYSB0cmVlCisgICBub2RlIGFjY2VwdGVkIGJ5IGlzX2dpbXBsZV92YWwuICBUaGlzIGFyZ3VtZW50IGV4aXN0cyBvbmx5IGlmIFNVQkNPREUgaXMKKyAgIG9mIGNsYXNzIEdJTVBMRV9CSU5BUllfUkhTLiAgKi8KK0RFRkdTQ09ERShHSU1QTEVfQVNTSUdOLCAiZ2ltcGxlX2Fzc2lnbiIsIEdTU19XSVRIX01FTV9PUFMpCisKKy8qIEdJTVBMRV9BU00gPFNUUklORywgSTEsIC4uLiwgSU4sIE8xLCAuLi4gT00sIEMxLCAuLi4sIENQPgorICAgcmVwcmVzZW50cyBpbmxpbmUgYXNzZW1ibHkgc3RhdGVtZW50cy4KKworICAgU1RSSU5HIGlzIHRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUgYXNzZW1ibHkgc3RhdGVtZW50cy4KKyAgIEkxIC4uLiBJTiBhcmUgdGhlIE4gaW5wdXQgb3BlcmFuZHMuCisgICBPMSAuLi4gT00gYXJlIHRoZSBNIG91dHB1dCBvcGVyYW5kcy4KKyAgIEMxIC4uLiBDUCBhcmUgdGhlIFAgY2xvYmJlciBvcGVyYW5kcy4KKyAgIEwxIC4uLiBMUSBhcmUgdGhlIFEgbGFiZWwgb3BlcmFuZHMuICAqLworREVGR1NDT0RFKEdJTVBMRV9BU00sICJnaW1wbGVfYXNtIiwgR1NTX0FTTSkKKworLyogR0lNUExFX0NBTEwgPEZOLCBMSFMsIEFSRzEsIC4uLiwgQVJHTlssIENIQUlOXT4gcmVwcmVzZW50cyBmdW5jdGlvbgorICAgY2FsbHMuCisKKyAgIEZOIGlzIHRoZSBjYWxsZWUuICBJdCBtdXN0IGJlIGFjY2VwdGVkIGJ5IGlzX2dpbXBsZV9jYWxsX2FkZHIuCisKKyAgIExIUyBpcyB0aGUgb3BlcmFuZCB3aGVyZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gRk4gaXMgc3RvcmVkLiAgSXQgbWF5CisgICBiZSBOVUxMLgorCisgICBBUkcxIC4uLiBBUkdOIGFyZSB0aGUgYXJndW1lbnRzLiAgVGhleSBtdXN0IGFsbCBiZSBhY2NlcHRlZCBieQorICAgaXNfZ2ltcGxlX29wZXJhbmQuCisKKyAgICBDSEFJTiBpcyB0aGUgb3B0aW9uYWwgc3RhdGljIGNoYWluIGxpbmsgZm9yIG5lc3RlZCBmdW5jdGlvbnMuICAqLworREVGR1NDT0RFKEdJTVBMRV9DQUxMLCAiZ2ltcGxlX2NhbGwiLCBHU1NfV0lUSF9NRU1fT1BTKQorCisvKiBHSU1QTEVfUkVUVVJOIDxSRVRWQUw+IHJlcHJlc2VudHMgcmV0dXJuIHN0YXRlbWVudHMuCisKKyAgIFJFVFZBTCBpcyB0aGUgdmFsdWUgdG8gcmV0dXJuIG9yIE5VTEwuICBJZiBhIHZhbHVlIGlzIHJldHVybmVkIGl0CisgICBtdXN0IGJlIGFjY2VwdGVkIGJ5IGlzX2dpbXBsZV9vcGVyYW5kLiAgKi8KK0RFRkdTQ09ERShHSU1QTEVfUkVUVVJOLCAiZ2ltcGxlX3JldHVybiIsIEdTU19XSVRIX01FTV9PUFMpCisKKy8qIEdJTVBMRV9CSU5EIDxWQVJTLCBCTE9DSywgQk9EWT4gcmVwcmVzZW50cyBhIGxleGljYWwgc2NvcGUuCisgICBWQVJTIGlzIHRoZSBzZXQgb2YgdmFyaWFibGVzIGRlY2xhcmVkIGluIHRoYXQgc2NvcGUuCisgICBCTE9DSyBpcyB0aGUgc3ltYm9sIGJpbmRpbmcgYmxvY2sgdXNlZCBmb3IgZGVidWcgaW5mb3JtYXRpb24uCisgICBCT0RZIGlzIHRoZSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIGluIHRoZSBzY29wZS4gICovCitERUZHU0NPREUoR0lNUExFX0JJTkQsICJnaW1wbGVfYmluZCIsIEdTU19CSU5EKQorCisvKiBHSU1QTEVfQ0FUQ0ggPFRZUEVTLCBIQU5ETEVSPiByZXByZXNlbnRzIGEgdHlwZWQgZXhjZXB0aW9uIGhhbmRsZXIuCisgICBUWVBFUyBpcyB0aGUgdHlwZSAob3IgbGlzdCBvZiB0eXBlcykgaGFuZGxlZC4gIEhBTkRMRVIgaXMgdGhlCisgICBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIHRoYXQgaGFuZGxlIHRoZXNlIHR5cGVzLiAgKi8KK0RFRkdTQ09ERShHSU1QTEVfQ0FUQ0gsICJnaW1wbGVfY2F0Y2giLCBHU1NfQ0FUQ0gpCisKKy8qIEdJTVBMRV9FSF9GSUxURVIgPFRZUEVTLCBGQUlMVVJFPiByZXByZXNlbnRzIGFuIGV4Y2VwdGlvbgorICAgc3BlY2lmaWNhdGlvbi4gIFRZUEVTIGlzIGEgbGlzdCBvZiBhbGxvd2VkIHR5cGVzIGFuZCBGQUlMVVJFIGlzIHRoZQorICAgc2VxdWVuY2Ugb2Ygc3RhdGVtZW50cyB0byBleGVjdXRlIG9uIGZhaWx1cmUuICAqLworREVGR1NDT0RFKEdJTVBMRV9FSF9GSUxURVIsICJnaW1wbGVfZWhfZmlsdGVyIiwgR1NTX0VIX0ZJTFRFUikKKworLyogR0lNUExFX0VIX01VU1RfTk9UX1RIUk9XIDxERUNMPiByZXByZXNlbnRzIGFuIGV4Y2VwdGlvbiBiYXJyaWVyLgorICAgREVDTCBpcyBhIG5vcmV0dXJuIGZ1bmN0aW9uIGRlY2wgdGFraW5nIG5vIGFyZ3VtZW50cyB0aGF0IHdpbGwKKyAgIGJlIGludm9rZWQgaWYgYW4gZXhjZXB0aW9uIHByb3BhZ2F0ZXMgdG8gdGhpcyBwb2ludC4gICovCitERUZHU0NPREUoR0lNUExFX0VIX01VU1RfTk9UX1RIUk9XLCAiZ2ltcGxlX2VoX211c3Rfbm90X3Rocm93IiwgR1NTX0VIX01OVCkKKworLyogR0lNUExFX1JFU1ggcmVzdW1lcyBleGVjdXRpb24gYWZ0ZXIgYW4gZXhjZXB0aW9uLiAgKi8KK0RFRkdTQ09ERShHSU1QTEVfUkVTWCwgImdpbXBsZV9yZXN4IiwgR1NTX0VIX0NUUkwpCisKKy8qIEdJTVBMRV9FSF9ESVNQQVRDSCBkZW11bHRpcGxleGVzIGFuIGV4Y2VwdGlvbiBlZGdlIGJhc2VkIG9uCisgICB0aGUgRklMVEVSIGFyZ3VtZW50LiAgKi8KK0RFRkdTQ09ERShHSU1QTEVfRUhfRElTUEFUQ0gsICJnaW1wbGVfZWhfZGlzcGF0Y2giLCBHU1NfRUhfQ1RSTCkKKworLyogR0lNUExFX1BISSA8UkVTVUxULCBBUkcxLCAuLi4sIEFSR04+IHJlcHJlc2VudHMgdGhlIFBISSBub2RlCisKKyAgIFJFU1VMVCA9IFBISSA8QVJHMSwgLi4uLCBBUkdOPgorCisgICBSRVNVTFQgaXMgdGhlIFNTQSBuYW1lIGNyZWF0ZWQgYnkgdGhpcyBQSEkgbm9kZS4KKworICAgQVJHMSAuLi4gQVJHTiBhcmUgdGhlIGFyZ3VtZW50cyB0byB0aGUgUEhJIG5vZGUuICBOIG11c3QgYmUKKyAgIGV4YWN0bHkgdGhlIHNhbWUgYXMgdGhlIG51bWJlciBvZiBpbmNvbWluZyBlZGdlcyB0byB0aGUgYmFzaWMgYmxvY2sKKyAgIGhvbGRpbmcgdGhlIFBISSBub2RlLiAgRXZlcnkgYXJndW1lbnQgaXMgZWl0aGVyIGFuIFNTQSBuYW1lIG9yIGEKKyAgIHRyZWUgbm9kZSBvZiBjbGFzcyB0Y2NfY29uc3RhbnQuICAqLworREVGR1NDT0RFKEdJTVBMRV9QSEksICJnaW1wbGVfcGhpIiwgR1NTX1BISSkKKworLyogR0lNUExFX1RSWSA8VFJZX0tJTkQsIEVWQUwsIENMRUFOVVA+CisgICByZXByZXNlbnRzIGEgdHJ5L2NhdGNoIG9yIGEgdHJ5L2ZpbmFsbHkgc3RhdGVtZW50LgorCisgICBUUllfS0lORCBpcyBlaXRoZXIgR0lNUExFX1RSWV9DQVRDSCBvciBHSU1QTEVfVFJZX0ZJTkFMTFkuCisKKyAgIEVWQUwgaXMgdGhlIHNlcXVlbmNlIG9mIHN0YXRlbWVudHMgdG8gZXhlY3V0ZSBvbiBlbnRyeSB0byBHSU1QTEVfVFJZLgorCisgICBDTEVBTlVQIGlzIHRoZSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIHRvIGV4ZWN1dGUgYWNjb3JkaW5nIHRvCisgICBUUllfS0lORC4gIElmIFRSWV9LSU5EIGlzIEdJTVBMRV9UUllfQ0FUQ0gsIENMRUFOVVAgaXMgb25seSBleGVjdGVkCisgICBpZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGR1cmluZyBleGVjdXRpb24gb2YgRVZBTC4gIElmIFRSWV9LSU5EIGlzCisgICBHSU1QTEVfVFJZX0ZJTkFMTFksIENMRUFOVVAgaXMgYWx3YXlzIGV4ZWN1dGVkIGFmdGVyIGV4ZWN1dGluZyBFVkFMCisgICAocmVnYXJkbGVzcyBvZiB3aGV0aGVyIEVWQUwgZmluaXNoZWQgbm9ybWFsbHksIG9yIGp1bXBlZCBvdXQgb3IgYW4KKyAgIGV4Y2VwdGlvbiB3YXMgdGhyb3duKS4gICovCitERUZHU0NPREUoR0lNUExFX1RSWSwgImdpbXBsZV90cnkiLCBHU1NfVFJZKQorCisvKiBHSU1QTEVfTk9QIHJlcHJlc2VudHMgdGhlICJkbyBub3RoaW5nIiBzdGF0ZW1lbnQuICAqLworREVGR1NDT0RFKEdJTVBMRV9OT1AsICJnaW1wbGVfbm9wIiwgR1NTX0JBU0UpCisKKworLyogSU1QT1JUQU5ULgorCisgICBEbyBub3QgcmVhcnJhbmdlIGFueSBvZiB0aGUgR0lNUExFX09NUF8qIGNvZGVzLiAgVGhpcyBvcmRlcmluZyBpcworICAgZXhwb3NlZCBieSB0aGUgcmFuZ2UgY2hlY2sgaW4gZ2ltcGxlX29tcF9zdWJjb2RlKCkuICAqLworCisKKy8qIFR1cGxlcyB1c2VkIGZvciBsb3dlcmluZyBvZiBPTVBfQVRPTUlDLiAgQWx0aG91Z2ggdGhlIGZvcm0gb2YgdGhlIE9NUF9BVE9NSUMKKyAgIGV4cHJlc3Npb24gaXMgdmVyeSBzaW1wbGUgKGp1c3QgaW4gZm9ybSBtZW0gb3A9IGV4cHIpLCB2YXJpb3VzIGltcGxpY2l0CisgICBjb252ZXJzaW9ucyBtYXkgY2F1c2UgdGhlIGV4cHJlc3Npb24gdG8gYmVjb21lIG1vcmUgY29tcGxleCwgc28gdGhhdCBpdCBkb2VzCisgICBub3QgZml0IHRoZSBnaW1wbGUgZ3JhbW1hciB2ZXJ5IHdlbGwuICBUbyBvdmVyY29tZSB0aGlzIHByb2JsZW0sIE9NUF9BVE9NSUMKKyAgIGlzIHJld3JpdHRlbiBhcyBhIHNlcXVlbmNlIG9mIHR3byBjb2RlcyBpbiBnaW1wbGlmaWNhdGlvbjoKKworICAgR0lNUExFX09NUF9MT0FEICh0bXAsIG1lbSkKKyAgIHZhbCA9IHNvbWUgY29tcHV0YXRpb25zIGludm9sdmluZyB0bXA7CisgICBHSU1QTEVfT01QX1NUT1JFICh2YWwpLiAgKi8KK0RFRkdTQ09ERShHSU1QTEVfT01QX0FUT01JQ19MT0FELCAiZ2ltcGxlX29tcF9hdG9taWNfbG9hZCIsCisJICBHU1NfT01QX0FUT01JQ19MT0FEKQorREVGR1NDT0RFKEdJTVBMRV9PTVBfQVRPTUlDX1NUT1JFLCAiZ2ltcGxlX29tcF9hdG9taWNfc3RvcmUiLAorCSAgR1NTX09NUF9BVE9NSUNfU1RPUkUpCisKKy8qIEdJTVBMRV9PTVBfQ09OVElOVUUgbWFya3MgdGhlIGxvY2F0aW9uIG9mIHRoZSBsb29wIG9yIHNlY3Rpb25zCisgICBpdGVyYXRpb24gaW4gcGFydGlhbGx5IGxvd2VyZWQgT3Blbk1QIGNvZGUuICAqLworREVGR1NDT0RFKEdJTVBMRV9PTVBfQ09OVElOVUUsICJnaW1wbGVfb21wX2NvbnRpbnVlIiwgR1NTX09NUF9DT05USU5VRSkKKworLyogR0lNUExFX09NUF9DUklUSUNBTCA8TkFNRSwgQk9EWT4gcmVwcmVzZW50cworCisgICAjcHJhZ21hIG9tcCBjcml0aWNhbCBbbmFtZV0KKworICAgTkFNRSBpcyB0aGUgbmFtZSBnaXZlbiB0byB0aGUgY3JpdGljYWwgc2VjdGlvbi4KKyAgIEJPRFkgaXMgdGhlIHNlcXVlbmNlIG9mIHN0YXRlbWVudHMgdGhhdCBhcmUgaW5zaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLiAgKi8KK0RFRkdTQ09ERShHSU1QTEVfT01QX0NSSVRJQ0FMLCAiZ2ltcGxlX29tcF9jcml0aWNhbCIsIEdTU19PTVBfQ1JJVElDQUwpCisKKy8qIEdJTVBMRV9PTVBfRk9SIDxCT0RZLCBDTEFVU0VTLCBJTkRFWCwgSU5JVElBTCwgRklOQUwsIENPTkQsIElOQ1IsIFBSRV9CT0RZPgorICAgcmVwcmVzZW50cworCisgICBQUkVfQk9EWQorICAgI3ByYWdtYSBvbXAgZm9yIFtjbGF1c2UxIC4uLiBjbGF1c2VOXQorICAgZm9yIChJTkRFWCA9IElOSVRJQUw7IElOREVYIENPTkQgRklOQUw7IElOREVYIHsrPSwtPX0gSU5DUikKKyAgIEJPRFkKKworICAgQk9EWSBpcyB0aGUgbG9vcCBib2R5LgorCisgICBDTEFVU0VTIGlzIHRoZSBsaXN0IG9mIGNsYXVzZXMuCisKKyAgIElOREVYIG11c3QgYmUgYW4gaW50ZWdlciBvciBwb2ludGVyIHZhcmlhYmxlLCB3aGljaCBpcyBpbXBsaWNpdGx5IHRocmVhZAorICAgcHJpdmF0ZS4gIEl0IG11c3QgYmUgYWNjZXB0ZWQgYnkgaXNfZ2ltcGxlX29wZXJhbmQuCisKKyAgIElOSVRJQUwgaXMgdGhlIGluaXRpYWwgdmFsdWUgZ2l2ZW4gdG8gSU5ERVguIEl0IG11c3QgYmUKKyAgIGFjY2VwdGVkIGJ5IGlzX2dpbXBsZV9vcGVyYW5kLgorCisgICBGSU5BTCBpcyB0aGUgZmluYWwgdmFsdWUgdGhhdCBJTkRFWCBzaG91bGQgdGFrZS4gSXQgbXVzdAorICAgYmUgYWNjZXB0ZWQgYnkgaXNfZ2ltcGxlX29wZXJhbmQuCisKKyAgIENPTkQgaXMgdGhlIGNvbmRpdGlvbiBjb2RlIGZvciB0aGUgY29udHJvbGxpbmcgcHJlZGljYXRlLiAgSXQgbXVzdAorICAgYmUgb25lIG9mIHsgPCwgPiwgPD0sID49IH0KKworICAgSU5DUiBpcyB0aGUgbG9vcCBpbmRleCBpbmNyZW1lbnQuICBJdCBtdXN0IGJlIHRyZWUgbm9kZSBvZiB0eXBlCisgICB0Y2NfY29uc3RhbnQuCisKKyAgIFBSRV9CT0RZIGlzIGEgbGFuZGluZyBwYWQgZmlsbGVkIGJ5IHRoZSBnaW1wbGlmaWVyIHdpdGggdGhpbmdzIGZyb20KKyAgIElOSVQsIENPTkQsIGFuZCBJTkNSIHRoYXQgYXJlIHRlY2huaWNhbGx5IHBhcnQgb2YgdGhlIE9NUF9GT1IKKyAgIHN0cnVjdHVyZWQgYmxvY2ssIGJ1dCBhcmUgZXZhbHVhdGVkIGJlZm9yZSB0aGUgbG9vcCBib2R5IGJlZ2lucy4KKworICAgSU5JVElBTCwgRklOQUwgYW5kIElOQ1IgYXJlIHJlcXVpcmVkIHRvIGJlIGxvb3AgaW52YXJpYW50IGludGVnZXIKKyAgIGV4cHJlc3Npb25zIHRoYXQgYXJlIGV2YWx1YXRlZCB3aXRob3V0IGFueSBzeW5jaHJvbml6YXRpb24uCisgICBUaGUgZXZhbHVhdGlvbiBvcmRlciwgZnJlcXVlbmN5IG9mIGV2YWx1YXRpb24gYW5kIHNpZGUtZWZmZWN0cyBhcmUKKyAgIHVuc3BlY2lmaWVkIGJ5IHRoZSBzdGFuZGFyZC4gICovCitERUZHU0NPREUoR0lNUExFX09NUF9GT1IsICJnaW1wbGVfb21wX2ZvciIsIEdTU19PTVBfRk9SKQorCisvKiBHSU1QTEVfT01QX01BU1RFUiA8Qk9EWT4gcmVwcmVzZW50cyAjcHJhZ21hIG9tcCBtYXN0ZXIuCisgICBCT0RZIGlzIHRoZSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIHRvIGV4ZWN1dGUgaW4gdGhlIG1hc3RlciBzZWN0aW9uLiAgKi8KK0RFRkdTQ09ERShHSU1QTEVfT01QX01BU1RFUiwgImdpbXBsZV9vbXBfbWFzdGVyIiwgR1NTX09NUCkKKworLyogR0lNUExFX09NUF9PUkRFUkVEIDxCT0RZPiByZXByZXNlbnRzICNwcmFnbWEgb21wIG9yZGVyZWQuCisgICBCT0RZIGlzIHRoZSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIHRvIGV4ZWN1dGUgaW4gdGhlIG9yZGVyZWQgc2VjdGlvbi4gICovCitERUZHU0NPREUoR0lNUExFX09NUF9PUkRFUkVELCAiZ2ltcGxlX29tcF9vcmRlcmVkIiwgR1NTX09NUCkKKworLyogR0lNUExFX09NUF9QQVJBTExFTCA8Qk9EWSwgQ0xBVVNFUywgQ0hJTERfRk4sIERBVEFfQVJHPiByZXByZXNlbnRzCisKKyAgICNwcmFnbWEgb21wIHBhcmFsbGVsIFtDTEFVU0VTXQorICAgQk9EWQorCisgICBCT0RZIGlzIGEgdGhlIHNlcXVlbmNlIG9mIHN0YXRlbWVudHMgdG8gYmUgZXhlY3V0ZWQgYnkgYWxsIHRocmVhZHMuCisKKyAgIENMQVVTRVMgaXMgYSBUUkVFX0xJU1Qgbm9kZSB3aXRoIGFsbCB0aGUgY2xhdXNlcy4KKworICAgQ0hJTERfRk4gaXMgc2V0IHdoZW4gb3V0bGluaW5nIHRoZSBib2R5IG9mIHRoZSBwYXJhbGxlbCByZWdpb24uCisgICBBbGwgdGhlIHN0YXRlbWVudHMgaW4gQk9EWSBhcmUgbW92ZWQgaW50byB0aGlzIG5ld2x5IGNyZWF0ZWQKKyAgIGZ1bmN0aW9uIHdoZW4gY29udmVydGluZyBPTVAgY29uc3RydWN0cyBpbnRvIGxvdy1HSU1QTEUuCisKKyAgIERBVEFfQVJHIGlzIGEgbG9jYWwgdmFyaWFibGUgaW4gdGhlIHBhcmVudCBmdW5jdGlvbiBjb250YWluaW5nIGRhdGEKKyAgIHRvIGJlIHNoYXJlZCB3aXRoIENISUxEX0ZOLiAgVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCBhbGwgdGhlIGRhdGEKKyAgIHNoYXJpbmcgY2xhdXNlcy4gICovCitERUZHU0NPREUoR0lNUExFX09NUF9QQVJBTExFTCwgImdpbXBsZV9vbXBfcGFyYWxsZWwiLCBHU1NfT01QX1BBUkFMTEVMKQorCisvKiBHSU1QTEVfT01QX1RBU0sgPEJPRFksIENMQVVTRVMsIENISUxEX0ZOLCBEQVRBX0FSRywgQ09QWV9GTiwKKwkJICAgIEFSR19TSVpFLCBBUkdfQUxJR04+IHJlcHJlc2VudHMKKworICAgI3ByYWdtYSBvbXAgdGFzayBbQ0xBVVNFU10KKyAgIEJPRFkKKworICAgQk9EWSBpcyBhIHRoZSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIHRvIGJlIGV4ZWN1dGVkIGJ5IGFsbCB0aHJlYWRzLgorCisgICBDTEFVU0VTIGlzIGEgVFJFRV9MSVNUIG5vZGUgd2l0aCBhbGwgdGhlIGNsYXVzZXMuCisKKyAgIENISUxEX0ZOIGlzIHNldCB3aGVuIG91dGxpbmluZyB0aGUgYm9keSBvZiB0aGUgZXhwbGljaXQgdGFzayByZWdpb24uCisgICBBbGwgdGhlIHN0YXRlbWVudHMgaW4gQk9EWSBhcmUgbW92ZWQgaW50byB0aGlzIG5ld2x5IGNyZWF0ZWQKKyAgIGZ1bmN0aW9uIHdoZW4gY29udmVydGluZyBPTVAgY29uc3RydWN0cyBpbnRvIGxvdy1HSU1QTEUuCisKKyAgIERBVEFfQVJHIGlzIGEgbG9jYWwgdmFyaWFibGUgaW4gdGhlIHBhcmVudCBmdW5jdGlvbiBjb250YWluaW5nIGRhdGEKKyAgIHRvIGJlIHNoYXJlZCB3aXRoIENISUxEX0ZOLiAgVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCBhbGwgdGhlIGRhdGEKKyAgIHNoYXJpbmcgY2xhdXNlcy4KKworICAgQ09QWV9GTiBpcyBzZXQgd2hlbiBvdXRsaW5pbmcgdGhlIGZpcnN0cHJpdmF0ZSB2YXIgaW5pdGlhbGl6YXRpb24uCisgICBBbGwgdGhlIG5lZWRlZCBzdGF0ZW1lbnRzIGFyZSBlbWl0dGVkIGludG8gdGhlIG5ld2x5IGNyZWF0ZWQKKyAgIGZ1bmN0aW9uLCBvciB3aGVuIG9ubHkgbWVtY3B5IGlzIG5lZWRlZCwgaXQgaXMgTlVMTC4KKworICAgQVJHX1NJWkUgYW5kIEFSR19BTElHTiBhcmUgdGhlIHNpemUgYW5kIGFsaWdubWVudCBvZiB0aGUgaW5jb21pbmcKKyAgIGRhdGEgYXJlYSBhbGxvY2F0ZWQgYnkgR09NUF90YXNrIGFuZCBwYXNzZWQgdG8gQ0hJTERfRk4uICAqLworREVGR1NDT0RFKEdJTVBMRV9PTVBfVEFTSywgImdpbXBsZV9vbXBfdGFzayIsIEdTU19PTVBfVEFTSykKKworLyogT01QX1JFVFVSTiBtYXJrcyB0aGUgZW5kIG9mIGFuIE9wZW5NUCBkaXJlY3RpdmUuICAqLworREVGR1NDT0RFKEdJTVBMRV9PTVBfUkVUVVJOLCAiZ2ltcGxlX29tcF9yZXR1cm4iLCBHU1NfQkFTRSkKKworLyogT01QX1NFQ1RJT04gPEJPRFk+IHJlcHJlc2VudHMgI3ByYWdtYSBvbXAgc2VjdGlvbi4KKyAgIEJPRFkgaXMgdGhlIHNlcXVlbmNlIG9mIHN0YXRlbWVudHMgaW4gdGhlIHNlY3Rpb24gYm9keS4gICovCitERUZHU0NPREUoR0lNUExFX09NUF9TRUNUSU9OLCAiZ2ltcGxlX29tcF9zZWN0aW9uIiwgR1NTX09NUCkKKworLyogT01QX1NFQ1RJT05TIDxCT0RZLCBDTEFVU0VTLCBDT05UUk9MPiByZXByZXNlbnRzICNwcmFnbWEgb21wIHNlY3Rpb25zLgorCisgICBCT0RZIGlzIHRoZSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIGluIHRoZSBzZWN0aW9ucyBib2R5LgorICAgQ0xBVVNFUyBpcyBhIFRSRUVfTElTVCBub2RlIGhvbGRpbmcgdGhlIGxpc3Qgb2YgYXNzb2NpYXRlZCBjbGF1c2VzLgorICAgQ09OVFJPTCBpcyBhIFZBUl9ERUNMIHVzZWQgZm9yIGRlY2lkaW5nIHdoaWNoIG9mIHRoZSBzZWN0aW9ucworICAgdG8gZXhlY3V0ZS4gICovCitERUZHU0NPREUoR0lNUExFX09NUF9TRUNUSU9OUywgImdpbXBsZV9vbXBfc2VjdGlvbnMiLCBHU1NfT01QX1NFQ1RJT05TKQorCisvKiBHSU1QTEVfT01QX1NFQ1RJT05TX1NXSVRDSCBpcyBhIG1hcmtlciBwbGFjZWQgaW1tZWRpYXRlbHkgYWZ0ZXIKKyAgIE9NUF9TRUNUSU9OUy4gIEl0IHJlcHJlc2VudHMgdGhlIEdJTVBMRV9TV0lUQ0ggdXNlZCB0byBkZWNpZGUgd2hpY2gKKyAgIGJyYW5jaCBpcyB0YWtlbi4gICovCitERUZHU0NPREUoR0lNUExFX09NUF9TRUNUSU9OU19TV0lUQ0gsICJnaW1wbGVfb21wX3NlY3Rpb25zX3N3aXRjaCIsIEdTU19CQVNFKQorCisvKiBHSU1QTEVfT01QX1NJTkdMRSA8Qk9EWSwgQ0xBVVNFUz4gcmVwcmVzZW50cyAjcHJhZ21hIG9tcCBzaW5nbGUKKyAgIEJPRFkgaXMgdGhlIHNlcXVlbmNlIG9mIHN0YXRlbWVudHMgaW5zaWRlIHRoZSBzaW5nbGUgc2VjdGlvbi4KKyAgIENMQVVTRVMgaXMgYSBUUkVFX0xJU1Qgbm9kZSBob2xkaW5nIHRoZSBhc3NvY2lhdGVkIGNsYXVzZXMuICAqLworREVGR1NDT0RFKEdJTVBMRV9PTVBfU0lOR0xFLCAiZ2ltcGxlX29tcF9zaW5nbGUiLCBHU1NfT01QX1NJTkdMRSkKKworLyogR0lNUExFX1BSRURJQ1QgPFBSRURJQ1QsIE9VVENPTUU+IHNwZWNpZmllcyBhIGhpbnQgZm9yIGJyYW5jaCBwcmVkaWN0aW9uLgorCisgICBQUkVESUNUIGlzIG9uZSBvZiB0aGUgcHJlZGljdG9ycyBmcm9tIHByZWRpY3QuZGVmLgorCisgICBPVVRDT01FIGlzIE5PVF9UQUtFTiBvciBUQUtFTi4gICovCitERUZHU0NPREUoR0lNUExFX1BSRURJQ1QsICJnaW1wbGVfcHJlZGljdCIsIEdTU19CQVNFKQorCisvKiAgVGhpcyBub2RlIHJlcHJlc2VudHMgYSBjbGVhbnVwIGV4cHJlc3Npb24uICBJdCBpcyBPTkxZIFVTRUQgSU5URVJOQUxMWQorICAgIGJ5IHRoZSBnaW1wbGlmaWVyIGFzIGEgcGxhY2Vob2xkZXIgZm9yIGNsZWFudXBzLCBhbmQgaXRzIHVzZXMgd2lsbCBiZQorICAgIGNsZWFuZWQgdXAgYnkgdGhlIHRpbWUgZ2ltcGxpZmljYXRpb24gaXMgZG9uZS4KKworICAgIFRoaXMgdHVwbGUgc2hvdWxkIG5vdCBleGlzdCBvdXRzaWRlIG9mIHRoZSBnaW1wbGlmaWVyIHByb3Blci4gICovCitERUZHU0NPREUoR0lNUExFX1dJVEhfQ0xFQU5VUF9FWFBSLCAiZ2ltcGxlX3dpdGhfY2xlYW51cF9leHByIiwgR1NTX1dDRSkKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9naW1wbGUuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9naW1wbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2JjMzA4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2dpbXBsZS5oCkBAIC0wLDAgKzEsNDc2NyBAQAorLyogR2ltcGxlIElSIGRlZmluaXRpb25zLgorCisgICBDb3B5cmlnaHQgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IEFsZHkgSGVybmFuZGV6IDxhbGR5aEByZWRoYXQuY29tPgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfR0lNUExFX0gKKyNkZWZpbmUgR0NDX0dJTVBMRV9ICisKKyNpbmNsdWRlICJwb2ludGVyLXNldC5oIgorI2luY2x1ZGUgInZlYy5oIgorI2luY2x1ZGUgImdnYy5oIgorI2luY2x1ZGUgInRtLmgiCisjaW5jbHVkZSAiaGFyZC1yZWctc2V0LmgiCisjaW5jbHVkZSAiYmFzaWMtYmxvY2suaCIKKyNpbmNsdWRlICJ0cmVlLXNzYS1vcGVyYW5kcy5oIgorCitERUZfVkVDX1AoZ2ltcGxlKTsKK0RFRl9WRUNfQUxMT0NfUChnaW1wbGUsaGVhcCk7CitERUZfVkVDX0FMTE9DX1AoZ2ltcGxlLGdjKTsKKwordHlwZWRlZiBnaW1wbGUgKmdpbXBsZV9wOworREVGX1ZFQ19QKGdpbXBsZV9wKTsKK0RFRl9WRUNfQUxMT0NfUChnaW1wbGVfcCxoZWFwKTsKKworREVGX1ZFQ19QKGdpbXBsZV9zZXEpOworREVGX1ZFQ19BTExPQ19QKGdpbXBsZV9zZXEsZ2MpOworREVGX1ZFQ19BTExPQ19QKGdpbXBsZV9zZXEsaGVhcCk7CisKKy8qIEZvciBlYWNoIGJsb2NrLCB0aGUgUEhJIG5vZGVzIHRoYXQgbmVlZCB0byBiZSByZXdyaXR0ZW4gYXJlIHN0b3JlZCBpbnRvCisgICB0aGVzZSB2ZWN0b3JzLiAgKi8KK3R5cGVkZWYgVkVDKGdpbXBsZSwgaGVhcCkgKmdpbXBsZV92ZWM7CitERUZfVkVDX1AgKGdpbXBsZV92ZWMpOworREVGX1ZFQ19BTExPQ19QIChnaW1wbGVfdmVjLCBoZWFwKTsKKworZW51bSBnaW1wbGVfY29kZSB7CisjZGVmaW5lIERFRkdTQ09ERShTWU0sIFNUUklORywgU1RSVUNUKQlTWU0sCisjaW5jbHVkZSAiZ2ltcGxlLmRlZiIKKyN1bmRlZiBERUZHU0NPREUKKyAgICBMQVNUX0FORF9VTlVTRURfR0lNUExFX0NPREUKK307CisKK2V4dGVybiBjb25zdCBjaGFyICpjb25zdCBnaW1wbGVfY29kZV9uYW1lW107CitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBnaW1wbGVfcmhzX2NsYXNzX3RhYmxlW107CisKKy8qIEVycm9yIG91dCBpZiBhIGdpbXBsZSB0dXBsZSBpcyBhZGRyZXNzZWQgaW5jb3JyZWN0bHkuICAqLworI2lmIGRlZmluZWQgRU5BQkxFX0dJTVBMRV9DSEVDS0lORworZXh0ZXJuIHZvaWQgZ2ltcGxlX2NoZWNrX2ZhaWxlZCAoY29uc3RfZ2ltcGxlLCBjb25zdCBjaGFyICosIGludCwgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBlbnVtIGdpbXBsZV9jb2RlLCAgICAgICAgICAgXAorCQkJCSBlbnVtIHRyZWVfY29kZSkgQVRUUklCVVRFX05PUkVUVVJOOworCisjZGVmaW5lIEdJTVBMRV9DSEVDSyhHUywgQ09ERSkJCQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgY29uc3RfZ2ltcGxlIF9fZ3MgPSAoR1MpOwkJCQkJCVwKKyAgICBpZiAoZ2ltcGxlX2NvZGUgKF9fZ3MpICE9IChDT0RFKSkJCQkJCVwKKyAgICAgIGdpbXBsZV9jaGVja19mYWlsZWQgKF9fZ3MsIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fLAlcCisJICAJCSAgIChDT0RFKSwgRVJST1JfTUFSSyk7CQkJCVwKKyAgfSB3aGlsZSAoMCkKKyNlbHNlICAvKiBub3QgRU5BQkxFX0dJTVBMRV9DSEVDS0lORyAgKi8KKyNkZWZpbmUgR0lNUExFX0NIRUNLKEdTLCBDT0RFKQkJCSh2b2lkKTAKKyNlbmRpZgorCisvKiBDbGFzcyBvZiBHSU1QTEUgZXhwcmVzc2lvbnMgc3VpdGFibGUgZm9yIHRoZSBSSFMgb2YgYXNzaWdubWVudHMuICBTZWUKKyAgIGdldF9naW1wbGVfcmhzX2NsYXNzLiAgKi8KK2VudW0gZ2ltcGxlX3Joc19jbGFzcworeworICBHSU1QTEVfSU5WQUxJRF9SSFMsCS8qIFRoZSBleHByZXNzaW9uIGNhbm5vdCBiZSB1c2VkIG9uIHRoZSBSSFMuICAqLworICBHSU1QTEVfQklOQVJZX1JIUywJLyogVGhlIGV4cHJlc3Npb24gaXMgYSBiaW5hcnkgb3BlcmF0aW9uLiAgKi8KKyAgR0lNUExFX1VOQVJZX1JIUywJLyogVGhlIGV4cHJlc3Npb24gaXMgYSB1bmFyeSBvcGVyYXRpb24uICAqLworICBHSU1QTEVfU0lOR0xFX1JIUwkvKiBUaGUgZXhwcmVzc2lvbiBpcyBhIHNpbmdsZSBvYmplY3QgKGFuIFNTQQorCQkJICAgbmFtZSwgYSBfREVDTCwgYSBfUkVGLCBldGMuICAqLworfTsKKworLyogU3BlY2lmaWMgZmxhZ3MgZm9yIGluZGl2aWR1YWwgR0lNUExFIHN0YXRlbWVudHMuICBUaGVzZSBmbGFncyBhcmUKKyAgIGFsd2F5cyBzdG9yZWQgaW4gZ2ltcGxlX3N0YXRlbWVudF9iYXNlLnN1YmNvZGUgYW5kIHRoZXkgbWF5IG9ubHkgYmUKKyAgIGRlZmluZWQgZm9yIHN0YXRlbWVudCBjb2RlcyB0aGF0IGRvIG5vdCB1c2Ugc3ViLWNvZGVzLgorCisgICBWYWx1ZXMgZm9yIHRoZSBtYXNrcyBjYW4gb3ZlcmxhcCBhcyBsb25nIGFzIHRoZSBvdmVybGFwcGluZyB2YWx1ZXMKKyAgIGFyZSBuZXZlciB1c2VkIGluIHRoZSBzYW1lIHN0YXRlbWVudCBjbGFzcy4KKworICAgVGhlIG1heGltdW0gbWFzayB2YWx1ZSB0aGF0IGNhbiBiZSBkZWZpbmVkIGlzIDEgPDwgMTUgKGkuZS4sIGVhY2gKKyAgIHN0YXRlbWVudCBjb2RlIGNhbiBob2xkIHVwIHRvIDE2IGJpdGZsYWdzKS4KKworICAgS2VlcCB0aGlzIGxpc3Qgc29ydGVkLiAgKi8KK2VudW0gZ2ZfbWFzayB7CisgICAgR0ZfQVNNX0lOUFVUCQk9IDEgPDwgMCwKKyAgICBHRl9BU01fVk9MQVRJTEUJCT0gMSA8PCAxLAorICAgIEdGX0NBTExfQ0FOTk9UX0lOTElORQk9IDEgPDwgMCwKKyAgICBHRl9DQUxMX0ZST01fVEhVTksJCT0gMSA8PCAxLAorICAgIEdGX0NBTExfUkVUVVJOX1NMT1RfT1BUCT0gMSA8PCAyLAorICAgIEdGX0NBTExfVEFJTENBTEwJCT0gMSA8PCAzLAorICAgIEdGX0NBTExfVkFfQVJHX1BBQ0sJCT0gMSA8PCA0LAorICAgIEdGX0NBTExfTk9USFJPVwkJPSAxIDw8IDUsCisgICAgR0ZfT01QX1BBUkFMTEVMX0NPTUJJTkVECT0gMSA8PCAwLAorCisgICAgLyogVHJ1ZSBvbiBhbiBHSU1QTEVfT01QX1JFVFVSTiBzdGF0ZW1lbnQgaWYgdGhlIHJldHVybiBkb2VzIG5vdCByZXF1aXJlCisgICAgICAgYSB0aHJlYWQgc3luY2hyb25pemF0aW9uIHZpYSBzb21lIHNvcnQgb2YgYmFycmllci4gIFRoZSBleGFjdCBiYXJyaWVyCisgICAgICAgdGhhdCB3b3VsZCBvdGhlcndpc2UgYmUgZW1pdHRlZCBpcyBkZXBlbmRlbnQgb24gdGhlIE9NUCBzdGF0ZW1lbnQgd2l0aAorICAgICAgIHdoaWNoIHRoaXMgcmV0dXJuIGlzIGFzc29jaWF0ZWQuICAqLworICAgIEdGX09NUF9SRVRVUk5fTk9XQUlUCT0gMSA8PCAwLAorCisgICAgR0ZfT01QX1NFQ1RJT05fTEFTVAkJPSAxIDw8IDAsCisgICAgR0ZfUFJFRElDVF9UQUtFTgkJPSAxIDw8IDE1Cit9OworCisvKiBDdXJyZW50bHksIHRoZXJlJ3Mgb25seSBvbmUgdHlwZSBvZiBnaW1wbGUgZGVidWcgc3RtdC4gIE90aGVycyBhcmUKKyAgIGVudmlzaW9uZWQsIGZvciBleGFtcGxlLCB0byBlbmFibGUgdGhlIGdlbmVyYXRpb24gb2YgaXNfc3RtdCBub3RlcworICAgaW4gbGluZSBudW1iZXIgaW5mb3JtYXRpb24sIHRvIG1hcmsgc2VxdWVuY2UgcG9pbnRzLCBldGMuICBUaGlzCisgICBzdWJjb2RlIGlzIHRvIGJlIHVzZWQgdG8gdGVsbCB0aGVtIGFwYXJ0LiAgKi8KK2VudW0gZ2ltcGxlX2RlYnVnX3N1YmNvZGUgeworICBHSU1QTEVfREVCVUdfQklORCA9IDAKK307CisKKy8qIE1hc2tzIGZvciBzZWxlY3RpbmcgYSBwYXNzIGxvY2FsIGZsYWcgKFBMRikgdG8gd29yayBvbi4gIFRoZXNlCisgICBtYXNrcyBhcmUgdXNlZCBieSBnaW1wbGVfc2V0X3BsZiBhbmQgZ2ltcGxlX3BsZi4gICovCitlbnVtIHBsZl9tYXNrIHsKKyAgICBHRl9QTEZfMQk9IDEgPDwgMCwKKyAgICBHRl9QTEZfMgk9IDEgPDwgMQorfTsKKworLyogQSBub2RlIGluIGEgZ2ltcGxlX3NlcV9kLiAgKi8KK3N0cnVjdCBHVFkoKGNoYWluX25leHQgKCIlaC5uZXh0IiksIGNoYWluX3ByZXYgKCIlaC5wcmV2IikpKSBnaW1wbGVfc2VxX25vZGVfZCB7CisgIGdpbXBsZSBzdG10OworICBzdHJ1Y3QgZ2ltcGxlX3NlcV9ub2RlX2QgKnByZXY7CisgIHN0cnVjdCBnaW1wbGVfc2VxX25vZGVfZCAqbmV4dDsKK307CisKKy8qIEEgZG91YmxlLWxpbmtlZCBzZXF1ZW5jZSBvZiBnaW1wbGUgc3RhdGVtZW50cy4gICovCitzdHJ1Y3QgR1RZICgoY2hhaW5fbmV4dCAoIiVoLm5leHRfZnJlZSIpKSkgZ2ltcGxlX3NlcV9kIHsKKyAgLyogRmlyc3QgYW5kIGxhc3Qgc3RhdGVtZW50cyBpbiB0aGUgc2VxdWVuY2UuICAqLworICBnaW1wbGVfc2VxX25vZGUgZmlyc3Q7CisgIGdpbXBsZV9zZXFfbm9kZSBsYXN0OworCisgIC8qIFNlcXVlbmNlcyBhcmUgY3JlYXRlZC9kZXN0cm95ZWQgZnJlcXVlbnRseS4gIFRvIG1pbmltaXplCisgICAgIGFsbG9jYXRpb24gYWN0aXZpdHksIGRlYWxsb2NhdGVkIHNlcXVlbmNlcyBhcmUga2VwdCBpbiBhIHBvb2wgb2YKKyAgICAgYXZhaWxhYmxlIHNlcXVlbmNlcy4gIFRoaXMgaXMgdGhlIHBvaW50ZXIgdG8gdGhlIG5leHQgZnJlZQorICAgICBzZXF1ZW5jZSBpbiB0aGUgcG9vbC4gICovCisgIGdpbXBsZV9zZXEgbmV4dF9mcmVlOworfTsKKworCisvKiBSZXR1cm4gdGhlIGZpcnN0IG5vZGUgaW4gR0lNUExFIHNlcXVlbmNlIFMuICAqLworCitzdGF0aWMgaW5saW5lIGdpbXBsZV9zZXFfbm9kZQorZ2ltcGxlX3NlcV9maXJzdCAoY29uc3RfZ2ltcGxlX3NlcSBzKQoreworICByZXR1cm4gcyA/IHMtPmZpcnN0IDogTlVMTDsKK30KKworCisvKiBSZXR1cm4gdGhlIGZpcnN0IHN0YXRlbWVudCBpbiBHSU1QTEUgc2VxdWVuY2UgUy4gICovCisKK3N0YXRpYyBpbmxpbmUgZ2ltcGxlCitnaW1wbGVfc2VxX2ZpcnN0X3N0bXQgKGNvbnN0X2dpbXBsZV9zZXEgcykKK3sKKyAgZ2ltcGxlX3NlcV9ub2RlIG4gPSBnaW1wbGVfc2VxX2ZpcnN0IChzKTsKKyAgcmV0dXJuIChuKSA/IG4tPnN0bXQgOiBOVUxMOworfQorCisKKy8qIFJldHVybiB0aGUgbGFzdCBub2RlIGluIEdJTVBMRSBzZXF1ZW5jZSBTLiAgKi8KKworc3RhdGljIGlubGluZSBnaW1wbGVfc2VxX25vZGUKK2dpbXBsZV9zZXFfbGFzdCAoY29uc3RfZ2ltcGxlX3NlcSBzKQoreworICByZXR1cm4gcyA/IHMtPmxhc3QgOiBOVUxMOworfQorCisKKy8qIFJldHVybiB0aGUgbGFzdCBzdGF0ZW1lbnQgaW4gR0lNUExFIHNlcXVlbmNlIFMuICAqLworCitzdGF0aWMgaW5saW5lIGdpbXBsZQorZ2ltcGxlX3NlcV9sYXN0X3N0bXQgKGNvbnN0X2dpbXBsZV9zZXEgcykKK3sKKyAgZ2ltcGxlX3NlcV9ub2RlIG4gPSBnaW1wbGVfc2VxX2xhc3QgKHMpOworICByZXR1cm4gKG4pID8gbi0+c3RtdCA6IE5VTEw7Cit9CisKKworLyogU2V0IHRoZSBsYXN0IG5vZGUgaW4gR0lNUExFIHNlcXVlbmNlIFMgdG8gTEFTVC4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX3NlcV9zZXRfbGFzdCAoZ2ltcGxlX3NlcSBzLCBnaW1wbGVfc2VxX25vZGUgbGFzdCkKK3sKKyAgcy0+bGFzdCA9IGxhc3Q7Cit9CisKKworLyogU2V0IHRoZSBmaXJzdCBub2RlIGluIEdJTVBMRSBzZXF1ZW5jZSBTIHRvIEZJUlNULiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfc2VxX3NldF9maXJzdCAoZ2ltcGxlX3NlcSBzLCBnaW1wbGVfc2VxX25vZGUgZmlyc3QpCit7CisgIHMtPmZpcnN0ID0gZmlyc3Q7Cit9CisKKworLyogUmV0dXJuIHRydWUgaWYgR0lNUExFIHNlcXVlbmNlIFMgaXMgZW1wdHkuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2dpbXBsZV9zZXFfZW1wdHlfcCAoY29uc3RfZ2ltcGxlX3NlcSBzKQoreworICByZXR1cm4gcyA9PSBOVUxMIHx8IHMtPmZpcnN0ID09IE5VTEw7Cit9CisKKwordm9pZCBnaW1wbGVfc2VxX2FkZF9zdG10IChnaW1wbGVfc2VxICosIGdpbXBsZSk7CisKKy8qIExpbmsgZ2ltcGxlIHN0YXRlbWVudCBHUyB0byB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZSAqU0VRX1AuICBJZgorICAgKlNFUV9QIGlzIE5VTEwsIGEgbmV3IHNlcXVlbmNlIGlzIGFsbG9jYXRlZC4gIFRoaXMgZnVuY3Rpb24gaXMKKyAgIHNpbWlsYXIgdG8gZ2ltcGxlX3NlcV9hZGRfc3RtdCwgYnV0IGRvZXMgbm90IHNjYW4gdGhlIG9wZXJhbmRzLgorICAgRHVyaW5nIGdpbXBsaWZpY2F0aW9uLCB3ZSBuZWVkIHRvIG1hbmlwdWxhdGUgc3RhdGVtZW50IHNlcXVlbmNlcworICAgYmVmb3JlIHRoZSBkZWYvdXNlIHZlY3RvcnMgaGF2ZSBiZWVuIGNvbnN0cnVjdGVkLiAgKi8KK3ZvaWQgZ2ltcGxpZnlfc2VxX2FkZF9zdG10IChnaW1wbGVfc2VxICosIGdpbXBsZSk7CisKKy8qIEFsbG9jYXRlIGEgbmV3IHNlcXVlbmNlIGFuZCBpbml0aWFsaXplIGl0cyBmaXJzdCBlbGVtZW50IHdpdGggU1RNVC4gICovCisKK3N0YXRpYyBpbmxpbmUgZ2ltcGxlX3NlcQorZ2ltcGxlX3NlcV9hbGxvY193aXRoX3N0bXQgKGdpbXBsZSBzdG10KQoreworICBnaW1wbGVfc2VxIHNlcSA9IE5VTEw7CisgIGdpbXBsZV9zZXFfYWRkX3N0bXQgKCZzZXEsIHN0bXQpOworICByZXR1cm4gc2VxOworfQorCisKKy8qIFJldHVybnMgdGhlIHNlcXVlbmNlIG9mIHN0YXRlbWVudHMgaW4gQkIuICAqLworCitzdGF0aWMgaW5saW5lIGdpbXBsZV9zZXEKK2JiX3NlcSAoY29uc3RfYmFzaWNfYmxvY2sgYmIpCit7CisgIHJldHVybiAoIShiYi0+ZmxhZ3MgJiBCQl9SVEwpICYmIGJiLT5pbC5naW1wbGUpID8gYmItPmlsLmdpbXBsZS0+c2VxIDogTlVMTDsKK30KKworCisvKiBTZXRzIHRoZSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIGluIEJCIHRvIFNFUS4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc2V0X2JiX3NlcSAoYmFzaWNfYmxvY2sgYmIsIGdpbXBsZV9zZXEgc2VxKQoreworICBnY2NfYXNzZXJ0ICghKGJiLT5mbGFncyAmIEJCX1JUTCkpOworICBiYi0+aWwuZ2ltcGxlLT5zZXEgPSBzZXE7Cit9CisKKy8qIEl0ZXJhdG9yIG9iamVjdCBmb3IgR0lNUExFIHN0YXRlbWVudCBzZXF1ZW5jZXMuICAqLworCit0eXBlZGVmIHN0cnVjdAoreworICAvKiBTZXF1ZW5jZSBub2RlIGhvbGRpbmcgdGhlIGN1cnJlbnQgc3RhdGVtZW50LiAgKi8KKyAgZ2ltcGxlX3NlcV9ub2RlIHB0cjsKKworICAvKiBTZXF1ZW5jZSBhbmQgYmFzaWMgYmxvY2sgaG9sZGluZyB0aGUgc3RhdGVtZW50LiAgVGhlc2UgZmllbGRzCisgICAgIGFyZSBuZWNlc3NhcnkgdG8gaGFuZGxlIGVkZ2UgY2FzZXMgc3VjaCBhcyB3aGVuIHN0YXRlbWVudCBpcworICAgICBhZGRlZCB0byBhbiBlbXB0eSBiYXNpYyBibG9jayBvciB3aGVuIHRoZSBsYXN0IHN0YXRlbWVudCBvZiBhCisgICAgIGJsb2NrL3NlcXVlbmNlIGlzIHJlbW92ZWQuICAqLworICBnaW1wbGVfc2VxIHNlcTsKKyAgYmFzaWNfYmxvY2sgYmI7Cit9IGdpbXBsZV9zdG10X2l0ZXJhdG9yOworCisKKy8qIERhdGEgc3RydWN0dXJlIGRlZmluaXRpb25zIGZvciBHSU1QTEUgdHVwbGVzLiAgTk9URTogd29yZCBtYXJrZXJzCisgICBhcmUgZm9yIDY0IGJpdCBob3N0cy4gICovCisKK3N0cnVjdCBHVFkoKCkpIGdpbXBsZV9zdGF0ZW1lbnRfYmFzZSB7CisgIC8qIFsgV09SRCAxIF0KKyAgICAgTWFpbiBpZGVudGlmeWluZyBjb2RlIGZvciBhIHR1cGxlLiAgKi8KKyAgRU5VTV9CSVRGSUVMRChnaW1wbGVfY29kZSkgY29kZSA6IDg7CisKKyAgLyogTm9uemVybyBpZiBhIHdhcm5pbmcgc2hvdWxkIG5vdCBiZSBlbWl0dGVkIG9uIHRoaXMgdHVwbGUuICAqLworICB1bnNpZ25lZCBpbnQgbm9fd2FybmluZwk6IDE7CisKKyAgLyogTm9uemVybyBpZiB0aGlzIHR1cGxlIGhhcyBiZWVuIHZpc2l0ZWQuICBQYXNzZXMgYXJlIHJlc3BvbnNpYmxlCisgICAgIGZvciBjbGVhcmluZyB0aGlzIGJpdCBiZWZvcmUgdXNpbmcgaXQuICAqLworICB1bnNpZ25lZCBpbnQgdmlzaXRlZAkJOiAxOworCisgIC8qIE5vbnplcm8gaWYgdGhpcyB0dXBsZSByZXByZXNlbnRzIGEgbm9uLXRlbXBvcmFsIG1vdmUuICAqLworICB1bnNpZ25lZCBpbnQgbm9udGVtcG9yYWxfbW92ZQk6IDE7CisKKyAgLyogUGFzcyBsb2NhbCBmbGFncy4gIFRoZXNlIGZsYWdzIGFyZSBmcmVlIGZvciBhbnkgcGFzcyB0byB1c2UgYXMKKyAgICAgdGhleSBzZWUgZml0LiAgUGFzc2VzIHNob3VsZCBub3QgYXNzdW1lIHRoYXQgdGhlc2UgZmxhZ3MgY29udGFpbgorICAgICBhbnkgdXNlZnVsIHZhbHVlIHdoZW4gdGhlIHBhc3Mgc3RhcnRzLiAgQW55IGluaXRpYWwgc3RhdGUgdGhhdAorICAgICB0aGUgcGFzcyByZXF1aXJlcyBzaG91bGQgYmUgc2V0IG9uIGVudHJ5IHRvIHRoZSBwYXNzLiAgU2VlCisgICAgIGdpbXBsZV9zZXRfcGxmIGFuZCBnaW1wbGVfcGxmIGZvciB1c2FnZS4gICovCisgIHVuc2lnbmVkIGludCBwbGYJCTogMjsKKworICAvKiBOb256ZXJvIGlmIHRoaXMgc3RhdGVtZW50IGhhcyBiZWVuIG1vZGlmaWVkIGFuZCBuZWVkcyB0byBoYXZlIGl0cworICAgICBvcGVyYW5kcyByZXNjYW5uZWQuICAqLworICB1bnNpZ25lZCBtb2RpZmllZCAJCTogMTsKKworICAvKiBOb256ZXJvIGlmIHRoaXMgc3RhdGVtZW50IGNvbnRhaW5zIHZvbGF0aWxlIG9wZXJhbmRzLiAgKi8KKyAgdW5zaWduZWQgaGFzX3ZvbGF0aWxlX29wcyAJOiAxOworCisgIC8qIFBhZGRpbmcgdG8gZ2V0IHN1YmNvZGUgdG8gMTYgYml0IGFsaWdubWVudC4gICovCisgIHVuc2lnbmVkIHBhZAkJCTogMTsKKworICAvKiBUaGUgU1VCQ09ERSBmaWVsZCBjYW4gYmUgdXNlZCBmb3IgdHVwbGUtc3BlY2lmaWMgZmxhZ3MgZm9yIHR1cGxlcworICAgICB0aGF0IGRvIG5vdCByZXF1aXJlIHN1YmNvZGVzLiAgTm90ZSB0aGF0IFNVQkNPREUgc2hvdWxkIGJlIGF0CisgICAgIGxlYXN0IGFzIHdpZGUgYXMgdHJlZSBjb2RlcywgYXMgc2V2ZXJhbCB0dXBsZXMgc3RvcmUgdHJlZSBjb2RlcworICAgICBpbiB0aGVyZS4gICovCisgIHVuc2lnbmVkIGludCBzdWJjb2RlCQk6IDE2OworCisgIC8qIFVJRCBvZiB0aGlzIHN0YXRlbWVudC4gIFRoaXMgaXMgdXNlZCBieSBwYXNzZXMgdGhhdCB3YW50IHRvCisgICAgIGFzc2lnbiBJRHMgdG8gc3RhdGVtZW50cy4gIEl0IG11c3QgYmUgYXNzaWduZWQgYW5kIHVzZWQgYnkgZWFjaAorICAgICBwYXNzLiAgQnkgZGVmYXVsdCBpdCBzaG91bGQgYmUgYXNzdW1lZCB0byBjb250YWluIGdhcmJhZ2UuICAqLworICB1bnNpZ25lZCB1aWQ7CisKKyAgLyogWyBXT1JEIDIgXQorICAgICBMb2N1cyBpbmZvcm1hdGlvbiBmb3IgZGVidWcgaW5mby4gICovCisgIGxvY2F0aW9uX3QgbG9jYXRpb247CisKKyAgLyogTnVtYmVyIG9mIG9wZXJhbmRzIGluIHRoaXMgdHVwbGUuICAqLworICB1bnNpZ25lZCBudW1fb3BzOworCisgIC8qIFsgV09SRCAzIF0KKyAgICAgQmFzaWMgYmxvY2sgaG9sZGluZyB0aGlzIHN0YXRlbWVudC4gICovCisgIHN0cnVjdCBiYXNpY19ibG9ja19kZWYgKmJiOworCisgIC8qIFsgV09SRCA0IF0KKyAgICAgTGV4aWNhbCBibG9jayBob2xkaW5nIHRoaXMgc3RhdGVtZW50LiAgKi8KKyAgdHJlZSBibG9jazsKK307CisKKworLyogQmFzZSBzdHJ1Y3R1cmUgZm9yIHR1cGxlcyB3aXRoIG9wZXJhbmRzLiAgKi8KKworc3RydWN0IEdUWSgoKSkgZ2ltcGxlX3N0YXRlbWVudF93aXRoX29wc19iYXNlCit7CisgIC8qIFsgV09SRCAxLTQgXSAgKi8KKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfYmFzZSBnc2Jhc2U7CisKKyAgLyogWyBXT1JEIDUtNiBdCisgICAgIFNTQSBvcGVyYW5kIHZlY3RvcnMuICBOT1RFOiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8KKyAgICAgYW1hbGdhbWF0ZSB0aGVzZSB2ZWN0b3JzIHdpdGggdGhlIG9wZXJhbmQgdmVjdG9yIE9QLiAgSG93ZXZlciwKKyAgICAgdGhlIFNTQSBvcGVyYW5kIHZlY3RvcnMgYXJlIG9yZ2FuaXplZCBkaWZmZXJlbnRseSBhbmQgY29udGFpbgorICAgICBtb3JlIGluZm9ybWF0aW9uIChsaWtlIGltbWVkaWF0ZSB1c2UgY2hhaW5pbmcpLiAgKi8KKyAgc3RydWN0IGRlZl9vcHR5cGVfZCBHVFkoKHNraXAgKCIiKSkpICpkZWZfb3BzOworICBzdHJ1Y3QgdXNlX29wdHlwZV9kIEdUWSgoc2tpcCAoIiIpKSkgKnVzZV9vcHM7Cit9OworCisKKy8qIFN0YXRlbWVudHMgdGhhdCB0YWtlIHJlZ2lzdGVyIG9wZXJhbmRzLiAgKi8KKworc3RydWN0IEdUWSgoKSkgZ2ltcGxlX3N0YXRlbWVudF93aXRoX29wcworeworICAvKiBbIFdPUkQgMS02IF0gICovCisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3dpdGhfb3BzX2Jhc2Ugb3BiYXNlOworCisgIC8qIFsgV09SRCA3IF0KKyAgICAgT3BlcmFuZCB2ZWN0b3IuICBOT1RFISAgVGhpcyBtdXN0IGFsd2F5cyBiZSB0aGUgbGFzdCBmaWVsZAorICAgICBvZiB0aGlzIHN0cnVjdHVyZS4gIEluIHBhcnRpY3VsYXIsIHRoaXMgbWVhbnMgdGhhdCB0aGlzCisgICAgIHN0cnVjdHVyZSBjYW5ub3QgYmUgZW1iZWRkZWQgaW5zaWRlIGFub3RoZXIgb25lLiAgKi8KKyAgdHJlZSBHVFkoKGxlbmd0aCAoIiVoLm9wYmFzZS5nc2Jhc2UubnVtX29wcyIpKSkgb3BbMV07Cit9OworCisKKy8qIEJhc2UgZm9yIHN0YXRlbWVudHMgdGhhdCB0YWtlIGJvdGggbWVtb3J5IGFuZCByZWdpc3RlciBvcGVyYW5kcy4gICovCisKK3N0cnVjdCBHVFkoKCkpIGdpbXBsZV9zdGF0ZW1lbnRfd2l0aF9tZW1vcnlfb3BzX2Jhc2UKK3sKKyAgLyogWyBXT1JEIDEtNiBdICAqLworICBzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF93aXRoX29wc19iYXNlIG9wYmFzZTsKKworICAvKiBbIFdPUkQgNy04IF0KKyAgICAgVmlydHVhbCBvcGVyYW5kcyBmb3IgdGhpcyBzdGF0ZW1lbnQuICBUaGUgR0Mgd2lsbCBwaWNrIHRoZW0KKyAgICAgdXAgdmlhIHRoZSBzc2FfbmFtZXMgYXJyYXkuICAqLworICB0cmVlIEdUWSgoc2tpcCAoIiIpKSkgdmRlZjsKKyAgdHJlZSBHVFkoKHNraXAgKCIiKSkpIHZ1c2U7Cit9OworCisKKy8qIFN0YXRlbWVudHMgdGhhdCB0YWtlIGJvdGggbWVtb3J5IGFuZCByZWdpc3RlciBvcGVyYW5kcy4gICovCisKK3N0cnVjdCBHVFkoKCkpIGdpbXBsZV9zdGF0ZW1lbnRfd2l0aF9tZW1vcnlfb3BzCit7CisgIC8qIFsgV09SRCAxLTggXSAgKi8KKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfd2l0aF9tZW1vcnlfb3BzX2Jhc2UgbWVtYmFzZTsKKworICAvKiBbIFdPUkQgOSBdCisgICAgIE9wZXJhbmQgdmVjdG9yLiAgTk9URSEgIFRoaXMgbXVzdCBhbHdheXMgYmUgdGhlIGxhc3QgZmllbGQKKyAgICAgb2YgdGhpcyBzdHJ1Y3R1cmUuICBJbiBwYXJ0aWN1bGFyLCB0aGlzIG1lYW5zIHRoYXQgdGhpcworICAgICBzdHJ1Y3R1cmUgY2Fubm90IGJlIGVtYmVkZGVkIGluc2lkZSBhbm90aGVyIG9uZS4gICovCisgIHRyZWUgR1RZKChsZW5ndGggKCIlaC5tZW1iYXNlLm9wYmFzZS5nc2Jhc2UubnVtX29wcyIpKSkgb3BbMV07Cit9OworCisKKy8qIE9wZW5NUCBzdGF0ZW1lbnRzICgjcHJhZ21hIG9tcCkuICAqLworCitzdHJ1Y3QgR1RZKCgpKSBnaW1wbGVfc3RhdGVtZW50X29tcCB7CisgIC8qIFsgV09SRCAxLTQgXSAgKi8KKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfYmFzZSBnc2Jhc2U7CisKKyAgLyogWyBXT1JEIDUgXSAgKi8KKyAgZ2ltcGxlX3NlcSBib2R5OworfTsKKworCisvKiBHSU1QTEVfQklORCAqLworCitzdHJ1Y3QgR1RZKCgpKSBnaW1wbGVfc3RhdGVtZW50X2JpbmQgeworICAvKiBbIFdPUkQgMS00IF0gICovCisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2Jhc2UgZ3NiYXNlOworCisgIC8qIFsgV09SRCA1IF0KKyAgICAgVmFyaWFibGVzIGRlY2xhcmVkIGluIHRoaXMgc2NvcGUuICAqLworICB0cmVlIHZhcnM7CisKKyAgLyogWyBXT1JEIDYgXQorICAgICBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBCTE9DSyBmaWVsZCBpbiBnaW1wbGVfc3RhdGVtZW50X2Jhc2UsCisgICAgIHdoaWNoIGlzIGFuYWxvZ291cyB0byBUUkVFX0JMT0NLIChpLmUuLCB0aGUgbGV4aWNhbCBibG9jayBob2xkaW5nCisgICAgIHRoaXMgc3RhdGVtZW50KS4gIFRoaXMgZmllbGQgaXMgdGhlIGVxdWl2YWxlbnQgb2YgQklORF9FWFBSX0JMT0NLCisgICAgIGluIHRyZWUgbGFuZCAoaS5lLiwgdGhlIGxleGljYWwgc2NvcGUgZGVmaW5lZCBieSB0aGlzIGJpbmQpLiAgU2VlCisgICAgIGdpbXBsZS1sb3cuYy4gICovCisgIHRyZWUgYmxvY2s7CisKKyAgLyogWyBXT1JEIDcgXSAgKi8KKyAgZ2ltcGxlX3NlcSBib2R5OworfTsKKworCisvKiBHSU1QTEVfQ0FUQ0ggKi8KKworc3RydWN0IEdUWSgoKSkgZ2ltcGxlX3N0YXRlbWVudF9jYXRjaCB7CisgIC8qIFsgV09SRCAxLTQgXSAgKi8KKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfYmFzZSBnc2Jhc2U7CisKKyAgLyogWyBXT1JEIDUgXSAgKi8KKyAgdHJlZSB0eXBlczsKKworICAvKiBbIFdPUkQgNiBdICAqLworICBnaW1wbGVfc2VxIGhhbmRsZXI7Cit9OworCisKKy8qIEdJTVBMRV9FSF9GSUxURVIgKi8KKworc3RydWN0IEdUWSgoKSkgZ2ltcGxlX3N0YXRlbWVudF9laF9maWx0ZXIgeworICAvKiBbIFdPUkQgMS00IF0gICovCisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2Jhc2UgZ3NiYXNlOworCisgIC8qIFsgV09SRCA1IF0KKyAgICAgRmlsdGVyIHR5cGVzLiAgKi8KKyAgdHJlZSB0eXBlczsKKworICAvKiBbIFdPUkQgNiBdCisgICAgIEZhaWx1cmUgYWN0aW9ucy4gICovCisgIGdpbXBsZV9zZXEgZmFpbHVyZTsKK307CisKKworLyogR0lNUExFX0VIX01VU1RfTk9UX1RIUk9XICovCisKK3N0cnVjdCBHVFkoKCkpIGdpbXBsZV9zdGF0ZW1lbnRfZWhfbW50IHsKKyAgLyogWyBXT1JEIDEtNCBdICAqLworICBzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9iYXNlIGdzYmFzZTsKKworICAvKiBbIFdPUkQgNSBdIEFib3J0IGZ1bmN0aW9uIGRlY2wuICAqLworICB0cmVlIGZuZGVjbDsKK307CisKKy8qIEdJTVBMRV9QSEkgKi8KKworc3RydWN0IEdUWSgoKSkgZ2ltcGxlX3N0YXRlbWVudF9waGkgeworICAvKiBbIFdPUkQgMS00IF0gICovCisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2Jhc2UgZ3NiYXNlOworCisgIC8qIFsgV09SRCA1IF0gICovCisgIHVuc2lnbmVkIGNhcGFjaXR5OworICB1bnNpZ25lZCBuYXJnczsKKworICAvKiBbIFdPUkQgNiBdICAqLworICB0cmVlIHJlc3VsdDsKKworICAvKiBbIFdPUkQgNyBdICAqLworICBzdHJ1Y3QgcGhpX2FyZ19kIEdUWSAoKGxlbmd0aCAoIiVoLm5hcmdzIikpKSBhcmdzWzFdOworfTsKKworCisvKiBHSU1QTEVfUkVTWCwgR0lNUExFX0VIX0RJU1BBVENIICovCisKK3N0cnVjdCBHVFkoKCkpIGdpbXBsZV9zdGF0ZW1lbnRfZWhfY3RybAoreworICAvKiBbIFdPUkQgMS00IF0gICovCisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2Jhc2UgZ3NiYXNlOworCisgIC8qIFsgV09SRCA1IF0KKyAgICAgRXhjZXB0aW9uIHJlZ2lvbiBudW1iZXIuICAqLworICBpbnQgcmVnaW9uOworfTsKKworCisvKiBHSU1QTEVfVFJZICovCisKK3N0cnVjdCBHVFkoKCkpIGdpbXBsZV9zdGF0ZW1lbnRfdHJ5IHsKKyAgLyogWyBXT1JEIDEtNCBdICAqLworICBzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9iYXNlIGdzYmFzZTsKKworICAvKiBbIFdPUkQgNSBdCisgICAgIEV4cHJlc3Npb24gdG8gZXZhbHVhdGUuICAqLworICBnaW1wbGVfc2VxIGV2YWw7CisKKyAgLyogWyBXT1JEIDYgXQorICAgICBDbGVhbnVwIGV4cHJlc3Npb24uICAqLworICBnaW1wbGVfc2VxIGNsZWFudXA7Cit9OworCisvKiBLaW5kIG9mIEdJTVBMRV9UUlkgc3RhdGVtZW50cy4gICovCitlbnVtIGdpbXBsZV90cnlfZmxhZ3MKK3sKKyAgLyogQSB0cnkvY2F0Y2guICAqLworICBHSU1QTEVfVFJZX0NBVENIID0gMSA8PCAwLAorCisgIC8qIEEgdHJ5L2ZpbmFsbHkuICAqLworICBHSU1QTEVfVFJZX0ZJTkFMTFkgPSAxIDw8IDEsCisgIEdJTVBMRV9UUllfS0lORCA9IEdJTVBMRV9UUllfQ0FUQ0ggfCBHSU1QTEVfVFJZX0ZJTkFMTFksCisKKyAgLyogQW5hbG9nb3VzIHRvIFRSWV9DQVRDSF9JU19DTEVBTlVQLiAgKi8KKyAgR0lNUExFX1RSWV9DQVRDSF9JU19DTEVBTlVQID0gMSA8PCAyCit9OworCisvKiBHSU1QTEVfV0lUSF9DTEVBTlVQX0VYUFIgKi8KKworc3RydWN0IEdUWSgoKSkgZ2ltcGxlX3N0YXRlbWVudF93Y2UgeworICAvKiBbIFdPUkQgMS00IF0gICovCisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2Jhc2UgZ3NiYXNlOworCisgIC8qIFN1YmNvZGU6IENMRUFOVVBfRUhfT05MWS4gIFRydWUgaWYgdGhlIGNsZWFudXAgc2hvdWxkIG9ubHkgYmUKKwkgICAgICBleGVjdXRlZCBpZiBhbiBleGNlcHRpb24gaXMgdGhyb3duLCBub3Qgb24gbm9ybWFsIGV4aXQgb2YgaXRzCisJICAgICAgc2NvcGUuICBUaGlzIGZsYWcgaXMgYW5hbG9nb3VzIHRvIHRoZSBDTEVBTlVQX0VIX09OTFkgZmxhZworCSAgICAgIGluIFRBUkdFVF9FWFBScy4gICovCisKKyAgLyogWyBXT1JEIDUgXQorICAgICBDbGVhbnVwIGV4cHJlc3Npb24uICAqLworICBnaW1wbGVfc2VxIGNsZWFudXA7Cit9OworCisKKy8qIEdJTVBMRV9BU00gICovCisKK3N0cnVjdCBHVFkoKCkpIGdpbXBsZV9zdGF0ZW1lbnRfYXNtCit7CisgIC8qIFsgV09SRCAxLTggXSAgKi8KKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfd2l0aF9tZW1vcnlfb3BzX2Jhc2UgbWVtYmFzZTsKKworICAvKiBbIFdPUkQgOSBdCisgICAgIF9fYXNtX18gc3RhdGVtZW50LiAgKi8KKyAgY29uc3QgY2hhciAqc3RyaW5nOworCisgIC8qIFsgV09SRCAxMCBdCisgICAgICAgTnVtYmVyIG9mIGlucHV0cywgb3V0cHV0cywgY2xvYmJlcnMsIGxhYmVscy4gICovCisgIHVuc2lnbmVkIGNoYXIgbmk7CisgIHVuc2lnbmVkIGNoYXIgbm87CisgIHVuc2lnbmVkIGNoYXIgbmM7CisgIHVuc2lnbmVkIGNoYXIgbmw7CisKKyAgLyogWyBXT1JEIDExIF0KKyAgICAgT3BlcmFuZCB2ZWN0b3IuICBOT1RFISAgVGhpcyBtdXN0IGFsd2F5cyBiZSB0aGUgbGFzdCBmaWVsZAorICAgICBvZiB0aGlzIHN0cnVjdHVyZS4gIEluIHBhcnRpY3VsYXIsIHRoaXMgbWVhbnMgdGhhdCB0aGlzCisgICAgIHN0cnVjdHVyZSBjYW5ub3QgYmUgZW1iZWRkZWQgaW5zaWRlIGFub3RoZXIgb25lLiAgKi8KKyAgdHJlZSBHVFkoKGxlbmd0aCAoIiVoLm1lbWJhc2Uub3BiYXNlLmdzYmFzZS5udW1fb3BzIikpKSBvcFsxXTsKK307CisKKy8qIEdJTVBMRV9PTVBfQ1JJVElDQUwgKi8KKworc3RydWN0IEdUWSgoKSkgZ2ltcGxlX3N0YXRlbWVudF9vbXBfY3JpdGljYWwgeworICAvKiBbIFdPUkQgMS01IF0gICovCisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcCBvbXA7CisKKyAgLyogWyBXT1JEIDYgXQorICAgICBDcml0aWNhbCBzZWN0aW9uIG5hbWUuICAqLworICB0cmVlIG5hbWU7Cit9OworCisKK3N0cnVjdCBHVFkoKCkpIGdpbXBsZV9vbXBfZm9yX2l0ZXIgeworICAvKiBDb25kaXRpb24gY29kZS4gICovCisgIGVudW0gdHJlZV9jb2RlIGNvbmQ7CisKKyAgLyogSW5kZXggdmFyaWFibGUuICAqLworICB0cmVlIGluZGV4OworCisgIC8qIEluaXRpYWwgdmFsdWUuICAqLworICB0cmVlIGluaXRpYWw7CisKKyAgLyogRmluYWwgdmFsdWUuICAqLworICB0cmVlIGZpbmFsOworCisgIC8qIEluY3JlbWVudC4gICovCisgIHRyZWUgaW5jcjsKK307CisKKy8qIEdJTVBMRV9PTVBfRk9SICovCisKK3N0cnVjdCBHVFkoKCkpIGdpbXBsZV9zdGF0ZW1lbnRfb21wX2ZvciB7CisgIC8qIFsgV09SRCAxLTUgXSAgKi8KKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wIG9tcDsKKworICAvKiBbIFdPUkQgNiBdICAqLworICB0cmVlIGNsYXVzZXM7CisKKyAgLyogWyBXT1JEIDcgXQorICAgICBOdW1iZXIgb2YgZWxlbWVudHMgaW4gaXRlciBhcnJheS4gICovCisgIHNpemVfdCBjb2xsYXBzZTsKKworICAvKiBbIFdPUkQgOCBdICAqLworICBzdHJ1Y3QgZ2ltcGxlX29tcF9mb3JfaXRlciAqIEdUWSgobGVuZ3RoICgiJWguY29sbGFwc2UiKSkpIGl0ZXI7CisKKyAgLyogWyBXT1JEIDkgXQorICAgICBQcmUtYm9keSBldmFsdWF0ZWQgYmVmb3JlIHRoZSBsb29wIGJvZHkgYmVnaW5zLiAgKi8KKyAgZ2ltcGxlX3NlcSBwcmVfYm9keTsKK307CisKKworLyogR0lNUExFX09NUF9QQVJBTExFTCAqLworCitzdHJ1Y3QgR1RZKCgpKSBnaW1wbGVfc3RhdGVtZW50X29tcF9wYXJhbGxlbCB7CisgIC8qIFsgV09SRCAxLTUgXSAgKi8KKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wIG9tcDsKKworICAvKiBbIFdPUkQgNiBdCisgICAgIENsYXVzZXMuICAqLworICB0cmVlIGNsYXVzZXM7CisKKyAgLyogWyBXT1JEIDcgXQorICAgICBDaGlsZCBmdW5jdGlvbiBob2xkaW5nIHRoZSBib2R5IG9mIHRoZSBwYXJhbGxlbCByZWdpb24uICAqLworICB0cmVlIGNoaWxkX2ZuOworCisgIC8qIFsgV09SRCA4IF0KKyAgICAgU2hhcmVkIGRhdGEgYXJndW1lbnQuICAqLworICB0cmVlIGRhdGFfYXJnOworfTsKKworCisvKiBHSU1QTEVfT01QX1RBU0sgKi8KKworc3RydWN0IEdUWSgoKSkgZ2ltcGxlX3N0YXRlbWVudF9vbXBfdGFzayB7CisgIC8qIFsgV09SRCAxLTggXSAgKi8KKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX3BhcmFsbGVsIHBhcjsKKworICAvKiBbIFdPUkQgOSBdCisgICAgIENoaWxkIGZ1bmN0aW9uIGhvbGRpbmcgZmlyc3Rwcml2YXRlIGluaXRpYWxpemF0aW9uIGlmIG5lZWRlZC4gICovCisgIHRyZWUgY29weV9mbjsKKworICAvKiBbIFdPUkQgMTAtMTEgXQorICAgICBTaXplIGFuZCBhbGlnbm1lbnQgaW4gYnl0ZXMgb2YgdGhlIGFyZ3VtZW50IGRhdGEgYmxvY2suICAqLworICB0cmVlIGFyZ19zaXplOworICB0cmVlIGFyZ19hbGlnbjsKK307CisKKworLyogR0lNUExFX09NUF9TRUNUSU9OICovCisvKiBVc2VzIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcC4gICovCisKKworLyogR0lNUExFX09NUF9TRUNUSU9OUyAqLworCitzdHJ1Y3QgR1RZKCgpKSBnaW1wbGVfc3RhdGVtZW50X29tcF9zZWN0aW9ucyB7CisgIC8qIFsgV09SRCAxLTUgXSAgKi8KKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wIG9tcDsKKworICAvKiBbIFdPUkQgNiBdICAqLworICB0cmVlIGNsYXVzZXM7CisKKyAgLyogWyBXT1JEIDcgXQorICAgICBUaGUgY29udHJvbCB2YXJpYWJsZSB1c2VkIGZvciBkZWNpZGluZyB3aGljaCBvZiB0aGUgc2VjdGlvbnMgdG8KKyAgICAgZXhlY3V0ZS4gICovCisgIHRyZWUgY29udHJvbDsKK307CisKKy8qIEdJTVBMRV9PTVBfQ09OVElOVUUuCisKKyAgIE5vdGU6IFRoaXMgZG9lcyBub3QgaW5oZXJpdCBmcm9tIGdpbXBsZV9zdGF0ZW1lbnRfb21wLCBiZWNhdXNlIHdlCisgICAgICAgICBkbyBub3QgbmVlZCB0aGUgYm9keSBmaWVsZC4gICovCisKK3N0cnVjdCBHVFkoKCkpIGdpbXBsZV9zdGF0ZW1lbnRfb21wX2NvbnRpbnVlIHsKKyAgLyogWyBXT1JEIDEtNCBdICAqLworICBzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9iYXNlIGdzYmFzZTsKKworICAvKiBbIFdPUkQgNSBdICAqLworICB0cmVlIGNvbnRyb2xfZGVmOworCisgIC8qIFsgV09SRCA2IF0gICovCisgIHRyZWUgY29udHJvbF91c2U7Cit9OworCisvKiBHSU1QTEVfT01QX1NJTkdMRSAqLworCitzdHJ1Y3QgR1RZKCgpKSBnaW1wbGVfc3RhdGVtZW50X29tcF9zaW5nbGUgeworICAvKiBbIFdPUkQgMS01IF0gICovCisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcCBvbXA7CisKKyAgLyogWyBXT1JEIDYgXSAgKi8KKyAgdHJlZSBjbGF1c2VzOworfTsKKworCisvKiBHSU1QTEVfT01QX0FUT01JQ19MT0FELgorICAgTm90ZTogVGhpcyBpcyBiYXNlZCBvbiBnaW1wbGVfc3RhdGVtZW50X2Jhc2UsIG5vdCBnX3Nfb21wLCBiZWNhdXNlIGdfc19vbXAKKyAgIGNvbnRhaW5zIGEgc2VxdWVuY2UsIHdoaWNoIHdlIGRvbid0IG5lZWQgaGVyZS4gICovCisKK3N0cnVjdCBHVFkoKCkpIGdpbXBsZV9zdGF0ZW1lbnRfb21wX2F0b21pY19sb2FkIHsKKyAgLyogWyBXT1JEIDEtNCBdICAqLworICBzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9iYXNlIGdzYmFzZTsKKworICAvKiBbIFdPUkQgNS02IF0gICovCisgIHRyZWUgcmhzLCBsaHM7Cit9OworCisvKiBHSU1QTEVfT01QX0FUT01JQ19TVE9SRS4KKyAgIFNlZSBub3RlIG9uIEdJTVBMRV9PTVBfQVRPTUlDX0xPQUQuICAqLworCitzdHJ1Y3QgR1RZKCgpKSBnaW1wbGVfc3RhdGVtZW50X29tcF9hdG9taWNfc3RvcmUgeworICAvKiBbIFdPUkQgMS00IF0gICovCisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2Jhc2UgZ3NiYXNlOworCisgIC8qIFsgV09SRCA1IF0gICovCisgIHRyZWUgdmFsOworfTsKKworI2RlZmluZSBERUZHU1NUUlVDVChTWU0sIFNUUlVDVCwgSEFTX1RSRUVfT1ApCVNZTSwKK2VudW0gZ2ltcGxlX3N0YXRlbWVudF9zdHJ1Y3R1cmVfZW51bSB7CisjaW5jbHVkZSAiZ3NzdHJ1Y3QuZGVmIgorICAgIExBU1RfR1NTX0VOVU0KK307CisjdW5kZWYgREVGR1NTVFJVQ1QKKworCisvKiBEZWZpbmUgdGhlIG92ZXJhbGwgY29udGVudHMgb2YgYSBnaW1wbGUgdHVwbGUuICBJdCBtYXkgYmUgYW55IG9mIHRoZQorICAgc3RydWN0dXJlcyBkZWNsYXJlZCBhYm92ZSBmb3IgdmFyaW91cyB0eXBlcyBvZiB0dXBsZXMuICAqLworCit1bmlvbiBHVFkgKChkZXNjICgiZ2ltcGxlX3N0YXRlbWVudF9zdHJ1Y3R1cmUgKCYlaCkiKSkpIGdpbXBsZV9zdGF0ZW1lbnRfZCB7CisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2Jhc2UgR1RZICgodGFnICgiR1NTX0JBU0UiKSkpIGdzYmFzZTsKKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfd2l0aF9vcHMgR1RZICgodGFnICgiR1NTX1dJVEhfT1BTIikpKSBnc29wczsKKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfd2l0aF9tZW1vcnlfb3BzX2Jhc2UgR1RZICgodGFnICgiR1NTX1dJVEhfTUVNX09QU19CQVNFIikpKSBnc21lbWJhc2U7CisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3dpdGhfbWVtb3J5X29wcyBHVFkgKCh0YWcgKCJHU1NfV0lUSF9NRU1fT1BTIikpKSBnc21lbTsKKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wIEdUWSAoKHRhZyAoIkdTU19PTVAiKSkpIG9tcDsKKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfYmluZCBHVFkgKCh0YWcgKCJHU1NfQklORCIpKSkgZ2ltcGxlX2JpbmQ7CisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2NhdGNoIEdUWSAoKHRhZyAoIkdTU19DQVRDSCIpKSkgZ2ltcGxlX2NhdGNoOworICBzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9laF9maWx0ZXIgR1RZICgodGFnICgiR1NTX0VIX0ZJTFRFUiIpKSkgZ2ltcGxlX2VoX2ZpbHRlcjsKKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfZWhfbW50IEdUWSAoKHRhZyAoIkdTU19FSF9NTlQiKSkpIGdpbXBsZV9laF9tbnQ7CisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3BoaSBHVFkgKCh0YWcgKCJHU1NfUEhJIikpKSBnaW1wbGVfcGhpOworICBzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9laF9jdHJsIEdUWSAoKHRhZyAoIkdTU19FSF9DVFJMIikpKSBnaW1wbGVfZWhfY3RybDsKKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfdHJ5IEdUWSAoKHRhZyAoIkdTU19UUlkiKSkpIGdpbXBsZV90cnk7CisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3djZSBHVFkgKCh0YWcgKCJHU1NfV0NFIikpKSBnaW1wbGVfd2NlOworICBzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9hc20gR1RZICgodGFnICgiR1NTX0FTTSIpKSkgZ2ltcGxlX2FzbTsKKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX2NyaXRpY2FsIEdUWSAoKHRhZyAoIkdTU19PTVBfQ1JJVElDQUwiKSkpIGdpbXBsZV9vbXBfY3JpdGljYWw7CisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9mb3IgR1RZICgodGFnICgiR1NTX09NUF9GT1IiKSkpIGdpbXBsZV9vbXBfZm9yOworICBzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfcGFyYWxsZWwgR1RZICgodGFnICgiR1NTX09NUF9QQVJBTExFTCIpKSkgZ2ltcGxlX29tcF9wYXJhbGxlbDsKKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX3Rhc2sgR1RZICgodGFnICgiR1NTX09NUF9UQVNLIikpKSBnaW1wbGVfb21wX3Rhc2s7CisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9zZWN0aW9ucyBHVFkgKCh0YWcgKCJHU1NfT01QX1NFQ1RJT05TIikpKSBnaW1wbGVfb21wX3NlY3Rpb25zOworICBzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfc2luZ2xlIEdUWSAoKHRhZyAoIkdTU19PTVBfU0lOR0xFIikpKSBnaW1wbGVfb21wX3NpbmdsZTsKKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX2NvbnRpbnVlIEdUWSAoKHRhZyAoIkdTU19PTVBfQ09OVElOVUUiKSkpIGdpbXBsZV9vbXBfY29udGludWU7CisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9hdG9taWNfbG9hZCBHVFkgKCh0YWcgKCJHU1NfT01QX0FUT01JQ19MT0FEIikpKSBnaW1wbGVfb21wX2F0b21pY19sb2FkOworICBzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfYXRvbWljX3N0b3JlIEdUWSAoKHRhZyAoIkdTU19PTVBfQVRPTUlDX1NUT1JFIikpKSBnaW1wbGVfb21wX2F0b21pY19zdG9yZTsKK307CisKKy8qIEluIGdpbXBsZS5jLiAgKi8KKworLyogT2Zmc2V0IGluIGJ5dGVzIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgb3BlcmFuZCB2ZWN0b3IuCisgICBaZXJvIGlmIHRoZXJlIGlzIG5vIG9wZXJhbmQgdmVjdG9yIGZvciB0aGlzIHR1cGxlIHN0cnVjdHVyZS4gICovCitleHRlcm4gc2l6ZV90IGNvbnN0IGdpbXBsZV9vcHNfb2Zmc2V0X1tdOworCisvKiBNYXAgR0lNUExFIGNvZGVzIHRvIEdTUyBjb2Rlcy4gICovCitleHRlcm4gZW51bSBnaW1wbGVfc3RhdGVtZW50X3N0cnVjdHVyZV9lbnVtIGNvbnN0IGdzc19mb3JfY29kZV9bXTsKKworLyogVGhpcyB2YXJpYWJsZSBob2xkcyB0aGUgY3VycmVudGx5IGV4cGFuZGVkIGdpbXBsZSBzdGF0ZW1lbnQgZm9yIHB1cnBvc2VzCisgICBvZiBjb21taW51Y2F0aW5nIHRoZSBwcm9maWxlIGluZm8gdG8gdGhlIGJ1aWx0aW4gZXhwYW5kZXJzLiAgKi8KK2V4dGVybiBnaW1wbGUgY3VycmVudGx5X2V4cGFuZGluZ19naW1wbGVfc3RtdDsKKworZ2ltcGxlIGdpbXBsZV9idWlsZF9yZXR1cm4gKHRyZWUpOworCitnaW1wbGUgZ2ltcGxlX2J1aWxkX2Fzc2lnbl9zdGF0ICh0cmVlLCB0cmVlIE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBnaW1wbGVfYnVpbGRfYXNzaWduKGwscikgZ2ltcGxlX2J1aWxkX2Fzc2lnbl9zdGF0IChsLCByIE1FTV9TVEFUX0lORk8pCisKK3ZvaWQgZXh0cmFjdF9vcHNfZnJvbV90cmVlICh0cmVlLCBlbnVtIHRyZWVfY29kZSAqLCB0cmVlICosIHRyZWUgKik7CisKK2dpbXBsZSBnaW1wbGVfYnVpbGRfYXNzaWduX3dpdGhfb3BzX3N0YXQgKGVudW0gdHJlZV9jb2RlLCB0cmVlLCB0cmVlLAorCQkJCQkgIHRyZWUgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGdpbXBsZV9idWlsZF9hc3NpZ25fd2l0aF9vcHMoYyxvMSxvMixvMykgXAorICBnaW1wbGVfYnVpbGRfYXNzaWduX3dpdGhfb3BzX3N0YXQgKGMsIG8xLCBvMiwgbzMgTUVNX1NUQVRfSU5GTykKKworZ2ltcGxlIGdpbXBsZV9idWlsZF9kZWJ1Z19iaW5kX3N0YXQgKHRyZWUsIHRyZWUsIGdpbXBsZSBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgZ2ltcGxlX2J1aWxkX2RlYnVnX2JpbmQodmFyLHZhbCxzdG10KQkJCVwKKyAgZ2ltcGxlX2J1aWxkX2RlYnVnX2JpbmRfc3RhdCAoKHZhciksICh2YWwpLCAoc3RtdCkgTUVNX1NUQVRfSU5GTykKKworZ2ltcGxlIGdpbXBsZV9idWlsZF9jYWxsX3ZlYyAodHJlZSwgVkVDKHRyZWUsIGhlYXApICopOworZ2ltcGxlIGdpbXBsZV9idWlsZF9jYWxsICh0cmVlLCB1bnNpZ25lZCwgLi4uKTsKK2dpbXBsZSBnaW1wbGVfYnVpbGRfY2FsbF9mcm9tX3RyZWUgKHRyZWUpOworZ2ltcGxlIGdpbXBsaWZ5X2Fzc2lnbiAodHJlZSwgdHJlZSwgZ2ltcGxlX3NlcSAqKTsKK2dpbXBsZSBnaW1wbGVfYnVpbGRfY29uZCAoZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUpOworZ2ltcGxlIGdpbXBsZV9idWlsZF9sYWJlbCAodHJlZSBsYWJlbCk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX2dvdG8gKHRyZWUgZGVzdCk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX25vcCAodm9pZCk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX2JpbmQgKHRyZWUsIGdpbXBsZV9zZXEsIHRyZWUpOworZ2ltcGxlIGdpbXBsZV9idWlsZF9hc21fdmVjIChjb25zdCBjaGFyICosIFZFQyh0cmVlLGdjKSAqLCBWRUModHJlZSxnYykgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkVDKHRyZWUsZ2MpICosIFZFQyh0cmVlLGdjKSAqKTsKK2dpbXBsZSBnaW1wbGVfYnVpbGRfY2F0Y2ggKHRyZWUsIGdpbXBsZV9zZXEpOworZ2ltcGxlIGdpbXBsZV9idWlsZF9laF9maWx0ZXIgKHRyZWUsIGdpbXBsZV9zZXEpOworZ2ltcGxlIGdpbXBsZV9idWlsZF9laF9tdXN0X25vdF90aHJvdyAodHJlZSk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX3RyeSAoZ2ltcGxlX3NlcSwgZ2ltcGxlX3NlcSwgZW51bSBnaW1wbGVfdHJ5X2ZsYWdzKTsKK2dpbXBsZSBnaW1wbGVfYnVpbGRfd2NlIChnaW1wbGVfc2VxKTsKK2dpbXBsZSBnaW1wbGVfYnVpbGRfcmVzeCAoaW50KTsKK2dpbXBsZSBnaW1wbGVfYnVpbGRfZWhfZGlzcGF0Y2ggKGludCk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX3N3aXRjaF9ubGFiZWxzICh1bnNpZ25lZCwgdHJlZSwgdHJlZSk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX3N3aXRjaCAodW5zaWduZWQsIHRyZWUsIHRyZWUsIC4uLik7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX3N3aXRjaF92ZWMgKHRyZWUsIHRyZWUsIFZFQyh0cmVlLGhlYXApICopOworZ2ltcGxlIGdpbXBsZV9idWlsZF9vbXBfcGFyYWxsZWwgKGdpbXBsZV9zZXEsIHRyZWUsIHRyZWUsIHRyZWUpOworZ2ltcGxlIGdpbXBsZV9idWlsZF9vbXBfdGFzayAoZ2ltcGxlX3NlcSwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX29tcF9mb3IgKGdpbXBsZV9zZXEsIHRyZWUsIHNpemVfdCwgZ2ltcGxlX3NlcSk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX29tcF9jcml0aWNhbCAoZ2ltcGxlX3NlcSwgdHJlZSk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX29tcF9zZWN0aW9uIChnaW1wbGVfc2VxKTsKK2dpbXBsZSBnaW1wbGVfYnVpbGRfb21wX2NvbnRpbnVlICh0cmVlLCB0cmVlKTsKK2dpbXBsZSBnaW1wbGVfYnVpbGRfb21wX21hc3RlciAoZ2ltcGxlX3NlcSk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX29tcF9yZXR1cm4gKGJvb2wpOworZ2ltcGxlIGdpbXBsZV9idWlsZF9vbXBfb3JkZXJlZCAoZ2ltcGxlX3NlcSk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX29tcF9zZWN0aW9ucyAoZ2ltcGxlX3NlcSwgdHJlZSk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX29tcF9zZWN0aW9uc19zd2l0Y2ggKHZvaWQpOworZ2ltcGxlIGdpbXBsZV9idWlsZF9vbXBfc2luZ2xlIChnaW1wbGVfc2VxLCB0cmVlKTsKK2dpbXBsZSBnaW1wbGVfYnVpbGRfY2R0ICh0cmVlLCB0cmVlKTsKK2dpbXBsZSBnaW1wbGVfYnVpbGRfb21wX2F0b21pY19sb2FkICh0cmVlLCB0cmVlKTsKK2dpbXBsZSBnaW1wbGVfYnVpbGRfb21wX2F0b21pY19zdG9yZSAodHJlZSk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX3ByZWRpY3QgKGVudW0gYnJfcHJlZGljdG9yLCBlbnVtIHByZWRpY3Rpb24pOworZW51bSBnaW1wbGVfc3RhdGVtZW50X3N0cnVjdHVyZV9lbnVtIGdzc19mb3JfYXNzaWduIChlbnVtIHRyZWVfY29kZSk7Cit2b2lkIHNvcnRfY2FzZV9sYWJlbHMgKFZFQyh0cmVlLGhlYXApICopOwordm9pZCBnaW1wbGVfc2V0X2JvZHkgKHRyZWUsIGdpbXBsZV9zZXEpOworZ2ltcGxlX3NlcSBnaW1wbGVfYm9keSAodHJlZSk7Citib29sIGdpbXBsZV9oYXNfYm9keV9wICh0cmVlKTsKK2dpbXBsZV9zZXEgZ2ltcGxlX3NlcV9hbGxvYyAodm9pZCk7Cit2b2lkIGdpbXBsZV9zZXFfZnJlZSAoZ2ltcGxlX3NlcSk7Cit2b2lkIGdpbXBsZV9zZXFfYWRkX3NlcSAoZ2ltcGxlX3NlcSAqLCBnaW1wbGVfc2VxKTsKK2dpbXBsZV9zZXEgZ2ltcGxlX3NlcV9jb3B5IChnaW1wbGVfc2VxKTsKK2ludCBnaW1wbGVfY2FsbF9mbGFncyAoY29uc3RfZ2ltcGxlKTsKK2Jvb2wgZ2ltcGxlX2Fzc2lnbl9jb3B5X3AgKGdpbXBsZSk7Citib29sIGdpbXBsZV9hc3NpZ25fc3NhX25hbWVfY29weV9wIChnaW1wbGUpOworYm9vbCBnaW1wbGVfYXNzaWduX3NpbmdsZV9wIChnaW1wbGUpOworYm9vbCBnaW1wbGVfYXNzaWduX3VuYXJ5X25vcF9wIChnaW1wbGUpOwordm9pZCBnaW1wbGVfc2V0X2JiIChnaW1wbGUsIHN0cnVjdCBiYXNpY19ibG9ja19kZWYgKik7Cit2b2lkIGdpbXBsZV9hc3NpZ25fc2V0X3Joc19mcm9tX3RyZWUgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICosIHRyZWUpOwordm9pZCBnaW1wbGVfYXNzaWduX3NldF9yaHNfd2l0aF9vcHMgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICosIGVudW0gdHJlZV9jb2RlLAorCQkJCSAgICAgdHJlZSwgdHJlZSk7Cit0cmVlIGdpbXBsZV9nZXRfbGhzIChjb25zdF9naW1wbGUpOwordm9pZCBnaW1wbGVfc2V0X2xocyAoZ2ltcGxlLCB0cmVlKTsKK3ZvaWQgZ2ltcGxlX3JlcGxhY2VfbGhzIChnaW1wbGUsIHRyZWUpOworZ2ltcGxlIGdpbXBsZV9jb3B5IChnaW1wbGUpOworYm9vbCBpc19naW1wbGVfb3BlcmFuZCAoY29uc3RfdHJlZSk7Cit2b2lkIGdpbXBsZV9zZXRfbW9kaWZpZWQgKGdpbXBsZSwgYm9vbCk7Cit2b2lkIGdpbXBsZV9jb25kX2dldF9vcHNfZnJvbV90cmVlICh0cmVlLCBlbnVtIHRyZWVfY29kZSAqLCB0cmVlICosIHRyZWUgKik7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX2NvbmRfZnJvbV90cmVlICh0cmVlLCB0cmVlLCB0cmVlKTsKK3ZvaWQgZ2ltcGxlX2NvbmRfc2V0X2NvbmRpdGlvbl9mcm9tX3RyZWUgKGdpbXBsZSwgdHJlZSk7Citib29sIGdpbXBsZV9oYXNfc2lkZV9lZmZlY3RzIChjb25zdF9naW1wbGUpOworYm9vbCBnaW1wbGVfcmhzX2hhc19zaWRlX2VmZmVjdHMgKGNvbnN0X2dpbXBsZSk7Citib29sIGdpbXBsZV9jb3VsZF90cmFwX3AgKGdpbXBsZSk7Citib29sIGdpbXBsZV9hc3NpZ25fcmhzX2NvdWxkX3RyYXBfcCAoZ2ltcGxlKTsKK3ZvaWQgZ2ltcGxlX3JlZ2ltcGxpZnlfb3BlcmFuZHMgKGdpbXBsZSwgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKik7Citib29sIGVtcHR5X2JvZHlfcCAoZ2ltcGxlX3NlcSk7Cit1bnNpZ25lZCBnZXRfZ2ltcGxlX3Joc19udW1fb3BzIChlbnVtIHRyZWVfY29kZSk7CisjZGVmaW5lIGdpbXBsZV9hbGxvYyhjLCBuKSBnaW1wbGVfYWxsb2Nfc3RhdCAoYywgbiBNRU1fU1RBVF9JTkZPKQorZ2ltcGxlIGdpbXBsZV9hbGxvY19zdGF0IChlbnVtIGdpbXBsZV9jb2RlLCB1bnNpZ25lZCBNRU1fU1RBVF9ERUNMKTsKK2NvbnN0IGNoYXIgKmdpbXBsZV9kZWNsX3ByaW50YWJsZV9uYW1lICh0cmVlLCBpbnQpOwordHJlZSBnaW1wbGVfZm9sZF9vYmpfdHlwZV9yZWYgKHRyZWUsIHRyZWUpOworCisvKiBSZXR1cm5zIHRydWUgaWZmIFQgaXMgYSB2YWxpZCBHSU1QTEUgc3RhdGVtZW50LiAgKi8KK2V4dGVybiBib29sIGlzX2dpbXBsZV9zdG10ICh0cmVlKTsKKworLyogUmV0dXJucyB0cnVlIGlmZiBUWVBFIGlzIGEgdmFsaWQgdHlwZSBmb3IgYSBzY2FsYXIgcmVnaXN0ZXIgdmFyaWFibGUuICAqLworZXh0ZXJuIGJvb2wgaXNfZ2ltcGxlX3JlZ190eXBlICh0cmVlKTsKKy8qIFJldHVybnMgdHJ1ZSBpZmYgVCBpcyBhIHNjYWxhciByZWdpc3RlciB2YXJpYWJsZS4gICovCitleHRlcm4gYm9vbCBpc19naW1wbGVfcmVnICh0cmVlKTsKKy8qIFJldHVybnMgdHJ1ZSBpZmYgVCBpcyBhbnkgc29ydCBvZiB2YXJpYWJsZS4gICovCitleHRlcm4gYm9vbCBpc19naW1wbGVfdmFyaWFibGUgKHRyZWUpOworLyogUmV0dXJucyB0cnVlIGlmZiBUIGlzIGFueSBzb3J0IG9mIHN5bWJvbC4gICovCitleHRlcm4gYm9vbCBpc19naW1wbGVfaWQgKHRyZWUpOworLyogUmV0dXJucyB0cnVlIGlmZiBUIGlzIGEgdmFyaWFibGUgb3IgYW4gSU5ESVJFQ1RfUkVGIChvZiBhIHZhcmlhYmxlKS4gICovCitleHRlcm4gYm9vbCBpc19naW1wbGVfbWluX2x2YWwgKHRyZWUpOworLyogUmV0dXJucyB0cnVlIGlmZiBUIGlzIHNvbWV0aGluZyB3aG9zZSBhZGRyZXNzIGNhbiBiZSB0YWtlbi4gICovCitleHRlcm4gYm9vbCBpc19naW1wbGVfYWRkcmVzc2FibGUgKHRyZWUpOworLyogUmV0dXJucyB0cnVlIGlmZiBUIGlzIGFueSB2YWxpZCBHSU1QTEUgbHZhbHVlLiAgKi8KK2V4dGVybiBib29sIGlzX2dpbXBsZV9sdmFsdWUgKHRyZWUpOworCisvKiBSZXR1cm5zIHRydWUgaWZmIFQgaXMgYSBHSU1QTEUgYWRkcmVzcy4gICovCitib29sIGlzX2dpbXBsZV9hZGRyZXNzIChjb25zdF90cmVlKTsKKy8qIFJldHVybnMgdHJ1ZSBpZmYgVCBpcyBhIEdJTVBMRSBpbnZhcmlhbnQgYWRkcmVzcy4gICovCitib29sIGlzX2dpbXBsZV9pbnZhcmlhbnRfYWRkcmVzcyAoY29uc3RfdHJlZSk7CisvKiBSZXR1cm5zIHRydWUgaWZmIFQgaXMgYSBHSU1QTEUgaW52YXJpYW50IGFkZHJlc3MgYXQgaW50ZXJwcm9jZWR1cmFsCisgICBsZXZlbC4gICovCitib29sIGlzX2dpbXBsZV9pcF9pbnZhcmlhbnRfYWRkcmVzcyAoY29uc3RfdHJlZSk7CisvKiBSZXR1cm5zIHRydWUgaWZmIFQgaXMgYSB2YWxpZCBHSU1QTEUgY29uc3RhbnQuICAqLworYm9vbCBpc19naW1wbGVfY29uc3RhbnQgKGNvbnN0X3RyZWUpOworLyogUmV0dXJucyB0cnVlIGlmZiBUIGlzIGEgR0lNUExFIHJlc3RyaWN0ZWQgZnVuY3Rpb24gaW52YXJpYW50LiAgKi8KK2V4dGVybiBib29sIGlzX2dpbXBsZV9taW5faW52YXJpYW50IChjb25zdF90cmVlKTsKKy8qIFJldHVybnMgdHJ1ZSBpZmYgVCBpcyBhIEdJTVBMRSByZXN0cmljdGVkIGludGVycHJlY29kdXJhbCBpbnZhcmlhbnQuICAqLworZXh0ZXJuIGJvb2wgaXNfZ2ltcGxlX2lwX2ludmFyaWFudCAoY29uc3RfdHJlZSk7CisvKiBSZXR1cm5zIHRydWUgaWZmIFQgaXMgYSBHSU1QTEUgcnZhbHVlLiAgKi8KK2V4dGVybiBib29sIGlzX2dpbXBsZV92YWwgKHRyZWUpOworLyogUmV0dXJucyB0cnVlIGlmZiBUIGlzIGEgR0lNUExFIGFzbSBzdGF0ZW1lbnQgaW5wdXQuICAqLworZXh0ZXJuIGJvb2wgaXNfZ2ltcGxlX2FzbV92YWwgKHRyZWUpOworLyogUmV0dXJucyB0cnVlIGlmZiBUIGlzIGEgdmFsaWQgcmhzIGZvciBhIE1PRElGWV9FWFBSIHdoZXJlIHRoZSBMSFMgaXMgYQorICAgR0lNUExFIHRlbXBvcmFyeSwgYSByZW5hbWVkIHVzZXIgdmFyaWFibGUsIG9yIHNvbWV0aGluZyBlbHNlLAorICAgcmVzcGVjdGl2ZWx5LiAgKi8KK2V4dGVybiBib29sIGlzX2dpbXBsZV9yZWdfcmhzICh0cmVlKTsKK2V4dGVybiBib29sIGlzX2dpbXBsZV9tZW1fcmhzICh0cmVlKTsKKworLyogUmV0dXJucyB0cnVlIGlmZiBUIGlzIGEgdmFsaWQgaWYtc3RhdGVtZW50IGNvbmRpdGlvbi4gICovCitleHRlcm4gYm9vbCBpc19naW1wbGVfY29uZGV4cHIgKHRyZWUpOworCisvKiBSZXR1cm5zIHRydWUgaWZmIFQgaXMgYSB0eXBlIGNvbnZlcnNpb24uICAqLworZXh0ZXJuIGJvb2wgaXNfZ2ltcGxlX2Nhc3QgKHRyZWUpOworLyogUmV0dXJucyB0cnVlIGlmZiBUIGlzIGEgdmFyaWFibGUgdGhhdCBkb2VzIG5vdCBuZWVkIHRvIGxpdmUgaW4gbWVtb3J5LiAgKi8KK2V4dGVybiBib29sIGlzX2dpbXBsZV9ub25fYWRkcmVzc2FibGUgKHRyZWUgdCk7CisKKy8qIFJldHVybnMgdHJ1ZSBpZmYgVCBpcyBhIHZhbGlkIGNhbGwgYWRkcmVzcyBleHByZXNzaW9uLiAgKi8KK2V4dGVybiBib29sIGlzX2dpbXBsZV9jYWxsX2FkZHIgKHRyZWUpOworLyogSWYgVCBtYWtlcyBhIGZ1bmN0aW9uIGNhbGwsIHJldHVybnMgdGhlIENBTExfRVhQUiBvcGVyYW5kLiAgKi8KK2V4dGVybiB0cmVlIGdldF9jYWxsX2V4cHJfaW4gKHRyZWUgdCk7CisKK2V4dGVybiB2b2lkIHJlY2FsY3VsYXRlX3NpZGVfZWZmZWN0cyAodHJlZSk7CitleHRlcm4gYm9vbCBjb21wYXJlX2ZpZWxkX29mZnNldCAodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBnaW1wbGVfcmVnaXN0ZXJfdHlwZSAodHJlZSk7CitleHRlcm4gdm9pZCBwcmludF9naW1wbGVfdHlwZXNfc3RhdHMgKHZvaWQpOworZXh0ZXJuIHZvaWQgZnJlZV9naW1wbGVfdHlwZV90YWJsZXMgKHZvaWQpOworZXh0ZXJuIHRyZWUgZ2ltcGxlX3Vuc2lnbmVkX3R5cGUgKHRyZWUpOworZXh0ZXJuIHRyZWUgZ2ltcGxlX3NpZ25lZF90eXBlICh0cmVlKTsKK2V4dGVybiBhbGlhc19zZXRfdHlwZSBnaW1wbGVfZ2V0X2FsaWFzX3NldCAodHJlZSk7CitleHRlcm4gdm9pZCBjb3VudF91c2VzX2FuZF9kZXJlZnMgKHRyZWUsIGdpbXBsZSwgdW5zaWduZWQgKiwgdW5zaWduZWQgKiwKKwkJCQkgICB1bnNpZ25lZCAqKTsKK2V4dGVybiBib29sIHdhbGtfc3RtdF9sb2FkX3N0b3JlX2FkZHJfb3BzIChnaW1wbGUsIHZvaWQgKiwKKwkJCQkJICAgYm9vbCAoKikoZ2ltcGxlLCB0cmVlLCB2b2lkICopLAorCQkJCQkgICBib29sICgqKShnaW1wbGUsIHRyZWUsIHZvaWQgKiksCisJCQkJCSAgIGJvb2wgKCopKGdpbXBsZSwgdHJlZSwgdm9pZCAqKSk7CitleHRlcm4gYm9vbCB3YWxrX3N0bXRfbG9hZF9zdG9yZV9vcHMgKGdpbXBsZSwgdm9pZCAqLAorCQkJCSAgICAgIGJvb2wgKCopKGdpbXBsZSwgdHJlZSwgdm9pZCAqKSwKKwkJCQkgICAgICBib29sICgqKShnaW1wbGUsIHRyZWUsIHZvaWQgKikpOworZXh0ZXJuIGJvb2wgZ2ltcGxlX2lvcl9hZGRyZXNzZXNfdGFrZW4gKGJpdG1hcCwgZ2ltcGxlKTsKKworLyogSW4gZ2ltcGxpZnkuYyAgKi8KK2V4dGVybiB0cmVlIGNyZWF0ZV90bXBfdmFyX3JhdyAodHJlZSwgY29uc3QgY2hhciAqKTsKK2V4dGVybiB0cmVlIGNyZWF0ZV90bXBfdmFyX25hbWUgKGNvbnN0IGNoYXIgKik7CitleHRlcm4gdHJlZSBjcmVhdGVfdG1wX3ZhciAodHJlZSwgY29uc3QgY2hhciAqKTsKK2V4dGVybiB0cmVlIGdldF9pbml0aWFsaXplZF90bXBfdmFyICh0cmVlLCBnaW1wbGVfc2VxICosIGdpbXBsZV9zZXEgKik7CitleHRlcm4gdHJlZSBnZXRfZm9ybWFsX3RtcF92YXIgKHRyZWUsIGdpbXBsZV9zZXEgKik7CitleHRlcm4gdm9pZCBkZWNsYXJlX3ZhcnMgKHRyZWUsIGdpbXBsZSwgYm9vbCk7CitleHRlcm4gdm9pZCBhbm5vdGF0ZV9hbGxfd2l0aF9sb2NhdGlvbiAoZ2ltcGxlX3NlcSwgbG9jYXRpb25fdCk7CisKKy8qIFZhbGlkYXRpb24gb2YgR0lNUExFIGV4cHJlc3Npb25zLiAgTm90ZSB0aGF0IHRoZXNlIHByZWRpY2F0ZXMgb25seSBjaGVjaworICAgdGhlIGJhc2ljIGZvcm0gb2YgdGhlIGV4cHJlc3Npb24sIHRoZXkgZG9uJ3QgcmVjdXJzZSB0byBtYWtlIHN1cmUgdGhhdAorICAgdW5kZXJseWluZyBub2RlcyBhcmUgYWxzbyBvZiB0aGUgcmlnaHQgZm9ybS4gICovCit0eXBlZGVmIGJvb2wgKCpnaW1wbGVfcHJlZGljYXRlKSh0cmVlKTsKKworCisvKiBGSVhNRSB3ZSBzaG91bGQgZGVkdWNlIHRoaXMgZnJvbSB0aGUgcHJlZGljYXRlLiAgKi8KK2VudW0gZmFsbGJhY2sgeworICBmYl9ub25lID0gMCwJCS8qIERvIG5vdCBnZW5lcmF0ZSBhIHRlbXBvcmFyeS4gICovCisKKyAgZmJfcnZhbHVlID0gMSwJLyogR2VuZXJhdGUgYW4gcnZhbHVlIHRvIGhvbGQgdGhlIHJlc3VsdCBvZiBhCisJCQkgICBnaW1wbGlmaWVkIGV4cHJlc3Npb24uICAqLworCisgIGZiX2x2YWx1ZSA9IDIsCS8qIEdlbmVyYXRlIGFuIGx2YWx1ZSB0byBob2xkIHRoZSByZXN1bHQgb2YgYQorCQkJICAgZ2ltcGxpZmllZCBleHByZXNzaW9uLiAgKi8KKworICBmYl9tYXlmYWlsID0gNCwJLyogR2ltcGxpZmljYXRpb24gbWF5IGZhaWwuICBFcnJvciBpc3N1ZWQKKwkJCSAgIGFmdGVyd2FyZHMuICAqLworICBmYl9laXRoZXI9IGZiX3J2YWx1ZSB8IGZiX2x2YWx1ZQorfTsKKwordHlwZWRlZiBpbnQgZmFsbGJhY2tfdDsKKworZW51bSBnaW1wbGlmeV9zdGF0dXMgeworICBHU19FUlJPUgk9IC0yLAkvKiBTb21ldGhpbmcgQmFkIFNlZW4uICAqLworICBHU19VTkhBTkRMRUQJPSAtMSwJLyogQSBsYW5naG9vayByZXN1bHQgZm9yICJJIGR1bm5vIi4gICovCisgIEdTX09LCQk9IDAsCS8qIFdlIGRpZCBzb21ldGhpbmcsIG1heWJlIG1vcmUgdG8gZG8uICAqLworICBHU19BTExfRE9ORQk9IDEJLyogVGhlIGV4cHJlc3Npb24gaXMgZnVsbHkgZ2ltcGxpZmllZC4gICovCit9OworCitzdHJ1Y3QgZ2ltcGxpZnlfY3R4Cit7CisgIHN0cnVjdCBnaW1wbGlmeV9jdHggKnByZXZfY29udGV4dDsKKworICBWRUMoZ2ltcGxlLGhlYXApICpiaW5kX2V4cHJfc3RhY2s7CisgIHRyZWUgdGVtcHM7CisgIGdpbXBsZV9zZXEgY29uZGl0aW9uYWxfY2xlYW51cHM7CisgIHRyZWUgZXhpdF9sYWJlbDsKKyAgdHJlZSByZXR1cm5fdGVtcDsKKworICBWRUModHJlZSxoZWFwKSAqY2FzZV9sYWJlbHM7CisgIC8qIFRoZSBmb3JtYWwgdGVtcG9yYXJ5IHRhYmxlLiAgU2hvdWxkIHRoaXMgYmUgcGVyc2lzdGVudD8gICovCisgIGh0YWJfdCB0ZW1wX2h0YWI7CisKKyAgaW50IGNvbmRpdGlvbnM7CisgIGJvb2wgc2F2ZV9zdGFjazsKKyAgYm9vbCBpbnRvX3NzYTsKKyAgYm9vbCBhbGxvd19yaHNfY29uZF9leHByOworfTsKKworZXh0ZXJuIGVudW0gZ2ltcGxpZnlfc3RhdHVzIGdpbXBsaWZ5X2V4cHIgKHRyZWUgKiwgZ2ltcGxlX3NlcSAqLCBnaW1wbGVfc2VxICosCisJCQkJCSAgIGJvb2wgKCopICh0cmVlKSwgZmFsbGJhY2tfdCk7CitleHRlcm4gdm9pZCBnaW1wbGlmeV90eXBlX3NpemVzICh0cmVlLCBnaW1wbGVfc2VxICopOworZXh0ZXJuIHZvaWQgZ2ltcGxpZnlfb25lX3NpemVwb3MgKHRyZWUgKiwgZ2ltcGxlX3NlcSAqKTsKK2V4dGVybiBib29sIGdpbXBsaWZ5X3N0bXQgKHRyZWUgKiwgZ2ltcGxlX3NlcSAqKTsKK2V4dGVybiBnaW1wbGUgZ2ltcGxpZnlfYm9keSAodHJlZSAqLCB0cmVlLCBib29sKTsKK2V4dGVybiB2b2lkIHB1c2hfZ2ltcGxpZnlfY29udGV4dCAoc3RydWN0IGdpbXBsaWZ5X2N0eCAqKTsKK2V4dGVybiB2b2lkIHBvcF9naW1wbGlmeV9jb250ZXh0IChnaW1wbGUpOworZXh0ZXJuIHZvaWQgZ2ltcGxpZnlfYW5kX2FkZCAodHJlZSwgZ2ltcGxlX3NlcSAqKTsKKworLyogTWlzY2VsbGFuZW91cyBoZWxwZXJzLiAgKi8KK2V4dGVybiB2b2lkIGdpbXBsZV9hZGRfdG1wX3ZhciAodHJlZSk7CitleHRlcm4gZ2ltcGxlIGdpbXBsZV9jdXJyZW50X2JpbmRfZXhwciAodm9pZCk7CitleHRlcm4gVkVDKGdpbXBsZSwgaGVhcCkgKmdpbXBsZV9iaW5kX2V4cHJfc3RhY2sgKHZvaWQpOworZXh0ZXJuIHRyZWUgdm9pZGlmeV93cmFwcGVyX2V4cHIgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfYW5kX2p1bXAgKHRyZWUgKik7CitleHRlcm4gdHJlZSBhbGxvY19zdG10X2xpc3QgKHZvaWQpOworZXh0ZXJuIHZvaWQgZnJlZV9zdG10X2xpc3QgKHRyZWUpOworZXh0ZXJuIHRyZWUgZm9yY2VfbGFiZWxzX3IgKHRyZWUgKiwgaW50ICosIHZvaWQgKik7CitleHRlcm4gZW51bSBnaW1wbGlmeV9zdGF0dXMgZ2ltcGxpZnlfdmFfYXJnX2V4cHIgKHRyZWUgKiwgZ2ltcGxlX3NlcSAqLAorCQkJCQkJICBnaW1wbGVfc2VxICopOworc3RydWN0IGdpbXBsaWZ5X29tcF9jdHg7CitleHRlcm4gdm9pZCBvbXBfZmlyc3Rwcml2YXRpemVfdmFyaWFibGUgKHN0cnVjdCBnaW1wbGlmeV9vbXBfY3R4ICosIHRyZWUpOworZXh0ZXJuIHRyZWUgZ2ltcGxlX2Jvb2xpZnkgKHRyZWUpOworZXh0ZXJuIGdpbXBsZV9wcmVkaWNhdGUgcmhzX3ByZWRpY2F0ZV9mb3IgKHRyZWUpOworZXh0ZXJuIHRyZWUgY2Fub25pY2FsaXplX2NvbmRfZXhwcl9jb25kICh0cmVlKTsKKworLyogSW4gb21wLWxvdy5jLiAgKi8KK2V4dGVybiB0cmVlIG9tcF9yZWR1Y3Rpb25faW5pdCAodHJlZSwgdHJlZSk7CisKKy8qIEluIHRyZWUtbmVzdGVkLmMuICAqLworZXh0ZXJuIHZvaWQgbG93ZXJfbmVzdGVkX2Z1bmN0aW9ucyAodHJlZSk7CitleHRlcm4gdm9pZCBpbnNlcnRfZmllbGRfaW50b19zdHJ1Y3QgKHRyZWUsIHRyZWUpOworCisvKiBJbiBnaW1wbGlmeS5jLiAgKi8KK2V4dGVybiB2b2lkIGdpbXBsaWZ5X2Z1bmN0aW9uX3RyZWUgKHRyZWUpOworCisvKiBJbiBjZmdleHBhbmQuYy4gICovCitleHRlcm4gdHJlZSBnaW1wbGVfYXNzaWduX3Joc190b190cmVlIChnaW1wbGUpOworCisvKiBJbiBidWlsdGlucy5jICAqLworZXh0ZXJuIGJvb2wgdmFsaWRhdGVfZ2ltcGxlX2FyZ2xpc3QgKGNvbnN0X2dpbXBsZSwgLi4uKTsKKworLyogSW4gdHJlZS1zc2EuYyAgKi8KK2V4dGVybiBib29sIHRyZWVfc3NhX3VzZWxlc3NfdHlwZV9jb252ZXJzaW9uICh0cmVlKTsKK2V4dGVybiB0cmVlIHRyZWVfc3NhX3N0cmlwX3VzZWxlc3NfdHlwZV9jb252ZXJzaW9ucyAodHJlZSk7CitleHRlcm4gYm9vbCB1c2VsZXNzX3R5cGVfY29udmVyc2lvbl9wICh0cmVlLCB0cmVlKTsKK2V4dGVybiBib29sIHR5cGVzX2NvbXBhdGlibGVfcCAodHJlZSwgdHJlZSk7CisKKy8qIFJldHVybiB0aGUgY29kZSBmb3IgR0lNUExFIHN0YXRlbWVudCBHLiAgKi8KKworc3RhdGljIGlubGluZSBlbnVtIGdpbXBsZV9jb2RlCitnaW1wbGVfY29kZSAoY29uc3RfZ2ltcGxlIGcpCit7CisgIHJldHVybiBnLT5nc2Jhc2UuY29kZTsKK30KKworCisvKiBSZXR1cm4gdGhlIEdTUyBjb2RlIHVzZWQgYnkgYSBHSU1QTEUgY29kZS4gICovCisKK3N0YXRpYyBpbmxpbmUgZW51bSBnaW1wbGVfc3RhdGVtZW50X3N0cnVjdHVyZV9lbnVtCitnc3NfZm9yX2NvZGUgKGVudW0gZ2ltcGxlX2NvZGUgY29kZSkKK3sKKyNpZmRlZiBFTkFCTEVfQ0hFQ0tJTkcKKyAgZ2NjX2Fzc2VydCAoKHVuc2lnbmVkIGludCljb2RlIDwgTEFTVF9BTkRfVU5VU0VEX0dJTVBMRV9DT0RFKTsKKyNlbmRpZgorICByZXR1cm4gZ3NzX2Zvcl9jb2RlX1tjb2RlXTsKK30KKworCisvKiBSZXR1cm4gd2hpY2ggR1NTIGNvZGUgaXMgdXNlZCBieSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgZW51bSBnaW1wbGVfc3RhdGVtZW50X3N0cnVjdHVyZV9lbnVtCitnaW1wbGVfc3RhdGVtZW50X3N0cnVjdHVyZSAoZ2ltcGxlIGdzKQoreworICByZXR1cm4gZ3NzX2Zvcl9jb2RlIChnaW1wbGVfY29kZSAoZ3MpKTsKK30KKworCisvKiBSZXR1cm4gdHJ1ZSBpZiBzdGF0ZW1lbnQgRyBoYXMgc3ViLXN0YXRlbWVudHMuICBUaGlzIGlzIG9ubHkgdHJ1ZSBmb3IKKyAgIEhpZ2ggR0lNUExFIHN0YXRlbWVudHMuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2dpbXBsZV9oYXNfc3Vic3RhdGVtZW50cyAoZ2ltcGxlIGcpCit7CisgIHN3aXRjaCAoZ2ltcGxlX2NvZGUgKGcpKQorICAgIHsKKyAgICBjYXNlIEdJTVBMRV9CSU5EOgorICAgIGNhc2UgR0lNUExFX0NBVENIOgorICAgIGNhc2UgR0lNUExFX0VIX0ZJTFRFUjoKKyAgICBjYXNlIEdJTVBMRV9UUlk6CisgICAgY2FzZSBHSU1QTEVfT01QX0ZPUjoKKyAgICBjYXNlIEdJTVBMRV9PTVBfTUFTVEVSOgorICAgIGNhc2UgR0lNUExFX09NUF9PUkRFUkVEOgorICAgIGNhc2UgR0lNUExFX09NUF9TRUNUSU9OOgorICAgIGNhc2UgR0lNUExFX09NUF9QQVJBTExFTDoKKyAgICBjYXNlIEdJTVBMRV9PTVBfVEFTSzoKKyAgICBjYXNlIEdJTVBMRV9PTVBfU0VDVElPTlM6CisgICAgY2FzZSBHSU1QTEVfT01QX1NJTkdMRToKKyAgICBjYXNlIEdJTVBMRV9PTVBfQ1JJVElDQUw6CisgICAgY2FzZSBHSU1QTEVfV0lUSF9DTEVBTlVQX0VYUFI6CisgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCisKKy8qIFJldHVybiB0aGUgYmFzaWMgYmxvY2sgaG9sZGluZyBzdGF0ZW1lbnQgRy4gICovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJhc2ljX2Jsb2NrX2RlZiAqCitnaW1wbGVfYmIgKGNvbnN0X2dpbXBsZSBnKQoreworICByZXR1cm4gZy0+Z3NiYXNlLmJiOworfQorCisKKy8qIFJldHVybiB0aGUgbGV4aWNhbCBzY29wZSBibG9jayBob2xkaW5nIHN0YXRlbWVudCBHLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfYmxvY2sgKGNvbnN0X2dpbXBsZSBnKQoreworICByZXR1cm4gZy0+Z3NiYXNlLmJsb2NrOworfQorCisKKy8qIFNldCBCTE9DSyB0byBiZSB0aGUgbGV4aWNhbCBzY29wZSBibG9jayBob2xkaW5nIHN0YXRlbWVudCBHLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfc2V0X2Jsb2NrIChnaW1wbGUgZywgdHJlZSBibG9jaykKK3sKKyAgZy0+Z3NiYXNlLmJsb2NrID0gYmxvY2s7Cit9CisKKworLyogUmV0dXJuIGxvY2F0aW9uIGluZm9ybWF0aW9uIGZvciBzdGF0ZW1lbnQgRy4gICovCisKK3N0YXRpYyBpbmxpbmUgbG9jYXRpb25fdAorZ2ltcGxlX2xvY2F0aW9uIChjb25zdF9naW1wbGUgZykKK3sKKyAgcmV0dXJuIGctPmdzYmFzZS5sb2NhdGlvbjsKK30KKworLyogUmV0dXJuIHBvaW50ZXIgdG8gbG9jYXRpb24gaW5mb3JtYXRpb24gZm9yIHN0YXRlbWVudCBHLiAgKi8KKworc3RhdGljIGlubGluZSBjb25zdCBsb2NhdGlvbl90ICoKK2dpbXBsZV9sb2NhdGlvbl9wdHIgKGNvbnN0X2dpbXBsZSBnKQoreworICByZXR1cm4gJmctPmdzYmFzZS5sb2NhdGlvbjsKK30KKworCisvKiBTZXQgbG9jYXRpb24gaW5mb3JtYXRpb24gZm9yIHN0YXRlbWVudCBHLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfc2V0X2xvY2F0aW9uIChnaW1wbGUgZywgbG9jYXRpb25fdCBsb2NhdGlvbikKK3sKKyAgZy0+Z3NiYXNlLmxvY2F0aW9uID0gbG9jYXRpb247Cit9CisKKworLyogUmV0dXJuIHRydWUgaWYgRyBjb250YWlucyBsb2NhdGlvbiBpbmZvcm1hdGlvbi4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX2hhc19sb2NhdGlvbiAoY29uc3RfZ2ltcGxlIGcpCit7CisgIHJldHVybiBnaW1wbGVfbG9jYXRpb24gKGcpICE9IFVOS05PV05fTE9DQVRJT047Cit9CisKKworLyogUmV0dXJuIHRoZSBmaWxlIG5hbWUgb2YgdGhlIGxvY2F0aW9uIG9mIFNUTVQuICAqLworCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgorZ2ltcGxlX2ZpbGVuYW1lIChjb25zdF9naW1wbGUgc3RtdCkKK3sKKyAgcmV0dXJuIExPQ0FUSU9OX0ZJTEUgKGdpbXBsZV9sb2NhdGlvbiAoc3RtdCkpOworfQorCisKKy8qIFJldHVybiB0aGUgbGluZSBudW1iZXIgb2YgdGhlIGxvY2F0aW9uIG9mIFNUTVQuICAqLworCitzdGF0aWMgaW5saW5lIGludAorZ2ltcGxlX2xpbmVubyAoY29uc3RfZ2ltcGxlIHN0bXQpCit7CisgIHJldHVybiBMT0NBVElPTl9MSU5FIChnaW1wbGVfbG9jYXRpb24gKHN0bXQpKTsKK30KKworCisvKiBEZXRlcm1pbmUgd2hldGhlciBTRVEgaXMgYSBzaW5nbGV0b24uICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX3NlcV9zaW5nbGV0b25fcCAoZ2ltcGxlX3NlcSBzZXEpCit7CisgIHJldHVybiAoKGdpbXBsZV9zZXFfZmlyc3QgKHNlcSkgIT0gTlVMTCkKKwkgICYmIChnaW1wbGVfc2VxX2ZpcnN0IChzZXEpID09IGdpbXBsZV9zZXFfbGFzdCAoc2VxKSkpOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBubyB3YXJuaW5ncyBzaG91bGQgYmUgZW1pdHRlZCBmb3Igc3RhdGVtZW50IFNUTVQuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2dpbXBsZV9ub193YXJuaW5nX3AgKGNvbnN0X2dpbXBsZSBzdG10KQoreworICByZXR1cm4gc3RtdC0+Z3NiYXNlLm5vX3dhcm5pbmc7Cit9CisKKy8qIFNldCB0aGUgbm9fd2FybmluZyBmbGFnIG9mIFNUTVQgdG8gTk9fV0FSTklORy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX3NldF9ub193YXJuaW5nIChnaW1wbGUgc3RtdCwgYm9vbCBub193YXJuaW5nKQoreworICBzdG10LT5nc2Jhc2Uubm9fd2FybmluZyA9ICh1bnNpZ25lZCkgbm9fd2FybmluZzsKK30KKworLyogU2V0IHRoZSB2aXNpdGVkIHN0YXR1cyBvbiBzdGF0ZW1lbnQgU1RNVCB0byBWSVNJVEVEX1AuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9zZXRfdmlzaXRlZCAoZ2ltcGxlIHN0bXQsIGJvb2wgdmlzaXRlZF9wKQoreworICBzdG10LT5nc2Jhc2UudmlzaXRlZCA9ICh1bnNpZ25lZCkgdmlzaXRlZF9wOworfQorCisKKy8qIFJldHVybiB0aGUgdmlzaXRlZCBzdGF0dXMgZm9yIHN0YXRlbWVudCBTVE1ULiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitnaW1wbGVfdmlzaXRlZF9wIChnaW1wbGUgc3RtdCkKK3sKKyAgcmV0dXJuIHN0bXQtPmdzYmFzZS52aXNpdGVkOworfQorCisKKy8qIFNldCBwYXNzIGxvY2FsIGZsYWcgUExGIG9uIHN0YXRlbWVudCBTVE1UIHRvIFZBTF9QLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfc2V0X3BsZiAoZ2ltcGxlIHN0bXQsIGVudW0gcGxmX21hc2sgcGxmLCBib29sIHZhbF9wKQoreworICBpZiAodmFsX3ApCisgICAgc3RtdC0+Z3NiYXNlLnBsZiB8PSAodW5zaWduZWQgaW50KSBwbGY7CisgIGVsc2UKKyAgICBzdG10LT5nc2Jhc2UucGxmICY9IH4oKHVuc2lnbmVkIGludCkgcGxmKTsKK30KKworCisvKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHBhc3MgbG9jYWwgZmxhZyBQTEYgb24gc3RhdGVtZW50IFNUTVQuICAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorZ2ltcGxlX3BsZiAoZ2ltcGxlIHN0bXQsIGVudW0gcGxmX21hc2sgcGxmKQoreworICByZXR1cm4gc3RtdC0+Z3NiYXNlLnBsZiAmICgodW5zaWduZWQgaW50KSBwbGYpOworfQorCisKKy8qIFNldCB0aGUgVUlEIG9mIHN0YXRlbWVudC4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX3NldF91aWQgKGdpbXBsZSBnLCB1bnNpZ25lZCB1aWQpCit7CisgIGctPmdzYmFzZS51aWQgPSB1aWQ7Cit9CisKKworLyogUmV0dXJuIHRoZSBVSUQgb2Ygc3RhdGVtZW50LiAgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZAorZ2ltcGxlX3VpZCAoY29uc3RfZ2ltcGxlIGcpCit7CisgIHJldHVybiBnLT5nc2Jhc2UudWlkOworfQorCisKKy8qIFJldHVybiB0cnVlIGlmIEdJTVBMRSBzdGF0ZW1lbnQgRyBoYXMgcmVnaXN0ZXIgb3IgbWVtb3J5IG9wZXJhbmRzLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitnaW1wbGVfaGFzX29wcyAoY29uc3RfZ2ltcGxlIGcpCit7CisgIHJldHVybiBnaW1wbGVfY29kZSAoZykgPj0gR0lNUExFX0NPTkQgJiYgZ2ltcGxlX2NvZGUgKGcpIDw9IEdJTVBMRV9SRVRVUk47Cit9CisKKworLyogUmV0dXJuIHRydWUgaWYgR0lNUExFIHN0YXRlbWVudCBHIGhhcyBtZW1vcnkgb3BlcmFuZHMuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2dpbXBsZV9oYXNfbWVtX29wcyAoY29uc3RfZ2ltcGxlIGcpCit7CisgIHJldHVybiBnaW1wbGVfY29kZSAoZykgPj0gR0lNUExFX0FTU0lHTiAmJiBnaW1wbGVfY29kZSAoZykgPD0gR0lNUExFX1JFVFVSTjsKK30KKworCisvKiBSZXR1cm4gdGhlIHNldCBvZiBERUYgb3BlcmFuZHMgZm9yIHN0YXRlbWVudCBHLiAgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGVmX29wdHlwZV9kICoKK2dpbXBsZV9kZWZfb3BzIChjb25zdF9naW1wbGUgZykKK3sKKyAgaWYgKCFnaW1wbGVfaGFzX29wcyAoZykpCisgICAgcmV0dXJuIE5VTEw7CisgIHJldHVybiBnLT5nc29wcy5vcGJhc2UuZGVmX29wczsKK30KKworCisvKiBTZXQgREVGIHRvIGJlIHRoZSBzZXQgb2YgREVGIG9wZXJhbmRzIGZvciBzdGF0ZW1lbnQgRy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX3NldF9kZWZfb3BzIChnaW1wbGUgZywgc3RydWN0IGRlZl9vcHR5cGVfZCAqZGVmKQoreworICBnY2NfYXNzZXJ0IChnaW1wbGVfaGFzX29wcyAoZykpOworICBnLT5nc29wcy5vcGJhc2UuZGVmX29wcyA9IGRlZjsKK30KKworCisvKiBSZXR1cm4gdGhlIHNldCBvZiBVU0Ugb3BlcmFuZHMgZm9yIHN0YXRlbWVudCBHLiAgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNlX29wdHlwZV9kICoKK2dpbXBsZV91c2Vfb3BzIChjb25zdF9naW1wbGUgZykKK3sKKyAgaWYgKCFnaW1wbGVfaGFzX29wcyAoZykpCisgICAgcmV0dXJuIE5VTEw7CisgIHJldHVybiBnLT5nc29wcy5vcGJhc2UudXNlX29wczsKK30KKworCisvKiBTZXQgVVNFIHRvIGJlIHRoZSBzZXQgb2YgVVNFIG9wZXJhbmRzIGZvciBzdGF0ZW1lbnQgRy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX3NldF91c2Vfb3BzIChnaW1wbGUgZywgc3RydWN0IHVzZV9vcHR5cGVfZCAqdXNlKQoreworICBnY2NfYXNzZXJ0IChnaW1wbGVfaGFzX29wcyAoZykpOworICBnLT5nc29wcy5vcGJhc2UudXNlX29wcyA9IHVzZTsKK30KKworCisvKiBSZXR1cm4gdGhlIHNldCBvZiBWVVNFIG9wZXJhbmQgZm9yIHN0YXRlbWVudCBHLiAgKi8KKworc3RhdGljIGlubGluZSB1c2Vfb3BlcmFuZF9wCitnaW1wbGVfdnVzZV9vcCAoY29uc3RfZ2ltcGxlIGcpCit7CisgIHN0cnVjdCB1c2Vfb3B0eXBlX2QgKm9wczsKKyAgaWYgKCFnaW1wbGVfaGFzX21lbV9vcHMgKGcpKQorICAgIHJldHVybiBOVUxMX1VTRV9PUEVSQU5EX1A7CisgIG9wcyA9IGctPmdzb3BzLm9wYmFzZS51c2Vfb3BzOworICBpZiAob3BzCisgICAgICAmJiBVU0VfT1BfUFRSIChvcHMpLT51c2UgPT0gJmctPmdzbWVtYmFzZS52dXNlKQorICAgIHJldHVybiBVU0VfT1BfUFRSIChvcHMpOworICByZXR1cm4gTlVMTF9VU0VfT1BFUkFORF9QOworfQorCisvKiBSZXR1cm4gdGhlIHNldCBvZiBWREVGIG9wZXJhbmQgZm9yIHN0YXRlbWVudCBHLiAgKi8KKworc3RhdGljIGlubGluZSBkZWZfb3BlcmFuZF9wCitnaW1wbGVfdmRlZl9vcCAoY29uc3RfZ2ltcGxlIGcpCit7CisgIHN0cnVjdCBkZWZfb3B0eXBlX2QgKm9wczsKKyAgaWYgKCFnaW1wbGVfaGFzX21lbV9vcHMgKGcpKQorICAgIHJldHVybiBOVUxMX0RFRl9PUEVSQU5EX1A7CisgIG9wcyA9IGctPmdzb3BzLm9wYmFzZS5kZWZfb3BzOworICBpZiAob3BzCisgICAgICAmJiBERUZfT1BfUFRSIChvcHMpID09ICZnLT5nc21lbWJhc2UudmRlZikKKyAgICByZXR1cm4gREVGX09QX1BUUiAob3BzKTsKKyAgcmV0dXJuIE5VTExfREVGX09QRVJBTkRfUDsKK30KKworCisvKiBSZXR1cm4gdGhlIHNpbmdsZSBWVVNFIG9wZXJhbmQgb2YgdGhlIHN0YXRlbWVudCBHLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfdnVzZSAoY29uc3RfZ2ltcGxlIGcpCit7CisgIGlmICghZ2ltcGxlX2hhc19tZW1fb3BzIChnKSkKKyAgICByZXR1cm4gTlVMTF9UUkVFOworICByZXR1cm4gZy0+Z3NtZW1iYXNlLnZ1c2U7Cit9CisKKy8qIFJldHVybiB0aGUgc2luZ2xlIFZERUYgb3BlcmFuZCBvZiB0aGUgc3RhdGVtZW50IEcuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV92ZGVmIChjb25zdF9naW1wbGUgZykKK3sKKyAgaWYgKCFnaW1wbGVfaGFzX21lbV9vcHMgKGcpKQorICAgIHJldHVybiBOVUxMX1RSRUU7CisgIHJldHVybiBnLT5nc21lbWJhc2UudmRlZjsKK30KKworLyogUmV0dXJuIHRoZSBzaW5nbGUgVlVTRSBvcGVyYW5kIG9mIHRoZSBzdGF0ZW1lbnQgRy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfdnVzZV9wdHIgKGdpbXBsZSBnKQoreworICBpZiAoIWdpbXBsZV9oYXNfbWVtX29wcyAoZykpCisgICAgcmV0dXJuIE5VTEw7CisgIHJldHVybiAmZy0+Z3NtZW1iYXNlLnZ1c2U7Cit9CisKKy8qIFJldHVybiB0aGUgc2luZ2xlIFZERUYgb3BlcmFuZCBvZiB0aGUgc3RhdGVtZW50IEcuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX3ZkZWZfcHRyIChnaW1wbGUgZykKK3sKKyAgaWYgKCFnaW1wbGVfaGFzX21lbV9vcHMgKGcpKQorICAgIHJldHVybiBOVUxMOworICByZXR1cm4gJmctPmdzbWVtYmFzZS52ZGVmOworfQorCisvKiBTZXQgdGhlIHNpbmdsZSBWVVNFIG9wZXJhbmQgb2YgdGhlIHN0YXRlbWVudCBHLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfc2V0X3Z1c2UgKGdpbXBsZSBnLCB0cmVlIHZ1c2UpCit7CisgIGdjY19hc3NlcnQgKGdpbXBsZV9oYXNfbWVtX29wcyAoZykpOworICBnLT5nc21lbWJhc2UudnVzZSA9IHZ1c2U7Cit9CisKKy8qIFNldCB0aGUgc2luZ2xlIFZERUYgb3BlcmFuZCBvZiB0aGUgc3RhdGVtZW50IEcuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9zZXRfdmRlZiAoZ2ltcGxlIGcsIHRyZWUgdmRlZikKK3sKKyAgZ2NjX2Fzc2VydCAoZ2ltcGxlX2hhc19tZW1fb3BzIChnKSk7CisgIGctPmdzbWVtYmFzZS52ZGVmID0gdmRlZjsKK30KKworCisvKiBSZXR1cm4gdHJ1ZSBpZiBzdGF0ZW1lbnQgRyBoYXMgb3BlcmFuZHMgYW5kIHRoZSBtb2RpZmllZCBmaWVsZCBoYXMKKyAgIGJlZW4gc2V0LiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitnaW1wbGVfbW9kaWZpZWRfcCAoY29uc3RfZ2ltcGxlIGcpCit7CisgIHJldHVybiAoZ2ltcGxlX2hhc19vcHMgKGcpKSA/IChib29sKSBnLT5nc2Jhc2UubW9kaWZpZWQgOiBmYWxzZTsKK30KKworCisvKiBSZXR1cm4gdGhlIHRyZWUgY29kZSBmb3IgdGhlIGV4cHJlc3Npb24gY29tcHV0ZWQgYnkgU1RNVC4gIFRoaXMgaXMKKyAgIG9ubHkgdmFsaWQgZm9yIEdJTVBMRV9DT05ELCBHSU1QTEVfQ0FMTCBhbmQgR0lNUExFX0FTU0lHTi4gIEZvcgorICAgR0lNUExFX0NBTEwsIHJldHVybiBDQUxMX0VYUFIgYXMgdGhlIGV4cHJlc3Npb24gY29kZSBmb3IKKyAgIGNvbnNpc3RlbmN5LiAgVGhpcyBpcyB1c2VmdWwgd2hlbiB0aGUgY2FsbGVyIG5lZWRzIHRvIGRlYWwgd2l0aCB0aGUKKyAgIHRocmVlIGtpbmRzIG9mIGNvbXB1dGF0aW9uIHRoYXQgR0lNUExFIHN1cHBvcnRzLiAgKi8KKworc3RhdGljIGlubGluZSBlbnVtIHRyZWVfY29kZQorZ2ltcGxlX2V4cHJfY29kZSAoY29uc3RfZ2ltcGxlIHN0bXQpCit7CisgIGVudW0gZ2ltcGxlX2NvZGUgY29kZSA9IGdpbXBsZV9jb2RlIChzdG10KTsKKyAgaWYgKGNvZGUgPT0gR0lNUExFX0FTU0lHTiB8fCBjb2RlID09IEdJTVBMRV9DT05EKQorICAgIHJldHVybiAoZW51bSB0cmVlX2NvZGUpIHN0bXQtPmdzYmFzZS5zdWJjb2RlOworICBlbHNlIGlmIChjb2RlID09IEdJTVBMRV9DQUxMKQorICAgIHJldHVybiBDQUxMX0VYUFI7CisgIGVsc2UKKyAgICBnY2NfdW5yZWFjaGFibGUgKCk7Cit9CisKKworLyogTWFyayBzdGF0ZW1lbnQgUyBhcyBtb2RpZmllZCwgYW5kIHVwZGF0ZSBpdC4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAordXBkYXRlX3N0bXQgKGdpbXBsZSBzKQoreworICBpZiAoZ2ltcGxlX2hhc19vcHMgKHMpKQorICAgIHsKKyAgICAgIGdpbXBsZV9zZXRfbW9kaWZpZWQgKHMsIHRydWUpOworICAgICAgdXBkYXRlX3N0bXRfb3BlcmFuZHMgKHMpOworICAgIH0KK30KKworLyogVXBkYXRlIHN0YXRlbWVudCBTIGlmIGl0IGhhcyBiZWVuIG9wdGltaXplZC4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAordXBkYXRlX3N0bXRfaWZfbW9kaWZpZWQgKGdpbXBsZSBzKQoreworICBpZiAoZ2ltcGxlX21vZGlmaWVkX3AgKHMpKQorICAgIHVwZGF0ZV9zdG10X29wZXJhbmRzIChzKTsKK30KKworLyogUmV0dXJuIHRydWUgaWYgc3RhdGVtZW50IFNUTVQgY29udGFpbnMgdm9sYXRpbGUgb3BlcmFuZHMuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2dpbXBsZV9oYXNfdm9sYXRpbGVfb3BzIChjb25zdF9naW1wbGUgc3RtdCkKK3sKKyAgaWYgKGdpbXBsZV9oYXNfbWVtX29wcyAoc3RtdCkpCisgICAgcmV0dXJuIHN0bXQtPmdzYmFzZS5oYXNfdm9sYXRpbGVfb3BzOworICBlbHNlCisgICAgcmV0dXJuIGZhbHNlOworfQorCisKKy8qIFNldCB0aGUgSEFTX1ZPTEFUSUxFX09QUyBmbGFnIHRvIFZPTEFUSUxFUC4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX3NldF9oYXNfdm9sYXRpbGVfb3BzIChnaW1wbGUgc3RtdCwgYm9vbCB2b2xhdGlsZXApCit7CisgIGlmIChnaW1wbGVfaGFzX21lbV9vcHMgKHN0bXQpKQorICAgIHN0bXQtPmdzYmFzZS5oYXNfdm9sYXRpbGVfb3BzID0gKHVuc2lnbmVkKSB2b2xhdGlsZXA7Cit9CisKKworLyogUmV0dXJuIHRydWUgaWYgc3RhdGVtZW50IFNUTVQgbWF5IGFjY2VzcyBtZW1vcnkuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2dpbXBsZV9yZWZlcmVuY2VzX21lbW9yeV9wIChnaW1wbGUgc3RtdCkKK3sKKyAgcmV0dXJuIGdpbXBsZV9oYXNfbWVtX29wcyAoc3RtdCkgJiYgZ2ltcGxlX3Z1c2UgKHN0bXQpOworfQorCisKKy8qIFJldHVybiB0aGUgc3ViY29kZSBmb3IgT01QIHN0YXRlbWVudCBTLiAgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZAorZ2ltcGxlX29tcF9zdWJjb2RlIChjb25zdF9naW1wbGUgcykKK3sKKyAgZ2NjX2Fzc2VydCAoZ2ltcGxlX2NvZGUgKHMpID49IEdJTVBMRV9PTVBfQVRPTUlDX0xPQUQKKwkgICAgICAmJiBnaW1wbGVfY29kZSAocykgPD0gR0lNUExFX09NUF9TSU5HTEUpOworICByZXR1cm4gcy0+Z3NiYXNlLnN1YmNvZGU7Cit9CisKKy8qIFNldCB0aGUgc3ViY29kZSBmb3IgT01QIHN0YXRlbWVudCBTIHRvIFNVQkNPREUuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9vbXBfc2V0X3N1YmNvZGUgKGdpbXBsZSBzLCB1bnNpZ25lZCBpbnQgc3ViY29kZSkKK3sKKyAgLyogV2Ugb25seSBoYXZlIDE2IGJpdHMgZm9yIHRoZSBzdWJjb2RlLiAgQXNzZXJ0IHRoYXQgd2UgYXJlIG5vdAorICAgICBvdmVyZmxvd2luZyBpdC4gICovCisgIGdjY19hc3NlcnQgKHN1YmNvZGUgPCAoMSA8PCAxNikpOworICBzLT5nc2Jhc2Uuc3ViY29kZSA9IHN1YmNvZGU7Cit9CisKKy8qIFNldCB0aGUgbm93YWl0IGZsYWcgb24gT01QX1JFVFVSTiBzdGF0ZW1lbnQgUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX29tcF9yZXR1cm5fc2V0X25vd2FpdCAoZ2ltcGxlIHMpCit7CisgIEdJTVBMRV9DSEVDSyAocywgR0lNUExFX09NUF9SRVRVUk4pOworICBzLT5nc2Jhc2Uuc3ViY29kZSB8PSBHRl9PTVBfUkVUVVJOX05PV0FJVDsKK30KKworCisvKiBSZXR1cm4gdHJ1ZSBpZiBPTVAgcmV0dXJuIHN0YXRlbWVudCBHIGhhcyB0aGUgR0ZfT01QX1JFVFVSTl9OT1dBSVQKKyAgIGZsYWcgc2V0LiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitnaW1wbGVfb21wX3JldHVybl9ub3dhaXRfcCAoY29uc3RfZ2ltcGxlIGcpCit7CisgIEdJTVBMRV9DSEVDSyAoZywgR0lNUExFX09NUF9SRVRVUk4pOworICByZXR1cm4gKGdpbXBsZV9vbXBfc3ViY29kZSAoZykgJiBHRl9PTVBfUkVUVVJOX05PV0FJVCkgIT0gMDsKK30KKworCisvKiBSZXR1cm4gdHJ1ZSBpZiBPTVAgc2VjdGlvbiBzdGF0ZW1lbnQgRyBoYXMgdGhlIEdGX09NUF9TRUNUSU9OX0xBU1QKKyAgIGZsYWcgc2V0LiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitnaW1wbGVfb21wX3NlY3Rpb25fbGFzdF9wIChjb25zdF9naW1wbGUgZykKK3sKKyAgR0lNUExFX0NIRUNLIChnLCBHSU1QTEVfT01QX1NFQ1RJT04pOworICByZXR1cm4gKGdpbXBsZV9vbXBfc3ViY29kZSAoZykgJiBHRl9PTVBfU0VDVElPTl9MQVNUKSAhPSAwOworfQorCisKKy8qIFNldCB0aGUgR0ZfT01QX1NFQ1RJT05fTEFTVCBmbGFnIG9uIEcuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9vbXBfc2VjdGlvbl9zZXRfbGFzdCAoZ2ltcGxlIGcpCit7CisgIEdJTVBMRV9DSEVDSyAoZywgR0lNUExFX09NUF9TRUNUSU9OKTsKKyAgZy0+Z3NiYXNlLnN1YmNvZGUgfD0gR0ZfT01QX1NFQ1RJT05fTEFTVDsKK30KKworCisvKiBSZXR1cm4gdHJ1ZSBpZiBPTVAgcGFyYWxsZWwgc3RhdGVtZW50IEcgaGFzIHRoZQorICAgR0ZfT01QX1BBUkFMTEVMX0NPTUJJTkVEIGZsYWcgc2V0LiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitnaW1wbGVfb21wX3BhcmFsbGVsX2NvbWJpbmVkX3AgKGNvbnN0X2dpbXBsZSBnKQoreworICBHSU1QTEVfQ0hFQ0sgKGcsIEdJTVBMRV9PTVBfUEFSQUxMRUwpOworICByZXR1cm4gKGdpbXBsZV9vbXBfc3ViY29kZSAoZykgJiBHRl9PTVBfUEFSQUxMRUxfQ09NQklORUQpICE9IDA7Cit9CisKKworLyogU2V0IHRoZSBHRl9PTVBfUEFSQUxMRUxfQ09NQklORUQgZmllbGQgaW4gRyBkZXBlbmRpbmcgb24gdGhlIGJvb2xlYW4KKyAgIHZhbHVlIG9mIENPTUJJTkVEX1AuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9vbXBfcGFyYWxsZWxfc2V0X2NvbWJpbmVkX3AgKGdpbXBsZSBnLCBib29sIGNvbWJpbmVkX3ApCit7CisgIEdJTVBMRV9DSEVDSyAoZywgR0lNUExFX09NUF9QQVJBTExFTCk7CisgIGlmIChjb21iaW5lZF9wKQorICAgIGctPmdzYmFzZS5zdWJjb2RlIHw9IEdGX09NUF9QQVJBTExFTF9DT01CSU5FRDsKKyAgZWxzZQorICAgIGctPmdzYmFzZS5zdWJjb2RlICY9IH5HRl9PTVBfUEFSQUxMRUxfQ09NQklORUQ7Cit9CisKKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2Ygb3BlcmFuZHMgZm9yIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQKK2dpbXBsZV9udW1fb3BzIChjb25zdF9naW1wbGUgZ3MpCit7CisgIHJldHVybiBncy0+Z3NiYXNlLm51bV9vcHM7Cit9CisKKworLyogU2V0IHRoZSBudW1iZXIgb2Ygb3BlcmFuZHMgZm9yIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX3NldF9udW1fb3BzIChnaW1wbGUgZ3MsIHVuc2lnbmVkIG51bV9vcHMpCit7CisgIGdzLT5nc2Jhc2UubnVtX29wcyA9IG51bV9vcHM7Cit9CisKKworLyogUmV0dXJuIHRoZSBhcnJheSBvZiBvcGVyYW5kcyBmb3Igc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9vcHMgKGdpbXBsZSBncykKK3sKKyAgc2l6ZV90IG9mZjsKKworICAvKiBBbGwgdGhlIHR1cGxlcyBoYXZlIHRoZWlyIG9wZXJhbmQgdmVjdG9yIGF0IHRoZSB2ZXJ5IGJvdHRvbQorICAgICBvZiB0aGUgc3RydWN0dXJlLiAgTm90ZSB0aGF0IHRob3NlIHN0cnVjdHVyZXMgdGhhdCBkbyBub3QKKyAgICAgaGF2ZSBhbiBvcGVyYW5kIHZlY3RvciBoYXZlIGEgemVybyBvZmZzZXQuICAqLworICBvZmYgPSBnaW1wbGVfb3BzX29mZnNldF9bZ2ltcGxlX3N0YXRlbWVudF9zdHJ1Y3R1cmUgKGdzKV07CisgIGdjY19hc3NlcnQgKG9mZiAhPSAwKTsKKworICByZXR1cm4gKHRyZWUgKikgKChjaGFyICopIGdzICsgb2ZmKTsKK30KKworCisvKiBSZXR1cm4gb3BlcmFuZCBJIGZvciBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9vcCAoY29uc3RfZ2ltcGxlIGdzLCB1bnNpZ25lZCBpKQoreworICBpZiAoZ2ltcGxlX2hhc19vcHMgKGdzKSkKKyAgICB7CisjaWZkZWYgRU5BQkxFX0NIRUNLSU5HCisgICAgICBnY2NfYXNzZXJ0IChpIDwgZ2ltcGxlX251bV9vcHMgKGdzKSk7CisjZW5kaWYKKyAgICAgIHJldHVybiBnaW1wbGVfb3BzIChDT05TVF9DQVNUX0dJTVBMRSAoZ3MpKVtpXTsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm4gTlVMTF9UUkVFOworfQorCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIG9wZXJhbmQgSSBmb3Igc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9vcF9wdHIgKGNvbnN0X2dpbXBsZSBncywgdW5zaWduZWQgaSkKK3sKKyAgaWYgKGdpbXBsZV9oYXNfb3BzIChncykpCisgICAgeworI2lmZGVmIEVOQUJMRV9DSEVDS0lORworICAgICAgZ2NjX2Fzc2VydCAoaSA8IGdpbXBsZV9udW1fb3BzIChncykpOworI2VuZGlmCisgICAgICByZXR1cm4gZ2ltcGxlX29wcyAoQ09OU1RfQ0FTVF9HSU1QTEUgKGdzKSkgKyBpOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiBOVUxMOworfQorCisvKiBTZXQgb3BlcmFuZCBJIG9mIHN0YXRlbWVudCBHUyB0byBPUC4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX3NldF9vcCAoZ2ltcGxlIGdzLCB1bnNpZ25lZCBpLCB0cmVlIG9wKQoreworICBnY2NfYXNzZXJ0IChnaW1wbGVfaGFzX29wcyAoZ3MpICYmIGkgPCBnaW1wbGVfbnVtX29wcyAoZ3MpKTsKKworICAvKiBOb3RlLiAgSXQgbWF5IGJlIHRlbXB0aW5nIHRvIGFzc2VydCB0aGF0IE9QIG1hdGNoZXMKKyAgICAgaXNfZ2ltcGxlX29wZXJhbmQsIGJ1dCB0aGF0IHdvdWxkIGJlIHdyb25nLiAgRGlmZmVyZW50IHR1cGxlcworICAgICBhY2NlcHQgc2xpZ2h0bHkgZGlmZmVyZW50IHNldHMgb2YgdHJlZSBvcGVyYW5kcy4gIEVhY2ggY2FsbGVyCisgICAgIHNob3VsZCBwZXJmb3JtIGl0cyBvd24gdmFsaWRhdGlvbi4gICovCisgIGdpbXBsZV9vcHMgKGdzKVtpXSA9IG9wOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBHUyBpcyBhIEdJTVBMRV9BU1NJR04uICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2lzX2dpbXBsZV9hc3NpZ24gKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgcmV0dXJuIGdpbXBsZV9jb2RlIChncykgPT0gR0lNUExFX0FTU0lHTjsKK30KKworLyogRGV0ZXJtaW5lIGlmIGV4cHJlc3Npb24gQ09ERSBpcyBvbmUgb2YgdGhlIHZhbGlkIGV4cHJlc3Npb25zIHRoYXQgY2FuCisgICBiZSB1c2VkIG9uIHRoZSBSSFMgb2YgR0lNUExFIGFzc2lnbm1lbnRzLiAgKi8KKworc3RhdGljIGlubGluZSBlbnVtIGdpbXBsZV9yaHNfY2xhc3MKK2dldF9naW1wbGVfcmhzX2NsYXNzIChlbnVtIHRyZWVfY29kZSBjb2RlKQoreworICByZXR1cm4gKGVudW0gZ2ltcGxlX3Joc19jbGFzcykgZ2ltcGxlX3Joc19jbGFzc190YWJsZVsoaW50KSBjb2RlXTsKK30KKworLyogUmV0dXJuIHRoZSBMSFMgb2YgYXNzaWdubWVudCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9hc3NpZ25fbGhzIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9BU1NJR04pOworICByZXR1cm4gZ2ltcGxlX29wIChncywgMCk7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgTEhTIG9mIGFzc2lnbm1lbnQgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9hc3NpZ25fbGhzX3B0ciAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNTSUdOKTsKKyAgcmV0dXJuIGdpbXBsZV9vcF9wdHIgKGdzLCAwKTsKK30KKworCisvKiBTZXQgTEhTIHRvIGJlIHRoZSBMSFMgb3BlcmFuZCBvZiBhc3NpZ25tZW50IHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2Fzc2lnbl9zZXRfbGhzIChnaW1wbGUgZ3MsIHRyZWUgbGhzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNTSUdOKTsKKyAgZ2ltcGxlX3NldF9vcCAoZ3MsIDAsIGxocyk7CisKKyAgaWYgKGxocyAmJiBUUkVFX0NPREUgKGxocykgPT0gU1NBX05BTUUpCisgICAgU1NBX05BTUVfREVGX1NUTVQgKGxocykgPSBnczsKK30KKworCisvKiBSZXR1cm4gdGhlIGZpcnN0IG9wZXJhbmQgb24gdGhlIFJIUyBvZiBhc3NpZ25tZW50IHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX2Fzc2lnbl9yaHMxIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9BU1NJR04pOworICByZXR1cm4gZ2ltcGxlX29wIChncywgMSk7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmlyc3Qgb3BlcmFuZCBvbiB0aGUgUkhTIG9mIGFzc2lnbm1lbnQKKyAgIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfYXNzaWduX3JoczFfcHRyIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9BU1NJR04pOworICByZXR1cm4gZ2ltcGxlX29wX3B0ciAoZ3MsIDEpOworfQorCisvKiBTZXQgUkhTIHRvIGJlIHRoZSBmaXJzdCBvcGVyYW5kIG9uIHRoZSBSSFMgb2YgYXNzaWdubWVudCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9hc3NpZ25fc2V0X3JoczEgKGdpbXBsZSBncywgdHJlZSByaHMpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9BU1NJR04pOworCisgIGdpbXBsZV9zZXRfb3AgKGdzLCAxLCByaHMpOworfQorCisKKy8qIFJldHVybiB0aGUgc2Vjb25kIG9wZXJhbmQgb24gdGhlIFJIUyBvZiBhc3NpZ25tZW50IHN0YXRlbWVudCBHUy4KKyAgIElmIEdTIGRvZXMgbm90IGhhdmUgdHdvIG9wZXJhbmRzLCBOVUxMIGlzIHJldHVybmVkIGluc3RlYWQuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9hc3NpZ25fcmhzMiAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNTSUdOKTsKKworICBpZiAoZ2ltcGxlX251bV9vcHMgKGdzKSA+PSAzKQorICAgIHJldHVybiBnaW1wbGVfb3AgKGdzLCAyKTsKKyAgZWxzZQorICAgIHJldHVybiBOVUxMX1RSRUU7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgc2Vjb25kIG9wZXJhbmQgb24gdGhlIFJIUyBvZiBhc3NpZ25tZW50CisgICBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX2Fzc2lnbl9yaHMyX3B0ciAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNTSUdOKTsKKyAgcmV0dXJuIGdpbXBsZV9vcF9wdHIgKGdzLCAyKTsKK30KKworCisvKiBTZXQgUkhTIHRvIGJlIHRoZSBzZWNvbmQgb3BlcmFuZCBvbiB0aGUgUkhTIG9mIGFzc2lnbm1lbnQgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfYXNzaWduX3NldF9yaHMyIChnaW1wbGUgZ3MsIHRyZWUgcmhzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNTSUdOKTsKKworICBnaW1wbGVfc2V0X29wIChncywgMiwgcmhzKTsKK30KKworLyogUmV0dXJucyB0cnVlIGlmIEdTIGlzIGEgbm9udGVtcG9yYWwgbW92ZS4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX2Fzc2lnbl9ub250ZW1wb3JhbF9tb3ZlX3AgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0FTU0lHTik7CisgIHJldHVybiBncy0+Z3NiYXNlLm5vbnRlbXBvcmFsX21vdmU7Cit9CisKKy8qIFNldHMgbm9udGVtcG9yYWwgbW92ZSBmbGFnIG9mIEdTIHRvIE5PTlRFTVBPUkFMLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfYXNzaWduX3NldF9ub250ZW1wb3JhbF9tb3ZlIChnaW1wbGUgZ3MsIGJvb2wgbm9udGVtcG9yYWwpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9BU1NJR04pOworICBncy0+Z3NiYXNlLm5vbnRlbXBvcmFsX21vdmUgPSBub250ZW1wb3JhbDsKK30KKworCisvKiBSZXR1cm4gdGhlIGNvZGUgb2YgdGhlIGV4cHJlc3Npb24gY29tcHV0ZWQgb24gdGhlIHJocyBvZiBhc3NpZ25tZW50CisgICBzdGF0ZW1lbnQgR1MuICBJbiBjYXNlIHRoYXQgdGhlIFJIUyBpcyBhIHNpbmdsZSBvYmplY3QsIHJldHVybnMgdGhlCisgICB0cmVlIGNvZGUgb2YgdGhlIG9iamVjdC4gICovCisKK3N0YXRpYyBpbmxpbmUgZW51bSB0cmVlX2NvZGUKK2dpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgZW51bSB0cmVlX2NvZGUgY29kZTsKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0FTU0lHTik7CisKKyAgY29kZSA9IGdpbXBsZV9leHByX2NvZGUgKGdzKTsKKyAgaWYgKGdldF9naW1wbGVfcmhzX2NsYXNzIChjb2RlKSA9PSBHSU1QTEVfU0lOR0xFX1JIUykKKyAgICBjb2RlID0gVFJFRV9DT0RFIChnaW1wbGVfYXNzaWduX3JoczEgKGdzKSk7CisKKyAgcmV0dXJuIGNvZGU7Cit9CisKKworLyogU2V0IENPREUgdG8gYmUgdGhlIGNvZGUgZm9yIHRoZSBleHByZXNzaW9uIGNvbXB1dGVkIG9uIHRoZSBSSFMgb2YKKyAgIGFzc2lnbm1lbnQgUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2Fzc2lnbl9zZXRfcmhzX2NvZGUgKGdpbXBsZSBzLCBlbnVtIHRyZWVfY29kZSBjb2RlKQoreworICBHSU1QTEVfQ0hFQ0sgKHMsIEdJTVBMRV9BU1NJR04pOworICBzLT5nc2Jhc2Uuc3ViY29kZSA9IGNvZGU7Cit9CisKKworLyogUmV0dXJuIHRoZSBnaW1wbGUgcmhzIGNsYXNzIG9mIHRoZSBjb2RlIG9mIHRoZSBleHByZXNzaW9uIGNvbXB1dGVkIG9uCisgICB0aGUgcmhzIG9mIGFzc2lnbm1lbnQgc3RhdGVtZW50IEdTLgorICAgVGhpcyB3aWxsIG5ldmVyIHJldHVybiBHSU1QTEVfSU5WQUxJRF9SSFMuICAqLworCitzdGF0aWMgaW5saW5lIGVudW0gZ2ltcGxlX3Joc19jbGFzcworZ2ltcGxlX2Fzc2lnbl9yaHNfY2xhc3MgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgcmV0dXJuIGdldF9naW1wbGVfcmhzX2NsYXNzIChnaW1wbGVfYXNzaWduX3Joc19jb2RlIChncykpOworfQorCisKKy8qIFJldHVybiB0cnVlIGlmIFMgaXMgYSB0eXBlLWNhc3QgYXNzaWdubWVudC4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX2Fzc2lnbl9jYXN0X3AgKGdpbXBsZSBzKQoreworICBpZiAoaXNfZ2ltcGxlX2Fzc2lnbiAocykpCisgICAgeworICAgICAgZW51bSB0cmVlX2NvZGUgc2MgPSBnaW1wbGVfYXNzaWduX3Joc19jb2RlIChzKTsKKyAgICAgIHJldHVybiBDT05WRVJUX0VYUFJfQ09ERV9QIChzYykKKwkgICAgIHx8IHNjID09IFZJRVdfQ09OVkVSVF9FWFBSCisJICAgICB8fCBzYyA9PSBGSVhfVFJVTkNfRVhQUjsKKyAgICB9CisKKyAgcmV0dXJuIGZhbHNlOworfQorCisKKy8qIFJldHVybiB0cnVlIGlmIEdTIGlzIGEgR0lNUExFX0NBTEwuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2lzX2dpbXBsZV9jYWxsIChjb25zdF9naW1wbGUgZ3MpCit7CisgIHJldHVybiBnaW1wbGVfY29kZSAoZ3MpID09IEdJTVBMRV9DQUxMOworfQorCisvKiBSZXR1cm4gdGhlIExIUyBvZiBjYWxsIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX2NhbGxfbGhzIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9DQUxMKTsKKyAgcmV0dXJuIGdpbXBsZV9vcCAoZ3MsIDApOworfQorCisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIExIUyBvZiBjYWxsIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfY2FsbF9saHNfcHRyIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9DQUxMKTsKKyAgcmV0dXJuIGdpbXBsZV9vcF9wdHIgKGdzLCAwKTsKK30KKworCisvKiBTZXQgTEhTIHRvIGJlIHRoZSBMSFMgb3BlcmFuZCBvZiBjYWxsIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2NhbGxfc2V0X2xocyAoZ2ltcGxlIGdzLCB0cmVlIGxocykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NBTEwpOworICBnaW1wbGVfc2V0X29wIChncywgMCwgbGhzKTsKKyAgaWYgKGxocyAmJiBUUkVFX0NPREUgKGxocykgPT0gU1NBX05BTUUpCisgICAgU1NBX05BTUVfREVGX1NUTVQgKGxocykgPSBnczsKK30KKworCisvKiBSZXR1cm4gdGhlIHRyZWUgbm9kZSByZXByZXNlbnRpbmcgdGhlIGZ1bmN0aW9uIGNhbGxlZCBieSBjYWxsCisgICBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9jYWxsX2ZuIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9DQUxMKTsKKyAgcmV0dXJuIGdpbXBsZV9vcCAoZ3MsIDEpOworfQorCisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRyZWUgbm9kZSByZXByZXNlbnRpbmcgdGhlIGZ1bmN0aW9uIGNhbGxlZCBieSBjYWxsCisgICBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX2NhbGxfZm5fcHRyIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9DQUxMKTsKKyAgcmV0dXJuIGdpbXBsZV9vcF9wdHIgKGdzLCAxKTsKK30KKworCisvKiBTZXQgRk4gdG8gYmUgdGhlIGZ1bmN0aW9uIGNhbGxlZCBieSBjYWxsIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2NhbGxfc2V0X2ZuIChnaW1wbGUgZ3MsIHRyZWUgZm4pCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9DQUxMKTsKKyAgZ2ltcGxlX3NldF9vcCAoZ3MsIDEsIGZuKTsKK30KKworCisvKiBTZXQgRk5ERUNMIHRvIGJlIHRoZSBmdW5jdGlvbiBjYWxsZWQgYnkgY2FsbCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9jYWxsX3NldF9mbmRlY2wgKGdpbXBsZSBncywgdHJlZSBkZWNsKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQ0FMTCk7CisgIGdpbXBsZV9zZXRfb3AgKGdzLCAxLCBidWlsZF9mb2xkX2FkZHJfZXhwcl9sb2MgKGdpbXBsZV9sb2NhdGlvbiAoZ3MpLCBkZWNsKSk7Cit9CisKKworLyogSWYgYSBnaXZlbiBHSU1QTEVfQ0FMTCdzIGNhbGxlZSBpcyBhIEZVTkNUSU9OX0RFQ0wsIHJldHVybiBpdC4KKyAgIE90aGVyd2lzZSByZXR1cm4gTlVMTC4gIFRoaXMgZnVuY3Rpb24gaXMgYW5hbG9nb3VzIHRvCisgICBnZXRfY2FsbGVlX2ZuZGVjbCBpbiB0cmVlIGxhbmQuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9jYWxsX2ZuZGVjbCAoY29uc3RfZ2ltcGxlIGdzKQoreworICB0cmVlIGFkZHIgPSBnaW1wbGVfY2FsbF9mbiAoZ3MpOworICBpZiAoVFJFRV9DT0RFIChhZGRyKSA9PSBBRERSX0VYUFIpCisgICAgcmV0dXJuIFRSRUVfT1BFUkFORCAoYWRkciwgMCk7CisgIHJldHVybiBOVUxMX1RSRUU7Cit9CisKKworLyogUmV0dXJuIHRoZSB0eXBlIHJldHVybmVkIGJ5IGNhbGwgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfY2FsbF9yZXR1cm5fdHlwZSAoY29uc3RfZ2ltcGxlIGdzKQoreworICB0cmVlIGZuID0gZ2ltcGxlX2NhbGxfZm4gKGdzKTsKKyAgdHJlZSB0eXBlID0gVFJFRV9UWVBFIChmbik7CisKKyAgLyogU2VlIHRocm91Z2ggdGhlIHBvaW50ZXIuICAqLworICB0eXBlID0gVFJFRV9UWVBFICh0eXBlKTsKKworICAvKiBUaGUgdHlwZSByZXR1cm5lZCBieSBhIEZVTkNUSU9OX0RFQ0wgaXMgdGhlIHR5cGUgb2YgaXRzCisgICAgIGZ1bmN0aW9uIHR5cGUuICAqLworICByZXR1cm4gVFJFRV9UWVBFICh0eXBlKTsKK30KKworCisvKiBSZXR1cm4gdGhlIHN0YXRpYyBjaGFpbiBmb3IgY2FsbCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9jYWxsX2NoYWluIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9DQUxMKTsKKyAgcmV0dXJuIGdpbXBsZV9vcCAoZ3MsIDIpOworfQorCisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHN0YXRpYyBjaGFpbiBmb3IgY2FsbCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX2NhbGxfY2hhaW5fcHRyIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9DQUxMKTsKKyAgcmV0dXJuIGdpbXBsZV9vcF9wdHIgKGdzLCAyKTsKK30KKworLyogU2V0IENIQUlOIHRvIGJlIHRoZSBzdGF0aWMgY2hhaW4gZm9yIGNhbGwgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfY2FsbF9zZXRfY2hhaW4gKGdpbXBsZSBncywgdHJlZSBjaGFpbikKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NBTEwpOworCisgIGdpbXBsZV9zZXRfb3AgKGdzLCAyLCBjaGFpbik7Cit9CisKKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHVzZWQgYnkgY2FsbCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkCitnaW1wbGVfY2FsbF9udW1fYXJncyAoY29uc3RfZ2ltcGxlIGdzKQoreworICB1bnNpZ25lZCBudW1fb3BzOworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQ0FMTCk7CisgIG51bV9vcHMgPSBnaW1wbGVfbnVtX29wcyAoZ3MpOworICByZXR1cm4gbnVtX29wcyAtIDM7Cit9CisKKworLyogUmV0dXJuIHRoZSBhcmd1bWVudCBhdCBwb3NpdGlvbiBJTkRFWCBmb3IgY2FsbCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9jYWxsX2FyZyAoY29uc3RfZ2ltcGxlIGdzLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NBTEwpOworICByZXR1cm4gZ2ltcGxlX29wIChncywgaW5kZXggKyAzKTsKK30KKworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBhcmd1bWVudCBhdCBwb3NpdGlvbiBJTkRFWCBmb3IgY2FsbAorICAgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9jYWxsX2FyZ19wdHIgKGNvbnN0X2dpbXBsZSBncywgdW5zaWduZWQgaW5kZXgpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9DQUxMKTsKKyAgcmV0dXJuIGdpbXBsZV9vcF9wdHIgKGdzLCBpbmRleCArIDMpOworfQorCisKKy8qIFNldCBBUkcgdG8gYmUgdGhlIGFyZ3VtZW50IGF0IHBvc2l0aW9uIElOREVYIGZvciBjYWxsIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2NhbGxfc2V0X2FyZyAoZ2ltcGxlIGdzLCB1bnNpZ25lZCBpbmRleCwgdHJlZSBhcmcpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9DQUxMKTsKKyAgZ2ltcGxlX3NldF9vcCAoZ3MsIGluZGV4ICsgMywgYXJnKTsKK30KKworCisvKiBJZiBUQUlMX1AgaXMgdHJ1ZSwgbWFyayBjYWxsIHN0YXRlbWVudCBTIGFzIGJlaW5nIGEgdGFpbCBjYWxsCisgICAoaS5lLiwgYSBjYWxsIGp1c3QgYmVmb3JlIHRoZSBleGl0IG9mIGEgZnVuY3Rpb24pLiAgVGhlc2UgY2FsbHMgYXJlCisgICBjYW5kaWRhdGUgZm9yIHRhaWwgY2FsbCBvcHRpbWl6YXRpb24uICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9jYWxsX3NldF90YWlsIChnaW1wbGUgcywgYm9vbCB0YWlsX3ApCit7CisgIEdJTVBMRV9DSEVDSyAocywgR0lNUExFX0NBTEwpOworICBpZiAodGFpbF9wKQorICAgIHMtPmdzYmFzZS5zdWJjb2RlIHw9IEdGX0NBTExfVEFJTENBTEw7CisgIGVsc2UKKyAgICBzLT5nc2Jhc2Uuc3ViY29kZSAmPSB+R0ZfQ0FMTF9UQUlMQ0FMTDsKK30KKworCisvKiBSZXR1cm4gdHJ1ZSBpZiBHSU1QTEVfQ0FMTCBTIGlzIG1hcmtlZCBhcyBhIHRhaWwgY2FsbC4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX2NhbGxfdGFpbF9wIChnaW1wbGUgcykKK3sKKyAgR0lNUExFX0NIRUNLIChzLCBHSU1QTEVfQ0FMTCk7CisgIHJldHVybiAocy0+Z3NiYXNlLnN1YmNvZGUgJiBHRl9DQUxMX1RBSUxDQUxMKSAhPSAwOworfQorCisKKy8qIFNldCB0aGUgaW5saW5hYmxlIHN0YXR1cyBvZiBHSU1QTEVfQ0FMTCBTIHRvIElOTElOQUJMRV9QLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfY2FsbF9zZXRfY2Fubm90X2lubGluZSAoZ2ltcGxlIHMsIGJvb2wgaW5saW5hYmxlX3ApCit7CisgIEdJTVBMRV9DSEVDSyAocywgR0lNUExFX0NBTEwpOworICBpZiAoaW5saW5hYmxlX3ApCisgICAgcy0+Z3NiYXNlLnN1YmNvZGUgfD0gR0ZfQ0FMTF9DQU5OT1RfSU5MSU5FOworICBlbHNlCisgICAgcy0+Z3NiYXNlLnN1YmNvZGUgJj0gfkdGX0NBTExfQ0FOTk9UX0lOTElORTsKK30KKworCisvKiBSZXR1cm4gdHJ1ZSBpZiBHSU1QTEVfQ0FMTCBTIGNhbm5vdCBiZSBpbmxpbmVkLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitnaW1wbGVfY2FsbF9jYW5ub3RfaW5saW5lX3AgKGdpbXBsZSBzKQoreworICBHSU1QTEVfQ0hFQ0sgKHMsIEdJTVBMRV9DQUxMKTsKKyAgcmV0dXJuIChzLT5nc2Jhc2Uuc3ViY29kZSAmIEdGX0NBTExfQ0FOTk9UX0lOTElORSkgIT0gMDsKK30KKworCisvKiBJZiBSRVRVUk5fU0xPVF9PUFRfUCBpcyB0cnVlIG1hcmsgR0lNUExFX0NBTEwgUyBhcyB2YWxpZCBmb3IgcmV0dXJuCisgICBzbG90IG9wdGltaXphdGlvbi4gIFRoaXMgdHJhbnNmb3JtYXRpb24gdXNlcyB0aGUgdGFyZ2V0IG9mIHRoZSBjYWxsCisgICBleHBhbnNpb24gYXMgdGhlIHJldHVybiBzbG90IGZvciBjYWxscyB0aGF0IHJldHVybiBpbiBtZW1vcnkuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9jYWxsX3NldF9yZXR1cm5fc2xvdF9vcHQgKGdpbXBsZSBzLCBib29sIHJldHVybl9zbG90X29wdF9wKQoreworICBHSU1QTEVfQ0hFQ0sgKHMsIEdJTVBMRV9DQUxMKTsKKyAgaWYgKHJldHVybl9zbG90X29wdF9wKQorICAgIHMtPmdzYmFzZS5zdWJjb2RlIHw9IEdGX0NBTExfUkVUVVJOX1NMT1RfT1BUOworICBlbHNlCisgICAgcy0+Z3NiYXNlLnN1YmNvZGUgJj0gfkdGX0NBTExfUkVUVVJOX1NMT1RfT1BUOworfQorCisKKy8qIFJldHVybiB0cnVlIGlmIFMgaXMgbWFya2VkIGZvciByZXR1cm4gc2xvdCBvcHRpbWl6YXRpb24uICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2dpbXBsZV9jYWxsX3JldHVybl9zbG90X29wdF9wIChnaW1wbGUgcykKK3sKKyAgR0lNUExFX0NIRUNLIChzLCBHSU1QTEVfQ0FMTCk7CisgIHJldHVybiAocy0+Z3NiYXNlLnN1YmNvZGUgJiBHRl9DQUxMX1JFVFVSTl9TTE9UX09QVCkgIT0gMDsKK30KKworCisvKiBJZiBGUk9NX1RIVU5LX1AgaXMgdHJ1ZSwgbWFyayBHSU1QTEVfQ0FMTCBTIGFzIGJlaW5nIHRoZSBqdW1wIGZyb20gYQorICAgdGh1bmsgdG8gdGhlIHRodW5rZWQtdG8gZnVuY3Rpb24uICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9jYWxsX3NldF9mcm9tX3RodW5rIChnaW1wbGUgcywgYm9vbCBmcm9tX3RodW5rX3ApCit7CisgIEdJTVBMRV9DSEVDSyAocywgR0lNUExFX0NBTEwpOworICBpZiAoZnJvbV90aHVua19wKQorICAgIHMtPmdzYmFzZS5zdWJjb2RlIHw9IEdGX0NBTExfRlJPTV9USFVOSzsKKyAgZWxzZQorICAgIHMtPmdzYmFzZS5zdWJjb2RlICY9IH5HRl9DQUxMX0ZST01fVEhVTks7Cit9CisKKworLyogUmV0dXJuIHRydWUgaWYgR0lNUExFX0NBTEwgUyBpcyBhIGp1bXAgZnJvbSBhIHRodW5rLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitnaW1wbGVfY2FsbF9mcm9tX3RodW5rX3AgKGdpbXBsZSBzKQoreworICBHSU1QTEVfQ0hFQ0sgKHMsIEdJTVBMRV9DQUxMKTsKKyAgcmV0dXJuIChzLT5nc2Jhc2Uuc3ViY29kZSAmIEdGX0NBTExfRlJPTV9USFVOSykgIT0gMDsKK30KKworCisvKiBJZiBQQVNTX0FSR19QQUNLX1AgaXMgdHJ1ZSwgR0lNUExFX0NBTEwgUyBpcyBhIHN0ZGFyZyBjYWxsIHRoYXQgbmVlZHMgdGhlCisgICBhcmd1bWVudCBwYWNrIGluIGl0cyBhcmd1bWVudCBsaXN0LiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfY2FsbF9zZXRfdmFfYXJnX3BhY2sgKGdpbXBsZSBzLCBib29sIHBhc3NfYXJnX3BhY2tfcCkKK3sKKyAgR0lNUExFX0NIRUNLIChzLCBHSU1QTEVfQ0FMTCk7CisgIGlmIChwYXNzX2FyZ19wYWNrX3ApCisgICAgcy0+Z3NiYXNlLnN1YmNvZGUgfD0gR0ZfQ0FMTF9WQV9BUkdfUEFDSzsKKyAgZWxzZQorICAgIHMtPmdzYmFzZS5zdWJjb2RlICY9IH5HRl9DQUxMX1ZBX0FSR19QQUNLOworfQorCisKKy8qIFJldHVybiB0cnVlIGlmIEdJTVBMRV9DQUxMIFMgaXMgYSBzdGRhcmcgY2FsbCB0aGF0IG5lZWRzIHRoZQorICAgYXJndW1lbnQgcGFjayBpbiBpdHMgYXJndW1lbnQgbGlzdC4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX2NhbGxfdmFfYXJnX3BhY2tfcCAoZ2ltcGxlIHMpCit7CisgIEdJTVBMRV9DSEVDSyAocywgR0lNUExFX0NBTEwpOworICByZXR1cm4gKHMtPmdzYmFzZS5zdWJjb2RlICYgR0ZfQ0FMTF9WQV9BUkdfUEFDSykgIT0gMDsKK30KKworCisvKiBSZXR1cm4gdHJ1ZSBpZiBTIGlzIGEgbm9yZXR1cm4gY2FsbC4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX2NhbGxfbm9yZXR1cm5fcCAoZ2ltcGxlIHMpCit7CisgIEdJTVBMRV9DSEVDSyAocywgR0lNUExFX0NBTEwpOworICByZXR1cm4gKGdpbXBsZV9jYWxsX2ZsYWdzIChzKSAmIEVDRl9OT1JFVFVSTikgIT0gMDsKK30KKworCisvKiBJZiBOT1RIUk9XX1AgaXMgdHJ1ZSwgR0lNUExFX0NBTEwgUyBpcyBhIGNhbGwgdGhhdCBpcyBrbm93biB0byBub3QgdGhyb3cKKyAgIGV2ZW4gaWYgdGhlIGNhbGxlZCBmdW5jdGlvbiBjYW4gdGhyb3cgaW4gb3RoZXIgY2FzZXMuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9jYWxsX3NldF9ub3Rocm93IChnaW1wbGUgcywgYm9vbCBub3Rocm93X3ApCit7CisgIEdJTVBMRV9DSEVDSyAocywgR0lNUExFX0NBTEwpOworICBpZiAobm90aHJvd19wKQorICAgIHMtPmdzYmFzZS5zdWJjb2RlIHw9IEdGX0NBTExfTk9USFJPVzsKKyAgZWxzZQorICAgIHMtPmdzYmFzZS5zdWJjb2RlICY9IH5HRl9DQUxMX05PVEhST1c7Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIFMgaXMgYSBub3Rocm93IGNhbGwuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2dpbXBsZV9jYWxsX25vdGhyb3dfcCAoZ2ltcGxlIHMpCit7CisgIEdJTVBMRV9DSEVDSyAocywgR0lNUExFX0NBTEwpOworICByZXR1cm4gKGdpbXBsZV9jYWxsX2ZsYWdzIChzKSAmIEVDRl9OT1RIUk9XKSAhPSAwOworfQorCisKKy8qIENvcHkgYWxsIHRoZSBHRl9DQUxMXyogZmxhZ3MgZnJvbSBPUklHX0NBTEwgdG8gREVTVF9DQUxMLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfY2FsbF9jb3B5X2ZsYWdzIChnaW1wbGUgZGVzdF9jYWxsLCBnaW1wbGUgb3JpZ19jYWxsKQoreworICBHSU1QTEVfQ0hFQ0sgKGRlc3RfY2FsbCwgR0lNUExFX0NBTEwpOworICBHSU1QTEVfQ0hFQ0sgKG9yaWdfY2FsbCwgR0lNUExFX0NBTEwpOworICBkZXN0X2NhbGwtPmdzYmFzZS5zdWJjb2RlID0gb3JpZ19jYWxsLT5nc2Jhc2Uuc3ViY29kZTsKK30KKworCisvKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBpcyBhIEdJTVBMRV9BU1NJR04gb3IgYSBHSU1QTEVfQ0FMTCB3aXRoIGEKKyAgIG5vbi1OVUxMIGxocy4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX2hhc19saHMgKGdpbXBsZSBzdG10KQoreworICByZXR1cm4gKGlzX2dpbXBsZV9hc3NpZ24gKHN0bXQpCisJICB8fCAoaXNfZ2ltcGxlX2NhbGwgKHN0bXQpCisJICAgICAgJiYgZ2ltcGxlX2NhbGxfbGhzIChzdG10KSAhPSBOVUxMX1RSRUUpKTsKK30KKworCisvKiBSZXR1cm4gdGhlIGNvZGUgb2YgdGhlIHByZWRpY2F0ZSBjb21wdXRlZCBieSBjb25kaXRpb25hbCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIGVudW0gdHJlZV9jb2RlCitnaW1wbGVfY29uZF9jb2RlIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9DT05EKTsKKyAgcmV0dXJuIChlbnVtIHRyZWVfY29kZSkgZ3MtPmdzYmFzZS5zdWJjb2RlOworfQorCisKKy8qIFNldCBDT0RFIHRvIGJlIHRoZSBwcmVkaWNhdGUgY29kZSBmb3IgdGhlIGNvbmRpdGlvbmFsIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2NvbmRfc2V0X2NvZGUgKGdpbXBsZSBncywgZW51bSB0cmVlX2NvZGUgY29kZSkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NPTkQpOworICBncy0+Z3NiYXNlLnN1YmNvZGUgPSBjb2RlOworfQorCisKKy8qIFJldHVybiB0aGUgTEhTIG9mIHRoZSBwcmVkaWNhdGUgY29tcHV0ZWQgYnkgY29uZGl0aW9uYWwgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfY29uZF9saHMgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NPTkQpOworICByZXR1cm4gZ2ltcGxlX29wIChncywgMCk7Cit9CisKKy8qIFJldHVybiB0aGUgcG9pbnRlciB0byB0aGUgTEhTIG9mIHRoZSBwcmVkaWNhdGUgY29tcHV0ZWQgYnkgY29uZGl0aW9uYWwKKyAgIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfY29uZF9saHNfcHRyIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9DT05EKTsKKyAgcmV0dXJuIGdpbXBsZV9vcF9wdHIgKGdzLCAwKTsKK30KKworLyogU2V0IExIUyB0byBiZSB0aGUgTEhTIG9wZXJhbmQgb2YgdGhlIHByZWRpY2F0ZSBjb21wdXRlZCBieQorICAgY29uZGl0aW9uYWwgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfY29uZF9zZXRfbGhzIChnaW1wbGUgZ3MsIHRyZWUgbGhzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQ09ORCk7CisgIGdpbXBsZV9zZXRfb3AgKGdzLCAwLCBsaHMpOworfQorCisKKy8qIFJldHVybiB0aGUgUkhTIG9wZXJhbmQgb2YgdGhlIHByZWRpY2F0ZSBjb21wdXRlZCBieSBjb25kaXRpb25hbCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX2NvbmRfcmhzIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9DT05EKTsKKyAgcmV0dXJuIGdpbXBsZV9vcCAoZ3MsIDEpOworfQorCisvKiBSZXR1cm4gdGhlIHBvaW50ZXIgdG8gdGhlIFJIUyBvcGVyYW5kIG9mIHRoZSBwcmVkaWNhdGUgY29tcHV0ZWQgYnkKKyAgIGNvbmRpdGlvbmFsIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9jb25kX3Joc19wdHIgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NPTkQpOworICByZXR1cm4gZ2ltcGxlX29wX3B0ciAoZ3MsIDEpOworfQorCisKKy8qIFNldCBSSFMgdG8gYmUgdGhlIFJIUyBvcGVyYW5kIG9mIHRoZSBwcmVkaWNhdGUgY29tcHV0ZWQgYnkKKyAgIGNvbmRpdGlvbmFsIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2NvbmRfc2V0X3JocyAoZ2ltcGxlIGdzLCB0cmVlIHJocykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NPTkQpOworICBnaW1wbGVfc2V0X29wIChncywgMSwgcmhzKTsKK30KKworCisvKiBSZXR1cm4gdGhlIGxhYmVsIHVzZWQgYnkgY29uZGl0aW9uYWwgc3RhdGVtZW50IEdTIHdoZW4gaXRzCisgICBwcmVkaWNhdGUgZXZhbHVhdGVzIHRvIHRydWUuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9jb25kX3RydWVfbGFiZWwgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NPTkQpOworICByZXR1cm4gZ2ltcGxlX29wIChncywgMik7Cit9CisKKworLyogU2V0IExBQkVMIHRvIGJlIHRoZSBsYWJlbCB1c2VkIGJ5IGNvbmRpdGlvbmFsIHN0YXRlbWVudCBHUyB3aGVuIGl0cworICAgcHJlZGljYXRlIGV2YWx1YXRlcyB0byB0cnVlLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfY29uZF9zZXRfdHJ1ZV9sYWJlbCAoZ2ltcGxlIGdzLCB0cmVlIGxhYmVsKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQ09ORCk7CisgIGdpbXBsZV9zZXRfb3AgKGdzLCAyLCBsYWJlbCk7Cit9CisKKworLyogU2V0IExBQkVMIHRvIGJlIHRoZSBsYWJlbCB1c2VkIGJ5IGNvbmRpdGlvbmFsIHN0YXRlbWVudCBHUyB3aGVuIGl0cworICAgcHJlZGljYXRlIGV2YWx1YXRlcyB0byBmYWxzZS4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2NvbmRfc2V0X2ZhbHNlX2xhYmVsIChnaW1wbGUgZ3MsIHRyZWUgbGFiZWwpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9DT05EKTsKKyAgZ2ltcGxlX3NldF9vcCAoZ3MsIDMsIGxhYmVsKTsKK30KKworCisvKiBSZXR1cm4gdGhlIGxhYmVsIHVzZWQgYnkgY29uZGl0aW9uYWwgc3RhdGVtZW50IEdTIHdoZW4gaXRzCisgICBwcmVkaWNhdGUgZXZhbHVhdGVzIHRvIGZhbHNlLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfY29uZF9mYWxzZV9sYWJlbCAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQ09ORCk7CisgIHJldHVybiBnaW1wbGVfb3AgKGdzLCAzKTsKK30KKworCisvKiBTZXQgdGhlIGNvbmRpdGlvbmFsIENPTkRfU1RNVCB0byBiZSBvZiB0aGUgZm9ybSAnaWYgKDEgPT0gMCknLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfY29uZF9tYWtlX2ZhbHNlIChnaW1wbGUgZ3MpCit7CisgIGdpbXBsZV9jb25kX3NldF9saHMgKGdzLCBib29sZWFuX3RydWVfbm9kZSk7CisgIGdpbXBsZV9jb25kX3NldF9yaHMgKGdzLCBib29sZWFuX2ZhbHNlX25vZGUpOworICBncy0+Z3NiYXNlLnN1YmNvZGUgPSBFUV9FWFBSOworfQorCisKKy8qIFNldCB0aGUgY29uZGl0aW9uYWwgQ09ORF9TVE1UIHRvIGJlIG9mIHRoZSBmb3JtICdpZiAoMSA9PSAxKScuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9jb25kX21ha2VfdHJ1ZSAoZ2ltcGxlIGdzKQoreworICBnaW1wbGVfY29uZF9zZXRfbGhzIChncywgYm9vbGVhbl90cnVlX25vZGUpOworICBnaW1wbGVfY29uZF9zZXRfcmhzIChncywgYm9vbGVhbl90cnVlX25vZGUpOworICBncy0+Z3NiYXNlLnN1YmNvZGUgPSBFUV9FWFBSOworfQorCisvKiBDaGVjayBpZiBjb25kaXRpb25hbCBzdGF0ZW1lbnRlIEdTIGlzIG9mIHRoZSBmb3JtICdpZiAoMSA9PSAxKScsCisgICdpZiAoMCA9PSAwKScsICdpZiAoMSAhPSAwKScgb3IgJ2lmICgwICE9IDEpJyAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2dpbXBsZV9jb25kX3RydWVfcCAoY29uc3RfZ2ltcGxlIGdzKQoreworICB0cmVlIGxocyA9IGdpbXBsZV9jb25kX2xocyAoZ3MpOworICB0cmVlIHJocyA9IGdpbXBsZV9jb25kX3JocyAoZ3MpOworICBlbnVtIHRyZWVfY29kZSBjb2RlID0gZ2ltcGxlX2NvbmRfY29kZSAoZ3MpOworCisgIGlmIChsaHMgIT0gYm9vbGVhbl90cnVlX25vZGUgJiYgbGhzICE9IGJvb2xlYW5fZmFsc2Vfbm9kZSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgaWYgKHJocyAhPSBib29sZWFuX3RydWVfbm9kZSAmJiByaHMgIT0gYm9vbGVhbl9mYWxzZV9ub2RlKQorICAgIHJldHVybiBmYWxzZTsKKworICBpZiAoY29kZSA9PSBORV9FWFBSICYmIGxocyAhPSByaHMpCisgICAgcmV0dXJuIHRydWU7CisKKyAgaWYgKGNvZGUgPT0gRVFfRVhQUiAmJiBsaHMgPT0gcmhzKQorICAgICAgcmV0dXJuIHRydWU7CisKKyAgcmV0dXJuIGZhbHNlOworfQorCisvKiBDaGVjayBpZiBjb25kaXRpb25hbCBzdGF0ZW1lbnQgR1MgaXMgb2YgdGhlIGZvcm0gJ2lmICgxICE9IDEpJywKKyAgICdpZiAoMCAhPSAwKScsICdpZiAoMSA9PSAwKScgb3IgJ2lmICgwID09IDEpJyAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2dpbXBsZV9jb25kX2ZhbHNlX3AgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgdHJlZSBsaHMgPSBnaW1wbGVfY29uZF9saHMgKGdzKTsKKyAgdHJlZSByaHMgPSBnaW1wbGVfY29uZF9yaHMgKGdzKTsKKyAgZW51bSB0cmVlX2NvZGUgY29kZSA9IGdpbXBsZV9jb25kX2NvZGUgKGdzKTsKKworICBpZiAobGhzICE9IGJvb2xlYW5fdHJ1ZV9ub2RlICYmIGxocyAhPSBib29sZWFuX2ZhbHNlX25vZGUpCisgICAgcmV0dXJuIGZhbHNlOworCisgIGlmIChyaHMgIT0gYm9vbGVhbl90cnVlX25vZGUgJiYgcmhzICE9IGJvb2xlYW5fZmFsc2Vfbm9kZSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgaWYgKGNvZGUgPT0gTkVfRVhQUiAmJiBsaHMgPT0gcmhzKQorICAgIHJldHVybiB0cnVlOworCisgIGlmIChjb2RlID09IEVRX0VYUFIgJiYgbGhzICE9IHJocykKKyAgICAgIHJldHVybiB0cnVlOworCisgIHJldHVybiBmYWxzZTsKK30KKworLyogQ2hlY2sgaWYgY29uZGl0aW9uYWwgc3RhdGVtZW50IEdTIGlzIG9mIHRoZSBmb3JtICdpZiAodmFyICE9IDApJyBvcgorICAgJ2lmICh2YXIgPT0gMSknICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX2NvbmRfc2luZ2xlX3Zhcl9wIChnaW1wbGUgZ3MpCit7CisgIGlmIChnaW1wbGVfY29uZF9jb2RlIChncykgPT0gTkVfRVhQUgorICAgICAgJiYgZ2ltcGxlX2NvbmRfcmhzIChncykgPT0gYm9vbGVhbl9mYWxzZV9ub2RlKQorICAgIHJldHVybiB0cnVlOworCisgIGlmIChnaW1wbGVfY29uZF9jb2RlIChncykgPT0gRVFfRVhQUgorICAgICAgJiYgZ2ltcGxlX2NvbmRfcmhzIChncykgPT0gYm9vbGVhbl90cnVlX25vZGUpCisgICAgcmV0dXJuIHRydWU7CisKKyAgcmV0dXJuIGZhbHNlOworfQorCisvKiBTZXQgdGhlIGNvZGUsIExIUyBhbmQgUkhTIG9mIEdJTVBMRV9DT05EIFNUTVQgZnJvbSBDT0RFLCBMSFMgYW5kIFJIUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2NvbmRfc2V0X2NvbmRpdGlvbiAoZ2ltcGxlIHN0bXQsIGVudW0gdHJlZV9jb2RlIGNvZGUsIHRyZWUgbGhzLCB0cmVlIHJocykKK3sKKyAgZ2ltcGxlX2NvbmRfc2V0X2NvZGUgKHN0bXQsIGNvZGUpOworICBnaW1wbGVfY29uZF9zZXRfbGhzIChzdG10LCBsaHMpOworICBnaW1wbGVfY29uZF9zZXRfcmhzIChzdG10LCByaHMpOworfQorCisvKiBSZXR1cm4gdGhlIExBQkVMX0RFQ0wgbm9kZSB1c2VkIGJ5IEdJTVBMRV9MQUJFTCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9sYWJlbF9sYWJlbCAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfTEFCRUwpOworICByZXR1cm4gZ2ltcGxlX29wIChncywgMCk7Cit9CisKKworLyogU2V0IExBQkVMIHRvIGJlIHRoZSBMQUJFTF9ERUNMIG5vZGUgdXNlZCBieSBHSU1QTEVfTEFCRUwgc3RhdGVtZW50CisgICBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2xhYmVsX3NldF9sYWJlbCAoZ2ltcGxlIGdzLCB0cmVlIGxhYmVsKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfTEFCRUwpOworICBnaW1wbGVfc2V0X29wIChncywgMCwgbGFiZWwpOworfQorCisKKy8qIFJldHVybiB0aGUgZGVzdGluYXRpb24gb2YgdGhlIHVuY29uZGl0aW9uYWwganVtcCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX2dvdG9fZGVzdCAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfR09UTyk7CisgIHJldHVybiBnaW1wbGVfb3AgKGdzLCAwKTsKK30KKworCisvKiBTZXQgREVTVCB0byBiZSB0aGUgZGVzdGluYXRpb24gb2YgdGhlIHVuY29uZGl0b25hbCBqdW1wIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfZ290b19zZXRfZGVzdCAoZ2ltcGxlIGdzLCB0cmVlIGRlc3QpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9HT1RPKTsKKyAgZ2ltcGxlX3NldF9vcCAoZ3MsIDAsIGRlc3QpOworfQorCisKKy8qIFJldHVybiB0aGUgdmFyaWFibGVzIGRlY2xhcmVkIGluIHRoZSBHSU1QTEVfQklORCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9iaW5kX3ZhcnMgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0JJTkQpOworICByZXR1cm4gZ3MtPmdpbXBsZV9iaW5kLnZhcnM7Cit9CisKKworLyogU2V0IFZBUlMgdG8gYmUgdGhlIHNldCBvZiB2YXJpYWJsZXMgZGVjbGFyZWQgaW4gdGhlIEdJTVBMRV9CSU5ECisgICBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9iaW5kX3NldF92YXJzIChnaW1wbGUgZ3MsIHRyZWUgdmFycykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0JJTkQpOworICBncy0+Z2ltcGxlX2JpbmQudmFycyA9IHZhcnM7Cit9CisKKworLyogQXBwZW5kIFZBUlMgdG8gdGhlIHNldCBvZiB2YXJpYWJsZXMgZGVjbGFyZWQgaW4gdGhlIEdJTVBMRV9CSU5ECisgICBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9iaW5kX2FwcGVuZF92YXJzIChnaW1wbGUgZ3MsIHRyZWUgdmFycykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0JJTkQpOworICBncy0+Z2ltcGxlX2JpbmQudmFycyA9IGNoYWlub24gKGdzLT5naW1wbGVfYmluZC52YXJzLCB2YXJzKTsKK30KKworCisvKiBSZXR1cm4gdGhlIEdJTVBMRSBzZXF1ZW5jZSBjb250YWluZWQgaW4gdGhlIEdJTVBMRV9CSU5EIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgZ2ltcGxlX3NlcQorZ2ltcGxlX2JpbmRfYm9keSAoZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQklORCk7CisgIHJldHVybiBncy0+Z2ltcGxlX2JpbmQuYm9keTsKK30KKworCisvKiBTZXQgU0VRIHRvIGJlIHRoZSBHSU1QTEUgc2VxdWVuY2UgY29udGFpbmVkIGluIHRoZSBHSU1QTEVfQklORAorICAgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfYmluZF9zZXRfYm9keSAoZ2ltcGxlIGdzLCBnaW1wbGVfc2VxIHNlcSkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0JJTkQpOworICBncy0+Z2ltcGxlX2JpbmQuYm9keSA9IHNlcTsKK30KKworCisvKiBBcHBlbmQgYSBzdGF0ZW1lbnQgdG8gdGhlIGVuZCBvZiBhIEdJTVBMRV9CSU5EJ3MgYm9keS4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2JpbmRfYWRkX3N0bXQgKGdpbXBsZSBncywgZ2ltcGxlIHN0bXQpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9CSU5EKTsKKyAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJmdzLT5naW1wbGVfYmluZC5ib2R5LCBzdG10KTsKK30KKworCisvKiBBcHBlbmQgYSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIHRvIHRoZSBlbmQgb2YgYSBHSU1QTEVfQklORCdzIGJvZHkuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9iaW5kX2FkZF9zZXEgKGdpbXBsZSBncywgZ2ltcGxlX3NlcSBzZXEpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9CSU5EKTsKKyAgZ2ltcGxlX3NlcV9hZGRfc2VxICgmZ3MtPmdpbXBsZV9iaW5kLmJvZHksIHNlcSk7Cit9CisKKworLyogUmV0dXJuIHRoZSBUUkVFX0JMT0NLIG5vZGUgYXNzb2NpYXRlZCB3aXRoIEdJTVBMRV9CSU5EIHN0YXRlbWVudAorICAgR1MuICBUaGlzIGlzIGFuYWxvZ291cyB0byB0aGUgQklORF9FWFBSX0JMT0NLIGZpZWxkIGluIHRyZWVzLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfYmluZF9ibG9jayAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQklORCk7CisgIHJldHVybiBncy0+Z2ltcGxlX2JpbmQuYmxvY2s7Cit9CisKKworLyogU2V0IEJMT0NLIHRvIGJlIHRoZSBUUkVFX0JMT0NLIG5vZGUgYXNzb2NpYXRlZCB3aXRoIEdJTVBMRV9CSU5ECisgICBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9iaW5kX3NldF9ibG9jayAoZ2ltcGxlIGdzLCB0cmVlIGJsb2NrKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQklORCk7CisgIGdjY19hc3NlcnQgKGJsb2NrID09IE5VTExfVFJFRSB8fCBUUkVFX0NPREUgKGJsb2NrKSA9PSBCTE9DSyk7CisgIGdzLT5naW1wbGVfYmluZC5ibG9jayA9IGJsb2NrOworfQorCisKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGlucHV0IG9wZXJhbmRzIGZvciBHSU1QTEVfQVNNIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZAorZ2ltcGxlX2FzbV9uaW5wdXRzIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9BU00pOworICByZXR1cm4gZ3MtPmdpbXBsZV9hc20ubmk7Cit9CisKKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2Ygb3V0cHV0IG9wZXJhbmRzIGZvciBHSU1QTEVfQVNNIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZAorZ2ltcGxlX2FzbV9ub3V0cHV0cyAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNNKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfYXNtLm5vOworfQorCisKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGNsb2JiZXIgb3BlcmFuZHMgZm9yIEdJTVBMRV9BU00gR1MuICAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkCitnaW1wbGVfYXNtX25jbG9iYmVycyAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNNKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfYXNtLm5jOworfQorCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBsYWJlbCBvcGVyYW5kcyBmb3IgR0lNUExFX0FTTSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQKK2dpbXBsZV9hc21fbmxhYmVscyAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNNKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfYXNtLm5sOworfQorCisvKiBSZXR1cm4gaW5wdXQgb3BlcmFuZCBJTkRFWCBvZiBHSU1QTEVfQVNNIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfYXNtX2lucHV0X29wIChjb25zdF9naW1wbGUgZ3MsIHVuc2lnbmVkIGluZGV4KQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNNKTsKKyAgZ2NjX2Fzc2VydCAoaW5kZXggPD0gZ3MtPmdpbXBsZV9hc20ubmkpOworICByZXR1cm4gZ2ltcGxlX29wIChncywgaW5kZXgpOworfQorCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIGlucHV0IG9wZXJhbmQgSU5ERVggb2YgR0lNUExFX0FTTSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfYXNtX2lucHV0X29wX3B0ciAoY29uc3RfZ2ltcGxlIGdzLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0FTTSk7CisgIGdjY19hc3NlcnQgKGluZGV4IDw9IGdzLT5naW1wbGVfYXNtLm5pKTsKKyAgcmV0dXJuIGdpbXBsZV9vcF9wdHIgKGdzLCBpbmRleCk7Cit9CisKKworLyogU2V0IElOX09QIHRvIGJlIGlucHV0IG9wZXJhbmQgSU5ERVggaW4gR0lNUExFX0FTTSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2FzbV9zZXRfaW5wdXRfb3AgKGdpbXBsZSBncywgdW5zaWduZWQgaW5kZXgsIHRyZWUgaW5fb3ApCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9BU00pOworICBnY2NfYXNzZXJ0IChpbmRleCA8PSBncy0+Z2ltcGxlX2FzbS5uaSk7CisgIGdjY19hc3NlcnQgKFRSRUVfQ09ERSAoaW5fb3ApID09IFRSRUVfTElTVCk7CisgIGdpbXBsZV9zZXRfb3AgKGdzLCBpbmRleCwgaW5fb3ApOworfQorCisKKy8qIFJldHVybiBvdXRwdXQgb3BlcmFuZCBJTkRFWCBvZiBHSU1QTEVfQVNNIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfYXNtX291dHB1dF9vcCAoY29uc3RfZ2ltcGxlIGdzLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0FTTSk7CisgIGdjY19hc3NlcnQgKGluZGV4IDw9IGdzLT5naW1wbGVfYXNtLm5vKTsKKyAgcmV0dXJuIGdpbXBsZV9vcCAoZ3MsIGluZGV4ICsgZ3MtPmdpbXBsZV9hc20ubmkpOworfQorCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIG91dHB1dCBvcGVyYW5kIElOREVYIG9mIEdJTVBMRV9BU00gR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX2FzbV9vdXRwdXRfb3BfcHRyIChjb25zdF9naW1wbGUgZ3MsIHVuc2lnbmVkIGluZGV4KQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNNKTsKKyAgZ2NjX2Fzc2VydCAoaW5kZXggPD0gZ3MtPmdpbXBsZV9hc20ubm8pOworICByZXR1cm4gZ2ltcGxlX29wX3B0ciAoZ3MsIGluZGV4ICsgZ3MtPmdpbXBsZV9hc20ubmkpOworfQorCisKKy8qIFNldCBPVVRfT1AgdG8gYmUgb3V0cHV0IG9wZXJhbmQgSU5ERVggaW4gR0lNUExFX0FTTSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2FzbV9zZXRfb3V0cHV0X29wIChnaW1wbGUgZ3MsIHVuc2lnbmVkIGluZGV4LCB0cmVlIG91dF9vcCkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0FTTSk7CisgIGdjY19hc3NlcnQgKGluZGV4IDw9IGdzLT5naW1wbGVfYXNtLm5vKTsKKyAgZ2NjX2Fzc2VydCAoVFJFRV9DT0RFIChvdXRfb3ApID09IFRSRUVfTElTVCk7CisgIGdpbXBsZV9zZXRfb3AgKGdzLCBpbmRleCArIGdzLT5naW1wbGVfYXNtLm5pLCBvdXRfb3ApOworfQorCisKKy8qIFJldHVybiBjbG9iYmVyIG9wZXJhbmQgSU5ERVggb2YgR0lNUExFX0FTTSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX2FzbV9jbG9iYmVyX29wIChjb25zdF9naW1wbGUgZ3MsIHVuc2lnbmVkIGluZGV4KQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNNKTsKKyAgZ2NjX2Fzc2VydCAoaW5kZXggPD0gZ3MtPmdpbXBsZV9hc20ubmMpOworICByZXR1cm4gZ2ltcGxlX29wIChncywgaW5kZXggKyBncy0+Z2ltcGxlX2FzbS5uaSArIGdzLT5naW1wbGVfYXNtLm5vKTsKK30KKworCisvKiBTZXQgQ0xPQkJFUl9PUCB0byBiZSBjbG9iYmVyIG9wZXJhbmQgSU5ERVggaW4gR0lNUExFX0FTTSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2FzbV9zZXRfY2xvYmJlcl9vcCAoZ2ltcGxlIGdzLCB1bnNpZ25lZCBpbmRleCwgdHJlZSBjbG9iYmVyX29wKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNNKTsKKyAgZ2NjX2Fzc2VydCAoaW5kZXggPD0gZ3MtPmdpbXBsZV9hc20ubmMpOworICBnY2NfYXNzZXJ0IChUUkVFX0NPREUgKGNsb2JiZXJfb3ApID09IFRSRUVfTElTVCk7CisgIGdpbXBsZV9zZXRfb3AgKGdzLCBpbmRleCArIGdzLT5naW1wbGVfYXNtLm5pICsgZ3MtPmdpbXBsZV9hc20ubm8sIGNsb2JiZXJfb3ApOworfQorCisvKiBSZXR1cm4gbGFiZWwgb3BlcmFuZCBJTkRFWCBvZiBHSU1QTEVfQVNNIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfYXNtX2xhYmVsX29wIChjb25zdF9naW1wbGUgZ3MsIHVuc2lnbmVkIGluZGV4KQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNNKTsKKyAgZ2NjX2Fzc2VydCAoaW5kZXggPD0gZ3MtPmdpbXBsZV9hc20ubmwpOworICByZXR1cm4gZ2ltcGxlX29wIChncywgaW5kZXggKyBncy0+Z2ltcGxlX2FzbS5uaSArIGdzLT5naW1wbGVfYXNtLm5jKTsKK30KKworLyogU2V0IExBQkVMX09QIHRvIGJlIGxhYmVsIG9wZXJhbmQgSU5ERVggaW4gR0lNUExFX0FTTSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2FzbV9zZXRfbGFiZWxfb3AgKGdpbXBsZSBncywgdW5zaWduZWQgaW5kZXgsIHRyZWUgbGFiZWxfb3ApCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9BU00pOworICBnY2NfYXNzZXJ0IChpbmRleCA8PSBncy0+Z2ltcGxlX2FzbS5ubCk7CisgIGdjY19hc3NlcnQgKFRSRUVfQ09ERSAobGFiZWxfb3ApID09IFRSRUVfTElTVCk7CisgIGdpbXBsZV9zZXRfb3AgKGdzLCBpbmRleCArIGdzLT5naW1wbGVfYXNtLm5pICsgZ3MtPmdpbXBsZV9hc20ubmMsIGxhYmVsX29wKTsKK30KKworLyogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBhc3NlbWJseSBpbnN0cnVjdGlvbiBpbgorICAgR0lNUExFX0FTTSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCitnaW1wbGVfYXNtX3N0cmluZyAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNNKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfYXNtLnN0cmluZzsKK30KKworCisvKiBSZXR1cm4gdHJ1ZSBpZiBHUyBpcyBhbiBhc20gc3RhdGVtZW50IG1hcmtlZCB2b2xhdGlsZS4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX2FzbV92b2xhdGlsZV9wIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9BU00pOworICByZXR1cm4gKGdzLT5nc2Jhc2Uuc3ViY29kZSAmIEdGX0FTTV9WT0xBVElMRSkgIT0gMDsKK30KKworCisvKiBJZiBWT0xBVExFX1AgaXMgdHJ1ZSwgbWFyayBhc20gc3RhdGVtZW50IEdTIGFzIHZvbGF0aWxlLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfYXNtX3NldF92b2xhdGlsZSAoZ2ltcGxlIGdzLCBib29sIHZvbGF0aWxlX3ApCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9BU00pOworICBpZiAodm9sYXRpbGVfcCkKKyAgICBncy0+Z3NiYXNlLnN1YmNvZGUgfD0gR0ZfQVNNX1ZPTEFUSUxFOworICBlbHNlCisgICAgZ3MtPmdzYmFzZS5zdWJjb2RlICY9IH5HRl9BU01fVk9MQVRJTEU7Cit9CisKKworLyogSWYgSU5QVVRfUCBpcyB0cnVlLCBtYXJrIGFzbSBHUyBhcyBhbiBBU01fSU5QVVQuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9hc21fc2V0X2lucHV0IChnaW1wbGUgZ3MsIGJvb2wgaW5wdXRfcCkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0FTTSk7CisgIGlmIChpbnB1dF9wKQorICAgIGdzLT5nc2Jhc2Uuc3ViY29kZSB8PSBHRl9BU01fSU5QVVQ7CisgIGVsc2UKKyAgICBncy0+Z3NiYXNlLnN1YmNvZGUgJj0gfkdGX0FTTV9JTlBVVDsKK30KKworCisvKiBSZXR1cm4gdHJ1ZSBpZiBhc20gR1MgaXMgYW4gQVNNX0lOUFVULiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitnaW1wbGVfYXNtX2lucHV0X3AgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0FTTSk7CisgIHJldHVybiAoZ3MtPmdzYmFzZS5zdWJjb2RlICYgR0ZfQVNNX0lOUFVUKSAhPSAwOworfQorCisKKy8qIFJldHVybiB0aGUgdHlwZXMgaGFuZGxlZCBieSBHSU1QTEVfQ0FUQ0ggc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfY2F0Y2hfdHlwZXMgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NBVENIKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfY2F0Y2gudHlwZXM7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdHlwZXMgaGFuZGxlZCBieSBHSU1QTEVfQ0FUQ0ggc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9jYXRjaF90eXBlc19wdHIgKGdpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NBVENIKTsKKyAgcmV0dXJuICZncy0+Z2ltcGxlX2NhdGNoLnR5cGVzOworfQorCisKKy8qIFJldHVybiB0aGUgR0lNUExFIHNlcXVlbmNlIHJlcHJlc2VudGluZyB0aGUgYm9keSBvZiB0aGUgaGFuZGxlciBvZgorICAgR0lNUExFX0NBVENIIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgZ2ltcGxlX3NlcQorZ2ltcGxlX2NhdGNoX2hhbmRsZXIgKGdpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NBVENIKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfY2F0Y2guaGFuZGxlcjsKK30KKworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBHSU1QTEUgc2VxdWVuY2UgcmVwcmVzZW50aW5nIHRoZSBib2R5IG9mCisgICB0aGUgaGFuZGxlciBvZiBHSU1QTEVfQ0FUQ0ggc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSBnaW1wbGVfc2VxICoKK2dpbXBsZV9jYXRjaF9oYW5kbGVyX3B0ciAoZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQ0FUQ0gpOworICByZXR1cm4gJmdzLT5naW1wbGVfY2F0Y2guaGFuZGxlcjsKK30KKworCisvKiBTZXQgVCB0byBiZSB0aGUgc2V0IG9mIHR5cGVzIGhhbmRsZWQgYnkgR0lNUExFX0NBVENIIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfY2F0Y2hfc2V0X3R5cGVzIChnaW1wbGUgZ3MsIHRyZWUgdCkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NBVENIKTsKKyAgZ3MtPmdpbXBsZV9jYXRjaC50eXBlcyA9IHQ7Cit9CisKKworLyogU2V0IEhBTkRMRVIgdG8gYmUgdGhlIGJvZHkgb2YgR0lNUExFX0NBVENIIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfY2F0Y2hfc2V0X2hhbmRsZXIgKGdpbXBsZSBncywgZ2ltcGxlX3NlcSBoYW5kbGVyKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQ0FUQ0gpOworICBncy0+Z2ltcGxlX2NhdGNoLmhhbmRsZXIgPSBoYW5kbGVyOworfQorCisKKy8qIFJldHVybiB0aGUgdHlwZXMgaGFuZGxlZCBieSBHSU1QTEVfRUhfRklMVEVSIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX2VoX2ZpbHRlcl90eXBlcyAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfRUhfRklMVEVSKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfZWhfZmlsdGVyLnR5cGVzOworfQorCisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHR5cGVzIGhhbmRsZWQgYnkgR0lNUExFX0VIX0ZJTFRFUiBzdGF0ZW1lbnQKKyAgIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9laF9maWx0ZXJfdHlwZXNfcHRyIChnaW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9FSF9GSUxURVIpOworICByZXR1cm4gJmdzLT5naW1wbGVfZWhfZmlsdGVyLnR5cGVzOworfQorCisKKy8qIFJldHVybiB0aGUgc2VxdWVuY2Ugb2Ygc3RhdGVtZW50IHRvIGV4ZWN1dGUgd2hlbiBHSU1QTEVfRUhfRklMVEVSCisgICBzdGF0ZW1lbnQgZmFpbHMuICAqLworCitzdGF0aWMgaW5saW5lIGdpbXBsZV9zZXEKK2dpbXBsZV9laF9maWx0ZXJfZmFpbHVyZSAoZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfRUhfRklMVEVSKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfZWhfZmlsdGVyLmZhaWx1cmU7Cit9CisKKworLyogU2V0IFRZUEVTIHRvIGJlIHRoZSBzZXQgb2YgdHlwZXMgaGFuZGxlZCBieSBHSU1QTEVfRUhfRklMVEVSIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfZWhfZmlsdGVyX3NldF90eXBlcyAoZ2ltcGxlIGdzLCB0cmVlIHR5cGVzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfRUhfRklMVEVSKTsKKyAgZ3MtPmdpbXBsZV9laF9maWx0ZXIudHlwZXMgPSB0eXBlczsKK30KKworCisvKiBTZXQgRkFJTFVSRSB0byBiZSB0aGUgc2VxdWVuY2Ugb2Ygc3RhdGVtZW50cyB0byBleGVjdXRlIG9uIGZhaWx1cmUKKyAgIGZvciBHSU1QTEVfRUhfRklMVEVSIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfZWhfZmlsdGVyX3NldF9mYWlsdXJlIChnaW1wbGUgZ3MsIGdpbXBsZV9zZXEgZmFpbHVyZSkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0VIX0ZJTFRFUik7CisgIGdzLT5naW1wbGVfZWhfZmlsdGVyLmZhaWx1cmUgPSBmYWlsdXJlOworfQorCisvKiBHZXQgdGhlIGZ1bmN0aW9uIGRlY2wgdG8gYmUgY2FsbGVkIGJ5IHRoZSBNVVNUX05PVF9USFJPVyByZWdpb24uICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9laF9tdXN0X25vdF90aHJvd19mbmRlY2wgKGdpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0VIX01VU1RfTk9UX1RIUk9XKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfZWhfbW50LmZuZGVjbDsKK30KKworLyogU2V0IHRoZSBmdW5jdGlvbiBkZWNsIHRvIGJlIGNhbGxlZCBieSBHUyB0byBERUNMLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfZWhfbXVzdF9ub3RfdGhyb3dfc2V0X2ZuZGVjbCAoZ2ltcGxlIGdzLCB0cmVlIGRlY2wpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9FSF9NVVNUX05PVF9USFJPVyk7CisgIGdzLT5naW1wbGVfZWhfbW50LmZuZGVjbCA9IGRlY2w7Cit9CisKKworLyogR0lNUExFX1RSWSBhY2Nlc3NvcnMuICovCisKKy8qIFJldHVybiB0aGUga2luZCBvZiB0cnkgYmxvY2sgcmVwcmVzZW50ZWQgYnkgR0lNUExFX1RSWSBHUy4gIFRoaXMgaXMKKyAgIGVpdGhlciBHSU1QTEVfVFJZX0NBVENIIG9yIEdJTVBMRV9UUllfRklOQUxMWS4gICovCisKK3N0YXRpYyBpbmxpbmUgZW51bSBnaW1wbGVfdHJ5X2ZsYWdzCitnaW1wbGVfdHJ5X2tpbmQgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX1RSWSk7CisgIHJldHVybiAoZW51bSBnaW1wbGVfdHJ5X2ZsYWdzKSAoZ3MtPmdzYmFzZS5zdWJjb2RlICYgR0lNUExFX1RSWV9LSU5EKTsKK30KKworCisvKiBTZXQgdGhlIGtpbmQgb2YgdHJ5IGJsb2NrIHJlcHJlc2VudGVkIGJ5IEdJTVBMRV9UUlkgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV90cnlfc2V0X2tpbmQgKGdpbXBsZSBncywgZW51bSBnaW1wbGVfdHJ5X2ZsYWdzIGtpbmQpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9UUlkpOworICBnY2NfYXNzZXJ0IChraW5kID09IEdJTVBMRV9UUllfQ0FUQ0ggfHwga2luZCA9PSBHSU1QTEVfVFJZX0ZJTkFMTFkpOworICBpZiAoZ2ltcGxlX3RyeV9raW5kIChncykgIT0ga2luZCkKKyAgICBncy0+Z3NiYXNlLnN1YmNvZGUgPSAodW5zaWduZWQgaW50KSBraW5kOworfQorCisKKy8qIFJldHVybiB0aGUgR0lNUExFX1RSWV9DQVRDSF9JU19DTEVBTlVQIGZsYWcuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2dpbXBsZV90cnlfY2F0Y2hfaXNfY2xlYW51cCAoY29uc3RfZ2ltcGxlIGdzKQoreworICBnY2NfYXNzZXJ0IChnaW1wbGVfdHJ5X2tpbmQgKGdzKSA9PSBHSU1QTEVfVFJZX0NBVENIKTsKKyAgcmV0dXJuIChncy0+Z3NiYXNlLnN1YmNvZGUgJiBHSU1QTEVfVFJZX0NBVENIX0lTX0NMRUFOVVApICE9IDA7Cit9CisKKworLyogUmV0dXJuIHRoZSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIHVzZWQgYXMgdGhlIGJvZHkgZm9yIEdJTVBMRV9UUlkgR1MuICAqLworCitzdGF0aWMgaW5saW5lIGdpbXBsZV9zZXEKK2dpbXBsZV90cnlfZXZhbCAoZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfVFJZKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfdHJ5LmV2YWw7Cit9CisKKworLyogUmV0dXJuIHRoZSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIHVzZWQgYXMgdGhlIGNsZWFudXAgYm9keSBmb3IKKyAgIEdJTVBMRV9UUlkgR1MuICAqLworCitzdGF0aWMgaW5saW5lIGdpbXBsZV9zZXEKK2dpbXBsZV90cnlfY2xlYW51cCAoZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfVFJZKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfdHJ5LmNsZWFudXA7Cit9CisKKworLyogU2V0IHRoZSBHSU1QTEVfVFJZX0NBVENIX0lTX0NMRUFOVVAgZmxhZy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX3RyeV9zZXRfY2F0Y2hfaXNfY2xlYW51cCAoZ2ltcGxlIGcsIGJvb2wgY2F0Y2hfaXNfY2xlYW51cCkKK3sKKyAgZ2NjX2Fzc2VydCAoZ2ltcGxlX3RyeV9raW5kIChnKSA9PSBHSU1QTEVfVFJZX0NBVENIKTsKKyAgaWYgKGNhdGNoX2lzX2NsZWFudXApCisgICAgZy0+Z3NiYXNlLnN1YmNvZGUgfD0gR0lNUExFX1RSWV9DQVRDSF9JU19DTEVBTlVQOworICBlbHNlCisgICAgZy0+Z3NiYXNlLnN1YmNvZGUgJj0gfkdJTVBMRV9UUllfQ0FUQ0hfSVNfQ0xFQU5VUDsKK30KKworCisvKiBTZXQgRVZBTCB0byBiZSB0aGUgc2VxdWVuY2Ugb2Ygc3RhdGVtZW50cyB0byB1c2UgYXMgdGhlIGJvZHkgZm9yCisgICBHSU1QTEVfVFJZIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfdHJ5X3NldF9ldmFsIChnaW1wbGUgZ3MsIGdpbXBsZV9zZXEgZXZhbCkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX1RSWSk7CisgIGdzLT5naW1wbGVfdHJ5LmV2YWwgPSBldmFsOworfQorCisKKy8qIFNldCBDTEVBTlVQIHRvIGJlIHRoZSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIHRvIHVzZSBhcyB0aGUgY2xlYW51cAorICAgYm9keSBmb3IgR0lNUExFX1RSWSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX3RyeV9zZXRfY2xlYW51cCAoZ2ltcGxlIGdzLCBnaW1wbGVfc2VxIGNsZWFudXApCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9UUlkpOworICBncy0+Z2ltcGxlX3RyeS5jbGVhbnVwID0gY2xlYW51cDsKK30KKworCisvKiBSZXR1cm4gdGhlIGNsZWFudXAgc2VxdWVuY2UgZm9yIGNsZWFudXAgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSBnaW1wbGVfc2VxCitnaW1wbGVfd2NlX2NsZWFudXAgKGdpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX1dJVEhfQ0xFQU5VUF9FWFBSKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfd2NlLmNsZWFudXA7Cit9CisKKworLyogU2V0IENMRUFOVVAgdG8gYmUgdGhlIGNsZWFudXAgc2VxdWVuY2UgZm9yIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfd2NlX3NldF9jbGVhbnVwIChnaW1wbGUgZ3MsIGdpbXBsZV9zZXEgY2xlYW51cCkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX1dJVEhfQ0xFQU5VUF9FWFBSKTsKKyAgZ3MtPmdpbXBsZV93Y2UuY2xlYW51cCA9IGNsZWFudXA7Cit9CisKKworLyogUmV0dXJuIHRoZSBDTEVBTlVQX0VIX09OTFkgZmxhZyBmb3IgYSBXQ0UgdHVwbGUuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2dpbXBsZV93Y2VfY2xlYW51cF9laF9vbmx5IChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9XSVRIX0NMRUFOVVBfRVhQUik7CisgIHJldHVybiBncy0+Z3NiYXNlLnN1YmNvZGUgIT0gMDsKK30KKworCisvKiBTZXQgdGhlIENMRUFOVVBfRUhfT05MWSBmbGFnIGZvciBhIFdDRSB0dXBsZS4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX3djZV9zZXRfY2xlYW51cF9laF9vbmx5IChnaW1wbGUgZ3MsIGJvb2wgZWhfb25seV9wKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfV0lUSF9DTEVBTlVQX0VYUFIpOworICBncy0+Z3NiYXNlLnN1YmNvZGUgPSAodW5zaWduZWQgaW50KSBlaF9vbmx5X3A7Cit9CisKKworLyogUmV0dXJuIHRoZSBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMgc3VwcG9ydGVkIGJ5IEdJTVBMRV9QSEkgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkCitnaW1wbGVfcGhpX2NhcGFjaXR5IChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9QSEkpOworICByZXR1cm4gZ3MtPmdpbXBsZV9waGkuY2FwYWNpdHk7Cit9CisKKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGluIEdJTVBMRV9QSEkgR1MuICBUaGlzIG11c3QgYWx3YXlzCisgICBiZSBleGFjdGx5IHRoZSBudW1iZXIgb2YgaW5jb21pbmcgZWRnZXMgZm9yIHRoZSBiYXNpYyBibG9jayBob2xkaW5nCisgICBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQKK2dpbXBsZV9waGlfbnVtX2FyZ3MgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX1BISSk7CisgIHJldHVybiBncy0+Z2ltcGxlX3BoaS5uYXJnczsKK30KKworCisvKiBSZXR1cm4gdGhlIFNTQSBuYW1lIGNyZWF0ZWQgYnkgR0lNUExFX1BISSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX3BoaV9yZXN1bHQgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX1BISSk7CisgIHJldHVybiBncy0+Z2ltcGxlX3BoaS5yZXN1bHQ7Cit9CisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIFNTQSBuYW1lIGNyZWF0ZWQgYnkgR0lNUExFX1BISSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfcGhpX3Jlc3VsdF9wdHIgKGdpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX1BISSk7CisgIHJldHVybiAmZ3MtPmdpbXBsZV9waGkucmVzdWx0OworfQorCisvKiBTZXQgUkVTVUxUIHRvIGJlIHRoZSBTU0EgbmFtZSBjcmVhdGVkIGJ5IEdJTVBMRV9QSEkgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9waGlfc2V0X3Jlc3VsdCAoZ2ltcGxlIGdzLCB0cmVlIHJlc3VsdCkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX1BISSk7CisgIGdzLT5naW1wbGVfcGhpLnJlc3VsdCA9IHJlc3VsdDsKK30KKworCisvKiBSZXR1cm4gdGhlIFBISSBhcmd1bWVudCBjb3JyZXNwb25kaW5nIHRvIGluY29taW5nIGVkZ2UgSU5ERVggZm9yCisgICBHSU1QTEVfUEhJIEdTLiAgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGhpX2FyZ19kICoKK2dpbXBsZV9waGlfYXJnIChnaW1wbGUgZ3MsIHVuc2lnbmVkIGluZGV4KQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfUEhJKTsKKyAgZ2NjX2Fzc2VydCAoaW5kZXggPD0gZ3MtPmdpbXBsZV9waGkuY2FwYWNpdHkpOworICByZXR1cm4gJihncy0+Z2ltcGxlX3BoaS5hcmdzW2luZGV4XSk7Cit9CisKKy8qIFNldCBQSElBUkcgdG8gYmUgdGhlIGFyZ3VtZW50IGNvcnJlc3BvbmRpbmcgdG8gaW5jb21pbmcgZWRnZSBJTkRFWAorICAgZm9yIEdJTVBMRV9QSEkgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9waGlfc2V0X2FyZyAoZ2ltcGxlIGdzLCB1bnNpZ25lZCBpbmRleCwgc3RydWN0IHBoaV9hcmdfZCAqIHBoaWFyZykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX1BISSk7CisgIGdjY19hc3NlcnQgKGluZGV4IDw9IGdzLT5naW1wbGVfcGhpLm5hcmdzKTsKKyAgbWVtY3B5IChncy0+Z2ltcGxlX3BoaS5hcmdzICsgaW5kZXgsIHBoaWFyZywgc2l6ZW9mIChzdHJ1Y3QgcGhpX2FyZ19kKSk7Cit9CisKKy8qIFJldHVybiB0aGUgcmVnaW9uIG51bWJlciBmb3IgR0lNUExFX1JFU1ggR1MuICAqLworCitzdGF0aWMgaW5saW5lIGludAorZ2ltcGxlX3Jlc3hfcmVnaW9uIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9SRVNYKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfZWhfY3RybC5yZWdpb247Cit9CisKKy8qIFNldCBSRUdJT04gdG8gYmUgdGhlIHJlZ2lvbiBudW1iZXIgZm9yIEdJTVBMRV9SRVNYIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfcmVzeF9zZXRfcmVnaW9uIChnaW1wbGUgZ3MsIGludCByZWdpb24pCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9SRVNYKTsKKyAgZ3MtPmdpbXBsZV9laF9jdHJsLnJlZ2lvbiA9IHJlZ2lvbjsKK30KKworLyogUmV0dXJuIHRoZSByZWdpb24gbnVtYmVyIGZvciBHSU1QTEVfRUhfRElTUEFUQ0ggR1MuICAqLworCitzdGF0aWMgaW5saW5lIGludAorZ2ltcGxlX2VoX2Rpc3BhdGNoX3JlZ2lvbiAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfRUhfRElTUEFUQ0gpOworICByZXR1cm4gZ3MtPmdpbXBsZV9laF9jdHJsLnJlZ2lvbjsKK30KKworLyogU2V0IFJFR0lPTiB0byBiZSB0aGUgcmVnaW9uIG51bWJlciBmb3IgR0lNUExFX0VIX0RJU1BBVENIIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfZWhfZGlzcGF0Y2hfc2V0X3JlZ2lvbiAoZ2ltcGxlIGdzLCBpbnQgcmVnaW9uKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfRUhfRElTUEFUQ0gpOworICBncy0+Z2ltcGxlX2VoX2N0cmwucmVnaW9uID0gcmVnaW9uOworfQorCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBsYWJlbHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzd2l0Y2ggc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZAorZ2ltcGxlX3N3aXRjaF9udW1fbGFiZWxzIChjb25zdF9naW1wbGUgZ3MpCit7CisgIHVuc2lnbmVkIG51bV9vcHM7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9TV0lUQ0gpOworICBudW1fb3BzID0gZ2ltcGxlX251bV9vcHMgKGdzKTsKKyAgZ2NjX2Fzc2VydCAobnVtX29wcyA+IDEpOworICByZXR1cm4gbnVtX29wcyAtIDE7Cit9CisKKworLyogU2V0IE5MQUJFTFMgdG8gYmUgdGhlIG51bWJlciBvZiBsYWJlbHMgZm9yIHRoZSBzd2l0Y2ggc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfc3dpdGNoX3NldF9udW1fbGFiZWxzIChnaW1wbGUgZywgdW5zaWduZWQgbmxhYmVscykKK3sKKyAgR0lNUExFX0NIRUNLIChnLCBHSU1QTEVfU1dJVENIKTsKKyAgZ2ltcGxlX3NldF9udW1fb3BzIChnLCBubGFiZWxzICsgMSk7Cit9CisKKworLyogUmV0dXJuIHRoZSBpbmRleCB2YXJpYWJsZSB1c2VkIGJ5IHRoZSBzd2l0Y2ggc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfc3dpdGNoX2luZGV4IChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9TV0lUQ0gpOworICByZXR1cm4gZ2ltcGxlX29wIChncywgMCk7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgaW5kZXggdmFyaWFibGUgZm9yIHRoZSBzd2l0Y2ggc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9zd2l0Y2hfaW5kZXhfcHRyIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9TV0lUQ0gpOworICByZXR1cm4gZ2ltcGxlX29wX3B0ciAoZ3MsIDApOworfQorCisKKy8qIFNldCBJTkRFWCB0byBiZSB0aGUgaW5kZXggdmFyaWFibGUgZm9yIHN3aXRjaCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9zd2l0Y2hfc2V0X2luZGV4IChnaW1wbGUgZ3MsIHRyZWUgaW5kZXgpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9TV0lUQ0gpOworICBnY2NfYXNzZXJ0IChTU0FfVkFSX1AgKGluZGV4KSB8fCBDT05TVEFOVF9DTEFTU19QIChpbmRleCkpOworICBnaW1wbGVfc2V0X29wIChncywgMCwgaW5kZXgpOworfQorCisKKy8qIFJldHVybiB0aGUgbGFiZWwgbnVtYmVyZWQgSU5ERVguICBUaGUgZGVmYXVsdCBsYWJlbCBpcyAwLCBmb2xsb3dlZCBieSBhbnkKKyAgIGxhYmVscyBpbiBhIHN3aXRjaCBzdGF0ZW1lbnQuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9zd2l0Y2hfbGFiZWwgKGNvbnN0X2dpbXBsZSBncywgdW5zaWduZWQgaW5kZXgpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9TV0lUQ0gpOworICBnY2NfYXNzZXJ0IChnaW1wbGVfbnVtX29wcyAoZ3MpID4gaW5kZXggKyAxKTsKKyAgcmV0dXJuIGdpbXBsZV9vcCAoZ3MsIGluZGV4ICsgMSk7Cit9CisKKy8qIFNldCB0aGUgbGFiZWwgbnVtYmVyIElOREVYIHRvIExBQkVMLiAgMCBpcyBhbHdheXMgdGhlIGRlZmF1bHQgbGFiZWwuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9zd2l0Y2hfc2V0X2xhYmVsIChnaW1wbGUgZ3MsIHVuc2lnbmVkIGluZGV4LCB0cmVlIGxhYmVsKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfU1dJVENIKTsKKyAgZ2NjX2Fzc2VydCAoZ2ltcGxlX251bV9vcHMgKGdzKSA+IGluZGV4ICsgMSk7CisgIGdjY19hc3NlcnQgKGxhYmVsID09IE5VTExfVFJFRSB8fCBUUkVFX0NPREUgKGxhYmVsKSA9PSBDQVNFX0xBQkVMX0VYUFIpOworICBnaW1wbGVfc2V0X29wIChncywgaW5kZXggKyAxLCBsYWJlbCk7Cit9CisKKy8qIFJldHVybiB0aGUgZGVmYXVsdCBsYWJlbCBmb3IgYSBzd2l0Y2ggc3RhdGVtZW50LiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfc3dpdGNoX2RlZmF1bHRfbGFiZWwgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgcmV0dXJuIGdpbXBsZV9zd2l0Y2hfbGFiZWwgKGdzLCAwKTsKK30KKworLyogU2V0IHRoZSBkZWZhdWx0IGxhYmVsIGZvciBhIHN3aXRjaCBzdGF0ZW1lbnQuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9zd2l0Y2hfc2V0X2RlZmF1bHRfbGFiZWwgKGdpbXBsZSBncywgdHJlZSBsYWJlbCkKK3sKKyAgZ2ltcGxlX3N3aXRjaF9zZXRfbGFiZWwgKGdzLCAwLCBsYWJlbCk7Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIEdTIGlzIGEgR0lNUExFX0RFQlVHIHN0YXRlbWVudC4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraXNfZ2ltcGxlX2RlYnVnIChjb25zdF9naW1wbGUgZ3MpCit7CisgIHJldHVybiBnaW1wbGVfY29kZSAoZ3MpID09IEdJTVBMRV9ERUJVRzsKK30KKworLyogUmV0dXJuIHRydWUgaWYgUyBpcyBhIEdJTVBMRV9ERUJVRyBCSU5EIHN0YXRlbWVudC4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX2RlYnVnX2JpbmRfcCAoY29uc3RfZ2ltcGxlIHMpCit7CisgIGlmIChpc19naW1wbGVfZGVidWcgKHMpKQorICAgIHJldHVybiBzLT5nc2Jhc2Uuc3ViY29kZSA9PSBHSU1QTEVfREVCVUdfQklORDsKKworICByZXR1cm4gZmFsc2U7Cit9CisKKy8qIFJldHVybiB0aGUgdmFyaWFibGUgYm91bmQgaW4gYSBHSU1QTEVfREVCVUcgYmluZCBzdGF0ZW1lbnQuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9kZWJ1Z19iaW5kX2dldF92YXIgKGdpbXBsZSBkYmcpCit7CisgIEdJTVBMRV9DSEVDSyAoZGJnLCBHSU1QTEVfREVCVUcpOworI2lmZGVmIEVOQUJMRV9DSEVDS0lORworICBnY2NfYXNzZXJ0IChnaW1wbGVfZGVidWdfYmluZF9wIChkYmcpKTsKKyNlbmRpZgorICByZXR1cm4gZ2ltcGxlX29wIChkYmcsIDApOworfQorCisvKiBSZXR1cm4gdGhlIHZhbHVlIGJvdW5kIHRvIHRoZSB2YXJpYWJsZSBpbiBhIEdJTVBMRV9ERUJVRyBiaW5kCisgICBzdGF0ZW1lbnQuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9kZWJ1Z19iaW5kX2dldF92YWx1ZSAoZ2ltcGxlIGRiZykKK3sKKyAgR0lNUExFX0NIRUNLIChkYmcsIEdJTVBMRV9ERUJVRyk7CisjaWZkZWYgRU5BQkxFX0NIRUNLSU5HCisgIGdjY19hc3NlcnQgKGdpbXBsZV9kZWJ1Z19iaW5kX3AgKGRiZykpOworI2VuZGlmCisgIHJldHVybiBnaW1wbGVfb3AgKGRiZywgMSk7Cit9CisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHZhbHVlIGJvdW5kIHRvIHRoZSB2YXJpYWJsZSBpbiBhCisgICBHSU1QTEVfREVCVUcgYmluZCBzdGF0ZW1lbnQuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX2RlYnVnX2JpbmRfZ2V0X3ZhbHVlX3B0ciAoZ2ltcGxlIGRiZykKK3sKKyAgR0lNUExFX0NIRUNLIChkYmcsIEdJTVBMRV9ERUJVRyk7CisjaWZkZWYgRU5BQkxFX0NIRUNLSU5HCisgIGdjY19hc3NlcnQgKGdpbXBsZV9kZWJ1Z19iaW5kX3AgKGRiZykpOworI2VuZGlmCisgIHJldHVybiBnaW1wbGVfb3BfcHRyIChkYmcsIDEpOworfQorCisvKiBTZXQgdGhlIHZhcmlhYmxlIGJvdW5kIGluIGEgR0lNUExFX0RFQlVHIGJpbmQgc3RhdGVtZW50LiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfZGVidWdfYmluZF9zZXRfdmFyIChnaW1wbGUgZGJnLCB0cmVlIHZhcikKK3sKKyAgR0lNUExFX0NIRUNLIChkYmcsIEdJTVBMRV9ERUJVRyk7CisjaWZkZWYgRU5BQkxFX0NIRUNLSU5HCisgIGdjY19hc3NlcnQgKGdpbXBsZV9kZWJ1Z19iaW5kX3AgKGRiZykpOworI2VuZGlmCisgIGdpbXBsZV9zZXRfb3AgKGRiZywgMCwgdmFyKTsKK30KKworLyogU2V0IHRoZSB2YWx1ZSBib3VuZCB0byB0aGUgdmFyaWFibGUgaW4gYSBHSU1QTEVfREVCVUcgYmluZAorICAgc3RhdGVtZW50LiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfZGVidWdfYmluZF9zZXRfdmFsdWUgKGdpbXBsZSBkYmcsIHRyZWUgdmFsdWUpCit7CisgIEdJTVBMRV9DSEVDSyAoZGJnLCBHSU1QTEVfREVCVUcpOworI2lmZGVmIEVOQUJMRV9DSEVDS0lORworICBnY2NfYXNzZXJ0IChnaW1wbGVfZGVidWdfYmluZF9wIChkYmcpKTsKKyNlbmRpZgorICBnaW1wbGVfc2V0X29wIChkYmcsIDEsIHZhbHVlKTsKK30KKworLyogVGhlIHNlY29uZCBvcGVyYW5kIG9mIGEgR0lNUExFX0RFQlVHX0JJTkQsIHdoZW4gdGhlIHZhbHVlIHdhcworICAgb3B0aW1pemVkIGF3YXkuICAqLworI2RlZmluZSBHSU1QTEVfREVCVUdfQklORF9OT1ZBTFVFIE5VTExfVFJFRSAvKiBlcnJvcl9tYXJrX25vZGUgKi8KKworLyogUmVtb3ZlIHRoZSB2YWx1ZSBib3VuZCB0byB0aGUgdmFyaWFibGUgaW4gYSBHSU1QTEVfREVCVUcgYmluZAorICAgc3RhdGVtZW50LiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfZGVidWdfYmluZF9yZXNldF92YWx1ZSAoZ2ltcGxlIGRiZykKK3sKKyAgR0lNUExFX0NIRUNLIChkYmcsIEdJTVBMRV9ERUJVRyk7CisjaWZkZWYgRU5BQkxFX0NIRUNLSU5HCisgIGdjY19hc3NlcnQgKGdpbXBsZV9kZWJ1Z19iaW5kX3AgKGRiZykpOworI2VuZGlmCisgIGdpbXBsZV9zZXRfb3AgKGRiZywgMSwgR0lNUExFX0RFQlVHX0JJTkRfTk9WQUxVRSk7Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIHRoZSBHSU1QTEVfREVCVUcgYmluZCBzdGF0ZW1lbnQgaXMgYm91bmQgdG8gYQorICAgdmFsdWUuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2dpbXBsZV9kZWJ1Z19iaW5kX2hhc192YWx1ZV9wIChnaW1wbGUgZGJnKQoreworICBHSU1QTEVfQ0hFQ0sgKGRiZywgR0lNUExFX0RFQlVHKTsKKyNpZmRlZiBFTkFCTEVfQ0hFQ0tJTkcKKyAgZ2NjX2Fzc2VydCAoZ2ltcGxlX2RlYnVnX2JpbmRfcCAoZGJnKSk7CisjZW5kaWYKKyAgcmV0dXJuIGdpbXBsZV9vcCAoZGJnLCAxKSAhPSBHSU1QTEVfREVCVUdfQklORF9OT1ZBTFVFOworfQorCisjdW5kZWYgR0lNUExFX0RFQlVHX0JJTkRfTk9WQUxVRQorCisvKiBSZXR1cm4gdGhlIGJvZHkgZm9yIHRoZSBPTVAgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSBnaW1wbGVfc2VxCitnaW1wbGVfb21wX2JvZHkgKGdpbXBsZSBncykKK3sKKyAgcmV0dXJuIGdzLT5vbXAuYm9keTsKK30KKworLyogU2V0IEJPRFkgdG8gYmUgdGhlIGJvZHkgZm9yIHRoZSBPTVAgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfb21wX3NldF9ib2R5IChnaW1wbGUgZ3MsIGdpbXBsZV9zZXEgYm9keSkKK3sKKyAgZ3MtPm9tcC5ib2R5ID0gYm9keTsKK30KKworCisvKiBSZXR1cm4gdGhlIG5hbWUgYXNzb2NpYXRlZCB3aXRoIE9NUF9DUklUSUNBTCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9vbXBfY3JpdGljYWxfbmFtZSAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX0NSSVRJQ0FMKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfb21wX2NyaXRpY2FsLm5hbWU7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbmFtZSBhc3NvY2lhdGVkIHdpdGggT01QIGNyaXRpY2FsIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfb21wX2NyaXRpY2FsX25hbWVfcHRyIChnaW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfQ1JJVElDQUwpOworICByZXR1cm4gJmdzLT5naW1wbGVfb21wX2NyaXRpY2FsLm5hbWU7Cit9CisKKworLyogU2V0IE5BTUUgdG8gYmUgdGhlIG5hbWUgYXNzb2NpYXRlZCB3aXRoIE9NUCBjcml0aWNhbCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9vbXBfY3JpdGljYWxfc2V0X25hbWUgKGdpbXBsZSBncywgdHJlZSBuYW1lKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX0NSSVRJQ0FMKTsKKyAgZ3MtPmdpbXBsZV9vbXBfY3JpdGljYWwubmFtZSA9IG5hbWU7Cit9CisKKworLyogUmV0dXJuIHRoZSBjbGF1c2VzIGFzc29jaWF0ZWQgd2l0aCBPTVBfRk9SIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfb21wX2Zvcl9jbGF1c2VzIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfRk9SKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfb21wX2Zvci5jbGF1c2VzOworfQorCisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIE9NUF9GT1IgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX29tcF9mb3JfY2xhdXNlc19wdHIgKGdpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9GT1IpOworICByZXR1cm4gJmdzLT5naW1wbGVfb21wX2Zvci5jbGF1c2VzOworfQorCisKKy8qIFNldCBDTEFVU0VTIHRvIGJlIHRoZSBsaXN0IG9mIGNsYXVzZXMgYXNzb2NpYXRlZCB3aXRoIE9NUF9GT1IgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9vbXBfZm9yX3NldF9jbGF1c2VzIChnaW1wbGUgZ3MsIHRyZWUgY2xhdXNlcykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9GT1IpOworICBncy0+Z2ltcGxlX29tcF9mb3IuY2xhdXNlcyA9IGNsYXVzZXM7Cit9CisKKworLyogR2V0IHRoZSBjb2xsYXBzZSBjb3VudCBvZiBPTVBfRk9SIEdTLiAgKi8KKworc3RhdGljIGlubGluZSBzaXplX3QKK2dpbXBsZV9vbXBfZm9yX2NvbGxhcHNlIChnaW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfRk9SKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfb21wX2Zvci5jb2xsYXBzZTsKK30KKworCisvKiBSZXR1cm4gdGhlIGluZGV4IHZhcmlhYmxlIGZvciBPTVBfRk9SIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfb21wX2Zvcl9pbmRleCAoY29uc3RfZ2ltcGxlIGdzLCBzaXplX3QgaSkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9GT1IpOworICBnY2NfYXNzZXJ0IChpIDwgZ3MtPmdpbXBsZV9vbXBfZm9yLmNvbGxhcHNlKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfb21wX2Zvci5pdGVyW2ldLmluZGV4OworfQorCisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGluZGV4IHZhcmlhYmxlIGZvciBPTVBfRk9SIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9vbXBfZm9yX2luZGV4X3B0ciAoZ2ltcGxlIGdzLCBzaXplX3QgaSkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9GT1IpOworICBnY2NfYXNzZXJ0IChpIDwgZ3MtPmdpbXBsZV9vbXBfZm9yLmNvbGxhcHNlKTsKKyAgcmV0dXJuICZncy0+Z2ltcGxlX29tcF9mb3IuaXRlcltpXS5pbmRleDsKK30KKworCisvKiBTZXQgSU5ERVggdG8gYmUgdGhlIGluZGV4IHZhcmlhYmxlIGZvciBPTVBfRk9SIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfb21wX2Zvcl9zZXRfaW5kZXggKGdpbXBsZSBncywgc2l6ZV90IGksIHRyZWUgaW5kZXgpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfRk9SKTsKKyAgZ2NjX2Fzc2VydCAoaSA8IGdzLT5naW1wbGVfb21wX2Zvci5jb2xsYXBzZSk7CisgIGdzLT5naW1wbGVfb21wX2Zvci5pdGVyW2ldLmluZGV4ID0gaW5kZXg7Cit9CisKKworLyogUmV0dXJuIHRoZSBpbml0aWFsIHZhbHVlIGZvciBPTVBfRk9SIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfb21wX2Zvcl9pbml0aWFsIChjb25zdF9naW1wbGUgZ3MsIHNpemVfdCBpKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX0ZPUik7CisgIGdjY19hc3NlcnQgKGkgPCBncy0+Z2ltcGxlX29tcF9mb3IuY29sbGFwc2UpOworICByZXR1cm4gZ3MtPmdpbXBsZV9vbXBfZm9yLml0ZXJbaV0uaW5pdGlhbDsKK30KKworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBpbml0aWFsIHZhbHVlIGZvciBPTVBfRk9SIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9vbXBfZm9yX2luaXRpYWxfcHRyIChnaW1wbGUgZ3MsIHNpemVfdCBpKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX0ZPUik7CisgIGdjY19hc3NlcnQgKGkgPCBncy0+Z2ltcGxlX29tcF9mb3IuY29sbGFwc2UpOworICByZXR1cm4gJmdzLT5naW1wbGVfb21wX2Zvci5pdGVyW2ldLmluaXRpYWw7Cit9CisKKworLyogU2V0IElOSVRJQUwgdG8gYmUgdGhlIGluaXRpYWwgdmFsdWUgZm9yIE9NUF9GT1IgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9vbXBfZm9yX3NldF9pbml0aWFsIChnaW1wbGUgZ3MsIHNpemVfdCBpLCB0cmVlIGluaXRpYWwpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfRk9SKTsKKyAgZ2NjX2Fzc2VydCAoaSA8IGdzLT5naW1wbGVfb21wX2Zvci5jb2xsYXBzZSk7CisgIGdzLT5naW1wbGVfb21wX2Zvci5pdGVyW2ldLmluaXRpYWwgPSBpbml0aWFsOworfQorCisKKy8qIFJldHVybiB0aGUgZmluYWwgdmFsdWUgZm9yIE9NUF9GT1IgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9vbXBfZm9yX2ZpbmFsIChjb25zdF9naW1wbGUgZ3MsIHNpemVfdCBpKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX0ZPUik7CisgIGdjY19hc3NlcnQgKGkgPCBncy0+Z2ltcGxlX29tcF9mb3IuY29sbGFwc2UpOworICByZXR1cm4gZ3MtPmdpbXBsZV9vbXBfZm9yLml0ZXJbaV0uZmluYWw7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmluYWwgdmFsdWUgZm9yIE9NUF9GT1IgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX29tcF9mb3JfZmluYWxfcHRyIChnaW1wbGUgZ3MsIHNpemVfdCBpKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX0ZPUik7CisgIGdjY19hc3NlcnQgKGkgPCBncy0+Z2ltcGxlX29tcF9mb3IuY29sbGFwc2UpOworICByZXR1cm4gJmdzLT5naW1wbGVfb21wX2Zvci5pdGVyW2ldLmZpbmFsOworfQorCisKKy8qIFNldCBGSU5BTCB0byBiZSB0aGUgZmluYWwgdmFsdWUgZm9yIE9NUF9GT1IgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9vbXBfZm9yX3NldF9maW5hbCAoZ2ltcGxlIGdzLCBzaXplX3QgaSwgdHJlZSBmaW5hbCkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9GT1IpOworICBnY2NfYXNzZXJ0IChpIDwgZ3MtPmdpbXBsZV9vbXBfZm9yLmNvbGxhcHNlKTsKKyAgZ3MtPmdpbXBsZV9vbXBfZm9yLml0ZXJbaV0uZmluYWwgPSBmaW5hbDsKK30KKworCisvKiBSZXR1cm4gdGhlIGluY3JlbWVudCB2YWx1ZSBmb3IgT01QX0ZPUiBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX29tcF9mb3JfaW5jciAoY29uc3RfZ2ltcGxlIGdzLCBzaXplX3QgaSkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9GT1IpOworICBnY2NfYXNzZXJ0IChpIDwgZ3MtPmdpbXBsZV9vbXBfZm9yLmNvbGxhcHNlKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfb21wX2Zvci5pdGVyW2ldLmluY3I7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgaW5jcmVtZW50IHZhbHVlIGZvciBPTVBfRk9SIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9vbXBfZm9yX2luY3JfcHRyIChnaW1wbGUgZ3MsIHNpemVfdCBpKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX0ZPUik7CisgIGdjY19hc3NlcnQgKGkgPCBncy0+Z2ltcGxlX29tcF9mb3IuY29sbGFwc2UpOworICByZXR1cm4gJmdzLT5naW1wbGVfb21wX2Zvci5pdGVyW2ldLmluY3I7Cit9CisKKworLyogU2V0IElOQ1IgdG8gYmUgdGhlIGluY3JlbWVudCB2YWx1ZSBmb3IgT01QX0ZPUiBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX29tcF9mb3Jfc2V0X2luY3IgKGdpbXBsZSBncywgc2l6ZV90IGksIHRyZWUgaW5jcikKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9GT1IpOworICBnY2NfYXNzZXJ0IChpIDwgZ3MtPmdpbXBsZV9vbXBfZm9yLmNvbGxhcHNlKTsKKyAgZ3MtPmdpbXBsZV9vbXBfZm9yLml0ZXJbaV0uaW5jciA9IGluY3I7Cit9CisKKworLyogUmV0dXJuIHRoZSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIHRvIGV4ZWN1dGUgYmVmb3JlIHRoZSBPTVBfRk9SCisgICBzdGF0ZW1lbnQgR1Mgc3RhcnRzLiAgKi8KKworc3RhdGljIGlubGluZSBnaW1wbGVfc2VxCitnaW1wbGVfb21wX2Zvcl9wcmVfYm9keSAoZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX0ZPUik7CisgIHJldHVybiBncy0+Z2ltcGxlX29tcF9mb3IucHJlX2JvZHk7Cit9CisKKworLyogU2V0IFBSRV9CT0RZIHRvIGJlIHRoZSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIHRvIGV4ZWN1dGUgYmVmb3JlIHRoZQorICAgT01QX0ZPUiBzdGF0ZW1lbnQgR1Mgc3RhcnRzLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfb21wX2Zvcl9zZXRfcHJlX2JvZHkgKGdpbXBsZSBncywgZ2ltcGxlX3NlcSBwcmVfYm9keSkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9GT1IpOworICBncy0+Z2ltcGxlX29tcF9mb3IucHJlX2JvZHkgPSBwcmVfYm9keTsKK30KKworCisvKiBSZXR1cm4gdGhlIGNsYXVzZXMgYXNzb2NpYXRlZCB3aXRoIE9NUF9QQVJBTExFTCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX29tcF9wYXJhbGxlbF9jbGF1c2VzIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfUEFSQUxMRUwpOworICByZXR1cm4gZ3MtPmdpbXBsZV9vbXBfcGFyYWxsZWwuY2xhdXNlczsKK30KKworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBjbGF1c2VzIGFzc29jaWF0ZWQgd2l0aCBPTVBfUEFSQUxMRUwgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX29tcF9wYXJhbGxlbF9jbGF1c2VzX3B0ciAoZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1BBUkFMTEVMKTsKKyAgcmV0dXJuICZncy0+Z2ltcGxlX29tcF9wYXJhbGxlbC5jbGF1c2VzOworfQorCisKKy8qIFNldCBDTEFVU0VTIHRvIGJlIHRoZSBsaXN0IG9mIGNsYXVzZXMgYXNzb2NpYXRlZCB3aXRoIE9NUF9QQVJBTExFTAorICAgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9vbXBfcGFyYWxsZWxfc2V0X2NsYXVzZXMgKGdpbXBsZSBncywgdHJlZSBjbGF1c2VzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1BBUkFMTEVMKTsKKyAgZ3MtPmdpbXBsZV9vbXBfcGFyYWxsZWwuY2xhdXNlcyA9IGNsYXVzZXM7Cit9CisKKworLyogUmV0dXJuIHRoZSBjaGlsZCBmdW5jdGlvbiB1c2VkIHRvIGhvbGQgdGhlIGJvZHkgb2YgT01QX1BBUkFMTEVMIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfb21wX3BhcmFsbGVsX2NoaWxkX2ZuIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfUEFSQUxMRUwpOworICByZXR1cm4gZ3MtPmdpbXBsZV9vbXBfcGFyYWxsZWwuY2hpbGRfZm47Cit9CisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGNoaWxkIGZ1bmN0aW9uIHVzZWQgdG8gaG9sZCB0aGUgYm9keSBvZgorICAgT01QX1BBUkFMTEVMIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9vbXBfcGFyYWxsZWxfY2hpbGRfZm5fcHRyIChnaW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfUEFSQUxMRUwpOworICByZXR1cm4gJmdzLT5naW1wbGVfb21wX3BhcmFsbGVsLmNoaWxkX2ZuOworfQorCisKKy8qIFNldCBDSElMRF9GTiB0byBiZSB0aGUgY2hpbGQgZnVuY3Rpb24gZm9yIE9NUF9QQVJBTExFTCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX29tcF9wYXJhbGxlbF9zZXRfY2hpbGRfZm4gKGdpbXBsZSBncywgdHJlZSBjaGlsZF9mbikKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9QQVJBTExFTCk7CisgIGdzLT5naW1wbGVfb21wX3BhcmFsbGVsLmNoaWxkX2ZuID0gY2hpbGRfZm47Cit9CisKKworLyogUmV0dXJuIHRoZSBhcnRpZmljaWFsIGFyZ3VtZW50IHVzZWQgdG8gc2VuZCB2YXJpYWJsZXMgYW5kIHZhbHVlcworICAgZnJvbSB0aGUgcGFyZW50IHRvIHRoZSBjaGlsZHJlbiB0aHJlYWRzIGluIE9NUF9QQVJBTExFTCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX29tcF9wYXJhbGxlbF9kYXRhX2FyZyAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1BBUkFMTEVMKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfb21wX3BhcmFsbGVsLmRhdGFfYXJnOworfQorCisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGRhdGEgYXJndW1lbnQgZm9yIE9NUF9QQVJBTExFTCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfb21wX3BhcmFsbGVsX2RhdGFfYXJnX3B0ciAoZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1BBUkFMTEVMKTsKKyAgcmV0dXJuICZncy0+Z2ltcGxlX29tcF9wYXJhbGxlbC5kYXRhX2FyZzsKK30KKworCisvKiBTZXQgREFUQV9BUkcgdG8gYmUgdGhlIGRhdGEgYXJndW1lbnQgZm9yIE9NUF9QQVJBTExFTCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX29tcF9wYXJhbGxlbF9zZXRfZGF0YV9hcmcgKGdpbXBsZSBncywgdHJlZSBkYXRhX2FyZykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9QQVJBTExFTCk7CisgIGdzLT5naW1wbGVfb21wX3BhcmFsbGVsLmRhdGFfYXJnID0gZGF0YV9hcmc7Cit9CisKKworLyogUmV0dXJuIHRoZSBjbGF1c2VzIGFzc29jaWF0ZWQgd2l0aCBPTVBfVEFTSyBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX29tcF90YXNrX2NsYXVzZXMgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9UQVNLKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfb21wX3BhcmFsbGVsLmNsYXVzZXM7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgY2xhdXNlcyBhc3NvY2lhdGVkIHdpdGggT01QX1RBU0sgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX29tcF90YXNrX2NsYXVzZXNfcHRyIChnaW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfVEFTSyk7CisgIHJldHVybiAmZ3MtPmdpbXBsZV9vbXBfcGFyYWxsZWwuY2xhdXNlczsKK30KKworCisvKiBTZXQgQ0xBVVNFUyB0byBiZSB0aGUgbGlzdCBvZiBjbGF1c2VzIGFzc29jaWF0ZWQgd2l0aCBPTVBfVEFTSworICAgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9vbXBfdGFza19zZXRfY2xhdXNlcyAoZ2ltcGxlIGdzLCB0cmVlIGNsYXVzZXMpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfVEFTSyk7CisgIGdzLT5naW1wbGVfb21wX3BhcmFsbGVsLmNsYXVzZXMgPSBjbGF1c2VzOworfQorCisKKy8qIFJldHVybiB0aGUgY2hpbGQgZnVuY3Rpb24gdXNlZCB0byBob2xkIHRoZSBib2R5IG9mIE9NUF9UQVNLIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfb21wX3Rhc2tfY2hpbGRfZm4gKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9UQVNLKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfb21wX3BhcmFsbGVsLmNoaWxkX2ZuOworfQorCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBjaGlsZCBmdW5jdGlvbiB1c2VkIHRvIGhvbGQgdGhlIGJvZHkgb2YKKyAgIE9NUF9UQVNLIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9vbXBfdGFza19jaGlsZF9mbl9wdHIgKGdpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9UQVNLKTsKKyAgcmV0dXJuICZncy0+Z2ltcGxlX29tcF9wYXJhbGxlbC5jaGlsZF9mbjsKK30KKworCisvKiBTZXQgQ0hJTERfRk4gdG8gYmUgdGhlIGNoaWxkIGZ1bmN0aW9uIGZvciBPTVBfVEFTSyBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX29tcF90YXNrX3NldF9jaGlsZF9mbiAoZ2ltcGxlIGdzLCB0cmVlIGNoaWxkX2ZuKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1RBU0spOworICBncy0+Z2ltcGxlX29tcF9wYXJhbGxlbC5jaGlsZF9mbiA9IGNoaWxkX2ZuOworfQorCisKKy8qIFJldHVybiB0aGUgYXJ0aWZpY2lhbCBhcmd1bWVudCB1c2VkIHRvIHNlbmQgdmFyaWFibGVzIGFuZCB2YWx1ZXMKKyAgIGZyb20gdGhlIHBhcmVudCB0byB0aGUgY2hpbGRyZW4gdGhyZWFkcyBpbiBPTVBfVEFTSyBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX29tcF90YXNrX2RhdGFfYXJnIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfVEFTSyk7CisgIHJldHVybiBncy0+Z2ltcGxlX29tcF9wYXJhbGxlbC5kYXRhX2FyZzsKK30KKworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBkYXRhIGFyZ3VtZW50IGZvciBPTVBfVEFTSyBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfb21wX3Rhc2tfZGF0YV9hcmdfcHRyIChnaW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfVEFTSyk7CisgIHJldHVybiAmZ3MtPmdpbXBsZV9vbXBfcGFyYWxsZWwuZGF0YV9hcmc7Cit9CisKKworLyogU2V0IERBVEFfQVJHIHRvIGJlIHRoZSBkYXRhIGFyZ3VtZW50IGZvciBPTVBfVEFTSyBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX29tcF90YXNrX3NldF9kYXRhX2FyZyAoZ2ltcGxlIGdzLCB0cmVlIGRhdGFfYXJnKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1RBU0spOworICBncy0+Z2ltcGxlX29tcF9wYXJhbGxlbC5kYXRhX2FyZyA9IGRhdGFfYXJnOworfQorCisKKy8qIFJldHVybiB0aGUgY2xhdXNlcyBhc3NvY2lhdGVkIHdpdGggT01QX1RBU0sgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9vbXBfdGFza3JlZ19jbGF1c2VzIChjb25zdF9naW1wbGUgZ3MpCit7CisgIGlmIChnaW1wbGVfY29kZSAoZ3MpICE9IEdJTVBMRV9PTVBfUEFSQUxMRUwpCisgICAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9UQVNLKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfb21wX3BhcmFsbGVsLmNsYXVzZXM7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgY2xhdXNlcyBhc3NvY2lhdGVkIHdpdGggT01QX1RBU0sgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX29tcF90YXNrcmVnX2NsYXVzZXNfcHRyIChnaW1wbGUgZ3MpCit7CisgIGlmIChnaW1wbGVfY29kZSAoZ3MpICE9IEdJTVBMRV9PTVBfUEFSQUxMRUwpCisgICAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9UQVNLKTsKKyAgcmV0dXJuICZncy0+Z2ltcGxlX29tcF9wYXJhbGxlbC5jbGF1c2VzOworfQorCisKKy8qIFNldCBDTEFVU0VTIHRvIGJlIHRoZSBsaXN0IG9mIGNsYXVzZXMgYXNzb2NpYXRlZCB3aXRoIE9NUF9UQVNLCisgICBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX29tcF90YXNrcmVnX3NldF9jbGF1c2VzIChnaW1wbGUgZ3MsIHRyZWUgY2xhdXNlcykKK3sKKyAgaWYgKGdpbXBsZV9jb2RlIChncykgIT0gR0lNUExFX09NUF9QQVJBTExFTCkKKyAgICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1RBU0spOworICBncy0+Z2ltcGxlX29tcF9wYXJhbGxlbC5jbGF1c2VzID0gY2xhdXNlczsKK30KKworCisvKiBSZXR1cm4gdGhlIGNoaWxkIGZ1bmN0aW9uIHVzZWQgdG8gaG9sZCB0aGUgYm9keSBvZiBPTVBfVEFTSyBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX29tcF90YXNrcmVnX2NoaWxkX2ZuIChjb25zdF9naW1wbGUgZ3MpCit7CisgIGlmIChnaW1wbGVfY29kZSAoZ3MpICE9IEdJTVBMRV9PTVBfUEFSQUxMRUwpCisgICAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9UQVNLKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfb21wX3BhcmFsbGVsLmNoaWxkX2ZuOworfQorCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBjaGlsZCBmdW5jdGlvbiB1c2VkIHRvIGhvbGQgdGhlIGJvZHkgb2YKKyAgIE9NUF9UQVNLIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9vbXBfdGFza3JlZ19jaGlsZF9mbl9wdHIgKGdpbXBsZSBncykKK3sKKyAgaWYgKGdpbXBsZV9jb2RlIChncykgIT0gR0lNUExFX09NUF9QQVJBTExFTCkKKyAgICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1RBU0spOworICByZXR1cm4gJmdzLT5naW1wbGVfb21wX3BhcmFsbGVsLmNoaWxkX2ZuOworfQorCisKKy8qIFNldCBDSElMRF9GTiB0byBiZSB0aGUgY2hpbGQgZnVuY3Rpb24gZm9yIE9NUF9UQVNLIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfb21wX3Rhc2tyZWdfc2V0X2NoaWxkX2ZuIChnaW1wbGUgZ3MsIHRyZWUgY2hpbGRfZm4pCit7CisgIGlmIChnaW1wbGVfY29kZSAoZ3MpICE9IEdJTVBMRV9PTVBfUEFSQUxMRUwpCisgICAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9UQVNLKTsKKyAgZ3MtPmdpbXBsZV9vbXBfcGFyYWxsZWwuY2hpbGRfZm4gPSBjaGlsZF9mbjsKK30KKworCisvKiBSZXR1cm4gdGhlIGFydGlmaWNpYWwgYXJndW1lbnQgdXNlZCB0byBzZW5kIHZhcmlhYmxlcyBhbmQgdmFsdWVzCisgICBmcm9tIHRoZSBwYXJlbnQgdG8gdGhlIGNoaWxkcmVuIHRocmVhZHMgaW4gT01QX1RBU0sgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9vbXBfdGFza3JlZ19kYXRhX2FyZyAoY29uc3RfZ2ltcGxlIGdzKQoreworICBpZiAoZ2ltcGxlX2NvZGUgKGdzKSAhPSBHSU1QTEVfT01QX1BBUkFMTEVMKQorICAgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfVEFTSyk7CisgIHJldHVybiBncy0+Z2ltcGxlX29tcF9wYXJhbGxlbC5kYXRhX2FyZzsKK30KKworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBkYXRhIGFyZ3VtZW50IGZvciBPTVBfVEFTSyBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfb21wX3Rhc2tyZWdfZGF0YV9hcmdfcHRyIChnaW1wbGUgZ3MpCit7CisgIGlmIChnaW1wbGVfY29kZSAoZ3MpICE9IEdJTVBMRV9PTVBfUEFSQUxMRUwpCisgICAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9UQVNLKTsKKyAgcmV0dXJuICZncy0+Z2ltcGxlX29tcF9wYXJhbGxlbC5kYXRhX2FyZzsKK30KKworCisvKiBTZXQgREFUQV9BUkcgdG8gYmUgdGhlIGRhdGEgYXJndW1lbnQgZm9yIE9NUF9UQVNLIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfb21wX3Rhc2tyZWdfc2V0X2RhdGFfYXJnIChnaW1wbGUgZ3MsIHRyZWUgZGF0YV9hcmcpCit7CisgIGlmIChnaW1wbGVfY29kZSAoZ3MpICE9IEdJTVBMRV9PTVBfUEFSQUxMRUwpCisgICAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9UQVNLKTsKKyAgZ3MtPmdpbXBsZV9vbXBfcGFyYWxsZWwuZGF0YV9hcmcgPSBkYXRhX2FyZzsKK30KKworCisvKiBSZXR1cm4gdGhlIGNvcHkgZnVuY3Rpb24gdXNlZCB0byBob2xkIHRoZSBib2R5IG9mIE9NUF9UQVNLIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfb21wX3Rhc2tfY29weV9mbiAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1RBU0spOworICByZXR1cm4gZ3MtPmdpbXBsZV9vbXBfdGFzay5jb3B5X2ZuOworfQorCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBjb3B5IGZ1bmN0aW9uIHVzZWQgdG8gaG9sZCB0aGUgYm9keSBvZgorICAgT01QX1RBU0sgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX29tcF90YXNrX2NvcHlfZm5fcHRyIChnaW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfVEFTSyk7CisgIHJldHVybiAmZ3MtPmdpbXBsZV9vbXBfdGFzay5jb3B5X2ZuOworfQorCisKKy8qIFNldCBDSElMRF9GTiB0byBiZSB0aGUgY29weSBmdW5jdGlvbiBmb3IgT01QX1RBU0sgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9vbXBfdGFza19zZXRfY29weV9mbiAoZ2ltcGxlIGdzLCB0cmVlIGNvcHlfZm4pCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfVEFTSyk7CisgIGdzLT5naW1wbGVfb21wX3Rhc2suY29weV9mbiA9IGNvcHlfZm47Cit9CisKKworLyogUmV0dXJuIHNpemUgb2YgdGhlIGRhdGEgYmxvY2sgaW4gYnl0ZXMgaW4gT01QX1RBU0sgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9vbXBfdGFza19hcmdfc2l6ZSAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1RBU0spOworICByZXR1cm4gZ3MtPmdpbXBsZV9vbXBfdGFzay5hcmdfc2l6ZTsKK30KKworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBkYXRhIGJsb2NrIHNpemUgZm9yIE9NUF9UQVNLIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9vbXBfdGFza19hcmdfc2l6ZV9wdHIgKGdpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9UQVNLKTsKKyAgcmV0dXJuICZncy0+Z2ltcGxlX29tcF90YXNrLmFyZ19zaXplOworfQorCisKKy8qIFNldCBBUkdfU0laRSB0byBiZSB0aGUgZGF0YSBibG9jayBzaXplIGZvciBPTVBfVEFTSyBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX29tcF90YXNrX3NldF9hcmdfc2l6ZSAoZ2ltcGxlIGdzLCB0cmVlIGFyZ19zaXplKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1RBU0spOworICBncy0+Z2ltcGxlX29tcF90YXNrLmFyZ19zaXplID0gYXJnX3NpemU7Cit9CisKKworLyogUmV0dXJuIGFsaWduIG9mIHRoZSBkYXRhIGJsb2NrIGluIGJ5dGVzIGluIE9NUF9UQVNLIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfb21wX3Rhc2tfYXJnX2FsaWduIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfVEFTSyk7CisgIHJldHVybiBncy0+Z2ltcGxlX29tcF90YXNrLmFyZ19hbGlnbjsKK30KKworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBkYXRhIGJsb2NrIGFsaWduIGZvciBPTVBfVEFTSyBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfb21wX3Rhc2tfYXJnX2FsaWduX3B0ciAoZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1RBU0spOworICByZXR1cm4gJmdzLT5naW1wbGVfb21wX3Rhc2suYXJnX2FsaWduOworfQorCisKKy8qIFNldCBBUkdfU0laRSB0byBiZSB0aGUgZGF0YSBibG9jayBhbGlnbiBmb3IgT01QX1RBU0sgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9vbXBfdGFza19zZXRfYXJnX2FsaWduIChnaW1wbGUgZ3MsIHRyZWUgYXJnX2FsaWduKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1RBU0spOworICBncy0+Z2ltcGxlX29tcF90YXNrLmFyZ19hbGlnbiA9IGFyZ19hbGlnbjsKK30KKworCisvKiBSZXR1cm4gdGhlIGNsYXVzZXMgYXNzb2NpYXRlZCB3aXRoIE9NUF9TSU5HTEUgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9vbXBfc2luZ2xlX2NsYXVzZXMgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9TSU5HTEUpOworICByZXR1cm4gZ3MtPmdpbXBsZV9vbXBfc2luZ2xlLmNsYXVzZXM7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgY2xhdXNlcyBhc3NvY2lhdGVkIHdpdGggT01QX1NJTkdMRSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfb21wX3NpbmdsZV9jbGF1c2VzX3B0ciAoZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1NJTkdMRSk7CisgIHJldHVybiAmZ3MtPmdpbXBsZV9vbXBfc2luZ2xlLmNsYXVzZXM7Cit9CisKKworLyogU2V0IENMQVVTRVMgdG8gYmUgdGhlIGNsYXVzZXMgYXNzb2NpYXRlZCB3aXRoIE9NUF9TSU5HTEUgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9vbXBfc2luZ2xlX3NldF9jbGF1c2VzIChnaW1wbGUgZ3MsIHRyZWUgY2xhdXNlcykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9TSU5HTEUpOworICBncy0+Z2ltcGxlX29tcF9zaW5nbGUuY2xhdXNlcyA9IGNsYXVzZXM7Cit9CisKKworLyogUmV0dXJuIHRoZSBjbGF1c2VzIGFzc29jaWF0ZWQgd2l0aCBPTVBfU0VDVElPTlMgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9vbXBfc2VjdGlvbnNfY2xhdXNlcyAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1NFQ1RJT05TKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfb21wX3NlY3Rpb25zLmNsYXVzZXM7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgY2xhdXNlcyBhc3NvY2lhdGVkIHdpdGggT01QX1NFQ1RJT05TIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9vbXBfc2VjdGlvbnNfY2xhdXNlc19wdHIgKGdpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9TRUNUSU9OUyk7CisgIHJldHVybiAmZ3MtPmdpbXBsZV9vbXBfc2VjdGlvbnMuY2xhdXNlczsKK30KKworCisvKiBTZXQgQ0xBVVNFUyB0byBiZSB0aGUgc2V0IG9mIGNsYXVzZXMgYXNzb2NpYXRlZCB3aXRoIE9NUF9TRUNUSU9OUworICAgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9vbXBfc2VjdGlvbnNfc2V0X2NsYXVzZXMgKGdpbXBsZSBncywgdHJlZSBjbGF1c2VzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1NFQ1RJT05TKTsKKyAgZ3MtPmdpbXBsZV9vbXBfc2VjdGlvbnMuY2xhdXNlcyA9IGNsYXVzZXM7Cit9CisKKworLyogUmV0dXJuIHRoZSBjb250cm9sIHZhcmlhYmxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgR0lNUExFX09NUF9TRUNUSU9OUworICAgaW4gR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9vbXBfc2VjdGlvbnNfY29udHJvbCAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1NFQ1RJT05TKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfb21wX3NlY3Rpb25zLmNvbnRyb2w7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgY2xhdXNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIEdJTVBMRV9PTVBfU0VDVElPTlMKKyAgIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9vbXBfc2VjdGlvbnNfY29udHJvbF9wdHIgKGdpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9TRUNUSU9OUyk7CisgIHJldHVybiAmZ3MtPmdpbXBsZV9vbXBfc2VjdGlvbnMuY29udHJvbDsKK30KKworCisvKiBTZXQgQ09OVFJPTCB0byBiZSB0aGUgc2V0IG9mIGNsYXVzZXMgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAgR0lNUExFX09NUF9TRUNUSU9OUyBpbiBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX29tcF9zZWN0aW9uc19zZXRfY29udHJvbCAoZ2ltcGxlIGdzLCB0cmVlIGNvbnRyb2wpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfU0VDVElPTlMpOworICBncy0+Z2ltcGxlX29tcF9zZWN0aW9ucy5jb250cm9sID0gY29udHJvbDsKK30KKworCisvKiBTZXQgQ09ORCB0byBiZSB0aGUgY29uZGl0aW9uIGNvZGUgZm9yIE9NUF9GT1IgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9vbXBfZm9yX3NldF9jb25kIChnaW1wbGUgZ3MsIHNpemVfdCBpLCBlbnVtIHRyZWVfY29kZSBjb25kKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX0ZPUik7CisgIGdjY19hc3NlcnQgKFRSRUVfQ09ERV9DTEFTUyAoY29uZCkgPT0gdGNjX2NvbXBhcmlzb24pOworICBnY2NfYXNzZXJ0IChpIDwgZ3MtPmdpbXBsZV9vbXBfZm9yLmNvbGxhcHNlKTsKKyAgZ3MtPmdpbXBsZV9vbXBfZm9yLml0ZXJbaV0uY29uZCA9IGNvbmQ7Cit9CisKKworLyogUmV0dXJuIHRoZSBjb25kaXRpb24gY29kZSBhc3NvY2lhdGVkIHdpdGggT01QX0ZPUiBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgZW51bSB0cmVlX2NvZGUKK2dpbXBsZV9vbXBfZm9yX2NvbmQgKGNvbnN0X2dpbXBsZSBncywgc2l6ZV90IGkpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfRk9SKTsKKyAgZ2NjX2Fzc2VydCAoaSA8IGdzLT5naW1wbGVfb21wX2Zvci5jb2xsYXBzZSk7CisgIHJldHVybiBncy0+Z2ltcGxlX29tcF9mb3IuaXRlcltpXS5jb25kOworfQorCisKKy8qIFNldCB0aGUgdmFsdWUgYmVpbmcgc3RvcmVkIGluIGFuIGF0b21pYyBzdG9yZS4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX29tcF9hdG9taWNfc3RvcmVfc2V0X3ZhbCAoZ2ltcGxlIGcsIHRyZWUgdmFsKQoreworICBHSU1QTEVfQ0hFQ0sgKGcsIEdJTVBMRV9PTVBfQVRPTUlDX1NUT1JFKTsKKyAgZy0+Z2ltcGxlX29tcF9hdG9taWNfc3RvcmUudmFsID0gdmFsOworfQorCisKKy8qIFJldHVybiB0aGUgdmFsdWUgYmVpbmcgc3RvcmVkIGluIGFuIGF0b21pYyBzdG9yZS4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX29tcF9hdG9taWNfc3RvcmVfdmFsIChjb25zdF9naW1wbGUgZykKK3sKKyAgR0lNUExFX0NIRUNLIChnLCBHSU1QTEVfT01QX0FUT01JQ19TVE9SRSk7CisgIHJldHVybiBnLT5naW1wbGVfb21wX2F0b21pY19zdG9yZS52YWw7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdmFsdWUgYmVpbmcgc3RvcmVkIGluIGFuIGF0b21pYyBzdG9yZS4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfb21wX2F0b21pY19zdG9yZV92YWxfcHRyIChnaW1wbGUgZykKK3sKKyAgR0lNUExFX0NIRUNLIChnLCBHSU1QTEVfT01QX0FUT01JQ19TVE9SRSk7CisgIHJldHVybiAmZy0+Z2ltcGxlX29tcF9hdG9taWNfc3RvcmUudmFsOworfQorCisKKy8qIFNldCB0aGUgTEhTIG9mIGFuIGF0b21pYyBsb2FkLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfb21wX2F0b21pY19sb2FkX3NldF9saHMgKGdpbXBsZSBnLCB0cmVlIGxocykKK3sKKyAgR0lNUExFX0NIRUNLIChnLCBHSU1QTEVfT01QX0FUT01JQ19MT0FEKTsKKyAgZy0+Z2ltcGxlX29tcF9hdG9taWNfbG9hZC5saHMgPSBsaHM7Cit9CisKKworLyogR2V0IHRoZSBMSFMgb2YgYW4gYXRvbWljIGxvYWQuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9vbXBfYXRvbWljX2xvYWRfbGhzIChjb25zdF9naW1wbGUgZykKK3sKKyAgR0lNUExFX0NIRUNLIChnLCBHSU1QTEVfT01QX0FUT01JQ19MT0FEKTsKKyAgcmV0dXJuIGctPmdpbXBsZV9vbXBfYXRvbWljX2xvYWQubGhzOworfQorCisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIExIUyBvZiBhbiBhdG9taWMgbG9hZC4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfb21wX2F0b21pY19sb2FkX2xoc19wdHIgKGdpbXBsZSBnKQoreworICBHSU1QTEVfQ0hFQ0sgKGcsIEdJTVBMRV9PTVBfQVRPTUlDX0xPQUQpOworICByZXR1cm4gJmctPmdpbXBsZV9vbXBfYXRvbWljX2xvYWQubGhzOworfQorCisKKy8qIFNldCB0aGUgUkhTIG9mIGFuIGF0b21pYyBsb2FkLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfb21wX2F0b21pY19sb2FkX3NldF9yaHMgKGdpbXBsZSBnLCB0cmVlIHJocykKK3sKKyAgR0lNUExFX0NIRUNLIChnLCBHSU1QTEVfT01QX0FUT01JQ19MT0FEKTsKKyAgZy0+Z2ltcGxlX29tcF9hdG9taWNfbG9hZC5yaHMgPSByaHM7Cit9CisKKworLyogR2V0IHRoZSBSSFMgb2YgYW4gYXRvbWljIGxvYWQuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9vbXBfYXRvbWljX2xvYWRfcmhzIChjb25zdF9naW1wbGUgZykKK3sKKyAgR0lNUExFX0NIRUNLIChnLCBHSU1QTEVfT01QX0FUT01JQ19MT0FEKTsKKyAgcmV0dXJuIGctPmdpbXBsZV9vbXBfYXRvbWljX2xvYWQucmhzOworfQorCisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIFJIUyBvZiBhbiBhdG9taWMgbG9hZC4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfb21wX2F0b21pY19sb2FkX3Joc19wdHIgKGdpbXBsZSBnKQoreworICBHSU1QTEVfQ0hFQ0sgKGcsIEdJTVBMRV9PTVBfQVRPTUlDX0xPQUQpOworICByZXR1cm4gJmctPmdpbXBsZV9vbXBfYXRvbWljX2xvYWQucmhzOworfQorCisKKy8qIEdldCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgY29udHJvbCB2YXJpYWJsZSBpbiBhIEdJTVBMRV9PTVBfQ09OVElOVUUuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9vbXBfY29udGludWVfY29udHJvbF9kZWYgKGNvbnN0X2dpbXBsZSBnKQoreworICBHSU1QTEVfQ0hFQ0sgKGcsIEdJTVBMRV9PTVBfQ09OVElOVUUpOworICByZXR1cm4gZy0+Z2ltcGxlX29tcF9jb250aW51ZS5jb250cm9sX2RlZjsKK30KKworLyogVGhlIHNhbWUgYXMgYWJvdmUsIGJ1dCByZXR1cm4gdGhlIGFkZHJlc3MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX29tcF9jb250aW51ZV9jb250cm9sX2RlZl9wdHIgKGdpbXBsZSBnKQoreworICBHSU1QTEVfQ0hFQ0sgKGcsIEdJTVBMRV9PTVBfQ09OVElOVUUpOworICByZXR1cm4gJmctPmdpbXBsZV9vbXBfY29udGludWUuY29udHJvbF9kZWY7Cit9CisKKy8qIFNldCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgY29udHJvbCB2YXJpYWJsZSBpbiBhIEdJTVBMRV9PTVBfQ09OVElOVUUuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9vbXBfY29udGludWVfc2V0X2NvbnRyb2xfZGVmIChnaW1wbGUgZywgdHJlZSBkZWYpCit7CisgIEdJTVBMRV9DSEVDSyAoZywgR0lNUExFX09NUF9DT05USU5VRSk7CisgIGctPmdpbXBsZV9vbXBfY29udGludWUuY29udHJvbF9kZWYgPSBkZWY7Cit9CisKKworLyogR2V0IHRoZSB1c2Ugb2YgdGhlIGNvbnRyb2wgdmFyaWFibGUgaW4gYSBHSU1QTEVfT01QX0NPTlRJTlVFLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfb21wX2NvbnRpbnVlX2NvbnRyb2xfdXNlIChjb25zdF9naW1wbGUgZykKK3sKKyAgR0lNUExFX0NIRUNLIChnLCBHSU1QTEVfT01QX0NPTlRJTlVFKTsKKyAgcmV0dXJuIGctPmdpbXBsZV9vbXBfY29udGludWUuY29udHJvbF91c2U7Cit9CisKKworLyogVGhlIHNhbWUgYXMgYWJvdmUsIGJ1dCByZXR1cm4gdGhlIGFkZHJlc3MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX29tcF9jb250aW51ZV9jb250cm9sX3VzZV9wdHIgKGdpbXBsZSBnKQoreworICBHSU1QTEVfQ0hFQ0sgKGcsIEdJTVBMRV9PTVBfQ09OVElOVUUpOworICByZXR1cm4gJmctPmdpbXBsZV9vbXBfY29udGludWUuY29udHJvbF91c2U7Cit9CisKKworLyogU2V0IHRoZSB1c2Ugb2YgdGhlIGNvbnRyb2wgdmFyaWFibGUgaW4gYSBHSU1QTEVfT01QX0NPTlRJTlVFLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfb21wX2NvbnRpbnVlX3NldF9jb250cm9sX3VzZSAoZ2ltcGxlIGcsIHRyZWUgdXNlKQoreworICBHSU1QTEVfQ0hFQ0sgKGcsIEdJTVBMRV9PTVBfQ09OVElOVUUpOworICBnLT5naW1wbGVfb21wX2NvbnRpbnVlLmNvbnRyb2xfdXNlID0gdXNlOworfQorCisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHJldHVybiB2YWx1ZSBmb3IgR0lNUExFX1JFVFVSTiBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfcmV0dXJuX3JldHZhbF9wdHIgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX1JFVFVSTik7CisgIHJldHVybiBnaW1wbGVfb3BfcHRyIChncywgMCk7Cit9CisKKy8qIFJldHVybiB0aGUgcmV0dXJuIHZhbHVlIGZvciBHSU1QTEVfUkVUVVJOIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfcmV0dXJuX3JldHZhbCAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfUkVUVVJOKTsKKyAgcmV0dXJuIGdpbXBsZV9vcCAoZ3MsIDApOworfQorCisKKy8qIFNldCBSRVRWQUwgdG8gYmUgdGhlIHJldHVybiB2YWx1ZSBmb3IgR0lNUExFX1JFVFVSTiBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX3JldHVybl9zZXRfcmV0dmFsIChnaW1wbGUgZ3MsIHRyZWUgcmV0dmFsKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfUkVUVVJOKTsKKyAgZ2ltcGxlX3NldF9vcCAoZ3MsIDAsIHJldHZhbCk7Cit9CisKKworLyogUmV0dXJucyB0cnVlIHdoZW4gdGhlIGdpbXBsZSBzdGF0bWVudCBTVE1UIGlzIGFueSBvZiB0aGUgT3Blbk1QIHR5cGVzLiAgKi8KKworI2RlZmluZSBDQVNFX0dJTVBMRV9PTVAJCQkJXAorICAgIGNhc2UgR0lNUExFX09NUF9QQVJBTExFTDoJCQlcCisgICAgY2FzZSBHSU1QTEVfT01QX1RBU0s6CQkJXAorICAgIGNhc2UgR0lNUExFX09NUF9GT1I6CQkJXAorICAgIGNhc2UgR0lNUExFX09NUF9TRUNUSU9OUzoJCQlcCisgICAgY2FzZSBHSU1QTEVfT01QX1NFQ1RJT05TX1NXSVRDSDoJCVwKKyAgICBjYXNlIEdJTVBMRV9PTVBfU0lOR0xFOgkJCVwKKyAgICBjYXNlIEdJTVBMRV9PTVBfU0VDVElPTjoJCQlcCisgICAgY2FzZSBHSU1QTEVfT01QX01BU1RFUjoJCQlcCisgICAgY2FzZSBHSU1QTEVfT01QX09SREVSRUQ6CQkJXAorICAgIGNhc2UgR0lNUExFX09NUF9DUklUSUNBTDoJCQlcCisgICAgY2FzZSBHSU1QTEVfT01QX1JFVFVSTjoJCQlcCisgICAgY2FzZSBHSU1QTEVfT01QX0FUT01JQ19MT0FEOgkJXAorICAgIGNhc2UgR0lNUExFX09NUF9BVE9NSUNfU1RPUkU6CQlcCisgICAgY2FzZSBHSU1QTEVfT01QX0NPTlRJTlVFCisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraXNfZ2ltcGxlX29tcCAoY29uc3RfZ2ltcGxlIHN0bXQpCit7CisgIHN3aXRjaCAoZ2ltcGxlX2NvZGUgKHN0bXQpKQorICAgIHsKKyAgICBDQVNFX0dJTVBMRV9PTVA6CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworCisvKiBSZXR1cm5zIFRSVUUgaWYgc3RhdGVtZW50IEcgaXMgYSBHSU1QTEVfTk9QLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitnaW1wbGVfbm9wX3AgKGNvbnN0X2dpbXBsZSBnKQoreworICByZXR1cm4gZ2ltcGxlX2NvZGUgKGcpID09IEdJTVBMRV9OT1A7Cit9CisKKworLyogUmV0dXJuIHRydWUgaWYgR1MgaXMgYSBHSU1QTEVfUkVTWC4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraXNfZ2ltcGxlX3Jlc3ggKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgcmV0dXJuIGdpbXBsZV9jb2RlIChncykgPT0gR0lNUExFX1JFU1g7Cit9CisKKy8qIFJldHVybiB0aGUgcHJlZGljdG9yIG9mIEdJTVBMRV9QUkVESUNUIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgZW51bSBicl9wcmVkaWN0b3IKK2dpbXBsZV9wcmVkaWN0X3ByZWRpY3RvciAoZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfUFJFRElDVCk7CisgIHJldHVybiAoZW51bSBicl9wcmVkaWN0b3IpIChncy0+Z3NiYXNlLnN1YmNvZGUgJiB+R0ZfUFJFRElDVF9UQUtFTik7Cit9CisKKworLyogU2V0IHRoZSBwcmVkaWN0b3Igb2YgR0lNUExFX1BSRURJQ1Qgc3RhdGVtZW50IEdTIHRvIFBSRURJQ1QuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9wcmVkaWN0X3NldF9wcmVkaWN0b3IgKGdpbXBsZSBncywgZW51bSBicl9wcmVkaWN0b3IgcHJlZGljdG9yKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfUFJFRElDVCk7CisgIGdzLT5nc2Jhc2Uuc3ViY29kZSA9IChncy0+Z3NiYXNlLnN1YmNvZGUgJiBHRl9QUkVESUNUX1RBS0VOKQorCQkgICAgICAgfCAodW5zaWduZWQpIHByZWRpY3RvcjsKK30KKworCisvKiBSZXR1cm4gdGhlIG91dGNvbWUgb2YgR0lNUExFX1BSRURJQ1Qgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSBlbnVtIHByZWRpY3Rpb24KK2dpbXBsZV9wcmVkaWN0X291dGNvbWUgKGdpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX1BSRURJQ1QpOworICByZXR1cm4gKGdzLT5nc2Jhc2Uuc3ViY29kZSAmIEdGX1BSRURJQ1RfVEFLRU4pID8gVEFLRU4gOiBOT1RfVEFLRU47Cit9CisKKworLyogU2V0IHRoZSBvdXRjb21lIG9mIEdJTVBMRV9QUkVESUNUIHN0YXRlbWVudCBHUyB0byBPVVRDT01FLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfcHJlZGljdF9zZXRfb3V0Y29tZSAoZ2ltcGxlIGdzLCBlbnVtIHByZWRpY3Rpb24gb3V0Y29tZSkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX1BSRURJQ1QpOworICBpZiAob3V0Y29tZSA9PSBUQUtFTikKKyAgICBncy0+Z3NiYXNlLnN1YmNvZGUgfD0gR0ZfUFJFRElDVF9UQUtFTjsKKyAgZWxzZQorICAgIGdzLT5nc2Jhc2Uuc3ViY29kZSAmPSB+R0ZfUFJFRElDVF9UQUtFTjsKK30KKworCisvKiBSZXR1cm4gdGhlIHR5cGUgb2YgdGhlIG1haW4gZXhwcmVzc2lvbiBjb21wdXRlZCBieSBTVE1ULiAgUmV0dXJuCisgICB2b2lkX3R5cGVfbm9kZSBpZiB0aGUgc3RhdGVtZW50IGNvbXB1dGVzIG5vdGhpbmcuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9leHByX3R5cGUgKGNvbnN0X2dpbXBsZSBzdG10KQoreworICBlbnVtIGdpbXBsZV9jb2RlIGNvZGUgPSBnaW1wbGVfY29kZSAoc3RtdCk7CisKKyAgaWYgKGNvZGUgPT0gR0lNUExFX0FTU0lHTiB8fCBjb2RlID09IEdJTVBMRV9DQUxMKQorICAgIHsKKyAgICAgIHRyZWUgdHlwZTsKKyAgICAgIC8qIEluIGdlbmVyYWwgd2Ugd2FudCB0byBwYXNzIG91dCBhIHR5cGUgdGhhdCBjYW4gYmUgc3Vic3RpdHV0ZWQKKyAgICAgICAgIGZvciBib3RoIHRoZSBSSFMgYW5kIHRoZSBMSFMgdHlwZXMgaWYgdGhlcmUgaXMgYSBwb3NzaWJseQorCSB1c2VsZXNzIGNvbnZlcnNpb24gaW52b2x2ZWQuICBUaGF0IG1lYW5zIHJldHVybmluZyB0aGUKKwkgb3JpZ2luYWwgUkhTIHR5cGUgYXMgZmFyIGFzIHdlIGNhbiByZWNvbnN0cnVjdCBpdC4gICovCisgICAgICBpZiAoY29kZSA9PSBHSU1QTEVfQ0FMTCkKKwl0eXBlID0gZ2ltcGxlX2NhbGxfcmV0dXJuX3R5cGUgKHN0bXQpOworICAgICAgZWxzZQorCXN3aXRjaCAoZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAoc3RtdCkpCisJICB7CisJICBjYXNlIFBPSU5URVJfUExVU19FWFBSOgorCSAgICB0eXBlID0gVFJFRV9UWVBFIChnaW1wbGVfYXNzaWduX3JoczEgKHN0bXQpKTsKKwkgICAgYnJlYWs7CisKKwkgIGRlZmF1bHQ6CisJICAgIC8qIEFzIGZhbGxiYWNrIHVzZSB0aGUgdHlwZSBvZiB0aGUgTEhTLiAgKi8KKwkgICAgdHlwZSA9IFRSRUVfVFlQRSAoZ2ltcGxlX2dldF9saHMgKHN0bXQpKTsKKwkgICAgYnJlYWs7CisJICB9CisgICAgICByZXR1cm4gdHlwZTsKKyAgICB9CisgIGVsc2UgaWYgKGNvZGUgPT0gR0lNUExFX0NPTkQpCisgICAgcmV0dXJuIGJvb2xlYW5fdHlwZV9ub2RlOworICBlbHNlCisgICAgcmV0dXJuIHZvaWRfdHlwZV9ub2RlOworfQorCisKKy8qIFJldHVybiBhIG5ldyBpdGVyYXRvciBwb2ludGluZyB0byBHSU1QTEVfU0VRJ3MgZmlyc3Qgc3RhdGVtZW50LiAgKi8KKworc3RhdGljIGlubGluZSBnaW1wbGVfc3RtdF9pdGVyYXRvcgorZ3NpX3N0YXJ0IChnaW1wbGVfc2VxIHNlcSkKK3sKKyAgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgaTsKKworICBpLnB0ciA9IGdpbXBsZV9zZXFfZmlyc3QgKHNlcSk7CisgIGkuc2VxID0gc2VxOworICBpLmJiID0gKGkucHRyICYmIGkucHRyLT5zdG10KSA/IGdpbXBsZV9iYiAoaS5wdHItPnN0bXQpIDogTlVMTDsKKworICByZXR1cm4gaTsKK30KKworCisvKiBSZXR1cm4gYSBuZXcgaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IHN0YXRlbWVudCBpbiBiYXNpYyBibG9jayBCQi4gICovCisKK3N0YXRpYyBpbmxpbmUgZ2ltcGxlX3N0bXRfaXRlcmF0b3IKK2dzaV9zdGFydF9iYiAoYmFzaWNfYmxvY2sgYmIpCit7CisgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGk7CisgIGdpbXBsZV9zZXEgc2VxOworCisgIHNlcSA9IGJiX3NlcSAoYmIpOworICBpLnB0ciA9IGdpbXBsZV9zZXFfZmlyc3QgKHNlcSk7CisgIGkuc2VxID0gc2VxOworICBpLmJiID0gYmI7CisKKyAgcmV0dXJuIGk7Cit9CisKKworLyogUmV0dXJuIGEgbmV3IGl0ZXJhdG9yIGluaXRpYWxseSBwb2ludGluZyB0byBHSU1QTEVfU0VRJ3MgbGFzdCBzdGF0ZW1lbnQuICAqLworCitzdGF0aWMgaW5saW5lIGdpbXBsZV9zdG10X2l0ZXJhdG9yCitnc2lfbGFzdCAoZ2ltcGxlX3NlcSBzZXEpCit7CisgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGk7CisKKyAgaS5wdHIgPSBnaW1wbGVfc2VxX2xhc3QgKHNlcSk7CisgIGkuc2VxID0gc2VxOworICBpLmJiID0gKGkucHRyICYmIGkucHRyLT5zdG10KSA/IGdpbXBsZV9iYiAoaS5wdHItPnN0bXQpIDogTlVMTDsKKworICByZXR1cm4gaTsKK30KKworCisvKiBSZXR1cm4gYSBuZXcgaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGxhc3Qgc3RhdGVtZW50IGluIGJhc2ljIGJsb2NrIEJCLiAgKi8KKworc3RhdGljIGlubGluZSBnaW1wbGVfc3RtdF9pdGVyYXRvcgorZ3NpX2xhc3RfYmIgKGJhc2ljX2Jsb2NrIGJiKQoreworICBnaW1wbGVfc3RtdF9pdGVyYXRvciBpOworICBnaW1wbGVfc2VxIHNlcTsKKworICBzZXEgPSBiYl9zZXEgKGJiKTsKKyAgaS5wdHIgPSBnaW1wbGVfc2VxX2xhc3QgKHNlcSk7CisgIGkuc2VxID0gc2VxOworICBpLmJiID0gYmI7CisKKyAgcmV0dXJuIGk7Cit9CisKKworLyogUmV0dXJuIHRydWUgaWYgSSBpcyBhdCB0aGUgZW5kIG9mIGl0cyBzZXF1ZW5jZS4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ3NpX2VuZF9wIChnaW1wbGVfc3RtdF9pdGVyYXRvciBpKQoreworICByZXR1cm4gaS5wdHIgPT0gTlVMTDsKK30KKworCisvKiBSZXR1cm4gdHJ1ZSBpZiBJIGlzIG9uZSBzdGF0ZW1lbnQgYmVmb3JlIHRoZSBlbmQgb2YgaXRzIHNlcXVlbmNlLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitnc2lfb25lX2JlZm9yZV9lbmRfcCAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgaSkKK3sKKyAgcmV0dXJuIGkucHRyICE9IE5VTEwgJiYgaS5wdHItPm5leHQgPT0gTlVMTDsKK30KKworCisvKiBBZHZhbmNlIHRoZSBpdGVyYXRvciB0byB0aGUgbmV4dCBnaW1wbGUgc3RhdGVtZW50LiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnc2lfbmV4dCAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmkpCit7CisgIGktPnB0ciA9IGktPnB0ci0+bmV4dDsKK30KKworLyogQWR2YW5jZSB0aGUgaXRlcmF0b3IgdG8gdGhlIHByZXZpb3VzIGdpbXBsZSBzdGF0ZW1lbnQuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dzaV9wcmV2IChnaW1wbGVfc3RtdF9pdGVyYXRvciAqaSkKK3sKKyAgaS0+cHRyID0gaS0+cHRyLT5wcmV2OworfQorCisvKiBSZXR1cm4gdGhlIGN1cnJlbnQgc3RtdC4gICovCisKK3N0YXRpYyBpbmxpbmUgZ2ltcGxlCitnc2lfc3RtdCAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgaSkKK3sKKyAgcmV0dXJuIGkucHRyLT5zdG10OworfQorCisvKiBSZXR1cm4gYSBibG9jayBzdGF0ZW1lbnQgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGZpcnN0IG5vbi1sYWJlbAorICAgc3RhdGVtZW50IGluIGJsb2NrIEJCLiAgKi8KKworc3RhdGljIGlubGluZSBnaW1wbGVfc3RtdF9pdGVyYXRvcgorZ3NpX2FmdGVyX2xhYmVscyAoYmFzaWNfYmxvY2sgYmIpCit7CisgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGdzaSA9IGdzaV9zdGFydF9iYiAoYmIpOworCisgIHdoaWxlICghZ3NpX2VuZF9wIChnc2kpICYmIGdpbXBsZV9jb2RlIChnc2lfc3RtdCAoZ3NpKSkgPT0gR0lNUExFX0xBQkVMKQorICAgIGdzaV9uZXh0ICgmZ3NpKTsKKworICByZXR1cm4gZ3NpOworfQorCisvKiBBZHZhbmNlIHRoZSBpdGVyYXRvciB0byB0aGUgbmV4dCBub24tZGVidWcgZ2ltcGxlIHN0YXRlbWVudC4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ3NpX25leHRfbm9uZGVidWcgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICppKQoreworICBkbworICAgIHsKKyAgICAgIGdzaV9uZXh0IChpKTsKKyAgICB9CisgIHdoaWxlICghZ3NpX2VuZF9wICgqaSkgJiYgaXNfZ2ltcGxlX2RlYnVnIChnc2lfc3RtdCAoKmkpKSk7Cit9CisKKy8qIEFkdmFuY2UgdGhlIGl0ZXJhdG9yIHRvIHRoZSBuZXh0IG5vbi1kZWJ1ZyBnaW1wbGUgc3RhdGVtZW50LiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnc2lfcHJldl9ub25kZWJ1ZyAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmkpCit7CisgIGRvCisgICAgeworICAgICAgZ3NpX3ByZXYgKGkpOworICAgIH0KKyAgd2hpbGUgKCFnc2lfZW5kX3AgKCppKSAmJiBpc19naW1wbGVfZGVidWcgKGdzaV9zdG10ICgqaSkpKTsKK30KKworLyogUmV0dXJuIGEgbmV3IGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBub24tZGVidWcgc3RhdGVtZW50IGluCisgICBiYXNpYyBibG9jayBCQi4gICovCisKK3N0YXRpYyBpbmxpbmUgZ2ltcGxlX3N0bXRfaXRlcmF0b3IKK2dzaV9zdGFydF9ub25kZWJ1Z19iYiAoYmFzaWNfYmxvY2sgYmIpCit7CisgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGkgPSBnc2lfc3RhcnRfYmIgKGJiKTsKKworICBpZiAoIWdzaV9lbmRfcCAoaSkgJiYgaXNfZ2ltcGxlX2RlYnVnIChnc2lfc3RtdCAoaSkpKQorICAgIGdzaV9uZXh0X25vbmRlYnVnICgmaSk7CisKKyAgcmV0dXJuIGk7Cit9CisKKy8qIFJldHVybiBhIG5ldyBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgbGFzdCBub24tZGVidWcgc3RhdGVtZW50IGluCisgICBiYXNpYyBibG9jayBCQi4gICovCisKK3N0YXRpYyBpbmxpbmUgZ2ltcGxlX3N0bXRfaXRlcmF0b3IKK2dzaV9sYXN0X25vbmRlYnVnX2JiIChiYXNpY19ibG9jayBiYikKK3sKKyAgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgaSA9IGdzaV9sYXN0X2JiIChiYik7CisKKyAgaWYgKCFnc2lfZW5kX3AgKGkpICYmIGlzX2dpbXBsZV9kZWJ1ZyAoZ3NpX3N0bXQgKGkpKSkKKyAgICBnc2lfcHJldl9ub25kZWJ1ZyAoJmkpOworCisgIHJldHVybiBpOworfQorCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IHN0bXQuCisKKyAgTk9URTogWW91IG1heSB3YW50IHRvIHVzZSBnc2lfcmVwbGFjZSBvbiB0aGUgaXRlcmF0b3IgaXRzZWxmLAorICBhcyB0aGlzIHBlcmZvcm1zIGFkZGl0aW9uYWwgYm9va2tlZXBpbmcgdGhhdCB3aWxsIG5vdCBiZSBkb25lCisgIGlmIHlvdSBzaW1wbHkgYXNzaWduIHRocm91Z2ggYSBwb2ludGVyIHJldHVybmVkIGJ5IGdzaV9zdG10X3B0ci4gICovCisKK3N0YXRpYyBpbmxpbmUgZ2ltcGxlICoKK2dzaV9zdG10X3B0ciAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmkpCit7CisgIHJldHVybiAmaS0+cHRyLT5zdG10OworfQorCisKKy8qIFJldHVybiB0aGUgYmFzaWMgYmxvY2sgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaXRlcmF0b3IuICAqLworCitzdGF0aWMgaW5saW5lIGJhc2ljX2Jsb2NrCitnc2lfYmIgKGdpbXBsZV9zdG10X2l0ZXJhdG9yIGkpCit7CisgIHJldHVybiBpLmJiOworfQorCisKKy8qIFJldHVybiB0aGUgc2VxdWVuY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaXRlcmF0b3IuICAqLworCitzdGF0aWMgaW5saW5lIGdpbXBsZV9zZXEKK2dzaV9zZXEgKGdpbXBsZV9zdG10X2l0ZXJhdG9yIGkpCit7CisgIHJldHVybiBpLnNlcTsKK30KKworCitlbnVtIGdzaV9pdGVyYXRvcl91cGRhdGUKK3sKKyAgR1NJX05FV19TVE1ULAkJLyogT25seSB2YWxpZCB3aGVuIHNpbmdsZSBzdGF0ZW1lbnQgaXMgYWRkZWQsIG1vdmUKKwkJCSAgIGl0ZXJhdG9yIHRvIGl0LiAgKi8KKyAgR1NJX1NBTUVfU1RNVCwJLyogTGVhdmUgdGhlIGl0ZXJhdG9yIGF0IHRoZSBzYW1lIHN0YXRlbWVudC4gICovCisgIEdTSV9DT05USU5VRV9MSU5LSU5HCS8qIE1vdmUgaXRlcmF0b3IgdG8gd2hhdGV2ZXIgcG9zaXRpb24gaXMgc3VpdGFibGUKKwkJCSAgIGZvciBsaW5raW5nIG90aGVyIHN0YXRlbWVudHMgaW4gdGhlIHNhbWUKKwkJCSAgIGRpcmVjdGlvbi4gICovCit9OworCisvKiBJbiBnaW1wbGUtaXRlcmF0b3IuYyAgKi8KK2dpbXBsZV9zdG10X2l0ZXJhdG9yIGdzaV9zdGFydF9waGlzIChiYXNpY19ibG9jayk7CitnaW1wbGVfc2VxIGdzaV9zcGxpdF9zZXFfYWZ0ZXIgKGdpbXBsZV9zdG10X2l0ZXJhdG9yKTsKK2dpbXBsZV9zZXEgZ3NpX3NwbGl0X3NlcV9iZWZvcmUgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICopOwordm9pZCBnc2lfcmVwbGFjZSAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgZ2ltcGxlLCBib29sKTsKK3ZvaWQgZ3NpX2luc2VydF9iZWZvcmUgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICosIGdpbXBsZSwKKwkJCWVudW0gZ3NpX2l0ZXJhdG9yX3VwZGF0ZSk7Cit2b2lkIGdzaV9pbnNlcnRfYmVmb3JlX3dpdGhvdXRfdXBkYXRlIChnaW1wbGVfc3RtdF9pdGVyYXRvciAqLCBnaW1wbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGdzaV9pdGVyYXRvcl91cGRhdGUpOwordm9pZCBnc2lfaW5zZXJ0X3NlcV9iZWZvcmUgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICosIGdpbXBsZV9zZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBnc2lfaXRlcmF0b3JfdXBkYXRlKTsKK3ZvaWQgZ3NpX2luc2VydF9zZXFfYmVmb3JlX3dpdGhvdXRfdXBkYXRlIChnaW1wbGVfc3RtdF9pdGVyYXRvciAqLCBnaW1wbGVfc2VxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gZ3NpX2l0ZXJhdG9yX3VwZGF0ZSk7Cit2b2lkIGdzaV9pbnNlcnRfYWZ0ZXIgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICosIGdpbXBsZSwKKwkJICAgICAgIGVudW0gZ3NpX2l0ZXJhdG9yX3VwZGF0ZSk7Cit2b2lkIGdzaV9pbnNlcnRfYWZ0ZXJfd2l0aG91dF91cGRhdGUgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICosIGdpbXBsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBnc2lfaXRlcmF0b3JfdXBkYXRlKTsKK3ZvaWQgZ3NpX2luc2VydF9zZXFfYWZ0ZXIgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICosIGdpbXBsZV9zZXEsCisJCQkgICBlbnVtIGdzaV9pdGVyYXRvcl91cGRhdGUpOwordm9pZCBnc2lfaW5zZXJ0X3NlcV9hZnRlcl93aXRob3V0X3VwZGF0ZSAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgZ2ltcGxlX3NlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gZ3NpX2l0ZXJhdG9yX3VwZGF0ZSk7Cit2b2lkIGdzaV9yZW1vdmUgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICosIGJvb2wpOworZ2ltcGxlX3N0bXRfaXRlcmF0b3IgZ3NpX2Zvcl9zdG10IChnaW1wbGUpOwordm9pZCBnc2lfbW92ZV9hZnRlciAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKik7Cit2b2lkIGdzaV9tb3ZlX2JlZm9yZSAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKik7Cit2b2lkIGdzaV9tb3ZlX3RvX2JiX2VuZCAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgc3RydWN0IGJhc2ljX2Jsb2NrX2RlZiAqKTsKK3ZvaWQgZ3NpX2luc2VydF9vbl9lZGdlIChlZGdlLCBnaW1wbGUpOwordm9pZCBnc2lfaW5zZXJ0X3NlcV9vbl9lZGdlIChlZGdlLCBnaW1wbGVfc2VxKTsKK2Jhc2ljX2Jsb2NrIGdzaV9pbnNlcnRfb25fZWRnZV9pbW1lZGlhdGUgKGVkZ2UsIGdpbXBsZSk7CitiYXNpY19ibG9jayBnc2lfaW5zZXJ0X3NlcV9vbl9lZGdlX2ltbWVkaWF0ZSAoZWRnZSwgZ2ltcGxlX3NlcSk7Cit2b2lkIGdzaV9jb21taXRfb25lX2VkZ2VfaW5zZXJ0IChlZGdlLCBiYXNpY19ibG9jayAqKTsKK3ZvaWQgZ3NpX2NvbW1pdF9lZGdlX2luc2VydHMgKHZvaWQpOworZ2ltcGxlIGdpbXBsZV9jYWxsX2NvcHlfc2tpcF9hcmdzIChnaW1wbGUsIGJpdG1hcCk7CisKKworLyogQ29udmVuaWVuY2Ugcm91dGluZXMgdG8gd2FsayBhbGwgc3RhdGVtZW50cyBvZiBhIGdpbXBsZSBmdW5jdGlvbi4KKyAgIE5vdGUgdGhhdCB0aGlzIGlzIHVzZWZ1bCBleGNsdXNpdmVseSBiZWZvcmUgdGhlIGNvZGUgaXMgY29udmVydGVkCisgICBpbnRvIFNTQSBmb3JtLiAgT25jZSB0aGUgcHJvZ3JhbSBpcyBpbiBTU0EgZm9ybSwgdGhlIHN0YW5kYXJkCisgICBvcGVyYW5kIGludGVyZmFjZSBzaG91bGQgYmUgdXNlZCB0byBhbmFseXplL21vZGlmeSBzdGF0ZW1lbnRzLiAgKi8KK3N0cnVjdCB3YWxrX3N0bXRfaW5mbworeworICAvKiBQb2ludHMgdG8gdGhlIGN1cnJlbnQgc3RhdGVtZW50IGJlaW5nIHdhbGtlZC4gICovCisgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGdzaTsKKworICAvKiBBZGRpdGlvbmFsIGRhdGEgdGhhdCB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zIG1heSB3YW50IHRvIGNhcnJ5CisgICAgIHRocm91Z2ggdGhlIHJlY3Vyc2lvbi4gICovCisgIHZvaWQgKmluZm87CisKKyAgLyogUG9pbnRlciBtYXAgdXNlZCB0byBtYXJrIHZpc2l0ZWQgdHJlZSBub2RlcyB3aGVuIGNhbGxpbmcKKyAgICAgd2Fsa190cmVlIG9uIGVhY2ggb3BlcmFuZC4gIElmIHNldCB0byBOVUxMLCBkdXBsaWNhdGUgdHJlZSBub2RlcworICAgICB3aWxsIGJlIHZpc2l0ZWQgbW9yZSB0aGFuIG9uY2UuICAqLworICBzdHJ1Y3QgcG9pbnRlcl9zZXRfdCAqcHNldDsKKworICAvKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgb3BlcmFuZCBiZWluZyBleGFtaW5lZCBtYXkgYmUgcmVwbGFjZWQKKyAgICAgd2l0aCBzb21ldGhpbmcgdGhhdCBtYXRjaGVzIGlzX2dpbXBsZV92YWwgKGlmIHRydWUpIG9yIHNvbWV0aGluZworICAgICBzbGlnaHRseSBtb3JlIGNvbXBsaWNhdGVkIChpZiBmYWxzZSkuICAiU29tZXRoaW5nIiB0ZWNobmljYWxseQorICAgICBtZWFucyB0aGUgY29tbW9uIHN1YnNldCBvZiBpc19naW1wbGVfbHZhbHVlIGFuZCBpc19naW1wbGVfcmhzLAorICAgICBidXQgd2UgbmV2ZXIgdHJ5IHRvIGZvcm0gYW55dGhpbmcgbW9yZSBjb21wbGljYXRlZCB0aGFuIHRoYXQsIHNvCisgICAgIHdlIGRvbid0IGJvdGhlciBjaGVja2luZy4KKworICAgICBBbHNvIG5vdGUgdGhhdCBDQUxMQkFDSyBzaG91bGQgdXBkYXRlIHRoaXMgZmxhZyB3aGlsZSB3YWxraW5nIHRoZQorICAgICBzdWItZXhwcmVzc2lvbnMgb2YgYSBzdGF0ZW1lbnQuICBGb3IgaW5zdGFuY2UsIHdoZW4gd2Fsa2luZyB0aGUKKyAgICAgc3RhdGVtZW50ICdmb28gKCZ2YXIpJywgdGhlIGZsYWcgVkFMX09OTFkgd2lsbCBpbml0aWFsbHkgYmUgc2V0CisgICAgIHRvIHRydWUsIGhvd2V2ZXIsIHdoZW4gd2Fsa2luZyAmdmFyLCB0aGUgb3BlcmFuZCBvZiB0aGF0CisgICAgIEFERFJfRVhQUiBkb2VzIG5vdCBuZWVkIHRvIGJlIGEgR0lNUExFIHZhbHVlLiAgKi8KKyAgYm9vbCB2YWxfb25seTsKKworICAvKiBUcnVlIGlmIHdlIGFyZSBjdXJyZW50bHkgd2Fsa2luZyB0aGUgTEhTIG9mIGFuIGFzc2lnbm1lbnQuICAqLworICBib29sIGlzX2xoczsKKworICAvKiBPcHRpb25hbC4gIFNldCB0byB0cnVlIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbnMgaWYgdGhleSBtYWRlIGFueQorICAgICBjaGFuZ2VzLiAgKi8KKyAgYm9vbCBjaGFuZ2VkOworCisgIC8qIFRydWUgaWYgd2UncmUgaW50ZXJlc3RlZCBpbiBsb2NhdGlvbiBpbmZvcm1hdGlvbi4gICovCisgIGJvb2wgd2FudF9sb2NhdGlvbnM7CisKKyAgLyogT3BlcmFuZCByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tzLiAgVGhpcyBpcyBzZXQgd2hlbiBjYWxsaW5nCisgICAgIHdhbGtfZ2ltcGxlX3NlcS4gIElmIHRoZSB3YWxrX3N0bXRfZm4gb3Igd2Fsa190cmVlX2ZuIGNhbGxiYWNrCisgICAgIHJldHVybnMgbm9uLU5VTEwsIHRoaXMgZmllbGQgd2lsbCBjb250YWluIHRoZSB0cmVlIHJldHVybmVkIGJ5CisgICAgIHRoZSBsYXN0IGNhbGxiYWNrLiAgKi8KKyAgdHJlZSBjYWxsYmFja19yZXN1bHQ7Cit9OworCisvKiBDYWxsYmFjayBmb3Igd2Fsa19naW1wbGVfc3RtdC4gIENhbGxlZCBmb3IgZXZlcnkgc3RhdGVtZW50IGZvdW5kCisgICBkdXJpbmcgdHJhdmVyc2FsLiAgVGhlIGZpcnN0IGFyZ3VtZW50IHBvaW50cyB0byB0aGUgc3RhdGVtZW50IHRvCisgICB3YWxrLiAgVGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIGZsYWcgdGhhdCB0aGUgY2FsbGJhY2sgc2V0cyB0bworICAgJ3RydWUnIGlmIGl0IHRoZSBjYWxsYmFjayBoYW5kbGVkIGFsbCB0aGUgb3BlcmFuZHMgYW5kCisgICBzdWItc3RhdGVtZW50cyBvZiB0aGUgc3RhdGVtZW50ICh0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIGZsYWcgaXMKKyAgICdmYWxzZScpLiAgVGhlIHRoaXJkIGFyZ3VtZW50IGlzIGFuIGFub255bW91cyBwb2ludGVyIHRvIGRhdGEKKyAgIHRvIGJlIHVzZWQgYnkgdGhlIGNhbGxiYWNrLiAgKi8KK3R5cGVkZWYgdHJlZSAoKndhbGtfc3RtdF9mbikgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICosIGJvb2wgKiwKKwkJCSAgICAgIHN0cnVjdCB3YWxrX3N0bXRfaW5mbyAqKTsKKworZ2ltcGxlIHdhbGtfZ2ltcGxlX3NlcSAoZ2ltcGxlX3NlcSwgd2Fsa19zdG10X2ZuLCB3YWxrX3RyZWVfZm4sCisJCSAgICAgICAgc3RydWN0IHdhbGtfc3RtdF9pbmZvICopOwordHJlZSB3YWxrX2dpbXBsZV9zdG10IChnaW1wbGVfc3RtdF9pdGVyYXRvciAqLCB3YWxrX3N0bXRfZm4sIHdhbGtfdHJlZV9mbiwKKwkJICAgICAgIHN0cnVjdCB3YWxrX3N0bXRfaW5mbyAqKTsKK3RyZWUgd2Fsa19naW1wbGVfb3AgKGdpbXBsZSwgd2Fsa190cmVlX2ZuLCBzdHJ1Y3Qgd2Fsa19zdG10X2luZm8gKik7CisKKyNpZmRlZiBHQVRIRVJfU1RBVElTVElDUworLyogRW51bSBhbmQgYXJyYXlzIHVzZWQgZm9yIGFsbG9jYXRpb24gc3RhdHMuICBLZWVwIGluIHN5bmMgd2l0aAorICAgZ2ltcGxlLmM6Z2ltcGxlX2FsbG9jX2tpbmRfbmFtZXMuICAqLworZW51bSBnaW1wbGVfYWxsb2Nfa2luZAoreworICBnaW1wbGVfYWxsb2Nfa2luZF9hc3NpZ24sCS8qIEFzc2lnbm1lbnRzLiAgKi8KKyAgZ2ltcGxlX2FsbG9jX2tpbmRfcGhpLAkvKiBQSEkgbm9kZXMuICAqLworICBnaW1wbGVfYWxsb2Nfa2luZF9jb25kLAkvKiBDb25kaXRpb25hbHMuICAqLworICBnaW1wbGVfYWxsb2Nfa2luZF9zZXEsCS8qIFNlcXVlbmNlcy4gICovCisgIGdpbXBsZV9hbGxvY19raW5kX3Jlc3QsCS8qIEV2ZXJ5dGhpbmcgZWxzZS4gICovCisgIGdpbXBsZV9hbGxvY19raW5kX2FsbAorfTsKKworZXh0ZXJuIGludCBnaW1wbGVfYWxsb2NfY291bnRzW107CitleHRlcm4gaW50IGdpbXBsZV9hbGxvY19zaXplc1tdOworCisvKiBSZXR1cm4gdGhlIGFsbG9jYXRpb24ga2luZCBmb3IgYSBnaXZlbiBzdG10IENPREUuICAqLworc3RhdGljIGlubGluZSBlbnVtIGdpbXBsZV9hbGxvY19raW5kCitnaW1wbGVfYWxsb2Nfa2luZCAoZW51bSBnaW1wbGVfY29kZSBjb2RlKQoreworICBzd2l0Y2ggKGNvZGUpCisgICAgeworICAgICAgY2FzZSBHSU1QTEVfQVNTSUdOOgorCXJldHVybiBnaW1wbGVfYWxsb2Nfa2luZF9hc3NpZ247CisgICAgICBjYXNlIEdJTVBMRV9QSEk6CisJcmV0dXJuIGdpbXBsZV9hbGxvY19raW5kX3BoaTsKKyAgICAgIGNhc2UgR0lNUExFX0NPTkQ6CisJcmV0dXJuIGdpbXBsZV9hbGxvY19raW5kX2NvbmQ7CisgICAgICBkZWZhdWx0OgorCXJldHVybiBnaW1wbGVfYWxsb2Nfa2luZF9yZXN0OworICAgIH0KK30KKyNlbmRpZiAvKiBHQVRIRVJfU1RBVElTVElDUyAqLworCitleHRlcm4gdm9pZCBkdW1wX2dpbXBsZV9zdGF0aXN0aWNzICh2b2lkKTsKKworI2VuZGlmICAvKiBHQ0NfR0lNUExFX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9nc3N0cnVjdC5kZWYgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvZ3NzdHJ1Y3QuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZDk1NDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvZ3NzdHJ1Y3QuZGVmCkBAIC0wLDAgKzEsNTAgQEAKKy8qIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBnaW1wbGUgSVIgc3RydWN0dXJlCisgICBlbnVtZXJhdGlvbiB1c2VkIGluIEdDQy4KKworICAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgQWxkeSBIZXJuYW5kZXogPGFsZHloQHJlZGhhdC5jb20+CisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBUaGUgZm9ybWF0IG9mIHRoaXMgZmlsZSBpcworICAgREVGR1NTVFJVQ1QoR1NTIGVudW1lcmF0aW9uIHZhbHVlLCBzdHJ1Y3R1cmUgbmFtZSwgaGFzLXRyZWUtb3BlcmFuZHMpLgorICAgRWFjaCBlbnVtIHZhbHVlIHNob3VsZCBjb3JyZXNwb25kIHdpdGggYSBzaW5nbGUgbWVtYmVyIG9mIHRoZSB1bmlvbgorICAgZ2ltcGxlX3N0YXRlbWVudF9kLiAgKi8KKworREVGR1NTVFJVQ1QoR1NTX0JBU0UsIGdpbXBsZV9zdGF0ZW1lbnRfYmFzZSwgZmFsc2UpCitERUZHU1NUUlVDVChHU1NfV0lUSF9PUFMsIGdpbXBsZV9zdGF0ZW1lbnRfd2l0aF9vcHMsIHRydWUpCitERUZHU1NUUlVDVChHU1NfV0lUSF9NRU1fT1BTX0JBU0UsIGdpbXBsZV9zdGF0ZW1lbnRfd2l0aF9tZW1vcnlfb3BzX2Jhc2UsIGZhbHNlKQorREVGR1NTVFJVQ1QoR1NTX1dJVEhfTUVNX09QUywgZ2ltcGxlX3N0YXRlbWVudF93aXRoX21lbW9yeV9vcHMsIHRydWUpCitERUZHU1NUUlVDVChHU1NfQVNNLCBnaW1wbGVfc3RhdGVtZW50X2FzbSwgdHJ1ZSkKK0RFRkdTU1RSVUNUKEdTU19CSU5ELCBnaW1wbGVfc3RhdGVtZW50X2JpbmQsIGZhbHNlKQorREVGR1NTVFJVQ1QoR1NTX1BISSwgZ2ltcGxlX3N0YXRlbWVudF9waGksIGZhbHNlKQorREVGR1NTVFJVQ1QoR1NTX1RSWSwgZ2ltcGxlX3N0YXRlbWVudF90cnksIGZhbHNlKQorREVGR1NTVFJVQ1QoR1NTX0NBVENILCBnaW1wbGVfc3RhdGVtZW50X2NhdGNoLCBmYWxzZSkKK0RFRkdTU1RSVUNUKEdTU19FSF9GSUxURVIsIGdpbXBsZV9zdGF0ZW1lbnRfZWhfZmlsdGVyLCBmYWxzZSkKK0RFRkdTU1RSVUNUKEdTU19FSF9NTlQsIGdpbXBsZV9zdGF0ZW1lbnRfZWhfbW50LCBmYWxzZSkKK0RFRkdTU1RSVUNUKEdTU19FSF9DVFJMLCBnaW1wbGVfc3RhdGVtZW50X2VoX2N0cmwsIGZhbHNlKQorREVGR1NTVFJVQ1QoR1NTX1dDRSwgZ2ltcGxlX3N0YXRlbWVudF93Y2UsIGZhbHNlKQorREVGR1NTVFJVQ1QoR1NTX09NUCwgZ2ltcGxlX3N0YXRlbWVudF9vbXAsIGZhbHNlKQorREVGR1NTVFJVQ1QoR1NTX09NUF9DUklUSUNBTCwgZ2ltcGxlX3N0YXRlbWVudF9vbXBfY3JpdGljYWwsIGZhbHNlKQorREVGR1NTVFJVQ1QoR1NTX09NUF9GT1IsIGdpbXBsZV9zdGF0ZW1lbnRfb21wX2ZvciwgZmFsc2UpCitERUZHU1NUUlVDVChHU1NfT01QX1BBUkFMTEVMLCBnaW1wbGVfc3RhdGVtZW50X29tcF9wYXJhbGxlbCwgZmFsc2UpCitERUZHU1NUUlVDVChHU1NfT01QX1RBU0ssIGdpbXBsZV9zdGF0ZW1lbnRfb21wX3Rhc2ssIGZhbHNlKQorREVGR1NTVFJVQ1QoR1NTX09NUF9TRUNUSU9OUywgZ2ltcGxlX3N0YXRlbWVudF9vbXBfc2VjdGlvbnMsIGZhbHNlKQorREVGR1NTVFJVQ1QoR1NTX09NUF9TSU5HTEUsIGdpbXBsZV9zdGF0ZW1lbnRfb21wX3NpbmdsZSwgZmFsc2UpCitERUZHU1NUUlVDVChHU1NfT01QX0NPTlRJTlVFLCBnaW1wbGVfc3RhdGVtZW50X29tcF9jb250aW51ZSwgZmFsc2UpCitERUZHU1NUUlVDVChHU1NfT01QX0FUT01JQ19MT0FELCBnaW1wbGVfc3RhdGVtZW50X29tcF9hdG9taWNfbG9hZCwgZmFsc2UpCitERUZHU1NUUlVDVChHU1NfT01QX0FUT01JQ19TVE9SRSwgZ2ltcGxlX3N0YXRlbWVudF9vbXBfYXRvbWljX3N0b3JlLCBmYWxzZSkKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9ndHlwZS1kZXNjLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvZ3R5cGUtZGVzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MWIwN2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvZ3R5cGUtZGVzYy5oCkBAIC0wLDAgKzEsMjEzNiBAQAorLyogVHlwZSBpbmZvcm1hdGlvbiBmb3IgR0NDLgorICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogVGhpcyBmaWxlIGlzIG1hY2hpbmUgZ2VuZXJhdGVkLiAgRG8gbm90IGVkaXQuICAqLworCisvKiBFbnVtZXJhdGlvbiBvZiB0eXBlcyBrbm93bi4gICovCitlbnVtIGd0X3R5cGVzX2VudW0geworIGd0X2dnY19lXzE1aW50ZXJmYWNlX3R1cGxlLCAKKyBndF9nZ2NfZV8xNnZvbGF0aWxpemVkX3R5cGUsIAorIGd0X2dnY19lXzE3c3RyaW5nX2Rlc2NyaXB0b3IsIAorIGd0X2dnY19lXzE1Y19pbmxpbmVfc3RhdGljLCAKKyBndF9nZ2NfZV8yNFZFQ19jX2dvdG9fYmluZGluZ3NfcF9nYywgCisgZ3RfZ2djX2VfMTVjX2dvdG9fYmluZGluZ3MsIAorIGd0X2dnY19lXzdjX3Njb3BlLCAKKyBndF9nZ2NfZV85Y19iaW5kaW5nLCAKKyBndF9nZ2NfZV8xMmNfbGFiZWxfdmFycywgCisgZ3RfZ2djX2VfOGNfcGFyc2VyLCAKKyBndF9nZ2NfZV85aW1wX2VudHJ5LCAKKyBndF9nZ2NfZV8xNmhhc2hlZF9hdHRyaWJ1dGUsIAorIGd0X2dnY19lXzEyaGFzaGVkX2VudHJ5LCAKKyBndF9nZ2NfZV8xNHR5cGVfYXNzZXJ0aW9uLCAKKyBndF9nZ2NfZV8xOHRyZWV0cmVlaGFzaF9lbnRyeSwgCisgZ3RfZ2djX2VfNUNQb29sLCAKKyBndF9nZ2NfZV8zSkNGLCAKKyBndF9nZ2NfZV8xN21vZHVsZV9odGFiX2VudHJ5LCAKKyBndF9nZ2NfZV8xM2JpbmRpbmdfbGV2ZWwsIAorIGd0X2dnY19lXzlvcHRfc3RhY2ssIAorIGd0X2dnY19lXzExYWxpZ25fc3RhY2ssIAorIGd0X2dnY19lXzE4VkVDX3RyZWVfZ2NfdmVjX2djLCAKKyBndF9nZ2NfZV8xOVZFQ19jb25zdF9jaGFyX3BfZ2MsIAorIGd0X2dnY19lXzIxcGVuZGluZ19hYnN0cmFjdF90eXBlLCAKKyBndF9nZ2NfZV8xNVZFQ190cmVlX2ludF9nYywgCisgZ3RfZ2djX2VfOWNwX3BhcnNlciwgCisgZ3RfZ2djX2VfMTdjcF9wYXJzZXJfY29udGV4dCwgCisgZ3RfZ2djX2VfOGNwX2xleGVyLCAKKyBndF9nZ2NfZV8xMHRyZWVfY2hlY2ssIAorIGd0X2dnY19lXzIyVkVDX2RlZmVycmVkX2FjY2Vzc19nYywgCisgZ3RfZ2djX2VfMTBzcGVjX2VudHJ5LCAKKyBndF9nZ2NfZV8xNnBlbmRpbmdfdGVtcGxhdGUsIAorIGd0X2dnY19lXzIxbmFtZWRfbGFiZWxfdXNlX2VudHJ5LCAKKyBndF9nZ2NfZV8yOFZFQ19kZWZlcnJlZF9hY2Nlc3NfY2hlY2tfZ2MsIAorIGd0X2dnY19lXzE4c29ydGVkX2ZpZWxkc190eXBlLCAKKyBndF9nZ2NfZV8xOFZFQ190cmVlX3BhaXJfc19nYywgCisgZ3RfZ2djX2VfMTduYW1lZF9sYWJlbF9lbnRyeSwgCisgZ3RfZ2djX2VfMzJWRUNfcXVhbGlmaWVkX3R5cGVkZWZfdXNhZ2VfdF9nYywgCisgZ3RfZ2djX2VfMTRjcF90b2tlbl9jYWNoZSwgCisgZ3RfZ2djX2VfMTFzYXZlZF9zY29wZSwgCisgZ3RfZ2djX2VfMTZjeHhfaW50X3RyZWVfbWFwLCAKKyBndF9nZ2NfZV8yM1ZFQ19jcF9jbGFzc19iaW5kaW5nX2djLCAKKyBndF9nZ2NfZV8yNFZFQ19jeHhfc2F2ZWRfYmluZGluZ19nYywgCisgZ3RfZ2djX2VfMTZjcF9iaW5kaW5nX2xldmVsLCAKKyBndF9nZ2NfZV8xMWN4eF9iaW5kaW5nLCAKKyBndF9nZ2NfZV8xNWJpbmRpbmdfZW50cnlfcywgCisgZ3RfZ2djX2VfMTViaW5kaW5nX3RhYmxlX3MsIAorIGd0X2dnY19lXzExdGluc3RfbGV2ZWwsIAorIGd0X2dnY19lXzE0VkVDX3RpbmZvX3NfZ2MsIAorIGd0X2dnY19lXzE4Z25hdF9iaW5kaW5nX2xldmVsLCAKKyBndF9nZ2NfZV85ZWxhYl9pbmZvLCAKKyBndF9nZ2NfZV8xMHN0bXRfZ3JvdXAsIAorIGd0X2dnY19lXzE2VkVDX3Bhcm1fYXR0cl9nYywgCisgZ3RfZ2djX2VfMTFwYXJtX2F0dHJfZCwgCisgZ3RfZ2djX2VfMjJWRUNfaXBhX2VkZ2VfYXJnc190X2djLCAKKyBndF9nZ2NfZV8yMGx0b19zeW10YWJfZW50cnlfZGVmLCAKKyBndF9nZ2NfZV8yMHNzYV9vcGVyYW5kX21lbW9yeV9kLCAKKyBndF9nZ2NfZV8xM3NjZXZfaW5mb19zdHIsIAorIGd0X2dnY19lXzI0VkVDX21lbV9hZGRyX3RlbXBsYXRlX2djLCAKKyBndF9nZ2NfZV8xM1ZFQ19naW1wbGVfZ2MsIAorIGd0X2dnY19lXzl0eXBlX2hhc2gsIAorIGd0X2dnY19lXzE2c3RyaW5nX3Bvb2xfZGF0YSwgCisgZ3RfZ2djX2VfMTNsaWJmdW5jX2VudHJ5LCAKKyBndF9nZ2NfZV8yM3RlbXBfc2xvdF9hZGRyZXNzX2VudHJ5LCAKKyBndF9nZ2NfZV8xNXRocm93X3N0bXRfbm9kZSwgCisgZ3RfZ2djX2VfMjFWRUNfZWhfbGFuZGluZ19wYWRfZ2MsIAorIGd0X2dnY19lXzE2VkVDX2VoX3JlZ2lvbl9nYywgCisgZ3RfZ2djX2VfMTBlaF9jYXRjaF9kLCAKKyBndF9nZ2NfZV8xNmVoX2xhbmRpbmdfcGFkX2QsIAorIGd0X2dnY19lXzExZWhfcmVnaW9uX2QsIAorIGd0X2dnY19lXzEwdmNhbGxfaW5zbiwgCisgZ3RfZ2djX2VfMThWRUNfdmNhbGxfZW50cnlfZ2MsIAorIGd0X2dnY19lXzE4VkVDX2RjYWxsX2VudHJ5X2djLCAKKyBndF9nZ2NfZV8xNnZhcl9sb2NfbGlzdF9kZWYsIAorIGd0X2dnY19lXzEydmFyX2xvY19ub2RlLCAKKyBndF9nZ2NfZV8yMFZFQ19kaWVfYXJnX2VudHJ5X2djLCAKKyBndF9nZ2NfZV8xNmxpbWJvX2RpZV9zdHJ1Y3QsIAorIGd0X2dnY19lXzIwVkVDX3B1Ym5hbWVfZW50cnlfZ2MsIAorIGd0X2dnY19lXzE5VkVDX2R3X2F0dHJfbm9kZV9nYywgCisgZ3RfZ2djX2VfMThjb21kYXRfdHlwZV9zdHJ1Y3QsIAorIGd0X2dnY19lXzI1ZHdfcmFuZ2VzX2J5X2xhYmVsX3N0cnVjdCwgCisgZ3RfZ2djX2VfMTZkd19yYW5nZXNfc3RydWN0LCAKKyBndF9nZ2NfZV8yOGR3X3NlcGFyYXRlX2xpbmVfaW5mb19zdHJ1Y3QsIAorIGd0X2dnY19lXzE5ZHdfbGluZV9pbmZvX3N0cnVjdCwgCisgZ3RfZ2djX2VfMjVWRUNfZGVmZXJyZWRfbG9jYXRpb25zX2djLCAKKyBndF9nZ2NfZV8xOGR3X2xvY19saXN0X3N0cnVjdCwgCisgZ3RfZ2djX2VfMTVkd2FyZl9maWxlX2RhdGEsIAorIGd0X2dnY19lXzE1cXVldWVkX3JlZ19zYXZlLCAKKyBndF9nZ2NfZV8yMGluZGlyZWN0X3N0cmluZ19ub2RlLCAKKyBndF9nZ2NfZV8xOWR3X2xvY19kZXNjcl9zdHJ1Y3QsIAorIGd0X2dnY19lXzEzZHdfZmRlX3N0cnVjdCwgCisgZ3RfZ2djX2VfMTNkd19jZmlfc3RydWN0LCAKKyBndF9nZ2NfZV84dHlwZWluZm8sIAorIGd0X2dnY19lXzIyVkVDX2FsaWFzX3NldF9lbnRyeV9nYywgCisgZ3RfZ2djX2VfMTdhbGlhc19zZXRfZW50cnlfZCwgCisgZ3RfZ2djX2VfMjRjb25zdGFudF9kZXNjcmlwdG9yX3RyZWUsIAorIGd0X2dnY19lXzE1Y2dyYXBoX2FzbV9ub2RlLCAKKyBndF9nZ2NfZV8xMnZhcnBvb2xfbm9kZSwgCisgZ3RfZ2djX2VfMjJWRUNfY2dyYXBoX25vZGVfc2V0X2djLCAKKyBndF9nZ2NfZV8xOWNncmFwaF9ub2RlX3NldF9kZWYsIAorIGd0X2dnY19lXzI3Y2dyYXBoX25vZGVfc2V0X2VsZW1lbnRfZGVmLCAKKyBndF9nZ2NfZV8yMlZFQ19jZ3JhcGhfbm9kZV9wdHJfZ2MsIAorIGd0X2dnY19lXzExY2dyYXBoX2VkZ2UsIAorIGd0X2dnY19lXzI0VkVDX2lwYV9yZXBsYWNlX21hcF9wX2djLCAKKyBndF9nZ2NfZV8xNWlwYV9yZXBsYWNlX21hcCwgCisgZ3RfZ2djX2VfMTFjZ3JhcGhfbm9kZSwgCisgZ3RfZ2djX2VfMThWRUNfYmFzaWNfYmxvY2tfZ2MsIAorIGd0X2dnY19lXzE0Z2ltcGxlX2JiX2luZm8sIAorIGd0X2dnY19lXzExcnRsX2JiX2luZm8sIAorIGd0X2dnY19lXzExVkVDX2VkZ2VfZ2MsIAorIGd0X2dnY19lXzE3Y3NlbGliX3ZhbF9zdHJ1Y3QsIAorIGd0X2dnY19lXzEyZWx0X2xvY19saXN0LCAKKyBndF9nZ2NfZV8xM1ZFQ19sb29wX3BfZ2MsIAorIGd0X2dnY19lXzRsb29wLCAKKyBndF9nZ2NfZV85bG9vcF9leGl0LCAKKyBndF9nZ2NfZV8xM25iX2l0ZXJfYm91bmQsIAorIGd0X2dnY19lXzI0dHlwZXNfdXNlZF9ieV92YXJzX2VudHJ5LCAKKyBndF9nZ2NfZV8xN2xhbmd1YWdlX2Z1bmN0aW9uLCAKKyBndF9nZ2NfZV81bG9vcHMsIAorIGd0X2dnY19lXzE4Y29udHJvbF9mbG93X2dyYXBoLCAKKyBndF9nZ2NfZV85ZWhfc3RhdHVzLCAKKyBndF9nZ2NfZV8yMGluaXRpYWxfdmFsdWVfc3RydWN0LCAKKyBndF9nZ2NfZV8xN3J0eF9jb25zdGFudF9wb29sLCAKKyBndF9nZ2NfZV8xOFZFQ190ZW1wX3Nsb3RfcF9nYywgCisgZ3RfZ2djX2VfOXRlbXBfc2xvdCwgCisgZ3RfZ2djX2VfOWdpbXBsZV9kZiwgCisgZ3RfZ2djX2VfMjNWRUNfY2FsbF9zaXRlX3JlY29yZF9nYywgCisgZ3RfZ2djX2VfMThjYWxsX3NpdGVfcmVjb3JkX2QsIAorIGd0X2dnY19lXzE0c2VxdWVuY2Vfc3RhY2ssIAorIGd0X2dnY19lXzhlbHRfbGlzdCwgCisgZ3RfZ2djX2VfMTd0cmVlX3ByaW9yaXR5X21hcCwgCisgZ3RfZ2djX2VfMTJ0cmVlX2ludF9tYXAsIAorIGd0X2dnY19lXzh0cmVlX21hcCwgCisgZ3RfZ2djX2VfMTRsYW5nX3RyZWVfbm9kZSwgCisgZ3RfZ2djX2VfMjR0cmVlX3N0YXRlbWVudF9saXN0X25vZGUsIAorIGd0X2dnY19lXzl2YXJfYW5uX2QsIAorIGd0X2dnY19lXzlsYW5nX2RlY2wsIAorIGd0X2dnY19lXzlsYW5nX3R5cGUsIAorIGd0X2dnY19lXzEwZGllX3N0cnVjdCwgCisgZ3RfZ2djX2VfMTV2YXJyYXlfaGVhZF90YWcsIAorIGd0X2dnY19lXzEycHRyX2luZm9fZGVmLCAKKyBndF9nZ2NfZV8yMlZFQ19jb25zdHJ1Y3Rvcl9lbHRfZ2MsIAorIGd0X2dnY19lXzE3VkVDX2FsaWFzX3BhaXJfZ2MsIAorIGd0X2dnY19lXzExVkVDX3RyZWVfZ2MsIAorIGd0X2dnY19lXzEyVkVDX3VjaGFyX2djLCAKKyBndF9nZ2NfZV84ZnVuY3Rpb24sIAorIGd0X2dnY19lXzIzY29uc3RhbnRfZGVzY3JpcHRvcl9ydHgsIAorIGd0X2dnY19lXzExZml4ZWRfdmFsdWUsIAorIGd0X2dnY19lXzEwcmVhbF92YWx1ZSwgCisgZ3RfZ2djX2VfMTBWRUNfcnR4X2djLCAKKyBndF9nZ2NfZV8xMm9iamVjdF9ibG9jaywgCisgZ3RfZ2djX2VfOXJlZ19hdHRycywgCisgZ3RfZ2djX2VfOW1lbV9hdHRycywgCisgZ3RfZ2djX2VfMTRiaXRtYXBfb2JzdGFjaywgCisgZ3RfZ2djX2VfMThiaXRtYXBfZWxlbWVudF9kZWYsIAorIGd0X2dnY19lXzE2bWFjaGluZV9mdW5jdGlvbiwgCisgZ3RfZ2djX2VfMTViYXNpY19ibG9ja19kZWYsIAorIGd0X2dnY19lXzhlZGdlX2RlZiwgCisgZ3RfZ2djX2VfMTdnaW1wbGVfc2VxX25vZGVfZCwgCisgZ3RfZ2djX2VfMTJnaW1wbGVfc2VxX2QsIAorIGd0X2dnY19lXzdzZWN0aW9uLCAKKyBndF9nZ2NfZV8xOGdpbXBsZV9zdGF0ZW1lbnRfZCwgCisgZ3RfZ2djX2VfOXJ0dmVjX2RlZiwgCisgZ3RfZ2djX2VfN3J0eF9kZWYsIAorIGd0X2dnY19lXzE1Yml0bWFwX2hlYWRfZGVmLCAKKyBndF9nZ2NfZV85dHJlZV9ub2RlLCAKKyBndF9nZ2NfZV82YW5zd2VyLCAKKyBndF9nZ2NfZV85Y3BwX21hY3JvLCAKKyBndF9nZ2NfZV85Y3BwX3Rva2VuLCAKKyBndF9nZ2NfZV85bGluZV9tYXBzLCAKKyBndF9lX0lJMTdzcGxheV90cmVlX25vZGVfcywgCisgZ3RfZV9TUDl0cmVlX25vZGUxN3NwbGF5X3RyZWVfbm9kZV9zLCAKKyBndF9lX1A5dHJlZV9ub2RlUDl0cmVlX25vZGUxN3NwbGF5X3RyZWVfbm9kZV9zLCAKKyBndF9lX0lQOXRyZWVfbm9kZTE3c3BsYXlfdHJlZV9ub2RlX3MsIAorIGd0X2VfUDE1aW50ZXJmYWNlX3R1cGxlNGh0YWIsIAorIGd0X2VfUDE2dm9sYXRpbGl6ZWRfdHlwZTRodGFiLCAKKyBndF9lX1AxN3N0cmluZ19kZXNjcmlwdG9yNGh0YWIsIAorIGd0X2VfUDE0dHlwZV9hc3NlcnRpb240aHRhYiwgCisgZ3RfZV9QMTh0cmVldHJlZWhhc2hfZW50cnk0aHRhYiwgCisgZ3RfZV9QMTdtb2R1bGVfaHRhYl9lbnRyeTRodGFiLCAKKyBndF9lX1AyMXBlbmRpbmdfYWJzdHJhY3RfdHlwZTRodGFiLCAKKyBndF9lX1AxMHNwZWNfZW50cnk0aHRhYiwgCisgZ3RfZV9QMTZjeHhfaW50X3RyZWVfbWFwNGh0YWIsIAorIGd0X2VfUDE3bmFtZWRfbGFiZWxfZW50cnk0aHRhYiwgCisgZ3RfZV9QMTJ0cmVlX2ludF9tYXA0aHRhYiwgCisgZ3RfZV9QMjBsdG9fc3ltdGFiX2VudHJ5X2RlZjRodGFiLCAKKyBndF9lX0lQOXRyZWVfbm9kZTEyc3BsYXlfdHJlZV9zLCAKKyBndF9lX1A5dHJlZV9ub2RlUDl0cmVlX25vZGUxMnNwbGF5X3RyZWVfcywgCisgZ3RfZV9QMTJ2YXJwb29sX25vZGU0aHRhYiwgCisgZ3RfZV9QMTNzY2V2X2luZm9fc3RyNGh0YWIsIAorIGd0X2VfUDIzY29uc3RhbnRfZGVzY3JpcHRvcl9ydHg0aHRhYiwgCisgZ3RfZV9QMjRjb25zdGFudF9kZXNjcmlwdG9yX3RyZWU0aHRhYiwgCisgZ3RfZV9QMTJvYmplY3RfYmxvY2s0aHRhYiwgCisgZ3RfZV9QN3NlY3Rpb240aHRhYiwgCisgZ3RfZV9QMTd0cmVlX3ByaW9yaXR5X21hcDRodGFiLCAKKyBndF9lX1A4dHJlZV9tYXA0aHRhYiwgCisgZ3RfZV9QOXR5cGVfaGFzaDRodGFiLCAKKyBndF9lX1AxM2xpYmZ1bmNfZW50cnk0aHRhYiwgCisgZ3RfZV9QMjN0ZW1wX3Nsb3RfYWRkcmVzc19lbnRyeTRodGFiLCAKKyBndF9lX1AxNXRocm93X3N0bXRfbm9kZTRodGFiLCAKKyBndF9lX1A5cmVnX2F0dHJzNGh0YWIsIAorIGd0X2VfUDltZW1fYXR0cnM0aHRhYiwgCisgZ3RfZV9QN3J0eF9kZWY0aHRhYiwgCisgZ3RfZV9TUDl0cmVlX25vZGUxMnNwbGF5X3RyZWVfcywgCisgZ3RfZV9QMTB2Y2FsbF9pbnNuNGh0YWIsIAorIGd0X2VfUDE2dmFyX2xvY19saXN0X2RlZjRodGFiLCAKKyBndF9lX1AxMGRpZV9zdHJ1Y3Q0aHRhYiwgCisgZ3RfZV9QMTVkd2FyZl9maWxlX2RhdGE0aHRhYiwgCisgZ3RfZV9QMjBpbmRpcmVjdF9zdHJpbmdfbm9kZTRodGFiLCAKKyBndF9lX1AxMWNncmFwaF9ub2RlNGh0YWIsIAorIGd0X2VfSUkxMnNwbGF5X3RyZWVfcywgCisgZ3RfZV9QMjdjZ3JhcGhfbm9kZV9zZXRfZWxlbWVudF9kZWY0aHRhYiwgCisgZ3RfZV9QMTFjZ3JhcGhfZWRnZTRodGFiLCAKKyBndF9lX1A5bG9vcF9leGl0NGh0YWIsIAorIGd0X2VfUDI0dHlwZXNfdXNlZF9ieV92YXJzX2VudHJ5NGh0YWIsIAorIGd0X2VfUDl0cmVlX25vZGU0aHRhYiwgCisgZ3RfdHlwZXNfZW51bV9sYXN0Cit9OworCisvKiBHQyBtYXJrZXIgcHJvY2VkdXJlcy4gICovCisvKiBtYWNyb3MgYW5kIGRlY2xhcmF0aW9ucyAqLworI2RlZmluZSBndF9nZ2NfbV8xNWludGVyZmFjZV90dXBsZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2ludGVyZmFjZV90dXBsZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2ludGVyZmFjZV90dXBsZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTZ2b2xhdGlsaXplZF90eXBlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdm9sYXRpbGl6ZWRfdHlwZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3ZvbGF0aWxpemVkX3R5cGUgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE3c3RyaW5nX2Rlc2NyaXB0b3IoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9zdHJpbmdfZGVzY3JpcHRvciAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3N0cmluZ19kZXNjcmlwdG9yICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xNWNfaW5saW5lX3N0YXRpYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2NfaW5saW5lX3N0YXRpYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2NfaW5saW5lX3N0YXRpYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjRWRUNfY19nb3RvX2JpbmRpbmdzX3BfZ2MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9WRUNfY19nb3RvX2JpbmRpbmdzX3BfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9WRUNfY19nb3RvX2JpbmRpbmdzX3BfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE1Y19nb3RvX2JpbmRpbmdzKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfY19nb3RvX2JpbmRpbmdzIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfY19nb3RvX2JpbmRpbmdzICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV83Y19zY29wZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2Nfc2NvcGUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9jX3Njb3BlICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV85Y19iaW5kaW5nKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfY19iaW5kaW5nIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfY19iaW5kaW5nICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xMmNfbGFiZWxfdmFycyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2NfbGFiZWxfdmFycyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2NfbGFiZWxfdmFycyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fOGNfcGFyc2VyKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfY19wYXJzZXIgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9jX3BhcnNlciAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fOWltcF9lbnRyeShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2ltcF9lbnRyeSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2ltcF9lbnRyeSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTZoYXNoZWRfYXR0cmlidXRlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfaGFzaGVkX2F0dHJpYnV0ZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2hhc2hlZF9hdHRyaWJ1dGUgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzEyaGFzaGVkX2VudHJ5KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfaGFzaGVkX2VudHJ5IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfaGFzaGVkX2VudHJ5ICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xNHR5cGVfYXNzZXJ0aW9uKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdHlwZV9hc3NlcnRpb24gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF90eXBlX2Fzc2VydGlvbiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTh0cmVldHJlZWhhc2hfZW50cnkoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF90cmVldHJlZWhhc2hfZW50cnkgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF90cmVldHJlZWhhc2hfZW50cnkgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzVDUG9vbChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X0NQb29sIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfQ1Bvb2wgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzNKQ0YoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9KQ0YgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9KQ0YgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE3bW9kdWxlX2h0YWJfZW50cnkoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9tb2R1bGVfaHRhYl9lbnRyeSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X21vZHVsZV9odGFiX2VudHJ5ICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xM2JpbmRpbmdfbGV2ZWwoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9iaW5kaW5nX2xldmVsIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfYmluZGluZ19sZXZlbCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fOW9wdF9zdGFjayhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X29wdF9zdGFjayAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X29wdF9zdGFjayAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTFhbGlnbl9zdGFjayhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2FsaWduX3N0YWNrIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfYWxpZ25fc3RhY2sgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE4VkVDX3RyZWVfZ2NfdmVjX2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfVkVDX3RyZWVfZ2NfdmVjX2djIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfVkVDX3RyZWVfZ2NfdmVjX2djICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xOVZFQ19jb25zdF9jaGFyX3BfZ2MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9WRUNfY29uc3RfY2hhcl9wX2djIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfVkVDX2NvbnN0X2NoYXJfcF9nYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjFwZW5kaW5nX2Fic3RyYWN0X3R5cGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9wZW5kaW5nX2Fic3RyYWN0X3R5cGUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9wZW5kaW5nX2Fic3RyYWN0X3R5cGUgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE1VkVDX3RyZWVfaW50X2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfVkVDX3RyZWVfaW50X2djIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfVkVDX3RyZWVfaW50X2djICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV85Y3BfcGFyc2VyKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfY3BfcGFyc2VyIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfY3BfcGFyc2VyICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xN2NwX3BhcnNlcl9jb250ZXh0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfY3BfcGFyc2VyX2NvbnRleHQgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9jcF9wYXJzZXJfY29udGV4dCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fOGNwX2xleGVyKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfY3BfbGV4ZXIgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9jcF9sZXhlciAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTB0cmVlX2NoZWNrKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdHJlZV9jaGVjayAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3RyZWVfY2hlY2sgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzIyVkVDX2RlZmVycmVkX2FjY2Vzc19nYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X1ZFQ19kZWZlcnJlZF9hY2Nlc3NfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9WRUNfZGVmZXJyZWRfYWNjZXNzX2djICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xMHNwZWNfZW50cnkoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9zcGVjX2VudHJ5IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfc3BlY19lbnRyeSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTZwZW5kaW5nX3RlbXBsYXRlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfcGVuZGluZ190ZW1wbGF0ZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3BlbmRpbmdfdGVtcGxhdGUgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzIxbmFtZWRfbGFiZWxfdXNlX2VudHJ5KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfbmFtZWRfbGFiZWxfdXNlX2VudHJ5IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfbmFtZWRfbGFiZWxfdXNlX2VudHJ5ICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yOFZFQ19kZWZlcnJlZF9hY2Nlc3NfY2hlY2tfZ2MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9WRUNfZGVmZXJyZWRfYWNjZXNzX2NoZWNrX2djIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfVkVDX2RlZmVycmVkX2FjY2Vzc19jaGVja19nYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMThzb3J0ZWRfZmllbGRzX3R5cGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9zb3J0ZWRfZmllbGRzX3R5cGUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9zb3J0ZWRfZmllbGRzX3R5cGUgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE4VkVDX3RyZWVfcGFpcl9zX2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfVkVDX3RyZWVfcGFpcl9zX2djIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfVkVDX3RyZWVfcGFpcl9zX2djICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xN25hbWVkX2xhYmVsX2VudHJ5KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfbmFtZWRfbGFiZWxfZW50cnkgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9uYW1lZF9sYWJlbF9lbnRyeSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMzJWRUNfcXVhbGlmaWVkX3R5cGVkZWZfdXNhZ2VfdF9nYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X1ZFQ19xdWFsaWZpZWRfdHlwZWRlZl91c2FnZV90X2djIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfVkVDX3F1YWxpZmllZF90eXBlZGVmX3VzYWdlX3RfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE0Y3BfdG9rZW5fY2FjaGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9jcF90b2tlbl9jYWNoZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2NwX3Rva2VuX2NhY2hlICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xMXNhdmVkX3Njb3BlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfc2F2ZWRfc2NvcGUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9zYXZlZF9zY29wZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTZjeHhfaW50X3RyZWVfbWFwKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfY3h4X2ludF90cmVlX21hcCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2N4eF9pbnRfdHJlZV9tYXAgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzIzVkVDX2NwX2NsYXNzX2JpbmRpbmdfZ2MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9WRUNfY3BfY2xhc3NfYmluZGluZ19nYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X1ZFQ19jcF9jbGFzc19iaW5kaW5nX2djICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yNFZFQ19jeHhfc2F2ZWRfYmluZGluZ19nYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X1ZFQ19jeHhfc2F2ZWRfYmluZGluZ19nYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X1ZFQ19jeHhfc2F2ZWRfYmluZGluZ19nYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTZjcF9iaW5kaW5nX2xldmVsKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfY3BfYmluZGluZ19sZXZlbCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2NwX2JpbmRpbmdfbGV2ZWwgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzExY3h4X2JpbmRpbmcoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9jeHhfYmluZGluZyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2N4eF9iaW5kaW5nICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xNWJpbmRpbmdfZW50cnlfcyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2JpbmRpbmdfZW50cnlfcyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2JpbmRpbmdfZW50cnlfcyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTViaW5kaW5nX3RhYmxlX3MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9iaW5kaW5nX3RhYmxlX3MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9iaW5kaW5nX3RhYmxlX3MgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzExdGluc3RfbGV2ZWwoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF90aW5zdF9sZXZlbCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3RpbnN0X2xldmVsICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xNFZFQ190aW5mb19zX2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfVkVDX3RpbmZvX3NfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9WRUNfdGluZm9fc19nYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMThnbmF0X2JpbmRpbmdfbGV2ZWwoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9nbmF0X2JpbmRpbmdfbGV2ZWwgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9nbmF0X2JpbmRpbmdfbGV2ZWwgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzllbGFiX2luZm8oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9lbGFiX2luZm8gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9lbGFiX2luZm8gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzEwc3RtdF9ncm91cChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3N0bXRfZ3JvdXAgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9zdG10X2dyb3VwICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xNlZFQ19wYXJtX2F0dHJfZ2MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9WRUNfcGFybV9hdHRyX2djIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfVkVDX3Bhcm1fYXR0cl9nYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTFwYXJtX2F0dHJfZChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3Bhcm1fYXR0cl9kIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfcGFybV9hdHRyX2QgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzIyVkVDX2lwYV9lZGdlX2FyZ3NfdF9nYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X1ZFQ19pcGFfZWRnZV9hcmdzX3RfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9WRUNfaXBhX2VkZ2VfYXJnc190X2djICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yMGx0b19zeW10YWJfZW50cnlfZGVmKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfbHRvX3N5bXRhYl9lbnRyeV9kZWYgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9sdG9fc3ltdGFiX2VudHJ5X2RlZiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjBzc2Ffb3BlcmFuZF9tZW1vcnlfZChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3NzYV9vcGVyYW5kX21lbW9yeV9kIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfc3NhX29wZXJhbmRfbWVtb3J5X2QgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzEzc2Nldl9pbmZvX3N0cihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3NjZXZfaW5mb19zdHIgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9zY2V2X2luZm9fc3RyICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yNFZFQ19tZW1fYWRkcl90ZW1wbGF0ZV9nYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X1ZFQ19tZW1fYWRkcl90ZW1wbGF0ZV9nYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X1ZFQ19tZW1fYWRkcl90ZW1wbGF0ZV9nYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTNWRUNfZ2ltcGxlX2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfVkVDX2dpbXBsZV9nYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X1ZFQ19naW1wbGVfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzl0eXBlX2hhc2goWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF90eXBlX2hhc2ggKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF90eXBlX2hhc2ggKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE2c3RyaW5nX3Bvb2xfZGF0YShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3N0cmluZ19wb29sX2RhdGEgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9zdHJpbmdfcG9vbF9kYXRhICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xM2xpYmZ1bmNfZW50cnkoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9saWJmdW5jX2VudHJ5IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfbGliZnVuY19lbnRyeSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjN0ZW1wX3Nsb3RfYWRkcmVzc19lbnRyeShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3RlbXBfc2xvdF9hZGRyZXNzX2VudHJ5IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdGVtcF9zbG90X2FkZHJlc3NfZW50cnkgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE1dGhyb3dfc3RtdF9ub2RlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdGhyb3dfc3RtdF9ub2RlIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdGhyb3dfc3RtdF9ub2RlICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yMVZFQ19laF9sYW5kaW5nX3BhZF9nYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X1ZFQ19laF9sYW5kaW5nX3BhZF9nYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X1ZFQ19laF9sYW5kaW5nX3BhZF9nYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTZWRUNfZWhfcmVnaW9uX2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfVkVDX2VoX3JlZ2lvbl9nYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X1ZFQ19laF9yZWdpb25fZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzEwZWhfY2F0Y2hfZChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2VoX2NhdGNoX2QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9laF9jYXRjaF9kICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xNmVoX2xhbmRpbmdfcGFkX2QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9laF9sYW5kaW5nX3BhZF9kIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfZWhfbGFuZGluZ19wYWRfZCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTFlaF9yZWdpb25fZChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2VoX3JlZ2lvbl9kIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfZWhfcmVnaW9uX2QgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzEwdmNhbGxfaW5zbihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZjYWxsX2luc24gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92Y2FsbF9pbnNuICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xOFZFQ192Y2FsbF9lbnRyeV9nYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X1ZFQ192Y2FsbF9lbnRyeV9nYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X1ZFQ192Y2FsbF9lbnRyeV9nYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMThWRUNfZGNhbGxfZW50cnlfZ2MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9WRUNfZGNhbGxfZW50cnlfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9WRUNfZGNhbGxfZW50cnlfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE2dmFyX2xvY19saXN0X2RlZihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3Zhcl9sb2NfbGlzdF9kZWYgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92YXJfbG9jX2xpc3RfZGVmICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xMnZhcl9sb2Nfbm9kZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3Zhcl9sb2Nfbm9kZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3Zhcl9sb2Nfbm9kZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjBWRUNfZGllX2FyZ19lbnRyeV9nYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X1ZFQ19kaWVfYXJnX2VudHJ5X2djIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfVkVDX2RpZV9hcmdfZW50cnlfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE2bGltYm9fZGllX3N0cnVjdChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2xpbWJvX2RpZV9zdHJ1Y3QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9saW1ib19kaWVfc3RydWN0ICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yMFZFQ19wdWJuYW1lX2VudHJ5X2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfVkVDX3B1Ym5hbWVfZW50cnlfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9WRUNfcHVibmFtZV9lbnRyeV9nYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTlWRUNfZHdfYXR0cl9ub2RlX2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfVkVDX2R3X2F0dHJfbm9kZV9nYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X1ZFQ19kd19hdHRyX25vZGVfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE4Y29tZGF0X3R5cGVfc3RydWN0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfY29tZGF0X3R5cGVfc3RydWN0IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfY29tZGF0X3R5cGVfc3RydWN0ICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yNWR3X3Jhbmdlc19ieV9sYWJlbF9zdHJ1Y3QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9kd19yYW5nZXNfYnlfbGFiZWxfc3RydWN0IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfZHdfcmFuZ2VzX2J5X2xhYmVsX3N0cnVjdCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTZkd19yYW5nZXNfc3RydWN0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfZHdfcmFuZ2VzX3N0cnVjdCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2R3X3Jhbmdlc19zdHJ1Y3QgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzI4ZHdfc2VwYXJhdGVfbGluZV9pbmZvX3N0cnVjdChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2R3X3NlcGFyYXRlX2xpbmVfaW5mb19zdHJ1Y3QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9kd19zZXBhcmF0ZV9saW5lX2luZm9fc3RydWN0ICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xOWR3X2xpbmVfaW5mb19zdHJ1Y3QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9kd19saW5lX2luZm9fc3RydWN0IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfZHdfbGluZV9pbmZvX3N0cnVjdCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjVWRUNfZGVmZXJyZWRfbG9jYXRpb25zX2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfVkVDX2RlZmVycmVkX2xvY2F0aW9uc19nYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X1ZFQ19kZWZlcnJlZF9sb2NhdGlvbnNfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE4ZHdfbG9jX2xpc3Rfc3RydWN0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfZHdfbG9jX2xpc3Rfc3RydWN0IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfZHdfbG9jX2xpc3Rfc3RydWN0ICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xNWR3YXJmX2ZpbGVfZGF0YShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2R3YXJmX2ZpbGVfZGF0YSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2R3YXJmX2ZpbGVfZGF0YSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTVxdWV1ZWRfcmVnX3NhdmUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9xdWV1ZWRfcmVnX3NhdmUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9xdWV1ZWRfcmVnX3NhdmUgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzIwaW5kaXJlY3Rfc3RyaW5nX25vZGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9pbmRpcmVjdF9zdHJpbmdfbm9kZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2luZGlyZWN0X3N0cmluZ19ub2RlICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xOWR3X2xvY19kZXNjcl9zdHJ1Y3QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9kd19sb2NfZGVzY3Jfc3RydWN0IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfZHdfbG9jX2Rlc2NyX3N0cnVjdCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTNkd19mZGVfc3RydWN0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfZHdfZmRlX3N0cnVjdCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2R3X2ZkZV9zdHJ1Y3QgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzEzZHdfY2ZpX3N0cnVjdChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2R3X2NmaV9zdHJ1Y3QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9kd19jZmlfc3RydWN0ICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV84dHlwZWluZm8oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF90eXBlaW5mbyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3R5cGVpbmZvICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yMlZFQ19hbGlhc19zZXRfZW50cnlfZ2MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9WRUNfYWxpYXNfc2V0X2VudHJ5X2djIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfVkVDX2FsaWFzX3NldF9lbnRyeV9nYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTdhbGlhc19zZXRfZW50cnlfZChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2FsaWFzX3NldF9lbnRyeV9kIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfYWxpYXNfc2V0X2VudHJ5X2QgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzI0Y29uc3RhbnRfZGVzY3JpcHRvcl90cmVlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfY29uc3RhbnRfZGVzY3JpcHRvcl90cmVlIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfY29uc3RhbnRfZGVzY3JpcHRvcl90cmVlICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xNWNncmFwaF9hc21fbm9kZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2NncmFwaF9hc21fbm9kZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2NncmFwaF9hc21fbm9kZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTJ2YXJwb29sX25vZGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF92YXJwb29sX25vZGUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92YXJwb29sX25vZGUgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzIyVkVDX2NncmFwaF9ub2RlX3NldF9nYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X1ZFQ19jZ3JhcGhfbm9kZV9zZXRfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9WRUNfY2dyYXBoX25vZGVfc2V0X2djICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xOWNncmFwaF9ub2RlX3NldF9kZWYoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9jZ3JhcGhfbm9kZV9zZXRfZGVmIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfY2dyYXBoX25vZGVfc2V0X2RlZiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjdjZ3JhcGhfbm9kZV9zZXRfZWxlbWVudF9kZWYoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9jZ3JhcGhfbm9kZV9zZXRfZWxlbWVudF9kZWYgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9jZ3JhcGhfbm9kZV9zZXRfZWxlbWVudF9kZWYgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzIyVkVDX2NncmFwaF9ub2RlX3B0cl9nYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X1ZFQ19jZ3JhcGhfbm9kZV9wdHJfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9WRUNfY2dyYXBoX25vZGVfcHRyX2djICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xMWNncmFwaF9lZGdlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfY2dyYXBoX2VkZ2UgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9jZ3JhcGhfZWRnZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjRWRUNfaXBhX3JlcGxhY2VfbWFwX3BfZ2MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9WRUNfaXBhX3JlcGxhY2VfbWFwX3BfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9WRUNfaXBhX3JlcGxhY2VfbWFwX3BfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE1aXBhX3JlcGxhY2VfbWFwKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfaXBhX3JlcGxhY2VfbWFwIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfaXBhX3JlcGxhY2VfbWFwICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xMWNncmFwaF9ub2RlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfY2dyYXBoX25vZGUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9jZ3JhcGhfbm9kZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMThWRUNfYmFzaWNfYmxvY2tfZ2MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9WRUNfYmFzaWNfYmxvY2tfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9WRUNfYmFzaWNfYmxvY2tfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE0Z2ltcGxlX2JiX2luZm8oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9naW1wbGVfYmJfaW5mbyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2dpbXBsZV9iYl9pbmZvICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xMXJ0bF9iYl9pbmZvKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfcnRsX2JiX2luZm8gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9ydGxfYmJfaW5mbyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTFWRUNfZWRnZV9nYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X1ZFQ19lZGdlX2djIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfVkVDX2VkZ2VfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE3Y3NlbGliX3ZhbF9zdHJ1Y3QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9jc2VsaWJfdmFsX3N0cnVjdCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2NzZWxpYl92YWxfc3RydWN0ICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xMmVsdF9sb2NfbGlzdChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2VsdF9sb2NfbGlzdCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2VsdF9sb2NfbGlzdCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTNWRUNfbG9vcF9wX2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfVkVDX2xvb3BfcF9nYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X1ZFQ19sb29wX3BfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzRsb29wKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfbG9vcCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2xvb3AgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzlsb29wX2V4aXQoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9sb29wX2V4aXQgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9sb29wX2V4aXQgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzEzbmJfaXRlcl9ib3VuZChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X25iX2l0ZXJfYm91bmQgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9uYl9pdGVyX2JvdW5kICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yNHR5cGVzX3VzZWRfYnlfdmFyc19lbnRyeShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3R5cGVzX3VzZWRfYnlfdmFyc19lbnRyeSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3R5cGVzX3VzZWRfYnlfdmFyc19lbnRyeSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTdsYW5ndWFnZV9mdW5jdGlvbihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2xhbmd1YWdlX2Z1bmN0aW9uIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfbGFuZ3VhZ2VfZnVuY3Rpb24gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzVsb29wcyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2xvb3BzIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfbG9vcHMgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE4Y29udHJvbF9mbG93X2dyYXBoKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfY29udHJvbF9mbG93X2dyYXBoIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfY29udHJvbF9mbG93X2dyYXBoICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV85ZWhfc3RhdHVzKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfZWhfc3RhdHVzIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfZWhfc3RhdHVzICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yMGluaXRpYWxfdmFsdWVfc3RydWN0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfaW5pdGlhbF92YWx1ZV9zdHJ1Y3QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9pbml0aWFsX3ZhbHVlX3N0cnVjdCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTdydHhfY29uc3RhbnRfcG9vbChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3J0eF9jb25zdGFudF9wb29sIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfcnR4X2NvbnN0YW50X3Bvb2wgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE4VkVDX3RlbXBfc2xvdF9wX2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfVkVDX3RlbXBfc2xvdF9wX2djIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfVkVDX3RlbXBfc2xvdF9wX2djICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV85dGVtcF9zbG90KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdGVtcF9zbG90IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdGVtcF9zbG90ICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV85Z2ltcGxlX2RmKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfZ2ltcGxlX2RmIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfZ2ltcGxlX2RmICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yM1ZFQ19jYWxsX3NpdGVfcmVjb3JkX2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfVkVDX2NhbGxfc2l0ZV9yZWNvcmRfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9WRUNfY2FsbF9zaXRlX3JlY29yZF9nYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMThjYWxsX3NpdGVfcmVjb3JkX2QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9jYWxsX3NpdGVfcmVjb3JkX2QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9jYWxsX3NpdGVfcmVjb3JkX2QgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE0c2VxdWVuY2Vfc3RhY2soWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9zZXF1ZW5jZV9zdGFjayAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3NlcXVlbmNlX3N0YWNrICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV84ZWx0X2xpc3QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9lbHRfbGlzdCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2VsdF9saXN0ICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xN3RyZWVfcHJpb3JpdHlfbWFwKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdHJlZV9wcmlvcml0eV9tYXAgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF90cmVlX3ByaW9yaXR5X21hcCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTJ0cmVlX2ludF9tYXAoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF90cmVlX2ludF9tYXAgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF90cmVlX2ludF9tYXAgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzh0cmVlX21hcChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3RyZWVfbWFwIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdHJlZV9tYXAgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE0bGFuZ190cmVlX25vZGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9sYW5nX3RyZWVfbm9kZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2xhbmdfdHJlZV9ub2RlICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yNHRyZWVfc3RhdGVtZW50X2xpc3Rfbm9kZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3RyZWVfc3RhdGVtZW50X2xpc3Rfbm9kZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3RyZWVfc3RhdGVtZW50X2xpc3Rfbm9kZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fOXZhcl9hbm5fZChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3Zhcl9hbm5fZCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3Zhcl9hbm5fZCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fOWxhbmdfZGVjbChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2xhbmdfZGVjbCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2xhbmdfZGVjbCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fOWxhbmdfdHlwZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2xhbmdfdHlwZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2xhbmdfdHlwZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTBkaWVfc3RydWN0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfZGllX3N0cnVjdCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2RpZV9zdHJ1Y3QgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE1dmFycmF5X2hlYWRfdGFnKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdmFycmF5X2hlYWRfdGFnIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdmFycmF5X2hlYWRfdGFnICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xMnB0cl9pbmZvX2RlZihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3B0cl9pbmZvX2RlZiAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3B0cl9pbmZvX2RlZiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjJWRUNfY29uc3RydWN0b3JfZWx0X2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfVkVDX2NvbnN0cnVjdG9yX2VsdF9nYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X1ZFQ19jb25zdHJ1Y3Rvcl9lbHRfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE3VkVDX2FsaWFzX3BhaXJfZ2MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9WRUNfYWxpYXNfcGFpcl9nYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X1ZFQ19hbGlhc19wYWlyX2djICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xMVZFQ190cmVlX2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfVkVDX3RyZWVfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9WRUNfdHJlZV9nYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTJWRUNfdWNoYXJfZ2MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9WRUNfdWNoYXJfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9WRUNfdWNoYXJfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzhmdW5jdGlvbihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2Z1bmN0aW9uIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfZnVuY3Rpb24gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzIzY29uc3RhbnRfZGVzY3JpcHRvcl9ydHgoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9jb25zdGFudF9kZXNjcmlwdG9yX3J0eCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2NvbnN0YW50X2Rlc2NyaXB0b3JfcnR4ICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xMWZpeGVkX3ZhbHVlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfZml4ZWRfdmFsdWUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9maXhlZF92YWx1ZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTByZWFsX3ZhbHVlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfcmVhbF92YWx1ZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3JlYWxfdmFsdWUgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzEwVkVDX3J0eF9nYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X1ZFQ19ydHhfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9WRUNfcnR4X2djICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xMm9iamVjdF9ibG9jayhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X29iamVjdF9ibG9jayAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X29iamVjdF9ibG9jayAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fOXJlZ19hdHRycyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3JlZ19hdHRycyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3JlZ19hdHRycyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fOW1lbV9hdHRycyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X21lbV9hdHRycyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X21lbV9hdHRycyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTRiaXRtYXBfb2JzdGFjayhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2JpdG1hcF9vYnN0YWNrIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfYml0bWFwX29ic3RhY2sgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE4Yml0bWFwX2VsZW1lbnRfZGVmKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfYml0bWFwX2VsZW1lbnRfZGVmIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfYml0bWFwX2VsZW1lbnRfZGVmICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xNm1hY2hpbmVfZnVuY3Rpb24oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9tYWNoaW5lX2Z1bmN0aW9uIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfbWFjaGluZV9mdW5jdGlvbiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTViYXNpY19ibG9ja19kZWYoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9iYXNpY19ibG9ja19kZWYgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9iYXNpY19ibG9ja19kZWYgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzhlZGdlX2RlZihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2VkZ2VfZGVmIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfZWRnZV9kZWYgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE3Z2ltcGxlX3NlcV9ub2RlX2QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9naW1wbGVfc2VxX25vZGVfZCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2dpbXBsZV9zZXFfbm9kZV9kICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xMmdpbXBsZV9zZXFfZChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2dpbXBsZV9zZXFfZCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2dpbXBsZV9zZXFfZCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fN3NlY3Rpb24oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9zZWN0aW9uIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfc2VjdGlvbiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMThnaW1wbGVfc3RhdGVtZW50X2QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9naW1wbGVfc3RhdGVtZW50X2QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9naW1wbGVfc3RhdGVtZW50X2QgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzlydHZlY19kZWYoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9ydHZlY19kZWYgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9ydHZlY19kZWYgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzdydHhfZGVmKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfcnR4X2RlZiAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3J0eF9kZWYgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE1Yml0bWFwX2hlYWRfZGVmKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfYml0bWFwX2hlYWRfZGVmIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfYml0bWFwX2hlYWRfZGVmICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV85dHJlZV9ub2RlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdHJlZV9ub2RlIChYKTtcCisgIH0gd2hpbGUgKDApCisjZGVmaW5lIGd0X2dnY19teF90cmVlX25vZGUgZ3RfZ2djX214X2xhbmdfdHJlZV9ub2RlCisjZGVmaW5lIGd0X2dnY19tXzZhbnN3ZXIoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9hbnN3ZXIgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9hbnN3ZXIgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzljcHBfbWFjcm8oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9jcHBfbWFjcm8gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9jcHBfbWFjcm8gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzljcHBfdG9rZW4oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9jcHBfdG9rZW4gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9jcHBfdG9rZW4gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzlsaW5lX21hcHMoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9saW5lX21hcHMgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9saW5lX21hcHMgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9JSTE3c3BsYXlfdHJlZV9ub2RlX3MgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9TUDl0cmVlX25vZGUxN3NwbGF5X3RyZWVfbm9kZV9zICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDl0cmVlX25vZGVQOXRyZWVfbm9kZTE3c3BsYXlfdHJlZV9ub2RlX3MgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9JUDl0cmVlX25vZGUxN3NwbGF5X3RyZWVfbm9kZV9zICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDE1aW50ZXJmYWNlX3R1cGxlNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QMTZ2b2xhdGlsaXplZF90eXBlNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QMTdzdHJpbmdfZGVzY3JpcHRvcjRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDE0dHlwZV9hc3NlcnRpb240aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1AxOHRyZWV0cmVlaGFzaF9lbnRyeTRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDE3bW9kdWxlX2h0YWJfZW50cnk0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1AyMXBlbmRpbmdfYWJzdHJhY3RfdHlwZTRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDEwc3BlY19lbnRyeTRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDE2Y3h4X2ludF90cmVlX21hcDRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDE3bmFtZWRfbGFiZWxfZW50cnk0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1AxMnRyZWVfaW50X21hcDRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDIwbHRvX3N5bXRhYl9lbnRyeV9kZWY0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX0lQOXRyZWVfbm9kZTEyc3BsYXlfdHJlZV9zICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDl0cmVlX25vZGVQOXRyZWVfbm9kZTEyc3BsYXlfdHJlZV9zICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDEydmFycG9vbF9ub2RlNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QMTNzY2V2X2luZm9fc3RyNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QMjNjb25zdGFudF9kZXNjcmlwdG9yX3J0eDRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDI0Y29uc3RhbnRfZGVzY3JpcHRvcl90cmVlNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QMTJvYmplY3RfYmxvY2s0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1A3c2VjdGlvbjRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDE3dHJlZV9wcmlvcml0eV9tYXA0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1A4dHJlZV9tYXA0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1A5dHlwZV9oYXNoNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QMTNsaWJmdW5jX2VudHJ5NGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QMjN0ZW1wX3Nsb3RfYWRkcmVzc19lbnRyeTRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDE1dGhyb3dfc3RtdF9ub2RlNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QOXJlZ19hdHRyczRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDltZW1fYXR0cnM0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1A3cnR4X2RlZjRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fU1A5dHJlZV9ub2RlMTJzcGxheV90cmVlX3MgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QMTB2Y2FsbF9pbnNuNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QMTZ2YXJfbG9jX2xpc3RfZGVmNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QMTBkaWVfc3RydWN0NGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QMTVkd2FyZl9maWxlX2RhdGE0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1AyMGluZGlyZWN0X3N0cmluZ19ub2RlNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QMTFjZ3JhcGhfbm9kZTRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fSUkxMnNwbGF5X3RyZWVfcyAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1AyN2NncmFwaF9ub2RlX3NldF9lbGVtZW50X2RlZjRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDExY2dyYXBoX2VkZ2U0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1A5bG9vcF9leGl0NGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QMjR0eXBlc191c2VkX2J5X3ZhcnNfZW50cnk0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1A5dHJlZV9ub2RlNGh0YWIgKHZvaWQgKik7CisKKy8qIGZ1bmN0aW9ucyBjb2RlICovCisKKy8qIFBDSCB0eXBlLXdhbGtpbmcgcHJvY2VkdXJlcy4gICovCisvKiBtYWNyb3MgYW5kIGRlY2xhcmF0aW9ucyAqLworI2RlZmluZSBndF9wY2hfbl8xNWludGVyZmFjZV90dXBsZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2ludGVyZmFjZV90dXBsZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2ludGVyZmFjZV90dXBsZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTZ2b2xhdGlsaXplZF90eXBlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdm9sYXRpbGl6ZWRfdHlwZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3ZvbGF0aWxpemVkX3R5cGUgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE3c3RyaW5nX2Rlc2NyaXB0b3IoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9zdHJpbmdfZGVzY3JpcHRvciAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3N0cmluZ19kZXNjcmlwdG9yICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xNWNfaW5saW5lX3N0YXRpYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2NfaW5saW5lX3N0YXRpYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2NfaW5saW5lX3N0YXRpYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjRWRUNfY19nb3RvX2JpbmRpbmdzX3BfZ2MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9WRUNfY19nb3RvX2JpbmRpbmdzX3BfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9WRUNfY19nb3RvX2JpbmRpbmdzX3BfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE1Y19nb3RvX2JpbmRpbmdzKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY19nb3RvX2JpbmRpbmdzIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfY19nb3RvX2JpbmRpbmdzICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl83Y19zY29wZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2Nfc2NvcGUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9jX3Njb3BlICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl85Y19iaW5kaW5nKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY19iaW5kaW5nIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfY19iaW5kaW5nICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xMmNfbGFiZWxfdmFycyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2NfbGFiZWxfdmFycyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2NfbGFiZWxfdmFycyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fOGNfcGFyc2VyKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY19wYXJzZXIgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9jX3BhcnNlciAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fOWltcF9lbnRyeShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2ltcF9lbnRyeSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2ltcF9lbnRyeSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTZoYXNoZWRfYXR0cmlidXRlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfaGFzaGVkX2F0dHJpYnV0ZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2hhc2hlZF9hdHRyaWJ1dGUgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzEyaGFzaGVkX2VudHJ5KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfaGFzaGVkX2VudHJ5IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfaGFzaGVkX2VudHJ5ICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xNHR5cGVfYXNzZXJ0aW9uKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdHlwZV9hc3NlcnRpb24gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF90eXBlX2Fzc2VydGlvbiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTh0cmVldHJlZWhhc2hfZW50cnkoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF90cmVldHJlZWhhc2hfZW50cnkgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF90cmVldHJlZWhhc2hfZW50cnkgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzVDUG9vbChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X0NQb29sIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfQ1Bvb2wgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzNKQ0YoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9KQ0YgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9KQ0YgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE3bW9kdWxlX2h0YWJfZW50cnkoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9tb2R1bGVfaHRhYl9lbnRyeSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X21vZHVsZV9odGFiX2VudHJ5ICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xM2JpbmRpbmdfbGV2ZWwoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9iaW5kaW5nX2xldmVsIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfYmluZGluZ19sZXZlbCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fOW9wdF9zdGFjayhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X29wdF9zdGFjayAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X29wdF9zdGFjayAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTFhbGlnbl9zdGFjayhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2FsaWduX3N0YWNrIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfYWxpZ25fc3RhY2sgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE4VkVDX3RyZWVfZ2NfdmVjX2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfVkVDX3RyZWVfZ2NfdmVjX2djIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfVkVDX3RyZWVfZ2NfdmVjX2djICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xOVZFQ19jb25zdF9jaGFyX3BfZ2MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9WRUNfY29uc3RfY2hhcl9wX2djIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfVkVDX2NvbnN0X2NoYXJfcF9nYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjFwZW5kaW5nX2Fic3RyYWN0X3R5cGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9wZW5kaW5nX2Fic3RyYWN0X3R5cGUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9wZW5kaW5nX2Fic3RyYWN0X3R5cGUgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE1VkVDX3RyZWVfaW50X2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfVkVDX3RyZWVfaW50X2djIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfVkVDX3RyZWVfaW50X2djICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl85Y3BfcGFyc2VyKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY3BfcGFyc2VyIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfY3BfcGFyc2VyICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xN2NwX3BhcnNlcl9jb250ZXh0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY3BfcGFyc2VyX2NvbnRleHQgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9jcF9wYXJzZXJfY29udGV4dCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fOGNwX2xleGVyKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY3BfbGV4ZXIgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9jcF9sZXhlciAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTB0cmVlX2NoZWNrKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdHJlZV9jaGVjayAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3RyZWVfY2hlY2sgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzIyVkVDX2RlZmVycmVkX2FjY2Vzc19nYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X1ZFQ19kZWZlcnJlZF9hY2Nlc3NfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9WRUNfZGVmZXJyZWRfYWNjZXNzX2djICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xMHNwZWNfZW50cnkoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9zcGVjX2VudHJ5IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfc3BlY19lbnRyeSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTZwZW5kaW5nX3RlbXBsYXRlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfcGVuZGluZ190ZW1wbGF0ZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3BlbmRpbmdfdGVtcGxhdGUgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzIxbmFtZWRfbGFiZWxfdXNlX2VudHJ5KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfbmFtZWRfbGFiZWxfdXNlX2VudHJ5IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfbmFtZWRfbGFiZWxfdXNlX2VudHJ5ICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yOFZFQ19kZWZlcnJlZF9hY2Nlc3NfY2hlY2tfZ2MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9WRUNfZGVmZXJyZWRfYWNjZXNzX2NoZWNrX2djIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfVkVDX2RlZmVycmVkX2FjY2Vzc19jaGVja19nYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMThzb3J0ZWRfZmllbGRzX3R5cGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9zb3J0ZWRfZmllbGRzX3R5cGUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9zb3J0ZWRfZmllbGRzX3R5cGUgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE4VkVDX3RyZWVfcGFpcl9zX2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfVkVDX3RyZWVfcGFpcl9zX2djIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfVkVDX3RyZWVfcGFpcl9zX2djICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xN25hbWVkX2xhYmVsX2VudHJ5KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfbmFtZWRfbGFiZWxfZW50cnkgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9uYW1lZF9sYWJlbF9lbnRyeSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMzJWRUNfcXVhbGlmaWVkX3R5cGVkZWZfdXNhZ2VfdF9nYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X1ZFQ19xdWFsaWZpZWRfdHlwZWRlZl91c2FnZV90X2djIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfVkVDX3F1YWxpZmllZF90eXBlZGVmX3VzYWdlX3RfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE0Y3BfdG9rZW5fY2FjaGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9jcF90b2tlbl9jYWNoZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2NwX3Rva2VuX2NhY2hlICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xMXNhdmVkX3Njb3BlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfc2F2ZWRfc2NvcGUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9zYXZlZF9zY29wZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTZjeHhfaW50X3RyZWVfbWFwKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY3h4X2ludF90cmVlX21hcCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2N4eF9pbnRfdHJlZV9tYXAgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzIzVkVDX2NwX2NsYXNzX2JpbmRpbmdfZ2MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9WRUNfY3BfY2xhc3NfYmluZGluZ19nYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X1ZFQ19jcF9jbGFzc19iaW5kaW5nX2djICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yNFZFQ19jeHhfc2F2ZWRfYmluZGluZ19nYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X1ZFQ19jeHhfc2F2ZWRfYmluZGluZ19nYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X1ZFQ19jeHhfc2F2ZWRfYmluZGluZ19nYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTZjcF9iaW5kaW5nX2xldmVsKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY3BfYmluZGluZ19sZXZlbCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2NwX2JpbmRpbmdfbGV2ZWwgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzExY3h4X2JpbmRpbmcoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9jeHhfYmluZGluZyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2N4eF9iaW5kaW5nICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xNWJpbmRpbmdfZW50cnlfcyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2JpbmRpbmdfZW50cnlfcyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2JpbmRpbmdfZW50cnlfcyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTViaW5kaW5nX3RhYmxlX3MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9iaW5kaW5nX3RhYmxlX3MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9iaW5kaW5nX3RhYmxlX3MgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzExdGluc3RfbGV2ZWwoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF90aW5zdF9sZXZlbCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3RpbnN0X2xldmVsICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xNFZFQ190aW5mb19zX2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfVkVDX3RpbmZvX3NfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9WRUNfdGluZm9fc19nYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMThnbmF0X2JpbmRpbmdfbGV2ZWwoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9nbmF0X2JpbmRpbmdfbGV2ZWwgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9nbmF0X2JpbmRpbmdfbGV2ZWwgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzllbGFiX2luZm8oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9lbGFiX2luZm8gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9lbGFiX2luZm8gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzEwc3RtdF9ncm91cChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3N0bXRfZ3JvdXAgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9zdG10X2dyb3VwICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xNlZFQ19wYXJtX2F0dHJfZ2MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9WRUNfcGFybV9hdHRyX2djIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfVkVDX3Bhcm1fYXR0cl9nYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTFwYXJtX2F0dHJfZChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3Bhcm1fYXR0cl9kIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfcGFybV9hdHRyX2QgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzIyVkVDX2lwYV9lZGdlX2FyZ3NfdF9nYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X1ZFQ19pcGFfZWRnZV9hcmdzX3RfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9WRUNfaXBhX2VkZ2VfYXJnc190X2djICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yMGx0b19zeW10YWJfZW50cnlfZGVmKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfbHRvX3N5bXRhYl9lbnRyeV9kZWYgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9sdG9fc3ltdGFiX2VudHJ5X2RlZiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjBzc2Ffb3BlcmFuZF9tZW1vcnlfZChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3NzYV9vcGVyYW5kX21lbW9yeV9kIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfc3NhX29wZXJhbmRfbWVtb3J5X2QgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzEzc2Nldl9pbmZvX3N0cihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3NjZXZfaW5mb19zdHIgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9zY2V2X2luZm9fc3RyICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yNFZFQ19tZW1fYWRkcl90ZW1wbGF0ZV9nYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X1ZFQ19tZW1fYWRkcl90ZW1wbGF0ZV9nYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X1ZFQ19tZW1fYWRkcl90ZW1wbGF0ZV9nYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTNWRUNfZ2ltcGxlX2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfVkVDX2dpbXBsZV9nYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X1ZFQ19naW1wbGVfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzl0eXBlX2hhc2goWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF90eXBlX2hhc2ggKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF90eXBlX2hhc2ggKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE2c3RyaW5nX3Bvb2xfZGF0YShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3N0cmluZ19wb29sX2RhdGEgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9zdHJpbmdfcG9vbF9kYXRhICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xM2xpYmZ1bmNfZW50cnkoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9saWJmdW5jX2VudHJ5IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfbGliZnVuY19lbnRyeSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjN0ZW1wX3Nsb3RfYWRkcmVzc19lbnRyeShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3RlbXBfc2xvdF9hZGRyZXNzX2VudHJ5IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdGVtcF9zbG90X2FkZHJlc3NfZW50cnkgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE1dGhyb3dfc3RtdF9ub2RlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdGhyb3dfc3RtdF9ub2RlIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdGhyb3dfc3RtdF9ub2RlICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yMVZFQ19laF9sYW5kaW5nX3BhZF9nYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X1ZFQ19laF9sYW5kaW5nX3BhZF9nYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X1ZFQ19laF9sYW5kaW5nX3BhZF9nYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTZWRUNfZWhfcmVnaW9uX2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfVkVDX2VoX3JlZ2lvbl9nYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X1ZFQ19laF9yZWdpb25fZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzEwZWhfY2F0Y2hfZChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2VoX2NhdGNoX2QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9laF9jYXRjaF9kICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xNmVoX2xhbmRpbmdfcGFkX2QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9laF9sYW5kaW5nX3BhZF9kIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfZWhfbGFuZGluZ19wYWRfZCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTFlaF9yZWdpb25fZChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2VoX3JlZ2lvbl9kIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfZWhfcmVnaW9uX2QgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzEwdmNhbGxfaW5zbihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3ZjYWxsX2luc24gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92Y2FsbF9pbnNuICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xOFZFQ192Y2FsbF9lbnRyeV9nYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X1ZFQ192Y2FsbF9lbnRyeV9nYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X1ZFQ192Y2FsbF9lbnRyeV9nYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMThWRUNfZGNhbGxfZW50cnlfZ2MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9WRUNfZGNhbGxfZW50cnlfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9WRUNfZGNhbGxfZW50cnlfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE2dmFyX2xvY19saXN0X2RlZihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3Zhcl9sb2NfbGlzdF9kZWYgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92YXJfbG9jX2xpc3RfZGVmICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xMnZhcl9sb2Nfbm9kZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3Zhcl9sb2Nfbm9kZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3Zhcl9sb2Nfbm9kZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjBWRUNfZGllX2FyZ19lbnRyeV9nYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X1ZFQ19kaWVfYXJnX2VudHJ5X2djIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfVkVDX2RpZV9hcmdfZW50cnlfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE2bGltYm9fZGllX3N0cnVjdChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2xpbWJvX2RpZV9zdHJ1Y3QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9saW1ib19kaWVfc3RydWN0ICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yMFZFQ19wdWJuYW1lX2VudHJ5X2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfVkVDX3B1Ym5hbWVfZW50cnlfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9WRUNfcHVibmFtZV9lbnRyeV9nYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTlWRUNfZHdfYXR0cl9ub2RlX2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfVkVDX2R3X2F0dHJfbm9kZV9nYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X1ZFQ19kd19hdHRyX25vZGVfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE4Y29tZGF0X3R5cGVfc3RydWN0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY29tZGF0X3R5cGVfc3RydWN0IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfY29tZGF0X3R5cGVfc3RydWN0ICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yNWR3X3Jhbmdlc19ieV9sYWJlbF9zdHJ1Y3QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9kd19yYW5nZXNfYnlfbGFiZWxfc3RydWN0IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfZHdfcmFuZ2VzX2J5X2xhYmVsX3N0cnVjdCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTZkd19yYW5nZXNfc3RydWN0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfZHdfcmFuZ2VzX3N0cnVjdCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2R3X3Jhbmdlc19zdHJ1Y3QgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzI4ZHdfc2VwYXJhdGVfbGluZV9pbmZvX3N0cnVjdChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2R3X3NlcGFyYXRlX2xpbmVfaW5mb19zdHJ1Y3QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9kd19zZXBhcmF0ZV9saW5lX2luZm9fc3RydWN0ICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xOWR3X2xpbmVfaW5mb19zdHJ1Y3QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9kd19saW5lX2luZm9fc3RydWN0IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfZHdfbGluZV9pbmZvX3N0cnVjdCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjVWRUNfZGVmZXJyZWRfbG9jYXRpb25zX2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfVkVDX2RlZmVycmVkX2xvY2F0aW9uc19nYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X1ZFQ19kZWZlcnJlZF9sb2NhdGlvbnNfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE4ZHdfbG9jX2xpc3Rfc3RydWN0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfZHdfbG9jX2xpc3Rfc3RydWN0IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfZHdfbG9jX2xpc3Rfc3RydWN0ICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xNWR3YXJmX2ZpbGVfZGF0YShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2R3YXJmX2ZpbGVfZGF0YSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2R3YXJmX2ZpbGVfZGF0YSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTVxdWV1ZWRfcmVnX3NhdmUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9xdWV1ZWRfcmVnX3NhdmUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9xdWV1ZWRfcmVnX3NhdmUgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzIwaW5kaXJlY3Rfc3RyaW5nX25vZGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9pbmRpcmVjdF9zdHJpbmdfbm9kZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2luZGlyZWN0X3N0cmluZ19ub2RlICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xOWR3X2xvY19kZXNjcl9zdHJ1Y3QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9kd19sb2NfZGVzY3Jfc3RydWN0IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfZHdfbG9jX2Rlc2NyX3N0cnVjdCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTNkd19mZGVfc3RydWN0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfZHdfZmRlX3N0cnVjdCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2R3X2ZkZV9zdHJ1Y3QgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzEzZHdfY2ZpX3N0cnVjdChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2R3X2NmaV9zdHJ1Y3QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9kd19jZmlfc3RydWN0ICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl84dHlwZWluZm8oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF90eXBlaW5mbyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3R5cGVpbmZvICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yMlZFQ19hbGlhc19zZXRfZW50cnlfZ2MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9WRUNfYWxpYXNfc2V0X2VudHJ5X2djIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfVkVDX2FsaWFzX3NldF9lbnRyeV9nYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTdhbGlhc19zZXRfZW50cnlfZChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2FsaWFzX3NldF9lbnRyeV9kIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfYWxpYXNfc2V0X2VudHJ5X2QgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzI0Y29uc3RhbnRfZGVzY3JpcHRvcl90cmVlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY29uc3RhbnRfZGVzY3JpcHRvcl90cmVlIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfY29uc3RhbnRfZGVzY3JpcHRvcl90cmVlICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xNWNncmFwaF9hc21fbm9kZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2NncmFwaF9hc21fbm9kZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2NncmFwaF9hc21fbm9kZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTJ2YXJwb29sX25vZGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92YXJwb29sX25vZGUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92YXJwb29sX25vZGUgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzIyVkVDX2NncmFwaF9ub2RlX3NldF9nYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X1ZFQ19jZ3JhcGhfbm9kZV9zZXRfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9WRUNfY2dyYXBoX25vZGVfc2V0X2djICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xOWNncmFwaF9ub2RlX3NldF9kZWYoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9jZ3JhcGhfbm9kZV9zZXRfZGVmIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfY2dyYXBoX25vZGVfc2V0X2RlZiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjdjZ3JhcGhfbm9kZV9zZXRfZWxlbWVudF9kZWYoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9jZ3JhcGhfbm9kZV9zZXRfZWxlbWVudF9kZWYgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9jZ3JhcGhfbm9kZV9zZXRfZWxlbWVudF9kZWYgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzIyVkVDX2NncmFwaF9ub2RlX3B0cl9nYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X1ZFQ19jZ3JhcGhfbm9kZV9wdHJfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9WRUNfY2dyYXBoX25vZGVfcHRyX2djICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xMWNncmFwaF9lZGdlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY2dyYXBoX2VkZ2UgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9jZ3JhcGhfZWRnZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjRWRUNfaXBhX3JlcGxhY2VfbWFwX3BfZ2MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9WRUNfaXBhX3JlcGxhY2VfbWFwX3BfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9WRUNfaXBhX3JlcGxhY2VfbWFwX3BfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE1aXBhX3JlcGxhY2VfbWFwKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfaXBhX3JlcGxhY2VfbWFwIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfaXBhX3JlcGxhY2VfbWFwICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xMWNncmFwaF9ub2RlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY2dyYXBoX25vZGUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9jZ3JhcGhfbm9kZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMThWRUNfYmFzaWNfYmxvY2tfZ2MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9WRUNfYmFzaWNfYmxvY2tfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9WRUNfYmFzaWNfYmxvY2tfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE0Z2ltcGxlX2JiX2luZm8oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9naW1wbGVfYmJfaW5mbyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2dpbXBsZV9iYl9pbmZvICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xMXJ0bF9iYl9pbmZvKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfcnRsX2JiX2luZm8gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9ydGxfYmJfaW5mbyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTFWRUNfZWRnZV9nYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X1ZFQ19lZGdlX2djIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfVkVDX2VkZ2VfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE3Y3NlbGliX3ZhbF9zdHJ1Y3QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9jc2VsaWJfdmFsX3N0cnVjdCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2NzZWxpYl92YWxfc3RydWN0ICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xMmVsdF9sb2NfbGlzdChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2VsdF9sb2NfbGlzdCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2VsdF9sb2NfbGlzdCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTNWRUNfbG9vcF9wX2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfVkVDX2xvb3BfcF9nYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X1ZFQ19sb29wX3BfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzRsb29wKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfbG9vcCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2xvb3AgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzlsb29wX2V4aXQoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9sb29wX2V4aXQgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9sb29wX2V4aXQgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzEzbmJfaXRlcl9ib3VuZChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X25iX2l0ZXJfYm91bmQgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9uYl9pdGVyX2JvdW5kICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yNHR5cGVzX3VzZWRfYnlfdmFyc19lbnRyeShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3R5cGVzX3VzZWRfYnlfdmFyc19lbnRyeSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3R5cGVzX3VzZWRfYnlfdmFyc19lbnRyeSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTdsYW5ndWFnZV9mdW5jdGlvbihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2xhbmd1YWdlX2Z1bmN0aW9uIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfbGFuZ3VhZ2VfZnVuY3Rpb24gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzVsb29wcyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2xvb3BzIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfbG9vcHMgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE4Y29udHJvbF9mbG93X2dyYXBoKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY29udHJvbF9mbG93X2dyYXBoIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfY29udHJvbF9mbG93X2dyYXBoICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl85ZWhfc3RhdHVzKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfZWhfc3RhdHVzIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfZWhfc3RhdHVzICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yMGluaXRpYWxfdmFsdWVfc3RydWN0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfaW5pdGlhbF92YWx1ZV9zdHJ1Y3QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9pbml0aWFsX3ZhbHVlX3N0cnVjdCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTdydHhfY29uc3RhbnRfcG9vbChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3J0eF9jb25zdGFudF9wb29sIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfcnR4X2NvbnN0YW50X3Bvb2wgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE4VkVDX3RlbXBfc2xvdF9wX2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfVkVDX3RlbXBfc2xvdF9wX2djIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfVkVDX3RlbXBfc2xvdF9wX2djICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl85dGVtcF9zbG90KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdGVtcF9zbG90IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdGVtcF9zbG90ICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl85Z2ltcGxlX2RmKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfZ2ltcGxlX2RmIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfZ2ltcGxlX2RmICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yM1ZFQ19jYWxsX3NpdGVfcmVjb3JkX2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfVkVDX2NhbGxfc2l0ZV9yZWNvcmRfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9WRUNfY2FsbF9zaXRlX3JlY29yZF9nYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMThjYWxsX3NpdGVfcmVjb3JkX2QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9jYWxsX3NpdGVfcmVjb3JkX2QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9jYWxsX3NpdGVfcmVjb3JkX2QgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE0c2VxdWVuY2Vfc3RhY2soWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9zZXF1ZW5jZV9zdGFjayAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3NlcXVlbmNlX3N0YWNrICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl84ZWx0X2xpc3QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9lbHRfbGlzdCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2VsdF9saXN0ICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xN3RyZWVfcHJpb3JpdHlfbWFwKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdHJlZV9wcmlvcml0eV9tYXAgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF90cmVlX3ByaW9yaXR5X21hcCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTJ0cmVlX2ludF9tYXAoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF90cmVlX2ludF9tYXAgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF90cmVlX2ludF9tYXAgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzh0cmVlX21hcChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3RyZWVfbWFwIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdHJlZV9tYXAgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE0bGFuZ190cmVlX25vZGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9sYW5nX3RyZWVfbm9kZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2xhbmdfdHJlZV9ub2RlICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yNHRyZWVfc3RhdGVtZW50X2xpc3Rfbm9kZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3RyZWVfc3RhdGVtZW50X2xpc3Rfbm9kZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3RyZWVfc3RhdGVtZW50X2xpc3Rfbm9kZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fOXZhcl9hbm5fZChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3Zhcl9hbm5fZCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3Zhcl9hbm5fZCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fOWxhbmdfZGVjbChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2xhbmdfZGVjbCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2xhbmdfZGVjbCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fOWxhbmdfdHlwZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2xhbmdfdHlwZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2xhbmdfdHlwZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTBkaWVfc3RydWN0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfZGllX3N0cnVjdCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2RpZV9zdHJ1Y3QgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE1dmFycmF5X2hlYWRfdGFnKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdmFycmF5X2hlYWRfdGFnIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdmFycmF5X2hlYWRfdGFnICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xMnB0cl9pbmZvX2RlZihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3B0cl9pbmZvX2RlZiAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3B0cl9pbmZvX2RlZiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjJWRUNfY29uc3RydWN0b3JfZWx0X2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfVkVDX2NvbnN0cnVjdG9yX2VsdF9nYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X1ZFQ19jb25zdHJ1Y3Rvcl9lbHRfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE3VkVDX2FsaWFzX3BhaXJfZ2MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9WRUNfYWxpYXNfcGFpcl9nYyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X1ZFQ19hbGlhc19wYWlyX2djICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xMVZFQ190cmVlX2djKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfVkVDX3RyZWVfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9WRUNfdHJlZV9nYyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTJWRUNfdWNoYXJfZ2MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9WRUNfdWNoYXJfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9WRUNfdWNoYXJfZ2MgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzhmdW5jdGlvbihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2Z1bmN0aW9uIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfZnVuY3Rpb24gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzIzY29uc3RhbnRfZGVzY3JpcHRvcl9ydHgoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9jb25zdGFudF9kZXNjcmlwdG9yX3J0eCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2NvbnN0YW50X2Rlc2NyaXB0b3JfcnR4ICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xMWZpeGVkX3ZhbHVlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfZml4ZWRfdmFsdWUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9maXhlZF92YWx1ZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTByZWFsX3ZhbHVlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfcmVhbF92YWx1ZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3JlYWxfdmFsdWUgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzEwVkVDX3J0eF9nYyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X1ZFQ19ydHhfZ2MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9WRUNfcnR4X2djICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xMm9iamVjdF9ibG9jayhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X29iamVjdF9ibG9jayAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X29iamVjdF9ibG9jayAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fOXJlZ19hdHRycyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3JlZ19hdHRycyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3JlZ19hdHRycyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fOW1lbV9hdHRycyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X21lbV9hdHRycyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X21lbV9hdHRycyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTRiaXRtYXBfb2JzdGFjayhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2JpdG1hcF9vYnN0YWNrIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfYml0bWFwX29ic3RhY2sgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE4Yml0bWFwX2VsZW1lbnRfZGVmKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfYml0bWFwX2VsZW1lbnRfZGVmIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfYml0bWFwX2VsZW1lbnRfZGVmICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xNm1hY2hpbmVfZnVuY3Rpb24oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9tYWNoaW5lX2Z1bmN0aW9uIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfbWFjaGluZV9mdW5jdGlvbiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTViYXNpY19ibG9ja19kZWYoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9iYXNpY19ibG9ja19kZWYgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9iYXNpY19ibG9ja19kZWYgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzhlZGdlX2RlZihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2VkZ2VfZGVmIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfZWRnZV9kZWYgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE3Z2ltcGxlX3NlcV9ub2RlX2QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9naW1wbGVfc2VxX25vZGVfZCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2dpbXBsZV9zZXFfbm9kZV9kICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xMmdpbXBsZV9zZXFfZChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2dpbXBsZV9zZXFfZCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2dpbXBsZV9zZXFfZCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fN3NlY3Rpb24oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9zZWN0aW9uIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfc2VjdGlvbiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMThnaW1wbGVfc3RhdGVtZW50X2QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9naW1wbGVfc3RhdGVtZW50X2QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9naW1wbGVfc3RhdGVtZW50X2QgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzlydHZlY19kZWYoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9ydHZlY19kZWYgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9ydHZlY19kZWYgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzdydHhfZGVmKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfcnR4X2RlZiAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3J0eF9kZWYgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE1Yml0bWFwX2hlYWRfZGVmKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfYml0bWFwX2hlYWRfZGVmIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfYml0bWFwX2hlYWRfZGVmICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl85dHJlZV9ub2RlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdHJlZV9ub2RlIChYKTtcCisgIH0gd2hpbGUgKDApCisjZGVmaW5lIGd0X3BjaF9ueF90cmVlX25vZGUgZ3RfcGNoX254X2xhbmdfdHJlZV9ub2RlCisjZGVmaW5lIGd0X3BjaF9uXzZhbnN3ZXIoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9hbnN3ZXIgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9hbnN3ZXIgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzljcHBfbWFjcm8oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9jcHBfbWFjcm8gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9jcHBfbWFjcm8gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzljcHBfdG9rZW4oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9jcHBfdG9rZW4gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9jcHBfdG9rZW4gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzlsaW5lX21hcHMoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9saW5lX21hcHMgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9saW5lX21hcHMgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9JSTE3c3BsYXlfdHJlZV9ub2RlX3MgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9TUDl0cmVlX25vZGUxN3NwbGF5X3RyZWVfbm9kZV9zICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDl0cmVlX25vZGVQOXRyZWVfbm9kZTE3c3BsYXlfdHJlZV9ub2RlX3MgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9JUDl0cmVlX25vZGUxN3NwbGF5X3RyZWVfbm9kZV9zICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDE1aW50ZXJmYWNlX3R1cGxlNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QMTZ2b2xhdGlsaXplZF90eXBlNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QMTdzdHJpbmdfZGVzY3JpcHRvcjRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDE0dHlwZV9hc3NlcnRpb240aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX1AxOHRyZWV0cmVlaGFzaF9lbnRyeTRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDE3bW9kdWxlX2h0YWJfZW50cnk0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX1AyMXBlbmRpbmdfYWJzdHJhY3RfdHlwZTRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDEwc3BlY19lbnRyeTRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDE2Y3h4X2ludF90cmVlX21hcDRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDE3bmFtZWRfbGFiZWxfZW50cnk0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX1AxMnRyZWVfaW50X21hcDRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDIwbHRvX3N5bXRhYl9lbnRyeV9kZWY0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX0lQOXRyZWVfbm9kZTEyc3BsYXlfdHJlZV9zICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDl0cmVlX25vZGVQOXRyZWVfbm9kZTEyc3BsYXlfdHJlZV9zICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDEydmFycG9vbF9ub2RlNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QMTNzY2V2X2luZm9fc3RyNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QMjNjb25zdGFudF9kZXNjcmlwdG9yX3J0eDRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDI0Y29uc3RhbnRfZGVzY3JpcHRvcl90cmVlNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QMTJvYmplY3RfYmxvY2s0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX1A3c2VjdGlvbjRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDE3dHJlZV9wcmlvcml0eV9tYXA0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX1A4dHJlZV9tYXA0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX1A5dHlwZV9oYXNoNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QMTNsaWJmdW5jX2VudHJ5NGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QMjN0ZW1wX3Nsb3RfYWRkcmVzc19lbnRyeTRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDE1dGhyb3dfc3RtdF9ub2RlNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QOXJlZ19hdHRyczRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDltZW1fYXR0cnM0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX1A3cnR4X2RlZjRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fU1A5dHJlZV9ub2RlMTJzcGxheV90cmVlX3MgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QMTB2Y2FsbF9pbnNuNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QMTZ2YXJfbG9jX2xpc3RfZGVmNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QMTBkaWVfc3RydWN0NGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QMTVkd2FyZl9maWxlX2RhdGE0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX1AyMGluZGlyZWN0X3N0cmluZ19ub2RlNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QMTFjZ3JhcGhfbm9kZTRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fSUkxMnNwbGF5X3RyZWVfcyAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX1AyN2NncmFwaF9ub2RlX3NldF9lbGVtZW50X2RlZjRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDExY2dyYXBoX2VkZ2U0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX1A5bG9vcF9leGl0NGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QMjR0eXBlc191c2VkX2J5X3ZhcnNfZW50cnk0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX1A5dHJlZV9ub2RlNGh0YWIgKHZvaWQgKik7CisKKy8qIGZ1bmN0aW9ucyBjb2RlICovCisKKy8qIExvY2FsIHBvaW50ZXItd2Fsa2luZyByb3V0aW5lcy4gICovCitleHRlcm4gdm9pZCBndF9wY2hfcF8xNWludGVyZmFjZV90dXBsZQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE2dm9sYXRpbGl6ZWRfdHlwZQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE3c3RyaW5nX2Rlc2NyaXB0b3IKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xNWNfaW5saW5lX3N0YXRpYworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzI0VkVDX2NfZ290b19iaW5kaW5nc19wX2djCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTVjX2dvdG9fYmluZGluZ3MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF83Y19zY29wZQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzljX2JpbmRpbmcKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xMmNfbGFiZWxfdmFycworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzhjX3BhcnNlcgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzlpbXBfZW50cnkKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xNmhhc2hlZF9hdHRyaWJ1dGUKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xMmhhc2hlZF9lbnRyeQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE0dHlwZV9hc3NlcnRpb24KKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xOHRyZWV0cmVlaGFzaF9lbnRyeQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzVDUG9vbAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzNKQ0YKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xN21vZHVsZV9odGFiX2VudHJ5CisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTNiaW5kaW5nX2xldmVsCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfOW9wdF9zdGFjaworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzExYWxpZ25fc3RhY2sKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xOFZFQ190cmVlX2djX3ZlY19nYworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE5VkVDX2NvbnN0X2NoYXJfcF9nYworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzIxcGVuZGluZ19hYnN0cmFjdF90eXBlCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTVWRUNfdHJlZV9pbnRfZ2MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF85Y3BfcGFyc2VyCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTdjcF9wYXJzZXJfY29udGV4dAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzhjcF9sZXhlcgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzEwdHJlZV9jaGVjaworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzIyVkVDX2RlZmVycmVkX2FjY2Vzc19nYworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzEwc3BlY19lbnRyeQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE2cGVuZGluZ190ZW1wbGF0ZQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzIxbmFtZWRfbGFiZWxfdXNlX2VudHJ5CisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjhWRUNfZGVmZXJyZWRfYWNjZXNzX2NoZWNrX2djCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMThzb3J0ZWRfZmllbGRzX3R5cGUKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xOFZFQ190cmVlX3BhaXJfc19nYworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE3bmFtZWRfbGFiZWxfZW50cnkKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8zMlZFQ19xdWFsaWZpZWRfdHlwZWRlZl91c2FnZV90X2djCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTRjcF90b2tlbl9jYWNoZQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzExc2F2ZWRfc2NvcGUKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xNmN4eF9pbnRfdHJlZV9tYXAKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8yM1ZFQ19jcF9jbGFzc19iaW5kaW5nX2djCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjRWRUNfY3h4X3NhdmVkX2JpbmRpbmdfZ2MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xNmNwX2JpbmRpbmdfbGV2ZWwKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xMWN4eF9iaW5kaW5nCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTViaW5kaW5nX2VudHJ5X3MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xNWJpbmRpbmdfdGFibGVfcworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzExdGluc3RfbGV2ZWwKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xNFZFQ190aW5mb19zX2djCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMThnbmF0X2JpbmRpbmdfbGV2ZWwKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF85ZWxhYl9pbmZvCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTBzdG10X2dyb3VwCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTZWRUNfcGFybV9hdHRyX2djCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTFwYXJtX2F0dHJfZAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzIyVkVDX2lwYV9lZGdlX2FyZ3NfdF9nYworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzIwbHRvX3N5bXRhYl9lbnRyeV9kZWYKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8yMHNzYV9vcGVyYW5kX21lbW9yeV9kCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTNzY2V2X2luZm9fc3RyCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjRWRUNfbWVtX2FkZHJfdGVtcGxhdGVfZ2MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xM1ZFQ19naW1wbGVfZ2MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF85dHlwZV9oYXNoCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTZzdHJpbmdfcG9vbF9kYXRhCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTNsaWJmdW5jX2VudHJ5CisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjN0ZW1wX3Nsb3RfYWRkcmVzc19lbnRyeQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE1dGhyb3dfc3RtdF9ub2RlCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjFWRUNfZWhfbGFuZGluZ19wYWRfZ2MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xNlZFQ19laF9yZWdpb25fZ2MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xMGVoX2NhdGNoX2QKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xNmVoX2xhbmRpbmdfcGFkX2QKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xMWVoX3JlZ2lvbl9kCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTB2Y2FsbF9pbnNuCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMThWRUNfdmNhbGxfZW50cnlfZ2MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xOFZFQ19kY2FsbF9lbnRyeV9nYworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE2dmFyX2xvY19saXN0X2RlZgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzEydmFyX2xvY19ub2RlCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjBWRUNfZGllX2FyZ19lbnRyeV9nYworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE2bGltYm9fZGllX3N0cnVjdAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzIwVkVDX3B1Ym5hbWVfZW50cnlfZ2MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xOVZFQ19kd19hdHRyX25vZGVfZ2MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xOGNvbWRhdF90eXBlX3N0cnVjdAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzI1ZHdfcmFuZ2VzX2J5X2xhYmVsX3N0cnVjdAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE2ZHdfcmFuZ2VzX3N0cnVjdAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzI4ZHdfc2VwYXJhdGVfbGluZV9pbmZvX3N0cnVjdAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE5ZHdfbGluZV9pbmZvX3N0cnVjdAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzI1VkVDX2RlZmVycmVkX2xvY2F0aW9uc19nYworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE4ZHdfbG9jX2xpc3Rfc3RydWN0CisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTVkd2FyZl9maWxlX2RhdGEKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xNXF1ZXVlZF9yZWdfc2F2ZQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzIwaW5kaXJlY3Rfc3RyaW5nX25vZGUKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xOWR3X2xvY19kZXNjcl9zdHJ1Y3QKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xM2R3X2ZkZV9zdHJ1Y3QKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xM2R3X2NmaV9zdHJ1Y3QKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF84dHlwZWluZm8KKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8yMlZFQ19hbGlhc19zZXRfZW50cnlfZ2MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xN2FsaWFzX3NldF9lbnRyeV9kCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjRjb25zdGFudF9kZXNjcmlwdG9yX3RyZWUKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xNWNncmFwaF9hc21fbm9kZQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzEydmFycG9vbF9ub2RlCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjJWRUNfY2dyYXBoX25vZGVfc2V0X2djCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTljZ3JhcGhfbm9kZV9zZXRfZGVmCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjdjZ3JhcGhfbm9kZV9zZXRfZWxlbWVudF9kZWYKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8yMlZFQ19jZ3JhcGhfbm9kZV9wdHJfZ2MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xMWNncmFwaF9lZGdlCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjRWRUNfaXBhX3JlcGxhY2VfbWFwX3BfZ2MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xNWlwYV9yZXBsYWNlX21hcAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzExY2dyYXBoX25vZGUKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xOFZFQ19iYXNpY19ibG9ja19nYworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE0Z2ltcGxlX2JiX2luZm8KKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xMXJ0bF9iYl9pbmZvCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTFWRUNfZWRnZV9nYworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE3Y3NlbGliX3ZhbF9zdHJ1Y3QKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xMmVsdF9sb2NfbGlzdAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzEzVkVDX2xvb3BfcF9nYworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzRsb29wCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfOWxvb3BfZXhpdAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzEzbmJfaXRlcl9ib3VuZAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzI0dHlwZXNfdXNlZF9ieV92YXJzX2VudHJ5CisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTdsYW5ndWFnZV9mdW5jdGlvbgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzVsb29wcworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE4Y29udHJvbF9mbG93X2dyYXBoCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfOWVoX3N0YXR1cworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzIwaW5pdGlhbF92YWx1ZV9zdHJ1Y3QKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xN3J0eF9jb25zdGFudF9wb29sCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMThWRUNfdGVtcF9zbG90X3BfZ2MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF85dGVtcF9zbG90CisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfOWdpbXBsZV9kZgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzIzVkVDX2NhbGxfc2l0ZV9yZWNvcmRfZ2MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xOGNhbGxfc2l0ZV9yZWNvcmRfZAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE0c2VxdWVuY2Vfc3RhY2sKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF84ZWx0X2xpc3QKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xN3RyZWVfcHJpb3JpdHlfbWFwCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTJ0cmVlX2ludF9tYXAKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF84dHJlZV9tYXAKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xNGxhbmdfdHJlZV9ub2RlCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjR0cmVlX3N0YXRlbWVudF9saXN0X25vZGUKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF85dmFyX2Fubl9kCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfOWxhbmdfZGVjbAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzlsYW5nX3R5cGUKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xMGRpZV9zdHJ1Y3QKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xNXZhcnJheV9oZWFkX3RhZworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzEycHRyX2luZm9fZGVmCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjJWRUNfY29uc3RydWN0b3JfZWx0X2djCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTdWRUNfYWxpYXNfcGFpcl9nYworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzExVkVDX3RyZWVfZ2MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xMlZFQ191Y2hhcl9nYworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzhmdW5jdGlvbgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzIzY29uc3RhbnRfZGVzY3JpcHRvcl9ydHgKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xMWZpeGVkX3ZhbHVlCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTByZWFsX3ZhbHVlCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTBWRUNfcnR4X2djCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTJvYmplY3RfYmxvY2sKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF85cmVnX2F0dHJzCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfOW1lbV9hdHRycworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE0Yml0bWFwX29ic3RhY2sKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xOGJpdG1hcF9lbGVtZW50X2RlZgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE2bWFjaGluZV9mdW5jdGlvbgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE1YmFzaWNfYmxvY2tfZGVmCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfOGVkZ2VfZGVmCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTdnaW1wbGVfc2VxX25vZGVfZAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzEyZ2ltcGxlX3NlcV9kCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfN3NlY3Rpb24KKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xOGdpbXBsZV9zdGF0ZW1lbnRfZAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzlydHZlY19kZWYKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF83cnR4X2RlZgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE1Yml0bWFwX2hlYWRfZGVmCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworI2RlZmluZSBndF9wY2hfcF85dHJlZV9ub2RlIGd0X3BjaF9wXzE0bGFuZ190cmVlX25vZGUKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzZhbnN3ZXIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF85Y3BwX21hY3JvCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfOWNwcF90b2tlbgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzlsaW5lX21hcHMKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9JSTE3c3BsYXlfdHJlZV9ub2RlX3MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9TUDl0cmVlX25vZGUxN3NwbGF5X3RyZWVfbm9kZV9zCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDl0cmVlX25vZGVQOXRyZWVfbm9kZTE3c3BsYXlfdHJlZV9ub2RlX3MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9JUDl0cmVlX25vZGUxN3NwbGF5X3RyZWVfbm9kZV9zCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDE1aW50ZXJmYWNlX3R1cGxlNGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QMTZ2b2xhdGlsaXplZF90eXBlNGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QMTdzdHJpbmdfZGVzY3JpcHRvcjRodGFiCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDE0dHlwZV9hc3NlcnRpb240aHRhYgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX1AxOHRyZWV0cmVlaGFzaF9lbnRyeTRodGFiCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDE3bW9kdWxlX2h0YWJfZW50cnk0aHRhYgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX1AyMXBlbmRpbmdfYWJzdHJhY3RfdHlwZTRodGFiCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDEwc3BlY19lbnRyeTRodGFiCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDE2Y3h4X2ludF90cmVlX21hcDRodGFiCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDE3bmFtZWRfbGFiZWxfZW50cnk0aHRhYgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX1AxMnRyZWVfaW50X21hcDRodGFiCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDIwbHRvX3N5bXRhYl9lbnRyeV9kZWY0aHRhYgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX0lQOXRyZWVfbm9kZTEyc3BsYXlfdHJlZV9zCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDl0cmVlX25vZGVQOXRyZWVfbm9kZTEyc3BsYXlfdHJlZV9zCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDEydmFycG9vbF9ub2RlNGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QMTNzY2V2X2luZm9fc3RyNGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QMjNjb25zdGFudF9kZXNjcmlwdG9yX3J0eDRodGFiCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDI0Y29uc3RhbnRfZGVzY3JpcHRvcl90cmVlNGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QMTJvYmplY3RfYmxvY2s0aHRhYgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX1A3c2VjdGlvbjRodGFiCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDE3dHJlZV9wcmlvcml0eV9tYXA0aHRhYgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX1A4dHJlZV9tYXA0aHRhYgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX1A5dHlwZV9oYXNoNGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QMTNsaWJmdW5jX2VudHJ5NGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QMjN0ZW1wX3Nsb3RfYWRkcmVzc19lbnRyeTRodGFiCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDE1dGhyb3dfc3RtdF9ub2RlNGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QOXJlZ19hdHRyczRodGFiCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDltZW1fYXR0cnM0aHRhYgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX1A3cnR4X2RlZjRodGFiCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfU1A5dHJlZV9ub2RlMTJzcGxheV90cmVlX3MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QMTB2Y2FsbF9pbnNuNGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QMTZ2YXJfbG9jX2xpc3RfZGVmNGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QMTBkaWVfc3RydWN0NGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QMTVkd2FyZl9maWxlX2RhdGE0aHRhYgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX1AyMGluZGlyZWN0X3N0cmluZ19ub2RlNGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QMTFjZ3JhcGhfbm9kZTRodGFiCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfSUkxMnNwbGF5X3RyZWVfcworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX1AyN2NncmFwaF9ub2RlX3NldF9lbGVtZW50X2RlZjRodGFiCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDExY2dyYXBoX2VkZ2U0aHRhYgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX1A5bG9vcF9leGl0NGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QMjR0eXBlc191c2VkX2J5X3ZhcnNfZW50cnk0aHRhYgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX1A5dHJlZV9ub2RlNGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvaGFyZC1yZWctc2V0LmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvaGFyZC1yZWctc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcyYTIzOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9oYXJkLXJlZy1zZXQuaApAQCAtMCwwICsxLDY3NyBAQAorLyogU2V0cyAoYml0IHZlY3RvcnMpIG9mIGhhcmQgcmVnaXN0ZXJzLCBhbmQgb3BlcmF0aW9ucyBvbiB0aGVtLgorICAgQ29weXJpZ2h0IChDKSAxOTg3LCAxOTkyLCAxOTk0LCAyMDAwLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4LCAyMDA5CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfSEFSRF9SRUdfU0VUX0gKKyNkZWZpbmUgR0NDX0hBUkRfUkVHX1NFVF9ICisKKy8qIERlZmluZSB0aGUgdHlwZSBvZiBhIHNldCBvZiBoYXJkIHJlZ2lzdGVycy4gICovCisKKy8qIEhBUkRfUkVHX0VMVF9UWVBFIGlzIGEgdHlwZWRlZiBvZiB0aGUgdW5zaWduZWQgaW50ZWdyYWwgdHlwZSB3aGljaAorICAgd2lsbCBiZSB1c2VkIGZvciBoYXJkIHJlZyBzZXRzLCBlaXRoZXIgYWxvbmUgb3IgaW4gYW4gYXJyYXkuCisKKyAgIElmIEhBUkRfUkVHX1NFVCBpcyBhIG1hY3JvLCBpdHMgZGVmaW5pdGlvbiBpcyBIQVJEX1JFR19FTFRfVFlQRSwKKyAgIGFuZCBpdCBoYXMgZW5vdWdoIGJpdHMgdG8gcmVwcmVzZW50IGFsbCB0aGUgdGFyZ2V0IG1hY2hpbmUncyBoYXJkCisgICByZWdpc3RlcnMuICBPdGhlcndpc2UsIGl0IGlzIGEgdHlwZWRlZiBmb3IgYSBzdWl0YWJseSBzaXplZCBhcnJheQorICAgb2YgSEFSRF9SRUdfRUxUX1RZUEVzLiAgSEFSRF9SRUdfU0VUX0xPTkdTIGlzIGRlZmluZWQgYXMgaG93IG1hbnkuCisKKyAgIE5vdGUgdGhhdCBsb3RzIG9mIGNvZGUgYXNzdW1lcyB0aGF0IHRoZSBmaXJzdCBwYXJ0IG9mIGEgcmVnc2V0IGlzCisgICB0aGUgc2FtZSBmb3JtYXQgYXMgYSBIQVJEX1JFR19TRVQuICBUbyBoZWxwIG1ha2Ugc3VyZSB0aGlzIGlzIHRydWUsCisgICB3ZSBvbmx5IHRyeSB0aGUgd2lkZXN0IGZhc3QgaW50ZWdlciBtb2RlIChIT1NUX1dJREVTVF9GQVNUX0lOVCkKKyAgIGluc3RlYWQgb2YgYWxsIHRoZSBzbWFsbGVyIHR5cGVzLiAgVGhpcyBhcHByb2FjaCBsb3NlcyBvbmx5IGlmCisgICB0aGVyZSBhcmUgdmVyeSBmZXcgcmVnaXN0ZXJzIGFuZCB0aGVuIG9ubHkgaW4gdGhlIGZldyBjYXNlcyB3aGVyZQorICAgd2UgaGF2ZSBhbiBhcnJheSBvZiBIQVJEX1JFR19TRVRzLCBzbyBpdCBuZWVkbid0IGJlIGFzIGNvbXBsZXggYXMKKyAgIGl0IHVzZWQgdG8gYmUuICAqLworCit0eXBlZGVmIHVuc2lnbmVkIEhPU1RfV0lERVNUX0ZBU1RfSU5UIEhBUkRfUkVHX0VMVF9UWVBFOworCisjaWYgRklSU1RfUFNFVURPX1JFR0lTVEVSIDw9IEhPU1RfQklUU19QRVJfV0lERVNUX0ZBU1RfSU5UCisKKyNkZWZpbmUgSEFSRF9SRUdfU0VUIEhBUkRfUkVHX0VMVF9UWVBFCisKKyNlbHNlCisKKyNkZWZpbmUgSEFSRF9SRUdfU0VUX0xPTkdTIFwKKyAoKEZJUlNUX1BTRVVET19SRUdJU1RFUiArIEhPU1RfQklUU19QRVJfV0lERVNUX0ZBU1RfSU5UIC0gMSkJXAorICAvIEhPU1RfQklUU19QRVJfV0lERVNUX0ZBU1RfSU5UKQordHlwZWRlZiBIQVJEX1JFR19FTFRfVFlQRSBIQVJEX1JFR19TRVRbSEFSRF9SRUdfU0VUX0xPTkdTXTsKKworI2VuZGlmCisKKy8qIEhBUkRfQ09OU1QgaXMgdXNlZCB0byBjYXN0IGEgY29uc3RhbnQgdG8gdGhlIGFwcHJvcHJpYXRlIHR5cGUKKyAgIGZvciB1c2Ugd2l0aCBhIEhBUkRfUkVHX1NFVC4gICovCisKKyNkZWZpbmUgSEFSRF9DT05TVChYKSAoKEhBUkRfUkVHX0VMVF9UWVBFKSAoWCkpCisKKy8qIERlZmluZSBtYWNyb3MgU0VUX0hBUkRfUkVHX0JJVCwgQ0xFQVJfSEFSRF9SRUdfQklUIGFuZCBURVNUX0hBUkRfUkVHX0JJVAorICAgdG8gc2V0LCBjbGVhciBvciB0ZXN0IG9uZSBiaXQgaW4gYSBoYXJkIHJlZyBzZXQgb2YgdHlwZSBIQVJEX1JFR19TRVQuCisgICBBbGwgdGhyZWUgdGFrZSB0d28gYXJndW1lbnRzOiB0aGUgc2V0IGFuZCB0aGUgcmVnaXN0ZXIgbnVtYmVyLgorCisgICBJbiB0aGUgY2FzZSB3aGVyZSBzZXRzIGFyZSBhcnJheXMgb2YgbG9uZ3MsIHRoZSBmaXJzdCBhcmd1bWVudAorICAgaXMgYWN0dWFsbHkgYSBwb2ludGVyIHRvIGEgbG9uZy4KKworICAgRGVmaW5lIHR3byBtYWNyb3MgZm9yIGluaXRpYWxpemluZyBhIHNldDoKKyAgIENMRUFSX0hBUkRfUkVHX1NFVCBhbmQgU0VUX0hBUkRfUkVHX1NFVC4KKyAgIFRoZXNlIHRha2UganVzdCBvbmUgYXJndW1lbnQuCisKKyAgIEFsc28gZGVmaW5lIG1hY3JvcyBmb3IgY29weWluZyBoYXJkIHJlZyBzZXRzOgorICAgQ09QWV9IQVJEX1JFR19TRVQgYW5kIENPTVBMX0hBUkRfUkVHX1NFVC4KKyAgIFRoZXNlIHRha2UgdHdvIGFyZ3VtZW50cyBUTyBhbmQgRlJPTTsgdGhleSByZWFkIGZyb20gRlJPTQorICAgYW5kIHN0b3JlIGludG8gVE8uICBDT01QTF9IQVJEX1JFR19TRVQgY29tcGxlbWVudHMgZWFjaCBiaXQuCisKKyAgIEFsc28gZGVmaW5lIG1hY3JvcyBmb3IgY29tYmluaW5nIGhhcmQgcmVnIHNldHM6CisgICBJT1JfSEFSRF9SRUdfU0VUIGFuZCBBTkRfSEFSRF9SRUdfU0VULgorICAgVGhlc2UgdGFrZSB0d28gYXJndW1lbnRzIFRPIGFuZCBGUk9NOyB0aGV5IHJlYWQgZnJvbSBGUk9NCisgICBhbmQgY29tYmluZSBiaXR3aXNlIGludG8gVE8uICBEZWZpbmUgYWxzbyB0d28gdmFyaWFudHMKKyAgIElPUl9DT01QTF9IQVJEX1JFR19TRVQgYW5kIEFORF9DT01QTF9IQVJEX1JFR19TRVQKKyAgIHdoaWNoIHVzZSB0aGUgY29tcGxlbWVudCBvZiB0aGUgc2V0IEZST00uCisKKyAgIEFsc28gZGVmaW5lOgorCisgICBoYXJkX3JlZ19zZXRfc3Vic2V0X3AgKFgsIFkpLCB3aGljaCByZXR1cm5zIHRydWUgaWYgWCBpcyBhIHN1YnNldCBvZiBZLgorICAgaGFyZF9yZWdfc2V0X2VxdWFsX3AgKFgsIFkpLCB3aGljaCByZXR1cm5zIHRydWUgaWYgWCBhbmQgWSBhcmUgZXF1YWwuCisgICBoYXJkX3JlZ19zZXRfaW50ZXJzZWN0X3AgKFgsIFkpLCB3aGljaCByZXR1cm5zIHRydWUgaWYgWCBhbmQgWSBpbnRlcnNlY3QuCisgICBoYXJkX3JlZ19zZXRfZW1wdHlfcCAoWCksIHdoaWNoIHJldHVybnMgdHJ1ZSBpZiBYIGlzIGVtcHR5LiAgKi8KKworI2RlZmluZSBVSE9TVF9CSVRTX1BFUl9XSURFX0lOVCAoKHVuc2lnbmVkKSBIT1NUX0JJVFNfUEVSX1dJREVTVF9GQVNUX0lOVCkKKworI2lmZGVmIEhBUkRfUkVHX1NFVAorCisjZGVmaW5lIFNFVF9IQVJEX1JFR19CSVQoU0VULCBCSVQpICBcCisgKChTRVQpIHw9IEhBUkRfQ09OU1QgKDEpIDw8IChCSVQpKQorI2RlZmluZSBDTEVBUl9IQVJEX1JFR19CSVQoU0VULCBCSVQpICBcCisgKChTRVQpICY9IH4oSEFSRF9DT05TVCAoMSkgPDwgKEJJVCkpKQorI2RlZmluZSBURVNUX0hBUkRfUkVHX0JJVChTRVQsIEJJVCkgIFwKKyAoISEoKFNFVCkgJiAoSEFSRF9DT05TVCAoMSkgPDwgKEJJVCkpKSkKKworI2RlZmluZSBDTEVBUl9IQVJEX1JFR19TRVQoVE8pICgoVE8pID0gSEFSRF9DT05TVCAoMCkpCisjZGVmaW5lIFNFVF9IQVJEX1JFR19TRVQoVE8pICgoVE8pID0gfiBIQVJEX0NPTlNUICgwKSkKKworI2RlZmluZSBDT1BZX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgKChUTykgPSAoRlJPTSkpCisjZGVmaW5lIENPTVBMX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgKChUTykgPSB+KEZST00pKQorCisjZGVmaW5lIElPUl9IQVJEX1JFR19TRVQoVE8sIEZST00pICgoVE8pIHw9IChGUk9NKSkKKyNkZWZpbmUgSU9SX0NPTVBMX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgKChUTykgfD0gfiAoRlJPTSkpCisjZGVmaW5lIEFORF9IQVJEX1JFR19TRVQoVE8sIEZST00pICgoVE8pICY9IChGUk9NKSkKKyNkZWZpbmUgQU5EX0NPTVBMX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgKChUTykgJj0gfiAoRlJPTSkpCisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraGFyZF9yZWdfc2V0X3N1YnNldF9wIChjb25zdCBIQVJEX1JFR19TRVQgeCwgY29uc3QgSEFSRF9SRUdfU0VUIHkpCit7CisgIHJldHVybiAoeCAmIH55KSA9PSBIQVJEX0NPTlNUICgwKTsKK30KKworc3RhdGljIGlubGluZSBib29sCitoYXJkX3JlZ19zZXRfZXF1YWxfcCAoY29uc3QgSEFSRF9SRUdfU0VUIHgsIGNvbnN0IEhBUkRfUkVHX1NFVCB5KQoreworICByZXR1cm4geCA9PSB5OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2hhcmRfcmVnX3NldF9pbnRlcnNlY3RfcCAoY29uc3QgSEFSRF9SRUdfU0VUIHgsIGNvbnN0IEhBUkRfUkVHX1NFVCB5KQoreworICByZXR1cm4gKHggJiB5KSAhPSBIQVJEX0NPTlNUICgwKTsKK30KKworc3RhdGljIGlubGluZSBib29sCitoYXJkX3JlZ19zZXRfZW1wdHlfcCAoY29uc3QgSEFSRF9SRUdfU0VUIHgpCit7CisgIHJldHVybiB4ID09IEhBUkRfQ09OU1QgKDApOworfQorCisjZWxzZQorCisjZGVmaW5lIFNFVF9IQVJEX1JFR19CSVQoU0VULCBCSVQpCQlcCisgICgoU0VUKVsoQklUKSAvIFVIT1NUX0JJVFNfUEVSX1dJREVfSU5UXQlcCisgICB8PSBIQVJEX0NPTlNUICgxKSA8PCAoKEJJVCkgJSBVSE9TVF9CSVRTX1BFUl9XSURFX0lOVCkpCisKKyNkZWZpbmUgQ0xFQVJfSEFSRF9SRUdfQklUKFNFVCwgQklUKQkJXAorICAoKFNFVClbKEJJVCkgLyBVSE9TVF9CSVRTX1BFUl9XSURFX0lOVF0JXAorICAgJj0gfihIQVJEX0NPTlNUICgxKSA8PCAoKEJJVCkgJSBVSE9TVF9CSVRTX1BFUl9XSURFX0lOVCkpKQorCisjZGVmaW5lIFRFU1RfSEFSRF9SRUdfQklUKFNFVCwgQklUKQkJXAorICAoISEoKFNFVClbKEJJVCkgLyBVSE9TVF9CSVRTX1BFUl9XSURFX0lOVF0JXAorICAgICAgJiAoSEFSRF9DT05TVCAoMSkgPDwgKChCSVQpICUgVUhPU1RfQklUU19QRVJfV0lERV9JTlQpKSkpCisKKyNpZiBGSVJTVF9QU0VVRE9fUkVHSVNURVIgPD0gMipIT1NUX0JJVFNfUEVSX1dJREVTVF9GQVNUX0lOVAorI2RlZmluZSBDTEVBUl9IQVJEX1JFR19TRVQoVE8pICBcCitkbyB7IEhBUkRfUkVHX0VMVF9UWVBFICpzY2FuX3RwXyA9IChUTyk7CQkJXAorICAgICBzY2FuX3RwX1swXSA9IDA7CQkJCQkJXAorICAgICBzY2FuX3RwX1sxXSA9IDA7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0VUX0hBUkRfUkVHX1NFVChUTykgIFwKK2RvIHsgSEFSRF9SRUdfRUxUX1RZUEUgKnNjYW5fdHBfID0gKFRPKTsJCQlcCisgICAgIHNjYW5fdHBfWzBdID0gLTE7CQkJCQkJXAorICAgICBzY2FuX3RwX1sxXSA9IC0xOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIENPUFlfSEFSRF9SRUdfU0VUKFRPLCBGUk9NKSAgXAorZG8geyBIQVJEX1JFR19FTFRfVFlQRSAqc2Nhbl90cF8gPSAoVE8pLCAqc2Nhbl9mcF8gPSAoRlJPTSk7CVwKKyAgICAgc2Nhbl90cF9bMF0gPSBzY2FuX2ZwX1swXTsJCQkJCVwKKyAgICAgc2Nhbl90cF9bMV0gPSBzY2FuX2ZwX1sxXTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBDT01QTF9IQVJEX1JFR19TRVQoVE8sIEZST00pICBcCitkbyB7IEhBUkRfUkVHX0VMVF9UWVBFICpzY2FuX3RwXyA9IChUTyksICpzY2FuX2ZwXyA9IChGUk9NKTsgCVwKKyAgICAgc2Nhbl90cF9bMF0gPSB+IHNjYW5fZnBfWzBdOwkJCQlcCisgICAgIHNjYW5fdHBfWzFdID0gfiBzY2FuX2ZwX1sxXTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBBTkRfSEFSRF9SRUdfU0VUKFRPLCBGUk9NKSAgXAorZG8geyBIQVJEX1JFR19FTFRfVFlQRSAqc2Nhbl90cF8gPSAoVE8pLCAqc2Nhbl9mcF8gPSAoRlJPTSk7IAlcCisgICAgIHNjYW5fdHBfWzBdICY9IHNjYW5fZnBfWzBdOwkJCQlcCisgICAgIHNjYW5fdHBfWzFdICY9IHNjYW5fZnBfWzFdOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIEFORF9DT01QTF9IQVJEX1JFR19TRVQoVE8sIEZST00pICBcCitkbyB7IEhBUkRfUkVHX0VMVF9UWVBFICpzY2FuX3RwXyA9IChUTyksICpzY2FuX2ZwXyA9IChGUk9NKTsgCVwKKyAgICAgc2Nhbl90cF9bMF0gJj0gfiBzY2FuX2ZwX1swXTsJCQkJXAorICAgICBzY2FuX3RwX1sxXSAmPSB+IHNjYW5fZnBfWzFdOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIElPUl9IQVJEX1JFR19TRVQoVE8sIEZST00pICBcCitkbyB7IEhBUkRfUkVHX0VMVF9UWVBFICpzY2FuX3RwXyA9IChUTyksICpzY2FuX2ZwXyA9IChGUk9NKTsgCVwKKyAgICAgc2Nhbl90cF9bMF0gfD0gc2Nhbl9mcF9bMF07CQkJCVwKKyAgICAgc2Nhbl90cF9bMV0gfD0gc2Nhbl9mcF9bMV07IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSU9SX0NPTVBMX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgIFwKK2RvIHsgSEFSRF9SRUdfRUxUX1RZUEUgKnNjYW5fdHBfID0gKFRPKSwgKnNjYW5fZnBfID0gKEZST00pOyAJXAorICAgICBzY2FuX3RwX1swXSB8PSB+IHNjYW5fZnBfWzBdOwkJCQlcCisgICAgIHNjYW5fdHBfWzFdIHw9IH4gc2Nhbl9mcF9bMV07IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraGFyZF9yZWdfc2V0X3N1YnNldF9wIChjb25zdCBIQVJEX1JFR19TRVQgeCwgY29uc3QgSEFSRF9SRUdfU0VUIHkpCit7CisgIHJldHVybiAoeFswXSAmIH55WzBdKSA9PSAwICYmICh4WzFdICYgfnlbMV0pID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraGFyZF9yZWdfc2V0X2VxdWFsX3AgKGNvbnN0IEhBUkRfUkVHX1NFVCB4LCBjb25zdCBIQVJEX1JFR19TRVQgeSkKK3sKKyAgcmV0dXJuIHhbMF0gPT0geVswXSAmJiB4WzFdID09IHlbMV07Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraGFyZF9yZWdfc2V0X2ludGVyc2VjdF9wIChjb25zdCBIQVJEX1JFR19TRVQgeCwgY29uc3QgSEFSRF9SRUdfU0VUIHkpCit7CisgIHJldHVybiAoeFswXSAmIHlbMF0pICE9IDAgfHwgKHhbMV0gJiB5WzFdKSAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2hhcmRfcmVnX3NldF9lbXB0eV9wIChjb25zdCBIQVJEX1JFR19TRVQgeCkKK3sKKyAgcmV0dXJuIHhbMF0gPT0gMCAmJiB4WzFdID09IDA7Cit9CisKKyNlbHNlCisjaWYgRklSU1RfUFNFVURPX1JFR0lTVEVSIDw9IDMqSE9TVF9CSVRTX1BFUl9XSURFU1RfRkFTVF9JTlQKKyNkZWZpbmUgQ0xFQVJfSEFSRF9SRUdfU0VUKFRPKSAgXAorZG8geyBIQVJEX1JFR19FTFRfVFlQRSAqc2Nhbl90cF8gPSAoVE8pOwkJCVwKKyAgICAgc2Nhbl90cF9bMF0gPSAwOwkJCQkJCVwKKyAgICAgc2Nhbl90cF9bMV0gPSAwOwkJCQkJCVwKKyAgICAgc2Nhbl90cF9bMl0gPSAwOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNFVF9IQVJEX1JFR19TRVQoVE8pICBcCitkbyB7IEhBUkRfUkVHX0VMVF9UWVBFICpzY2FuX3RwXyA9IChUTyk7CQkJXAorICAgICBzY2FuX3RwX1swXSA9IC0xOwkJCQkJCVwKKyAgICAgc2Nhbl90cF9bMV0gPSAtMTsJCQkJCQlcCisgICAgIHNjYW5fdHBfWzJdID0gLTE7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgQ09QWV9IQVJEX1JFR19TRVQoVE8sIEZST00pICBcCitkbyB7IEhBUkRfUkVHX0VMVF9UWVBFICpzY2FuX3RwXyA9IChUTyksICpzY2FuX2ZwXyA9IChGUk9NKTsJXAorICAgICBzY2FuX3RwX1swXSA9IHNjYW5fZnBfWzBdOwkJCQkJXAorICAgICBzY2FuX3RwX1sxXSA9IHNjYW5fZnBfWzFdOwkJCQkJXAorICAgICBzY2FuX3RwX1syXSA9IHNjYW5fZnBfWzJdOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIENPTVBMX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgIFwKK2RvIHsgSEFSRF9SRUdfRUxUX1RZUEUgKnNjYW5fdHBfID0gKFRPKSwgKnNjYW5fZnBfID0gKEZST00pOyAJXAorICAgICBzY2FuX3RwX1swXSA9IH4gc2Nhbl9mcF9bMF07CQkJCVwKKyAgICAgc2Nhbl90cF9bMV0gPSB+IHNjYW5fZnBfWzFdOwkJCQlcCisgICAgIHNjYW5fdHBfWzJdID0gfiBzY2FuX2ZwX1syXTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBBTkRfSEFSRF9SRUdfU0VUKFRPLCBGUk9NKSAgXAorZG8geyBIQVJEX1JFR19FTFRfVFlQRSAqc2Nhbl90cF8gPSAoVE8pLCAqc2Nhbl9mcF8gPSAoRlJPTSk7IAlcCisgICAgIHNjYW5fdHBfWzBdICY9IHNjYW5fZnBfWzBdOwkJCQlcCisgICAgIHNjYW5fdHBfWzFdICY9IHNjYW5fZnBfWzFdOwkJCQlcCisgICAgIHNjYW5fdHBfWzJdICY9IHNjYW5fZnBfWzJdOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIEFORF9DT01QTF9IQVJEX1JFR19TRVQoVE8sIEZST00pICBcCitkbyB7IEhBUkRfUkVHX0VMVF9UWVBFICpzY2FuX3RwXyA9IChUTyksICpzY2FuX2ZwXyA9IChGUk9NKTsgCVwKKyAgICAgc2Nhbl90cF9bMF0gJj0gfiBzY2FuX2ZwX1swXTsJCQkJXAorICAgICBzY2FuX3RwX1sxXSAmPSB+IHNjYW5fZnBfWzFdOwkJCQlcCisgICAgIHNjYW5fdHBfWzJdICY9IH4gc2Nhbl9mcF9bMl07IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSU9SX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgIFwKK2RvIHsgSEFSRF9SRUdfRUxUX1RZUEUgKnNjYW5fdHBfID0gKFRPKSwgKnNjYW5fZnBfID0gKEZST00pOyAJXAorICAgICBzY2FuX3RwX1swXSB8PSBzY2FuX2ZwX1swXTsJCQkJXAorICAgICBzY2FuX3RwX1sxXSB8PSBzY2FuX2ZwX1sxXTsJCQkJXAorICAgICBzY2FuX3RwX1syXSB8PSBzY2FuX2ZwX1syXTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBJT1JfQ09NUExfSEFSRF9SRUdfU0VUKFRPLCBGUk9NKSAgXAorZG8geyBIQVJEX1JFR19FTFRfVFlQRSAqc2Nhbl90cF8gPSAoVE8pLCAqc2Nhbl9mcF8gPSAoRlJPTSk7IAlcCisgICAgIHNjYW5fdHBfWzBdIHw9IH4gc2Nhbl9mcF9bMF07CQkJCVwKKyAgICAgc2Nhbl90cF9bMV0gfD0gfiBzY2FuX2ZwX1sxXTsJCQkJXAorICAgICBzY2FuX3RwX1syXSB8PSB+IHNjYW5fZnBfWzJdOyB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2hhcmRfcmVnX3NldF9zdWJzZXRfcCAoY29uc3QgSEFSRF9SRUdfU0VUIHgsIGNvbnN0IEhBUkRfUkVHX1NFVCB5KQoreworICByZXR1cm4gKCh4WzBdICYgfnlbMF0pID09IDAKKwkgICYmICh4WzFdICYgfnlbMV0pID09IDAKKwkgICYmICh4WzJdICYgfnlbMl0pID09IDApOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2hhcmRfcmVnX3NldF9lcXVhbF9wIChjb25zdCBIQVJEX1JFR19TRVQgeCwgY29uc3QgSEFSRF9SRUdfU0VUIHkpCit7CisgIHJldHVybiB4WzBdID09IHlbMF0gJiYgeFsxXSA9PSB5WzFdICYmIHhbMl0gPT0geVsyXTsKK30KKworc3RhdGljIGlubGluZSBib29sCitoYXJkX3JlZ19zZXRfaW50ZXJzZWN0X3AgKGNvbnN0IEhBUkRfUkVHX1NFVCB4LCBjb25zdCBIQVJEX1JFR19TRVQgeSkKK3sKKyAgcmV0dXJuICgoeFswXSAmIHlbMF0pICE9IDAKKwkgIHx8ICh4WzFdICYgeVsxXSkgIT0gMAorCSAgfHwgKHhbMl0gJiB5WzJdKSAhPSAwKTsKK30KKworc3RhdGljIGlubGluZSBib29sCitoYXJkX3JlZ19zZXRfZW1wdHlfcCAoY29uc3QgSEFSRF9SRUdfU0VUIHgpCit7CisgIHJldHVybiB4WzBdID09IDAgJiYgeFsxXSA9PSAwICYmIHhbMl0gPT0gMDsKK30KKworI2Vsc2UKKyNpZiBGSVJTVF9QU0VVRE9fUkVHSVNURVIgPD0gNCpIT1NUX0JJVFNfUEVSX1dJREVTVF9GQVNUX0lOVAorI2RlZmluZSBDTEVBUl9IQVJEX1JFR19TRVQoVE8pICBcCitkbyB7IEhBUkRfUkVHX0VMVF9UWVBFICpzY2FuX3RwXyA9IChUTyk7CQkJXAorICAgICBzY2FuX3RwX1swXSA9IDA7CQkJCQkJXAorICAgICBzY2FuX3RwX1sxXSA9IDA7CQkJCQkJXAorICAgICBzY2FuX3RwX1syXSA9IDA7CQkJCQkJXAorICAgICBzY2FuX3RwX1szXSA9IDA7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0VUX0hBUkRfUkVHX1NFVChUTykgIFwKK2RvIHsgSEFSRF9SRUdfRUxUX1RZUEUgKnNjYW5fdHBfID0gKFRPKTsJCQlcCisgICAgIHNjYW5fdHBfWzBdID0gLTE7CQkJCQkJXAorICAgICBzY2FuX3RwX1sxXSA9IC0xOwkJCQkJCVwKKyAgICAgc2Nhbl90cF9bMl0gPSAtMTsJCQkJCQlcCisgICAgIHNjYW5fdHBfWzNdID0gLTE7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgQ09QWV9IQVJEX1JFR19TRVQoVE8sIEZST00pICBcCitkbyB7IEhBUkRfUkVHX0VMVF9UWVBFICpzY2FuX3RwXyA9IChUTyksICpzY2FuX2ZwXyA9IChGUk9NKTsJXAorICAgICBzY2FuX3RwX1swXSA9IHNjYW5fZnBfWzBdOwkJCQkJXAorICAgICBzY2FuX3RwX1sxXSA9IHNjYW5fZnBfWzFdOwkJCQkJXAorICAgICBzY2FuX3RwX1syXSA9IHNjYW5fZnBfWzJdOwkJCQkJXAorICAgICBzY2FuX3RwX1szXSA9IHNjYW5fZnBfWzNdOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIENPTVBMX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgIFwKK2RvIHsgSEFSRF9SRUdfRUxUX1RZUEUgKnNjYW5fdHBfID0gKFRPKSwgKnNjYW5fZnBfID0gKEZST00pOyAJXAorICAgICBzY2FuX3RwX1swXSA9IH4gc2Nhbl9mcF9bMF07CQkJCVwKKyAgICAgc2Nhbl90cF9bMV0gPSB+IHNjYW5fZnBfWzFdOwkJCQlcCisgICAgIHNjYW5fdHBfWzJdID0gfiBzY2FuX2ZwX1syXTsJCQkJXAorICAgICBzY2FuX3RwX1szXSA9IH4gc2Nhbl9mcF9bM107IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgQU5EX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgIFwKK2RvIHsgSEFSRF9SRUdfRUxUX1RZUEUgKnNjYW5fdHBfID0gKFRPKSwgKnNjYW5fZnBfID0gKEZST00pOyAJXAorICAgICBzY2FuX3RwX1swXSAmPSBzY2FuX2ZwX1swXTsJCQkJXAorICAgICBzY2FuX3RwX1sxXSAmPSBzY2FuX2ZwX1sxXTsJCQkJXAorICAgICBzY2FuX3RwX1syXSAmPSBzY2FuX2ZwX1syXTsJCQkJXAorICAgICBzY2FuX3RwX1szXSAmPSBzY2FuX2ZwX1szXTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBBTkRfQ09NUExfSEFSRF9SRUdfU0VUKFRPLCBGUk9NKSAgXAorZG8geyBIQVJEX1JFR19FTFRfVFlQRSAqc2Nhbl90cF8gPSAoVE8pLCAqc2Nhbl9mcF8gPSAoRlJPTSk7IAlcCisgICAgIHNjYW5fdHBfWzBdICY9IH4gc2Nhbl9mcF9bMF07CQkJCVwKKyAgICAgc2Nhbl90cF9bMV0gJj0gfiBzY2FuX2ZwX1sxXTsJCQkJXAorICAgICBzY2FuX3RwX1syXSAmPSB+IHNjYW5fZnBfWzJdOwkJCQlcCisgICAgIHNjYW5fdHBfWzNdICY9IH4gc2Nhbl9mcF9bM107IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSU9SX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgIFwKK2RvIHsgSEFSRF9SRUdfRUxUX1RZUEUgKnNjYW5fdHBfID0gKFRPKSwgKnNjYW5fZnBfID0gKEZST00pOyAJXAorICAgICBzY2FuX3RwX1swXSB8PSBzY2FuX2ZwX1swXTsJCQkJXAorICAgICBzY2FuX3RwX1sxXSB8PSBzY2FuX2ZwX1sxXTsJCQkJXAorICAgICBzY2FuX3RwX1syXSB8PSBzY2FuX2ZwX1syXTsJCQkJXAorICAgICBzY2FuX3RwX1szXSB8PSBzY2FuX2ZwX1szXTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBJT1JfQ09NUExfSEFSRF9SRUdfU0VUKFRPLCBGUk9NKSAgXAorZG8geyBIQVJEX1JFR19FTFRfVFlQRSAqc2Nhbl90cF8gPSAoVE8pLCAqc2Nhbl9mcF8gPSAoRlJPTSk7IAlcCisgICAgIHNjYW5fdHBfWzBdIHw9IH4gc2Nhbl9mcF9bMF07CQkJCVwKKyAgICAgc2Nhbl90cF9bMV0gfD0gfiBzY2FuX2ZwX1sxXTsJCQkJXAorICAgICBzY2FuX3RwX1syXSB8PSB+IHNjYW5fZnBfWzJdOwkJCQlcCisgICAgIHNjYW5fdHBfWzNdIHw9IH4gc2Nhbl9mcF9bM107IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraGFyZF9yZWdfc2V0X3N1YnNldF9wIChjb25zdCBIQVJEX1JFR19TRVQgeCwgY29uc3QgSEFSRF9SRUdfU0VUIHkpCit7CisgIHJldHVybiAoKHhbMF0gJiB+eVswXSkgPT0gMAorCSAgJiYgKHhbMV0gJiB+eVsxXSkgPT0gMAorCSAgJiYgKHhbMl0gJiB+eVsyXSkgPT0gMAorCSAgJiYgKHhbM10gJiB+eVszXSkgPT0gMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraGFyZF9yZWdfc2V0X2VxdWFsX3AgKGNvbnN0IEhBUkRfUkVHX1NFVCB4LCBjb25zdCBIQVJEX1JFR19TRVQgeSkKK3sKKyAgcmV0dXJuIHhbMF0gPT0geVswXSAmJiB4WzFdID09IHlbMV0gJiYgeFsyXSA9PSB5WzJdICYmIHhbM10gPT0geVszXTsKK30KKworc3RhdGljIGlubGluZSBib29sCitoYXJkX3JlZ19zZXRfaW50ZXJzZWN0X3AgKGNvbnN0IEhBUkRfUkVHX1NFVCB4LCBjb25zdCBIQVJEX1JFR19TRVQgeSkKK3sKKyAgcmV0dXJuICgoeFswXSAmIHlbMF0pICE9IDAKKwkgIHx8ICh4WzFdICYgeVsxXSkgIT0gMAorCSAgfHwgKHhbMl0gJiB5WzJdKSAhPSAwCisJICB8fCAoeFszXSAmIHlbM10pICE9IDApOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2hhcmRfcmVnX3NldF9lbXB0eV9wIChjb25zdCBIQVJEX1JFR19TRVQgeCkKK3sKKyAgcmV0dXJuIHhbMF0gPT0gMCAmJiB4WzFdID09IDAgJiYgeFsyXSA9PSAwICYmIHhbM10gPT0gMDsKK30KKworI2Vsc2UgLyogRklSU1RfUFNFVURPX1JFR0lTVEVSID4gNCpIT1NUX0JJVFNfUEVSX1dJREVTVF9GQVNUX0lOVCAqLworCisjZGVmaW5lIENMRUFSX0hBUkRfUkVHX1NFVChUTykgIFwKK2RvIHsgSEFSRF9SRUdfRUxUX1RZUEUgKnNjYW5fdHBfID0gKFRPKTsJCQlcCisgICAgIGludCBpOwkJCQkJCQlcCisgICAgIGZvciAoaSA9IDA7IGkgPCBIQVJEX1JFR19TRVRfTE9OR1M7IGkrKykJCQlcCisgICAgICAgKnNjYW5fdHBfKysgPSAwOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNFVF9IQVJEX1JFR19TRVQoVE8pICBcCitkbyB7IEhBUkRfUkVHX0VMVF9UWVBFICpzY2FuX3RwXyA9IChUTyk7CQkJXAorICAgICBpbnQgaTsJCQkJCQkJXAorICAgICBmb3IgKGkgPSAwOyBpIDwgSEFSRF9SRUdfU0VUX0xPTkdTOyBpKyspCQkJXAorICAgICAgICpzY2FuX3RwXysrID0gLTE7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgQ09QWV9IQVJEX1JFR19TRVQoVE8sIEZST00pICBcCitkbyB7IEhBUkRfUkVHX0VMVF9UWVBFICpzY2FuX3RwXyA9IChUTyksICpzY2FuX2ZwXyA9IChGUk9NKTsgCVwKKyAgICAgaW50IGk7CQkJCQkJCVwKKyAgICAgZm9yIChpID0gMDsgaSA8IEhBUkRfUkVHX1NFVF9MT05HUzsgaSsrKQkJCVwKKyAgICAgICAqc2Nhbl90cF8rKyA9ICpzY2FuX2ZwXysrOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIENPTVBMX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgIFwKK2RvIHsgSEFSRF9SRUdfRUxUX1RZUEUgKnNjYW5fdHBfID0gKFRPKSwgKnNjYW5fZnBfID0gKEZST00pOyAJXAorICAgICBpbnQgaTsJCQkJCQkJXAorICAgICBmb3IgKGkgPSAwOyBpIDwgSEFSRF9SRUdfU0VUX0xPTkdTOyBpKyspCQkJXAorICAgICAgICpzY2FuX3RwXysrID0gfiAqc2Nhbl9mcF8rKzsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBBTkRfSEFSRF9SRUdfU0VUKFRPLCBGUk9NKSAgXAorZG8geyBIQVJEX1JFR19FTFRfVFlQRSAqc2Nhbl90cF8gPSAoVE8pLCAqc2Nhbl9mcF8gPSAoRlJPTSk7IAlcCisgICAgIGludCBpOwkJCQkJCQlcCisgICAgIGZvciAoaSA9IDA7IGkgPCBIQVJEX1JFR19TRVRfTE9OR1M7IGkrKykJCQlcCisgICAgICAgKnNjYW5fdHBfKysgJj0gKnNjYW5fZnBfKys7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgQU5EX0NPTVBMX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgIFwKK2RvIHsgSEFSRF9SRUdfRUxUX1RZUEUgKnNjYW5fdHBfID0gKFRPKSwgKnNjYW5fZnBfID0gKEZST00pOyAJXAorICAgICBpbnQgaTsJCQkJCQkJXAorICAgICBmb3IgKGkgPSAwOyBpIDwgSEFSRF9SRUdfU0VUX0xPTkdTOyBpKyspCQkJXAorICAgICAgICpzY2FuX3RwXysrICY9IH4gKnNjYW5fZnBfKys7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSU9SX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgIFwKK2RvIHsgSEFSRF9SRUdfRUxUX1RZUEUgKnNjYW5fdHBfID0gKFRPKSwgKnNjYW5fZnBfID0gKEZST00pOyAJXAorICAgICBpbnQgaTsJCQkJCQkJXAorICAgICBmb3IgKGkgPSAwOyBpIDwgSEFSRF9SRUdfU0VUX0xPTkdTOyBpKyspCQkJXAorICAgICAgICpzY2FuX3RwXysrIHw9ICpzY2FuX2ZwXysrOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIElPUl9DT01QTF9IQVJEX1JFR19TRVQoVE8sIEZST00pICBcCitkbyB7IEhBUkRfUkVHX0VMVF9UWVBFICpzY2FuX3RwXyA9IChUTyksICpzY2FuX2ZwXyA9IChGUk9NKTsgCVwKKyAgICAgaW50IGk7CQkJCQkJCVwKKyAgICAgZm9yIChpID0gMDsgaSA8IEhBUkRfUkVHX1NFVF9MT05HUzsgaSsrKQkJCVwKKyAgICAgICAqc2Nhbl90cF8rKyB8PSB+ICpzY2FuX2ZwXysrOyB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2hhcmRfcmVnX3NldF9zdWJzZXRfcCAoY29uc3QgSEFSRF9SRUdfU0VUIHgsIGNvbnN0IEhBUkRfUkVHX1NFVCB5KQoreworICBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgSEFSRF9SRUdfU0VUX0xPTkdTOyBpKyspCisgICAgaWYgKCh4W2ldICYgfnlbaV0pICE9IDApCisgICAgICByZXR1cm4gZmFsc2U7CisgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2hhcmRfcmVnX3NldF9lcXVhbF9wIChjb25zdCBIQVJEX1JFR19TRVQgeCwgY29uc3QgSEFSRF9SRUdfU0VUIHkpCit7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBIQVJEX1JFR19TRVRfTE9OR1M7IGkrKykKKyAgICBpZiAoeFtpXSAhPSB5W2ldKQorICAgICAgcmV0dXJuIGZhbHNlOworICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSBib29sCitoYXJkX3JlZ19zZXRfaW50ZXJzZWN0X3AgKGNvbnN0IEhBUkRfUkVHX1NFVCB4LCBjb25zdCBIQVJEX1JFR19TRVQgeSkKK3sKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IEhBUkRfUkVHX1NFVF9MT05HUzsgaSsrKQorICAgIGlmICgoeFtpXSAmIHlbaV0pICE9IDApCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2hhcmRfcmVnX3NldF9lbXB0eV9wIChjb25zdCBIQVJEX1JFR19TRVQgeCkKK3sKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IEhBUkRfUkVHX1NFVF9MT05HUzsgaSsrKQorICAgIGlmICh4W2ldICE9IDApCisgICAgICByZXR1cm4gZmFsc2U7CisgIHJldHVybiB0cnVlOworfQorCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworLyogSXRlcmF0b3IgZm9yIGhhcmQgcmVnaXN0ZXIgc2V0cy4gICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qIFBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZWxlbWVudC4gICovCisgIEhBUkRfUkVHX0VMVF9UWVBFICpwZWx0OworCisgIC8qIFRoZSBsZW5ndGggb2YgdGhlIHNldC4gICovCisgIHVuc2lnbmVkIHNob3J0IGxlbmd0aDsKKworICAvKiBXb3JkIHdpdGhpbiB0aGUgY3VycmVudCBlbGVtZW50LiAgKi8KKyAgdW5zaWduZWQgc2hvcnQgd29yZF9ubzsKKworICAvKiBDb250ZW50cyBvZiB0aGUgYWN0dWFsbHkgcHJvY2Vzc2VkIHdvcmQuICBXaGVuIGZpbmRpbmcgbmV4dCBiaXQKKyAgICAgaXQgaXMgc2hpZnRlZCByaWdodCwgc28gdGhhdCB0aGUgYWN0dWFsIGJpdCBpcyBhbHdheXMgdGhlIGxlYXN0CisgICAgIHNpZ25pZmljYW50IGJpdCBvZiBBQ1RVQUwuICAqLworICBIQVJEX1JFR19FTFRfVFlQRSBiaXRzOworfSBoYXJkX3JlZ19zZXRfaXRlcmF0b3I7CisKKyNkZWZpbmUgSEFSRF9SRUdfRUxUX0JJVFMgVUhPU1RfQklUU19QRVJfV0lERV9JTlQKKworLyogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBpdGVyYXRvciBmdW5jdGlvbnMgaXMgZnVsbHkgYW5hbG9nb3VzIHRvCisgICB0aGUgYml0bWFwIGl0ZXJhdG9ycy4gICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2hhcmRfcmVnX3NldF9pdGVyX2luaXQgKGhhcmRfcmVnX3NldF9pdGVyYXRvciAqaXRlciwgSEFSRF9SRUdfU0VUIHNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1pbiwgdW5zaWduZWQgKnJlZ25vKQoreworI2lmZGVmIEhBUkRfUkVHX1NFVF9MT05HUworICBpdGVyLT5wZWx0ID0gc2V0OworICBpdGVyLT5sZW5ndGggPSBIQVJEX1JFR19TRVRfTE9OR1M7CisjZWxzZQorICBpdGVyLT5wZWx0ID0gJnNldDsKKyAgaXRlci0+bGVuZ3RoID0gMTsKKyNlbmRpZgorICBpdGVyLT53b3JkX25vID0gbWluIC8gSEFSRF9SRUdfRUxUX0JJVFM7CisgIGlmIChpdGVyLT53b3JkX25vIDwgaXRlci0+bGVuZ3RoKQorICAgIHsKKyAgICAgIGl0ZXItPmJpdHMgPSBpdGVyLT5wZWx0W2l0ZXItPndvcmRfbm9dOworICAgICAgaXRlci0+Yml0cyA+Pj0gbWluICUgSEFSRF9SRUdfRUxUX0JJVFM7CisKKyAgICAgIC8qIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3Qgc2VhcmNoIG9mIHRoZSBuZXh0IGJpdC4gICovCisgICAgICBtaW4gKz0gIWl0ZXItPmJpdHM7CisgICAgfQorICAqcmVnbm8gPSBtaW47Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraGFyZF9yZWdfc2V0X2l0ZXJfc2V0IChoYXJkX3JlZ19zZXRfaXRlcmF0b3IgKml0ZXIsIHVuc2lnbmVkICpyZWdubykKK3sKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgLyogUmV0dXJuIGZhbHNlIHdoZW4gd2UncmUgYWR2YW5jZWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBzZXQuICAqLworICAgICAgaWYgKGl0ZXItPndvcmRfbm8gPj0gaXRlci0+bGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgIGlmIChpdGVyLT5iaXRzKQorICAgICAgICB7CisgICAgICAgICAgLyogRmluZCB0aGUgY29ycmVjdCBiaXQgYW5kIHJldHVybiBpdC4gICovCisgICAgICAgICAgd2hpbGUgKCEoaXRlci0+Yml0cyAmIDEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpdGVyLT5iaXRzID4+PSAxOworICAgICAgICAgICAgICAqcmVnbm8gKz0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gKCpyZWdubyA8IEZJUlNUX1BTRVVET19SRUdJU1RFUik7CisgICAgICAgIH0KKworICAgICAgLyogUm91bmQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCB3b3JkLiAgKi8KKyAgICAgICpyZWdubyA9ICgqcmVnbm8gKyBIQVJEX1JFR19FTFRfQklUUyAtIDEpOworICAgICAgKnJlZ25vIC09ICpyZWdubyAlIEhBUkRfUkVHX0VMVF9CSVRTOworCisgICAgICAvKiBGaW5kIHRoZSBuZXh0IG5vbi16ZXJvIHdvcmQuICAqLworICAgICAgd2hpbGUgKCsraXRlci0+d29yZF9ubyA8IGl0ZXItPmxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgIGl0ZXItPmJpdHMgPSBpdGVyLT5wZWx0W2l0ZXItPndvcmRfbm9dOworICAgICAgICAgIGlmIChpdGVyLT5iaXRzKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgKnJlZ25vICs9IEhBUkRfUkVHX0VMVF9CSVRTOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2hhcmRfcmVnX3NldF9pdGVyX25leHQgKGhhcmRfcmVnX3NldF9pdGVyYXRvciAqaXRlciwgdW5zaWduZWQgKnJlZ25vKQoreworICBpdGVyLT5iaXRzID4+PSAxOworICAqcmVnbm8gKz0gMTsKK30KKworI2RlZmluZSBFWEVDVVRFX0lGX1NFVF9JTl9IQVJEX1JFR19TRVQoU0VULCBNSU4sIFJFR05VTSwgSVRFUikgICAgICAgICAgXAorICBmb3IgKGhhcmRfcmVnX3NldF9pdGVyX2luaXQgKCYoSVRFUiksIChTRVQpLCAoTUlOKSwgJihSRUdOVU0pKTsgICAgICAgXAorICAgICAgIGhhcmRfcmVnX3NldF9pdGVyX3NldCAoJihJVEVSKSwgJihSRUdOVU0pKTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGhhcmRfcmVnX3NldF9pdGVyX25leHQgKCYoSVRFUiksICYoUkVHTlVNKSkpCisKKworLyogRGVmaW5lIHNvbWUgc3RhbmRhcmQgc2V0cyBvZiByZWdpc3RlcnMuICAqLworCisvKiBJbmRleGVkIGJ5IGhhcmQgcmVnaXN0ZXIgbnVtYmVyLCBjb250YWlucyAxIGZvciByZWdpc3RlcnMKKyAgIHRoYXQgYXJlIGZpeGVkIHVzZSAoc3RhY2sgcG9pbnRlciwgcGMsIGZyYW1lIHBvaW50ZXIsIGV0Yy4pLgorICAgVGhlc2UgYXJlIHRoZSByZWdpc3RlcnMgdGhhdCBjYW5ub3QgYmUgdXNlZCB0byBhbGxvY2F0ZQorICAgYSBwc2V1ZG8gcmVnIHdob3NlIGxpZmUgZG9lcyBub3QgY3Jvc3MgY2FsbHMuICAqLworCitleHRlcm4gY2hhciBmaXhlZF9yZWdzW0ZJUlNUX1BTRVVET19SRUdJU1RFUl07CisKKy8qIFRoZSBzYW1lIGluZm8gYXMgYSBIQVJEX1JFR19TRVQuICAqLworCitleHRlcm4gSEFSRF9SRUdfU0VUIGZpeGVkX3JlZ19zZXQ7CisKKy8qIEluZGV4ZWQgYnkgaGFyZCByZWdpc3RlciBudW1iZXIsIGNvbnRhaW5zIDEgZm9yIHJlZ2lzdGVycworICAgdGhhdCBhcmUgZml4ZWQgdXNlIG9yIGFyZSBjbG9iYmVyZWQgYnkgZnVuY3Rpb24gY2FsbHMuCisgICBUaGVzZSBhcmUgdGhlIHJlZ2lzdGVycyB0aGF0IGNhbm5vdCBiZSB1c2VkIHRvIGFsbG9jYXRlCisgICBhIHBzZXVkbyByZWcgd2hvc2UgbGlmZSBjcm9zc2VzIGNhbGxzLiAgKi8KKworZXh0ZXJuIGNoYXIgY2FsbF91c2VkX3JlZ3NbRklSU1RfUFNFVURPX1JFR0lTVEVSXTsKKworI2lmZGVmIENBTExfUkVBTExZX1VTRURfUkVHSVNURVJTCitleHRlcm4gY2hhciBjYWxsX3JlYWxseV91c2VkX3JlZ3NbXTsKKyNlbmRpZgorCisvKiBUaGUgc2FtZSBpbmZvIGFzIGEgSEFSRF9SRUdfU0VULiAgKi8KKworZXh0ZXJuIEhBUkRfUkVHX1NFVCBjYWxsX3VzZWRfcmVnX3NldDsKKworLyogQ29udGFpbnMgcmVnaXN0ZXJzIHRoYXQgYXJlIGZpeGVkIHVzZSAtLSBpLmUuIGluIGZpeGVkX3JlZ19zZXQgLS0gb3IKKyAgIGEgZnVuY3Rpb24gdmFsdWUgcmV0dXJuIHJlZ2lzdGVyIG9yIFRBUkdFVF9TVFJVQ1RfVkFMVUVfUlRYIG9yCisgICBTVEFUSUNfQ0hBSU5fUkVHTlVNLiAgVGhlc2UgYXJlIHRoZSByZWdpc3RlcnMgdGhhdCBjYW5ub3QgaG9sZCBxdWFudGl0aWVzCisgICBhY3Jvc3MgY2FsbHMgZXZlbiBpZiB3ZSBhcmUgd2lsbGluZyB0byBzYXZlIGFuZCByZXN0b3JlIHRoZW0uICAqLworCitleHRlcm4gSEFSRF9SRUdfU0VUIGNhbGxfZml4ZWRfcmVnX3NldDsKKworLyogSW5kZXhlZCBieSBoYXJkIHJlZ2lzdGVyIG51bWJlciwgY29udGFpbnMgMSBmb3IgcmVnaXN0ZXJzCisgICB0aGF0IGFyZSBiZWluZyB1c2VkIGZvciBnbG9iYWwgcmVnaXN0ZXIgZGVjbHMuCisgICBUaGVzZSBtdXN0IGJlIGV4ZW1wdCBmcm9tIG9yZGluYXJ5IGZsb3cgYW5hbHlzaXMKKyAgIGFuZCBhcmUgYWxzbyBjb25zaWRlcmVkIGZpeGVkLiAgKi8KKworZXh0ZXJuIGNoYXIgZ2xvYmFsX3JlZ3NbRklSU1RfUFNFVURPX1JFR0lTVEVSXTsKKworLyogQ29udGFpbnMgMSBmb3IgcmVnaXN0ZXJzIHRoYXQgYXJlIHNldCBvciBjbG9iYmVyZWQgYnkgY2FsbHMuICAqLworLyogPz8/IElkZWFsbHksIHRoaXMgd291bGQgYmUganVzdCBjYWxsX3VzZWRfcmVncyBwbHVzIGdsb2JhbF9yZWdzLCBidXQKKyAgIGZvciBzb21lb25lJ3MgYnJpZ2h0IGlkZWEgdG8gaGF2ZSBjYWxsX3VzZWRfcmVncyBzdHJpY3RseSBpbmNsdWRlCisgICBmaXhlZF9yZWdzLiAgV2hpY2ggbGVhdmVzIHVzIGd1ZXNzaW5nIGFzIHRvIHRoZSBzZXQgb2YgZml4ZWRfcmVncworICAgdGhhdCBhcmUgYWN0dWFsbHkgcHJlc2VydmVkLiAgV2Uga25vdyBmb3Igc3VyZSB0aGF0IHRob3NlIGFzc29jaWF0ZWQKKyAgIHdpdGggdGhlIGxvY2FsIHN0YWNrIGZyYW1lIGFyZSBzYWZlLCBidXQgc2NhbnQgb3RoZXJzLiAgKi8KKworZXh0ZXJuIEhBUkRfUkVHX1NFVCByZWdzX2ludmFsaWRhdGVkX2J5X2NhbGw7CisKKy8qIENhbGwgdXNlZCBoYXJkIHJlZ2lzdGVycyB3aGljaCBjYW4gbm90IGJlIHNhdmVkIGJlY2F1c2UgdGhlcmUgaXMgbm8KKyAgIGluc24gZm9yIHRoaXMuICAqLworCitleHRlcm4gSEFSRF9SRUdfU0VUIG5vX2NhbGxlcl9zYXZlX3JlZ19zZXQ7CisKKyNpZmRlZiBSRUdfQUxMT0NfT1JERVIKKy8qIFRhYmxlIG9mIHJlZ2lzdGVyIG51bWJlcnMgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRvIHRyeSB0byB1c2UgdGhlbS4gICovCisKK2V4dGVybiBpbnQgcmVnX2FsbG9jX29yZGVyW0ZJUlNUX1BTRVVET19SRUdJU1RFUl07CisKKy8qIFRoZSBpbnZlcnNlIG9mIHJlZ19hbGxvY19vcmRlci4gICovCisKK2V4dGVybiBpbnQgaW52X3JlZ19hbGxvY19vcmRlcltGSVJTVF9QU0VVRE9fUkVHSVNURVJdOworI2VuZGlmCisKKy8qIEZvciBlYWNoIHJlZyBjbGFzcywgYSBIQVJEX1JFR19TRVQgc2F5aW5nIHdoaWNoIHJlZ2lzdGVycyBhcmUgaW4gaXQuICAqLworCitleHRlcm4gSEFSRF9SRUdfU0VUIHJlZ19jbGFzc19jb250ZW50c1tOX1JFR19DTEFTU0VTXTsKKworLyogRm9yIGVhY2ggcmVnIGNsYXNzLCBudW1iZXIgb2YgcmVncyBpdCBjb250YWlucy4gICovCisKK2V4dGVybiB1bnNpZ25lZCBpbnQgcmVnX2NsYXNzX3NpemVbTl9SRUdfQ0xBU1NFU107CisKKy8qIEZvciBlYWNoIHJlZyBjbGFzcywgdGFibGUgbGlzdGluZyBhbGwgdGhlIGNsYXNzZXMgY29udGFpbmVkIGluIGl0LiAgKi8KKworZXh0ZXJuIGVudW0gcmVnX2NsYXNzIHJlZ19jbGFzc19zdWJjbGFzc2VzW05fUkVHX0NMQVNTRVNdW05fUkVHX0NMQVNTRVNdOworCisvKiBGb3IgZWFjaCBwYWlyIG9mIHJlZyBjbGFzc2VzLAorICAgYSBsYXJnZXN0IHJlZyBjbGFzcyBjb250YWluZWQgaW4gdGhlaXIgdW5pb24uICAqLworCitleHRlcm4gZW51bSByZWdfY2xhc3MgcmVnX2NsYXNzX3N1YnVuaW9uW05fUkVHX0NMQVNTRVNdW05fUkVHX0NMQVNTRVNdOworCisvKiBGb3IgZWFjaCBwYWlyIG9mIHJlZyBjbGFzc2VzLAorICAgdGhlIHNtYWxsZXN0IHJlZyBjbGFzcyB0aGF0IGNvbnRhaW5zIHRoZWlyIHVuaW9uLiAgKi8KKworZXh0ZXJuIGVudW0gcmVnX2NsYXNzIHJlZ19jbGFzc19zdXBlcnVuaW9uW05fUkVHX0NMQVNTRVNdW05fUkVHX0NMQVNTRVNdOworCisvKiBWZWN0b3IgaW5kZXhlZCBieSBoYXJkd2FyZSByZWcgZ2l2aW5nIGl0cyBuYW1lLiAgKi8KKworZXh0ZXJuIGNvbnN0IGNoYXIgKiByZWdfbmFtZXNbRklSU1RfUFNFVURPX1JFR0lTVEVSXTsKKworLyogVmVjdG9yIGluZGV4ZWQgYnkgcmVnIGNsYXNzIGdpdmluZyBpdHMgbmFtZS4gICovCisKK2V4dGVybiBjb25zdCBjaGFyICogcmVnX2NsYXNzX25hbWVzW107CisKKy8qIEdpdmVuIGEgaGFyZCBSRUdOIGEgRlJPTSBtb2RlIGFuZCBhIFRPIG1vZGUsIHJldHVybiBub256ZXJvIGlmCisgICBSRUdOIGNhbm5vdCBjaGFuZ2UgbW9kZXMgYmV0d2VlbiB0aGUgc3BlY2lmaWVkIG1vZGVzLiAgKi8KKyNkZWZpbmUgUkVHX0NBTk5PVF9DSEFOR0VfTU9ERV9QKFJFR04sIEZST00sIFRPKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgQ0FOTk9UX0NIQU5HRV9NT0RFX0NMQVNTIChGUk9NLCBUTywgUkVHTk9fUkVHX0NMQVNTIChSRUdOKSkKKworI2VuZGlmIC8qICEgR0NDX0hBUkRfUkVHX1NFVF9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvaGFzaHRhYi5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2hhc2h0YWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2Q0MDZkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2hhc2h0YWIuaApAQCAtMCwwICsxLDIwNiBAQAorLyogQW4gZXhwYW5kYWJsZSBoYXNoIHRhYmxlcyBkYXRhdHlwZS4gIAorICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA5CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IFZsYWRpbWlyIE1ha2Fyb3YgKHZtYWthcm92QGN5Z251cy5jb20pLgorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKy8qIFRoaXMgcGFja2FnZSBpbXBsZW1lbnRzIGJhc2ljIGhhc2ggdGFibGUgZnVuY3Rpb25hbGl0eS4gIEl0IGlzIHBvc3NpYmxlCisgICB0byBzZWFyY2ggZm9yIGFuIGVudHJ5LCBjcmVhdGUgYW4gZW50cnkgYW5kIGRlc3Ryb3kgYW4gZW50cnkuCisKKyAgIEVsZW1lbnRzIGluIHRoZSB0YWJsZSBhcmUgZ2VuZXJpYyBwb2ludGVycy4KKworICAgVGhlIHNpemUgb2YgdGhlIHRhYmxlIGlzIG5vdCBmaXhlZDsgaWYgdGhlIG9jY3VwYW5jeSBvZiB0aGUgdGFibGUKKyAgIGdyb3dzIHRvbyBoaWdoIHRoZSBoYXNoIHRhYmxlIHdpbGwgYmUgZXhwYW5kZWQuCisKKyAgIFRoZSBhYnN0cmFjdCBkYXRhIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIGdlbmVyYWxpemVkIEFsZ29yaXRobSBECisgICBmcm9tIEtudXRoJ3MgYm9vayAiVGhlIGFydCBvZiBjb21wdXRlciBwcm9ncmFtbWluZyIuICBIYXNoIHRhYmxlIGlzCisgICBleHBhbmRlZCBieSBjcmVhdGlvbiBvZiBuZXcgaGFzaCB0YWJsZSBhbmQgdHJhbnNmZXJyaW5nIGVsZW1lbnRzIGZyb20KKyAgIHRoZSBvbGQgdGFibGUgdG8gdGhlIG5ldyB0YWJsZS4gICovCisKKyNpZm5kZWYgX19IQVNIVEFCX0hfXworI2RlZmluZSBfX0hBU0hUQUJfSF9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2luY2x1ZGUgImFuc2lkZWNsLmgiCisKKyNpZm5kZWYgR1RZCisjZGVmaW5lIEdUWShYKQorI2VuZGlmCisKKy8qIFRoZSB0eXBlIGZvciBhIGhhc2ggY29kZS4gICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBoYXNodmFsX3Q7CisKKy8qIENhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZXMuICAqLworCisvKiBDYWxjdWxhdGUgaGFzaCBvZiBhIHRhYmxlIGVudHJ5LiAgKi8KK3R5cGVkZWYgaGFzaHZhbF90ICgqaHRhYl9oYXNoKSAoY29uc3Qgdm9pZCAqKTsKKworLyogQ29tcGFyZSBhIHRhYmxlIGVudHJ5IHdpdGggYSBwb3NzaWJsZSBlbnRyeS4gIFRoZSBlbnRyeSBhbHJlYWR5IGluCisgICB0aGUgdGFibGUgYWx3YXlzIGNvbWVzIGZpcnN0LCBzbyB0aGUgc2Vjb25kIGVsZW1lbnQgY2FuIGJlIG9mIGEKKyAgIGRpZmZlcmVudCB0eXBlIChidXQgaW4gdGhpcyBjYXNlIGh0YWJfZmluZCBhbmQgaHRhYl9maW5kX3Nsb3QKKyAgIGNhbm5vdCBiZSB1c2VkOyBpbnN0ZWFkIHRoZSB2YXJpYW50cyB0aGF0IGFjY2VwdCBhIGhhc2ggdmFsdWUKKyAgIG11c3QgYmUgdXNlZCkuICAqLwordHlwZWRlZiBpbnQgKCpodGFiX2VxKSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOworCisvKiBDbGVhbnVwIGZ1bmN0aW9uIGNhbGxlZCB3aGVuZXZlciBhIGxpdmUgZWxlbWVudCBpcyByZW1vdmVkIGZyb20KKyAgIHRoZSBoYXNoIHRhYmxlLiAgKi8KK3R5cGVkZWYgdm9pZCAoKmh0YWJfZGVsKSAodm9pZCAqKTsKKyAgCisvKiBGdW5jdGlvbiBjYWxsZWQgYnkgaHRhYl90cmF2ZXJzZSBmb3IgZWFjaCBsaXZlIGVsZW1lbnQuICBUaGUgZmlyc3QKKyAgIGFyZyBpcyB0aGUgc2xvdCBvZiB0aGUgZWxlbWVudCAod2hpY2ggY2FuIGJlIHBhc3NlZCB0byBodGFiX2NsZWFyX3Nsb3QKKyAgIGlmIGRlc2lyZWQpLCB0aGUgc2Vjb25kIGFyZyBpcyB0aGUgYXV4aWxpYXJ5IHBvaW50ZXIgaGFuZGVkIHRvCisgICBodGFiX3RyYXZlcnNlLiAgUmV0dXJuIDEgdG8gY29udGludWUgc2NhbiwgMCB0byBzdG9wLiAgKi8KK3R5cGVkZWYgaW50ICgqaHRhYl90cmF2KSAodm9pZCAqKiwgdm9pZCAqKTsKKworLyogTWVtb3J5LWFsbG9jYXRpb24gZnVuY3Rpb24sIHdpdGggdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBhcyBjYWxsb2MoKS4KKyAgIElmZiBpdCByZXR1cm5zIE5VTEwsIHRoZSBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uIHdpbGwgcGFzcyBhbiBlcnJvcgorICAgY29kZSBiYWNrIHRvIHRoZSB1c2VyLCBzbyBpZiB5b3VyIGNvZGUgZG9lc24ndCBoYW5kbGUgZXJyb3JzLAorICAgYmVzdCBpZiB5b3UgdXNlIHhjYWxsb2MgaW5zdGVhZC4gICovCit0eXBlZGVmIHZvaWQgKigqaHRhYl9hbGxvYykgKHNpemVfdCwgc2l6ZV90KTsKKworLyogV2UgYWxzbyBuZWVkIGEgZnJlZSgpIHJvdXRpbmUuICAqLwordHlwZWRlZiB2b2lkICgqaHRhYl9mcmVlKSAodm9pZCAqKTsKKworLyogTWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbjsgdmFyaWFudHMgd2hpY2ggdGFrZSBhbiBleHRyYQorICAgYXJndW1lbnQuICAqLwordHlwZWRlZiB2b2lkICooKmh0YWJfYWxsb2Nfd2l0aF9hcmcpICh2b2lkICosIHNpemVfdCwgc2l6ZV90KTsKK3R5cGVkZWYgdm9pZCAoKmh0YWJfZnJlZV93aXRoX2FyZykgKHZvaWQgKiwgdm9pZCAqKTsKKworLyogVGhpcyBtYWNybyBkZWZpbmVzIHJlc2VydmVkIHZhbHVlIGZvciBlbXB0eSB0YWJsZSBlbnRyeS4gICovCisKKyNkZWZpbmUgSFRBQl9FTVBUWV9FTlRSWSAgICAoKFBUUikgMCkKKworLyogVGhpcyBtYWNybyBkZWZpbmVzIHJlc2VydmVkIHZhbHVlIGZvciB0YWJsZSBlbnRyeSB3aGljaCBjb250YWluZWQKKyAgIGEgZGVsZXRlZCBlbGVtZW50LiAqLworCisjZGVmaW5lIEhUQUJfREVMRVRFRF9FTlRSWSAgKChQVFIpIDEpCisKKy8qIEhhc2ggdGFibGVzIGFyZSBvZiB0aGUgZm9sbG93aW5nIHR5cGUuICBUaGUgc3RydWN0dXJlCisgICAoaW1wbGVtZW50YXRpb24pIG9mIHRoaXMgdHlwZSBpcyBub3QgbmVlZGVkIGZvciB1c2luZyB0aGUgaGFzaAorICAgdGFibGVzLiAgQWxsIHdvcmsgd2l0aCBoYXNoIHRhYmxlIHNob3VsZCBiZSBleGVjdXRlZCBvbmx5IHRocm91Z2gKKyAgIGZ1bmN0aW9ucyBtZW50aW9uZWQgYmVsb3cuICBUaGUgc2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSBpcyBzdWJqZWN0IHRvCisgICBjaGFuZ2UuICAqLworCitzdHJ1Y3QgR1RZKCgpKSBodGFiIHsKKyAgLyogUG9pbnRlciB0byBoYXNoIGZ1bmN0aW9uLiAgKi8KKyAgaHRhYl9oYXNoIGhhc2hfZjsKKworICAvKiBQb2ludGVyIHRvIGNvbXBhcmlzb24gZnVuY3Rpb24uICAqLworICBodGFiX2VxIGVxX2Y7CisKKyAgLyogUG9pbnRlciB0byBjbGVhbnVwIGZ1bmN0aW9uLiAgKi8KKyAgaHRhYl9kZWwgZGVsX2Y7CisKKyAgLyogVGFibGUgaXRzZWxmLiAgKi8KKyAgdm9pZCAqKiBHVFkgKCh1c2VfcGFyYW0sIGxlbmd0aCAoIiVoLnNpemUiKSkpIGVudHJpZXM7CisKKyAgLyogQ3VycmVudCBzaXplIChpbiBlbnRyaWVzKSBvZiB0aGUgaGFzaCB0YWJsZS4gICovCisgIHNpemVfdCBzaXplOworCisgIC8qIEN1cnJlbnQgbnVtYmVyIG9mIGVsZW1lbnRzIGluY2x1ZGluZyBhbHNvIGRlbGV0ZWQgZWxlbWVudHMuICAqLworICBzaXplX3Qgbl9lbGVtZW50czsKKworICAvKiBDdXJyZW50IG51bWJlciBvZiBkZWxldGVkIGVsZW1lbnRzIGluIHRoZSB0YWJsZS4gICovCisgIHNpemVfdCBuX2RlbGV0ZWQ7CisKKyAgLyogVGhlIGZvbGxvd2luZyBtZW1iZXIgaXMgdXNlZCBmb3IgZGVidWdnaW5nLiBJdHMgdmFsdWUgaXMgbnVtYmVyCisgICAgIG9mIGFsbCBjYWxscyBvZiBgaHRhYl9maW5kX3Nsb3QnIGZvciB0aGUgaGFzaCB0YWJsZS4gKi8KKyAgdW5zaWduZWQgaW50IHNlYXJjaGVzOworCisgIC8qIFRoZSBmb2xsb3dpbmcgbWVtYmVyIGlzIHVzZWQgZm9yIGRlYnVnZ2luZy4gIEl0cyB2YWx1ZSBpcyBudW1iZXIKKyAgICAgb2YgY29sbGlzaW9ucyBmaXhlZCBmb3IgdGltZSBvZiB3b3JrIHdpdGggdGhlIGhhc2ggdGFibGUuICovCisgIHVuc2lnbmVkIGludCBjb2xsaXNpb25zOworCisgIC8qIFBvaW50ZXJzIHRvIGFsbG9jYXRlL2ZyZWUgZnVuY3Rpb25zLiAgKi8KKyAgaHRhYl9hbGxvYyBhbGxvY19mOworICBodGFiX2ZyZWUgZnJlZV9mOworCisgIC8qIEFsdGVybmF0ZSBhbGxvY2F0ZS9mcmVlIGZ1bmN0aW9ucywgd2hpY2ggdGFrZSBhbiBleHRyYSBhcmd1bWVudC4gICovCisgIHZvaWQgKiBHVFkoKHNraXApKSBhbGxvY19hcmc7CisgIGh0YWJfYWxsb2Nfd2l0aF9hcmcgYWxsb2Nfd2l0aF9hcmdfZjsKKyAgaHRhYl9mcmVlX3dpdGhfYXJnIGZyZWVfd2l0aF9hcmdfZjsKKworICAvKiBDdXJyZW50IHNpemUgKGluIGVudHJpZXMpIG9mIHRoZSBoYXNoIHRhYmxlLCBhcyBhbiBpbmRleCBpbnRvIHRoZQorICAgICB0YWJsZSBvZiBwcmltZXMuICAqLworICB1bnNpZ25lZCBpbnQgc2l6ZV9wcmltZV9pbmRleDsKK307CisKK3R5cGVkZWYgc3RydWN0IGh0YWIgKmh0YWJfdDsKKworLyogQW4gZW51bSBzYXlpbmcgd2hldGhlciB3ZSBpbnNlcnQgaW50byB0aGUgaGFzaCB0YWJsZSBvciBub3QuICAqLworZW51bSBpbnNlcnRfb3B0aW9uIHtOT19JTlNFUlQsIElOU0VSVH07CisKKy8qIFRoZSBwcm90b3R5cGVzIG9mIHRoZSBwYWNrYWdlIGZ1bmN0aW9ucy4gKi8KKworZXh0ZXJuIGh0YWJfdAlodGFiX2NyZWF0ZV9hbGxvYyAgKHNpemVfdCwgaHRhYl9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRhYl9lcSwgaHRhYl9kZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodGFiX2FsbG9jLCBodGFiX2ZyZWUpOworCitleHRlcm4gaHRhYl90CWh0YWJfY3JlYXRlX2FsbG9jX2V4IChzaXplX3QsIGh0YWJfaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRhYl9lcSwgaHRhYl9kZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiwgaHRhYl9hbGxvY193aXRoX2FyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRhYl9mcmVlX3dpdGhfYXJnKTsKKworLyogQmFja3dhcmQtY29tcGF0aWJpbGl0eSBmdW5jdGlvbnMuICAqLworZXh0ZXJuIGh0YWJfdCBodGFiX2NyZWF0ZSAoc2l6ZV90LCBodGFiX2hhc2gsIGh0YWJfZXEsIGh0YWJfZGVsKTsKK2V4dGVybiBodGFiX3QgaHRhYl90cnlfY3JlYXRlIChzaXplX3QsIGh0YWJfaGFzaCwgaHRhYl9lcSwgaHRhYl9kZWwpOworCitleHRlcm4gdm9pZAlodGFiX3NldF9mdW5jdGlvbnNfZXggKGh0YWJfdCwgaHRhYl9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRhYl9lcSwgaHRhYl9kZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICosIGh0YWJfYWxsb2Nfd2l0aF9hcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodGFiX2ZyZWVfd2l0aF9hcmcpOworCitleHRlcm4gdm9pZAlodGFiX2RlbGV0ZSAoaHRhYl90KTsKK2V4dGVybiB2b2lkCWh0YWJfZW1wdHkgKGh0YWJfdCk7CisKK2V4dGVybiB2b2lkICoJaHRhYl9maW5kIChodGFiX3QsIGNvbnN0IHZvaWQgKik7CitleHRlcm4gdm9pZCAqKglodGFiX2ZpbmRfc2xvdCAoaHRhYl90LCBjb25zdCB2b2lkICosIGVudW0gaW5zZXJ0X29wdGlvbik7CitleHRlcm4gdm9pZCAqCWh0YWJfZmluZF93aXRoX2hhc2ggKGh0YWJfdCwgY29uc3Qgdm9pZCAqLCBoYXNodmFsX3QpOworZXh0ZXJuIHZvaWQgKioJaHRhYl9maW5kX3Nsb3Rfd2l0aF9oYXNoIChodGFiX3QsIGNvbnN0IHZvaWQgKiwKKwkJCQkJICBoYXNodmFsX3QsIGVudW0gaW5zZXJ0X29wdGlvbik7CitleHRlcm4gdm9pZAlodGFiX2NsZWFyX3Nsb3QJKGh0YWJfdCwgdm9pZCAqKik7CitleHRlcm4gdm9pZAlodGFiX3JlbW92ZV9lbHQJKGh0YWJfdCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkCWh0YWJfcmVtb3ZlX2VsdF93aXRoX2hhc2ggKGh0YWJfdCwgdm9pZCAqLCBoYXNodmFsX3QpOworCitleHRlcm4gdm9pZAlodGFiX3RyYXZlcnNlIChodGFiX3QsIGh0YWJfdHJhdiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkCWh0YWJfdHJhdmVyc2Vfbm9yZXNpemUgKGh0YWJfdCwgaHRhYl90cmF2LCB2b2lkICopOworCitleHRlcm4gc2l6ZV90CWh0YWJfc2l6ZSAoaHRhYl90KTsKK2V4dGVybiBzaXplX3QJaHRhYl9lbGVtZW50cyAoaHRhYl90KTsKK2V4dGVybiBkb3VibGUJaHRhYl9jb2xsaXNpb25zCShodGFiX3QpOworCisvKiBBIGhhc2ggZnVuY3Rpb24gZm9yIHBvaW50ZXJzLiAgKi8KK2V4dGVybiBodGFiX2hhc2ggaHRhYl9oYXNoX3BvaW50ZXI7CisKKy8qIEFuIGVxdWFsaXR5IGZ1bmN0aW9uIGZvciBwb2ludGVycy4gICovCitleHRlcm4gaHRhYl9lcSBodGFiX2VxX3BvaW50ZXI7CisKKy8qIEEgaGFzaCBmdW5jdGlvbiBmb3IgbnVsbC10ZXJtaW5hdGVkIHN0cmluZ3MuICAqLworZXh0ZXJuIGhhc2h2YWxfdCBodGFiX2hhc2hfc3RyaW5nIChjb25zdCB2b2lkICopOworCisvKiBBbiBpdGVyYXRpdmUgaGFzaCBmdW5jdGlvbiBmb3IgYXJiaXRyYXJ5IGRhdGEuICAqLworZXh0ZXJuIGhhc2h2YWxfdCBpdGVyYXRpdmVfaGFzaCAoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGhhc2h2YWxfdCk7CisvKiBTaG9ydGhhbmQgZm9yIGhhc2hpbmcgc29tZXRoaW5nIHdpdGggYW4gaW50cmluc2ljIHNpemUuICAqLworI2RlZmluZSBpdGVyYXRpdmVfaGFzaF9vYmplY3QoT0IsSU5JVCkgaXRlcmF0aXZlX2hhc2ggKCZPQiwgc2l6ZW9mIChPQiksIElOSVQpCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBfX0hBU0hUQUJfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2hpZ2hsZXYtcGx1Z2luLWNvbW1vbi5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2hpZ2hsZXYtcGx1Z2luLWNvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZjJkMGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvaGlnaGxldi1wbHVnaW4tY29tbW9uLmgKQEAgLTAsMCArMSwzMyBAQAorLyogSW50ZXJmYWNlIGZvciBoaWdoLWxldmVsIHBsdWdpbnMgaW4gR0NDIC0gUGFydHMgY29tbW9uIGJldHdlZW4gR0NDLAorICAgSUNJIGFuZCBoaWdoLWxldmVsIHBsdWdpbnMuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgQ29udHJpYnV0ZWQgYnkgSU5SSUEuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEhJR0hMRVZfUExVR0lOX0NPTU1PTl9ICisjZGVmaW5lIEhJR0hMRVZfUExVR0lOX0NPTU1PTl9ICisKKy8qIFJldHVybiBjb2RlcyBmb3IgaW52b2tlX3BsdWdpbl9jYWxsYmFja3MgLyBjYWxsX3BsdWdpbl9ldmVudCAuICAqLworI2RlZmluZSBQTFVHRVZUX1NVQ0NFU1MgICAgICAgICAwCisjZGVmaW5lIFBMVUdFVlRfTk9fRVZFTlRTICAgICAgIDEKKyNkZWZpbmUgUExVR0VWVF9OT19TVUNIX0VWRU5UICAgMgorI2RlZmluZSBQTFVHRVZUX05PX0NBTExCQUNLICAgICAzCisKKyNlbmRpZiAvKiBISUdITEVWX1BMVUdJTl9DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2h3aW50LmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvaHdpbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGVjODYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2h3aW50LmgKQEAgLTAsMCArMSwxNjAgQEAKKy8qIEhPU1RfV0lERV9JTlQgZGVmaW5pdGlvbnMgZm9yIHRoZSBHTlUgY29tcGlsZXIuCisgICBDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDIsIDIwMDQsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworICAgUHJvdmlkZSBkZWZpbml0aW9ucyBmb3IgbWFjcm9zIHdoaWNoIGRlcGVuZCBvbiBIT1NUX0JJVFNfUEVSX0lOVAorICAgYW5kIEhPU1RfQklUU19QRVJfTE9ORy4gICovCisKKyNpZm5kZWYgR0NDX0hXSU5UX0gKKyNkZWZpbmUgR0NDX0hXSU5UX0gKKworLyogVGhpcyBkZXNjcmliZXMgdGhlIG1hY2hpbmUgdGhlIGNvbXBpbGVyIGlzIGhvc3RlZCBvbi4gICovCisjZGVmaW5lIEhPU1RfQklUU19QRVJfQ0hBUiAgQ0hBUl9CSVQKKyNkZWZpbmUgSE9TVF9CSVRTX1BFUl9TSE9SVCAoQ0hBUl9CSVQgKiBTSVpFT0ZfU0hPUlQpCisjZGVmaW5lIEhPU1RfQklUU19QRVJfSU5UICAgKENIQVJfQklUICogU0laRU9GX0lOVCkKKyNkZWZpbmUgSE9TVF9CSVRTX1BFUl9MT05HICAoQ0hBUl9CSVQgKiBTSVpFT0ZfTE9ORykKKworLyogVGhlIHN0cmluZyB0aGF0IHNob3VsZCBiZSBpbnNlcnRlZCBpbnRvIGEgcHJpbnRmIHN0eWxlIGZvcm1hdCB0bworICAgaW5kaWNhdGUgYSAibG9uZyIgb3BlcmFuZC4gICovCisjaWZuZGVmIEhPU1RfTE9OR19GT1JNQVQKKyNkZWZpbmUgSE9TVF9MT05HX0ZPUk1BVCAibCIKKyNlbmRpZgorCisvKiBUaGUgc3RyaW5nIHRoYXQgc2hvdWxkIGJlIGluc2VydGVkIGludG8gYSBwcmludGYgc3R5bGUgZm9ybWF0IHRvCisgICBpbmRpY2F0ZSBhICJsb25nIGxvbmciIG9wZXJhbmQuICAqLworI2lmbmRlZiBIT1NUX0xPTkdfTE9OR19GT1JNQVQKKyNkZWZpbmUgSE9TVF9MT05HX0xPTkdfRk9STUFUICJsbCIKKyNlbmRpZgorCisvKiBJZiBIQVZFX0xPTkdfTE9ORyBhbmQgU0laRU9GX0xPTkdfTE9ORyBhcmVuJ3QgZGVmaW5lZCwgYnV0CisgICBHQ0NfVkVSU0lPTiA+PSAzMDAwLCBhc3N1bWUgdGhpcyBpcyB0aGUgc2Vjb25kIG9yIGxhdGVyIHN0YWdlIG9mIGEKKyAgIGJvb3RzdHJhcCwgd2UgZG8gaGF2ZSBsb25nIGxvbmcsIGFuZCBpdCdzIDY0IGJpdHMuICAoVGhpcyBpcworICAgcmVxdWlyZWQgYnkgQzk5OyB3ZSBkbyBoYXZlIHNvbWUgcG9ydHMgdGhhdCB2aW9sYXRlIHRoYXQgYXNzdW1wdGlvbgorICAgYnV0IHRoZXkncmUgYWxsIGNyb3NzLWNvbXBpbGUtb25seS4pICBKdXN0IGluIGNhc2UsIGZvcmNlIGEKKyAgIGNvbnN0cmFpbnQgdmlvbGF0aW9uIGlmIHRoYXQgYXNzdW1wdGlvbiBpcyBpbmNvcnJlY3QuICAqLworI2lmICFkZWZpbmVkIEhBVkVfTE9OR19MT05HCisjIGlmIEdDQ19WRVJTSU9OID49IDMwMDAKKyMgIGRlZmluZSBIQVZFX0xPTkdfTE9ORyAxCisjICBkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyA4CitleHRlcm4gY2hhciBzaXplb2ZfbG9uZ19sb25nX211c3RfYmVfOFtzaXplb2YobG9uZyBsb25nKSA9PSA4ID8gMSA6IC0xXTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9MT05HX0xPTkcKKyMgZGVmaW5lIEhPU1RfQklUU19QRVJfTE9OR0xPTkcgKENIQVJfQklUICogU0laRU9GX0xPTkdfTE9ORykKKyNlbmRpZgorI2lmZGVmIEhBVkVfX19JTlQ2NAorIyBkZWZpbmUgSE9TVF9CSVRTX1BFUl9fX0lOVDY0IChDSEFSX0JJVCAqIFNJWkVPRl9fX0lOVDY0KQorI2VuZGlmCisKKy8qIFNldCBIT1NUX1dJREVfSU5ULiAgVGhpcyBzaG91bGQgYmUgdGhlIHdpZGVzdCBlZmZpY2llbnQgaG9zdAorICAgaW50ZWdlciB0eXBlLiAgSXQgY2FuIGJlIDMyIG9yIDY0IGJpdHMsIGV4Y2VwdCB0aGF0IGlmIHdlIGFyZQorICAgdGFyZ2V0aW5nIGEgbWFjaGluZSB3aXRoIDY0LWJpdCBzaXplX3QgdGhlbiBpdCBoYXMgdG8gYmUgNjQgYml0cy4KKworICAgV2l0aCBhIHNhbmUgQUJJLCAnbG9uZycgaXMgdGhlIGxhcmdlc3QgZWZmaWNpZW50IGhvc3QgaW50ZWdlciB0eXBlLgorICAgVGh1cywgd2UgdXNlIHRoYXQgdW5sZXNzIHdlIGhhdmUgdG8gdXNlICdsb25nIGxvbmcnIG9yICdfX2ludDY0JworICAgYmVjYXVzZSB3ZSdyZSB0YXJnZXRpbmcgYSA2NC1iaXQgbWFjaGluZSBmcm9tIGEgMzItYml0IGhvc3QuICAqLworCisjaWYgSE9TVF9CSVRTX1BFUl9MT05HID49IDY0IHx8ICFkZWZpbmVkIE5FRURfNjRCSVRfSE9TVF9XSURFX0lOVAorIyAgIGRlZmluZSBIT1NUX0JJVFNfUEVSX1dJREVfSU5UIEhPU1RfQklUU19QRVJfTE9ORworIyAgIGRlZmluZSBIT1NUX1dJREVfSU5UIGxvbmcKKyNlbHNlCisjIGlmIEhPU1RfQklUU19QRVJfTE9OR0xPTkcgPj0gNjQKKyMgICBkZWZpbmUgSE9TVF9CSVRTX1BFUl9XSURFX0lOVCBIT1NUX0JJVFNfUEVSX0xPTkdMT05HCisjICAgZGVmaW5lIEhPU1RfV0lERV9JTlQgbG9uZyBsb25nCisjIGVsc2UKKyMgIGlmIEhPU1RfQklUU19QRVJfX19JTlQ2NCA+PSA2NAorIyAgIGRlZmluZSBIT1NUX0JJVFNfUEVSX1dJREVfSU5UIEhPU1RfQklUU19QRVJfX19JTlQ2NAorIyAgIGRlZmluZSBIT1NUX1dJREVfSU5UIF9faW50NjQKKyMgIGVsc2UKKyAgICAjZXJyb3IgIlVuYWJsZSB0byBmaW5kIGEgc3VpdGFibGUgdHlwZSBmb3IgSE9TVF9XSURFX0lOVCIKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworLyogVmFyaW91cyBwcmludGYgZm9ybWF0IHN0cmluZ3MgZm9yIEhPU1RfV0lERV9JTlQuICAqLworCisjaWYgSE9TVF9CSVRTX1BFUl9XSURFX0lOVCA9PSBIT1NUX0JJVFNfUEVSX0xPTkcKKyMgZGVmaW5lIEhPU1RfV0lERV9JTlRfUFJJTlQgSE9TVF9MT05HX0ZPUk1BVAorIyBkZWZpbmUgSE9TVF9XSURFX0lOVF9QUklOVF9DICJMIgorICAvKiAnbG9uZycgbWlnaHQgYmUgMzIgb3IgNjQgYml0cywgYW5kIHRoZSBudW1iZXIgb2YgbGVhZGluZyB6ZXJvZXMKKyAgICAgbXVzdCBiZSB0d2Vha2VkIGFjY29yZGluZ2x5LiAgKi8KKyMgaWYgSE9TVF9CSVRTX1BFUl9XSURFX0lOVCA9PSA2NAorIyAgZGVmaW5lIEhPU1RfV0lERV9JTlRfUFJJTlRfRE9VQkxFX0hFWCBcCisgICAgICIweCUiIEhPU1RfTE9OR19GT1JNQVQgInglMDE2IiBIT1NUX0xPTkdfRk9STUFUICJ4IgorIyBlbHNlCisjICBkZWZpbmUgSE9TVF9XSURFX0lOVF9QUklOVF9ET1VCTEVfSEVYIFwKKyAgICAgIjB4JSIgSE9TVF9MT05HX0ZPUk1BVCAieCUwOCIgSE9TVF9MT05HX0ZPUk1BVCAieCIKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBIT1NUX1dJREVfSU5UX1BSSU5UIEhPU1RfTE9OR19MT05HX0ZPUk1BVAorIyBkZWZpbmUgSE9TVF9XSURFX0lOVF9QUklOVF9DICJMTCIKKyAgLyogV2UgY2FuIGFzc3VtZSB0aGF0ICdsb25nIGxvbmcnIGlzIGF0IGxlYXN0IDY0IGJpdHMuICAqLworIyBkZWZpbmUgSE9TVF9XSURFX0lOVF9QUklOVF9ET1VCTEVfSEVYIFwKKyAgICAiMHglIiBIT1NUX0xPTkdfTE9OR19GT1JNQVQgInglMDE2IiBIT1NUX0xPTkdfTE9OR19GT1JNQVQgIngiCisjZW5kaWYgLyogSE9TVF9CSVRTX1BFUl9XSURFX0lOVCA9PSBIT1NUX0JJVFNfUEVSX0xPTkcgKi8KKworI2RlZmluZSBIT1NUX1dJREVfSU5UX1BSSU5UX0RFQyAiJSIgSE9TVF9XSURFX0lOVF9QUklOVCAiZCIKKyNkZWZpbmUgSE9TVF9XSURFX0lOVF9QUklOVF9ERUNfQyBIT1NUX1dJREVfSU5UX1BSSU5UX0RFQyBIT1NUX1dJREVfSU5UX1BSSU5UX0MKKyNkZWZpbmUgSE9TVF9XSURFX0lOVF9QUklOVF9VTlNJR05FRCAiJSIgSE9TVF9XSURFX0lOVF9QUklOVCAidSIKKyNkZWZpbmUgSE9TVF9XSURFX0lOVF9QUklOVF9IRVggIjB4JSIgSE9TVF9XSURFX0lOVF9QUklOVCAieCIKKworLyogU2V0IEhPU1RfV0lERVNUX0lOVC4gIFRoaXMgaXMgYSA2NC1iaXQgdHlwZSB1bmxlc3MgdGhlIGNvbXBpbGVyCisgICBpbiB1c2UgaGFzIG5vIDY0LWJpdCB0eXBlIGF0IGFsbDsgaW4gdGhhdCBjYXNlIGl0J3MgMzIgYml0cy4gICovCisKKyNpZiBIT1NUX0JJVFNfUEVSX1dJREVfSU5UID49IDY0IFwKKyAgICB8fCAoSE9TVF9CSVRTX1BFUl9MT05HTE9ORyA8IDY0ICYmIEhPU1RfQklUU19QRVJfX19JTlQ2NCA8IDY0KQorIyBkZWZpbmUgSE9TVF9XSURFU1RfSU5UCQkgICAgICBIT1NUX1dJREVfSU5UCisjIGRlZmluZSBIT1NUX0JJVFNfUEVSX1dJREVTVF9JTlQJICAgICAgSE9TVF9CSVRTX1BFUl9XSURFX0lOVAorIyBkZWZpbmUgSE9TVF9XSURFU1RfSU5UX1BSSU5UICAgICAgICAgICAgICAgIEhPU1RfV0lERV9JTlRfUFJJTlQKKyMgZGVmaW5lIEhPU1RfV0lERVNUX0lOVF9QUklOVF9ERUMJICAgICAgSE9TVF9XSURFX0lOVF9QUklOVF9ERUMKKyMgZGVmaW5lIEhPU1RfV0lERVNUX0lOVF9QUklOVF9ERUNfQwkgICAgICBIT1NUX1dJREVfSU5UX1BSSU5UX0RFQ19DCisjIGRlZmluZSBIT1NUX1dJREVTVF9JTlRfUFJJTlRfVU5TSUdORUQJICAgICAgSE9TVF9XSURFX0lOVF9QUklOVF9VTlNJR05FRAorIyBkZWZpbmUgSE9TVF9XSURFU1RfSU5UX1BSSU5UX0hFWAkgICAgICBIT1NUX1dJREVfSU5UX1BSSU5UX0hFWAorIyBkZWZpbmUgSE9TVF9XSURFU1RfSU5UX1BSSU5UX0RPVUJMRV9IRVggICAgIEhPU1RfV0lERV9JTlRfUFJJTlRfRE9VQkxFX0hFWAorI2Vsc2UKKyMgaWYgSE9TVF9CSVRTX1BFUl9MT05HTE9ORyA+PSA2NAorIyAgZGVmaW5lIEhPU1RfQklUU19QRVJfV0lERVNUX0lOVAkgICAgICBIT1NUX0JJVFNfUEVSX0xPTkdMT05HCisjICBkZWZpbmUgSE9TVF9XSURFU1RfSU5UCQkgICAgICBsb25nIGxvbmcKKyMgZWxzZQorIyAgaWYgSE9TVF9CSVRTX1BFUl9fX0lOVDY0ID49IDY0CisjICAgZGVmaW5lIEhPU1RfQklUU19QRVJfV0lERVNUX0lOVAkgICAgICBIT1NUX0JJVFNfUEVSX19fSU5UNjQKKyMgICBkZWZpbmUgSE9TVF9XSURFU1RfSU5UCQkgICAgICBfX2ludDY0CisjICBlbHNlCisgICAgI2Vycm9yICJUaGlzIGxpbmUgc2hvdWxkIGJlIGltcG9zc2libGUgdG8gcmVhY2giCisjICBlbmRpZgorIyBlbmRpZgorIyBkZWZpbmUgSE9TVF9XSURFU1RfSU5UX1BSSU5UICAgICAgICAgICAgICAgIEhPU1RfTE9OR19MT05HX0ZPUk1BVAorIyBkZWZpbmUgSE9TVF9XSURFU1RfSU5UX1BSSU5UX0RFQwkgICAgICAiJSIgSE9TVF9MT05HX0xPTkdfRk9STUFUICJkIgorIyBkZWZpbmUgSE9TVF9XSURFU1RfSU5UX1BSSU5UX0RFQ19DCSAgICAgICIlIiBIT1NUX0xPTkdfTE9OR19GT1JNQVQgImRMTCIKKyMgZGVmaW5lIEhPU1RfV0lERVNUX0lOVF9QUklOVF9VTlNJR05FRAkgICAgICAiJSIgSE9TVF9MT05HX0xPTkdfRk9STUFUICJ1IgorIyBkZWZpbmUgSE9TVF9XSURFU1RfSU5UX1BSSU5UX0hFWAkgICAgICAiMHglIiBIT1NUX0xPTkdfTE9OR19GT1JNQVQgIngiCisjIGRlZmluZSBIT1NUX1dJREVTVF9JTlRfUFJJTlRfRE9VQkxFX0hFWCAgICAgXAorICAgICIweCUiIEhPU1RfTE9OR19MT05HX0ZPUk1BVCAieCUwMTYiIEhPU1RfTE9OR19MT05HX0ZPUk1BVCAieCIKKyNlbmRpZgorCisvKiBEZWZpbmUgSE9TVF9XSURFU1RfRkFTVF9JTlQgdG8gdGhlIHdpZGVzdCBpbnRlZ2VyIHR5cGUgc3VwcG9ydGVkCisgICBlZmZpY2llbnRseSBpbiBoYXJkd2FyZS4gIChUaGF0IGlzLCB0aGUgd2lkZXN0IGludGVnZXIgdHlwZSB0aGF0IGZpdHMKKyAgIGluIGEgaGFyZHdhcmUgcmVnaXN0ZXIuKSAgTm9ybWFsbHkgdGhpcyBpcyAibG9uZyIgYnV0IG9uIHNvbWUgaG9zdHMgaXQKKyAgIHNob3VsZCBiZSAibG9uZyBsb25nIiBvciAiX19pbnQ2NCIuICBUaGlzIGlzIG5vIGNvbnZlbmllbnQgd2F5IHRvCisgICBhdXRvZGV0ZWN0IHRoaXMsIHNvIHN1Y2ggc3lzdGVtcyBtdXN0IHNldCBhIGZsYWcgaW4gY29uZmlnLmhvc3Q7IHNlZSB0aGVyZQorICAgZm9yIGRldGFpbHMuICAqLworCisjaWZkZWYgVVNFX0xPTkdfTE9OR19GT1JfV0lERVNUX0ZBU1RfSU5UCisjICBpZmRlZiBIQVZFX0xPTkdfTE9ORworIyAgICBkZWZpbmUgSE9TVF9XSURFU1RfRkFTVF9JTlQgbG9uZyBsb25nCisjICAgIGRlZmluZSBIT1NUX0JJVFNfUEVSX1dJREVTVF9GQVNUX0lOVCBIT1NUX0JJVFNfUEVSX0xPTkdMT05HCisjICBlbGlmIGRlZmluZWQgKEhBVkVfX19JTlQ2NCkKKyMgICAgZGVmaW5lIEhPU1RfV0lERVNUX0ZBU1RfSU5UIF9faW50NjQKKyMgICAgZGVmaW5lIEhPU1RfQklUU19QRVJfV0lERVNUX0ZBU1RfSU5UIEhPU1RfQklUU19QRVJfX19JTlQ2NAorIyAgZWxzZQorIyAgICBlcnJvciAiWW91ciBob3N0IHNhaWQgaXQgd2FudGVkIHRvIHVzZSBsb25nIGxvbmcgb3IgX19pbnQ2NCBidXQgbmVpdGhlciIKKyMgICAgZXJyb3IgImV4aXN0IgorIyAgZW5kaWYKKyNlbHNlCisjICBkZWZpbmUgSE9TVF9XSURFU1RfRkFTVF9JTlQgbG9uZworIyAgZGVmaW5lIEhPU1RfQklUU19QRVJfV0lERVNUX0ZBU1RfSU5UIEhPU1RfQklUU19QRVJfTE9ORworI2VuZGlmCisKKyNlbmRpZiAvKiAhIEdDQ19IV0lOVF9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvaW5jcGF0aC5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2luY3BhdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjViNmIxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2luY3BhdGguaApAQCAtMCwwICsxLDM0IEBACisvKiBTZXQgdXAgY29tYmluZWQgaW5jbHVkZSBwYXRoIGZvciB0aGUgcHJlcHJvY2Vzc29yLgorICAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCitleHRlcm4gdm9pZCBzcGxpdF9xdW90ZV9jaGFpbiAodm9pZCk7CitleHRlcm4gdm9pZCBhZGRfcGF0aCAoY2hhciAqLCBpbnQsIGludCwgYm9vbCk7CitleHRlcm4gdm9pZCByZWdpc3Rlcl9pbmNsdWRlX2NoYWlucyAoY3BwX3JlYWRlciAqLCBjb25zdCBjaGFyICosCisJCQkJICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKKwkJCQkgICAgIGludCwgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgYWRkX2NwcF9kaXJfcGF0aCAoc3RydWN0IGNwcF9kaXIgKiwgaW50KTsKKworc3RydWN0IHRhcmdldF9jX2luY3BhdGhfcyB7CisgIC8qIERvIGV4dHJhIGluY2x1ZGVzIHByb2Nlc3NpbmcuICBTVERJTkMgaXMgZmFsc2UgaWZmIC1ub3N0ZGluYyB3YXMgZ2l2ZW4uICAqLworICB2b2lkICgqZXh0cmFfcHJlX2luY2x1ZGVzKSAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CisgIHZvaWQgKCpleHRyYV9pbmNsdWRlcykgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworfTsKKworZXh0ZXJuIHN0cnVjdCB0YXJnZXRfY19pbmNwYXRoX3MgdGFyZ2V0X2NfaW5jcGF0aDsKKworZW51bSB7IFFVT1RFID0gMCwgQlJBQ0tFVCwgU1lTVEVNLCBBRlRFUiB9OwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2lucHV0LmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvaW5wdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjAwZGM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2lucHV0LmgKQEAgLTAsMCArMSw3MyBAQAorLyogRGVjbGFyYXRpb25zIGZvciB2YXJpYWJsZXMgcmVsYXRpbmcgdG8gcmVhZGluZyB0aGUgc291cmNlIGZpbGUuCisgICBVc2VkIGJ5IHBhcnNlcnMsIGxleGljYWwgYW5hbHl6ZXJzLCBhbmQgZXJyb3IgbWVzc2FnZSByb3V0aW5lcy4KKyAgIENvcHlyaWdodCAoQykgMTk5MywgMTk5NywgMTk5OCwgMjAwMCwgMjAwMywgMjAwNCwgMjAwNywgMjAwOCwgMjAwOQorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19JTlBVVF9ICisjZGVmaW5lIEdDQ19JTlBVVF9ICisKKyNpbmNsdWRlICJsaW5lLW1hcC5oIgorCitleHRlcm4gR1RZKCgpKSBzdHJ1Y3QgbGluZV9tYXBzICpsaW5lX3RhYmxlOworCisvKiBBIHZhbHVlIHdoaWNoIHdpbGwgbmV2ZXIgYmUgdXNlZCB0byByZXByZXNlbnQgYSByZWFsIGxvY2F0aW9uLiAgKi8KKyNkZWZpbmUgVU5LTk9XTl9MT0NBVElPTiAoKHNvdXJjZV9sb2NhdGlvbikgMCkKKworLyogVGhlIGxvY2F0aW9uIGZvciBkZWNsYXJhdGlvbnMgaW4gIjxidWlsdC1pbj4iICovCisjZGVmaW5lIEJVSUxUSU5TX0xPQ0FUSU9OICgoc291cmNlX2xvY2F0aW9uKSAxKQorCisvKiBsaW5lLW1hcC5jIHJlc2VydmVzIFJFU0VSVkVEX0xPQ0FUSU9OX0NPVU5UIHRvIHRoZSB1c2VyLiAgRW5zdXJlCisgICBib3RoIFVOS05PV05fTE9DQVRJT04gYW5kIEJVSUxUSU5TX0xPQ0FUSU9OIGZpdCBpbnRvIHRoYXQuICAqLworZXh0ZXJuIGNoYXIgYnVpbHRpbnNfbG9jYXRpb25fY2hlY2tbKEJVSUxUSU5TX0xPQ0FUSU9OCisJCQkJICAgICA8IFJFU0VSVkVEX0xPQ0FUSU9OX0NPVU5UKSA/IDEgOiAtMV07CisKK3R5cGVkZWYgc3RydWN0IEdUWSAoKCkpCit7CisgIC8qIFRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZSBpbnZvbHZlZC4gICovCisgIGNvbnN0IGNoYXIgKmZpbGU7CisKKyAgLyogVGhlIGxpbmUtbG9jYXRpb24gaW4gdGhlIHNvdXJjZSBmaWxlLiAgKi8KKyAgaW50IGxpbmU7CisKKyAgaW50IGNvbHVtbjsKKworICAvKiBJbiBhIHN5c3RlbSBoZWFkZXI/LiAqLworICBib29sIHN5c3A7Cit9IGV4cGFuZGVkX2xvY2F0aW9uOworCitleHRlcm4gZXhwYW5kZWRfbG9jYXRpb24gZXhwYW5kX2xvY2F0aW9uIChzb3VyY2VfbG9jYXRpb24pOworCisvKiBIaXN0b3JpY2FsbHkgR0NDIHVzZWQgbG9jYXRpb25fdCwgd2hpbGUgY3BwIHVzZWQgc291cmNlX2xvY2F0aW9uLgorICAgVGhpcyBjb3VsZCBiZSByZW1vdmVkIGJ1dCBpdCBoYXJkbHkgc2VlbXMgd29ydGggdGhlIGVmZm9ydC4gICovCit0eXBlZGVmIHNvdXJjZV9sb2NhdGlvbiBsb2NhdGlvbl90OworCisvKiBUb3AtbGV2ZWwgc291cmNlIGZpbGUuICAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKm1haW5faW5wdXRfZmlsZW5hbWU7CisKK2V4dGVybiBsb2NhdGlvbl90IGlucHV0X2xvY2F0aW9uOworCisjZGVmaW5lIExPQ0FUSU9OX0ZJTEUoTE9DKSAoKGV4cGFuZF9sb2NhdGlvbiAoTE9DKSkuZmlsZSkKKyNkZWZpbmUgTE9DQVRJT05fTElORShMT0MpICgoZXhwYW5kX2xvY2F0aW9uIChMT0MpKS5saW5lKQorCisjZGVmaW5lIGlucHV0X2xpbmUgTE9DQVRJT05fTElORSAoaW5wdXRfbG9jYXRpb24pCisjZGVmaW5lIGlucHV0X2ZpbGVuYW1lIExPQ0FUSU9OX0ZJTEUgKGlucHV0X2xvY2F0aW9uKQorI2RlZmluZSBpbl9zeXN0ZW1faGVhZGVyX2F0KExPQykgKChleHBhbmRfbG9jYXRpb24gKExPQykpLnN5c3AgIT0gMCkKKyNkZWZpbmUgaW5fc3lzdGVtX2hlYWRlciAoaW5fc3lzdGVtX2hlYWRlcl9hdCAoaW5wdXRfbG9jYXRpb24pKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9pbnNuLWNvbnN0YW50cy5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2luc24tY29uc3RhbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUwYjEyOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9pbnNuLWNvbnN0YW50cy5oCkBAIC0wLDAgKzEsMjA0IEBACisvKiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgcHJvZ3JhbSBgZ2VuY29uc3RhbnRzJworICAgZnJvbSB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBmaWxlIGBtZCcuICAqLworCisjaWZuZGVmIEdDQ19JTlNOX0NPTlNUQU5UU19ICisjZGVmaW5lIEdDQ19JTlNOX0NPTlNUQU5UU19ICisKKyNkZWZpbmUgVU5TUEVDX1ZDQUdUIDgwCisjZGVmaW5lIFVOU1BFQ19WU1QyX0xBTkUgMTgyCisjZGVmaW5lIFZVTlNQRUNfUE9PTF9FTkQgMworI2RlZmluZSBVTlNQRUNfVk1MUyAxMjEKKyNkZWZpbmUgVU5TUEVDX0NIRUNLX0FSQ0ggNworI2RlZmluZSBWVU5TUEVDX1dDTVBfRVEgMTIKKyNkZWZpbmUgVlVOU1BFQ19QT09MXzQgNgorI2RlZmluZSBVTlNQRUNfVkNMWiA4NQorI2RlZmluZSBVTlNQRUNfV01BQ1NaIDE1CisjZGVmaW5lIFVOU1BFQ19WRVhUIDkzCisjZGVmaW5lIFZVTlNQRUNfQUxJR044IDExCisjZGVmaW5lIFVOU1BFQ19WUkVDUFMgMTY0CisjZGVmaW5lIFVOU1BFQ19WTEQxX0RVUCAxMDAKKyNkZWZpbmUgVU5TUEVDX1ZMRDNBIDEwNgorI2RlZmluZSBVTlNQRUNfVkxEMl9EVVAgMTAzCisjZGVmaW5lIFVOU1BFQ19WTEQ0QSAxMTEKKyNkZWZpbmUgVU5TUEVDX1dNQUNVWiAxNgorI2RlZmluZSBVTlNQRUNfVkxEM0IgMTA3CisjZGVmaW5lIFVOU1BFQ19WTEQ0X0RVUCAxMTMKKyNkZWZpbmUgVU5TUEVDX1ZMRDRCIDExMgorI2RlZmluZSBVTlNQRUNfVlRSTjEgMTk4CisjZGVmaW5lIFVOU1BFQ19WTUxBTCAxMTgKKyNkZWZpbmUgVU5TUEVDX1ZTVUJXIDE5NQorI2RlZmluZSBVTlNQRUNfVlRSTjIgMTk5CisjZGVmaW5lIFVOU1BFQ19HT1RTWU1fT0ZGIDI0CisjZGVmaW5lIFZVTlNQRUNfVE1DUiAxMAorI2RlZmluZSBVTlNQRUNfVkxEMV9MQU5FIDEwMQorI2RlZmluZSBVTlNQRUNfVkJJQyA3NworI2RlZmluZSBVTlNQRUNfVkxEMl9MQU5FIDEwNAorI2RlZmluZSBVTlNQRUNfVkxEM19MQU5FIDEwOQorI2RlZmluZSBVTlNQRUNfVk1WTiAxMzIKKyNkZWZpbmUgVU5TUEVDX1ZMRDRfTEFORSAxMTQKKyNkZWZpbmUgTEFTVF9BUk1fUkVHTlVNIDE1CisjZGVmaW5lIFVOU1BFQ19UTFMgMjAKKyNkZWZpbmUgVU5TUEVDX1ZRU0hSVU5fTiAxNjEKKyNkZWZpbmUgVU5TUEVDX1ZIQUREIDk3CisjZGVmaW5lIFVOU1BFQ19WUEFERCAxMzYKKyNkZWZpbmUgVU5TUEVDX1ZRRE1VTEwgMTUyCisjZGVmaW5lIFZVTlNQRUNfUE9PTF84IDcKKyNkZWZpbmUgUENfUkVHTlVNIDE1CisjZGVmaW5lIFVOU1BFQ19WU1VCSE4gMTkzCisjZGVmaW5lIFVOU1BFQ19WUURNTFNMIDE0OAorI2RlZmluZSBVTlNQRUNfV1NBRFogMTIKKyNkZWZpbmUgVU5TUEVDX1ZRRE1MQUxfTEFORSAxNDcKKyNkZWZpbmUgVU5TUEVDX1ZIU1VCIDk4CisjZGVmaW5lIFVOU1BFQ19WUURNVUxIIDE1MAorI2RlZmluZSBVTlNQRUNfU0lOIDAKKyNkZWZpbmUgVU5TUEVDX1ZEVVBfTEFORSA5MAorI2RlZmluZSBVTlNQRUNfV1NIVUZIIDgKKyNkZWZpbmUgSVBfUkVHTlVNIDEyCisjZGVmaW5lIFVOU1BFQ19WUE1JTiAxMzkKKyNkZWZpbmUgVlVOU1BFQ19FSF9SRVRVUk4gMjAKKyNkZWZpbmUgVlVOU1BFQ19BTElHTiAyCisjZGVmaW5lIFVOU1BFQ19WTEQzX0RVUCAxMDgKKyNkZWZpbmUgVU5TUEVDX1ZHRVRfTE9XIDk2CisjZGVmaW5lIFVOU1BFQ19WUE1BWCAxMzgKKyNkZWZpbmUgVU5TUEVDX1ZQQURBTCAxMzUKKyNkZWZpbmUgVU5TUEVDX1NUQUNLX0FMSUdOIDIyCisjZGVmaW5lIFVOU1BFQ19WU1QxIDE3OQorI2RlZmluZSBVTlNQRUNfVlNUMiAxODEKKyNkZWZpbmUgVU5TUEVDX1ZSU1FSVEUgMTY4CisjZGVmaW5lIFVOU1BFQ19WU1QzIDE4MworI2RlZmluZSBVTlNQRUNfVlNUNCAxODcKKyNkZWZpbmUgVlVOU1BFQ19QT09MXzE2IDgKKyNkZWZpbmUgVlVOU1BFQ19XQ01QX0dUVSAxMworI2RlZmluZSBVTlNQRUNfVlNSQV9OIDE3NworI2RlZmluZSBVTlNQRUNfVlJFVjMyIDE2NgorI2RlZmluZSBVTlNQRUNfVlNITF9OIDE3MworI2RlZmluZSBVTlNQRUNfVlFNT1ZVTiAxNTUKKyNkZWZpbmUgVU5TUEVDX1ZRQUREIDE0NQorI2RlZmluZSBVTlNQRUNfVkNFUSA4MQorI2RlZmluZSBVTlNQRUNfVlNMSSAxNzYKKyNkZWZpbmUgVU5TUEVDX1ZTSEwgMTcxCisjZGVmaW5lIFVOU1BFQ19WQ0dUIDgzCisjZGVmaW5lIFVOU1BFQ19WQ1ZUX04gODkKKyNkZWZpbmUgVU5TUEVDX1ZDTFMgODQKKyNkZWZpbmUgVU5TUEVDX1ZBQkFMIDY4CisjZGVmaW5lIFVOU1BFQ19WR0VUX0hJR0ggOTQKKyNkZWZpbmUgVU5TUEVDX1ZNTEFfTEFORSAxMTkKKyNkZWZpbmUgVU5TUEVDX1ZPUk4gMTMzCisjZGVmaW5lIFVOU1BFQ19WUkVWNjQgMTY3CisjZGVmaW5lIFVOU1BFQ19WQUJETCA3MAorI2RlZmluZSBVTlNQRUNfVkFEREwgNzQKKyNkZWZpbmUgVU5TUEVDX1ZDVlQgODgKKyNkZWZpbmUgVU5TUEVDX1ZPUlIgMTM0CisjZGVmaW5lIFVOU1BFQ19WUU5FRyAxNTYKKyNkZWZpbmUgVU5TUEVDX1ZCU0wgNzgKKyNkZWZpbmUgVU5TUEVDX1ZRRE1VTExfTEFORSAxNTMKKyNkZWZpbmUgVU5TUEVDX1ZRU0hMX04gMTU4CisjZGVmaW5lIFNQX1JFR05VTSAxMworI2RlZmluZSBMUl9SRUdOVU0gMTQKKyNkZWZpbmUgUjBfUkVHTlVNIDAKKyNkZWZpbmUgVU5TUEVDX1ZQU01JTiAxNDEKKyNkZWZpbmUgVU5TUEVDX1ZRU1VCIDE2MgorI2RlZmluZSBVTlNQRUNfVlBVTUlOIDE0MworI2RlZmluZSBVTlNQRUNfV1NBRCAxMQorI2RlZmluZSBVTlNQRUNfVlFETUxTTF9MQU5FIDE0OQorI2RlZmluZSBVTlNQRUNfUFVTSF9NVUxUIDIKKyNkZWZpbmUgVU5TUEVDX1ZNTFNfTEFORSAxMjMKKyNkZWZpbmUgVU5TUEVDX1ZRQUJTIDE0NAorI2RlZmluZSBVTlNQRUNfVlFTSEwgMTU3CisjZGVmaW5lIFVOU1BFQ19WTVVMTCAxMjgKKyNkZWZpbmUgVU5TUEVDX1ZBRERXIDc1CisjZGVmaW5lIFVOU1BFQ19WTVVMTF9MQU5FIDEzMAorI2RlZmluZSBVTlNQRUNfVk1MU0wgMTIyCisjZGVmaW5lIFVOU1BFQ19WTEQxIDk5CisjZGVmaW5lIFVOU1BFQ19WTEQyIDEwMgorI2RlZmluZSBVTlNQRUNfVkxEMyAxMDUKKyNkZWZpbmUgVU5TUEVDX1ZMRDQgMTEwCisjZGVmaW5lIFVOU1BFQ19WTU9WTCAxMjUKKyNkZWZpbmUgVU5TUEVDX1ZTUkkgMTc4CisjZGVmaW5lIERPTV9DQ19YX0FORF9ZIDAKKyNkZWZpbmUgVU5TUEVDX1ZNT1ZOIDEyNgorI2RlZmluZSBVTlNQRUNfVlpJUDEgMjAzCisjZGVmaW5lIFVOU1BFQ19WUFNNQVggMTQwCisjZGVmaW5lIFVOU1BFQ19WUFVNQVggMTQyCisjZGVmaW5lIFVOU1BFQ19WWklQMiAyMDQKKyNkZWZpbmUgVU5TUEVDX1BJQ19PRkZTRVQgMjMKKyNkZWZpbmUgVU5TUEVDX1ZNTEFMX0xBTkUgMTIwCisjZGVmaW5lIFVOU1BFQ19WUkVWMTYgMTY1CisjZGVmaW5lIFVOU1BFQ19WU1RSVUNURFVNTVkgMTkxCisjZGVmaW5lIFZVTlNQRUNfRVBJTE9HVUUgMQorI2RlZmluZSBVTlNQRUNfV01BQ1MgMTMKKyNkZWZpbmUgVU5TUEVDX1ZBRERITiA3MworI2RlZmluZSBVTlNQRUNfV01BQ1UgMTQKKyNkZWZpbmUgVU5TUEVDX1ZUQkwgMTk2CisjZGVmaW5lIFVOU1BFQ19WRFVQX04gOTEKKyNkZWZpbmUgVU5TUEVDX1ZNTFNMX0xBTkUgMTI0CisjZGVmaW5lIFVOU1BFQ19SQklUIDI2CisjZGVmaW5lIFZVTlNQRUNfQkxPQ0tBR0UgMAorI2RlZmluZSBWVU5TUEVDX1dDTVBfR1QgMTQKKyNkZWZpbmUgVU5TUEVDX1ZRU0hSTl9OIDE2MAorI2RlZmluZSBVTlNQRUNfUElDX1NZTSAzCisjZGVmaW5lIFVOU1BFQ19QSUNfQkFTRSA0CisjZGVmaW5lIFVOU1BFQ19WVEJYIDE5NworI2RlZmluZSBVTlNQRUNfVlRTVCAyMDAKKyNkZWZpbmUgRE9NX0NDX05YX09SX1kgMQorI2RlZmluZSBVTlNQRUNfVlFTSExVX04gMTU5CisjZGVmaW5lIEZQQV9GMF9SRUdOVU0gMTYKKyNkZWZpbmUgVU5QU0VDX0NPUyAxCisjZGVmaW5lIFVOU1BFQ19WUlNRUlRTIDE2OQorI2RlZmluZSBVTlNQRUNfUElDX0xBQkVMIDIxCisjZGVmaW5lIFVOU1BFQ19QUkxHX1NUSyA1CisjZGVmaW5lIFZGUENDX1JFR05VTSAxMjcKKyNkZWZpbmUgVU5TUEVDX1ZRTU9WTiAxNTQKKyNkZWZpbmUgVU5TUEVDX1dNQUREUyAxOAorI2RlZmluZSBVTlNQRUNfQ0xSREkgMTcKKyNkZWZpbmUgVU5TUEVDX0FTSElGVF9TSUdORUQgNjUKKyNkZWZpbmUgVU5TUEVDX1ZBQkEgNjcKKyNkZWZpbmUgVU5TUEVDX1ZSRUNQRSAxNjMKKyNkZWZpbmUgVU5TUEVDX1ZQQURETCAxMzcKKyNkZWZpbmUgVU5TUEVDX1ZBQkQgNjkKKyNkZWZpbmUgVU5TUEVDX1ZBREQgNzIKKyNkZWZpbmUgVU5TUEVDX1ZTVDNBIDE4NAorI2RlZmluZSBWVU5TUEVDX1RNUkMgOQorI2RlZmluZSBVTlNQRUNfVkNHRSA4MgorI2RlZmluZSBVTlNQRUNfVlNUM0IgMTg1CisjZGVmaW5lIFVOU1BFQ19WVVpQMSAyMDEKKyNkZWZpbmUgVU5TUEVDX1ZTVDRBIDE4OAorI2RlZmluZSBVTlNQRUNfVkNPTUJJTkUgODcKKyNkZWZpbmUgVU5TUEVDX1dNQUREVSAxOQorI2RlZmluZSBVTlNQRUNfVkFORCA3NgorI2RlZmluZSBVTlNQRUNfVk1MQSAxMTcKKyNkZWZpbmUgVU5TUEVDX1ZVWlAyIDIwMgorI2RlZmluZSBVTlNQRUNfVlNUNEIgMTg5CisjZGVmaW5lIFVOU1BFQ19WU1QxX0xBTkUgMTgwCisjZGVmaW5lIFVOU1BFQ19BU0hJRlRfVU5TSUdORUQgNjYKKyNkZWZpbmUgVU5TUEVDX1ZTVDNfTEFORSAxODYKKyNkZWZpbmUgVU5TUEVDX1ZTVDRfTEFORSAxOTAKKyNkZWZpbmUgVU5TUEVDX1ZNVUxfTEFORSAxMjkKKyNkZWZpbmUgVU5TUEVDX1ZRRE1MQUwgMTQ2CisjZGVmaW5lIFVOU1BFQ19QUk9MT0dVRV9VU0UgNgorI2RlZmluZSBET01fQ0NfWF9PUl9ZIDIKKyNkZWZpbmUgVU5TUEVDX1ZDQUdFIDc5CisjZGVmaW5lIFVOU1BFQ19WTUFYIDExNQorI2RlZmluZSBWVU5TUEVDX1BPT0xfMSA0CisjZGVmaW5lIFVOU1BFQ19WU1VCIDE5MgorI2RlZmluZSBVTlNQRUNfVlFETVVMSF9MQU5FIDE1MQorI2RlZmluZSBVTlNQRUNfVlNITExfTiAxNzIKKyNkZWZpbmUgVU5TUEVDX1ZNVUxfTiAxMzEKKyNkZWZpbmUgRlBBX0Y3X1JFR05VTSAyMworI2RlZmluZSBVTlNQRUNfV0FDQyA5CisjZGVmaW5lIFZVTlNQRUNfUE9PTF8yIDUKKyNkZWZpbmUgVU5TUEVDX1RNT1ZNU0sgMTAKKyNkZWZpbmUgVU5TUEVDX1ZNSU4gMTE2CisjZGVmaW5lIFVOU1BFQ19WU0hSX04gMTc0CisjZGVmaW5lIFVOU1BFQ19WR0VUX0xBTkUgOTUKKyNkZWZpbmUgVU5TUEVDX1RIVU1CMV9DQVNFU0kgMjUKKyNkZWZpbmUgVU5TUEVDX1ZTSFJOX04gMTc1CisjZGVmaW5lIFVOU1BFQ19WU1VCTCAxOTQKKyNkZWZpbmUgVU5TUEVDX1ZFT1IgOTIKKyNkZWZpbmUgVU5TUEVDX1ZDTlQgODYKKyNkZWZpbmUgVU5TUEVDX1ZTRVRfTEFORSAxNzAKKyNkZWZpbmUgVU5TUEVDX1ZNVUwgMTI3CisjZGVmaW5lIENDX1JFR05VTSAyNAorI2RlZmluZSBVTlNQRUNfVkFCUyA3MQorCisjZW5kaWYgLyogR0NDX0lOU05fQ09OU1RBTlRTX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9pbnNuLWZsYWdzLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvaW5zbi1mbGFncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYzg5NjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvaW5zbi1mbGFncy5oCkBAIC0wLDAgKzEsMzE4OSBAQAorLyogR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHByb2dyYW0gYGdlbmZsYWdzJworICAgZnJvbSB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBmaWxlIGBtZCcuICAqLworCisjaWZuZGVmIEdDQ19JTlNOX0ZMQUdTX0gKKyNkZWZpbmUgR0NDX0lOU05fRkxBR1NfSAorCisjZGVmaW5lIEhBVkVfbXVsaGlzaTMgKFRBUkdFVF9EU1BfTVVMVElQTFkpCisjZGVmaW5lIEhBVkVfYW5kZGkzIChUQVJHRVRfMzJCSVQgJiYgISBUQVJHRVRfSVdNTVhUKQorI2RlZmluZSBIQVZFX2luc3ZfemVybyAoYXJtX2FyY2hfdGh1bWIyKQorI2RlZmluZSBIQVZFX2luc3ZfdDIgKGFybV9hcmNoX3RodW1iMikKKyNkZWZpbmUgSEFWRV9hbmRzaV9ub3RzaV9zaSAoVEFSR0VUXzMyQklUKQorI2RlZmluZSBIQVZFX2JpY3NpMyAoVEFSR0VUX1RIVU1CMSkKKyNkZWZpbmUgSEFWRV9hbmRzaV9ub3Rfc2hpZnRzaV9zaSAoVEFSR0VUX0FSTSkKKyNkZWZpbmUgSEFWRV9pb3JkaTMgKFRBUkdFVF8zMkJJVCAmJiAhIFRBUkdFVF9JV01NWFQpCisjZGVmaW5lIEhBVkVfeG9yZGkzIChUQVJHRVRfMzJCSVQgJiYgIVRBUkdFVF9JV01NWFQpCisjZGVmaW5lIEhBVkVfYXJtX2FzaGxkaTNfMWJpdCAoVEFSR0VUXzMyQklUKQorI2RlZmluZSBIQVZFX2FybV9hc2hyZGkzXzFiaXQgKFRBUkdFVF8zMkJJVCkKKyNkZWZpbmUgSEFWRV9hcm1fbHNocmRpM18xYml0IChUQVJHRVRfMzJCSVQpCisjZGVmaW5lIEhBVkVfZXh0diAoYXJtX2FyY2hfdGh1bWIyKQorI2RlZmluZSBIQVZFX2V4dHp2X3QyIChhcm1fYXJjaF90aHVtYjIpCisjZGVmaW5lIEhBVkVfb25lX2NtcGxkaTIgKFRBUkdFVF8zMkJJVCkKKyNkZWZpbmUgSEFWRV90aHVtYjFfZXh0ZW5kaGlzaTIgKFRBUkdFVF9USFVNQjEgJiYgIWFybV9hcmNoNikKKyNkZWZpbmUgSEFWRV9waWNfbG9hZF9hZGRyXzMyYml0IChUQVJHRVRfMzJCSVQgJiYgZmxhZ19waWMpCisjZGVmaW5lIEhBVkVfcGljX2xvYWRfYWRkcl90aHVtYjEgKFRBUkdFVF9USFVNQjEgJiYgZmxhZ19waWMpCisjZGVmaW5lIEhBVkVfcGljX2FkZF9kb3RfcGx1c19mb3VyIChUQVJHRVRfVEhVTUIpCisjZGVmaW5lIEhBVkVfcGljX2FkZF9kb3RfcGx1c19laWdodCAoVEFSR0VUX0FSTSkKKyNkZWZpbmUgSEFWRV90bHNfbG9hZF9kb3RfcGx1c19laWdodCAoVEFSR0VUX0FSTSkKKyNkZWZpbmUgSEFWRV9tb3ZtZW0xMmIgKFRBUkdFVF9USFVNQjEpCisjZGVmaW5lIEhBVkVfbW92bWVtOGIgKFRBUkdFVF9USFVNQjEpCisjZGVmaW5lIEhBVkVfY2JyYW5jaHNpNF9zY3JhdGNoIChUQVJHRVRfVEhVTUIxKQorI2RlZmluZSBIQVZFX2NzdG9yZXNpX25sdHVfdGh1bWIxIChUQVJHRVRfVEhVTUIxKQorI2RlZmluZSBIQVZFX2NzdG9yZXNpX2x0dV90aHVtYjEgKFRBUkdFVF9USFVNQjEpCisjZGVmaW5lIEhBVkVfdGh1bWIxX2FkZHNpM19hZGRnZXUgKFRBUkdFVF9USFVNQjEpCisjZGVmaW5lIEhBVkVfcmV0dXJuIChUQVJHRVRfQVJNICYmIFVTRV9SRVRVUk5fSU5TTiAoRkFMU0UpKQorI2RlZmluZSBIQVZFX2Jsb2NrYWdlIDEKKyNkZWZpbmUgSEFWRV9hcm1fY2FzZXNpX2ludGVybmFsIChUQVJHRVRfQVJNKQorI2RlZmluZSBIQVZFX3RodW1iMV9jYXNlc2lfZGlzcGF0Y2ggKFRBUkdFVF9USFVNQjEpCisjZGVmaW5lIEhBVkVfbm9wIDEKKyNkZWZpbmUgSEFWRV9tb3Zjb25kIChUQVJHRVRfQVJNKQorI2RlZmluZSBIQVZFX3NpYmNhbGxfZXBpbG9ndWUgKFRBUkdFVF8zMkJJVCkKKyNkZWZpbmUgSEFWRV9zdGFja190aWUgMQorI2RlZmluZSBIQVZFX2FsaWduXzQgMQorI2RlZmluZSBIQVZFX2FsaWduXzggMQorI2RlZmluZSBIQVZFX2NvbnN0dGFibGVfZW5kIDEKKyNkZWZpbmUgSEFWRV9jb25zdHRhYmxlXzEgKFRBUkdFVF9USFVNQjEpCisjZGVmaW5lIEhBVkVfY29uc3R0YWJsZV8yIChUQVJHRVRfVEhVTUIxKQorI2RlZmluZSBIQVZFX2NvbnN0dGFibGVfNCAxCisjZGVmaW5lIEhBVkVfY29uc3R0YWJsZV84IDEKKyNkZWZpbmUgSEFWRV9jb25zdHRhYmxlXzE2IDEKKyNkZWZpbmUgSEFWRV9jbHpzaTIgKFRBUkdFVF8zMkJJVCAmJiBhcm1fYXJjaDUpCisjZGVmaW5lIEhBVkVfcmJpdHNpMiAoVEFSR0VUXzMyQklUICYmIGFybV9hcmNoX3RodW1iMikKKyNkZWZpbmUgSEFWRV9wcmVmZXRjaCAoVEFSR0VUXzMyQklUICYmIGFybV9hcmNoNWUpCisjZGVmaW5lIEhBVkVfcHJvbG9ndWVfdXNlIDEKKyNkZWZpbmUgSEFWRV9hcm1fZWhfcmV0dXJuIChUQVJHRVRfQVJNKQorI2RlZmluZSBIQVZFX3RodW1iX2VoX3JldHVybiAoVEFSR0VUX1RIVU1CMSkKKyNkZWZpbmUgSEFWRV9sb2FkX3RwX2hhcmQgKFRBUkdFVF9IQVJEX1RQKQorI2RlZmluZSBIQVZFX2xvYWRfdHBfc29mdCAoVEFSR0VUX1NPRlRfVFApCisjZGVmaW5lIEhBVkVfY2lycnVzX2FkZGRpMyAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUICYmIFRBUkdFVF9NQVZFUklDSykKKyNkZWZpbmUgSEFWRV9jaXJydXNfc3ViZGkzIChUQVJHRVRfMzJCSVQgJiYgVEFSR0VUX0hBUkRfRkxPQVQgJiYgVEFSR0VUX01BVkVSSUNLKQorI2RlZmluZSBIQVZFX211bGRpMyAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUICYmIFRBUkdFVF9NQVZFUklDSykKKyNkZWZpbmUgSEFWRV9hc2hsZGkzX2NpcnJ1cyAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUICYmIFRBUkdFVF9NQVZFUklDSykKKyNkZWZpbmUgSEFWRV9jaXJydXNfYXNobGRpX2NvbnN0IChUQVJHRVRfMzJCSVQgJiYgVEFSR0VUX0hBUkRfRkxPQVQgJiYgVEFSR0VUX01BVkVSSUNLKQorI2RlZmluZSBIQVZFX2NpcnJ1c19hc2hpZnRydGRpX2NvbnN0IChUQVJHRVRfMzJCSVQgJiYgVEFSR0VUX0hBUkRfRkxPQVQgJiYgVEFSR0VUX01BVkVSSUNLKQorI2RlZmluZSBIQVZFX2NpcnJ1c19mbG9hdHNpc2YyIChUQVJHRVRfMzJCSVQgJiYgVEFSR0VUX0hBUkRfRkxPQVQgJiYgVEFSR0VUX01BVkVSSUNLKQorI2RlZmluZSBIQVZFX2NpcnJ1c19mbG9hdHNpZGYyIChUQVJHRVRfMzJCSVQgJiYgVEFSR0VUX0hBUkRfRkxPQVQgJiYgVEFSR0VUX01BVkVSSUNLKQorI2RlZmluZSBIQVZFX2Zsb2F0ZGlzZjIgKFRBUkdFVF8zMkJJVCAmJiBUQVJHRVRfSEFSRF9GTE9BVCAmJiBUQVJHRVRfTUFWRVJJQ0spCisjZGVmaW5lIEhBVkVfZmxvYXRkaWRmMiAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUICYmIFRBUkdFVF9NQVZFUklDSykKKyNkZWZpbmUgSEFWRV9jaXJydXNfdHJ1bmNzZnNpMiAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUICYmIFRBUkdFVF9NQVZFUklDSykKKyNkZWZpbmUgSEFWRV9jaXJydXNfdHJ1bmNkZnNpMiAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUICYmIFRBUkdFVF9NQVZFUklDSykKKyNkZWZpbmUgSEFWRV9pd21teHRfaW9yZGkzIChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9pd21teHRfeG9yZGkzIChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9pd21teHRfYW5kZGkzIChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9pd21teHRfbmFuZGRpMyAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfbW92djJzaV9pbnRlcm5hbCAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfbW92djRoaV9pbnRlcm5hbCAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfbW92djhxaV9pbnRlcm5hbCAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfc3NhZGR2OHFpMyAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfc3NhZGR2NGhpMyAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfc3NhZGR2MnNpMyAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfdXNhZGR2OHFpMyAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfdXNhZGR2NGhpMyAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfdXNhZGR2MnNpMyAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfc3NzdWJ2OHFpMyAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfc3NzdWJ2NGhpMyAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfc3NzdWJ2MnNpMyAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfdXNzdWJ2OHFpMyAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfdXNzdWJ2NGhpMyAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfdXNzdWJ2MnNpMyAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfc211bHY0aGkzX2hpZ2hwYXJ0IChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV91bXVsdjRoaTNfaGlnaHBhcnQgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF93bWFjcyAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfaXdtbXh0X3dtYWNzeiAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfaXdtbXh0X3dtYWN1IChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9pd21teHRfd21hY3V6IChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9pd21teHRfY2xyZGkgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF91YXZncm5kdjhxaTMgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF91YXZncm5kdjRoaTMgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF91YXZndjhxaTMgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF91YXZndjRoaTMgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF9wc2FkYncgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF90aW5zcmIgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF90aW5zcmggKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF90aW5zcncgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF90ZXh0cm11YiAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfaXdtbXh0X3RleHRybXNiIChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9pd21teHRfdGV4dHJtdWggKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF90ZXh0cm1zaCAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfaXdtbXh0X3RleHRybXcgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF93c2h1ZmggKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2VxdjhxaTMgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2VxdjRoaTMgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2VxdjJzaTMgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2d0dXY4cWkzIChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9ndHV2NGhpMyAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfZ3R1djJzaTMgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2d0djhxaTMgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2d0djRoaTMgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2d0djJzaTMgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF93cGFja2hzcyAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfaXdtbXh0X3dwYWNrd3NzIChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9pd21teHRfd3BhY2tkc3MgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF93cGFja2h1cyAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfaXdtbXh0X3dwYWNrd3VzIChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9pd21teHRfd3BhY2tkdXMgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF93dW5wY2tpaGIgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF93dW5wY2tpaGggKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF93dW5wY2tpaHcgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF93dW5wY2tpbGIgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF93dW5wY2tpbGggKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF93dW5wY2tpbHcgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF93dW5wY2tlaHViIChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9pd21teHRfd3VucGNrZWh1aCAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfaXdtbXh0X3d1bnBja2VodXcgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF93dW5wY2tlaHNiIChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9pd21teHRfd3VucGNrZWhzaCAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfaXdtbXh0X3d1bnBja2Voc3cgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF93dW5wY2tlbHViIChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9pd21teHRfd3VucGNrZWx1aCAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfaXdtbXh0X3d1bnBja2VsdXcgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF93dW5wY2tlbHNiIChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9pd21teHRfd3VucGNrZWxzaCAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfaXdtbXh0X3d1bnBja2Vsc3cgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX3JvcnY0aGkzIChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9yb3J2MnNpMyAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfcm9yZGkzIChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9hc2hydjRoaTNfaXdtbXh0IChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9hc2hydjJzaTNfaXdtbXh0IChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9hc2hyZGkzX2l3bW14dCAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfbHNocnY0aGkzX2l3bW14dCAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfbHNocnYyc2kzX2l3bW14dCAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfbHNocmRpM19pd21teHQgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2FzaGx2NGhpM19pd21teHQgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2FzaGx2MnNpM19pd21teHQgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2FzaGxkaTNfaXdtbXh0IChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9yb3J2NGhpM19kaSAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfcm9ydjJzaTNfZGkgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX3JvcmRpM19kaSAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfYXNocnY0aGkzX2RpIChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9hc2hydjJzaTNfZGkgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2FzaHJkaTNfZGkgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2xzaHJ2NGhpM19kaSAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfbHNocnYyc2kzX2RpIChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9sc2hyZGkzX2RpIChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9hc2hsdjRoaTNfZGkgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2FzaGx2MnNpM19kaSAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfYXNobGRpM19kaSAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfaXdtbXh0X3dtYWRkcyAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfaXdtbXh0X3dtYWRkdSAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfaXdtbXh0X3RtaWEgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF90bWlhcGggKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF90bWlhYmIgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF90bWlhdGIgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF90bWlhYnQgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF90bWlhdHQgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF90YmNzdHFpIChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9pd21teHRfdGJjc3RoaSAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfaXdtbXh0X3RiY3N0c2kgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF90bW92bXNrYiAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfaXdtbXh0X3Rtb3Ztc2toIChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9pd21teHRfdG1vdm1za3cgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF93YWNjYiAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfaXdtbXh0X3dhY2NoIChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9pd21teHRfd2FjY3cgKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF93YWxpZ24gKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF90bXJjIChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9pd21teHRfdG1jciAoVEFSR0VUX1JFQUxMWV9JV01NWFQpCisjZGVmaW5lIEhBVkVfaXdtbXh0X3dzYWRiIChUQVJHRVRfUkVBTExZX0lXTU1YVCkKKyNkZWZpbmUgSEFWRV9pd21teHRfd3NhZGggKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF93c2FkYnogKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2l3bW14dF93c2FkaHogKFRBUkdFVF9SRUFMTFlfSVdNTVhUKQorI2RlZmluZSBIQVZFX2V4dGVuZGhmc2YyIChUQVJHRVRfMzJCSVQgJiYgVEFSR0VUX0hBUkRfRkxPQVQgJiYgVEFSR0VUX0ZQMTYpCisjZGVmaW5lIEhBVkVfdHJ1bmNzZmhmMiAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUICYmIFRBUkdFVF9GUDE2KQorI2RlZmluZSBIQVZFX2ZpeHVuc190cnVuY3Nmc2kyIChUQVJHRVRfMzJCSVQgJiYgVEFSR0VUX0hBUkRfRkxPQVQgJiYgVEFSR0VUX1ZGUCkKKyNkZWZpbmUgSEFWRV9maXh1bnNfdHJ1bmNkZnNpMiAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUICYmIFRBUkdFVF9WRlBfRE9VQkxFKQorI2RlZmluZSBIQVZFX2Zsb2F0dW5zc2lzZjIgKFRBUkdFVF8zMkJJVCAmJiBUQVJHRVRfSEFSRF9GTE9BVCAmJiBUQVJHRVRfVkZQKQorI2RlZmluZSBIQVZFX2Zsb2F0dW5zc2lkZjIgKFRBUkdFVF8zMkJJVCAmJiBUQVJHRVRfSEFSRF9GTE9BVCAmJiBUQVJHRVRfVkZQX0RPVUJMRSkKKyNkZWZpbmUgSEFWRV90bHNfbG9hZF9kb3RfcGx1c19mb3VyIChUQVJHRVRfVEhVTUIyKQorI2RlZmluZSBIQVZFX3RodW1iMl9jYXNlc2lfaW50ZXJuYWwgKFRBUkdFVF9USFVNQjIgJiYgIWZsYWdfcGljKQorI2RlZmluZSBIQVZFX3RodW1iMl9jYXNlc2lfaW50ZXJuYWxfcGljIChUQVJHRVRfVEhVTUIyICYmIGZsYWdfcGljKQorI2RlZmluZSBIQVZFX3RodW1iMl9laF9yZXR1cm4gKFRBUkdFVF9USFVNQjIpCisjZGVmaW5lIEhBVkVfZGl2c2kzIChUQVJHRVRfVEhVTUIyICYmIGFybV9hcmNoX2h3ZGl2KQorI2RlZmluZSBIQVZFX3VkaXZzaTMgKFRBUkdFVF9USFVNQjIgJiYgYXJtX2FyY2hfaHdkaXYpCisjZGVmaW5lIEhBVkVfb3JzaV9ub3RzaV9zaSAoVEFSR0VUX1RIVU1CMikKKyNkZWZpbmUgSEFWRV92ZWNfc2V0djhxaV9pbnRlcm5hbCAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmVjX3NldHY0aGlfaW50ZXJuYWwgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3ZlY19zZXR2MnNpX2ludGVybmFsIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV92ZWNfc2V0djJzZl9pbnRlcm5hbCAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmVjX3NldHYxNnFpX2ludGVybmFsIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV92ZWNfc2V0djhoaV9pbnRlcm5hbCAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmVjX3NldHY0c2lfaW50ZXJuYWwgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3ZlY19zZXR2NHNmX2ludGVybmFsIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV92ZWNfc2V0djJkaV9pbnRlcm5hbCAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmVjX2V4dHJhY3R2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV92ZWNfZXh0cmFjdHY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3ZlY19leHRyYWN0djJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmVjX2V4dHJhY3R2MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV92ZWNfZXh0cmFjdHYxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV92ZWNfZXh0cmFjdHY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3ZlY19leHRyYWN0djRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmVjX2V4dHJhY3R2NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV92ZWNfZXh0cmFjdHYyZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX2lvcnY4cWkzIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9pb3J2MTZxaTMgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX2lvcnY0aGkzIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9pb3J2OGhpMyAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfaW9ydjJzaTMgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX2lvcnY0c2kzIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9pb3J2MnNmMyAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfaW9ydjRzZjMgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX2lvcnYyZGkzIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9pb3JkaTNfbmVvbiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfYW5kdjhxaTMgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX2FuZHYxNnFpMyAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfYW5kdjRoaTMgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX2FuZHY4aGkzIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9hbmR2MnNpMyAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfYW5kdjRzaTMgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX2FuZHYyc2YzIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9hbmR2NHNmMyAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfYW5kdjJkaTMgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX2FuZGRpM19uZW9uIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9vcm52OHFpM19uZW9uIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9vcm52MTZxaTNfbmVvbiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfb3JudjRoaTNfbmVvbiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfb3JudjhoaTNfbmVvbiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfb3JudjJzaTNfbmVvbiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfb3JudjRzaTNfbmVvbiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfb3JudjJzZjNfbmVvbiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfb3JudjRzZjNfbmVvbiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfb3JudjJkaTNfbmVvbiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfb3JuZGkzX25lb24gKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX2JpY3Y4cWkzX25lb24gKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX2JpY3YxNnFpM19uZW9uIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9iaWN2NGhpM19uZW9uIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9iaWN2OGhpM19uZW9uIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9iaWN2MnNpM19uZW9uIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9iaWN2NHNpM19uZW9uIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9iaWN2MnNmM19uZW9uIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9iaWN2NHNmM19uZW9uIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9iaWN2MmRpM19uZW9uIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9iaWNkaTNfbmVvbiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfeG9ydjhxaTMgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3hvcnYxNnFpMyAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfeG9ydjRoaTMgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3hvcnY4aGkzIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV94b3J2MnNpMyAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfeG9ydjRzaTMgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3hvcnYyc2YzIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV94b3J2NHNmMyAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfeG9ydjJkaTMgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3hvcmRpM19uZW9uIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9vbmVfY21wbHY4cWkyIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9vbmVfY21wbHYxNnFpMiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfb25lX2NtcGx2NGhpMiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfb25lX2NtcGx2OGhpMiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfb25lX2NtcGx2MnNpMiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfb25lX2NtcGx2NHNpMiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfb25lX2NtcGx2MnNmMiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfb25lX2NtcGx2NHNmMiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfb25lX2NtcGx2MmRpMiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfYWJzdjhxaTIgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX2Fic3YxNnFpMiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfYWJzdjRoaTIgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX2Fic3Y4aGkyIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9hYnN2MnNpMiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfYWJzdjRzaTIgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX2Fic3Yyc2YyIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9hYnN2NHNmMiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVndjhxaTIgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lZ3YxNnFpMiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVndjRoaTIgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lZ3Y4aGkyIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZWd2MnNpMiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVndjRzaTIgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lZ3Yyc2YyIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZWd2NHNmMiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmFzaGx2OHFpMyAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmFzaGx2MTZxaTMgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3Zhc2hsdjRoaTMgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3Zhc2hsdjhoaTMgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3Zhc2hsdjJzaTMgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3Zhc2hsdjRzaTMgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX2FzaGx2OHFpM19zaWduZWQgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX2FzaGx2MTZxaTNfc2lnbmVkIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9hc2hsdjRoaTNfc2lnbmVkIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9hc2hsdjhoaTNfc2lnbmVkIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9hc2hsdjJzaTNfc2lnbmVkIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9hc2hsdjRzaTNfc2lnbmVkIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9hc2hsdjJkaTNfc2lnbmVkIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9hc2hsdjhxaTNfdW5zaWduZWQgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX2FzaGx2MTZxaTNfdW5zaWduZWQgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX2FzaGx2NGhpM191bnNpZ25lZCAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfYXNobHY4aGkzX3Vuc2lnbmVkIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9hc2hsdjJzaTNfdW5zaWduZWQgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX2FzaGx2NHNpM191bnNpZ25lZCAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfYXNobHYyZGkzX3Vuc2lnbmVkIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV93aWRlbl9zc3VtdjhxaTMgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3dpZGVuX3NzdW12NGhpMyAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfd2lkZW5fc3N1bXYyc2kzIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV93aWRlbl91c3VtdjhxaTMgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3dpZGVuX3VzdW12NGhpMyAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfd2lkZW5fdXN1bXYyc2kzIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9xdWFkX2hhbHZlc19wbHVzdjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfcXVhZF9oYWx2ZXNfc21pbnY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3F1YWRfaGFsdmVzX3NtYXh2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9xdWFkX2hhbHZlc191bWludjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfcXVhZF9oYWx2ZXNfdW1heHY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3F1YWRfaGFsdmVzX3BsdXN2NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9xdWFkX2hhbHZlc19zbWludjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfcXVhZF9oYWx2ZXNfc21heHY0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3F1YWRfaGFsdmVzX3BsdXN2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9xdWFkX2hhbHZlc19zbWludjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfcXVhZF9oYWx2ZXNfc21heHY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3F1YWRfaGFsdmVzX3VtaW52OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9xdWFkX2hhbHZlc191bWF4djhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfcXVhZF9oYWx2ZXNfcGx1c3YxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9xdWFkX2hhbHZlc19zbWludjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3F1YWRfaGFsdmVzX3NtYXh2MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfcXVhZF9oYWx2ZXNfdW1pbnYxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9xdWFkX2hhbHZlc191bWF4djE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX21vdmVfbG9fcXVhZF92NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9tb3ZlX2xvX3F1YWRfdjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbW92ZV9sb19xdWFkX3Y4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX21vdmVfbG9fcXVhZF92MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfcmVkdWNfc3BsdXNfdjJkaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cGFkZF9pbnRlcm5hbHY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnBhZGRfaW50ZXJuYWx2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZwYWRkX2ludGVybmFsdjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cGFkZF9pbnRlcm5hbHYyc2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnBzbWludjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cHNtaW52NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zwc21pbnYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnBzbWludjJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cHNtYXh2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zwc21heHY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnBzbWF4djJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cHNtYXh2MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZwdW1pbnY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnB1bWludjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cHVtaW52MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZwdW1heHY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnB1bWF4djRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cHVtYXh2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZhZGR2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZhZGR2MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92YWRkdjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92YWRkdjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92YWRkdjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92YWRkdjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92YWRkdjJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92YWRkdjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92YWRkZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFkZHYyZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFkZGx2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZhZGRsdjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92YWRkbHYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFkZHd2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZhZGR3djRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92YWRkd3Yyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmhhZGR2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZoYWRkdjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmhhZGR2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZoYWRkdjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92aGFkZHYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmhhZGR2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZxYWRkdjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cWFkZHYxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZxYWRkdjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cWFkZHY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnFhZGR2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZxYWRkdjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cWFkZGRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZxYWRkdjJkaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92YWRkaG52OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZhZGRobnY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFkZGhudjJkaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bXVsdjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bXVsdjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm11bHY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm11bHY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm11bHYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm11bHY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm11bHYyc2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm11bHY0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm1sYXY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm1sYXYxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtbGF2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtbGF2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtbGF2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtbGF2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtbGF2MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtbGF2NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtbGFsdjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWxhbHY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm1sYWx2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtbHN2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtbHN2MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWxzdjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWxzdjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWxzdjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWxzdjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWxzdjJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWxzdjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWxzbHY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm1sc2x2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtbHNsdjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cWRtdWxodjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cWRtdWxodjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cWRtdWxodjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cWRtdWxodjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cWRtbGFsdjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cWRtbGFsdjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cWRtbHNsdjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cWRtbHNsdjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bXVsbHY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm11bGx2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtdWxsdjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cWRtdWxsdjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cWRtdWxsdjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3VidjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3VidjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN1YnY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN1YnY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN1YnYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN1YnY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN1YnYyc2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN1YnY0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN1YmRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdWJ2MmRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdWJsdjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3VibHY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN1Ymx2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdWJ3djhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3Vid3Y0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN1Ynd2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zxc3VidjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cXN1YnYxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zxc3VidjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cXN1YnY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnFzdWJ2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zxc3VidjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cXN1YmRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zxc3VidjJkaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92aHN1YnY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmhzdWJ2MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92aHN1YnY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmhzdWJ2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zoc3VidjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92aHN1YnY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN1YmhudjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3ViaG52NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdWJobnYyZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmNlcXY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmNlcXYxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZjZXF2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZjZXF2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZjZXF2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZjZXF2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZjZXF2MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZjZXF2NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZjZ2V2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZjZ2V2MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Y2dldjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Y2dldjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Y2dldjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Y2dldjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Y2dldjJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Y2dldjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Y2d0djhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Y2d0djE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmNndHY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmNndHY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmNndHYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmNndHY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmNndHYyc2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmNndHY0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmNhZ2V2MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZjYWdldjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Y2FndHYyc2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmNhZ3R2NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Z0c3R2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Z0c3R2MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92dHN0djRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92dHN0djhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92dHN0djJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92dHN0djRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92YWJkdjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92YWJkdjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFiZHY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFiZHY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFiZHYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFiZHY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFiZHYyc2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFiZHY0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFiZGx2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZhYmRsdjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92YWJkbHYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFiYXY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFiYXYxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZhYmF2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZhYmF2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZhYmF2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZhYmF2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZhYmFsdjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92YWJhbHY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFiYWx2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtYXh2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtYXh2MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWF4djRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWF4djhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWF4djJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWF4djRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWF4djJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWF4djRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWludjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWludjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm1pbnY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm1pbnY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm1pbnYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm1pbnY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm1pbnYyc2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm1pbnY0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnBhZGRsdjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cGFkZGx2MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cGFkZGx2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZwYWRkbHY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnBhZGRsdjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cGFkZGx2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZwYWRhbHY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnBhZGFsdjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnBhZGFsdjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cGFkYWx2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZwYWRhbHYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnBhZGFsdjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cG1heHY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnBtYXh2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZwbWF4djJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cG1heHYyc2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnBtaW52OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZwbWludjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cG1pbnYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnBtaW52MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZyZWNwc3Yyc2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnJlY3BzdjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cnNxcnRzdjJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cnNxcnRzdjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92YWJzdjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92YWJzdjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFic3Y0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFic3Y4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFic3Yyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFic3Y0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFic3Yyc2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFic3Y0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnFhYnN2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZxYWJzdjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnFhYnN2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZxYWJzdjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cWFic3Yyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnFhYnN2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZxbmVndjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cW5lZ3YxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZxbmVndjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cW5lZ3Y4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnFuZWd2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZxbmVndjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Y2xzdjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Y2xzdjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmNsc3Y0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmNsc3Y4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmNsc3Yyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmNsc3Y0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmNsenY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmNsenYxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZjbHp2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZjbHp2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZjbHp2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZjbHp2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZjbnR2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZjbnR2MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cmVjcGV2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZyZWNwZXYyc2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnJlY3BldjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cmVjcGV2NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zyc3FydGV2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zyc3FydGV2MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zyc3FydGV2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zyc3FydGV2NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZnZXRfbGFuZXY4cWlfc2V4dF9pbnRlcm5hbCAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Z2V0X2xhbmV2NGhpX3NleHRfaW50ZXJuYWwgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmdldF9sYW5ldjJzaV9zZXh0X2ludGVybmFsIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZnZXRfbGFuZXYyc2Zfc2V4dF9pbnRlcm5hbCAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Z2V0X2xhbmV2OHFpX3pleHRfaW50ZXJuYWwgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmdldF9sYW5ldjRoaV96ZXh0X2ludGVybmFsIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZnZXRfbGFuZXYyc2lfemV4dF9pbnRlcm5hbCAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Z2V0X2xhbmV2MnNmX3pleHRfaW50ZXJuYWwgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmdldF9sYW5ldjE2cWlfc2V4dF9pbnRlcm5hbCAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Z2V0X2xhbmV2OGhpX3NleHRfaW50ZXJuYWwgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmdldF9sYW5ldjRzaV9zZXh0X2ludGVybmFsIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZnZXRfbGFuZXY0c2Zfc2V4dF9pbnRlcm5hbCAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Z2V0X2xhbmV2MTZxaV96ZXh0X2ludGVybmFsIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZnZXRfbGFuZXY4aGlfemV4dF9pbnRlcm5hbCAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Z2V0X2xhbmV2NHNpX3pleHRfaW50ZXJuYWwgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmdldF9sYW5ldjRzZl96ZXh0X2ludGVybmFsIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZnZXRfbGFuZWRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZnZXRfbGFuZXYyZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnNldF9sYW5ldjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c2V0X2xhbmV2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzZXRfbGFuZXYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnNldF9sYW5ldjJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c2V0X2xhbmVkaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c2V0X2xhbmV2MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c2V0X2xhbmV2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzZXRfbGFuZXY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnNldF9sYW5ldjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c2V0X2xhbmV2MmRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZkdXBfbnY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmR1cF9udjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92ZHVwX252MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92ZHVwX252OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZkdXBfbnYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmR1cF9udjJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92ZHVwX252NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZkdXBfbnY0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmR1cF9uZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmR1cF9udjJkaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92ZHVwX2xhbmV2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZkdXBfbGFuZXY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmR1cF9sYW5ldjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92ZHVwX2xhbmV2MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZkdXBfbGFuZXYxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZkdXBfbGFuZXY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmR1cF9sYW5ldjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92ZHVwX2xhbmV2NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZkdXBfbGFuZXYyZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmNvbWJpbmV2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zjb21iaW5ldjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Y29tYmluZXYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmNvbWJpbmV2MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zjb21iaW5lZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmdldF9oaWdodjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmdldF9oaWdodjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Z2V0X2hpZ2h2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZnZXRfaGlnaHY0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmdldF9oaWdodjJkaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Z2V0X2xvd3YxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZnZXRfbG93djhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Z2V0X2xvd3Y0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmdldF9sb3d2NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZnZXRfbG93djJkaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Y3Z0djJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Y3Z0djRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Y3Z0djJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Y3Z0djRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Y3Z0X252MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZjdnRfbnY0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmN2dF9udjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Y3Z0X252NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Ztb3ZudjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bW92bnY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm1vdm52MmRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZxbW92bnY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnFtb3ZudjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cW1vdm52MmRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZxbW92dW52OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZxbW92dW52NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZxbW92dW52MmRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Ztb3ZsdjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bW92bHY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm1vdmx2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtdWxfbGFuZXY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm11bF9sYW5ldjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bXVsX2xhbmV2MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtdWxfbGFuZXY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm11bF9sYW5ldjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bXVsX2xhbmV2NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtdWxsX2xhbmV2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtdWxsX2xhbmV2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZxZG11bGxfbGFuZXY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnFkbXVsbF9sYW5ldjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cWRtdWxoX2xhbmV2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZxZG11bGhfbGFuZXY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnFkbXVsaF9sYW5ldjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cWRtdWxoX2xhbmV2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtbGFfbGFuZXY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm1sYV9sYW5ldjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWxhX2xhbmV2MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtbGFfbGFuZXY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm1sYV9sYW5ldjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWxhX2xhbmV2NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtbGFsX2xhbmV2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtbGFsX2xhbmV2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZxZG1sYWxfbGFuZXY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnFkbWxhbF9sYW5ldjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWxzX2xhbmV2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtbHNfbGFuZXYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm1sc19sYW5ldjJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWxzX2xhbmV2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtbHNfbGFuZXY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm1sc19sYW5ldjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWxzbF9sYW5ldjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWxzbF9sYW5ldjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cWRtbHNsX2xhbmV2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZxZG1sc2xfbGFuZXYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmV4dHY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmV4dHYxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZleHR2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZleHR2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZleHR2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZleHR2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZleHR2MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZleHR2NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZleHRkaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92ZXh0djJkaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cmV2NjR2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZyZXY2NHYxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZyZXY2NHY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnJldjY0djhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cmV2NjR2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZyZXY2NHY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnJldjY0djJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cmV2NjR2NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZyZXY2NHYyZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnJldjMydjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cmV2MzJ2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZyZXYzMnYxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZyZXYzMnY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnJldjE2djhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cmV2MTZ2MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92YnNsdjhxaV9pbnRlcm5hbCAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92YnNsdjE2cWlfaW50ZXJuYWwgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmJzbHY0aGlfaW50ZXJuYWwgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmJzbHY4aGlfaW50ZXJuYWwgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmJzbHYyc2lfaW50ZXJuYWwgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmJzbHY0c2lfaW50ZXJuYWwgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmJzbHYyc2ZfaW50ZXJuYWwgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmJzbHY0c2ZfaW50ZXJuYWwgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmJzbGRpX2ludGVybmFsIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zic2x2MmRpX2ludGVybmFsIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzaGx2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzaGx2MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c2hsdjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c2hsdjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c2hsdjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c2hsdjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c2hsZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnNobHYyZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnFzaGx2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zxc2hsdjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnFzaGx2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zxc2hsdjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cXNobHYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnFzaGx2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zxc2hsZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnFzaGx2MmRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzaHJfbnY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnNocl9udjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnNocl9udjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c2hyX252OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzaHJfbnYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnNocl9udjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c2hyX25kaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c2hyX252MmRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzaHJuX252OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzaHJuX252NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzaHJuX252MmRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zxc2hybl9udjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cXNocm5fbnY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnFzaHJuX252MmRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zxc2hydW5fbnY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnFzaHJ1bl9udjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cXNocnVuX252MmRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzaGxfbnY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnNobF9udjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnNobF9udjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c2hsX252OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzaGxfbnYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnNobF9udjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c2hsX25kaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c2hsX252MmRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zxc2hsX252OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zxc2hsX252MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cXNobF9udjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cXNobF9udjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cXNobF9udjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cXNobF9udjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cXNobF9uZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnFzaGxfbnYyZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnFzaGx1X252OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zxc2hsdV9udjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnFzaGx1X252NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zxc2hsdV9udjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cXNobHVfbnYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnFzaGx1X252NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zxc2hsdV9uZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnFzaGx1X252MmRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzaGxsX252OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzaGxsX252NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzaGxsX252MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzcmFfbnY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnNyYV9udjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnNyYV9udjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3JhX252OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzcmFfbnYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnNyYV9udjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3JhX25kaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3JhX252MmRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzcmlfbnY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnNyaV9udjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnNyaV9udjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3JpX252OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzcmlfbnYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnNyaV9udjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3JpX25kaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3JpX252MmRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzbGlfbnY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnNsaV9udjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnNsaV9udjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c2xpX252OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzbGlfbnYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnNsaV9udjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c2xpX25kaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c2xpX252MmRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Z0YmwxdjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92dGJsMnY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnRibDN2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Z0Ymw0djhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92dGJ4MXY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnRieDJ2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Z0YngzdjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92dGJ4NHY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnRybnY4cWlfaW50ZXJuYWwgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnRybnYxNnFpX2ludGVybmFsIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Z0cm52NGhpX2ludGVybmFsIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Z0cm52OGhpX2ludGVybmFsIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Z0cm52MnNpX2ludGVybmFsIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Z0cm52NHNpX2ludGVybmFsIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Z0cm52MnNmX2ludGVybmFsIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Z0cm52NHNmX2ludGVybmFsIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Z6aXB2OHFpX2ludGVybmFsIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Z6aXB2MTZxaV9pbnRlcm5hbCAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92emlwdjRoaV9pbnRlcm5hbCAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92emlwdjhoaV9pbnRlcm5hbCAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92emlwdjJzaV9pbnRlcm5hbCAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92emlwdjRzaV9pbnRlcm5hbCAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92emlwdjJzZl9pbnRlcm5hbCAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92emlwdjRzZl9pbnRlcm5hbCAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92dXpwdjhxaV9pbnRlcm5hbCAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92dXpwdjE2cWlfaW50ZXJuYWwgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnV6cHY0aGlfaW50ZXJuYWwgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnV6cHY4aGlfaW50ZXJuYWwgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnV6cHYyc2lfaW50ZXJuYWwgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnV6cHY0c2lfaW50ZXJuYWwgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnV6cHYyc2ZfaW50ZXJuYWwgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnV6cHY0c2ZfaW50ZXJuYWwgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkMXY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkMXYxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDF2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDF2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDF2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDF2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDF2MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDF2NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDFkaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQxdjJkaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQxX2xhbmV2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDFfbGFuZXY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkMV9sYW5ldjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQxX2xhbmV2MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDFfbGFuZWRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDFfbGFuZXYxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDFfbGFuZXY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkMV9sYW5ldjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQxX2xhbmV2NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDFfbGFuZXYyZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkMV9kdXB2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDFfZHVwdjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQxX2R1cHYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkMV9kdXB2MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDFfZHVwZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkMV9kdXB2MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQxX2R1cHY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkMV9kdXB2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDFfZHVwdjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQxX2R1cHYyZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0MXY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0MXYxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDF2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDF2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDF2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDF2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDF2MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDF2NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDFkaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3QxdjJkaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3QxX2xhbmV2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDFfbGFuZXY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0MV9sYW5ldjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3QxX2xhbmV2MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDFfbGFuZWRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDFfbGFuZXYxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDFfbGFuZXY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0MV9sYW5ldjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3QxX2xhbmV2NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDFfbGFuZXYyZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkMnY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkMnY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkMnYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkMnYyc2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkMmRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDJ2MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQydjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQydjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQydjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQyX2xhbmV2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDJfbGFuZXY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkMl9sYW5ldjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQyX2xhbmV2MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDJfbGFuZXY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkMl9sYW5ldjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQyX2xhbmV2NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDJfZHVwdjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQyX2R1cHY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkMl9kdXB2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDJfZHVwdjJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQyX2R1cGRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDJ2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDJ2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDJ2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDJ2MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDJkaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3QydjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0MnY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0MnY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0MnY0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0Ml9sYW5ldjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3QyX2xhbmV2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDJfbGFuZXYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0Ml9sYW5ldjJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3QyX2xhbmV2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDJfbGFuZXY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0Ml9sYW5ldjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQzdjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQzdjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQzdjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQzdjJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQzZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkM3FhdjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkM3FhdjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQzcWF2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDNxYXY0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkM3FidjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkM3FidjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQzcWJ2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDNxYnY0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkM19sYW5ldjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQzX2xhbmV2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDNfbGFuZXYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkM19sYW5ldjJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQzX2xhbmV2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDNfbGFuZXY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkM19sYW5ldjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQzX2R1cHY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkM19kdXB2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDNfZHVwdjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQzX2R1cHYyc2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkM19kdXBkaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3QzdjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3QzdjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3QzdjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3QzdjJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3QzZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0M3FhdjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0M3FhdjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3QzcWF2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDNxYXY0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0M3FidjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0M3FidjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3QzcWJ2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDNxYnY0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0M19sYW5ldjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3QzX2xhbmV2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDNfbGFuZXYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0M19sYW5ldjJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3QzX2xhbmV2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDNfbGFuZXY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0M19sYW5ldjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQ0djhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQ0djRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQ0djJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQ0djJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQ0ZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkNHFhdjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkNHFhdjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQ0cWF2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDRxYXY0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkNHFidjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkNHFidjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQ0cWJ2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDRxYnY0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkNF9sYW5ldjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQ0X2xhbmV2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDRfbGFuZXYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkNF9sYW5ldjJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQ0X2xhbmV2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDRfbGFuZXY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkNF9sYW5ldjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQ0X2R1cHY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkNF9kdXB2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDRfZHVwdjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQ0X2R1cHYyc2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkNF9kdXBkaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3Q0djhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3Q0djRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3Q0djJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3Q0djJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3Q0ZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0NHFhdjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0NHFhdjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3Q0cWF2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDRxYXY0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0NHFidjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0NHFidjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3Q0cWJ2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDRxYnY0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0NF9sYW5ldjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3Q0X2xhbmV2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDRfbGFuZXYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0NF9sYW5ldjJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3Q0X2xhbmV2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDRfbGFuZXY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0NF9sYW5ldjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfYWRkZGkzIDEKKyNkZWZpbmUgSEFWRV9hZGRzaTMgMQorI2RlZmluZSBIQVZFX2luY3NjYyAoVEFSR0VUXzMyQklUKQorI2RlZmluZSBIQVZFX2FkZHNmMyAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUKQorI2RlZmluZSBIQVZFX2FkZGRmMyAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUICYmICFUQVJHRVRfVkZQX1NJTkdMRSkKKyNkZWZpbmUgSEFWRV9zdWJkaTMgMQorI2RlZmluZSBIQVZFX3N1YnNpMyAxCisjZGVmaW5lIEhBVkVfZGVjc2NjIChUQVJHRVRfMzJCSVQpCisjZGVmaW5lIEhBVkVfc3Vic2YzIChUQVJHRVRfMzJCSVQgJiYgVEFSR0VUX0hBUkRfRkxPQVQpCisjZGVmaW5lIEhBVkVfc3ViZGYzIChUQVJHRVRfMzJCSVQgJiYgVEFSR0VUX0hBUkRfRkxPQVQgJiYgIVRBUkdFVF9WRlBfU0lOR0xFKQorI2RlZmluZSBIQVZFX211bHNpMyAxCisjZGVmaW5lIEhBVkVfbXVsc2lkaTMgKFRBUkdFVF8zMkJJVCAmJiBhcm1fYXJjaDNtKQorI2RlZmluZSBIQVZFX3VtdWxzaWRpMyAoVEFSR0VUXzMyQklUICYmIGFybV9hcmNoM20pCisjZGVmaW5lIEhBVkVfc211bHNpM19oaWdocGFydCAoVEFSR0VUXzMyQklUICYmIGFybV9hcmNoM20pCisjZGVmaW5lIEhBVkVfdW11bHNpM19oaWdocGFydCAoVEFSR0VUXzMyQklUICYmIGFybV9hcmNoM20pCisjZGVmaW5lIEhBVkVfbXVsc2YzIChUQVJHRVRfMzJCSVQgJiYgVEFSR0VUX0hBUkRfRkxPQVQpCisjZGVmaW5lIEhBVkVfbXVsZGYzIChUQVJHRVRfMzJCSVQgJiYgVEFSR0VUX0hBUkRfRkxPQVQgJiYgIVRBUkdFVF9WRlBfU0lOR0xFKQorI2RlZmluZSBIQVZFX2RpdnNmMyAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUICYmIChUQVJHRVRfRlBBIHx8IFRBUkdFVF9WRlApKQorI2RlZmluZSBIQVZFX2RpdmRmMyAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUICYmIChUQVJHRVRfRlBBIHx8IFRBUkdFVF9WRlBfRE9VQkxFKSkKKyNkZWZpbmUgSEFWRV9tb2RzZjMgKFRBUkdFVF8zMkJJVCAmJiBUQVJHRVRfSEFSRF9GTE9BVCAmJiBUQVJHRVRfRlBBKQorI2RlZmluZSBIQVZFX21vZGRmMyAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUICYmIFRBUkdFVF9GUEEpCisjZGVmaW5lIEhBVkVfYW5kc2kzIDEKKyNkZWZpbmUgSEFWRV9pbnN2IChUQVJHRVRfQVJNIHx8IGFybV9hcmNoX3RodW1iMikKKyNkZWZpbmUgSEFWRV9pb3JzaTMgMQorI2RlZmluZSBIQVZFX3hvcnNpMyAxCisjZGVmaW5lIEhBVkVfc21heHNpMyAoVEFSR0VUXzMyQklUKQorI2RlZmluZSBIQVZFX3NtaW5zaTMgKFRBUkdFVF8zMkJJVCkKKyNkZWZpbmUgSEFWRV91bWF4c2kzIChUQVJHRVRfMzJCSVQpCisjZGVmaW5lIEhBVkVfdW1pbnNpMyAoVEFSR0VUXzMyQklUKQorI2RlZmluZSBIQVZFX2FzaGxkaTMgKFRBUkdFVF8zMkJJVCkKKyNkZWZpbmUgSEFWRV9hc2hsc2kzIDEKKyNkZWZpbmUgSEFWRV9hc2hyZGkzIChUQVJHRVRfMzJCSVQpCisjZGVmaW5lIEhBVkVfYXNocnNpMyAxCisjZGVmaW5lIEhBVkVfbHNocmRpMyAoVEFSR0VUXzMyQklUKQorI2RlZmluZSBIQVZFX2xzaHJzaTMgMQorI2RlZmluZSBIQVZFX3JvdGxzaTMgKFRBUkdFVF8zMkJJVCkKKyNkZWZpbmUgSEFWRV9yb3Ryc2kzIDEKKyNkZWZpbmUgSEFWRV9leHR6diAoVEFSR0VUX1RIVU1CMSB8fCBhcm1fYXJjaF90aHVtYjIpCisjZGVmaW5lIEhBVkVfbmVnZGkyIDEKKyNkZWZpbmUgSEFWRV9uZWdzaTIgMQorI2RlZmluZSBIQVZFX25lZ3NmMiAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUICYmIChUQVJHRVRfRlBBIHx8IFRBUkdFVF9WRlApKQorI2RlZmluZSBIQVZFX25lZ2RmMiAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUICYmIChUQVJHRVRfRlBBIHx8IFRBUkdFVF9WRlBfRE9VQkxFKSkKKyNkZWZpbmUgSEFWRV9hYnNzaTIgMQorI2RlZmluZSBIQVZFX2Fic3NmMiAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUKQorI2RlZmluZSBIQVZFX2Fic2RmMiAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUICYmICFUQVJHRVRfVkZQX1NJTkdMRSkKKyNkZWZpbmUgSEFWRV9zcXJ0c2YyIChUQVJHRVRfMzJCSVQgJiYgVEFSR0VUX0hBUkRfRkxPQVQgJiYgKFRBUkdFVF9GUEEgfHwgVEFSR0VUX1ZGUCkpCisjZGVmaW5lIEhBVkVfc3FydGRmMiAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUICYmIChUQVJHRVRfRlBBIHx8IFRBUkdFVF9WRlBfRE9VQkxFKSkKKyNkZWZpbmUgSEFWRV9vbmVfY21wbHNpMiAxCisjZGVmaW5lIEhBVkVfZmxvYXRzaWhmMiAxCisjZGVmaW5lIEhBVkVfZmxvYXRkaWhmMiAxCisjZGVmaW5lIEhBVkVfZmxvYXRzaXNmMiAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUKQorI2RlZmluZSBIQVZFX2Zsb2F0c2lkZjIgKFRBUkdFVF8zMkJJVCAmJiBUQVJHRVRfSEFSRF9GTE9BVCAmJiAhVEFSR0VUX1ZGUF9TSU5HTEUpCisjZGVmaW5lIEhBVkVfZml4X3RydW5jaGZzaTIgMQorI2RlZmluZSBIQVZFX2ZpeF90cnVuY2hmZGkyIDEKKyNkZWZpbmUgSEFWRV9maXhfdHJ1bmNzZnNpMiAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUKQorI2RlZmluZSBIQVZFX2ZpeF90cnVuY2Rmc2kyIChUQVJHRVRfMzJCSVQgJiYgVEFSR0VUX0hBUkRfRkxPQVQgJiYgIVRBUkdFVF9WRlBfU0lOR0xFKQorI2RlZmluZSBIQVZFX3RydW5jZGZzZjIgKFRBUkdFVF8zMkJJVCAmJiBUQVJHRVRfSEFSRF9GTE9BVCAmJiAhVEFSR0VUX1ZGUF9TSU5HTEUpCisjZGVmaW5lIEhBVkVfdHJ1bmNkZmhmMiAxCisjZGVmaW5lIEhBVkVfemVyb19leHRlbmRzaWRpMiAoVEFSR0VUXzMyQklUKQorI2RlZmluZSBIQVZFX3plcm9fZXh0ZW5kcWlkaTIgKFRBUkdFVF8zMkJJVCkKKyNkZWZpbmUgSEFWRV9leHRlbmRzaWRpMiAoVEFSR0VUXzMyQklUKQorI2RlZmluZSBIQVZFX3plcm9fZXh0ZW5kaGlzaTIgMQorI2RlZmluZSBIQVZFX3plcm9fZXh0ZW5kcWlzaTIgMQorI2RlZmluZSBIQVZFX2V4dGVuZGhpc2kyIDEKKyNkZWZpbmUgSEFWRV9leHRlbmRoaXNpMl9tZW0gKFRBUkdFVF9BUk0pCisjZGVmaW5lIEhBVkVfZXh0ZW5kcWloaTIgKFRBUkdFVF9BUk0pCisjZGVmaW5lIEhBVkVfZXh0ZW5kcWlzaTIgMQorI2RlZmluZSBIQVZFX2V4dGVuZHNmZGYyIChUQVJHRVRfMzJCSVQgJiYgVEFSR0VUX0hBUkRfRkxPQVQgJiYgIVRBUkdFVF9WRlBfU0lOR0xFKQorI2RlZmluZSBIQVZFX2V4dGVuZGhmZGYyIDEKKyNkZWZpbmUgSEFWRV9tb3ZkaSAxCisjZGVmaW5lIEhBVkVfbW92c2kgMQorI2RlZmluZSBIQVZFX2J1aWx0aW5fc2V0am1wX3JlY2VpdmVyIChmbGFnX3BpYykKKyNkZWZpbmUgSEFWRV9zdG9yZWhpIChUQVJHRVRfQVJNKQorI2RlZmluZSBIQVZFX3N0b3JlaGlfYmlnZW5kIChUQVJHRVRfQVJNKQorI2RlZmluZSBIQVZFX3N0b3JlaW50aGkgKFRBUkdFVF9BUk0pCisjZGVmaW5lIEhBVkVfc3RvcmVoaV9zaW5nbGVfb3AgKFRBUkdFVF8zMkJJVCAmJiBhcm1fYXJjaDQpCisjZGVmaW5lIEhBVkVfbW92aGkgMQorI2RlZmluZSBIQVZFX21vdmhpX2J5dGVzIChUQVJHRVRfQVJNKQorI2RlZmluZSBIQVZFX21vdmhpX2JpZ2VuZCAoVEFSR0VUX0FSTSkKKyNkZWZpbmUgSEFWRV90aHVtYl9tb3ZoaV9jbG9iYmVyIChUQVJHRVRfVEhVTUIxKQorI2RlZmluZSBIQVZFX3JlbG9hZF9vdXRoaSAxCisjZGVmaW5lIEhBVkVfcmVsb2FkX2luaGkgMQorI2RlZmluZSBIQVZFX21vdnFpIDEKKyNkZWZpbmUgSEFWRV9tb3ZoZiAxCisjZGVmaW5lIEhBVkVfbW92c2YgMQorI2RlZmluZSBIQVZFX21vdmRmIDEKKyNkZWZpbmUgSEFWRV9yZWxvYWRfb3V0ZGYgKFRBUkdFVF8zMkJJVCkKKyNkZWZpbmUgSEFWRV9tb3Z4ZiAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUICYmIFRBUkdFVF9GUEEpCisjZGVmaW5lIEhBVkVfbG9hZF9tdWx0aXBsZSAoVEFSR0VUXzMyQklUKQorI2RlZmluZSBIQVZFX3N0b3JlX211bHRpcGxlIChUQVJHRVRfMzJCSVQpCisjZGVmaW5lIEhBVkVfbW92bWVtcWkgMQorI2RlZmluZSBIQVZFX2NicmFuY2hzaTQgKFRBUkdFVF9USFVNQjEgfHwgVEFSR0VUXzMyQklUKQorI2RlZmluZSBIQVZFX2NicmFuY2hzZjQgKFRBUkdFVF8zMkJJVCAmJiBUQVJHRVRfSEFSRF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9jYnJhbmNoZGY0IChUQVJHRVRfMzJCSVQgJiYgVEFSR0VUX0hBUkRfRkxPQVQgJiYgIVRBUkdFVF9WRlBfU0lOR0xFKQorI2RlZmluZSBIQVZFX2NicmFuY2hkaTQgKFRBUkdFVF9BUk0gJiYgVEFSR0VUX0hBUkRfRkxPQVQgJiYgVEFSR0VUX01BVkVSSUNLKQorI2RlZmluZSBIQVZFX2NicmFuY2hfY2MgKFRBUkdFVF8zMkJJVCkKKyNkZWZpbmUgSEFWRV9jc3RvcmVfY2MgKFRBUkdFVF8zMkJJVCkKKyNkZWZpbmUgSEFWRV9jc3RvcmVzaTQgKFRBUkdFVF8zMkJJVCB8fCBUQVJHRVRfVEhVTUIxKQorI2RlZmluZSBIQVZFX2NzdG9yZXNmNCAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUKQorI2RlZmluZSBIQVZFX2NzdG9yZWRmNCAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUKQorI2RlZmluZSBIQVZFX2NzdG9yZWRpNCAoVEFSR0VUX0FSTSAmJiBUQVJHRVRfSEFSRF9GTE9BVCAmJiBUQVJHRVRfTUFWRVJJQ0spCisjZGVmaW5lIEhBVkVfY3N0b3Jlc2lfZXEwX3RodW1iMSAoVEFSR0VUX1RIVU1CMSkKKyNkZWZpbmUgSEFWRV9jc3RvcmVzaV9uZTBfdGh1bWIxIChUQVJHRVRfVEhVTUIxKQorI2RlZmluZSBIQVZFX21vdnNpY2MgKFRBUkdFVF8zMkJJVCkKKyNkZWZpbmUgSEFWRV9tb3ZzZmNjIChUQVJHRVRfMzJCSVQgJiYgVEFSR0VUX0hBUkRfRkxPQVQpCisjZGVmaW5lIEhBVkVfbW92ZGZjYyAoVEFSR0VUXzMyQklUICYmIFRBUkdFVF9IQVJEX0ZMT0FUICYmIChUQVJHRVRfRlBBIHx8IFRBUkdFVF9WRlBfRE9VQkxFKSkKKyNkZWZpbmUgSEFWRV9qdW1wIDEKKyNkZWZpbmUgSEFWRV9jYWxsIDEKKyNkZWZpbmUgSEFWRV9jYWxsX2ludGVybmFsIDEKKyNkZWZpbmUgSEFWRV9jYWxsX3ZhbHVlIDEKKyNkZWZpbmUgSEFWRV9jYWxsX3ZhbHVlX2ludGVybmFsIDEKKyNkZWZpbmUgSEFWRV9zaWJjYWxsIChUQVJHRVRfQVJNKQorI2RlZmluZSBIQVZFX3NpYmNhbGxfdmFsdWUgKFRBUkdFVF9BUk0pCisjZGVmaW5lIEhBVkVfcmV0dXJuX2FkZHJfbWFzayAoVEFSR0VUX0FSTSkKKyNkZWZpbmUgSEFWRV91bnR5cGVkX2NhbGwgMQorI2RlZmluZSBIQVZFX3VudHlwZWRfcmV0dXJuIDEKKyNkZWZpbmUgSEFWRV9jYXNlc2kgKFRBUkdFVF8zMkJJVCB8fCBvcHRpbWl6ZV9zaXplIHx8IGZsYWdfcGljKQorI2RlZmluZSBIQVZFX3RodW1iMV9jYXNlc2lfaW50ZXJuYWxfcGljIChUQVJHRVRfVEhVTUIxKQorI2RlZmluZSBIQVZFX2luZGlyZWN0X2p1bXAgMQorI2RlZmluZSBIQVZFX3Byb2xvZ3VlIDEKKyNkZWZpbmUgSEFWRV9lcGlsb2d1ZSAxCisjZGVmaW5lIEhBVkVfZWhfZXBpbG9ndWUgMQorI2RlZmluZSBIQVZFX3RhYmxlanVtcCAoVEFSR0VUX1RIVU1CMSkKKyNkZWZpbmUgSEFWRV9jdHpzaTIgKFRBUkdFVF8zMkJJVCAmJiBhcm1fYXJjaF90aHVtYjIpCisjZGVmaW5lIEhBVkVfZWhfcmV0dXJuIDEKKyNkZWZpbmUgSEFWRV9hcm1fbGVnYWN5X3JldiAoVEFSR0VUXzMyQklUKQorI2RlZmluZSBIQVZFX3RodW1iX2xlZ2FjeV9yZXYgKFRBUkdFVF9USFVNQikKKyNkZWZpbmUgSEFWRV9ic3dhcHNpMiAoVEFSR0VUX0VJVEhFUiAmJiAoYXJtX2FyY2g2IHx8ICFvcHRpbWl6ZV9zaXplKSkKKyNkZWZpbmUgSEFWRV9tb3Z2MmRpIChUQVJHRVRfTkVPTiBcCisgICB8fCAoVEFSR0VUX1JFQUxMWV9JV01NWFQgJiYgVkFMSURfSVdNTVhUX1JFR19NT0RFIChWMkRJbW9kZSkpKQorI2RlZmluZSBIQVZFX21vdnYyc2kgKFRBUkdFVF9ORU9OIFwKKyAgIHx8IChUQVJHRVRfUkVBTExZX0lXTU1YVCAmJiBWQUxJRF9JV01NWFRfUkVHX01PREUgKFYyU0ltb2RlKSkpCisjZGVmaW5lIEhBVkVfbW92djRoaSAoVEFSR0VUX05FT04gXAorICAgfHwgKFRBUkdFVF9SRUFMTFlfSVdNTVhUICYmIFZBTElEX0lXTU1YVF9SRUdfTU9ERSAoVjRISW1vZGUpKSkKKyNkZWZpbmUgSEFWRV9tb3Z2OHFpIChUQVJHRVRfTkVPTiBcCisgICB8fCAoVEFSR0VUX1JFQUxMWV9JV01NWFQgJiYgVkFMSURfSVdNTVhUX1JFR19NT0RFIChWOFFJbW9kZSkpKQorI2RlZmluZSBIQVZFX21vdnYyc2YgKFRBUkdFVF9ORU9OIFwKKyAgIHx8IChUQVJHRVRfUkVBTExZX0lXTU1YVCAmJiBWQUxJRF9JV01NWFRfUkVHX01PREUgKFYyU0Ztb2RlKSkpCisjZGVmaW5lIEhBVkVfbW92djRzaSAoVEFSR0VUX05FT04gXAorICAgfHwgKFRBUkdFVF9SRUFMTFlfSVdNTVhUICYmIFZBTElEX0lXTU1YVF9SRUdfTU9ERSAoVjRTSW1vZGUpKSkKKyNkZWZpbmUgSEFWRV9tb3Z2OGhpIChUQVJHRVRfTkVPTiBcCisgICB8fCAoVEFSR0VUX1JFQUxMWV9JV01NWFQgJiYgVkFMSURfSVdNTVhUX1JFR19NT0RFIChWOEhJbW9kZSkpKQorI2RlZmluZSBIQVZFX21vdnYxNnFpIChUQVJHRVRfTkVPTiBcCisgICB8fCAoVEFSR0VUX1JFQUxMWV9JV01NWFQgJiYgVkFMSURfSVdNTVhUX1JFR19NT0RFIChWMTZRSW1vZGUpKSkKKyNkZWZpbmUgSEFWRV9tb3Z2NHNmIChUQVJHRVRfTkVPTiBcCisgICB8fCAoVEFSR0VUX1JFQUxMWV9JV01NWFQgJiYgVkFMSURfSVdNTVhUX1JFR19NT0RFIChWNFNGbW9kZSkpKQorI2RlZmluZSBIQVZFX2FkZHYyZGkzIChUQVJHRVRfTkVPTiBcCisgICB8fCAoVEFSR0VUX1JFQUxMWV9JV01NWFQgJiYgVkFMSURfSVdNTVhUX1JFR19NT0RFIChWMkRJbW9kZSkpKQorI2RlZmluZSBIQVZFX2FkZHYyc2kzIChUQVJHRVRfTkVPTiBcCisgICB8fCAoVEFSR0VUX1JFQUxMWV9JV01NWFQgJiYgVkFMSURfSVdNTVhUX1JFR19NT0RFIChWMlNJbW9kZSkpKQorI2RlZmluZSBIQVZFX2FkZHY0aGkzIChUQVJHRVRfTkVPTiBcCisgICB8fCAoVEFSR0VUX1JFQUxMWV9JV01NWFQgJiYgVkFMSURfSVdNTVhUX1JFR19NT0RFIChWNEhJbW9kZSkpKQorI2RlZmluZSBIQVZFX2FkZHY4cWkzIChUQVJHRVRfTkVPTiBcCisgICB8fCAoVEFSR0VUX1JFQUxMWV9JV01NWFQgJiYgVkFMSURfSVdNTVhUX1JFR19NT0RFIChWOFFJbW9kZSkpKQorI2RlZmluZSBIQVZFX2FkZHYyc2YzIChUQVJHRVRfTkVPTiBcCisgICB8fCAoVEFSR0VUX1JFQUxMWV9JV01NWFQgJiYgVkFMSURfSVdNTVhUX1JFR19NT0RFIChWMlNGbW9kZSkpKQorI2RlZmluZSBIQVZFX2FkZHY0c2kzIChUQVJHRVRfTkVPTiBcCisgICB8fCAoVEFSR0VUX1JFQUxMWV9JV01NWFQgJiYgVkFMSURfSVdNTVhUX1JFR19NT0RFIChWNFNJbW9kZSkpKQorI2RlZmluZSBIQVZFX2FkZHY4aGkzIChUQVJHRVRfTkVPTiBcCisgICB8fCAoVEFSR0VUX1JFQUxMWV9JV01NWFQgJiYgVkFMSURfSVdNTVhUX1JFR19NT0RFIChWOEhJbW9kZSkpKQorI2RlZmluZSBIQVZFX2FkZHYxNnFpMyAoVEFSR0VUX05FT04gXAorICAgfHwgKFRBUkdFVF9SRUFMTFlfSVdNTVhUICYmIFZBTElEX0lXTU1YVF9SRUdfTU9ERSAoVjE2UUltb2RlKSkpCisjZGVmaW5lIEhBVkVfYWRkdjRzZjMgKFRBUkdFVF9ORU9OIFwKKyAgIHx8IChUQVJHRVRfUkVBTExZX0lXTU1YVCAmJiBWQUxJRF9JV01NWFRfUkVHX01PREUgKFY0U0Ztb2RlKSkpCisjZGVmaW5lIEhBVkVfc3VidjJkaTMgKFRBUkdFVF9ORU9OIFwKKyAgIHx8IChUQVJHRVRfUkVBTExZX0lXTU1YVCAmJiBWQUxJRF9JV01NWFRfUkVHX01PREUgKFYyREltb2RlKSkpCisjZGVmaW5lIEhBVkVfc3VidjJzaTMgKFRBUkdFVF9ORU9OIFwKKyAgIHx8IChUQVJHRVRfUkVBTExZX0lXTU1YVCAmJiBWQUxJRF9JV01NWFRfUkVHX01PREUgKFYyU0ltb2RlKSkpCisjZGVmaW5lIEhBVkVfc3VidjRoaTMgKFRBUkdFVF9ORU9OIFwKKyAgIHx8IChUQVJHRVRfUkVBTExZX0lXTU1YVCAmJiBWQUxJRF9JV01NWFRfUkVHX01PREUgKFY0SEltb2RlKSkpCisjZGVmaW5lIEhBVkVfc3VidjhxaTMgKFRBUkdFVF9ORU9OIFwKKyAgIHx8IChUQVJHRVRfUkVBTExZX0lXTU1YVCAmJiBWQUxJRF9JV01NWFRfUkVHX01PREUgKFY4UUltb2RlKSkpCisjZGVmaW5lIEhBVkVfc3VidjJzZjMgKFRBUkdFVF9ORU9OIFwKKyAgIHx8IChUQVJHRVRfUkVBTExZX0lXTU1YVCAmJiBWQUxJRF9JV01NWFRfUkVHX01PREUgKFYyU0Ztb2RlKSkpCisjZGVmaW5lIEhBVkVfc3VidjRzaTMgKFRBUkdFVF9ORU9OIFwKKyAgIHx8IChUQVJHRVRfUkVBTExZX0lXTU1YVCAmJiBWQUxJRF9JV01NWFRfUkVHX01PREUgKFY0U0ltb2RlKSkpCisjZGVmaW5lIEhBVkVfc3VidjhoaTMgKFRBUkdFVF9ORU9OIFwKKyAgIHx8IChUQVJHRVRfUkVBTExZX0lXTU1YVCAmJiBWQUxJRF9JV01NWFRfUkVHX01PREUgKFY4SEltb2RlKSkpCisjZGVmaW5lIEhBVkVfc3VidjE2cWkzIChUQVJHRVRfTkVPTiBcCisgICB8fCAoVEFSR0VUX1JFQUxMWV9JV01NWFQgJiYgVkFMSURfSVdNTVhUX1JFR19NT0RFIChWMTZRSW1vZGUpKSkKKyNkZWZpbmUgSEFWRV9zdWJ2NHNmMyAoVEFSR0VUX05FT04gXAorICAgfHwgKFRBUkdFVF9SRUFMTFlfSVdNTVhUICYmIFZBTElEX0lXTU1YVF9SRUdfTU9ERSAoVjRTRm1vZGUpKSkKKyNkZWZpbmUgSEFWRV9tdWx2MnNpMyAoVEFSR0VUX05FT04gfHwgKFYyU0ltb2RlID09IFY0SEltb2RlICYmIFRBUkdFVF9SRUFMTFlfSVdNTVhUKSkKKyNkZWZpbmUgSEFWRV9tdWx2NGhpMyAoVEFSR0VUX05FT04gfHwgKFY0SEltb2RlID09IFY0SEltb2RlICYmIFRBUkdFVF9SRUFMTFlfSVdNTVhUKSkKKyNkZWZpbmUgSEFWRV9tdWx2OHFpMyAoVEFSR0VUX05FT04gfHwgKFY4UUltb2RlID09IFY0SEltb2RlICYmIFRBUkdFVF9SRUFMTFlfSVdNTVhUKSkKKyNkZWZpbmUgSEFWRV9tdWx2MnNmMyAoVEFSR0VUX05FT04gfHwgKFYyU0Ztb2RlID09IFY0SEltb2RlICYmIFRBUkdFVF9SRUFMTFlfSVdNTVhUKSkKKyNkZWZpbmUgSEFWRV9tdWx2NHNpMyAoVEFSR0VUX05FT04gfHwgKFY0U0ltb2RlID09IFY0SEltb2RlICYmIFRBUkdFVF9SRUFMTFlfSVdNTVhUKSkKKyNkZWZpbmUgSEFWRV9tdWx2OGhpMyAoVEFSR0VUX05FT04gfHwgKFY4SEltb2RlID09IFY0SEltb2RlICYmIFRBUkdFVF9SRUFMTFlfSVdNTVhUKSkKKyNkZWZpbmUgSEFWRV9tdWx2MTZxaTMgKFRBUkdFVF9ORU9OIHx8IChWMTZRSW1vZGUgPT0gVjRISW1vZGUgJiYgVEFSR0VUX1JFQUxMWV9JV01NWFQpKQorI2RlZmluZSBIQVZFX211bHY0c2YzIChUQVJHRVRfTkVPTiB8fCAoVjRTRm1vZGUgPT0gVjRISW1vZGUgJiYgVEFSR0VUX1JFQUxMWV9JV01NWFQpKQorI2RlZmluZSBIQVZFX3NtaW52MnNpMyAoVEFSR0VUX05FT04gXAorICAgfHwgKFRBUkdFVF9SRUFMTFlfSVdNTVhUICYmIFZBTElEX0lXTU1YVF9SRUdfTU9ERSAoVjJTSW1vZGUpKSkKKyNkZWZpbmUgSEFWRV9zbWludjRoaTMgKFRBUkdFVF9ORU9OIFwKKyAgIHx8IChUQVJHRVRfUkVBTExZX0lXTU1YVCAmJiBWQUxJRF9JV01NWFRfUkVHX01PREUgKFY0SEltb2RlKSkpCisjZGVmaW5lIEhBVkVfc21pbnY4cWkzIChUQVJHRVRfTkVPTiBcCisgICB8fCAoVEFSR0VUX1JFQUxMWV9JV01NWFQgJiYgVkFMSURfSVdNTVhUX1JFR19NT0RFIChWOFFJbW9kZSkpKQorI2RlZmluZSBIQVZFX3NtaW52MnNmMyAoVEFSR0VUX05FT04gXAorICAgfHwgKFRBUkdFVF9SRUFMTFlfSVdNTVhUICYmIFZBTElEX0lXTU1YVF9SRUdfTU9ERSAoVjJTRm1vZGUpKSkKKyNkZWZpbmUgSEFWRV9zbWludjRzaTMgKFRBUkdFVF9ORU9OIFwKKyAgIHx8IChUQVJHRVRfUkVBTExZX0lXTU1YVCAmJiBWQUxJRF9JV01NWFRfUkVHX01PREUgKFY0U0ltb2RlKSkpCisjZGVmaW5lIEhBVkVfc21pbnY4aGkzIChUQVJHRVRfTkVPTiBcCisgICB8fCAoVEFSR0VUX1JFQUxMWV9JV01NWFQgJiYgVkFMSURfSVdNTVhUX1JFR19NT0RFIChWOEhJbW9kZSkpKQorI2RlZmluZSBIQVZFX3NtaW52MTZxaTMgKFRBUkdFVF9ORU9OIFwKKyAgIHx8IChUQVJHRVRfUkVBTExZX0lXTU1YVCAmJiBWQUxJRF9JV01NWFRfUkVHX01PREUgKFYxNlFJbW9kZSkpKQorI2RlZmluZSBIQVZFX3NtaW52NHNmMyAoVEFSR0VUX05FT04gXAorICAgfHwgKFRBUkdFVF9SRUFMTFlfSVdNTVhUICYmIFZBTElEX0lXTU1YVF9SRUdfTU9ERSAoVjRTRm1vZGUpKSkKKyNkZWZpbmUgSEFWRV91bWludjJzaTMgKFRBUkdFVF9ORU9OIFwKKyAgIHx8IChUQVJHRVRfUkVBTExZX0lXTU1YVCAmJiBWQUxJRF9JV01NWFRfUkVHX01PREUgKFYyU0ltb2RlKSkpCisjZGVmaW5lIEhBVkVfdW1pbnY0aGkzIChUQVJHRVRfTkVPTiBcCisgICB8fCAoVEFSR0VUX1JFQUxMWV9JV01NWFQgJiYgVkFMSURfSVdNTVhUX1JFR19NT0RFIChWNEhJbW9kZSkpKQorI2RlZmluZSBIQVZFX3VtaW52OHFpMyAoVEFSR0VUX05FT04gXAorICAgfHwgKFRBUkdFVF9SRUFMTFlfSVdNTVhUICYmIFZBTElEX0lXTU1YVF9SRUdfTU9ERSAoVjhRSW1vZGUpKSkKKyNkZWZpbmUgSEFWRV91bWludjRzaTMgKFRBUkdFVF9ORU9OIFwKKyAgIHx8IChUQVJHRVRfUkVBTExZX0lXTU1YVCAmJiBWQUxJRF9JV01NWFRfUkVHX01PREUgKFY0U0ltb2RlKSkpCisjZGVmaW5lIEhBVkVfdW1pbnY4aGkzIChUQVJHRVRfTkVPTiBcCisgICB8fCAoVEFSR0VUX1JFQUxMWV9JV01NWFQgJiYgVkFMSURfSVdNTVhUX1JFR19NT0RFIChWOEhJbW9kZSkpKQorI2RlZmluZSBIQVZFX3VtaW52MTZxaTMgKFRBUkdFVF9ORU9OIFwKKyAgIHx8IChUQVJHRVRfUkVBTExZX0lXTU1YVCAmJiBWQUxJRF9JV01NWFRfUkVHX01PREUgKFYxNlFJbW9kZSkpKQorI2RlZmluZSBIQVZFX3NtYXh2MnNpMyAoVEFSR0VUX05FT04gXAorICAgfHwgKFRBUkdFVF9SRUFMTFlfSVdNTVhUICYmIFZBTElEX0lXTU1YVF9SRUdfTU9ERSAoVjJTSW1vZGUpKSkKKyNkZWZpbmUgSEFWRV9zbWF4djRoaTMgKFRBUkdFVF9ORU9OIFwKKyAgIHx8IChUQVJHRVRfUkVBTExZX0lXTU1YVCAmJiBWQUxJRF9JV01NWFRfUkVHX01PREUgKFY0SEltb2RlKSkpCisjZGVmaW5lIEhBVkVfc21heHY4cWkzIChUQVJHRVRfTkVPTiBcCisgICB8fCAoVEFSR0VUX1JFQUxMWV9JV01NWFQgJiYgVkFMSURfSVdNTVhUX1JFR19NT0RFIChWOFFJbW9kZSkpKQorI2RlZmluZSBIQVZFX3NtYXh2MnNmMyAoVEFSR0VUX05FT04gXAorICAgfHwgKFRBUkdFVF9SRUFMTFlfSVdNTVhUICYmIFZBTElEX0lXTU1YVF9SRUdfTU9ERSAoVjJTRm1vZGUpKSkKKyNkZWZpbmUgSEFWRV9zbWF4djRzaTMgKFRBUkdFVF9ORU9OIFwKKyAgIHx8IChUQVJHRVRfUkVBTExZX0lXTU1YVCAmJiBWQUxJRF9JV01NWFRfUkVHX01PREUgKFY0U0ltb2RlKSkpCisjZGVmaW5lIEhBVkVfc21heHY4aGkzIChUQVJHRVRfTkVPTiBcCisgICB8fCAoVEFSR0VUX1JFQUxMWV9JV01NWFQgJiYgVkFMSURfSVdNTVhUX1JFR19NT0RFIChWOEhJbW9kZSkpKQorI2RlZmluZSBIQVZFX3NtYXh2MTZxaTMgKFRBUkdFVF9ORU9OIFwKKyAgIHx8IChUQVJHRVRfUkVBTExZX0lXTU1YVCAmJiBWQUxJRF9JV01NWFRfUkVHX01PREUgKFYxNlFJbW9kZSkpKQorI2RlZmluZSBIQVZFX3NtYXh2NHNmMyAoVEFSR0VUX05FT04gXAorICAgfHwgKFRBUkdFVF9SRUFMTFlfSVdNTVhUICYmIFZBTElEX0lXTU1YVF9SRUdfTU9ERSAoVjRTRm1vZGUpKSkKKyNkZWZpbmUgSEFWRV91bWF4djJzaTMgKFRBUkdFVF9ORU9OIFwKKyAgIHx8IChUQVJHRVRfUkVBTExZX0lXTU1YVCAmJiBWQUxJRF9JV01NWFRfUkVHX01PREUgKFYyU0ltb2RlKSkpCisjZGVmaW5lIEhBVkVfdW1heHY0aGkzIChUQVJHRVRfTkVPTiBcCisgICB8fCAoVEFSR0VUX1JFQUxMWV9JV01NWFQgJiYgVkFMSURfSVdNTVhUX1JFR19NT0RFIChWNEhJbW9kZSkpKQorI2RlZmluZSBIQVZFX3VtYXh2OHFpMyAoVEFSR0VUX05FT04gXAorICAgfHwgKFRBUkdFVF9SRUFMTFlfSVdNTVhUICYmIFZBTElEX0lXTU1YVF9SRUdfTU9ERSAoVjhRSW1vZGUpKSkKKyNkZWZpbmUgSEFWRV91bWF4djRzaTMgKFRBUkdFVF9ORU9OIFwKKyAgIHx8IChUQVJHRVRfUkVBTExZX0lXTU1YVCAmJiBWQUxJRF9JV01NWFRfUkVHX01PREUgKFY0U0ltb2RlKSkpCisjZGVmaW5lIEhBVkVfdW1heHY4aGkzIChUQVJHRVRfTkVPTiBcCisgICB8fCAoVEFSR0VUX1JFQUxMWV9JV01NWFQgJiYgVkFMSURfSVdNTVhUX1JFR19NT0RFIChWOEhJbW9kZSkpKQorI2RlZmluZSBIQVZFX3VtYXh2MTZxaTMgKFRBUkdFVF9ORU9OIFwKKyAgIHx8IChUQVJHRVRfUkVBTExZX0lXTU1YVCAmJiBWQUxJRF9JV01NWFRfUkVHX01PREUgKFYxNlFJbW9kZSkpKQorI2RlZmluZSBIQVZFX21vdnRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9tb3ZlaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbW92b2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX21vdmNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9tb3Z4aSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmVjX3NldHY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3ZlY19zZXR2MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmVjX3NldHY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3ZlY19zZXR2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV92ZWNfc2V0djJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmVjX3NldHY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3ZlY19zZXR2MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV92ZWNfc2V0djRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmVjX3NldHYyZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3ZlY19pbml0djhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmVjX2luaXR2MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmVjX2luaXR2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV92ZWNfaW5pdHY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3ZlY19pbml0djJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmVjX2luaXR2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV92ZWNfaW5pdHYyc2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3ZlY19pbml0djRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmVjX2luaXR2MmRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV92YXNocnY4cWkzIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV92YXNocnYxNnFpMyAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmFzaHJ2NGhpMyAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmFzaHJ2OGhpMyAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmFzaHJ2MnNpMyAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmFzaHJ2NHNpMyAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmxzaHJ2OHFpMyAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmxzaHJ2MTZxaTMgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3Zsc2hydjRoaTMgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3Zsc2hydjhoaTMgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3Zsc2hydjJzaTMgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3Zsc2hydjRzaTMgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3ZlY19zaHJfdjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmVjX3Nocl92MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmVjX3Nocl92NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV92ZWNfc2hyX3Y4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3ZlY19zaHJfdjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmVjX3Nocl92NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV92ZWNfc2hyX3Yyc2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3ZlY19zaHJfdjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmVjX3Nocl92MmRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV92ZWNfc2hsX3Y4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3ZlY19zaGxfdjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3ZlY19zaGxfdjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmVjX3NobF92OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV92ZWNfc2hsX3Yyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3ZlY19zaGxfdjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfdmVjX3NobF92MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV92ZWNfc2hsX3Y0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3ZlY19zaGxfdjJkaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfcmVkdWNfc3BsdXNfdjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfcmVkdWNfc3BsdXNfdjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfcmVkdWNfc3BsdXNfdjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfcmVkdWNfc3BsdXNfdjJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfcmVkdWNfc3BsdXNfdjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3JlZHVjX3NwbHVzX3Y4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3JlZHVjX3NwbHVzX3Y0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3JlZHVjX3NwbHVzX3Y0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3JlZHVjX3VwbHVzX3Y4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3JlZHVjX3VwbHVzX3YxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9yZWR1Y191cGx1c192NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9yZWR1Y191cGx1c192OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9yZWR1Y191cGx1c192MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9yZWR1Y191cGx1c192NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9yZWR1Y191cGx1c192MmRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9yZWR1Y19zbWluX3Y4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3JlZHVjX3NtaW5fdjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfcmVkdWNfc21pbl92MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9yZWR1Y19zbWluX3Yyc2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3JlZHVjX3NtaW5fdjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3JlZHVjX3NtaW5fdjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfcmVkdWNfc21pbl92NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9yZWR1Y19zbWluX3Y0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3JlZHVjX3NtYXhfdjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfcmVkdWNfc21heF92NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9yZWR1Y19zbWF4X3Yyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3JlZHVjX3NtYXhfdjJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfcmVkdWNfc21heF92MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfcmVkdWNfc21heF92OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9yZWR1Y19zbWF4X3Y0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3JlZHVjX3NtYXhfdjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfcmVkdWNfdW1pbl92OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9yZWR1Y191bWluX3Y0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3JlZHVjX3VtaW5fdjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfcmVkdWNfdW1pbl92MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfcmVkdWNfdW1pbl92OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9yZWR1Y191bWluX3Y0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3JlZHVjX3VtYXhfdjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfcmVkdWNfdW1heF92NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9yZWR1Y191bWF4X3Yyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3JlZHVjX3VtYXhfdjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX3JlZHVjX3VtYXhfdjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfcmVkdWNfdW1heF92NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZwYWRkdjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cGFkZHY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnBhZGR2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZwYWRkdjJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bmVndjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bmVndjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm5lZ3Y0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm5lZ3Y4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm5lZ3Yyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm5lZ3Y0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm5lZ3Yyc2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm5lZ3Y0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm12bnY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm12bnYxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Ztdm52NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Ztdm52OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Ztdm52MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Ztdm52NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZnZXRfbGFuZXY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmdldF9sYW5ldjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmdldF9sYW5ldjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Z2V0X2xhbmV2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZnZXRfbGFuZXYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmdldF9sYW5ldjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92Z2V0X2xhbmV2MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZnZXRfbGFuZXY0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmNyZWF0ZXY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmNyZWF0ZXY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmNyZWF0ZXYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmNyZWF0ZXYyc2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmNyZWF0ZWRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZkdXBfbGFuZWRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtdWxfbnY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm11bF9udjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bXVsX252MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtdWxfbnY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm11bF9udjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bXVsX252NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtdWxsX252NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtdWxsX252MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZxZG11bGxfbnY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnFkbXVsbF9udjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cWRtdWxoX252NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZxZG11bGhfbnYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnFkbXVsaF9udjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cWRtdWxoX252NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtbGFfbnY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm1sYV9udjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWxhX252MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtbGFfbnY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm1sYV9udjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWxhX252NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtbGFsX252NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtbGFsX252MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZxZG1sYWxfbnY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnFkbWxhbF9udjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWxzX252NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtbHNfbnYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm1sc19udjJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWxzX252OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZtbHNfbnY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm1sc19udjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWxzbF9udjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bWxzbF9udjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cWRtbHNsX252NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZxZG1sc2xfbnYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmJzbHY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmJzbHYxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zic2x2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zic2x2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zic2x2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zic2x2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zic2x2MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zic2x2NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zic2xkaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92YnNsdjJkaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92dHJudjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92dHJudjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnRybnY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnRybnY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnRybnYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnRybnY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnRybnYyc2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnRybnY0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnppcHY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnppcHYxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Z6aXB2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Z6aXB2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Z6aXB2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Z6aXB2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Z6aXB2MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Z6aXB2NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Z1enB2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Z1enB2MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92dXpwdjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92dXpwdjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92dXpwdjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92dXpwdjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92dXpwdjJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92dXpwdjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cmVpbnRlcnByZXR2OHFpdjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cmVpbnRlcnByZXR2OHFpdjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cmVpbnRlcnByZXR2OHFpdjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cmVpbnRlcnByZXR2OHFpdjJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cmVpbnRlcnByZXR2OHFpZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnJlaW50ZXJwcmV0djRoaXY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnJlaW50ZXJwcmV0djRoaXY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnJlaW50ZXJwcmV0djRoaXYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnJlaW50ZXJwcmV0djRoaXYyc2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnJlaW50ZXJwcmV0djRoaWRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZyZWludGVycHJldHYyc2l2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZyZWludGVycHJldHYyc2l2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZyZWludGVycHJldHYyc2l2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZyZWludGVycHJldHYyc2l2MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZyZWludGVycHJldHYyc2lkaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cmVpbnRlcnByZXR2MnNmdjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cmVpbnRlcnByZXR2MnNmdjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cmVpbnRlcnByZXR2MnNmdjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cmVpbnRlcnByZXR2MnNmdjJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cmVpbnRlcnByZXR2MnNmZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnJlaW50ZXJwcmV0ZGl2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZyZWludGVycHJldGRpdjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cmVpbnRlcnByZXRkaXYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnJlaW50ZXJwcmV0ZGl2MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZyZWludGVycHJldGRpZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnJlaW50ZXJwcmV0djE2cWl2MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cmVpbnRlcnByZXR2MTZxaXY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnJlaW50ZXJwcmV0djE2cWl2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZyZWludGVycHJldHYxNnFpdjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cmVpbnRlcnByZXR2MTZxaXYyZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnJlaW50ZXJwcmV0djhoaXYxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZyZWludGVycHJldHY4aGl2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZyZWludGVycHJldHY4aGl2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZyZWludGVycHJldHY4aGl2NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZyZWludGVycHJldHY4aGl2MmRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZyZWludGVycHJldHY0c2l2MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cmVpbnRlcnByZXR2NHNpdjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cmVpbnRlcnByZXR2NHNpdjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cmVpbnRlcnByZXR2NHNpdjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cmVpbnRlcnByZXR2NHNpdjJkaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92cmVpbnRlcnByZXR2NHNmdjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnJlaW50ZXJwcmV0djRzZnY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnJlaW50ZXJwcmV0djRzZnY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnJlaW50ZXJwcmV0djRzZnY0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnJlaW50ZXJwcmV0djRzZnYyZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnJlaW50ZXJwcmV0djJkaXYxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZyZWludGVycHJldHYyZGl2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZyZWludGVycHJldHYyZGl2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZyZWludGVycHJldHYyZGl2NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZyZWludGVycHJldHYyZGl2MmRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDN2MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQzdjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQzdjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92bGQzdjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3QzdjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0M3Y4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0M3Y0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdnN0M3Y0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmxkNHYxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDR2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDR2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZsZDR2NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZzdDR2MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3Q0djhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3Q0djRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92c3Q0djRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92YW5kdjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92YW5kdjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFuZHY0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFuZHY4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFuZHYyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFuZHY0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFuZHYyc2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFuZHY0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmFuZGRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZhbmR2MmRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZvcnJ2OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZvcnJ2MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92b3JydjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92b3JydjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92b3JydjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92b3JydjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92b3JydjJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92b3JydjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92b3JyZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm9ycnYyZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmVvcnY4cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmVvcnYxNnFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zlb3J2NGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zlb3J2OGhpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zlb3J2MnNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zlb3J2NHNpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zlb3J2MnNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zlb3J2NHNmIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zlb3JkaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92ZW9ydjJkaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92YmljdjhxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92YmljdjE2cWkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmJpY3Y0aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmJpY3Y4aGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmJpY3Yyc2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmJpY3Y0c2kgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmJpY3Yyc2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmJpY3Y0c2YgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdmJpY2RpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3ZiaWN2MmRpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zvcm52OHFpIChUQVJHRVRfTkVPTikKKyNkZWZpbmUgSEFWRV9uZW9uX3Zvcm52MTZxaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92b3JudjRoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92b3JudjhoaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92b3JudjJzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92b3JudjRzaSAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92b3JudjJzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92b3JudjRzZiAoVEFSR0VUX05FT04pCisjZGVmaW5lIEhBVkVfbmVvbl92b3JuZGkgKFRBUkdFVF9ORU9OKQorI2RlZmluZSBIQVZFX25lb25fdm9ybnYyZGkgKFRBUkdFVF9ORU9OKQorZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX211bGhpc2kzICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYW5kZGkzICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pbnN2X3plcm8gICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2luc3ZfdDIgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hbmRzaV9ub3RzaV9zaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2JpY3NpMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYW5kc2lfbm90X3NoaWZ0c2lfc2kgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5faW9yZGkzICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl94b3JkaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FybV9hc2hsZGkzXzFiaXQgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FybV9hc2hyZGkzXzFiaXQgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FybV9sc2hyZGkzXzFiaXQgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2V4dHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9leHR6dl90MiAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fb25lX2NtcGxkaTIgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdGh1bWIxX2V4dGVuZGhpc2kyICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcGljX2xvYWRfYWRkcl8zMmJpdCAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcGljX2xvYWRfYWRkcl90aHVtYjEgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcGljX2FkZF9kb3RfcGx1c19mb3VyICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9waWNfYWRkX2RvdF9wbHVzX2VpZ2h0ICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3Rsc19sb2FkX2RvdF9wbHVzX2VpZ2h0ICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitzdGF0aWMgaW5saW5lIHJ0eCBnZW5fcGljX29mZnNldF9hcm0gICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK3N0YXRpYyBpbmxpbmUgcnR4CitnZW5fcGljX29mZnNldF9hcm0ocnR4IEFSR19VTlVTRUQgKGEpLCBydHggQVJHX1VOVVNFRCAoYiksIHJ0eCBBUkdfVU5VU0VEIChjKSkKK3sKKyAgcmV0dXJuIDA7Cit9CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92bWVtMTJiICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdm1lbThiICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jYnJhbmNoc2k0X3NjcmF0Y2ggICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jc3RvcmVzaV9ubHR1X3RodW1iMSAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2NzdG9yZXNpX2x0dV90aHVtYjEgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdGh1bWIxX2FkZHNpM19hZGRnZXUgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmV0dXJuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKK2V4dGVybiBydHggICAgICAgIGdlbl9ibG9ja2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FybV9jYXNlc2lfaW50ZXJuYWwgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl90aHVtYjFfY2FzZXNpX2Rpc3BhdGNoICAgICAgICAgICAgKHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tb3Zjb25kICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3NpYmNhbGxfZXBpbG9ndWUgICAgICAgICAgICAgICAgICAodm9pZCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fc3RhY2tfdGllICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWxpZ25fNCAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hbGlnbl84ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2NvbnN0dGFibGVfZW5kICAgICAgICAgICAgICAgICAgICAodm9pZCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fY29uc3R0YWJsZV8xICAgICAgICAgICAgICAgICAgICAgIChydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2NvbnN0dGFibGVfMiAgICAgICAgICAgICAgICAgICAgICAocnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jb25zdHRhYmxlXzQgICAgICAgICAgICAgICAgICAgICAgKHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fY29uc3R0YWJsZV84ICAgICAgICAgICAgICAgICAgICAgIChydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2NvbnN0dGFibGVfMTYgICAgICAgICAgICAgICAgICAgICAocnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jbHpzaTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yYml0c2kyICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9wcmVmZXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3Byb2xvZ3VlX3VzZSAgICAgICAgICAgICAgICAgICAgICAocnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hcm1fZWhfcmV0dXJuICAgICAgICAgICAgICAgICAgICAgKHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdGh1bWJfZWhfcmV0dXJuICAgICAgICAgICAgICAgICAgIChydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xvYWRfdHBfaGFyZCAgICAgICAgICAgICAgICAgICAgICAocnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sb2FkX3RwX3NvZnQgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2NpcnJ1c19hZGRkaTMgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fY2lycnVzX3N1YmRpMyAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tdWxkaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworc3RhdGljIGlubGluZSBydHggZ2VuX2NpcnJ1c19hc2hsX2NvbnN0ICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitzdGF0aWMgaW5saW5lIHJ0eAorZ2VuX2NpcnJ1c19hc2hsX2NvbnN0KHJ0eCBBUkdfVU5VU0VEIChhKSwgcnR4IEFSR19VTlVTRUQgKGIpLCBydHggQVJHX1VOVVNFRCAoYykpCit7CisgIHJldHVybiAwOworfQorc3RhdGljIGlubGluZSBydHggZ2VuX2NpcnJ1c19hc2hpZnRydF9jb25zdCAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitzdGF0aWMgaW5saW5lIHJ0eAorZ2VuX2NpcnJ1c19hc2hpZnRydF9jb25zdChydHggQVJHX1VOVVNFRCAoYSksIHJ0eCBBUkdfVU5VU0VEIChiKSwgcnR4IEFSR19VTlVTRUQgKGMpKQoreworICByZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgcnR4IGdlbl9jaXJydXNfYXNobHNpMyAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworc3RhdGljIGlubGluZSBydHgKK2dlbl9jaXJydXNfYXNobHNpMyhydHggQVJHX1VOVVNFRCAoYSksIHJ0eCBBUkdfVU5VU0VEIChiKSwgcnR4IEFSR19VTlVTRUQgKGMpKQoreworICByZXR1cm4gMDsKK30KK2V4dGVybiBydHggICAgICAgIGdlbl9hc2hsZGkzX2NpcnJ1cyAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2NpcnJ1c19hc2hsZGlfY29uc3QgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fY2lycnVzX2FzaGlmdHJ0ZGlfY29uc3QgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jaXJydXNfZmxvYXRzaXNmMiAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jaXJydXNfZmxvYXRzaWRmMiAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9mbG9hdGRpc2YyICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9mbG9hdGRpZGYyICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jaXJydXNfdHJ1bmNzZnNpMiAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jaXJydXNfdHJ1bmNkZnNpMiAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfaW9yZGkzICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2l3bW14dF94b3JkaTMgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5faXdtbXh0X2FuZGRpMyAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfbmFuZGRpMyAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdnYyc2lfaW50ZXJuYWwgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdnY0aGlfaW50ZXJuYWwgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdnY4cWlfaW50ZXJuYWwgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3NzYWRkdjhxaTMgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fc3NhZGR2NGhpMyAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zc2FkZHYyc2kzICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3VzYWRkdjhxaTMgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdXNhZGR2NGhpMyAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl91c2FkZHYyc2kzICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3Nzc3VidjhxaTMgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fc3NzdWJ2NGhpMyAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zc3N1YnYyc2kzICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3Vzc3VidjhxaTMgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdXNzdWJ2NGhpMyAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl91c3N1YnYyc2kzICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3NtdWx2NGhpM19oaWdocGFydCAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdW11bHY0aGkzX2hpZ2hwYXJ0ICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfd21hY3MgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5faXdtbXh0X3dtYWNzeiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfd21hY3UgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5faXdtbXh0X3dtYWN1eiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfY2xyZGkgICAgICAgICAgICAgICAgICAgICAgKHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5faXdtbXh0X3VhdmdybmR2OHFpMyAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfdWF2Z3JuZHY0aGkzICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2l3bW14dF91YXZndjhxaTMgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5faXdtbXh0X3Vhdmd2NGhpMyAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfcHNhZGJ3ICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2l3bW14dF90aW5zcmIgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfdGluc3JoICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5faXdtbXh0X3RpbnNydyAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2l3bW14dF90ZXh0cm11YiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5faXdtbXh0X3RleHRybXNiICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfdGV4dHJtdWggICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2l3bW14dF90ZXh0cm1zaCAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5faXdtbXh0X3RleHRybXcgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfd3NodWZoICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2VxdjhxaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZXF2NGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9lcXYyc2kzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2d0dXY4cWkzICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZ3R1djRoaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9ndHV2MnNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2d0djhxaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZ3R2NGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9ndHYyc2kzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2l3bW14dF93cGFja2hzcyAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5faXdtbXh0X3dwYWNrd3NzICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfd3BhY2tkc3MgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2l3bW14dF93cGFja2h1cyAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5faXdtbXh0X3dwYWNrd3VzICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfd3BhY2tkdXMgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2l3bW14dF93dW5wY2tpaGIgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5faXdtbXh0X3d1bnBja2loaCAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfd3VucGNraWh3ICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2l3bW14dF93dW5wY2tpbGIgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5faXdtbXh0X3d1bnBja2lsaCAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfd3VucGNraWx3ICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2l3bW14dF93dW5wY2tlaHViICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2l3bW14dF93dW5wY2tlaHVoICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2l3bW14dF93dW5wY2tlaHV3ICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2l3bW14dF93dW5wY2tlaHNiICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2l3bW14dF93dW5wY2tlaHNoICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2l3bW14dF93dW5wY2tlaHN3ICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2l3bW14dF93dW5wY2tlbHViICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2l3bW14dF93dW5wY2tlbHVoICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2l3bW14dF93dW5wY2tlbHV3ICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2l3bW14dF93dW5wY2tlbHNiICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2l3bW14dF93dW5wY2tlbHNoICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2l3bW14dF93dW5wY2tlbHN3ICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JvcnY0aGkzICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcm9ydjJzaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yb3JkaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FzaHJ2NGhpM19pd21teHQgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXNocnYyc2kzX2l3bW14dCAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hc2hyZGkzX2l3bW14dCAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xzaHJ2NGhpM19pd21teHQgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbHNocnYyc2kzX2l3bW14dCAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sc2hyZGkzX2l3bW14dCAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FzaGx2NGhpM19pd21teHQgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXNobHYyc2kzX2l3bW14dCAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hc2hsZGkzX2l3bW14dCAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JvcnY0aGkzX2RpICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcm9ydjJzaTNfZGkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yb3JkaTNfZGkgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FzaHJ2NGhpM19kaSAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXNocnYyc2kzX2RpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hc2hyZGkzX2RpICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xzaHJ2NGhpM19kaSAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbHNocnYyc2kzX2RpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sc2hyZGkzX2RpICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FzaGx2NGhpM19kaSAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXNobHYyc2kzX2RpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hc2hsZGkzX2RpICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2l3bW14dF93bWFkZHMgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5faXdtbXh0X3dtYWRkdSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfdG1pYSAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5faXdtbXh0X3RtaWFwaCAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2l3bW14dF90bWlhYmIgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfdG1pYXRiICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5faXdtbXh0X3RtaWFidCAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2l3bW14dF90bWlhdHQgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfdGJjc3RxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfdGJjc3RoaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfdGJjc3RzaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfdG1vdm1za2IgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfdG1vdm1za2ggICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfdG1vdm1za3cgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfd2FjY2IgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfd2FjY2ggICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfd2FjY3cgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfd2FsaWduICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5faXdtbXh0X3RtcmMgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5faXdtbXh0X3RtY3IgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5faXdtbXh0X3dzYWRiICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pd21teHRfd3NhZGggICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2l3bW14dF93c2FkYnogICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5faXdtbXh0X3dzYWRoeiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9leHRlbmRoZnNmMiAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl90cnVuY3NmaGYyICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9maXh1bnNfdHJ1bmNzZnNpMiAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9maXh1bnNfdHJ1bmNkZnNpMiAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9mbG9hdHVuc3Npc2YyICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9mbG9hdHVuc3NpZGYyICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl90bHNfbG9hZF9kb3RfcGx1c19mb3VyICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdGh1bWIyX2Nhc2VzaV9pbnRlcm5hbCAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3RodW1iMl9jYXNlc2lfaW50ZXJuYWxfcGljICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl90aHVtYjJfZWhfcmV0dXJuICAgICAgICAgICAgICAgICAgKHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZGl2c2kzICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl91ZGl2c2kzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX29yc2lfbm90c2lfc2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3NldHY4cWlfaW50ZXJuYWwgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19zZXR2NGhpX2ludGVybmFsICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc2V0djJzaV9pbnRlcm5hbCAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3NldHYyc2ZfaW50ZXJuYWwgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19zZXR2MTZxaV9pbnRlcm5hbCAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc2V0djhoaV9pbnRlcm5hbCAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3NldHY0c2lfaW50ZXJuYWwgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19zZXR2NHNmX2ludGVybmFsICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc2V0djJkaV9pbnRlcm5hbCAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX2V4dHJhY3R2OHFpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfZXh0cmFjdHY0aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19leHRyYWN0djJzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX2V4dHJhY3R2MnNmICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfZXh0cmFjdHYxNnFpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19leHRyYWN0djhoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX2V4dHJhY3R2NHNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfZXh0cmFjdHY0c2YgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19leHRyYWN0djJkaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5faW9ydjhxaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pb3J2MTZxaTMgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2lvcnY0aGkzICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5faW9ydjhoaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pb3J2MnNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2lvcnY0c2kzICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5faW9ydjJzZjMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pb3J2NHNmMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2lvcnYyZGkzICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5faW9yZGkzX25lb24gICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hbmR2OHFpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FuZHYxNnFpMyAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYW5kdjRoaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hbmR2OGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FuZHYyc2kzICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYW5kdjRzaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hbmR2MnNmMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FuZHY0c2YzICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYW5kdjJkaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hbmRkaTNfbmVvbiAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX29ybnY4cWkzX25lb24gICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fb3JudjE2cWkzX25lb24gICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9vcm52NGhpM19uZW9uICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX29ybnY4aGkzX25lb24gICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fb3JudjJzaTNfbmVvbiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9vcm52NHNpM19uZW9uICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX29ybnYyc2YzX25lb24gICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fb3JudjRzZjNfbmVvbiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9vcm52MmRpM19uZW9uICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX29ybmRpM19uZW9uICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYmljdjhxaTNfbmVvbiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9iaWN2MTZxaTNfbmVvbiAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2JpY3Y0aGkzX25lb24gICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYmljdjhoaTNfbmVvbiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9iaWN2MnNpM19uZW9uICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2JpY3Y0c2kzX25lb24gICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYmljdjJzZjNfbmVvbiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9iaWN2NHNmM19uZW9uICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2JpY3YyZGkzX25lb24gICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYmljZGkzX25lb24gICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl94b3J2OHFpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3hvcnYxNnFpMyAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5feG9ydjRoaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl94b3J2OGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3hvcnYyc2kzICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5feG9ydjRzaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl94b3J2MnNmMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3hvcnY0c2YzICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5feG9ydjJkaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl94b3JkaTNfbmVvbiAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX29uZV9jbXBsdjhxaTIgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX29uZV9jbXBsdjE2cWkyICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX29uZV9jbXBsdjRoaTIgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX29uZV9jbXBsdjhoaTIgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX29uZV9jbXBsdjJzaTIgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX29uZV9jbXBsdjRzaTIgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX29uZV9jbXBsdjJzZjIgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX29uZV9jbXBsdjRzZjIgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX29uZV9jbXBsdjJkaTIgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2Fic3Y4cWkyICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2Fic3YxNnFpMiAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2Fic3Y0aGkyICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2Fic3Y4aGkyICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2Fic3Yyc2kyICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2Fic3Y0c2kyICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2Fic3Yyc2YyICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2Fic3Y0c2YyICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lZ3Y4cWkyICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lZ3YxNnFpMiAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lZ3Y0aGkyICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lZ3Y4aGkyICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lZ3Yyc2kyICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lZ3Y0c2kyICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lZ3Yyc2YyICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lZ3Y0c2YyICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3Zhc2hsdjhxaTMgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmFzaGx2MTZxaTMgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92YXNobHY0aGkzICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3Zhc2hsdjhoaTMgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmFzaGx2MnNpMyAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92YXNobHY0c2kzICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FzaGx2OHFpM19zaWduZWQgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXNobHYxNnFpM19zaWduZWQgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hc2hsdjRoaTNfc2lnbmVkICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FzaGx2OGhpM19zaWduZWQgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXNobHYyc2kzX3NpZ25lZCAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hc2hsdjRzaTNfc2lnbmVkICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FzaGx2MmRpM19zaWduZWQgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXNobHY4cWkzX3Vuc2lnbmVkICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hc2hsdjE2cWkzX3Vuc2lnbmVkICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FzaGx2NGhpM191bnNpZ25lZCAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXNobHY4aGkzX3Vuc2lnbmVkICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hc2hsdjJzaTNfdW5zaWduZWQgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FzaGx2NHNpM191bnNpZ25lZCAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXNobHYyZGkzX3Vuc2lnbmVkICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl93aWRlbl9zc3VtdjhxaTMgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3dpZGVuX3NzdW12NGhpMyAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fd2lkZW5fc3N1bXYyc2kzICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl93aWRlbl91c3VtdjhxaTMgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3dpZGVuX3VzdW12NGhpMyAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fd2lkZW5fdXN1bXYyc2kzICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9xdWFkX2hhbHZlc19wbHVzdjRzaSAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9xdWFkX2hhbHZlc19zbWludjRzaSAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9xdWFkX2hhbHZlc19zbWF4djRzaSAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9xdWFkX2hhbHZlc191bWludjRzaSAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9xdWFkX2hhbHZlc191bWF4djRzaSAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9xdWFkX2hhbHZlc19wbHVzdjRzZiAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9xdWFkX2hhbHZlc19zbWludjRzZiAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9xdWFkX2hhbHZlc19zbWF4djRzZiAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9xdWFkX2hhbHZlc19wbHVzdjhoaSAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9xdWFkX2hhbHZlc19zbWludjhoaSAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9xdWFkX2hhbHZlc19zbWF4djhoaSAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9xdWFkX2hhbHZlc191bWludjhoaSAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9xdWFkX2hhbHZlc191bWF4djhoaSAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9xdWFkX2hhbHZlc19wbHVzdjE2cWkgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9xdWFkX2hhbHZlc19zbWludjE2cWkgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9xdWFkX2hhbHZlc19zbWF4djE2cWkgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9xdWFkX2hhbHZlc191bWludjE2cWkgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9xdWFkX2hhbHZlc191bWF4djE2cWkgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tb3ZlX2xvX3F1YWRfdjRzaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tb3ZlX2xvX3F1YWRfdjRzZiAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tb3ZlX2xvX3F1YWRfdjhoaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tb3ZlX2xvX3F1YWRfdjE2cWkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yZWR1Y19zcGx1c192MmRpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZwYWRkX2ludGVybmFsdjhxaSAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnBhZGRfaW50ZXJuYWx2NGhpICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cGFkZF9pbnRlcm5hbHYyc2kgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZwYWRkX2ludGVybmFsdjJzZiAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnBzbWludjhxaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cHNtaW52NGhpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zwc21pbnYyc2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnBzbWludjJzZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cHNtYXh2OHFpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zwc21heHY0aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnBzbWF4djJzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cHNtYXh2MnNmICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZwdW1pbnY4cWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnB1bWludjRoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cHVtaW52MnNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZwdW1heHY4cWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnB1bWF4djRoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cHVtYXh2MnNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZhZGR2OHFpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YWRkdjE2cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmFkZHY0aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZhZGR2OGhpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YWRkdjJzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmFkZHY0c2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZhZGR2MnNmICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YWRkdjRzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmFkZGRpICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZhZGR2MmRpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YWRkbHY4cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmFkZGx2NGhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZhZGRsdjJzaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YWRkd3Y4cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmFkZHd2NGhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZhZGR3djJzaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92aGFkZHY4cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmhhZGR2MTZxaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZoYWRkdjRoaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92aGFkZHY4aGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmhhZGR2MnNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZoYWRkdjRzaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cWFkZHY4cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFhZGR2MTZxaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxYWRkdjRoaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cWFkZHY4aGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFhZGR2MnNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxYWRkdjRzaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cWFkZGRpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFhZGR2MmRpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZhZGRobnY4aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YWRkaG52NHNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmFkZGhudjJkaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtdWx2OHFpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bXVsdjE2cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm11bHY0aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtdWx2OGhpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bXVsdjJzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm11bHY0c2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtdWx2MnNmICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bXVsdjRzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sYXY4cWkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sYXYxNnFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sYXY0aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sYXY4aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sYXYyc2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sYXY0c2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sYXYyc2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sYXY0c2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sYWx2OHFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sYWx2NGhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sYWx2MnNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sc3Y4cWkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sc3YxNnFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sc3Y0aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sc3Y4aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sc3Yyc2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sc3Y0c2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sc3Yyc2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sc3Y0c2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sc2x2OHFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sc2x2NGhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sc2x2MnNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFkbXVsaHY0aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxZG11bGh2MnNpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cWRtdWxodjhoaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFkbXVsaHY0c2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxZG1sYWx2NGhpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxZG1sYWx2MnNpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxZG1sc2x2NGhpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxZG1sc2x2MnNpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtdWxsdjhxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bXVsbHY0aGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm11bGx2MnNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxZG11bGx2NGhpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cWRtdWxsdjJzaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN1YnY4cWkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzdWJ2MTZxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3VidjRoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN1YnY4aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzdWJ2MnNpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3VidjRzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN1YnYyc2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzdWJ2NHNmICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3ViZGkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN1YnYyZGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzdWJsdjhxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3VibHY0aGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN1Ymx2MnNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzdWJ3djhxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3Vid3Y0aGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN1Ynd2MnNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zxc3VidjhxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cXN1YnYxNnFpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFzdWJ2NGhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zxc3VidjhoaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cXN1YnYyc2kgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFzdWJ2NHNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zxc3ViZGkgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cXN1YnYyZGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmhzdWJ2OHFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zoc3VidjE2cWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92aHN1YnY0aGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmhzdWJ2OGhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zoc3VidjJzaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92aHN1YnY0c2kgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN1YmhudjhoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzdWJobnY0c2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3ViaG52MmRpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmNlcXY4cWkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZjZXF2MTZxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Y2VxdjRoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmNlcXY4aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZjZXF2MnNpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Y2VxdjRzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmNlcXYyc2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZjZXF2NHNmICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Y2dldjhxaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmNnZXYxNnFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZjZ2V2NGhpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Y2dldjhoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmNnZXYyc2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZjZ2V2NHNpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Y2dldjJzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmNnZXY0c2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZjZ3R2OHFpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Y2d0djE2cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmNndHY0aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZjZ3R2OGhpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Y2d0djJzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmNndHY0c2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZjZ3R2MnNmICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Y2d0djRzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmNhZ2V2MnNmICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZjYWdldjRzZiAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Y2FndHYyc2YgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmNhZ3R2NHNmICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Z0c3R2OHFpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92dHN0djE2cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnRzdHY0aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Z0c3R2OGhpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92dHN0djJzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnRzdHY0c2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZhYmR2OHFpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YWJkdjE2cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmFiZHY0aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZhYmR2OGhpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YWJkdjJzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmFiZHY0c2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZhYmR2MnNmICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YWJkdjRzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmFiZGx2OHFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZhYmRsdjRoaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YWJkbHYyc2kgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmFiYXY4cWkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmFiYXYxNnFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmFiYXY0aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmFiYXY4aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmFiYXYyc2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmFiYXY0c2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmFiYWx2OHFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmFiYWx2NGhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmFiYWx2MnNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1heHY4cWkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtYXh2MTZxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bWF4djRoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1heHY4aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtYXh2MnNpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bWF4djRzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1heHYyc2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtYXh2NHNmICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bWludjhxaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1pbnYxNnFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtaW52NGhpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bWludjhoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1pbnYyc2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtaW52NHNpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bWludjJzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1pbnY0c2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZwYWRkbHY4cWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnBhZGRsdjE2cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cGFkZGx2NGhpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZwYWRkbHY4aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnBhZGRsdjJzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cGFkZGx2NHNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZwYWRhbHY4cWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cGFkYWx2MTZxaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnBhZGFsdjRoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZwYWRhbHY4aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cGFkYWx2MnNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnBhZGFsdjRzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZwbWF4djhxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cG1heHY0aGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnBtYXh2MnNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZwbWF4djJzZiAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cG1pbnY4cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnBtaW52NGhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZwbWludjJzaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cG1pbnYyc2YgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnJlY3BzdjJzZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZyZWNwc3Y0c2YgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cnNxcnRzdjJzZiAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnJzcXJ0c3Y0c2YgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZhYnN2OHFpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmFic3YxNnFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YWJzdjRoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZhYnN2OGhpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmFic3Yyc2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YWJzdjRzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZhYnN2MnNmICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmFic3Y0c2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cWFic3Y4cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxYWJzdjE2cWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFhYnN2NGhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cWFic3Y4aGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxYWJzdjJzaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFhYnN2NHNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cW5lZ3Y4cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxbmVndjE2cWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFuZWd2NGhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cW5lZ3Y4aGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxbmVndjJzaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFuZWd2NHNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Y2xzdjhxaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZjbHN2MTZxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmNsc3Y0aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Y2xzdjhoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZjbHN2MnNpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmNsc3Y0c2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Y2x6djhxaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZjbHp2MTZxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmNsenY0aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Y2x6djhoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZjbHp2MnNpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmNsenY0c2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Y250djhxaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZjbnR2MTZxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnJlY3BldjJzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVjcGV2MnNmICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZyZWNwZXY0c2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnJlY3BldjRzZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cnNxcnRldjJzaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zyc3FydGV2MnNmICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnJzcXJ0ZXY0c2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cnNxcnRldjRzZiAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZnZXRfbGFuZXY4cWlfc2V4dF9pbnRlcm5hbCAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmdldF9sYW5ldjRoaV9zZXh0X2ludGVybmFsICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Z2V0X2xhbmV2MnNpX3NleHRfaW50ZXJuYWwgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZnZXRfbGFuZXYyc2Zfc2V4dF9pbnRlcm5hbCAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmdldF9sYW5ldjhxaV96ZXh0X2ludGVybmFsICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Z2V0X2xhbmV2NGhpX3pleHRfaW50ZXJuYWwgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZnZXRfbGFuZXYyc2lfemV4dF9pbnRlcm5hbCAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmdldF9sYW5ldjJzZl96ZXh0X2ludGVybmFsICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Z2V0X2xhbmV2MTZxaV9zZXh0X2ludGVybmFsIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZnZXRfbGFuZXY4aGlfc2V4dF9pbnRlcm5hbCAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmdldF9sYW5ldjRzaV9zZXh0X2ludGVybmFsICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Z2V0X2xhbmV2NHNmX3NleHRfaW50ZXJuYWwgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZnZXRfbGFuZXYxNnFpX3pleHRfaW50ZXJuYWwgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmdldF9sYW5ldjhoaV96ZXh0X2ludGVybmFsICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Z2V0X2xhbmV2NHNpX3pleHRfaW50ZXJuYWwgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZnZXRfbGFuZXY0c2ZfemV4dF9pbnRlcm5hbCAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmdldF9sYW5lZGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZnZXRfbGFuZXYyZGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c2V0X2xhbmV2OHFpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnNldF9sYW5ldjRoaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzZXRfbGFuZXYyc2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c2V0X2xhbmV2MnNmICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnNldF9sYW5lZGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzZXRfbGFuZXYxNnFpICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c2V0X2xhbmV2OGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnNldF9sYW5ldjRzaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzZXRfbGFuZXY0c2YgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c2V0X2xhbmV2MmRpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmR1cF9udjhxaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmR1cF9udjRoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmR1cF9udjE2cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmR1cF9udjhoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmR1cF9udjJzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmR1cF9udjJzZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmR1cF9udjRzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmR1cF9udjRzZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmR1cF9uZGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmR1cF9udjJkaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmR1cF9sYW5ldjhxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92ZHVwX2xhbmV2NGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZkdXBfbGFuZXYyc2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmR1cF9sYW5ldjJzZiAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92ZHVwX2xhbmV2MTZxaSAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZkdXBfbGFuZXY4aGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmR1cF9sYW5ldjRzaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92ZHVwX2xhbmV2NHNmICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZkdXBfbGFuZXYyZGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmNvbWJpbmV2OHFpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Y29tYmluZXY0aGkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zjb21iaW5ldjJzaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmNvbWJpbmV2MnNmICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Y29tYmluZWRpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZnZXRfaGlnaHYxNnFpICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZnZXRfaGlnaHY4aGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZnZXRfaGlnaHY0c2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZnZXRfaGlnaHY0c2YgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZnZXRfaGlnaHYyZGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZnZXRfbG93djE2cWkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZnZXRfbG93djhoaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZnZXRfbG93djRzaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZnZXRfbG93djRzZiAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZnZXRfbG93djJkaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZjdnR2MnNmICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmN2dHY0c2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Y3Z0djJzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZjdnR2NHNpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmN2dF9udjJzZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZjdnRfbnY0c2YgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Y3Z0X252MnNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmN2dF9udjRzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Ztb3ZudjhoaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1vdm52NHNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bW92bnYyZGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxbW92bnY4aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFtb3ZudjRzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cW1vdm52MmRpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxbW92dW52OGhpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFtb3Z1bnY0c2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cW1vdnVudjJkaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Ztb3ZsdjhxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1vdmx2NGhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bW92bHYyc2kgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtdWxfbGFuZXY0aGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtdWxfbGFuZXYyc2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtdWxfbGFuZXYyc2YgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtdWxfbGFuZXY4aGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtdWxfbGFuZXY0c2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtdWxfbGFuZXY0c2YgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtdWxsX2xhbmV2NGhpICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtdWxsX2xhbmV2MnNpICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxZG11bGxfbGFuZXY0aGkgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxZG11bGxfbGFuZXYyc2kgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxZG11bGhfbGFuZXY4aGkgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxZG11bGhfbGFuZXY0c2kgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxZG11bGhfbGFuZXY0aGkgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxZG11bGhfbGFuZXYyc2kgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtbGFfbGFuZXY0aGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sYV9sYW5ldjJzaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bWxhX2xhbmV2MnNmICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtbGFfbGFuZXY4aGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sYV9sYW5ldjRzaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bWxhX2xhbmV2NHNmICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtbGFsX2xhbmV2NGhpICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sYWxfbGFuZXYyc2kgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cWRtbGFsX2xhbmV2NGhpICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxZG1sYWxfbGFuZXYyc2kgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sc19sYW5ldjRoaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bWxzX2xhbmV2MnNpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtbHNfbGFuZXYyc2YgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sc19sYW5ldjhoaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bWxzX2xhbmV2NHNpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtbHNfbGFuZXY0c2YgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm1sc2xfbGFuZXY0aGkgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bWxzbF9sYW5ldjJzaSAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxZG1sc2xfbGFuZXY0aGkgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFkbWxzbF9sYW5ldjJzaSAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92ZXh0djhxaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmV4dHYxNnFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZleHR2NGhpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92ZXh0djhoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmV4dHYyc2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZleHR2NHNpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92ZXh0djJzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmV4dHY0c2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZleHRkaSAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92ZXh0djJkaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnJldjY0djhxaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmV2NjR2MTZxaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZyZXY2NHY0aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnJldjY0djhoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmV2NjR2MnNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZyZXY2NHY0c2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnJldjY0djJzZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmV2NjR2NHNmICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZyZXY2NHYyZGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnJldjMydjhxaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmV2MzJ2NGhpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZyZXYzMnYxNnFpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnJldjMydjhoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmV2MTZ2OHFpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZyZXYxNnYxNnFpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmJzbHY4cWlfaW50ZXJuYWwgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zic2x2MTZxaV9pbnRlcm5hbCAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YnNsdjRoaV9pbnRlcm5hbCAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmJzbHY4aGlfaW50ZXJuYWwgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zic2x2MnNpX2ludGVybmFsICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YnNsdjRzaV9pbnRlcm5hbCAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmJzbHYyc2ZfaW50ZXJuYWwgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zic2x2NHNmX2ludGVybmFsICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YnNsZGlfaW50ZXJuYWwgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmJzbHYyZGlfaW50ZXJuYWwgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzaGx2OHFpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c2hsdjE2cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnNobHY0aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzaGx2OGhpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c2hsdjJzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnNobHY0c2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzaGxkaSAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c2hsdjJkaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFzaGx2OHFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zxc2hsdjE2cWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cXNobHY0aGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFzaGx2OGhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zxc2hsdjJzaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cXNobHY0c2kgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFzaGxkaSAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zxc2hsdjJkaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c2hyX252OHFpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnNocl9udjE2cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzaHJfbnY0aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c2hyX252OGhpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnNocl9udjJzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzaHJfbnY0c2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c2hyX25kaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnNocl9udjJkaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzaHJuX252OGhpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c2hybl9udjRzaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnNocm5fbnYyZGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zxc2hybl9udjhoaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cXNocm5fbnY0c2kgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFzaHJuX252MmRpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zxc2hydW5fbnY4aGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cXNocnVuX252NHNpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFzaHJ1bl9udjJkaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzaGxfbnY4cWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c2hsX252MTZxaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnNobF9udjRoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzaGxfbnY4aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c2hsX252MnNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnNobF9udjRzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzaGxfbmRpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c2hsX252MmRpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFzaGxfbnY4cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zxc2hsX252MTZxaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cXNobF9udjRoaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFzaGxfbnY4aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zxc2hsX252MnNpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cXNobF9udjRzaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFzaGxfbmRpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zxc2hsX252MmRpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cXNobHVfbnY4cWkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFzaGx1X252MTZxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zxc2hsdV9udjRoaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cXNobHVfbnY4aGkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFzaGx1X252MnNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zxc2hsdV9udjRzaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cXNobHVfbmRpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFzaGx1X252MmRpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzaGxsX252OHFpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c2hsbF9udjRoaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnNobGxfbnYyc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzcmFfbnY4cWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzcmFfbnYxNnFpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzcmFfbnY0aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzcmFfbnY4aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzcmFfbnYyc2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzcmFfbnY0c2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzcmFfbmRpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzcmFfbnYyZGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzcmlfbnY4cWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3JpX252MTZxaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnNyaV9udjRoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzcmlfbnY4aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3JpX252MnNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnNyaV9udjRzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzcmlfbmRpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3JpX252MmRpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnNsaV9udjhxaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzbGlfbnYxNnFpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c2xpX252NGhpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnNsaV9udjhoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzbGlfbnYyc2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c2xpX252NHNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnNsaV9uZGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzbGlfbnYyZGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92dGJsMXY4cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Z0YmwydjhxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnRibDN2OHFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92dGJsNHY4cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Z0YngxdjhxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92dGJ4MnY4cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnRieDN2OHFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Z0Yng0djhxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92dHJudjhxaV9pbnRlcm5hbCAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnRybnYxNnFpX2ludGVybmFsICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Z0cm52NGhpX2ludGVybmFsICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92dHJudjhoaV9pbnRlcm5hbCAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnRybnYyc2lfaW50ZXJuYWwgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Z0cm52NHNpX2ludGVybmFsICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92dHJudjJzZl9pbnRlcm5hbCAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnRybnY0c2ZfaW50ZXJuYWwgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Z6aXB2OHFpX2ludGVybmFsICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92emlwdjE2cWlfaW50ZXJuYWwgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnppcHY0aGlfaW50ZXJuYWwgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Z6aXB2OGhpX2ludGVybmFsICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92emlwdjJzaV9pbnRlcm5hbCAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnppcHY0c2lfaW50ZXJuYWwgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Z6aXB2MnNmX2ludGVybmFsICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92emlwdjRzZl9pbnRlcm5hbCAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnV6cHY4cWlfaW50ZXJuYWwgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Z1enB2MTZxaV9pbnRlcm5hbCAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92dXpwdjRoaV9pbnRlcm5hbCAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnV6cHY4aGlfaW50ZXJuYWwgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Z1enB2MnNpX2ludGVybmFsICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92dXpwdjRzaV9pbnRlcm5hbCAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnV6cHYyc2ZfaW50ZXJuYWwgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Z1enB2NHNmX2ludGVybmFsICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQxdjhxaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQxdjE2cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQxdjRoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQxdjhoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQxdjJzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQxdjRzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQxdjJzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQxdjRzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQxZGkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQxdjJkaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQxX2xhbmV2OHFpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkMV9sYW5ldjRoaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZsZDFfbGFuZXYyc2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQxX2xhbmV2MnNmICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkMV9sYW5lZGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZsZDFfbGFuZXYxNnFpICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQxX2xhbmV2OGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkMV9sYW5ldjRzaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZsZDFfbGFuZXY0c2YgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQxX2xhbmV2MmRpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkMV9kdXB2OHFpICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkMV9kdXB2NGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkMV9kdXB2MnNpICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkMV9kdXB2MnNmICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkMV9kdXBkaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkMV9kdXB2MTZxaSAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkMV9kdXB2OGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkMV9kdXB2NHNpICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkMV9kdXB2NHNmICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkMV9kdXB2MmRpICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0MXY4cWkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0MXYxNnFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0MXY0aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0MXY4aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0MXYyc2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0MXY0c2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0MXYyc2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0MXY0c2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0MWRpICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0MXYyZGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0MV9sYW5ldjhxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3QxX2xhbmV2NGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzdDFfbGFuZXYyc2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0MV9sYW5ldjJzZiAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3QxX2xhbmVkaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzdDFfbGFuZXYxNnFpICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0MV9sYW5ldjhoaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3QxX2xhbmV2NHNpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzdDFfbGFuZXY0c2YgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0MV9sYW5ldjJkaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQydjhxaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQydjRoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQydjJzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQydjJzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQyZGkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQydjE2cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQydjhoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQydjRzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQydjRzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQyX2xhbmV2OHFpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkMl9sYW5ldjRoaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZsZDJfbGFuZXYyc2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQyX2xhbmV2MnNmICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkMl9sYW5ldjhoaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZsZDJfbGFuZXY0c2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQyX2xhbmV2NHNmICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkMl9kdXB2OHFpICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkMl9kdXB2NGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkMl9kdXB2MnNpICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkMl9kdXB2MnNmICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkMl9kdXBkaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0MnY4cWkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0MnY0aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0MnYyc2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0MnYyc2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0MmRpICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0MnYxNnFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0MnY4aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0MnY0c2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0MnY0c2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0Ml9sYW5ldjhxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3QyX2xhbmV2NGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzdDJfbGFuZXYyc2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0Ml9sYW5ldjJzZiAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3QyX2xhbmV2OGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzdDJfbGFuZXY0c2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0Ml9sYW5ldjRzZiAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQzdjhxaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQzdjRoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQzdjJzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQzdjJzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQzZGkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQzcWF2MTZxaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkM3FhdjhoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZsZDNxYXY0c2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQzcWF2NHNmICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkM3FidjE2cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZsZDNxYnY4aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQzcWJ2NHNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkM3FidjRzZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZsZDNfbGFuZXY4cWkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQzX2xhbmV2NGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkM19sYW5ldjJzaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZsZDNfbGFuZXYyc2YgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQzX2xhbmV2OGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkM19sYW5ldjRzaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZsZDNfbGFuZXY0c2YgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQzX2R1cHY4cWkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQzX2R1cHY0aGkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQzX2R1cHYyc2kgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQzX2R1cHYyc2YgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQzX2R1cGRpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3QzdjhxaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3QzdjRoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3QzdjJzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3QzdjJzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3QzZGkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3QzcWF2MTZxaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzdDNxYXY4aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0M3FhdjRzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3QzcWF2NHNmICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzdDNxYnYxNnFpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0M3FidjhoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3QzcWJ2NHNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzdDNxYnY0c2YgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0M19sYW5ldjhxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3QzX2xhbmV2NGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzdDNfbGFuZXYyc2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0M19sYW5ldjJzZiAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3QzX2xhbmV2OGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzdDNfbGFuZXY0c2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0M19sYW5ldjRzZiAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQ0djhxaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQ0djRoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQ0djJzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQ0djJzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQ0ZGkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQ0cWF2MTZxaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkNHFhdjhoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZsZDRxYXY0c2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQ0cWF2NHNmICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkNHFidjE2cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZsZDRxYnY4aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQ0cWJ2NHNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkNHFidjRzZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZsZDRfbGFuZXY4cWkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQ0X2xhbmV2NGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkNF9sYW5ldjJzaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZsZDRfbGFuZXYyc2YgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQ0X2xhbmV2OGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmxkNF9sYW5ldjRzaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZsZDRfbGFuZXY0c2YgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQ0X2R1cHY4cWkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQ0X2R1cHY0aGkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQ0X2R1cHYyc2kgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQ0X2R1cHYyc2YgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQ0X2R1cGRpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3Q0djhxaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3Q0djRoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3Q0djJzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3Q0djJzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3Q0ZGkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3Q0cWF2MTZxaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzdDRxYXY4aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0NHFhdjRzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3Q0cWF2NHNmICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzdDRxYnYxNnFpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0NHFidjhoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3Q0cWJ2NHNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzdDRxYnY0c2YgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0NF9sYW5ldjhxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3Q0X2xhbmV2NGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzdDRfbGFuZXYyc2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0NF9sYW5ldjJzZiAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3Q0X2xhbmV2OGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZzdDRfbGFuZXY0c2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnN0NF9sYW5ldjRzZiAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWRkZGkzICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hZGRzaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2luY3NjYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hZGRzZjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FkZGRmMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fc3ViZGkzICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zdWJzaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2RlY3NjYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zdWJzZjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3N1YmRmMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbXVsc2kzICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tdWxzaWRpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3VtdWxzaWRpMyAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fc211bHNpM19oaWdocGFydCAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl91bXVsc2kzX2hpZ2hwYXJ0ICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX211bHNmMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbXVsZGYzICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9kaXZzZjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2RpdmRmMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW9kc2YzICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tb2RkZjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FuZHNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5faW5zdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2lvcnNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5feG9yc2kzICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zbWF4c2kzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3NtaW5zaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdW1heHNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl91bWluc2kzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FzaGxkaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXNobHNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hc2hyZGkzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FzaHJzaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbHNocmRpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sc2hyc2kzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JvdGxzaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcm90cnNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9leHR6diAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVnZGkyICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVnc2kyICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVnc2YyICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVnZGYyICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWJzc2kyICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWJzc2YyICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWJzZGYyICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fc3FydHNmMiAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fc3FydGRmMiAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fb25lX2NtcGxzaTIgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZmxvYXRzaWhmMiAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZmxvYXRkaWhmMiAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZmxvYXRzaXNmMiAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZmxvYXRzaWRmMiAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZml4X3RydW5jaGZzaTIgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZml4X3RydW5jaGZkaTIgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZml4X3RydW5jc2ZzaTIgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZml4X3RydW5jZGZzaTIgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdHJ1bmNkZnNmMiAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdHJ1bmNkZmhmMiAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5femVyb19leHRlbmRzaWRpMiAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5femVyb19leHRlbmRxaWRpMiAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZXh0ZW5kc2lkaTIgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5femVyb19leHRlbmRoaXNpMiAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5femVyb19leHRlbmRxaXNpMiAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZXh0ZW5kaGlzaTIgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZXh0ZW5kaGlzaTJfbWVtICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZXh0ZW5kcWloaTIgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZXh0ZW5kcWlzaTIgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZXh0ZW5kc2ZkZjIgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZXh0ZW5kaGZkZjIgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92ZGkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92c2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYnVpbHRpbl9zZXRqbXBfcmVjZWl2ZXIgICAgICAgICAgIChydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3N0b3JlaGkgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3N0b3JlaGlfYmlnZW5kICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3N0b3JlaW50aGkgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3N0b3JlaGlfc2luZ2xlX29wICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdmhpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdmhpX2J5dGVzICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdmhpX2JpZ2VuZCAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3RodW1iX21vdmhpX2Nsb2JiZXIgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVsb2FkX291dGhpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yZWxvYWRfaW5oaSAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdnFpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdmhmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdnNmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdmRmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JlbG9hZF9vdXRkZiAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92eGYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbG9hZF9tdWx0aXBsZSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zdG9yZV9tdWx0aXBsZSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdm1lbXFpICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jYnJhbmNoc2k0ICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fY2JyYW5jaHNmNCAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2NicmFuY2hkZjQgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jYnJhbmNoZGk0ICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fY2JyYW5jaF9jYyAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2NzdG9yZV9jYyAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jc3RvcmVzaTQgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fY3N0b3Jlc2Y0ICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2NzdG9yZWRmNCAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jc3RvcmVkaTQgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fY3N0b3Jlc2lfZXEwX3RodW1iMSAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fY3N0b3Jlc2lfbmUwX3RodW1iMSAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92c2ljYyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdnNmY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tb3ZkZmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fanVtcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgpOworI2RlZmluZSBHRU5fQ0FMTChBLCBCLCBDLCBEKSBnZW5fY2FsbCAoKEEpLCAoQiksIChDKSkKK2V4dGVybiBydHggICAgICAgIGdlbl9jYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2NhbGxfaW50ZXJuYWwgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CisjZGVmaW5lIEdFTl9DQUxMX1ZBTFVFKEEsIEIsIEMsIEQsIEUpIGdlbl9jYWxsX3ZhbHVlICgoQSksIChCKSwgKEMpLCAoRCkpCitleHRlcm4gcnR4ICAgICAgICBnZW5fY2FsbF92YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2NhbGxfdmFsdWVfaW50ZXJuYWwgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKKyNkZWZpbmUgR0VOX1NJQkNBTEwoQSwgQiwgQywgRCkgZ2VuX3NpYmNhbGwgKChBKSwgKEIpLCAoQykpCitleHRlcm4gcnR4ICAgICAgICBnZW5fc2liY2FsbCAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKKyNkZWZpbmUgR0VOX1NJQkNBTExfVkFMVUUoQSwgQiwgQywgRCwgRSkgZ2VuX3NpYmNhbGxfdmFsdWUgKChBKSwgKEIpLCAoQyksIChEKSkKK2V4dGVybiBydHggICAgICAgIGdlbl9zaWJjYWxsX3ZhbHVlICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmV0dXJuX2FkZHJfbWFzayAgICAgICAgICAgICAgICAgIChydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3VudHlwZWRfY2FsbCAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdW50eXBlZF9yZXR1cm4gICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fY2FzZXNpICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdGh1bWIxX2Nhc2VzaV9pbnRlcm5hbF9waWMgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2luZGlyZWN0X2p1bXAgICAgICAgICAgICAgICAgICAgICAocnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9wcm9sb2d1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2VwaWxvZ3VlICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZWhfZXBpbG9ndWUgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl90YWJsZWp1bXAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jdHpzaTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9laF9yZXR1cm4gICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXJtX2xlZ2FjeV9yZXYgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3RodW1iX2xlZ2FjeV9yZXYgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYnN3YXBzaTIgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92djJkaSAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92djJzaSAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92djRoaSAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92djhxaSAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92djJzZiAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92djRzaSAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92djhoaSAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92djE2cWkgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92djRzZiAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWRkdjJkaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hZGR2MnNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FkZHY0aGkzICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWRkdjhxaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hZGR2MnNmMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FkZHY0c2kzICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWRkdjhoaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hZGR2MTZxaTMgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FkZHY0c2YzICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fc3VidjJkaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zdWJ2MnNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3N1YnY0aGkzICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fc3VidjhxaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zdWJ2MnNmMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3N1YnY0c2kzICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fc3VidjhoaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zdWJ2MTZxaTMgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3N1YnY0c2YzICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbXVsdjJzaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tdWx2NGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX211bHY4cWkzICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbXVsdjJzZjMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tdWx2NHNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX211bHY4aGkzICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbXVsdjE2cWkzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tdWx2NHNmMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3NtaW52MnNpMyAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fc21pbnY0aGkzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zbWludjhxaTMgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3NtaW52MnNmMyAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fc21pbnY0c2kzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zbWludjhoaTMgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3NtaW52MTZxaTMgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fc21pbnY0c2YzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl91bWludjJzaTMgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3VtaW52NGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdW1pbnY4cWkzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl91bWludjRzaTMgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3VtaW52OGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdW1pbnYxNnFpMyAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zbWF4djJzaTMgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3NtYXh2NGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fc21heHY4cWkzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zbWF4djJzZjMgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3NtYXh2NHNpMyAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fc21heHY4aGkzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zbWF4djE2cWkzICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3NtYXh2NHNmMyAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdW1heHYyc2kzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl91bWF4djRoaTMgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3VtYXh2OHFpMyAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdW1heHY0c2kzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl91bWF4djhoaTMgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3VtYXh2MTZxaTMgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92dGkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92ZWkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92b2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92Y2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92eGkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3NldHY4cWkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc2V0djE2cWkgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19zZXR2NGhpICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3NldHY4aGkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc2V0djJzaSAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19zZXR2NHNpICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3NldHYyc2YgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc2V0djRzZiAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19zZXR2MmRpICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX2luaXR2OHFpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX2luaXR2MTZxaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX2luaXR2NGhpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX2luaXR2OGhpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX2luaXR2MnNpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX2luaXR2NHNpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX2luaXR2MnNmICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX2luaXR2NHNmICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX2luaXR2MmRpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmFzaHJ2OHFpMyAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92YXNocnYxNnFpMyAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3Zhc2hydjRoaTMgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmFzaHJ2OGhpMyAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92YXNocnYyc2kzICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3Zhc2hydjRzaTMgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmxzaHJ2OHFpMyAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92bHNocnYxNnFpMyAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3Zsc2hydjRoaTMgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmxzaHJ2OGhpMyAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92bHNocnYyc2kzICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3Zsc2hydjRzaTMgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3Nocl92OHFpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc2hyX3YxNnFpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19zaHJfdjRoaSAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3Nocl92OGhpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc2hyX3Yyc2kgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19zaHJfdjRzaSAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3Nocl92MnNmICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc2hyX3Y0c2YgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19zaHJfdjJkaSAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3NobF92OHFpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc2hsX3YxNnFpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19zaGxfdjRoaSAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3NobF92OGhpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc2hsX3Yyc2kgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19zaGxfdjRzaSAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3NobF92MnNmICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc2hsX3Y0c2YgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19zaGxfdjJkaSAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc3BsdXNfdjhxaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc3BsdXNfdjRoaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc3BsdXNfdjJzaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc3BsdXNfdjJzZiAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc3BsdXNfdjE2cWkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc3BsdXNfdjhoaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc3BsdXNfdjRzaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc3BsdXNfdjRzZiAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdXBsdXNfdjhxaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdXBsdXNfdjE2cWkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdXBsdXNfdjRoaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdXBsdXNfdjhoaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdXBsdXNfdjJzaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdXBsdXNfdjRzaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdXBsdXNfdjJkaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc21pbl92OHFpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc21pbl92NGhpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc21pbl92MnNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc21pbl92MnNmICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc21pbl92MTZxaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc21pbl92OGhpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc21pbl92NHNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc21pbl92NHNmICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc21heF92OHFpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc21heF92NGhpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc21heF92MnNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc21heF92MnNmICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc21heF92MTZxaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc21heF92OGhpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc21heF92NHNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc21heF92NHNmICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdW1pbl92OHFpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdW1pbl92NGhpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdW1pbl92MnNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdW1pbl92MTZxaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdW1pbl92OGhpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdW1pbl92NHNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdW1heF92OHFpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdW1heF92NGhpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdW1heF92MnNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdW1heF92MTZxaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdW1heF92OGhpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdW1heF92NHNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cGFkZHY4cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnBhZGR2NGhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZwYWRkdjJzaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cGFkZHYyc2YgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm5lZ3Y4cWkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bmVndjE2cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZuZWd2NGhpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm5lZ3Y4aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bmVndjJzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZuZWd2NHNpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm5lZ3Yyc2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bmVndjRzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Ztdm52OHFpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm12bnYxNnFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bXZudjRoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Ztdm52OGhpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm12bnYyc2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bXZudjRzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZnZXRfbGFuZXY4cWkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Z2V0X2xhbmV2MTZxaSAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmdldF9sYW5ldjRoaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZnZXRfbGFuZXY4aGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Z2V0X2xhbmV2MnNpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmdldF9sYW5ldjRzaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZnZXRfbGFuZXYyc2YgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92Z2V0X2xhbmV2NHNmICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmNyZWF0ZXY4cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmNyZWF0ZXY0aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmNyZWF0ZXYyc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmNyZWF0ZXYyc2YgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmNyZWF0ZWRpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmR1cF9sYW5lZGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bXVsX252NGhpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm11bF9udjJzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtdWxfbnYyc2YgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bXVsX252OGhpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm11bF9udjRzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtdWxfbnY0c2YgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bXVsbF9udjRoaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm11bGxfbnYyc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxZG11bGxfbnY0aGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cWRtdWxsX252MnNpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFkbXVsaF9udjRoaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxZG11bGhfbnYyc2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cWRtdWxoX252OGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnFkbXVsaF9udjRzaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtbGFfbnY0aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtbGFfbnYyc2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtbGFfbnYyc2YgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtbGFfbnY4aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtbGFfbnY0c2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtbGFfbnY0c2YgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtbGFsX252NGhpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtbGFsX252MnNpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxZG1sYWxfbnY0aGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxZG1sYWxfbnYyc2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtbHNfbnY0aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtbHNfbnYyc2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtbHNfbnYyc2YgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtbHNfbnY4aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtbHNfbnY0c2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtbHNfbnY0c2YgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtbHNsX252NGhpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZtbHNsX252MnNpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxZG1sc2xfbnY0aGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZxZG1sc2xfbnYyc2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zic2x2OHFpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YnNsdjE2cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmJzbHY0aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zic2x2OGhpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YnNsdjJzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmJzbHY0c2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zic2x2MnNmICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YnNsdjRzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmJzbGRpICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zic2x2MmRpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92dHJudjhxaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Z0cm52MTZxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnRybnY0aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92dHJudjhoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Z0cm52MnNpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnRybnY0c2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92dHJudjJzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Z0cm52NHNmICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnppcHY4cWkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92emlwdjE2cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Z6aXB2NGhpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnppcHY4aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92emlwdjJzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Z6aXB2NHNpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnppcHYyc2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92emlwdjRzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Z1enB2OHFpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnV6cHYxNnFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92dXpwdjRoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Z1enB2OGhpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnV6cHYyc2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92dXpwdjRzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Z1enB2MnNmICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdnV6cHY0c2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2OHFpdjhxaSAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2OHFpdjRoaSAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2OHFpdjJzaSAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2OHFpdjJzZiAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2OHFpZGkgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2NGhpdjhxaSAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2NGhpdjRoaSAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2NGhpdjJzaSAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2NGhpdjJzZiAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2NGhpZGkgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2MnNpdjhxaSAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2MnNpdjRoaSAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2MnNpdjJzaSAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2MnNpdjJzZiAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2MnNpZGkgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2MnNmdjhxaSAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2MnNmdjRoaSAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2MnNmdjJzaSAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2MnNmdjJzZiAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2MnNmZGkgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXRkaXY4cWkgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXRkaXY0aGkgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXRkaXYyc2kgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXRkaXYyc2YgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXRkaWRpICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2MTZxaXYxNnFpICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2MTZxaXY4aGkgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2MTZxaXY0c2kgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2MTZxaXY0c2YgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2MTZxaXYyZGkgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2OGhpdjE2cWkgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2OGhpdjhoaSAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2OGhpdjRzaSAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2OGhpdjRzZiAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2OGhpdjJkaSAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2NHNpdjE2cWkgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2NHNpdjhoaSAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2NHNpdjRzaSAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2NHNpdjRzZiAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2NHNpdjJkaSAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2NHNmdjE2cWkgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2NHNmdjhoaSAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2NHNmdjRzaSAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2NHNmdjRzZiAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2NHNmdjJkaSAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2MmRpdjE2cWkgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2MmRpdjhoaSAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2MmRpdjRzaSAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2MmRpdjRzZiAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92cmVpbnRlcnByZXR2MmRpdjJkaSAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQzdjE2cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQzdjhoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQzdjRzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQzdjRzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3QzdjE2cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3QzdjhoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3QzdjRzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3QzdjRzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQ0djE2cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQ0djhoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQ0djRzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92bGQ0djRzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3Q0djE2cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3Q0djhoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3Q0djRzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92c3Q0djRzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YW5kdjhxaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmFuZHYxNnFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZhbmR2NGhpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YW5kdjhoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmFuZHYyc2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZhbmR2NHNpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YW5kdjJzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmFuZHY0c2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZhbmRkaSAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YW5kdjJkaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm9ycnY4cWkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZvcnJ2MTZxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92b3JydjRoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm9ycnY4aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZvcnJ2MnNpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92b3JydjRzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm9ycnYyc2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZvcnJ2NHNmICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92b3JyZGkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm9ycnYyZGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zlb3J2OHFpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92ZW9ydjE2cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmVvcnY0aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zlb3J2OGhpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92ZW9ydjJzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmVvcnY0c2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zlb3J2MnNmICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92ZW9ydjRzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmVvcmRpICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zlb3J2MmRpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YmljdjhxaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmJpY3YxNnFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZiaWN2NGhpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YmljdjhoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmJpY3Yyc2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZiaWN2NHNpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YmljdjJzZiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdmJpY3Y0c2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3ZiaWNkaSAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92YmljdjJkaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm9ybnY4cWkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zvcm52MTZxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92b3JudjRoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm9ybnY4aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zvcm52MnNpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92b3JudjRzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm9ybnYyc2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZW9uX3Zvcm52NHNmICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVvbl92b3JuZGkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lb25fdm9ybnYyZGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKKworI2VuZGlmIC8qIEdDQ19JTlNOX0ZMQUdTX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9pbnNuLW1vZGVzLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvaW5zbi1tb2Rlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5OGU4MjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvaW5zbi1tb2Rlcy5oCkBAIC0wLDAgKzEsMTU1IEBACisvKiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBmcm9tIG1hY2htb2RlLmRlZiBhbmQgY29uZmlnL2FybS9hcm0tbW9kZXMuZGVmCisgICBieSBnZW5tb2Rlcy4gICovCisKKyNpZm5kZWYgR0NDX0lOU05fTU9ERVNfSAorI2RlZmluZSBHQ0NfSU5TTl9NT0RFU19ICisKK2VudW0gbWFjaGluZV9tb2RlCit7CisgIFZPSURtb2RlLCAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MTY5ICovCisgIEJMS21vZGUsICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MTczICovCisgIENDbW9kZSwgICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjAxICovCisgIENDX05PT1Ztb2RlLCAgICAgICAgICAgICAvKiBjb25maWcvYXJtL2FybS1tb2Rlcy5kZWY6NDAgKi8KKyAgQ0NfWm1vZGUsICAgICAgICAgICAgICAgIC8qIGNvbmZpZy9hcm0vYXJtLW1vZGVzLmRlZjo0MSAqLworICBDQ19TV1Btb2RlLCAgICAgICAgICAgICAgLyogY29uZmlnL2FybS9hcm0tbW9kZXMuZGVmOjQyICovCisgIENDRlBtb2RlLCAgICAgICAgICAgICAgICAvKiBjb25maWcvYXJtL2FybS1tb2Rlcy5kZWY6NDMgKi8KKyAgQ0NGUEVtb2RlLCAgICAgICAgICAgICAgIC8qIGNvbmZpZy9hcm0vYXJtLW1vZGVzLmRlZjo0NCAqLworICBDQ19ETkVtb2RlLCAgICAgICAgICAgICAgLyogY29uZmlnL2FybS9hcm0tbW9kZXMuZGVmOjQ1ICovCisgIENDX0RFUW1vZGUsICAgICAgICAgICAgICAvKiBjb25maWcvYXJtL2FybS1tb2Rlcy5kZWY6NDYgKi8KKyAgQ0NfRExFbW9kZSwgICAgICAgICAgICAgIC8qIGNvbmZpZy9hcm0vYXJtLW1vZGVzLmRlZjo0NyAqLworICBDQ19ETFRtb2RlLCAgICAgICAgICAgICAgLyogY29uZmlnL2FybS9hcm0tbW9kZXMuZGVmOjQ4ICovCisgIENDX0RHRW1vZGUsICAgICAgICAgICAgICAvKiBjb25maWcvYXJtL2FybS1tb2Rlcy5kZWY6NDkgKi8KKyAgQ0NfREdUbW9kZSwgICAgICAgICAgICAgIC8qIGNvbmZpZy9hcm0vYXJtLW1vZGVzLmRlZjo1MCAqLworICBDQ19ETEVVbW9kZSwgICAgICAgICAgICAgLyogY29uZmlnL2FybS9hcm0tbW9kZXMuZGVmOjUxICovCisgIENDX0RMVFVtb2RlLCAgICAgICAgICAgICAvKiBjb25maWcvYXJtL2FybS1tb2Rlcy5kZWY6NTIgKi8KKyAgQ0NfREdFVW1vZGUsICAgICAgICAgICAgIC8qIGNvbmZpZy9hcm0vYXJtLW1vZGVzLmRlZjo1MyAqLworICBDQ19ER1RVbW9kZSwgICAgICAgICAgICAgLyogY29uZmlnL2FybS9hcm0tbW9kZXMuZGVmOjU0ICovCisgIENDX0Ntb2RlLCAgICAgICAgICAgICAgICAvKiBjb25maWcvYXJtL2FybS1tb2Rlcy5kZWY6NTUgKi8KKyAgQ0NfTm1vZGUsICAgICAgICAgICAgICAgIC8qIGNvbmZpZy9hcm0vYXJtLW1vZGVzLmRlZjo1NiAqLworICBCSW1vZGUsICAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjE3NiAqLworICBRSW1vZGUsICAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjE4MSAqLworICBISW1vZGUsICAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjE4MiAqLworICBTSW1vZGUsICAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjE4MyAqLworICBESW1vZGUsICAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjE4NCAqLworICBUSW1vZGUsICAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjE4NSAqLworICBFSW1vZGUsICAgICAgICAgICAgICAgICAgLyogY29uZmlnL2FybS9hcm0tbW9kZXMuZGVmOjY3ICovCisgIE9JbW9kZSwgICAgICAgICAgICAgICAgICAvKiBjb25maWcvYXJtL2FybS1tb2Rlcy5kZWY6NjggKi8KKyAgQ0ltb2RlLCAgICAgICAgICAgICAgICAgIC8qIGNvbmZpZy9hcm0vYXJtLW1vZGVzLmRlZjo2OSAqLworICBYSW1vZGUsICAgICAgICAgICAgICAgICAgLyogY29uZmlnL2FybS9hcm0tbW9kZXMuZGVmOjcwICovCisgIFFRbW9kZSwgICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjA0ICovCisgIEhRbW9kZSwgICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjA1ICovCisgIFNRbW9kZSwgICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjA2ICovCisgIERRbW9kZSwgICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjA3ICovCisgIFRRbW9kZSwgICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjA4ICovCisgIFVRUW1vZGUsICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjEwICovCisgIFVIUW1vZGUsICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjExICovCisgIFVTUW1vZGUsICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjEyICovCisgIFVEUW1vZGUsICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjEzICovCisgIFVUUW1vZGUsICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjE0ICovCisgIEhBbW9kZSwgICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjE2ICovCisgIFNBbW9kZSwgICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjE3ICovCisgIERBbW9kZSwgICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjE4ICovCisgIFRBbW9kZSwgICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjE5ICovCisgIFVIQW1vZGUsICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjIxICovCisgIFVTQW1vZGUsICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjIyICovCisgIFVEQW1vZGUsICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjIzICovCisgIFVUQW1vZGUsICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjI0ICovCisgIEhGbW9kZSwgICAgICAgICAgICAgICAgICAvKiBjb25maWcvYXJtL2FybS1tb2Rlcy5kZWY6MjkgKi8KKyAgU0Ztb2RlLCAgICAgICAgICAgICAgICAgIC8qIG1hY2htb2RlLmRlZjoxOTYgKi8KKyAgREZtb2RlLCAgICAgICAgICAgICAgICAgIC8qIG1hY2htb2RlLmRlZjoxOTcgKi8KKyAgWEZtb2RlLCAgICAgICAgICAgICAgICAgIC8qIGNvbmZpZy9hcm0vYXJtLW1vZGVzLmRlZjoyNiAqLworICBTRG1vZGUsICAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzNiAqLworICBERG1vZGUsICAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzNyAqLworICBURG1vZGUsICAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzOCAqLworICBDUUltb2RlLCAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzMiAqLworICBDSEltb2RlLCAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzMiAqLworICBDU0ltb2RlLCAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzMiAqLworICBDREltb2RlLCAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzMiAqLworICBDVEltb2RlLCAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzMiAqLworICBDRUltb2RlLCAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzMiAqLworICBDT0ltb2RlLCAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzMiAqLworICBDQ0ltb2RlLCAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzMiAqLworICBDWEltb2RlLCAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzMiAqLworICBIQ21vZGUsICAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzMyAqLworICBTQ21vZGUsICAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzMyAqLworICBEQ21vZGUsICAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzMyAqLworICBYQ21vZGUsICAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzMyAqLworICBWNFFJbW9kZSwgICAgICAgICAgICAgICAgLyogY29uZmlnL2FybS9hcm0tbW9kZXMuZGVmOjU5ICovCisgIFYySEltb2RlLCAgICAgICAgICAgICAgICAvKiBjb25maWcvYXJtL2FybS1tb2Rlcy5kZWY6NTkgKi8KKyAgVjhRSW1vZGUsICAgICAgICAgICAgICAgIC8qIGNvbmZpZy9hcm0vYXJtLW1vZGVzLmRlZjo2MCAqLworICBWNEhJbW9kZSwgICAgICAgICAgICAgICAgLyogY29uZmlnL2FybS9hcm0tbW9kZXMuZGVmOjYwICovCisgIFYyU0ltb2RlLCAgICAgICAgICAgICAgICAvKiBjb25maWcvYXJtL2FybS1tb2Rlcy5kZWY6NjAgKi8KKyAgVjE2UUltb2RlLCAgICAgICAgICAgICAgIC8qIGNvbmZpZy9hcm0vYXJtLW1vZGVzLmRlZjo2MSAqLworICBWOEhJbW9kZSwgICAgICAgICAgICAgICAgLyogY29uZmlnL2FybS9hcm0tbW9kZXMuZGVmOjYxICovCisgIFY0U0ltb2RlLCAgICAgICAgICAgICAgICAvKiBjb25maWcvYXJtL2FybS1tb2Rlcy5kZWY6NjEgKi8KKyAgVjJESW1vZGUsICAgICAgICAgICAgICAgIC8qIGNvbmZpZy9hcm0vYXJtLW1vZGVzLmRlZjo2MSAqLworICBWNEhGbW9kZSwgICAgICAgICAgICAgICAgLyogY29uZmlnL2FybS9hcm0tbW9kZXMuZGVmOjYyICovCisgIFYyU0Ztb2RlLCAgICAgICAgICAgICAgICAvKiBjb25maWcvYXJtL2FybS1tb2Rlcy5kZWY6NjIgKi8KKyAgVjhIRm1vZGUsICAgICAgICAgICAgICAgIC8qIGNvbmZpZy9hcm0vYXJtLW1vZGVzLmRlZjo2MyAqLworICBWNFNGbW9kZSwgICAgICAgICAgICAgICAgLyogY29uZmlnL2FybS9hcm0tbW9kZXMuZGVmOjYzICovCisgIFYyREZtb2RlLCAgICAgICAgICAgICAgICAvKiBjb25maWcvYXJtL2FybS1tb2Rlcy5kZWY6NjMgKi8KKyAgTUFYX01BQ0hJTkVfTU9ERSwKKworICBNSU5fTU9ERV9SQU5ET00gPSBWT0lEbW9kZSwKKyAgTUFYX01PREVfUkFORE9NID0gQkxLbW9kZSwKKworICBNSU5fTU9ERV9DQyA9IENDbW9kZSwKKyAgTUFYX01PREVfQ0MgPSBDQ19ObW9kZSwKKworICBNSU5fTU9ERV9JTlQgPSBRSW1vZGUsCisgIE1BWF9NT0RFX0lOVCA9IFhJbW9kZSwKKworICBNSU5fTU9ERV9QQVJUSUFMX0lOVCA9IFZPSURtb2RlLAorICBNQVhfTU9ERV9QQVJUSUFMX0lOVCA9IFZPSURtb2RlLAorCisgIE1JTl9NT0RFX0ZSQUNUID0gUVFtb2RlLAorICBNQVhfTU9ERV9GUkFDVCA9IFRRbW9kZSwKKworICBNSU5fTU9ERV9VRlJBQ1QgPSBVUVFtb2RlLAorICBNQVhfTU9ERV9VRlJBQ1QgPSBVVFFtb2RlLAorCisgIE1JTl9NT0RFX0FDQ1VNID0gSEFtb2RlLAorICBNQVhfTU9ERV9BQ0NVTSA9IFRBbW9kZSwKKworICBNSU5fTU9ERV9VQUNDVU0gPSBVSEFtb2RlLAorICBNQVhfTU9ERV9VQUNDVU0gPSBVVEFtb2RlLAorCisgIE1JTl9NT0RFX0ZMT0FUID0gSEZtb2RlLAorICBNQVhfTU9ERV9GTE9BVCA9IFhGbW9kZSwKKworICBNSU5fTU9ERV9ERUNJTUFMX0ZMT0FUID0gU0Rtb2RlLAorICBNQVhfTU9ERV9ERUNJTUFMX0ZMT0FUID0gVERtb2RlLAorCisgIE1JTl9NT0RFX0NPTVBMRVhfSU5UID0gQ1FJbW9kZSwKKyAgTUFYX01PREVfQ09NUExFWF9JTlQgPSBDWEltb2RlLAorCisgIE1JTl9NT0RFX0NPTVBMRVhfRkxPQVQgPSBIQ21vZGUsCisgIE1BWF9NT0RFX0NPTVBMRVhfRkxPQVQgPSBYQ21vZGUsCisKKyAgTUlOX01PREVfVkVDVE9SX0lOVCA9IFY0UUltb2RlLAorICBNQVhfTU9ERV9WRUNUT1JfSU5UID0gVjJESW1vZGUsCisKKyAgTUlOX01PREVfVkVDVE9SX0ZSQUNUID0gVk9JRG1vZGUsCisgIE1BWF9NT0RFX1ZFQ1RPUl9GUkFDVCA9IFZPSURtb2RlLAorCisgIE1JTl9NT0RFX1ZFQ1RPUl9VRlJBQ1QgPSBWT0lEbW9kZSwKKyAgTUFYX01PREVfVkVDVE9SX1VGUkFDVCA9IFZPSURtb2RlLAorCisgIE1JTl9NT0RFX1ZFQ1RPUl9BQ0NVTSA9IFZPSURtb2RlLAorICBNQVhfTU9ERV9WRUNUT1JfQUNDVU0gPSBWT0lEbW9kZSwKKworICBNSU5fTU9ERV9WRUNUT1JfVUFDQ1VNID0gVk9JRG1vZGUsCisgIE1BWF9NT0RFX1ZFQ1RPUl9VQUNDVU0gPSBWT0lEbW9kZSwKKworICBNSU5fTU9ERV9WRUNUT1JfRkxPQVQgPSBWNEhGbW9kZSwKKyAgTUFYX01PREVfVkVDVE9SX0ZMT0FUID0gVjJERm1vZGUsCisKKyAgTlVNX01BQ0hJTkVfTU9ERVMgPSBNQVhfTUFDSElORV9NT0RFCit9OworCisjZGVmaW5lIENPTlNUX01PREVfU0laRSBjb25zdAorI2RlZmluZSBDT05TVF9NT0RFX0JBU0VfQUxJR04gY29uc3QKKyNkZWZpbmUgQ09OU1RfTU9ERV9JQklUIGNvbnN0CisjZGVmaW5lIENPTlNUX01PREVfRkJJVCBjb25zdAorCisjZW5kaWYgLyogaW5zbi1tb2Rlcy5oICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvaW5zbi1ub3Rlcy5kZWYgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvaW5zbi1ub3Rlcy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMxNjFlYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9pbnNuLW5vdGVzLmRlZgpAQCAtMCwwICsxLDc3IEBACisvKiBJbnNuIG5vdGUgZGVmaW5pdGlvbnMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBUaGlzIGZpbGUgZGVmaW5lcyBhbGwgdGhlIGNvZGVzIHRoYXQgbWF5IGFwcGVhciBpbiB0aGUKKyAgIE5PVEVfTElORV9OVU1CRVIgZmllbGQgb2YgYSBOT1RFIGluc24gZm9yIGtpbmRzIG9mIG5vdGVzIHRoYXQgYXJlCisgICBub3QgbGluZSBudW1iZXJzLiAgU291cmNlIGZpbGVzIGRlZmluZSBERUZfSU5TTl9OT1RFIGFwcHJvcHJpYXRlbHkKKyAgIGJlZm9yZSBpbmNsdWRpbmcgdGhpcyBmaWxlLgorCisgICBXZSBhcmUgc2xvd2x5IHJlbW92aW5nIHRoZSBjb25jZXB0IG9mIGluc24tY2hhaW4gbm90ZXMgZnJvbSB0aGUKKyAgIGNvbXBpbGVyLiAgQWRkaW5nIG5ldyBjb2RlcyB0byB0aGlzIGZpbGUgaXMgU1RST05HTFkgRElTQ09VUkFHRUQuCisgICBJZiB5b3UgdGhpbmsgeW91IG5lZWQgb25lLCBsb29rIGZvciBvdGhlciB3YXlzIHRvIGV4cHJlc3Mgd2hhdCB5b3UKKyAgIG1lYW4sIHN1Y2ggYXMgcmVnaXN0ZXIgbm90ZXMgb3IgYml0cyBpbiB0aGUgYmFzaWMtYmxvY2sgc3RydWN0dXJlLiAgKi8KKworLyogU2hvcnRoYW5kLiAgKi8KKyNkZWZpbmUgSU5TTl9OT1RFKE5BTUUpIERFRl9JTlNOX05PVEUgKE5PVEVfSU5TTl8jI05BTUUpCisKKy8qIFRoaXMgbm90ZSBpcyB1c2VkIHRvIGdldCByaWQgb2YgYW4gaW5zbiB3aGVuIGl0IGlzbid0IHNhZmUgdG8gcGF0Y2gKKyAgIHRoZSBpbnNuIG91dCBvZiB0aGUgY2hhaW4uICAqLworSU5TTl9OT1RFIChERUxFVEVEKQorCisvKiBHZW5lcmF0ZWQgaW4gcGxhY2Ugb2YgdXNlci1kZWNsYXJlZCBsYWJlbHMgd2hlbiB0aGV5IGFyZSBkZWxldGVkLiAgKi8KK0lOU05fTk9URSAoREVMRVRFRF9MQUJFTCkKKworLyogVGhlc2UgYXJlIHVzZWQgdG8gbWFyayB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBsZXhpY2FsIGJsb2NrLgorICAgU2VlIE5PVEVfQkxPQ0sgYW5kIHJlb3JkZXJfYmxvY2tzLiAgKi8KK0lOU05fTk9URSAoQkxPQ0tfQkVHKQorSU5TTl9OT1RFIChCTE9DS19FTkQpCisKKy8qIFRoaXMgbm90ZSBpbmRpY2F0ZXMgdGhlIHN0YXJ0IG9mIHRoZSByZWFsIGJvZHkgb2YgdGhlIGZ1bmN0aW9uLAorICAgaS5lLiB0aGUgcG9pbnQganVzdCBhZnRlciBhbGwgb2YgdGhlIHBhcm1zIGhhdmUgYmVlbiBtb3ZlZCBpbnRvCisgICB0aGVpciBob21lcywgZXRjLiAgKi8KK0lOU05fTk9URSAoRlVOQ1RJT05fQkVHKQorCisvKiBUaGlzIG1hcmtzIHRoZSBwb2ludCBpbW1lZGlhdGVseSBhZnRlciB0aGUgbGFzdCBwcm9sb2d1ZSBpbnNuLiAgKi8KK0lOU05fTk9URSAoUFJPTE9HVUVfRU5EKQorCisvKiBUaGlzIG1hcmtzIHRoZSBwb2ludCBpbW1lZGlhdGVseSBwcmlvciB0byB0aGUgZmlyc3QgZXBpbG9ndWUgaW5zbi4gICovCitJTlNOX05PVEUgKEVQSUxPR1VFX0JFRykKKworLyogVGhlc2Ugbm90ZSB3aGVyZSBleGNlcHRpb24gaGFuZGxpbmcgcmVnaW9ucyBiZWdpbiBhbmQgZW5kLgorICAgVXNlcyBOT1RFX0VIX0hBTkRMRVIgdG8gaWRlbnRpZnkgdGhlIHJlZ2lvbiBpbiBxdWVzdGlvbi4gICovCitJTlNOX05PVEUgKEVIX1JFR0lPTl9CRUcpCitJTlNOX05PVEUgKEVIX1JFR0lPTl9FTkQpCisKKy8qIFRoZSBsb2NhdGlvbiBvZiBhIHZhcmlhYmxlLiAgKi8KK0lOU05fTk9URSAoVkFSX0xPQ0FUSU9OKQorCisvKiBSZWNvcmQgdGhlIHN0cnVjdCBmb3IgdGhlIGZvbGxvd2luZyBiYXNpYyBibG9jay4gIFVzZXMKKyAgIE5PVEVfQkFTSUNfQkxPQ0suICBGSVhNRTogUmVkdW5kYW50IHdpdGggdGhlIGJhc2ljIGJsb2NrIHBvaW50ZXIKKyAgIG5vdyBpbmNsdWRlZCBpbiBldmVyeSBpbnNuLiAgKi8KK0lOU05fTk9URSAoQkFTSUNfQkxPQ0spCisKKy8qIE1hcmsgdGhlIGluZmxlY3Rpb24gcG9pbnQgaW4gdGhlIGluc3RydWN0aW9uIHN0cmVhbSB3aGVyZSB3ZSBzd2l0Y2gKKyAgIGJldHdlZW4gaG90IGFuZCBjb2xkIHRleHQgc2VjdGlvbnMuICAqLworSU5TTl9OT1RFIChTV0lUQ0hfVEVYVF9TRUNUSU9OUykKKworLyogTWFyayB0aGUgcmVzdG9yZSBwb2ludCBhZnRlciBhbiBlcGlsb2d1ZSBjaGFuZ2VkIENGSSBkYXRhLiAgVXNlZCBvbmx5CisgICB3aGVuIGFuIGVwaWxvZ3VlIGFwcGVhcnMgaW4gdGhlIG1pZGRsZSBvZiBhIGZ1bmN0aW9uLiAgKi8KK0lOU05fTk9URSAoQ0ZBX1JFU1RPUkVfU1RBVEUpCisKKyN1bmRlZiBJTlNOX05PVEUKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9pbnRsLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvaW50bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZGIzNTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvaW50bC5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qIGludGwuaCAtIGludGVybmF0aW9uYWxpemF0aW9uCisgICBDb3B5cmlnaHQgMTk5OCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNywgMjAwOSwgMjAxMAorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfSU5UTF9ICisjZGVmaW5lIEdDQ19JTlRMX0gKKworI2lmZGVmIEhBVkVfTE9DQUxFX0gKKyMgaW5jbHVkZSA8bG9jYWxlLmg+CisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1NFVExPQ0FMRQorIyBkZWZpbmUgc2V0bG9jYWxlKGNhdGVnb3J5LCBsb2NhbGUpIChsb2NhbGUpCisjZW5kaWYKKworI2lmZGVmIEVOQUJMRV9OTFMKKyNpbmNsdWRlIDxsaWJpbnRsLmg+CitleHRlcm4gdm9pZCBnY2NfaW5pdF9saWJpbnRsICh2b2lkKTsKK2V4dGVybiBzaXplX3QgZ2NjX2dldHRleHRfd2lkdGggKGNvbnN0IGNoYXIgKik7CisjZWxzZQorLyogU3R1YnMuICAqLworIyB1bmRlZiB0ZXh0ZG9tYWluCisjIGRlZmluZSB0ZXh0ZG9tYWluKGRvbWFpbikgKGRvbWFpbikKKyMgdW5kZWYgYmluZHRleHRkb21haW4KKyMgZGVmaW5lIGJpbmR0ZXh0ZG9tYWluKGRvbWFpbiwgZGlyZWN0b3J5KSAoZG9tYWluKQorIyB1bmRlZiBnZXR0ZXh0CisjIGRlZmluZSBnZXR0ZXh0KG1zZ2lkKSAobXNnaWQpCisjIGRlZmluZSBuZ2V0dGV4dChzaW5ndWxhcixwbHVyYWwsbikgZmFrZV9uZ2V0dGV4dChzaW5ndWxhcixwbHVyYWwsbikKKyMgZGVmaW5lIGdjY19pbml0X2xpYmludGwoKQkvKiBub3RoaW5nICovCisjIGRlZmluZSBnY2NfZ2V0dGV4dF93aWR0aChzKSBzdHJsZW4ocykKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmZha2VfbmdldHRleHQoY29uc3QgY2hhciAqc2luZ3VsYXIsY29uc3QgY2hhciAqcGx1cmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpbnQgbik7CisKKyNlbmRpZgorCisjaWZuZGVmIF8KKyMgZGVmaW5lIF8obXNnaWQpIGdldHRleHQgKG1zZ2lkKQorI2VuZGlmCisKKyNpZm5kZWYgTl8KKyMgZGVmaW5lIE5fKG1zZ2lkKSBtc2dpZAorI2VuZGlmCisKKyNpZm5kZWYgR18KKyMgZGVmaW5lIEdfKGdtc2dpZCkgZ21zZ2lkCisjZW5kaWYKKworZXh0ZXJuIGNoYXIgKmdldF9zcGFjZXMgKGNvbnN0IGNoYXIgKik7CisKK2V4dGVybiBjb25zdCBjaGFyICpvcGVuX3F1b3RlOworZXh0ZXJuIGNvbnN0IGNoYXIgKmNsb3NlX3F1b3RlOworZXh0ZXJuIGNvbnN0IGNoYXIgKmxvY2FsZV9lbmNvZGluZzsKK2V4dGVybiBib29sIGxvY2FsZV91dGY4OworCisjZW5kaWYgLyogaW50bC5oICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvaXBhLXByb3AuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9pcGEtcHJvcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYjI0NjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvaXBhLXByb3AuaApAQCAtMCwwICsxLDUwNiBAQAorLyogSW50ZXJwcm9jZWR1cmFsIGFuYWx5c2VzLgorICAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3LCAyMDA4LCAyMDA5CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgSVBBX1BST1BfSAorI2RlZmluZSBJUEFfUFJPUF9ICisKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAidmVjLmgiCisjaW5jbHVkZSAiY2dyYXBoLmgiCisKKy8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgYW5kIGludGVyZmFjZXMgYXJlIHVzZWQgYnkKKyAgIGludGVycHJvY2VkdXJhbCBhbmFseXNlcyBvciBwYXJhbWV0ZXJzLiAgKi8KKworLyogaXBhLXByb3AuYyBzdHVmZiAoaXBhLWNwLCBpbmRpcmVjdCBpbmxpbmluZyk6ICAqLworCisvKiBBIGp1bXAgZnVuY3Rpb24gZm9yIGEgY2FsbHNpdGUgcmVwcmVzZW50cyB0aGUgdmFsdWVzIHBhc3NlZCBhcyBhY3R1YWwKKyAgIGFyZ3VtZW50cyBvZiB0aGUgY2FsbHNpdGUuIFRoZXJlIGFyZSB0aHJlZSBtYWluIHR5cGVzIG9mIHZhbHVlcyA6CisKKyAgIFBhc3MtdGhyb3VnaCAtIHRoZSBjYWxsZXIncyBmb3JtYWwgcGFyYW1ldGVyIGlzIHBhc3NlZCBhcyBhbiBhY3R1YWwKKyAgICAgICAgICAgICAgICAgIGFyZ3VtZW50LCBwb3NzaWJseSBvbmUgc2ltcGxlIG9wZXJhdGlvbiBwZXJmb3JtZWQgb24gaXQuCisgICBDb25zdGFudCAgICAgLSBhIGNvbnN0YW50IChpc19naW1wbGVfaXBfaW52YXJpYW50KWlzIHBhc3NlZCBhcyBhbiBhY3R1YWwKKyAgICAgICAgICAgICAgICAgIGFyZ3VtZW50LgorICAgVW5rbm93biAgICAgIC0gbmVpdGhlciBvZiB0aGUgYWJvdmUuCisKKyAgIElQQV9KRl9DT05TVF9NRU1CRVJfUFRSIHN0YW5kcyBmb3IgQysrIG1lbWJlciBwb2ludGVycywgb3RoZXIgY29uc3RhbnRzIGFyZQorICAgcmVwcmVzZW50ZWQgd2l0aCBJUEFfSkZfQ09OU1QuCisKKyAgIEluIGFkZGl0aW9uIHRvICJvcmRpbmFyeSIgcGFzcyB0aHJvdWdoIGZ1bmN0aW9ucyByZXByZXNlbnRlZCBieQorICAgSVBBX0pGX1BBU1NfVEhST1VHSCwgSVBBX0pGX0FOQ0VTVE9SIHJlcHJlc2VudHMgZ2V0dGluZyBhZGRyZXNzZXMgb2Ygb2YKKyAgIGFuY2VzdG9yIGZpZWxkcyBpbiBDKysgKGUuZy4gJnRoaXNfMShEKS0+RC4xNzY2LkQuMTc1NikuICAqLworZW51bSBqdW1wX2Z1bmNfdHlwZQoreworICBJUEFfSkZfVU5LTk9XTiA9IDAsICAvKiBuZXdseSBhbGxvY2F0ZWQgYW5kIHplcm9lZCBqdW1wIGZ1bmN0aW9ucyBkZWZhdWx0ICovCisgIElQQV9KRl9DT05TVCwKKyAgSVBBX0pGX0NPTlNUX01FTUJFUl9QVFIsCisgIElQQV9KRl9QQVNTX1RIUk9VR0gsCisgIElQQV9KRl9BTkNFU1RPUgorfTsKKworLyogQWxsIGZvcm1hbCBwYXJhbWV0ZXJzIGluIHRoZSBwcm9ncmFtIGhhdmUgYSBsYXR0aWNlIGFzc29jaWF0ZWQgd2l0aCBpdAorICAgY29tcHV0ZWQgYnkgdGhlIGludGVycHJvY2VkdXJhbCBzdGFnZSBvZiBJUENQLgorICAgVGhlcmUgYXJlIHRocmVlIG1haW4gdmFsdWVzIG9mIHRoZSBsYXR0aWNlOgorICAgSVBBX1RPUCAtIHVua25vd24sCisgICBJUEFfQk9UVE9NIC0gbm9uIGNvbnN0YW50LAorICAgSVBBX0NPTlNUX1ZBTFVFIC0gc2ltcGxlIHNjYWxhciBjb25zdGFudCwKKyAgIEN2YWwgb2YgZm9ybWFsIGYgd2lsbCBoYXZlIGEgY29uc3RhbnQgdmFsdWUgaWYgYWxsIGNhbGxzaXRlcyB0byB0aGlzCisgICBmdW5jdGlvbiBoYXZlIHRoZSBzYW1lIGNvbnN0YW50IHZhbHVlIHBhc3NlZCB0byBmLgorICAgSW50ZWdlciBhbmQgcmVhbCBjb25zdGFudHMgYXJlIHJlcHJlc2VudGVkIGFzIElQQV9DT05TVF9WQUxVRS4gICovCitlbnVtIGlwYV9sYXR0aWNlX3R5cGUKK3sKKyAgSVBBX0JPVFRPTSwKKyAgSVBBX0NPTlNUX1ZBTFVFLAorICBJUEFfVE9QCit9OworCisKKy8qIFN0cnVjdHVyZSBob2xkaW5nIGRhdGEgcmVxdWlyZWQgdG8gZGVzY3JpYmUgYSBwYXNzLXRocm91Z2gganVtcCBmdW5jdGlvbi4gICovCisKK3N0cnVjdCBHVFkoKCkpIGlwYV9wYXNzX3Rocm91Z2hfZGF0YQoreworICAvKiBJZiBhbiBvcGVyYXRpb24gaXMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZSBvcmlnaW5hbCBwYXJhbWV0ZXIsIHRoaXMgaXMgdGhlCisgICAgIHNlY29uZCAoY29uc3RhbnQpIG9wZXJhbmQuICAqLworICB0cmVlIG9wZXJhbmQ7CisgIC8qIE51bWJlciBvZiB0aGUgY2FsbGVyJ3MgZm9ybWFsIHBhcmFtZXRlciBiZWluZyBwYXNzZWQuICAqLworICBpbnQgZm9ybWFsX2lkOworICAvKiBPcGVyYXRpb24gdGhhdCBpcyBwZXJmb3JtZWQgb24gdGhlIGFyZ3VtZW50IGJlZm9yZSBpdCBpcyBwYXNzZWQgb24uCisgICAgIE5PUF9FWFBSIG1lYW5zIG5vIG9wZXJhdGlvbi4gIE90aGVyd2lzZSBvcGVyIG11c3QgYmUgYSBzaW1wbGUgYmluYXJ5CisgICAgIGFyaXRobWV0aWMgb3BlcmF0aW9uIHdoZXJlIHRoZSBjYWxsZXIncyBwYXJhbWV0ZXIgaXMgdGhlIGZpcnN0IG9wZXJhbmQgYW5kCisgICAgIG9wZXJhbmQgZmllbGQgZnJvbSB0aGlzIHN0cnVjdHVyZSBpcyB0aGUgc2Vjb25kIG9uZS4gICovCisgIGVudW0gdHJlZV9jb2RlIG9wZXJhdGlvbjsKK307CisKKy8qIFN0cnVjdHVyZSBob2xkaW5nIGRhdGEgcmVxdWlyZWQgdG8gZGVzY3JpYmUgYW5kIGFuY2VzdG9yIHBhc3MgdGhyb3UKKyAgIGZ1bmtjaS4gICovCisKK3N0cnVjdCBHVFkoKCkpIGlwYV9hbmNlc3Rvcl9qZl9kYXRhCit7CisgIC8qIE9mZnNldCBvZiB0aGUgZmllbGQgcmVwcmVzZW50aW5nIHRoZSBhbmNlc3Rvci4gICovCisgIEhPU1RfV0lERV9JTlQgb2Zmc2V0OworICAvKiBUWXBlIG9mIHRoZSByZXN1bHQuICAqLworICB0cmVlIHR5cGU7CisgIC8qIE51bWJlciBvZiB0aGUgY2FsbGVyJ3MgZm9ybWFsIHBhcmFtZXRlciBiZWluZyBwYXNzZWQuICAqLworICBpbnQgZm9ybWFsX2lkOworfTsKKworLyogU3RydWN0dXJlIGhvbGRpbmcgYSBDKysgbWVtYmVyIHBvaW50ZXIgY29uc3RhbnQuICBIb2xkcyBhIHBvaW50ZXIgdG8gdGhlCisgICBtZXRob2QgYW5kIGRlbHRhIG9mZnNldC4gICovCitzdHJ1Y3QgR1RZKCgpKSBpcGFfbWVtYmVyX3B0cl9jc3QKK3sKKyAgdHJlZSBwZm47CisgIHRyZWUgZGVsdGE7Cit9OworCisvKiBBIGp1bXAgZnVuY3Rpb24gZm9yIGEgY2FsbHNpdGUgcmVwcmVzZW50cyB0aGUgdmFsdWVzIHBhc3NlZCBhcyBhY3R1YWwKKyAgIGFyZ3VtZW50cyBvZiB0aGUgY2FsbHNpdGUuIFNlZSBlbnVtIGp1bXBfZnVuY190eXBlIGZvciB0aGUgdmFyaW91cworICAgdHlwZXMgb2YganVtcCBmdW5jdGlvbnMgc3VwcG9ydGVkLiAgKi8KK3N0cnVjdCBHVFkgKCgpKSBpcGFfanVtcF9mdW5jCit7CisgIGVudW0ganVtcF9mdW5jX3R5cGUgdHlwZTsKKyAgLyogUmVwcmVzZW50cyBhIHZhbHVlIG9mIGEganVtcCBmdW5jdGlvbi4gIHBhc3NfdGhyb3VnaCBpcyB1c2VkIG9ubHkgaW4ganVtcAorICAgICBmdW5jdGlvbiBjb250ZXh0LiAgY29uc3RhbnQgcmVwcmVzZW50cyB0aGUgYWN0dWFsIGNvbnN0YW50IGluIGNvbnN0YW50IGp1bXAKKyAgICAgZnVuY3Rpb25zIGFuZCBtZW1iZXJfY3N0IGhvbGRzIGNvbnN0YW50IGMrKyBtZW1iZXIgZnVuY3Rpb25zLiAgKi8KKyAgdW5pb24ganVtcF9mdW5jX3ZhbHVlCisgIHsKKyAgICB0cmVlIEdUWSAoKHRhZyAoIklQQV9KRl9DT05TVCIpKSkgY29uc3RhbnQ7CisgICAgc3RydWN0IGlwYV9wYXNzX3Rocm91Z2hfZGF0YSBHVFkgKCh0YWcgKCJJUEFfSkZfUEFTU19USFJPVUdIIikpKSBwYXNzX3Rocm91Z2g7CisgICAgc3RydWN0IGlwYV9hbmNlc3Rvcl9qZl9kYXRhIEdUWSAoKHRhZyAoIklQQV9KRl9BTkNFU1RPUiIpKSkgYW5jZXN0b3I7CisgICAgc3RydWN0IGlwYV9tZW1iZXJfcHRyX2NzdCBHVFkgKCh0YWcgKCJJUEFfSkZfQ09OU1RfTUVNQkVSX1BUUiIpKSkgbWVtYmVyX2NzdDsKKyAgfSBHVFkgKChkZXNjICgiJTEudHlwZSIpKSkgdmFsdWU7Cit9OworCisvKiBBbGwgZm9ybWFsIHBhcmFtZXRlcnMgaW4gdGhlIHByb2dyYW0gaGF2ZSBhIGN2YWwgY29tcHV0ZWQgYnkKKyAgIHRoZSBpbnRlcnByb2NlZHVyYWwgc3RhZ2Ugb2YgSVBDUC4gU2VlIGVudW0gaXBhX2xhdHRpY2VfdHlwZSBmb3IKKyAgIHRoZSB2YXJpb3VzIHR5cGVzIG9mIGxhdHRpY2VzIHN1cHBvcnRlZCAqLworc3RydWN0IGlwY3BfbGF0dGljZQoreworICBlbnVtIGlwYV9sYXR0aWNlX3R5cGUgdHlwZTsKKyAgdHJlZSBjb25zdGFudDsKK307CisKKy8qIEVhY2ggaW5zdGFuY2Ugb2YgdGhlIGZvbGxvd2luZyAgc3RydWN0dXJlIGRlc2NyaWJlcyBhIHN0YXRlbWVudCB0aGF0IGNhbGxzIGEKKyAgIGZ1bmN0aW9uIHBhcmFtZXRlci4gIFRob3NlIHJlZmVycmluZyAgdG8gc3RhdGVtZW50cyB3aXRoaW4gdGhlIHNhbWUgZnVuY3Rpb24KKyAgIGFyZSBsaW5rZWQgaW4gYSBsaXN0LiAgKi8KK3N0cnVjdCBpcGFfcGFyYW1fY2FsbF9ub3RlCit7CisgIC8qIEV4cGVjdGVkIG51bWJlciBvZiBleGVjdXRpb25zOiBjYWxjdWxhdGVkIGluIHByb2ZpbGUuYy4gICovCisgIGdjb3ZfdHlwZSBjb3VudDsKKyAgLyogTGlua2VkIGxpc3QncyBuZXh0ICovCisgIHN0cnVjdCBpcGFfcGFyYW1fY2FsbF9ub3RlICpuZXh0OworICAvKiBTdGF0ZW1lbnQgdGhhdCBjb250YWlucyB0aGUgY2FsbCB0byB0aGUgcGFyYW1ldGVyIGFib3ZlLiAgKi8KKyAgZ2ltcGxlIHN0bXQ7CisgIC8qIFdoZW4gaW4gTFRPLCB3ZSB0aGUgYWJvdmUgc3RtdCB3aWxsIGJlIE5VTEwgYW5kIHdlIG5lZWQgYW4gdWlkLiAqLworICB1bnNpZ25lZCBpbnQgbHRvX3N0bXRfdWlkOworICAvKiBJbmRleCBvZiB0aGUgcGFyYW1ldGVyIHRoYXQgaXMgY2FsbGVkLiAgKi8KKyAgaW50IGZvcm1hbF9pZDsKKyAgLyogRXhwZWN0ZWQgZnJlcXVlbmN5IG9mIGV4ZWN1dGlvbnMgd2l0aGluIHRoZSBmdW5jdGlvbi4gc2VlIGNncmFwaF9lZGdlIGluCisgICAgIGNncmFwaC5oIGZvciBtb3JlIG9uIHRoaXMuICovCisgIGludCBmcmVxdWVuY3k7CisgIC8qIERlcHRoIG9mIGxvb3AgbmVzdCwgMSBtZWFucyBubyBsb29wIG5lc3QuICAqLworICB1bnNpZ25lZCBzaG9ydCBpbnQgbG9vcF9uZXN0OworICAvKiBTZXQgd2hlbiB3ZSBoYXZlIGFscmVhZHkgZm91bmQgdGhlIHRhcmdldCB0byBiZSBhIGNvbXBpbGUgdGltZSBjb25zdGFudAorICAgICBhbmQgdHVybmVkIHRoaXMgaW50byBhbiBlZGdlIG9yIHdoZW4gdGhlIG5vdGUgd2FzIGZvdW5kIHVudXNhYmxlIGZvciBzb21lCisgICAgIHJlYXNvbi4gICovCisgIGJvb2wgcHJvY2Vzc2VkOworfTsKKworLyogU3RydWN0dXJlIGRlc2NyaWJpbmcgYSBzaW5nbGUgZm9ybWFsIHBhcmFtZXRlci4gICovCitzdHJ1Y3QgaXBhX3BhcmFtX2Rlc2NyaXB0b3IKK3sKKyAgLyogSVBBLUNQIGxhdHRpY2UuICAqLworICBzdHJ1Y3QgaXBjcF9sYXR0aWNlIGlwY3BfbGF0dGljZTsKKyAgLyogUEFSQU1fREVDTCBvZiB0aGlzIHBhcmFtZXRlci4gICovCisgIHRyZWUgZGVjbDsKKyAgLyogV2hldGhlciB0aGUgdmFsdWUgcGFyYW1ldGVyIGhhcyBiZWVuIG1vZGlmaWVkIHdpdGhpbiB0aGUgZnVuY3Rpb24uICAqLworICB1bnNpZ25lZCBtb2RpZmllZCA6IDE7Cit9OworCisvKiBpcGFfbm9kZV9wYXJhbXMgc3RvcmVzIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gZm9ybWFsIHBhcmFtZXRlcnMgb2YgZnVuY3Rpb25zCisgICBhbmQgc29tZSBvdGhlciBpbmZvcm1hdGlvbiBmb3IgaW50ZXJwcm9jZWR1cmFsIHBhc3NlcyB0aGF0IG9wZXJhdGUgb24KKyAgIHBhcmFtZXRlcnMgKHN1Y2ggYXMgaXBhLWNwKS4gICovCitzdHJ1Y3QgaXBhX25vZGVfcGFyYW1zCit7CisgIC8qIE51bWJlciBvZiBmb3JtYWwgcGFyYW1ldGVycyBvZiB0aGlzIGZ1bmN0aW9uLiAgV2hlbiBzZXQgdG8gMCwKKyAgICAgdGhpcyBmdW5jdGlvbidzIHBhcmFtZXRlcnMgd291bGQgbm90IGJlIGFuYWx5emVkIGJ5IHRoZSBkaWZmZXJlbnQKKyAgICAgc3RhZ2VzIG9mIElQQSBDUC4gICovCisgIGludCBwYXJhbV9jb3VudDsKKyAgLyogUG9pbnRlciB0byBhbiBhcnJheSBvZiBzdHJ1Y3R1cmVzIGRlc2NyaWJpbmcgaW5kaXZpZHVhbCBmb3JtYWwKKyAgICAgcGFyYW1ldGVycy4gICovCisgIHN0cnVjdCBpcGFfcGFyYW1fZGVzY3JpcHRvciAqcGFyYW1zOworICAvKiBMaXN0IG9mIHN0cnVjdHVyZXMgZW51bWVyYXRpbmcgY2FsbHMgdG8gYSBmb3JtYWwgcGFyYW1ldGVyLiAgKi8KKyAgc3RydWN0IGlwYV9wYXJhbV9jYWxsX25vdGUgKnBhcmFtX2NhbGxzOworICAvKiBPbmx5IGZvciB2ZXJzaW9uZWQgbm9kZXMgdGhpcyBmaWVsZCB3b3VsZCBub3QgYmUgTlVMTCwKKyAgICAgaXQgcG9pbnRzIHRvIHRoZSBub2RlIHRoYXQgSVBBIGNwIGNsb25lZCBmcm9tLiAgKi8KKyAgc3RydWN0IGNncmFwaF9ub2RlICppcGNwX29yaWdfbm9kZTsKKyAgLyogTWVhbmluZ2Z1bCBvbmx5IGZvciBvcmlnaW5hbCBmdW5jdGlvbnMuICBFeHByZXNzZXMgdGhlCisgICAgIHJhdGlvIGJldHdlZW4gdGhlIGRpcmVjdCBjYWxscyBhbmQgc3VtIG9mIGFsbCBpbnZvY2F0aW9ucyBvZgorICAgICB0aGlzIGZ1bmN0aW9uIChnaXZlbiBieSBwcm9maWxpbmcgaW5mbykuICBJdCBpcyB1c2VkIHRvIGNhbGN1bGF0ZQorICAgICB0aGUgcHJvZmlsaW5nIGluZm9ybWF0aW9uIG9mIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBhbmQgdGhlIHZlcnNpb25lZAorICAgICBvbmUuICAqLworICBnY292X3R5cGUgY291bnRfc2NhbGU7CisKKyAgLyogV2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHZhcmlhYmxlIG51bWJlciBvZiBhY3R1YWwKKyAgICAgYXJndW1lbnRzLiAgKi8KKyAgdW5zaWduZWQgY2FsbGVkX3dpdGhfdmFyX2FyZ3VtZW50cyA6IDE7CisgIC8qIFdoZXRoZXIgdGhlIG1vZGlmaWNhdGlvbiBhbmFseXNpcyBoYXMgYWxyZWFkeSBiZWVuIHBlcmZvcm1lZC4gKi8KKyAgdW5zaWduZWQgbW9kaWZpY2F0aW9uX2FuYWx5c2lzX2RvbmUgOiAxOworICAvKiBXaGV0aGVyIHRoZSBwYXJhbSB1c2VzIGFuYWx5c2lzIGhhcyBhbHJlYWR5IGJlZW4gcGVyZm9ybWVkLiAgKi8KKyAgdW5zaWduZWQgdXNlc19hbmFseXNpc19kb25lIDogMTsKKyAgLyogV2hldGhlciB0aGUgZnVuY3Rpb24gaXMgZW5xdWV1ZWQgaW4gYW4gaXBhX2Z1bmNfbGlzdC4gICovCisgIHVuc2lnbmVkIG5vZGVfZW5xdWV1ZWQgOiAxOworfTsKKworLyogaXBhX25vZGVfcGFyYW1zIGFjY2VzcyBmdW5jdGlvbnMuICBQbGVhc2UgdXNlIHRoZXNlIHRvIGFjY2VzcyBmaWVsZHMgdGhhdAorICAgYXJlIG9yIHdpbGwgYmUgc2hhcmVkIGFtb25nIHZhcmlvdXMgcGFzc2VzLiAgKi8KKworLyogU2V0IHRoZSBudW1iZXIgb2YgZm9ybWFsIHBhcmFtZXRlcnMuICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraXBhX3NldF9wYXJhbV9jb3VudCAoc3RydWN0IGlwYV9ub2RlX3BhcmFtcyAqaW5mbywgaW50IGNvdW50KQoreworICBpbmZvLT5wYXJhbV9jb3VudCA9IGNvdW50OworfQorCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBmb3JtYWwgcGFyYW1ldGVycy4gKi8KKworc3RhdGljIGlubGluZSBpbnQKK2lwYV9nZXRfcGFyYW1fY291bnQgKHN0cnVjdCBpcGFfbm9kZV9wYXJhbXMgKmluZm8pCit7CisgIHJldHVybiBpbmZvLT5wYXJhbV9jb3VudDsKK30KKworLyogUmV0dXJuIHRoZSBkZWNsYXJhdGlvbiBvZiBJdGggZm9ybWFsIHBhcmFtZXRlciBvZiB0aGUgZnVuY3Rpb24gY29ycmVzcG9uZGluZworICAgdG8gSU5GTy4gIE5vdGUgdGhlcmUgaXMgbm8gc2V0dGVyIGZ1bmN0aW9uIGFzIHRoaXMgYXJyYXkgaXMgYnVpbHQganVzdCBvbmNlCisgICB1c2luZyBpcGFfaW5pdGlhbGl6ZV9ub2RlX3BhcmFtcy4gKi8KKworc3RhdGljIGlubGluZSB0cmVlCitpcGFfZ2V0X3BhcmFtIChzdHJ1Y3QgaXBhX25vZGVfcGFyYW1zICppbmZvLCBpbnQgaSkKK3sKKyAgcmV0dXJuIGluZm8tPnBhcmFtc1tpXS5kZWNsOworfQorCisvKiBSZXR1cm4gdGhlIG1vZGlmaWNhdGlvbiBmbGFnIGNvcnJlc3BvbmRpbmcgdG8gdGhlIEl0aCBmb3JtYWwgcGFyYW1ldGVyIG9mCisgICB0aGUgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIElORk8uICBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gc2V0dGVyIG1ldGhvZCBhcworICAgdGhlIGdvYWwgaXMgdG8gc2V0IGFsbCBmbGFncyB3aGVuIGJ1aWxkaW5nIHRoZSBhcnJheSBpbgorICAgaXBhX2RldGVjdF9wYXJhbV9tb2RpZmljYXRpb25zLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitpcGFfaXNfcGFyYW1fbW9kaWZpZWQgKHN0cnVjdCBpcGFfbm9kZV9wYXJhbXMgKmluZm8sIGludCBpKQoreworICByZXR1cm4gaW5mby0+cGFyYW1zW2ldLm1vZGlmaWVkOworfQorCisvKiBGbGFnIHRoaXMgbm9kZSBhcyBoYXZpbmcgY2FsbGVycyB3aXRoIHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2lwYV9zZXRfY2FsbGVkX3dpdGhfdmFyaWFibGVfYXJnIChzdHJ1Y3QgaXBhX25vZGVfcGFyYW1zICppbmZvKQoreworICBpbmZvLT5jYWxsZWRfd2l0aF92YXJfYXJndW1lbnRzID0gMTsKK30KKworLyogSGF2ZSB3ZSBkZXRlY3RlZCB0aGlzIG5vZGUgd2FzIGNhbGxlZCB3aXRoIHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHM/ICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraXBhX2lzX2NhbGxlZF93aXRoX3Zhcl9hcmd1bWVudHMgKHN0cnVjdCBpcGFfbm9kZV9wYXJhbXMgKmluZm8pCit7CisgIHJldHVybiBpbmZvLT5jYWxsZWRfd2l0aF92YXJfYXJndW1lbnRzOworfQorCisKKworLyogaXBhX2VkZ2VfYXJncyBzdG9yZXMgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhIGNhbGxzaXRlIGFuZCBwYXJ0aWN1bGFybHkKKyAgIGl0cyBhcmd1bWVudHMuIEl0IGlzIHBvaW50ZWQgdG8gYnkgYSBmaWVsZCBpbiB0aGUKKyAgIGNhbGxzaXRlJ3MgY29ycmVzcG9uZGluZyBjZ3JhcGhfZWRnZS4gICovCit0eXBlZGVmIHN0cnVjdCBHVFkoKCkpIGlwYV9lZGdlX2FyZ3MKK3sKKyAgLyogTnVtYmVyIG9mIGFjdHVhbCBhcmd1bWVudHMgaW4gdGhpcyBjYWxsc2l0ZS4gIFdoZW4gc2V0IHRvIDAsCisgICAgIHRoaXMgY2FsbHNpdGUncyBwYXJhbWV0ZXJzIHdvdWxkIG5vdCBiZSBhbmFseXplZCBieSB0aGUgZGlmZmVyZW50CisgICAgIHN0YWdlcyBvZiBJUEEgQ1AuICAqLworICBpbnQgYXJndW1lbnRfY291bnQ7CisgIC8qIEFycmF5IG9mIHRoZSBjYWxsc2l0ZSdzIGp1bXAgZnVuY3Rpb24gb2YgZWFjaCBwYXJhbWV0ZXIuICAqLworICBzdHJ1Y3QgaXBhX2p1bXBfZnVuYyBHVFkgKChsZW5ndGggKCIlaC5hcmd1bWVudF9jb3VudCIpKSkgKmp1bXBfZnVuY3Rpb25zOworfSBpcGFfZWRnZV9hcmdzX3Q7CisKKy8qIGlwYV9lZGdlX2FyZ3MgYWNjZXNzIGZ1bmN0aW9ucy4gIFBsZWFzZSB1c2UgdGhlc2UgdG8gYWNjZXNzIGZpZWxkcyB0aGF0CisgICBhcmUgb3Igd2lsbCBiZSBzaGFyZWQgYW1vbmcgdmFyaW91cyBwYXNzZXMuICAqLworCisvKiBTZXQgdGhlIG51bWJlciBvZiBhY3R1YWwgYXJndW1lbnRzLiAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2lwYV9zZXRfY3NfYXJndW1lbnRfY291bnQgKHN0cnVjdCBpcGFfZWRnZV9hcmdzICphcmdzLCBpbnQgY291bnQpCit7CisgIGFyZ3MtPmFyZ3VtZW50X2NvdW50ID0gY291bnQ7Cit9CisKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGFjdHVhbCBhcmd1bWVudHMuICovCisKK3N0YXRpYyBpbmxpbmUgaW50CitpcGFfZ2V0X2NzX2FyZ3VtZW50X2NvdW50IChzdHJ1Y3QgaXBhX2VkZ2VfYXJncyAqYXJncykKK3sKKyAgcmV0dXJuIGFyZ3MtPmFyZ3VtZW50X2NvdW50OworfQorCisvKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUganVtcCBmdW5jdGlvbiBmb3IgdGhlIGl0aCBhcmd1bWVudC4gIFBsZWFzZSBub3RlCisgICB0aGVyZSBpcyBubyBzZXR0ZXIgZnVuY3Rpb24gYXMganVtcCBmdW5jdGlvbnMgYXJlIGFsbCBzZXQgdXAgaW4KKyAgIGlwYV9jb21wdXRlX2p1bXBfZnVuY3Rpb25zLiAqLworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcGFfanVtcF9mdW5jICoKK2lwYV9nZXRfaXRoX2p1bXBfZnVuYyAoc3RydWN0IGlwYV9lZGdlX2FyZ3MgKmFyZ3MsIGludCBpKQoreworICByZXR1cm4gJmFyZ3MtPmp1bXBfZnVuY3Rpb25zW2ldOworfQorCisvKiBWZWN0b3JzIG5lZWQgdG8gaGF2ZSB0eXBlZGVmcyBvZiBzdHJ1Y3R1cmVzLiAgKi8KK3R5cGVkZWYgc3RydWN0IGlwYV9ub2RlX3BhcmFtcyBpcGFfbm9kZV9wYXJhbXNfdDsKKworLyogVHlwZXMgb2YgdmVjdG9ycyBob2xkaW5nIHRoZSBpbmZvcy4gICovCitERUZfVkVDX08gKGlwYV9ub2RlX3BhcmFtc190KTsKK0RFRl9WRUNfQUxMT0NfTyAoaXBhX25vZGVfcGFyYW1zX3QsIGhlYXApOworREVGX1ZFQ19PIChpcGFfZWRnZV9hcmdzX3QpOworREVGX1ZFQ19BTExPQ19PIChpcGFfZWRnZV9hcmdzX3QsIGdjKTsKKworLyogVmVjdG9yIHdoZXJlIHRoZSBwYXJhbWV0ZXIgaW5mb3MgYXJlIGFjdHVhbGx5IHN0b3JlZC4gKi8KK2V4dGVybiBWRUMgKGlwYV9ub2RlX3BhcmFtc190LCBoZWFwKSAqaXBhX25vZGVfcGFyYW1zX3ZlY3RvcjsKKy8qIFZlY3RvciB3aGVyZSB0aGUgcGFyYW1ldGVyIGluZm9zIGFyZSBhY3R1YWxseSBzdG9yZWQuICovCitleHRlcm4gR1RZKCgpKSBWRUMgKGlwYV9lZGdlX2FyZ3NfdCwgZ2MpICppcGFfZWRnZV9hcmdzX3ZlY3RvcjsKKworLyogUmV0dXJuIHRoZSBhc3NvY2lhdGVkIHBhcmFtZXRlci9hcmd1bWVudCBpbmZvIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuCisgICBub2RlL2VkZ2UuICAqLworI2RlZmluZSBJUEFfTk9ERV9SRUYoTk9ERSkgKFZFQ19pbmRleCAoaXBhX25vZGVfcGFyYW1zX3QsIFwKKwkJCQkgICAgICAgaXBhX25vZGVfcGFyYW1zX3ZlY3RvciwgKE5PREUpLT51aWQpKQorI2RlZmluZSBJUEFfRURHRV9SRUYoRURHRSkgKFZFQ19pbmRleCAoaXBhX2VkZ2VfYXJnc190LCBcCisJCQkJICAgICAgIGlwYV9lZGdlX2FyZ3NfdmVjdG9yLCAoRURHRSktPnVpZCkpCisvKiBUaGlzIG1hY3JvIGNoZWNrcyB2YWxpZGl0eSBvZiBpbmRleCByZXR1cm5lZCBieQorICAgaXBhX2dldF9wYXJhbV9kZWNsX2luZGV4IGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgSVNfVkFMSURfSlVNUF9GVU5DX0lOREVYKEkpICgoSSkgIT0gLTEpCisKKy8qIENyZWF0aW5nIGFuZCBmcmVlaW5nIGlwYV9ub2RlX3BhcmFtcyBhbmQgaXBhX2VkZ2VfYXJncy4gICovCit2b2lkIGlwYV9jcmVhdGVfYWxsX25vZGVfcGFyYW1zICh2b2lkKTsKK3ZvaWQgaXBhX2NyZWF0ZV9hbGxfZWRnZV9hcmdzICh2b2lkKTsKK3ZvaWQgaXBhX2ZyZWVfZWRnZV9hcmdzX3N1YnN0cnVjdHVyZXMgKHN0cnVjdCBpcGFfZWRnZV9hcmdzICopOwordm9pZCBpcGFfZnJlZV9ub2RlX3BhcmFtc19zdWJzdHJ1Y3R1cmVzIChzdHJ1Y3QgaXBhX25vZGVfcGFyYW1zICopOwordm9pZCBpcGFfZnJlZV9hbGxfbm9kZV9wYXJhbXMgKHZvaWQpOwordm9pZCBpcGFfZnJlZV9hbGxfZWRnZV9hcmdzICh2b2lkKTsKK3ZvaWQgZnJlZV9hbGxfaXBhX3N0cnVjdHVyZXNfYWZ0ZXJfaXBhX2NwICh2b2lkKTsKK3ZvaWQgZnJlZV9hbGxfaXBhX3N0cnVjdHVyZXNfYWZ0ZXJfaWlubG4gKHZvaWQpOwordm9pZCBpcGFfcmVnaXN0ZXJfY2dyYXBoX2hvb2tzICh2b2lkKTsKKworLyogVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoZSBhcnJheSBvZiBub2RlIHBhcmFtIGluZm9zIGlzIGJpZyBlbm91Z2ggdG8KKyAgIGFjY29tbW9kYXRlIGEgc3RydWN0dXJlIGZvciBhbGwgbm9kZXMgYW5kIHJlYWxsb2NhdGVzIGl0IGlmIG5vdC4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraXBhX2NoZWNrX2NyZWF0ZV9ub2RlX3BhcmFtcyAodm9pZCkKK3sKKyAgaWYgKCFpcGFfbm9kZV9wYXJhbXNfdmVjdG9yKQorICAgIGlwYV9ub2RlX3BhcmFtc192ZWN0b3IgPSBWRUNfYWxsb2MgKGlwYV9ub2RlX3BhcmFtc190LCBoZWFwLAorCQkJCQljZ3JhcGhfbWF4X3VpZCk7CisKKyAgaWYgKFZFQ19sZW5ndGggKGlwYV9ub2RlX3BhcmFtc190LCBpcGFfbm9kZV9wYXJhbXNfdmVjdG9yKQorICAgICAgPD0gKHVuc2lnbmVkKSBjZ3JhcGhfbWF4X3VpZCkKKyAgICBWRUNfc2FmZV9ncm93X2NsZWFyZWQgKGlwYV9ub2RlX3BhcmFtc190LCBoZWFwLAorCQkJICAgaXBhX25vZGVfcGFyYW1zX3ZlY3RvciwgY2dyYXBoX21heF91aWQgKyAxKTsKK30KKworLyogVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoZSBhcnJheSBvZiBlZGdlIGFyZ3VtZW50cyBpbmZvcyBpcyBiaWcgZW5vdWdoIHRvCisgICBhY2NvbW1vZGF0ZSBhIHN0cnVjdHVyZSBmb3IgYWxsIGVkZ2VzIGFuZCByZWFsbG9jYXRlcyBpdCBpZiBub3QuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2lwYV9jaGVja19jcmVhdGVfZWRnZV9hcmdzICh2b2lkKQoreworICBpZiAoIWlwYV9lZGdlX2FyZ3NfdmVjdG9yKQorICAgIGlwYV9lZGdlX2FyZ3NfdmVjdG9yID0gVkVDX2FsbG9jIChpcGFfZWRnZV9hcmdzX3QsIGdjLAorCQkJCSAgICAgIGNncmFwaF9lZGdlX21heF91aWQpOworCisgIGlmIChWRUNfbGVuZ3RoIChpcGFfZWRnZV9hcmdzX3QsIGlwYV9lZGdlX2FyZ3NfdmVjdG9yKQorICAgICAgPD0gICh1bnNpZ25lZCkgY2dyYXBoX2VkZ2VfbWF4X3VpZCkKKyAgICBWRUNfc2FmZV9ncm93X2NsZWFyZWQgKGlwYV9lZGdlX2FyZ3NfdCwgZ2MsIGlwYV9lZGdlX2FyZ3NfdmVjdG9yLAorCQkJICAgY2dyYXBoX2VkZ2VfbWF4X3VpZCArIDEpOworfQorCisvKiBSZXR1cm5zIHRydWUgaWYgdGhlIGFycmF5IG9mIGVkZ2UgaW5mb3MgaXMgbGFyZ2UgZW5vdWdoIHRvIGFjY29tbW9kYXRlIGFuCisgICBpbmZvIGZvciBFREdFLiAgVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRoYXQgZGVidWcgZHVtcGluZworICAgZnVuY3Rpb24gY2FuIGNoZWNrIGluZm8gYXZhaWxhYmlsaXR5IHdpdGhvdXQgY2F1c2luZyByZWFsbG9jYXRpb25zLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitpcGFfZWRnZV9hcmdzX2luZm9fYXZhaWxhYmxlX2Zvcl9lZGdlX3AgKHN0cnVjdCBjZ3JhcGhfZWRnZSAqZWRnZSkKK3sKKyAgcmV0dXJuICgodW5zaWduZWQpIGVkZ2UtPnVpZCA8IFZFQ19sZW5ndGggKGlwYV9lZGdlX2FyZ3NfdCwKKwkJCQkJICAgICBpcGFfZWRnZV9hcmdzX3ZlY3RvcikpOworfQorCisvKiBBIGZ1bmN0aW9uIGxpc3QgZWxlbWVudC4gIEl0IGlzIHVzZWQgdG8gY3JlYXRlIGEgdGVtcG9yYXJ5IHdvcmtsaXN0IHVzZWQgaW4KKyAgIHRoZSBwcm9wYWdhdGlvbiBzdGFnZSBvZiBJUENQLiAoY2FuIGJlIHVzZWQgZm9yIG1vcmUgSVBBIG9wdGltaXphdGlvbnMpICAqLworc3RydWN0IGlwYV9mdW5jX2xpc3QKK3sKKyAgc3RydWN0IGNncmFwaF9ub2RlICpub2RlOworICBzdHJ1Y3QgaXBhX2Z1bmNfbGlzdCAqbmV4dDsKK307CisKKy8qIGlwYV9mdW5jX2xpc3QgaW50ZXJmYWNlLiAgKi8KK3N0cnVjdCBpcGFfZnVuY19saXN0ICppcGFfaW5pdF9mdW5jX2xpc3QgKHZvaWQpOwordm9pZCBpcGFfcHVzaF9mdW5jX3RvX2xpc3RfMSAoc3RydWN0IGlwYV9mdW5jX2xpc3QgKiosIHN0cnVjdCBjZ3JhcGhfbm9kZSAqLAorCQkJICAgICAgc3RydWN0IGlwYV9ub2RlX3BhcmFtcyAqKTsKK3N0cnVjdCBjZ3JhcGhfbm9kZSAqaXBhX3BvcF9mdW5jX2Zyb21fbGlzdCAoc3RydWN0IGlwYV9mdW5jX2xpc3QgKiopOworCisvKiBBZGQgY2dyYXBoIE5PREUgdG8gdGhlIHdvcmtsaXN0IFdMIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGluIG9uZS4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraXBhX3B1c2hfZnVuY190b19saXN0IChzdHJ1Y3QgaXBhX2Z1bmNfbGlzdCAqKndsLCBzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUpCit7CisgIHN0cnVjdCBpcGFfbm9kZV9wYXJhbXMgKmluZm8gPSBJUEFfTk9ERV9SRUYgKG5vZGUpOworCisgIGlmICghaW5mby0+bm9kZV9lbnF1ZXVlZCkKKyAgICBpcGFfcHVzaF9mdW5jX3RvX2xpc3RfMSAod2wsIG5vZGUsIGluZm8pOworfQorCisvKiBDYWxsc2l0ZSByZWxhdGVkIGNhbGN1bGF0aW9ucy4gICovCit2b2lkIGlwYV9jb21wdXRlX2p1bXBfZnVuY3Rpb25zIChzdHJ1Y3QgY2dyYXBoX2VkZ2UgKik7Cit2b2lkIGlwYV9jb3VudF9hcmd1bWVudHMgKHN0cnVjdCBjZ3JhcGhfZWRnZSAqKTsKKworLyogRnVuY3Rpb24gZm9ybWFsIHBhcmFtZXRlcnMgcmVsYXRlZCBjb21wdXRhdGlvbnMuICAqLwordm9pZCBpcGFfaW5pdGlhbGl6ZV9ub2RlX3BhcmFtcyAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlKTsKK3ZvaWQgaXBhX2RldGVjdF9wYXJhbV9tb2RpZmljYXRpb25zIChzdHJ1Y3QgY2dyYXBoX25vZGUgKik7Cit2b2lkIGlwYV9hbmFseXplX3BhcmFtc191c2VzIChzdHJ1Y3QgY2dyYXBoX25vZGUgKik7Citib29sIGlwYV9wcm9wYWdhdGVfaW5kaXJlY3RfY2FsbF9pbmZvcyAoc3RydWN0IGNncmFwaF9lZGdlICpjcywKKwkJCQkJVkVDIChjZ3JhcGhfZWRnZV9wLCBoZWFwKSAqKm5ld19lZGdlcyk7CisKKy8qIERlYnVnZ2luZyBpbnRlcmZhY2UuICAqLwordm9pZCBpcGFfcHJpbnRfbm9kZV9wYXJhbXMgKEZJTEUgKiwgc3RydWN0IGNncmFwaF9ub2RlICpub2RlKTsKK3ZvaWQgaXBhX3ByaW50X2FsbF9wYXJhbXMgKEZJTEUgKik7Cit2b2lkIGlwYV9wcmludF9ub2RlX2p1bXBfZnVuY3Rpb25zIChGSUxFICpmLCBzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUpOwordm9pZCBpcGFfcHJpbnRfYWxsX2p1bXBfZnVuY3Rpb25zIChGSUxFICogZik7CisKKy8qIFN0cnVjdHVyZSB0byBkZXNjcmliZSB0cmFuc2Zvcm1hdGlvbnMgb2YgZm9ybWFsIHBhcmFtZXRlcnMgYW5kIGFjdHVhbAorICAgYXJndW1lbnRzLiAgRWFjaCBpbnN0YW5jZSBkZXNjcmliZXMgb25lIG5ldyBwYXJhbWV0ZXIgYW5kIHRoZXkgYXJlIG1lYW50IHRvCisgICBiZSBzdG9yZWQgaW4gYSB2ZWN0b3IuICBBZGRpdGlvbmFsbHksIG1vc3QgdXNlcnMgd2lsbCBwcm9iYWJseSB3YW50IHRvIHN0b3JlCisgICBhZGp1c3RtZW50cyBhYm91dCBwYXJhbWV0ZXJzIHRoYXQgYXJlIGJlaW5nIHJlbW92ZWQgYWx0b2dldGhlciBzbyB0aGF0IFNTQQorICAgbmFtZXMgYmVsb25naW5nIHRvIHRoZW0gY2FuIGJlIHJlcGxhY2VkIGJ5IFNTQSBuYW1lcyBvZiBhbiBhcnRpZmljaWFsCisgICB2YXJpYWJsZS4gICovCitzdHJ1Y3QgaXBhX3Bhcm1fYWRqdXN0bWVudAoreworICAvKiBUaGUgb3JpZ2luYWwgUEFSTV9ERUNMIGl0c2VsZiwgaGVscGZ1bCBmb3IgcHJvY2Vzc2luZyBvZiB0aGUgYm9keSBvZiB0aGUKKyAgICAgZnVuY3Rpb24gaXRzZWxmLiAgSW50ZW5kZWQgZm9yIHRyYXZlcnNpbmcgZnVuY3Rpb24gYm9kaWVzLgorICAgICBpcGFfbW9kaWZ5X2Zvcm1hbF9wYXJhbWV0ZXJzLCBpcGFfbW9kaWZ5X2NhbGxfYXJndW1lbnRzIGFuZAorICAgICBpcGFfY29tYmluZV9hZGp1c3RtZW50cyBpZ25vcmUgdGhpcyBhbmQgdXNlIGJhc2VfaW5kZXguCisgICAgIGlwYV9tb2RpZnlfZm9ybWFsX3BhcmFtZXRlcnMgYWN0dWFsbHkgc2V0cyB0aGlzLiAgKi8KKyAgdHJlZSBiYXNlOworCisgIC8qIFR5cGUgb2YgdGhlIG5ldyBwYXJhbWV0ZXIuICBIb3dldmVyLCBpZiBieV9yZWYgaXMgdHJ1ZSwgdGhlIHJlYWwgdHlwZSB3aWxsCisgICAgIGJlIGEgcG9pbnRlciB0byB0aGlzIHR5cGUuICAqLworICB0cmVlIHR5cGU7CisKKyAgLyogVGhlIG5ldyBkZWNsYXJhdGlvbiB3aGVuIGNyZWF0aW5nL3JlcGxhY2luZyBhIHBhcmFtZXRlci4gIENyZWF0ZWQgYnkKKyAgICAgaXBhX21vZGlmeV9mb3JtYWxfcGFyYW1ldGVycywgdXNlZnVsIGZvciBmdW5jdGlvbnMgbW9kaWZ5aW5nIHRoZSBib2R5CisgICAgIGFjY29yZGluZ2x5LiAqLworICB0cmVlIHJlZHVjdGlvbjsKKworICAvKiBOZXcgZGVjbGFyYXRpb24gb2YgYSBzdWJzdGl0dXRlIHZhcmlhYmxlIHRoYXQgd2UgbWF5IHVzZSB0byByZXBsYWNlIGFsbAorICAgICBub24tZGVmYXVsdC1kZWYgc3NhIG5hbWVzIHdoZW4gYSBwYXJtIGRlY2wgaXMgZ29pbmcgYXdheS4gICovCisgIHRyZWUgbmV3X3NzYV9iYXNlOworCisgIC8qIElmIG5vbi1OVUxMIGFuZCB0aGUgb3JpZ2luYWwgcGFyYW1ldGVyIGlzIHRvIGJlIHJlbW92ZWQgKGNvcHlfcGFyYW0gYmVsb3cKKyAgICAgaXMgTlVMTCksIHRoaXMgaXMgZ29pbmcgdG8gYmUgaXRzIG5vbmxvY2FsaXplZCB2YXJzIHZhbHVlLiAgKi8KKyAgdHJlZSBub25sb2NhbF92YWx1ZTsKKworICAvKiBPZmZzZXQgaW50byB0aGUgb3JpZ2luYWwgcGFyYW1ldGVyIChmb3IgdGhlIGNhc2VzIHdoZW4gdGhlIG5ldyBwYXJhbWV0ZXIKKyAgICAgaXMgYSBjb21wb25lbnQgb2YgYW4gb3JpZ2luYWwgb25lKS4gICovCisgIEhPU1RfV0lERV9JTlQgb2Zmc2V0OworCisgIC8qIFplcm8gYmFzZWQgaW5kZXggb2YgdGhlIG9yaWdpbmFsIHBhcmFtZXRlciB0aGlzIG9uZSBpcyBiYXNlZCBvbi4gIChBVE0KKyAgICAgdGhlcmUgaXMgbm8gd2F5IHRvIGluc2VydCBhIG5ldyBwYXJhbWV0ZXIgb3V0IG9mIHRoZSBibHVlIGJlY2F1c2UgdGhlcmUgaXMKKyAgICAgbm8gbmVlZCBidXQgaWYgaXQgYXJpc2VzIHRoZSBjb2RlIGNhbiBiZSBlYXNpbHkgZXh0ZWRlZCB0byBkbyBzby4pICAqLworICBpbnQgYmFzZV9pbmRleDsKKworICAvKiBUaGlzIG5ldyBwYXJhbWV0ZXIgaXMgYW4gdW5tb2RpZmllZCBwYXJhbWV0ZXIgYXQgaW5kZXggYmFzZV9pbmRleC4gKi8KKyAgdW5zaWduZWQgY29weV9wYXJhbSA6IDE7CisKKyAgLyogVGhpcyBhZGp1c3RtZW50IGRlc2NyaWJlcyBhIHBhcmFtZXRlciB0aGF0IGlzIGFib3V0IHRvIGJlIHJlbW92ZWQKKyAgICAgY29tcGxldGVseS4gIE1vc3QgdXNlcnMgd2lsbCBwcm9iYWJseSBuZWVkIHRvIGJvb2sga2VlcCB0aG9zZSBzbyB0aGF0IHRoZXkKKyAgICAgZG9uJ3QgbGVhdmUgYmVoaW5mZCBhbnkgbm9uIGRlZmF1bHQgZGVmIHNzYSBuYW1lcyBiZWxvbmdpbmcgdG8gdGhlbS4gICovCisgIHVuc2lnbmVkIHJlbW92ZV9wYXJhbSA6IDE7CisKKyAgLyogVGhlIHBhcmFtZXRlciBpcyB0byBiZSBwYXNzZWQgYnkgcmVmZXJlbmNlLiAgKi8KKyAgdW5zaWduZWQgYnlfcmVmIDogMTsKK307CisKK3R5cGVkZWYgc3RydWN0IGlwYV9wYXJtX2FkanVzdG1lbnQgaXBhX3Bhcm1fYWRqdXN0bWVudF90OworREVGX1ZFQ19PIChpcGFfcGFybV9hZGp1c3RtZW50X3QpOworREVGX1ZFQ19BTExPQ19PIChpcGFfcGFybV9hZGp1c3RtZW50X3QsIGhlYXApOworCit0eXBlZGVmIFZFQyAoaXBhX3Bhcm1fYWRqdXN0bWVudF90LCBoZWFwKSAqaXBhX3Bhcm1fYWRqdXN0bWVudF92ZWM7CisKK1ZFQyh0cmVlLCBoZWFwKSAqaXBhX2dldF92ZWN0b3Jfb2ZfZm9ybWFsX3Bhcm1zICh0cmVlIGZuZGVjbCk7Cit2b2lkIGlwYV9tb2RpZnlfZm9ybWFsX3BhcmFtZXRlcnMgKHRyZWUgZm5kZWNsLCBpcGFfcGFybV9hZGp1c3RtZW50X3ZlYywKKwkJCQkgICBjb25zdCBjaGFyICopOwordm9pZCBpcGFfbW9kaWZ5X2NhbGxfYXJndW1lbnRzIChzdHJ1Y3QgY2dyYXBoX2VkZ2UgKiwgZ2ltcGxlLAorCQkJCWlwYV9wYXJtX2FkanVzdG1lbnRfdmVjKTsKK2lwYV9wYXJtX2FkanVzdG1lbnRfdmVjIGlwYV9jb21iaW5lX2FkanVzdG1lbnRzIChpcGFfcGFybV9hZGp1c3RtZW50X3ZlYywKKwkJCQkJCSBpcGFfcGFybV9hZGp1c3RtZW50X3ZlYyk7Cit2b2lkIGlwYV9kdW1wX3BhcmFtX2FkanVzdG1lbnRzIChGSUxFICosIGlwYV9wYXJtX2FkanVzdG1lbnRfdmVjLCB0cmVlKTsKKwordm9pZCBpcGFfcHJvcF93cml0ZV9qdW1wX2Z1bmN0aW9ucyAoY2dyYXBoX25vZGVfc2V0IHNldCk7Cit2b2lkIGlwYV9wcm9wX3JlYWRfanVtcF9mdW5jdGlvbnMgKHZvaWQpOwordm9pZCBpcGFfdXBkYXRlX2FmdGVyX2x0b19yZWFkICh2b2lkKTsKK3ZvaWQgbHRvX2lwYV9maXh1cF9jYWxsX25vdGVzIChzdHJ1Y3QgY2dyYXBoX25vZGUgKiwgZ2ltcGxlICopOworCisvKiBGcm9tIHRyZWUtc3JhLmM6ICAqLworYm9vbCBidWlsZF9yZWZfZm9yX29mZnNldCAodHJlZSAqLCB0cmVlLCBIT1NUX1dJREVfSU5ULCB0cmVlLCBib29sKTsKKworI2VuZGlmIC8qIElQQV9QUk9QX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9pcGEtcmVmZXJlbmNlLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvaXBhLXJlZmVyZW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMjZlYmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvaXBhLXJlZmVyZW5jZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qIElQQSBoYW5kbGluZyBvZiByZWZlcmVuY2VzLgorICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgS2VubmV0aCBaYWRlY2sgPHphZGVja0BuYXR1cmFsYnJpZGdlLmNvbT4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX0lQQV9SRUZFUkVOQ0VfSAorI2RlZmluZSBHQ0NfSVBBX1JFRkVSRU5DRV9ICisjaW5jbHVkZSAiYml0bWFwLmgiCisjaW5jbHVkZSAidHJlZS5oIgorCisvKiBJbiBpcGEtcmVmZXJlbmNlLmMgICovCitiaXRtYXAgaXBhX3JlZmVyZW5jZV9nZXRfcmVhZF9nbG9iYWwgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqZm4pOworYml0bWFwIGlwYV9yZWZlcmVuY2VfZ2V0X3dyaXR0ZW5fZ2xvYmFsIChzdHJ1Y3QgY2dyYXBoX25vZGUgKmZuKTsKK2JpdG1hcCBpcGFfcmVmZXJlbmNlX2dldF9ub3RfcmVhZF9nbG9iYWwgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqZm4pOworYml0bWFwIGlwYV9yZWZlcmVuY2VfZ2V0X25vdF93cml0dGVuX2dsb2JhbCAoc3RydWN0IGNncmFwaF9ub2RlICpmbik7CisKKyNlbmRpZiAgLyogR0NDX0lQQV9SRUZFUkVOQ0VfSCAgKi8KKwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2lwYS11dGlscy5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2lwYS11dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMThhNGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvaXBhLXV0aWxzLmgKQEAgLTAsMCArMSw0NiBAQAorLyogVXRpbGl0aWVzIGZvciBpcGEgYW5hbHlzaXMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBLZW5uZXRoIFphZGVjayA8emFkZWNrQG5hdHVyYWxicmlkZ2UuY29tPgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfSVBBX1VUSUxTX0gKKyNkZWZpbmUgR0NDX0lQQV9VVElMU19ICisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImNncmFwaC5oIgorCitzdHJ1Y3QgaXBhX2Rmc19pbmZvIHsKKyAgaW50IGRmbl9udW1iZXI7CisgIGludCBsb3dfbGluazsKKyAgYm9vbCBuZXdfbm9kZTsKKyAgYm9vbCBvbl9zdGFjazsKKyAgc3RydWN0IGNncmFwaF9ub2RlKiBuZXh0X2N5Y2xlOworICBQVFIgYXV4OworfTsKKworCisKKy8qIEluIGlwYS11dGlscy5jICAqLwordm9pZCBpcGFfdXRpbHNfcHJpbnRfb3JkZXIgKEZJTEUqLCBjb25zdCBjaGFyICosIHN0cnVjdCBjZ3JhcGhfbm9kZSoqLCBpbnQpOworaW50IGlwYV91dGlsc19yZWR1Y2VkX2lub3JkZXIgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqKiwgYm9vbCwgYm9vbCwKKwkJCSAgICAgICBib29sICgqaWdub3JlX2VkZ2UpIChzdHJ1Y3QgY2dyYXBoX2VkZ2UgKikpOwordHJlZSBnZXRfYmFzZV92YXIgKHRyZWUpOworCisKKyNlbmRpZiAgLyogR0NDX0lQQV9VVElMU19IICAqLworCisKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9qYXZhL2phdmEtdHJlZS5kZWYgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvamF2YS9qYXZhLXRyZWUuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NjU0OTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvamF2YS9qYXZhLXRyZWUuZGVmCkBAIC0wLDAgKzEsMzggQEAKKy8qIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgYW5kIGRvY3VtZW50YXRpb24gZm9yIHRoZQorICAgZXh0cmEgdHJlZSBjb2RlcyB1c2VkIGJ5IGdjai4KKyAgIENvcHlyaWdodCAoQykgMTk5NiwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKworLyogU2hpZnQgcmlnaHQsIGxvZ2ljYWwuICovCitERUZUUkVFQ09ERSAoVVJTSElGVF9FWFBSLCAidXJzaGlmdF9leHByIiwgdGNjX2JpbmFyeSwgMikKKworLyogUmV0dXJuIC0xLCAwLCAxIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBmaXJzdCBhcmd1bWVudCBpcworICAgbGVzcywgZXF1YWwsIG9yIGdyZWF0ZXIgdG8gdGhlIHNlY29uZCBhcmd1bWVudC4gKi8KK0RFRlRSRUVDT0RFIChDT01QQVJFX0VYUFIsICJjb21wYXJlX2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorCisvKiBTYW1lIGFzIENPTVBBUkVfRVhQUiwgYnV0IGlmIGVpdGhlciB2YWx1ZSBpcyBOYU4sIHRoZSByZXN1bHQgaXMgLTEuICovCitERUZUUkVFQ09ERSAoQ09NUEFSRV9MX0VYUFIsICJjb21wYXJlX2xfZXhwciIsIHRjY19iaW5hcnksIDIpCisvKiBTYW1lIGFzIENPTVBBUkVfRVhQUiwgYnV0IGlmIGVpdGhlciB2YWx1ZSBpcyBOYU4sIHRoZSByZXN1bHQgaXMgMS4gKi8KK0RFRlRSRUVDT0RFIChDT01QQVJFX0dfRVhQUiwgImNvbXBhcmVfZ19leHByIiwgdGNjX2JpbmFyeSwgMikKKworLyoKK0xvY2FsIHZhcmlhYmxlczoKK21vZGU6YworRW5kOgorKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9sYW5naG9va3MuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9sYW5naG9va3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGE5OGFkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2xhbmdob29rcy5oCkBAIC0wLDAgKzEsNDc0IEBACisvKiBUaGUgbGFuZ19ob29rcyBkYXRhIHN0cnVjdHVyZS4KKyAgIENvcHlyaWdodCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX0xBTkdfSE9PS1NfSAorI2RlZmluZSBHQ0NfTEFOR19IT09LU19ICisKKy8qIFRoaXMgZmlsZSBzaG91bGQgYmUgI2luY2x1ZGUtZCBhZnRlciB0cmVlLmguICAqLworCitzdHJ1Y3QgZGlhZ25vc3RpY19jb250ZXh0Oworc3RydWN0IGRpYWdub3N0aWNfaW5mbzsKKworc3RydWN0IGdpbXBsaWZ5X29tcF9jdHg7CisKK3N0cnVjdCBhcnJheV9kZXNjcl9pbmZvOworCisvKiBBIHByaW50IGhvb2sgZm9yIHByaW50X3RyZWUgKCkuICAqLwordHlwZWRlZiB2b2lkICgqbGFuZ19wcmludF90cmVlX2hvb2spIChGSUxFICosIHRyZWUsIGludCBpbmRlbnQpOworCitlbnVtIGNsYXNzaWZ5X3JlY29yZAorICB7IFJFQ09SRF9JU19TVFJVQ1QsIFJFQ09SRF9JU19DTEFTUywgUkVDT1JEX0lTX0lOVEVSRkFDRSB9OworCisvKiBUaGUgZm9sbG93aW5nIGhvb2tzIGFyZSBkb2N1bWVudGVkIGluIGxhbmdob29rcy5jLiAgTXVzdCBub3QgYmUKKyAgIE5VTEwuICAqLworCitzdHJ1Y3QgbGFuZ19ob29rc19mb3JfdHJlZV9pbmxpbmluZworeworICBib29sICgqdmFyX21vZF90eXBlX3ApICh0cmVlLCB0cmVlKTsKK307CisKK3N0cnVjdCBsYW5nX2hvb2tzX2Zvcl9jYWxsZ3JhcGgKK3sKKyAgLyogVGhlIG5vZGUgcGFzc2VkIGlzIGEgbGFuZ3VhZ2Utc3BlY2lmaWMgdHJlZSBub2RlLiAgSWYgaXRzIGNvbnRlbnRzCisgICAgIGFyZSByZWxldmFudCB0byB1c2Ugb2Ygb3RoZXIgZGVjbGFyYXRpb25zLCBtYXJrIHRoZW0uICAqLworICB0cmVlICgqYW5hbHl6ZV9leHByKSAodHJlZSAqLCBpbnQgKik7Cit9OworCisvKiBUaGUgZm9sbG93aW5nIGhvb2tzIGFyZSB1c2VkIGJ5IHRyZWUtZHVtcC5jLiAgKi8KKworc3RydWN0IGxhbmdfaG9va3NfZm9yX3RyZWVfZHVtcAoreworICAvKiBEdW1wIGxhbmd1YWdlLXNwZWNpZmljIHBhcnRzIG9mIHRyZWUgbm9kZXMuICBSZXR1cm5zIG5vbnplcm8gaWYgaXQKKyAgICAgZG9lcyBub3Qgd2FudCB0aGUgdXN1YWwgZHVtcGluZyBvZiB0aGUgc2Vjb25kIGFyZ3VtZW50LiAgKi8KKyAgYm9vbCAoKmR1bXBfdHJlZSkgKHZvaWQgKiwgdHJlZSk7CisKKyAgLyogRGV0ZXJtaW5lIHR5cGUgcXVhbGlmaWVycyBpbiBhIGxhbmd1YWdlLXNwZWNpZmljIHdheS4gICovCisgIGludCAoKnR5cGVfcXVhbHMpIChjb25zdF90cmVlKTsKK307CisKKy8qIEhvb2tzIHJlbGF0ZWQgdG8gdHlwZXMuICAqLworCitzdHJ1Y3QgbGFuZ19ob29rc19mb3JfdHlwZXMKK3sKKyAgLyogUmV0dXJuIGEgbmV3IHR5cGUgKHdpdGggdGhlIGluZGljYXRlZCBDT0RFKSwgZG9pbmcgd2hhdGV2ZXIKKyAgICAgbGFuZ3VhZ2Utc3BlY2lmaWMgcHJvY2Vzc2luZyBpcyByZXF1aXJlZC4gICovCisgIHRyZWUgKCptYWtlX3R5cGUpIChlbnVtIHRyZWVfY29kZSk7CisKKyAgLyogUmV0dXJuIHdoYXQga2luZCBvZiBSRUNPUkRfVFlQRSB0aGlzIGlzLCBtYWlubHkgZm9yIHB1cnBvc2VzIG9mCisgICAgIGRlYnVnIGluZm9ybWF0aW9uLiAgSWYgbm90IGRlZmluZWQsIHJlY29yZCB0eXBlcyBhcmUgYXNzdW1lZCB0bworICAgICBiZSBzdHJ1Y3R1cmVzLiAgKi8KKyAgZW51bSBjbGFzc2lmeV9yZWNvcmQgKCpjbGFzc2lmeV9yZWNvcmQpICh0cmVlKTsKKworICAvKiBHaXZlbiBNT0RFIGFuZCBVTlNJR05FRFAsIHJldHVybiBhIHN1aXRhYmxlIHR5cGUtdHJlZSB3aXRoIHRoYXQKKyAgICAgbW9kZS4gICovCisgIHRyZWUgKCp0eXBlX2Zvcl9tb2RlKSAoZW51bSBtYWNoaW5lX21vZGUsIGludCk7CisKKyAgLyogR2l2ZW4gUFJFQ0lTSU9OIGFuZCBVTlNJR05FRFAsIHJldHVybiBhIHN1aXRhYmxlIHR5cGUtdHJlZSBmb3IgYW4KKyAgICAgaW50ZWdlciB0eXBlIHdpdGggYXQgbGVhc3QgdGhhdCBwcmVjaXNpb24uICAqLworICB0cmVlICgqdHlwZV9mb3Jfc2l6ZSkgKHVuc2lnbmVkLCBpbnQpOworCisgIC8qIFRydWUgaWYgdGhlIHR5cGUgaXMgYW4gaW5zdGFudGlhdGlvbiBvZiBhIGdlbmVyaWMgdHlwZSwKKyAgICAgZS5nLiBDKysgdGVtcGxhdGUgaW1wbGljaXQgc3BlY2lhbGl6YXRpb25zLiAgKi8KKyAgYm9vbCAoKmdlbmVyaWNfcCkgKGNvbnN0X3RyZWUpOworCisgIC8qIFJldHVybnMgdGhlIFRSRUVfVkVDIG9mIGVsZW1lbnRzIG9mIGEgZ2l2ZW4gZ2VuZXJpYyBhcmd1bWVudCBwYWNrLiAgKi8KKyAgdHJlZSAoKmdldF9hcmd1bWVudF9wYWNrX2VsZW1zKSAoY29uc3RfdHJlZSk7CisKKyAgLyogR2l2ZW4gYSB0eXBlLCBhcHBseSBkZWZhdWx0IHByb21vdGlvbnMgdG8gdW5uYW1lZCBmdW5jdGlvbgorICAgICBhcmd1bWVudHMgYW5kIHJldHVybiB0aGUgbmV3IHR5cGUuICBSZXR1cm4gdGhlIHNhbWUgdHlwZSBpZiBubworICAgICBjaGFuZ2UuICBSZXF1aXJlZCBieSBhbnkgbGFuZ3VhZ2UgdGhhdCBzdXBwb3J0cyB2YXJpYWRpYworICAgICBhcmd1bWVudHMuICBUaGUgZGVmYXVsdCBob29rIGRpZXMuICAqLworICB0cmVlICgqdHlwZV9wcm9tb3Rlc190bykgKHRyZWUpOworCisgIC8qIFJlZ2lzdGVyIFRZUEUgYXMgYSBidWlsdGluIHR5cGUgd2l0aCB0aGUgaW5kaWNhdGVkIE5BTUUuICBUaGUKKyAgICAgVFlQRSBpcyBwbGFjZWQgaW4gdGhlIG91dGVybW9zdCBsZXhpY2FsIHNjb3BlLiAgVGhlIHNlbWFudGljcworICAgICBzaG91bGQgYmUgYW5hbG9nb3VzIHRvOgorCisgICAgICAgdHlwZWRlZiBUWVBFIE5BTUU7CisKKyAgICAgaW4gQy4gIFRoZSBkZWZhdWx0IGhvb2sgaWdub3JlcyB0aGUgZGVjbGFyYXRpb24uICAqLworICB2b2lkICgqcmVnaXN0ZXJfYnVpbHRpbl90eXBlKSAodHJlZSwgY29uc3QgY2hhciAqKTsKKworICAvKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGluIHRyZWUuYyB0byBwcmludCBhbiBlcnJvciBtZXNzYWdlIGZvcgorICAgICBpbnZhbGlkIHVzZSBvZiBhbiBpbmNvbXBsZXRlIHR5cGUuICBWQUxVRSBpcyB0aGUgZXhwcmVzc2lvbiB0aGF0CisgICAgIHdhcyB1c2VkIChvciAwIGlmIHRoYXQgaXNuJ3Qga25vd24pIGFuZCBUWVBFIGlzIHRoZSB0eXBlIHRoYXQgd2FzCisgICAgIGludmFsaWQuICAqLworICB2b2lkICgqaW5jb21wbGV0ZV90eXBlX2Vycm9yKSAoY29uc3RfdHJlZSB2YWx1ZSwgY29uc3RfdHJlZSB0eXBlKTsKKworICAvKiBDYWxsZWQgZnJvbSBhc3NpZ25fdGVtcCB0byByZXR1cm4gdGhlIG1heGltdW0gc2l6ZSwgaWYgdGhlcmUgaXMgb25lLAorICAgICBmb3IgYSB0eXBlLiAgKi8KKyAgdHJlZSAoKm1heF9zaXplKSAoY29uc3RfdHJlZSk7CisKKyAgLyogUmVnaXN0ZXIgbGFuZ3VhZ2Ugc3BlY2lmaWMgdHlwZSBzaXplIHZhcmlhYmxlcyBhcyBwb3RlbnRpYWxseSBPcGVuTVAKKyAgICAgZmlyc3Rwcml2YXRlIHZhcmlhYmxlcy4gICovCisgIHZvaWQgKCpvbXBfZmlyc3Rwcml2YXRpemVfdHlwZV9zaXplcykgKHN0cnVjdCBnaW1wbGlmeV9vbXBfY3R4ICosIHRyZWUpOworCisgIC8qIFJldHVybiBUUlVFIGlmIFRZUEUxIGFuZCBUWVBFMiBhcmUgaWRlbnRpY2FsIGZvciB0eXBlIGhhc2hpbmcgcHVycG9zZXMuCisgICAgIENhbGxlZCBvbmx5IGFmdGVyIGRvaW5nIGFsbCBsYW5ndWFnZSBpbmRlcGVuZGVudCBjaGVja3MuCisgICAgIEF0IHByZXNlbnQsIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgd2hlbiBib3RoIFRZUEUxIGFuZCBUWVBFMiBhcmUKKyAgICAgRlVOQ1RJT05fVFlQRXMuICAqLworICBib29sICgqdHlwZV9oYXNoX2VxKSAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CisKKyAgLyogUmV0dXJuIFRSVUUgaWYgVFlQRSB1c2VzIGEgaGlkZGVuIGRlc2NyaXB0b3IgYW5kIGZpbGxzIGluIGluZm9ybWF0aW9uCisgICAgIGZvciB0aGUgZGVidWdnZXIgYWJvdXQgdGhlIGFycmF5IGJvdW5kcywgc3RyaWRlcywgZXRjLiAgKi8KKyAgYm9vbCAoKmdldF9hcnJheV9kZXNjcl9pbmZvKSAoY29uc3RfdHJlZSwgc3RydWN0IGFycmF5X2Rlc2NyX2luZm8gKik7CisKKyAgLyogRmlsbCBpbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGRlYnVnZ2VyIGFib3V0IHRoZSBib3VuZHMgb2YgVFlQRS4gICovCisgIHZvaWQgKCpnZXRfc3VicmFuZ2VfYm91bmRzKSAoY29uc3RfdHJlZSwgdHJlZSAqLCB0cmVlICopOworCisgIC8qIElmIHdlIHJlcXVlc3RlZCBhIHBvaW50ZXIgdG8gYSB2ZWN0b3IsIGJ1aWxkIHVwIHRoZSBwb2ludGVycyB0aGF0CisgICAgIHdlIHN0cmlwcGVkIG9mZiB3aGlsZSBsb29raW5nIGZvciB0aGUgaW5uZXIgdHlwZS4gIFNpbWlsYXJseSBmb3IKKyAgICAgcmV0dXJuIHZhbHVlcyBmcm9tIGZ1bmN0aW9ucy4gIFRoZSBhcmd1bWVudCBUWVBFIGlzIHRoZSB0b3Agb2YgdGhlCisgICAgIGNoYWluLCBhbmQgQk9UVE9NIGlzIHRoZSBuZXcgdHlwZSB3aGljaCB3ZSB3aWxsIHBvaW50IHRvLiAgKi8KKyAgdHJlZSAoKnJlY29uc3RydWN0X2NvbXBsZXhfdHlwZSkgKHRyZWUsIHRyZWUpOworCisgIC8qIE5vbnplcm8gaWYgdHlwZXMgdGhhdCBhcmUgaWRlbnRpY2FsIGFyZSB0byBiZSBoYXNoZWQgc28gdGhhdCBvbmx5CisgICAgIG9uZSBjb3B5IGlzIGtlcHQuICBJZiBhIGxhbmd1YWdlIHJlcXVpcmVzIHVuaXF1ZSB0eXBlcyBmb3IgZWFjaAorICAgICB1c2VyLXNwZWNpZmllZCB0eXBlLCBzdWNoIGFzIEFkYSwgdGhpcyBzaG91bGQgYmUgc2V0IHRvIFRSVUUuICAqLworICBib29sIGhhc2hfdHlwZXM7Cit9OworCisvKiBMYW5ndWFnZSBob29rcyByZWxhdGVkIHRvIGRlY2xzIGFuZCB0aGUgc3ltYm9sIHRhYmxlLiAgKi8KKworc3RydWN0IGxhbmdfaG9va3NfZm9yX2RlY2xzCit7CisgIC8qIFJldHVybnMgbm9uemVybyBpZiB3ZSBhcmUgaW4gdGhlIGdsb2JhbCBiaW5kaW5nIGxldmVsLiAgQWRhCisgICAgIHJldHVybnMgLTEgZm9yIGFuIHVuZG9jdW1lbnRlZCByZWFzb24gdXNlZCBpbiBzdG9yLWxheW91dC5jLiAgKi8KKyAgaW50ICgqZ2xvYmFsX2JpbmRpbmdzX3ApICh2b2lkKTsKKworICAvKiBGdW5jdGlvbiB0byBhZGQgYSBkZWNsIHRvIHRoZSBjdXJyZW50IHNjb3BlIGxldmVsLiAgVGFrZXMgb25lCisgICAgIGFyZ3VtZW50LCBhIGRlY2wgdG8gYWRkLiAgUmV0dXJucyB0aGF0IGRlY2wsIG9yLCBpZiB0aGUgc2FtZQorICAgICBzeW1ib2wgaXMgYWxyZWFkeSBkZWNsYXJlZCwgbWF5IHJldHVybiBhIGRpZmZlcmVudCBkZWNsIGZvciB0aGF0CisgICAgIG5hbWUuICAqLworICB0cmVlICgqcHVzaGRlY2wpICh0cmVlKTsKKworICAvKiBSZXR1cm5zIHRoZSBjaGFpbiBvZiBkZWNscyBzbyBmYXIgaW4gdGhlIGN1cnJlbnQgc2NvcGUgbGV2ZWwuICAqLworICB0cmVlICgqZ2V0ZGVjbHMpICh2b2lkKTsKKworICAvKiBSZXR1cm5zIHRydWUgaWYgREVDTCBpcyBleHBsaWNpdCBtZW1iZXIgZnVuY3Rpb24uICAqLworICBib29sICgqZnVuY3Rpb25fZGVjbF9leHBsaWNpdF9wKSAodHJlZSk7CisKKyAgLyogUmV0dXJucyBUcnVlIGlmIHRoZSBwYXJhbWV0ZXIgaXMgYSBnZW5lcmljIHBhcmFtZXRlciBkZWNsCisgICAgIG9mIGEgZ2VuZXJpYyB0eXBlLCBlLmcgYSB0ZW1wbGF0ZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgZm9yIHRoZSBDKysgRkUuICAqLworICBib29sICgqZ2VuZXJpY19nZW5lcmljX3BhcmFtZXRlcl9kZWNsX3ApIChjb25zdF90cmVlKTsKKworICAvKiBEZXRlcm1pbmUgaWYgYSBmdW5jdGlvbiBwYXJhbWV0ZXIgZ290IGV4cGFuZGVkIGZyb20gYQorICAgICBmdW5jdGlvbiBwYXJhbWV0ZXIgcGFjay4gICovCisgIGJvb2wgKCpmdW5jdGlvbl9wYXJtX2V4cGFuZGVkX2Zyb21fcGFja19wKSAodHJlZSwgdHJlZSk7CisKKyAgLyogUmV0dXJucyB0aGUgZ2VuZXJpYyBkZWNsYXJhdGlvbiBvZiBhIGdlbmVyaWMgZnVuY3Rpb24gaW5zdGFudGlhdGlvbnMuICAqLworICB0cmVlICgqZ2V0X2dlbmVyaWNfZnVuY3Rpb25fZGVjbCkgKGNvbnN0X3RyZWUpOworCisgIC8qIFJldHVybnMgdHJ1ZSB3aGVuIHdlIHNob3VsZCB3YXJuIGZvciBhbiB1bnVzZWQgZ2xvYmFsIERFQ0wuCisgICAgIFdlIHdpbGwgYWxyZWFkeSBoYXZlIGNoZWNrZWQgdGhhdCBpdCBoYXMgc3RhdGljIGJpbmRpbmcuICAqLworICBib29sICgqd2Fybl91bnVzZWRfZ2xvYmFsKSAoY29uc3RfdHJlZSk7CisKKyAgLyogT2J0YWluIGEgbGlzdCBvZiBnbG9iYWxzIGFuZCBkbyBmaW5hbCBvdXRwdXQgb24gdGhlbSBhdCBlbmQKKyAgICAgb2YgY29tcGlsYXRpb24gKi8KKyAgdm9pZCAoKmZpbmFsX3dyaXRlX2dsb2JhbHMpICh2b2lkKTsKKworICAvKiBUcnVlIGlmIHRoaXMgZGVjbCBtYXkgYmUgY2FsbGVkIHZpYSBhIHNpYmNhbGwuICAqLworICBib29sICgqb2tfZm9yX3NpYmNhbGwpIChjb25zdF90cmVlKTsKKworICAvKiBUcnVlIGlmIE9wZW5NUCBzaG91bGQgcHJpdmF0aXplIHdoYXQgdGhpcyBERUNMIHBvaW50cyB0byByYXRoZXIKKyAgICAgdGhhbiB0aGUgREVDTCBpdHNlbGYuICAqLworICBib29sICgqb21wX3ByaXZhdGl6ZV9ieV9yZWZlcmVuY2UpIChjb25zdF90cmVlKTsKKworICAvKiBSZXR1cm4gc2hhcmluZyBraW5kIGlmIE9wZW5NUCBzaGFyaW5nIGF0dHJpYnV0ZSBvZiBERUNMIGlzCisgICAgIHByZWRldGVybWluZWQsIE9NUF9DTEFVU0VfREVGQVVMVF9VTlNQRUNJRklFRCBvdGhlcndpc2UuICAqLworICBlbnVtIG9tcF9jbGF1c2VfZGVmYXVsdF9raW5kICgqb21wX3ByZWRldGVybWluZWRfc2hhcmluZykgKHRyZWUpOworCisgIC8qIFJldHVybiBkZWNsIHRoYXQgc2hvdWxkIGJlIHJlcG9ydGVkIGZvciBERUZBVUxUKE5PTkUpIGZhaWx1cmUKKyAgICAgZGlhZ25vc3RpY3MuICBVc3VhbGx5IHRoZSBERUNMIHBhc3NlZCBpbi4gICovCisgIHRyZWUgKCpvbXBfcmVwb3J0X2RlY2wpICh0cmVlKTsKKworICAvKiBSZXR1cm4gdHJ1ZSBpZiBERUNMJ3MgREVDTF9WQUxVRV9FWFBSIChpZiBhbnkpIHNob3VsZCBiZQorICAgICBkaXNyZWdhcmRlZCBpbiBPcGVuTVAgY29uc3RydWN0LCBiZWNhdXNlIGl0IGlzIGdvaW5nIHRvIGJlCisgICAgIHJlbWFwcGVkIGR1cmluZyBPcGVuTVAgbG93ZXJpbmcuICBTSEFSRUQgaXMgdHJ1ZSBpZiBERUNMCisgICAgIGlzIGdvaW5nIHRvIGJlIHNoYXJlZCwgZmFsc2UgaWYgaXQgaXMgZ29pbmcgdG8gYmUgcHJpdmF0aXplZC4gICovCisgIGJvb2wgKCpvbXBfZGlzcmVnYXJkX3ZhbHVlX2V4cHIpICh0cmVlLCBib29sKTsKKworICAvKiBSZXR1cm4gdHJ1ZSBpZiBERUNMIHRoYXQgaXMgc2hhcmVkIGlmZiBTSEFSRUQgaXMgdHJ1ZSBzaG91bGQKKyAgICAgYmUgcHV0IGludG8gT01QX0NMQVVTRV9QUklWQVRFX0RFQlVHLiAgKi8KKyAgYm9vbCAoKm9tcF9wcml2YXRlX2RlYnVnX2NsYXVzZSkgKHRyZWUsIGJvb2wpOworCisgIC8qIFJldHVybiB0cnVlIGlmIERFQ0wgaW4gcHJpdmF0ZSBjbGF1c2UgbmVlZHMKKyAgICAgT01QX0NMQVVTRV9QUklWQVRFX09VVEVSX1JFRiBvbiB0aGUgcHJpdmF0ZSBjbGF1c2UuICAqLworICBib29sICgqb21wX3ByaXZhdGVfb3V0ZXJfcmVmKSAodHJlZSk7CisKKyAgLyogQnVpbGQgYW5kIHJldHVybiBjb2RlIGZvciBhIGRlZmF1bHQgY29uc3RydWN0b3IgZm9yIERFQ0wgaW4KKyAgICAgcmVzcG9uc2UgdG8gQ0xBVVNFLiAgT1VURVIgaXMgY29ycmVzcG9uZGluZyBvdXRlciByZWdpb24ncworICAgICB2YXJpYWJsZSBpZiBuZWVkZWQuICBSZXR1cm4gTlVMTCBpZiBub3RoaW5nIHRvIGJlIGRvbmUuICAqLworICB0cmVlICgqb21wX2NsYXVzZV9kZWZhdWx0X2N0b3IpICh0cmVlIGNsYXVzZSwgdHJlZSBkZWNsLCB0cmVlIG91dGVyKTsKKworICAvKiBCdWlsZCBhbmQgcmV0dXJuIGNvZGUgZm9yIGEgY29weSBjb25zdHJ1Y3RvciBmcm9tIFNSQyB0byBEU1QuICAqLworICB0cmVlICgqb21wX2NsYXVzZV9jb3B5X2N0b3IpICh0cmVlIGNsYXVzZSwgdHJlZSBkc3QsIHRyZWUgc3JjKTsKKworICAvKiBTaW1pbGFybHksIGV4Y2VwdCB1c2UgYW4gYXNzaWdubWVudCBvcGVyYXRvciBpbnN0ZWFkLiAgKi8KKyAgdHJlZSAoKm9tcF9jbGF1c2VfYXNzaWduX29wKSAodHJlZSBjbGF1c2UsIHRyZWUgZHN0LCB0cmVlIHNyYyk7CisKKyAgLyogQnVpbGQgYW5kIHJldHVybiBjb2RlIGRlc3RydWN0aW5nIERFQ0wuICBSZXR1cm4gTlVMTCBpZiBub3RoaW5nCisgICAgIHRvIGJlIGRvbmUuICAqLworICB0cmVlICgqb21wX2NsYXVzZV9kdG9yKSAodHJlZSBjbGF1c2UsIHRyZWUgZGVjbCk7CisKKyAgLyogRG8gbGFuZ3VhZ2Ugc3BlY2lmaWMgY2hlY2tpbmcgb24gYW4gaW1wbGljaXRseSBkZXRlcm1pbmVkIGNsYXVzZS4gICovCisgIHZvaWQgKCpvbXBfZmluaXNoX2NsYXVzZSkgKHRyZWUgY2xhdXNlKTsKK307CisKKy8qIExhbmd1YWdlIGhvb2tzIHJlbGF0ZWQgdG8gTFRPIHNlcmlhbGl6YXRpb24uICAqLworCitzdHJ1Y3QgbGFuZ19ob29rc19mb3JfbHRvCit7CisgIC8qIEJlZ2luIGEgbmV3IExUTyBzZWN0aW9uIG5hbWVkIE5BTUUuICAqLworICB2b2lkICgqYmVnaW5fc2VjdGlvbikgKGNvbnN0IGNoYXIgKm5hbWUpOworCisgIC8qIFdyaXRlIERBVEEgb2YgbGVuZ3RoIExFTiB0byB0aGUgY3VycmVudGx5IG9wZW4gTFRPIHNlY3Rpb24uICBCTE9DSyBpcyBhCisgICAgIHBvaW50ZXIgdG8gdGhlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBtZW1vcnkgY29udGFpbmluZyBEQVRBLiAgVGhlCisgICAgIGFwcGVuZF9kYXRhIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIGl0IHdoZW4gaXQgaXMgbm8gbG9uZ2VyCisgICAgIG5lZWRlZC4gICovCisgIHZvaWQgKCphcHBlbmRfZGF0YSkgKGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4sIHZvaWQgKmJsb2NrKTsKKworICAvKiBFbmQgdGhlIHByZXZpb3VzbHkgYmVndW4gTFRPIHNlY3Rpb24uICAqLworICB2b2lkICgqZW5kX3NlY3Rpb24pICh2b2lkKTsKK307CisKKy8qIExhbmd1YWdlLXNwZWNpZmljIGhvb2tzLiAgU2VlIGxhbmdob29rcy1kZWYuaCBmb3IgZGVmYXVsdHMuICAqLworCitzdHJ1Y3QgbGFuZ19ob29rcworeworICAvKiBTdHJpbmcgaWRlbnRpZnlpbmcgdGhlIGZyb250IGVuZC4gIGUuZy4gIkdOVSBDKysiLiAgKi8KKyAgY29uc3QgY2hhciAqbmFtZTsKKworICAvKiBzaXplb2YgKHN0cnVjdCBsYW5nX2lkZW50aWZpZXIpLCBzbyBtYWtlX25vZGUgKCkgY3JlYXRlcworICAgICBpZGVudGlmaWVyIG5vZGVzIGxvbmcgZW5vdWdoIGZvciB0aGUgbGFuZ3VhZ2Utc3BlY2lmaWMgc2xvdHMuICAqLworICBzaXplX3QgaWRlbnRpZmllcl9zaXplOworCisgIC8qIFJlbW92ZSBhbnkgcGFydHMgb2YgdGhlIHRyZWUgdGhhdCBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBGRS4gKi8KKyAgdm9pZCAoKmZyZWVfbGFuZ19kYXRhKSAodHJlZSk7CisKKyAgLyogRGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiBhbnkgbGFuZ3VhZ2Utc3BlY2lmaWMgdGNjX2NvbnN0YW50IG9yCisgICAgIHRjY19leGNlcHRpb25hbCBub2Rlcy4gIFNpbmNlIGl0IGlzIGNhbGxlZCBmcm9tIG1ha2Vfbm9kZSwgdGhlCisgICAgIG9ubHkgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGlzIHRoZSB0cmVlIGNvZGUuICBFeHBlY3RlZCB0byBkaWUKKyAgICAgb24gdW5yZWNvZ25pemVkIGNvZGVzLiAgKi8KKyAgc2l6ZV90ICgqdHJlZV9zaXplKSAoZW51bSB0cmVlX2NvZGUpOworCisgIC8qIFRoZSBmaXJzdCBjYWxsYmFjayBtYWRlIHRvIHRoZSBmcm9udCBlbmQsIGZvciBzaW1wbGUKKyAgICAgaW5pdGlhbGl6YXRpb24gbmVlZGVkIGJlZm9yZSBhbnkgY2FsbHMgdG8gaGFuZGxlX29wdGlvbi4gIFJldHVybgorICAgICB0aGUgbGFuZ3VhZ2UgbWFzayB0byBmaWx0ZXIgdGhlIHN3aXRjaCBhcnJheSB3aXRoLiAgKi8KKyAgdW5zaWduZWQgaW50ICgqaW5pdF9vcHRpb25zKSAodW5zaWduZWQgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKKworICAvKiBDYWxsYmFjayB1c2VkIHRvIHBlcmZvcm0gbGFuZ3VhZ2Utc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gZm9yIHRoZQorICAgICBnbG9iYWwgZGlhZ25vc3RpYyBjb250ZXh0IHN0cnVjdHVyZS4gICovCisgIHZvaWQgKCppbml0aWFsaXplX2RpYWdub3N0aWNzKSAoc3RydWN0IGRpYWdub3N0aWNfY29udGV4dCAqKTsKKworICAvKiBIYW5kbGUgdGhlIHN3aXRjaCBDT0RFLCB3aGljaCBoYXMgcmVhbCB0eXBlIGVudW0gb3B0X2NvZGUgZnJvbQorICAgICBvcHRpb25zLmguICBJZiB0aGUgc3dpdGNoIHRha2VzIGFuIGFyZ3VtZW50LCBpdCBpcyBwYXNzZWQgaW4gQVJHCisgICAgIHdoaWNoIHBvaW50cyB0byBwZXJtYW5lbnQgc3RvcmFnZS4gIFRoZSBoYW5kbGVyIGlzIHJlc3BvbnNpYmxlIGZvcgorICAgICBjaGVja2luZyB3aGV0aGVyIEFSRyBpcyBOVUxMLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCBubyBhcmd1bWVudAorICAgICB3YXMgaW4gZmFjdCBzdXBwbGllZC4gIEZvciAtZiBhbmQgLVcgc3dpdGNoZXMsIFZBTFVFIGlzIDEgb3IgMAorICAgICBmb3IgdGhlIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBmb3JtcyByZXNwZWN0aXZlbHkuCisKKyAgICAgUmV0dXJuIDEgaWYgdGhlIHN3aXRjaCBpcyB2YWxpZCwgMCBpZiBpbnZhbGlkLCBhbmQgLTEgaWYgaXQncworICAgICB2YWxpZCBhbmQgc2hvdWxkIG5vdCBiZSB0cmVhdGVkIGFzIGxhbmd1YWdlLWluZGVwZW5kZW50IHRvby4gICovCisgIGludCAoKmhhbmRsZV9vcHRpb24pIChzaXplX3QgY29kZSwgY29uc3QgY2hhciAqYXJnLCBpbnQgdmFsdWUpOworCisgIC8qIFJldHVybiBmYWxzZSB0byB1c2UgdGhlIGRlZmF1bHQgY29tcGxhaW50IGFib3V0IGEgbWlzc2luZworICAgICBhcmd1bWVudCwgb3RoZXJ3aXNlIG91dHB1dCBhIGNvbXBsYWludCBhbmQgcmV0dXJuIHRydWUuICAqLworICBib29sICgqbWlzc2luZ19hcmd1bWVudCkgKGNvbnN0IGNoYXIgKm9wdCwgc2l6ZV90IGNvZGUpOworCisgIC8qIENhbGxlZCB3aGVuIGFsbCBjb21tYW5kIGxpbmUgb3B0aW9ucyBoYXZlIGJlZW4gcGFyc2VkIHRvIGFsbG93CisgICAgIGZ1cnRoZXIgcHJvY2Vzc2luZyBhbmQgaW5pdGlhbGl6YXRpb24KKworICAgICBTaG91bGQgcmV0dXJuIHRydWUgdG8gaW5kaWNhdGUgdGhhdCBhIGNvbXBpbGVyIGJhY2stZW5kIGlzCisgICAgIG5vdCByZXF1aXJlZCwgc3VjaCBhcyB3aXRoIHRoZSAtRSBvcHRpb24uCisKKyAgICAgSWYgZXJyb3Jjb3VudCBpcyBub256ZXJvIGFmdGVyIHRoaXMgY2FsbCB0aGUgY29tcGlsZXIgZXhpdHMKKyAgICAgaW1tZWRpYXRlbHkgYW5kIHRoZSBmaW5pc2ggaG9vayBpcyBub3QgY2FsbGVkLiAgKi8KKyAgYm9vbCAoKnBvc3Rfb3B0aW9ucykgKGNvbnN0IGNoYXIgKiopOworCisgIC8qIENhbGxlZCBhZnRlciBwb3N0X29wdGlvbnMgdG8gaW5pdGlhbGl6ZSB0aGUgZnJvbnQgZW5kLiAgUmV0dXJuCisgICAgIGZhbHNlIHRvIGluZGljYXRlIHRoYXQgbm8gZnVydGhlciBjb21waWxhdGlvbiBiZSBwZXJmb3JtZWQsIGluCisgICAgIHdoaWNoIGNhc2UgdGhlIGZpbmlzaCBob29rIGlzIGNhbGxlZCBpbW1lZGlhdGVseS4gICovCisgIGJvb2wgKCppbml0KSAodm9pZCk7CisKKyAgLyogQ2FsbGVkIGF0IHRoZSBlbmQgb2YgY29tcGlsYXRpb24sIGFzIGEgZmluYWxpemVyLiAgKi8KKyAgdm9pZCAoKmZpbmlzaCkgKHZvaWQpOworCisgIC8qIFBhcnNlcyB0aGUgZW50aXJlIGZpbGUuICBUaGUgYXJndW1lbnQgaXMgbm9uemVybyB0byBjYXVzZSBiaXNvbgorICAgICBwYXJzZXJzIHRvIGR1bXAgZGVidWdnaW5nIGluZm9ybWF0aW9uIGR1cmluZyBwYXJzaW5nLiAgKi8KKyAgdm9pZCAoKnBhcnNlX2ZpbGUpIChpbnQpOworCisgIC8qIERldGVybWluZXMgaWYgaXQncyBvayBmb3IgYSBmdW5jdGlvbiB0byBoYXZlIG5vIG5vcmV0dXJuIGF0dHJpYnV0ZS4gICovCisgIGJvb2wgKCptaXNzaW5nX25vcmV0dXJuX29rX3ApICh0cmVlKTsKKworICAvKiBDYWxsZWQgdG8gb2J0YWluIHRoZSBhbGlhcyBzZXQgdG8gYmUgdXNlZCBmb3IgYW4gZXhwcmVzc2lvbiBvciB0eXBlLgorICAgICBSZXR1cm5zIC0xIGlmIHRoZSBsYW5ndWFnZSBkb2VzIG5vdGhpbmcgc3BlY2lhbCBmb3IgaXQuICAqLworICBhbGlhc19zZXRfdHlwZSAoKmdldF9hbGlhc19zZXQpICh0cmVlKTsKKworICAvKiBGdW5jdGlvbiB0byBmaW5pc2ggaGFuZGxpbmcgYW4gaW5jb21wbGV0ZSBkZWNsIGF0IHRoZSBlbmQgb2YKKyAgICAgY29tcGlsYXRpb24uICBEZWZhdWx0IGhvb2sgaXMgZG9lcyBub3RoaW5nLiAgKi8KKyAgdm9pZCAoKmZpbmlzaF9pbmNvbXBsZXRlX2RlY2wpICh0cmVlKTsKKworICAvKiBSZXBsYWNlIHRoZSBERUNMX0xBTkdfU1BFQ0lGSUMgZGF0YSwgd2hpY2ggbWF5IGJlIE5VTEwsIG9mIHRoZQorICAgICBERUNMX05PREUgd2l0aCBhIG5ld2x5IEdDLWFsbG9jYXRlZCBjb3B5LiAgKi8KKyAgdm9pZCAoKmR1cF9sYW5nX3NwZWNpZmljX2RlY2wpICh0cmVlKTsKKworICAvKiBTZXQgdGhlIERFQ0xfQVNTRU1CTEVSX05BTUUgZm9yIGEgbm9kZS4gIElmIGl0IGlzIHRoZSBzb3J0IG9mCisgICAgIHRoaW5nIHRoYXQgdGhlIGFzc2VtYmxlciBzaG91bGQgdGFsayBhYm91dCwgc2V0CisgICAgIERFQ0xfQVNTRU1CTEVSX05BTUUgdG8gYW4gYXBwcm9wcmlhdGUgSURFTlRJRklFUl9OT0RFLgorICAgICBPdGhlcndpc2UsIHNldCBpdCB0byB0aGUgRVJST1JfTUFSS19OT0RFIHRvIGVuc3VyZSB0aGF0IHRoZQorICAgICBhc3NlbWJsZXIgZG9lcyBub3QgdGFsayBhYm91dCBpdC4gICovCisgIHZvaWQgKCpzZXRfZGVjbF9hc3NlbWJsZXJfbmFtZSkgKHRyZWUpOworCisgIC8qIFRoZSBmcm9udCBlbmQgY2FuIGFkZCBpdHMgb3duIHN0YXRpc3RpY3MgdG8gLWZtZW0tcmVwb3J0IHdpdGgKKyAgICAgdGhpcyBob29rLiAgSXQgc2hvdWxkIG91dHB1dCB0byBzdGRlcnIuICAqLworICB2b2lkICgqcHJpbnRfc3RhdGlzdGljcykgKHZvaWQpOworCisgIC8qIENhbGxlZCBieSBwcmludF90cmVlIHdoZW4gdGhlcmUgaXMgYSB0cmVlIG9mIGNsYXNzIHRjY19leGNlcHRpb25hbAorICAgICB0aGF0IGl0IGRvZXNuJ3Qga25vdyBob3cgdG8gZGlzcGxheS4gICovCisgIGxhbmdfcHJpbnRfdHJlZV9ob29rIHByaW50X3hub2RlOworCisgIC8qIENhbGxlZCB0byBwcmludCBsYW5ndWFnZS1kZXBlbmRlbnQgcGFydHMgb2YgdGNjX2RlY2wsIHRjY190eXBlLAorICAgICBhbmQgSURFTlRJRklFUl9OT0RFIG5vZGVzLiAgKi8KKyAgbGFuZ19wcmludF90cmVlX2hvb2sgcHJpbnRfZGVjbDsKKyAgbGFuZ19wcmludF90cmVlX2hvb2sgcHJpbnRfdHlwZTsKKyAgbGFuZ19wcmludF90cmVlX2hvb2sgcHJpbnRfaWRlbnRpZmllcjsKKworICAvKiBDb21wdXRlcyB0aGUgbmFtZSB0byB1c2UgdG8gcHJpbnQgYSBkZWNsYXJhdGlvbi4gIERFQ0wgaXMgdGhlCisgICAgIG5vbi1OVUxMIGRlY2xhcmF0aW9uIGluIHF1ZXN0aW9uLiAgVkVSQk9TSVRZIGRldGVybWluZXMgd2hhdAorICAgICBpbmZvcm1hdGlvbiB3aWxsIGJlIHByaW50ZWQ6IDA6IERFQ0xfTkFNRSwgZGVtYW5nbGVkIGFzCisgICAgIG5lY2Vzc2FyeS4gIDE6IGFuZCBzY29wZSBpbmZvcm1hdGlvbi4gIDI6IGFuZCBhbnkgb3RoZXIKKyAgICAgaW5mb3JtYXRpb24gdGhhdCBtaWdodCBiZSBpbnRlcmVzdGluZywgc3VjaCBhcyBmdW5jdGlvbiBwYXJhbWV0ZXIKKyAgICAgdHlwZXMgaW4gQysrLiAgVGhlIG5hbWUgaXMgaW4gdGhlIGludGVybmFsIGNoYXJhY3RlciBzZXQgYW5kCisgICAgIG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byB0aGUgbG9jYWxlIGNoYXJhY3RlciBzZXQgb2YgZGlhZ25vc3RpY3MsCisgICAgIG9yIHRvIHRoZSBleGVjdXRpb24gY2hhcmFjdGVyIHNldCBmb3Igc3RyaW5ncyBzdWNoIGFzCisgICAgIF9fUFJFVFRZX0ZVTkNUSU9OX18uICAqLworICBjb25zdCBjaGFyICooKmRlY2xfcHJpbnRhYmxlX25hbWUpICh0cmVlIGRlY2wsIGludCB2ZXJib3NpdHkpOworCisgIC8qIENvbXB1dGVzIHRoZSBkd2FyZi0yLzMgbmFtZSBmb3IgYSB0cmVlLiAgVkVSQk9TSVRZIGRldGVybWluZXMgd2hhdAorICAgICBpbmZvcm1hdGlvbiB3aWxsIGJlIHByaW50ZWQ6IDA6IERFQ0xfTkFNRSwgZGVtYW5nbGVkIGFzCisgICAgIG5lY2Vzc2FyeS4gIDE6IGFuZCBzY29wZSBpbmZvcm1hdGlvbi4gICovCisgIGNvbnN0IGNoYXIgKigqZHdhcmZfbmFtZSkgKHRyZWUsIGludCB2ZXJib3NpdHkpOworCisgIC8qIFRoaXMgY29tcGFyZXMgdHdvIHR5cGVzIGZvciBlcXVpdmFsZW5jZSAoImNvbXBhdGlibGUiIGluIEMtYmFzZWQgbGFuZ3VhZ2VzKS4KKyAgICAgVGhpcyByb3V0aW5lIHNob3VsZCBvbmx5IHJldHVybiAxIGlmIGl0IGlzIHN1cmUuICBJdCBzaG91bGQgbm90IGJlIHVzZWQKKyAgICAgaW4gY29udGV4dHMgd2hlcmUgZXJyb25lb3VzbHkgcmV0dXJuaW5nIDAgY2F1c2VzIHByb2JsZW1zLiAgKi8KKyAgaW50ICgqdHlwZXNfY29tcGF0aWJsZV9wKSAodHJlZSB4LCB0cmVlIHkpOworCisgIC8qIENhbGxlZCBieSByZXBvcnRfZXJyb3JfZnVuY3Rpb24gdG8gcHJpbnQgb3V0IGZ1bmN0aW9uIG5hbWUuICAqLworICB2b2lkICgqcHJpbnRfZXJyb3JfZnVuY3Rpb24pIChzdHJ1Y3QgZGlhZ25vc3RpY19jb250ZXh0ICosIGNvbnN0IGNoYXIgKiwKKwkJCQlzdHJ1Y3QgZGlhZ25vc3RpY19pbmZvICopOworCisgIC8qIENvbnZlcnQgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgaG9zdCdzIHRvIHRoZSB0YXJnZXQncyBjaGFyYWN0ZXIKKyAgICAgc2V0LiAgVGhlIGNoYXJhY3RlciBzaG91bGQgYmUgaW4gd2hhdCBDIGNhbGxzIHRoZSAiYmFzaWMgc291cmNlCisgICAgIGNoYXJhY3RlciBzZXQiIChyb3VnaGx5LCB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgZGVmaW5lZCBieSBwbGFpbgorICAgICBvbGQgQVNDSUkpLiAgVGhlIGRlZmF1bHQgaXMgdG8gcmV0dXJuIHRoZSBjaGFyYWN0ZXIgdW5jaGFuZ2VkLAorICAgICB3aGljaCBpcyBjb3JyZWN0IGluIG1vc3QgY2lyY3Vtc3RhbmNlcy4gIE5vdGUgdGhhdCBib3RoIGFyZ3VtZW50CisgICAgIGFuZCByZXN1bHQgc2hvdWxkIGJlIHNpZ24tZXh0ZW5kZWQgdW5kZXIgLWZzaWduZWQtY2hhciwKKyAgICAgemVyby1leHRlbmRlZCB1bmRlciAtZm5vLXNpZ25lZC1jaGFyLiAgKi8KKyAgSE9TVF9XSURFX0lOVCAoKnRvX3RhcmdldF9jaGFyc2V0KSAoSE9TVF9XSURFX0lOVCk7CisKKyAgLyogUG9pbnRlcnMgdG8gbWFjaGluZS1pbmRlcGVuZGVudCBhdHRyaWJ1dGUgdGFibGVzLCBmb3IgZnJvbnQgZW5kcworICAgICB1c2luZyBhdHRyaWJzLmMuICBJZiBvbmUgaXMgTlVMTCwgaXQgaXMgaWdub3JlZC4gIFJlc3BlY3RpdmVseSwgYQorICAgICB0YWJsZSBvZiBhdHRyaWJ1dGVzIHNwZWNpZmljIHRvIHRoZSBsYW5ndWFnZSwgYSB0YWJsZSBvZgorICAgICBhdHRyaWJ1dGVzIGNvbW1vbiB0byB0d28gb3IgbW9yZSBsYW5ndWFnZXMgKHRvIGFsbG93IGVhc3kKKyAgICAgc2hhcmluZyksIGFuZCBhIHRhYmxlIG9mIGF0dHJpYnV0ZXMgZm9yIGNoZWNraW5nIGZvcm1hdHMuICAqLworICBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMgKmF0dHJpYnV0ZV90YWJsZTsKKyAgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9zcGVjICpjb21tb25fYXR0cmlidXRlX3RhYmxlOworICBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMgKmZvcm1hdF9hdHRyaWJ1dGVfdGFibGU7CisKKyAgc3RydWN0IGxhbmdfaG9va3NfZm9yX3RyZWVfaW5saW5pbmcgdHJlZV9pbmxpbmluZzsKKworICBzdHJ1Y3QgbGFuZ19ob29rc19mb3JfY2FsbGdyYXBoIGNhbGxncmFwaDsKKworICBzdHJ1Y3QgbGFuZ19ob29rc19mb3JfdHJlZV9kdW1wIHRyZWVfZHVtcDsKKworICBzdHJ1Y3QgbGFuZ19ob29rc19mb3JfZGVjbHMgZGVjbHM7CisKKyAgc3RydWN0IGxhbmdfaG9va3NfZm9yX3R5cGVzIHR5cGVzOworCisgIHN0cnVjdCBsYW5nX2hvb2tzX2Zvcl9sdG8gbHRvOworCisgIC8qIFJldHVybnMgdGhlIGdlbmVyaWMgcGFyYW1ldGVycyBvZiBhbiBpbnN0YW50aWF0aW9uIG9mCisgICAgIGEgZ2VuZXJpYyB0eXBlIG9yIGRlY2wsIGUuZy4gQysrIHRlbXBsYXRlIGluc3RhbnRpYXRpb24uICAqLworICB0cmVlICgqZ2V0X2lubmVybW9zdF9nZW5lcmljX3Bhcm1zKSAoY29uc3RfdHJlZSk7CisKKyAgLyogUmV0dXJucyB0aGUgVFJFRV9WRUMgb2YgYXJndW1lbnRzIG9mIGFuIGluc3RhbnRpYXRpb24KKyAgICAgb2YgYSBnZW5lcmljIHR5cGUgb2YgZGVjbCwgZS5nLiBDKysgdGVtcGxhdGUgaW5zdGFudGlhdGlvbi4gICovCisgIHRyZWUgKCpnZXRfaW5uZXJtb3N0X2dlbmVyaWNfYXJncykgKGNvbnN0X3RyZWUpOworCisgIC8qIERldGVybWluZSBpZiBhIHRyZWUgaXMgYSBmdW5jdGlvbiBwYXJhbWV0ZXIgcGFjay4gICovCisgIGJvb2wgKCpmdW5jdGlvbl9wYXJhbWV0ZXJfcGFja19wKSAoY29uc3RfdHJlZSk7CisKKyAgLyogUGVyZm9ybSBsYW5ndWFnZS1zcGVjaWZpYyBnaW1wbGlmaWNhdGlvbiBvbiB0aGUgYXJndW1lbnQuICBSZXR1cm5zIGFuCisgICAgIGVudW0gZ2ltcGxpZnlfc3RhdHVzLCB0aG91Z2ggd2UgY2FuJ3Qgc2VlIHRoYXQgdHlwZSBoZXJlLiAgKi8KKyAgaW50ICgqZ2ltcGxpZnlfZXhwcikgKHRyZWUgKiwgZ2ltcGxlX3NlcSAqLCBnaW1wbGVfc2VxICopOworCisgIC8qIEZvbGQgYW4gT0JKX1RZUEVfUkVGIGV4cHJlc3Npb24gdG8gdGhlIGFkZHJlc3Mgb2YgYSBmdW5jdGlvbi4KKyAgICAgS05PV05fVFlQRSBjYXJyaWVzIHRoZSB0cnVlIHR5cGUgb2YgdGhlIE9CSl9UWVBFX1JFRl9PQkpFQ1QuICAqLworICB0cmVlICgqZm9sZF9vYmpfdHlwZV9yZWYpICh0cmVlLCB0cmVlKTsKKworICAvKiBEbyBsYW5ndWFnZSBzcGVjaWZpYyBwcm9jZXNzaW5nIGluIHRoZSBidWlsdGluIGZ1bmN0aW9uIERFQ0wgICovCisgIHRyZWUgKCpidWlsdGluX2Z1bmN0aW9uKSAodHJlZSBkZWNsKTsKKworICAvKiBMaWtlIGJ1aWx0aW5fZnVuY3Rpb24sIGJ1dCBtYWtlIHN1cmUgdGhlIHNjb3BlIGlzIHRoZSBleHRlcm5hbCBzY29wZS4KKyAgICAgVGhpcyBpcyB1c2VkIHRvIGRlbGF5IHB1dHRpbmcgaW4gYmFjayBlbmQgYnVpbHRpbiBmdW5jdGlvbnMgdW50aWwgdGhlIElTQQorICAgICB0aGF0IGRlZmluZXMgdGhlIGJ1aWx0aW4gaXMgZGVjbGFyZWQgdmlhIGZ1bmN0aW9uIHNwZWNpZmljIHRhcmdldCBvcHRpb25zLAorICAgICB3aGljaCBjYW4gc2F2ZSBtZW1vcnkgZm9yIG1hY2hpbmVzIGxpa2UgdGhlIHg4Nl82NCB0aGF0IGhhdmUgbXVsdGlwbGUKKyAgICAgSVNBcy4gIElmIHRoaXMgcG9pbnRzIHRvIHRoZSBzYW1lIGZ1bmN0aW9uIGFzIGJ1aWx0aW5fZnVuY3Rpb24sIHRoZQorICAgICBiYWNrZW5kIG11c3QgYWRkIGFsbCBvZiB0aGUgYnVpbHRpbnMgYXQgcHJvZ3JhbSBpbml0aWFsaXphdGlvbiB0aW1lLiAgKi8KKyAgdHJlZSAoKmJ1aWx0aW5fZnVuY3Rpb25fZXh0X3Njb3BlKSAodHJlZSBkZWNsKTsKKworICAvKiBVc2VkIHRvIHNldCB1cCB0aGUgdHJlZV9jb250YWluc19zdHJ1Y3R1cmUgYXJyYXkgZm9yIGEgZnJvbnRlbmQuICovCisgIHZvaWQgKCppbml0X3RzKSAodm9pZCk7CisKKyAgLyogQ2FsbGVkIGJ5IHJlY29tcHV0ZV90cmVlX2ludmFyaWFudF9mb3JfYWRkcl9leHByIHRvIGdvIGZyb20gRVhQUgorICAgICB0byBhIGNvbnRhaW5lZCBleHByZXNzaW9uIG9yIERFQ0wsIHBvc3NpYmx5IHVwZGF0aW5nICpUQyBvciAqU0UKKyAgICAgaWYgaW4gdGhlIHByb2Nlc3MgVFJFRV9DT05TVEFOVCBvciBUUkVFX1NJREVfRUZGRUNUUyBuZWVkIHVwZGF0aW5nLiAgKi8KKyAgdHJlZSAoKmV4cHJfdG9fZGVjbCkgKHRyZWUgZXhwciwgYm9vbCAqdGMsIGJvb2wgKnNlKTsKKworICAvKiBUaGUgRUggcGVyc29uYWxpdHkgZnVuY3Rpb24gZGVjbC4gICovCisgIHRyZWUgKCplaF9wZXJzb25hbGl0eSkgKHZvaWQpOworCisgIC8qIE1hcCBhIHR5cGUgdG8gYSBydW50aW1lIG9iamVjdCB0byBtYXRjaCB0eXBlLiAgKi8KKyAgdHJlZSAoKmVoX3J1bnRpbWVfdHlwZSkgKHRyZWUpOworCisgIC8qIFRydWUgaWYgdGhpcyBsYW5ndWFnZSB1c2VzIF9fY3hhX2VuZF9jbGVhbnVwIHdoZW4gdGhlIEFSTSBFQUJJCisgICAgIGlzIGVuYWJsZWQuICAqLworICBib29sIGVoX3VzZV9jeGFfZW5kX2NsZWFudXA7CisKKyAgLyogV2hlbmV2ZXIgeW91IGFkZCBlbnRyaWVzIGhlcmUsIG1ha2Ugc3VyZSB5b3UgYWRqdXN0IGxhbmdob29rcy1kZWYuaAorICAgICBhbmQgbGFuZ2hvb2tzLmMgYWNjb3JkaW5nbHkuICAqLworfTsKKworLyogRWFjaCBmcm9udCBlbmQgcHJvdmlkZXMgaXRzIG93bi4gICovCitleHRlcm4gc3RydWN0IGxhbmdfaG9va3MgbGFuZ19ob29rczsKK2V4dGVybiB0cmVlIGFkZF9idWlsdGluX2Z1bmN0aW9uIChjb25zdCBjaGFyICpuYW1lLCB0cmVlIHR5cGUsCisJCQkJICBpbnQgZnVuY3Rpb25fY29kZSwgZW51bSBidWlsdF9pbl9jbGFzcyBjbCwKKwkJCQkgIGNvbnN0IGNoYXIgKmxpYnJhcnlfbmFtZSwKKwkJCQkgIHRyZWUgYXR0cnMpOworCitleHRlcm4gdHJlZSBhZGRfYnVpbHRpbl9mdW5jdGlvbl9leHRfc2NvcGUgKGNvbnN0IGNoYXIgKm5hbWUsIHRyZWUgdHlwZSwKKwkJCQkJICAgIGludCBmdW5jdGlvbl9jb2RlLAorCQkJCQkgICAgZW51bSBidWlsdF9pbl9jbGFzcyBjbCwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKmxpYnJhcnlfbmFtZSwKKwkJCQkJICAgIHRyZWUgYXR0cnMpOworCisjZW5kaWYgLyogR0NDX0xBTkdfSE9PS1NfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2xpYmliZXJ0eS5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2xpYmliZXJ0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NzE2ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvbGliaWJlcnR5LmgKQEAgLTAsMCArMSw2NjUgQEAKKy8qIEZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBmb3IgbGliaWJlcnR5LgorCisgICBDb3B5cmlnaHQgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwKKyAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAKKyAgIE5vdGUgLSBjZXJ0YWluIHByb3RvdHlwZXMgZGVjbGFyZWQgaW4gdGhpcyBoZWFkZXIgZmlsZSBhcmUgZm9yCisgICBmdW5jdGlvbnMgd2hvZXMgaW1wbGVtZW50YXRpb24gY29weXJpZ2h0IGRvZXMgbm90IGJlbG9uZyB0byB0aGUKKyAgIEZTRi4gIFRob3NlIHByb3RvdHlwZXMgYXJlIHByZXNlbnQgaW4gdGhpcyBmaWxlIGZvciByZWZlcmVuY2UKKyAgIHB1cnBvc2VzIG9ubHkgYW5kIHRoZWlyIHByZXNlbmNlIGluIHRoaXMgZmlsZSBzaG91bGQgbm90IGNvbnN0cnVlZAorICAgYXMgYW4gaW5kaWNhdGlvbiBvZiBvd25lcnNoaXAgYnkgdGhlIEZTRiBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YKKyAgIHRob3NlIGZ1bmN0aW9ucyBpbiBhbnkgd2F5IG9yIGZvcm0gd2hhdHNvZXZlci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQgLSBGaWZ0aCBGbG9vciwKKyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICAgCisgICBXcml0dGVuIGJ5IEN5Z251cyBTdXBwb3J0LCAxOTk0LgorCisgICBUaGUgbGliaWJlcnR5IGxpYnJhcnkgcHJvdmlkZXMgYSBudW1iZXIgb2YgZnVuY3Rpb25zIHdoaWNoIGFyZQorICAgbWlzc2luZyBvbiBzb21lIG9wZXJhdGluZyBzeXN0ZW1zLiAgV2UgZG8gbm90IGRlY2xhcmUgdGhvc2UgaGVyZSwKKyAgIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIHRoZSBzeXN0ZW0gaGVhZGVyIGZpbGVzIG9uIG9wZXJhdGluZworICAgc3lzdGVtcyB0aGF0IGRvIHN1cHBvcnQgdGhvc2UgZnVuY3Rpb25zLiAgSW4gdGhpcyBmaWxlIHdlIG9ubHkKKyAgIGRlY2xhcmUgdGhvc2UgZnVuY3Rpb25zIHdoaWNoIGFyZSBzcGVjaWZpYyB0byBsaWJpYmVydHkuICAqLworCisjaWZuZGVmIExJQklCRVJUWV9ICisjZGVmaW5lIExJQklCRVJUWV9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgImFuc2lkZWNsLmgiCisKKy8qIEdldCBhIGRlZmluaXRpb24gZm9yIHNpemVfdC4gICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisvKiBHZXQgYSBkZWZpbml0aW9uIGZvciB2YV9saXN0LiAgKi8KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8qIElmIHRoZSBPUyBzdXBwb3J0cyBpdCwgZW5zdXJlIHRoYXQgdGhlIHN1cHBsaWVkIHN0cmVhbSBpcyBzZXR1cCB0bworICAgYXZvaWQgYW55IG11bHRpLXRocmVhZGVkIGxvY2tpbmcuICBPdGhlcndpc2UgbGVhdmUgdGhlIEZJTEUgcG9pbnRlcgorICAgdW5jaGFuZ2VkLiAgSWYgdGhlIHN0cmVhbSBpcyBOVUxMIGRvIG5vdGhpbmcuICAqLworCitleHRlcm4gdm9pZCB1bmxvY2tfc3RyZWFtIChGSUxFICopOworCisvKiBJZiB0aGUgT1Mgc3VwcG9ydHMgaXQsIGVuc3VyZSB0aGF0IHRoZSBzdGFuZGFyZCBJL08gc3RyZWFtcywgc3RkaW4sCisgICBzdGRvdXQgYW5kIHN0ZGVyciBhcmUgc2V0dXAgdG8gYXZvaWQgYW55IG11bHRpLXRocmVhZGVkIGxvY2tpbmcuCisgICBPdGhlcndpc2UgZG8gbm90aGluZy4gICovCisKK2V4dGVybiB2b2lkIHVubG9ja19zdGRfc3RyZWFtcyAodm9pZCk7CisKKy8qIE9wZW4gYW5kIHJldHVybiBhIEZJTEUgcG9pbnRlci4gIElmIHRoZSBPUyBzdXBwb3J0cyBpdCwgZW5zdXJlIHRoYXQKKyAgIHRoZSBzdHJlYW0gaXMgc2V0dXAgdG8gYXZvaWQgYW55IG11bHRpLXRocmVhZGVkIGxvY2tpbmcuICBPdGhlcndpc2UKKyAgIHJldHVybiB0aGUgRklMRSBwb2ludGVyIHVuY2hhbmdlZC4gICovCisKK2V4dGVybiBGSUxFICpmb3Blbl91bmxvY2tlZCAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIEZJTEUgKmZkb3Blbl91bmxvY2tlZCAoaW50LCBjb25zdCBjaGFyICopOworZXh0ZXJuIEZJTEUgKmZyZW9wZW5fdW5sb2NrZWQgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBGSUxFICopOworCisvKiBCdWlsZCBhbiBhcmd1bWVudCB2ZWN0b3IgZnJvbSBhIHN0cmluZy4gIEFsbG9jYXRlcyBtZW1vcnkgdXNpbmcKKyAgIG1hbGxvYy4gIFVzZSBmcmVlYXJndiB0byBmcmVlIHRoZSB2ZWN0b3IuICAqLworCitleHRlcm4gY2hhciAqKmJ1aWxkYXJndiAoY29uc3QgY2hhciAqKSBBVFRSSUJVVEVfTUFMTE9DOworCisvKiBGcmVlIGEgdmVjdG9yIHJldHVybmVkIGJ5IGJ1aWxkYXJndi4gICovCisKK2V4dGVybiB2b2lkIGZyZWVhcmd2IChjaGFyICoqKTsKKworLyogRHVwbGljYXRlIGFuIGFyZ3VtZW50IHZlY3Rvci4gQWxsb2NhdGVzIG1lbW9yeSB1c2luZyBtYWxsb2MuICBVc2UKKyAgIGZyZWVhcmd2IHRvIGZyZWUgdGhlIHZlY3Rvci4gICovCisKK2V4dGVybiBjaGFyICoqZHVwYXJndiAoY2hhciAqKikgQVRUUklCVVRFX01BTExPQzsKKworLyogRXhwYW5kICJAZmlsZSIgYXJndW1lbnRzIGluIGFyZ3YuICAqLworCitleHRlcm4gdm9pZCBleHBhbmRhcmd2IFBBUkFNUyAoKGludCAqLCBjaGFyICoqKikpOworCisvKiBXcml0ZSBhcmd2IHRvIGFuIEAtZmlsZSwgaW5zZXJ0aW5nIG5lY2Vzc2FyeSBxdW90aW5nLiAgKi8KKworZXh0ZXJuIGludCB3cml0ZWFyZ3YgUEFSQU1TICgoY2hhciAqKiwgRklMRSAqKSk7CisKKy8qIFJldHVybiB0aGUgbGFzdCBjb21wb25lbnQgb2YgYSBwYXRoIG5hbWUuICBOb3RlIHRoYXQgd2UgY2FuJ3QgdXNlIGEKKyAgIHByb3RvdHlwZSBoZXJlIGJlY2F1c2UgdGhlIHBhcmFtZXRlciBpcyBkZWNsYXJlZCBpbmNvbnNpc3RlbnRseQorICAgYWNyb3NzIGRpZmZlcmVudCBzeXN0ZW1zLCBzb21ldGltZXMgYXMgImNoYXIgKiIgYW5kIHNvbWV0aW1lcyBhcworICAgImNvbnN0IGNoYXIgKiIgKi8KKworLyogSEFWRV9ERUNMXyogaXMgYSB0aHJlZS1zdGF0ZSBtYWNybzogdW5kZWZpbmVkLCAwIG9yIDEuICBJZiBpdCBpcworICAgdW5kZWZpbmVkLCB3ZSBoYXZlbid0IHJ1biB0aGUgYXV0b2NvbmYgY2hlY2sgc28gcHJvdmlkZSB0aGUKKyAgIGRlY2xhcmF0aW9uIHdpdGhvdXQgYXJndW1lbnRzLiAgSWYgaXQgaXMgMCwgd2UgY2hlY2tlZCBhbmQgZmFpbGVkCisgICB0byBmaW5kIHRoZSBkZWNsYXJhdGlvbiBzbyBwcm92aWRlIGEgZnVsbHkgcHJvdG90eXBlZCBvbmUuICBJZiBpdAorICAgaXMgMSwgd2UgZm91bmQgaXQgc28gZG9uJ3QgcHJvdmlkZSBhbnkgZGVjbGFyYXRpb24gYXQgYWxsLiAgKi8KKyNpZiAhSEFWRV9ERUNMX0JBU0VOQU1FCisjaWYgZGVmaW5lZCAoX19HTlVfTElCUkFSWV9fICkgfHwgZGVmaW5lZCAoX19saW51eF9fKSB8fCBkZWZpbmVkIChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZCAoX19PcGVuQlNEX18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykgfHwgZGVmaW5lZCAoX19DWUdXSU5fXykgfHwgZGVmaW5lZCAoX19DWUdXSU4zMl9fKSB8fCBkZWZpbmVkIChfX01JTkdXMzJfXykgfHwgZGVmaW5lZCAoSEFWRV9ERUNMX0JBU0VOQU1FKQorZXh0ZXJuIGNoYXIgKmJhc2VuYW1lIChjb25zdCBjaGFyICopOworI2Vsc2UKKy8qIERvIG5vdCBhbGxvdyBiYXNlbmFtZSB0byBiZSB1c2VkIGlmIHRoZXJlIGlzIG5vIHByb3RvdHlwZSBzZWVuLiAgV2UKKyAgIGVpdGhlciBuZWVkIHRvIHVzZSB0aGUgYWJvdmUgcHJvdG90eXBlIG9yIGhhdmUgb25lIGZyb20KKyAgIGF1dG9jb25mIHdoaWNoIHdvdWxkIHJlc3VsdCBpbiBIQVZFX0RFQ0xfQkFTRU5BTUUgYmVpbmcgc2V0LiAgKi8KKyNkZWZpbmUgYmFzZW5hbWUgYmFzZW5hbWVfY2Fubm90X2JlX3VzZWRfd2l0aG91dF9hX3Byb3RvdHlwZQorI2VuZGlmCisjZW5kaWYKKworLyogQSB3ZWxsLWRlZmluZWQgYmFzZW5hbWUgKCkgdGhhdCBpcyBhbHdheXMgY29tcGlsZWQgaW4uICAqLworCitleHRlcm4gY29uc3QgY2hhciAqbGJhc2VuYW1lIChjb25zdCBjaGFyICopOworCisvKiBBIHdlbGwtZGVmaW5lZCByZWFscGF0aCAoKSB0aGF0IGlzIGFsd2F5cyBjb21waWxlZCBpbi4gICovCisKK2V4dGVybiBjaGFyICpscmVhbHBhdGggKGNvbnN0IGNoYXIgKik7CisKKy8qIENvbmNhdGVuYXRlIGFuIGFyYml0cmFyeSBudW1iZXIgb2Ygc3RyaW5ncy4gIFlvdSBtdXN0IHBhc3MgTlVMTCBhcworICAgdGhlIGxhc3QgYXJndW1lbnQgb2YgdGhpcyBmdW5jdGlvbiwgdG8gdGVybWluYXRlIHRoZSBsaXN0IG9mCisgICBzdHJpbmdzLiAgQWxsb2NhdGVzIG1lbW9yeSB1c2luZyB4bWFsbG9jLiAgKi8KKworZXh0ZXJuIGNoYXIgKmNvbmNhdCAoY29uc3QgY2hhciAqLCAuLi4pIEFUVFJJQlVURV9NQUxMT0MgQVRUUklCVVRFX1NFTlRJTkVMOworCisvKiBDb25jYXRlbmF0ZSBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIHN0cmluZ3MuICBZb3UgbXVzdCBwYXNzIE5VTEwgYXMKKyAgIHRoZSBsYXN0IGFyZ3VtZW50IG9mIHRoaXMgZnVuY3Rpb24sIHRvIHRlcm1pbmF0ZSB0aGUgbGlzdCBvZgorICAgc3RyaW5ncy4gIEFsbG9jYXRlcyBtZW1vcnkgdXNpbmcgeG1hbGxvYy4gIFRoZSBmaXJzdCBhcmd1bWVudCBpcworICAgbm90IG9uZSBvZiB0aGUgc3RyaW5ncyB0byBiZSBjb25jYXRlbmF0ZWQsIGJ1dCBpZiBub3QgTlVMTCBpcyBhCisgICBwb2ludGVyIHRvIGJlIGZyZWVkIGFmdGVyIHRoZSBuZXcgc3RyaW5nIGlzIGNyZWF0ZWQsIHNpbWlsYXIgdG8gdGhlCisgICB3YXkgeHJlYWxsb2Mgd29ya3MuICAqLworCitleHRlcm4gY2hhciAqcmVjb25jYXQgKGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pIEFUVFJJQlVURV9NQUxMT0MgQVRUUklCVVRFX1NFTlRJTkVMOworCisvKiBEZXRlcm1pbmUgdGhlIGxlbmd0aCBvZiBjb25jYXRlbmF0aW5nIGFuIGFyYml0cmFyeSBudW1iZXIgb2YKKyAgIHN0cmluZ3MuICBZb3UgbXVzdCBwYXNzIE5VTEwgYXMgdGhlIGxhc3QgYXJndW1lbnQgb2YgdGhpcyBmdW5jdGlvbiwKKyAgIHRvIHRlcm1pbmF0ZSB0aGUgbGlzdCBvZiBzdHJpbmdzLiAgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY29uY2F0X2xlbmd0aCAoY29uc3QgY2hhciAqLCAuLi4pIEFUVFJJQlVURV9TRU5USU5FTDsKKworLyogQ29uY2F0ZW5hdGUgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBzdHJpbmdzIGludG8gYSBTVVBQTElFRCBhcmVhIG9mCisgICBtZW1vcnkuICBZb3UgbXVzdCBwYXNzIE5VTEwgYXMgdGhlIGxhc3QgYXJndW1lbnQgb2YgdGhpcyBmdW5jdGlvbiwKKyAgIHRvIHRlcm1pbmF0ZSB0aGUgbGlzdCBvZiBzdHJpbmdzLiAgVGhlIHN1cHBsaWVkIG1lbW9yeSBpcyBhc3N1bWVkCisgICB0byBiZSBsYXJnZSBlbm91Z2guICAqLworCitleHRlcm4gY2hhciAqY29uY2F0X2NvcHkgKGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pIEFUVFJJQlVURV9TRU5USU5FTDsKKworLyogQ29uY2F0ZW5hdGUgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBzdHJpbmdzIGludG8gYSBHTE9CQUwgYXJlYSBvZgorICAgbWVtb3J5LiAgWW91IG11c3QgcGFzcyBOVUxMIGFzIHRoZSBsYXN0IGFyZ3VtZW50IG9mIHRoaXMgZnVuY3Rpb24sCisgICB0byB0ZXJtaW5hdGUgdGhlIGxpc3Qgb2Ygc3RyaW5ncy4gIFRoZSBzdXBwbGllZCBtZW1vcnkgaXMgYXNzdW1lZAorICAgdG8gYmUgbGFyZ2UgZW5vdWdoLiAgKi8KKworZXh0ZXJuIGNoYXIgKmNvbmNhdF9jb3B5MiAoY29uc3QgY2hhciAqLCAuLi4pIEFUVFJJQlVURV9TRU5USU5FTDsKKworLyogVGhpcyBpcyB0aGUgZ2xvYmFsIGFyZWEgdXNlZCBieSBjb25jYXRfY29weTIuICAqLworCitleHRlcm4gY2hhciAqbGliaWJlcnR5X2NvbmNhdF9wdHI7CisKKy8qIENvbmNhdGVuYXRlIGFuIGFyYml0cmFyeSBudW1iZXIgb2Ygc3RyaW5ncy4gIFlvdSBtdXN0IHBhc3MgTlVMTCBhcworICAgdGhlIGxhc3QgYXJndW1lbnQgb2YgdGhpcyBmdW5jdGlvbiwgdG8gdGVybWluYXRlIHRoZSBsaXN0IG9mCisgICBzdHJpbmdzLiAgQWxsb2NhdGVzIG1lbW9yeSB1c2luZyBhbGxvY2EuICBUaGUgYXJndW1lbnRzIGFyZQorICAgZXZhbHVhdGVkIHR3aWNlISAgKi8KKyNkZWZpbmUgQUNPTkNBVChBQ09OQ0FUX1BBUkFNUykgXAorICAobGliaWJlcnR5X2NvbmNhdF9wdHIgPSAoY2hhciAqKSBhbGxvY2EgKGNvbmNhdF9sZW5ndGggQUNPTkNBVF9QQVJBTVMgKyAxKSwgXAorICAgY29uY2F0X2NvcHkyIEFDT05DQVRfUEFSQU1TKQorCisvKiBDaGVjayB3aGV0aGVyIHR3byBmaWxlIGRlc2NyaXB0b3JzIHJlZmVyIHRvIHRoZSBzYW1lIGZpbGUuICAqLworCitleHRlcm4gaW50IGZkbWF0Y2ggKGludCBmZDEsIGludCBmZDIpOworCisvKiBSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBiaXQgc2V0IGluIHRoZSBhcmd1bWVudC4gICovCisvKiBQcm90b3R5cGVzIHZhcnkgZnJvbSBzeXN0ZW0gdG8gc3lzdGVtLCBzbyB3ZSBvbmx5IHByb3ZpZGUgYQorICAgcHJvdG90eXBlIG9uIHN5c3RlbXMgd2hlcmUgd2Uga25vdyB0aGF0IHdlIG5lZWQgaXQuICAqLworI2lmIGRlZmluZWQgKEhBVkVfREVDTF9GRlMpICYmICFIQVZFX0RFQ0xfRkZTCitleHRlcm4gaW50IGZmcyhpbnQpOworI2VuZGlmCisKKy8qIEdldCB0aGUgd29ya2luZyBkaXJlY3RvcnkuICBUaGUgcmVzdWx0IGlzIGNhY2hlZCwgc28gZG9uJ3QgY2FsbAorICAgY2hkaXIoKSBiZXR3ZWVuIGNhbGxzIHRvIGdldHB3ZCgpLiAgKi8KKworZXh0ZXJuIGNoYXIgKiBnZXRwd2QgKHZvaWQpOworCisvKiBHZXQgdGhlIGN1cnJlbnQgdGltZS4gICovCisvKiBQcm90b3R5cGVzIHZhcnkgZnJvbSBzeXN0ZW0gdG8gc3lzdGVtLCBzbyB3ZSBvbmx5IHByb3ZpZGUgYQorICAgcHJvdG90eXBlIG9uIHN5c3RlbXMgd2hlcmUgd2Uga25vdyB0aGF0IHdlIG5lZWQgaXQuICAqLworI2lmZGVmIF9fTUlOR1czMl9fCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIHRvIGF2b2lkICNpbmNsdWRlIDxzeXMvdGltZS5oPi4gICAqLworc3RydWN0IHRpbWV2YWw7CitleHRlcm4gaW50IGdldHRpbWVvZmRheSAoc3RydWN0IHRpbWV2YWwgKiwgdm9pZCAqKTsgCisjZW5kaWYKKworLyogR2V0IHRoZSBhbW91bnQgb2YgdGltZSB0aGUgcHJvY2VzcyBoYXMgcnVuLCBpbiBtaWNyb3NlY29uZHMuICAqLworCitleHRlcm4gbG9uZyBnZXRfcnVuX3RpbWUgKHZvaWQpOworCisvKiBHZW5lcmF0ZSBhIHJlbG9jYXRlZCBwYXRoIHRvIHNvbWUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4gIEFsbG9jYXRlcworICAgcmV0dXJuIHZhbHVlIHVzaW5nIG1hbGxvYy4gICovCisKK2V4dGVybiBjaGFyICptYWtlX3JlbGF0aXZlX3ByZWZpeCAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKikgQVRUUklCVVRFX01BTExPQzsKKworLyogR2VuZXJhdGUgYSByZWxvY2F0ZWQgcGF0aCB0byBzb21lIGluc3RhbGxhdGlvbiBkaXJlY3Rvcnkgd2l0aG91dAorICAgYXR0ZW1wdGluZyB0byBmb2xsb3cgYW55IHNvZnQgbGlua3MuICBBbGxvY2F0ZXMKKyAgIHJldHVybiB2YWx1ZSB1c2luZyBtYWxsb2MuICAqLworCitleHRlcm4gY2hhciAqbWFrZV9yZWxhdGl2ZV9wcmVmaXhfaWdub3JlX2xpbmtzIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKKwkJCQkJCWNvbnN0IGNoYXIgKikgQVRUUklCVVRFX01BTExPQzsKKworLyogQ2hvb3NlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0byB1c2UgZm9yIHNjcmF0Y2ggZmlsZXMuICAqLworCitleHRlcm4gY2hhciAqY2hvb3NlX3RlbXBfYmFzZSAodm9pZCkgQVRUUklCVVRFX01BTExPQzsKKworLyogUmV0dXJuIGEgdGVtcG9yYXJ5IGZpbGUgbmFtZSBvciBOVUxMIGlmIHVuYWJsZSB0byBjcmVhdGUgb25lLiAgKi8KKworZXh0ZXJuIGNoYXIgKm1ha2VfdGVtcF9maWxlIChjb25zdCBjaGFyICopIEFUVFJJQlVURV9NQUxMT0M7CisKKy8qIFJlbW92ZSBhIGxpbmsgdG8gYSBmaWxlIHVubGVzcyBpdCBpcyBzcGVjaWFsLiAqLworCitleHRlcm4gaW50IHVubGlua19pZl9vcmRpbmFyeSAoY29uc3QgY2hhciAqKTsKKworLyogQWxsb2NhdGUgbWVtb3J5IGZpbGxlZCB3aXRoIHNwYWNlcy4gIEFsbG9jYXRlcyB1c2luZyBtYWxsb2MuICAqLworCitleHRlcm4gY29uc3QgY2hhciAqc3BhY2VzIChpbnQgY291bnQpOworCisvKiBSZXR1cm4gdGhlIG1heGltdW0gZXJyb3IgbnVtYmVyIGZvciB3aGljaCBzdHJlcnJvciB3aWxsIHJldHVybiBhCisgICBzdHJpbmcuICAqLworCitleHRlcm4gaW50IGVycm5vX21heCAodm9pZCk7CisKKy8qIFJldHVybiB0aGUgbmFtZSBvZiBhbiBlcnJubyB2YWx1ZSAoZS5nLiwgc3RyZXJybm8gKEVJTlZBTCkgcmV0dXJucworICAgIkVJTlZBTCIpLiAgKi8KKworZXh0ZXJuIGNvbnN0IGNoYXIgKnN0cmVycm5vIChpbnQpOworCisvKiBHaXZlbiB0aGUgbmFtZSBvZiBhbiBlcnJubyB2YWx1ZSwgcmV0dXJuIHRoZSB2YWx1ZS4gICovCisKK2V4dGVybiBpbnQgc3RydG9lcnJubyAoY29uc3QgY2hhciAqKTsKKworLyogQU5TSSdzIHN0cmVycm9yKCksIGJ1dCBtb3JlIHJvYnVzdC4gICovCisKK2V4dGVybiBjaGFyICp4c3RyZXJyb3IgKGludCk7CisKKy8qIFJldHVybiB0aGUgbWF4aW11bSBzaWduYWwgbnVtYmVyIGZvciB3aGljaCBzdHJzaWduYWwgd2lsbCByZXR1cm4gYQorICAgc3RyaW5nLiAgKi8KKworZXh0ZXJuIGludCBzaWdub19tYXggKHZvaWQpOworCisvKiBSZXR1cm4gYSBzaWduYWwgbWVzc2FnZSBzdHJpbmcgZm9yIGEgc2lnbmFsIG51bWJlcgorICAgKGUuZy4sIHN0cnNpZ25hbCAoU0lHSFVQKSByZXR1cm5zIHNvbWV0aGluZyBsaWtlICJIYW5ndXAiKS4gICovCisvKiBUaGlzIGlzIGNvbW1lbnRlZCBvdXQgYXMgaXQgY2FuIGNvbmZsaWN0IHdpdGggb25lIGluIHN5c3RlbSBoZWFkZXJzLgorICAgV2Ugc3RpbGwgZG9jdW1lbnQgaXRzIGV4aXN0ZW5jZSB0aG91Z2guICAqLworCisvKmV4dGVybiBjb25zdCBjaGFyICpzdHJzaWduYWwgKGludCk7Ki8KKworLyogUmV0dXJuIHRoZSBuYW1lIG9mIGEgc2lnbmFsIG51bWJlciAoZS5nLiwgc3Ryc2lnbm8gKFNJR0hVUCkgcmV0dXJucworICAgIlNJR0hVUCIpLiAgKi8KKworZXh0ZXJuIGNvbnN0IGNoYXIgKnN0cnNpZ25vIChpbnQpOworCisvKiBHaXZlbiB0aGUgbmFtZSBvZiBhIHNpZ25hbCwgcmV0dXJuIGl0cyBudW1iZXIuICAqLworCitleHRlcm4gaW50IHN0cnRvc2lnbm8gKGNvbnN0IGNoYXIgKik7CisKKy8qIFJlZ2lzdGVyIGEgZnVuY3Rpb24gdG8gYmUgcnVuIGJ5IHhleGl0LiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MuICAqLworCitleHRlcm4gaW50IHhhdGV4aXQgKHZvaWQgKCpmbikgKHZvaWQpKTsKKworLyogRXhpdCwgY2FsbGluZyBhbGwgdGhlIGZ1bmN0aW9ucyByZWdpc3RlcmVkIHdpdGggeGF0ZXhpdC4gICovCisKK2V4dGVybiB2b2lkIHhleGl0IChpbnQgc3RhdHVzKSBBVFRSSUJVVEVfTk9SRVRVUk47CisKKy8qIFNldCB0aGUgcHJvZ3JhbSBuYW1lIHVzZWQgYnkgeG1hbGxvYy4gICovCisKK2V4dGVybiB2b2lkIHhtYWxsb2Nfc2V0X3Byb2dyYW1fbmFtZSAoY29uc3QgY2hhciAqKTsKKworLyogUmVwb3J0IGFuIGFsbG9jYXRpb24gZmFpbHVyZS4gICovCitleHRlcm4gdm9pZCB4bWFsbG9jX2ZhaWxlZCAoc2l6ZV90KSBBVFRSSUJVVEVfTk9SRVRVUk47CisKKy8qIEFsbG9jYXRlIG1lbW9yeSB3aXRob3V0IGZhaWwuICBJZiBtYWxsb2MgZmFpbHMsIHRoaXMgd2lsbCBwcmludCBhCisgICBtZXNzYWdlIHRvIHN0ZGVyciAodXNpbmcgdGhlIG5hbWUgc2V0IGJ5IHhtYWxsb2Nfc2V0X3Byb2dyYW1fbmFtZSwKKyAgIGlmIGFueSkgYW5kIHRoZW4gY2FsbCB4ZXhpdC4gICovCisKK2V4dGVybiB2b2lkICp4bWFsbG9jIChzaXplX3QpIEFUVFJJQlVURV9NQUxMT0M7CisKKy8qIFJlYWxsb2NhdGUgbWVtb3J5IHdpdGhvdXQgZmFpbC4gIFRoaXMgd29ya3MgbGlrZSB4bWFsbG9jLiAgTm90ZSwKKyAgIHJlYWxsb2MgdHlwZSBmdW5jdGlvbnMgYXJlIG5vdCBzdWl0YWJsZSBmb3IgYXR0cmlidXRlIG1hbGxvYyBzaW5jZQorICAgdGhleSBtYXkgcmV0dXJuIHRoZSBzYW1lIGFkZHJlc3MgYWNyb3NzIG11bHRpcGxlIGNhbGxzLiAqLworCitleHRlcm4gdm9pZCAqeHJlYWxsb2MgKHZvaWQgKiwgc2l6ZV90KTsKKworLyogQWxsb2NhdGUgbWVtb3J5IHdpdGhvdXQgZmFpbCBhbmQgc2V0IGl0IHRvIHplcm8uICBUaGlzIHdvcmtzIGxpa2UKKyAgIHhtYWxsb2MuICAqLworCitleHRlcm4gdm9pZCAqeGNhbGxvYyAoc2l6ZV90LCBzaXplX3QpIEFUVFJJQlVURV9NQUxMT0M7CisKKy8qIENvcHkgYSBzdHJpbmcgaW50byBhIG1lbW9yeSBidWZmZXIgd2l0aG91dCBmYWlsLiAgKi8KKworZXh0ZXJuIGNoYXIgKnhzdHJkdXAgKGNvbnN0IGNoYXIgKikgQVRUUklCVVRFX01BTExPQzsKKworLyogQ29weSBhdCBtb3N0IE4gY2hhcmFjdGVycyBmcm9tIHN0cmluZyBpbnRvIGEgYnVmZmVyIHdpdGhvdXQgZmFpbC4gICovCisKK2V4dGVybiBjaGFyICp4c3RybmR1cCAoY29uc3QgY2hhciAqLCBzaXplX3QpIEFUVFJJQlVURV9NQUxMT0M7CisKKy8qIENvcHkgYW4gZXhpc3RpbmcgbWVtb3J5IGJ1ZmZlciB0byBhIG5ldyBtZW1vcnkgYnVmZmVyIHdpdGhvdXQgZmFpbC4gICovCisKK2V4dGVybiB2b2lkICp4bWVtZHVwIChjb25zdCB2b2lkICosIHNpemVfdCwgc2l6ZV90KSBBVFRSSUJVVEVfTUFMTE9DOworCisvKiBQaHlzaWNhbCBtZW1vcnkgcm91dGluZXMuICBSZXR1cm4gdmFsdWVzIGFyZSBpbiBCWVRFUy4gICovCitleHRlcm4gZG91YmxlIHBoeXNtZW1fdG90YWwgKHZvaWQpOworZXh0ZXJuIGRvdWJsZSBwaHlzbWVtX2F2YWlsYWJsZSAodm9pZCk7CisKKy8qIENvbXB1dGUgdGhlIDMyLWJpdCBDUkMgb2YgYSBibG9jayBvZiBtZW1vcnkuICAqLworZXh0ZXJuIHVuc2lnbmVkIGludCB4Y3JjMzIgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgaW50LCB1bnNpZ25lZCBpbnQpOworCisvKiBUaGVzZSBtYWNyb3MgcHJvdmlkZSBhIEsmUi9DODkvQysrLWZyaWVuZGx5IHdheSBvZiBhbGxvY2F0aW5nIHN0cnVjdHVyZXMKKyAgIHdpdGggbmljZSBlbmNhcHN1bGF0aW9uLiAgVGhlIFhERUxFVEUqKCkgbWFjcm9zIGFyZSB0ZWNobmljYWxseQorICAgc3VwZXJmbHVvdXMsIGJ1dCBwcm92aWRlZCBoZXJlIGZvciBzeW1tZXRyeS4gIFVzaW5nIHRoZW0gY29uc2lzdGVudGx5CisgICBtYWtlcyBpdCBlYXNpZXIgdG8gdXBkYXRlIGNsaWVudCBjb2RlIHRvIHVzZSBkaWZmZXJlbnQgYWxsb2NhdG9ycyBzdWNoCisgICBhcyBuZXcvZGVsZXRlIGFuZCBuZXdbXS9kZWxldGVbXS4gICovCisKKy8qIFNjYWxhciBhbGxvY2F0b3JzLiAgKi8KKworI2RlZmluZSBYQUxMT0NBKFQpCQkoKFQgKikgYWxsb2NhIChzaXplb2YgKFQpKSkKKyNkZWZpbmUgWE5FVyhUKQkJCSgoVCAqKSB4bWFsbG9jIChzaXplb2YgKFQpKSkKKyNkZWZpbmUgWENORVcoVCkJCSgoVCAqKSB4Y2FsbG9jICgxLCBzaXplb2YgKFQpKSkKKyNkZWZpbmUgWERVUChULCBQKQkJKChUICopIHhtZW1kdXAgKChQKSwgc2l6ZW9mIChUKSwgc2l6ZW9mIChUKSkpCisjZGVmaW5lIFhERUxFVEUoUCkJCWZyZWUgKCh2b2lkKikgKFApKQorCisvKiBBcnJheSBhbGxvY2F0b3JzLiAgKi8KKworI2RlZmluZSBYQUxMT0NBVkVDKFQsIE4pCSgoVCAqKSBhbGxvY2EgKHNpemVvZiAoVCkgKiAoTikpKQorI2RlZmluZSBYTkVXVkVDKFQsIE4pCQkoKFQgKikgeG1hbGxvYyAoc2l6ZW9mIChUKSAqIChOKSkpCisjZGVmaW5lIFhDTkVXVkVDKFQsIE4pCQkoKFQgKikgeGNhbGxvYyAoKE4pLCBzaXplb2YgKFQpKSkKKyNkZWZpbmUgWERVUFZFQyhULCBQLCBOKQkoKFQgKikgeG1lbWR1cCAoKFApLCBzaXplb2YgKFQpICogKE4pLCBzaXplb2YgKFQpICogKE4pKSkKKyNkZWZpbmUgWFJFU0laRVZFQyhULCBQLCBOKQkoKFQgKikgeHJlYWxsb2MgKCh2b2lkICopIChQKSwgc2l6ZW9mIChUKSAqIChOKSkpCisjZGVmaW5lIFhERUxFVEVWRUMoUCkJCWZyZWUgKCh2b2lkKikgKFApKQorCisvKiBBbGxvY2F0b3JzIGZvciB2YXJpYWJsZS1zaXplZCBzdHJ1Y3R1cmVzIGFuZCByYXcgYnVmZmVycy4gICovCisKKyNkZWZpbmUgWEFMTE9DQVZBUihULCBTKQkoKFQgKikgYWxsb2NhICgoUykpKQorI2RlZmluZSBYTkVXVkFSKFQsIFMpCQkoKFQgKikgeG1hbGxvYyAoKFMpKSkKKyNkZWZpbmUgWENORVdWQVIoVCwgUykJCSgoVCAqKSB4Y2FsbG9jICgxLCAoUykpKQorI2RlZmluZSBYRFVQVkFSKFQsIFAsIFMxLCBTMikJKChUICopIHhtZW1kdXAgKChQKSwgKFMxKSwgKFMyKSkpCisjZGVmaW5lIFhSRVNJWkVWQVIoVCwgUCwgUykJKChUICopIHhyZWFsbG9jICgoUCksIChTKSkpCisKKy8qIFR5cGUtc2FmZSBvYnN0YWNrIGFsbG9jYXRvci4gICovCisKKyNkZWZpbmUgWE9CTkVXKE8sIFQpCQkoKFQgKikgb2JzdGFja19hbGxvYyAoKE8pLCBzaXplb2YgKFQpKSkKKyNkZWZpbmUgWE9CTkVXVkVDKE8sIFQsIE4pCSgoVCAqKSBvYnN0YWNrX2FsbG9jICgoTyksIHNpemVvZiAoVCkgKiAoTikpKQorI2RlZmluZSBYT0JORVdWQVIoTywgVCwgUykJKChUICopIG9ic3RhY2tfYWxsb2MgKChPKSwgKFMpKSkKKyNkZWZpbmUgWE9CRklOSVNIKE8sIFQpICAgICAgICAgKChUKSBvYnN0YWNrX2ZpbmlzaCAoKE8pKSkKKworLyogaGV4IGNoYXJhY3RlciBtYW5pcHVsYXRpb24gcm91dGluZXMgKi8KKworI2RlZmluZSBfaGV4X2FycmF5X3NpemUgMjU2CisjZGVmaW5lIF9oZXhfYmFkCTk5CitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBfaGV4X3ZhbHVlW19oZXhfYXJyYXlfc2l6ZV07CitleHRlcm4gdm9pZCBoZXhfaW5pdCAodm9pZCk7CisjZGVmaW5lIGhleF9wKGMpCShoZXhfdmFsdWUgKGMpICE9IF9oZXhfYmFkKQorLyogSWYgeW91IGNoYW5nZSB0aGlzLCBub3RlIHdlbGw6IFNvbWUgY29kZSByZWxpZXMgb24gc2lkZSBlZmZlY3RzIGluCisgICB0aGUgYXJndW1lbnQgYmVpbmcgcGVyZm9ybWVkIGV4YWN0bHkgb25jZS4gICovCisjZGVmaW5lIGhleF92YWx1ZShjKQkoKHVuc2lnbmVkIGludCkgX2hleF92YWx1ZVsodW5zaWduZWQgY2hhcikgKGMpXSkKKworLyogRmxhZ3MgZm9yIHBleF9pbml0LiAgVGhlc2UgYXJlIGJpdHMgdG8gYmUgb3InZWQgdG9nZXRoZXIuICAqLworCisvKiBSZWNvcmQgc3VicHJvY2VzcyB0aW1lcywgaWYgcG9zc2libGUuICAqLworI2RlZmluZSBQRVhfUkVDT1JEX1RJTUVTCTB4MQorCisvKiBVc2UgcGlwZXMgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiBwcm9jZXNzZXMsIGlmIHBvc3NpYmxlLiAgKi8KKyNkZWZpbmUgUEVYX1VTRV9QSVBFUwkJMHgyCisKKy8qIFNhdmUgZmlsZXMgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHByb2Nlc3Nlcy4gICovCisjZGVmaW5lIFBFWF9TQVZFX1RFTVBTCQkweDQKKworLyogUHJlcGFyZSB0byBleGVjdXRlIG9uZSBvciBtb3JlIHByb2dyYW1zLCB3aXRoIHN0YW5kYXJkIG91dHB1dCBvZgorICAgZWFjaCBwcm9ncmFtIGZlZCB0byBzdGFuZGFyZCBpbnB1dCBvZiB0aGUgbmV4dC4KKyAgIEZMQUdTCUFzIGFib3ZlLgorICAgUE5BTUUJVGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gdG8gcmVwb3J0IGluIGVycm9yIG1lc3NhZ2VzLgorICAgVEVNUEJBU0UJQSBiYXNlIG5hbWUgdG8gdXNlIGZvciB0ZW1wb3JhcnkgZmlsZXM7IG1heSBiZSBOVUxMIHRvCisgICAJCXVzZSBhIHJhbmRvbSBuYW1lLgorICAgUmV0dXJucyBOVUxMIG9uIGVycm9yLiAgKi8KKworZXh0ZXJuIHN0cnVjdCBwZXhfb2JqICpwZXhfaW5pdCAoaW50IGZsYWdzLCBjb25zdCBjaGFyICpwbmFtZSwKKwkJCQkgY29uc3QgY2hhciAqdGVtcGJhc2UpOworCisvKiBGbGFncyBmb3IgcGV4X3J1bi4gIFRoZXNlIGFyZSBiaXRzIHRvIGJlIG9yJ2VkIHRvZ2V0aGVyLiAgKi8KKworLyogTGFzdCBwcm9ncmFtIGluIHBpcGVsaW5lLiAgU3RhbmRhcmQgb3V0cHV0IG9mIHByb2dyYW0gZ29lcyB0bworICAgT1VUTkFNRSwgb3IsIGlmIE9VVE5BTUUgaXMgTlVMTCwgdG8gc3RhbmRhcmQgb3V0cHV0IG9mIGNhbGxlci4gIERvCisgICBub3Qgc2V0IHRoaXMgaWYgeW91IHdhbnQgdG8gY2FsbCBwZXhfcmVhZF9vdXRwdXQuICBBZnRlciB0aGlzIGlzCisgICBzZXQsIHBleF9ydW4gbWF5IG5vIGxvbmdlciBiZSBjYWxsZWQgd2l0aCB0aGUgc2FtZSBzdHJ1Y3QKKyAgIHBleF9vYmouICAqLworI2RlZmluZSBQRVhfTEFTVAkJMHgxCisKKy8qIFNlYXJjaCBmb3IgcHJvZ3JhbSBpbiBleGVjdXRhYmxlIHNlYXJjaCBwYXRoLiAgKi8KKyNkZWZpbmUgUEVYX1NFQVJDSAkJMHgyCisKKy8qIE9VVE5BTUUgaXMgYSBzdWZmaXguICAqLworI2RlZmluZSBQRVhfU1VGRklYCQkweDQKKworLyogU2VuZCBwcm9ncmFtJ3Mgc3RhbmRhcmQgZXJyb3IgdG8gc3RhbmRhcmQgb3V0cHV0LiAgKi8KKyNkZWZpbmUgUEVYX1NUREVSUl9UT19TVERPVVQJMHg4CisKKy8qIElucHV0IGZpbGUgc2hvdWxkIGJlIG9wZW5lZCBpbiBiaW5hcnkgbW9kZS4gIFRoaXMgZmxhZyBpcyBpZ25vcmVkCisgICBvbiBVbml4LiAgKi8KKyNkZWZpbmUgUEVYX0JJTkFSWV9JTlBVVAkweDEwCisKKy8qIE91dHB1dCBmaWxlIHNob3VsZCBiZSBvcGVuZWQgaW4gYmluYXJ5IG1vZGUuICBUaGlzIGZsYWcgaXMgaWdub3JlZAorICAgb24gVW5peC4gIEZvciBwcm9wZXIgYmVoYXZpb3VyIFBFWF9CSU5BUllfSU5QVVQgYW5kCisgICBQRVhfQklOQVJZX09VVFBVVCBoYXZlIHRvIG1hdGNoIGFwcHJvcHJpYXRlbHktLWkuZS4sIGEgY2FsbCB1c2luZworICAgUEVYX0JJTkFSWV9PVVRQVVQgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IGEgY2FsbCB1c2luZworICAgUEVYX0JJTkFSWV9JTlBVVC4gICovCisjZGVmaW5lIFBFWF9CSU5BUllfT1VUUFVUCTB4MjAKKworLyogQ2FwdHVyZSBzdGRlcnIgdG8gYSBwaXBlLiAgVGhlIG91dHB1dCBjYW4gYmUgcmVhZCBieQorICAgY2FsbGluZyBwZXhfcmVhZF9lcnIgYW5kIHJlYWRpbmcgZnJvbSB0aGUgcmV0dXJuZWQKKyAgIEZJTEUgb2JqZWN0LiAgVGhpcyBmbGFnIG1heSBiZSBzcGVjaWZpZWQgb25seSBmb3IKKyAgIHRoZSBsYXN0IHByb2dyYW0gaW4gYSBwaXBlbGluZS4gIAorCisgICBUaGlzIGZsYWcgaXMgc3VwcG9ydGVkIG9ubHkgb24gVW5peCBhbmQgV2luZG93cy4gICovCisjZGVmaW5lIFBFWF9TVERFUlJfVE9fUElQRQkweDQwCisKKy8qIENhcHR1cmUgc3RkZXJyIGluIGJpbmFyeSBtb2RlLiAgVGhpcyBmbGFnIGlzIGlnbm9yZWQKKyAgIG9uIFVuaXguICAqLworI2RlZmluZSBQRVhfQklOQVJZX0VSUk9SCTB4ODAKKworCisvKiBFeGVjdXRlIG9uZSBwcm9ncmFtLiAgUmV0dXJucyBOVUxMIG9uIHN1Y2Nlc3MuICBPbiBlcnJvciByZXR1cm5zIGFuCisgICBlcnJvciBzdHJpbmcgKHR5cGljYWxseSBqdXN0IHRoZSBuYW1lIG9mIGEgc3lzdGVtIGNhbGwpOyB0aGUgZXJyb3IKKyAgIHN0cmluZyBpcyBzdGF0aWNhbGx5IGFsbG9jYXRlZC4KKworICAgT0JKCQlSZXR1cm5lZCBieSBwZXhfaW5pdC4KKworICAgRkxBR1MJQXMgYWJvdmUuCisKKyAgIEVYRUNVVEFCTEUJVGhlIHByb2dyYW0gdG8gZXhlY3V0ZS4KKworICAgQVJHVgkJTlVMTCB0ZXJtaW5hdGVkIGFycmF5IG9mIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBwcm9ncmFtLgorCisgICBPVVROQU1FCVNldHMgdGhlIG91dHB1dCBmaWxlIG5hbWUgYXMgZm9sbG93czoKKworCQlQRVhfU1VGRklYIHNldCAoT1VUTkFNRSBtYXkgbm90IGJlIE5VTEwpOgorCQkgIFRFTVBCQVNFIHBhcmFtZXRlciB0byBwZXhfaW5pdCBub3QgTlVMTDoKKwkJICAgIE91dHB1dCBmaWxlIG5hbWUgaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgVEVNUEJBU0UKKwkJICAgIGFuZCBPVVROQU1FLgorCQkgIFRFTVBCQVNFIGlzIE5VTEw6CisJCSAgICBPdXRwdXQgZmlsZSBuYW1lIGlzIGEgcmFuZG9tIGZpbGUgbmFtZSBlbmRpbmcgaW4KKwkJICAgIE9VVE5BTUUuCisJCVBFWF9TVUZGSVggbm90IHNldDoKKwkJICBPVVROQU1FIG5vdCBOVUxMOgorCQkgICAgT3V0cHV0IGZpbGUgbmFtZSBpcyBPVVROQU1FLgorCQkgIE9VVE5BTUUgTlVMTCwgVEVNUEJBU0Ugbm90IE5VTEw6CisJCSAgICBPdXRwdXQgZmlsZSBuYW1lIGlzIHJhbmRvbWx5IGNob3NlbiB1c2luZworCQkgICAgVEVNUEJBU0UuCisJCSAgT1VUTkFNRSBOVUxMLCBURU1QQkFTRSBOVUxMOgorCQkgICAgT3V0cHV0IGZpbGUgbmFtZSBpcyByYW5kb21seSBjaG9zZW4uCisKKwkJSWYgUEVYX0xBU1QgaXMgbm90IHNldCwgdGhlIG91dHB1dCBmaWxlIG5hbWUgaXMgdGhlCisgICAJCW5hbWUgdG8gdXNlIGZvciBhIHRlbXBvcmFyeSBmaWxlIGhvbGRpbmcgc3Rkb3V0LCBpZgorICAgCQlhbnkgKHRoZXJlIHdpbGwgbm90IGJlIGEgZmlsZSBpZiBQRVhfVVNFX1BJUEVTIGlzIHNldAorICAgCQlhbmQgdGhlIHN5c3RlbSBzdXBwb3J0cyBwaXBlcykuICBJZiBhIGZpbGUgaXMgdXNlZCwgaXQKKyAgIAkJd2lsbCBiZSByZW1vdmVkIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZCB1bmxlc3MKKyAgIAkJUEVYX1NBVkVfVEVNUFMgaXMgc2V0LgorCisJCUlmIFBFWF9MQVNUIGlzIHNldCwgYW5kIE9VVE5BTUUgaXMgbm90IE5VTEwsIHN0YW5kYXJkCisgICAJCW91dHB1dCBpcyB3cml0dGVuIHRvIHRoZSBvdXRwdXQgZmlsZSBuYW1lLiAgVGhlIGZpbGUKKyAgIAkJd2lsbCBub3QgYmUgcmVtb3ZlZC4gIElmIFBFWF9MQVNUIGFuZCBQRVhfU1VGRklYIGFyZQorICAgCQlib3RoIHNldCwgVEVNUEJBU0UgbWF5IG5vdCBiZSBOVUxMLgorCisgICBFUlJOQU1FCUlmIG5vdCBOVUxMLCB0aGlzIGlzIHRoZSBuYW1lIG9mIGEgZmlsZSB0byB3aGljaAorCQlzdGFuZGFyZCBlcnJvciBpcyB3cml0dGVuLiAgSWYgTlVMTCwgc3RhbmRhcmQgZXJyb3Igb2YKKwkJdGhlIHByb2dyYW0gaXMgc3RhbmRhcmQgZXJyb3Igb2YgdGhlIGNhbGxlci4KKworICAgRVJSCQlPbiBhbiBlcnJvciByZXR1cm4sICpFUlIgaXMgc2V0IHRvIGFuIGVycm5vIHZhbHVlLCBvcgorICAgCQl0byAwIGlmIHRoZXJlIGlzIG5vIHJlbGV2YW50IGVycm5vLgorKi8KKworZXh0ZXJuIGNvbnN0IGNoYXIgKnBleF9ydW4gKHN0cnVjdCBwZXhfb2JqICpvYmosIGludCBmbGFncywKKwkJCSAgICBjb25zdCBjaGFyICpleGVjdXRhYmxlLCBjaGFyICogY29uc3QgKmFyZ3YsCisJCQkgICAgY29uc3QgY2hhciAqb3V0bmFtZSwgY29uc3QgY2hhciAqZXJybmFtZSwKKwkJCSAgICBpbnQgKmVycik7CisKKy8qIEFzIGZvciBwZXhfcnVuICgpLCBidXQgdGFrZXMgYW4gZXh0cmEgcGFyYW1ldGVyIHRvIGVuYWJsZSB0aGUKKyAgIGVudmlyb25tZW50IGZvciB0aGUgY2hpbGQgcHJvY2VzcyB0byBiZSBzcGVjaWZpZWQuCisKKyAgIEVOVgkJVGhlIGVudmlyb25tZW50IGZvciB0aGUgY2hpbGQgcHJvY2Vzcywgc3BlY2lmaWVkIGFzCisJCWFuIGFycmF5IG9mIGNoYXJhY3RlciBwb2ludGVycy4gIEVhY2ggZWxlbWVudCBvZiB0aGUKKwkJYXJyYXkgc2hvdWxkIHBvaW50IHRvIGEgc3RyaW5nIG9mIHRoZSBmb3JtIFZBUj1WQUxVRSwKKyAgICAgICAgICAgICAgICB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIGxhc3QgZWxlbWVudCB3aGljaCBtdXN0IGJlCisgICAgICAgICAgICAgICAgYSBudWxsIHBvaW50ZXIuCisqLworCitleHRlcm4gY29uc3QgY2hhciAqcGV4X3J1bl9pbl9lbnZpcm9ubWVudCAoc3RydWN0IHBleF9vYmogKm9iaiwgaW50IGZsYWdzLAorCQkJICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmV4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIGNvbnN0ICphcmd2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBjb25zdCAqZW52LAorICAgICAgICAgICAgICAJICAgICAgICAgIAkJICAgY29uc3QgY2hhciAqb3V0bmFtZSwKKwkJCQkJICAgY29uc3QgY2hhciAqZXJybmFtZSwgaW50ICplcnIpOworCisvKiBSZXR1cm4gYSBzdHJlYW0gZm9yIGEgdGVtcG9yYXJ5IGZpbGUgdG8gcGFzcyB0byB0aGUgZmlyc3QgcHJvZ3JhbQorICAgaW4gdGhlIHBpcGVsaW5lIGFzIGlucHV0LiAgVGhlIGZpbGUgbmFtZSBpcyBjaG9zZW4gYXMgZm9yIHBleF9ydW4uCisgICBwZXhfcnVuIGNsb3NlcyB0aGUgZmlsZSBhdXRvbWF0aWNhbGx5OyBkb24ndCBjbG9zZSBpdCB5b3Vyc2VsZi4gICovCisKK2V4dGVybiBGSUxFICpwZXhfaW5wdXRfZmlsZSAoc3RydWN0IHBleF9vYmogKm9iaiwgaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppbl9uYW1lKTsKKworLyogUmV0dXJuIGEgc3RyZWFtIGZvciBhIHBpcGUgY29ubmVjdGVkIHRvIHRoZSBzdGFuZGFyZCBpbnB1dCBvZiB0aGUKKyAgIGZpcnN0IHByb2dyYW0gaW4gdGhlIHBpcGVsaW5lLiAgWW91IG11c3QgaGF2ZSBwYXNzZWQKKyAgIGBQRVhfVVNFX1BJUEVTJyB0byBgcGV4X2luaXQnLiAgQ2xvc2UgdGhlIHJldHVybmVkIHN0cmVhbQorICAgeW91cnNlbGYuICAqLworCitleHRlcm4gRklMRSAqcGV4X2lucHV0X3BpcGUgKHN0cnVjdCBwZXhfb2JqICpvYmosIGludCBiaW5hcnkpOworCisvKiBSZWFkIHRoZSBzdGFuZGFyZCBvdXRwdXQgb2YgdGhlIGxhc3QgcHJvZ3JhbSB0byBiZSBleGVjdXRlZC4KKyAgIHBleF9ydW4gY2FuIG5vdCBiZSBjYWxsZWQgYWZ0ZXIgdGhpcy4gIEJJTkFSWSBzaG91bGQgYmUgbm9uLXplcm8gaWYKKyAgIHRoZSBmaWxlIHNob3VsZCBiZSBvcGVuZWQgaW4gYmluYXJ5IG1vZGU7IHRoaXMgaXMgaWdub3JlZCBvbiBVbml4LgorICAgUmV0dXJucyBOVUxMIG9uIGVycm9yLiAgRG9uJ3QgY2FsbCBmY2xvc2Ugb24gdGhlIHJldHVybmVkIEZJTEU7IGl0CisgICB3aWxsIGJlIGNsb3NlZCBieSBwZXhfZnJlZS4gICovCisKK2V4dGVybiBGSUxFICpwZXhfcmVhZF9vdXRwdXQgKHN0cnVjdCBwZXhfb2JqICosIGludCBiaW5hcnkpOworCisvKiBSZWFkIHRoZSBzdGFuZGFyZCBlcnJvciBvZiB0aGUgbGFzdCBwcm9ncmFtIHRvIGJlIGV4ZWN1dGVkLgorICAgcGV4X3J1biBjYW4gbm90IGJlIGNhbGxlZCBhZnRlciB0aGlzLiAgQklOQVJZIHNob3VsZCBiZSBub24temVybyBpZgorICAgdGhlIGZpbGUgc2hvdWxkIGJlIG9wZW5lZCBpbiBiaW5hcnkgbW9kZTsgdGhpcyBpcyBpZ25vcmVkIG9uIFVuaXguCisgICBSZXR1cm5zIE5VTEwgb24gZXJyb3IuICBEb24ndCBjYWxsIGZjbG9zZSBvbiB0aGUgcmV0dXJuZWQgRklMRTsgaXQKKyAgIHdpbGwgYmUgY2xvc2VkIGJ5IHBleF9mcmVlLiAgKi8KKworZXh0ZXJuIEZJTEUgKnBleF9yZWFkX2VyciAoc3RydWN0IHBleF9vYmogKiwgaW50IGJpbmFyeSk7CisKKy8qIFJldHVybiBleGl0IHN0YXR1cyBvZiBhbGwgcHJvZ3JhbXMgaW4gVkVDVE9SLiAgQ09VTlQgaW5kaWNhdGVzIHRoZQorICAgc2l6ZSBvZiBWRUNUT1IuICBUaGUgc3RhdHVzIGNvZGVzIGluIHRoZSB2ZWN0b3IgYXJlIGluIHRoZSBvcmRlciBvZgorICAgdGhlIGNhbGxzIHRvIHBleF9ydW4uICBSZXR1cm5zIDAgb24gZXJyb3IsIDEgb24gc3VjY2Vzcy4gICovCisKK2V4dGVybiBpbnQgcGV4X2dldF9zdGF0dXMgKHN0cnVjdCBwZXhfb2JqICosIGludCBjb3VudCwgaW50ICp2ZWN0b3IpOworCisvKiBSZXR1cm4gdGltZXMgb2YgYWxsIHByb2dyYW1zIGluIFZFQ1RPUi4gIENPVU5UIGluZGljYXRlcyB0aGUgc2l6ZQorICAgb2YgVkVDVE9SLiAgc3RydWN0IHBleF90aW1lIGlzIHJlYWxseSBqdXN0IHN0cnVjdCB0aW1ldmFsLCBidXQgdGhhdAorICAgaXMgbm90IHBvcnRhYmxlIHRvIGFsbCBzeXN0ZW1zLiAgUmV0dXJucyAwIG9uIGVycm9yLCAxIG9uCisgICBzdWNjZXNzLiAgKi8KKworc3RydWN0IHBleF90aW1lCit7CisgIHVuc2lnbmVkIGxvbmcgdXNlcl9zZWNvbmRzOworICB1bnNpZ25lZCBsb25nIHVzZXJfbWljcm9zZWNvbmRzOworICB1bnNpZ25lZCBsb25nIHN5c3RlbV9zZWNvbmRzOworICB1bnNpZ25lZCBsb25nIHN5c3RlbV9taWNyb3NlY29uZHM7Cit9OworCitleHRlcm4gaW50IHBleF9nZXRfdGltZXMgKHN0cnVjdCBwZXhfb2JqICosIGludCBjb3VudCwKKwkJCSAgc3RydWN0IHBleF90aW1lICp2ZWN0b3IpOworCisvKiBDbGVhbiB1cCBhIHBleF9vYmouICBJZiB5b3UgaGF2ZSBub3QgY2FsbGVkIHBleF9nZXRfdGltZXMgb3IKKyAgIHBleF9nZXRfc3RhdHVzLCB0aGlzIHdpbGwgdHJ5IHRvIGtpbGwgdGhlIHN1YnByb2Nlc3Nlcy4gICovCisKK2V4dGVybiB2b2lkIHBleF9mcmVlIChzdHJ1Y3QgcGV4X29iaiAqKTsKKworLyogSnVzdCBleGVjdXRlIG9uZSBwcm9ncmFtLiAgUmV0dXJuIHZhbHVlIGlzIGFzIGZvciBwZXhfcnVuLgorICAgRkxBR1MJQ29tYmluYXRpb24gb2YgUEVYX1NFQVJDSCBhbmQgUEVYX1NUREVSUl9UT19TVERPVVQuCisgICBFWEVDVVRBQkxFCUFzIGZvciBwZXhfcnVuLgorICAgQVJHVgkJQXMgZm9yIHBleF9ydW4uCisgICBQTkFNRQlBcyBmb3IgcGV4X2luaXQuCisgICBPVVROQU1FCUFzIGZvciBwZXhfcnVuIHdoZW4gUEVYX0xBU1QgaXMgc2V0LgorICAgRVJSTkFNRQlBcyBmb3IgcGV4X3J1bi4KKyAgIFNUQVRVUwlTZXQgdG8gZXhpdCBzdGF0dXMgb24gc3VjY2Vzcy4KKyAgIEVSUgkJQXMgZm9yIHBleF9ydW4uCisqLworCitleHRlcm4gY29uc3QgY2hhciAqcGV4X29uZSAoaW50IGZsYWdzLCBjb25zdCBjaGFyICpleGVjdXRhYmxlLAorCQkJICAgIGNoYXIgKiBjb25zdCAqYXJndiwgY29uc3QgY2hhciAqcG5hbWUsCisJCQkgICAgY29uc3QgY2hhciAqb3V0bmFtZSwgY29uc3QgY2hhciAqZXJybmFtZSwKKwkJCSAgICBpbnQgKnN0YXR1cywgaW50ICplcnIpOworCisvKiBwZXhlY3V0ZSBhbmQgcHdhaXQgYXJlIHRoZSBvbGQgcGV4ZWN1dGUgaW50ZXJmYWNlLCBzdGlsbCBoZXJlIGZvcgorICAgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gIERvbid0IHVzZSB0aGVzZSBmb3IgbmV3IGNvZGUuICBJbnN0ZWFkLAorICAgdXNlIHBleF9pbml0L3BleF9ydW4vcGV4X2dldF9zdGF0dXMvcGV4X2ZyZWUsIG9yIHBleF9vbmUuICAqLworCisvKiBEZWZpbml0aW9ucyB1c2VkIGJ5IHRoZSBwZXhlY3V0ZSByb3V0aW5lLiAgKi8KKworI2RlZmluZSBQRVhFQ1VURV9GSVJTVCAgIDEKKyNkZWZpbmUgUEVYRUNVVEVfTEFTVCAgICAyCisjZGVmaW5lIFBFWEVDVVRFX09ORSAgICAgKFBFWEVDVVRFX0ZJUlNUICsgUEVYRUNVVEVfTEFTVCkKKyNkZWZpbmUgUEVYRUNVVEVfU0VBUkNIICA0CisjZGVmaW5lIFBFWEVDVVRFX1ZFUkJPU0UgOAorCisvKiBFeGVjdXRlIGEgcHJvZ3JhbS4gICovCisKK2V4dGVybiBpbnQgcGV4ZWN1dGUgKGNvbnN0IGNoYXIgKiwgY2hhciAqIGNvbnN0ICosIGNvbnN0IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgY2hhciAqKiwgaW50KTsKKworLyogV2FpdCBmb3IgcGV4ZWN1dGUgdG8gZmluaXNoLiAgKi8KKworZXh0ZXJuIGludCBwd2FpdCAoaW50LCBpbnQgKiwgaW50KTsKKworI2lmICFIQVZFX0RFQ0xfQVNQUklOVEYKKy8qIExpa2Ugc3ByaW50ZiBidXQgcHJvdmlkZXMgYSBwb2ludGVyIHRvIG1hbGxvYydkIHN0b3JhZ2UsIHdoaWNoIG11c3QKKyAgIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuICAqLworCitleHRlcm4gaW50IGFzcHJpbnRmIChjaGFyICoqLCBjb25zdCBjaGFyICosIC4uLikgQVRUUklCVVRFX1BSSU5URl8yOworI2VuZGlmCisKKyNpZiAhSEFWRV9ERUNMX1ZBU1BSSU5URgorLyogTGlrZSB2c3ByaW50ZiBidXQgcHJvdmlkZXMgYSBwb2ludGVyIHRvIG1hbGxvYydkIHN0b3JhZ2UsIHdoaWNoCisgICBtdXN0IGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuICAqLworCitleHRlcm4gaW50IHZhc3ByaW50ZiAoY2hhciAqKiwgY29uc3QgY2hhciAqLCB2YV9saXN0KSBBVFRSSUJVVEVfUFJJTlRGKDIsMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9ERUNMX1NOUFJJTlRGKSAmJiAhSEFWRV9ERUNMX1NOUFJJTlRGCisvKiBMaWtlIHNwcmludGYgYnV0IHByaW50cyBhdCBtb3N0IE4gY2hhcmFjdGVycy4gICovCitleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCAuLi4pIEFUVFJJQlVURV9QUklOVEZfMzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX0RFQ0xfVlNOUFJJTlRGKSAmJiAhSEFWRV9ERUNMX1ZTTlBSSU5URgorLyogTGlrZSB2c3ByaW50ZiBidXQgcHJpbnRzIGF0IG1vc3QgTiBjaGFyYWN0ZXJzLiAgKi8KK2V4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCB2YV9saXN0KSBBVFRSSUJVVEVfUFJJTlRGKDMsMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9ERUNMX1NUUlZFUlNDTVApICYmICFIQVZFX0RFQ0xfU1RSVkVSU0NNUAorLyogQ29tcGFyZSB2ZXJzaW9uIHN0cmluZ3MuICAqLworZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisjZW5kaWYKKworI2RlZmluZSBBUlJBWV9TSVpFKGEpIChzaXplb2YgKGEpIC8gc2l6ZW9mICgoYSlbMF0pKQorCisvKiBEcmFzdGljYWxseSBzaW1wbGlmaWVkIGFsbG9jYSBjb25maWd1cmF0b3IuICBJZiB3ZSdyZSB1c2luZyBHQ0MsCisgICB3ZSB1c2UgX19idWlsdGluX2FsbG9jYTsgb3RoZXJ3aXNlIHdlIHVzZSB0aGUgQyBhbGxvY2EuICBUaGUgQworICAgYWxsb2NhIGlzIGFsd2F5cyBhdmFpbGFibGUuICBZb3UgY2FuIG92ZXJyaWRlIEdDQyBieSBkZWZpbmluZworICAgVVNFX0NfQUxMT0NBIHlvdXJzZWxmLiAgVGhlIGNhbm9uaWNhbCBhdXRvY29uZiBtYWNybyBDX0FMTE9DQSBpcworICAgYWxzbyBzZXQvdW5zZXQgYXMgaXQgaXMgb2Z0ZW4gdXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIGNvZGUgbmVlZHMKKyAgIHRvIGNhbGwgYWxsb2NhKDApLiAgKi8KK2V4dGVybiB2b2lkICpDX2FsbG9jYSAoc2l6ZV90KSBBVFRSSUJVVEVfTUFMTE9DOworI3VuZGVmIGFsbG9jYQorI2lmIEdDQ19WRVJTSU9OID49IDIwMDAgJiYgIWRlZmluZWQgVVNFX0NfQUxMT0NBCisjIGRlZmluZSBhbGxvY2EoeCkgX19idWlsdGluX2FsbG9jYSh4KQorIyB1bmRlZiBDX0FMTE9DQQorIyBkZWZpbmUgQVNUUkRVUChYKSBcCisgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IGNoYXIgKmNvbnN0IGxpYmliZXJ0eV9vcHRyID0gKFgpOyBcCisgICBjb25zdCB1bnNpZ25lZCBsb25nIGxpYmliZXJ0eV9sZW4gPSBzdHJsZW4gKGxpYmliZXJ0eV9vcHRyKSArIDE7IFwKKyAgIGNoYXIgKmNvbnN0IGxpYmliZXJ0eV9ucHRyID0gKGNoYXIgKmNvbnN0KSBhbGxvY2EgKGxpYmliZXJ0eV9sZW4pOyBcCisgICAoY2hhciAqKSBtZW1jcHkgKGxpYmliZXJ0eV9ucHRyLCBsaWJpYmVydHlfb3B0ciwgbGliaWJlcnR5X2xlbik7IH0pKQorI2Vsc2UKKyMgZGVmaW5lIGFsbG9jYSh4KSBDX2FsbG9jYSh4KQorIyB1bmRlZiBVU0VfQ19BTExPQ0EKKyMgZGVmaW5lIFVTRV9DX0FMTE9DQSAxCisjIHVuZGVmIENfQUxMT0NBCisjIGRlZmluZSBDX0FMTE9DQSAxCitleHRlcm4gY29uc3QgY2hhciAqbGliaWJlcnR5X29wdHI7CitleHRlcm4gY2hhciAqbGliaWJlcnR5X25wdHI7CitleHRlcm4gdW5zaWduZWQgbG9uZyBsaWJpYmVydHlfbGVuOworIyBkZWZpbmUgQVNUUkRVUChYKSBcCisgIChsaWJpYmVydHlfb3B0ciA9IChYKSwgXAorICAgbGliaWJlcnR5X2xlbiA9IHN0cmxlbiAobGliaWJlcnR5X29wdHIpICsgMSwgXAorICAgbGliaWJlcnR5X25wdHIgPSAoY2hhciAqKSBhbGxvY2EgKGxpYmliZXJ0eV9sZW4pLCBcCisgICAoY2hhciAqKSBtZW1jcHkgKGxpYmliZXJ0eV9ucHRyLCBsaWJpYmVydHlfb3B0ciwgbGliaWJlcnR5X2xlbikpCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworCisjZW5kaWYgLyogISBkZWZpbmVkIChMSUJJQkVSVFlfSCkgKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9saW5lLW1hcC5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL2xpbmUtbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUzMWE2YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9saW5lLW1hcC5oCkBAIC0wLDAgKzEsMTk1IEBACisvKiBNYXAgbG9naWNhbCBsaW5lIG51bWJlcnMgdG8gKHNvdXJjZSBmaWxlLCBsaW5lIG51bWJlcikgcGFpcnMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDcsIDIwMDgsIDIwMDkKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIEluIG90aGVyIHdvcmRzLCB5b3UgYXJlIHdlbGNvbWUgdG8gdXNlLCBzaGFyZSBhbmQgaW1wcm92ZSB0aGlzIHByb2dyYW0uCisgWW91IGFyZSBmb3JiaWRkZW4gdG8gZm9yYmlkIGFueW9uZSBlbHNlIHRvIHVzZSwgc2hhcmUgYW5kIGltcHJvdmUKKyB3aGF0IHlvdSBnaXZlIHRoZW0uICAgSGVscCBzdGFtcCBvdXQgc29mdHdhcmUtaG9hcmRpbmchICAqLworCisjaWZuZGVmIExJQkNQUF9MSU5FX01BUF9ICisjZGVmaW5lIExJQkNQUF9MSU5FX01BUF9ICisKKyNpZm5kZWYgR1RZCisjZGVmaW5lIEdUWSh4KSAvKiBub3RoaW5nICovCisjZW5kaWYKKworLyogUmVhc29uIGZvciBhZGRpbmcgYSBsaW5lIGNoYW5nZSB3aXRoIGFkZF9saW5lX21hcCAoKS4gIExDX0VOVEVSIGlzCisgICB3aGVuIGluY2x1ZGluZyBhIG5ldyBmaWxlLCBlLmcuIGEgI2luY2x1ZGUgZGlyZWN0aXZlIGluIEMuCisgICBMQ19MRUFWRSBpcyB3aGVuIHJlYWNoaW5nIGEgZmlsZSdzIGVuZC4gIExDX1JFTkFNRSBpcyB3aGVuIGEgZmlsZQorICAgbmFtZSBvciBsaW5lIG51bWJlciBjaGFuZ2VzIGZvciBuZWl0aGVyIG9mIHRoZSBhYm92ZSByZWFzb25zCisgICAoZS5nLiBhICNsaW5lIGRpcmVjdGl2ZSBpbiBDKTsgTENfUkVOQU1FX1ZFUkJBVElNIGlzIGxpa2UgTENfUkVOQU1FCisgICBidXQgYSBmaWxlbmFtZSBvZiAiIiBpcyBub3Qgc3BlY2lhbGx5IGludGVycHJldGVkIGFzIHN0YW5kYXJkIGlucHV0LiAgKi8KK2VudW0gbGNfcmVhc29uIHtMQ19FTlRFUiA9IDAsIExDX0xFQVZFLCBMQ19SRU5BTUUsIExDX1JFTkFNRV9WRVJCQVRJTX07CisKKy8qIFRoZSB0eXBlIG9mIGxpbmUgbnVtYmVycy4gICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBsaW5lbnVtX3R5cGU7CisKKy8qIEEgbG9naWNhbCBsaW5lL2NvbHVtbiBudW1iZXIsIGkuZS4gYW4gImluZGV4IiBpbnRvIGEgbGluZV9tYXAuICAqLworLyogTG9uZy10ZXJtLCB3ZSB3YW50IHRvIHVzZSB0aGlzIHRvIHJlcGxhY2Ugc3RydWN0IGxvY2F0aW9uX3MgKGluIGlucHV0LmgpLAorICAgYW5kIGVmZmVjdGl2ZWx5IHR5cGVkZWYgc291cmNlX2xvY2F0aW9uIGxvY2F0aW9uX3QuICAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgc291cmNlX2xvY2F0aW9uOworCisvKiBNZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbiB0eXBlZGVmLiAgV29ya3MgbGlrZSB4cmVhbGxvYy4gICovCit0eXBlZGVmIHZvaWQgKigqbGluZV9tYXBfcmVhbGxvYykgKHZvaWQgKiwgc2l6ZV90KTsKKworLyogUGh5c2ljYWwgc291cmNlIGZpbGUgVE9fRklMRSBhdCBsaW5lIFRPX0xJTkUgYXQgY29sdW1uIDAgaXMgcmVwcmVzZW50ZWQKKyAgIGJ5IHRoZSBsb2dpY2FsIFNUQVJUX0xPQ0FUSU9OLiAgVE9fTElORStMIGF0IGNvbHVtbiBDIGlzIHJlcHJlc2VudGVkIGJ5CisgICBTVEFSVF9MT0NBVElPTisoTCooMTw8Y29sdW1uX2JpdHMpKStDLCBhcyBsb25nIGFzIEM8KDE8PGNvbHVtbl9iaXRzKSwKKyAgIGFuZCB0aGUgcmVzdWx0X2xvY2F0aW9uIGlzIGxlc3MgdGhhbiB0aGUgbmV4dCBsaW5lX21hcCdzIHN0YXJ0X2xvY2F0aW9uLgorICAgKFRoZSB0b3AgbGluZSBpcyBsaW5lIDEgYW5kIHRoZSBsZWZ0bW9zdCBjb2x1bW4gaXMgY29sdW1uIDE7IGxpbmUvY29sdW1uIDAKKyAgIG1lYW5zICJlbnRpcmUgZmlsZS9saW5lIiBvciAidW5rbm93biBsaW5lL2NvbHVtbiIgb3IgIm5vdCBhcHBsaWNhYmxlIi4pCisgICBJTkNMVURFRF9GUk9NIGlzIGFuIGluZGV4IGludG8gdGhlIHNldCB0aGF0IGdpdmVzIHRoZSBsaW5lIG1hcHBpbmcKKyAgIGF0IHdob3NlIGVuZCB0aGUgY3VycmVudCBvbmUgd2FzIGluY2x1ZGVkLiAgRmlsZShzKSBhdCB0aGUgYm90dG9tCisgICBvZiB0aGUgaW5jbHVkZSBzdGFjayBoYXZlIHRoaXMgc2V0IHRvIC0xLiAgUkVBU09OIGlzIHRoZSByZWFzb24gZm9yCisgICBjcmVhdGlvbiBvZiB0aGlzIGxpbmUgbWFwLCBTWVNQIGlzIG9uZSBmb3IgYSBzeXN0ZW0gaGVhZGVyLCB0d28gZm9yCisgICBhIEMgc3lzdGVtIGhlYWRlciBmaWxlIHRoYXQgdGhlcmVmb3JlIG5lZWRzIHRvIGJlIGV4dGVybiAiQyIKKyAgIHByb3RlY3RlZCBpbiBDKyssIGFuZCB6ZXJvIG90aGVyd2lzZS4gICovCitzdHJ1Y3QgR1RZKCgpKSBsaW5lX21hcCB7CisgIGNvbnN0IGNoYXIgKnRvX2ZpbGU7CisgIGxpbmVudW1fdHlwZSB0b19saW5lOworICBzb3VyY2VfbG9jYXRpb24gc3RhcnRfbG9jYXRpb247CisgIGludCBpbmNsdWRlZF9mcm9tOworICBFTlVNX0JJVEZJRUxEIChsY19yZWFzb24pIHJlYXNvbiA6IENIQVJfQklUOworICAvKiBUaGUgc3lzcCBmaWVsZCBpc24ndCByZWFsbHkgbmVlZGVkIG5vdyB0aGF0IGl0J3MgaW4gY3BwX2J1ZmZlci4gICovCisgIHVuc2lnbmVkIGNoYXIgc3lzcDsKKyAgLyogTnVtYmVyIG9mIHRoZSBsb3ctb3JkZXIgc291cmNlX2xvY2F0aW9uIGJpdHMgdXNlZCBmb3IgYSBjb2x1bW4gbnVtYmVyLiAgKi8KKyAgdW5zaWduZWQgaW50IGNvbHVtbl9iaXRzIDogODsKK307CisKKy8qIEEgc2V0IG9mIGNocm9ub2xvZ2ljYWwgbGluZV9tYXAgc3RydWN0dXJlcy4gICovCitzdHJ1Y3QgR1RZKCgpKSBsaW5lX21hcHMgeworICBzdHJ1Y3QgbGluZV9tYXAgKiBHVFkgKChsZW5ndGggKCIlaC51c2VkIikpKSBtYXBzOworICB1bnNpZ25lZCBpbnQgYWxsb2NhdGVkOworICB1bnNpZ25lZCBpbnQgdXNlZDsKKworICB1bnNpZ25lZCBpbnQgY2FjaGU7CisKKyAgLyogVGhlIG1vc3QgcmVjZW50bHkgbGlzdGVkIGluY2x1ZGUgc3RhY2ssIGlmIGFueSwgc3RhcnRzIHdpdGgKKyAgICAgTEFTVF9MSVNURUQgYXMgdGhlIHRvcG1vc3QgaW5jbHVkaW5nIGZpbGUuICAtMSBpbmRpY2F0ZXMgbm90aGluZworICAgICBoYXMgYmVlbiBsaXN0ZWQgeWV0LiAgKi8KKyAgaW50IGxhc3RfbGlzdGVkOworCisgIC8qIERlcHRoIG9mIHRoZSBpbmNsdWRlIHN0YWNrLCBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgZmlsZS4gICovCisgIHVuc2lnbmVkIGludCBkZXB0aDsKKworICAvKiBJZiB0cnVlLCBwcmludHMgYW4gaW5jbHVkZSB0cmFjZSBhIGxhIC1ILiAgKi8KKyAgYm9vbCB0cmFjZV9pbmNsdWRlczsKKworICAvKiBIaWdoZXN0IHNvdXJjZV9sb2NhdGlvbiAiZ2l2ZW4gb3V0Ii4gICovCisgIHNvdXJjZV9sb2NhdGlvbiBoaWdoZXN0X2xvY2F0aW9uOworCisgIC8qIFN0YXJ0IG9mIGxpbmUgb2YgaGlnaGVzdCBzb3VyY2VfbG9jYXRpb24gImdpdmVuIG91dCIuICAqLworICBzb3VyY2VfbG9jYXRpb24gaGlnaGVzdF9saW5lOworCisgIC8qIFRoZSBtYXhpbXVtIGNvbHVtbiBudW1iZXIgd2UgY2FuIHF1aWNrbHkgYWxsb2NhdGUuICBIaWdoZXIgbnVtYmVycworICAgICBtYXkgcmVxdWlyZSBhbGxvY2F0aW5nIGEgbmV3IGxpbmVfbWFwLiAgKi8KKyAgdW5zaWduZWQgaW50IG1heF9jb2x1bW5faGludDsKKworICAvKiBJZiBub24tbnVsbCwgdGhlIGFsbG9jYXRvciB0byB1c2Ugd2hlbiByZXNpemluZyAnbWFwcycuICBJZiBudWxsLAorICAgICB4cmVhbGxvYyBpcyB1c2VkLiAgKi8KKyAgbGluZV9tYXBfcmVhbGxvYyByZWFsbG9jYXRvcjsKK307CisKKy8qIEluaXRpYWxpemUgYSBsaW5lIG1hcCBzZXQuICAqLworZXh0ZXJuIHZvaWQgbGluZW1hcF9pbml0IChzdHJ1Y3QgbGluZV9tYXBzICopOworCisvKiBGcmVlIGEgbGluZSBtYXAgc2V0LiAgKi8KK2V4dGVybiB2b2lkIGxpbmVtYXBfZnJlZSAoc3RydWN0IGxpbmVfbWFwcyAqKTsKKworLyogQ2hlY2sgZm9yIGFuZCB3YXJuIGFib3V0IGxpbmVfbWFwcyBlbnRlcmVkIGJ1dCBub3QgZXhpdGVkLiAgKi8KKworZXh0ZXJuIHZvaWQgbGluZW1hcF9jaGVja19maWxlc19leGl0ZWQgKHN0cnVjdCBsaW5lX21hcHMgKik7CisKKy8qIFJldHVybiBhIHNvdXJjZV9sb2NhdGlvbiBmb3IgdGhlIHN0YXJ0IChpLmUuIGNvbHVtbj09MCkgb2YKKyAgIChwaHlzaWNhbCkgbGluZSBUT19MSU5FIGluIHRoZSBjdXJyZW50IHNvdXJjZSBmaWxlIChhcyBpbiB0aGUKKyAgIG1vc3QgcmVjZW50IGxpbmVtYXBfYWRkKS4gICBNQVhfQ09MVU1OX0hJTlQgaXMgdGhlIGhpZ2hlc3QgY29sdW1uCisgICBudW1iZXIgd2UgZXhwZWN0IHRvIHVzZSBpbiB0aGlzIGxpbmUgKGJ1dCBpdCBkb2VzIG5vdCBjaGFuZ2UKKyAgIHRoZSBoaWdoZXN0X2xvY2F0aW9uKS4gICovCisKK2V4dGVybiBzb3VyY2VfbG9jYXRpb24gbGluZW1hcF9saW5lX3N0YXJ0Cisoc3RydWN0IGxpbmVfbWFwcyAqc2V0LCBsaW5lbnVtX3R5cGUgdG9fbGluZSwgIHVuc2lnbmVkIGludCBtYXhfY29sdW1uX2hpbnQpOworCisvKiBBZGQgYSBtYXBwaW5nIG9mIGxvZ2ljYWwgc291cmNlIGxpbmUgdG8gcGh5c2ljYWwgc291cmNlIGZpbGUgYW5kCisgICBsaW5lIG51bWJlci4KKworICAgVGhlIHRleHQgcG9pbnRlZCB0byBieSBUT19GSUxFIG11c3QgaGF2ZSBhIGxpZmV0aW1lCisgICBhdCBsZWFzdCBhcyBsb25nIGFzIHRoZSBmaW5hbCBjYWxsIHRvIGxvb2t1cF9saW5lICgpLiAgQW4gZW1wdHkKKyAgIFRPX0ZJTEUgbWVhbnMgc3RhbmRhcmQgaW5wdXQuICBJZiByZWFzb24gaXMgTENfTEVBVkUsIGFuZAorICAgVE9fRklMRSBpcyBOVUxMLCB0aGVuIFRPX0ZJTEUsIFRPX0xJTkUgYW5kIFNZU1AgYXJlIGdpdmVuIHRoZWlyCisgICBuYXR1cmFsIHZhbHVlcyBjb25zaWRlcmluZyB0aGUgZmlsZSB3ZSBhcmUgcmV0dXJuaW5nIHRvLgorCisgICBBIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBjYW4gcmVsb2NhdGUgdGhlIHByZXZpb3VzIHNldCBvZgorICAgbWFwcywgc28gYW55IHN0b3JlZCBsaW5lX21hcCBwb2ludGVycyBzaG91bGQgbm90IGJlIHVzZWQuICAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBsaW5lX21hcCAqbGluZW1hcF9hZGQKKyAgKHN0cnVjdCBsaW5lX21hcHMgKiwgZW51bSBsY19yZWFzb24sIHVuc2lnbmVkIGludCBzeXNwLAorICAgY29uc3QgY2hhciAqdG9fZmlsZSwgbGluZW51bV90eXBlIHRvX2xpbmUpOworCisvKiBHaXZlbiBhIGxvZ2ljYWwgbGluZSwgcmV0dXJucyB0aGUgbWFwIGZyb20gd2hpY2ggdGhlIGNvcnJlc3BvbmRpbmcKKyAgIChzb3VyY2UgZmlsZSwgbGluZSkgcGFpciBjYW4gYmUgZGVkdWNlZC4gICovCitleHRlcm4gY29uc3Qgc3RydWN0IGxpbmVfbWFwICpsaW5lbWFwX2xvb2t1cAorICAoc3RydWN0IGxpbmVfbWFwcyAqLCBzb3VyY2VfbG9jYXRpb24pOworCisvKiBzb3VyY2VfbG9jYXRpb24gdmFsdWVzIGZyb20gMCB0byBSRVNFUlZFRF9MT0NBVElPTl9DT1VOVC0xIHdpbGwKKyAgIGJlIHJlc2VydmVkIGZvciBsaWJjcHAgdXNlciBhcyBzcGVjaWFsIHZhbHVlcywgbm8gdG9rZW4gZnJvbSBsaWJjcHAKKyAgIHdpbGwgY29udGFpbiBhbnkgb2YgdGhvc2UgbG9jYXRpb25zLiAgKi8KKyNkZWZpbmUgUkVTRVJWRURfTE9DQVRJT05fQ09VTlQJMgorCisvKiBDb252ZXJ0cyBhIG1hcCBhbmQgYSBzb3VyY2VfbG9jYXRpb24gdG8gc291cmNlIGxpbmUuICAqLworI2RlZmluZSBTT1VSQ0VfTElORShNQVAsIExPQykgXAorICAoKCgoTE9DKSAtIChNQVApLT5zdGFydF9sb2NhdGlvbikgPj4gKE1BUCktPmNvbHVtbl9iaXRzKSArIChNQVApLT50b19saW5lKQorCisjZGVmaW5lIFNPVVJDRV9DT0xVTU4oTUFQLCBMT0MpIFwKKyAgKCgoTE9DKSAtIChNQVApLT5zdGFydF9sb2NhdGlvbikgJiAoKDEgPDwgKE1BUCktPmNvbHVtbl9iaXRzKSAtIDEpKQorCisvKiBSZXR1cm5zIHRoZSBsYXN0IHNvdXJjZSBsaW5lIHdpdGhpbiBhIG1hcC4gIFRoaXMgaXMgdGhlIChsYXN0KSBsaW5lCisgICBvZiB0aGUgI2luY2x1ZGUsIG9yIG90aGVyIGRpcmVjdGl2ZSwgdGhhdCBjYXVzZWQgYSBtYXAgY2hhbmdlLiAgKi8KKyNkZWZpbmUgTEFTVF9TT1VSQ0VfTElORShNQVApIFwKKyAgU09VUkNFX0xJTkUgKE1BUCwgTEFTVF9TT1VSQ0VfTElORV9MT0NBVElPTiAoTUFQKSkKKyNkZWZpbmUgTEFTVF9TT1VSQ0VfQ09MVU1OKE1BUCkgXAorICBTT1VSQ0VfQ09MVU1OIChNQVAsIExBU1RfU09VUkNFX0xJTkVfTE9DQVRJT04gKE1BUCkpCisjZGVmaW5lIExBU1RfU09VUkNFX0xJTkVfTE9DQVRJT04oTUFQKSBcCisgICgoKChNQVApWzFdLnN0YXJ0X2xvY2F0aW9uIC0gMSAtIChNQVApLT5zdGFydF9sb2NhdGlvbikgXAorICAgICYgfigoMSA8PCAoTUFQKS0+Y29sdW1uX2JpdHMpIC0gMSkpCQkJICBcCisgICArIChNQVApLT5zdGFydF9sb2NhdGlvbikKKworLyogUmV0dXJucyB0aGUgbWFwIGEgZ2l2ZW4gbWFwIHdhcyBpbmNsdWRlZCBmcm9tLiAgKi8KKyNkZWZpbmUgSU5DTFVERURfRlJPTShTRVQsIE1BUCkgKCYoU0VUKS0+bWFwc1soTUFQKS0+aW5jbHVkZWRfZnJvbV0pCisKKy8qIE5vbnplcm8gaWYgdGhlIG1hcCBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBpbmNsdWRlIHN0YWNrLiAgKi8KKyNkZWZpbmUgTUFJTl9GSUxFX1AoTUFQKSAoKE1BUCktPmluY2x1ZGVkX2Zyb20gPCAwKQorCisvKiBTZXQgTE9DIHRvIGEgc291cmNlIHBvc2l0aW9uIHRoYXQgaXMgdGhlIHNhbWUgbGluZSBhcyB0aGUgbW9zdCByZWNlbnQKKyAgIGxpbmVtYXBfbGluZV9zdGFydCwgYnV0IHdpdGggdGhlIHNwZWNpZmllZCBUT19DT0xVTU4gY29sdW1uIG51bWJlci4gICovCisKKyNkZWZpbmUgTElORU1BUF9QT1NJVElPTl9GT1JfQ09MVU1OKExPQywgU0VULCBUT19DT0xVTU4pIGRvIHsgXAorICB1bnNpZ25lZCBpbnQgdG9fY29sdW1uID0gKFRPX0NPTFVNTik7IFwKKyAgc3RydWN0IGxpbmVfbWFwcyAqc2V0ID0gKFNFVCk7IFwKKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHRvX2NvbHVtbiA+PSBzZXQtPm1heF9jb2x1bW5faGludCwgMCkpIFwKKyAgICAoTE9DKSA9IGxpbmVtYXBfcG9zaXRpb25fZm9yX2NvbHVtbiAoc2V0LCB0b19jb2x1bW4pOyBcCisgIGVsc2UgeyBcCisgICAgc291cmNlX2xvY2F0aW9uIHIgPSBzZXQtPmhpZ2hlc3RfbGluZTsgXAorICAgIHIgPSByICsgdG9fY29sdW1uOyBcCisgICAgaWYgKHIgPj0gc2V0LT5oaWdoZXN0X2xvY2F0aW9uKSBcCisgICAgICBzZXQtPmhpZ2hlc3RfbG9jYXRpb24gPSByOyBcCisgICAgKExPQykgPSByOwkJCSBcCisgIH19IHdoaWxlICgwKQorICAgIAorCitleHRlcm4gc291cmNlX2xvY2F0aW9uCitsaW5lbWFwX3Bvc2l0aW9uX2Zvcl9jb2x1bW4gKHN0cnVjdCBsaW5lX21hcHMgKnNldCwgdW5zaWduZWQgaW50IHRvX2NvbHVtbik7CisKKyNlbmRpZiAvKiAhTElCQ1BQX0xJTkVfTUFQX0ggICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvbWFjaG1vZGUuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9tYWNobW9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNmEzNmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvbWFjaG1vZGUuaApAQCAtMCwwICsxLDI3MyBAQAorLyogTWFjaGluZSBtb2RlIGRlZmluaXRpb25zIGZvciBHQ0M7IGluY2x1ZGVkIGJ5IHJ0bC5oIGFuZCB0cmVlLmguCisgICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTMsIDE5OTQsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsCisgICAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBIQVZFX01BQ0hJTkVfTU9ERVMKKyNkZWZpbmUgSEFWRV9NQUNISU5FX01PREVTCisKKy8qIE1ha2UgYW4gZW51bSBjbGFzcyB0aGF0IGdpdmVzIGFsbCB0aGUgbWFjaGluZSBtb2Rlcy4gICovCisjaW5jbHVkZSAiaW5zbi1tb2Rlcy5oIgorCisvKiBHZXQgdGhlIG5hbWUgb2YgbW9kZSBNT0RFIGFzIGEgc3RyaW5nLiAgKi8KKworZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtb2RlX25hbWVbTlVNX01BQ0hJTkVfTU9ERVNdOworI2RlZmluZSBHRVRfTU9ERV9OQU1FKE1PREUpICBtb2RlX25hbWVbTU9ERV0KKworLyogTW9kZSBjbGFzc2VzLiAgKi8KKworI2luY2x1ZGUgIm1vZGUtY2xhc3Nlcy5kZWYiCisjZGVmaW5lIERFRl9NT0RFX0NMQVNTKE0pIE0KK2VudW0gbW9kZV9jbGFzcyB7IE1PREVfQ0xBU1NFUywgTUFYX01PREVfQ0xBU1MgfTsKKyN1bmRlZiBERUZfTU9ERV9DTEFTUworI3VuZGVmIE1PREVfQ0xBU1NFUworCisvKiBHZXQgdGhlIGdlbmVyYWwga2luZCBvZiBvYmplY3QgdGhhdCBtb2RlIE1PREUgcmVwcmVzZW50cworICAgKGludGVnZXIsIGZsb2F0aW5nLCBjb21wbGV4LCBldGMuKSAgKi8KKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW9kZV9jbGFzc1tOVU1fTUFDSElORV9NT0RFU107CisjZGVmaW5lIEdFVF9NT0RFX0NMQVNTKE1PREUpICAoKGVudW0gbW9kZV9jbGFzcykgbW9kZV9jbGFzc1tNT0RFXSkKKworLyogTm9uemVybyBpZiBNT0RFIGlzIGFuIGludGVncmFsIG1vZGUuICAqLworI2RlZmluZSBJTlRFR1JBTF9NT0RFX1AoTU9ERSkJCQlcCisgIChHRVRfTU9ERV9DTEFTUyAoTU9ERSkgPT0gTU9ERV9JTlQJCVwKKyAgIHx8IEdFVF9NT0RFX0NMQVNTIChNT0RFKSA9PSBNT0RFX1BBUlRJQUxfSU5UIFwKKyAgIHx8IEdFVF9NT0RFX0NMQVNTIChNT0RFKSA9PSBNT0RFX0NPTVBMRVhfSU5UIFwKKyAgIHx8IEdFVF9NT0RFX0NMQVNTIChNT0RFKSA9PSBNT0RFX1ZFQ1RPUl9JTlQpCisKKy8qIE5vbnplcm8gaWYgTU9ERSBpcyBhIGZsb2F0aW5nLXBvaW50IG1vZGUuICAqLworI2RlZmluZSBGTE9BVF9NT0RFX1AoTU9ERSkJCVwKKyAgKEdFVF9NT0RFX0NMQVNTIChNT0RFKSA9PSBNT0RFX0ZMT0FUCVwKKyAgIHx8IEdFVF9NT0RFX0NMQVNTIChNT0RFKSA9PSBNT0RFX0RFQ0lNQUxfRkxPQVQgXAorICAgfHwgR0VUX01PREVfQ0xBU1MgKE1PREUpID09IE1PREVfQ09NUExFWF9GTE9BVCBcCisgICB8fCBHRVRfTU9ERV9DTEFTUyAoTU9ERSkgPT0gTU9ERV9WRUNUT1JfRkxPQVQpCisKKy8qIE5vbnplcm8gaWYgTU9ERSBpcyBhIGNvbXBsZXggbW9kZS4gICovCisjZGVmaW5lIENPTVBMRVhfTU9ERV9QKE1PREUpCQkJXAorICAoR0VUX01PREVfQ0xBU1MgKE1PREUpID09IE1PREVfQ09NUExFWF9JTlQJXAorICAgfHwgR0VUX01PREVfQ0xBU1MgKE1PREUpID09IE1PREVfQ09NUExFWF9GTE9BVCkKKworLyogTm9uemVybyBpZiBNT0RFIGlzIGEgdmVjdG9yIG1vZGUuICAqLworI2RlZmluZSBWRUNUT1JfTU9ERV9QKE1PREUpCQkJXAorICAoR0VUX01PREVfQ0xBU1MgKE1PREUpID09IE1PREVfVkVDVE9SX0lOVAlcCisgICB8fCBHRVRfTU9ERV9DTEFTUyAoTU9ERSkgPT0gTU9ERV9WRUNUT1JfRkxPQVQJXAorICAgfHwgR0VUX01PREVfQ0xBU1MgKE1PREUpID09IE1PREVfVkVDVE9SX0ZSQUNUCVwKKyAgIHx8IEdFVF9NT0RFX0NMQVNTIChNT0RFKSA9PSBNT0RFX1ZFQ1RPUl9VRlJBQ1QJXAorICAgfHwgR0VUX01PREVfQ0xBU1MgKE1PREUpID09IE1PREVfVkVDVE9SX0FDQ1VNCVwKKyAgIHx8IEdFVF9NT0RFX0NMQVNTIChNT0RFKSA9PSBNT0RFX1ZFQ1RPUl9VQUNDVU0pCisKKy8qIE5vbnplcm8gaWYgTU9ERSBpcyBhIHNjYWxhciBpbnRlZ3JhbCBtb2RlLiAgKi8KKyNkZWZpbmUgU0NBTEFSX0lOVF9NT0RFX1AoTU9ERSkJCQlcCisgIChHRVRfTU9ERV9DTEFTUyAoTU9ERSkgPT0gTU9ERV9JTlQJCVwKKyAgIHx8IEdFVF9NT0RFX0NMQVNTIChNT0RFKSA9PSBNT0RFX1BBUlRJQUxfSU5UKQorCisvKiBOb256ZXJvIGlmIE1PREUgaXMgYSBzY2FsYXIgZmxvYXRpbmcgcG9pbnQgbW9kZS4gICovCisjZGVmaW5lIFNDQUxBUl9GTE9BVF9NT0RFX1AoTU9ERSkJCVwKKyAgKEdFVF9NT0RFX0NMQVNTIChNT0RFKSA9PSBNT0RFX0ZMT0FUCQlcCisgICB8fCBHRVRfTU9ERV9DTEFTUyAoTU9ERSkgPT0gTU9ERV9ERUNJTUFMX0ZMT0FUKQorCisvKiBOb256ZXJvIGlmIE1PREUgaXMgYSBkZWNpbWFsIGZsb2F0aW5nIHBvaW50IG1vZGUuICAqLworI2RlZmluZSBERUNJTUFMX0ZMT0FUX01PREVfUChNT0RFKQkJXAorICAoR0VUX01PREVfQ0xBU1MgKE1PREUpID09IE1PREVfREVDSU1BTF9GTE9BVCkKKworLyogTm9uemVybyBpZiBNT0RFIGlzIGEgc2NhbGFyIGZyYWN0IG1vZGUuICAqLworI2RlZmluZSBTQ0FMQVJfRlJBQ1RfTU9ERV9QKE1PREUpCVwKKyAgKEdFVF9NT0RFX0NMQVNTIChNT0RFKSA9PSBNT0RFX0ZSQUNUKQorCisvKiBOb256ZXJvIGlmIE1PREUgaXMgYSBzY2FsYXIgdWZyYWN0IG1vZGUuICAqLworI2RlZmluZSBTQ0FMQVJfVUZSQUNUX01PREVfUChNT0RFKQlcCisgIChHRVRfTU9ERV9DTEFTUyAoTU9ERSkgPT0gTU9ERV9VRlJBQ1QpCisKKy8qIE5vbnplcm8gaWYgTU9ERSBpcyBhIHNjYWxhciBmcmFjdCBvciB1ZnJhY3QgbW9kZS4gICovCisjZGVmaW5lIEFMTF9TQ0FMQVJfRlJBQ1RfTU9ERV9QKE1PREUpCVwKKyAgKFNDQUxBUl9GUkFDVF9NT0RFX1AgKE1PREUpIHx8IFNDQUxBUl9VRlJBQ1RfTU9ERV9QIChNT0RFKSkKKworLyogTm9uemVybyBpZiBNT0RFIGlzIGEgc2NhbGFyIGFjY3VtIG1vZGUuICAqLworI2RlZmluZSBTQ0FMQVJfQUNDVU1fTU9ERV9QKE1PREUpCVwKKyAgKEdFVF9NT0RFX0NMQVNTIChNT0RFKSA9PSBNT0RFX0FDQ1VNKQorCisvKiBOb256ZXJvIGlmIE1PREUgaXMgYSBzY2FsYXIgdWFjY3VtIG1vZGUuICAqLworI2RlZmluZSBTQ0FMQVJfVUFDQ1VNX01PREVfUChNT0RFKQlcCisgIChHRVRfTU9ERV9DTEFTUyAoTU9ERSkgPT0gTU9ERV9VQUNDVU0pCisKKy8qIE5vbnplcm8gaWYgTU9ERSBpcyBhIHNjYWxhciBhY2N1bSBvciB1YWNjdW0gbW9kZS4gICovCisjZGVmaW5lIEFMTF9TQ0FMQVJfQUNDVU1fTU9ERV9QKE1PREUpCVwKKyAgKFNDQUxBUl9BQ0NVTV9NT0RFX1AgKE1PREUpIHx8IFNDQUxBUl9VQUNDVU1fTU9ERV9QIChNT0RFKSkKKworLyogTm9uemVybyBpZiBNT0RFIGlzIGEgc2NhbGFyIGZyYWN0IG9yIGFjY3VtIG1vZGUuICAqLworI2RlZmluZSBTSUdORURfU0NBTEFSX0ZJWEVEX1BPSU5UX01PREVfUChNT0RFKQlcCisgIChTQ0FMQVJfRlJBQ1RfTU9ERV9QIChNT0RFKSB8fCBTQ0FMQVJfQUNDVU1fTU9ERV9QIChNT0RFKSkKKworLyogTm9uemVybyBpZiBNT0RFIGlzIGEgc2NhbGFyIHVmcmFjdCBvciB1YWNjdW0gbW9kZS4gICovCisjZGVmaW5lIFVOU0lHTkVEX1NDQUxBUl9GSVhFRF9QT0lOVF9NT0RFX1AoTU9ERSkJXAorICAoU0NBTEFSX1VGUkFDVF9NT0RFX1AgKE1PREUpIHx8IFNDQUxBUl9VQUNDVU1fTU9ERV9QIChNT0RFKSkKKworLyogTm9uemVybyBpZiBNT0RFIGlzIGEgc2NhbGFyIGZyYWN0LCB1ZnJhY3QsIGFjY3VtIG9yIHVhY2N1bSBtb2RlLiAgKi8KKyNkZWZpbmUgQUxMX1NDQUxBUl9GSVhFRF9QT0lOVF9NT0RFX1AoTU9ERSkJXAorICAoU0lHTkVEX1NDQUxBUl9GSVhFRF9QT0lOVF9NT0RFX1AgKE1PREUpCVwKKyAgIHx8IFVOU0lHTkVEX1NDQUxBUl9GSVhFRF9QT0lOVF9NT0RFX1AgKE1PREUpKQorCisvKiBOb256ZXJvIGlmIE1PREUgaXMgYSBzY2FsYXIvdmVjdG9yIGZyYWN0IG1vZGUuICAqLworI2RlZmluZSBGUkFDVF9NT0RFX1AoTU9ERSkJCVwKKyAgKEdFVF9NT0RFX0NMQVNTIChNT0RFKSA9PSBNT0RFX0ZSQUNUCVwKKyAgIHx8IEdFVF9NT0RFX0NMQVNTIChNT0RFKSA9PSBNT0RFX1ZFQ1RPUl9GUkFDVCkKKworLyogTm9uemVybyBpZiBNT0RFIGlzIGEgc2NhbGFyL3ZlY3RvciB1ZnJhY3QgbW9kZS4gICovCisjZGVmaW5lIFVGUkFDVF9NT0RFX1AoTU9ERSkJCVwKKyAgKEdFVF9NT0RFX0NMQVNTIChNT0RFKSA9PSBNT0RFX1VGUkFDVAlcCisgICB8fCBHRVRfTU9ERV9DTEFTUyAoTU9ERSkgPT0gTU9ERV9WRUNUT1JfVUZSQUNUKQorCisvKiBOb256ZXJvIGlmIE1PREUgaXMgYSBzY2FsYXIvdmVjdG9yIGZyYWN0IG9yIHVmcmFjdCBtb2RlLiAgKi8KKyNkZWZpbmUgQUxMX0ZSQUNUX01PREVfUChNT0RFKQkJXAorICAoRlJBQ1RfTU9ERV9QIChNT0RFKSB8fCBVRlJBQ1RfTU9ERV9QIChNT0RFKSkKKworLyogTm9uemVybyBpZiBNT0RFIGlzIGEgc2NhbGFyL3ZlY3RvciBhY2N1bSBtb2RlLiAgKi8KKyNkZWZpbmUgQUNDVU1fTU9ERV9QKE1PREUpCQlcCisgIChHRVRfTU9ERV9DTEFTUyAoTU9ERSkgPT0gTU9ERV9BQ0NVTQlcCisgICB8fCBHRVRfTU9ERV9DTEFTUyAoTU9ERSkgPT0gTU9ERV9WRUNUT1JfQUNDVU0pCisKKy8qIE5vbnplcm8gaWYgTU9ERSBpcyBhIHNjYWxhci92ZWN0b3IgdWFjY3VtIG1vZGUuICAqLworI2RlZmluZSBVQUNDVU1fTU9ERV9QKE1PREUpCQlcCisgIChHRVRfTU9ERV9DTEFTUyAoTU9ERSkgPT0gTU9ERV9VQUNDVU0JXAorICAgfHwgR0VUX01PREVfQ0xBU1MgKE1PREUpID09IE1PREVfVkVDVE9SX1VBQ0NVTSkKKworLyogTm9uemVybyBpZiBNT0RFIGlzIGEgc2NhbGFyL3ZlY3RvciBhY2N1bSBvciB1YWNjdW0gbW9kZS4gICovCisjZGVmaW5lIEFMTF9BQ0NVTV9NT0RFX1AoTU9ERSkJCVwKKyAgKEFDQ1VNX01PREVfUCAoTU9ERSkgfHwgVUFDQ1VNX01PREVfUCAoTU9ERSkpCisKKy8qIE5vbnplcm8gaWYgTU9ERSBpcyBhIHNjYWxhci92ZWN0b3IgZnJhY3Qgb3IgYWNjdW0gbW9kZS4gICovCisjZGVmaW5lIFNJR05FRF9GSVhFRF9QT0lOVF9NT0RFX1AoTU9ERSkJCVwKKyAgKEZSQUNUX01PREVfUCAoTU9ERSkgfHwgQUNDVU1fTU9ERV9QIChNT0RFKSkKKworLyogTm9uemVybyBpZiBNT0RFIGlzIGEgc2NhbGFyL3ZlY3RvciB1ZnJhY3Qgb3IgdWFjY3VtIG1vZGUuICAqLworI2RlZmluZSBVTlNJR05FRF9GSVhFRF9QT0lOVF9NT0RFX1AoTU9ERSkJXAorICAoVUZSQUNUX01PREVfUCAoTU9ERSkgfHwgVUFDQ1VNX01PREVfUCAoTU9ERSkpCisKKy8qIE5vbnplcm8gaWYgTU9ERSBpcyBhIHNjYWxhci92ZWN0b3IgZnJhY3QsIHVmcmFjdCwgYWNjdW0gb3IgdWFjY3VtIG1vZGUuICAqLworI2RlZmluZSBBTExfRklYRURfUE9JTlRfTU9ERV9QKE1PREUpCQlcCisgIChTSUdORURfRklYRURfUE9JTlRfTU9ERV9QIChNT0RFKQkJXAorICAgfHwgVU5TSUdORURfRklYRURfUE9JTlRfTU9ERV9QIChNT0RFKSkKKworLyogTm9uemVybyBpZiBDTEFTUyBtb2RlcyBjYW4gYmUgd2lkZW5lZC4gICovCisjZGVmaW5lIENMQVNTX0hBU19XSURFUl9NT0RFU19QKENMQVNTKSAgICAgICAgIFwKKyAgKENMQVNTID09IE1PREVfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgfHwgQ0xBU1MgPT0gTU9ERV9GTE9BVCAgICAgICAgICAgICAgICAgICAgICBcCisgICB8fCBDTEFTUyA9PSBNT0RFX0RFQ0lNQUxfRkxPQVQgICAgICAgICAgICAgIFwKKyAgIHx8IENMQVNTID09IE1PREVfQ09NUExFWF9GTE9BVCAgICAgICAgICAgICAgXAorICAgfHwgQ0xBU1MgPT0gTU9ERV9GUkFDVCAgICAgICAgICAgICAgICAgICAgICBcCisgICB8fCBDTEFTUyA9PSBNT0RFX1VGUkFDVCAgICAgICAgICAgICAgICAgICAgIFwKKyAgIHx8IENMQVNTID09IE1PREVfQUNDVU0gICAgICAgICAgICAgICAgICAgICAgXAorICAgfHwgQ0xBU1MgPT0gTU9ERV9VQUNDVU0pCisKKy8qIEdldCB0aGUgc2l6ZSBpbiBieXRlcyBhbmQgYml0cyBvZiBhbiBvYmplY3Qgb2YgbW9kZSBNT0RFLiAgKi8KKworZXh0ZXJuIENPTlNUX01PREVfU0laRSB1bnNpZ25lZCBjaGFyIG1vZGVfc2l6ZVtOVU1fTUFDSElORV9NT0RFU107CisjZGVmaW5lIEdFVF9NT0RFX1NJWkUoTU9ERSkgICAgKCh1bnNpZ25lZCBzaG9ydCkgbW9kZV9zaXplW01PREVdKQorI2RlZmluZSBHRVRfTU9ERV9CSVRTSVpFKE1PREUpICgodW5zaWduZWQgc2hvcnQpIChHRVRfTU9ERV9TSVpFIChNT0RFKSAqIEJJVFNfUEVSX1VOSVQpKQorCisvKiBHZXQgdGhlIG51bWJlciBvZiB2YWx1ZSBiaXRzIG9mIGFuIG9iamVjdCBvZiBtb2RlIE1PREUuICAqLworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IG1vZGVfcHJlY2lzaW9uW05VTV9NQUNISU5FX01PREVTXTsKKyNkZWZpbmUgR0VUX01PREVfUFJFQ0lTSU9OKE1PREUpICBtb2RlX3ByZWNpc2lvbltNT0RFXQorCisvKiBHZXQgdGhlIG51bWJlciBvZiBpbnRlZ3JhbCBiaXRzIG9mIGFuIG9iamVjdCBvZiBtb2RlIE1PREUuICAqLworZXh0ZXJuIENPTlNUX01PREVfSUJJVCB1bnNpZ25lZCBjaGFyIG1vZGVfaWJpdFtOVU1fTUFDSElORV9NT0RFU107CisjZGVmaW5lIEdFVF9NT0RFX0lCSVQoTU9ERSkgbW9kZV9pYml0W01PREVdCisKKy8qIEdldCB0aGUgbnVtYmVyIG9mIGZyYWN0aW9uYWwgYml0cyBvZiBhbiBvYmplY3Qgb2YgbW9kZSBNT0RFLiAgKi8KK2V4dGVybiBDT05TVF9NT0RFX0ZCSVQgdW5zaWduZWQgY2hhciBtb2RlX2ZiaXRbTlVNX01BQ0hJTkVfTU9ERVNdOworI2RlZmluZSBHRVRfTU9ERV9GQklUKE1PREUpIG1vZGVfZmJpdFtNT0RFXQorCisvKiBHZXQgYSBiaXRtYXNrIGNvbnRhaW5pbmcgMSBmb3IgYWxsIGJpdHMgaW4gYSB3b3JkCisgICB0aGF0IGZpdCB3aXRoaW4gbW9kZSBNT0RFLiAgKi8KKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgbW9kZV9tYXNrX2FycmF5W05VTV9NQUNISU5FX01PREVTXTsKKworI2RlZmluZSBHRVRfTU9ERV9NQVNLKE1PREUpIG1vZGVfbWFza19hcnJheVtNT0RFXQorCisvKiBSZXR1cm4gdGhlIG1vZGUgb2YgdGhlIGlubmVyIGVsZW1lbnRzIGluIGEgdmVjdG9yLiAgKi8KKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW9kZV9pbm5lcltOVU1fTUFDSElORV9NT0RFU107CisjZGVmaW5lIEdFVF9NT0RFX0lOTkVSKE1PREUpICgoZW51bSBtYWNoaW5lX21vZGUpIG1vZGVfaW5uZXJbTU9ERV0pCisKKy8qIEdldCB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgYmFzaWMgcGFydHMgb2YgYW4gb2JqZWN0IG9mIG1vZGUgTU9ERS4gICovCisKKyNkZWZpbmUgR0VUX01PREVfVU5JVF9TSVpFKE1PREUpCQlcCisgIChHRVRfTU9ERV9JTk5FUiAoTU9ERSkgPT0gVk9JRG1vZGUJCVwKKyAgID8gR0VUX01PREVfU0laRSAoTU9ERSkJCQlcCisgICA6IEdFVF9NT0RFX1NJWkUgKEdFVF9NT0RFX0lOTkVSIChNT0RFKSkpCisKKy8qIEdldCB0aGUgbnVtYmVyIG9mIHVuaXRzIGluIHRoZSBvYmplY3QuICAqLworCitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBtb2RlX251bml0c1tOVU1fTUFDSElORV9NT0RFU107CisjZGVmaW5lIEdFVF9NT0RFX05VTklUUyhNT0RFKSAgbW9kZV9udW5pdHNbTU9ERV0KKworLyogR2V0IHRoZSBuZXh0IHdpZGVyIG5hdHVyYWwgbW9kZSAoZWcsIFFJIC0+IEhJIC0+IFNJIC0+IERJIC0+IFRJKS4gICovCisKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIG1vZGVfd2lkZXJbTlVNX01BQ0hJTkVfTU9ERVNdOworI2RlZmluZSBHRVRfTU9ERV9XSURFUl9NT0RFKE1PREUpICgoZW51bSBtYWNoaW5lX21vZGUpIG1vZGVfd2lkZXJbTU9ERV0pCisKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIG1vZGVfMnh3aWRlcltOVU1fTUFDSElORV9NT0RFU107CisjZGVmaW5lIEdFVF9NT0RFXzJYV0lERVJfTU9ERShNT0RFKSAoKGVudW0gbWFjaGluZV9tb2RlKSBtb2RlXzJ4d2lkZXJbTU9ERV0pCisKKy8qIFJldHVybiB0aGUgbW9kZSBmb3IgZGF0YSBvZiBhIGdpdmVuIHNpemUgU0laRSBhbmQgbW9kZSBjbGFzcyBDTEFTUy4KKyAgIElmIExJTUlUIGlzIG5vbnplcm8sIHRoZW4gZG9uJ3QgdXNlIG1vZGVzIGJpZ2dlciB0aGFuIE1BWF9GSVhFRF9NT0RFX1NJWkUuCisgICBUaGUgdmFsdWUgaXMgQkxLbW9kZSBpZiBubyBvdGhlciBtb2RlIGlzIGZvdW5kLiAgKi8KKworZXh0ZXJuIGVudW0gbWFjaGluZV9tb2RlIG1vZGVfZm9yX3NpemUgKHVuc2lnbmVkIGludCwgZW51bSBtb2RlX2NsYXNzLCBpbnQpOworCisvKiBTaW1pbGFyLCBidXQgZmluZCB0aGUgc21hbGxlc3QgbW9kZSBmb3IgYSBnaXZlbiB3aWR0aC4gICovCisKK2V4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSBzbWFsbGVzdF9tb2RlX2Zvcl9zaXplICh1bnNpZ25lZCBpbnQsCisJCQkJCQkgZW51bSBtb2RlX2NsYXNzKTsKKworCisvKiBSZXR1cm4gYW4gaW50ZWdlciBtb2RlIG9mIHRoZSBleGFjdCBzYW1lIHNpemUgYXMgdGhlIGlucHV0IG1vZGUsCisgICBvciBCTEttb2RlIG9uIGZhaWx1cmUuICAqLworCitleHRlcm4gZW51bSBtYWNoaW5lX21vZGUgaW50X21vZGVfZm9yX21vZGUgKGVudW0gbWFjaGluZV9tb2RlKTsKKworLyogRmluZCB0aGUgYmVzdCBtb2RlIHRvIHVzZSB0byBhY2Nlc3MgYSBiaXQgZmllbGQuICAqLworCitleHRlcm4gZW51bSBtYWNoaW5lX21vZGUgZ2V0X2Jlc3RfbW9kZSAoaW50LCBpbnQsIHVuc2lnbmVkIGludCwKKwkJCQkJZW51bSBtYWNoaW5lX21vZGUsIGludCk7CisKKy8qIERldGVybWluZSBhbGlnbm1lbnQsIDE8PXJlc3VsdDw9QklHR0VTVF9BTElHTk1FTlQuICAqLworCitleHRlcm4gQ09OU1RfTU9ERV9CQVNFX0FMSUdOIHVuc2lnbmVkIGNoYXIgbW9kZV9iYXNlX2FsaWduW05VTV9NQUNISU5FX01PREVTXTsKKworZXh0ZXJuIHVuc2lnbmVkIGdldF9tb2RlX2FsaWdubWVudCAoZW51bSBtYWNoaW5lX21vZGUpOworCisjZGVmaW5lIEdFVF9NT0RFX0FMSUdOTUVOVChNT0RFKSBnZXRfbW9kZV9hbGlnbm1lbnQgKE1PREUpCisKKy8qIEZvciBlYWNoIGNsYXNzLCBnZXQgdGhlIG5hcnJvd2VzdCBtb2RlIGluIHRoYXQgY2xhc3MuICAqLworCitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBjbGFzc19uYXJyb3dlc3RfbW9kZVtNQVhfTU9ERV9DTEFTU107CisjZGVmaW5lIEdFVF9DTEFTU19OQVJST1dFU1RfTU9ERShDTEFTUykgXAorICAoKGVudW0gbWFjaGluZV9tb2RlKSBjbGFzc19uYXJyb3dlc3RfbW9kZVtDTEFTU10pCisKKy8qIERlZmluZSB0aGUgaW50ZWdlciBtb2RlcyB3aG9zZSBzaXplcyBhcmUgQklUU19QRVJfVU5JVCBhbmQgQklUU19QRVJfV09SRAorICAgYW5kIHRoZSBtb2RlIHdob3NlIGNsYXNzIGlzIFBtb2RlIGFuZCB3aG9zZSBzaXplIGlzIFBPSU5URVJfU0laRS4gICovCisKK2V4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSBieXRlX21vZGU7CitleHRlcm4gZW51bSBtYWNoaW5lX21vZGUgd29yZF9tb2RlOworZXh0ZXJuIGVudW0gbWFjaGluZV9tb2RlIHB0cl9tb2RlOworCisvKiBUYXJnZXQtZGVwZW5kZW50IG1hY2hpbmUgbW9kZSBpbml0aWFsaXphdGlvbiAtIGluIGluc24tbW9kZXMuYy4gICovCitleHRlcm4gdm9pZCBpbml0X2FkanVzdF9tYWNoaW5lX21vZGVzICh2b2lkKTsKKworI2VuZGlmIC8qIG5vdCBIQVZFX01BQ0hJTkVfTU9ERVMgKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9tZDUuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9tZDUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2ZmNGUxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL21kNS5oCkBAIC0wLDAgKzEsMTQ5IEBACisvKiBtZDUuaCAtIERlY2xhcmF0aW9uIG9mIGZ1bmN0aW9ucyBhbmQgZGF0YSB0eXBlcyB1c2VkIGZvciBNRDUgc3VtCisgICBjb21wdXRpbmcgbGlicmFyeSBmdW5jdGlvbnMuCisgICBDb3B5cmlnaHQgMTk5NSwgMTk5NiwgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIE5PVEU6IFRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRoaXMgZmlsZSBpcyBtYWludGFpbmVkIHdpdGggdGhlIEdOVSBDCisgICBMaWJyYXJ5LiAgQnVncyBjYW4gYmUgcmVwb3J0ZWQgdG8gYnVnLWdsaWJjQHByZXAuYWkubWl0LmVkdS4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisjaWZuZGVmIF9NRDVfSAorI2RlZmluZSBfTUQ1X0ggMQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmIGRlZmluZWQgSEFWRV9MSU1JVFNfSCB8fCBfTElCQworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiYW5zaWRlY2wuaCIKKworLyogVGhlIGZvbGxvd2luZyBjb250b3J0aW9ucyBhcmUgYW4gYXR0ZW1wdCB0byB1c2UgdGhlIEMgcHJlcHJvY2Vzc29yCisgICB0byBkZXRlcm1pbmUgYW4gdW5zaWduZWQgaW50ZWdyYWwgdHlwZSB0aGF0IGlzIDMyIGJpdHMgd2lkZS4gIEFuCisgICBhbHRlcm5hdGl2ZSBhcHByb2FjaCBpcyB0byB1c2UgYXV0b2NvbmYncyBBQ19DSEVDS19TSVpFT0YgbWFjcm8sIGJ1dAorICAgZG9pbmcgdGhhdCB3b3VsZCByZXF1aXJlIHRoYXQgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgY29tcGlsZSBhbmQgKnJ1bioKKyAgIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZS4gIExvY2FsbHkgcnVubmluZyBjcm9zcy1jb21waWxlZCBleGVjdXRhYmxlcworICAgaXMgdXN1YWxseSBub3QgcG9zc2libGUuICAqLworCisjaWZkZWYgX0xJQkMKKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cit0eXBlZGVmIHVfaW50MzJfdCBtZDVfdWludDMyOwordHlwZWRlZiB1aW50cHRyX3QgbWQ1X3VpbnRwdHI7CisjZWxzZQorIyAgZGVmaW5lIElOVF9NQVhfMzJfQklUUyAyMTQ3NDgzNjQ3CisKKy8qIElmIFVJTlRfTUFYIGlzbid0IGRlZmluZWQsIGFzc3VtZSBpdCdzIGEgMzItYml0IHR5cGUuCisgICBUaGlzIHNob3VsZCBiZSB2YWxpZCBmb3IgYWxsIHN5c3RlbXMgR05VIGNhcmVzIGFib3V0IGJlY2F1c2UKKyAgIHRoYXQgZG9lc24ndCBpbmNsdWRlIDE2LWJpdCBzeXN0ZW1zLCBhbmQgb25seSBtb2Rlcm4gc3lzdGVtcworICAgKHRoYXQgY2VydGFpbmx5IGhhdmUgPGxpbWl0cy5oPikgaGF2ZSA2NCstYml0IGludGVncmFsIHR5cGVzLiAgKi8KKworIyBpZm5kZWYgSU5UX01BWAorIyAgZGVmaW5lIElOVF9NQVggSU5UX01BWF8zMl9CSVRTCisjIGVuZGlmCisKKyMgaWYgSU5UX01BWCA9PSBJTlRfTUFYXzMyX0JJVFMKKyAgIHR5cGVkZWYgdW5zaWduZWQgaW50IG1kNV91aW50MzI7CisjIGVsc2UKKyMgIGlmIFNIUlRfTUFYID09IElOVF9NQVhfMzJfQklUUworICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbWQ1X3VpbnQzMjsKKyMgIGVsc2UKKyMgICBpZiBMT05HX01BWCA9PSBJTlRfTUFYXzMyX0JJVFMKKyAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIG1kNV91aW50MzI7CisjICAgZWxzZQorICAgICAvKiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgaW50ZW5kZWQgdG8gZXZva2UgYW4gZXJyb3IuCisgICAgICAgIFVzaW5nICNlcnJvciBpcyBub3QgcG9ydGFibGUgZW5vdWdoLiAgKi8KKyAgICAgIkNhbm5vdCBkZXRlcm1pbmUgdW5zaWduZWQgMzItYml0IGRhdGEgdHlwZS4iCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisvKiBXZSBoYXZlIHRvIG1ha2UgYSBndWVzcyBhYm91dCB0aGUgaW50ZWdlciB0eXBlIGVxdWl2YWxlbnQgaW4gc2l6ZQorICAgdG8gcG9pbnRlcnMgd2hpY2ggc2hvdWxkIGFsd2F5cyBiZSBjb3JyZWN0LiAgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgbWQ1X3VpbnRwdHI7CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBTdHJ1Y3R1cmUgdG8gc2F2ZSBzdGF0ZSBvZiBjb21wdXRhdGlvbiBiZXR3ZWVuIHRoZSBzaW5nbGUgc3RlcHMuICAqLworc3RydWN0IG1kNV9jdHgKK3sKKyAgbWQ1X3VpbnQzMiBBOworICBtZDVfdWludDMyIEI7CisgIG1kNV91aW50MzIgQzsKKyAgbWQ1X3VpbnQzMiBEOworCisgIG1kNV91aW50MzIgdG90YWxbMl07CisgIG1kNV91aW50MzIgYnVmbGVuOworICBjaGFyIGJ1ZmZlclsxMjhdIEFUVFJJQlVURV9BTElHTkVEX0FMSUdOT0YobWQ1X3VpbnQzMik7Cit9OworCisvKgorICogVGhlIGZvbGxvd2luZyB0aHJlZSBmdW5jdGlvbnMgYXJlIGJ1aWxkIHVwIHRoZSBsb3cgbGV2ZWwgdXNlZCBpbgorICogdGhlIGZ1bmN0aW9ucyBgbWQ1X3N0cmVhbScgYW5kIGBtZDVfYnVmZmVyJy4KKyAqLworCisvKiBJbml0aWFsaXplIHN0cnVjdHVyZSBjb250YWluaW5nIHN0YXRlIG9mIGNvbXB1dGF0aW9uLgorICAgKFJGQyAxMzIxLCAzLjM6IFN0ZXAgMykgICovCitleHRlcm4gdm9pZCBtZDVfaW5pdF9jdHggKHN0cnVjdCBtZDVfY3R4ICpjdHgpOworCisvKiBTdGFydGluZyB3aXRoIHRoZSByZXN1bHQgb2YgZm9ybWVyIGNhbGxzIG9mIHRoaXMgZnVuY3Rpb24gKG9yIHRoZQorICAgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gdXBkYXRlIHRoZSBjb250ZXh0IGZvciB0aGUgbmV4dCBMRU4gYnl0ZXMKKyAgIHN0YXJ0aW5nIGF0IEJVRkZFUi4KKyAgIEl0IGlzIG5lY2Vzc2FyeSB0aGF0IExFTiBpcyBhIG11bHRpcGxlIG9mIDY0ISEhICovCitleHRlcm4gdm9pZCBtZDVfcHJvY2Vzc19ibG9jayAoY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtZDVfY3R4ICpjdHgpOworCisvKiBTdGFydGluZyB3aXRoIHRoZSByZXN1bHQgb2YgZm9ybWVyIGNhbGxzIG9mIHRoaXMgZnVuY3Rpb24gKG9yIHRoZQorICAgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gdXBkYXRlIHRoZSBjb250ZXh0IGZvciB0aGUgbmV4dCBMRU4gYnl0ZXMKKyAgIHN0YXJ0aW5nIGF0IEJVRkZFUi4KKyAgIEl0IGlzIE5PVCByZXF1aXJlZCB0aGF0IExFTiBpcyBhIG11bHRpcGxlIG9mIDY0LiAgKi8KK2V4dGVybiB2b2lkIG1kNV9wcm9jZXNzX2J5dGVzIChjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1kNV9jdHggKmN0eCk7CisKKy8qIFByb2Nlc3MgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGUgYnVmZmVyIGFuZCBwdXQgcmVzdWx0IGZyb20gQ1RYCisgICBpbiBmaXJzdCAxNiBieXRlcyBmb2xsb3dpbmcgUkVTQlVGLiAgVGhlIHJlc3VsdCBpcyBhbHdheXMgaW4gbGl0dGxlCisgICBlbmRpYW4gYnl0ZSBvcmRlciwgc28gdGhhdCBhIGJ5dGUtd2lzZSBvdXRwdXQgeWllbGRzIHRvIHRoZSB3YW50ZWQKKyAgIEFTQ0lJIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtZXNzYWdlIGRpZ2VzdC4KKworICAgSU1QT1JUQU5UOiBPbiBzb21lIHN5c3RlbXMgaXQgaXMgcmVxdWlyZWQgdGhhdCBSRVNCVUYgaXMgY29ycmVjdGx5CisgICBhbGlnbmVkIGZvciBhIDMyIGJpdHMgdmFsdWUuICAqLworZXh0ZXJuIHZvaWQgKm1kNV9maW5pc2hfY3R4IChzdHJ1Y3QgbWQ1X2N0eCAqY3R4LCB2b2lkICpyZXNidWYpOworCisKKy8qIFB1dCByZXN1bHQgZnJvbSBDVFggaW4gZmlyc3QgMTYgYnl0ZXMgZm9sbG93aW5nIFJFU0JVRi4gIFRoZSByZXN1bHQgaXMKKyAgIGFsd2F5cyBpbiBsaXR0bGUgZW5kaWFuIGJ5dGUgb3JkZXIsIHNvIHRoYXQgYSBieXRlLXdpc2Ugb3V0cHV0IHlpZWxkcworICAgdG8gdGhlIHdhbnRlZCBBU0NJSSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWVzc2FnZSBkaWdlc3QuCisKKyAgIElNUE9SVEFOVDogT24gc29tZSBzeXN0ZW1zIGl0IGlzIHJlcXVpcmVkIHRoYXQgUkVTQlVGIGlzIGNvcnJlY3RseQorICAgYWxpZ25lZCBmb3IgYSAzMiBiaXRzIHZhbHVlLiAgKi8KK2V4dGVybiB2b2lkICptZDVfcmVhZF9jdHggKGNvbnN0IHN0cnVjdCBtZDVfY3R4ICpjdHgsIHZvaWQgKnJlc2J1Zik7CisKKworLyogQ29tcHV0ZSBNRDUgbWVzc2FnZSBkaWdlc3QgZm9yIGJ5dGVzIHJlYWQgZnJvbSBTVFJFQU0uICBUaGUKKyAgIHJlc3VsdGluZyBtZXNzYWdlIGRpZ2VzdCBudW1iZXIgd2lsbCBiZSB3cml0dGVuIGludG8gdGhlIDE2IGJ5dGVzCisgICBiZWdpbm5pbmcgYXQgUkVTQkxPQ0suICAqLworZXh0ZXJuIGludCBtZDVfc3RyZWFtIChGSUxFICpzdHJlYW0sIHZvaWQgKnJlc2Jsb2NrKTsKKworLyogQ29tcHV0ZSBNRDUgbWVzc2FnZSBkaWdlc3QgZm9yIExFTiBieXRlcyBiZWdpbm5pbmcgYXQgQlVGRkVSLiAgVGhlCisgICByZXN1bHQgaXMgYWx3YXlzIGluIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlciwgc28gdGhhdCBhIGJ5dGUtd2lzZQorICAgb3V0cHV0IHlpZWxkcyB0byB0aGUgd2FudGVkIEFTQ0lJIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtZXNzYWdlCisgICBkaWdlc3QuICAqLworZXh0ZXJuIHZvaWQgKm1kNV9idWZmZXIgKGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbiwgdm9pZCAqcmVzYmxvY2spOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9tb2RlLWNsYXNzZXMuZGVmIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL21vZGUtY2xhc3Nlcy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwMTdlYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9tb2RlLWNsYXNzZXMuZGVmCkBAIC0wLDAgKzEsMzkgQEAKKy8qIE1hY2hpbmUgbW9kZSBjbGFzcyBkZWZpbml0aW9ucyBmb3IgR0NDLgorICAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNkZWZpbmUgTU9ERV9DTEFTU0VTCQkJCQkJCSAgIFwKKyAgREVGX01PREVfQ0xBU1MgKE1PREVfUkFORE9NKSwJCS8qIG90aGVyICovCQkJICAgXAorICBERUZfTU9ERV9DTEFTUyAoTU9ERV9DQyksCQkvKiBjb25kaXRpb24gY29kZSBpbiBhIHJlZ2lzdGVyICovIFwKKyAgREVGX01PREVfQ0xBU1MgKE1PREVfSU5UKSwJCS8qIGludGVnZXIgKi8JCQkgICBcCisgIERFRl9NT0RFX0NMQVNTIChNT0RFX1BBUlRJQUxfSU5UKSwJLyogaW50ZWdlciB3aXRoIHBhZGRpbmcgYml0cyAqLyAgICBcCisgIERFRl9NT0RFX0NMQVNTIChNT0RFX0ZSQUNUKSwJCS8qIHNpZ25lZCBmcmFjdGlvbmFsIG51bWJlciAqLwkgICBcCisgIERFRl9NT0RFX0NMQVNTIChNT0RFX1VGUkFDVCksCQkvKiB1bnNpZ25lZCBmcmFjdGlvbmFsIG51bWJlciAqLyAgIFwKKyAgREVGX01PREVfQ0xBU1MgKE1PREVfQUNDVU0pLAkJLyogc2lnbmVkIGFjY3VtdWxhdG9yICovCSAgIFwKKyAgREVGX01PREVfQ0xBU1MgKE1PREVfVUFDQ1VNKSwJCS8qIHVuc2lnbmVkIGFjY3VtdWxhdG9yICovCSAgIFwKKyAgREVGX01PREVfQ0xBU1MgKE1PREVfRkxPQVQpLAkJLyogZmxvYXRpbmcgcG9pbnQgKi8JCSAgIFwKKyAgREVGX01PREVfQ0xBU1MgKE1PREVfREVDSU1BTF9GTE9BVCksCS8qIGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgKi8JICAgXAorICBERUZfTU9ERV9DTEFTUyAoTU9ERV9DT01QTEVYX0lOVCksIAkvKiBjb21wbGV4IG51bWJlcnMgKi8JCSAgIFwKKyAgREVGX01PREVfQ0xBU1MgKE1PREVfQ09NUExFWF9GTE9BVCksCQkJCQkgICBcCisgIERFRl9NT0RFX0NMQVNTIChNT0RFX1ZFQ1RPUl9JTlQpLAkvKiBTSU1EIHZlY3RvcnMgKi8JCSAgIFwKKyAgREVGX01PREVfQ0xBU1MgKE1PREVfVkVDVE9SX0ZSQUNUKSwJLyogU0lNRCB2ZWN0b3JzICovCQkgICBcCisgIERFRl9NT0RFX0NMQVNTIChNT0RFX1ZFQ1RPUl9VRlJBQ1QpLAkvKiBTSU1EIHZlY3RvcnMgKi8JCSAgIFwKKyAgREVGX01PREVfQ0xBU1MgKE1PREVfVkVDVE9SX0FDQ1VNKSwJLyogU0lNRCB2ZWN0b3JzICovCQkgICBcCisgIERFRl9NT0RFX0NMQVNTIChNT0RFX1ZFQ1RPUl9VQUNDVU0pLAkvKiBTSU1EIHZlY3RvcnMgKi8JCSAgIFwKKyAgREVGX01PREVfQ0xBU1MgKE1PREVfVkVDVE9SX0ZMT0FUKQpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL29iamMvb2JqYy10cmVlLmRlZiBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9vYmpjL29iamMtdHJlZS5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNlNDBkYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9vYmpjL29iamMtdHJlZS5kZWYKQEAgLTAsMCArMSw0NiBAQAorLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBhbmQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlCisgICBhZGRpdGlvbmFsIHRyZWUgY29kZXMgdXNlZCBpbiB0aGUgT2JqZWN0aXZlIEMgZnJvbnQgZW5kIChzZWUgdHJlZS5kZWYKKyAgIGZvciB0aGUgc3RhbmRhcmQgY29kZXMpLgorICAgQ29weXJpZ2h0IChDKSAxOTkwLCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA3CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKworLyogT2JqZWN0aXZlLUMgdHlwZXMuICAqLworREVGVFJFRUNPREUgKENMQVNTX0lOVEVSRkFDRV9UWVBFLCAiY2xhc3NfaW50ZXJmYWNlX3R5cGUiLCB0Y2NfdHlwZSwgMCkKK0RFRlRSRUVDT0RFIChDTEFTU19JTVBMRU1FTlRBVElPTl9UWVBFLCAiY2xhc3NfaW1wbGVtZW50YXRpb25fdHlwZSIsCisJICAgICB0Y2NfdHlwZSwgMCkKK0RFRlRSRUVDT0RFIChDQVRFR09SWV9JTlRFUkZBQ0VfVFlQRSwgImNhdGVnb3J5X2ludGVyZmFjZV90eXBlIiwgdGNjX3R5cGUsIDApCitERUZUUkVFQ09ERSAoQ0FURUdPUllfSU1QTEVNRU5UQVRJT05fVFlQRSwiY2F0ZWdvcnlfaW1wbGVtZW50YXRpb25fdHlwZSIsCisJICAgICB0Y2NfdHlwZSwgMCkKK0RFRlRSRUVDT0RFIChQUk9UT0NPTF9JTlRFUkZBQ0VfVFlQRSwgInByb3RvY29sX2ludGVyZmFjZV90eXBlIiwgdGNjX3R5cGUsIDApCisKKy8qIE9iamVjdGl2ZS1DIGRlY2xzLiAgKi8KK0RFRlRSRUVDT0RFIChLRVlXT1JEX0RFQ0wsICJrZXl3b3JkX2RlY2wiLCB0Y2NfZGVjbGFyYXRpb24sIDApCitERUZUUkVFQ09ERSAoSU5TVEFOQ0VfTUVUSE9EX0RFQ0wsICJpbnN0YW5jZV9tZXRob2RfZGVjbCIsIHRjY19kZWNsYXJhdGlvbiwgMCkKK0RFRlRSRUVDT0RFIChDTEFTU19NRVRIT0RfREVDTCwgImNsYXNzX21ldGhvZF9kZWNsIiwgdGNjX2RlY2xhcmF0aW9uLCAwKQorCisvKiBPYmplY3RpdmUtQyBleHByZXNzaW9ucy4gICovCitERUZUUkVFQ09ERSAoTUVTU0FHRV9TRU5EX0VYUFIsICJtZXNzYWdlX3NlbmRfZXhwciIsIHRjY19leHByZXNzaW9uLCAzKQorREVGVFJFRUNPREUgKENMQVNTX1JFRkVSRU5DRV9FWFBSLCAiY2xhc3NfcmVmZXJlbmNlX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMSkKKworLyoKK0xvY2FsIHZhcmlhYmxlczoKK21vZGU6YworRW5kOgorKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9vYnN0YWNrLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvb2JzdGFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZWMzYTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvb2JzdGFjay5oCkBAIC0wLDAgKzEsNTQ1IEBACisvKiBvYnN0YWNrLmggLSBvYmplY3Qgc3RhY2sgbWFjcm9zCisgICBDb3B5cmlnaHQgMTk4OCwgMTk4OSwgMTk5MCwgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NiwgMTk5NywgMTk5OCwKKyAgIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDgKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisKKyAgIE5PVEU6IFRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRoaXMgZmlsZSBpcyBtYWludGFpbmVkIHdpdGggdGhlIEdOVSBDIExpYnJhcnkuCisgICBCdWdzIGNhbiBiZSByZXBvcnRlZCB0byBidWctZ2xpYmNAZ251Lm9yZy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorICAgVVNBLiAgKi8KKworLyogU3VtbWFyeToKKworQWxsIHRoZSBhcHBhcmVudCBmdW5jdGlvbnMgZGVmaW5lZCBoZXJlIGFyZSBtYWNyb3MuIFRoZSBpZGVhCitpcyB0aGF0IHlvdSB3b3VsZCB1c2UgdGhlc2UgcHJlLXRlc3RlZCBtYWNyb3MgdG8gc29sdmUgYQordmVyeSBzcGVjaWZpYyBzZXQgb2YgcHJvYmxlbXMsIGFuZCB0aGV5IHdvdWxkIHJ1biBmYXN0LgorQ2F1dGlvbjogbm8gc2lkZS1lZmZlY3RzIGluIGFyZ3VtZW50cyBwbGVhc2UhISBUaGV5IG1heSBiZQorZXZhbHVhdGVkIE1BTlkgdGltZXMhIQorCitUaGVzZSBtYWNyb3Mgb3BlcmF0ZSBhIHN0YWNrIG9mIG9iamVjdHMuICBFYWNoIG9iamVjdCBzdGFydHMgbGlmZQorc21hbGwsIGFuZCBtYXkgZ3JvdyB0byBtYXR1cml0eS4gIChDb25zaWRlciBidWlsZGluZyBhIHdvcmQgc3lsbGFibGUKK2J5IHN5bGxhYmxlLikgIEFuIG9iamVjdCBjYW4gbW92ZSB3aGlsZSBpdCBpcyBncm93aW5nLiAgT25jZSBpdCBoYXMKK2JlZW4gImZpbmlzaGVkIiBpdCBuZXZlciBjaGFuZ2VzIGFkZHJlc3MgYWdhaW4uICBTbyB0aGUgInRvcCBvZiB0aGUKK3N0YWNrIiBpcyB0eXBpY2FsbHkgYW4gaW1tYXR1cmUgZ3Jvd2luZyBvYmplY3QsIHdoaWxlIHRoZSByZXN0IG9mIHRoZQorc3RhY2sgaXMgb2YgbWF0dXJlLCBmaXhlZCBzaXplIGFuZCBmaXhlZCBhZGRyZXNzIG9iamVjdHMuCisKK1RoZXNlIHJvdXRpbmVzIGdyYWIgbGFyZ2UgY2h1bmtzIG9mIG1lbW9yeSwgdXNpbmcgYSBmdW5jdGlvbiB5b3UKK3N1cHBseSwgY2FsbGVkIGBvYnN0YWNrX2NodW5rX2FsbG9jJy4gIE9uIG9jY2FzaW9uLCB0aGV5IGZyZWUgY2h1bmtzLAorYnkgY2FsbGluZyBgb2JzdGFja19jaHVua19mcmVlJy4gIFlvdSBtdXN0IGRlZmluZSB0aGVtIGFuZCBkZWNsYXJlCit0aGVtIGJlZm9yZSB1c2luZyBhbnkgb2JzdGFjayBtYWNyb3MuCisKK0VhY2ggaW5kZXBlbmRlbnQgc3RhY2sgaXMgcmVwcmVzZW50ZWQgYnkgYSBgc3RydWN0IG9ic3RhY2snLgorRWFjaCBvZiB0aGUgb2JzdGFjayBtYWNyb3MgZXhwZWN0cyBhIHBvaW50ZXIgdG8gc3VjaCBhIHN0cnVjdHVyZQorYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgorCitPbmUgbW90aXZhdGlvbiBmb3IgdGhpcyBwYWNrYWdlIGlzIHRoZSBwcm9ibGVtIG9mIGdyb3dpbmcgY2hhciBzdHJpbmdzCitpbiBzeW1ib2wgdGFibGVzLiAgVW5sZXNzIHlvdSBhcmUgImZhc2Npc3QgcGlnIHdpdGggYSByZWFkLW9ubHkgbWluZCIKKy0tR29zcGVyJ3MgaW1tb3J0YWwgcXVvdGUgZnJvbSBIQUtNRU0gaXRlbSAxNTQsIG91dCBvZiBjb250ZXh0LS15b3UKK3dvdWxkIG5vdCBsaWtlIHRvIHB1dCBhbnkgYXJiaXRyYXJ5IHVwcGVyIGxpbWl0IG9uIHRoZSBsZW5ndGggb2YgeW91cgorc3ltYm9scy4KKworSW4gcHJhY3RpY2UgdGhpcyBvZnRlbiBtZWFucyB5b3Ugd2lsbCBidWlsZCBtYW55IHNob3J0IHN5bWJvbHMgYW5kIGEKK2ZldyBsb25nIHN5bWJvbHMuICBBdCB0aGUgdGltZSB5b3UgYXJlIHJlYWRpbmcgYSBzeW1ib2wgeW91IGRvbid0IGtub3cKK2hvdyBsb25nIGl0IGlzLiAgT25lIHRyYWRpdGlvbmFsIG1ldGhvZCBpcyB0byByZWFkIGEgc3ltYm9sIGludG8gYQorYnVmZmVyLCByZWFsbG9jKClhdGluZyB0aGUgYnVmZmVyIGV2ZXJ5IHRpbWUgeW91IHRyeSB0byByZWFkIGEgc3ltYm9sCit0aGF0IGlzIGxvbmdlciB0aGFuIHRoZSBidWZmZXIuICBUaGlzIGlzIGJlYXV0LCBidXQgeW91IHN0aWxsIHdpbGwKK3dhbnQgdG8gY29weSB0aGUgc3ltYm9sIGZyb20gdGhlIGJ1ZmZlciB0byBhIG1vcmUgcGVybWFuZW50CitzeW1ib2wtdGFibGUgZW50cnkgc2F5IGFib3V0IGhhbGYgdGhlIHRpbWUuCisKK1dpdGggb2JzdGFja3MsIHlvdSBjYW4gd29yayBkaWZmZXJlbnRseS4gIFVzZSBvbmUgb2JzdGFjayBmb3IgYWxsIHN5bWJvbAorbmFtZXMuICBBcyB5b3UgcmVhZCBhIHN5bWJvbCwgZ3JvdyB0aGUgbmFtZSBpbiB0aGUgb2JzdGFjayBncmFkdWFsbHkuCitXaGVuIHRoZSBuYW1lIGlzIGNvbXBsZXRlLCBmaW5hbGl6ZSBpdC4gIFRoZW4sIGlmIHRoZSBzeW1ib2wgZXhpc3RzIGFscmVhZHksCitmcmVlIHRoZSBuZXdseSByZWFkIG5hbWUuCisKK1RoZSB3YXkgd2UgZG8gdGhpcyBpcyB0byB0YWtlIGEgbGFyZ2UgY2h1bmssIGFsbG9jYXRpbmcgbWVtb3J5IGZyb20KK2xvdyBhZGRyZXNzZXMuICBXaGVuIHlvdSB3YW50IHRvIGJ1aWxkIGEgc3ltYm9sIGluIHRoZSBjaHVuayB5b3UganVzdAorYWRkIGNoYXJzIGFib3ZlIHRoZSBjdXJyZW50ICJoaWdoIHdhdGVyIG1hcmsiIGluIHRoZSBjaHVuay4gIFdoZW4geW91CitoYXZlIGZpbmlzaGVkIGFkZGluZyBjaGFycywgYmVjYXVzZSB5b3UgZ290IHRvIHRoZSBlbmQgb2YgdGhlIHN5bWJvbCwKK3lvdSBrbm93IGhvdyBsb25nIHRoZSBjaGFycyBhcmUsIGFuZCB5b3UgY2FuIGNyZWF0ZSBhIG5ldyBvYmplY3QuCitNb3N0bHkgdGhlIGNoYXJzIHdpbGwgbm90IGJ1cnN0IG92ZXIgdGhlIGhpZ2hlc3QgYWRkcmVzcyBvZiB0aGUgY2h1bmssCitiZWNhdXNlIHlvdSB3b3VsZCB0eXBpY2FsbHkgZXhwZWN0IGEgY2h1bmsgdG8gYmUgKHNheSkgMTAwIHRpbWVzIGFzCitsb25nIGFzIGFuIGF2ZXJhZ2Ugb2JqZWN0LgorCitJbiBjYXNlIHRoYXQgaXNuJ3QgY2xlYXIsIHdoZW4gd2UgaGF2ZSBlbm91Z2ggY2hhcnMgdG8gbWFrZSB1cAordGhlIG9iamVjdCwgVEhFWSBBUkUgQUxSRUFEWSBDT05USUdVT1VTIElOIFRIRSBDSFVOSyAoZ3VhcmFudGVlZCkKK3NvIHdlIGp1c3QgcG9pbnQgdG8gaXQgd2hlcmUgaXQgbGllcy4gIE5vIG1vdmluZyBvZiBjaGFycyBpcworbmVlZGVkIGFuZCB0aGlzIGlzIHRoZSBzZWNvbmQgd2luOiBwb3RlbnRpYWxseSBsb25nIHN0cmluZ3MgbmVlZAorbmV2ZXIgYmUgZXhwbGljaXRseSBzaHVmZmxlZC4gT25jZSBhbiBvYmplY3QgaXMgZm9ybWVkLCBpdCBkb2VzIG5vdAorY2hhbmdlIGl0cyBhZGRyZXNzIGR1cmluZyBpdHMgbGlmZXRpbWUuCisKK1doZW4gdGhlIGNoYXJzIGJ1cnN0IG92ZXIgYSBjaHVuayBib3VuZGFyeSwgd2UgYWxsb2NhdGUgYSBsYXJnZXIKK2NodW5rLCBhbmQgdGhlbiBjb3B5IHRoZSBwYXJ0bHkgZm9ybWVkIG9iamVjdCBmcm9tIHRoZSBlbmQgb2YgdGhlIG9sZAorY2h1bmsgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IGxhcmdlciBjaHVuay4gIFdlIHRoZW4gY2Fycnkgb24KK2FjY3JldGluZyBjaGFyYWN0ZXJzIHRvIHRoZSBlbmQgb2YgdGhlIG9iamVjdCBhcyB3ZSBub3JtYWxseSB3b3VsZC4KKworQSBzcGVjaWFsIG1hY3JvIGlzIHByb3ZpZGVkIHRvIGFkZCBhIHNpbmdsZSBjaGFyIGF0IGEgdGltZSB0byBhCitncm93aW5nIG9iamVjdC4gIFRoaXMgYWxsb3dzIHRoZSB1c2Ugb2YgcmVnaXN0ZXIgdmFyaWFibGVzLCB3aGljaAorYnJlYWsgdGhlIG9yZGluYXJ5ICdncm93dGgnIG1hY3JvLgorCitTdW1tYXJ5OgorCVdlIGFsbG9jYXRlIGxhcmdlIGNodW5rcy4KKwlXZSBjYXJ2ZSBvdXQgb25lIG9iamVjdCBhdCBhIHRpbWUgZnJvbSB0aGUgY3VycmVudCBjaHVuay4KKwlPbmNlIGNhcnZlZCwgYW4gb2JqZWN0IG5ldmVyIG1vdmVzLgorCVdlIGFyZSBmcmVlIHRvIGFwcGVuZCBkYXRhIG9mIGFueSBzaXplIHRvIHRoZSBjdXJyZW50bHkKKwkgIGdyb3dpbmcgb2JqZWN0LgorCUV4YWN0bHkgb25lIG9iamVjdCBpcyBncm93aW5nIGluIGFuIG9ic3RhY2sgYXQgYW55IG9uZSB0aW1lLgorCVlvdSBjYW4gcnVuIG9uZSBvYnN0YWNrIHBlciBjb250cm9sIGJsb2NrLgorCVlvdSBtYXkgaGF2ZSBhcyBtYW55IGNvbnRyb2wgYmxvY2tzIGFzIHlvdSBkYXJlLgorCUJlY2F1c2Ugb2YgdGhlIHdheSB3ZSBkbyBpdCwgeW91IGNhbiBgdW53aW5kJyBhbiBvYnN0YWNrCisJICBiYWNrIHRvIGEgcHJldmlvdXMgc3RhdGUuIChZb3UgbWF5IHJlbW92ZSBvYmplY3RzIG11Y2gKKwkgIGFzIHlvdSB3b3VsZCB3aXRoIGEgc3RhY2suKQorKi8KKworCisvKiBEb24ndCBkbyB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1vcmUgdGhhbiBvbmNlLiAgKi8KKworI2lmbmRlZiBfT0JTVEFDS19ICisjZGVmaW5lIF9PQlNUQUNLX0ggMQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisMCisvKiBXZSB1c2Ugc3VidHJhY3Rpb24gb2YgKGNoYXIgKikgMCBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8gaW50CisgICBiZWNhdXNlIG9uIHdvcmQtYWRkcmVzc2FibGUgbWFjaGluZXMgYSBzaW1wbGUgY2FzdCB0byBpbnQKKyAgIG1heSBpZ25vcmUgdGhlIGJ5dGUtd2l0aGluLXdvcmQgZmllbGQgb2YgdGhlIHBvaW50ZXIuICAqLworCisjaWZuZGVmIF9fUFRSX1RPX0lOVAorIyBkZWZpbmUgX19QVFJfVE9fSU5UKFApICgoUCkgLSAoY2hhciAqKSAwKQorI2VuZGlmCisKKyNpZm5kZWYgX19JTlRfVE9fUFRSCisjIGRlZmluZSBfX0lOVF9UT19QVFIoUCkgKChQKSArIChjaGFyICopIDApCisjZW5kaWYKKworLyogV2UgbmVlZCB0aGUgdHlwZSBvZiB0aGUgcmVzdWx0aW5nIG9iamVjdC4gIElmIF9fUFRSRElGRl9UWVBFX18gaXMKKyAgIGRlZmluZWQsIGFzIHdpdGggR05VIEMsIHVzZSB0aGF0OyB0aGF0IHdheSB3ZSBkb24ndCBwb2xsdXRlIHRoZQorICAgbmFtZXNwYWNlIHdpdGggPHN0ZGRlZi5oPidzIHN5bWJvbHMuICBPdGhlcndpc2UsIGlmIDxzdGRkZWYuaD4gaXMKKyAgIGF2YWlsYWJsZSwgaW5jbHVkZSBpdCBhbmQgdXNlIHB0cmRpZmZfdC4gIEluIHRyYWRpdGlvbmFsIEMsIGxvbmcgaXMKKyAgIHRoZSBiZXN0IHRoYXQgd2UgY2FuIGRvLiAgKi8KKworI2lmZGVmIF9fUFRSRElGRl9UWVBFX18KKyMgZGVmaW5lIFBUUl9JTlRfVFlQRSBfX1BUUkRJRkZfVFlQRV9fCisjZWxzZQorIyBpZmRlZiBIQVZFX1NURERFRl9ICisjICBpbmNsdWRlIDxzdGRkZWYuaD4KKyMgIGRlZmluZSBQVFJfSU5UX1RZUEUgcHRyZGlmZl90CisjIGVsc2UKKyMgIGRlZmluZSBQVFJfSU5UX1RZUEUgbG9uZworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9TVFJJTkdfSAorIyBpbmNsdWRlIDxzdHJpbmcuaD4KKyMgZGVmaW5lIF9vYnN0YWNrX21lbWNweShUbywgRnJvbSwgTikgbWVtY3B5ICgoVG8pLCAoRnJvbSksIChOKSkKKyNlbHNlCisjIGlmZGVmIG1lbWNweQorIyAgZGVmaW5lIF9vYnN0YWNrX21lbWNweShUbywgRnJvbSwgTikgbWVtY3B5ICgoVG8pLCAoY2hhciAqKShGcm9tKSwgKE4pKQorIyBlbHNlCisjICBkZWZpbmUgX29ic3RhY2tfbWVtY3B5KFRvLCBGcm9tLCBOKSBiY29weSAoKGNoYXIgKikoRnJvbSksIChUbyksIChOKSkKKyMgZW5kaWYKKyNlbmRpZgorCitzdHJ1Y3QgX29ic3RhY2tfY2h1bmsJCS8qIExpdmVzIGF0IGZyb250IG9mIGVhY2ggY2h1bmsuICovCit7CisgIGNoYXIgICpsaW1pdDsJCQkvKiAxIHBhc3QgZW5kIG9mIHRoaXMgY2h1bmsgKi8KKyAgc3RydWN0IF9vYnN0YWNrX2NodW5rICpwcmV2OwkvKiBhZGRyZXNzIG9mIHByaW9yIGNodW5rIG9yIE5VTEwgKi8KKyAgY2hhcgljb250ZW50c1s0XTsJCS8qIG9iamVjdHMgYmVnaW4gaGVyZSAqLworfTsKKworc3RydWN0IG9ic3RhY2sJCS8qIGNvbnRyb2wgY3VycmVudCBvYmplY3QgaW4gY3VycmVudCBjaHVuayAqLworeworICBsb25nCWNodW5rX3NpemU7CQkvKiBwcmVmZXJyZWQgc2l6ZSB0byBhbGxvY2F0ZSBjaHVua3MgaW4gKi8KKyAgc3RydWN0IF9vYnN0YWNrX2NodW5rICpjaHVuazsJLyogYWRkcmVzcyBvZiBjdXJyZW50IHN0cnVjdCBvYnN0YWNrX2NodW5rICovCisgIGNoYXIJKm9iamVjdF9iYXNlOwkJLyogYWRkcmVzcyBvZiBvYmplY3Qgd2UgYXJlIGJ1aWxkaW5nICovCisgIGNoYXIJKm5leHRfZnJlZTsJCS8qIHdoZXJlIHRvIGFkZCBuZXh0IGNoYXIgdG8gY3VycmVudCBvYmplY3QgKi8KKyAgY2hhcgkqY2h1bmtfbGltaXQ7CQkvKiBhZGRyZXNzIG9mIGNoYXIgYWZ0ZXIgY3VycmVudCBjaHVuayAqLworICBQVFJfSU5UX1RZUEUgdGVtcDsJCS8qIFRlbXBvcmFyeSBmb3Igc29tZSBtYWNyb3MuICAqLworICBpbnQgICBhbGlnbm1lbnRfbWFzazsJCS8qIE1hc2sgb2YgYWxpZ25tZW50IGZvciBlYWNoIG9iamVjdC4gKi8KKyAgLyogVGhlc2UgcHJvdG90eXBlcyB2YXJ5IGJhc2VkIG9uIGB1c2VfZXh0cmFfYXJnJywgYW5kIHdlIHVzZQorICAgICBjYXN0cyB0byB0aGUgcHJvdG90eXBlbGVzcyBmdW5jdGlvbiB0eXBlIGluIGFsbCBhc3NpZ25tZW50cywKKyAgICAgYnV0IGhhdmluZyBwcm90b3R5cGVzIGhlcmUgcXVpZXRzIC1Xc3RyaWN0LXByb3RvdHlwZXMuICAqLworICBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKigqY2h1bmtmdW4pICh2b2lkICosIGxvbmcpOworICB2b2lkICgqZnJlZWZ1bikgKHZvaWQgKiwgc3RydWN0IF9vYnN0YWNrX2NodW5rICopOworICB2b2lkICpleHRyYV9hcmc7CQkvKiBmaXJzdCBhcmcgZm9yIGNodW5rIGFsbG9jL2RlYWxsb2MgZnVuY3MgKi8KKyAgdW5zaWduZWQgdXNlX2V4dHJhX2FyZzoxOwkvKiBjaHVuayBhbGxvYy9kZWFsbG9jIGZ1bmNzIHRha2UgZXh0cmEgYXJnICovCisgIHVuc2lnbmVkIG1heWJlX2VtcHR5X29iamVjdDoxOy8qIFRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhhdCB0aGUgY3VycmVudAorCQkJCSAgIGNodW5rIGNvbnRhaW5zIGEgemVyby1sZW5ndGggb2JqZWN0LiAgVGhpcworCQkJCSAgIHByZXZlbnRzIGZyZWVpbmcgdGhlIGNodW5rIGlmIHdlIGFsbG9jYXRlCisJCQkJICAgYSBiaWdnZXIgY2h1bmsgdG8gcmVwbGFjZSBpdC4gKi8KKyAgdW5zaWduZWQgYWxsb2NfZmFpbGVkOjE7CS8qIE5vIGxvbmdlciB1c2VkLCBhcyB3ZSBub3cgY2FsbCB0aGUgZmFpbGVkCisJCQkJICAgaGFuZGxlciBvbiBlcnJvciwgYnV0IHJldGFpbmVkIGZvciBiaW5hcnkKKwkJCQkgICBjb21wYXRpYmlsaXR5LiAgKi8KK307CisKKy8qIERlY2xhcmUgdGhlIGV4dGVybmFsIGZ1bmN0aW9ucyB3ZSB1c2U7IHRoZXkgYXJlIGluIG9ic3RhY2suYy4gICovCisKK2V4dGVybiB2b2lkIF9vYnN0YWNrX25ld2NodW5rIChzdHJ1Y3Qgb2JzdGFjayAqLCBpbnQpOworZXh0ZXJuIHZvaWQgX29ic3RhY2tfZnJlZSAoc3RydWN0IG9ic3RhY2sgKiwgdm9pZCAqKTsKK2V4dGVybiBpbnQgX29ic3RhY2tfYmVnaW4gKHN0cnVjdCBvYnN0YWNrICosIGludCwgaW50LAorCQkJICAgIHZvaWQgKigqKSAobG9uZyksIHZvaWQgKCopICh2b2lkICopKTsKK2V4dGVybiBpbnQgX29ic3RhY2tfYmVnaW5fMSAoc3RydWN0IG9ic3RhY2sgKiwgaW50LCBpbnQsCisJCQkgICAgIHZvaWQgKigqKSAodm9pZCAqLCBsb25nKSwKKwkJCSAgICAgdm9pZCAoKikgKHZvaWQgKiwgdm9pZCAqKSwgdm9pZCAqKTsKK2V4dGVybiBpbnQgX29ic3RhY2tfbWVtb3J5X3VzZWQgKHN0cnVjdCBvYnN0YWNrICopOworDAorLyogRG8gdGhlIGZ1bmN0aW9uLWRlY2xhcmF0aW9ucyBhZnRlciB0aGUgc3RydWN0cworICAgYnV0IGJlZm9yZSBkZWZpbmluZyB0aGUgbWFjcm9zLiAgKi8KKwordm9pZCBvYnN0YWNrX2luaXQgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrKTsKKwordm9pZCAqIG9ic3RhY2tfYWxsb2MgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrLCBpbnQgc2l6ZSk7CisKK3ZvaWQgKiBvYnN0YWNrX2NvcHkgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrLCB2b2lkICphZGRyZXNzLCBpbnQgc2l6ZSk7Cit2b2lkICogb2JzdGFja19jb3B5MCAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2ssIHZvaWQgKmFkZHJlc3MsIGludCBzaXplKTsKKwordm9pZCBvYnN0YWNrX2ZyZWUgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrLCB2b2lkICpibG9jayk7CisKK3ZvaWQgb2JzdGFja19ibGFuayAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2ssIGludCBzaXplKTsKKwordm9pZCBvYnN0YWNrX2dyb3cgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrLCB2b2lkICpkYXRhLCBpbnQgc2l6ZSk7Cit2b2lkIG9ic3RhY2tfZ3JvdzAgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrLCB2b2lkICpkYXRhLCBpbnQgc2l6ZSk7CisKK3ZvaWQgb2JzdGFja18xZ3JvdyAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2ssIGludCBkYXRhX2NoYXIpOwordm9pZCBvYnN0YWNrX3B0cl9ncm93IChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjaywgdm9pZCAqZGF0YSk7Cit2b2lkIG9ic3RhY2tfaW50X2dyb3cgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrLCBpbnQgZGF0YSk7CisKK3ZvaWQgKiBvYnN0YWNrX2ZpbmlzaCAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2spOworCitpbnQgb2JzdGFja19vYmplY3Rfc2l6ZSAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2spOworCitpbnQgb2JzdGFja19yb29tIChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjayk7Cit2b2lkIG9ic3RhY2tfbWFrZV9yb29tIChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjaywgaW50IHNpemUpOwordm9pZCBvYnN0YWNrXzFncm93X2Zhc3QgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrLCBpbnQgZGF0YV9jaGFyKTsKK3ZvaWQgb2JzdGFja19wdHJfZ3Jvd19mYXN0IChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjaywgdm9pZCAqZGF0YSk7Cit2b2lkIG9ic3RhY2tfaW50X2dyb3dfZmFzdCAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2ssIGludCBkYXRhKTsKK3ZvaWQgb2JzdGFja19ibGFua19mYXN0IChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjaywgaW50IHNpemUpOworCit2b2lkICogb2JzdGFja19iYXNlIChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjayk7Cit2b2lkICogb2JzdGFja19uZXh0X2ZyZWUgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrKTsKK2ludCBvYnN0YWNrX2FsaWdubWVudF9tYXNrIChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjayk7CitpbnQgb2JzdGFja19jaHVua19zaXplIChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjayk7CitpbnQgb2JzdGFja19tZW1vcnlfdXNlZCAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2spOworCisvKiBFcnJvciBoYW5kbGVyIGNhbGxlZCB3aGVuIGBvYnN0YWNrX2NodW5rX2FsbG9jJyBmYWlsZWQgdG8gYWxsb2NhdGUKKyAgIG1vcmUgbWVtb3J5LiAgVGhpcyBjYW4gYmUgc2V0IHRvIGEgdXNlciBkZWZpbmVkIGZ1bmN0aW9uLiAgVGhlCisgICBkZWZhdWx0IGFjdGlvbiBpcyB0byBwcmludCBhIG1lc3NhZ2UgYW5kIGFib3J0LiAgKi8KK2V4dGVybiB2b2lkICgqb2JzdGFja19hbGxvY19mYWlsZWRfaGFuZGxlcikgKHZvaWQpOworCisvKiBFeGl0IHZhbHVlIHVzZWQgd2hlbiBgcHJpbnRfYW5kX2Fib3J0JyBpcyB1c2VkLiAgKi8KK2V4dGVybiBpbnQgb2JzdGFja19leGl0X2ZhaWx1cmU7CisMCisvKiBQb2ludGVyIHRvIGJlZ2lubmluZyBvZiBvYmplY3QgYmVpbmcgYWxsb2NhdGVkIG9yIHRvIGJlIGFsbG9jYXRlZCBuZXh0LgorICAgTm90ZSB0aGF0IHRoaXMgbWlnaHQgbm90IGJlIHRoZSBmaW5hbCBhZGRyZXNzIG9mIHRoZSBvYmplY3QKKyAgIGJlY2F1c2UgYSBuZXcgY2h1bmsgbWlnaHQgYmUgbmVlZGVkIHRvIGhvbGQgdGhlIGZpbmFsIHNpemUuICAqLworCisjZGVmaW5lIG9ic3RhY2tfYmFzZShoKSAoKGgpLT5vYmplY3RfYmFzZSkKKworLyogU2l6ZSBmb3IgYWxsb2NhdGluZyBvcmRpbmFyeSBjaHVua3MuICAqLworCisjZGVmaW5lIG9ic3RhY2tfY2h1bmtfc2l6ZShoKSAoKGgpLT5jaHVua19zaXplKQorCisvKiBQb2ludGVyIHRvIG5leHQgYnl0ZSBub3QgeWV0IGFsbG9jYXRlZCBpbiBjdXJyZW50IGNodW5rLiAgKi8KKworI2RlZmluZSBvYnN0YWNrX25leHRfZnJlZShoKQkoKGgpLT5uZXh0X2ZyZWUpCisKKy8qIE1hc2sgc3BlY2lmeWluZyBsb3cgYml0cyB0aGF0IHNob3VsZCBiZSBjbGVhciBpbiBhZGRyZXNzIG9mIGFuIG9iamVjdC4gICovCisKKyNkZWZpbmUgb2JzdGFja19hbGlnbm1lbnRfbWFzayhoKSAoKGgpLT5hbGlnbm1lbnRfbWFzaykKKworLyogVG8gcHJldmVudCBwcm90b3R5cGUgd2FybmluZ3MgcHJvdmlkZSBjb21wbGV0ZSBhcmd1bWVudCBsaXN0IGluCisgICBzdGFuZGFyZCBDIHZlcnNpb24uICAqLworIyBkZWZpbmUgb2JzdGFja19pbml0KGgpIFwKKyAgX29ic3RhY2tfYmVnaW4gKChoKSwgMCwgMCwgXAorCQkgICh2b2lkICooKikgKGxvbmcpKSBvYnN0YWNrX2NodW5rX2FsbG9jLCAodm9pZCAoKikgKHZvaWQgKikpIG9ic3RhY2tfY2h1bmtfZnJlZSkKKworIyBkZWZpbmUgb2JzdGFja19iZWdpbihoLCBzaXplKSBcCisgIF9vYnN0YWNrX2JlZ2luICgoaCksIChzaXplKSwgMCwgXAorCQkgICh2b2lkICooKikgKGxvbmcpKSBvYnN0YWNrX2NodW5rX2FsbG9jLCAodm9pZCAoKikgKHZvaWQgKikpIG9ic3RhY2tfY2h1bmtfZnJlZSkKKworIyBkZWZpbmUgb2JzdGFja19zcGVjaWZ5X2FsbG9jYXRpb24oaCwgc2l6ZSwgYWxpZ25tZW50LCBjaHVua2Z1biwgZnJlZWZ1bikgXAorICBfb2JzdGFja19iZWdpbiAoKGgpLCAoc2l6ZSksIChhbGlnbm1lbnQpLCBcCisJCSAgICAodm9pZCAqKCopIChsb25nKSkgKGNodW5rZnVuKSwgKHZvaWQgKCopICh2b2lkICopKSAoZnJlZWZ1bikpCisKKyMgZGVmaW5lIG9ic3RhY2tfc3BlY2lmeV9hbGxvY2F0aW9uX3dpdGhfYXJnKGgsIHNpemUsIGFsaWdubWVudCwgY2h1bmtmdW4sIGZyZWVmdW4sIGFyZykgXAorICBfb2JzdGFja19iZWdpbl8xICgoaCksIChzaXplKSwgKGFsaWdubWVudCksIFwKKwkJICAgICh2b2lkICooKikgKHZvaWQgKiwgbG9uZykpIChjaHVua2Z1biksIFwKKwkJICAgICh2b2lkICgqKSAodm9pZCAqLCB2b2lkICopKSAoZnJlZWZ1biksIChhcmcpKQorCisjIGRlZmluZSBvYnN0YWNrX2NodW5rZnVuKGgsIG5ld2NodW5rZnVuKSBcCisgICgoaCkgLT4gY2h1bmtmdW4gPSAoc3RydWN0IF9vYnN0YWNrX2NodW5rICooKikodm9pZCAqLCBsb25nKSkgKG5ld2NodW5rZnVuKSkKKworIyBkZWZpbmUgb2JzdGFja19mcmVlZnVuKGgsIG5ld2ZyZWVmdW4pIFwKKyAgKChoKSAtPiBmcmVlZnVuID0gKHZvaWQgKCopKHZvaWQgKiwgc3RydWN0IF9vYnN0YWNrX2NodW5rICopKSAobmV3ZnJlZWZ1bikpCisKKyNkZWZpbmUgb2JzdGFja18xZ3Jvd19mYXN0KGgsYWNoYXIpICgqKChoKS0+bmV4dF9mcmVlKSsrID0gKGFjaGFyKSkKKworI2RlZmluZSBvYnN0YWNrX2JsYW5rX2Zhc3QoaCxuKSAoKGgpLT5uZXh0X2ZyZWUgKz0gKG4pKQorCisjZGVmaW5lIG9ic3RhY2tfbWVtb3J5X3VzZWQoaCkgX29ic3RhY2tfbWVtb3J5X3VzZWQgKGgpCisMCisjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiBkZWZpbmVkIF9fU1REQ19fICYmIF9fU1REQ19fCisvKiBOZXh0U3RlcCAyLjAgY2MgaXMgcmVhbGx5IGdjYyAxLjkzIGJ1dCBpdCBkZWZpbmVzIF9fR05VQ19fID0gMiBhbmQKKyAgIGRvZXMgbm90IGltcGxlbWVudCBfX2V4dGVuc2lvbl9fLiAgQnV0IHRoYXQgY29tcGlsZXIgZG9lc24ndCBkZWZpbmUKKyAgIF9fR05VQ19NSU5PUl9fLiAgKi8KKyMgaWYgX19HTlVDX18gPCAyIHx8IChfX05lWFRfXyAmJiAhX19HTlVDX01JTk9SX18pCisjICBkZWZpbmUgX19leHRlbnNpb25fXworIyBlbmRpZgorCisvKiBGb3IgR05VIEMsIGlmIG5vdCAtdHJhZGl0aW9uYWwsCisgICB3ZSBjYW4gZGVmaW5lIHRoZXNlIG1hY3JvcyB0byBjb21wdXRlIGFsbCBhcmdzIG9ubHkgb25jZQorICAgd2l0aG91dCB1c2luZyBhIGdsb2JhbCB2YXJpYWJsZS4KKyAgIEFsc28sIHdlIGNhbiBhdm9pZCB1c2luZyB0aGUgYHRlbXAnIHNsb3QsIHRvIG1ha2UgZmFzdGVyIGNvZGUuICAqLworCisjIGRlZmluZSBvYnN0YWNrX29iamVjdF9zaXplKE9CU1RBQ0spCQkJCQlcCisgIF9fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyAgKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsJCQkJCVwKKyAgICAgKHVuc2lnbmVkKSAoX19vLT5uZXh0X2ZyZWUgLSBfX28tPm9iamVjdF9iYXNlKTsgfSkKKworIyBkZWZpbmUgb2JzdGFja19yb29tKE9CU1RBQ0spCQkJCQkJXAorICBfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisgICh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCisgICAgICh1bnNpZ25lZCkgKF9fby0+Y2h1bmtfbGltaXQgLSBfX28tPm5leHRfZnJlZSk7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfbWFrZV9yb29tKE9CU1RBQ0ssbGVuZ3RoKQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOwkJCQkJXAorICAgaW50IF9fbGVuID0gKGxlbmd0aCk7CQkJCQkJXAorICAgaWYgKF9fby0+Y2h1bmtfbGltaXQgLSBfX28tPm5leHRfZnJlZSA8IF9fbGVuKQkJCVwKKyAgICAgX29ic3RhY2tfbmV3Y2h1bmsgKF9fbywgX19sZW4pOwkJCQkJXAorICAgKHZvaWQpIDA7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfZW1wdHlfcChPQlNUQUNLKQkJCQkJXAorICBfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisgICh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCisgICAgIChfX28tPmNodW5rLT5wcmV2ID09IDAgJiYgX19vLT5uZXh0X2ZyZWUgLSBfX28tPmNodW5rLT5jb250ZW50cyA9PSAwKTsgfSkKKworIyBkZWZpbmUgb2JzdGFja19ncm93KE9CU1RBQ0ssd2hlcmUsbGVuZ3RoKQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOwkJCQkJXAorICAgaW50IF9fbGVuID0gKGxlbmd0aCk7CQkJCQkJXAorICAgaWYgKF9fby0+bmV4dF9mcmVlICsgX19sZW4gPiBfX28tPmNodW5rX2xpbWl0KQkJCVwKKyAgICAgX29ic3RhY2tfbmV3Y2h1bmsgKF9fbywgX19sZW4pOwkJCQkJXAorICAgX29ic3RhY2tfbWVtY3B5IChfX28tPm5leHRfZnJlZSwgKHdoZXJlKSwgX19sZW4pOwkJCVwKKyAgIF9fby0+bmV4dF9mcmVlICs9IF9fbGVuOwkJCQkJCVwKKyAgICh2b2lkKSAwOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX2dyb3cwKE9CU1RBQ0ssd2hlcmUsbGVuZ3RoKQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOwkJCQkJXAorICAgaW50IF9fbGVuID0gKGxlbmd0aCk7CQkJCQkJXAorICAgaWYgKF9fby0+bmV4dF9mcmVlICsgX19sZW4gKyAxID4gX19vLT5jaHVua19saW1pdCkJCQlcCisgICAgIF9vYnN0YWNrX25ld2NodW5rIChfX28sIF9fbGVuICsgMSk7CQkJCVwKKyAgIF9vYnN0YWNrX21lbWNweSAoX19vLT5uZXh0X2ZyZWUsICh3aGVyZSksIF9fbGVuKTsJCQlcCisgICBfX28tPm5leHRfZnJlZSArPSBfX2xlbjsJCQkJCQlcCisgICAqKF9fby0+bmV4dF9mcmVlKSsrID0gMDsJCQkJCQlcCisgICAodm9pZCkgMDsgfSkKKworIyBkZWZpbmUgb2JzdGFja18xZ3JvdyhPQlNUQUNLLGRhdHVtKQkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIGlmIChfX28tPm5leHRfZnJlZSArIDEgPiBfX28tPmNodW5rX2xpbWl0KQkJCQlcCisgICAgIF9vYnN0YWNrX25ld2NodW5rIChfX28sIDEpOwkJCQkJXAorICAgb2JzdGFja18xZ3Jvd19mYXN0IChfX28sIGRhdHVtKTsJCQkJCVwKKyAgICh2b2lkKSAwOyB9KQorCisvKiBUaGVzZSBhc3N1bWUgdGhhdCB0aGUgb2JzdGFjayBhbGlnbm1lbnQgaXMgZ29vZCBlbm91Z2ggZm9yIHBvaW50ZXJzIG9yIGludHMsCisgICBhbmQgdGhhdCB0aGUgZGF0YSBhZGRlZCBzbyBmYXIgdG8gdGhlIGN1cnJlbnQgb2JqZWN0CisgICBzaGFyZXMgdGhhdCBtdWNoIGFsaWdubWVudC4gICovCisKKyMgZGVmaW5lIG9ic3RhY2tfcHRyX2dyb3coT0JTVEFDSyxkYXR1bSkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIGlmIChfX28tPm5leHRfZnJlZSArIHNpemVvZiAodm9pZCAqKSA+IF9fby0+Y2h1bmtfbGltaXQpCQlcCisgICAgIF9vYnN0YWNrX25ld2NodW5rIChfX28sIHNpemVvZiAodm9pZCAqKSk7CQkJCVwKKyAgIG9ic3RhY2tfcHRyX2dyb3dfZmFzdCAoX19vLCBkYXR1bSk7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfaW50X2dyb3coT0JTVEFDSyxkYXR1bSkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIGlmIChfX28tPm5leHRfZnJlZSArIHNpemVvZiAoaW50KSA+IF9fby0+Y2h1bmtfbGltaXQpCQlcCisgICAgIF9vYnN0YWNrX25ld2NodW5rIChfX28sIHNpemVvZiAoaW50KSk7CQkJCVwKKyAgIG9ic3RhY2tfaW50X2dyb3dfZmFzdCAoX19vLCBkYXR1bSk7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfcHRyX2dyb3dfZmFzdChPQlNUQUNLLGFwdHIpCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28xID0gKE9CU1RBQ0spOwkJCQkJXAorICAgKihjb25zdCB2b2lkICoqKSBfX28xLT5uZXh0X2ZyZWUgPSAoYXB0cik7CQkJCVwKKyAgIF9fbzEtPm5leHRfZnJlZSArPSBzaXplb2YgKGNvbnN0IHZvaWQgKik7CQkJCVwKKyAgICh2b2lkKSAwOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX2ludF9ncm93X2Zhc3QoT0JTVEFDSyxhaW50KQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vMSA9IChPQlNUQUNLKTsJCQkJCVwKKyAgICooaW50ICopIF9fbzEtPm5leHRfZnJlZSA9IChhaW50KTsJCQkJCVwKKyAgIF9fbzEtPm5leHRfZnJlZSArPSBzaXplb2YgKGludCk7CQkJCQlcCisgICAodm9pZCkgMDsgfSkKKworIyBkZWZpbmUgb2JzdGFja19ibGFuayhPQlNUQUNLLGxlbmd0aCkJCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCisgICBpbnQgX19sZW4gPSAobGVuZ3RoKTsJCQkJCQlcCisgICBpZiAoX19vLT5jaHVua19saW1pdCAtIF9fby0+bmV4dF9mcmVlIDwgX19sZW4pCQkJXAorICAgICBfb2JzdGFja19uZXdjaHVuayAoX19vLCBfX2xlbik7CQkJCQlcCisgICBvYnN0YWNrX2JsYW5rX2Zhc3QgKF9fbywgX19sZW4pOwkJCQkJXAorICAgKHZvaWQpIDA7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfYWxsb2MoT0JTVEFDSyxsZW5ndGgpCQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19oID0gKE9CU1RBQ0spOwkJCQkJXAorICAgb2JzdGFja19ibGFuayAoX19oLCAobGVuZ3RoKSk7CQkJCQlcCisgICBvYnN0YWNrX2ZpbmlzaCAoX19oKTsgfSkKKworIyBkZWZpbmUgb2JzdGFja19jb3B5KE9CU1RBQ0ssd2hlcmUsbGVuZ3RoKQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19oID0gKE9CU1RBQ0spOwkJCQkJXAorICAgb2JzdGFja19ncm93IChfX2gsICh3aGVyZSksIChsZW5ndGgpKTsJCQkJXAorICAgb2JzdGFja19maW5pc2ggKF9faCk7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfY29weTAoT0JTVEFDSyx3aGVyZSxsZW5ndGgpCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX2ggPSAoT0JTVEFDSyk7CQkJCQlcCisgICBvYnN0YWNrX2dyb3cwIChfX2gsICh3aGVyZSksIChsZW5ndGgpKTsJCQkJXAorICAgb2JzdGFja19maW5pc2ggKF9faCk7IH0pCisKKy8qIFRoZSBsb2NhbCB2YXJpYWJsZSBpcyBuYW1lZCBfX28xIHRvIGF2b2lkIGEgbmFtZSBjb25mbGljdAorICAgd2hlbiBvYnN0YWNrX2JsYW5rIGlzIGNhbGxlZC4gICovCisjIGRlZmluZSBvYnN0YWNrX2ZpbmlzaChPQlNUQUNLKSAgCQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vMSA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIHZvaWQgKnZhbHVlOwkJCQkJCQkJXAorICAgdmFsdWUgPSAodm9pZCAqKSBfX28xLT5vYmplY3RfYmFzZTsJCQkJCVwKKyAgIGlmIChfX28xLT5uZXh0X2ZyZWUgPT0gdmFsdWUpCQkJCQlcCisgICAgIF9fbzEtPm1heWJlX2VtcHR5X29iamVjdCA9IDE7CQkJCQlcCisgICBfX28xLT5uZXh0X2ZyZWUJCQkJCQkJXAorICAgICA9IF9fSU5UX1RPX1BUUiAoKF9fUFRSX1RPX0lOVCAoX19vMS0+bmV4dF9mcmVlKStfX28xLT5hbGlnbm1lbnRfbWFzaylcCisJCSAgICAgJiB+IChfX28xLT5hbGlnbm1lbnRfbWFzaykpOwkJCVwKKyAgIGlmIChfX28xLT5uZXh0X2ZyZWUgLSAoY2hhciAqKV9fbzEtPmNodW5rCQkJCVwKKyAgICAgICA+IF9fbzEtPmNodW5rX2xpbWl0IC0gKGNoYXIgKilfX28xLT5jaHVuaykJCQlcCisgICAgIF9fbzEtPm5leHRfZnJlZSA9IF9fbzEtPmNodW5rX2xpbWl0OwkJCQlcCisgICBfX28xLT5vYmplY3RfYmFzZSA9IF9fbzEtPm5leHRfZnJlZTsJCQkJCVwKKyAgIHZhbHVlOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX2ZyZWUoT0JTVEFDSywgT0JKKQkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIHZvaWQgKl9fb2JqID0gKHZvaWQgKikgKE9CSik7CQkJCQlcCisgICBpZiAoX19vYmogPiAodm9pZCAqKV9fby0+Y2h1bmsgJiYgX19vYmogPCAodm9pZCAqKV9fby0+Y2h1bmtfbGltaXQpICBcCisgICAgIF9fby0+bmV4dF9mcmVlID0gX19vLT5vYmplY3RfYmFzZSA9IChjaGFyICopIF9fb2JqOwkJXAorICAgZWxzZSAob2JzdGFja19mcmVlKSAoX19vLCBfX29iaik7IH0pCisMCisjZWxzZSAvKiBub3QgX19HTlVDX18gb3Igbm90IF9fU1REQ19fICovCisKKyMgZGVmaW5lIG9ic3RhY2tfb2JqZWN0X3NpemUoaCkgXAorICh1bnNpZ25lZCkgKChoKS0+bmV4dF9mcmVlIC0gKGgpLT5vYmplY3RfYmFzZSkKKworIyBkZWZpbmUgb2JzdGFja19yb29tKGgpCQlcCisgKHVuc2lnbmVkKSAoKGgpLT5jaHVua19saW1pdCAtIChoKS0+bmV4dF9mcmVlKQorCisjIGRlZmluZSBvYnN0YWNrX2VtcHR5X3AoaCkgXAorICgoaCktPmNodW5rLT5wcmV2ID09IDAgJiYgKGgpLT5uZXh0X2ZyZWUgLSAoaCktPmNodW5rLT5jb250ZW50cyA9PSAwKQorCisvKiBOb3RlIHRoYXQgdGhlIGNhbGwgdG8gX29ic3RhY2tfbmV3Y2h1bmsgaXMgZW5jbG9zZWQgaW4gKC4uLiwgMCkKKyAgIHNvIHRoYXQgd2UgY2FuIGF2b2lkIGhhdmluZyB2b2lkIGV4cHJlc3Npb25zCisgICBpbiB0aGUgYXJtcyBvZiB0aGUgY29uZGl0aW9uYWwgZXhwcmVzc2lvbi4KKyAgIENhc3RpbmcgdGhlIHRoaXJkIG9wZXJhbmQgdG8gdm9pZCB3YXMgdHJpZWQgYmVmb3JlLAorICAgYnV0IHNvbWUgY29tcGlsZXJzIHdvbid0IGFjY2VwdCBpdC4gICovCisKKyMgZGVmaW5lIG9ic3RhY2tfbWFrZV9yb29tKGgsbGVuZ3RoKQkJCQkJXAorKCAoaCktPnRlbXAgPSAobGVuZ3RoKSwJCQkJCQkJXAorICAoKChoKS0+bmV4dF9mcmVlICsgKGgpLT50ZW1wID4gKGgpLT5jaHVua19saW1pdCkJCQlcCisgICA/IChfb2JzdGFja19uZXdjaHVuayAoKGgpLCAoaCktPnRlbXApLCAwKSA6IDApKQorCisjIGRlZmluZSBvYnN0YWNrX2dyb3coaCx3aGVyZSxsZW5ndGgpCQkJCQlcCisoIChoKS0+dGVtcCA9IChsZW5ndGgpLAkJCQkJCQlcCisgICgoKGgpLT5uZXh0X2ZyZWUgKyAoaCktPnRlbXAgPiAoaCktPmNodW5rX2xpbWl0KQkJCVwKKyAgID8gKF9vYnN0YWNrX25ld2NodW5rICgoaCksIChoKS0+dGVtcCksIDApIDogMCksCQkJXAorICBfb2JzdGFja19tZW1jcHkgKChoKS0+bmV4dF9mcmVlLCAod2hlcmUpLCAoaCktPnRlbXApLAkJCVwKKyAgKGgpLT5uZXh0X2ZyZWUgKz0gKGgpLT50ZW1wKQorCisjIGRlZmluZSBvYnN0YWNrX2dyb3cwKGgsd2hlcmUsbGVuZ3RoKQkJCQkJXAorKCAoaCktPnRlbXAgPSAobGVuZ3RoKSwJCQkJCQkJXAorICAoKChoKS0+bmV4dF9mcmVlICsgKGgpLT50ZW1wICsgMSA+IChoKS0+Y2h1bmtfbGltaXQpCQkJXAorICAgPyAoX29ic3RhY2tfbmV3Y2h1bmsgKChoKSwgKGgpLT50ZW1wICsgMSksIDApIDogMCksCQkJXAorICBfb2JzdGFja19tZW1jcHkgKChoKS0+bmV4dF9mcmVlLCAod2hlcmUpLCAoaCktPnRlbXApLAkJCVwKKyAgKGgpLT5uZXh0X2ZyZWUgKz0gKGgpLT50ZW1wLAkJCQkJCVwKKyAgKigoaCktPm5leHRfZnJlZSkrKyA9IDApCisKKyMgZGVmaW5lIG9ic3RhY2tfMWdyb3coaCxkYXR1bSkJCQkJCQlcCisoICgoKGgpLT5uZXh0X2ZyZWUgKyAxID4gKGgpLT5jaHVua19saW1pdCkJCQkJXAorICAgPyAoX29ic3RhY2tfbmV3Y2h1bmsgKChoKSwgMSksIDApIDogMCksCQkJCVwKKyAgb2JzdGFja18xZ3Jvd19mYXN0IChoLCBkYXR1bSkpCisKKyMgZGVmaW5lIG9ic3RhY2tfcHRyX2dyb3coaCxkYXR1bSkJCQkJCVwKKyggKCgoaCktPm5leHRfZnJlZSArIHNpemVvZiAoY2hhciAqKSA+IChoKS0+Y2h1bmtfbGltaXQpCQlcCisgICA/IChfb2JzdGFja19uZXdjaHVuayAoKGgpLCBzaXplb2YgKGNoYXIgKikpLCAwKSA6IDApLAkJXAorICBvYnN0YWNrX3B0cl9ncm93X2Zhc3QgKGgsIGRhdHVtKSkKKworIyBkZWZpbmUgb2JzdGFja19pbnRfZ3JvdyhoLGRhdHVtKQkJCQkJXAorKCAoKChoKS0+bmV4dF9mcmVlICsgc2l6ZW9mIChpbnQpID4gKGgpLT5jaHVua19saW1pdCkJCQlcCisgICA/IChfb2JzdGFja19uZXdjaHVuayAoKGgpLCBzaXplb2YgKGludCkpLCAwKSA6IDApLAkJCVwKKyAgb2JzdGFja19pbnRfZ3Jvd19mYXN0IChoLCBkYXR1bSkpCisKKyMgZGVmaW5lIG9ic3RhY2tfcHRyX2dyb3dfZmFzdChoLGFwdHIpCQkJCQlcCisgICgoKGNvbnN0IHZvaWQgKiopICgoaCktPm5leHRfZnJlZSArPSBzaXplb2YgKHZvaWQgKikpKVstMV0gPSAoYXB0cikpCisKKyMgZGVmaW5lIG9ic3RhY2tfaW50X2dyb3dfZmFzdChoLGFpbnQpCQkJCQlcCisgICgoKGludCAqKSAoKGgpLT5uZXh0X2ZyZWUgKz0gc2l6ZW9mIChpbnQpKSlbLTFdID0gKGFwdHIpKQorCisjIGRlZmluZSBvYnN0YWNrX2JsYW5rKGgsbGVuZ3RoKQkJCQkJXAorKCAoaCktPnRlbXAgPSAobGVuZ3RoKSwJCQkJCQkJXAorICAoKChoKS0+Y2h1bmtfbGltaXQgLSAoaCktPm5leHRfZnJlZSA8IChoKS0+dGVtcCkJCQlcCisgICA/IChfb2JzdGFja19uZXdjaHVuayAoKGgpLCAoaCktPnRlbXApLCAwKSA6IDApLAkJCVwKKyAgb2JzdGFja19ibGFua19mYXN0IChoLCAoaCktPnRlbXApKQorCisjIGRlZmluZSBvYnN0YWNrX2FsbG9jKGgsbGVuZ3RoKQkJCQkJXAorIChvYnN0YWNrX2JsYW5rICgoaCksIChsZW5ndGgpKSwgb2JzdGFja19maW5pc2ggKChoKSkpCisKKyMgZGVmaW5lIG9ic3RhY2tfY29weShoLHdoZXJlLGxlbmd0aCkJCQkJCVwKKyAob2JzdGFja19ncm93ICgoaCksICh3aGVyZSksIChsZW5ndGgpKSwgb2JzdGFja19maW5pc2ggKChoKSkpCisKKyMgZGVmaW5lIG9ic3RhY2tfY29weTAoaCx3aGVyZSxsZW5ndGgpCQkJCQlcCisgKG9ic3RhY2tfZ3JvdzAgKChoKSwgKHdoZXJlKSwgKGxlbmd0aCkpLCBvYnN0YWNrX2ZpbmlzaCAoKGgpKSkKKworIyBkZWZpbmUgb2JzdGFja19maW5pc2goaCkgIAkJCQkJCVwKKyggKChoKS0+bmV4dF9mcmVlID09IChoKS0+b2JqZWN0X2Jhc2UJCQkJCVwKKyAgID8gKCgoaCktPm1heWJlX2VtcHR5X29iamVjdCA9IDEpLCAwKQkJCQkJXAorICAgOiAwKSwJCQkJCQkJCVwKKyAgKGgpLT50ZW1wID0gX19QVFJfVE9fSU5UICgoaCktPm9iamVjdF9iYXNlKSwJCQkJXAorICAoaCktPm5leHRfZnJlZQkJCQkJCQlcCisgICAgPSBfX0lOVF9UT19QVFIgKChfX1BUUl9UT19JTlQgKChoKS0+bmV4dF9mcmVlKSsoaCktPmFsaWdubWVudF9tYXNrKQlcCisJCSAgICAmIH4gKChoKS0+YWxpZ25tZW50X21hc2spKSwJCQkJXAorICAoKChoKS0+bmV4dF9mcmVlIC0gKGNoYXIgKikgKGgpLT5jaHVuawkJCQlcCisgICAgPiAoaCktPmNodW5rX2xpbWl0IC0gKGNoYXIgKikgKGgpLT5jaHVuaykJCQkJXAorICAgPyAoKGgpLT5uZXh0X2ZyZWUgPSAoaCktPmNodW5rX2xpbWl0KSA6IDApLAkJCQlcCisgIChoKS0+b2JqZWN0X2Jhc2UgPSAoaCktPm5leHRfZnJlZSwJCQkJCVwKKyAgKHZvaWQgKikgX19JTlRfVE9fUFRSICgoaCktPnRlbXApKQorCisjIGRlZmluZSBvYnN0YWNrX2ZyZWUoaCxvYmopCQkJCQkJXAorKCAoaCktPnRlbXAgPSAoY2hhciAqKSAob2JqKSAtIChjaGFyICopIChoKS0+Y2h1bmssCQkJXAorICAoKChoKS0+dGVtcCA+IDAgJiYgKGgpLT50ZW1wIDwgKGgpLT5jaHVua19saW1pdCAtIChjaGFyICopIChoKS0+Y2h1bmspXAorICAgPyAoaW50KSAoKGgpLT5uZXh0X2ZyZWUgPSAoaCktPm9iamVjdF9iYXNlCQkJCVwKKwkgICAgPSAoaCktPnRlbXAgKyAoY2hhciAqKSAoaCktPmNodW5rKQkJCQlcCisgICA6ICgoKG9ic3RhY2tfZnJlZSkgKChoKSwgKGgpLT50ZW1wICsgKGNoYXIgKikgKGgpLT5jaHVuayksIDApLCAwKSkpCisKKyNlbmRpZiAvKiBub3QgX19HTlVDX18gb3Igbm90IF9fU1REQ19fICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQkvKiBDKysgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogb2JzdGFjay5oICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvb21wLWJ1aWx0aW5zLmRlZiBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9vbXAtYnVpbHRpbnMuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZDRmOWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvb21wLWJ1aWx0aW5zLmRlZgpAQCAtMCwwICsxLDIwOCBAQAorLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBhbmQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlCisgICBPcGVuTVAgYnVpbHRpbnMgdXNlZCBpbiB0aGUgR05VIGNvbXBpbGVyLgorICAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogQmVmb3JlIGluY2x1ZGluZyB0aGlzIGZpbGUsIHlvdSBzaG91bGQgZGVmaW5lIGEgbWFjcm86CisKKyAgICAgREVGX0dPTVBfQlVJTFRJTiAoRU5VTSwgTkFNRSwgVFlQRSwgQVRUUlMpCisKKyAgIFNlZSBidWlsdGlucy5kZWYgZm9yIGRldGFpbHMuICAqLworCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9PTVBfR0VUX1RIUkVBRF9OVU0sICJvbXBfZ2V0X3RocmVhZF9udW0iLAorCQkgIEJUX0ZOX0lOVCwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9PTVBfR0VUX05VTV9USFJFQURTLCAib21wX2dldF9udW1fdGhyZWFkcyIsCisJCSAgQlRfRk5fSU5ULCBBVFRSX0NPTlNUX05PVEhST1dfTElTVCkKKworREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9BVE9NSUNfU1RBUlQsICJHT01QX2F0b21pY19zdGFydCIsCisJCSAgQlRfRk5fVk9JRCwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX0FUT01JQ19FTkQsICJHT01QX2F0b21pY19lbmQiLAorCQkgIEJUX0ZOX1ZPSUQsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9CQVJSSUVSLCAiR09NUF9iYXJyaWVyIiwKKwkJICBCVF9GTl9WT0lELCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfVEFTS1dBSVQsICJHT01QX3Rhc2t3YWl0IiwKKwkJICBCVF9GTl9WT0lELCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfQ1JJVElDQUxfU1RBUlQsICJHT01QX2NyaXRpY2FsX3N0YXJ0IiwKKwkJICBCVF9GTl9WT0lELCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfQ1JJVElDQUxfRU5ELCAiR09NUF9jcml0aWNhbF9lbmQiLAorCQkgIEJUX0ZOX1ZPSUQsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9DUklUSUNBTF9OQU1FX1NUQVJULAorCQkgICJHT01QX2NyaXRpY2FsX25hbWVfc3RhcnQiLAorCQkgIEJUX0ZOX1ZPSURfUFRSUFRSLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfQ1JJVElDQUxfTkFNRV9FTkQsCisJCSAgIkdPTVBfY3JpdGljYWxfbmFtZV9lbmQiLAorCQkgIEJUX0ZOX1ZPSURfUFRSUFRSLCBBVFRSX05PVEhST1dfTElTVCkKKy8qIE5PVEU6IERvIG5vdCBjaGFuZ2UgdGhlIG9yZGVyIG9mIEJVSUxUX0lOX0dPTVBfTE9PUF8qX1NUQVJULiAgVGhleQorICAgYXJlIHVzZWQgaW4gaW5kZXggYXJpdGhtZXRpYyB3aXRoIGVudW0gb21wX2NsYXVzZV9zY2hlZHVsZV9raW5kCisgICBpbiBvbXAtbG93LmMuICAqLworREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX1NUQVRJQ19TVEFSVCwKKwkJICAiR09NUF9sb29wX3N0YXRpY19zdGFydCIsCisJCSAgQlRfRk5fQk9PTF9MT05HX0xPTkdfTE9OR19MT05HX0xPTkdQVFJfTE9OR1BUUiwKKwkJICBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfTE9PUF9EWU5BTUlDX1NUQVJULAorCQkgICJHT01QX2xvb3BfZHluYW1pY19zdGFydCIsCisJCSAgQlRfRk5fQk9PTF9MT05HX0xPTkdfTE9OR19MT05HX0xPTkdQVFJfTE9OR1BUUiwKKwkJICBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfTE9PUF9HVUlERURfU1RBUlQsCisJCSAgIkdPTVBfbG9vcF9ndWlkZWRfc3RhcnQiLAorCQkgIEJUX0ZOX0JPT0xfTE9OR19MT05HX0xPTkdfTE9OR19MT05HUFRSX0xPTkdQVFIsCisJCSAgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX0xPT1BfUlVOVElNRV9TVEFSVCwKKwkJICAiR09NUF9sb29wX3J1bnRpbWVfc3RhcnQiLAorCQkgIEJUX0ZOX0JPT0xfTE9OR19MT05HX0xPTkdfTE9OR1BUUl9MT05HUFRSLAorCQkgIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX09SREVSRURfU1RBVElDX1NUQVJULAorCQkgICJHT01QX2xvb3Bfb3JkZXJlZF9zdGF0aWNfc3RhcnQiLAorCQkgIEJUX0ZOX0JPT0xfTE9OR19MT05HX0xPTkdfTE9OR19MT05HUFRSX0xPTkdQVFIsCisJCSAgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX0xPT1BfT1JERVJFRF9EWU5BTUlDX1NUQVJULAorCQkgICJHT01QX2xvb3Bfb3JkZXJlZF9keW5hbWljX3N0YXJ0IiwKKwkJICBCVF9GTl9CT09MX0xPTkdfTE9OR19MT05HX0xPTkdfTE9OR1BUUl9MT05HUFRSLAorCQkgIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX09SREVSRURfR1VJREVEX1NUQVJULAorCQkgICJHT01QX2xvb3Bfb3JkZXJlZF9ndWlkZWRfc3RhcnQiLAorCQkgIEJUX0ZOX0JPT0xfTE9OR19MT05HX0xPTkdfTE9OR19MT05HUFRSX0xPTkdQVFIsCisJCSAgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX0xPT1BfT1JERVJFRF9SVU5USU1FX1NUQVJULAorCQkgICJHT01QX2xvb3Bfb3JkZXJlZF9ydW50aW1lX3N0YXJ0IiwKKwkJICBCVF9GTl9CT09MX0xPTkdfTE9OR19MT05HX0xPTkdQVFJfTE9OR1BUUiwKKwkJICBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfTE9PUF9TVEFUSUNfTkVYVCwgIkdPTVBfbG9vcF9zdGF0aWNfbmV4dCIsCisJCSAgQlRfRk5fQk9PTF9MT05HUFRSX0xPTkdQVFIsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX0RZTkFNSUNfTkVYVCwgIkdPTVBfbG9vcF9keW5hbWljX25leHQiLAorCQkgIEJUX0ZOX0JPT0xfTE9OR1BUUl9MT05HUFRSLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfTE9PUF9HVUlERURfTkVYVCwgIkdPTVBfbG9vcF9ndWlkZWRfbmV4dCIsCisJCSAgQlRfRk5fQk9PTF9MT05HUFRSX0xPTkdQVFIsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX1JVTlRJTUVfTkVYVCwgIkdPTVBfbG9vcF9ydW50aW1lX25leHQiLAorCQkgIEJUX0ZOX0JPT0xfTE9OR1BUUl9MT05HUFRSLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfTE9PUF9PUkRFUkVEX1NUQVRJQ19ORVhULAorCQkgICJHT01QX2xvb3Bfb3JkZXJlZF9zdGF0aWNfbmV4dCIsCisJCSAgQlRfRk5fQk9PTF9MT05HUFRSX0xPTkdQVFIsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX09SREVSRURfRFlOQU1JQ19ORVhULAorCQkgICJHT01QX2xvb3Bfb3JkZXJlZF9keW5hbWljX25leHQiLAorCQkgIEJUX0ZOX0JPT0xfTE9OR1BUUl9MT05HUFRSLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfTE9PUF9PUkRFUkVEX0dVSURFRF9ORVhULAorCQkgICJHT01QX2xvb3Bfb3JkZXJlZF9ndWlkZWRfbmV4dCIsCisJCSAgQlRfRk5fQk9PTF9MT05HUFRSX0xPTkdQVFIsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX09SREVSRURfUlVOVElNRV9ORVhULAorCQkgICJHT01QX2xvb3Bfb3JkZXJlZF9ydW50aW1lX25leHQiLAorCQkgIEJUX0ZOX0JPT0xfTE9OR1BUUl9MT05HUFRSLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfTE9PUF9VTExfU1RBVElDX1NUQVJULAorCQkgICJHT01QX2xvb3BfdWxsX3N0YXRpY19zdGFydCIsCisJCSAgQlRfRk5fQk9PTF9CT09MX1VMTF9VTExfVUxMX1VMTF9VTExQVFJfVUxMUFRSLAorCQkgIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX1VMTF9EWU5BTUlDX1NUQVJULAorCQkgICJHT01QX2xvb3BfdWxsX2R5bmFtaWNfc3RhcnQiLAorCQkgIEJUX0ZOX0JPT0xfQk9PTF9VTExfVUxMX1VMTF9VTExfVUxMUFRSX1VMTFBUUiwKKwkJICBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfTE9PUF9VTExfR1VJREVEX1NUQVJULAorCQkgICJHT01QX2xvb3BfdWxsX2d1aWRlZF9zdGFydCIsCisJCSAgQlRfRk5fQk9PTF9CT09MX1VMTF9VTExfVUxMX1VMTF9VTExQVFJfVUxMUFRSLAorCQkgIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX1VMTF9SVU5USU1FX1NUQVJULAorCQkgICJHT01QX2xvb3BfdWxsX3J1bnRpbWVfc3RhcnQiLAorCQkgIEJUX0ZOX0JPT0xfQk9PTF9VTExfVUxMX1VMTF9VTExQVFJfVUxMUFRSLAorCQkgIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX1VMTF9PUkRFUkVEX1NUQVRJQ19TVEFSVCwKKwkJICAiR09NUF9sb29wX3VsbF9vcmRlcmVkX3N0YXRpY19zdGFydCIsCisJCSAgQlRfRk5fQk9PTF9CT09MX1VMTF9VTExfVUxMX1VMTF9VTExQVFJfVUxMUFRSLAorCQkgIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX1VMTF9PUkRFUkVEX0RZTkFNSUNfU1RBUlQsCisJCSAgIkdPTVBfbG9vcF91bGxfb3JkZXJlZF9keW5hbWljX3N0YXJ0IiwKKwkJICBCVF9GTl9CT09MX0JPT0xfVUxMX1VMTF9VTExfVUxMX1VMTFBUUl9VTExQVFIsCisJCSAgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX0xPT1BfVUxMX09SREVSRURfR1VJREVEX1NUQVJULAorCQkgICJHT01QX2xvb3BfdWxsX29yZGVyZWRfZ3VpZGVkX3N0YXJ0IiwKKwkJICBCVF9GTl9CT09MX0JPT0xfVUxMX1VMTF9VTExfVUxMX1VMTFBUUl9VTExQVFIsCisJCSAgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX0xPT1BfVUxMX09SREVSRURfUlVOVElNRV9TVEFSVCwKKwkJICAiR09NUF9sb29wX3VsbF9vcmRlcmVkX3J1bnRpbWVfc3RhcnQiLAorCQkgIEJUX0ZOX0JPT0xfQk9PTF9VTExfVUxMX1VMTF9VTExQVFJfVUxMUFRSLAorCQkgIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX1VMTF9TVEFUSUNfTkVYVCwgIkdPTVBfbG9vcF91bGxfc3RhdGljX25leHQiLAorCQkgIEJUX0ZOX0JPT0xfVUxPTkdMT05HUFRSX1VMT05HTE9OR1BUUiwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX0xPT1BfVUxMX0RZTkFNSUNfTkVYVCwgIkdPTVBfbG9vcF91bGxfZHluYW1pY19uZXh0IiwKKwkJICBCVF9GTl9CT09MX1VMT05HTE9OR1BUUl9VTE9OR0xPTkdQVFIsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX1VMTF9HVUlERURfTkVYVCwgIkdPTVBfbG9vcF91bGxfZ3VpZGVkX25leHQiLAorCQkgIEJUX0ZOX0JPT0xfVUxPTkdMT05HUFRSX1VMT05HTE9OR1BUUiwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX0xPT1BfVUxMX1JVTlRJTUVfTkVYVCwgIkdPTVBfbG9vcF91bGxfcnVudGltZV9uZXh0IiwKKwkJICBCVF9GTl9CT09MX1VMT05HTE9OR1BUUl9VTE9OR0xPTkdQVFIsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX1VMTF9PUkRFUkVEX1NUQVRJQ19ORVhULAorCQkgICJHT01QX2xvb3BfdWxsX29yZGVyZWRfc3RhdGljX25leHQiLAorCQkgIEJUX0ZOX0JPT0xfVUxPTkdMT05HUFRSX1VMT05HTE9OR1BUUiwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX0xPT1BfVUxMX09SREVSRURfRFlOQU1JQ19ORVhULAorCQkgICJHT01QX2xvb3BfdWxsX29yZGVyZWRfZHluYW1pY19uZXh0IiwKKwkJICBCVF9GTl9CT09MX1VMT05HTE9OR1BUUl9VTE9OR0xPTkdQVFIsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX1VMTF9PUkRFUkVEX0dVSURFRF9ORVhULAorCQkgICJHT01QX2xvb3BfdWxsX29yZGVyZWRfZ3VpZGVkX25leHQiLAorCQkgIEJUX0ZOX0JPT0xfVUxPTkdMT05HUFRSX1VMT05HTE9OR1BUUiwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX0xPT1BfVUxMX09SREVSRURfUlVOVElNRV9ORVhULAorCQkgICJHT01QX2xvb3BfdWxsX29yZGVyZWRfcnVudGltZV9uZXh0IiwKKwkJICBCVF9GTl9CT09MX1VMT05HTE9OR1BUUl9VTE9OR0xPTkdQVFIsIEFUVFJfTk9USFJPV19MSVNUKQorLyogTk9URTogRG8gbm90IGNoYW5nZSB0aGUgb3JkZXIgb2YgQlVJTFRfSU5fR09NUF9QQVJBTExFTF9MT09QXypfU1RBUlQuCisgICBUaGV5IGFyZSB1c2VkIGluIGluZGV4IGFyaXRobWV0aWMgd2l0aCBlbnVtIG9tcF9jbGF1c2Vfc2NoZWR1bGVfa2luZAorICAgaW4gb21wLWxvdy5jLiAgKi8KK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfUEFSQUxMRUxfTE9PUF9TVEFUSUNfU1RBUlQsCisJCSAgIkdPTVBfcGFyYWxsZWxfbG9vcF9zdGF0aWNfc3RhcnQiLAorCQkgIEJUX0ZOX1ZPSURfT01QRk5fUFRSX1VJTlRfTE9OR19MT05HX0xPTkdfTE9ORywKKwkJICBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfUEFSQUxMRUxfTE9PUF9EWU5BTUlDX1NUQVJULAorCQkgICJHT01QX3BhcmFsbGVsX2xvb3BfZHluYW1pY19zdGFydCIsCisJCSAgQlRfRk5fVk9JRF9PTVBGTl9QVFJfVUlOVF9MT05HX0xPTkdfTE9OR19MT05HLAorCQkgIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9QQVJBTExFTF9MT09QX0dVSURFRF9TVEFSVCwKKwkJICAiR09NUF9wYXJhbGxlbF9sb29wX2d1aWRlZF9zdGFydCIsCisJCSAgQlRfRk5fVk9JRF9PTVBGTl9QVFJfVUlOVF9MT05HX0xPTkdfTE9OR19MT05HLAorCQkgIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9QQVJBTExFTF9MT09QX1JVTlRJTUVfU1RBUlQsCisJCSAgIkdPTVBfcGFyYWxsZWxfbG9vcF9ydW50aW1lX3N0YXJ0IiwKKwkJICBCVF9GTl9WT0lEX09NUEZOX1BUUl9VSU5UX0xPTkdfTE9OR19MT05HLAorCQkgIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX0VORCwgIkdPTVBfbG9vcF9lbmQiLAorCQkgIEJUX0ZOX1ZPSUQsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX0VORF9OT1dBSVQsICJHT01QX2xvb3BfZW5kX25vd2FpdCIsCisJCSAgQlRfRk5fVk9JRCwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX09SREVSRURfU1RBUlQsICJHT01QX29yZGVyZWRfc3RhcnQiLAorCQkgIEJUX0ZOX1ZPSUQsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9PUkRFUkVEX0VORCwgIkdPTVBfb3JkZXJlZF9lbmQiLAorCQkgIEJUX0ZOX1ZPSUQsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9QQVJBTExFTF9TVEFSVCwgIkdPTVBfcGFyYWxsZWxfc3RhcnQiLAorCQkgIEJUX0ZOX1ZPSURfT01QRk5fUFRSX1VJTlQsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9QQVJBTExFTF9FTkQsICJHT01QX3BhcmFsbGVsX2VuZCIsCisJCSAgQlRfRk5fVk9JRCwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX1RBU0ssICJHT01QX3Rhc2siLAorCQkgIEJUX0ZOX1ZPSURfT01QRk5fUFRSX09NUENQWUZOX0xPTkdfTE9OR19CT09MX1VJTlQsCisJCSAgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX1NFQ1RJT05TX1NUQVJULCAiR09NUF9zZWN0aW9uc19zdGFydCIsCisJCSAgQlRfRk5fVUlOVF9VSU5ULCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfU0VDVElPTlNfTkVYVCwgIkdPTVBfc2VjdGlvbnNfbmV4dCIsCisJCSAgQlRfRk5fVUlOVCwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX1BBUkFMTEVMX1NFQ1RJT05TX1NUQVJULAorCQkgICJHT01QX3BhcmFsbGVsX3NlY3Rpb25zX3N0YXJ0IiwKKwkJICBCVF9GTl9WT0lEX09NUEZOX1BUUl9VSU5UX1VJTlQsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9TRUNUSU9OU19FTkQsICJHT01QX3NlY3Rpb25zX2VuZCIsCisJCSAgQlRfRk5fVk9JRCwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX1NFQ1RJT05TX0VORF9OT1dBSVQsCisJCSAgIkdPTVBfc2VjdGlvbnNfZW5kX25vd2FpdCIsCisJCSAgQlRfRk5fVk9JRCwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX1NJTkdMRV9TVEFSVCwgIkdPTVBfc2luZ2xlX3N0YXJ0IiwKKwkJICBCVF9GTl9CT09MLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfU0lOR0xFX0NPUFlfU1RBUlQsICJHT01QX3NpbmdsZV9jb3B5X3N0YXJ0IiwKKwkJICBCVF9GTl9QVFIsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9TSU5HTEVfQ09QWV9FTkQsICJHT01QX3NpbmdsZV9jb3B5X2VuZCIsCisJCSAgQlRfRk5fVk9JRF9QVFIsIEFUVFJfTk9USFJPV19MSVNUKQpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL29wdGlvbnMuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9vcHRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQyMWE4YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9vcHRpb25zLmgKQEAgLTAsMCArMSwxNDg0IEBACisvKiBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgb3B0aC1nZW4uYXdrLiAgKi8KKworI2lmbmRlZiBPUFRJT05TX0gKKyNkZWZpbmUgT1BUSU9OU19ICisKK2V4dGVybiBpbnQgdGFyZ2V0X2ZsYWdzOworZXh0ZXJuIGludCB0YXJnZXRfZmxhZ3NfZXhwbGljaXQ7CisKK2V4dGVybiBpbnQgZXh0cmFfd2FybmluZ3M7CitleHRlcm4gaW50IHdhcm5fYWJpOworZXh0ZXJuIGludCB3YXJuX2FkZHJlc3M7CitleHRlcm4gaW50IHdhcm5fYWdncmVnYXRlX3JldHVybjsKK2V4dGVybiBpbnQgd2Fybl9hcnJheV9ib3VuZHM7CitleHRlcm4gaW50IHdhcm5fYXNzaWduX2ludGVyY2VwdDsKK2V4dGVybiBpbnQgd2Fybl9hdHRyaWJ1dGVzOworZXh0ZXJuIGludCB3YXJuX2JhZF9mdW5jdGlvbl9jYXN0OworZXh0ZXJuIGludCB3YXJuX2N4eF9jb21wYXQ7CitleHRlcm4gaW50IHdhcm5fY3h4MHhfY29tcGF0OworZXh0ZXJuIGludCB3YXJuX2Nhc3RfYWxpZ247CitleHRlcm4gaW50IHdhcm5fY2FzdF9xdWFsOworZXh0ZXJuIGludCB3YXJuX2NoYXJfc3Vic2NyaXB0czsKK2V4dGVybiBpbnQgd2Fybl9jbG9iYmVyZWQ7CitleHRlcm4gaW50IHdhcm5fY29udmVyc2lvbjsKK2V4dGVybiBpbnQgd2Fybl9jb252ZXJzaW9uX251bGw7CitleHRlcm4gaW50IHdhcm5fY292ZXJhZ2VfbWlzbWF0Y2g7CitleHRlcm4gaW50IHdhcm5fY3Rvcl9kdG9yX3ByaXZhY3k7CitleHRlcm4gaW50IHdhcm5fZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50OworZXh0ZXJuIGludCB3YXJuX2RlcHJlY2F0ZWQ7CitleHRlcm4gaW50IHdhcm5fZGVwcmVjYXRlZF9kZWNsOworZXh0ZXJuIGludCB3YXJuX2Rpc2FibGVkX29wdGltaXphdGlvbjsKK2V4dGVybiBpbnQgd2Fybl9kaXZfYnlfemVybzsKK2V4dGVybiBpbnQgd2Fybl9lY3BwOworZXh0ZXJuIGludCB3YXJuX2VtcHR5X2JvZHk7CitleHRlcm4gaW50IHdhcm5fZW51bV9jb21wYXJlOworZXh0ZXJuIGludCB3YXJuaW5nc19hcmVfZXJyb3JzOworZXh0ZXJuIGludCBmbGFnX2V4dHJhbmVvdXNfc2VtaWNvbG9uOworZXh0ZXJuIGludCBmbGFnX2ZhdGFsX2Vycm9yczsKK2V4dGVybiBpbnQgd2Fybl9mbG9hdF9lcXVhbDsKK2V4dGVybiBpbnQgd2Fybl9mb3JtYXRfY29udGFpbnNfbnVsOworZXh0ZXJuIGludCB3YXJuX2Zvcm1hdF9leHRyYV9hcmdzOworZXh0ZXJuIGludCB3YXJuX2Zvcm1hdF9ub25saXRlcmFsOworZXh0ZXJuIGludCB3YXJuX2Zvcm1hdF9zZWN1cml0eTsKK2V4dGVybiBpbnQgd2Fybl9mb3JtYXRfeTJrOworZXh0ZXJuIGludCB3YXJuX2Zvcm1hdF96ZXJvX2xlbmd0aDsKK2V4dGVybiBpbnQgd2Fybl9pZ25vcmVkX3F1YWxpZmllcnM7CitleHRlcm4gaW50IHdhcm5faW1wbGljaXRfZnVuY3Rpb25fZGVjbGFyYXRpb247CitleHRlcm4gaW50IHdhcm5faW1wbGljaXRfaW50OworZXh0ZXJuIGludCB3YXJuX2luaXRfc2VsZjsKK2V4dGVybiBpbnQgd2Fybl9pbmxpbmU7CitleHRlcm4gaW50IHdhcm5faW50X3RvX3BvaW50ZXJfY2FzdDsKK2V4dGVybiBpbnQgd2Fybl9pbnZhbGlkX29mZnNldG9mOworZXh0ZXJuIGludCB3YXJuX2p1bXBfbWlzc2VzX2luaXQ7CitleHRlcm4gaW50IHdhcm5fbG9naWNhbF9vcDsKK2V4dGVybiBpbnQgd2Fybl9sb25nX2xvbmc7CitleHRlcm4gaW50IHdhcm5fbWFpbjsKK2V4dGVybiBpbnQgd2Fybl9taXNzaW5nX2JyYWNlczsKK2V4dGVybiBpbnQgd2Fybl9taXNzaW5nX2RlY2xhcmF0aW9uczsKK2V4dGVybiBpbnQgd2Fybl9taXNzaW5nX2ZpZWxkX2luaXRpYWxpemVyczsKK2V4dGVybiBpbnQgd2Fybl9taXNzaW5nX2Zvcm1hdF9hdHRyaWJ1dGU7CitleHRlcm4gaW50IHdhcm5fbWlzc2luZ19ub3JldHVybjsKK2V4dGVybiBpbnQgd2Fybl9taXNzaW5nX3BhcmFtZXRlcl90eXBlOworZXh0ZXJuIGludCB3YXJuX21pc3NpbmdfcHJvdG90eXBlczsKK2V4dGVybiBpbnQgd2Fybl9tdWRmbGFwOworZXh0ZXJuIGludCB3YXJuX25lc3RlZF9leHRlcm5zOworZXh0ZXJuIGludCB3YXJuX25vbnRlbXBsYXRlX2ZyaWVuZDsKK2V4dGVybiBpbnQgd2Fybl9ub252ZHRvcjsKK2V4dGVybiBpbnQgd2Fybl9ub25udWxsOworZXh0ZXJuIGludCB3YXJuX29sZF9zdHlsZV9jYXN0OworZXh0ZXJuIGludCB3YXJuX29sZF9zdHlsZV9kZWNsYXJhdGlvbjsKK2V4dGVybiBpbnQgd2Fybl9vbGRfc3R5bGVfZGVmaW5pdGlvbjsKK2V4dGVybiBpbnQgZmxhZ19uZXdlcjsKK2V4dGVybiBpbnQgd2Fybl9vdmVyZmxvdzsKK2V4dGVybiBpbnQgd2Fybl9vdmVybGVuZ3RoX3N0cmluZ3M7CitleHRlcm4gaW50IHdhcm5fb3ZlcmxvYWRlZF92aXJ0dWFsOworZXh0ZXJuIGludCB3YXJuX292ZXJyaWRlX2luaXQ7CitleHRlcm4gaW50IHdhcm5fcGFja2VkOworZXh0ZXJuIGludCB3YXJuX3BhY2tlZF9iaXRmaWVsZF9jb21wYXQ7CitleHRlcm4gaW50IHdhcm5fcGFkZGVkOworZXh0ZXJuIGludCB3YXJuX3BhcmVudGhlc2VzOworZXh0ZXJuIGludCB3YXJuX3BtZjJwdHI7CitleHRlcm4gaW50IHdhcm5fcG9pbnRlcl9hcml0aDsKK2V4dGVybiBpbnQgd2Fybl9wb2ludGVyX3NpZ247CitleHRlcm4gaW50IHdhcm5fcG9pbnRlcl90b19pbnRfY2FzdDsKK2V4dGVybiBpbnQgd2Fybl9wcmFnbWFzOworZXh0ZXJuIGludCB3YXJuX3Byb3RvY29sOworZXh0ZXJuIGludCB3YXJuX3BzYWJpOworZXh0ZXJuIGludCB3YXJuX3JlZHVuZGFudF9kZWNsczsKK2V4dGVybiBpbnQgZmxhZ19yZWR1bmRhbnQ7CitleHRlcm4gaW50IHdhcm5fcmVvcmRlcjsKK2V4dGVybiBpbnQgd2Fybl9yZXR1cm5fdHlwZTsKK2V4dGVybiBpbnQgd2Fybl9zZWxlY3RvcjsKK2V4dGVybiBpbnQgd2Fybl9zZXF1ZW5jZV9wb2ludDsKK2V4dGVybiBpbnQgd2Fybl9zaGFkb3c7CitleHRlcm4gaW50IHdhcm5fc2lnbl9jb21wYXJlOworZXh0ZXJuIGludCB3YXJuX3NpZ25fY29udmVyc2lvbjsKK2V4dGVybiBpbnQgd2Fybl9zaWduX3Byb21vOworZXh0ZXJuIGludCB3YXJuX3N0YWNrX3Byb3RlY3Q7CitleHRlcm4gaW50IHdhcm5fc3RyaWN0X2FsaWFzaW5nOworZXh0ZXJuIGludCB3YXJuX3N0cmljdF9vdmVyZmxvdzsKK2V4dGVybiBpbnQgd2Fybl9zdHJpY3RfcHJvdG90eXBlczsKK2V4dGVybiBpbnQgd2Fybl9zdHJpY3Rfc2VsZWN0b3JfbWF0Y2g7CitleHRlcm4gaW50IHdhcm5fc3dpdGNoOworZXh0ZXJuIGludCB3YXJuX3N3aXRjaF9kZWZhdWx0OworZXh0ZXJuIGludCB3YXJuX3N3aXRjaF9lbnVtOworZXh0ZXJuIGludCB3YXJuX3N5bmNfbmFuZDsKK2V4dGVybiBpbnQgd2Fybl9zeW50aDsKK2V4dGVybiBpbnQgd2Fybl9zeXN0ZW1faGVhZGVyczsKK2V4dGVybiBpbnQgd2Fybl90cmFkaXRpb25hbDsKK2V4dGVybiBpbnQgd2Fybl90cmFkaXRpb25hbF9jb252ZXJzaW9uOworZXh0ZXJuIGludCB3YXJuX3R5cGVfbGltaXRzOworZXh0ZXJuIGludCB3YXJuX3VuZGVjbGFyZWRfc2VsZWN0b3I7CitleHRlcm4gaW50IHdhcm5fdW5pbml0aWFsaXplZDsKK2V4dGVybiBpbnQgd2Fybl91bnNhZmVfbG9vcF9vcHRpbWl6YXRpb25zOworZXh0ZXJuIGludCB3YXJuX3Vuc3VmZml4ZWRfZmxvYXRfY29uc3RhbnRzOworZXh0ZXJuIGludCB3YXJuX3VudXNlZDsKK2V4dGVybiBpbnQgd2Fybl91bnVzZWRfZnVuY3Rpb247CitleHRlcm4gaW50IHdhcm5fdW51c2VkX2xhYmVsOworZXh0ZXJuIGludCB3YXJuX3VudXNlZF9wYXJhbWV0ZXI7CitleHRlcm4gaW50IHdhcm5fdW51c2VkX3Jlc3VsdDsKK2V4dGVybiBpbnQgd2Fybl91bnVzZWRfdmFsdWU7CitleHRlcm4gaW50IHdhcm5fdW51c2VkX3ZhcmlhYmxlOworZXh0ZXJuIGludCB3YXJuX3ZsYTsKK2V4dGVybiBpbnQgd2Fybl92b2xhdGlsZV9yZWdpc3Rlcl92YXI7CitleHRlcm4gaW50IHdhcm5fd3JpdGVfc3RyaW5nczsKK2V4dGVybiBpbnQgZmxhZ19waWM7CitleHRlcm4gaW50IGZsYWdfcGllOworZXh0ZXJuIGludCBmbGFnX2FiaV92ZXJzaW9uOworZXh0ZXJuIGludCBhbGlnbl9mdW5jdGlvbnM7CitleHRlcm4gaW50IGFsaWduX2p1bXBzOworZXh0ZXJuIGludCBhbGlnbl9sYWJlbHM7CitleHRlcm4gaW50IGFsaWduX2xvb3BzOworZXh0ZXJuIGludCBmbGFnX2FyZ3VtZW50X25vYWxpYXM7CitleHRlcm4gaW50IGZsYWdfYXNzZXJ0OworZXh0ZXJuIGludCBmbGFnX2Fzc29jaWF0aXZlX21hdGg7CitleHRlcm4gaW50IGZsYWdfYXN5bmNocm9ub3VzX3Vud2luZF90YWJsZXM7CitleHRlcm4gaW50IGZsYWdfYXV0b19pbmNfZGVjOworZXh0ZXJuIGludCBmbGFnX2Jvb3RzdHJhcF9jbGFzc2VzOworZXh0ZXJuIGludCBmbGFnX2JvdW5kc19jaGVjazsKK2V4dGVybiBpbnQgZmxhZ19icmFuY2hfb25fY291bnRfcmVnOworZXh0ZXJuIGludCBmbGFnX2JyYW5jaF9wcm9iYWJpbGl0aWVzOworZXh0ZXJuIGludCBmbGFnX2JyYW5jaF90YXJnZXRfbG9hZF9vcHRpbWl6ZTsKK2V4dGVybiBpbnQgZmxhZ19icmFuY2hfdGFyZ2V0X2xvYWRfb3B0aW1pemUyOworZXh0ZXJuIGludCBmbGFnX2J0cl9iYl9leGNsdXNpdmU7CitleHRlcm4gaW50IGZsYWdfY2FsbGVyX3NhdmVzOworZXh0ZXJuIGludCBmbGFnX2NoZWNrX2RhdGFfZGVwczsKK2V4dGVybiBpbnQgZmxhZ19jaGVja19yZWZlcmVuY2VzOworZXh0ZXJuIGludCBmbGFnX25vX2NvbW1vbjsKK2V4dGVybiBpbnQgZmxhZ19jb21wYXJlX2RlYnVnOworZXh0ZXJuIGNvbnN0IGNoYXIgKmZsYWdfY29tcGFyZV9kZWJ1Z19vcHQ7CitleHRlcm4gaW50IGZsYWdfY29uc2VydmVfc3RhY2s7CitleHRlcm4gaW50IGZsYWdfY3Byb3BfcmVnaXN0ZXJzOworZXh0ZXJuIGludCBmbGFnX2Nyb3NzanVtcGluZzsKK2V4dGVybiBpbnQgZmxhZ19jc2VfZm9sbG93X2p1bXBzOworZXh0ZXJuIGludCBmbGFnX2N4X2ZvcnRyYW5fcnVsZXM7CitleHRlcm4gaW50IGZsYWdfY3hfbGltaXRlZF9yYW5nZTsKK2V4dGVybiBpbnQgZmxhZ19kYXRhX3NlY3Rpb25zOworZXh0ZXJuIGludCBmbGFnX2RjZTsKK2V4dGVybiBpbnQgZmxhZ19kZWR1Y2VfaW5pdF9saXN0OworZXh0ZXJuIGludCBmbGFnX2RlZmVyX3BvcDsKK2V4dGVybiBpbnQgZmxhZ19kZWxheWVkX2JyYW5jaDsKK2V4dGVybiBpbnQgZmxhZ19kZWxldGVfbnVsbF9wb2ludGVyX2NoZWNrczsKK2V4dGVybiBpbnQgZmxhZ19kc2U7CitleHRlcm4gY29uc3QgY2hhciAqZmxhZ19kdW1wX2ZpbmFsX2luc25zOworZXh0ZXJuIGludCBmbGFnX2R1bXBfbm9hZGRyOworZXh0ZXJuIGludCBmbGFnX2R1bXBfdW5udW1iZXJlZDsKK2V4dGVybiBpbnQgZmxhZ19kdW1wX3VubnVtYmVyZWRfbGlua3M7CitleHRlcm4gaW50IGZsYWdfZHdhcmYyX2NmaV9hc207CitleHRlcm4gaW50IGZsYWdfZWFybHlfaW5saW5pbmc7CitleHRlcm4gaW50IGZsYWdfZWxpbWluYXRlX2R3YXJmMl9kdXBzOworZXh0ZXJuIGludCBmbGFnX2RlYnVnX29ubHlfdXNlZF9zeW1ib2xzOworZXh0ZXJuIGludCBmbGFnX2VsaW1pbmF0ZV91bnVzZWRfZGVidWdfdHlwZXM7CitleHRlcm4gaW50IGZsYWdfZW1pdF9jbGFzc19kZWJ1Z19hbHdheXM7CitleHRlcm4gaW50IGZsYWdfZW1pdF9jbGFzc19maWxlczsKK2V4dGVybiBpbnQgZmxhZ19lbmFibGVfaWNmX2RlYnVnOworZXh0ZXJuIGludCBmbGFnX2V4Y2VwdGlvbnM7CitleHRlcm4gaW50IGZsYWdfZXhwZW5zaXZlX29wdGltaXphdGlvbnM7CitleHRlcm4gaW50IGZsYWdfZmlsZWxpc3RfZmlsZTsKK2V4dGVybiBpbnQgZmxhZ19maW5pdGVfbWF0aF9vbmx5OworZXh0ZXJuIGludCBmbGFnX2Zsb2F0X3N0b3JlOworZXh0ZXJuIGludCBmbGFnX2ZvcmNlX2NsYXNzZXNfYXJjaGl2ZV9jaGVjazsKK2V4dGVybiBpbnQgZmxhZ19mb3J3YXJkX3Byb3BhZ2F0ZTsKK2V4dGVybiBpbnQgZmxhZ19mcmllbmRfaW5qZWN0aW9uOworZXh0ZXJuIGludCBmbGFnX25vX2Z1bmN0aW9uX2NzZTsKK2V4dGVybiBpbnQgZmxhZ19mdW5jdGlvbl9zZWN0aW9uczsKK2V4dGVybiBpbnQgZmxhZ19nY3NlOworZXh0ZXJuIGludCBmbGFnX2djc2VfYWZ0ZXJfcmVsb2FkOworZXh0ZXJuIGludCBmbGFnX2djc2VfbGFzOworZXh0ZXJuIGludCBmbGFnX2djc2VfbG07CitleHRlcm4gaW50IGZsYWdfZ2NzZV9zbTsKK2V4dGVybiBpbnQgZmxhZ19nbnU4OV9pbmxpbmU7CitleHRlcm4gaW50IGZsYWdfZ3JhcGhpdGU7CitleHRlcm4gaW50IGZsYWdfZ3JhcGhpdGVfaWRlbnRpdHk7CitleHRlcm4gaW50IGZsYWdfZ3Vlc3NfYnJhbmNoX3Byb2I7CitleHRlcm4gaW50IGZsYWdfaGFzaF9zeW5jaHJvbml6YXRpb247CitleHRlcm4gaW50IGhlbHBfZmxhZzsKK2V4dGVybiBpbnQgZmxhZ19ub19pZGVudDsKK2V4dGVybiBpbnQgZmxhZ19pZl9jb252ZXJzaW9uOworZXh0ZXJuIGludCBmbGFnX2lmX2NvbnZlcnNpb24yOworZXh0ZXJuIGludCBmbGFnX2luZGlyZWN0X2NsYXNzZXM7CitleHRlcm4gaW50IGZsYWdfaW5kaXJlY3RfZGlzcGF0Y2g7CitleHRlcm4gaW50IGZsYWdfaW5kaXJlY3RfaW5saW5pbmc7CitleHRlcm4gaW50IGZsYWdfaW5oaWJpdF9zaXplX2RpcmVjdGl2ZTsKK2V4dGVybiBpbnQgZmxhZ19ub19pbmxpbmU7CitleHRlcm4gaW50IGZsYWdfaW5saW5lX2Z1bmN0aW9uczsKK2V4dGVybiBpbnQgZmxhZ19pbmxpbmVfZnVuY3Rpb25zX2NhbGxlZF9vbmNlOworZXh0ZXJuIGludCBmbGFnX2lubGluZV9zbWFsbF9mdW5jdGlvbnM7CitleHRlcm4gaW50IGZsYWdfaW5zdHJ1bWVudF9mdW5jdGlvbl9lbnRyeV9leGl0OworZXh0ZXJuIGludCBmbGFnX2lwYV9jcDsKK2V4dGVybiBpbnQgZmxhZ19pcGFfY3BfY2xvbmU7CitleHRlcm4gaW50IGZsYWdfaXBhX21hdHJpeF9yZW9yZzsKK2V4dGVybiBpbnQgZmxhZ19pcGFfcHRhOworZXh0ZXJuIGludCBmbGFnX2lwYV9wdXJlX2NvbnN0OworZXh0ZXJuIGludCBmbGFnX2lwYV9yZWZlcmVuY2U7CitleHRlcm4gaW50IGZsYWdfaXBhX3NyYTsKK2V4dGVybiBpbnQgZmxhZ19pcGFfc3RydWN0X3Jlb3JnOworZXh0ZXJuIGludCBmbGFnX2lwYV90eXBlX2VzY2FwZTsKK2V4dGVybiBpbnQgZmxhZ19pcmFfY29hbGVzY2U7CitleHRlcm4gaW50IGZsYWdfaXJhX2xvb3BfcHJlc3N1cmU7CitleHRlcm4gaW50IGZsYWdfaXJhX3NoYXJlX3NhdmVfc2xvdHM7CitleHRlcm4gaW50IGZsYWdfaXJhX3NoYXJlX3NwaWxsX3Nsb3RzOworZXh0ZXJuIGludCBmbGFnX2l2b3B0czsKK2V4dGVybiBpbnQgZmxhZ19qbmk7CitleHRlcm4gaW50IGZsYWdfanVtcF90YWJsZXM7CitleHRlcm4gaW50IGZsYWdfa2VlcF9pbmxpbmVfZnVuY3Rpb25zOworZXh0ZXJuIGludCBmbGFnX2tlZXBfc3RhdGljX2NvbnN0czsKK2V4dGVybiBpbnQgZmxhZ19sZWFkaW5nX3VuZGVyc2NvcmU7CitleHRlcm4gaW50IGZsYWdfbG9vcF9ibG9jazsKK2V4dGVybiBpbnQgZmxhZ19sb29wX2ludGVyY2hhbmdlOworZXh0ZXJuIGludCBmbGFnX2xvb3BfcGFyYWxsZWxpemVfYWxsOworZXh0ZXJuIGludCBmbGFnX2xvb3Bfc3RyaXBfbWluZTsKK2V4dGVybiBpbnQgZmxhZ19sdG87CitleHRlcm4gaW50IGZsYWdfbHRvX2NvbXByZXNzaW9uX2xldmVsOworZXh0ZXJuIGludCBmbGFnX2x0b19yZXBvcnQ7CitleHRlcm4gaW50IGZsYWdfbHRyYW5zOworZXh0ZXJuIGNvbnN0IGNoYXIgKmx0cmFuc19vdXRwdXRfbGlzdDsKK2V4dGVybiBpbnQgZmxhZ19lcnJub19tYXRoOworZXh0ZXJuIGludCBtZW1fcmVwb3J0OworZXh0ZXJuIGludCBmbGFnX21lcmdlX2NvbnN0YW50czsKK2V4dGVybiBpbnQgZmxhZ19tZXJnZV9kZWJ1Z19zdHJpbmdzOworZXh0ZXJuIGludCBmbGFnX21vZHVsb19zY2hlZDsKK2V4dGVybiBpbnQgZmxhZ19tb2R1bG9fc2NoZWRfYWxsb3dfcmVnbW92ZXM7CitleHRlcm4gaW50IGZsYWdfbW92ZV9sb29wX2ludmFyaWFudHM7CitleHRlcm4gaW50IGZsYWdfbXVkZmxhcDsKK2V4dGVybiBpbnQgZmxhZ19tdWRmbGFwX2lnbm9yZV9yZWFkczsKK2V4dGVybiBpbnQgZmxhZ19ub25fY2FsbF9leGNlcHRpb25zOworZXh0ZXJuIGludCBmbGFnX29iamNfY2FsbF9jeHhfY2R0b3JzOworZXh0ZXJuIGludCBmbGFnX29iamNfZGlyZWN0X2Rpc3BhdGNoOworZXh0ZXJuIGludCBmbGFnX29iamNfZXhjZXB0aW9uczsKK2V4dGVybiBpbnQgZmxhZ19vYmpjX2djOworZXh0ZXJuIGludCBmbGFnX29iamNfc2psal9leGNlcHRpb25zOworZXh0ZXJuIGludCBmbGFnX29taXRfZnJhbWVfcG9pbnRlcjsKK2V4dGVybiBpbnQgZmxhZ19vcGVubXA7CitleHRlcm4gaW50IGZsYWdfcmVnbW92ZTsKK2V4dGVybiBpbnQgZmxhZ19vcHRpbWl6ZV9zaWJsaW5nX2NhbGxzOworZXh0ZXJuIGludCBmbGFnX29wdGltaXplX3NjaTsKK2V4dGVybiBpbnQgZmxhZ19wYWNrX3N0cnVjdDsKK2V4dGVybiBpbnQgZmxhZ19wY2Nfc3RydWN0X3JldHVybjsKK2V4dGVybiBpbnQgZmxhZ19wZWVsX2xvb3BzOworZXh0ZXJuIGludCBmbGFnX25vX3BlZXBob2xlOworZXh0ZXJuIGludCBmbGFnX3BlZXBob2xlMjsKK2V4dGVybiBpbnQgcG9zdF9pcGFfbWVtX3JlcG9ydDsKK2V4dGVybiBpbnQgcHJlX2lwYV9tZW1fcmVwb3J0OworZXh0ZXJuIGludCBmbGFnX3ByZWRpY3RpdmVfY29tbW9uaW5nOworZXh0ZXJuIGludCBmbGFnX3ByZWZldGNoX2xvb3BfYXJyYXlzOworZXh0ZXJuIGludCBwcm9maWxlX2ZsYWc7CitleHRlcm4gaW50IHByb2ZpbGVfYXJjX2ZsYWc7CitleHRlcm4gaW50IGZsYWdfcHJvZmlsZV9jb3JyZWN0aW9uOworZXh0ZXJuIGludCBmbGFnX3Byb2ZpbGVfdXNlOworZXh0ZXJuIGludCBmbGFnX3Byb2ZpbGVfdmFsdWVzOworZXh0ZXJuIGludCBmbGFnX3JlY2lwcm9jYWxfbWF0aDsKK2V4dGVybiBpbnQgZmxhZ19yZWNvcmRfZ2NjX3N3aXRjaGVzOworZXh0ZXJuIGludCBmbGFnX3JlZHVjZWRfcmVmbGVjdGlvbjsKK2V4dGVybiBpbnQgZmxhZ19yZW5hbWVfcmVnaXN0ZXJzOworZXh0ZXJuIGludCBmbGFnX3Jlb3JkZXJfYmxvY2tzOworZXh0ZXJuIGludCBmbGFnX3Jlb3JkZXJfYmxvY2tzX2FuZF9wYXJ0aXRpb247CitleHRlcm4gaW50IGZsYWdfcmVvcmRlcl9mdW5jdGlvbnM7CitleHRlcm4gaW50IGZsYWdfcmVydW5fY3NlX2FmdGVyX2xvb3A7CitleHRlcm4gaW50IGZsYWdfcmVzY2hlZF9tb2R1bG9fc2NoZWQ7CitleHRlcm4gaW50IGZsYWdfcm91bmRpbmdfbWF0aDsKK2V4dGVybiBpbnQgZmxhZ19zY2hlZF9jcml0aWNhbF9wYXRoX2hldXJpc3RpYzsKK2V4dGVybiBpbnQgZmxhZ19zY2hlZF9kZXBfY291bnRfaGV1cmlzdGljOworZXh0ZXJuIGludCBmbGFnX3NjaGVkX2dyb3VwX2hldXJpc3RpYzsKK2V4dGVybiBpbnQgZmxhZ19zY2hlZHVsZV9pbnRlcmJsb2NrOworZXh0ZXJuIGludCBmbGFnX3NjaGVkX2xhc3RfaW5zbl9oZXVyaXN0aWM7CitleHRlcm4gaW50IGZsYWdfc2NoZWRfcHJlc3N1cmU7CitleHRlcm4gaW50IGZsYWdfc2NoZWRfcmFua19oZXVyaXN0aWM7CitleHRlcm4gaW50IGZsYWdfc2NoZWR1bGVfc3BlY3VsYXRpdmU7CitleHRlcm4gaW50IGZsYWdfc2NoZWRfc3BlY19pbnNuX2hldXJpc3RpYzsKK2V4dGVybiBpbnQgZmxhZ19zY2hlZHVsZV9zcGVjdWxhdGl2ZV9sb2FkOworZXh0ZXJuIGludCBmbGFnX3NjaGVkdWxlX3NwZWN1bGF0aXZlX2xvYWRfZGFuZ2Vyb3VzOworZXh0ZXJuIGludCBmbGFnX3NjaGVkX3N0YWxsZWRfaW5zbnM7CitleHRlcm4gaW50IGZsYWdfc2NoZWRfc3RhbGxlZF9pbnNuc19kZXA7CitleHRlcm4gaW50IGZsYWdfc2NoZWQyX3VzZV9zdXBlcmJsb2NrczsKK2V4dGVybiBpbnQgZmxhZ19zY2hlZHVsZV9pbnNuczsKK2V4dGVybiBpbnQgZmxhZ19zY2hlZHVsZV9pbnNuc19hZnRlcl9yZWxvYWQ7CitleHRlcm4gaW50IGZsYWdfc2VjdGlvbl9hbmNob3JzOworZXh0ZXJuIGludCBmbGFnX3NlbF9zY2hlZF9waXBlbGluaW5nOworZXh0ZXJuIGludCBmbGFnX3NlbF9zY2hlZF9waXBlbGluaW5nX291dGVyX2xvb3BzOworZXh0ZXJuIGludCBmbGFnX3NlbF9zY2hlZF9yZXNjaGVkdWxlX3BpcGVsaW5lZDsKK2V4dGVybiBpbnQgZmxhZ19zZWxlY3RpdmVfc2NoZWR1bGluZzsKK2V4dGVybiBpbnQgZmxhZ19zZWxlY3RpdmVfc2NoZWR1bGluZzI7CitleHRlcm4gaW50IGZsYWdfc2hvd19jb2x1bW47CitleHRlcm4gaW50IGZsYWdfc2lnbmFsaW5nX25hbnM7CitleHRlcm4gaW50IGZsYWdfc2lnbmVkX3plcm9zOworZXh0ZXJuIGludCBmbGFnX3NpbmdsZV9wcmVjaXNpb25fY29uc3RhbnQ7CitleHRlcm4gaW50IGZsYWdfc3BsaXRfaXZzX2luX3Vucm9sbGVyOworZXh0ZXJuIGludCBmbGFnX3NwbGl0X3dpZGVfdHlwZXM7CitleHRlcm4gaW50IGZsYWdfc3RhY2tfcHJvdGVjdDsKK2V4dGVybiBpbnQgZmxhZ19zdG9yZV9jaGVjazsKK2V4dGVybiBpbnQgZmxhZ19zdHJpY3RfYWxpYXNpbmc7CitleHRlcm4gaW50IGZsYWdfc3RyaWN0X292ZXJmbG93OworZXh0ZXJuIGludCBmbGFnX3N5bnRheF9vbmx5OworZXh0ZXJuIGludCBmbGFnX3Rlc3RfY292ZXJhZ2U7CitleHRlcm4gaW50IGZsYWdfdGhyZWFkX2p1bXBzOworZXh0ZXJuIGludCB0aW1lX3JlcG9ydDsKK2V4dGVybiBpbnQgZmxhZ190b3BsZXZlbF9yZW9yZGVyOworZXh0ZXJuIGludCBmbGFnX3RyYWNlcjsKK2V4dGVybiBpbnQgZmxhZ190cmFwcGluZ19tYXRoOworZXh0ZXJuIGludCBmbGFnX3RyYXB2OworZXh0ZXJuIGludCBmbGFnX3RyZWVfYnVpbHRpbl9jYWxsX2RjZTsKK2V4dGVybiBpbnQgZmxhZ190cmVlX2NjcDsKK2V4dGVybiBpbnQgZmxhZ190cmVlX2NoOworZXh0ZXJuIGludCBmbGFnX3RyZWVfY29weV9wcm9wOworZXh0ZXJuIGludCBmbGFnX3RyZWVfY29weXJlbmFtZTsKK2V4dGVybiBpbnQgZmxhZ190cmVlX2NzZWxpbTsKK2V4dGVybiBpbnQgZmxhZ190cmVlX2RjZTsKK2V4dGVybiBpbnQgZmxhZ190cmVlX2RvbTsKK2V4dGVybiBpbnQgZmxhZ190cmVlX2RzZTsKK2V4dGVybiBpbnQgZmxhZ190cmVlX2Zvcndwcm9wOworZXh0ZXJuIGludCBmbGFnX3RyZWVfZnJlOworZXh0ZXJuIGludCBmbGFnX3RyZWVfbG9vcF9kaXN0cmlidXRpb247CitleHRlcm4gaW50IGZsYWdfdHJlZV9sb29wX2ltOworZXh0ZXJuIGludCBmbGFnX3RyZWVfbG9vcF9pdmNhbm9uOworZXh0ZXJuIGludCBmbGFnX3RyZWVfbG9vcF9saW5lYXI7CitleHRlcm4gaW50IGZsYWdfdHJlZV9sb29wX29wdGltaXplOworZXh0ZXJuIGludCBmbGFnX3RyZWVfbGl2ZV9yYW5nZV9zcGxpdDsKK2V4dGVybiBpbnQgZmxhZ190cmVlX3BhcmFsbGVsaXplX2xvb3BzOworZXh0ZXJuIGludCBmbGFnX3RyZWVfcGhpcHJvcDsKK2V4dGVybiBpbnQgZmxhZ190cmVlX3ByZTsKK2V4dGVybiBpbnQgZmxhZ190cmVlX3B0YTsKK2V4dGVybiBpbnQgZmxhZ190cmVlX3JlYXNzb2M7CitleHRlcm4gaW50IGZsYWdfdHJlZV9zY2V2X2Nwcm9wOworZXh0ZXJuIGludCBmbGFnX3RyZWVfc2luazsKK2V4dGVybiBpbnQgZmxhZ190cmVlX3NscF92ZWN0b3JpemU7CitleHRlcm4gaW50IGZsYWdfdHJlZV9zcmE7CitleHRlcm4gaW50IGZsYWdfdHJlZV9zd2l0Y2hfY29udmVyc2lvbjsKK2V4dGVybiBpbnQgZmxhZ190cmVlX3RlcjsKK2V4dGVybiBpbnQgZmxhZ190cmVlX3ZlY3RfbG9vcF92ZXJzaW9uOworZXh0ZXJuIGludCBmbGFnX3RyZWVfdmVjdG9yaXplOworZXh0ZXJuIGludCBmbGFnX3RyZWVfdnJwOworZXh0ZXJuIGludCBmbGFnX3VuaXRfYXRfYV90aW1lOworZXh0ZXJuIGludCBmbGFnX3Vucm9sbF9hbGxfbG9vcHM7CitleHRlcm4gaW50IGZsYWdfdW5yb2xsX2xvb3BzOworZXh0ZXJuIGludCBmbGFnX3Vuc2FmZV9sb29wX29wdGltaXphdGlvbnM7CitleHRlcm4gaW50IGZsYWdfdW5zYWZlX21hdGhfb3B0aW1pemF0aW9uczsKK2V4dGVybiBpbnQgZmxhZ191bnN3aXRjaF9sb29wczsKK2V4dGVybiBpbnQgZmxhZ191bndpbmRfdGFibGVzOworZXh0ZXJuIGludCBmbGFnX3VzZV9hdG9taWNfYnVpbHRpbnM7CitleHRlcm4gaW50IGZsYWdfdXNlX2JvZWhtX2djOworZXh0ZXJuIGludCBmbGFnX3VzZV9kaXZpZGVfc3Vicm91dGluZTsKK2V4dGVybiBpbnQgZmxhZ192YXJfdHJhY2tpbmc7CitleHRlcm4gaW50IGZsYWdfdmFyX3RyYWNraW5nX2Fzc2lnbm1lbnRzOworZXh0ZXJuIGludCBmbGFnX3Zhcl90cmFja2luZ19hc3NpZ25tZW50c190b2dnbGU7CitleHRlcm4gaW50IGZsYWdfdmFyX3RyYWNraW5nX3VuaW5pdDsKK2V4dGVybiBpbnQgZmxhZ192YXJpYWJsZV9leHBhbnNpb25faW5fdW5yb2xsZXI7CitleHRlcm4gaW50IGZsYWdfdmVjdF9jb3N0X21vZGVsOworZXh0ZXJuIGludCBmbGFnX3ZlcmJvc2VfYXNtOworZXh0ZXJuIGludCBmbGFnX3Zpc2liaWxpdHlfbXNfY29tcGF0OworZXh0ZXJuIGludCBmbGFnX3ZhbHVlX3Byb2ZpbGVfdHJhbnNmb3JtYXRpb25zOworZXh0ZXJuIGludCBmbGFnX3dlYjsKK2V4dGVybiBpbnQgZmxhZ193aG9sZV9wcm9ncmFtOworZXh0ZXJuIGludCBmbGFnX3dob3ByOworZXh0ZXJuIGludCBmbGFnX3dwYTsKK2V4dGVybiBpbnQgZmxhZ193cmFwdjsKK2V4dGVybiBpbnQgZmxhZ196ZXJvX2luaXRpYWxpemVkX2luX2JzczsKK2V4dGVybiBpbnQgZHdhcmZfdmVyc2lvbjsKK2V4dGVybiBpbnQgZHdhcmZfc3RyaWN0OworZXh0ZXJuIGludCBmbGFnX2d0b2dnbGU7CitleHRlcm4gY29uc3QgY2hhciAqdGFyZ2V0X2FiaV9uYW1lOworZXh0ZXJuIGludCBmaXhfY20zX2xkcmQ7CitleHRlcm4gY29uc3QgY2hhciAqdGFyZ2V0X2Zsb2F0X2FiaV9uYW1lOworZXh0ZXJuIGNvbnN0IGNoYXIgKnRhcmdldF9mcDE2X2Zvcm1hdF9uYW1lOworZXh0ZXJuIGNvbnN0IGNoYXIgKnRhcmdldF9mcGVfbmFtZTsKK2V4dGVybiBjb25zdCBjaGFyICp0YXJnZXRfZnB1X25hbWU7CitleHRlcm4gaW50IGxpbnV4X3VjbGliYzsKK2V4dGVybiBjb25zdCBjaGFyICphcm1fcGljX3JlZ2lzdGVyX3N0cmluZzsKK2V4dGVybiBjb25zdCBjaGFyICpzdHJ1Y3R1cmVfc2l6ZV9zdHJpbmc7CitleHRlcm4gY29uc3QgY2hhciAqdGFyZ2V0X3RocmVhZF9zd2l0Y2g7CitleHRlcm4gaW50IHRhcmdldF93b3JkX3JlbG9jYXRpb25zOworZXh0ZXJuIGludCBwZWRhbnRpYzsKK2V4dGVybiBpbnQgcXVpZXRfZmxhZzsKK2V4dGVybiBpbnQgdmVyc2lvbl9mbGFnOworZXh0ZXJuIGludCBpbmhpYml0X3dhcm5pbmdzOworCisjaWYgIWRlZmluZWQoR0NDX0RSSVZFUikgJiYgIWRlZmluZWQoSU5fTElCR0NDMikgJiYgIWRlZmluZWQoSU5fVEFSR0VUX0xJQlMpCisKKy8qIFN0cnVjdHVyZSB0byBzYXZlL3Jlc3RvcmUgb3B0aW1pemF0aW9uIGFuZCB0YXJnZXQgc3BlY2lmaWMgb3B0aW9ucy4gICovCitzdHJ1Y3QgR1RZKCgpKSBjbF9vcHRpbWl6YXRpb24KK3sKKyAgaW50IGFsaWduX2Z1bmN0aW9uczsKKyAgaW50IGFsaWduX2p1bXBzOworICBpbnQgYWxpZ25fbGFiZWxzOworICBpbnQgYWxpZ25fbG9vcHM7CisgIGludCBmbGFnX3NjaGVkX3N0YWxsZWRfaW5zbnM7CisgIGludCBmbGFnX3NjaGVkX3N0YWxsZWRfaW5zbnNfZGVwOworICB1bnNpZ25lZCBjaGFyIG9wdGltaXplOworICB1bnNpZ25lZCBjaGFyIG9wdGltaXplX3NpemU7CisgIHNpZ25lZCBjaGFyIGZsYWdfYXJndW1lbnRfbm9hbGlhczsKKyAgc2lnbmVkIGNoYXIgZmxhZ19hc3luY2hyb25vdXNfdW53aW5kX3RhYmxlczsKKyAgc2lnbmVkIGNoYXIgZmxhZ19icmFuY2hfb25fY291bnRfcmVnOworICBzaWduZWQgY2hhciBmbGFnX2JyYW5jaF9wcm9iYWJpbGl0aWVzOworICBzaWduZWQgY2hhciBmbGFnX2JyYW5jaF90YXJnZXRfbG9hZF9vcHRpbWl6ZTsKKyAgc2lnbmVkIGNoYXIgZmxhZ19icmFuY2hfdGFyZ2V0X2xvYWRfb3B0aW1pemUyOworICBzaWduZWQgY2hhciBmbGFnX2J0cl9iYl9leGNsdXNpdmU7CisgIHNpZ25lZCBjaGFyIGZsYWdfY2FsbGVyX3NhdmVzOworICBzaWduZWQgY2hhciBmbGFnX25vX2NvbW1vbjsKKyAgc2lnbmVkIGNoYXIgZmxhZ19jb25zZXJ2ZV9zdGFjazsKKyAgc2lnbmVkIGNoYXIgZmxhZ19jcHJvcF9yZWdpc3RlcnM7CisgIHNpZ25lZCBjaGFyIGZsYWdfY3Jvc3NqdW1waW5nOworICBzaWduZWQgY2hhciBmbGFnX2NzZV9mb2xsb3dfanVtcHM7CisgIHNpZ25lZCBjaGFyIGZsYWdfY3hfZm9ydHJhbl9ydWxlczsKKyAgc2lnbmVkIGNoYXIgZmxhZ19jeF9saW1pdGVkX3JhbmdlOworICBzaWduZWQgY2hhciBmbGFnX2RhdGFfc2VjdGlvbnM7CisgIHNpZ25lZCBjaGFyIGZsYWdfZGNlOworICBzaWduZWQgY2hhciBmbGFnX2RlZmVyX3BvcDsKKyAgc2lnbmVkIGNoYXIgZmxhZ19kZWxheWVkX2JyYW5jaDsKKyAgc2lnbmVkIGNoYXIgZmxhZ19kZWxldGVfbnVsbF9wb2ludGVyX2NoZWNrczsKKyAgc2lnbmVkIGNoYXIgZmxhZ19kc2U7CisgIHNpZ25lZCBjaGFyIGZsYWdfZWFybHlfaW5saW5pbmc7CisgIHNpZ25lZCBjaGFyIGZsYWdfZXhjZXB0aW9uczsKKyAgc2lnbmVkIGNoYXIgZmxhZ19leHBlbnNpdmVfb3B0aW1pemF0aW9uczsKKyAgc2lnbmVkIGNoYXIgZmxhZ19maW5pdGVfbWF0aF9vbmx5OworICBzaWduZWQgY2hhciBmbGFnX2Zsb2F0X3N0b3JlOworICBzaWduZWQgY2hhciBmbGFnX2ZvcndhcmRfcHJvcGFnYXRlOworICBzaWduZWQgY2hhciBmbGFnX2djc2U7CisgIHNpZ25lZCBjaGFyIGZsYWdfZ2NzZV9hZnRlcl9yZWxvYWQ7CisgIHNpZ25lZCBjaGFyIGZsYWdfZ2NzZV9sYXM7CisgIHNpZ25lZCBjaGFyIGZsYWdfZ2NzZV9sbTsKKyAgc2lnbmVkIGNoYXIgZmxhZ19nY3NlX3NtOworICBzaWduZWQgY2hhciBmbGFnX2dyYXBoaXRlX2lkZW50aXR5OworICBzaWduZWQgY2hhciBmbGFnX2d1ZXNzX2JyYW5jaF9wcm9iOworICBzaWduZWQgY2hhciBmbGFnX2lmX2NvbnZlcnNpb247CisgIHNpZ25lZCBjaGFyIGZsYWdfaWZfY29udmVyc2lvbjI7CisgIHNpZ25lZCBjaGFyIGZsYWdfaW5saW5lX2Z1bmN0aW9uczsKKyAgc2lnbmVkIGNoYXIgZmxhZ19pbmxpbmVfZnVuY3Rpb25zX2NhbGxlZF9vbmNlOworICBzaWduZWQgY2hhciBmbGFnX2lubGluZV9zbWFsbF9mdW5jdGlvbnM7CisgIHNpZ25lZCBjaGFyIGZsYWdfaXBhX2NwOworICBzaWduZWQgY2hhciBmbGFnX2lwYV9jcF9jbG9uZTsKKyAgc2lnbmVkIGNoYXIgZmxhZ19pcGFfbWF0cml4X3Jlb3JnOworICBzaWduZWQgY2hhciBmbGFnX2lwYV9wdGE7CisgIHNpZ25lZCBjaGFyIGZsYWdfaXBhX3B1cmVfY29uc3Q7CisgIHNpZ25lZCBjaGFyIGZsYWdfaXBhX3JlZmVyZW5jZTsKKyAgc2lnbmVkIGNoYXIgZmxhZ19pcGFfc3JhOworICBzaWduZWQgY2hhciBmbGFnX2lwYV90eXBlX2VzY2FwZTsKKyAgc2lnbmVkIGNoYXIgZmxhZ19pdm9wdHM7CisgIHNpZ25lZCBjaGFyIGZsYWdfanVtcF90YWJsZXM7CisgIHNpZ25lZCBjaGFyIGZsYWdfbG9vcF9ibG9jazsKKyAgc2lnbmVkIGNoYXIgZmxhZ19sb29wX2ludGVyY2hhbmdlOworICBzaWduZWQgY2hhciBmbGFnX2xvb3BfcGFyYWxsZWxpemVfYWxsOworICBzaWduZWQgY2hhciBmbGFnX2xvb3Bfc3RyaXBfbWluZTsKKyAgc2lnbmVkIGNoYXIgZmxhZ19sdG9fcmVwb3J0OworICBzaWduZWQgY2hhciBmbGFnX2x0cmFuczsKKyAgc2lnbmVkIGNoYXIgZmxhZ19lcnJub19tYXRoOworICBzaWduZWQgY2hhciBmbGFnX21lcmdlX2NvbnN0YW50czsKKyAgc2lnbmVkIGNoYXIgZmxhZ19tb2R1bG9fc2NoZWQ7CisgIHNpZ25lZCBjaGFyIGZsYWdfbW92ZV9sb29wX2ludmFyaWFudHM7CisgIHNpZ25lZCBjaGFyIGZsYWdfbm9uX2NhbGxfZXhjZXB0aW9uczsKKyAgc2lnbmVkIGNoYXIgZmxhZ19vbWl0X2ZyYW1lX3BvaW50ZXI7CisgIHNpZ25lZCBjaGFyIGZsYWdfcmVnbW92ZTsKKyAgc2lnbmVkIGNoYXIgZmxhZ19vcHRpbWl6ZV9zaWJsaW5nX2NhbGxzOworICBzaWduZWQgY2hhciBmbGFnX3BhY2tfc3RydWN0OworICBzaWduZWQgY2hhciBmbGFnX3BlZWxfbG9vcHM7CisgIHNpZ25lZCBjaGFyIGZsYWdfbm9fcGVlcGhvbGU7CisgIHNpZ25lZCBjaGFyIGZsYWdfcGVlcGhvbGUyOworICBzaWduZWQgY2hhciBmbGFnX3ByZWRpY3RpdmVfY29tbW9uaW5nOworICBzaWduZWQgY2hhciBmbGFnX3ByZWZldGNoX2xvb3BfYXJyYXlzOworICBzaWduZWQgY2hhciBmbGFnX3BjY19zdHJ1Y3RfcmV0dXJuOworICBzaWduZWQgY2hhciBmbGFnX3JlbmFtZV9yZWdpc3RlcnM7CisgIHNpZ25lZCBjaGFyIGZsYWdfcmVvcmRlcl9ibG9ja3M7CisgIHNpZ25lZCBjaGFyIGZsYWdfcmVvcmRlcl9ibG9ja3NfYW5kX3BhcnRpdGlvbjsKKyAgc2lnbmVkIGNoYXIgZmxhZ19yZW9yZGVyX2Z1bmN0aW9uczsKKyAgc2lnbmVkIGNoYXIgZmxhZ19yZXJ1bl9jc2VfYWZ0ZXJfbG9vcDsKKyAgc2lnbmVkIGNoYXIgZmxhZ19yZXNjaGVkX21vZHVsb19zY2hlZDsKKyAgc2lnbmVkIGNoYXIgZmxhZ19yb3VuZGluZ19tYXRoOworICBzaWduZWQgY2hhciBmbGFnX3NjaGVkX2NyaXRpY2FsX3BhdGhfaGV1cmlzdGljOworICBzaWduZWQgY2hhciBmbGFnX3NjaGVkX2RlcF9jb3VudF9oZXVyaXN0aWM7CisgIHNpZ25lZCBjaGFyIGZsYWdfc2NoZWRfZ3JvdXBfaGV1cmlzdGljOworICBzaWduZWQgY2hhciBmbGFnX3NjaGVkdWxlX2ludGVyYmxvY2s7CisgIHNpZ25lZCBjaGFyIGZsYWdfc2NoZWRfbGFzdF9pbnNuX2hldXJpc3RpYzsKKyAgc2lnbmVkIGNoYXIgZmxhZ19zY2hlZF9wcmVzc3VyZTsKKyAgc2lnbmVkIGNoYXIgZmxhZ19zY2hlZF9yYW5rX2hldXJpc3RpYzsKKyAgc2lnbmVkIGNoYXIgZmxhZ19zY2hlZHVsZV9zcGVjdWxhdGl2ZTsKKyAgc2lnbmVkIGNoYXIgZmxhZ19zY2hlZF9zcGVjX2luc25faGV1cmlzdGljOworICBzaWduZWQgY2hhciBmbGFnX3NjaGVkdWxlX3NwZWN1bGF0aXZlX2xvYWQ7CisgIHNpZ25lZCBjaGFyIGZsYWdfc2NoZWR1bGVfc3BlY3VsYXRpdmVfbG9hZF9kYW5nZXJvdXM7CisgIHNpZ25lZCBjaGFyIGZsYWdfc2NoZWQyX3VzZV9zdXBlcmJsb2NrczsKKyAgc2lnbmVkIGNoYXIgZmxhZ19zY2hlZHVsZV9pbnNuczsKKyAgc2lnbmVkIGNoYXIgZmxhZ19zY2hlZHVsZV9pbnNuc19hZnRlcl9yZWxvYWQ7CisgIHNpZ25lZCBjaGFyIGZsYWdfc2VjdGlvbl9hbmNob3JzOworICBzaWduZWQgY2hhciBmbGFnX3NlbF9zY2hlZF9waXBlbGluaW5nOworICBzaWduZWQgY2hhciBmbGFnX3NlbF9zY2hlZF9waXBlbGluaW5nX291dGVyX2xvb3BzOworICBzaWduZWQgY2hhciBmbGFnX3NlbF9zY2hlZF9yZXNjaGVkdWxlX3BpcGVsaW5lZDsKKyAgc2lnbmVkIGNoYXIgZmxhZ19zZWxlY3RpdmVfc2NoZWR1bGluZzsKKyAgc2lnbmVkIGNoYXIgZmxhZ19zZWxlY3RpdmVfc2NoZWR1bGluZzI7CisgIHNpZ25lZCBjaGFyIGZsYWdfc2lnbmFsaW5nX25hbnM7CisgIHNpZ25lZCBjaGFyIGZsYWdfc2lnbmVkX3plcm9zOworICBzaWduZWQgY2hhciBmbGFnX3NpbmdsZV9wcmVjaXNpb25fY29uc3RhbnQ7CisgIHNpZ25lZCBjaGFyIGZsYWdfc3BsaXRfaXZzX2luX3Vucm9sbGVyOworICBzaWduZWQgY2hhciBmbGFnX3NwbGl0X3dpZGVfdHlwZXM7CisgIHNpZ25lZCBjaGFyIGZsYWdfc3RyaWN0X2FsaWFzaW5nOworICBzaWduZWQgY2hhciBmbGFnX3RocmVhZF9qdW1wczsKKyAgc2lnbmVkIGNoYXIgZmxhZ190b3BsZXZlbF9yZW9yZGVyOworICBzaWduZWQgY2hhciBmbGFnX3RyYXBwaW5nX21hdGg7CisgIHNpZ25lZCBjaGFyIGZsYWdfdHJhcHY7CisgIHNpZ25lZCBjaGFyIGZsYWdfdHJlZV9idWlsdGluX2NhbGxfZGNlOworICBzaWduZWQgY2hhciBmbGFnX3RyZWVfY2NwOworICBzaWduZWQgY2hhciBmbGFnX3RyZWVfY2g7CisgIHNpZ25lZCBjaGFyIGZsYWdfdHJlZV9jb3B5X3Byb3A7CisgIHNpZ25lZCBjaGFyIGZsYWdfdHJlZV9jb3B5cmVuYW1lOworICBzaWduZWQgY2hhciBmbGFnX3RyZWVfY3NlbGltOworICBzaWduZWQgY2hhciBmbGFnX3RyZWVfZGNlOworICBzaWduZWQgY2hhciBmbGFnX3RyZWVfZG9tOworICBzaWduZWQgY2hhciBmbGFnX3RyZWVfZHNlOworICBzaWduZWQgY2hhciBmbGFnX3RyZWVfZm9yd3Byb3A7CisgIHNpZ25lZCBjaGFyIGZsYWdfdHJlZV9mcmU7CisgIHNpZ25lZCBjaGFyIGZsYWdfdHJlZV9sb29wX2Rpc3RyaWJ1dGlvbjsKKyAgc2lnbmVkIGNoYXIgZmxhZ190cmVlX2xvb3BfaW07CisgIHNpZ25lZCBjaGFyIGZsYWdfdHJlZV9sb29wX2l2Y2Fub247CisgIHNpZ25lZCBjaGFyIGZsYWdfdHJlZV9sb29wX2xpbmVhcjsKKyAgc2lnbmVkIGNoYXIgZmxhZ190cmVlX2xvb3Bfb3B0aW1pemU7CisgIHNpZ25lZCBjaGFyIGZsYWdfdHJlZV9saXZlX3JhbmdlX3NwbGl0OworICBzaWduZWQgY2hhciBmbGFnX3RyZWVfcGhpcHJvcDsKKyAgc2lnbmVkIGNoYXIgZmxhZ190cmVlX3ByZTsKKyAgc2lnbmVkIGNoYXIgZmxhZ190cmVlX3B0YTsKKyAgc2lnbmVkIGNoYXIgZmxhZ190cmVlX3JlYXNzb2M7CisgIHNpZ25lZCBjaGFyIGZsYWdfdHJlZV9zY2V2X2Nwcm9wOworICBzaWduZWQgY2hhciBmbGFnX3RyZWVfc2luazsKKyAgc2lnbmVkIGNoYXIgZmxhZ190cmVlX3NscF92ZWN0b3JpemU7CisgIHNpZ25lZCBjaGFyIGZsYWdfdHJlZV9zcmE7CisgIHNpZ25lZCBjaGFyIGZsYWdfdHJlZV9zd2l0Y2hfY29udmVyc2lvbjsKKyAgc2lnbmVkIGNoYXIgZmxhZ190cmVlX3RlcjsKKyAgc2lnbmVkIGNoYXIgZmxhZ190cmVlX3ZlY3RfbG9vcF92ZXJzaW9uOworICBzaWduZWQgY2hhciBmbGFnX3RyZWVfdmVjdG9yaXplOworICBzaWduZWQgY2hhciBmbGFnX3RyZWVfdnJwOworICBzaWduZWQgY2hhciBmbGFnX3VuaXRfYXRfYV90aW1lOworICBzaWduZWQgY2hhciBmbGFnX3Vucm9sbF9hbGxfbG9vcHM7CisgIHNpZ25lZCBjaGFyIGZsYWdfdW5yb2xsX2xvb3BzOworICBzaWduZWQgY2hhciBmbGFnX3Vuc2FmZV9sb29wX29wdGltaXphdGlvbnM7CisgIHNpZ25lZCBjaGFyIGZsYWdfdW5zYWZlX21hdGhfb3B0aW1pemF0aW9uczsKKyAgc2lnbmVkIGNoYXIgZmxhZ191bnN3aXRjaF9sb29wczsKKyAgc2lnbmVkIGNoYXIgZmxhZ191bndpbmRfdGFibGVzOworICBzaWduZWQgY2hhciBmbGFnX3Zhcl90cmFja2luZzsKKyAgc2lnbmVkIGNoYXIgZmxhZ192YXJfdHJhY2tpbmdfYXNzaWdubWVudHM7CisgIHNpZ25lZCBjaGFyIGZsYWdfdmFyX3RyYWNraW5nX2Fzc2lnbm1lbnRzX3RvZ2dsZTsKKyAgc2lnbmVkIGNoYXIgZmxhZ192YXJfdHJhY2tpbmdfdW5pbml0OworICBzaWduZWQgY2hhciBmbGFnX3ZhcmlhYmxlX2V4cGFuc2lvbl9pbl91bnJvbGxlcjsKKyAgc2lnbmVkIGNoYXIgZmxhZ192ZWN0X2Nvc3RfbW9kZWw7CisgIHNpZ25lZCBjaGFyIGZsYWdfdmFsdWVfcHJvZmlsZV90cmFuc2Zvcm1hdGlvbnM7CisgIHNpZ25lZCBjaGFyIGZsYWdfd2ViOworICBzaWduZWQgY2hhciBmbGFnX3dob2xlX3Byb2dyYW07CisgIHNpZ25lZCBjaGFyIGZsYWdfd3BhOworICBzaWduZWQgY2hhciBmbGFnX3dyYXB2OworfTsKKworLyogU3RydWN0dXJlIHRvIHNhdmUvcmVzdG9yZSBzZWxlY3RlZCB0YXJnZXQgc3BlY2lmaWMgb3B0aW9ucy4gICovCitzdHJ1Y3QgR1RZKCgpKSBjbF90YXJnZXRfb3B0aW9uCit7CisgIGludCB0YXJnZXRfZmxhZ3M7Cit9OworCisKKy8qIFNhdmUgb3B0aW1pemF0aW9uIHZhcmlhYmxlcyBpbnRvIGEgc3RydWN0dXJlLiAgKi8KK2V4dGVybiB2b2lkIGNsX29wdGltaXphdGlvbl9zYXZlIChzdHJ1Y3QgY2xfb3B0aW1pemF0aW9uICopOworCisvKiBSZXN0b3JlIG9wdGltaXphdGlvbiB2YXJpYWJsZXMgZnJvbSBhIHN0cnVjdHVyZS4gICovCitleHRlcm4gdm9pZCBjbF9vcHRpbWl6YXRpb25fcmVzdG9yZSAoc3RydWN0IGNsX29wdGltaXphdGlvbiAqKTsKKworLyogUHJpbnQgb3B0aW1pemF0aW9uIHZhcmlhYmxlcyBmcm9tIGEgc3RydWN0dXJlLiAgKi8KK2V4dGVybiB2b2lkIGNsX29wdGltaXphdGlvbl9wcmludCAoRklMRSAqLCBpbnQsIHN0cnVjdCBjbF9vcHRpbWl6YXRpb24gKik7CisKKy8qIFNhdmUgc2VsZWN0ZWQgb3B0aW9uIHZhcmlhYmxlcyBpbnRvIGEgc3RydWN0dXJlLiAgKi8KK2V4dGVybiB2b2lkIGNsX3RhcmdldF9vcHRpb25fc2F2ZSAoc3RydWN0IGNsX3RhcmdldF9vcHRpb24gKik7CisKKy8qIFJlc3RvcmUgc2VsZWN0ZWQgb3B0aW9uIHZhcmlhYmxlcyBmcm9tIGEgc3RydWN0dXJlLiAgKi8KK2V4dGVybiB2b2lkIGNsX3RhcmdldF9vcHRpb25fcmVzdG9yZSAoc3RydWN0IGNsX3RhcmdldF9vcHRpb24gKik7CisKKy8qIFByaW50IHRhcmdldCBvcHRpb24gdmFyaWFibGVzIGZyb20gYSBzdHJ1Y3R1cmUuICAqLworZXh0ZXJuIHZvaWQgY2xfdGFyZ2V0X29wdGlvbl9wcmludCAoRklMRSAqLCBpbnQsIHN0cnVjdCBjbF90YXJnZXRfb3B0aW9uICopOworI2VuZGlmCisKKyNkZWZpbmUgTUFTS19BQk9SVF9OT1JFVFVSTiAoMSA8PCAwKQorI2RlZmluZSBNQVNLX0FQQ1NfRkxPQVQgKDEgPDwgMSkKKyNkZWZpbmUgTUFTS19BUENTX0ZSQU1FICgxIDw8IDIpCisjZGVmaW5lIE1BU0tfQVBDU19SRUVOVCAoMSA8PCAzKQorI2RlZmluZSBNQVNLX0FQQ1NfU1RBQ0sgKDEgPDwgNCkKKyNkZWZpbmUgTUFTS19CSUdfRU5EICgxIDw8IDUpCisjZGVmaW5lIE1BU0tfQ0FMTEVFX0lOVEVSV09SS0lORyAoMSA8PCA2KQorI2RlZmluZSBNQVNLX0NBTExFUl9JTlRFUldPUktJTkcgKDEgPDwgNykKKyNkZWZpbmUgTUFTS19DSVJSVVNfRklYX0lOVkFMSURfSU5TTlMgKDEgPDwgOCkKKyNkZWZpbmUgTUFTS19GUEUgKDEgPDwgOSkKKyNkZWZpbmUgTUFTS19MT05HX0NBTExTICgxIDw8IDEwKQorI2RlZmluZSBNQVNLX1BPS0VfRlVOQ1RJT05fTkFNRSAoMSA8PCAxMSkKKyNkZWZpbmUgTUFTS19TQ0hFRF9QUk9MT0cgKDEgPDwgMTIpCisjZGVmaW5lIE1BU0tfU0lOR0xFX1BJQ19CQVNFICgxIDw8IDEzKQorI2RlZmluZSBNQVNLX1RIVU1CICgxIDw8IDE0KQorI2RlZmluZSBNQVNLX0lOVEVSV09SSyAoMSA8PCAxNSkKKyNkZWZpbmUgTUFTS19UUENTX0ZSQU1FICgxIDw8IDE2KQorI2RlZmluZSBNQVNLX1RQQ1NfTEVBRl9GUkFNRSAoMSA8PCAxNykKKyNkZWZpbmUgT1BUSU9OX01BU0tfVUNMSUJDICgxIDw8IDApCisjZGVmaW5lIE1BU0tfTkVPTl9WRUNUT1JJWkVfUVVBRCAoMSA8PCAxOCkKKyNkZWZpbmUgTUFTS19MSVRUTEVfV09SRFMgKDEgPDwgMTkpCisKKyNkZWZpbmUgVEFSR0VUX0FCT1JUX05PUkVUVVJOICgodGFyZ2V0X2ZsYWdzICYgTUFTS19BQk9SVF9OT1JFVFVSTikgIT0gMCkKKyNkZWZpbmUgVEFSR0VUX0FQQ1NfRkxPQVQgKCh0YXJnZXRfZmxhZ3MgJiBNQVNLX0FQQ1NfRkxPQVQpICE9IDApCisjZGVmaW5lIFRBUkdFVF9BUENTX0ZSQU1FICgodGFyZ2V0X2ZsYWdzICYgTUFTS19BUENTX0ZSQU1FKSAhPSAwKQorI2RlZmluZSBUQVJHRVRfQVBDU19SRUVOVCAoKHRhcmdldF9mbGFncyAmIE1BU0tfQVBDU19SRUVOVCkgIT0gMCkKKyNkZWZpbmUgVEFSR0VUX0FQQ1NfU1RBQ0sgKCh0YXJnZXRfZmxhZ3MgJiBNQVNLX0FQQ1NfU1RBQ0spICE9IDApCisjZGVmaW5lIFRBUkdFVF9CSUdfRU5EICgodGFyZ2V0X2ZsYWdzICYgTUFTS19CSUdfRU5EKSAhPSAwKQorI2RlZmluZSBUQVJHRVRfQ0FMTEVFX0lOVEVSV09SS0lORyAoKHRhcmdldF9mbGFncyAmIE1BU0tfQ0FMTEVFX0lOVEVSV09SS0lORykgIT0gMCkKKyNkZWZpbmUgVEFSR0VUX0NBTExFUl9JTlRFUldPUktJTkcgKCh0YXJnZXRfZmxhZ3MgJiBNQVNLX0NBTExFUl9JTlRFUldPUktJTkcpICE9IDApCisjZGVmaW5lIFRBUkdFVF9DSVJSVVNfRklYX0lOVkFMSURfSU5TTlMgKCh0YXJnZXRfZmxhZ3MgJiBNQVNLX0NJUlJVU19GSVhfSU5WQUxJRF9JTlNOUykgIT0gMCkKKyNkZWZpbmUgVEFSR0VUX0ZQRSAoKHRhcmdldF9mbGFncyAmIE1BU0tfRlBFKSAhPSAwKQorI2RlZmluZSBUQVJHRVRfTE9OR19DQUxMUyAoKHRhcmdldF9mbGFncyAmIE1BU0tfTE9OR19DQUxMUykgIT0gMCkKKyNkZWZpbmUgVEFSR0VUX1BPS0VfRlVOQ1RJT05fTkFNRSAoKHRhcmdldF9mbGFncyAmIE1BU0tfUE9LRV9GVU5DVElPTl9OQU1FKSAhPSAwKQorI2RlZmluZSBUQVJHRVRfU0NIRURfUFJPTE9HICgodGFyZ2V0X2ZsYWdzICYgTUFTS19TQ0hFRF9QUk9MT0cpICE9IDApCisjZGVmaW5lIFRBUkdFVF9TSU5HTEVfUElDX0JBU0UgKCh0YXJnZXRfZmxhZ3MgJiBNQVNLX1NJTkdMRV9QSUNfQkFTRSkgIT0gMCkKKyNkZWZpbmUgVEFSR0VUX1RIVU1CICgodGFyZ2V0X2ZsYWdzICYgTUFTS19USFVNQikgIT0gMCkKKyNkZWZpbmUgVEFSR0VUX0lOVEVSV09SSyAoKHRhcmdldF9mbGFncyAmIE1BU0tfSU5URVJXT1JLKSAhPSAwKQorI2RlZmluZSBUQVJHRVRfVFBDU19GUkFNRSAoKHRhcmdldF9mbGFncyAmIE1BU0tfVFBDU19GUkFNRSkgIT0gMCkKKyNkZWZpbmUgVEFSR0VUX1RQQ1NfTEVBRl9GUkFNRSAoKHRhcmdldF9mbGFncyAmIE1BU0tfVFBDU19MRUFGX0ZSQU1FKSAhPSAwKQorI2RlZmluZSBPUFRJT05fVUNMSUJDICgobGludXhfdWNsaWJjICYgT1BUSU9OX01BU0tfVUNMSUJDKSAhPSAwKQorI2RlZmluZSBUQVJHRVRfTkVPTl9WRUNUT1JJWkVfUVVBRCAoKHRhcmdldF9mbGFncyAmIE1BU0tfTkVPTl9WRUNUT1JJWkVfUVVBRCkgIT0gMCkKKyNkZWZpbmUgVEFSR0VUX0xJVFRMRV9XT1JEUyAoKHRhcmdldF9mbGFncyAmIE1BU0tfTElUVExFX1dPUkRTKSAhPSAwKQorCisjZGVmaW5lIE9QVElPTl9HTElCQyAoKGxpbnV4X3VjbGliYyAmIE9QVElPTl9NQVNLX1VDTElCQykgPT0gMCkKKworI2RlZmluZSBDTF9BZGEgICAgICAgICgxIDw8IDApCisjZGVmaW5lIENMX0MgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgQ0xfQ1hYICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBDTF9Gb3J0cmFuICAgICgxIDw8IDMpCisjZGVmaW5lIENMX0phdmEgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgQ0xfTFRPICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBDTF9PYmpDICAgICAgICgxIDw8IDYpCisjZGVmaW5lIENMX09iakNYWCAgICAgKDEgPDwgNykKKyNkZWZpbmUgQ0xfTEFOR19BTEwgICAoKDEgPDwgOCkgLSAxKQorCitlbnVtIG9wdF9jb2RlCit7CisgIE9QVF9faGVscCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtLWhlbHAgKi8KKyAgT1BUX19oZWxwXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC0taGVscD0gKi8KKyAgT1BUX19vdXRwdXRfcGNoXywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC0tb3V0cHV0LXBjaD0gKi8KKyAgT1BUX19wYXJhbSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC0tcGFyYW0gKi8KKyAgT1BUX190YXJnZXRfaGVscCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC0tdGFyZ2V0LWhlbHAgKi8KKyAgT1BUX192ZXJzaW9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC0tdmVyc2lvbiAqLworICBPUFRfQSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLUEgKi8KKyAgT1BUX0MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1DICovCisgIE9QVF9DQywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtQ0MgKi8KKyAgT1BUX0QsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1EICovCisgIE9QVF9FLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtRSAqLworICBPUFRfRiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLUYgKi8KKyAgT1BUX0csICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1HICovCisgIE9QVF9ILCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtSCAqLworICBPUFRfSSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLUkgKi8KKyAgT1BUX0osICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1KICovCisgIE9QVF9NLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtTSAqLworICBPUFRfTUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLU1EICovCisgIE9QVF9NRF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtTURfICovCisgIE9QVF9NRiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtTUYgKi8KKyAgT1BUX01HLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1NRyAqLworICBPUFRfTU0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLU1NICovCisgIE9QVF9NTUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtTU1EICovCisgIE9QVF9NTURfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtTU1EXyAqLworICBPUFRfTVAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLU1QICovCisgIE9QVF9NUSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtTVEgKi8KKyAgT1BUX01ULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1NVCAqLworICBPUFRfTywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLU8gKi8KKyAgT1BUX09zLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1PcyAqLworICBPUFRfUCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVAgKi8KKyAgT1BUX1UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1VICovCisgIE9QVF9XLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtVyAqLworICBPUFRfV2FiaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdhYmkgKi8KKyAgT1BUX1dhZGRyZXNzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XYWRkcmVzcyAqLworICBPUFRfV2FnZ3JlZ2F0ZV9yZXR1cm4sICAgICAgICAgICAgICAgICAgICAgLyogLVdhZ2dyZWdhdGUtcmV0dXJuICovCisgIE9QVF9XYWxpYXNpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV2FsaWFzaW5nICovCisgIE9QVF9XYWxpZ25fY29tbW9ucywgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV2FsaWduLWNvbW1vbnMgKi8KKyAgT1BUX1dhbGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XYWxsICovCisgIE9QVF9XYWxsX2RlcHJlY2F0aW9uLCAgICAgICAgICAgICAgICAgICAgICAvKiAtV2FsbC1kZXByZWNhdGlvbiAqLworICBPUFRfV2FsbF9qYXZhZG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdhbGwtamF2YWRvYyAqLworICBPUFRfV2FtcGVyc2FuZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdhbXBlcnNhbmQgKi8KKyAgT1BUX1dhcnJheV9ib3VuZHMsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XYXJyYXktYm91bmRzICovCisgIE9QVF9XYXJyYXlfdGVtcG9yYXJpZXMsICAgICAgICAgICAgICAgICAgICAvKiAtV2FycmF5LXRlbXBvcmFyaWVzICovCisgIE9QVF9XYXNzZXJ0X2lkZW50aWZpZXIsICAgICAgICAgICAgICAgICAgICAvKiAtV2Fzc2VydC1pZGVudGlmaWVyICovCisgIE9QVF9XYXNzaWduX2ludGVyY2VwdCwgICAgICAgICAgICAgICAgICAgICAvKiAtV2Fzc2lnbi1pbnRlcmNlcHQgKi8KKyAgT1BUX1dhdHRyaWJ1dGVzLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XYXR0cmlidXRlcyAqLworICBPUFRfV2JhZF9mdW5jdGlvbl9jYXN0LCAgICAgICAgICAgICAgICAgICAgLyogLVdiYWQtZnVuY3Rpb24tY2FzdCAqLworICBPUFRfV2JveGluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdib3hpbmcgKi8KKyAgT1BUX1didWlsdGluX21hY3JvX3JlZGVmaW5lZCwgICAgICAgICAgICAgIC8qIC1XYnVpbHRpbi1tYWNyby1yZWRlZmluZWQgKi8KKyAgT1BUX1djX19fY29tcGF0LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XYysrLWNvbXBhdCAqLworICBPUFRfV2NfXzB4X2NvbXBhdCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdjKysweC1jb21wYXQgKi8KKyAgT1BUX1djYXN0X2FsaWduLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XY2FzdC1hbGlnbiAqLworICBPUFRfV2Nhc3RfcXVhbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdjYXN0LXF1YWwgKi8KKyAgT1BUX1djaGFyX2NvbmNhdCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XY2hhci1jb25jYXQgKi8KKyAgT1BUX1djaGFyX3N1YnNjcmlwdHMsICAgICAgICAgICAgICAgICAgICAgIC8qIC1XY2hhci1zdWJzY3JpcHRzICovCisgIE9QVF9XY2hhcmFjdGVyX3RydW5jYXRpb24sICAgICAgICAgICAgICAgICAvKiAtV2NoYXJhY3Rlci10cnVuY2F0aW9uICovCisgIE9QVF9XY2xvYmJlcmVkLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV2Nsb2JiZXJlZCAqLworICBPUFRfV2NvbW1lbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdjb21tZW50ICovCisgIE9QVF9XY29tbWVudHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV2NvbW1lbnRzICovCisgIE9QVF9XY29uZGl0aW9uX2Fzc2lnbiwgICAgICAgICAgICAgICAgICAgICAvKiAtV2NvbmRpdGlvbi1hc3NpZ24gKi8KKyAgT1BUX1djb25zdHJ1Y3Rvcl9uYW1lLCAgICAgICAgICAgICAgICAgICAgIC8qIC1XY29uc3RydWN0b3ItbmFtZSAqLworICBPUFRfV2NvbnZlcnNpb24sICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdjb252ZXJzaW9uICovCisgIE9QVF9XY29udmVyc2lvbl9udWxsLCAgICAgICAgICAgICAgICAgICAgICAvKiAtV2NvbnZlcnNpb24tbnVsbCAqLworICBPUFRfV2NvdmVyYWdlX21pc21hdGNoLCAgICAgICAgICAgICAgICAgICAgLyogLVdjb3ZlcmFnZS1taXNtYXRjaCAqLworICBPUFRfV2N0b3JfZHRvcl9wcml2YWN5LCAgICAgICAgICAgICAgICAgICAgLyogLVdjdG9yLWR0b3ItcHJpdmFjeSAqLworICBPUFRfV2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudCwgICAgICAgICAgLyogLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQgKi8KKyAgT1BUX1dkZXBfYW5uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XZGVwLWFubiAqLworICBPUFRfV2RlcHJlY2F0ZWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdkZXByZWNhdGVkICovCisgIE9QVF9XZGVwcmVjYXRlZF9kZWNsYXJhdGlvbnMsICAgICAgICAgICAgICAvKiAtV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zICovCisgIE9QVF9XZGlzYWJsZWRfb3B0aW1pemF0aW9uLCAgICAgICAgICAgICAgICAvKiAtV2Rpc2FibGVkLW9wdGltaXphdGlvbiAqLworICBPUFRfV2Rpc2NvdXJhZ2VkLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdkaXNjb3VyYWdlZCAqLworICBPUFRfV2Rpdl9ieV96ZXJvLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdkaXYtYnktemVybyAqLworICBPUFRfV2VmZmNfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdlZmZjKysgKi8KKyAgT1BUX1dlbXB0eV9ibG9jaywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XZW1wdHktYmxvY2sgKi8KKyAgT1BUX1dlbXB0eV9ib2R5LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XZW1wdHktYm9keSAqLworICBPUFRfV2VuZGlmX2xhYmVscywgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdlbmRpZi1sYWJlbHMgKi8KKyAgT1BUX1dlbnVtX2NvbXBhcmUsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XZW51bS1jb21wYXJlICovCisgIE9QVF9XZW51bV9pZGVudGlmaWVyLCAgICAgICAgICAgICAgICAgICAgICAvKiAtV2VudW0taWRlbnRpZmllciAqLworICBPUFRfV2VudW1fc3dpdGNoLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdlbnVtLXN3aXRjaCAqLworICBPUFRfV2Vycm9yLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdlcnJvciAqLworICBPUFRfV2Vycm9yX2ltcGxpY2l0X2Z1bmN0aW9uX2RlY2xhcmF0aW9uLCAgLyogLVdlcnJvci1pbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbiAqLworICBPUFRfV2Vycm9yXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdlcnJvcj0gKi8KKyAgT1BUX1dleHRyYSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XZXh0cmEgKi8KKyAgT1BUX1dleHRyYW5lb3VzX3NlbWljb2xvbiwgICAgICAgICAgICAgICAgIC8qIC1XZXh0cmFuZW91cy1zZW1pY29sb24gKi8KKyAgT1BUX1dmYWxsdGhyb3VnaCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XZmFsbHRocm91Z2ggKi8KKyAgT1BUX1dmYXRhbF9lcnJvcnMsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XZmF0YWwtZXJyb3JzICovCisgIE9QVF9XZmllbGRfaGlkaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV2ZpZWxkLWhpZGluZyAqLworICBPUFRfV2ZpbmFsX2JvdW5kLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdmaW5hbC1ib3VuZCAqLworICBPUFRfV2ZpbmFsbHksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdmaW5hbGx5ICovCisgIE9QVF9XZmxvYXRfZXF1YWwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV2Zsb2F0LWVxdWFsICovCisgIE9QVF9XZm9yYmlkZGVuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV2ZvcmJpZGRlbiAqLworICBPUFRfV2Zvcm1hdCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdmb3JtYXQgKi8KKyAgT1BUX1dmb3JtYXRfY29udGFpbnNfbnVsLCAgICAgICAgICAgICAgICAgIC8qIC1XZm9ybWF0LWNvbnRhaW5zLW51bCAqLworICBPUFRfV2Zvcm1hdF9leHRyYV9hcmdzLCAgICAgICAgICAgICAgICAgICAgLyogLVdmb3JtYXQtZXh0cmEtYXJncyAqLworICBPUFRfV2Zvcm1hdF9ub25saXRlcmFsLCAgICAgICAgICAgICAgICAgICAgLyogLVdmb3JtYXQtbm9ubGl0ZXJhbCAqLworICBPUFRfV2Zvcm1hdF9zZWN1cml0eSwgICAgICAgICAgICAgICAgICAgICAgLyogLVdmb3JtYXQtc2VjdXJpdHkgKi8KKyAgT1BUX1dmb3JtYXRfeTJrLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XZm9ybWF0LXkyayAqLworICBPUFRfV2Zvcm1hdF96ZXJvX2xlbmd0aCwgICAgICAgICAgICAgICAgICAgLyogLVdmb3JtYXQtemVyby1sZW5ndGggKi8KKyAgT1BUX1dmb3JtYXRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XZm9ybWF0PSAqLworICBPUFRfV2ZyYW1lX2xhcmdlcl90aGFuXywgICAgICAgICAgICAgICAgICAgLyogLVdmcmFtZS1sYXJnZXItdGhhbj0gKi8KKyAgT1BUX1doaWRpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XaGlkaW5nICovCisgIE9QVF9XaWdub3JlZF9xdWFsaWZpZXJzLCAgICAgICAgICAgICAgICAgICAvKiAtV2lnbm9yZWQtcXVhbGlmaWVycyAqLworICBPUFRfV2ltcGxpY2l0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdpbXBsaWNpdCAqLworICBPUFRfV2ltcGxpY2l0X2Z1bmN0aW9uX2RlY2xhcmF0aW9uLCAgICAgICAgLyogLVdpbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbiAqLworICBPUFRfV2ltcGxpY2l0X2ludCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdpbXBsaWNpdC1pbnQgKi8KKyAgT1BUX1dpbXBsaWNpdF9pbnRlcmZhY2UsICAgICAgICAgICAgICAgICAgIC8qIC1XaW1wbGljaXQtaW50ZXJmYWNlICovCisgIE9QVF9XaW1wbGljaXRfcHJvY2VkdXJlLCAgICAgICAgICAgICAgICAgICAvKiAtV2ltcGxpY2l0LXByb2NlZHVyZSAqLworICBPUFRfV2ltcG9ydCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdpbXBvcnQgKi8KKyAgT1BUX1dpbmRpcmVjdF9zdGF0aWMsICAgICAgICAgICAgICAgICAgICAgIC8qIC1XaW5kaXJlY3Qtc3RhdGljICovCisgIE9QVF9XaW5pdF9zZWxmLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV2luaXQtc2VsZiAqLworICBPUFRfV2lubGluZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdpbmxpbmUgKi8KKyAgT1BUX1dpbnRfdG9fcG9pbnRlcl9jYXN0LCAgICAgICAgICAgICAgICAgIC8qIC1XaW50LXRvLXBvaW50ZXItY2FzdCAqLworICBPUFRfV2ludGZfYW5ub3RhdGlvbiwgICAgICAgICAgICAgICAgICAgICAgLyogLVdpbnRmLWFubm90YXRpb24gKi8KKyAgT1BUX1dpbnRmX25vbl9pbmhlcml0ZWQsICAgICAgICAgICAgICAgICAgIC8qIC1XaW50Zi1ub24taW5oZXJpdGVkICovCisgIE9QVF9XaW50cmluc2ljX3NoYWRvdywgICAgICAgICAgICAgICAgICAgICAvKiAtV2ludHJpbnNpYy1zaGFkb3cgKi8KKyAgT1BUX1dpbnRyaW5zaWNzX3N0ZCwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XaW50cmluc2ljcy1zdGQgKi8KKyAgT1BUX1dpbnZhbGlkX29mZnNldG9mLCAgICAgICAgICAgICAgICAgICAgIC8qIC1XaW52YWxpZC1vZmZzZXRvZiAqLworICBPUFRfV2ludmFsaWRfcGNoLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdpbnZhbGlkLXBjaCAqLworICBPUFRfV2phdmFkb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdqYXZhZG9jICovCisgIE9QVF9XanVtcF9taXNzZXNfaW5pdCwgICAgICAgICAgICAgICAgICAgICAvKiAtV2p1bXAtbWlzc2VzLWluaXQgKi8KKyAgT1BUX1dsYXJnZXJfdGhhbl8sICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XbGFyZ2VyLXRoYW4tICovCisgIE9QVF9XbGFyZ2VyX3RoYW5fZXEsICAgICAgICAgICAgICAgICAgICAgICAvKiAtV2xhcmdlci10aGFuPSAqLworICBPUFRfV2xpbmVfdHJ1bmNhdGlvbiwgICAgICAgICAgICAgICAgICAgICAgLyogLVdsaW5lLXRydW5jYXRpb24gKi8KKyAgT1BUX1dsb2NhbF9oaWRpbmcsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XbG9jYWwtaGlkaW5nICovCisgIE9QVF9XbG9naWNhbF9vcCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV2xvZ2ljYWwtb3AgKi8KKyAgT1BUX1dsb25nX2xvbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XbG9uZy1sb25nICovCisgIE9QVF9XbWFpbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV21haW4gKi8KKyAgT1BUX1dtYXNrZWRfY2F0Y2hfYmxvY2ssICAgICAgICAgICAgICAgICAgIC8qIC1XbWFza2VkLWNhdGNoLWJsb2NrICovCisgIE9QVF9XbWlzc2luZ19icmFjZXMsICAgICAgICAgICAgICAgICAgICAgICAvKiAtV21pc3NpbmctYnJhY2VzICovCisgIE9QVF9XbWlzc2luZ19kZWNsYXJhdGlvbnMsICAgICAgICAgICAgICAgICAvKiAtV21pc3NpbmctZGVjbGFyYXRpb25zICovCisgIE9QVF9XbWlzc2luZ19maWVsZF9pbml0aWFsaXplcnMsICAgICAgICAgICAvKiAtV21pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzICovCisgIE9QVF9XbWlzc2luZ19mb3JtYXRfYXR0cmlidXRlLCAgICAgICAgICAgICAvKiAtV21pc3NpbmctZm9ybWF0LWF0dHJpYnV0ZSAqLworICBPUFRfV21pc3NpbmdfaW5jbHVkZV9kaXJzLCAgICAgICAgICAgICAgICAgLyogLVdtaXNzaW5nLWluY2x1ZGUtZGlycyAqLworICBPUFRfV21pc3Npbmdfbm9yZXR1cm4sICAgICAgICAgICAgICAgICAgICAgLyogLVdtaXNzaW5nLW5vcmV0dXJuICovCisgIE9QVF9XbWlzc2luZ19wYXJhbWV0ZXJfdHlwZSwgICAgICAgICAgICAgICAvKiAtV21pc3NpbmctcGFyYW1ldGVyLXR5cGUgKi8KKyAgT1BUX1dtaXNzaW5nX3Byb3RvdHlwZXMsICAgICAgICAgICAgICAgICAgIC8qIC1XbWlzc2luZy1wcm90b3R5cGVzICovCisgIE9QVF9XbXVkZmxhcCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV211ZGZsYXAgKi8KKyAgT1BUX1dtdWx0aWNoYXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XbXVsdGljaGFyICovCisgIE9QVF9XbmVzdGVkX2V4dGVybnMsICAgICAgICAgICAgICAgICAgICAgICAvKiAtV25lc3RlZC1leHRlcm5zICovCisgIE9QVF9XbmxzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV25scyAqLworICBPUFRfV25vX2VmZmVjdF9hc3NpZ24sICAgICAgICAgICAgICAgICAgICAgLyogLVduby1lZmZlY3QtYXNzaWduICovCisgIE9QVF9Xbm9uX3RlbXBsYXRlX2ZyaWVuZCwgICAgICAgICAgICAgICAgICAvKiAtV25vbi10ZW1wbGF0ZS1mcmllbmQgKi8KKyAgT1BUX1dub25fdmlydHVhbF9kdG9yLCAgICAgICAgICAgICAgICAgICAgIC8qIC1Xbm9uLXZpcnR1YWwtZHRvciAqLworICBPUFRfV25vbm51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdub25udWxsICovCisgIE9QVF9Xbm9ybWFsaXplZF8sICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV25vcm1hbGl6ZWQ9ICovCisgIE9QVF9XbnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV251bGwgKi8KKyAgT1BUX1dvbGRfc3R5bGVfY2FzdCwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1Xb2xkLXN0eWxlLWNhc3QgKi8KKyAgT1BUX1dvbGRfc3R5bGVfZGVjbGFyYXRpb24sICAgICAgICAgICAgICAgIC8qIC1Xb2xkLXN0eWxlLWRlY2xhcmF0aW9uICovCisgIE9QVF9Xb2xkX3N0eWxlX2RlZmluaXRpb24sICAgICAgICAgICAgICAgICAvKiAtV29sZC1zdHlsZS1kZWZpbml0aW9uICovCisgIE9QVF9Xb3V0X29mX2RhdGUsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV291dC1vZi1kYXRlICovCisgIE9QVF9Xb3Zlcl9hbm4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV292ZXItYW5uICovCisgIE9QVF9Xb3ZlcmZsb3csICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV292ZXJmbG93ICovCisgIE9QVF9Xb3Zlcmxlbmd0aF9zdHJpbmdzLCAgICAgICAgICAgICAgICAgICAvKiAtV292ZXJsZW5ndGgtc3RyaW5ncyAqLworICBPUFRfV292ZXJsb2FkZWRfdmlydHVhbCwgICAgICAgICAgICAgICAgICAgLyogLVdvdmVybG9hZGVkLXZpcnR1YWwgKi8KKyAgT1BUX1dvdmVycmlkZV9pbml0LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1Xb3ZlcnJpZGUtaW5pdCAqLworICBPUFRfV3BhY2tlZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdwYWNrZWQgKi8KKyAgT1BUX1dwYWNrZWRfYml0ZmllbGRfY29tcGF0LCAgICAgICAgICAgICAgIC8qIC1XcGFja2VkLWJpdGZpZWxkLWNvbXBhdCAqLworICBPUFRfV3BhZGRlZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdwYWRkZWQgKi8KKyAgT1BUX1dwYXJhbV9hc3NpZ24sICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XcGFyYW0tYXNzaWduICovCisgIE9QVF9XcGFyZW50aGVzZXMsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV3BhcmVudGhlc2VzICovCisgIE9QVF9XcGtnX2RlZmF1bHRfbWV0aG9kLCAgICAgICAgICAgICAgICAgICAvKiAtV3BrZy1kZWZhdWx0LW1ldGhvZCAqLworICBPUFRfV3BtZl9jb252ZXJzaW9ucywgICAgICAgICAgICAgICAgICAgICAgLyogLVdwbWYtY29udmVyc2lvbnMgKi8KKyAgT1BUX1dwb2ludGVyX2FyaXRoLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XcG9pbnRlci1hcml0aCAqLworICBPUFRfV3BvaW50ZXJfc2lnbiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdwb2ludGVyLXNpZ24gKi8KKyAgT1BUX1dwb2ludGVyX3RvX2ludF9jYXN0LCAgICAgICAgICAgICAgICAgIC8qIC1XcG9pbnRlci10by1pbnQtY2FzdCAqLworICBPUFRfV3ByYWdtYXMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdwcmFnbWFzICovCisgIE9QVF9XcHJvdG9jb2wsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV3Byb3RvY29sICovCisgIE9QVF9XcHNhYmksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV3BzYWJpICovCisgIE9QVF9XcmF3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV3JhdyAqLworICBPUFRfV3JlZHVuZGFudF9kZWNscywgICAgICAgICAgICAgICAgICAgICAgLyogLVdyZWR1bmRhbnQtZGVjbHMgKi8KKyAgT1BUX1dyZWR1bmRhbnRfbW9kaWZpZXJzLCAgICAgICAgICAgICAgICAgIC8qIC1XcmVkdW5kYW50LW1vZGlmaWVycyAqLworICBPUFRfV3Jlb3JkZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdyZW9yZGVyICovCisgIE9QVF9XcmV0dXJuX3R5cGUsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV3JldHVybi10eXBlICovCisgIE9QVF9Xc2VsZWN0b3IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV3NlbGVjdG9yICovCisgIE9QVF9Xc2VxdWVuY2VfcG9pbnQsICAgICAgICAgICAgICAgICAgICAgICAvKiAtV3NlcXVlbmNlLXBvaW50ICovCisgIE9QVF9Xc2VyaWFsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV3NlcmlhbCAqLworICBPUFRfV3NoYWRvdywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdzaGFkb3cgKi8KKyAgT1BUX1dzaWduX2NvbXBhcmUsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1Xc2lnbi1jb21wYXJlICovCisgIE9QVF9Xc2lnbl9jb252ZXJzaW9uLCAgICAgICAgICAgICAgICAgICAgICAvKiAtV3NpZ24tY29udmVyc2lvbiAqLworICBPUFRfV3NpZ25fcHJvbW8sICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdzaWduLXByb21vICovCisgIE9QVF9Xc3BlY2lhbF9wYXJhbV9oaWRpbmcsICAgICAgICAgICAgICAgICAvKiAtV3NwZWNpYWwtcGFyYW0taGlkaW5nICovCisgIE9QVF9Xc3RhY2tfcHJvdGVjdG9yLCAgICAgICAgICAgICAgICAgICAgICAvKiAtV3N0YWNrLXByb3RlY3RvciAqLworICBPUFRfV3N0YXRpY19hY2Nlc3MsICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdzdGF0aWMtYWNjZXNzICovCisgIE9QVF9Xc3RhdGljX3JlY2VpdmVyLCAgICAgICAgICAgICAgICAgICAgICAvKiAtV3N0YXRpYy1yZWNlaXZlciAqLworICBPUFRfV3N0cmljdF9hbGlhc2luZywgICAgICAgICAgICAgICAgICAgICAgLyogLVdzdHJpY3QtYWxpYXNpbmcgKi8KKyAgT1BUX1dzdHJpY3RfYWxpYXNpbmdfLCAgICAgICAgICAgICAgICAgICAgIC8qIC1Xc3RyaWN0LWFsaWFzaW5nPSAqLworICBPUFRfV3N0cmljdF9udWxsX3NlbnRpbmVsLCAgICAgICAgICAgICAgICAgLyogLVdzdHJpY3QtbnVsbC1zZW50aW5lbCAqLworICBPUFRfV3N0cmljdF9vdmVyZmxvdywgICAgICAgICAgICAgICAgICAgICAgLyogLVdzdHJpY3Qtb3ZlcmZsb3cgKi8KKyAgT1BUX1dzdHJpY3Rfb3ZlcmZsb3dfLCAgICAgICAgICAgICAgICAgICAgIC8qIC1Xc3RyaWN0LW92ZXJmbG93PSAqLworICBPUFRfV3N0cmljdF9wcm90b3R5cGVzLCAgICAgICAgICAgICAgICAgICAgLyogLVdzdHJpY3QtcHJvdG90eXBlcyAqLworICBPUFRfV3N0cmljdF9zZWxlY3Rvcl9tYXRjaCwgICAgICAgICAgICAgICAgLyogLVdzdHJpY3Qtc2VsZWN0b3ItbWF0Y2ggKi8KKyAgT1BUX1dzdXBwcmVzcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1Xc3VwcHJlc3MgKi8KKyAgT1BUX1dzdXJwcmlzaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1Xc3VycHJpc2luZyAqLworICBPUFRfV3N3aXRjaCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdzd2l0Y2ggKi8KKyAgT1BUX1dzd2l0Y2hfZGVmYXVsdCwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1Xc3dpdGNoLWRlZmF1bHQgKi8KKyAgT1BUX1dzd2l0Y2hfZW51bSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1Xc3dpdGNoLWVudW0gKi8KKyAgT1BUX1dzeW5jX25hbmQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1Xc3luYy1uYW5kICovCisgIE9QVF9Xc3ludGgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV3N5bnRoICovCisgIE9QVF9Xc3ludGhldGljX2FjY2VzcywgICAgICAgICAgICAgICAgICAgICAvKiAtV3N5bnRoZXRpYy1hY2Nlc3MgKi8KKyAgT1BUX1dzeXN0ZW1faGVhZGVycywgICAgICAgICAgICAgICAgICAgICAgIC8qIC1Xc3lzdGVtLWhlYWRlcnMgKi8KKyAgT1BUX1d0YWJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XdGFicyAqLworICBPUFRfV3Rhc2tzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVd0YXNrcyAqLworICBPUFRfV3RyYWRpdGlvbmFsLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVd0cmFkaXRpb25hbCAqLworICBPUFRfV3RyYWRpdGlvbmFsX2NvbnZlcnNpb24sICAgICAgICAgICAgICAgLyogLVd0cmFkaXRpb25hbC1jb252ZXJzaW9uICovCisgIE9QVF9XdHJpZ3JhcGhzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV3RyaWdyYXBocyAqLworICBPUFRfV3R5cGVfaGlkaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVd0eXBlLWhpZGluZyAqLworICBPUFRfV3R5cGVfbGltaXRzLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVd0eXBlLWxpbWl0cyAqLworICBPUFRfV3VuY2hlY2ssICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVd1bmNoZWNrICovCisgIE9QVF9XdW5kZWNsYXJlZF9zZWxlY3RvciwgICAgICAgICAgICAgICAgICAvKiAtV3VuZGVjbGFyZWQtc2VsZWN0b3IgKi8KKyAgT1BUX1d1bmRlZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XdW5kZWYgKi8KKyAgT1BUX1d1bmRlcmZsb3csICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XdW5kZXJmbG93ICovCisgIE9QVF9XdW5pbml0aWFsaXplZCwgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV3VuaW5pdGlhbGl6ZWQgKi8KKyAgT1BUX1d1bmtub3duX3ByYWdtYXMsICAgICAgICAgICAgICAgICAgICAgIC8qIC1XdW5rbm93bi1wcmFnbWFzICovCisgIE9QVF9XdW5uZWNlc3NhcnlfZWxzZSwgICAgICAgICAgICAgICAgICAgICAvKiAtV3VubmVjZXNzYXJ5LWVsc2UgKi8KKyAgT1BUX1d1bnF1YWxpZmllZF9maWVsZCwgICAgICAgICAgICAgICAgICAgIC8qIC1XdW5xdWFsaWZpZWQtZmllbGQgKi8KKyAgT1BUX1d1bnJlYWNoYWJsZV9jb2RlLCAgICAgICAgICAgICAgICAgICAgIC8qIC1XdW5yZWFjaGFibGUtY29kZSAqLworICBPUFRfV3Vuc2FmZV9sb29wX29wdGltaXphdGlvbnMsICAgICAgICAgICAgLyogLVd1bnNhZmUtbG9vcC1vcHRpbWl6YXRpb25zICovCisgIE9QVF9XdW5zdWZmaXhlZF9mbG9hdF9jb25zdGFudHMsICAgICAgICAgICAvKiAtV3Vuc3VmZml4ZWQtZmxvYXQtY29uc3RhbnRzICovCisgIE9QVF9XdW51c2VkLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV3VudXNlZCAqLworICBPUFRfV3VudXNlZF9hcmd1bWVudCwgICAgICAgICAgICAgICAgICAgICAgLyogLVd1bnVzZWQtYXJndW1lbnQgKi8KKyAgT1BUX1d1bnVzZWRfZnVuY3Rpb24sICAgICAgICAgICAgICAgICAgICAgIC8qIC1XdW51c2VkLWZ1bmN0aW9uICovCisgIE9QVF9XdW51c2VkX2ltcG9ydCwgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV3VudXNlZC1pbXBvcnQgKi8KKyAgT1BUX1d1bnVzZWRfbGFiZWwsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XdW51c2VkLWxhYmVsICovCisgIE9QVF9XdW51c2VkX2xvY2FsLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV3VudXNlZC1sb2NhbCAqLworICBPUFRfV3VudXNlZF9tYWNyb3MsICAgICAgICAgICAgICAgICAgICAgICAgLyogLVd1bnVzZWQtbWFjcm9zICovCisgIE9QVF9XdW51c2VkX3BhcmFtZXRlciwgICAgICAgICAgICAgICAgICAgICAvKiAtV3VudXNlZC1wYXJhbWV0ZXIgKi8KKyAgT1BUX1d1bnVzZWRfcHJpdmF0ZSwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XdW51c2VkLXByaXZhdGUgKi8KKyAgT1BUX1d1bnVzZWRfcmVzdWx0LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XdW51c2VkLXJlc3VsdCAqLworICBPUFRfV3VudXNlZF90aHJvd24sICAgICAgICAgICAgICAgICAgICAgICAgLyogLVd1bnVzZWQtdGhyb3duICovCisgIE9QVF9XdW51c2VkX3ZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV3VudXNlZC12YWx1ZSAqLworICBPUFRfV3VudXNlZF92YXJpYWJsZSwgICAgICAgICAgICAgICAgICAgICAgLyogLVd1bnVzZWQtdmFyaWFibGUgKi8KKyAgT1BUX1d1c2VsZXNzX3R5cGVfY2hlY2ssICAgICAgICAgICAgICAgICAgIC8qIC1XdXNlbGVzcy10eXBlLWNoZWNrICovCisgIE9QVF9XdmFyYXJnc19jYXN0LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV3ZhcmFyZ3MtY2FzdCAqLworICBPUFRfV3ZhcmlhZGljX21hY3JvcywgICAgICAgICAgICAgICAgICAgICAgLyogLVd2YXJpYWRpYy1tYWNyb3MgKi8KKyAgT1BUX1d2bGEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XdmxhICovCisgIE9QVF9Xdm9sYXRpbGVfcmVnaXN0ZXJfdmFyLCAgICAgICAgICAgICAgICAvKiAtV3ZvbGF0aWxlLXJlZ2lzdGVyLXZhciAqLworICBPUFRfV3dhcm5pbmdfdG9rZW4sICAgICAgICAgICAgICAgICAgICAgICAgLyogLVd3YXJuaW5nLXRva2VuICovCisgIE9QVF9Xd3JpdGVfc3RyaW5ncywgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV3dyaXRlLXN0cmluZ3MgKi8KKyAgT1BUX2Fuc2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1hbnNpICovCisgIE9QVF9hdXhfaW5mbywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtYXV4LWluZm8gKi8KKyAgT1BUX2F1eF9pbmZvXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1hdXgtaW5mbz0gKi8KKyAgT1BUX2F1eGJhc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1hdXhiYXNlICovCisgIE9QVF9hdXhiYXNlX3N0cmlwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtYXV4YmFzZS1zdHJpcCAqLworICBPUFRfY3BwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWNwcCAqLworICBPUFRfZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWQgKi8KKyAgT1BUX2R1bXBiYXNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1kdW1wYmFzZSAqLworICBPUFRfZHVtcGRpciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWR1bXBkaXIgKi8KKyAgT1BUX2ZDTEFTU1BBVEhfLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mQ0xBU1NQQVRIPSAqLworICBPUFRfZlBJQywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZQSUMgKi8KKyAgT1BUX2ZQSUUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mUElFICovCisgIE9QVF9mUlRTXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZlJUUz0gKi8KKyAgT1BUX2ZhYmlfdmVyc2lvbl8sICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mYWJpLXZlcnNpb249ICovCisgIE9QVF9mYWNjZXNzX2NvbnRyb2wsICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmFjY2Vzcy1jb250cm9sICovCisgIE9QVF9mYWxpZ25fY29tbW9ucywgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmFsaWduLWNvbW1vbnMgKi8KKyAgT1BUX2ZhbGlnbl9mdW5jdGlvbnMsICAgICAgICAgICAgICAgICAgICAgIC8qIC1mYWxpZ24tZnVuY3Rpb25zICovCisgIE9QVF9mYWxpZ25fZnVuY3Rpb25zXywgICAgICAgICAgICAgICAgICAgICAvKiAtZmFsaWduLWZ1bmN0aW9ucz0gKi8KKyAgT1BUX2ZhbGlnbl9qdW1wcywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mYWxpZ24tanVtcHMgKi8KKyAgT1BUX2ZhbGlnbl9qdW1wc18sICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mYWxpZ24tanVtcHM9ICovCisgIE9QVF9mYWxpZ25fbGFiZWxzLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmFsaWduLWxhYmVscyAqLworICBPUFRfZmFsaWduX2xhYmVsc18sICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZhbGlnbi1sYWJlbHM9ICovCisgIE9QVF9mYWxpZ25fbG9vcHMsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmFsaWduLWxvb3BzICovCisgIE9QVF9mYWxpZ25fbG9vcHNfLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmFsaWduLWxvb3BzPSAqLworICBPUFRfZmFsbF9pbnRyaW5zaWNzLCAgICAgICAgICAgICAgICAgICAgICAgLyogLWZhbGwtaW50cmluc2ljcyAqLworICBPUFRfZmFsbF92aXJ0dWFsLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZhbGwtdmlydHVhbCAqLworICBPUFRfZmFsbG93X2xlYWRpbmdfdW5kZXJzY29yZSwgICAgICAgICAgICAgLyogLWZhbGxvdy1sZWFkaW5nLXVuZGVyc2NvcmUgKi8KKyAgT1BUX2ZhbHRfZXh0ZXJuYWxfdGVtcGxhdGVzLCAgICAgICAgICAgICAgIC8qIC1mYWx0LWV4dGVybmFsLXRlbXBsYXRlcyAqLworICBPUFRfZmFyZ3VtZW50X2FsaWFzLCAgICAgICAgICAgICAgICAgICAgICAgLyogLWZhcmd1bWVudC1hbGlhcyAqLworICBPUFRfZmFyZ3VtZW50X25vYWxpYXMsICAgICAgICAgICAgICAgICAgICAgLyogLWZhcmd1bWVudC1ub2FsaWFzICovCisgIE9QVF9mYXJndW1lbnRfbm9hbGlhc19hbnl0aGluZywgICAgICAgICAgICAvKiAtZmFyZ3VtZW50LW5vYWxpYXMtYW55dGhpbmcgKi8KKyAgT1BUX2Zhcmd1bWVudF9ub2FsaWFzX2dsb2JhbCwgICAgICAgICAgICAgIC8qIC1mYXJndW1lbnQtbm9hbGlhcy1nbG9iYWwgKi8KKyAgT1BUX2Zhc20sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mYXNtICovCisgIE9QVF9mYXNzZXJ0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmFzc2VydCAqLworICBPUFRfZmFzc29jaWF0aXZlX21hdGgsICAgICAgICAgICAgICAgICAgICAgLyogLWZhc3NvY2lhdGl2ZS1tYXRoICovCisgIE9QVF9mYXNzdW1lX2NvbXBpbGVkLCAgICAgICAgICAgICAgICAgICAgICAvKiAtZmFzc3VtZS1jb21waWxlZCAqLworICBPUFRfZmFzc3VtZV9jb21waWxlZF8sICAgICAgICAgICAgICAgICAgICAgLyogLWZhc3N1bWUtY29tcGlsZWQ9ICovCisgIE9QVF9mYXN5bmNocm9ub3VzX3Vud2luZF90YWJsZXMsICAgICAgICAgICAvKiAtZmFzeW5jaHJvbm91cy11bndpbmQtdGFibGVzICovCisgIE9QVF9mYXV0b19pbmNfZGVjLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmF1dG8taW5jLWRlYyAqLworICBPUFRfZmF1dG9tYXRpYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZhdXRvbWF0aWMgKi8KKyAgT1BUX2ZhdXhfY2xhc3NwYXRoLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mYXV4LWNsYXNzcGF0aCAqLworICBPUFRfZmJhY2tzbGFzaCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZiYWNrc2xhc2ggKi8KKyAgT1BUX2ZiYWNrdHJhY2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mYmFja3RyYWNlICovCisgIE9QVF9mYmxhc19tYXRtdWxfbGltaXRfLCAgICAgICAgICAgICAgICAgICAvKiAtZmJsYXMtbWF0bXVsLWxpbWl0PSAqLworICBPUFRfZmJvb3RjbGFzc3BhdGhfLCAgICAgICAgICAgICAgICAgICAgICAgLyogLWZib290Y2xhc3NwYXRoPSAqLworICBPUFRfZmJvb3RzdHJhcF9jbGFzc2VzLCAgICAgICAgICAgICAgICAgICAgLyogLWZib290c3RyYXAtY2xhc3NlcyAqLworICBPUFRfZmJvdW5kc19jaGVjaywgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZib3VuZHMtY2hlY2sgKi8KKyAgT1BUX2ZicmFuY2hfY291bnRfcmVnLCAgICAgICAgICAgICAgICAgICAgIC8qIC1mYnJhbmNoLWNvdW50LXJlZyAqLworICBPUFRfZmJyYW5jaF9wcm9iYWJpbGl0aWVzLCAgICAgICAgICAgICAgICAgLyogLWZicmFuY2gtcHJvYmFiaWxpdGllcyAqLworICBPUFRfZmJyYW5jaF90YXJnZXRfbG9hZF9vcHRpbWl6ZSwgICAgICAgICAgLyogLWZicmFuY2gtdGFyZ2V0LWxvYWQtb3B0aW1pemUgKi8KKyAgT1BUX2ZicmFuY2hfdGFyZ2V0X2xvYWRfb3B0aW1pemUyLCAgICAgICAgIC8qIC1mYnJhbmNoLXRhcmdldC1sb2FkLW9wdGltaXplMiAqLworICBPUFRfZmJ0cl9iYl9leGNsdXNpdmUsICAgICAgICAgICAgICAgICAgICAgLyogLWZidHItYmItZXhjbHVzaXZlICovCisgIE9QVF9mYnVpbHRpbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmJ1aWx0aW4gKi8KKyAgT1BUX2ZidWlsdGluXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mYnVpbHRpbi0gKi8KKyAgT1BUX2ZjYWxsX3NhdmVkXywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mY2FsbC1zYXZlZC0gKi8KKyAgT1BUX2ZjYWxsX3VzZWRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mY2FsbC11c2VkLSAqLworICBPUFRfZmNhbGxlcl9zYXZlcywgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZjYWxsZXItc2F2ZXMgKi8KKyAgT1BUX2ZjaGVja19hcnJheV90ZW1wb3JhcmllcywgICAgICAgICAgICAgIC8qIC1mY2hlY2stYXJyYXktdGVtcG9yYXJpZXMgKi8KKyAgT1BUX2ZjaGVja19kYXRhX2RlcHMsICAgICAgICAgICAgICAgICAgICAgIC8qIC1mY2hlY2stZGF0YS1kZXBzICovCisgIE9QVF9mY2hlY2tfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmNoZWNrLW5ldyAqLworICBPUFRfZmNoZWNrX3JlZmVyZW5jZXMsICAgICAgICAgICAgICAgICAgICAgLyogLWZjaGVjay1yZWZlcmVuY2VzICovCisgIE9QVF9mY2hlY2tfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmNoZWNrPSAqLworICBPUFRfZmNsYXNzcGF0aF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZjbGFzc3BhdGg9ICovCisgIE9QVF9mY29tbW9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmNvbW1vbiAqLworICBPUFRfZmNvbXBhcmVfZGVidWdfc2Vjb25kLCAgICAgICAgICAgICAgICAgLyogLWZjb21wYXJlLWRlYnVnLXNlY29uZCAqLworICBPUFRfZmNvbXBhcmVfZGVidWdfLCAgICAgICAgICAgICAgICAgICAgICAgLyogLWZjb21wYXJlLWRlYnVnPSAqLworICBPUFRfZmNvbXBpbGVfcmVzb3VyY2VfLCAgICAgICAgICAgICAgICAgICAgLyogLWZjb21waWxlLXJlc291cmNlPSAqLworICBPUFRfZmNvbmRfbWlzbWF0Y2gsICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZjb25kLW1pc21hdGNoICovCisgIE9QVF9mY29uc2VydmVfc3BhY2UsICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmNvbnNlcnZlLXNwYWNlICovCisgIE9QVF9mY29uc2VydmVfc3RhY2ssICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmNvbnNlcnZlLXN0YWNrICovCisgIE9QVF9mY29uc3RhbnRfc3RyaW5nX2NsYXNzXywgICAgICAgICAgICAgICAvKiAtZmNvbnN0YW50LXN0cmluZy1jbGFzcz0gKi8KKyAgT1BUX2Zjb252ZXJ0X2JpZ19lbmRpYW4sICAgICAgICAgICAgICAgICAgIC8qIC1mY29udmVydD1iaWctZW5kaWFuICovCisgIE9QVF9mY29udmVydF9saXR0bGVfZW5kaWFuLCAgICAgICAgICAgICAgICAvKiAtZmNvbnZlcnQ9bGl0dGxlLWVuZGlhbiAqLworICBPUFRfZmNvbnZlcnRfbmF0aXZlLCAgICAgICAgICAgICAgICAgICAgICAgLyogLWZjb252ZXJ0PW5hdGl2ZSAqLworICBPUFRfZmNvbnZlcnRfc3dhcCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZjb252ZXJ0PXN3YXAgKi8KKyAgT1BUX2ZjcHJvcF9yZWdpc3RlcnMsICAgICAgICAgICAgICAgICAgICAgIC8qIC1mY3Byb3AtcmVnaXN0ZXJzICovCisgIE9QVF9mY3JheV9wb2ludGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmNyYXktcG9pbnRlciAqLworICBPUFRfZmNyb3NzanVtcGluZywgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZjcm9zc2p1bXBpbmcgKi8KKyAgT1BUX2Zjc2VfZm9sbG93X2p1bXBzLCAgICAgICAgICAgICAgICAgICAgIC8qIC1mY3NlLWZvbGxvdy1qdW1wcyAqLworICBPUFRfZmNzZV9za2lwX2Jsb2NrcywgICAgICAgICAgICAgICAgICAgICAgLyogLWZjc2Utc2tpcC1ibG9ja3MgKi8KKyAgT1BUX2ZjeF9mb3J0cmFuX3J1bGVzLCAgICAgICAgICAgICAgICAgICAgIC8qIC1mY3gtZm9ydHJhbi1ydWxlcyAqLworICBPUFRfZmN4X2xpbWl0ZWRfcmFuZ2UsICAgICAgICAgICAgICAgICAgICAgLyogLWZjeC1saW1pdGVkLXJhbmdlICovCisgIE9QVF9mZF9saW5lc19hc19jb2RlLCAgICAgICAgICAgICAgICAgICAgICAvKiAtZmQtbGluZXMtYXMtY29kZSAqLworICBPUFRfZmRfbGluZXNfYXNfY29tbWVudHMsICAgICAgICAgICAgICAgICAgLyogLWZkLWxpbmVzLWFzLWNvbW1lbnRzICovCisgIE9QVF9mZGF0YV9zZWN0aW9ucywgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmRhdGEtc2VjdGlvbnMgKi8KKyAgT1BUX2ZkYmdfY250X2xpc3QsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mZGJnLWNudC1saXN0ICovCisgIE9QVF9mZGJnX2NudF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmRiZy1jbnQ9ICovCisgIE9QVF9mZGNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmRjZSAqLworICBPUFRfZmRlYnVnX3ByZWZpeF9tYXBfLCAgICAgICAgICAgICAgICAgICAgLyogLWZkZWJ1Zy1wcmVmaXgtbWFwPSAqLworICBPUFRfZmRlZHVjZV9pbml0X2xpc3QsICAgICAgICAgICAgICAgICAgICAgLyogLWZkZWR1Y2UtaW5pdC1saXN0ICovCisgIE9QVF9mZGVmYXVsdF9kb3VibGVfOCwgICAgICAgICAgICAgICAgICAgICAvKiAtZmRlZmF1bHQtZG91YmxlLTggKi8KKyAgT1BUX2ZkZWZhdWx0X2lubGluZSwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mZGVmYXVsdC1pbmxpbmUgKi8KKyAgT1BUX2ZkZWZhdWx0X2ludGVnZXJfOCwgICAgICAgICAgICAgICAgICAgIC8qIC1mZGVmYXVsdC1pbnRlZ2VyLTggKi8KKyAgT1BUX2ZkZWZhdWx0X3JlYWxfOCwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mZGVmYXVsdC1yZWFsLTggKi8KKyAgT1BUX2ZkZWZlcl9wb3AsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mZGVmZXItcG9wICovCisgIE9QVF9mZGVsYXllZF9icmFuY2gsICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmRlbGF5ZWQtYnJhbmNoICovCisgIE9QVF9mZGVsZXRlX251bGxfcG9pbnRlcl9jaGVja3MsICAgICAgICAgICAvKiAtZmRlbGV0ZS1udWxsLXBvaW50ZXItY2hlY2tzICovCisgIE9QVF9mZGlhZ25vc3RpY3Nfc2hvd19sb2NhdGlvbl8sICAgICAgICAgICAvKiAtZmRpYWdub3N0aWNzLXNob3ctbG9jYXRpb249ICovCisgIE9QVF9mZGlhZ25vc3RpY3Nfc2hvd19vcHRpb24sICAgICAgICAgICAgICAvKiAtZmRpYWdub3N0aWNzLXNob3ctb3B0aW9uICovCisgIE9QVF9mZGlyZWN0aXZlc19vbmx5LCAgICAgICAgICAgICAgICAgICAgICAvKiAtZmRpcmVjdGl2ZXMtb25seSAqLworICBPUFRfZmRpc2FibGVfYXNzZXJ0aW9ucywgICAgICAgICAgICAgICAgICAgLyogLWZkaXNhYmxlLWFzc2VydGlvbnMgKi8KKyAgT1BUX2ZkaXNhYmxlX2Fzc2VydGlvbnNfLCAgICAgICAgICAgICAgICAgIC8qIC1mZGlzYWJsZS1hc3NlcnRpb25zPSAqLworICBPUFRfZmRvbGxhcl9vaywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZkb2xsYXItb2sgKi8KKyAgT1BUX2Zkb2xsYXJzX2luX2lkZW50aWZpZXJzLCAgICAgICAgICAgICAgIC8qIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAqLworICBPUFRfZmRzZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZkc2UgKi8KKyAgT1BUX2ZkdW1wXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mZHVtcC0gKi8KKyAgT1BUX2ZkdW1wX2NvcmUsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mZHVtcC1jb3JlICovCisgIE9QVF9mZHVtcF9maW5hbF9pbnNuc18sICAgICAgICAgICAgICAgICAgICAvKiAtZmR1bXAtZmluYWwtaW5zbnM9ICovCisgIE9QVF9mZHVtcF9ub2FkZHIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmR1bXAtbm9hZGRyICovCisgIE9QVF9mZHVtcF9wYXJzZV90cmVlLCAgICAgICAgICAgICAgICAgICAgICAvKiAtZmR1bXAtcGFyc2UtdHJlZSAqLworICBPUFRfZmR1bXBfdW5udW1iZXJlZCwgICAgICAgICAgICAgICAgICAgICAgLyogLWZkdW1wLXVubnVtYmVyZWQgKi8KKyAgT1BUX2ZkdW1wX3VubnVtYmVyZWRfbGlua3MsICAgICAgICAgICAgICAgIC8qIC1mZHVtcC11bm51bWJlcmVkLWxpbmtzICovCisgIE9QVF9mZHdhcmYyX2NmaV9hc20sICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmR3YXJmMi1jZmktYXNtICovCisgIE9QVF9mZWFybHlfaW5saW5pbmcsICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmVhcmx5LWlubGluaW5nICovCisgIE9QVF9mZWxpZGVfY29uc3RydWN0b3JzLCAgICAgICAgICAgICAgICAgICAvKiAtZmVsaWRlLWNvbnN0cnVjdG9ycyAqLworICBPUFRfZmVsaW1pbmF0ZV9kd2FyZjJfZHVwcywgICAgICAgICAgICAgICAgLyogLWZlbGltaW5hdGUtZHdhcmYyLWR1cHMgKi8KKyAgT1BUX2ZlbGltaW5hdGVfdW51c2VkX2RlYnVnX3N5bWJvbHMsICAgICAgIC8qIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy1zeW1ib2xzICovCisgIE9QVF9mZWxpbWluYXRlX3VudXNlZF9kZWJ1Z190eXBlcywgICAgICAgICAvKiAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgKi8KKyAgT1BUX2ZlbWl0X2NsYXNzX2RlYnVnX2Fsd2F5cywgICAgICAgICAgICAgIC8qIC1mZW1pdC1jbGFzcy1kZWJ1Zy1hbHdheXMgKi8KKyAgT1BUX2ZlbWl0X2NsYXNzX2ZpbGUsICAgICAgICAgICAgICAgICAgICAgIC8qIC1mZW1pdC1jbGFzcy1maWxlICovCisgIE9QVF9mZW1pdF9jbGFzc19maWxlcywgICAgICAgICAgICAgICAgICAgICAvKiAtZmVtaXQtY2xhc3MtZmlsZXMgKi8KKyAgT1BUX2ZlbWl0X3N0cnVjdF9kZWJ1Z19iYXNlb25seSwgICAgICAgICAgIC8qIC1mZW1pdC1zdHJ1Y3QtZGVidWctYmFzZW9ubHkgKi8KKyAgT1BUX2ZlbWl0X3N0cnVjdF9kZWJ1Z19kZXRhaWxlZF8sICAgICAgICAgIC8qIC1mZW1pdC1zdHJ1Y3QtZGVidWctZGV0YWlsZWQ9ICovCisgIE9QVF9mZW1pdF9zdHJ1Y3RfZGVidWdfcmVkdWNlZCwgICAgICAgICAgICAvKiAtZmVtaXQtc3RydWN0LWRlYnVnLXJlZHVjZWQgKi8KKyAgT1BUX2ZlbmFibGVfYXNzZXJ0aW9ucywgICAgICAgICAgICAgICAgICAgIC8qIC1mZW5hYmxlLWFzc2VydGlvbnMgKi8KKyAgT1BUX2ZlbmFibGVfYXNzZXJ0aW9uc18sICAgICAgICAgICAgICAgICAgIC8qIC1mZW5hYmxlLWFzc2VydGlvbnM9ICovCisgIE9QVF9mZW5hYmxlX2ljZl9kZWJ1ZywgICAgICAgICAgICAgICAgICAgICAvKiAtZmVuYWJsZS1pY2YtZGVidWcgKi8KKyAgT1BUX2ZlbmNvZGluZ18sICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mZW5jb2Rpbmc9ICovCisgIE9QVF9mZW5mb3JjZV9laF9zcGVjcywgICAgICAgICAgICAgICAgICAgICAvKiAtZmVuZm9yY2UtZWgtc3BlY3MgKi8KKyAgT1BUX2ZlbnVtX2ludF9lcXVpdiwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mZW51bS1pbnQtZXF1aXYgKi8KKyAgT1BUX2ZleGNlcHRpb25zLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mZXhjZXB0aW9ucyAqLworICBPUFRfZmV4Y2Vzc19wcmVjaXNpb25fLCAgICAgICAgICAgICAgICAgICAgLyogLWZleGNlc3MtcHJlY2lzaW9uPSAqLworICBPUFRfZmV4ZWNfY2hhcnNldF8sICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZleGVjLWNoYXJzZXQ9ICovCisgIE9QVF9mZXhwZW5zaXZlX29wdGltaXphdGlvbnMsICAgICAgICAgICAgICAvKiAtZmV4cGVuc2l2ZS1vcHRpbWl6YXRpb25zICovCisgIE9QVF9mZXh0ZGlyc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmV4dGRpcnM9ICovCisgIE9QVF9mZXh0ZW5kZWRfaWRlbnRpZmllcnMsICAgICAgICAgICAgICAgICAvKiAtZmV4dGVuZGVkLWlkZW50aWZpZXJzICovCisgIE9QVF9mZXh0ZXJuYWxfYmxhcywgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmV4dGVybmFsLWJsYXMgKi8KKyAgT1BUX2ZleHRlcm5hbF90ZW1wbGF0ZXMsICAgICAgICAgICAgICAgICAgIC8qIC1mZXh0ZXJuYWwtdGVtcGxhdGVzICovCisgIE9QVF9mZjJjLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmYyYyAqLworICBPUFRfZmZhc3RfbWF0aCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZmYXN0LW1hdGggKi8KKyAgT1BUX2ZmaWxlbGlzdF9maWxlLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mZmlsZWxpc3QtZmlsZSAqLworICBPUFRfZmZpbml0ZV9tYXRoX29ubHksICAgICAgICAgICAgICAgICAgICAgLyogLWZmaW5pdGUtbWF0aC1vbmx5ICovCisgIE9QVF9mZml4ZWRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmZpeGVkLSAqLworICBPUFRfZmZpeGVkX2Zvcm0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZmaXhlZC1mb3JtICovCisgIE9QVF9mZml4ZWRfbGluZV9sZW5ndGhfLCAgICAgICAgICAgICAgICAgICAvKiAtZmZpeGVkLWxpbmUtbGVuZ3RoLSAqLworICBPUFRfZmZpeGVkX2xpbmVfbGVuZ3RoX25vbmUsICAgICAgICAgICAgICAgLyogLWZmaXhlZC1saW5lLWxlbmd0aC1ub25lICovCisgIE9QVF9mZmxvYXRfc3RvcmUsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmZsb2F0LXN0b3JlICovCisgIE9QVF9mZm9yX3Njb3BlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmZvci1zY29wZSAqLworICBPUFRfZmZvcmNlX2FkZHIsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZmb3JjZS1hZGRyICovCisgIE9QVF9mZm9yY2VfY2xhc3Nlc19hcmNoaXZlX2NoZWNrLCAgICAgICAgICAvKiAtZmZvcmNlLWNsYXNzZXMtYXJjaGl2ZS1jaGVjayAqLworICBPUFRfZmZvcndhcmRfcHJvcGFnYXRlLCAgICAgICAgICAgICAgICAgICAgLyogLWZmb3J3YXJkLXByb3BhZ2F0ZSAqLworICBPUFRfZmZwZV90cmFwXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZmcGUtdHJhcD0gKi8KKyAgT1BUX2ZmcmVlX2Zvcm0sICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mZnJlZS1mb3JtICovCisgIE9QVF9mZnJlZV9saW5lX2xlbmd0aF8sICAgICAgICAgICAgICAgICAgICAvKiAtZmZyZWUtbGluZS1sZW5ndGgtICovCisgIE9QVF9mZnJlZV9saW5lX2xlbmd0aF9ub25lLCAgICAgICAgICAgICAgICAvKiAtZmZyZWUtbGluZS1sZW5ndGgtbm9uZSAqLworICBPUFRfZmZyZWVzdGFuZGluZywgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZmcmVlc3RhbmRpbmcgKi8KKyAgT1BUX2ZmcmllbmRfaW5qZWN0aW9uLCAgICAgICAgICAgICAgICAgICAgIC8qIC1mZnJpZW5kLWluamVjdGlvbiAqLworICBPUFRfZmZ1bmN0aW9uX2NzZSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZmdW5jdGlvbi1jc2UgKi8KKyAgT1BUX2ZmdW5jdGlvbl9zZWN0aW9ucywgICAgICAgICAgICAgICAgICAgIC8qIC1mZnVuY3Rpb24tc2VjdGlvbnMgKi8KKyAgT1BUX2ZnY3NlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mZ2NzZSAqLworICBPUFRfZmdjc2VfYWZ0ZXJfcmVsb2FkLCAgICAgICAgICAgICAgICAgICAgLyogLWZnY3NlLWFmdGVyLXJlbG9hZCAqLworICBPUFRfZmdjc2VfbGFzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZnY3NlLWxhcyAqLworICBPUFRfZmdjc2VfbG0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZnY3NlLWxtICovCisgIE9QVF9mZ2NzZV9zbSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmdjc2Utc20gKi8KKyAgT1BUX2ZnbnVfa2V5d29yZHMsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mZ251LWtleXdvcmRzICovCisgIE9QVF9mZ251X3J1bnRpbWUsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmdudS1ydW50aW1lICovCisgIE9QVF9mZ251ODlfaW5saW5lLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmdudTg5LWlubGluZSAqLworICBPUFRfZmdyYXBoaXRlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZncmFwaGl0ZSAqLworICBPUFRfZmdyYXBoaXRlX2lkZW50aXR5LCAgICAgICAgICAgICAgICAgICAgLyogLWZncmFwaGl0ZS1pZGVudGl0eSAqLworICBPUFRfZmd1ZXNzX2JyYW5jaF9wcm9iYWJpbGl0eSwgICAgICAgICAgICAgLyogLWZndWVzcy1icmFuY2gtcHJvYmFiaWxpdHkgKi8KKyAgT1BUX2ZndWlkaW5nX2RlY2xzLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mZ3VpZGluZy1kZWNscyAqLworICBPUFRfZmhhbmRsZV9leGNlcHRpb25zLCAgICAgICAgICAgICAgICAgICAgLyogLWZoYW5kbGUtZXhjZXB0aW9ucyAqLworICBPUFRfZmhhc2hfc3luY2hyb25pemF0aW9uLCAgICAgICAgICAgICAgICAgLyogLWZoYXNoLXN5bmNocm9uaXphdGlvbiAqLworICBPUFRfZmhlbHAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZoZWxwICovCisgIE9QVF9maGVscF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmhlbHA9ICovCisgIE9QVF9maG9ub3Jfc3RkLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmhvbm9yLXN0ZCAqLworICBPUFRfZmhvc3RlZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZob3N0ZWQgKi8KKyAgT1BUX2ZodWdlX29iamVjdHMsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1maHVnZS1vYmplY3RzICovCisgIE9QVF9maWRlbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmlkZW50ICovCisgIE9QVF9maWZfY29udmVyc2lvbiwgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmlmLWNvbnZlcnNpb24gKi8KKyAgT1BUX2ZpZl9jb252ZXJzaW9uMiwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1maWYtY29udmVyc2lvbjIgKi8KKyAgT1BUX2ZpbXBsZW1lbnRfaW5saW5lcywgICAgICAgICAgICAgICAgICAgIC8qIC1maW1wbGVtZW50LWlubGluZXMgKi8KKyAgT1BUX2ZpbXBsaWNpdF9pbmxpbmVfdGVtcGxhdGVzLCAgICAgICAgICAgIC8qIC1maW1wbGljaXQtaW5saW5lLXRlbXBsYXRlcyAqLworICBPUFRfZmltcGxpY2l0X25vbmUsICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZpbXBsaWNpdC1ub25lICovCisgIE9QVF9maW1wbGljaXRfdGVtcGxhdGVzLCAgICAgICAgICAgICAgICAgICAvKiAtZmltcGxpY2l0LXRlbXBsYXRlcyAqLworICBPUFRfZmluZGlyZWN0X2NsYXNzZXMsICAgICAgICAgICAgICAgICAgICAgLyogLWZpbmRpcmVjdC1jbGFzc2VzICovCisgIE9QVF9maW5kaXJlY3RfZGlzcGF0Y2gsICAgICAgICAgICAgICAgICAgICAvKiAtZmluZGlyZWN0LWRpc3BhdGNoICovCisgIE9QVF9maW5kaXJlY3RfaW5saW5pbmcsICAgICAgICAgICAgICAgICAgICAvKiAtZmluZGlyZWN0LWlubGluaW5nICovCisgIE9QVF9maW5oaWJpdF9zaXplX2RpcmVjdGl2ZSwgICAgICAgICAgICAgICAvKiAtZmluaGliaXQtc2l6ZS1kaXJlY3RpdmUgKi8KKyAgT1BUX2Zpbml0X2NoYXJhY3Rlcl8sICAgICAgICAgICAgICAgICAgICAgIC8qIC1maW5pdC1jaGFyYWN0ZXI9ICovCisgIE9QVF9maW5pdF9pbnRlZ2VyXywgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmluaXQtaW50ZWdlcj0gKi8KKyAgT1BUX2Zpbml0X2xvY2FsX3plcm8sICAgICAgICAgICAgICAgICAgICAgIC8qIC1maW5pdC1sb2NhbC16ZXJvICovCisgIE9QVF9maW5pdF9sb2dpY2FsXywgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmluaXQtbG9naWNhbD0gKi8KKyAgT1BUX2Zpbml0X3JlYWxfLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1maW5pdC1yZWFsPSAqLworICBPUFRfZmlubGluZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZpbmxpbmUgKi8KKyAgT1BUX2ZpbmxpbmVfZnVuY3Rpb25zLCAgICAgICAgICAgICAgICAgICAgIC8qIC1maW5saW5lLWZ1bmN0aW9ucyAqLworICBPUFRfZmlubGluZV9mdW5jdGlvbnNfY2FsbGVkX29uY2UsICAgICAgICAgLyogLWZpbmxpbmUtZnVuY3Rpb25zLWNhbGxlZC1vbmNlICovCisgIE9QVF9maW5saW5lX2xpbWl0XywgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmlubGluZS1saW1pdC0gKi8KKyAgT1BUX2ZpbmxpbmVfbGltaXRfZXEsICAgICAgICAgICAgICAgICAgICAgIC8qIC1maW5saW5lLWxpbWl0PSAqLworICBPUFRfZmlubGluZV9zbWFsbF9mdW5jdGlvbnMsICAgICAgICAgICAgICAgLyogLWZpbmxpbmUtc21hbGwtZnVuY3Rpb25zICovCisgIE9QVF9maW5wdXRfY2hhcnNldF8sICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmlucHV0LWNoYXJzZXQ9ICovCisgIE9QVF9maW5zdHJ1bWVudF9mdW5jdGlvbnMsICAgICAgICAgICAgICAgICAvKiAtZmluc3RydW1lbnQtZnVuY3Rpb25zICovCisgIE9QVF9maW5zdHJ1bWVudF9mdW5jdGlvbnNfZXhjbHVkZV9maWxlX2xpc3RfLC8qIC1maW5zdHJ1bWVudC1mdW5jdGlvbnMtZXhjbHVkZS1maWxlLWxpc3Q9ICovCisgIE9QVF9maW5zdHJ1bWVudF9mdW5jdGlvbnNfZXhjbHVkZV9mdW5jdGlvbl9saXN0XywvKiAtZmluc3RydW1lbnQtZnVuY3Rpb25zLWV4Y2x1ZGUtZnVuY3Rpb24tbGlzdD0gKi8KKyAgT1BUX2ZpbnRyaW5zaWNfbW9kdWxlc19wYXRoLCAgICAgICAgICAgICAgIC8qIC1maW50cmluc2ljLW1vZHVsZXMtcGF0aCAqLworICBPUFRfZmlwYV9jcCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZpcGEtY3AgKi8KKyAgT1BUX2ZpcGFfY3BfY2xvbmUsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1maXBhLWNwLWNsb25lICovCisgIE9QVF9maXBhX21hdHJpeF9yZW9yZywgICAgICAgICAgICAgICAgICAgICAvKiAtZmlwYS1tYXRyaXgtcmVvcmcgKi8KKyAgT1BUX2ZpcGFfcHRhLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1maXBhLXB0YSAqLworICBPUFRfZmlwYV9wdXJlX2NvbnN0LCAgICAgICAgICAgICAgICAgICAgICAgLyogLWZpcGEtcHVyZS1jb25zdCAqLworICBPUFRfZmlwYV9yZWZlcmVuY2UsICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZpcGEtcmVmZXJlbmNlICovCisgIE9QVF9maXBhX3NyYSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmlwYS1zcmEgKi8KKyAgT1BUX2ZpcGFfc3RydWN0X3Jlb3JnLCAgICAgICAgICAgICAgICAgICAgIC8qIC1maXBhLXN0cnVjdC1yZW9yZyAqLworICBPUFRfZmlwYV90eXBlX2VzY2FwZSwgICAgICAgICAgICAgICAgICAgICAgLyogLWZpcGEtdHlwZS1lc2NhcGUgKi8KKyAgT1BUX2ZpcmFfYWxnb3JpdGhtXywgICAgICAgICAgICAgICAgICAgICAgIC8qIC1maXJhLWFsZ29yaXRobT0gKi8KKyAgT1BUX2ZpcmFfY29hbGVzY2UsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1maXJhLWNvYWxlc2NlICovCisgIE9QVF9maXJhX2xvb3BfcHJlc3N1cmUsICAgICAgICAgICAgICAgICAgICAvKiAtZmlyYS1sb29wLXByZXNzdXJlICovCisgIE9QVF9maXJhX3JlZ2lvbl8sICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmlyYS1yZWdpb249ICovCisgIE9QVF9maXJhX3NoYXJlX3NhdmVfc2xvdHMsICAgICAgICAgICAgICAgICAvKiAtZmlyYS1zaGFyZS1zYXZlLXNsb3RzICovCisgIE9QVF9maXJhX3NoYXJlX3NwaWxsX3Nsb3RzLCAgICAgICAgICAgICAgICAvKiAtZmlyYS1zaGFyZS1zcGlsbC1zbG90cyAqLworICBPUFRfZmlyYV92ZXJib3NlXywgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZpcmEtdmVyYm9zZT0gKi8KKyAgT1BUX2Zpdm9wdHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1maXZvcHRzICovCisgIE9QVF9mam5pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmpuaSAqLworICBPUFRfZmp1bXBfdGFibGVzLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZqdW1wLXRhYmxlcyAqLworICBPUFRfZmtlZXBfaW5saW5lX2Z1bmN0aW9ucywgICAgICAgICAgICAgICAgLyogLWZrZWVwLWlubGluZS1mdW5jdGlvbnMgKi8KKyAgT1BUX2ZrZWVwX3N0YXRpY19jb25zdHMsICAgICAgICAgICAgICAgICAgIC8qIC1ma2VlcC1zdGF0aWMtY29uc3RzICovCisgIE9QVF9mbGFiZWxzX29rLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmxhYmVscy1vayAqLworICBPUFRfZmxheF92ZWN0b3JfY29udmVyc2lvbnMsICAgICAgICAgICAgICAgLyogLWZsYXgtdmVjdG9yLWNvbnZlcnNpb25zICovCisgIE9QVF9mbGVhZGluZ191bmRlcnNjb3JlLCAgICAgICAgICAgICAgICAgICAvKiAtZmxlYWRpbmctdW5kZXJzY29yZSAqLworICBPUFRfZmxvb3BfYmxvY2ssICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZsb29wLWJsb2NrICovCisgIE9QVF9mbG9vcF9pbnRlcmNoYW5nZSwgICAgICAgICAgICAgICAgICAgICAvKiAtZmxvb3AtaW50ZXJjaGFuZ2UgKi8KKyAgT1BUX2Zsb29wX29wdGltaXplLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mbG9vcC1vcHRpbWl6ZSAqLworICBPUFRfZmxvb3BfcGFyYWxsZWxpemVfYWxsLCAgICAgICAgICAgICAgICAgLyogLWZsb29wLXBhcmFsbGVsaXplLWFsbCAqLworICBPUFRfZmxvb3Bfc3RyaXBfbWluZSwgICAgICAgICAgICAgICAgICAgICAgLyogLWZsb29wLXN0cmlwLW1pbmUgKi8KKyAgT1BUX2ZsdG8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mbHRvICovCisgIE9QVF9mbHRvX2NvbXByZXNzaW9uX2xldmVsXywgICAgICAgICAgICAgICAvKiAtZmx0by1jb21wcmVzc2lvbi1sZXZlbD0gKi8KKyAgT1BUX2ZsdG9fcmVwb3J0LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mbHRvLXJlcG9ydCAqLworICBPUFRfZmx0cmFucywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZsdHJhbnMgKi8KKyAgT1BUX2ZsdHJhbnNfb3V0cHV0X2xpc3RfLCAgICAgICAgICAgICAgICAgIC8qIC1mbHRyYW5zLW91dHB1dC1saXN0PSAqLworICBPUFRfZm1hdGhfZXJybm8sICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZtYXRoLWVycm5vICovCisgIE9QVF9mbWF4X2FycmF5X2NvbnN0cnVjdG9yXywgICAgICAgICAgICAgICAvKiAtZm1heC1hcnJheS1jb25zdHJ1Y3Rvcj0gKi8KKyAgT1BUX2ZtYXhfZXJyb3JzXywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mbWF4LWVycm9ycz0gKi8KKyAgT1BUX2ZtYXhfaWRlbnRpZmllcl9sZW5ndGhfLCAgICAgICAgICAgICAgIC8qIC1mbWF4LWlkZW50aWZpZXItbGVuZ3RoPSAqLworICBPUFRfZm1heF9zdGFja192YXJfc2l6ZV8sICAgICAgICAgICAgICAgICAgLyogLWZtYXgtc3RhY2stdmFyLXNpemU9ICovCisgIE9QVF9mbWF4X3N1YnJlY29yZF9sZW5ndGhfLCAgICAgICAgICAgICAgICAvKiAtZm1heC1zdWJyZWNvcmQtbGVuZ3RoPSAqLworICBPUFRfZm1lbV9yZXBvcnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZtZW0tcmVwb3J0ICovCisgIE9QVF9mbWVyZ2VfYWxsX2NvbnN0YW50cywgICAgICAgICAgICAgICAgICAvKiAtZm1lcmdlLWFsbC1jb25zdGFudHMgKi8KKyAgT1BUX2ZtZXJnZV9jb25zdGFudHMsICAgICAgICAgICAgICAgICAgICAgIC8qIC1mbWVyZ2UtY29uc3RhbnRzICovCisgIE9QVF9mbWVyZ2VfZGVidWdfc3RyaW5ncywgICAgICAgICAgICAgICAgICAvKiAtZm1lcmdlLWRlYnVnLXN0cmluZ3MgKi8KKyAgT1BUX2ZtZXNzYWdlX2xlbmd0aF8sICAgICAgICAgICAgICAgICAgICAgIC8qIC1mbWVzc2FnZS1sZW5ndGg9ICovCisgIE9QVF9mbW9kdWxlX3ByaXZhdGUsICAgICAgICAgICAgICAgICAgICAgICAvKiAtZm1vZHVsZS1wcml2YXRlICovCisgIE9QVF9mbW9kdWxvX3NjaGVkLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZm1vZHVsby1zY2hlZCAqLworICBPUFRfZm1vZHVsb19zY2hlZF9hbGxvd19yZWdtb3ZlcywgICAgICAgICAgLyogLWZtb2R1bG8tc2NoZWQtYWxsb3ctcmVnbW92ZXMgKi8KKyAgT1BUX2Ztb3ZlX2xvb3BfaW52YXJpYW50cywgICAgICAgICAgICAgICAgIC8qIC1mbW92ZS1sb29wLWludmFyaWFudHMgKi8KKyAgT1BUX2Ztc19leHRlbnNpb25zLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mbXMtZXh0ZW5zaW9ucyAqLworICBPUFRfZm11ZGZsYXAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZtdWRmbGFwICovCisgIE9QVF9mbXVkZmxhcGlyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZm11ZGZsYXBpciAqLworICBPUFRfZm11ZGZsYXB0aCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZtdWRmbGFwdGggKi8KKyAgT1BUX2ZuYW1lX21hbmdsaW5nX3ZlcnNpb25fLCAgICAgICAgICAgICAgIC8qIC1mbmFtZS1tYW5nbGluZy12ZXJzaW9uLSAqLworICBPUFRfZm5ld19hYmksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZuZXctYWJpICovCisgIE9QVF9mbmV4dF9ydW50aW1lLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZm5leHQtcnVudGltZSAqLworICBPUFRfZm5pbF9yZWNlaXZlcnMsICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZuaWwtcmVjZWl2ZXJzICovCisgIE9QVF9mbm9uX2NhbGxfZXhjZXB0aW9ucywgICAgICAgICAgICAgICAgICAvKiAtZm5vbi1jYWxsLWV4Y2VwdGlvbnMgKi8KKyAgT1BUX2Zub25hbnNpX2J1aWx0aW5zLCAgICAgICAgICAgICAgICAgICAgIC8qIC1mbm9uYW5zaS1idWlsdGlucyAqLworICBPUFRfZm5vbm51bGxfb2JqZWN0cywgICAgICAgICAgICAgICAgICAgICAgLyogLWZub25udWxsLW9iamVjdHMgKi8KKyAgT1BUX2ZvYmpjX2NhbGxfY3h4X2NkdG9ycywgICAgICAgICAgICAgICAgIC8qIC1mb2JqYy1jYWxsLWN4eC1jZHRvcnMgKi8KKyAgT1BUX2ZvYmpjX2RpcmVjdF9kaXNwYXRjaCwgICAgICAgICAgICAgICAgIC8qIC1mb2JqYy1kaXJlY3QtZGlzcGF0Y2ggKi8KKyAgT1BUX2ZvYmpjX2V4Y2VwdGlvbnMsICAgICAgICAgICAgICAgICAgICAgIC8qIC1mb2JqYy1leGNlcHRpb25zICovCisgIE9QVF9mb2JqY19nYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZm9iamMtZ2MgKi8KKyAgT1BUX2ZvYmpjX3NqbGpfZXhjZXB0aW9ucywgICAgICAgICAgICAgICAgIC8qIC1mb2JqYy1zamxqLWV4Y2VwdGlvbnMgKi8KKyAgT1BUX2ZvbWl0X2ZyYW1lX3BvaW50ZXIsICAgICAgICAgICAgICAgICAgIC8qIC1mb21pdC1mcmFtZS1wb2ludGVyICovCisgIE9QVF9mb3Blbm1wLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZm9wZW5tcCAqLworICBPUFRfZm9wZXJhdG9yX25hbWVzLCAgICAgICAgICAgICAgICAgICAgICAgLyogLWZvcGVyYXRvci1uYW1lcyAqLworICBPUFRfZm9wdGltaXplX3JlZ2lzdGVyX21vdmUsICAgICAgICAgICAgICAgLyogLWZvcHRpbWl6ZS1yZWdpc3Rlci1tb3ZlICovCisgIE9QVF9mb3B0aW1pemVfc2libGluZ19jYWxscywgICAgICAgICAgICAgICAvKiAtZm9wdGltaXplLXNpYmxpbmctY2FsbHMgKi8KKyAgT1BUX2ZvcHRpbWl6ZV9zdGF0aWNfY2xhc3NfaW5pdGlhbGl6YXRpb24sIC8qIC1mb3B0aW1pemUtc3RhdGljLWNsYXNzLWluaXRpYWxpemF0aW9uICovCisgIE9QVF9mb3B0aW9uYWxfZGlhZ3MsICAgICAgICAgICAgICAgICAgICAgICAvKiAtZm9wdGlvbmFsLWRpYWdzICovCisgIE9QVF9mb3V0cHV0X2NsYXNzX2Rpcl8sICAgICAgICAgICAgICAgICAgICAvKiAtZm91dHB1dC1jbGFzcy1kaXI9ICovCisgIE9QVF9mcGFja19kZXJpdmVkLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnBhY2stZGVyaXZlZCAqLworICBPUFRfZnBhY2tfc3RydWN0LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZwYWNrLXN0cnVjdCAqLworICBPUFRfZnBhY2tfc3RydWN0XywgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZwYWNrLXN0cnVjdD0gKi8KKyAgT1BUX2ZwY2Nfc3RydWN0X3JldHVybiwgICAgICAgICAgICAgICAgICAgIC8qIC1mcGNjLXN0cnVjdC1yZXR1cm4gKi8KKyAgT1BUX2ZwY2hfZGVwcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mcGNoLWRlcHMgKi8KKyAgT1BUX2ZwY2hfcHJlcHJvY2VzcywgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mcGNoLXByZXByb2Nlc3MgKi8KKyAgT1BUX2ZwZWVsX2xvb3BzLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mcGVlbC1sb29wcyAqLworICBPUFRfZnBlZXBob2xlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZwZWVwaG9sZSAqLworICBPUFRfZnBlZXBob2xlMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZwZWVwaG9sZTIgKi8KKyAgT1BUX2ZwZXJtaXNzaXZlLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mcGVybWlzc2l2ZSAqLworICBPUFRfZnBpYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZwaWMgKi8KKyAgT1BUX2ZwaWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mcGllICovCisgIE9QVF9mcGx1Z2luX2FyZ18sICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnBsdWdpbi1hcmctICovCisgIE9QVF9mcGx1Z2luXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnBsdWdpbj0gKi8KKyAgT1BUX2Zwb3N0X2lwYV9tZW1fcmVwb3J0LCAgICAgICAgICAgICAgICAgIC8qIC1mcG9zdC1pcGEtbWVtLXJlcG9ydCAqLworICBPUFRfZnByZV9pcGFfbWVtX3JlcG9ydCwgICAgICAgICAgICAgICAgICAgLyogLWZwcmUtaXBhLW1lbS1yZXBvcnQgKi8KKyAgT1BUX2ZwcmVkaWN0aXZlX2NvbW1vbmluZywgICAgICAgICAgICAgICAgIC8qIC1mcHJlZGljdGl2ZS1jb21tb25pbmcgKi8KKyAgT1BUX2ZwcmVmZXRjaF9sb29wX2FycmF5cywgICAgICAgICAgICAgICAgIC8qIC1mcHJlZmV0Y2gtbG9vcC1hcnJheXMgKi8KKyAgT1BUX2ZwcmVwcm9jZXNzZWQsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mcHJlcHJvY2Vzc2VkICovCisgIE9QVF9mcHJldHR5X3RlbXBsYXRlcywgICAgICAgICAgICAgICAgICAgICAvKiAtZnByZXR0eS10ZW1wbGF0ZXMgKi8KKyAgT1BUX2Zwcm9maWxlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mcHJvZmlsZSAqLworICBPUFRfZnByb2ZpbGVfYXJjcywgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZwcm9maWxlLWFyY3MgKi8KKyAgT1BUX2Zwcm9maWxlX2NvcnJlY3Rpb24sICAgICAgICAgICAgICAgICAgIC8qIC1mcHJvZmlsZS1jb3JyZWN0aW9uICovCisgIE9QVF9mcHJvZmlsZV9kaXJfLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnByb2ZpbGUtZGlyPSAqLworICBPUFRfZnByb2ZpbGVfZ2VuZXJhdGUsICAgICAgICAgICAgICAgICAgICAgLyogLWZwcm9maWxlLWdlbmVyYXRlICovCisgIE9QVF9mcHJvZmlsZV9nZW5lcmF0ZV8sICAgICAgICAgICAgICAgICAgICAvKiAtZnByb2ZpbGUtZ2VuZXJhdGU9ICovCisgIE9QVF9mcHJvZmlsZV91c2UsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnByb2ZpbGUtdXNlICovCisgIE9QVF9mcHJvZmlsZV91c2VfLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnByb2ZpbGUtdXNlPSAqLworICBPUFRfZnByb2ZpbGVfdmFsdWVzLCAgICAgICAgICAgICAgICAgICAgICAgLyogLWZwcm9maWxlLXZhbHVlcyAqLworICBPUFRfZnByb3RlY3RfcGFyZW5zLCAgICAgICAgICAgICAgICAgICAgICAgLyogLWZwcm90ZWN0LXBhcmVucyAqLworICBPUFRfZnJhbmRvbV9zZWVkLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZyYW5kb20tc2VlZCAqLworICBPUFRfZnJhbmRvbV9zZWVkXywgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZyYW5kb20tc2VlZD0gKi8KKyAgT1BUX2ZyYW5nZV9jaGVjaywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mcmFuZ2UtY2hlY2sgKi8KKyAgT1BUX2ZyZWNpcHJvY2FsX21hdGgsICAgICAgICAgICAgICAgICAgICAgIC8qIC1mcmVjaXByb2NhbC1tYXRoICovCisgIE9QVF9mcmVjb3JkX2djY19zd2l0Y2hlcywgICAgICAgICAgICAgICAgICAvKiAtZnJlY29yZC1nY2Mtc3dpdGNoZXMgKi8KKyAgT1BUX2ZyZWNvcmRfbWFya2VyXzQsICAgICAgICAgICAgICAgICAgICAgIC8qIC1mcmVjb3JkLW1hcmtlcj00ICovCisgIE9QVF9mcmVjb3JkX21hcmtlcl84LCAgICAgICAgICAgICAgICAgICAgICAvKiAtZnJlY29yZC1tYXJrZXI9OCAqLworICBPUFRfZnJlY3Vyc2l2ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZyZWN1cnNpdmUgKi8KKyAgT1BUX2ZyZWR1Y2VkX3JlZmxlY3Rpb24sICAgICAgICAgICAgICAgICAgIC8qIC1mcmVkdWNlZC1yZWZsZWN0aW9uICovCisgIE9QVF9mcmVnX3N0cnVjdF9yZXR1cm4sICAgICAgICAgICAgICAgICAgICAvKiAtZnJlZy1zdHJ1Y3QtcmV0dXJuICovCisgIE9QVF9mcmVnbW92ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnJlZ21vdmUgKi8KKyAgT1BUX2ZyZW5hbWVfcmVnaXN0ZXJzLCAgICAgICAgICAgICAgICAgICAgIC8qIC1mcmVuYW1lLXJlZ2lzdGVycyAqLworICBPUFRfZnJlb3JkZXJfYmxvY2tzLCAgICAgICAgICAgICAgICAgICAgICAgLyogLWZyZW9yZGVyLWJsb2NrcyAqLworICBPUFRfZnJlb3JkZXJfYmxvY2tzX2FuZF9wYXJ0aXRpb24sICAgICAgICAgLyogLWZyZW9yZGVyLWJsb2Nrcy1hbmQtcGFydGl0aW9uICovCisgIE9QVF9mcmVvcmRlcl9mdW5jdGlvbnMsICAgICAgICAgICAgICAgICAgICAvKiAtZnJlb3JkZXItZnVuY3Rpb25zICovCisgIE9QVF9mcmVwYWNrX2FycmF5cywgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnJlcGFjay1hcnJheXMgKi8KKyAgT1BUX2ZyZXBsYWNlX29iamNfY2xhc3NlcywgICAgICAgICAgICAgICAgIC8qIC1mcmVwbGFjZS1vYmpjLWNsYXNzZXMgKi8KKyAgT1BUX2ZyZXBvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mcmVwbyAqLworICBPUFRfZnJlcnVuX2NzZV9hZnRlcl9sb29wLCAgICAgICAgICAgICAgICAgLyogLWZyZXJ1bi1jc2UtYWZ0ZXItbG9vcCAqLworICBPUFRfZnJlcnVuX2xvb3Bfb3B0LCAgICAgICAgICAgICAgICAgICAgICAgLyogLWZyZXJ1bi1sb29wLW9wdCAqLworICBPUFRfZnJlc2NoZWR1bGVfbW9kdWxvX3NjaGVkdWxlZF9sb29wcywgICAgLyogLWZyZXNjaGVkdWxlLW1vZHVsby1zY2hlZHVsZWQtbG9vcHMgKi8KKyAgT1BUX2ZyZXNvbHV0aW9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mcmVzb2x1dGlvbiAqLworICBPUFRfZnJvdW5kaW5nX21hdGgsICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZyb3VuZGluZy1tYXRoICovCisgIE9QVF9mcnR0aSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnJ0dGkgKi8KKyAgT1BUX2ZzYXdfamF2YV9maWxlLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mc2F3LWphdmEtZmlsZSAqLworICBPUFRfZnNjaGVkX2NyaXRpY2FsX3BhdGhfaGV1cmlzdGljLCAgICAgICAgLyogLWZzY2hlZC1jcml0aWNhbC1wYXRoLWhldXJpc3RpYyAqLworICBPUFRfZnNjaGVkX2RlcF9jb3VudF9oZXVyaXN0aWMsICAgICAgICAgICAgLyogLWZzY2hlZC1kZXAtY291bnQtaGV1cmlzdGljICovCisgIE9QVF9mc2NoZWRfZ3JvdXBfaGV1cmlzdGljLCAgICAgICAgICAgICAgICAvKiAtZnNjaGVkLWdyb3VwLWhldXJpc3RpYyAqLworICBPUFRfZnNjaGVkX2ludGVyYmxvY2ssICAgICAgICAgICAgICAgICAgICAgLyogLWZzY2hlZC1pbnRlcmJsb2NrICovCisgIE9QVF9mc2NoZWRfbGFzdF9pbnNuX2hldXJpc3RpYywgICAgICAgICAgICAvKiAtZnNjaGVkLWxhc3QtaW5zbi1oZXVyaXN0aWMgKi8KKyAgT1BUX2ZzY2hlZF9wcmVzc3VyZSwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mc2NoZWQtcHJlc3N1cmUgKi8KKyAgT1BUX2ZzY2hlZF9yYW5rX2hldXJpc3RpYywgICAgICAgICAgICAgICAgIC8qIC1mc2NoZWQtcmFuay1oZXVyaXN0aWMgKi8KKyAgT1BUX2ZzY2hlZF9zcGVjLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mc2NoZWQtc3BlYyAqLworICBPUFRfZnNjaGVkX3NwZWNfaW5zbl9oZXVyaXN0aWMsICAgICAgICAgICAgLyogLWZzY2hlZC1zcGVjLWluc24taGV1cmlzdGljICovCisgIE9QVF9mc2NoZWRfc3BlY19sb2FkLCAgICAgICAgICAgICAgICAgICAgICAvKiAtZnNjaGVkLXNwZWMtbG9hZCAqLworICBPUFRfZnNjaGVkX3NwZWNfbG9hZF9kYW5nZXJvdXMsICAgICAgICAgICAgLyogLWZzY2hlZC1zcGVjLWxvYWQtZGFuZ2Vyb3VzICovCisgIE9QVF9mc2NoZWRfc3RhbGxlZF9pbnNucywgICAgICAgICAgICAgICAgICAvKiAtZnNjaGVkLXN0YWxsZWQtaW5zbnMgKi8KKyAgT1BUX2ZzY2hlZF9zdGFsbGVkX2luc25zX2RlcCwgICAgICAgICAgICAgIC8qIC1mc2NoZWQtc3RhbGxlZC1pbnNucy1kZXAgKi8KKyAgT1BUX2ZzY2hlZF9zdGFsbGVkX2luc25zX2RlcF8sICAgICAgICAgICAgIC8qIC1mc2NoZWQtc3RhbGxlZC1pbnNucy1kZXA9ICovCisgIE9QVF9mc2NoZWRfc3RhbGxlZF9pbnNuc18sICAgICAgICAgICAgICAgICAvKiAtZnNjaGVkLXN0YWxsZWQtaW5zbnM9ICovCisgIE9QVF9mc2NoZWRfdmVyYm9zZV8sICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnNjaGVkLXZlcmJvc2U9ICovCisgIE9QVF9mc2NoZWQyX3VzZV9zdXBlcmJsb2NrcywgICAgICAgICAgICAgICAvKiAtZnNjaGVkMi11c2Utc3VwZXJibG9ja3MgKi8KKyAgT1BUX2ZzY2hlZDJfdXNlX3RyYWNlcywgICAgICAgICAgICAgICAgICAgIC8qIC1mc2NoZWQyLXVzZS10cmFjZXMgKi8KKyAgT1BUX2ZzY2hlZHVsZV9pbnNucywgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mc2NoZWR1bGUtaW5zbnMgKi8KKyAgT1BUX2ZzY2hlZHVsZV9pbnNuczIsICAgICAgICAgICAgICAgICAgICAgIC8qIC1mc2NoZWR1bGUtaW5zbnMyICovCisgIE9QVF9mc2Vjb25kX3VuZGVyc2NvcmUsICAgICAgICAgICAgICAgICAgICAvKiAtZnNlY29uZC11bmRlcnNjb3JlICovCisgIE9QVF9mc2VjdGlvbl9hbmNob3JzLCAgICAgICAgICAgICAgICAgICAgICAvKiAtZnNlY3Rpb24tYW5jaG9ycyAqLworICBPUFRfZnNlZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZzZWUgKi8KKyAgT1BUX2ZzZWxfc2NoZWRfcGlwZWxpbmluZywgICAgICAgICAgICAgICAgIC8qIC1mc2VsLXNjaGVkLXBpcGVsaW5pbmcgKi8KKyAgT1BUX2ZzZWxfc2NoZWRfcGlwZWxpbmluZ19vdXRlcl9sb29wcywgICAgIC8qIC1mc2VsLXNjaGVkLXBpcGVsaW5pbmctb3V0ZXItbG9vcHMgKi8KKyAgT1BUX2ZzZWxfc2NoZWRfcmVzY2hlZHVsZV9waXBlbGluZWQsICAgICAgIC8qIC1mc2VsLXNjaGVkLXJlc2NoZWR1bGUtcGlwZWxpbmVkICovCisgIE9QVF9mc2VsZWN0aXZlX3NjaGVkdWxpbmcsICAgICAgICAgICAgICAgICAvKiAtZnNlbGVjdGl2ZS1zY2hlZHVsaW5nICovCisgIE9QVF9mc2VsZWN0aXZlX3NjaGVkdWxpbmcyLCAgICAgICAgICAgICAgICAvKiAtZnNlbGVjdGl2ZS1zY2hlZHVsaW5nMiAqLworICBPUFRfZnNob3J0X2RvdWJsZSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZzaG9ydC1kb3VibGUgKi8KKyAgT1BUX2ZzaG9ydF9lbnVtcywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mc2hvcnQtZW51bXMgKi8KKyAgT1BUX2ZzaG9ydF93Y2hhciwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mc2hvcnQtd2NoYXIgKi8KKyAgT1BUX2ZzaG93X2NvbHVtbiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mc2hvdy1jb2x1bW4gKi8KKyAgT1BUX2ZzaWduX3plcm8sICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mc2lnbi16ZXJvICovCisgIE9QVF9mc2lnbmFsaW5nX25hbnMsICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnNpZ25hbGluZy1uYW5zICovCisgIE9QVF9mc2lnbmVkX2JpdGZpZWxkcywgICAgICAgICAgICAgICAgICAgICAvKiAtZnNpZ25lZC1iaXRmaWVsZHMgKi8KKyAgT1BUX2ZzaWduZWRfY2hhciwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mc2lnbmVkLWNoYXIgKi8KKyAgT1BUX2ZzaWduZWRfemVyb3MsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mc2lnbmVkLXplcm9zICovCisgIE9QVF9mc2luZ2xlX3ByZWNpc2lvbl9jb25zdGFudCwgICAgICAgICAgICAvKiAtZnNpbmdsZS1wcmVjaXNpb24tY29uc3RhbnQgKi8KKyAgT1BUX2Zzb3VyY2VfZmlsZW5hbWVfLCAgICAgICAgICAgICAgICAgICAgIC8qIC1mc291cmNlLWZpbGVuYW1lPSAqLworICBPUFRfZnNvdXJjZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZzb3VyY2U9ICovCisgIE9QVF9mc3BsaXRfaXZzX2luX3Vucm9sbGVyLCAgICAgICAgICAgICAgICAvKiAtZnNwbGl0LWl2cy1pbi11bnJvbGxlciAqLworICBPUFRfZnNwbGl0X3dpZGVfdHlwZXMsICAgICAgICAgICAgICAgICAgICAgLyogLWZzcGxpdC13aWRlLXR5cGVzICovCisgIE9QVF9mc3F1YW5nbGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnNxdWFuZ2xlICovCisgIE9QVF9mc3RhY2tfY2hlY2ssICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnN0YWNrLWNoZWNrICovCisgIE9QVF9mc3RhY2tfY2hlY2tfLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnN0YWNrLWNoZWNrPSAqLworICBPUFRfZnN0YWNrX2xpbWl0LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZzdGFjay1saW1pdCAqLworICBPUFRfZnN0YWNrX2xpbWl0X3JlZ2lzdGVyXywgICAgICAgICAgICAgICAgLyogLWZzdGFjay1saW1pdC1yZWdpc3Rlcj0gKi8KKyAgT1BUX2ZzdGFja19saW1pdF9zeW1ib2xfLCAgICAgICAgICAgICAgICAgIC8qIC1mc3RhY2stbGltaXQtc3ltYm9sPSAqLworICBPUFRfZnN0YWNrX3Byb3RlY3RvciwgICAgICAgICAgICAgICAgICAgICAgLyogLWZzdGFjay1wcm90ZWN0b3IgKi8KKyAgT1BUX2ZzdGFja19wcm90ZWN0b3JfYWxsLCAgICAgICAgICAgICAgICAgIC8qIC1mc3RhY2stcHJvdGVjdG9yLWFsbCAqLworICBPUFRfZnN0YXRzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZzdGF0cyAqLworICBPUFRfZnN0b3JlX2NoZWNrLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZzdG9yZS1jaGVjayAqLworICBPUFRfZnN0cmVuZ3RoX3JlZHVjZSwgICAgICAgICAgICAgICAgICAgICAgLyogLWZzdHJlbmd0aC1yZWR1Y2UgKi8KKyAgT1BUX2ZzdHJpY3RfYWxpYXNpbmcsICAgICAgICAgICAgICAgICAgICAgIC8qIC1mc3RyaWN0LWFsaWFzaW5nICovCisgIE9QVF9mc3RyaWN0X292ZXJmbG93LCAgICAgICAgICAgICAgICAgICAgICAvKiAtZnN0cmljdC1vdmVyZmxvdyAqLworICBPUFRfZnN0cmljdF9wcm90b3R5cGUsICAgICAgICAgICAgICAgICAgICAgLyogLWZzdHJpY3QtcHJvdG90eXBlICovCisgIE9QVF9mc3ludGF4X29ubHksICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnN5bnRheC1vbmx5ICovCisgIE9QVF9mdGFic3RvcF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnRhYnN0b3A9ICovCisgIE9QVF9mdGFyZ2V0X2hlbHAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnRhcmdldC1oZWxwICovCisgIE9QVF9mdGFyZ2V0XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnRhcmdldD0gKi8KKyAgT1BUX2Z0ZW1wbGF0ZV9kZXB0aF8sICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdGVtcGxhdGUtZGVwdGgtICovCisgIE9QVF9mdGVtcGxhdGVfZGVwdGhfZXEsICAgICAgICAgICAgICAgICAgICAvKiAtZnRlbXBsYXRlLWRlcHRoPSAqLworICBPUFRfZnRlc3RfY292ZXJhZ2UsICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZ0ZXN0LWNvdmVyYWdlICovCisgIE9QVF9mdGhpc19pc192YXJpYWJsZSwgICAgICAgICAgICAgICAgICAgICAvKiAtZnRoaXMtaXMtdmFyaWFibGUgKi8KKyAgT1BUX2Z0aHJlYWRfanVtcHMsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdGhyZWFkLWp1bXBzICovCisgIE9QVF9mdGhyZWFkc2FmZV9zdGF0aWNzLCAgICAgICAgICAgICAgICAgICAvKiAtZnRocmVhZHNhZmUtc3RhdGljcyAqLworICBPUFRfZnRpbWVfcmVwb3J0LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZ0aW1lLXJlcG9ydCAqLworICBPUFRfZnRsc19tb2RlbF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZ0bHMtbW9kZWw9ICovCisgIE9QVF9mdG9wbGV2ZWxfcmVvcmRlciwgICAgICAgICAgICAgICAgICAgICAvKiAtZnRvcGxldmVsLXJlb3JkZXIgKi8KKyAgT1BUX2Z0cmFjZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdHJhY2VyICovCisgIE9QVF9mdHJhcHBpbmdfbWF0aCwgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnRyYXBwaW5nLW1hdGggKi8KKyAgT1BUX2Z0cmFwdiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdHJhcHYgKi8KKyAgT1BUX2Z0cmVlX2J1aWx0aW5fY2FsbF9kY2UsICAgICAgICAgICAgICAgIC8qIC1mdHJlZS1idWlsdGluLWNhbGwtZGNlICovCisgIE9QVF9mdHJlZV9jY3AsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnRyZWUtY2NwICovCisgIE9QVF9mdHJlZV9jaCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnRyZWUtY2ggKi8KKyAgT1BUX2Z0cmVlX2NvcHlfcHJvcCwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdHJlZS1jb3B5LXByb3AgKi8KKyAgT1BUX2Z0cmVlX2NvcHlyZW5hbWUsICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdHJlZS1jb3B5cmVuYW1lICovCisgIE9QVF9mdHJlZV9jc2VsaW0sICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnRyZWUtY3NlbGltICovCisgIE9QVF9mdHJlZV9kY2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnRyZWUtZGNlICovCisgIE9QVF9mdHJlZV9kb21pbmF0b3Jfb3B0cywgICAgICAgICAgICAgICAgICAvKiAtZnRyZWUtZG9taW5hdG9yLW9wdHMgKi8KKyAgT1BUX2Z0cmVlX2RzZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdHJlZS1kc2UgKi8KKyAgT1BUX2Z0cmVlX2Zvcndwcm9wLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdHJlZS1mb3J3cHJvcCAqLworICBPUFRfZnRyZWVfZnJlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZ0cmVlLWZyZSAqLworICBPUFRfZnRyZWVfbG9vcF9kaXN0cmlidXRpb24sICAgICAgICAgICAgICAgLyogLWZ0cmVlLWxvb3AtZGlzdHJpYnV0aW9uICovCisgIE9QVF9mdHJlZV9sb29wX2ltLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnRyZWUtbG9vcC1pbSAqLworICBPUFRfZnRyZWVfbG9vcF9pdmNhbm9uLCAgICAgICAgICAgICAgICAgICAgLyogLWZ0cmVlLWxvb3AtaXZjYW5vbiAqLworICBPUFRfZnRyZWVfbG9vcF9saW5lYXIsICAgICAgICAgICAgICAgICAgICAgLyogLWZ0cmVlLWxvb3AtbGluZWFyICovCisgIE9QVF9mdHJlZV9sb29wX29wdGltaXplLCAgICAgICAgICAgICAgICAgICAvKiAtZnRyZWUtbG9vcC1vcHRpbWl6ZSAqLworICBPUFRfZnRyZWVfbHJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZ0cmVlLWxycyAqLworICBPUFRfZnRyZWVfcGFyYWxsZWxpemVfbG9vcHNfLCAgICAgICAgICAgICAgLyogLWZ0cmVlLXBhcmFsbGVsaXplLWxvb3BzPSAqLworICBPUFRfZnRyZWVfcGhpcHJvcCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZ0cmVlLXBoaXByb3AgKi8KKyAgT1BUX2Z0cmVlX3ByZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdHJlZS1wcmUgKi8KKyAgT1BUX2Z0cmVlX3B0YSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdHJlZS1wdGEgKi8KKyAgT1BUX2Z0cmVlX3JlYXNzb2MsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdHJlZS1yZWFzc29jICovCisgIE9QVF9mdHJlZV9zYWxpYXMsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnRyZWUtc2FsaWFzICovCisgIE9QVF9mdHJlZV9zY2V2X2Nwcm9wLCAgICAgICAgICAgICAgICAgICAgICAvKiAtZnRyZWUtc2Nldi1jcHJvcCAqLworICBPUFRfZnRyZWVfc2luaywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZ0cmVlLXNpbmsgKi8KKyAgT1BUX2Z0cmVlX3NscF92ZWN0b3JpemUsICAgICAgICAgICAgICAgICAgIC8qIC1mdHJlZS1zbHAtdmVjdG9yaXplICovCisgIE9QVF9mdHJlZV9zcmEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnRyZWUtc3JhICovCisgIE9QVF9mdHJlZV9zdG9yZV9jY3AsICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnRyZWUtc3RvcmUtY2NwICovCisgIE9QVF9mdHJlZV9zdG9yZV9jb3B5X3Byb3AsICAgICAgICAgICAgICAgICAvKiAtZnRyZWUtc3RvcmUtY29weS1wcm9wICovCisgIE9QVF9mdHJlZV9zd2l0Y2hfY29udmVyc2lvbiwgICAgICAgICAgICAgICAvKiAtZnRyZWUtc3dpdGNoLWNvbnZlcnNpb24gKi8KKyAgT1BUX2Z0cmVlX3RlciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdHJlZS10ZXIgKi8KKyAgT1BUX2Z0cmVlX3ZlY3RfbG9vcF92ZXJzaW9uLCAgICAgICAgICAgICAgIC8qIC1mdHJlZS12ZWN0LWxvb3AtdmVyc2lvbiAqLworICBPUFRfZnRyZWVfdmVjdG9yaXplLCAgICAgICAgICAgICAgICAgICAgICAgLyogLWZ0cmVlLXZlY3Rvcml6ZSAqLworICBPUFRfZnRyZWVfdmVjdG9yaXplcl92ZXJib3NlXywgICAgICAgICAgICAgLyogLWZ0cmVlLXZlY3Rvcml6ZXItdmVyYm9zZT0gKi8KKyAgT1BUX2Z0cmVlX3ZycCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdHJlZS12cnAgKi8KKyAgT1BUX2Z1bmRlcnNjb3JpbmcsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdW5kZXJzY29yaW5nICovCisgIE9QVF9mdW5pdF9hdF9hX3RpbWUsICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnVuaXQtYXQtYS10aW1lICovCisgIE9QVF9mdW5yb2xsX2FsbF9sb29wcywgICAgICAgICAgICAgICAgICAgICAvKiAtZnVucm9sbC1hbGwtbG9vcHMgKi8KKyAgT1BUX2Z1bnJvbGxfbG9vcHMsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdW5yb2xsLWxvb3BzICovCisgIE9QVF9mdW5zYWZlX2xvb3Bfb3B0aW1pemF0aW9ucywgICAgICAgICAgICAvKiAtZnVuc2FmZS1sb29wLW9wdGltaXphdGlvbnMgKi8KKyAgT1BUX2Z1bnNhZmVfbWF0aF9vcHRpbWl6YXRpb25zLCAgICAgICAgICAgIC8qIC1mdW5zYWZlLW1hdGgtb3B0aW1pemF0aW9ucyAqLworICBPUFRfZnVuc2lnbmVkX2JpdGZpZWxkcywgICAgICAgICAgICAgICAgICAgLyogLWZ1bnNpZ25lZC1iaXRmaWVsZHMgKi8KKyAgT1BUX2Z1bnNpZ25lZF9jaGFyLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdW5zaWduZWQtY2hhciAqLworICBPUFRfZnVuc3dpdGNoX2xvb3BzLCAgICAgICAgICAgICAgICAgICAgICAgLyogLWZ1bnN3aXRjaC1sb29wcyAqLworICBPUFRfZnVud2luZF90YWJsZXMsICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZ1bndpbmQtdGFibGVzICovCisgIE9QVF9mdXNlX2F0b21pY19idWlsdGlucywgICAgICAgICAgICAgICAgICAvKiAtZnVzZS1hdG9taWMtYnVpbHRpbnMgKi8KKyAgT1BUX2Z1c2VfYm9laG1fZ2MsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdXNlLWJvZWhtLWdjICovCisgIE9QVF9mdXNlX2N4YV9hdGV4aXQsICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnVzZS1jeGEtYXRleGl0ICovCisgIE9QVF9mdXNlX2N4YV9nZXRfZXhjZXB0aW9uX3B0ciwgICAgICAgICAgICAvKiAtZnVzZS1jeGEtZ2V0LWV4Y2VwdGlvbi1wdHIgKi8KKyAgT1BUX2Z1c2VfZGl2aWRlX3N1YnJvdXRpbmUsICAgICAgICAgICAgICAgIC8qIC1mdXNlLWRpdmlkZS1zdWJyb3V0aW5lICovCisgIE9QVF9mdXNlX2xpbmtlcl9wbHVnaW4sICAgICAgICAgICAgICAgICAgICAvKiAtZnVzZS1saW5rZXItcGx1Z2luICovCisgIE9QVF9mdmFyX3RyYWNraW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnZhci10cmFja2luZyAqLworICBPUFRfZnZhcl90cmFja2luZ19hc3NpZ25tZW50cywgICAgICAgICAgICAgLyogLWZ2YXItdHJhY2tpbmctYXNzaWdubWVudHMgKi8KKyAgT1BUX2Z2YXJfdHJhY2tpbmdfYXNzaWdubWVudHNfdG9nZ2xlLCAgICAgIC8qIC1mdmFyLXRyYWNraW5nLWFzc2lnbm1lbnRzLXRvZ2dsZSAqLworICBPUFRfZnZhcl90cmFja2luZ191bmluaXQsICAgICAgICAgICAgICAgICAgLyogLWZ2YXItdHJhY2tpbmctdW5pbml0ICovCisgIE9QVF9mdmFyaWFibGVfZXhwYW5zaW9uX2luX3Vucm9sbGVyLCAgICAgICAvKiAtZnZhcmlhYmxlLWV4cGFuc2lvbi1pbi11bnJvbGxlciAqLworICBPUFRfZnZlY3RfY29zdF9tb2RlbCwgICAgICAgICAgICAgICAgICAgICAgLyogLWZ2ZWN0LWNvc3QtbW9kZWwgKi8KKyAgT1BUX2Z2ZXJib3NlX2FzbSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdmVyYm9zZS1hc20gKi8KKyAgT1BUX2Z2ZXJzaW9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdmVyc2lvbiAqLworICBPUFRfZnZpc2liaWxpdHlfaW5saW5lc19oaWRkZW4sICAgICAgICAgICAgLyogLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuICovCisgIE9QVF9mdmlzaWJpbGl0eV9tc19jb21wYXQsICAgICAgICAgICAgICAgICAvKiAtZnZpc2liaWxpdHktbXMtY29tcGF0ICovCisgIE9QVF9mdmlzaWJpbGl0eV8sICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnZpc2liaWxpdHk9ICovCisgIE9QVF9mdnB0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnZwdCAqLworICBPUFRfZnZ0YWJsZV9nYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZ2dGFibGUtZ2MgKi8KKyAgT1BUX2Z2dGFibGVfdGh1bmtzLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdnRhYmxlLXRodW5rcyAqLworICBPUFRfZndlYWssICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZ3ZWFrICovCisgIE9QVF9md2ViLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZndlYiAqLworICBPUFRfZndob2xlX2ZpbGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZ3aG9sZS1maWxlICovCisgIE9QVF9md2hvbGVfcHJvZ3JhbSwgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZndob2xlLXByb2dyYW0gKi8KKyAgT1BUX2Z3aG9wciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1md2hvcHIgKi8KKyAgT1BUX2Z3aWRlX2V4ZWNfY2hhcnNldF8sICAgICAgICAgICAgICAgICAgIC8qIC1md2lkZS1leGVjLWNoYXJzZXQ9ICovCisgIE9QVF9md29ya2luZ19kaXJlY3RvcnksICAgICAgICAgICAgICAgICAgICAvKiAtZndvcmtpbmctZGlyZWN0b3J5ICovCisgIE9QVF9md3BhLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZndwYSAqLworICBPUFRfZndyYXB2LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZ3cmFwdiAqLworICBPUFRfZnhyZWYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZ4cmVmICovCisgIE9QVF9memVyb19pbml0aWFsaXplZF9pbl9ic3MsICAgICAgICAgICAgICAvKiAtZnplcm8taW5pdGlhbGl6ZWQtaW4tYnNzICovCisgIE9QVF9memVyb19saW5rLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnplcm8tbGluayAqLworICBPUFRfZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWcgKi8KKyAgT1BUX2dhbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1nYW50ICovCisgIE9QVF9nY29mZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZ2NvZmYgKi8KKyAgT1BUX2dkd2FyZnBsdXMsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1nZHdhcmYrICovCisgIE9QVF9nZHdhcmZfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZ2R3YXJmLSAqLworICBPUFRfZ2VuX2RlY2xzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWdlbi1kZWNscyAqLworICBPUFRfZ2dkYiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWdnZGIgKi8KKyAgT1BUX2duYXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1nbmF0ICovCisgIE9QVF9nbmF0TywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZ25hdE8gKi8KKyAgT1BUX2dub19zdHJpY3RfZHdhcmYsICAgICAgICAgICAgICAgICAgICAgIC8qIC1nbm8tc3RyaWN0LWR3YXJmICovCisgIE9QVF9nc3RhYnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZ3N0YWJzICovCisgIE9QVF9nc3RhYnNfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZ3N0YWJzKyAqLworICBPUFRfZ3N0cmljdF9kd2FyZiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWdzdHJpY3QtZHdhcmYgKi8KKyAgT1BUX2d0b2dnbGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1ndG9nZ2xlICovCisgIE9QVF9ndm1zLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZ3ZtcyAqLworICBPUFRfZ3hjb2ZmLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWd4Y29mZiAqLworICBPUFRfZ3hjb2ZmXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWd4Y29mZisgKi8KKyAgT1BUX2lkaXJhZnRlciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1pZGlyYWZ0ZXIgKi8KKyAgT1BUX2ltYWNyb3MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1pbWFjcm9zICovCisgIE9QVF9pbXVsdGlsaWIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtaW11bHRpbGliICovCisgIE9QVF9pbmNsdWRlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtaW5jbHVkZSAqLworICBPUFRfaXByZWZpeCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWlwcmVmaXggKi8KKyAgT1BUX2lxdW90ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1pcXVvdGUgKi8KKyAgT1BUX2lzeXNyb290LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1pc3lzcm9vdCAqLworICBPUFRfaXN5c3RlbSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWlzeXN0ZW0gKi8KKyAgT1BUX2l3aXRocHJlZml4LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1pd2l0aHByZWZpeCAqLworICBPUFRfaXdpdGhwcmVmaXhiZWZvcmUsICAgICAgICAgICAgICAgICAgICAgLyogLWl3aXRocHJlZml4YmVmb3JlICovCisgIE9QVF9sYW5nX2FzbSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtbGFuZy1hc20gKi8KKyAgT1BUX2xhbmdfb2JqYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1sYW5nLW9iamMgKi8KKyAgT1BUX21hYmlfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1tYWJpPSAqLworICBPUFRfbWFib3J0X29uX25vcmV0dXJuLCAgICAgICAgICAgICAgICAgICAgLyogLW1hYm9ydC1vbi1ub3JldHVybiAqLworICBPUFRfbWFwY3MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLW1hcGNzICovCisgIE9QVF9tYXBjc19mbG9hdCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtbWFwY3MtZmxvYXQgKi8KKyAgT1BUX21hcGNzX2ZyYW1lLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1tYXBjcy1mcmFtZSAqLworICBPUFRfbWFwY3NfcmVlbnRyYW50LCAgICAgICAgICAgICAgICAgICAgICAgLyogLW1hcGNzLXJlZW50cmFudCAqLworICBPUFRfbWFwY3Nfc3RhY2tfY2hlY2ssICAgICAgICAgICAgICAgICAgICAgLyogLW1hcGNzLXN0YWNrLWNoZWNrICovCisgIE9QVF9tYXJjaF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtbWFyY2g9ICovCisgIE9QVF9tYXJtLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtbWFybSAqLworICBPUFRfbWJpZ19lbmRpYW4sICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLW1iaWctZW5kaWFuICovCisgIE9QVF9tY2FsbGVlX3N1cGVyX2ludGVyd29ya2luZywgICAgICAgICAgICAvKiAtbWNhbGxlZS1zdXBlci1pbnRlcndvcmtpbmcgKi8KKyAgT1BUX21jYWxsZXJfc3VwZXJfaW50ZXJ3b3JraW5nLCAgICAgICAgICAgIC8qIC1tY2FsbGVyLXN1cGVyLWludGVyd29ya2luZyAqLworICBPUFRfbWNpcnJ1c19maXhfaW52YWxpZF9pbnNucywgICAgICAgICAgICAgLyogLW1jaXJydXMtZml4LWludmFsaWQtaW5zbnMgKi8KKyAgT1BUX21jcHVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1tY3B1PSAqLworICBPUFRfbWZpeF9jb3J0ZXhfbTNfbGRyZCwgICAgICAgICAgICAgICAgICAgLyogLW1maXgtY29ydGV4LW0zLWxkcmQgKi8KKyAgT1BUX21mbG9hdF9hYmlfLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1tZmxvYXQtYWJpPSAqLworICBPUFRfbWZwMTZfZm9ybWF0XywgICAgICAgICAgICAgICAgICAgICAgICAgLyogLW1mcDE2LWZvcm1hdD0gKi8KKyAgT1BUX21mcF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1tZnA9ICovCisgIE9QVF9tZnBlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtbWZwZSAqLworICBPUFRfbWZwZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLW1mcGU9ICovCisgIE9QVF9tZnB1XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtbWZwdT0gKi8KKyAgT1BUX21nbGliYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1tZ2xpYmMgKi8KKyAgT1BUX21oYXJkX2Zsb2F0LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1taGFyZC1mbG9hdCAqLworICBPUFRfbWxpdHRsZV9lbmRpYW4sICAgICAgICAgICAgICAgICAgICAgICAgLyogLW1saXR0bGUtZW5kaWFuICovCisgIE9QVF9tbG9uZ19jYWxscywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtbWxvbmctY2FsbHMgKi8KKyAgT1BUX21waWNfcmVnaXN0ZXJfLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1tcGljLXJlZ2lzdGVyPSAqLworICBPUFRfbXBva2VfZnVuY3Rpb25fbmFtZSwgICAgICAgICAgICAgICAgICAgLyogLW1wb2tlLWZ1bmN0aW9uLW5hbWUgKi8KKyAgT1BUX21zY2hlZF9wcm9sb2csICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1tc2NoZWQtcHJvbG9nICovCisgIE9QVF9tc2luZ2xlX3BpY19iYXNlLCAgICAgICAgICAgICAgICAgICAgICAvKiAtbXNpbmdsZS1waWMtYmFzZSAqLworICBPUFRfbXNvZnRfZmxvYXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLW1zb2Z0LWZsb2F0ICovCisgIE9QVF9tc3RydWN0dXJlX3NpemVfYm91bmRhcnlfLCAgICAgICAgICAgICAvKiAtbXN0cnVjdHVyZS1zaXplLWJvdW5kYXJ5PSAqLworICBPUFRfbXRodW1iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLW10aHVtYiAqLworICBPUFRfbXRodW1iX2ludGVyd29yaywgICAgICAgICAgICAgICAgICAgICAgLyogLW10aHVtYi1pbnRlcndvcmsgKi8KKyAgT1BUX210cF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1tdHA9ICovCisgIE9QVF9tdHBjc19mcmFtZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtbXRwY3MtZnJhbWUgKi8KKyAgT1BUX210cGNzX2xlYWZfZnJhbWUsICAgICAgICAgICAgICAgICAgICAgIC8qIC1tdHBjcy1sZWFmLWZyYW1lICovCisgIE9QVF9tdHVuZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtbXR1bmU9ICovCisgIE9QVF9tdWNsaWJjLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtbXVjbGliYyAqLworICBPUFRfbXZlY3Rvcml6ZV93aXRoX25lb25fcXVhZCwgICAgICAgICAgICAgLyogLW12ZWN0b3JpemUtd2l0aC1uZW9uLXF1YWQgKi8KKyAgT1BUX213b3JkX3JlbG9jYXRpb25zLCAgICAgICAgICAgICAgICAgICAgIC8qIC1td29yZC1yZWxvY2F0aW9ucyAqLworICBPUFRfbXdvcmRzX2xpdHRsZV9lbmRpYW4sICAgICAgICAgICAgICAgICAgLyogLW13b3Jkcy1saXR0bGUtZW5kaWFuICovCisgIE9QVF9ub2NwcCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtbm9jcHAgKi8KKyAgT1BUX25vc3RkaW5jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1ub3N0ZGluYyAqLworICBPUFRfbm9zdGRpbmNfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLW5vc3RkaW5jKysgKi8KKyAgT1BUX25vc3RkbGliLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1ub3N0ZGxpYiAqLworICBPUFRfbywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLW8gKi8KKyAgT1BUX3AsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1wICovCisgIE9QVF9wZWRhbnRpYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtcGVkYW50aWMgKi8KKyAgT1BUX3BlZGFudGljX2Vycm9ycywgICAgICAgICAgICAgICAgICAgICAgIC8qIC1wZWRhbnRpYy1lcnJvcnMgKi8KKyAgT1BUX3BpZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1waWUgKi8KKyAgT1BUX3ByaW50X29iamNfcnVudGltZV9pbmZvLCAgICAgICAgICAgICAgIC8qIC1wcmludC1vYmpjLXJ1bnRpbWUtaW5mbyAqLworICBPUFRfcHJpbnRfcGNoX2NoZWNrc3VtLCAgICAgICAgICAgICAgICAgICAgLyogLXByaW50LXBjaC1jaGVja3N1bSAqLworICBPUFRfcXVpZXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLXF1aWV0ICovCisgIE9QVF9yZW1hcCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtcmVtYXAgKi8KKyAgT1BUX3NoYXJlZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1zaGFyZWQgKi8KKyAgT1BUX3N0YXRpY19saWJnZm9ydHJhbiwgICAgICAgICAgICAgICAgICAgIC8qIC1zdGF0aWMtbGliZ2ZvcnRyYW4gKi8KKyAgT1BUX3N0ZF9jX18weCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1zdGQ9YysrMHggKi8KKyAgT1BUX3N0ZF9jX185OCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1zdGQ9YysrOTggKi8KKyAgT1BUX3N0ZF9jODksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1zdGQ9Yzg5ICovCisgIE9QVF9zdGRfYzkwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtc3RkPWM5MCAqLworICBPUFRfc3RkX2M5OSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLXN0ZD1jOTkgKi8KKyAgT1BUX3N0ZF9jOXgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1zdGQ9Yzl4ICovCisgIE9QVF9zdGRfZjIwMDMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtc3RkPWYyMDAzICovCisgIE9QVF9zdGRfZjIwMDgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtc3RkPWYyMDA4ICovCisgIE9QVF9zdGRfZjk1LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtc3RkPWY5NSAqLworICBPUFRfc3RkX2dudSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLXN0ZD1nbnUgKi8KKyAgT1BUX3N0ZF9nbnVfXzB4LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1zdGQ9Z251KysweCAqLworICBPUFRfc3RkX2dudV9fOTgsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLXN0ZD1nbnUrKzk4ICovCisgIE9QVF9zdGRfZ251ODksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtc3RkPWdudTg5ICovCisgIE9QVF9zdGRfZ251OTAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtc3RkPWdudTkwICovCisgIE9QVF9zdGRfZ251OTksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtc3RkPWdudTk5ICovCisgIE9QVF9zdGRfZ251OXgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtc3RkPWdudTl4ICovCisgIE9QVF9zdGRfaXNvOTg5OV8xOTkwLCAgICAgICAgICAgICAgICAgICAgICAvKiAtc3RkPWlzbzk4OTk6MTk5MCAqLworICBPUFRfc3RkX2lzbzk4OTlfMTk5NDA5LCAgICAgICAgICAgICAgICAgICAgLyogLXN0ZD1pc285ODk5OjE5OTQwOSAqLworICBPUFRfc3RkX2lzbzk4OTlfMTk5OSwgICAgICAgICAgICAgICAgICAgICAgLyogLXN0ZD1pc285ODk5OjE5OTkgKi8KKyAgT1BUX3N0ZF9pc285ODk5XzE5OXgsICAgICAgICAgICAgICAgICAgICAgIC8qIC1zdGQ9aXNvOTg5OToxOTl4ICovCisgIE9QVF9zdGRfbGVnYWN5LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtc3RkPWxlZ2FjeSAqLworICBPUFRfdHJhZGl0aW9uYWxfY3BwLCAgICAgICAgICAgICAgICAgICAgICAgLyogLXRyYWRpdGlvbmFsLWNwcCAqLworICBPUFRfdHJpZ3JhcGhzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLXRyaWdyYXBocyAqLworICBPUFRfdW5kZWYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLXVuZGVmICovCisgIE9QVF92LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtdiAqLworICBPUFRfdmVyc2lvbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLXZlcnNpb24gKi8KKyAgT1BUX3csICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC13ICovCisgIE5fT1BUUworfTsKKworI2VuZGlmIC8qIE9QVElPTlNfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL29wdHMuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9vcHRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJlZWYxOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9vcHRzLmgKQEAgLTAsMCArMSwxMTEgQEAKKy8qIENvbW1hbmQgbGluZSBvcHRpb24gaGFuZGxpbmcuCisgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDgKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfT1BUU19ICisjZGVmaW5lIEdDQ19PUFRTX0gKKworLyogU3BlY2lmaWVzIGhvdyBhIHN3aXRjaCdzIFZBUl9WQUxVRSByZWxhdGVzIHRvIGl0cyBGTEFHX1ZBUi4gICovCitlbnVtIGNsX3Zhcl90eXBlIHsKKyAgLyogVGhlIHN3aXRjaCBpcyBlbmFibGVkIHdoZW4gRkxBR19WQVIgaXMgbm9uemVyby4gICovCisgIENMVkNfQk9PTEVBTiwKKworICAvKiBUaGUgc3dpdGNoIGlzIGVuYWJsZWQgd2hlbiBGTEFHX1ZBUiA9PSBWQVJfVkFMVUUuICAqLworICBDTFZDX0VRVUFMLAorCisgIC8qIFRoZSBzd2l0Y2ggaXMgZW5hYmxlZCB3aGVuIFZBUl9WQUxVRSBpcyBub3Qgc2V0IGluIEZMQUdfVkFSLiAgKi8KKyAgQ0xWQ19CSVRfQ0xFQVIsCisKKyAgLyogVGhlIHN3aXRjaCBpcyBlbmFibGVkIHdoZW4gVkFSX1ZBTFVFIGlzIHNldCBpbiBGTEFHX1ZBUi4gICovCisgIENMVkNfQklUX1NFVCwKKworICAvKiBUaGUgc3dpdGNoIHRha2VzIGEgc3RyaW5nIGFyZ3VtZW50IGFuZCBGTEFHX1ZBUiBwb2ludHMgdG8gdGhhdAorICAgICBhcmd1bWVudC4gICovCisgIENMVkNfU1RSSU5HCit9OworCitzdHJ1Y3QgY2xfb3B0aW9uCit7CisgIGNvbnN0IGNoYXIgKm9wdF90ZXh0OworICBjb25zdCBjaGFyICpoZWxwOworICB1bnNpZ25lZCBzaG9ydCBiYWNrX2NoYWluOworICB1bnNpZ25lZCBjaGFyIG9wdF9sZW47CisgIGludCBuZWdfaW5kZXg7CisgIHVuc2lnbmVkIGludCBmbGFnczsKKyAgdm9pZCAqZmxhZ192YXI7CisgIGVudW0gY2xfdmFyX3R5cGUgdmFyX3R5cGU7CisgIGludCB2YXJfdmFsdWU7Cit9OworCisvKiBSZWNvcmRzIHRoYXQgdGhlIHN0YXRlIG9mIGFuIG9wdGlvbiBjb25zaXN0cyBvZiBTSVpFIGJ5dGVzIHN0YXJ0aW5nCisgICBhdCBEQVRBLiAgREFUQSBtaWdodCBwb2ludCB0byBDSCBpbiBzb21lIGNhc2VzLiAgKi8KK3N0cnVjdCBjbF9vcHRpb25fc3RhdGUgeworICBjb25zdCB2b2lkICpkYXRhOworICBzaXplX3Qgc2l6ZTsKKyAgY2hhciBjaDsKK307CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY2xfb3B0aW9uIGNsX29wdGlvbnNbXTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgY2xfb3B0aW9uc19jb3VudDsKK2V4dGVybiBjb25zdCBjaGFyICpjb25zdCBsYW5nX25hbWVzW107CitleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IGNsX2xhbmdfY291bnQ7CisKKyNkZWZpbmUgQ0xfUEFSQU1TICAgICAgICAgICAgICAgKDEgPDwgMTcpIC8qIEZha2UgZW50cnkuICBVc2VkIHRvIGRpc3BsYXkgLS1wYXJhbSBpbmZvIHdpdGggLS1oZWxwLiAgKi8KKyNkZWZpbmUgQ0xfV0FSTklORwkJKDEgPDwgMTgpIC8qIEVuYWJsZXMgYW4gKG9wdGlvbmFsKSB3YXJuaW5nIG1lc3NhZ2UuICAqLworI2RlZmluZSBDTF9PUFRJTUlaQVRJT04JCSgxIDw8IDE5KSAvKiBFbmFibGVzIGFuIChvcHRpb25hbCkgb3B0aW1pemF0aW9uLiAgKi8KKyNkZWZpbmUgQ0xfVEFSR0VUCQkoMSA8PCAyMCkgLyogVGFyZ2V0LXNwZWNpZmljIG9wdGlvbi4gICovCisjZGVmaW5lIENMX0NPTU1PTgkJKDEgPDwgMjEpIC8qIExhbmd1YWdlLWluZGVwZW5kZW50LiAgKi8KKworI2RlZmluZSBDTF9NSU5fT1BUSU9OX0NMQVNTCUNMX1BBUkFNUworI2RlZmluZSBDTF9NQVhfT1BUSU9OX0NMQVNTCUNMX0NPTU1PTgorCisvKiBGcm9tIGhlcmUgb24gdGhlIGJpdHMgZGVzY3JpYmUgYXR0cmlidXRlcyBvZiB0aGUgb3B0aW9ucy4KKyAgIEJlZm9yZSB0aGlzIHBvaW50IHRoZSBiaXRzIGhhdmUgZGVzY3JpYmVkIHRoZSBjbGFzcyBvZiB0aGUgb3B0aW9uLgorICAgVGhpcyBkaXN0aW5jdGlvbiBpcyBpbXBvcnRhbnQgYmVjYXVzZSAtLWhlbHAgd2lsbCBub3QgbGlzdCBvcHRpb25zCisgICB3aGljaCBvbmx5IGhhdmUgdGhlc2UgaGlnaGVyIGJpdHMgc2V0LiAgKi8KKworI2RlZmluZSBDTF9TQVZFCQkJKDEgPDwgMjIpIC8qIFRhcmdldC1zcGVjaWZpYyBvcHRpb24gZm9yIGF0dHJpYnV0ZS4gICovCisjZGVmaW5lIENMX0RJU0FCTEVECQkoMSA8PCAyMykgLyogRGlzYWJsZWQgaW4gdGhpcyBjb25maWd1cmF0aW9uLiAgKi8KKyNkZWZpbmUgQ0xfUkVQT1JUCQkoMSA8PCAyNCkgLyogUmVwb3J0IGFyZ3VtZW50IHdpdGggLWZ2ZXJib3NlLWFzbSAgKi8KKyNkZWZpbmUgQ0xfSk9JTkVECQkoMSA8PCAyNSkgLyogSWYgdGFrZXMgam9pbmVkIGFyZ3VtZW50LiAgKi8KKyNkZWZpbmUgQ0xfU0VQQVJBVEUJCSgxIDw8IDI2KSAvKiBJZiB0YWtlcyBhIHNlcGFyYXRlIGFyZ3VtZW50LiAgKi8KKyNkZWZpbmUgQ0xfUkVKRUNUX05FR0FUSVZFCSgxIDw8IDI3KSAvKiBSZWplY3Qgbm8tIGZvcm0uICAqLworI2RlZmluZSBDTF9NSVNTSU5HX09LCQkoMSA8PCAyOCkgLyogTWlzc2luZyBhcmd1bWVudCBPSyAoam9pbmVkKS4gICovCisjZGVmaW5lIENMX1VJTlRFR0VSCQkoMSA8PCAyOSkgLyogQXJndW1lbnQgaXMgYW4gaW50ZWdlciA+PTAuICAqLworI2RlZmluZSBDTF9VTkRPQ1VNRU5URUQJCSgxIDw8IDMwKSAvKiBEbyBub3Qgb3V0cHV0IHdpdGggLS1oZWxwLiAgKi8KKworLyogSW5wdXQgZmlsZSBuYW1lcy4gICovCisKK2V4dGVybiBjb25zdCBjaGFyICoqaW5fZm5hbWVzOworCisvKiBUaGUgY291bnQgb2YgaW5wdXQgZmlsZW5hbWVzLiAgKi8KKworZXh0ZXJuIHVuc2lnbmVkIG51bV9pbl9mbmFtZXM7CisKK3NpemVfdCBmaW5kX29wdCAoY29uc3QgY2hhciAqaW5wdXQsIGludCBsYW5nX21hc2spOworZXh0ZXJuIHZvaWQgcHJ1bmVfb3B0aW9ucyAoaW50ICphcmdjcCwgY2hhciAqKiphcmd2cCk7CitleHRlcm4gdm9pZCBkZWNvZGVfb3B0aW9ucyAodW5zaWduZWQgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2V4dGVybiBpbnQgb3B0aW9uX2VuYWJsZWQgKGludCBvcHRfaWR4KTsKK2V4dGVybiBib29sIGdldF9vcHRpb25fc3RhdGUgKGludCwgc3RydWN0IGNsX29wdGlvbl9zdGF0ZSAqKTsKK2V4dGVybiB2b2lkIHNldF9vcHRpb24gKGNvbnN0IHN0cnVjdCBjbF9vcHRpb24gKiwgaW50LCBjb25zdCBjaGFyICopOworCitleHRlcm4gdm9pZCBlbmFibGVfd2FybmluZ19hc19lcnJvciAoY29uc3QgY2hhciAqYXJnLCBpbnQgdmFsdWUsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgbGFuZ19tYXNrKTsKK2V4dGVybiB2b2lkIHByaW50X2lnbm9yZWRfb3B0aW9ucyAodm9pZCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9vdXRwdXQuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9vdXRwdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDc3MWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL291dHB1dC5oCkBAIC0wLDAgKzEsNjU2IEBACisvKiBEZWNsYXJhdGlvbnMgZm9yIGluc24tb3V0cHV0LmMuICBUaGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gcmVjb2cuYywKKyAgIGZpbmFsLmMsIGFuZCB2YXJhc20uYy4KKyAgIENvcHlyaWdodCAoQykgMTk4NywgMTk5MSwgMTk5NCwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyAgIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19PVVRQVVRfSAorI2RlZmluZSBHQ0NfT1VUUFVUX0gKKworLyogSW5pdGlhbGl6ZSBkYXRhIGluIGZpbmFsIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBjb21waWxhdGlvbi4gICovCitleHRlcm4gdm9pZCBpbml0X2ZpbmFsIChjb25zdCBjaGFyICopOworCisvKiBFbmFibGUgQVBQIHByb2Nlc3Npbmcgb2Ygc3Vic2VxdWVudCBvdXRwdXQuCisgICBVc2VkIGJlZm9yZSB0aGUgb3V0cHV0IGZyb20gYW4gYGFzbScgc3RhdGVtZW50LiAgKi8KK2V4dGVybiB2b2lkIGFwcF9lbmFibGUgKHZvaWQpOworCisvKiBEaXNhYmxlIEFQUCBwcm9jZXNzaW5nIG9mIHN1YnNlcXVlbnQgb3V0cHV0LgorICAgQ2FsbGVkIGZyb20gdmFyYXNtLmMgYmVmb3JlIG1vc3Qga2luZHMgb2Ygb3V0cHV0LiAgKi8KK2V4dGVybiB2b2lkIGFwcF9kaXNhYmxlICh2b2lkKTsKKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2xvdHMgZmlsbGVkIGluIHRoZSBjdXJyZW50CisgICBkZWxheWVkIGJyYW5jaCBzZXF1ZW5jZSAod2UgZG9uJ3QgY291bnQgdGhlIGluc24gbmVlZGluZyB0aGUKKyAgIGRlbGF5IHNsb3QpLiAgIFplcm8gaWYgbm90IGluIGEgZGVsYXllZCBicmFuY2ggc2VxdWVuY2UuICAqLworZXh0ZXJuIGludCBkYnJfc2VxdWVuY2VfbGVuZ3RoICh2b2lkKTsKKworLyogSW5kaWNhdGUgdGhhdCBicmFuY2ggc2hvcnRlbmluZyBoYXNuJ3QgeWV0IGJlZW4gZG9uZS4gICovCitleHRlcm4gdm9pZCBpbml0X2luc25fbGVuZ3RocyAodm9pZCk7CisKKy8qIE9idGFpbiB0aGUgY3VycmVudCBsZW5ndGggb2YgYW4gaW5zbi4gIElmIGJyYW5jaCBzaG9ydGVuaW5nIGhhcyBiZWVuIGRvbmUsCisgICBnZXQgaXRzIGFjdHVhbCBsZW5ndGguICBPdGhlcndpc2UsIGdldCBpdHMgbWF4aW11bSBsZW5ndGguICAqLworZXh0ZXJuIGludCBnZXRfYXR0cl9sZW5ndGggKHJ0eCk7CisKKy8qIE9idGFpbiB0aGUgY3VycmVudCBsZW5ndGggb2YgYW4gaW5zbi4gIElmIGJyYW5jaCBzaG9ydGVuaW5nIGhhcyBiZWVuIGRvbmUsCisgICBnZXQgaXRzIGFjdHVhbCBsZW5ndGguICBPdGhlcndpc2UsIGdldCBpdHMgbWluaW11bSBsZW5ndGguICAqLworZXh0ZXJuIGludCBnZXRfYXR0cl9taW5fbGVuZ3RoIChydHgpOworCisvKiBNYWtlIGEgcGFzcyBvdmVyIGFsbCBpbnNucyBhbmQgY29tcHV0ZSB0aGVpciBhY3R1YWwgbGVuZ3RocyBieSBzaG9ydGVuaW5nCisgICBhbnkgYnJhbmNoZXMgb2YgdmFyaWFibGUgbGVuZ3RoIGlmIHBvc3NpYmxlLiAgKi8KK2V4dGVybiB2b2lkIHNob3J0ZW5fYnJhbmNoZXMgKHJ0eCk7CisKKy8qIE91dHB1dCBhc3NlbWJsZXIgY29kZSBmb3IgdGhlIHN0YXJ0IG9mIGEgZnVuY3Rpb24sCisgICBhbmQgaW5pdGlhbGl6ZSBzb21lIG9mIHRoZSB2YXJpYWJsZXMgaW4gdGhpcyBmaWxlCisgICBmb3IgdGhlIG5ldyBmdW5jdGlvbi4gIFRoZSBsYWJlbCBmb3IgdGhlIGZ1bmN0aW9uIGFuZCBhc3NvY2lhdGVkCisgICBhc3NlbWJsZXIgcHNldWRvLW9wcyBoYXZlIGFscmVhZHkgYmVlbiBvdXRwdXQgaW4KKyAgIGBhc3NlbWJsZV9zdGFydF9mdW5jdGlvbicuICAqLworZXh0ZXJuIHZvaWQgZmluYWxfc3RhcnRfZnVuY3Rpb24gKHJ0eCwgRklMRSAqLCBpbnQpOworCisvKiBPdXRwdXQgYXNzZW1ibGVyIGNvZGUgZm9yIHRoZSBlbmQgb2YgYSBmdW5jdGlvbi4KKyAgIEZvciBjbGFyaXR5LCBhcmdzIGFyZSBzYW1lIGFzIHRob3NlIG9mIGBmaW5hbF9zdGFydF9mdW5jdGlvbicKKyAgIGV2ZW4gdGhvdWdoIG5vdCBhbGwgb2YgdGhlbSBhcmUgbmVlZGVkLiAgKi8KK2V4dGVybiB2b2lkIGZpbmFsX2VuZF9mdW5jdGlvbiAodm9pZCk7CisKKy8qIE91dHB1dCBhc3NlbWJsZXIgY29kZSBmb3Igc29tZSBpbnNuczogYWxsIG9yIHBhcnQgb2YgYSBmdW5jdGlvbi4gICovCitleHRlcm4gdm9pZCBmaW5hbCAocnR4LCBGSUxFICosIGludCk7CisKKy8qIFRoZSBmaW5hbCBzY2FuIGZvciBvbmUgaW5zbiwgSU5TTi4gIEFyZ3MgYXJlIHNhbWUgYXMgaW4gYGZpbmFsJywgZXhjZXB0CisgICB0aGF0IElOU04gaXMgdGhlIGluc24gYmVpbmcgc2Nhbm5lZC4gIFZhbHVlIHJldHVybmVkIGlzIHRoZSBuZXh0IGluc24gdG8KKyAgIGJlIHNjYW5uZWQuICAqLworZXh0ZXJuIHJ0eCBmaW5hbF9zY2FuX2luc24gKHJ0eCwgRklMRSAqLCBpbnQsIGludCwgaW50ICopOworCisvKiBSZXBsYWNlIGEgU1VCUkVHIHdpdGggYSBSRUcgb3IgYSBNRU0sIGJhc2VkIG9uIHRoZSB0aGluZyBpdCBpcyBhCisgICBzdWJyZWcgb2YuICAqLworZXh0ZXJuIHJ0eCBhbHRlcl9zdWJyZWcgKHJ0eCAqKTsKKworLyogUmVwb3J0IGluY29uc2lzdGVuY3kgYmV0d2VlbiB0aGUgYXNzZW1ibGVyIHRlbXBsYXRlIGFuZCB0aGUgb3BlcmFuZHMuCisgICBJbiBhbiBgYXNtJywgaXQncyB0aGUgdXNlcidzIGZhdWx0OyBvdGhlcndpc2UsIHRoZSBjb21waWxlcidzIGZhdWx0LiAgKi8KK2V4dGVybiB2b2lkIG91dHB1dF9vcGVyYW5kX2xvc3NhZ2UgKGNvbnN0IGNoYXIgKiwgLi4uKSBBVFRSSUJVVEVfUFJJTlRGXzE7CisKKy8qIE91dHB1dCBhIHN0cmluZyBvZiBhc3NlbWJsZXIgY29kZSwgc3Vic3RpdHV0aW5nIGluc24gb3BlcmFuZHMuCisgICBEZWZpbmVkIGluIGZpbmFsLmMuICAqLworZXh0ZXJuIHZvaWQgb3V0cHV0X2FzbV9pbnNuIChjb25zdCBjaGFyICosIHJ0eCAqKTsKKworLyogQ29tcHV0ZSBhIHdvcnN0LWNhc2UgcmVmZXJlbmNlIGFkZHJlc3Mgb2YgYSBicmFuY2ggc28gdGhhdCBpdAorICAgY2FuIGJlIHNhZmVseSB1c2VkIGluIHRoZSBwcmVzZW5jZSBvZiBhbGlnbmVkIGxhYmVscy4KKyAgIERlZmluZWQgaW4gZmluYWwuYy4gICovCitleHRlcm4gaW50IGluc25fY3VycmVudF9yZWZlcmVuY2VfYWRkcmVzcyAocnR4KTsKKworLyogRmluZCB0aGUgYWxpZ25tZW50IGFzc29jaWF0ZWQgd2l0aCBhIENPREVfTEFCRUwuCisgICBEZWZpbmVkIGluIGZpbmFsLmMuICAqLworZXh0ZXJuIGludCBsYWJlbF90b19hbGlnbm1lbnQgKHJ0eCk7CisKKy8qIEZpbmQgdGhlIGFsaWdubWVudCBtYXhpbXVtIHNraXAgYXNzb2NpYXRlZCB3aXRoIGEgQ09ERV9MQUJFTC4KKyAgIERlZmluZWQgaW4gZmluYWwuYy4gICovCitleHRlcm4gaW50IGxhYmVsX3RvX21heF9za2lwIChydHgpOworCisvKiBPdXRwdXQgYSBMQUJFTF9SRUYsIG9yIGEgYmFyZSBDT0RFX0xBQkVMLCBhcyBhbiBhc3NlbWJsZXIgc3ltYm9sLiAgKi8KK2V4dGVybiB2b2lkIG91dHB1dF9hc21fbGFiZWwgKHJ0eCk7CisKKy8qIE1hcmtzIFNZTUJPTF9SRUZzIGluIHggYXMgcmVmZXJlbmNlZCB0aHJvdWdoIHVzZSBvZiBhc3NlbWJsZV9leHRlcm5hbC4gICovCitleHRlcm4gdm9pZCBtYXJrX3N5bWJvbF9yZWZzX2FzX3VzZWQgKHJ0eCk7CisKKy8qIFByaW50IGEgbWVtb3J5IHJlZmVyZW5jZSBvcGVyYW5kIGZvciBhZGRyZXNzIFgKKyAgIHVzaW5nIG1hY2hpbmUtZGVwZW5kZW50IGFzc2VtYmxlciBzeW50YXguICAqLworZXh0ZXJuIHZvaWQgb3V0cHV0X2FkZHJlc3MgKHJ0eCk7CisKKy8qIFByaW50IGFuIGludGVnZXIgY29uc3RhbnQgZXhwcmVzc2lvbiBpbiBhc3NlbWJsZXIgc3ludGF4LgorICAgQWRkaXRpb24gYW5kIHN1YnRyYWN0aW9uIGFyZSB0aGUgb25seSBhcml0aG1ldGljCisgICB0aGF0IG1heSBhcHBlYXIgaW4gdGhlc2UgZXhwcmVzc2lvbnMuICAqLworZXh0ZXJuIHZvaWQgb3V0cHV0X2FkZHJfY29uc3QgKEZJTEUgKiwgcnR4KTsKKworLyogT3V0cHV0IGEgc3RyaW5nIG9mIGFzc2VtYmxlciBjb2RlLCBzdWJzdGl0dXRpbmcgbnVtYmVycywgc3RyaW5ncworICAgYW5kIGZpeGVkIHN5bnRhY3RpYyBwcmVmaXhlcy4gICovCisjaWYgR0NDX1ZFUlNJT04gPj0gMzAwNAorI2RlZmluZSBBVFRSSUJVVEVfQVNNX0ZQUklOVEYobSwgbikgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fYXNtX2ZwcmludGZfXywgbSwgbikpKSBBVFRSSUJVVEVfTk9OTlVMTChtKQorLyogVGhpcyBpcyBhIG1hZ2ljIGlkZW50aWZpZXIgd2hpY2ggYWxsb3dzIEdDQyB0byBmaWd1cmUgb3V0IHRoZSB0eXBlCisgICBvZiBIT1NUX1dJREVfSU5UIGZvciAld2Qgc3BlY2lmaWVyIGNoZWNrcy4gIFlvdSBtdXN0IGlzc3VlIHRoaXMKKyAgIHR5cGVkZWYgYmVmb3JlIHVzaW5nIHRoZSBfX2FzbV9mcHJpbnRmX18gZm9ybWF0IGF0dHJpYnV0ZS4gICovCit0eXBlZGVmIEhPU1RfV0lERV9JTlQgX19nY2NfaG9zdF93aWRlX2ludF9fOworI2Vsc2UKKyNkZWZpbmUgQVRUUklCVVRFX0FTTV9GUFJJTlRGKG0sIG4pIEFUVFJJQlVURV9OT05OVUxMKG0pCisjZW5kaWYKKworZXh0ZXJuIHZvaWQgYXNtX2ZwcmludGYgKEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKnAsIC4uLikKKyAgICAgQVRUUklCVVRFX0FTTV9GUFJJTlRGKDIsIDMpOworCisvKiBTcGxpdCB1cCBhIENPTlNUX0RPVUJMRSBvciBpbnRlZ2VyIGNvbnN0YW50IHJ0eCBpbnRvIHR3byBydHgncyBmb3Igc2luZ2xlCisgICB3b3Jkcy4gICovCitleHRlcm4gdm9pZCBzcGxpdF9kb3VibGUgKHJ0eCwgcnR4ICosIHJ0eCAqKTsKKworLyogUmV0dXJuIG5vbnplcm8gaWYgdGhpcyBmdW5jdGlvbiBoYXMgbm8gZnVuY3Rpb24gY2FsbHMuICAqLworZXh0ZXJuIGludCBsZWFmX2Z1bmN0aW9uX3AgKHZvaWQpOworCisvKiBSZXR1cm4gMSBpZiBicmFuY2ggaXMgYSBmb3J3YXJkIGJyYW5jaC4KKyAgIFVzZXMgaW5zbl9zaHVpZCBhcnJheSwgc28gaXQgd29ya3Mgb25seSBpbiB0aGUgZmluYWwgcGFzcy4gIE1heSBiZSB1c2VkIGJ5CisgICBvdXRwdXQgdGVtcGxhdGVzIHRvIGFkZCBicmFuY2ggcHJlZGljdGlvbiBoaW50cywgZm9yIGV4YW1wbGUuICAqLworZXh0ZXJuIGludCBmaW5hbF9mb3J3YXJkX2JyYW5jaF9wIChydHgpOworCisvKiBSZXR1cm4gMSBpZiB0aGlzIGZ1bmN0aW9uIHVzZXMgb25seSB0aGUgcmVnaXN0ZXJzIHRoYXQgY2FuIGJlCisgICBzYWZlbHkgcmVudW1iZXJlZC4gICovCitleHRlcm4gaW50IG9ubHlfbGVhZl9yZWdzX3VzZWQgKHZvaWQpOworCisvKiBTY2FuIElOX1JUWCBhbmQgaXRzIHN1YmV4cHJlc3Npb25zLCBhbmQgcmVudW1iZXIgYWxsIHJlZ3MgaW50byB0aG9zZQorICAgYXZhaWxhYmxlIGluIGxlYWYgZnVuY3Rpb25zLiAgKi8KK2V4dGVybiB2b2lkIGxlYWZfcmVudW1iZXJfcmVnc19pbnNuIChydHgpOworCisvKiBMb2NhdGUgdGhlIHByb3BlciB0ZW1wbGF0ZSBmb3IgdGhlIGdpdmVuIGluc24tY29kZS4gICovCitleHRlcm4gY29uc3QgY2hhciAqZ2V0X2luc25fdGVtcGxhdGUgKGludCwgcnR4KTsKKworLyogRnVuY3Rpb25zIGluIHZhcmFzbS5jLiAgKi8KKworLyogRGVjbGFyZSBERUNMIHRvIGJlIGEgd2VhayBzeW1ib2wuICAqLworZXh0ZXJuIHZvaWQgZGVjbGFyZV93ZWFrICh0cmVlKTsKKy8qIE1lcmdlIHdlYWsgc3RhdHVzLiAgKi8KK2V4dGVybiB2b2lkIG1lcmdlX3dlYWsgKHRyZWUsIHRyZWUpOworCisvKiBFbWl0IGFueSBwZW5kaW5nIHdlYWsgZGVjbGFyYXRpb25zLiAgKi8KK2V4dGVybiB2b2lkIHdlYWtfZmluaXNoICh2b2lkKTsKKworLyogRW1pdCBhbnkgcGVuZGluZyBlbXV0bHMgZGVjbGFyYXRpb25zIGFuZCBpbml0aWFsaXphdGlvbnMuICAqLworZXh0ZXJuIHZvaWQgZW11dGxzX2ZpbmlzaCAodm9pZCk7CisKKy8qIERlY29kZSBhbiBgYXNtJyBzcGVjIGZvciBhIGRlY2xhcmF0aW9uIGFzIGEgcmVnaXN0ZXIgbmFtZS4KKyAgIFJldHVybiB0aGUgcmVnaXN0ZXIgbnVtYmVyLCBvciAtMSBpZiBub3RoaW5nIHNwZWNpZmllZCwKKyAgIG9yIC0yIGlmIHRoZSBBU01TUEVDIGlzIG5vdCBgY2MnIG9yIGBtZW1vcnknIGFuZCBpcyBub3QgcmVjb2duaXplZCwKKyAgIG9yIC0zIGlmIEFTTVNQRUMgaXMgYGNjJyBhbmQgaXMgbm90IHJlY29nbml6ZWQsCisgICBvciAtNCBpZiBBU01TUEVDIGlzIGBtZW1vcnknIGFuZCBpcyBub3QgcmVjb2duaXplZC4KKyAgIEFjY2VwdCBhbiBleGFjdCBzcGVsbGluZyBvciBhIGRlY2ltYWwgbnVtYmVyLgorICAgUHJlZml4ZXMgc3VjaCBhcyAlIGFyZSBvcHRpb25hbC4gICovCitleHRlcm4gaW50IGRlY29kZV9yZWdfbmFtZSAoY29uc3QgY2hhciAqKTsKKworZXh0ZXJuIHZvaWQgYXNzZW1ibGVfYWxpYXMgKHRyZWUsIHRyZWUpOworCitleHRlcm4gdm9pZCBkZWZhdWx0X2Fzc2VtYmxlX3Zpc2liaWxpdHkgKHRyZWUsIGludCk7CisKKy8qIE91dHB1dCBhIHN0cmluZyBvZiBsaXRlcmFsIGFzc2VtYmxlciBjb2RlCisgICBmb3IgYW4gYGFzbScga2V5d29yZCB1c2VkIGJldHdlZW4gZnVuY3Rpb25zLiAgKi8KK2V4dGVybiB2b2lkIGFzc2VtYmxlX2FzbSAodHJlZSk7CisKKy8qIE91dHB1dCBhc3NlbWJsZXIgY29kZSBmb3IgdGhlIGNvbnN0YW50IHBvb2wgb2YgYSBmdW5jdGlvbiBhbmQgYXNzb2NpYXRlZAorICAgd2l0aCBkZWZpbmluZyB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24uICBERUNMIGRlc2NyaWJlcyB0aGUgZnVuY3Rpb24uCisgICBOQU1FIGlzIHRoZSBmdW5jdGlvbidzIG5hbWUuICBGb3IgdGhlIGNvbnN0YW50IHBvb2wsIHdlIHVzZSB0aGUgY3VycmVudAorICAgY29uc3RhbnQgcG9vbCBkYXRhLiAgKi8KK2V4dGVybiB2b2lkIGFzc2VtYmxlX3N0YXJ0X2Z1bmN0aW9uICh0cmVlLCBjb25zdCBjaGFyICopOworCisvKiBPdXRwdXQgYXNzZW1ibGVyIGNvZGUgYXNzb2NpYXRlZCB3aXRoIGRlZmluaW5nIHRoZSBzaXplIG9mIHRoZQorICAgZnVuY3Rpb24uICBERUNMIGRlc2NyaWJlcyB0aGUgZnVuY3Rpb24uICBOQU1FIGlzIHRoZSBmdW5jdGlvbidzIG5hbWUuICAqLworZXh0ZXJuIHZvaWQgYXNzZW1ibGVfZW5kX2Z1bmN0aW9uICh0cmVlLCBjb25zdCBjaGFyICopOworCisvKiBBc3NlbWJsZSBldmVyeXRoaW5nIHRoYXQgaXMgbmVlZGVkIGZvciBhIHZhcmlhYmxlIG9yIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgorICAgTm90IHVzZWQgZm9yIGF1dG9tYXRpYyB2YXJpYWJsZXMsIGFuZCBub3QgdXNlZCBmb3IgZnVuY3Rpb24gZGVmaW5pdGlvbnMuCisgICBTaG91bGQgbm90IGJlIGNhbGxlZCBmb3IgdmFyaWFibGVzIG9mIGluY29tcGxldGUgc3RydWN0dXJlIHR5cGUuCisKKyAgIFRPUF9MRVZFTCBpcyBub256ZXJvIGlmIHRoaXMgdmFyaWFibGUgaGFzIGZpbGUgc2NvcGUuCisgICBBVF9FTkQgaXMgbm9uemVybyBpZiB0aGlzIGlzIHRoZSBzcGVjaWFsIGhhbmRsaW5nLCBhdCBlbmQgb2YgY29tcGlsYXRpb24sCisgICB0byBkZWZpbmUgdGhpbmdzIHRoYXQgaGF2ZSBoYWQgb25seSB0ZW50YXRpdmUgZGVmaW5pdGlvbnMuCisgICBET05UX09VVFBVVF9EQVRBIGlmIG5vbnplcm8gbWVhbnMgZG9uJ3QgYWN0dWFsbHkgb3V0cHV0IHRoZQorICAgaW5pdGlhbCB2YWx1ZSAodGhhdCB3aWxsIGJlIGRvbmUgYnkgdGhlIGNhbGxlcikuICAqLworZXh0ZXJuIHZvaWQgYXNzZW1ibGVfdmFyaWFibGUgKHRyZWUsIGludCwgaW50LCBpbnQpOworCisvKiBDb21wdXRlIHRoZSBhbGlnbm1lbnQgb2YgdmFyaWFibGUgc3BlY2lmaWVkIGJ5IERFQ0wuCisgICBET05UX09VVFBVVF9EQVRBIGlzIGZyb20gYXNzZW1ibGVfdmFyaWFibGUuICAqLworZXh0ZXJuIHZvaWQgYWxpZ25fdmFyaWFibGUgKHRyZWUgZGVjbCwgYm9vbCBkb250X291dHB1dF9kYXRhKTsKKworLyogUXVldWUgZm9yIG91dHB1dHRpbmcgc29tZXRoaW5nIHRvIGRlY2xhcmUgYW4gZXh0ZXJuYWwgc3ltYm9sIHRvIHRoZQorICAgYXNzZW1ibGVyLiAgKE1vc3QgYXNzZW1ibGVycyBkb24ndCBuZWVkIHRoaXMsIHNvIHdlIG5vcm1hbGx5IG91dHB1dAorICAgbm90aGluZy4pICBEbyBub3RoaW5nIGlmIERFQ0wgaXMgbm90IGV4dGVybmFsLiAgKi8KK2V4dGVybiB2b2lkIGFzc2VtYmxlX2V4dGVybmFsICh0cmVlKTsKKworLyogQXNzZW1ibGUgY29kZSB0byBsZWF2ZSBTSVpFIGJ5dGVzIG9mIHplcm9zLiAgKi8KK2V4dGVybiB2b2lkIGFzc2VtYmxlX3plcm9zICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKTsKKworLyogQXNzZW1ibGUgYW4gYWxpZ25tZW50IHBzZXVkbyBvcCBmb3IgYW4gQUxJR04tYml0IGJvdW5kYXJ5LiAgKi8KK2V4dGVybiB2b2lkIGFzc2VtYmxlX2FsaWduIChpbnQpOworCisvKiBBc3NlbWJsZSBhIHN0cmluZyBjb25zdGFudCB3aXRoIHRoZSBzcGVjaWZpZWQgQyBzdHJpbmcgYXMgY29udGVudHMuICAqLworZXh0ZXJuIHZvaWQgYXNzZW1ibGVfc3RyaW5nIChjb25zdCBjaGFyICosIGludCk7CisKKy8qIFNpbWlsYXIsIGZvciBjYWxsaW5nIGEgbGlicmFyeSBmdW5jdGlvbiBGVU4uICAqLworZXh0ZXJuIHZvaWQgYXNzZW1ibGVfZXh0ZXJuYWxfbGliY2FsbCAocnR4KTsKKworLyogQXNzZW1ibGUgYSBsYWJlbCBuYW1lZCBOQU1FLiAgKi8KK2V4dGVybiB2b2lkIGFzc2VtYmxlX2xhYmVsIChjb25zdCBjaGFyICopOworCisvKiBPdXRwdXQgdG8gRklMRSAoYW4gYXNzZW1ibHkgZmlsZSkgYSByZWZlcmVuY2UgdG8gTkFNRS4gIElmIE5BTUUKKyAgIHN0YXJ0cyB3aXRoIGEgKiwgdGhlIHJlc3Qgb2YgTkFNRSBpcyBvdXRwdXQgdmVyYmF0aW0uICBPdGhlcndpc2UKKyAgIE5BTUUgaXMgdHJhbnNmb3JtZWQgaW4gYSB0YXJnZXQtc3BlY2lmaWMgd2F5ICh1c3VhbGx5IGJ5IHRoZQorICAgYWRkaXRpb24gb2YgYW4gdW5kZXJzY29yZSkuICAqLworZXh0ZXJuIHZvaWQgYXNzZW1ibGVfbmFtZV9yYXcgKEZJTEUgKiwgY29uc3QgY2hhciAqKTsKKworLyogTGlrZSBhc3NlbWJsZV9uYW1lX3JhdywgYnV0IHNob3VsZCBiZSB1c2VkIHdoZW4gTkFNRSBtaWdodCByZWZlciB0bworICAgYW4gZW50aXR5IHRoYXQgaXMgYWxzbyByZXByZXNlbnRlZCBhcyBhIHRyZWUgKGxpa2UgYSBmdW5jdGlvbiBvcgorICAgdmFyaWFibGUpLiAgSWYgTkFNRSBkb2VzIHJlZmVyIHRvIHN1Y2ggYW4gZW50aXR5LCB0aGF0IGVudGl0eSB3aWxsCisgICBiZSBtYXJrZWQgYXMgcmVmZXJlbmNlZC4gICovCitleHRlcm4gdm9pZCBhc3NlbWJsZV9uYW1lIChGSUxFICosIGNvbnN0IGNoYXIgKik7CisKKy8qIFJldHVybiB0aGUgYXNzZW1ibGVyIGRpcmVjdGl2ZSBmb3IgY3JlYXRpbmcgYSBnaXZlbiBraW5kIG9mIGludGVnZXIKKyAgIG9iamVjdC4gIFNJWkUgaXMgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgb2JqZWN0IGFuZCBBTElHTkVEX1AKKyAgIGluZGljYXRlcyB3aGV0aGVyIGl0IGlzIGtub3duIHRvIGJlIGFsaWduZWQuICBSZXR1cm4gTlVMTCBpZiB0aGUKKyAgIGFzc2VtYmx5IGRpYWxlY3QgaGFzIG5vIHN1Y2ggZGlyZWN0aXZlLgorCisgICBUaGUgcmV0dXJuZWQgc3RyaW5nIHNob3VsZCBiZSBwcmludGVkIGF0IHRoZSBzdGFydCBvZiBhIG5ldyBsaW5lIGFuZAorICAgYmUgZm9sbG93ZWQgaW1tZWRpYXRlbHkgYnkgdGhlIG9iamVjdCdzIGluaXRpYWwgdmFsdWUuICAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKmludGVnZXJfYXNtX29wIChpbnQsIGludCk7CisKKy8qIFVzZSBkaXJlY3RpdmUgT1AgdG8gYXNzZW1ibGUgYW4gaW50ZWdlciBvYmplY3QgWC4gIFByaW50IE9QIGF0IHRoZQorICAgc3RhcnQgb2YgdGhlIGxpbmUsIGZvbGxvd2VkIGltbWVkaWF0ZWx5IGJ5IHRoZSB2YWx1ZSBvZiBYLiAgKi8KK2V4dGVybiB2b2lkIGFzc2VtYmxlX2ludGVnZXJfd2l0aF9vcCAoY29uc3QgY2hhciAqLCBydHgpOworCisvKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYXNtX291dC5pbnRlZ2VyIHRhcmdldCBob29rLiAgKi8KK2V4dGVybiBib29sIGRlZmF1bHRfYXNzZW1ibGVfaW50ZWdlciAocnR4LCB1bnNpZ25lZCBpbnQsIGludCk7CisKKy8qIEFzc2VtYmxlIHRoZSBpbnRlZ2VyIGNvbnN0YW50IFggaW50byBhbiBvYmplY3Qgb2YgU0laRSBieXRlcy4gIEFMSUdOIGlzCisgICB0aGUgYWxpZ25tZW50IG9mIHRoZSBpbnRlZ2VyIGluIGJpdHMuICBSZXR1cm4gMSBpZiB3ZSB3ZXJlIGFibGUgdG8gb3V0cHV0CisgICB0aGUgY29uc3RhbnQsIG90aGVyd2lzZSAwLiAgSWYgRk9SQ0UgaXMgbm9uemVybyB0aGUgY29uc3RhbnQgbXVzdAorICAgYmUgb3V0cHV0YWJsZS4gKi8KK2V4dGVybiBib29sIGFzc2VtYmxlX2ludGVnZXIgKHJ0eCwgdW5zaWduZWQsIHVuc2lnbmVkLCBpbnQpOworCisvKiBBbiBpbnRlcmZhY2UgdG8gYXNzZW1ibGVfaW50ZWdlciBmb3IgdGhlIGNvbW1vbiBjYXNlIGluIHdoaWNoIGEgdmFsdWUgaXMKKyAgIGZ1bGx5IGFsaWduZWQgYW5kIG11c3QgYmUgcHJpbnRlZC4gIFZBTFVFIGlzIHRoZSB2YWx1ZSBvZiB0aGUgaW50ZWdlcgorICAgb2JqZWN0IGFuZCBTSVpFIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgaXQgY29udGFpbnMuICAqLworI2RlZmluZSBhc3NlbWJsZV9hbGlnbmVkX2ludGVnZXIoU0laRSwgVkFMVUUpIFwKKyAgYXNzZW1ibGVfaW50ZWdlciAoVkFMVUUsIFNJWkUsIChTSVpFKSAqIEJJVFNfUEVSX1VOSVQsIDEpCisKKyNpZmRlZiBSRUFMX1ZBTFVFX1RZUEVfU0laRQorLyogQXNzZW1ibGUgdGhlIGZsb2F0aW5nLXBvaW50IGNvbnN0YW50IEQgaW50byBhbiBvYmplY3Qgb2Ygc2l6ZSBNT0RFLiAgKi8KK2V4dGVybiB2b2lkIGFzc2VtYmxlX3JlYWwgKFJFQUxfVkFMVUVfVFlQRSwgZW51bSBtYWNoaW5lX21vZGUsIHVuc2lnbmVkKTsKKyNlbmRpZgorCisvKiBXcml0ZSB0aGUgYWRkcmVzcyBvZiB0aGUgZW50aXR5IGdpdmVuIGJ5IFNZTUJPTCB0byBTRUMuICAqLworZXh0ZXJuIHZvaWQgYXNzZW1ibGVfYWRkcl90b19zZWN0aW9uIChydHgsIHNlY3Rpb24gKik7CisKKy8qIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgY29uc3RhbnQgcG9vbC4gICovCitleHRlcm4gaW50IGdldF9wb29sX3NpemUgKHZvaWQpOworCisjaWZkZWYgSEFWRV9wZWVwaG9sZQorZXh0ZXJuIHJ0eCBwZWVwaG9sZSAocnR4KTsKKyNlbmRpZgorCitleHRlcm4gdm9pZCBvdXRwdXRfc2hhcmVkX2NvbnN0YW50X3Bvb2wgKHZvaWQpOworCitleHRlcm4gdm9pZCBvdXRwdXRfb2JqZWN0X2Jsb2NrcyAodm9pZCk7CisKKy8qIFdoZXRoZXIgYSBjb25zdHJ1Y3RvciBDVE9SIGlzIGEgdmFsaWQgc3RhdGljIGNvbnN0YW50IGluaXRpYWxpemVyIGlmIGFsbAorICAgaXRzIGVsZW1lbnRzIGFyZS4gIFRoaXMgdXNlZCB0byBiZSBpbnRlcm5hbCB0byBpbml0aWFsaXplcl9jb25zdGFudF92YWxpZF9wCisgICBhbmQgaGFzIGJlZW4gZXhwb3NlZCB0byBsZXQgb3RoZXIgZnVuY3Rpb25zIGxpa2UgY2F0ZWdvcml6ZV9jdG9yX2VsZW1lbnRzCisgICBldmFsdWF0ZSB0aGUgcHJvcGVydHkgd2hpbGUgd2Fsa2luZyBhIGNvbnN0cnVjdG9yIGZvciBvdGhlciBwdXJwb3Nlcy4gICovCisKK2V4dGVybiBib29sIGNvbnN0cnVjdG9yX3N0YXRpY19mcm9tX2VsdHNfcCAoY29uc3RfdHJlZSk7CisKKy8qIFJldHVybiBub256ZXJvIGlmIFZBTFVFIGlzIGEgdmFsaWQgY29uc3RhbnQtdmFsdWVkIGV4cHJlc3Npb24KKyAgIGZvciB1c2UgaW4gaW5pdGlhbGl6aW5nIGEgc3RhdGljIHZhcmlhYmxlOyBvbmUgdGhhdCBjYW4gYmUgYW4KKyAgIGVsZW1lbnQgb2YgYSAiY29uc3RhbnQiIGluaXRpYWxpemVyLgorCisgICBSZXR1cm4gbnVsbF9wb2ludGVyX25vZGUgaWYgdGhlIHZhbHVlIGlzIGFic29sdXRlOworICAgaWYgaXQgaXMgcmVsb2NhdGFibGUsIHJldHVybiB0aGUgdmFyaWFibGUgdGhhdCBkZXRlcm1pbmVzIHRoZSByZWxvY2F0aW9uLgorICAgV2UgYXNzdW1lIHRoYXQgVkFMVUUgaGFzIGJlZW4gZm9sZGVkIGFzIG11Y2ggYXMgcG9zc2libGU7CisgICB0aGVyZWZvcmUsIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIGZvciBzdWNoIHRoaW5ncyBhcworICAgYXJpdGhtZXRpYy1jb21iaW5hdGlvbnMgb2YgaW50ZWdlcnMuICAqLworZXh0ZXJuIHRyZWUgaW5pdGlhbGl6ZXJfY29uc3RhbnRfdmFsaWRfcCAodHJlZSwgdHJlZSk7CisKKy8qIFJldHVybiB0cnVlIGlmIFZBTFVFIGlzIGEgdmFsaWQgY29uc3RhbnQtdmFsdWVkIGV4cHJlc3Npb24KKyAgIGZvciB1c2UgaW4gaW5pdGlhbGl6aW5nIGEgc3RhdGljIGJpdC1maWVsZDsgb25lIHRoYXQgY2FuIGJlCisgICBhbiBlbGVtZW50IG9mIGEgImNvbnN0YW50IiBpbml0aWFsaXplci4gICovCitleHRlcm4gYm9vbCBpbml0aWFsaXplcl9jb25zdGFudF92YWxpZF9mb3JfYml0ZmllbGRfcCAodHJlZSk7CisKKy8qIE91dHB1dCBhc3NlbWJsZXIgY29kZSBmb3IgY29uc3RhbnQgRVhQIHRvIEZJTEUsIHdpdGggbm8gbGFiZWwuCisgICBUaGlzIGluY2x1ZGVzIHRoZSBwc2V1ZG8tb3Agc3VjaCBhcyAiLmludCIgb3IgIi5ieXRlIiwgYW5kIGEgbmV3bGluZS4KKyAgIEFzc3VtZXMgb3V0cHV0X2FkZHJlc3NlZF9jb25zdGFudHMgaGFzIGJlZW4gZG9uZSBvbiBFWFAgYWxyZWFkeS4KKworICAgR2VuZXJhdGUgZXhhY3RseSBTSVpFIGJ5dGVzIG9mIGFzc2VtYmxlciBkYXRhLCBwYWRkaW5nIGF0IHRoZSBlbmQKKyAgIHdpdGggemVyb3MgaWYgbmVjZXNzYXJ5LiAgU0laRSBtdXN0IGFsd2F5cyBiZSBzcGVjaWZpZWQuCisKKyAgIEFMSUdOIGlzIHRoZSBhbGlnbm1lbnQgaW4gYml0cyB0aGF0IG1heSBiZSBhc3N1bWVkIGZvciB0aGUgZGF0YS4gICovCitleHRlcm4gdm9pZCBvdXRwdXRfY29uc3RhbnQgKHRyZWUsIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQsIHVuc2lnbmVkIGludCk7CisKKy8qIFdoZW4gb3V0cHV0dGluZyBkZWxheWVkIGJyYW5jaCBzZXF1ZW5jZXMsIHRoaXMgcnR4IGhvbGRzIHRoZQorICAgc2VxdWVuY2UgYmVpbmcgb3V0cHV0LiAgSXQgaXMgbnVsbCB3aGVuIG5vIGRlbGF5ZWQgYnJhbmNoCisgICBzZXF1ZW5jZSBpcyBiZWluZyBvdXRwdXQsIHNvIGl0IGNhbiBiZSB1c2VkIGFzIGEgdGVzdCBpbiB0aGUKKyAgIGluc24gb3V0cHV0IGNvZGUuCisKKyAgIFRoaXMgdmFyaWFibGUgaXMgZGVmaW5lZCAgaW4gZmluYWwuYy4gICovCitleHRlcm4gcnR4IGZpbmFsX3NlcXVlbmNlOworCisvKiBUaGUgbGluZSBudW1iZXIgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi4gIFZhcmlvdXMKKyAgIG1kIGNvZGUgbmVlZHMgdGhpcyBzbyB0aGF0IGl0IGNhbiBvdXRwdXQgcmVsYXRpdmUgbGluZW51bWJlcnMuICAqLworCisjaWZkZWYgU0RCX0RFQlVHR0lOR19JTkZPIC8qIEF2b2lkIHVuZGVmIHN5bSBpbiBjZXJ0YWluIGJyb2tlbiBsaW5rZXJzLiAgKi8KK2V4dGVybiBpbnQgc2RiX2JlZ2luX2Z1bmN0aW9uX2xpbmU7CisjZW5kaWYKKworLyogRmlsZSBpbiB3aGljaCBhc3NlbWJsZXIgY29kZSBpcyBiZWluZyB3cml0dGVuLiAgKi8KKworI2lmZGVmIEJVRlNJWgorZXh0ZXJuIEZJTEUgKmFzbV9vdXRfZmlsZTsKKyNlbmRpZgorCisvKiBUaGUgZmlyc3QgZ2xvYmFsIG9iamVjdCBpbiB0aGUgZmlsZS4gICovCitleHRlcm4gY29uc3QgY2hhciAqZmlyc3RfZ2xvYmFsX29iamVjdF9uYW1lOworCisvKiBUaGUgZmlyc3Qgd2VhayBvYmplY3QgaW4gdGhlIGZpbGUuICAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKndlYWtfZ2xvYmFsX29iamVjdF9uYW1lOworCisvKiBOb256ZXJvIGlmIGZ1bmN0aW9uIGJlaW5nIGNvbXBpbGVkIGRvZXNuJ3QgY29udGFpbiBhbnkgY2FsbHMKKyAgIChpZ25vcmluZyB0aGUgcHJvbG9ndWUgYW5kIGVwaWxvZ3VlKS4gIFRoaXMgaXMgc2V0IHByaW9yIHRvCisgICBsb2NhbCByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBpcyB2YWxpZCBmb3IgdGhlIHJlbWFpbmluZworICAgY29tcGlsZXIgcGFzc2VzLiAgKi8KKworZXh0ZXJuIGludCBjdXJyZW50X2Z1bmN0aW9uX2lzX2xlYWY7CisKKy8qIE5vbnplcm8gaWYgZnVuY3Rpb24gYmVpbmcgY29tcGlsZWQgZG9lc24ndCBtb2RpZnkgdGhlIHN0YWNrIHBvaW50ZXIKKyAgIChpZ25vcmluZyB0aGUgcHJvbG9ndWUgYW5kIGVwaWxvZ3VlKS4gIFRoaXMgaXMgb25seSB2YWxpZCBhZnRlcgorICAgcGFzc19zdGFja19wdHJfbW9kIGhhcyBydW4uICAqLworCitleHRlcm4gaW50IGN1cnJlbnRfZnVuY3Rpb25fc3BfaXNfdW5jaGFuZ2luZzsKKworLyogTm9uemVybyBpZiB0aGUgZnVuY3Rpb24gYmVpbmcgY29tcGlsZWQgaXMgYSBsZWFmIGZ1bmN0aW9uIHdoaWNoIG9ubHkKKyAgIHVzZXMgbGVhZiByZWdpc3RlcnMuICBUaGlzIGlzIHZhbGlkIGFmdGVyIHJlbG9hZCAoc3BlY2lmaWNhbGx5IGFmdGVyCisgICBzY2hlZDIpIGFuZCBpcyB1c2VmdWwgb25seSBpZiB0aGUgcG9ydCBkZWZpbmVzIExFQUZfUkVHSVNURVJTLiAgKi8KKworZXh0ZXJuIGludCBjdXJyZW50X2Z1bmN0aW9uX3VzZXNfb25seV9sZWFmX3JlZ3M7CisKKy8qIERlZmF1bHQgZmlsZSBpbiB3aGljaCB0byBkdW1wIGRlYnVnIG91dHB1dC4gICovCisKKyNpZmRlZiBCVUZTSVoKK2V4dGVybiBGSUxFICpkdW1wX2ZpbGU7CisjZW5kaWYKKworLyogTm9ubnVsbCBpZiB0aGUgaW5zbiBjdXJyZW50bHkgYmVpbmcgZW1pdHRlZCB3YXMgYSBDT05EX0VYRUMgcGF0dGVybi4gICovCitleHRlcm4gcnR4IGN1cnJlbnRfaW5zbl9wcmVkaWNhdGU7CisKKy8qIExhc3QgaW5zbiBwcm9jZXNzZWQgYnkgZmluYWxfc2Nhbl9pbnNuLiAgKi8KK2V4dGVybiBydHggY3VycmVudF9vdXRwdXRfaW5zbjsKKworLyogTm9uemVybyB3aGlsZSBvdXRwdXR0aW5nIGFuIGBhc20nIHdpdGggb3BlcmFuZHMuCisgICBUaGlzIG1lYW5zIHRoYXQgaW5jb25zaXN0ZW5jaWVzIGFyZSB0aGUgdXNlcidzIGZhdWx0LCBzbyBkb24ndCBkaWUuCisgICBUaGUgcHJlY2lzZSB2YWx1ZSBpcyB0aGUgaW5zbiBiZWluZyBvdXRwdXQsIHRvIHBhc3MgdG8gZXJyb3JfZm9yX2FzbS4gICovCitleHRlcm4gcnR4IHRoaXNfaXNfYXNtX29wZXJhbmRzOworCisvKiBDYXJyeSBpbmZvcm1hdGlvbiBmcm9tIEFTTV9ERUNMQVJFX09CSkVDVF9OQU1FCisgICB0byBBU01fRklOSVNIX0RFQ0xBUkVfT0JKRUNULiAgKi8KK2V4dGVybiBpbnQgc2l6ZV9kaXJlY3RpdmVfb3V0cHV0OworZXh0ZXJuIHRyZWUgbGFzdF9hc3NlbWJsZV92YXJpYWJsZV9kZWNsOworCitleHRlcm4gYm9vbCBmaXJzdF9mdW5jdGlvbl9ibG9ja19pc19jb2xkOworCisvKiBEZWNpZGUgd2hldGhlciBERUNMIG5lZWRzIHRvIGJlIGluIGEgd3JpdGFibGUgc2VjdGlvbi4KKyAgIFJFTE9DIGlzIHRoZSBzYW1lIGFzIGZvciBTRUxFQ1RfU0VDVElPTi4gICovCitleHRlcm4gYm9vbCBkZWNsX3JlYWRvbmx5X3NlY3Rpb24gKGNvbnN0X3RyZWUsIGludCk7CisKKy8qIFRoaXMgY2FuIGJlIHVzZWQgdG8gY29tcHV0ZSBSRUxPQyBmb3IgdGhlIGZ1bmN0aW9uIGFib3ZlLCB3aGVuCisgICBnaXZlbiBhIGNvbnN0YW50IGV4cHJlc3Npb24uICAqLworZXh0ZXJuIGludCBjb21wdXRlX3JlbG9jX2Zvcl9jb25zdGFudCAodHJlZSk7CisKKy8qIFVzZXIgbGFiZWwgcHJlZml4IGluIGVmZmVjdCBmb3IgdGhpcyBjb21waWxhdGlvbi4gICovCitleHRlcm4gY29uc3QgY2hhciAqdXNlcl9sYWJlbF9wcmVmaXg7CisKKy8qIERlZmF1bHQgdGFyZ2V0IGZ1bmN0aW9uIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSBhc3NlbWJsZXIgb3V0cHV0LiAgKi8KK2V4dGVybiB2b2lkIGRlZmF1bHRfZnVuY3Rpb25fcHJvX2VwaWxvZ3VlIChGSUxFICosIEhPU1RfV0lERV9JTlQpOworCisvKiBEZWZhdWx0IHRhcmdldCBob29rIHRoYXQgb3V0cHV0cyBub3RoaW5nIHRvIGEgc3RyZWFtLiAgKi8KK2V4dGVybiB2b2lkIG5vX2FzbV90b19zdHJlYW0gKEZJTEUgKik7CisKKy8qIEZsYWdzIGNvbnRyb2xsaW5nIHByb3BlcnRpZXMgb2YgYSBzZWN0aW9uLiAgKi8KKyNkZWZpbmUgU0VDVElPTl9FTlRTSVpFCSAweDAwMGZmCS8qIGVudGl0eSBzaXplIGluIHNlY3Rpb24gKi8KKyNkZWZpbmUgU0VDVElPTl9DT0RFCSAweDAwMTAwCS8qIGNvbnRhaW5zIGNvZGUgKi8KKyNkZWZpbmUgU0VDVElPTl9XUklURQkgMHgwMDIwMAkvKiBkYXRhIGlzIHdyaXRhYmxlICovCisjZGVmaW5lIFNFQ1RJT05fREVCVUcJIDB4MDA0MDAJLyogY29udGFpbnMgZGVidWcgZGF0YSAqLworI2RlZmluZSBTRUNUSU9OX0xJTktPTkNFIDB4MDA4MDAJLyogaXMgbGlua29uY2UgKi8KKyNkZWZpbmUgU0VDVElPTl9TTUFMTAkgMHgwMTAwMAkvKiBjb250YWlucyAic21hbGwgZGF0YSIgKi8KKyNkZWZpbmUgU0VDVElPTl9CU1MJIDB4MDIwMDAJLyogY29udGFpbnMgemVyb3Mgb25seSAqLworI2RlZmluZSBTRUNUSU9OX0ZPUkdFVAkgMHgwNDAwMAkvKiBmb3JnZXQgdGhhdCB3ZSd2ZSBlbnRlcmVkIHRoZSBzZWN0aW9uICovCisjZGVmaW5lIFNFQ1RJT05fTUVSR0UJIDB4MDgwMDAJLyogY29udGFpbnMgbWVyZ2VhYmxlIGRhdGEgKi8KKyNkZWZpbmUgU0VDVElPTl9TVFJJTkdTICAweDEwMDAwCS8qIGNvbnRhaW5zIHplcm8gdGVybWluYXRlZCBzdHJpbmdzIHdpdGhvdXQKKwkJCQkJICAgZW1iZWRkZWQgemVyb3MgKi8KKyNkZWZpbmUgU0VDVElPTl9PVkVSUklERSAweDIwMDAwCS8qIGFsbG93IG92ZXJyaWRlIG9mIGRlZmF1bHQgZmxhZ3MgKi8KKyNkZWZpbmUgU0VDVElPTl9UTFMJIDB4NDAwMDAJLyogY29udGFpbnMgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgKi8KKyNkZWZpbmUgU0VDVElPTl9OT1RZUEUJIDB4ODAwMDAJLyogZG9uJ3Qgb3V0cHV0IEBwcm9nYml0cyAqLworI2RlZmluZSBTRUNUSU9OX0RFQ0xBUkVEIDB4MTAwMDAwCS8qIHNlY3Rpb24gaGFzIGJlZW4gdXNlZCAqLworI2RlZmluZSBTRUNUSU9OX1NUWUxFX01BU0sgMHg2MDAwMDAJLyogYml0cyB1c2VkIGZvciBTRUNUSU9OX1NUWUxFICovCisjZGVmaW5lIFNFQ1RJT05fQ09NTU9OICAgMHg4MDAwMDAJLyogY29udGFpbnMgY29tbW9uIGRhdGEgKi8KKyNkZWZpbmUgU0VDVElPTl9NQUNIX0RFUCAweDEwMDAwMDAJLyogc3Vic2VxdWVudCBiaXRzIHJlc2VydmVkIGZvciB0YXJnZXQgKi8KKworLyogVGhpcyBTRUNUSU9OX1NUWUxFIGlzIHVzZWQgZm9yIHVubmFtZWQgc2VjdGlvbnMgdGhhdCB3ZSBjYW4gc3dpdGNoCisgICB0byB1c2luZyBhIHNwZWNpYWwgYXNzZW1ibGVyIGRpcmVjdGl2ZS4gICovCisjZGVmaW5lIFNFQ1RJT05fVU5OQU1FRAkgMHgwMDAwMDAKKworLyogVGhpcyBTRUNUSU9OX1NUWUxFIGlzIHVzZWQgZm9yIG5hbWVkIHNlY3Rpb25zIHRoYXQgd2UgY2FuIHN3aXRjaAorICAgdG8gdXNpbmcgYSBnZW5lcmFsIHNlY3Rpb24gZGlyZWN0aXZlLiAgKi8KKyNkZWZpbmUgU0VDVElPTl9OQU1FRAkgMHgyMDAwMDAKKworLyogVGhpcyBTRUNUSU9OX1NUWUxFIGlzIHVzZWQgZm9yIHNlY3Rpb25zIHRoYXQgd2UgY2Fubm90IHN3aXRjaCB0byBhdAorICAgYWxsLiAgVGhlIGNob2ljZSBvZiBzZWN0aW9uIGlzIGltcGxpZWQgYnkgdGhlIGRpcmVjdGl2ZSB0aGF0IHdlIHVzZQorICAgdG8gZGVjbGFyZSB0aGUgb2JqZWN0LiAgKi8KKyNkZWZpbmUgU0VDVElPTl9OT1NXSVRDSCAweDQwMDAwMAorCisvKiBBIGhlbHBlciBmdW5jdGlvbiBmb3IgZGVmYXVsdF9lbGZfc2VsZWN0X3NlY3Rpb24gYW5kCisgICBkZWZhdWx0X2VsZl91bmlxdWVfc2VjdGlvbi4gIENhdGVnb3JpemVzIHRoZSBERUNMLiAgKi8KKworZW51bSBzZWN0aW9uX2NhdGVnb3J5Cit7CisgIFNFQ0NBVF9URVhULAorCisgIFNFQ0NBVF9ST0RBVEEsCisgIFNFQ0NBVF9ST0RBVEFfTUVSR0VfU1RSLAorICBTRUNDQVRfUk9EQVRBX01FUkdFX1NUUl9JTklULAorICBTRUNDQVRfUk9EQVRBX01FUkdFX0NPTlNULAorICBTRUNDQVRfU1JPREFUQSwKKworICBTRUNDQVRfREFUQSwKKworICAvKiBUbyBvcHRpbWl6ZSBsb2FkaW5nIG9mIHNoYXJlZCBwcm9ncmFtcywgZGVmaW5lIGZvbGxvd2luZyBzdWJzZWN0aW9ucworICAgICBvZiBkYXRhIHNlY3Rpb246CisJX1JFTAlDb250YWlucyBkYXRhIHRoYXQgaGFzIHJlbG9jYXRpb25zLCBzbyB0aGV5IGdldCBncm91cGVkCisJCXRvZ2V0aGVyIGFuZCBkeW5hbWljIGxpbmtlciB3aWxsIHZpc2l0IGZld2VyIHBhZ2VzIGluIG1lbW9yeS4KKwlfUk8JQ29udGFpbnMgZGF0YSB0aGF0IGlzIG90aGVyd2lzZSByZWFkLW9ubHkuICBUaGlzIGlzIHVzZWZ1bAorCQl3aXRoIHByZWxpbmtpbmcgYXMgbW9zdCByZWxvY2F0aW9ucyB3b24ndCBiZSBkeW5hbWljYWxseQorCQlsaW5rZWQgYW5kIHRodXMgc3RheSByZWFkIG9ubHkuCisJX0xPQ0FMCU1hcmtzIGRhdGEgY29udGFpbmluZyByZWxvY2F0aW9ucyBvbmx5IHRvIGxvY2FsIG9iamVjdHMuCisJCVRoZXNlIHJlbG9jYXRpb25zIHdpbGwgZ2V0IGZ1bGx5IHJlc29sdmVkIGJ5IHByZWxpbmtpbmcuICAqLworICBTRUNDQVRfREFUQV9SRUwsCisgIFNFQ0NBVF9EQVRBX1JFTF9MT0NBTCwKKyAgU0VDQ0FUX0RBVEFfUkVMX1JPLAorICBTRUNDQVRfREFUQV9SRUxfUk9fTE9DQUwsCisKKyAgU0VDQ0FUX1NEQVRBLAorICBTRUNDQVRfVERBVEEsCisKKyAgU0VDQ0FUX0JTUywKKyAgU0VDQ0FUX1NCU1MsCisgIFNFQ0NBVF9UQlNTLAorCisgIFNFQ0NBVF9FTVVUTFNfVkFSLAorICBTRUNDQVRfRU1VVExTX1RNUEwKK307CisKKy8qIEluZm9ybWF0aW9uIHRoYXQgaXMgcHJvdmlkZWQgYnkgYWxsIGluc3RhbmNlcyBvZiB0aGUgc2VjdGlvbiB0eXBlLiAgKi8KK3N0cnVjdCBHVFkoKCkpIHNlY3Rpb25fY29tbW9uIHsKKyAgLyogVGhlIHNldCBvZiBTRUNUSU9OXyogZmxhZ3MgdGhhdCBhcHBseSB0byB0aGlzIHNlY3Rpb24uICAqLworICB1bnNpZ25lZCBpbnQgZmxhZ3M7Cit9OworCisvKiBJbmZvcm1hdGlvbiBhYm91dCBhIFNFQ1RJT05fTkFNRUQgc2VjdGlvbi4gICovCitzdHJ1Y3QgR1RZKCgpKSBuYW1lZF9zZWN0aW9uIHsKKyAgc3RydWN0IHNlY3Rpb25fY29tbW9uIGNvbW1vbjsKKworICAvKiBUaGUgbmFtZSBvZiB0aGUgc2VjdGlvbi4gICovCisgIGNvbnN0IGNoYXIgKm5hbWU7CisKKyAgLyogSWYgbm9ubnVsbCwgdGhlIFZBUl9ERUNMIG9yIEZVTkNUSU9OX0RFQ0wgd2l0aCB3aGljaCB0aGUKKyAgICAgc2VjdGlvbiBpcyBhc3NvY2lhdGVkLiAgKi8KKyAgdHJlZSBkZWNsOworfTsKKworLyogQSBjYWxsYmFjayB0aGF0IHdyaXRlcyB0aGUgYXNzZW1ibHkgY29kZSBmb3Igc3dpdGNoaW5nIHRvIGFuIHVubmFtZWQKKyAgIHNlY3Rpb24uICBUaGUgYXJndW1lbnQgcHJvdmlkZXMgY2FsbGJhY2stc3BlY2lmaWMgZGF0YS4gICovCit0eXBlZGVmIHZvaWQgKCp1bm5hbWVkX3NlY3Rpb25fY2FsbGJhY2spIChjb25zdCB2b2lkICopOworCisvKiBJbmZvcm1hdGlvbiBhYm91dCBhIFNFQ1RJT05fVU5OQU1FRCBzZWN0aW9uLiAgKi8KK3N0cnVjdCBHVFkoKCkpIHVubmFtZWRfc2VjdGlvbiB7CisgIHN0cnVjdCBzZWN0aW9uX2NvbW1vbiBjb21tb247CisKKyAgLyogVGhlIGNhbGxiYWNrIHVzZWQgdG8gc3dpdGNoIHRvIHRoZSBzZWN0aW9uLCBhbmQgdGhlIGRhdGEgdGhhdAorICAgICBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjay4gICovCisgIHVubmFtZWRfc2VjdGlvbl9jYWxsYmFjayBHVFkgKChza2lwKSkgY2FsbGJhY2s7CisgIGNvbnN0IHZvaWQgKkdUWSAoKHNraXApKSBkYXRhOworCisgIC8qIFRoZSBuZXh0IGVudHJ5IGluIHRoZSBjaGFpbiBvZiB1bm5hbWVkIHNlY3Rpb25zLiAgKi8KKyAgc2VjdGlvbiAqbmV4dDsKK307CisKKy8qIEEgY2FsbGJhY2sgdGhhdCB3cml0ZXMgdGhlIGFzc2VtYmx5IGNvZGUgZm9yIGEgZGVjbCBpbiBhCisgICBTRUNUSU9OX05PU1dJVENIIHNlY3Rpb24uICBERUNMIGlzIHRoZSBkZWNsIHRoYXQgc2hvdWxkIGJlIGFzc2VtYmxlZAorICAgYW5kIE5BTUUgaXMgdGhlIG5hbWUgb2YgaXRzIFNZTUJPTF9SRUYuICBTSVpFIGlzIHRoZSBzaXplIG9mIHRoZSBkZWNsCisgICBpbiBieXRlcyBhbmQgUk9VTkRFRCBpcyB0aGF0IHNpemUgcm91bmRlZCB1cCB0byB0aGUgbmV4dAorICAgQklHR0VTVF9BTElHTk1FTlQgLyBCSVRTX1BFUl9VTklUIGJvdW5kYXJ5LgorCisgICBSZXR1cm4gdHJ1ZSBpZiB0aGUgY2FsbGJhY2sgdXNlZCBERUNMX0FMSUdOIHRvIHNldCB0aGUgb2JqZWN0J3MKKyAgIGFsaWdubWVudC4gIEEgZmFsc2UgcmV0dXJuIHZhbHVlIGltcGxpZXMgdGhhdCB3ZSBhcmUgcmVseWluZworICAgb24gdGhlIHJvdW5kZWQgc2l6ZSB0byBhbGlnbiB0aGUgZGVjbC4gICovCit0eXBlZGVmIGJvb2wgKCpub3N3aXRjaF9zZWN0aW9uX2NhbGxiYWNrKSAodHJlZSBkZWNsLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkgICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIHNpemUsCisJCQkJCSAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgcm91bmRlZCk7CisKKy8qIEluZm9ybWF0aW9uIGFib3V0IGEgU0VDVElPTl9OT1NXSVRDSCBzZWN0aW9uLiAgKi8KK3N0cnVjdCBHVFkoKCkpIG5vc3dpdGNoX3NlY3Rpb24geworICBzdHJ1Y3Qgc2VjdGlvbl9jb21tb24gY29tbW9uOworCisgIC8qIFRoZSBjYWxsYmFjayB1c2VkIHRvIGFzc2VtYmxlIGRlY2xzIGluIHRoaXMgc2VjdGlvbi4gICovCisgIG5vc3dpdGNoX3NlY3Rpb25fY2FsbGJhY2sgR1RZICgoc2tpcCkpIGNhbGxiYWNrOworfTsKKworLyogSW5mb3JtYXRpb24gYWJvdXQgYSBzZWN0aW9uLCB3aGljaCBtYXkgYmUgbmFtZWQgb3IgdW5uYW1lZC4gICovCit1bmlvbiBHVFkgKChkZXNjICgiU0VDVElPTl9TVFlMRSAoJiglaCkpIikpKSBzZWN0aW9uIHsKKyAgc3RydWN0IHNlY3Rpb25fY29tbW9uIEdUWSAoKHNraXApKSBjb21tb247CisgIHN0cnVjdCBuYW1lZF9zZWN0aW9uIEdUWSAoKHRhZyAoIlNFQ1RJT05fTkFNRUQiKSkpIG5hbWVkOworICBzdHJ1Y3QgdW5uYW1lZF9zZWN0aW9uIEdUWSAoKHRhZyAoIlNFQ1RJT05fVU5OQU1FRCIpKSkgdW5uYW1lZDsKKyAgc3RydWN0IG5vc3dpdGNoX3NlY3Rpb24gR1RZICgodGFnICgiU0VDVElPTl9OT1NXSVRDSCIpKSkgbm9zd2l0Y2g7Cit9OworCisvKiBSZXR1cm4gdGhlIHN0eWxlIG9mIHNlY3Rpb24gU0VDVC4gICovCisjZGVmaW5lIFNFQ1RJT05fU1RZTEUoU0VDVCkgKChTRUNUKS0+Y29tbW9uLmZsYWdzICYgU0VDVElPTl9TVFlMRV9NQVNLKQorCitzdHJ1Y3Qgb2JqZWN0X2Jsb2NrOworCisvKiBTcGVjaWFsIHdlbGwta25vd24gc2VjdGlvbnMuICAqLworZXh0ZXJuIEdUWSgoKSkgc2VjdGlvbiAqdGV4dF9zZWN0aW9uOworZXh0ZXJuIEdUWSgoKSkgc2VjdGlvbiAqZGF0YV9zZWN0aW9uOworZXh0ZXJuIEdUWSgoKSkgc2VjdGlvbiAqcmVhZG9ubHlfZGF0YV9zZWN0aW9uOworZXh0ZXJuIEdUWSgoKSkgc2VjdGlvbiAqc2RhdGFfc2VjdGlvbjsKK2V4dGVybiBHVFkoKCkpIHNlY3Rpb24gKmN0b3JzX3NlY3Rpb247CitleHRlcm4gR1RZKCgpKSBzZWN0aW9uICpkdG9yc19zZWN0aW9uOworZXh0ZXJuIEdUWSgoKSkgc2VjdGlvbiAqYnNzX3NlY3Rpb247CitleHRlcm4gR1RZKCgpKSBzZWN0aW9uICpzYnNzX3NlY3Rpb247CitleHRlcm4gR1RZKCgpKSBzZWN0aW9uICpleGNlcHRpb25fc2VjdGlvbjsKK2V4dGVybiBHVFkoKCkpIHNlY3Rpb24gKmVoX2ZyYW1lX3NlY3Rpb247CitleHRlcm4gR1RZKCgpKSBzZWN0aW9uICp0bHNfY29tbV9zZWN0aW9uOworZXh0ZXJuIEdUWSgoKSkgc2VjdGlvbiAqY29tbV9zZWN0aW9uOworZXh0ZXJuIEdUWSgoKSkgc2VjdGlvbiAqbGNvbW1fc2VjdGlvbjsKK2V4dGVybiBHVFkoKCkpIHNlY3Rpb24gKmJzc19ub3N3aXRjaF9zZWN0aW9uOworCitleHRlcm4gR1RZKCgpKSBzZWN0aW9uICppbl9zZWN0aW9uOworZXh0ZXJuIEdUWSgoKSkgYm9vbCBpbl9jb2xkX3NlY3Rpb25fcDsKKworZXh0ZXJuIHNlY3Rpb24gKmdldF91bm5hbWVkX3NlY3Rpb24gKHVuc2lnbmVkIGludCwgdm9pZCAoKikgKGNvbnN0IHZvaWQgKiksCisJCQkJICAgICBjb25zdCB2b2lkICopOworZXh0ZXJuIHNlY3Rpb24gKmdldF9zZWN0aW9uIChjb25zdCBjaGFyICosIHVuc2lnbmVkIGludCwgdHJlZSk7CitleHRlcm4gc2VjdGlvbiAqZ2V0X25hbWVkX3NlY3Rpb24gKHRyZWUsIGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiB2b2lkIHBsYWNlX2Jsb2NrX3N5bWJvbCAocnR4KTsKK2V4dGVybiBydHggZ2V0X3NlY3Rpb25fYW5jaG9yIChzdHJ1Y3Qgb2JqZWN0X2Jsb2NrICosIEhPU1RfV0lERV9JTlQsCisJCQkgICAgICAgZW51bSB0bHNfbW9kZWwpOworZXh0ZXJuIHNlY3Rpb24gKm1lcmdlYWJsZV9jb25zdGFudF9zZWN0aW9uIChlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCQkJICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHNlY3Rpb24gKmZ1bmN0aW9uX3NlY3Rpb24gKHRyZWUpOworZXh0ZXJuIHNlY3Rpb24gKnVubGlrZWx5X3RleHRfc2VjdGlvbiAodm9pZCk7CitleHRlcm4gc2VjdGlvbiAqY3VycmVudF9mdW5jdGlvbl9zZWN0aW9uICh2b2lkKTsKKworLyogUmV0dXJuIHRoZSBudW1iZXJlZCAuY3RvcnMuTiAoaWYgQ09OU1RSVUNUT1JfUCkgb3IgLmR0b3JzLk4gKGlmCisgICBub3QpIHNlY3Rpb24gZm9yIFBSSU9SSVRZLiAgKi8KK2V4dGVybiBzZWN0aW9uICpnZXRfY2R0b3JfcHJpb3JpdHlfc2VjdGlvbiAoaW50LCBib29sKTsKKworZXh0ZXJuIGJvb2wgdW5saWtlbHlfdGV4dF9zZWN0aW9uX3AgKHNlY3Rpb24gKik7CitleHRlcm4gdm9pZCBzd2l0Y2hfdG9fc2VjdGlvbiAoc2VjdGlvbiAqKTsKK2V4dGVybiB2b2lkIG91dHB1dF9zZWN0aW9uX2FzbV9vcCAoY29uc3Qgdm9pZCAqKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBkZWZhdWx0X3NlY3Rpb25fdHlwZV9mbGFncyAodHJlZSwgY29uc3QgY2hhciAqLCBpbnQpOworCitleHRlcm4gYm9vbCBoYXZlX2dsb2JhbF9ic3NfcCAodm9pZCk7CitleHRlcm4gdm9pZCBkZWZhdWx0X25vX25hbWVkX3NlY3Rpb24gKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50LCB0cmVlKTsKK2V4dGVybiB2b2lkIGRlZmF1bHRfZWxmX2FzbV9uYW1lZF9zZWN0aW9uIChjb25zdCBjaGFyICosIHVuc2lnbmVkIGludCwgdHJlZSk7CitleHRlcm4gZW51bSBzZWN0aW9uX2NhdGVnb3J5IGNhdGVnb3JpemVfZGVjbF9mb3Jfc2VjdGlvbiAoY29uc3RfdHJlZSwgaW50KTsKK2V4dGVybiB2b2lkIGRlZmF1bHRfY29mZl9hc21fbmFtZWRfc2VjdGlvbiAoY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQsIHRyZWUpOworZXh0ZXJuIHZvaWQgZGVmYXVsdF9wZV9hc21fbmFtZWRfc2VjdGlvbiAoY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQsIHRyZWUpOworCitleHRlcm4gdm9pZCBkZWZhdWx0X3N0YWJzX2FzbV9vdXRfZGVzdHJ1Y3RvciAocnR4LCBpbnQpOworZXh0ZXJuIHZvaWQgZGVmYXVsdF9uYW1lZF9zZWN0aW9uX2FzbV9vdXRfZGVzdHJ1Y3RvciAocnR4LCBpbnQpOworZXh0ZXJuIHZvaWQgZGVmYXVsdF9kdG9yX3NlY3Rpb25fYXNtX291dF9kZXN0cnVjdG9yIChydHgsIGludCk7CitleHRlcm4gdm9pZCBkZWZhdWx0X3N0YWJzX2FzbV9vdXRfY29uc3RydWN0b3IgKHJ0eCwgaW50KTsKK2V4dGVybiB2b2lkIGRlZmF1bHRfbmFtZWRfc2VjdGlvbl9hc21fb3V0X2NvbnN0cnVjdG9yIChydHgsIGludCk7CitleHRlcm4gdm9pZCBkZWZhdWx0X2N0b3Jfc2VjdGlvbl9hc21fb3V0X2NvbnN0cnVjdG9yIChydHgsIGludCk7CisKK2V4dGVybiBzZWN0aW9uICpkZWZhdWx0X3NlbGVjdF9zZWN0aW9uICh0cmVlLCBpbnQsIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpOworZXh0ZXJuIHNlY3Rpb24gKmRlZmF1bHRfZWxmX3NlbGVjdF9zZWN0aW9uICh0cmVlLCBpbnQsIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpOworZXh0ZXJuIHZvaWQgZGVmYXVsdF91bmlxdWVfc2VjdGlvbiAodHJlZSwgaW50KTsKK2V4dGVybiBzZWN0aW9uICpkZWZhdWx0X2Z1bmN0aW9uX3JvZGF0YV9zZWN0aW9uICh0cmVlKTsKK2V4dGVybiBzZWN0aW9uICpkZWZhdWx0X25vX2Z1bmN0aW9uX3JvZGF0YV9zZWN0aW9uICh0cmVlKTsKK2V4dGVybiBzZWN0aW9uICpkZWZhdWx0X3NlbGVjdF9ydHhfc2VjdGlvbiAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwKKwkJCQkJICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpOworZXh0ZXJuIHNlY3Rpb24gKmRlZmF1bHRfZWxmX3NlbGVjdF9ydHhfc2VjdGlvbiAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwKKwkJCQkJCXVuc2lnbmVkIEhPU1RfV0lERV9JTlQpOworZXh0ZXJuIHZvaWQgZGVmYXVsdF9lbmNvZGVfc2VjdGlvbl9pbmZvICh0cmVlLCBydHgsIGludCk7CitleHRlcm4gY29uc3QgY2hhciAqZGVmYXVsdF9zdHJpcF9uYW1lX2VuY29kaW5nIChjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgZGVmYXVsdF9hc21fb3V0cHV0X2FuY2hvciAocnR4KTsKK2V4dGVybiBib29sIGRlZmF1bHRfdXNlX2FuY2hvcnNfZm9yX3N5bWJvbF9wIChjb25zdF9ydHgpOworZXh0ZXJuIGJvb2wgZGVmYXVsdF9iaW5kc19sb2NhbF9wIChjb25zdF90cmVlKTsKK2V4dGVybiBib29sIGRlZmF1bHRfYmluZHNfbG9jYWxfcF8xIChjb25zdF90cmVlLCBpbnQpOworZXh0ZXJuIHZvaWQgZGVmYXVsdF9nbG9iYWxpemVfbGFiZWwgKEZJTEUgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIGRlZmF1bHRfZ2xvYmFsaXplX2RlY2xfbmFtZSAoRklMRSAqLCB0cmVlKTsKK2V4dGVybiB2b2lkIGRlZmF1bHRfZW1pdF91bndpbmRfbGFiZWwgKEZJTEUgKiwgdHJlZSwgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgZGVmYXVsdF9lbWl0X2V4Y2VwdF90YWJsZV9sYWJlbCAoRklMRSAqKTsKK2V4dGVybiB2b2lkIGRlZmF1bHRfaW50ZXJuYWxfbGFiZWwgKEZJTEUgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIGRlZmF1bHRfZmlsZV9zdGFydCAodm9pZCk7CitleHRlcm4gdm9pZCBmaWxlX2VuZF9pbmRpY2F0ZV9leGVjX3N0YWNrICh2b2lkKTsKKworZXh0ZXJuIHZvaWQgZGVmYXVsdF9lbGZfYXNtX291dHB1dF9leHRlcm5hbCAoRklMRSAqZmlsZSwgdHJlZSwKKwkJCQkJICAgICBjb25zdCBjaGFyICopOworZXh0ZXJuIGludCBtYXliZV9hc3NlbWJsZV92aXNpYmlsaXR5ICh0cmVlKTsKKworZXh0ZXJuIGludCBkZWZhdWx0X2FkZHJlc3NfY29zdCAocnR4LCBib29sKTsKKworLyogZGJ4b3V0IGhlbHBlciBmdW5jdGlvbnMgKi8KKyNpZiBkZWZpbmVkIERCWF9ERUJVR0dJTkdfSU5GTyB8fCBkZWZpbmVkIFhDT0ZGX0RFQlVHR0lOR19JTkZPCisKK2V4dGVybiB2b2lkIGRieG91dF9pbnQgKGludCk7CitleHRlcm4gdm9pZCBkYnhvdXRfc3RhYmQgKGludCwgaW50KTsKK2V4dGVybiB2b2lkIGRieG91dF9iZWdpbl9zdGFibiAoaW50KTsKK2V4dGVybiB2b2lkIGRieG91dF9iZWdpbl9zdGFibl9zbGluZSAoaW50KTsKK2V4dGVybiB2b2lkIGRieG91dF9iZWdpbl9lbXB0eV9zdGFicyAoaW50KTsKK2V4dGVybiB2b2lkIGRieG91dF9iZWdpbl9zaW1wbGVfc3RhYnMgKGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiB2b2lkIGRieG91dF9iZWdpbl9zaW1wbGVfc3RhYnNfZGVzYyAoY29uc3QgY2hhciAqLCBpbnQsIGludCk7CisKK2V4dGVybiB2b2lkIGRieG91dF9zdGFiX3ZhbHVlX3plcm8gKHZvaWQpOworZXh0ZXJuIHZvaWQgZGJ4b3V0X3N0YWJfdmFsdWVfbGFiZWwgKGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9pZCBkYnhvdXRfc3RhYl92YWx1ZV9sYWJlbF9kaWZmIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9pZCBkYnhvdXRfc3RhYl92YWx1ZV9pbnRlcm5hbF9sYWJlbCAoY29uc3QgY2hhciAqLCBpbnQgKik7CitleHRlcm4gdm9pZCBkYnhvdXRfc3RhYl92YWx1ZV9pbnRlcm5hbF9sYWJlbF9kaWZmIChjb25zdCBjaGFyICosIGludCAqLAorCQkJCQkJICAgY29uc3QgY2hhciAqKTsKKworI2VuZGlmCisKKyNlbmRpZiAvKiAhIEdDQ19PVVRQVVRfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3BhcmFtcy5kZWYgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvcGFyYW1zLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTY1MGZmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3BhcmFtcy5kZWYKQEAgLTAsMCArMSw4MTAgQEAKKy8qIHBhcmFtcy5kZWYgLSBSdW4tdGltZSBwYXJhbWV0ZXJzLgorICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgTWFyayBNaXRjaGVsbCA8bWFya0Bjb2Rlc291cmNlcnkuY29tPi4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQKKyAgIHBhcmFtZXRlcnMuICBUaGUgREVGUEFSQU0gbWFjcm8gdGFrZXMgNiBhcmd1bWVudHM6CisKKyAgICAgLSBUaGUgZW51bWVyYWwgY29ycmVzcG9uZGluZyB0byB0aGlzIHBhcmFtZXRlci4KKworICAgICAtIFRoZSBuYW1lIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2V0IHRoaXMgcGFyYW1ldGVyIHVzaW5nIHRoZQorICAgICAgIGNvbW1hbmQtbGluZSBvcHRpb24gYC0tcGFyYW0gPG5hbWU+PTx2YWx1ZT4nLgorCisgICAgIC0gQSBoZWxwIHN0cmluZyBleHBsYWluaW5nIGhvdyB0aGUgcGFyYW1ldGVyIGlzIHVzZWQuCisKKyAgICAgLSBBIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBwYXJhbWV0ZXIuCisKKyAgICAgLSBUaGUgbWluaW11bSBhY2NlcHRhYmxlIHZhbHVlIGZvciB0aGUgcGFyYW1ldGVyLgorCisgICAgIC0gVGhlIG1heGltdW0gYWNjZXB0YWJsZSB2YWx1ZSBmb3IgdGhlIHBhcmFtZXRlciAoaWYgZ3JlYXRlciB0aGFuCisgICAgIHRoZSBtaW5pbXVtKS4KKworICAgQmUgc3VyZSB0byBhZGQgYW4gZW50cnkgdG8gaW52b2tlLnRleGkgc3VtbWFyaXppbmcgdGhlIHBhcmFtZXRlci4gICovCisKKy8qIFRoZSB0aHJlc2hvbGQgcmF0aW8gYmV0d2VlbiBjdXJyZW50IGFuZCBob3R0ZXN0IHN0cnVjdHVyZSBjb3VudHMuCisgICBXZSBzYXkgdGhhdCBpZiB0aGUgcmF0aW8gb2YgdGhlIGN1cnJlbnQgc3RydWN0dXJlIGNvdW50LAorICAgY2FsY3VsYXRlZCBieSBwcm9maWxpbmcsIHRvIHRoZSBob3R0ZXN0IHN0cnVjdHVyZSBjb3VudAorICAgaW4gdGhlIHByb2dyYW0gaXMgbGVzcyB0aGFuIHRoaXMgcGFyYW1ldGVyLCB0aGVuIHN0cnVjdHVyZQorICAgcmVvcmdhbml6YXRpb24gaXMgbm90IGFwcGxpZWQuIFRoZSBkZWZhdWx0IGlzIDEwJS4gICovCitERUZQQVJBTSAoUEFSQU1fU1RSVUNUX1JFT1JHX0NPTERfU1RSVUNUX1JBVElPLAorCSAgInN0cnVjdC1yZW9yZy1jb2xkLXN0cnVjdC1yYXRpbyIsCisJICAiVGhlIHRocmVzaG9sZCByYXRpbyBiZXR3ZWVuIGN1cnJlbnQgYW5kIGhvdHRlc3Qgc3RydWN0dXJlIGNvdW50cyIsCisJICAxMCwgMCwgMTAwKQorCisvKiBXaGVuIGJyYW5jaCBpcyBwcmVkaWN0ZWQgdG8gYmUgdGFrZW4gd2l0aCBwcm9iYWJpbGl0eSBsb3dlciB0aGFuIHRoaXMKKyAgIHRocmVzaG9sZCAoaW4gcGVyY2VudCksIHRoZW4gaXQgaXMgY29uc2lkZXJlZCB3ZWxsIHByZWRpY3RhYmxlLiAqLworREVGUEFSQU0gKFBBUkFNX1BSRURJQ1RBQkxFX0JSQU5DSF9PVVRDT01FLAorCSAgInByZWRpY3RhYmxlLWJyYW5jaC1vdXRjb21lIiwKKwkgICJNYXhpbWFsIGVzdGltYXRlZCBvdXRjb21lIG9mIGJyYW5jaCBjb25zaWRlcmVkIHByZWRpY3RhYmxlIiwKKwkgIDIsIDAsIDUwKQorCisvKiBUaGUgc2luZ2xlIGZ1bmN0aW9uIGlubGluaW5nIGxpbWl0LiBUaGlzIGlzIHRoZSBtYXhpbXVtIHNpemUKKyAgIG9mIGEgZnVuY3Rpb24gY291bnRlZCBpbiBpbnRlcm5hbCBnY2MgaW5zdHJ1Y3Rpb25zIChub3QgaW4KKyAgIHJlYWwgbWFjaGluZSBpbnN0cnVjdGlvbnMpIHRoYXQgaXMgZWxpZ2libGUgZm9yIGlubGluaW5nCisgICBieSB0aGUgdHJlZSBpbmxpbmVyLgorICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgNDUwLgorICAgT25seSBmdW5jdGlvbnMgbWFya2VkIGlubGluZSAob3IgbWV0aG9kcyBkZWZpbmVkIGluIHRoZSBjbGFzcworICAgZGVmaW5pdGlvbiBmb3IgQysrKSBhcmUgYWZmZWN0ZWQgYnkgdGhpcy4KKyAgIFRoZXJlIGFyZSBtb3JlIHJlc3RyaWN0aW9ucyB0byBpbmxpbmluZzogSWYgaW5saW5lZCBmdW5jdGlvbnMKKyAgIGNhbGwgb3RoZXIgZnVuY3Rpb25zLCB0aGUgYWxyZWFkeSBpbmxpbmVkIGluc3RydWN0aW9ucyBhcmUKKyAgIGNvdW50ZWQgYW5kIG9uY2UgdGhlIHJlY3Vyc2l2ZSBpbmxpbmUgbGltaXQgKHNlZQorICAgIm1heC1pbmxpbmUtaW5zbnMiIHBhcmFtZXRlcikgaXMgZXhjZWVkZWQsIHRoZSBhY2NlcHRhYmxlIHNpemUKKyAgIGdldHMgZGVjcmVhc2VkLiAgKi8KK0RFRlBBUkFNIChQQVJBTV9NQVhfSU5MSU5FX0lOU05TX1NJTkdMRSwKKwkgICJtYXgtaW5saW5lLWluc25zLXNpbmdsZSIsCisJICAiVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyBpbiBhIHNpbmdsZSBmdW5jdGlvbiBlbGlnaWJsZSBmb3IgaW5saW5pbmciLAorCSAgNDAwLCAwLCAwKQorCisvKiBUaGUgc2luZ2xlIGZ1bmN0aW9uIGlubGluaW5nIGxpbWl0IGZvciBmdW5jdGlvbnMgdGhhdCBhcmUKKyAgIGlubGluZWQgYnkgdmlydHVlIG9mIC1maW5saW5lLWZ1bmN0aW9ucyAoLU8zKS4KKyAgIFRoaXMgbGltaXQgc2hvdWxkIGJlIGNob3NlbiB0byBiZSBiZWxvdyBvciBlcXVhbCB0byB0aGUgbGltaXQKKyAgIHRoYXQgaXMgYXBwbGllZCB0byBmdW5jdGlvbnMgbWFya2VkIGlubGluZWQgKG9yIGRlZmluZWQgaW4gdGhlCisgICBjbGFzcyBkZWNsYXJhdGlvbiBpbiBDKyspIGdpdmVuIGJ5IHRoZSAibWF4LWlubGluZS1pbnNucy1zaW5nbGUiCisgICBwYXJhbWV0ZXIuCisgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA5MC4gICovCitERUZQQVJBTSAoUEFSQU1fTUFYX0lOTElORV9JTlNOU19BVVRPLAorCSAgIm1heC1pbmxpbmUtaW5zbnMtYXV0byIsCisJICAiVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyB3aGVuIGF1dG9tYXRpY2FsbHkgaW5saW5pbmciLAorCSAgNTAsIDAsIDApCisKK0RFRlBBUkFNIChQQVJBTV9NQVhfSU5MSU5FX0lOU05TX1JFQ1VSU0lWRSwKKwkgICJtYXgtaW5saW5lLWluc25zLXJlY3Vyc2l2ZSIsCisJICAiVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyBpbmxpbmUgZnVuY3Rpb24gY2FuIGdyb3cgdG8gdmlhIHJlY3Vyc2l2ZSBpbmxpbmluZyIsCisJICA0NTAsIDAsIDApCisKK0RFRlBBUkFNIChQQVJBTV9NQVhfSU5MSU5FX0lOU05TX1JFQ1VSU0lWRV9BVVRPLAorCSAgIm1heC1pbmxpbmUtaW5zbnMtcmVjdXJzaXZlLWF1dG8iLAorCSAgIlRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgbm9uLWlubGluZSBmdW5jdGlvbiBjYW4gZ3JvdyB0byB2aWEgcmVjdXJzaXZlIGlubGluaW5nIiwKKwkgIDQ1MCwgMCwgMCkKKworREVGUEFSQU0gKFBBUkFNX01BWF9JTkxJTkVfUkVDVVJTSVZFX0RFUFRILAorCSAgIm1heC1pbmxpbmUtcmVjdXJzaXZlLWRlcHRoIiwKKwkgICJUaGUgbWF4aW11bSBkZXB0aCBvZiByZWN1cnNpdmUgaW5saW5pbmcgZm9yIGlubGluZSBmdW5jdGlvbnMiLAorCSAgOCwgMCwgMCkKKworREVGUEFSQU0gKFBBUkFNX01BWF9JTkxJTkVfUkVDVVJTSVZFX0RFUFRIX0FVVE8sCisJICAibWF4LWlubGluZS1yZWN1cnNpdmUtZGVwdGgtYXV0byIsCisJICAiVGhlIG1heGltdW0gZGVwdGggb2YgcmVjdXJzaXZlIGlubGluaW5nIGZvciBub24taW5saW5lIGZ1bmN0aW9ucyIsCisJICA4LCAwLCAwKQorCitERUZQQVJBTSAoUEFSQU1fTUlOX0lOTElORV9SRUNVUlNJVkVfUFJPQkFCSUxJVFksCisJICAibWluLWlubGluZS1yZWN1cnNpdmUtcHJvYmFiaWxpdHkiLAorCSAgIklubGluZSByZWN1cnNpdmVseSBvbmx5IHdoZW4gdGhlIHByb2JhYmlsaXR5IG9mIGNhbGwgYmVpbmcgZXhlY3V0ZWQgZXhjZWVkcyB0aGUgcGFyYW1ldGVyIiwKKwkgIDEwLCAwLCAwKQorCisvKiBMaW1pdCBvZiBpdGVyYXRpb25zIG9mIGVhcmx5IGlubGluZXIuICBUaGlzIGJhc2ljYWxseSBib3VuZHMgbnVtYmVyIG9mCisgICBuZXN0ZWQgaW5kaXJlY3QgY2FsbHMgZWFybHkgaW5saW5lciBjYW4gcmVzb2x2ZS4gIERlZXBlciBjaGFpbnMgYXJlIHN0aWxsCisgICBoYW5kbGVkIGJ5IGxhdGUgaW5saW5pbmcuICAqLworREVGUEFSQU0gKFBBUkFNX0VBUkxZX0lOTElORVJfTUFYX0lURVJBVElPTlMsCisJICAibWF4LWVhcmx5LWlubGluZXItaXRlcmF0aW9ucyIsCisJICAiVGhlIG1heGltdW0gbnVtYmVyIG9mIG5lc3RlZCBpbmRpcmVjdCBpbmxpbmluZyBwZXJmb3JtZWQgYnkgZWFybHkgaW5saW5lciIsCisJICAxMCwgMCwgMCkKKworLyogTGltaXQgdGhlIG51bWJlciBvZiBleHBhbnNpb25zIGNyZWF0ZWQgYnkgdGhlIHZhcmlhYmxlIGV4cGFuc2lvbgorICAgb3B0aW1pemF0aW9uIHRvIGF2b2lkIHJlZ2lzdGVyIHByZXNzdXJlLiAgKi8KK0RFRlBBUkFNIChQQVJBTV9NQVhfVkFSSUFCTEVfRVhQQU5TSU9OUywKKwkgICJtYXgtdmFyaWFibGUtZXhwYW5zaW9ucy1pbi11bnJvbGxlciIsCisJICAiSWYgLWZ2YXJpYWJsZS1leHBhbnNpb24taW4tdW5yb2xsZXIgaXMgdXNlZCwgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRpbWVzIHRoYXQgYW4gaW5kaXZpZHVhbCB2YXJpYWJsZSB3aWxsIGJlIGV4cGFuZGVkIGR1cmluZyBsb29wIHVucm9sbGluZyIsCisgICAgICAgICAgMSwgMCwgMCkKKworLyogTGltaXQgbG9vcCBhdXRvdmVjdG9yaXphdGlvbiB0byBsb29wcyB3aXRoIGxhcmdlIGVub3VnaCBpdGVyYXRpb24gY291bnQuICAqLworREVGUEFSQU0gKFBBUkFNX01JTl9WRUNUX0xPT1BfQk9VTkQsCisJICAibWluLXZlY3QtbG9vcC1ib3VuZCIsCisJICAiSWYgLWZ0cmVlLXZlY3Rvcml6ZSBpcyB1c2VkLCB0aGUgbWluaW1hbCBsb29wIGJvdW5kIG9mIGEgbG9vcCB0byBiZSBjb25zaWRlcmVkIGZvciB2ZWN0b3JpemF0aW9uIiwKKwkgIDEsIDEsIDApCisKKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgdG8gY29uc2lkZXIgd2hlbiBsb29raW5nIGZvciBhbgorICAgaW5zdHJ1Y3Rpb24gdG8gZmlsbCBhIGRlbGF5IHNsb3QuICBJZiBtb3JlIHRoYW4gdGhpcyBhcmJpdHJhcnkKKyAgIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgaXMgc2VhcmNoZWQsIHRoZSB0aW1lIHNhdmluZ3MgZnJvbSBmaWxsaW5nCisgICB0aGUgZGVsYXkgc2xvdCB3aWxsIGJlIG1pbmltYWwgc28gc3RvcCBzZWFyY2hpbmcuICBJbmNyZWFzaW5nCisgICB2YWx1ZXMgbWVhbiBtb3JlIGFnZ3Jlc3NpdmUgb3B0aW1pemF0aW9uLCBtYWtpbmcgdGhlIGNvbXBpbGUgdGltZQorICAgaW5jcmVhc2Ugd2l0aCBwcm9iYWJseSBzbWFsbCBpbXByb3ZlbWVudCBpbiBleGVjdXRhYmxlIHJ1biB0aW1lLiAgKi8KK0RFRlBBUkFNIChQQVJBTV9NQVhfREVMQVlfU0xPVF9JTlNOX1NFQVJDSCwKKwkgICJtYXgtZGVsYXktc2xvdC1pbnNuLXNlYXJjaCIsCisJICAiVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyB0byBjb25zaWRlciB0byBmaWxsIGEgZGVsYXkgc2xvdCIsCisJICAxMDAsIDAsIDApCisKKy8qIFdoZW4gdHJ5aW5nIHRvIGZpbGwgZGVsYXkgc2xvdHMsIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMKKyAgIHRvIGNvbnNpZGVyIHdoZW4gc2VhcmNoaW5nIGZvciBhIGJsb2NrIHdpdGggdmFsaWQgbGl2ZSByZWdpc3RlcgorICAgaW5mb3JtYXRpb24uICBJbmNyZWFzaW5nIHRoaXMgYXJiaXRyYXJpbHkgY2hvc2VuIHZhbHVlIG1lYW5zIG1vcmUKKyAgIGFnZ3Jlc3NpdmUgb3B0aW1pemF0aW9uLCBpbmNyZWFzaW5nIHRoZSBjb21waWxlIHRpbWUuICBUaGlzCisgICBwYXJhbWV0ZXIgc2hvdWxkIGJlIHJlbW92ZWQgd2hlbiB0aGUgZGVsYXkgc2xvdCBjb2RlIGlzIHJld3JpdHRlbgorICAgdG8gbWFpbnRhaW4gdGhlIGNvbnRyb2wtZmxvdyBncmFwaC4gICovCitERUZQQVJBTShQQVJBTV9NQVhfREVMQVlfU0xPVF9MSVZFX1NFQVJDSCwKKwkgIm1heC1kZWxheS1zbG90LWxpdmUtc2VhcmNoIiwKKwkgIlRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgdG8gY29uc2lkZXIgdG8gZmluZCBhY2N1cmF0ZSBsaXZlIHJlZ2lzdGVyIGluZm9ybWF0aW9uIiwKKwkgMzMzLCAwLCAwKQorCisvKiBUaGlzIHBhcmFtZXRlciBsaW1pdHMgdGhlIG51bWJlciBvZiBicmFuY2ggZWxlbWVudHMgdGhhdCB0aGUKKyAgIHNjaGVkdWxlciB3aWxsIHRyYWNrIGFudGktZGVwZW5kZW5jaWVzIHRocm91Z2ggd2l0aG91dCByZXNldHRpbmcKKyAgIHRoZSB0cmFja2luZyBtZWNoYW5pc20uICBMYXJnZSBmdW5jdGlvbnMgd2l0aCBmZXcgY2FsbHMgb3IgYmFycmllcnMKKyAgIGNhbiBnZW5lcmF0ZSBsaXN0cyBjb250YWluaW5nIG1hbnkgMTAwMCdzIG9mIGRlcGVuZGVuY2llcy4gIEdlbmVyYWxseQorICAgdGhlIGNvbXBpbGVyIGVpdGhlciB1c2VzIGFsbCBhdmFpbGFibGUgbWVtb3J5LCBvciBydW5zIGZvciBmYXIgdG9vIGxvbmcuICAqLworREVGUEFSQU0oUEFSQU1fTUFYX1BFTkRJTkdfTElTVF9MRU5HVEgsCisJICJtYXgtcGVuZGluZy1saXN0LWxlbmd0aCIsCisJICJUaGUgbWF4aW11bSBsZW5ndGggb2Ygc2NoZWR1bGluZydzIHBlbmRpbmcgb3BlcmF0aW9ucyBsaXN0IiwKKwkgMzIsIDAsIDApCisKK0RFRlBBUkFNKFBBUkFNX0xBUkdFX0ZVTkNUSU9OX0lOU05TLAorCSAibGFyZ2UtZnVuY3Rpb24taW5zbnMiLAorCSAiVGhlIHNpemUgb2YgZnVuY3Rpb24gYm9keSB0byBiZSBjb25zaWRlcmVkIGxhcmdlIiwKKwkgMjcwMCwgMCwgMCkKK0RFRlBBUkFNKFBBUkFNX0xBUkdFX0ZVTkNUSU9OX0dST1dUSCwKKwkgImxhcmdlLWZ1bmN0aW9uLWdyb3d0aCIsCisJICJNYXhpbWFsIGdyb3d0aCBkdWUgdG8gaW5saW5pbmcgb2YgbGFyZ2UgZnVuY3Rpb24gKGluIHBlcmNlbnQpIiwKKwkgMTAwLCAwLCAwKQorREVGUEFSQU0oUEFSQU1fTEFSR0VfVU5JVF9JTlNOUywKKwkgImxhcmdlLXVuaXQtaW5zbnMiLAorCSAiVGhlIHNpemUgb2YgdHJhbnNsYXRpb24gdW5pdCB0byBiZSBjb25zaWRlcmVkIGxhcmdlIiwKKwkgMTAwMDAsIDAsIDApCitERUZQQVJBTShQQVJBTV9JTkxJTkVfVU5JVF9HUk9XVEgsCisJICJpbmxpbmUtdW5pdC1ncm93dGgiLAorCSAiSG93IG11Y2ggY2FuIGdpdmVuIGNvbXBpbGF0aW9uIHVuaXQgZ3JvdyBiZWNhdXNlIG9mIHRoZSBpbmxpbmluZyAoaW4gcGVyY2VudCkiLAorCSAzMCwgMCwgMCkKK0RFRlBBUkFNKFBBUkFNX0lQQ1BfVU5JVF9HUk9XVEgsCisJICJpcGNwLXVuaXQtZ3Jvd3RoIiwKKwkgIkhvdyBtdWNoIGNhbiBnaXZlbiBjb21waWxhdGlvbiB1bml0IGdyb3cgYmVjYXVzZSBvZiB0aGUgaW50ZXJwcm9jZWR1cmFsIGNvbnN0YW50IHByb3BhZ2F0aW9uIChpbiBwZXJjZW50KSIsCisJIDEwLCAwLCAwKQorREVGUEFSQU0oUEFSQU1fRUFSTFlfSU5MSU5JTkdfSU5TTlMsCisJICJlYXJseS1pbmxpbmluZy1pbnNucyIsCisJICJNYXhpbWFsIGVzdGltYXRlZCBncm93dGggb2YgZnVuY3Rpb24gYm9keSBjYXVzZWQgYnkgZWFybHkgaW5saW5pbmcgb2Ygc2luZ2xlIGNhbGwiLAorCSA4LCAwLCAwKQorREVGUEFSQU0oUEFSQU1fTEFSR0VfU1RBQ0tfRlJBTUUsCisJICJsYXJnZS1zdGFjay1mcmFtZSIsCisJICJUaGUgc2l6ZSBvZiBzdGFjayBmcmFtZSB0byBiZSBjb25zaWRlcmVkIGxhcmdlIiwKKwkgMjU2LCAwLCAwKQorREVGUEFSQU0oUEFSQU1fU1RBQ0tfRlJBTUVfR1JPV1RILAorCSAibGFyZ2Utc3RhY2stZnJhbWUtZ3Jvd3RoIiwKKwkgIk1heGltYWwgc3RhY2sgZnJhbWUgZ3Jvd3RoIGR1ZSB0byBpbmxpbmluZyAoaW4gcGVyY2VudCkiLAorCSAxMDAwLCAwLCAwKQorCisvKiBUaGUgR0NTRSBvcHRpbWl6YXRpb24gd2lsbCBiZSBkaXNhYmxlZCBpZiBpdCB3b3VsZCByZXF1aXJlCisgICBzaWduaWZpY2FudGx5IG1vcmUgbWVtb3J5IHRoYW4gdGhpcyB2YWx1ZS4gICovCitERUZQQVJBTShQQVJBTV9NQVhfR0NTRV9NRU1PUlksCisJICJtYXgtZ2NzZS1tZW1vcnkiLAorCSAiVGhlIG1heGltdW0gYW1vdW50IG9mIG1lbW9yeSB0byBiZSBhbGxvY2F0ZWQgYnkgR0NTRSIsCisJIDUwICogMTAyNCAqIDEwMjQsIDAsIDApCisKKy8qIFRoaXMgaXMgdGhlIHRocmVzaG9sZCByYXRpbyB3aGVuIHRvIHBlcmZvcm0gcGFydGlhbCByZWR1bmRhbmN5CisgICBlbGltaW5hdGlvbiBhZnRlciByZWxvYWQuIFdlIHBlcmZvcm0gcGFydGlhbCByZWR1bmRhbmN5IGVsaW1pbmF0aW9uCisgICB3aGVuIHRoZSBmb2xsb3dpbmcgaG9sZHM6CisgICAoUmVkdW5kYW50IGxvYWQgZXhlY3V0aW9uIGNvdW50KQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+PSBHQ1NFX0FGVEVSX1JFTE9BRF9QQVJUSUFMX0ZSQUNUSU9OCisgICAoQWRkZWQgbG9hZHMgZXhlY3V0aW9uIGNvdW50KQkJCQkJICAqLworREVGUEFSQU0oUEFSQU1fR0NTRV9BRlRFUl9SRUxPQURfUEFSVElBTF9GUkFDVElPTiwKKwkiZ2NzZS1hZnRlci1yZWxvYWQtcGFydGlhbC1mcmFjdGlvbiIsCisJIlRoZSB0aHJlc2hvbGQgcmF0aW8gZm9yIHBlcmZvcm1pbmcgcGFydGlhbCByZWR1bmRhbmN5IGVsaW1pbmF0aW9uIGFmdGVyIHJlbG9hZCIsCisgICAgICAgIDMsIDAsIDApCisvKiBUaGlzIGlzIHRoZSB0aHJlc2hvbGQgcmF0aW8gb2YgdGhlIGNyaXRpY2FsIGVkZ2VzIGV4ZWN1dGlvbiBjb3VudCBjb21wYXJlZCB0bworICAgdGhlIHJlZHVuZGFudCBsb2FkcyBleGVjdXRpb24gY291bnQgdGhhdCBwZXJtaXRzIHBlcmZvcm1pbmcgdGhlIGxvYWQKKyAgIHJlZHVuZGFuY3kgZWxpbWluYXRpb24gaW4gZ2NzZSBhZnRlciByZWxvYWQuICAqLworREVGUEFSQU0oUEFSQU1fR0NTRV9BRlRFUl9SRUxPQURfQ1JJVElDQUxfRlJBQ1RJT04sCisJImdjc2UtYWZ0ZXItcmVsb2FkLWNyaXRpY2FsLWZyYWN0aW9uIiwKKwkiVGhlIHRocmVzaG9sZCByYXRpbyBvZiBjcml0aWNhbCBlZGdlcyBleGVjdXRpb24gY291bnQgdGhhdCBwZXJtaXQgcGVyZm9ybWluZyByZWR1bmRhbmN5IGVsaW1pbmF0aW9uIGFmdGVyIHJlbG9hZCIsCisgICAgICAgIDEwLCAwLCAwKQorLyogVGhpcyBwYXJhbWV0ZXIgbGltaXRzIHRoZSBudW1iZXIgb2YgaW5zbnMgaW4gYSBsb29wIHRoYXQgd2lsbCBiZSB1bnJvbGxlZCwKKyAgIGFuZCBieSBob3cgbXVjaCB0aGUgbG9vcCBpcyB1bnJvbGxlZC4KKworICAgVGhpcyBsaW1pdCBzaG91bGQgYmUgYXQgbW9zdCBoYWxmIG9mIHRoZSBwZWVsaW5nIGxpbWl0czogIGxvb3AgdW5yb2xsZXIKKyAgIGRlY2lkZXMgdG8gbm90IHVucm9sbCBsb29wcyB0aGF0IGl0ZXJhdGUgZmV3ZXIgdGhhbiAyKm51bWJlciBvZiBhbGxvd2VkCisgICB1bnJvbGxpbmdzIGFuZCB0aHVzIHdlIHdvdWxkIGhhdmUgbG9vcHMgdGhhdCBhcmUgbmVpdGhlciBwZWVsZWQgb3IgdW5yb2xsZWQKKyAgIG90aGVyd2lzZS4gICovCitERUZQQVJBTShQQVJBTV9NQVhfVU5ST0xMRURfSU5TTlMsCisJICJtYXgtdW5yb2xsZWQtaW5zbnMiLAorCSAiVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyB0byBjb25zaWRlciB0byB1bnJvbGwgaW4gYSBsb29wIiwKKwkgMjAwLCAwLCAwKQorLyogVGhpcyBwYXJhbWV0ZXIgbGltaXRzIGhvdyBtYW55IHRpbWVzIHRoZSBsb29wIGlzIHVucm9sbGVkIGRlcGVuZGluZworICAgb24gbnVtYmVyIG9mIGluc25zIHJlYWxseSBleGVjdXRlZCBpbiBlYWNoIGl0ZXJhdGlvbi4gICovCitERUZQQVJBTShQQVJBTV9NQVhfQVZFUkFHRV9VTlJPTExFRF9JTlNOUywKKwkgIm1heC1hdmVyYWdlLXVucm9sbGVkLWluc25zIiwKKwkgIlRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgdG8gY29uc2lkZXIgdG8gdW5yb2xsIGluIGEgbG9vcCBvbiBhdmVyYWdlIiwKKwkgODAsIDAsIDApCisvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgdW5yb2xsaW5ncyBvZiBhIHNpbmdsZSBsb29wLiAgKi8KK0RFRlBBUkFNKFBBUkFNX01BWF9VTlJPTExfVElNRVMsCisJIm1heC11bnJvbGwtdGltZXMiLAorCSJUaGUgbWF4aW11bSBudW1iZXIgb2YgdW5yb2xsaW5ncyBvZiBhIHNpbmdsZSBsb29wIiwKKwk4LCAwLCAwKQorLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc25zIG9mIGEgcGVlbGVkIGxvb3AuICAqLworREVGUEFSQU0oUEFSQU1fTUFYX1BFRUxFRF9JTlNOUywKKwkibWF4LXBlZWxlZC1pbnNucyIsCisJIlRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnNucyBvZiBhIHBlZWxlZCBsb29wIiwKKwk0MDAsIDAsIDApCisvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGVlbGluZ3Mgb2YgYSBzaW5nbGUgbG9vcC4gICovCitERUZQQVJBTShQQVJBTV9NQVhfUEVFTF9USU1FUywKKwkibWF4LXBlZWwtdGltZXMiLAorCSJUaGUgbWF4aW11bSBudW1iZXIgb2YgcGVlbGluZ3Mgb2YgYSBzaW5nbGUgbG9vcCIsCisJMTYsIDAsIDApCisvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zbnMgb2YgYSBwZWVsZWQgbG9vcC4gICovCitERUZQQVJBTShQQVJBTV9NQVhfQ09NUExFVEVMWV9QRUVMRURfSU5TTlMsCisJIm1heC1jb21wbGV0ZWx5LXBlZWxlZC1pbnNucyIsCisJIlRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnNucyBvZiBhIGNvbXBsZXRlbHkgcGVlbGVkIGxvb3AiLAorCTQwMCwgMCwgMCkKKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwZWVsaW5ncyBvZiBhIHNpbmdsZSBsb29wIHRoYXQgaXMgcGVlbGVkIGNvbXBsZXRlbHkuICAqLworREVGUEFSQU0oUEFSQU1fTUFYX0NPTVBMRVRFTFlfUEVFTF9USU1FUywKKwkibWF4LWNvbXBsZXRlbHktcGVlbC10aW1lcyIsCisJIlRoZSBtYXhpbXVtIG51bWJlciBvZiBwZWVsaW5ncyBvZiBhIHNpbmdsZSBsb29wIHRoYXQgaXMgcGVlbGVkIGNvbXBsZXRlbHkiLAorCTE2LCAwLCAwKQorLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc25zIG9mIGEgcGVlbGVkIGxvb3AgdGhhdCByb2xscyBvbmx5IG9uY2UuICAqLworREVGUEFSQU0oUEFSQU1fTUFYX09OQ0VfUEVFTEVEX0lOU05TLAorCSJtYXgtb25jZS1wZWVsZWQtaW5zbnMiLAorCSJUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zbnMgb2YgYSBwZWVsZWQgbG9vcCB0aGF0IHJvbGxzIG9ubHkgb25jZSIsCisJNDAwLCAwLCAwKQorLyogVGhlIG1heGltdW0gZGVwdGggb2YgYSBsb29wIG5lc3Qgd2UgY29tcGxldGVseSBwZWVsLiAgKi8KK0RFRlBBUkFNKFBBUkFNX01BWF9VTlJPTExfSVRFUkFUSU9OUywKKwkgIm1heC1jb21wbGV0ZWx5LXBlZWwtbG9vcC1uZXN0LWRlcHRoIiwKKwkgIlRoZSBtYXhpbXVtIGRlcHRoIG9mIGEgbG9vcCBuZXN0IHdlIGNvbXBsZXRlbHkgcGVlbCIsCisJIDgsIDAsIDApCisKKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnNucyBvZiBhbiB1bnN3aXRjaGVkIGxvb3AuICAqLworREVGUEFSQU0oUEFSQU1fTUFYX1VOU1dJVENIX0lOU05TLAorCSJtYXgtdW5zd2l0Y2gtaW5zbnMiLAorCSJUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zbnMgb2YgYW4gdW5zd2l0Y2hlZCBsb29wIiwKKwk1MCwgMCwgMCkKKy8qIFRoZSBtYXhpbXVtIGxldmVsIG9mIHJlY3Vyc2lvbiBpbiB1bnN3aXRjaF9zaW5nbGVfbG9vcC4gICovCitERUZQQVJBTShQQVJBTV9NQVhfVU5TV0lUQ0hfTEVWRUwsCisJIm1heC11bnN3aXRjaC1sZXZlbCIsCisJIlRoZSBtYXhpbXVtIG51bWJlciBvZiB1bnN3aXRjaGluZ3MgaW4gYSBzaW5nbGUgbG9vcCIsCisJMywgMCwgMCkKKworLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2YgYSBsb29wIHRoZSBicnV0ZSBmb3JjZSBhbGdvcml0aG0KKyAgIGZvciBhbmFseXNpcyBvZiAjIG9mIGl0ZXJhdGlvbnMgb2YgdGhlIGxvb3AgdHJpZXMgdG8gZXZhbHVhdGUuICAqLworREVGUEFSQU0oUEFSQU1fTUFYX0lURVJBVElPTlNfVE9fVFJBQ0ssCisJIm1heC1pdGVyYXRpb25zLXRvLXRyYWNrIiwKKwkiQm91bmQgb24gdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHRoZSBicnV0ZSBmb3JjZSAjIG9mIGl0ZXJhdGlvbnMgYW5hbHlzaXMgYWxnb3JpdGhtIGV2YWx1YXRlcyIsCisJMTAwMCwgMCwgMCkKKy8qIEEgY3V0b2ZmIHRvIGF2b2lkIGNvc3RseSBjb21wdXRhdGlvbnMgb2YgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIGluCisgICB0aGUgZG9sb29wIHRyYW5zZm9ybWF0aW9uLiAgKi8KK0RFRlBBUkFNKFBBUkFNX01BWF9JVEVSQVRJT05TX0NPTVBVVEFUSU9OX0NPU1QsCisJIm1heC1pdGVyYXRpb25zLWNvbXB1dGF0aW9uLWNvc3QiLAorCSJCb3VuZCBvbiB0aGUgY29zdCBvZiBhbiBleHByZXNzaW9uIHRvIGNvbXB1dGUgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIiwKKwkxMCwgMCwgMCkKKworLyogVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCB0byB0dW5lIFNNUyBNQVggSUkgY2FsY3VsYXRpb25zLiAgKi8KK0RFRlBBUkFNKFBBUkFNX1NNU19NQVhfSUlfRkFDVE9SLAorCSAic21zLW1heC1paS1mYWN0b3IiLAorCSAiQSBmYWN0b3IgZm9yIHR1bmluZyB0aGUgdXBwZXIgYm91bmQgdGhhdCBzd2luZyBtb2R1bG8gc2NoZWR1bGVyIHVzZXMgZm9yIHNjaGVkdWxpbmcgYSBsb29wIiwKKwkgMTAwLCAwLCAwKQorREVGUEFSQU0oUEFSQU1fU01TX0RGQV9ISVNUT1JZLAorCSAic21zLWRmYS1oaXN0b3J5IiwKKwkgIlRoZSBudW1iZXIgb2YgY3ljbGVzIHRoZSBzd2luZyBtb2R1bG8gc2NoZWR1bGVyIGNvbnNpZGVycyB3aGVuIGNoZWNraW5nIGNvbmZsaWN0cyB1c2luZyBERkEiLAorCSAwLCAwLCAwKQorREVGUEFSQU0oUEFSQU1fU01TX0xPT1BfQVZFUkFHRV9DT1VOVF9USFJFU0hPTEQsCisJICJzbXMtbG9vcC1hdmVyYWdlLWNvdW50LXRocmVzaG9sZCIsCisJICJBIHRocmVzaG9sZCBvbiB0aGUgYXZlcmFnZSBsb29wIGNvdW50IGNvbnNpZGVyZWQgYnkgdGhlIHN3aW5nIG1vZHVsbyBzY2hlZHVsZXIiLAorCSAwLCAwLCAwKQorCitERUZQQVJBTShIT1RfQkJfQ09VTlRfRlJBQ1RJT04sCisJICJob3QtYmItY291bnQtZnJhY3Rpb24iLAorCSAiU2VsZWN0IGZyYWN0aW9uIG9mIHRoZSBtYXhpbWFsIGNvdW50IG9mIHJlcGV0aXRpb25zIG9mIGJhc2ljIGJsb2NrIGluIHByb2dyYW0gZ2l2ZW4gYmFzaWMgYmxvY2sgbmVlZHMgdG8gaGF2ZSB0byBiZSBjb25zaWRlcmVkIGhvdCIsCisJIDEwMDAwLCAwLCAwKQorREVGUEFSQU0oSE9UX0JCX0ZSRVFVRU5DWV9GUkFDVElPTiwKKwkgImhvdC1iYi1mcmVxdWVuY3ktZnJhY3Rpb24iLAorCSAiU2VsZWN0IGZyYWN0aW9uIG9mIHRoZSBtYXhpbWFsIGZyZXF1ZW5jeSBvZiBleGVjdXRpb25zIG9mIGJhc2ljIGJsb2NrIGluIGZ1bmN0aW9uIGdpdmVuIGJhc2ljIGJsb2NrIG5lZWRzIHRvIGhhdmUgdG8gYmUgY29uc2lkZXJlZCBob3QiLAorCSAxMDAwLCAwLCAwKQorCitERUZQQVJBTSAoUEFSQU1fQUxJR05fVEhSRVNIT0xELAorCSAgImFsaWduLXRocmVzaG9sZCIsCisJICAiU2VsZWN0IGZyYWN0aW9uIG9mIHRoZSBtYXhpbWFsIGZyZXF1ZW5jeSBvZiBleGVjdXRpb25zIG9mIGJhc2ljIGJsb2NrIGluIGZ1bmN0aW9uIGdpdmVuIGJhc2ljIGJsb2NrIGdldCBhbGlnbm1lbnQiLAorCSAgMTAwLCAwLCAwKQorCitERUZQQVJBTSAoUEFSQU1fQUxJR05fTE9PUF9JVEVSQVRJT05TLAorCSAgImFsaWduLWxvb3AtaXRlcmF0aW9ucyIsCisJICAiTG9vcHMgaXRlcmF0aW5nIGF0IGxlYXN0IHNlbGVjdGVkIG51bWJlciBvZiBpdGVyYXRpb25zIHdpbGwgZ2V0IGxvb3AgYWxpZ25lbWVudC4iLAorCSAgNCwgMCwgMCkKKworLyogRm9yIGd1ZXNzZWQgcHJvZmlsZXMsIHRoZSBsb29wcyBoYXZpbmcgdW5rbm93biBudW1iZXIgb2YgaXRlcmF0aW9ucworICAgYXJlIHByZWRpY3RlZCB0byBpdGVyYXRlIHJlbGF0aXZlbHkgZmV3ICgxMCkgdGltZXMgYXQgYXZlcmFnZS4KKyAgIEZvciBmdW5jdGlvbnMgY29udGFpbmluZyBvbmUgbG9vcCB3aXRoIGxhcmdlIGtub3duIG51bWJlciBvZiBpdGVyYXRpb25zCisgICBhbmQgb3RoZXIgbG9vcHMgaGF2aW5nIHVuYm91bmRlZCBsb29wcyB3ZSB3b3VsZCBlbmQgdXAgcHJlZGljdGluZyBhbGwKKyAgIHRoZSBvdGhlciBsb29wcyBjb2xkIHRoYXQgaXMgbm90IHVzdWFsbHkgdGhlIGNhc2UuICBTbyB3ZSBuZWVkIHRvIGFydGlmaWNpYWxseQorICAgZmxhdHRlbiB0aGUgcHJvZmlsZS4KKworICAgV2UgbmVlZCB0byBjdXQgdGhlIG1heGltYWwgcHJlZGljdGVkIGl0ZXJhdGlvbnMgdG8gbGFyZ2UgZW5vdWdoIGl0ZXJhdGlvbnMKKyAgIHNvIHRoZSBsb29wIGFwcGVhcnMgaW1wb3J0YW50LCBidXQgc2FmZWx5IHdpdGhpbiBIT1RfQkJfQ09VTlRfRlJBQ1RJT04KKyAgIHJhbmdlLiAgKi8KKworREVGUEFSQU0oUEFSQU1fTUFYX1BSRURJQ1RFRF9JVEVSQVRJT05TLAorCSAibWF4LXByZWRpY3RlZC1pdGVyYXRpb25zIiwKKwkgIlRoZSBtYXhpbXVtIG51bWJlciBvZiBsb29wIGl0ZXJhdGlvbnMgd2UgcHJlZGljdCBzdGF0aWNhbGx5IiwKKwkgMTAwLCAwLCAwKQorREVGUEFSQU0oVFJBQ0VSX0RZTkFNSUNfQ09WRVJBR0VfRkVFREJBQ0ssCisJICJ0cmFjZXItZHluYW1pYy1jb3ZlcmFnZS1mZWVkYmFjayIsCisJICJUaGUgcGVyY2VudGFnZSBvZiBmdW5jdGlvbiwgd2VpZ2h0ZWQgYnkgZXhlY3V0aW9uIGZyZXF1ZW5jeSwgdGhhdCBtdXN0IGJlIGNvdmVyZWQgYnkgdHJhY2UgZm9ybWF0aW9uLiBVc2VkIHdoZW4gcHJvZmlsZSBmZWVkYmFjayBpcyBhdmFpbGFibGUiLAorCSA5NSwgMCwgMTAwKQorREVGUEFSQU0oVFJBQ0VSX0RZTkFNSUNfQ09WRVJBR0UsCisJICJ0cmFjZXItZHluYW1pYy1jb3ZlcmFnZSIsCisJICJUaGUgcGVyY2VudGFnZSBvZiBmdW5jdGlvbiwgd2VpZ2h0ZWQgYnkgZXhlY3V0aW9uIGZyZXF1ZW5jeSwgdGhhdCBtdXN0IGJlIGNvdmVyZWQgYnkgdHJhY2UgZm9ybWF0aW9uLiBVc2VkIHdoZW4gcHJvZmlsZSBmZWVkYmFjayBpcyBub3QgYXZhaWxhYmxlIiwKKwkgNzUsIDAsIDEwMCkKK0RFRlBBUkFNKFRSQUNFUl9NQVhfQ09ERV9HUk9XVEgsCisJICJ0cmFjZXItbWF4LWNvZGUtZ3Jvd3RoIiwKKwkgIk1heGltYWwgY29kZSBncm93dGggY2F1c2VkIGJ5IHRhaWwgZHVwbGljYXRpb24gKGluIHBlcmNlbnQpIiwKKwkgMTAwLCAwLCAwKQorREVGUEFSQU0oVFJBQ0VSX01JTl9CUkFOQ0hfUkFUSU8sCisJICJ0cmFjZXItbWluLWJyYW5jaC1yYXRpbyIsCisJICJTdG9wIHJldmVyc2UgZ3Jvd3RoIGlmIHRoZSByZXZlcnNlIHByb2JhYmlsaXR5IG9mIGJlc3QgZWRnZSBpcyBsZXNzIHRoYW4gdGhpcyB0aHJlc2hvbGQgKGluIHBlcmNlbnQpIiwKKwkgMTAsIDAsIDEwMCkKK0RFRlBBUkFNKFRSQUNFUl9NSU5fQlJBTkNIX1BST0JBQklMSVRZX0ZFRURCQUNLLAorCSAidHJhY2VyLW1pbi1icmFuY2gtcHJvYmFiaWxpdHktZmVlZGJhY2siLAorCSAiU3RvcCBmb3J3YXJkIGdyb3d0aCBpZiB0aGUgcHJvYmFiaWxpdHkgb2YgYmVzdCBlZGdlIGlzIGxlc3MgdGhhbiB0aGlzIHRocmVzaG9sZCAoaW4gcGVyY2VudCkuIFVzZWQgd2hlbiBwcm9maWxlIGZlZWRiYWNrIGlzIGF2YWlsYWJsZSIsCisJIDgwLCAwLCAxMDApCitERUZQQVJBTShUUkFDRVJfTUlOX0JSQU5DSF9QUk9CQUJJTElUWSwKKwkgInRyYWNlci1taW4tYnJhbmNoLXByb2JhYmlsaXR5IiwKKwkgIlN0b3AgZm9yd2FyZCBncm93dGggaWYgdGhlIHByb2JhYmlsaXR5IG9mIGJlc3QgZWRnZSBpcyBsZXNzIHRoYW4gdGhpcyB0aHJlc2hvbGQgKGluIHBlcmNlbnQpLiBVc2VkIHdoZW4gcHJvZmlsZSBmZWVkYmFjayBpcyBub3QgYXZhaWxhYmxlIiwKKwkgNTAsIDAsIDEwMCkKKworLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIGluY29taW5nIGVkZ2VzIHRvIGNvbnNpZGVyIGZvciBjcm9zc2p1bXBpbmcuICAqLworREVGUEFSQU0oUEFSQU1fTUFYX0NST1NTSlVNUF9FREdFUywKKwkgIm1heC1jcm9zc2p1bXAtZWRnZXMiLAorCSAiVGhlIG1heGltdW0gbnVtYmVyIG9mIGluY29taW5nIGVkZ2VzIHRvIGNvbnNpZGVyIGZvciBjcm9zc2p1bXBpbmciLAorCSAxMDAsIDAsIDApCisKKy8qIFRoZSBtaW5pbXVtIG51bWJlciBvZiBtYXRjaGluZyBpbnN0cnVjdGlvbnMgdG8gY29uc2lkZXIgZm9yIGNyb3NzanVtcGluZy4gICovCitERUZQQVJBTShQQVJBTV9NSU5fQ1JPU1NKVU1QX0lOU05TLAorICAgICAibWluLWNyb3NzanVtcC1pbnNucyIsCisgICAgICJUaGUgbWluaW11bSBudW1iZXIgb2YgbWF0Y2hpbmcgaW5zdHJ1Y3Rpb25zIHRvIGNvbnNpZGVyIGZvciBjcm9zc2p1bXBpbmciLAorICAgICA1LCAwLCAwKQorCisvKiBUaGUgbWF4aW11bSBudW1iZXIgZXhwYW5zaW9uIGZhY3RvciB3aGVuIGNvcHlpbmcgYmFzaWMgYmxvY2tzLiAgKi8KK0RFRlBBUkFNKFBBUkFNX01BWF9HUk9XX0NPUFlfQkJfSU5TTlMsCisgICAgICJtYXgtZ3Jvdy1jb3B5LWJiLWluc25zIiwKKyAgICAgIlRoZSBtYXhpbXVtIGV4cGFuc2lvbiBmYWN0b3Igd2hlbiBjb3B5aW5nIGJhc2ljIGJsb2NrcyIsCisgICAgIDgsIDAsIDApCisKKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnNucyB0byBkdXBsaWNhdGUgd2hlbiB1bmZhY3RvcmluZyBjb21wdXRlZCBnb3Rvcy4gICovCitERUZQQVJBTShQQVJBTV9NQVhfR09UT19EVVBMSUNBVElPTl9JTlNOUywKKyAgICAgIm1heC1nb3RvLWR1cGxpY2F0aW9uLWluc25zIiwKKyAgICAgIlRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnNucyB0byBkdXBsaWNhdGUgd2hlbiB1bmZhY3RvcmluZyBjb21wdXRlZCBnb3RvcyIsCisgICAgIDgsIDAsIDApCisKKy8qIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiBwYXRoIGNvbnNpZGVyZWQgaW4gY3NlLiAgKi8KK0RFRlBBUkFNKFBBUkFNX01BWF9DU0VfUEFUSF9MRU5HVEgsCisJICJtYXgtY3NlLXBhdGgtbGVuZ3RoIiwKKwkgIlRoZSBtYXhpbXVtIGxlbmd0aCBvZiBwYXRoIGNvbnNpZGVyZWQgaW4gY3NlIiwKKwkgMTAsIDAsIDApCitERUZQQVJBTShQQVJBTV9NQVhfQ1NFX0lOU05TLAorCSAibWF4LWNzZS1pbnNucyIsCisJICJUaGUgbWF4aW11bSBpbnN0cnVjdGlvbnMgQ1NFIHByb2Nlc3MgYmVmb3JlIGZsdXNoaW5nIiwKKwkgMTAwMCwgMCwgMCkKKworLyogVGhlIGNvc3Qgb2YgZXhwcmVzc2lvbiBpbiBsb29wIGludmFyaWFudCBtb3Rpb24gdGhhdCBpcyBjb25zaWRlcmVkCisgICBleHBlbnNpdmUuICAqLworREVGUEFSQU0oUEFSQU1fTElNX0VYUEVOU0lWRSwKKwkgImxpbS1leHBlbnNpdmUiLAorCSAiVGhlIG1pbmltdW0gY29zdCBvZiBhbiBleHBlbnNpdmUgZXhwcmVzc2lvbiBpbiB0aGUgbG9vcCBpbnZhcmlhbnQgbW90aW9uIiwKKwkgMjAsIDAsIDApCisKKy8qIEJvdW5kIG9uIG51bWJlciBvZiBjYW5kaWRhdGVzIGZvciBpbmR1Y3Rpb24gdmFyaWFibGVzIGJlbG93IHRoYXQKKyAgIGFsbCBjYW5kaWRhdGVzIGFyZSBjb25zaWRlcmVkIGZvciBlYWNoIHVzZSBpbiBpbmR1Y3Rpb24gdmFyaWFibGUKKyAgIG9wdGltaXphdGlvbnMuICAqLworCitERUZQQVJBTShQQVJBTV9JVl9DT05TSURFUl9BTExfQ0FORElEQVRFU19CT1VORCwKKwkgIml2LWNvbnNpZGVyLWFsbC1jYW5kaWRhdGVzLWJvdW5kIiwKKwkgIkJvdW5kIG9uIG51bWJlciBvZiBjYW5kaWRhdGVzIGJlbG93IHRoYXQgYWxsIGNhbmRpZGF0ZXMgYXJlIGNvbnNpZGVyZWQgaW4gaXYgb3B0aW1pemF0aW9ucyIsCisJIDMwLCAwLCAwKQorCisvKiBUaGUgaW5kdWN0aW9uIHZhcmlhYmxlIG9wdGltaXphdGlvbnMgZ2l2ZSB1cCBvbiBsb29wcyB0aGF0IGNvbnRhaW4gbW9yZQorICAgaW5kdWN0aW9uIHZhcmlhYmxlIHVzZXMuICAqLworCitERUZQQVJBTShQQVJBTV9JVl9NQVhfQ09OU0lERVJFRF9VU0VTLAorCSAiaXYtbWF4LWNvbnNpZGVyZWQtdXNlcyIsCisJICJCb3VuZCBvbiBudW1iZXIgb2YgaXYgdXNlcyBpbiBsb29wIG9wdGltaXplZCBpbiBpdiBvcHRpbWl6YXRpb25zIiwKKwkgMjUwLCAwLCAwKQorCisvKiBJZiB0aGVyZSBhcmUgYXQgbW9zdCB0aGlzIG51bWJlciBvZiBpdnMgaW4gdGhlIHNldCwgdHJ5IHJlbW92aW5nIHVubmVjZXNzYXJ5CisgICBpdnMgZnJvbSB0aGUgc2V0IGFsd2F5cy4gICovCisKK0RFRlBBUkFNKFBBUkFNX0lWX0FMV0FZU19QUlVORV9DQU5EX1NFVF9CT1VORCwKKwkgIml2LWFsd2F5cy1wcnVuZS1jYW5kLXNldC1ib3VuZCIsCisJICJJZiBudW1iZXIgb2YgY2FuZGlkYXRlcyBpbiB0aGUgc2V0IGlzIHNtYWxsZXIsIHdlIGFsd2F5cyB0cnkgdG8gcmVtb3ZlIHVudXNlZCBpdnMgZHVyaW5nIGl0cyBvcHRpbWl6YXRpb24iLAorCSAxMCwgMCwgMCkKKworREVGUEFSQU0oUEFSQU1fU0NFVl9NQVhfRVhQUl9TSVpFLAorIAkgInNjZXYtbWF4LWV4cHItc2l6ZSIsCisJICJCb3VuZCBvbiBzaXplIG9mIGV4cHJlc3Npb25zIHVzZWQgaW4gdGhlIHNjYWxhciBldm9sdXRpb25zIGFuYWx5emVyIiwKKwkgMjAsIDAsIDApCisKK0RFRlBBUkFNKFBBUkFNX09NRUdBX01BWF9WQVJTLAorIAkgIm9tZWdhLW1heC12YXJzIiwKKwkgIkJvdW5kIG9uIHRoZSBudW1iZXIgb2YgdmFyaWFibGVzIGluIE9tZWdhIGNvbnN0cmFpbnQgc3lzdGVtcyIsCisJIDEyOCwgMCwgMCkKKworREVGUEFSQU0oUEFSQU1fT01FR0FfTUFYX0dFUVMsCisgCSAib21lZ2EtbWF4LWdlcXMiLAorCSAiQm91bmQgb24gdGhlIG51bWJlciBvZiBpbmVxdWFsaXRpZXMgaW4gT21lZ2EgY29uc3RyYWludCBzeXN0ZW1zIiwKKwkgMjU2LCAwLCAwKQorCitERUZQQVJBTShQQVJBTV9PTUVHQV9NQVhfRVFTLAorIAkgIm9tZWdhLW1heC1lcXMiLAorCSAiQm91bmQgb24gdGhlIG51bWJlciBvZiBlcXVhbGl0aWVzIGluIE9tZWdhIGNvbnN0cmFpbnQgc3lzdGVtcyIsCisJIDEyOCwgMCwgMCkKKworREVGUEFSQU0oUEFSQU1fT01FR0FfTUFYX1dJTERfQ0FSRFMsCisgCSAib21lZ2EtbWF4LXdpbGQtY2FyZHMiLAorCSAiQm91bmQgb24gdGhlIG51bWJlciBvZiB3aWxkIGNhcmRzIGluIE9tZWdhIGNvbnN0cmFpbnQgc3lzdGVtcyIsCisJIDE4LCAwLCAwKQorCitERUZQQVJBTShQQVJBTV9PTUVHQV9IQVNIX1RBQkxFX1NJWkUsCisgCSAib21lZ2EtaGFzaC10YWJsZS1zaXplIiwKKwkgIkJvdW5kIG9uIHRoZSBzaXplIG9mIHRoZSBoYXNoIHRhYmxlIGluIE9tZWdhIGNvbnN0cmFpbnQgc3lzdGVtcyIsCisJIDU1MCwgMCwgMCkKKworREVGUEFSQU0oUEFSQU1fT01FR0FfTUFYX0tFWVMsCisgCSAib21lZ2EtbWF4LWtleXMiLAorCSAiQm91bmQgb24gdGhlIG51bWJlciBvZiBrZXlzIGluIE9tZWdhIGNvbnN0cmFpbnQgc3lzdGVtcyIsCisJIDUwMCwgMCwgMCkKKworREVGUEFSQU0oUEFSQU1fT01FR0FfRUxJTUlOQVRFX1JFRFVOREFOVF9DT05TVFJBSU5UUywKKyAJICJvbWVnYS1lbGltaW5hdGUtcmVkdW5kYW50LWNvbnN0cmFpbnRzIiwKKwkgIldoZW4gc2V0IHRvIDEsIHVzZSBleHBlbnNpdmUgbWV0aG9kcyB0byBlbGltaW5hdGUgYWxsIHJlZHVuZGFudCBjb25zdHJhaW50cyIsCisJIDAsIDAsIDEpCisKK0RFRlBBUkFNKFBBUkFNX1ZFQ1RfTUFYX1ZFUlNJT05fRk9SX0FMSUdOTUVOVF9DSEVDS1MsCisgICAgICAgICAidmVjdC1tYXgtdmVyc2lvbi1mb3ItYWxpZ25tZW50LWNoZWNrcyIsCisgICAgICAgICAiQm91bmQgb24gbnVtYmVyIG9mIHJ1bnRpbWUgY2hlY2tzIGluc2VydGVkIGJ5IHRoZSB2ZWN0b3JpemVyJ3MgbG9vcCB2ZXJzaW9uaW5nIGZvciBhbGlnbm1lbnQgY2hlY2siLAorICAgICAgICAgNiwgMCwgMCkKKworREVGUEFSQU0oUEFSQU1fVkVDVF9NQVhfVkVSU0lPTl9GT1JfQUxJQVNfQ0hFQ0tTLAorICAgICAgICAgInZlY3QtbWF4LXZlcnNpb24tZm9yLWFsaWFzLWNoZWNrcyIsCisgICAgICAgICAiQm91bmQgb24gbnVtYmVyIG9mIHJ1bnRpbWUgY2hlY2tzIGluc2VydGVkIGJ5IHRoZSB2ZWN0b3JpemVyJ3MgbG9vcCB2ZXJzaW9uaW5nIGZvciBhbGlhcyBjaGVjayIsCisgICAgICAgICAxMCwgMCwgMCkKKworREVGUEFSQU0oUEFSQU1fTUFYX0NTRUxJQl9NRU1PUllfTE9DQVRJT05TLAorCSAibWF4LWNzZWxpYi1tZW1vcnktbG9jYXRpb25zIiwKKwkgIlRoZSBtYXhpbXVtIG1lbW9yeSBsb2NhdGlvbnMgcmVjb3JkZWQgYnkgY3NlbGliIiwKKwkgNTAwLCAwLCAwKQorCisjaWZkZWYgRU5BQkxFX0dDX0FMV0FZU19DT0xMRUNUCisjIGRlZmluZSBHR0NfTUlOX0VYUEFORF9ERUZBVUxUIDAKKyMgZGVmaW5lIEdHQ19NSU5fSEVBUFNJWkVfREVGQVVMVCAwCisjZWxzZQorIyBkZWZpbmUgR0dDX01JTl9FWFBBTkRfREVGQVVMVCAzMAorIyBkZWZpbmUgR0dDX01JTl9IRUFQU0laRV9ERUZBVUxUIDQwOTYKKyNlbmRpZgorCitERUZQQVJBTShHR0NfTUlOX0VYUEFORCwKKwkgImdnYy1taW4tZXhwYW5kIiwKKwkgIk1pbmltdW0gaGVhcCBleHBhbnNpb24gdG8gdHJpZ2dlciBnYXJiYWdlIGNvbGxlY3Rpb24sIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgaGVhcCIsCisJIEdHQ19NSU5fRVhQQU5EX0RFRkFVTFQsIDAsIDApCisKK0RFRlBBUkFNKEdHQ19NSU5fSEVBUFNJWkUsCisJICJnZ2MtbWluLWhlYXBzaXplIiwKKwkgIk1pbmltdW0gaGVhcCBzaXplIGJlZm9yZSB3ZSBzdGFydCBjb2xsZWN0aW5nIGdhcmJhZ2UsIGluIGtpbG9ieXRlcyIsCisJIEdHQ19NSU5fSEVBUFNJWkVfREVGQVVMVCwgMCwgMCkKKworI3VuZGVmIEdHQ19NSU5fRVhQQU5EX0RFRkFVTFQKKyN1bmRlZiBHR0NfTUlOX0hFQVBTSVpFX0RFRkFVTFQKKworREVGUEFSQU0oUEFSQU1fTUFYX1JFTE9BRF9TRUFSQ0hfSU5TTlMsCisJICJtYXgtcmVsb2FkLXNlYXJjaC1pbnNucyIsCisJICJUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIHRvIHNlYXJjaCBiYWNrd2FyZCB3aGVuIGxvb2tpbmcgZm9yIGVxdWl2YWxlbnQgcmVsb2FkIiwKKwkgMTAwLCAwLCAwKQorCitERUZQQVJBTShQQVJBTV9NQVhfU0NIRURfUkVHSU9OX0JMT0NLUywKKwkgIm1heC1zY2hlZC1yZWdpb24tYmxvY2tzIiwKKwkgIlRoZSBtYXhpbXVtIG51bWJlciBvZiBibG9ja3MgaW4gYSByZWdpb24gdG8gYmUgY29uc2lkZXJlZCBmb3IgaW50ZXJibG9jayBzY2hlZHVsaW5nIiwKKwkgMTAsIDAsIDApCisKK0RFRlBBUkFNKFBBUkFNX01BWF9TQ0hFRF9SRUdJT05fSU5TTlMsCisJICJtYXgtc2NoZWQtcmVnaW9uLWluc25zIiwKKwkgIlRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnNucyBpbiBhIHJlZ2lvbiB0byBiZSBjb25zaWRlcmVkIGZvciBpbnRlcmJsb2NrIHNjaGVkdWxpbmciLAorCSAxMDAsIDAsIDApCisKK0RFRlBBUkFNKFBBUkFNX01BWF9QSVBFTElORV9SRUdJT05fQkxPQ0tTLAorCSAibWF4LXBpcGVsaW5lLXJlZ2lvbi1ibG9ja3MiLAorCSAiVGhlIG1heGltdW0gbnVtYmVyIG9mIGJsb2NrcyBpbiBhIHJlZ2lvbiB0byBiZSBjb25zaWRlcmVkIGZvciBpbnRlcmJsb2NrIHNjaGVkdWxpbmciLAorCSAxNSwgMCwgMCkKKworREVGUEFSQU0oUEFSQU1fTUFYX1BJUEVMSU5FX1JFR0lPTl9JTlNOUywKKwkgIm1heC1waXBlbGluZS1yZWdpb24taW5zbnMiLAorCSAiVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc25zIGluIGEgcmVnaW9uIHRvIGJlIGNvbnNpZGVyZWQgZm9yIGludGVyYmxvY2sgc2NoZWR1bGluZyIsCisJIDIwMCwgMCwgMCkKKworREVGUEFSQU0oUEFSQU1fTUlOX1NQRUNfUFJPQiwKKyAgICAgICAgICJtaW4tc3BlYy1wcm9iIiwKKyAgICAgICAgICJUaGUgbWluaW11bSBwcm9iYWJpbGl0eSBvZiByZWFjaGluZyBhIHNvdXJjZSBibG9jayBmb3IgaW50ZXJibG9jayBzcGVjdWxhdGl2ZSBzY2hlZHVsaW5nIiwKKyAgICAgICAgIDQwLCAwLCAwKQorCitERUZQQVJBTShQQVJBTV9NQVhfU0NIRURfRVhURU5EX1JFR0lPTlNfSVRFUlMsCisgICAgICAgICAibWF4LXNjaGVkLWV4dGVuZC1yZWdpb25zLWl0ZXJzIiwKKyAgICAgICAgICJUaGUgbWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0aHJvdWdoIENGRyB0byBleHRlbmQgcmVnaW9ucyIsCisgICAgICAgICAwLCAwLCAwKQorCitERUZQQVJBTShQQVJBTV9NQVhfU0NIRURfSU5TTl9DT05GTElDVF9ERUxBWSwKKyAgICAgICAgICJtYXgtc2NoZWQtaW5zbi1jb25mbGljdC1kZWxheSIsCisgICAgICAgICAiVGhlIG1heGltdW0gY29uZmxpY3QgZGVsYXkgZm9yIGFuIGluc24gdG8gYmUgY29uc2lkZXJlZCBmb3Igc3BlY3VsYXRpdmUgbW90aW9uIiwKKyAgICAgICAgIDMsIDEsIDEwKQorCitERUZQQVJBTShQQVJBTV9TQ0hFRF9TUEVDX1BST0JfQ1VUT0ZGLAorICAgICAgICAgInNjaGVkLXNwZWMtcHJvYi1jdXRvZmYiLAorICAgICAgICAgIlRoZSBtaW5pbWFsIHByb2JhYmlsaXR5IG9mIHNwZWN1bGF0aW9uIHN1Y2Nlc3MgKGluIHBlcmNlbnRzKSwgc28gdGhhdCBzcGVjdWxhdGl2ZSBpbnNuIHdpbGwgYmUgc2NoZWR1bGVkLiIsCisgICAgICAgICA0MCwgMCwgMTAwKQorCitERUZQQVJBTShQQVJBTV9TRUxTQ0hFRF9NQVhfTE9PS0FIRUFELAorICAgICAgICAgInNlbHNjaGVkLW1heC1sb29rYWhlYWQiLAorICAgICAgICAgIlRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGxvb2thaGVhZCB3aW5kb3cgb2Ygc2VsZWN0aXZlIHNjaGVkdWxpbmciLAorICAgICAgICAgNTAsIDAsIDApCisKK0RFRlBBUkFNKFBBUkFNX1NFTFNDSEVEX01BWF9TQ0hFRF9USU1FUywKKyAgICAgICAgICJzZWxzY2hlZC1tYXgtc2NoZWQtdGltZXMiLAorICAgICAgICAgIk1heGltdW0gbnVtYmVyIG9mIHRpbWVzIHRoYXQgYW4gaW5zbiBjb3VsZCBiZSBzY2hlZHVsZWQiLAorICAgICAgICAgMiwgMCwgMCkKKworREVGUEFSQU0oUEFSQU1fU0VMU0NIRURfSU5TTlNfVE9fUkVOQU1FLAorICAgICAgICAgInNlbHNjaGVkLWluc25zLXRvLXJlbmFtZSIsCisgICAgICAgICAiTWF4aW11bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIGluIHRoZSByZWFkeSBsaXN0IHRoYXQgYXJlIGNvbnNpZGVyZWQgZWxpZ2libGUgZm9yIHJlbmFtaW5nIiwKKyAgICAgICAgIDIsIDAsIDApCisKK0RFRlBBUkFNIChQQVJBTV9TQ0hFRF9NRU1fVFJVRV9ERVBfQ09TVCwKKwkgICJzY2hlZC1tZW0tdHJ1ZS1kZXAtY29zdCIsCisJICAiTWluaW1hbCBkaXN0YW5jZSBiZXR3ZWVuIHBvc3NpYmx5IGNvbmZsaWN0aW5nIHN0b3JlIGFuZCBsb2FkIiwKKwkgIDEsIDAsIDApCisKK0RFRlBBUkFNKFBBUkFNX01BWF9MQVNUX1ZBTFVFX1JUTCwKKwkgIm1heC1sYXN0LXZhbHVlLXJ0bCIsCisJICJUaGUgbWF4aW11bSBudW1iZXIgb2YgUlRMIG5vZGVzIHRoYXQgY2FuIGJlIHJlY29yZGVkIGFzIGNvbWJpbmVyJ3MgbGFzdCB2YWx1ZSIsCisJIDEwMDAwLCAwLCAwKQorCisvKiBJTlRFR0VSX0NTVCBub2RlcyBhcmUgc2hhcmVkIGZvciB2YWx1ZXMgW3stMSwwfSAuLiBOKSBmb3IKKyAgIHtzaWduZWQsdW5zaWduZWR9IGludGVncmFsIHR5cGVzLiAgVGhpcyBkZXRlcm1pbmVzIE4uCisgICBFeHBlcmltZW50YXRpb24gc2hvd3MgMjU2IHRvIGJlIGEgZ29vZCB2YWx1ZS4gICovCitERUZQQVJBTSAoUEFSQU1fSU5URUdFUl9TSEFSRV9MSU1JVCwKKwkgICJpbnRlZ2VyLXNoYXJlLWxpbWl0IiwKKwkgICJUaGUgdXBwZXIgYm91bmQgZm9yIHNoYXJpbmcgaW50ZWdlciBjb25zdGFudHMiLAorCSAgMjU2LCAyLCAyKQorCisvKiBJbmNyZW1lbnRhbCBTU0EgdXBkYXRlcyBmb3IgdmlydHVhbCBvcGVyYW5kcyBtYXkgYmUgdmVyeSBzbG93IGlmCisgICB0aGVyZSBpcyBhIGxhcmdlIG51bWJlciBvZiBtYXBwaW5ncyB0byBwcm9jZXNzLiAgSW4gdGhvc2UgY2FzZXMsIGl0CisgICBpcyBmYXN0ZXIgdG8gcmV3cml0ZSB0aGUgdmlydHVhbCBzeW1ib2xzIGZyb20gc2NyYXRjaCBhcyBpZiB0aGV5CisgICBoYWQgYmVlbiByZWNlbnRseSBpbnRyb2R1Y2VkLiAgVGhpcyBoZXVyaXN0aWMgY2Fubm90IGJlIGFwcGxpZWQgdG8KKyAgIFNTQSBtYXBwaW5ncyBmb3IgcmVhbCBTU0EgbmFtZXMsIG9ubHkgc3ltYm9scyBrZXB0IGluIEZVRCBjaGFpbnMuCisKKyAgIFBBUkFNX01JTl9WSVJUVUFMX01BUFBJTkdTIHNwZWNpZmllcyB0aGUgbWluaW11bSBudW1iZXIgb2YgdmlydHVhbAorICAgbWFwcGluZ3MgdGhhdCBzaG91bGQgYmUgcmVnaXN0ZXJlZCB0byB0cmlnZ2VyIHRoZSBoZXVyaXN0aWMuCisKKyAgIFBBUkFNX1ZJUlRVQUxfTUFQUElOR1NfVE9fU1lNU19SQVRJTyBzcGVjaWZpZXMgdGhlIHJhdGlvIGJldHdlZW4KKyAgIG1hcHBpbmdzIGFuZCBzeW1ib2xzLiAgSWYgdGhlIG51bWJlciBvZiB2aXJ0dWFsIG1hcHBpbmdzIGlzCisgICBQQVJBTV9WSVJUVUFMX01BUFBJTkdTX1RPX1NZTVNfUkFUSU8gYmlnZ2VyIHRoYW4gdGhlIG51bWJlciBvZgorICAgdmlydHVhbCBzeW1ib2xzIHRvIGJlIHVwZGF0ZWQsIHRoZW4gdGhlIHVwZGF0ZXIgc3dpdGNoZXMgdG8gYSBmdWxsCisgICB1cGRhdGUgZm9yIHRob3NlIHN5bWJvbHMuICAqLworREVGUEFSQU0gKFBBUkFNX01JTl9WSVJUVUFMX01BUFBJTkdTLAorCSAgIm1pbi12aXJ0dWFsLW1hcHBpbmdzIiwKKwkgICJNaW5pbXVtIG51bWJlciBvZiB2aXJ0dWFsIG1hcHBpbmdzIHRvIGNvbnNpZGVyIHN3aXRjaGluZyB0byBmdWxsIHZpcnR1YWwgcmVuYW1lcyIsCisJICAxMDAsIDAsIDApCisKK0RFRlBBUkFNIChQQVJBTV9WSVJUVUFMX01BUFBJTkdTX1RPX1NZTVNfUkFUSU8sCisJICAidmlydHVhbC1tYXBwaW5ncy1yYXRpbyIsCisJICAiUmF0aW8gYmV0d2VlbiB2aXJ0dWFsIG1hcHBpbmdzIGFuZCB2aXJ0dWFsIHN5bWJvbHMgdG8gZG8gZnVsbCB2aXJ0dWFsIHJlbmFtZXMiLAorCSAgMywgMCwgMCkKKworREVGUEFSQU0gKFBBUkFNX1NTUF9CVUZGRVJfU0laRSwKKwkgICJzc3AtYnVmZmVyLXNpemUiLAorCSAgIlRoZSBsb3dlciBib3VuZCBmb3IgYSBidWZmZXIgdG8gYmUgY29uc2lkZXJlZCBmb3Igc3RhY2sgc21hc2hpbmcgcHJvdGVjdGlvbiIsCisJICA4LCAxLCAwKQorCisvKiBXaGVuIHdlIHRocmVhZCB0aHJvdWdoIGEgYmxvY2sgd2UgaGF2ZSB0byBtYWtlIGNvcGllcyBvZiB0aGUKKyAgIHN0YXRlbWVudHMgd2l0aGluIHRoZSBibG9jay4gIENsZWFybHkgZm9yIGxhcmdlIGJsb2NrcyB0aGUgY29kZQorICAgZHVwbGljYXRpb24gaXMgYmFkLgorCisgICBQQVJBTV9NQVhfSlVNUF9USFJFQURfRFVQTElDQVRJT05fU1RNVFMgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlcgorICAgb2Ygc3RhdGVtZW50cyBhbmQgUEhJIG5vZGVzIGFsbG93ZWQgaW4gYSBibG9jayB3aGljaCBpcyBnb2luZyB0bworICAgYmUgZHVwbGljYXRlZCBmb3IgdGhyZWFkIGp1bXBpbmcgcHVycG9zZXMuCisKKyAgIFNvbWUgc2ltcGxlIGFuYWx5c2lzIHNob3dlZCB0aGF0IG1vcmUgdGhhbiA5OSUgb2YgdGhlIGp1bXAKKyAgIHRocmVhZGluZyBvcHBvcnR1bml0aWVzIGFyZSBmb3IgYmxvY2tzIHdpdGggbGVzcyB0aGFuIDE1CisgICBzdGF0ZW1lbnRzLiAgU28gd2UgY2FuIGdldCB0aGUgYmVuZWZpdHMgb2YganVtcCB0aHJlYWRpbmcKKyAgIHdpdGhvdXQgZXhjZXNzaXZlIGNvZGUgYmxvYXQgZm9yIHBhdGhvbG9naWNhbCBjYXNlcyB3aXRoIHRoZQorICAgdGhyb3R0bGUgc2V0IGF0IDE1IHN0YXRlbWVudHMuICAqLworREVGUEFSQU0gKFBBUkFNX01BWF9KVU1QX1RIUkVBRF9EVVBMSUNBVElPTl9TVE1UUywKKwkgICJtYXgtanVtcC10aHJlYWQtZHVwbGljYXRpb24tc3RtdHMiLAorICAgICAgICAgICJNYXhpbXVtIG51bWJlciBvZiBzdGF0ZW1lbnRzIGFsbG93ZWQgaW4gYSBibG9jayB0aGF0IG5lZWRzIHRvIGJlIGR1cGxpY2F0ZWQgd2hlbiB0aHJlYWRpbmcganVtcHMiLAorCSAgMTUsIDAsIDApCisKKy8qIFRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZpZWxkcyBhIHZhcmlhYmxlIG1heSBoYXZlIGJlZm9yZSB0aGUgcG9pbnRlciBhbmFseXNpcyBtYWNoaW5lcnkKKyAgIHdpbGwgc3RvcCB0cnlpbmcgdG8gdHJlYXQgaXQgaW4gYSBmaWVsZC1zZW5zaXRpdmUgbWFubmVyLgorICAgVGhlcmUgYXJlIHByb2dyYW1zIG91dCB0aGVyZSB3aXRoIHRob3VzYW5kcyBvZiBmaWVsZHMgcGVyIHN0cnVjdHVyZSwgYW5kIGhhbmRsaW5nIHRoZW0KKyAgIGZpZWxkLXNlbnNpdGl2ZWx5IGlzIG5vdCB3b3J0aCB0aGUgY29zdC4gICovCitERUZQQVJBTSAoUEFSQU1fTUFYX0ZJRUxEU19GT1JfRklFTERfU0VOU0lUSVZFLAorICAgICAgICAgICJtYXgtZmllbGRzLWZvci1maWVsZC1zZW5zaXRpdmUiLAorCSAgIk1heGltdW0gbnVtYmVyIG9mIGZpZWxkcyBpbiBhIHN0cnVjdHVyZSBiZWZvcmUgcG9pbnRlciBhbmFseXNpcyB0cmVhdHMgdGhlIHN0cnVjdHVyZSBhcyBhIHNpbmdsZSB2YXJpYWJsZSIsCisJICAwLCAwLCAwKQorCitERUZQQVJBTShQQVJBTV9NQVhfU0NIRURfUkVBRFlfSU5TTlMsCisJICJtYXgtc2NoZWQtcmVhZHktaW5zbnMiLAorCSAiVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyByZWFkeSB0byBiZSBpc3N1ZWQgdG8gYmUgY29uc2lkZXJlZCBieSB0aGUgc2NoZWR1bGVyIGR1cmluZyB0aGUgZmlyc3Qgc2NoZWR1bGluZyBwYXNzIiwKKwkgMTAwLCAwLCAwKQorCisvKiBQcmVmZXRjaGluZyBhbmQgY2FjaGUtb3B0aW1pemF0aW9ucyByZWxhdGVkIHBhcmFtZXRlcnMuICBEZWZhdWx0IHZhbHVlcyBhcmUKKyAgIHVzdWFsbHkgc2V0IGJ5IG1hY2hpbmUgZGVzY3JpcHRpb24uICAqLworCisvKiBUaGUgbnVtYmVyIG9mIGluc25zIGV4ZWN1dGVkIGJlZm9yZSBwcmVmZXRjaCBpcyBjb21wbGV0ZWQuICAqLworCitERUZQQVJBTSAoUEFSQU1fUFJFRkVUQ0hfTEFURU5DWSwKKwkgInByZWZldGNoLWxhdGVuY3kiLAorCSAiVGhlIG51bWJlciBvZiBpbnNucyBleGVjdXRlZCBiZWZvcmUgcHJlZmV0Y2ggaXMgY29tcGxldGVkIiwKKwkgMjAwLCAwLCAwKQorCisvKiBUaGUgbnVtYmVyIG9mIHByZWZldGNoZXMgdGhhdCBjYW4gcnVuIGF0IHRoZSBzYW1lIHRpbWUuICAqLworCitERUZQQVJBTSAoUEFSQU1fU0lNVUxUQU5FT1VTX1BSRUZFVENIRVMsCisJICAic2ltdWx0YW5lb3VzLXByZWZldGNoZXMiLAorCSAgIlRoZSBudW1iZXIgb2YgcHJlZmV0Y2hlcyB0aGF0IGNhbiBydW4gYXQgdGhlIHNhbWUgdGltZSIsCisJICAzLCAwLCAwKQorCisvKiBUaGUgc2l6ZSBvZiBMMSBjYWNoZSBpbiBrQi4gICovCisKK0RFRlBBUkFNIChQQVJBTV9MMV9DQUNIRV9TSVpFLAorCSAgImwxLWNhY2hlLXNpemUiLAorCSAgIlRoZSBzaXplIG9mIEwxIGNhY2hlIiwKKwkgIDY0LCAwLCAwKQorCisvKiBUaGUgc2l6ZSBvZiBMMSBjYWNoZSBsaW5lIGluIGJ5dGVzLiAgKi8KKworREVGUEFSQU0gKFBBUkFNX0wxX0NBQ0hFX0xJTkVfU0laRSwKKwkgICJsMS1jYWNoZS1saW5lLXNpemUiLAorCSAgIlRoZSBzaXplIG9mIEwxIGNhY2hlIGxpbmUiLAorCSAgMzIsIDAsIDApCisKKy8qIFRoZSBzaXplIG9mIEwyIGNhY2hlIGluIGtCLiAgKi8KKworREVGUEFSQU0gKFBBUkFNX0wyX0NBQ0hFX1NJWkUsCisJICAibDItY2FjaGUtc2l6ZSIsCisJICAiVGhlIHNpemUgb2YgTDIgY2FjaGUiLAorCSAgNTEyLCAwLCAwKQorCisvKiBXaGV0aGVyIHdlIHNob3VsZCB1c2UgY2Fub25pY2FsIHR5cGVzIHJhdGhlciB0aGFuIGRlZXAgInN0cnVjdHVyYWwiCisgICB0eXBlIGNoZWNraW5nLiAgU2V0dGluZyB0aGlzIHZhbHVlIHRvIDEgKHRoZSBkZWZhdWx0KSBpbXByb3ZlcworICAgY29tcGlsYXRpb24gcGVyZm9ybWFuY2UgaW4gdGhlIEMrKyBhbmQgT2JqZWN0aXZlLUMrKyBmcm9udCBlbmQ7CisgICB0aGlzIHZhbHVlIHNob3VsZCBvbmx5IGJlIHNldCB0byB6ZXJvIHRvIHdvcmsgYXJvdW5kIGJ1Z3MgaW4gdGhlCisgICBjYW5vbmljYWwgdHlwZSBzeXN0ZW0gYnkgZGlzYWJsaW5nIGl0LiAgKi8KKworREVGUEFSQU0gKFBBUkFNX1VTRV9DQU5PTklDQUxfVFlQRVMsCisJICAidXNlLWNhbm9uaWNhbC10eXBlcyIsCisJICAiV2hldGhlciB0byB1c2UgY2Fub25pY2FsIHR5cGVzIiwKKwkgIDEsIDAsIDEpCisKK0RFRlBBUkFNIChQQVJBTV9NQVhfUEFSVElBTF9BTlRJQ19MRU5HVEgsCisJICAibWF4LXBhcnRpYWwtYW50aWMtbGVuZ3RoIiwKKwkgICJNYXhpbXVtIGxlbmd0aCBvZiBwYXJ0aWFsIGFudGljIHNldCB3aGVuIHBlcmZvcm1pbmcgdHJlZSBwcmUgb3B0aW1pemF0aW9uIiwKKwkgIDEwMCwgMCwgMCkKKworLyogVGhlIGZvbGxvd2luZyBpcyB1c2VkIGFzIGEgc3RvcC1nYXAgbGltaXQgZm9yIGNhc2VzIHdoZXJlIHJlYWxseSBodWdlCisgICBTQ0NzIGJsb3cgdXAgbWVtb3J5IGFuZCBjb21waWxlLXRpbWUgdXNlIHRvbyBtdWNoLiAgSWYgd2UgaGl0IHRoaXMgbGltaXQsCisgICBTQ0NWTiBhbmQgc3VjaCBGUkUgYW5kIFBSRSB3aWxsIGJlIG5vdCBkb25lIGF0IGFsbCBmb3IgdGhlIGN1cnJlbnQKKyAgIGZ1bmN0aW9uLiAgKi8KKworREVGUEFSQU0gKFBBUkFNX1NDQ1ZOX01BWF9TQ0NfU0laRSwKKwkgICJzY2N2bi1tYXgtc2NjLXNpemUiLAorCSAgIk1heGltdW0gc2l6ZSBvZiBhIFNDQyBiZWZvcmUgU0NDVk4gc3RvcHMgcHJvY2Vzc2luZyBhIGZ1bmN0aW9uIiwKKwkgIDEwMDAwLCAxMCwgMCkKKworREVGUEFSQU0gKFBBUkFNX0lSQV9NQVhfTE9PUFNfTlVNLAorCSAgImlyYS1tYXgtbG9vcHMtbnVtIiwKKwkgICJNYXggbG9vcHMgbnVtYmVyIGZvciByZWdpb25hbCBSQSIsCisJICAxMDAsIDAsIDApCisKK0RFRlBBUkFNIChQQVJBTV9JUkFfTUFYX0NPTkZMSUNUX1RBQkxFX1NJWkUsCisJICAiaXJhLW1heC1jb25mbGljdC10YWJsZS1zaXplIiwKKwkgICJNYXggc2l6ZSBvZiBjb25mbGljdCB0YWJsZSBpbiBNQiIsCisJICAxMDAwLCAwLCAwKQorCitERUZQQVJBTSAoUEFSQU1fSVJBX0xPT1BfUkVTRVJWRURfUkVHUywKKwkgICJpcmEtbG9vcC1yZXNlcnZlZC1yZWdzIiwKKwkgICJUaGUgbnVtYmVyIG9mIHJlZ2lzdGVycyBpbiBlYWNoIGNsYXNzIGtlcHQgdW51c2VkIGJ5IGxvb3AgaW52YXJpYW50IG1vdGlvbiIsCisJICAyLCAwLCAwKQorCisvKiBTd2l0Y2ggaW5pdGlhbGl6YXRpb24gY29udmVyc2lvbiB3aWxsIHJlZnVzZSB0byBjcmVhdGUgYXJyYXlzIHRoYXQgYXJlCisgICBiaWdnZXIgdGhhbiB0aGlzIHBhcmFtZXRlciB0aW1lcyB0aGUgbnVtYmVyIG9mIHN3aXRjaCBicmFuY2hlcy4gICovCisKK0RFRlBBUkFNIChQQVJBTV9TV0lUQ0hfQ09OVkVSU0lPTl9CUkFOQ0hfUkFUSU8sCisJICAic3dpdGNoLWNvbnZlcnNpb24tbWF4LWJyYW5jaC1yYXRpbyIsCisJICAiVGhlIG1heGltdW0gcmF0aW8gYmV0d2VlbiBhcnJheSBzaXplIGFuZCBzd2l0Y2ggYnJhbmNoZXMgZm9yICIKKwkgICJhIHN3aXRjaCBjb252ZXJzaW9uIHRvIHRha2UgcGxhY2UiLAorCSAgOCwgMSwgMCkKKworLyogU2l6ZSBvZiB0aWxlcyB3aGVuIGRvaW5nIGxvb3AgYmxvY2tpbmcuICAqLworCitERUZQQVJBTSAoUEFSQU1fTE9PUF9CTE9DS19USUxFX1NJWkUsCisJICAibG9vcC1ibG9jay10aWxlLXNpemUiLAorCSAgInNpemUgb2YgdGlsZXMgZm9yIGxvb3AgYmxvY2tpbmciLAorCSAgNTEsIDAsIDApCisKKy8qIE1heGltYWwgbnVtYmVyIG9mIHBhcmFtZXRlcnMgdGhhdCB3ZSBhbGxvdyBpbiBhIFNDb1AuICAqLworCitERUZQQVJBTSAoUEFSQU1fR1JBUEhJVEVfTUFYX05CX1NDT1BfUEFSQU1TLAorCSAgImdyYXBoaXRlLW1heC1uYi1zY29wLXBhcmFtcyIsCisJICAibWF4aW11bSBudW1iZXIgb2YgcGFyYW1ldGVycyBpbiBhIFNDb1AiLAorCSAgMTAsIDAsIDApCisKKy8qIE1heGltYWwgbnVtYmVyIG9mIGJhc2ljIGJsb2NrcyBpbiB0aGUgZnVuY3Rpb25zIGFuYWx5emVkIGJ5IEdyYXBoaXRlLiAgKi8KKworREVGUEFSQU0gKFBBUkFNX0dSQVBISVRFX01BWF9CQlNfUEVSX0ZVTkNUSU9OLAorCSAgImdyYXBoaXRlLW1heC1iYnMtcGVyLWZ1bmN0aW9uIiwKKwkgICJtYXhpbXVtIG51bWJlciBvZiBiYXNpYyBibG9ja3MgcGVyIGZ1bmN0aW9uIHRvIGJlIGFuYWx5emVkIGJ5IEdyYXBoaXRlIiwKKwkgIDEwMCwgMCwgMCkKKworLyogQXZvaWQgZG9pbmcgbG9vcCBpbnZhcmlhbnQgbW90aW9uIG9uIHZlcnkgbGFyZ2UgbG9vcHMuICAqLworCitERUZQQVJBTSAoUEFSQU1fTE9PUF9JTlZBUklBTlRfTUFYX0JCU19JTl9MT09QLAorCSAgImxvb3AtaW52YXJpYW50LW1heC1iYnMtaW4tbG9vcCIsCisJICAiTWF4IGJhc2ljIGJsb2NrcyBudW1iZXIgaW4gbG9vcCBmb3IgbG9vcCBpbnZhcmlhbnQgbW90aW9uIiwKKwkgIDEwMDAwLCAwLCAwKQorCisvKiBBdm9pZCBTTFAgdmVjdG9yaXphdGlvbiBvZiBsYXJnZSBiYXNpYyBibG9ja3MuICAqLworREVGUEFSQU0gKFBBUkFNX1NMUF9NQVhfSU5TTlNfSU5fQkIsCisgICAgICAgICAgInNscC1tYXgtaW5zbnMtaW4tYmIiLAorICAgICAgICAgICJNYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgaW4gYmFzaWMgYmxvY2sgdG8gYmUgY29uc2lkZXJlZCBmb3IgU0xQIHZlY3Rvcml6YXRpb24iLAorICAgICAgICAgIDEwMDAsIDAsIDApCisKK0RFRlBBUkFNIChQQVJBTV9NSU5fSU5TTl9UT19QUkVGRVRDSF9SQVRJTywKKwkgICJtaW4taW5zbi10by1wcmVmZXRjaC1yYXRpbyIsCisJICAiTWluLiByYXRpbyBvZiBpbnNucyB0byBwcmVmZXRjaGVzIHRvIGVuYWJsZSBwcmVmZXRjaGluZyBmb3IgIgorICAgICAgICAgICJhIGxvb3Agd2l0aCBhbiB1bmtub3duIHRyaXAgY291bnQiLAorCSAgMTAsIDAsIDApCisKK0RFRlBBUkFNIChQQVJBTV9QUkVGRVRDSF9NSU5fSU5TTl9UT19NRU1fUkFUSU8sCisJICAicHJlZmV0Y2gtbWluLWluc24tdG8tbWVtLXJhdGlvIiwKKwkgICJNaW4uIHJhdGlvIG9mIGluc25zIHRvIG1lbSBvcHMgdG8gZW5hYmxlIHByZWZldGNoaW5nIGluIGEgbG9vcCIsCisJICAzLCAwLCAwKQorCisvKiBTZXQgbWF4aW11bSBoYXNoIHRhYmxlIHNpemUgZm9yIHZhciB0cmFja2luZy4gICovCisKK0RFRlBBUkFNIChQQVJBTV9NQVhfVkFSVFJBQ0tfU0laRSwKKwkgICJtYXgtdmFydHJhY2stc2l6ZSIsCisJICAiTWF4LiBzaXplIG9mIHZhciB0cmFja2luZyBoYXNoIHRhYmxlcyIsCisJICA1MDAwMDAwMCwgMCwgMCkKKworLyogU2V0IG1pbmltdW0gaW5zbiB1aWQgZm9yIG5vbi1kZWJ1ZyBpbnNucy4gICovCisKK0RFRlBBUkFNIChQQVJBTV9NSU5fTk9OREVCVUdfSU5TTl9VSUQsCisJICAibWluLW5vbmRlYnVnLWluc24tdWlkIiwKKwkgICJUaGUgbWluaW11bSBVSUQgdG8gYmUgdXNlZCBmb3IgYSBub25kZWJ1ZyBpbnNuIiwKKwkgIDAsIDEsIDApCisKK0RFRlBBUkFNIChQQVJBTV9JUEFfU1JBX1BUUl9HUk9XVEhfRkFDVE9SLAorCSAgImlwYS1zcmEtcHRyLWdyb3d0aC1mYWN0b3IiLAorCSAgIk1heGltdW0gYWxsb3dlZCBncm93dGggb2Ygc2l6ZSBvZiBuZXcgcGFyYW1ldGVycyBpcGEtc3JhIHJlcGxhY2VzICIKKwkgICJhIHBvaW50ZXIgdG8gYW4gYWdncmVnYXRlIHdpdGgiLAorCSAgMiwgMCwgMCkKKworLyoKK0xvY2FsIHZhcmlhYmxlczoKK21vZGU6YworRW5kOgorKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9wYXJhbXMuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9wYXJhbXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzNmYzNiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3BhcmFtcy5oCkBAIC0wLDAgKzEsMTgwIEBACisvKiBwYXJhbXMuaCAtIFJ1bi10aW1lIHBhcmFtZXRlcnMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDgsIDIwMDkKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBNYXJrIE1pdGNoZWxsIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+LgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBtZWFucyBmb3Igc2V0dGluZyBpbnRlZ3JhbCBwYXJhbWV0ZXJzCisgICBkeW5hbWljYWxseS4gIEluc3RlYWQgb2YgZW5jb2RpbmcgbWFnaWMgbnVtYmVycyBpbiB2YXJpb3VzIHBsYWNlcywKKyAgIHVzZSB0aGlzIG1vZHVsZSB0byBvcmdhbml6ZSBhbGwgdGhlIG1hZ2ljIG51bWJlcnMgaW4gYSBzaW5nbGUKKyAgIHBsYWNlLiAgVGhlIHZhbHVlcyBvZiB0aGUgcGFyYW1ldGVycyBjYW4gYmUgc2V0IG9uIHRoZQorICAgY29tbWFuZC1saW5lLCB0aGVyZWJ5IHByb3ZpZGluZyBhIHdheSB0byBjb250cm9sIHRoZSBhbW91bnQgb2YKKyAgIGVmZm9ydCBzcGVudCBvbiBwYXJ0aWN1bGFyIG9wdGltaXphdGlvbiBwYXNzZXMsIG9yIG90aGVyd2lzZSB0dW5lCisgICB0aGUgYmVoYXZpb3Igb2YgdGhlIGNvbXBpbGVyLgorCisgICBTaW5jZSB0aGVpciB2YWx1ZXMgY2FuIGJlIHNldCBvbiB0aGUgY29tbWFuZC1saW5lLCB0aGVzZSBwYXJhbWV0ZXJzCisgICBzaG91bGQgbm90IGJlIHVzZWQgZm9yIG5vbi1keW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uLiAgKi8KKworI2lmbmRlZiBHQ0NfUEFSQU1TX0gKKyNkZWZpbmUgR0NDX1BBUkFNU19ICisKKy8qIE5vIHBhcmFtZXRlciBzaGFsbCBoYXZlIHRoaXMgdmFsdWUuICAqLworCisjZGVmaW5lIElOVkFMSURfUEFSQU1fVkFMICgtMSkKKworLyogVGhlIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHBhcmFtZXRlci4gICovCisKK3R5cGVkZWYgc3RydWN0IHBhcmFtX2luZm8KK3sKKyAgLyogVGhlIG5hbWUgdXNlZCB3aXRoIHRoZSBgLS1wYXJhbSA8bmFtZT49PHZhbHVlPicgc3dpdGNoIHRvIHNldCB0aGlzCisgICAgIHZhbHVlLiAgKi8KKyAgY29uc3QgY2hhciAqY29uc3Qgb3B0aW9uOworICAvKiBUaGUgYXNzb2NpYXRlZCB2YWx1ZS4gICovCisgIGludCB2YWx1ZTsKKworICAvKiBUcnVlIGlmIHRoZSBwYXJhbWV0ZXIgd2FzIGV4cGxpY2l0bHkgc2V0LiAgKi8KKyAgYm9vbCBzZXQ7CisKKyAgLyogTWluaW11bSBhY2NlcHRhYmxlIHZhbHVlLiAgKi8KKyAgaW50IG1pbl92YWx1ZTsKKworICAvKiBNYXhpbXVtIGFjY2VwdGFibGUgdmFsdWUsIGlmIGdyZWF0ZXIgdGhhbiBtaW5pbXVtICAqLworICBpbnQgbWF4X3ZhbHVlOworCisgIC8qIEEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIG9wdGlvbi4gICovCisgIGNvbnN0IGNoYXIgKmNvbnN0IGhlbHA7Cit9IHBhcmFtX2luZm87CisKKy8qIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGNvbXBpbGVyIHBhcmFtZXRlcnMgYW5kIHRoZWlyIGN1cnJlbnQKKyAgIHZhbHVlcy4gICovCisKK2V4dGVybiBwYXJhbV9pbmZvICpjb21waWxlcl9wYXJhbXM7CisKKy8qIFJldHVybnMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSB0YWJsZSwgZm9yIHRoZSB1c2UgYnkgcGx1Z2lucy4gICovCitleHRlcm4gc2l6ZV90IGdldF9udW1fY29tcGlsZXJfcGFyYW1zICh2b2lkKTsKKworLyogQWRkIHRoZSBOIFBBUkFNUyB0byB0aGUgY3VycmVudCBsaXN0IG9mIGNvbXBpbGVyIHBhcmFtZXRlcnMuICAqLworCitleHRlcm4gdm9pZCBhZGRfcGFyYW1zIChjb25zdCBwYXJhbV9pbmZvIHBhcmFtc1tdLCBzaXplX3Qgbik7CisKKy8qIFNldCB0aGUgVkFMVUUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwYXJhbWV0ZXIgZ2l2ZW4gYnkgTkFNRS4gICovCisKK2V4dGVybiB2b2lkIHNldF9wYXJhbV92YWx1ZSAoY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKTsKKworDAorLyogVGhlIHBhcmFtZXRlcnMgaW4gdXNlIGJ5IGxhbmd1YWdlLWluZGVwZW5kZW50IGNvZGUuICAqLworCit0eXBlZGVmIGVudW0gY29tcGlsZXJfcGFyYW0KK3sKKyNkZWZpbmUgREVGUEFSQU0oZW51bWVyYXRvciwgb3B0aW9uLCBtc2dpZCwgZGVmYXVsdCwgbWluLCBtYXgpIFwKKyAgZW51bWVyYXRvciwKKyNpbmNsdWRlICJwYXJhbXMuZGVmIgorI3VuZGVmIERFRlBBUkFNCisgIExBU1RfUEFSQU0KK30gY29tcGlsZXJfcGFyYW07CisKKy8qIFRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyIGdpdmVuIGJ5IEVOVU0uICAqLworI2RlZmluZSBQQVJBTV9WQUxVRShFTlVNKSBcCisgIChjb21waWxlcl9wYXJhbXNbKGludCkgRU5VTV0udmFsdWUpCisKKy8qIFRydWUgaWYgdGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIgd2FzIGV4cGxpY2l0bHkgY2hhbmdlZC4gICovCisjZGVmaW5lIFBBUkFNX1NFVF9QKEVOVU0pIFwKKyAgKGNvbXBpbGVyX3BhcmFtc1soaW50KSBFTlVNXS5zZXQpCisKKy8qIE1hY3JvcyBmb3IgdGhlIHZhcmlvdXMgcGFyYW1ldGVycy4gICovCisjZGVmaW5lIFNUUlVDVF9SRU9SR19DT0xEX1NUUlVDVF9SQVRJTyBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9TVFJVQ1RfUkVPUkdfQ09MRF9TVFJVQ1RfUkFUSU8pCisjZGVmaW5lIE1BWF9JTkxJTkVfSU5TTlNfU0lOR0xFIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX01BWF9JTkxJTkVfSU5TTlNfU0lOR0xFKQorI2RlZmluZSBNQVhfSU5MSU5FX0lOU05TIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX01BWF9JTkxJTkVfSU5TTlMpCisjZGVmaW5lIE1BWF9JTkxJTkVfU0xPUEUgXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fTUFYX0lOTElORV9TTE9QRSkKKyNkZWZpbmUgTUlOX0lOTElORV9JTlNOUyBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9NSU5fSU5MSU5FX0lOU05TKQorI2RlZmluZSBNQVhfSU5MSU5FX0lOU05TX0FVVE8gXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fTUFYX0lOTElORV9JTlNOU19BVVRPKQorI2RlZmluZSBNQVhfVkFSSUFCTEVfRVhQQU5TSU9OUyBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9NQVhfVkFSSUFCTEVfRVhQQU5TSU9OUykKKyNkZWZpbmUgTUlOX1ZFQ1RfTE9PUF9CT1VORCBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9NSU5fVkVDVF9MT09QX0JPVU5EKQorI2RlZmluZSBNQVhfREVMQVlfU0xPVF9JTlNOX1NFQVJDSCBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9NQVhfREVMQVlfU0xPVF9JTlNOX1NFQVJDSCkKKyNkZWZpbmUgTUFYX0RFTEFZX1NMT1RfTElWRV9TRUFSQ0ggXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fTUFYX0RFTEFZX1NMT1RfTElWRV9TRUFSQ0gpCisjZGVmaW5lIE1BWF9QRU5ESU5HX0xJU1RfTEVOR1RIIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX01BWF9QRU5ESU5HX0xJU1RfTEVOR1RIKQorI2RlZmluZSBNQVhfR0NTRV9NRU1PUlkgXAorICAoKHNpemVfdCkgUEFSQU1fVkFMVUUgKFBBUkFNX01BWF9HQ1NFX01FTU9SWSkpCisjZGVmaW5lIEdDU0VfQUZURVJfUkVMT0FEX1BBUlRJQUxfRlJBQ1RJT04gXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fR0NTRV9BRlRFUl9SRUxPQURfUEFSVElBTF9GUkFDVElPTikKKyNkZWZpbmUgR0NTRV9BRlRFUl9SRUxPQURfQ1JJVElDQUxfRlJBQ1RJT04gXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fR0NTRV9BRlRFUl9SRUxPQURfQ1JJVElDQUxfRlJBQ1RJT04pCisjZGVmaW5lIE1BWF9VTlJPTExFRF9JTlNOUyBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9NQVhfVU5ST0xMRURfSU5TTlMpCisjZGVmaW5lIE1BWF9TTVNfTE9PUF9OVU1CRVIgXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fTUFYX1NNU19MT09QX05VTUJFUikKKyNkZWZpbmUgU01TX01BWF9JSV9GQUNUT1IgXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fU01TX01BWF9JSV9GQUNUT1IpCisjZGVmaW5lIFNNU19ERkFfSElTVE9SWSBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9TTVNfREZBX0hJU1RPUlkpCisjZGVmaW5lIFNNU19MT09QX0FWRVJBR0VfQ09VTlRfVEhSRVNIT0xEIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX1NNU19MT09QX0FWRVJBR0VfQ09VTlRfVEhSRVNIT0xEKQorI2RlZmluZSBJTlRFR0VSX1NIQVJFX0xJTUlUIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX0lOVEVHRVJfU0hBUkVfTElNSVQpCisjZGVmaW5lIE1BWF9MQVNUX1ZBTFVFX1JUTCBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9NQVhfTEFTVF9WQUxVRV9SVEwpCisjZGVmaW5lIE1JTl9WSVJUVUFMX01BUFBJTkdTIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX01JTl9WSVJUVUFMX01BUFBJTkdTKQorI2RlZmluZSBWSVJUVUFMX01BUFBJTkdTX1RPX1NZTVNfUkFUSU8gXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fVklSVFVBTF9NQVBQSU5HU19UT19TWU1TX1JBVElPKQorI2RlZmluZSBNQVhfRklFTERTX0ZPUl9GSUVMRF9TRU5TSVRJVkUgXAorICAoKHNpemVfdCkgUEFSQU1fVkFMVUUgKFBBUkFNX01BWF9GSUVMRFNfRk9SX0ZJRUxEX1NFTlNJVElWRSkpCisjZGVmaW5lIE1BWF9TQ0hFRF9SRUFEWV9JTlNOUyBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9NQVhfU0NIRURfUkVBRFlfSU5TTlMpCisjZGVmaW5lIFBSRUZFVENIX0xBVEVOQ1kgXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fUFJFRkVUQ0hfTEFURU5DWSkKKyNkZWZpbmUgU0lNVUxUQU5FT1VTX1BSRUZFVENIRVMgXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fU0lNVUxUQU5FT1VTX1BSRUZFVENIRVMpCisjZGVmaW5lIEwxX0NBQ0hFX1NJWkUgXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fTDFfQ0FDSEVfU0laRSkKKyNkZWZpbmUgTDFfQ0FDSEVfTElORV9TSVpFIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX0wxX0NBQ0hFX0xJTkVfU0laRSkKKyNkZWZpbmUgTDJfQ0FDSEVfU0laRSBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9MMl9DQUNIRV9TSVpFKQorI2RlZmluZSBVU0VfQ0FOT05JQ0FMX1RZUEVTIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX1VTRV9DQU5PTklDQUxfVFlQRVMpCisjZGVmaW5lIElSQV9NQVhfTE9PUFNfTlVNIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX0lSQV9NQVhfTE9PUFNfTlVNKQorI2RlZmluZSBJUkFfTUFYX0NPTkZMSUNUX1RBQkxFX1NJWkUgXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fSVJBX01BWF9DT05GTElDVF9UQUJMRV9TSVpFKQorI2RlZmluZSBJUkFfTE9PUF9SRVNFUlZFRF9SRUdTIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX0lSQV9MT09QX1JFU0VSVkVEX1JFR1MpCisjZGVmaW5lIFNXSVRDSF9DT05WRVJTSU9OX0JSQU5DSF9SQVRJTyBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9TV0lUQ0hfQ09OVkVSU0lPTl9CUkFOQ0hfUkFUSU8pCisjZGVmaW5lIExPT1BfSU5WQVJJQU5UX01BWF9CQlNfSU5fTE9PUCBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9MT09QX0lOVkFSSUFOVF9NQVhfQkJTX0lOX0xPT1ApCisjZGVmaW5lIFNMUF9NQVhfSU5TTlNfSU5fQkIgXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fU0xQX01BWF9JTlNOU19JTl9CQikKKyNkZWZpbmUgTUlOX0lOU05fVE9fUFJFRkVUQ0hfUkFUSU8gXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fTUlOX0lOU05fVE9fUFJFRkVUQ0hfUkFUSU8pCisjZGVmaW5lIFBSRUZFVENIX01JTl9JTlNOX1RPX01FTV9SQVRJTyBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9QUkVGRVRDSF9NSU5fSU5TTl9UT19NRU1fUkFUSU8pCisjZGVmaW5lIE1JTl9OT05ERUJVR19JTlNOX1VJRCBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9NSU5fTk9OREVCVUdfSU5TTl9VSUQpCisjZW5kaWYgLyogISBHQ0NfUEFSQU1TX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9wYXJ0aXRpb24uaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9wYXJ0aXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGI1NTRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3BhcnRpdGlvbi5oCkBAIC0wLDAgKzEsODIgQEAKKy8qIExpc3QgaW1wbGVtZW50YXRpb24gb2YgYSBwYXJ0aXRpb24gb2YgY29uc2VjdXRpdmUgaW50ZWdlcnMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBDb2RlU291cmNlcnksIExMQy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bworICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsCisgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKy8qIFRoaXMgcGFja2FnZSBpbXBsZW1lbnRzIGEgcGFydGl0aW9uIG9mIGNvbnNlY3V0aXZlIGludGVnZXJzLiAgVGhlCisgICBlbGVtZW50cyBhcmUgcGFydGl0aW9uZWQgaW50byBjbGFzc2VzLiAgRWFjaCBjbGFzcyBpcyByZXByZXNlbnRlZAorICAgYnkgb25lIG9mIGl0cyBlbGVtZW50cywgdGhlIGNhbm9uaWNhbCBlbGVtZW50LCB3aGljaCBpcyBjaG9zZW4KKyAgIGFyYml0cmFyaWx5IGZyb20gZWxlbWVudHMgaW4gdGhlIGNsYXNzLiAgVGhlIHByaW5jaXBhbCBvcGVyYXRpb25zCisgICBvbiBhIHBhcnRpdGlvbiBhcmUgRklORCwgd2hpY2ggdGFrZXMgYW4gZWxlbWVudCwgZGV0ZXJtaW5lcyBpdHMKKyAgIGNsYXNzLCBhbmQgcmV0dXJucyB0aGUgY2Fub25pY2FsIGVsZW1lbnQgZm9yIHRoYXQgY2xhc3MsIGFuZCBVTklPTiwKKyAgIHdoaWNoIHVuaXRlcyB0aGUgdHdvIGNsYXNzZXMgdGhhdCBjb250YWluIHR3byBnaXZlbiBlbGVtZW50cyBpbnRvIGEKKyAgIHNpbmdsZSBjbGFzcy4KKworICAgVGhlIGxpc3QgaW1wbGVtZW50YXRpb24gdXNlZCBoZXJlIHByb3ZpZGVzIGNvbnN0YW50LXRpbWUgZmluZHMuICBCeQorICAgc3RvcmluZyB0aGUgc2l6ZSBvZiBlYWNoIGNsYXNzIHdpdGggdGhlIGNsYXNzJ3MgY2Fub25pY2FsIGVsZW1lbnQsCisgICBpdCBpcyBhYmxlIHRvIHBlcmZvcm0gdW5pb25zIG92ZXIgYWxsIHRoZSBjbGFzc2VzIGluIHRoZSBwYXJ0aXRpb24KKyAgIGluIE8gKE4gbG9nIE4pIHRpbWUuICAqLworCisjaWZuZGVmIF9QQVJUSVRJT05fSAorI2RlZmluZSBfUEFSVElUSU9OX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjaW5jbHVkZSAiYW5zaWRlY2wuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorCitzdHJ1Y3QgcGFydGl0aW9uX2VsZW0KK3sKKyAgLyogVGhlIGNhbm9uaWNhbCBlbGVtZW50IHRoYXQgcmVwcmVzZW50cyB0aGUgY2xhc3MgY29udGFpbmluZyB0aGlzCisgICAgIGVsZW1lbnQuICAqLworICBpbnQgY2xhc3NfZWxlbWVudDsKKyAgLyogVGhlIG5leHQgZWxlbWVudCBpbiB0aGlzIGNsYXNzLiAgRWxlbWVudHMgaW4gZWFjaCBjbGFzcyBmb3JtIGEKKyAgICAgY2lyY3VsYXIgbGlzdC4gICovCisgIHN0cnVjdCBwYXJ0aXRpb25fZWxlbSogbmV4dDsKKyAgLyogVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGlzIGNsYXNzLiAgVmFsaWQgb25seSBpZiB0aGlzIGlzIHRoZQorICAgICBjYW5vbmljYWwgZWxlbWVudCBmb3IgaXRzIGNsYXNzLiAgKi8KKyAgdW5zaWduZWQgY2xhc3NfY291bnQ7Cit9OworCit0eXBlZGVmIHN0cnVjdCBwYXJ0aXRpb25fZGVmIAoreworICAvKiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoaXMgcGFydGl0aW9uLiAgKi8KKyAgaW50IG51bV9lbGVtZW50czsKKyAgLyogVGhlIGVsZW1lbnRzIGluIHRoZSBwYXJ0aXRpb24uICAqLworICBzdHJ1Y3QgcGFydGl0aW9uX2VsZW0gZWxlbWVudHNbMV07Cit9ICpwYXJ0aXRpb247CisKK2V4dGVybiBwYXJ0aXRpb24gcGFydGl0aW9uX25ldyAoaW50KTsKK2V4dGVybiB2b2lkIHBhcnRpdGlvbl9kZWxldGUgKHBhcnRpdGlvbik7CitleHRlcm4gaW50IHBhcnRpdGlvbl91bmlvbiAocGFydGl0aW9uLCBpbnQsIGludCk7CitleHRlcm4gdm9pZCBwYXJ0aXRpb25fcHJpbnQgKHBhcnRpdGlvbiwJRklMRSopOworCisvKiBSZXR1cm5zIHRoZSBjYW5vbmljYWwgZWxlbWVudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBjbGFzcyBjb250YWluaW5nCisgICBFTEVNRU5UX18gaW4gUEFSVElUSU9OX18uICAqLworCisjZGVmaW5lIHBhcnRpdGlvbl9maW5kKHBhcnRpdGlvbl9fLCBlbGVtZW50X18pIFwKKyAgICAoKHBhcnRpdGlvbl9fKS0+ZWxlbWVudHNbKGVsZW1lbnRfXyldLmNsYXNzX2VsZW1lbnQpCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBfUEFSVElUSU9OX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9wbHVnaW4tdmVyc2lvbi5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3BsdWdpbi12ZXJzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVhMGVkMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9wbHVnaW4tdmVyc2lvbi5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpbmNsdWRlICJjb25maWdhcmdzLmgiCisKK3N0YXRpYyBjaGFyIGJhc2V2ZXJbXSA9ICI0LjUuMyI7CitzdGF0aWMgY2hhciBkYXRlc3RhbXBbXSA9ICIyMDExMDQyOCI7CitzdGF0aWMgY2hhciBkZXZwaGFzZVtdID0gIiI7CitzdGF0aWMgY2hhciByZXZpc2lvbltdID0gIiI7CisKKy8qIEZJWE1FIHBsdWdpbnM6IFdlIHNob3VsZCBtYWtlIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIG1vcmUgcHJlY2lzZS4KKyAgIE9uZSB3YXkgdG8gZG8gaXMgdG8gYWRkIGEgY2hlY2tzdW0uICovCisKK3N0YXRpYyBzdHJ1Y3QgcGx1Z2luX2djY192ZXJzaW9uIGdjY192ZXJzaW9uID0ge2Jhc2V2ZXIsIGRhdGVzdGFtcCwKKwkJCQkJCWRldnBoYXNlLCByZXZpc2lvbiwKKwkJCQkJCWNvbmZpZ3VyYXRpb25fYXJndW1lbnRzfTsKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9wbHVnaW4uZGVmIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3BsdWdpbi5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE0MGMyYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9wbHVnaW4uZGVmCkBAIC0wLDAgKzEsOTQgQEAKKy8qIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHBsdWdpbiBldmVudHMgaW4gR0NDLgorICAgQ29weXJpZ2h0IChDKSAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworCisvKiBUbyBob29rIGludG8gcGFzcyBtYW5hZ2VyLiAgKi8KK0RFRkVWRU5UIChQTFVHSU5fUEFTU19NQU5BR0VSX1NFVFVQKQorCisvKiBBZnRlciBmaW5pc2hpbmcgcGFyc2luZyBhIHR5cGUuICAqLworREVGRVZFTlQgKFBMVUdJTl9GSU5JU0hfVFlQRSkKKworLyogVXNlZnVsIGZvciBzdW1tYXJ5IHByb2Nlc3NpbmcuICAqLworREVGRVZFTlQgKFBMVUdJTl9GSU5JU0hfVU5JVCkKKworLyogQWxsb3dzIHRvIHNlZSBsb3cgbGV2ZWwgQVNUIGluIEMgYW5kIEMrKyBmcm9udGVuZHMuICovCitERUZFVkVOVCAoUExVR0lOX1BSRV9HRU5FUklDSVpFKQorCisvKiBDYWxsZWQgYmVmb3JlIEdDQyBleGl0cy4gICovCitERUZFVkVOVCAoUExVR0lOX0ZJTklTSCkKKworLyogSW5mb3JtYXRpb24gYWJvdXQgdGhlIHBsdWdpbi4gKi8KK0RFRkVWRU5UIChQTFVHSU5fSU5GTykKKworLyogQ2FsbGVkIGF0IHN0YXJ0IG9mIEdDQyBHYXJiYWdlIENvbGxlY3Rpb24uICovCitERUZFVkVOVCAoUExVR0lOX0dHQ19TVEFSVCkKKworLyogRXh0ZW5kIHRoZSBHR0MgbWFya2luZy4gKi8KK0RFRkVWRU5UIChQTFVHSU5fR0dDX01BUktJTkcpCisKKy8qIENhbGxlZCBhdCBlbmQgb2YgR0dDLiAqLworREVGRVZFTlQgKFBMVUdJTl9HR0NfRU5EKQorCisvKiBSZWdpc3RlciBhbiBleHRyYSBHR0Mgcm9vdCB0YWJsZS4gKi8KK0RFRkVWRU5UIChQTFVHSU5fUkVHSVNURVJfR0dDX1JPT1RTKQorCisvKiBSZWdpc3RlciBhbiBleHRyYSBHR0MgY2FjaGUgdGFibGUuICovCitERUZFVkVOVCAoUExVR0lOX1JFR0lTVEVSX0dHQ19DQUNIRVMpCisKKy8qIENhbGxlZCBkdXJpbmcgYXR0cmlidXRlIHJlZ2lzdHJhdGlvbi4gICovCitERUZFVkVOVCAoUExVR0lOX0FUVFJJQlVURVMpCisKKy8qIENhbGxlZCBiZWZvcmUgcHJvY2Vzc2luZyBhIHRyYW5zbGF0aW9uIHVuaXQuICAqLworREVGRVZFTlQgKFBMVUdJTl9TVEFSVF9VTklUKQorCisvKiBDYWxsZWQgZHVyaW5nIHByYWdtYSByZWdpc3RyYXRpb24uICAqLworREVGRVZFTlQgKFBMVUdJTl9QUkFHTUFTKQorCisvKiBDYWxsZWQgYmVmb3JlIGZpcnN0IHBhc3MgZnJvbSBhbGxfcGFzc2VzLiAgKi8KK0RFRkVWRU5UIChQTFVHSU5fQUxMX1BBU1NFU19TVEFSVCkKKworLyogQ2FsbGVkIGFmdGVyIGxhc3QgcGFzcyBmcm9tIGFsbF9wYXNzZXMuICAqLworREVGRVZFTlQgKFBMVUdJTl9BTExfUEFTU0VTX0VORCkKKworLyogQ2FsbGVkIGJlZm9yZSBmaXJzdCBpcGEgcGFzcy4gICovCitERUZFVkVOVCAoUExVR0lOX0FMTF9JUEFfUEFTU0VTX1NUQVJUKQorCisvKiBDYWxsZWQgYWZ0ZXIgbGFzdCBpcGEgcGFzcy4gICovCitERUZFVkVOVCAoUExVR0lOX0FMTF9JUEFfUEFTU0VTX0VORCkKKworLyogQWxsb3dzIHRvIG92ZXJyaWRlIHBhc3MgZ2F0ZSBkZWNpc2lvbiBmb3IgY3VycmVudF9wYXNzLiAgKi8KK0RFRkVWRU5UIChQTFVHSU5fT1ZFUlJJREVfR0FURSkKKworLyogQ2FsbGVkIGJlZm9yZSBleGVjdXRpbmcgYSBwYXNzLiAgKi8KK0RFRkVWRU5UIChQTFVHSU5fUEFTU19FWEVDVVRJT04pCisKKy8qIENhbGxlZCBiZWZvcmUgZXhlY3V0aW5nIHN1YnBhc3NlcyBvZiBhIEdJTVBMRV9QQVNTIGluCisgICBleGVjdXRlX2lwYV9wYXNzX2xpc3QuICAqLworREVGRVZFTlQgKFBMVUdJTl9FQVJMWV9HSU1QTEVfUEFTU0VTX1NUQVJUKQorCisvKiBDYWxsZWQgYWZ0ZXIgZXhlY3V0aW5nIHN1YnBhc3NlcyBvZiBhIEdJTVBMRV9QQVNTIGluCisgICBleGVjdXRlX2lwYV9wYXNzX2xpc3QuICAqLworREVGRVZFTlQgKFBMVUdJTl9FQVJMWV9HSU1QTEVfUEFTU0VTX0VORCkKKworLyogQ2FsbGVkIHdoZW4gYSBwYXNzIGlzIGZpcnN0IGluc3RhbnRpYXRlZC4gICovCitERUZFVkVOVCAoUExVR0lOX05FV19QQVNTKQorCisvKiBBZnRlciB0aGUgaGFyZC1jb2RlZCBldmVudHMgYWJvdmUsIHBsdWdpbnMgY2FuIGR5bmFtaWNhbGx5IGFsbG9jYXRlIGV2ZW50cworICAgYXQgcnVuIHRpbWUuCisgICBQTFVHSU5fRVZFTlRfRklSU1RfRFlOQU1JQyBvbmx5IGFwcGVhcnMgYXMgbGFzdCBlbnVtIGVsZW1lbnQuICAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3BsdWdpbi5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3BsdWdpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMWRkNTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvcGx1Z2luLmgKQEAgLTAsMCArMSw0MiBAQAorLyogSGVhZGVyIGZpbGUgZm9yIGludGVybmFsIEdDQyBwbHVnaW4gbWVjaGFuaXNtLgorICAgQ29weXJpZ2h0IChDKSAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBQTFVHSU5fSAorI2RlZmluZSBQTFVHSU5fSAorCisjaW5jbHVkZSAiZ2NjLXBsdWdpbi5oIgorCitzdHJ1Y3QgYXR0cmlidXRlX3NwZWM7CisKK2V4dGVybiB2b2lkIGFkZF9uZXdfcGx1Z2luIChjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgcGFyc2VfcGx1Z2luX2FyZ19vcHQgKGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IGludm9rZV9wbHVnaW5fY2FsbGJhY2tzIChpbnQsIHZvaWQgKik7CitleHRlcm4gdm9pZCBpbml0aWFsaXplX3BsdWdpbnMgKHZvaWQpOworZXh0ZXJuIGJvb2wgcGx1Z2luc19hY3RpdmVfcCAodm9pZCk7CitleHRlcm4gdm9pZCBkdW1wX2FjdGl2ZV9wbHVnaW5zIChGSUxFICopOworZXh0ZXJuIHZvaWQgZGVidWdfYWN0aXZlX3BsdWdpbnMgKHZvaWQpOworZXh0ZXJuIHZvaWQgcHJpbnRfcGx1Z2luc192ZXJzaW9ucyAoRklMRSAqZmlsZSwgY29uc3QgY2hhciAqaW5kZW50KTsKK2V4dGVybiB2b2lkIHByaW50X3BsdWdpbnNfaGVscCAoRklMRSAqZmlsZSwgY29uc3QgY2hhciAqaW5kZW50KTsKK2V4dGVybiB2b2lkIGZpbmFsaXplX3BsdWdpbnMgKHZvaWQpOworCisvKiBJbiBhdHRyaWJzLmMuICAqLworCitleHRlcm4gdm9pZCByZWdpc3Rlcl9hdHRyaWJ1dGUgKGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfc3BlYyAqYXR0cik7CisKKyNlbmRpZiAvKiBQTFVHSU5fSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3BvaW50ZXItc2V0LmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvcG9pbnRlci1zZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmIwODVjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3BvaW50ZXItc2V0LmgKQEAgLTAsMCArMSw0MiBAQAorLyogU2V0IG9wZXJhdGlvbnMgb24gcG9pbnRlcnMKKyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgUE9JTlRFUl9TRVRfSAorI2RlZmluZSBQT0lOVEVSX1NFVF9ICisKK3N0cnVjdCBwb2ludGVyX3NldF90Oworc3RydWN0IHBvaW50ZXJfc2V0X3QgKnBvaW50ZXJfc2V0X2NyZWF0ZSAodm9pZCk7Cit2b2lkIHBvaW50ZXJfc2V0X2Rlc3Ryb3kgKHN0cnVjdCBwb2ludGVyX3NldF90ICpwc2V0KTsKKworaW50IHBvaW50ZXJfc2V0X2NvbnRhaW5zIChjb25zdCBzdHJ1Y3QgcG9pbnRlcl9zZXRfdCAqcHNldCwgY29uc3Qgdm9pZCAqcCk7CitpbnQgcG9pbnRlcl9zZXRfaW5zZXJ0IChzdHJ1Y3QgcG9pbnRlcl9zZXRfdCAqcHNldCwgY29uc3Qgdm9pZCAqcCk7Cit2b2lkIHBvaW50ZXJfc2V0X3RyYXZlcnNlIChjb25zdCBzdHJ1Y3QgcG9pbnRlcl9zZXRfdCAqLAorCQkJICAgYm9vbCAoKikgKGNvbnN0IHZvaWQgKiwgdm9pZCAqKSwKKwkJCSAgIHZvaWQgKik7CisKK3N0cnVjdCBwb2ludGVyX21hcF90Oworc3RydWN0IHBvaW50ZXJfbWFwX3QgKnBvaW50ZXJfbWFwX2NyZWF0ZSAodm9pZCk7Cit2b2lkIHBvaW50ZXJfbWFwX2Rlc3Ryb3kgKHN0cnVjdCBwb2ludGVyX21hcF90ICpwbWFwKTsKKwordm9pZCAqKnBvaW50ZXJfbWFwX2NvbnRhaW5zIChjb25zdCBzdHJ1Y3QgcG9pbnRlcl9tYXBfdCAqcG1hcCwgY29uc3Qgdm9pZCAqcCk7Cit2b2lkICoqcG9pbnRlcl9tYXBfaW5zZXJ0IChzdHJ1Y3QgcG9pbnRlcl9tYXBfdCAqcG1hcCwgY29uc3Qgdm9pZCAqcCk7Cit2b2lkIHBvaW50ZXJfbWFwX3RyYXZlcnNlIChjb25zdCBzdHJ1Y3QgcG9pbnRlcl9tYXBfdCAqLAorCQkJICAgYm9vbCAoKikgKGNvbnN0IHZvaWQgKiwgdm9pZCAqKiwgdm9pZCAqKSwgdm9pZCAqKTsKKworI2VuZGlmICAvKiBQT0lOVEVSX1NFVF9IICAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3ByZWRpY3QuZGVmIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3ByZWRpY3QuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiM2U4N2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvcHJlZGljdC5kZWYKQEAgLTAsMCArMSwxMTggQEAKKy8qIERlZmluaXRpb25zIGZvciB0aGUgYnJhbmNoIHByZWRpY3Rpb24gcm91dGluZXMgaW4gdGhlIEdOVSBjb21waWxlci4KKyAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMywgMjAwNCwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIEJlZm9yZSBpbmNsdWRpbmcgdGhpcyBmaWxlLCB5b3Ugc2hvdWxkIGRlZmluZSBhIG1hY3JvOgorCisgICAgIERFRl9QUkVESUNUT1IgKEVOVU0sIE5BTUUsIEhJVFJBVEUpCisKKyAgIFRoaXMgbWFjcm8gd2lsbCBiZSBjYWxsZWQgb25jZSBmb3IgZWFjaCBwcmVkaWN0b3IuICBUaGUgRU5VTSB3aWxsCisgICBiZSBvZiB0eXBlIGBlbnVtIHByZWRpY3RvcicsIGFuZCB3aWxsIGVudW1lcmF0ZSBhbGwgc3VwcG9ydGVkCisgICBwcmVkaWN0b3JzLiAgVGhlIG9yZGVyIG9mIERFRl9QUkVESUNUT1IgY2FsbHMgaXMgaW1wb3J0YW50LCBhcworICAgaW4gdGhlIGZpcnN0IG1hdGNoIGNvbWJpbmluZyBoZXVyaXN0aWNzLCB0aGUgcHJlZGljdG9yIGFwcGVhcmluZworICAgZmlyc3QgaW4gdGhpcyBmaWxlIHdpbGwgd2luLgorCisgICBOQU1FIGlzIHVzZWQgaW4gdGhlIGRlYnVnZ2luZyBvdXRwdXQgdG8gZGV0ZXJtaW5lIHByZWRpY3RvciB0eXBlLgorCisgICBISVRSQVRFIGlzIHRoZSBwcm9iYWJpbGl0eSB0aGF0IGVkZ2UgcHJlZGljdGVkIGJ5IHByZWRpY3RvciBhcyB0YWtlbgorICAgd2lsbCBiZSByZWFsbHkgdGFrZW4gKHNvIGl0IHNob3VsZCBiZSBhbHdheXMgYWJvdmUKKyAgIFJFR19CUl9QUk9CX0JBU0UgLyAyKS4gICovCisKKworLyogQSB2YWx1ZSB1c2VkIGFzIGZpbmFsIG91dGNvbWUgb2YgYWxsIGhldXJpc3RpY3MuICAqLworREVGX1BSRURJQ1RPUiAoUFJFRF9DT01CSU5FRCwgImNvbWJpbmVkIiwgUFJPQl9BTFdBWVMsIDApCisKKy8qIEFuIG91dGNvbWUgZXN0aW1hdGVkIGJ5IERlbXBzdGVyLVNoYWZmZXIgdGhlb3J5LiAgKi8KK0RFRl9QUkVESUNUT1IgKFBSRURfRFNfVEhFT1JZLCAiRFMgdGhlb3J5IiwgUFJPQl9BTFdBWVMsIDApCisKKy8qIEEgY29tYmluZWQgaGV1cmlzdGljcyB1c2luZyBwcm9iYWJpbGl0eSBkZXRlcm1pbmVkIGJ5IGZpcnN0CisgICBtYXRjaGluZyBoZXVyaXN0aWNzIGZyb20gdGhpcyBsaXN0LiAgKi8KK0RFRl9QUkVESUNUT1IgKFBSRURfRklSU1RfTUFUQ0gsICJmaXJzdCBtYXRjaCIsIFBST0JfQUxXQVlTLCAwKQorCisvKiBIZXVyaXN0aWMgYXBwbHlpbmcgd2hlbiBubyBoZXVyaXN0aWMgYmVsb3cgYXBwbGllcy4gICovCitERUZfUFJFRElDVE9SIChQUkVEX05PX1BSRURJQ1RJT04sICJubyBwcmVkaWN0aW9uIiwgUFJPQl9BTFdBWVMsIDApCisKKy8qIE1hcmsgdW5jb25kaXRpb25hbCBqdW1wIGFzIHRha2VuLiAgKi8KK0RFRl9QUkVESUNUT1IgKFBSRURfVU5DT05ESVRJT05BTCwgInVuY29uZGl0aW9uYWwganVtcCIsIFBST0JfQUxXQVlTLAorCSAgICAgICBQUkVEX0ZMQUdfRklSU1RfTUFUQ0gpCisKKy8qIFVzZSBudW1iZXIgb2YgbG9vcCBpdGVyYXRpb25zIGRldGVybWluZWQgYnkgIyBvZiBpdGVyYXRpb25zCisgICBhbmFseXNpcyB0byBzZXQgcHJvYmFiaWxpdHkuICBXZSBkb24ndCB3YW50IHRvIHVzZSBEZW1wc3Rlci1TaGFmZmVyCisgICB0aGVvcnkgaGVyZSwgYXMgdGhlIHByZWRpY3Rpb25zIGlzIGV4YWN0LiAgKi8KK0RFRl9QUkVESUNUT1IgKFBSRURfTE9PUF9JVEVSQVRJT05TLCAibG9vcCBpdGVyYXRpb25zIiwgUFJPQl9BTFdBWVMsCisJICAgICAgIFBSRURfRkxBR19GSVJTVF9NQVRDSCkKKworLyogSGludHMgZHJvcHBlZCBieSB1c2VyIHZpYSBfX2J1aWx0aW5fZXhwZWN0IGZlYXR1cmUuICAqLworREVGX1BSRURJQ1RPUiAoUFJFRF9CVUlMVElOX0VYUEVDVCwgIl9fYnVpbHRpbl9leHBlY3QiLCBQUk9CX1ZFUllfTElLRUxZLAorCSAgICAgICBQUkVEX0ZMQUdfRklSU1RfTUFUQ0gpCisKKy8qIFVzZSBudW1iZXIgb2YgbG9vcCBpdGVyYXRpb25zIGd1ZXNzZWQgYnkgdGhlIGNvbnRlbnRzIG9mIHRoZSBsb29wLiAgKi8KK0RFRl9QUkVESUNUT1IgKFBSRURfTE9PUF9JVEVSQVRJT05TX0dVRVNTRUQsICJndWVzc2VkIGxvb3AgaXRlcmF0aW9ucyIsCisJICAgICAgIFBST0JfQUxXQVlTLCBQUkVEX0ZMQUdfRklSU1RfTUFUQ0gpCisKKy8qIEJyYW5jaCBjb250YWluaW5nIGdvdG8gaXMgcHJvYmFibHkgbm90IHRha2VuLiAgKi8KK0RFRl9QUkVESUNUT1IgKFBSRURfQ09OVElOVUUsICJjb250aW51ZSIsIEhJVFJBVEUgKDUwKSwgMCkKKworLyogQnJhbmNoIHRvIGJhc2ljIGJsb2NrIGNvbnRhaW5pbmcgY2FsbCBtYXJrZWQgYnkgbm9yZXR1cm4gYXR0cmlidXRlLiAgKi8KK0RFRl9QUkVESUNUT1IgKFBSRURfTk9SRVRVUk4sICJub3JldHVybiBjYWxsIiwgUFJPQl9WRVJZX0xJS0VMWSwKKwkgICAgICAgUFJFRF9GTEFHX0ZJUlNUX01BVENIKQorCisvKiBCcmFuY2ggdG8gYmFzaWMgYmxvY2sgY29udGFpbmluZyBjYWxsIG1hcmtlZCBieSBjb2xkIGZ1bmN0aW9uIGF0dHJpYnV0ZS4gICovCitERUZfUFJFRElDVE9SIChQUkVEX0NPTERfRlVOQ1RJT04sICJjb2xkIGZ1bmN0aW9uIGNhbGwiLCBQUk9CX1ZFUllfTElLRUxZLAorCSAgICAgICBQUkVEX0ZMQUdfRklSU1RfTUFUQ0gpCisKKy8qIExvb3BiYWNrIGVkZ2UgaXMgdGFrZW4uICAqLworREVGX1BSRURJQ1RPUiAoUFJFRF9MT09QX0JSQU5DSCwgImxvb3AgYnJhbmNoIiwgSElUUkFURSAoODYpLAorCSAgICAgICBQUkVEX0ZMQUdfRklSU1RfTUFUQ0gpCisKKy8qIEVkZ2UgY2F1c2luZyBsb29wIHRvIHRlcm1pbmF0ZSBpcyBwcm9iYWJseSBub3QgdGFrZW4uICAqLworREVGX1BSRURJQ1RPUiAoUFJFRF9MT09QX0VYSVQsICJsb29wIGV4aXQiLCBISVRSQVRFICg5MSksCisJICAgICAgIFBSRURfRkxBR19GSVJTVF9NQVRDSCkKKworLyogUG9pbnRlcnMgYXJlIHVzdWFsbHkgbm90IE5VTEwuICAqLworREVGX1BSRURJQ1RPUiAoUFJFRF9QT0lOVEVSLCAicG9pbnRlciIsIEhJVFJBVEUgKDg1KSwgMCkKK0RFRl9QUkVESUNUT1IgKFBSRURfVFJFRV9QT0lOVEVSLCAicG9pbnRlciAob24gdHJlZXMpIiwgSElUUkFURSAoODUpLCAwKQorCisvKiBORSBpcyBwcm9iYWJsZSwgRVEgbm90IGV0Yy4uLiAgKi8KK0RFRl9QUkVESUNUT1IgKFBSRURfT1BDT0RFX1BPU0lUSVZFLCAib3Bjb2RlIHZhbHVlcyBwb3NpdGl2ZSIsIEhJVFJBVEUgKDc5KSwgMCkKK0RFRl9QUkVESUNUT1IgKFBSRURfT1BDT0RFX05PTkVRVUFMLCAib3Bjb2RlIHZhbHVlcyBub25lcXVhbCIsIEhJVFJBVEUgKDcxKSwgMCkKK0RFRl9QUkVESUNUT1IgKFBSRURfRlBPUENPREUsICJmcF9vcGNvZGUiLCBISVRSQVRFICg5MCksIDApCitERUZfUFJFRElDVE9SIChQUkVEX1RSRUVfT1BDT0RFX1BPU0lUSVZFLCAib3Bjb2RlIHZhbHVlcyBwb3NpdGl2ZSAob24gdHJlZXMpIiwgSElUUkFURSAoNzMpLCAwKQorREVGX1BSRURJQ1RPUiAoUFJFRF9UUkVFX09QQ09ERV9OT05FUVVBTCwgIm9wY29kZSB2YWx1ZXMgbm9uZXF1YWwgKG9uIHRyZWVzKSIsIEhJVFJBVEUgKDcyKSwgMCkKK0RFRl9QUkVESUNUT1IgKFBSRURfVFJFRV9GUE9QQ09ERSwgImZwX29wY29kZSAob24gdHJlZXMpIiwgSElUUkFURSAoOTApLCAwKQorCisvKiBCcmFuY2ggZ3VhcmRpbmcgY2FsbCBpcyBwcm9iYWJseSB0YWtlbi4gICovCitERUZfUFJFRElDVE9SIChQUkVEX0NBTEwsICJjYWxsIiwgSElUUkFURSAoNzEpLCAwKQorCisvKiBCcmFuY2ggY2F1c2luZyBmdW5jdGlvbiB0byB0ZXJtaW5hdGUgaXMgcHJvYmFibHkgbm90IHRha2VuLiAgKi8KK0RFRl9QUkVESUNUT1IgKFBSRURfVFJFRV9FQVJMWV9SRVRVUk4sICJlYXJseSByZXR1cm4gKG9uIHRyZWVzKSIsIEhJVFJBVEUgKDYxKSwgMCkKKworLyogQnJhbmNoIGNvbnRhaW5pbmcgZ290byBpcyBwcm9iYWJseSBub3QgdGFrZW4uICAqLworREVGX1BSRURJQ1RPUiAoUFJFRF9HT1RPLCAiZ290byIsIEhJVFJBVEUgKDcwKSwgMCkKKworLyogQnJhbmNoIGVuZGluZyB3aXRoIHJldHVybiBjb25zdGFudCBpcyBwcm9iYWJseSBub3QgdGFrZW4uICAqLworREVGX1BSRURJQ1RPUiAoUFJFRF9DT05TVF9SRVRVUk4sICJjb25zdCByZXR1cm4iLCBISVRSQVRFICg2NyksIDApCisKKy8qIEJyYW5jaCBlbmRpbmcgd2l0aCByZXR1cm4gbmVnYXRpdmUgY29uc3RhbnQgaXMgcHJvYmFibHkgbm90IHRha2VuLiAgKi8KK0RFRl9QUkVESUNUT1IgKFBSRURfTkVHQVRJVkVfUkVUVVJOLCAibmVnYXRpdmUgcmV0dXJuIiwgSElUUkFURSAoOTYpLCAwKQorCisvKiBCcmFuY2ggZW5kaW5nIHdpdGggcmV0dXJuOyBpcyBwcm9iYWJseSBub3QgdGFrZW4gKi8KK0RFRl9QUkVESUNUT1IgKFBSRURfTlVMTF9SRVRVUk4sICJudWxsIHJldHVybiIsIEhJVFJBVEUgKDkwKSwgMCkKKworLyogQnJhbmNoZXMgdG8gYSBtdWRmbGFwIGJvdW5kcyBjaGVjayBhcmUgZXh0cmVtZWx5IHVubGlrZWx5LiAgKi8KK0RFRl9QUkVESUNUT1IgKFBSRURfTVVERkxBUCwgIm11ZGZsYXAgY2hlY2siLCBQUk9CX1ZFUllfTElLRUxZLCAwKQpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3ByZWRpY3QuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9wcmVkaWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThlNTdkNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9wcmVkaWN0LmgKQEAgLTAsMCArMSw0NiBAQAorLyogRGVmaW5pdGlvbnMgZm9yIGJyYW5jaCBwcmVkaWN0aW9uIHJvdXRpbmVzIGluIHRoZSBHTlUgY29tcGlsZXIuCisgICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19QUkVESUNUX0gKKyNkZWZpbmUgR0NDX1BSRURJQ1RfSAorCisjZGVmaW5lIERFRl9QUkVESUNUT1IoRU5VTSwgTkFNRSwgSElUUkFURSwgRkxBR1MpIEVOVU0sCitlbnVtIGJyX3ByZWRpY3RvcgoreworI2luY2x1ZGUgInByZWRpY3QuZGVmIgorCisgIC8qIFVwcGVyIGJvdW5kIG9uIG5vbi1sYW5ndWFnZS1zcGVjaWZpYyBidWlsdGlucy4gICovCisgIEVORF9QUkVESUNUT1JTCit9OworI3VuZGVmIERFRl9QUkVESUNUT1IKK2VudW0gcHJlZGljdGlvbgoreworICAgTk9UX1RBS0VOLAorICAgVEFLRU4KK307CisKK2V4dGVybiB2b2lkIHByZWRpY3RfaW5zbl9kZWYgKHJ0eCwgZW51bSBicl9wcmVkaWN0b3IsIGVudW0gcHJlZGljdGlvbik7CitleHRlcm4gaW50IGNvdW50c190b19mcmVxcyAodm9pZCk7CitleHRlcm4gdm9pZCBlc3RpbWF0ZV9iYl9mcmVxdWVuY2llcyAodm9pZCk7CitleHRlcm4gY29uc3QgY2hhciAqcHJlZGljdG9yX25hbWUgKGVudW0gYnJfcHJlZGljdG9yKTsKK2V4dGVybiB0cmVlIGJ1aWxkX3ByZWRpY3RfZXhwciAoZW51bSBicl9wcmVkaWN0b3IsIGVudW0gcHJlZGljdGlvbik7CitleHRlcm4gdm9pZCB0cmVlX2VzdGltYXRlX3Byb2JhYmlsaXR5ICh2b2lkKTsKK2V4dGVybiB2b2lkIGNvbXB1dGVfZnVuY3Rpb25fZnJlcXVlbmN5ICh2b2lkKTsKKworI2VuZGlmICAvKiBHQ0NfUFJFRElDVF9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvcHJlZml4LmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvcHJlZml4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZkOWFlNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9wcmVmaXguaApAQCAtMCwwICsxLDMwIEBACisvKiBQcm92aWRlIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBleHBvcnRlZCBmcm9tIHByZWZpeC5jLgorICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAzLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKK3lvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKK0xpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworCisjaWZuZGVmIEdDQ19QUkVGSVhfSAorI2RlZmluZSBHQ0NfUFJFRklYX0gKKworLyogVXBkYXRlIFBBVEggdXNpbmcgS0VZIGlmIFBBVEggc3RhcnRzIHdpdGggUFJFRklYLiAgVGhlIHJldHVybmVkCisgICBzdHJpbmcgaXMgYWx3YXlzIG1hbGxvYy1lZCwgYW5kIHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yCisgICBmcmVlaW5nIGl0LiAgKi8KK2V4dGVybiBjaGFyICp1cGRhdGVfcGF0aCAoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqa2V5KTsKK2V4dGVybiB2b2lkIHNldF9zdGRfcHJlZml4IChjb25zdCBjaGFyICosIGludCk7CisKKyNlbmRpZiAvKiAhIEdDQ19QUkVGSVhfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3ByZXR0eS1wcmludC5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3ByZXR0eS1wcmludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYTUwMzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvcHJldHR5LXByaW50LmgKQEAgLTAsMCArMSwzNDkgQEAKKy8qIFZhcmlvdXMgZGVjbGFyYXRpb25zIGZvciBsYW5ndWFnZS1pbmRlcGVuZGVudCBwcmV0dHktcHJpbnQgc3Vicm91dGluZXMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBHYWJyaWVsIERvcyBSZWlzIDxnZHJAaW50ZWdyYWJsZS1zb2x1dGlvbnMubmV0PgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfUFJFVFRZX1BSSU5UX0gKKyNkZWZpbmUgR0NDX1BSRVRUWV9QUklOVF9ICisKKyNpbmNsdWRlICJvYnN0YWNrLmgiCisjaW5jbHVkZSAiaW5wdXQuaCIKKworLyogTWF4aW11bSBudW1iZXIgb2YgZm9ybWF0IHN0cmluZyBhcmd1bWVudHMuICAqLworI2RlZmluZSBQUF9OTF9BUkdNQVggICAzMAorCisvKiBUaGUgdHlwZSBvZiBhIHRleHQgdG8gYmUgZm9ybWF0dGVkIGFjY29yZGluZyBhIGZvcm1hdCBzcGVjaWZpY2F0aW9uCisgICBhbG9uZyB3aXRoIGEgbGlzdCBvZiB0aGluZ3MuICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgY29uc3QgY2hhciAqZm9ybWF0X3NwZWM7CisgIHZhX2xpc3QgKmFyZ3NfcHRyOworICBpbnQgZXJyX25vOyAgLyogZm9yICVtICovCisgIGxvY2F0aW9uX3QgKmxvY3VzOworICB0cmVlICphYnN0cmFjdF9vcmlnaW47Cit9IHRleHRfaW5mbzsKKworLyogSG93IG9mdGVuIGRpYWdub3N0aWNzIGFyZSBwcmVmaXhlZCBieSB0aGVpciBsb2NhdGlvbnM6CisgICBvIERJQUdOT1NUSUNTX1NIT1dfUFJFRklYX05FVkVSOiBuZXZlciAtIG5vdCB5ZXQgc3VwcG9ydGVkOworICAgbyBESUFHTk9TVElDU19TSE9XX1BSRUZJWF9PTkNFOiBlbWl0IG9ubHkgb25jZTsKKyAgIG8gRElBR05PU1RJQ1NfU0hPV19QUkVGSVhfRVZFUllfTElORTogZW1pdCBlYWNoIHRpbWUgYSBwaHlzaWNhbAorICAgbGluZSBpcyBzdGFydGVkLiAgKi8KK3R5cGVkZWYgZW51bQoreworICBESUFHTk9TVElDU19TSE9XX1BSRUZJWF9PTkNFICAgICAgID0gMHgwLAorICBESUFHTk9TVElDU19TSE9XX1BSRUZJWF9ORVZFUiAgICAgID0gMHgxLAorICBESUFHTk9TVElDU19TSE9XX1BSRUZJWF9FVkVSWV9MSU5FID0gMHgyCit9IGRpYWdub3N0aWNfcHJlZml4aW5nX3J1bGVfdDsKKworLyogVGhlIGNodW5rX2luZm8gZGF0YSBzdHJ1Y3R1cmUgZm9ybXMgYSBzdGFjayBvZiB0aGUgcmVzdWx0cyBmcm9tIHRoZQorICAgZmlyc3QgcGhhc2Ugb2YgZm9ybWF0dGluZyAocHBfYmFzZV9mb3JtYXQpIHdoaWNoIGhhdmUgbm90IHlldCBiZWVuCisgICBvdXRwdXQgKHBwX2Jhc2Vfb3V0cHV0X2Zvcm1hdHRlZF90ZXh0KS4gIEEgc3RhY2sgaXMgbmVjZXNzYXJ5IGJlY2F1c2UKKyAgIHRoZSBkaWFnbm9zdGljIHN0YXJ0ZXIgbWF5IGRlY2lkZSB0byBnZW5lcmF0ZSBpdHMgb3duIG91dHB1dCBieSB3YXkKKyAgIG9mIHRoZSBmb3JtYXR0ZXIuICAqLworc3RydWN0IGNodW5rX2luZm8KK3sKKyAgLyogUG9pbnRlciB0byBwcmV2aW91cyBjaHVuayBvbiB0aGUgc3RhY2suICAqLworICBzdHJ1Y3QgY2h1bmtfaW5mbyAqcHJldjsKKworICAvKiBBcnJheSBvZiBjaHVua3MgdG8gb3V0cHV0LiAgRWFjaCBjaHVuayBpcyBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZy4KKyAgICAgSW4gdGhlIGZpcnN0IHBoYXNlIG9mIGZvcm1hdHRpbmcsIGV2ZW4tbnVtYmVyZWQgY2h1bmtzIGFyZQorICAgICB0byBiZSBvdXRwdXQgdmVyYmF0aW0sIG9kZC1udW1iZXJlZCBjaHVua3MgYXJlIGZvcm1hdCBzcGVjaWZpZXJzLgorICAgICBUaGUgc2Vjb25kIHBoYXNlIHJlcGxhY2VzIGFsbCBvZGQtbnVtYmVyZWQgY2h1bmtzIHdpdGggZm9ybWF0dGVkCisgICAgIHRleHQsIGFuZCB0aGUgdGhpcmQgcGhhc2Ugc2ltcGx5IGVtaXRzIGFsbCB0aGUgY2h1bmtzIGluIHNlcXVlbmNlCisgICAgIHdpdGggYXBwcm9wcmlhdGUgbGluZS13cmFwcGluZy4gICovCisgIGNvbnN0IGNoYXIgKmFyZ3NbUFBfTkxfQVJHTUFYICogMl07Cit9OworCisvKiBUaGUgb3V0cHV0IGJ1ZmZlciBkYXRhdHlwZS4gIFRoaXMgaXMgYmVzdCBzZWVuIGFzIGFuIGFic3RyYWN0IGRhdGF0eXBlCisgICB3aG9zZSBmaWVsZHMgc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZCBkaXJlY3RseSBieSBjbGllbnRzLiAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qIE9ic3RhY2sgd2hlcmUgdGhlIHRleHQgaXMgYnVpbHQgdXAuICAqLworICBzdHJ1Y3Qgb2JzdGFjayBmb3JtYXR0ZWRfb2JzdGFjazsKKworICAvKiBPYnN0YWNrIGNvbnRhaW5pbmcgYSBjaHVua2VkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmb3JtYXQKKyAgICAgc3BlY2lmaWNhdGlvbiBwbHVzIGFyZ3VtZW50cy4gICovCisgIHN0cnVjdCBvYnN0YWNrIGNodW5rX29ic3RhY2s7CisKKyAgLyogQ3VycmVudGx5IGFjdGl2ZSBvYnN0YWNrOiBvbmUgb2YgdGhlIGFib3ZlIHR3by4gIFRoaXMgaXMgdXNlZCBzbworICAgICB0aGF0IHRoZSB0ZXh0IGZvcm1hdHRlcnMgZG9uJ3QgbmVlZCB0byBrbm93IHdoaWNoIHBoYXNlIHdlJ3JlIGluLiAgKi8KKyAgc3RydWN0IG9ic3RhY2sgKm9ic3RhY2s7CisKKyAgLyogU3RhY2sgb2YgY2h1bmsgYXJyYXlzLiAgVGhlc2UgY29tZSBmcm9tIHRoZSBjaHVua19vYnN0YWNrLiAgKi8KKyAgc3RydWN0IGNodW5rX2luZm8gKmN1cl9jaHVua19hcnJheTsKKworICAvKiBXaGVyZSB0byBvdXRwdXQgZm9ybWF0dGVkIHRleHQuICAqLworICBGSUxFICpzdHJlYW07CisKKyAgLyogVGhlIGFtb3VudCBvZiBjaGFyYWN0ZXJzIG91dHB1dCBzbyBmYXIuICAqLworICBpbnQgbGluZV9sZW5ndGg7CisKKyAgLyogVGhpcyBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIGFueSBwcmludGVkIGludGVnZXIgb3IKKyAgICAgZmxvYXRpbmctcG9pbnQgdmFsdWUuICAqLworICBjaGFyIGRpZ2l0X2J1ZmZlclsxMjhdOworfSBvdXRwdXRfYnVmZmVyOworCisvKiBUaGUgdHlwZSBvZiBwcmV0dHktcHJpbnRlciBmbGFncyBwYXNzZWQgdG8gY2xpZW50cy4gICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBwcF9mbGFnczsKKwordHlwZWRlZiBlbnVtCit7CisgIHBwX25vbmUsIHBwX2JlZm9yZSwgcHBfYWZ0ZXIKK30gcHBfcGFkZGluZzsKKworLyogU3RydWN0dXJlIGZvciBzd2l0Y2hpbmcgaW4gYW5kIG91dCBvZiB2ZXJiYXRpbSBtb2RlIGluIGEgY29udmVuaWVudAorICAgbWFubmVyLiAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qIEN1cnJlbnQgcHJlZml4aW5nIHJ1bGUuICAqLworICBkaWFnbm9zdGljX3ByZWZpeGluZ19ydWxlX3QgcnVsZTsKKworICAvKiBUaGUgaWRlYWwgdXBwZXIgYm91bmQgb2YgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcGVyIGxpbmUsIGFzIHN1Z2dlc3RlZAorICAgICBieSBmcm9udC1lbmQuICAqLworICBpbnQgbGluZV9jdXRvZmY7Cit9IHBwX3dyYXBwaW5nX21vZGVfdDsKKworLyogTWF4aW11bSBjaGFyYWN0ZXJzIHBlciBsaW5lIGluIGF1dG9tYXRpYyBsaW5lIHdyYXBwaW5nIG1vZGUuCisgICBaZXJvIG1lYW5zIGRvbid0IHdyYXAgbGluZXMuICAqLworI2RlZmluZSBwcF9saW5lX2N1dG9mZihQUCkgIHBwX2Jhc2UgKFBQKS0+d3JhcHBpbmcubGluZV9jdXRvZmYKKworLyogUHJlZml4aW5nIHJ1bGUgdXNlZCBpbiBmb3JtYXR0aW5nIGEgZGlhZ25vc3RpYyBtZXNzYWdlLiAgKi8KKyNkZWZpbmUgcHBfcHJlZml4aW5nX3J1bGUoUFApICBwcF9iYXNlIChQUCktPndyYXBwaW5nLnJ1bGUKKworLyogR2V0IG9yIHNldCB0aGUgd3JhcHBpbmcgbW9kZSBhcyBhIHNpbmdsZSBlbnRpdHkuICAqLworI2RlZmluZSBwcF93cmFwcGluZ19tb2RlKFBQKSBwcF9iYXNlIChQUCktPndyYXBwaW5nCisKKy8qIFRoZSB0eXBlIG9mIGEgaG9vayB0aGF0IGZvcm1hdHMgY2xpZW50LXNwZWNpZmljIGRhdGEgb250byBhIHByZXR0eV9waW50ZXIuCisgICBBIGNsaWVudC1zdXBwbGllZCBmb3JtYXR0ZXIgcmV0dXJucyB0cnVlIGlmIGV2ZXJ5dGhpbmcgZ29lcyB3ZWxsLAorICAgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuICAqLwordHlwZWRlZiBzdHJ1Y3QgcHJldHR5X3ByaW50X2luZm8gcHJldHR5X3ByaW50ZXI7Cit0eXBlZGVmIGJvb2wgKCpwcmludGVyX2ZuKSAocHJldHR5X3ByaW50ZXIgKiwgdGV4dF9pbmZvICosIGNvbnN0IGNoYXIgKiwKKwkJCSAgICBpbnQsIGJvb2wsIGJvb2wsIGJvb2wpOworCisvKiBDbGllbnQgc3VwcGxpZWQgZnVuY3Rpb24gdXNlZCB0byBkZWNvZGUgZm9ybWF0cy4gICovCisjZGVmaW5lIHBwX2Zvcm1hdF9kZWNvZGVyKFBQKSBwcF9iYXNlIChQUCktPmZvcm1hdF9kZWNvZGVyCisKKy8qIFRSVUUgaWYgYSBuZXdsaW5lIGNoYXJhY3RlciBuZWVkcyB0byBiZSBhZGRlZCBiZWZvcmUgZnVydGhlcgorICAgZm9ybWF0dGluZy4gICovCisjZGVmaW5lIHBwX25lZWRzX25ld2xpbmUoUFApICBwcF9iYXNlIChQUCktPm5lZWRfbmV3bGluZQorCisvKiBUcnVlIGlmIFBSRVRUWS1QUklOVEVSIGlzIGluIGxpbmUtd3JhcHBpbmcgbW9kZS4gICovCisjZGVmaW5lIHBwX2lzX3dyYXBwaW5nX2xpbmUoUFApIChwcF9saW5lX2N1dG9mZiAoUFApID4gMCkKKworLyogVGhlIGFtb3VudCBvZiB3aGl0ZXNwYWNlIHRvIGJlIGVtaXR0ZWQgd2hlbiBzdGFydGluZyBhIG5ldyBsaW5lLiAgKi8KKyNkZWZpbmUgcHBfaW5kZW50YXRpb24oUFApIHBwX2Jhc2UgKFBQKS0+aW5kZW50X3NraXAKKworLyogVHJ1ZSBpZiBpZGVudGlmaWVycyBhcmUgdHJhbnNsYXRlZCB0byB0aGUgbG9jYWxlIGNoYXJhY3RlciBzZXQgb24KKyAgIG91dHB1dC4gICovCisjZGVmaW5lIHBwX3RyYW5zbGF0ZV9pZGVudGlmaWVycyhQUCkgcHBfYmFzZSAoUFApLT50cmFuc2xhdGVfaWRlbnRpZmllcnMKKworLyogVGhlIGRhdGEgc3RydWN0dXJlIHRoYXQgY29udGFpbnMgdGhlIGJhcmUgbWluaW11bSByZXF1aXJlZCB0byBkbworICAgcHJvcGVyIHByZXR0eS1wcmludGluZy4gIENsaWVudHMgbWF5IGRlcml2ZWQgZnJvbSB0aGlzIHN0cnVjdHVyZQorICAgYW5kIGFkZCBhZGRpdGlvbmFsIGZpZWxkcyB0aGV5IG5lZWQuICAqLworc3RydWN0IHByZXR0eV9wcmludF9pbmZvCit7CisgIC8qIFdoZXJlIHdlIHByaW50IGV4dGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIEVOVElUWS4gICovCisgIG91dHB1dF9idWZmZXIgKmJ1ZmZlcjsKKworICAvKiBUaGUgcHJlZml4IGZvciBlYWNoIG5ldyBsaW5lLiAgKi8KKyAgY29uc3QgY2hhciAqcHJlZml4OworCisgIC8qIFdoZXJlIHRvIHB1dCB3aGl0ZXNwYWNlIGFyb3VuZCB0aGUgZW50aXR5IGJlaW5nIGZvcm1hdHRlZC4gICovCisgIHBwX3BhZGRpbmcgcGFkZGluZzsKKworICAvKiBUaGUgcmVhbCB1cHBlciBib3VuZCBvZiBudW1iZXIgb2YgY2hhcmFjdGVycyBwZXIgbGluZSwgdGFraW5nIGludG8KKyAgICAgYWNjb3VudCB0aGUgY2FzZSBvZiBhIHZlcnkgdmVyeSBsb29vbmcgcHJlZml4LiAgKi8KKyAgaW50IG1heGltdW1fbGVuZ3RoOworCisgIC8qIEluZGVudGF0aW9uIGNvdW50LiAgKi8KKyAgaW50IGluZGVudF9za2lwOworCisgIC8qIEN1cnJlbnQgd3JhcHBpbmcgbW9kZS4gICovCisgIHBwX3dyYXBwaW5nX21vZGVfdCB3cmFwcGluZzsKKworICAvKiBJZiBub24tTlVMTCwgdGhpcyBmdW5jdGlvbiBmb3JtYXRzIGEgVEVYVCBpbnRvIHRoZSBCVUZGRVIuICBXaGVuIGNhbGxlZCwKKyAgICAgVEVYVC0+Zm9ybWF0X3NwZWMgcG9pbnRzIHRvIGEgZm9ybWF0IGNvZGUuICBGT1JNQVRfREVDT0RFUiBzaG91bGQgY2FsbAorICAgICBwcF9zdHJpbmcgKGFuZCByZWxhdGVkIGZ1bmN0aW9ucykgdG8gYWRkIGRhdGEgdG8gdGhlIEJVRkZFUi4KKyAgICAgRk9STUFUX0RFQ09ERVIgY2FuIHJlYWQgYXJndW1lbnRzIGZyb20gKlRFWFQtPmFyZ3NfcHRzIHVzaW5nIFZBX0FSRy4KKyAgICAgSWYgdGhlIEJVRkZFUiBuZWVkcyBhZGRpdGlvbmFsIGNoYXJhY3RlcnMgZnJvbSB0aGUgZm9ybWF0IHN0cmluZywgaXQKKyAgICAgc2hvdWxkIGFkdmFuY2UgdGhlIFRFWFQtPmZvcm1hdF9zcGVjIGFzIGl0IGdvZXMuICBXaGVuIEZPUk1BVF9ERUNPREVSCisgICAgIHJldHVybnMsIFRFWFQtPmZvcm1hdF9zcGVjIHNob3VsZCBwb2ludCB0byB0aGUgbGFzdCBjaGFyYWN0ZXIgcHJvY2Vzc2VkLgorICAqLworICBwcmludGVyX2ZuIGZvcm1hdF9kZWNvZGVyOworCisgIC8qIE5vbnplcm8gaWYgY3VycmVudCBQUkVGSVggd2FzIGVtaXR0ZWQgYXQgbGVhc3Qgb25jZS4gICovCisgIGJvb2wgZW1pdHRlZF9wcmVmaXg7CisKKyAgLyogTm9uemVybyBtZWFucyBvbmUgc2hvdWxkIGVtaXQgYSBuZXdsaW5lIGJlZm9yZSBvdXRwdXR0aW5nIGFueXRoaW5nLiAgKi8KKyAgYm9vbCBuZWVkX25ld2xpbmU7CisKKyAgLyogTm9uemVybyBtZWFucyBpZGVudGlmaWVycyBhcmUgdHJhbnNsYXRlZCB0byB0aGUgbG9jYWxlIGNoYXJhY3RlcgorICAgICBzZXQgb24gb3V0cHV0LiAgKi8KKyAgYm9vbCB0cmFuc2xhdGVfaWRlbnRpZmllcnM7Cit9OworCisjZGVmaW5lIHBwX3NldF9saW5lX21heGltdW1fbGVuZ3RoKFBQLCBMKSBcCisgICBwcF9iYXNlX3NldF9saW5lX21heGltdW1fbGVuZ3RoIChwcF9iYXNlIChQUCksIEwpCisjZGVmaW5lIHBwX3NldF9wcmVmaXgoUFAsIFApICAgIHBwX2Jhc2Vfc2V0X3ByZWZpeCAocHBfYmFzZSAoUFApLCBQKQorI2RlZmluZSBwcF9kZXN0cm95X3ByZWZpeChQUCkgICBwcF9iYXNlX2Rlc3Ryb3lfcHJlZml4IChwcF9iYXNlIChQUCkpCisjZGVmaW5lIHBwX3JlbWFpbmluZ19jaGFyYWN0ZXJfY291bnRfZm9yX2xpbmUoUFApIFwKKyAgcHBfYmFzZV9yZW1haW5pbmdfY2hhcmFjdGVyX2NvdW50X2Zvcl9saW5lIChwcF9iYXNlIChQUCkpCisjZGVmaW5lIHBwX2NsZWFyX291dHB1dF9hcmVhKFBQKSBcCisgIHBwX2Jhc2VfY2xlYXJfb3V0cHV0X2FyZWEgKHBwX2Jhc2UgKFBQKSkKKyNkZWZpbmUgcHBfZm9ybWF0dGVkX3RleHQoUFApICAgcHBfYmFzZV9mb3JtYXR0ZWRfdGV4dCAocHBfYmFzZSAoUFApKQorI2RlZmluZSBwcF9sYXN0X3Bvc2l0aW9uX2luX3RleHQoUFApIFwKKyAgcHBfYmFzZV9sYXN0X3Bvc2l0aW9uX2luX3RleHQgKHBwX2Jhc2UgKFBQKSkKKyNkZWZpbmUgcHBfZW1pdF9wcmVmaXgoUFApICAgICAgcHBfYmFzZV9lbWl0X3ByZWZpeCAocHBfYmFzZSAoUFApKQorI2RlZmluZSBwcF9hcHBlbmRfdGV4dChQUCwgQiwgRSkgXAorICBwcF9iYXNlX2FwcGVuZF90ZXh0IChwcF9iYXNlIChQUCksIEIsIEUpCisjZGVmaW5lIHBwX2ZsdXNoKFBQKSAgICAgICAgICAgIHBwX2Jhc2VfZmx1c2ggKHBwX2Jhc2UgKFBQKSkKKyNkZWZpbmUgcHBfZm9ybWF0KFBQLCBUSSkgICAgICAgcHBfYmFzZV9mb3JtYXQgKHBwX2Jhc2UgKFBQKSwgVEkpCisjZGVmaW5lIHBwX291dHB1dF9mb3JtYXR0ZWRfdGV4dChQUCkgXAorICBwcF9iYXNlX291dHB1dF9mb3JtYXR0ZWRfdGV4dCAocHBfYmFzZSAoUFApKQorI2RlZmluZSBwcF9mb3JtYXRfdmVyYmF0aW0oUFAsIFRJKSBcCisgIHBwX2Jhc2VfZm9ybWF0X3ZlcmJhdGltIChwcF9iYXNlIChQUCksIFRJKQorCisjZGVmaW5lIHBwX2NoYXJhY3RlcihQUCwgQykgICAgIHBwX2Jhc2VfY2hhcmFjdGVyIChwcF9iYXNlIChQUCksIEMpCisjZGVmaW5lIHBwX3N0cmluZyhQUCwgUykgICAgICAgIHBwX2Jhc2Vfc3RyaW5nIChwcF9iYXNlIChQUCksIFMpCisjZGVmaW5lIHBwX25ld2xpbmUoUFApICAgICAgICAgIHBwX2Jhc2VfbmV3bGluZSAocHBfYmFzZSAoUFApKQorCisjZGVmaW5lIHBwX3NwYWNlKFBQKSAgICAgICAgICAgIHBwX2NoYXJhY3RlciAoUFAsICcgJykKKyNkZWZpbmUgcHBfbGVmdF9wYXJlbihQUCkgICAgICAgcHBfY2hhcmFjdGVyIChQUCwgJygnKQorI2RlZmluZSBwcF9yaWdodF9wYXJlbihQUCkgICAgICBwcF9jaGFyYWN0ZXIgKFBQLCAnKScpCisjZGVmaW5lIHBwX2xlZnRfYnJhY2tldChQUCkgICAgIHBwX2NoYXJhY3RlciAoUFAsICdbJykKKyNkZWZpbmUgcHBfcmlnaHRfYnJhY2tldChQUCkgICAgcHBfY2hhcmFjdGVyIChQUCwgJ10nKQorI2RlZmluZSBwcF9sZWZ0X2JyYWNlKFBQKSAgICAgICBwcF9jaGFyYWN0ZXIgKFBQLCAneycpCisjZGVmaW5lIHBwX3JpZ2h0X2JyYWNlKFBQKSAgICAgIHBwX2NoYXJhY3RlciAoUFAsICd9JykKKyNkZWZpbmUgcHBfc2VtaWNvbG9uKFBQKSAgICAgICAgcHBfY2hhcmFjdGVyIChQUCwgJzsnKQorI2RlZmluZSBwcF9jb21tYShQUCkgICAgICAgICAgICBwcF9zdHJpbmcgKFBQLCAiLCAiKQorI2RlZmluZSBwcF9kb3QoUFApICAgICAgICAgICAgICBwcF9jaGFyYWN0ZXIgKFBQLCAnLicpCisjZGVmaW5lIHBwX2NvbG9uKFBQKSAgICAgICAgICAgIHBwX2NoYXJhY3RlciAoUFAsICc6JykKKyNkZWZpbmUgcHBfY29sb25fY29sb24oUFApICAgICAgcHBfc3RyaW5nIChQUCwgIjo6IikKKyNkZWZpbmUgcHBfYXJyb3coUFApICAgICAgICAgICAgcHBfc3RyaW5nIChQUCwgIi0+IikKKyNkZWZpbmUgcHBfZXF1YWwoUFApICAgICAgICAgICAgcHBfY2hhcmFjdGVyIChQUCwgJz0nKQorI2RlZmluZSBwcF9xdWVzdGlvbihQUCkgICAgICAgICBwcF9jaGFyYWN0ZXIgKFBQLCAnPycpCisjZGVmaW5lIHBwX2JhcihQUCkgICAgICAgICAgICAgIHBwX2NoYXJhY3RlciAoUFAsICd8JykKKyNkZWZpbmUgcHBfY2FycmV0KFBQKSAgICAgICAgICAgcHBfY2hhcmFjdGVyIChQUCwgJ14nKQorI2RlZmluZSBwcF9hbXBlcnNhbmQoUFApICAgICAgICBwcF9jaGFyYWN0ZXIgKFBQLCAnJicpCisjZGVmaW5lIHBwX2xlc3MoUFApICAgICAgICAgICAgIHBwX2NoYXJhY3RlciAoUFAsICc8JykKKyNkZWZpbmUgcHBfZ3JlYXRlcihQUCkgICAgICAgICAgcHBfY2hhcmFjdGVyIChQUCwgJz4nKQorI2RlZmluZSBwcF9wbHVzKFBQKSAgICAgICAgICAgICBwcF9jaGFyYWN0ZXIgKFBQLCAnKycpCisjZGVmaW5lIHBwX21pbnVzKFBQKSAgICAgICAgICAgIHBwX2NoYXJhY3RlciAoUFAsICctJykKKyNkZWZpbmUgcHBfc3RhcihQUCkgICAgICAgICAgICAgcHBfY2hhcmFjdGVyIChQUCwgJyonKQorI2RlZmluZSBwcF9zbGFzaChQUCkgICAgICAgICAgICBwcF9jaGFyYWN0ZXIgKFBQLCAnLycpCisjZGVmaW5lIHBwX21vZHVsbyhQUCkgICAgICAgICAgIHBwX2NoYXJhY3RlciAoUFAsICclJykKKyNkZWZpbmUgcHBfZXhjbGFtYXRpb24oUFApICAgICAgcHBfY2hhcmFjdGVyIChQUCwgJyEnKQorI2RlZmluZSBwcF9jb21wbGVtZW50KFBQKSAgICAgICBwcF9jaGFyYWN0ZXIgKFBQLCAnficpCisjZGVmaW5lIHBwX3F1b3RlKFBQKSAgICAgICAgICAgIHBwX2NoYXJhY3RlciAoUFAsICdcJycpCisjZGVmaW5lIHBwX2JhY2txdW90ZShQUCkgICAgICAgIHBwX2NoYXJhY3RlciAoUFAsICdgJykKKyNkZWZpbmUgcHBfZG91YmxlcXVvdGUoUFApICAgICAgcHBfY2hhcmFjdGVyIChQUCwgJyInKQorI2RlZmluZSBwcF9uZXdsaW5lX2FuZF9pbmRlbnQoUFAsIE4pIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcHBfaW5kZW50YXRpb24gKFBQKSArPSBOOyAgICAgICAgXAorICAgIHBwX25ld2xpbmUgKFBQKTsgICAgICAgICAgICAgICAgIFwKKyAgICBwcF9iYXNlX2luZGVudCAocHBfYmFzZSAoUFApKTsgICBcCisgICAgcHBfbmVlZHNfbmV3bGluZSAoUFApID0gZmFsc2U7ICAgXAorICB9IHdoaWxlICgwKQorI2RlZmluZSBwcF9tYXliZV9uZXdsaW5lX2FuZF9pbmRlbnQoUFAsIE4pIFwKKyAgaWYgKHBwX25lZWRzX25ld2xpbmUgKFBQKSkgcHBfbmV3bGluZV9hbmRfaW5kZW50IChQUCwgTikKKyNkZWZpbmUgcHBfbWF5YmVfc3BhY2UoUFApICAgcHBfYmFzZV9tYXliZV9zcGFjZSAocHBfYmFzZSAoUFApKQorI2RlZmluZSBwcF9zZXBhcmF0ZV93aXRoKFBQLCBDKSAgICAgXAorICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICBwcF9jaGFyYWN0ZXIgKFBQLCBDKTsgICAgICAgICAgXAorICAgICBwcF9zcGFjZSAoUFApOyAgICAgICAgICAgICAgICAgXAorICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHBfc2NhbGFyKFBQLCBGT1JNQVQsIFNDQUxBUikJICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8JCQkJCSAgICAgICAgCSAgICAgIFwKKyAgICB7CQkJICAgICAgICAgCQkJICAgICAgXAorICAgICAgc3ByaW50ZiAocHBfYnVmZmVyIChQUCktPmRpZ2l0X2J1ZmZlciwgRk9STUFULCBTQ0FMQVIpOyBcCisgICAgICBwcF9zdHJpbmcgKFBQLCBwcF9idWZmZXIgKFBQKS0+ZGlnaXRfYnVmZmVyKTsgICAgICAgICAgIFwKKyAgICB9CQkJCQkJICAgICAgICAgICAgICBcCisgIHdoaWxlICgwKQorI2RlZmluZSBwcF9kZWNpbWFsX2ludChQUCwgSSkgIHBwX3NjYWxhciAoUFAsICIlZCIsIEkpCisjZGVmaW5lIHBwX3dpZGVfaW50ZWdlcihQUCwgSSkgXAorICAgcHBfc2NhbGFyIChQUCwgSE9TVF9XSURFX0lOVF9QUklOVF9ERUMsIChIT1NUX1dJREVfSU5UKSBJKQorI2RlZmluZSBwcF93aWRlc3RfaW50ZWdlcihQUCwgSSkgXAorICAgcHBfc2NhbGFyIChQUCwgSE9TVF9XSURFU1RfSU5UX1BSSU5UX0RFQywgKEhPU1RfV0lERVNUX0lOVCkgSSkKKyNkZWZpbmUgcHBfcG9pbnRlcihQUCwgUCkgICAgICBwcF9zY2FsYXIgKFBQLCAiJXAiLCBQKQorCisjZGVmaW5lIHBwX2lkZW50aWZpZXIoUFAsIElEKSAgcHBfc3RyaW5nIChQUCwgKHBwX3RyYW5zbGF0ZV9pZGVudGlmaWVycyAoUFApIFwKKwkJCQkJICA/IGlkZW50aWZpZXJfdG9fbG9jYWxlIChJRCkJXAorCQkJCQkgIDogKElEKSkpCisjZGVmaW5lIHBwX3RyZWVfaWRlbnRpZmllcihQUCwgVCkgICAgICAgICAgICAgICAgICAgICAgXAorICBwcF9iYXNlX3RyZWVfaWRlbnRpZmllciAocHBfYmFzZSAoUFApLCBUKQorCisjZGVmaW5lIHBwX3Vuc3VwcG9ydGVkX3RyZWUoUFAsIFQpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcHBfdmVyYmF0aW0gKHBwX2Jhc2UgKFBQKSwgIiMlcXMgbm90IHN1cHBvcnRlZCBieSAlcyMiLCBcCisgICAgICAgICAgICAgICB0cmVlX2NvZGVfbmFtZVsoaW50KSBUUkVFX0NPREUgKFQpXSwgX19GVU5DVElPTl9fKQorCisKKyNkZWZpbmUgcHBfYnVmZmVyKFBQKSBwcF9iYXNlIChQUCktPmJ1ZmZlcgorLyogQ2xpZW50cyB0aGF0IGRpcmVjdGx5IGRlcml2ZSBmcm9tIHByZXR0eV9wcmludGVyIG5lZWQgdG8gb3ZlcnJpZGUKKyAgIHRoaXMgbWFjcm8gdG8gcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgYmFzZSBwcmV0dHlfcHJpbnRlciBzdHJ1Y3R1cmUuICAqLworI2RlZmluZSBwcF9iYXNlKFBQKSAoUFApCisKK2V4dGVybiB2b2lkIHBwX2NvbnN0cnVjdCAocHJldHR5X3ByaW50ZXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIHZvaWQgcHBfYmFzZV9zZXRfbGluZV9tYXhpbXVtX2xlbmd0aCAocHJldHR5X3ByaW50ZXIgKiwgaW50KTsKK2V4dGVybiB2b2lkIHBwX2Jhc2Vfc2V0X3ByZWZpeCAocHJldHR5X3ByaW50ZXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIHBwX2Jhc2VfZGVzdHJveV9wcmVmaXggKHByZXR0eV9wcmludGVyICopOworZXh0ZXJuIGludCBwcF9iYXNlX3JlbWFpbmluZ19jaGFyYWN0ZXJfY291bnRfZm9yX2xpbmUgKHByZXR0eV9wcmludGVyICopOworZXh0ZXJuIHZvaWQgcHBfYmFzZV9jbGVhcl9vdXRwdXRfYXJlYSAocHJldHR5X3ByaW50ZXIgKik7CitleHRlcm4gY29uc3QgY2hhciAqcHBfYmFzZV9mb3JtYXR0ZWRfdGV4dCAocHJldHR5X3ByaW50ZXIgKik7CitleHRlcm4gY29uc3QgY2hhciAqcHBfYmFzZV9sYXN0X3Bvc2l0aW9uX2luX3RleHQgKGNvbnN0IHByZXR0eV9wcmludGVyICopOworZXh0ZXJuIHZvaWQgcHBfYmFzZV9lbWl0X3ByZWZpeCAocHJldHR5X3ByaW50ZXIgKik7CitleHRlcm4gdm9pZCBwcF9iYXNlX2FwcGVuZF90ZXh0IChwcmV0dHlfcHJpbnRlciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKKy8qIFRoaXMgaGVhZGVyIG1heSBiZSBpbmNsdWRlZCBiZWZvcmUgdG9wbGV2LmgsIGhlbmNlIHRoZSBkdXBsaWNhdGUKKyAgIGRlZmluaXRpb25zIHRvIGFsbG93IGZvciBHQ0Mtc3BlY2lmaWMgZm9ybWF0cy4gICovCisjaWYgR0NDX1ZFUlNJT04gPj0gMzAwNQorI2RlZmluZSBBVFRSSUJVVEVfR0NDX1BQRElBRyhtLCBuKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19nY2NfZGlhZ19fLCBtICxuKSkpIEFUVFJJQlVURV9OT05OVUxMKG0pCisjZWxzZQorI2RlZmluZSBBVFRSSUJVVEVfR0NDX1BQRElBRyhtLCBuKSBBVFRSSUJVVEVfTk9OTlVMTChtKQorI2VuZGlmCitleHRlcm4gdm9pZCBwcF9wcmludGYgKHByZXR0eV9wcmludGVyICosIGNvbnN0IGNoYXIgKiwgLi4uKQorICAgICBBVFRSSUJVVEVfR0NDX1BQRElBRygyLDMpOworCitleHRlcm4gdm9pZCBwcF92ZXJiYXRpbSAocHJldHR5X3ByaW50ZXIgKiwgY29uc3QgY2hhciAqLCAuLi4pCisgICAgIEFUVFJJQlVURV9HQ0NfUFBESUFHKDIsMyk7CitleHRlcm4gdm9pZCBwcF9iYXNlX2ZsdXNoIChwcmV0dHlfcHJpbnRlciAqKTsKK2V4dGVybiB2b2lkIHBwX2Jhc2VfZm9ybWF0IChwcmV0dHlfcHJpbnRlciAqLCB0ZXh0X2luZm8gKik7CitleHRlcm4gdm9pZCBwcF9iYXNlX291dHB1dF9mb3JtYXR0ZWRfdGV4dCAocHJldHR5X3ByaW50ZXIgKik7CitleHRlcm4gdm9pZCBwcF9iYXNlX2Zvcm1hdF92ZXJiYXRpbSAocHJldHR5X3ByaW50ZXIgKiwgdGV4dF9pbmZvICopOworCitleHRlcm4gdm9pZCBwcF9iYXNlX2luZGVudCAocHJldHR5X3ByaW50ZXIgKik7CitleHRlcm4gdm9pZCBwcF9iYXNlX25ld2xpbmUgKHByZXR0eV9wcmludGVyICopOworZXh0ZXJuIHZvaWQgcHBfYmFzZV9jaGFyYWN0ZXIgKHByZXR0eV9wcmludGVyICosIGludCk7CitleHRlcm4gdm9pZCBwcF9iYXNlX3N0cmluZyAocHJldHR5X3ByaW50ZXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIHBwX3dyaXRlX3RleHRfdG9fc3RyZWFtIChwcmV0dHlfcHJpbnRlciAqcHApOworZXh0ZXJuIHZvaWQgcHBfYmFzZV9tYXliZV9zcGFjZSAocHJldHR5X3ByaW50ZXIgKik7CitleHRlcm4gdm9pZCBwcF9iYXNlX3RyZWVfaWRlbnRpZmllciAocHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7CisKKy8qIFN3aXRjaCBpbnRvIHZlcmJhdGltIG1vZGUgYW5kIHJldHVybiB0aGUgb2xkIG1vZGUuICAqLworc3RhdGljIGlubGluZSBwcF93cmFwcGluZ19tb2RlX3QKK3BwX3NldF92ZXJiYXRpbV93cmFwcGluZ18gKHByZXR0eV9wcmludGVyICpwcCkKK3sKKyAgcHBfd3JhcHBpbmdfbW9kZV90IG9sZG1vZGUgPSBwcF93cmFwcGluZ19tb2RlIChwcCk7CisgIHBwX2xpbmVfY3V0b2ZmIChwcCkgPSAwOworICBwcF9wcmVmaXhpbmdfcnVsZSAocHApID0gRElBR05PU1RJQ1NfU0hPV19QUkVGSVhfTkVWRVI7CisgIHJldHVybiBvbGRtb2RlOworfQorI2RlZmluZSBwcF9zZXRfdmVyYmF0aW1fd3JhcHBpbmcoUFApIHBwX3NldF92ZXJiYXRpbV93cmFwcGluZ18gKHBwX2Jhc2UgKFBQKSkKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmlkZW50aWZpZXJfdG9fbG9jYWxlIChjb25zdCBjaGFyICopOworCisjZW5kaWYgLyogR0NDX1BSRVRUWV9QUklOVF9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvcmVhbC5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3JlYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODBiZjk2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3JlYWwuaApAQCAtMCwwICsxLDUxNCBAQAorLyogRGVmaW5pdGlvbnMgb2YgZmxvYXRpbmctcG9pbnQgYWNjZXNzIGZvciBHTlUgY29tcGlsZXIuCisgICBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEsIDE5OTQsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisgICAyMDAwLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisgICB2ZXJzaW9uLgorCisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCisgICBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX1JFQUxfSAorI2RlZmluZSBHQ0NfUkVBTF9ICisKKyNpZm5kZWYgR0VORVJBVE9SX0ZJTEUKKyNpbmNsdWRlIDxnbXAuaD4KKyNpbmNsdWRlIDxtcGZyLmg+CisjaW5jbHVkZSA8bXBjLmg+CitleHRlcm4gdHJlZSBkb19tcGNfYXJnMiAodHJlZSwgdHJlZSwgdHJlZSwgaW50LCBpbnQgKCopKG1wY19wdHIsIG1wY19zcmNwdHIsIG1wY19zcmNwdHIsIG1wY19ybmRfdCkpOworI2VuZGlmCisjaW5jbHVkZSAibWFjaG1vZGUuaCIKKworLyogQW4gZXhwYW5kZWQgZm9ybSBvZiB0aGUgcmVwcmVzZW50ZWQgbnVtYmVyLiAgKi8KKworLyogRW51bWVyYXRlIHRoZSBzcGVjaWFsIGNhc2VzIG9mIG51bWJlcnMgdGhhdCB3ZSBlbmNvdW50ZXIuICAqLworZW51bSByZWFsX3ZhbHVlX2NsYXNzIHsKKyAgcnZjX3plcm8sCisgIHJ2Y19ub3JtYWwsCisgIHJ2Y19pbmYsCisgIHJ2Y19uYW4KK307CisKKyNkZWZpbmUgU0lHTklGSUNBTkRfQklUUwkoMTI4ICsgSE9TVF9CSVRTX1BFUl9MT05HKQorI2RlZmluZSBFWFBfQklUUwkJKDMyIC0gNikKKyNkZWZpbmUgTUFYX0VYUAkJCSgoMSA8PCAoRVhQX0JJVFMgLSAxKSkgLSAxKQorI2RlZmluZSBTSUdTWgkJCShTSUdOSUZJQ0FORF9CSVRTIC8gSE9TVF9CSVRTX1BFUl9MT05HKQorI2RlZmluZSBTSUdfTVNCCQkJKCh1bnNpZ25lZCBsb25nKTEgPDwgKEhPU1RfQklUU19QRVJfTE9ORyAtIDEpKQorCitzdHJ1Y3QgR1RZKCgpKSByZWFsX3ZhbHVlIHsKKyAgLyogVXNlIHRoZSBzYW1lIHVuZGVybHlpbmcgdHlwZSBmb3IgYWxsIGJpdC1maWVsZHMsIHNvIGFzIHRvIG1ha2UKKyAgICAgc3VyZSB0aGV5J3JlIHBhY2tlZCB0b2dldGhlciwgb3RoZXJ3aXNlIFJFQUxfVkFMVUVfVFlQRV9TSVpFIHdpbGwKKyAgICAgYmUgbWlzY29tcHV0ZWQuICAqLworICB1bnNpZ25lZCBpbnQgLyogRU5VTV9CSVRGSUVMRCAocmVhbF92YWx1ZV9jbGFzcykgKi8gY2wgOiAyOworICB1bnNpZ25lZCBpbnQgZGVjaW1hbCA6IDE7CisgIHVuc2lnbmVkIGludCBzaWduIDogMTsKKyAgdW5zaWduZWQgaW50IHNpZ25hbGxpbmcgOiAxOworICB1bnNpZ25lZCBpbnQgY2Fub25pY2FsIDogMTsKKyAgdW5zaWduZWQgaW50IHVleHAgOiBFWFBfQklUUzsKKyAgdW5zaWduZWQgbG9uZyBzaWdbU0lHU1pdOworfTsKKworI2RlZmluZSBSRUFMX0VYUChSRUFMKSBcCisgICgoaW50KSgoUkVBTCktPnVleHAgXiAodW5zaWduZWQgaW50KSgxIDw8IChFWFBfQklUUyAtIDEpKSkgXAorICAgLSAoMSA8PCAoRVhQX0JJVFMgLSAxKSkpCisjZGVmaW5lIFNFVF9SRUFMX0VYUChSRUFMLCBFWFApIFwKKyAgKChSRUFMKS0+dWV4cCA9ICgodW5zaWduZWQgaW50KShFWFApICYgKHVuc2lnbmVkIGludCkoKDEgPDwgRVhQX0JJVFMpIC0gMSkpKQorCisvKiBWYXJpb3VzIGhlYWRlcnMgY29uZGl0aW9uIHByb3RvdHlwZXMgb24gI2lmZGVmIFJFQUxfVkFMVUVfVFlQRSwgc28gaXQKKyAgIG5lZWRzIHRvIGJlIGEgbWFjcm8uICBXZSBkbyBuZWVkIHRvIGNvbnRpbnVlIHRvIGhhdmUgYSBzdHJ1Y3R1cmUgdGFnCisgICBzbyB0aGF0IG90aGVyIGhlYWRlcnMgY2FuIGZvcndhcmQgZGVjbGFyZSBpdC4gICovCisjZGVmaW5lIFJFQUxfVkFMVUVfVFlQRSBzdHJ1Y3QgcmVhbF92YWx1ZQorCisvKiBXZSBzdG9yZSBhIFJFQUxfVkFMVUVfVFlQRSBpbnRvIGFuIHJ0eCwgYW5kIHdlIGRvIHRoaXMgYnkgcHV0dGluZyBpdCBpbgorICAgY29uc2VjdXRpdmUgInciIHNsb3RzLiAgTW9yZW92ZXIsIHdlJ3ZlIGdvdCB0byBjb21wdXRlIHRoZSBudW1iZXIgb2YgInciCisgICBzbG90cyBhdCBwcmVwcm9jZXNzb3IgdGltZSwgd2hpY2ggbWVhbnMgd2UgY2FuJ3QgdXNlIHNpemVvZi4gIEd1ZXNzLiAgKi8KKworI2RlZmluZSBSRUFMX1ZBTFVFX1RZUEVfU0laRSAoU0lHTklGSUNBTkRfQklUUyArIDMyKQorI2RlZmluZSBSRUFMX1dJRFRIIFwKKyAgKFJFQUxfVkFMVUVfVFlQRV9TSVpFL0hPU1RfQklUU19QRVJfV0lERV9JTlQgXAorICAgKyAoUkVBTF9WQUxVRV9UWVBFX1NJWkUlSE9TVF9CSVRTX1BFUl9XSURFX0lOVCA/IDEgOiAwKSkgLyogcm91bmQgdXAgKi8KKworLyogVmVyaWZ5IHRoZSBndWVzcy4gICovCitleHRlcm4gY2hhciB0ZXN0X3JlYWxfd2lkdGgKKyAgW3NpemVvZihSRUFMX1ZBTFVFX1RZUEUpIDw9IFJFQUxfV0lEVEgqc2l6ZW9mKEhPU1RfV0lERV9JTlQpID8gMSA6IC0xXTsKKworLyogQ2FsY3VsYXRlIHRoZSBmb3JtYXQgZm9yIENPTlNUX0RPVUJMRS4gIFdlIG5lZWQgYXMgbWFueSBzbG90cyBhcworICAgYXJlIG5lY2Vzc2FyeSB0byBvdmVybGF5IGEgUkVBTF9WQUxVRV9UWVBFIG9uIHRoZW0uICBUaGlzIGNvdWxkIGJlCisgICBhcyBtYW55IGFzIGZvdXIgKDMyLWJpdCBIT1NUX1dJREVfSU5ULCAxMjgtYml0IFJFQUxfVkFMVUVfVFlQRSkuCisKKyAgIEEgbnVtYmVyIG9mIHBsYWNlcyBhc3N1bWUgdGhhdCB0aGVyZSBhcmUgYWx3YXlzIGF0IGxlYXN0IHR3byAndycKKyAgIHNsb3RzIGluIGEgQ09OU1RfRE9VQkxFLCBzbyB3ZSBwcm92aWRlIHRoZW0gZXZlbiBpZiBvbmUgd291bGQgc3VmZmljZS4gICovCisKKyNpZiBSRUFMX1dJRFRIID09IDEKKyMgZGVmaW5lIENPTlNUX0RPVUJMRV9GT1JNQVQJICJ3dyIKKyNlbHNlCisjIGlmIFJFQUxfV0lEVEggPT0gMgorIyAgZGVmaW5lIENPTlNUX0RPVUJMRV9GT1JNQVQJICJ3dyIKKyMgZWxzZQorIyAgaWYgUkVBTF9XSURUSCA9PSAzCisjICAgZGVmaW5lIENPTlNUX0RPVUJMRV9GT1JNQVQJICJ3d3ciCisjICBlbHNlCisjICAgaWYgUkVBTF9XSURUSCA9PSA0CisjICAgIGRlZmluZSBDT05TVF9ET1VCTEVfRk9STUFUCSAid3d3dyIKKyMgICBlbHNlCisjICAgIGlmIFJFQUxfV0lEVEggPT0gNQorIyAgICAgZGVmaW5lIENPTlNUX0RPVUJMRV9GT1JNQVQgInd3d3d3IgorIyAgICBlbHNlCisjICAgICBpZiBSRUFMX1dJRFRIID09IDYKKyMgICAgICBkZWZpbmUgQ09OU1RfRE9VQkxFX0ZPUk1BVCAid3d3d3d3IgorIyAgICAgZWxzZQorICAgICAgICNlcnJvciAiUkVBTF9XSURUSCA+IDYgbm90IHN1cHBvcnRlZCIKKyMgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBEZXNjcmliZXMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHNwZWNpZmljIHRhcmdldCBmb3JtYXQgaW4gdXNlLiAgKi8KK3N0cnVjdCByZWFsX2Zvcm1hdAoreworICAvKiBNb3ZlIHRvIGFuZCBmcm9tIHRoZSB0YXJnZXQgYnl0ZXMuICAqLworICB2b2lkICgqZW5jb2RlKSAoY29uc3Qgc3RydWN0IHJlYWxfZm9ybWF0ICosIGxvbmcgKiwKKwkJICBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKik7CisgIHZvaWQgKCpkZWNvZGUpIChjb25zdCBzdHJ1Y3QgcmVhbF9mb3JtYXQgKiwgUkVBTF9WQUxVRV9UWVBFICosCisJCSAgY29uc3QgbG9uZyAqKTsKKworICAvKiBUaGUgcmFkaXggb2YgdGhlIGV4cG9uZW50IGFuZCBkaWdpdHMgb2YgdGhlIHNpZ25pZmljYW5kLiAgKi8KKyAgaW50IGI7CisKKyAgLyogU2l6ZSBvZiB0aGUgc2lnbmlmaWNhbmQgaW4gZGlnaXRzIG9mIHJhZGl4IEIuICAqLworICBpbnQgcDsKKworICAvKiBTaXplIG9mIHRoZSBzaWduaWZpY2FudCBvZiBhIE5hTiwgaW4gZGlnaXRzIG9mIHJhZGl4IEIuICAqLworICBpbnQgcG5hbjsKKworICAvKiBUaGUgbWluaW11bSBuZWdhdGl2ZSBpbnRlZ2VyLCB4LCBzdWNoIHRoYXQgYioqKHgtMSkgaXMgbm9ybWFsaXplZC4gICovCisgIGludCBlbWluOworCisgIC8qIFRoZSBtYXhpbXVtIGludGVnZXIsIHgsIHN1Y2ggdGhhdCBiKiooeC0xKSBpcyByZXByZXNlbnRhYmxlLiAgKi8KKyAgaW50IGVtYXg7CisKKyAgLyogVGhlIGJpdCBwb3NpdGlvbiBvZiB0aGUgc2lnbiBiaXQsIGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIGEgdmFsdWUKKyAgICAgaXMgcG9zaXRpdmUvbmVnYXRpdmUsIG9yIC0xIGZvciBhIGNvbXBsZXggZW5jb2RpbmcuICAqLworICBpbnQgc2lnbmJpdF9ybzsKKworICAvKiBUaGUgYml0IHBvc2l0aW9uIG9mIHRoZSBzaWduIGJpdCwgZm9yIGNoYW5naW5nIHRoZSBzaWduIG9mIGEgbnVtYmVyLAorICAgICBvciAtMSBmb3IgYSBjb21wbGV4IGVuY29kaW5nLiAgKi8KKyAgaW50IHNpZ25iaXRfcnc7CisKKyAgLyogRGVmYXVsdCByb3VuZGluZyBtb2RlIGZvciBvcGVyYXRpb25zIG9uIHRoaXMgZm9ybWF0LiAgKi8KKyAgYm9vbCByb3VuZF90b3dhcmRzX3plcm87CisgIGJvb2wgaGFzX3NpZ25fZGVwZW5kZW50X3JvdW5kaW5nOworCisgIC8qIFByb3BlcnRpZXMgb2YgdGhlIGZvcm1hdC4gICovCisgIGJvb2wgaGFzX25hbnM7CisgIGJvb2wgaGFzX2luZjsKKyAgYm9vbCBoYXNfZGVub3JtOworICBib29sIGhhc19zaWduZWRfemVybzsKKyAgYm9vbCBxbmFuX21zYl9zZXQ7CisgIGJvb2wgY2Fub25pY2FsX25hbl9sc2JzX3NldDsKK307CisKKworLyogVGhlIHRhcmdldCBmb3JtYXQgdXNlZCBmb3IgZWFjaCBmbG9hdGluZyBwb2ludCBtb2RlLgorICAgRmxvYXQgbW9kZXMgYXJlIGZvbGxvd2VkIGJ5IGRlY2ltYWwgZmxvYXQgbW9kZXMsIHdpdGggZW50cmllcyBmb3IKKyAgIGZsb2F0IG1vZGVzIGluZGV4ZWQgYnkgKE1PREUgLSBmaXJzdCBmbG9hdCBtb2RlKSwgYW5kIGVudHJpZXMgZm9yCisgICBkZWNpbWFsIGZsb2F0IG1vZGVzIGluZGV4ZWQgYnkgKE1PREUgLSBmaXJzdCBkZWNpbWFsIGZsb2F0IG1vZGUpICsKKyAgIHRoZSBudW1iZXIgb2YgZmxvYXQgbW9kZXMuICAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWFsX2Zvcm1hdCAqCisgIHJlYWxfZm9ybWF0X2Zvcl9tb2RlW01BWF9NT0RFX0ZMT0FUIC0gTUlOX01PREVfRkxPQVQgKyAxCisJCSAgICAgICArIE1BWF9NT0RFX0RFQ0lNQUxfRkxPQVQgLSBNSU5fTU9ERV9ERUNJTUFMX0ZMT0FUICsgMV07CisKKyNkZWZpbmUgUkVBTF9NT0RFX0ZPUk1BVChNT0RFKQkJCQkJCVwKKyAgKHJlYWxfZm9ybWF0X2Zvcl9tb2RlW0RFQ0lNQUxfRkxPQVRfTU9ERV9QIChNT0RFKQkJCVwKKwkJCT8gKCgoTU9ERSkgLSBNSU5fTU9ERV9ERUNJTUFMX0ZMT0FUKQkJXAorCQkJICAgKyAoTUFYX01PREVfRkxPQVQgLSBNSU5fTU9ERV9GTE9BVCArIDEpKQlcCisJCQk6ICgoTU9ERSkgLSBNSU5fTU9ERV9GTE9BVCldKQorCisjZGVmaW5lIEZMT0FUX01PREVfRk9STUFUKE1PREUpIFwKKyAgKFJFQUxfTU9ERV9GT1JNQVQgKFNDQUxBUl9GTE9BVF9NT0RFX1AgKE1PREUpPyAoTU9ERSkgXAorCQkJCQkgICAgICAgOiBHRVRfTU9ERV9JTk5FUiAoTU9ERSkpKQorCisvKiBUaGUgZm9sbG93aW5nIG1hY3JvIGRldGVybWluZXMgd2hldGhlciB0aGUgZmxvYXRpbmcgcG9pbnQgZm9ybWF0IGlzCisgICBjb21wb3NpdGUsIGkuZS4gbWF5IGNvbnRhaW4gbm9uLWNvbnNlY3V0aXZlIG1hbnRpc3NhIGJpdHMsIGluIHdoaWNoCisgICBjYXNlIGNvbXBpbGUtdGltZSBGUCBvdmVyZmxvdyBtYXkgbm90IG1vZGVsIHJ1bi10aW1lIG92ZXJmbG93LiAgKi8KKyNkZWZpbmUgTU9ERV9DT01QT1NJVEVfUChNT0RFKSBcCisgIChGTE9BVF9NT0RFX1AgKE1PREUpIFwKKyAgICYmIEZMT0FUX01PREVfRk9STUFUIChNT0RFKS0+cG5hbiA8IEZMT0FUX01PREVfRk9STUFUIChNT0RFKS0+cCkKKworLyogQWNjZXNzb3IgbWFjcm9zIGZvciBmb3JtYXQgcHJvcGVydGllcy4gICovCisjZGVmaW5lIE1PREVfSEFTX05BTlMoTU9ERSkgXAorICAoRkxPQVRfTU9ERV9QIChNT0RFKSAmJiBGTE9BVF9NT0RFX0ZPUk1BVCAoTU9ERSktPmhhc19uYW5zKQorI2RlZmluZSBNT0RFX0hBU19JTkZJTklUSUVTKE1PREUpIFwKKyAgKEZMT0FUX01PREVfUCAoTU9ERSkgJiYgRkxPQVRfTU9ERV9GT1JNQVQgKE1PREUpLT5oYXNfaW5mKQorI2RlZmluZSBNT0RFX0hBU19TSUdORURfWkVST1MoTU9ERSkgXAorICAoRkxPQVRfTU9ERV9QIChNT0RFKSAmJiBGTE9BVF9NT0RFX0ZPUk1BVCAoTU9ERSktPmhhc19zaWduZWRfemVybykKKyNkZWZpbmUgTU9ERV9IQVNfU0lHTl9ERVBFTkRFTlRfUk9VTkRJTkcoTU9ERSkgXAorICAoRkxPQVRfTU9ERV9QIChNT0RFKSBcCisgICAmJiBGTE9BVF9NT0RFX0ZPUk1BVCAoTU9ERSktPmhhc19zaWduX2RlcGVuZGVudF9yb3VuZGluZykKKworLyogVHJ1ZSBpZiB0aGUgZ2l2ZW4gbW9kZSBoYXMgYSBOYU4gcmVwcmVzZW50YXRpb24gYW5kIHRoZSB0cmVhdG1lbnQgb2YKKyAgIE5hTiBvcGVyYW5kcyBpcyBpbXBvcnRhbnQuICBDZXJ0YWluIG9wdGltaXphdGlvbnMsIHN1Y2ggYXMgZm9sZGluZworICAgeCAqIDAgaW50byAwLCBhcmUgbm90IGNvcnJlY3QgZm9yIE5hTiBvcGVyYW5kcywgYW5kIGFyZSBub3JtYWxseQorICAgZGlzYWJsZWQgZm9yIG1vZGVzIHdpdGggTmFOcy4gIFRoZSB1c2VyIGNhbiBhc2sgZm9yIHRoZW0gdG8gYmUKKyAgIGRvbmUgYW55d2F5IHVzaW5nIHRoZSAtZnVuc2FmZS1tYXRoLW9wdGltaXphdGlvbnMgc3dpdGNoLiAgKi8KKyNkZWZpbmUgSE9OT1JfTkFOUyhNT0RFKSBcCisgIChNT0RFX0hBU19OQU5TIChNT0RFKSAmJiAhZmxhZ19maW5pdGVfbWF0aF9vbmx5KQorCisvKiBMaWtlIEhPTk9SX05BTnMsIGJ1dCB0cnVlIGlmIHdlIGhvbm9yIHNpZ25hbGluZyBOYU5zIChvciBzTmFOcykuICAqLworI2RlZmluZSBIT05PUl9TTkFOUyhNT0RFKSAoZmxhZ19zaWduYWxpbmdfbmFucyAmJiBIT05PUl9OQU5TIChNT0RFKSkKKworLyogQXMgZm9yIEhPTk9SX05BTlMsIGJ1dCB0cnVlIGlmIHRoZSBtb2RlIGNhbiByZXByZXNlbnQgaW5maW5pdHkgYW5kCisgICB0aGUgdHJlYXRtZW50IG9mIGluZmluaXRlIHZhbHVlcyBpcyBpbXBvcnRhbnQuICAqLworI2RlZmluZSBIT05PUl9JTkZJTklUSUVTKE1PREUpIFwKKyAgKE1PREVfSEFTX0lORklOSVRJRVMgKE1PREUpICYmICFmbGFnX2Zpbml0ZV9tYXRoX29ubHkpCisKKy8qIExpa2UgSE9OT1JfTkFOUywgYnV0IHRydWUgaWYgdGhlIGdpdmVuIG1vZGUgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuCisgICBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgemVybywgYW5kIHRoZSBzaWduIG9mIHplcm8gaXMgaW1wb3J0YW50LiAgKi8KKyNkZWZpbmUgSE9OT1JfU0lHTkVEX1pFUk9TKE1PREUpIFwKKyAgKE1PREVfSEFTX1NJR05FRF9aRVJPUyAoTU9ERSkgJiYgZmxhZ19zaWduZWRfemVyb3MpCisKKy8qIExpa2UgSE9OT1JfTkFOUywgYnV0IHRydWUgaWYgZ2l2ZW4gbW9kZSBzdXBwb3J0cyBzaWduLWRlcGVuZGVudCByb3VuZGluZywKKyAgIGFuZCB0aGUgcm91bmRpbmcgbW9kZSBpcyBpbXBvcnRhbnQuICAqLworI2RlZmluZSBIT05PUl9TSUdOX0RFUEVOREVOVF9ST1VORElORyhNT0RFKSBcCisgIChNT0RFX0hBU19TSUdOX0RFUEVOREVOVF9ST1VORElORyAoTU9ERSkgJiYgZmxhZ19yb3VuZGluZ19tYXRoKQorCisvKiBEZWNsYXJlIGZ1bmN0aW9ucyBpbiByZWFsLmMuICAqLworCisvKiBCaW5hcnkgb3IgdW5hcnkgYXJpdGhtZXRpYyBvbiB0cmVlX2NvZGUuICAqLworZXh0ZXJuIGJvb2wgcmVhbF9hcml0aG1ldGljIChSRUFMX1ZBTFVFX1RZUEUgKiwgaW50LCBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKiwKKwkJCSAgICAgY29uc3QgUkVBTF9WQUxVRV9UWVBFICopOworCisvKiBDb21wYXJlIHJlYWxzIGJ5IHRyZWVfY29kZS4gICovCitleHRlcm4gYm9vbCByZWFsX2NvbXBhcmUgKGludCwgY29uc3QgUkVBTF9WQUxVRV9UWVBFICosIGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqKTsKKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgYSBmbG9hdGluZy1wb2ludCB2YWx1ZSBYIGlzIGluZmluaXRlLiAgKi8KK2V4dGVybiBib29sIHJlYWxfaXNpbmYgKGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqKTsKKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgYSBmbG9hdGluZy1wb2ludCB2YWx1ZSBYIGlzIGEgTmFOLiAgKi8KK2V4dGVybiBib29sIHJlYWxfaXNuYW4gKGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqKTsKKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgYSBmbG9hdGluZy1wb2ludCB2YWx1ZSBYIGlzIGZpbml0ZS4gICovCitleHRlcm4gYm9vbCByZWFsX2lzZmluaXRlIChjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKik7CisKKy8qIERldGVybWluZSB3aGV0aGVyIGEgZmxvYXRpbmctcG9pbnQgdmFsdWUgWCBpcyBuZWdhdGl2ZS4gICovCitleHRlcm4gYm9vbCByZWFsX2lzbmVnIChjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKik7CisKKy8qIERldGVybWluZSB3aGV0aGVyIGEgZmxvYXRpbmctcG9pbnQgdmFsdWUgWCBpcyBtaW51cyB6ZXJvLiAgKi8KK2V4dGVybiBib29sIHJlYWxfaXNuZWd6ZXJvIChjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKik7CisKKy8qIENvbXBhcmUgdHdvIGZsb2F0aW5nLXBvaW50IG9iamVjdHMgZm9yIGJpdHdpc2UgaWRlbnRpdHkuICAqLworZXh0ZXJuIGJvb2wgcmVhbF9pZGVudGljYWwgKGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqLCBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKik7CisKKy8qIEV4dGVuZCBvciB0cnVuY2F0ZSB0byBhIG5ldyBtb2RlLiAgKi8KK2V4dGVybiB2b2lkIHJlYWxfY29udmVydCAoUkVBTF9WQUxVRV9UWVBFICosIGVudW0gbWFjaGluZV9tb2RlLAorCQkJICBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKik7CisKKy8qIFJldHVybiB0cnVlIGlmIHRydW5jYXRpbmcgdG8gTkVXIGlzIGV4YWN0LiAgKi8KK2V4dGVybiBib29sIGV4YWN0X3JlYWxfdHJ1bmNhdGUgKGVudW0gbWFjaGluZV9tb2RlLCBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKik7CisKKy8qIFJlbmRlciBSIGFzIGEgZGVjaW1hbCBmbG9hdGluZyBwb2ludCBjb25zdGFudC4gICovCitleHRlcm4gdm9pZCByZWFsX3RvX2RlY2ltYWwgKGNoYXIgKiwgY29uc3QgUkVBTF9WQUxVRV9UWVBFICosIHNpemVfdCwKKwkJCSAgICAgc2l6ZV90LCBpbnQpOworCisvKiBSZW5kZXIgUiBhcyBhIGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgY29uc3RhbnQsIHJvdW5kZWQgc28gYXMgdG8gYmUKKyAgIHBhcnNlZCBiYWNrIHRvIHRoZSBzYW1lIHZhbHVlIHdoZW4gaW50ZXJwcmV0ZWQgaW4gbW9kZSBNT0RFLiAgKi8KK2V4dGVybiB2b2lkIHJlYWxfdG9fZGVjaW1hbF9mb3JfbW9kZSAoY2hhciAqLCBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKiwgc2l6ZV90LAorCQkJCSAgICAgIHNpemVfdCwgaW50LCBlbnVtIG1hY2hpbmVfbW9kZSk7CisKKy8qIFJlbmRlciBSIGFzIGEgaGV4YWRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgY29uc3RhbnQuICAqLworZXh0ZXJuIHZvaWQgcmVhbF90b19oZXhhZGVjaW1hbCAoY2hhciAqLCBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKiwKKwkJCQkgc2l6ZV90LCBzaXplX3QsIGludCk7CisKKy8qIFJlbmRlciBSIGFzIGFuIGludGVnZXIuICAqLworZXh0ZXJuIEhPU1RfV0lERV9JTlQgcmVhbF90b19pbnRlZ2VyIChjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKik7CitleHRlcm4gdm9pZCByZWFsX3RvX2ludGVnZXIyIChIT1NUX1dJREVfSU5UICosIEhPU1RfV0lERV9JTlQgKiwKKwkJCSAgICAgIGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqKTsKKworLyogSW5pdGlhbGl6ZSBSIGZyb20gYSBkZWNpbWFsIG9yIGhleGFkZWNpbWFsIHN0cmluZy4gIFJldHVybiAtMSBpZgorICAgdGhlIHZhbHVlIHVuZGVyZmxvd3MsICsxIGlmIG92ZXJmbG93cywgYW5kIDAgb3RoZXJ3aXNlLiAgKi8KK2V4dGVybiBpbnQgcmVhbF9mcm9tX3N0cmluZyAoUkVBTF9WQUxVRV9UWVBFICosIGNvbnN0IGNoYXIgKik7CisvKiBXcmFwcGVyIHRvIGFsbG93IGRpZmZlcmVudCBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBmb3IgZGVjaW1hbCBmbG9hdHMuICovCitleHRlcm4gdm9pZCByZWFsX2Zyb21fc3RyaW5nMyAoUkVBTF9WQUxVRV9UWVBFICosIGNvbnN0IGNoYXIgKiwgZW51bSBtYWNoaW5lX21vZGUpOworCisvKiBJbml0aWFsaXplIFIgZnJvbSBhbiBpbnRlZ2VyIHBhaXIgSElHSC9MT1cuICAqLworZXh0ZXJuIHZvaWQgcmVhbF9mcm9tX2ludGVnZXIgKFJFQUxfVkFMVUVfVFlQRSAqLCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCSAgICAgICB1bnNpZ25lZCBIT1NUX1dJREVfSU5ULCBIT1NUX1dJREVfSU5ULCBpbnQpOworCitleHRlcm4gbG9uZyByZWFsX3RvX3RhcmdldF9mbXQgKGxvbmcgKiwgY29uc3QgUkVBTF9WQUxVRV9UWVBFICosCisJCQkJY29uc3Qgc3RydWN0IHJlYWxfZm9ybWF0ICopOworZXh0ZXJuIGxvbmcgcmVhbF90b190YXJnZXQgKGxvbmcgKiwgY29uc3QgUkVBTF9WQUxVRV9UWVBFICosIGVudW0gbWFjaGluZV9tb2RlKTsKKworZXh0ZXJuIHZvaWQgcmVhbF9mcm9tX3RhcmdldF9mbXQgKFJFQUxfVkFMVUVfVFlQRSAqLCBjb25zdCBsb25nICosCisJCQkJICBjb25zdCBzdHJ1Y3QgcmVhbF9mb3JtYXQgKik7CitleHRlcm4gdm9pZCByZWFsX2Zyb21fdGFyZ2V0IChSRUFMX1ZBTFVFX1RZUEUgKiwgY29uc3QgbG9uZyAqLAorCQkJICAgICAgZW51bSBtYWNoaW5lX21vZGUpOworCitleHRlcm4gdm9pZCByZWFsX2luZiAoUkVBTF9WQUxVRV9UWVBFICopOworCitleHRlcm4gYm9vbCByZWFsX25hbiAoUkVBTF9WQUxVRV9UWVBFICosIGNvbnN0IGNoYXIgKiwgaW50LCBlbnVtIG1hY2hpbmVfbW9kZSk7CisKK2V4dGVybiB2b2lkIHJlYWxfbWF4dmFsIChSRUFMX1ZBTFVFX1RZUEUgKiwgaW50LCBlbnVtIG1hY2hpbmVfbW9kZSk7CisKK2V4dGVybiB2b2lkIHJlYWxfMmV4cE4gKFJFQUxfVkFMVUVfVFlQRSAqLCBpbnQsIGVudW0gbWFjaGluZV9tb2RlKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCByZWFsX2hhc2ggKGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqKTsKKworCisvKiBUYXJnZXQgZm9ybWF0cyBkZWZpbmVkIGluIHJlYWwuYy4gICovCitleHRlcm4gY29uc3Qgc3RydWN0IHJlYWxfZm9ybWF0IGllZWVfc2luZ2xlX2Zvcm1hdDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVhbF9mb3JtYXQgbWlwc19zaW5nbGVfZm9ybWF0OworZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWFsX2Zvcm1hdCBtb3Rvcm9sYV9zaW5nbGVfZm9ybWF0OworZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWFsX2Zvcm1hdCBzcHVfc2luZ2xlX2Zvcm1hdDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVhbF9mb3JtYXQgaWVlZV9kb3VibGVfZm9ybWF0OworZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWFsX2Zvcm1hdCBtaXBzX2RvdWJsZV9mb3JtYXQ7CitleHRlcm4gY29uc3Qgc3RydWN0IHJlYWxfZm9ybWF0IG1vdG9yb2xhX2RvdWJsZV9mb3JtYXQ7CitleHRlcm4gY29uc3Qgc3RydWN0IHJlYWxfZm9ybWF0IGllZWVfZXh0ZW5kZWRfbW90b3JvbGFfZm9ybWF0OworZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWFsX2Zvcm1hdCBpZWVlX2V4dGVuZGVkX2ludGVsXzk2X2Zvcm1hdDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVhbF9mb3JtYXQgaWVlZV9leHRlbmRlZF9pbnRlbF85Nl9yb3VuZF81M19mb3JtYXQ7CitleHRlcm4gY29uc3Qgc3RydWN0IHJlYWxfZm9ybWF0IGllZWVfZXh0ZW5kZWRfaW50ZWxfMTI4X2Zvcm1hdDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVhbF9mb3JtYXQgaWJtX2V4dGVuZGVkX2Zvcm1hdDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVhbF9mb3JtYXQgbWlwc19leHRlbmRlZF9mb3JtYXQ7CitleHRlcm4gY29uc3Qgc3RydWN0IHJlYWxfZm9ybWF0IGllZWVfcXVhZF9mb3JtYXQ7CitleHRlcm4gY29uc3Qgc3RydWN0IHJlYWxfZm9ybWF0IG1pcHNfcXVhZF9mb3JtYXQ7CitleHRlcm4gY29uc3Qgc3RydWN0IHJlYWxfZm9ybWF0IHZheF9mX2Zvcm1hdDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVhbF9mb3JtYXQgdmF4X2RfZm9ybWF0OworZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWFsX2Zvcm1hdCB2YXhfZ19mb3JtYXQ7CitleHRlcm4gY29uc3Qgc3RydWN0IHJlYWxfZm9ybWF0IHJlYWxfaW50ZXJuYWxfZm9ybWF0OworZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWFsX2Zvcm1hdCBkZWNpbWFsX3NpbmdsZV9mb3JtYXQ7CitleHRlcm4gY29uc3Qgc3RydWN0IHJlYWxfZm9ybWF0IGRlY2ltYWxfZG91YmxlX2Zvcm1hdDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVhbF9mb3JtYXQgZGVjaW1hbF9xdWFkX2Zvcm1hdDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVhbF9mb3JtYXQgaWVlZV9oYWxmX2Zvcm1hdDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVhbF9mb3JtYXQgYXJtX2hhbGZfZm9ybWF0OworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qIENyYXAuICAqLworCisjZGVmaW5lIFJFQUxfQVJJVEhNRVRJQyh2YWx1ZSwgY29kZSwgZDEsIGQyKSBcCisgIHJlYWxfYXJpdGhtZXRpYyAoJih2YWx1ZSksIGNvZGUsICYoZDEpLCAmKGQyKSkKKworI2RlZmluZSBSRUFMX1ZBTFVFU19JREVOVElDQUwoeCwgeSkJcmVhbF9pZGVudGljYWwgKCYoeCksICYoeSkpCisjZGVmaW5lIFJFQUxfVkFMVUVTX0VRVUFMKHgsIHkpCQlyZWFsX2NvbXBhcmUgKEVRX0VYUFIsICYoeCksICYoeSkpCisjZGVmaW5lIFJFQUxfVkFMVUVTX0xFU1MoeCwgeSkJCXJlYWxfY29tcGFyZSAoTFRfRVhQUiwgJih4KSwgJih5KSkKKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgYSBmbG9hdGluZy1wb2ludCB2YWx1ZSBYIGlzIGluZmluaXRlLiAgKi8KKyNkZWZpbmUgUkVBTF9WQUxVRV9JU0lORih4KQkJcmVhbF9pc2luZiAoJih4KSkKKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgYSBmbG9hdGluZy1wb2ludCB2YWx1ZSBYIGlzIGEgTmFOLiAgKi8KKyNkZWZpbmUgUkVBTF9WQUxVRV9JU05BTih4KQkJcmVhbF9pc25hbiAoJih4KSkKKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgYSBmbG9hdGluZy1wb2ludCB2YWx1ZSBYIGlzIG5lZ2F0aXZlLiAgKi8KKyNkZWZpbmUgUkVBTF9WQUxVRV9ORUdBVElWRSh4KQkJcmVhbF9pc25lZyAoJih4KSkKKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgYSBmbG9hdGluZy1wb2ludCB2YWx1ZSBYIGlzIG1pbnVzIHplcm8uICAqLworI2RlZmluZSBSRUFMX1ZBTFVFX01JTlVTX1pFUk8oeCkJcmVhbF9pc25lZ3plcm8gKCYoeCkpCisKKy8qIElOIGlzIGEgUkVBTF9WQUxVRV9UWVBFLiAgT1VUIGlzIGFuIGFycmF5IG9mIGxvbmdzLiAgKi8KKyNkZWZpbmUgUkVBTF9WQUxVRV9UT19UQVJHRVRfTE9OR19ET1VCTEUoSU4sIE9VVCkJCQlcCisgIHJlYWxfdG9fdGFyZ2V0IChPVVQsICYoSU4pLAkJCQkJCVwKKwkJICBtb2RlX2Zvcl9zaXplIChMT05HX0RPVUJMRV9UWVBFX1NJWkUsIE1PREVfRkxPQVQsIDApKQorCisjZGVmaW5lIFJFQUxfVkFMVUVfVE9fVEFSR0VUX0RPVUJMRShJTiwgT1VUKSBcCisgIHJlYWxfdG9fdGFyZ2V0IChPVVQsICYoSU4pLCBtb2RlX2Zvcl9zaXplICg2NCwgTU9ERV9GTE9BVCwgMCkpCisKKy8qIElOIGlzIGEgUkVBTF9WQUxVRV9UWVBFLiAgT1VUIGlzIGEgbG9uZy4gICovCisjZGVmaW5lIFJFQUxfVkFMVUVfVE9fVEFSR0VUX1NJTkdMRShJTiwgT1VUKSBcCisgICgoT1VUKSA9IHJlYWxfdG9fdGFyZ2V0IChOVUxMLCAmKElOKSwgbW9kZV9mb3Jfc2l6ZSAoMzIsIE1PREVfRkxPQVQsIDApKSkKKworI2RlZmluZSBSRUFMX1ZBTFVFX0ZST01fSU5UKHIsIGxvLCBoaSwgbW9kZSkgXAorICByZWFsX2Zyb21faW50ZWdlciAoJihyKSwgbW9kZSwgbG8sIGhpLCAwKQorCisjZGVmaW5lIFJFQUxfVkFMVUVfRlJPTV9VTlNJR05FRF9JTlQociwgbG8sIGhpLCBtb2RlKSBcCisgIHJlYWxfZnJvbV9pbnRlZ2VyICgmKHIpLCBtb2RlLCBsbywgaGksIDEpCisKKy8qIFJlYWwgdmFsdWVzIHRvIElFRUUgNzU0IGRlY2ltYWwgZmxvYXRzLiAgKi8KKworLyogSU4gaXMgYSBSRUFMX1ZBTFVFX1RZUEUuICBPVVQgaXMgYW4gYXJyYXkgb2YgbG9uZ3MuICAqLworI2RlZmluZSBSRUFMX1ZBTFVFX1RPX1RBUkdFVF9ERUNJTUFMMTI4KElOLCBPVVQpIFwKKyAgcmVhbF90b190YXJnZXQgKE9VVCwgJihJTiksIG1vZGVfZm9yX3NpemUgKDEyOCwgTU9ERV9ERUNJTUFMX0ZMT0FULCAwKSkKKworI2RlZmluZSBSRUFMX1ZBTFVFX1RPX1RBUkdFVF9ERUNJTUFMNjQoSU4sIE9VVCkgXAorICByZWFsX3RvX3RhcmdldCAoT1VULCAmKElOKSwgbW9kZV9mb3Jfc2l6ZSAoNjQsIE1PREVfREVDSU1BTF9GTE9BVCwgMCkpCisKKy8qIElOIGlzIGEgUkVBTF9WQUxVRV9UWVBFLiAgT1VUIGlzIGEgbG9uZy4gICovCisjZGVmaW5lIFJFQUxfVkFMVUVfVE9fVEFSR0VUX0RFQ0lNQUwzMihJTiwgT1VUKSBcCisgICgoT1VUKSA9IHJlYWxfdG9fdGFyZ2V0IChOVUxMLCAmKElOKSwgbW9kZV9mb3Jfc2l6ZSAoMzIsIE1PREVfREVDSU1BTF9GTE9BVCwgMCkpKQorCitleHRlcm4gUkVBTF9WQUxVRV9UWVBFIHJlYWxfdmFsdWVfdHJ1bmNhdGUgKGVudW0gbWFjaGluZV9tb2RlLAorCQkJCQkgICAgUkVBTF9WQUxVRV9UWVBFKTsKKworI2RlZmluZSBSRUFMX1ZBTFVFX1RPX0lOVChwbG93LCBwaGlnaCwgcikgXAorICByZWFsX3RvX2ludGVnZXIyIChwbG93LCBwaGlnaCwgJihyKSkKKworZXh0ZXJuIFJFQUxfVkFMVUVfVFlQRSByZWFsX2FyaXRobWV0aWMyIChpbnQsIGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqLAorCQkJCQkgY29uc3QgUkVBTF9WQUxVRV9UWVBFICopOworCisjZGVmaW5lIFJFQUxfVkFMVUVfTkVHQVRFKFgpIFwKKyAgcmVhbF9hcml0aG1ldGljMiAoTkVHQVRFX0VYUFIsICYoWCksIE5VTEwpCisKKyNkZWZpbmUgUkVBTF9WQUxVRV9BQlMoWCkgXAorICByZWFsX2FyaXRobWV0aWMyIChBQlNfRVhQUiwgJihYKSwgTlVMTCkKKworZXh0ZXJuIGludCBzaWduaWZpY2FuZF9zaXplIChlbnVtIG1hY2hpbmVfbW9kZSk7CisKK2V4dGVybiBSRUFMX1ZBTFVFX1RZUEUgcmVhbF9mcm9tX3N0cmluZzIgKGNvbnN0IGNoYXIgKiwgZW51bSBtYWNoaW5lX21vZGUpOworCisjZGVmaW5lIFJFQUxfVkFMVUVfQVRPRihzLCBtKSBcCisgIHJlYWxfZnJvbV9zdHJpbmcyIChzLCBtKQorCisjZGVmaW5lIENPTlNUX0RPVUJMRV9BVE9GKHMsIG0pIFwKKyAgQ09OU1RfRE9VQkxFX0ZST01fUkVBTF9WQUxVRSAocmVhbF9mcm9tX3N0cmluZzIgKHMsIG0pLCBtKQorCisjZGVmaW5lIFJFQUxfVkFMVUVfRklYKHIpIFwKKyAgcmVhbF90b19pbnRlZ2VyICgmKHIpKQorCisvKiA/Pz8gTm90IHF1aXRlIHJpZ2h0LiAgKi8KKyNkZWZpbmUgUkVBTF9WQUxVRV9VTlNJR05FRF9GSVgocikgXAorICByZWFsX3RvX2ludGVnZXIgKCYocikpCisKKy8qID8/PyBUaGVzZSB3ZXJlIGFkZGVkIGZvciBQYXJhbm9pYSBzdXBwb3J0LiAgKi8KKworLyogUmV0dXJuIGZsb29yIGxvZzIoUikuICAqLworZXh0ZXJuIGludCByZWFsX2V4cG9uZW50IChjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKik7CisKKy8qIFIgPSBBICogMioqRVhQLiAgKi8KK2V4dGVybiB2b2lkIHJlYWxfbGRleHAgKFJFQUxfVkFMVUVfVFlQRSAqLCBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKiwgaW50KTsKKworLyogKioqKiBFbmQgb2Ygc29mdHdhcmUgZmxvYXRpbmcgcG9pbnQgZW11bGF0b3IgaW50ZXJmYWNlIG1hY3JvcyAqKioqICovCisMCisvKiBDb25zdGFudCByZWFsIHZhbHVlcyAwLCAxLCAyLCAtMSBhbmQgMC41LiAgKi8KKworZXh0ZXJuIFJFQUxfVkFMVUVfVFlQRSBkY29uc3QwOworZXh0ZXJuIFJFQUxfVkFMVUVfVFlQRSBkY29uc3QxOworZXh0ZXJuIFJFQUxfVkFMVUVfVFlQRSBkY29uc3QyOworZXh0ZXJuIFJFQUxfVkFMVUVfVFlQRSBkY29uc3RtMTsKK2V4dGVybiBSRUFMX1ZBTFVFX1RZUEUgZGNvbnN0aGFsZjsKKworI2RlZmluZSBkY29uc3RfZSgpICAoKmRjb25zdF9lX3B0ciAoKSkKKyNkZWZpbmUgZGNvbnN0X3RoaXJkKCkgICgqZGNvbnN0X3RoaXJkX3B0ciAoKSkKKyNkZWZpbmUgZGNvbnN0X3NxcnQyKCkgICgqZGNvbnN0X3NxcnQyX3B0ciAoKSkKKworLyogRnVuY3Rpb24gdG8gcmV0dXJuIHRoZSByZWFsIHZhbHVlIHNwZWNpYWwgY29uc3RhbnQgJ2UnLiAgKi8KK2V4dGVybiBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKiBkY29uc3RfZV9wdHIgKHZvaWQpOworCisvKiBSZXR1cm5zIHRoZSBzcGVjaWFsIFJFQUxfVkFMVUVfVFlQRSBjb3JyZXNwb25kaW5nIHRvIDEvMy4gICovCitleHRlcm4gY29uc3QgUkVBTF9WQUxVRV9UWVBFICogZGNvbnN0X3RoaXJkX3B0ciAodm9pZCk7CisKKy8qIFJldHVybnMgdGhlIHNwZWNpYWwgUkVBTF9WQUxVRV9UWVBFIGNvcnJlc3BvbmRpbmcgdG8gc3FydCgyKS4gICovCitleHRlcm4gY29uc3QgUkVBTF9WQUxVRV9UWVBFICogZGNvbnN0X3NxcnQyX3B0ciAodm9pZCk7CisKKy8qIEZ1bmN0aW9uIHRvIHJldHVybiBhIHJlYWwgdmFsdWUgKG5vdCBhIHRyZWUgbm9kZSkKKyAgIGZyb20gYSBnaXZlbiBpbnRlZ2VyIGNvbnN0YW50LiAgKi8KK1JFQUxfVkFMVUVfVFlQRSByZWFsX3ZhbHVlX2Zyb21faW50X2NzdCAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CisKKy8qIEdpdmVuIGEgQ09OU1RfRE9VQkxFIGluIEZST00sIHN0b3JlIGludG8gVE8gdGhlIHZhbHVlIGl0IHJlcHJlc2VudHMuICAqLworI2RlZmluZSBSRUFMX1ZBTFVFX0ZST01fQ09OU1RfRE9VQkxFKHRvLCBmcm9tKSBcCisgICgodG8pID0gKkNPTlNUX0RPVUJMRV9SRUFMX1ZBTFVFIChmcm9tKSkKKworLyogUmV0dXJuIGEgQ09OU1RfRE9VQkxFIHdpdGggdmFsdWUgUiBhbmQgbW9kZSBNLiAgKi8KKyNkZWZpbmUgQ09OU1RfRE9VQkxFX0ZST01fUkVBTF9WQUxVRShyLCBtKSBcCisgIGNvbnN0X2RvdWJsZV9mcm9tX3JlYWxfdmFsdWUgKHIsIG0pCitleHRlcm4gcnR4IGNvbnN0X2RvdWJsZV9mcm9tX3JlYWxfdmFsdWUgKFJFQUxfVkFMVUVfVFlQRSwgZW51bSBtYWNoaW5lX21vZGUpOworCisvKiBSZXBsYWNlIFIgYnkgMS9SIGluIHRoZSBnaXZlbiBtYWNoaW5lIG1vZGUsIGlmIHRoZSByZXN1bHQgaXMgZXhhY3QuICAqLworZXh0ZXJuIGJvb2wgZXhhY3RfcmVhbF9pbnZlcnNlIChlbnVtIG1hY2hpbmVfbW9kZSwgUkVBTF9WQUxVRV9UWVBFICopOworCisvKiBSZXR1cm4gdHJ1ZSBpZiBhcml0aG1ldGljIG9uIHZhbHVlcyBpbiBJTU9ERSB0aGF0IHdlcmUgcHJvbW90ZWQKKyAgIGZyb20gdmFsdWVzIGluIFRNT0RFIGlzIGVxdWl2YWxlbnQgdG8gZGlyZWN0IGFyaXRobWV0aWMgb24gdmFsdWVzCisgICBpbiBUTU9ERS4gICovCitib29sIHJlYWxfY2FuX3Nob3J0ZW5fYXJpdGhtZXRpYyAoZW51bSBtYWNoaW5lX21vZGUsIGVudW0gbWFjaGluZV9tb2RlKTsKKworLyogSW4gdHJlZS5jOiB3cmFwIHVwIGEgUkVBTF9WQUxVRV9UWVBFIGluIGEgdHJlZSBub2RlLiAgKi8KK2V4dGVybiB0cmVlIGJ1aWxkX3JlYWwgKHRyZWUsIFJFQUxfVkFMVUVfVFlQRSk7CisKKy8qIENhbGN1bGF0ZSBSIGFzIHRoZSBzcXVhcmUgcm9vdCBvZiBYIGluIHRoZSBnaXZlbiBtYWNoaW5lIG1vZGUuICAqLworZXh0ZXJuIGJvb2wgcmVhbF9zcXJ0IChSRUFMX1ZBTFVFX1RZUEUgKiwgZW51bSBtYWNoaW5lX21vZGUsCisJCSAgICAgICBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKik7CisKKy8qIENhbGN1bGF0ZSBSIGFzIFggcmFpc2VkIHRvIHRoZSBpbnRlZ2VyIGV4cG9uZW50IE4gaW4gbW9kZSBNT0RFLiAgKi8KK2V4dGVybiBib29sIHJlYWxfcG93aSAoUkVBTF9WQUxVRV9UWVBFICosIGVudW0gbWFjaGluZV9tb2RlLAorCQkgICAgICAgY29uc3QgUkVBTF9WQUxVRV9UWVBFICosIEhPU1RfV0lERV9JTlQpOworCisvKiBTdGFuZGFyZCByb3VuZCB0byBpbnRlZ2VyIHZhbHVlIGZ1bmN0aW9ucy4gICovCitleHRlcm4gdm9pZCByZWFsX3RydW5jIChSRUFMX1ZBTFVFX1RZUEUgKiwgZW51bSBtYWNoaW5lX21vZGUsCisJCQljb25zdCBSRUFMX1ZBTFVFX1RZUEUgKik7CitleHRlcm4gdm9pZCByZWFsX2Zsb29yIChSRUFMX1ZBTFVFX1RZUEUgKiwgZW51bSBtYWNoaW5lX21vZGUsCisJCQljb25zdCBSRUFMX1ZBTFVFX1RZUEUgKik7CitleHRlcm4gdm9pZCByZWFsX2NlaWwgKFJFQUxfVkFMVUVfVFlQRSAqLCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJICAgICAgIGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqKTsKK2V4dGVybiB2b2lkIHJlYWxfcm91bmQgKFJFQUxfVkFMVUVfVFlQRSAqLCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCWNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqKTsKKworLyogU2V0IHRoZSBzaWduIG9mIFIgdG8gdGhlIHNpZ24gb2YgWC4gICovCitleHRlcm4gdm9pZCByZWFsX2NvcHlzaWduIChSRUFMX1ZBTFVFX1RZUEUgKiwgY29uc3QgUkVBTF9WQUxVRV9UWVBFICopOworCisjaWZuZGVmIEdFTkVSQVRPUl9GSUxFCisvKiBDb252ZXJ0IGJldHdlZW4gTVBGUiBhbmQgUkVBTF9WQUxVRV9UWVBFLiAgVGhlIGNhbGxlciBpcworICAgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyBhbmQgY2xlYXJpbmcgdGhlIE1QRlIgcGFyYW1ldGVyLiAgKi8KKworZXh0ZXJuIHZvaWQgcmVhbF9mcm9tX21wZnIgKFJFQUxfVkFMVUVfVFlQRSAqLCBtcGZyX3NyY3B0ciwgdHJlZSwgbXBfcm5kX3QpOworZXh0ZXJuIHZvaWQgbXBmcl9mcm9tX3JlYWwgKG1wZnJfcHRyLCBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKiwgbXBfcm5kX3QpOworI2VuZGlmCisKKy8qIENoZWNrIHdoZXRoZXIgdGhlIHJlYWwgY29uc3RhbnQgdmFsdWUgZ2l2ZW4gaXMgYW4gaW50ZWdlci4gICovCitleHRlcm4gYm9vbCByZWFsX2lzaW50ZWdlciAoY29uc3QgUkVBTF9WQUxVRV9UWVBFICpjLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlKTsKKworLyogV3JpdGUgaW50byBCVUYgdGhlIG1heGltdW0gcmVwcmVzZW50YWJsZSBmaW5pdGUgZmxvYXRpbmctcG9pbnQKKyAgIG51bWJlciwgKDEgLSBiKiotcCkgKiBiKiplbWF4IGZvciBhIGdpdmVuIEZQIGZvcm1hdCBGTVQgYXMgYSBoZXgKKyAgIGZsb2F0IHN0cmluZy4gIEJVRiBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBjb250YWluIHRoZSByZXN1bHQuICAqLworZXh0ZXJuIHZvaWQgZ2V0X21heF9mbG9hdCAoY29uc3Qgc3RydWN0IHJlYWxfZm9ybWF0ICosIGNoYXIgKiwgc2l6ZV90KTsKKyNlbmRpZiAvKiAhIEdDQ19SRUFMX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9yZWctbm90ZXMuZGVmIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3JlZy1ub3Rlcy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEyZGFlYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9yZWctbm90ZXMuZGVmCkBAIC0wLDAgKzEsMTkwIEBACisvKiBSZWdpc3RlciBub3RlIGRlZmluaXRpb25zLgorICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFRoaXMgZmlsZSBkZWZpbmVzIGFsbCB0aGUgY29kZXMgdGhhdCBtYXkgYXBwZWFyIG9uIGluZGl2aWR1YWwKKyAgIEVYUFJfTElTVCBydHhlcyBpbiB0aGUgUkVHX05PVEVTIGNoYWluIG9mIGFuIGluc24uICBUaGUgY29kZXMgYXJlCisgICBzdG9yZWQgaW4gdGhlIG1vZGUgZmllbGQgb2YgdGhlIEVYUFJfTElTVC4gIFNvdXJjZSBmaWxlcyBkZWZpbmUKKyAgIERFRl9SRUdfTk9URSBhcHByb3ByaWF0ZWx5IGJlZm9yZSBpbmNsdWRpbmcgdGhpcyBmaWxlLiAgKi8KKworLyogU2hvcnRoYW5kLiAgKi8KKyNkZWZpbmUgUkVHX05PVEUoTkFNRSkgREVGX1JFR19OT1RFIChSRUdfIyNOQU1FKQorCisvKiBSRUdfREVQX1RSVUUgaXMgdXNlZCBpbiBzY2hlZHVsZXIgZGVwZW5kZW5jaWVzIGxpc3RzIHRvIHJlcHJlc2VudCBhCisgICByZWFkLWFmdGVyLXdyaXRlIGRlcGVuZGVuY3kgKGkuZS4gYSB0cnVlIGRhdGEgZGVwZW5kZW5jeSkuICBUaGlzIGlzCisgICBoZXJlLCBub3QgZ3JvdXBlZCB3aXRoIFJFR19ERVBfQU5USSBhbmQgUkVHX0RFUF9PVVRQVVQsIGJlY2F1c2Ugc29tZQorICAgcGFzc2VzIHVzZSBhIGxpdGVyYWwgMCBmb3IgaXQuICAqLworUkVHX05PVEUgKERFUF9UUlVFKQorCisvKiBUaGUgdmFsdWUgaW4gUkVHIGRpZXMgaW4gdGhpcyBpbnNuIChpLmUuLCBpdCBpcyBub3QgbmVlZGVkIHBhc3QKKyAgIHRoaXMgaW5zbikuICBJZiBSRUcgaXMgc2V0IGluIHRoaXMgaW5zbiwgdGhlIFJFR19ERUFEIG5vdGUgbWF5LAorICAgYnV0IG5lZWQgbm90LCBiZSBvbWl0dGVkLiAgKi8KK1JFR19OT1RFIChERUFEKQorCisvKiBUaGUgUkVHIGlzIGF1dG9pbmNyZW1lbnRlZCBvciBhdXRvZGVjcmVtZW50ZWQgaW4gdGhpcyBpbnNuLiAgKi8KK1JFR19OT1RFIChJTkMpCisKKy8qIERlc2NyaWJlcyB0aGUgaW5zbiBhcyBhIHdob2xlOyBpdCBzYXlzIHRoYXQgdGhlIGluc24gc2V0cyBhCisgICByZWdpc3RlciB0byBhIGNvbnN0YW50IHZhbHVlIG9yIHRvIGJlIGVxdWl2YWxlbnQgdG8gYSBtZW1vcnkKKyAgIGFkZHJlc3MuICBJZiB0aGUgcmVnaXN0ZXIgaXMgc3BpbGxlZCB0byB0aGUgc3RhY2sgdGhlbiB0aGUgY29uc3RhbnQKKyAgIHZhbHVlIHNob3VsZCBiZSBzdWJzdGl0dXRlZCBmb3IgaXQuICBUaGUgY29udGVudHMgb2YgdGhlIFJFR19FUVVJVgorICAgaXMgdGhlIGNvbnN0YW50IHZhbHVlIG9yIG1lbW9yeSBhZGRyZXNzLCB3aGljaCBtYXkgYmUgZGlmZmVyZW50CisgICBmcm9tIHRoZSBzb3VyY2Ugb2YgdGhlIFNFVCBhbHRob3VnaCBpdCBoYXMgdGhlIHNhbWUgdmFsdWUuICBBCisgICBSRUdfRVFVSVYgbm90ZSBtYXkgYWxzbyBhcHBlYXIgb24gYW4gaW5zbiB3aGljaCBjb3BpZXMgYSByZWdpc3RlcgorICAgcGFyYW1ldGVyIHRvIGEgcHNldWRvLXJlZ2lzdGVyLCBpZiB0aGVyZSBpcyBhIG1lbW9yeSBhZGRyZXNzIHdoaWNoCisgICBjb3VsZCBiZSB1c2VkIHRvIGhvbGQgdGhhdCBwc2V1ZG8tcmVnaXN0ZXIgdGhyb3VnaG91dCB0aGUgZnVuY3Rpb24uICAqLworUkVHX05PVEUgKEVRVUlWKQorCisvKiBMaWtlIFJFR19FUVVJViBleGNlcHQgdGhhdCB0aGUgZGVzdGluYXRpb24gaXMgb25seSBtb21lbnRhcmlseQorICAgZXF1YWwgdG8gdGhlIHNwZWNpZmllZCBydHguICBUaGVyZWZvcmUsIGl0IGNhbm5vdCBiZSB1c2VkIGZvcgorICAgc3Vic3RpdHV0aW9uOyBidXQgaXQgY2FuIGJlIHVzZWQgZm9yIGNzZS4gICovCitSRUdfTk9URSAoRVFVQUwpCisKKy8qIFRoZSByZWdpc3RlciBpcyBhbHdheXMgbm9ubmVnYXRpdmUgZHVyaW5nIHRoZSBjb250YWluaW5nIGxvb3AuCisgICBUaGlzIGlzIHVzZWQgaW4gYnJhbmNoZXMgc28gdGhhdCBkZWNyZW1lbnQgYW5kIGJyYW5jaCBpbnN0cnVjdGlvbnMKKyAgIHRlcm1pbmF0aW5nIG9uIHplcm8gY2FuIGJlIG1hdGNoZWQuICBUaGVyZSBtdXN0IGJlIGFuIGluc24gcGF0dGVybgorICAgaW4gdGhlIG1kIGZpbGUgbmFtZWQgYGRlY3JlbWVudF9hbmRfYnJhbmNoX3VudGlsX3plcm8nIG9yIGVsc2UgdGhpcworICAgd2lsbCBuZXZlciBiZSBhZGRlZCB0byBhbnkgaW5zdHJ1Y3Rpb25zLiAgKi8KK1JFR19OT1RFIChOT05ORUcpCisKKy8qIElkZW50aWZpZXMgYSByZWdpc3RlciBzZXQgaW4gdGhpcyBpbnNuIGFuZCBuZXZlciB1c2VkLiAgKi8KK1JFR19OT1RFIChVTlVTRUQpCisKKy8qIFJFR19DQ19TRVRURVIgYW5kIFJFR19DQ19VU0VSIGxpbmsgYSBwYWlyIG9mIGluc25zIHRoYXQgc2V0IGFuZCB1c2UKKyAgIENDMCwgcmVzcGVjdGl2ZWx5LiAgTm9ybWFsbHksIHRoZXNlIGFyZSByZXF1aXJlZCB0byBiZSBjb25zZWN1dGl2ZQorICAgaW5zbnMsIGJ1dCB3ZSBwZXJtaXQgcHV0dGluZyBhIGNjMC1zZXR0aW5nIGluc24gaW4gdGhlIGRlbGF5IHNsb3QKKyAgIG9mIGEgYnJhbmNoIGFzIGxvbmcgYXMgb25seSBvbmUgY29weSBvZiB0aGUgaW5zbiBleGlzdHMuICBJbiB0aGF0CisgICBjYXNlLCB0aGVzZSBub3RlcyBwb2ludCBmcm9tIG9uZSB0byB0aGUgb3RoZXIgdG8gYWxsb3cgY29kZQorICAgZ2VuZXJhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCBhbnkgcmVxdWlyZSBpbmZvcm1hdGlvbiBhbmQgdG8KKyAgIHByb3Blcmx5IHVwZGF0ZSBDQ19TVEFUVVMuICBUaGVzZSBub3RlcyBhcmUgSU5TTl9MSVNUcy4gICovCitSRUdfTk9URSAoQ0NfU0VUVEVSKQorUkVHX05PVEUgKENDX1VTRVIpCisKKy8qIFBvaW50cyB0byBhIENPREVfTEFCRUwuICBVc2VkIGJ5IEpVTVBfSU5TTnMgdG8gc2F5IHRoYXQgdGhlIENPREVfTEFCRUwKKyAgIGNvbnRhaW5lZCBpbiB0aGUgUkVHX0xBQkVMX1RBUkdFVCBub3RlIGlzIGEgcG9zc2libGUganVtcCB0YXJnZXQgb2YKKyAgIHRoaXMgaW5zbi4gIFRoaXMgbm90ZSBpcyBhbiBJTlNOX0xJU1QuICAqLworUkVHX05PVEUgKExBQkVMX1RBUkdFVCkKKworLyogUG9pbnRzIHRvIGEgQ09ERV9MQUJFTC4gIFVzZWQgYnkgYW55IGluc24gdG8gc2F5IHRoYXQgdGhlIENPREVfTEFCRUwKKyAgIGNvbnRhaW5lZCBpbiB0aGUgUkVHX0xBQkVMX09QRVJBTkQgbm90ZSBpcyB1c2VkIGJ5IHRoZSBpbnNuLCBidXQgYXMgYW4KKyAgIG9wZXJhbmQsIG5vdCBhcyBhIGp1bXAgdGFyZ2V0ICh0aG91Z2ggaXQgbWF5IGluZGlyZWN0bHkgYmUgYSBqdW1wCisgICB0YXJnZXQgZm9yIGEgbGF0ZXIganVtcCBpbnNuKS4gIFRoaXMgbm90ZSBpcyBhbiBJTlNOX0xJU1QuICAqLworUkVHX05PVEUgKExBQkVMX09QRVJBTkQpCisKKy8qIFJFR19ERVBfT1VUUFVUIGFuZCBSRUdfREVQX0FOVEkgYXJlIHVzZWQgaW4gc2NoZWR1bGVyIGRlcGVuZGVuY2llcyBsaXN0cworICAgdG8gcmVwcmVzZW50IHdyaXRlLWFmdGVyLXdyaXRlIGFuZCB3cml0ZS1hZnRlci1yZWFkIGRlcGVuZGVuY2llcworICAgcmVzcGVjdGl2ZWx5LiAgKi8KK1JFR19OT1RFIChERVBfT1VUUFVUKQorUkVHX05PVEUgKERFUF9BTlRJKQorCisvKiBSRUdfQlJfUFJPQiBpcyBhdHRhY2hlZCB0byBKVU1QX0lOU05zIGFuZCBDQUxMX0lOU05zLiAgSXQgaGFzIGFuCisgICBpbnRlZ2VyIHZhbHVlLiAgRm9yIGp1bXBzLCBpdCBpcyB0aGUgcHJvYmFiaWxpdHkgdGhhdCB0aGlzIGlzIGEKKyAgIHRha2VuIGJyYW5jaC4gIEZvciBjYWxscywgaXQgaXMgdGhlIHByb2JhYmlsaXR5IHRoYXQgdGhpcyBjYWxsCisgICB3b24ndCByZXR1cm4uICAqLworUkVHX05PVEUgKEJSX1BST0IpCisKKy8qIFJFR19WQUxVRV9QUk9GSUxFIGlzIGF0dGFjaGVkIHdoZW4gdGhlIHByb2ZpbGUgaXMgcmVhZCBpbiB0byBhbgorICAgaW5zbiBiZWZvcmUgdGhhdCB0aGUgY29kZSB0byBwcm9maWxlIHRoZSB2YWx1ZSBpcyBpbnNlcnRlZC4gIEl0CisgICBjb250YWlucyB0aGUgcmVzdWx0cyBvZiBwcm9maWxpbmcuICAqLworUkVHX05PVEUgKFZBTFVFX1BST0ZJTEUpCisKKy8qIEF0dGFjaGVkIHRvIGEgY2FsbCBpbnNuOyBpbmRpY2F0ZXMgdGhhdCB0aGUgY2FsbCBpcyBtYWxsb2MtbGlrZSBhbmQKKyAgIHRoYXQgdGhlIHBvaW50ZXIgcmV0dXJuZWQgY2Fubm90IGFsaWFzIGFueXRoaW5nIGVsc2UuICAqLworUkVHX05PVEUgKE5PQUxJQVMpCisKKy8qIFJFR19CUl9QUkVEIGlzIGF0dGFjaGVkIHRvIEpVTVBfSU5TTnMgYW5kIENBTExfSU5TTlNzLiAgSXQgY29udGFpbnMKKyAgIENPTkNBVCBvZiB0d28gaW50ZWdlciB2YWx1ZS4gIEZpcnN0IHNwZWNpZmllcyB0aGUgYnJhbmNoIHByZWRpY3RvcgorICAgdGhhdCBhZGRlZCB0aGUgbm90ZSwgc2Vjb25kIHNwZWNpZmllcyB0aGUgcHJlZGljdGVkIGhpdHJhdGUgb2YKKyAgIGJyYW5jaCBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgUkVHX0JSX1BST0Igbm90ZSB1c2VzLiAgKi8KK1JFR19OT1RFIChCUl9QUkVEKQorCisvKiBBdHRhY2hlZCB0byBpbnNucyB0aGF0IGFyZSBSVFhfRlJBTUVfUkVMQVRFRF9QLCBidXQgYXJlIHRvbyBjb21wbGV4CisgICBmb3IgRFdBUkYgdG8gaW50ZXJwcmV0IHdoYXQgdGhleSBpbXBseS4gIFRoZSBhdHRhY2hlZCBydHggaXMgdXNlZAorICAgaW5zdGVhZCBvZiBpbnR1aXRpb24uICAqLworUkVHX05PVEUgKEZSQU1FX1JFTEFURURfRVhQUikKKworLyogQXR0YWNoZWQgdG8gaW5zbnMgdGhhdCBhcmUgUlRYX0ZSQU1FX1JFTEFURURfUCwgYnV0IGFyZSB0b28gY29tcGxleAorICAgZm9yIEZSQU1FX1JFTEFURURfRVhQUiBpbnR1aXRpb24uICBUaGUgaW5zbidzIGZpcnN0IHBhdHRlcm4gbXVzdCBiZQorICAgYSBTRVQsIGFuZCB0aGUgZGVzdGluYXRpb24gbXVzdCBiZSB0aGUgQ0ZBIHJlZ2lzdGVyLiAgVGhlIGF0dGFjaGVkCisgICBydHggaXMgYW4gZXhwcmVzc2lvbiB0aGF0IGRlZmluZXMgdGhlIENGQS4gIEluIHRoZSBzaW1wbGVzdCBjYXNlLCB0aGUKKyAgIHJ0eCBjb3VsZCBiZSBqdXN0IHRoZSBzdGFja19wb2ludGVyX3J0eDsgbW9yZSBjb21tb24gd291bGQgYmUgYSBQTFVTCisgICB3aXRoIGEgYmFzZSByZWdpc3RlciBhbmQgYSBjb25zdGFudCBvZmZzZXQuICBJbiB0aGUgbW9zdCBjb21wbGljYXRlZAorICAgY2FzZXMsIHRoaXMgd2lsbCByZXN1bHQgaW4gYSBEV19DRkFfZGVmX2NmYV9leHByZXNzaW9uIHdpdGggdGhlIHJ0eAorICAgZXhwcmVzc2lvbiByZW5kZXJlZCBpbiBhIGR3YXJmIGxvY2F0aW9uIGV4cHJlc3Npb24uICAqLworUkVHX05PVEUgKENGQV9ERUZfQ0ZBKQorCisvKiBBdHRhY2hlZCB0byBpbnNucyB0aGF0IGFyZSBSVFhfRlJBTUVfUkVMQVRFRF9QLCBidXQgYXJlIHRvbyBjb21wbGV4CisgICBmb3IgRlJBTUVfUkVMQVRFRF9FWFBSIGludHVpdGlvbi4gIFRoaXMgbm90ZSBhZGp1c3RzIHRoZSBleHByZXNzaW9uCisgICBmcm9tIHdoaWNoIHRoZSBDRkEgaXMgY29tcHV0ZWQuICBUaGUgYXR0YWNoZWQgcnR4IGRlZmluZXMgYSBuZXcgQ0ZBCisgICBleHByZXNzaW9uLCByZWxhdGl2ZSB0byB0aGUgb2xkIENGQSBleHByZXNzaW9uLiAgVGhpcyBydHggbXVzdCBiZSBvZgorICAgdGhlIGZvcm0gKFNFVCBuZXctY2ZhLXJlZyAoUExVUyBvbGQtY2ZhLXJlZyBjb25zdF9pbnQpKS4gIElmIHRoZSBub3RlCisgICBydHggaXMgTlVMTCwgd2UgdXNlIHRoZSBmaXJzdCBTRVQgb2YgdGhlIGluc24uICAqLworUkVHX05PVEUgKENGQV9BREpVU1RfQ0ZBKQorCisvKiBTaW1pbGFyIHRvIEZSQU1FX1JFTEFURURfRVhQUiwgd2l0aCB0aGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0aGF0CisgICB0aGlzIGlzIGEgc2F2ZSB0byBtZW1vcnksIGkuZS4gd2lsbCByZXN1bHQgaW4gRFdfQ0ZBX29mZnNldCBvciB0aGUKKyAgIGxpa2UuICBUaGUgcGF0dGVybiBvciB0aGUgaW5zbiBzaG91bGQgYmUgYSBzaW1wbGUgc3RvcmUgcmVsYXRpdmUgdG8KKyAgIHRoZSBDRkEuICAqLworUkVHX05PVEUgKENGQV9PRkZTRVQpCisKKy8qIFNpbWlsYXIgdG8gRlJBTUVfUkVMQVRFRF9FWFBSLCB3aXRoIHRoZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRoYXQgdGhpcworICAgaXMgYSBzYXZlIHRvIGEgcmVnaXN0ZXIsIGkuZS4gd2lsbCByZXN1bHQgaW4gRFdfQ0ZBX3JlZ2lzdGVyLiAgVGhlIGluc24KKyAgIG9yIHRoZSBwYXR0ZXJuIHNob3VsZCBiZSBzaW1wbGUgcmVnLXJlZyBtb3ZlLiAgKi8KK1JFR19OT1RFIChDRkFfUkVHSVNURVIpCisKKy8qIEF0dGFjaGVkIHRvIGluc25zIHRoYXQgYXJlIFJUWF9GUkFNRV9SRUxBVEVEX1AsIHdpdGggdGhlIGluZm9ybWF0aW9uCisgICB0aGF0IHRoaXMgaXMgYSByZXN0b3JlIG9wZXJhdGlvbiwgaS5lLiB3aWxsIHJlc3VsdCBpbiBEV19DRkFfcmVzdG9yZQorICAgb3IgdGhlIGxpa2UuICBFaXRoZXIgdGhlIGF0dGFjaGVkIHJ0eCwgb3IgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBpbnNuJ3MKKyAgIGZpcnN0IHBhdHRlcm4gaXMgdGhlIHJlZ2lzdGVyIHRvIGJlIHJlc3RvcmVkLiAgKi8KK1JFR19OT1RFIChDRkFfUkVTVE9SRSkKKworLyogQXR0YWNoZWQgdG8gaW5zbiB0aGF0IGlzIFJUWF9GUkFNRV9SRUxBVEVEX1AsIG1hcmtzIGluc24gdGhhdCBzZXRzCisgICB2RFJBUCBmcm9tIERSQVAuICBJZiB2RFJBUCBpcyBhIHJlZ2lzdGVyLCB2ZHJhcF9yZWcgaXMgaW5pdGFsaXplZAorICAgdG8gdGhlIGFyZ3VtZW50LCBpZiBpdCBpcyBhIE1FTSwgaXQgaXMgaWdub3JlZC4gICovCitSRUdfTk9URSAoQ0ZBX1NFVF9WRFJBUCkKKworLyogSW5kaWNhdGVzIHRoYXQgUkVHIGhvbGRzIHRoZSBleGNlcHRpb24gY29udGV4dCBmb3IgdGhlIGZ1bmN0aW9uLgorICAgVGhpcyBjb250ZXh0IGlzIHNoYXJlZCBieSBpbmxpbmUgZnVuY3Rpb25zLCBzbyB0aGUgY29kZSB0byBhY3F1aXJlCisgICB0aGUgcmVhbCBleGNlcHRpb24gY29udGV4dCBpcyBkZWxheWVkIHVudGlsIGFmdGVyIGlubGluaW5nLiAgKi8KK1JFR19OT1RFIChFSF9DT05URVhUKQorCisvKiBJbmRpY2F0ZXMgd2hhdCBleGNlcHRpb24gcmVnaW9uIGFuIElOU04gYmVsb25ncyBpbi4gIFRoaXMgaXMgdXNlZAorICAgdG8gaW5kaWNhdGUgd2hhdCByZWdpb24gdG8gd2hpY2ggYSBjYWxsIG1heSB0aHJvdy4gIFJFR0lPTiAwCisgICBpbmRpY2F0ZXMgdGhhdCBhIGNhbGwgY2Fubm90IHRocm93IGF0IGFsbC4gIFJFR0lPTiAtMSBpbmRpY2F0ZXMKKyAgIHRoYXQgaXQgY2Fubm90IHRocm93LCBub3Igd2lsbCBpdCBleGVjdXRlIGEgbm9uLWxvY2FsIGdvdG8uICAqLworUkVHX05PVEUgKEVIX1JFR0lPTikKKworLyogVXNlZCBieSBoYWlmYS1zY2hlZCB0byBzYXZlIE5PVEVfSU5TTiBub3RlcyBhY3Jvc3Mgc2NoZWR1bGluZy4gICovCitSRUdfTk9URSAoU0FWRV9OT1RFKQorCisvKiBJbmRpY2F0ZXMgdGhhdCBhIGNhbGwgZG9lcyBub3QgcmV0dXJuLiAgKi8KK1JFR19OT1RFIChOT1JFVFVSTikKKworLyogSW5kaWNhdGVzIHRoYXQgYW4gaW5kaXJlY3QganVtcCBpcyBhIG5vbi1sb2NhbCBnb3RvIGluc3RlYWQgb2YgYQorICAgY29tcHV0ZWQgZ290by4gICovCitSRUdfTk9URSAoTk9OX0xPQ0FMX0dPVE8pCisKKy8qIEluZGljYXRlcyB0aGF0IGEganVtcCBjcm9zc2VzIGJldHdlZW4gaG90IGFuZCBjb2xkIHNlY3Rpb25zIGluIGEKKyAgIChwYXJ0aXRpb25lZCkgYXNzZW1ibHkgb3IgLm8gZmlsZSwgYW5kIHRoZXJlZm9yZSBzaG91bGQgbm90IGJlCisgICByZWR1Y2VkIHRvIGEgc2ltcGxlciBqdW1wIGJ5IG9wdGltaXphdGlvbnMuICAqLworUkVHX05PVEUgKENST1NTSU5HX0pVTVApCisKKy8qIFRoaXMga2luZCBvZiBub3RlIGlzIGdlbmVyYXRlZCBhdCBlYWNoIHRvIGBzZXRqbXAnLCBhbmQgc2ltaWxhcgorICAgZnVuY3Rpb25zIHRoYXQgY2FuIHJldHVybiB0d2ljZS4gICovCitSRUdfTk9URSAoU0VUSk1QKQpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3J0bC5kZWYgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvcnRsLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWVmMWFmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3J0bC5kZWYKQEAgLTAsMCArMSwxMjYyIEBACisvKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGFuZCBkb2N1bWVudGF0aW9uIGZvciB0aGUKKyAgIFJlZ2lzdGVyIFRyYW5zZmVyIEV4cHJlc3Npb25zIChydHgncykgdGhhdCBtYWtlIHVwIHRoZQorICAgUmVnaXN0ZXIgVHJhbnNmZXIgTGFuZ3VhZ2UgKHJ0bCkgdXNlZCBpbiB0aGUgQmFjayBFbmQgb2YgdGhlIEdOVSBjb21waWxlci4KKyAgIENvcHlyaWdodCAoQykgMTk4NywgMTk4OCwgMTk5MiwgMTk5NCwgMTk5NSwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwNCwKKyAgIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworCisvKiBFeHByZXNzaW9uIGRlZmluaXRpb25zIGFuZCBkZXNjcmlwdGlvbnMgZm9yIGFsbCB0YXJnZXRzIGFyZSBpbiB0aGlzIGZpbGUuCisgICBTb21lIHdpbGwgbm90IGJlIHVzZWQgZm9yIHNvbWUgdGFyZ2V0cy4KKworICAgVGhlIGZpZWxkcyBpbiB0aGUgY3BwIG1hY3JvIGNhbGwgIkRFRl9SVExfRVhQUigpIgorICAgYXJlIHVzZWQgdG8gY3JlYXRlIGRlY2xhcmF0aW9ucyBpbiB0aGUgQyBzb3VyY2Ugb2YgdGhlIGNvbXBpbGVyLgorCisgICBUaGUgZmllbGRzIGFyZToKKworICAgMS4gIFRoZSBpbnRlcm5hbCBuYW1lIG9mIHRoZSBydHggdXNlZCBpbiB0aGUgQyBzb3VyY2UuCisgICBJdCBpcyBhIHRhZyBpbiB0aGUgZW51bWVyYXRpb24gImVudW0gcnR4X2NvZGUiIGRlZmluZWQgaW4gInJ0bC5oIi4KKyAgIEJ5IGNvbnZlbnRpb24gdGhlc2UgYXJlIGluIFVQUEVSX0NBU0UuCisKKyAgIDIuICBUaGUgbmFtZSBvZiB0aGUgcnR4IGluIHRoZSBleHRlcm5hbCBBU0NJSSBmb3JtYXQgcmVhZCBieQorICAgcmVhZF9ydHgoKSwgYW5kIHByaW50ZWQgYnkgcHJpbnRfcnR4KCkuCisgICBUaGVzZSBuYW1lcyBhcmUgc3RvcmVkIGluIHJ0eF9uYW1lW10uCisgICBCeSBjb252ZW50aW9uIHRoZXNlIGFyZSB0aGUgaW50ZXJuYWwgKGZpZWxkIDEpIG5hbWVzIGluIGxvd2VyX2Nhc2UuCisKKyAgIDMuICBUaGUgcHJpbnQgZm9ybWF0LCBhbmQgdHlwZSBvZiBlYWNoIHJ0eC0+dS5mbGRbXSAoZmllbGQpIGluIHRoaXMgcnR4LgorICAgVGhlc2UgZm9ybWF0cyBhcmUgc3RvcmVkIGluIHJ0eF9mb3JtYXRbXS4KKyAgIFRoZSBtZWFuaW5nIG9mIHRoZSBmb3JtYXRzIGlzIGRvY3VtZW50ZWQgaW4gZnJvbnQgb2YgdGhpcyBhcnJheSBpbiBydGwuYworCisgICA0LiAgVGhlIGNsYXNzIG9mIHRoZSBydHguICBUaGVzZSBhcmUgc3RvcmVkIGluIHJ0eF9jbGFzcyBhbmQgYXJlIGFjY2Vzc2VkCisgICB2aWEgdGhlIEdFVF9SVFhfQ0xBU1MgbWFjcm8uICBUaGV5IGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6CisKKyAgICAgUlRYX0NPTlNUX09CSgorICAgICAgICAgYW4gcnR4IGNvZGUgdGhhdCBjYW4gYmUgdXNlZCB0byByZXByZXNlbnQgYSBjb25zdGFudCBvYmplY3QKKyAgICAgICAgIChlLmcsIENPTlNUX0lOVCkKKyAgICAgUlRYX09CSgorICAgICAgICAgYW4gcnR4IGNvZGUgdGhhdCBjYW4gYmUgdXNlZCB0byByZXByZXNlbnQgYW4gb2JqZWN0IChlLmcsIFJFRywgTUVNKQorICAgICBSVFhfQ09NUEFSRQorICAgICAgICAgYW4gcnR4IGNvZGUgZm9yIGEgY29tcGFyaXNvbiAoZS5nLCBMVCwgR1QpCisgICAgIFJUWF9DT01NX0NPTVBBUkUKKyAgICAgICAgIGFuIHJ0eCBjb2RlIGZvciBhIGNvbW11dGF0aXZlIGNvbXBhcmlzb24gKGUuZywgRVEsIE5FLCBPUkRFUkVEKQorICAgICBSVFhfVU5BUlkKKyAgICAgICAgIGFuIHJ0eCBjb2RlIGZvciBhIHVuYXJ5IGFyaXRobWV0aWMgZXhwcmVzc2lvbiAoZS5nLCBORUcsIE5PVCkKKyAgICAgUlRYX0NPTU1fQVJJVEgKKyAgICAgICAgIGFuIHJ0eCBjb2RlIGZvciBhIGNvbW11dGF0aXZlIGJpbmFyeSBvcGVyYXRpb24gKGUuZywsIFBMVVMsIE1VTFQpCisgICAgIFJUWF9URVJOQVJZCisgICAgICAgICBhbiBydHggY29kZSBmb3IgYSBub24tYml0ZmllbGQgdGhyZWUgaW5wdXQgb3BlcmF0aW9uIChJRl9USEVOX0VMU0UpCisgICAgIFJUWF9CSU5fQVJJVEgKKyAgICAgICAgIGFuIHJ0eCBjb2RlIGZvciBhIG5vbi1jb21tdXRhdGl2ZSBiaW5hcnkgb3BlcmF0aW9uIChlLmcuLCBNSU5VUywgRElWKQorICAgICBSVFhfQklURklFTERfT1BTCisgICAgICAgICBhbiBydHggY29kZSBmb3IgYSBiaXQtZmllbGQgb3BlcmF0aW9uIChaRVJPX0VYVFJBQ1QsIFNJR05fRVhUUkFDVCkKKyAgICAgUlRYX0lOU04KKyAgICAgICAgIGFuIHJ0eCBjb2RlIGZvciBhIG1hY2hpbmUgaW5zbiAoSU5TTiwgSlVNUF9JTlNOLCBDQUxMX0lOU04pCisgICAgIFJUWF9NQVRDSAorICAgICAgICAgYW4gcnR4IGNvZGUgZm9yIHNvbWV0aGluZyB0aGF0IG1hdGNoZXMgaW4gaW5zbnMgKGUuZywgTUFUQ0hfRFVQKQorICAgICBSVFhfQVVUT0lOQworICAgICAgICAgYW4gcnR4IGNvZGUgZm9yIGF1dG9pbmNyZW1lbnQgYWRkcmVzc2luZyBtb2RlcyAoZS5nLiBQT1NUX0RFQykKKyAgICAgUlRYX0VYVFJBCisgICAgICAgICBldmVyeXRoaW5nIGVsc2UKKworICAgQWxsIG9mIHRoZSBleHByZXNzaW9ucyB0aGF0IGFwcGVhciBvbmx5IGluIG1hY2hpbmUgZGVzY3JpcHRpb25zLAorICAgbm90IGluIFJUTCB1c2VkIGJ5IHRoZSBjb21waWxlciBpdHNlbGYsIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLiAgKi8KKworLyogVW5rbm93biwgb3Igbm8gc3VjaCBvcGVyYXRpb247IHRoZSBlbnVtZXJhdGlvbiBjb25zdGFudCBzaG91bGQgaGF2ZQorICAgdmFsdWUgemVyby4gICovCitERUZfUlRMX0VYUFIoVU5LTk9XTiwgIlVuS25vd24iLCAiKiIsIFJUWF9FWFRSQSkKKworLyogVXNlZCBpbiB0aGUgY3NlbGliIHJvdXRpbmVzIHRvIGRlc2NyaWJlIGEgdmFsdWUuICBPYmplY3RzIG9mIHRoaXMKKyAgIGtpbmQgYXJlIG9ubHkgYWxsb2NhdGVkIGluIGNzZWxpYi5jLCBpbiBhbiBhbGxvYyBwb29sIGluc3RlYWQgb2YgaW4KKyAgIEdDIG1lbW9yeS4gIFRoZSBvbmx5IG9wZXJhbmQgb2YgYSBWQUxVRSBpcyBhIGNzZWxpYl92YWxfc3RydWN0LgorICAgdmFyLXRyYWNraW5nIHJlcXVpcmVzIHRoaXMgdG8gaGF2ZSBhIGRpc3RpbmN0IGludGVncmFsIHZhbHVlIGZyb20KKyAgIERFQ0wgY29kZXMgaW4gdHJlZXMuICAqLworREVGX1JUTF9FWFBSKFZBTFVFLCAidmFsdWUiLCAiMCIsIFJUWF9PQkopCisKKy8qIFRoZSBSVEwgZ2VuZXJhdGVkIGZvciBhIERFQlVHX0VYUFJfREVDTC4gIEl0IGxpbmtzIGJhY2sgdG8gdGhlCisgICBERUJVR19FWFBSX0RFQ0wgaW4gdGhlIGZpcnN0IG9wZXJhbmQuICAqLworREVGX1JUTF9FWFBSKERFQlVHX0VYUFIsICJkZWJ1Z19leHByIiwgIjAiLCBSVFhfT0JKKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIEV4cHJlc3Npb25zIHVzZWQgaW4gY29uc3RydWN0aW5nIGxpc3RzLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIGEgbGlua2VkIGxpc3Qgb2YgZXhwcmVzc2lvbnMgKi8KK0RFRl9SVExfRVhQUihFWFBSX0xJU1QsICJleHByX2xpc3QiLCAiZWUiLCBSVFhfRVhUUkEpCisKKy8qIGEgbGlua2VkIGxpc3Qgb2YgaW5zdHJ1Y3Rpb25zLgorICAgVGhlIGluc25zIGFyZSByZXByZXNlbnRlZCBpbiBwcmludCBieSB0aGVpciB1aWRzLiAgKi8KK0RFRl9SVExfRVhQUihJTlNOX0xJU1QsICJpbnNuX2xpc3QiLCAidWUiLCBSVFhfRVhUUkEpCisKKy8qIFNFUVVFTkNFIGFwcGVhcnMgaW4gdGhlIHJlc3VsdCBvZiBhIGBnZW5fLi4uJyBmdW5jdGlvbgorICAgZm9yIGEgREVGSU5FX0VYUEFORCB0aGF0IHdhbnRzIHRvIG1ha2Ugc2V2ZXJhbCBpbnNucy4KKyAgIEl0cyBlbGVtZW50cyBhcmUgdGhlIGJvZGllcyBvZiB0aGUgaW5zbnMgdGhhdCBzaG91bGQgYmUgbWFkZS4KKyAgIGBlbWl0X2luc24nIHRha2VzIHRoZSBTRVFVRU5DRSBhcGFydCBhbmQgbWFrZXMgc2VwYXJhdGUgaW5zbnMuICAqLworREVGX1JUTF9FWFBSKFNFUVVFTkNFLCAic2VxdWVuY2UiLCAiRSIsIFJUWF9FWFRSQSkKKworLyogUmVmZXJzIHRvIHRoZSBhZGRyZXNzIG9mIGl0cyBhcmd1bWVudC4gIFRoaXMgaXMgb25seSB1c2VkIGluIGFsaWFzLmMuICAqLworREVGX1JUTF9FWFBSKEFERFJFU1MsICJhZGRyZXNzIiwgImUiLCBSVFhfTUFUQ0gpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIEV4cHJlc3Npb24gdHlwZXMgdXNlZCBmb3IgdGhpbmdzIGluIHRoZSBpbnN0cnVjdGlvbiBjaGFpbi4KKworICAgQWxsIGZvcm1hdHMgbXVzdCBzdGFydCB3aXRoICJpdXUiIHRvIGhhbmRsZSB0aGUgY2hhaW4uCisgICBFYWNoIGluc24gZXhwcmVzc2lvbiBob2xkcyBhbiBydGwgaW5zdHJ1Y3Rpb24gYW5kIGl0cyBzZW1hbnRpY3MKKyAgIGR1cmluZyBiYWNrLWVuZCBwcm9jZXNzaW5nLgorICAgU2VlIG1hY3JvcydzIGluICJydGwuaCIgZm9yIHRoZSBtZWFuaW5nIG9mIGVhY2ggcnR4LT51LmZsZFtdLgorCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEFuIGFubm90YXRpb24gZm9yIHZhcmlhYmxlIGFzc2lnbm1lbnQgdHJhY2tpbmcuICAqLworREVGX1JUTF9FWFBSKERFQlVHX0lOU04sICJkZWJ1Z19pbnNuIiwgIml1dUJpZWllIiwgUlRYX0lOU04pCisKKy8qIEFuIGluc3RydWN0aW9uIHRoYXQgY2Fubm90IGp1bXAuICAqLworREVGX1JUTF9FWFBSKElOU04sICJpbnNuIiwgIml1dUJpZWllIiwgUlRYX0lOU04pCisKKy8qIEFuIGluc3RydWN0aW9uIHRoYXQgY2FuIHBvc3NpYmx5IGp1bXAuCisgICBGaWVsZHMgKCBydHgtPnUuZmxkW10gKSBoYXZlIGV4YWN0IHNhbWUgbWVhbmluZyBhcyBJTlNOJ3MuICAqLworREVGX1JUTF9FWFBSKEpVTVBfSU5TTiwgImp1bXBfaW5zbiIsICJpdXVCaWVpZTAiLCBSVFhfSU5TTikKKworLyogQW4gaW5zdHJ1Y3Rpb24gdGhhdCBjYW4gcG9zc2libHkgY2FsbCBhIHN1YnJvdXRpbmUKKyAgIGJ1dCB3aGljaCB3aWxsIG5vdCBjaGFuZ2Ugd2hpY2ggaW5zdHJ1Y3Rpb24gY29tZXMgbmV4dAorICAgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24uCisgICBGaWVsZCAoIHJ0eC0+dS5mbGRbOF0gKSBpcyBDQUxMX0lOU05fRlVOQ1RJT05fVVNBR0UuCisgICBBbGwgb3RoZXIgZmllbGRzICggcnR4LT51LmZsZFtdICkgaGF2ZSBleGFjdCBzYW1lIG1lYW5pbmcgYXMgSU5TTidzLiAgKi8KK0RFRl9SVExfRVhQUihDQUxMX0lOU04sICJjYWxsX2luc24iLCAiaXV1QmllaWVlIiwgUlRYX0lOU04pCisKKy8qIEEgbWFya2VyIHRoYXQgaW5kaWNhdGVzIHRoYXQgY29udHJvbCB3aWxsIG5vdCBmbG93IHRocm91Z2guICAqLworREVGX1JUTF9FWFBSKEJBUlJJRVIsICJiYXJyaWVyIiwgIml1dTAwMDAwIiwgUlRYX0VYVFJBKQorCisvKiBIb2xkcyBhIGxhYmVsIHRoYXQgaXMgZm9sbG93ZWQgYnkgaW5zdHJ1Y3Rpb25zLgorICAgT3BlcmFuZDoKKyAgIDQ6IGlzIHVzZWQgaW4ganVtcC5jIGZvciB0aGUgdXNlLWNvdW50IG9mIHRoZSBsYWJlbC4KKyAgIDU6IGlzIHVzZWQgaW4gdGhlIHNoIGJhY2tlbmQuCisgICA2OiBpcyBhIG51bWJlciB0aGF0IGlzIHVuaXF1ZSBpbiB0aGUgZW50aXJlIGNvbXBpbGF0aW9uLgorICAgNzogaXMgdGhlIHVzZXItZ2l2ZW4gbmFtZSBvZiB0aGUgbGFiZWwsIGlmIGFueS4gICovCitERUZfUlRMX0VYUFIoQ09ERV9MQUJFTCwgImNvZGVfbGFiZWwiLCAiaXV1QjAwaXMiLCBSVFhfRVhUUkEpCisKKy8qIFNheSB3aGVyZSBpbiB0aGUgY29kZSBhIHNvdXJjZSBsaW5lIHN0YXJ0cywgZm9yIHN5bWJvbCB0YWJsZSdzIHNha2UuCisgICBPcGVyYW5kOgorICAgNDogbm90ZS1zcGVjaWZpYyBkYXRhCisgICA1OiBlbnVtIGluc25fbm90ZQorICAgNjogdW5pcXVlIG51bWJlciBpZiBpbnNuX25vdGUgPT0gbm90ZV9pbnNuX2RlbGV0ZWRfbGFiZWwuICAqLworREVGX1JUTF9FWFBSKE5PVEUsICJub3RlIiwgIml1dUIwbmkiLCBSVFhfRVhUUkEpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRvcCBsZXZlbCBjb25zdGl0dWVudHMgb2YgSU5TTiwgSlVNUF9JTlNOIGFuZCBDQUxMX0lOU04uCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIENvbmRpdGlvbmFsbHkgZXhlY3V0ZSBjb2RlLgorICAgT3BlcmFuZCAwIGlzIHRoZSBjb25kaXRpb24gdGhhdCBpZiB0cnVlLCB0aGUgY29kZSBpcyBleGVjdXRlZC4KKyAgIE9wZXJhbmQgMSBpcyB0aGUgY29kZSB0byBiZSBleGVjdXRlZCAodHlwaWNhbGx5IGEgU0VUKS4KKworICAgU2VtYW50aWNzIGFyZSB0aGF0IHRoZXJlIGFyZSBubyBzaWRlIGVmZmVjdHMgaWYgdGhlIGNvbmRpdGlvbgorICAgaXMgZmFsc2UuICBUaGlzIHBhdHRlcm4gaXMgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBpZl9jb252ZXJ0CisgICBwYXNzIHJ1biBhZnRlciByZWxvYWQgb3IgYnkgdGFyZ2V0LXNwZWNpZmljIHNwbGl0dGVycy4gICovCitERUZfUlRMX0VYUFIoQ09ORF9FWEVDLCAiY29uZF9leGVjIiwgImVlIiwgUlRYX0VYVFJBKQorCisvKiBTZXZlcmFsIG9wZXJhdGlvbnMgdG8gYmUgZG9uZSBpbiBwYXJhbGxlbCAocGVyaGFwcyB1bmRlciBDT05EX0VYRUMpLiAgKi8KK0RFRl9SVExfRVhQUihQQVJBTExFTCwgInBhcmFsbGVsIiwgIkUiLCBSVFhfRVhUUkEpCisKKy8qIEEgc3RyaW5nIHRoYXQgaXMgcGFzc2VkIHRocm91Z2ggdG8gdGhlIGFzc2VtYmxlciBhcyBpbnB1dC4KKyAgICAgT25lIGNhbiBvYnZpb3VzbHkgcGFzcyBjb21tZW50cyB0aHJvdWdoIGJ5IHVzaW5nIHRoZQorICAgICBhc3NlbWJsZXIgY29tbWVudCBzeW50YXguCisgICAgIFRoZXNlIG9jY3VyIGluIGFuIGluc24gYWxsIGJ5IHRoZW1zZWx2ZXMgYXMgdGhlIFBBVFRFUk4uCisgICAgIFRoZXkgYWxzbyBhcHBlYXIgaW5zaWRlIGFuIEFTTV9PUEVSQU5EUworICAgICBhcyBhIGNvbnZlbmllbnQgd2F5IHRvIGhvbGQgYSBzdHJpbmcuICAqLworREVGX1JUTF9FWFBSKEFTTV9JTlBVVCwgImFzbV9pbnB1dCIsICJzaSIsIFJUWF9FWFRSQSkKKworLyogQW4gYXNzZW1ibGVyIGluc3RydWN0aW9uIHdpdGggb3BlcmFuZHMuCisgICAxc3Qgb3BlcmFuZCBpcyB0aGUgaW5zdHJ1Y3Rpb24gdGVtcGxhdGUuCisgICAybmQgb3BlcmFuZCBpcyB0aGUgY29uc3RyYWludCBmb3IgdGhlIG91dHB1dC4KKyAgIDNyZCBvcGVyYW5kIGlzIHRoZSBudW1iZXIgb2YgdGhlIG91dHB1dCB0aGlzIGV4cHJlc3Npb24gcmVmZXJzIHRvLgorICAgICBXaGVuIGFuIGluc24gc3RvcmVzIG1vcmUgdGhhbiBvbmUgdmFsdWUsIGEgc2VwYXJhdGUgQVNNX09QRVJBTkRTCisgICAgIGlzIG1hZGUgZm9yIGVhY2ggb3V0cHV0OyB0aGlzIGludGVnZXIgZGlzdGluZ3Vpc2hlcyB0aGVtLgorICAgNHRoIGlzIGEgdmVjdG9yIG9mIHZhbHVlcyBvZiBpbnB1dCBvcGVyYW5kcy4KKyAgIDV0aCBpcyBhIHZlY3RvciBvZiBtb2RlcyBhbmQgY29uc3RyYWludHMgZm9yIHRoZSBpbnB1dCBvcGVyYW5kcy4KKyAgICAgRWFjaCBlbGVtZW50IGlzIGFuIEFTTV9JTlBVVCBjb250YWluaW5nIGEgY29uc3RyYWludCBzdHJpbmcKKyAgICAgYW5kIHdob3NlIG1vZGUgaW5kaWNhdGVzIHRoZSBtb2RlIG9mIHRoZSBpbnB1dCBvcGVyYW5kLgorICAgNnRoIGlzIGEgdmVjdG9yIG9mIGxhYmVscyB0aGF0IG1heSBiZSBicmFuY2hlZCB0byBieSB0aGUgYXNtLgorICAgN3RoIGlzIHRoZSBzb3VyY2UgbGluZSBudW1iZXIuICAqLworREVGX1JUTF9FWFBSKEFTTV9PUEVSQU5EUywgImFzbV9vcGVyYW5kcyIsICJzc2lFRUVpIiwgUlRYX0VYVFJBKQorCisvKiBBIG1hY2hpbmUtc3BlY2lmaWMgb3BlcmF0aW9uLgorICAgMXN0IG9wZXJhbmQgaXMgYSB2ZWN0b3Igb2Ygb3BlcmFuZHMgYmVpbmcgdXNlZCBieSB0aGUgb3BlcmF0aW9uIHNvIHRoYXQKKyAgICAgYW55IG5lZWRlZCByZWxvYWRzIGNhbiBiZSBkb25lLgorICAgMm5kIG9wZXJhbmQgaXMgYSB1bmlxdWUgdmFsdWUgc2F5aW5nIHdoaWNoIG9mIGEgbnVtYmVyIG9mIG1hY2hpbmUtc3BlY2lmaWMKKyAgICAgb3BlcmF0aW9ucyBpcyB0byBiZSBwZXJmb3JtZWQuCisgICAoTm90ZSB0aGF0IHRoZSB2ZWN0b3IgbXVzdCBiZSB0aGUgZmlyc3Qgb3BlcmFuZCBiZWNhdXNlIG9mIHRoZSB3YXkgdGhhdAorICAgZ2VucmVjb2cuYyByZWNvcmQgcG9zaXRpb25zIHdpdGhpbiBhbiBpbnNuLikKKworICAgVU5TUEVDIGNhbiBvY2N1ciBhbGwgYnkgaXRzZWxmIGluIGEgUEFUVEVSTiwgYXMgYSBjb21wb25lbnQgb2YgYSBQQVJBTExFTCwKKyAgIG9yIGluc2lkZSBhbiBleHByZXNzaW9uLgorICAgVU5TUEVDIGJ5IGl0c2VsZiBvciBhcyBhIGNvbXBvbmVudCBvZiBhIFBBUkFMTEVMCisgICBpcyBjdXJyZW50bHkgY29uc2lkZXJlZCBub3QgZGVsZXRhYmxlLgorCisgICBGSVhNRTogUmVwbGFjZSBhbGwgdXNlcyBvZiBVTlNQRUMgdGhhdCBhcHBlYXJzIGJ5IGl0c2VsZiBvciBhcyBhIGNvbXBvbmVudAorICAgb2YgYSBQQVJBTExFTCB3aXRoIFVTRS4KKyAgICovCitERUZfUlRMX0VYUFIoVU5TUEVDLCAidW5zcGVjIiwgIkVpIiwgUlRYX0VYVFJBKQorCisvKiBTaW1pbGFyLCBidXQgYSB2b2xhdGlsZSBvcGVyYXRpb24gYW5kIG9uZSB3aGljaCBtYXkgdHJhcC4gICovCitERUZfUlRMX0VYUFIoVU5TUEVDX1ZPTEFUSUxFLCAidW5zcGVjX3ZvbGF0aWxlIiwgIkVpIiwgUlRYX0VYVFJBKQorCisvKiBWZWN0b3Igb2YgYWRkcmVzc2VzLCBzdG9yZWQgYXMgZnVsbCB3b3Jkcy4gICovCisvKiBFYWNoIGVsZW1lbnQgaXMgYSBMQUJFTF9SRUYgdG8gYSBDT0RFX0xBQkVMIHdob3NlIGFkZHJlc3Mgd2Ugd2FudC4gICovCitERUZfUlRMX0VYUFIoQUREUl9WRUMsICJhZGRyX3ZlYyIsICJFIiwgUlRYX0VYVFJBKQorCisvKiBWZWN0b3Igb2YgYWRkcmVzcyBkaWZmZXJlbmNlcyBYMCAtIEJBU0UsIFgxIC0gQkFTRSwgLi4uCisgICBGaXJzdCBvcGVyYW5kIGlzIEJBU0U7IHRoZSB2ZWN0b3IgY29udGFpbnMgdGhlIFgncy4KKyAgIFRoZSBtYWNoaW5lIG1vZGUgb2YgdGhpcyBydHggc2F5cyBob3cgbXVjaCBzcGFjZSB0byBsZWF2ZQorICAgZm9yIGVhY2ggZGlmZmVyZW5jZSBhbmQgaXMgYWRqdXN0ZWQgYnkgYnJhbmNoIHNob3J0ZW5pbmcgaWYKKyAgIENBU0VfVkVDVE9SX1NIT1JURU5fTU9ERSBpcyBkZWZpbmVkLgorICAgVGhlIHRoaXJkIGFuZCBmb3VydGggb3BlcmFuZHMgc3RvcmUgdGhlIHRhcmdldCBsYWJlbHMgd2l0aCB0aGUKKyAgIG1pbmltdW0gYW5kIG1heGltdW0gYWRkcmVzc2VzIHJlc3BlY3RpdmVseS4KKyAgIFRoZSBmaWZ0aCBvcGVyYW5kIHN0b3JlcyBmbGFncyBmb3IgdXNlIGJ5IGJyYW5jaCBzaG9ydGVuaW5nLgorICBTZXQgYXQgdGhlIHN0YXJ0IG9mIHNob3J0ZW5fYnJhbmNoZXM6CisgICBtaW5fYWxpZ246IHRoZSBtaW5pbXVtIGFsaWdubWVudCBmb3IgYW55IG9mIHRoZSB0YXJnZXQgbGFiZWxzLgorICAgYmFzZV9hZnRlcl92ZWM6IHRydWUgaWZmIEJBU0UgaXMgYWZ0ZXIgdGhlIEFERFJfRElGRl9WRUMuCisgICBtaW5fYWZ0ZXJfdmVjOiB0cnVlIGlmZiBtaW5pbXVtIGFkZHIgdGFyZ2V0IGxhYmVsIGlzIGFmdGVyIHRoZSBBRERSX0RJRkZfVkVDLgorICAgbWF4X2FmdGVyX3ZlYzogdHJ1ZSBpZmYgbWF4aW11bSBhZGRyIHRhcmdldCBsYWJlbCBpcyBhZnRlciB0aGUgQUREUl9ESUZGX1ZFQy4KKyAgIG1pbl9hZnRlcl9iYXNlOiB0cnVlIGlmZiBtaW5pbXVtIGFkZHJlc3MgdGFyZ2V0IGxhYmVsIGlzIGFmdGVyIEJBU0UuCisgICBtYXhfYWZ0ZXJfYmFzZTogdHJ1ZSBpZmYgbWF4aW11bSBhZGRyZXNzIHRhcmdldCBsYWJlbCBpcyBhZnRlciBCQVNFLgorICBTZXQgYnkgdGhlIGFjdHVhbCBicmFuY2ggc2hvcnRlbmluZyBwcm9jZXNzOgorICAgb2Zmc2V0X3Vuc2lnbmVkOiB0cnVlIGlmZiBvZmZzZXRzIGhhdmUgdG8gYmUgdHJlYXRlZCBhcyB1bnNpZ25lZC4KKyAgIHNjYWxlOiBzY2FsaW5nIHRoYXQgaXMgbmVjZXNzYXJ5IHRvIG1ha2Ugb2Zmc2V0cyBmaXQgaW50byB0aGUgbW9kZS4KKworICAgVGhlIHRoaXJkLCBmb3VydGggYW5kIGZpZnRoIG9wZXJhbmRzIGFyZSBvbmx5IHZhbGlkIHdoZW4KKyAgIENBU0VfVkVDVE9SX1NIT1JURU5fTU9ERSBpcyBkZWZpbmVkLCBhbmQgb25seSBpbiBhbiBvcHRpbWl6aW5nCisgICBjb21waWxhdGlvbnMuICAqLworCitERUZfUlRMX0VYUFIoQUREUl9ESUZGX1ZFQywgImFkZHJfZGlmZl92ZWMiLCAiZUVlZTAiLCBSVFhfRVhUUkEpCisKKy8qIE1lbW9yeSBwcmVmZXRjaCwgd2l0aCBhdHRyaWJ1dGVzIHN1cHBvcnRlZCBvbiBzb21lIHRhcmdldHMuCisgICBPcGVyYW5kIDEgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSB0byBmZXRjaC4KKyAgIE9wZXJhbmQgMiBpcyAxIGZvciBhIHdyaXRlIGFjY2VzcywgMCBvdGhlcndpc2UuCisgICBPcGVyYW5kIDMgaXMgdGhlIGxldmVsIG9mIHRlbXBvcmFsIGxvY2FsaXR5OyAwIG1lYW5zIHRoZXJlIGlzIG5vCisgICB0ZW1wb3JhbCBsb2NhbGl0eSBhbmQgMSwgMiwgYW5kIDMgYXJlIGZvciBpbmNyZWFzaW5nIGxldmVscyBvZiB0ZW1wb3JhbAorICAgbG9jYWxpdHkuCisKKyAgIFRoZSBhdHRyaWJ1dGVzIHNwZWNpZmllZCBieSBvcGVyYW5kcyAyIGFuZCAzIGFyZSBpZ25vcmVkIGZvciB0YXJnZXRzCisgICB3aG9zZSBwcmVmZXRjaCBpbnN0cnVjdGlvbnMgZG8gbm90IHN1cHBvcnQgdGhlbS4gICovCitERUZfUlRMX0VYUFIoUFJFRkVUQ0gsICJwcmVmZXRjaCIsICJlZWUiLCBSVFhfRVhUUkEpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIEF0IHRoZSB0b3AgbGV2ZWwgb2YgYW4gaW5zdHJ1Y3Rpb24gKHBlcmhhcHMgdW5kZXIgUEFSQUxMRUwpLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBBc3NpZ25tZW50LgorICAgT3BlcmFuZCAxIGlzIHRoZSBsb2NhdGlvbiAoUkVHLCBNRU0sIFBDLCBDQzAgb3Igd2hhdGV2ZXIpIGFzc2lnbmVkIHRvLgorICAgT3BlcmFuZCAyIGlzIHRoZSB2YWx1ZSBzdG9yZWQgdGhlcmUuCisgICBBTEwgYXNzaWdubWVudCBtdXN0IHVzZSBTRVQuCisgICBJbnN0cnVjdGlvbnMgdGhhdCBkbyBtdWx0aXBsZSBhc3NpZ25tZW50cyBtdXN0IHVzZSBtdWx0aXBsZSBTRVQsCisgICB1bmRlciBQQVJBTExFTC4gICovCitERUZfUlRMX0VYUFIoU0VULCAic2V0IiwgImVlIiwgUlRYX0VYVFJBKQorCisvKiBJbmRpY2F0ZSBzb21ldGhpbmcgaXMgdXNlZCBpbiBhIHdheSB0aGF0IHdlIGRvbid0IHdhbnQgdG8gZXhwbGFpbi4KKyAgIEZvciBleGFtcGxlLCBzdWJyb3V0aW5lIGNhbGxzIHdpbGwgdXNlIHRoZSByZWdpc3RlcgorICAgaW4gd2hpY2ggdGhlIHN0YXRpYyBjaGFpbiBpcyBwYXNzZWQuCisKKyAgIFVTRSBjYW4gbm90IGFwcGVhciBhcyBhbiBvcGVyYW5kIG9mIG90aGVyIHJ0eCBleGNlcHQgZm9yIFBBUkFMTEVMLgorICAgVVNFIGlzIG5vdCBkZWxldGFibGUsIGFzIGl0IGluZGljYXRlcyB0aGF0IHRoZSBvcGVyYW5kCisgICBpcyB1c2VkIGluIHNvbWUgdW5rbm93biB3YXkuICAqLworREVGX1JUTF9FWFBSKFVTRSwgInVzZSIsICJlIiwgUlRYX0VYVFJBKQorCisvKiBJbmRpY2F0ZSBzb21ldGhpbmcgaXMgY2xvYmJlcmVkIGluIGEgd2F5IHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBleHBsYWluLgorICAgRm9yIGV4YW1wbGUsIHN1YnJvdXRpbmUgY2FsbHMgd2lsbCBjbG9iYmVyIHNvbWUgcGh5c2ljYWwgcmVnaXN0ZXJzCisgICAodGhlIG9uZXMgdGhhdCBhcmUgYnkgY29udmVudGlvbiBub3Qgc2F2ZWQpLgorCisgICBDTE9CQkVSIGNhbiBub3QgYXBwZWFyIGFzIGFuIG9wZXJhbmQgb2Ygb3RoZXIgcnR4IGV4Y2VwdCBmb3IgUEFSQUxMRUwuCisgICBDTE9CQkVSIG9mIGEgaGFyZCByZWdpc3RlciBhcHBlYXJpbmcgYnkgaXRzZWxmIChub3Qgd2l0aGluIFBBUkFMTEVMKQorICAgaXMgY29uc2lkZXJlZCB1bmRlbGV0YWJsZSBiZWZvcmUgcmVsb2FkLiAgKi8KK0RFRl9SVExfRVhQUihDTE9CQkVSLCAiY2xvYmJlciIsICJlIiwgUlRYX0VYVFJBKQorCisvKiBDYWxsIGEgc3Vicm91dGluZS4KKyAgIE9wZXJhbmQgMSBpcyB0aGUgYWRkcmVzcyB0byBjYWxsLgorICAgT3BlcmFuZCAyIGlzIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzLiAgKi8KKworREVGX1JUTF9FWFBSKENBTEwsICJjYWxsIiwgImVlIiwgUlRYX0VYVFJBKQorCisvKiBSZXR1cm4gZnJvbSBhIHN1YnJvdXRpbmUuICAqLworCitERUZfUlRMX0VYUFIoUkVUVVJOLCAicmV0dXJuIiwgIiIsIFJUWF9FWFRSQSkKKworLyogU3BlY2lhbCBmb3IgRUggcmV0dXJuIGZyb20gc3Vicm91dGluZS4gICovCisKK0RFRl9SVExfRVhQUihFSF9SRVRVUk4sICJlaF9yZXR1cm4iLCAiIiwgUlRYX0VYVFJBKQorCisvKiBDb25kaXRpb25hbCB0cmFwLgorICAgT3BlcmFuZCAxIGlzIHRoZSBjb25kaXRpb24uCisgICBPcGVyYW5kIDIgaXMgdGhlIHRyYXAgY29kZS4KKyAgIEZvciBhbiB1bmNvbmRpdGlvbmFsIHRyYXAsIG1ha2UgdGhlIGNvbmRpdGlvbiAoY29uc3RfaW50IDEpLiAgKi8KK0RFRl9SVExfRVhQUihUUkFQX0lGLCAidHJhcF9pZiIsICJlZSIsIFJUWF9FWFRSQSkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgUHJpbWl0aXZlIHZhbHVlcyBmb3IgdXNlIGluIGV4cHJlc3Npb25zLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBudW1lcmljIGludGVnZXIgY29uc3RhbnQgKi8KK0RFRl9SVExfRVhQUihDT05TVF9JTlQsICJjb25zdF9pbnQiLCAidyIsIFJUWF9DT05TVF9PQkopCisKKy8qIGZpeGVkLXBvaW50IGNvbnN0YW50ICovCitERUZfUlRMX0VYUFIoQ09OU1RfRklYRUQsICJjb25zdF9maXhlZCIsICJ3d3ciLCBSVFhfQ09OU1RfT0JKKQorCisvKiBudW1lcmljIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50LgorICAgT3BlcmFuZHMgaG9sZCB0aGUgdmFsdWUuICBUaGV5IGFyZSBhbGwgJ3cnIGFuZCB0aGVyZSBtYXkgYmUgZnJvbSAyIHRvIDY7CisgICBzZWUgcmVhbC5oLiAgKi8KK0RFRl9SVExfRVhQUihDT05TVF9ET1VCTEUsICJjb25zdF9kb3VibGUiLCBDT05TVF9ET1VCTEVfRk9STUFULCBSVFhfQ09OU1RfT0JKKQorCisvKiBEZXNjcmliZXMgYSB2ZWN0b3IgY29uc3RhbnQuICAqLworREVGX1JUTF9FWFBSKENPTlNUX1ZFQ1RPUiwgImNvbnN0X3ZlY3RvciIsICJFIiwgUlRYX0NPTlNUX09CSikKKworLyogU3RyaW5nIGNvbnN0YW50LiAgVXNlZCBmb3IgYXR0cmlidXRlcyBpbiBtYWNoaW5lIGRlc2NyaXB0aW9ucyBhbmQKKyAgIGZvciBzcGVjaWFsIGNhc2VzIGluIERXQVJGMiBkZWJ1ZyBvdXRwdXQuICBOT1QgdXNlZCBmb3Igc291cmNlLQorICAgbGFuZ3VhZ2Ugc3RyaW5nIGNvbnN0YW50cy4gICovCitERUZfUlRMX0VYUFIoQ09OU1RfU1RSSU5HLCAiY29uc3Rfc3RyaW5nIiwgInMiLCBSVFhfT0JKKQorCisvKiBUaGlzIGlzIHVzZWQgdG8gZW5jYXBzdWxhdGUgYW4gZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBjb25zdGFudAorICAgKHN1Y2ggYXMgdGhlIHN1bSBvZiBhIFNZTUJPTF9SRUYgYW5kIGEgQ09OU1RfSU5UKSBzbyB0aGF0IGl0IHdpbGwgYmUKKyAgIHJlY29nbml6ZWQgYXMgYSBjb25zdGFudCBvcGVyYW5kIHJhdGhlciB0aGFuIGJ5IGFyaXRobWV0aWMgaW5zdHJ1Y3Rpb25zLiAgKi8KKworREVGX1JUTF9FWFBSKENPTlNULCAiY29uc3QiLCAiZSIsIFJUWF9DT05TVF9PQkopCisKKy8qIHByb2dyYW0gY291bnRlci4gIE9yZGluYXJ5IGp1bXBzIGFyZSByZXByZXNlbnRlZAorICAgYnkgYSBTRVQgd2hvc2UgZmlyc3Qgb3BlcmFuZCBpcyAoUEMpLiAgKi8KK0RFRl9SVExfRVhQUihQQywgInBjIiwgIiIsIFJUWF9PQkopCisKKy8qIEEgcmVnaXN0ZXIuICBUaGUgIm9wZXJhbmQiIGlzIHRoZSByZWdpc3RlciBudW1iZXIsIGFjY2Vzc2VkIHdpdGgKKyAgIHRoZSBSRUdOTyBtYWNyby4gIElmIHRoaXMgbnVtYmVyIGlzIGxlc3MgdGhhbiBGSVJTVF9QU0VVRE9fUkVHSVNURVIKKyAgIHRoYW4gYSBoYXJkd2FyZSByZWdpc3RlciBpcyBiZWluZyByZWZlcnJlZCB0by4gIFRoZSBzZWNvbmQgb3BlcmFuZAorICAgaG9sZHMgdGhlIG9yaWdpbmFsIHJlZ2lzdGVyIG51bWJlciAtIHRoaXMgd2lsbCBiZSBkaWZmZXJlbnQgZm9yIGEKKyAgIHBzZXVkbyByZWdpc3RlciB0aGF0IGdvdCB0dXJuZWQgaW50byBhIGhhcmQgcmVnaXN0ZXIuICBUaGUgdGhpcmQKKyAgIG9wZXJhbmQgcG9pbnRzIHRvIGEgcmVnX2F0dHJzIHN0cnVjdHVyZS4KKyAgIFRoaXMgcnR4IG5lZWRzIHRvIGhhdmUgYXMgbWFueSAob3IgbW9yZSkgZmllbGRzIGFzIGEgTUVNLCBzaW5jZSB3ZQorICAgY2FuIGNoYW5nZSBSRUcgcnR4J3MgaW50byBNRU1zIGR1cmluZyByZWxvYWQuICAqLworREVGX1JUTF9FWFBSKFJFRywgInJlZyIsICJpMDAiLCBSVFhfT0JKKQorCisvKiBBIHNjcmF0Y2ggcmVnaXN0ZXIuICBUaGlzIHJlcHJlc2VudHMgYSByZWdpc3RlciB1c2VkIG9ubHkgd2l0aGluIGEKKyAgIHNpbmdsZSBpbnNuLiAgSXQgd2lsbCBiZSB0dXJuZWQgaW50byBhIFJFRyBkdXJpbmcgcmVnaXN0ZXIgYWxsb2NhdGlvbgorICAgb3IgcmVsb2FkIHVubGVzcyB0aGUgY29uc3RyYWludCBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVnaXN0ZXIgd29uJ3QgYmUKKyAgIG5lZWRlZCwgaW4gd2hpY2ggY2FzZSBpdCBjYW4gcmVtYWluIGEgU0NSQVRDSC4gIFRoaXMgY29kZSBpcworICAgbWFya2VkIGFzIGhhdmluZyBvbmUgb3BlcmFuZCBzbyBpdCBjYW4gYmUgdHVybmVkIGludG8gYSBSRUcuICAqLworREVGX1JUTF9FWFBSKFNDUkFUQ0gsICJzY3JhdGNoIiwgIjAiLCBSVFhfT0JKKQorCisvKiBBIHJlZmVyZW5jZSB0byBhIHBhcnQgb2YgYW5vdGhlciB2YWx1ZS4gIFRoZSBmaXJzdCBvcGVyYW5kIGlzIHRoZQorICAgY29tcGxldGUgdmFsdWUgYW5kIHRoZSBzZWNvbmQgaXMgdGhlIGJ5dGUgb2Zmc2V0IG9mIHRoZSBzZWxlY3RlZCBwYXJ0LiAgICovCitERUZfUlRMX0VYUFIoU1VCUkVHLCAic3VicmVnIiwgImVpIiwgUlRYX0VYVFJBKQorCisvKiBUaGlzIG9uZS1hcmd1bWVudCBydHggaXMgdXNlZCBmb3IgbW92ZSBpbnN0cnVjdGlvbnMKKyAgIHRoYXQgYXJlIGd1YXJhbnRlZWQgdG8gYWx0ZXIgb25seSB0aGUgbG93IHBhcnQgb2YgYSBkZXN0aW5hdGlvbi4KKyAgIFRodXMsIChTRVQgKFNVQlJFRzpISSAoUkVHLi4uKSkgKE1FTTpISSAuLi4pKQorICAgaGFzIGFuIHVuc3BlY2lmaWVkIGVmZmVjdCBvbiB0aGUgaGlnaCBwYXJ0IG9mIFJFRywKKyAgIGJ1dCAoU0VUIChTVFJJQ1RfTE9XX1BBUlQgKFNVQlJFRzpISSAoUkVHLi4uKSkpIChNRU06SEkgLi4uKSkKKyAgIGlzIGd1YXJhbnRlZWQgdG8gYWx0ZXIgb25seSB0aGUgYml0cyBvZiBSRUcgdGhhdCBhcmUgaW4gSEltb2RlLgorCisgICBUaGUgYWN0dWFsIGluc3RydWN0aW9uIHVzZWQgaXMgcHJvYmFibHkgdGhlIHNhbWUgaW4gYm90aCBjYXNlcywKKyAgIGJ1dCB0aGUgcmVnaXN0ZXIgY29uc3RyYWludHMgbWF5IGJlIHRpZ2h0ZXIgd2hlbiBTVFJJQ1RfTE9XX1BBUlQKKyAgIGlzIGluIHVzZS4gICovCisKK0RFRl9SVExfRVhQUihTVFJJQ1RfTE9XX1BBUlQsICJzdHJpY3RfbG93X3BhcnQiLCAiZSIsIFJUWF9FWFRSQSkKKworLyogKENPTkNBVCBhIGIpIHJlcHJlc2VudHMgdGhlIHZpcnR1YWwgY29uY2F0ZW5hdGlvbiBvZiBhIGFuZCBiCisgICB0byBtYWtlIGEgdmFsdWUgdGhhdCBoYXMgYXMgbWFueSBiaXRzIGFzIGEgYW5kIGIgcHV0IHRvZ2V0aGVyLgorICAgVGhpcyBpcyB1c2VkIGZvciBjb21wbGV4IHZhbHVlcy4gIE5vcm1hbGx5IGl0IGFwcGVhcnMgb25seQorICAgaW4gREVDTF9SVExzIGFuZCBkdXJpbmcgUlRMIGdlbmVyYXRpb24sIGJ1dCBub3QgaW4gdGhlIGluc24gY2hhaW4uICAqLworREVGX1JUTF9FWFBSKENPTkNBVCwgImNvbmNhdCIsICJlZSIsIFJUWF9PQkopCisKKy8qIChDT05DQVROIFthMSBhMiAuLi4gYW5dKSByZXByZXNlbnRzIHRoZSB2aXJ0dWFsIGNvbmNhdGVuYXRpb24gb2YKKyAgIGFsbCBBbiB0byBtYWtlIGEgdmFsdWUuICBUaGlzIGlzIGFuIGV4dGVuc2lvbiBvZiBDT05DQVQgdG8gbGFyZ2VyCisgICBudW1iZXIgb2YgY29tcG9uZW50cy4gIExpa2UgQ09OQ0FULCBpdCBzaG91bGQgbm90IGFwcGVhciBpbiB0aGUKKyAgIGluc24gY2hhaW4uICBFdmVyeSBlbGVtZW50IG9mIHRoZSBDT05DQVROIGlzIHRoZSBzYW1lIHNpemUuICAqLworREVGX1JUTF9FWFBSKENPTkNBVE4sICJjb25jYXRuIiwgIkUiLCBSVFhfT0JKKQorCisvKiBBIG1lbW9yeSBsb2NhdGlvbjsgb3BlcmFuZCBpcyB0aGUgYWRkcmVzcy4gIFRoZSBzZWNvbmQgb3BlcmFuZCBpcyB0aGUKKyAgIGFsaWFzIHNldCB0byB3aGljaCB0aGlzIE1FTSBiZWxvbmdzLiAgV2UgdXNlIGAwJyBpbnN0ZWFkIG9mIGB3JyBmb3IgdGhpcworICAgZmllbGQgc28gdGhhdCB0aGUgZmllbGQgbmVlZCBub3QgYmUgc3BlY2lmaWVkIGluIG1hY2hpbmUgZGVzY3JpcHRpb25zLiAgKi8KK0RFRl9SVExfRVhQUihNRU0sICJtZW0iLCAiZTAiLCBSVFhfT0JKKQorCisvKiBSZWZlcmVuY2UgdG8gYW4gYXNzZW1ibGVyIGxhYmVsIGluIHRoZSBjb2RlIGZvciB0aGlzIGZ1bmN0aW9uLgorICAgVGhlIG9wZXJhbmQgaXMgYSBDT0RFX0xBQkVMIGZvdW5kIGluIHRoZSBpbnNuIGNoYWluLiAgKi8KK0RFRl9SVExfRVhQUihMQUJFTF9SRUYsICJsYWJlbF9yZWYiLCAidSIsIFJUWF9DT05TVF9PQkopCisKKy8qIFJlZmVyZW5jZSB0byBhIG5hbWVkIGxhYmVsOgorICAgT3BlcmFuZCAwOiBsYWJlbCBuYW1lCisgICBPcGVyYW5kIDE6IGZsYWdzIChzZWUgU1lNQk9MX0ZMQUdfKiBpbiBydGwuaCkKKyAgIE9wZXJhbmQgMjogdHJlZSBmcm9tIHdoaWNoIHRoaXMgc3ltYm9sIGlzIGRlcml2ZWQsIG9yIG51bGwuCisgICBUaGlzIGlzIGVpdGhlciBhIERFQ0wgbm9kZSwgb3Igc29tZSBraW5kIG9mIGNvbnN0YW50LiAgKi8KK0RFRl9SVExfRVhQUihTWU1CT0xfUkVGLCAic3ltYm9sX3JlZiIsICJzMDAiLCBSVFhfQ09OU1RfT0JKKQorCisvKiBUaGUgY29uZGl0aW9uIGNvZGUgcmVnaXN0ZXIgaXMgcmVwcmVzZW50ZWQsIGluIG91ciBpbWFnaW5hdGlvbiwKKyAgIGFzIGEgcmVnaXN0ZXIgaG9sZGluZyBhIHZhbHVlIHRoYXQgY2FuIGJlIGNvbXBhcmVkIHRvIHplcm8uCisgICBJbiBmYWN0LCB0aGUgbWFjaGluZSBoYXMgYWxyZWFkeSBjb21wYXJlZCB0aGVtIGFuZCByZWNvcmRlZCB0aGUKKyAgIHJlc3VsdHM7IGJ1dCBpbnN0cnVjdGlvbnMgdGhhdCBsb29rIGF0IHRoZSBjb25kaXRpb24gY29kZQorICAgcHJldGVuZCB0byBiZSBsb29raW5nIGF0IHRoZSBlbnRpcmUgdmFsdWUgYW5kIGNvbXBhcmluZyBpdC4gICovCitERUZfUlRMX0VYUFIoQ0MwLCAiY2MwIiwgIiIsIFJUWF9PQkopCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIEV4cHJlc3Npb25zIGZvciBvcGVyYXRvcnMgaW4gYW4gcnRsIHBhdHRlcm4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogaWZfdGhlbl9lbHNlLiAgVGhpcyBpcyB1c2VkIGluIHJlcHJlc2VudGluZyBvcmRpbmFyeQorICAgY29uZGl0aW9uYWwganVtcCBpbnN0cnVjdGlvbnMuCisgICAgIE9wZXJhbmQ6CisgICAgIDA6ICBjb25kaXRpb24KKyAgICAgMTogIHRoZW4gZXhwcgorICAgICAyOiAgZWxzZSBleHByICovCitERUZfUlRMX0VYUFIoSUZfVEhFTl9FTFNFLCAiaWZfdGhlbl9lbHNlIiwgImVlZSIsIFJUWF9URVJOQVJZKQorCisvKiBDb21wYXJpc29uLCBwcm9kdWNlcyBhIGNvbmRpdGlvbiBjb2RlIHJlc3VsdC4gICovCitERUZfUlRMX0VYUFIoQ09NUEFSRSwgImNvbXBhcmUiLCAiZWUiLCBSVFhfQklOX0FSSVRIKQorCisvKiBwbHVzICovCitERUZfUlRMX0VYUFIoUExVUywgInBsdXMiLCAiZWUiLCBSVFhfQ09NTV9BUklUSCkKKworLyogT3BlcmFuZCAwIG1pbnVzIG9wZXJhbmQgMS4gICovCitERUZfUlRMX0VYUFIoTUlOVVMsICJtaW51cyIsICJlZSIsIFJUWF9CSU5fQVJJVEgpCisKKy8qIE1pbnVzIG9wZXJhbmQgMC4gICovCitERUZfUlRMX0VYUFIoTkVHLCAibmVnIiwgImUiLCBSVFhfVU5BUlkpCisKK0RFRl9SVExfRVhQUihNVUxULCAibXVsdCIsICJlZSIsIFJUWF9DT01NX0FSSVRIKQorCisvKiBNdWx0aXBsaWNhdGlvbiB3aXRoIHNpZ25lZCBzYXR1cmF0aW9uICovCitERUZfUlRMX0VYUFIoU1NfTVVMVCwgInNzX211bHQiLCAiZWUiLCBSVFhfQ09NTV9BUklUSCkKKy8qIE11bHRpcGxpY2F0aW9uIHdpdGggdW5zaWduZWQgc2F0dXJhdGlvbiAqLworREVGX1JUTF9FWFBSKFVTX01VTFQsICJ1c19tdWx0IiwgImVlIiwgUlRYX0NPTU1fQVJJVEgpCisKKy8qIE9wZXJhbmQgMCBkaXZpZGVkIGJ5IG9wZXJhbmQgMS4gICovCitERUZfUlRMX0VYUFIoRElWLCAiZGl2IiwgImVlIiwgUlRYX0JJTl9BUklUSCkKKy8qIERpdmlzaW9uIHdpdGggc2lnbmVkIHNhdHVyYXRpb24gKi8KK0RFRl9SVExfRVhQUihTU19ESVYsICJzc19kaXYiLCAiZWUiLCBSVFhfQklOX0FSSVRIKQorLyogRGl2aXNpb24gd2l0aCB1bnNpZ25lZCBzYXR1cmF0aW9uICovCitERUZfUlRMX0VYUFIoVVNfRElWLCAidXNfZGl2IiwgImVlIiwgUlRYX0JJTl9BUklUSCkKKworLyogUmVtYWluZGVyIG9mIG9wZXJhbmQgMCBkaXZpZGVkIGJ5IG9wZXJhbmQgMS4gICovCitERUZfUlRMX0VYUFIoTU9ELCAibW9kIiwgImVlIiwgUlRYX0JJTl9BUklUSCkKKworLyogVW5zaWduZWQgZGl2aWRlIGFuZCByZW1haW5kZXIuICAqLworREVGX1JUTF9FWFBSKFVESVYsICJ1ZGl2IiwgImVlIiwgUlRYX0JJTl9BUklUSCkKK0RFRl9SVExfRVhQUihVTU9ELCAidW1vZCIsICJlZSIsIFJUWF9CSU5fQVJJVEgpCisKKy8qIEJpdHdpc2Ugb3BlcmF0aW9ucy4gICovCitERUZfUlRMX0VYUFIoQU5ELCAiYW5kIiwgImVlIiwgUlRYX0NPTU1fQVJJVEgpCitERUZfUlRMX0VYUFIoSU9SLCAiaW9yIiwgImVlIiwgUlRYX0NPTU1fQVJJVEgpCitERUZfUlRMX0VYUFIoWE9SLCAieG9yIiwgImVlIiwgUlRYX0NPTU1fQVJJVEgpCitERUZfUlRMX0VYUFIoTk9ULCAibm90IiwgImUiLCBSVFhfVU5BUlkpCisKKy8qIE9wZXJhbmQ6CisgICAgIDA6ICB2YWx1ZSB0byBiZSBzaGlmdGVkLgorICAgICAxOiAgbnVtYmVyIG9mIGJpdHMuICAqLworREVGX1JUTF9FWFBSKEFTSElGVCwgImFzaGlmdCIsICJlZSIsIFJUWF9CSU5fQVJJVEgpIC8qIHNoaWZ0IGxlZnQgKi8KK0RFRl9SVExfRVhQUihST1RBVEUsICJyb3RhdGUiLCAiZWUiLCBSVFhfQklOX0FSSVRIKSAvKiByb3RhdGUgbGVmdCAqLworREVGX1JUTF9FWFBSKEFTSElGVFJULCAiYXNoaWZ0cnQiLCAiZWUiLCBSVFhfQklOX0FSSVRIKSAvKiBhcml0aG1ldGljIHNoaWZ0IHJpZ2h0ICovCitERUZfUlRMX0VYUFIoTFNISUZUUlQsICJsc2hpZnRydCIsICJlZSIsIFJUWF9CSU5fQVJJVEgpIC8qIGxvZ2ljYWwgc2hpZnQgcmlnaHQgKi8KK0RFRl9SVExfRVhQUihST1RBVEVSVCwgInJvdGF0ZXJ0IiwgImVlIiwgUlRYX0JJTl9BUklUSCkgLyogcm90YXRlIHJpZ2h0ICovCisKKy8qIE1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIG9mIHR3byBvcGVyYW5kcy4gIFdlIG5lZWQgYm90aCBzaWduZWQgYW5kCisgICB1bnNpZ25lZCBmb3Jtcy4gIChXZSBjYW5ub3QgdXNlIE1JTiBmb3IgU01JTiBiZWNhdXNlIGl0IGNvbmZsaWN0cworICAgd2l0aCBhIG1hY3JvIG9mIHRoZSBzYW1lIG5hbWUuKSAgIFRoZSBzaWduZWQgdmFyaWFudHMgc2hvdWxkIGJlIHVzZWQKKyAgIHdpdGggZmxvYXRpbmcgcG9pbnQuICBGdXJ0aGVyLCBpZiBib3RoIG9wZXJhbmRzIGFyZSB6ZXJvcywgb3IgaWYgZWl0aGVyCisgICBvcGVyYW5kIGlzIE5hTiwgdGhlbiBpdCBpcyB1bnNwZWNpZmllZCB3aGljaCBvZiB0aGUgdHdvIG9wZXJhbmRzIGlzCisgICByZXR1cm5lZCBhcyB0aGUgcmVzdWx0LiAgKi8KKworREVGX1JUTF9FWFBSKFNNSU4sICJzbWluIiwgImVlIiwgUlRYX0NPTU1fQVJJVEgpCitERUZfUlRMX0VYUFIoU01BWCwgInNtYXgiLCAiZWUiLCBSVFhfQ09NTV9BUklUSCkKK0RFRl9SVExfRVhQUihVTUlOLCAidW1pbiIsICJlZSIsIFJUWF9DT01NX0FSSVRIKQorREVGX1JUTF9FWFBSKFVNQVgsICJ1bWF4IiwgImVlIiwgUlRYX0NPTU1fQVJJVEgpCisKKy8qIFRoZXNlIHVuYXJ5IG9wZXJhdGlvbnMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IGluY3JlbWVudGF0aW9uCisgICBhbmQgZGVjcmVtZW50YXRpb24gYXMgdGhleSBvY2N1ciBpbiBtZW1vcnkgYWRkcmVzc2VzLgorICAgVGhlIGFtb3VudCBvZiBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGFyZSBub3QgcmVwcmVzZW50ZWQKKyAgIGJlY2F1c2UgdGhleSBjYW4gYmUgdW5kZXJzdG9vZCBmcm9tIHRoZSBtYWNoaW5lLW1vZGUgb2YgdGhlCisgICBjb250YWluaW5nIE1FTS4gIFRoZXNlIG9wZXJhdGlvbnMgZXhpc3QgaW4gb25seSB0d28gY2FzZXM6CisgICAxLiBwdXNoZXMgb250byB0aGUgc3RhY2suCisgICAyLiBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGF1dG8taW5jLWRlYyBwYXNzLiAgKi8KK0RFRl9SVExfRVhQUihQUkVfREVDLCAicHJlX2RlYyIsICJlIiwgUlRYX0FVVE9JTkMpCitERUZfUlRMX0VYUFIoUFJFX0lOQywgInByZV9pbmMiLCAiZSIsIFJUWF9BVVRPSU5DKQorREVGX1JUTF9FWFBSKFBPU1RfREVDLCAicG9zdF9kZWMiLCAiZSIsIFJUWF9BVVRPSU5DKQorREVGX1JUTF9FWFBSKFBPU1RfSU5DLCAicG9zdF9pbmMiLCAiZSIsIFJUWF9BVVRPSU5DKQorCisvKiBUaGVzZSBiaW5hcnkgb3BlcmF0aW9ucyBhcmUgdXNlZCB0byByZXByZXNlbnQgZ2VuZXJpYyBhZGRyZXNzCisgICBzaWRlLWVmZmVjdHMgaW4gbWVtb3J5IGFkZHJlc3NlcywgZXhjZXB0IGZvciBzaW1wbGUgaW5jcmVtZW50YXRpb24KKyAgIG9yIGRlY3JlbWVudGF0aW9uIHdoaWNoIHVzZSB0aGUgYWJvdmUgb3BlcmF0aW9ucy4gIFRoZXkgYXJlCisgICBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGxpZmVfYW5hbHlzaXMgcGFzcyBpbiBmbG93LmMuCisgICBUaGUgZmlyc3Qgb3BlcmFuZCBpcyBhIFJFRyB3aGljaCBpcyB1c2VkIGFzIHRoZSBhZGRyZXNzLgorICAgVGhlIHNlY29uZCBvcGVyYW5kIGlzIGFuIGV4cHJlc3Npb24gdGhhdCBpcyBhc3NpZ25lZCB0byB0aGUKKyAgIHJlZ2lzdGVyLCBlaXRoZXIgYmVmb3JlIChQUkVfTU9ESUZZKSBvciBhZnRlciAoUE9TVF9NT0RJRlkpCisgICBldmFsdWF0aW5nIHRoZSBhZGRyZXNzLgorICAgQ3VycmVudGx5LCB0aGUgY29tcGlsZXIgY2FuIG9ubHkgaGFuZGxlIHNlY29uZCBvcGVyYW5kcyBvZiB0aGUKKyAgIGZvcm0gKHBsdXMgKHJlZykgKHJlZykpIGFuZCAocGx1cyAocmVnKSAoY29uc3RfaW50KSksIHdoZXJlCisgICB0aGUgZmlyc3Qgb3BlcmFuZCBvZiB0aGUgUExVUyBoYXMgdG8gYmUgdGhlIHNhbWUgcmVnaXN0ZXIgYXMKKyAgIHRoZSBmaXJzdCBvcGVyYW5kIG9mIHRoZSAqX01PRElGWS4gICovCitERUZfUlRMX0VYUFIoUFJFX01PRElGWSwgInByZV9tb2RpZnkiLCAiZWUiLCBSVFhfQVVUT0lOQykKK0RFRl9SVExfRVhQUihQT1NUX01PRElGWSwgInBvc3RfbW9kaWZ5IiwgImVlIiwgUlRYX0FVVE9JTkMpCisKKy8qIENvbXBhcmlzb24gb3BlcmF0aW9ucy4gIFRoZSBvcmRlcmVkIGNvbXBhcmlzb25zIGV4aXN0IGluIHR3bworICAgZmxhdm9ycywgc2lnbmVkIGFuZCB1bnNpZ25lZC4gICovCitERUZfUlRMX0VYUFIoTkUsICJuZSIsICJlZSIsIFJUWF9DT01NX0NPTVBBUkUpCitERUZfUlRMX0VYUFIoRVEsICJlcSIsICJlZSIsIFJUWF9DT01NX0NPTVBBUkUpCitERUZfUlRMX0VYUFIoR0UsICJnZSIsICJlZSIsIFJUWF9DT01QQVJFKQorREVGX1JUTF9FWFBSKEdULCAiZ3QiLCAiZWUiLCBSVFhfQ09NUEFSRSkKK0RFRl9SVExfRVhQUihMRSwgImxlIiwgImVlIiwgUlRYX0NPTVBBUkUpCitERUZfUlRMX0VYUFIoTFQsICJsdCIsICJlZSIsIFJUWF9DT01QQVJFKQorREVGX1JUTF9FWFBSKEdFVSwgImdldSIsICJlZSIsIFJUWF9DT01QQVJFKQorREVGX1JUTF9FWFBSKEdUVSwgImd0dSIsICJlZSIsIFJUWF9DT01QQVJFKQorREVGX1JUTF9FWFBSKExFVSwgImxldSIsICJlZSIsIFJUWF9DT01QQVJFKQorREVGX1JUTF9FWFBSKExUVSwgImx0dSIsICJlZSIsIFJUWF9DT01QQVJFKQorCisvKiBBZGRpdGlvbmFsIGZsb2F0aW5nIHBvaW50IHVub3JkZXJlZCBjb21wYXJpc29uIGZsYXZvcnMuICAqLworREVGX1JUTF9FWFBSKFVOT1JERVJFRCwgInVub3JkZXJlZCIsICJlZSIsIFJUWF9DT01NX0NPTVBBUkUpCitERUZfUlRMX0VYUFIoT1JERVJFRCwgIm9yZGVyZWQiLCAiZWUiLCBSVFhfQ09NTV9DT01QQVJFKQorCisvKiBUaGVzZSBhcmUgZXF1aXZhbGVudCB0byB1bm9yZGVyZWQgb3IgLi4uICAqLworREVGX1JUTF9FWFBSKFVORVEsICJ1bmVxIiwgImVlIiwgUlRYX0NPTU1fQ09NUEFSRSkKK0RFRl9SVExfRVhQUihVTkdFLCAidW5nZSIsICJlZSIsIFJUWF9DT01QQVJFKQorREVGX1JUTF9FWFBSKFVOR1QsICJ1bmd0IiwgImVlIiwgUlRYX0NPTVBBUkUpCitERUZfUlRMX0VYUFIoVU5MRSwgInVubGUiLCAiZWUiLCBSVFhfQ09NUEFSRSkKK0RFRl9SVExfRVhQUihVTkxULCAidW5sdCIsICJlZSIsIFJUWF9DT01QQVJFKQorCisvKiBUaGlzIGlzIGFuIG9yZGVyZWQgTkUsIGllICFVTkVRLCBpZSBmYWxzZSBmb3IgTmFOLiAgKi8KK0RFRl9SVExfRVhQUihMVEdULCAibHRndCIsICJlZSIsIFJUWF9DT01NX0NPTVBBUkUpCisKKy8qIFJlcHJlc2VudHMgdGhlIHJlc3VsdCBvZiBzaWduLWV4dGVuZGluZyB0aGUgc29sZSBvcGVyYW5kLgorICAgVGhlIG1hY2hpbmUgbW9kZXMgb2YgdGhlIG9wZXJhbmQgYW5kIG9mIHRoZSBTSUdOX0VYVEVORCBleHByZXNzaW9uCisgICBkZXRlcm1pbmUgaG93IG11Y2ggc2lnbi1leHRlbnNpb24gaXMgZ29pbmcgb24uICAqLworREVGX1JUTF9FWFBSKFNJR05fRVhURU5ELCAic2lnbl9leHRlbmQiLCAiZSIsIFJUWF9VTkFSWSkKKworLyogU2ltaWxhciBmb3IgemVyby1leHRlbnNpb24gKHN1Y2ggYXMgdW5zaWduZWQgc2hvcnQgdG8gaW50KS4gICovCitERUZfUlRMX0VYUFIoWkVST19FWFRFTkQsICJ6ZXJvX2V4dGVuZCIsICJlIiwgUlRYX1VOQVJZKQorCisvKiBTaW1pbGFyIGJ1dCBoZXJlIHRoZSBvcGVyYW5kIGhhcyBhIHdpZGVyIG1vZGUuICAqLworREVGX1JUTF9FWFBSKFRSVU5DQVRFLCAidHJ1bmNhdGUiLCAiZSIsIFJUWF9VTkFSWSkKKworLyogU2ltaWxhciBmb3IgZXh0ZW5kaW5nIGZsb2F0aW5nLXBvaW50IHZhbHVlcyAoc3VjaCBhcyBTRm1vZGUgdG8gREZtb2RlKS4gICovCitERUZfUlRMX0VYUFIoRkxPQVRfRVhURU5ELCAiZmxvYXRfZXh0ZW5kIiwgImUiLCBSVFhfVU5BUlkpCitERUZfUlRMX0VYUFIoRkxPQVRfVFJVTkNBVEUsICJmbG9hdF90cnVuY2F0ZSIsICJlIiwgUlRYX1VOQVJZKQorCisvKiBDb252ZXJzaW9uIG9mIGZpeGVkIHBvaW50IG9wZXJhbmQgdG8gZmxvYXRpbmcgcG9pbnQgdmFsdWUuICAqLworREVGX1JUTF9FWFBSKEZMT0FULCAiZmxvYXQiLCAiZSIsIFJUWF9VTkFSWSkKKworLyogV2l0aCBmaXhlZC1wb2ludCBtYWNoaW5lIG1vZGU6CisgICBDb252ZXJzaW9uIG9mIGZsb2F0aW5nIHBvaW50IG9wZXJhbmQgdG8gZml4ZWQgcG9pbnQgdmFsdWUuCisgICBWYWx1ZSBpcyBkZWZpbmVkIG9ubHkgd2hlbiB0aGUgb3BlcmFuZCdzIHZhbHVlIGlzIGFuIGludGVnZXIuCisgICBXaXRoIGZsb2F0aW5nLXBvaW50IG1hY2hpbmUgbW9kZSAoYW5kIG9wZXJhbmQgd2l0aCBzYW1lIG1vZGUpOgorICAgT3BlcmFuZCBpcyByb3VuZGVkIHRvd2FyZCB6ZXJvIHRvIHByb2R1Y2UgYW4gaW50ZWdlciB2YWx1ZQorICAgcmVwcmVzZW50ZWQgaW4gZmxvYXRpbmcgcG9pbnQuICAqLworREVGX1JUTF9FWFBSKEZJWCwgImZpeCIsICJlIiwgUlRYX1VOQVJZKQorCisvKiBDb252ZXJzaW9uIG9mIHVuc2lnbmVkIGZpeGVkIHBvaW50IG9wZXJhbmQgdG8gZmxvYXRpbmcgcG9pbnQgdmFsdWUuICAqLworREVGX1JUTF9FWFBSKFVOU0lHTkVEX0ZMT0FULCAidW5zaWduZWRfZmxvYXQiLCAiZSIsIFJUWF9VTkFSWSkKKworLyogV2l0aCBmaXhlZC1wb2ludCBtYWNoaW5lIG1vZGU6CisgICBDb252ZXJzaW9uIG9mIGZsb2F0aW5nIHBvaW50IG9wZXJhbmQgdG8gKnVuc2lnbmVkKiBmaXhlZCBwb2ludCB2YWx1ZS4KKyAgIFZhbHVlIGlzIGRlZmluZWQgb25seSB3aGVuIHRoZSBvcGVyYW5kJ3MgdmFsdWUgaXMgYW4gaW50ZWdlci4gICovCitERUZfUlRMX0VYUFIoVU5TSUdORURfRklYLCAidW5zaWduZWRfZml4IiwgImUiLCBSVFhfVU5BUlkpCisKKy8qIENvbnZlcnNpb25zIGludm9sdmluZyBmcmFjdGlvbmFsIGZpeGVkLXBvaW50IHR5cGVzIHdpdGhvdXQgc2F0dXJhdGlvbiwKKyAgIGluY2x1ZGluZzoKKyAgICAgZnJhY3Rpb25hbCB0byBmcmFjdGlvbmFsIChvZiBkaWZmZXJlbnQgcHJlY2lzaW9uKSwKKyAgICAgc2lnbmVkIGludGVnZXIgdG8gZnJhY3Rpb25hbCwKKyAgICAgZnJhY3Rpb25hbCB0byBzaWduZWQgaW50ZWdlciwKKyAgICAgZmxvYXRpbmcgcG9pbnQgdG8gZnJhY3Rpb25hbCwKKyAgICAgZnJhY3Rpb25hbCB0byBmbG9hdGluZyBwb2ludC4KKyAgIE5PVEU6IGZyYWN0aW9uYWwgY2FuIGJlIGVpdGhlciBzaWduZWQgb3IgdW5zaWduZWQgZm9yIGNvbnZlcnNpb25zLiAgKi8KK0RFRl9SVExfRVhQUihGUkFDVF9DT05WRVJULCAiZnJhY3RfY29udmVydCIsICJlIiwgUlRYX1VOQVJZKQorCisvKiBDb252ZXJzaW9ucyBpbnZvbHZpbmcgZnJhY3Rpb25hbCBmaXhlZC1wb2ludCB0eXBlcyBhbmQgdW5zaWduZWQgaW50ZWdlcgorICAgd2l0aG91dCBzYXR1cmF0aW9uLCBpbmNsdWRpbmc6CisgICAgIHVuc2lnbmVkIGludGVnZXIgdG8gZnJhY3Rpb25hbCwKKyAgICAgZnJhY3Rpb25hbCB0byB1bnNpZ25lZCBpbnRlZ2VyLgorICAgTk9URTogZnJhY3Rpb25hbCBjYW4gYmUgZWl0aGVyIHNpZ25lZCBvciB1bnNpZ25lZCBmb3IgY29udmVyc2lvbnMuICAqLworREVGX1JUTF9FWFBSKFVOU0lHTkVEX0ZSQUNUX0NPTlZFUlQsICJ1bnNpZ25lZF9mcmFjdF9jb252ZXJ0IiwgImUiLCBSVFhfVU5BUlkpCisKKy8qIENvbnZlcnNpb25zIGludm9sdmluZyBmcmFjdGlvbmFsIGZpeGVkLXBvaW50IHR5cGVzIHdpdGggc2F0dXJhdGlvbiwKKyAgIGluY2x1ZGluZzoKKyAgICAgZnJhY3Rpb25hbCB0byBmcmFjdGlvbmFsIChvZiBkaWZmZXJlbnQgcHJlY2lzaW9uKSwKKyAgICAgc2lnbmVkIGludGVnZXIgdG8gZnJhY3Rpb25hbCwKKyAgICAgZmxvYXRpbmcgcG9pbnQgdG8gZnJhY3Rpb25hbC4KKyAgIE5PVEU6IGZyYWN0aW9uYWwgY2FuIGJlIGVpdGhlciBzaWduZWQgb3IgdW5zaWduZWQgZm9yIGNvbnZlcnNpb25zLiAgKi8KK0RFRl9SVExfRVhQUihTQVRfRlJBQ1QsICJzYXRfZnJhY3QiLCAiZSIsIFJUWF9VTkFSWSkKKworLyogQ29udmVyc2lvbnMgaW52b2x2aW5nIGZyYWN0aW9uYWwgZml4ZWQtcG9pbnQgdHlwZXMgYW5kIHVuc2lnbmVkIGludGVnZXIKKyAgIHdpdGggc2F0dXJhdGlvbiwgaW5jbHVkaW5nOgorICAgICB1bnNpZ25lZCBpbnRlZ2VyIHRvIGZyYWN0aW9uYWwuCisgICBOT1RFOiBmcmFjdGlvbmFsIGNhbiBiZSBlaXRoZXIgc2lnbmVkIG9yIHVuc2lnbmVkIGZvciBjb252ZXJzaW9ucy4gICovCitERUZfUlRMX0VYUFIoVU5TSUdORURfU0FUX0ZSQUNULCAidW5zaWduZWRfc2F0X2ZyYWN0IiwgImUiLCBSVFhfVU5BUlkpCisKKy8qIEFic29sdXRlIHZhbHVlICovCitERUZfUlRMX0VYUFIoQUJTLCAiYWJzIiwgImUiLCBSVFhfVU5BUlkpCisKKy8qIFNxdWFyZSByb290ICovCitERUZfUlRMX0VYUFIoU1FSVCwgInNxcnQiLCAiZSIsIFJUWF9VTkFSWSkKKworLyogU3dhcCBieXRlcy4gICovCitERUZfUlRMX0VYUFIoQlNXQVAsICJic3dhcCIsICJlIiwgUlRYX1VOQVJZKQorCisvKiBGaW5kIGZpcnN0IGJpdCB0aGF0IGlzIHNldC4KKyAgIFZhbHVlIGlzIDEgKyBudW1iZXIgb2YgdHJhaWxpbmcgemVyb3MgaW4gdGhlIGFyZy4sCisgICBvciAwIGlmIGFyZyBpcyAwLiAgKi8KK0RFRl9SVExfRVhQUihGRlMsICJmZnMiLCAiZSIsIFJUWF9VTkFSWSkKKworLyogQ291bnQgbGVhZGluZyB6ZXJvcy4gICovCitERUZfUlRMX0VYUFIoQ0xaLCAiY2x6IiwgImUiLCBSVFhfVU5BUlkpCisKKy8qIENvdW50IHRyYWlsaW5nIHplcm9zLiAgKi8KK0RFRl9SVExfRVhQUihDVFosICJjdHoiLCAiZSIsIFJUWF9VTkFSWSkKKworLyogUG9wdWxhdGlvbiBjb3VudCAobnVtYmVyIG9mIDEgYml0cykuICAqLworREVGX1JUTF9FWFBSKFBPUENPVU5ULCAicG9wY291bnQiLCAiZSIsIFJUWF9VTkFSWSkKKworLyogUG9wdWxhdGlvbiBwYXJpdHkgKG51bWJlciBvZiAxIGJpdHMgbW9kdWxvIDIpLiAgKi8KK0RFRl9SVExfRVhQUihQQVJJVFksICJwYXJpdHkiLCAiZSIsIFJUWF9VTkFSWSkKKworLyogUmVmZXJlbmNlIHRvIGEgc2lnbmVkIGJpdC1maWVsZCBvZiBzcGVjaWZpZWQgc2l6ZSBhbmQgcG9zaXRpb24uCisgICBPcGVyYW5kIDAgaXMgdGhlIG1lbW9yeSB1bml0ICh1c3VhbGx5IFNJbW9kZSBvciBRSW1vZGUpIHdoaWNoCisgICBjb250YWlucyB0aGUgZmllbGQncyBmaXJzdCBiaXQuICBPcGVyYW5kIDEgaXMgdGhlIHdpZHRoLCBpbiBiaXRzLgorICAgT3BlcmFuZCAyIGlzIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0aGUgbWVtb3J5IHVuaXQgYmVmb3JlIHRoZQorICAgZmlyc3QgYml0IG9mIHRoaXMgZmllbGQuCisgICBJZiBCSVRTX0JJR19FTkRJQU4gaXMgZGVmaW5lZCwgdGhlIGZpcnN0IGJpdCBpcyB0aGUgbXNiIGFuZAorICAgb3BlcmFuZCAyIGNvdW50cyBmcm9tIHRoZSBtc2Igb2YgdGhlIG1lbW9yeSB1bml0LgorICAgT3RoZXJ3aXNlLCB0aGUgZmlyc3QgYml0IGlzIHRoZSBsc2IgYW5kIG9wZXJhbmQgMiBjb3VudHMgZnJvbQorICAgdGhlIGxzYiBvZiB0aGUgbWVtb3J5IHVuaXQuCisgICBUaGlzIGtpbmQgb2YgZXhwcmVzc2lvbiBjYW4gbm90IGFwcGVhciBhcyBhbiBsdmFsdWUgaW4gUlRMLiAgKi8KK0RFRl9SVExfRVhQUihTSUdOX0VYVFJBQ1QsICJzaWduX2V4dHJhY3QiLCAiZWVlIiwgUlRYX0JJVEZJRUxEX09QUykKKworLyogU2ltaWxhciBmb3IgdW5zaWduZWQgYml0LWZpZWxkLgorICAgQnV0IG5vdGUhICBUaGlzIGtpbmQgb2YgZXhwcmVzc2lvbiBfY2FuXyBhcHBlYXIgYXMgYW4gbHZhbHVlLiAgKi8KK0RFRl9SVExfRVhQUihaRVJPX0VYVFJBQ1QsICJ6ZXJvX2V4dHJhY3QiLCAiZWVlIiwgUlRYX0JJVEZJRUxEX09QUykKKworLyogRm9yIFJJU0MgbWFjaGluZXMuICBUaGVzZSBzYXZlIG1lbW9yeSB3aGVuIHNwbGl0dGluZyBpbnNucy4gICovCisKKy8qIEhJR0ggYXJlIHRoZSBoaWdoLW9yZGVyIGJpdHMgb2YgYSBjb25zdGFudCBleHByZXNzaW9uLiAgKi8KK0RFRl9SVExfRVhQUihISUdILCAiaGlnaCIsICJlIiwgUlRYX0NPTlNUX09CSikKKworLyogTE9fU1VNIGlzIHRoZSBzdW0gb2YgYSByZWdpc3RlciBhbmQgdGhlIGxvdy1vcmRlciBiaXRzCisgICBvZiBhIGNvbnN0YW50IGV4cHJlc3Npb24uICAqLworREVGX1JUTF9FWFBSKExPX1NVTSwgImxvX3N1bSIsICJlZSIsIFJUWF9PQkopCisKKy8qIERlc2NyaWJlcyBhIG1lcmdlIG9wZXJhdGlvbiBiZXR3ZWVuIHR3byB2ZWN0b3IgdmFsdWVzLgorICAgT3BlcmFuZHMgMCBhbmQgMSBhcmUgdGhlIHZlY3RvcnMgdG8gYmUgbWVyZ2VkLCBvcGVyYW5kIDIgaXMgYSBiaXRtYXNrCisgICB0aGF0IHNwZWNpZmllcyB3aGVyZSB0aGUgcGFydHMgb2YgdGhlIHJlc3VsdCBhcmUgdGFrZW4gZnJvbS4gIFNldCBiaXRzCisgICBpbmRpY2F0ZSBvcGVyYW5kIDAsIGNsZWFyIGJpdHMgaW5kaWNhdGUgb3BlcmFuZCAxLiAgVGhlIHBhcnRzIGFyZSBkZWZpbmVkCisgICBieSB0aGUgbW9kZSBvZiB0aGUgdmVjdG9ycy4gICovCitERUZfUlRMX0VYUFIoVkVDX01FUkdFLCAidmVjX21lcmdlIiwgImVlZSIsIFJUWF9URVJOQVJZKQorCisvKiBEZXNjcmliZXMgYW4gb3BlcmF0aW9uIHRoYXQgc2VsZWN0cyBwYXJ0cyBvZiBhIHZlY3Rvci4KKyAgIE9wZXJhbmRzIDAgaXMgdGhlIHNvdXJjZSB2ZWN0b3IsIG9wZXJhbmQgMSBpcyBhIFBBUkFMTEVMIHRoYXQgY29udGFpbnMKKyAgIGEgQ09OU1RfSU5UIGZvciBlYWNoIG9mIHRoZSBzdWJwYXJ0cyBvZiB0aGUgcmVzdWx0IHZlY3RvciwgZ2l2aW5nIHRoZQorICAgbnVtYmVyIG9mIHRoZSBzb3VyY2Ugc3VicGFydCB0aGF0IHNob3VsZCBiZSBzdG9yZWQgaW50byBpdC4gICovCitERUZfUlRMX0VYUFIoVkVDX1NFTEVDVCwgInZlY19zZWxlY3QiLCAiZWUiLCBSVFhfQklOX0FSSVRIKQorCisvKiBEZXNjcmliZXMgYSB2ZWN0b3IgY29uY2F0IG9wZXJhdGlvbi4gIE9wZXJhbmRzIDAgYW5kIDEgYXJlIHRoZSBzb3VyY2UKKyAgIHZlY3RvcnMsIHRoZSByZXN1bHQgaXMgYSB2ZWN0b3IgdGhhdCBpcyBhcyBsb25nIGFzIG9wZXJhbmRzIDAgYW5kIDEKKyAgIGNvbWJpbmVkIGFuZCBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgdHdvIHNvdXJjZSB2ZWN0b3JzLiAgKi8KK0RFRl9SVExfRVhQUihWRUNfQ09OQ0FULCAidmVjX2NvbmNhdCIsICJlZSIsIFJUWF9CSU5fQVJJVEgpCisKKy8qIERlc2NyaWJlcyBhbiBvcGVyYXRpb24gdGhhdCBjb252ZXJ0cyBhIHNtYWxsIHZlY3RvciBpbnRvIGEgbGFyZ2VyIG9uZSBieQorICAgZHVwbGljYXRpbmcgdGhlIGlucHV0IHZhbHVlcy4gIFRoZSBvdXRwdXQgdmVjdG9yIG1vZGUgbXVzdCBoYXZlIHRoZSBzYW1lCisgICBzdWJtb2RlcyBhcyB0aGUgaW5wdXQgdmVjdG9yIG1vZGUsIGFuZCB0aGUgbnVtYmVyIG9mIG91dHB1dCBwYXJ0cyBtdXN0IGJlCisgICBhbiBpbnRlZ2VyIG11bHRpcGxlIG9mIHRoZSBudW1iZXIgb2YgaW5wdXQgcGFydHMuICAqLworREVGX1JUTF9FWFBSKFZFQ19EVVBMSUNBVEUsICJ2ZWNfZHVwbGljYXRlIiwgImUiLCBSVFhfVU5BUlkpCisKKy8qIEFkZGl0aW9uIHdpdGggc2lnbmVkIHNhdHVyYXRpb24gKi8KK0RFRl9SVExfRVhQUihTU19QTFVTLCAic3NfcGx1cyIsICJlZSIsIFJUWF9DT01NX0FSSVRIKQorCisvKiBBZGRpdGlvbiB3aXRoIHVuc2lnbmVkIHNhdHVyYXRpb24gKi8KK0RFRl9SVExfRVhQUihVU19QTFVTLCAidXNfcGx1cyIsICJlZSIsIFJUWF9DT01NX0FSSVRIKQorCisvKiBPcGVyYW5kIDAgbWludXMgb3BlcmFuZCAxLCB3aXRoIHNpZ25lZCBzYXR1cmF0aW9uLiAgKi8KK0RFRl9SVExfRVhQUihTU19NSU5VUywgInNzX21pbnVzIiwgImVlIiwgUlRYX0JJTl9BUklUSCkKKworLyogTmVnYXRpb24gd2l0aCBzaWduZWQgc2F0dXJhdGlvbi4gICovCitERUZfUlRMX0VYUFIoU1NfTkVHLCAic3NfbmVnIiwgImUiLCBSVFhfVU5BUlkpCisvKiBOZWdhdGlvbiB3aXRoIHVuc2lnbmVkIHNhdHVyYXRpb24uICAqLworREVGX1JUTF9FWFBSKFVTX05FRywgInVzX25lZyIsICJlIiwgUlRYX1VOQVJZKQorCisvKiBBYnNvbHV0ZSB2YWx1ZSB3aXRoIHNpZ25lZCBzYXR1cmF0aW9uLiAgKi8KK0RFRl9SVExfRVhQUihTU19BQlMsICJzc19hYnMiLCAiZSIsIFJUWF9VTkFSWSkKKworLyogU2hpZnQgbGVmdCB3aXRoIHNpZ25lZCBzYXR1cmF0aW9uLiAgKi8KK0RFRl9SVExfRVhQUihTU19BU0hJRlQsICJzc19hc2hpZnQiLCAiZWUiLCBSVFhfQklOX0FSSVRIKQorCisvKiBTaGlmdCBsZWZ0IHdpdGggdW5zaWduZWQgc2F0dXJhdGlvbi4gICovCitERUZfUlRMX0VYUFIoVVNfQVNISUZULCAidXNfYXNoaWZ0IiwgImVlIiwgUlRYX0JJTl9BUklUSCkKKworLyogT3BlcmFuZCAwIG1pbnVzIG9wZXJhbmQgMSwgd2l0aCB1bnNpZ25lZCBzYXR1cmF0aW9uLiAgKi8KK0RFRl9SVExfRVhQUihVU19NSU5VUywgInVzX21pbnVzIiwgImVlIiwgUlRYX0JJTl9BUklUSCkKKworLyogU2lnbmVkIHNhdHVyYXRpbmcgdHJ1bmNhdGUuICAqLworREVGX1JUTF9FWFBSKFNTX1RSVU5DQVRFLCAic3NfdHJ1bmNhdGUiLCAiZSIsIFJUWF9VTkFSWSkKKworLyogVW5zaWduZWQgc2F0dXJhdGluZyB0cnVuY2F0ZS4gICovCitERUZfUlRMX0VYUFIoVVNfVFJVTkNBVEUsICJ1c190cnVuY2F0ZSIsICJlIiwgUlRYX1VOQVJZKQorCisvKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgdmFyaWFibGUgYW5kIGl0cyBsb2NhdGlvbi4gICovCisvKiBDaGFuZ2VkICd0ZScgdG8gJ3RlaSc7IHRoZSAnaScgZmllbGQgaXMgZm9yIHJlY29yZGluZworICAgaW5pdGlhbGl6YXRpb24gc3RhdHVzIG9mIHZhcmlhYmxlcy4gICovCitERUZfUlRMX0VYUFIoVkFSX0xPQ0FUSU9OLCAidmFyX2xvY2F0aW9uIiwgInRlaSIsIFJUWF9FWFRSQSkKKworLyogQWxsIGV4cHJlc3Npb25zIGZyb20gdGhpcyBwb2ludCBmb3J3YXJkIGFwcGVhciBvbmx5IGluIG1hY2hpbmUKKyAgIGRlc2NyaXB0aW9ucy4gICovCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKKworLyogSW5jbHVkZSBhIHNlY29uZGFyeSBtYWNoaW5lLWRlc2NyaXB0aW9uIGZpbGUgYXQgdGhpcyBwb2ludC4gICovCitERUZfUlRMX0VYUFIoSU5DTFVERSwgImluY2x1ZGUiLCAicyIsIFJUWF9FWFRSQSkKKworLyogUGF0dGVybi1tYXRjaGluZyBvcGVyYXRvcnM6ICAqLworCisvKiBVc2UgdGhlIGZ1bmN0aW9uIG5hbWVkIGJ5IHRoZSBzZWNvbmQgYXJnICh0aGUgc3RyaW5nKQorICAgYXMgYSBwcmVkaWNhdGU7IGlmIG1hdGNoZWQsIHN0b3JlIHRoZSBzdHJ1Y3R1cmUgdGhhdCB3YXMgbWF0Y2hlZAorICAgaW4gdGhlIG9wZXJhbmQgdGFibGUgYXQgaW5kZXggc3BlY2lmaWVkIGJ5IHRoZSBmaXJzdCBhcmcgKHRoZSBpbnRlZ2VyKS4KKyAgIElmIHRoZSBzZWNvbmQgYXJnIGlzIHRoZSBudWxsIHN0cmluZywgdGhlIHN0cnVjdHVyZSBpcyBqdXN0IHN0b3JlZC4KKworICAgQSB0aGlyZCBzdHJpbmcgYXJndW1lbnQgaW5kaWNhdGVzIHRvIHRoZSByZWdpc3RlciBhbGxvY2F0b3IgcmVzdHJpY3Rpb25zCisgICBvbiB3aGVyZSB0aGUgb3BlcmFuZCBjYW4gYmUgYWxsb2NhdGVkLgorCisgICBJZiB0aGUgdGFyZ2V0IG5lZWRzIG5vIHJlc3RyaWN0aW9uIG9uIGFueSBpbnN0cnVjdGlvbiB0aGlzIGZpZWxkIHNob3VsZAorICAgYmUgdGhlIG51bGwgc3RyaW5nLgorCisgICBUaGUgc3RyaW5nIGlzIHByZXBlbmRlZCBieToKKyAgICc9JyB0byBpbmRpY2F0ZSB0aGUgb3BlcmFuZCBpcyBvbmx5IHdyaXR0ZW4gdG8uCisgICAnKycgdG8gaW5kaWNhdGUgdGhlIG9wZXJhbmQgaXMgYm90aCByZWFkIGFuZCB3cml0dGVuIHRvLgorCisgICBFYWNoIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nIHJlcHJlc2VudHMgYW4gYWxsb2NhYmxlIGNsYXNzIGZvciBhbiBvcGVyYW5kLgorICAgJ2cnIGluZGljYXRlcyB0aGUgb3BlcmFuZCBjYW4gYmUgYW55IHZhbGlkIGNsYXNzLgorICAgJ2knIGluZGljYXRlcyB0aGUgb3BlcmFuZCBjYW4gYmUgaW1tZWRpYXRlIChpbiB0aGUgaW5zdHJ1Y3Rpb24pIGRhdGEuCisgICAncicgaW5kaWNhdGVzIHRoZSBvcGVyYW5kIGNhbiBiZSBpbiBhIHJlZ2lzdGVyLgorICAgJ20nIGluZGljYXRlcyB0aGUgb3BlcmFuZCBjYW4gYmUgaW4gbWVtb3J5LgorICAgJ28nIGEgc3Vic2V0IG9mIHRoZSAnbScgY2xhc3MuICBUaG9zZSBtZW1vcnkgYWRkcmVzc2luZyBtb2RlcyB0aGF0CisgICAgICAgY2FuIGJlIG9mZnNldCBhdCBjb21waWxlIHRpbWUgKGhhdmUgYSBjb25zdGFudCBhZGRlZCB0byB0aGVtKS4KKworICAgT3RoZXIgY2hhcmFjdGVycyBpbmRpY2F0ZSB0YXJnZXQgZGVwZW5kZW50IG9wZXJhbmQgY2xhc3NlcyBhbmQKKyAgIGFyZSBkZXNjcmliZWQgaW4gZWFjaCB0YXJnZXQncyBtYWNoaW5lIGRlc2NyaXB0aW9uLgorCisgICBGb3IgaW5zdHJ1Y3Rpb25zIHdpdGggbW9yZSB0aGFuIG9uZSBvcGVyYW5kLCBzZXRzIG9mIGNsYXNzZXMgY2FuIGJlCisgICBzZXBhcmF0ZWQgYnkgYSBjb21tYSB0byBpbmRpY2F0ZSB0aGUgYXBwcm9wcmlhdGUgbXVsdGktb3BlcmFuZCBjb25zdHJhaW50cy4KKyAgIFRoZXJlIG11c3QgYmUgYSAxIHRvIDEgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiB0aGVzZSBzZXRzIG9mIGNsYXNzZXMgaW4KKyAgIGFsbCBvcGVyYW5kcyBmb3IgYW4gaW5zdHJ1Y3Rpb24uCisgICAqLworREVGX1JUTF9FWFBSKE1BVENIX09QRVJBTkQsICJtYXRjaF9vcGVyYW5kIiwgImlzcyIsIFJUWF9NQVRDSCkKKworLyogTWF0Y2ggYSBTQ1JBVENIIG9yIGEgcmVnaXN0ZXIuICBXaGVuIHVzZWQgdG8gZ2VuZXJhdGUgcnRsLCBhCisgICBTQ1JBVENIIGlzIGdlbmVyYXRlZC4gIEFzIGZvciBNQVRDSF9PUEVSQU5ELCB0aGUgbW9kZSBzcGVjaWZpZXMKKyAgIHRoZSBkZXNpcmVkIG1vZGUgYW5kIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgb3BlcmFuZCBudW1iZXIuCisgICBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBjb25zdHJhaW50LiAgKi8KK0RFRl9SVExfRVhQUihNQVRDSF9TQ1JBVENILCAibWF0Y2hfc2NyYXRjaCIsICJpcyIsIFJUWF9NQVRDSCkKKworLyogQXBwbHkgYSBwcmVkaWNhdGUsIEFORCBtYXRjaCByZWN1cnNpdmVseSB0aGUgb3BlcmFuZHMgb2YgdGhlIHJ0eC4KKyAgIE9wZXJhbmQgMCBpcyB0aGUgb3BlcmFuZC1udW1iZXIsIGFzIGluIG1hdGNoX29wZXJhbmQuCisgICBPcGVyYW5kIDEgaXMgYSBwcmVkaWNhdGUgdG8gYXBwbHkgKGFzIGEgc3RyaW5nLCBhIGZ1bmN0aW9uIG5hbWUpLgorICAgT3BlcmFuZCAyIGlzIGEgdmVjdG9yIG9mIGV4cHJlc3Npb25zLCBlYWNoIG9mIHdoaWNoIG11c3QgbWF0Y2gKKyAgIG9uZSBzdWJleHByZXNzaW9uIG9mIHRoZSBydHggdGhpcyBjb25zdHJ1Y3QgaXMgbWF0Y2hpbmcuICAqLworREVGX1JUTF9FWFBSKE1BVENIX09QRVJBVE9SLCAibWF0Y2hfb3BlcmF0b3IiLCAiaXNFIiwgUlRYX01BVENIKQorCisvKiBNYXRjaCBhIFBBUkFMTEVMIG9mIGFyYml0cmFyeSBsZW5ndGguICBUaGUgcHJlZGljYXRlIGlzIGFwcGxpZWQKKyAgIHRvIHRoZSBQQVJBTExFTCBhbmQgdGhlIGluaXRpYWwgZXhwcmVzc2lvbnMgaW4gdGhlIFBBUkFMTEVMIGFyZSBtYXRjaGVkLgorICAgT3BlcmFuZCAwIGlzIHRoZSBvcGVyYW5kLW51bWJlciwgYXMgaW4gbWF0Y2hfb3BlcmFuZC4KKyAgIE9wZXJhbmQgMSBpcyBhIHByZWRpY2F0ZSB0byBhcHBseSB0byB0aGUgUEFSQUxMRUwuCisgICBPcGVyYW5kIDIgaXMgYSB2ZWN0b3Igb2YgZXhwcmVzc2lvbnMsIGVhY2ggb2Ygd2hpY2ggbXVzdCBtYXRjaCB0aGUKKyAgIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBpbiB0aGUgUEFSQUxMRUwuICAqLworREVGX1JUTF9FWFBSKE1BVENIX1BBUkFMTEVMLCAibWF0Y2hfcGFyYWxsZWwiLCAiaXNFIiwgUlRYX01BVENIKQorCisvKiBNYXRjaCBvbmx5IHNvbWV0aGluZyBlcXVhbCB0byB3aGF0IGlzIHN0b3JlZCBpbiB0aGUgb3BlcmFuZCB0YWJsZQorICAgYXQgdGhlIGluZGV4IHNwZWNpZmllZCBieSB0aGUgYXJndW1lbnQuICBVc2Ugd2l0aCBNQVRDSF9PUEVSQU5ELiAgKi8KK0RFRl9SVExfRVhQUihNQVRDSF9EVVAsICJtYXRjaF9kdXAiLCAiaSIsIFJUWF9NQVRDSCkKKworLyogTWF0Y2ggb25seSBzb21ldGhpbmcgZXF1YWwgdG8gd2hhdCBpcyBzdG9yZWQgaW4gdGhlIG9wZXJhbmQgdGFibGUKKyAgIGF0IHRoZSBpbmRleCBzcGVjaWZpZWQgYnkgdGhlIGFyZ3VtZW50LiAgVXNlIHdpdGggTUFUQ0hfT1BFUkFUT1IuICAqLworREVGX1JUTF9FWFBSKE1BVENIX09QX0RVUCwgIm1hdGNoX29wX2R1cCIsICJpRSIsIFJUWF9NQVRDSCkKKworLyogTWF0Y2ggb25seSBzb21ldGhpbmcgZXF1YWwgdG8gd2hhdCBpcyBzdG9yZWQgaW4gdGhlIG9wZXJhbmQgdGFibGUKKyAgIGF0IHRoZSBpbmRleCBzcGVjaWZpZWQgYnkgdGhlIGFyZ3VtZW50LiAgVXNlIHdpdGggTUFUQ0hfUEFSQUxMRUwuICAqLworREVGX1JUTF9FWFBSKE1BVENIX1BBUl9EVVAsICJtYXRjaF9wYXJfZHVwIiwgImlFIiwgUlRYX01BVENIKQorCisvKiBBcHBlYXJzIG9ubHkgaW4gZGVmaW5lX3ByZWRpY2F0ZS9kZWZpbmVfc3BlY2lhbF9wcmVkaWNhdGUKKyAgIGV4cHJlc3Npb25zLiAgRXZhbHVhdGVzIHRydWUgb25seSBpZiB0aGUgb3BlcmFuZCBoYXMgYW4gUlRYIGNvZGUKKyAgIGZyb20gdGhlIHNldCBnaXZlbiBieSB0aGUgYXJndW1lbnQgKGEgY29tbWEtc2VwYXJhdGVkIGxpc3QpLiAgSWYgdGhlCisgICBzZWNvbmQgYXJndW1lbnQgaXMgcHJlc2VudCBhbmQgbm9uZW1wdHksIGl0IGlzIGEgc2VxdWVuY2Ugb2YgZGlnaXRzCisgICBhbmQvb3IgbGV0dGVycyB3aGljaCBpbmRpY2F0ZXMgdGhlIHN1YmV4cHJlc3Npb24gdG8gdGVzdCwgdXNpbmcgdGhlCisgICBzYW1lIHN5bnRheCBhcyBnZW5leHRyYWN0L2dlbnJlY29nJ3MgbG9jYXRpb24gc3RyaW5nczogMC05IGZvcgorICAgWEVYUCAob3AsIG4pLCBhLXogZm9yIFhWRUNFWFAgKG9wLCAwLCBuKTsgZWFjaCBjaGFyYWN0ZXIgYXBwbGllcyB0bworICAgdGhlIHJlc3VsdCBvZiB0aGUgb25lIGJlZm9yZSBpdC4gICovCitERUZfUlRMX0VYUFIoTUFUQ0hfQ09ERSwgIm1hdGNoX2NvZGUiLCAic3MiLCBSVFhfTUFUQ0gpCisKKy8qIEFwcGVhcnMgb25seSBpbiBkZWZpbmVfcHJlZGljYXRlL2RlZmluZV9zcGVjaWFsX3ByZWRpY2F0ZQorICAgIGV4cHJlc3Npb25zLiAgVGhlIGFyZ3VtZW50IGlzIGEgQyBleHByZXNzaW9uIHRvIGJlIGluamVjdGVkIGF0IHRoaXMKKyAgICBwb2ludCBpbiB0aGUgcHJlZGljYXRlIGZvcm11bGEuICAqLworREVGX1JUTF9FWFBSKE1BVENIX1RFU1QsICJtYXRjaF90ZXN0IiwgInMiLCBSVFhfTUFUQ0gpCisKKy8qIEluc24gKGFuZCByZWxhdGVkKSBkZWZpbml0aW9ucy4gICovCisKKy8qIERlZmluaXRpb24gb2YgdGhlIHBhdHRlcm4gZm9yIG9uZSBraW5kIG9mIGluc3RydWN0aW9uLgorICAgT3BlcmFuZDoKKyAgIDA6IG5hbWVzIHRoaXMgaW5zdHJ1Y3Rpb24uCisgICAgICBJZiB0aGUgbmFtZSBpcyB0aGUgbnVsbCBzdHJpbmcsIHRoZSBpbnN0cnVjdGlvbiBpcyBpbiB0aGUKKyAgICAgIG1hY2hpbmUgZGVzY3JpcHRpb24ganVzdCB0byBiZSByZWNvZ25pemVkLCBhbmQgd2lsbCBuZXZlciBiZSBlbWl0dGVkIGJ5CisgICAgICB0aGUgdHJlZSB0byBydGwgZXhwYW5kZXIuCisgICAxOiBpcyB0aGUgcGF0dGVybi4KKyAgIDI6IGlzIGEgc3RyaW5nIHdoaWNoIGlzIGEgQyBleHByZXNzaW9uCisgICAgICBnaXZpbmcgYW4gYWRkaXRpb25hbCBjb25kaXRpb24gZm9yIHJlY29nbml6aW5nIHRoaXMgcGF0dGVybi4KKyAgICAgIEEgbnVsbCBzdHJpbmcgbWVhbnMgbm8gZXh0cmEgY29uZGl0aW9uLgorICAgMzogaXMgdGhlIGFjdGlvbiB0byBleGVjdXRlIGlmIHRoaXMgcGF0dGVybiBpcyBtYXRjaGVkLgorICAgICAgSWYgdGhpcyBhc3NlbWJsZXIgY29kZSB0ZW1wbGF0ZSBzdGFydHMgd2l0aCBhICogdGhlbiBpdCBpcyBhIGZyYWdtZW50IG9mCisgICAgICBDIGNvZGUgdG8gcnVuIHRvIGRlY2lkZSBvbiBhIHRlbXBsYXRlIHRvIHVzZS4gIE90aGVyd2lzZSwgaXQgaXMgdGhlCisgICAgICB0ZW1wbGF0ZSB0byB1c2UuCisgICA0OiBvcHRpb25hbGx5LCBhIHZlY3RvciBvZiBhdHRyaWJ1dGVzIGZvciB0aGlzIGluc24uCisgICAgICovCitERUZfUlRMX0VYUFIoREVGSU5FX0lOU04sICJkZWZpbmVfaW5zbiIsICJzRXNUViIsIFJUWF9FWFRSQSkKKworLyogRGVmaW5pdGlvbiBvZiBhIHBlZXBob2xlIG9wdGltaXphdGlvbi4KKyAgIDFzdCBvcGVyYW5kOiB2ZWN0b3Igb2YgaW5zbiBwYXR0ZXJucyB0byBtYXRjaAorICAgMm5kIG9wZXJhbmQ6IEMgZXhwcmVzc2lvbiB0aGF0IG11c3QgYmUgdHJ1ZQorICAgM3JkIG9wZXJhbmQ6IHRlbXBsYXRlIG9yIEMgY29kZSB0byBwcm9kdWNlIGFzc2VtYmxlciBvdXRwdXQuCisgICA0OiBvcHRpb25hbGx5LCBhIHZlY3RvciBvZiBhdHRyaWJ1dGVzIGZvciB0aGlzIGluc24uCisKKyAgIFRoaXMgZm9ybSBpcyBkZXByZWNhdGVkOyB1c2UgZGVmaW5lX3BlZXBob2xlMiBpbnN0ZWFkLiAgKi8KK0RFRl9SVExfRVhQUihERUZJTkVfUEVFUEhPTEUsICJkZWZpbmVfcGVlcGhvbGUiLCAiRXNUViIsIFJUWF9FWFRSQSkKKworLyogRGVmaW5pdGlvbiBvZiBhIHNwbGl0IG9wZXJhdGlvbi4KKyAgIDFzdCBvcGVyYW5kOiBpbnNuIHBhdHRlcm4gdG8gbWF0Y2gKKyAgIDJuZCBvcGVyYW5kOiBDIGV4cHJlc3Npb24gdGhhdCBtdXN0IGJlIHRydWUKKyAgIDNyZCBvcGVyYW5kOiB2ZWN0b3Igb2YgaW5zbiBwYXR0ZXJucyB0byBwbGFjZSBpbnRvIGEgU0VRVUVOQ0UKKyAgIDR0aCBvcGVyYW5kOiBvcHRpb25hbGx5LCBzb21lIEMgY29kZSB0byBleGVjdXRlIGJlZm9yZSBnZW5lcmF0aW5nIHRoZQorCWluc25zLiAgVGhpcyBtaWdodCwgZm9yIGV4YW1wbGUsIGNyZWF0ZSBzb21lIFJUWCdzIGFuZCBzdG9yZSB0aGVtIGluCisJZWxlbWVudHMgb2YgYHJlY29nX2RhdGEub3BlcmFuZCcgZm9yIHVzZSBieSB0aGUgdmVjdG9yIG9mCisJaW5zbi1wYXR0ZXJucy4KKwkoYG9wZXJhbmRzJyBpcyBhbiBhbGlhcyBoZXJlIGZvciBgcmVjb2dfZGF0YS5vcGVyYW5kJykuICAqLworREVGX1JUTF9FWFBSKERFRklORV9TUExJVCwgImRlZmluZV9zcGxpdCIsICJFc0VTIiwgUlRYX0VYVFJBKQorCisvKiBEZWZpbml0aW9uIG9mIGFuIGluc24gYW5kIGFzc29jaWF0ZWQgc3BsaXQuCisgICBUaGlzIGlzIHRoZSBjb25jYXRlbmF0aW9uLCB3aXRoIGEgZmV3IG1vZGlmaWNhdGlvbnMsIG9mIGEgZGVmaW5lX2luc24KKyAgIGFuZCBhIGRlZmluZV9zcGxpdCB3aGljaCBzaGFyZSB0aGUgc2FtZSBwYXR0ZXJuLgorICAgT3BlcmFuZDoKKyAgIDA6IG5hbWVzIHRoaXMgaW5zdHJ1Y3Rpb24uCisgICAgICBJZiB0aGUgbmFtZSBpcyB0aGUgbnVsbCBzdHJpbmcsIHRoZSBpbnN0cnVjdGlvbiBpcyBpbiB0aGUKKyAgICAgIG1hY2hpbmUgZGVzY3JpcHRpb24ganVzdCB0byBiZSByZWNvZ25pemVkLCBhbmQgd2lsbCBuZXZlciBiZSBlbWl0dGVkIGJ5CisgICAgICB0aGUgdHJlZSB0byBydGwgZXhwYW5kZXIuCisgICAxOiBpcyB0aGUgcGF0dGVybi4KKyAgIDI6IGlzIGEgc3RyaW5nIHdoaWNoIGlzIGEgQyBleHByZXNzaW9uCisgICAgICBnaXZpbmcgYW4gYWRkaXRpb25hbCBjb25kaXRpb24gZm9yIHJlY29nbml6aW5nIHRoaXMgcGF0dGVybi4KKyAgICAgIEEgbnVsbCBzdHJpbmcgbWVhbnMgbm8gZXh0cmEgY29uZGl0aW9uLgorICAgMzogaXMgdGhlIGFjdGlvbiB0byBleGVjdXRlIGlmIHRoaXMgcGF0dGVybiBpcyBtYXRjaGVkLgorICAgICAgSWYgdGhpcyBhc3NlbWJsZXIgY29kZSB0ZW1wbGF0ZSBzdGFydHMgd2l0aCBhICogdGhlbiBpdCBpcyBhIGZyYWdtZW50IG9mCisgICAgICBDIGNvZGUgdG8gcnVuIHRvIGRlY2lkZSBvbiBhIHRlbXBsYXRlIHRvIHVzZS4gIE90aGVyd2lzZSwgaXQgaXMgdGhlCisgICAgICB0ZW1wbGF0ZSB0byB1c2UuCisgICA0OiBDIGV4cHJlc3Npb24gdGhhdCBtdXN0IGJlIHRydWUgZm9yIHNwbGl0LiAgVGhpcyBtYXkgc3RhcnQgd2l0aCAiJiYiCisgICAgICBpbiB3aGljaCBjYXNlIHRoZSBzcGxpdCBjb25kaXRpb24gaXMgdGhlIGxvZ2ljYWwgYW5kIG9mIHRoZSBpbnNuCisgICAgICBjb25kaXRpb24gYW5kIHdoYXQgZm9sbG93cyB0aGUgIiYmIiBvZiB0aGlzIG9wZXJhbmQuCisgICA1OiB2ZWN0b3Igb2YgaW5zbiBwYXR0ZXJucyB0byBwbGFjZSBpbnRvIGEgU0VRVUVOQ0UKKyAgIDY6IG9wdGlvbmFsbHksIHNvbWUgQyBjb2RlIHRvIGV4ZWN1dGUgYmVmb3JlIGdlbmVyYXRpbmcgdGhlCisJaW5zbnMuICBUaGlzIG1pZ2h0LCBmb3IgZXhhbXBsZSwgY3JlYXRlIHNvbWUgUlRYJ3MgYW5kIHN0b3JlIHRoZW0gaW4KKwllbGVtZW50cyBvZiBgcmVjb2dfZGF0YS5vcGVyYW5kJyBmb3IgdXNlIGJ5IHRoZSB2ZWN0b3Igb2YKKwlpbnNuLXBhdHRlcm5zLgorCShgb3BlcmFuZHMnIGlzIGFuIGFsaWFzIGhlcmUgZm9yIGByZWNvZ19kYXRhLm9wZXJhbmQnKS4KKyAgIDc6IG9wdGlvbmFsbHksIGEgdmVjdG9yIG9mIGF0dHJpYnV0ZXMgZm9yIHRoaXMgaW5zbi4gICovCitERUZfUlRMX0VYUFIoREVGSU5FX0lOU05fQU5EX1NQTElULCAiZGVmaW5lX2luc25fYW5kX3NwbGl0IiwgInNFc1RzRVNWIiwgUlRYX0VYVFJBKQorCisvKiBEZWZpbml0aW9uIG9mIGFuIFJUTCBwZWVwaG9sZSBvcGVyYXRpb24uCisgICBGb2xsb3dzIHRoZSBzYW1lIGFyZ3VtZW50cyBhcyBkZWZpbmVfc3BsaXQuICAqLworREVGX1JUTF9FWFBSKERFRklORV9QRUVQSE9MRTIsICJkZWZpbmVfcGVlcGhvbGUyIiwgIkVzRVMiLCBSVFhfRVhUUkEpCisKKy8qIERlZmluZSBob3cgdG8gZ2VuZXJhdGUgbXVsdGlwbGUgaW5zbnMgZm9yIGEgc3RhbmRhcmQgaW5zbiBuYW1lLgorICAgMXN0IG9wZXJhbmQ6IHRoZSBpbnNuIG5hbWUuCisgICAybmQgb3BlcmFuZDogdmVjdG9yIG9mIGluc24tcGF0dGVybnMuCisJVXNlIG1hdGNoX29wZXJhbmQgdG8gc3Vic3RpdHV0ZSBhbiBlbGVtZW50IG9mIGByZWNvZ19kYXRhLm9wZXJhbmQnLgorICAgM3JkIG9wZXJhbmQ6IEMgZXhwcmVzc2lvbiB0aGF0IG11c3QgYmUgdHJ1ZSBmb3IgdGhpcyB0byBiZSBhdmFpbGFibGUuCisJVGhpcyBtYXkgbm90IHRlc3QgYW55IG9wZXJhbmRzLgorICAgNHRoIG9wZXJhbmQ6IEV4dHJhIEMgY29kZSB0byBleGVjdXRlIGJlZm9yZSBnZW5lcmF0aW5nIHRoZSBpbnNucy4KKwlUaGlzIG1pZ2h0LCBmb3IgZXhhbXBsZSwgY3JlYXRlIHNvbWUgUlRYJ3MgYW5kIHN0b3JlIHRoZW0gaW4KKwllbGVtZW50cyBvZiBgcmVjb2dfZGF0YS5vcGVyYW5kJyBmb3IgdXNlIGJ5IHRoZSB2ZWN0b3Igb2YKKwlpbnNuLXBhdHRlcm5zLgorCShgb3BlcmFuZHMnIGlzIGFuIGFsaWFzIGhlcmUgZm9yIGByZWNvZ19kYXRhLm9wZXJhbmQnKS4gICovCitERUZfUlRMX0VYUFIoREVGSU5FX0VYUEFORCwgImRlZmluZV9leHBhbmQiLCAic0VzcyIsIFJUWF9FWFRSQSkKKworLyogRGVmaW5lIGEgcmVxdWlyZW1lbnQgZm9yIGRlbGF5IHNsb3RzLgorICAgMXN0IG9wZXJhbmQ6IENvbmRpdGlvbiBpbnZvbHZpbmcgaW5zbiBhdHRyaWJ1dGVzIHRoYXQsIGlmIHRydWUsCisJICAgICAgICBpbmRpY2F0ZXMgdGhhdCB0aGUgaW5zbiByZXF1aXJlcyB0aGUgbnVtYmVyIG9mIGRlbGF5IHNsb3RzCisJCXNob3duLgorICAgMm5kIG9wZXJhbmQ6IFZlY3RvciB3aG9zZSBsZW5ndGggaXMgdGhlIHRocmVlIHRpbWVzIHRoZSBudW1iZXIgb2YgZGVsYXkKKwkJc2xvdHMgcmVxdWlyZWQuCisJICAgICAgICBFYWNoIGVudHJ5IGdpdmVzIHRocmVlIGNvbmRpdGlvbnMsIGVhY2ggaW52b2x2aW5nIGF0dHJpYnV0ZXMuCisJCVRoZSBmaXJzdCBtdXN0IGJlIHRydWUgZm9yIGFuIGluc24gdG8gb2NjdXB5IHRoYXQgZGVsYXkgc2xvdAorCQlsb2NhdGlvbi4gIFRoZSBzZWNvbmQgaXMgdHJ1ZSBmb3IgYWxsIGluc25zIHRoYXQgY2FuIGJlCisJCWFubnVsbGVkIGlmIHRoZSBicmFuY2ggaXMgdHJ1ZSBhbmQgdGhlIHRoaXJkIGlzIHRydWUgZm9yIGFsbAorCQlpbnNucyB0aGF0IGNhbiBiZSBhbm51bGxlZCBpZiB0aGUgYnJhbmNoIGlzIGZhbHNlLgorCisgICBNdWx0aXBsZSBERUZJTkVfREVMQVlzIG1heSBiZSBwcmVzZW50LiAgVGhleSBpbmRpY2F0ZSBkaWZmZXJpbmcKKyAgIHJlcXVpcmVtZW50cyBmb3IgZGVsYXkgc2xvdHMuICAqLworREVGX1JUTF9FWFBSKERFRklORV9ERUxBWSwgImRlZmluZV9kZWxheSIsICJlRSIsIFJUWF9FWFRSQSkKKworLyogRGVmaW5lIGF0dHJpYnV0ZSBjb21wdXRhdGlvbiBmb3IgYGFzbScgaW5zdHJ1Y3Rpb25zLiAgKi8KK0RFRl9SVExfRVhQUihERUZJTkVfQVNNX0FUVFJJQlVURVMsICJkZWZpbmVfYXNtX2F0dHJpYnV0ZXMiLCAiViIsIFJUWF9FWFRSQSkKKworLyogRGVmaW5pdGlvbiBvZiBhIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbiBtZXRhIG9wZXJhdGlvbi4gIEF1dG9tYXRpY2FsbHkKKyAgIGdlbmVyYXRlcyBuZXcgaW5zdGFuY2VzIG9mIERFRklORV9JTlNOLCBzZWxlY3RlZCBieSBoYXZpbmcgYXR0cmlidXRlCisgICAicHJlZGljYWJsZSIgdHJ1ZS4gIFRoZSBuZXcgcGF0dGVybiB3aWxsIGNvbnRhaW4gYSBDT05EX0VYRUMgYW5kIHRoZQorICAgcHJlZGljYXRlIGF0IHRvcC1sZXZlbC4KKworICAgT3BlcmFuZDoKKyAgIDA6IFRoZSBwcmVkaWNhdGUgcGF0dGVybi4gIFRoZSB0b3AtbGV2ZWwgZm9ybSBzaG91bGQgbWF0Y2ggYQorICAgICAgcmVsYXRpb25hbCBvcGVyYXRvci4gIE9wZXJhbmRzIHNob3VsZCBoYXZlIG9ubHkgb25lIGFsdGVybmF0aXZlLgorICAgMTogQSBDIGV4cHJlc3Npb24gZ2l2aW5nIGFuIGFkZGl0aW9uYWwgY29uZGl0aW9uIGZvciByZWNvZ25pemluZworICAgICAgdGhlIGdlbmVyYXRlZCBwYXR0ZXJuLgorICAgMjogQSB0ZW1wbGF0ZSBvciBDIGNvZGUgdG8gcHJvZHVjZSBhc3NlbWJsZXIgb3V0cHV0LiAgKi8KK0RFRl9SVExfRVhQUihERUZJTkVfQ09ORF9FWEVDLCAiZGVmaW5lX2NvbmRfZXhlYyIsICJFc3MiLCBSVFhfRVhUUkEpCisKKy8qIERlZmluaXRpb24gb2YgYW4gb3BlcmFuZCBwcmVkaWNhdGUuICBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuCisgICBERUZJTkVfUFJFRElDQVRFIGFuZCBERUZJTkVfU1BFQ0lBTF9QUkVESUNBVEUgaXMgdGhhdCBnZW5yZWNvZyB3aWxsCisgICBub3Qgd2FybiBhYm91dCBhIG1hdGNoX29wZXJhbmQgd2l0aCBubyBtb2RlIGlmIGl0IGhhcyBhIHByZWRpY2F0ZQorICAgZGVmaW5lZCB3aXRoIERFRklORV9TUEVDSUFMX1BSRURJQ0FURS4KKworICAgT3BlcmFuZDoKKyAgIDA6IFRoZSBuYW1lIG9mIHRoZSBwcmVkaWNhdGUuCisgICAxOiBBIGJvb2xlYW4gZXhwcmVzc2lvbiB3aGljaCBjb21wdXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgcHJlZGljYXRlCisgICAgICBtYXRjaGVzLiAgVGhpcyBleHByZXNzaW9uIGNhbiB1c2UgSU9SLCBBTkQsIE5PVCwgTUFUQ0hfT1BFUkFORCwKKyAgICAgIE1BVENIX0NPREUsIGFuZCBNQVRDSF9URVNULiAgSXQgbXVzdCBiZSBzcGVjaWZpYyBlbm91Z2ggdGhhdCBnZW5yZWNvZworICAgICAgY2FuIGNhbGN1bGF0ZSB0aGUgc2V0IG9mIFJUWCBjb2RlcyB0aGF0IGNhbiBwb3NzaWJseSBtYXRjaC4KKyAgIDI6IEEgQyBmdW5jdGlvbiBib2R5IHdoaWNoIG11c3QgcmV0dXJuIHRydWUgZm9yIHRoZSBwcmVkaWNhdGUgdG8gbWF0Y2guCisgICAgICBPcHRpb25hbC4gIFVzZSB0aGlzIHdoZW4gdGhlIHRlc3QgaXMgdG9vIGNvbXBsaWNhdGVkIHRvIGZpdCBpbnRvIGEKKyAgICAgIG1hdGNoX3Rlc3QgZXhwcmVzc2lvbi4gICovCitERUZfUlRMX0VYUFIoREVGSU5FX1BSRURJQ0FURSwgImRlZmluZV9wcmVkaWNhdGUiLCAic2VzIiwgUlRYX0VYVFJBKQorREVGX1JUTF9FWFBSKERFRklORV9TUEVDSUFMX1BSRURJQ0FURSwgImRlZmluZV9zcGVjaWFsX3ByZWRpY2F0ZSIsICJzZXMiLCBSVFhfRVhUUkEpCisKKy8qIERlZmluaXRpb24gb2YgYSByZWdpc3RlciBvcGVyYW5kIGNvbnN0cmFpbnQuICBUaGlzIHNpbXBseSBtYXBzIHRoZQorICAgY29uc3RyYWludCBzdHJpbmcgdG8gYSByZWdpc3RlciBjbGFzcy4KKworICAgT3BlcmFuZDoKKyAgIDA6IFRoZSBuYW1lIG9mIHRoZSBjb25zdHJhaW50IChvZnRlbiwgYnV0IG5vdCBhbHdheXMsIGEgc2luZ2xlIGxldHRlcikuCisgICAxOiBBIEMgZXhwcmVzc2lvbiB3aGljaCBldmFsdWF0ZXMgdG8gdGhlIGFwcHJvcHJpYXRlIHJlZ2lzdGVyIGNsYXNzIGZvcgorICAgICAgdGhpcyBjb25zdHJhaW50LiAgSWYgdGhpcyBpcyBub3QganVzdCBhIGNvbnN0YW50LCBpdCBzaG91bGQgbG9vayBvbmx5CisgICAgICBhdCAtbSBzd2l0Y2hlcyBhbmQgdGhlIGxpa2UuCisgICAyOiBBIGRvY3N0cmluZyBmb3IgdGhpcyBjb25zdHJhaW50LCBpbiBUZXhpbmZvIHN5bnRheDsgbm90IGN1cnJlbnRseQorICAgICAgdXNlZCwgaW4gZnV0dXJlIHdpbGwgYmUgaW5jb3Jwb3JhdGVkIGludG8gdGhlIG1hbnVhbCdzIGxpc3Qgb2YKKyAgICAgIG1hY2hpbmUtc3BlY2lmaWMgb3BlcmFuZCBjb25zdHJhaW50cy4gICovCitERUZfUlRMX0VYUFIoREVGSU5FX1JFR0lTVEVSX0NPTlNUUkFJTlQsICJkZWZpbmVfcmVnaXN0ZXJfY29uc3RyYWludCIsICJzc3MiLCBSVFhfRVhUUkEpCisKKy8qIERlZmluaXRpb24gb2YgYSBub24tcmVnaXN0ZXIgb3BlcmFuZCBjb25zdHJhaW50LiAgVGhlc2UgbG9vayBhdCB0aGUKKyAgIG9wZXJhbmQgYW5kIGRlY2lkZSB3aGV0aGVyIGl0IGZpdHMgdGhlIGNvbnN0cmFpbnQuCisKKyAgIERFRklORV9DT05TVFJBSU5UIGdldHMgbm8gc3BlY2lhbCB0cmVhdG1lbnQgaWYgaXQgZmFpbHMgdG8gbWF0Y2guCisgICBJdCBpcyBhcHByb3ByaWF0ZSBmb3IgY29uc3RhbnQtb25seSBjb25zdHJhaW50cywgYW5kIG1vc3Qgb3RoZXJzLgorCisgICBERUZJTkVfTUVNT1JZX0NPTlNUUkFJTlQgdGVsbHMgcmVsb2FkIHRoYXQgdGhpcyBjb25zdHJhaW50IGNhbiBiZSBtYWRlCisgICB0byBtYXRjaCwgaWYgaXQgZG9lc24ndCBhbHJlYWR5LCBieSBjb252ZXJ0aW5nIHRoZSBvcGVyYW5kIHRvIHRoZSBmb3JtCisgICAobWVtIChyZWcgWCkpIHdoZXJlIFggaXMgYSBiYXNlIHJlZ2lzdGVyLiAgSXQgaXMgc3VpdGFibGUgZm9yIGNvbnN0cmFpbnRzCisgICB0aGF0IGRlc2NyaWJlIGEgc3Vic2V0IG9mIGFsbCBtZW1vcnkgcmVmZXJlbmNlcy4KKworICAgREVGSU5FX0FERFJFU1NfQ09OU1RSQUlOVCB0ZWxscyByZWxvYWQgdGhhdCB0aGlzIGNvbnN0cmFpbnQgY2FuIGJlIG1hZGUKKyAgIHRvIG1hdGNoLCBpZiBpdCBkb2Vzbid0IGFscmVhZHksIGJ5IGNvbnZlcnRpbmcgdGhlIG9wZXJhbmQgdG8gdGhlIGZvcm0KKyAgIChyZWcgWCkgd2hlcmUgWCBpcyBhIGJhc2UgcmVnaXN0ZXIuICBJdCBpcyBzdWl0YWJsZSBmb3IgY29uc3RyYWludHMgdGhhdAorICAgZGVzY3JpYmUgYSBzdWJzZXQgb2YgYWxsIGFkZHJlc3MgcmVmZXJlbmNlcy4KKworICAgV2hlbiBpbiBkb3VidCwgdXNlIHBsYWluIERFRklORV9DT05TVFJBSU5ULgorCisgICBPcGVyYW5kOgorICAgMDogVGhlIG5hbWUgb2YgdGhlIGNvbnN0cmFpbnQgKG9mdGVuLCBidXQgbm90IGFsd2F5cywgYSBzaW5nbGUgbGV0dGVyKS4KKyAgIDE6IEEgZG9jc3RyaW5nIGZvciB0aGlzIGNvbnN0cmFpbnQsIGluIFRleGluZm8gc3ludGF4OyBub3QgY3VycmVudGx5CisgICAgICB1c2VkLCBpbiBmdXR1cmUgd2lsbCBiZSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgbWFudWFsJ3MgbGlzdCBvZgorICAgICAgbWFjaGluZS1zcGVjaWZpYyBvcGVyYW5kIGNvbnN0cmFpbnRzLgorICAgMjogQSBib29sZWFuIGV4cHJlc3Npb24gd2hpY2ggY29tcHV0ZXMgd2hldGhlciBvciBub3QgdGhlIGNvbnN0cmFpbnQKKyAgICAgIG1hdGNoZXMuICBJdCBzaG91bGQgZm9sbG93IHRoZSBzYW1lIHJ1bGVzIGFzIGEgZGVmaW5lX3ByZWRpY2F0ZQorICAgICAgZXhwcmVzc2lvbiwgaW5jbHVkaW5nIHRoZSBiaXQgYWJvdXQgc3BlY2lmeWluZyB0aGUgc2V0IG9mIFJUWCBjb2RlcworICAgICAgdGhhdCBjb3VsZCBwb3NzaWJseSBtYXRjaC4gIE1BVENIX1RFU1Qgc3ViZXhwcmVzc2lvbnMgbWF5IG1ha2UgdXNlIG9mCisgICAgICB0aGVzZSB2YXJpYWJsZXM6CisgICAgICAgIGBvcCcgICAgLSB0aGUgUlRMIG9iamVjdCBkZWZpbmluZyB0aGUgb3BlcmFuZC4KKyAgICAgICAgYG1vZGUnICAtIHRoZSBtb2RlIG9mIGBvcCcuCisJYGl2YWwnICAtIElOVFZBTChvcCksIGlmIG9wIGlzIGEgQ09OU1RfSU5ULgorICAgICAgICBgaHZhbCcgIC0gQ09OU1RfRE9VQkxFX0hJR0gob3ApLCBpZiBvcCBpcyBhbiBpbnRlZ2VyIENPTlNUX0RPVUJMRS4KKyAgICAgICAgYGx2YWwnICAtIENPTlNUX0RPVUJMRV9MT1cob3ApLCBpZiBvcCBpcyBhbiBpbnRlZ2VyIENPTlNUX0RPVUJMRS4KKyAgICAgICAgYHJ2YWwnICAtIENPTlNUX0RPVUJMRV9SRUFMX1ZBTFVFKG9wKSwgaWYgb3AgaXMgYSBmbG9hdGluZy1wb2ludAorICAgICAgICAgICAgICAgICAgQ09OU1RfRE9VQkxFLgorICAgICAgRG8gbm90IHVzZSBpdmFsL2h2YWwvbHZhbC9ydmFsIGlmIG9wIGlzIG5vdCB0aGUgYXBwcm9wcmlhdGUga2luZCBvZgorICAgICAgUlRMIG9iamVjdC4gICovCitERUZfUlRMX0VYUFIoREVGSU5FX0NPTlNUUkFJTlQsICJkZWZpbmVfY29uc3RyYWludCIsICJzc2UiLCBSVFhfRVhUUkEpCitERUZfUlRMX0VYUFIoREVGSU5FX01FTU9SWV9DT05TVFJBSU5ULCAiZGVmaW5lX21lbW9yeV9jb25zdHJhaW50IiwgInNzZSIsIFJUWF9FWFRSQSkKK0RFRl9SVExfRVhQUihERUZJTkVfQUREUkVTU19DT05TVFJBSU5ULCAiZGVmaW5lX2FkZHJlc3NfY29uc3RyYWludCIsICJzc2UiLCBSVFhfRVhUUkEpCisKKworLyogQ29uc3RydWN0aW9ucyBmb3IgQ1BVIHBpcGVsaW5lIGRlc2NyaXB0aW9uIGRlc2NyaWJlZCBieSBOREZBcy4gICovCisKKy8qIChkZWZpbmVfY3B1X3VuaXQgc3RyaW5nIFtzdHJpbmddKSBkZXNjcmliZXMgY3B1IGZ1bmN0aW9uYWwKKyAgIHVuaXRzIChzZXBhcmF0ZWQgYnkgY29tbWEpLgorCisgICAxc3Qgb3BlcmFuZDogTmFtZXMgb2YgY3B1IGZ1bmN0aW9uYWwgdW5pdHMuCisgICAybmQgb3BlcmFuZDogTmFtZSBvZiBhdXRvbWF0b24gKHNlZSBjb21tZW50cyBmb3IgREVGSU5FX0FVVE9NQVRPTikuCisKKyAgIEFsbCBkZWZpbmVfcmVzZXJ2YXRpb25zLCBkZWZpbmVfY3B1X3VuaXRzLCBhbmQKKyAgIGRlZmluZV9xdWVyeV9jcHVfdW5pdHMgc2hvdWxkIGhhdmUgdW5pcXVlIG5hbWVzIHdoaWNoIG1heSBub3QgYmUKKyAgICJub3RoaW5nIi4gICovCitERUZfUlRMX0VYUFIoREVGSU5FX0NQVV9VTklULCAiZGVmaW5lX2NwdV91bml0IiwgInNTIiwgUlRYX0VYVFJBKQorCisvKiAoZGVmaW5lX3F1ZXJ5X2NwdV91bml0IHN0cmluZyBbc3RyaW5nXSkgZGVzY3JpYmVzIGNwdSBmdW5jdGlvbmFsCisgICB1bml0cyBhbmFsb2dvdXNseSB0byBkZWZpbmVfY3B1X3VuaXQuICBUaGUgcmVzZXJ2YXRpb24gb2Ygc3VjaAorICAgdW5pdHMgY2FuIGJlIHF1ZXJpZWQgZm9yIGF1dG9tYXRvbiBzdGF0ZS4gICovCitERUZfUlRMX0VYUFIoREVGSU5FX1FVRVJZX0NQVV9VTklULCAiZGVmaW5lX3F1ZXJ5X2NwdV91bml0IiwgInNTIiwgUlRYX0VYVFJBKQorCisvKiAoZXhjbHVzaW9uX3NldCBzdHJpbmcgc3RyaW5nKSBtZWFucyB0aGF0IGVhY2ggQ1BVIGZ1bmN0aW9uYWwgdW5pdAorICAgaW4gdGhlIGZpcnN0IHN0cmluZyBjYW4gbm90IGJlIHJlc2VydmVkIHNpbXVsdGFuZW91c2x5IHdpdGggYW55CisgICB1bml0IHdob3NlIG5hbWUgaXMgaW4gdGhlIHNlY29uZCBzdHJpbmcgYW5kIHZpc2UgdmVyc2EuICBDUFUgdW5pdHMKKyAgIGluIHRoZSBzdHJpbmcgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMuICBGb3IgZXhhbXBsZSwgaXQgaXMgdXNlZnVsCisgICBmb3IgZGVzY3JpcHRpb24gQ1BVIHdpdGggZnVsbHkgcGlwZWxpbmVkIGZsb2F0aW5nIHBvaW50IGZ1bmN0aW9uYWwKKyAgIHVuaXQgd2hpY2ggY2FuIGV4ZWN1dGUgc2ltdWx0YW5lb3VzbHkgb25seSBzaW5nbGUgZmxvYXRpbmcgcG9pbnQKKyAgIGluc25zIG9yIG9ubHkgZG91YmxlIGZsb2F0aW5nIHBvaW50IGluc25zLiAgQWxsIENQVSBmdW5jdGlvbmFsCisgICB1bml0cyBpbiBhIHNldCBzaG91bGQgYmVsb25nIHRvIHRoZSBzYW1lIGF1dG9tYXRvbi4gICovCitERUZfUlRMX0VYUFIoRVhDTFVTSU9OX1NFVCwgImV4Y2x1c2lvbl9zZXQiLCAic3MiLCBSVFhfRVhUUkEpCisKKy8qIChwcmVzZW5jZV9zZXQgc3RyaW5nIHN0cmluZykgbWVhbnMgdGhhdCBlYWNoIENQVSBmdW5jdGlvbmFsIHVuaXQgaW4KKyAgIHRoZSBmaXJzdCBzdHJpbmcgY2FuIG5vdCBiZSByZXNlcnZlZCB1bmxlc3MgYXQgbGVhc3Qgb25lIG9mIHBhdHRlcm4KKyAgIG9mIHVuaXRzIHdob3NlIG5hbWVzIGFyZSBpbiB0aGUgc2Vjb25kIHN0cmluZyBpcyByZXNlcnZlZC4gIFRoaXMgaXMKKyAgIGFuIGFzeW1tZXRyaWMgcmVsYXRpb24uICBDUFUgdW5pdHMgb3IgdW5pdCBwYXR0ZXJucyBpbiB0aGUgc3RyaW5ncworICAgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMuICBQYXR0ZXJuIGlzIG9uZSB1bml0IG5hbWUgb3IgdW5pdCBuYW1lcworICAgc2VwYXJhdGVkIGJ5IHdoaXRlLXNwYWNlcy4KKworICAgRm9yIGV4YW1wbGUsIGl0IGlzIHVzZWZ1bCBmb3IgZGVzY3JpcHRpb24gdGhhdCBzbG90MSBpcyByZXNlcnZlZAorICAgYWZ0ZXIgc2xvdDAgcmVzZXJ2YXRpb24gZm9yIGEgVkxJVyBwcm9jZXNzb3IuICBXZSBjb3VsZCBkZXNjcmliZSBpdAorICAgYnkgdGhlIGZvbGxvd2luZyBjb25zdHJ1Y3Rpb24KKworICAgICAgKHByZXNlbmNlX3NldCAic2xvdDEiICJzbG90MCIpCisKKyAgIE9yIHNsb3QxIGlzIHJlc2VydmVkIG9ubHkgYWZ0ZXIgc2xvdDAgYW5kIHVuaXQgYjAgcmVzZXJ2YXRpb24uICBJbgorICAgdGhpcyBjYXNlIHdlIGNvdWxkIHdyaXRlCisKKyAgICAgIChwcmVzZW5jZV9zZXQgInNsb3QxIiAic2xvdDAgYjAiKQorCisgICBBbGwgQ1BVIGZ1bmN0aW9uYWwgdW5pdHMgaW4gYSBzZXQgc2hvdWxkIGJlbG9uZyB0byB0aGUgc2FtZQorICAgYXV0b21hdG9uLiAgKi8KK0RFRl9SVExfRVhQUihQUkVTRU5DRV9TRVQsICJwcmVzZW5jZV9zZXQiLCAic3MiLCBSVFhfRVhUUkEpCisKKy8qIChmaW5hbF9wcmVzZW5jZV9zZXQgc3RyaW5nIHN0cmluZykgaXMgYW5hbG9nb3VzIHRvIGBwcmVzZW5jZV9zZXQnLgorICAgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVtIGlzIHdoZW4gY2hlY2tpbmcgaXMgZG9uZS4gIFdoZW4gYW4KKyAgIGluc3RydWN0aW9uIGlzIGlzc3VlZCBpbiBnaXZlbiBhdXRvbWF0b24gc3RhdGUgcmVmbGVjdGluZyBhbGwKKyAgIGN1cnJlbnQgYW5kIHBsYW5uZWQgdW5pdCByZXNlcnZhdGlvbnMsIHRoZSBhdXRvbWF0b24gc3RhdGUgaXMKKyAgIGNoYW5nZWQuICBUaGUgZmlyc3Qgc3RhdGUgaXMgYSBzb3VyY2Ugc3RhdGUsIHRoZSBzZWNvbmQgb25lIGlzIGEKKyAgIHJlc3VsdCBzdGF0ZS4gIENoZWNraW5nIGZvciBgcHJlc2VuY2Vfc2V0JyBpcyBkb25lIG9uIHRoZSBzb3VyY2UKKyAgIHN0YXRlIHJlc2VydmF0aW9uLCBjaGVja2luZyBmb3IgYGZpbmFsX3ByZXNlbmNlX3NldCcgaXMgZG9uZSBvbiB0aGUKKyAgIHJlc3VsdCByZXNlcnZhdGlvbi4gIFRoaXMgY29uc3RydWN0aW9uIGlzIHVzZWZ1bCB0byBkZXNjcmliZSBhCisgICByZXNlcnZhdGlvbiB3aGljaCBpcyBhY3R1YWxseSB0d28gc3Vic2VxdWVudCByZXNlcnZhdGlvbnMuICBGb3IKKyAgIGV4YW1wbGUsIGlmIHdlIHVzZQorCisgICAgICAocHJlc2VuY2Vfc2V0ICJzbG90MSIgInNsb3QwIikKKworICAgdGhlIGZvbGxvd2luZyBpbnNuIHdpbGwgYmUgbmV2ZXIgaXNzdWVkIChiZWNhdXNlIHNsb3QxIHJlcXVpcmVzCisgICBzbG90MCB3aGljaCBpcyBhYnNlbnQgaW4gdGhlIHNvdXJjZSBzdGF0ZSkuCisKKyAgICAgIChkZWZpbmVfcmVzZXJ2YXRpb24gImluc25fYW5kX25vcCIgInNsb3QwICsgc2xvdDEiKQorCisgICBidXQgaXQgY2FuIGJlIGlzc3VlZCBpZiB3ZSB1c2UgYW5hbG9nb3VzIGBmaW5hbF9wcmVzZW5jZV9zZXQnLiAgKi8KK0RFRl9SVExfRVhQUihGSU5BTF9QUkVTRU5DRV9TRVQsICJmaW5hbF9wcmVzZW5jZV9zZXQiLCAic3MiLCBSVFhfRVhUUkEpCisKKy8qIChhYnNlbmNlX3NldCBzdHJpbmcgc3RyaW5nKSBtZWFucyB0aGF0IGVhY2ggQ1BVIGZ1bmN0aW9uYWwgdW5pdCBpbgorICAgdGhlIGZpcnN0IHN0cmluZyBjYW4gYmUgcmVzZXJ2ZWQgb25seSBpZiBlYWNoIHBhdHRlcm4gb2YgdW5pdHMKKyAgIHdob3NlIG5hbWVzIGFyZSBpbiB0aGUgc2Vjb25kIHN0cmluZyBpcyBub3QgcmVzZXJ2ZWQuICBUaGlzIGlzIGFuCisgICBhc3ltbWV0cmljIHJlbGF0aW9uIChhY3R1YWxseSBleGNsdXNpb24gc2V0IGlzIGFuYWxvZ291cyB0byB0aGlzCisgICBvbmUgYnV0IGl0IGlzIHN5bW1ldHJpYykuICBDUFUgdW5pdHMgb3IgdW5pdCBwYXR0ZXJucyBpbiB0aGUgc3RyaW5nCisgICBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcy4gIFBhdHRlcm4gaXMgb25lIHVuaXQgbmFtZSBvciB1bml0IG5hbWVzCisgICBzZXBhcmF0ZWQgYnkgd2hpdGUtc3BhY2VzLgorCisgICBGb3IgZXhhbXBsZSwgaXQgaXMgdXNlZnVsIGZvciBkZXNjcmlwdGlvbiB0aGF0IHNsb3QwIGNhbiBub3QgYmUKKyAgIHJlc2VydmVkIGFmdGVyIHNsb3QxIG9yIHNsb3QyIHJlc2VydmF0aW9uIGZvciBhIFZMSVcgcHJvY2Vzc29yLiAgV2UKKyAgIGNvdWxkIGRlc2NyaWJlIGl0IGJ5IHRoZSBmb2xsb3dpbmcgY29uc3RydWN0aW9uCisKKyAgICAgIChhYnNlbmNlX3NldCAic2xvdDIiICJzbG90MCwgc2xvdDEiKQorCisgICBPciBzbG90MiBjYW4gbm90IGJlIHJlc2VydmVkIGlmIHNsb3QwIGFuZCB1bml0IGIwIGFyZSByZXNlcnZlZCBvcgorICAgc2xvdDEgYW5kIHVuaXQgYjEgYXJlIHJlc2VydmVkIC4gIEluIHRoaXMgY2FzZSB3ZSBjb3VsZCB3cml0ZQorCisgICAgICAoYWJzZW5jZV9zZXQgInNsb3QyIiAic2xvdDAgYjAsIHNsb3QxIGIxIikKKworICAgQWxsIENQVSBmdW5jdGlvbmFsIHVuaXRzIGluIGEgc2V0IHNob3VsZCB0byBiZWxvbmcgdGhlIHNhbWUKKyAgIGF1dG9tYXRvbi4gICovCitERUZfUlRMX0VYUFIoQUJTRU5DRV9TRVQsICJhYnNlbmNlX3NldCIsICJzcyIsIFJUWF9FWFRSQSkKKworLyogKGZpbmFsX2Fic2VuY2Vfc2V0IHN0cmluZyBzdHJpbmcpIGlzIGFuYWxvZ291cyB0byBgYWJzZW5jZV9zZXQnIGJ1dAorICAgY2hlY2tpbmcgaXMgZG9uZSBvbiB0aGUgcmVzdWx0IChzdGF0ZSkgcmVzZXJ2YXRpb24uICBTZWUgY29tbWVudHMKKyAgIGZvciBgZmluYWxfcHJlc2VuY2Vfc2V0Jy4gICovCitERUZfUlRMX0VYUFIoRklOQUxfQUJTRU5DRV9TRVQsICJmaW5hbF9hYnNlbmNlX3NldCIsICJzcyIsIFJUWF9FWFRSQSkKKworLyogKGRlZmluZV9ieXBhc3MgbnVtYmVyIG91dF9pbnNuX25hbWVzIGluX2luc25fbmFtZXMpIG5hbWVzIGJ5cGFzcworICAgd2l0aCBnaXZlbiBsYXRlbmN5ICh0aGUgZmlyc3QgbnVtYmVyKSBmcm9tIGluc25zIGdpdmVuIGJ5IHRoZSBmaXJzdAorICAgc3RyaW5nIChzZWUgZGVmaW5lX2luc25fcmVzZXJ2YXRpb24pIGludG8gaW5zbnMgZ2l2ZW4gYnkgdGhlIHNlY29uZAorICAgc3RyaW5nLiAgSW5zbiBuYW1lcyBpbiB0aGUgc3RyaW5ncyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcy4gIFRoZQorICAgdGhpcmQgb3BlcmFuZCBpcyBvcHRpb25hbCBuYW1lIG9mIGZ1bmN0aW9uIHdoaWNoIGlzIGFkZGl0aW9uYWwKKyAgIGd1YXJkIGZvciB0aGUgYnlwYXNzLiAgVGhlIGZ1bmN0aW9uIHdpbGwgZ2V0IHRoZSB0d28gaW5zbnMgYXMKKyAgIHBhcmFtZXRlcnMuICBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIHRoZSBieXBhc3Mgd2lsbCBiZQorICAgaWdub3JlZCBmb3IgdGhpcyBjYXNlLiAgQWRkaXRpb25hbCBndWFyZCBpcyBuZWNlc3NhcnkgdG8gcmVjb2duaXplCisgICBjb21wbGljYXRlZCBieXBhc3NlcywgZS5nLiB3aGVuIGNvbnN1bWVyIGlzIGxvYWQgYWRkcmVzcy4gIElmIHRoZXJlCisgICBhcmUgbW9yZSBvbmUgYnlwYXNzIHdpdGggdGhlIHNhbWUgb3V0cHV0IGFuZCBpbnB1dCBpbnNucywgdGhlCisgICBjaG9zZW4gYnlwYXNzIGlzIHRoZSBmaXJzdCBieXBhc3Mgd2l0aCBhIGd1YXJkIGluIGRlc2NyaXB0aW9uIHdob3NlCisgICBndWFyZCBmdW5jdGlvbiByZXR1cm5zIG5vbnplcm8uICBJZiB0aGVyZSBpcyBubyBzdWNoIGJ5cGFzcywgdGhlbgorICAgYnlwYXNzIHdpdGhvdXQgdGhlIGd1YXJkIGZ1bmN0aW9uIGlzIGNob3Nlbi4gICovCitERUZfUlRMX0VYUFIoREVGSU5FX0JZUEFTUywgImRlZmluZV9ieXBhc3MiLCAiaXNzUyIsIFJUWF9FWFRSQSkKKworLyogKGRlZmluZV9hdXRvbWF0b24gc3RyaW5nKSBkZXNjcmliZXMgbmFtZXMgb2YgYXV0b21hdGEgZ2VuZXJhdGVkIGFuZAorICAgdXNlZCBmb3IgcGlwZWxpbmUgaGF6YXJkcyByZWNvZ25pdGlvbi4gIFRoZSBuYW1lcyBhcmUgc2VwYXJhdGVkIGJ5CisgICBjb21tYS4gIEFjdHVhbGx5IGl0IGlzIHBvc3NpYmx5IHRvIGdlbmVyYXRlIHRoZSBzaW5nbGUgYXV0b21hdG9uCisgICBidXQgdW5mb3J0dW5hdGVseSBpdCBjYW4gYmUgdmVyeSBsYXJnZS4gIElmIHdlIHVzZSBtb3JlIG9uZQorICAgYXV0b21hdGEsIHRoZSBzdW1tYXJ5IHNpemUgb2YgdGhlIGF1dG9tYXRhIHVzdWFsbHkgaXMgbGVzcyB0aGFuIHRoZQorICAgc2luZ2xlIG9uZS4gIFRoZSBhdXRvbWF0b24gbmFtZSBpcyB1c2VkIGluIGRlZmluZV9jcHVfdW5pdCBhbmQKKyAgIGRlZmluZV9xdWVyeV9jcHVfdW5pdC4gIEFsbCBhdXRvbWF0YSBzaG91bGQgaGF2ZSB1bmlxdWUgbmFtZXMuICAqLworREVGX1JUTF9FWFBSKERFRklORV9BVVRPTUFUT04sICJkZWZpbmVfYXV0b21hdG9uIiwgInMiLCBSVFhfRVhUUkEpCisKKy8qIChhdXRvbWF0YV9vcHRpb24gc3RyaW5nKSBkZXNjcmliZXMgb3B0aW9uIGZvciBnZW5lcmF0aW9uIG9mCisgICBhdXRvbWF0YS4gIEN1cnJlbnRseSB0aGVyZSBhcmUgdGhlIGZvbGxvd2luZyBvcHRpb25zOgorCisgICBvICJuby1taW5pbWl6YXRpb24iIHdoaWNoIG1ha2VzIG5vIG1pbmltaXphdGlvbiBvZiBhdXRvbWF0YS4gIFRoaXMKKyAgICAgaXMgb25seSB3b3J0aCB0byBkbyB3aGVuIHdlIGFyZSBkZWJ1Z2dpbmcgdGhlIGRlc2NyaXB0aW9uIGFuZAorICAgICBuZWVkIHRvIGxvb2sgbW9yZSBhY2N1cmF0ZWx5IGF0IHJlc2VydmF0aW9ucyBvZiBzdGF0ZXMuCisKKyAgIG8gInRpbWUiIHdoaWNoIG1lYW5zIHByaW50aW5nIGFkZGl0aW9uYWwgdGltZSBzdGF0aXN0aWNzIGFib3V0CisgICAgICBnZW5lcmF0aW9uIG9mIGF1dG9tYXRhLgorCisgICBvICJ2IiB3aGljaCBtZWFucyBnZW5lcmF0aW9uIG9mIGZpbGUgZGVzY3JpYmluZyB0aGUgcmVzdWx0CisgICAgIGF1dG9tYXRhLiAgVGhlIGZpbGUgaGFzIHN1ZmZpeCBgLmRmYScgYW5kIGNhbiBiZSB1c2VkIGZvciB0aGUKKyAgICAgZGVzY3JpcHRpb24gdmVyaWZpY2F0aW9uIGFuZCBkZWJ1Z2dpbmcuCisKKyAgIG8gInciIHdoaWNoIG1lYW5zIGdlbmVyYXRpb24gb2Ygd2FybmluZyBpbnN0ZWFkIG9mIGVycm9yIGZvcgorICAgICBub24tY3JpdGljYWwgZXJyb3JzLgorCisgICBvICJuZGZhIiB3aGljaCBtYWtlcyBub25kZXRlcm1pbmlzdGljIGZpbml0ZSBzdGF0ZSBhdXRvbWF0YS4KKworICAgbyAicHJvZ3Jlc3MiIHdoaWNoIG1lYW5zIG91dHB1dCBvZiBhIHByb2dyZXNzIGJhciBzaG93aW5nIGhvdyBtYW55CisgICAgIHN0YXRlcyB3ZXJlIGdlbmVyYXRlZCBzbyBmYXIgZm9yIGF1dG9tYXRvbiBiZWluZyBwcm9jZXNzZWQuICAqLworREVGX1JUTF9FWFBSKEFVVE9NQVRBX09QVElPTiwgImF1dG9tYXRhX29wdGlvbiIsICJzIiwgUlRYX0VYVFJBKQorCisvKiAoZGVmaW5lX3Jlc2VydmF0aW9uIHN0cmluZyBzdHJpbmcpIG5hbWVzIHJlc2VydmF0aW9uICh0aGUgZmlyc3QKKyAgIHN0cmluZykgb2YgY3B1IGZ1bmN0aW9uYWwgdW5pdHMgKHRoZSAybmQgc3RyaW5nKS4gIFNvbWV0aW1lcyB1bml0CisgICByZXNlcnZhdGlvbnMgZm9yIGRpZmZlcmVudCBpbnNucyBjb250YWluIGNvbW1vbiBwYXJ0cy4gIEluIHN1Y2gKKyAgIGNhc2UsIHlvdSBjYW4gZGVzY3JpYmUgY29tbW9uIHBhcnQgYW5kIHVzZSBpdHMgbmFtZSAodGhlIDFzdAorICAgcGFyYW1ldGVyKSBpbiByZWd1bGFyIGV4cHJlc3Npb24gaW4gZGVmaW5lX2luc25fcmVzZXJ2YXRpb24uICBBbGwKKyAgIGRlZmluZV9yZXNlcnZhdGlvbnMsIGRlZmluZV9jcHVfdW5pdHMsIGFuZCBkZWZpbmVfcXVlcnlfY3B1X3VuaXRzCisgICBzaG91bGQgaGF2ZSB1bmlxdWUgbmFtZXMgd2hpY2ggbWF5IG5vdCBiZSAibm90aGluZyIuICAqLworREVGX1JUTF9FWFBSKERFRklORV9SRVNFUlZBVElPTiwgImRlZmluZV9yZXNlcnZhdGlvbiIsICJzcyIsIFJUWF9FWFRSQSkKKworLyogKGRlZmluZV9pbnNuX3Jlc2VydmF0aW9uIG5hbWUgZGVmYXVsdF9sYXRlbmN5IGNvbmRpdGlvbiByZWdleHByKQorICAgZGVzY3JpYmVzIHJlc2VydmF0aW9uIG9mIGNwdSBmdW5jdGlvbmFsIHVuaXRzICh0aGUgM25kIG9wZXJhbmQpIGZvcgorICAgaW5zdHJ1Y3Rpb24gd2hpY2ggaXMgc2VsZWN0ZWQgYnkgdGhlIGNvbmRpdGlvbiAodGhlIDJuZCBwYXJhbWV0ZXIpLgorICAgVGhlIGZpcnN0IHBhcmFtZXRlciBpcyB1c2VkIGZvciBvdXRwdXQgb2YgZGVidWdnaW5nIGluZm9ybWF0aW9uLgorICAgVGhlIHJlc2VydmF0aW9ucyBhcmUgZGVzY3JpYmVkIGJ5IGEgcmVndWxhciBleHByZXNzaW9uIGFjY29yZGluZworICAgdGhlIGZvbGxvd2luZyBzeW50YXg6CisKKyAgICAgICByZWdleHAgPSByZWdleHAgIiwiIG9uZW9mCisgICAgICAgICAgICAgIHwgb25lb2YKKworICAgICAgIG9uZW9mID0gb25lb2YgInwiIGFsbG9mCisgICAgICAgICAgICAgfCBhbGxvZgorCisgICAgICAgYWxsb2YgPSBhbGxvZiAiKyIgcmVwZWF0CisgICAgICAgICAgICAgfCByZXBlYXQKKworICAgICAgIHJlcGVhdCA9IGVsZW1lbnQgIioiIG51bWJlcgorICAgICAgICAgICAgICB8IGVsZW1lbnQKKworICAgICAgIGVsZW1lbnQgPSBjcHVfZnVuY3Rpb25fdW5pdF9uYW1lCisgICAgICAgICAgICAgICB8IHJlc2VydmF0aW9uX25hbWUKKyAgICAgICAgICAgICAgIHwgcmVzdWx0X25hbWUKKyAgICAgICAgICAgICAgIHwgIm5vdGhpbmciCisgICAgICAgICAgICAgICB8ICIoIiByZWdleHAgIikiCisKKyAgICAgICAxLiAiLCIgaXMgdXNlZCBmb3IgZGVzY3JpYmluZyBzdGFydCBvZiB0aGUgbmV4dCBjeWNsZSBpbgorICAgICAgIHJlc2VydmF0aW9uLgorCisgICAgICAgMi4gInwiIGlzIHVzZWQgZm9yIGRlc2NyaWJpbmcgdGhlIHJlc2VydmF0aW9uIGRlc2NyaWJlZCBieSB0aGUKKyAgICAgICBmaXJzdCByZWd1bGFyIGV4cHJlc3Npb24gKm9yKiB0aGUgcmVzZXJ2YXRpb24gZGVzY3JpYmVkIGJ5IHRoZQorICAgICAgIHNlY29uZCByZWd1bGFyIGV4cHJlc3Npb24gKm9yKiBldGMuCisKKyAgICAgICAzLiAiKyIgaXMgdXNlZCBmb3IgZGVzY3JpYmluZyB0aGUgcmVzZXJ2YXRpb24gZGVzY3JpYmVkIGJ5IHRoZQorICAgICAgIGZpcnN0IHJlZ3VsYXIgZXhwcmVzc2lvbiAqYW5kKiB0aGUgcmVzZXJ2YXRpb24gZGVzY3JpYmVkIGJ5IHRoZQorICAgICAgIHNlY29uZCByZWd1bGFyIGV4cHJlc3Npb24gKmFuZCogZXRjLgorCisgICAgICAgNC4gIioiIGlzIHVzZWQgZm9yIGNvbnZlbmllbmNlIGFuZCBzaW1wbHkgbWVhbnMgc2VxdWVuY2UgaW4KKyAgICAgICB3aGljaCB0aGUgcmVndWxhciBleHByZXNzaW9uIGFyZSByZXBlYXRlZCBOVU1CRVIgdGltZXMgd2l0aAorICAgICAgIGN5Y2xlIGFkdmFuY2luZyAoc2VlICIsIikuCisKKyAgICAgICA1LiBjcHUgZnVuY3Rpb25hbCB1bml0IG5hbWUgd2hpY2ggbWVhbnMgaXRzIHJlc2VydmF0aW9uLgorCisgICAgICAgNi4gcmVzZXJ2YXRpb24gbmFtZSAtLSBzZWUgZGVmaW5lX3Jlc2VydmF0aW9uLgorCisgICAgICAgNy4gc3RyaW5nICJub3RoaW5nIiBtZWFucyBubyB1bml0cyByZXNlcnZhdGlvbi4gICovCisKK0RFRl9SVExfRVhQUihERUZJTkVfSU5TTl9SRVNFUlZBVElPTiwgImRlZmluZV9pbnNuX3Jlc2VydmF0aW9uIiwgInNpZXMiLCBSVFhfRVhUUkEpCisKKy8qIEV4cHJlc3Npb25zIHVzZWQgZm9yIGluc24gYXR0cmlidXRlcy4gICovCisKKy8qIERlZmluaXRpb24gb2YgYW4gaW5zbiBhdHRyaWJ1dGUuCisgICAxc3Qgb3BlcmFuZDogbmFtZSBvZiB0aGUgYXR0cmlidXRlCisgICAybmQgb3BlcmFuZDogY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcG9zc2libGUgYXR0cmlidXRlIHZhbHVlcworICAgM3JkIG9wZXJhbmQ6IGV4cHJlc3Npb24gZm9yIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUuICAqLworREVGX1JUTF9FWFBSKERFRklORV9BVFRSLCAiZGVmaW5lX2F0dHIiLCAic3NlIiwgUlRYX0VYVFJBKQorCisvKiBNYXJrZXIgZm9yIHRoZSBuYW1lIG9mIGFuIGF0dHJpYnV0ZS4gICovCitERUZfUlRMX0VYUFIoQVRUUiwgImF0dHIiLCAicyIsIFJUWF9FWFRSQSkKKworLyogRm9yIHVzZSBpbiB0aGUgbGFzdCAob3B0aW9uYWwpIG9wZXJhbmQgb2YgREVGSU5FX0lOU04gb3IgREVGSU5FX1BFRVBIT0xFIGFuZAorICAgaW4gREVGSU5FX0FTTV9JTlNOIHRvIHNwZWNpZnkgYW4gYXR0cmlidXRlIHRvIGFzc2lnbiB0byBpbnNucyBtYXRjaGluZyB0aGF0CisgICBwYXR0ZXJuLgorCisgICAoc2V0X2F0dHIgIm5hbWUiICJ2YWx1ZSIpIGlzIGVxdWl2YWxlbnQgdG8KKyAgIChzZXQgKGF0dHIgIm5hbWUiKSAoY29uc3Rfc3RyaW5nICJ2YWx1ZSIpKSAgKi8KK0RFRl9SVExfRVhQUihTRVRfQVRUUiwgInNldF9hdHRyIiwgInNzIiwgUlRYX0VYVFJBKQorCisvKiBJbiB0aGUgbGFzdCBvcGVyYW5kIG9mIERFRklORV9JTlNOIGFuZCBERUZJTkVfUEVFUEhPTEUsIHRoaXMgY2FuIGJlIHVzZWQgdG8KKyAgIHNwZWNpZnkgdGhhdCBhdHRyaWJ1dGUgdmFsdWVzIGFyZSB0byBiZSBhc3NpZ25lZCBhY2NvcmRpbmcgdG8gdGhlCisgICBhbHRlcm5hdGl2ZSBtYXRjaGVkLgorCisgICBUaGUgZm9sbG93aW5nIHRocmVlIGV4cHJlc3Npb25zIGFyZSBlcXVpdmFsZW50OgorCisgICAoc2V0IChhdHRyICJhdHQiKSAoY29uZCBbKGVxX2F0dHJxICJhbHRlcm5hdGl2ZSIgIjEiKSAoY29uc3Rfc3RyaW5nICJhMSIpCisJCQkgICAgKGVxX2F0dHJxICJhbHRlcm5hdGl2ZSIgIjIiKSAoY29uc3Rfc3RyaW5nICJhMiIpXQorCQkJICAgKGNvbnN0X3N0cmluZyAiYTMiKSkpCisgICAoc2V0X2F0dHJfYWx0ZXJuYXRpdmUgImF0dCIgWyhjb25zdF9zdHJpbmcgImExIikgKGNvbnN0X3N0cmluZyAiYTIiKQorCQkJCSAoY29uc3Rfc3RyaW5nICJhMyIpXSkKKyAgIChzZXRfYXR0ciAiYXR0IiAiYTEsYTIsYTMiKQorICovCitERUZfUlRMX0VYUFIoU0VUX0FUVFJfQUxURVJOQVRJVkUsICJzZXRfYXR0cl9hbHRlcm5hdGl2ZSIsICJzRSIsIFJUWF9FWFRSQSkKKworLyogQSBjb25kaXRpb25hbCBleHByZXNzaW9uIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgYXR0cmlidXRlIG9mCisgICB0aGUgY3VycmVudCBpbnNuIGVxdWFscyB0aGUgc3BlY2lmaWVkIHZhbHVlLiAgVGhlIGZpcnN0IG9wZXJhbmQgaXMgdGhlCisgICBhdHRyaWJ1dGUgbmFtZSBhbmQgdGhlIHNlY29uZCBpcyB0aGUgY29tcGFyaXNvbiB2YWx1ZS4gICovCitERUZfUlRMX0VYUFIoRVFfQVRUUiwgImVxX2F0dHIiLCAic3MiLCBSVFhfRVhUUkEpCisKKy8qIEEgc3BlY2lhbCBjYXNlIG9mIHRoZSBhYm92ZSByZXByZXNlbnRpbmcgYSBzZXQgb2YgYWx0ZXJuYXRpdmVzLiAgVGhlIGZpcnN0CisgICBvcGVyYW5kIGlzIGJpdG1hcCBvZiB0aGUgc2V0LCB0aGUgc2Vjb25kIG9uZSBpcyB0aGUgZGVmYXVsdCB2YWx1ZS4gICovCitERUZfUlRMX0VYUFIoRVFfQVRUUl9BTFQsICJlcV9hdHRyX2FsdCIsICJpaSIsIFJUWF9FWFRSQSkKKworLyogQSBjb25kaXRpb25hbCBleHByZXNzaW9uIHdoaWNoIGlzIHRydWUgaWYgdGhlIHNwZWNpZmllZCBmbGFnIGlzCisgICB0cnVlIGZvciB0aGUgaW5zbiBiZWluZyBzY2hlZHVsZWQgaW4gcmVvcmcuCisKKyAgIGdlbmF0dHIuYyBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZmxhZ3Mgd2hpY2ggY2FuIGJlIHRlc3RlZCBieQorICAgKGF0dHJfZmxhZyAiZm9vIikgZXhwcmVzc2lvbnMgaW4gZWxpZ2libGVfZm9yX2RlbGF5LgorCisgICBmb3J3YXJkLCBiYWNrd2FyZCwgdmVyeV9saWtlbHksIGxpa2VseSwgdmVyeV91bmxpa2VseSwgYW5kIHVubGlrZWx5LiAgKi8KKworREVGX1JUTF9FWFBSIChBVFRSX0ZMQUcsICJhdHRyX2ZsYWciLCAicyIsIFJUWF9FWFRSQSkKKworLyogR2VuZXJhbCBjb25kaXRpb25hbC4gVGhlIGZpcnN0IG9wZXJhbmQgaXMgYSB2ZWN0b3IgY29tcG9zZWQgb2YgcGFpcnMgb2YKKyAgIGV4cHJlc3Npb25zLiAgVGhlIGZpcnN0IGVsZW1lbnQgb2YgZWFjaCBwYWlyIGlzIGV2YWx1YXRlZCwgaW4gdHVybi4KKyAgIFRoZSB2YWx1ZSBvZiB0aGUgY29uZGl0aW9uYWwgaXMgdGhlIHNlY29uZCBleHByZXNzaW9uIG9mIHRoZSBmaXJzdCBwYWlyCisgICB3aG9zZSBmaXJzdCBleHByZXNzaW9uIGV2YWx1YXRlcyBub256ZXJvLiAgSWYgbm9uZSBvZiB0aGUgZXhwcmVzc2lvbnMgaXMKKyAgIHRydWUsIHRoZSBzZWNvbmQgb3BlcmFuZCB3aWxsIGJlIHVzZWQgYXMgdGhlIHZhbHVlIG9mIHRoZSBjb25kaXRpb25hbC4gICovCitERUZfUlRMX0VYUFIoQ09ORCwgImNvbmQiLCAiRWUiLCBSVFhfRVhUUkEpCisKKyNlbmRpZiAvKiBHRU5FUkFUT1JfRklMRSAqLworCisvKgorTG9jYWwgdmFyaWFibGVzOgorbW9kZTpjCitFbmQ6CisqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3J0bC5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3J0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwN2I1M2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvcnRsLmgKQEAgLTAsMCArMSwyNDc4IEBACisvKiBSZWdpc3RlciBUcmFuc2ZlciBMYW5ndWFnZSAoUlRMKSBkZWZpbml0aW9ucyBmb3IgR0NDCisgICBDb3B5cmlnaHQgKEMpIDE5ODcsIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisgICAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX1JUTF9ICisjZGVmaW5lIEdDQ19SVExfSAorCisjaW5jbHVkZSAic3RhdGlzdGljcy5oIgorI2luY2x1ZGUgIm1hY2htb2RlLmgiCisjaW5jbHVkZSAiaW5wdXQuaCIKKyNpbmNsdWRlICJyZWFsLmgiCisjaW5jbHVkZSAidmVjLmgiCisjaW5jbHVkZSAiZml4ZWQtdmFsdWUuaCIKKyNpbmNsdWRlICJhbGlhcy5oIgorCisjdW5kZWYgRkZTICAvKiBTb21lIHN5c3RlbXMgcHJlZGVmaW5lIHRoaXMgc3ltYm9sOyBkb24ndCBsZXQgaXQgaW50ZXJmZXJlLiAgKi8KKyN1bmRlZiBGTE9BVCAvKiBMaWtld2lzZS4gICovCisjdW5kZWYgQUJTIC8qIExpa2V3aXNlLiAgKi8KKyN1bmRlZiBQQyAvKiBMaWtld2lzZS4gICovCisKKy8qIFZhbHVlIHVzZWQgYnkgc29tZSBwYXNzZXMgdG8gInJlY29nbml6ZSIgbm9vcCBtb3ZlcyBhcyB2YWxpZAorIGluc3RydWN0aW9ucy4gICovCisjZGVmaW5lIE5PT1BfTU9WRV9JTlNOX0NPREUJSU5UX01BWAorCisvKiBSZWdpc3RlciBUcmFuc2ZlciBMYW5ndWFnZSBFWFBSRVNTSU9OUyBDT0RFUyAqLworCisjZGVmaW5lIFJUWF9DT0RFCWVudW0gcnR4X2NvZGUKK2VudW0gcnR4X2NvZGUgIHsKKworI2RlZmluZSBERUZfUlRMX0VYUFIoRU5VTSwgTkFNRSwgRk9STUFULCBDTEFTUykgICBFTlVNICwKKyNpbmNsdWRlICJydGwuZGVmIgkJLyogcnRsIGV4cHJlc3Npb25zIGFyZSBkb2N1bWVudGVkIGhlcmUgKi8KKyN1bmRlZiBERUZfUlRMX0VYUFIKKworICBMQVNUX0FORF9VTlVTRURfUlRYX0NPREV9OwkvKiBBIGNvbnZlbmllbnQgd2F5IHRvIGdldCBhIHZhbHVlIGZvcgorCQkJCSAgIE5VTV9SVFhfQ09ERS4KKwkJCQkgICBBc3N1bWVzIGRlZmF1bHQgZW51bSB2YWx1ZSBhc3NpZ25tZW50LiAgKi8KKworI2RlZmluZSBOVU1fUlRYX0NPREUgKChpbnQpIExBU1RfQU5EX1VOVVNFRF9SVFhfQ09ERSkKKwkJCQkvKiBUaGUgY2FzdCBoZXJlLCBzYXZlcyBtYW55IGVsc2V3aGVyZS4gICovCisKKy8qIFJlZ2lzdGVyIFRyYW5zZmVyIExhbmd1YWdlIEVYUFJFU1NJT05TIENPREUgQ0xBU1NFUyAqLworCitlbnVtIHJ0eF9jbGFzcyAgeworICAvKiBXZSBjaGVjayBiaXQgMC0xIG9mIHNvbWUgcnR4IGNsYXNzIGNvZGVzIGluIHRoZSBwcmVkaWNhdGVzIGJlbG93LiAgKi8KKworICAvKiBCaXQgMCA9IGNvbXBhcmlzb24gaWYgMCwgYXJpdGhtZXRpYyBpcyAxCisgICAgIEJpdCAxID0gMSBpZiBjb21tdXRhdGl2ZS4gICovCisgIFJUWF9DT01QQVJFLAkJLyogMCAqLworICBSVFhfQ09NTV9DT01QQVJFLAorICBSVFhfQklOX0FSSVRILAorICBSVFhfQ09NTV9BUklUSCwKKworICAvKiBNdXN0IGZvbGxvdyB0aGUgZm91ciBwcmVjZWRpbmcgdmFsdWVzLiAgKi8KKyAgUlRYX1VOQVJZLAkJLyogNCAqLworCisgIFJUWF9FWFRSQSwKKyAgUlRYX01BVENILAorICBSVFhfSU5TTiwKKworICAvKiBCaXQgMCA9IDEgaWYgY29uc3RhbnQuICAqLworICBSVFhfT0JKLAkJLyogOCAqLworICBSVFhfQ09OU1RfT0JKLAorCisgIFJUWF9URVJOQVJZLAorICBSVFhfQklURklFTERfT1BTLAorICBSVFhfQVVUT0lOQworfTsKKworI2RlZmluZSBSVFhfT0JKX01BU0sgKH4xKQorI2RlZmluZSBSVFhfT0JKX1JFU1VMVCAoUlRYX09CSiAmIFJUWF9PQkpfTUFTSykKKyNkZWZpbmUgUlRYX0NPTVBBUkVfTUFTSyAofjEpCisjZGVmaW5lIFJUWF9DT01QQVJFX1JFU1VMVCAoUlRYX0NPTVBBUkUgJiBSVFhfQ09NUEFSRV9NQVNLKQorI2RlZmluZSBSVFhfQVJJVEhNRVRJQ19NQVNLICh+MSkKKyNkZWZpbmUgUlRYX0FSSVRITUVUSUNfUkVTVUxUIChSVFhfQ09NTV9BUklUSCAmIFJUWF9BUklUSE1FVElDX01BU0spCisjZGVmaW5lIFJUWF9CSU5BUllfTUFTSyAofjMpCisjZGVmaW5lIFJUWF9CSU5BUllfUkVTVUxUIChSVFhfQ09NUEFSRSAmIFJUWF9CSU5BUllfTUFTSykKKyNkZWZpbmUgUlRYX0NPTU1VVEFUSVZFX01BU0sgKH4yKQorI2RlZmluZSBSVFhfQ09NTVVUQVRJVkVfUkVTVUxUIChSVFhfQ09NTV9DT01QQVJFICYgUlRYX0NPTU1VVEFUSVZFX01BU0spCisjZGVmaW5lIFJUWF9OT05fQ09NTVVUQVRJVkVfUkVTVUxUIChSVFhfQ09NUEFSRSAmIFJUWF9DT01NVVRBVElWRV9NQVNLKQorCitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBydHhfbGVuZ3RoW05VTV9SVFhfQ09ERV07CisjZGVmaW5lIEdFVF9SVFhfTEVOR1RIKENPREUpCQkocnR4X2xlbmd0aFsoaW50KSAoQ09ERSldKQorCitleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IHJ0eF9uYW1lW05VTV9SVFhfQ09ERV07CisjZGVmaW5lIEdFVF9SVFhfTkFNRShDT0RFKQkJKHJ0eF9uYW1lWyhpbnQpIChDT0RFKV0pCisKK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgcnR4X2Zvcm1hdFtOVU1fUlRYX0NPREVdOworI2RlZmluZSBHRVRfUlRYX0ZPUk1BVChDT0RFKQkJKHJ0eF9mb3JtYXRbKGludCkgKENPREUpXSkKKworZXh0ZXJuIGNvbnN0IGVudW0gcnR4X2NsYXNzIHJ0eF9jbGFzc1tOVU1fUlRYX0NPREVdOworI2RlZmluZSBHRVRfUlRYX0NMQVNTKENPREUpCQkocnR4X2NsYXNzWyhpbnQpIChDT0RFKV0pCisKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIHJ0eF9jb2RlX3NpemVbTlVNX1JUWF9DT0RFXTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIHJ0eF9uZXh0W05VTV9SVFhfQ09ERV07CisMCisvKiBUaGUgZmxhZ3MgYW5kIGJpdGZpZWxkcyBvZiBhbiBBRERSX0RJRkZfVkVDLiAgQkFTRSBpcyB0aGUgYmFzZSBsYWJlbAorICAgcmVsYXRpdmUgdG8gd2hpY2ggdGhlIG9mZnNldHMgYXJlIGNhbGN1bGF0ZWQsIGFzIGV4cGxhaW5lZCBpbiBydGwuZGVmLiAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qIFNldCBhdCB0aGUgc3RhcnQgb2Ygc2hvcnRlbl9icmFuY2hlcyAtIE9OTFkgV0hFTiBPUFRJTUlaSU5HIC0gOiAqLworICB1bnNpZ25lZCBtaW5fYWxpZ246IDg7CisgIC8qIEZsYWdzOiAqLworICB1bnNpZ25lZCBiYXNlX2FmdGVyX3ZlYzogMTsgLyogQkFTRSBpcyBhZnRlciB0aGUgQUREUl9ESUZGX1ZFQy4gICovCisgIHVuc2lnbmVkIG1pbl9hZnRlcl92ZWM6IDE7ICAvKiBtaW5pbXVtIGFkZHJlc3MgdGFyZ2V0IGxhYmVsIGlzCisJCQkJIGFmdGVyIHRoZSBBRERSX0RJRkZfVkVDLiAgKi8KKyAgdW5zaWduZWQgbWF4X2FmdGVyX3ZlYzogMTsgIC8qIG1heGltdW0gYWRkcmVzcyB0YXJnZXQgbGFiZWwgaXMKKwkJCQkgYWZ0ZXIgdGhlIEFERFJfRElGRl9WRUMuICAqLworICB1bnNpZ25lZCBtaW5fYWZ0ZXJfYmFzZTogMTsgLyogbWluaW11bSBhZGRyZXNzIHRhcmdldCBsYWJlbCBpcworCQkJCSBhZnRlciBCQVNFLiAgKi8KKyAgdW5zaWduZWQgbWF4X2FmdGVyX2Jhc2U6IDE7IC8qIG1heGltdW0gYWRkcmVzcyB0YXJnZXQgbGFiZWwgaXMKKwkJCQkgYWZ0ZXIgQkFTRS4gICovCisgIC8qIFNldCBieSB0aGUgYWN0dWFsIGJyYW5jaCBzaG9ydGVuaW5nIHByb2Nlc3MgLSBPTkxZIFdIRU4gT1BUSU1JWklORyAtIDogKi8KKyAgdW5zaWduZWQgb2Zmc2V0X3Vuc2lnbmVkOiAxOyAvKiBvZmZzZXRzIGhhdmUgdG8gYmUgdHJlYXRlZCBhcyB1bnNpZ25lZC4gICovCisgIHVuc2lnbmVkIDogMjsKKyAgdW5zaWduZWQgc2NhbGUgOiA4OworfSBhZGRyX2RpZmZfdmVjX2ZsYWdzOworCisvKiBTdHJ1Y3R1cmUgdXNlZCB0byBkZXNjcmliZSB0aGUgYXR0cmlidXRlcyBvZiBhIE1FTS4gIFRoZXNlIGFyZSBoYXNoZWQKKyAgIHNvIE1FTXMgdGhhdCB0aGUgc2FtZSBhdHRyaWJ1dGVzIHNoYXJlIGEgZGF0YSBzdHJ1Y3R1cmUuICBUaGlzIG1lYW5zCisgICB0aGV5IGNhbm5vdCBiZSBtb2RpZmllZCBpbiBwbGFjZS4gIElmIGFueSBlbGVtZW50IGlzIG5vbnplcm8sIGl0IG1lYW5zCisgICB0aGUgdmFsdWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIGlzIHVua25vd24uICAqLworLyogQUxJR04gYW5kIFNJWkUgYXJlIHRoZSBhbGlnbm1lbnQgYW5kIHNpemUgb2YgdGhlIE1FTSBpdHNlbGYsCisgICB3aGlsZSBFWFBSIGNhbiBkZXNjcmliZSBhIGxhcmdlciB1bmRlcmx5aW5nIG9iamVjdCwgd2hpY2ggbWlnaHQgaGF2ZSBhCisgICBzdHJpY3RlciBhbGlnbm1lbnQ7IE9GRlNFVCBpcyB0aGUgb2Zmc2V0IG9mIHRoZSBNRU0gd2l0aGluIHRoYXQgb2JqZWN0LiAgKi8KK3R5cGVkZWYgc3RydWN0IEdUWSgoKSkgbWVtX2F0dHJzCit7CisgIHRyZWUgZXhwcjsJCQkvKiBleHByIGNvcnJlc3BvbmRpbmcgdG8gTUVNLiAgKi8KKyAgcnR4IG9mZnNldDsJCQkvKiBPZmZzZXQgZnJvbSBzdGFydCBvZiBERUNMLCBhcyBDT05TVF9JTlQuICAqLworICBydHggc2l6ZTsJCQkvKiBTaXplIGluIGJ5dGVzLCBhcyBhIENPTlNUX0lOVC4gICovCisgIGFsaWFzX3NldF90eXBlIGFsaWFzOwkJLyogTWVtb3J5IGFsaWFzIHNldC4gICovCisgIHVuc2lnbmVkIGludCBhbGlnbjsJCS8qIEFsaWdubWVudCBvZiBNRU0gaW4gYml0cy4gICovCisgIHVuc2lnbmVkIGNoYXIgYWRkcnNwYWNlOwkvKiBBZGRyZXNzIHNwYWNlICgwIGZvciBnZW5lcmljKS4gICovCit9IG1lbV9hdHRyczsKKworLyogU3RydWN0dXJlIHVzZWQgdG8gZGVzY3JpYmUgdGhlIGF0dHJpYnV0ZXMgb2YgYSBSRUcgaW4gc2ltaWxhciB3YXkgYXMKKyAgIG1lbV9hdHRycyBkb2VzIGZvciBNRU0gYWJvdmUuICBOb3RlIHRoYXQgdGhlIE9GRlNFVCBmaWVsZCBpcyBjYWxjdWxhdGVkCisgICBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIG1lbV9hdHRycywgcmF0aGVyIHRoYW4gaW4gdGhlIHNhbWUgd2F5IGFzIGEKKyAgIFNVQlJFR19CWVRFLiAgRm9yIGV4YW1wbGUsIGlmIGEgYmlnLWVuZGlhbiB0YXJnZXQgc3RvcmVzIGEgYnl0ZQorICAgb2JqZWN0IGluIHRoZSBsb3cgcGFydCBvZiBhIDQtYnl0ZSByZWdpc3RlciwgdGhlIE9GRlNFVCBmaWVsZAorICAgd2lsbCBiZSAtMyByYXRoZXIgdGhhbiAwLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgR1RZKCgpKSByZWdfYXR0cnMgeworICB0cmVlIGRlY2w7CQkJLyogZGVjbCBjb3JyZXNwb25kaW5nIHRvIFJFRy4gICovCisgIEhPU1RfV0lERV9JTlQgb2Zmc2V0OwkJLyogT2Zmc2V0IGZyb20gc3RhcnQgb2YgREVDTC4gICovCit9IHJlZ19hdHRyczsKKworLyogQ29tbW9uIHVuaW9uIGZvciBhbiBlbGVtZW50IG9mIGFuIHJ0eC4gICovCisKK3VuaW9uIHJ0dW5pb25fZGVmCit7CisgIGludCBydF9pbnQ7CisgIHVuc2lnbmVkIGludCBydF91aW50OworICBjb25zdCBjaGFyICpydF9zdHI7CisgIHJ0eCBydF9ydHg7CisgIHJ0dmVjIHJ0X3J0dmVjOworICBlbnVtIG1hY2hpbmVfbW9kZSBydF90eXBlOworICBhZGRyX2RpZmZfdmVjX2ZsYWdzIHJ0X2FkZHJfZGlmZl92ZWNfZmxhZ3M7CisgIHN0cnVjdCBjc2VsaWJfdmFsX3N0cnVjdCAqcnRfY3NlbGliOworICBzdHJ1Y3QgYml0bWFwX2hlYWRfZGVmICpydF9iaXQ7CisgIHRyZWUgcnRfdHJlZTsKKyAgc3RydWN0IGJhc2ljX2Jsb2NrX2RlZiAqcnRfYmI7CisgIG1lbV9hdHRycyAqcnRfbWVtOworICByZWdfYXR0cnMgKnJ0X3JlZzsKKyAgc3RydWN0IGNvbnN0YW50X2Rlc2NyaXB0b3JfcnR4ICpydF9jb25zdGFudDsKK307Cit0eXBlZGVmIHVuaW9uIHJ0dW5pb25fZGVmIHJ0dW5pb247CisKKy8qIFRoaXMgc3RydWN0dXJlIHJlbWVtYmVycyB0aGUgcG9zaXRpb24gb2YgYSBTWU1CT0xfUkVGIHdpdGhpbiBhbgorICAgb2JqZWN0X2Jsb2NrIHN0cnVjdHVyZS4gIEEgU1lNQk9MX1JFRiBvbmx5IHByb3ZpZGVzIHRoaXMgaW5mb3JtYXRpb24KKyAgIGlmIFNZTUJPTF9SRUZfSEFTX0JMT0NLX0lORk9fUCBpcyB0cnVlLiAgKi8KK3N0cnVjdCBHVFkoKCkpIGJsb2NrX3N5bWJvbCB7CisgIC8qIFRoZSB1c3VhbCBTWU1CT0xfUkVGIGZpZWxkcy4gICovCisgIHJ0dW5pb24gR1RZICgoc2tpcCkpIGZsZFszXTsKKworICAvKiBUaGUgYmxvY2sgdGhhdCBjb250YWlucyB0aGlzIG9iamVjdC4gICovCisgIHN0cnVjdCBvYmplY3RfYmxvY2sgKmJsb2NrOworCisgIC8qIFRoZSBvZmZzZXQgb2YgdGhpcyBvYmplY3QgZnJvbSB0aGUgc3RhcnQgb2YgaXRzIGJsb2NrLiAgSXQgaXMgbmVnYXRpdmUKKyAgICAgaWYgdGhlIHN5bWJvbCBoYXMgbm90IHlldCBiZWVuIGFzc2lnbmVkIGFuIG9mZnNldC4gICovCisgIEhPU1RfV0lERV9JTlQgb2Zmc2V0OworfTsKKworREVGX1ZFQ19QKHJ0eCk7CitERUZfVkVDX0FMTE9DX1AocnR4LGhlYXApOworREVGX1ZFQ19BTExPQ19QKHJ0eCxnYyk7CisKKy8qIERlc2NyaWJlcyBhIGdyb3VwIG9mIG9iamVjdHMgdGhhdCBhcmUgdG8gYmUgcGxhY2VkIHRvZ2V0aGVyIGluIHN1Y2gKKyAgIGEgd2F5IHRoYXQgdGhlaXIgcmVsYXRpdmUgcG9zaXRpb25zIGFyZSBrbm93bi4gICovCitzdHJ1Y3QgR1RZKCgpKSBvYmplY3RfYmxvY2sgeworICAvKiBUaGUgc2VjdGlvbiBpbiB3aGljaCB0aGVzZSBvYmplY3RzIHNob3VsZCBiZSBwbGFjZWQuICAqLworICBzZWN0aW9uICpzZWN0OworCisgIC8qIFRoZSBhbGlnbm1lbnQgb2YgdGhlIGZpcnN0IG9iamVjdCwgbWVhc3VyZWQgaW4gYml0cy4gICovCisgIHVuc2lnbmVkIGludCBhbGlnbm1lbnQ7CisKKyAgLyogVGhlIHRvdGFsIHNpemUgb2YgdGhlIG9iamVjdHMsIG1lYXN1cmVkIGluIGJ5dGVzLiAgKi8KKyAgSE9TVF9XSURFX0lOVCBzaXplOworCisgIC8qIFRoZSBTWU1CT0xfUkVGcyBmb3IgZWFjaCBvYmplY3QuICBUaGUgdmVjdG9yIGlzIHNvcnRlZCBpbgorICAgICBvcmRlciBvZiBpbmNyZWFzaW5nIG9mZnNldCBhbmQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIHdpbGwKKyAgICAgaG9sZCBmb3IgZWFjaCBlbGVtZW50IFg6CisKKwkgU1lNQk9MX1JFRl9IQVNfQkxPQ0tfSU5GT19QIChYKQorCSAhU1lNQk9MX1JFRl9BTkNIT1JfUCAoWCkKKwkgU1lNQk9MX1JFRl9CTE9DSyAoWCkgPT0gW2FkZHJlc3Mgb2YgdGhpcyBzdHJ1Y3R1cmVdCisJIFNZTUJPTF9SRUZfQkxPQ0tfT0ZGU0VUIChYKSA+PSAwLiAgKi8KKyAgVkVDKHJ0eCxnYykgKm9iamVjdHM7CisKKyAgLyogQWxsIHRoZSBhbmNob3IgU1lNQk9MX1JFRnMgdXNlZCB0byBhZGRyZXNzIHRoZXNlIG9iamVjdHMsIHNvcnRlZAorICAgICBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIG9mZnNldCwgYW5kIHRoZW4gaW5jcmVhc2luZyBUTFMgbW9kZWwuCisgICAgIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyB3aWxsIGhvbGQgZm9yIGVhY2ggZWxlbWVudCBYIGluIHRoaXMgdmVjdG9yOgorCisJIFNZTUJPTF9SRUZfSEFTX0JMT0NLX0lORk9fUCAoWCkKKwkgU1lNQk9MX1JFRl9BTkNIT1JfUCAoWCkKKwkgU1lNQk9MX1JFRl9CTE9DSyAoWCkgPT0gW2FkZHJlc3Mgb2YgdGhpcyBzdHJ1Y3R1cmVdCisJIFNZTUJPTF9SRUZfQkxPQ0tfT0ZGU0VUIChYKSA+PSAwLiAgKi8KKyAgVkVDKHJ0eCxnYykgKmFuY2hvcnM7Cit9OworCisvKiBSVEwgZXhwcmVzc2lvbiAoInJ0eCIpLiAgKi8KKworc3RydWN0IEdUWSgoY2hhaW5fbmV4dCAoIlJUWF9ORVhUICgmJWgpIiksCisJCSAgICBjaGFpbl9wcmV2ICgiUlRYX1BSRVYgKCYlaCkiKSkpIHJ0eF9kZWYgeworICAvKiBUaGUga2luZCBvZiBleHByZXNzaW9uIHRoaXMgaXMuICAqLworICBFTlVNX0JJVEZJRUxEKHJ0eF9jb2RlKSBjb2RlOiAxNjsKKworICAvKiBUaGUga2luZCBvZiB2YWx1ZSB0aGUgZXhwcmVzc2lvbiBoYXMuICAqLworICBFTlVNX0JJVEZJRUxEKG1hY2hpbmVfbW9kZSkgbW9kZSA6IDg7CisKKyAgLyogMSBpbiBhIE1FTSBpZiB3ZSBzaG91bGQga2VlcCB0aGUgYWxpYXMgc2V0IGZvciB0aGlzIG1lbSB1bmNoYW5nZWQKKyAgICAgd2hlbiB3ZSBhY2Nlc3MgYSBjb21wb25lbnQuCisgICAgIDEgaW4gYSBDQUxMX0lOU04gaWYgaXQgaXMgYSBzaWJsaW5nIGNhbGwuCisgICAgIDEgaW4gYSBTRVQgdGhhdCBpcyBmb3IgYSByZXR1cm4uCisgICAgIEluIGEgQ09ERV9MQUJFTCwgcGFydCBvZiB0aGUgdHdvLWJpdCBhbHRlcm5hdGUgZW50cnkgZmllbGQuICAqLworICB1bnNpZ25lZCBpbnQganVtcCA6IDE7CisgIC8qIEluIGEgQ09ERV9MQUJFTCwgcGFydCBvZiB0aGUgdHdvLWJpdCBhbHRlcm5hdGUgZW50cnkgZmllbGQuCisgICAgIDEgaW4gYSBNRU0gaWYgaXQgY2Fubm90IHRyYXAuCisgICAgIDEgaW4gYSBDQUxMX0lOU04gbG9naWNhbGx5IGVxdWl2YWxlbnQgdG8KKyAgICAgICBFQ0ZfTE9PUElOR19DT05TVF9PUl9QVVJFIGFuZCBERUNMX0xPT1BJTkdfQ09OU1RfT1JfUFVSRV9QLiAqLworICB1bnNpZ25lZCBpbnQgY2FsbCA6IDE7CisgIC8qIDEgaW4gYSBSRUcsIE1FTSwgb3IgQ09OQ0FUIGlmIHRoZSB2YWx1ZSBpcyBzZXQgYXQgbW9zdCBvbmNlLCBhbnl3aGVyZS4KKyAgICAgMSBpbiBhIFNVQlJFRyB1c2VkIGZvciBTVUJSRUdfUFJPTU9URURfVU5TSUdORURfUC4KKyAgICAgMSBpbiBhIFNZTUJPTF9SRUYgaWYgaXQgYWRkcmVzc2VzIHNvbWV0aGluZyBpbiB0aGUgcGVyLWZ1bmN0aW9uCisgICAgIGNvbnN0YW50cyBwb29sLgorICAgICAxIGluIGEgQ0FMTF9JTlNOIGxvZ2ljYWxseSBlcXVpdmFsZW50IHRvIEVDRl9DT05TVCBhbmQgVFJFRV9SRUFET05MWS4KKyAgICAgMSBpbiBhIE5PVEUsIG9yIEVYUFJfTElTVCBmb3IgYSBjb25zdCBjYWxsLgorICAgICAxIGluIGEgSlVNUF9JTlNOLCBDQUxMX0lOU04sIG9yIElOU04gb2YgYW4gYW5udWxsaW5nIGJyYW5jaC4gICovCisgIHVuc2lnbmVkIGludCB1bmNoYW5naW5nIDogMTsKKyAgLyogMSBpbiBhIE1FTSBvciBBU01fT1BFUkFORFMgZXhwcmVzc2lvbiBpZiB0aGUgbWVtb3J5IHJlZmVyZW5jZSBpcyB2b2xhdGlsZS4KKyAgICAgMSBpbiBhbiBJTlNOLCBDQUxMX0lOU04sIEpVTVBfSU5TTiwgQ09ERV9MQUJFTCwgQkFSUklFUiwgb3IgTk9URQorICAgICBpZiBpdCBoYXMgYmVlbiBkZWxldGVkLgorICAgICAxIGluIGEgUkVHIGV4cHJlc3Npb24gaWYgY29ycmVzcG9uZHMgdG8gYSB2YXJpYWJsZSBkZWNsYXJlZCBieSB0aGUgdXNlciwKKyAgICAgMCBmb3IgYW4gaW50ZXJuYWxseSBnZW5lcmF0ZWQgdGVtcG9yYXJ5LgorICAgICAxIGluIGEgU1VCUkVHIHVzZWQgZm9yIFNVQlJFR19QUk9NT1RFRF9VTlNJR05FRF9QLgorICAgICAxIGluIGEgTEFCRUxfUkVGLCBSRUdfTEFCRUxfVEFSR0VUIG9yIFJFR19MQUJFTF9PUEVSQU5EIG5vdGUgZm9yIGEKKyAgICAgbm9uLWxvY2FsIGxhYmVsLgorICAgICBJbiBhIFNZTUJPTF9SRUYsIHRoaXMgZmxhZyBpcyB1c2VkIGZvciBtYWNoaW5lLXNwZWNpZmljIHB1cnBvc2VzLgorICAgICBJbiBhIFBSRUZFVENILCB0aGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQgaXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSBzY2hlZHVsaW5nCisgICAgIGJhcnJpZXIuICAqLworICB1bnNpZ25lZCBpbnQgdm9sYXRpbCA6IDE7CisgIC8qIDEgaW4gYSBNRU0gcmVmZXJyaW5nIHRvIGEgZmllbGQgb2YgYW4gYWdncmVnYXRlLgorICAgICAwIGlmIHRoZSBNRU0gd2FzIGEgdmFyaWFibGUgb3IgdGhlIHJlc3VsdCBvZiBhICogb3BlcmF0b3IgaW4gQzsKKyAgICAgMSBpZiBpdCB3YXMgdGhlIHJlc3VsdCBvZiBhIC4gb3IgLT4gb3BlcmF0b3IgKG9uIGEgc3RydWN0KSBpbiBDLgorICAgICAxIGluIGEgUkVHIGlmIHRoZSByZWdpc3RlciBpcyB1c2VkIG9ubHkgaW4gZXhpdCBjb2RlIGEgbG9vcC4KKyAgICAgMSBpbiBhIFNVQlJFRyBleHByZXNzaW9uIGlmIHdhcyBnZW5lcmF0ZWQgZnJvbSBhIHZhcmlhYmxlIHdpdGggYQorICAgICBwcm9tb3RlZCBtb2RlLgorICAgICAxIGluIGEgQ09ERV9MQUJFTCBpZiB0aGUgbGFiZWwgaXMgdXNlZCBmb3Igbm9ubG9jYWwgZ290b3MKKyAgICAgYW5kIG11c3Qgbm90IGJlIGRlbGV0ZWQgZXZlbiBpZiBpdHMgY291bnQgaXMgemVyby4KKyAgICAgMSBpbiBhbiBJTlNOLCBKVU1QX0lOU04gb3IgQ0FMTF9JTlNOIGlmIHRoaXMgaW5zbiBtdXN0IGJlIHNjaGVkdWxlZAorICAgICB0b2dldGhlciB3aXRoIHRoZSBwcmVjZWRpbmcgaW5zbi4gIFZhbGlkIG9ubHkgd2l0aGluIHNjaGVkLgorICAgICAxIGluIGFuIElOU04sIEpVTVBfSU5TTiwgb3IgQ0FMTF9JTlNOIGlmIGluc24gaXMgaW4gYSBkZWxheSBzbG90IGFuZAorICAgICBmcm9tIHRoZSB0YXJnZXQgb2YgYSBicmFuY2guICBWYWxpZCBmcm9tIHJlb3JnIHVudGlsIGVuZCBvZiBjb21waWxhdGlvbjsKKyAgICAgY2xlYXJlZCBiZWZvcmUgdXNlZC4gICovCisgIHVuc2lnbmVkIGludCBpbl9zdHJ1Y3QgOiAxOworICAvKiBBdCB0aGUgZW5kIG9mIFJUTCBnZW5lcmF0aW9uLCAxIGlmIHRoaXMgcnR4IGlzIHVzZWQuICBUaGlzIGlzIHVzZWQgZm9yCisgICAgIGNvcHlpbmcgc2hhcmVkIHN0cnVjdHVyZS4gIFNlZSBgdW5zaGFyZV9hbGxfcnRsJy4KKyAgICAgSW4gYSBSRUcsIHRoaXMgaXMgbm90IG5lZWRlZCBmb3IgdGhhdCBwdXJwb3NlLCBhbmQgdXNlZCBpbnN0ZWFkCisgICAgIGluIGBsZWFmX3JlbnVtYmVyX3JlZ3NfaW5zbicuCisgICAgIDEgaW4gYSBTWU1CT0xfUkVGLCBtZWFucyB0aGF0IGVtaXRfbGlicmFyeV9jYWxsCisgICAgIGhhcyB1c2VkIGl0IGFzIHRoZSBmdW5jdGlvbi4gICovCisgIHVuc2lnbmVkIGludCB1c2VkIDogMTsKKyAgLyogMSBpbiBhbiBJTlNOIG9yIGEgU0VUIGlmIHRoaXMgcnR4IGlzIHJlbGF0ZWQgdG8gdGhlIGNhbGwgZnJhbWUsCisgICAgIGVpdGhlciBjaGFuZ2luZyBob3cgd2UgY29tcHV0ZSB0aGUgZnJhbWUgYWRkcmVzcyBvciBzYXZpbmcgYW5kCisgICAgIHJlc3RvcmluZyByZWdpc3RlcnMgaW4gdGhlIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZS4KKyAgICAgMSBpbiBhIFJFRyBvciBNRU0gaWYgaXQgaXMgYSBwb2ludGVyLgorICAgICAxIGluIGEgU1lNQk9MX1JFRiBpZiBpdCBhZGRyZXNzZXMgc29tZXRoaW5nIGluIHRoZSBwZXItZnVuY3Rpb24KKyAgICAgY29uc3RhbnQgc3RyaW5nIHBvb2wuICAqLworICB1bnNpZ25lZCBmcmFtZV9yZWxhdGVkIDogMTsKKyAgLyogMSBpbiBhIFJFRyBvciBQQVJBTExFTCB0aGF0IGlzIHRoZSBjdXJyZW50IGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlLgorICAgICAxIGluIGEgTUVNIGlmIGl0IHJlZmVycyB0byBhIHNjYWxhci4KKyAgICAgMSBpbiBhIFNZTUJPTF9SRUYgZm9yIGEgd2VhayBzeW1ib2wuCisgICAgIDEgaW4gYSBDQUxMX0lOU04gbG9naWNhbGx5IGVxdWl2YWxlbnQgdG8gRUNGX1BVUkUgYW5kIERFQ0xfUFVSRV9QLiAqLworICB1bnNpZ25lZCByZXR1cm5fdmFsIDogMTsKKworICAvKiBUaGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgb3BlcmFuZHMgb2YgdGhpcyBydHguCisgICAgIFRoZSBudW1iZXIgb2Ygb3BlcmFuZHMgYW5kIHRoZWlyIHR5cGVzIGFyZSBjb250cm9sbGVkCisgICAgIGJ5IHRoZSBgY29kZScgZmllbGQsIGFjY29yZGluZyB0byBydGwuZGVmLiAgKi8KKyAgdW5pb24gdSB7CisgICAgcnR1bmlvbiBmbGRbMV07CisgICAgSE9TVF9XSURFX0lOVCBod2ludFsxXTsKKyAgICBzdHJ1Y3QgYmxvY2tfc3ltYm9sIGJsb2NrX3N5bTsKKyAgICBzdHJ1Y3QgcmVhbF92YWx1ZSBydjsKKyAgICBzdHJ1Y3QgZml4ZWRfdmFsdWUgZnY7CisgIH0gR1RZICgoc3BlY2lhbCAoInJ0eF9kZWYiKSwgZGVzYyAoIkdFVF9DT0RFICgmJTApIikpKSB1OworfTsKKworLyogVGhlIHNpemUgaW4gYnl0ZXMgb2YgYW4gcnR4IGhlYWRlciAoY29kZSwgbW9kZSBhbmQgZmxhZ3MpLiAgKi8KKyNkZWZpbmUgUlRYX0hEUl9TSVpFIG9mZnNldG9mIChzdHJ1Y3QgcnR4X2RlZiwgdSkKKworLyogVGhlIHNpemUgaW4gYnl0ZXMgb2YgYW4gcnR4IHdpdGggY29kZSBDT0RFLiAgKi8KKyNkZWZpbmUgUlRYX0NPREVfU0laRShDT0RFKSBydHhfY29kZV9zaXplW0NPREVdCisKKyNkZWZpbmUgTlVMTF9SVFggKHJ0eCkgMAorCisvKiBUaGUgIm5leHQiIGFuZCAicHJldmlvdXMiIFJUWCwgcmVsYXRpdmUgdG8gdGhpcyBvbmUuICAqLworCisjZGVmaW5lIFJUWF9ORVhUKFgpIChydHhfbmV4dFtHRVRfQ09ERSAoWCldID09IDAgPyBOVUxMCQkJXAorCQkgICAgIDogKihydHggKikoKChjaGFyICopWCkgKyBydHhfbmV4dFtHRVRfQ09ERSAoWCldKSkKKworLyogRklYTUU6IHRoZSAiTkVYVF9JTlNOIChQUkVWX0lOU04gKFgpKSA9PSBYIiBjb25kaXRpb24gc2hvdWxkbid0IGJlIG5lZWRlZC4KKyAqLworI2RlZmluZSBSVFhfUFJFVihYKSAoKElOU05fUCAoWCkgICAgICAgCQkJXAorICAgICAgICAgICAgICAgICAgICAgIHx8IE5PVEVfUCAoWCkgICAgICAgCQlcCisgICAgICAgICAgICAgICAgICAgICAgfHwgQkFSUklFUl9QIChYKSAgICAgICAgCQlcCisgICAgICAgICAgICAgICAgICAgICAgfHwgTEFCRUxfUCAoWCkpICAgIAkJXAorICAgICAgICAgICAgICAgICAgICAgJiYgUFJFVl9JTlNOIChYKSAhPSBOVUxMICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAmJiBORVhUX0lOU04gKFBSRVZfSU5TTiAoWCkpID09IFggIFwKKyAgICAgICAgICAgICAgICAgICAgID8gUFJFVl9JTlNOIChYKSA6IE5VTEwpCisKKy8qIERlZmluZSBtYWNyb3MgdG8gYWNjZXNzIHRoZSBgY29kZScgZmllbGQgb2YgdGhlIHJ0eC4gICovCisKKyNkZWZpbmUgR0VUX0NPREUoUlRYKQkgICAgKChlbnVtIHJ0eF9jb2RlKSAoUlRYKS0+Y29kZSkKKyNkZWZpbmUgUFVUX0NPREUoUlRYLCBDT0RFKSAoKFJUWCktPmNvZGUgPSAoQ09ERSkpCisKKyNkZWZpbmUgR0VUX01PREUoUlRYKQkgICAgKChlbnVtIG1hY2hpbmVfbW9kZSkgKFJUWCktPm1vZGUpCisjZGVmaW5lIFBVVF9NT0RFKFJUWCwgTU9ERSkgKChSVFgpLT5tb2RlID0gKE1PREUpKQorCisvKiBSVEwgdmVjdG9yLiAgVGhlc2UgYXBwZWFyIGluc2lkZSBSVFgncyB3aGVuIHRoZXJlIGlzIGEgbmVlZAorICAgZm9yIGEgdmFyaWFibGUgbnVtYmVyIG9mIHRoaW5ncy4gIFRoZSBwcmluY2lwbGUgdXNlIGlzIGluc2lkZQorICAgUEFSQUxMRUwgZXhwcmVzc2lvbnMuICAqLworCitzdHJ1Y3QgR1RZKCgpKSBydHZlY19kZWYgeworICBpbnQgbnVtX2VsZW07CQkvKiBudW1iZXIgb2YgZWxlbWVudHMgKi8KKyAgcnR4IEdUWSAoKGxlbmd0aCAoIiVoLm51bV9lbGVtIikpKSBlbGVtWzFdOworfTsKKworI2RlZmluZSBOVUxMX1JUVkVDIChydHZlYykgMAorCisjZGVmaW5lIEdFVF9OVU1fRUxFTShSVFZFQykJCSgoUlRWRUMpLT5udW1fZWxlbSkKKyNkZWZpbmUgUFVUX05VTV9FTEVNKFJUVkVDLCBOVU0pCSgoUlRWRUMpLT5udW1fZWxlbSA9IChOVU0pKQorCisvKiBQcmVkaWNhdGUgeWllbGRpbmcgbm9uemVybyBpZmYgWCBpcyBhbiBydHggZm9yIGEgcmVnaXN0ZXIuICAqLworI2RlZmluZSBSRUdfUChYKSAoR0VUX0NPREUgKFgpID09IFJFRykKKworLyogUHJlZGljYXRlIHlpZWxkaW5nIG5vbnplcm8gaWZmIFggaXMgYW4gcnR4IGZvciBhIG1lbW9yeSBsb2NhdGlvbi4gICovCisjZGVmaW5lIE1FTV9QKFgpIChHRVRfQ09ERSAoWCkgPT0gTUVNKQorCisvKiBQcmVkaWNhdGUgeWllbGRpbmcgbm9uemVybyBpZmYgWCBpcyBhbiBydHggZm9yIGEgY29uc3RhbnQgaW50ZWdlci4gICovCisjZGVmaW5lIENPTlNUX0lOVF9QKFgpIChHRVRfQ09ERSAoWCkgPT0gQ09OU1RfSU5UKQorCisvKiBQcmVkaWNhdGUgeWllbGRpbmcgbm9uemVybyBpZmYgWCBpcyBhIGxhYmVsIGluc24uICAqLworI2RlZmluZSBMQUJFTF9QKFgpIChHRVRfQ09ERSAoWCkgPT0gQ09ERV9MQUJFTCkKKworLyogUHJlZGljYXRlIHlpZWxkaW5nIG5vbnplcm8gaWZmIFggaXMgYSBqdW1wIGluc24uICAqLworI2RlZmluZSBKVU1QX1AoWCkgKEdFVF9DT0RFIChYKSA9PSBKVU1QX0lOU04pCisKKy8qIFByZWRpY2F0ZSB5aWVsZGluZyBub256ZXJvIGlmZiBYIGlzIGEgY2FsbCBpbnNuLiAgKi8KKyNkZWZpbmUgQ0FMTF9QKFgpIChHRVRfQ09ERSAoWCkgPT0gQ0FMTF9JTlNOKQorCisvKiBQcmVkaWNhdGUgeWllbGRpbmcgbm9uemVybyBpZmYgWCBpcyBhbiBpbnNuIHRoYXQgY2Fubm90IGp1bXAuICAqLworI2RlZmluZSBOT05KVU1QX0lOU05fUChYKSAoR0VUX0NPREUgKFgpID09IElOU04pCisKKy8qIFByZWRpY2F0ZSB5aWVsZGluZyBub256ZXJvIGlmZiBYIGlzIGEgZGVidWcgbm90ZS9pbnNuLiAgKi8KKyNkZWZpbmUgREVCVUdfSU5TTl9QKFgpIChHRVRfQ09ERSAoWCkgPT0gREVCVUdfSU5TTikKKworLyogUHJlZGljYXRlIHlpZWxkaW5nIG5vbnplcm8gaWZmIFggaXMgYW4gaW5zbiB0aGF0IGlzIG5vdCBhIGRlYnVnIGluc24uICAqLworI2RlZmluZSBOT05ERUJVR19JTlNOX1AoWCkgKElOU05fUCAoWCkgJiYgIURFQlVHX0lOU05fUCAoWCkpCisKKy8qIE5vbnplcm8gaWYgREVCVUdfSU5TTl9QIG1heSBwb3NzaWJseSBob2xkLiAgKi8KKyNkZWZpbmUgTUFZX0hBVkVfREVCVUdfSU5TTlMgTUFZX0hBVkVfREVCVUdfU1RNVFMKKworLyogUHJlZGljYXRlIHlpZWxkaW5nIG5vbnplcm8gaWZmIFggaXMgYSByZWFsIGluc24uICAqLworI2RlZmluZSBJTlNOX1AoWCkgXAorICAoTk9OSlVNUF9JTlNOX1AgKFgpIHx8IERFQlVHX0lOU05fUCAoWCkgfHwgSlVNUF9QIChYKSB8fCBDQUxMX1AgKFgpKQorCisvKiBQcmVkaWNhdGUgeWllbGRpbmcgbm9uemVybyBpZmYgWCBpcyBhIG5vdGUgaW5zbi4gICovCisjZGVmaW5lIE5PVEVfUChYKSAoR0VUX0NPREUgKFgpID09IE5PVEUpCisKKy8qIFByZWRpY2F0ZSB5aWVsZGluZyBub256ZXJvIGlmZiBYIGlzIGEgYmFycmllciBpbnNuLiAgKi8KKyNkZWZpbmUgQkFSUklFUl9QKFgpIChHRVRfQ09ERSAoWCkgPT0gQkFSUklFUikKKworLyogUHJlZGljYXRlIHlpZWxkaW5nIG5vbnplcm8gaWZmIFggaXMgYSBkYXRhIGZvciBhIGp1bXAgdGFibGUuICAqLworI2RlZmluZSBKVU1QX1RBQkxFX0RBVEFfUChJTlNOKSBcCisgIChKVU1QX1AgKElOU04pICYmIChHRVRfQ09ERSAoUEFUVEVSTiAoSU5TTikpID09IEFERFJfVkVDIHx8IFwKKwkJICAgICBHRVRfQ09ERSAoUEFUVEVSTiAoSU5TTikpID09IEFERFJfRElGRl9WRUMpKQorCisvKiAxIGlmIFggaXMgYSB1bmFyeSBvcGVyYXRvci4gICovCisKKyNkZWZpbmUgVU5BUllfUChYKSAgIFwKKyAgKEdFVF9SVFhfQ0xBU1MgKEdFVF9DT0RFIChYKSkgPT0gUlRYX1VOQVJZKQorCisvKiAxIGlmIFggaXMgYSBiaW5hcnkgb3BlcmF0b3IuICAqLworCisjZGVmaW5lIEJJTkFSWV9QKFgpICAgXAorICAoKEdFVF9SVFhfQ0xBU1MgKEdFVF9DT0RFIChYKSkgJiBSVFhfQklOQVJZX01BU0spID09IFJUWF9CSU5BUllfUkVTVUxUKQorCisvKiAxIGlmIFggaXMgYW4gYXJpdGhtZXRpYyBvcGVyYXRvci4gICovCisKKyNkZWZpbmUgQVJJVEhNRVRJQ19QKFgpICAgXAorICAoKEdFVF9SVFhfQ0xBU1MgKEdFVF9DT0RFIChYKSkgJiBSVFhfQVJJVEhNRVRJQ19NQVNLKQkJCVwKKyAgICA9PSBSVFhfQVJJVEhNRVRJQ19SRVNVTFQpCisKKy8qIDEgaWYgWCBpcyBhbiBhcml0aG1ldGljIG9wZXJhdG9yLiAgKi8KKworI2RlZmluZSBDT01NVVRBVElWRV9BUklUSF9QKFgpICAgXAorICAoR0VUX1JUWF9DTEFTUyAoR0VUX0NPREUgKFgpKSA9PSBSVFhfQ09NTV9BUklUSCkKKworLyogMSBpZiBYIGlzIGEgY29tbXV0YXRpdmUgYXJpdGhtZXRpYyBvcGVyYXRvciBvciBhIGNvbXBhcmlzb24gb3BlcmF0b3IuCisgICBUaGVzZSB0d28gYXJlIHNvbWV0aW1lcyBzZWxlY3RlZCB0b2dldGhlciBiZWNhdXNlIGl0IGlzIHBvc3NpYmxlIHRvCisgICBzd2FwIHRoZSB0d28gb3BlcmFuZHMuICAqLworCisjZGVmaW5lIFNXQVBQQUJMRV9PUEVSQU5EU19QKFgpICAgXAorICAoKDEgPDwgR0VUX1JUWF9DTEFTUyAoR0VUX0NPREUgKFgpKSkJCQkJCVwKKyAgICAmICgoMSA8PCBSVFhfQ09NTV9BUklUSCkgfCAoMSA8PCBSVFhfQ09NTV9DT01QQVJFKQkJCVwKKyAgICAgICB8ICgxIDw8IFJUWF9DT01QQVJFKSkpCisKKy8qIDEgaWYgWCBpcyBhIG5vbi1jb21tdXRhdGl2ZSBvcGVyYXRvci4gICovCisKKyNkZWZpbmUgTk9OX0NPTU1VVEFUSVZFX1AoWCkgICBcCisgICgoR0VUX1JUWF9DTEFTUyAoR0VUX0NPREUgKFgpKSAmIFJUWF9DT01NVVRBVElWRV9NQVNLKQkJXAorICAgID09IFJUWF9OT05fQ09NTVVUQVRJVkVfUkVTVUxUKQorCisvKiAxIGlmIFggaXMgYSBjb21tdXRhdGl2ZSBvcGVyYXRvciBvbiBpbnRlZ2Vycy4gICovCisKKyNkZWZpbmUgQ09NTVVUQVRJVkVfUChYKSAgIFwKKyAgKChHRVRfUlRYX0NMQVNTIChHRVRfQ09ERSAoWCkpICYgUlRYX0NPTU1VVEFUSVZFX01BU0spCQlcCisgICAgPT0gUlRYX0NPTU1VVEFUSVZFX1JFU1VMVCkKKworLyogMSBpZiBYIGlzIGEgcmVsYXRpb25hbCBvcGVyYXRvci4gICovCisKKyNkZWZpbmUgQ09NUEFSSVNPTl9QKFgpICAgXAorICAoKEdFVF9SVFhfQ0xBU1MgKEdFVF9DT0RFIChYKSkgJiBSVFhfQ09NUEFSRV9NQVNLKSA9PSBSVFhfQ09NUEFSRV9SRVNVTFQpCisKKy8qIDEgaWYgWCBpcyBhIGNvbnN0YW50IHZhbHVlIHRoYXQgaXMgYW4gaW50ZWdlci4gICovCisKKyNkZWZpbmUgQ09OU1RBTlRfUChYKSAgIFwKKyAgKEdFVF9SVFhfQ0xBU1MgKEdFVF9DT0RFIChYKSkgPT0gUlRYX0NPTlNUX09CSikKKworLyogMSBpZiBYIGNhbiBiZSB1c2VkIHRvIHJlcHJlc2VudCBhbiBvYmplY3QuICAqLworI2RlZmluZSBPQkpFQ1RfUChYKQkJCQkJCQlcCisgICgoR0VUX1JUWF9DTEFTUyAoR0VUX0NPREUgKFgpKSAmIFJUWF9PQkpfTUFTSykgPT0gUlRYX09CSl9SRVNVTFQpCisKKy8qIEdlbmVyYWwgYWNjZXNzb3IgbWFjcm9zIGZvciBhY2Nlc3NpbmcgdGhlIGZpZWxkcyBvZiBhbiBydHguICAqLworCisjaWYgZGVmaW5lZCBFTkFCTEVfUlRMX0NIRUNLSU5HICYmIChHQ0NfVkVSU0lPTiA+PSAyMDA3KQorLyogVGhlIGJpdCB3aXRoIGEgc3RhciBvdXRzaWRlIHRoZSBzdGF0ZW1lbnQgZXhwciBhbmQgYW4gJiBpbnNpZGUgaXMKKyAgIHNvIHRoYXQgTiBjYW4gYmUgZXZhbHVhdGVkIG9ubHkgb25jZS4gICovCisjZGVmaW5lIFJUTF9DSEVDSzEoUlRYLCBOLCBDMSkgX19leHRlbnNpb25fXwkJCQlcCisoKih7IF9fdHlwZW9mIChSVFgpIGNvbnN0IF9ydHggPSAoUlRYKTsgY29uc3QgaW50IF9uID0gKE4pOwkJXAorICAgICBjb25zdCBlbnVtIHJ0eF9jb2RlIF9jb2RlID0gR0VUX0NPREUgKF9ydHgpOwkJCVwKKyAgICAgaWYgKF9uIDwgMCB8fCBfbiA+PSBHRVRfUlRYX0xFTkdUSCAoX2NvZGUpKQkJCVwKKyAgICAgICBydGxfY2hlY2tfZmFpbGVkX2JvdW5kcyAoX3J0eCwgX24sIF9fRklMRV9fLCBfX0xJTkVfXywJCVwKKwkJCQlfX0ZVTkNUSU9OX18pOwkJCQlcCisgICAgIGlmIChHRVRfUlRYX0ZPUk1BVChfY29kZSlbX25dICE9IEMxKQkJCQlcCisgICAgICAgcnRsX2NoZWNrX2ZhaWxlZF90eXBlMSAoX3J0eCwgX24sIEMxLCBfX0ZJTEVfXywgX19MSU5FX18sCVwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18pOwkJCQlcCisgICAgICZfcnR4LT51LmZsZFtfbl07IH0pKQorCisjZGVmaW5lIFJUTF9DSEVDSzIoUlRYLCBOLCBDMSwgQzIpIF9fZXh0ZW5zaW9uX18JCQlcCisoKih7IF9fdHlwZW9mIChSVFgpIGNvbnN0IF9ydHggPSAoUlRYKTsgY29uc3QgaW50IF9uID0gKE4pOwkJXAorICAgICBjb25zdCBlbnVtIHJ0eF9jb2RlIF9jb2RlID0gR0VUX0NPREUgKF9ydHgpOwkJCVwKKyAgICAgaWYgKF9uIDwgMCB8fCBfbiA+PSBHRVRfUlRYX0xFTkdUSCAoX2NvZGUpKQkJCVwKKyAgICAgICBydGxfY2hlY2tfZmFpbGVkX2JvdW5kcyAoX3J0eCwgX24sIF9fRklMRV9fLCBfX0xJTkVfXywJCVwKKwkJCQlfX0ZVTkNUSU9OX18pOwkJCQlcCisgICAgIGlmIChHRVRfUlRYX0ZPUk1BVChfY29kZSlbX25dICE9IEMxCQkJCVwKKwkgJiYgR0VUX1JUWF9GT1JNQVQoX2NvZGUpW19uXSAhPSBDMikJCQkJXAorICAgICAgIHJ0bF9jaGVja19mYWlsZWRfdHlwZTIgKF9ydHgsIF9uLCBDMSwgQzIsIF9fRklMRV9fLCBfX0xJTkVfXywJXAorCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CQkJCVwKKyAgICAgJl9ydHgtPnUuZmxkW19uXTsgfSkpCisKKyNkZWZpbmUgUlRMX0NIRUNLQzEoUlRYLCBOLCBDKSBfX2V4dGVuc2lvbl9fCQkJCVwKKygqKHsgX190eXBlb2YgKFJUWCkgY29uc3QgX3J0eCA9IChSVFgpOyBjb25zdCBpbnQgX24gPSAoTik7CQlcCisgICAgIGlmIChHRVRfQ09ERSAoX3J0eCkgIT0gKEMpKQkJCQkJXAorICAgICAgIHJ0bF9jaGVja19mYWlsZWRfY29kZTEgKF9ydHgsIChDKSwgX19GSUxFX18sIF9fTElORV9fLAkJXAorCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CQkJCVwKKyAgICAgJl9ydHgtPnUuZmxkW19uXTsgfSkpCisKKyNkZWZpbmUgUlRMX0NIRUNLQzIoUlRYLCBOLCBDMSwgQzIpIF9fZXh0ZW5zaW9uX18JCQlcCisoKih7IF9fdHlwZW9mIChSVFgpIGNvbnN0IF9ydHggPSAoUlRYKTsgY29uc3QgaW50IF9uID0gKE4pOwkJXAorICAgICBjb25zdCBlbnVtIHJ0eF9jb2RlIF9jb2RlID0gR0VUX0NPREUgKF9ydHgpOwkJCVwKKyAgICAgaWYgKF9jb2RlICE9IChDMSkgJiYgX2NvZGUgIT0gKEMyKSkJCQkJXAorICAgICAgIHJ0bF9jaGVja19mYWlsZWRfY29kZTIgKF9ydHgsIChDMSksIChDMiksIF9fRklMRV9fLCBfX0xJTkVfXywJXAorCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7IFwKKyAgICAgJl9ydHgtPnUuZmxkW19uXTsgfSkpCisKKyNkZWZpbmUgUlRWRUNfRUxUKFJUVkVDLCBJKSBfX2V4dGVuc2lvbl9fCQkJCVwKKygqKHsgX190eXBlb2YgKFJUVkVDKSBjb25zdCBfcnR2ZWMgPSAoUlRWRUMpOyBjb25zdCBpbnQgX2kgPSAoSSk7CVwKKyAgICAgaWYgKF9pIDwgMCB8fCBfaSA+PSBHRVRfTlVNX0VMRU0gKF9ydHZlYykpCQkJCVwKKyAgICAgICBydHZlY19jaGVja19mYWlsZWRfYm91bmRzIChfcnR2ZWMsIF9pLCBfX0ZJTEVfXywgX19MSU5FX18sCVwKKwkJCQkgIF9fRlVOQ1RJT05fXyk7CQkJXAorICAgICAmX3J0dmVjLT5lbGVtW19pXTsgfSkpCisKKyNkZWZpbmUgWFdJTlQoUlRYLCBOKSBfX2V4dGVuc2lvbl9fCQkJCQlcCisoKih7IF9fdHlwZW9mIChSVFgpIGNvbnN0IF9ydHggPSAoUlRYKTsgY29uc3QgaW50IF9uID0gKE4pOwkJXAorICAgICBjb25zdCBlbnVtIHJ0eF9jb2RlIF9jb2RlID0gR0VUX0NPREUgKF9ydHgpOwkJCVwKKyAgICAgaWYgKF9uIDwgMCB8fCBfbiA+PSBHRVRfUlRYX0xFTkdUSCAoX2NvZGUpKQkJCVwKKyAgICAgICBydGxfY2hlY2tfZmFpbGVkX2JvdW5kcyAoX3J0eCwgX24sIF9fRklMRV9fLCBfX0xJTkVfXywJCVwKKwkJCQlfX0ZVTkNUSU9OX18pOwkJCQlcCisgICAgIGlmIChHRVRfUlRYX0ZPUk1BVChfY29kZSlbX25dICE9ICd3JykJCQkJXAorICAgICAgIHJ0bF9jaGVja19mYWlsZWRfdHlwZTEgKF9ydHgsIF9uLCAndycsIF9fRklMRV9fLCBfX0xJTkVfXywJXAorCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CQkJCVwKKyAgICAgJl9ydHgtPnUuaHdpbnRbX25dOyB9KSkKKworI2RlZmluZSBYQ1dJTlQoUlRYLCBOLCBDKSBfX2V4dGVuc2lvbl9fCQkJCQlcCisoKih7IF9fdHlwZW9mIChSVFgpIGNvbnN0IF9ydHggPSAoUlRYKTsJCQkJCVwKKyAgICAgaWYgKEdFVF9DT0RFIChfcnR4KSAhPSAoQykpCQkJCQlcCisgICAgICAgcnRsX2NoZWNrX2ZhaWxlZF9jb2RlMSAoX3J0eCwgKEMpLCBfX0ZJTEVfXywgX19MSU5FX18sCQlcCisJCQkgICAgICAgX19GVU5DVElPTl9fKTsJCQkJXAorICAgICAmX3J0eC0+dS5od2ludFtOXTsgfSkpCisKKyNkZWZpbmUgWENNV0lOVChSVFgsIE4sIEMsIE0pIF9fZXh0ZW5zaW9uX18JCQkJXAorKCooeyBfX3R5cGVvZiAoUlRYKSBjb25zdCBfcnR4ID0gKFJUWCk7CQkJCQlcCisgICAgIGlmIChHRVRfQ09ERSAoX3J0eCkgIT0gKEMpIHx8IEdFVF9NT0RFIChfcnR4KSAhPSAoTSkpCQlcCisgICAgICAgcnRsX2NoZWNrX2ZhaWxlZF9jb2RlX21vZGUgKF9ydHgsIChDKSwgKE0pLCBmYWxzZSwgX19GSUxFX18sCVwKKwkJCQkgICBfX0xJTkVfXywgX19GVU5DVElPTl9fKTsJCVwKKyAgICAgJl9ydHgtPnUuaHdpbnRbTl07IH0pKQorCisjZGVmaW5lIFhDTk1QUlYoUlRYLCBDLCBNKSBfX2V4dGVuc2lvbl9fCQkJCVwKKyh7IF9fdHlwZW9mIChSVFgpIGNvbnN0IF9ydHggPSAoUlRYKTsJCQkJCVwKKyAgIGlmIChHRVRfQ09ERSAoX3J0eCkgIT0gKEMpIHx8IEdFVF9NT0RFIChfcnR4KSA9PSAoTSkpCQlcCisgICAgIHJ0bF9jaGVja19mYWlsZWRfY29kZV9tb2RlIChfcnR4LCAoQyksIChNKSwgdHJ1ZSwgX19GSUxFX18sCVwKKwkJCQkgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7CQlcCisgICAmX3J0eC0+dS5ydjsgfSkKKworI2RlZmluZSBYQ05NUEZWKFJUWCwgQywgTSkgX19leHRlbnNpb25fXwkJCQlcCisoeyBfX3R5cGVvZiAoUlRYKSBjb25zdCBfcnR4ID0gKFJUWCk7CQkJCQlcCisgICBpZiAoR0VUX0NPREUgKF9ydHgpICE9IChDKSB8fCBHRVRfTU9ERSAoX3J0eCkgPT0gKE0pKQkJXAorICAgICBydGxfY2hlY2tfZmFpbGVkX2NvZGVfbW9kZSAoX3J0eCwgKEMpLCAoTSksIHRydWUsIF9fRklMRV9fLAlcCisJCQkJIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pOwkJXAorICAgJl9ydHgtPnUuZnY7IH0pCisKKyNkZWZpbmUgQkxPQ0tfU1lNQk9MX0NIRUNLKFJUWCkgX19leHRlbnNpb25fXwkJCQlcCisoeyBfX3R5cGVvZiAoUlRYKSBjb25zdCBfc3ltYm9sID0gKFJUWCk7CQkJCVwKKyAgIGNvbnN0IHVuc2lnbmVkIGludCBmbGFncyA9IFJUTF9DSEVDS0MxIChfc3ltYm9sLCAxLCBTWU1CT0xfUkVGKS5ydF9pbnQ7IFwKKyAgIGlmICgoZmxhZ3MgJiBTWU1CT0xfRkxBR19IQVNfQkxPQ0tfSU5GTykgPT0gMCkJCQlcCisgICAgIHJ0bF9jaGVja19mYWlsZWRfYmxvY2tfc3ltYm9sIChfX0ZJTEVfXywgX19MSU5FX18sCQkJXAorCQkJCSAgICBfX0ZVTkNUSU9OX18pOwkJCVwKKyAgICZfc3ltYm9sLT51LmJsb2NrX3N5bTsgfSkKKworZXh0ZXJuIHZvaWQgcnRsX2NoZWNrX2ZhaWxlZF9ib3VuZHMgKGNvbnN0X3J0eCwgaW50LCBjb25zdCBjaGFyICosIGludCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKikKKyAgICBBVFRSSUJVVEVfTk9SRVRVUk47CitleHRlcm4gdm9pZCBydGxfY2hlY2tfZmFpbGVkX3R5cGUxIChjb25zdF9ydHgsIGludCwgaW50LCBjb25zdCBjaGFyICosIGludCwKKwkJCQkgICAgY29uc3QgY2hhciAqKQorICAgIEFUVFJJQlVURV9OT1JFVFVSTjsKK2V4dGVybiB2b2lkIHJ0bF9jaGVja19mYWlsZWRfdHlwZTIgKGNvbnN0X3J0eCwgaW50LCBpbnQsIGludCwgY29uc3QgY2hhciAqLAorCQkJCSAgICBpbnQsIGNvbnN0IGNoYXIgKikKKyAgICBBVFRSSUJVVEVfTk9SRVRVUk47CitleHRlcm4gdm9pZCBydGxfY2hlY2tfZmFpbGVkX2NvZGUxIChjb25zdF9ydHgsIGVudW0gcnR4X2NvZGUsIGNvbnN0IGNoYXIgKiwKKwkJCQkgICAgaW50LCBjb25zdCBjaGFyICopCisgICAgQVRUUklCVVRFX05PUkVUVVJOOworZXh0ZXJuIHZvaWQgcnRsX2NoZWNrX2ZhaWxlZF9jb2RlMiAoY29uc3RfcnR4LCBlbnVtIHJ0eF9jb2RlLCBlbnVtIHJ0eF9jb2RlLAorCQkJCSAgICBjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKQorICAgIEFUVFJJQlVURV9OT1JFVFVSTjsKK2V4dGVybiB2b2lkIHJ0bF9jaGVja19mYWlsZWRfY29kZV9tb2RlIChjb25zdF9ydHgsIGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlLAorCQkJCQlib29sLCBjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKQorICAgIEFUVFJJQlVURV9OT1JFVFVSTjsKK2V4dGVybiB2b2lkIHJ0bF9jaGVja19mYWlsZWRfYmxvY2tfc3ltYm9sIChjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKQorICAgIEFUVFJJQlVURV9OT1JFVFVSTjsKK2V4dGVybiB2b2lkIHJ0dmVjX2NoZWNrX2ZhaWxlZF9ib3VuZHMgKGNvbnN0X3J0dmVjLCBpbnQsIGNvbnN0IGNoYXIgKiwgaW50LAorCQkJCSAgICAgICBjb25zdCBjaGFyICopCisgICAgQVRUUklCVVRFX05PUkVUVVJOOworCisjZWxzZSAgIC8qIG5vdCBFTkFCTEVfUlRMX0NIRUNLSU5HICovCisKKyNkZWZpbmUgUlRMX0NIRUNLMShSVFgsIE4sIEMxKSAgICAgICgoUlRYKS0+dS5mbGRbTl0pCisjZGVmaW5lIFJUTF9DSEVDSzIoUlRYLCBOLCBDMSwgQzIpICAoKFJUWCktPnUuZmxkW05dKQorI2RlZmluZSBSVExfQ0hFQ0tDMShSVFgsIE4sIEMpCSAgICAoKFJUWCktPnUuZmxkW05dKQorI2RlZmluZSBSVExfQ0hFQ0tDMihSVFgsIE4sIEMxLCBDMikgKChSVFgpLT51LmZsZFtOXSkKKyNkZWZpbmUgUlRWRUNfRUxUKFJUVkVDLCBJKQkgICAgKChSVFZFQyktPmVsZW1bSV0pCisjZGVmaW5lIFhXSU5UKFJUWCwgTikJCSAgICAoKFJUWCktPnUuaHdpbnRbTl0pCisjZGVmaW5lIFhDV0lOVChSVFgsIE4sIEMpCSAgICAoKFJUWCktPnUuaHdpbnRbTl0pCisjZGVmaW5lIFhDTVdJTlQoUlRYLCBOLCBDLCBNKQkgICAgKChSVFgpLT51Lmh3aW50W05dKQorI2RlZmluZSBYQ05NV0lOVChSVFgsIE4sIEMsIE0pCSAgICAoKFJUWCktPnUuaHdpbnRbTl0pCisjZGVmaW5lIFhDTk1QUlYoUlRYLCBDLCBNKQkgICAgKCYoUlRYKS0+dS5ydikKKyNkZWZpbmUgWENOTVBGVihSVFgsIEMsIE0pCSAgICAoJihSVFgpLT51LmZ2KQorI2RlZmluZSBCTE9DS19TWU1CT0xfQ0hFQ0soUlRYKQkgICAgKCYoUlRYKS0+dS5ibG9ja19zeW0pCisKKyNlbmRpZgorCisvKiBHZW5lcmFsIGFjY2Vzc29yIG1hY3JvcyBmb3IgYWNjZXNzaW5nIHRoZSBmbGFncyBvZiBhbiBydHguICAqLworCisvKiBBY2Nlc3MgYW4gaW5kaXZpZHVhbCBydHggZmxhZywgd2l0aCBubyBjaGVja2luZyBvZiBhbnkga2luZC4gICovCisjZGVmaW5lIFJUWF9GTEFHKFJUWCwgRkxBRykJKChSVFgpLT5GTEFHKQorCisjaWYgZGVmaW5lZCBFTkFCTEVfUlRMX0ZMQUdfQ0hFQ0tJTkcgJiYgKEdDQ19WRVJTSU9OID49IDIwMDcpCisjZGVmaW5lIFJUTF9GTEFHX0NIRUNLMShOQU1FLCBSVFgsIEMxKSBfX2V4dGVuc2lvbl9fCQkJXAorKHsgX190eXBlb2YgKFJUWCkgY29uc3QgX3J0eCA9IChSVFgpOwkJCQkJXAorICAgaWYgKEdFVF9DT0RFKF9ydHgpICE9IEMxKQkJCQkJCVwKKyAgICAgcnRsX2NoZWNrX2ZhaWxlZF9mbGFnICAoTkFNRSwgX3J0eCwgX19GSUxFX18sIF9fTElORV9fLAkJXAorCQkJICAgICBfX0ZVTkNUSU9OX18pOwkJCQlcCisgICBfcnR4OyB9KQorCisjZGVmaW5lIFJUTF9GTEFHX0NIRUNLMihOQU1FLCBSVFgsIEMxLCBDMikgX19leHRlbnNpb25fXwkJXAorKHsgX190eXBlb2YgKFJUWCkgY29uc3QgX3J0eCA9IChSVFgpOwkJCQkJXAorICAgaWYgKEdFVF9DT0RFKF9ydHgpICE9IEMxICYmIEdFVF9DT0RFKF9ydHgpICE9IEMyKQkJCVwKKyAgICAgcnRsX2NoZWNrX2ZhaWxlZF9mbGFnICAoTkFNRSxfcnR4LCBfX0ZJTEVfXywgX19MSU5FX18sCQlcCisJCQkgICAgICBfX0ZVTkNUSU9OX18pOwkJCQlcCisgICBfcnR4OyB9KQorCisjZGVmaW5lIFJUTF9GTEFHX0NIRUNLMyhOQU1FLCBSVFgsIEMxLCBDMiwgQzMpIF9fZXh0ZW5zaW9uX18JCVwKKyh7IF9fdHlwZW9mIChSVFgpIGNvbnN0IF9ydHggPSAoUlRYKTsJCQkJCVwKKyAgIGlmIChHRVRfQ09ERShfcnR4KSAhPSBDMSAmJiBHRVRfQ09ERShfcnR4KSAhPSBDMgkJCVwKKyAgICAgICAmJiBHRVRfQ09ERShfcnR4KSAhPSBDMykJCQkJCQlcCisgICAgIHJ0bF9jaGVja19mYWlsZWRfZmxhZyAgKE5BTUUsIF9ydHgsIF9fRklMRV9fLCBfX0xJTkVfXywJCVwKKwkJCSAgICAgX19GVU5DVElPTl9fKTsJCQkJXAorICAgX3J0eDsgfSkKKworI2RlZmluZSBSVExfRkxBR19DSEVDSzQoTkFNRSwgUlRYLCBDMSwgQzIsIEMzLCBDNCkgX19leHRlbnNpb25fXwlcCisoeyBfX3R5cGVvZiAoUlRYKSBjb25zdCBfcnR4ID0gKFJUWCk7CQkJCQlcCisgICBpZiAoR0VUX0NPREUoX3J0eCkgIT0gQzEgJiYgR0VUX0NPREUoX3J0eCkgIT0gQzIJCQlcCisgICAgICAgJiYgR0VUX0NPREUoX3J0eCkgIT0gQzMgJiYgR0VUX0NPREUoX3J0eCkgIT0gQzQpCQkJXAorICAgICBydGxfY2hlY2tfZmFpbGVkX2ZsYWcgIChOQU1FLCBfcnR4LCBfX0ZJTEVfXywgX19MSU5FX18sCQlcCisJCQkgICAgICBfX0ZVTkNUSU9OX18pOwkJCQlcCisgICBfcnR4OyB9KQorCisjZGVmaW5lIFJUTF9GTEFHX0NIRUNLNShOQU1FLCBSVFgsIEMxLCBDMiwgQzMsIEM0LCBDNSkgX19leHRlbnNpb25fXwlcCisoeyBfX3R5cGVvZiAoUlRYKSBjb25zdCBfcnR4ID0gKFJUWCk7CQkJCQlcCisgICBpZiAoR0VUX0NPREUoX3J0eCkgIT0gQzEgJiYgR0VUX0NPREUoX3J0eCkgIT0gQzIJCQlcCisgICAgICAgJiYgR0VUX0NPREUoX3J0eCkgIT0gQzMgJiYgR0VUX0NPREUoX3J0eCkgIT0gQzQJCQlcCisgICAgICAgJiYgR0VUX0NPREUoX3J0eCkgIT0gQzUpCQkJCQkJXAorICAgICBydGxfY2hlY2tfZmFpbGVkX2ZsYWcgIChOQU1FLCBfcnR4LCBfX0ZJTEVfXywgX19MSU5FX18sCQlcCisJCQkgICAgIF9fRlVOQ1RJT05fXyk7CQkJCVwKKyAgIF9ydHg7IH0pCisKKyNkZWZpbmUgUlRMX0ZMQUdfQ0hFQ0s2KE5BTUUsIFJUWCwgQzEsIEMyLCBDMywgQzQsIEM1LCBDNikJCVwKKyAgX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgX190eXBlb2YgKFJUWCkgY29uc3QgX3J0eCA9IChSVFgpOwkJCQkJXAorICAgaWYgKEdFVF9DT0RFKF9ydHgpICE9IEMxICYmIEdFVF9DT0RFKF9ydHgpICE9IEMyCQkJXAorICAgICAgICYmIEdFVF9DT0RFKF9ydHgpICE9IEMzICYmIEdFVF9DT0RFKF9ydHgpICE9IEM0CQkJXAorICAgICAgICYmIEdFVF9DT0RFKF9ydHgpICE9IEM1ICYmIEdFVF9DT0RFKF9ydHgpICE9IEM2KQkJCVwKKyAgICAgcnRsX2NoZWNrX2ZhaWxlZF9mbGFnICAoTkFNRSxfcnR4LCBfX0ZJTEVfXywgX19MSU5FX18sCQlcCisJCQkgICAgIF9fRlVOQ1RJT05fXyk7CQkJCVwKKyAgIF9ydHg7IH0pCisKKyNkZWZpbmUgUlRMX0ZMQUdfQ0hFQ0s3KE5BTUUsIFJUWCwgQzEsIEMyLCBDMywgQzQsIEM1LCBDNiwgQzcpCQlcCisgIF9fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IF9fdHlwZW9mIChSVFgpIGNvbnN0IF9ydHggPSAoUlRYKTsJCQkJCVwKKyAgIGlmIChHRVRfQ09ERShfcnR4KSAhPSBDMSAmJiBHRVRfQ09ERShfcnR4KSAhPSBDMgkJCVwKKyAgICAgICAmJiBHRVRfQ09ERShfcnR4KSAhPSBDMyAmJiBHRVRfQ09ERShfcnR4KSAhPSBDNAkJCVwKKyAgICAgICAmJiBHRVRfQ09ERShfcnR4KSAhPSBDNSAmJiBHRVRfQ09ERShfcnR4KSAhPSBDNgkJCVwKKyAgICAgICAmJiBHRVRfQ09ERShfcnR4KSAhPSBDNykJCQkJCQlcCisgICAgIHJ0bF9jaGVja19mYWlsZWRfZmxhZyAgKE5BTUUsIF9ydHgsIF9fRklMRV9fLCBfX0xJTkVfXywJCVwKKwkJCSAgICAgX19GVU5DVElPTl9fKTsJCQkJXAorICAgX3J0eDsgfSkKKworI2RlZmluZSBSVExfRkxBR19DSEVDSzgoTkFNRSwgUlRYLCBDMSwgQzIsIEMzLCBDNCwgQzUsIEM2LCBDNywgQzgpCVwKKyAgX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgX190eXBlb2YgKFJUWCkgY29uc3QgX3J0eCA9IChSVFgpOwkJCQkJXAorICAgaWYgKEdFVF9DT0RFKF9ydHgpICE9IEMxICYmIEdFVF9DT0RFKF9ydHgpICE9IEMyCQkJXAorICAgICAgICYmIEdFVF9DT0RFKF9ydHgpICE9IEMzICYmIEdFVF9DT0RFKF9ydHgpICE9IEM0CQkJXAorICAgICAgICYmIEdFVF9DT0RFKF9ydHgpICE9IEM1ICYmIEdFVF9DT0RFKF9ydHgpICE9IEM2CQkJXAorICAgICAgICYmIEdFVF9DT0RFKF9ydHgpICE9IEM3ICYmIEdFVF9DT0RFKF9ydHgpICE9IEM4KQkJCVwKKyAgICAgcnRsX2NoZWNrX2ZhaWxlZF9mbGFnICAoTkFNRSwgX3J0eCwgX19GSUxFX18sIF9fTElORV9fLAkJXAorCQkJICAgICBfX0ZVTkNUSU9OX18pOwkJCQlcCisgICBfcnR4OyB9KQorCitleHRlcm4gdm9pZCBydGxfY2hlY2tfZmFpbGVkX2ZsYWcgKGNvbnN0IGNoYXIgKiwgY29uc3RfcnR4LCBjb25zdCBjaGFyICosCisJCQkJICAgaW50LCBjb25zdCBjaGFyICopCisgICAgQVRUUklCVVRFX05PUkVUVVJOCisgICAgOworCisjZWxzZQkvKiBub3QgRU5BQkxFX1JUTF9GTEFHX0NIRUNLSU5HICovCisKKyNkZWZpbmUgUlRMX0ZMQUdfQ0hFQ0sxKE5BTUUsIFJUWCwgQzEpCQkJCQkoUlRYKQorI2RlZmluZSBSVExfRkxBR19DSEVDSzIoTkFNRSwgUlRYLCBDMSwgQzIpCQkJCShSVFgpCisjZGVmaW5lIFJUTF9GTEFHX0NIRUNLMyhOQU1FLCBSVFgsIEMxLCBDMiwgQzMpCQkJCShSVFgpCisjZGVmaW5lIFJUTF9GTEFHX0NIRUNLNChOQU1FLCBSVFgsIEMxLCBDMiwgQzMsIEM0KQkJCShSVFgpCisjZGVmaW5lIFJUTF9GTEFHX0NIRUNLNShOQU1FLCBSVFgsIEMxLCBDMiwgQzMsIEM0LCBDNSkJCShSVFgpCisjZGVmaW5lIFJUTF9GTEFHX0NIRUNLNihOQU1FLCBSVFgsIEMxLCBDMiwgQzMsIEM0LCBDNSwgQzYpCQkoUlRYKQorI2RlZmluZSBSVExfRkxBR19DSEVDSzcoTkFNRSwgUlRYLCBDMSwgQzIsIEMzLCBDNCwgQzUsIEM2LCBDNykJCShSVFgpCisjZGVmaW5lIFJUTF9GTEFHX0NIRUNLOChOQU1FLCBSVFgsIEMxLCBDMiwgQzMsIEM0LCBDNSwgQzYsIEM3LCBDOCkJKFJUWCkKKyNlbmRpZgorCisjZGVmaW5lIFhJTlQoUlRYLCBOKQkoUlRMX0NIRUNLMiAoUlRYLCBOLCAnaScsICduJykucnRfaW50KQorI2RlZmluZSBYU1RSKFJUWCwgTikJKFJUTF9DSEVDSzIgKFJUWCwgTiwgJ3MnLCAnUycpLnJ0X3N0cikKKyNkZWZpbmUgWEVYUChSVFgsIE4pCShSVExfQ0hFQ0syIChSVFgsIE4sICdlJywgJ3UnKS5ydF9ydHgpCisjZGVmaW5lIFhWRUMoUlRYLCBOKQkoUlRMX0NIRUNLMiAoUlRYLCBOLCAnRScsICdWJykucnRfcnR2ZWMpCisjZGVmaW5lIFhNT0RFKFJUWCwgTikJKFJUTF9DSEVDSzEgKFJUWCwgTiwgJ00nKS5ydF90eXBlKQorI2RlZmluZSBYQklUTUFQKFJUWCwgTikgKFJUTF9DSEVDSzEgKFJUWCwgTiwgJ2InKS5ydF9iaXQpCisjZGVmaW5lIFhUUkVFKFJUWCwgTikgICAoUlRMX0NIRUNLMSAoUlRYLCBOLCAndCcpLnJ0X3RyZWUpCisjZGVmaW5lIFhCQkRFRihSVFgsIE4pCShSVExfQ0hFQ0sxIChSVFgsIE4sICdCJykucnRfYmIpCisjZGVmaW5lIFhUTVBMKFJUWCwgTikJKFJUTF9DSEVDSzEgKFJUWCwgTiwgJ1QnKS5ydF9zdHIpCisKKyNkZWZpbmUgWFZFQ0VYUChSVFgsIE4sIE0pCVJUVkVDX0VMVCAoWFZFQyAoUlRYLCBOKSwgTSkKKyNkZWZpbmUgWFZFQ0xFTihSVFgsIE4pCQlHRVRfTlVNX0VMRU0gKFhWRUMgKFJUWCwgTikpCisKKy8qIFRoZXNlIGFyZSBsaWtlIFhJTlQsIGV0Yy4gZXhjZXB0IHRoYXQgdGhleSBleHBlY3QgYSAnMCcgZmllbGQgaW5zdGVhZAorICAgb2YgdGhlIG5vcm1hbCB0eXBlIGNvZGUuICAqLworCisjZGVmaW5lIFgwSU5UKFJUWCwgTikJICAgKFJUTF9DSEVDSzEgKFJUWCwgTiwgJzAnKS5ydF9pbnQpCisjZGVmaW5lIFgwVUlOVChSVFgsIE4pCSAgIChSVExfQ0hFQ0sxIChSVFgsIE4sICcwJykucnRfdWludCkKKyNkZWZpbmUgWDBTVFIoUlRYLCBOKQkgICAoUlRMX0NIRUNLMSAoUlRYLCBOLCAnMCcpLnJ0X3N0cikKKyNkZWZpbmUgWDBFWFAoUlRYLCBOKQkgICAoUlRMX0NIRUNLMSAoUlRYLCBOLCAnMCcpLnJ0X3J0eCkKKyNkZWZpbmUgWDBWRUMoUlRYLCBOKQkgICAoUlRMX0NIRUNLMSAoUlRYLCBOLCAnMCcpLnJ0X3J0dmVjKQorI2RlZmluZSBYME1PREUoUlRYLCBOKQkgICAoUlRMX0NIRUNLMSAoUlRYLCBOLCAnMCcpLnJ0X3R5cGUpCisjZGVmaW5lIFgwQklUTUFQKFJUWCwgTikgICAoUlRMX0NIRUNLMSAoUlRYLCBOLCAnMCcpLnJ0X2JpdCkKKyNkZWZpbmUgWDBUUkVFKFJUWCwgTikJICAgKFJUTF9DSEVDSzEgKFJUWCwgTiwgJzAnKS5ydF90cmVlKQorI2RlZmluZSBYMEJCREVGKFJUWCwgTikJICAgKFJUTF9DSEVDSzEgKFJUWCwgTiwgJzAnKS5ydF9iYikKKyNkZWZpbmUgWDBBRFZGTEFHUyhSVFgsIE4pIChSVExfQ0hFQ0sxIChSVFgsIE4sICcwJykucnRfYWRkcl9kaWZmX3ZlY19mbGFncykKKyNkZWZpbmUgWDBDU0VMSUIoUlRYLCBOKSAgIChSVExfQ0hFQ0sxIChSVFgsIE4sICcwJykucnRfY3NlbGliKQorI2RlZmluZSBYME1FTUFUVFIoUlRYLCBOKSAgKFJUTF9DSEVDS0MxIChSVFgsIE4sIE1FTSkucnRfbWVtKQorI2RlZmluZSBYMFJFR0FUVFIoUlRYLCBOKSAgKFJUTF9DSEVDS0MxIChSVFgsIE4sIFJFRykucnRfcmVnKQorI2RlZmluZSBYMENPTlNUQU5UKFJUWCwgTikgKFJUTF9DSEVDSzEgKFJUWCwgTiwgJzAnKS5ydF9jb25zdGFudCkKKworLyogQWNjZXNzIGEgJzAnIGZpZWxkIHdpdGggYW55IHR5cGUuICAqLworI2RlZmluZSBYMEFOWShSVFgsIE4pCSAgIFJUTF9DSEVDSzEgKFJUWCwgTiwgJzAnKQorCisjZGVmaW5lIFhDSU5UKFJUWCwgTiwgQykgICAgICAoUlRMX0NIRUNLQzEgKFJUWCwgTiwgQykucnRfaW50KQorI2RlZmluZSBYQ1VJTlQoUlRYLCBOLCBDKSAgICAgKFJUTF9DSEVDS0MxIChSVFgsIE4sIEMpLnJ0X3VpbnQpCisjZGVmaW5lIFhDU1RSKFJUWCwgTiwgQykgICAgICAoUlRMX0NIRUNLQzEgKFJUWCwgTiwgQykucnRfc3RyKQorI2RlZmluZSBYQ0VYUChSVFgsIE4sIEMpICAgICAgKFJUTF9DSEVDS0MxIChSVFgsIE4sIEMpLnJ0X3J0eCkKKyNkZWZpbmUgWENWRUMoUlRYLCBOLCBDKSAgICAgIChSVExfQ0hFQ0tDMSAoUlRYLCBOLCBDKS5ydF9ydHZlYykKKyNkZWZpbmUgWENNT0RFKFJUWCwgTiwgQykgICAgIChSVExfQ0hFQ0tDMSAoUlRYLCBOLCBDKS5ydF90eXBlKQorI2RlZmluZSBYQ0JJVE1BUChSVFgsIE4sIEMpICAgKFJUTF9DSEVDS0MxIChSVFgsIE4sIEMpLnJ0X2JpdCkKKyNkZWZpbmUgWENUUkVFKFJUWCwgTiwgQykgICAgIChSVExfQ0hFQ0tDMSAoUlRYLCBOLCBDKS5ydF90cmVlKQorI2RlZmluZSBYQ0JCREVGKFJUWCwgTiwgQykgICAgKFJUTF9DSEVDS0MxIChSVFgsIE4sIEMpLnJ0X2JiKQorI2RlZmluZSBYQ0NTRUxJQihSVFgsIE4sIEMpICAgKFJUTF9DSEVDS0MxIChSVFgsIE4sIEMpLnJ0X2NzZWxpYikKKworI2RlZmluZSBYQ1ZFQ0VYUChSVFgsIE4sIE0sIEMpCVJUVkVDX0VMVCAoWENWRUMgKFJUWCwgTiwgQyksIE0pCisjZGVmaW5lIFhDVkVDTEVOKFJUWCwgTiwgQykJR0VUX05VTV9FTEVNIChYQ1ZFQyAoUlRYLCBOLCBDKSkKKworI2RlZmluZSBYQzJFWFAoUlRYLCBOLCBDMSwgQzIpICAgICAgKFJUTF9DSEVDS0MyIChSVFgsIE4sIEMxLCBDMikucnRfcnR4KQorDAorLyogQUNDRVNTIE1BQ1JPUyBmb3IgcGFydGljdWxhciBmaWVsZHMgb2YgaW5zbnMuICAqLworCisvKiBIb2xkcyBhIHVuaXF1ZSBudW1iZXIgZm9yIGVhY2ggaW5zbi4KKyAgIFRoZXNlIGFyZSBub3QgbmVjZXNzYXJpbHkgc2VxdWVudGlhbGx5IGluY3JlYXNpbmcuICAqLworI2RlZmluZSBJTlNOX1VJRChJTlNOKSAgWElOVCAoSU5TTiwgMCkKKworLyogQ2hhaW4gaW5zbnMgdG9nZXRoZXIgaW4gc2VxdWVuY2UuICAqLworI2RlZmluZSBQUkVWX0lOU04oSU5TTikJWEVYUCAoSU5TTiwgMSkKKyNkZWZpbmUgTkVYVF9JTlNOKElOU04pCVhFWFAgKElOU04sIDIpCisKKyNkZWZpbmUgQkxPQ0tfRk9SX0lOU04oSU5TTikgWEJCREVGIChJTlNOLCAzKQorI2RlZmluZSBJTlNOX0xPQ0FUT1IoSU5TTikgWElOVCAoSU5TTiwgNCkKKy8qIExPQ0FUSU9OIG9mIGFuIFJUWCBpZiByZWxldmFudC4gICovCisjZGVmaW5lIFJUTF9MT0NBVElPTihYKSAoSU5TTl9QIChYKSA/IFwKKwkJCSBsb2NhdG9yX2xvY2F0aW9uIChJTlNOX0xPQ0FUT1IgKFgpKSBcCisJCQkgOiBVTktOT1dOX0xPQ0FUSU9OKQorLyogTE9DQVRJT04gb2YgY3VycmVudCBJTlNOLiAgKi8KKyNkZWZpbmUgQ1VSUl9JTlNOX0xPQ0FUSU9OIChsb2NhdG9yX2xvY2F0aW9uIChjdXJyX2luc25fbG9jYXRvciAoKSkpCisvKiBUaGUgYm9keSBvZiBhbiBpbnNuLiAgKi8KKyNkZWZpbmUgUEFUVEVSTihJTlNOKQlYRVhQIChJTlNOLCA1KQorCisvKiBDb2RlIG51bWJlciBvZiBpbnN0cnVjdGlvbiwgZnJvbSB3aGVuIGl0IHdhcyByZWNvZ25pemVkLgorICAgLTEgbWVhbnMgdGhpcyBpbnN0cnVjdGlvbiBoYXMgbm90IGJlZW4gcmVjb2duaXplZCB5ZXQuICAqLworI2RlZmluZSBJTlNOX0NPREUoSU5TTikgWElOVCAoSU5TTiwgNikKKworI2RlZmluZSBSVFhfRlJBTUVfUkVMQVRFRF9QKFJUWCkJCQkJCVwKKyAgKFJUTF9GTEFHX0NIRUNLNigiUlRYX0ZSQU1FX1JFTEFURURfUCIsIChSVFgpLCBERUJVR19JTlNOLCBJTlNOLAlcCisJCSAgIENBTExfSU5TTiwgSlVNUF9JTlNOLCBCQVJSSUVSLCBTRVQpLT5mcmFtZV9yZWxhdGVkKQorCisvKiAxIGlmIFJUWCBpcyBhbiBpbnNuIHRoYXQgaGFzIGJlZW4gZGVsZXRlZC4gICovCisjZGVmaW5lIElOU05fREVMRVRFRF9QKFJUWCkJCQkJCQlcCisgIChSVExfRkxBR19DSEVDSzcoIklOU05fREVMRVRFRF9QIiwgKFJUWCksIERFQlVHX0lOU04sIElOU04sCQlcCisJCSAgIENBTExfSU5TTiwgSlVNUF9JTlNOLAkJCQlcCisJCSAgIENPREVfTEFCRUwsIEJBUlJJRVIsIE5PVEUpLT52b2xhdGlsKQorCisvKiAxIGlmIFJUWCBpcyBhIGNhbGwgdG8gYSBjb25zdCBmdW5jdGlvbi4gIEJ1aWx0IGZyb20gRUNGX0NPTlNUIGFuZAorICAgVFJFRV9SRUFET05MWS4gICovCisjZGVmaW5lIFJUTF9DT05TVF9DQUxMX1AoUlRYKQkJCQkJXAorICAoUlRMX0ZMQUdfQ0hFQ0sxKCJSVExfQ09OU1RfQ0FMTF9QIiwgKFJUWCksIENBTExfSU5TTiktPnVuY2hhbmdpbmcpCisKKy8qIDEgaWYgUlRYIGlzIGEgY2FsbCB0byBhIHB1cmUgZnVuY3Rpb24uICBCdWlsdCBmcm9tIEVDRl9QVVJFIGFuZAorICAgREVDTF9QVVJFX1AuICAqLworI2RlZmluZSBSVExfUFVSRV9DQUxMX1AoUlRYKQkJCQkJXAorICAoUlRMX0ZMQUdfQ0hFQ0sxKCJSVExfUFVSRV9DQUxMX1AiLCAoUlRYKSwgQ0FMTF9JTlNOKS0+cmV0dXJuX3ZhbCkKKworLyogMSBpZiBSVFggaXMgYSBjYWxsIHRvIGEgY29uc3Qgb3IgcHVyZSBmdW5jdGlvbi4gICovCisjZGVmaW5lIFJUTF9DT05TVF9PUl9QVVJFX0NBTExfUChSVFgpIFwKKyAgKFJUTF9DT05TVF9DQUxMX1AoUlRYKSB8fCBSVExfUFVSRV9DQUxMX1AoUlRYKSkKKworLyogMSBpZiBSVFggaXMgYSBjYWxsIHRvIGEgbG9vcGluZyBjb25zdCBvciBwdXJlIGZ1bmN0aW9uLiAgQnVpbHQgZnJvbQorICAgRUNGX0xPT1BJTkdfQ09OU1RfT1JfUFVSRSBhbmQgREVDTF9MT09QSU5HX0NPTlNUX09SX1BVUkVfUC4gICovCisjZGVmaW5lIFJUTF9MT09QSU5HX0NPTlNUX09SX1BVUkVfQ0FMTF9QKFJUWCkJCQkJCVwKKyAgKFJUTF9GTEFHX0NIRUNLMSgiQ09OU1RfT1JfUFVSRV9DQUxMX1AiLCAoUlRYKSwgQ0FMTF9JTlNOKS0+Y2FsbCkKKworLyogMSBpZiBSVFggaXMgYSBjYWxsX2luc24gZm9yIGEgc2libGluZyBjYWxsLiAgKi8KKyNkZWZpbmUgU0lCTElOR19DQUxMX1AoUlRYKQkJCQkJCVwKKyAgKFJUTF9GTEFHX0NIRUNLMSgiU0lCTElOR19DQUxMX1AiLCAoUlRYKSwgQ0FMTF9JTlNOKS0+anVtcCkKKworLyogMSBpZiBSVFggaXMgYSBqdW1wX2luc24sIGNhbGxfaW5zbiwgb3IgaW5zbiB0aGF0IGlzIGFuIGFubnVsbGluZyBicmFuY2guICAqLworI2RlZmluZSBJTlNOX0FOTlVMTEVEX0JSQU5DSF9QKFJUWCkJCQkJCVwKKyAgKFJUTF9GTEFHX0NIRUNLMygiSU5TTl9BTk5VTExFRF9CUkFOQ0hfUCIsIChSVFgpLCBKVU1QX0lOU04sIENBTExfSU5TTiwgSU5TTiktPnVuY2hhbmdpbmcpCisKKy8qIDEgaWYgUlRYIGlzIGFuIGluc24gaW4gYSBkZWxheSBzbG90IGFuZCBpcyBmcm9tIHRoZSB0YXJnZXQgb2YgdGhlIGJyYW5jaC4KKyAgIElmIHRoZSBicmFuY2ggaW5zbiBoYXMgSU5TTl9BTk5VTExFRF9CUkFOQ0hfUCBzZXQsIHRoaXMgaW5zbiBzaG91bGQgb25seSBiZQorICAgZXhlY3V0ZWQgaWYgdGhlIGJyYW5jaCBpcyB0YWtlbi4gIEZvciBhbm51bGxlZCBicmFuY2hlcyB3aXRoIHRoaXMgYml0CisgICBjbGVhciwgdGhlIGluc24gc2hvdWxkIGJlIGV4ZWN1dGVkIG9ubHkgaWYgdGhlIGJyYW5jaCBpcyBub3QgdGFrZW4uICAqLworI2RlZmluZSBJTlNOX0ZST01fVEFSR0VUX1AoUlRYKQkJCQkJCVwKKyAgKFJUTF9GTEFHX0NIRUNLMygiSU5TTl9GUk9NX1RBUkdFVF9QIiwgKFJUWCksIElOU04sIEpVTVBfSU5TTiwgQ0FMTF9JTlNOKS0+aW5fc3RydWN0KQorCisvKiBJbiBhbiBBRERSX0RJRkZfVkVDLCB0aGUgZmxhZ3MgZm9yIFJUWCBmb3IgdXNlIGJ5IGJyYW5jaCBzaG9ydGVuaW5nLgorICAgU2VlIHRoZSBjb21tZW50cyBmb3IgQUREUl9ESUZGX1ZFQyBpbiBydGwuZGVmLiAgKi8KKyNkZWZpbmUgQUREUl9ESUZGX1ZFQ19GTEFHUyhSVFgpIFgwQURWRkxBR1MoUlRYLCA0KQorCisvKiBJbiBhIFZBTFVFLCB0aGUgdmFsdWUgY3NlbGliIGhhcyBhc3NpZ25lZCB0byBSVFguCisgICBUaGlzIGlzIGEgInN0cnVjdCBjc2VsaWJfdmFsX3N0cnVjdCIsIHNlZSBjc2VsaWIuaC4gICovCisjZGVmaW5lIENTRUxJQl9WQUxfUFRSKFJUWCkgWDBDU0VMSUIoUlRYLCAwKQorCisvKiBIb2xkcyBhIGxpc3Qgb2Ygbm90ZXMgb24gd2hhdCB0aGlzIGluc24gZG9lcyB0byB2YXJpb3VzIFJFR3MuCisgICBJdCBpcyBhIGNoYWluIG9mIEVYUFJfTElTVCBydHgncywgd2hlcmUgdGhlIHNlY29uZCBvcGVyYW5kIGlzIHRoZQorICAgY2hhaW4gcG9pbnRlciBhbmQgdGhlIGZpcnN0IG9wZXJhbmQgaXMgdGhlIFJFRyBiZWluZyBkZXNjcmliZWQuCisgICBUaGUgbW9kZSBmaWVsZCBvZiB0aGUgRVhQUl9MSVNUIGNvbnRhaW5zIG5vdCBhIHJlYWwgbWFjaGluZSBtb2RlCisgICBidXQgYSB2YWx1ZSBmcm9tIGVudW0gcmVnX25vdGUuICAqLworI2RlZmluZSBSRUdfTk9URVMoSU5TTikJWEVYUChJTlNOLCA3KQorCitlbnVtIHJlZ19ub3RlCit7CisjZGVmaW5lIERFRl9SRUdfTk9URShOQU1FKSBOQU1FLAorI2luY2x1ZGUgInJlZy1ub3Rlcy5kZWYiCisjdW5kZWYgREVGX1JFR19OT1RFCisgIFJFR19OT1RFX01BWAorfTsKKworLyogRGVmaW5lIG1hY3JvcyB0byBleHRyYWN0IGFuZCBpbnNlcnQgdGhlIHJlZy1ub3RlIGtpbmQgaW4gYW4gRVhQUl9MSVNULiAgKi8KKyNkZWZpbmUgUkVHX05PVEVfS0lORChMSU5LKSAoKGVudW0gcmVnX25vdGUpIEdFVF9NT0RFIChMSU5LKSkKKyNkZWZpbmUgUFVUX1JFR19OT1RFX0tJTkQoTElOSywgS0lORCkgXAorICBQVVRfTU9ERSAoTElOSywgKGVudW0gbWFjaGluZV9tb2RlKSAoS0lORCkpCisKKy8qIE5hbWVzIGZvciBSRUdfTk9URSdzIGluIEVYUFJfTElTVCBpbnNuJ3MuICAqLworCitleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IHJlZ19ub3RlX25hbWVbXTsKKyNkZWZpbmUgR0VUX1JFR19OT1RFX05BTUUoTU9ERSkgKHJlZ19ub3RlX25hbWVbKGludCkgKE1PREUpXSkKKworLyogVGhpcyBmaWVsZCBpcyBvbmx5IHByZXNlbnQgb24gQ0FMTF9JTlNOcy4gIEl0IGhvbGRzIGEgY2hhaW4gb2YgRVhQUl9MSVNUIG9mCisgICBVU0UgYW5kIENMT0JCRVIgZXhwcmVzc2lvbnMuCisgICAgIFVTRSBleHByZXNzaW9ucyBsaXN0IHRoZSByZWdpc3RlcnMgZmlsbGVkIHdpdGggYXJndW1lbnRzIHRoYXQKKyAgIGFyZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgorICAgICBDTE9CQkVSIGV4cHJlc3Npb25zIGRvY3VtZW50IHRoZSByZWdpc3RlcnMgZXhwbGljaXRseSBjbG9iYmVyZWQKKyAgIGJ5IHRoaXMgQ0FMTF9JTlNOLgorICAgICBQc2V1ZG8gcmVnaXN0ZXJzIGNhbiBub3QgYmUgbWVudGlvbmVkIGluIHRoaXMgbGlzdC4gICovCisjZGVmaW5lIENBTExfSU5TTl9GVU5DVElPTl9VU0FHRShJTlNOKQlYRVhQKElOU04sIDgpCisKKy8qIFRoZSBsYWJlbC1udW1iZXIgb2YgYSBjb2RlLWxhYmVsLiAgVGhlIGFzc2VtYmxlciBsYWJlbAorICAgaXMgbWFkZSBmcm9tIGBMJyBhbmQgdGhlIGxhYmVsLW51bWJlciBwcmludGVkIGluIGRlY2ltYWwuCisgICBMYWJlbCBudW1iZXJzIGFyZSB1bmlxdWUgaW4gYSBjb21waWxhdGlvbi4gICovCisjZGVmaW5lIENPREVfTEFCRUxfTlVNQkVSKElOU04pCVhJTlQgKElOU04sIDYpCisKKy8qIEluIGEgTk9URSB0aGF0IGlzIGEgbGluZSBudW1iZXIsIHRoaXMgaXMgYSBzdHJpbmcgZm9yIHRoZSBmaWxlIG5hbWUgdGhhdCB0aGUKKyAgIGxpbmUgaXMgaW4uICBXZSB1c2UgdGhlIHNhbWUgZmllbGQgdG8gcmVjb3JkIGJsb2NrIG51bWJlcnMgdGVtcG9yYXJpbHkgaW4KKyAgIE5PVEVfSU5TTl9CTE9DS19CRUcgYW5kIE5PVEVfSU5TTl9CTE9DS19FTkQgbm90ZXMuICAoV2UgYXZvaWQgbG90cyBvZiBjYXN0cworICAgYmV0d2VlbiBpbnRzIGFuZCBwb2ludGVycyBpZiB3ZSB1c2UgYSBkaWZmZXJlbnQgbWFjcm8gZm9yIHRoZSBibG9jayBudW1iZXIuKQorICAgKi8KKworLyogT3BhcXVlIGRhdGEuICAqLworI2RlZmluZSBOT1RFX0RBVEEoSU5TTikJICAgICAgICBSVExfQ0hFQ0tDMSAoSU5TTiwgNCwgTk9URSkKKyNkZWZpbmUgTk9URV9ERUxFVEVEX0xBQkVMX05BTUUoSU5TTikgWENTVFIgKElOU04sIDQsIE5PVEUpCisjZGVmaW5lIFNFVF9JTlNOX0RFTEVURUQoSU5TTikgc2V0X2luc25fZGVsZXRlZCAoSU5TTik7CisjZGVmaW5lIE5PVEVfQkxPQ0soSU5TTikJWENUUkVFIChJTlNOLCA0LCBOT1RFKQorI2RlZmluZSBOT1RFX0VIX0hBTkRMRVIoSU5TTikJWENJTlQgKElOU04sIDQsIE5PVEUpCisjZGVmaW5lIE5PVEVfQkFTSUNfQkxPQ0soSU5TTikJWENCQkRFRiAoSU5TTiwgNCwgTk9URSkKKyNkZWZpbmUgTk9URV9WQVJfTE9DQVRJT04oSU5TTikJWENFWFAgKElOU04sIDQsIE5PVEUpCisKKy8qIEluIGEgTk9URSB0aGF0IGlzIGEgbGluZSBudW1iZXIsIHRoaXMgaXMgdGhlIGxpbmUgbnVtYmVyLgorICAgT3RoZXIga2luZHMgb2YgTk9URXMgYXJlIGlkZW50aWZpZWQgYnkgbmVnYXRpdmUgbnVtYmVycyBoZXJlLiAgKi8KKyNkZWZpbmUgTk9URV9LSU5EKElOU04pIFhDSU5UIChJTlNOLCA1LCBOT1RFKQorCisvKiBOb256ZXJvIGlmIElOU04gaXMgYSBub3RlIG1hcmtpbmcgdGhlIGJlZ2lubmluZyBvZiBhIGJhc2ljIGJsb2NrLiAgKi8KKyNkZWZpbmUgTk9URV9JTlNOX0JBU0lDX0JMT0NLX1AoSU5TTikJCQlcCisgIChHRVRfQ09ERSAoSU5TTikgPT0gTk9URQkJCQlcCisgICAmJiBOT1RFX0tJTkQgKElOU04pID09IE5PVEVfSU5TTl9CQVNJQ19CTE9DSykKKworLyogVmFyaWFibGUgZGVjbGFyYXRpb24gYW5kIHRoZSBsb2NhdGlvbiBvZiBhIHZhcmlhYmxlLiAgKi8KKyNkZWZpbmUgUEFUX1ZBUl9MT0NBVElPTl9ERUNMKFBBVCkgKFhDVFJFRSAoKFBBVCksIDAsIFZBUl9MT0NBVElPTikpCisjZGVmaW5lIFBBVF9WQVJfTE9DQVRJT05fTE9DKFBBVCkgKFhDRVhQICgoUEFUKSwgMSwgVkFSX0xPQ0FUSU9OKSkKKworLyogSW5pdGlhbGl6YXRpb24gc3RhdHVzIG9mIHRoZSB2YXJpYWJsZSBpbiB0aGUgbG9jYXRpb24uICBTdGF0dXMKKyAgIGNhbiBiZSB1bmtub3duLCB1bmluaXRpYWxpemVkIG9yIGluaXRpYWxpemVkLiAgU2VlIGVudW1lcmF0aW9uCisgICB0eXBlIGJlbG93LiAgKi8KKyNkZWZpbmUgUEFUX1ZBUl9MT0NBVElPTl9TVEFUVVMoUEFUKSBcCisgICgoZW51bSB2YXJfaW5pdF9zdGF0dXMpIChYQ0lOVCAoKFBBVCksIDIsIFZBUl9MT0NBVElPTikpKQorCisvKiBBY2Nlc3NvcnMgZm9yIGEgTk9URV9JTlNOX1ZBUl9MT0NBVElPTi4gICovCisjZGVmaW5lIE5PVEVfVkFSX0xPQ0FUSU9OX0RFQ0woTk9URSkgXAorICBQQVRfVkFSX0xPQ0FUSU9OX0RFQ0wgKE5PVEVfVkFSX0xPQ0FUSU9OIChOT1RFKSkKKyNkZWZpbmUgTk9URV9WQVJfTE9DQVRJT05fTE9DKE5PVEUpIFwKKyAgUEFUX1ZBUl9MT0NBVElPTl9MT0MgKE5PVEVfVkFSX0xPQ0FUSU9OIChOT1RFKSkKKyNkZWZpbmUgTk9URV9WQVJfTE9DQVRJT05fU1RBVFVTKE5PVEUpIFwKKyAgUEFUX1ZBUl9MT0NBVElPTl9TVEFUVVMgKE5PVEVfVkFSX0xPQ0FUSU9OIChOT1RFKSkKKworLyogVGhlIFZBUl9MT0NBVElPTiBydHggaW4gYSBERUJVR19JTlNOLiAgKi8KKyNkZWZpbmUgSU5TTl9WQVJfTE9DQVRJT04oSU5TTikgUEFUVEVSTiAoSU5TTikKKworLyogQWNjZXNzb3JzIGZvciBhIHRyZWUtZXhwYW5kZWQgdmFyIGxvY2F0aW9uIGRlYnVnIGluc24uICAqLworI2RlZmluZSBJTlNOX1ZBUl9MT0NBVElPTl9ERUNMKElOU04pIFwKKyAgUEFUX1ZBUl9MT0NBVElPTl9ERUNMIChJTlNOX1ZBUl9MT0NBVElPTiAoSU5TTikpCisjZGVmaW5lIElOU05fVkFSX0xPQ0FUSU9OX0xPQyhJTlNOKSBcCisgIFBBVF9WQVJfTE9DQVRJT05fTE9DIChJTlNOX1ZBUl9MT0NBVElPTiAoSU5TTikpCisjZGVmaW5lIElOU05fVkFSX0xPQ0FUSU9OX1NUQVRVUyhJTlNOKSBcCisgIFBBVF9WQVJfTE9DQVRJT05fU1RBVFVTIChJTlNOX1ZBUl9MT0NBVElPTiAoSU5TTikpCisKKy8qIEV4cGFuZCB0byB0aGUgUlRMIHRoYXQgZGVub3RlcyBhbiB1bmtub3duIHZhcmlhYmxlIGxvY2F0aW9uIGluIGEKKyAgIERFQlVHX0lOU04uICAqLworI2RlZmluZSBnZW5fcnR4X1VOS05PV05fVkFSX0xPQygpIChnZW5fcnR4X0NMT0JCRVIgKFZPSURtb2RlLCBjb25zdDBfcnR4KSkKKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgWCBpcyBzdWNoIGFuIHVua25vd24gbG9jYXRpb24uICAqLworI2RlZmluZSBWQVJfTE9DX1VOS05PV05fUChYKSBcCisgIChHRVRfQ09ERSAoWCkgPT0gQ0xPQkJFUiAmJiBYRVhQICgoWCksIDApID09IGNvbnN0MF9ydHgpCisKKy8qIDEgaWYgUlRYIGlzIGVtaXR0ZWQgYWZ0ZXIgYSBjYWxsLCBidXQgaXQgc2hvdWxkIHRha2UgZWZmZWN0IGJlZm9yZQorICAgdGhlIGNhbGwgcmV0dXJucy4gICovCisjZGVmaW5lIE5PVEVfRFVSSU5HX0NBTExfUChSVFgpCQkJCVwKKyAgKFJUTF9GTEFHX0NIRUNLMSgiTk9URV9WQVJfTE9DQVRJT05fRFVSSU5HX0NBTExfUCIsIChSVFgpLCBOT1RFKS0+Y2FsbCkKKworLyogREVCVUdfRVhQUl9ERUNMIGNvcnJlc3BvbmRpbmcgdG8gYSBERUJVR19FWFBSIFJUWC4gICovCisjZGVmaW5lIERFQlVHX0VYUFJfVFJFRV9ERUNMKFJUWCkgWENUUkVFIChSVFgsIDAsIERFQlVHX0VYUFIpCisKKy8qIFBvc3NpYmxlIGluaXRpYWxpemF0aW9uIHN0YXR1cyBvZiBhIHZhcmlhYmxlLiAgIFdoZW4gcmVxdWVzdGVkCisgICBieSB0aGUgdXNlciwgdGhpcyBpbmZvcm1hdGlvbiBpcyB0cmFja2VkIGFuZCByZWNvcmRlZCBpbiB0aGUgRFdBUkYKKyAgIGRlYnVnIGluZm9ybWF0aW9uLCBhbG9uZyB3aXRoIHRoZSB2YXJpYWJsZSdzIGxvY2F0aW9uLiAgKi8KK2VudW0gdmFyX2luaXRfc3RhdHVzCit7CisgIFZBUl9JTklUX1NUQVRVU19VTktOT1dOLAorICBWQVJfSU5JVF9TVEFUVVNfVU5JTklUSUFMSVpFRCwKKyAgVkFSX0lOSVRfU1RBVFVTX0lOSVRJQUxJWkVECit9OworCisvKiBDb2RlcyB0aGF0IGFwcGVhciBpbiB0aGUgTk9URV9LSU5EIGZpZWxkIGZvciBraW5kcyBvZiBub3RlcworICAgdGhhdCBhcmUgbm90IGxpbmUgbnVtYmVycy4gIFRoZXNlIGNvZGVzIGFyZSBhbGwgbmVnYXRpdmUuCisKKyAgIE5vdGljZSB0aGF0IHdlIGRvIG5vdCB0cnkgdG8gdXNlIHplcm8gaGVyZSBmb3IgYW55IG9mCisgICB0aGUgc3BlY2lhbCBub3RlIGNvZGVzIGJlY2F1c2Ugc29tZXRpbWVzIHRoZSBzb3VyY2UgbGluZQorICAgYWN0dWFsbHkgY2FuIGJlIHplcm8hICBUaGlzIGhhcHBlbnMgKGZvciBleGFtcGxlKSB3aGVuIHdlCisgICBhcmUgZ2VuZXJhdGluZyBjb2RlIGZvciB0aGUgcGVyLXRyYW5zbGF0aW9uLXVuaXQgY29uc3RydWN0b3IKKyAgIGFuZCBkZXN0cnVjdG9yIHJvdXRpbmVzIGZvciBzb21lIEMrKyB0cmFuc2xhdGlvbiB1bml0LiAgKi8KKworZW51bSBpbnNuX25vdGUKK3sKKyNkZWZpbmUgREVGX0lOU05fTk9URShOQU1FKSBOQU1FLAorI2luY2x1ZGUgImluc24tbm90ZXMuZGVmIgorI3VuZGVmIERFRl9JTlNOX05PVEUKKworICBOT1RFX0lOU05fTUFYCit9OworCisvKiBOYW1lcyBmb3IgTk9URSBpbnNuJ3Mgb3RoZXIgdGhhbiBsaW5lIG51bWJlcnMuICAqLworCitleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG5vdGVfaW5zbl9uYW1lW05PVEVfSU5TTl9NQVhdOworI2RlZmluZSBHRVRfTk9URV9JTlNOX05BTUUoTk9URV9DT0RFKSBcCisgIChub3RlX2luc25fbmFtZVsoTk9URV9DT0RFKV0pCisKKy8qIFRoZSBuYW1lIG9mIGEgbGFiZWwsIGluIGNhc2UgaXQgY29ycmVzcG9uZHMgdG8gYW4gZXhwbGljaXQgbGFiZWwKKyAgIGluIHRoZSBpbnB1dCBzb3VyY2UgY29kZS4gICovCisjZGVmaW5lIExBQkVMX05BTUUoUlRYKSBYQ1NUUiAoUlRYLCA3LCBDT0RFX0xBQkVMKQorCisvKiBJbiBqdW1wLmMsIGVhY2ggbGFiZWwgY29udGFpbnMgYSBjb3VudCBvZiB0aGUgbnVtYmVyCisgICBvZiBMQUJFTF9SRUZzIHRoYXQgcG9pbnQgYXQgaXQsIHNvIHVudXNlZCBsYWJlbHMgY2FuIGJlIGRlbGV0ZWQuICAqLworI2RlZmluZSBMQUJFTF9OVVNFUyhSVFgpIFhDSU5UIChSVFgsIDQsIENPREVfTEFCRUwpCisKKy8qIExhYmVscyBjYXJyeSBhIHR3by1iaXQgZmllbGQgY29tcG9zZWQgb2YgdGhlIC0+anVtcCBhbmQgLT5jYWxsCisgICBiaXRzLiAgVGhpcyBmaWVsZCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgbGFiZWwgaXMgYW4gYWx0ZXJuYXRlCisgICBlbnRyeSBwb2ludCwgYW5kIGlmIHNvLCB3aGF0IGtpbmQuICAqLworZW51bSBsYWJlbF9raW5kCit7CisgIExBQkVMX05PUk1BTCA9IDAsCS8qIG9yZGluYXJ5IGxhYmVsICovCisgIExBQkVMX1NUQVRJQ19FTlRSWSwJLyogYWx0ZXJuYXRlIGVudHJ5IHBvaW50LCBub3QgZXhwb3J0ZWQgKi8KKyAgTEFCRUxfR0xPQkFMX0VOVFJZLAkvKiBhbHRlcm5hdGUgZW50cnkgcG9pbnQsIGV4cG9ydGVkICovCisgIExBQkVMX1dFQUtfRU5UUlkJLyogYWx0ZXJuYXRlIGVudHJ5IHBvaW50LCBleHBvcnRlZCBhcyB3ZWFrIHN5bWJvbCAqLworfTsKKworI2lmIGRlZmluZWQgRU5BQkxFX1JUTF9GTEFHX0NIRUNLSU5HICYmIChHQ0NfVkVSU0lPTiA+IDIwMDcpCisKKy8qIFJldHJpZXZlIHRoZSBraW5kIG9mIExBQkVMLiAgKi8KKyNkZWZpbmUgTEFCRUxfS0lORChMQUJFTCkgX19leHRlbnNpb25fXwkJCQkJXAorKHsgX190eXBlb2YgKExBQkVMKSBjb25zdCBfbGFiZWwgPSAoTEFCRUwpOwkJCQlcCisgICBpZiAoR0VUX0NPREUgKF9sYWJlbCkgIT0gQ09ERV9MQUJFTCkJCQkJCVwKKyAgICAgcnRsX2NoZWNrX2ZhaWxlZF9mbGFnICgiTEFCRUxfS0lORCIsIF9sYWJlbCwgX19GSUxFX18sIF9fTElORV9fLAlcCisJCQkgICAgX19GVU5DVElPTl9fKTsJCQkJXAorICAgKGVudW0gbGFiZWxfa2luZCkgKChfbGFiZWwtPmp1bXAgPDwgMSkgfCBfbGFiZWwtPmNhbGwpOyB9KQorCisvKiBTZXQgdGhlIGtpbmQgb2YgTEFCRUwuICAqLworI2RlZmluZSBTRVRfTEFCRUxfS0lORChMQUJFTCwgS0lORCkgZG8gewkJCQlcCisgICBfX3R5cGVvZiAoTEFCRUwpIGNvbnN0IF9sYWJlbCA9IChMQUJFTCk7CQkJCVwKKyAgIGNvbnN0IHVuc2lnbmVkIGludCBfa2luZCA9IChLSU5EKTsJCQkJCVwKKyAgIGlmIChHRVRfQ09ERSAoX2xhYmVsKSAhPSBDT0RFX0xBQkVMKQkJCQkJXAorICAgICBydGxfY2hlY2tfZmFpbGVkX2ZsYWcgKCJTRVRfTEFCRUxfS0lORCIsIF9sYWJlbCwgX19GSUxFX18sIF9fTElORV9fLCBcCisJCQkgICAgX19GVU5DVElPTl9fKTsJCQkJXAorICAgX2xhYmVsLT5qdW1wID0gKChfa2luZCA+PiAxKSAmIDEpOwkJCQkJXAorICAgX2xhYmVsLT5jYWxsID0gKF9raW5kICYgMSk7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2Vsc2UKKworLyogUmV0cmlldmUgdGhlIGtpbmQgb2YgTEFCRUwuICAqLworI2RlZmluZSBMQUJFTF9LSU5EKExBQkVMKSBcCisgICAoKGVudW0gbGFiZWxfa2luZCkgKCgoTEFCRUwpLT5qdW1wIDw8IDEpIHwgKExBQkVMKS0+Y2FsbCkpCisKKy8qIFNldCB0aGUga2luZCBvZiBMQUJFTC4gICovCisjZGVmaW5lIFNFVF9MQUJFTF9LSU5EKExBQkVMLCBLSU5EKSBkbyB7CQkJCVwKKyAgIHJ0eCBjb25zdCBfbGFiZWwgPSAoTEFCRUwpOwkJCQkJCVwKKyAgIGNvbnN0IHVuc2lnbmVkIGludCBfa2luZCA9IChLSU5EKTsJCQkJCVwKKyAgIF9sYWJlbC0+anVtcCA9ICgoX2tpbmQgPj4gMSkgJiAxKTsJCQkJCVwKKyAgIF9sYWJlbC0+Y2FsbCA9IChfa2luZCAmIDEpOwkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBydGwgZmxhZyBjaGVja2luZyAqLworCisjZGVmaW5lIExBQkVMX0FMVF9FTlRSWV9QKExBQkVMKSAoTEFCRUxfS0lORCAoTEFCRUwpICE9IExBQkVMX05PUk1BTCkKKworLyogSW4ganVtcC5jLCBlYWNoIEpVTVBfSU5TTiBjYW4gcG9pbnQgdG8gYSBsYWJlbCB0aGF0IGl0IGNhbiBqdW1wIHRvLAorICAgc28gdGhhdCBpZiB0aGUgSlVNUF9JTlNOIGlzIGRlbGV0ZWQsIHRoZSBsYWJlbCdzIExBQkVMX05VU0VTIGNhbgorICAgYmUgZGVjcmVtZW50ZWQgYW5kIHBvc3NpYmx5IHRoZSBsYWJlbCBjYW4gYmUgZGVsZXRlZC4gICovCisjZGVmaW5lIEpVTVBfTEFCRUwoSU5TTikgICBYQ0VYUCAoSU5TTiwgOCwgSlVNUF9JTlNOKQorCisvKiBPbmNlIGJhc2ljIGJsb2NrcyBhcmUgZm91bmQsIGVhY2ggQ09ERV9MQUJFTCBzdGFydHMgYSBjaGFpbiB0aGF0CisgICBnb2VzIHRocm91Z2ggYWxsIHRoZSBMQUJFTF9SRUZzIHRoYXQganVtcCB0byB0aGF0IGxhYmVsLiAgVGhlIGNoYWluCisgICBldmVudHVhbGx5IHdpbmRzIHVwIGF0IHRoZSBDT0RFX0xBQkVMOiBpdCBpcyBjaXJjdWxhci4gICovCisjZGVmaW5lIExBQkVMX1JFRlMoTEFCRUwpIFhDRVhQIChMQUJFTCwgNSwgQ09ERV9MQUJFTCkKKwwKKy8qIEZvciBhIFJFRyBydHgsIFJFR05PIGV4dHJhY3RzIHRoZSByZWdpc3RlciBudW1iZXIuICBSRUdOTyBjYW4gb25seQorICAgYmUgdXNlZCBvbiBSSFMuICBVc2UgU0VUX1JFR05PIHRvIGNoYW5nZSB0aGUgdmFsdWUuICAqLworI2RlZmluZSBSRUdOTyhSVFgpIChyaHNfcmVnbm8oUlRYKSkKKyNkZWZpbmUgU0VUX1JFR05PKFJUWCxOKSAoZGZfcmVmX2NoYW5nZV9yZWdfd2l0aF9sb2MgKFJFR05PKFJUWCksIE4sIFJUWCksIFhDVUlOVCAoUlRYLCAwLCBSRUcpID0gTikKKworLyogT1JJR0lOQUxfUkVHTk8gaG9sZHMgdGhlIG51bWJlciB0aGUgcmVnaXN0ZXIgb3JpZ2luYWxseSBoYWQ7IGZvciBhCisgICBwc2V1ZG8gcmVnaXN0ZXIgdHVybmVkIGludG8gYSBoYXJkIHJlZyB0aGlzIHdpbGwgaG9sZCB0aGUgb2xkIHBzZXVkbworICAgcmVnaXN0ZXIgbnVtYmVyLiAgKi8KKyNkZWZpbmUgT1JJR0lOQUxfUkVHTk8oUlRYKSBYMFVJTlQgKFJUWCwgMSkKKworLyogRm9yY2UgdGhlIFJFR05PIG1hY3JvIHRvIG9ubHkgYmUgdXNlZCBvbiB0aGUgbGhzLiAgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CityaHNfcmVnbm8gKGNvbnN0X3J0eCB4KQoreworICByZXR1cm4gWENVSU5UICh4LCAwLCBSRUcpOworfQorCisKKworLyogMSBpZiBSVFggaXMgYSByZWcgb3IgcGFyYWxsZWwgdGhhdCBpcyB0aGUgY3VycmVudCBmdW5jdGlvbidzIHJldHVybgorICAgdmFsdWUuICAqLworI2RlZmluZSBSRUdfRlVOQ1RJT05fVkFMVUVfUChSVFgpCQkJCQlcCisgIChSVExfRkxBR19DSEVDSzIoIlJFR19GVU5DVElPTl9WQUxVRV9QIiwgKFJUWCksIFJFRywgUEFSQUxMRUwpLT5yZXR1cm5fdmFsKQorCisvKiAxIGlmIFJUWCBpcyBhIHJlZyB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgdmFyaWFibGUgZGVjbGFyZWQgYnkgdGhlIHVzZXIuICAqLworI2RlZmluZSBSRUdfVVNFUlZBUl9QKFJUWCkJCQkJCQlcCisgIChSVExfRkxBR19DSEVDSzEoIlJFR19VU0VSVkFSX1AiLCAoUlRYKSwgUkVHKS0+dm9sYXRpbCkKKworLyogMSBpZiBSVFggaXMgYSByZWcgdGhhdCBob2xkcyBhIHBvaW50ZXIgdmFsdWUuICAqLworI2RlZmluZSBSRUdfUE9JTlRFUihSVFgpCQkJCQkJXAorICAoUlRMX0ZMQUdfQ0hFQ0sxKCJSRUdfUE9JTlRFUiIsIChSVFgpLCBSRUcpLT5mcmFtZV9yZWxhdGVkKQorCisvKiAxIGlmIFJUWCBpcyBhIG1lbSB0aGF0IGhvbGRzIGEgcG9pbnRlciB2YWx1ZS4gICovCisjZGVmaW5lIE1FTV9QT0lOVEVSKFJUWCkJCQkJCQlcCisgIChSVExfRkxBR19DSEVDSzEoIk1FTV9QT0lOVEVSIiwgKFJUWCksIE1FTSktPmZyYW1lX3JlbGF0ZWQpCisKKy8qIDEgaWYgdGhlIGdpdmVuIHJlZ2lzdGVyIFJFRyBjb3JyZXNwb25kcyB0byBhIGhhcmQgcmVnaXN0ZXIuICAqLworI2RlZmluZSBIQVJEX1JFR0lTVEVSX1AoUkVHKSAoSEFSRF9SRUdJU1RFUl9OVU1fUCAoUkVHTk8gKFJFRykpKQorCisvKiAxIGlmIHRoZSBnaXZlbiByZWdpc3RlciBudW1iZXIgUkVHX05PIGNvcnJlc3BvbmRzIHRvIGEgaGFyZCByZWdpc3Rlci4gICovCisjZGVmaW5lIEhBUkRfUkVHSVNURVJfTlVNX1AoUkVHX05PKSAoKFJFR19OTykgPCBGSVJTVF9QU0VVRE9fUkVHSVNURVIpCisKKy8qIEZvciBhIENPTlNUX0lOVCBydHgsIElOVFZBTCBleHRyYWN0cyB0aGUgaW50ZWdlci4gICovCisjZGVmaW5lIElOVFZBTChSVFgpIFhDV0lOVChSVFgsIDAsIENPTlNUX0lOVCkKKyNkZWZpbmUgVUlOVFZBTChSVFgpICgodW5zaWduZWQgSE9TVF9XSURFX0lOVCkgSU5UVkFMIChSVFgpKQorCisvKiBGb3IgYSBDT05TVF9ET1VCTEU6CisgICBGb3IgYSBWT0lEbW9kZSwgdGhlcmUgYXJlIHR3byBpbnRlZ2VycyBDT05TVF9ET1VCTEVfTE9XIGlzIHRoZQorICAgICBsb3ctb3JkZXIgd29yZCBhbmQgLi4uX0hJR0ggdGhlIGhpZ2gtb3JkZXIuCisgICBGb3IgYSBmbG9hdCwgdGhlcmUgaXMgYSBSRUFMX1ZBTFVFX1RZUEUgc3RydWN0dXJlLCBhbmQKKyAgICAgQ09OU1RfRE9VQkxFX1JFQUxfVkFMVUUocikgaXMgYSBwb2ludGVyIHRvIGl0LiAgKi8KKyNkZWZpbmUgQ09OU1RfRE9VQkxFX0xPVyhyKSBYQ01XSU5UIChyLCAwLCBDT05TVF9ET1VCTEUsIFZPSURtb2RlKQorI2RlZmluZSBDT05TVF9ET1VCTEVfSElHSChyKSBYQ01XSU5UIChyLCAxLCBDT05TVF9ET1VCTEUsIFZPSURtb2RlKQorI2RlZmluZSBDT05TVF9ET1VCTEVfUkVBTF9WQUxVRShyKSBcCisgICgoY29uc3Qgc3RydWN0IHJlYWxfdmFsdWUgKikgWENOTVBSViAociwgQ09OU1RfRE9VQkxFLCBWT0lEbW9kZSkpCisKKyNkZWZpbmUgQ09OU1RfRklYRURfVkFMVUUocikgXAorICAoKGNvbnN0IHN0cnVjdCBmaXhlZF92YWx1ZSAqKSBYQ05NUEZWIChyLCBDT05TVF9GSVhFRCwgVk9JRG1vZGUpKQorI2RlZmluZSBDT05TVF9GSVhFRF9WQUxVRV9ISUdIKHIpIFwKKyAgKChIT1NUX1dJREVfSU5UKSAoQ09OU1RfRklYRURfVkFMVUUociktPmRhdGEuaGlnaCkpCisjZGVmaW5lIENPTlNUX0ZJWEVEX1ZBTFVFX0xPVyhyKSBcCisgICgoSE9TVF9XSURFX0lOVCkgKENPTlNUX0ZJWEVEX1ZBTFVFKHIpLT5kYXRhLmxvdykpCisKKy8qIEZvciBhIENPTlNUX1ZFQ1RPUiwgcmV0dXJuIGVsZW1lbnQgI24uICAqLworI2RlZmluZSBDT05TVF9WRUNUT1JfRUxUKFJUWCwgTikgWENWRUNFWFAgKFJUWCwgMCwgTiwgQ09OU1RfVkVDVE9SKQorCisvKiBGb3IgYSBDT05TVF9WRUNUT1IsIHJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgdmVjdG9yLiAgKi8KKyNkZWZpbmUgQ09OU1RfVkVDVE9SX05VTklUUyhSVFgpIFhDVkVDTEVOIChSVFgsIDAsIENPTlNUX1ZFQ1RPUikKKworLyogRm9yIGEgU1VCUkVHIHJ0eCwgU1VCUkVHX1JFRyBleHRyYWN0cyB0aGUgdmFsdWUgd2Ugd2FudCBhIHN1YnJlZyBvZi4KKyAgIFNVQlJFR19CWVRFIGV4dHJhY3RzIHRoZSBieXRlLW51bWJlci4gICovCisKKyNkZWZpbmUgU1VCUkVHX1JFRyhSVFgpIFhDRVhQIChSVFgsIDAsIFNVQlJFRykKKyNkZWZpbmUgU1VCUkVHX0JZVEUoUlRYKSBYQ1VJTlQgKFJUWCwgMSwgU1VCUkVHKQorCisvKiBpbiBydGxhbmFsLmMgKi8KKy8qIFJldHVybiB0aGUgcmlnaHQgY29zdCB0byBnaXZlIHRvIGFuIG9wZXJhdGlvbgorICAgdG8gbWFrZSB0aGUgY29zdCBvZiB0aGUgY29ycmVzcG9uZGluZyByZWdpc3Rlci10by1yZWdpc3RlciBpbnN0cnVjdGlvbgorICAgTiB0aW1lcyB0aGF0IG9mIGEgZmFzdCByZWdpc3Rlci10by1yZWdpc3RlciBpbnN0cnVjdGlvbi4gICovCisjZGVmaW5lIENPU1RTX05fSU5TTlMoTikgKChOKSAqIDQpCisKKy8qIE1heGltdW0gY29zdCBvZiBhbiBydGwgZXhwcmVzc2lvbi4gIFRoaXMgdmFsdWUgaGFzIHRoZSBzcGVjaWFsIG1lYW5pbmcKKyAgIG5vdCB0byB1c2UgYW4gcnR4IHdpdGggdGhpcyBjb3N0IHVuZGVyIGFueSBjaXJjdW1zdGFuY2VzLiAgKi8KKyNkZWZpbmUgTUFYX0NPU1QgSU5UX01BWAorCitleHRlcm4gdm9pZCBpbml0X3J0bGFuYWwgKHZvaWQpOworZXh0ZXJuIGludCBydHhfY29zdCAocnR4LCBlbnVtIHJ0eF9jb2RlLCBib29sKTsKK2V4dGVybiBpbnQgYWRkcmVzc19jb3N0IChydHgsIGVudW0gbWFjaGluZV9tb2RlLCBhZGRyX3NwYWNlX3QsIGJvb2wpOworZXh0ZXJuIHVuc2lnbmVkIGludCBzdWJyZWdfbHNiIChjb25zdF9ydHgpOworZXh0ZXJuIHVuc2lnbmVkIGludCBzdWJyZWdfbHNiXzEgKGVudW0gbWFjaGluZV9tb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCQkgIHVuc2lnbmVkIGludCk7CitleHRlcm4gdW5zaWduZWQgaW50IHN1YnJlZ19yZWdub19vZmZzZXQJKHVuc2lnbmVkIGludCwgZW51bSBtYWNoaW5lX21vZGUsCisJCQkJCSB1bnNpZ25lZCBpbnQsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBib29sIHN1YnJlZ19vZmZzZXRfcmVwcmVzZW50YWJsZV9wICh1bnNpZ25lZCBpbnQsIGVudW0gbWFjaGluZV9tb2RlLAorCQkJCQkgICB1bnNpZ25lZCBpbnQsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc3VicmVnX3JlZ25vIChjb25zdF9ydHgpOworZXh0ZXJuIGludCBzaW1wbGlmeV9zdWJyZWdfcmVnbm8gKHVuc2lnbmVkIGludCwgZW51bSBtYWNoaW5lX21vZGUsCisJCQkJICB1bnNpZ25lZCBpbnQsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc3VicmVnX25yZWdzIChjb25zdF9ydHgpOworZXh0ZXJuIHVuc2lnbmVkIGludCBzdWJyZWdfbnJlZ3Nfd2l0aF9yZWdubyAodW5zaWduZWQgaW50LCBjb25zdF9ydHgpOworZXh0ZXJuIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgbm9uemVyb19iaXRzIChjb25zdF9ydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgbnVtX3NpZ25fYml0X2NvcGllcyAoY29uc3RfcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gYm9vbCBjb25zdGFudF9wb29sX2NvbnN0YW50X3AgKHJ0eCk7CitleHRlcm4gYm9vbCB0cnVuY2F0ZWRfdG9fbW9kZSAoZW51bSBtYWNoaW5lX21vZGUsIGNvbnN0X3J0eCk7CitleHRlcm4gaW50IGxvd19iaXRtYXNrX2xlbiAoZW51bSBtYWNoaW5lX21vZGUsIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpOworCisKKy8qIDEgaWYgUlRYIGlzIGEgc3VicmVnIGNvbnRhaW5pbmcgYSByZWcgdGhhdCBpcyBhbHJlYWR5IGtub3duIHRvIGJlCisgICBzaWduLSBvciB6ZXJvLWV4dGVuZGVkIGZyb20gdGhlIG1vZGUgb2YgdGhlIHN1YnJlZyB0byB0aGUgbW9kZSBvZgorICAgdGhlIHJlZy4gIFNVQlJFR19QUk9NT1RFRF9VTlNJR05FRF9QIGdpdmVzIHRoZSBzaWduZWRuZXNzIG9mIHRoZQorICAgZXh0ZW5zaW9uLgorCisgICBXaGVuIHVzZWQgYXMgYSBMSFMsIGlzIG1lYW5zIHRoYXQgdGhpcyBleHRlbnNpb24gbXVzdCBiZSBkb25lCisgICB3aGVuIGFzc2lnbmluZyB0byBTVUJSRUdfUkVHLiAgKi8KKworI2RlZmluZSBTVUJSRUdfUFJPTU9URURfVkFSX1AoUlRYKQkJCQkJXAorICAoUlRMX0ZMQUdfQ0hFQ0sxKCJTVUJSRUdfUFJPTU9URUQiLCAoUlRYKSwgU1VCUkVHKS0+aW5fc3RydWN0KQorCisjZGVmaW5lIFNVQlJFR19QUk9NT1RFRF9VTlNJR05FRF9TRVQoUlRYLCBWQUwpCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisgIHJ0eCBjb25zdCBfcnR4ID0gUlRMX0ZMQUdfQ0hFQ0sxKCJTVUJSRUdfUFJPTU9URURfVU5TSUdORURfU0VUIiwgKFJUWCksIFNVQlJFRyk7IFwKKyAgaWYgKChWQUwpIDwgMCkJCQkJCQkJXAorICAgIF9ydHgtPnZvbGF0aWwgPSAxOwkJCQkJCQlcCisgIGVsc2UgewkJCQkJCQkJXAorICAgIF9ydHgtPnZvbGF0aWwgPSAwOwkJCQkJCQlcCisgICAgX3J0eC0+dW5jaGFuZ2luZyA9IChWQUwpOwkJCQkJCVwKKyAgfQkJCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qIFZhbGlkIGZvciBzdWJyZWdzIHdoaWNoIGFyZSBTVUJSRUdfUFJPTU9URURfVkFSX1AoKS4gIEluIHRoYXQgY2FzZQorICAgdGhpcyBnaXZlcyB0aGUgbmVjZXNzYXJ5IGV4dGVuc2lvbnM6CisgICAwICAtIHNpZ25lZAorICAgMSAgLSBub3JtYWwgdW5zaWduZWQKKyAgIC0xIC0gcG9pbnRlciB1bnNpZ25lZCwgd2hpY2ggbW9zdCBvZnRlbiBjYW4gYmUgaGFuZGxlZCBsaWtlIHVuc2lnbmVkCisgICAgICAgIGV4dGVuc2lvbiwgZXhjZXB0IGZvciBnZW5lcmF0aW5nIGluc3RydWN0aW9ucyB3aGVyZSB3ZSBuZWVkIHRvCisJZW1pdCBzcGVjaWFsIGNvZGUgKHB0cl9leHRlbmQgaW5zbnMpIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcy4gICovCisKKyNkZWZpbmUgU1VCUkVHX1BST01PVEVEX1VOU0lHTkVEX1AoUlRYKQlcCisgICgoUlRMX0ZMQUdfQ0hFQ0sxKCJTVUJSRUdfUFJPTU9URURfVU5TSUdORURfUCIsIChSVFgpLCBTVUJSRUcpLT52b2xhdGlsKSBcCisgICA/IC0xIDogKGludCkgKFJUWCktPnVuY2hhbmdpbmcpCisKKy8qIEFjY2VzcyB2YXJpb3VzIGNvbXBvbmVudHMgb2YgYW4gQVNNX09QRVJBTkRTIHJ0eC4gICovCisKKyNkZWZpbmUgQVNNX09QRVJBTkRTX1RFTVBMQVRFKFJUWCkgWENTVFIgKFJUWCwgMCwgQVNNX09QRVJBTkRTKQorI2RlZmluZSBBU01fT1BFUkFORFNfT1VUUFVUX0NPTlNUUkFJTlQoUlRYKSBYQ1NUUiAoUlRYLCAxLCBBU01fT1BFUkFORFMpCisjZGVmaW5lIEFTTV9PUEVSQU5EU19PVVRQVVRfSURYKFJUWCkgWENJTlQgKFJUWCwgMiwgQVNNX09QRVJBTkRTKQorI2RlZmluZSBBU01fT1BFUkFORFNfSU5QVVRfVkVDKFJUWCkgWENWRUMgKFJUWCwgMywgQVNNX09QRVJBTkRTKQorI2RlZmluZSBBU01fT1BFUkFORFNfSU5QVVRfQ09OU1RSQUlOVF9WRUMoUlRYKSBYQ1ZFQyAoUlRYLCA0LCBBU01fT1BFUkFORFMpCisjZGVmaW5lIEFTTV9PUEVSQU5EU19JTlBVVChSVFgsIE4pIFhDVkVDRVhQIChSVFgsIDMsIE4sIEFTTV9PUEVSQU5EUykKKyNkZWZpbmUgQVNNX09QRVJBTkRTX0lOUFVUX0xFTkdUSChSVFgpIFhDVkVDTEVOIChSVFgsIDMsIEFTTV9PUEVSQU5EUykKKyNkZWZpbmUgQVNNX09QRVJBTkRTX0lOUFVUX0NPTlNUUkFJTlRfRVhQKFJUWCwgTikgXAorICBYQ1ZFQ0VYUCAoUlRYLCA0LCBOLCBBU01fT1BFUkFORFMpCisjZGVmaW5lIEFTTV9PUEVSQU5EU19JTlBVVF9DT05TVFJBSU5UKFJUWCwgTikgXAorICBYU1RSIChYQ1ZFQ0VYUCAoUlRYLCA0LCBOLCBBU01fT1BFUkFORFMpLCAwKQorI2RlZmluZSBBU01fT1BFUkFORFNfSU5QVVRfTU9ERShSVFgsIE4pICBcCisgIEdFVF9NT0RFIChYQ1ZFQ0VYUCAoUlRYLCA0LCBOLCBBU01fT1BFUkFORFMpKQorI2RlZmluZSBBU01fT1BFUkFORFNfTEFCRUxfVkVDKFJUWCkgWENWRUMgKFJUWCwgNSwgQVNNX09QRVJBTkRTKQorI2RlZmluZSBBU01fT1BFUkFORFNfTEFCRUxfTEVOR1RIKFJUWCkgWENWRUNMRU4gKFJUWCwgNSwgQVNNX09QRVJBTkRTKQorI2RlZmluZSBBU01fT1BFUkFORFNfTEFCRUwoUlRYLCBOKSBYQ1ZFQ0VYUCAoUlRYLCA1LCBOLCBBU01fT1BFUkFORFMpCisjZGVmaW5lIEFTTV9PUEVSQU5EU19TT1VSQ0VfTE9DQVRJT04oUlRYKSBYQ1VJTlQgKFJUWCwgNiwgQVNNX09QRVJBTkRTKQorI2RlZmluZSBBU01fSU5QVVRfU09VUkNFX0xPQ0FUSU9OKFJUWCkgWENVSU5UIChSVFgsIDEsIEFTTV9JTlBVVCkKKworLyogMSBpZiBSVFggaXMgYSBtZW0gdGhhdCBpcyBzdGF0aWNhbGx5IGFsbG9jYXRlZCBpbiByZWFkLW9ubHkgbWVtb3J5LiAgKi8KKyNkZWZpbmUgTUVNX1JFQURPTkxZX1AoUlRYKSBcCisgIChSVExfRkxBR19DSEVDSzEoIk1FTV9SRUFET05MWV9QIiwgKFJUWCksIE1FTSktPnVuY2hhbmdpbmcpCisKKy8qIDEgaWYgUlRYIGlzIGEgbWVtIGFuZCB3ZSBzaG91bGQga2VlcCB0aGUgYWxpYXMgc2V0IGZvciB0aGlzIG1lbQorICAgdW5jaGFuZ2VkIHdoZW4gd2UgYWNjZXNzIGEgY29tcG9uZW50LiAgU2V0IHRvIDEsIG9yIGV4YW1wbGUsIHdoZW4gd2UKKyAgIGFyZSBhbHJlYWR5IGluIGEgbm9uLWFkZHJlc3NhYmxlIGNvbXBvbmVudCBvZiBhbiBhZ2dyZWdhdGUuICAqLworI2RlZmluZSBNRU1fS0VFUF9BTElBU19TRVRfUChSVFgpCQkJCQlcCisgIChSVExfRkxBR19DSEVDSzEoIk1FTV9LRUVQX0FMSUFTX1NFVF9QIiwgKFJUWCksIE1FTSktPmp1bXApCisKKy8qIDEgaWYgUlRYIGlzIGEgbWVtIG9yIGFzbV9vcGVyYW5kIGZvciBhIHZvbGF0aWxlIHJlZmVyZW5jZS4gICovCisjZGVmaW5lIE1FTV9WT0xBVElMRV9QKFJUWCkJCQkJCQlcCisgIChSVExfRkxBR19DSEVDSzMoIk1FTV9WT0xBVElMRV9QIiwgKFJUWCksIE1FTSwgQVNNX09QRVJBTkRTLAkJXAorCQkgICBBU01fSU5QVVQpLT52b2xhdGlsKQorCisvKiAxIGlmIFJUWCBpcyBhIG1lbSB0aGF0IHJlZmVycyB0byBhbiBhZ2dyZWdhdGUsIGVpdGhlciB0byB0aGUKKyAgIGFnZ3JlZ2F0ZSBpdHNlbGYgb3IgdG8gYSBmaWVsZCBvZiB0aGUgYWdncmVnYXRlLiAgSWYgemVybywgUlRYIG1heQorICAgb3IgbWF5IG5vdCBiZSBzdWNoIGEgcmVmZXJlbmNlLiAgKi8KKyNkZWZpbmUgTUVNX0lOX1NUUlVDVF9QKFJUWCkJCQkJCQlcCisgIChSVExfRkxBR19DSEVDSzEoIk1FTV9JTl9TVFJVQ1RfUCIsIChSVFgpLCBNRU0pLT5pbl9zdHJ1Y3QpCisKKy8qIDEgaWYgUlRYIGlzIGEgTUVNIHRoYXQgcmVmZXJzIHRvIGEgc2NhbGFyLiAgSWYgemVybywgUlRYIG1heSBvciBtYXkKKyAgIG5vdCByZWZlciB0byBhIHNjYWxhci4gICovCisjZGVmaW5lIE1FTV9TQ0FMQVJfUChSVFgpCQkJCQkJXAorICAoUlRMX0ZMQUdfQ0hFQ0sxKCJNRU1fU0NBTEFSX1AiLCAoUlRYKSwgTUVNKS0+cmV0dXJuX3ZhbCkKKworLyogMSBpZiBSVFggaXMgYSBtZW0gdGhhdCBjYW5ub3QgdHJhcC4gICovCisjZGVmaW5lIE1FTV9OT1RSQVBfUChSVFgpIFwKKyAgKFJUTF9GTEFHX0NIRUNLMSgiTUVNX05PVFJBUF9QIiwgKFJUWCksIE1FTSktPmNhbGwpCisKKy8qIElmIFZBTCBpcyBub256ZXJvLCBzZXQgTUVNX0lOX1NUUlVDVF9QIGFuZCBjbGVhciBNRU1fU0NBTEFSX1AgaW4KKyAgIFJUWC4gIE90aGVyd2lzZSwgdmljZSB2ZXJzYS4gIFVzZSB0aGlzIG1hY3JvIG9ubHkgd2hlbiB5b3UgYXJlCisgICAqc3VyZSogdGhhdCB5b3Uga25vdyB0aGF0IHRoZSBNRU0gaXMgaW4gYSBzdHJ1Y3R1cmUsIG9yIGlzIGEKKyAgIHNjYWxhci4gIFZBTCBpcyBldmFsdWF0ZWQgb25seSBvbmNlLiAgKi8KKyNkZWZpbmUgTUVNX1NFVF9JTl9TVFJVQ1RfUChSVFgsIFZBTCkJCVwKK2RvIHsJCQkJCQlcCisgIGlmIChWQUwpCQkJCQlcCisgICAgewkJCQkJCVwKKyAgICAgIE1FTV9JTl9TVFJVQ1RfUCAoUlRYKSA9IDE7CQlcCisgICAgICBNRU1fU0NBTEFSX1AgKFJUWCkgPSAwOwkJCVwKKyAgICB9CQkJCQkJXAorICBlbHNlCQkJCQkJXAorICAgIHsJCQkJCQlcCisgICAgICBNRU1fSU5fU1RSVUNUX1AgKFJUWCkgPSAwOwkJXAorICAgICAgTUVNX1NDQUxBUl9QIChSVFgpID0gMTsJCQlcCisgICAgfQkJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qIFRoZSBtZW1vcnkgYXR0cmlidXRlIGJsb2NrLiAgV2UgcHJvdmlkZSBhY2Nlc3MgbWFjcm9zIGZvciBlYWNoIHZhbHVlCisgICBpbiB0aGUgYmxvY2sgYW5kIHByb3ZpZGUgZGVmYXVsdHMgaWYgbm9uZSBzcGVjaWZpZWQuICAqLworI2RlZmluZSBNRU1fQVRUUlMoUlRYKSBYME1FTUFUVFIgKFJUWCwgMSkKKworLyogVGhlIHJlZ2lzdGVyIGF0dHJpYnV0ZSBibG9jay4gIFdlIHByb3ZpZGUgYWNjZXNzIG1hY3JvcyBmb3IgZWFjaCB2YWx1ZQorICAgaW4gdGhlIGJsb2NrIGFuZCBwcm92aWRlIGRlZmF1bHRzIGlmIG5vbmUgc3BlY2lmaWVkLiAgKi8KKyNkZWZpbmUgUkVHX0FUVFJTKFJUWCkgWDBSRUdBVFRSIChSVFgsIDIpCisKKy8qIEZvciBhIE1FTSBydHgsIHRoZSBhbGlhcyBzZXQuICBJZiAwLCB0aGlzIE1FTSBpcyBub3QgaW4gYW55IGFsaWFzCisgICBzZXQsIGFuZCBtYXkgYWxpYXMgYW55dGhpbmcuICBPdGhlcndpc2UsIHRoZSBNRU0gY2FuIG9ubHkgYWxpYXMKKyAgIE1FTXMgaW4gYSBjb25mbGljdGluZyBhbGlhcyBzZXQuICBUaGlzIHZhbHVlIGlzIHNldCBpbiBhCisgICBsYW5ndWFnZS1kZXBlbmRlbnQgbWFubmVyIGluIHRoZSBmcm9udC1lbmQsIGFuZCBzaG91bGQgbm90IGJlCisgICBhbHRlcmVkIGluIHRoZSBiYWNrLWVuZC4gIFRoZXNlIHNldCBudW1iZXJzIGFyZSB0ZXN0ZWQgd2l0aAorICAgYWxpYXNfc2V0c19jb25mbGljdF9wLiAgKi8KKyNkZWZpbmUgTUVNX0FMSUFTX1NFVChSVFgpIChNRU1fQVRUUlMgKFJUWCkgPT0gMCA/IDAgOiBNRU1fQVRUUlMgKFJUWCktPmFsaWFzKQorCisvKiBGb3IgYSBNRU0gcnR4LCB0aGUgZGVjbCBpdCBpcyBrbm93biB0byByZWZlciB0bywgaWYgaXQgaXMga25vd24gdG8KKyAgIHJlZmVyIHRvIHBhcnQgb2YgYSBERUNMLiAgSXQgbWF5IGFsc28gYmUgYSBDT01QT05FTlRfUkVGLiAgKi8KKyNkZWZpbmUgTUVNX0VYUFIoUlRYKSAoTUVNX0FUVFJTIChSVFgpID09IDAgPyAwIDogTUVNX0FUVFJTIChSVFgpLT5leHByKQorCisvKiBGb3IgYSBNRU0gcnR4LCB0aGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIE1FTV9FWFBSLCBpZiBrbm93biwgYXMgYQorICAgUlRYIHRoYXQgaXMgYWx3YXlzIGEgQ09OU1RfSU5ULiAgKi8KKyNkZWZpbmUgTUVNX09GRlNFVChSVFgpIChNRU1fQVRUUlMgKFJUWCkgPT0gMCA/IDAgOiBNRU1fQVRUUlMgKFJUWCktPm9mZnNldCkKKworLyogRm9yIGEgTUVNIHJ0eCwgdGhlIGFkZHJlc3Mgc3BhY2UuICAqLworI2RlZmluZSBNRU1fQUREUl9TUEFDRShSVFgpIChNRU1fQVRUUlMgKFJUWCkgPT0gMCA/IEFERFJfU1BBQ0VfR0VORVJJQyBcCisJCQkJCQkgIDogTUVNX0FUVFJTIChSVFgpLT5hZGRyc3BhY2UpCisKKy8qIEZvciBhIE1FTSBydHgsIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBNRU0sIGlmIGtub3duLCBhcyBhbiBSVFggdGhhdAorICAgaXMgYWx3YXlzIGEgQ09OU1RfSU5ULiAgKi8KKyNkZWZpbmUgTUVNX1NJWkUoUlRYKQkJCQkJCQlcCisoTUVNX0FUVFJTIChSVFgpICE9IDAgPyBNRU1fQVRUUlMgKFJUWCktPnNpemUJCQkJXAorIDogR0VUX01PREUgKFJUWCkgIT0gQkxLbW9kZSA/IEdFTl9JTlQgKEdFVF9NT0RFX1NJWkUgKEdFVF9NT0RFIChSVFgpKSkJXAorIDogMCkKKworLyogRm9yIGEgTUVNIHJ0eCwgdGhlIGFsaWdubWVudCBpbiBiaXRzLiAgV2UgY2FuIHVzZSB0aGUgYWxpZ25tZW50IG9mIHRoZQorICAgbW9kZSBhcyBhIGRlZmF1bHQgd2hlbiBTVFJJQ1RfQUxJR05NRU5ULCBidXQgbm90IGlmIG5vdC4gICovCisjZGVmaW5lIE1FTV9BTElHTihSVFgpCQkJCQkJCVwKKyhNRU1fQVRUUlMgKFJUWCkgIT0gMCA/IE1FTV9BVFRSUyAoUlRYKS0+YWxpZ24JCQkJXAorIDogKFNUUklDVF9BTElHTk1FTlQgJiYgR0VUX01PREUgKFJUWCkgIT0gQkxLbW9kZQkJCVwKKyAgICA/IEdFVF9NT0RFX0FMSUdOTUVOVCAoR0VUX01PREUgKFJUWCkpIDogQklUU19QRVJfVU5JVCkpCisKKy8qIEZvciBhIFJFRyBydHgsIHRoZSBkZWNsIGl0IGlzIGtub3duIHRvIHJlZmVyIHRvLCBpZiBpdCBpcyBrbm93biB0bworICAgcmVmZXIgdG8gcGFydCBvZiBhIERFQ0wuICAqLworI2RlZmluZSBSRUdfRVhQUihSVFgpIChSRUdfQVRUUlMgKFJUWCkgPT0gMCA/IDAgOiBSRUdfQVRUUlMgKFJUWCktPmRlY2wpCisKKy8qIEZvciBhIFJFRyBydHgsIHRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgUkVHX0VYUFIsIGlmIGtub3duLCBhcyBhbgorICAgSE9TVF9XSURFX0lOVC4gICovCisjZGVmaW5lIFJFR19PRkZTRVQoUlRYKSAoUkVHX0FUVFJTIChSVFgpID09IDAgPyAwIDogUkVHX0FUVFJTIChSVFgpLT5vZmZzZXQpCisKKy8qIENvcHkgdGhlIGF0dHJpYnV0ZXMgdGhhdCBhcHBseSB0byBtZW1vcnkgbG9jYXRpb25zIGZyb20gUkhTIHRvIExIUy4gICovCisjZGVmaW5lIE1FTV9DT1BZX0FUVFJJQlVURVMoTEhTLCBSSFMpCQkJCVwKKyAgKE1FTV9WT0xBVElMRV9QIChMSFMpID0gTUVNX1ZPTEFUSUxFX1AgKFJIUyksCQkJXAorICAgTUVNX0lOX1NUUlVDVF9QIChMSFMpID0gTUVNX0lOX1NUUlVDVF9QIChSSFMpLAkJXAorICAgTUVNX1NDQUxBUl9QIChMSFMpID0gTUVNX1NDQUxBUl9QIChSSFMpLAkJCVwKKyAgIE1FTV9OT1RSQVBfUCAoTEhTKSA9IE1FTV9OT1RSQVBfUCAoUkhTKSwJCQlcCisgICBNRU1fUkVBRE9OTFlfUCAoTEhTKSA9IE1FTV9SRUFET05MWV9QIChSSFMpLAkJCVwKKyAgIE1FTV9LRUVQX0FMSUFTX1NFVF9QIChMSFMpID0gTUVNX0tFRVBfQUxJQVNfU0VUX1AgKFJIUyksCVwKKyAgIE1FTV9QT0lOVEVSIChMSFMpID0gTUVNX1BPSU5URVIgKFJIUyksCQkJXAorICAgTUVNX0FUVFJTIChMSFMpID0gTUVNX0FUVFJTIChSSFMpKQorCisvKiAxIGlmIFJUWCBpcyBhIGxhYmVsX3JlZiBmb3IgYSBub25sb2NhbCBsYWJlbC4gICovCisvKiBMaWtld2lzZSBpbiBhbiBleHByX2xpc3QgZm9yIGEgUkVHX0xBQkVMX09QRVJBTkQgb3IKKyAgIFJFR19MQUJFTF9UQVJHRVQgbm90ZS4gICovCisjZGVmaW5lIExBQkVMX1JFRl9OT05MT0NBTF9QKFJUWCkJCQkJCVwKKyAgKFJUTF9GTEFHX0NIRUNLMSgiTEFCRUxfUkVGX05PTkxPQ0FMX1AiLCAoUlRYKSwgTEFCRUxfUkVGKS0+dm9sYXRpbCkKKworLyogMSBpZiBSVFggaXMgYSBjb2RlX2xhYmVsIHRoYXQgc2hvdWxkIGFsd2F5cyBiZSBjb25zaWRlcmVkIHRvIGJlIG5lZWRlZC4gICovCisjZGVmaW5lIExBQkVMX1BSRVNFUlZFX1AoUlRYKQkJCQkJCVwKKyAgKFJUTF9GTEFHX0NIRUNLMigiTEFCRUxfUFJFU0VSVkVfUCIsIChSVFgpLCBDT0RFX0xBQkVMLCBOT1RFKS0+aW5fc3RydWN0KQorCisvKiBEdXJpbmcgc2NoZWQsIDEgaWYgUlRYIGlzIGFuIGluc24gdGhhdCBtdXN0IGJlIHNjaGVkdWxlZCB0b2dldGhlcgorICAgd2l0aCB0aGUgcHJlY2VkaW5nIGluc24uICAqLworI2RlZmluZSBTQ0hFRF9HUk9VUF9QKFJUWCkJCQkJCQlcCisgIChSVExfRkxBR19DSEVDSzQoIlNDSEVEX0dST1VQX1AiLCAoUlRYKSwgREVCVUdfSU5TTiwgSU5TTiwJCVwKKwkJICAgSlVNUF9JTlNOLCBDQUxMX0lOU04JCQkJCVwKKwkJICAgKS0+aW5fc3RydWN0KQorCisvKiBGb3IgYSBTRVQgcnR4LCBTRVRfREVTVCBpcyB0aGUgcGxhY2UgdGhhdCBpcyBzZXQKKyAgIGFuZCBTRVRfU1JDIGlzIHRoZSB2YWx1ZSBpdCBpcyBzZXQgdG8uICAqLworI2RlZmluZSBTRVRfREVTVChSVFgpIFhDMkVYUChSVFgsIDAsIFNFVCwgQ0xPQkJFUikKKyNkZWZpbmUgU0VUX1NSQyhSVFgpIFhDRVhQKFJUWCwgMSwgU0VUKQorI2RlZmluZSBTRVRfSVNfUkVUVVJOX1AoUlRYKQkJCQkJCVwKKyAgKFJUTF9GTEFHX0NIRUNLMSgiU0VUX0lTX1JFVFVSTl9QIiwgKFJUWCksIFNFVCktPmp1bXApCisKKy8qIEZvciBhIFRSQVBfSUYgcnR4LCBUUkFQX0NPTkRJVElPTiBpcyBhbiBleHByZXNzaW9uLiAgKi8KKyNkZWZpbmUgVFJBUF9DT05ESVRJT04oUlRYKSBYQ0VYUCAoUlRYLCAwLCBUUkFQX0lGKQorI2RlZmluZSBUUkFQX0NPREUoUlRYKSBYQ0VYUCAoUlRYLCAxLCBUUkFQX0lGKQorCisvKiBGb3IgYSBDT05EX0VYRUMgcnR4LCBDT05EX0VYRUNfVEVTVCBpcyB0aGUgY29uZGl0aW9uIHRvIGJhc2UKKyAgIGNvbmRpdGlvbmFsbHkgZXhlY3V0aW5nIHRoZSBjb2RlIG9uLCBDT05EX0VYRUNfQ09ERSBpcyB0aGUgY29kZQorICAgdG8gZXhlY3V0ZSBpZiB0aGUgY29uZGl0aW9uIGlzIHRydWUuICAqLworI2RlZmluZSBDT05EX0VYRUNfVEVTVChSVFgpIFhDRVhQIChSVFgsIDAsIENPTkRfRVhFQykKKyNkZWZpbmUgQ09ORF9FWEVDX0NPREUoUlRYKSBYQ0VYUCAoUlRYLCAxLCBDT05EX0VYRUMpCisKKy8qIDEgaWYgUlRYIGlzIGEgc3ltYm9sX3JlZiB0aGF0IGFkZHJlc3NlcyB0aGlzIGZ1bmN0aW9uJ3MgcnRsCisgICBjb25zdGFudHMgcG9vbC4gICovCisjZGVmaW5lIENPTlNUQU5UX1BPT0xfQUREUkVTU19QKFJUWCkJCQkJCVwKKyAgKFJUTF9GTEFHX0NIRUNLMSgiQ09OU1RBTlRfUE9PTF9BRERSRVNTX1AiLCAoUlRYKSwgU1lNQk9MX1JFRiktPnVuY2hhbmdpbmcpCisKKy8qIDEgaWYgUlRYIGlzIGEgc3ltYm9sX3JlZiB0aGF0IGFkZHJlc3NlcyBhIHZhbHVlIGluIHRoZSBmaWxlJ3MKKyAgIHRyZWUgY29uc3RhbnQgcG9vbC4gIFRoaXMgaW5mb3JtYXRpb24gaXMgcHJpdmF0ZSB0byB2YXJhc20uYy4gICovCisjZGVmaW5lIFRSRUVfQ09OU1RBTlRfUE9PTF9BRERSRVNTX1AoUlRYKQkJCQlcCisgIChSVExfRkxBR19DSEVDSzEoIlRSRUVfQ09OU1RBTlRfUE9PTF9BRERSRVNTX1AiLAkJCVwKKwkJICAgKFJUWCksIFNZTUJPTF9SRUYpLT5mcmFtZV9yZWxhdGVkKQorCisvKiBVc2VkIGlmIFJUWCBpcyBhIHN5bWJvbF9yZWYsIGZvciBtYWNoaW5lLXNwZWNpZmljIHB1cnBvc2VzLiAgKi8KKyNkZWZpbmUgU1lNQk9MX1JFRl9GTEFHKFJUWCkJCQkJCQlcCisgIChSVExfRkxBR19DSEVDSzEoIlNZTUJPTF9SRUZfRkxBRyIsIChSVFgpLCBTWU1CT0xfUkVGKS0+dm9sYXRpbCkKKworLyogMSBpZiBSVFggaXMgYSBzeW1ib2xfcmVmIHRoYXQgaGFzIGJlZW4gdGhlIGxpYnJhcnkgZnVuY3Rpb24gaW4KKyAgIGVtaXRfbGlicmFyeV9jYWxsLiAgKi8KKyNkZWZpbmUgU1lNQk9MX1JFRl9VU0VEKFJUWCkJCQkJCQlcCisgIChSVExfRkxBR19DSEVDSzEoIlNZTUJPTF9SRUZfVVNFRCIsIChSVFgpLCBTWU1CT0xfUkVGKS0+dXNlZCkKKworLyogMSBpZiBSVFggaXMgYSBzeW1ib2xfcmVmIGZvciBhIHdlYWsgc3ltYm9sLiAgKi8KKyNkZWZpbmUgU1lNQk9MX1JFRl9XRUFLKFJUWCkJCQkJCQlcCisgIChSVExfRkxBR19DSEVDSzEoIlNZTUJPTF9SRUZfV0VBSyIsIChSVFgpLCBTWU1CT0xfUkVGKS0+cmV0dXJuX3ZhbCkKKworLyogQSBwb2ludGVyIGF0dGFjaGVkIHRvIHRoZSBTWU1CT0xfUkVGOyBlaXRoZXIgU1lNQk9MX1JFRl9ERUNMIG9yCisgICBTWU1CT0xfUkVGX0NPTlNUQU5ULiAgKi8KKyNkZWZpbmUgU1lNQk9MX1JFRl9EQVRBKFJUWCkgWDBBTlkgKChSVFgpLCAyKQorCisvKiBTZXQgUlRYJ3MgU1lNQk9MX1JFRl9ERUNMIHRvIERFQ0wuICBSVFggbXVzdCBub3QgYmUgYSBjb25zdGFudAorICAgcG9vbCBzeW1ib2wuICAqLworI2RlZmluZSBTRVRfU1lNQk9MX1JFRl9ERUNMKFJUWCwgREVDTCkgXAorICAoZ2NjX2Fzc2VydCAoIUNPTlNUQU5UX1BPT0xfQUREUkVTU19QIChSVFgpKSwgWDBUUkVFICgoUlRYKSwgMikgPSAoREVDTCkpCisKKy8qIFRoZSB0cmVlIChkZWNsIG9yIGNvbnN0YW50KSBhc3NvY2lhdGVkIHdpdGggdGhlIHN5bWJvbCwgb3IgbnVsbC4gICovCisjZGVmaW5lIFNZTUJPTF9SRUZfREVDTChSVFgpIFwKKyAgKENPTlNUQU5UX1BPT0xfQUREUkVTU19QIChSVFgpID8gTlVMTCA6IFgwVFJFRSAoKFJUWCksIDIpKQorCisvKiBTZXQgUlRYJ3MgU1lNQk9MX1JFRl9DT05TVEFOVCB0byBDLiAgUlRYIG11c3QgYmUgYSBjb25zdGFudCBwb29sIHN5bWJvbC4gICovCisjZGVmaW5lIFNFVF9TWU1CT0xfUkVGX0NPTlNUQU5UKFJUWCwgQykgXAorICAoZ2NjX2Fzc2VydCAoQ09OU1RBTlRfUE9PTF9BRERSRVNTX1AgKFJUWCkpLCBYMENPTlNUQU5UICgoUlRYKSwgMikgPSAoQykpCisKKy8qIFRoZSBydHggY29uc3RhbnQgcG9vbCBlbnRyeSBmb3IgYSBzeW1ib2wsIG9yIG51bGwuICAqLworI2RlZmluZSBTWU1CT0xfUkVGX0NPTlNUQU5UKFJUWCkgXAorICAoQ09OU1RBTlRfUE9PTF9BRERSRVNTX1AgKFJUWCkgPyBYMENPTlNUQU5UICgoUlRYKSwgMikgOiBOVUxMKQorCisvKiBBIHNldCBvZiBmbGFncyBvbiBhIHN5bWJvbF9yZWYgdGhhdCBhcmUsIGluIHNvbWUgcmVzcGVjdHMsIHJlZHVuZGFudCB3aXRoCisgICBpbmZvcm1hdGlvbiBkZXJpdmFibGUgZnJvbSB0aGUgdHJlZSBkZWNsIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHN5bWJvbC4KKyAgIEV4Y2VwdCB0aGF0IHdlIGJ1aWxkIGEgKmxvdCogb2YgU1lNQk9MX1JFRnMgdGhhdCBhcmVuJ3QgYXNzb2NpYXRlZCB3aXRoIGEKKyAgIGRlY2wuICBJbiBzb21lIGNhc2VzIHRoaXMgaXMgYSBidWcuICBCdXQgYmV5b25kIHRoYXQsIGl0J3MgbmljZSB0byBjYWNoZQorICAgdGhpcyBpbmZvcm1hdGlvbiB0byBhdm9pZCByZWNvbXB1dGluZyBpdC4gIEZpbmFsbHksIHRoaXMgYWxsb3dzIHNwYWNlIGZvcgorICAgdGhlIHRhcmdldCB0byBzdG9yZSBtb3JlIHRoYW4gb25lIGJpdCBvZiBpbmZvcm1hdGlvbiwgYXMgd2l0aAorICAgU1lNQk9MX1JFRl9GTEFHLiAgKi8KKyNkZWZpbmUgU1lNQk9MX1JFRl9GTEFHUyhSVFgpCVgwSU5UICgoUlRYKSwgMSkKKworLyogVGhlc2UgZmxhZ3MgYXJlIGNvbW1vbiBlbm91Z2ggdG8gYmUgZGVmaW5lZCBmb3IgYWxsIHRhcmdldHMuICBUaGV5CisgICBhcmUgY29tcHV0ZWQgYnkgdGhlIGRlZmF1bHQgdmVyc2lvbiBvZiB0YXJnZXRtLmVuY29kZV9zZWN0aW9uX2luZm8uICAqLworCisvKiBTZXQgaWYgdGhpcyBzeW1ib2wgaXMgYSBmdW5jdGlvbi4gICovCisjZGVmaW5lIFNZTUJPTF9GTEFHX0ZVTkNUSU9OCSgxIDw8IDApCisjZGVmaW5lIFNZTUJPTF9SRUZfRlVOQ1RJT05fUChSVFgpIFwKKyAgKChTWU1CT0xfUkVGX0ZMQUdTIChSVFgpICYgU1lNQk9MX0ZMQUdfRlVOQ1RJT04pICE9IDApCisvKiBTZXQgaWYgdGFyZ2V0bS5iaW5kc19sb2NhbF9wIGlzIHRydWUuICAqLworI2RlZmluZSBTWU1CT0xfRkxBR19MT0NBTAkoMSA8PCAxKQorI2RlZmluZSBTWU1CT0xfUkVGX0xPQ0FMX1AoUlRYKSBcCisgICgoU1lNQk9MX1JFRl9GTEFHUyAoUlRYKSAmIFNZTUJPTF9GTEFHX0xPQ0FMKSAhPSAwKQorLyogU2V0IGlmIHRhcmdldG0uaW5fc21hbGxfZGF0YV9wIGlzIHRydWUuICAqLworI2RlZmluZSBTWU1CT0xfRkxBR19TTUFMTAkoMSA8PCAyKQorI2RlZmluZSBTWU1CT0xfUkVGX1NNQUxMX1AoUlRYKSBcCisgICgoU1lNQk9MX1JFRl9GTEFHUyAoUlRYKSAmIFNZTUJPTF9GTEFHX1NNQUxMKSAhPSAwKQorLyogVGhlIHRocmVlLWJpdCBmaWVsZCBhdCBbNTozXSBpcyB0cnVlIGZvciBUTFMgdmFyaWFibGVzOyB1c2UKKyAgIFNZTUJPTF9SRUZfVExTX01PREVMIHRvIGV4dHJhY3QgdGhlIGZpZWxkIGFzIGFuIGVudW0gdGxzX21vZGVsLiAgKi8KKyNkZWZpbmUgU1lNQk9MX0ZMQUdfVExTX1NISUZUCTMKKyNkZWZpbmUgU1lNQk9MX1JFRl9UTFNfTU9ERUwoUlRYKSBcCisgICgoZW51bSB0bHNfbW9kZWwpICgoU1lNQk9MX1JFRl9GTEFHUyAoUlRYKSA+PiBTWU1CT0xfRkxBR19UTFNfU0hJRlQpICYgNykpCisvKiBTZXQgaWYgdGhpcyBzeW1ib2wgaXMgbm90IGRlZmluZWQgaW4gdGhpcyB0cmFuc2xhdGlvbiB1bml0LiAgKi8KKyNkZWZpbmUgU1lNQk9MX0ZMQUdfRVhURVJOQUwJKDEgPDwgNikKKyNkZWZpbmUgU1lNQk9MX1JFRl9FWFRFUk5BTF9QKFJUWCkgXAorICAoKFNZTUJPTF9SRUZfRkxBR1MgKFJUWCkgJiBTWU1CT0xfRkxBR19FWFRFUk5BTCkgIT0gMCkKKy8qIFNldCBpZiB0aGlzIHN5bWJvbCBoYXMgYSBibG9ja19zeW1ib2wgc3RydWN0dXJlIGFzc29jaWF0ZWQgd2l0aCBpdC4gICovCisjZGVmaW5lIFNZTUJPTF9GTEFHX0hBU19CTE9DS19JTkZPICgxIDw8IDcpCisjZGVmaW5lIFNZTUJPTF9SRUZfSEFTX0JMT0NLX0lORk9fUChSVFgpIFwKKyAgKChTWU1CT0xfUkVGX0ZMQUdTIChSVFgpICYgU1lNQk9MX0ZMQUdfSEFTX0JMT0NLX0lORk8pICE9IDApCisvKiBTZXQgaWYgdGhpcyBzeW1ib2wgaXMgYSBzZWN0aW9uIGFuY2hvci4gIFNZTUJPTF9SRUZfQU5DSE9SX1AgaW1wbGllcworICAgU1lNQk9MX1JFRl9IQVNfQkxPQ0tfSU5GT19QLiAgKi8KKyNkZWZpbmUgU1lNQk9MX0ZMQUdfQU5DSE9SCSgxIDw8IDgpCisjZGVmaW5lIFNZTUJPTF9SRUZfQU5DSE9SX1AoUlRYKSBcCisgICgoU1lNQk9MX1JFRl9GTEFHUyAoUlRYKSAmIFNZTUJPTF9GTEFHX0FOQ0hPUikgIT0gMCkKKworLyogU3Vic2VxdWVudCBiaXRzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSB0YXJnZXQgdG8gdXNlLiAgKi8KKyNkZWZpbmUgU1lNQk9MX0ZMQUdfTUFDSF9ERVBfU0hJRlQJOQorI2RlZmluZSBTWU1CT0xfRkxBR19NQUNIX0RFUAkJKDEgPDwgU1lNQk9MX0ZMQUdfTUFDSF9ERVBfU0hJRlQpCisKKy8qIElmIFNZTUJPTF9SRUZfSEFTX0JMT0NLX0lORk9fUCAoUlRYKSwgdGhpcyBpcyB0aGUgb2JqZWN0X2Jsb2NrCisgICBzdHJ1Y3R1cmUgdG8gd2hpY2ggdGhlIHN5bWJvbCBiZWxvbmdzLCBvciBOVUxMIGlmIGl0IGhhcyBub3QgYmVlbgorICAgYXNzaWduZWQgYSBibG9jay4gICovCisjZGVmaW5lIFNZTUJPTF9SRUZfQkxPQ0soUlRYKSAoQkxPQ0tfU1lNQk9MX0NIRUNLIChSVFgpLT5ibG9jaykKKworLyogSWYgU1lNQk9MX1JFRl9IQVNfQkxPQ0tfSU5GT19QIChSVFgpLCB0aGlzIGlzIHRoZSBvZmZzZXQgb2YgUlRYIGZyb20KKyAgIHRoZSBmaXJzdCBvYmplY3QgaW4gU1lNQk9MX1JFRl9CTE9DSyAoUlRYKS4gIFRoZSB2YWx1ZSBpcyBuZWdhdGl2ZSBpZgorICAgUlRYIGhhcyBub3QgeWV0IGJlZW4gYXNzaWduZWQgdG8gYSBibG9jaywgb3IgaXQgaGFzIG5vdCBiZWVuIGdpdmVuIGFuCisgICBvZmZzZXQgd2l0aGluIHRoYXQgYmxvY2suICAqLworI2RlZmluZSBTWU1CT0xfUkVGX0JMT0NLX09GRlNFVChSVFgpIChCTE9DS19TWU1CT0xfQ0hFQ0sgKFJUWCktPm9mZnNldCkKKworLyogVHJ1ZSBpZiBSVFggaXMgZmxhZ2dlZCB0byBiZSBhIHNjaGVkdWxpbmcgYmFycmllci4gICovCisjZGVmaW5lIFBSRUZFVENIX1NDSEVEVUxFX0JBUlJJRVJfUChSVFgpCQkJCQlcCisgIChSVExfRkxBR19DSEVDSzEoIlBSRUZFVENIX1NDSEVEVUxFX0JBUlJJRVJfUCIsIChSVFgpLCBQUkVGRVRDSCktPnZvbGF0aWwpCisKKy8qIEluZGljYXRlIHdoZXRoZXIgdGhlIG1hY2hpbmUgaGFzIGFueSBzb3J0IG9mIGF1dG8gaW5jcmVtZW50IGFkZHJlc3NpbmcuCisgICBJZiBub3QsIHdlIGNhbiBhdm9pZCBjaGVja2luZyBmb3IgUkVHX0lOQyBub3Rlcy4gICovCisKKyNpZiAoZGVmaW5lZCAoSEFWRV9QUkVfSU5DUkVNRU5UKSB8fCBkZWZpbmVkIChIQVZFX1BSRV9ERUNSRU1FTlQpIFwKKyAgICAgfHwgZGVmaW5lZCAoSEFWRV9QT1NUX0lOQ1JFTUVOVCkgfHwgZGVmaW5lZCAoSEFWRV9QT1NUX0RFQ1JFTUVOVCkgXAorICAgICB8fCBkZWZpbmVkIChIQVZFX1BSRV9NT0RJRllfRElTUCkgfHwgZGVmaW5lZCAoSEFWRV9QUkVfTU9ESUZZX0RJU1ApIFwKKyAgICAgfHwgZGVmaW5lZCAoSEFWRV9QUkVfTU9ESUZZX1JFRykgfHwgZGVmaW5lZCAoSEFWRV9QT1NUX01PRElGWV9SRUcpKQorI2RlZmluZSBBVVRPX0lOQ19ERUMKKyNlbmRpZgorCisvKiBEZWZpbmUgYSBtYWNybyB0byBsb29rIGZvciBSRUdfSU5DIG5vdGVzLAorICAgYnV0IHNhdmUgdGltZSBvbiBtYWNoaW5lcyB3aGVyZSB0aGV5IG5ldmVyIGV4aXN0LiAgKi8KKworI2lmZGVmIEFVVE9fSU5DX0RFQworI2RlZmluZSBGSU5EX1JFR19JTkNfTk9URShJTlNOLCBSRUcpCQkJXAorICAoKFJFRykgIT0gTlVMTF9SVFggJiYgUkVHX1AgKChSRUcpKQkJCVwKKyAgID8gZmluZF9yZWdub19ub3RlICgoSU5TTiksIFJFR19JTkMsIFJFR05PIChSRUcpKQlcCisgICA6IGZpbmRfcmVnX25vdGUgKChJTlNOKSwgUkVHX0lOQywgKFJFRykpKQorI2Vsc2UKKyNkZWZpbmUgRklORF9SRUdfSU5DX05PVEUoSU5TTiwgUkVHKSAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1BSRV9JTkNSRU1FTlQKKyNkZWZpbmUgSEFWRV9QUkVfSU5DUkVNRU5UIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfUFJFX0RFQ1JFTUVOVAorI2RlZmluZSBIQVZFX1BSRV9ERUNSRU1FTlQgMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9QT1NUX0lOQ1JFTUVOVAorI2RlZmluZSBIQVZFX1BPU1RfSU5DUkVNRU5UIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfUE9TVF9ERUNSRU1FTlQKKyNkZWZpbmUgSEFWRV9QT1NUX0RFQ1JFTUVOVCAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1BPU1RfTU9ESUZZX0RJU1AKKyNkZWZpbmUgSEFWRV9QT1NUX01PRElGWV9ESVNQIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfUE9TVF9NT0RJRllfUkVHCisjZGVmaW5lIEhBVkVfUE9TVF9NT0RJRllfUkVHIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfUFJFX01PRElGWV9ESVNQCisjZGVmaW5lIEhBVkVfUFJFX01PRElGWV9ESVNQIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfUFJFX01PRElGWV9SRUcKKyNkZWZpbmUgSEFWRV9QUkVfTU9ESUZZX1JFRyAwCisjZW5kaWYKKworCisvKiBTb21lIGFyY2hpdGVjdHVyZXMgZG8gbm90IGhhdmUgY29tcGxldGUgcHJlL3Bvc3QgaW5jcmVtZW50L2RlY3JlbWVudAorICAgaW5zdHJ1Y3Rpb24gc2V0cywgb3Igb25seSBtb3ZlIHNvbWUgbW9kZXMgZWZmaWNpZW50bHkuICBUaGVzZSBtYWNyb3MKKyAgIGFsbG93IHVzIHRvIHR1bmUgYXV0b2luY3JlbWVudCBnZW5lcmF0aW9uLiAgKi8KKworI2lmbmRlZiBVU0VfTE9BRF9QT1NUX0lOQ1JFTUVOVAorI2RlZmluZSBVU0VfTE9BRF9QT1NUX0lOQ1JFTUVOVChNT0RFKSAgIEhBVkVfUE9TVF9JTkNSRU1FTlQKKyNlbmRpZgorCisjaWZuZGVmIFVTRV9MT0FEX1BPU1RfREVDUkVNRU5UCisjZGVmaW5lIFVTRV9MT0FEX1BPU1RfREVDUkVNRU5UKE1PREUpICAgSEFWRV9QT1NUX0RFQ1JFTUVOVAorI2VuZGlmCisKKyNpZm5kZWYgVVNFX0xPQURfUFJFX0lOQ1JFTUVOVAorI2RlZmluZSBVU0VfTE9BRF9QUkVfSU5DUkVNRU5UKE1PREUpICAgIEhBVkVfUFJFX0lOQ1JFTUVOVAorI2VuZGlmCisKKyNpZm5kZWYgVVNFX0xPQURfUFJFX0RFQ1JFTUVOVAorI2RlZmluZSBVU0VfTE9BRF9QUkVfREVDUkVNRU5UKE1PREUpICAgIEhBVkVfUFJFX0RFQ1JFTUVOVAorI2VuZGlmCisKKyNpZm5kZWYgVVNFX1NUT1JFX1BPU1RfSU5DUkVNRU5UCisjZGVmaW5lIFVTRV9TVE9SRV9QT1NUX0lOQ1JFTUVOVChNT0RFKSAgSEFWRV9QT1NUX0lOQ1JFTUVOVAorI2VuZGlmCisKKyNpZm5kZWYgVVNFX1NUT1JFX1BPU1RfREVDUkVNRU5UCisjZGVmaW5lIFVTRV9TVE9SRV9QT1NUX0RFQ1JFTUVOVChNT0RFKSAgSEFWRV9QT1NUX0RFQ1JFTUVOVAorI2VuZGlmCisKKyNpZm5kZWYgVVNFX1NUT1JFX1BSRV9JTkNSRU1FTlQKKyNkZWZpbmUgVVNFX1NUT1JFX1BSRV9JTkNSRU1FTlQoTU9ERSkgICBIQVZFX1BSRV9JTkNSRU1FTlQKKyNlbmRpZgorCisjaWZuZGVmIFVTRV9TVE9SRV9QUkVfREVDUkVNRU5UCisjZGVmaW5lIFVTRV9TVE9SRV9QUkVfREVDUkVNRU5UKE1PREUpICAgSEFWRV9QUkVfREVDUkVNRU5UCisjZW5kaWYKKwwKKy8qIE5vbnplcm8gd2hlbiB3ZSBhcmUgZ2VuZXJhdGluZyBDT05DQVRzLiAgKi8KK2V4dGVybiBpbnQgZ2VuZXJhdGluZ19jb25jYXRfcDsKKworLyogTm9uemVybyB3aGVuIHdlIGFyZSBleHBhbmRpbmcgdHJlZXMgdG8gUlRMLiAgKi8KK2V4dGVybiBpbnQgY3VycmVudGx5X2V4cGFuZGluZ190b19ydGw7CisKKy8qIEdlbmVyYWxseSB1c2VmdWwgZnVuY3Rpb25zLiAgKi8KKworLyogSW4gZXhwbWVkLmMgKi8KK2V4dGVybiBpbnQgY2VpbF9sb2cyICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKTsKKworLyogSW4gZXhwbG93LmMgKi8KK2V4dGVybiB2b2lkIHNldF9zdGFja19jaGVja19saWJmdW5jIChydHgpOworZXh0ZXJuIEhPU1RfV0lERV9JTlQgdHJ1bmNfaW50X2Zvcl9tb2RlCShIT1NUX1dJREVfSU5ULCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gcnR4IHBsdXNfY29uc3RhbnQgKHJ0eCwgSE9TVF9XSURFX0lOVCk7CisKKy8qIEluIGVtaXQtcnRsLmMgKi8KK2V4dGVybiBydHggZ2VuX2Jsb2NrYWdlICh2b2lkKTsKK2V4dGVybiBydHZlYyBnZW5fcnR2ZWMgKGludCwgLi4uKTsKK2V4dGVybiBydHggY29weV9pbnNuXzEgKHJ0eCk7CitleHRlcm4gcnR4IGNvcHlfaW5zbiAocnR4KTsKK2V4dGVybiBydHggZ2VuX2ludF9tb2RlIChIT1NUX1dJREVfSU5ULCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gcnR4IGVtaXRfY29weV9vZl9pbnNuX2FmdGVyIChydHgsIHJ0eCk7CitleHRlcm4gdm9pZCBzZXRfcmVnX2F0dHJzX2Zyb21fdmFsdWUgKHJ0eCwgcnR4KTsKK2V4dGVybiB2b2lkIHNldF9yZWdfYXR0cnNfZm9yX3Bhcm0gKHJ0eCwgcnR4KTsKK2V4dGVybiB2b2lkIHNldF9yZWdfYXR0cnNfZm9yX2RlY2xfcnRsICh0cmVlIHQsIHJ0eCB4KTsKK2V4dGVybiB2b2lkIGFkanVzdF9yZWdfbW9kZSAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IG1lbV9leHByX2VxdWFsX3AgKGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUpOworCisvKiBJbiBydGwuYyAqLworZXh0ZXJuIHJ0eCBydHhfYWxsb2Nfc3RhdCAoUlRYX0NPREUgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIHJ0eF9hbGxvYyhjKSBydHhfYWxsb2Nfc3RhdCAoYyBNRU1fU1RBVF9JTkZPKQorCitleHRlcm4gcnR2ZWMgcnR2ZWNfYWxsb2MgKGludCk7CitleHRlcm4gcnR2ZWMgc2hhbGxvd19jb3B5X3J0dmVjIChydHZlYyk7CitleHRlcm4gYm9vbCBzaGFyZWRfY29uc3RfcCAoY29uc3RfcnR4KTsKK2V4dGVybiBydHggY29weV9ydHggKHJ0eCk7CitleHRlcm4gdm9pZCBkdW1wX3J0eF9zdGF0aXN0aWNzICh2b2lkKTsKKworLyogSW4gZW1pdC1ydGwuYyAqLworZXh0ZXJuIHJ0eCBjb3B5X3J0eF9pZl9zaGFyZWQgKHJ0eCk7CisKKy8qIEluIHJ0bC5jICovCitleHRlcm4gdW5zaWduZWQgaW50IHJ0eF9zaXplIChjb25zdF9ydHgpOworZXh0ZXJuIHJ0eCBzaGFsbG93X2NvcHlfcnR4X3N0YXQgKGNvbnN0X3J0eCBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgc2hhbGxvd19jb3B5X3J0eChhKSBzaGFsbG93X2NvcHlfcnR4X3N0YXQgKGEgTUVNX1NUQVRfSU5GTykKK2V4dGVybiBpbnQgcnR4X2VxdWFsX3AgKGNvbnN0X3J0eCwgY29uc3RfcnR4KTsKKworLyogSW4gZW1pdC1ydGwuYyAqLworZXh0ZXJuIHJ0dmVjIGdlbl9ydHZlY192IChpbnQsIHJ0eCAqKTsKK2V4dGVybiBydHggZ2VuX3JlZ19ydHggKGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBydHggZ2VuX3J0eF9SRUdfb2Zmc2V0IChydHgsIGVudW0gbWFjaGluZV9tb2RlLCB1bnNpZ25lZCBpbnQsIGludCk7CitleHRlcm4gcnR4IGdlbl9yZWdfcnR4X29mZnNldCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgaW50KTsKK2V4dGVybiBydHggZ2VuX3JlZ19ydHhfYW5kX2F0dHJzIChydHgpOworZXh0ZXJuIHJ0eCBnZW5fbGFiZWxfcnR4ICh2b2lkKTsKK2V4dGVybiBydHggZ2VuX2xvd3BhcnRfY29tbW9uIChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4KTsKKworLyogSW4gY3NlLmMgKi8KK2V4dGVybiBydHggZ2VuX2xvd3BhcnRfaWZfcG9zc2libGUgKGVudW0gbWFjaGluZV9tb2RlLCBydHgpOworCisvKiBJbiBlbWl0LXJ0bC5jICovCitleHRlcm4gcnR4IGdlbl9oaWdocGFydCAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCk7CitleHRlcm4gcnR4IGdlbl9oaWdocGFydF9tb2RlIChlbnVtIG1hY2hpbmVfbW9kZSwgZW51bSBtYWNoaW5lX21vZGUsIHJ0eCk7CitleHRlcm4gcnR4IG9wZXJhbmRfc3Vid29yZCAocnR4LCB1bnNpZ25lZCBpbnQsIGludCwgZW51bSBtYWNoaW5lX21vZGUpOworCisvKiBJbiBlbWl0LXJ0bC5jICovCitleHRlcm4gcnR4IG9wZXJhbmRfc3Vid29yZF9mb3JjZSAocnR4LCB1bnNpZ25lZCBpbnQsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgc3VicmVnX2xvd3BhcnRfcCAoY29uc3RfcnR4KTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc3VicmVnX2xvd3BhcnRfb2Zmc2V0IChlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCQkJICAgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIHVuc2lnbmVkIGludCBzdWJyZWdfaGlnaHBhcnRfb2Zmc2V0IChlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCQkJICAgIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgYnl0ZV9sb3dwYXJ0X29mZnNldCAoZW51bSBtYWNoaW5lX21vZGUsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBydHggbWFrZV9zYWZlX2Zyb20gKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggY29udmVydF9tZW1vcnlfYWRkcmVzc19hZGRyX3NwYWNlIChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4LAorCQkJCQkgICAgICBhZGRyX3NwYWNlX3QpOworI2RlZmluZSBjb252ZXJ0X21lbW9yeV9hZGRyZXNzKHRvX21vZGUseCkgXAorCWNvbnZlcnRfbWVtb3J5X2FkZHJlc3NfYWRkcl9zcGFjZSAoKHRvX21vZGUpLCAoeCksIEFERFJfU1BBQ0VfR0VORVJJQykKK2V4dGVybiBydHggZ2V0X2luc25zICh2b2lkKTsKK2V4dGVybiBjb25zdCBjaGFyICpnZXRfaW5zbl9uYW1lIChpbnQpOworZXh0ZXJuIHJ0eCBnZXRfbGFzdF9pbnNuICh2b2lkKTsKK2V4dGVybiBydHggZ2V0X2xhc3RfaW5zbl9hbnl3aGVyZSAodm9pZCk7CitleHRlcm4gcnR4IGdldF9maXJzdF9ub25ub3RlX2luc24gKHZvaWQpOworZXh0ZXJuIHJ0eCBnZXRfbGFzdF9ub25ub3RlX2luc24gKHZvaWQpOworZXh0ZXJuIHZvaWQgc3RhcnRfc2VxdWVuY2UgKHZvaWQpOworZXh0ZXJuIHZvaWQgcHVzaF90b19zZXF1ZW5jZSAocnR4KTsKK2V4dGVybiB2b2lkIHB1c2hfdG9fc2VxdWVuY2UyIChydHgsIHJ0eCk7CitleHRlcm4gdm9pZCBlbmRfc2VxdWVuY2UgKHZvaWQpOworZXh0ZXJuIHJ0eCBpbW1lZF9kb3VibGVfY29uc3QgKEhPU1RfV0lERV9JTlQsIEhPU1RfV0lERV9JTlQsCisJCQkgICAgICAgZW51bSBtYWNoaW5lX21vZGUpOworCisvKiBJbiBsb29wLWl2LmMgICovCisKK2V4dGVybiBydHggbG93cGFydF9zdWJyZWcgKGVudW0gbWFjaGluZV9tb2RlLCBydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKKworLyogSW4gdmFyYXNtLmMgICovCitleHRlcm4gcnR4IGZvcmNlX2NvbnN0X21lbSAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCk7CisKKy8qIEluIHZhcmFzbS5jICAqLworCitzdHJ1Y3QgZnVuY3Rpb247CitleHRlcm4gcnR4IGdldF9wb29sX2NvbnN0YW50IChydHgpOworZXh0ZXJuIHJ0eCBnZXRfcG9vbF9jb25zdGFudF9tYXJrIChydHgsIGJvb2wgKik7CitleHRlcm4gZW51bSBtYWNoaW5lX21vZGUgZ2V0X3Bvb2xfbW9kZSAoY29uc3RfcnR4KTsKK2V4dGVybiBydHggc2ltcGxpZnlfc3VidHJhY3Rpb24gKHJ0eCk7CisKKy8qIEluIGZ1bmN0aW9uLmMgICovCitleHRlcm4gcnR4IGFzc2lnbl9zdGFja19sb2NhbCAoZW51bSBtYWNoaW5lX21vZGUsIEhPU1RfV0lERV9JTlQsIGludCk7CitleHRlcm4gcnR4IGFzc2lnbl9zdGFja19sb2NhbF8xIChlbnVtIG1hY2hpbmVfbW9kZSwgSE9TVF9XSURFX0lOVCwgaW50LCBib29sKTsKK2V4dGVybiBydHggYXNzaWduX3N0YWNrX3RlbXAgKGVudW0gbWFjaGluZV9tb2RlLCBIT1NUX1dJREVfSU5ULCBpbnQpOworZXh0ZXJuIHJ0eCBhc3NpZ25fc3RhY2tfdGVtcF9mb3JfdHlwZSAoZW51bSBtYWNoaW5lX21vZGUsCisJCQkJICAgICAgIEhPU1RfV0lERV9JTlQsIGludCwgdHJlZSk7CitleHRlcm4gcnR4IGFzc2lnbl90ZW1wICh0cmVlLCBpbnQsIGludCwgaW50KTsKKworLyogSW4gZW1pdC1ydGwuYyAqLworZXh0ZXJuIHJ0eCBlbWl0X2luc25fYmVmb3JlIChydHgsIHJ0eCk7CitleHRlcm4gcnR4IGVtaXRfaW5zbl9iZWZvcmVfbm9sb2MgKHJ0eCwgcnR4LCBzdHJ1Y3QgYmFzaWNfYmxvY2tfZGVmICopOworZXh0ZXJuIHJ0eCBlbWl0X2luc25fYmVmb3JlX3NldGxvYyAocnR4LCBydHgsIGludCk7CitleHRlcm4gcnR4IGVtaXRfanVtcF9pbnNuX2JlZm9yZSAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCBlbWl0X2p1bXBfaW5zbl9iZWZvcmVfbm9sb2MgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggZW1pdF9qdW1wX2luc25fYmVmb3JlX3NldGxvYyAocnR4LCBydHgsIGludCk7CitleHRlcm4gcnR4IGVtaXRfY2FsbF9pbnNuX2JlZm9yZSAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCBlbWl0X2NhbGxfaW5zbl9iZWZvcmVfbm9sb2MgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggZW1pdF9jYWxsX2luc25fYmVmb3JlX3NldGxvYyAocnR4LCBydHgsIGludCk7CitleHRlcm4gcnR4IGVtaXRfZGVidWdfaW5zbl9iZWZvcmUgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggZW1pdF9kZWJ1Z19pbnNuX2JlZm9yZV9ub2xvYyAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCBlbWl0X2RlYnVnX2luc25fYmVmb3JlX3NldGxvYyAocnR4LCBydHgsIGludCk7CitleHRlcm4gcnR4IGVtaXRfYmFycmllcl9iZWZvcmUgKHJ0eCk7CitleHRlcm4gcnR4IGVtaXRfbGFiZWxfYmVmb3JlIChydHgsIHJ0eCk7CitleHRlcm4gcnR4IGVtaXRfbm90ZV9iZWZvcmUgKGVudW0gaW5zbl9ub3RlLCBydHgpOworZXh0ZXJuIHJ0eCBlbWl0X2luc25fYWZ0ZXIgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggZW1pdF9pbnNuX2FmdGVyX25vbG9jIChydHgsIHJ0eCwgc3RydWN0IGJhc2ljX2Jsb2NrX2RlZiAqKTsKK2V4dGVybiBydHggZW1pdF9pbnNuX2FmdGVyX3NldGxvYyAocnR4LCBydHgsIGludCk7CitleHRlcm4gcnR4IGVtaXRfanVtcF9pbnNuX2FmdGVyIChydHgsIHJ0eCk7CitleHRlcm4gcnR4IGVtaXRfanVtcF9pbnNuX2FmdGVyX25vbG9jIChydHgsIHJ0eCk7CitleHRlcm4gcnR4IGVtaXRfanVtcF9pbnNuX2FmdGVyX3NldGxvYyAocnR4LCBydHgsIGludCk7CitleHRlcm4gcnR4IGVtaXRfY2FsbF9pbnNuX2FmdGVyIChydHgsIHJ0eCk7CitleHRlcm4gcnR4IGVtaXRfY2FsbF9pbnNuX2FmdGVyX25vbG9jIChydHgsIHJ0eCk7CitleHRlcm4gcnR4IGVtaXRfY2FsbF9pbnNuX2FmdGVyX3NldGxvYyAocnR4LCBydHgsIGludCk7CitleHRlcm4gcnR4IGVtaXRfZGVidWdfaW5zbl9hZnRlciAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCBlbWl0X2RlYnVnX2luc25fYWZ0ZXJfbm9sb2MgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggZW1pdF9kZWJ1Z19pbnNuX2FmdGVyX3NldGxvYyAocnR4LCBydHgsIGludCk7CitleHRlcm4gcnR4IGVtaXRfYmFycmllcl9hZnRlciAocnR4KTsKK2V4dGVybiBydHggZW1pdF9sYWJlbF9hZnRlciAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCBlbWl0X25vdGVfYWZ0ZXIgKGVudW0gaW5zbl9ub3RlLCBydHgpOworZXh0ZXJuIHJ0eCBlbWl0X2luc24gKHJ0eCk7CitleHRlcm4gcnR4IGVtaXRfZGVidWdfaW5zbiAocnR4KTsKK2V4dGVybiBydHggZW1pdF9qdW1wX2luc24gKHJ0eCk7CitleHRlcm4gcnR4IGVtaXRfY2FsbF9pbnNuIChydHgpOworZXh0ZXJuIHJ0eCBlbWl0X2xhYmVsIChydHgpOworZXh0ZXJuIHJ0eCBlbWl0X2JhcnJpZXIgKHZvaWQpOworZXh0ZXJuIHJ0eCBlbWl0X25vdGUgKGVudW0gaW5zbl9ub3RlKTsKK2V4dGVybiBydHggZW1pdF9ub3RlX2NvcHkgKHJ0eCk7CitleHRlcm4gcnR4IGdlbl9jbG9iYmVyIChydHgpOworZXh0ZXJuIHJ0eCBlbWl0X2Nsb2JiZXIgKHJ0eCk7CitleHRlcm4gcnR4IGdlbl91c2UgKHJ0eCk7CitleHRlcm4gcnR4IGVtaXRfdXNlIChydHgpOworZXh0ZXJuIHJ0eCBtYWtlX2luc25fcmF3IChydHgpOworZXh0ZXJuIHJ0eCBtYWtlX2RlYnVnX2luc25fcmF3IChydHgpOworZXh0ZXJuIHJ0eCBtYWtlX2p1bXBfaW5zbl9yYXcgKHJ0eCk7CitleHRlcm4gdm9pZCBhZGRfZnVuY3Rpb25fdXNhZ2VfdG8gKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggbGFzdF9jYWxsX2luc24gKHZvaWQpOworZXh0ZXJuIHJ0eCBwcmV2aW91c19pbnNuIChydHgpOworZXh0ZXJuIHJ0eCBuZXh0X2luc24gKHJ0eCk7CitleHRlcm4gcnR4IHByZXZfbm9ubm90ZV9pbnNuIChydHgpOworZXh0ZXJuIHJ0eCBwcmV2X25vbm5vdGVfaW5zbl9iYiAocnR4KTsKK2V4dGVybiBydHggbmV4dF9ub25ub3RlX2luc24gKHJ0eCk7CitleHRlcm4gcnR4IG5leHRfbm9ubm90ZV9pbnNuX2JiIChydHgpOworZXh0ZXJuIHJ0eCBwcmV2X25vbmRlYnVnX2luc24gKHJ0eCk7CitleHRlcm4gcnR4IG5leHRfbm9uZGVidWdfaW5zbiAocnR4KTsKK2V4dGVybiBydHggcHJldl9ub25ub3RlX25vbmRlYnVnX2luc24gKHJ0eCk7CitleHRlcm4gcnR4IG5leHRfbm9ubm90ZV9ub25kZWJ1Z19pbnNuIChydHgpOworZXh0ZXJuIHJ0eCBwcmV2X3JlYWxfaW5zbiAocnR4KTsKK2V4dGVybiBydHggbmV4dF9yZWFsX2luc24gKHJ0eCk7CitleHRlcm4gcnR4IHByZXZfYWN0aXZlX2luc24gKHJ0eCk7CitleHRlcm4gcnR4IG5leHRfYWN0aXZlX2luc24gKHJ0eCk7CitleHRlcm4gaW50IGFjdGl2ZV9pbnNuX3AgKGNvbnN0X3J0eCk7CitleHRlcm4gcnR4IHByZXZfbGFiZWwgKHJ0eCk7CitleHRlcm4gcnR4IG5leHRfbGFiZWwgKHJ0eCk7CitleHRlcm4gcnR4IHNraXBfY29uc2VjdXRpdmVfbGFiZWxzIChydHgpOworZXh0ZXJuIHJ0eCBuZXh0X2NjMF91c2VyIChydHgpOworZXh0ZXJuIHJ0eCBwcmV2X2NjMF9zZXR0ZXIgKHJ0eCk7CisKKy8qIEluIGNmZ2xheW91dC5jICAqLworZXh0ZXJuIGludCBpbnNuX2xpbmUgKGNvbnN0X3J0eCk7CitleHRlcm4gY29uc3QgY2hhciAqIGluc25fZmlsZSAoY29uc3RfcnR4KTsKK2V4dGVybiBsb2NhdGlvbl90IGxvY2F0b3JfbG9jYXRpb24gKGludCk7CitleHRlcm4gaW50IGxvY2F0b3JfbGluZSAoaW50KTsKK2V4dGVybiBjb25zdCBjaGFyICogbG9jYXRvcl9maWxlIChpbnQpOworZXh0ZXJuIGJvb2wgbG9jYXRvcl9lcSAoaW50LCBpbnQpOworZXh0ZXJuIGludCBwcm9sb2d1ZV9sb2NhdG9yLCBlcGlsb2d1ZV9sb2NhdG9yOworCisvKiBJbiBqdW1wLmMgKi8KK2V4dGVybiBlbnVtIHJ0eF9jb2RlIHJldmVyc2VfY29uZGl0aW9uIChlbnVtIHJ0eF9jb2RlKTsKK2V4dGVybiBlbnVtIHJ0eF9jb2RlIHJldmVyc2VfY29uZGl0aW9uX21heWJlX3Vub3JkZXJlZCAoZW51bSBydHhfY29kZSk7CitleHRlcm4gZW51bSBydHhfY29kZSBzd2FwX2NvbmRpdGlvbiAoZW51bSBydHhfY29kZSk7CitleHRlcm4gZW51bSBydHhfY29kZSB1bnNpZ25lZF9jb25kaXRpb24gKGVudW0gcnR4X2NvZGUpOworZXh0ZXJuIGVudW0gcnR4X2NvZGUgc2lnbmVkX2NvbmRpdGlvbiAoZW51bSBydHhfY29kZSk7CitleHRlcm4gdm9pZCBtYXJrX2p1bXBfbGFiZWwgKHJ0eCwgcnR4LCBpbnQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBjbGVhbnVwX2JhcnJpZXJzICh2b2lkKTsKKworLyogSW4ganVtcC5jICovCitleHRlcm4gcnR4IGRlbGV0ZV9yZWxhdGVkX2luc25zIChydHgpOworCisvKiBJbiByZWNvZy5jICAqLworZXh0ZXJuIHJ0eCAqZmluZF9jb25zdGFudF90ZXJtX2xvYyAocnR4ICopOworCisvKiBJbiBlbWl0LXJ0bC5jICAqLworZXh0ZXJuIHJ0eCB0cnlfc3BsaXQgKHJ0eCwgcnR4LCBpbnQpOworZXh0ZXJuIGludCBzcGxpdF9icmFuY2hfcHJvYmFiaWxpdHk7CisKKy8qIEluIHVua25vd24gZmlsZSAgKi8KK2V4dGVybiBydHggc3BsaXRfaW5zbnMgKHJ0eCwgcnR4KTsKKworLyogSW4gc2ltcGxpZnktcnR4LmMgICovCitleHRlcm4gcnR4IHNpbXBsaWZ5X2NvbnN0X3VuYXJ5X29wZXJhdGlvbiAoZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUsCisJCQkJCSAgIHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIHJ0eCBzaW1wbGlmeV91bmFyeV9vcGVyYXRpb24gKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlLCBydHgsCisJCQkJICAgICBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gcnR4IHNpbXBsaWZ5X2NvbnN0X2JpbmFyeV9vcGVyYXRpb24gKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlLAorCQkJCQkgICAgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCBzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSwgcnR4LAorCQkJCSAgICAgIHJ0eCk7CitleHRlcm4gcnR4IHNpbXBsaWZ5X3Rlcm5hcnlfb3BlcmF0aW9uIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCQkgICAgICAgZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCBzaW1wbGlmeV9jb25zdF9yZWxhdGlvbmFsX29wZXJhdGlvbiAoZW51bSBydHhfY29kZSwKKwkJCQkJCWVudW0gbWFjaGluZV9tb2RlLCBydHgsIHJ0eCk7CitleHRlcm4gcnR4IHNpbXBsaWZ5X3JlbGF0aW9uYWxfb3BlcmF0aW9uIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCQkJICBlbnVtIG1hY2hpbmVfbW9kZSwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCBzaW1wbGlmeV9nZW5fYmluYXJ5IChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCBzaW1wbGlmeV9nZW5fdW5hcnkgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlLCBydHgsCisJCQkgICAgICAgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIHJ0eCBzaW1wbGlmeV9nZW5fdGVybmFyeSAoZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUsCisJCQkJIGVudW0gbWFjaGluZV9tb2RlLCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggc2ltcGxpZnlfZ2VuX3JlbGF0aW9uYWwgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlLAorCQkJCSAgICBlbnVtIG1hY2hpbmVfbW9kZSwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCBzaW1wbGlmeV9zdWJyZWcgKGVudW0gbWFjaGluZV9tb2RlLCBydHgsIGVudW0gbWFjaGluZV9tb2RlLAorCQkJICAgIHVuc2lnbmVkIGludCk7CitleHRlcm4gcnR4IHNpbXBsaWZ5X2dlbl9zdWJyZWcgKGVudW0gbWFjaGluZV9tb2RlLCBydHgsIGVudW0gbWFjaGluZV9tb2RlLAorCQkJCXVuc2lnbmVkIGludCk7CitleHRlcm4gcnR4IHNpbXBsaWZ5X3JlcGxhY2VfZm5fcnR4IChydHgsIGNvbnN0X3J0eCwKKwkJCQkgICAgcnR4ICgqZm4pIChydHgsIGNvbnN0X3J0eCwgdm9pZCAqKSwgdm9pZCAqKTsKK2V4dGVybiBydHggc2ltcGxpZnlfcmVwbGFjZV9ydHggKHJ0eCwgY29uc3RfcnR4LCBydHgpOworZXh0ZXJuIHJ0eCBzaW1wbGlmeV9ydHggKGNvbnN0X3J0eCk7CitleHRlcm4gcnR4IGF2b2lkX2NvbnN0YW50X3Bvb2xfcmVmZXJlbmNlIChydHgpOworZXh0ZXJuIHJ0eCBkZWxlZ2l0aW1pemVfbWVtX2Zyb21fYXR0cnMgKHJ0eCk7CitleHRlcm4gYm9vbCBtb2RlX3NpZ25iaXRfcCAoZW51bSBtYWNoaW5lX21vZGUsIGNvbnN0X3J0eCk7CisKKy8qIEluIHJlZ2luZm8uYyAgKi8KK2V4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSBjaG9vc2VfaGFyZF9yZWdfbW9kZSAodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsCisJCQkJCSAgICAgICBib29sKTsKKworLyogSW4gZW1pdC1ydGwuYyAgKi8KK2V4dGVybiBydHggc2V0X3VuaXF1ZV9yZWdfbm90ZSAocnR4LCBlbnVtIHJlZ19ub3RlLCBydHgpOworZXh0ZXJuIHZvaWQgc2V0X2luc25fZGVsZXRlZCAocnR4KTsKKworLyogRnVuY3Rpb25zIGluIHJ0bGFuYWwuYyAqLworCisvKiBTaW5nbGUgc2V0IGlzIGltcGxlbWVudGVkIGFzIG1hY3JvIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiAgKi8KKyNkZWZpbmUgc2luZ2xlX3NldChJKSAoSU5TTl9QIChJKSBcCisJCSAgICAgICA/IChHRVRfQ09ERSAoUEFUVEVSTiAoSSkpID09IFNFVCBcCisJCQkgID8gUEFUVEVSTiAoSSkgOiBzaW5nbGVfc2V0XzEgKEkpKSBcCisJCSAgICAgICA6IE5VTExfUlRYKQorI2RlZmluZSBzaW5nbGVfc2V0XzEoSSkgc2luZ2xlX3NldF8yIChJLCBQQVRURVJOIChJKSkKKworLyogU3RydWN0dXJlIHVzZWQgZm9yIHBhc3NpbmcgZGF0YSB0byBSRVBMQUNFX0xBQkVMLiAgKi8KK3R5cGVkZWYgc3RydWN0IHJlcGxhY2VfbGFiZWxfZGF0YQoreworICBydHggcjE7CisgIHJ0eCByMjsKKyAgYm9vbCB1cGRhdGVfbGFiZWxfbnVzZXM7Cit9IHJlcGxhY2VfbGFiZWxfZGF0YTsKKworZXh0ZXJuIGludCBydHhfYWRkcl9jYW5fdHJhcF9wIChjb25zdF9ydHgpOworZXh0ZXJuIGJvb2wgbm9uemVyb19hZGRyZXNzX3AgKGNvbnN0X3J0eCk7CitleHRlcm4gaW50IHJ0eF91bnN0YWJsZV9wIChjb25zdF9ydHgpOworZXh0ZXJuIGJvb2wgcnR4X3Zhcmllc19wIChjb25zdF9ydHgsIGJvb2wpOworZXh0ZXJuIGJvb2wgcnR4X2FkZHJfdmFyaWVzX3AgKGNvbnN0X3J0eCwgYm9vbCk7CitleHRlcm4gSE9TVF9XSURFX0lOVCBnZXRfaW50ZWdlcl90ZXJtIChjb25zdF9ydHgpOworZXh0ZXJuIHJ0eCBnZXRfcmVsYXRlZF92YWx1ZSAoY29uc3RfcnR4KTsKK2V4dGVybiBib29sIG9mZnNldF93aXRoaW5fYmxvY2tfcCAoY29uc3RfcnR4LCBIT1NUX1dJREVfSU5UKTsKK2V4dGVybiB2b2lkIHNwbGl0X2NvbnN0IChydHgsIHJ0eCAqLCBydHggKik7CitleHRlcm4gaW50IHJlZ19tZW50aW9uZWRfcCAoY29uc3RfcnR4LCBjb25zdF9ydHgpOworZXh0ZXJuIGludCBjb3VudF9vY2N1cnJlbmNlcyAoY29uc3RfcnR4LCBjb25zdF9ydHgsIGludCk7CitleHRlcm4gaW50IHJlZ19yZWZlcmVuY2VkX3AgKGNvbnN0X3J0eCwgY29uc3RfcnR4KTsKK2V4dGVybiBpbnQgcmVnX3VzZWRfYmV0d2Vlbl9wIChjb25zdF9ydHgsIGNvbnN0X3J0eCwgY29uc3RfcnR4KTsKK2V4dGVybiBpbnQgcmVnX3NldF9iZXR3ZWVuX3AgKGNvbnN0X3J0eCwgY29uc3RfcnR4LCBjb25zdF9ydHgpOworZXh0ZXJuIGludCBjb21tdXRhdGl2ZV9vcGVyYW5kX3ByZWNlZGVuY2UgKHJ0eCk7CitleHRlcm4gYm9vbCBzd2FwX2NvbW11dGF0aXZlX29wZXJhbmRzX3AgKHJ0eCwgcnR4KTsKK2V4dGVybiBpbnQgbW9kaWZpZWRfYmV0d2Vlbl9wIChjb25zdF9ydHgsIGNvbnN0X3J0eCwgY29uc3RfcnR4KTsKK2V4dGVybiBpbnQgbm9fbGFiZWxzX2JldHdlZW5fcCAoY29uc3RfcnR4LCBjb25zdF9ydHgpOworZXh0ZXJuIGludCBtb2RpZmllZF9pbl9wIChjb25zdF9ydHgsIGNvbnN0X3J0eCk7CitleHRlcm4gaW50IHJlZ19zZXRfcCAoY29uc3RfcnR4LCBjb25zdF9ydHgpOworZXh0ZXJuIHJ0eCBzaW5nbGVfc2V0XzIgKGNvbnN0X3J0eCwgY29uc3RfcnR4KTsKK2V4dGVybiBpbnQgbXVsdGlwbGVfc2V0cyAoY29uc3RfcnR4KTsKK2V4dGVybiBpbnQgc2V0X25vb3BfcCAoY29uc3RfcnR4KTsKK2V4dGVybiBpbnQgbm9vcF9tb3ZlX3AgKGNvbnN0X3J0eCk7CitleHRlcm4gcnR4IGZpbmRfbGFzdF92YWx1ZSAocnR4LCBydHggKiwgcnR4LCBpbnQpOworZXh0ZXJuIGludCByZWZlcnNfdG9fcmVnbm9fcCAodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIGNvbnN0X3J0eCwgcnR4ICopOworZXh0ZXJuIGludCByZWdfb3ZlcmxhcF9tZW50aW9uZWRfcCAoY29uc3RfcnR4LCBjb25zdF9ydHgpOworZXh0ZXJuIGNvbnN0X3J0eCBzZXRfb2YgKGNvbnN0X3J0eCwgY29uc3RfcnR4KTsKK2V4dGVybiB2b2lkIG5vdGVfc3RvcmVzIChjb25zdF9ydHgsIHZvaWQgKCopIChydHgsIGNvbnN0X3J0eCwgdm9pZCAqKSwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIG5vdGVfdXNlcyAocnR4ICosIHZvaWQgKCopIChydHggKiwgdm9pZCAqKSwgdm9pZCAqKTsKK2V4dGVybiBpbnQgZGVhZF9vcl9zZXRfcCAoY29uc3RfcnR4LCBjb25zdF9ydHgpOworZXh0ZXJuIGludCBkZWFkX29yX3NldF9yZWdub19wIChjb25zdF9ydHgsIHVuc2lnbmVkIGludCk7CitleHRlcm4gcnR4IGZpbmRfcmVnX25vdGUgKGNvbnN0X3J0eCwgZW51bSByZWdfbm90ZSwgY29uc3RfcnR4KTsKK2V4dGVybiBydHggZmluZF9yZWdub19ub3RlIChjb25zdF9ydHgsIGVudW0gcmVnX25vdGUsIHVuc2lnbmVkIGludCk7CitleHRlcm4gcnR4IGZpbmRfcmVnX2VxdWFsX2VxdWl2X25vdGUgKGNvbnN0X3J0eCk7CitleHRlcm4gcnR4IGZpbmRfY29uc3RhbnRfc3JjIChjb25zdF9ydHgpOworZXh0ZXJuIGludCBmaW5kX3JlZ19mdXNhZ2UgKGNvbnN0X3J0eCwgZW51bSBydHhfY29kZSwgY29uc3RfcnR4KTsKK2V4dGVybiBpbnQgZmluZF9yZWdub19mdXNhZ2UgKGNvbnN0X3J0eCwgZW51bSBydHhfY29kZSwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBydHggYWxsb2NfcmVnX25vdGUgKGVudW0gcmVnX25vdGUsIHJ0eCwgcnR4KTsKK2V4dGVybiB2b2lkIGFkZF9yZWdfbm90ZSAocnR4LCBlbnVtIHJlZ19ub3RlLCBydHgpOworZXh0ZXJuIHZvaWQgcmVtb3ZlX25vdGUgKHJ0eCwgY29uc3RfcnR4KTsKK2V4dGVybiB2b2lkIHJlbW92ZV9yZWdfZXF1YWxfZXF1aXZfbm90ZXMgKHJ0eCk7CitleHRlcm4gdm9pZCByZW1vdmVfcmVnX2VxdWFsX2VxdWl2X25vdGVzX2Zvcl9yZWdubyAodW5zaWduZWQgaW50KTsKK2V4dGVybiBpbnQgc2lkZV9lZmZlY3RzX3AgKGNvbnN0X3J0eCk7CitleHRlcm4gaW50IHZvbGF0aWxlX3JlZnNfcCAoY29uc3RfcnR4KTsKK2V4dGVybiBpbnQgdm9sYXRpbGVfaW5zbl9wIChjb25zdF9ydHgpOworZXh0ZXJuIGludCBtYXlfdHJhcF9wXzEgKGNvbnN0X3J0eCwgdW5zaWduZWQpOworZXh0ZXJuIGludCBtYXlfdHJhcF9wIChjb25zdF9ydHgpOworZXh0ZXJuIGludCBtYXlfdHJhcF9vcl9mYXVsdF9wIChjb25zdF9ydHgpOworZXh0ZXJuIGJvb2wgY2FuX3Rocm93X2ludGVybmFsIChjb25zdF9ydHgpOworZXh0ZXJuIGJvb2wgY2FuX3Rocm93X2V4dGVybmFsIChjb25zdF9ydHgpOworZXh0ZXJuIGJvb2wgaW5zbl9jb3VsZF90aHJvd19wIChjb25zdF9ydHgpOworZXh0ZXJuIGJvb2wgaW5zbl9ub3Rocm93X3AgKGNvbnN0X3J0eCk7CitleHRlcm4gYm9vbCBjYW5fbm9ubG9jYWxfZ290byAoY29uc3RfcnR4KTsKK2V4dGVybiB2b2lkIGNvcHlfcmVnX2VoX3JlZ2lvbl9ub3RlX2ZvcndhcmQgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHZvaWQgY29weV9yZWdfZWhfcmVnaW9uX25vdGVfYmFja3dhcmQocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gaW50IGluZXF1YWxpdHlfY29tcGFyaXNvbnNfcCAoY29uc3RfcnR4KTsKK2V4dGVybiBydHggcmVwbGFjZV9ydHggKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIGludCByZXBsYWNlX2xhYmVsIChydHggKiwgdm9pZCAqKTsKK2V4dGVybiBpbnQgcnR4X3JlZmVyZW5jZWRfcCAocnR4LCBydHgpOworZXh0ZXJuIGJvb2wgdGFibGVqdW1wX3AgKGNvbnN0X3J0eCwgcnR4ICosIHJ0eCAqKTsKK2V4dGVybiBpbnQgY29tcHV0ZWRfanVtcF9wIChjb25zdF9ydHgpOworCit0eXBlZGVmIGludCAoKnJ0eF9mdW5jdGlvbikgKHJ0eCAqLCB2b2lkICopOworZXh0ZXJuIGludCBmb3JfZWFjaF9ydHggKHJ0eCAqLCBydHhfZnVuY3Rpb24sIHZvaWQgKik7CisKK3R5cGVkZWYgaW50ICgqcnR4X2VxdWFsX3BfY2FsbGJhY2tfZnVuY3Rpb24pIChjb25zdF9ydHggKiwgY29uc3RfcnR4ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnR4ICosIHJ0eCAqKTsKK2V4dGVybiBpbnQgcnR4X2VxdWFsX3BfY2IgKGNvbnN0X3J0eCwgY29uc3RfcnR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcnR4X2VxdWFsX3BfY2FsbGJhY2tfZnVuY3Rpb24pOworCit0eXBlZGVmIGludCAoKmhhc2hfcnR4X2NhbGxiYWNrX2Z1bmN0aW9uKSAoY29uc3RfcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgcnR4ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBtYWNoaW5lX21vZGUgKik7CitleHRlcm4gdW5zaWduZWQgaGFzaF9ydHhfY2IgKGNvbnN0X3J0eCwgZW51bSBtYWNoaW5lX21vZGUsIGludCAqLCBpbnQgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCwgaGFzaF9ydHhfY2FsbGJhY2tfZnVuY3Rpb24pOworCitleHRlcm4gcnR4IHJlZ25vX3VzZV9pbiAodW5zaWduZWQgaW50LCBydHgpOworZXh0ZXJuIGludCBhdXRvX2luY19wIChjb25zdF9ydHgpOworZXh0ZXJuIGludCBpbl9leHByX2xpc3RfcCAoY29uc3RfcnR4LCBjb25zdF9ydHgpOworZXh0ZXJuIHZvaWQgcmVtb3ZlX25vZGVfZnJvbV9leHByX2xpc3QgKGNvbnN0X3J0eCwgcnR4ICopOworZXh0ZXJuIGludCBsb2NfbWVudGlvbmVkX2luX3AgKHJ0eCAqLCBjb25zdF9ydHgpOworZXh0ZXJuIHJ0eCBmaW5kX2ZpcnN0X3BhcmFtZXRlcl9sb2FkIChydHgsIHJ0eCk7CitleHRlcm4gYm9vbCBrZWVwX3dpdGhfY2FsbF9wIChjb25zdF9ydHgpOworZXh0ZXJuIGJvb2wgbGFiZWxfaXNfanVtcF90YXJnZXRfcCAoY29uc3RfcnR4LCBjb25zdF9ydHgpOworZXh0ZXJuIGludCBpbnNuX3J0eF9jb3N0IChydHgsIGJvb2wpOworCisvKiBHaXZlbiBhbiBpbnNuIGFuZCBjb25kaXRpb24sIHJldHVybiBhIGNhbm9uaWNhbCBkZXNjcmlwdGlvbiBvZgorICAgdGhlIHRlc3QgYmVpbmcgbWFkZS4gICovCitleHRlcm4gcnR4IGNhbm9uaWNhbGl6ZV9jb25kaXRpb24gKHJ0eCwgcnR4LCBpbnQsIHJ0eCAqLCBydHgsIGludCwgaW50KTsKKworLyogR2l2ZW4gYSBKVU1QX0lOU04sIHJldHVybiBhIGNhbm9uaWNhbCBkZXNjcmlwdGlvbiBvZiB0aGUgdGVzdAorICAgYmVpbmcgbWFkZS4gICovCitleHRlcm4gcnR4IGdldF9jb25kaXRpb24gKHJ0eCwgcnR4ICosIGludCwgaW50KTsKKworLyogSW5mb3JtYXRpb24gYWJvdXQgYSBzdWJyZWcgb2YgYSBoYXJkIHJlZ2lzdGVyLiAgKi8KK3N0cnVjdCBzdWJyZWdfaW5mbworeworICAvKiBPZmZzZXQgb2YgZmlyc3QgaGFyZCByZWdpc3RlciBpbnZvbHZlZCBpbiB0aGUgc3VicmVnLiAgKi8KKyAgaW50IG9mZnNldDsKKyAgLyogTnVtYmVyIG9mIGhhcmQgcmVnaXN0ZXJzIGludm9sdmVkIGluIHRoZSBzdWJyZWcuICAqLworICBpbnQgbnJlZ3M7CisgIC8qIFdoZXRoZXIgdGhpcyBzdWJyZWcgY2FuIGJlIHJlcHJlc2VudGVkIGFzIGEgaGFyZCByZWcgd2l0aCB0aGUgbmV3CisgICAgIG1vZGUuICAqLworICBib29sIHJlcHJlc2VudGFibGVfcDsKK307CisKK2V4dGVybiB2b2lkIHN1YnJlZ19nZXRfaW5mbyAodW5zaWduZWQgaW50LCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCSAgICAgdW5zaWduZWQgaW50LCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCSAgICAgc3RydWN0IHN1YnJlZ19pbmZvICopOworCisvKiBsaXN0cy5jICovCisKK2V4dGVybiB2b2lkIGZyZWVfRVhQUl9MSVNUX2xpc3QJCShydHggKik7CitleHRlcm4gdm9pZCBmcmVlX0lOU05fTElTVF9saXN0CQkocnR4ICopOworZXh0ZXJuIHZvaWQgZnJlZV9FWFBSX0xJU1Rfbm9kZQkJKHJ0eCk7CitleHRlcm4gdm9pZCBmcmVlX0lOU05fTElTVF9ub2RlCQkocnR4KTsKK2V4dGVybiBydHggYWxsb2NfSU5TTl9MSVNUCQkJKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggYWxsb2NfRVhQUl9MSVNUCQkJKGludCwgcnR4LCBydHgpOworZXh0ZXJuIHZvaWQgcmVtb3ZlX2ZyZWVfSU5TTl9MSVNUX2VsZW0gKHJ0eCwgcnR4ICopOworZXh0ZXJuIHJ0eCByZW1vdmVfbGlzdF9lbGVtIChydHgsIHJ0eCAqKTsKK2V4dGVybiBydHggcmVtb3ZlX2ZyZWVfSU5TTl9MSVNUX25vZGUgKHJ0eCAqKTsKK2V4dGVybiBydHggcmVtb3ZlX2ZyZWVfRVhQUl9MSVNUX25vZGUgKHJ0eCAqKTsKKworCisvKiByZWdpbmZvLmMgKi8KKworLyogSW5pdGlhbGl6ZSBtYXlfbW92ZV9jb3N0IGFuZCBmcmllbmRzIGZvciBtb2RlIE0uICAqLworZXh0ZXJuIHZvaWQgaW5pdF9tb3ZlX2Nvc3QgKGVudW0gbWFjaGluZV9tb2RlKTsKKy8qIFJlc2l6ZSByZWcgaW5mby4gICovCitleHRlcm4gYm9vbCByZXNpemVfcmVnX2luZm8gKHZvaWQpOworLyogRnJlZSB1cCByZWdpc3RlciBpbmZvIG1lbW9yeS4gICovCitleHRlcm4gdm9pZCBmcmVlX3JlZ19pbmZvICh2b2lkKTsKK2V4dGVybiB2b2lkIGluaXRfc3VicmVnc19vZl9tb2RlICh2b2lkKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9zdWJyZWdzX29mX21vZGUgKHZvaWQpOworCisvKiByZWNvZy5jICovCitleHRlcm4gcnR4IGV4dHJhY3RfYXNtX29wZXJhbmRzIChydHgpOworZXh0ZXJuIGludCBhc21fbm9wZXJhbmRzIChjb25zdF9ydHgpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmRlY29kZV9hc21fb3BlcmFuZHMgKHJ0eCwgcnR4ICosIHJ0eCAqKiwgY29uc3QgY2hhciAqKiwKKwkJCQkJZW51bSBtYWNoaW5lX21vZGUgKiwgbG9jYXRpb25fdCAqKTsKKworZXh0ZXJuIGVudW0gcmVnX2NsYXNzIHJlZ19wcmVmZXJyZWRfY2xhc3MgKGludCk7CitleHRlcm4gZW51bSByZWdfY2xhc3MgcmVnX2FsdGVybmF0ZV9jbGFzcyAoaW50KTsKK2V4dGVybiBlbnVtIHJlZ19jbGFzcyByZWdfY292ZXJfY2xhc3MgKGludCk7CitleHRlcm4gdm9pZCBzZXR1cF9yZWdfY2xhc3NlcyAoaW50LCBlbnVtIHJlZ19jbGFzcywgZW51bSByZWdfY2xhc3MsCisJCQkgICAgICAgZW51bSByZWdfY2xhc3MpOworCitleHRlcm4gdm9pZCBzcGxpdF9hbGxfaW5zbnMgKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBzcGxpdF9hbGxfaW5zbnNfbm9mbG93ICh2b2lkKTsKKworI2RlZmluZSBNQVhfU0FWRURfQ09OU1RfSU5UIDY0CitleHRlcm4gR1RZKCgpKSBydHggY29uc3RfaW50X3J0eFtNQVhfU0FWRURfQ09OU1RfSU5UICogMiArIDFdOworCisjZGVmaW5lIGNvbnN0MF9ydHgJKGNvbnN0X2ludF9ydHhbTUFYX1NBVkVEX0NPTlNUX0lOVF0pCisjZGVmaW5lIGNvbnN0MV9ydHgJKGNvbnN0X2ludF9ydHhbTUFYX1NBVkVEX0NPTlNUX0lOVCsxXSkKKyNkZWZpbmUgY29uc3QyX3J0eAkoY29uc3RfaW50X3J0eFtNQVhfU0FWRURfQ09OU1RfSU5UKzJdKQorI2RlZmluZSBjb25zdG0xX3J0eAkoY29uc3RfaW50X3J0eFtNQVhfU0FWRURfQ09OU1RfSU5ULTFdKQorZXh0ZXJuIEdUWSgoKSkgcnR4IGNvbnN0X3RydWVfcnR4OworCitleHRlcm4gR1RZKCgpKSBydHggY29uc3RfdGlueV9ydHhbM11bKGludCkgTUFYX01BQ0hJTkVfTU9ERV07CisKKy8qIFJldHVybnMgYSBjb25zdGFudCAwIHJ0eCBpbiBtb2RlIE1PREUuICBJbnRlZ2VyIG1vZGVzIGFyZSB0cmVhdGVkIHRoZQorICAgc2FtZSBhcyBWT0lEbW9kZS4gICovCisKKyNkZWZpbmUgQ09OU1QwX1JUWChNT0RFKSAoY29uc3RfdGlueV9ydHhbMF1bKGludCkgKE1PREUpXSkKKworLyogTGlrZXdpc2UsIGZvciB0aGUgY29uc3RhbnRzIDEgYW5kIDIuICAqLworCisjZGVmaW5lIENPTlNUMV9SVFgoTU9ERSkgKGNvbnN0X3RpbnlfcnR4WzFdWyhpbnQpIChNT0RFKV0pCisjZGVmaW5lIENPTlNUMl9SVFgoTU9ERSkgKGNvbnN0X3RpbnlfcnR4WzJdWyhpbnQpIChNT0RFKV0pCisKKy8qIElmIEhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0gaXMgZGVmaW5lZCwgdGhlbiBhIHNwZWNpYWwgZHVtbXkgcmVnCisgICBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgZnJhbWUgcG9pbnRlci4gIFRoaXMgaXMgYmVjYXVzZSB0aGUKKyAgIGhhcmQgZnJhbWUgcG9pbnRlciBhbmQgdGhlIGF1dG9tYXRpYyB2YXJpYWJsZXMgYXJlIHNlcGFyYXRlZCBieSBhbiBhbW91bnQKKyAgIHRoYXQgY2Fubm90IGJlIGRldGVybWluZWQgdW50aWwgYWZ0ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbi4gIFdlIGNhbiBhc3N1bWUKKyAgIHRoYXQgaW4gdGhpcyBjYXNlIEVMSU1JTkFCTEVfUkVHUyB3aWxsIGJlIGRlZmluZWQsIG9uZSBhY3Rpb24gb2Ygd2hpY2gKKyAgIHdpbGwgYmUgdG8gZWxpbWluYXRlIEZSQU1FX1BPSU5URVJfUkVHTlVNIGludG8gSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTS4gICovCisjaWZuZGVmIEhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0KKyNkZWZpbmUgSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTSBGUkFNRV9QT0lOVEVSX1JFR05VTQorI2VuZGlmCisKKy8qIEluZGV4IGxhYmVscyBmb3IgZ2xvYmFsX3J0bC4gICovCitlbnVtIGdsb2JhbF9ydGxfaW5kZXgKK3sKKyAgR1JfUEMsCisgIEdSX0NDMCwKKyAgR1JfU1RBQ0tfUE9JTlRFUiwKKyAgR1JfRlJBTUVfUE9JTlRFUiwKKy8qIEZvciByZWdpc3RlciBlbGltaW5hdGlvbiB0byB3b3JrIHByb3Blcmx5IHRoZXNlIGhhcmRfZnJhbWVfcG9pbnRlcl9ydHgsCisgICBmcmFtZV9wb2ludGVyX3J0eCwgYW5kIGFyZ19wb2ludGVyX3J0eCBtdXN0IGJlIHRoZSBzYW1lIGlmIHRoZXkgcmVmZXIgdG8KKyAgIHRoZSBzYW1lIHJlZ2lzdGVyLiAgKi8KKyNpZiBGUkFNRV9QT0lOVEVSX1JFR05VTSA9PSBBUkdfUE9JTlRFUl9SRUdOVU0KKyAgR1JfQVJHX1BPSU5URVIgPSBHUl9GUkFNRV9QT0lOVEVSLAorI2VuZGlmCisjaWYgSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTSA9PSBGUkFNRV9QT0lOVEVSX1JFR05VTQorICBHUl9IQVJEX0ZSQU1FX1BPSU5URVIgPSBHUl9GUkFNRV9QT0lOVEVSLAorI2Vsc2UKKyAgR1JfSEFSRF9GUkFNRV9QT0lOVEVSLAorI2VuZGlmCisjaWYgRlJBTUVfUE9JTlRFUl9SRUdOVU0gIT0gQVJHX1BPSU5URVJfUkVHTlVNCisjaWYgSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTSA9PSBBUkdfUE9JTlRFUl9SRUdOVU0KKyAgR1JfQVJHX1BPSU5URVIgPSBHUl9IQVJEX0ZSQU1FX1BPSU5URVIsCisjZWxzZQorICBHUl9BUkdfUE9JTlRFUiwKKyNlbmRpZgorI2VuZGlmCisgIEdSX1ZJUlRVQUxfSU5DT01JTkdfQVJHUywKKyAgR1JfVklSVFVBTF9TVEFDS19BUkdTLAorICBHUl9WSVJUVUFMX1NUQUNLX0RZTkFNSUMsCisgIEdSX1ZJUlRVQUxfT1VUR09JTkdfQVJHUywKKyAgR1JfVklSVFVBTF9DRkEsCisKKyAgR1JfTUFYCit9OworCisvKiBQb2ludGVycyB0byBzdGFuZGFyZCBwaWVjZXMgb2YgcnR4IGFyZSBzdG9yZWQgaGVyZS4gICovCitleHRlcm4gR1RZKCgpKSBydHggZ2xvYmFsX3J0bFtHUl9NQVhdOworCisvKiBTdGFuZGFyZCBwaWVjZXMgb2YgcnR4LCB0byBiZSBzdWJzdGl0dXRlZCBkaXJlY3RseSBpbnRvIHRoaW5ncy4gICovCisjZGVmaW5lIHBjX3J0eCAgICAgICAgICAgICAgICAgIChnbG9iYWxfcnRsW0dSX1BDXSkKKyNkZWZpbmUgY2MwX3J0eCAgICAgICAgICAgICAgICAgKGdsb2JhbF9ydGxbR1JfQ0MwXSkKKworLyogQWxsIHJlZmVyZW5jZXMgdG8gY2VydGFpbiBoYXJkIHJlZ3MsIGV4Y2VwdCB0aG9zZSBjcmVhdGVkCisgICBieSBhbGxvY2F0aW5nIHBzZXVkbyByZWdzIGludG8gdGhlbSAod2hlbiB0aGF0J3MgcG9zc2libGUpLAorICAgZ28gdGhyb3VnaCB0aGVzZSB1bmlxdWUgcnR4IG9iamVjdHMuICAqLworI2RlZmluZSBzdGFja19wb2ludGVyX3J0eCAgICAgICAoZ2xvYmFsX3J0bFtHUl9TVEFDS19QT0lOVEVSXSkKKyNkZWZpbmUgZnJhbWVfcG9pbnRlcl9ydHggICAgICAgKGdsb2JhbF9ydGxbR1JfRlJBTUVfUE9JTlRFUl0pCisjZGVmaW5lIGhhcmRfZnJhbWVfcG9pbnRlcl9ydHgJKGdsb2JhbF9ydGxbR1JfSEFSRF9GUkFNRV9QT0lOVEVSXSkKKyNkZWZpbmUgYXJnX3BvaW50ZXJfcnR4CQkoZ2xvYmFsX3J0bFtHUl9BUkdfUE9JTlRFUl0pCisKK2V4dGVybiBHVFkoKCkpIHJ0eCBwaWNfb2Zmc2V0X3RhYmxlX3J0eDsKK2V4dGVybiBHVFkoKCkpIHJ0eCByZXR1cm5fYWRkcmVzc19wb2ludGVyX3J0eDsKKworLyogSW5jbHVkZSB0aGUgUlRMIGdlbmVyYXRpb24gZnVuY3Rpb25zLiAgKi8KKworI2lmbmRlZiBHRU5FUkFUT1JfRklMRQorI2luY2x1ZGUgImdlbnJ0bC5oIgorI3VuZGVmIGdlbl9ydHhfQVNNX0lOUFVUCisjZGVmaW5lIGdlbl9ydHhfQVNNX0lOUFVUKE1PREUsIEFSRzApCQkJCVwKKyAgZ2VuX3J0eF9mbXRfc2kgKEFTTV9JTlBVVCwgKE1PREUpLCAoQVJHMCksIDApCisjZGVmaW5lIGdlbl9ydHhfQVNNX0lOUFVUX2xvYyhNT0RFLCBBUkcwLCBMT0MpCQkJXAorICBnZW5fcnR4X2ZtdF9zaSAoQVNNX0lOUFVULCAoTU9ERSksIChBUkcwKSwgKExPQykpCisjZW5kaWYKKworLyogVGhlcmUgYXJlIHNvbWUgUlRMIGNvZGVzIHRoYXQgcmVxdWlyZSBzcGVjaWFsIGF0dGVudGlvbjsgdGhlCisgICBnZW5lcmF0aW9uIGZ1bmN0aW9ucyBpbmNsdWRlZCBhYm92ZSBkbyB0aGUgcmF3IGhhbmRsaW5nLiAgSWYgeW91CisgICBhZGQgdG8gdGhpcyBsaXN0LCBtb2RpZnkgc3BlY2lhbF9ydHggaW4gZ2VuZ2VucnRsLmMgYXMgd2VsbC4gICovCisKK2V4dGVybiBydHggZ2VuX3J0eF9DT05TVF9JTlQgKGVudW0gbWFjaGluZV9tb2RlLCBIT1NUX1dJREVfSU5UKTsKK2V4dGVybiBydHggZ2VuX3J0eF9DT05TVF9WRUNUT1IgKGVudW0gbWFjaGluZV9tb2RlLCBydHZlYyk7CitleHRlcm4gcnR4IGdlbl9yYXdfUkVHIChlbnVtIG1hY2hpbmVfbW9kZSwgaW50KTsKK2V4dGVybiBydHggZ2VuX3J0eF9SRUcgKGVudW0gbWFjaGluZV9tb2RlLCB1bnNpZ25lZCk7CitleHRlcm4gcnR4IGdlbl9ydHhfU1VCUkVHIChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4LCBpbnQpOworZXh0ZXJuIHJ0eCBnZW5fcnR4X01FTSAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCk7CisKKyNkZWZpbmUgR0VOX0lOVChOKSAgZ2VuX3J0eF9DT05TVF9JTlQgKFZPSURtb2RlLCAoTikpCisKKy8qIFZpcnR1YWwgcmVnaXN0ZXJzIGFyZSB1c2VkIGR1cmluZyBSVEwgZ2VuZXJhdGlvbiB0byByZWZlciB0byBsb2NhdGlvbnMgaW50bworICAgdGhlIHN0YWNrIGZyYW1lIHdoZW4gdGhlIGFjdHVhbCBsb2NhdGlvbiBpc24ndCBrbm93biB1bnRpbCBSVEwgZ2VuZXJhdGlvbgorICAgaXMgY29tcGxldGUuICBUaGUgcm91dGluZSBpbnN0YW50aWF0ZV92aXJ0dWFsX3JlZ3MgcmVwbGFjZXMgdGhlc2Ugd2l0aAorICAgdGhlIHByb3BlciB2YWx1ZSwgd2hpY2ggaXMgbm9ybWFsbHkge2ZyYW1lLGFyZyxzdGFja31fcG9pbnRlcl9ydHggcGx1cworICAgYSBjb25zdGFudC4gICovCisKKyNkZWZpbmUgRklSU1RfVklSVFVBTF9SRUdJU1RFUgkoRklSU1RfUFNFVURPX1JFR0lTVEVSKQorCisvKiBUaGlzIHBvaW50cyB0byB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgaW5jb21pbmcgYXJndW1lbnRzIHBhc3NlZCBvbiB0aGUgc3RhY2ssCisgICBlaXRoZXIgYnkgdGhlIGNhbGxlciBvciBieSB0aGUgY2FsbGVlIHdoZW4gcHJldGVuZGluZyBpdCB3YXMgcGFzc2VkIGJ5IHRoZQorICAgY2FsbGVyLiAgKi8KKworI2RlZmluZSB2aXJ0dWFsX2luY29taW5nX2FyZ3NfcnR4ICAgICAgIChnbG9iYWxfcnRsW0dSX1ZJUlRVQUxfSU5DT01JTkdfQVJHU10pCisKKyNkZWZpbmUgVklSVFVBTF9JTkNPTUlOR19BUkdTX1JFR05VTQkoRklSU1RfVklSVFVBTF9SRUdJU1RFUikKKworLyogSWYgRlJBTUVfR1JPV1NfRE9XTldBUkQsIHRoaXMgcG9pbnRzIHRvIGltbWVkaWF0ZWx5IGFib3ZlIHRoZSBmaXJzdAorICAgdmFyaWFibGUgb24gdGhlIHN0YWNrLiAgT3RoZXJ3aXNlLCBpdCBwb2ludHMgdG8gdGhlIGZpcnN0IHZhcmlhYmxlIG9uCisgICB0aGUgc3RhY2suICAqLworCisjZGVmaW5lIHZpcnR1YWxfc3RhY2tfdmFyc19ydHgJICAgICAgICAoZ2xvYmFsX3J0bFtHUl9WSVJUVUFMX1NUQUNLX0FSR1NdKQorCisjZGVmaW5lIFZJUlRVQUxfU1RBQ0tfVkFSU19SRUdOVU0JKChGSVJTVF9WSVJUVUFMX1JFR0lTVEVSKSArIDEpCisKKy8qIFRoaXMgcG9pbnRzIHRvIHRoZSBsb2NhdGlvbiBvZiBkeW5hbWljYWxseS1hbGxvY2F0ZWQgbWVtb3J5IG9uIHRoZSBzdGFjaworICAgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHN0YWNrIHBvaW50ZXIgaGFzIGJlZW4gYWRqdXN0ZWQgYnkgdGhlIGFtb3VudAorICAgZGVzaXJlZC4gICovCisKKyNkZWZpbmUgdmlydHVhbF9zdGFja19keW5hbWljX3J0eAkoZ2xvYmFsX3J0bFtHUl9WSVJUVUFMX1NUQUNLX0RZTkFNSUNdKQorCisjZGVmaW5lIFZJUlRVQUxfU1RBQ0tfRFlOQU1JQ19SRUdOVU0JKChGSVJTVF9WSVJUVUFMX1JFR0lTVEVSKSArIDIpCisKKy8qIFRoaXMgcG9pbnRzIHRvIHRoZSBsb2NhdGlvbiBpbiB0aGUgc3RhY2sgYXQgd2hpY2ggb3V0Z29pbmcgYXJndW1lbnRzIHNob3VsZAorICAgYmUgd3JpdHRlbiB3aGVuIHRoZSBzdGFjayBpcyBwcmUtcHVzaGVkIChhcmd1bWVudHMgcHVzaGVkIHVzaW5nIHB1c2gKKyAgIGluc25zIGFsd2F5cyB1c2Ugc3ApLiAgKi8KKworI2RlZmluZSB2aXJ0dWFsX291dGdvaW5nX2FyZ3NfcnR4CShnbG9iYWxfcnRsW0dSX1ZJUlRVQUxfT1VUR09JTkdfQVJHU10pCisKKyNkZWZpbmUgVklSVFVBTF9PVVRHT0lOR19BUkdTX1JFR05VTQkoKEZJUlNUX1ZJUlRVQUxfUkVHSVNURVIpICsgMykKKworLyogVGhpcyBwb2ludHMgdG8gdGhlIENhbm9uaWNhbCBGcmFtZSBBZGRyZXNzIG9mIHRoZSBmdW5jdGlvbi4gIFRoaXMKKyAgIHNob3VsZCBjb3JyZXNwb25kIHRvIHRoZSBDRkEgcHJvZHVjZWQgYnkgSU5DT01JTkdfRlJBTUVfU1BfT0ZGU0VULAorICAgYnV0IGlzIGNhbGN1bGF0ZWQgcmVsYXRpdmUgdG8gdGhlIGFyZyBwb2ludGVyIGZvciBzaW1wbGljaXR5OyB0aGUKKyAgIGZyYW1lIHBvaW50ZXIgbm9yIHN0YWNrIHBvaW50ZXIgYXJlIG5lY2Vzc2FyaWx5IGZpeGVkIHJlbGF0aXZlIHRvCisgICB0aGUgQ0ZBIHVudGlsIGFmdGVyIHJlbG9hZC4gICovCisKKyNkZWZpbmUgdmlydHVhbF9jZmFfcnR4CQkJKGdsb2JhbF9ydGxbR1JfVklSVFVBTF9DRkFdKQorCisjZGVmaW5lIFZJUlRVQUxfQ0ZBX1JFR05VTQkJKChGSVJTVF9WSVJUVUFMX1JFR0lTVEVSKSArIDQpCisKKyNkZWZpbmUgTEFTVF9WSVJUVUFMX1JFR0lTVEVSCQkoKEZJUlNUX1ZJUlRVQUxfUkVHSVNURVIpICsgNCkKKworLyogTm9uemVybyBpZiBSRUdOVU0gaXMgYSBwb2ludGVyIGludG8gdGhlIHN0YWNrIGZyYW1lLiAgKi8KKyNkZWZpbmUgUkVHTk9fUFRSX0ZSQU1FX1AoUkVHTlVNKQkJXAorICAoKFJFR05VTSkgPT0gU1RBQ0tfUE9JTlRFUl9SRUdOVU0JCVwKKyAgIHx8IChSRUdOVU0pID09IEZSQU1FX1BPSU5URVJfUkVHTlVNCQlcCisgICB8fCAoUkVHTlVNKSA9PSBIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNCVwKKyAgIHx8IChSRUdOVU0pID09IEFSR19QT0lOVEVSX1JFR05VTQkJXAorICAgfHwgKChSRUdOVU0pID49IEZJUlNUX1ZJUlRVQUxfUkVHSVNURVIJXAorICAgICAgICYmIChSRUdOVU0pIDw9IExBU1RfVklSVFVBTF9SRUdJU1RFUikpCisKKy8qIFJFR05VTSBuZXZlciByZWFsbHkgYXBwZWFyaW5nIGluIHRoZSBJTlNOIHN0cmVhbS4gICovCisjZGVmaW5lIElOVkFMSURfUkVHTlVNCQkJKH4odW5zaWduZWQgaW50KSAwKQorCitleHRlcm4gcnR4IG91dHB1dF9jb25zdGFudF9kZWYgKHRyZWUsIGludCk7CitleHRlcm4gcnR4IGxvb2t1cF9jb25zdGFudF9kZWYgKHRyZWUpOworCisvKiBOb256ZXJvIGFmdGVyIGVuZCBvZiByZWxvYWQgcGFzcy4KKyAgIFNldCB0byAxIG9yIDAgYnkgcmVsb2FkMS5jLiAgKi8KKworZXh0ZXJuIGludCByZWxvYWRfY29tcGxldGVkOworCisvKiBOb256ZXJvIGFmdGVyIHRocmVhZF9wcm9sb2d1ZV9hbmRfZXBpbG9ndWVfaW5zbnMgaGFzIHJ1bi4gICovCitleHRlcm4gaW50IGVwaWxvZ3VlX2NvbXBsZXRlZDsKKworLyogU2V0IHRvIDEgd2hpbGUgcmVsb2FkX2FzX25lZWRlZCBpcyBvcGVyYXRpbmcuCisgICBSZXF1aXJlZCBieSBzb21lIG1hY2hpbmVzIHRvIGhhbmRsZSBhbnkgZ2VuZXJhdGVkIG1vdmVzIGRpZmZlcmVudGx5LiAgKi8KKworZXh0ZXJuIGludCByZWxvYWRfaW5fcHJvZ3Jlc3M7CisKKy8qIFRoaXMgbWFjcm8gaW5kaWNhdGVzIHdoZXRoZXIgeW91IG1heSBjcmVhdGUgYSBuZXcKKyAgIHBzZXVkby1yZWdpc3Rlci4gICovCisKKyNkZWZpbmUgY2FuX2NyZWF0ZV9wc2V1ZG9fcCgpICghcmVsb2FkX2luX3Byb2dyZXNzICYmICFyZWxvYWRfY29tcGxldGVkKQorCisjaWZkZWYgU1RBQ0tfUkVHUworLyogTm9uemVybyBhZnRlciBlbmQgb2YgcmVnc3RhY2sgcGFzcy4KKyAgIFNldCB0byAxIG9yIDAgYnkgcmVnLXN0YWNrLmMuICAqLworZXh0ZXJuIGludCByZWdzdGFja19jb21wbGV0ZWQ7CisjZW5kaWYKKworLyogSWYgdGhpcyBpcyBub256ZXJvLCB3ZSBkbyBub3QgYm90aGVyIGdlbmVyYXRpbmcgVk9MQVRJTEUKKyAgIGFyb3VuZCB2b2xhdGlsZSBtZW1vcnkgcmVmZXJlbmNlcywgYW5kIHdlIGFyZSB3aWxsaW5nIHRvCisgICBvdXRwdXQgaW5kaXJlY3QgYWRkcmVzc2VzLiAgSWYgY3NlIGlzIHRvIGZvbGxvdywgd2UgcmVqZWN0CisgICBpbmRpcmVjdCBhZGRyZXNzZXMgc28gYSB1c2VmdWwgcG90ZW50aWFsIGNzZSBpcyBnZW5lcmF0ZWQ7CisgICBpZiBpdCBpcyB1c2VkIG9ubHkgb25jZSwgaW5zdHJ1Y3Rpb24gY29tYmluYXRpb24gd2lsbCBwcm9kdWNlCisgICB0aGUgc2FtZSBpbmRpcmVjdCBhZGRyZXNzIGV2ZW50dWFsbHkuICAqLworZXh0ZXJuIGludCBjc2Vfbm90X2V4cGVjdGVkOworCisvKiBUcmFuc2xhdGVzIHJ0eCBjb2RlIHRvIHRyZWUgY29kZSwgZm9yIHRob3NlIGNvZGVzIG5lZWRlZCBieQorICAgUkVBTF9BUklUSE1FVElDLiAgVGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gaW50IGJlY2F1c2UgdGhlIGNhbGxlciBtYXkgbm90CisgICBrbm93IHdoYXQgYGVudW0gdHJlZV9jb2RlJyBtZWFucy4gICovCisKK2V4dGVybiBpbnQgcnR4X3RvX3RyZWVfY29kZSAoZW51bSBydHhfY29kZSk7CisKKy8qIEluIGNzZS5jICovCitleHRlcm4gaW50IGRlbGV0ZV90cml2aWFsbHlfZGVhZF9pbnNucyAocnR4LCBpbnQpOworZXh0ZXJuIGludCBjc2VfbWFpbiAocnR4LCBpbnQpOworZXh0ZXJuIGludCBleHBfZXF1aXZfcCAoY29uc3RfcnR4LCBjb25zdF9ydHgsIGludCwgYm9vbCk7CitleHRlcm4gdW5zaWduZWQgaGFzaF9ydHggKGNvbnN0X3J0eCB4LCBlbnVtIG1hY2hpbmVfbW9kZSwgaW50ICosIGludCAqLCBib29sKTsKKworLyogSW4ganVtcC5jICovCitleHRlcm4gaW50IGNvbXBhcmlzb25fZG9taW5hdGVzX3AgKGVudW0gcnR4X2NvZGUsIGVudW0gcnR4X2NvZGUpOworZXh0ZXJuIGludCBjb25kanVtcF9wIChjb25zdF9ydHgpOworZXh0ZXJuIGludCBhbnlfY29uZGp1bXBfcCAoY29uc3RfcnR4KTsKK2V4dGVybiBpbnQgYW55X3VuY29uZGp1bXBfcCAoY29uc3RfcnR4KTsKK2V4dGVybiBydHggcGNfc2V0IChjb25zdF9ydHgpOworZXh0ZXJuIHJ0eCBjb25kanVtcF9sYWJlbCAoY29uc3RfcnR4KTsKK2V4dGVybiBpbnQgc2ltcGxlanVtcF9wIChjb25zdF9ydHgpOworZXh0ZXJuIGludCByZXR1cm5qdW1wX3AgKHJ0eCk7CitleHRlcm4gaW50IGVoX3JldHVybmp1bXBfcCAocnR4KTsKK2V4dGVybiBpbnQgb25seWp1bXBfcCAoY29uc3RfcnR4KTsKK2V4dGVybiBpbnQgb25seV9zZXRzX2NjMF9wIChjb25zdF9ydHgpOworZXh0ZXJuIGludCBzZXRzX2NjMF9wIChjb25zdF9ydHgpOworZXh0ZXJuIGludCBpbnZlcnRfanVtcF8xIChydHgsIHJ0eCk7CitleHRlcm4gaW50IGludmVydF9qdW1wIChydHgsIHJ0eCwgaW50KTsKK2V4dGVybiBpbnQgcnR4X3JlbnVtYmVyZWRfZXF1YWxfcCAoY29uc3RfcnR4LCBjb25zdF9ydHgpOworZXh0ZXJuIGludCB0cnVlX3JlZ251bSAoY29uc3RfcnR4KTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgcmVnX29yX3N1YnJlZ25vIChjb25zdF9ydHgpOworZXh0ZXJuIGludCByZWRpcmVjdF9qdW1wXzEgKHJ0eCwgcnR4KTsKK2V4dGVybiB2b2lkIHJlZGlyZWN0X2p1bXBfMiAocnR4LCBydHgsIHJ0eCwgaW50LCBpbnQpOworZXh0ZXJuIGludCByZWRpcmVjdF9qdW1wIChydHgsIHJ0eCwgaW50KTsKK2V4dGVybiB2b2lkIHJlYnVpbGRfanVtcF9sYWJlbHMgKHJ0eCk7CitleHRlcm4gcnR4IHJldmVyc2VkX2NvbXBhcmlzb24gKGNvbnN0X3J0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGVudW0gcnR4X2NvZGUgcmV2ZXJzZWRfY29tcGFyaXNvbl9jb2RlIChjb25zdF9ydHgsIGNvbnN0X3J0eCk7CitleHRlcm4gZW51bSBydHhfY29kZSByZXZlcnNlZF9jb21wYXJpc29uX2NvZGVfcGFydHMgKGVudW0gcnR4X2NvZGUsIGNvbnN0X3J0eCwKKwkJCQkJCSAgICAgY29uc3RfcnR4LCBjb25zdF9ydHgpOworZXh0ZXJuIHZvaWQgZGVsZXRlX2Zvcl9wZWVwaG9sZSAocnR4LCBydHgpOworZXh0ZXJuIGludCBjb25kanVtcF9pbl9wYXJhbGxlbF9wIChjb25zdF9ydHgpOworCisvKiBJbiBlbWl0LXJ0bC5jLiAgKi8KK2V4dGVybiBpbnQgbWF4X3JlZ19udW0gKHZvaWQpOworZXh0ZXJuIGludCBtYXhfbGFiZWxfbnVtICh2b2lkKTsKK2V4dGVybiBpbnQgZ2V0X2ZpcnN0X2xhYmVsX251bSAodm9pZCk7CitleHRlcm4gdm9pZCBtYXliZV9zZXRfZmlyc3RfbGFiZWxfbnVtIChydHgpOworZXh0ZXJuIHZvaWQgZGVsZXRlX2luc25zX3NpbmNlIChydHgpOworZXh0ZXJuIHZvaWQgbWFya19yZWdfcG9pbnRlciAocnR4LCBpbnQpOworZXh0ZXJuIHZvaWQgbWFya191c2VyX3JlZyAocnR4KTsKK2V4dGVybiB2b2lkIHJlc2V0X3VzZWRfZmxhZ3MgKHJ0eCk7CitleHRlcm4gdm9pZCBzZXRfdXNlZF9mbGFncyAocnR4KTsKK2V4dGVybiB2b2lkIHJlb3JkZXJfaW5zbnMgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHZvaWQgcmVvcmRlcl9pbnNuc19ub2JiIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBpbnQgZ2V0X21heF91aWQgKHZvaWQpOworZXh0ZXJuIGludCBnZXRfbWF4X2luc25fY291bnQgKHZvaWQpOworZXh0ZXJuIGludCBpbl9zZXF1ZW5jZV9wICh2b2lkKTsKK2V4dGVybiB2b2lkIGZvcmNlX25leHRfbGluZV9ub3RlICh2b2lkKTsKK2V4dGVybiB2b2lkIGluaXRfZW1pdCAodm9pZCk7CitleHRlcm4gdm9pZCBpbml0X2VtaXRfcmVncyAodm9pZCk7CitleHRlcm4gdm9pZCBpbml0X2VtaXRfb25jZSAodm9pZCk7CitleHRlcm4gdm9pZCBwdXNoX3RvcG1vc3Rfc2VxdWVuY2UgKHZvaWQpOworZXh0ZXJuIHZvaWQgcG9wX3RvcG1vc3Rfc2VxdWVuY2UgKHZvaWQpOworZXh0ZXJuIHZvaWQgc2V0X25ld19maXJzdF9hbmRfbGFzdF9pbnNuIChydHgsIHJ0eCk7CitleHRlcm4gdW5zaWduZWQgaW50IHVuc2hhcmVfYWxsX3J0bCAodm9pZCk7CitleHRlcm4gdm9pZCB1bnNoYXJlX2FsbF9ydGxfYWdhaW4gKHJ0eCk7CitleHRlcm4gdm9pZCB1bnNoYXJlX2FsbF9ydGxfaW5fY2hhaW4gKHJ0eCk7CitleHRlcm4gdm9pZCB2ZXJpZnlfcnRsX3NoYXJpbmcgKHZvaWQpOworZXh0ZXJuIHZvaWQgc2V0X2ZpcnN0X2luc24gKHJ0eCk7CitleHRlcm4gdm9pZCBzZXRfbGFzdF9pbnNuIChydHgpOworZXh0ZXJuIHZvaWQgbGlua19jYzBfaW5zbnMgKHJ0eCk7CitleHRlcm4gdm9pZCBhZGRfaW5zbiAocnR4KTsKK2V4dGVybiB2b2lkIGFkZF9pbnNuX2JlZm9yZSAocnR4LCBydHgsIHN0cnVjdCBiYXNpY19ibG9ja19kZWYgKik7CitleHRlcm4gdm9pZCBhZGRfaW5zbl9hZnRlciAocnR4LCBydHgsIHN0cnVjdCBiYXNpY19ibG9ja19kZWYgKik7CitleHRlcm4gdm9pZCByZW1vdmVfaW5zbiAocnR4KTsKK2V4dGVybiBydHggZW1pdCAocnR4KTsKK2V4dGVybiBydHggZGVsZXRlX2luc24gKHJ0eCk7CitleHRlcm4gcnR4IGVudHJ5X29mX2Z1bmN0aW9uICh2b2lkKTsKK2V4dGVybiB2b2lkIGVtaXRfaW5zbl9hdF9lbnRyeSAocnR4KTsKK2V4dGVybiB2b2lkIGRlbGV0ZV9pbnNuX2NoYWluIChydHgsIHJ0eCwgYm9vbCk7CitleHRlcm4gcnR4IHVubGlua19pbnNuX2NoYWluIChydHgsIHJ0eCk7CitleHRlcm4gcnR4IGRlbGV0ZV9pbnNuX2FuZF9lZGdlcyAocnR4KTsKK2V4dGVybiBydHggZ2VuX2xvd3BhcnRfU1VCUkVHIChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4KTsKK2V4dGVybiBydHggZ2VuX2NvbnN0X21lbSAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCk7CitleHRlcm4gcnR4IGdlbl9mcmFtZV9tZW0gKGVudW0gbWFjaGluZV9tb2RlLCBydHgpOworZXh0ZXJuIHJ0eCBnZW5fdG1wX3N0YWNrX21lbSAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCk7CitleHRlcm4gYm9vbCB2YWxpZGF0ZV9zdWJyZWcgKGVudW0gbWFjaGluZV9tb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCSAgICAgY29uc3RfcnR4LCB1bnNpZ25lZCBpbnQpOworCisvKiBJbiBjb21iaW5lLmMgICovCitleHRlcm4gdW5zaWduZWQgaW50IGV4dGVuZGVkX2NvdW50IChjb25zdF9ydHgsIGVudW0gbWFjaGluZV9tb2RlLCBpbnQpOworZXh0ZXJuIHJ0eCByZW1vdmVfZGVhdGggKHVuc2lnbmVkIGludCwgcnR4KTsKK2V4dGVybiB2b2lkIGR1bXBfY29tYmluZV9zdGF0cyAoRklMRSAqKTsKK2V4dGVybiB2b2lkIGR1bXBfY29tYmluZV90b3RhbF9zdGF0cyAoRklMRSAqKTsKKworLyogSW4gY2ZnY2xlYW51cC5jICAqLworZXh0ZXJuIHZvaWQgZGVsZXRlX2RlYWRfanVtcHRhYmxlcyAodm9pZCk7CisKKy8qIEluIHNjaGVkLXZpcy5jLiAgKi8KK2V4dGVybiB2b2lkIGRlYnVnX2JiX25fc2xpbSAoaW50KTsKK2V4dGVybiB2b2lkIGRlYnVnX2JiX3NsaW0gKHN0cnVjdCBiYXNpY19ibG9ja19kZWYgKik7CitleHRlcm4gdm9pZCBwcmludF9ydGxfc2xpbSAoRklMRSAqLCBydHgsIHJ0eCwgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgcHJpbnRfcnRsX3NsaW1fd2l0aF9iYiAoRklMRSAqLCBydHgsIGludCk7CitleHRlcm4gdm9pZCBkdW1wX2luc25fc2xpbSAoRklMRSAqZiwgcnR4IHgpOworZXh0ZXJuIHZvaWQgZGVidWdfaW5zbl9zbGltIChydHggeCk7CisKKy8qIEluIHNjaGVkLXJnbi5jLiAgKi8KK2V4dGVybiB2b2lkIHNjaGVkdWxlX2luc25zICh2b2lkKTsKKworLyogSW4gc2NoZWQtZWJiLmMuICAqLworZXh0ZXJuIHZvaWQgc2NoZWR1bGVfZWJicyAodm9pZCk7CisKKy8qIEluIGhhaWZhLXNjaGVkLmMuICAqLworZXh0ZXJuIHZvaWQgZml4X3NjaGVkX3BhcmFtIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKKy8qIEluIHNlbC1zY2hlZC1kdW1wLmMuICAqLworZXh0ZXJuIHZvaWQgc2VsX3NjaGVkX2ZpeF9wYXJhbSAoY29uc3QgY2hhciAqcGFyYW0sIGNvbnN0IGNoYXIgKnZhbCk7CisKKy8qIEluIHByaW50LXJ0bC5jICovCitleHRlcm4gY29uc3QgY2hhciAqcHJpbnRfcnR4X2hlYWQ7CitleHRlcm4gdm9pZCBkZWJ1Z19ydHggKGNvbnN0X3J0eCk7CitleHRlcm4gdm9pZCBkZWJ1Z19ydHhfbGlzdCAoY29uc3RfcnR4LCBpbnQpOworZXh0ZXJuIHZvaWQgZGVidWdfcnR4X3JhbmdlIChjb25zdF9ydHgsIGNvbnN0X3J0eCk7CitleHRlcm4gY29uc3RfcnR4IGRlYnVnX3J0eF9maW5kIChjb25zdF9ydHgsIGludCk7CitleHRlcm4gdm9pZCBwcmludF9tZW1fZXhwciAoRklMRSAqLCBjb25zdF90cmVlKTsKK2V4dGVybiB2b2lkIHByaW50X3J0bCAoRklMRSAqLCBjb25zdF9ydHgpOworZXh0ZXJuIHZvaWQgcHJpbnRfc2ltcGxlX3J0bCAoRklMRSAqLCBjb25zdF9ydHgpOworZXh0ZXJuIGludCBwcmludF9ydGxfc2luZ2xlIChGSUxFICosIGNvbnN0X3J0eCk7CitleHRlcm4gdm9pZCBwcmludF9pbmxpbmVfcnR4IChGSUxFICosIGNvbnN0X3J0eCwgaW50KTsKKworLyogSW4gZnVuY3Rpb24uYyAqLworZXh0ZXJuIHZvaWQgcmVwb3NpdGlvbl9wcm9sb2d1ZV9hbmRfZXBpbG9ndWVfbm90ZXMgKHZvaWQpOworZXh0ZXJuIGludCBwcm9sb2d1ZV9lcGlsb2d1ZV9jb250YWlucyAoY29uc3RfcnR4KTsKK2V4dGVybiBpbnQgc2liY2FsbF9lcGlsb2d1ZV9jb250YWlucyAoY29uc3RfcnR4KTsKK2V4dGVybiB2b2lkIG1hcmtfdGVtcF9hZGRyX3Rha2VuIChydHgpOworZXh0ZXJuIHZvaWQgdXBkYXRlX3RlbXBfc2xvdF9hZGRyZXNzIChydHgsIHJ0eCk7CitleHRlcm4gdm9pZCBtYXliZV9jb3B5X2VwaWxvZ3VlX2luc24gKHJ0eCwgcnR4KTsKKworLyogSW4gc3RtdC5jICovCitleHRlcm4gdm9pZCBleHBhbmRfbnVsbF9yZXR1cm4gKHZvaWQpOworZXh0ZXJuIHZvaWQgZXhwYW5kX25ha2VkX3JldHVybiAodm9pZCk7CitleHRlcm4gdm9pZCBlbWl0X2p1bXAgKHJ0eCk7CisKKy8qIEluIGV4cHIuYyAqLworZXh0ZXJuIHJ0eCBtb3ZlX2J5X3BpZWNlcyAocnR4LCBydHgsIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQsCisJCQkgICB1bnNpZ25lZCBpbnQsIGludCk7CisKKy8qIEluIGNmZ3J0bC5jICovCitleHRlcm4gdm9pZCBwcmludF9ydGxfd2l0aF9iYiAoRklMRSAqLCBjb25zdF9ydHgpOworCisvKiBJbiBjZmcuYy4gICovCitleHRlcm4gdm9pZCBkdW1wX3JlZ19pbmZvIChGSUxFICopOworZXh0ZXJuIHZvaWQgZHVtcF9mbG93X2luZm8gKEZJTEUgKiwgaW50KTsKKworLyogSW4gZXhwbWVkLmMgKi8KK2V4dGVybiB2b2lkIGluaXRfZXhwbWVkICh2b2lkKTsKK2V4dGVybiB2b2lkIGV4cGFuZF9pbmMgKHJ0eCwgcnR4KTsKK2V4dGVybiB2b2lkIGV4cGFuZF9kZWMgKHJ0eCwgcnR4KTsKKworLyogSW4gZ2NzZS5jICovCitleHRlcm4gYm9vbCBjYW5fY29weV9wIChlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gYm9vbCBjYW5fYXNzaWduX3RvX3JlZ193aXRob3V0X2Nsb2JiZXJzX3AgKHJ0eCk7CitleHRlcm4gcnR4IGZpc19nZXRfY29uZGl0aW9uIChydHgpOworCisvKiBJbiBpcmEuYyAqLworI2lmZGVmIEhBUkRfQ09OU1QKK2V4dGVybiBIQVJEX1JFR19TRVQgZWxpbWluYWJsZV9yZWdzZXQ7CisjZW5kaWYKK2V4dGVybiB2b2lkIG1hcmtfZWxpbWluYXRpb24gKGludCwgaW50KTsKKworLyogSW4gcmVnaW5mby5jICovCitleHRlcm4gaW50IHJlZ19jbGFzc2VzX2ludGVyc2VjdF9wIChlbnVtIHJlZ19jbGFzcywgZW51bSByZWdfY2xhc3MpOworZXh0ZXJuIGludCByZWdfY2xhc3Nfc3Vic2V0X3AgKGVudW0gcmVnX2NsYXNzLCBlbnVtIHJlZ19jbGFzcyk7CitleHRlcm4gdm9pZCBnbG9iYWxpemVfcmVnIChpbnQpOworZXh0ZXJuIHZvaWQgaW5pdF9yZWdfbW9kZXNfdGFyZ2V0ICh2b2lkKTsKK2V4dGVybiB2b2lkIGluaXRfcmVncyAodm9pZCk7CitleHRlcm4gdm9pZCByZWluaXRfcmVncyAodm9pZCk7CitleHRlcm4gdm9pZCBpbml0X2Zha2Vfc3RhY2tfbWVtcyAodm9pZCk7CitleHRlcm4gdm9pZCBzYXZlX3JlZ2lzdGVyX2luZm8gKHZvaWQpOworZXh0ZXJuIHZvaWQgaW5pdF9yZWdfc2V0cyAodm9pZCk7CitleHRlcm4gdm9pZCByZWdjbGFzcyAocnR4LCBpbnQpOworZXh0ZXJuIHZvaWQgcmVnX3NjYW4gKHJ0eCwgdW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIGZpeF9yZWdpc3RlciAoY29uc3QgY2hhciAqLCBpbnQsIGludCk7CitleHRlcm4gYm9vbCBpbnZhbGlkX21vZGVfY2hhbmdlX3AgKHVuc2lnbmVkIGludCwgZW51bSByZWdfY2xhc3MsCisJCQkJICAgZW51bSBtYWNoaW5lX21vZGUpOworCisvKiBJbiByZW9yZy5jICovCitleHRlcm4gdm9pZCBkYnJfc2NoZWR1bGUgKHJ0eCk7CisKKy8qIEluIHJlbG9hZDEuYyAqLworZXh0ZXJuIGludCBmdW5jdGlvbl9pbnZhcmlhbnRfcCAoY29uc3RfcnR4KTsKKworLyogSW4gY2FsbHMuYyAqLworZW51bSBsaWJjYWxsX3R5cGUKK3sKKyAgTENUX05PUk1BTCA9IDAsCisgIExDVF9DT05TVCA9IDEsCisgIExDVF9QVVJFID0gMiwKKyAgTENUX05PUkVUVVJOID0gMywKKyAgTENUX1RIUk9XID0gNCwKKyAgTENUX1JFVFVSTlNfVFdJQ0UgPSA1Cit9OworCitleHRlcm4gdm9pZCBlbWl0X2xpYnJhcnlfY2FsbCAocnR4LCBlbnVtIGxpYmNhbGxfdHlwZSwgZW51bSBtYWNoaW5lX21vZGUsIGludCwKKwkJCSAgICAgICAuLi4pOworZXh0ZXJuIHJ0eCBlbWl0X2xpYnJhcnlfY2FsbF92YWx1ZSAocnR4LCBydHgsIGVudW0gbGliY2FsbF90eXBlLAorCQkJCSAgICBlbnVtIG1hY2hpbmVfbW9kZSwgaW50LCAuLi4pOworCisvKiBJbiB2YXJhc20uYyAqLworZXh0ZXJuIHZvaWQgaW5pdF92YXJhc21fb25jZSAodm9pZCk7CitleHRlcm4gZW51bSB0bHNfbW9kZWwgZGVjbF9kZWZhdWx0X3Rsc19tb2RlbCAoY29uc3RfdHJlZSk7CisKKy8qIEluIHJ0bC5jICovCitleHRlcm4gdm9pZCB0cmF2ZXJzZV9tZF9jb25zdGFudHMgKGludCAoKikgKHZvaWQgKiosIHZvaWQgKiksIHZvaWQgKik7CitzdHJ1Y3QgbWRfY29uc3RhbnQgeyBjaGFyICpuYW1lLCAqdmFsdWU7IH07CisKKy8qIEluIHJlYWQtcnRsLmMgKi8KK2V4dGVybiBpbnQgcmVhZF9za2lwX3NwYWNlcyAoRklMRSAqKTsKK2V4dGVybiBib29sIHJlYWRfcnR4IChGSUxFICosIHJ0eCAqLCBpbnQgKik7CitleHRlcm4gdm9pZCBjb3B5X3J0eF9wdHJfbG9jIChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CitleHRlcm4gdm9pZCBwcmludF9ydHhfcHRyX2xvYyAoY29uc3Qgdm9pZCAqKTsKK2V4dGVybiBjb25zdCBjaGFyICpqb2luX2NfY29uZGl0aW9ucyAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgcHJpbnRfY19jb25kaXRpb24gKGNvbnN0IGNoYXIgKik7CitleHRlcm4gY29uc3QgY2hhciAqcmVhZF9ydHhfZmlsZW5hbWU7CitleHRlcm4gaW50IHJlYWRfcnR4X2xpbmVubzsKKworLyogSW4gYWxpYXMuYyAqLworZXh0ZXJuIHJ0eCBjYW5vbl9ydHggKHJ0eCk7CitleHRlcm4gaW50IHRydWVfZGVwZW5kZW5jZSAoY29uc3RfcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgY29uc3RfcnR4LCBib29sICgqKShjb25zdF9ydHgsIGJvb2wpKTsKK2V4dGVybiBydHggZ2V0X2FkZHIgKHJ0eCk7CitleHRlcm4gaW50IGNhbm9uX3RydWVfZGVwZW5kZW5jZSAoY29uc3RfcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgcnR4LCBjb25zdF9ydHgsCisJCQkJICBydHgsIGJvb2wgKCopKGNvbnN0X3J0eCwgYm9vbCkpOworZXh0ZXJuIGludCByZWFkX2RlcGVuZGVuY2UgKGNvbnN0X3J0eCwgY29uc3RfcnR4KTsKK2V4dGVybiBpbnQgYW50aV9kZXBlbmRlbmNlIChjb25zdF9ydHgsIGNvbnN0X3J0eCk7CitleHRlcm4gaW50IG91dHB1dF9kZXBlbmRlbmNlIChjb25zdF9ydHgsIGNvbnN0X3J0eCk7CitleHRlcm4gdm9pZCBpbml0X2FsaWFzX3RhcmdldCAodm9pZCk7CitleHRlcm4gdm9pZCBpbml0X2FsaWFzX2FuYWx5c2lzICh2b2lkKTsKK2V4dGVybiB2b2lkIGVuZF9hbGlhc19hbmFseXNpcyAodm9pZCk7CitleHRlcm4gYm9vbCBtZW1vcnlfbW9kaWZpZWRfaW5faW5zbl9wIChjb25zdF9ydHgsIGNvbnN0X3J0eCk7CitleHRlcm4gcnR4IGZpbmRfYmFzZV90ZXJtIChydHgpOworZXh0ZXJuIHJ0eCBnZW5faGFyZF9yZWdfY2xvYmJlciAoZW51bSBtYWNoaW5lX21vZGUsIHVuc2lnbmVkIGludCk7CitleHRlcm4gcnR4IGdldF9yZWdfa25vd25fdmFsdWUgKHVuc2lnbmVkIGludCk7CitleHRlcm4gYm9vbCBnZXRfcmVnX2tub3duX2VxdWl2X3AgKHVuc2lnbmVkIGludCk7CitleHRlcm4gcnR4IGdldF9yZWdfYmFzZV92YWx1ZSAodW5zaWduZWQgaW50KTsKKworI2lmZGVmIFNUQUNLX1JFR1MKK2V4dGVybiBpbnQgc3RhY2tfcmVnc19tZW50aW9uZWQgKGNvbnN0X3J0eCBpbnNuKTsKKyNlbmRpZgorCisvKiBJbiB0b3BsZXYuYyAqLworZXh0ZXJuIEdUWSgoKSkgcnR4IHN0YWNrX2xpbWl0X3J0eDsKKworLyogSW4gcHJlZGljdC5jICovCitleHRlcm4gdm9pZCBpbnZlcnRfYnJfcHJvYmFiaWxpdGllcyAocnR4KTsKK2V4dGVybiBib29sIGV4cGVuc2l2ZV9mdW5jdGlvbl9wIChpbnQpOworCisvKiBJbiB2YXItdHJhY2tpbmcuYyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCB2YXJpYWJsZV90cmFja2luZ19tYWluICh2b2lkKTsKKworLyogSW4gc3Rvci1sYXlvdXQuYy4gICovCitleHRlcm4gdm9pZCBnZXRfbW9kZV9ib3VuZHMgKGVudW0gbWFjaGluZV9tb2RlLCBpbnQsIGVudW0gbWFjaGluZV9tb2RlLAorCQkJICAgICBydHggKiwgcnR4ICopOworCisvKiBJbiBsb29wLXVuc3dpdGNoLmMgICovCitleHRlcm4gcnR4IHJldmVyc2VkX2NvbmRpdGlvbiAocnR4KTsKK2V4dGVybiBydHggY29tcGFyZV9hbmRfanVtcF9zZXEgKHJ0eCwgcnR4LCBlbnVtIHJ0eF9jb2RlLCBydHgsIGludCwgcnR4KTsKKworLyogSW4gbG9vcC1pdi5jICAqLworZXh0ZXJuIHJ0eCBjYW5vbl9jb25kaXRpb24gKHJ0eCk7CitleHRlcm4gdm9pZCBzaW1wbGlmeV91c2luZ19jb25kaXRpb24gKHJ0eCwgcnR4ICosIHN0cnVjdCBiaXRtYXBfaGVhZF9kZWYgKik7CisKKy8qIEluIGZpbmFsLmMgICovCitleHRlcm4gdW5zaWduZWQgaW50IGNvbXB1dGVfYWxpZ25tZW50cyAodm9pZCk7CitleHRlcm4gaW50IGFzbV9zdHJfY291bnQgKGNvbnN0IGNoYXIgKnRlbXBsKTsKKwwKK3N0cnVjdCBydGxfaG9va3MKK3sKKyAgcnR4ICgqZ2VuX2xvd3BhcnQpIChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4KTsKKyAgcnR4ICgqZ2VuX2xvd3BhcnRfbm9fZW1pdCkgKGVudW0gbWFjaGluZV9tb2RlLCBydHgpOworICBydHggKCpyZWdfbm9uemVyb19iaXRzKSAoY29uc3RfcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgY29uc3RfcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCSAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQsIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgKik7CisgIHJ0eCAoKnJlZ19udW1fc2lnbl9iaXRfY29waWVzKSAoY29uc3RfcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgY29uc3RfcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCQkgIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50ICopOworICBib29sICgqcmVnX3RydW5jYXRlZF90b19tb2RlKSAoZW51bSBtYWNoaW5lX21vZGUsIGNvbnN0X3J0eCk7CisKKyAgLyogV2hlbmV2ZXIgeW91IGFkZCBlbnRyaWVzIGhlcmUsIG1ha2Ugc3VyZSB5b3UgYWRqdXN0IHJ0bGhvb2tzLWRlZi5oLiAgKi8KK307CisKKy8qIEVhY2ggcGFzcyBjYW4gcHJvdmlkZSBpdHMgb3duLiAgKi8KK2V4dGVybiBzdHJ1Y3QgcnRsX2hvb2tzIHJ0bF9ob29rczsKKworLyogLi4uIGJ1dCB0aGVuIGl0IGhhcyB0byByZXN0b3JlIHRoZXNlLiAgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgcnRsX2hvb2tzIGdlbmVyYWxfcnRsX2hvb2tzOworCisvKiBLZWVwIHRoaXMgZm9yIHRoZSBub25jZS4gICovCisjZGVmaW5lIGdlbl9sb3dwYXJ0IHJ0bF9ob29rcy5nZW5fbG93cGFydAorCitleHRlcm4gdm9pZCBpbnNuX2xvY2F0b3JzX2FsbG9jICh2b2lkKTsKK2V4dGVybiB2b2lkIGluc25fbG9jYXRvcnNfZnJlZSAodm9pZCk7CitleHRlcm4gdm9pZCBpbnNuX2xvY2F0b3JzX2ZpbmFsaXplICh2b2lkKTsKK2V4dGVybiB2b2lkIHNldF9jdXJyX2luc25fc291cmNlX2xvY2F0aW9uIChsb2NhdGlvbl90KTsKK2V4dGVybiBsb2NhdGlvbl90IGdldF9jdXJyX2luc25fc291cmNlX2xvY2F0aW9uICh2b2lkKTsKK2V4dGVybiB2b2lkIHNldF9jdXJyX2luc25fYmxvY2sgKHRyZWUpOworZXh0ZXJuIHRyZWUgZ2V0X2N1cnJfaW5zbl9ibG9jayAodm9pZCk7CitleHRlcm4gaW50IGN1cnJfaW5zbl9sb2NhdG9yICh2b2lkKTsKK2V4dGVybiBib29sIG9wdGltaXplX2luc25fZm9yX3NpemVfcCAodm9pZCk7CitleHRlcm4gYm9vbCBvcHRpbWl6ZV9pbnNuX2Zvcl9zcGVlZF9wICh2b2lkKTsKKworI2VuZGlmIC8qICEgR0NDX1JUTF9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvc2FmZS1jdHlwZS5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3NhZmUtY3R5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjY2YmYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3NhZmUtY3R5cGUuaApAQCAtMCwwICsxLDE1MCBAQAorLyogPGN0eXBlLmg+IHJlcGxhY2VtZW50IG1hY3Jvcy4KKworICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgWmFjayBXZWluYmVyZyA8emFja3dAc3RhbmZvcmQuZWR1Pi4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGxpYmliZXJ0eSBsaWJyYXJ5LgorTGliaWJlcnR5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgordmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitMaWJpYmVydHkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFsb25nIHdpdGggbGliaWJlcnR5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZgorbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQgLSBGaWZ0aCBGbG9vciwKK0Jvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogVGhpcyBpcyBhIGNvbXBhdGlibGUgcmVwbGFjZW1lbnQgb2YgdGhlIHN0YW5kYXJkIEMgbGlicmFyeSdzIDxjdHlwZS5oPgorICAgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CisKKyAgIC0gSW1wbGVtZW50cyBhbGwgaXN4eHgoKSBtYWNyb3MgcmVxdWlyZWQgYnkgQzk5LgorICAgLSBBbHNvIGltcGxlbWVudHMgc29tZSBjaGFyYWN0ZXIgY2xhc3NlcyB1c2VmdWwgd2hlbgorICAgICBwYXJzaW5nIEMtbGlrZSBsYW5ndWFnZXMuCisgICAtIERvZXMgbm90IGNoYW5nZSBiZWhhdmlvciBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgbG9jYWxlLgorICAgLSBCZWhhdmVzIHByb3Blcmx5IGZvciBhbGwgdmFsdWVzIGluIHRoZSByYW5nZSBvZiBhIHNpZ25lZCBvcgorICAgICB1bnNpZ25lZCBjaGFyLgorCisgICBUbyBhdm9pZCBjb25mbGljdHMsIHRoaXMgaGVhZGVyIGRlZmluZXMgdGhlIGlzeHh4IGZ1bmN0aW9ucyBpbiB1cHBlcgorICAgY2FzZSwgZS5nLiBJU0FMUEhBIG5vdCBpc2FscGhhLiAgKi8KKworI2lmbmRlZiBTQUZFX0NUWVBFX0gKKyNkZWZpbmUgU0FGRV9DVFlQRV9ICisKKy8qIERldGVybWluZSBob3N0IGNoYXJhY3RlciBzZXQuICAqLworI2RlZmluZSBIT1NUX0NIQVJTRVRfVU5LTk9XTiAwCisjZGVmaW5lIEhPU1RfQ0hBUlNFVF9BU0NJSSAgIDEKKyNkZWZpbmUgSE9TVF9DSEFSU0VUX0VCQ0RJQyAgMgorCisjaWYgICdcbicgPT0gMHgwQSAmJiAnICcgPT0gMHgyMCAmJiAnMCcgPT0gMHgzMCBcCisgICAmJiAnQScgPT0gMHg0MSAmJiAnYScgPT0gMHg2MSAmJiAnIScgPT0gMHgyMQorIyAgZGVmaW5lIEhPU1RfQ0hBUlNFVCBIT1NUX0NIQVJTRVRfQVNDSUkKKyNlbHNlCisjIGlmICdcbicgPT0gMHgxNSAmJiAnICcgPT0gMHg0MCAmJiAnMCcgPT0gMHhGMCBcCisgICAmJiAnQScgPT0gMHhDMSAmJiAnYScgPT0gMHg4MSAmJiAnIScgPT0gMHg1QQorIyAgZGVmaW5lIEhPU1RfQ0hBUlNFVCBIT1NUX0NIQVJTRVRfRUJDRElDCisjIGVsc2UKKyMgIGRlZmluZSBIT1NUX0NIQVJTRVQgSE9TVF9DSEFSU0VUX1VOS05PV04KKyMgZW5kaWYKKyNlbmRpZgorCisvKiBDYXRlZ29yaWVzLiAgKi8KKworZW51bSB7CisgIC8qIEluIEM5OSAqLworICBfc2NoX2lzYmxhbmsgID0gMHgwMDAxLAkvKiBzcGFjZSBcdCAqLworICBfc2NoX2lzY250cmwgID0gMHgwMDAyLAkvKiBub25wcmludGluZyBjaGFyYWN0ZXJzICovCisgIF9zY2hfaXNkaWdpdCAgPSAweDAwMDQsCS8qIDAtOSAqLworICBfc2NoX2lzbG93ZXIgID0gMHgwMDA4LAkvKiBhLXogKi8KKyAgX3NjaF9pc3ByaW50ICA9IDB4MDAxMCwJLyogYW55IHByaW50aW5nIGNoYXJhY3RlciBpbmNsdWRpbmcgJyAnICovCisgIF9zY2hfaXNwdW5jdCAgPSAweDAwMjAsCS8qIGFsbCBwdW5jdHVhdGlvbiAqLworICBfc2NoX2lzc3BhY2UgID0gMHgwMDQwLAkvKiBzcGFjZSBcdCBcbiBcciBcZiBcdiAqLworICBfc2NoX2lzdXBwZXIgID0gMHgwMDgwLAkvKiBBLVogKi8KKyAgX3NjaF9pc3hkaWdpdCA9IDB4MDEwMCwJLyogMC05QS1GYS1mICovCisKKyAgLyogRXh0cmEgY2F0ZWdvcmllcyB1c2VmdWwgdG8gY3BwbGliLiAgKi8KKyAgX3NjaF9pc2lkc3QJPSAweDAyMDAsCS8qIEEtWmEtel8gKi8KKyAgX3NjaF9pc3ZzcCAgICA9IDB4MDQwMCwJLyogXG4gXHIgKi8KKyAgX3NjaF9pc252c3AgICA9IDB4MDgwMCwJLyogc3BhY2UgXHQgXGYgXHYgXDAgKi8KKworICAvKiBDb21iaW5hdGlvbnMgb2YgdGhlIGFib3ZlLiAgKi8KKyAgX3NjaF9pc2FscGhhICA9IF9zY2hfaXN1cHBlcnxfc2NoX2lzbG93ZXIsCS8qIEEtWmEteiAqLworICBfc2NoX2lzYWxudW0gID0gX3NjaF9pc2FscGhhfF9zY2hfaXNkaWdpdCwJLyogQS1aYS16MC05ICovCisgIF9zY2hfaXNpZG51bSAgPSBfc2NoX2lzaWRzdHxfc2NoX2lzZGlnaXQsCS8qIEEtWmEtejAtOV8gKi8KKyAgX3NjaF9pc2dyYXBoICA9IF9zY2hfaXNhbG51bXxfc2NoX2lzcHVuY3QsCS8qIGlzcHJpbnQgYW5kIG5vdCBzcGFjZSAqLworICBfc2NoX2lzY3Bwc3AgID0gX3NjaF9pc3ZzcHxfc2NoX2lzbnZzcCwJLyogaXNzcGFjZSArIFwwICovCisgIF9zY2hfaXNiYXNpYyAgPSBfc2NoX2lzcHJpbnR8X3NjaF9pc2NwcHNwICAgICAvKiBiYXNpYyBjaGFyc2V0IG9mIElTTyBDCisJCQkJCQkgICAocGx1cyBgIGFuZCBAKSAgKi8KK307CisKKy8qIENoYXJhY3RlciBjbGFzc2lmaWNhdGlvbi4gICovCitleHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgX3NjaF9pc3RhYmxlWzI1Nl07CisKKyNkZWZpbmUgX3NjaF90ZXN0KGMsIGJpdCkgKF9zY2hfaXN0YWJsZVsoYykgJiAweGZmXSAmICh1bnNpZ25lZCBzaG9ydCkoYml0KSkKKworI2RlZmluZSBJU0FMUEhBKGMpICBfc2NoX3Rlc3QoYywgX3NjaF9pc2FscGhhKQorI2RlZmluZSBJU0FMTlVNKGMpICBfc2NoX3Rlc3QoYywgX3NjaF9pc2FsbnVtKQorI2RlZmluZSBJU0JMQU5LKGMpICBfc2NoX3Rlc3QoYywgX3NjaF9pc2JsYW5rKQorI2RlZmluZSBJU0NOVFJMKGMpICBfc2NoX3Rlc3QoYywgX3NjaF9pc2NudHJsKQorI2RlZmluZSBJU0RJR0lUKGMpICBfc2NoX3Rlc3QoYywgX3NjaF9pc2RpZ2l0KQorI2RlZmluZSBJU0dSQVBIKGMpICBfc2NoX3Rlc3QoYywgX3NjaF9pc2dyYXBoKQorI2RlZmluZSBJU0xPV0VSKGMpICBfc2NoX3Rlc3QoYywgX3NjaF9pc2xvd2VyKQorI2RlZmluZSBJU1BSSU5UKGMpICBfc2NoX3Rlc3QoYywgX3NjaF9pc3ByaW50KQorI2RlZmluZSBJU1BVTkNUKGMpICBfc2NoX3Rlc3QoYywgX3NjaF9pc3B1bmN0KQorI2RlZmluZSBJU1NQQUNFKGMpICBfc2NoX3Rlc3QoYywgX3NjaF9pc3NwYWNlKQorI2RlZmluZSBJU1VQUEVSKGMpICBfc2NoX3Rlc3QoYywgX3NjaF9pc3VwcGVyKQorI2RlZmluZSBJU1hESUdJVChjKSBfc2NoX3Rlc3QoYywgX3NjaF9pc3hkaWdpdCkKKworI2RlZmluZSBJU0lETlVNKGMpCV9zY2hfdGVzdChjLCBfc2NoX2lzaWRudW0pCisjZGVmaW5lIElTSURTVChjKQlfc2NoX3Rlc3QoYywgX3NjaF9pc2lkc3QpCisjZGVmaW5lIElTX0lTT0JBU0lDKGMpCV9zY2hfdGVzdChjLCBfc2NoX2lzYmFzaWMpCisjZGVmaW5lIElTX1ZTUEFDRShjKQlfc2NoX3Rlc3QoYywgX3NjaF9pc3ZzcCkKKyNkZWZpbmUgSVNfTlZTUEFDRShjKQlfc2NoX3Rlc3QoYywgX3NjaF9pc252c3ApCisjZGVmaW5lIElTX1NQQUNFX09SX05VTChjKQlfc2NoX3Rlc3QoYywgX3NjaF9pc2NwcHNwKQorCisvKiBDaGFyYWN0ZXIgdHJhbnNmb3JtYXRpb24uICAqLworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgIF9zY2hfdG91cHBlclsyNTZdOworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgIF9zY2hfdG9sb3dlclsyNTZdOworI2RlZmluZSBUT1VQUEVSKGMpIF9zY2hfdG91cHBlclsoYykgJiAweGZmXQorI2RlZmluZSBUT0xPV0VSKGMpIF9zY2hfdG9sb3dlclsoYykgJiAweGZmXQorCisvKiBQcmV2ZW50IHRoZSB1c2VycyBvZiBzYWZlLWN0eXBlLmggZnJvbSBhY2NpZGVudGx5IHVzaW5nIHRoZSByb3V0aW5lcworICAgZnJvbSBjdHlwZS5oLiAgSW5pdGlhbGx5LCB0aGUgYXBwcm9hY2ggd2FzIHRvIHByb2R1Y2UgYW4gZXJyb3Igd2hlbgorICAgZGV0ZWN0aW5nIHRoYXQgY3R5cGUuaCBoYXMgYmVlbiBpbmNsdWRlZC4gIEJ1dCB0aGlzIHdhcyBjYXVzaW5nCisgICB0cm91YmxlIGFzIGN0eXBlLmggbWlnaHQgZ2V0IGluZGlyZWN0bHkgaW5jbHVkZWQgYXMgYSByZXN1bHQgb2YKKyAgIGluY2x1ZGluZyBhbm90aGVyIHN5c3RlbSBoZWFkZXIgKGZvciBpbnN0YW5jZSBnbnVsaWIncyBzdGRpbnQuaCkuCisgICBTbyB3ZSBpbmNsdWRlIGN0eXBlLmggaGVyZSBhbmQgdGhlbiBpbW1lZGlhdGVseSByZWRlZmluZSBpdHMgbWFjcm9zLiAgKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjdW5kZWYgaXNhbHBoYQorI2RlZmluZSBpc2FscGhhKGMpIGRvX25vdF91c2VfaXNhbHBoYV93aXRoX3NhZmVfY3R5cGUKKyN1bmRlZiBpc2FsbnVtCisjZGVmaW5lIGlzYWxudW0oYykgZG9fbm90X3VzZV9pc2FsbnVtX3dpdGhfc2FmZV9jdHlwZQorI3VuZGVmIGlzY250cmwKKyNkZWZpbmUgaXNjbnRybChjKSBkb19ub3RfdXNlX2lzY250cmxfd2l0aF9zYWZlX2N0eXBlCisjdW5kZWYgaXNkaWdpdAorI2RlZmluZSBpc2RpZ2l0KGMpIGRvX25vdF91c2VfaXNkaWdpdF93aXRoX3NhZmVfY3R5cGUKKyN1bmRlZiBpc2dyYXBoCisjZGVmaW5lIGlzZ3JhcGgoYykgZG9fbm90X3VzZV9pc2dyYXBoX3dpdGhfc2FmZV9jdHlwZQorI3VuZGVmIGlzbG93ZXIKKyNkZWZpbmUgaXNsb3dlcihjKSBkb19ub3RfdXNlX2lzbG93ZXJfd2l0aF9zYWZlX2N0eXBlCisjdW5kZWYgaXNwcmludAorI2RlZmluZSBpc3ByaW50KGMpIGRvX25vdF91c2VfaXNwcmludF93aXRoX3NhZmVfY3R5cGUKKyN1bmRlZiBpc3B1bmN0CisjZGVmaW5lIGlzcHVuY3QoYykgZG9fbm90X3VzZV9pc3B1bmN0X3dpdGhfc2FmZV9jdHlwZQorI3VuZGVmIGlzc3BhY2UKKyNkZWZpbmUgaXNzcGFjZShjKSBkb19ub3RfdXNlX2lzc3BhY2Vfd2l0aF9zYWZlX2N0eXBlCisjdW5kZWYgaXN1cHBlcgorI2RlZmluZSBpc3VwcGVyKGMpIGRvX25vdF91c2VfaXN1cHBlcl93aXRoX3NhZmVfY3R5cGUKKyN1bmRlZiBpc3hkaWdpdAorI2RlZmluZSBpc3hkaWdpdChjKSBkb19ub3RfdXNlX2lzeGRpZ2l0X3dpdGhfc2FmZV9jdHlwZQorI3VuZGVmIHRvdXBwZXIKKyNkZWZpbmUgdG91cHBlcihjKSBkb19ub3RfdXNlX3RvdXBwZXJfd2l0aF9zYWZlX2N0eXBlCisjdW5kZWYgdG9sb3dlcgorI2RlZmluZSB0b2xvd2VyKGMpIGRvX25vdF91c2VfdG9sb3dlcl93aXRoX3NhZmVfY3R5cGUKKworI2VuZGlmIC8qIFNBRkVfQ1RZUEVfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3NiaXRtYXAuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9zYml0bWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UyYmM3MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9zYml0bWFwLmgKQEAgLTAsMCArMSwyNzAgQEAKKy8qIFNpbXBsZSBiaXRtYXBzLgorICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX1NCSVRNQVBfSAorI2RlZmluZSBHQ0NfU0JJVE1BUF9ICisKKy8qIEl0J3Mgbm90IGNsZWFyIHlldCB3aGV0aGVyIHVzaW5nIGJpdG1hcC5bY2hdIHdpbGwgYmUgYSB3aW4uCisgICBJdCBzaG91bGQgYmUgc3RyYWlnaHRmb3J3YXJkIHRvIGNvbnZlcnQgc28gZm9yIG5vdyB3ZSBrZWVwIHRoaW5ncyBzaW1wbGUKKyAgIHdoaWxlIG1vcmUgaW1wb3J0YW50IGlzc3VlcyBhcmUgZGVhbHQgd2l0aC4gICovCisKKyNkZWZpbmUgU0JJVE1BUF9FTFRfQklUUyAoKHVuc2lnbmVkKSBIT1NUX0JJVFNfUEVSX1dJREVTVF9GQVNUX0lOVCkKKyNkZWZpbmUgU0JJVE1BUF9FTFRfVFlQRSB1bnNpZ25lZCBIT1NUX1dJREVTVF9GQVNUX0lOVAorCisvKiBDYW4ndCB1c2UgU0JJVE1BUF9FTFRfQklUUyBpbiB0aGlzIG1hY3JvIGJlY2F1c2UgaXQgY29udGFpbnMgYQorICAgY2FzdC4gIFRoZXJlIGlzIG5vIHBlcmZlY3QgbWFjcm8gaW4gR0NDIHRvIHRlc3QgYWdhaW5zdC4gIFRoaXMKKyAgIHN1ZmZpY2VzIGZvciByb3VnaGx5IDk5JSBvZiB0aGUgaG9zdHMgd2UgcnVuIG9uLCBhbmQgdGhlIHJlc3QKKyAgIGRvbid0IGhhdmUgMjU2IGJpdCBpbnRlZ2Vycy4gICovCisjaWYgSE9TVF9CSVRTX1BFUl9XSURFU1RfRkFTVF9JTlQgPiAyNTUKKyNlcnJvciBOZWVkIHRvIGluY3JlYXNlIHNpemUgb2YgZGF0YXR5cGUgdXNlZCBmb3IgcG9wY291bnQKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBzaW1wbGVfYml0bWFwX2RlZgoreworICB1bnNpZ25lZCBjaGFyICpwb3Bjb3VudDsgICAgICAvKiBQb3B1bGF0aW9uIGNvdW50LiAgKi8KKyAgdW5zaWduZWQgaW50IG5fYml0czsJCS8qIE51bWJlciBvZiBiaXRzLiAgKi8KKyAgdW5zaWduZWQgaW50IHNpemU7CQkvKiBTaXplIGluIGVsZW1lbnRzLiAgKi8KKyAgU0JJVE1BUF9FTFRfVFlQRSBlbG1zWzFdOwkvKiBUaGUgZWxlbWVudHMuICAqLworfSAqc2JpdG1hcDsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IHNpbXBsZV9iaXRtYXBfZGVmICpjb25zdF9zYml0bWFwOworCit0eXBlZGVmIFNCSVRNQVBfRUxUX1RZUEUgKnNiaXRtYXBfcHRyOwordHlwZWRlZiBjb25zdCBTQklUTUFQX0VMVF9UWVBFICpjb25zdF9zYml0bWFwX3B0cjsKKworLyogUmV0dXJuIHRoZSBzZXQgc2l6ZSBuZWVkZWQgZm9yIE4gZWxlbWVudHMuICAqLworI2RlZmluZSBTQklUTUFQX1NFVF9TSVpFKE4pICgoKE4pICsgU0JJVE1BUF9FTFRfQklUUyAtIDEpIC8gU0JJVE1BUF9FTFRfQklUUykKKyNkZWZpbmUgU0JJVE1BUF9TSVpFX0JZVEVTKEJJVE1BUCkgKChCSVRNQVApLT5zaXplICogc2l6ZW9mIChTQklUTUFQX0VMVF9UWVBFKSkKKworLyogVGVzdCBpZiBiaXQgbnVtYmVyIGJpdG5vIGluIHRoZSBiaXRtYXAgaXMgc2V0LiAgKi8KKyNkZWZpbmUgVEVTVF9CSVQoQklUTUFQLCBCSVROTykgXAorKChCSVRNQVApLT5lbG1zIFsoQklUTk8pIC8gU0JJVE1BUF9FTFRfQklUU10gPj4gKEJJVE5PKSAlIFNCSVRNQVBfRUxUX0JJVFMgJiAxKQorCisvKiBTZXQgYml0IG51bWJlciBCSVROTyBpbiB0aGUgc2JpdG1hcCBNQVAuICBVcGRhdGVzIHBvcHVsYXRpb24gY291bnQKKyAgIGlmIHRoaXMgYml0bWFwIGhhcyBvbmUuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK1NFVF9CSVQgKHNiaXRtYXAgbWFwLCB1bnNpZ25lZCBpbnQgYml0bm8pCit7CisgIGlmIChtYXAtPnBvcGNvdW50KQorICAgIHsKKyAgICAgIGJvb2wgb2xkYml0OworICAgICAgb2xkYml0ID0gVEVTVF9CSVQgKG1hcCwgYml0bm8pOworICAgICAgaWYgKCFvbGRiaXQpCisJbWFwLT5wb3Bjb3VudFtiaXRubyAvIFNCSVRNQVBfRUxUX0JJVFNdKys7CisgICAgfQorICBtYXAtPmVsbXNbYml0bm8gLyBTQklUTUFQX0VMVF9CSVRTXQorICAgIHw9IChTQklUTUFQX0VMVF9UWVBFKSAxIDw8IChiaXRubykgJSBTQklUTUFQX0VMVF9CSVRTOworfQorCisKKworLyogUmVzZXQgYml0IG51bWJlciBCSVROTyBpbiB0aGUgc2JpdG1hcCBNQVAuICBVcGRhdGVzIHBvcHVsYXRpb24KKyAgIGNvdW50IGlmIHRoaXMgYml0bWFwIGhhcyBvbmUuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK1JFU0VUX0JJVCAoc2JpdG1hcCBtYXAsICB1bnNpZ25lZCBpbnQgYml0bm8pCit7CisgIGlmIChtYXAtPnBvcGNvdW50KQorICAgIHsKKyAgICAgIGJvb2wgb2xkYml0OworICAgICAgb2xkYml0ID0gVEVTVF9CSVQgKG1hcCwgYml0bm8pOworICAgICAgaWYgKG9sZGJpdCkKKwltYXAtPnBvcGNvdW50W2JpdG5vIC8gU0JJVE1BUF9FTFRfQklUU10tLTsKKyAgICB9CisgIG1hcC0+ZWxtc1tiaXRubyAvIFNCSVRNQVBfRUxUX0JJVFNdCisgICAgJj0gfigoU0JJVE1BUF9FTFRfVFlQRSkgMSA8PCAoYml0bm8pICUgU0JJVE1BUF9FTFRfQklUUyk7Cit9CisKKy8qIFRoZSBpdGVyYXRvciBmb3Igc2JpdG1hcC4gICovCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qIFRoZSBwb2ludGVyIHRvIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBiaXRtYXAuICAqLworICBjb25zdCBTQklUTUFQX0VMVF9UWVBFICpwdHI7CisKKyAgLyogVGhlIHNpemUgb2YgdGhlIGJpdG1hcC4gICovCisgIHVuc2lnbmVkIGludCBzaXplOworCisgIC8qIFRoZSBjdXJyZW50IHdvcmQgaW5kZXguICAqLworICB1bnNpZ25lZCBpbnQgd29yZF9udW07CisKKyAgLyogVGhlIGN1cnJlbnQgYml0IGluZGV4IChub3QgbW9kdWxvIFNCSVRNQVBfRUxUX0JJVFMpLiAgKi8KKyAgdW5zaWduZWQgaW50IGJpdF9udW07CisKKyAgLyogVGhlIHdvcmRzIGN1cnJlbnRseSB2aXNpdGVkLiAgKi8KKyAgU0JJVE1BUF9FTFRfVFlQRSB3b3JkOworfSBzYml0bWFwX2l0ZXJhdG9yOworCisvKiBJbml0aWFsaXplIHRoZSBpdGVyYXRvciBJIHdpdGggc2JpdG1hcCBCTVAgYW5kIHRoZSBpbml0aWFsIGluZGV4CisgICBNSU4uICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK3NiaXRtYXBfaXRlcl9pbml0IChzYml0bWFwX2l0ZXJhdG9yICppLCBjb25zdF9zYml0bWFwIGJtcCwgdW5zaWduZWQgaW50IG1pbikKK3sKKyAgaS0+d29yZF9udW0gPSBtaW4gLyAodW5zaWduZWQgaW50KSBTQklUTUFQX0VMVF9CSVRTOworICBpLT5iaXRfbnVtID0gbWluOworICBpLT5zaXplID0gYm1wLT5zaXplOworICBpLT5wdHIgPSBibXAtPmVsbXM7CisKKyAgaWYgKGktPndvcmRfbnVtID49IGktPnNpemUpCisgICAgaS0+d29yZCA9IDA7CisgIGVsc2UKKyAgICBpLT53b3JkID0gKGktPnB0cltpLT53b3JkX251bV0KKwkgICAgICAgPj4gKGktPmJpdF9udW0gJSAodW5zaWduZWQgaW50KSBTQklUTUFQX0VMVF9CSVRTKSk7Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIHdlIGhhdmUgbW9yZSBiaXRzIHRvIHZpc2l0LCBpbiB3aGljaCBjYXNlICpOIGlzIHNldAorICAgdG8gdGhlIGluZGV4IG9mIHRoZSBiaXQgdG8gYmUgdmlzaXRlZC4gIE90aGVyd2lzZSwgcmV0dXJuCisgICBmYWxzZS4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorc2JpdG1hcF9pdGVyX2NvbmQgKHNiaXRtYXBfaXRlcmF0b3IgKmksIHVuc2lnbmVkIGludCAqbikKK3sKKyAgLyogU2tpcCB3b3JkcyB0aGF0IGFyZSB6ZXJvcy4gICovCisgIGZvciAoOyBpLT53b3JkID09IDA7IGktPndvcmQgPSBpLT5wdHJbaS0+d29yZF9udW1dKQorICAgIHsKKyAgICAgIGktPndvcmRfbnVtKys7CisKKyAgICAgIC8qIElmIHdlIGhhdmUgcmVhY2hlZCB0aGUgZW5kLCBicmVhay4gICovCisgICAgICBpZiAoaS0+d29yZF9udW0gPj0gaS0+c2l6ZSkKKwlyZXR1cm4gZmFsc2U7CisKKyAgICAgIGktPmJpdF9udW0gPSBpLT53b3JkX251bSAqIFNCSVRNQVBfRUxUX0JJVFM7CisgICAgfQorCisgIC8qIFNraXAgYml0cyB0aGF0IGFyZSB6ZXJvLiAgKi8KKyAgZm9yICg7IChpLT53b3JkICYgMSkgPT0gMDsgaS0+d29yZCA+Pj0gMSkKKyAgICBpLT5iaXRfbnVtKys7CisKKyAgKm4gPSBpLT5iaXRfbnVtOworCisgIHJldHVybiB0cnVlOworfQorCisvKiBBZHZhbmNlIHRvIHRoZSBuZXh0IGJpdC4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc2JpdG1hcF9pdGVyX25leHQgKHNiaXRtYXBfaXRlcmF0b3IgKmkpCit7CisgIGktPndvcmQgPj49IDE7CisgIGktPmJpdF9udW0rKzsKK30KKworLyogTG9vcCBvdmVyIGFsbCBlbGVtZW50cyBvZiBTQklUTUFQLCBzdGFydGluZyB3aXRoIE1JTi4gIEluIGVhY2gKKyAgIGl0ZXJhdGlvbiwgTiBpcyBzZXQgdG8gdGhlIGluZGV4IG9mIHRoZSBiaXQgYmVpbmcgdmlzaXRlZC4gIElURVIgaXMKKyAgIGFuIGluc3RhbmNlIG9mIHNiaXRtYXBfaXRlcmF0b3IgdXNlZCB0byBpdGVyYXRlIHRoZSBiaXRtYXAuICAqLworCisjZGVmaW5lIEVYRUNVVEVfSUZfU0VUX0lOX1NCSVRNQVAoU0JJVE1BUCwgTUlOLCBOLCBJVEVSKQlcCisgIGZvciAoc2JpdG1hcF9pdGVyX2luaXQgKCYoSVRFUiksIChTQklUTUFQKSwgKE1JTikpOwkJXAorICAgICAgIHNiaXRtYXBfaXRlcl9jb25kICgmKElURVIpLCAmKE4pKTsJCQlcCisgICAgICAgc2JpdG1hcF9pdGVyX25leHQgKCYoSVRFUikpKQorCisjZGVmaW5lIEVYRUNVVEVfSUZfU0VUX0lOX1NCSVRNQVBfUkVWKFNCSVRNQVAsIE4sIENPREUpCQkJXAorZG8gewkJCQkJCQkJCVwKKyAgdW5zaWduZWQgaW50IHdvcmRfbnVtXzsJCQkJCQlcCisgIHVuc2lnbmVkIGludCBiaXRfbnVtXzsJCQkJCQlcCisgIHVuc2lnbmVkIGludCBzaXplXyA9IChTQklUTUFQKS0+c2l6ZTsJCQkJCVwKKyAgU0JJVE1BUF9FTFRfVFlQRSAqcHRyXyA9IChTQklUTUFQKS0+ZWxtczsJCQkJXAorCQkJCQkJCQkJXAorICBmb3IgKHdvcmRfbnVtXyA9IHNpemVfOyB3b3JkX251bV8gPiAwOyB3b3JkX251bV8tLSkJCQlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIFNCSVRNQVBfRUxUX1RZUEUgd29yZF8gPSBwdHJfW3dvcmRfbnVtXyAtIDFdOwkJCVwKKwkJCQkJCQkJCVwKKyAgICAgIGlmICh3b3JkXyAhPSAwKQkJCQkJCQlcCisJZm9yIChiaXRfbnVtXyA9IFNCSVRNQVBfRUxUX0JJVFM7IGJpdF9udW1fID4gMDsgYml0X251bV8tLSkJXAorCSAgewkJCQkJCQkJXAorCSAgICBTQklUTUFQX0VMVF9UWVBFIF9tYXNrID0gKFNCSVRNQVBfRUxUX1RZUEUpMSA8PCAoYml0X251bV8gLSAxKTtcCisJCQkJCQkJCQlcCisJICAgIGlmICgod29yZF8gJiBfbWFzaykgIT0gMCkJCQkJCVwKKwkgICAgICB7CQkJCQkJCQlcCisJCXdvcmRfICY9IH4gX21hc2s7CQkJCQlcCisJCShOKSA9ICh3b3JkX251bV8gLSAxKSAqIFNCSVRNQVBfRUxUX0JJVFMgKyBiaXRfbnVtXyAtIDE7XAorCQlDT0RFOwkJCQkJCQlcCisJCWlmICh3b3JkXyA9PSAwKQkJCQkJCVwKKwkJICBicmVhazsJCQkJCQlcCisJICAgICAgfQkJCQkJCQkJXAorCSAgfQkJCQkJCQkJXAorICAgIH0JCQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIHNiaXRtYXBfZnJlZShNQVApCQkoZnJlZSgoTUFQKS0+cG9wY291bnQpLCBmcmVlKChNQVApKSkKKyNkZWZpbmUgc2JpdG1hcF92ZWN0b3JfZnJlZShWRUMpCWZyZWUoVkVDKQorCitzdHJ1Y3QgaW50X2xpc3Q7CisKK2V4dGVybiB2b2lkIGR1bXBfc2JpdG1hcCAoRklMRSAqLCBjb25zdF9zYml0bWFwKTsKK2V4dGVybiB2b2lkIGR1bXBfc2JpdG1hcF9maWxlIChGSUxFICosIGNvbnN0X3NiaXRtYXApOworZXh0ZXJuIHZvaWQgZHVtcF9zYml0bWFwX3ZlY3RvciAoRklMRSAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2JpdG1hcCAqLAorCQkJCSBpbnQpOworZXh0ZXJuIHNiaXRtYXAgc2JpdG1hcF9hbGxvYyAodW5zaWduZWQgaW50KTsKK2V4dGVybiBzYml0bWFwIHNiaXRtYXBfYWxsb2Nfd2l0aF9wb3Bjb3VudCAodW5zaWduZWQgaW50KTsKK2V4dGVybiBzYml0bWFwICpzYml0bWFwX3ZlY3Rvcl9hbGxvYyAodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHNiaXRtYXAgc2JpdG1hcF9yZXNpemUgKHNiaXRtYXAsIHVuc2lnbmVkIGludCwgaW50KTsKK2V4dGVybiB2b2lkIHNiaXRtYXBfY29weSAoc2JpdG1hcCwgY29uc3Rfc2JpdG1hcCk7CitleHRlcm4gdm9pZCBzYml0bWFwX2NvcHlfbiAoc2JpdG1hcCwgY29uc3Rfc2JpdG1hcCwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBpbnQgc2JpdG1hcF9lcXVhbCAoY29uc3Rfc2JpdG1hcCwgY29uc3Rfc2JpdG1hcCk7CitleHRlcm4gYm9vbCBzYml0bWFwX2VtcHR5X3AgKGNvbnN0X3NiaXRtYXApOworZXh0ZXJuIGJvb2wgc2JpdG1hcF9yYW5nZV9lbXB0eV9wIChjb25zdF9zYml0bWFwLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBzYml0bWFwX3plcm8gKHNiaXRtYXApOworZXh0ZXJuIHZvaWQgc2JpdG1hcF9vbmVzIChzYml0bWFwKTsKK2V4dGVybiB2b2lkIHNiaXRtYXBfdmVjdG9yX3plcm8gKHNiaXRtYXAgKiwgdW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIHNiaXRtYXBfdmVjdG9yX29uZXMgKHNiaXRtYXAgKiwgdW5zaWduZWQgaW50KTsKKworZXh0ZXJuIHZvaWQgc2JpdG1hcF91bmlvbl9vZl9kaWZmIChzYml0bWFwLCBjb25zdF9zYml0bWFwLCBjb25zdF9zYml0bWFwLCBjb25zdF9zYml0bWFwKTsKK2V4dGVybiBib29sIHNiaXRtYXBfdW5pb25fb2ZfZGlmZl9jZyAoc2JpdG1hcCwgY29uc3Rfc2JpdG1hcCwgY29uc3Rfc2JpdG1hcCwgY29uc3Rfc2JpdG1hcCk7CitleHRlcm4gdm9pZCBzYml0bWFwX2RpZmZlcmVuY2UgKHNiaXRtYXAsIGNvbnN0X3NiaXRtYXAsIGNvbnN0X3NiaXRtYXApOworZXh0ZXJuIHZvaWQgc2JpdG1hcF9ub3QgKHNiaXRtYXAsIGNvbnN0X3NiaXRtYXApOworZXh0ZXJuIHZvaWQgc2JpdG1hcF9hX29yX2JfYW5kX2MgKHNiaXRtYXAsIGNvbnN0X3NiaXRtYXAsIGNvbnN0X3NiaXRtYXAsIGNvbnN0X3NiaXRtYXApOworZXh0ZXJuIGJvb2wgc2JpdG1hcF9hX29yX2JfYW5kX2NfY2cgKHNiaXRtYXAsIGNvbnN0X3NiaXRtYXAsIGNvbnN0X3NiaXRtYXAsIGNvbnN0X3NiaXRtYXApOworZXh0ZXJuIHZvaWQgc2JpdG1hcF9hX2FuZF9iX29yX2MgKHNiaXRtYXAsIGNvbnN0X3NiaXRtYXAsIGNvbnN0X3NiaXRtYXAsIGNvbnN0X3NiaXRtYXApOworZXh0ZXJuIGJvb2wgc2JpdG1hcF9hX2FuZF9iX29yX2NfY2cgKHNiaXRtYXAsIGNvbnN0X3NiaXRtYXAsIGNvbnN0X3NiaXRtYXAsIGNvbnN0X3NiaXRtYXApOworZXh0ZXJuIGJvb2wgc2JpdG1hcF9hbnlfY29tbW9uX2JpdHMgKGNvbnN0X3NiaXRtYXAsIGNvbnN0X3NiaXRtYXApOworZXh0ZXJuIHZvaWQgc2JpdG1hcF9hX2FuZF9iIChzYml0bWFwLCBjb25zdF9zYml0bWFwLCBjb25zdF9zYml0bWFwKTsKK2V4dGVybiBib29sIHNiaXRtYXBfYV9hbmRfYl9jZyAoc2JpdG1hcCwgY29uc3Rfc2JpdG1hcCwgY29uc3Rfc2JpdG1hcCk7CitleHRlcm4gdm9pZCBzYml0bWFwX2Ffb3JfYiAoc2JpdG1hcCwgY29uc3Rfc2JpdG1hcCwgY29uc3Rfc2JpdG1hcCk7CitleHRlcm4gYm9vbCBzYml0bWFwX2Ffb3JfYl9jZyAoc2JpdG1hcCwgY29uc3Rfc2JpdG1hcCwgY29uc3Rfc2JpdG1hcCk7CitleHRlcm4gdm9pZCBzYml0bWFwX2FfeG9yX2IgKHNiaXRtYXAsIGNvbnN0X3NiaXRtYXAsIGNvbnN0X3NiaXRtYXApOworZXh0ZXJuIGJvb2wgc2JpdG1hcF9hX3hvcl9iX2NnIChzYml0bWFwLCBjb25zdF9zYml0bWFwLCBjb25zdF9zYml0bWFwKTsKK2V4dGVybiBib29sIHNiaXRtYXBfYV9zdWJzZXRfYl9wIChjb25zdF9zYml0bWFwLCBjb25zdF9zYml0bWFwKTsKKworZXh0ZXJuIGludCBzYml0bWFwX2ZpcnN0X3NldF9iaXQgKGNvbnN0X3NiaXRtYXApOworZXh0ZXJuIGludCBzYml0bWFwX2xhc3Rfc2V0X2JpdCAoY29uc3Rfc2JpdG1hcCk7CisKK2V4dGVybiB2b2lkIHNiaXRtYXBfaW50ZXJzZWN0X29mX3ByZWRzdWNjIChzYml0bWFwLCBzYml0bWFwICosIGludCwKKwkJCQkJICAgc3RydWN0IGludF9saXN0ICoqKTsKKyNkZWZpbmUgc2JpdG1hcF9pbnRlcnNlY3Rfb2ZfcHJlZGVjZXNzb3JzICBzYml0bWFwX2ludGVyc2VjdF9vZl9wcmVkc3VjYworI2RlZmluZSBzYml0bWFwX2ludGVyc2VjdF9vZl9zdWNjZXNzb3JzICAgIHNiaXRtYXBfaW50ZXJzZWN0X29mX3ByZWRzdWNjCisKK2V4dGVybiB2b2lkIHNiaXRtYXBfdW5pb25fb2ZfcHJlZHN1Y2MgKHNiaXRtYXAsIHNiaXRtYXAgKiwgaW50LAorCQkJCSAgICAgICBzdHJ1Y3QgaW50X2xpc3QgKiopOworI2RlZmluZSBzYml0bWFwX3VuaW9uX29mX3ByZWRlY2Vzc29ycyAgc2JpdG1hcF91bmlvbl9vZl9wcmVkc3VjYworI2RlZmluZSBzYml0bWFwX3VuaW9uX29mX3N1Y2Nlc3NvcnMgICAgc2JpdG1hcF91bmlvbl9vZl9wcmVkc3VjYworCisvKiBJbnRlcnNlY3Rpb24gYW5kIFVuaW9uIG9mIHByZWRzL3N1Y2NzIHVzaW5nIHRoZSBuZXcgZmxvdyBncmFwaAorICAgc3RydWN0dXJlIGluc3RlYWQgb2YgdGhlIHByZWQvc3VjYyBhcnJheXMuICAqLworCitleHRlcm4gdm9pZCBzYml0bWFwX2ludGVyc2VjdGlvbl9vZl9zdWNjcyAoc2JpdG1hcCwgc2JpdG1hcCAqLCBpbnQpOworZXh0ZXJuIHZvaWQgc2JpdG1hcF9pbnRlcnNlY3Rpb25fb2ZfcHJlZHMgKHNiaXRtYXAsIHNiaXRtYXAgKiwgaW50KTsKK2V4dGVybiB2b2lkIHNiaXRtYXBfdW5pb25fb2Zfc3VjY3MgKHNiaXRtYXAsIHNiaXRtYXAgKiwgaW50KTsKK2V4dGVybiB2b2lkIHNiaXRtYXBfdW5pb25fb2ZfcHJlZHMgKHNiaXRtYXAsIHNiaXRtYXAgKiwgaW50KTsKKworZXh0ZXJuIHZvaWQgZGVidWdfc2JpdG1hcCAoY29uc3Rfc2JpdG1hcCk7CitleHRlcm4gc2JpdG1hcCBzYml0bWFwX3JlYWxsb2MgKHNiaXRtYXAsIHVuc2lnbmVkIGludCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzYml0bWFwX3BvcGNvdW50KGNvbnN0X3NiaXRtYXAsIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgc2JpdG1hcF92ZXJpZnlfcG9wY291bnQgKGNvbnN0X3NiaXRtYXApOworI2VuZGlmIC8qICEgR0NDX1NCSVRNQVBfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3NwbGF5LXRyZWUuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9zcGxheS10cmVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdhOTZjNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9zcGxheS10cmVlLmgKQEAgLTAsMCArMSwxNTcgQEAKKy8qIEEgc3BsYXktdHJlZSBkYXRhdHlwZS4gIAorICAgQ29weXJpZ2h0IDE5OTgsIDE5OTksIDIwMDAsIDIwMDIsIDIwMDUsIDIwMDcsIDIwMDkKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgTWFyayBNaXRjaGVsbCAobWFya0BtYXJrbWl0Y2hlbGwuY29tKS4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorICAgCisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bworICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsCisgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKy8qIEZvciBhbiBlYXNpbHkgcmVhZGFibGUgZGVzY3JpcHRpb24gb2Ygc3BsYXktdHJlZXMsIHNlZToKKworICAgICBMZXdpcywgSGFycnkgUi4gYW5kIERlbmVuYmVyZywgTGFycnkuICBEYXRhIFN0cnVjdHVyZXMgYW5kIFRoZWlyCisgICAgIEFsZ29yaXRobXMuICBIYXJwZXItQ29sbGlucywgSW5jLiAgMTk5MS4gIAorCisgICBUaGUgbWFqb3IgZmVhdHVyZSBvZiBzcGxheSB0cmVlcyBpcyB0aGF0IGFsbCBiYXNpYyB0cmVlIG9wZXJhdGlvbnMKKyAgIGFyZSBhbW9ydGl6ZWQgTyhsb2cgbikgdGltZSBmb3IgYSB0cmVlIHdpdGggbiBub2Rlcy4gICovCisKKyNpZm5kZWYgX1NQTEFZX1RSRUVfSAorI2RlZmluZSBfU1BMQVlfVFJFRV9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2luY2x1ZGUgImFuc2lkZWNsLmgiCisKKyNpZm5kZWYgX1dJTjY0CisgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgbGliaV91aG9zdHB0cl90OworICB0eXBlZGVmIGxvbmcgaW50IGxpYmlfc2hvc3RwdHJfdDsKKyNlbHNlCisjaWZkZWYgX19HTlVDX18KKyAgX19leHRlbnNpb25fXworI2VuZGlmCisgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGxpYmlfdWhvc3RwdHJfdDsKKyNpZmRlZiBfX0dOVUNfXworICBfX2V4dGVuc2lvbl9fCisjZW5kaWYKKyAgdHlwZWRlZiBsb25nIGxvbmcgbGliaV9zaG9zdHB0cl90OworI2VuZGlmCisKKyNpZm5kZWYgR1RZCisjZGVmaW5lIEdUWShYKQorI2VuZGlmCisKKy8qIFVzZSB0eXBlZGVmcyBmb3IgdGhlIGtleSBhbmQgZGF0YSB0eXBlcyB0byBmYWNpbGl0YXRlIGNoYW5naW5nCisgICB0aGVzZSB0eXBlcywgaWYgbmVjZXNzYXJ5LiAgVGhlc2UgdHlwZXMgc2hvdWxkIGJlIHN1ZmZpY2llbnRseSB3aWRlCisgICB0aGF0IGFueSBwb2ludGVyIG9yIHNjYWxhciBjYW4gYmUgY2FzdCB0byB0aGVzZSB0eXBlcywgYW5kIHRoZW4KKyAgIGNhc3QgYmFjaywgd2l0aG91dCBsb3NzIG9mIHByZWNpc2lvbi4gICovCit0eXBlZGVmIGxpYmlfdWhvc3RwdHJfdCBzcGxheV90cmVlX2tleTsKK3R5cGVkZWYgbGliaV91aG9zdHB0cl90IHNwbGF5X3RyZWVfdmFsdWU7CisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gZm9yIGEgbm9kZSBpbiB0aGUgdHJlZS4gICovCit0eXBlZGVmIHN0cnVjdCBzcGxheV90cmVlX25vZGVfcyAqc3BsYXlfdHJlZV9ub2RlOworCisvKiBUaGUgdHlwZSBvZiBhIGZ1bmN0aW9uIHdoaWNoIGNvbXBhcmVzIHR3byBzcGxheS10cmVlIGtleXMuICBUaGUKKyAgIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gdmFsdWVzIGFzIGZvciBxc29ydC4gICovCit0eXBlZGVmIGludCAoKnNwbGF5X3RyZWVfY29tcGFyZV9mbikgKHNwbGF5X3RyZWVfa2V5LCBzcGxheV90cmVlX2tleSk7CisKKy8qIFRoZSB0eXBlIG9mIGEgZnVuY3Rpb24gdXNlZCB0byBkZWFsbG9jYXRlIGFueSByZXNvdXJjZXMgYXNzb2NpYXRlZAorICAgd2l0aCB0aGUga2V5LiAgKi8KK3R5cGVkZWYgdm9pZCAoKnNwbGF5X3RyZWVfZGVsZXRlX2tleV9mbikgKHNwbGF5X3RyZWVfa2V5KTsKKworLyogVGhlIHR5cGUgb2YgYSBmdW5jdGlvbiB1c2VkIHRvIGRlYWxsb2NhdGUgYW55IHJlc291cmNlcyBhc3NvY2lhdGVkCisgICB3aXRoIHRoZSB2YWx1ZS4gICovCit0eXBlZGVmIHZvaWQgKCpzcGxheV90cmVlX2RlbGV0ZV92YWx1ZV9mbikgKHNwbGF5X3RyZWVfdmFsdWUpOworCisvKiBUaGUgdHlwZSBvZiBhIGZ1bmN0aW9uIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIHRoZSB0cmVlLiAgKi8KK3R5cGVkZWYgaW50ICgqc3BsYXlfdHJlZV9mb3JlYWNoX2ZuKSAoc3BsYXlfdHJlZV9ub2RlLCB2b2lkKik7CisKKy8qIFRoZSB0eXBlIG9mIGEgZnVuY3Rpb24gdXNlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRyZWUgcm9vdCBhbmQKKyAgIG5vZGUgc3RydWN0dXJlcy4gIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZDsKKyAgIHRoZSBzZWNvbmQgaXMgYSBkYXRhIHBvaW50ZXIgdGhlIHNwbGF5IHRyZWUgZnVuY3Rpb25zIHBhc3MgdGhyb3VnaAorICAgdG8gdGhlIGFsbG9jYXRvci4gIFRoaXMgZnVuY3Rpb24gbXVzdCBuZXZlciByZXR1cm4gemVyby4gICovCit0eXBlZGVmIHZvaWQgKigqc3BsYXlfdHJlZV9hbGxvY2F0ZV9mbikgKGludCwgdm9pZCAqKTsKKworLyogVGhlIHR5cGUgb2YgYSBmdW5jdGlvbiB1c2VkIHRvIGZyZWUgbWVtb3J5IGFsbG9jYXRlZCB1c2luZyB0aGUKKyAgIGNvcnJlc3BvbmRpbmcgc3BsYXlfdHJlZV9hbGxvY2F0ZV9mbi4gIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUKKyAgIG1lbW9yeSB0byBiZSBmcmVlZDsgdGhlIGxhdHRlciBpcyBhIGRhdGEgcG9pbnRlciB0aGUgc3BsYXkgdHJlZQorICAgZnVuY3Rpb25zIHBhc3MgdGhyb3VnaCB0byB0aGUgZnJlZXIuICAqLwordHlwZWRlZiB2b2lkICgqc3BsYXlfdHJlZV9kZWFsbG9jYXRlX2ZuKSAodm9pZCAqLCB2b2lkICopOworCisvKiBUaGUgbm9kZXMgaW4gdGhlIHNwbGF5IHRyZWUuICAqLworc3RydWN0IEdUWSgoKSkgc3BsYXlfdHJlZV9ub2RlX3MgeworICAvKiBUaGUga2V5LiAgKi8KKyAgc3BsYXlfdHJlZV9rZXkgR1RZICgodXNlX3BhcmFtMSkpIGtleTsKKworICAvKiBUaGUgdmFsdWUuICAqLworICBzcGxheV90cmVlX3ZhbHVlIEdUWSAoKHVzZV9wYXJhbTIpKSB2YWx1ZTsKKworICAvKiBUaGUgbGVmdCBhbmQgcmlnaHQgY2hpbGRyZW4sIHJlc3BlY3RpdmVseS4gICovCisgIHNwbGF5X3RyZWVfbm9kZSBHVFkgKCh1c2VfcGFyYW1zKSkgbGVmdDsKKyAgc3BsYXlfdHJlZV9ub2RlIEdUWSAoKHVzZV9wYXJhbXMpKSByaWdodDsKK307CisKKy8qIFRoZSBzcGxheSB0cmVlIGl0c2VsZi4gICovCitzdHJ1Y3QgR1RZKCgpKSBzcGxheV90cmVlX3MgeworICAvKiBUaGUgcm9vdCBvZiB0aGUgdHJlZS4gICovCisgIHNwbGF5X3RyZWVfbm9kZSBHVFkgKCh1c2VfcGFyYW1zKSkgcm9vdDsKKworICAvKiBUaGUgY29tcGFyaXNpb24gZnVuY3Rpb24uICAqLworICBzcGxheV90cmVlX2NvbXBhcmVfZm4gY29tcDsKKworICAvKiBUaGUgZGVhbGxvY2F0ZS1rZXkgZnVuY3Rpb24uICBOVUxMIGlmIG5vIGNsZWFudXAgaXMgbmVjZXNzYXJ5LiAgKi8KKyAgc3BsYXlfdHJlZV9kZWxldGVfa2V5X2ZuIGRlbGV0ZV9rZXk7CisKKyAgLyogVGhlIGRlYWxsb2NhdGUtdmFsdWUgZnVuY3Rpb24uICBOVUxMIGlmIG5vIGNsZWFudXAgaXMgbmVjZXNzYXJ5LiAgKi8KKyAgc3BsYXlfdHJlZV9kZWxldGVfdmFsdWVfZm4gZGVsZXRlX3ZhbHVlOworCisgIC8qIEFsbG9jYXRlL2ZyZWUgZnVuY3Rpb25zLCBhbmQgYSBkYXRhIHBvaW50ZXIgdG8gcGFzcyB0byB0aGVtLiAgKi8KKyAgc3BsYXlfdHJlZV9hbGxvY2F0ZV9mbiBhbGxvY2F0ZTsKKyAgc3BsYXlfdHJlZV9kZWFsbG9jYXRlX2ZuIGRlYWxsb2NhdGU7CisgIHZvaWQgKiBHVFkoKHNraXApKSBhbGxvY2F0ZV9kYXRhOworfTsKKwordHlwZWRlZiBzdHJ1Y3Qgc3BsYXlfdHJlZV9zICpzcGxheV90cmVlOworCitleHRlcm4gc3BsYXlfdHJlZSBzcGxheV90cmVlX25ldyAoc3BsYXlfdHJlZV9jb21wYXJlX2ZuLAorCQkJCSAgc3BsYXlfdHJlZV9kZWxldGVfa2V5X2ZuLAorCQkJCSAgc3BsYXlfdHJlZV9kZWxldGVfdmFsdWVfZm4pOworZXh0ZXJuIHNwbGF5X3RyZWUgc3BsYXlfdHJlZV9uZXdfd2l0aF9hbGxvY2F0b3IgKHNwbGF5X3RyZWVfY29tcGFyZV9mbiwKKwkJCQkJCSBzcGxheV90cmVlX2RlbGV0ZV9rZXlfZm4sCisJCQkJCQkgc3BsYXlfdHJlZV9kZWxldGVfdmFsdWVfZm4sCisJCQkJCQkgc3BsYXlfdHJlZV9hbGxvY2F0ZV9mbiwKKwkJCQkJCSBzcGxheV90cmVlX2RlYWxsb2NhdGVfZm4sCisJCQkJCQkgdm9pZCAqKTsKK2V4dGVybiB2b2lkIHNwbGF5X3RyZWVfZGVsZXRlIChzcGxheV90cmVlKTsKK2V4dGVybiBzcGxheV90cmVlX25vZGUgc3BsYXlfdHJlZV9pbnNlcnQgKHNwbGF5X3RyZWUsCisJCQkJCSAgc3BsYXlfdHJlZV9rZXksCisJCQkJCSAgc3BsYXlfdHJlZV92YWx1ZSk7CitleHRlcm4gdm9pZCBzcGxheV90cmVlX3JlbW92ZQkoc3BsYXlfdHJlZSwgc3BsYXlfdHJlZV9rZXkpOworZXh0ZXJuIHNwbGF5X3RyZWVfbm9kZSBzcGxheV90cmVlX2xvb2t1cCAoc3BsYXlfdHJlZSwgc3BsYXlfdHJlZV9rZXkpOworZXh0ZXJuIHNwbGF5X3RyZWVfbm9kZSBzcGxheV90cmVlX3ByZWRlY2Vzc29yIChzcGxheV90cmVlLCBzcGxheV90cmVlX2tleSk7CitleHRlcm4gc3BsYXlfdHJlZV9ub2RlIHNwbGF5X3RyZWVfc3VjY2Vzc29yIChzcGxheV90cmVlLCBzcGxheV90cmVlX2tleSk7CitleHRlcm4gc3BsYXlfdHJlZV9ub2RlIHNwbGF5X3RyZWVfbWF4IChzcGxheV90cmVlKTsKK2V4dGVybiBzcGxheV90cmVlX25vZGUgc3BsYXlfdHJlZV9taW4gKHNwbGF5X3RyZWUpOworZXh0ZXJuIGludCBzcGxheV90cmVlX2ZvcmVhY2ggKHNwbGF5X3RyZWUsIHNwbGF5X3RyZWVfZm9yZWFjaF9mbiwgdm9pZCopOworZXh0ZXJuIGludCBzcGxheV90cmVlX2NvbXBhcmVfaW50cyAoc3BsYXlfdHJlZV9rZXksIHNwbGF5X3RyZWVfa2V5KTsKK2V4dGVybiBpbnQgc3BsYXlfdHJlZV9jb21wYXJlX3BvaW50ZXJzIChzcGxheV90cmVlX2tleSwJc3BsYXlfdHJlZV9rZXkpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogX1NQTEFZX1RSRUVfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3N0YXRpc3RpY3MuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9zdGF0aXN0aWNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUyMWU4NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9zdGF0aXN0aWNzLmgKQEAgLTAsMCArMSw1MSBAQAorLyogTWVtb3J5IGFuZCBvcHRpbWl6YXRpb24gc3RhdGlzdGljcyBoZWxwZXJzLgorICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA3LCAyMDA4CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IEN5Z251cyBTb2x1dGlvbnMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworICAgR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19TVEFUSVNUSUNTCisjZGVmaW5lIEdDQ19TVEFUSVNUSUNTCisKKyNpZmRlZiBHQVRIRVJfU1RBVElTVElDUworI2RlZmluZSBNRU1fU1RBVF9ERUNMICwgY29uc3QgY2hhciAqIEFSR19VTlVTRUQgKF9sb2NfbmFtZSksIGludCBBUkdfVU5VU0VEIChfbG9jX2xpbmUpLCBjb25zdCBjaGFyICogQVJHX1VOVVNFRCAoX2xvY19mdW5jdGlvbikKKyNkZWZpbmUgQUxPTkVfTUVNX1NUQVRfREVDTCBjb25zdCBjaGFyICogQVJHX1VOVVNFRCAoX2xvY19uYW1lKSwgaW50IEFSR19VTlVTRUQgKF9sb2NfbGluZSksIGNvbnN0IGNoYXIgKiBBUkdfVU5VU0VEIChfbG9jX2Z1bmN0aW9uKQorI2RlZmluZSBQQVNTX01FTV9TVEFUICwgX2xvY19uYW1lLCBfbG9jX2xpbmUsICBfbG9jX2Z1bmN0aW9uCisjZGVmaW5lIEFMT05FX1BBU1NfTUVNX1NUQVQgX2xvY19uYW1lLCBfbG9jX2xpbmUsICBfbG9jX2Z1bmN0aW9uCisjZGVmaW5lIE1FTV9TVEFUX0lORk8gLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXworI2RlZmluZSBBTE9ORV9NRU1fU1RBVF9JTkZPIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fCisjZWxzZQorI2RlZmluZSBNRU1fU1RBVF9ERUNMCisjZGVmaW5lIEFMT05FX01FTV9TVEFUX0RFQ0wgdm9pZAorI2RlZmluZSBQQVNTX01FTV9TVEFUCisjZGVmaW5lIEFMT05FX1BBU1NfTUVNX1NUQVQKKyNkZWZpbmUgTUVNX1NUQVRfSU5GTworI2RlZmluZSBBTE9ORV9NRU1fU1RBVF9JTkZPCisjZW5kaWYKKworc3RydWN0IGZ1bmN0aW9uOworCisvKiBJbiBzdGF0aXN0aWNzLmMgKi8KK2V4dGVybiB2b2lkIHN0YXRpc3RpY3NfZWFybHlfaW5pdCAodm9pZCk7CitleHRlcm4gdm9pZCBzdGF0aXN0aWNzX2luaXQgKHZvaWQpOworZXh0ZXJuIHZvaWQgc3RhdGlzdGljc19maW5pICh2b2lkKTsKK2V4dGVybiB2b2lkIHN0YXRpc3RpY3NfZmluaV9wYXNzICh2b2lkKTsKK2V4dGVybiB2b2lkIHN0YXRpc3RpY3NfY291bnRlcl9ldmVudCAoc3RydWN0IGZ1bmN0aW9uICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiB2b2lkIHN0YXRpc3RpY3NfaGlzdG9ncmFtX2V2ZW50IChzdHJ1Y3QgZnVuY3Rpb24gKiwgY29uc3QgY2hhciAqLCBpbnQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9zeW10YWIuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9zeW10YWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmI1NjAwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3N5bXRhYi5oCkBAIC0wLDAgKzEsMTAzIEBACisvKiBIYXNoIHRhYmxlcy4KKyAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNywgMjAwOCwgMjAwOQorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2xhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBMSUJDUFBfU1lNVEFCX0gKKyNkZWZpbmUgTElCQ1BQX1NZTVRBQl9ICisKKyNpbmNsdWRlICJvYnN0YWNrLmgiCisKKyNpZm5kZWYgR1RZCisjZGVmaW5lIEdUWSh4KSAvKiBub3RoaW5nICovCisjZW5kaWYKKworLyogVGhpcyBpcyB3aGF0IGVhY2ggaGFzaCB0YWJsZSBlbnRyeSBwb2ludHMgdG8uICBJdCBtYXkgYmUgZW1iZWRkZWQKKyAgIGRlZXBseSB3aXRoaW4gYW5vdGhlciBvYmplY3QuICAqLwordHlwZWRlZiBzdHJ1Y3QgaHRfaWRlbnRpZmllciBodF9pZGVudGlmaWVyOworc3RydWN0IEdUWSgoKSkgaHRfaWRlbnRpZmllciB7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0cjsKKyAgdW5zaWduZWQgaW50IGxlbjsKKyAgdW5zaWduZWQgaW50IGhhc2hfdmFsdWU7Cit9OworCisjZGVmaW5lIEhUX0xFTihOT0RFKSAoKE5PREUpLT5sZW4pCisjZGVmaW5lIEhUX1NUUihOT0RFKSAoKE5PREUpLT5zdHIpCisKK3R5cGVkZWYgc3RydWN0IGh0IGhhc2hfdGFibGU7Cit0eXBlZGVmIHN0cnVjdCBodF9pZGVudGlmaWVyICpoYXNobm9kZTsKKworZW51bSBodF9sb29rdXBfb3B0aW9uIHtIVF9OT19JTlNFUlQgPSAwLCBIVF9BTExPQ307CisKKy8qIEFuIGlkZW50aWZpZXIgaGFzaCB0YWJsZSBmb3IgY3BwbGliIGFuZCB0aGUgZnJvbnQgZW5kcy4gICovCitzdHJ1Y3QgaHQKK3sKKyAgLyogSWRlbnRpZmllcnMgYXJlIGFsbG9jYXRlZCBmcm9tIGhlcmUuICAqLworICBzdHJ1Y3Qgb2JzdGFjayBzdGFjazsKKworICBoYXNobm9kZSAqZW50cmllczsKKyAgLyogQ2FsbCBiYWNrLCBhbGxvY2F0ZSBhIG5vZGUuICAqLworICBoYXNobm9kZSAoKmFsbG9jX25vZGUpIChoYXNoX3RhYmxlICopOworICAvKiBDYWxsIGJhY2ssIGFsbG9jYXRlIHNvbWV0aGluZyB0aGF0IGhhbmdzIG9mZiBhIG5vZGUgbGlrZSBhIGNwcF9tYWNyby4gIAorICAgICBOVUxMIG1lYW5zIHVzZSB0aGUgdXN1YWwgYWxsb2NhdG9yLiAgKi8KKyAgdm9pZCAqICgqYWxsb2Nfc3Vib2JqZWN0KSAoc2l6ZV90KTsKKworICB1bnNpZ25lZCBpbnQgbnNsb3RzOwkJLyogVG90YWwgc2xvdHMgaW4gdGhlIGVudHJpZXMgYXJyYXkuICAqLworICB1bnNpZ25lZCBpbnQgbmVsZW1lbnRzOwkvKiBOdW1iZXIgb2YgbGl2ZSBlbGVtZW50cy4gICovCisKKyAgLyogTGluayB0byByZWFkZXIsIGlmIGFueS4gIEZvciB0aGUgYmVuZWZpdCBvZiBjcHBsaWIuICAqLworICBzdHJ1Y3QgY3BwX3JlYWRlciAqcGZpbGU7CisKKyAgLyogVGFibGUgdXNhZ2Ugc3RhdGlzdGljcy4gICovCisgIHVuc2lnbmVkIGludCBzZWFyY2hlczsKKyAgdW5zaWduZWQgaW50IGNvbGxpc2lvbnM7CisKKyAgLyogU2hvdWxkICdlbnRyaWVzJyBiZSBmcmVlZCB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQ/ICAqLworICBib29sIGVudHJpZXNfb3duZWQ7Cit9OworCisvKiBJbml0aWFsaXplIHRoZSBoYXNodGFibGUgd2l0aCAyIF4gb3JkZXIgZW50cmllcy4gICovCitleHRlcm4gaGFzaF90YWJsZSAqaHRfY3JlYXRlICh1bnNpZ25lZCBpbnQgb3JkZXIpOworCisvKiBGcmVlcyBhbGwgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhIGhhc2ggdGFibGUuICAqLworZXh0ZXJuIHZvaWQgaHRfZGVzdHJveSAoaGFzaF90YWJsZSAqKTsKKworZXh0ZXJuIGhhc2hub2RlIGh0X2xvb2t1cCAoaGFzaF90YWJsZSAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICosCisJCQkgICBzaXplX3QsIGVudW0gaHRfbG9va3VwX29wdGlvbik7CitleHRlcm4gaGFzaG5vZGUgaHRfbG9va3VwX3dpdGhfaGFzaCAoaGFzaF90YWJsZSAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90LCB1bnNpZ25lZCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBodF9sb29rdXBfb3B0aW9uKTsKKyNkZWZpbmUgSFRfSEFTSFNURVAociwgYykgKChyKSAqIDY3ICsgKChjKSAtIDExMykpOworI2RlZmluZSBIVF9IQVNIRklOSVNIKHIsIGxlbikgKChyKSArIChsZW4pKQorCisvKiBGb3IgYWxsIG5vZGVzIGluIFRBQkxFLCBtYWtlIGEgY2FsbGJhY2suICBUaGUgY2FsbGJhY2sgdGFrZXMKKyAgIFRBQkxFLT5QRklMRSwgdGhlIG5vZGUsIGFuZCBhIFBUUiwgYW5kIHRoZSBjYWxsYmFjayBzZXF1ZW5jZSBzdG9wcworICAgaWYgdGhlIGNhbGxiYWNrIHJldHVybnMgemVyby4gICovCit0eXBlZGVmIGludCAoKmh0X2NiKSAoc3RydWN0IGNwcF9yZWFkZXIgKiwgaGFzaG5vZGUsIGNvbnN0IHZvaWQgKik7CitleHRlcm4gdm9pZCBodF9mb3JhbGwgKGhhc2hfdGFibGUgKiwgaHRfY2IsIGNvbnN0IHZvaWQgKik7CisKKy8qIEZvciBhbGwgbm9kZXMgaW4gVEFCTEUsIGNhbGwgdGhlIGNhbGxiYWNrLiAgSWYgdGhlIGNhbGxiYWNrIHJldHVybnMKKyAgIGEgbm9uemVybyB2YWx1ZSwgdGhlIG5vZGUgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0YWJsZS4gICovCitleHRlcm4gdm9pZCBodF9wdXJnZSAoaGFzaF90YWJsZSAqLCBodF9jYiwgY29uc3Qgdm9pZCAqKTsKKworLyogUmVzdG9yZSB0aGUgaGFzaCB0YWJsZS4gICovCitleHRlcm4gdm9pZCBodF9sb2FkIChoYXNoX3RhYmxlICpodCwgaGFzaG5vZGUgKmVudHJpZXMsCisJCSAgICAgdW5zaWduZWQgaW50IG5zbG90cywgdW5zaWduZWQgaW50IG5lbGVtZW50cywgYm9vbCBvd24pOworCisvKiBEdW1wIGFsbG9jYXRpb24gc3RhdGlzdGljcyB0byBzdGRlcnIuICAqLworZXh0ZXJuIHZvaWQgaHRfZHVtcF9zdGF0aXN0aWNzIChoYXNoX3RhYmxlICopOworCisjZW5kaWYgLyogTElCQ1BQX1NZTVRBQl9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvc3luYy1idWlsdGlucy5kZWYgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvc3luYy1idWlsdGlucy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUxZDVkZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS9zeW5jLWJ1aWx0aW5zLmRlZgpAQCAtMCwwICsxLDI1MiBAQAorLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBhbmQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlCisgICBzeW5jaHJvbml6YXRpb24gYnVpbHRpbnMgdXNlZCBpbiB0aGUgR05VIGNvbXBpbGVyLgorICAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogQmVmb3JlIGluY2x1ZGluZyB0aGlzIGZpbGUsIHlvdSBzaG91bGQgZGVmaW5lIGEgbWFjcm86CisKKyAgICAgREVGX1NZTkNfQlVJTFRJTiAoRU5VTSwgTkFNRSwgVFlQRSwgQVRUUlMpCisKKyAgIFNlZSBidWlsdGlucy5kZWYgZm9yIGRldGFpbHMuICAqLworCisvKiBTeW5jaHJvbml6YXRpb24gUHJpbWl0aXZlcy4gIFRoZSAiX04iIHZlcnNpb24gaXMgdGhlIG9uZSB0aGF0IHRoZSB1c2VyCisgICBpcyBzdXBwb3NlZCB0byBiZSB1c2luZy4gIEl0J3Mgb3ZlcmxvYWRlZCwgYW5kIGlzIHJlc29sdmVkIHRvIG9uZSBvZiB0aGUKKyAgICJfMSIgdGhyb3VnaCAiXzE2IiB2ZXJzaW9ucywgcGx1cyBzb21lIGV4dHJhIGNhc3RzLiAgKi8KKworREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fRkVUQ0hfQU5EX0FERF9OLCAiX19zeW5jX2ZldGNoX2FuZF9hZGQiLAorCQkgIEJUX0ZOX1ZPSURfVkFSLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0ZFVENIX0FORF9BRERfMSwgIl9fc3luY19mZXRjaF9hbmRfYWRkXzEiLAorCQkgIEJUX0ZOX0kxX1ZQVFJfSTEsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fRkVUQ0hfQU5EX0FERF8yLCAiX19zeW5jX2ZldGNoX2FuZF9hZGRfMiIsCisJCSAgQlRfRk5fSTJfVlBUUl9JMiwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9GRVRDSF9BTkRfQUREXzQsICJfX3N5bmNfZmV0Y2hfYW5kX2FkZF80IiwKKwkJICBCVF9GTl9JNF9WUFRSX0k0LCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0ZFVENIX0FORF9BRERfOCwgIl9fc3luY19mZXRjaF9hbmRfYWRkXzgiLAorCQkgIEJUX0ZOX0k4X1ZQVFJfSTgsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fRkVUQ0hfQU5EX0FERF8xNiwgIl9fc3luY19mZXRjaF9hbmRfYWRkXzE2IiwKKwkJICBCVF9GTl9JMTZfVlBUUl9JMTYsIEFUVFJfTk9USFJPV19MSVNUKQorCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9GRVRDSF9BTkRfU1VCX04sICJfX3N5bmNfZmV0Y2hfYW5kX3N1YiIsCisJCSAgQlRfRk5fVk9JRF9WQVIsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fRkVUQ0hfQU5EX1NVQl8xLCAiX19zeW5jX2ZldGNoX2FuZF9zdWJfMSIsCisJCSAgQlRfRk5fSTFfVlBUUl9JMSwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9GRVRDSF9BTkRfU1VCXzIsICJfX3N5bmNfZmV0Y2hfYW5kX3N1Yl8yIiwKKwkJICBCVF9GTl9JMl9WUFRSX0kyLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0ZFVENIX0FORF9TVUJfNCwgIl9fc3luY19mZXRjaF9hbmRfc3ViXzQiLAorCQkgIEJUX0ZOX0k0X1ZQVFJfSTQsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fRkVUQ0hfQU5EX1NVQl84LCAiX19zeW5jX2ZldGNoX2FuZF9zdWJfOCIsCisJCSAgQlRfRk5fSThfVlBUUl9JOCwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9GRVRDSF9BTkRfU1VCXzE2LCAiX19zeW5jX2ZldGNoX2FuZF9zdWJfMTYiLAorCQkgIEJUX0ZOX0kxNl9WUFRSX0kxNiwgQVRUUl9OT1RIUk9XX0xJU1QpCisKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0ZFVENIX0FORF9PUl9OLCAiX19zeW5jX2ZldGNoX2FuZF9vciIsCisJCSAgQlRfRk5fVk9JRF9WQVIsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fRkVUQ0hfQU5EX09SXzEsICJfX3N5bmNfZmV0Y2hfYW5kX29yXzEiLAorCQkgIEJUX0ZOX0kxX1ZQVFJfSTEsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fRkVUQ0hfQU5EX09SXzIsICJfX3N5bmNfZmV0Y2hfYW5kX29yXzIiLAorCQkgIEJUX0ZOX0kyX1ZQVFJfSTIsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fRkVUQ0hfQU5EX09SXzQsICJfX3N5bmNfZmV0Y2hfYW5kX29yXzQiLAorCQkgIEJUX0ZOX0k0X1ZQVFJfSTQsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fRkVUQ0hfQU5EX09SXzgsICJfX3N5bmNfZmV0Y2hfYW5kX29yXzgiLAorCQkgIEJUX0ZOX0k4X1ZQVFJfSTgsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fRkVUQ0hfQU5EX09SXzE2LCAiX19zeW5jX2ZldGNoX2FuZF9vcl8xNiIsCisJCSAgQlRfRk5fSTE2X1ZQVFJfSTE2LCBBVFRSX05PVEhST1dfTElTVCkKKworREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fRkVUQ0hfQU5EX0FORF9OLCAiX19zeW5jX2ZldGNoX2FuZF9hbmQiLAorCQkgIEJUX0ZOX1ZPSURfVkFSLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0ZFVENIX0FORF9BTkRfMSwgIl9fc3luY19mZXRjaF9hbmRfYW5kXzEiLAorCQkgIEJUX0ZOX0kxX1ZQVFJfSTEsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fRkVUQ0hfQU5EX0FORF8yLCAiX19zeW5jX2ZldGNoX2FuZF9hbmRfMiIsCisJCSAgQlRfRk5fSTJfVlBUUl9JMiwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9GRVRDSF9BTkRfQU5EXzQsICJfX3N5bmNfZmV0Y2hfYW5kX2FuZF80IiwKKwkJICBCVF9GTl9JNF9WUFRSX0k0LCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0ZFVENIX0FORF9BTkRfOCwgIl9fc3luY19mZXRjaF9hbmRfYW5kXzgiLAorCQkgIEJUX0ZOX0k4X1ZQVFJfSTgsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fRkVUQ0hfQU5EX0FORF8xNiwgIl9fc3luY19mZXRjaF9hbmRfYW5kXzE2IiwKKwkJICBCVF9GTl9JMTZfVlBUUl9JMTYsIEFUVFJfTk9USFJPV19MSVNUKQorCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9GRVRDSF9BTkRfWE9SX04sICJfX3N5bmNfZmV0Y2hfYW5kX3hvciIsCisJCSAgQlRfRk5fVk9JRF9WQVIsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fRkVUQ0hfQU5EX1hPUl8xLCAiX19zeW5jX2ZldGNoX2FuZF94b3JfMSIsCisJCSAgQlRfRk5fSTFfVlBUUl9JMSwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9GRVRDSF9BTkRfWE9SXzIsICJfX3N5bmNfZmV0Y2hfYW5kX3hvcl8yIiwKKwkJICBCVF9GTl9JMl9WUFRSX0kyLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0ZFVENIX0FORF9YT1JfNCwgIl9fc3luY19mZXRjaF9hbmRfeG9yXzQiLAorCQkgIEJUX0ZOX0k0X1ZQVFJfSTQsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fRkVUQ0hfQU5EX1hPUl84LCAiX19zeW5jX2ZldGNoX2FuZF94b3JfOCIsCisJCSAgQlRfRk5fSThfVlBUUl9JOCwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9GRVRDSF9BTkRfWE9SXzE2LCAiX19zeW5jX2ZldGNoX2FuZF94b3JfMTYiLAorCQkgIEJUX0ZOX0kxNl9WUFRSX0kxNiwgQVRUUl9OT1RIUk9XX0xJU1QpCisKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0ZFVENIX0FORF9OQU5EX04sICJfX3N5bmNfZmV0Y2hfYW5kX25hbmQiLAorCQkgIEJUX0ZOX1ZPSURfVkFSLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0ZFVENIX0FORF9OQU5EXzEsICJfX3N5bmNfZmV0Y2hfYW5kX25hbmRfMSIsCisJCSAgQlRfRk5fSTFfVlBUUl9JMSwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9GRVRDSF9BTkRfTkFORF8yLCAiX19zeW5jX2ZldGNoX2FuZF9uYW5kXzIiLAorCQkgIEJUX0ZOX0kyX1ZQVFJfSTIsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fRkVUQ0hfQU5EX05BTkRfNCwgIl9fc3luY19mZXRjaF9hbmRfbmFuZF80IiwKKwkJICBCVF9GTl9JNF9WUFRSX0k0LCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0ZFVENIX0FORF9OQU5EXzgsICJfX3N5bmNfZmV0Y2hfYW5kX25hbmRfOCIsCisJCSAgQlRfRk5fSThfVlBUUl9JOCwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9GRVRDSF9BTkRfTkFORF8xNiwgIl9fc3luY19mZXRjaF9hbmRfbmFuZF8xNiIsCisJCSAgQlRfRk5fSTE2X1ZQVFJfSTE2LCBBVFRSX05PVEhST1dfTElTVCkKKworREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQUREX0FORF9GRVRDSF9OLCAiX19zeW5jX2FkZF9hbmRfZmV0Y2giLAorCQkgIEJUX0ZOX1ZPSURfVkFSLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FERF9BTkRfRkVUQ0hfMSwgIl9fc3luY19hZGRfYW5kX2ZldGNoXzEiLAorCQkgIEJUX0ZOX0kxX1ZQVFJfSTEsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQUREX0FORF9GRVRDSF8yLCAiX19zeW5jX2FkZF9hbmRfZmV0Y2hfMiIsCisJCSAgQlRfRk5fSTJfVlBUUl9JMiwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BRERfQU5EX0ZFVENIXzQsICJfX3N5bmNfYWRkX2FuZF9mZXRjaF80IiwKKwkJICBCVF9GTl9JNF9WUFRSX0k0LCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FERF9BTkRfRkVUQ0hfOCwgIl9fc3luY19hZGRfYW5kX2ZldGNoXzgiLAorCQkgIEJUX0ZOX0k4X1ZQVFJfSTgsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQUREX0FORF9GRVRDSF8xNiwgIl9fc3luY19hZGRfYW5kX2ZldGNoXzE2IiwKKwkJICBCVF9GTl9JMTZfVlBUUl9JMTYsIEFUVFJfTk9USFJPV19MSVNUKQorCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9TVUJfQU5EX0ZFVENIX04sICJfX3N5bmNfc3ViX2FuZF9mZXRjaCIsCisJCSAgQlRfRk5fVk9JRF9WQVIsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1VCX0FORF9GRVRDSF8xLCAiX19zeW5jX3N1Yl9hbmRfZmV0Y2hfMSIsCisJCSAgQlRfRk5fSTFfVlBUUl9JMSwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9TVUJfQU5EX0ZFVENIXzIsICJfX3N5bmNfc3ViX2FuZF9mZXRjaF8yIiwKKwkJICBCVF9GTl9JMl9WUFRSX0kyLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NVQl9BTkRfRkVUQ0hfNCwgIl9fc3luY19zdWJfYW5kX2ZldGNoXzQiLAorCQkgIEJUX0ZOX0k0X1ZQVFJfSTQsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1VCX0FORF9GRVRDSF84LCAiX19zeW5jX3N1Yl9hbmRfZmV0Y2hfOCIsCisJCSAgQlRfRk5fSThfVlBUUl9JOCwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9TVUJfQU5EX0ZFVENIXzE2LCAiX19zeW5jX3N1Yl9hbmRfZmV0Y2hfMTYiLAorCQkgIEJUX0ZOX0kxNl9WUFRSX0kxNiwgQVRUUl9OT1RIUk9XX0xJU1QpCisKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX09SX0FORF9GRVRDSF9OLCAiX19zeW5jX29yX2FuZF9mZXRjaCIsCisJCSAgQlRfRk5fVk9JRF9WQVIsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fT1JfQU5EX0ZFVENIXzEsICJfX3N5bmNfb3JfYW5kX2ZldGNoXzEiLAorCQkgIEJUX0ZOX0kxX1ZQVFJfSTEsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fT1JfQU5EX0ZFVENIXzIsICJfX3N5bmNfb3JfYW5kX2ZldGNoXzIiLAorCQkgIEJUX0ZOX0kyX1ZQVFJfSTIsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fT1JfQU5EX0ZFVENIXzQsICJfX3N5bmNfb3JfYW5kX2ZldGNoXzQiLAorCQkgIEJUX0ZOX0k0X1ZQVFJfSTQsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fT1JfQU5EX0ZFVENIXzgsICJfX3N5bmNfb3JfYW5kX2ZldGNoXzgiLAorCQkgIEJUX0ZOX0k4X1ZQVFJfSTgsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fT1JfQU5EX0ZFVENIXzE2LCAiX19zeW5jX29yX2FuZF9mZXRjaF8xNiIsCisJCSAgQlRfRk5fSTE2X1ZQVFJfSTE2LCBBVFRSX05PVEhST1dfTElTVCkKKworREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQU5EX0FORF9GRVRDSF9OLCAiX19zeW5jX2FuZF9hbmRfZmV0Y2giLAorCQkgIEJUX0ZOX1ZPSURfVkFSLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FORF9BTkRfRkVUQ0hfMSwgIl9fc3luY19hbmRfYW5kX2ZldGNoXzEiLAorCQkgIEJUX0ZOX0kxX1ZQVFJfSTEsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQU5EX0FORF9GRVRDSF8yLCAiX19zeW5jX2FuZF9hbmRfZmV0Y2hfMiIsCisJCSAgQlRfRk5fSTJfVlBUUl9JMiwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BTkRfQU5EX0ZFVENIXzQsICJfX3N5bmNfYW5kX2FuZF9mZXRjaF80IiwKKwkJICBCVF9GTl9JNF9WUFRSX0k0LCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FORF9BTkRfRkVUQ0hfOCwgIl9fc3luY19hbmRfYW5kX2ZldGNoXzgiLAorCQkgIEJUX0ZOX0k4X1ZQVFJfSTgsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQU5EX0FORF9GRVRDSF8xNiwgIl9fc3luY19hbmRfYW5kX2ZldGNoXzE2IiwKKwkJICBCVF9GTl9JMTZfVlBUUl9JMTYsIEFUVFJfTk9USFJPV19MSVNUKQorCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9YT1JfQU5EX0ZFVENIX04sICJfX3N5bmNfeG9yX2FuZF9mZXRjaCIsCisJCSAgQlRfRk5fVk9JRF9WQVIsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fWE9SX0FORF9GRVRDSF8xLCAiX19zeW5jX3hvcl9hbmRfZmV0Y2hfMSIsCisJCSAgQlRfRk5fSTFfVlBUUl9JMSwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9YT1JfQU5EX0ZFVENIXzIsICJfX3N5bmNfeG9yX2FuZF9mZXRjaF8yIiwKKwkJICBCVF9GTl9JMl9WUFRSX0kyLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1hPUl9BTkRfRkVUQ0hfNCwgIl9fc3luY194b3JfYW5kX2ZldGNoXzQiLAorCQkgIEJUX0ZOX0k0X1ZQVFJfSTQsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fWE9SX0FORF9GRVRDSF84LCAiX19zeW5jX3hvcl9hbmRfZmV0Y2hfOCIsCisJCSAgQlRfRk5fSThfVlBUUl9JOCwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9YT1JfQU5EX0ZFVENIXzE2LCAiX19zeW5jX3hvcl9hbmRfZmV0Y2hfMTYiLAorCQkgIEJUX0ZOX0kxNl9WUFRSX0kxNiwgQVRUUl9OT1RIUk9XX0xJU1QpCisKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX05BTkRfQU5EX0ZFVENIX04sICJfX3N5bmNfbmFuZF9hbmRfZmV0Y2giLAorCQkgIEJUX0ZOX1ZPSURfVkFSLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX05BTkRfQU5EX0ZFVENIXzEsICJfX3N5bmNfbmFuZF9hbmRfZmV0Y2hfMSIsCisJCSAgQlRfRk5fSTFfVlBUUl9JMSwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9OQU5EX0FORF9GRVRDSF8yLCAiX19zeW5jX25hbmRfYW5kX2ZldGNoXzIiLAorCQkgIEJUX0ZOX0kyX1ZQVFJfSTIsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fTkFORF9BTkRfRkVUQ0hfNCwgIl9fc3luY19uYW5kX2FuZF9mZXRjaF80IiwKKwkJICBCVF9GTl9JNF9WUFRSX0k0LCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX05BTkRfQU5EX0ZFVENIXzgsICJfX3N5bmNfbmFuZF9hbmRfZmV0Y2hfOCIsCisJCSAgQlRfRk5fSThfVlBUUl9JOCwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9OQU5EX0FORF9GRVRDSF8xNiwgIl9fc3luY19uYW5kX2FuZF9mZXRjaF8xNiIsCisJCSAgQlRfRk5fSTE2X1ZQVFJfSTE2LCBBVFRSX05PVEhST1dfTElTVCkKKworREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQk9PTF9DT01QQVJFX0FORF9TV0FQX04sCisJCSAgIl9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAiLAorCQkgIEJUX0ZOX1ZPSURfVkFSLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0JPT0xfQ09NUEFSRV9BTkRfU1dBUF8xLAorCQkgICJfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwXzEiLAorCQkgIEJUX0ZOX0JPT0xfVlBUUl9JMV9JMSwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9CT09MX0NPTVBBUkVfQU5EX1NXQVBfMiwKKwkJICAiX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcF8yIiwKKwkJICBCVF9GTl9CT09MX1ZQVFJfSTJfSTIsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQk9PTF9DT01QQVJFX0FORF9TV0FQXzQsCisJCSAgIl9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfNCIsCisJCSAgQlRfRk5fQk9PTF9WUFRSX0k0X0k0LCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0JPT0xfQ09NUEFSRV9BTkRfU1dBUF84LAorCQkgICJfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwXzgiLAorCQkgIEJUX0ZOX0JPT0xfVlBUUl9JOF9JOCwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9CT09MX0NPTVBBUkVfQU5EX1NXQVBfMTYsCisJCSAgIl9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfMTYiLAorCQkgIEJUX0ZOX0JPT0xfVlBUUl9JMTZfSTE2LCBBVFRSX05PVEhST1dfTElTVCkKKworREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fVkFMX0NPTVBBUkVfQU5EX1NXQVBfTiwKKwkJICAiX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwIiwKKwkJICBCVF9GTl9WT0lEX1ZBUiwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9WQUxfQ09NUEFSRV9BTkRfU1dBUF8xLAorCQkgICJfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXBfMSIsCisJCSAgQlRfRk5fSTFfVlBUUl9JMV9JMSwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9WQUxfQ09NUEFSRV9BTkRfU1dBUF8yLAorCQkgICJfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXBfMiIsCisJCSAgQlRfRk5fSTJfVlBUUl9JMl9JMiwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9WQUxfQ09NUEFSRV9BTkRfU1dBUF80LAorCQkgICJfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXBfNCIsCisJCSAgQlRfRk5fSTRfVlBUUl9JNF9JNCwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9WQUxfQ09NUEFSRV9BTkRfU1dBUF84LAorCQkgICJfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXBfOCIsCisJCSAgQlRfRk5fSThfVlBUUl9JOF9JOCwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9WQUxfQ09NUEFSRV9BTkRfU1dBUF8xNiwKKwkJICAiX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwXzE2IiwKKwkJICBCVF9GTl9JMTZfVlBUUl9JMTZfSTE2LCBBVFRSX05PVEhST1dfTElTVCkKKworREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fTE9DS19URVNUX0FORF9TRVRfTiwgIl9fc3luY19sb2NrX3Rlc3RfYW5kX3NldCIsCisJCSAgQlRfRk5fVk9JRF9WQVIsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fTE9DS19URVNUX0FORF9TRVRfMSwgIl9fc3luY19sb2NrX3Rlc3RfYW5kX3NldF8xIiwKKwkJICBCVF9GTl9JMV9WUFRSX0kxLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0xPQ0tfVEVTVF9BTkRfU0VUXzIsICJfX3N5bmNfbG9ja190ZXN0X2FuZF9zZXRfMiIsCisJCSAgQlRfRk5fSTJfVlBUUl9JMiwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9MT0NLX1RFU1RfQU5EX1NFVF80LCAiX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0XzQiLAorCQkgIEJUX0ZOX0k0X1ZQVFJfSTQsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fTE9DS19URVNUX0FORF9TRVRfOCwgIl9fc3luY19sb2NrX3Rlc3RfYW5kX3NldF84IiwKKwkJICBCVF9GTl9JOF9WUFRSX0k4LCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0xPQ0tfVEVTVF9BTkRfU0VUXzE2LCAiX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0XzE2IiwKKwkJICBCVF9GTl9JMTZfVlBUUl9JMTYsIEFUVFJfTk9USFJPV19MSVNUKQorCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9MT0NLX1JFTEVBU0VfTiwgIl9fc3luY19sb2NrX3JlbGVhc2UiLAorCQkgIEJUX0ZOX1ZPSURfVkFSLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0xPQ0tfUkVMRUFTRV8xLCAiX19zeW5jX2xvY2tfcmVsZWFzZV8xIiwKKwkJICBCVF9GTl9WT0lEX1ZQVFIsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fTE9DS19SRUxFQVNFXzIsICJfX3N5bmNfbG9ja19yZWxlYXNlXzIiLAorCQkgIEJUX0ZOX1ZPSURfVlBUUiwgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9MT0NLX1JFTEVBU0VfNCwgIl9fc3luY19sb2NrX3JlbGVhc2VfNCIsCisJCSAgQlRfRk5fVk9JRF9WUFRSLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0xPQ0tfUkVMRUFTRV84LCAiX19zeW5jX2xvY2tfcmVsZWFzZV84IiwKKwkJICBCVF9GTl9WT0lEX1ZQVFIsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fTE9DS19SRUxFQVNFXzE2LCAiX19zeW5jX2xvY2tfcmVsZWFzZV8xNiIsCisJCSAgQlRfRk5fVk9JRF9WUFRSLCBBVFRSX05PVEhST1dfTElTVCkKKworREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ0hST05JWkUsICJfX3N5bmNfc3luY2hyb25pemUiLAorCQkgIEJUX0ZOX1ZPSUQsIEFUVFJfTk9USFJPV19MSVNUKQpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3N5c3RlbS5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNzczMmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvc3lzdGVtLmgKQEAgLTAsMCArMSw4NjkgQEAKKy8qIEdldCBjb21tb24gc3lzdGVtIGluY2x1ZGVzIGFuZCB2YXJpb3VzIGRlZmluaXRpb25zIGFuZCBkZWNsYXJhdGlvbnMgYmFzZWQKKyAgIG9uIGF1dG9jb25mIG1hY3Jvcy4KKyAgIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCwKKyAgIDIwMDkKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworCisjaWZuZGVmIEdDQ19TWVNURU1fSAorI2RlZmluZSBHQ0NfU1lTVEVNX0gKKworLyogV2UgbXVzdCBpbmNsdWRlIHN0ZGFyZy5oIGJlZm9yZSBzdGRpby5oLiAgKi8KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2lmbmRlZiB2YV9jb3B5CisjIGlmZGVmIF9fdmFfY29weQorIyAgIGRlZmluZSB2YV9jb3B5KGQscykgIF9fdmFfY29weSgoZCksKHMpKQorIyBlbHNlCisjICAgZGVmaW5lIHZhX2NvcHkoZCxzKSAgKChkKSA9IChzKSkKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TVERERUZfSAorIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworLyogRGVmaW5lIGEgZ2VuZXJpYyBOVUxMIGlmIG9uZSBoYXNuJ3QgYWxyZWFkeSBiZWVuIGRlZmluZWQuICAqLworI2lmbmRlZiBOVUxMCisjZGVmaW5lIE5VTEwgMAorI2VuZGlmCisKKy8qIFVzZSB0aGUgdW5sb2NrZWQgb3BlbiByb3V0aW5lcyBmcm9tIGxpYmliZXJ0eS4gICovCisjaWZkZWYgZm9wZW4gLyogZm9wZW4gaXMgYSAjZGVmaW5lIG9uIFZNUy4gICovCisjdW5kZWYgZm9wZW4KKyNlbmRpZgorI2RlZmluZSBmb3BlbihQQVRILE1PREUpIGZvcGVuX3VubG9ja2VkKFBBVEgsTU9ERSkKKyNkZWZpbmUgZmRvcGVuKEZJTERFUyxNT0RFKSBmZG9wZW5fdW5sb2NrZWQoRklMREVTLE1PREUpCisjZGVmaW5lIGZyZW9wZW4oUEFUSCxNT0RFLFNUUkVBTSkgZnJlb3Blbl91bmxvY2tlZChQQVRILE1PREUsU1RSRUFNKQorCisvKiBUaGUgY29tcGlsZXIgaXMgbm90IGEgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb24gYW5kIHRoZXJlZm9yZSB3ZQorICAgZG8gbm90IGhhdmUgdG8gdXNlIHRoZSBsb2NraW5nIGZ1bmN0aW9ucy4gIEluIGZhY3QsIHVzaW5nIHRoZSBsb2NraW5nCisgICBmdW5jdGlvbnMgY2FuIGNhdXNlIHRoZSBjb21waWxlciB0byBiZSBzaWduaWZpY2FudGx5IHNsb3dlciB1bmRlcgorICAgSS9PIGJvdW5kIGNvbmRpdGlvbnMgKHN1Y2ggYXMgLWcgLU8wIG9uIHZlcnkgbGFyZ2Ugc291cmNlIGZpbGVzKS4KKworICAgSEFWRV9ERUNMX1BVVENfVU5MT0NLRUQgYWN0dWFsbHkgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBzdGRpbworICAgY29kZSBpcyBtdWx0aS10aHJlYWQgc2FmZSBieSBkZWZhdWx0LiAgSWYgaXQgaXMgc2V0IHRvIDAsIHRoZW4gZG8KKyAgIG5vdCB3b3JyeSBhYm91dCB1c2luZyB0aGUgX3VubG9ja2VkIGZ1bmN0aW9ucy4KKworICAgZnB1dHNfdW5sb2NrZWQsIGZ3cml0ZV91bmxvY2tlZCwgYW5kIGZwcmludGZfdW5sb2NrZWQgYXJlCisgICBleHRlbnNpb25zIGFuZCBuZWVkIHRvIGJlIHByb3RvdHlwZWQgYnkgaGFuZCAoc2luY2Ugd2UgZG8gbm90CisgICBkZWZpbmUgX0dOVV9TT1VSQ0UpLiAgKi8KKworI2lmIGRlZmluZWQgSEFWRV9ERUNMX1BVVENfVU5MT0NLRUQgJiYgSEFWRV9ERUNMX1BVVENfVU5MT0NLRUQKKworIyBpZmRlZiBIQVZFX1BVVENfVU5MT0NLRUQKKyMgIHVuZGVmIHB1dGMKKyMgIGRlZmluZSBwdXRjKEMsIFN0cmVhbSkgcHV0Y191bmxvY2tlZCAoQywgU3RyZWFtKQorIyBlbmRpZgorIyBpZmRlZiBIQVZFX1BVVENIQVJfVU5MT0NLRUQKKyMgIHVuZGVmIHB1dGNoYXIKKyMgIGRlZmluZSBwdXRjaGFyKEMpIHB1dGNoYXJfdW5sb2NrZWQgKEMpCisjIGVuZGlmCisjIGlmZGVmIEhBVkVfR0VUQ19VTkxPQ0tFRAorIyAgdW5kZWYgZ2V0YworIyAgZGVmaW5lIGdldGMoU3RyZWFtKSBnZXRjX3VubG9ja2VkIChTdHJlYW0pCisjIGVuZGlmCisjIGlmZGVmIEhBVkVfR0VUQ0hBUl9VTkxPQ0tFRAorIyAgdW5kZWYgZ2V0Y2hhcgorIyAgZGVmaW5lIGdldGNoYXIoKSBnZXRjaGFyX3VubG9ja2VkICgpCisjIGVuZGlmCisjIGlmZGVmIEhBVkVfRlBVVENfVU5MT0NLRUQKKyMgIHVuZGVmIGZwdXRjCisjICBkZWZpbmUgZnB1dGMoQywgU3RyZWFtKSBmcHV0Y191bmxvY2tlZCAoQywgU3RyZWFtKQorIyBlbmRpZgorCisjIGlmZGVmIEhBVkVfQ0xFQVJFUlJfVU5MT0NLRUQKKyMgIHVuZGVmIGNsZWFyZXJyCisjICBkZWZpbmUgY2xlYXJlcnIoU3RyZWFtKSBjbGVhcmVycl91bmxvY2tlZCAoU3RyZWFtKQorIyAgaWYgZGVmaW5lZCAoSEFWRV9ERUNMX0NMRUFSRVJSX1VOTE9DS0VEKSAmJiAhSEFWRV9ERUNMX0NMRUFSRVJSX1VOTE9DS0VECitleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAqKTsKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmZGVmIEhBVkVfRkVPRl9VTkxPQ0tFRAorIyAgdW5kZWYgZmVvZgorIyAgZGVmaW5lIGZlb2YoU3RyZWFtKSBmZW9mX3VubG9ja2VkIChTdHJlYW0pCisjICBpZiBkZWZpbmVkIChIQVZFX0RFQ0xfRkVPRl9VTkxPQ0tFRCkgJiYgIUhBVkVfREVDTF9GRU9GX1VOTE9DS0VECitleHRlcm4gaW50IGZlb2ZfdW5sb2NrZWQgKEZJTEUgKik7CisjICBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBIQVZFX0ZJTEVOT19VTkxPQ0tFRAorIyAgdW5kZWYgZmlsZW5vCisjICBkZWZpbmUgZmlsZW5vKFN0cmVhbSkgZmlsZW5vX3VubG9ja2VkIChTdHJlYW0pCisjICBpZiBkZWZpbmVkIChIQVZFX0RFQ0xfRklMRU5PX1VOTE9DS0VEKSAmJiAhSEFWRV9ERUNMX0ZJTEVOT19VTkxPQ0tFRAorZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJTEUgKik7CisjICBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBIQVZFX0ZGTFVTSF9VTkxPQ0tFRAorIyAgdW5kZWYgZmZsdXNoCisjICBkZWZpbmUgZmZsdXNoKFN0cmVhbSkgZmZsdXNoX3VubG9ja2VkIChTdHJlYW0pCisjICBpZiBkZWZpbmVkIChIQVZFX0RFQ0xfRkZMVVNIX1VOTE9DS0VEKSAmJiAhSEFWRV9ERUNMX0ZGTFVTSF9VTkxPQ0tFRAorZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQgKEZJTEUgKik7CisjICBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBIQVZFX0ZHRVRDX1VOTE9DS0VECisjICB1bmRlZiBmZ2V0YworIyAgZGVmaW5lIGZnZXRjKFN0cmVhbSkgZmdldGNfdW5sb2NrZWQgKFN0cmVhbSkKKyMgIGlmIGRlZmluZWQgKEhBVkVfREVDTF9GR0VUQ19VTkxPQ0tFRCkgJiYgIUhBVkVfREVDTF9GR0VUQ19VTkxPQ0tFRAorZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqKTsKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmZGVmIEhBVkVfRkdFVFNfVU5MT0NLRUQKKyMgIHVuZGVmIGZnZXRzCisjICBkZWZpbmUgZmdldHMoUywgbiwgU3RyZWFtKSBmZ2V0c191bmxvY2tlZCAoUywgbiwgU3RyZWFtKQorIyAgaWYgZGVmaW5lZCAoSEFWRV9ERUNMX0ZHRVRTX1VOTE9DS0VEKSAmJiAhSEFWRV9ERUNMX0ZHRVRTX1VOTE9DS0VECitleHRlcm4gY2hhciAqZmdldHNfdW5sb2NrZWQgKGNoYXIgKiwgaW50LCBGSUxFICopOworIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgSEFWRV9GUFVUU19VTkxPQ0tFRAorIyAgdW5kZWYgZnB1dHMKKyMgIGRlZmluZSBmcHV0cyhTdHJpbmcsIFN0cmVhbSkgZnB1dHNfdW5sb2NrZWQgKFN0cmluZywgU3RyZWFtKQorIyAgaWYgZGVmaW5lZCAoSEFWRV9ERUNMX0ZQVVRTX1VOTE9DS0VEKSAmJiAhSEFWRV9ERUNMX0ZQVVRTX1VOTE9DS0VECitleHRlcm4gaW50IGZwdXRzX3VubG9ja2VkIChjb25zdCBjaGFyICosIEZJTEUgKik7CisjICBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBIQVZFX0ZFUlJPUl9VTkxPQ0tFRAorIyAgdW5kZWYgZmVycm9yCisjICBkZWZpbmUgZmVycm9yKFN0cmVhbSkgZmVycm9yX3VubG9ja2VkIChTdHJlYW0pCisjICBpZiBkZWZpbmVkIChIQVZFX0RFQ0xfRkVSUk9SX1VOTE9DS0VEKSAmJiAhSEFWRV9ERUNMX0ZFUlJPUl9VTkxPQ0tFRAorZXh0ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKik7CisjICBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBIQVZFX0ZSRUFEX1VOTE9DS0VECisjICB1bmRlZiBmcmVhZAorIyAgZGVmaW5lIGZyZWFkKFB0ciwgU2l6ZSwgTiwgU3RyZWFtKSBmcmVhZF91bmxvY2tlZCAoUHRyLCBTaXplLCBOLCBTdHJlYW0pCisjICBpZiBkZWZpbmVkIChIQVZFX0RFQ0xfRlJFQURfVU5MT0NLRUQpICYmICFIQVZFX0RFQ0xfRlJFQURfVU5MT0NLRUQKK2V4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUgKik7CisjICBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBIQVZFX0ZXUklURV9VTkxPQ0tFRAorIyAgdW5kZWYgZndyaXRlCisjICBkZWZpbmUgZndyaXRlKFB0ciwgU2l6ZSwgTiwgU3RyZWFtKSBmd3JpdGVfdW5sb2NrZWQgKFB0ciwgU2l6ZSwgTiwgU3RyZWFtKQorIyAgaWYgZGVmaW5lZCAoSEFWRV9ERUNMX0ZXUklURV9VTkxPQ0tFRCkgJiYgIUhBVkVfREVDTF9GV1JJVEVfVU5MT0NLRUQKK2V4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2VkIChjb25zdCB2b2lkICosIHNpemVfdCwgc2l6ZV90LCBGSUxFICopOworIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgSEFWRV9GUFJJTlRGX1VOTE9DS0VECisjICB1bmRlZiBmcHJpbnRmCisvKiBXZSBjYW4ndCB1c2UgYSBmdW5jdGlvbi1saWtlIG1hY3JvIGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBrbm93IGlmCisgICB3ZSBoYXZlIHZhcmFyZ3MgbWFjcm9zLiAgKi8KKyMgIGRlZmluZSBmcHJpbnRmIGZwcmludGZfdW5sb2NrZWQKKyMgIGlmIGRlZmluZWQgKEhBVkVfREVDTF9GUFJJTlRGX1VOTE9DS0VEKSAmJiAhSEFWRV9ERUNMX0ZQUklOVEZfVU5MT0NLRUQKK2V4dGVybiBpbnQgZnByaW50Zl91bmxvY2tlZCAoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CisjICBlbmRpZgorIyBlbmRpZgorCisjZW5kaWYKKworLyogPz8/IEdsaWJjJ3MgZndyaXRlL2ZyZWFkX3VubG9ja2VkIG1hY3JvcyBjYXVzZQorICAgIndhcm5pbmc6IHNpZ25lZCBhbmQgdW5zaWduZWQgdHlwZSBpbiBjb25kaXRpb25hbCBleHByZXNzaW9uIi4gICovCisjdW5kZWYgZnJlYWRfdW5sb2NrZWQKKyN1bmRlZiBmd3JpdGVfdW5sb2NrZWQKKworLyogVGhlcmUgYXJlIGFuIGV4dHJhb3JkaW5hcnkgbnVtYmVyIG9mIGlzc3VlcyB3aXRoIDxjdHlwZS5oPi4KKyAgIFRoZSBsYXN0IHN0cmF3IGlzIHRoYXQgaXQgdmFyaWVzIHdpdGggdGhlIGxvY2FsZS4gIFVzZSBsaWJpYmVydHkncworICAgcmVwbGFjZW1lbnQgaW5zdGVhZC4gICovCisjaW5jbHVkZSA8c2FmZS1jdHlwZS5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaWYgIWRlZmluZWQgKGVycm5vKSAmJiBkZWZpbmVkIChIQVZFX0RFQ0xfRVJSTk8pICYmICFIQVZFX0RFQ0xfRVJSTk8KK2V4dGVybiBpbnQgZXJybm87CisjZW5kaWYKKworLyogU29tZSBvZiBnbGliYydzIHN0cmluZyBpbmxpbmVzIGNhdXNlIHdhcm5pbmdzLiAgUGx1cyB3ZSdkIHJhdGhlcgorICAgcmVseSBvbiAoYW5kIHRoZXJlZm9yZSB0ZXN0KSBHQ0MncyBzdHJpbmcgYnVpbHRpbnMuICAqLworI2RlZmluZSBfX05PX1NUUklOR19JTkxJTkVTCisKKyNpZmRlZiBTVFJJTkdfV0lUSF9TVFJJTkdTCisjIGluY2x1ZGUgPHN0cmluZy5oPgorIyBpbmNsdWRlIDxzdHJpbmdzLmg+CisjZWxzZQorIyBpZmRlZiBIQVZFX1NUUklOR19ICisjICBpbmNsdWRlIDxzdHJpbmcuaD4KKyMgZWxzZQorIyAgaWZkZWYgSEFWRV9TVFJJTkdTX0gKKyMgICBpbmNsdWRlIDxzdHJpbmdzLmg+CisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NURExJQl9ICisjIGluY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisKKy8qIElmIHdlIGRvbid0IGhhdmUgYW4gb3ZlcnJpZGluZyBkZWZpbml0aW9uLCBzZXQgU1VDQ0VTU19FWElUX0NPREUgYW5kCisgICBGQVRBTF9FWElUX0NPREUgdG8gRVhJVF9TVUNDRVNTIGFuZCBFWElUX0ZBSUxVUkUgcmVzcGVjdGl2ZWx5LAorICAgb3IgMCBhbmQgMSBpZiB0aG9zZSBtYWNyb3MgYXJlIG5vdCBkZWZpbmVkLiAgKi8KKyNpZm5kZWYgU1VDQ0VTU19FWElUX0NPREUKKyMgaWZkZWYgRVhJVF9TVUNDRVNTCisjICBkZWZpbmUgU1VDQ0VTU19FWElUX0NPREUgRVhJVF9TVUNDRVNTCisjIGVsc2UKKyMgIGRlZmluZSBTVUNDRVNTX0VYSVRfQ09ERSAwCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBGQVRBTF9FWElUX0NPREUKKyMgaWZkZWYgRVhJVF9GQUlMVVJFCisjICBkZWZpbmUgRkFUQUxfRVhJVF9DT0RFIEVYSVRfRkFJTFVSRQorIyBlbHNlCisjICBkZWZpbmUgRkFUQUxfRVhJVF9DT0RFIDEKKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIElDRV9FWElUX0NPREUgNAorCisjaWZkZWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorIyBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKy8qIFdlIHVzZSB0aGlzIGlkZW50aWZpZXIgbGF0ZXIgYW5kIGl0IGFwcGVhcnMgaW4gc29tZSB2ZW5kb3IgcGFyYW0uaCdzLiAgKi8KKyMgdW5kZWYgUFJFRkVUQ0gKKyNlbmRpZgorCisjaWYgSEFWRV9MSU1JVFNfSAorIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbmRpZgorCisvKiBHZXQgZGVmaW5pdGlvbnMgb2YgSE9TVF9XSURFX0lOVCBhbmQgSE9TVF9XSURFU1RfSU5ULiAgKi8KKyNpbmNsdWRlICJod2ludC5oIgorCisvKiBBIG1hY3JvIHRvIGRldGVybWluZSB3aGV0aGVyIGEgVkFMVUUgbGllcyBpbmNsdXNpdmVseSB3aXRoaW4gYQorICAgY2VydGFpbiByYW5nZSB3aXRob3V0IGV2YWx1YXRpbmcgdGhlIFZBTFVFIG1vcmUgdGhhbiBvbmNlLiAgVGhpcworICAgbWFjcm8gd29uJ3Qgd2FybiBpZiB0aGUgVkFMVUUgaXMgdW5zaWduZWQgYW5kIHRoZSBMT1dFUiBib3VuZCBpcworICAgemVybywgYXMgaXQgd291bGQgZS5nLiB3aXRoICJWQUxVRSA+PSAwICYmIC4uLiIuICBOb3RlIHRoZSBMT1dFUgorICAgYm91bmQgKmlzKiBldmFsdWF0ZWQgdHdpY2UsIGFuZCBMT1dFUiBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4KKyAgIFVQUEVSLiAgSG93ZXZlciB0aGUgYm91bmRzIHRoZW1zZWx2ZXMgY2FuIGJlIGVpdGhlciBwb3NpdGl2ZSBvcgorICAgbmVnYXRpdmUuICAqLworI2RlZmluZSBJTl9SQU5HRShWQUxVRSwgTE9XRVIsIFVQUEVSKSBcCisgICgodW5zaWduZWQgSE9TVF9XSURFX0lOVCkgKFZBTFVFKSAtICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKSAoTE9XRVIpIFwKKyAgIDw9ICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKSAoVVBQRVIpIC0gKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpIChMT1dFUikpCisKKy8qIEluZnJhc3RydWN0dXJlIGZvciBkZWZpbmluZyBtaXNzaW5nIF9NQVggYW5kIF9NSU4gbWFjcm9zLiAgTm90ZSB0aGF0CisgICBtYWNyb3MgZGVmaW5lZCB3aXRoIHRoZXNlIGNhbm5vdCBiZSB1c2VkIGluICNpZi4gICovCisKKy8qIFRoZSBleHRyYSBjYXN0cyB3b3JrIGFyb3VuZCBjb21tb24gY29tcGlsZXIgYnVncy4gICovCisjZGVmaW5lIElOVFRZUEVfU0lHTkVEKHQpICghICgodCkgMCA8ICh0KSAtMSkpCisvKiBUaGUgb3V0ZXIgY2FzdCBpcyBuZWVkZWQgdG8gd29yayBhcm91bmQgYSBidWcgaW4gQ3JheSBDIDUuMC4zLjAuCisgICBJdCBpcyBuZWNlc3NhcnkgYXQgbGVhc3Qgd2hlbiB0ID09IHRpbWVfdC4gICovCisjZGVmaW5lIElOVFRZUEVfTUlOSU1VTSh0KSAoKHQpIChJTlRUWVBFX1NJR05FRCAodCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IH4gKHQpIDAgPDwgKHNpemVvZih0KSAqIENIQVJfQklUIC0gMSkgOiAodCkgMCkpCisjZGVmaW5lIElOVFRZUEVfTUFYSU1VTSh0KSAoKHQpICh+ICh0KSAwIC0gSU5UVFlQRV9NSU5JTVVNICh0KSkpCisKKy8qIFVzZSB0aGF0IGluZnJhc3RydWN0dXJlIHRvIHByb3ZpZGUgYSBmZXcgY29uc3RhbnRzLiAgKi8KKyNpZm5kZWYgVUNIQVJfTUFYCisjIGRlZmluZSBVQ0hBUl9NQVggSU5UVFlQRV9NQVhJTVVNICh1bnNpZ25lZCBjaGFyKQorI2VuZGlmCisKKyNpZmRlZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgaW5jbHVkZSA8dGltZS5oPgorI2Vsc2UKKyMgaWYgSEFWRV9TWVNfVElNRV9ICisjICBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBlbHNlCisjICBpZmRlZiBIQVZFX1RJTUVfSAorIyAgIGluY2x1ZGUgPHRpbWUuaD4KKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIEhBVkVfRkNOVExfSAorIyBpbmNsdWRlIDxmY250bC5oPgorI2Vsc2UKKyMgaWZkZWYgSEFWRV9TWVNfRklMRV9ICisjICBpbmNsdWRlIDxzeXMvZmlsZS5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgU0VFS19TRVQKKyMgZGVmaW5lIFNFRUtfU0VUIDAKKyMgZGVmaW5lIFNFRUtfQ1VSIDEKKyMgZGVmaW5lIFNFRUtfRU5EIDIKKyNlbmRpZgorI2lmbmRlZiBGX09LCisjIGRlZmluZSBGX09LIDAKKyMgZGVmaW5lIFhfT0sgMQorIyBkZWZpbmUgV19PSyAyCisjIGRlZmluZSBSX09LIDQKKyNlbmRpZgorI2lmbmRlZiBPX1JET05MWQorIyBkZWZpbmUgT19SRE9OTFkgMAorI2VuZGlmCisjaWZuZGVmIE9fV1JPTkxZCisjIGRlZmluZSBPX1dST05MWSAxCisjZW5kaWYKKworLyogU29tZSBzeXN0ZW1zIGRlZmluZSB0aGVzZSBpbiwgZS5nLiwgcGFyYW0uaC4gIFdlIHVuZGVmaW5lIHRoZXNlIG5hbWVzCisgICBoZXJlIHRvIGF2b2lkIHRoZSB3YXJuaW5ncy4gIFdlIHByZWZlciB0byB1c2Ugb3VyIGRlZmluaXRpb25zIHNpbmNlIHdlCisgICBrbm93IHRoZXkgYXJlIGNvcnJlY3QuICAqLworCisjdW5kZWYgTUlOCisjdW5kZWYgTUFYCisjZGVmaW5lIE1JTihYLFkpICgoWCkgPCAoWSkgPyAoWCkgOiAoWSkpCisjZGVmaW5lIE1BWChYLFkpICgoWCkgPiAoWSkgPyAoWCkgOiAoWSkpCisKKy8qIFJldHVybnMgdGhlIGxlYXN0IG51bWJlciBOIHN1Y2ggdGhhdCBOICogWSA+PSBYLiAgKi8KKyNkZWZpbmUgQ0VJTCh4LHkpICgoKHgpICsgKHkpIC0gMSkgLyAoeSkpCisKKyNpZmRlZiBIQVZFX1NZU19XQUlUX0gKKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2VuZGlmCisKKyNpZm5kZWYgV0lGU0lHTkFMRUQKKyNkZWZpbmUgV0lGU0lHTkFMRUQoUykgKCgoUykgJiAweGZmKSAhPSAwICYmICgoUykgJiAweGZmKSAhPSAweDdmKQorI2VuZGlmCisjaWZuZGVmIFdURVJNU0lHCisjZGVmaW5lIFdURVJNU0lHKFMpICgoUykgJiAweDdmKQorI2VuZGlmCisjaWZuZGVmIFdJRkVYSVRFRAorI2RlZmluZSBXSUZFWElURUQoUykgKCgoUykgJiAweGZmKSA9PSAwKQorI2VuZGlmCisjaWZuZGVmIFdFWElUU1RBVFVTCisjZGVmaW5lIFdFWElUU1RBVFVTKFMpICgoKFMpICYgMHhmZjAwKSA+PiA4KQorI2VuZGlmCisjaWZuZGVmIFdTVE9QU0lHCisjZGVmaW5lIFdTVE9QU0lHIFdFWElUU1RBVFVTCisjZW5kaWYKKyNpZm5kZWYgV0NPUkVEVU1QCisjZGVmaW5lIFdDT1JFRFVNUChTKSAoKFMpICYgV0NPUkVGTEcpCisjZW5kaWYKKyNpZm5kZWYgV0NPUkVGTEcKKyNkZWZpbmUgV0NPUkVGTEcgMDIwMAorI2VuZGlmCisKKy8qIFRoZSBIQVZFX0RFQ0xfKiBtYWNyb3MgYXJlIHRocmVlLXN0YXRlLCB1bmRlZmluZWQsIDAgb3IgMS4gIElmIHRoZXkKKyAgIGFyZSBkZWZpbmVkIHRvIDAgdGhlbiB3ZSBtdXN0IHByb3ZpZGUgdGhlIHJlbGV2YW50IGRlY2xhcmF0aW9uCisgICBoZXJlLiAgVGhlc2UgY2hlY2tzIHdpbGwgYmUgaW4gdGhlIHVuZGVmaW5lZCBzdGF0ZSB3aGlsZSBjb25maWd1cmUKKyAgIGlzIHJ1bm5pbmcgc28gYmUgY2FyZWZ1bCB0byB0ZXN0ICJkZWZpbmVkIChIQVZFX0RFQ0xfKikiLiAgKi8KKworI2lmIGRlZmluZWQgKEhBVkVfREVDTF9BVE9GKSAmJiAhSEFWRV9ERUNMX0FUT0YKK2V4dGVybiBkb3VibGUgYXRvZiAoY29uc3QgY2hhciAqKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoSEFWRV9ERUNMX0FUT0wpICYmICFIQVZFX0RFQ0xfQVRPTAorZXh0ZXJuIGxvbmcgYXRvbCAoY29uc3QgY2hhciAqKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoSEFWRV9ERUNMX0ZSRUUpICYmICFIQVZFX0RFQ0xfRlJFRQorZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoSEFWRV9ERUNMX0dFVENXRCkgJiYgIUhBVkVfREVDTF9HRVRDV0QKK2V4dGVybiBjaGFyICpnZXRjd2QgKGNoYXIgKiwgc2l6ZV90KTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoSEFWRV9ERUNMX0dFVEVOVikgJiYgIUhBVkVfREVDTF9HRVRFTlYKK2V4dGVybiBjaGFyICpnZXRlbnYgKGNvbnN0IGNoYXIgKik7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKEhBVkVfREVDTF9HRVRPUFQpICYmICFIQVZFX0RFQ0xfR0VUT1BUCitleHRlcm4gaW50IGdldG9wdCAoaW50LCBjaGFyICogY29uc3QgKiwgY29uc3QgY2hhciAqKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoSEFWRV9ERUNMX0dFVFBBR0VTSVpFKSAmJiAhSEFWRV9ERUNMX0dFVFBBR0VTSVpFCitleHRlcm4gaW50IGdldHBhZ2VzaXplICh2b2lkKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoSEFWRV9ERUNMX0dFVFdEKSAmJiAhSEFWRV9ERUNMX0dFVFdECitleHRlcm4gY2hhciAqZ2V0d2QgKGNoYXIgKik7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKEhBVkVfREVDTF9TQlJLKSAmJiAhSEFWRV9ERUNMX1NCUksKK2V4dGVybiB2b2lkICpzYnJrIChpbnQpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChIQVZFX0RFQ0xfU1RSU1RSKSAmJiAhSEFWRV9ERUNMX1NUUlNUUgorZXh0ZXJuIGNoYXIgKnN0cnN0ciAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX01BTExPQ19ICisjaW5jbHVkZSA8bWFsbG9jLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQgKEhBVkVfREVDTF9NQUxMT0MpICYmICFIQVZFX0RFQ0xfTUFMTE9DCitleHRlcm4gdm9pZCAqbWFsbG9jIChzaXplX3QpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChIQVZFX0RFQ0xfQ0FMTE9DKSAmJiAhSEFWRV9ERUNMX0NBTExPQworZXh0ZXJuIHZvaWQgKmNhbGxvYyAoc2l6ZV90LCBzaXplX3QpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChIQVZFX0RFQ0xfUkVBTExPQykgJiYgIUhBVkVfREVDTF9SRUFMTE9DCitleHRlcm4gdm9pZCAqcmVhbGxvYyAodm9pZCAqLCBzaXplX3QpOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NURElOVF9ICisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfSU5UVFlQRVNfSAorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjZW5kaWYKKworLyogSWYgdGhlIHN5c3RlbSBkb2Vzbid0IHByb3ZpZGUgc3Ryc2lnbmFsLCB3ZSBnZXQgaXQgZGVmaW5lZCBpbgorICAgbGliaWJlcnR5IGJ1dCBubyBkZWNsYXJhdGlvbiBpcyBzdXBwbGllZC4gICovCisjaWYgIWRlZmluZWQgKEhBVkVfU1RSU0lHTkFMKSBcCisgICAgfHwgKGRlZmluZWQgKEhBVkVfREVDTF9TVFJTSUdOQUwpICYmICFIQVZFX0RFQ0xfU1RSU0lHTkFMKQorIyBpZm5kZWYgc3Ryc2lnbmFsCitleHRlcm4gY29uc3QgY2hhciAqc3Ryc2lnbmFsIChpbnQpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0dFVFJMSU1JVAorIyBpZiBkZWZpbmVkIChIQVZFX0RFQ0xfR0VUUkxJTUlUKSAmJiAhSEFWRV9ERUNMX0dFVFJMSU1JVAorIyAgaWZuZGVmIGdldHJsaW1pdAorc3RydWN0IHJsaW1pdDsKK2V4dGVybiBpbnQgZ2V0cmxpbWl0IChpbnQsIHN0cnVjdCBybGltaXQgKik7CisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NFVFJMSU1JVAorIyBpZiBkZWZpbmVkIChIQVZFX0RFQ0xfU0VUUkxJTUlUKSAmJiAhSEFWRV9ERUNMX1NFVFJMSU1JVAorIyAgaWZuZGVmIHNldHJsaW1pdAorc3RydWN0IHJsaW1pdDsKK2V4dGVybiBpbnQgc2V0cmxpbWl0IChpbnQsIGNvbnN0IHN0cnVjdCBybGltaXQgKik7CisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChIQVZFX0RFQ0xfQUJPUlQpICYmICFIQVZFX0RFQ0xfQUJPUlQKK2V4dGVybiB2b2lkIGFib3J0ICh2b2lkKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoSEFWRV9ERUNMX1NOUFJJTlRGKSAmJiAhSEFWRV9ERUNMX1NOUFJJTlRGCitleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCAuLi4pOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChIQVZFX0RFQ0xfVlNOUFJJTlRGKSAmJiAhSEFWRV9ERUNMX1ZTTlBSSU5URgorZXh0ZXJuIGludCB2c25wcmludGYoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisjZW5kaWYKKworLyogMSBpZiB3ZSBoYXZlIEM5OSBkZXNpZ25hdGVkIGluaXRpYWxpemVycy4gICovCisjaWYgIWRlZmluZWQoSEFWRV9ERVNJR05BVEVEX0lOSVRJQUxJWkVSUykKKyNkZWZpbmUgSEFWRV9ERVNJR05BVEVEX0lOSVRJQUxJWkVSUyBcCisgICgoKEdDQ19WRVJTSU9OID49IDIwMDcpIHx8IChfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpKSBcCisgICAmJiAhZGVmaW5lZChfX2NwbHVzcGx1cykpCisjZW5kaWYKKworI2lmIEhBVkVfU1lTX1NUQVRfSAorIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisKKy8qIFRlc3QgaWYgc29tZXRoaW5nIGlzIGEgbm9ybWFsIGZpbGUuICAqLworI2lmbmRlZiBTX0lTUkVHCisjZGVmaW5lIFNfSVNSRUcobSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZSRUcpCisjZW5kaWYKKworLyogVGVzdCBpZiBzb21ldGhpbmcgaXMgYSBkaXJlY3RvcnkuICAqLworI2lmbmRlZiBTX0lTRElSCisjZGVmaW5lIFNfSVNESVIobSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZESVIpCisjZW5kaWYKKworLyogVGVzdCBpZiBzb21ldGhpbmcgaXMgYSBjaGFyYWN0ZXIgc3BlY2lhbCBmaWxlLiAgKi8KKyNpZm5kZWYgU19JU0NIUgorI2RlZmluZSBTX0lTQ0hSKG0pICgoKG0pICYgU19JRk1UKSA9PSBTX0lGQ0hSKQorI2VuZGlmCisKKy8qIFRlc3QgaWYgc29tZXRoaW5nIGlzIGEgYmxvY2sgc3BlY2lhbCBmaWxlLiAgKi8KKyNpZm5kZWYgU19JU0JMSworI2RlZmluZSBTX0lTQkxLKG0pICgoKG0pICYgU19JRk1UKSA9PSBTX0lGQkxLKQorI2VuZGlmCisKKy8qIFRlc3QgaWYgc29tZXRoaW5nIGlzIGEgc29ja2V0LiAgKi8KKyNpZm5kZWYgU19JU1NPQ0sKKyMgaWZkZWYgU19JRlNPQ0sKKyMgICBkZWZpbmUgU19JU1NPQ0sobSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZTT0NLKQorIyBlbHNlCisjICAgZGVmaW5lIFNfSVNTT0NLKG0pIDAKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBUZXN0IGlmIHNvbWV0aGluZyBpcyBhIEZJRk8uICAqLworI2lmbmRlZiBTX0lTRklGTworIyBpZmRlZiBTX0lGSUZPCisjICBkZWZpbmUgU19JU0ZJRk8obSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZJRk8pCisjIGVsc2UKKyMgIGRlZmluZSBTX0lTRklGTyhtKSAwCisjIGVuZGlmCisjZW5kaWYKKworLyogRGVmaW5lIHdlbGwga25vd24gZmlsZW5vcyBpZiB0aGUgc3lzdGVtIGRvZXMgbm90IGRlZmluZSB0aGVtLiAgKi8KKyNpZm5kZWYgU1RESU5fRklMRU5PCisjIGRlZmluZSBTVERJTl9GSUxFTk8gICAwCisjZW5kaWYKKyNpZm5kZWYgU1RET1VUX0ZJTEVOTworIyBkZWZpbmUgU1RET1VUX0ZJTEVOTyAgMQorI2VuZGlmCisjaWZuZGVmIFNUREVSUl9GSUxFTk8KKyMgZGVmaW5lIFNUREVSUl9GSUxFTk8gIDIKKyNlbmRpZgorCisvKiBTb21lIHN5c3RlbXMgaGF2ZSBta2RpciB0aGF0IHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50LiAgKi8KKyNpZmRlZiBNS0RJUl9UQUtFU19PTkVfQVJHCisjIGRlZmluZSBta2RpcihhLGIpIG1rZGlyKGEpCisjZW5kaWYKKworLyogUHJvdmlkZSBhIHdheSB0byBwcmludCBhbiBhZGRyZXNzIHZpYSBwcmludGYuICAqLworI2lmbmRlZiBIT1NUX1BUUl9QUklOVEYKKyNkZWZpbmUgSE9TVF9QVFJfUFJJTlRGICIlcCIKKyNlbmRpZiAvKiAhIEhPU1RfUFRSX1BSSU5URiAqLworCisvKiBCeSBkZWZhdWx0LCBjb2xvbiBzZXBhcmF0ZXMgZGlyZWN0b3JpZXMgaW4gYSBwYXRoLiAgKi8KKyNpZm5kZWYgUEFUSF9TRVBBUkFUT1IKKyNkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJzonCisjZW5kaWYKKworLyogRmlsZW5hbWUgaGFuZGxpbmcgbWFjcm9zLiAgKi8KKyNpbmNsdWRlICJmaWxlbmFtZXMuaCIKKworLyogVGhlc2Ugc2hvdWxkIGJlIHBoYXNlZCBvdXQgaW4gZmF2b3Igb2YgSVNfRElSX1NFUEFSQVRPUiwgd2hlcmUgcG9zc2libGUuICAqLworI2lmbmRlZiBESVJfU0VQQVJBVE9SCisjIGRlZmluZSBESVJfU0VQQVJBVE9SICcvJworIyBpZmRlZiBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQorIyAgZGVmaW5lIERJUl9TRVBBUkFUT1JfMiAnXFwnCisjIGVuZGlmCisjZW5kaWYKKworLyogR2V0IGxpYmliZXJ0eSBkZWNsYXJhdGlvbnMuICAqLworI2luY2x1ZGUgImxpYmliZXJ0eS5oIgorCisvKiBQcm92aWRlIGEgZGVmYXVsdCBmb3IgdGhlIEhPU1RfQklUX0JVQ0tFVC4KKyAgIFRoaXMgc3VmZmljZXMgZm9yIFBPU0lYLWxpa2UgaG9zdHMuICAqLworCisjaWZuZGVmIEhPU1RfQklUX0JVQ0tFVAorI2RlZmluZSBIT1NUX0JJVF9CVUNLRVQgIi9kZXYvbnVsbCIKKyNlbmRpZgorCisvKiBCZSBjb25zZXJ2YXRpdmUgYW5kIG9ubHkgdXNlIGVudW0gYml0ZmllbGRzIHdpdGggR0NDLgorICAgRklYTUU6IHByb3ZpZGUgYSBjb21wbGV0ZSBhdXRvY29uZiB0ZXN0IGZvciBidWdneSBlbnVtIGJpdGZpZWxkcy4gICovCisKKyNpZiAoR0NDX1ZFUlNJT04gPiAyMDAwKQorI2RlZmluZSBFTlVNX0JJVEZJRUxEKFRZUEUpIF9fZXh0ZW5zaW9uX18gZW51bSBUWVBFCisjZWxzZQorI2RlZmluZSBFTlVNX0JJVEZJRUxEKFRZUEUpIHVuc2lnbmVkIGludAorI2VuZGlmCisKKyNpZm5kZWYgb2Zmc2V0b2YKKyNkZWZpbmUgb2Zmc2V0b2YoVFlQRSwgTUVNQkVSKQkoKHNpemVfdCkgJigoVFlQRSAqKSAwKS0+TUVNQkVSKQorI2VuZGlmCisKKy8qIFZhcmlvdXMgZXJyb3IgcmVwb3J0aW5nIHJvdXRpbmVzIHdhbnQgdG8gdXNlIF9fRlVOQ1RJT05fXy4gICovCisjaWYgKEdDQ19WRVJTSU9OIDwgMjAwNykKKyNpZm5kZWYgX19GVU5DVElPTl9fCisjZGVmaW5lIF9fRlVOQ1RJT05fXyAiPyIKKyNlbmRpZiAvKiAhIF9fRlVOQ1RJT05fXyAqLworI2VuZGlmCisKKy8qIF9fYnVpbHRpbl9leHBlY3QoQSwgQikgZXZhbHVhdGVzIHRvIEEsIGJ1dCBub3RpZmllcyB0aGUgY29tcGlsZXIgdGhhdAorICAgdGhlIG1vc3QgbGlrZWx5IHZhbHVlIG9mIEEgaXMgQi4gIFRoaXMgZmVhdHVyZSB3YXMgYWRkZWQgYXQgc29tZSBwb2ludAorICAgYmV0d2VlbiAyLjk1IGFuZCAzLjAuICBMZXQncyB1c2UgMy4wIGFzIHRoZSBsb3dlciBib3VuZCBmb3Igbm93LiAgKi8KKyNpZiAoR0NDX1ZFUlNJT04gPCAzMDAwKQorI2RlZmluZSBfX2J1aWx0aW5fZXhwZWN0KGEsIGIpIChhKQorI2VuZGlmCisKKy8qIFJlZGVmaW5lIGFib3J0IHRvIHJlcG9ydCBhbiBpbnRlcm5hbCBlcnJvciB3L28gY29yZWR1bXAsIGFuZAorICAgcmVwb3J0aW5nIHRoZSBsb2NhdGlvbiBvZiB0aGUgZXJyb3IgaW4gdGhlIHNvdXJjZSBmaWxlLiAgKi8KK2V4dGVybiB2b2lkIGZhbmN5X2Fib3J0IChjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKSBBVFRSSUJVVEVfTk9SRVRVUk47CisjZGVmaW5lIGFib3J0KCkgZmFuY3lfYWJvcnQgKF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKQorCisvKiBVc2UgZ2NjX2Fzc2VydChFWFBSKSB0byB0ZXN0IGludmFyaWFudHMuICAqLworI2lmIEVOQUJMRV9BU1NFUlRfQ0hFQ0tJTkcKKyNkZWZpbmUgZ2NjX2Fzc2VydChFWFBSKSAJCQkJCQlcCisgICAoKHZvaWQpKCEoRVhQUikgPyBmYW5jeV9hYm9ydCAoX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pLCAwIDogMCkpCisjZWxpZiAoR0NDX1ZFUlNJT04gPj0gNDAwNSkKKyNkZWZpbmUgZ2NjX2Fzc2VydChFWFBSKSAJCQkJCQlcCisgICgodm9pZCkoX19idWlsdGluX2V4cGVjdCghKEVYUFIpLCAwKSA/IF9fYnVpbHRpbl91bnJlYWNoYWJsZSgpLCAwIDogMCkpCisjZWxzZQorLyogSW5jbHVkZSBFWFBSLCBzbyB0aGF0IHVudXNlZCB2YXJpYWJsZSB3YXJuaW5ncyBkbyBub3Qgb2NjdXIuICAqLworI2RlZmluZSBnY2NfYXNzZXJ0KEVYUFIpICgodm9pZCkoMCAmJiAoRVhQUikpKQorI2VuZGlmCisKKy8qIFVzZSBnY2NfdW5yZWFjaGFibGUoKSB0byBtYXJrIHVucmVhY2hhYmxlIGxvY2F0aW9ucyAobGlrZSBhbgorICAgdW5yZWFjaGFibGUgZGVmYXVsdCBjYXNlIG9mIGEgc3dpdGNoLiAgRG8gbm90IHVzZSBnY2NfYXNzZXJ0KDApLiAgKi8KKyNpZiAoR0NDX1ZFUlNJT04gPj0gNDAwNSkgJiYgIUVOQUJMRV9BU1NFUlRfQ0hFQ0tJTkcKKyNkZWZpbmUgZ2NjX3VucmVhY2hhYmxlKCkgX19idWlsdGluX3VucmVhY2hhYmxlKCkKKyNlbHNlCisjZGVmaW5lIGdjY191bnJlYWNoYWJsZSgpIChmYW5jeV9hYm9ydCAoX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pKQorI2VuZGlmCisKKy8qIFByb3ZpZGUgYSBmYWtlIGJvb2xlYW4gdHlwZS4gIFdlIG1ha2Ugbm8gYXR0ZW1wdCB0byB1c2UgdGhlCisgICBDOTkgX0Jvb2wsIGFzIGl0IG1heSBub3QgYmUgYXZhaWxhYmxlIGluIHRoZSBib290c3RyYXAgY29tcGlsZXIsCisgICBhbmQgZXZlbiBpZiBpdCBpcywgaXQgaXMgbGlhYmxlIHRvIGJlIGJ1Z2d5LgorICAgVGhpcyBtdXN0IGJlIGFmdGVyIGFsbCBpbmNsdXNpb24gb2Ygc3lzdGVtIGhlYWRlcnMsIGFzIHNvbWUgb2YKKyAgIHRoZW0gd2lsbCBtZXNzIHVzIHVwLiAgKi8KKworI3VuZGVmIFRSVUUKKyN1bmRlZiBGQUxTRQorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgLyogT2Jzb2xldGUuICAqLworIyBkZWZpbmUgVFJVRSB0cnVlCisjIGRlZmluZSBGQUxTRSBmYWxzZQorI2Vsc2UgLyogIV9fY3BsdXNwbHVzICovCisjIHVuZGVmIGJvb2wKKyMgdW5kZWYgdHJ1ZQorIyB1bmRlZiBmYWxzZQorCisjIGRlZmluZSBib29sIHVuc2lnbmVkIGNoYXIKKyMgZGVmaW5lIHRydWUgMQorIyBkZWZpbmUgZmFsc2UgMAorCisgIC8qIE9ic29sZXRlLiAgKi8KKyMgZGVmaW5lIFRSVUUgdHJ1ZQorIyBkZWZpbmUgRkFMU0UgZmFsc2UKKyNlbmRpZiAvKiAhX19jcGx1c3BsdXMgKi8KKworLyogU29tZSBjb21waWxlcnMgZG8gbm90IGFsbG93IHRoZSB1c2Ugb2YgdW5zaWduZWQgY2hhciBpbiBiaXRmaWVsZHMuICAqLworI2RlZmluZSBCT09MX0JJVEZJRUxEIHVuc2lnbmVkIGludAorCisvKiBBcyB0aGUgbGFzdCBhY3Rpb24gaW4gdGhpcyBmaWxlLCB3ZSBwb2lzb24gdGhlIGlkZW50aWZpZXJzIHRoYXQKKyAgIHNob3VsZG4ndCBiZSB1c2VkLiAgTm90ZSwgbHVja2lseSBnY2MtMy4wJ3MgdG9rZW4tYmFzZWQgaW50ZWdyYXRlZAorICAgcHJlcHJvY2Vzc29yIHdvbid0IHRyaXAgb24gcG9pc29uZWQgaWRlbnRpZmllcnMgdGhhdCBhcnJpdmUgZnJvbQorICAgdGhlIGV4cGFuc2lvbiBvZiBtYWNyb3MuICBFLmcuICNkZWZpbmUgc3RycmNociByaW5kZXgsIHdvbid0IGVycm9yCisgICBpZiByaW5kZXggaXMgcG9pc29uZWQgYWZ0ZXIgdGhpcyBkaXJlY3RpdmUgaXMgaXNzdWVkIGFuZCBsYXRlciBvbgorICAgc3RycmNociBpcyBjYWxsZWQuCisKKyAgIE5vdGU6IFdlIGRlZmluZSBieXBhc3MgbWFjcm9zIGZvciB0aGUgZmV3IGNhc2VzIHdoZXJlIHdlIHJlYWxseQorICAgd2FudCB0byB1c2UgdGhlIGxpYmMgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMuICBPdGhlcndpc2Ugd2UKKyAgIGluc2lzdCB5b3UgdXNlIHRoZSAieCIgdmVyc2lvbnMgZnJvbSBsaWJpYmVydHkuICAqLworCisjZGVmaW5lIHJlYWxseV9jYWxsX21hbGxvYyBtYWxsb2MKKyNkZWZpbmUgcmVhbGx5X2NhbGxfY2FsbG9jIGNhbGxvYworI2RlZmluZSByZWFsbHlfY2FsbF9yZWFsbG9jIHJlYWxsb2MKKworI2lmIGRlZmluZWQoRkxFWF9TQ0FOTkVSKSB8fCBkZWZpbmVkKFlZQklTT04pIHx8IGRlZmluZWQoWVlCWUFDQykKKy8qIEZsZXggYW5kIGJpc29uIHVzZSBtYWxsb2MgYW5kIHJlYWxsb2MuICBZdWsuICBOb3RlIHRoYXQgdGhpcyBtZWFucworICAgcmVhbGx5X2NhbGxfKiBjYW5ub3QgYmUgdXNlZCBpbiBhIC5sIG9yIC55IGZpbGUuICAqLworI2RlZmluZSBtYWxsb2MgeG1hbGxvYworI2RlZmluZSByZWFsbG9jIHhyZWFsbG9jCisjZW5kaWYKKworI2lmIChHQ0NfVkVSU0lPTiA+PSAzMDAwKQorCisvKiBOb3RlIGF1dG9jb25mIGNoZWNrcyBmb3IgcHJvdG90eXBlIGRlY2xhcmF0aW9ucyBhbmQgaW5jbHVkZXMKKyAgIHN5c3RlbS5oIHdoaWxlIGRvaW5nIHNvLiAgT25seSBwb2lzb24gdGhlc2UgdG9rZW5zIGlmIGFjdHVhbGx5CisgICBjb21waWxpbmcgZ2NjLCBzbyB0aGF0IHRoZSBhdXRvY29uZiBkZWNsYXJhdGlvbiB0ZXN0cyBmb3IgbWFsbG9jCisgICBldGMgZG9uJ3Qgc3B1cmlvdXNseSBmYWlsLiAgKi8KKyNpZmRlZiBJTl9HQ0MKKyN1bmRlZiBjYWxsb2MKKyN1bmRlZiBzdHJkdXAKKyAjcHJhZ21hIEdDQyBwb2lzb24gY2FsbG9jIHN0cmR1cAorCisjaWYgIWRlZmluZWQoRkxFWF9TQ0FOTkVSKSAmJiAhZGVmaW5lZChZWUJJU09OKQorI3VuZGVmIG1hbGxvYworI3VuZGVmIHJlYWxsb2MKKyAjcHJhZ21hIEdDQyBwb2lzb24gbWFsbG9jIHJlYWxsb2MKKyNlbmRpZgorCisvKiBPbGQgdGFyZ2V0IG1hY3JvcyB0aGF0IGhhdmUgbW92ZWQgdG8gdGhlIHRhcmdldCBob29rcyBzdHJ1Y3R1cmUuICAqLworICNwcmFnbWEgR0NDIHBvaXNvbiBBU01fT1BFTl9QQVJFTiBBU01fQ0xPU0VfUEFSRU4JCQlcCisJRlVOQ1RJT05fUFJPTE9HVUUgRlVOQ1RJT05fRVBJTE9HVUUJCQkJXAorCUZVTkNUSU9OX0VORF9QUk9MT0dVRSBGVU5DVElPTl9CRUdJTl9FUElMT0dVRQkJCVwKKwlERUNMX01BQ0hJTkVfQVRUUklCVVRFUyBDT01QX1RZUEVfQVRUUklCVVRFUyBJTlNFUlRfQVRUUklCVVRFUwlcCisJVkFMSURfTUFDSElORV9ERUNMX0FUVFJJQlVURSBWQUxJRF9NQUNISU5FX1RZUEVfQVRUUklCVVRFCVwKKwlTRVRfREVGQVVMVF9UWVBFX0FUVFJJQlVURVMgU0VUX0RFRkFVTFRfREVDTF9BVFRSSUJVVEVTCQlcCisJTUVSR0VfTUFDSElORV9UWVBFX0FUVFJJQlVURVMgTUVSR0VfTUFDSElORV9ERUNMX0FUVFJJQlVURVMJXAorCU1EX0lOSVRfQlVJTFRJTlMgTURfRVhQQU5EX0JVSUxUSU4gQVNNX09VVFBVVF9DT05TVFJVQ1RPUglcCisJQVNNX09VVFBVVF9ERVNUUlVDVE9SIFNJR05FRF9DSEFSX1NQRUMgTUFYX0NIQVJfVFlQRV9TSVpFCVwKKwlXQ0hBUl9VTlNJR05FRCBVTklRVUVfU0VDVElPTiBTRUxFQ1RfU0VDVElPTiBTRUxFQ1RfUlRYX1NFQ1RJT04JXAorCUVOQ09ERV9TRUNUSU9OX0lORk8gU1RSSVBfTkFNRV9FTkNPRElORyBBU01fR0xPQkFMSVpFX0xBQkVMCVwKKwlBU01fT1VUUFVUX01JX1RIVU5LIENPTlNUX0NPU1RTIFJUWF9DT1NUUyBERUZBVUxUX1JUWF9DT1NUUwlcCisJQUREUkVTU19DT1NUIE1BQ0hJTkVfREVQRU5ERU5UX1JFT1JHIEFTTV9GSUxFX1NUQVJUIEFTTV9GSUxFX0VORCBcCisJQVNNX1NJTVBMSUZZX0RXQVJGX0FERFIgSU5JVF9UQVJHRVRfT1BUQUJTIElOSVRfU1VCVEFSR0VUX09QVEFCUyBcCisJSU5JVF9HT0ZBU1RfT1BUQUJTIE1VTFNJM19MSUJDQUxMIE1VTERJM19MSUJDQUxMIERJVlNJM19MSUJDQUxMIFwKKwlESVZESTNfTElCQ0FMTCBVRElWU0kzX0xJQkNBTEwgVURJVkRJM19MSUJDQUxMIE1PRFNJM19MSUJDQUxMCVwKKwlNT0RESTNfTElCQ0FMTCBVTU9EU0kzX0xJQkNBTEwgVU1PRERJM19MSUJDQUxMIEJVSUxEX1ZBX0xJU1RfVFlQRSBcCisJUFJFVEVORF9PVVRHT0lOR19WQVJBUkdTX05BTUVEIFNUUlVDVF9WQUxVRV9JTkNPTUlOR19SRUdOVU0JXAorCUFTTV9PVVRQVVRfU0VDVElPTl9OQU1FIFBST01PVEVfRlVOQ1RJT05fQVJHUyBQUk9NT1RFX0ZVTkNUSU9OX01PREUgXAorCVNUUlVDVF9WQUxVRV9JTkNPTUlORyBTVFJJQ1RfQVJHVU1FTlRfTkFNSU5HCQkJXAorCVBST01PVEVfRlVOQ1RJT05fUkVUVVJOIFBST01PVEVfUFJPVE9UWVBFUyBTVFJVQ1RfVkFMVUVfUkVHTlVNCVwKKwlTRVRVUF9JTkNPTUlOR19WQVJBUkdTIEVYUEFORF9CVUlMVElOX1NBVkVSRUdTCQkJXAorCURFRkFVTFRfU0hPUlRfRU5VTVMgU1BMSVRfQ09NUExFWF9BUkdTIE1EX0FTTV9DTE9CQkVSUwkJXAorCUhBTkRMRV9QUkFHTUFfUkVERUZJTkVfRVhUTkFNRSBIQU5ETEVfUFJBR01BX0VYVEVSTl9QUkVGSVgJXAorCU1VU1RfUEFTU19JTl9TVEFDSyBGVU5DVElPTl9BUkdfUEFTU19CWV9SRUZFUkVOQ0UgICAgICAgICAgICAgICBcCisgICAgICAgIFZFQ1RPUl9NT0RFX1NVUFBPUlRFRF9QIFRBUkdFVF9TVVBQT1JUU19ISURERU4gCQkJXAorCUZVTkNUSU9OX0FSR19QQVJUSUFMX05SRUdTIEFTTV9PVVRQVVRfRFdBUkZfRFRQUkVMCQlcCisJQUxMT0NBVEVfSU5JVElBTF9WQUxVRSBMRUdJVElNSVpFX0FERFJFU1MgRlJBTUVfUE9JTlRFUl9SRVFVSVJFRCBcCisJQ0FOX0VMSU1JTkFURSBUUkFNUE9MSU5FX1RFTVBMQVRFIElOSVRJQUxJWkVfVFJBTVBPTElORQkJXAorCVRSQU1QT0xJTkVfQURKVVNUX0FERFJFU1MgU1RBVElDX0NIQUlOIFNUQVRJQ19DSEFJTl9JTkNPTUlORworCisvKiBPdGhlciBvYnNvbGV0ZSB0YXJnZXQgbWFjcm9zLCBvciBtYWNyb3MgdGhhdCB1c2VkIHRvIGJlIGluIHRhcmdldAorICAgaGVhZGVycyBhbmQgd2VyZSBub3QgdXNlZCwgYW5kIG1heSBiZSBvYnNvbGV0ZSBvciBtYXkgbmV2ZXIgaGF2ZQorICAgYmVlbiB1c2VkLiAgKi8KKyAjcHJhZ21hIEdDQyBwb2lzb24gSU5UX0FTTV9PUCBBU01fT1VUUFVUX0VIX1JFR0lPTl9CRUcgQ1BQX1BSRURFRklORVMJICAgXAorCUFTTV9PVVRQVVRfRUhfUkVHSU9OX0VORCBBU01fT1VUUFVUX0xBQkVMUkVGX0FTX0lOVCBTTUFMTF9TVEFDSyAgICBcCisJRE9FU05UX05FRURfVU5XSU5ERVIgRUhfVEFCTEVfTE9PS1VQIE9CSkNfU0VMRUNUT1JTX1dJVEhPVVRfTEFCRUxTIFwKKwlPTUlUX0VIX1RBQkxFIEVBU1lfRElWX0VYUFIgSU1QTElDSVRfRklYX0VYUFIJCQkgICBcCisJTE9OR0pNUF9SRVNUT1JFX0ZST01fU1RBQ0sgTUFYX0lOVF9UWVBFX1NJWkUgQVNNX0lERU5USUZZX0dDQwkgICBcCisJU1REQ19WQUxVRSBUUkFNUE9MSU5FX0FMSUdOIEFTTV9JREVOVElGWV9HQ0NfQUZURVJfU09VUkNFCSAgIFwKKwlTTE9XX1pFUk9fRVhURU5EIFNVQlJFR19SRUdOT19PRkZTRVQgRFdBUkZfTElORV9NSU5fSU5TVFJfTEVOR1RIICAgXAorCVRSQURJVElPTkFMX1JFVFVSTl9GTE9BVCBOT19CVUlMVElOX1NJWkVfVFlQRQkJCSAgIFwKKwlOT19CVUlMVElOX1BUUkRJRkZfVFlQRSBOT19CVUlMVElOX1dDSEFSX1RZUEUgTk9fQlVJTFRJTl9XSU5UX1RZUEUgXAorCUJMT0NLX1BST0ZJTEVSIEJMT0NLX1BST0ZJTEVSX0NPREUgRlVOQ1RJT05fQkxPQ0tfUFJPRklMRVIJICAgXAorCUZVTkNUSU9OX0JMT0NLX1BST0ZJTEVSX0VYSVQgTUFDSElORV9TVEFURV9TQVZFCQkJICAgXAorCU1BQ0hJTkVfU1RBVEVfUkVTVE9SRSBTQ0NTX0RJUkVDVElWRSBTRUNUSU9OX0FTTV9PUCBCWVRFT1JERVIJICAgXAorCUFTTV9PVVRQVVRfREVGSU5FX0xBQkVMX0RJRkZFUkVOQ0VfU1lNQk9MIEhPU1RfV09SRFNfQklHX0VORElBTgkgICBcCisJT0JKQ19QUk9MT0dVRSBBTExPQ0FURV9UUkFNUE9MSU5FIEhBTkRMRV9QUkFHTUEgUk9VTkRfVFlQRV9TSVpFCSAgIFwKKwlST1VORF9UWVBFX1NJWkVfVU5JVCBDT05TVF9TRUNUSU9OX0FTTV9PUCBDUlRfR0VUX1JGSUJfVEVYVAkgICBcCisJREJYX0xCUkFDX0ZJUlNUIERCWF9PVVRQVVRfRU5VTSBEQlhfT1VUUFVUX1NPVVJDRV9GSUxFTkFNRQkgICBcCisJREJYX1dPUktJTkdfRElSRUNUT1JZIElOU05fQ0FDSEVfREVQVEggSU5TTl9DQUNIRV9TSVpFCQkgICBcCisJSU5TTl9DQUNIRV9MSU5FX1dJRFRIIElOSVRfU0VDVElPTl9QUkVBTUJMRSBORUVEX0FURVhJVCBPTl9FWElUCSAgIFwKKwlFWElUX0JPRFkgT0JKRUNUX0ZPUk1BVF9ST1NFIE1VTFRJQllURV9DSEFSUyBNQVBfQ0hBUkFDVEVSCSAgIFwKKwlMSUJHQ0NfTkVFRFNfRE9VQkxFIEZJTkFMX1BSRVNDQU5fTEFCRUwgREVGQVVMVF9DQUxMRVJfU0FWRVMJICAgXAorCUxPQURfQVJHU19SRVZFUlNFRCBNQVhfSU5URUdFUl9DT01QVVRBVElPTl9NT0RFCQkJICAgXAorCUNPTlZFUlRfSEFSRF9SRUdJU1RFUl9UT19TU0FfUCBBU01fT1VUUFVUX01BSU5fU09VUkNFX0ZJTEVOQU1FCSAgIFwKKwlGSVJTVF9JTlNOX0FERFJFU1MgVEVYVF9TRUNUSU9OIFNIQVJFRF9CU1NfU0VDVElPTl9BU01fT1AJICAgXAorCVBST01PVEVEX01PREUgRVhQQU5EX0JVSUxUSU5fVkFfRU5ECQkJCSAgIFwKKwlMSU5LRVJfRE9FU19OT1RfV09SS19XSVRIX0RXQVJGMiBGVU5DVElPTl9BUkdfS0VFUF9BU19SRUZFUkVOQ0UJICAgXAorCUdJVl9TT1JUX0NSSVRFUklPTiBNQVhfTE9OR19UWVBFX1NJWkUgTUFYX0xPTkdfRE9VQkxFX1RZUEVfU0laRQkgICBcCisJTUFYX1dDSEFSX1RZUEVfU0laRSBTSEFSRURfU0VDVElPTl9BU01fT1AgSU5URUdSQVRFX1RIUkVTSE9MRCAgICAgIFwKKwlGSU5BTF9SRUdfUEFSTV9TVEFDS19TUEFDRSBNQVlCRV9SRUdfUEFSTV9TVEFDS19TUEFDRQkJICAgXAorCVRSQURJVElPTkFMX1BJUEVMSU5FX0lOVEVSRkFDRSBERkFfUElQRUxJTkVfSU5URVJGQUNFCQkgICBcCisJREJYX09VVFBVVF9TVEFOREFSRF9UWVBFUyBCVUlMVElOX1NFVEpNUF9GUkFNRV9WQUxVRQkJICAgXAorCVNVTk9TNF9TSEFSRURfTElCUkFSSUVTIFBST01PVEVfRk9SX0NBTExfT05MWQkJCSAgIFwKKwlTUEFDRV9BRlRFUl9MX09QVElPTiBOT19SRUNVUlNJVkVfRlVOQ1RJT05fQ1NFCQkJICAgXAorCURFRkFVTFRfTUFJTl9SRVRVUk4gVEFSR0VUX01FTV9GVU5DVElPTlMgRVhQQU5EX0JVSUxUSU5fVkFfQVJHCSAgIFwKKwlDT0xMRUNUX1BBUlNFX0ZMQUcgRFdBUkYyX0dFTkVSQVRFX1RFWFRfU0VDVElPTl9MQUJFTCBXSU5OSU5HX0dEQiAgXAorCUFTTV9PVVRQVVRfRklMRU5BTUUgQVNNX09VVFBVVF9TT1VSQ0VfTElORSBGSUxFX05BTUVfSk9JTkVSCSAgIFwKKwlHREJfSU5WX1JFRl9SRUdQQVJNX1NUQUJTX0xFVFRFUiBEQlhfTUVNUEFSTV9TVEFCU19MRVRURVIJICAgXAorCVBVVF9TREJfU1JDX0ZJTEUgU1RBQlNfR0NDX01BUktFUiBEQlhfT1VUUFVUX0ZVTkNUSU9OX0VORAkgICBcCisJREJYX09VVFBVVF9HQ0NfTUFSS0VSIERCWF9GSU5JU0hfU1lNQk9MIFNEQl9HRU5FUkFURV9GQUtFCSAgIFwKKwlOT05fU0FWSU5HX1NFVEpNUCBUQVJHRVRfTEFURV9SVExfUFJPTE9HVUVfRVBJTE9HVUUJCSAgIFwKKwlDQVNFX0RST1BTX1RIUk9VR0ggVEFSR0VUX0JFTEwgVEFSR0VUX0JTIFRBUkdFVF9DUiBUQVJHRVRfRElHSVQwICAgXAorICAgICAgICBUQVJHRVRfRVNDIFRBUkdFVF9GRiBUQVJHRVRfTkVXTElORSBUQVJHRVRfVEFCIFRBUkdFVF9WVAkgICBcCisgICAgICAgIExJTktfTElCR0NDX1NQRUNJQUwgRE9OVF9BQ0NFU1NfR0JMU19BRlRFUl9FUElMT0dVRQkJICAgXAorCVRBUkdFVF9PUFRJT05TIFRBUkdFVF9TV0lUQ0hFUyBFWFRSQV9DQ19NT0RFUyBGSU5BTElaRV9QSUMJICAgXAorCVBSRURJQ0FURV9DT0RFUyBTUEVDSUFMX01PREVfUFJFRElDQVRFUwlVTkFMSUdORURfV09SRF9BU01fT1AJICAgXAorCUVYVFJBX1NFQ1RJT05TIEVYVFJBX1NFQ1RJT05fRlVOQ1RJT05TIFJFQURPTkxZX0RBVEFfU0VDVElPTgkgICBcCisJVEFSR0VUX0FTTV9FWENFUFRJT05fU0VDVElPTiBUQVJHRVRfQVNNX0VIX0ZSQU1FX1NFQ1RJT04JICAgXAorCVNNQUxMX0FSR19NQVggQVNNX09VVFBVVF9TSEFSRURfQlNTIEFTTV9PVVRQVVRfU0hBUkVEX0NPTU1PTgkgICBcCisJQVNNX09VVFBVVF9TSEFSRURfTE9DQUwgQVNNX01BS0VfTEFCRUxfTElOS09OQ0UJCQkgICBcCisJU1RBQ0tfQ0hFQ0tfUFJPQkVfSU5URVJWQUwgU1RBQ0tfQ0hFQ0tfUFJPQkVfTE9BRAorCisvKiBIb29rcyB0aGF0IGFyZSBubyBsb25nZXIgdXNlZC4gICovCisgI3ByYWdtYSBHQ0MgcG9pc29uIExBTkdfSE9PS1NfRlVOQ1RJT05fTUFSSyBMQU5HX0hPT0tTX0ZVTkNUSU9OX0ZSRUUJXAorCUxBTkdfSE9PS1NfTUFSS19UUkVFIExBTkdfSE9PS1NfSU5TRVJUX0RFRkFVTFRfQVRUUklCVVRFUyBcCisJTEFOR19IT09LU19UUkVFX0lOTElOSU5HX0VTVElNQVRFX05VTV9JTlNOUyBcCisJTEFOR19IT09LU19QVVNITEVWRUwgTEFOR19IT09LU19TRVRfQkxPQ0sgXAorCUxBTkdfSE9PS1NfTUFZQkVfQlVJTERfQ0xFQU5VUCBMQU5HX0hPT0tTX1VQREFURV9ERUNMX0FGVEVSX1NBVklORyBcCisJTEFOR19IT09LU19QT1BMRVZFTCBMQU5HX0hPT0tTX1RSVVRIVkFMVUVfQ09OVkVSU0lPTiBcCisJVEFSR0VUX1BST01PVEVfRlVOQ1RJT05fQVJHUyBUQVJHRVRfUFJPTU9URV9GVU5DVElPTl9SRVRVUk4KKworLyogTWlzY2VsbGFuZW91cyBtYWNyb3MgdGhhdCBhcmUgbm8gbG9uZ2VyIHVzZWQuICAqLworICNwcmFnbWEgR0NDIHBvaXNvbiBVU0VfTUFQUEVEX0xPQ0FUSU9OCisKKy8qIExpYmliZXJ0eSBtYWNyb3MgdGhhdCBhcmUgbm8gbG9uZ2VyIHVzZWQgaW4gR0NDLiAgKi8KKyN1bmRlZiBBTlNJX1BST1RPVFlQRVMKKyN1bmRlZiBQVFJfQ09OU1QKKyN1bmRlZiBMT05HX0RPVUJMRQorI3VuZGVmIFZQQVJBTVMKKyN1bmRlZiBWQV9PUEVOCisjdW5kZWYgVkFfRklYRURBUkcKKyN1bmRlZiBWQV9DTE9TRQorI3VuZGVmIFZBX1NUQVJUCisgI3ByYWdtYSBHQ0MgcG9pc29uIEFOU0lfUFJPVE9UWVBFUyBQVFJfQ09OU1QgTE9OR19ET1VCTEUgVlBBUkFNUyBWQV9PUEVOIFwKKyAgVkFfRklYRURBUkcgVkFfQ0xPU0UgVkFfU1RBUlQKKyNlbmRpZiAvKiBJTl9HQ0MgKi8KKworLyogTm90ZTogbm90IGFsbCB1c2VzIG9mIHRoZSBgaW5kZXgnIHRva2VuIChlLmcuIHZhcmlhYmxlIG5hbWVzIGFuZAorICAgc3RydWN0dXJlIG1lbWJlcnMpIGhhdmUgYmVlbiBlbGltaW5hdGVkLiAgKi8KKyN1bmRlZiBiY29weQorI3VuZGVmIGJ6ZXJvCisjdW5kZWYgYmNtcAorI3VuZGVmIHJpbmRleAorICNwcmFnbWEgR0NDIHBvaXNvbiBiY29weSBiemVybyBiY21wIHJpbmRleAorCisjZW5kaWYgLyogR0NDID49IDMuMCAqLworCisvKiBUaGlzIG1hY3JvIGFsbG93cyBjYXN0aW5nIGF3YXkgY29uc3QtbmVzcyB0byBwYXNzIC1XY2FzdC1xdWFsCisgICB3YXJuaW5ncy4gIERPIE5PVCBVU0UgVEhJUyBVTkxFU1MgWU9VIFJFQUxMWSBIQVZFIFRPISAgSXQgc2hvdWxkCisgICBvbmx5IGJlIHVzZWQgaW4gY2VydGFpbiBzcGVjaWZpYyBjYXNlcy4gIE9uZSB2YWxpZCBjYXNlIGlzIHdoZXJlCisgICB0aGUgQyBzdGFuZGFyZCBkZWZpbml0aW9ucyBvciBwcm90b3R5cGVzIGZvcmNlIHlvdSB0by4gIEUuZy4gaWYgeW91CisgICBuZWVkIHRvIGZyZWUgYSBjb25zdCBvYmplY3QsIG9yIGlmIHlvdSBwYXNzIGEgY29uc3Qgc3RyaW5nIHRvCisgICBleGVjdiwgZXQgYWwuICBBbm90aGVyIHZhbGlkIHVzZSB3b3VsZCBiZSBpbiBhbiBhbGxvY2F0aW9uIGZ1bmN0aW9uCisgICB0aGF0IGNyZWF0ZXMgY29uc3Qgb2JqZWN0cyB0aGF0IG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQuICBJbiBzb21lCisgICBjYXNlcyB3ZSBoYXZlIG5vbi1jb25zdCBmdW5jdGlvbnMgdGhhdCByZXR1cm4gdGhlIGFyZ3VtZW50CisgICAoZS5nLiBuZXh0X25vbm5vdGVfaW5zbikuICBSYXRoZXIgdGhhbiBjcmVhdGUgY29uc3Qgc2hhZG93CisgICBmdW5jdGlvbnMsIHdlIGNhbiBjYXN0IGF3YXkgY29uc3QtbmVzcyBpbiBjYWxsaW5nIHRoZXNlIGludGVyZmFjZXMKKyAgIGlmIHdlJ3JlIGNhcmVmdWwgdG8gdmVyaWZ5IHRoYXQgdGhlIGNhbGxlZCBmdW5jdGlvbiBkb2VzIGluZGVlZCBub3QKKyAgIG1vZGlmeSBpdHMgYXJndW1lbnQgYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgb25seSB1c2VkIGluIGEgY29uc3QKKyAgIGNvbnRleHQuICAoVGhpcyBjYW4gYmUgc29tZXdoYXQgZGFuZ2Vyb3VzIGFzIHRoZXNlIGFzc3VtcHRpb25zIGNhbgorICAgY2hhbmdlIGFmdGVyIHRoZSBmYWN0KS4gIEJleW9uZCB0aGVzZSB1c2VzLCBtb3N0IG90aGVyIGNhc2VzIG9mCisgICB1c2luZyB0aGlzIG1hY3JvIHNob3VsZCBiZSB2aWV3ZWQgd2l0aCBleHRyZW1lIGNhdXRpb24uICAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgQ09OU1RfQ0FTVDIoVE9UWVBFLEZST01UWVBFLFgpIChjb25zdF9jYXN0PFRPVFlQRT4gKFgpKQorI2Vsc2UKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBHQ0NfVkVSU0lPTiA+IDQwMDAKKy8qIEdDQyA0LjAueCBoYXMgYSBidWcgd2hlcmUgaXQgbWF5IElDRSBvbiB0aGlzIGV4cHJlc3Npb24sCisgICBzbyBkb2VzIEdDQyAzLjQueCAoUFIxNzQzNikuICAqLworI2RlZmluZSBDT05TVF9DQVNUMihUT1RZUEUsRlJPTVRZUEUsWCkgKChfX2V4dGVuc2lvbl9fKHVuaW9uIHtGUk9NVFlQRSBfcTsgVE9UWVBFIF9ucTt9KShYKSkuX25xKQorI2Vsc2UKKyNkZWZpbmUgQ09OU1RfQ0FTVDIoVE9UWVBFLEZST01UWVBFLFgpICgoVE9UWVBFKShGUk9NVFlQRSkoWCkpCisjZW5kaWYKKyNlbmRpZgorI2RlZmluZSBDT05TVF9DQVNUKFRZUEUsWCkgQ09OU1RfQ0FTVDIoVFlQRSwgY29uc3QgVFlQRSwgKFgpKQorI2RlZmluZSBDT05TVF9DQVNUX1RSRUUoWCkgQ09OU1RfQ0FTVCh1bmlvbiB0cmVlX25vZGUgKiwgKFgpKQorI2RlZmluZSBDT05TVF9DQVNUX1JUWChYKSBDT05TVF9DQVNUKHN0cnVjdCBydHhfZGVmICosIChYKSkKKyNkZWZpbmUgQ09OU1RfQ0FTVF9CQihYKSBDT05TVF9DQVNUKHN0cnVjdCBiYXNpY19ibG9ja19kZWYgKiwgKFgpKQorI2RlZmluZSBDT05TVF9DQVNUX0dJTVBMRShYKSBDT05TVF9DQVNUKHVuaW9uIGdpbXBsZV9zdGF0ZW1lbnRfZCAqLCAoWCkpCisKKy8qIEFjdGl2YXRlIGNlcnRhaW4gZGlhZ25vc3RpY3MgYXMgd2FybmluZ3MgKG5vdCBlcnJvcnMgdmlhIHRoZQorICAgLVdlcnJvciBmbGFnKS4gICovCisjaWYgR0NDX1ZFUlNJT04gPj0gNDAwMworLyogSWYgYXNzZXJ0cyBhcmUgZGlzYWJsZWQsIGFjdGl2YXRlIC1XdW5pbml0aWFsaXplZCBhcyBhIHdhcm5pbmcgKG5vdAorICAgYW4gZXJyb3IvLVdlcnJvcikuICAqLworI2lmbmRlZiBFTkFCTEVfQVNTRVJUX0NIRUNLSU5HCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHdhcm5pbmcgIi1XdW5pbml0aWFsaXplZCIKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBFTkFCTEVfVkFMR1JJTkRfQ0hFQ0tJTkcKKyMgaWZkZWYgSEFWRV9WQUxHUklORF9NRU1DSEVDS19ICisjICBpbmNsdWRlIDx2YWxncmluZC9tZW1jaGVjay5oPgorIyBlbGlmIGRlZmluZWQgSEFWRV9NRU1DSEVDS19ICisjICBpbmNsdWRlIDxtZW1jaGVjay5oPgorIyBlbHNlCisjICBpbmNsdWRlIDx2YWxncmluZC5oPgorIyBlbmRpZgorLyogQ29tcGF0aWJpbGl0eSBtYWNyb3MgdG8gbGV0IHZhbGdyaW5kIDMuMSB3b3JrLiAgKi8KKyMgaWZuZGVmIFZBTEdSSU5EX01BS0VfTUVNX05PQUNDRVNTCisjICBkZWZpbmUgVkFMR1JJTkRfTUFLRV9NRU1fTk9BQ0NFU1MgVkFMR1JJTkRfTUFLRV9OT0FDQ0VTUworIyBlbmRpZgorIyBpZm5kZWYgVkFMR1JJTkRfTUFLRV9NRU1fREVGSU5FRAorIyAgZGVmaW5lIFZBTEdSSU5EX01BS0VfTUVNX0RFRklORUQgVkFMR1JJTkRfTUFLRV9SRUFEQUJMRQorIyBlbmRpZgorIyBpZm5kZWYgVkFMR1JJTkRfTUFLRV9NRU1fVU5ERUZJTkVECisjICBkZWZpbmUgVkFMR1JJTkRfTUFLRV9NRU1fVU5ERUZJTkVEIFZBTEdSSU5EX01BS0VfV1JJVEFCTEUKKyMgZW5kaWYKKyNlbHNlCisvKiBBdm9pZCAjaWZkZWY6cyB3aGVuIHdlIGNhbiBoZWxwIGl0LiAgKi8KKyNkZWZpbmUgVkFMR1JJTkRfRElTQ0FSRCh4KQorI2RlZmluZSBWQUxHUklORF9NQUxMT0NMSUtFX0JMT0NLKHcseCx5LHopCisjZGVmaW5lIFZBTEdSSU5EX0ZSRUVMSUtFX0JMT0NLKHgseSkKKyNlbmRpZgorCisjZW5kaWYgLyogISBHQ0NfU1lTVEVNX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS90YXJnZXQuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS90YXJnZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzdjMjA2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3RhcmdldC5oCkBAIC0wLDAgKzEsMTI0NCBAQAorLyogRGF0YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgZm9yIGEgZ2VuZXJpYyBHQ0MgdGFyZ2V0LgorICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyAgIEluIG90aGVyIHdvcmRzLCB5b3UgYXJlIHdlbGNvbWUgdG8gdXNlLCBzaGFyZSBhbmQgaW1wcm92ZSB0aGlzIHByb2dyYW0uCisgICBZb3UgYXJlIGZvcmJpZGRlbiB0byBmb3JiaWQgYW55b25lIGVsc2UgdG8gdXNlLCBzaGFyZSBhbmQgaW1wcm92ZQorICAgd2hhdCB5b3UgZ2l2ZSB0aGVtLiAgIEhlbHAgc3RhbXAgb3V0IHNvZnR3YXJlLWhvYXJkaW5nISAgKi8KKworCisvKiBUaGlzIGZpbGUgY29udGFpbnMgYSBkYXRhIHN0cnVjdHVyZSB0aGF0IGRlc2NyaWJlcyBhIEdDQyB0YXJnZXQuCisgICBBdCBwcmVzZW50IGl0IGlzIGluY29tcGxldGUsIGJ1dCBpbiBmdXR1cmUgaXQgc2hvdWxkIGdyb3cgdG8KKyAgIGNvbnRhaW4gbW9zdCBvciBhbGwgdGFyZ2V0IG1hY2hpbmUgYW5kIHRhcmdldCBPL1Mgc3BlY2lmaWMKKyAgIGluZm9ybWF0aW9uLgorCisgICBUaGlzIHN0cnVjdHVyZSBoYXMgaXRzIGluaXRpYWxpemVyIGRlY2xhcmVkIGluIHRhcmdldC1kZWYuaCBpbiB0aGUKKyAgIGZvcm0gb2YgbGFyZ2UgbWFjcm8gVEFSR0VUX0lOSVRJQUxJWkVSIHRoYXQgZXhwYW5kcyB0byBtYW55IHNtYWxsZXIKKyAgIG1hY3Jvcy4KKworICAgVGhlIHNtYWxsZXIgbWFjcm9zIGVhY2ggaW5pdGlhbGl6ZSBvbmUgY29tcG9uZW50IG9mIHRoZSBzdHJ1Y3R1cmUsCisgICBhbmQgZWFjaCBoYXMgYSBkZWZhdWx0LiAgRWFjaCB0YXJnZXQgc2hvdWxkIGhhdmUgYSBmaWxlIHRoYXQKKyAgIGluY2x1ZGVzIHRhcmdldC5oIGFuZCB0YXJnZXQtZGVmLmgsIGFuZCBvdmVycmlkZXMgYW55IGluYXBwcm9wcmlhdGUKKyAgIGRlZmF1bHRzIGJ5IHVuZGVmaW5pbmcgdGhlIHJlbGV2YW50IG1hY3JvIGFuZCBkZWZpbmluZyBhIHN1aXRhYmxlCisgICByZXBsYWNlbWVudC4gIFRoYXQgZmlsZSBzaG91bGQgdGhlbiBjb250YWluIHRoZSBkZWZpbml0aW9uIG9mCisgICAidGFyZ2V0bSIgbGlrZSBzbzoKKworICAgc3RydWN0IGdjY190YXJnZXQgdGFyZ2V0bSA9IFRBUkdFVF9JTklUSUFMSVpFUjsKKworICAgRG9pbmcgdGhpbmdzIHRoaXMgd2F5IGFsbG93cyB1cyB0byBicmluZyB0b2dldGhlciBldmVyeXRoaW5nIHRoYXQKKyAgIGRlZmluZXMgYSBHQ0MgdGFyZ2V0LiAgQnkgc3VwcGx5aW5nIGEgZGVmYXVsdCB0aGF0IGlzIGFwcHJvcHJpYXRlCisgICB0byBtb3N0IHRhcmdldHMsIHdlIGNhbiBlYXNpbHkgYWRkIG5ldyBpdGVtcyB3aXRob3V0IG5lZWRpbmcgdG8KKyAgIGVkaXQgZG96ZW5zIG9mIHRhcmdldCBjb25maWd1cmF0aW9uIGZpbGVzLiAgSXQgc2hvdWxkIGFsc28gYWxsb3cgdXMKKyAgIHRvIGdyYWR1YWxseSByZWR1Y2UgdGhlIGFtb3VudCBvZiBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IGlzCisgICBzY2F0dGVyZWQgdGhyb3VnaG91dCBHQ0MuICAqLworCisjaWZuZGVmIEdDQ19UQVJHRVRfSAorI2RlZmluZSBHQ0NfVEFSR0VUX0gKKworI2luY2x1ZGUgInRtLmgiCisjaW5jbHVkZSAiaW5zbi1tb2Rlcy5oIgorCisvKiBUeXBlcyB1c2VkIGJ5IHRoZSByZWNvcmRfZ2NjX3N3aXRjaGVzKCkgdGFyZ2V0IGZ1bmN0aW9uLiAgKi8KK3R5cGVkZWYgZW51bQoreworICBTV0lUQ0hfVFlQRV9QQVNTRUQsCQkvKiBBIHN3aXRjaCBwYXNzZWQgb24gdGhlIGNvbW1hbmQgbGluZS4gICovCisgIFNXSVRDSF9UWVBFX0VOQUJMRUQsCQkvKiBBbiBvcHRpb24gdGhhdCBpcyBjdXJyZW50bHkgZW5hYmxlZC4gICovCisgIFNXSVRDSF9UWVBFX0RFU0NSSVBUSVZFLAkvKiBEZXNjcmlwdGl2ZSB0ZXh0LCBub3QgYSBzd2l0Y2ggb3Igb3B0aW9uLiAgKi8KKyAgU1dJVENIX1RZUEVfTElORV9TVEFSVCwJLyogUGxlYXNlIGVtaXQgYW55IG5lY2Vzc2FyeSB0ZXh0IGF0IHRoZSBzdGFydCBvZiBhIGxpbmUuICAqLworICBTV0lUQ0hfVFlQRV9MSU5FX0VORAkJLyogUGxlYXNlIGVtaXQgYSBsaW5lIHRlcm1pbmF0b3IuICAqLworfQorcHJpbnRfc3dpdGNoX3R5cGU7CisKK3R5cGVkZWYgaW50ICgqIHByaW50X3N3aXRjaF9mbl90eXBlKSAocHJpbnRfc3dpdGNoX3R5cGUsIGNvbnN0IGNoYXIgKik7CisKKy8qIEFuIGV4YW1wbGUgaW1wbGVtZW50YXRpb24gZm9yIEVMRiB0YXJnZXRzLiAgRGVmaW5lZCBpbiB2YXJhc20uYyAgKi8KK2V4dGVybiBpbnQgZWxmX3JlY29yZF9nY2Nfc3dpdGNoZXMgKHByaW50X3N3aXRjaF90eXBlIHR5cGUsIGNvbnN0IGNoYXIgKik7CisKKy8qIFNvbWUgcGxhY2VzIHN0aWxsIGFzc3VtZSB0aGF0IGFsbCBwb2ludGVyIG9yIGFkZHJlc3MgbW9kZXMgYXJlIHRoZQorICAgc3RhbmRhcmQgUG1vZGUgYW5kIHB0cl9tb2RlLiAgVGhlc2Ugb3B0aW1pemF0aW9ucyBiZWNvbWUgaW52YWxpZCBpZgorICAgdGhlIHRhcmdldCBhY3R1YWxseSBzdXBwb3J0cyBtdWx0aXBsZSBkaWZmZXJlbnQgbW9kZXMuICBGb3Igbm93LAorICAgd2UgZGlzYWJsZSBzdWNoIG9wdGltaXphdGlvbnMgb24gc3VjaCB0YXJnZXRzLCB1c2luZyB0aGlzIGZ1bmN0aW9uLiAgKi8KK2V4dGVybiBib29sIHRhcmdldF9kZWZhdWx0X3BvaW50ZXJfYWRkcmVzc19tb2Rlc19wICh2b2lkKTsKKworc3RydWN0IHN0ZGFyZ19pbmZvOworc3RydWN0IHNwZWNfaW5mb19kZWY7CisKKy8qIFRoZSBzdHJ1Y3QgdXNlZCBieSB0aGUgc2Vjb25kYXJ5X3JlbG9hZCB0YXJnZXQgaG9vay4gICovCit0eXBlZGVmIHN0cnVjdCBzZWNvbmRhcnlfcmVsb2FkX2luZm8KK3sKKyAgLyogaWNvZGUgaXMgYWN0dWFsbHkgYW4gZW51bSBpbnNuX2NvZGUsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGZvcmNlIGV2ZXJ5CisgICAgIGZpbGUgdGhhdCBpbmNsdWRlcyB0YXJnZXQuaCB0byBpbmNsdWRlIG9wdGFicy5oIC4gICovCisgIGludCBpY29kZTsKKyAgaW50IGV4dHJhX2Nvc3Q7IC8qIENvc3QgZm9yIHVzaW5nIChhKSBzY3JhdGNoIHJlZ2lzdGVyKHMpIHRvIGJlIHRha2VuCisJCSAgICAgaW50byBhY2NvdW50IGJ5IGNvcHlfY29zdC4gICovCisgIC8qIFRoZSBuZXh0IHR3byBtZW1iZXJzIGFyZSBmb3IgdGhlIHVzZSBvZiB0aGUgYmFja3dhcmQKKyAgICAgY29tcGF0aWJpbGl0eSBob29rLiAgKi8KKyAgc3RydWN0IHNlY29uZGFyeV9yZWxvYWRfaW5mbyAqcHJldl9zcmk7CisgIGludCB0X2ljb2RlOyAvKiBBY3R1YWxseSBhbiBlbnVtIGluc25fY29kZSAtIHNlZSBhYm92ZS4gICovCit9IHNlY29uZGFyeV9yZWxvYWRfaW5mbzsKKworLyogVGhpcyBpcyBkZWZpbmVkIGluIHNjaGVkLWludC5oIC4gICovCitzdHJ1Y3QgX2RlcDsKKworLyogVGhpcyBpcyBkZWZpbmVkIGluIGRkZy5oIC4gICovCitzdHJ1Y3QgZGRnOworCisvKiBBc3NlbWJsZXIgaW5zdHJ1Y3Rpb25zIGZvciBjcmVhdGluZyB2YXJpb3VzIGtpbmRzIG9mIGludGVnZXIgb2JqZWN0LiAgKi8KKworc3RydWN0IGFzbV9pbnRfb3AKK3sKKyAgY29uc3QgY2hhciAqaGk7CisgIGNvbnN0IGNoYXIgKnNpOworICBjb25zdCBjaGFyICpkaTsKKyAgY29uc3QgY2hhciAqdGk7Cit9OworCisvKiBUaGUgdGFyZ2V0IHN0cnVjdHVyZS4gIFRoaXMgaG9sZHMgYWxsIHRoZSBiYWNrZW5kIGhvb2tzLiAgKi8KKworc3RydWN0IGdjY190YXJnZXQKK3sKKyAgLyogRnVuY3Rpb25zIHRoYXQgb3V0cHV0IGFzc2VtYmxlciBmb3IgdGhlIHRhcmdldC4gICovCisgIHN0cnVjdCBhc21fb3V0CisgIHsKKyAgICAvKiBPcGVuaW5nIGFuZCBjbG9zaW5nIHBhcmVudGhlc2VzIGZvciBhc20gZXhwcmVzc2lvbiBncm91cGluZy4gICovCisgICAgY29uc3QgY2hhciAqb3Blbl9wYXJlbiwgKmNsb3NlX3BhcmVuOworCisgICAgLyogQXNzZW1ibGVyIGluc3RydWN0aW9ucyBmb3IgY3JlYXRpbmcgdmFyaW91cyBraW5kcyBvZiBpbnRlZ2VyIG9iamVjdC4gICovCisgICAgY29uc3QgY2hhciAqYnl0ZV9vcDsKKyAgICBzdHJ1Y3QgYXNtX2ludF9vcCBhbGlnbmVkX29wLCB1bmFsaWduZWRfb3A7CisKKyAgICAvKiBUcnkgdG8gb3V0cHV0IHRoZSBhc3NlbWJsZXIgY29kZSBmb3IgYW4gaW50ZWdlciBvYmplY3Qgd2hvc2UKKyAgICAgICB2YWx1ZSBpcyBnaXZlbiBieSBYLiAgU0laRSBpcyB0aGUgc2l6ZSBvZiB0aGUgb2JqZWN0IGluIGJ5dGVzIGFuZAorICAgICAgIEFMSUdORURfUCBpbmRpY2F0ZXMgd2hldGhlciBpdCBpcyBhbGlnbmVkLiAgUmV0dXJuIHRydWUgaWYKKyAgICAgICBzdWNjZXNzZnVsLiAgT25seSBoYW5kbGVzIGNhc2VzIGZvciB3aGljaCBCWVRFX09QLCBBTElHTkVEX09QCisgICAgICAgYW5kIFVOQUxJR05FRF9PUCBhcmUgTlVMTC4gICovCisgICAgYm9vbCAoKiBpbnRlZ2VyKSAocnR4IHgsIHVuc2lnbmVkIGludCBzaXplLCBpbnQgYWxpZ25lZF9wKTsKKworICAgIC8qIE91dHB1dCBjb2RlIHRoYXQgd2lsbCBnbG9iYWxpemUgYSBsYWJlbC4gICovCisgICAgdm9pZCAoKiBnbG9iYWxpemVfbGFiZWwpIChGSUxFICosIGNvbnN0IGNoYXIgKik7CisKKyAgICAvKiBPdXRwdXQgY29kZSB0aGF0IHdpbGwgZ2xvYmFsaXplIGEgZGVjbGFyYXRpb24uICAqLworICAgIHZvaWQgKCogZ2xvYmFsaXplX2RlY2xfbmFtZSkgKEZJTEUgKiwgdHJlZSk7CisKKyAgICAvKiBPdXRwdXQgY29kZSB0aGF0IHdpbGwgZW1pdCBhIGxhYmVsIGZvciB1bndpbmQgaW5mbywgaWYgdGhpcworICAgICAgIHRhcmdldCByZXF1aXJlcyBzdWNoIGxhYmVscy4gIFNlY29uZCBhcmd1bWVudCBpcyB0aGUgZGVjbCB0aGUKKyAgICAgICB1bndpbmQgaW5mbyBpcyBhc3NvY2lhdGVkIHdpdGgsIHRoaXJkIGlzIGEgYm9vbGVhbjogdHJ1ZSBpZgorICAgICAgIHRoaXMgaXMgZm9yIGV4Y2VwdGlvbiBoYW5kbGluZywgZm91cnRoIGlzIGEgYm9vbGVhbjogdHJ1ZSBpZgorICAgICAgIHRoaXMgaXMgb25seSBhIHBsYWNlaG9sZGVyIGZvciBhbiBvbWl0dGVkIEZERS4gICovCisgICAgdm9pZCAoKiB1bndpbmRfbGFiZWwpIChGSUxFICosIHRyZWUsIGludCwgaW50KTsKKworICAgIC8qIE91dHB1dCBjb2RlIHRoYXQgd2lsbCBlbWl0IGEgbGFiZWwgdG8gZGl2aWRlIHVwIHRoZSBleGNlcHRpb24KKyAgICAgICB0YWJsZS4gICovCisgICAgdm9pZCAoKiBleGNlcHRfdGFibGVfbGFiZWwpIChGSUxFICopOworCisgICAgLyogRW1pdCBhbnkgZGlyZWN0aXZlcyByZXF1aXJlZCB0byB1bndpbmQgdGhpcyBpbnN0cnVjdGlvbi4gICovCisgICAgdm9pZCAoKiB1bndpbmRfZW1pdCkgKEZJTEUgKiwgcnR4KTsKKworICAgIC8qIE91dHB1dCBhbiBpbnRlcm5hbCBsYWJlbC4gICovCisgICAgdm9pZCAoKiBpbnRlcm5hbF9sYWJlbCkgKEZJTEUgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBsb25nKTsKKworICAgIC8qIEVtaXQgYSB0dHlwZSB0YWJsZSByZWZlcmVuY2UgdG8gYSB0eXBlaW5mbyBvYmplY3QuICAqLworICAgIGJvb2wgKCogdHR5cGUpIChydHgpOworCisgICAgLyogRW1pdCBhbiBhc3NlbWJsZXIgZGlyZWN0aXZlIHRvIHNldCB2aXNpYmlsaXR5IGZvciB0aGUgc3ltYm9sCisgICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSB0cmVlIGRlY2wuICAqLworICAgIHZvaWQgKCogdmlzaWJpbGl0eSkgKHRyZWUsIGludCk7CisKKyAgICAvKiBPdXRwdXQgdGhlIGFzc2VtYmxlciBjb2RlIGZvciBlbnRyeSB0byBhIGZ1bmN0aW9uLiAgKi8KKyAgICB2b2lkICgqIGZ1bmN0aW9uX3Byb2xvZ3VlKSAoRklMRSAqLCBIT1NUX1dJREVfSU5UKTsKKworICAgIC8qIE91dHB1dCB0aGUgYXNzZW1ibGVyIGNvZGUgZm9yIGVuZCBvZiBwcm9sb2d1ZS4gICovCisgICAgdm9pZCAoKiBmdW5jdGlvbl9lbmRfcHJvbG9ndWUpIChGSUxFICopOworCisgICAgLyogT3V0cHV0IHRoZSBhc3NlbWJsZXIgY29kZSBmb3Igc3RhcnQgb2YgZXBpbG9ndWUuICAqLworICAgIHZvaWQgKCogZnVuY3Rpb25fYmVnaW5fZXBpbG9ndWUpIChGSUxFICopOworCisgICAgLyogT3V0cHV0IHRoZSBhc3NlbWJsZXIgY29kZSBmb3IgZnVuY3Rpb24gZXhpdC4gICovCisgICAgdm9pZCAoKiBmdW5jdGlvbl9lcGlsb2d1ZSkgKEZJTEUgKiwgSE9TVF9XSURFX0lOVCk7CisKKyAgICAvKiBJbml0aWFsaXplIHRhcmdldC1zcGVjaWZpYyBzZWN0aW9ucy4gICovCisgICAgdm9pZCAoKiBpbml0X3NlY3Rpb25zKSAodm9pZCk7CisKKyAgICAvKiBUZWxsIGFzc2VtYmxlciB0byBjaGFuZ2UgdG8gc2VjdGlvbiBOQU1FIHdpdGggYXR0cmlidXRlcyBGTEFHUy4KKyAgICAgICBJZiBERUNMIGlzIG5vbi1OVUxMLCBpdCBpcyB0aGUgVkFSX0RFQ0wgb3IgRlVOQ1RJT05fREVDTCB3aXRoCisgICAgICAgd2hpY2ggdGhpcyBzZWN0aW9uIGlzIGFzc29jaWF0ZWQuICAqLworICAgIHZvaWQgKCogbmFtZWRfc2VjdGlvbikgKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBmbGFncywgdHJlZSBkZWNsKTsKKworICAgIC8qIFJldHVybiBhIG1hc2sgZGVzY3JpYmluZyBob3cgcmVsb2NhdGlvbnMgc2hvdWxkIGJlIHRyZWF0ZWQgd2hlbgorICAgICAgIHNlbGVjdGluZyBzZWN0aW9ucy4gIEJpdCAxIHNob3VsZCBiZSBzZXQgaWYgZ2xvYmFsIHJlbG9jYXRpb25zCisgICAgICAgc2hvdWxkIGJlIHBsYWNlZCBpbiBhIHJlYWQtd3JpdGUgc2VjdGlvbjsgYml0IDAgc2hvdWxkIGJlIHNldCBpZgorICAgICAgIGxvY2FsIHJlbG9jYXRpb25zIHNob3VsZCBiZSBwbGFjZWQgaW4gYSByZWFkLXdyaXRlIHNlY3Rpb24uICAqLworICAgIGludCAoKnJlbG9jX3J3X21hc2spICh2b2lkKTsKKworICAgIC8qIFJldHVybiBhIHNlY3Rpb24gZm9yIEVYUC4gIEl0IG1heSBiZSBhIERFQ0wgb3IgYSBjb25zdGFudC4gIFJFTE9DCisgICAgICAgaXMgbm9uemVybyBpZiBydW50aW1lIHJlbG9jYXRpb25zIG11c3QgYmUgYXBwbGllZDsgYml0IDEgd2lsbCBiZQorICAgICAgIHNldCBpZiB0aGUgcnVudGltZSByZWxvY2F0aW9ucyByZXF1aXJlIG5vbi1sb2NhbCBuYW1lIHJlc29sdXRpb24uCisgICAgICAgQUxJR04gaXMgdGhlIHJlcXVpcmVkIGFsaWdubWVudCBvZiB0aGUgZGF0YS4gICovCisgICAgc2VjdGlvbiAqKCogc2VsZWN0X3NlY3Rpb24pICh0cmVlLCBpbnQsIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpOworCisgICAgLyogUmV0dXJuIGEgc2VjdGlvbiBmb3IgWC4gIE1PREUgaXMgWCdzIG1vZGUgYW5kIEFMSUdOIGlzIGl0cworICAgICAgIGFsaWdubWVudCBpbiBiaXRzLiAgKi8KKyAgICBzZWN0aW9uICooKiBzZWxlY3RfcnR4X3NlY3Rpb24pIChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4LAorCQkJCSAgICAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCk7CisKKyAgICAvKiBTZWxlY3QgYSB1bmlxdWUgc2VjdGlvbiBuYW1lIGZvciBERUNMLiAgUkVMT0MgaXMgdGhlIHNhbWUgYXMKKyAgICAgICBmb3IgU0VMRUNUX1NFQ1RJT04uICAqLworICAgIHZvaWQgKCogdW5pcXVlX3NlY3Rpb24pICh0cmVlLCBpbnQpOworCisgICAgLyogUmV0dXJuIHRoZSByZWFkb25seSBkYXRhIHNlY3Rpb24gYXNzb2NpYXRlZCB3aXRoIGZ1bmN0aW9uIERFQ0wuICAqLworICAgIHNlY3Rpb24gKigqIGZ1bmN0aW9uX3JvZGF0YV9zZWN0aW9uKSAodHJlZSk7CisKKyAgICAvKiBPdXRwdXQgYSBjb25zdHJ1Y3RvciBmb3IgYSBzeW1ib2wgd2l0aCBhIGdpdmVuIHByaW9yaXR5LiAgKi8KKyAgICB2b2lkICgqIGNvbnN0cnVjdG9yKSAocnR4LCBpbnQpOworCisgICAgLyogT3V0cHV0IGEgZGVzdHJ1Y3RvciBmb3IgYSBzeW1ib2wgd2l0aCBhIGdpdmVuIHByaW9yaXR5LiAgKi8KKyAgICB2b2lkICgqIGRlc3RydWN0b3IpIChydHgsIGludCk7CisKKyAgICAvKiBPdXRwdXQgdGhlIGFzc2VtYmxlciBjb2RlIGZvciBhIHRodW5rIGZ1bmN0aW9uLiAgVEhVTktfREVDTCBpcyB0aGUKKyAgICAgICBkZWNsYXJhdGlvbiBmb3IgdGhlIHRodW5rIGZ1bmN0aW9uIGl0c2VsZiwgRlVOQ1RJT04gaXMgdGhlIGRlY2wgZm9yCisgICAgICAgdGhlIHRhcmdldCBmdW5jdGlvbi4gIERFTFRBIGlzIGFuIGltbWVkaWF0ZSBjb25zdGFudCBvZmZzZXQgdG8gYmUKKyAgICAgICBhZGRlZCB0byBUSElTLiAgSWYgVkNBTExfT0ZGU0VUIGlzIG5vbnplcm8sIHRoZSB3b3JkIGF0CisgICAgICAgKigqdGhpcyArIHZjYWxsX29mZnNldCkgc2hvdWxkIGJlIGFkZGVkIHRvIFRISVMuICAqLworICAgIHZvaWQgKCogb3V0cHV0X21pX3RodW5rKSAoRklMRSAqZmlsZSwgdHJlZSB0aHVua19kZWNsLAorCQkJICAgICAgSE9TVF9XSURFX0lOVCBkZWx0YSwgSE9TVF9XSURFX0lOVCB2Y2FsbF9vZmZzZXQsCisJCQkgICAgICB0cmVlIGZ1bmN0aW9uX2RlY2wpOworCisgICAgLyogRGV0ZXJtaW5lIHdoZXRoZXIgb3V0cHV0X21pX3RodW5rIHdvdWxkIHN1Y2NlZWQuICAqLworICAgIC8qID8/PyBJZGVhbGx5LCB0aGlzIGhvb2sgd291bGQgbm90IGV4aXN0LCBhbmQgc3VjY2VzcyBvciBmYWlsdXJlCisgICAgICAgd291bGQgYmUgcmV0dXJuZWQgZnJvbSBvdXRwdXRfbWlfdGh1bmsgZGlyZWN0bHkuICBCdXQgdGhlcmUncworICAgICAgIHRvbyBtdWNoIHVuZG8tYWJsZSBzZXR1cCBpbnZvbHZlZCBpbiBpbnZva2luZyBvdXRwdXRfbWlfdGh1bmsuCisgICAgICAgQ291bGQgYmUgZml4ZWQgYnkgbWFraW5nIG91dHB1dF9taV90aHVuayBlbWl0IHJ0bCBpbnN0ZWFkIG9mCisgICAgICAgdGV4dCB0byB0aGUgb3V0cHV0IGZpbGUuICAqLworICAgIGJvb2wgKCogY2FuX291dHB1dF9taV90aHVuaykgKGNvbnN0X3RyZWUgdGh1bmtfZGVjbCwgSE9TVF9XSURFX0lOVCBkZWx0YSwKKwkJCQkgIEhPU1RfV0lERV9JTlQgdmNhbGxfb2Zmc2V0LAorCQkJCSAgY29uc3RfdHJlZSBmdW5jdGlvbl9kZWNsKTsKKworICAgIC8qIE91dHB1dCBhbnkgYm9pbGVycGxhdGUgdGV4dCBuZWVkZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhCisgICAgICAgdHJhbnNsYXRpb24gdW5pdC4gICovCisgICAgdm9pZCAoKmZpbGVfc3RhcnQpICh2b2lkKTsKKworICAgIC8qIE91dHB1dCBhbnkgYm9pbGVycGxhdGUgdGV4dCBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhCisgICAgICAgdHJhbnNsYXRpb24gdW5pdC4gICovCisgICAgdm9pZCAoKmZpbGVfZW5kKSAodm9pZCk7CisKKyAgICAvKiBPdXRwdXQgYW55IGJvaWxlcnBsYXRlIHRleHQgbmVlZGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYW4KKyAgICAgICBMVE8gb3V0cHV0IHN0cmVhbS4gICovCisgICAgdm9pZCAoKmx0b19zdGFydCkgKHZvaWQpOworCisgICAgLyogT3V0cHV0IGFueSBib2lsZXJwbGF0ZSB0ZXh0IG5lZWRlZCBhdCB0aGUgZW5kIG9mIGFuCisgICAgICAgTFRPIG91dHB1dCBzdHJlYW0uICAqLworICAgIHZvaWQgKCpsdG9fZW5kKSAodm9pZCk7CisKKyAgICAvKiBPdXRwdXQgYW55IGJvaWxlcnBsYWNlIHRleHQgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYQorICAgICAgIHRyYW5zbGF0aW9uIHVuaXQgYmVmb3JlIGRlYnVnIGFuZCB1bndpbmQgaW5mbyBpcyBlbWl0dGVkLiAgKi8KKyAgICB2b2lkICgqY29kZV9lbmQpICh2b2lkKTsKKworICAgIC8qIE91dHB1dCBhbiBhc3NlbWJsZXIgcHNldWRvLW9wIHRvIGRlY2xhcmUgYSBsaWJyYXJ5IGZ1bmN0aW9uIG5hbWUKKyAgICAgICBleHRlcm5hbC4gICovCisgICAgdm9pZCAoKmV4dGVybmFsX2xpYmNhbGwpIChydHgpOworCisgICAgLyogT3V0cHV0IGFuIGFzc2VtYmxlciBkaXJlY3RpdmUgdG8gbWFyayBkZWNsIGxpdmUuIFRoaXMgaW5zdHJ1Y3RzCisJbGlua2VyIHRvIG5vdCBkZWFkIGNvZGUgc3RyaXAgdGhpcyBzeW1ib2wuICAqLworICAgIHZvaWQgKCptYXJrX2RlY2xfcHJlc2VydmVkKSAoY29uc3QgY2hhciAqKTsKKworICAgIC8qIE91dHB1dCBhIHJlY29yZCBvZiB0aGUgY29tbWFuZCBsaW5lIHN3aXRjaGVzIHRoYXQgaGF2ZSBiZWVuIHBhc3NlZC4gICovCisgICAgcHJpbnRfc3dpdGNoX2ZuX3R5cGUgcmVjb3JkX2djY19zd2l0Y2hlczsKKyAgICAvKiBUaGUgbmFtZSBvZiB0aGUgc2VjdGlvbiB0aGF0IHRoZSBleGFtcGxlIEVMRiBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAgIHJlY29yZF9nY2Nfc3dpdGNoZXMgd2lsbCB1c2UgdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9uLiAgVGFyZ2V0CisgICAgICAgc3BlY2lmaWMgdmVyc2lvbnMgb2YgcmVjb3JkX2djY19zd2l0Y2hlcyBtYXkgb3IgbWF5IG5vdCB1c2UKKyAgICAgICB0aGlzIGluZm9ybWF0aW9uLiAgKi8KKyAgICBjb25zdCBjaGFyICogcmVjb3JkX2djY19zd2l0Y2hlc19zZWN0aW9uOworCisgICAgLyogT3V0cHV0IHRoZSBkZWZpbml0aW9uIG9mIGEgc2VjdGlvbiBhbmNob3IuICAqLworICAgIHZvaWQgKCpvdXRwdXRfYW5jaG9yKSAocnR4KTsKKworICAgIC8qIE91dHB1dCBhIERUUC1yZWxhdGl2ZSByZWZlcmVuY2UgdG8gYSBUTFMgc3ltYm9sLiAgKi8KKyAgICB2b2lkICgqb3V0cHV0X2R3YXJmX2R0cHJlbCkgKEZJTEUgKmZpbGUsIGludCBzaXplLCBydHggeCk7CisKKyAgICAvKiBTb21lIHRhcmdldCBtYWNoaW5lcyBuZWVkIHRvIHBvc3RzY2FuIGVhY2ggaW5zbiBhZnRlciBpdCBpcyBvdXRwdXQuICAqLworICAgIHZvaWQgKCpmaW5hbF9wb3N0c2Nhbl9pbnNuKSAoRklMRSAqLCBydHgsIHJ0eCAqLCBpbnQpOworCisgICAgLyogRW1pdCB0aGUgdHJhbXBvbGluZSB0ZW1wbGF0ZS4gIFRoaXMgaG9vayBtYXkgYmUgTlVMTC4gICovCisgICAgdm9pZCAoKnRyYW1wb2xpbmVfdGVtcGxhdGUpIChGSUxFICopOworICB9IGFzbV9vdXQ7CisKKyAgLyogRnVuY3Rpb25zIHJlbGF0aW5nIHRvIGluc3RydWN0aW9uIHNjaGVkdWxpbmcuICAqLworICBzdHJ1Y3Qgc2NoZWQKKyAgeworICAgIC8qIEdpdmVuIHRoZSBjdXJyZW50IGNvc3QsIENPU1QsIG9mIGFuIGluc24sIElOU04sIGNhbGN1bGF0ZSBhbmQKKyAgICAgICByZXR1cm4gYSBuZXcgY29zdCBiYXNlZCBvbiBpdHMgcmVsYXRpb25zaGlwIHRvIERFUF9JTlNOIHRocm91Z2gKKyAgICAgICB0aGUgZGVwZW5kZW5jZSBMSU5LLiAgVGhlIGRlZmF1bHQgaXMgdG8gbWFrZSBubyBhZGp1c3RtZW50LiAgKi8KKyAgICBpbnQgKCogYWRqdXN0X2Nvc3QpIChydHggaW5zbiwgcnR4IGxpbmssIHJ0eCBkZXBfaW5zbiwgaW50IGNvc3QpOworCisgICAgLyogQWRqdXN0IHRoZSBwcmlvcml0eSBvZiBhbiBpbnNuIGFzIHlvdSBzZWUgZml0LiAgUmV0dXJucyB0aGUgbmV3CisgICAgICAgcHJpb3JpdHkuICAqLworICAgIGludCAoKiBhZGp1c3RfcHJpb3JpdHkpIChydHgsIGludCk7CisKKyAgICAvKiBGdW5jdGlvbiB3aGljaCByZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnNucyB0aGF0IGNhbiBiZQorICAgICAgIHNjaGVkdWxlZCBpbiB0aGUgc2FtZSBtYWNoaW5lIGN5Y2xlLiAgVGhpcyBtdXN0IGJlIGNvbnN0YW50CisgICAgICAgb3ZlciBhbiBlbnRpcmUgY29tcGlsYXRpb24uICBUaGUgZGVmYXVsdCBpcyAxLiAgKi8KKyAgICBpbnQgKCogaXNzdWVfcmF0ZSkgKHZvaWQpOworCisgICAgLyogQ2FsY3VsYXRlIGhvdyBtdWNoIHRoaXMgaW5zbiBhZmZlY3RzIGhvdyBtYW55IG1vcmUgaW5zbnMgd2UKKyAgICAgICBjYW4gZW1pdCB0aGlzIGN5Y2xlLiAgRGVmYXVsdCBpcyB0aGV5IGFsbCBjb3N0IHRoZSBzYW1lLiAgKi8KKyAgICBpbnQgKCogdmFyaWFibGVfaXNzdWUpIChGSUxFICosIGludCwgcnR4LCBpbnQpOworCisgICAgLyogSW5pdGlhbGl6ZSBtYWNoaW5lLWRlcGVuZGVudCBzY2hlZHVsaW5nIGNvZGUuICAqLworICAgIHZvaWQgKCogbWRfaW5pdCkgKEZJTEUgKiwgaW50LCBpbnQpOworCisgICAgLyogRmluYWxpemUgbWFjaGluZS1kZXBlbmRlbnQgc2NoZWR1bGluZyBjb2RlLiAgKi8KKyAgICB2b2lkICgqIG1kX2ZpbmlzaCkgKEZJTEUgKiwgaW50KTsKKworICAgIC8qIEluaXRpYWxpemUgbWFjaGluZS1kZXBlbmRlbnQgZnVuY3Rpb24gd2lkZSBzY2hlZHVsaW5nIGNvZGUuICAqLworICAgIHZvaWQgKCogbWRfaW5pdF9nbG9iYWwpIChGSUxFICosIGludCwgaW50KTsKKworICAgIC8qIEZpbmFsaXplIG1hY2hpbmUtZGVwZW5kZW50IGZ1bmN0aW9uIHdpZGUgc2NoZWR1bGluZyBjb2RlLiAgKi8KKyAgICB2b2lkICgqIG1kX2ZpbmlzaF9nbG9iYWwpIChGSUxFICosIGludCk7CisKKyAgICAvKiBSZW9yZGVyIGluc25zIGluIGEgbWFjaGluZS1kZXBlbmRlbnQgZmFzaGlvbiwgaW4gdHdvIGRpZmZlcmVudAorICAgICAgIHBsYWNlcy4gIERlZmF1bHQgZG9lcyBub3RoaW5nLiAgKi8KKyAgICBpbnQgKCogcmVvcmRlcikgKEZJTEUgKiwgaW50LCBydHggKiwgaW50ICosIGludCk7CisgICAgaW50ICgqIHJlb3JkZXIyKSAoRklMRSAqLCBpbnQsIHJ0eCAqLCBpbnQgKiwgaW50KTsKKworICAgIC8qIFRoZSBmb2xsb3dpbmcgbWVtYmVyIHZhbHVlIGlzIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZAorICAgICAgIGFmdGVyIGV2YWx1YXRpb24gZm9yd2FyZCBkZXBlbmRlbmNpZXMgb2YgaW5zbnMgaW4gY2hhaW4gZ2l2ZW4KKyAgICAgICBieSB0d28gcGFyYW1ldGVyIHZhbHVlcyAoaGVhZCBhbmQgdGFpbCBjb3JyZXNwb25kaW5nbHkpLiAgKi8KKyAgICB2b2lkICgqIGRlcGVuZGVuY2llc19ldmFsdWF0aW9uX2hvb2spIChydHgsIHJ0eCk7CisKKyAgICAvKiBUaGUgdmFsdWVzIG9mIHRoZSBmb2xsb3dpbmcgZm91ciBtZW1iZXJzIGFyZSBwb2ludGVycyB0bworICAgICAgIGZ1bmN0aW9ucyB1c2VkIHRvIHNpbXBsaWZ5IHRoZSBhdXRvbWF0b24gZGVzY3JpcHRpb25zLgorICAgICAgIGRmYV9wcmVfY3ljbGVfaW5zbiBhbmQgZGZhX3Bvc3RfY3ljbGVfaW5zbiBnaXZlIGZ1bmN0aW9ucworICAgICAgIHJldHVybmluZyBpbnNucyB3aGljaCBhcmUgdXNlZCB0byBjaGFuZ2UgdGhlIHBpcGVsaW5lIGhhemFyZAorICAgICAgIHJlY29nbml6ZXIgc3RhdGUgd2hlbiB0aGUgbmV3IHNpbXVsYXRlZCBwcm9jZXNzb3IgY3ljbGUKKyAgICAgICBjb3JyZXNwb25kaW5nbHkgc3RhcnRzIGFuZCBmaW5pc2hlcy4gIFRoZSBmdW5jdGlvbiBkZWZpbmVkIGJ5CisgICAgICAgaW5pdF9kZmFfcHJlX2N5Y2xlX2luc24gYW5kIGluaXRfZGZhX3Bvc3RfY3ljbGVfaW5zbiBhcmUgdXNlZAorICAgICAgIHRvIGluaXRpYWxpemUgdGhlIGNvcnJlc3BvbmRpbmcgaW5zbnMuICBUaGUgZGVmYXVsdCB2YWx1ZXMgb2YKKyAgICAgICB0aGUgbWVtYmVycyByZXN1bHQgaW4gbm90IGNoYW5naW5nIHRoZSBhdXRvbWF0b24gc3RhdGUgd2hlbgorICAgICAgIHRoZSBuZXcgc2ltdWxhdGVkIHByb2Nlc3NvciBjeWNsZSBjb3JyZXNwb25kaW5nbHkgc3RhcnRzIGFuZAorICAgICAgIGZpbmlzaGVzLiAgKi8KKyAgICB2b2lkICgqIGluaXRfZGZhX3ByZV9jeWNsZV9pbnNuKSAodm9pZCk7CisgICAgcnR4ICgqIGRmYV9wcmVfY3ljbGVfaW5zbikgKHZvaWQpOworICAgIHZvaWQgKCogaW5pdF9kZmFfcG9zdF9jeWNsZV9pbnNuKSAodm9pZCk7CisgICAgcnR4ICgqIGRmYV9wb3N0X2N5Y2xlX2luc24pICh2b2lkKTsKKworICAgIC8qIFRoZSB2YWx1ZXMgb2YgdGhlIGZvbGxvd2luZyB0d28gbWVtYmVycyBhcmUgcG9pbnRlcnMgdG8KKyAgICAgICBmdW5jdGlvbnMgdXNlZCB0byBzaW1wbGlmeSB0aGUgYXV0b21hdG9uIGRlc2NyaXB0aW9ucy4KKyAgICAgICBkZmFfcHJlX2FkdmFuY2VfY3ljbGUgYW5kIGRmYV9wb3N0X2FkdmFuY2VfY3ljbGUgYXJlIGdldHRpbmcgY2FsbGVkCisgICAgICAgaW1tZWRpYXRlbHkgYmVmb3JlIGFuZCBhZnRlciBjeWNsZSBpcyBhZHZhbmNlZC4gICovCisgICAgdm9pZCAoKiBkZmFfcHJlX2FkdmFuY2VfY3ljbGUpICh2b2lkKTsKKyAgICB2b2lkICgqIGRmYV9wb3N0X2FkdmFuY2VfY3ljbGUpICh2b2lkKTsKKworICAgIC8qIFRoZSBmb2xsb3dpbmcgbWVtYmVyIHZhbHVlIGlzIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHJldHVybmluZyB2YWx1ZQorICAgICAgIHdoaWNoIGRlZmluZXMgaG93IG1hbnkgaW5zbnMgaW4gcXVldWUgYHJlYWR5JyB3aWxsIHdlIHRyeSBmb3IKKyAgICAgICBtdWx0aS1wYXNzIHNjaGVkdWxpbmcuICBJZiB0aGUgbWVtYmVyIHZhbHVlIGlzIG5vbnplcm8gYW5kIHRoZQorICAgICAgIGZ1bmN0aW9uIHJldHVybnMgcG9zaXRpdmUgdmFsdWUsIHRoZSBERkEgYmFzZWQgc2NoZWR1bGVyIHdpbGwgbWFrZQorICAgICAgIG11bHRpLXBhc3Mgc2NoZWR1bGluZyBmb3IgdGhlIGZpcnN0IGN5Y2xlLiAgSW4gb3RoZXIgd29yZHMsIHdlIHdpbGwKKyAgICAgICB0cnkgdG8gY2hvb3NlIHJlYWR5IGluc24gd2hpY2ggcGVybWl0cyB0byBzdGFydCBtYXhpbXVtIG51bWJlciBvZgorICAgICAgIGluc25zIG9uIHRoZSBzYW1lIGN5Y2xlLiAgKi8KKyAgICBpbnQgKCogZmlyc3RfY3ljbGVfbXVsdGlwYXNzX2RmYV9sb29rYWhlYWQpICh2b2lkKTsKKworICAgIC8qIFRoZSBmb2xsb3dpbmcgbWVtYmVyIHZhbHVlIGlzIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiBjb250cm9sbGluZworICAgICAgIHdoYXQgaW5zbnMgZnJvbSB0aGUgcmVhZHkgaW5zbiBxdWV1ZSB3aWxsIGJlIGNvbnNpZGVyZWQgZm9yIHRoZQorICAgICAgIG11bHRpcGFzcyBpbnNuIHNjaGVkdWxpbmcuICBJZiB0aGUgaG9vayByZXR1cm5zIHplcm8gZm9yIGluc24KKyAgICAgICBwYXNzZWQgYXMgdGhlIHBhcmFtZXRlciwgdGhlIGluc24gd2lsbCBiZSBub3QgY2hvc2VuIHRvIGJlCisgICAgICAgaXNzdWVkLiAgKi8KKyAgICBpbnQgKCogZmlyc3RfY3ljbGVfbXVsdGlwYXNzX2RmYV9sb29rYWhlYWRfZ3VhcmQpIChydHgpOworCisgICAgLyogVGhlIGZvbGxvd2luZyBtZW1iZXIgdmFsdWUgaXMgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZCBieQorICAgICAgIHRoZSBpbnNuIHNjaGVkdWxlciBiZWZvcmUgaXNzdWluZyBpbnNuIHBhc3NlZCBhcyB0aGUgdGhpcmQKKyAgICAgICBwYXJhbWV0ZXIgb24gZ2l2ZW4gY3ljbGUuICBJZiB0aGUgaG9vayByZXR1cm5zIG5vbnplcm8sIHRoZQorICAgICAgIGluc24gaXMgbm90IGlzc3VlZCBvbiBnaXZlbiBwcm9jZXNzb3JzIGN5Y2xlLiAgSW5zdGVhZCBvZiB0aGF0LAorICAgICAgIHRoZSBwcm9jZXNzb3IgY3ljbGUgaXMgYWR2YW5jZWQuICBJZiB0aGUgdmFsdWUgcGFzc2VkIHRocm91Z2gKKyAgICAgICB0aGUgbGFzdCBwYXJhbWV0ZXIgaXMgemVybywgdGhlIGluc24gcmVhZHkgcXVldWUgaXMgbm90IHNvcnRlZAorICAgICAgIG9uIHRoZSBuZXcgY3ljbGUgc3RhcnQgYXMgdXN1YWxseS4gIFRoZSBmaXJzdCBwYXJhbWV0ZXIgcGFzc2VzCisgICAgICAgZmlsZSBmb3IgZGVidWdnaW5nIG91dHB1dC4gIFRoZSBzZWNvbmQgb25lIHBhc3NlcyB0aGUgc2NoZWR1bGVyCisgICAgICAgdmVyYm9zZSBsZXZlbCBvZiB0aGUgZGVidWdnaW5nIG91dHB1dC4gIFRoZSBmb3J0aCBhbmQgdGhlIGZpZnRoCisgICAgICAgcGFyYW1ldGVyIHZhbHVlcyBhcmUgY29ycmVzcG9uZGluZ2x5IHByb2Nlc3NvciBjeWNsZSBvbiB3aGljaAorICAgICAgIHRoZSBwcmV2aW91cyBpbnNuIGhhcyBiZWVuIGlzc3VlZCBhbmQgdGhlIGN1cnJlbnQgcHJvY2Vzc29yCisgICAgICAgY3ljbGUuICAqLworICAgIGludCAoKiBkZmFfbmV3X2N5Y2xlKSAoRklMRSAqLCBpbnQsIHJ0eCwgaW50LCBpbnQsIGludCAqKTsKKworICAgIC8qIFRoZSBmb2xsb3dpbmcgbWVtYmVyIHZhbHVlIGlzIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZCBieSB0aGUKKyAgICAgICBpbnNuIHNjaGVkdWxlci4gIEl0IHNob3VsZCByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBleGlzdHMgYSBkZXBlbmRlbmNlCisgICAgICAgd2hpY2ggaXMgY29uc2lkZXJlZCBjb3N0bHkgYnkgdGhlIHRhcmdldCwgYmV0d2VlbiB0aGUgaW5zbgorICAgICAgIERFUF9QUk8gKCZfREVQKSwgYW5kIHRoZSBpbnNuIERFUF9DT04gKCZfREVQKS4gIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMKKyAgICAgICB0aGUgZGVwIHRoYXQgcmVwcmVzZW50cyB0aGUgZGVwZW5kZW5jZSBiZXR3ZWVuIHRoZSB0d28gaW5zbnMuICBUaGUKKyAgICAgICBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGNvc3Qgb2YgdGhlIGRlcGVuZGVuY2UgYXMgZXN0aW1hdGVkIGJ5CisgICAgICAgdGhlIHNjaGVkdWxlci4gIFRoZSBsYXN0IGFyZ3VtZW50IGlzIHRoZSBkaXN0YW5jZSBpbiBjeWNsZXMKKyAgICAgICBiZXR3ZWVuIHRoZSBhbHJlYWR5IHNjaGVkdWxlZCBpbnNuIChmaXJzdCBwYXJhbWV0ZXIpIGFuZCB0aGUKKyAgICAgICBzZWNvbmQgaW5zbiAoc2Vjb25kIHBhcmFtZXRlcikuICAqLworICAgIGJvb2wgKCogaXNfY29zdGx5X2RlcGVuZGVuY2UpIChzdHJ1Y3QgX2RlcCAqX2RlcCwgaW50LCBpbnQpOworCisgICAgLyogR2l2ZW4gdGhlIGN1cnJlbnQgY29zdCwgQ09TVCwgb2YgYW4gaW5zbiwgSU5TTiwgY2FsY3VsYXRlIGFuZAorICAgICAgIHJldHVybiBhIG5ldyBjb3N0IGJhc2VkIG9uIGl0cyByZWxhdGlvbnNoaXAgdG8gREVQX0lOU04gdGhyb3VnaCB0aGUKKyAgICAgICBkZXBlbmRlbmNlIG9mIHR5cGUgREVQX1RZUEUuICBUaGUgZGVmYXVsdCBpcyB0byBtYWtlIG5vIGFkanVzdG1lbnQuICAqLworICAgIGludCAoKiBhZGp1c3RfY29zdF8yKSAocnR4IGluc24sIGludCwgcnR4IGRlcF9pbnNuLCBpbnQgY29zdCwgaW50IGR3KTsKKworICAgIC8qIFRoZSBmb2xsb3dpbmcgbWVtYmVyIHZhbHVlIGlzIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZAorICAgICAgIGJ5IHRoZSBpbnNuIHNjaGVkdWxlci4gVGhpcyBob29rIGlzIGNhbGxlZCB0byBub3RpZnkgdGhlIGJhY2tlbmQKKyAgICAgICB0aGF0IG5ldyBpbnN0cnVjdGlvbnMgd2VyZSBlbWl0dGVkLiAgKi8KKyAgICB2b2lkICgqIGhfaV9kX2V4dGVuZGVkKSAodm9pZCk7CisKKyAgICAvKiBOZXh0IDUgZnVuY3Rpb25zIGFyZSBmb3IgbXVsdGktcG9pbnQgc2NoZWR1bGluZy4gICovCisKKyAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHNjaGVkdWxlciBjb250ZXh0LiAgKi8KKyAgICB2b2lkICooKiBhbGxvY19zY2hlZF9jb250ZXh0KSAodm9pZCk7CisKKyAgICAvKiBGaWxscyB0aGUgY29udGV4dCBmcm9tIHRoZSBsb2NhbCBtYWNoaW5lIHNjaGVkdWxlciBjb250ZXh0LiAgKi8KKyAgICB2b2lkICgqIGluaXRfc2NoZWRfY29udGV4dCkgKHZvaWQgKiwgYm9vbCk7CisKKyAgICAvKiBTZXRzIGxvY2FsIG1hY2hpbmUgc2NoZWR1bGVyIGNvbnRleHQgdG8gYSBzYXZlZCB2YWx1ZS4gICovCisgICAgdm9pZCAoKiBzZXRfc2NoZWRfY29udGV4dCkgKHZvaWQgKik7CisKKyAgICAvKiBDbGVhcnMgYSBzY2hlZHVsZXIgY29udGV4dCBzbyBpdCBiZWNvbWVzIGxpa2UgYWZ0ZXIgaW5pdC4gICovCisgICAgdm9pZCAoKiBjbGVhcl9zY2hlZF9jb250ZXh0KSAodm9pZCAqKTsKKworICAgIC8qIEZyZWVzIHRoZSBzY2hlZHVsZXIgY29udGV4dC4gICovCisgICAgdm9pZCAoKiBmcmVlX3NjaGVkX2NvbnRleHQpICh2b2lkICopOworCisgICAgLyogVGhlIGZvbGxvd2luZyBtZW1iZXIgdmFsdWUgaXMgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gY2FsbGVkCisgICAgICAgYnkgdGhlIGluc24gc2NoZWR1bGVyLgorICAgICAgIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgYW4gaW5zdHJ1Y3Rpb24sIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRoZSB0eXBlCisgICAgICAgb2YgdGhlIHJlcXVlc3RlZCBzcGVjdWxhdGlvbiwgYW5kIHRoZSB0aGlyZCBwYXJhbWV0ZXIgaXMgYSBwb2ludGVyIHRvIHRoZQorICAgICAgIHNwZWN1bGF0aXZlIHBhdHRlcm4gb2YgdGhlIGNvcnJlc3BvbmRpbmcgdHlwZSAoc2V0IGlmIHJldHVybiB2YWx1ZSA9PSAxKS4KKyAgICAgICBJdCBzaG91bGQgcmV0dXJuCisgICAgICAgLTEsIGlmIHRoZXJlIGlzIG5vIHBhdHRlcm4sIHRoYXQgd2lsbCBzYXRpc2Z5IHRoZSByZXF1ZXN0ZWQgc3BlY3VsYXRpb24KKyAgICAgICB0eXBlLAorICAgICAgIDAsIGlmIGN1cnJlbnQgcGF0dGVybiBzYXRpc2ZpZXMgdGhlIHJlcXVlc3RlZCBzcGVjdWxhdGlvbiB0eXBlLAorICAgICAgIDEsIGlmIHBhdHRlcm4gb2YgdGhlIGluc3RydWN0aW9uIHNob3VsZCBiZSBjaGFuZ2VkIHRvIHRoZSBuZXdseQorICAgICAgIGdlbmVyYXRlZCBvbmUuICAqLworICAgIGludCAoKiBzcGVjdWxhdGVfaW5zbikgKHJ0eCwgaW50LCBydHggKik7CisKKyAgICAvKiBUaGUgZm9sbG93aW5nIG1lbWJlciB2YWx1ZSBpcyBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiBjYWxsZWQKKyAgICAgICBieSB0aGUgaW5zbiBzY2hlZHVsZXIuICBJdCBzaG91bGQgcmV0dXJuIHRydWUgaWYgdGhlIGNoZWNrIGluc3RydWN0aW9uCisgICAgICAgcGFzc2VkIGFzIHRoZSBwYXJhbWV0ZXIgbmVlZHMgYSByZWNvdmVyeSBibG9jay4gICovCisgICAgYm9vbCAoKiBuZWVkc19ibG9ja19wKSAoaW50KTsKKworICAgIC8qIFRoZSBmb2xsb3dpbmcgbWVtYmVyIHZhbHVlIGlzIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZAorICAgICAgIGJ5IHRoZSBpbnNuIHNjaGVkdWxlci4gIEl0IHNob3VsZCByZXR1cm4gYSBwYXR0ZXJuIGZvciB0aGUgY2hlY2sKKyAgICAgICBpbnN0cnVjdGlvbi4KKyAgICAgICBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIGEgc3BlY3VsYXRpdmUgaW5zdHJ1Y3Rpb24sIHRoZSBzZWNvbmQgcGFyYW1ldGVyCisgICAgICAgaXMgdGhlIGxhYmVsIG9mIHRoZSBjb3JyZXNwb25kaW5nIHJlY292ZXJ5IGJsb2NrIChvciBudWxsLCBpZiBpdCBpcyBhCisgICAgICAgc2ltcGxlIGNoZWNrKS4gIElmIHRoZSBtdXRhdGlvbiBvZiB0aGUgY2hlY2sgaXMgcmVxdWVzdGVkIChlLmcuIGZyb20KKyAgICAgICBsZC5jIHRvIGNoay5hKSwgdGhlIHRoaXJkIHBhcmFtZXRlciBpcyB0cnVlIC0gaW4gdGhpcyBjYXNlIHRoZSBmaXJzdAorICAgICAgIHBhcmFtZXRlciBpcyB0aGUgcHJldmlvdXMgY2hlY2suICAqLworICAgIHJ0eCAoKiBnZW5fc3BlY19jaGVjaykgKHJ0eCwgcnR4LCBpbnQpOworCisgICAgLyogVGhlIGZvbGxvd2luZyBtZW1iZXIgdmFsdWUgaXMgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gY29udHJvbGxpbmcKKyAgICAgICB3aGF0IGluc25zIGZyb20gdGhlIHJlYWR5IGluc24gcXVldWUgd2lsbCBiZSBjb25zaWRlcmVkIGZvciB0aGUKKyAgICAgICBtdWx0aXBhc3MgaW5zbiBzY2hlZHVsaW5nLiAgSWYgdGhlIGhvb2sgcmV0dXJucyB6ZXJvIGZvciB0aGUgaW5zbgorICAgICAgIHBhc3NlZCBhcyB0aGUgcGFyYW1ldGVyLCB0aGUgaW5zbiB3aWxsIG5vdCBiZSBjaG9zZW4gdG8gYmUKKyAgICAgICBpc3N1ZWQuICBUaGlzIGhvb2sgaXMgdXNlZCB0byBkaXNjYXJkIHNwZWN1bGF0aXZlIGluc3RydWN0aW9ucywKKyAgICAgICB0aGF0IHN0YW5kIGF0IHRoZSBmaXJzdCBwb3NpdGlvbiBvZiB0aGUgcmVhZHkgbGlzdC4gICovCisgICAgYm9vbCAoKiBmaXJzdF9jeWNsZV9tdWx0aXBhc3NfZGZhX2xvb2thaGVhZF9ndWFyZF9zcGVjKSAoY29uc3RfcnR4KTsKKworICAgIC8qIFRoZSBmb2xsb3dpbmcgbWVtYmVyIHZhbHVlIGlzIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMKKyAgICAgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3BlY3VsYXRpb24gY2FwYWJpbGl0aWVzIG9mIHRoZSB0YXJnZXQuCisgICAgICAgVGhlIHBhcmFtZXRlciBpcyBhIHBvaW50ZXIgdG8gc3BlY19pbmZvIHZhcmlhYmxlLiAgKi8KKyAgICB2b2lkICgqIHNldF9zY2hlZF9mbGFncykgKHN0cnVjdCBzcGVjX2luZm9fZGVmICopOworCisgICAgLyogUmV0dXJuIHNwZWN1bGF0aW9uIHR5cGVzIG9mIHRoZSBpbnN0cnVjdGlvbiBwYXNzZWQgYXMgdGhlIHBhcmFtZXRlci4gICovCisgICAgaW50ICgqIGdldF9pbnNuX3NwZWNfZHMpIChydHgpOworCisgICAgLyogUmV0dXJuIHNwZWN1bGF0aW9uIHR5cGVzIHRoYXQgYXJlIGNoZWNrZWQgZm9yIHRoZSBpbnN0cnVjdGlvbiBwYXNzZWQgYXMKKyAgICAgICB0aGUgcGFyYW1ldGVyLiAgKi8KKyAgICBpbnQgKCogZ2V0X2luc25fY2hlY2tlZF9kcykgKHJ0eCk7CisKKyAgICAvKiBSZXR1cm4gYm9vbCBpZiBydHggc2Nhbm5pbmcgc2hvdWxkIGp1c3Qgc2tpcCBjdXJyZW50IGxheWVyIGFuZAorICAgICAgIGFkdmFuY2UgdG8gdGhlIGlubmVyIHJ0eGVzLiAgKi8KKyAgICBib29sICgqIHNraXBfcnR4X3ApIChjb25zdF9ydHgpOworCisgICAgLyogVGhlIGZvbGxvd2luZyBtZW1iZXIgdmFsdWUgaXMgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCBwcm92aWRlcworICAgICAgIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0YXJnZXQgcmVzb3VyY2UtYmFzZWQgbG93ZXIgYm91bmQgd2hpY2ggaXMKKyAgICAgICB1c2VkIGJ5IHRoZSBzd2luZyBtb2R1bG8gc2NoZWR1bGVyLiAgVGhlIHBhcmFtZXRlciBpcyBhIHBvaW50ZXIKKyAgICAgICB0byBkZGcgdmFyaWFibGUuICAqLworICAgIGludCAoKiBzbXNfcmVzX21paSkgKHN0cnVjdCBkZGcgKik7CisgIH0gc2NoZWQ7CisKKyAgLyogRnVuY3Rpb25zIHJlbGF0aW5nIHRvIHZlY3Rvcml6YXRpb24uICAqLworICBzdHJ1Y3QgdmVjdG9yaXplCisgIHsKKyAgICAvKiBUaGUgZm9sbG93aW5nIG1lbWJlciB2YWx1ZSBpcyBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiBjYWxsZWQKKyAgICAgICBieSB0aGUgdmVjdG9yaXplciwgYW5kIHJldHVybiB0aGUgZGVjbCBvZiB0aGUgdGFyZ2V0IGJ1aWx0aW4KKyAgICAgICBmdW5jdGlvbi4gICovCisgICAgdHJlZSAoKiBidWlsdGluX21hc2tfZm9yX2xvYWQpICh2b2lkKTsKKworICAgIC8qIFJldHVybnMgYSBjb2RlIGZvciBidWlsdGluIHRoYXQgcmVhbGl6ZXMgdmVjdG9yaXplZCB2ZXJzaW9uIG9mCisgICAgICAgZnVuY3Rpb24sIG9yIE5VTExfVFJFRSBpZiBub3QgYXZhaWxhYmxlLiAgKi8KKyAgICB0cmVlICgqIGJ1aWx0aW5fdmVjdG9yaXplZF9mdW5jdGlvbikgKHRyZWUsIHRyZWUsIHRyZWUpOworCisgICAgLyogUmV0dXJucyBhIGNvZGUgZm9yIGJ1aWx0aW4gdGhhdCByZWFsaXplcyB2ZWN0b3JpemVkIHZlcnNpb24gb2YKKyAgICAgICBjb252ZXJzaW9uLCBvciBOVUxMX1RSRUUgaWYgbm90IGF2YWlsYWJsZS4gICovCisgICAgdHJlZSAoKiBidWlsdGluX2NvbnZlcnNpb24pICh1bnNpZ25lZCwgdHJlZSk7CisKKyAgICAvKiBUYXJnZXQgYnVpbHRpbiB0aGF0IGltcGxlbWVudHMgdmVjdG9yIHdpZGVuaW5nIG11bHRpcGxpY2F0aW9uLgorICAgICAgIGJ1aWx0aW5fbXVsX3dpZGVuX2V2ZSBjb21wdXRlcyB0aGUgZWxlbWVudC1ieS1lbGVtZW50IHByb2R1Y3RzCisgICAgICAgZm9yIHRoZSBldmVuIGVsZW1lbnRzLCBhbmQgYnVpbHRpbl9tdWxfd2lkZW5fb2RkIGNvbXB1dGVzIHRoZQorICAgICAgIGVsZW1lbnQtYnktZWxlbWVudCBwcm9kdWN0cyBmb3IgdGhlIG9kZCBlbGVtZW50cy4gICovCisgICAgdHJlZSAoKiBidWlsdGluX211bF93aWRlbl9ldmVuKSAodHJlZSk7CisgICAgdHJlZSAoKiBidWlsdGluX211bF93aWRlbl9vZGQpICh0cmVlKTsKKworICAgIC8qIFJldHVybnMgdGhlIGNvc3QgdG8gYmUgYWRkZWQgdG8gdGhlIG92ZXJoZWFkcyBpbnZvbHZlZCB3aXRoCisgICAgICAgZXhlY3V0aW5nIHRoZSB2ZWN0b3JpemVkIHZlcnNpb24gb2YgYSBsb29wLiAgKi8KKyAgICBpbnQgKCpidWlsdGluX3ZlY3Rvcml6YXRpb25fY29zdCkgKGJvb2wpOworCisgICAgLyogUmV0dXJuIHRydWUgaWYgdmVjdG9yIGFsaWdubWVudCBpcyByZWFjaGFibGUgKGJ5IHBlZWxpbmcgTgorICAgICAgIGl0ZXJhdGlvbnMpIGZvciB0aGUgZ2l2ZW4gdHlwZS4gICovCisgICAgYm9vbCAoKiB2ZWN0b3JfYWxpZ25tZW50X3JlYWNoYWJsZSkgKGNvbnN0X3RyZWUsIGJvb2wpOworCisgICAgLyogVGFyZ2V0IGJ1aWx0aW4gdGhhdCBpbXBsZW1lbnRzIHZlY3RvciBwZXJtdXRlLiAgKi8KKyAgICB0cmVlICgqIGJ1aWx0aW5fdmVjX3Blcm0pICh0cmVlLCB0cmVlKik7CisKKyAgICAvKiBSZXR1cm4gdHJ1ZSBpZiBhIHZlY3RvciBjcmVhdGVkIGZvciBidWlsdGluX3ZlY19wZXJtIGlzIHZhbGlkLiAgKi8KKyAgICBib29sICgqIGJ1aWx0aW5fdmVjX3Blcm1fb2spICh0cmVlLCB0cmVlKTsKKworICAgIC8qIFJldHVybiB0cnVlIGlmIHRoZSB0YXJnZXQgc3VwcG9ydHMgbWlzYWxpZ25lZCBzdG9yZS9sb2FkIG9mIGEKKyAgICAgICBzcGVjaWZpYyBmYWN0b3IgZGVub3RlZCBpbiB0aGUgdGhpcmQgcGFyYW1ldGVyLiAgVGhlIGxhc3QgcGFyYW1ldGVyCisgICAgICAgaXMgdHJ1ZSBpZiB0aGUgYWNjZXNzIGlzIGRlZmluZWQgaW4gYSBwYWNrZWQgc3RydWN0LiAgKi8KKyAgICBib29sICgqIGJ1aWx0aW5fc3VwcG9ydF92ZWN0b3JfbWlzYWxpZ25tZW50KSAoZW51bSBtYWNoaW5lX21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X3RyZWUsIGludCwgYm9vbCk7CisgIH0gdmVjdG9yaXplOworCisgIC8qIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRhcmdldF9mbGFncy4gICovCisgIGludCBkZWZhdWx0X3RhcmdldF9mbGFnczsKKworICAvKiBBbGxvdyB0YXJnZXQgc3BlY2lmaWMgb3ZlcnJpZGluZyBvZiBvcHRpb24gc2V0dGluZ3MgYWZ0ZXIgb3B0aW9ucyBoYXZlCisgICAgIGJlZW4gY2hhbmdlZCBieSBhbiBhdHRyaWJ1dGUgb3IgcHJhZ21hIG9yIHdoZW4gaXQgaXMgcmVzZXQgYXQgdGhlCisgICAgIGVuZCBvZiB0aGUgY29kZSBhZmZlY3RlZCBieSBhbiBhdHRyaWJ1dGUgb3IgcHJhZ21hLiAgKi8KKyAgdm9pZCAoKiBvdmVycmlkZV9vcHRpb25zX2FmdGVyX2NoYW5nZSkgKHZvaWQpOworCisgIC8qIEhhbmRsZSB0YXJnZXQgc3dpdGNoIENPREUgKGFuIE9QVF8qIHZhbHVlKS4gIEFSRyBpcyB0aGUgYXJndW1lbnQKKyAgICAgcGFzc2VkIHRvIHRoZSBzd2l0Y2g7IGl0IGlzIE5VTEwgaWYgbm8gYXJndW1lbnQgd2FzLiAgVkFMVUUgaXMgdGhlCisgICAgIHZhbHVlIG9mIEFSRyBpZiBDT0RFIHNwZWNpZmllcyBhIFVJbnRlZ2VyIG9wdGlvbiwgb3RoZXJ3aXNlIGl0IGlzCisgICAgIDEgaWYgdGhlIHBvc2l0aXZlIGZvcm0gb2YgdGhlIHN3aXRjaCB3YXMgdXNlZCBhbmQgMCBpZiB0aGUgbmVnYXRpdmUKKyAgICAgZm9ybSB3YXMuICBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3dpdGNoIHdhcyB2YWxpZC4gICovCisgIGJvb2wgKCogaGFuZGxlX29wdGlvbikgKHNpemVfdCBjb2RlLCBjb25zdCBjaGFyICphcmcsIGludCB2YWx1ZSk7CisKKyAgLyogRGlzcGxheSBleHRyYSwgdGFyZ2V0IHNwZWNpZmljIGluZm9ybWF0aW9uIGluIHJlc3BvbnNlIHRvIGEKKyAgICAgLS10YXJnZXQtaGVscCBzd2l0Y2guICAqLworICB2b2lkICgqIHRhcmdldF9oZWxwKSAodm9pZCk7CisKKyAgLyogUmV0dXJuIG1hY2hpbmUgbW9kZSBmb3IgZmlsdGVyIHZhbHVlLiAgKi8KKyAgZW51bSBtYWNoaW5lX21vZGUgKCogZWhfcmV0dXJuX2ZpbHRlcl9tb2RlKSAodm9pZCk7CisKKyAgLyogUmV0dXJuIG1hY2hpbmUgbW9kZSBmb3IgbGliZ2NjIGV4cGFuZGVkIGNtcCBpbnN0cnVjdGlvbnMuICAqLworICBlbnVtIG1hY2hpbmVfbW9kZSAoKiBsaWJnY2NfY21wX3JldHVybl9tb2RlKSAodm9pZCk7CisKKyAgLyogUmV0dXJuIG1hY2hpbmUgbW9kZSBmb3IgbGliZ2NjIGV4cGFuZGVkIHNoaWZ0IGluc3RydWN0aW9ucy4gICovCisgIGVudW0gbWFjaGluZV9tb2RlICgqIGxpYmdjY19zaGlmdF9jb3VudF9tb2RlKSAodm9pZCk7CisKKyAgLyogUmV0dXJuIG1hY2hpbmUgbW9kZSB0byBiZSB1c2VkIGZvciBfVW53aW5kX1dvcmQgdHlwZS4gICovCisgIGVudW0gbWFjaGluZV9tb2RlICgqIHVud2luZF93b3JkX21vZGUpICh2b2lkKTsKKworICAvKiBHaXZlbiB0d28gZGVjbHMsIG1lcmdlIHRoZWlyIGF0dHJpYnV0ZXMgYW5kIHJldHVybiB0aGUgcmVzdWx0LiAgKi8KKyAgdHJlZSAoKiBtZXJnZV9kZWNsX2F0dHJpYnV0ZXMpICh0cmVlLCB0cmVlKTsKKworICAvKiBHaXZlbiB0d28gdHlwZXMsIG1lcmdlIHRoZWlyIGF0dHJpYnV0ZXMgYW5kIHJldHVybiB0aGUgcmVzdWx0LiAgKi8KKyAgdHJlZSAoKiBtZXJnZV90eXBlX2F0dHJpYnV0ZXMpICh0cmVlLCB0cmVlKTsKKworICAvKiBUYWJsZSBvZiBtYWNoaW5lIGF0dHJpYnV0ZXMgYW5kIGZ1bmN0aW9ucyB0byBoYW5kbGUgdGhlbS4KKyAgICAgSWdub3JlZCBpZiBOVUxMLiAgKi8KKyAgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9zcGVjICphdHRyaWJ1dGVfdGFibGU7CisKKyAgLyogUmV0dXJuIHplcm8gaWYgdGhlIGF0dHJpYnV0ZXMgb24gVFlQRTEgYW5kIFRZUEUyIGFyZSBpbmNvbXBhdGlibGUsCisgICAgIG9uZSBpZiB0aGV5IGFyZSBjb21wYXRpYmxlIGFuZCB0d28gaWYgdGhleSBhcmUgbmVhcmx5IGNvbXBhdGlibGUKKyAgICAgKHdoaWNoIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZ2VuZXJhdGVkKS4gICovCisgIGludCAoKiBjb21wX3R5cGVfYXR0cmlidXRlcykgKGNvbnN0X3RyZWUgdHlwZTEsIGNvbnN0X3RyZWUgdHlwZTIpOworCisgIC8qIEFzc2lnbiBkZWZhdWx0IGF0dHJpYnV0ZXMgdG8gdGhlIG5ld2x5IGRlZmluZWQgVFlQRS4gICovCisgIHZvaWQgKCogc2V0X2RlZmF1bHRfdHlwZV9hdHRyaWJ1dGVzKSAodHJlZSB0eXBlKTsKKworICAvKiBJbnNlcnQgYXR0cmlidXRlcyBvbiB0aGUgbmV3bHkgY3JlYXRlZCBERUNMLiAgKi8KKyAgdm9pZCAoKiBpbnNlcnRfYXR0cmlidXRlcykgKHRyZWUgZGVjbCwgdHJlZSAqYXR0cmlidXRlcyk7CisKKyAgLyogUmV0dXJuIHRydWUgaWYgRk5ERUNMICh3aGljaCBoYXMgYXQgbGVhc3Qgb25lIG1hY2hpbmUgYXR0cmlidXRlKQorICAgICBjYW4gYmUgaW5saW5lZCBkZXNwaXRlIGl0cyBtYWNoaW5lIGF0dHJpYnV0ZXMsIGZhbHNlIG90aGVyd2lzZS4gICovCisgIGJvb2wgKCogZnVuY3Rpb25fYXR0cmlidXRlX2lubGluYWJsZV9wKSAoY29uc3RfdHJlZSBmbmRlY2wpOworCisgIC8qIFJldHVybiB0cnVlIGlmIGJpdGZpZWxkcyBpbiBSRUNPUkRfVFlQRSBzaG91bGQgZm9sbG93IHRoZQorICAgICBNaWNyb3NvZnQgVmlzdWFsIEMrKyBiaXRmaWVsZCBsYXlvdXQgcnVsZXMuICAqLworICBib29sICgqIG1zX2JpdGZpZWxkX2xheW91dF9wKSAoY29uc3RfdHJlZSByZWNvcmRfdHlwZSk7CisKKyAgLyogVHJ1ZSBpZiB0aGUgdGFyZ2V0IHN1cHBvcnRzIGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQuICAqLworICBib29sICgqIGRlY2ltYWxfZmxvYXRfc3VwcG9ydGVkX3ApICh2b2lkKTsKKworICAvKiBUcnVlIGlmIHRoZSB0YXJnZXQgc3VwcG9ydHMgZml4ZWQtcG9pbnQuICAqLworICBib29sICgqIGZpeGVkX3BvaW50X3N1cHBvcnRlZF9wKSAodm9pZCk7CisKKyAgLyogUmV0dXJuIHRydWUgaWYgYW5vbnltb3VzIGJpdGZpZWxkcyBhZmZlY3Qgc3RydWN0dXJlIGFsaWdubWVudC4gICovCisgIGJvb2wgKCogYWxpZ25fYW5vbl9iaXRmaWVsZCkgKHZvaWQpOworCisgIC8qIFJldHVybiB0cnVlIGlmIHZvbGF0aWxlIGJpdGZpZWxkcyBzaG91bGQgdXNlIHRoZSBuYXJyb3dlc3QgdHlwZSBwb3NzaWJsZS4KKyAgICAgUmV0dXJuIGZhbHNlIGlmIHRoZXkgc2hvdWxkIHVzZSB0aGUgY29udGFpbmVyIHR5cGUuICAqLworICBib29sICgqIG5hcnJvd192b2xhdGlsZV9iaXRmaWVsZCkgKHZvaWQpOworCisgIC8qIFNldCB1cCB0YXJnZXQtc3BlY2lmaWMgYnVpbHQtaW4gZnVuY3Rpb25zLiAgKi8KKyAgdm9pZCAoKiBpbml0X2J1aWx0aW5zKSAodm9pZCk7CisKKyAgLyogSW5pdGlhbGl6ZSAoaWYgSU5JVElBTElaRV9QIGlzIHRydWUpIGFuZCByZXR1cm4gdGhlIHRhcmdldC1zcGVjaWZpYworICAgICBidWlsdC1pbiBmdW5jdGlvbiBkZWNsIGZvciBDT0RFLgorICAgICBSZXR1cm4gTlVMTCBpZiB0aGF0IGlzIG5vdCBwb3NzaWJsZS4gIFJldHVybiBlcnJvcl9tYXJrX25vZGUgaWYgQ09ERQorICAgICBpcyBvdXRzaWRlIG9mIHRoZSByYW5nZSBvZiB2YWxpZCB0YXJnZXQgYnVpbHRpbiBmdW5jdGlvbiBjb2Rlcy4gICovCisgIHRyZWUgKCogYnVpbHRpbl9kZWNsKSAodW5zaWduZWQgY29kZSwgYm9vbCBpbml0aWFsaXplX3ApOworCisgIC8qIEV4cGFuZCBhIHRhcmdldC1zcGVjaWZpYyBidWlsdGluLiAgKi8KKyAgcnR4ICgqIGV4cGFuZF9idWlsdGluKSAodHJlZSBleHAsIHJ0eCB0YXJnZXQsIHJ0eCBzdWJ0YXJnZXQsCisJCQkgIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIGludCBpZ25vcmUpOworCisgIC8qIFNlbGVjdCBhIHJlcGxhY2VtZW50IGZvciBhIHRhcmdldC1zcGVjaWZpYyBidWlsdGluLiAgVGhpcyBpcyBkb25lCisgICAgICpiZWZvcmUqIHJlZ3VsYXIgdHlwZSBjaGVja2luZywgYW5kIHNvIGFsbG93cyB0aGUgdGFyZ2V0IHRvCisgICAgIGltcGxlbWVudCBhIGNydWRlIGZvcm0gb2YgZnVuY3Rpb24gb3ZlcmxvYWRpbmcuICBUaGUgcmVzdWx0IGlzIGEKKyAgICAgY29tcGxldGUgZXhwcmVzc2lvbiB0aGF0IGltcGxlbWVudHMgdGhlIG9wZXJhdGlvbi4gIFBBUkFNUyByZWFsbHkKKyAgICAgaGFzIHR5cGUgVkVDKHRyZWUsZ2MpKiwgYnV0IHdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0cmVlLmgKKyAgICAgaGVyZS4gICovCisgIHRyZWUgKCpyZXNvbHZlX292ZXJsb2FkZWRfYnVpbHRpbikgKHVuc2lnbmVkIGludCAvKmxvY2F0aW9uX3QqLywKKyAgICAgIAkJCQkgICAgICB0cmVlIGRlY2wsIHZvaWQgKnBhcmFtcyk7CisKKyAgLyogRm9sZCBhIHRhcmdldC1zcGVjaWZpYyBidWlsdGluLiAgKi8KKyAgdHJlZSAoKiBmb2xkX2J1aWx0aW4pICh0cmVlIGZuZGVjbCwgdHJlZSBhcmdsaXN0LCBib29sIGlnbm9yZSk7CisKKyAgLyogUmV0dXJucyBhIGNvZGUgZm9yIGEgdGFyZ2V0LXNwZWNpZmljIGJ1aWx0aW4gdGhhdCBpbXBsZW1lbnRzCisgICAgIHJlY2lwcm9jYWwgb2YgdGhlIGZ1bmN0aW9uLCBvciBOVUxMX1RSRUUgaWYgbm90IGF2YWlsYWJsZS4gICovCisgIHRyZWUgKCogYnVpbHRpbl9yZWNpcHJvY2FsKSAodW5zaWduZWQsIGJvb2wsIGJvb2wpOworCisgIC8qIEZvciBhIHZlbmRvci1zcGVjaWZpYyBUWVBFLCByZXR1cm4gYSBwb2ludGVyIHRvIGEgc3RhdGljYWxseS1hbGxvY2F0ZWQKKyAgICAgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIEMrKyBtYW5nbGluZyBmb3IgVFlQRS4gIEluIGFsbCBvdGhlciBjYXNlcywgcmV0dXJuCisgICAgIE5VTEwuICAqLworICBjb25zdCBjaGFyICogKCogbWFuZ2xlX3R5cGUpIChjb25zdF90cmVlIHR5cGUpOworCisgIC8qIE1ha2UgYW55IGFkanVzdG1lbnRzIHRvIGxpYmZ1bmMgbmFtZXMgbmVlZGVkIGZvciB0aGlzIHRhcmdldC4gICovCisgIHZvaWQgKCogaW5pdF9saWJmdW5jcykgKHZvaWQpOworCisgIC8qIEdpdmVuIGEgZGVjbCwgYSBzZWN0aW9uIG5hbWUsIGFuZCB3aGV0aGVyIHRoZSBkZWNsIGluaXRpYWxpemVyCisgICAgIGhhcyByZWxvY3MsIGNob29zZSBhdHRyaWJ1dGVzIGZvciB0aGUgc2VjdGlvbi4gICovCisgIC8qID8/PyBTaG91bGQgYmUgbWVyZ2VkIHdpdGggU0VMRUNUX1NFQ1RJT04gYW5kIFVOSVFVRV9TRUNUSU9OLiAgKi8KKyAgdW5zaWduZWQgaW50ICgqIHNlY3Rpb25fdHlwZV9mbGFncykgKHRyZWUsIGNvbnN0IGNoYXIgKiwgaW50KTsKKworICAvKiBUcnVlIGlmIG5ldyBqdW1wcyBjYW5ub3QgYmUgY3JlYXRlZCwgdG8gcmVwbGFjZSBleGlzdGluZyBvbmVzIG9yCisgICAgIG5vdCwgYXQgdGhlIGN1cnJlbnQgcG9pbnQgaW4gdGhlIGNvbXBpbGF0aW9uLiAgKi8KKyAgYm9vbCAoKiBjYW5ub3RfbW9kaWZ5X2p1bXBzX3ApICh2b2lkKTsKKworICAvKiBSZXR1cm4gYSByZWdpc3RlciBjbGFzcyBmb3Igd2hpY2ggYnJhbmNoIHRhcmdldCByZWdpc3RlcgorICAgICBvcHRpbWl6YXRpb25zIHNob3VsZCBiZSBhcHBsaWVkLiAgKi8KKyAgZW51bSByZWdfY2xhc3MgKCogYnJhbmNoX3RhcmdldF9yZWdpc3Rlcl9jbGFzcykgKHZvaWQpOworCisgIC8qIFJldHVybiB0cnVlIGlmIGJyYW5jaCB0YXJnZXQgcmVnaXN0ZXIgb3B0aW1pemF0aW9ucyBzaG91bGQgaW5jbHVkZQorICAgICBjYWxsZWUtc2F2ZWQgcmVnaXN0ZXJzIHRoYXQgYXJlIG5vdCBhbHJlYWR5IGxpdmUgZHVyaW5nIHRoZSBjdXJyZW50CisgICAgIGZ1bmN0aW9uLiAgQUZURVJfUEVfR0VOIGlzIHRydWUgaWYgcHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXMgaGF2ZQorICAgICBhbHJlYWR5IGJlZW4gZ2VuZXJhdGVkLiAgKi8KKyAgYm9vbCAoKiBicmFuY2hfdGFyZ2V0X3JlZ2lzdGVyX2NhbGxlZV9zYXZlZCkgKGJvb2wgYWZ0ZXJfcGVfZ2VuKTsKKworICAvKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdGFyZ2V0IHN1cHBvcnRzIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbi4gICovCisgIGJvb2wgKCogaGF2ZV9jb25kaXRpb25hbF9leGVjdXRpb24pICh2b2lkKTsKKworICAvKiBUcnVlIGlmIHRoZSBjb25zdGFudCBYIGNhbm5vdCBiZSBwbGFjZWQgaW4gdGhlIGNvbnN0YW50IHBvb2wuICAqLworICBib29sICgqIGNhbm5vdF9mb3JjZV9jb25zdF9tZW0pIChydHgpOworCisgIC8qIFRydWUgaWYgdGhlIGluc24gWCBjYW5ub3QgYmUgZHVwbGljYXRlZC4gICovCisgIGJvb2wgKCogY2Fubm90X2NvcHlfaW5zbl9wKSAocnR4KTsKKworICAvKiBUcnVlIGlmIFggaXMgY29uc2lkZXJlZCB0byBiZSBjb21tdXRhdGl2ZS4gICovCisgIGJvb2wgKCogY29tbXV0YXRpdmVfcCkgKGNvbnN0X3J0eCwgaW50KTsKKworICAvKiBHaXZlbiBhbiBpbnZhbGlkIGFkZHJlc3MgWCBmb3IgYSBnaXZlbiBtYWNoaW5lIG1vZGUsIHRyeSBtYWNoaW5lLXNwZWNpZmljCisgICAgIHdheXMgdG8gbWFrZSBpdCBsZWdpdGltYXRlLiAgUmV0dXJuIFggb3IgYW4gaW52YWxpZCBhZGRyZXNzIG9uIGZhaWx1cmUuICAqLworICBydHggKCogbGVnaXRpbWl6ZV9hZGRyZXNzKSAocnR4LCBydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKKworICAvKiBHaXZlbiBhbiBhZGRyZXNzIFJUWCwgdW5kbyB0aGUgZWZmZWN0cyBvZiBMRUdJVElNSVpFX0FERFJFU1MuICAqLworICBydHggKCogZGVsZWdpdGltaXplX2FkZHJlc3MpIChydHgpOworCisgIC8qIEdpdmVuIGFuIGFkZHJlc3MgUlRYLCBzYXkgd2hldGhlciBpdCBpcyB2YWxpZC4gICovCisgIGJvb2wgKCogbGVnaXRpbWF0ZV9hZGRyZXNzX3ApIChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4LCBib29sKTsKKworICAvKiBUcnVlIGlmIHRoZSBnaXZlbiBjb25zdGFudCBjYW4gYmUgcHV0IGludG8gYW4gb2JqZWN0X2Jsb2NrLiAgKi8KKyAgYm9vbCAoKiB1c2VfYmxvY2tzX2Zvcl9jb25zdGFudF9wKSAoZW51bSBtYWNoaW5lX21vZGUsIGNvbnN0X3J0eCk7CisKKyAgLyogVGhlIG1pbmltdW0gYW5kIG1heGltdW0gYnl0ZSBvZmZzZXRzIGZvciBhbmNob3JlZCBhZGRyZXNzZXMuICAqLworICBIT1NUX1dJREVfSU5UIG1pbl9hbmNob3Jfb2Zmc2V0OworICBIT1NUX1dJREVfSU5UIG1heF9hbmNob3Jfb2Zmc2V0OworCisgIC8qIFRydWUgaWYgc2VjdGlvbiBhbmNob3JzIGNhbiBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgZ2l2ZW4gc3ltYm9sLiAgKi8KKyAgYm9vbCAoKiB1c2VfYW5jaG9yc19mb3Jfc3ltYm9sX3ApIChjb25zdF9ydHgpOworCisgIC8qIFRydWUgaWYgaXQgaXMgT0sgdG8gZG8gc2libGluZyBjYWxsIG9wdGltaXphdGlvbiBmb3IgdGhlIHNwZWNpZmllZAorICAgICBjYWxsIGV4cHJlc3Npb24gRVhQLiAgREVDTCB3aWxsIGJlIHRoZSBjYWxsZWQgZnVuY3Rpb24sIG9yIE5VTEwgaWYKKyAgICAgdGhpcyBpcyBhbiBpbmRpcmVjdCBjYWxsLiAgKi8KKyAgYm9vbCAoKmZ1bmN0aW9uX29rX2Zvcl9zaWJjYWxsKSAodHJlZSBkZWNsLCB0cmVlIGV4cCk7CisKKyAgLyogRXN0YWJsaXNoIGFwcHJvcHJpYXRlIGJhY2stZW5kIGNvbnRleHQgZm9yIHByb2Nlc3NpbmcgdGhlIGZ1bmN0aW9uCisgICAgIEZOREVDTC4gIFRoZSBhcmd1bWVudCBtaWdodCBiZSBOVUxMIHRvIGluZGljYXRlIHByb2Nlc3NpbmcgYXQgdG9wCisgICAgIGxldmVsLCBvdXRzaWRlIG9mIGFueSBmdW5jdGlvbiBzY29wZS4gICovCisgIHZvaWQgKCpzZXRfY3VycmVudF9mdW5jdGlvbikgKHRyZWUgZm5kZWNsKTsKKworICAvKiBUcnVlIGlmIEVYUCBzaG91bGQgYmUgcGxhY2VkIGluIGEgInNtYWxsIGRhdGEiIHNlY3Rpb24uICAqLworICBib29sICgqIGluX3NtYWxsX2RhdGFfcCkgKGNvbnN0X3RyZWUpOworCisgIC8qIFRydWUgaWYgRVhQIG5hbWVzIGFuIG9iamVjdCBmb3Igd2hpY2ggbmFtZSByZXNvbHV0aW9uIG11c3QgcmVzb2x2ZQorICAgICB0byB0aGUgY3VycmVudCBleGVjdXRhYmxlIG9yIHNoYXJlZCBsaWJyYXJ5LiAgKi8KKyAgYm9vbCAoKiBiaW5kc19sb2NhbF9wKSAoY29uc3RfdHJlZSk7CisKKyAgLyogTW9kaWZ5IGFuZCByZXR1cm4gdGhlIGlkZW50aWZpZXIgb2YgYSBERUNMJ3MgZXh0ZXJuYWwgbmFtZSwKKyAgICAgb3JpZ2luYWxseSBpZGVudGlmaWVkIGJ5IElELCBhcyByZXF1aXJlZCBieSB0aGUgdGFyZ2V0LAorICAgIChlZywgYXBwZW5kIEBubiB0byB3aW5kb3dzMzIgc3RkY2FsbCBmdW5jdGlvbiBuYW1lcykuCisgICAgIFRoZSBkZWZhdWx0IGlzIHRvIHJldHVybiBJRCB3aXRob3V0IG1vZGlmaWNhdGlvbi4gKi8KKyAgIHRyZWUgKCogbWFuZ2xlX2RlY2xfYXNzZW1ibGVyX25hbWUpICh0cmVlIGRlY2wsIHRyZWUgIGlkKTsKKworICAvKiBEbyBzb21ldGhpbmcgdGFyZ2V0LXNwZWNpZmljIHRvIHJlY29yZCBwcm9wZXJ0aWVzIG9mIHRoZSBERUNMIGludG8KKyAgICAgdGhlIGFzc29jaWF0ZWQgU1lNQk9MX1JFRi4gICovCisgIHZvaWQgKCogZW5jb2RlX3NlY3Rpb25faW5mbykgKHRyZWUsIHJ0eCwgaW50KTsKKworICAvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIGVuY29kZV9zZWN0aW9uX2luZm8gb24gdGhlIHN5bWJvbCBzdHJpbmcuICAqLworICBjb25zdCBjaGFyICogKCogc3RyaXBfbmFtZV9lbmNvZGluZykgKGNvbnN0IGNoYXIgKik7CisKKyAgLyogSWYgc2hpZnQgb3B0YWJzIGZvciBNT0RFIGFyZSBrbm93biB0byBhbHdheXMgdHJ1bmNhdGUgdGhlIHNoaWZ0IGNvdW50LAorICAgICByZXR1cm4gdGhlIG1hc2sgdGhhdCB0aGV5IGFwcGx5LiAgUmV0dXJuIDAgb3RoZXJ3aXNlLiAgKi8KKyAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCAoKiBzaGlmdF90cnVuY2F0aW9uX21hc2spIChlbnVtIG1hY2hpbmVfbW9kZSBtb2RlKTsKKworICAvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBkaXZpc2lvbnMgaW4gdGhlIGdpdmVuIE1PREUgdGhhdCBzaG91bGQgYmUgcHJlc2VudCwKKyAgICAgc28gdGhhdCBpdCBpcyBwcm9maXRhYmxlIHRvIHR1cm4gdGhlIGRpdmlzaW9uIGludG8gYSBtdWx0aXBsaWNhdGlvbiBieQorICAgICB0aGUgcmVjaXByb2NhbC4gICovCisgIHVuc2lnbmVkIGludCAoKiBtaW5fZGl2aXNpb25zX2Zvcl9yZWNpcF9tdWwpIChlbnVtIG1hY2hpbmVfbW9kZSBtb2RlKTsKKworICAvKiBJZiB0aGUgcmVwcmVzZW50YXRpb24gb2YgaW50ZWdyYWwgTU9ERSBpcyBzdWNoIHRoYXQgdmFsdWVzIGFyZQorICAgICBhbHdheXMgc2lnbi1leHRlbmRlZCB0byBhIHdpZGVyIG1vZGUgTU9ERV9SRVAgdGhlbiByZXR1cm4KKyAgICAgU0lHTl9FWFRFTkQuICBSZXR1cm4gVU5LTk9XTiBvdGhlcndpc2UuICAqLworICAvKiBOb3RlIHRoYXQgdGhlIHJldHVybiB0eXBlIG91Z2h0IHRvIGJlIFJUWF9DT0RFLCBidXQgdGhhdCdzIG5vdAorICAgICBuZWNlc3NhcmlseSBkZWZpbmVkIGF0IHRoaXMgcG9pbnQuICAqLworICBpbnQgKCogbW9kZV9yZXBfZXh0ZW5kZWQpIChlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCQkJICAgICBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlX3JlcCk7CisKKyAgLyogVHJ1ZSBpZiBNT0RFIGlzIHZhbGlkIGZvciBhIHBvaW50ZXIgaW4gX19hdHRyaWJ1dGVfXygobW9kZSgiTU9ERSIpKSkuICAqLworICBib29sICgqIHZhbGlkX3BvaW50ZXJfbW9kZSkgKGVudW0gbWFjaGluZV9tb2RlIG1vZGUpOworCisgIC8qIFN1cHBvcnQgZm9yIG5hbWVkIGFkZHJlc3Mgc3BhY2VzLiAgKi8KKyAgc3RydWN0IGFkZHJfc3BhY2UgeworICAgIC8qIE1PREUgdG8gdXNlIGZvciBhIHBvaW50ZXIgaW50byBhbm90aGVyIGFkZHJlc3Mgc3BhY2UuICAqLworICAgIGVudW0gbWFjaGluZV9tb2RlICgqIHBvaW50ZXJfbW9kZSkgKGFkZHJfc3BhY2VfdCk7CisKKyAgICAvKiBNT0RFIHRvIHVzZSBmb3IgYW4gYWRkcmVzcyBpbiBhbm90aGVyIGFkZHJlc3Mgc3BhY2UuICAqLworICAgIGVudW0gbWFjaGluZV9tb2RlICgqIGFkZHJlc3NfbW9kZSkgKGFkZHJfc3BhY2VfdCk7CisKKyAgICAvKiBUcnVlIGlmIE1PREUgaXMgdmFsaWQgZm9yIGEgcG9pbnRlciBpbiBfX2F0dHJpYnV0ZV9fKChtb2RlKCJNT0RFIikpKQorICAgICAgIGluIGFub3RoZXIgYWRkcmVzcyBzcGFjZS4gICovCisgICAgYm9vbCAoKiB2YWxpZF9wb2ludGVyX21vZGUpIChlbnVtIG1hY2hpbmVfbW9kZSwgYWRkcl9zcGFjZV90KTsKKworICAgIC8qIFRydWUgaWYgYW4gYWRkcmVzcyBpcyBhIHZhbGlkIG1lbW9yeSBhZGRyZXNzIHRvIGEgZ2l2ZW4gbmFtZWQgYWRkcmVzcworICAgICAgIHNwYWNlIGZvciBhIGdpdmVuIG1vZGUuICAqLworICAgIGJvb2wgKCogbGVnaXRpbWF0ZV9hZGRyZXNzX3ApIChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4LCBib29sLCBhZGRyX3NwYWNlX3QpOworCisgICAgLyogUmV0dXJuIGFuIHVwZGF0ZWQgYWRkcmVzcyB0byBjb252ZXJ0IGFuIGludmFsaWQgcG9pbnRlciB0byBhIG5hbWVkCisgICAgICAgYWRkcmVzcyBzcGFjZSB0byBhIHZhbGlkIG9uZS4gIElmIE5VTExfUlRYIGlzIHJldHVybmVkIHVzZSBtYWNoaW5lCisgICAgICAgaW5kZXBlbmRlbnQgbWV0aG9kcyB0byBtYWtlIHRoZSBhZGRyZXNzIHZhbGlkLiAgKi8KKyAgICBydHggKCogbGVnaXRpbWl6ZV9hZGRyZXNzKSAocnR4LCBydHgsIGVudW0gbWFjaGluZV9tb2RlLCBhZGRyX3NwYWNlX3QpOworCisgICAgLyogVHJ1ZSBpZiBvbmUgbmFtZWQgYWRkcmVzcyBzcGFjZSBpcyBhIHN1YnNldCBvZiBhbm90aGVyIG5hbWVkIGFkZHJlc3MuICovCisgICAgYm9vbCAoKiBzdWJzZXRfcCkgKGFkZHJfc3BhY2VfdCwgYWRkcl9zcGFjZV90KTsKKworICAgIC8qIEZ1bmN0aW9uIHRvIGNvbnZlcnQgYW4gcnRsIGV4cHJlc3Npb24gZnJvbSBvbmUgYWRkcmVzcyBzcGFjZSB0bworICAgICAgIGFub3RoZXIuICAqLworICAgIHJ0eCAoKiBjb252ZXJ0KSAocnR4LCB0cmVlLCB0cmVlKTsKKworICB9IGFkZHJfc3BhY2U7CisKKyAgLyogVHJ1ZSBpZiBNT0RFIGlzIHZhbGlkIGZvciB0aGUgdGFyZ2V0LiAgQnkgInZhbGlkIiwgd2UgbWVhbiBhYmxlIHRvCisgICAgIGJlIG1hbmlwdWxhdGVkIGluIG5vbi10cml2aWFsIHdheXMuICBJbiBwYXJ0aWN1bGFyLCB0aGlzIG1lYW5zIGFsbAorICAgICB0aGUgYXJpdGhtZXRpYyBpcyBzdXBwb3J0ZWQuICAqLworICBib29sICgqIHNjYWxhcl9tb2RlX3N1cHBvcnRlZF9wKSAoZW51bSBtYWNoaW5lX21vZGUgbW9kZSk7CisKKyAgLyogU2ltaWxhcmx5IGZvciB2ZWN0b3IgbW9kZXMuICAiU3VwcG9ydGVkIiBoZXJlIGlzIGxlc3Mgc3RyaWN0LiAgQXQKKyAgICAgbGVhc3Qgc29tZSBvcGVyYXRpb25zIGFyZSBzdXBwb3J0ZWQ7IG5lZWQgdG8gY2hlY2sgb3B0YWJzIG9yIGJ1aWx0aW5zCisgICAgIGZvciBmdXJ0aGVyIGRldGFpbHMuICAqLworICBib29sICgqIHZlY3Rvcl9tb2RlX3N1cHBvcnRlZF9wKSAoZW51bSBtYWNoaW5lX21vZGUgbW9kZSk7CisKKyAgLyogQ29tcHV0ZSBhIChwYXJ0aWFsKSBjb3N0IGZvciBydHggWC4gIFJldHVybiB0cnVlIGlmIHRoZSBjb21wbGV0ZQorICAgICBjb3N0IGhhcyBiZWVuIGNvbXB1dGVkLCBhbmQgZmFsc2UgaWYgc3ViZXhwcmVzc2lvbnMgc2hvdWxkIGJlCisgICAgIHNjYW5uZWQuICBJbiBlaXRoZXIgY2FzZSwgKlRPVEFMIGNvbnRhaW5zIHRoZSBjb3N0IHJlc3VsdC4gICovCisgIC8qIE5vdGUgdGhhdCBDT0RFIGFuZCBPVVRFUl9DT0RFIG91Z2h0IHRvIGJlIFJUWF9DT0RFLCBidXQgdGhhdCdzCisgICAgIG5vdCBuZWNlc3NhcmlseSBkZWZpbmVkIGF0IHRoaXMgcG9pbnQuICAqLworICBib29sICgqIHJ0eF9jb3N0cykgKHJ0eCB4LCBpbnQgY29kZSwgaW50IG91dGVyX2NvZGUsIGludCAqdG90YWwsIGJvb2wgc3BlZWQpOworCisgIC8qIENvbXB1dGUgdGhlIGNvc3Qgb2YgWCwgdXNlZCBhcyBhbiBhZGRyZXNzLiAgTmV2ZXIgY2FsbGVkIHdpdGgKKyAgICAgaW52YWxpZCBhZGRyZXNzZXMuICAqLworICBpbnQgKCogYWRkcmVzc19jb3N0KSAocnR4IHgsIGJvb2wgc3BlZWQpOworCisgIC8qIFJldHVybiB3aGVyZSB0byBhbGxvY2F0ZSBwc2V1ZG8gZm9yIGEgZ2l2ZW4gaGFyZCByZWdpc3RlciBpbml0aWFsCisgICAgIHZhbHVlLiAgKi8KKyAgcnR4ICgqIGFsbG9jYXRlX2luaXRpYWxfdmFsdWUpIChydHggeCk7CisKKyAgLyogUmV0dXJuIG5vbnplcm8gaWYgZXZhbHVhdGluZyBVTlNQRUNbX1ZPTEFUSUxFXSBYIG1pZ2h0IGNhdXNlIGEgdHJhcC4KKyAgICAgRkxBR1MgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4gcnRsYW5hbC5jOiBtYXlfdHJhcF9wXzEuICAqLworICBpbnQgKCogdW5zcGVjX21heV90cmFwX3ApIChjb25zdF9ydHggeCwgdW5zaWduZWQgZmxhZ3MpOworCisgIC8qIEdpdmVuIGEgcmVnaXN0ZXIsIHRoaXMgaG9vayBzaG91bGQgcmV0dXJuIGEgcGFyYWxsZWwgb2YgcmVnaXN0ZXJzCisgICAgIHRvIHJlcHJlc2VudCB3aGVyZSB0byBmaW5kIHRoZSByZWdpc3RlciBwaWVjZXMuICBEZWZpbmUgdGhpcyBob29rCisgICAgIGlmIHRoZSByZWdpc3RlciBhbmQgaXRzIG1vZGUgYXJlIHJlcHJlc2VudGVkIGluIER3YXJmIGluCisgICAgIG5vbi1jb250aWd1b3VzIGxvY2F0aW9ucywgb3IgaWYgdGhlIHJlZ2lzdGVyIHNob3VsZCBiZQorICAgICByZXByZXNlbnRlZCBpbiBtb3JlIHRoYW4gb25lIHJlZ2lzdGVyIGluIER3YXJmLiAgT3RoZXJ3aXNlLCB0aGlzCisgICAgIGhvb2sgc2hvdWxkIHJldHVybiBOVUxMX1JUWC4gICovCisgIHJ0eCAoKiBkd2FyZl9yZWdpc3Rlcl9zcGFuKSAocnR4KTsKKworICAvKiBJZiBleHBhbmRfYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplcyBuZWVkcyB0byBmaWxsIGluIHRhYmxlCisgICAgIGVudHJpZXMgbm90IGNvcnJlc3BvbmRpbmcgZGlyZWN0bHkgdG8gcmVnaXN0ZXJzIGJlbG93CisgICAgIEZJUlNUX1BTRVVET19SRUdJU1RFUiwgdGhpcyBob29rIHNob3VsZCBnZW5lcmF0ZSB0aGUgbmVjZXNzYXJ5CisgICAgIGNvZGUsIGdpdmVuIHRoZSBhZGRyZXNzIG9mIHRoZSB0YWJsZS4gICovCisgIHZvaWQgKCogaW5pdF9kd2FyZl9yZWdfc2l6ZXNfZXh0cmEpICh0cmVlKTsKKworICAvKiBGZXRjaCB0aGUgZml4ZWQgcmVnaXN0ZXIocykgd2hpY2ggaG9sZCBjb25kaXRpb24gY29kZXMsIGZvcgorICAgICB0YXJnZXRzIHdoZXJlIGl0IG1ha2VzIHNlbnNlIHRvIGxvb2sgZm9yIGR1cGxpY2F0ZSBhc3NpZ25tZW50cyB0bworICAgICB0aGUgY29uZGl0aW9uIGNvZGVzLiAgVGhpcyBzaG91bGQgcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgc3VjaCBhCisgICAgIHJlZ2lzdGVyLCBmYWxzZSBvdGhlcndpc2UuICBUaGUgYXJndW1lbnRzIHNob3VsZCBiZSBzZXQgdG8gdGhlCisgICAgIGZpeGVkIHJlZ2lzdGVyIG51bWJlcnMuICBVcCB0byB0d28gY29uZGl0aW9uIGNvZGUgcmVnaXN0ZXJzIGFyZQorICAgICBzdXBwb3J0ZWQuICBJZiB0aGVyZSBpcyBvbmx5IG9uZSBmb3IgdGhpcyB0YXJnZXQsIHRoZSBpbnQgcG9pbnRlZAorICAgICBhdCBieSB0aGUgc2Vjb25kIGFyZ3VtZW50IHNob3VsZCBiZSBzZXQgdG8gLTEuICAqLworICBib29sICgqIGZpeGVkX2NvbmRpdGlvbl9jb2RlX3JlZ3MpICh1bnNpZ25lZCBpbnQgKiwgdW5zaWduZWQgaW50ICopOworCisgIC8qIElmIHR3byBjb25kaXRpb24gY29kZSBtb2RlcyBhcmUgY29tcGF0aWJsZSwgcmV0dXJuIGEgY29uZGl0aW9uCisgICAgIGNvZGUgbW9kZSB3aGljaCBpcyBjb21wYXRpYmxlIHdpdGggYm90aCwgc3VjaCB0aGF0IGEgY29tcGFyaXNvbgorICAgICBkb25lIGluIHRoZSByZXR1cm5lZCBtb2RlIHdpbGwgd29yayBmb3IgYm90aCBvZiB0aGUgb3JpZ2luYWwKKyAgICAgbW9kZXMuICBJZiB0aGUgY29uZGl0aW9uIGNvZGUgbW9kZXMgYXJlIG5vdCBjb21wYXRpYmxlLCByZXR1cm4KKyAgICAgVk9JRG1vZGUuICAqLworICBlbnVtIG1hY2hpbmVfbW9kZSAoKiBjY19tb2Rlc19jb21wYXRpYmxlKSAoZW51bSBtYWNoaW5lX21vZGUsCisJCQkJCSAgICAgZW51bSBtYWNoaW5lX21vZGUpOworCisgIC8qIERvIG1hY2hpbmUtZGVwZW5kZW50IGNvZGUgdHJhbnNmb3JtYXRpb25zLiAgQ2FsbGVkIGp1c3QgYmVmb3JlCisgICAgIGRlbGF5ZWQtYnJhbmNoIHNjaGVkdWxpbmcuICAqLworICB2b2lkICgqIG1hY2hpbmVfZGVwZW5kZW50X3Jlb3JnKSAodm9pZCk7CisKKyAgLyogQ3JlYXRlIHRoZSBfX2J1aWx0aW5fdmFfbGlzdCB0eXBlLiAgKi8KKyAgdHJlZSAoKiBidWlsZF9idWlsdGluX3ZhX2xpc3QpICh2b2lkKTsKKworICAvKiBHZXQgdGhlIGNmdW4vZm5kZWNsIGNhbGxpbmcgYWJpIF9fYnVpbHRpbl92YV9saXN0IHR5cGUuICAqLworICB0cmVlICgqIGZuX2FiaV92YV9saXN0KSAodHJlZSk7CisKKyAgLyogR2V0IHRoZSBfX2J1aWx0aW5fdmFfbGlzdCB0eXBlIGRlcGVuZGVudCBvbiBpbnB1dCB0eXBlLiAgKi8KKyAgdHJlZSAoKiBjYW5vbmljYWxfdmFfbGlzdF90eXBlKSAodHJlZSk7CisKKyAgLyogRXhwYW5kIHRoZSBfX2J1aWx0aW5fdmFfc3RhcnQgYnVpbHRpbi4gICovCisgIHZvaWQgKCogZXhwYW5kX2J1aWx0aW5fdmFfc3RhcnQpICh0cmVlIHZhbGlzdCwgcnR4IG5leHRhcmcpOworCisgIC8qIEdpbXBsaWZpZXMgYSBWQV9BUkdfRVhQUi4gICovCisgIHRyZWUgKCogZ2ltcGxpZnlfdmFfYXJnX2V4cHIpICh0cmVlIHZhbGlzdCwgdHJlZSB0eXBlLCBnaW1wbGVfc2VxICpwcmVfcCwKKwkJCQkgZ2ltcGxlX3NlcSAqcG9zdF9wKTsKKworICAvKiBWYWxpZGl0eS1jaGVja2luZyByb3V0aW5lcyBmb3IgUENIIGZpbGVzLCB0YXJnZXQtc3BlY2lmaWMuCisgICAgIGdldF9wY2hfdmFsaWRpdHkgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gYmUgc3RvcmVkLAorICAgICBhbmQgc3RvcmVzIHRoZSBzaXplIGluIGl0cyBhcmd1bWVudC4gIHBjaF92YWxpZF9wIGdldHMgdGhlIHNhbWUKKyAgICAgaW5mb3JtYXRpb24gYmFjayBhbmQgcmV0dXJucyBOVUxMIGlmIHRoZSBQQ0ggaXMgdmFsaWQsCisgICAgIG9yIGFuIGVycm9yIG1lc3NhZ2UgaWYgbm90LgorICAqLworICB2b2lkICogKCogZ2V0X3BjaF92YWxpZGl0eSkgKHNpemVfdCAqKTsKKyAgY29uc3QgY2hhciAqICgqIHBjaF92YWxpZF9wKSAoY29uc3Qgdm9pZCAqLCBzaXplX3QpOworCisgIC8qIElmIG5vbm51bGwsIHRoaXMgZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgYSBQQ0ggZmlsZSB3aXRoIHRoZQorICAgICBnaXZlbiBzZXQgb2YgdGFyZ2V0IGZsYWdzIGNhbiBiZSB1c2VkLiAgSXQgcmV0dXJucyBOVUxMIGlmIHNvLAorICAgICBvdGhlcndpc2UgaXQgcmV0dXJucyBhbiBlcnJvciBtZXNzYWdlLiAgKi8KKyAgY29uc3QgY2hhciAqKCpjaGVja19wY2hfdGFyZ2V0X2ZsYWdzKSAoaW50KTsKKworICAvKiBUcnVlIGlmIHRoZSBjb21waWxlciBzaG91bGQgZ2l2ZSBhbiBlbnVtIHR5cGUgb25seSBhcyBtYW55CisgICAgIGJ5dGVzIGFzIGl0IHRha2VzIHRvIHJlcHJlc2VudCB0aGUgcmFuZ2Ugb2YgcG9zc2libGUgdmFsdWVzIG9mCisgICAgIHRoYXQgdHlwZS4gICovCisgIGJvb2wgKCogZGVmYXVsdF9zaG9ydF9lbnVtcykgKHZvaWQpOworCisgIC8qIFRoaXMgdGFyZ2V0IGhvb2sgcmV0dXJucyBhbiBydHggdGhhdCBpcyB1c2VkIHRvIHN0b3JlIHRoZSBhZGRyZXNzCisgICAgIG9mIHRoZSBjdXJyZW50IGZyYW1lIGludG8gdGhlIGJ1aWx0LWluIHNldGptcCBidWZmZXIuICAqLworICBydHggKCogYnVpbHRpbl9zZXRqbXBfZnJhbWVfdmFsdWUpICh2b2lkKTsKKworICAvKiBUaGlzIHRhcmdldCBob29rIHNob3VsZCBhZGQgU1RSSU5HX0NTVCB0cmVlcyBmb3IgYW55IGhhcmQgcmVncworICAgICB0aGUgcG9ydCB3aXNoZXMgdG8gYXV0b21hdGljYWxseSBjbG9iYmVyIGZvciBhbiBhc20uICAqLworICB0cmVlICgqIG1kX2FzbV9jbG9iYmVycykgKHRyZWUsIHRyZWUsIHRyZWUpOworCisgIC8qIFRoaXMgdGFyZ2V0IGhvb2sgYWxsb3dzIHRoZSBiYWNrZW5kIHRvIHNwZWNpZnkgYSBjYWxsaW5nIGNvbnZlbnRpb24KKyAgICAgaW4gdGhlIGRlYnVnIGluZm9ybWF0aW9uLiAgVGhpcyBmdW5jdGlvbiBhY3R1YWxseSByZXR1cm5zIGFuCisgICAgIGVudW0gZHdhcmZfY2FsbGluZ19jb252ZW50aW9uLCBidXQgYmVjYXVzZSBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICAgICBhbmQgbm90IHdhbnRpbmcgdG8gaW5jbHVkZSBkd2FyZjIuaCBldmVyeXdoZXJlIHRhcmdldC5oIGlzIGluY2x1ZGVkCisgICAgIHRoZSBmdW5jdGlvbiBpcyBiZWluZyBkZWNsYXJlZCBhcyBhbiBpbnQuICAqLworICBpbnQgKCogZHdhcmZfY2FsbGluZ19jb252ZW50aW9uKSAoY29uc3RfdHJlZSk7CisKKyAgLyogVGhpcyB0YXJnZXQgaG9vayBhbGxvd3MgdGhlIGJhY2tlbmQgdG8gZW1pdCBmcmFtZS1yZWxhdGVkIGluc25zIHRoYXQKKyAgICAgY29udGFpbiBVTlNQRUNzIG9yIFVOU1BFQ19WT0xBVElMRXMuICBUaGUgY2FsbCBmcmFtZSBkZWJ1Z2dpbmcgaW5mbworICAgICBlbmdpbmUgd2lsbCBpbnZva2UgaXQgb24gaW5zbnMgb2YgdGhlIGZvcm0KKyAgICAgICAoc2V0IChyZWcpICh1bnNwZWMgWy4uLl0gVU5TUEVDX0lOREVYKSkKKyAgICAgYW5kCisgICAgICAgKHNldCAocmVnKSAodW5zcGVjX3ZvbGF0aWxlIFsuLi5dIFVOU1BFQ1ZfSU5ERVgpKQorICAgICB0byBsZXQgdGhlIGJhY2tlbmQgZW1pdCB0aGUgY2FsbCBmcmFtZSBpbnN0cnVjdGlvbnMuICAqLworICB2b2lkICgqIGR3YXJmX2hhbmRsZV9mcmFtZV91bnNwZWMpIChjb25zdCBjaGFyICosIHJ0eCwgaW50KTsKKworICAvKiBQZXJmb3JtIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjaGVja2luZyBvZiBzdGF0ZW1lbnRzIGdpbXBsaWZpZWQKKyAgICAgZnJvbSBWQV9BUkdfRVhQUi4gIFNUTVQgaXMgdGhlIHN0YXRlbWVudC4gIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3RhdGVtZW50CisgICAgIGRvZXNuJ3QgbmVlZCB0byBiZSBjaGVja2VkIGZvciB2YV9saXN0IHJlZmVyZW5jZXMuICAqLworICBib29sICgqIHN0ZGFyZ19vcHRpbWl6ZV9ob29rKSAoc3RydWN0IHN0ZGFyZ19pbmZvICphaSwgY29uc3RfZ2ltcGxlIHN0bXQpOworCisgIC8qIFRoaXMgdGFyZ2V0IGhvb2sgYWxsb3dzIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHRvIG92ZXJyaWRlIHRoZSBERUNMCisgICAgIHRoYXQgcmVwcmVzZW50cyB0aGUgZXh0ZXJuYWwgdmFyaWFibGUgdGhhdCBjb250YWlucyB0aGUgc3RhY2sKKyAgICAgcHJvdGVjdGlvbiBndWFyZCB2YXJpYWJsZS4gIFRoZSB0eXBlIG9mIHRoaXMgREVDTCBpcyBwdHJfdHlwZV9ub2RlLiAgKi8KKyAgdHJlZSAoKiBzdGFja19wcm90ZWN0X2d1YXJkKSAodm9pZCk7CisKKyAgLyogVGhpcyB0YXJnZXQgaG9vayBhbGxvd3MgdGhlIG9wZXJhdGluZyBzeXN0ZW0gdG8gb3ZlcnJpZGUgdGhlIENBTExfRVhQUgorICAgICB0aGF0IGlzIGludm9rZWQgd2hlbiBhIGNoZWNrIHZzIHRoZSBndWFyZCB2YXJpYWJsZSBmYWlscy4gICovCisgIHRyZWUgKCogc3RhY2tfcHJvdGVjdF9mYWlsKSAodm9pZCk7CisKKyAgLyogUmV0dXJucyBOVUxMIGlmIHRhcmdldCBzdXBwb3J0cyB0aGUgaW5zbiB3aXRoaW4gYSBkb2xvb3AgYmxvY2ssCisgICAgIG90aGVyd2lzZSBpdCByZXR1cm5zIGFuIGVycm9yIG1lc3NhZ2UuICAqLworICBjb25zdCBjaGFyICogKCppbnZhbGlkX3dpdGhpbl9kb2xvb3ApIChjb25zdF9ydHgpOworCisgIC8qIERFQ0wgaXMgYSB2YXJpYWJsZSBvciBmdW5jdGlvbiB3aXRoIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpCisgICAgIHNwZWNpZmllZC4gIFVzZSB0aGlzIGhvb2sgaWYgdGhlIHRhcmdldCBuZWVkcyB0byBhZGQgZXh0cmEgdmFsaWRhdGlvbgorICAgICBjaGVja3MgdG8gIGhhbmRsZV9kbGxfYXR0cmlidXRlICgpLiAgKi8KKyAgYm9vbCAoKiB2YWxpZF9kbGxpbXBvcnRfYXR0cmlidXRlX3ApIChjb25zdF90cmVlIGRlY2wpOworCisgIC8qIElmIG5vbi16ZXJvLCBhbGlnbiBjb25zdGFudCBhbmNob3JzIGluIENTRSB0byBhIG11bHRpcGxlIG9mIHRoaXMKKyAgICAgdmFsdWUuICAqLworICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGNvbnN0X2FuY2hvcjsKKworICAvKiBGdW5jdGlvbnMgcmVsYXRpbmcgdG8gY2FsbHMgLSBhcmd1bWVudCBwYXNzaW5nLCByZXR1cm5zLCBldGMuICAqLworICBzdHJ1Y3QgY2FsbHMgeworICAgIGVudW0gbWFjaGluZV9tb2RlICgqcHJvbW90ZV9mdW5jdGlvbl9tb2RlKSAoY29uc3RfdHJlZSB0eXBlLAorCQkJCQkJZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwkJCQkJCWludCAqcHVuc2lnbmVkcCwKKwkJCQkJCWNvbnN0X3RyZWUgZm50eXBlLAorCQkJCQkJaW50IGZvcl9yZXR1cm4pOworICAgIGJvb2wgKCpwcm9tb3RlX3Byb3RvdHlwZXMpIChjb25zdF90cmVlIGZudHlwZSk7CisgICAgcnR4ICgqc3RydWN0X3ZhbHVlX3J0eCkgKHRyZWUgZm5kZWNsLCBpbnQgaW5jb21pbmcpOworICAgIGJvb2wgKCpyZXR1cm5faW5fbWVtb3J5KSAoY29uc3RfdHJlZSB0eXBlLCBjb25zdF90cmVlIGZuZGVjbCk7CisgICAgYm9vbCAoKnJldHVybl9pbl9tc2IpIChjb25zdF90cmVlIHR5cGUpOworCisgICAgLyogUmV0dXJuIHRydWUgaWYgYSBwYXJhbWV0ZXIgbXVzdCBiZSBwYXNzZWQgYnkgcmVmZXJlbmNlLiAgVFlQRSBtYXkKKyAgICAgICBiZSBudWxsIGlmIHRoaXMgaXMgYSBsaWJjYWxsLiAgQ0EgbWF5IGJlIG51bGwgaWYgdGhpcyBxdWVyeSBpcworICAgICAgIGZyb20gX19idWlsdGluX3ZhX2FyZy4gICovCisgICAgYm9vbCAoKnBhc3NfYnlfcmVmZXJlbmNlKSAoQ1VNVUxBVElWRV9BUkdTICpjYSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwkJCSAgICAgICBjb25zdF90cmVlIHR5cGUsIGJvb2wgbmFtZWRfYXJnKTsKKworICAgIHJ0eCAoKmV4cGFuZF9idWlsdGluX3NhdmVyZWdzKSAodm9pZCk7CisgICAgLyogUmV0dXJucyBwcmV0ZW5kX2FyZ3VtZW50X3NpemUuICAqLworICAgIHZvaWQgKCpzZXR1cF9pbmNvbWluZ192YXJhcmdzKSAoQ1VNVUxBVElWRV9BUkdTICpjYSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwkJCQkgICAgdHJlZSB0eXBlLCBpbnQgKnByZXRlbmRfYXJnX3NpemUsCisJCQkJICAgIGludCBzZWNvbmRfdGltZSk7CisgICAgYm9vbCAoKnN0cmljdF9hcmd1bWVudF9uYW1pbmcpIChDVU1VTEFUSVZFX0FSR1MgKmNhKTsKKyAgICAvKiBSZXR1cm5zIHRydWUgaWYgd2Ugc2hvdWxkIHVzZQorICAgICAgIHRhcmdldG0uY2FsbHMuc2V0dXBfaW5jb21pbmdfdmFyYXJncygpIGFuZC9vcgorICAgICAgIHRhcmdldG0uY2FsbHMuc3RyaWN0X2FyZ3VtZW50X25hbWluZygpLiAgKi8KKyAgICBib29sICgqcHJldGVuZF9vdXRnb2luZ192YXJhcmdzX25hbWVkKSAoQ1VNVUxBVElWRV9BUkdTICpjYSk7CisKKyAgICAvKiBHaXZlbiBhIGNvbXBsZXggdHlwZSBULCByZXR1cm4gdHJ1ZSBpZiBhIHBhcmFtZXRlciBvZiB0eXBlIFQKKyAgICAgICBzaG91bGQgYmUgcGFzc2VkIGFzIHR3byBzY2FsYXJzLiAgKi8KKyAgICBib29sICgqIHNwbGl0X2NvbXBsZXhfYXJnKSAoY29uc3RfdHJlZSB0eXBlKTsKKworICAgIC8qIFJldHVybiB0cnVlIGlmIHR5cGUgVCwgbW9kZSBNT0RFLCBtYXkgbm90IGJlIHBhc3NlZCBpbiByZWdpc3RlcnMsCisgICAgICAgYnV0IG11c3QgYmUgcGFzc2VkIG9uIHRoZSBzdGFjay4gICovCisgICAgLyogPz8/IFRoaXMgcHJlZGljYXRlIHNob3VsZCBiZSBhcHBsaWVkIHN0cmljdGx5IGFmdGVyIHBhc3MtYnktcmVmZXJlbmNlLgorICAgICAgIE5lZWQgYXVkaXQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyB0aGUgY2FzZS4gICovCisgICAgYm9vbCAoKiBtdXN0X3Bhc3NfaW5fc3RhY2spIChlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBjb25zdF90cmVlIHQpOworCisgICAgLyogUmV0dXJuIHRydWUgaWYgdHlwZSBUWVBFLCBtb2RlIE1PREUsIHdoaWNoIGlzIHBhc3NlZCBieSByZWZlcmVuY2UsCisgICAgICAgc2hvdWxkIGhhdmUgdGhlIG9iamVjdCBjb3B5IGdlbmVyYXRlZCBieSB0aGUgY2FsbGVlIHJhdGhlciB0aGFuCisgICAgICAgdGhlIGNhbGxlci4gIEl0IGlzIG5ldmVyIGNhbGxlZCBmb3IgVFlQRSByZXF1aXJpbmcgY29uc3RydWN0b3JzLiAgKi8KKyAgICBib29sICgqIGNhbGxlZV9jb3BpZXMpIChDVU1VTEFUSVZFX0FSR1MgKmNhLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCQkJICAgIGNvbnN0X3RyZWUgdHlwZSwgYm9vbCBuYW1lZCk7CisKKyAgICAvKiBSZXR1cm4gemVybyBmb3IgYXJndW1lbnRzIHBhc3NlZCBlbnRpcmVseSBvbiB0aGUgc3RhY2sgb3IgZW50aXJlbHkKKyAgICAgICBpbiByZWdpc3RlcnMuICBJZiBwYXNzZWQgaW4gYm90aCwgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcGFzc2VkCisgICAgICAgaW4gcmVnaXN0ZXJzOyB0aGUgYmFsYW5jZSBpcyB0aGVyZWZvcmUgcGFzc2VkIG9uIHRoZSBzdGFjay4gICovCisgICAgaW50ICgqIGFyZ19wYXJ0aWFsX2J5dGVzKSAoQ1VNVUxBVElWRV9BUkdTICpjYSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwkJCSAgICAgICB0cmVlIHR5cGUsIGJvb2wgbmFtZWQpOworCisgICAgLyogUmV0dXJuIHRoZSBkaWFnbm9zdGljIG1lc3NhZ2Ugc3RyaW5nIGlmIGZ1bmN0aW9uIHdpdGhvdXQgYSBwcm90b3R5cGUKKyAgICAgICBpcyBub3QgYWxsb3dlZCBmb3IgdGhpcyAndmFsJyBhcmd1bWVudDsgTlVMTCBvdGhlcndpc2UuICovCisgICAgY29uc3QgY2hhciAqKCppbnZhbGlkX2FyZ19mb3JfdW5wcm90b3R5cGVkX2ZuKSAoY29uc3RfdHJlZSB0eXBlbGlzdCwKKwkJCQkJICAgICAJICAgIGNvbnN0X3RyZWUgZnVuY2RlY2wsCisJCQkJCQkgICAgY29uc3RfdHJlZSB2YWwpOworCisgICAgLyogUmV0dXJuIGFuIHJ0eCBmb3IgdGhlIHJldHVybiB2YWx1ZSBsb2NhdGlvbiBvZiB0aGUgZnVuY3Rpb24KKyAgICAgICBzcGVjaWZpZWQgYnkgRk5fREVDTF9PUl9UWVBFIHdpdGggYSByZXR1cm4gdHlwZSBvZiBSRVRfVFlQRS4gICovCisgICAgcnR4ICgqZnVuY3Rpb25fdmFsdWUpIChjb25zdF90cmVlIHJldF90eXBlLCBjb25zdF90cmVlIGZuX2RlY2xfb3JfdHlwZSwKKwkJCSAgIGJvb2wgb3V0Z29pbmcpOworCisgICAgLyogUmV0dXJuIHRoZSBydHggZm9yIHRoZSByZXN1bHQgb2YgYSBsaWJjYWxsIG9mIG1vZGUgTU9ERSwKKyAgICAgICBjYWxsaW5nIHRoZSBmdW5jdGlvbiBGTl9OQU1FLiAgKi8KKyAgICBydHggKCpsaWJjYWxsX3ZhbHVlKSAoZW51bSBtYWNoaW5lX21vZGUsIGNvbnN0X3J0eCk7CisKKyAgICAvKiBSZXR1cm4gYW4gcnR4IGZvciB0aGUgYXJndW1lbnQgcG9pbnRlciBpbmNvbWluZyB0byB0aGUKKyAgICAgICBjdXJyZW50IGZ1bmN0aW9uLiAgKi8KKyAgICBydHggKCppbnRlcm5hbF9hcmdfcG9pbnRlcikgKHZvaWQpOworCisgICAgLyogVXBkYXRlIHRoZSBjdXJyZW50IGZ1bmN0aW9uIHN0YWNrIGJvdW5kYXJ5IGlmIG5lZWRlZC4gICovCisgICAgdm9pZCAoKnVwZGF0ZV9zdGFja19ib3VuZGFyeSkgKHZvaWQpOworCisgICAgLyogSGFuZGxlIHN0YWNrIGFsaWdubWVudCBhbmQgcmV0dXJuIGFuIHJ0eCBmb3IgRHluYW1pYyBSZWFsaWduCisgICAgICAgQXJndW1lbnQgUG9pbnRlciBpZiBuZWNlc3NhcnkuICAqLworICAgIHJ0eCAoKmdldF9kcmFwX3J0eCkgKHZvaWQpOworCisgICAgLyogUmV0dXJuIHRydWUgaWYgYWxsIGZ1bmN0aW9uIHBhcmFtZXRlcnMgc2hvdWxkIGJlIHNwaWxsZWQgdG8gdGhlCisgICAgICAgc3RhY2suICAqLworICAgIGJvb2wgKCphbGxvY2F0ZV9zdGFja19zbG90c19mb3JfYXJncykgKHZvaWQpOworCisgICAgLyogUmV0dXJuIGFuIHJ0eCBmb3IgdGhlIHN0YXRpYyBjaGFpbiBmb3IgRk5ERUNMLiAgSWYgSU5DT01JTkdfUCBpcyB0cnVlLAorICAgICAgIHRoZW4gaXQgc2hvdWxkIGJlIGZvciB0aGUgY2FsbGVlOyBvdGhlcndpc2UgZm9yIHRoZSBjYWxsZXIuICAqLworICAgIHJ0eCAoKnN0YXRpY19jaGFpbikgKGNvbnN0X3RyZWUgZm5kZWNsLCBib29sIGluY29taW5nX3ApOworCisgICAgLyogRmlsbCBpbiB0aGUgdHJhbXBvbGluZSBhdCBNRU0gd2l0aCBhIGNhbGwgdG8gRk5ERUNMIGFuZCBhCisgICAgICAgc3RhdGljIGNoYWluIHZhbHVlIG9mIENIQUlOLiAgKi8KKyAgICB2b2lkICgqdHJhbXBvbGluZV9pbml0KSAocnR4IG1lbSwgdHJlZSBmbmRlY2wsIHJ0eCBjaGFpbik7CisKKyAgICAvKiBBZGp1c3QgdGhlIGFkZHJlc3Mgb2YgdGhlIHRyYW1wb2xpbmUgaW4gYSB0YXJnZXQtc3BlY2lmaWMgd2F5LiAgKi8KKyAgICBydHggKCp0cmFtcG9saW5lX2FkanVzdF9hZGRyZXNzKSAocnR4IGFkZHIpOworICB9IGNhbGxzOworCisgIC8qIFJldHVybiB0aGUgZGlhZ25vc3RpYyBtZXNzYWdlIHN0cmluZyBpZiBjb252ZXJzaW9uIGZyb20gRlJPTVRZUEUKKyAgICAgdG8gVE9UWVBFIGlzIG5vdCBhbGxvd2VkLCBOVUxMIG90aGVyd2lzZS4gICovCisgIGNvbnN0IGNoYXIgKigqaW52YWxpZF9jb252ZXJzaW9uKSAoY29uc3RfdHJlZSBmcm9tdHlwZSwgY29uc3RfdHJlZSB0b3R5cGUpOworCisgIC8qIFJldHVybiB0aGUgZGlhZ25vc3RpYyBtZXNzYWdlIHN0cmluZyBpZiB0aGUgdW5hcnkgb3BlcmF0aW9uIE9QIGlzCisgICAgIG5vdCBwZXJtaXR0ZWQgb24gVFlQRSwgTlVMTCBvdGhlcndpc2UuICAqLworICBjb25zdCBjaGFyICooKmludmFsaWRfdW5hcnlfb3ApIChpbnQgb3AsIGNvbnN0X3RyZWUgdHlwZSk7CisKKyAgLyogUmV0dXJuIHRoZSBkaWFnbm9zdGljIG1lc3NhZ2Ugc3RyaW5nIGlmIHRoZSBiaW5hcnkgb3BlcmF0aW9uIE9QCisgICAgIGlzIG5vdCBwZXJtaXR0ZWQgb24gVFlQRTEgYW5kIFRZUEUyLCBOVUxMIG90aGVyd2lzZS4gICovCisgIGNvbnN0IGNoYXIgKigqaW52YWxpZF9iaW5hcnlfb3ApIChpbnQgb3AsIGNvbnN0X3RyZWUgdHlwZTEsIGNvbnN0X3RyZWUgdHlwZTIpOworCisgIC8qIFJldHVybiB0aGUgZGlhZ25vc3RpYyBtZXNzYWdlIHN0cmluZyBpZiBUWVBFIGlzIG5vdCB2YWxpZCBhcyBhCisgICAgIGZ1bmN0aW9uIHBhcmFtZXRlciB0eXBlLCBOVUxMIG90aGVyd2lzZS4gICovCisgIGNvbnN0IGNoYXIgKigqaW52YWxpZF9wYXJhbWV0ZXJfdHlwZSkgKGNvbnN0X3RyZWUgdHlwZSk7CisKKyAgLyogUmV0dXJuIHRoZSBkaWFnbm9zdGljIG1lc3NhZ2Ugc3RyaW5nIGlmIFRZUEUgaXMgbm90IHZhbGlkIGFzIGEKKyAgICAgZnVuY3Rpb24gcmV0dXJuIHR5cGUsIE5VTEwgb3RoZXJ3aXNlLiAgKi8KKyAgY29uc3QgY2hhciAqKCppbnZhbGlkX3JldHVybl90eXBlKSAoY29uc3RfdHJlZSB0eXBlKTsKKworICAvKiBJZiB2YWx1ZXMgb2YgVFlQRSBhcmUgcHJvbW90ZWQgdG8gc29tZSBvdGhlciB0eXBlIHdoZW4gdXNlZCBpbgorICAgICBleHByZXNzaW9ucyAoYW5hbG9nb3VzIHRvIHRoZSBpbnRlZ2VyIHByb21vdGlvbnMpLCByZXR1cm4gdGhhdCB0eXBlLAorICAgICBvciBOVUxMX1RSRUUgb3RoZXJ3aXNlLiAgKi8KKyAgdHJlZSAoKnByb21vdGVkX3R5cGUpIChjb25zdF90cmVlIHR5cGUpOworCisgIC8qIENvbnZlcnQgRVhQUiB0byBUWVBFLCBpZiB0YXJnZXQtc3BlY2lmaWMgdHlwZXMgd2l0aCBzcGVjaWFsIGNvbnZlcnNpb24KKyAgICAgcnVsZXMgYXJlIGludm9sdmVkLiAgUmV0dXJuIHRoZSBjb252ZXJ0ZWQgZXhwcmVzc2lvbiwgb3IgTlVMTCB0byBhcHBseQorICAgICB0aGUgc3RhbmRhcmQgY29udmVyc2lvbiBydWxlcy4gICovCisgIHRyZWUgKCpjb252ZXJ0X3RvX3R5cGUpICh0cmVlIHR5cGUsIHRyZWUgZXhwcik7CisKKyAgLyogUmV0dXJuIHRoZSBhcnJheSBvZiBJUkEgY292ZXIgY2xhc3NlcyBmb3IgdGhlIGN1cnJlbnQgdGFyZ2V0LiAgKi8KKyAgY29uc3QgZW51bSByZWdfY2xhc3MgKigqaXJhX2NvdmVyX2NsYXNzZXMpICh2b2lkKTsKKworICAvKiBSZXR1cm4gdGhlIGNsYXNzIGZvciBhIHNlY29uZGFyeSByZWxvYWQsIGFuZCBmaWxsIGluIGV4dHJhIGluZm9ybWF0aW9uLiAgKi8KKyAgZW51bSByZWdfY2xhc3MgKCpzZWNvbmRhcnlfcmVsb2FkKSAoYm9vbCwgcnR4LCBlbnVtIHJlZ19jbGFzcywKKwkJCQkgICAgICBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCQkgICAgICBzZWNvbmRhcnlfcmVsb2FkX2luZm8gKik7CisKKyAgLyogVGhpcyB0YXJnZXQgaG9vayBhbGxvd3MgdGhlIGJhY2tlbmQgdG8gcGVyZm9ybSBhZGRpdGlvbmFsCisgICAgIHByb2Nlc3Npbmcgd2hpbGUgaW5pdGlhbGl6aW5nIGZvciB2YXJpYWJsZSBleHBhbnNpb24uICAqLworICB2b2lkICgqIGV4cGFuZF90b19ydGxfaG9vaykgKHZvaWQpOworCisgIC8qIFRoaXMgdGFyZ2V0IGhvb2sgYWxsb3dzIHRoZSBiYWNrZW5kIHRvIHBlcmZvcm0gYWRkaXRpb25hbAorICAgICBpbnN0YW50aWF0aW9ucyBvbiBydHggdGhhdCBhcmUgbm90IGFjdHVhbGx5IGluIGluc25zIHlldCwKKyAgICAgYnV0IHdpbGwgYmUgbGF0ZXIuICAqLworICB2b2lkICgqIGluc3RhbnRpYXRlX2RlY2xzKSAodm9pZCk7CisKKyAgLyogUmV0dXJuIHRydWUgaWYgaXMgT0sgdG8gdXNlIGEgaGFyZCByZWdpc3RlciBSRUdOTyBhcyBzY3JhdGNoIHJlZ2lzdGVyCisgICAgIGluIHBlZXBob2xlMi4gICovCisgIGJvb2wgKCogaGFyZF9yZWdub19zY3JhdGNoX29rKSAodW5zaWduZWQgaW50IHJlZ25vKTsKKworICAvKiBSZXR1cm4gdGhlIHNtYWxsZXN0IG51bWJlciBvZiBkaWZmZXJlbnQgdmFsdWVzIGZvciB3aGljaCBpdCBpcyBiZXN0IHRvCisgICAgIHVzZSBhIGp1bXAtdGFibGUgaW5zdGVhZCBvZiBhIHRyZWUgb2YgY29uZGl0aW9uYWwgYnJhbmNoZXMuICAqLworICB1bnNpZ25lZCBpbnQgKCogY2FzZV92YWx1ZXNfdGhyZXNob2xkKSAodm9pZCk7CisKKyAgLyogUmV0dXRuIHRydWUgaWYgYSBmdW5jdGlvbiBtdXN0IGhhdmUgYW5kIHVzZSBhIGZyYW1lIHBvaW50ZXIuICAqLworICBib29sICgqIGZyYW1lX3BvaW50ZXJfcmVxdWlyZWQpICh2b2lkKTsKKworICAvKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbXBpbGVyIGlzIGFsbG93ZWQgdG8gdHJ5IHRvIHJlcGxhY2UgcmVnaXN0ZXIgbnVtYmVyCisgICAgIGZyb20tcmVnIHdpdGggcmVnaXN0ZXIgbnVtYmVyIHRvLXJlZy4gICovCisgIGJvb2wgKCogY2FuX2VsaW1pbmF0ZSkgKGNvbnN0IGludCwgY29uc3QgaW50KTsKKworICAvKiBGdW5jdGlvbnMgc3BlY2lmaWMgdG8gdGhlIEMgZmFtaWx5IG9mIGZyb250ZW5kcy4gICovCisgIHN0cnVjdCBjIHsKKyAgICAvKiBSZXR1cm4gbWFjaGluZSBtb2RlIGZvciBub24tc3RhbmRhcmQgc3VmZml4CisgICAgICAgb3IgVk9JRG1vZGUgaWYgbm9uLXN0YW5kYXJkIHN1ZmZpeGVzIGFyZSB1bnN1cHBvcnRlZC4gICovCisgICAgZW51bSBtYWNoaW5lX21vZGUgKCptb2RlX2Zvcl9zdWZmaXgpIChjaGFyKTsKKyAgfSBjOworCisgIC8qIEZ1bmN0aW9ucyBzcGVjaWZpYyB0byB0aGUgQysrIGZyb250ZW5kLiAgKi8KKyAgc3RydWN0IGN4eCB7CisgICAgLyogUmV0dXJuIHRoZSBpbnRlZ2VyIHR5cGUgdXNlZCBmb3IgZ3VhcmQgdmFyaWFibGVzLiAgKi8KKyAgICB0cmVlICgqZ3VhcmRfdHlwZSkgKHZvaWQpOworICAgIC8qIFJldHVybiB0cnVlIGlmIG9ubHkgdGhlIGxvdyBiaXQgb2YgdGhlIGd1YXJkIHNob3VsZCBiZSB0ZXN0ZWQuICAqLworICAgIGJvb2wgKCpndWFyZF9tYXNrX2JpdCkgKHZvaWQpOworICAgIC8qIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGFycmF5IGNvb2tpZSBmb3IgYW4gYXJyYXkgb2YgdHlwZS4gICovCisgICAgdHJlZSAoKmdldF9jb29raWVfc2l6ZSkgKHRyZWUpOworICAgIC8qIFJldHVybnMgdHJ1ZSBpZiB0aGUgZWxlbWVudCBzaXplIHNob3VsZCBiZSBzdG9yZWQgaW4gdGhlCisgICAgICAgYXJyYXkgY29va2llLiAgKi8KKyAgICBib29sICgqY29va2llX2hhc19zaXplKSAodm9pZCk7CisgICAgLyogQWxsb3dzIGJhY2tlbmRzIHRvIHBlcmZvcm0gYWRkaXRpb25hbCBwcm9jZXNzaW5nIHdoZW4KKyAgICAgICBkZWNpZGluZyBpZiBhIGNsYXNzIHNob3VsZCBiZSBleHBvcnRlZCBvciBpbXBvcnRlZC4gICovCisgICAgaW50ICgqaW1wb3J0X2V4cG9ydF9jbGFzcykgKHRyZWUsIGludCk7CisgICAgLyogUmV0dXJucyB0cnVlIGlmIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMgcmV0dXJuICJ0aGlzIi4gICovCisgICAgYm9vbCAoKmNkdG9yX3JldHVybnNfdGhpcykgKHZvaWQpOworICAgIC8qIFJldHVybnMgdHJ1ZSBpZiB0aGUga2V5IG1ldGhvZCBmb3IgYSBjbGFzcyBjYW4gYmUgYW4gaW5saW5lCisgICAgICAgZnVuY3Rpb24sIHNvIGxvbmcgYXMgaXQgaXMgbm90IGRlY2xhcmVkIGlubGluZSBpbiB0aGUgY2xhc3MKKyAgICAgICBpdHNlbGYuICBSZXR1cm5pbmcgdHJ1ZSBpcyB0aGUgYmVoYXZpb3IgcmVxdWlyZWQgYnkgdGhlIEl0YW5pdW0KKyAgICAgICBDKysgQUJJLiAgKi8KKyAgICBib29sICgqa2V5X21ldGhvZF9tYXlfYmVfaW5saW5lKSAodm9pZCk7CisgICAgLyogREVDTCBpcyBhIHZpcnR1YWwgdGFibGUsIHZpcnR1YWwgdGFibGUgdGFibGUsIHR5cGVpbmZvIG9iamVjdCwKKyAgICAgICBvciBvdGhlciBzaW1pbGFyIGltcGxpY2l0IGNsYXNzIGRhdGEgb2JqZWN0IHRoYXQgd2lsbCBiZQorICAgICAgIGVtaXR0ZWQgd2l0aCBleHRlcm5hbCBsaW5rYWdlIGluIHRoaXMgdHJhbnNsYXRpb24gdW5pdC4gIE5vIEVMRgorICAgICAgIHZpc2liaWxpdHkgaGFzIGJlZW4gZXhwbGljaXRseSBzcGVjaWZpZWQuICBJZiB0aGUgdGFyZ2V0IG5lZWRzCisgICAgICAgdG8gc3BlY2lmeSBhIHZpc2liaWxpdHkgb3RoZXIgdGhhbiB0aGF0IG9mIHRoZSBjb250YWluaW5nIGNsYXNzLAorICAgICAgIHVzZSB0aGlzIGhvb2sgdG8gc2V0IERFQ0xfVklTSUJJTElUWSBhbmQKKyAgICAgICBERUNMX1ZJU0lCSUxJVFlfU1BFQ0lGSUVELiAgKi8KKyAgICB2b2lkICgqZGV0ZXJtaW5lX2NsYXNzX2RhdGFfdmlzaWJpbGl0eSkgKHRyZWUgZGVjbCk7CisgICAgLyogUmV0dXJucyB0cnVlICh0aGUgZGVmYXVsdCkgaWYgdmlydHVhbCB0YWJsZXMgYW5kIG90aGVyCisgICAgICAgc2ltaWxhciBpbXBsaWNpdCBjbGFzcyBkYXRhIG9iamVjdHMgYXJlIGFsd2F5cyBDT01EQVQgaWYgdGhleQorICAgICAgIGhhdmUgZXh0ZXJuYWwgbGlua2FnZS4gIElmIHRoaXMgaG9vayByZXR1cm5zIGZhbHNlLCB0aGVuCisgICAgICAgY2xhc3MgZGF0YSBmb3IgY2xhc3NlcyB3aG9zZSB2aXJ0dWFsIHRhYmxlIHdpbGwgYmUgZW1pdHRlZCBpbgorICAgICAgIG9ubHkgb25lIHRyYW5zbGF0aW9uIHVuaXQgd2lsbCBub3QgYmUgQ09NREFULiAgKi8KKyAgICBib29sICgqY2xhc3NfZGF0YV9hbHdheXNfY29tZGF0KSAodm9pZCk7CisgICAgLyogUmV0dXJucyB0cnVlICh0aGUgZGVmYXVsdCkgaWYgdGhlIFJUVEkgZm9yIHRoZSBiYXNpYyB0eXBlcywKKyAgICAgICB3aGljaCBpcyBhbHdheXMgZGVmaW5lZCBpbiB0aGUgQysrIHJ1bnRpbWUsIHNob3VsZCBiZSBDT01EQVQ7CisgICAgICAgZmFsc2UgaWYgaXQgc2hvdWxkIG5vdCBiZSBDT01EQVQuICAqLworICAgIGJvb2wgKCpsaWJyYXJ5X3J0dGlfY29tZGF0KSAodm9pZCk7CisgICAgLyogUmV0dXJucyB0cnVlIGlmIF9fYWVhYmlfYXRleGl0IHNob3VsZCBiZSB1c2VkIHRvIHJlZ2lzdGVyIHN0YXRpYworICAgICAgIGRlc3RydWN0b3JzLiAgKi8KKyAgICBib29sICgqdXNlX2FlYWJpX2F0ZXhpdCkgKHZvaWQpOworICAgIC8qIFJldHVybnMgdHJ1ZSBpZiB0YXJnZXQgbWF5IHVzZSBhdGV4aXQgaW4gdGhlIHNhbWUgbWFubmVyIGFzCisgICAgX19jeGFfYXRleGl0ICB0byByZWdpc3RlciBzdGF0aWMgZGVzdHJ1Y3RvcnMuICAqLworICAgIGJvb2wgKCp1c2VfYXRleGl0X2Zvcl9jeGFfYXRleGl0KSAodm9pZCk7CisgICAgLyogVFlQRSBpcyBhIEMrKyBjbGFzcyAoaS5lLiwgUkVDT1JEX1RZUEUgb3IgVU5JT05fVFlQRSkgdGhhdAorICAgICAgIGhhcyBqdXN0IGJlZW4gZGVmaW5lZC4gIFVzZSB0aGlzIGhvb2sgdG8gbWFrZSBhZGp1c3RtZW50cyB0byB0aGUKKyAgICAgICBjbGFzcyAgKGVnLCB0d2VhayB2aXNpYmlsaXR5IG9yIHBlcmZvcm0gYW55IG90aGVyIHJlcXVpcmVkCisgICAgICAgdGFyZ2V0IG1vZGlmaWNhdGlvbnMpLiAgKi8KKyAgICB2b2lkICgqYWRqdXN0X2NsYXNzX2F0X2RlZmluaXRpb24pICh0cmVlIHR5cGUpOworICB9IGN4eDsKKworICAvKiBGdW5jdGlvbnMgYW5kIGRhdGEgZm9yIGVtdWxhdGVkIFRMUyBzdXBwb3J0LiAgKi8KKyAgc3RydWN0IGVtdXRscyB7CisgICAgLyogTmFtZSBvZiB0aGUgYWRkcmVzcyBhbmQgY29tbW9uIGZ1bmN0aW9ucy4gICovCisgICAgY29uc3QgY2hhciAqZ2V0X2FkZHJlc3M7CisgICAgY29uc3QgY2hhciAqcmVnaXN0ZXJfY29tbW9uOworCisgICAgLyogUHJlZml4ZXMgZm9yIHByb3h5IHZhcmlhYmxlIGFuZCB0ZW1wbGF0ZS4gICovCisgICAgY29uc3QgY2hhciAqdmFyX3NlY3Rpb247CisgICAgY29uc3QgY2hhciAqdG1wbF9zZWN0aW9uOworCisgICAgLyogUHJlZml4ZXMgZm9yIHByb3h5IHZhcmlhYmxlIGFuZCB0ZW1wbGF0ZS4gICovCisgICAgY29uc3QgY2hhciAqdmFyX3ByZWZpeDsKKyAgICBjb25zdCBjaGFyICp0bXBsX3ByZWZpeDsKKworICAgIC8qIEZ1bmN0aW9uIHRvIGdlbmVyYXRlIGZpZWxkIGRlZmluaXRpb25zIG9mIHRoZSBwcm94eSB2YXJpYWJsZS4gICovCisgICAgdHJlZSAoKnZhcl9maWVsZHMpICh0cmVlLCB0cmVlICopOworCisgICAgLyogRnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSBhIHByb3h5IHZhcmlhYmxlLiAgKi8KKyAgICB0cmVlICgqdmFyX2luaXQpICh0cmVlLCB0cmVlLCB0cmVlKTsKKworICAgIC8qIFdoZXRoZXIgd2UgYXJlIGFsbG93ZWQgdG8gYWx0ZXIgdGhlIHVzdWFsIGFsaWdubWVudCBvZiB0aGUKKyAgICAgICBwcm94eSB2YXJpYWJsZS4gICovCisgICAgYm9vbCB2YXJfYWxpZ25fZml4ZWQ7CisKKyAgICAvKiBXaGV0aGVyIHdlIGNhbiBlbWl0IGRlYnVnIGluZm9ybWF0aW9uIGZvciBUTFMgdmFycy4gICovCisgICAgYm9vbCBkZWJ1Z19mb3JtX3Rsc19hZGRyZXNzOworICB9IGVtdXRsczsKKworICBzdHJ1Y3QgdGFyZ2V0X29wdGlvbl9ob29rcyB7CisgICAgLyogRnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIGF0dHJpYnV0ZSgob3B0aW9uKC4uLikpKSBzdHJpbmdzIG9yIE5VTEwuICBJZgorICAgICAgIHRoZSBvcHRpb24gaXMgdmFsaWRhdGVkLCBpdCBpcyBhc3N1bWVkIHRoYXQgREVDTF9GVU5DVElPTl9TUEVDSUZJQyB3aWxsCisgICAgICAgYmUgZmlsbGVkIGluIGluIHRoZSBmdW5jdGlvbiBkZWNsIG5vZGUuICAqLworICAgIGJvb2wgKCp2YWxpZF9hdHRyaWJ1dGVfcCkgKHRyZWUsIHRyZWUsIHRyZWUsIGludCk7CisKKyAgICAvKiBGdW5jdGlvbiB0byBzYXZlIGFueSBleHRyYSB0YXJnZXQgc3RhdGUgaW4gdGhlIHRhcmdldCBvcHRpb25zCisgICAgICAgc3RydWN0dXJlLiAgKi8KKyAgICB2b2lkICgqc2F2ZSkgKHN0cnVjdCBjbF90YXJnZXRfb3B0aW9uICopOworCisgICAgLyogRnVuY3Rpb24gdG8gcmVzdG9yZSBhbnkgZXh0cmEgdGFyZ2V0IHN0YXRlIGZyb20gdGhlIHRhcmdldCBvcHRpb25zCisgICAgICAgc3RydWN0dXJlLiAgKi8KKyAgICB2b2lkICgqcmVzdG9yZSkgKHN0cnVjdCBjbF90YXJnZXRfb3B0aW9uICopOworCisgICAgLyogRnVuY3Rpb24gdG8gcHJpbnQgYW55IGV4dHJhIHRhcmdldCBzdGF0ZSBmcm9tIHRoZSB0YXJnZXQgb3B0aW9ucworICAgICAgIHN0cnVjdHVyZS4gICovCisgICAgdm9pZCAoKnByaW50KSAoRklMRSAqLCBpbnQsIHN0cnVjdCBjbF90YXJnZXRfb3B0aW9uICopOworCisgICAgLyogRnVuY3Rpb24gdG8gcGFyc2UgYXJndW1lbnRzIHRvIGJlIHZhbGlkYXRlZCBmb3IgI3ByYWdtYSBvcHRpb24sIGFuZCB0bworICAgICAgIGNoYW5nZSB0aGUgc3RhdGUgaWYgdGhlIG9wdGlvbnMgYXJlIHZhbGlkLiAgSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzCisgICAgICAgTlVMTCwgdGhlIHNlY29uZCBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGRlZmF1bHQgb3B0aW9ucyB0byB1c2UuICBSZXR1cm4KKyAgICAgICB0cnVlIGlmIHRoZSBvcHRpb25zIGFyZSB2YWxpZCwgYW5kIHNldCB0aGUgY3VycmVudCBzdGF0ZS4gICovCisgICAgYm9vbCAoKnByYWdtYV9wYXJzZSkgKHRyZWUsIHRyZWUpOworCisgICAgLyogRnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIG9uZSBmdW5jdGlvbiBjYW4gaW5saW5lIGFub3RoZXIgZnVuY3Rpb24uICAqLworICAgIGJvb2wgKCpjYW5faW5saW5lX3ApICh0cmVlLCB0cmVlKTsKKyAgfSB0YXJnZXRfb3B0aW9uOworCisgIC8qIEZvciB0YXJnZXRzIHRoYXQgbmVlZCB0byBtYXJrIGV4dHJhIHJlZ2lzdGVycyBhcyBsaXZlIG9uIGVudHJ5IHRvCisgICAgIHRoZSBmdW5jdGlvbiwgdGhleSBzaG91bGQgZGVmaW5lIHRoaXMgdGFyZ2V0IGhvb2sgYW5kIHNldCB0aGVpcgorICAgICBiaXRzIGluIHRoZSBiaXRtYXAgcGFzc2VkIGluLiAqLworICB2b2lkICgqbGl2ZV9vbl9lbnRyeSkgKGJpdG1hcCk7CisKKyAgLyogVHJ1ZSBpZiB1bndpbmRpbmcgdGFibGVzIHNob3VsZCBiZSBnZW5lcmF0ZWQgYnkgZGVmYXVsdC4gICovCisgIGJvb2wgdW53aW5kX3RhYmxlc19kZWZhdWx0OworCisgIC8qIExlYXZlIHRoZSBib29sZWFuIGZpZWxkcyBhdCB0aGUgZW5kLiAgKi8KKworICAvKiBUcnVlIGlmIGFyYml0cmFyeSBzZWN0aW9ucyBhcmUgc3VwcG9ydGVkLiAgKi8KKyAgYm9vbCBoYXZlX25hbWVkX3NlY3Rpb25zOworCisgIC8qIFRydWUgaWYgd2UgY2FuIGNyZWF0ZSB6ZXJvZWQgZGF0YSBieSBzd2l0Y2hpbmcgdG8gYSBCU1Mgc2VjdGlvbgorICAgICBhbmQgdGhlbiB1c2luZyBBU01fT1VUUFVUX1NLSVAgdG8gYWxsb2NhdGUgdGhlIHNwYWNlLiAgKi8KKyAgYm9vbCBoYXZlX3N3aXRjaGFibGVfYnNzX3NlY3Rpb25zOworCisgIC8qIFRydWUgaWYgIm5hdGl2ZSIgY29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycyBhcmUgc3VwcG9ydGVkLAorICAgICBmYWxzZSBpZiB3ZSdyZSB1c2luZyBjb2xsZWN0MiBmb3IgdGhlIGpvYi4gICovCisgIGJvb2wgaGF2ZV9jdG9yc19kdG9yczsKKworICAvKiBUcnVlIGlmIHRocmVhZC1sb2NhbCBzdG9yYWdlIGlzIHN1cHBvcnRlZC4gICovCisgIGJvb2wgaGF2ZV90bHM7CisKKyAgLyogVHJ1ZSBpZiBhIHNtYWxsIHJlYWRvbmx5IGRhdGEgc2VjdGlvbiBpcyBzdXBwb3J0ZWQuICAqLworICBib29sIGhhdmVfc3JvZGF0YV9zZWN0aW9uOworCisgIC8qIFRydWUgaWYgRUggZnJhbWUgaW5mbyBzZWN0aW9ucyBzaG91bGQgYmUgemVyby10ZXJtaW5hdGVkLiAgKi8KKyAgYm9vbCB0ZXJtaW5hdGVfZHcyX2VoX2ZyYW1lX2luZm87CisKKyAgLyogVHJ1ZSBpZiAjTk9fQVBQIHNob3VsZCBiZSBlbWl0dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YKKyAgICAgYXNzZW1ibHkgb3V0cHV0LiAgKi8KKyAgYm9vbCBmaWxlX3N0YXJ0X2FwcF9vZmY7CisKKyAgLyogVHJ1ZSBpZiBvdXRwdXRfZmlsZV9kaXJlY3RpdmUgc2hvdWxkIGJlIGNhbGxlZCBmb3IgbWFpbl9pbnB1dF9maWxlbmFtZQorICAgICBhdCB0aGUgYmVnaW5uaW5nIG9mIGFzc2VtYmx5IG91dHB1dC4gICovCisgIGJvb2wgZmlsZV9zdGFydF9maWxlX2RpcmVjdGl2ZTsKKworICAvKiBUcnVlIGlmICNwcmFnbWEgZXh0ZXJuX3ByZWZpeCBpcyB0byBiZSBzdXBwb3J0ZWQuICAqLworICBib29sIGhhbmRsZV9wcmFnbWFfZXh0ZXJuX3ByZWZpeDsKKworICAvKiBUcnVlIGlmIHRoZSB0YXJnZXQgaXMgYWxsb3dlZCB0byByZW9yZGVyIG1lbW9yeSBhY2Nlc3NlcyB1bmxlc3MKKyAgICAgc3luY2hyb25pemF0aW9uIGlzIGV4cGxpY2l0bHkgcmVxdWVzdGVkLiAgKi8KKyAgYm9vbCByZWxheGVkX29yZGVyaW5nOworCisgIC8qIFJldHVybnMgdHJ1ZSBpZiB3ZSBzaG91bGQgZ2VuZXJhdGUgZXhjZXB0aW9uIHRhYmxlcyBmb3IgdXNlIHdpdGggdGhlCisgICAgIEFSTSBFQUJJLiAgVGhlIGVmZmVjdHMgdGhlIGVuY29kaW5nIG9mIGZ1bmN0aW9uIGV4Y2VwdGlvbiBzcGVjaWZpY2F0aW9ucy4KKyAgICovCisgIGJvb2wgYXJtX2VhYmlfdW53aW5kZXI7CisKKyAgLyogTGVhdmUgdGhlIGJvb2xlYW4gZmllbGRzIGF0IHRoZSBlbmQuICAqLworfTsKKworZXh0ZXJuIHN0cnVjdCBnY2NfdGFyZ2V0IHRhcmdldG07CisKK3N0cnVjdCBnY2NfdGFyZ2V0Y20geworICAvKiBIYW5kbGUgdGFyZ2V0IHN3aXRjaCBDT0RFIChhbiBPUFRfKiB2YWx1ZSkuICBBUkcgaXMgdGhlIGFyZ3VtZW50CisgICAgIHBhc3NlZCB0byB0aGUgc3dpdGNoOyBpdCBpcyBOVUxMIGlmIG5vIGFyZ3VtZW50IHdhcy4gIFZBTFVFIGlzIHRoZQorICAgICB2YWx1ZSBvZiBBUkcgaWYgQ09ERSBzcGVjaWZpZXMgYSBVSW50ZWdlciBvcHRpb24sIG90aGVyd2lzZSBpdCBpcworICAgICAxIGlmIHRoZSBwb3NpdGl2ZSBmb3JtIG9mIHRoZSBzd2l0Y2ggd2FzIHVzZWQgYW5kIDAgaWYgdGhlIG5lZ2F0aXZlCisgICAgIGZvcm0gd2FzLiAgUmV0dXJuIHRydWUgaWYgdGhlIHN3aXRjaCB3YXMgdmFsaWQuICAqLworICBib29sICgqaGFuZGxlX2Nfb3B0aW9uKSAoc2l6ZV90IGNvZGUsIGNvbnN0IGNoYXIgKmFyZywgaW50IHZhbHVlKTsKK307CisKKy8qIEVhY2ggdGFyZ2V0IGNhbiBwcm92aWRlIHRoZWlyIG93bi4gICovCitleHRlcm4gc3RydWN0IGdjY190YXJnZXRjbSB0YXJnZXRjbTsKKworI2VuZGlmIC8qIEdDQ19UQVJHRVRfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3RpbWV2YXIuZGVmIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3RpbWV2YXIuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYjg1M2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdGltZXZhci5kZWYKQEAgLTAsMCArMSwyMTggQEAKKy8qIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRpbWluZyB2YXJpYWJsZXMgdXNlZCB0bworICAgbWVhc3VyZSBydW4tdGltZSBwZXJmb3JtYW5jZSBvZiB0aGUgY29tcGlsZXIuCisgICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgQWxleCBTYW11ZWwgPHNhbXVlbEBjb2Rlc291cmNlcnkuY29tPgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKKyAgIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRpbWluZyB2YXJpYWJsZSBkZWZpbml0aW9ucywgdXNlZCBieSB0aW1ldmFyLmgKKyAgIGFuZCB0aW1ldmFyLmMuCisKKyAgIFN5bnRheDoKKworICAgICBERUZUSU1FVkFSIChpZCwgbmFtZSkKKworICAgd2hlcmUgSUQgaXMgdGhlIGVudW1lcmFsIHZhbHVlIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHRpbWluZworICAgdmFyaWFibGUsIGFuZCBOQU1FIGlzIGEgY2hhcmFjdGVyIHN0cmluZyBkZXNjcmliaW5nIGl0cyBwdXJwb3NlLiAgKi8KKworLyogVGhlIHRvdGFsIGV4ZWN1dGlvbiB0aW1lLiAgKi8KK0RFRlRJTUVWQVIgKFRWX1RPVEFMICAgICAgICAgICAgICAgICAsICJ0b3RhbCB0aW1lIikKKworLyogVGltZSBzcGVudCBnYXJiYWdlLWNvbGxlY3RpbmcuICAqLworREVGVElNRVZBUiAoVFZfR0MgICAgICAgICAgICAgICAgICAgICwgImdhcmJhZ2UgY29sbGVjdGlvbiIpCisKKy8qIFRpbWUgc3BlbnQgZ2VuZXJhdGluZyBkdW1wIGZpbGVzLiAgKi8KK0RFRlRJTUVWQVIgKFRWX0RVTVAgICAgICAgICAgICAgICAgICAsICJkdW1wIGZpbGVzIikKKworREVGVElNRVZBUiAoVFZfQ0dSQVBIICAgICAgICAgICAgICAgICwgImNhbGxncmFwaCBjb25zdHJ1Y3Rpb24iKQorREVGVElNRVZBUiAoVFZfQ0dSQVBIT1BUICAgICAgICAgICAgICwgImNhbGxncmFwaCBvcHRpbWl6YXRpb24iKQorREVGVElNRVZBUiAoVFZfSVBBX0NPTlNUQU5UX1BST1AgICAgICwgImlwYSBjcCIpCitERUZUSU1FVkFSIChUVl9JUEFfTFRPX0dJTVBMRV9JTyAgICAgLCAiaXBhIGx0byBnaW1wbGUgSS9PIikKK0RFRlRJTUVWQVIgKFRWX0lQQV9MVE9fREVDTF9JTyAgICAgICAsICJpcGEgbHRvIGRlY2wgSS9PIikKK0RFRlRJTUVWQVIgKFRWX0lQQV9MVE9fQ0dSQVBIX0lPICAgICAsICJpcGEgbHRvIGNncmFwaCBJL08iKQorREVGVElNRVZBUiAoVFZfTFRPICAgICAgICAgICAgICAgICAgICwgImx0byIpCitERUZUSU1FVkFSIChUVl9XSE9QUl9XUEEgICAgICAgICAgICAgLCAid2hvcHIgd3BhIikKK0RFRlRJTUVWQVIgKFRWX1dIT1BSX1dQQV9JTyAgICAgICAgICAsICJ3aG9wciB3cGEgSS9PIikKK0RFRlRJTUVWQVIgKFRWX1dIT1BSX0xUUkFOUyAgICAgICAgICAsICJ3aG9wciBsdHJhbnMiKQorREVGVElNRVZBUiAoVFZfV0hPUFJfV1BBX0ZJWFVQICAgICAgICwgIndob3ByIHdwYSBmaXh1cCIpCitERUZUSU1FVkFSIChUVl9XSE9QUl9XUEFfTFRSQU5TX0VYRUMgLCAid2hvcHIgd3BhLT5sdHJhbnMiKQorREVGVElNRVZBUiAoVFZfSVBBX1JFRkVSRU5DRSAgICAgICAgICwgImlwYSByZWZlcmVuY2UiKQorREVGVElNRVZBUiAoVFZfSVBBX1BVUkVfQ09OU1QgICAgICAgICwgImlwYSBwdXJlIGNvbnN0IikKK0RFRlRJTUVWQVIgKFRWX0lQQV9UWVBFX0VTQ0FQRSAgICAgICAsICJpcGEgdHlwZSBlc2NhcGUiKQorREVGVElNRVZBUiAoVFZfSVBBX1BUQSAgICAgICAgICAgICAgICwgImlwYSBwb2ludHMtdG8iKQorREVGVElNRVZBUiAoVFZfSVBBX1NSQSAgICAgICAgICAgICAgICwgImlwYSBTUkEiKQorREVGVElNRVZBUiAoVFZfSVBBX0ZSRUVfTEFOR19EQVRBICAgICwgImlwYSBmcmVlIGxhbmcgZGF0YSIpCisvKiBUaW1lIHNwZW50IGJ5IGNvbnN0cnVjdGluZyBDRkcuICAqLworREVGVElNRVZBUiAoVFZfQ0ZHICAgICAgICAgICAgICAgICAgICwgImNmZyBjb25zdHJ1Y3Rpb24iKQorLyogVGltZSBzcGVudCBieSBjbGVhbmluZyB1cCBDRkcuICAqLworREVGVElNRVZBUiAoVFZfQ0xFQU5VUF9DRkcgICAgICAgICAgICwgImNmZyBjbGVhbnVwIikKK0RFRlRJTUVWQVIgKFRWX0NGR19WRVJJRlkgICAgICAgICAgICAsICJDRkcgdmVyaWZpZXIiKQorREVGVElNRVZBUiAoVFZfREVMRVRFX1RSSVZJQUxMWV9ERUFEICwgInRyaXZpYWxseSBkZWFkIGNvZGUiKQorLyogVGltZSBzcGVudCBieSBsaWZlIGFuYWx5c2lzLiAgKi8KK0RFRlRJTUVWQVIgKFRWX0xJRkUJCSAgICAgLCAibGlmZSBhbmFseXNpcyIpCitERUZUSU1FVkFSIChUVl9MSUZFX1VQREFURQkgICAgICwgImxpZmUgaW5mbyB1cGRhdGUiKQorCisvKiBUaW1lIHNwZW50IGluIGRhdGFmbG93IHByb2JsZW1zLiAgKi8KK0RFRlRJTUVWQVIgKFRWX0RGX1NDQU4JCSAgICAgLCAiZGYgc2NhbiBpbnNucyIpCitERUZUSU1FVkFSIChUVl9ERl9NRAkJICAgICAsICJkZiBtdWx0aXBsZSBkZWZzIikKK0RFRlRJTUVWQVIgKFRWX0RGX1JECQkgICAgICwgImRmIHJlYWNoaW5nIGRlZnMiKQorREVGVElNRVZBUiAoVFZfREZfTFIJCSAgICAgLCAiZGYgbGl2ZSByZWdzIikKK0RFRlRJTUVWQVIgKFRWX0RGX0xJVkUJCSAgICAgLCAiZGYgbGl2ZSZpbml0aWFsaXplZCByZWdzIikKK0RFRlRJTUVWQVIgKFRWX0RGX1VSRUMJCSAgICAgLCAiZGYgdW5pbml0aWFsaXplZCByZWdzIDIiKQorREVGVElNRVZBUiAoVFZfREZfQ0hBSU4JCSAgICAgLCAiZGYgdXNlLWRlZiAvIGRlZi11c2UgY2hhaW5zIikKK0RFRlRJTUVWQVIgKFRWX0RGX0JZVEVfTFIJICAgICAsICJkZiBsaXZlIGJ5dGUgcmVncyIpCitERUZUSU1FVkFSIChUVl9ERl9OT1RFCQkgICAgICwgImRmIHJlZyBkZWFkL3VudXNlZCBub3RlcyIpCitERUZUSU1FVkFSIChUVl9SRUdfU1RBVFMJICAgICAsICJyZWdpc3RlciBpbmZvcm1hdGlvbiIpCisKK0RFRlRJTUVWQVIgKFRWX0FMSUFTX0FOQUxZU0lTCSAgICAgLCAiYWxpYXMgYW5hbHlzaXMiKQorREVGVElNRVZBUiAoVFZfQUxJQVNfU1RNVF9XQUxLCSAgICAgLCAiYWxpYXMgc3RtdCB3YWxraW5nIikKK0RFRlRJTUVWQVIgKFRWX1JFR19TQ0FOCQkgICAgICwgInJlZ2lzdGVyIHNjYW4iKQorREVGVElNRVZBUiAoVFZfUkVCVUlMRF9KVU1QCSAgICAgLCAicmVidWlsZCBqdW1wIGxhYmVscyIpCisvKiBUaW1pbmcgaW4gdmFyaW91cyBzdGFnZXMgb2YgdGhlIGNvbXBpbGVyLiAgKi8KK0RFRlRJTUVWQVIgKFRWX0NQUAkJICAgICAsICJwcmVwcm9jZXNzaW5nIikKK0RFRlRJTUVWQVIgKFRWX0xFWAkJICAgICAsICJsZXhpY2FsIGFuYWx5c2lzIikKK0RFRlRJTUVWQVIgKFRWX1BBUlNFICAgICAgICAgICAgICAgICAsICJwYXJzZXIiKQorREVGVElNRVZBUiAoVFZfTkFNRV9MT09LVVAgICAgICAgICAgICwgIm5hbWUgbG9va3VwIikKK0RFRlRJTUVWQVIgKFRWX0lOTElORV9IRVVSSVNUSUNTICAgICAsICJpbmxpbmUgaGV1cmlzdGljcyIpCitERUZUSU1FVkFSIChUVl9JTlRFR1JBVElPTiAgICAgICAgICAgLCAiaW50ZWdyYXRpb24iKQorREVGVElNRVZBUiAoVFZfVFJFRV9HSU1QTElGWQkgICAgICwgInRyZWUgZ2ltcGxpZnkiKQorREVGVElNRVZBUiAoVFZfVFJFRV9FSAkJICAgICAsICJ0cmVlIGVoIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfQ0ZHCQkgICAgICwgInRyZWUgQ0ZHIGNvbnN0cnVjdGlvbiIpCitERUZUSU1FVkFSIChUVl9UUkVFX0NMRUFOVVBfQ0ZHCSAgICAgLCAidHJlZSBDRkcgY2xlYW51cCIpCitERUZUSU1FVkFSIChUVl9UUkVFX1ZSUCAgICAgICAgICAgICAgLCAidHJlZSBWUlAiKQorREVGVElNRVZBUiAoVFZfVFJFRV9DT1BZX1BST1AgICAgICAgICwgInRyZWUgY29weSBwcm9wYWdhdGlvbiIpCitERUZUSU1FVkFSIChUVl9UUkVFX1NUT1JFX0NPUFlfUFJPUCAgLCAidHJlZSBzdG9yZSBjb3B5IHByb3AiKQorREVGVElNRVZBUiAoVFZfRklORF9SRUZFUkVOQ0VEX1ZBUlMgICwgInRyZWUgZmluZCByZWYuIHZhcnMiKQorREVGVElNRVZBUiAoVFZfVFJFRV9QVEEJCSAgICAgLCAidHJlZSBQVEEiKQorREVGVElNRVZBUiAoVFZfVFJFRV9JTlNFUlRfUEhJX05PREVTICwgInRyZWUgUEhJIGluc2VydGlvbiIpCitERUZUSU1FVkFSIChUVl9UUkVFX1NTQV9SRVdSSVRFX0JMT0NLUywgInRyZWUgU1NBIHJld3JpdGUiKQorREVGVElNRVZBUiAoVFZfVFJFRV9TU0FfT1RIRVIJICAgICAsICJ0cmVlIFNTQSBvdGhlciIpCitERUZUSU1FVkFSIChUVl9UUkVFX1NTQV9JTkNSRU1FTlRBTCAgLCAidHJlZSBTU0EgaW5jcmVtZW50YWwiKQorREVGVElNRVZBUiAoVFZfVFJFRV9PUFMJICAgICAgICAgICAgICwgInRyZWUgb3BlcmFuZCBzY2FuIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfU1NBX0RPTUlOQVRPUl9PUFRTICAgLCAiZG9taW5hdG9yIG9wdGltaXphdGlvbiIpCitERUZUSU1FVkFSIChUVl9UUkVFX1NSQSAgICAgICAgICAgICAgLCAidHJlZSBTUkEiKQorREVGVElNRVZBUiAoVFZfVFJFRV9TVE9SRV9DQ1AJICAgICAsICJ0cmVlIFNUT1JFLUNDUCIpCitERUZUSU1FVkFSIChUVl9UUkVFX0NDUAkJICAgICAsICJ0cmVlIENDUCIpCitERUZUSU1FVkFSIChUVl9UUkVFX1BISV9DUFJPUAkgICAgICwgInRyZWUgUEhJIGNvbnN0L2NvcHkgcHJvcCIpCitERUZUSU1FVkFSIChUVl9UUkVFX1NQTElUX0VER0VTICAgICAgLCAidHJlZSBzcGxpdCBjcml0IGVkZ2VzIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfUkVBU1NPQyAgICAgICAgICAsICJ0cmVlIHJlYXNzb2NpYXRpb24iKQorREVGVElNRVZBUiAoVFZfVFJFRV9QUkUJCSAgICAgLCAidHJlZSBQUkUiKQorREVGVElNRVZBUiAoVFZfVFJFRV9SRURQSEkJICAgICAsICJ0cmVlIHJlZHVuZGFudCBQSElzIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfRlJFCQkgICAgICwgInRyZWUgRlJFIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfU0lOSyAgICAgICAgICAgICAsICJ0cmVlIGNvZGUgc2lua2luZyIpCitERUZUSU1FVkFSIChUVl9UUkVFX1BISU9QVAkgICAgICwgInRyZWUgbGluZWFyaXplIHBoaXMiKQorREVGVElNRVZBUiAoVFZfVFJFRV9GT1JXUFJPUAkgICAgICwgInRyZWUgZm9yd2FyZCBwcm9wYWdhdGUiKQorREVGVElNRVZBUiAoVFZfVFJFRV9QSElQUk9QCSAgICAgLCAidHJlZSBwaGlwcm9wIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfRENFCQkgICAgICwgInRyZWUgY29uc2VydmF0aXZlIERDRSIpCitERUZUSU1FVkFSIChUVl9UUkVFX0NEX0RDRQkgICAgICwgInRyZWUgYWdncmVzc2l2ZSBEQ0UiKQorREVGVElNRVZBUiAoVFZfVFJFRV9DQUxMX0NEQ0UJICAgICAsICJ0cmVlIGJ1aWxkaW4gY2FsbCBEQ0UiKQorREVGVElNRVZBUiAoVFZfVFJFRV9EU0UJCSAgICAgLCAidHJlZSBEU0UiKQorREVGVElNRVZBUiAoVFZfVFJFRV9NRVJHRV9QSEkJICAgICAsICJQSEkgbWVyZ2UiKQorREVGVElNRVZBUiAoVFZfVFJFRV9MT09QCSAgICAgLCAidHJlZSBsb29wIG9wdGltaXphdGlvbiIpCitERUZUSU1FVkFSIChUVl9UUkVFX0xPT1BfQk9VTkRTCSAgICAgLCAidHJlZSBsb29wIGJvdW5kcyIpCitERUZUSU1FVkFSIChUVl9MSU0gICAgICAgICAgICAgICAgICAgLCAidHJlZSBsb29wIGludmFyaWFudCBtb3Rpb24iKQorREVGVElNRVZBUiAoVFZfVFJFRV9MT09QX0lWQ0FOT04gICAgICwgInRyZWUgY2Fub25pY2FsIGl2IikKK0RFRlRJTUVWQVIgKFRWX1NDRVZfQ09OU1QgICAgICAgICAgICAsICJzY2V2IGNvbnN0YW50IHByb3AiKQorREVGVElNRVZBUiAoVFZfVFJFRV9MT09QX1VOU1dJVENIICAgICwgInRyZWUgbG9vcCB1bnN3aXRjaGluZyIpCitERUZUSU1FVkFSIChUVl9DT01QTEVURV9VTlJPTEwgICAgICAgLCAiY29tcGxldGUgdW5yb2xsaW5nIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfUEFSQUxMRUxJWkVfTE9PUFMsICJ0cmVlIHBhcmFsbGVsaXplIGxvb3BzIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfVkVDVE9SSVpBVElPTiAgICAsICJ0cmVlIHZlY3Rvcml6YXRpb24iKQorREVGVElNRVZBUiAoVFZfVFJFRV9TTFBfVkVDVE9SSVpBVElPTiwgInRyZWUgc2xwIHZlY3Rvcml6YXRpb24iKQorREVGVElNRVZBUiAoVFZfR1JBUEhJVEVfVFJBTlNGT1JNUyAgICwgIkdyYXBoaXRlIGxvb3AgdHJhbnNmb3JtcyIpCitERUZUSU1FVkFSIChUVl9HUkFQSElURV9EQVRBX0RFUFMgICAgLCAiR3JhcGhpdGUgZGF0YSBkZXAgYW5hbHlzaXMiKQorREVGVElNRVZBUiAoVFZfR1JBUEhJVEVfQ09ERV9HRU4gICAgICwgIkdyYXBoaXRlIGNvZGUgZ2VuZXJhdGlvbiIpCitERUZUSU1FVkFSIChUVl9UUkVFX0xJTkVBUl9UUkFOU0ZPUk0gLCAidHJlZSBsb29wIGxpbmVhciIpCitERUZUSU1FVkFSIChUVl9UUkVFX0xPT1BfRElTVFJJQlVUSU9OLCAidHJlZSBsb29wIGRpc3RyaWJ1dGlvbiIpCitERUZUSU1FVkFSIChUVl9DSEVDS19EQVRBX0RFUFMgICAgICAgLCAidHJlZSBjaGVjayBkYXRhIGRlcGVuZGVuY2VzIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfUFJFRkVUQ0gJICAgICAsICJ0cmVlIHByZWZldGNoaW5nIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfTE9PUF9JVk9QVFMJICAgICAsICJ0cmVlIGl2IG9wdGltaXphdGlvbiIpCitERUZUSU1FVkFSIChUVl9QUkVEQ09NCQkgICAgICwgInByZWRpY3RpdmUgY29tbW9uaW5nIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfTE9PUF9JTklUCSAgICAgLCAidHJlZSBsb29wIGluaXQiKQorREVGVElNRVZBUiAoVFZfVFJFRV9MT09QX0ZJTkkJICAgICAsICJ0cmVlIGxvb3AgZmluaSIpCitERUZUSU1FVkFSIChUVl9UUkVFX0NICQkgICAgICwgInRyZWUgY29weSBoZWFkZXJzIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfU1NBX1VOQ1BST1AJICAgICAsICJ0cmVlIFNTQSB1bmNwcm9wIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfU1NBX1RPX05PUk1BTCAgICAsICJ0cmVlIFNTQSB0byBub3JtYWwiKQorREVGVElNRVZBUiAoVFZfVFJFRV9OUlYJCSAgICAgLCAidHJlZSBOUlYgb3B0aW1pemF0aW9uIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfQ09QWV9SRU5BTUUJICAgICAsICJ0cmVlIHJlbmFtZSBTU0EgY29waWVzIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfU1NBX1ZFUklGWSAgICAgICAsICJ0cmVlIFNTQSB2ZXJpZmllciIpCitERUZUSU1FVkFSIChUVl9UUkVFX1NUTVRfVkVSSUZZICAgICAgLCAidHJlZSBTVE1UIHZlcmlmaWVyIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfU1dJVENIX0NPTlZFUlNJT04sICJ0cmVlIHN3aXRjaCBpbml0aWFsaXphdGlvbiBjb252ZXJzaW9uIikKK0RFRlRJTUVWQVIgKFRWX0NHUkFQSF9WRVJJRlkgICAgICAgICAsICJjYWxsZ3JhcGggdmVyaWZpZXIiKQorREVGVElNRVZBUiAoVFZfRE9NX0ZST05USUVSUyAgICAgICAgICwgImRvbWluYW5jZSBmcm9udGllcnMiKQorREVGVElNRVZBUiAoVFZfRE9NSU5BTkNFICAgICAgICAgICAgICwgImRvbWluYW5jZSBjb21wdXRhdGlvbiIpCitERUZUSU1FVkFSIChUVl9DT05UUk9MX0RFUEVOREVOQ0VTICAgLCAiY29udHJvbCBkZXBlbmRlbmNlcyIpCitERUZUSU1FVkFSIChUVl9PVkVSTE9BRCAgICAgICAgICAgICAgLCAib3ZlcmxvYWQgcmVzb2x1dGlvbiIpCitERUZUSU1FVkFSIChUVl9URU1QTEFURV9JTlNUQU5USUFUSU9OLCAidGVtcGxhdGUgaW5zdGFudGlhdGlvbiIpCitERUZUSU1FVkFSIChUVl9FWFBBTkQJCSAgICAgLCAiZXhwYW5kIikKK0RFRlRJTUVWQVIgKFRWX1ZBUkNPTlNUICAgICAgICAgICAgICAsICJ2YXJjb25zdCIpCitERUZUSU1FVkFSIChUVl9MT1dFUl9TVUJSRUcJICAgICAsICJsb3dlciBzdWJyZWciKQorREVGVElNRVZBUiAoVFZfSlVNUCAgICAgICAgICAgICAgICAgICwgImp1bXAiKQorREVGVElNRVZBUiAoVFZfRldQUk9QICAgICAgICAgICAgICAgICwgImZvcndhcmQgcHJvcCIpCitERUZUSU1FVkFSIChUVl9DU0UgICAgICAgICAgICAgICAgICAgLCAiQ1NFIikKK0RFRlRJTUVWQVIgKFRWX0RDRSAgICAgICAgICAgICAgICAgICAsICJkZWFkIGNvZGUgZWxpbWluYXRpb24iKQorREVGVElNRVZBUiAoVFZfRFNFMSAgICAgICAgICAgICAgICAgICwgImRlYWQgc3RvcmUgZWxpbTEiKQorREVGVElNRVZBUiAoVFZfRFNFMiAgICAgICAgICAgICAgICAgICwgImRlYWQgc3RvcmUgZWxpbTIiKQorREVGVElNRVZBUiAoVFZfTE9PUCAgICAgICAgICAgICAgICAgICwgImxvb3AgYW5hbHlzaXMiKQorREVGVElNRVZBUiAoVFZfTE9PUF9NT1ZFX0lOVkFSSUFOVFMgICwgImxvb3AgaW52YXJpYW50IG1vdGlvbiIpCitERUZUSU1FVkFSIChUVl9MT09QX1VOU1dJVENIICAgICAgICAgLCAibG9vcCB1bnN3aXRjaGluZyIpCitERUZUSU1FVkFSIChUVl9MT09QX1VOUk9MTCAgICAgICAgICAgLCAibG9vcCB1bnJvbGxpbmciKQorREVGVElNRVZBUiAoVFZfTE9PUF9ET0xPT1AgICAgICAgICAgICwgImxvb3AgZG9sb29wIikKK0RFRlRJTUVWQVIgKFRWX0NQUk9QICAgICAgICAgICAgICAgICAsICJDUFJPUCIpCitERUZUSU1FVkFSIChUVl9QUkUgICAgICAgICAgICAgICAgICAgLCAiUFJFIikKK0RFRlRJTUVWQVIgKFRWX0hPSVNUICAgICAgICAgICAgICAgICAsICJjb2RlIGhvaXN0aW5nIikKK0RFRlRJTUVWQVIgKFRWX0xTTSAgICAgICAgICAgICAgICAgICAsICJMU00iKQorREVGVElNRVZBUiAoVFZfVFJBQ0VSICAgICAgICAgICAgICAgICwgInRyYWNlciIpCitERUZUSU1FVkFSIChUVl9XRUIgICAgICAgICAgICAgICAgICAgLCAid2ViIikKK0RFRlRJTUVWQVIgKFRWX0FVVE9fSU5DX0RFQyAgICAgICAgICAsICJhdXRvIGluYyBkZWMiKQorREVGVElNRVZBUiAoVFZfQ1NFMiAgICAgICAgICAgICAgICAgICwgIkNTRSAyIikKK0RFRlRJTUVWQVIgKFRWX0JSQU5DSF9QUk9CICAgICAgICAgICAsICJicmFuY2ggcHJlZGljdGlvbiIpCitERUZUSU1FVkFSIChUVl9WUFQgICAgICAgICAgICAgICAgICAgLCAidmFsdWUgcHJvZmlsZSBvcHRzIikKK0RFRlRJTUVWQVIgKFRWX0NPTUJJTkUgICAgICAgICAgICAgICAsICJjb21iaW5lciIpCitERUZUSU1FVkFSIChUVl9JRkNWVAkJICAgICAsICJpZi1jb252ZXJzaW9uIikKK0RFRlRJTUVWQVIgKFRWX1JFR01PVkUgICAgICAgICAgICAgICAsICJyZWdtb3ZlIikKK0RFRlRJTUVWQVIgKFRWX01PREVfU1dJVENIICAgICAgICAgICAsICJtb2RlIHN3aXRjaGluZyIpCitERUZUSU1FVkFSIChUVl9TTVMJCSAgICAgLCAic21zIG1vZHVsbyBzY2hlZHVsaW5nIikKK0RFRlRJTUVWQVIgKFRWX1NDSEVEICAgICAgICAgICAgICAgICAsICJzY2hlZHVsaW5nIikKK0RFRlRJTUVWQVIgKFRWX0xPQ0FMX0FMTE9DICAgICAgICAgICAsICJsb2NhbCBhbGxvYyIpCitERUZUSU1FVkFSIChUVl9HTE9CQUxfQUxMT0MgICAgICAgICAgLCAiZ2xvYmFsIGFsbG9jIikKK0RFRlRJTUVWQVIgKFRWX0lSQQkgICAJICAgICAsICJpbnRlZ3JhdGVkIFJBIikKK0RFRlRJTUVWQVIgKFRWX1JFTE9BRAkgICAJICAgICAsICJyZWxvYWQiKQorREVGVElNRVZBUiAoVFZfUkVMT0FEX0NTRV9SRUdTICAgICAgICwgInJlbG9hZCBDU0UgcmVncyIpCitERUZUSU1FVkFSIChUVl9TRVFBQlNUUiAgICAgICAgICAgICAgLCAic2VxdWVuY2UgYWJzdHJhY3Rpb24iKQorREVGVElNRVZBUiAoVFZfR0NTRV9BRlRFUl9SRUxPQUQgICAgICAsICJsb2FkIENTRSBhZnRlciByZWxvYWQiKQorREVGVElNRVZBUiAoVFZfVEhSRUFEX1BST0xPR1VFX0FORF9FUElMT0dVRSwgInRocmVhZCBwcm8tICYgZXBpbG9ndWUiKQorREVGVElNRVZBUiAoVFZfSUZDVlQyCQkgICAgICwgImlmLWNvbnZlcnNpb24gMiIpCitERUZUSU1FVkFSIChUVl9DT01CSU5FX1NUQUNLX0FESlVTVCAgLCAiY29tYmluZSBzdGFjayBhZGp1c3RtZW50cyIpCitERUZUSU1FVkFSIChUVl9QRUVQSE9MRTIgICAgICAgICAgICAgLCAicGVlcGhvbGUgMiIpCitERUZUSU1FVkFSIChUVl9SRU5BTUVfUkVHSVNURVJTICAgICAgLCAicmVuYW1lIHJlZ2lzdGVycyIpCitERUZUSU1FVkFSIChUVl9DUFJPUF9SRUdJU1RFUlMgICAgICAgLCAiaGFyZCByZWcgY3Byb3AiKQorREVGVElNRVZBUiAoVFZfU0NIRUQyICAgICAgICAgICAgICAgICwgInNjaGVkdWxpbmcgMiIpCitERUZUSU1FVkFSIChUVl9NQUNIX0RFUCAgICAgICAgICAgICAgLCAibWFjaGluZSBkZXAgcmVvcmciKQorREVGVElNRVZBUiAoVFZfREJSX1NDSEVEICAgICAgICAgICAgICwgImRlbGF5IGJyYW5jaCBzY2hlZCIpCitERUZUSU1FVkFSIChUVl9SRU9SREVSX0JMT0NLUyAgICAgICAgLCAicmVvcmRlciBibG9ja3MiKQorREVGVElNRVZBUiAoVFZfU0hPUlRFTl9CUkFOQ0ggICAgICAgICwgInNob3J0ZW4gYnJhbmNoZXMiKQorREVGVElNRVZBUiAoVFZfUkVHX1NUQUNLICAgICAgICAgICAgICwgInJlZyBzdGFjayIpCitERUZUSU1FVkFSIChUVl9GSU5BTCAgICAgICAgICAgICAgICAgLCAiZmluYWwiKQorREVGVElNRVZBUiAoVFZfU1lNT1VUICAgICAgICAgICAgICAgICwgInN5bW91dCIpCitERUZUSU1FVkFSIChUVl9WQVJfVFJBQ0tJTkcgICAgICAgICAgLCAidmFyaWFibGUgdHJhY2tpbmciKQorREVGVElNRVZBUiAoVFZfVFJFRV9JRkNPTUJJTkUgICAgICAgICwgInRyZWUgaWYtY29tYmluZSIpCitERUZUSU1FVkFSIChUVl9QTFVHSU5fSU5JVCAgICAgICAgICAgLCAicGx1Z2luIGluaXRpYWxpemF0aW9uIikKK0RFRlRJTUVWQVIgKFRWX1BMVUdJTl9SVU4gICAgICAgICAgICAsICJwbHVnaW4gZXhlY3V0aW9uIikKKworLyogRXZlcnl0aGluZyBlbHNlIGluIHJlc3Rfb2ZfY29tcGlsYXRpb24gbm90IGluY2x1ZGVkIGFib3ZlLiAgKi8KK0RFRlRJTUVWQVIgKFRWX1JFU1RfT0ZfQ09NUElMQVRJT04gICAsICJyZXN0IG9mIGNvbXBpbGF0aW9uIikKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS90aW1ldmFyLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdGltZXZhci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNGNhYmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdGltZXZhci5oCkBAIC0wLDAgKzEsMTAyIEBACisvKiBUaW1pbmcgdmFyaWFibGVzIGZvciBtZWFzdXJpbmcgY29tcGlsZXIgcGVyZm9ybWFuY2UuCisgICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDkKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgQWxleCBTYW11ZWwgPHNhbXVlbEBjb2Rlc291cmNlcnkuY29tPgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKKyAgIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfVElNRVZBUl9ICisjZGVmaW5lIEdDQ19USU1FVkFSX0gKKworLyogVGltaW5nIHZhcmlhYmxlcyBhcmUgdXNlZCB0byBtZWFzdXJlIGVsYXBzZWQgdGltZSBpbiB2YXJpb3VzCisgICBwb3J0aW9ucyBvZiB0aGUgY29tcGlsZXIuICBFYWNoIG1lYXN1cmVzIGVsYXBzZWQgdXNlciwgc3lzdGVtLCBhbmQKKyAgIHdhbGwtY2xvY2sgdGltZSwgYXMgYXBwcm9wcmlhdGUgdG8gYW5kIHN1cHBvcnRlZCBieSB0aGUgaG9zdAorICAgc3lzdGVtLgorCisgICBUaW1pbmcgdmFyaWFibGVzIGFyZSBkZWZpbmVkIHVzaW5nIHRoZSBERUZUSU1FVkFSIG1hY3JvIGluCisgICB0aW1ldmFyLmRlZi4gIEVhY2ggaGFzIGFuIGVudW1lcmFsIGlkZW50aWZpZXIsIHVzZWQgd2hlbiByZWZlcnJpbmcKKyAgIHRvIHRoZSB0aW1pbmcgdmFyaWFibGUgaW4gY29kZSwgYW5kIGEgY2hhcmFjdGVyIHN0cmluZyBuYW1lLgorCisgICBUaW1pbmcgdmFyaWFibGVzIGNhbiBiZSB1c2VkIGluIHR3byB3YXlzOgorCisgICAgIC0gT24gdGhlIHRpbWluZyBzdGFjaywgdXNpbmcgdGltZXZhcl9wdXNoIGFuZCB0aW1ldmFyX3BvcC4KKyAgICAgICBUaW1pbmcgdmFyaWFibGVzIG1heSBiZSBwdXNoZWQgb250byB0aGUgc3RhY2s7IGVsYXBzZWQgdGltZSBpcworICAgICAgIGF0dHJpYnV0ZWQgdG8gdGhlIHRvcG1vc3QgdGltaW5nIHZhcmlhYmxlIG9uIHRoZSBzdGFjay4gIFdoZW4KKyAgICAgICBhbm90aGVyIHZhcmlhYmxlIGlzIHB1c2hlZCBvbiwgdGhlIHByZXZpb3VzIHRvcG1vc3QgdmFyaWFibGUgaXMKKyAgICAgICBgcGF1c2VkJyB1bnRpbCB0aGUgcHVzaGVkIHZhcmlhYmxlIGlzIHBvcHBlZCBiYWNrIG9mZi4KKworICAgICAtIEFzIGEgc3RhbmRhbG9uZSB0aW1lciwgdXNpbmcgdGltZXZhcl9zdGFydCBhbmQgdGltZXZhcl9zdG9wLgorICAgICAgIEFsbCB0aW1lIGVsYXBzZWQgYmV0d2VlbiB0aGUgdHdvIGNhbGxzIGlzIGF0dHJpYnV0ZWQgdG8gdGhlCisgICAgICAgdmFyaWFibGUuCisqLworCisvKiBUaGlzIHN0cnVjdHVyZSBzdG9yZXMgdGhlIHZhcmlvdXMgdmFyaWV0aWVzIG9mIHRpbWUgdGhhdCBjYW4gYmUKKyAgIG1lYXN1cmVkLiAgVGltZXMgYXJlIHN0b3JlZCBpbiBzZWNvbmRzLiAgVGhlIHRpbWUgbWF5IGJlIGFuCisgICBhYnNvbHV0ZSB0aW1lIG9yIGEgdGltZSBkaWZmZXJlbmNlOyBpbiB0aGUgZm9ybWVyIGNhc2UsIHRoZSB0aW1lCisgICBiYXNlIGlzIHVuZGVmaW5lZCwgZXhjZXB0IHRoYXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gdGltZXMKKyAgIHByb2R1Y2VzIGEgdmFsaWQgdGltZSBkaWZmZXJlbmNlLiAgKi8KKworc3RydWN0IHRpbWV2YXJfdGltZV9kZWYKK3sKKyAgLyogVXNlciB0aW1lIGluIHRoaXMgcHJvY2Vzcy4gICovCisgIGRvdWJsZSB1c2VyOworCisgIC8qIFN5c3RlbSB0aW1lIChpZiBhcHBsaWNhYmxlIGZvciB0aGlzIGhvc3QgcGxhdGZvcm0pIGluIHRoaXMKKyAgICAgcHJvY2Vzcy4gICovCisgIGRvdWJsZSBzeXM7CisKKyAgLyogV2FsbCBjbG9jayB0aW1lLiAgKi8KKyAgZG91YmxlIHdhbGw7CisKKyAgLyogR2FyYmFnZSBjb2xsZWN0b3IgbWVtb3J5LiAgKi8KKyAgdW5zaWduZWQgZ2djX21lbTsKK307CisKKy8qIEFuIGVudW1lcmF0aW9uIG9mIHRpbWluZyB2YXJpYWJsZSBpZGVudGlmaWVycy4gIENvbnN0cnVjdGVkIGZyb20KKyAgIHRoZSBjb250ZW50cyBvZiB0aW1ldmFyLmRlZi4gICovCisKKyNkZWZpbmUgREVGVElNRVZBUihpZGVudGlmaWVyX18sIG5hbWVfXykgXAorICAgIGlkZW50aWZpZXJfXywKK3R5cGVkZWYgZW51bQoreworICBUVl9OT05FLAorI2luY2x1ZGUgInRpbWV2YXIuZGVmIgorICBUSU1FVkFSX0xBU1QKK30KK3RpbWV2YXJfaWRfdDsKKyN1bmRlZiBERUZUSU1FVkFSCisKKy8qIEV4ZWN1dGUgdGhlIHNlcXVlbmNlOiB0aW1ldmFyX3BvcCAoVFYpLCByZXR1cm4gKEUpOyAgKi8KKyNkZWZpbmUgUE9QX1RJTUVWQVJfQU5EX1JFVFVSTihUViwgRSkgIGRvIHsgdGltZXZhcl9wb3AgKFRWKTsgcmV0dXJuIChFKTsgfXdoaWxlKDApCisjZGVmaW5lIHRpbWV2YXJfcG9wKFRWKSBkbyB7IGlmICh0aW1ldmFyX2VuYWJsZSkgdGltZXZhcl9wb3BfMSAoVFYpOyB9d2hpbGUoMCkKKyNkZWZpbmUgdGltZXZhcl9wdXNoKFRWKSBkbyB7IGlmICh0aW1ldmFyX2VuYWJsZSkgdGltZXZhcl9wdXNoXzEgKFRWKTsgfXdoaWxlKDApCisKK2V4dGVybiB2b2lkIHRpbWV2YXJfaW5pdCAodm9pZCk7CitleHRlcm4gdm9pZCB0aW1ldmFyX3B1c2hfMSAodGltZXZhcl9pZF90KTsKK2V4dGVybiB2b2lkIHRpbWV2YXJfcG9wXzEgKHRpbWV2YXJfaWRfdCk7CitleHRlcm4gdm9pZCB0aW1ldmFyX3N0YXJ0ICh0aW1ldmFyX2lkX3QpOworZXh0ZXJuIHZvaWQgdGltZXZhcl9zdG9wICh0aW1ldmFyX2lkX3QpOworZXh0ZXJuIHZvaWQgdGltZXZhcl9wcmludCAoRklMRSAqKTsKKworLyogUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICAqLworZXh0ZXJuIHZvaWQgcHJpbnRfdGltZSAoY29uc3QgY2hhciAqLCBsb25nKTsKKworZXh0ZXJuIGJvb2wgdGltZXZhcl9lbmFibGU7CisKK2V4dGVybiBzaXplX3QgdGltZXZhcl9nZ2NfbWVtX3RvdGFsOworCisjZW5kaWYgLyogISBHQ0NfVElNRVZBUl9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdG0tcHJlZHMuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS90bS1wcmVkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNGY0NmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdG0tcHJlZHMuaApAQCAtMCwwICsxLDE3MiBAQAorLyogR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHByb2dyYW0gJ2J1aWxkL2dlbnByZWRzJworICAgZnJvbSB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBmaWxlICcvdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvYnVpbGQvYnVpbGQtdG9vbGNoYWluLy5idWlsZC9zcmMvZ2NjLTQuNS4zL2djYy9jb25maWcvYXJtL2FybS5tZCcuICAqLworCisjaWZuZGVmIEdDQ19UTV9QUkVEU19ICisjZGVmaW5lIEdDQ19UTV9QUkVEU19ICisKKyNpZmRlZiBIQVZFX01BQ0hJTkVfTU9ERVMKK2V4dGVybiBpbnQgZ2VuZXJhbF9vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgYWRkcmVzc19vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgcmVnaXN0ZXJfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IHBtb2RlX3JlZ2lzdGVyX29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBzY3JhdGNoX29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBpbW1lZGlhdGVfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGNvbnN0X2ludF9vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgY29uc3RfZG91YmxlX29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBub25pbW1lZGlhdGVfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IG5vbm1lbW9yeV9vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgcHVzaF9vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgcG9wX29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBtZW1vcnlfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGluZGlyZWN0X29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBvcmRlcmVkX2NvbXBhcmlzb25fb3BlcmF0b3IgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBjb21wYXJpc29uX29wZXJhdG9yIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgc19yZWdpc3Rlcl9vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgYXJtX2hhcmRfcmVnaXN0ZXJfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGxvd19yZWdpc3Rlcl9vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgbG93X3JlZ19vcl9pbnRfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGFybV9nZW5lcmFsX3JlZ2lzdGVyX29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBmX3JlZ2lzdGVyX29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCB2ZnBfcmVnaXN0ZXJfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IHN1YnJlZ19sb3dwYXJ0X29wZXJhdG9yIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgcmVnX29yX2ludF9vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgYXJtX2ltbWVkaWF0ZV9vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgYXJtX25lZ19pbW1lZGlhdGVfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGFybV9ub3RfaW1tZWRpYXRlX29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBhcm1fcmhzX29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBhcm1fcmhzbV9vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgYXJtX2FkZF9vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgYXJtX2FkZGltbV9vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgYXJtX25vdF9vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgb2Zmc2V0dGFibGVfbWVtb3J5X29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBjYWxsX21lbW9yeV9vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgYXJtX3JlbG9hZF9tZW1vcnlfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGFybV9mbG9hdF9yaHNfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGFybV9mbG9hdF9hZGRfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IHZmcF9jb21wYXJlX29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBhcm1fZmxvYXRfY29tcGFyZV9vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgaW5kZXhfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IHNoaWZ0YWJsZV9vcGVyYXRvciAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGxvZ2ljYWxfYmluYXJ5X29wZXJhdG9yIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgc2hpZnRfb3BlcmF0b3IgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCB0aHVtYl8xNmJpdF9vcGVyYXRvciAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGVxdWFsaXR5X29wZXJhdG9yIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgYXJtX2NvbXBhcmlzb25fb3BlcmF0b3IgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBtaW5tYXhfb3BlcmF0b3IgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBjY19yZWdpc3RlciAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGRvbWluYW50X2NjX3JlZ2lzdGVyIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgYXJtX2V4dGVuZHFpc2lfbWVtX29wIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgYXJtX3JlZ19vcl9leHRlbmRxaXNpX21lbV9vcCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IHBvd2VyX29mX3R3b19vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgbm9uaW1tZWRpYXRlX2RpX29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBkaV9vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgbm9uaW1tZWRpYXRlX3NvZnRfZGZfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IHNvZnRfZGZfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGNvbnN0X3NoaWZ0X29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBsb2FkX211bHRpcGxlX29wZXJhdGlvbiAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IHN0b3JlX211bHRpcGxlX29wZXJhdGlvbiAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IG11bHRpX3JlZ2lzdGVyX3B1c2ggKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCB0aHVtYjFfY21wX29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCB0aHVtYjFfY21wbmVnX29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCB0aHVtYl9jYnJjaF90YXJnZXRfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGNpcnJ1c19yZWdpc3Rlcl9vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgY2lycnVzX2ZwX3JlZ2lzdGVyIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgY2lycnVzX3NoaWZ0X2NvbnN0IChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgY29uc3RfbXVsdGlwbGVfb2ZfOF9vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgaW1tX2Zvcl9uZW9uX21vdl9vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgaW1tX2Zvcl9uZW9uX2xvZ2ljX29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBpbW1fZm9yX25lb25faW52X2xvZ2ljX29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBuZW9uX2xvZ2ljX29wMiAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IG5lb25faW52X2xvZ2ljX29wMiAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IG5lb25fbGFuZV9udW1iZXIgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworI2VuZGlmIC8qIEhBVkVfTUFDSElORV9NT0RFUyAqLworCisjZGVmaW5lIENPTlNUUkFJTlRfTlVNX0RFRklORURfUCAxCitlbnVtIGNvbnN0cmFpbnRfbnVtCit7CisgIENPTlNUUkFJTlRfX1VOS05PV04gPSAwLAorICBDT05TVFJBSU5UX2YsCisgIENPTlNUUkFJTlRfdCwKKyAgQ09OU1RSQUlOVF92LAorICBDT05TVFJBSU5UX3csCisgIENPTlNUUkFJTlRfeCwKKyAgQ09OU1RSQUlOVF95LAorICBDT05TVFJBSU5UX3osCisgIENPTlNUUkFJTlRfbCwKKyAgQ09OU1RSQUlOVF9oLAorICBDT05TVFJBSU5UX2osCisgIENPTlNUUkFJTlRfaywKKyAgQ09OU1RSQUlOVF9iLAorICBDT05TVFJBSU5UX2MsCisgIENPTlNUUkFJTlRfSSwKKyAgQ09OU1RSQUlOVF9KLAorICBDT05TVFJBSU5UX0ssCisgIENPTlNUUkFJTlRfTCwKKyAgQ09OU1RSQUlOVF9NLAorICBDT05TVFJBSU5UX04sCisgIENPTlNUUkFJTlRfTywKKyAgQ09OU1RSQUlOVF9QYSwKKyAgQ09OU1RSQUlOVF9QYiwKKyAgQ09OU1RSQUlOVF9QcywKKyAgQ09OU1RSQUlOVF9QdCwKKyAgQ09OU1RSQUlOVF9HLAorICBDT05TVFJBSU5UX0gsCisgIENPTlNUUkFJTlRfRGEsCisgIENPTlNUUkFJTlRfRGIsCisgIENPTlNUUkFJTlRfRGMsCisgIENPTlNUUkFJTlRfRG4sCisgIENPTlNUUkFJTlRfRGwsCisgIENPTlNUUkFJTlRfREwsCisgIENPTlNUUkFJTlRfRHYsCisgIENPTlNUUkFJTlRfRHksCisgIENPTlNUUkFJTlRfVXQsCisgIENPTlNUUkFJTlRfVXYsCisgIENPTlNUUkFJTlRfVXksCisgIENPTlNUUkFJTlRfVW4sCisgIENPTlNUUkFJTlRfVW0sCisgIENPTlNUUkFJTlRfVXMsCisgIENPTlNUUkFJTlRfVXEsCisgIENPTlNUUkFJTlRfUSwKKyAgQ09OU1RSQUlOVF9fTElNSVQKK307CisKK2V4dGVybiBlbnVtIGNvbnN0cmFpbnRfbnVtIGxvb2t1cF9jb25zdHJhaW50IChjb25zdCBjaGFyICopOworZXh0ZXJuIGJvb2wgY29uc3RyYWludF9zYXRpc2ZpZWRfcCAocnR4LCBlbnVtIGNvbnN0cmFpbnRfbnVtKTsKKworc3RhdGljIGlubGluZSBzaXplX3QKK2luc25fY29uc3RyYWludF9sZW4gKGNoYXIgZmMsIGNvbnN0IGNoYXIgKnN0ciBBVFRSSUJVVEVfVU5VU0VEKQoreworICBzd2l0Y2ggKGZjKQorICAgIHsKKyAgICBjYXNlICdEJzogcmV0dXJuIDI7CisgICAgY2FzZSAnUCc6IHJldHVybiAyOworICAgIGNhc2UgJ1UnOiByZXR1cm4gMjsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgIHJldHVybiAxOworfQorCisjZGVmaW5lIENPTlNUUkFJTlRfTEVOKGNfLHNfKSBpbnNuX2NvbnN0cmFpbnRfbGVuIChjXyxzXykKKworZXh0ZXJuIGVudW0gcmVnX2NsYXNzIHJlZ2NsYXNzX2Zvcl9jb25zdHJhaW50IChlbnVtIGNvbnN0cmFpbnRfbnVtKTsKKyNkZWZpbmUgUkVHX0NMQVNTX0ZST01fQ09OU1RSQUlOVChjXyxzXykgXAorICAgIHJlZ2NsYXNzX2Zvcl9jb25zdHJhaW50IChsb29rdXBfY29uc3RyYWludCAoc18pKQorI2RlZmluZSBSRUdfQ0xBU1NfRk9SX0NPTlNUUkFJTlQoeF8pIFwKKyAgICByZWdjbGFzc19mb3JfY29uc3RyYWludCAoeF8pCisKK2V4dGVybiBib29sIGluc25fY29uc3RfaW50X29rX2Zvcl9jb25zdHJhaW50IChIT1NUX1dJREVfSU5ULCBlbnVtIGNvbnN0cmFpbnRfbnVtKTsKKyNkZWZpbmUgQ09OU1RfT0tfRk9SX0NPTlNUUkFJTlRfUCh2XyxjXyxzXykgXAorICAgIGluc25fY29uc3RfaW50X29rX2Zvcl9jb25zdHJhaW50ICh2XywgbG9va3VwX2NvbnN0cmFpbnQgKHNfKSkKKworI2RlZmluZSBDT05TVF9ET1VCTEVfT0tfRk9SX0NPTlNUUkFJTlRfUCh2XyxjXyxzXykgXAorICAgIGNvbnN0cmFpbnRfc2F0aXNmaWVkX3AgKHZfLCBsb29rdXBfY29uc3RyYWludCAoc18pKQorCisjZGVmaW5lIEVYVFJBX0NPTlNUUkFJTlRfU1RSKHZfLGNfLHNfKSBcCisgICAgY29uc3RyYWludF9zYXRpc2ZpZWRfcCAodl8sIGxvb2t1cF9jb25zdHJhaW50IChzXykpCisKK2V4dGVybiBib29sIGluc25fZXh0cmFfbWVtb3J5X2NvbnN0cmFpbnQgKGVudW0gY29uc3RyYWludF9udW0pOworI2RlZmluZSBFWFRSQV9NRU1PUllfQ09OU1RSQUlOVChjXyxzXykgaW5zbl9leHRyYV9tZW1vcnlfY29uc3RyYWludCAobG9va3VwX2NvbnN0cmFpbnQgKHNfKSkKKworI2RlZmluZSBFWFRSQV9BRERSRVNTX0NPTlNUUkFJTlQoY18sc18pIGZhbHNlCisKKyNlbmRpZiAvKiB0bS1wcmVkcy5oICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdG0uaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS90bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNGQ3ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdG0uaApAQCAtMCwwICsxLDI2IEBACisjaWZuZGVmIEdDQ19UTV9ICisjZGVmaW5lIEdDQ19UTV9ICisjZGVmaW5lIFRBUkdFVF9DUFVfREVGQVVMVCAoVEFSR0VUX0NQVV9nZW5lcmljKQorI2lmbmRlZiBVQ0xJQkNfREVGQVVMVAorIyBkZWZpbmUgVUNMSUJDX0RFRkFVTFQgMAorI2VuZGlmCisjaWZkZWYgSU5fR0NDCisjIGluY2x1ZGUgIm9wdGlvbnMuaCIKKyMgaW5jbHVkZSAiY29uZmlnL2RieGVsZi5oIgorIyBpbmNsdWRlICJjb25maWcvZWxmb3MuaCIKKyMgaW5jbHVkZSAiY29uZmlnL2xpbnV4LmgiCisjIGluY2x1ZGUgImNvbmZpZy9nbGliYy1zdGRpbnQuaCIKKyMgaW5jbHVkZSAiY29uZmlnL2FybS9lbGYuaCIKKyMgaW5jbHVkZSAiY29uZmlnL2FybS9saW51eC1nYXMuaCIKKyMgaW5jbHVkZSAiY29uZmlnL2FybS9saW51eC1lbGYuaCIKKyMgaW5jbHVkZSAiY29uZmlnL2FybS9icGFiaS5oIgorIyBpbmNsdWRlICJjb25maWcvYXJtL2xpbnV4LWVhYmkuaCIKKyMgaW5jbHVkZSAiY29uZmlnL2FybS9hb3V0LmgiCisjIGluY2x1ZGUgImNvbmZpZy9hcm0vYXJtLmgiCisjIGluY2x1ZGUgImRlZmF1bHRzLmgiCisjZW5kaWYKKyNpZiBkZWZpbmVkIElOX0dDQyAmJiAhZGVmaW5lZCBHRU5FUkFUT1JfRklMRSAmJiAhZGVmaW5lZCBVU0VEX0ZPUl9UQVJHRVQKKyMgaW5jbHVkZSAiaW5zbi1jb25zdGFudHMuaCIKKyMgaW5jbHVkZSAiaW5zbi1mbGFncy5oIgorI2VuZGlmCisjZW5kaWYgLyogR0NDX1RNX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS90bV9wLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdG1fcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNTdmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdG1fcC5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBHQ0NfVE1fUF9ICisjZGVmaW5lIEdDQ19UTV9QX0gKKyNpZmRlZiBJTl9HQ0MKKyMgaW5jbHVkZSAiY29uZmlnL2FybS9hcm0tcHJvdG9zLmgiCisjIGluY2x1ZGUgInRtLXByZWRzLmgiCisjZW5kaWYKKyNlbmRpZiAvKiBHQ0NfVE1fUF9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdG9wbGV2LmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdG9wbGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIyYTI5MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS90b3BsZXYuaApAQCAtMCwwICsxLDIyNiBAQAorLyogdG9wbGV2LmggLSBWYXJpb3VzIGRlY2xhcmF0aW9ucyBmb3IgZnVuY3Rpb25zIGZvdW5kIGluIHRvcGxldi5jCisgICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsCisgICAyMDA4LCAyMDA5LCAyMDEwCisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX1RPUExFVl9ICisjZGVmaW5lIEdDQ19UT1BMRVZfSAorI2luY2x1ZGUgImlucHV0LmgiCisjaW5jbHVkZSAiYnZlcnNpb24uaCIKKworLyogSWYgbm9uLU5VTEwsIHJldHVybiBvbmUgcGFzdC10aGUtZW5kIG9mIHRoZSBtYXRjaGluZyBTVUJQQVJUIG9mCisgICB0aGUgV0hPTEUgc3RyaW5nLiAgKi8KKyNkZWZpbmUgc2tpcF9sZWFkaW5nX3N1YnN0cmluZyh3aG9sZSwgIHBhcnQpIFwKKyAgIChzdHJuY21wICh3aG9sZSwgcGFydCwgc3RybGVuIChwYXJ0KSkgPyBOVUxMIDogd2hvbGUgKyBzdHJsZW4gKHBhcnQpKQorCitleHRlcm4gaW50IHRvcGxldl9tYWluIChpbnQsIGNoYXIgKiopOworZXh0ZXJuIGludCByZWFkX2ludGVncmFsX3BhcmFtZXRlciAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGludCk7CitleHRlcm4gdm9pZCBzdHJpcF9vZmZfZW5kaW5nIChjaGFyICosIGludCk7CitleHRlcm4gY29uc3QgY2hhciAqdHJpbV9maWxlbmFtZSAoY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIF9mYXRhbF9pbnNuX25vdF9mb3VuZCAoY29uc3RfcnR4LCBjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKQorICAgICBBVFRSSUJVVEVfTk9SRVRVUk47CitleHRlcm4gdm9pZCBfZmF0YWxfaW5zbiAoY29uc3QgY2hhciAqLCBjb25zdF9ydHgsIGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICopCisgICAgIEFUVFJJQlVURV9OT1JFVFVSTjsKKworI2RlZmluZSBmYXRhbF9pbnNuKG1zZ2lkLCBpbnNuKSBcCisJX2ZhdGFsX2luc24gKG1zZ2lkLCBpbnNuLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXykKKyNkZWZpbmUgZmF0YWxfaW5zbl9ub3RfZm91bmQoaW5zbikgXAorCV9mYXRhbF9pbnNuX25vdF9mb3VuZCAoaW5zbiwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pCisKKy8qIElmIHdlIGhhdmVuJ3QgYWxyZWFkeSBkZWZpbmVkIGEgZnJvbnRlbmQgc3BlY2lmaWMgZGlhZ25vc3RpY3MKKyAgIHN0eWxlLCB1c2UgdGhlIGdlbmVyaWMgb25lLiAgKi8KKyNpZm5kZWYgR0NDX0RJQUdfU1RZTEUKKyNkZWZpbmUgR0NDX0RJQUdfU1RZTEUgX19nY2NfdGRpYWdfXworI2VuZGlmCisvKiBOb25lIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3VpdGFibGUgZm9yIEFUVFJJQlVURV9QUklOVEYsIGJlY2F1c2UKKyAgIGVhY2ggbGFuZ3VhZ2UgZnJvbnQgZW5kIGNhbiBleHRlbmQgdGhlbSB3aXRoIGl0cyBvd24gc2V0IG9mIGZvcm1hdAorICAgc3BlY2lmaWVycy4gIFdlIG11c3QgdXNlIGN1c3RvbSBmb3JtYXQgY2hlY2tzLiAgKi8KKyNpZiAoRU5BQkxFX0NIRUNLSU5HICYmIEdDQ19WRVJTSU9OID49IDQwMDEpIHx8IEdDQ19WRVJTSU9OID09IEJVSUxESU5HX0dDQ19WRVJTSU9OCisjZGVmaW5lIEFUVFJJQlVURV9HQ0NfRElBRyhtLCBuKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoR0NDX0RJQUdfU1RZTEUsIG0sIG4pKSkgQVRUUklCVVRFX05PTk5VTEwobSkKKyNlbHNlCisjZGVmaW5lIEFUVFJJQlVURV9HQ0NfRElBRyhtLCBuKSBBVFRSSUJVVEVfTk9OTlVMTChtKQorI2VuZGlmCitleHRlcm4gdm9pZCBpbnRlcm5hbF9lcnJvciAoY29uc3QgY2hhciAqLCAuLi4pIEFUVFJJQlVURV9HQ0NfRElBRygxLDIpCisgICAgIEFUVFJJQlVURV9OT1JFVFVSTjsKKy8qIFBhc3Mgb25lIG9mIHRoZSBPUFRfVyogZnJvbSBvcHRpb25zLmggYXMgdGhlIGZpcnN0IHBhcmFtZXRlci4gICovCitleHRlcm4gYm9vbCB3YXJuaW5nIChpbnQsIGNvbnN0IGNoYXIgKiwgLi4uKSBBVFRSSUJVVEVfR0NDX0RJQUcoMiwzKTsKK2V4dGVybiBib29sIHdhcm5pbmdfYXQgKGxvY2F0aW9uX3QsIGludCwgY29uc3QgY2hhciAqLCAuLi4pCisgICAgQVRUUklCVVRFX0dDQ19ESUFHKDMsNCk7CitleHRlcm4gdm9pZCBlcnJvciAoY29uc3QgY2hhciAqLCAuLi4pIEFUVFJJQlVURV9HQ0NfRElBRygxLDIpOworZXh0ZXJuIHZvaWQgZXJyb3JfbiAobG9jYXRpb25fdCwgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKQorICAgIEFUVFJJQlVURV9HQ0NfRElBRygzLDUpIEFUVFJJQlVURV9HQ0NfRElBRyg0LDUpOworZXh0ZXJuIHZvaWQgZXJyb3JfYXQgKGxvY2F0aW9uX3QsIGNvbnN0IGNoYXIgKiwgLi4uKSBBVFRSSUJVVEVfR0NDX0RJQUcoMiwzKTsKK2V4dGVybiB2b2lkIGZhdGFsX2Vycm9yIChjb25zdCBjaGFyICosIC4uLikgQVRUUklCVVRFX0dDQ19ESUFHKDEsMikKKyAgICAgQVRUUklCVVRFX05PUkVUVVJOOworLyogUGFzcyBvbmUgb2YgdGhlIE9QVF9XKiBmcm9tIG9wdGlvbnMuaCBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlci4gICovCitleHRlcm4gYm9vbCBwZWR3YXJuIChsb2NhdGlvbl90LCBpbnQsIGNvbnN0IGNoYXIgKiwgLi4uKQorICAgICBBVFRSSUJVVEVfR0NDX0RJQUcoMyw0KTsKK2V4dGVybiBib29sIHBlcm1lcnJvciAobG9jYXRpb25fdCwgY29uc3QgY2hhciAqLCAuLi4pIEFUVFJJQlVURV9HQ0NfRElBRygyLDMpOworZXh0ZXJuIHZvaWQgc29ycnkgKGNvbnN0IGNoYXIgKiwgLi4uKSBBVFRSSUJVVEVfR0NDX0RJQUcoMSwyKTsKK2V4dGVybiB2b2lkIGluZm9ybSAobG9jYXRpb25fdCwgY29uc3QgY2hhciAqLCAuLi4pIEFUVFJJQlVURV9HQ0NfRElBRygyLDMpOworZXh0ZXJuIHZvaWQgaW5mb3JtX24gKGxvY2F0aW9uX3QsIGludCwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikKKyAgICBBVFRSSUJVVEVfR0NDX0RJQUcoMyw1KSBBVFRSSUJVVEVfR0NDX0RJQUcoNCw1KTsKK2V4dGVybiB2b2lkIHZlcmJhdGltIChjb25zdCBjaGFyICosIC4uLikgQVRUUklCVVRFX0dDQ19ESUFHKDEsMik7CisKK2V4dGVybiB2b2lkIHJlc3Rfb2ZfZGVjbF9jb21waWxhdGlvbiAodHJlZSwgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgcmVzdF9vZl90eXBlX2NvbXBpbGF0aW9uICh0cmVlLCBpbnQpOworZXh0ZXJuIHZvaWQgdHJlZV9yZXN0X29mX2NvbXBpbGF0aW9uICh0cmVlKTsKK2V4dGVybiB2b2lkIGluaXRfb3B0aW1pemF0aW9uX3Bhc3NlcyAodm9pZCk7CitleHRlcm4gdm9pZCBmaW5pc2hfb3B0aW1pemF0aW9uX3Bhc3NlcyAodm9pZCk7CitleHRlcm4gYm9vbCBlbmFibGVfcnRsX2R1bXBfZmlsZSAodm9pZCk7CisKK2V4dGVybiB2b2lkIGFubm91bmNlX2Z1bmN0aW9uICh0cmVlKTsKKworZXh0ZXJuIHZvaWQgZXJyb3JfZm9yX2FzbSAoY29uc3RfcnR4LCBjb25zdCBjaGFyICosIC4uLikgQVRUUklCVVRFX0dDQ19ESUFHKDIsMyk7CitleHRlcm4gdm9pZCB3YXJuaW5nX2Zvcl9hc20gKGNvbnN0X3J0eCwgY29uc3QgY2hhciAqLCAuLi4pIEFUVFJJQlVURV9HQ0NfRElBRygyLDMpOworZXh0ZXJuIHZvaWQgd2Fybl9kZXByZWNhdGVkX3VzZSAodHJlZSwgdHJlZSk7CitleHRlcm4gYm9vbCBwYXJzZV9vcHRpbWl6ZV9vcHRpb25zICh0cmVlLCBib29sKTsKKworI2lmZGVmIEJVRlNJWgorZXh0ZXJuIHZvaWQgb3V0cHV0X3F1b3RlZF9zdHJpbmcJKEZJTEUgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIG91dHB1dF9maWxlX2RpcmVjdGl2ZQkoRklMRSAqLCBjb25zdCBjaGFyICopOworI2VuZGlmCisKKyNpZmRlZiBCVUZTSVoKKyAgLyogTi5CLiBVbmxpa2UgYWxsIHRoZSBvdGhlcnMsIGZub3RpY2UgaXMganVzdCBnZXR0ZXh0K2ZwcmludGYsIGFuZAorICAgICB0aGVyZWZvcmUgaXQgY2FuIGhhdmUgQVRUUklCVVRFX1BSSU5URi4gICovCitleHRlcm4gdm9pZCBmbm90aWNlCQkJKEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pCisgICAgIEFUVFJJQlVURV9QUklOVEZfMjsKKyNlbmRpZgorCitleHRlcm4gdm9pZCB3cmFwdXBfZ2xvYmFsX2RlY2xhcmF0aW9uXzEgKHRyZWUpOworZXh0ZXJuIGJvb2wgd3JhcHVwX2dsb2JhbF9kZWNsYXJhdGlvbl8yICh0cmVlKTsKK2V4dGVybiBib29sIHdyYXB1cF9nbG9iYWxfZGVjbGFyYXRpb25zICh0cmVlICosIGludCk7CitleHRlcm4gdm9pZCBjaGVja19nbG9iYWxfZGVjbGFyYXRpb25fMSAodHJlZSk7CitleHRlcm4gdm9pZCBjaGVja19nbG9iYWxfZGVjbGFyYXRpb25zICh0cmVlICosIGludCk7CitleHRlcm4gdm9pZCBlbWl0X2RlYnVnX2dsb2JhbF9kZWNsYXJhdGlvbnMgKHRyZWUgKiwgaW50KTsKK2V4dGVybiB2b2lkIHdyaXRlX2dsb2JhbF9kZWNsYXJhdGlvbnMgKHZvaWQpOworCitleHRlcm4gdm9pZCBkdW1wX21lbW9yeV9yZXBvcnQgKGJvb2wpOworCitleHRlcm4gdm9pZCB0YXJnZXRfcmVpbml0ICh2b2lkKTsKKworLyogQSB1bmlxdWUgbG9jYWwgdGltZSBzdGFtcCwgbWlnaHQgYmUgemVybyBpZiBub25lIGlzIGF2YWlsYWJsZS4gICovCitleHRlcm4gdW5zaWduZWQgbG9jYWxfdGljazsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKnByb2duYW1lOworZXh0ZXJuIGNvbnN0IGNoYXIgKmR1bXBfYmFzZV9uYW1lOworZXh0ZXJuIGNvbnN0IGNoYXIgKmR1bXBfZGlyX25hbWU7CitleHRlcm4gY29uc3QgY2hhciAqYXV4X2Jhc2VfbmFtZTsKK2V4dGVybiBjb25zdCBjaGFyICphdXhfaW5mb19maWxlX25hbWU7CitleHRlcm4gY29uc3QgY2hhciAqcHJvZmlsZV9kYXRhX3ByZWZpeDsKK2V4dGVybiBjb25zdCBjaGFyICphc21fZmlsZV9uYW1lOworZXh0ZXJuIGJvb2wgZXhpdF9hZnRlcl9vcHRpb25zOworCisvKiBUcnVlIGlmIHRoZSB1c2VyIGhhcyB0YWdnZWQgdGhlIGZ1bmN0aW9uIHdpdGggdGhlICdzZWN0aW9uJworICAgYXR0cmlidXRlLiAgKi8KKworZXh0ZXJuIGJvb2wgdXNlcl9kZWZpbmVkX3NlY3Rpb25fYXR0cmlidXRlOworCisvKiBTZWUgdG9wbGV2LmMuICAqLworZXh0ZXJuIGludCBmbGFnX2Nyb3NzanVtcGluZzsKK2V4dGVybiBpbnQgZmxhZ19pZl9jb252ZXJzaW9uOworZXh0ZXJuIGludCBmbGFnX2lmX2NvbnZlcnNpb24yOworZXh0ZXJuIGludCBmbGFnX2tlZXBfc3RhdGljX2NvbnN0czsKK2V4dGVybiBpbnQgZmxhZ19wZWVsX2xvb3BzOworZXh0ZXJuIGludCBmbGFnX3JlcnVuX2NzZV9hZnRlcl9nbG9iYWxfb3B0czsKK2V4dGVybiBpbnQgZmxhZ19yZXJ1bl9jc2VfYWZ0ZXJfbG9vcDsKK2V4dGVybiBpbnQgZmxhZ190aHJlYWRfanVtcHM7CitleHRlcm4gaW50IGZsYWdfdHJhY2VyOworZXh0ZXJuIGludCBmbGFnX3Vucm9sbF9sb29wczsKK2V4dGVybiBpbnQgZmxhZ191bnJvbGxfYWxsX2xvb3BzOworZXh0ZXJuIGludCBmbGFnX3Vuc3dpdGNoX2xvb3BzOworZXh0ZXJuIGludCBmbGFnX2Nwcm9wX3JlZ2lzdGVyczsKK2V4dGVybiBpbnQgdGltZV9yZXBvcnQ7CitleHRlcm4gaW50IGZsYWdfaXJhX2xvb3BfcHJlc3N1cmU7CitleHRlcm4gaW50IGZsYWdfaXJhX2NvYWxlc2NlOworZXh0ZXJuIGludCBmbGFnX2lyYV9tb3ZlX3NwaWxsczsKK2V4dGVybiBpbnQgZmxhZ19pcmFfc2hhcmVfc2F2ZV9zbG90czsKK2V4dGVybiBpbnQgZmxhZ19pcmFfc2hhcmVfc3BpbGxfc2xvdHM7CisKKy8qIFRoaW5ncyB0byBkbyB3aXRoIHRhcmdldCBzd2l0Y2hlcy4gICovCitleHRlcm4gdm9pZCBwcmludF92ZXJzaW9uIChGSUxFICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9pZCAqIGRlZmF1bHRfZ2V0X3BjaF92YWxpZGl0eSAoc2l6ZV90ICopOworZXh0ZXJuIGNvbnN0IGNoYXIgKiBkZWZhdWx0X3BjaF92YWxpZF9wIChjb25zdCB2b2lkICosIHNpemVfdCk7CisKKy8qIFRoZSBoYXNodGFibGUsIHNvIHRoYXQgdGhlIEMgZnJvbnQgZW5kcyBjYW4gcGFzcyBpdCB0byBjcHBsaWIuICAqLworZXh0ZXJuIHN0cnVjdCBodCAqaWRlbnRfaGFzaDsKKworLyogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBieSB0YXJnZXRzIHRvIHNldCB0aGUgZmxhZ3Mgb3JpZ2luYWxseQorICAgIGltcGxpZWQgYnkgLWZmYXN0LW1hdGggYW5kIC1mbm8tZmFzdC1tYXRoLiAgKi8KKworZXh0ZXJuIHZvaWQgc2V0X2Zhc3RfbWF0aF9mbGFncyAgICAgICAgIChpbnQpOworCitleHRlcm4gdm9pZCBzZXRfdW5zYWZlX21hdGhfb3B0aW1pemF0aW9uc19mbGFncyAoaW50KTsKKworLyogSGFuZGxlIC1kIHN3aXRjaC4gICovCitleHRlcm4gdm9pZCBkZWNvZGVfZF9vcHRpb24JCShjb25zdCBjaGFyICopOworCisvKiBSZXR1cm4gdHJ1ZSBpZmYgZmxhZ3MgYXJlIHNldCBhcyBpZiAtZmZhc3QtbWF0aC4gICovCitleHRlcm4gYm9vbCBmYXN0X21hdGhfZmxhZ3Nfc2V0X3AJKHZvaWQpOworZXh0ZXJuIGJvb2wgZmFzdF9tYXRoX2ZsYWdzX3N0cnVjdF9zZXRfcCAoc3RydWN0IGNsX29wdGltaXphdGlvbiAqKTsKKworLyogSW5saW5lIHZlcnNpb25zIG9mIHRoZSBhYm92ZSBmb3Igc3BlZWQuICAqLworI2lmIEdDQ19WRVJTSU9OIDwgMzAwNAorCisvKiBSZXR1cm4gbG9nMiwgb3IgLTEgaWYgbm90IGV4YWN0LiAgKi8KK2V4dGVybiBpbnQgZXhhY3RfbG9nMiAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKTsKKworLyogUmV0dXJuIGZsb29yIG9mIGxvZzIsIHdpdGggLTEgZm9yIHplcm8uICAqLworZXh0ZXJuIGludCBmbG9vcl9sb2cyICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpOworCisjZWxzZSAvKiBHQ0NfVkVSU0lPTiA+PSAzMDA0ICovCisKKyMgaWYgSE9TVF9CSVRTX1BFUl9XSURFX0lOVCA9PSBIT1NUX0JJVFNfUEVSX0xPTkcKKyMgIGRlZmluZSBDTFpfSFdJIF9fYnVpbHRpbl9jbHpsCisjICBkZWZpbmUgQ1RaX0hXSSBfX2J1aWx0aW5fY3R6bAorIyBlbGlmIEhPU1RfQklUU19QRVJfV0lERV9JTlQgPT0gSE9TVF9CSVRTX1BFUl9MT05HTE9ORworIyAgZGVmaW5lIENMWl9IV0kgX19idWlsdGluX2NsemxsCisjICBkZWZpbmUgQ1RaX0hXSSBfX2J1aWx0aW5fY3R6bGwKKyMgZWxzZQorIyAgZGVmaW5lIENMWl9IV0kgX19idWlsdGluX2NsegorIyAgZGVmaW5lIENUWl9IV0kgX19idWlsdGluX2N0egorIyBlbmRpZgorCitzdGF0aWMgaW5saW5lIGludAorZmxvb3JfbG9nMiAodW5zaWduZWQgSE9TVF9XSURFX0lOVCB4KQoreworICByZXR1cm4geCA/IEhPU1RfQklUU19QRVJfV0lERV9JTlQgLSAxIC0gKGludCkgQ0xaX0hXSSAoeCkgOiAtMTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2V4YWN0X2xvZzIgKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgeCkKK3sKKyAgcmV0dXJuIHggPT0gKHggJiAteCkgJiYgeCA/IChpbnQpIENUWl9IV0kgKHgpIDogLTE7Cit9CisKKyNlbmRpZiAvKiBHQ0NfVkVSU0lPTiA+PSAzMDA0ICovCisKKy8qIEZ1bmN0aW9ucyB1c2VkIHRvIGdldCBhbmQgc2V0IEdDQydzIG5vdGlvbiBvZiBpbiB3aGF0IGRpcmVjdG9yeQorICAgY29tcGlsYXRpb24gd2FzIHN0YXJ0ZWQuICAqLworCitleHRlcm4gY29uc3QgY2hhciAqZ2V0X3NyY19wd2QJICAgICAgICh2b2lkKTsKK2V4dGVybiBib29sIHNldF9zcmNfcHdkCQkgICAgICAgKGNvbnN0IGNoYXIgKik7CisKKy8qIEZ1bmN0aW9ucyB1c2VkIHRvIG1hbmlwdWxhdGUgdGhlIHJhbmRvbSBzZWVkLiAgKi8KKworZXh0ZXJuIGNvbnN0IGNoYXIgKmdldF9yYW5kb21fc2VlZCAoYm9vbCk7CitleHRlcm4gY29uc3QgY2hhciAqc2V0X3JhbmRvbV9zZWVkIChjb25zdCBjaGFyICopOworCisjZW5kaWYgLyogISBHQ0NfVE9QTEVWX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS90cmVlLWNoZWNrLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS1jaGVjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMDVmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS1jaGVjay5oCkBAIC0wLDAgKzEsMjg4IEBACisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIHVzaW5nIGdlbmNoZWNrLiBEbyBub3QgZWRpdC4gKi8KKworI2lmbmRlZiBHQ0NfVFJFRV9DSEVDS19ICisjZGVmaW5lIEdDQ19UUkVFX0NIRUNLX0gKKworI2RlZmluZSBFUlJPUl9NQVJLX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEVSUk9SX01BUkspCisjZGVmaW5lIElERU5USUZJRVJfTk9ERV9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBJREVOVElGSUVSX05PREUpCisjZGVmaW5lIFRSRUVfTElTVF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBUUkVFX0xJU1QpCisjZGVmaW5lIFRSRUVfVkVDX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRSRUVfVkVDKQorI2RlZmluZSBCTE9DS19DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBCTE9DSykKKyNkZWZpbmUgT0ZGU0VUX1RZUEVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgT0ZGU0VUX1RZUEUpCisjZGVmaW5lIEVOVU1FUkFMX1RZUEVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgRU5VTUVSQUxfVFlQRSkKKyNkZWZpbmUgQk9PTEVBTl9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEJPT0xFQU5fVFlQRSkKKyNkZWZpbmUgSU5URUdFUl9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIElOVEVHRVJfVFlQRSkKKyNkZWZpbmUgUkVBTF9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFJFQUxfVFlQRSkKKyNkZWZpbmUgUE9JTlRFUl9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFBPSU5URVJfVFlQRSkKKyNkZWZpbmUgRklYRURfUE9JTlRfVFlQRV9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBGSVhFRF9QT0lOVF9UWVBFKQorI2RlZmluZSBSRUZFUkVOQ0VfVFlQRV9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBSRUZFUkVOQ0VfVFlQRSkKKyNkZWZpbmUgQ09NUExFWF9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIENPTVBMRVhfVFlQRSkKKyNkZWZpbmUgVkVDVE9SX1RZUEVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVkVDVE9SX1RZUEUpCisjZGVmaW5lIEFSUkFZX1RZUEVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQVJSQVlfVFlQRSkKKyNkZWZpbmUgUkVDT1JEX1RZUEVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgUkVDT1JEX1RZUEUpCisjZGVmaW5lIFVOSU9OX1RZUEVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVU5JT05fVFlQRSkKKyNkZWZpbmUgUVVBTF9VTklPTl9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFFVQUxfVU5JT05fVFlQRSkKKyNkZWZpbmUgVk9JRF9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFZPSURfVFlQRSkKKyNkZWZpbmUgRlVOQ1RJT05fVFlQRV9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBGVU5DVElPTl9UWVBFKQorI2RlZmluZSBNRVRIT0RfVFlQRV9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBNRVRIT0RfVFlQRSkKKyNkZWZpbmUgTEFOR19UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIExBTkdfVFlQRSkKKyNkZWZpbmUgSU5URUdFUl9DU1RfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgSU5URUdFUl9DU1QpCisjZGVmaW5lIFJFQUxfQ1NUX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFJFQUxfQ1NUKQorI2RlZmluZSBGSVhFRF9DU1RfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgRklYRURfQ1NUKQorI2RlZmluZSBDT01QTEVYX0NTVF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBDT01QTEVYX0NTVCkKKyNkZWZpbmUgVkVDVE9SX0NTVF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBWRUNUT1JfQ1NUKQorI2RlZmluZSBTVFJJTkdfQ1NUX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFNUUklOR19DU1QpCisjZGVmaW5lIEZVTkNUSU9OX0RFQ0xfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgRlVOQ1RJT05fREVDTCkKKyNkZWZpbmUgTEFCRUxfREVDTF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBMQUJFTF9ERUNMKQorI2RlZmluZSBGSUVMRF9ERUNMX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEZJRUxEX0RFQ0wpCisjZGVmaW5lIFZBUl9ERUNMX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFZBUl9ERUNMKQorI2RlZmluZSBDT05TVF9ERUNMX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIENPTlNUX0RFQ0wpCisjZGVmaW5lIFBBUk1fREVDTF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBQQVJNX0RFQ0wpCisjZGVmaW5lIFRZUEVfREVDTF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBUWVBFX0RFQ0wpCisjZGVmaW5lIFJFU1VMVF9ERUNMX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFJFU1VMVF9ERUNMKQorI2RlZmluZSBERUJVR19FWFBSX0RFQ0xfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgREVCVUdfRVhQUl9ERUNMKQorI2RlZmluZSBOQU1FU1BBQ0VfREVDTF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBOQU1FU1BBQ0VfREVDTCkKKyNkZWZpbmUgSU1QT1JURURfREVDTF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBJTVBPUlRFRF9ERUNMKQorI2RlZmluZSBUUkFOU0xBVElPTl9VTklUX0RFQ0xfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVFJBTlNMQVRJT05fVU5JVF9ERUNMKQorI2RlZmluZSBDT01QT05FTlRfUkVGX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIENPTVBPTkVOVF9SRUYpCisjZGVmaW5lIEJJVF9GSUVMRF9SRUZfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQklUX0ZJRUxEX1JFRikKKyNkZWZpbmUgUkVBTFBBUlRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBSRUFMUEFSVF9FWFBSKQorI2RlZmluZSBJTUFHUEFSVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIElNQUdQQVJUX0VYUFIpCisjZGVmaW5lIEFSUkFZX1JFRl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBBUlJBWV9SRUYpCisjZGVmaW5lIEFSUkFZX1JBTkdFX1JFRl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBBUlJBWV9SQU5HRV9SRUYpCisjZGVmaW5lIElORElSRUNUX1JFRl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBJTkRJUkVDVF9SRUYpCisjZGVmaW5lIEFMSUdOX0lORElSRUNUX1JFRl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBBTElHTl9JTkRJUkVDVF9SRUYpCisjZGVmaW5lIE1JU0FMSUdORURfSU5ESVJFQ1RfUkVGX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIE1JU0FMSUdORURfSU5ESVJFQ1RfUkVGKQorI2RlZmluZSBPQkpfVFlQRV9SRUZfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgT0JKX1RZUEVfUkVGKQorI2RlZmluZSBDT05TVFJVQ1RPUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBDT05TVFJVQ1RPUikKKyNkZWZpbmUgQ09NUE9VTkRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBDT01QT1VORF9FWFBSKQorI2RlZmluZSBNT0RJRllfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBNT0RJRllfRVhQUikKKyNkZWZpbmUgSU5JVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIElOSVRfRVhQUikKKyNkZWZpbmUgVEFSR0VUX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVEFSR0VUX0VYUFIpCisjZGVmaW5lIENPTkRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBDT05EX0VYUFIpCisjZGVmaW5lIFZFQ19DT05EX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVkVDX0NPTkRfRVhQUikKKyNkZWZpbmUgQklORF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEJJTkRfRVhQUikKKyNkZWZpbmUgQ0FMTF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIENBTExfRVhQUikKKyNkZWZpbmUgV0lUSF9DTEVBTlVQX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgV0lUSF9DTEVBTlVQX0VYUFIpCisjZGVmaW5lIENMRUFOVVBfUE9JTlRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBDTEVBTlVQX1BPSU5UX0VYUFIpCisjZGVmaW5lIFBMQUNFSE9MREVSX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgUExBQ0VIT0xERVJfRVhQUikKKyNkZWZpbmUgUExVU19FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFBMVVNfRVhQUikKKyNkZWZpbmUgTUlOVVNfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBNSU5VU19FWFBSKQorI2RlZmluZSBNVUxUX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgTVVMVF9FWFBSKQorI2RlZmluZSBQT0lOVEVSX1BMVVNfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBQT0lOVEVSX1BMVVNfRVhQUikKKyNkZWZpbmUgVFJVTkNfRElWX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVFJVTkNfRElWX0VYUFIpCisjZGVmaW5lIENFSUxfRElWX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQ0VJTF9ESVZfRVhQUikKKyNkZWZpbmUgRkxPT1JfRElWX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgRkxPT1JfRElWX0VYUFIpCisjZGVmaW5lIFJPVU5EX0RJVl9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFJPVU5EX0RJVl9FWFBSKQorI2RlZmluZSBUUlVOQ19NT0RfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBUUlVOQ19NT0RfRVhQUikKKyNkZWZpbmUgQ0VJTF9NT0RfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBDRUlMX01PRF9FWFBSKQorI2RlZmluZSBGTE9PUl9NT0RfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBGTE9PUl9NT0RfRVhQUikKKyNkZWZpbmUgUk9VTkRfTU9EX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgUk9VTkRfTU9EX0VYUFIpCisjZGVmaW5lIFJESVZfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBSRElWX0VYUFIpCisjZGVmaW5lIEVYQUNUX0RJVl9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEVYQUNUX0RJVl9FWFBSKQorI2RlZmluZSBGSVhfVFJVTkNfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBGSVhfVFJVTkNfRVhQUikKKyNkZWZpbmUgRkxPQVRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBGTE9BVF9FWFBSKQorI2RlZmluZSBORUdBVEVfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBORUdBVEVfRVhQUikKKyNkZWZpbmUgTUlOX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgTUlOX0VYUFIpCisjZGVmaW5lIE1BWF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIE1BWF9FWFBSKQorI2RlZmluZSBBQlNfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBBQlNfRVhQUikKKyNkZWZpbmUgTFNISUZUX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgTFNISUZUX0VYUFIpCisjZGVmaW5lIFJTSElGVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFJTSElGVF9FWFBSKQorI2RlZmluZSBMUk9UQVRFX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgTFJPVEFURV9FWFBSKQorI2RlZmluZSBSUk9UQVRFX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgUlJPVEFURV9FWFBSKQorI2RlZmluZSBCSVRfSU9SX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQklUX0lPUl9FWFBSKQorI2RlZmluZSBCSVRfWE9SX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQklUX1hPUl9FWFBSKQorI2RlZmluZSBCSVRfQU5EX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQklUX0FORF9FWFBSKQorI2RlZmluZSBCSVRfTk9UX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQklUX05PVF9FWFBSKQorI2RlZmluZSBUUlVUSF9BTkRJRl9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRSVVRIX0FORElGX0VYUFIpCisjZGVmaW5lIFRSVVRIX09SSUZfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBUUlVUSF9PUklGX0VYUFIpCisjZGVmaW5lIFRSVVRIX0FORF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRSVVRIX0FORF9FWFBSKQorI2RlZmluZSBUUlVUSF9PUl9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRSVVRIX09SX0VYUFIpCisjZGVmaW5lIFRSVVRIX1hPUl9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRSVVRIX1hPUl9FWFBSKQorI2RlZmluZSBUUlVUSF9OT1RfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBUUlVUSF9OT1RfRVhQUikKKyNkZWZpbmUgTFRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBMVF9FWFBSKQorI2RlZmluZSBMRV9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIExFX0VYUFIpCisjZGVmaW5lIEdUX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgR1RfRVhQUikKKyNkZWZpbmUgR0VfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBHRV9FWFBSKQorI2RlZmluZSBFUV9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEVRX0VYUFIpCisjZGVmaW5lIE5FX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgTkVfRVhQUikKKyNkZWZpbmUgVU5PUkRFUkVEX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVU5PUkRFUkVEX0VYUFIpCisjZGVmaW5lIE9SREVSRURfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBPUkRFUkVEX0VYUFIpCisjZGVmaW5lIFVOTFRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBVTkxUX0VYUFIpCisjZGVmaW5lIFVOTEVfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBVTkxFX0VYUFIpCisjZGVmaW5lIFVOR1RfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBVTkdUX0VYUFIpCisjZGVmaW5lIFVOR0VfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBVTkdFX0VYUFIpCisjZGVmaW5lIFVORVFfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBVTkVRX0VYUFIpCisjZGVmaW5lIExUR1RfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBMVEdUX0VYUFIpCisjZGVmaW5lIFJBTkdFX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgUkFOR0VfRVhQUikKKyNkZWZpbmUgUEFSRU5fRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBQQVJFTl9FWFBSKQorI2RlZmluZSBDT05WRVJUX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQ09OVkVSVF9FWFBSKQorI2RlZmluZSBBRERSX1NQQUNFX0NPTlZFUlRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBBRERSX1NQQUNFX0NPTlZFUlRfRVhQUikKKyNkZWZpbmUgRklYRURfQ09OVkVSVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEZJWEVEX0NPTlZFUlRfRVhQUikKKyNkZWZpbmUgTk9QX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgTk9QX0VYUFIpCisjZGVmaW5lIE5PTl9MVkFMVUVfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBOT05fTFZBTFVFX0VYUFIpCisjZGVmaW5lIFZJRVdfQ09OVkVSVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFZJRVdfQ09OVkVSVF9FWFBSKQorI2RlZmluZSBDT01QT1VORF9MSVRFUkFMX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQ09NUE9VTkRfTElURVJBTF9FWFBSKQorI2RlZmluZSBTQVZFX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgU0FWRV9FWFBSKQorI2RlZmluZSBBRERSX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQUREUl9FWFBSKQorI2RlZmluZSBGREVTQ19FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEZERVNDX0VYUFIpCisjZGVmaW5lIENPTVBMRVhfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBDT01QTEVYX0VYUFIpCisjZGVmaW5lIENPTkpfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBDT05KX0VYUFIpCisjZGVmaW5lIFBSRURFQ1JFTUVOVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFBSRURFQ1JFTUVOVF9FWFBSKQorI2RlZmluZSBQUkVJTkNSRU1FTlRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBQUkVJTkNSRU1FTlRfRVhQUikKKyNkZWZpbmUgUE9TVERFQ1JFTUVOVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFBPU1RERUNSRU1FTlRfRVhQUikKKyNkZWZpbmUgUE9TVElOQ1JFTUVOVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFBPU1RJTkNSRU1FTlRfRVhQUikKKyNkZWZpbmUgVkFfQVJHX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVkFfQVJHX0VYUFIpCisjZGVmaW5lIFRSWV9DQVRDSF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRSWV9DQVRDSF9FWFBSKQorI2RlZmluZSBUUllfRklOQUxMWV9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRSWV9GSU5BTExZX0VYUFIpCisjZGVmaW5lIERFQ0xfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBERUNMX0VYUFIpCisjZGVmaW5lIExBQkVMX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgTEFCRUxfRVhQUikKKyNkZWZpbmUgR09UT19FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEdPVE9fRVhQUikKKyNkZWZpbmUgUkVUVVJOX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgUkVUVVJOX0VYUFIpCisjZGVmaW5lIEVYSVRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBFWElUX0VYUFIpCisjZGVmaW5lIExPT1BfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBMT09QX0VYUFIpCisjZGVmaW5lIFNXSVRDSF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFNXSVRDSF9FWFBSKQorI2RlZmluZSBDQVNFX0xBQkVMX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQ0FTRV9MQUJFTF9FWFBSKQorI2RlZmluZSBBU01fRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBBU01fRVhQUikKKyNkZWZpbmUgU1NBX05BTUVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgU1NBX05BTUUpCisjZGVmaW5lIENBVENIX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQ0FUQ0hfRVhQUikKKyNkZWZpbmUgRUhfRklMVEVSX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgRUhfRklMVEVSX0VYUFIpCisjZGVmaW5lIFNDRVZfS05PV05fQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgU0NFVl9LTk9XTikKKyNkZWZpbmUgU0NFVl9OT1RfS05PV05fQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgU0NFVl9OT1RfS05PV04pCisjZGVmaW5lIFBPTFlOT01JQUxfQ0hSRUNfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgUE9MWU5PTUlBTF9DSFJFQykKKyNkZWZpbmUgU1RBVEVNRU5UX0xJU1RfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgU1RBVEVNRU5UX0xJU1QpCisjZGVmaW5lIEFTU0VSVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEFTU0VSVF9FWFBSKQorI2RlZmluZSBUUkVFX0JJTkZPX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRSRUVfQklORk8pCisjZGVmaW5lIFdJVEhfU0laRV9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFdJVEhfU0laRV9FWFBSKQorI2RlZmluZSBSRUFMSUdOX0xPQURfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBSRUFMSUdOX0xPQURfRVhQUikKKyNkZWZpbmUgVEFSR0VUX01FTV9SRUZfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVEFSR0VUX01FTV9SRUYpCisjZGVmaW5lIE9NUF9QQVJBTExFTF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBPTVBfUEFSQUxMRUwpCisjZGVmaW5lIE9NUF9UQVNLX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIE9NUF9UQVNLKQorI2RlZmluZSBPTVBfRk9SX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIE9NUF9GT1IpCisjZGVmaW5lIE9NUF9TRUNUSU9OU19DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBPTVBfU0VDVElPTlMpCisjZGVmaW5lIE9NUF9TSU5HTEVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgT01QX1NJTkdMRSkKKyNkZWZpbmUgT01QX1NFQ1RJT05fQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgT01QX1NFQ1RJT04pCisjZGVmaW5lIE9NUF9NQVNURVJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgT01QX01BU1RFUikKKyNkZWZpbmUgT01QX09SREVSRURfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgT01QX09SREVSRUQpCisjZGVmaW5lIE9NUF9DUklUSUNBTF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBPTVBfQ1JJVElDQUwpCisjZGVmaW5lIE9NUF9BVE9NSUNfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgT01QX0FUT01JQykKKyNkZWZpbmUgT01QX0NMQVVTRV9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBPTVBfQ0xBVVNFKQorI2RlZmluZSBSRURVQ19NQVhfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBSRURVQ19NQVhfRVhQUikKKyNkZWZpbmUgUkVEVUNfTUlOX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgUkVEVUNfTUlOX0VYUFIpCisjZGVmaW5lIFJFRFVDX1BMVVNfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBSRURVQ19QTFVTX0VYUFIpCisjZGVmaW5lIERPVF9QUk9EX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgRE9UX1BST0RfRVhQUikKKyNkZWZpbmUgV0lERU5fU1VNX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgV0lERU5fU1VNX0VYUFIpCisjZGVmaW5lIFdJREVOX01VTFRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBXSURFTl9NVUxUX0VYUFIpCisjZGVmaW5lIFZFQ19MU0hJRlRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBWRUNfTFNISUZUX0VYUFIpCisjZGVmaW5lIFZFQ19SU0hJRlRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBWRUNfUlNISUZUX0VYUFIpCisjZGVmaW5lIFZFQ19XSURFTl9NVUxUX0hJX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVkVDX1dJREVOX01VTFRfSElfRVhQUikKKyNkZWZpbmUgVkVDX1dJREVOX01VTFRfTE9fRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBWRUNfV0lERU5fTVVMVF9MT19FWFBSKQorI2RlZmluZSBWRUNfVU5QQUNLX0hJX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVkVDX1VOUEFDS19ISV9FWFBSKQorI2RlZmluZSBWRUNfVU5QQUNLX0xPX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVkVDX1VOUEFDS19MT19FWFBSKQorI2RlZmluZSBWRUNfVU5QQUNLX0ZMT0FUX0hJX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVkVDX1VOUEFDS19GTE9BVF9ISV9FWFBSKQorI2RlZmluZSBWRUNfVU5QQUNLX0ZMT0FUX0xPX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVkVDX1VOUEFDS19GTE9BVF9MT19FWFBSKQorI2RlZmluZSBWRUNfUEFDS19UUlVOQ19FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFZFQ19QQUNLX1RSVU5DX0VYUFIpCisjZGVmaW5lIFZFQ19QQUNLX1NBVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFZFQ19QQUNLX1NBVF9FWFBSKQorI2RlZmluZSBWRUNfUEFDS19GSVhfVFJVTkNfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBWRUNfUEFDS19GSVhfVFJVTkNfRVhQUikKKyNkZWZpbmUgVkVDX0VYVFJBQ1RfRVZFTl9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFZFQ19FWFRSQUNUX0VWRU5fRVhQUikKKyNkZWZpbmUgVkVDX0VYVFJBQ1RfT0REX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVkVDX0VYVFJBQ1RfT0REX0VYUFIpCisjZGVmaW5lIFZFQ19JTlRFUkxFQVZFX0hJR0hfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBWRUNfSU5URVJMRUFWRV9ISUdIX0VYUFIpCisjZGVmaW5lIFZFQ19JTlRFUkxFQVZFX0xPV19FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFZFQ19JTlRFUkxFQVZFX0xPV19FWFBSKQorI2RlZmluZSBQUkVESUNUX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgUFJFRElDVF9FWFBSKQorI2RlZmluZSBPUFRJTUlaQVRJT05fTk9ERV9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBPUFRJTUlaQVRJT05fTk9ERSkKKyNkZWZpbmUgVEFSR0VUX09QVElPTl9OT0RFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRBUkdFVF9PUFRJT05fTk9ERSkKKyNkZWZpbmUgQ19NQVlCRV9DT05TVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIENfTUFZQkVfQ09OU1RfRVhQUikKKyNkZWZpbmUgRVhDRVNTX1BSRUNJU0lPTl9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEVYQ0VTU19QUkVDSVNJT05fRVhQUikKKyNkZWZpbmUgVU5DT05TVFJBSU5FRF9BUlJBWV9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFVOQ09OU1RSQUlORURfQVJSQVlfVFlQRSkKKyNkZWZpbmUgVU5DT05TVFJBSU5FRF9BUlJBWV9SRUZfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVU5DT05TVFJBSU5FRF9BUlJBWV9SRUYpCisjZGVmaW5lIE5VTExfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBOVUxMX0VYUFIpCisjZGVmaW5lIFBMVVNfTk9NT0RfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBQTFVTX05PTU9EX0VYUFIpCisjZGVmaW5lIE1JTlVTX05PTU9EX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgTUlOVVNfTk9NT0RfRVhQUikKKyNkZWZpbmUgQVRUUl9BRERSX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQVRUUl9BRERSX0VYUFIpCisjZGVmaW5lIFNUTVRfU1RNVF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBTVE1UX1NUTVQpCisjZGVmaW5lIExPT1BfU1RNVF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBMT09QX1NUTVQpCisjZGVmaW5lIEVYSVRfU1RNVF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBFWElUX1NUTVQpCisjZGVmaW5lIE9GRlNFVF9SRUZfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgT0ZGU0VUX1JFRikKKyNkZWZpbmUgUFRSTUVNX0NTVF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBQVFJNRU1fQ1NUKQorI2RlZmluZSBORVdfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBORVdfRVhQUikKKyNkZWZpbmUgVkVDX05FV19FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFZFQ19ORVdfRVhQUikKKyNkZWZpbmUgREVMRVRFX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgREVMRVRFX0VYUFIpCisjZGVmaW5lIFZFQ19ERUxFVEVfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBWRUNfREVMRVRFX0VYUFIpCisjZGVmaW5lIFNDT1BFX1JFRl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBTQ09QRV9SRUYpCisjZGVmaW5lIE1FTUJFUl9SRUZfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgTUVNQkVSX1JFRikKKyNkZWZpbmUgVFlQRV9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRZUEVfRVhQUikKKyNkZWZpbmUgQUdHUl9JTklUX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQUdHUl9JTklUX0VYUFIpCisjZGVmaW5lIFZFQ19JTklUX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVkVDX0lOSVRfRVhQUikKKyNkZWZpbmUgVEhST1dfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBUSFJPV19FWFBSKQorI2RlZmluZSBFTVBUWV9DTEFTU19FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEVNUFRZX0NMQVNTX0VYUFIpCisjZGVmaW5lIEJBU0VMSU5LX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEJBU0VMSU5LKQorI2RlZmluZSBURU1QTEFURV9ERUNMX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRFTVBMQVRFX0RFQ0wpCisjZGVmaW5lIFRFTVBMQVRFX1BBUk1fSU5ERVhfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVEVNUExBVEVfUEFSTV9JTkRFWCkKKyNkZWZpbmUgVEVNUExBVEVfVEVNUExBVEVfUEFSTV9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBURU1QTEFURV9URU1QTEFURV9QQVJNKQorI2RlZmluZSBURU1QTEFURV9UWVBFX1BBUk1fQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVEVNUExBVEVfVFlQRV9QQVJNKQorI2RlZmluZSBUWVBFTkFNRV9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRZUEVOQU1FX1RZUEUpCisjZGVmaW5lIFRZUEVPRl9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRZUEVPRl9UWVBFKQorI2RlZmluZSBCT1VORF9URU1QTEFURV9URU1QTEFURV9QQVJNX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEJPVU5EX1RFTVBMQVRFX1RFTVBMQVRFX1BBUk0pCisjZGVmaW5lIFVOQk9VTkRfQ0xBU1NfVEVNUExBVEVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVU5CT1VORF9DTEFTU19URU1QTEFURSkKKyNkZWZpbmUgVVNJTkdfREVDTF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBVU0lOR19ERUNMKQorI2RlZmluZSBVU0lOR19TVE1UX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFVTSU5HX1NUTVQpCisjZGVmaW5lIERFRkFVTFRfQVJHX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIERFRkFVTFRfQVJHKQorI2RlZmluZSBURU1QTEFURV9JRF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRFTVBMQVRFX0lEX0VYUFIpCisjZGVmaW5lIE9WRVJMT0FEX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIE9WRVJMT0FEKQorI2RlZmluZSBQU0VVRE9fRFRPUl9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFBTRVVET19EVE9SX0VYUFIpCisjZGVmaW5lIE1PRE9QX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgTU9ET1BfRVhQUikKKyNkZWZpbmUgQ0FTVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIENBU1RfRVhQUikKKyNkZWZpbmUgUkVJTlRFUlBSRVRfQ0FTVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFJFSU5URVJQUkVUX0NBU1RfRVhQUikKKyNkZWZpbmUgQ09OU1RfQ0FTVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIENPTlNUX0NBU1RfRVhQUikKKyNkZWZpbmUgU1RBVElDX0NBU1RfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBTVEFUSUNfQ0FTVF9FWFBSKQorI2RlZmluZSBEWU5BTUlDX0NBU1RfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBEWU5BTUlDX0NBU1RfRVhQUikKKyNkZWZpbmUgRE9UU1RBUl9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIERPVFNUQVJfRVhQUikKKyNkZWZpbmUgVFlQRUlEX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVFlQRUlEX0VYUFIpCisjZGVmaW5lIE5PTl9ERVBFTkRFTlRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBOT05fREVQRU5ERU5UX0VYUFIpCisjZGVmaW5lIENUT1JfSU5JVElBTElaRVJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQ1RPUl9JTklUSUFMSVpFUikKKyNkZWZpbmUgVFJZX0JMT0NLX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRSWV9CTE9DSykKKyNkZWZpbmUgRUhfU1BFQ19CTE9DS19DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBFSF9TUEVDX0JMT0NLKQorI2RlZmluZSBIQU5ETEVSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEhBTkRMRVIpCisjZGVmaW5lIE1VU1RfTk9UX1RIUk9XX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgTVVTVF9OT1RfVEhST1dfRVhQUikKKyNkZWZpbmUgQ0xFQU5VUF9TVE1UX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIENMRUFOVVBfU1RNVCkKKyNkZWZpbmUgSUZfU1RNVF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBJRl9TVE1UKQorI2RlZmluZSBGT1JfU1RNVF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBGT1JfU1RNVCkKKyNkZWZpbmUgV0hJTEVfU1RNVF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBXSElMRV9TVE1UKQorI2RlZmluZSBET19TVE1UX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIERPX1NUTVQpCisjZGVmaW5lIEJSRUFLX1NUTVRfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQlJFQUtfU1RNVCkKKyNkZWZpbmUgQ09OVElOVUVfU1RNVF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBDT05USU5VRV9TVE1UKQorI2RlZmluZSBTV0lUQ0hfU1RNVF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBTV0lUQ0hfU1RNVCkKKyNkZWZpbmUgRVhQUl9TVE1UX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEVYUFJfU1RNVCkKKyNkZWZpbmUgVEFHX0RFRk5fQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVEFHX0RFRk4pCisjZGVmaW5lIE9GRlNFVE9GX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgT0ZGU0VUT0ZfRVhQUikKKyNkZWZpbmUgU0laRU9GX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgU0laRU9GX0VYUFIpCisjZGVmaW5lIEFSUk9XX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQVJST1dfRVhQUikKKyNkZWZpbmUgQUxJR05PRl9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEFMSUdOT0ZfRVhQUikKKyNkZWZpbmUgU1RNVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFNUTVRfRVhQUikKKyNkZWZpbmUgVU5BUllfUExVU19FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFVOQVJZX1BMVVNfRVhQUikKKyNkZWZpbmUgU1RBVElDX0FTU0VSVF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBTVEFUSUNfQVNTRVJUKQorI2RlZmluZSBUWVBFX0FSR1VNRU5UX1BBQ0tfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVFlQRV9BUkdVTUVOVF9QQUNLKQorI2RlZmluZSBOT05UWVBFX0FSR1VNRU5UX1BBQ0tfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgTk9OVFlQRV9BUkdVTUVOVF9QQUNLKQorI2RlZmluZSBUWVBFX1BBQ0tfRVhQQU5TSU9OX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRZUEVfUEFDS19FWFBBTlNJT04pCisjZGVmaW5lIEVYUFJfUEFDS19FWFBBTlNJT05fQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgRVhQUl9QQUNLX0VYUEFOU0lPTikKKyNkZWZpbmUgQVJHVU1FTlRfUEFDS19TRUxFQ1RfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQVJHVU1FTlRfUEFDS19TRUxFQ1QpCisjZGVmaW5lIFRSQUlUX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVFJBSVRfRVhQUikKKyNkZWZpbmUgTEFNQkRBX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgTEFNQkRBX0VYUFIpCisjZGVmaW5lIERFQ0xUWVBFX1RZUEVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgREVDTFRZUEVfVFlQRSkKKyNkZWZpbmUgVEVNUExBVEVfSU5GT19DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBURU1QTEFURV9JTkZPKQorI2RlZmluZSBVUlNISUZUX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVVJTSElGVF9FWFBSKQorI2RlZmluZSBDT01QQVJFX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQ09NUEFSRV9FWFBSKQorI2RlZmluZSBDT01QQVJFX0xfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBDT01QQVJFX0xfRVhQUikKKyNkZWZpbmUgQ09NUEFSRV9HX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQ09NUEFSRV9HX0VYUFIpCisjZGVmaW5lIENMQVNTX0lOVEVSRkFDRV9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIENMQVNTX0lOVEVSRkFDRV9UWVBFKQorI2RlZmluZSBDTEFTU19JTVBMRU1FTlRBVElPTl9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIENMQVNTX0lNUExFTUVOVEFUSU9OX1RZUEUpCisjZGVmaW5lIENBVEVHT1JZX0lOVEVSRkFDRV9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIENBVEVHT1JZX0lOVEVSRkFDRV9UWVBFKQorI2RlZmluZSBDQVRFR09SWV9JTVBMRU1FTlRBVElPTl9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIENBVEVHT1JZX0lNUExFTUVOVEFUSU9OX1RZUEUpCisjZGVmaW5lIFBST1RPQ09MX0lOVEVSRkFDRV9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFBST1RPQ09MX0lOVEVSRkFDRV9UWVBFKQorI2RlZmluZSBLRVlXT1JEX0RFQ0xfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgS0VZV09SRF9ERUNMKQorI2RlZmluZSBJTlNUQU5DRV9NRVRIT0RfREVDTF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBJTlNUQU5DRV9NRVRIT0RfREVDTCkKKyNkZWZpbmUgQ0xBU1NfTUVUSE9EX0RFQ0xfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQ0xBU1NfTUVUSE9EX0RFQ0wpCisjZGVmaW5lIE1FU1NBR0VfU0VORF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIE1FU1NBR0VfU0VORF9FWFBSKQorI2RlZmluZSBDTEFTU19SRUZFUkVOQ0VfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBDTEFTU19SRUZFUkVOQ0VfRVhQUikKKworI2VuZGlmIC8qIEdDQ19UUkVFX0NIRUNLX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS90cmVlLWR1bXAuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS90cmVlLWR1bXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWIyOGUwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3RyZWUtZHVtcC5oCkBAIC0wLDAgKzEsMTAxIEBACisvKiBUcmVlLWR1bXBpbmcgZnVuY3Rpb25hbGl0eSBmb3IgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uLgorICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4LCAyMDA5CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgTWFyayBNaXRjaGVsbCA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfVFJFRV9EVU1QX0gKKyNkZWZpbmUgR0NDX1RSRUVfRFVNUF9ICisKKyNpbmNsdWRlICJzcGxheS10cmVlLmgiCisjaW5jbHVkZSAidHJlZS1wYXNzLmgiCisKK3R5cGVkZWYgc3RydWN0IGR1bXBfaW5mbyAqZHVtcF9pbmZvX3A7CisKKy8qIEZsYWdzIHVzZWQgd2l0aCBxdWV1ZSBmdW5jdGlvbnMuICAqLworI2RlZmluZSBEVU1QX05PTkUgICAgIDAKKyNkZWZpbmUgRFVNUF9CSU5GTyAgICAxCisKKy8qIEluZm9ybWF0aW9uIGFib3V0IGEgbm9kZSB0byBiZSBkdW1wZWQuICAqLworCit0eXBlZGVmIHN0cnVjdCBkdW1wX25vZGVfaW5mbworeworICAvKiBUaGUgaW5kZXggZm9yIHRoZSBub2RlLiAgKi8KKyAgdW5zaWduZWQgaW50IGluZGV4OworICAvKiBOb256ZXJvIGlmIHRoZSBub2RlIGlzIGEgYmluZm8uICAqLworICB1bnNpZ25lZCBpbnQgYmluZm9fcCA6IDE7Cit9ICpkdW1wX25vZGVfaW5mb19wOworCisvKiBBIGR1bXBfcXVldWUgaXMgYSBsaW5rIGluIHRoZSBxdWV1ZSBvZiB0aGluZ3MgdG8gYmUgZHVtcGVkLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgZHVtcF9xdWV1ZQoreworICAvKiBUaGUgcXVldWVkIHRyZWUgbm9kZS4gICovCisgIHNwbGF5X3RyZWVfbm9kZSBub2RlOworICAvKiBUaGUgbmV4dCBub2RlIGluIHRoZSBxdWV1ZS4gICovCisgIHN0cnVjdCBkdW1wX3F1ZXVlICpuZXh0OworfSAqZHVtcF9xdWV1ZV9wOworCisvKiBBIGR1bXBfaW5mbyBnaXZlcyBpbmZvcm1hdGlvbiBhYm91dCBob3cgd2Ugc2hvdWxkIHBlcmZvcm0gdGhlIGR1bXAKKyAgIGFuZCBhYm91dCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZHVtcC4gICovCisKK3N0cnVjdCBkdW1wX2luZm8KK3sKKyAgLyogVGhlIHN0cmVhbSBvbiB3aGljaCB0byBkdW1wIHRoZSBpbmZvcm1hdGlvbi4gICovCisgIEZJTEUgKnN0cmVhbTsKKyAgLyogVGhlIG9yaWdpbmFsIG5vZGUuICAqLworICBjb25zdF90cmVlIG5vZGU7CisgIC8qIFVzZXIgZmxhZ3MuICAqLworICBpbnQgZmxhZ3M7CisgIC8qIFRoZSBuZXh0IHVudXNlZCBub2RlIGluZGV4LiAgKi8KKyAgdW5zaWduZWQgaW50IGluZGV4OworICAvKiBUaGUgbmV4dCBjb2x1bW4uICAqLworICB1bnNpZ25lZCBpbnQgY29sdW1uOworICAvKiBUaGUgZmlyc3Qgbm9kZSBpbiB0aGUgcXVldWUgb2Ygbm9kZXMgdG8gYmUgd3JpdHRlbiBvdXQuICAqLworICBkdW1wX3F1ZXVlX3AgcXVldWU7CisgIC8qIFRoZSBsYXN0IG5vZGUgaW4gdGhlIHF1ZXVlLiAgKi8KKyAgZHVtcF9xdWV1ZV9wIHF1ZXVlX2VuZDsKKyAgLyogRnJlZSBxdWV1ZSBub2Rlcy4gICovCisgIGR1bXBfcXVldWVfcCBmcmVlX2xpc3Q7CisgIC8qIFRoZSB0cmVlIG5vZGVzIHdoaWNoIHdlIGhhdmUgYWxyZWFkeSB3cml0dGVuIG91dC4gIFRoZQorICAgICBrZXlzIGFyZSB0aGUgYWRkcmVzc2VzIG9mIHRoZSBub2RlczsgdGhlIHZhbHVlcyBhcmUgdGhlIGludGVnZXIKKyAgICAgaW5kaWNlcyB3ZSBhc3NpZ25lZCB0aGVtLiAgKi8KKyAgc3BsYXlfdHJlZSBub2RlczsKK307CisKKy8qIER1bXAgdGhlIENISUxEIGFuZCBpdHMgY2hpbGRyZW4uICAqLworI2RlZmluZSBkdW1wX2NoaWxkKGZpZWxkLCBjaGlsZCkgXAorICBxdWV1ZV9hbmRfZHVtcF9pbmRleCAoZGksIGZpZWxkLCBjaGlsZCwgRFVNUF9OT05FKQorCitleHRlcm4gdm9pZCBkdW1wX3BvaW50ZXIgKGR1bXBfaW5mb19wLCBjb25zdCBjaGFyICosIHZvaWQgKik7CitleHRlcm4gdm9pZCBkdW1wX2ludCAoZHVtcF9pbmZvX3AsIGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiB2b2lkIGR1bXBfc3RyaW5nIChkdW1wX2luZm9fcCwgY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIGR1bXBfc3RyaW5nX2ZpZWxkIChkdW1wX2luZm9fcCwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgZHVtcF9zdG10IChkdW1wX2luZm9fcCwgY29uc3RfdHJlZSk7CitleHRlcm4gdm9pZCBxdWV1ZV9hbmRfZHVtcF9pbmRleCAoZHVtcF9pbmZvX3AsIGNvbnN0IGNoYXIgKiwgY29uc3RfdHJlZSwgaW50KTsKK2V4dGVybiB2b2lkIHF1ZXVlX2FuZF9kdW1wX3R5cGUgKGR1bXBfaW5mb19wLCBjb25zdF90cmVlKTsKK2V4dGVybiB2b2lkIGR1bXBfZnVuY3Rpb24gKGludCwgdHJlZSk7CitleHRlcm4gdm9pZCBkdW1wX2Z1bmN0aW9uX3RvX2ZpbGUgKHRyZWUsIEZJTEUgKiwgaW50KTsKK2V4dGVybiB2b2lkIGRlYnVnX2Z1bmN0aW9uICh0cmVlLCBpbnQpOworZXh0ZXJuIGludCBkdW1wX2ZsYWcgKGR1bXBfaW5mb19wLCBpbnQsIGNvbnN0X3RyZWUpOworCitleHRlcm4gdW5zaWduZWQgaW50IGR1bXBfcmVnaXN0ZXIgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCisJCQkJICAgaW50KTsKKworCisjZW5kaWYgLyogISBHQ0NfVFJFRV9EVU1QX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS90cmVlLWZsb3ctaW5saW5lLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS1mbG93LWlubGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYWE1ODUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS1mbG93LWlubGluZS5oCkBAIC0wLDAgKzEsMTI1MCBAQAorLyogSW5saW5lIGZ1bmN0aW9ucyBmb3IgdHJlZS1mbG93LmgKKyAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMywgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMAorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBEaWVnbyBOb3ZpbGxvIDxkbm92aWxsb0ByZWRoYXQuY29tPgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBfVFJFRV9GTE9XX0lOTElORV9ICisjZGVmaW5lIF9UUkVFX0ZMT1dfSU5MSU5FX0ggMQorCisvKiBJbmxpbmUgZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgdmFyaW91cyBkYXRhIHN0cnVjdHVyZXMgZGVmaW5lZCBpbgorICAgdHJlZS1mbG93LmguICBTZWUgdHJlZS1mbG93LmggZm9yIGRvY3VtZW50YXRpb24uICAqLworCisvKiBSZXR1cm4gdHJ1ZSB3aGVuIGdpbXBsZSBTU0EgZm9ybSB3YXMgYnVpbHQuCisgICBnaW1wbGVfaW5fc3NhX3AgaXMgcXVlcmllZCBieSBnaW1wbGlmaWVyIGluIHZhcmlvdXMgZWFybHkgc3RhZ2VzIGJlZm9yZSBTU0EKKyAgIGluZnJhc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLiAgQ2hlY2sgZm9yIHByZXNlbmNlIG9mIHRoZSBkYXRhc3RydWN0dXJlcworICAgYXQgZmlyc3QgcGxhY2UuICAqLworc3RhdGljIGlubGluZSBib29sCitnaW1wbGVfaW5fc3NhX3AgKGNvbnN0IHN0cnVjdCBmdW5jdGlvbiAqZnVuKQoreworICByZXR1cm4gZnVuICYmIGZ1bi0+Z2ltcGxlX2RmICYmIGZ1bi0+Z2ltcGxlX2RmLT5pbl9zc2FfcDsKK30KKworLyogQXJyYXkgb2YgYWxsIHZhcmlhYmxlcyByZWZlcmVuY2VkIGluIHRoZSBmdW5jdGlvbi4gICovCitzdGF0aWMgaW5saW5lIGh0YWJfdAorZ2ltcGxlX3JlZmVyZW5jZWRfdmFycyAoY29uc3Qgc3RydWN0IGZ1bmN0aW9uICpmdW4pCit7CisgIGlmICghZnVuLT5naW1wbGVfZGYpCisgICAgcmV0dXJuIE5VTEw7CisgIHJldHVybiBmdW4tPmdpbXBsZV9kZi0+cmVmZXJlbmNlZF92YXJzOworfQorCisvKiBBcnRpZmljaWFsIHZhcmlhYmxlIHVzZWQgZm9yIHRoZSB2aXJ0dWFsIG9wZXJhbmQgRlVEIGNoYWluLiAgKi8KK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX3ZvcCAoY29uc3Qgc3RydWN0IGZ1bmN0aW9uICpmdW4pCit7CisgIGdjY19hc3NlcnQgKGZ1biAmJiBmdW4tPmdpbXBsZV9kZik7CisgIHJldHVybiBmdW4tPmdpbXBsZV9kZi0+dm9wOworfQorCisvKiBJbml0aWFsaXplIHRoZSBoYXNodGFibGUgaXRlcmF0b3IgSFRJIHRvIHBvaW50IHRvIGhhc2h0YWJsZSBUQUJMRSAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgKgorZmlyc3RfaHRhYl9lbGVtZW50IChodGFiX2l0ZXJhdG9yICpodGksIGh0YWJfdCB0YWJsZSkKK3sKKyAgaHRpLT5odGFiID0gdGFibGU7CisgIGh0aS0+c2xvdCA9IHRhYmxlLT5lbnRyaWVzOworICBodGktPmxpbWl0ID0gaHRpLT5zbG90ICsgaHRhYl9zaXplICh0YWJsZSk7CisgIGRvCisgICAgeworICAgICAgUFRSIHggPSAqKGh0aS0+c2xvdCk7CisgICAgICBpZiAoeCAhPSBIVEFCX0VNUFRZX0VOVFJZICYmIHggIT0gSFRBQl9ERUxFVEVEX0VOVFJZKQorCWJyZWFrOworICAgIH0gd2hpbGUgKCsrKGh0aS0+c2xvdCkgPCBodGktPmxpbWl0KTsKKworICBpZiAoaHRpLT5zbG90IDwgaHRpLT5saW1pdCkKKyAgICByZXR1cm4gKihodGktPnNsb3QpOworICByZXR1cm4gTlVMTDsKK30KKworLyogUmV0dXJuIGN1cnJlbnQgbm9uLWVtcHR5L2RlbGV0ZWQgc2xvdCBvZiB0aGUgaGFzaHRhYmxlIHBvaW50ZWQgdG8gYnkgSFRJLAorICAgb3IgTlVMTCBpZiB3ZSBoYXZlICByZWFjaGVkIHRoZSBlbmQuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2VuZF9odGFiX3AgKGNvbnN0IGh0YWJfaXRlcmF0b3IgKmh0aSkKK3sKKyAgaWYgKGh0aS0+c2xvdCA+PSBodGktPmxpbWl0KQorICAgIHJldHVybiB0cnVlOworICByZXR1cm4gZmFsc2U7Cit9CisKKy8qIEFkdmFuY2UgdGhlIGhhc2h0YWJsZSBpdGVyYXRvciBwb2ludGVkIHRvIGJ5IEhUSSB0byB0aGUgbmV4dCBlbGVtZW50IG9mIHRoZQorICAgaGFzaHRhYmxlLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkICoKK25leHRfaHRhYl9lbGVtZW50IChodGFiX2l0ZXJhdG9yICpodGkpCit7CisgIHdoaWxlICgrKyhodGktPnNsb3QpIDwgaHRpLT5saW1pdCkKKyAgICB7CisgICAgICBQVFIgeCA9ICooaHRpLT5zbG90KTsKKyAgICAgIGlmICh4ICE9IEhUQUJfRU1QVFlfRU5UUlkgJiYgeCAhPSBIVEFCX0RFTEVURURfRU5UUlkpCisJcmV0dXJuIHg7CisgICAgfTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEluaXRpYWxpemUgSVRFUiB0byBwb2ludCB0byB0aGUgZmlyc3QgcmVmZXJlbmNlZCB2YXJpYWJsZSBpbiB0aGUKKyAgIHJlZmVyZW5jZWRfdmFycyBoYXNodGFibGUsIGFuZCByZXR1cm4gdGhhdCB2YXJpYWJsZS4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZmlyc3RfcmVmZXJlbmNlZF92YXIgKHJlZmVyZW5jZWRfdmFyX2l0ZXJhdG9yICppdGVyKQoreworICByZXR1cm4gKHRyZWUpIGZpcnN0X2h0YWJfZWxlbWVudCAoJml0ZXItPmh0aSwKKwkJCQkgICAgZ2ltcGxlX3JlZmVyZW5jZWRfdmFycyAoY2Z1bikpOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBoYXZlIGhpdCB0aGUgZW5kIG9mIHRoZSByZWZlcmVuY2VkIHZhcmlhYmxlcyBJVEVSIGlzCisgICBpdGVyYXRpbmcgdGhyb3VnaC4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZW5kX3JlZmVyZW5jZWRfdmFyc19wIChjb25zdCByZWZlcmVuY2VkX3Zhcl9pdGVyYXRvciAqaXRlcikKK3sKKyAgcmV0dXJuIGVuZF9odGFiX3AgKCZpdGVyLT5odGkpOworfQorCisvKiBNYWtlIElURVIgcG9pbnQgdG8gdGhlIG5leHQgcmVmZXJlbmNlZF92YXIgaW4gdGhlIHJlZmVyZW5jZWRfdmFyIGhhc2h0YWJsZSwKKyAgIGFuZCByZXR1cm4gdGhhdCB2YXJpYWJsZS4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorbmV4dF9yZWZlcmVuY2VkX3ZhciAocmVmZXJlbmNlZF92YXJfaXRlcmF0b3IgKml0ZXIpCit7CisgIHJldHVybiAodHJlZSkgbmV4dF9odGFiX2VsZW1lbnQgKCZpdGVyLT5odGkpOworfQorCisvKiBSZXR1cm4gdGhlIHZhcmlhYmxlIGFubm90YXRpb24gZm9yIFQsIHdoaWNoIG11c3QgYmUgYSBfREVDTCBub2RlLgorICAgUmV0dXJuIE5VTEwgaWYgdGhlIHZhcmlhYmxlIGFubm90YXRpb24gZG9lc24ndCBhbHJlYWR5IGV4aXN0LiAgKi8KK3N0YXRpYyBpbmxpbmUgdmFyX2Fubl90Cit2YXJfYW5uIChjb25zdF90cmVlIHQpCit7CisgIGNvbnN0IHZhcl9hbm5fdCAqcCA9IERFQ0xfVkFSX0FOTl9QVFIgKHQpOworICByZXR1cm4gcCA/ICpwIDogTlVMTDsKK30KKworLyogUmV0dXJuIHRoZSB2YXJpYWJsZSBhbm5vdGF0aW9uIGZvciBULCB3aGljaCBtdXN0IGJlIGEgX0RFQ0wgbm9kZS4KKyAgIENyZWF0ZSB0aGUgdmFyaWFibGUgYW5ub3RhdGlvbiBpZiBpdCBkb2Vzbid0IGV4aXN0LiAgKi8KK3N0YXRpYyBpbmxpbmUgdmFyX2Fubl90CitnZXRfdmFyX2FubiAodHJlZSB2YXIpCit7CisgIHZhcl9hbm5fdCAqcCA9IERFQ0xfVkFSX0FOTl9QVFIgKHZhcik7CisgIGdjY19hc3NlcnQgKHApOworICByZXR1cm4gKnAgPyAqcCA6IGNyZWF0ZV92YXJfYW5uICh2YXIpOworfQorCisvKiBHZXQgdGhlIG51bWJlciBvZiB0aGUgbmV4dCBzdGF0ZW1lbnQgdWlkIHRvIGJlIGFsbG9jYXRlZC4gICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorZ2ltcGxlX3N0bXRfbWF4X3VpZCAoc3RydWN0IGZ1bmN0aW9uICpmbikKK3sKKyAgcmV0dXJuIGZuLT5sYXN0X3N0bXRfdWlkOworfQorCisvKiBTZXQgdGhlIG51bWJlciBvZiB0aGUgbmV4dCBzdGF0ZW1lbnQgdWlkIHRvIGJlIGFsbG9jYXRlZC4gICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3NldF9naW1wbGVfc3RtdF9tYXhfdWlkIChzdHJ1Y3QgZnVuY3Rpb24gKmZuLCB1bnNpZ25lZCBpbnQgbWF4aWQpCit7CisgIGZuLT5sYXN0X3N0bXRfdWlkID0gbWF4aWQ7Cit9CisKKy8qIFNldCB0aGUgbnVtYmVyIG9mIHRoZSBuZXh0IHN0YXRlbWVudCB1aWQgdG8gYmUgYWxsb2NhdGVkLiAgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitpbmNfZ2ltcGxlX3N0bXRfbWF4X3VpZCAoc3RydWN0IGZ1bmN0aW9uICpmbikKK3sKKyAgcmV0dXJuIGZuLT5sYXN0X3N0bXRfdWlkKys7Cit9CisKKy8qIFJldHVybiB0aGUgbGluZSBudW1iZXIgZm9yIEVYUFIsIG9yIHJldHVybiAtMSBpZiB3ZSBoYXZlIG5vIGxpbmUKKyAgIG51bWJlciBpbmZvcm1hdGlvbiBmb3IgaXQuICAqLworc3RhdGljIGlubGluZSBpbnQKK2dldF9saW5lbm8gKGNvbnN0X2dpbXBsZSBzdG10KQoreworICBsb2NhdGlvbl90IGxvYzsKKworICBpZiAoIXN0bXQpCisgICAgcmV0dXJuIC0xOworCisgIGxvYyA9IGdpbXBsZV9sb2NhdGlvbiAoc3RtdCk7CisgIGlmIChsb2MgPT0gVU5LTk9XTl9MT0NBVElPTikKKyAgICByZXR1cm4gLTE7CisKKyAgcmV0dXJuIExPQ0FUSU9OX0xJTkUgKGxvYyk7Cit9CisKKy8qIERlbGluayBhbiBpbW1lZGlhdGVfdXNlcyBub2RlIGZyb20gaXRzIGNoYWluLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZGVsaW5rX2ltbV91c2UgKHNzYV91c2Vfb3BlcmFuZF90ICpsaW5rbm9kZSkKK3sKKyAgLyogUmV0dXJuIGlmIHRoaXMgbm9kZSBpcyBub3QgaW4gYSBsaXN0LiAgKi8KKyAgaWYgKGxpbmtub2RlLT5wcmV2ID09IE5VTEwpCisgICAgcmV0dXJuOworCisgIGxpbmtub2RlLT5wcmV2LT5uZXh0ID0gbGlua25vZGUtPm5leHQ7CisgIGxpbmtub2RlLT5uZXh0LT5wcmV2ID0gbGlua25vZGUtPnByZXY7CisgIGxpbmtub2RlLT5wcmV2ID0gTlVMTDsKKyAgbGlua25vZGUtPm5leHQgPSBOVUxMOworfQorCisvKiBMaW5rIHNzYV9pbW1fdXNlIG5vZGUgTElOS05PREUgaW50byB0aGUgY2hhaW4gZm9yIExJU1QuICAqLworc3RhdGljIGlubGluZSB2b2lkCitsaW5rX2ltbV91c2VfdG9fbGlzdCAoc3NhX3VzZV9vcGVyYW5kX3QgKmxpbmtub2RlLCBzc2FfdXNlX29wZXJhbmRfdCAqbGlzdCkKK3sKKyAgLyogTGluayB0aGUgbmV3IG5vZGUgYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QuICBJZiB3ZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YKKyAgICAgdHJhdmVyc2luZyB0aGUgbGlzdCwgd2Ugd29uJ3QgdmlzaXQgYW55IG5ldyBub2RlcyBhZGRlZCB0byBpdC4gICovCisgIGxpbmtub2RlLT5wcmV2ID0gbGlzdDsKKyAgbGlua25vZGUtPm5leHQgPSBsaXN0LT5uZXh0OworICBsaXN0LT5uZXh0LT5wcmV2ID0gbGlua25vZGU7CisgIGxpc3QtPm5leHQgPSBsaW5rbm9kZTsKK30KKworLyogTGluayBzc2FfaW1tX3VzZSBub2RlIExJTktOT0RFIGludG8gdGhlIGNoYWluIGZvciBERUYuICAqLworc3RhdGljIGlubGluZSB2b2lkCitsaW5rX2ltbV91c2UgKHNzYV91c2Vfb3BlcmFuZF90ICpsaW5rbm9kZSwgdHJlZSBkZWYpCit7CisgIHNzYV91c2Vfb3BlcmFuZF90ICpyb290OworCisgIGlmICghZGVmIHx8IFRSRUVfQ09ERSAoZGVmKSAhPSBTU0FfTkFNRSkKKyAgICBsaW5rbm9kZS0+cHJldiA9IE5VTEw7CisgIGVsc2UKKyAgICB7CisgICAgICByb290ID0gJihTU0FfTkFNRV9JTU1fVVNFX05PREUgKGRlZikpOworI2lmZGVmIEVOQUJMRV9DSEVDS0lORworICAgICAgaWYgKGxpbmtub2RlLT51c2UpCisgICAgICAgIGdjY19hc3NlcnQgKCoobGlua25vZGUtPnVzZSkgPT0gZGVmKTsKKyNlbmRpZgorICAgICAgbGlua19pbW1fdXNlX3RvX2xpc3QgKGxpbmtub2RlLCByb290KTsKKyAgICB9Cit9CisKKy8qIFNldCB0aGUgdmFsdWUgb2YgYSB1c2UgcG9pbnRlZCB0byBieSBVU0UgdG8gVkFMLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorc2V0X3NzYV91c2VfZnJvbV9wdHIgKHVzZV9vcGVyYW5kX3AgdXNlLCB0cmVlIHZhbCkKK3sKKyAgZGVsaW5rX2ltbV91c2UgKHVzZSk7CisgICoodXNlLT51c2UpID0gdmFsOworICBsaW5rX2ltbV91c2UgKHVzZSwgdmFsKTsKK30KKworLyogTGluayBzc2FfaW1tX3VzZSBub2RlIExJTktOT0RFIGludG8gdGhlIGNoYWluIGZvciBERUYsIHdpdGggdXNlIG9jY3VycmluZworICAgaW4gU1RNVC4gICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2xpbmtfaW1tX3VzZV9zdG10IChzc2FfdXNlX29wZXJhbmRfdCAqbGlua25vZGUsIHRyZWUgZGVmLCBnaW1wbGUgc3RtdCkKK3sKKyAgaWYgKHN0bXQpCisgICAgbGlua19pbW1fdXNlIChsaW5rbm9kZSwgZGVmKTsKKyAgZWxzZQorICAgIGxpbmtfaW1tX3VzZSAobGlua25vZGUsIE5VTEwpOworICBsaW5rbm9kZS0+bG9jLnN0bXQgPSBzdG10OworfQorCisvKiBSZWxpbmsgYSBuZXcgbm9kZSBpbiBwbGFjZSBvZiBhbiBvbGQgbm9kZSBpbiB0aGUgbGlzdC4gICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3JlbGlua19pbW1fdXNlIChzc2FfdXNlX29wZXJhbmRfdCAqbm9kZSwgc3NhX3VzZV9vcGVyYW5kX3QgKm9sZCkKK3sKKyAgLyogVGhlIG5vZGUgb25lIGhhZCBiZXR0ZXIgYmUgaW4gdGhlIHNhbWUgbGlzdC4gICovCisgIGdjY19hc3NlcnQgKCoob2xkLT51c2UpID09ICoobm9kZS0+dXNlKSk7CisgIG5vZGUtPnByZXYgPSBvbGQtPnByZXY7CisgIG5vZGUtPm5leHQgPSBvbGQtPm5leHQ7CisgIGlmIChvbGQtPnByZXYpCisgICAgeworICAgICAgb2xkLT5wcmV2LT5uZXh0ID0gbm9kZTsKKyAgICAgIG9sZC0+bmV4dC0+cHJldiA9IG5vZGU7CisgICAgICAvKiBSZW1vdmUgdGhlIG9sZCBub2RlIGZyb20gdGhlIGxpc3QuICAqLworICAgICAgb2xkLT5wcmV2ID0gTlVMTDsKKyAgICB9Cit9CisKKy8qIFJlbGluayBzc2FfaW1tX3VzZSBub2RlIExJTktOT0RFIGludG8gdGhlIGNoYWluIGZvciBPTEQsIHdpdGggdXNlIG9jY3VycmluZworICAgaW4gU1RNVC4gICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3JlbGlua19pbW1fdXNlX3N0bXQgKHNzYV91c2Vfb3BlcmFuZF90ICpsaW5rbm9kZSwgc3NhX3VzZV9vcGVyYW5kX3QgKm9sZCwKKwkJICAgICBnaW1wbGUgc3RtdCkKK3sKKyAgaWYgKHN0bXQpCisgICAgcmVsaW5rX2ltbV91c2UgKGxpbmtub2RlLCBvbGQpOworICBlbHNlCisgICAgbGlua19pbW1fdXNlIChsaW5rbm9kZSwgTlVMTCk7CisgIGxpbmtub2RlLT5sb2Muc3RtdCA9IHN0bXQ7Cit9CisKKworLyogUmV0dXJuIHRydWUgaXMgSU1NIGhhcyByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGltbWVkaWF0ZSB1c2UgbGlzdC4gICovCitzdGF0aWMgaW5saW5lIGJvb2wKK2VuZF9yZWFkb25seV9pbW1fdXNlX3AgKGNvbnN0IGltbV91c2VfaXRlcmF0b3IgKmltbSkKK3sKKyAgcmV0dXJuIChpbW0tPmltbV91c2UgPT0gaW1tLT5lbmRfcCk7Cit9CisKKy8qIEluaXRpYWxpemUgaXRlcmF0b3IgSU1NIHRvIHByb2Nlc3MgdGhlIGxpc3QgZm9yIFZBUi4gICovCitzdGF0aWMgaW5saW5lIHVzZV9vcGVyYW5kX3AKK2ZpcnN0X3JlYWRvbmx5X2ltbV91c2UgKGltbV91c2VfaXRlcmF0b3IgKmltbSwgdHJlZSB2YXIpCit7CisgIGltbS0+ZW5kX3AgPSAmKFNTQV9OQU1FX0lNTV9VU0VfTk9ERSAodmFyKSk7CisgIGltbS0+aW1tX3VzZSA9IGltbS0+ZW5kX3AtPm5leHQ7CisjaWZkZWYgRU5BQkxFX0NIRUNLSU5HCisgIGltbS0+aXRlcl9ub2RlLm5leHQgPSBpbW0tPmltbV91c2UtPm5leHQ7CisjZW5kaWYKKyAgaWYgKGVuZF9yZWFkb25seV9pbW1fdXNlX3AgKGltbSkpCisgICAgcmV0dXJuIE5VTExfVVNFX09QRVJBTkRfUDsKKyAgcmV0dXJuIGltbS0+aW1tX3VzZTsKK30KKworLyogQnVtcCBJTU0gdG8gdGhlIG5leHQgdXNlIGluIHRoZSBsaXN0LiAgKi8KK3N0YXRpYyBpbmxpbmUgdXNlX29wZXJhbmRfcAorbmV4dF9yZWFkb25seV9pbW1fdXNlIChpbW1fdXNlX2l0ZXJhdG9yICppbW0pCit7CisgIHVzZV9vcGVyYW5kX3Agb2xkID0gaW1tLT5pbW1fdXNlOworCisjaWZkZWYgRU5BQkxFX0NIRUNLSU5HCisgIC8qIElmIHRoaXMgYXNzZXJ0aW9uIGZhaWxzLCBpdCBpbmRpY2F0ZXMgdGhlICduZXh0JyBwb2ludGVyIGhhcyBjaGFuZ2VkCisgICAgIHNpbmNlIHRoZSBsYXN0IGJ1bXAuICBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBsaXN0IGlzIGJlaW5nIG1vZGlmaWVkCisgICAgIHZpYSBzdG10IGNoYW5nZXMsIG9yIFNFVF9VU0UsIG9yIHNvbWVzdWNoIHRoaW5nLCBhbmQgeW91IG5lZWQgdG8gYmUKKyAgICAgdXNpbmcgdGhlIFNBRkUgdmVyc2lvbiBvZiB0aGUgaXRlcmF0b3IuICAqLworICBnY2NfYXNzZXJ0IChpbW0tPml0ZXJfbm9kZS5uZXh0ID09IG9sZC0+bmV4dCk7CisgIGltbS0+aXRlcl9ub2RlLm5leHQgPSBvbGQtPm5leHQtPm5leHQ7CisjZW5kaWYKKworICBpbW0tPmltbV91c2UgPSBvbGQtPm5leHQ7CisgIGlmIChlbmRfcmVhZG9ubHlfaW1tX3VzZV9wIChpbW0pKQorICAgIHJldHVybiBOVUxMX1VTRV9PUEVSQU5EX1A7CisgIHJldHVybiBpbW0tPmltbV91c2U7Cit9CisKKy8qIHRyZWUtY2ZnLmMgKi8KK2V4dGVybiBib29sIGhhc196ZXJvX3VzZXNfMSAoY29uc3Qgc3NhX3VzZV9vcGVyYW5kX3QgKmhlYWQpOworZXh0ZXJuIGJvb2wgc2luZ2xlX2ltbV91c2VfMSAoY29uc3Qgc3NhX3VzZV9vcGVyYW5kX3QgKmhlYWQsCisJCQkgICAgICB1c2Vfb3BlcmFuZF9wICp1c2VfcCwgZ2ltcGxlICpzdG10KTsKKworLyogUmV0dXJuIHRydWUgaWYgVkFSIGhhcyBubyBub25kZWJ1ZyB1c2VzLiAgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAoraGFzX3plcm9fdXNlcyAoY29uc3RfdHJlZSB2YXIpCit7CisgIGNvbnN0IHNzYV91c2Vfb3BlcmFuZF90ICpjb25zdCBwdHIgPSAmKFNTQV9OQU1FX0lNTV9VU0VfTk9ERSAodmFyKSk7CisKKyAgLyogQSBzaW5nbGUgdXNlX29wZXJhbmQgbWVhbnMgdGhlcmUgaXMgbm8gaXRlbXMgaW4gdGhlIGxpc3QuICAqLworICBpZiAocHRyID09IHB0ci0+bmV4dCkKKyAgICByZXR1cm4gdHJ1ZTsKKworICAvKiBJZiB0aGVyZSBhcmUgZGVidWcgc3RtdHMsIHdlIGhhdmUgdG8gbG9vayBhdCBlYWNoIHVzZSBhbmQgc2VlCisgICAgIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBub25kZWJ1ZyB1c2VzLiAgKi8KKyAgaWYgKCFNQVlfSEFWRV9ERUJVR19TVE1UUykKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgcmV0dXJuIGhhc196ZXJvX3VzZXNfMSAocHRyKTsKK30KKworLyogUmV0dXJuIHRydWUgaWYgVkFSIGhhcyBhIHNpbmdsZSBub25kZWJ1ZyB1c2UuICAqLworc3RhdGljIGlubGluZSBib29sCitoYXNfc2luZ2xlX3VzZSAoY29uc3RfdHJlZSB2YXIpCit7CisgIGNvbnN0IHNzYV91c2Vfb3BlcmFuZF90ICpjb25zdCBwdHIgPSAmKFNTQV9OQU1FX0lNTV9VU0VfTk9ERSAodmFyKSk7CisKKyAgLyogSWYgdGhlcmUgYXJlbid0IGFueSB1c2VzIHdoYXRzb2V2ZXIsIHdlJ3JlIGRvbmUuICAqLworICBpZiAocHRyID09IHB0ci0+bmV4dCkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgLyogSWYgdGhlcmUncyBhIHNpbmdsZSB1c2UsIGNoZWNrIHRoYXQgaXQncyBub3QgYSBkZWJ1ZyBzdG10LiAgKi8KKyAgaWYgKHB0ciA9PSBwdHItPm5leHQtPm5leHQpCisgICAgcmV0dXJuICFpc19naW1wbGVfZGVidWcgKFVTRV9TVE1UIChwdHItPm5leHQpKTsKKworICAvKiBJZiB0aGVyZSBhcmUgZGVidWcgc3RtdHMsIHdlIGhhdmUgdG8gbG9vayBhdCBlYWNoIG9mIHRoZW0uICAqLworICBpZiAoIU1BWV9IQVZFX0RFQlVHX1NUTVRTKQorICAgIHJldHVybiBmYWxzZTsKKworICByZXR1cm4gc2luZ2xlX2ltbV91c2VfMSAocHRyLCBOVUxMLCBOVUxMKTsKK30KKworCisvKiBJZiBWQVIgaGFzIG9ubHkgYSBzaW5nbGUgaW1tZWRpYXRlIG5vbmRlYnVnIHVzZSwgcmV0dXJuIHRydWUsIGFuZAorICAgc2V0IFVTRV9QIGFuZCBTVE1UIHRvIHRoZSB1c2UgcG9pbnRlciBhbmQgc3RtdCBvZiBvY2N1cnJlbmNlLiAgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorc2luZ2xlX2ltbV91c2UgKGNvbnN0X3RyZWUgdmFyLCB1c2Vfb3BlcmFuZF9wICp1c2VfcCwgZ2ltcGxlICpzdG10KQoreworICBjb25zdCBzc2FfdXNlX29wZXJhbmRfdCAqY29uc3QgcHRyID0gJihTU0FfTkFNRV9JTU1fVVNFX05PREUgKHZhcikpOworCisgIC8qIElmIHRoZXJlIGFyZW4ndCBhbnkgdXNlcyB3aGF0c29ldmVyLCB3ZSdyZSBkb25lLiAgKi8KKyAgaWYgKHB0ciA9PSBwdHItPm5leHQpCisgICAgeworICAgIHJldHVybl9mYWxzZToKKyAgICAgICp1c2VfcCA9IE5VTExfVVNFX09QRVJBTkRfUDsKKyAgICAgICpzdG10ID0gTlVMTDsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgLyogSWYgdGhlcmUncyBhIHNpbmdsZSB1c2UsIGNoZWNrIHRoYXQgaXQncyBub3QgYSBkZWJ1ZyBzdG10LiAgKi8KKyAgaWYgKHB0ciA9PSBwdHItPm5leHQtPm5leHQpCisgICAgeworICAgICAgaWYgKCFpc19naW1wbGVfZGVidWcgKFVTRV9TVE1UIChwdHItPm5leHQpKSkKKwl7CisJICAqdXNlX3AgPSBwdHItPm5leHQ7CisJICAqc3RtdCA9IHB0ci0+bmV4dC0+bG9jLnN0bXQ7CisJICByZXR1cm4gdHJ1ZTsKKwl9CisgICAgICBlbHNlCisJZ290byByZXR1cm5fZmFsc2U7CisgICAgfQorCisgIC8qIElmIHRoZXJlIGFyZSBkZWJ1ZyBzdG10cywgd2UgaGF2ZSB0byBsb29rIGF0IGVhY2ggb2YgdGhlbS4gICovCisgIGlmICghTUFZX0hBVkVfREVCVUdfU1RNVFMpCisgICAgZ290byByZXR1cm5fZmFsc2U7CisKKyAgcmV0dXJuIHNpbmdsZV9pbW1fdXNlXzEgKHB0ciwgdXNlX3AsIHN0bXQpOworfQorCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBub25kZWJ1ZyBpbW1lZGlhdGUgdXNlcyBvZiBWQVIuICAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK251bV9pbW1fdXNlcyAoY29uc3RfdHJlZSB2YXIpCit7CisgIGNvbnN0IHNzYV91c2Vfb3BlcmFuZF90ICpjb25zdCBzdGFydCA9ICYoU1NBX05BTUVfSU1NX1VTRV9OT0RFICh2YXIpKTsKKyAgY29uc3Qgc3NhX3VzZV9vcGVyYW5kX3QgKnB0cjsKKyAgdW5zaWduZWQgaW50IG51bSA9IDA7CisKKyAgaWYgKCFNQVlfSEFWRV9ERUJVR19TVE1UUykKKyAgICBmb3IgKHB0ciA9IHN0YXJ0LT5uZXh0OyBwdHIgIT0gc3RhcnQ7IHB0ciA9IHB0ci0+bmV4dCkKKyAgICAgIG51bSsrOworICBlbHNlCisgICAgZm9yIChwdHIgPSBzdGFydC0+bmV4dDsgcHRyICE9IHN0YXJ0OyBwdHIgPSBwdHItPm5leHQpCisgICAgICBpZiAoIWlzX2dpbXBsZV9kZWJ1ZyAoVVNFX1NUTVQgKHB0cikpKQorCW51bSsrOworCisgIHJldHVybiBudW07Cit9CisKKy8qIFJldHVybiB0aGUgdHJlZSBwb2ludGVkLXRvIGJ5IFVTRS4gICovCitzdGF0aWMgaW5saW5lIHRyZWUKK2dldF91c2VfZnJvbV9wdHIgKHVzZV9vcGVyYW5kX3AgdXNlKQoreworICByZXR1cm4gKih1c2UtPnVzZSk7Cit9CisKKy8qIFJldHVybiB0aGUgdHJlZSBwb2ludGVkLXRvIGJ5IERFRi4gICovCitzdGF0aWMgaW5saW5lIHRyZWUKK2dldF9kZWZfZnJvbV9wdHIgKGRlZl9vcGVyYW5kX3AgZGVmKQoreworICByZXR1cm4gKmRlZjsKK30KKworLyogUmV0dXJuIGEgdXNlX29wZXJhbmRfcCBwb2ludGVyIGZvciBhcmd1bWVudCBJIG9mIFBISSBub2RlIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB1c2Vfb3BlcmFuZF9wCitnaW1wbGVfcGhpX2FyZ19pbW1fdXNlX3B0ciAoZ2ltcGxlIGdzLCBpbnQgaSkKK3sKKyAgcmV0dXJuICZnaW1wbGVfcGhpX2FyZyAoZ3MsIGkpLT5pbW1fdXNlOworfQorCisvKiBSZXR1cm4gdGhlIHRyZWUgb3BlcmFuZCBmb3IgYXJndW1lbnQgSSBvZiBQSEkgbm9kZSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX3BoaV9hcmdfZGVmIChnaW1wbGUgZ3MsIHNpemVfdCBpbmRleCkKK3sKKyAgc3RydWN0IHBoaV9hcmdfZCAqcGQgPSBnaW1wbGVfcGhpX2FyZyAoZ3MsIGluZGV4KTsKKyAgcmV0dXJuIGdldF91c2VfZnJvbV9wdHIgKCZwZC0+aW1tX3VzZSk7Cit9CisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRyZWUgb3BlcmFuZCBmb3IgYXJndW1lbnQgSSBvZiBQSEkgbm9kZSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfcGhpX2FyZ19kZWZfcHRyIChnaW1wbGUgZ3MsIHNpemVfdCBpbmRleCkKK3sKKyAgcmV0dXJuICZnaW1wbGVfcGhpX2FyZyAoZ3MsIGluZGV4KS0+ZGVmOworfQorCisvKiBSZXR1cm4gdGhlIGVkZ2UgYXNzb2NpYXRlZCB3aXRoIGFyZ3VtZW50IEkgb2YgcGhpIG5vZGUgR1MuICAqLworCitzdGF0aWMgaW5saW5lIGVkZ2UKK2dpbXBsZV9waGlfYXJnX2VkZ2UgKGdpbXBsZSBncywgc2l6ZV90IGkpCit7CisgIHJldHVybiBFREdFX1BSRUQgKGdpbXBsZV9iYiAoZ3MpLCBpKTsKK30KKworLyogUmV0dXJuIHRoZSBzb3VyY2UgbG9jYXRpb24gb2YgZ2ltcGxlIGFyZ3VtZW50IEkgb2YgcGhpIG5vZGUgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHNvdXJjZV9sb2NhdGlvbgorZ2ltcGxlX3BoaV9hcmdfbG9jYXRpb24gKGdpbXBsZSBncywgc2l6ZV90IGkpCit7CisgIHJldHVybiBnaW1wbGVfcGhpX2FyZyAoZ3MsIGkpLT5sb2N1czsKK30KKworLyogUmV0dXJuIHRoZSBzb3VyY2UgbG9jYXRpb24gb2YgdGhlIGFyZ3VtZW50IG9uIGVkZ2UgRSBvZiBwaGkgbm9kZSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgc291cmNlX2xvY2F0aW9uCitnaW1wbGVfcGhpX2FyZ19sb2NhdGlvbl9mcm9tX2VkZ2UgKGdpbXBsZSBncywgZWRnZSBlKQoreworICByZXR1cm4gZ2ltcGxlX3BoaV9hcmcgKGdzLCBlLT5kZXN0X2lkeCktPmxvY3VzOworfQorCisvKiBTZXQgdGhlIHNvdXJjZSBsb2NhdGlvbiBvZiBnaW1wbGUgYXJndW1lbnQgSSBvZiBwaGkgbm9kZSBHUyB0byBMT0MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9waGlfYXJnX3NldF9sb2NhdGlvbiAoZ2ltcGxlIGdzLCBzaXplX3QgaSwgc291cmNlX2xvY2F0aW9uIGxvYykKK3sKKyAgZ2ltcGxlX3BoaV9hcmcgKGdzLCBpKS0+bG9jdXMgPSBsb2M7Cit9CisKKy8qIFJldHVybiBUUlVFIGlmIGFyZ3VtZW50IEkgb2YgcGhpIG5vZGUgR1MgaGFzIGEgbG9jYXRpb24gcmVjb3JkLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitnaW1wbGVfcGhpX2FyZ19oYXNfbG9jYXRpb24gKGdpbXBsZSBncywgc2l6ZV90IGkpCit7CisgIHJldHVybiBnaW1wbGVfcGhpX2FyZ19sb2NhdGlvbiAoZ3MsIGkpICE9IFVOS05PV05fTE9DQVRJT047Cit9CisKKworLyogUmV0dXJuIHRoZSBQSEkgbm9kZXMgZm9yIGJhc2ljIGJsb2NrIEJCLCBvciBOVUxMIGlmIHRoZXJlIGFyZSBubworICAgUEhJIG5vZGVzLiAgKi8KK3N0YXRpYyBpbmxpbmUgZ2ltcGxlX3NlcQorcGhpX25vZGVzIChjb25zdF9iYXNpY19ibG9jayBiYikKK3sKKyAgZ2NjX2Fzc2VydCAoIShiYi0+ZmxhZ3MgJiBCQl9SVEwpKTsKKyAgaWYgKCFiYi0+aWwuZ2ltcGxlKQorICAgIHJldHVybiBOVUxMOworICByZXR1cm4gYmItPmlsLmdpbXBsZS0+cGhpX25vZGVzOworfQorCisvKiBTZXQgUEhJIG5vZGVzIG9mIGEgYmFzaWMgYmxvY2sgQkIgdG8gU0VRLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitzZXRfcGhpX25vZGVzIChiYXNpY19ibG9jayBiYiwgZ2ltcGxlX3NlcSBzZXEpCit7CisgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGk7CisKKyAgZ2NjX2Fzc2VydCAoIShiYi0+ZmxhZ3MgJiBCQl9SVEwpKTsKKyAgYmItPmlsLmdpbXBsZS0+cGhpX25vZGVzID0gc2VxOworICBpZiAoc2VxKQorICAgIGZvciAoaSA9IGdzaV9zdGFydCAoc2VxKTsgIWdzaV9lbmRfcCAoaSk7IGdzaV9uZXh0ICgmaSkpCisgICAgICBnaW1wbGVfc2V0X2JiIChnc2lfc3RtdCAoaSksIGJiKTsKK30KKworLyogUmV0dXJuIHRoZSBwaGkgYXJndW1lbnQgd2hpY2ggY29udGFpbnMgdGhlIHNwZWNpZmllZCB1c2UuICAqLworCitzdGF0aWMgaW5saW5lIGludAorcGhpX2FyZ19pbmRleF9mcm9tX3VzZSAodXNlX29wZXJhbmRfcCB1c2UpCit7CisgIHN0cnVjdCBwaGlfYXJnX2QgKmVsZW1lbnQsICpyb290OworICBzaXplX3QgaW5kZXg7CisgIGdpbXBsZSBwaGk7CisKKyAgLyogU2luY2UgdGhlIHVzZSBpcyB0aGUgZmlyc3QgdGhpbmcgaW4gYSBQSEkgYXJndW1lbnQgZWxlbWVudCwgd2UgY2FuCisgICAgIGNhbGN1bGF0ZSBpdHMgaW5kZXggYmFzZWQgb24gY2FzdGluZyBpdCB0byBhbiBhcmd1bWVudCwgYW5kIHBlcmZvcm1pbmcKKyAgICAgcG9pbnRlciBhcml0aG1ldGljLiAgKi8KKworICBwaGkgPSBVU0VfU1RNVCAodXNlKTsKKyAgZ2NjX2Fzc2VydCAoZ2ltcGxlX2NvZGUgKHBoaSkgPT0gR0lNUExFX1BISSk7CisKKyAgZWxlbWVudCA9IChzdHJ1Y3QgcGhpX2FyZ19kICopdXNlOworICByb290ID0gZ2ltcGxlX3BoaV9hcmcgKHBoaSwgMCk7CisgIGluZGV4ID0gZWxlbWVudCAtIHJvb3Q7CisKKyNpZmRlZiBFTkFCTEVfQ0hFQ0tJTkcKKyAgLyogTWFrZSBzdXJlIHRoZSBjYWxjdWxhdGlvbiBkb2Vzbid0IGhhdmUgYW55IGxlZnRvdmVyIGJ5dGVzLiAgSWYgaXQgZG9lcywKKyAgICAgdGhlbiBpbW1fdXNlIGlzIGxpa2VseSBub3QgdGhlIGZpcnN0IGVsZW1lbnQgaW4gcGhpX2FyZ19kLiAgKi8KKyAgZ2NjX2Fzc2VydCAoKCgoY2hhciAqKWVsZW1lbnQgLSAoY2hhciAqKXJvb3QpCisJICAgICAgICUgc2l6ZW9mIChzdHJ1Y3QgcGhpX2FyZ19kKSkgPT0gMAorCSAgICAgICYmIGluZGV4IDwgZ2ltcGxlX3BoaV9jYXBhY2l0eSAocGhpKSk7CisjZW5kaWYKKworIHJldHVybiBpbmRleDsKK30KKworLyogTWFyayBWQVIgYXMgdXNlZCwgc28gdGhhdCBpdCdsbCBiZSBwcmVzZXJ2ZWQgZHVyaW5nIHJ0bCBleHBhbnNpb24uICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK3NldF9pc191c2VkICh0cmVlIHZhcikKK3sKKyAgdmFyX2Fubl90IGFubiA9IGdldF92YXJfYW5uICh2YXIpOworICBhbm4tPnVzZWQgPSAxOworfQorCisKKy8qIFJldHVybiB0cnVlIGlmIFQgKGFzc3VtZWQgdG8gYmUgYSBERUNMKSBpcyBhIGdsb2JhbCB2YXJpYWJsZS4KKyAgIEEgdmFyaWFibGUgaXMgY29uc2lkZXJlZCBnbG9iYWwgaWYgaXRzIHN0b3JhZ2UgaXMgbm90IGF1dG9tYXRpYy4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraXNfZ2xvYmFsX3ZhciAoY29uc3RfdHJlZSB0KQoreworICByZXR1cm4gKFRSRUVfU1RBVElDICh0KSB8fCBERUNMX0VYVEVSTkFMICh0KSk7Cit9CisKKworLyogUmV0dXJuIHRydWUgaWYgVkFSIG1heSBiZSBhbGlhc2VkLiAgQSB2YXJpYWJsZSBpcyBjb25zaWRlcmVkIGFzCisgICBtYXliZSBhbGlhc2VkIGlmIGl0IGhhcyBpdHMgYWRkcmVzcyB0YWtlbiBieSB0aGUgbG9jYWwgVFUKKyAgIG9yIHBvc3NpYmx5IGJ5IGFub3RoZXIgVFUgYW5kIG1pZ2h0IGJlIG1vZGlmaWVkIHRocm91Z2ggYSBwb2ludGVyLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCittYXlfYmVfYWxpYXNlZCAoY29uc3RfdHJlZSB2YXIpCit7CisgIHJldHVybiAoVFJFRV9DT0RFICh2YXIpICE9IENPTlNUX0RFQ0wKKwkgICYmICEoKFRSRUVfU1RBVElDICh2YXIpIHx8IFRSRUVfUFVCTElDICh2YXIpIHx8IERFQ0xfRVhURVJOQUwgKHZhcikpCisJICAgICAgICYmIFRSRUVfUkVBRE9OTFkgKHZhcikKKwkgICAgICAgJiYgIVRZUEVfTkVFRFNfQ09OU1RSVUNUSU5HIChUUkVFX1RZUEUgKHZhcikpKQorCSAgJiYgKFRSRUVfUFVCTElDICh2YXIpCisJICAgICAgfHwgREVDTF9FWFRFUk5BTCAodmFyKQorCSAgICAgIHx8IFRSRUVfQUREUkVTU0FCTEUgKHZhcikpKTsKK30KKworCisvKiBQSEkgbm9kZXMgc2hvdWxkIGNvbnRhaW4gb25seSBzc2FfbmFtZXMgYW5kIGludmFyaWFudHMuICBBIHRlc3QKKyAgIGZvciBzc2FfbmFtZSBpcyBkZWZpbml0ZWx5IHNpbXBsZXI7IGRvbid0IGxldCBpbnZhbGlkIGNvbnRlbnRzCisgICBzbGlwIGluIGluIHRoZSBtZWFudGltZS4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorcGhpX3NzYV9uYW1lX3AgKGNvbnN0X3RyZWUgdCkKK3sKKyAgaWYgKFRSRUVfQ09ERSAodCkgPT0gU1NBX05BTUUpCisgICAgcmV0dXJuIHRydWU7CisjaWZkZWYgRU5BQkxFX0NIRUNLSU5HCisgIGdjY19hc3NlcnQgKGlzX2dpbXBsZV9taW5faW52YXJpYW50ICh0KSk7CisjZW5kaWYKKyAgcmV0dXJuIGZhbHNlOworfQorCisKKy8qIFJldHVybnMgdGhlIGxvb3Agb2YgdGhlIHN0YXRlbWVudCBTVE1ULiAgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbG9vcCAqCitsb29wX2NvbnRhaW5pbmdfc3RtdCAoZ2ltcGxlIHN0bXQpCit7CisgIGJhc2ljX2Jsb2NrIGJiID0gZ2ltcGxlX2JiIChzdG10KTsKKyAgaWYgKCFiYikKKyAgICByZXR1cm4gTlVMTDsKKworICByZXR1cm4gYmItPmxvb3BfZmF0aGVyOworfQorCisKKy8qIFJldHVybiB0cnVlIGlmIFZBUiBpcyBjbG9iYmVyZWQgYnkgZnVuY3Rpb24gY2FsbHMuICAqLworc3RhdGljIGlubGluZSBib29sCitpc19jYWxsX2Nsb2JiZXJlZCAoY29uc3RfdHJlZSB2YXIpCit7CisgIHJldHVybiAoaXNfZ2xvYmFsX3ZhciAodmFyKQorCSAgfHwgKG1heV9iZV9hbGlhc2VkICh2YXIpCisJICAgICAgJiYgcHRfc29sdXRpb25faW5jbHVkZXMgKCZjZnVuLT5naW1wbGVfZGYtPmVzY2FwZWQsIHZhcikpKTsKK30KKworLyogUmV0dXJuIHRydWUgaWYgVkFSIGlzIHVzZWQgYnkgZnVuY3Rpb24gY2FsbHMuICAqLworc3RhdGljIGlubGluZSBib29sCitpc19jYWxsX3VzZWQgKGNvbnN0X3RyZWUgdmFyKQoreworICByZXR1cm4gKGlzX2NhbGxfY2xvYmJlcmVkICh2YXIpCisJICB8fCAobWF5X2JlX2FsaWFzZWQgKHZhcikKKwkgICAgICAmJiBwdF9zb2x1dGlvbl9pbmNsdWRlcyAoJmNmdW4tPmdpbXBsZV9kZi0+Y2FsbHVzZWQsIHZhcikpKTsKK30KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAqLworCisvKiBUaGUgZm9sbG93aW5nIHNldCBvZiByb3V0aW5lcyBhcmUgdXNlZCB0byBpdGVyYXRvciBvdmVyIHZhcmlvdXMgdHlwZSBvZgorICAgU1NBIG9wZXJhbmRzLiAgKi8KKworLyogUmV0dXJuIHRydWUgaWYgUFRSIGlzIGZpbmlzaGVkIGl0ZXJhdGluZy4gICovCitzdGF0aWMgaW5saW5lIGJvb2wKK29wX2l0ZXJfZG9uZSAoY29uc3Qgc3NhX29wX2l0ZXIgKnB0cikKK3sKKyAgcmV0dXJuIHB0ci0+ZG9uZTsKK30KKworLyogR2V0IHRoZSBuZXh0IGl0ZXJhdG9yIHVzZSB2YWx1ZSBmb3IgUFRSLiAgKi8KK3N0YXRpYyBpbmxpbmUgdXNlX29wZXJhbmRfcAorb3BfaXRlcl9uZXh0X3VzZSAoc3NhX29wX2l0ZXIgKnB0cikKK3sKKyAgdXNlX29wZXJhbmRfcCB1c2VfcDsKKyNpZmRlZiBFTkFCTEVfQ0hFQ0tJTkcKKyAgZ2NjX2Fzc2VydCAocHRyLT5pdGVyX3R5cGUgPT0gc3NhX29wX2l0ZXJfdXNlKTsKKyNlbmRpZgorICBpZiAocHRyLT51c2VzKQorICAgIHsKKyAgICAgIHVzZV9wID0gVVNFX09QX1BUUiAocHRyLT51c2VzKTsKKyAgICAgIHB0ci0+dXNlcyA9IHB0ci0+dXNlcy0+bmV4dDsKKyAgICAgIHJldHVybiB1c2VfcDsKKyAgICB9CisgIGlmIChwdHItPnBoaV9pIDwgcHRyLT5udW1fcGhpKQorICAgIHsKKyAgICAgIHJldHVybiBQSElfQVJHX0RFRl9QVFIgKHB0ci0+cGhpX3N0bXQsIChwdHItPnBoaV9pKSsrKTsKKyAgICB9CisgIHB0ci0+ZG9uZSA9IHRydWU7CisgIHJldHVybiBOVUxMX1VTRV9PUEVSQU5EX1A7Cit9CisKKy8qIEdldCB0aGUgbmV4dCBpdGVyYXRvciBkZWYgdmFsdWUgZm9yIFBUUi4gICovCitzdGF0aWMgaW5saW5lIGRlZl9vcGVyYW5kX3AKK29wX2l0ZXJfbmV4dF9kZWYgKHNzYV9vcF9pdGVyICpwdHIpCit7CisgIGRlZl9vcGVyYW5kX3AgZGVmX3A7CisjaWZkZWYgRU5BQkxFX0NIRUNLSU5HCisgIGdjY19hc3NlcnQgKHB0ci0+aXRlcl90eXBlID09IHNzYV9vcF9pdGVyX2RlZik7CisjZW5kaWYKKyAgaWYgKHB0ci0+ZGVmcykKKyAgICB7CisgICAgICBkZWZfcCA9IERFRl9PUF9QVFIgKHB0ci0+ZGVmcyk7CisgICAgICBwdHItPmRlZnMgPSBwdHItPmRlZnMtPm5leHQ7CisgICAgICByZXR1cm4gZGVmX3A7CisgICAgfQorICBwdHItPmRvbmUgPSB0cnVlOworICByZXR1cm4gTlVMTF9ERUZfT1BFUkFORF9QOworfQorCisvKiBHZXQgdGhlIG5leHQgaXRlcmF0b3IgdHJlZSB2YWx1ZSBmb3IgUFRSLiAgKi8KK3N0YXRpYyBpbmxpbmUgdHJlZQorb3BfaXRlcl9uZXh0X3RyZWUgKHNzYV9vcF9pdGVyICpwdHIpCit7CisgIHRyZWUgdmFsOworI2lmZGVmIEVOQUJMRV9DSEVDS0lORworICBnY2NfYXNzZXJ0IChwdHItPml0ZXJfdHlwZSA9PSBzc2Ffb3BfaXRlcl90cmVlKTsKKyNlbmRpZgorICBpZiAocHRyLT51c2VzKQorICAgIHsKKyAgICAgIHZhbCA9IFVTRV9PUCAocHRyLT51c2VzKTsKKyAgICAgIHB0ci0+dXNlcyA9IHB0ci0+dXNlcy0+bmV4dDsKKyAgICAgIHJldHVybiB2YWw7CisgICAgfQorICBpZiAocHRyLT5kZWZzKQorICAgIHsKKyAgICAgIHZhbCA9IERFRl9PUCAocHRyLT5kZWZzKTsKKyAgICAgIHB0ci0+ZGVmcyA9IHB0ci0+ZGVmcy0+bmV4dDsKKyAgICAgIHJldHVybiB2YWw7CisgICAgfQorCisgIHB0ci0+ZG9uZSA9IHRydWU7CisgIHJldHVybiBOVUxMX1RSRUU7CisKK30KKworCisvKiBUaGlzIGZ1bmN0aW9ucyBjbGVhcnMgdGhlIGl0ZXJhdG9yIFBUUiwgYW5kIG1hcmtzIGl0IGRvbmUuICBUaGlzIGlzIG5vcm1hbGx5CisgICB1c2VkIHRvIHByZXZlbnQgd2FybmluZ3MgaW4gdGhlIGNvbXBpbGUgYWJvdXQgbWlnaHQgYmUgdW5pbml0aWFsaXplZAorICAgY29tcG9uZW50cy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY2xlYXJfYW5kX2RvbmVfc3NhX2l0ZXIgKHNzYV9vcF9pdGVyICpwdHIpCit7CisgIHB0ci0+ZGVmcyA9IE5VTEw7CisgIHB0ci0+dXNlcyA9IE5VTEw7CisgIHB0ci0+aXRlcl90eXBlID0gc3NhX29wX2l0ZXJfbm9uZTsKKyAgcHRyLT5waGlfaSA9IDA7CisgIHB0ci0+bnVtX3BoaSA9IDA7CisgIHB0ci0+cGhpX3N0bXQgPSBOVUxMOworICBwdHItPmRvbmUgPSB0cnVlOworfQorCisvKiBJbml0aWFsaXplIHRoZSBpdGVyYXRvciBQVFIgdG8gdGhlIHZpcnR1YWwgZGVmcyBpbiBTVE1ULiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorb3BfaXRlcl9pbml0IChzc2Ffb3BfaXRlciAqcHRyLCBnaW1wbGUgc3RtdCwgaW50IGZsYWdzKQoreworICAvKiBXZSBkbyBub3Qgc3VwcG9ydCBpdGVyYXRpbmcgb3ZlciB2aXJ0dWFsIGRlZnMgb3IgdXNlcyB3aXRob3V0CisgICAgIGl0ZXJhdGluZyBvdmVyIGRlZnMgb3IgdXNlcyBhdCB0aGUgc2FtZSB0aW1lLiAgKi8KKyAgZ2NjX2Fzc2VydCAoKCEoZmxhZ3MgJiBTU0FfT1BfVkRFRikgfHwgKGZsYWdzICYgU1NBX09QX0RFRikpCisJICAgICAgJiYgKCEoZmxhZ3MgJiBTU0FfT1BfVlVTRSkgfHwgKGZsYWdzICYgU1NBX09QX1VTRSkpKTsKKyAgcHRyLT5kZWZzID0gKGZsYWdzICYgKFNTQV9PUF9ERUZ8U1NBX09QX1ZERUYpKSA/IGdpbXBsZV9kZWZfb3BzIChzdG10KSA6IE5VTEw7CisgIGlmICghKGZsYWdzICYgU1NBX09QX1ZERUYpCisgICAgICAmJiBwdHItPmRlZnMKKyAgICAgICYmIGdpbXBsZV92ZGVmIChzdG10KSAhPSBOVUxMX1RSRUUpCisgICAgcHRyLT5kZWZzID0gcHRyLT5kZWZzLT5uZXh0OworICBwdHItPnVzZXMgPSAoZmxhZ3MgJiAoU1NBX09QX1VTRXxTU0FfT1BfVlVTRSkpID8gZ2ltcGxlX3VzZV9vcHMgKHN0bXQpIDogTlVMTDsKKyAgaWYgKCEoZmxhZ3MgJiBTU0FfT1BfVlVTRSkKKyAgICAgICYmIHB0ci0+dXNlcworICAgICAgJiYgZ2ltcGxlX3Z1c2UgKHN0bXQpICE9IE5VTExfVFJFRSkKKyAgICBwdHItPnVzZXMgPSBwdHItPnVzZXMtPm5leHQ7CisgIHB0ci0+ZG9uZSA9IGZhbHNlOworCisgIHB0ci0+cGhpX2kgPSAwOworICBwdHItPm51bV9waGkgPSAwOworICBwdHItPnBoaV9zdG10ID0gTlVMTDsKK30KKworLyogSW5pdGlhbGl6ZSBpdGVyYXRvciBQVFIgdG8gdGhlIHVzZSBvcGVyYW5kcyBpbiBTVE1UIGJhc2VkIG9uIEZMQUdTLiBSZXR1cm4KKyAgIHRoZSBmaXJzdCB1c2UuICAqLworc3RhdGljIGlubGluZSB1c2Vfb3BlcmFuZF9wCitvcF9pdGVyX2luaXRfdXNlIChzc2Ffb3BfaXRlciAqcHRyLCBnaW1wbGUgc3RtdCwgaW50IGZsYWdzKQoreworICBnY2NfYXNzZXJ0ICgoZmxhZ3MgJiBTU0FfT1BfQUxMX0RFRlMpID09IDAKKwkgICAgICAmJiAoZmxhZ3MgJiBTU0FfT1BfVVNFKSk7CisgIG9wX2l0ZXJfaW5pdCAocHRyLCBzdG10LCBmbGFncyk7CisgIHB0ci0+aXRlcl90eXBlID0gc3NhX29wX2l0ZXJfdXNlOworICByZXR1cm4gb3BfaXRlcl9uZXh0X3VzZSAocHRyKTsKK30KKworLyogSW5pdGlhbGl6ZSBpdGVyYXRvciBQVFIgdG8gdGhlIGRlZiBvcGVyYW5kcyBpbiBTVE1UIGJhc2VkIG9uIEZMQUdTLiBSZXR1cm4KKyAgIHRoZSBmaXJzdCBkZWYuICAqLworc3RhdGljIGlubGluZSBkZWZfb3BlcmFuZF9wCitvcF9pdGVyX2luaXRfZGVmIChzc2Ffb3BfaXRlciAqcHRyLCBnaW1wbGUgc3RtdCwgaW50IGZsYWdzKQoreworICBnY2NfYXNzZXJ0ICgoZmxhZ3MgJiBTU0FfT1BfQUxMX1VTRVMpID09IDAKKwkgICAgICAmJiAoZmxhZ3MgJiBTU0FfT1BfREVGKSk7CisgIG9wX2l0ZXJfaW5pdCAocHRyLCBzdG10LCBmbGFncyk7CisgIHB0ci0+aXRlcl90eXBlID0gc3NhX29wX2l0ZXJfZGVmOworICByZXR1cm4gb3BfaXRlcl9uZXh0X2RlZiAocHRyKTsKK30KKworLyogSW5pdGlhbGl6ZSBpdGVyYXRvciBQVFIgdG8gdGhlIG9wZXJhbmRzIGluIFNUTVQgYmFzZWQgb24gRkxBR1MuIFJldHVybgorICAgdGhlIGZpcnN0IG9wZXJhbmQgYXMgYSB0cmVlLiAgKi8KK3N0YXRpYyBpbmxpbmUgdHJlZQorb3BfaXRlcl9pbml0X3RyZWUgKHNzYV9vcF9pdGVyICpwdHIsIGdpbXBsZSBzdG10LCBpbnQgZmxhZ3MpCit7CisgIG9wX2l0ZXJfaW5pdCAocHRyLCBzdG10LCBmbGFncyk7CisgIHB0ci0+aXRlcl90eXBlID0gc3NhX29wX2l0ZXJfdHJlZTsKKyAgcmV0dXJuIG9wX2l0ZXJfbmV4dF90cmVlIChwdHIpOworfQorCisKKy8qIElmIHRoZXJlIGlzIGEgc2luZ2xlIG9wZXJhbmQgaW4gU1RNVCBtYXRjaGluZyBGTEFHUywgcmV0dXJuIGl0LiAgT3RoZXJ3aXNlCisgICByZXR1cm4gTlVMTC4gICovCitzdGF0aWMgaW5saW5lIHRyZWUKK3NpbmdsZV9zc2FfdHJlZV9vcGVyYW5kIChnaW1wbGUgc3RtdCwgaW50IGZsYWdzKQoreworICB0cmVlIHZhcjsKKyAgc3NhX29wX2l0ZXIgaXRlcjsKKworICB2YXIgPSBvcF9pdGVyX2luaXRfdHJlZSAoJml0ZXIsIHN0bXQsIGZsYWdzKTsKKyAgaWYgKG9wX2l0ZXJfZG9uZSAoJml0ZXIpKQorICAgIHJldHVybiBOVUxMX1RSRUU7CisgIG9wX2l0ZXJfbmV4dF90cmVlICgmaXRlcik7CisgIGlmIChvcF9pdGVyX2RvbmUgKCZpdGVyKSkKKyAgICByZXR1cm4gdmFyOworICByZXR1cm4gTlVMTF9UUkVFOworfQorCisKKy8qIElmIHRoZXJlIGlzIGEgc2luZ2xlIG9wZXJhbmQgaW4gU1RNVCBtYXRjaGluZyBGTEFHUywgcmV0dXJuIGl0LiAgT3RoZXJ3aXNlCisgICByZXR1cm4gTlVMTC4gICovCitzdGF0aWMgaW5saW5lIHVzZV9vcGVyYW5kX3AKK3NpbmdsZV9zc2FfdXNlX29wZXJhbmQgKGdpbXBsZSBzdG10LCBpbnQgZmxhZ3MpCit7CisgIHVzZV9vcGVyYW5kX3AgdmFyOworICBzc2Ffb3BfaXRlciBpdGVyOworCisgIHZhciA9IG9wX2l0ZXJfaW5pdF91c2UgKCZpdGVyLCBzdG10LCBmbGFncyk7CisgIGlmIChvcF9pdGVyX2RvbmUgKCZpdGVyKSkKKyAgICByZXR1cm4gTlVMTF9VU0VfT1BFUkFORF9QOworICBvcF9pdGVyX25leHRfdXNlICgmaXRlcik7CisgIGlmIChvcF9pdGVyX2RvbmUgKCZpdGVyKSkKKyAgICByZXR1cm4gdmFyOworICByZXR1cm4gTlVMTF9VU0VfT1BFUkFORF9QOworfQorCisKKworLyogSWYgdGhlcmUgaXMgYSBzaW5nbGUgb3BlcmFuZCBpbiBTVE1UIG1hdGNoaW5nIEZMQUdTLCByZXR1cm4gaXQuICBPdGhlcndpc2UKKyAgIHJldHVybiBOVUxMLiAgKi8KK3N0YXRpYyBpbmxpbmUgZGVmX29wZXJhbmRfcAorc2luZ2xlX3NzYV9kZWZfb3BlcmFuZCAoZ2ltcGxlIHN0bXQsIGludCBmbGFncykKK3sKKyAgZGVmX29wZXJhbmRfcCB2YXI7CisgIHNzYV9vcF9pdGVyIGl0ZXI7CisKKyAgdmFyID0gb3BfaXRlcl9pbml0X2RlZiAoJml0ZXIsIHN0bXQsIGZsYWdzKTsKKyAgaWYgKG9wX2l0ZXJfZG9uZSAoJml0ZXIpKQorICAgIHJldHVybiBOVUxMX0RFRl9PUEVSQU5EX1A7CisgIG9wX2l0ZXJfbmV4dF9kZWYgKCZpdGVyKTsKKyAgaWYgKG9wX2l0ZXJfZG9uZSAoJml0ZXIpKQorICAgIHJldHVybiB2YXI7CisgIHJldHVybiBOVUxMX0RFRl9PUEVSQU5EX1A7Cit9CisKKworLyogUmV0dXJuIHRydWUgaWYgdGhlcmUgYXJlIHplcm8gb3BlcmFuZHMgaW4gU1RNVCBtYXRjaGluZyB0aGUgdHlwZQorICAgZ2l2ZW4gaW4gRkxBR1MuICAqLworc3RhdGljIGlubGluZSBib29sCit6ZXJvX3NzYV9vcGVyYW5kcyAoZ2ltcGxlIHN0bXQsIGludCBmbGFncykKK3sKKyAgc3NhX29wX2l0ZXIgaXRlcjsKKworICBvcF9pdGVyX2luaXRfdHJlZSAoJml0ZXIsIHN0bXQsIGZsYWdzKTsKKyAgcmV0dXJuIG9wX2l0ZXJfZG9uZSAoJml0ZXIpOworfQorCisKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIG9wZXJhbmRzIG1hdGNoaW5nIEZMQUdTIGluIFNUTVQuICAqLworc3RhdGljIGlubGluZSBpbnQKK251bV9zc2Ffb3BlcmFuZHMgKGdpbXBsZSBzdG10LCBpbnQgZmxhZ3MpCit7CisgIHNzYV9vcF9pdGVyIGl0ZXI7CisgIHRyZWUgdDsKKyAgaW50IG51bSA9IDA7CisKKyAgRk9SX0VBQ0hfU1NBX1RSRUVfT1BFUkFORCAodCwgc3RtdCwgaXRlciwgZmxhZ3MpCisgICAgbnVtKys7CisgIHJldHVybiBudW07Cit9CisKKworLyogRGVsaW5rIGFsbCBpbW1lZGlhdGVfdXNlIGluZm9ybWF0aW9uIGZvciBTVE1ULiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZGVsaW5rX3N0bXRfaW1tX3VzZSAoZ2ltcGxlIHN0bXQpCit7CisgICBzc2Ffb3BfaXRlciBpdGVyOworICAgdXNlX29wZXJhbmRfcCB1c2VfcDsKKworICAgaWYgKHNzYV9vcGVyYW5kc19hY3RpdmUgKCkpCisgICAgIEZPUl9FQUNIX1NTQV9VU0VfT1BFUkFORCAodXNlX3AsIHN0bXQsIGl0ZXIsIFNTQV9PUF9BTExfVVNFUykKKyAgICAgICBkZWxpbmtfaW1tX3VzZSAodXNlX3ApOworfQorCisKKy8qIElmIHRoZXJlIGlzIGEgc2luZ2xlIERFRiBpbiB0aGUgUEhJIG5vZGUgd2hpY2ggbWF0Y2hlcyBGTEFHLCByZXR1cm4gaXQuCisgICBPdGhlcndpc2UgcmV0dXJuIE5VTExfREVGX09QRVJBTkRfUC4gICovCitzdGF0aWMgaW5saW5lIHRyZWUKK3NpbmdsZV9waGlfZGVmIChnaW1wbGUgc3RtdCwgaW50IGZsYWdzKQoreworICB0cmVlIGRlZiA9IFBISV9SRVNVTFQgKHN0bXQpOworICBpZiAoKGZsYWdzICYgU1NBX09QX0RFRikgJiYgaXNfZ2ltcGxlX3JlZyAoZGVmKSkKKyAgICByZXR1cm4gZGVmOworICBpZiAoKGZsYWdzICYgU1NBX09QX1ZJUlRVQUxfREVGUykgJiYgIWlzX2dpbXBsZV9yZWcgKGRlZikpCisgICAgcmV0dXJuIGRlZjsKKyAgcmV0dXJuIE5VTExfVFJFRTsKK30KKworLyogSW5pdGlhbGl6ZSB0aGUgaXRlcmF0b3IgUFRSIGZvciB1c2VzIG1hdGNoaW5nIEZMQUdTIGluIFBISS4gIEZMQUdTIHNob3VsZAorICAgYmUgZWl0aGVyIFNTQV9PUF9VU0VTIG9yIFNTQV9PUF9WSVJUVUFMX1VTRVMuICAqLworc3RhdGljIGlubGluZSB1c2Vfb3BlcmFuZF9wCitvcF9pdGVyX2luaXRfcGhpdXNlIChzc2Ffb3BfaXRlciAqcHRyLCBnaW1wbGUgcGhpLCBpbnQgZmxhZ3MpCit7CisgIHRyZWUgcGhpX2RlZiA9IGdpbXBsZV9waGlfcmVzdWx0IChwaGkpOworICBpbnQgY29tcDsKKworICBjbGVhcl9hbmRfZG9uZV9zc2FfaXRlciAocHRyKTsKKyAgcHRyLT5kb25lID0gZmFsc2U7CisKKyAgZ2NjX2Fzc2VydCAoKGZsYWdzICYgKFNTQV9PUF9VU0UgfCBTU0FfT1BfVklSVFVBTF9VU0VTKSkgIT0gMCk7CisKKyAgY29tcCA9IChpc19naW1wbGVfcmVnIChwaGlfZGVmKSA/IFNTQV9PUF9VU0UgOiBTU0FfT1BfVklSVFVBTF9VU0VTKTsKKworICAvKiBJZiB0aGUgUEhJIG5vZGUgZG9lc24ndCB0aGUgb3BlcmFuZCB0eXBlIHdlIGNhcmUgYWJvdXQsIHdlJ3JlIGRvbmUuICAqLworICBpZiAoKGZsYWdzICYgY29tcCkgPT0gMCkKKyAgICB7CisgICAgICBwdHItPmRvbmUgPSB0cnVlOworICAgICAgcmV0dXJuIE5VTExfVVNFX09QRVJBTkRfUDsKKyAgICB9CisKKyAgcHRyLT5waGlfc3RtdCA9IHBoaTsKKyAgcHRyLT5udW1fcGhpID0gZ2ltcGxlX3BoaV9udW1fYXJncyAocGhpKTsKKyAgcHRyLT5pdGVyX3R5cGUgPSBzc2Ffb3BfaXRlcl91c2U7CisgIHJldHVybiBvcF9pdGVyX25leHRfdXNlIChwdHIpOworfQorCisKKy8qIFN0YXJ0IGFuIGl0ZXJhdG9yIGZvciBhIFBISSBkZWZpbml0aW9uLiAgKi8KKworc3RhdGljIGlubGluZSBkZWZfb3BlcmFuZF9wCitvcF9pdGVyX2luaXRfcGhpZGVmIChzc2Ffb3BfaXRlciAqcHRyLCBnaW1wbGUgcGhpLCBpbnQgZmxhZ3MpCit7CisgIHRyZWUgcGhpX2RlZiA9IFBISV9SRVNVTFQgKHBoaSk7CisgIGludCBjb21wOworCisgIGNsZWFyX2FuZF9kb25lX3NzYV9pdGVyIChwdHIpOworICBwdHItPmRvbmUgPSBmYWxzZTsKKworICBnY2NfYXNzZXJ0ICgoZmxhZ3MgJiAoU1NBX09QX0RFRiB8IFNTQV9PUF9WSVJUVUFMX0RFRlMpKSAhPSAwKTsKKworICBjb21wID0gKGlzX2dpbXBsZV9yZWcgKHBoaV9kZWYpID8gU1NBX09QX0RFRiA6IFNTQV9PUF9WSVJUVUFMX0RFRlMpOworCisgIC8qIElmIHRoZSBQSEkgbm9kZSBkb2Vzbid0IGhhdmUgdGhlIG9wZXJhbmQgdHlwZSB3ZSBjYXJlIGFib3V0LAorICAgICB3ZSdyZSBkb25lLiAgKi8KKyAgaWYgKChmbGFncyAmIGNvbXApID09IDApCisgICAgeworICAgICAgcHRyLT5kb25lID0gdHJ1ZTsKKyAgICAgIHJldHVybiBOVUxMX0RFRl9PUEVSQU5EX1A7CisgICAgfQorCisgIHB0ci0+aXRlcl90eXBlID0gc3NhX29wX2l0ZXJfZGVmOworICAvKiBUaGUgZmlyc3QgY2FsbCB0byBvcF9pdGVyX25leHRfZGVmIHdpbGwgdGVybWluYXRlIHRoZSBpdGVyYXRvciBzaW5jZQorICAgICBhbGwgdGhlIGZpZWxkcyBhcmUgTlVMTC4gIFNpbXBseSByZXR1cm4gdGhlIHJlc3VsdCBoZXJlIGFzIHRoZSBmaXJzdCBhbmQKKyAgICAgdGhlcmVmb3JlIG9ubHkgcmVzdWx0LiAgKi8KKyAgcmV0dXJuIFBISV9SRVNVTFRfUFRSIChwaGkpOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpcyBJTU0gaGFzIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgaW1tZWRpYXRlIHVzZSBzdG10IGxpc3QuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2VuZF9pbW1fdXNlX3N0bXRfcCAoY29uc3QgaW1tX3VzZV9pdGVyYXRvciAqaW1tKQoreworICByZXR1cm4gKGltbS0+aW1tX3VzZSA9PSBpbW0tPmVuZF9wKTsKK30KKworLyogRmluaXNoZWQgdGhlIHRyYXZlcnNlIG9mIGFuIGltbWVkaWF0ZSB1c2Ugc3RtdCBsaXN0IElNTSBieSByZW1vdmluZyB0aGUKKyAgIHBsYWNlaG9sZGVyIG5vZGUgZnJvbSB0aGUgbGlzdC4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZW5kX2ltbV91c2Vfc3RtdF90cmF2ZXJzZSAoaW1tX3VzZV9pdGVyYXRvciAqaW1tKQoreworICBkZWxpbmtfaW1tX3VzZSAoJihpbW0tPml0ZXJfbm9kZSkpOworfQorCisvKiBJbW1lZGlhdGUgdXNlIHRyYXZlcnNhbCBvZiB1c2VzIHdpdGhpbiBhIHN0bXQgcmVxdWlyZSB0aGF0IGFsbCB0aGUKKyAgIHVzZXMgb24gYSBzdG10IGJlIHNlcXVlbnRpYWxseSBsaXN0ZWQuICBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBidWlsZCB1cAorICAgdGhpcyBzZXF1ZW50aWFsIGxpc3QgYnkgYWRkaW5nIFVTRV9QIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbGlzdAorICAgY3VycmVudGx5IGRlbGltaXRlZCBieSBIRUFEIGFuZCBMQVNUX1AuICBUaGUgbmV3IExBU1RfUCB2YWx1ZSBpcworICAgcmV0dXJuZWQuICAqLworCitzdGF0aWMgaW5saW5lIHVzZV9vcGVyYW5kX3AKK21vdmVfdXNlX2FmdGVyX2hlYWQgKHVzZV9vcGVyYW5kX3AgdXNlX3AsIHVzZV9vcGVyYW5kX3AgaGVhZCwKKwkJICAgICAgdXNlX29wZXJhbmRfcCBsYXN0X3ApCit7CisjaWZkZWYgRU5BQkxFX0NIRUNLSU5HCisgIGdjY19hc3NlcnQgKFVTRV9GUk9NX1BUUiAodXNlX3ApID09IFVTRV9GUk9NX1BUUiAoaGVhZCkpOworI2VuZGlmCisgIC8qIFNraXAgaGVhZCB3aGVuIHdlIGZpbmQgaXQuICAqLworICBpZiAodXNlX3AgIT0gaGVhZCkKKyAgICB7CisgICAgICAvKiBJZiB1c2VfcCBpcyBhbHJlYWR5IGxpbmtlZCBpbiBhZnRlciBsYXN0X3AsIGNvbnRpbnVlLiAgKi8KKyAgICAgIGlmIChsYXN0X3AtPm5leHQgPT0gdXNlX3ApCisJbGFzdF9wID0gdXNlX3A7CisgICAgICBlbHNlCisJeworCSAgLyogRGVsaW5rIGZyb20gY3VycmVudCBsb2NhdGlvbiwgYW5kIGxpbmsgaW4gYXQgbGFzdF9wLiAgKi8KKwkgIGRlbGlua19pbW1fdXNlICh1c2VfcCk7CisJICBsaW5rX2ltbV91c2VfdG9fbGlzdCAodXNlX3AsIGxhc3RfcCk7CisJICBsYXN0X3AgPSB1c2VfcDsKKwl9CisgICAgfQorICByZXR1cm4gbGFzdF9wOworfQorCisKKy8qIFRoaXMgcm91dGluZSB3aWxsIHJlbGluayBhbGwgdXNlcyB3aXRoIHRoZSBzYW1lIHN0bXQgYXMgSEVBRCBpbnRvIHRoZSBsaXN0CisgICBpbW1lZGlhdGVseSBmb2xsb3dpbmcgSEVBRCBmb3IgaXRlcmF0b3IgSU1NLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitsaW5rX3VzZV9zdG10c19hZnRlciAodXNlX29wZXJhbmRfcCBoZWFkLCBpbW1fdXNlX2l0ZXJhdG9yICppbW0pCit7CisgIHVzZV9vcGVyYW5kX3AgdXNlX3A7CisgIHVzZV9vcGVyYW5kX3AgbGFzdF9wID0gaGVhZDsKKyAgZ2ltcGxlIGhlYWRfc3RtdCA9IFVTRV9TVE1UIChoZWFkKTsKKyAgdHJlZSB1c2UgPSBVU0VfRlJPTV9QVFIgKGhlYWQpOworICBzc2Ffb3BfaXRlciBvcF9pdGVyOworICBpbnQgZmxhZzsKKworICAvKiBPbmx5IGxvb2sgYXQgdmlydHVhbCBvciByZWFsIHVzZXMsIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBIRUFELiAgKi8KKyAgZmxhZyA9IChpc19naW1wbGVfcmVnICh1c2UpID8gU1NBX09QX1VTRSA6IFNTQV9PUF9WSVJUVUFMX1VTRVMpOworCisgIGlmIChnaW1wbGVfY29kZSAoaGVhZF9zdG10KSA9PSBHSU1QTEVfUEhJKQorICAgIHsKKyAgICAgIEZPUl9FQUNIX1BISV9BUkcgKHVzZV9wLCBoZWFkX3N0bXQsIG9wX2l0ZXIsIGZsYWcpCisJaWYgKFVTRV9GUk9NX1BUUiAodXNlX3ApID09IHVzZSkKKwkgIGxhc3RfcCA9IG1vdmVfdXNlX2FmdGVyX2hlYWQgKHVzZV9wLCBoZWFkLCBsYXN0X3ApOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChmbGFnID09IFNTQV9PUF9VU0UpCisJeworCSAgRk9SX0VBQ0hfU1NBX1VTRV9PUEVSQU5EICh1c2VfcCwgaGVhZF9zdG10LCBvcF9pdGVyLCBmbGFnKQorCSAgICBpZiAoVVNFX0ZST01fUFRSICh1c2VfcCkgPT0gdXNlKQorCSAgICAgIGxhc3RfcCA9IG1vdmVfdXNlX2FmdGVyX2hlYWQgKHVzZV9wLCBoZWFkLCBsYXN0X3ApOworCX0KKyAgICAgIGVsc2UgaWYgKCh1c2VfcCA9IGdpbXBsZV92dXNlX29wIChoZWFkX3N0bXQpKSAhPSBOVUxMX1VTRV9PUEVSQU5EX1ApCisJeworCSAgaWYgKFVTRV9GUk9NX1BUUiAodXNlX3ApID09IHVzZSkKKwkgICAgbGFzdF9wID0gbW92ZV91c2VfYWZ0ZXJfaGVhZCAodXNlX3AsIGhlYWQsIGxhc3RfcCk7CisJfQorICAgIH0KKyAgLyogTGluayBpdGVyIG5vZGUgaW4gYWZ0ZXIgbGFzdF9wLiAgKi8KKyAgaWYgKGltbS0+aXRlcl9ub2RlLnByZXYgIT0gTlVMTCkKKyAgICBkZWxpbmtfaW1tX3VzZSAoJmltbS0+aXRlcl9ub2RlKTsKKyAgbGlua19pbW1fdXNlX3RvX2xpc3QgKCYoaW1tLT5pdGVyX25vZGUpLCBsYXN0X3ApOworfQorCisvKiBJbml0aWFsaXplIElNTSB0byB0cmF2ZXJzZSBvdmVyIHVzZXMgb2YgVkFSLiAgUmV0dXJuIHRoZSBmaXJzdCBzdGF0ZW1lbnQuICAqLworc3RhdGljIGlubGluZSBnaW1wbGUKK2ZpcnN0X2ltbV91c2Vfc3RtdCAoaW1tX3VzZV9pdGVyYXRvciAqaW1tLCB0cmVlIHZhcikKK3sKKyAgaW1tLT5lbmRfcCA9ICYoU1NBX05BTUVfSU1NX1VTRV9OT0RFICh2YXIpKTsKKyAgaW1tLT5pbW1fdXNlID0gaW1tLT5lbmRfcC0+bmV4dDsKKyAgaW1tLT5uZXh0X2ltbV9uYW1lID0gTlVMTF9VU0VfT1BFUkFORF9QOworCisgIC8qIGl0ZXJfbm9kZSBpcyB1c2VkIGFzIGEgbWFya2VyIHdpdGhpbiB0aGUgaW1tZWRpYXRlIHVzZSBsaXN0IHRvIGluZGljYXRlCisgICAgIHdoZXJlIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgc3RtdCdzIHVzZXMgYXJlLiAgSW5pdGlhbGl6ZSBpdCB0byBOVUxMCisgICAgIHN0bXQgYW5kIHVzZSwgd2hpY2ggaW5kaWNhdGVzIGEgbWFya2VyIG5vZGUuICAqLworICBpbW0tPml0ZXJfbm9kZS5wcmV2ID0gTlVMTF9VU0VfT1BFUkFORF9QOworICBpbW0tPml0ZXJfbm9kZS5uZXh0ID0gTlVMTF9VU0VfT1BFUkFORF9QOworICBpbW0tPml0ZXJfbm9kZS5sb2Muc3RtdCA9IE5VTEw7CisgIGltbS0+aXRlcl9ub2RlLnVzZSA9IE5VTEw7CisKKyAgaWYgKGVuZF9pbW1fdXNlX3N0bXRfcCAoaW1tKSkKKyAgICByZXR1cm4gTlVMTDsKKworICBsaW5rX3VzZV9zdG10c19hZnRlciAoaW1tLT5pbW1fdXNlLCBpbW0pOworCisgIHJldHVybiBVU0VfU1RNVCAoaW1tLT5pbW1fdXNlKTsKK30KKworLyogQnVtcCBJTU0gdG8gdGhlIG5leHQgc3RtdCB3aGljaCBoYXMgYSB1c2Ugb2YgdmFyLiAgKi8KKworc3RhdGljIGlubGluZSBnaW1wbGUKK25leHRfaW1tX3VzZV9zdG10IChpbW1fdXNlX2l0ZXJhdG9yICppbW0pCit7CisgIGltbS0+aW1tX3VzZSA9IGltbS0+aXRlcl9ub2RlLm5leHQ7CisgIGlmIChlbmRfaW1tX3VzZV9zdG10X3AgKGltbSkpCisgICAgeworICAgICAgaWYgKGltbS0+aXRlcl9ub2RlLnByZXYgIT0gTlVMTCkKKwlkZWxpbmtfaW1tX3VzZSAoJmltbS0+aXRlcl9ub2RlKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICBsaW5rX3VzZV9zdG10c19hZnRlciAoaW1tLT5pbW1fdXNlLCBpbW0pOworICByZXR1cm4gVVNFX1NUTVQgKGltbS0+aW1tX3VzZSk7Cit9CisKKy8qIFRoaXMgcm91dGluZSB3aWxsIHJldHVybiB0aGUgZmlyc3QgdXNlIG9uIHRoZSBzdG10IElNTSBjdXJyZW50bHkgcmVmZXJzCisgICB0by4gICovCisKK3N0YXRpYyBpbmxpbmUgdXNlX29wZXJhbmRfcAorZmlyc3RfaW1tX3VzZV9vbl9zdG10IChpbW1fdXNlX2l0ZXJhdG9yICppbW0pCit7CisgIGltbS0+bmV4dF9pbW1fbmFtZSA9IGltbS0+aW1tX3VzZS0+bmV4dDsKKyAgcmV0dXJuIGltbS0+aW1tX3VzZTsKK30KKworLyogIFJldHVybiBUUlVFIGlmIHRoZSBsYXN0IHVzZSBvbiB0aGUgc3RtdCBJTU0gcmVmZXJzIHRvIGhhcyBiZWVuIHZpc2l0ZWQuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2VuZF9pbW1fdXNlX29uX3N0bXRfcCAoY29uc3QgaW1tX3VzZV9pdGVyYXRvciAqaW1tKQoreworICByZXR1cm4gKGltbS0+aW1tX3VzZSA9PSAmKGltbS0+aXRlcl9ub2RlKSk7Cit9CisKKy8qIEJ1bXAgdG8gdGhlIG5leHQgdXNlIG9uIHRoZSBzdG10IElNTSByZWZlcnMgdG8sIHJldHVybiBOVUxMIGlmIGRvbmUuICAqLworCitzdGF0aWMgaW5saW5lIHVzZV9vcGVyYW5kX3AKK25leHRfaW1tX3VzZV9vbl9zdG10IChpbW1fdXNlX2l0ZXJhdG9yICppbW0pCit7CisgIGltbS0+aW1tX3VzZSA9IGltbS0+bmV4dF9pbW1fbmFtZTsKKyAgaWYgKGVuZF9pbW1fdXNlX29uX3N0bXRfcCAoaW1tKSkKKyAgICByZXR1cm4gTlVMTF9VU0VfT1BFUkFORF9QOworICBlbHNlCisgICAgeworICAgICAgaW1tLT5uZXh0X2ltbV9uYW1lID0gaW1tLT5pbW1fdXNlLT5uZXh0OworICAgICAgcmV0dXJuIGltbS0+aW1tX3VzZTsKKyAgICB9Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIFZBUiBjYW5ub3QgYmUgbW9kaWZpZWQgYnkgdGhlIHByb2dyYW0uICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK3VubW9kaWZpYWJsZV92YXJfcCAoY29uc3RfdHJlZSB2YXIpCit7CisgIGlmIChUUkVFX0NPREUgKHZhcikgPT0gU1NBX05BTUUpCisgICAgdmFyID0gU1NBX05BTUVfVkFSICh2YXIpOworCisgIHJldHVybiBUUkVFX1JFQURPTkxZICh2YXIpICYmIChUUkVFX1NUQVRJQyAodmFyKSB8fCBERUNMX0VYVEVSTkFMICh2YXIpKTsKK30KKworLyogUmV0dXJuIHRydWUgaWYgUkVGLCBhbiBBUlJBWV9SRUYsIGhhcyBhbiBJTkRJUkVDVF9SRUYgc29tZXdoZXJlIGluIGl0LiAgKi8KKworc3RhdGljIGlubGluZSBib29sCithcnJheV9yZWZfY29udGFpbnNfaW5kaXJlY3RfcmVmIChjb25zdF90cmVlIHJlZikKK3sKKyAgZ2NjX2Fzc2VydCAoVFJFRV9DT0RFIChyZWYpID09IEFSUkFZX1JFRik7CisKKyAgZG8geworICAgIHJlZiA9IFRSRUVfT1BFUkFORCAocmVmLCAwKTsKKyAgfSB3aGlsZSAoaGFuZGxlZF9jb21wb25lbnRfcCAocmVmKSk7CisKKyAgcmV0dXJuIFRSRUVfQ09ERSAocmVmKSA9PSBJTkRJUkVDVF9SRUY7Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIFJFRiwgYSBoYW5kbGVkIGNvbXBvbmVudCByZWZlcmVuY2UsIGhhcyBhbiBBUlJBWV9SRUYKKyAgIHNvbWV3aGVyZSBpbiBpdC4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorcmVmX2NvbnRhaW5zX2FycmF5X3JlZiAoY29uc3RfdHJlZSByZWYpCit7CisgIGdjY19hc3NlcnQgKGhhbmRsZWRfY29tcG9uZW50X3AgKHJlZikpOworCisgIGRvIHsKKyAgICBpZiAoVFJFRV9DT0RFIChyZWYpID09IEFSUkFZX1JFRikKKyAgICAgIHJldHVybiB0cnVlOworICAgIHJlZiA9IFRSRUVfT1BFUkFORCAocmVmLCAwKTsKKyAgfSB3aGlsZSAoaGFuZGxlZF9jb21wb25lbnRfcCAocmVmKSk7CisKKyAgcmV0dXJuIGZhbHNlOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBSRUYgaGFzIGFuIFZJRVdfQ09OVkVSVF9FWFBSIHNvbWV3aGVyZSBpbiBpdC4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorY29udGFpbnNfdmlld19jb252ZXJ0X2V4cHJfcCAoY29uc3RfdHJlZSByZWYpCit7CisgIHdoaWxlIChoYW5kbGVkX2NvbXBvbmVudF9wIChyZWYpKQorICAgIHsKKyAgICAgIGlmIChUUkVFX0NPREUgKHJlZikgPT0gVklFV19DT05WRVJUX0VYUFIpCisJcmV0dXJuIHRydWU7CisgICAgICByZWYgPSBUUkVFX09QRVJBTkQgKHJlZiwgMCk7CisgICAgfQorCisgIHJldHVybiBmYWxzZTsKK30KKworLyogUmV0dXJuIHRydWUsIGlmIHRoZSB0d28gcmFuZ2VzIFtQT1MxLCBTSVpFMV0gYW5kIFtQT1MyLCBTSVpFMl0KKyAgIG92ZXJsYXAuICBTSVpFMSBhbmQvb3IgU0laRTIgY2FuIGJlICh1bnNpZ25lZCktMSBpbiB3aGljaCBjYXNlIHRoZQorICAgcmFuZ2UgaXMgb3Blbi1lbmRlZC4gIE90aGVyd2lzZSByZXR1cm4gZmFsc2UuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK3Jhbmdlc19vdmVybGFwX3AgKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgcG9zMSwKKwkJICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIHNpemUxLAorCQkgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgcG9zMiwKKwkJICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIHNpemUyKQoreworICBpZiAocG9zMSA+PSBwb3MyCisgICAgICAmJiAoc2l6ZTIgPT0gKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpLTEKKwkgIHx8IHBvczEgPCAocG9zMiArIHNpemUyKSkpCisgICAgcmV0dXJuIHRydWU7CisgIGlmIChwb3MyID49IHBvczEKKyAgICAgICYmIChzaXplMSA9PSAodW5zaWduZWQgSE9TVF9XSURFX0lOVCktMQorCSAgfHwgcG9zMiA8IChwb3MxICsgc2l6ZTEpKSkKKyAgICByZXR1cm4gdHJ1ZTsKKworICByZXR1cm4gZmFsc2U7Cit9CisKKy8qIEFjY2Vzc29yIHRvIHRyZWUtc3NhLW9wZXJhbmRzLmMgY2FjaGVzLiAgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNzYV9vcGVyYW5kcyAqCitnaW1wbGVfc3NhX29wZXJhbmRzIChjb25zdCBzdHJ1Y3QgZnVuY3Rpb24gKmZ1bikKK3sKKyAgcmV0dXJuICZmdW4tPmdpbXBsZV9kZi0+c3NhX29wZXJhbmRzOworfQorCisvKiBHaXZlbiBhbiBlZGdlX3Zhcl9tYXAgViwgcmV0dXJuIHRoZSBQSEkgYXJnIGRlZmluaXRpb24uICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK3JlZGlyZWN0X2VkZ2VfdmFyX21hcF9kZWYgKGVkZ2VfdmFyX21hcCAqdikKK3sKKyAgcmV0dXJuIHYtPmRlZjsKK30KKworLyogR2l2ZW4gYW4gZWRnZV92YXJfbWFwIFYsIHJldHVybiB0aGUgUEhJIHJlc3VsdC4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorcmVkaXJlY3RfZWRnZV92YXJfbWFwX3Jlc3VsdCAoZWRnZV92YXJfbWFwICp2KQoreworICByZXR1cm4gdi0+cmVzdWx0OworfQorCisvKiBHaXZlbiBhbiBlZGdlX3Zhcl9tYXAgViwgcmV0dXJuIHRoZSBQSEkgYXJnIGxvY2F0aW9uLiAgKi8KKworc3RhdGljIGlubGluZSBzb3VyY2VfbG9jYXRpb24KK3JlZGlyZWN0X2VkZ2VfdmFyX21hcF9sb2NhdGlvbiAoZWRnZV92YXJfbWFwICp2KQoreworICByZXR1cm4gdi0+bG9jdXM7Cit9CisKKworLyogUmV0dXJuIGFuIFNTQV9OQU1FIG5vZGUgZm9yIHZhcmlhYmxlIFZBUiBkZWZpbmVkIGluIHN0YXRlbWVudCBTVE1UCisgICBpbiBmdW5jdGlvbiBjZnVuLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCittYWtlX3NzYV9uYW1lICh0cmVlIHZhciwgZ2ltcGxlIHN0bXQpCit7CisgIHJldHVybiBtYWtlX3NzYV9uYW1lX2ZuIChjZnVuLCB2YXIsIHN0bXQpOworfQorCisjZW5kaWYgLyogX1RSRUVfRkxPV19JTkxJTkVfSCAgKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS90cmVlLWZsb3cuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS90cmVlLWZsb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmJkY2UxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3RyZWUtZmxvdy5oCkBAIC0wLDAgKzEsODgzIEBACisvKiBEYXRhIGFuZCBDb250cm9sIEZsb3cgQW5hbHlzaXMgZm9yIFRyZWVzLgorICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IERpZWdvIE5vdmlsbG8gPGRub3ZpbGxvQHJlZGhhdC5jb20+CisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9UUkVFX0ZMT1dfSAorI2RlZmluZSBfVFJFRV9GTE9XX0ggMQorCisjaW5jbHVkZSAiYml0bWFwLmgiCisjaW5jbHVkZSAiaGFyZC1yZWctc2V0LmgiCisjaW5jbHVkZSAiYmFzaWMtYmxvY2suaCIKKyNpbmNsdWRlICJoYXNodGFiLmgiCisjaW5jbHVkZSAiZ2ltcGxlLmgiCisjaW5jbHVkZSAidHJlZS1zc2Etb3BlcmFuZHMuaCIKKyNpbmNsdWRlICJjZ3JhcGguaCIKKyNpbmNsdWRlICJpcGEtcmVmZXJlbmNlLmgiCisjaW5jbHVkZSAidHJlZS1zc2EtYWxpYXMuaCIKKworCisvKiBHaW1wbGUgZGF0YWZsb3cgZGF0YXN0cnVjdHVyZS4gQWxsIHB1YmxpY2x5IGF2YWlsYWJsZSBmaWVsZHMgc2hhbGwgaGF2ZQorICAgZ2ltcGxlXyBhY2Nlc3NvciBkZWZpbmVkIGluIHRyZWUtZmxvdy1pbmxpbmUuaCwgYWxsIHB1YmxpY2x5IG1vZGlmaWFibGUKKyAgIGZpZWxkcyBzaG91bGQgaGF2ZSBnaW1wbGVfc2V0IGFjY2Vzc29yLiAgKi8KK3N0cnVjdCBHVFkoKCkpIGdpbXBsZV9kZiB7CisgIC8qIEFycmF5IG9mIGFsbCB2YXJpYWJsZXMgcmVmZXJlbmNlZCBpbiB0aGUgZnVuY3Rpb24uICAqLworICBodGFiX3QgR1RZKChwYXJhbV9pcyAodW5pb24gdHJlZV9ub2RlKSkpIHJlZmVyZW5jZWRfdmFyczsKKworICAvKiBBIHZlY3RvciBvZiBhbGwgdGhlIG5vcmV0dXJuIGNhbGxzIHBhc3NlZCB0byBtb2RpZnlfc3RtdC4KKyAgICAgY2xlYW51cF9jb250cm9sX2Zsb3cgdXNlcyBpdCB0byBkZXRlY3QgY2FzZXMgd2hlcmUgYSBtaWQtYmxvY2sKKyAgICAgaW5kaXJlY3QgY2FsbCBoYXMgYmVlbiB0dXJuZWQgaW50byBhIG5vcmV0dXJuIGNhbGwuICBXaGVuIHRoaXMKKyAgICAgaGFwcGVucywgYWxsIHRoZSBpbnN0cnVjdGlvbnMgYWZ0ZXIgdGhlIGNhbGwgYXJlIG5vIGxvbmdlcgorICAgICByZWFjaGFibGUgYW5kIG11c3QgYmUgZGVsZXRlZCBhcyBkZWFkLiAgKi8KKyAgVkVDKGdpbXBsZSxnYykgKm1vZGlmaWVkX25vcmV0dXJuX2NhbGxzOworCisgIC8qIEFycmF5IG9mIGFsbCBTU0FfTkFNRXMgdXNlZCBpbiB0aGUgZnVuY3Rpb24uICAqLworICBWRUModHJlZSxnYykgKnNzYV9uYW1lczsKKworICAvKiBBcnRpZmljaWFsIHZhcmlhYmxlIHVzZWQgZm9yIHRoZSB2aXJ0dWFsIG9wZXJhbmQgRlVEIGNoYWluLiAgKi8KKyAgdHJlZSB2b3A7CisKKyAgLyogVGhlIFBUQSBzb2x1dGlvbiBmb3IgdGhlIEVTQ0FQRUQgYXJ0aWZpY2lhbCB2YXJpYWJsZS4gICovCisgIHN0cnVjdCBwdF9zb2x1dGlvbiBlc2NhcGVkOworCisgIC8qIFRoZSBQVEEgc29sdXRpb24gZm9yIHRoZSBDQUxMVVNFRCBhcnRpZmljaWFsIHZhcmlhYmxlLiAgKi8KKyAgc3RydWN0IHB0X3NvbHV0aW9uIGNhbGx1c2VkOworCisgIC8qIEEgbWFwIG9mIGRlY2xzIHRvIGFydGlmaWNpYWwgc3NhLW5hbWVzIHRoYXQgcG9pbnQgdG8gdGhlIHBhcnRpdGlvbgorICAgICBvZiB0aGUgZGVjbC4gICovCisgIHN0cnVjdCBwb2ludGVyX21hcF90ICogR1RZKChza2lwKCIiKSkpIGRlY2xzX3RvX3BvaW50ZXJzOworCisgIC8qIEZyZWUgbGlzdCBvZiBTU0FfTkFNRXMuICAqLworICB0cmVlIGZyZWVfc3NhbmFtZXM7CisKKyAgLyogSGFzaHRhYmxlIGhvbGRpbmcgZGVmaW5pdGlvbiBmb3Igc3ltYm9sLiAgSWYgdGhpcyBmaWVsZCBpcyBub3QgTlVMTCwgaXQKKyAgICAgbWVhbnMgdGhhdCB0aGUgZmlyc3QgcmVmZXJlbmNlIHRvIHRoaXMgdmFyaWFibGUgaW4gdGhlIGZ1bmN0aW9uIGlzIGEKKyAgICAgVVNFIG9yIGEgVlVTRS4gIEluIHRob3NlIGNhc2VzLCB0aGUgU1NBIHJlbmFtZXIgY3JlYXRlcyBhbiBTU0EgbmFtZQorICAgICBmb3IgdGhpcyB2YXJpYWJsZSB3aXRoIGFuIGVtcHR5IGRlZmluaW5nIHN0YXRlbWVudC4gICovCisgIGh0YWJfdCBHVFkoKHBhcmFtX2lzICh1bmlvbiB0cmVlX25vZGUpKSkgZGVmYXVsdF9kZWZzOworCisgIC8qIFN5bWJvbHMgd2hvc2UgU1NBIGZvcm0gbmVlZHMgdG8gYmUgdXBkYXRlZCBvciBjcmVhdGVkIGZvciB0aGUgZmlyc3QKKyAgICAgdGltZS4gICovCisgIGJpdG1hcCBzeW1zX3RvX3JlbmFtZTsKKworICAvKiBUcnVlIGlmIHRoZSBjb2RlIGlzIGluIHNzYSBmb3JtLiAgKi8KKyAgdW5zaWduZWQgaW50IGluX3NzYV9wIDogMTsKKworICBzdHJ1Y3Qgc3NhX29wZXJhbmRzIHNzYV9vcGVyYW5kczsKK307CisKKy8qIEFjY2Vzc29ycyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuICBHZW5lcmljIGNvZGUgc2hvdWxkIHVzZSBhYnN0cmFjdGlvbgorICAgcHJvdmlkZWQgYnkgdHJlZS1mbG93LWlubGluZS5oIG9yIHNwZWNpZmljIG1vZHVsZXMuICAqLworI2RlZmluZSBGUkVFX1NTQU5BTUVTKGZ1bikgKGZ1biktPmdpbXBsZV9kZi0+ZnJlZV9zc2FuYW1lcworI2RlZmluZSBTU0FOQU1FUyhmdW4pIChmdW4pLT5naW1wbGVfZGYtPnNzYV9uYW1lcworI2RlZmluZSBNT0RJRklFRF9OT1JFVFVSTl9DQUxMUyhmdW4pIChmdW4pLT5naW1wbGVfZGYtPm1vZGlmaWVkX25vcmV0dXJuX2NhbGxzCisjZGVmaW5lIERFRkFVTFRfREVGUyhmdW4pIChmdW4pLT5naW1wbGVfZGYtPmRlZmF1bHRfZGVmcworI2RlZmluZSBTWU1TX1RPX1JFTkFNRShmdW4pIChmdW4pLT5naW1wbGVfZGYtPnN5bXNfdG9fcmVuYW1lCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGh0YWJfdCBodGFiOworICBQVFIgKnNsb3Q7CisgIFBUUiAqbGltaXQ7Cit9IGh0YWJfaXRlcmF0b3I7CisKKy8qIEl0ZXJhdGUgdGhyb3VnaCB0aGUgZWxlbWVudHMgb2YgaGFzaHRhYmxlIEhUQUIsIHVzaW5nIGh0YWJfaXRlcmF0b3IgSVRFUiwKKyAgIHN0b3JpbmcgZWFjaCBlbGVtZW50IGluIFJFU1VMVCwgd2hpY2ggaXMgb2YgdHlwZSBUWVBFLiAgKi8KKyNkZWZpbmUgRk9SX0VBQ0hfSFRBQl9FTEVNRU5UKEhUQUIsIFJFU1VMVCwgVFlQRSwgSVRFUikgXAorICBmb3IgKFJFU1VMVCA9IChUWVBFKSBmaXJzdF9odGFiX2VsZW1lbnQgKCYoSVRFUiksIChIVEFCKSk7IFwKKwkhZW5kX2h0YWJfcCAoJihJVEVSKSk7IFwKKwlSRVNVTFQgPSAoVFlQRSkgbmV4dF9odGFiX2VsZW1lbnQgKCYoSVRFUikpKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkgICAgICBBdHRyaWJ1dGVzIGZvciBTU0FfTkFNRXMuCisKKyAgTk9URTogVGhlc2Ugc3RydWN0dXJlcyBhcmUgc3RvcmVkIGluIHN0cnVjdCB0cmVlX3NzYV9uYW1lCisgIGJ1dCBhcmUgb25seSB1c2VkIGJ5IHRoZSB0cmVlIG9wdGltaXplcnMsIHNvIGl0IG1ha2VzIGJldHRlciBzZW5zZQorICB0byBkZWNsYXJlIHRoZW0gaGVyZSB0byBhdm9pZCByZWNvbXBpbGluZyB1bnJlbGF0ZWQgZmlsZXMgd2hlbgorICBtYWtpbmcgY2hhbmdlcy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEFsaWFzaW5nIGluZm9ybWF0aW9uIGZvciBTU0FfTkFNRXMgcmVwcmVzZW50aW5nIHBvaW50ZXIgdmFyaWFibGVzLiAgKi8KK3N0cnVjdCBHVFkoKCkpIHB0cl9pbmZvX2RlZgoreworICAvKiBUaGUgcG9pbnRzLXRvIHNvbHV0aW9uLCBUQkFBLXBydW5lZCBpZiB0aGUgcG9pbnRlciBpcyBkZXJlZmVyZW5jZWQuICAqLworICBzdHJ1Y3QgcHRfc29sdXRpb24gcHQ7Cit9OworCisKKy8qIEl0IGlzIGFkdmFudGFnZW91cyB0byBhdm9pZCB0aGluZ3MgbGlrZSBsaWZlIGFuYWx5c2lzIGZvciB2YXJpYWJsZXMgd2hpY2gKKyAgIGRvIG5vdCBuZWVkIFBISSBub2Rlcy4gIFRoaXMgZW51bSBkZXNjcmliZXMgd2hldGhlciBvciBub3QgYSBwYXJ0aWN1bGFyCisgICB2YXJpYWJsZSBtYXkgbmVlZCBhIFBISSBub2RlLiAgKi8KKworZW51bSBuZWVkX3BoaV9zdGF0ZSB7CisgIC8qIFRoaXMgaXMgdGhlIGRlZmF1bHQuICBJZiB3ZSBhcmUgc3RpbGwgaW4gdGhpcyBzdGF0ZSBhZnRlciBmaW5kaW5nCisgICAgIGFsbCB0aGUgZGVmaW5pdGlvbiBhbmQgdXNlIHNpdGVzLCB0aGVuIHdlIHdpbGwgYXNzdW1lIHRoZSB2YXJpYWJsZQorICAgICBuZWVkcyBQSEkgbm9kZXMuICBUaGlzIGlzIHByb2JhYmx5IGFuIG92ZXJseSBjb25zZXJ2YXRpdmUgYXNzdW1wdGlvbi4gICovCisgIE5FRURfUEhJX1NUQVRFX1VOS05PV04sCisKKyAgLyogVGhpcyBzdGF0ZSBpbmRpY2F0ZXMgdGhhdCB3ZSBoYXZlIHNlZW4gb25lIG9yIG1vcmUgc2V0cyBvZiB0aGUKKyAgICAgdmFyaWFibGUgaW4gYSBzaW5nbGUgYmFzaWMgYmxvY2sgYW5kIHRoYXQgdGhlIHNldHMgZG9taW5hdGUgYWxsCisgICAgIHVzZXMgc2VlbiBzbyBmYXIuICBJZiBhZnRlciBmaW5kaW5nIGFsbCBkZWZpbml0aW9uIGFuZCB1c2Ugc2l0ZXMKKyAgICAgd2UgYXJlIHN0aWxsIGluIHRoaXMgc3RhdGUsIHRoZW4gdGhlIHZhcmlhYmxlIGRvZXMgbm90IG5lZWQgYW55CisgICAgIFBISSBub2Rlcy4gICovCisgIE5FRURfUEhJX1NUQVRFX05PLAorCisgIC8qIFRoaXMgc3RhdGUgaW5kaWNhdGVzIHRoYXQgd2UgaGF2ZSBlaXRoZXIgc2VlbiBtdWx0aXBsZSBkZWZpbml0aW9ucyBvZgorICAgICB0aGUgdmFyaWFibGUgaW4gbXVsdGlwbGUgYmxvY2tzLCBvciB0aGF0IHdlIGVuY291bnRlcmVkIGEgdXNlIGluIGEKKyAgICAgYmxvY2sgdGhhdCB3YXMgbm90IGRvbWluYXRlZCBieSB0aGUgYmxvY2sgY29udGFpbmluZyB0aGUgc2V0KHMpIG9mCisgICAgIHRoaXMgdmFyaWFibGUuICBUaGlzIHZhcmlhYmxlIGlzIGFzc3VtZWQgdG8gbmVlZCBQSEkgbm9kZXMuICAqLworICBORUVEX1BISV9TVEFURV9NQVlCRQorfTsKKworCisvKiBUaGUgIm5vIGFsaWFzIiBhdHRyaWJ1dGUgYWxsb3dzIGFsaWFzIGFuYWx5c2lzIHRvIG1ha2UgbW9yZQorICAgYWdncmVzc2l2ZSBhc3N1bXB0aW9ucyB3aGVuIGFzc2lnbmluZyBhbGlhcyBzZXRzLCBjb21wdXRpbmcKKyAgIHBvaW50cy10byBpbmZvcm1hdGlvbiBhbmQgbWVtb3J5IHBhcnRpdGlvbnMuICBUaGVzZSBhdHRyaWJ1dGVzCisgICBhcmUgdGhlIHJlc3VsdCBvZiB1c2VyIGFubm90YXRpb25zIG9yIGZsYWdzIChlLmcuLAorICAgLWZhcmd1bWVudC1ub2FsaWFzKS4gICovCitlbnVtIG5vYWxpYXNfc3RhdGUgeworICAgIC8qIERlZmF1bHQgc3RhdGUuICBObyBzcGVjaWFsIGFzc3VtcHRpb25zIGNhbiBiZSBtYWRlIGFib3V0IHRoaXMKKyAgICAgICBzeW1ib2wuICAqLworICAgIE1BWV9BTElBUyA9IDAsCisKKyAgICAvKiBUaGUgc3ltYm9sIGRvZXMgbm90IGFsaWFzIHdpdGggb3RoZXIgc3ltYm9scyB0aGF0IGhhdmUgYQorICAgICAgIE5PX0FMSUFTKiBhdHRyaWJ1dGUuICAqLworICAgIE5PX0FMSUFTLAorCisgICAgLyogVGhlIHN5bWJvbCBkb2VzIG5vdCBhbGlhcyB3aXRoIG90aGVyIHN5bWJvbHMgdGhhdCBoYXZlIGEKKyAgICAgICBOT19BTElBUyosIGFuZCBpdCBtYXkgbm90IGFsaWFzIHdpdGggZ2xvYmFsIHN5bWJvbHMuICAqLworICAgIE5PX0FMSUFTX0dMT0JBTCwKKworICAgIC8qIFRoZSBzeW1ib2wgZG9lcyBub3QgYWxpYXMgd2l0aCBhbnkgb3RoZXIgc3ltYm9scy4gICovCisgICAgTk9fQUxJQVNfQU5ZVEhJTkcKK307CisKKworc3RydWN0IEdUWSgoKSkgdmFyX2Fubl9kIHsKKyAgLyogVXNlZCB3aGVuIGJ1aWxkaW5nIGJhc2UgdmFyaWFibGUgc3RydWN0dXJlcyBpbiBhIHZhcl9tYXAuICAqLworICB1bnNpZ25lZCBiYXNlX3Zhcl9wcm9jZXNzZWQgOiAxOworCisgIC8qIE5vbnplcm8gaWYgdGhpcyB2YXJpYWJsZSB3YXMgdXNlZCBhZnRlciBTU0Egb3B0aW1pemF0aW9ucyB3ZXJlCisgICAgIGFwcGxpZWQuICBXZSBzZXQgdGhpcyB3aGVuIHRyYW5zbGF0aW5nIG91dCBvZiBTU0EgZm9ybS4gICovCisgIHVuc2lnbmVkIHVzZWQgOiAxOworCisgIC8qIFRoaXMgZmllbGQgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSB2YXJpYWJsZSBtYXkgbmVlZCBQSEkgbm9kZXMuCisgICAgIFNlZSB0aGUgZW51bSdzIGRlZmluaXRpb24gZm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgICAgIHN0YXRlcy4gICovCisgIEVOVU1fQklURklFTEQgKG5lZWRfcGhpX3N0YXRlKSBuZWVkX3BoaV9zdGF0ZSA6IDI7CisKKyAgLyogVHJ1ZSBmb3IgSEVBUCBhcnRpZmljaWFsIHZhcmlhYmxlcy4gIFRoZXNlIHZhcmlhYmxlcyByZXByZXNlbnQKKyAgICAgdGhlIG1lbW9yeSBhcmVhIGFsbG9jYXRlZCBieSBhIGNhbGwgdG8gbWFsbG9jLiAgKi8KKyAgdW5zaWduZWQgaXNfaGVhcHZhciA6IDE7CisKKyAgLyogVGhpcyBmaWVsZCBkZXNjcmliZXMgc2V2ZXJhbCAibm8gYWxpYXMiIGF0dHJpYnV0ZXMgdGhhdCBzb21lCisgICAgIHN5bWJvbHMgYXJlIGtub3duIHRvIGhhdmUuICBTZWUgdGhlIGVudW0ncyBkZWZpbml0aW9uIGZvciBtb3JlCisgICAgIGluZm9ybWF0aW9uIG9uIGVhY2ggYXR0cmlidXRlLiAgKi8KKyAgRU5VTV9CSVRGSUVMRCAobm9hbGlhc19zdGF0ZSkgbm9hbGlhc19zdGF0ZSA6IDI7CisKKyAgLyogVXNlZCBieSB2YXJfbWFwIGZvciB0aGUgYmFzZSBpbmRleCBvZiBzc2EgYmFzZSB2YXJpYWJsZXMuICAqLworICB1bnNpZ25lZCBiYXNlX2luZGV4OworCisgIC8qIER1cmluZyBpbnRvLXNzYSBhbmQgdGhlIGRvbWluYXRvciBvcHRpbWl6ZXIsIHRoaXMgZmllbGQgaG9sZHMgdGhlCisgICAgIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGlzIHZhcmlhYmxlIChhbiBTU0FfTkFNRSkuICAqLworICB0cmVlIGN1cnJlbnRfZGVmOworfTsKKworCisvKiBJbW1lZGlhdGUgdXNlIGxpc3RzIGFyZSB1c2VkIHRvIGRpcmVjdGx5IGFjY2VzcyBhbGwgdXNlcyBmb3IgYW4gU1NBCisgICBuYW1lIGFuZCBnZXQgcG9pbnRlcnMgdG8gdGhlIHN0YXRlbWVudCBmb3IgZWFjaCB1c2UuCisKKyAgIFRoZSBzdHJ1Y3R1cmUgc3NhX3VzZV9vcGVyYW5kX2QgY29uc2lzdHMgb2YgUFJFViBhbmQgTkVYVCBwb2ludGVycworICAgdG8gbWFpbnRhaW4gdGhlIGxpc3QuICBBIFVTRSBwb2ludGVyLCB3aGljaCBwb2ludHMgdG8gYWRkcmVzcyB3aGVyZQorICAgdGhlIHVzZSBpcyBsb2NhdGVkIGFuZCBhIExPQyBwb2ludGVyIHdoaWNoIGNhbiBwb2ludCB0byB0aGUKKyAgIHN0YXRlbWVudCB3aGVyZSB0aGUgdXNlIGlzIGxvY2F0ZWQsIG9yLCBpbiB0aGUgY2FzZSBvZiB0aGUgcm9vdAorICAgbm9kZSwgaXQgcG9pbnRzIHRvIHRoZSBTU0EgbmFtZSBpdHNlbGYuCisKKyAgIFRoZSBsaXN0IGlzIGFuY2hvcmVkIGJ5IGFuIG9jY3VycmVuY2Ugb2Ygc3NhX29wZXJhbmRfZCAqaW4qIHRoZQorICAgc3NhX25hbWUgbm9kZSBpdHNlbGYgKG5hbWVkICdpbW1fdXNlcycpLiAgVGhpcyBub2RlIGlzIHVuaXF1ZWx5CisgICBpZGVudGlmaWVkIGJ5IGhhdmluZyBhIE5VTEwgVVNFIHBvaW50ZXIuIGFuZCB0aGUgTE9DIHBvaW50ZXIKKyAgIHBvaW50aW5nIGJhY2sgdG8gdGhlIHNzYV9uYW1lIG5vZGUgaXRzZWxmLiAgVGhpcyBub2RlIGZvcm1zIHRoZQorICAgYmFzZSBmb3IgYSBjaXJjdWxhciBsaXN0LCBhbmQgaW5pdGlhbGx5IHRoaXMgaXMgdGhlIG9ubHkgbm9kZSBpbgorICAgdGhlIGxpc3QuCisKKyAgIEZhc3QgaXRlcmF0aW9uIGFsbG93cyBlYWNoIHVzZSB0byBiZSBleGFtaW5lZCwgYnV0IGRvZXMgbm90IGFsbG93CisgICBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGUgdXNlcyBvciBzdG10cy4KKworICAgTm9ybWFsIGl0ZXJhdGlvbiBhbGxvd3MgaW5zZXJ0aW9uLCBkZWxldGlvbiwgYW5kIG1vZGlmaWNhdGlvbi4gdGhlCisgICBpdGVyYXRvciBtYW5hZ2VzIHRoaXMgYnkgaW5zZXJ0aW5nIGEgbWFya2VyIG5vZGUgaW50byB0aGUgbGlzdAorICAgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBub2RlIGN1cnJlbnRseSBiZWluZyBleGFtaW5lZCBpbiB0aGUgbGlzdC4KKyAgIHRoaXMgbWFya2VyIG5vZGUgaXMgdW5pcXVlbHkgaWRlbnRpZmllZCBieSBoYXZpbmcgbnVsbCBzdG10ICphbmQqIGEKKyAgIG51bGwgdXNlIHBvaW50ZXIuCisKKyAgIFdoZW4gaXRlcmF0aW5nIHRvIHRoZSBuZXh0IHVzZSwgdGhlIGl0ZXJhdGlvbiByb3V0aW5lcyBjaGVjayB0byBzZWUKKyAgIGlmIHRoZSBub2RlIGFmdGVyIHRoZSBtYXJrZXIgaGFzIGNoYW5nZWQuIGlmIGl0IGhhcywgdGhlbiB0aGUgbm9kZQorICAgZm9sbG93aW5nIHRoZSBtYXJrZXIgaXMgbm93IHRoZSBuZXh0IG9uZSB0byBiZSB2aXNpdGVkLiBpZiBub3QsIHRoZQorICAgbWFya2VyIG5vZGUgaXMgbW92ZWQgcGFzdCB0aGF0IG5vZGUgaW4gdGhlIGxpc3QgKHZpc3VhbGl6ZSBpdCBhcworICAgYnVtcGluZyB0aGUgbWFya2VyIG5vZGUgdGhyb3VnaCB0aGUgbGlzdCkuICB0aGlzIGNvbnRpbnVlcyB1bnRpbAorICAgdGhlIG1hcmtlciBub2RlIGlzIG1vdmVkIHRvIHRoZSBvcmlnaW5hbCBhbmNob3IgcG9zaXRpb24uIHRoZQorICAgbWFya2VyIG5vZGUgaXMgdGhlbiByZW1vdmVkIGZyb20gdGhlIGxpc3QuCisKKyAgIElmIGl0ZXJhdGlvbiBpcyBoYWx0ZWQgZWFybHksIHRoZSBtYXJrZXIgbm9kZSBtdXN0IGJlIHJlbW92ZWQgZnJvbQorICAgdGhlIGxpc3QgYmVmb3JlIGNvbnRpbnVpbmcuICAqLwordHlwZWRlZiBzdHJ1Y3QgaW1tZWRpYXRlX3VzZV9pdGVyYXRvcl9kCit7CisgIC8qIFRoaXMgaXMgdGhlIGN1cnJlbnQgdXNlIHRoZSBpdGVyYXRvciBpcyBwcm9jZXNzaW5nLiAgKi8KKyAgc3NhX3VzZV9vcGVyYW5kX3QgKmltbV91c2U7CisgIC8qIFRoaXMgbWFya3MgdGhlIGxhc3QgdXNlIGluIHRoZSBsaXN0ICh1c2Ugbm9kZSBmcm9tIFNTQV9OQU1FKSAgKi8KKyAgc3NhX3VzZV9vcGVyYW5kX3QgKmVuZF9wOworICAvKiBUaGlzIG5vZGUgaXMgaW5zZXJ0ZWQgYW5kIHVzZWQgdG8gbWFyayB0aGUgZW5kIG9mIHRoZSB1c2VzIGZvciBhIHN0bXQuICAqLworICBzc2FfdXNlX29wZXJhbmRfdCBpdGVyX25vZGU7CisgIC8qIFRoaXMgaXMgdGhlIG5leHQgc3NhX25hbWUgdG8gdmlzaXQuICBJTU1fVVNFIG1heSBnZXQgcmVtb3ZlZCBiZWZvcmUKKyAgICAgdGhlIG5leHQgb25lIGlzIHRyYXZlcnNlZCB0bywgc28gaXQgbXVzdCBiZSBjYWNoZWQgZWFybHkuICAqLworICBzc2FfdXNlX29wZXJhbmRfdCAqbmV4dF9pbW1fbmFtZTsKK30gaW1tX3VzZV9pdGVyYXRvcjsKKworCisvKiBVc2UgdGhpcyBpdGVyYXRvciB3aGVuIHNpbXBseSBsb29raW5nIGF0IHN0bXRzLiAgQWRkaW5nLCBkZWxldGluZyBvcgorICAgbW9kaWZ5aW5nIHN0bXRzIHdpbGwgY2F1c2UgdGhpcyBpdGVyYXRvciB0byBtYWxmdW5jdGlvbi4gICovCisKKyNkZWZpbmUgRk9SX0VBQ0hfSU1NX1VTRV9GQVNUKERFU1QsIElURVIsIFNTQVZBUikJCQlcCisgIGZvciAoKERFU1QpID0gZmlyc3RfcmVhZG9ubHlfaW1tX3VzZSAoJihJVEVSKSwgKFNTQVZBUikpOwlcCisgICAgICAgIWVuZF9yZWFkb25seV9pbW1fdXNlX3AgKCYoSVRFUikpOwkJCVwKKyAgICAgICAoREVTVCkgPSBuZXh0X3JlYWRvbmx5X2ltbV91c2UgKCYoSVRFUikpKQorCisvKiBVc2UgdGhpcyBpdGVyYXRvciB0byB2aXNpdCBlYWNoIHN0bXQgd2hpY2ggaGFzIGEgdXNlIG9mIFNTQVZBUi4gICovCisKKyNkZWZpbmUgRk9SX0VBQ0hfSU1NX1VTRV9TVE1UKFNUTVQsIElURVIsIFNTQVZBUikJCVwKKyAgZm9yICgoU1RNVCkgPSBmaXJzdF9pbW1fdXNlX3N0bXQgKCYoSVRFUiksIChTU0FWQVIpKTsJCVwKKyAgICAgICAhZW5kX2ltbV91c2Vfc3RtdF9wICgmKElURVIpKTsJCQkJXAorICAgICAgIChTVE1UKSA9IG5leHRfaW1tX3VzZV9zdG10ICgmKElURVIpKSkKKworLyogVXNlIHRoaXMgdG8gdGVybWluYXRlIHRoZSBGT1JfRUFDSF9JTU1fVVNFX1NUTVQgbG9vcCBlYXJseS4gIEZhaWx1cmUgdG8KKyAgIGRvIHNvIHdpbGwgcmVzdWx0IGluIGxlYXZpbmcgYSBpdGVyYXRvciBtYXJrZXIgbm9kZSBpbiB0aGUgaW1tZWRpYXRlCisgICB1c2UgbGlzdCwgYW5kIG5vdGhpbmcgZ29vZCB3aWxsIGNvbWUgZnJvbSB0aGF0LiAgICovCisjZGVmaW5lIEJSRUFLX0ZST01fSU1NX1VTRV9TVE1UKElURVIpCQkJCVwKKyAgIHsJCQkJCQkJCVwKKyAgICAgZW5kX2ltbV91c2Vfc3RtdF90cmF2ZXJzZSAoJihJVEVSKSk7CQkJXAorICAgICBicmVhazsJCQkJCQkJXAorICAgfQorCisKKy8qIFVzZSB0aGlzIGl0ZXJhdG9yIGluIGNvbWJpbmF0aW9uIHdpdGggRk9SX0VBQ0hfSU1NX1VTRV9TVE1UIHRvCisgICBnZXQgYWNjZXNzIHRvIGVhY2ggb2NjdXJyZW5jZSBvZiBzc2F2YXIgb24gdGhlIHN0bXQgcmV0dXJuZWQgYnkKKyAgIHRoYXQgaXRlcmF0b3IuLiAgZm9yIGluc3RhbmNlOgorCisgICAgIEZPUl9FQUNIX0lNTV9VU0VfU1RNVCAoc3RtdCwgaXRlciwgdmFyKQorICAgICAgIHsKKyAgICAgICAgIEZPUl9FQUNIX0lNTV9VU0VfT05fU1RNVCAodXNlX3AsIGl0ZXIpCisJICAgeworCSAgICAgU0VUX1VTRSAodXNlX3AsIGJsYWgpOworCSAgIH0KKwkgdXBkYXRlX3N0bXQgKHN0bXQpOworICAgICAgIH0JCQkJCQkJICovCisKKyNkZWZpbmUgRk9SX0VBQ0hfSU1NX1VTRV9PTl9TVE1UKERFU1QsIElURVIpCQkJXAorICBmb3IgKChERVNUKSA9IGZpcnN0X2ltbV91c2Vfb25fc3RtdCAoJihJVEVSKSk7CQlcCisgICAgICAgIWVuZF9pbW1fdXNlX29uX3N0bXRfcCAoJihJVEVSKSk7CQkJXAorICAgICAgIChERVNUKSA9IG5leHRfaW1tX3VzZV9vbl9zdG10ICgmKElURVIpKSkKKworCisKK3R5cGVkZWYgc3RydWN0IHZhcl9hbm5fZCAqdmFyX2Fubl90OworCitzdGF0aWMgaW5saW5lIHZhcl9hbm5fdCB2YXJfYW5uIChjb25zdF90cmVlKTsKK3N0YXRpYyBpbmxpbmUgdmFyX2Fubl90IGdldF92YXJfYW5uICh0cmVlKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc3RtdCAoZ2ltcGxlKTsKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9saW5lbm8gKGNvbnN0X2dpbXBsZSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIHByZWRpY3Rpb25zIGluIHRyZWUgbGV2ZWwuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RydWN0IEdUWSgoY2hhaW5fbmV4dCAoIiVoLmVwX25leHQiKSkpIGVkZ2VfcHJlZGljdGlvbiB7CisgIHN0cnVjdCBlZGdlX3ByZWRpY3Rpb24gKmVwX25leHQ7CisgIGVkZ2UgZXBfZWRnZTsKKyAgZW51bSBicl9wcmVkaWN0b3IgZXBfcHJlZGljdG9yOworICBpbnQgZXBfcHJvYmFiaWxpdHk7Cit9OworCisvKiBBY2Nlc3NvcnMgZm9yIGJhc2ljIGJsb2NrIGFubm90YXRpb25zLiAgKi8KK3N0YXRpYyBpbmxpbmUgZ2ltcGxlX3NlcSBwaGlfbm9kZXMgKGNvbnN0X2Jhc2ljX2Jsb2NrKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGhpX25vZGVzIChiYXNpY19ibG9jaywgZ2ltcGxlX3NlcSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkgICAgICBHbG9iYWwgZGVjbGFyYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RydWN0IEdUWSgoKSkgaW50X3RyZWVfbWFwIHsKKworICB1bnNpZ25lZCBpbnQgdWlkOworICB0cmVlIHRvOworfTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBpbnRfdHJlZV9tYXBfaGFzaCAoY29uc3Qgdm9pZCAqKTsKK2V4dGVybiBpbnQgaW50X3RyZWVfbWFwX2VxIChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgdWlkX2RlY2xfbWFwX2hhc2ggKGNvbnN0IHZvaWQgKik7CitleHRlcm4gaW50IHVpZF9kZWNsX21hcF9lcSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOworCit0eXBlZGVmIHN0cnVjdAoreworICBodGFiX2l0ZXJhdG9yIGh0aTsKK30gcmVmZXJlbmNlZF92YXJfaXRlcmF0b3I7CisKKy8qIFRoaXMgbWFjcm8gbG9vcHMgb3ZlciBhbGwgdGhlIHJlZmVyZW5jZWQgdmFycywgb25lIGF0IGEgdGltZSwgcHV0dGluZyB0aGUKKyAgIGN1cnJlbnQgdmFyIGluIFZBUi4gIE5vdGU6ICBZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIGFkZCByZWZlcmVuY2VkIHZhcmlhYmxlcworICAgdG8gdGhlIGhhc2h0YWJsZSB3aGlsZSB1c2luZyB0aGlzIG1hY3JvLiAgRG9pbmcgc28gbWF5IGNhdXNlIGl0IHRvIGJlaGF2ZQorICAgZXJyYXRpY2FsbHkuICAqLworCisjZGVmaW5lIEZPUl9FQUNIX1JFRkVSRU5DRURfVkFSKFZBUiwgSVRFUikgXAorICBmb3IgKChWQVIpID0gZmlyc3RfcmVmZXJlbmNlZF92YXIgKCYoSVRFUikpOyBcCisgICAgICAgIWVuZF9yZWZlcmVuY2VkX3ZhcnNfcCAoJihJVEVSKSk7IFwKKyAgICAgICAoVkFSKSA9IG5leHRfcmVmZXJlbmNlZF92YXIgKCYoSVRFUikpKQorCitleHRlcm4gdHJlZSByZWZlcmVuY2VkX3Zhcl9sb29rdXAgKHVuc2lnbmVkIGludCk7CitleHRlcm4gYm9vbCByZWZlcmVuY2VkX3Zhcl9jaGVja19hbmRfaW5zZXJ0ICh0cmVlKTsKKyNkZWZpbmUgbnVtX3JlZmVyZW5jZWRfdmFycyBodGFiX2VsZW1lbnRzIChnaW1wbGVfcmVmZXJlbmNlZF92YXJzIChjZnVuKSkKKyNkZWZpbmUgcmVmZXJlbmNlZF92YXIoaSkgcmVmZXJlbmNlZF92YXJfbG9va3VwIChpKQorCisjZGVmaW5lIG51bV9zc2FfbmFtZXMgKFZFQ19sZW5ndGggKHRyZWUsIGNmdW4tPmdpbXBsZV9kZi0+c3NhX25hbWVzKSkKKyNkZWZpbmUgc3NhX25hbWUoaSkgKFZFQ19pbmRleCAodHJlZSwgY2Z1bi0+Z2ltcGxlX2RmLT5zc2FfbmFtZXMsIChpKSkpCisKKy8qIE1hY3JvcyBmb3Igc2hvd2luZyB1c2FnZSBzdGF0aXN0aWNzLiAgKi8KKyNkZWZpbmUgU0NBTEUoeCkgKCh1bnNpZ25lZCBsb25nKSAoKHgpIDwgMTAyNCoxMAlcCisJCSAgPyAoeCkJCQkJCVwKKwkJICA6ICgoeCkgPCAxMDI0KjEwMjQqMTAJCQlcCisJCSAgICAgPyAoeCkgLyAxMDI0CQkJXAorCQkgICAgIDogKHgpIC8gKDEwMjQqMTAyNCkpKSkKKworI2RlZmluZSBMQUJFTCh4KSAoKHgpIDwgMTAyNCoxMCA/ICdiJyA6ICgoeCkgPCAxMDI0KjEwMjQqMTAgPyAnaycgOiAnTScpKQorCisjZGVmaW5lIFBFUkNFTlQoeCx5KSAoKGZsb2F0KSh4KSAqIDEwMC4wIC8gKGZsb2F0KSh5KSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCSAgICAgIE9wZW5NUCBSZWdpb24gVHJlZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogUGFyYWxsZWwgcmVnaW9uIGluZm9ybWF0aW9uLiAgRXZlcnkgcGFyYWxsZWwgYW5kIHdvcmtzaGFyZQorICAgZGlyZWN0aXZlIGlzIGVuY2xvc2VkIGJldHdlZW4gdHdvIG1hcmtlcnMsIHRoZSBPTVBfKiBkaXJlY3RpdmUKKyAgIGFuZCBhIGNvcnJlc3BvbmRpbmcgT01QX1JFVFVSTiBzdGF0ZW1lbnQuICAqLworCitzdHJ1Y3Qgb21wX3JlZ2lvbgoreworICAvKiBUaGUgZW5jbG9zaW5nIHJlZ2lvbi4gICovCisgIHN0cnVjdCBvbXBfcmVnaW9uICpvdXRlcjsKKworICAvKiBGaXJzdCBjaGlsZCByZWdpb24uICAqLworICBzdHJ1Y3Qgb21wX3JlZ2lvbiAqaW5uZXI7CisKKyAgLyogTmV4dCBwZWVyIHJlZ2lvbi4gICovCisgIHN0cnVjdCBvbXBfcmVnaW9uICpuZXh0OworCisgIC8qIEJsb2NrIGNvbnRhaW5pbmcgdGhlIG9tcCBkaXJlY3RpdmUgYXMgaXRzIGxhc3Qgc3RtdC4gICovCisgIGJhc2ljX2Jsb2NrIGVudHJ5OworCisgIC8qIEJsb2NrIGNvbnRhaW5pbmcgdGhlIE9NUF9SRVRVUk4gYXMgaXRzIGxhc3Qgc3RtdC4gICovCisgIGJhc2ljX2Jsb2NrIGV4aXQ7CisKKyAgLyogQmxvY2sgY29udGFpbmluZyB0aGUgT01QX0NPTlRJTlVFIGFzIGl0cyBsYXN0IHN0bXQuICAqLworICBiYXNpY19ibG9jayBjb250OworCisgIC8qIElmIHRoaXMgaXMgYSBjb21iaW5lZCBwYXJhbGxlbCt3b3Jrc2hhcmUgcmVnaW9uLCB0aGlzIGlzIGEgbGlzdAorICAgICBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBuZWVkZWQgYnkgdGhlIGNvbWJpbmVkIHBhcmFsbGVsK3dvcmtzaGFyZQorICAgICBsaWJyYXJ5IGNhbGwuICAqLworICB0cmVlIHdzX2FyZ3M7CisKKyAgLyogVGhlIGNvZGUgZm9yIHRoZSBvbXAgZGlyZWN0aXZlIG9mIHRoaXMgcmVnaW9uLiAgKi8KKyAgZW51bSBnaW1wbGVfY29kZSB0eXBlOworCisgIC8qIFNjaGVkdWxlIGtpbmQsIG9ubHkgdXNlZCBmb3IgT01QX0ZPUiB0eXBlIHJlZ2lvbnMuICAqLworICBlbnVtIG9tcF9jbGF1c2Vfc2NoZWR1bGVfa2luZCBzY2hlZF9raW5kOworCisgIC8qIFRydWUgaWYgdGhpcyBpcyBhIGNvbWJpbmVkIHBhcmFsbGVsK3dvcmtzaGFyZSByZWdpb24uICAqLworICBib29sIGlzX2NvbWJpbmVkX3BhcmFsbGVsOworfTsKKworZXh0ZXJuIHN0cnVjdCBvbXBfcmVnaW9uICpyb290X29tcF9yZWdpb247CitleHRlcm4gc3RydWN0IG9tcF9yZWdpb24gKm5ld19vbXBfcmVnaW9uIChiYXNpY19ibG9jaywgZW51bSBnaW1wbGVfY29kZSwKKwkJCQkJICBzdHJ1Y3Qgb21wX3JlZ2lvbiAqKTsKK2V4dGVybiB2b2lkIGZyZWVfb21wX3JlZ2lvbnMgKHZvaWQpOwordm9pZCBvbXBfZXhwYW5kX2xvY2FsIChiYXNpY19ibG9jayk7CitleHRlcm4gdHJlZSBmaW5kX29tcF9jbGF1c2UgKHRyZWUsIGVudW0gb21wX2NsYXVzZV9jb2RlKTsKK3RyZWUgY29weV92YXJfZGVjbCAodHJlZSwgdHJlZSwgdHJlZSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkgICAgICBGdW5jdGlvbiBwcm90b3R5cGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogSW4gdHJlZS1jZmcuYyAgKi8KKworLyogTG9jYXRpb24gdG8gdHJhY2sgcGVuZGluZyBzdG10IGZvciBlZGdlIGluc2VydGlvbi4gICovCisjZGVmaW5lIFBFTkRJTkdfU1RNVChlKQkoKGUpLT5pbnNucy5nKQorCitleHRlcm4gdm9pZCBkZWxldGVfdHJlZV9jZmdfYW5ub3RhdGlvbnMgKHZvaWQpOworZXh0ZXJuIGJvb2wgc3RtdF9lbmRzX2JiX3AgKGdpbXBsZSk7CitleHRlcm4gYm9vbCBpc19jdHJsX3N0bXQgKGdpbXBsZSk7CitleHRlcm4gYm9vbCBpc19jdHJsX2FsdGVyaW5nX3N0bXQgKGdpbXBsZSk7CitleHRlcm4gYm9vbCBzaW1wbGVfZ290b19wIChnaW1wbGUpOworZXh0ZXJuIGJvb2wgc3RtdF9jYW5fbWFrZV9hYm5vcm1hbF9nb3RvIChnaW1wbGUpOworZXh0ZXJuIGJhc2ljX2Jsb2NrIHNpbmdsZV9ub25jb21wbGV4X3N1Y2MgKGJhc2ljX2Jsb2NrIGJiKTsKK2V4dGVybiB2b2lkIGdpbXBsZV9kdW1wX2JiIChiYXNpY19ibG9jaywgRklMRSAqLCBpbnQsIGludCk7CitleHRlcm4gdm9pZCBnaW1wbGVfZGVidWdfYmIgKGJhc2ljX2Jsb2NrKTsKK2V4dGVybiBiYXNpY19ibG9jayBnaW1wbGVfZGVidWdfYmJfbiAoaW50KTsKK2V4dGVybiB2b2lkIGdpbXBsZV9kdW1wX2NmZyAoRklMRSAqLCBpbnQpOworZXh0ZXJuIHZvaWQgZ2ltcGxlX2RlYnVnX2NmZyAoaW50KTsKK2V4dGVybiB2b2lkIGR1bXBfY2ZnX3N0YXRzIChGSUxFICopOworZXh0ZXJuIHZvaWQgZG90X2NmZyAodm9pZCk7CitleHRlcm4gdm9pZCBkZWJ1Z19jZmdfc3RhdHMgKHZvaWQpOworZXh0ZXJuIHZvaWQgZGVidWdfbG9vcHMgKGludCk7CitleHRlcm4gdm9pZCBkZWJ1Z19sb29wIChzdHJ1Y3QgbG9vcCAqLCBpbnQpOworZXh0ZXJuIHZvaWQgZGVidWdfbG9vcF9udW0gKHVuc2lnbmVkLCBpbnQpOworZXh0ZXJuIHZvaWQgcHJpbnRfbG9vcHMgKEZJTEUgKiwgaW50KTsKK2V4dGVybiB2b2lkIHByaW50X2xvb3BzX2JiIChGSUxFICosIGJhc2ljX2Jsb2NrLCBpbnQsIGludCk7CitleHRlcm4gdm9pZCBjbGVhbnVwX2RlYWRfbGFiZWxzICh2b2lkKTsKK2V4dGVybiB2b2lkIGdyb3VwX2Nhc2VfbGFiZWxzICh2b2lkKTsKK2V4dGVybiBnaW1wbGUgZmlyc3Rfc3RtdCAoYmFzaWNfYmxvY2spOworZXh0ZXJuIGdpbXBsZSBsYXN0X3N0bXQgKGJhc2ljX2Jsb2NrKTsKK2V4dGVybiBnaW1wbGUgbGFzdF9hbmRfb25seV9zdG10IChiYXNpY19ibG9jayk7CitleHRlcm4gZWRnZSBmaW5kX3Rha2VuX2VkZ2UgKGJhc2ljX2Jsb2NrLCB0cmVlKTsKK2V4dGVybiBiYXNpY19ibG9jayBsYWJlbF90b19ibG9ja19mbiAoc3RydWN0IGZ1bmN0aW9uICosIHRyZWUpOworI2RlZmluZSBsYWJlbF90b19ibG9jayh0KSAobGFiZWxfdG9fYmxvY2tfZm4gKGNmdW4sIHQpKQorZXh0ZXJuIHZvaWQgbm90aWNlX3NwZWNpYWxfY2FsbHMgKGdpbXBsZSk7CitleHRlcm4gdm9pZCBjbGVhcl9zcGVjaWFsX2NhbGxzICh2b2lkKTsKK2V4dGVybiB2b2lkIHZlcmlmeV9zdG10cyAodm9pZCk7CitleHRlcm4gdm9pZCB2ZXJpZnlfZ2ltcGxlICh2b2lkKTsKK2V4dGVybiB2b2lkIHZlcmlmeV90eXBlc19pbl9naW1wbGVfc2VxIChnaW1wbGVfc2VxKTsKK2V4dGVybiB0cmVlIGdpbXBsZV9ibG9ja19sYWJlbCAoYmFzaWNfYmxvY2spOworZXh0ZXJuIHZvaWQgZXh0cmFjdF90cnVlX2ZhbHNlX2VkZ2VzX2Zyb21fYmxvY2sgKGJhc2ljX2Jsb2NrLCBlZGdlICosIGVkZ2UgKik7CitleHRlcm4gYm9vbCBnaW1wbGVfZHVwbGljYXRlX3Nlc2VfcmVnaW9uIChlZGdlLCBlZGdlLCBiYXNpY19ibG9jayAqLCB1bnNpZ25lZCwKKwkJCQkJYmFzaWNfYmxvY2sgKik7CitleHRlcm4gYm9vbCBnaW1wbGVfZHVwbGljYXRlX3Nlc2VfdGFpbCAoZWRnZSwgZWRnZSwgYmFzaWNfYmxvY2sgKiwgdW5zaWduZWQsCisJCQkJICAgICAgYmFzaWNfYmxvY2sgKik7CitleHRlcm4gdm9pZCBnYXRoZXJfYmxvY2tzX2luX3Nlc2VfcmVnaW9uIChiYXNpY19ibG9jayBlbnRyeSwgYmFzaWNfYmxvY2sgZXhpdCwKKwkJCQkJICBWRUMoYmFzaWNfYmxvY2ssaGVhcCkgKipiYnNfcCk7CitleHRlcm4gdm9pZCBhZGRfcGhpX2FyZ3NfYWZ0ZXJfY29weV9iYiAoYmFzaWNfYmxvY2spOworZXh0ZXJuIHZvaWQgYWRkX3BoaV9hcmdzX2FmdGVyX2NvcHkgKGJhc2ljX2Jsb2NrICosIHVuc2lnbmVkLCBlZGdlKTsKK2V4dGVybiBib29sIGdpbXBsZV9wdXJnZV9kZWFkX2Fibm9ybWFsX2NhbGxfZWRnZXMgKGJhc2ljX2Jsb2NrKTsKK2V4dGVybiBib29sIGdpbXBsZV9wdXJnZV9kZWFkX2VoX2VkZ2VzIChiYXNpY19ibG9jayk7CitleHRlcm4gYm9vbCBnaW1wbGVfcHVyZ2VfYWxsX2RlYWRfZWhfZWRnZXMgKGNvbnN0X2JpdG1hcCk7CitleHRlcm4gdHJlZSBnaW1wbGlmeV9idWlsZDEgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICosIGVudW0gdHJlZV9jb2RlLAorCQkJICAgICB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGdpbXBsaWZ5X2J1aWxkMiAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgZW51bSB0cmVlX2NvZGUsCisJCQkgICAgIHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgZ2ltcGxpZnlfYnVpbGQzIChnaW1wbGVfc3RtdF9pdGVyYXRvciAqLCBlbnVtIHRyZWVfY29kZSwKKwkJCSAgICAgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBpbml0X2VtcHR5X3RyZWVfY2ZnICh2b2lkKTsKK2V4dGVybiB2b2lkIGluaXRfZW1wdHlfdHJlZV9jZmdfZm9yX2Z1bmN0aW9uIChzdHJ1Y3QgZnVuY3Rpb24gKik7CitleHRlcm4gdm9pZCBmb2xkX2NvbmRfZXhwcl9jb25kICh2b2lkKTsKK2V4dGVybiB2b2lkIG1ha2VfYWJub3JtYWxfZ290b19lZGdlcyAoYmFzaWNfYmxvY2ssIGJvb2wpOworZXh0ZXJuIHZvaWQgcmVwbGFjZV91c2VzX2J5ICh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIHN0YXJ0X3JlY29yZGluZ19jYXNlX2xhYmVscyAodm9pZCk7CitleHRlcm4gdm9pZCBlbmRfcmVjb3JkaW5nX2Nhc2VfbGFiZWxzICh2b2lkKTsKK2V4dGVybiBiYXNpY19ibG9jayBtb3ZlX3Nlc2VfcmVnaW9uX3RvX2ZuIChzdHJ1Y3QgZnVuY3Rpb24gKiwgYmFzaWNfYmxvY2ssCisJCQkJICAgICAgICAgICBiYXNpY19ibG9jaywgdHJlZSk7Cit2b2lkIHJlbW92ZV9lZGdlX2FuZF9kb21pbmF0ZWRfYmxvY2tzIChlZGdlKTsKK2Jvb2wgdHJlZV9ub2RlX2Nhbl9iZV9zaGFyZWQgKHRyZWUpOworCisvKiBJbiB0cmVlLWNmZ2NsZWFudXAuYyAgKi8KK2V4dGVybiBiaXRtYXAgY2ZnY2xlYW51cF9hbHRlcmVkX2JiczsKK2V4dGVybiBib29sIGNsZWFudXBfdHJlZV9jZmcgKHZvaWQpOworCisvKiBJbiB0cmVlLXByZXR0eS1wcmludC5jLiAgKi8KK2V4dGVybiB2b2lkIGR1bXBfZ2VuZXJpY19iYiAoRklMRSAqLCBiYXNpY19ibG9jaywgaW50LCBpbnQpOworZXh0ZXJuIGludCBvcF9jb2RlX3ByaW8gKGVudW0gdHJlZV9jb2RlKTsKK2V4dGVybiBpbnQgb3BfcHJpbyAoY29uc3RfdHJlZSk7CitleHRlcm4gY29uc3QgY2hhciAqb3Bfc3ltYm9sX2NvZGUgKGVudW0gdHJlZV9jb2RlKTsKKworLyogSW4gdHJlZS1kZmEuYyAgKi8KK2V4dGVybiB2YXJfYW5uX3QgY3JlYXRlX3Zhcl9hbm4gKHRyZWUpOworZXh0ZXJuIHZvaWQgcmVudW1iZXJfZ2ltcGxlX3N0bXRfdWlkcyAodm9pZCk7CitleHRlcm4gdm9pZCByZW51bWJlcl9naW1wbGVfc3RtdF91aWRzX2luX2Jsb2NrcyAoYmFzaWNfYmxvY2sgKiwgaW50KTsKK2V4dGVybiB2b2lkIGR1bXBfZGZhX3N0YXRzIChGSUxFICopOworZXh0ZXJuIHZvaWQgZGVidWdfZGZhX3N0YXRzICh2b2lkKTsKK2V4dGVybiB2b2lkIGRlYnVnX3JlZmVyZW5jZWRfdmFycyAodm9pZCk7CitleHRlcm4gdm9pZCBkdW1wX3JlZmVyZW5jZWRfdmFycyAoRklMRSAqKTsKK2V4dGVybiB2b2lkIGR1bXBfdmFyaWFibGUgKEZJTEUgKiwgdHJlZSk7CitleHRlcm4gdm9pZCBkZWJ1Z192YXJpYWJsZSAodHJlZSk7CitleHRlcm4gdHJlZSBnZXRfdmlydHVhbF92YXIgKHRyZWUpOworZXh0ZXJuIGJvb2wgYWRkX3JlZmVyZW5jZWRfdmFyICh0cmVlKTsKK2V4dGVybiB2b2lkIHJlbW92ZV9yZWZlcmVuY2VkX3ZhciAodHJlZSk7CitleHRlcm4gdm9pZCBtYXJrX3N5bWJvbHNfZm9yX3JlbmFtaW5nIChnaW1wbGUpOworZXh0ZXJuIHZvaWQgZmluZF9uZXdfcmVmZXJlbmNlZF92YXJzIChnaW1wbGUpOworZXh0ZXJuIHRyZWUgbWFrZV9yZW5hbWVfdGVtcCAodHJlZSwgY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIHNldF9kZWZhdWx0X2RlZiAodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBnaW1wbGVfZGVmYXVsdF9kZWYgKHN0cnVjdCBmdW5jdGlvbiAqLCB0cmVlKTsKK2V4dGVybiBib29sIHN0bXRfcmVmZXJlbmNlc19hYm5vcm1hbF9zc2FfbmFtZSAoZ2ltcGxlKTsKK2V4dGVybiB0cmVlIGdldF9yZWZfYmFzZV9hbmRfZXh0ZW50ICh0cmVlLCBIT1NUX1dJREVfSU5UICosCisJCQkJICAgICBIT1NUX1dJREVfSU5UICosIEhPU1RfV0lERV9JTlQgKik7CitleHRlcm4gdm9pZCBmaW5kX3JlZmVyZW5jZWRfdmFyc19pbiAoZ2ltcGxlKTsKKworLyogSW4gdHJlZS1waGlub2Rlcy5jICAqLworZXh0ZXJuIHZvaWQgcmVzZXJ2ZV9waGlfYXJnc19mb3JfbmV3X2VkZ2UgKGJhc2ljX2Jsb2NrKTsKK2V4dGVybiB2b2lkIGFkZF9waGlfbm9kZV90b19iYiAoZ2ltcGxlIHBoaSwgYmFzaWNfYmxvY2sgYmIpOworZXh0ZXJuIGdpbXBsZSBtYWtlX3BoaV9ub2RlICh0cmVlIHZhciwgaW50IGxlbik7CitleHRlcm4gZ2ltcGxlIGNyZWF0ZV9waGlfbm9kZSAodHJlZSwgYmFzaWNfYmxvY2spOworZXh0ZXJuIHZvaWQgYWRkX3BoaV9hcmcgKGdpbXBsZSwgdHJlZSwgZWRnZSwgc291cmNlX2xvY2F0aW9uKTsKK2V4dGVybiB2b2lkIHJlbW92ZV9waGlfYXJncyAoZWRnZSk7CitleHRlcm4gdm9pZCByZW1vdmVfcGhpX25vZGUgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICosIGJvb2wpOworZXh0ZXJuIHZvaWQgcmVtb3ZlX3BoaV9ub2RlcyAoYmFzaWNfYmxvY2spOworZXh0ZXJuIHZvaWQgaW5pdF9waGlub2RlcyAodm9pZCk7CitleHRlcm4gdm9pZCBmaW5pX3BoaW5vZGVzICh2b2lkKTsKK2V4dGVybiB2b2lkIHJlbGVhc2VfcGhpX25vZGUgKGdpbXBsZSk7CisjaWZkZWYgR0FUSEVSX1NUQVRJU1RJQ1MKK2V4dGVybiB2b2lkIHBoaW5vZGVzX3ByaW50X3N0YXRpc3RpY3MgKHZvaWQpOworI2VuZGlmCisKKy8qIEluIGdpbXBsZS1sb3cuYyAgKi8KK2V4dGVybiB2b2lkIHJlY29yZF92YXJzX2ludG8gKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgcmVjb3JkX3ZhcnMgKHRyZWUpOworZXh0ZXJuIGJvb2wgYmxvY2tfbWF5X2ZhbGx0aHJ1IChjb25zdF90cmVlKTsKK2V4dGVybiBib29sIGdpbXBsZV9zZXFfbWF5X2ZhbGx0aHJ1IChnaW1wbGVfc2VxKTsKK2V4dGVybiBib29sIGdpbXBsZV9zdG10X21heV9mYWxsdGhydSAoZ2ltcGxlKTsKK2V4dGVybiBib29sIGdpbXBsZV9jaGVja19jYWxsX2FyZ3MgKGdpbXBsZSk7CisKKworLyogSW4gdHJlZS1zc2EuYyAgKi8KKworLyogTWFwcGluZyBmb3IgcmVkaXJlY3RlZCBlZGdlcy4gICovCitzdHJ1Y3QgR1RZKCgpKSBfZWRnZV92YXJfbWFwIHsKKyAgdHJlZSByZXN1bHQ7CQkJLyogUEhJIHJlc3VsdC4gICovCisgIHRyZWUgZGVmOwkJCS8qIFBISSBhcmcgZGVmaW5pdGlvbi4gICovCisgIHNvdXJjZV9sb2NhdGlvbiBsb2N1czsgICAgICAgIC8qIFBISSBhcmcgbG9jYXRpb24uICAqLworfTsKK3R5cGVkZWYgc3RydWN0IF9lZGdlX3Zhcl9tYXAgZWRnZV92YXJfbWFwOworCitERUZfVkVDX08oZWRnZV92YXJfbWFwKTsKK0RFRl9WRUNfQUxMT0NfTyhlZGdlX3Zhcl9tYXAsIGhlYXApOworCisvKiBBIHZlY3RvciBvZiB2YXIgbWFwcy4gICovCit0eXBlZGVmIFZFQyhlZGdlX3Zhcl9tYXAsIGhlYXApICplZGdlX3Zhcl9tYXBfdmVjdG9yOworCitleHRlcm4gdm9pZCBpbml0X3RyZWVfc3NhIChzdHJ1Y3QgZnVuY3Rpb24gKik7CitleHRlcm4gdm9pZCByZWRpcmVjdF9lZGdlX3Zhcl9tYXBfYWRkIChlZGdlLCB0cmVlLCB0cmVlLCBzb3VyY2VfbG9jYXRpb24pOworZXh0ZXJuIHZvaWQgcmVkaXJlY3RfZWRnZV92YXJfbWFwX2NsZWFyIChlZGdlKTsKK2V4dGVybiB2b2lkIHJlZGlyZWN0X2VkZ2VfdmFyX21hcF9kdXAgKGVkZ2UsIGVkZ2UpOworZXh0ZXJuIGVkZ2VfdmFyX21hcF92ZWN0b3IgcmVkaXJlY3RfZWRnZV92YXJfbWFwX3ZlY3RvciAoZWRnZSk7CitleHRlcm4gdm9pZCByZWRpcmVjdF9lZGdlX3Zhcl9tYXBfZGVzdHJveSAodm9pZCk7CisKK2V4dGVybiBlZGdlIHNzYV9yZWRpcmVjdF9lZGdlIChlZGdlLCBiYXNpY19ibG9jayk7CitleHRlcm4gdm9pZCBmbHVzaF9wZW5kaW5nX3N0bXRzIChlZGdlKTsKK2V4dGVybiB2b2lkIHZlcmlmeV9zc2EgKGJvb2wpOworZXh0ZXJuIHZvaWQgZGVsZXRlX3RyZWVfc3NhICh2b2lkKTsKK2V4dGVybiBib29sIHNzYV91bmRlZmluZWRfdmFsdWVfcCAodHJlZSk7CitleHRlcm4gdm9pZCBleGVjdXRlX3VwZGF0ZV9hZGRyZXNzZXNfdGFrZW4gKGJvb2wpOworCisvKiBDYWxsLWJhY2sgZnVuY3Rpb24gZm9yIHdhbGtfdXNlX2RlZl9jaGFpbnMoKS4gIEF0IGVhY2ggcmVhY2hpbmcKKyAgIGRlZmluaXRpb24sIGEgZnVuY3Rpb24gd2l0aCB0aGlzIHByb3RvdHlwZSBpcyBjYWxsZWQuICAqLwordHlwZWRlZiBib29sICgqd2Fsa191c2VfZGVmX2NoYWluc19mbikgKHRyZWUsIGdpbXBsZSwgdm9pZCAqKTsKKworZXh0ZXJuIHZvaWQgd2Fsa191c2VfZGVmX2NoYWlucyAodHJlZSwgd2Fsa191c2VfZGVmX2NoYWluc19mbiwgdm9pZCAqLCBib29sKTsKKwordm9pZCBpbnNlcnRfZGVidWdfdGVtcHNfZm9yX2RlZnMgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICopOwordm9pZCBpbnNlcnRfZGVidWdfdGVtcF9mb3JfdmFyX2RlZiAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgdHJlZSk7Cit2b2lkIHJlbGVhc2VfZGVmc19iaXRzZXQgKGJpdG1hcCB0b3JlbW92ZSk7CisKKy8qIEluIHRyZWUtaW50by1zc2EuYyAgKi8KK3ZvaWQgdXBkYXRlX3NzYSAodW5zaWduZWQpOwordm9pZCBkZWxldGVfdXBkYXRlX3NzYSAodm9pZCk7Cit2b2lkIHJlZ2lzdGVyX25ld19uYW1lX21hcHBpbmcgKHRyZWUsIHRyZWUpOwordHJlZSBjcmVhdGVfbmV3X2RlZl9mb3IgKHRyZWUsIGdpbXBsZSwgZGVmX29wZXJhbmRfcCk7Citib29sIG5lZWRfc3NhX3VwZGF0ZV9wIChzdHJ1Y3QgZnVuY3Rpb24gKik7Citib29sIG5hbWVfbWFwcGluZ3NfcmVnaXN0ZXJlZF9wICh2b2lkKTsKK2Jvb2wgbmFtZV9yZWdpc3RlcmVkX2Zvcl91cGRhdGVfcCAodHJlZSk7CitiaXRtYXAgc3NhX25hbWVzX3RvX3JlcGxhY2UgKHZvaWQpOwordm9pZCByZWxlYXNlX3NzYV9uYW1lX2FmdGVyX3VwZGF0ZV9zc2EgKHRyZWUpOwordm9pZCBjb21wdXRlX2dsb2JhbF9saXZlaW4gKGJpdG1hcCwgYml0bWFwKTsKK3ZvaWQgbWFya19zeW1fZm9yX3JlbmFtaW5nICh0cmVlKTsKK3ZvaWQgbWFya19zZXRfZm9yX3JlbmFtaW5nIChiaXRtYXApOwordHJlZSBnZXRfY3VycmVudF9kZWYgKHRyZWUpOwordm9pZCBzZXRfY3VycmVudF9kZWYgKHRyZWUsIHRyZWUpOworCisvKiBJbiB0cmVlLXNzYW5hbWVzLmMgICovCitleHRlcm4gdm9pZCBpbml0X3NzYW5hbWVzIChzdHJ1Y3QgZnVuY3Rpb24gKiwgaW50KTsKK2V4dGVybiB2b2lkIGZpbmlfc3NhbmFtZXMgKHZvaWQpOworZXh0ZXJuIHRyZWUgbWFrZV9zc2FfbmFtZV9mbiAoc3RydWN0IGZ1bmN0aW9uICosIHRyZWUsIGdpbXBsZSk7CitleHRlcm4gdHJlZSBkdXBsaWNhdGVfc3NhX25hbWUgKHRyZWUsIGdpbXBsZSk7CitleHRlcm4gdm9pZCBkdXBsaWNhdGVfc3NhX25hbWVfcHRyX2luZm8gKHRyZWUsIHN0cnVjdCBwdHJfaW5mb19kZWYgKik7CitleHRlcm4gdm9pZCByZWxlYXNlX3NzYV9uYW1lICh0cmVlKTsKK2V4dGVybiB2b2lkIHJlbGVhc2VfZGVmcyAoZ2ltcGxlKTsKK2V4dGVybiB2b2lkIHJlcGxhY2Vfc3NhX25hbWVfc3ltYm9sICh0cmVlLCB0cmVlKTsKKworI2lmZGVmIEdBVEhFUl9TVEFUSVNUSUNTCitleHRlcm4gdm9pZCBzc2FuYW1lc19wcmludF9zdGF0aXN0aWNzICh2b2lkKTsKKyNlbmRpZgorCisvKiBJbiB0cmVlLXNzYS1jY3AuYyAgKi8KK2Jvb2wgZm9sZF9zdG10IChnaW1wbGVfc3RtdF9pdGVyYXRvciAqKTsKK2Jvb2wgZm9sZF9zdG10X2lucGxhY2UgKGdpbXBsZSk7Cit0cmVlIGdldF9zeW1ib2xfY29uc3RhbnRfdmFsdWUgKHRyZWUpOwordHJlZSBmb2xkX2NvbnN0X2FnZ3JlZ2F0ZV9yZWYgKHRyZWUpOworYm9vbCBtYXlfcHJvcGFnYXRlX2FkZHJlc3NfaW50b19kZXJlZmVyZW5jZSAodHJlZSwgdHJlZSk7CisKKworLyogSW4gdHJlZS1zc2EtZG9tLmMgICovCitleHRlcm4gdm9pZCBkdW1wX2RvbWluYXRvcl9vcHRpbWl6YXRpb25fc3RhdHMgKEZJTEUgKik7CitleHRlcm4gdm9pZCBkZWJ1Z19kb21pbmF0b3Jfb3B0aW1pemF0aW9uX3N0YXRzICh2b2lkKTsKK2ludCBsb29wX2RlcHRoX29mX25hbWUgKHRyZWUpOwordHJlZSBkZWdlbmVyYXRlX3BoaV9yZXN1bHQgKGdpbXBsZSk7CisKKy8qIEluIHRyZWUtc3NhLWNvcHkuYyAgKi8KK2V4dGVybiB2b2lkIHByb3BhZ2F0ZV92YWx1ZSAodXNlX29wZXJhbmRfcCwgdHJlZSk7CitleHRlcm4gdm9pZCBwcm9wYWdhdGVfdHJlZV92YWx1ZSAodHJlZSAqLCB0cmVlKTsKK2V4dGVybiB2b2lkIHByb3BhZ2F0ZV90cmVlX3ZhbHVlX2ludG9fc3RtdCAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgdHJlZSk7CitleHRlcm4gdm9pZCByZXBsYWNlX2V4cCAodXNlX29wZXJhbmRfcCwgdHJlZSk7CitleHRlcm4gYm9vbCBtYXlfcHJvcGFnYXRlX2NvcHkgKHRyZWUsIHRyZWUpOworZXh0ZXJuIGJvb2wgbWF5X3Byb3BhZ2F0ZV9jb3B5X2ludG9fc3RtdCAoZ2ltcGxlLCB0cmVlKTsKK2V4dGVybiBib29sIG1heV9wcm9wYWdhdGVfY29weV9pbnRvX2FzbSAodHJlZSk7CisKKy8qIEFmZmluZSBpdi4gICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qIEl2ID0gQkFTRSArIFNURVAgKiBpLiAgKi8KKyAgdHJlZSBiYXNlLCBzdGVwOworCisgIC8qIFRydWUgaWYgdGhpcyBpdiBkb2VzIG5vdCBvdmVyZmxvdy4gICovCisgIGJvb2wgbm9fb3ZlcmZsb3c7Cit9IGFmZmluZV9pdjsKKworLyogRGVzY3JpcHRpb24gb2YgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2YgYSBsb29wLiAgQWxsIHRoZSBleHByZXNzaW9ucyBpbnNpZGUKKyAgIHRoZSBzdHJ1Y3R1cmUgY2FuIGJlIGV2YWx1YXRlZCBhdCB0aGUgZW5kIG9mIHRoZSBsb29wJ3MgcHJlaGVhZGVyCisgICAoYW5kIGR1ZSB0byBzc2EgZm9ybSwgYWxzbyBhbnl3aGVyZSBpbnNpZGUgdGhlIGJvZHkgb2YgdGhlIGxvb3ApLiAgKi8KKworc3RydWN0IHRyZWVfbml0ZXJfZGVzYworeworICB0cmVlIGFzc3VtcHRpb25zOwkvKiBUaGUgYm9vbGVhbiBleHByZXNzaW9uLiAgSWYgdGhpcyBleHByZXNzaW9uIGV2YWx1YXRlcworCQkJICAgdG8gZmFsc2UsIHRoZW4gdGhlIG90aGVyIGZpZWxkcyBpbiB0aGlzIHN0cnVjdHVyZQorCQkJICAgc2hvdWxkIG5vdCBiZSB1c2VkOyB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGV5CisJCQkgICB3aWxsIGJlIGNvcnJlY3QuICAqLworICB0cmVlIG1heV9iZV96ZXJvOwkvKiBUaGUgYm9vbGVhbiBleHByZXNzaW9uLiAgSWYgaXQgZXZhbHVhdGVzIHRvIHRydWUsCisJCQkgICB0aGUgbG9vcCB3aWxsIGV4aXQgaW4gdGhlIGZpcnN0IGl0ZXJhdGlvbiAoaS5lLgorCQkJICAgaXRzIGxhdGNoIHdpbGwgbm90IGJlIGV4ZWN1dGVkKSwgZXZlbiBpZiB0aGUgbml0ZXIKKwkJCSAgIGZpZWxkIHNheXMgb3RoZXJ3aXNlLiAgKi8KKyAgdHJlZSBuaXRlcjsJCS8qIFRoZSBleHByZXNzaW9uIGdpdmluZyB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2YKKwkJCSAgIGEgbG9vcCAocHJvdmlkZWQgdGhhdCBhc3N1bXB0aW9ucyA9PSB0cnVlIGFuZAorCQkJICAgbWF5X2JlX3plcm8gPT0gZmFsc2UpLCBtb3JlIHByZWNpc2VseSB0aGUgbnVtYmVyCisJCQkgICBvZiBleGVjdXRpb25zIG9mIHRoZSBsYXRjaCBvZiB0aGUgbG9vcC4gICovCisgIGRvdWJsZV9pbnQgbWF4OwkvKiBUaGUgdXBwZXIgYm91bmQgb24gdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIG9mCisJCQkgICB0aGUgbG9vcC4gICovCisKKyAgLyogVGhlIHNpbXBsaWZpZWQgc2hhcGUgb2YgdGhlIGV4aXQgY29uZGl0aW9uLiAgVGhlIGxvb3AgZXhpdHMgaWYKKyAgICAgQ09OVFJPTCBDTVAgQk9VTkQgaXMgZmFsc2UsIHdoZXJlIENNUCBpcyBvbmUgb2YgTkVfRVhQUiwKKyAgICAgTFRfRVhQUiwgb3IgR1RfRVhQUiwgYW5kIHN0ZXAgb2YgQ09OVFJPTCBpcyBwb3NpdGl2ZSBpZiBDTVAgaXMKKyAgICAgTEVfRVhQUiBhbmQgbmVnYXRpdmUgaWYgQ01QIGlzIEdFX0VYUFIuICBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWQKKyAgICAgYnkgbG9vcCB1bnJvbGxpbmcuICAqLworICBhZmZpbmVfaXYgY29udHJvbDsKKyAgdHJlZSBib3VuZDsKKyAgZW51bSB0cmVlX2NvZGUgY21wOworfTsKKworLyogSW4gdHJlZS1zc2EtcGhpb3B0LmMgKi8KK2Jvb2wgZW1wdHlfYmxvY2tfcCAoYmFzaWNfYmxvY2spOworYmFzaWNfYmxvY2sgKmJsb2Nrc19pbl9waGlvcHRfb3JkZXIgKHZvaWQpOworCisvKiBJbiB0cmVlLXNzYS1sb29wKi5jICAqLworCit2b2lkIHRyZWVfc3NhX2xpbSAodm9pZCk7Cit1bnNpZ25lZCBpbnQgdHJlZV9zc2FfdW5zd2l0Y2hfbG9vcHMgKHZvaWQpOwordW5zaWduZWQgaW50IGNhbm9uaWNhbGl6ZV9pbmR1Y3Rpb25fdmFyaWFibGVzICh2b2lkKTsKK3Vuc2lnbmVkIGludCB0cmVlX3Vucm9sbF9sb29wc19jb21wbGV0ZWx5IChib29sLCBib29sKTsKK3Vuc2lnbmVkIGludCB0cmVlX3NzYV9wcmVmZXRjaF9hcnJheXMgKHZvaWQpOwordm9pZCB0cmVlX3NzYV9pdl9vcHRpbWl6ZSAodm9pZCk7Cit1bnNpZ25lZCB0cmVlX3ByZWRpY3RpdmVfY29tbW9uaW5nICh2b2lkKTsKK3RyZWUgY2Fub25pY2FsaXplX2xvb3BfaXZzIChzdHJ1Y3QgbG9vcCAqLCB0cmVlICosIGJvb2wpOworYm9vbCBwYXJhbGxlbGl6ZV9sb29wcyAodm9pZCk7CisKK2Jvb2wgbG9vcF9vbmx5X2V4aXRfcCAoY29uc3Qgc3RydWN0IGxvb3AgKiwgY29uc3RfZWRnZSk7Citib29sIG51bWJlcl9vZl9pdGVyYXRpb25zX2V4aXQgKHN0cnVjdCBsb29wICosIGVkZ2UsCisJCQkJc3RydWN0IHRyZWVfbml0ZXJfZGVzYyAqbml0ZXIsIGJvb2wpOwordHJlZSBmaW5kX2xvb3Bfbml0ZXIgKHN0cnVjdCBsb29wICosIGVkZ2UgKik7Cit0cmVlIGxvb3Bfbml0ZXJfYnlfZXZhbCAoc3RydWN0IGxvb3AgKiwgZWRnZSk7Cit0cmVlIGZpbmRfbG9vcF9uaXRlcl9ieV9ldmFsIChzdHJ1Y3QgbG9vcCAqLCBlZGdlICopOwordm9pZCBlc3RpbWF0ZV9udW1iZXJzX29mX2l0ZXJhdGlvbnMgKHZvaWQpOworYm9vbCBhcnJheV9hdF9zdHJ1Y3RfZW5kX3AgKHRyZWUpOworYm9vbCBzY2V2X3Byb2JhYmx5X3dyYXBzX3AgKHRyZWUsIHRyZWUsIGdpbXBsZSwgc3RydWN0IGxvb3AgKiwgYm9vbCk7Citib29sIGNvbnZlcnRfYWZmaW5lX3NjZXYgKHN0cnVjdCBsb29wICosIHRyZWUsIHRyZWUgKiwgdHJlZSAqLCBnaW1wbGUsIGJvb2wpOworCitib29sIG5vd3JhcF90eXBlX3AgKHRyZWUpOworZW51bSBldl9kaXJlY3Rpb24ge0VWX0RJUl9HUk9XUywgRVZfRElSX0RFQ1JFQVNFUywgRVZfRElSX1VOS05PV059OworZW51bSBldl9kaXJlY3Rpb24gc2Nldl9kaXJlY3Rpb24gKGNvbnN0X3RyZWUpOworCit2b2lkIGZyZWVfbnVtYmVyc19vZl9pdGVyYXRpb25zX2VzdGltYXRlcyAodm9pZCk7Cit2b2lkIGZyZWVfbnVtYmVyc19vZl9pdGVyYXRpb25zX2VzdGltYXRlc19sb29wIChzdHJ1Y3QgbG9vcCAqKTsKK3ZvaWQgcmV3cml0ZV9pbnRvX2xvb3BfY2xvc2VkX3NzYSAoYml0bWFwLCB1bnNpZ25lZCk7Cit2b2lkIHZlcmlmeV9sb29wX2Nsb3NlZF9zc2EgKHZvaWQpOworYm9vbCBmb3JfZWFjaF9pbmRleCAodHJlZSAqLCBib29sICgqKSAodHJlZSwgdHJlZSAqLCB2b2lkICopLCB2b2lkICopOwordm9pZCBjcmVhdGVfaXYgKHRyZWUsIHRyZWUsIHRyZWUsIHN0cnVjdCBsb29wICosIGdpbXBsZV9zdG10X2l0ZXJhdG9yICosIGJvb2wsCisJCXRyZWUgKiwgdHJlZSAqKTsKK2Jhc2ljX2Jsb2NrIHNwbGl0X2xvb3BfZXhpdF9lZGdlIChlZGdlKTsKK3ZvaWQgc3RhbmRhcmRfaXZfaW5jcmVtZW50X3Bvc2l0aW9uIChzdHJ1Y3QgbG9vcCAqLCBnaW1wbGVfc3RtdF9pdGVyYXRvciAqLAorCQkJCSAgICAgYm9vbCAqKTsKK2Jhc2ljX2Jsb2NrIGlwX2VuZF9wb3MgKHN0cnVjdCBsb29wICopOworYmFzaWNfYmxvY2sgaXBfbm9ybWFsX3BvcyAoc3RydWN0IGxvb3AgKik7Citib29sIGdpbXBsZV9kdXBsaWNhdGVfbG9vcF90b19oZWFkZXJfZWRnZSAoc3RydWN0IGxvb3AgKiwgZWRnZSwKKwkJCQkJIHVuc2lnbmVkIGludCwgc2JpdG1hcCwKKwkJCQkJIGVkZ2UsIFZFQyAoZWRnZSwgaGVhcCkgKiosCisJCQkJCSBpbnQpOworc3RydWN0IGxvb3AgKnNscGVlbF90cmVlX2R1cGxpY2F0ZV9sb29wX3RvX2VkZ2VfY2ZnIChzdHJ1Y3QgbG9vcCAqLCBlZGdlKTsKK3ZvaWQgcmVuYW1lX3ZhcmlhYmxlc19pbl9sb29wIChzdHJ1Y3QgbG9vcCAqKTsKK3ZvaWQgcmVuYW1lX3ZhcmlhYmxlc19pbl9iYiAoYmFzaWNfYmxvY2sgYmIpOworc3RydWN0IGxvb3AgKnRyZWVfc3NhX2xvb3BfdmVyc2lvbiAoc3RydWN0IGxvb3AgKiwgdHJlZSwKKwkJCQkgICAgYmFzaWNfYmxvY2sgKik7Cit0cmVlIGV4cGFuZF9zaW1wbGVfb3BlcmF0aW9ucyAodHJlZSk7Cit2b2lkIHN1YnN0aXR1dGVfaW5fbG9vcF9pbmZvIChzdHJ1Y3QgbG9vcCAqLCB0cmVlLCB0cmVlKTsKK2VkZ2Ugc2luZ2xlX2RvbV9leGl0IChzdHJ1Y3QgbG9vcCAqKTsKK2Jvb2wgY2FuX3Vucm9sbF9sb29wX3AgKHN0cnVjdCBsb29wICpsb29wLCB1bnNpZ25lZCBmYWN0b3IsCisJCQlzdHJ1Y3QgdHJlZV9uaXRlcl9kZXNjICpuaXRlcik7Cit2b2lkIHRyZWVfdW5yb2xsX2xvb3AgKHN0cnVjdCBsb29wICosIHVuc2lnbmVkLAorCQkgICAgICAgZWRnZSwgc3RydWN0IHRyZWVfbml0ZXJfZGVzYyAqKTsKK3R5cGVkZWYgdm9pZCAoKnRyYW5zZm9ybV9jYWxsYmFjaykoc3RydWN0IGxvb3AgKiwgdm9pZCAqKTsKK3ZvaWQgdHJlZV90cmFuc2Zvcm1fYW5kX3Vucm9sbF9sb29wIChzdHJ1Y3QgbG9vcCAqLCB1bnNpZ25lZCwKKwkJCQkgICAgIGVkZ2UsIHN0cnVjdCB0cmVlX25pdGVyX2Rlc2MgKiwKKwkJCQkgICAgIHRyYW5zZm9ybV9jYWxsYmFjaywgdm9pZCAqKTsKK2Jvb2wgY29udGFpbnNfYWJub3JtYWxfc3NhX25hbWVfcCAodHJlZSk7Citib29sIHN0bXRfZG9taW5hdGVzX3N0bXRfcCAoZ2ltcGxlLCBnaW1wbGUpOwordm9pZCBtYXJrX3ZpcnR1YWxfb3BzX2Zvcl9yZW5hbWluZyAoZ2ltcGxlKTsKKworLyogSW4gdHJlZS1zc2EtZGNlLmMgKi8KK3ZvaWQgbWFya192aXJ0dWFsX3BoaV9yZXN1bHRfZm9yX3JlbmFtaW5nIChnaW1wbGUpOworCisvKiBJbiB0cmVlLXNzYS10aHJlYWRlZGdlLmMgKi8KK2V4dGVybiB2b2lkIHRocmVhZGVkZ2VfaW5pdGlhbGl6ZV92YWx1ZXMgKHZvaWQpOworZXh0ZXJuIHZvaWQgdGhyZWFkZWRnZV9maW5hbGl6ZV92YWx1ZXMgKHZvaWQpOworZXh0ZXJuIFZFQyh0cmVlLGhlYXApICpzc2FfbmFtZV92YWx1ZXM7CisjZGVmaW5lIFNTQV9OQU1FX1ZBTFVFKHgpIFwKKyAgICAoU1NBX05BTUVfVkVSU0lPTih4KSA8IFZFQ19sZW5ndGgodHJlZSwgc3NhX25hbWVfdmFsdWVzKSBcCisgICAgID8gVkVDX2luZGV4KHRyZWUsIHNzYV9uYW1lX3ZhbHVlcywgU1NBX05BTUVfVkVSU0lPTih4KSkgXAorICAgICA6IE5VTExfVFJFRSkKK2V4dGVybiB2b2lkIHNldF9zc2FfbmFtZV92YWx1ZSAodHJlZSwgdHJlZSk7CitleHRlcm4gYm9vbCBwb3RlbnRpYWxseV90aHJlYWRhYmxlX2Jsb2NrIChiYXNpY19ibG9jayk7CitleHRlcm4gdm9pZCB0aHJlYWRfYWNyb3NzX2VkZ2UgKGdpbXBsZSwgZWRnZSwgYm9vbCwKKwkJCQlWRUModHJlZSwgaGVhcCkgKiosIHRyZWUgKCopIChnaW1wbGUsIGdpbXBsZSkpOworCisvKiBJbiB0cmVlLXNzYS1sb29wLWltLmMgICovCisvKiBUaGUgcG9zc2liaWxpdGllcyBvZiBzdGF0ZW1lbnQgbW92ZW1lbnQuICAqLworCitlbnVtIG1vdmVfcG9zCisgIHsKKyAgICBNT1ZFX0lNUE9TU0lCTEUsCQkvKiBObyBtb3ZlbWVudCAtLSBzaWRlIGVmZmVjdCBleHByZXNzaW9uLiAgKi8KKyAgICBNT1ZFX1BSRVNFUlZFX0VYRUNVVElPTiwJLyogTXVzdCBub3QgY2F1c2UgdGhlIG5vbi1leGVjdXRlZCBzdGF0ZW1lbnQKKwkJCQkgICBiZWNvbWUgZXhlY3V0ZWQgLS0gbWVtb3J5IGFjY2Vzc2VzLCAuLi4gKi8KKyAgICBNT1ZFX1BPU1NJQkxFCQkvKiBVbmxpbWl0ZWQgbW92ZW1lbnQuICAqLworICB9OworZXh0ZXJuIGVudW0gbW92ZV9wb3MgbW92ZW1lbnRfcG9zc2liaWxpdHkgKGdpbXBsZSk7CitjaGFyICpnZXRfbHNtX3RtcF9uYW1lICh0cmVlLCB1bnNpZ25lZCk7CisKKy8qIEluIHRyZWUtZmxvdy1pbmxpbmUuaCAgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19jYWxsX2Nsb2JiZXJlZCAoY29uc3RfdHJlZSk7CitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2lzX3VzZWQgKHRyZWUpOworc3RhdGljIGlubGluZSBib29sIHVubW9kaWZpYWJsZV92YXJfcCAoY29uc3RfdHJlZSk7CitzdGF0aWMgaW5saW5lIGJvb2wgcmVmX2NvbnRhaW5zX2FycmF5X3JlZiAoY29uc3RfdHJlZSk7CitzdGF0aWMgaW5saW5lIGJvb2wgYXJyYXlfcmVmX2NvbnRhaW5zX2luZGlyZWN0X3JlZiAoY29uc3RfdHJlZSk7CisKKy8qIEluIHRyZWUtZWguYyAgKi8KK2V4dGVybiB2b2lkIG1ha2VfZWhfZWRnZXMgKGdpbXBsZSk7CitleHRlcm4gYm9vbCBtYWtlX2VoX2Rpc3BhdGNoX2VkZ2VzIChnaW1wbGUpOworZXh0ZXJuIGVkZ2UgcmVkaXJlY3RfZWhfZWRnZSAoZWRnZSwgYmFzaWNfYmxvY2spOworZXh0ZXJuIHZvaWQgcmVkaXJlY3RfZWhfZGlzcGF0Y2hfZWRnZSAoZ2ltcGxlLCBlZGdlLCBiYXNpY19ibG9jayk7CitleHRlcm4gYm9vbCB0cmVlX2NvdWxkX3RyYXBfcCAodHJlZSk7CitleHRlcm4gYm9vbCBvcGVyYXRpb25fY291bGRfdHJhcF9oZWxwZXJfcCAoZW51bSB0cmVlX2NvZGUsIGJvb2wsIGJvb2wsIGJvb2wsCisJCQkJCSAgIGJvb2wsIHRyZWUsIGJvb2wgKik7CitleHRlcm4gYm9vbCBvcGVyYXRpb25fY291bGRfdHJhcF9wIChlbnVtIHRyZWVfY29kZSwgYm9vbCwgYm9vbCwgdHJlZSk7CitleHRlcm4gYm9vbCBzdG10X2NvdWxkX3Rocm93X3AgKGdpbXBsZSk7CitleHRlcm4gYm9vbCB0cmVlX2NvdWxkX3Rocm93X3AgKHRyZWUpOworZXh0ZXJuIGJvb2wgc3RtdF9jYW5fdGhyb3dfaW50ZXJuYWwgKGdpbXBsZSk7CitleHRlcm4gYm9vbCBzdG10X2Nhbl90aHJvd19leHRlcm5hbCAoZ2ltcGxlKTsKK2V4dGVybiB2b2lkIGFkZF9zdG10X3RvX2VoX2xwX2ZuIChzdHJ1Y3QgZnVuY3Rpb24gKiwgZ2ltcGxlLCBpbnQpOworZXh0ZXJuIHZvaWQgYWRkX3N0bXRfdG9fZWhfbHAgKGdpbXBsZSwgaW50KTsKK2V4dGVybiBib29sIHJlbW92ZV9zdG10X2Zyb21fZWhfbHAgKGdpbXBsZSk7CitleHRlcm4gYm9vbCByZW1vdmVfc3RtdF9mcm9tX2VoX2xwX2ZuIChzdHJ1Y3QgZnVuY3Rpb24gKiwgZ2ltcGxlKTsKK2V4dGVybiBpbnQgbG9va3VwX3N0bXRfZWhfbHBfZm4gKHN0cnVjdCBmdW5jdGlvbiAqLCBnaW1wbGUpOworZXh0ZXJuIGludCBsb29rdXBfc3RtdF9laF9scCAoZ2ltcGxlKTsKK2V4dGVybiBib29sIG1heWJlX2NsZWFuX2VoX3N0bXRfZm4gKHN0cnVjdCBmdW5jdGlvbiAqLCBnaW1wbGUpOworZXh0ZXJuIGJvb2wgbWF5YmVfY2xlYW5fZWhfc3RtdCAoZ2ltcGxlKTsKK2V4dGVybiBib29sIG1heWJlX2NsZWFuX29yX3JlcGxhY2VfZWhfc3RtdCAoZ2ltcGxlLCBnaW1wbGUpOworZXh0ZXJuIGJvb2wgbWF5YmVfZHVwbGljYXRlX2VoX3N0bXRfZm4gKHN0cnVjdCBmdW5jdGlvbiAqLCBnaW1wbGUsCisJCQkJCXN0cnVjdCBmdW5jdGlvbiAqLCBnaW1wbGUsCisJCQkJCXN0cnVjdCBwb2ludGVyX21hcF90ICosIGludCk7CitleHRlcm4gYm9vbCBtYXliZV9kdXBsaWNhdGVfZWhfc3RtdCAoZ2ltcGxlLCBnaW1wbGUpOworZXh0ZXJuIGJvb2wgdmVyaWZ5X2VoX2VkZ2VzIChnaW1wbGUpOworZXh0ZXJuIGJvb2wgdmVyaWZ5X2VoX2Rpc3BhdGNoX2VkZ2UgKGdpbXBsZSk7CisKKy8qIEluIHRyZWUtc3NhLXByZS5jICAqLworc3RydWN0IHByZV9leHByX2Q7Cit2b2lkIGFkZF90b192YWx1ZSAodW5zaWduZWQgaW50LCBzdHJ1Y3QgcHJlX2V4cHJfZCAqKTsKK3ZvaWQgZGVidWdfdmFsdWVfZXhwcmVzc2lvbnMgKHVuc2lnbmVkIGludCk7Cit2b2lkIHByaW50X3ZhbHVlX2V4cHJlc3Npb25zIChGSUxFICosIHVuc2lnbmVkIGludCk7CisKKy8qIEluIHRyZWUtc3NhLXNpbmsuYyAgKi8KK2Jvb2wgaXNfaGlkZGVuX2dsb2JhbF9zdG9yZSAoZ2ltcGxlKTsKKworLyogSW4gdHJlZS1sb29wLWxpbmVhci5jICAqLworZXh0ZXJuIHZvaWQgbGluZWFyX3RyYW5zZm9ybV9sb29wcyAodm9pZCk7CitleHRlcm4gdW5zaWduZWQgcGVyZmVjdF9sb29wX25lc3RfZGVwdGggKHN0cnVjdCBsb29wICopOworCisvKiBJbiBncmFwaGl0ZS5jICAqLworZXh0ZXJuIHZvaWQgZ3JhcGhpdGVfdHJhbnNmb3JtX2xvb3BzICh2b2lkKTsKKworLyogSW4gdHJlZS1kYXRhLXJlZi5jICAqLworZXh0ZXJuIHZvaWQgdHJlZV9jaGVja19kYXRhX2RlcHMgKHZvaWQpOworCisvKiBJbiB0cmVlLXNzYS1sb29wLWl2b3B0cy5jICAqLworYm9vbCBleHByX2ludmFyaWFudF9pbl9sb29wX3AgKHN0cnVjdCBsb29wICosIHRyZWUpOworYm9vbCBzdG10X2ludmFyaWFudF9pbl9sb29wX3AgKHN0cnVjdCBsb29wICosIGdpbXBsZSk7Citib29sIG11bHRpcGxpZXJfYWxsb3dlZF9pbl9hZGRyZXNzX3AgKEhPU1RfV0lERV9JTlQsIGVudW0gbWFjaGluZV9tb2RlLAorCQkJCSAgICAgIGFkZHJfc3BhY2VfdCk7Cit1bnNpZ25lZCBtdWx0aXBseV9ieV9jb3N0IChIT1NUX1dJREVfSU5ULCBlbnVtIG1hY2hpbmVfbW9kZSwgYm9vbCk7Citib29sIG1heV9iZV9ub25hZGRyZXNzYWJsZV9wICh0cmVlIGV4cHIpOworCisvKiBJbiB0cmVlLXNzYS10aHJlYWR1cGRhdGUuYy4gICovCitleHRlcm4gYm9vbCB0aHJlYWRfdGhyb3VnaF9hbGxfYmxvY2tzIChib29sKTsKK2V4dGVybiB2b2lkIHJlZ2lzdGVyX2p1bXBfdGhyZWFkIChlZGdlLCBlZGdlKTsKKworLyogSW4gZ2ltcGxpZnkuYyAgKi8KK3RyZWUgZm9yY2VfZ2ltcGxlX29wZXJhbmQgKHRyZWUsIGdpbXBsZV9zZXEgKiwgYm9vbCwgdHJlZSk7Cit0cmVlIGZvcmNlX2dpbXBsZV9vcGVyYW5kX2dzaSAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgdHJlZSwgYm9vbCwgdHJlZSwKKwkJCSAgICAgICBib29sLCBlbnVtIGdzaV9pdGVyYXRvcl91cGRhdGUpOwordHJlZSBnaW1wbGVfZm9sZF9pbmRpcmVjdF9yZWYgKHRyZWUpOworCisvKiBJbiB0cmVlLXNzYS1saXZlLmMgKi8KK2V4dGVybiB2b2lkIHJlbW92ZV91bnVzZWRfbG9jYWxzICh2b2lkKTsKK2V4dGVybiB2b2lkIGR1bXBfc2NvcGVfYmxvY2tzIChGSUxFICosIGludCk7CitleHRlcm4gdm9pZCBkZWJ1Z19zY29wZV9ibG9ja3MgKGludCk7CitleHRlcm4gdm9pZCBkZWJ1Z19zY29wZV9ibG9jayAodHJlZSwgaW50KTsKKworLyogSW4gdHJlZS1zc2EtYWRkcmVzcy5jICAqLworCisvKiBEZXNjcmlwdGlvbiBvZiBhIG1lbW9yeSBhZGRyZXNzLiAgKi8KKworc3RydWN0IG1lbV9hZGRyZXNzCit7CisgIHRyZWUgc3ltYm9sLCBiYXNlLCBpbmRleCwgc3RlcCwgb2Zmc2V0OworfTsKKworc3RydWN0IGFmZmluZV90cmVlX2NvbWJpbmF0aW9uOwordHJlZSBjcmVhdGVfbWVtX3JlZiAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgdHJlZSwKKwkJICAgICBzdHJ1Y3QgYWZmaW5lX3RyZWVfY29tYmluYXRpb24gKiwgdHJlZSwgYm9vbCk7CitydHggYWRkcl9mb3JfbWVtX3JlZiAoc3RydWN0IG1lbV9hZGRyZXNzICosIGFkZHJfc3BhY2VfdCwgYm9vbCk7Cit2b2lkIGdldF9hZGRyZXNzX2Rlc2NyaXB0aW9uICh0cmVlLCBzdHJ1Y3QgbWVtX2FkZHJlc3MgKik7Cit0cmVlIG1heWJlX2ZvbGRfdG1yICh0cmVlKTsKKwordW5zaWduZWQgaW50IGV4ZWN1dGVfZnJlZV9kYXRhc3RydWN0dXJlcyAodm9pZCk7Cit1bnNpZ25lZCBpbnQgZXhlY3V0ZV9maXh1cF9jZmcgKHZvaWQpOworCisjaW5jbHVkZSAidHJlZS1mbG93LWlubGluZS5oIgorCit2b2lkIHN3YXBfdHJlZV9vcGVyYW5kcyAoZ2ltcGxlLCB0cmVlICosIHRyZWUgKik7CisKK2ludCBsZWFzdF9jb21tb25fbXVsdGlwbGUgKGludCwgaW50KTsKKworI2VuZGlmIC8qIF9UUkVFX0ZMT1dfSCAgKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS90cmVlLWlubGluZS5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3RyZWUtaW5saW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk5MzJlOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS90cmVlLWlubGluZS5oCkBAIC0wLDAgKzEsMTkyIEBACisvKiBUcmVlIGlubGluaW5nIGhvb2tzIGFuZCBkZWNsYXJhdGlvbnMuCisgICBDb3B5cmlnaHQgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCwgMjAwOQorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAcmVkaGF0LmNvbT4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX1RSRUVfSU5MSU5FX0gKKyNkZWZpbmUgR0NDX1RSRUVfSU5MSU5FX0gKKworI2luY2x1ZGUgImdpbXBsZS5oIgorCitzdHJ1Y3QgY2dyYXBoX2VkZ2U7CisKKy8qIEluZGljYXRlIHRoZSBkZXNpcmVkIGJlaGF2aW9yIHdydCBjYWxsIGdyYXBoIGVkZ2VzLiAgV2UgY2FuIGVpdGhlcgorICAgZHVwbGljYXRlIHRoZSBlZGdlIChpbmxpbmluZywgY2xvbmluZyksIG1vdmUgdGhlIGVkZ2UgKHZlcnNpb25pbmcsCisgICBwYXJhbGxlbGl6YXRpb24pLCBvciBtb3ZlIHRoZSBlZGdlcyBvZiB0aGUgY2xvbmVzIChzYXZpbmcpLiAgKi8KKworZW51bSBjb3B5X2JvZHlfY2dlX3doaWNoCit7CisgIENCX0NHRV9EVVBMSUNBVEUsCisgIENCX0NHRV9NT1ZFLAorICBDQl9DR0VfTU9WRV9DTE9ORVMKK307CisKKy8qIERhdGEgcmVxdWlyZWQgZm9yIGZ1bmN0aW9uIGJvZHkgZHVwbGljYXRpb24uICAqLworCit0eXBlZGVmIHN0cnVjdCBjb3B5X2JvZHlfZGF0YQoreworICAvKiBGVU5DVElPTl9ERUNMIGZvciBmdW5jdGlvbiBiZWluZyBpbmxpbmVkLCBvciBpbiBnZW5lcmFsIHRoZQorICAgICBzb3VyY2UgZnVuY3Rpb24gcHJvdmlkaW5nIHRoZSBvcmlnaW5hbCB0cmVlcy4gICovCisgIHRyZWUgc3JjX2ZuOworCisgIC8qIEZVTkNUSU9OX0RFQ0wgZm9yIGZ1bmN0aW9uIGJlaW5nIGlubGluZWQgaW50bywgb3IgaW4gZ2VuZXJhbAorICAgICB0aGUgZGVzdGluYXRpb24gZnVuY3Rpb24gcmVjZWl2aW5nIHRoZSBuZXcgdHJlZXMuICAqLworICB0cmVlIGRzdF9mbjsKKworICAvKiBDYWxsZ3JhcGggbm9kZSBvZiB0aGUgc291cmNlIGZ1bmN0aW9uLiAgKi8KKyAgc3RydWN0IGNncmFwaF9ub2RlICpzcmNfbm9kZTsKKworICAvKiBDYWxsZ3JhcGggbm9kZSBvZiB0aGUgZGVzdGluYXRpb24gZnVuY3Rpb24uICAqLworICBzdHJ1Y3QgY2dyYXBoX25vZGUgKmRzdF9ub2RlOworCisgIC8qIHN0cnVjdCBmdW5jdGlvbiBmb3IgZnVuY3Rpb24gYmVpbmcgaW5saW5lZC4gIFVzdWFsbHkgdGhpcyBpcyB0aGUgc2FtZQorICAgICBhcyBERUNMX1NUUlVDVF9GVU5DVElPTiAoc3JjX2ZuKSwgYnV0IGNhbiBiZSBkaWZmZXJlbnQgaWYgc2F2ZWRfY2ZnCisgICAgIGFuZCBzYXZlZF9laCBhcmUgaW4gdXNlLiAgKi8KKyAgc3RydWN0IGZ1bmN0aW9uICpzcmNfY2Z1bjsKKworICAvKiBUaGUgVkFSX0RFQ0wgZm9yIHRoZSByZXR1cm4gdmFsdWUuICAqLworICB0cmVlIHJldHZhcjsKKworICAvKiBUaGUgbWFwIGZyb20gbG9jYWwgZGVjbGFyYXRpb25zIGluIHRoZSBpbmxpbmVkIGZ1bmN0aW9uIHRvCisgICAgIGVxdWl2YWxlbnRzIGluIHRoZSBmdW5jdGlvbiBpbnRvIHdoaWNoIGl0IGlzIGJlaW5nIGlubGluZWQuICAqLworICBzdHJ1Y3QgcG9pbnRlcl9tYXBfdCAqZGVjbF9tYXA7CisKKyAgLyogQ3JlYXRlIGEgbmV3IGRlY2wgdG8gcmVwbGFjZSBERUNMIGluIHRoZSBkZXN0aW5hdGlvbiBmdW5jdGlvbi4gICovCisgIHRyZWUgKCpjb3B5X2RlY2wpICh0cmVlLCBzdHJ1Y3QgY29weV9ib2R5X2RhdGEgKik7CisKKyAgLyogQ3VycmVudCBCTE9DSy4gICovCisgIHRyZWUgYmxvY2s7CisKKyAgLyogR0lNUExFX0NBTEwgaWYgdmEgYXJnIHBhcmFtZXRlciBwYWNrcyBzaG91bGQgYmUgZXhwYW5kZWQgb3IgTlVMTAorICAgICBpcyBub3QuICAqLworICBnaW1wbGUgZ2ltcGxlX2NhbGw7CisKKyAgLyogRXhjZXB0aW9uIGxhbmRpbmcgcGFkIHRoZSBpbmxpbmVkIGNhbGwgbGllcyBpbi4gICovCisgIGludCBlaF9scF9ucjsKKworICAvKiBNYXBzIHJlZ2lvbiBhbmQgbGFuZGluZyBwYWQgc3RydWN0dXJlcyBmcm9tIHRoZSBmdW5jdGlvbiBiZWluZyBjb3BpZWQKKyAgICAgdG8gZHVwbGljYXRlcyBjcmVhdGVkIHdpdGhpbiB0aGUgZnVuY3Rpb24gd2UgaW5saW5lIGludG8uICAqLworICBzdHJ1Y3QgcG9pbnRlcl9tYXBfdCAqZWhfbWFwOworCisgIC8qIFdlIHVzZSB0aGUgc2FtZSBtZWNoYW5pc20gZG8gYWxsIHNvcnRzIG9mIGRpZmZlcmVudCB0aGluZ3MuICBSYXRoZXIKKyAgICAgdGhhbiBlbnVtZXJhdGluZyB0aGUgZGlmZmVyZW50IGNhc2VzLCB3ZSBjYXRlZ29yaXplIHRoZSBiZWhhdmlvcgorICAgICBpbiB0aGUgdmFyaW91cyBzaXR1YXRpb25zLiAgKi8KKworICAvKiBXaGF0IHRvIGRvIHdpdGggY2FsbCBncmFwaCBlZGdlcy4gICovCisgIGVudW0gY29weV9ib2R5X2NnZV93aGljaCB0cmFuc2Zvcm1fY2FsbF9ncmFwaF9lZGdlczsKKworICAvKiBUcnVlIGlmIGEgbmV3IENGRyBzaG91bGQgYmUgY3JlYXRlZC4gIEZhbHNlIGZvciBpbmxpbmluZywgdHJ1ZSBmb3IKKyAgICAgZXZlcnl0aGluZyBlbHNlLiAgKi8KKyAgYm9vbCB0cmFuc2Zvcm1fbmV3X2NmZzsKKworICAvKiBUcnVlIGlmIFJFVFVSTl9FWFBScyBzaG91bGQgYmUgdHJhbnNmb3JtZWQgdG8ganVzdCB0aGUgY29udGFpbmVkCisgICAgIE1PRElGWV9FWFBSLiAgVGhlIGJyYW5jaCBzZW1hbnRpY3Mgb2YgdGhlIHJldHVybiB3aWxsIGJlIGhhbmRsZWQKKyAgICAgYnkgbWFuaXB1bGF0aW5nIHRoZSBDRkcgcmF0aGVyIHRoYW4gYSBzdGF0ZW1lbnQuICAqLworICBib29sIHRyYW5zZm9ybV9yZXR1cm5fdG9fbW9kaWZ5OworCisgIC8qIFRydWUgaWYgdGhpcyBzdGF0ZW1lbnQgd2lsbCBuZWVkIHRvIGJlIHJlZ2ltcGxpZmllZC4gICovCisgIGJvb2wgcmVnaW1wbGlmeTsKKworICAvKiBUcnVlIGlmIHRyZWVzIHNob3VsZCBub3QgYmUgdW5zaGFyZWQuICAqLworICBib29sIGRvX25vdF91bnNoYXJlOworCisgIC8qID4gMCBpZiB3ZSBhcmUgcmVtYXBwaW5nIGEgdHlwZSBjdXJyZW50bHkuICAqLworICBpbnQgcmVtYXBwaW5nX3R5cGVfZGVwdGg7CisKKyAgLyogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBkdXBsaWNhdGluZyBCTE9DSyBub2Rlcy4gICovCisgIHZvaWQgKCp0cmFuc2Zvcm1fbGFuZ19pbnNlcnRfYmxvY2spICh0cmVlKTsKKworICAvKiBTdGF0ZW1lbnRzIHRoYXQgbWlnaHQgYmUgcG9zc2libHkgZm9sZGVkLiAgKi8KKyAgc3RydWN0IHBvaW50ZXJfc2V0X3QgKnN0YXRlbWVudHNfdG9fZm9sZDsKKworICAvKiBFbnRyeSBiYXNpYyBibG9jayB0byBjdXJyZW50bHkgY29waWVkIGJvZHkuICAqLworICBzdHJ1Y3QgYmFzaWNfYmxvY2tfZGVmICplbnRyeV9iYjsKKworICAvKiBEZWJ1ZyBzdGF0ZW1lbnRzIHRoYXQgbmVlZCBwcm9jZXNzaW5nLiAgKi8KKyAgVkVDKGdpbXBsZSxoZWFwKSAqZGVidWdfc3RtdHM7CisKKyAgLyogQSBtYXAgZnJvbSBsb2NhbCBkZWNsYXJhdGlvbnMgaW4gdGhlIGlubGluZWQgZnVuY3Rpb24gdG8KKyAgICAgZXF1aXZhbGVudHMgaW4gdGhlIGZ1bmN0aW9uIGludG8gd2hpY2ggaXQgaXMgYmVpbmcgaW5saW5lZCwgd2hlcmUKKyAgICAgdGhlIG9yaWdpbmFscyBoYXZlIGJlZW4gbWFwcGVkIHRvIGEgdmFsdWUgcmF0aGVyIHRoYW4gdG8gYQorICAgICB2YXJpYWJsZS4gICovCisgIHN0cnVjdCBwb2ludGVyX21hcF90ICpkZWJ1Z19tYXA7Cit9IGNvcHlfYm9keV9kYXRhOworCisvKiBXZWlnaHRzIG9mIGNvbnN0cnVjdGlvbnMgZm9yIGVzdGltYXRlX251bV9pbnNucy4gICovCisKK3R5cGVkZWYgc3RydWN0IGVuaV93ZWlnaHRzX2QKK3sKKyAgLyogQ29zdCBwZXIgY2FsbC4gICovCisgIHVuc2lnbmVkIGNhbGxfY29zdDsKKworICAvKiBDb3N0IHBlciBjYWxsIHRvIGEgdGFyZ2V0IHNwZWNpZmljIGJ1aWx0aW4gKi8KKyAgdW5zaWduZWQgdGFyZ2V0X2J1aWx0aW5fY2FsbF9jb3N0OworCisgIC8qIENvc3Qgb2YgImV4cGVuc2l2ZSIgZGl2IGFuZCBtb2Qgb3BlcmF0aW9ucy4gICovCisgIHVuc2lnbmVkIGRpdl9tb2RfY29zdDsKKworICAvKiBDb3N0IGZvciBvbXAgY29uc3RydWN0LiAgKi8KKyAgdW5zaWduZWQgb21wX2Nvc3Q7CisKKyAgLyogVHJ1ZSB3aGVuIHRpbWUgb2Ygc3RhdGVtbnQgc2hvdWxkIGJlIGVzdGltYXRlZC4gIFRodXMgaS5lCisgICAgIGNvc3Qgb2Ygc3dpdGNoIHN0YXRlbWVudCBpcyBsb2dhcml0aG1pYyByYXRoZXIgdGhhbiBsaW5lYXIgaW4gbnVtYmVyCisgICAgIG9mIGNhc2VzLiAgKi8KKyAgYm9vbCB0aW1lX2Jhc2VkOworfSBlbmlfd2VpZ2h0czsKKworLyogV2VpZ2h0cyB0aGF0IGVzdGltYXRlX251bV9pbnNucyB1c2VzIGZvciBoZXVyaXN0aWNzIGluIGlubGluaW5nLiAgKi8KKworZXh0ZXJuIGVuaV93ZWlnaHRzIGVuaV9pbmxpbmluZ193ZWlnaHRzOworCisvKiBXZWlnaHRzIHRoYXQgZXN0aW1hdGVfbnVtX2luc25zIHVzZXMgdG8gZXN0aW1hdGUgdGhlIHNpemUgb2YgdGhlCisgICBwcm9kdWNlZCBjb2RlLiAgKi8KKworZXh0ZXJuIGVuaV93ZWlnaHRzIGVuaV9zaXplX3dlaWdodHM7CisKKy8qIFdlaWdodHMgdGhhdCBlc3RpbWF0ZV9udW1faW5zbnMgdXNlcyB0byBlc3RpbWF0ZSB0aGUgdGltZSBuZWNlc3NhcnkKKyAgIHRvIGV4ZWN1dGUgdGhlIHByb2R1Y2VkIGNvZGUuICAqLworCitleHRlcm4gZW5pX3dlaWdodHMgZW5pX3RpbWVfd2VpZ2h0czsKKworLyogRnVuY3Rpb24gcHJvdG90eXBlcy4gICovCisKK2V4dGVybiB0cmVlIGNvcHlfdHJlZV9ib2R5X3IgKHRyZWUgKiwgaW50ICosIHZvaWQgKik7CitleHRlcm4gdm9pZCBpbnNlcnRfZGVjbF9tYXAgKGNvcHlfYm9keV9kYXRhICosIHRyZWUsIHRyZWUpOworCit1bnNpZ25lZCBpbnQgb3B0aW1pemVfaW5saW5lX2NhbGxzICh0cmVlKTsKK3RyZWUgbWF5YmVfaW5saW5lX2NhbGxfaW5fZXhwciAodHJlZSk7Citib29sIHRyZWVfaW5saW5hYmxlX2Z1bmN0aW9uX3AgKHRyZWUpOwordHJlZSBjb3B5X3RyZWVfciAodHJlZSAqLCBpbnQgKiwgdm9pZCAqKTsKK3RyZWUgY29weV9kZWNsX25vX2NoYW5nZSAodHJlZSBkZWNsLCBjb3B5X2JvZHlfZGF0YSAqaWQpOwordm9pZCBzYXZlX2JvZHkgKHRyZWUsIHRyZWUgKiwgdHJlZSAqKTsKK2ludCBlc3RpbWF0ZV9tb3ZlX2Nvc3QgKHRyZWUgdHlwZSk7CitpbnQgZXN0aW1hdGVfbnVtX2luc25zIChnaW1wbGUsIGVuaV93ZWlnaHRzICopOworaW50IGVzdGltYXRlX251bV9pbnNuc19mbiAodHJlZSwgZW5pX3dlaWdodHMgKik7CitpbnQgY291bnRfaW5zbnNfc2VxIChnaW1wbGVfc2VxLCBlbmlfd2VpZ2h0cyAqKTsKK2Jvb2wgdHJlZV92ZXJzaW9uYWJsZV9mdW5jdGlvbl9wICh0cmVlKTsKK2Jvb2wgdHJlZV9jYW5faW5saW5lX3AgKHN0cnVjdCBjZ3JhcGhfZWRnZSAqZSk7CisKK2V4dGVybiBnaW1wbGVfc2VxIHJlbWFwX2dpbXBsZV9zZXEgKGdpbXBsZV9zZXEsIGNvcHlfYm9keV9kYXRhICopOworZXh0ZXJuIHRyZWUgcmVtYXBfZGVjbCAodHJlZSBkZWNsLCBjb3B5X2JvZHlfZGF0YSAqaWQpOworZXh0ZXJuIHRyZWUgcmVtYXBfdHlwZSAodHJlZSB0eXBlLCBjb3B5X2JvZHlfZGF0YSAqaWQpOworZXh0ZXJuIGdpbXBsZV9zZXEgY29weV9naW1wbGVfc2VxX2FuZF9yZXBsYWNlX2xvY2FscyAoZ2ltcGxlX3NlcSBzZXEpOworCitleHRlcm4gSE9TVF9XSURFX0lOVCBlc3RpbWF0ZWRfc3RhY2tfZnJhbWVfc2l6ZSAodm9pZCk7CisKKyNlbmRpZiAvKiBHQ0NfVFJFRV9JTkxJTkVfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3RyZWUtaXRlcmF0b3IuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS90cmVlLWl0ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc2NWJiNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS90cmVlLWl0ZXJhdG9yLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qIEl0ZXJhdG9yIHJvdXRpbmVzIGZvciBtYW5pcHVsYXRpbmcgR0VORVJJQyBhbmQgR0lNUExFIHRyZWUgc3RhdGVtZW50cy4KKyAgIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAcmVkaGF0LmNvbT4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKworLyogVGhpcyBmaWxlIGlzIGRlcGVuZGVudCB1cG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0cmVlJ3MuIEl0IHByb3ZpZGVzIGFuCisgICBhYnN0cmFjdCBpbnRlcmZhY2UgdG8gdGhlIHRyZWUgb2JqZWN0cyBzdWNoIHRoYXQgaWYgYWxsIHRyZWUgY3JlYXRpb24gYW5kCisgICBtYW5pcHVsYXRpb25zIGFyZSBkb25lIHRocm91Z2ggdGhpcyBpbnRlcmZhY2UsIHdlIGNhbiBlYXNpbHkgY2hhbmdlIHRoZQorICAgaW1wbGVtZW50YXRpb24gb2YgdHJlZSdzLCBhbmQgbm90IGltcGFjdCBvdGhlciBjb2RlLiAgKi8KKworI2lmbmRlZiBHQ0NfVFJFRV9JVEVSQVRPUl9ICisjZGVmaW5lIEdDQ19UUkVFX0lURVJBVE9SX0ggMQorCisvKiBJdGVyYXRvciBvYmplY3QgZm9yIEdFTkVSSUMgb3IgR0lNUExFIFRSRUUgc3RhdGVtZW50cy4gICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IHRyZWVfc3RhdGVtZW50X2xpc3Rfbm9kZSAqcHRyOworICB0cmVlIGNvbnRhaW5lcjsKK30gdHJlZV9zdG10X2l0ZXJhdG9yOworCitzdGF0aWMgaW5saW5lIHRyZWVfc3RtdF9pdGVyYXRvcgordHNpX3N0YXJ0ICh0cmVlIHQpCit7CisgIHRyZWVfc3RtdF9pdGVyYXRvciBpOworCisgIGkucHRyID0gU1RBVEVNRU5UX0xJU1RfSEVBRCAodCk7CisgIGkuY29udGFpbmVyID0gdDsKKworICByZXR1cm4gaTsKK30KKworc3RhdGljIGlubGluZSB0cmVlX3N0bXRfaXRlcmF0b3IKK3RzaV9sYXN0ICh0cmVlIHQpCit7CisgIHRyZWVfc3RtdF9pdGVyYXRvciBpOworCisgIGkucHRyID0gU1RBVEVNRU5UX0xJU1RfVEFJTCAodCk7CisgIGkuY29udGFpbmVyID0gdDsKKworICByZXR1cm4gaTsKK30KKworc3RhdGljIGlubGluZSBib29sCit0c2lfZW5kX3AgKHRyZWVfc3RtdF9pdGVyYXRvciBpKQoreworICByZXR1cm4gaS5wdHIgPT0gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBib29sCit0c2lfb25lX2JlZm9yZV9lbmRfcCAodHJlZV9zdG10X2l0ZXJhdG9yIGkpCit7CisgIHJldHVybiBpLnB0ciAhPSBOVUxMICYmIGkucHRyLT5uZXh0ID09IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordHNpX25leHQgKHRyZWVfc3RtdF9pdGVyYXRvciAqaSkKK3sKKyAgaS0+cHRyID0gaS0+cHRyLT5uZXh0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RzaV9wcmV2ICh0cmVlX3N0bXRfaXRlcmF0b3IgKmkpCit7CisgIGktPnB0ciA9IGktPnB0ci0+cHJldjsKK30KKworc3RhdGljIGlubGluZSB0cmVlICoKK3RzaV9zdG10X3B0ciAodHJlZV9zdG10X2l0ZXJhdG9yIGkpCit7CisgIHJldHVybiAmaS5wdHItPnN0bXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdHJlZQordHNpX3N0bXQgKHRyZWVfc3RtdF9pdGVyYXRvciBpKQoreworICByZXR1cm4gaS5wdHItPnN0bXQ7Cit9CisKK2VudW0gdHNpX2l0ZXJhdG9yX3VwZGF0ZQoreworICBUU0lfTkVXX1NUTVQsCQkvKiBPbmx5IHZhbGlkIHdoZW4gc2luZ2xlIHN0YXRlbWVudCBpcyBhZGRlZCwgbW92ZQorCQkJICAgaXRlcmF0b3IgdG8gaXQuICAqLworICBUU0lfU0FNRV9TVE1ULAkvKiBMZWF2ZSB0aGUgaXRlcmF0b3IgYXQgdGhlIHNhbWUgc3RhdGVtZW50LiAgKi8KKyAgVFNJX0NIQUlOX1NUQVJULAkvKiBPbmx5IHZhbGlkIHdoZW4gY2hhaW4gb2Ygc3RhdGVtZW50cyBpcyBhZGRlZCwgbW92ZQorCQkJICAgaXRlcmF0b3IgdG8gdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgY2hhaW4uICAqLworICBUU0lfQ0hBSU5fRU5ELAkvKiBPbmx5IHZhbGlkIHdoZW4gY2hhaW4gb2Ygc3RhdGVtZW50cyBpcyBhZGRlZCwgbW92ZQorCQkJICAgaXRlcmF0b3IgdG8gdGhlIGxhc3Qgc3RhdGVtZW50IGluIHRoZSBjaGFpbi4gICovCisgIFRTSV9DT05USU5VRV9MSU5LSU5HCS8qIE1vdmUgaXRlcmF0b3IgdG8gd2hhdGV2ZXIgcG9zaXRpb24gaXMgc3VpdGFibGUgZm9yCisJCQkgICBsaW5raW5nIG90aGVyIHN0YXRlbWVudHMvY2hhaW5zIG9mIHN0YXRlbWVudHMgaW4KKwkJCSAgIHRoZSBzYW1lIGRpcmVjdGlvbi4gICovCit9OworCitleHRlcm4gdm9pZCB0c2lfbGlua19iZWZvcmUgKHRyZWVfc3RtdF9pdGVyYXRvciAqLCB0cmVlLAorCQkJICAgICBlbnVtIHRzaV9pdGVyYXRvcl91cGRhdGUpOworZXh0ZXJuIHZvaWQgdHNpX2xpbmtfYWZ0ZXIgKHRyZWVfc3RtdF9pdGVyYXRvciAqLCB0cmVlLAorCQkJICAgIGVudW0gdHNpX2l0ZXJhdG9yX3VwZGF0ZSk7CisKK3ZvaWQgdHNpX2RlbGluayAodHJlZV9zdG10X2l0ZXJhdG9yICopOworCit2b2lkIGFwcGVuZF90b19zdGF0ZW1lbnRfbGlzdCAodHJlZSwgdHJlZSAqKTsKK3ZvaWQgYXBwZW5kX3RvX3N0YXRlbWVudF9saXN0X2ZvcmNlICh0cmVlLCB0cmVlICopOworCisjZW5kaWYgLyogR0NDX1RSRUVfSVRFUkFUT1JfSCAgKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS90cmVlLXBhc3MuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS90cmVlLXBhc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGE5ZTljCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3RyZWUtcGFzcy5oCkBAIC0wLDAgKzEsNjIzIEBACisvKiBEZWZpbml0aW9ucyBmb3IgZGVzY3JpYmluZyBvbmUgdHJlZS1zc2Egb3B0aW1pemF0aW9uIHBhc3MuCisgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgUmljaGFyZCBIZW5kZXJzb24gPHJ0aEByZWRoYXQuY29tPgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworCisjaWZuZGVmIEdDQ19UUkVFX1BBU1NfSAorI2RlZmluZSBHQ0NfVFJFRV9QQVNTX0ggMQorCisjaW5jbHVkZSAidGltZXZhci5oIgorCisvKiBEaWZmZXJlbnQgdHJlZSBkdW1wIHBsYWNlcy4gIFdoZW4geW91IGFkZCBuZXcgdHJlZSBkdW1wIHBsYWNlcywKKyAgIGV4dGVuZCB0aGUgRFVNUF9GSUxFUyBhcnJheSBpbiB0cmVlLWR1bXAuYy4gICovCitlbnVtIHRyZWVfZHVtcF9pbmRleAoreworICBURElfbm9uZSwJCQkvKiBObyBkdW1wICovCisgIFRESV9jZ3JhcGgsICAgICAgICAgICAgICAgICAgIC8qIGR1bXAgZnVuY3Rpb24gY2FsbCBncmFwaC4gICovCisgIFRESV90dSwJCQkvKiBkdW1wIHRoZSB3aG9sZSB0cmFuc2xhdGlvbiB1bml0LiAgKi8KKyAgVERJX2NsYXNzLAkJCS8qIGR1bXAgY2xhc3MgaGllcmFyY2h5LiAgKi8KKyAgVERJX29yaWdpbmFsLAkJCS8qIGR1bXAgZWFjaCBmdW5jdGlvbiBiZWZvcmUgb3B0aW1pemluZyBpdCAqLworICBURElfZ2VuZXJpYywJCQkvKiBkdW1wIGVhY2ggZnVuY3Rpb24gYWZ0ZXIgZ2VuZXJpY2l6aW5nIGl0ICovCisgIFRESV9uZXN0ZWQsCQkJLyogZHVtcCBlYWNoIGZ1bmN0aW9uIGFmdGVyIHVubmVzdGluZyBpdCAqLworICBURElfdmNnLAkJCS8qIGNyZWF0ZSBhIFZDRyBncmFwaCBmaWxlIGZvciBlYWNoCisJCQkJICAgZnVuY3Rpb24ncyBmbG93Z3JhcGguICAqLworICBURElfdHJlZV9hbGwsICAgICAgICAgICAgICAgICAvKiBlbmFibGUgYWxsIHRoZSBHRU5FUklDL0dJTVBMRSBkdW1wcy4gICovCisgIFRESV9ydGxfYWxsLCAgICAgICAgICAgICAgICAgIC8qIGVuYWJsZSBhbGwgdGhlIFJUTCBkdW1wcy4gICovCisgIFRESV9pcGFfYWxsLCAgICAgICAgICAgICAgICAgIC8qIGVuYWJsZSBhbGwgdGhlIElQQSBkdW1wcy4gICovCisKKyAgVERJX2VuZAorfTsKKworLyogQml0IG1hc2tzIHRvIGNvbnRyb2wgZHVtcGluZy4gTm90IGFsbCB2YWx1ZXMgYXJlIGFwcGxpY2FibGUgdG8KKyAgIGFsbCBkdW1wcy4gQWRkIG5ldyBvbmVzIGF0IHRoZSBlbmQuIFdoZW4geW91IGRlZmluZSBuZXcKKyAgIHZhbHVlcywgZXh0ZW5kIHRoZSBEVU1QX09QVElPTlMgYXJyYXkgaW4gdHJlZS1kdW1wLmMgKi8KKyNkZWZpbmUgVERGX0FERFJFU1MJKDEgPDwgMCkJLyogZHVtcCBub2RlIGFkZHJlc3NlcyAqLworI2RlZmluZSBUREZfU0xJTQkoMSA8PCAxKQkvKiBkb24ndCBnbyB3aWxkIGZvbGxvd2luZyBsaW5rcyAqLworI2RlZmluZSBUREZfUkFXICAJKDEgPDwgMikJLyogZG9uJ3QgdW5wYXJzZSB0aGUgZnVuY3Rpb24gKi8KKyNkZWZpbmUgVERGX0RFVEFJTFMJKDEgPDwgMykJLyogc2hvdyBtb3JlIGRldGFpbGVkIGluZm8gYWJvdXQKKwkJCQkJICAgZWFjaCBwYXNzICovCisjZGVmaW5lIFRERl9TVEFUUwkoMSA8PCA0KQkvKiBkdW1wIHZhcmlvdXMgc3RhdGlzdGljcyBhYm91dAorCQkJCQkgICBlYWNoIHBhc3MgKi8KKyNkZWZpbmUgVERGX0JMT0NLUwkoMSA8PCA1KQkvKiBkaXNwbGF5IGJhc2ljIGJsb2NrIGJvdW5kYXJpZXMgKi8KKyNkZWZpbmUgVERGX1ZPUFMJKDEgPDwgNikJLyogZGlzcGxheSB2aXJ0dWFsIG9wZXJhbmRzICovCisjZGVmaW5lIFRERl9MSU5FTk8JKDEgPDwgNykJLyogZGlzcGxheSBzdGF0ZW1lbnQgbGluZSBudW1iZXJzICovCisjZGVmaW5lIFRERl9VSUQJCSgxIDw8IDgpCS8qIGRpc3BsYXkgZGVjbCBVSURzICovCisKKyNkZWZpbmUgVERGX1RSRUUJKDEgPDwgOSkJLyogaXMgYSB0cmVlIGR1bXAgKi8KKyNkZWZpbmUgVERGX1JUTAkJKDEgPDwgMTApCS8qIGlzIGEgUlRMIGR1bXAgKi8KKyNkZWZpbmUgVERGX0lQQQkJKDEgPDwgMTEpCS8qIGlzIGFuIElQQSBkdW1wICovCisjZGVmaW5lIFRERl9TVE1UQUREUgkoMSA8PCAxMikJLyogQWRkcmVzcyBvZiBzdG10LiAgKi8KKworI2RlZmluZSBUREZfR1JBUEgJKDEgPDwgMTMpCS8qIGEgZ3JhcGggZHVtcCBpcyBiZWluZyBlbWl0dGVkICovCisjZGVmaW5lIFRERl9NRU1TWU1TCSgxIDw8IDE0KQkvKiBkaXNwbGF5IG1lbW9yeSBzeW1ib2xzIGluIGV4cHIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1wbGllcyBUREZfVk9QUy4gICovCisKKyNkZWZpbmUgVERGX0RJQUdOT1NUSUMJKDEgPDwgMTUpCS8qIEEgZHVtcCB0byBiZSBwdXQgaW4gYSBkaWFnbm9zdGljCisJCQkJCSAgIG1lc3NhZ2UuICAqLworI2RlZmluZSBUREZfVkVSQk9TRSAgICAgKDEgPDwgMTYpICAgICAgIC8qIEEgZHVtcCB0aGF0IHVzZXMgdGhlIGZ1bGwgdHJlZQorCQkJCQkgICBkdW1wZXIgdG8gcHJpbnQgc3RtdHMuICAqLworI2RlZmluZSBUREZfUkhTX09OTFkJKDEgPDwgMTcpCS8qIGEgZmxhZyB0byBvbmx5IHByaW50IHRoZSBSSFMgb2YKKwkJCQkJICAgYSBnaW1wbGUgc3RtdC4gICovCisjZGVmaW5lIFRERl9BU01OQU1FCSgxIDw8IDE4KQkvKiBkaXNwbGF5IGFzbSBuYW1lcyBvZiBkZWNscyAgKi8KKyNkZWZpbmUgVERGX0VICQkoMSA8PCAxOSkJLyogZGlzcGxheSBFSCByZWdpb24gbnVtYmVyCisJCQkJCSAgIGhvbGRpbmcgdGhpcyBnaW1wbGUgc3RhdGVtZW50LiAgKi8KKworI2RlZmluZSBUREZfTk9VSUQJKDEgPDwgMjApCS8qIG9taXQgVUlEcyBmcm9tIGR1bXBzLiAgKi8KKworLyogSW4gdHJlZS1kdW1wLmMgKi8KKworZXh0ZXJuIGNoYXIgKmdldF9kdW1wX2ZpbGVfbmFtZSAoaW50KTsKK2V4dGVybiBpbnQgZHVtcF9lbmFibGVkX3AgKGludCk7CitleHRlcm4gaW50IGR1bXBfaW5pdGlhbGl6ZWRfcCAoaW50KTsKK2V4dGVybiBGSUxFICpkdW1wX2JlZ2luIChpbnQsIGludCAqKTsKK2V4dGVybiB2b2lkIGR1bXBfZW5kIChpbnQsIEZJTEUgKik7CitleHRlcm4gdm9pZCBkdW1wX25vZGUgKGNvbnN0X3RyZWUsIGludCwgRklMRSAqKTsKK2V4dGVybiBpbnQgZHVtcF9zd2l0Y2hfcCAoY29uc3QgY2hhciAqKTsKK2V4dGVybiBjb25zdCBjaGFyICpkdW1wX2ZsYWdfbmFtZSAoaW50KTsKKworLyogR2xvYmFsIHZhcmlhYmxlcyB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggcGFzc2VzLiAgKi8KK2V4dGVybiBGSUxFICpkdW1wX2ZpbGU7CitleHRlcm4gaW50IGR1bXBfZmxhZ3M7CitleHRlcm4gY29uc3QgY2hhciAqZHVtcF9maWxlX25hbWU7CisKKy8qIFJldHVybiB0aGUgZHVtcF9maWxlX2luZm8gZm9yIHRoZSBnaXZlbiBwaGFzZS4gICovCitleHRlcm4gc3RydWN0IGR1bXBfZmlsZV9pbmZvICpnZXRfZHVtcF9maWxlX2luZm8gKGludCk7CisKKy8qIE9wdGltaXphdGlvbiBwYXNzIHR5cGUuICAqLworZW51bSBvcHRfcGFzc190eXBlCit7CisgIEdJTVBMRV9QQVNTLAorICBSVExfUEFTUywKKyAgU0lNUExFX0lQQV9QQVNTLAorICBJUEFfUEFTUworfTsKKworLyogRGVzY3JpYmUgb25lIHBhc3M7IHRoaXMgaXMgdGhlIGNvbW1vbiBwYXJ0IHNoYXJlZCBhY3Jvc3MgZGlmZmVyZW50IHBhc3MKKyAgIHR5cGVzLiAgKi8KK3N0cnVjdCBvcHRfcGFzcworeworICAvKiBPcHRpbWl6YXRpb24gcGFzcyB0eXBlLiAgKi8KKyAgZW51bSBvcHRfcGFzc190eXBlIHR5cGU7CisKKyAgLyogVGVyc2UgbmFtZSBvZiB0aGUgcGFzcyB1c2VkIGFzIGEgZnJhZ21lbnQgb2YgdGhlIGR1bXAgZmlsZQorICAgICBuYW1lLiAgSWYgdGhlIG5hbWUgc3RhcnRzIHdpdGggYSBzdGFyLCBubyBkdW1wIGhhcHBlbnMuICovCisgIGNvbnN0IGNoYXIgKm5hbWU7CisKKyAgLyogSWYgbm9uLW51bGwsIHRoaXMgcGFzcyBhbmQgYWxsIHN1Yi1wYXNzZXMgYXJlIGV4ZWN1dGVkIG9ubHkgaWYKKyAgICAgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZS4gICovCisgIGJvb2wgKCpnYXRlKSAodm9pZCk7CisKKyAgLyogVGhpcyBpcyB0aGUgY29kZSB0byBydW4uICBJZiBudWxsLCB0aGVuIHRoZXJlIHNob3VsZCBiZSBzdWItcGFzc2VzCisgICAgIG90aGVyd2lzZSB0aGlzIHBhc3MgZG9lcyBub3RoaW5nLiAgVGhlIHJldHVybiB2YWx1ZSBjb250YWlucworICAgICBUT0RPcyB0byBleGVjdXRlIGluIGFkZGl0aW9uIHRvIHRob3NlIGluIFRPRE9fZmxhZ3NfZmluaXNoLiAgICovCisgIHVuc2lnbmVkIGludCAoKmV4ZWN1dGUpICh2b2lkKTsKKworICAvKiBBIGxpc3Qgb2Ygc3ViLXBhc3NlcyB0byBydW4sIGRlcGVuZGVudCBvbiBnYXRlIHByZWRpY2F0ZS4gICovCisgIHN0cnVjdCBvcHRfcGFzcyAqc3ViOworCisgIC8qIE5leHQgaW4gdGhlIGxpc3Qgb2YgcGFzc2VzIHRvIHJ1biwgaW5kZXBlbmRlbnQgb2YgZ2F0ZSBwcmVkaWNhdGUuICAqLworICBzdHJ1Y3Qgb3B0X3Bhc3MgKm5leHQ7CisKKyAgLyogU3RhdGljIHBhc3MgbnVtYmVyLCB1c2VkIGFzIGEgZnJhZ21lbnQgb2YgdGhlIGR1bXAgZmlsZSBuYW1lLiAgKi8KKyAgaW50IHN0YXRpY19wYXNzX251bWJlcjsKKworICAvKiBUaGUgdGltZXZhciBpZCBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXNzLiAgKi8KKyAgLyogPz8/IElkZWFsbHkgd291bGQgYmUgZHluYW1pY2FsbHkgYXNzaWduZWQuICAqLworICB0aW1ldmFyX2lkX3QgdHZfaWQ7CisKKyAgLyogU2V0cyBvZiBwcm9wZXJ0aWVzIGlucHV0IGFuZCBvdXRwdXQgZnJvbSB0aGlzIHBhc3MuICAqLworICB1bnNpZ25lZCBpbnQgcHJvcGVydGllc19yZXF1aXJlZDsKKyAgdW5zaWduZWQgaW50IHByb3BlcnRpZXNfcHJvdmlkZWQ7CisgIHVuc2lnbmVkIGludCBwcm9wZXJ0aWVzX2Rlc3Ryb3llZDsKKworICAvKiBGbGFncyBpbmRpY2F0aW5nIGNvbW1vbiBzZXRzIHRoaW5ncyB0byBkbyBiZWZvcmUgYW5kIGFmdGVyLiAgKi8KKyAgdW5zaWduZWQgaW50IHRvZG9fZmxhZ3Nfc3RhcnQ7CisgIHVuc2lnbmVkIGludCB0b2RvX2ZsYWdzX2ZpbmlzaDsKK307CisKKy8qIERlc2NyaXB0aW9uIG9mIEdJTVBMRSBwYXNzLiAgKi8KK3N0cnVjdCBnaW1wbGVfb3B0X3Bhc3MKK3sKKyAgc3RydWN0IG9wdF9wYXNzIHBhc3M7Cit9OworCisvKiBEZXNjcmlwdGlvbiBvZiBSVEwgcGFzcy4gICovCitzdHJ1Y3QgcnRsX29wdF9wYXNzCit7CisgIHN0cnVjdCBvcHRfcGFzcyBwYXNzOworfTsKKworc3RydWN0IHZhcnBvb2xfbm9kZTsKK3N0cnVjdCBjZ3JhcGhfbm9kZTsKK3N0cnVjdCBjZ3JhcGhfbm9kZV9zZXRfZGVmOworCisvKiBEZXNjcmlwdGlvbiBvZiBJUEEgcGFzcyB3aXRoIGdlbmVyYXRlIHN1bW1hcnksIHdyaXRlLCBleGVjdXRlLCByZWFkIGFuZAorICAgdHJhbnNmb3JtIHN0YWdlcy4gICovCitzdHJ1Y3QgaXBhX29wdF9wYXNzX2QKK3sKKyAgc3RydWN0IG9wdF9wYXNzIHBhc3M7CisKKyAgLyogSVBBIHBhc3NlcyBjYW4gYW5hbHl6ZSBmdW5jdGlvbiBib2R5IGFuZCB2YXJpYWJsZSBpbml0aWFsaXplcnMKKyAgICAgIHVzaW5nIHRoaXMgaG9vayBhbmQgcHJvZHVjZSBzdW1tYXJ5LiAgKi8KKyAgdm9pZCAoKmdlbmVyYXRlX3N1bW1hcnkpICh2b2lkKTsKKworICAvKiBUaGlzIGhvb2sgaXMgdXNlZCB0byBzZXJpYWxpemUgSVBBIHN1bW1hcmllcyBvbiBkaXNrLiAgKi8KKyAgdm9pZCAoKndyaXRlX3N1bW1hcnkpIChzdHJ1Y3QgY2dyYXBoX25vZGVfc2V0X2RlZiAqKTsKKworICAvKiBGb3IgbW9zdCBpcGEgcGFzc2VzLCB0aGUgaW5mb3JtYXRpb24gY2FuIG9ubHkgYmUgZGVzZXJpYWxpemVkIGluCisgICAgIG9uZSBjaHVuay4gIEhvd2V2ZXIsIGZ1bmN0aW9uIGJvZGllcyBhcmUgcmVhZCBmdW5jdGlvbiBhdCBhIHRpbWUKKyAgICAgYXMgbmVlZGVkIHNvIGJvdGggY2FsbHMgYXJlIG5lY2Vzc2FyeS4gICovCisgIHZvaWQgKCpyZWFkX3N1bW1hcnkpICh2b2lkKTsKKyAgdm9pZCAoKmZ1bmN0aW9uX3JlYWRfc3VtbWFyeSkgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqKTsKKyAgLyogSG9vayB0byBjb252ZXJ0IGdpbXBsZSBzdG10IHVpZHMgaW50byB0cnVlIGdpbXBsZSBzdGF0ZW1lbnRzLiAgVGhlIHNlY29uZAorICAgICBwYXJhbWV0ZXIgaXMgYW4gYXJyYXkgb2Ygc3RhdGVtZW50cyBpbmRleGVkIGJ5IHRoZWlyIHVpZC4gKi8KKyAgdm9pZCAoKnN0bXRfZml4dXApIChzdHJ1Y3QgY2dyYXBoX25vZGUgKiwgZ2ltcGxlICopOworCisgIC8qIFJlc3VsdHMgb2YgaW50ZXJwcm9jZWR1cmFsIHByb3BhZ2F0aW9uIG9mIGFuIElQQSBwYXNzIGlzIGFwcGxpZWQgdG8KKyAgICAgZnVuY3Rpb24gYm9keSB2aWEgdGhpcyBob29rLiAgKi8KKyAgdW5zaWduZWQgaW50IGZ1bmN0aW9uX3RyYW5zZm9ybV90b2RvX2ZsYWdzX3N0YXJ0OworICB1bnNpZ25lZCBpbnQgKCpmdW5jdGlvbl90cmFuc2Zvcm0pIChzdHJ1Y3QgY2dyYXBoX25vZGUgKik7CisgIHZvaWQgKCp2YXJpYWJsZV90cmFuc2Zvcm0pIChzdHJ1Y3QgdmFycG9vbF9ub2RlICopOworfTsKKworLyogRGVzY3JpcHRpb24gb2Ygc2ltcGxlIElQQSBwYXNzLiAgU2ltcGxlIElQQSBwYXNzZXMgaGF2ZSBqdXN0IG9uZSBleGVjdXRlCisgICBob29rLiAgKi8KK3N0cnVjdCBzaW1wbGVfaXBhX29wdF9wYXNzCit7CisgIHN0cnVjdCBvcHRfcGFzcyBwYXNzOworfTsKKworLyogRGVmaW5lIGEgdHJlZSBkdW1wIHN3aXRjaC4gICovCitzdHJ1Y3QgZHVtcF9maWxlX2luZm8KK3sKKyAgY29uc3QgY2hhciAqc3VmZml4OyAgICAgICAgICAgLyogc3VmZml4IHRvIGdpdmUgb3V0cHV0IGZpbGUuICAqLworICBjb25zdCBjaGFyICpzd3RjaDsgICAgICAgICAgICAvKiBjb21tYW5kIGxpbmUgc3dpdGNoICovCisgIGNvbnN0IGNoYXIgKmdsb2I7ICAgICAgICAgICAgIC8qIGNvbW1hbmQgbGluZSBnbG9iICAqLworICBpbnQgZmxhZ3M7ICAgICAgICAgICAgICAgICAgICAvKiB1c2VyIGZsYWdzICovCisgIGludCBzdGF0ZTsgICAgICAgICAgICAgICAgICAgIC8qIHN0YXRlIG9mIHBsYXkgKi8KKyAgaW50IG51bTsgICAgICAgICAgICAgICAgICAgICAgLyogZHVtcCBmaWxlIG51bWJlciAqLworfTsKKworLyogUGFzcyBwcm9wZXJ0aWVzLiAgKi8KKyNkZWZpbmUgUFJPUF9naW1wbGVfYW55CQkoMSA8PCAwKQkvKiBlbnRpcmUgZ2ltcGxlIGdyYW1tYXIgKi8KKyNkZWZpbmUgUFJPUF9naW1wbGVfbGNmCQkoMSA8PCAxKQkvKiBsb3dlcmVkIGNvbnRyb2wgZmxvdyAqLworI2RlZmluZSBQUk9QX2dpbXBsZV9sZWgJCSgxIDw8IDIpCS8qIGxvd2VyZWQgZWggKi8KKyNkZWZpbmUgUFJPUF9jZmcJCSgxIDw8IDMpCisjZGVmaW5lIFBST1BfcmVmZXJlbmNlZF92YXJzCSgxIDw8IDQpCisjZGVmaW5lIFBST1Bfc3NhCQkoMSA8PCA1KQorI2RlZmluZSBQUk9QX25vX2NyaXRfZWRnZXMgICAgICAoMSA8PCA2KQorI2RlZmluZSBQUk9QX3J0bAkJKDEgPDwgNykKKyNkZWZpbmUgUFJPUF9naW1wbGVfbG9tcAkoMSA8PCA4KQkvKiBsb3dlcmVkIE9wZW5NUCBkaXJlY3RpdmVzICovCisjZGVmaW5lIFBST1BfY2ZnbGF5b3V0CSAJKDEgPDwgOSkJLyogY2ZnbGF5b3V0IG1vZGUgb24gUlRMICovCisjZGVmaW5lIFBST1BfZ2ltcGxlX2xjeAkJKDEgPDwgMTApICAgICAgIC8qIGxvd2VyZWQgY29tcGxleCAqLworCisjZGVmaW5lIFBST1BfdHJlZXMgXAorICAoUFJPUF9naW1wbGVfYW55IHwgUFJPUF9naW1wbGVfbGNmIHwgUFJPUF9naW1wbGVfbGVoIHwgUFJPUF9naW1wbGVfbG9tcCkKKworLyogVG8tZG8gZmxhZ3MuICAqLworI2RlZmluZSBUT0RPX2R1bXBfZnVuYwkJCSgxIDw8IDApCisjZGVmaW5lIFRPRE9fZ2djX2NvbGxlY3QJCSgxIDw8IDEpCisjZGVmaW5lIFRPRE9fdmVyaWZ5X3NzYQkJCSgxIDw8IDIpCisjZGVmaW5lIFRPRE9fdmVyaWZ5X2Zsb3cJCSgxIDw8IDMpCisjZGVmaW5lIFRPRE9fdmVyaWZ5X3N0bXRzCQkoMSA8PCA0KQorI2RlZmluZSBUT0RPX2NsZWFudXBfY2ZnICAgICAgICAJKDEgPDwgNSkKKyNkZWZpbmUgVE9ET192ZXJpZnlfbG9vcHMJCSgxIDw8IDYpCisjZGVmaW5lIFRPRE9fZHVtcF9jZ3JhcGgJCSgxIDw8IDcpCisjZGVmaW5lIFRPRE9fcmVtb3ZlX2Z1bmN0aW9ucwkJKDEgPDwgOCkKKyNkZWZpbmUgVE9ET19yZWJ1aWxkX2ZyZXF1ZW5jaWVzCSgxIDw8IDkpCisjZGVmaW5lIFRPRE9fdmVyaWZ5X3J0bF9zaGFyaW5nICAgICAgICAgKDEgPDwgMTApCisKKy8qIFRvLWRvIGZsYWdzIGZvciBjYWxscyB0byB1cGRhdGVfc3NhLiAgKi8KKworLyogVXBkYXRlIHRoZSBTU0EgZm9ybSBpbnNlcnRpbmcgUEhJIG5vZGVzIGZvciBuZXdseSBleHBvc2VkIHN5bWJvbHMKKyAgIGFuZCB2aXJ0dWFsIG5hbWVzIG1hcmtlZCBmb3IgdXBkYXRpbmcuICBXaGVuIHVwZGF0aW5nIHJlYWwgbmFtZXMsCisgICBvbmx5IGluc2VydCBQSEkgbm9kZXMgZm9yIGEgcmVhbCBuYW1lIE9faiBpbiBibG9ja3MgcmVhY2hlZCBieSBhbGwKKyAgIHRoZSBuZXcgYW5kIG9sZCBkZWZpbml0aW9ucyBmb3IgT19qLiAgSWYgdGhlIGl0ZXJhdGVkIGRvbWluYW5jZQorICAgZnJvbnRpZXIgZm9yIE9faiBpcyBub3QgcHJ1bmVkLCB3ZSBtYXkgZW5kIHVwIGluc2VydGluZyBQSEkgbm9kZXMKKyAgIGluIGJsb2NrcyB0aGF0IGhhdmUgb25lIG9yIG1vcmUgZWRnZXMgd2l0aCBubyBpbmNvbWluZyBkZWZpbml0aW9uCisgICBmb3IgT19qLiAgVGhpcyB3b3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgd2FybmluZ3MgZm9yIE9faidzCisgICBzeW1ib2wuICAqLworI2RlZmluZSBUT0RPX3VwZGF0ZV9zc2EJCQkoMSA8PCAxMSkKKworLyogVXBkYXRlIHRoZSBTU0EgZm9ybSB3aXRob3V0IGluc2VydGluZyBhbnkgbmV3IFBISSBub2RlcyBhdCBhbGwuCisgICBUaGlzIGlzIHVzZWQgYnkgcGFzc2VzIHRoYXQgaGF2ZSBlaXRoZXIgaW5zZXJ0ZWQgYWxsIHRoZSBQSEkgbm9kZXMKKyAgIHRoZW1zZWx2ZXMgb3IgcGFzc2VzIHRoYXQgbmVlZCBvbmx5IHRvIHBhdGNoIHVzZS1kZWYgYW5kIGRlZi1kZWYKKyAgIGNoYWlucyBmb3IgdmlydHVhbHMgKGUuZy4sIERDRSkuICAqLworI2RlZmluZSBUT0RPX3VwZGF0ZV9zc2Ffbm9fcGhpCQkoMSA8PCAxMikKKworLyogSW5zZXJ0IFBISSBub2RlcyBldmVyeXdoZXJlIHRoZXkgYXJlIG5lZWRlZC4gIE5vIHBydW5pbmcgb2YgdGhlCisgICBJREYgaXMgZG9uZS4gIFRoaXMgaXMgdXNlZCBieSBwYXNzZXMgdGhhdCBuZWVkIHRoZSBQSEkgbm9kZXMgZm9yCisgICBPX2ogZXZlbiBpZiBpdCBtZWFucyB0aGF0IHNvbWUgYXJndW1lbnRzIHdpbGwgY29tZSBmcm9tIHRoZSBkZWZhdWx0CisgICBkZWZpbml0aW9uIG9mIE9faidzIHN5bWJvbCAoZS5nLiwgcGFzc19saW5lYXJfdHJhbnNmb3JtKS4KKworICAgV0FSTklORzogSWYgeW91IG5lZWQgdG8gdXNlIHRoaXMgZmxhZywgY2hhbmNlcyBhcmUgdGhhdCB5b3VyIHBhc3MKKyAgIG1heSBiZSBkb2luZyBzb21ldGhpbmcgd3JvbmcuICBJbnNlcnRpbmcgUEhJIG5vZGVzIGZvciBhbiBvbGQgbmFtZQorICAgd2hlcmUgbm90IGFsbCBlZGdlcyBjYXJyeSBhIG5ldyByZXBsYWNlbWVudCBtYXkgbGVhZCB0byBzaWxlbnQKKyAgIGNvZGVnZW4gZXJyb3JzIG9yIHNwdXJpb3VzIHVuaW5pdGlhbGl6ZWQgd2FybmluZ3MuICAqLworI2RlZmluZSBUT0RPX3VwZGF0ZV9zc2FfZnVsbF9waGkJKDEgPDwgMTMpCisKKy8qIFBhc3NlcyB0aGF0IHVwZGF0ZSB0aGUgU1NBIGZvcm0gb24gdGhlaXIgb3duIG1heSB3YW50IHRvIGRlbGVnYXRlCisgICB0aGUgdXBkYXRpbmcgb2YgdmlydHVhbCBuYW1lcyB0byB0aGUgZ2VuZXJpYyB1cGRhdGVyLiAgU2luY2UgRlVECisgICBjaGFpbnMgYXJlIGVhc2llciB0byBtYWludGFpbiwgdGhpcyBzaW1wbGlmaWVzIHRoZSB3b3JrIHRoZXkgbmVlZAorICAgdG8gZG8uICBOT1RFOiBJZiB0aGlzIGZsYWcgaXMgdXNlZCwgYW55IE9MRC0+TkVXIG1hcHBpbmdzIGZvciByZWFsCisgICBuYW1lcyBhcmUgZXhwbGljaXRseSBkZXN0cm95ZWQgYW5kIG9ubHkgdGhlIHN5bWJvbHMgbWFya2VkIGZvcgorICAgcmVuYW1pbmcgYXJlIHByb2Nlc3NlZC4gICovCisjZGVmaW5lIFRPRE9fdXBkYXRlX3NzYV9vbmx5X3ZpcnR1YWxzCSgxIDw8IDE0KQorCisvKiBTb21lIHBhc3NlcyBsZWF2ZSB1bnVzZWQgbG9jYWwgdmFyaWFibGVzIHRoYXQgY2FuIGJlIHJlbW92ZWQgZnJvbQorICAgY2Z1bi0+bG9jYWxfZGVjbHMuICBUaGlzIHJlZHVjZXMgdGhlIHNpemUgb2YgZHVtcCBmaWxlcworICAgYW5kIHRoZSBtZW1vcnkgZm9vdHByaW50IGZvciBWQVJfREVDTHMuICAqLworI2RlZmluZSBUT0RPX3JlbW92ZV91bnVzZWRfbG9jYWxzCSgxIDw8IDE1KQorCisvKiBDYWxsIGRmX2ZpbmlzaCBhdCB0aGUgZW5kIG9mIHRoZSBwYXNzLiAgVGhpcyBpcyBkb25lIGFmdGVyIGFsbCBvZgorICAgdGhlIGR1bXBlcnMgaGF2ZSBiZWVuIGFsbG93ZWQgdG8gcnVuIHNvIHRoYXQgdGhleSBoYXZlIGFjY2VzcyB0bworICAgdGhlIGluc3RhbmNlIGJlZm9yZSBpdCBpcyBkZXN0cm95ZWQuICAqLworI2RlZmluZSBUT0RPX2RmX2ZpbmlzaCAgICAgICAgICAgICAgICAgICgxIDw8IDE3KQorCisvKiBDYWxsIGRmX3ZlcmlmeSBhdCB0aGUgZW5kIG9mIHRoZSBwYXNzIGlmIGNoZWNraW5nIGlzIGVuYWJsZWQuICAqLworI2RlZmluZSBUT0RPX2RmX3ZlcmlmeSAgICAgICAgICAgICAgICAgICgxIDw8IDE4KQorCisvKiBJbnRlcm5hbGx5IHVzZWQgZm9yIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhIHBhc3MuICAqLworI2RlZmluZSBUT0RPX21hcmtfZmlyc3RfaW5zdGFuY2UJKDEgPDwgMTkpCisKKy8qIFJlYnVpbGQgYWxpYXNpbmcgaW5mby4gICovCisjZGVmaW5lIFRPRE9fcmVidWlsZF9hbGlhcyAgICAgICAgICAgICAgKDEgPDwgMjApCisKKy8qIFJlYnVpbGQgdGhlIGFkZHJlc3NhYmxlLXZhcnMgYml0bWFwIGFuZCBkbyByZWdpc3RlciBwcm9tb3Rpb24uICAqLworI2RlZmluZSBUT0RPX3VwZGF0ZV9hZGRyZXNzX3Rha2VuCSgxIDw8IDIxKQorCisvKiBJbnRlcm5hbGx5IHVzZWQgaW4gZXhlY3V0ZV9mdW5jdGlvbl90b2RvKCkuICAqLworI2RlZmluZSBUT0RPX3VwZGF0ZV9zc2FfYW55CQlcCisgICAgKFRPRE9fdXBkYXRlX3NzYQkJCVwKKyAgICAgfCBUT0RPX3VwZGF0ZV9zc2Ffbm9fcGhpCQlcCisgICAgIHwgVE9ET191cGRhdGVfc3NhX2Z1bGxfcGhpCQlcCisgICAgIHwgVE9ET191cGRhdGVfc3NhX29ubHlfdmlydHVhbHMpCisKKyNkZWZpbmUgVE9ET192ZXJpZnlfYWxsIFwKKyAgKFRPRE9fdmVyaWZ5X3NzYSB8IFRPRE9fdmVyaWZ5X2Zsb3cgfCBUT0RPX3ZlcmlmeV9zdG10cykKKworCisvKiBSZWdpc3RlciBwYXNzIGluZm8uICovCisKK2VudW0gcGFzc19wb3NpdGlvbmluZ19vcHMKK3sKKyAgUEFTU19QT1NfSU5TRVJUX0FGVEVSLCAgLyogSW5zZXJ0IGFmdGVyIHRoZSByZWZlcmVuY2UgcGFzcy4gICovCisgIFBBU1NfUE9TX0lOU0VSVF9CRUZPUkUsIC8qIEluc2VydCBiZWZvcmUgdGhlIHJlZmVyZW5jZSBwYXNzLiAgKi8KKyAgUEFTU19QT1NfUkVQTEFDRSAgICAgICAgLyogUmVwbGFjZSB0aGUgcmVmZXJlbmNlIHBhc3MuICAqLworfTsKKworc3RydWN0IHJlZ2lzdGVyX3Bhc3NfaW5mbworeworICBzdHJ1Y3Qgb3B0X3Bhc3MgKnBhc3M7ICAgICAgICAgICAgLyogTmV3IHBhc3MgdG8gcmVnaXN0ZXIuICAqLworICBjb25zdCBjaGFyICpyZWZlcmVuY2VfcGFzc19uYW1lOyAgLyogTmFtZSBvZiB0aGUgcmVmZXJlbmNlIHBhc3MgZm9yIGhvb2tpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwIHRoZSBuZXcgcGFzcy4gICovCisgIGludCByZWZfcGFzc19pbnN0YW5jZV9udW1iZXI7ICAgICAvKiBJbnNlcnQgdGhlIHBhc3MgYXQgdGhlIHNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UgbnVtYmVyIG9mIHRoZSByZWZlcmVuY2UgcGFzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvIGl0IGZvciBldmVyeSBpbnN0YW5jZSBpZiBpdCBpcyAwLiAgKi8KKyAgZW51bSBwYXNzX3Bvc2l0aW9uaW5nX29wcyBwb3Nfb3A7IC8qIGhvdyB0byBpbnNlcnQgdGhlIG5ldyBwYXNzLiAgKi8KK307CisKK2V4dGVybiB2b2lkIHRyZWVfbG93ZXJpbmdfcGFzc2VzICh0cmVlIGRlY2wpOworCitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX211ZGZsYXBfMTsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfbXVkZmxhcF8yOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19sb3dlcl9jZjsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfcmVmYWN0b3JfZWg7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2xvd2VyX2VoOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19sb3dlcl9laF9kaXNwYXRjaDsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfbG93ZXJfcmVzeDsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfYnVpbGRfY2ZnOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc190cmVlX3Byb2ZpbGU7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2Vhcmx5X3RyZWVfcHJvZmlsZTsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfY2xlYW51cF9jZmc7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3JlZmVyZW5jZWRfdmFyczsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfY2xlYW51cF9laDsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfZml4dXBfY2ZnOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19zcmE7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3NyYV9lYXJseTsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfZWFybHlfaXBhX3NyYTsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfdGFpbF9yZWN1cnNpb247CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3RhaWxfY2FsbHM7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3RyZWVfbG9vcDsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfdHJlZV9sb29wX2luaXQ7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2xpbTsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfdHJlZV91bnN3aXRjaDsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfcHJlZGNvbTsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfaXZfY2Fub247CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3NjZXZfY3Byb3A7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2VtcHR5X2xvb3A7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3JlY29yZF9ib3VuZHM7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2dyYXBoaXRlX3RyYW5zZm9ybXM7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2lmX2NvbnZlcnNpb247CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2xvb3BfZGlzdHJpYnV0aW9uOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc192ZWN0b3JpemU7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3NscF92ZWN0b3JpemU7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2NvbXBsZXRlX3Vucm9sbDsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfY29tcGxldGVfdW5yb2xsaTsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfcGFyYWxsZWxpemVfbG9vcHM7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2xvb3BfcHJlZmV0Y2g7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2l2X29wdGltaXplOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc190cmVlX2xvb3BfZG9uZTsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfY2g7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2NjcDsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfcGhpX29ubHlfY3Byb3A7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2J1aWxkX3NzYTsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfYnVpbGRfYWxpYXM7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2J1aWxkX2VhbGlhczsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfZG9taW5hdG9yOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19kY2U7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2RjZV9sb29wOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19jZF9kY2U7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2NhbGxfY2RjZTsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfbWVyZ2VfcGhpOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19zcGxpdF9jcml0X2VkZ2VzOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19wcmU7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3Byb2ZpbGU7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3N0cmlwX3ByZWRpY3RfaGludHM7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2xvd2VyX2NvbXBsZXhfTzA7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2xvd2VyX2NvbXBsZXg7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2xvd2VyX3ZlY3RvcjsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfbG93ZXJfdmVjdG9yX3NzYTsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfbG93ZXJfb21wOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19kaWFnbm9zZV9vbXBfYmxvY2tzOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19leHBhbmRfb21wOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19leHBhbmRfb21wX3NzYTsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3Nfb2JqZWN0X3NpemVzOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19mb2xkX2J1aWx0aW5zOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19zdGRhcmc7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2Vhcmx5X3dhcm5fdW5pbml0aWFsaXplZDsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfbGF0ZV93YXJuX3VuaW5pdGlhbGl6ZWQ7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2NzZV9yZWNpcHJvY2FsczsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfY3NlX3NpbmNvczsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3Nfb3B0aW1pemVfYnN3YXA7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3dhcm5fZnVuY3Rpb25fcmV0dXJuOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc193YXJuX2Z1bmN0aW9uX25vcmV0dXJuOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19jc2VsaW07CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3BoaW9wdDsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfZm9yd3Byb3A7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3BoaXByb3A7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3RyZWVfaWZjb21iaW5lOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19kc2U7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX25ydjsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfcmVuYW1lX3NzYV9jb3BpZXM7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3Jlc3Rfb2ZfY29tcGlsYXRpb247CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3NpbmtfY29kZTsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfZnJlOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19saW5lYXJfdHJhbnNmb3JtOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19jaGVja19kYXRhX2RlcHM7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2NvcHlfcHJvcDsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfdnJwOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc191bmNwcm9wOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19yZXR1cm5fc2xvdDsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfcmVhc3NvYzsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfcmVidWlsZF9jZ3JhcGhfZWRnZXM7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3JlbW92ZV9jZ3JhcGhfY2FsbGVlX2VkZ2VzOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19idWlsZF9jZ3JhcGhfZWRnZXM7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2xvY2FsX3B1cmVfY29uc3Q7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3RyYWNlcjsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3Nfd2Fybl91bnVzZWRfcmVzdWx0OworCisvKiBJUEEgUGFzc2VzICovCitleHRlcm4gc3RydWN0IHNpbXBsZV9pcGFfb3B0X3Bhc3MgcGFzc19pcGFfZnVuY3Rpb25fYW5kX3ZhcmlhYmxlX3Zpc2liaWxpdHk7CitleHRlcm4gc3RydWN0IHNpbXBsZV9pcGFfb3B0X3Bhc3MgcGFzc19pcGFfZWFybHlfaW5saW5lOworCitleHRlcm4gc3RydWN0IHNpbXBsZV9pcGFfb3B0X3Bhc3MgcGFzc19lYXJseV9sb2NhbF9wYXNzZXM7CisKK2V4dGVybiBzdHJ1Y3QgaXBhX29wdF9wYXNzX2QgcGFzc19pcGFfd2hvbGVfcHJvZ3JhbV92aXNpYmlsaXR5OworZXh0ZXJuIHN0cnVjdCBpcGFfb3B0X3Bhc3NfZCBwYXNzX2lwYV9sdG9fZ2ltcGxlX291dDsKK2V4dGVybiBzdHJ1Y3Qgc2ltcGxlX2lwYV9vcHRfcGFzcyBwYXNzX2lwYV9pbmNyZWFzZV9hbGlnbm1lbnQ7CitleHRlcm4gc3RydWN0IHNpbXBsZV9pcGFfb3B0X3Bhc3MgcGFzc19pcGFfbWF0cml4X3Jlb3JnOworZXh0ZXJuIHN0cnVjdCBpcGFfb3B0X3Bhc3NfZCBwYXNzX2lwYV9pbmxpbmU7CitleHRlcm4gc3RydWN0IHNpbXBsZV9pcGFfb3B0X3Bhc3MgcGFzc19pcGFfZnJlZV9sYW5nX2RhdGE7CitleHRlcm4gc3RydWN0IGlwYV9vcHRfcGFzc19kIHBhc3NfaXBhX2NwOworZXh0ZXJuIHN0cnVjdCBpcGFfb3B0X3Bhc3NfZCBwYXNzX2lwYV9yZWZlcmVuY2U7CitleHRlcm4gc3RydWN0IGlwYV9vcHRfcGFzc19kIHBhc3NfaXBhX3B1cmVfY29uc3Q7CitleHRlcm4gc3RydWN0IHNpbXBsZV9pcGFfb3B0X3Bhc3MgcGFzc19pcGFfdHlwZV9lc2NhcGU7CitleHRlcm4gc3RydWN0IHNpbXBsZV9pcGFfb3B0X3Bhc3MgcGFzc19pcGFfcHRhOworZXh0ZXJuIHN0cnVjdCBzaW1wbGVfaXBhX29wdF9wYXNzIHBhc3NfaXBhX3N0cnVjdF9yZW9yZzsKK2V4dGVybiBzdHJ1Y3QgaXBhX29wdF9wYXNzX2QgcGFzc19pcGFfbHRvX3dwYV9maXh1cDsKK2V4dGVybiBzdHJ1Y3QgaXBhX29wdF9wYXNzX2QgcGFzc19pcGFfbHRvX2ZpbmlzaF9vdXQ7CisKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfYWxsX29wdGltaXphdGlvbnM7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2NsZWFudXBfY2ZnX3Bvc3Rfb3B0aW1pemluZzsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfaW5pdF9kYXRhc3RydWN0dXJlczsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfZml4dXBfY2ZnOworCitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2V4cGFuZDsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfaW5pdF9mdW5jdGlvbjsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfanVtcDsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfcnRsX2VoOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19pbml0aWFsX3ZhbHVlX3NldHM7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3Vuc2hhcmVfYWxsX3J0bDsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfaW5zdGFudGlhdGVfdmlydHVhbF9yZWdzOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19ydGxfZndwcm9wOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19ydGxfZndwcm9wX2FkZHI7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2p1bXAyOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19sb3dlcl9zdWJyZWc7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2NzZTsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfZmFzdF9ydGxfZGNlOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc191ZF9ydGxfZGNlOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19ydGxfZGNlOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19ydGxfZHNlMTsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfcnRsX2RzZTI7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3J0bF9kc2UzOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19ydGxfY3Byb3A7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3J0bF9wcmU7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3J0bF9ob2lzdDsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfcnRsX3N0b3JlX21vdGlvbjsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfY3NlX2FmdGVyX2dsb2JhbF9vcHRzOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19ydGxfaWZjdnQ7CisKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfaW50b19jZmdfbGF5b3V0X21vZGU7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX291dG9mX2NmZ19sYXlvdXRfbW9kZTsKKworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19sb29wMjsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfcnRsX2xvb3BfaW5pdDsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfcnRsX21vdmVfbG9vcF9pbnZhcmlhbnRzOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19ydGxfdW5zd2l0Y2g7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3J0bF91bnJvbGxfYW5kX3BlZWxfbG9vcHM7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3J0bF9kb2xvb3A7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3J0bF9sb29wX2RvbmU7CisKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3Nfd2ViOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19jc2UyOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19kZl9pbml0aWFsaXplX29wdDsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfZGZfaW5pdGlhbGl6ZV9ub19vcHQ7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3JlZ2luZm9faW5pdDsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfaW5jX2RlYzsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3Nfc3RhY2tfcHRyX21vZDsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfaW5pdGlhbGl6ZV9yZWdzOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19jb21iaW5lOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19pZl9hZnRlcl9jb21iaW5lOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19wYXJ0aXRpb25fYmxvY2tzOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19tYXRjaF9hc21fY29uc3RyYWludHM7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3JlZ21vdmU7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3NwbGl0X2FsbF9pbnNuczsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfZmFzdF9ydGxfYnl0ZV9kY2U7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2xvd2VyX3N1YnJlZzI7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX21vZGVfc3dpdGNoaW5nOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19zbXM7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3NjaGVkOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19pcmE7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3Bvc3RyZWxvYWQ7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2NsZWFuX3N0YXRlOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19icmFuY2hfcHJvYjsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfdmFsdWVfcHJvZmlsZV90cmFuc2Zvcm1hdGlvbnM7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3Bvc3RyZWxvYWRfY3NlOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19nY3NlMjsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3Nfc3BsaXRfYWZ0ZXJfcmVsb2FkOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19icmFuY2hfdGFyZ2V0X2xvYWRfb3B0aW1pemUxOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc190aHJlYWRfcHJvbG9ndWVfYW5kX2VwaWxvZ3VlOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19zdGFja19hZGp1c3RtZW50czsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfcGVlcGhvbGUyOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19pZl9hZnRlcl9yZWxvYWQ7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3JlZ3JlbmFtZTsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfY3Byb3BfaGFyZHJlZzsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfcmVvcmRlcl9ibG9ja3M7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2JyYW5jaF90YXJnZXRfbG9hZF9vcHRpbWl6ZTI7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2xlYWZfcmVnczsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3Nfc3BsaXRfYmVmb3JlX3NjaGVkMjsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3Nfc2NoZWQyOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19zdGFja19yZWdzOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19zdGFja19yZWdzX3J1bjsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfZGZfZmluaXNoOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19jb21wdXRlX2FsaWdubWVudHM7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2R1cGxpY2F0ZV9jb21wdXRlZF9nb3RvczsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfdmFyaWFibGVfdHJhY2tpbmc7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2ZyZWVfY2ZnOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19tYWNoaW5lX3Jlb3JnOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19jbGVhbnVwX2JhcnJpZXJzOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19kZWxheV9zbG90czsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3Nfc3BsaXRfZm9yX3Nob3J0ZW5fYnJhbmNoZXM7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3NwbGl0X2JlZm9yZV9yZWdzdGFjazsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfY29udmVydF90b19laF9yZWdpb25fcmFuZ2VzOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19zaG9ydGVuX2JyYW5jaGVzOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19zZXRfbm90aHJvd19mdW5jdGlvbl9mbGFnczsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfZmluYWw7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3J0bF9zZXFhYnN0cjsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfcmVsZWFzZV9zc2FfbmFtZXM7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2Vhcmx5X2lubGluZTsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfaW5saW5lX3BhcmFtZXRlcnM7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2FsbF9lYXJseV9vcHRpbWl6YXRpb25zOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc191cGRhdGVfYWRkcmVzc190YWtlbjsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfY29udmVydF9zd2l0Y2g7CisKKy8qIFRoZSByb290IG9mIHRoZSBjb21waWxhdGlvbiBwYXNzIHRyZWUsIG9uY2UgY29uc3RydWN0ZWQuICAqLworZXh0ZXJuIHN0cnVjdCBvcHRfcGFzcyAqYWxsX3Bhc3NlcywgKmFsbF9zbWFsbF9pcGFfcGFzc2VzLCAqYWxsX2xvd2VyaW5nX3Bhc3NlcywKKyAgICAgICAgICAgICAgICAgICAgICAgKmFsbF9yZWd1bGFyX2lwYV9wYXNzZXMsICphbGxfbHRvX2dlbl9wYXNzZXM7CisKKy8qIERlZmluZSBhIGxpc3Qgb2YgcGFzcyBsaXN0cyBzbyB0aGF0IGJvdGggcGFzc2VzLmMgYW5kIHBsdWdpbnMgY2FuIGVhc2lseQorICAgZmluZCBhbGwgdGhlIHBhc3MgbGlzdHMuICAqLworI2RlZmluZSBHQ0NfUEFTU19MSVNUUyBcCisgIERFRl9QQVNTX0xJU1QgKGFsbF9sb3dlcmluZ19wYXNzZXMpIFwKKyAgREVGX1BBU1NfTElTVCAoYWxsX3NtYWxsX2lwYV9wYXNzZXMpIFwKKyAgREVGX1BBU1NfTElTVCAoYWxsX3JlZ3VsYXJfaXBhX3Bhc3NlcykgXAorICBERUZfUEFTU19MSVNUIChhbGxfbHRvX2dlbl9wYXNzZXMpIFwKKyAgREVGX1BBU1NfTElTVCAoYWxsX3Bhc3NlcykKKworI2RlZmluZSBERUZfUEFTU19MSVNUKExJU1QpIFBBU1NfTElTVF9OT18jI0xJU1QsCitlbnVtCit7CisgIEdDQ19QQVNTX0xJU1RTCisgIFBBU1NfTElTVF9OVU0KK307CisjdW5kZWYgREVGX1BBU1NfTElTVAorCisvKiBUaGlzIGlzIHVzZWQgYnkgcGx1Z2lucywgYW5kIHNob3VsZCBhbHNvIGJlIHVzZWQgaW4KKyAgIHBhc3Nlcy5jOnJlZ2lzdGVyX3Bhc3MuICAqLworZXh0ZXJuIHN0cnVjdCBvcHRfcGFzcyAqKmdjY19wYXNzX2xpc3RzW107CisKKy8qIEN1cnJlbnQgb3B0aW1pemF0aW9uIHBhc3MuICAqLworZXh0ZXJuIHN0cnVjdCBvcHRfcGFzcyAqY3VycmVudF9wYXNzOworCitleHRlcm4gc3RydWN0IG9wdF9wYXNzICogZ2V0X3Bhc3NfZm9yX2lkIChpbnQpOworZXh0ZXJuIGJvb2wgZXhlY3V0ZV9vbmVfcGFzcyAoc3RydWN0IG9wdF9wYXNzICopOworZXh0ZXJuIHZvaWQgZXhlY3V0ZV9wYXNzX2xpc3QgKHN0cnVjdCBvcHRfcGFzcyAqKTsKK2V4dGVybiB2b2lkIGV4ZWN1dGVfaXBhX3Bhc3NfbGlzdCAoc3RydWN0IG9wdF9wYXNzICopOworZXh0ZXJuIHZvaWQgZXhlY3V0ZV9pcGFfc3VtbWFyeV9wYXNzZXMgKHN0cnVjdCBpcGFfb3B0X3Bhc3NfZCAqKTsKK2V4dGVybiB2b2lkIGV4ZWN1dGVfYWxsX2lwYV90cmFuc2Zvcm1zICh2b2lkKTsKK2V4dGVybiB2b2lkIGV4ZWN1dGVfYWxsX2lwYV9zdG10X2ZpeHVwcyAoc3RydWN0IGNncmFwaF9ub2RlICosIGdpbXBsZSAqKTsKK2V4dGVybiBib29sIHBhc3NfaW5pdF9kdW1wX2ZpbGUgKHN0cnVjdCBvcHRfcGFzcyAqKTsKK2V4dGVybiB2b2lkIHBhc3NfZmluaV9kdW1wX2ZpbGUgKHN0cnVjdCBvcHRfcGFzcyAqKTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmdldF9jdXJyZW50X3Bhc3NfbmFtZSAodm9pZCk7CitleHRlcm4gdm9pZCBwcmludF9jdXJyZW50X3Bhc3MgKEZJTEUgKik7CitleHRlcm4gdm9pZCBkZWJ1Z19wYXNzICh2b2lkKTsKK2V4dGVybiB2b2lkIGlwYV93cml0ZV9zdW1tYXJpZXMgKHZvaWQpOworZXh0ZXJuIHZvaWQgaXBhX3dyaXRlX3N1bW1hcmllc19vZl9jZ3JhcGhfbm9kZV9zZXQgKAorCSAgICAgIHN0cnVjdCBjZ3JhcGhfbm9kZV9zZXRfZGVmICopOworZXh0ZXJuIHZvaWQgaXBhX3JlYWRfc3VtbWFyaWVzICh2b2lkKTsKK2V4dGVybiB2b2lkIHJlZ2lzdGVyX29uZV9kdW1wX2ZpbGUgKHN0cnVjdCBvcHRfcGFzcyAqKTsKK2V4dGVybiBib29sIGZ1bmN0aW9uX2NhbGxlZF9ieV9wcm9jZXNzZWRfbm9kZXNfcCAodm9pZCk7CitleHRlcm4gdm9pZCByZWdpc3Rlcl9wYXNzIChzdHJ1Y3QgcmVnaXN0ZXJfcGFzc19pbmZvICopOworCisvKiBTZXQgdG8gdHJ1ZSBpZiB0aGUgcGFzcyBpcyBjYWxsZWQgdGhlIGZpcnN0IHRpbWUgZHVyaW5nIGNvbXBpbGF0aW9uIG9mIHRoZQorICAgY3VycmVudCBmdW5jdGlvbi4gIE5vdGUgdGhhdCB1c2luZyB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBvcHRpbWl6YXRpb24KKyAgIHBhc3NlcyBpcyBjb25zaWRlcmVkIG5vdCB0byBiZSBjbGVhbiwgYW5kIGl0IHNob3VsZCBiZSBhdm9pZGVkIGlmIHBvc3NpYmxlLgorICAgVGhpcyBmbGFnIGlzIGN1cnJlbnRseSB1c2VkIHRvIHByZXZlbnQgbG9vcHMgZnJvbSBiZWluZyBwZWVsZWQgcmVwZWF0ZWRseQorICAgaW4ganVtcCB0aHJlYWRpbmc7IGl0IHdpbGwgYmUgcmVtb3ZlZCBvbmNlIHdlIHByZXNlcnZlIGxvb3Agc3RydWN0dXJlcworICAgdGhyb3VnaG91dCB0aGUgY29tcGlsYXRpb24gLS0gd2Ugd2lsbCBiZSBhYmxlIHRvIG1hcmsgdGhlIGFmZmVjdGVkIGxvb3BzCisgICBkaXJlY3RseSBpbiBqdW1wIHRocmVhZGluZywgYW5kIGF2b2lkIHBlZWxpbmcgdGhlbSBuZXh0IHRpbWUuICAqLworZXh0ZXJuIGJvb2wgZmlyc3RfcGFzc19pbnN0YW5jZTsKKworLyogRGVjbGFyZSBmb3IgcGx1Z2lucy4gICovCitleHRlcm4gdm9pZCBkb19wZXJfZnVuY3Rpb25fdG9wb3JkZXIgKHZvaWQgKCopICh2b2lkICopLCB2b2lkICopOworCisjZW5kaWYgLyogR0NDX1RSRUVfUEFTU19IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS1zc2EtYWxpYXMuaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS90cmVlLXNzYS1hbGlhcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4OWZiODYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS1zc2EtYWxpYXMuaApAQCAtMCwwICsxLDEzMSBAQAorLyogVHJlZSBiYXNlZCBhbGlhcyBhbmFseXNpcyBhbmQgYWxpYXMgb3JhY2xlLgorICAgQ29weXJpZ2h0IChDKSAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgUmljaGFyZCBHdWVudGhlciAgPHJndWVudGhlckBzdXNlLmRlPgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKKyAgIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBUUkVFX1NTQV9BTElBU19ICisjZGVmaW5lIFRSRUVfU1NBX0FMSUFTX0gKKworI2luY2x1ZGUgImNvcmV0eXBlcy5oIgorCisKKy8qIFRoZSBwb2ludHMtdG8gc29sdXRpb24uCisKKyAgIFRoZSBwb2ludHMtdG8gc29sdXRpb24gaXMgYSB1bmlvbiBvZiBwdF92YXJzIGFuZCB0aGUgYWJzdHJhY3QKKyAgIHNldHMgc3BlY2lmaWVkIGJ5IHRoZSBmbGFncy4gICovCitzdHJ1Y3QgR1RZKCgpKSBwdF9zb2x1dGlvbgoreworICAvKiBOb256ZXJvIGlmIHBvaW50cy10byBhbmFseXNpcyBjb3VsZG4ndCBkZXRlcm1pbmUgd2hlcmUgdGhpcyBwb2ludGVyCisgICAgIGlzIHBvaW50aW5nIHRvLiAgKi8KKyAgdW5zaWduZWQgaW50IGFueXRoaW5nIDogMTsKKworICAvKiBOb256ZXJvIGlmIHRoZSBwb2ludHMtdG8gc2V0IGluY2x1ZGVzIGFueSBnbG9iYWwgbWVtb3J5LiAgTm90ZSB0aGF0CisgICAgIGV2ZW4gaWYgdGhpcyBpcyB6ZXJvIHB0X3ZhcnMgY2FuIHN0aWxsIGluY2x1ZGUgZ2xvYmFsIHZhcmlhYmxlcy4gICovCisgIHVuc2lnbmVkIGludCBub25sb2NhbCA6IDE7CisKKyAgLyogTm9uemVybyBpZiB0aGUgcG9pbnRzLXRvIHNldCBpbmNsdWRlcyBhbnkgZXNjYXBlZCBsb2NhbCB2YXJpYWJsZS4gICovCisgIHVuc2lnbmVkIGludCBlc2NhcGVkIDogMTsKKworICAvKiBOb256ZXJvIGlmIHRoZSBwb2ludHMtdG8gc2V0IGluY2x1ZGVzICdub3RoaW5nJywgdGhlIHBvaW50cy10byBzZXQKKyAgICAgaW5jbHVkZXMgbWVtb3J5IGF0IGFkZHJlc3MgTlVMTC4gICovCisgIHVuc2lnbmVkIGludCBudWxsIDogMTsKKworCisgIC8qIE5vbnplcm8gaWYgdGhlIHB0X3ZhcnMgYml0bWFwIGluY2x1ZGVzIGEgZ2xvYmFsIHZhcmlhYmxlLiAgKi8KKyAgdW5zaWduZWQgaW50IHZhcnNfY29udGFpbnNfZ2xvYmFsIDogMTsKKworICAvKiBOb256ZXJvIGlmIHRoZSBwdF92YXJzIGJpdG1hcCBpbmNsdWRlcyBhIHJlc3RyaWN0IHRhZyB2YXJpYWJsZS4gICovCisgIHVuc2lnbmVkIGludCB2YXJzX2NvbnRhaW5zX3Jlc3RyaWN0IDogMTsKKworICAvKiBTZXQgb2YgdmFyaWFibGVzIHRoYXQgdGhpcyBwb2ludGVyIG1heSBwb2ludCB0by4gICovCisgIGJpdG1hcCB2YXJzOworfTsKKworCisvKiBTaW1wbGlmaWVkIGFuZCBjYWNoZWQgaW5mb3JtYXRpb24gYWJvdXQgYSBtZW1vcnkgcmVmZXJlbmNlIHRyZWUuCisgICBVc2VkIGJ5IHRoZSBhbGlhcy1vcmFjbGUgaW50ZXJuYWxseSBhbmQgZXh0ZXJuYWxseSBpbiBhbHRlcm5hdGUKKyAgIGludGVyZmFjZXMuICAqLwordHlwZWRlZiBzdHJ1Y3QgYW9fcmVmX3MKK3sKKyAgLyogVGhlIG9yaWdpbmFsIGZ1bGwgbWVtb3J5IHJlZmVyZW5jZSB0cmVlIG9yIE5VTExfVFJFRSBpZiB0aGF0IGlzCisgICAgIG5vdCBhdmFpbGFibGUuICAqLworICB0cmVlIHJlZjsKKworICAvKiBUaGUgZm9sbG93aW5nIGZpZWxkcyBhcmUgdGhlIGRlY29tcG9zZWQgcmVmZXJlbmNlIGFzIHJldHVybmVkCisgICAgIGJ5IGdldF9yZWZfYmFzZV9hbmRfZXh0ZW50LiAgKi8KKyAgLyogVGhlIGJhc2Ugb2JqZWN0IG9mIHRoZSBtZW1vcnkgcmVmZXJlbmNlIG9yIE5VTExfVFJFRSBpZiBhbGwgb2YKKyAgICAgdGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIG5vdCB5ZXQgY29tcHV0ZWQuICAqLworICB0cmVlIGJhc2U7CisgIC8qIFRoZSBvZmZzZXQgcmVsYXRpdmUgdG8gdGhlIGJhc2UuICAqLworICBIT1NUX1dJREVfSU5UIG9mZnNldDsKKyAgLyogVGhlIHNpemUgb2YgdGhlIGFjY2Vzcy4gICovCisgIEhPU1RfV0lERV9JTlQgc2l6ZTsKKyAgLyogVGhlIG1heGltdW0gcG9zc2libGUgZXh0ZW50IG9mIHRoZSBhY2Nlc3Mgb3IgLTEgaWYgdW5jb25zdHJhaW5lZC4gICovCisgIEhPU1RfV0lERV9JTlQgbWF4X3NpemU7CisKKyAgLyogVGhlIGFsaWFzIHNldCBvZiB0aGUgYWNjZXNzIG9yIC0xIGlmIG5vdCB5ZXQgY29tcHV0ZWQuICAqLworICBhbGlhc19zZXRfdHlwZSByZWZfYWxpYXNfc2V0OworCisgIC8qIFRoZSBhbGlhcyBzZXQgb2YgdGhlIGJhc2Ugb2JqZWN0IG9yIC0xIGlmIG5vdCB5ZXQgY29tcHV0ZWQuICAqLworICBhbGlhc19zZXRfdHlwZSBiYXNlX2FsaWFzX3NldDsKK30gYW9fcmVmOworCisKKy8qIEluIHRyZWUtc3NhLWFsaWFzLmMgICovCitleHRlcm4gdm9pZCBhb19yZWZfaW5pdCAoYW9fcmVmICosIHRyZWUpOworZXh0ZXJuIHZvaWQgYW9fcmVmX2luaXRfZnJvbV9wdHJfYW5kX3NpemUgKGFvX3JlZiAqLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGFvX3JlZl9iYXNlIChhb19yZWYgKik7CitleHRlcm4gYWxpYXNfc2V0X3R5cGUgYW9fcmVmX2FsaWFzX3NldCAoYW9fcmVmICopOworZXh0ZXJuIGJvb2wgcHRyX2RlcmVmX21heV9hbGlhc19nbG9iYWxfcCAodHJlZSk7CitleHRlcm4gYm9vbCByZWZzX21heV9hbGlhc19wICh0cmVlLCB0cmVlKTsKK2V4dGVybiBib29sIHJlZnNfbWF5X2FsaWFzX3BfMSAoYW9fcmVmICosIGFvX3JlZiAqLCBib29sKTsKK2V4dGVybiBib29sIHJlZnNfYW50aV9kZXBlbmRlbnRfcCAodHJlZSwgdHJlZSk7CitleHRlcm4gYm9vbCByZWZzX291dHB1dF9kZXBlbmRlbnRfcCAodHJlZSwgdHJlZSk7CitleHRlcm4gYm9vbCByZWZfbWF5YmVfdXNlZF9ieV9zdG10X3AgKGdpbXBsZSwgdHJlZSk7CitleHRlcm4gYm9vbCBzdG10X21heV9jbG9iYmVyX3JlZl9wIChnaW1wbGUsIHRyZWUpOworZXh0ZXJuIGJvb2wgc3RtdF9tYXlfY2xvYmJlcl9yZWZfcF8xIChnaW1wbGUsIGFvX3JlZiAqKTsKK2V4dGVybiB0cmVlIGdldF9jb250aW51YXRpb25fZm9yX3BoaSAoZ2ltcGxlLCBhb19yZWYgKiwgYml0bWFwICopOworZXh0ZXJuIHZvaWQgKndhbGtfbm9uX2FsaWFzZWRfdnVzZXMgKGFvX3JlZiAqLCB0cmVlLAorCQkJCSAgICAgdm9pZCAqKCopKGFvX3JlZiAqLCB0cmVlLCB2b2lkICopLAorCQkJCSAgICAgdm9pZCAqKCopKGFvX3JlZiAqLCB0cmVlLCB2b2lkICopLCB2b2lkICopOworZXh0ZXJuIHVuc2lnbmVkIGludCB3YWxrX2FsaWFzZWRfdmRlZnMgKGFvX3JlZiAqLCB0cmVlLAorCQkJCQlib29sICgqKShhb19yZWYgKiwgdHJlZSwgdm9pZCAqKSwKKwkJCQkJdm9pZCAqLCBiaXRtYXAgKik7CitleHRlcm4gc3RydWN0IHB0cl9pbmZvX2RlZiAqZ2V0X3B0cl9pbmZvICh0cmVlKTsKK2V4dGVybiB2b2lkIGR1bXBfYWxpYXNfaW5mbyAoRklMRSAqKTsKK2V4dGVybiB2b2lkIGRlYnVnX2FsaWFzX2luZm8gKHZvaWQpOworZXh0ZXJuIHZvaWQgZHVtcF9wb2ludHNfdG9fc29sdXRpb24gKEZJTEUgKiwgc3RydWN0IHB0X3NvbHV0aW9uICopOworZXh0ZXJuIHZvaWQgZHVtcF9wb2ludHNfdG9faW5mb19mb3IgKEZJTEUgKiwgdHJlZSk7CitleHRlcm4gdm9pZCBkZWJ1Z19wb2ludHNfdG9faW5mb19mb3IgKHRyZWUpOworZXh0ZXJuIHZvaWQgZHVtcF9hbGlhc19zdGF0cyAoRklMRSAqKTsKKworCisvKiBJbiB0cmVlLXNzYS1zdHJ1Y3RhbGlhcy5jICAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBjb21wdXRlX21heV9hbGlhc2VzICh2b2lkKTsKK2V4dGVybiB2b2lkIGRlbGV0ZV9hbGlhc19oZWFwdmFycyAodm9pZCk7CitleHRlcm4gYm9vbCBwdF9zb2x1dGlvbl9pbmNsdWRlc19nbG9iYWwgKHN0cnVjdCBwdF9zb2x1dGlvbiAqKTsKK2V4dGVybiBib29sIHB0X3NvbHV0aW9uX2luY2x1ZGVzIChzdHJ1Y3QgcHRfc29sdXRpb24gKiwgY29uc3RfdHJlZSk7CitleHRlcm4gYm9vbCBwdF9zb2x1dGlvbnNfaW50ZXJzZWN0IChzdHJ1Y3QgcHRfc29sdXRpb24gKiwgc3RydWN0IHB0X3NvbHV0aW9uICopOworZXh0ZXJuIGJvb2wgcHRfc29sdXRpb25zX3NhbWVfcmVzdHJpY3RfYmFzZSAoc3RydWN0IHB0X3NvbHV0aW9uICosCisJCQkJCSAgICAgc3RydWN0IHB0X3NvbHV0aW9uICopOworZXh0ZXJuIHZvaWQgcHRfc29sdXRpb25fcmVzZXQgKHN0cnVjdCBwdF9zb2x1dGlvbiAqKTsKK2V4dGVybiB2b2lkIHB0X3NvbHV0aW9uX3NldCAoc3RydWN0IHB0X3NvbHV0aW9uICosIGJpdG1hcCk7CitleHRlcm4gdm9pZCBkdW1wX3B0YV9zdGF0cyAoRklMRSAqKTsKKworCisjZW5kaWYgLyogVFJFRV9TU0FfQUxJQVNfSCAgKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS90cmVlLXNzYS1vcGVyYW5kcy5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3RyZWUtc3NhLW9wZXJhbmRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQzNWZhYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS90cmVlLXNzYS1vcGVyYW5kcy5oCkBAIC0wLDAgKzEsMjMyIEBACisvKiBTU0Egb3BlcmFuZCBtYW5hZ2VtZW50IGZvciB0cmVlcy4KKyAgIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX1RSRUVfU1NBX09QRVJBTkRTX0gKKyNkZWZpbmUgR0NDX1RSRUVfU1NBX09QRVJBTkRTX0gKKworLyogSW50ZXJmYWNlIHRvIFNTQSBvcGVyYW5kcy4gICovCisKKworLyogVGhpcyByZXByZXNlbnRzIGEgcG9pbnRlciB0byBhIERFRiBvcGVyYW5kLiAgKi8KK3R5cGVkZWYgdHJlZSAqZGVmX29wZXJhbmRfcDsKKworLyogVGhpcyByZXByZXNlbnRzIGEgcG9pbnRlciB0byBhIFVTRSBvcGVyYW5kLiAgKi8KK3R5cGVkZWYgc3NhX3VzZV9vcGVyYW5kX3QgKnVzZV9vcGVyYW5kX3A7CisKKy8qIE5VTEwgb3BlcmFuZCB0eXBlcy4gICovCisjZGVmaW5lIE5VTExfVVNFX09QRVJBTkRfUCAJCSgodXNlX29wZXJhbmRfcClOVUxMKQorI2RlZmluZSBOVUxMX0RFRl9PUEVSQU5EX1AgCQkoKGRlZl9vcGVyYW5kX3ApTlVMTCkKKworLyogVGhpcyByZXByZXNlbnRzIHRoZSBERUYgb3BlcmFuZHMgb2YgYSBzdG10LiAgKi8KK3N0cnVjdCBkZWZfb3B0eXBlX2QKK3sKKyAgc3RydWN0IGRlZl9vcHR5cGVfZCAqbmV4dDsKKyAgdHJlZSAqZGVmX3B0cjsKK307Cit0eXBlZGVmIHN0cnVjdCBkZWZfb3B0eXBlX2QgKmRlZl9vcHR5cGVfcDsKKworLyogVGhpcyByZXByZXNlbnRzIHRoZSBVU0Ugb3BlcmFuZHMgb2YgYSBzdG10LiAgKi8KK3N0cnVjdCB1c2Vfb3B0eXBlX2QKK3sKKyAgc3RydWN0IHVzZV9vcHR5cGVfZCAqbmV4dDsKKyAgc3RydWN0IHNzYV91c2Vfb3BlcmFuZF9kIHVzZV9wdHI7Cit9OwordHlwZWRlZiBzdHJ1Y3QgdXNlX29wdHlwZV9kICp1c2Vfb3B0eXBlX3A7CisKKy8qIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYSB2YXJpYWJsZSBzaXplZCBidWZmZXIgd2hpY2ggaXMgYWxsb2NhdGVkIGJ5IHRoZQorICAgb3BlcmFuZCBtZW1vcnkgbWFuYWdlci4gIE9wZXJhbmRzIGFyZSBzdWJhbGxvY2F0ZWQgb3V0IG9mIHRoaXMgYmxvY2suICBUaGUKKyAgIE1FTSBhcnJheSB2YXJpZXMgaW4gc2l6ZS4gICovCisKK3N0cnVjdCBHVFkoKGNoYWluX25leHQoIiVoLm5leHQiKSkpIHNzYV9vcGVyYW5kX21lbW9yeV9kIHsKKyAgc3RydWN0IHNzYV9vcGVyYW5kX21lbW9yeV9kICpuZXh0OworICBjaGFyIG1lbVsxXTsKK307CisKKy8qIFBlci1mdW5jdGlvbiBvcGVyYW5kIGNhY2hlcy4gICovCitzdHJ1Y3QgR1RZKCgpKSBzc2Ffb3BlcmFuZHMgeworICAgc3RydWN0IHNzYV9vcGVyYW5kX21lbW9yeV9kICpvcGVyYW5kX21lbW9yeTsKKyAgIHVuc2lnbmVkIG9wZXJhbmRfbWVtb3J5X2luZGV4OworICAgLyogQ3VycmVudCBzaXplIG9mIHRoZSBvcGVyYW5kIG1lbW9yeSBidWZmZXIuICAqLworICAgdW5zaWduZWQgaW50IHNzYV9vcGVyYW5kX21lbV9zaXplOworCisgICBib29sIG9wc19hY3RpdmU7CisKKyAgIHN0cnVjdCBkZWZfb3B0eXBlX2QgKiBHVFkgKChza2lwICgiIikpKSBmcmVlX2RlZnM7CisgICBzdHJ1Y3QgdXNlX29wdHlwZV9kICogR1RZICgoc2tpcCAoIiIpKSkgZnJlZV91c2VzOworfTsKKworI2RlZmluZSBVU0VfRlJPTV9QVFIoUFRSKQlnZXRfdXNlX2Zyb21fcHRyIChQVFIpCisjZGVmaW5lIERFRl9GUk9NX1BUUihQVFIpCWdldF9kZWZfZnJvbV9wdHIgKFBUUikKKyNkZWZpbmUgU0VUX1VTRShVU0UsIFYpCQlzZXRfc3NhX3VzZV9mcm9tX3B0ciAoVVNFLCBWKQorI2RlZmluZSBTRVRfREVGKERFRiwgVikJCSgoKihERUYpKSA9IChWKSkKKworI2RlZmluZSBVU0VfU1RNVChVU0UpCQkoVVNFKS0+bG9jLnN0bXQKKworI2RlZmluZSBVU0VfT1BfUFRSKE9QKQkJKCYoKE9QKS0+dXNlX3B0cikpCisjZGVmaW5lIFVTRV9PUChPUCkJCShVU0VfRlJPTV9QVFIgKFVTRV9PUF9QVFIgKE9QKSkpCisKKyNkZWZpbmUgREVGX09QX1BUUihPUCkJCSgoT1ApLT5kZWZfcHRyKQorI2RlZmluZSBERUZfT1AoT1ApCQkoREVGX0ZST01fUFRSIChERUZfT1BfUFRSIChPUCkpKQorCisjZGVmaW5lIFBISV9SRVNVTFRfUFRSKFBISSkJZ2ltcGxlX3BoaV9yZXN1bHRfcHRyIChQSEkpCisjZGVmaW5lIFBISV9SRVNVTFQoUEhJKQkJREVGX0ZST01fUFRSIChQSElfUkVTVUxUX1BUUiAoUEhJKSkKKyNkZWZpbmUgU0VUX1BISV9SRVNVTFQoUEhJLCBWKQlTRVRfREVGIChQSElfUkVTVUxUX1BUUiAoUEhJKSwgKFYpKQorCisjZGVmaW5lIFBISV9BUkdfREVGX1BUUihQSEksIEkpCWdpbXBsZV9waGlfYXJnX2ltbV91c2VfcHRyICgoUEhJKSwgKEkpKQorI2RlZmluZSBQSElfQVJHX0RFRihQSEksIEkpCVVTRV9GUk9NX1BUUiAoUEhJX0FSR19ERUZfUFRSICgoUEhJKSwgKEkpKSkKKyNkZWZpbmUgU0VUX1BISV9BUkdfREVGKFBISSwgSSwgVikJCQkJCVwKKwkJCQlTRVRfVVNFIChQSElfQVJHX0RFRl9QVFIgKChQSEkpLCAoSSkpLCAoVikpCisjZGVmaW5lIFBISV9BUkdfREVGX0ZST01fRURHRShQSEksIEUpCQkJCQlcCisJCQkJUEhJX0FSR19ERUYgKChQSEkpLCAoRSktPmRlc3RfaWR4KQorI2RlZmluZSBQSElfQVJHX0RFRl9QVFJfRlJPTV9FREdFKFBISSwgRSkJCQkJXAorCQkJCVBISV9BUkdfREVGX1BUUiAoKFBISSksIChFKS0+ZGVzdF9pZHgpCisjZGVmaW5lIFBISV9BUkdfSU5ERVhfRlJPTV9VU0UoVVNFKSAgIHBoaV9hcmdfaW5kZXhfZnJvbV91c2UgKFVTRSkKKworCitleHRlcm4gdm9pZCBpbml0X3NzYV9vcGVyYW5kcyAodm9pZCk7CitleHRlcm4gdm9pZCBmaW5pX3NzYV9vcGVyYW5kcyAodm9pZCk7CitleHRlcm4gdm9pZCB1cGRhdGVfc3RtdF9vcGVyYW5kcyAoZ2ltcGxlKTsKK2V4dGVybiB2b2lkIGZyZWVfc3RtdF9vcGVyYW5kcyAoZ2ltcGxlKTsKK2V4dGVybiBib29sIHZlcmlmeV9pbW1fbGlua3MgKEZJTEUgKmYsIHRyZWUgdmFyKTsKKworZXh0ZXJuIHZvaWQgZHVtcF9pbW1lZGlhdGVfdXNlcyAoRklMRSAqZmlsZSk7CitleHRlcm4gdm9pZCBkdW1wX2ltbWVkaWF0ZV91c2VzX2ZvciAoRklMRSAqZmlsZSwgdHJlZSB2YXIpOworZXh0ZXJuIHZvaWQgZGVidWdfaW1tZWRpYXRlX3VzZXMgKHZvaWQpOworZXh0ZXJuIHZvaWQgZGVidWdfaW1tZWRpYXRlX3VzZXNfZm9yICh0cmVlIHZhcik7CitleHRlcm4gdm9pZCBkdW1wX2RlY2xfc2V0IChGSUxFICosIGJpdG1hcCk7CitleHRlcm4gdm9pZCBkZWJ1Z19kZWNsX3NldCAoYml0bWFwKTsKKworZXh0ZXJuIGJvb2wgc3NhX29wZXJhbmRzX2FjdGl2ZSAodm9pZCk7CisKK2V4dGVybiB2b2lkIHVubGlua19zdG10X3ZkZWYgKGdpbXBsZSk7CisKK2VudW0gc3NhX29wX2l0ZXJfdHlwZSB7CisgIHNzYV9vcF9pdGVyX25vbmUgPSAwLAorICBzc2Ffb3BfaXRlcl90cmVlLAorICBzc2Ffb3BfaXRlcl91c2UsCisgIHNzYV9vcF9pdGVyX2RlZgorfTsKKworLyogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBpbiB0aGUgb3BlcmFuZCBpdGVyYXRvciBsb29wcy4gIEl0IGNvbnRhaW5zIHRoZQorICAgaXRlbXMgcmVxdWlyZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIG9wZXJhbmQgaXMgcmV0cmlldmVkIG5leHQuICBEdXJpbmcKKyAgIG9wdGltaXphdGlvbiwgdGhpcyBzdHJ1Y3R1cmUgaXMgc2NhbGFyaXplZCwgYW5kIGFueSB1bnVzZWQgZmllbGRzIGFyZQorICAgb3B0aW1pemVkIGF3YXksIHJlc3VsdGluZyBpbiBsaXR0bGUgb3ZlcmhlYWQuICAqLworCit0eXBlZGVmIHN0cnVjdCBzc2Ffb3BlcmFuZF9pdGVyYXRvcl9kCit7CisgIGJvb2wgZG9uZTsKKyAgZW51bSBzc2Ffb3BfaXRlcl90eXBlIGl0ZXJfdHlwZTsKKyAgZGVmX29wdHlwZV9wIGRlZnM7CisgIHVzZV9vcHR5cGVfcCB1c2VzOworICBpbnQgcGhpX2k7CisgIGludCBudW1fcGhpOworICBnaW1wbGUgcGhpX3N0bXQ7Cit9IHNzYV9vcF9pdGVyOworCisvKiBUaGVzZSBmbGFncyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggb3BlcmFuZHMgYXJlIHJldHVybmVkIGR1cmluZworICAgZXhlY3V0aW9uIG9mIHRoZSBsb29wLiAgKi8KKyNkZWZpbmUgU1NBX09QX1VTRQkJMHgwMQkvKiBSZWFsIFVTRSBvcGVyYW5kcy4gICovCisjZGVmaW5lIFNTQV9PUF9ERUYJCTB4MDIJLyogUmVhbCBERUYgb3BlcmFuZHMuICAqLworI2RlZmluZSBTU0FfT1BfVlVTRQkJMHgwNAkvKiBWVVNFIG9wZXJhbmRzLiAgKi8KKyNkZWZpbmUgU1NBX09QX1ZERUYJCTB4MDgJLyogVkRFRiBvcGVyYW5kcy4gICovCisKKy8qIFRoZXNlIGFyZSBjb21tb25seSBncm91cGVkIG9wZXJhbmQgZmxhZ3MuICAqLworI2RlZmluZSBTU0FfT1BfVklSVFVBTF9VU0VTCShTU0FfT1BfVlVTRSkKKyNkZWZpbmUgU1NBX09QX1ZJUlRVQUxfREVGUwkoU1NBX09QX1ZERUYpCisjZGVmaW5lIFNTQV9PUF9BTExfVklSVFVBTFMgICAgIChTU0FfT1BfVklSVFVBTF9VU0VTIHwgU1NBX09QX1ZJUlRVQUxfREVGUykKKyNkZWZpbmUgU1NBX09QX0FMTF9VU0VTCQkoU1NBX09QX1ZJUlRVQUxfVVNFUyB8IFNTQV9PUF9VU0UpCisjZGVmaW5lIFNTQV9PUF9BTExfREVGUwkJKFNTQV9PUF9WSVJUVUFMX0RFRlMgfCBTU0FfT1BfREVGKQorI2RlZmluZSBTU0FfT1BfQUxMX09QRVJBTkRTCShTU0FfT1BfQUxMX1VTRVMgfCBTU0FfT1BfQUxMX0RFRlMpCisKKy8qIFRoaXMgbWFjcm8gZXhlY3V0ZXMgYSBsb29wIG92ZXIgdGhlIG9wZXJhbmRzIG9mIFNUTVQgc3BlY2lmaWVkIGluIEZMQUcsCisgICByZXR1cm5pbmcgZWFjaCBvcGVyYW5kIGFzIGEgJ3RyZWUnIGluIHRoZSB2YXJpYWJsZSBUUkVFVkFSLiAgSVRFUiBpcyBhbgorICAgc3NhX29wX2l0ZXIgc3RydWN0dXJlIHVzZWQgdG8gY29udHJvbCB0aGUgbG9vcC4gICovCisjZGVmaW5lIEZPUl9FQUNIX1NTQV9UUkVFX09QRVJBTkQoVFJFRVZBUiwgU1RNVCwgSVRFUiwgRkxBR1MpCVwKKyAgZm9yIChUUkVFVkFSID0gb3BfaXRlcl9pbml0X3RyZWUgKCYoSVRFUiksIFNUTVQsIEZMQUdTKTsJXAorICAgICAgICFvcF9pdGVyX2RvbmUgKCYoSVRFUikpOwkJCQkJXAorICAgICAgIFRSRUVWQVIgPSBvcF9pdGVyX25leHRfdHJlZSAoJihJVEVSKSkpCisKKy8qIFRoaXMgbWFjcm8gZXhlY3V0ZXMgYSBsb29wIG92ZXIgdGhlIG9wZXJhbmRzIG9mIFNUTVQgc3BlY2lmaWVkIGluIEZMQUcsCisgICByZXR1cm5pbmcgZWFjaCBvcGVyYW5kIGFzIGEgJ3VzZV9vcGVyYW5kX3AnIGluIHRoZSB2YXJpYWJsZSBVU0VWQVIuCisgICBJVEVSIGlzIGFuIHNzYV9vcF9pdGVyIHN0cnVjdHVyZSB1c2VkIHRvIGNvbnRyb2wgdGhlIGxvb3AuICAqLworI2RlZmluZSBGT1JfRUFDSF9TU0FfVVNFX09QRVJBTkQoVVNFVkFSLCBTVE1ULCBJVEVSLCBGTEFHUykJXAorICBmb3IgKFVTRVZBUiA9IG9wX2l0ZXJfaW5pdF91c2UgKCYoSVRFUiksIFNUTVQsIEZMQUdTKTsJXAorICAgICAgICFvcF9pdGVyX2RvbmUgKCYoSVRFUikpOwkJCQkJXAorICAgICAgIFVTRVZBUiA9IG9wX2l0ZXJfbmV4dF91c2UgKCYoSVRFUikpKQorCisvKiBUaGlzIG1hY3JvIGV4ZWN1dGVzIGEgbG9vcCBvdmVyIHRoZSBvcGVyYW5kcyBvZiBTVE1UIHNwZWNpZmllZCBpbiBGTEFHLAorICAgcmV0dXJuaW5nIGVhY2ggb3BlcmFuZCBhcyBhICdkZWZfb3BlcmFuZF9wJyBpbiB0aGUgdmFyaWFibGUgREVGVkFSLgorICAgSVRFUiBpcyBhbiBzc2Ffb3BfaXRlciBzdHJ1Y3R1cmUgdXNlZCB0byBjb250cm9sIHRoZSBsb29wLiAgKi8KKyNkZWZpbmUgRk9SX0VBQ0hfU1NBX0RFRl9PUEVSQU5EKERFRlZBUiwgU1RNVCwgSVRFUiwgRkxBR1MpCVwKKyAgZm9yIChERUZWQVIgPSBvcF9pdGVyX2luaXRfZGVmICgmKElURVIpLCBTVE1ULCBGTEFHUyk7CVwKKyAgICAgICAhb3BfaXRlcl9kb25lICgmKElURVIpKTsJCQkJCVwKKyAgICAgICBERUZWQVIgPSBvcF9pdGVyX25leHRfZGVmICgmKElURVIpKSkKKworLyogVGhpcyBtYWNybyB3aWxsIGV4ZWN1dGUgYSBsb29wIG92ZXIgYWxsIHRoZSBhcmd1bWVudHMgb2YgYSBQSEkgd2hpY2gKKyAgIG1hdGNoIEZMQUdTLiAgIEEgdXNlX29wZXJhbmRfcCBpcyBhbHdheXMgcmV0dXJuZWQgdmlhIFVTRVZBUi4gIEZMQUdTCisgICBjYW4gYmUgZWl0aGVyIFNTQV9PUF9VU0Ugb3IgU1NBX09QX1ZJUlRVQUxfVVNFUyBvciBTU0FfT1BfQUxMX1VTRVMuICAqLworI2RlZmluZSBGT1JfRUFDSF9QSElfQVJHKFVTRVZBUiwgU1RNVCwgSVRFUiwgRkxBR1MpCQlcCisgIGZvciAoKFVTRVZBUikgPSBvcF9pdGVyX2luaXRfcGhpdXNlICgmKElURVIpLCBTVE1ULCBGTEFHUyk7CVwKKyAgICAgICAhb3BfaXRlcl9kb25lICgmKElURVIpKTsJCQkJCVwKKyAgICAgICAoVVNFVkFSKSA9IG9wX2l0ZXJfbmV4dF91c2UgKCYoSVRFUikpKQorCisKKy8qIFRoaXMgbWFjcm8gd2lsbCBleGVjdXRlIGEgbG9vcCBvdmVyIGEgc3RtdCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzCisgICBhIHJlYWwgc3RtdCBvciBhIFBISSBub2RlLCBsb29raW5nIGF0IHRoZSBVU0Ugbm9kZXMgbWF0Y2hpbmcgRkxBR1MuICAqLworI2RlZmluZSBGT1JfRUFDSF9QSElfT1JfU1RNVF9VU0UoVVNFVkFSLCBTVE1ULCBJVEVSLCBGTEFHUykJXAorICBmb3IgKChVU0VWQVIpID0gKGdpbXBsZV9jb2RlIChTVE1UKSA9PSBHSU1QTEVfUEhJIAkJXAorCQkgICA/IG9wX2l0ZXJfaW5pdF9waGl1c2UgKCYoSVRFUiksIFNUTVQsIEZMQUdTKQlcCisJCSAgIDogb3BfaXRlcl9pbml0X3VzZSAoJihJVEVSKSwgU1RNVCwgRkxBR1MpKTsJXAorICAgICAgICFvcF9pdGVyX2RvbmUgKCYoSVRFUikpOwkJCQkJXAorICAgICAgIChVU0VWQVIpID0gb3BfaXRlcl9uZXh0X3VzZSAoJihJVEVSKSkpCisKKy8qIFRoaXMgbWFjcm8gd2lsbCBleGVjdXRlIGEgbG9vcCBvdmVyIGEgc3RtdCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzCisgICBhIHJlYWwgc3RtdCBvciBhIFBISSBub2RlLCBsb29raW5nIGF0IHRoZSBERUYgbm9kZXMgbWF0Y2hpbmcgRkxBR1MuICAqLworI2RlZmluZSBGT1JfRUFDSF9QSElfT1JfU1RNVF9ERUYoREVGVkFSLCBTVE1ULCBJVEVSLCBGTEFHUykJXAorICBmb3IgKChERUZWQVIpID0gKGdpbXBsZV9jb2RlIChTVE1UKSA9PSBHSU1QTEVfUEhJIAkJXAorCQkgICA/IG9wX2l0ZXJfaW5pdF9waGlkZWYgKCYoSVRFUiksIFNUTVQsIEZMQUdTKQlcCisJCSAgIDogb3BfaXRlcl9pbml0X2RlZiAoJihJVEVSKSwgU1RNVCwgRkxBR1MpKTsJXAorICAgICAgICFvcF9pdGVyX2RvbmUgKCYoSVRFUikpOwkJCQkJXAorICAgICAgIChERUZWQVIpID0gb3BfaXRlcl9uZXh0X2RlZiAoJihJVEVSKSkpCisKKy8qIFRoaXMgbWFjcm8gcmV0dXJucyBhbiBvcGVyYW5kIGluIFNUTVQgYXMgYSB0cmVlIGlmIGl0IGlzIHRoZSBPTkxZCisgICBvcGVyYW5kIG1hdGNoaW5nIEZMQUdTLiAgSWYgdGhlcmUgYXJlIDAgb3IgbW9yZSB0aGFuIDEgb3BlcmFuZCBtYXRjaGluZworICAgRkxBR1MsIHRoZW4gTlVMTF9UUkVFIGlzIHJldHVybmVkLiAgKi8KKyNkZWZpbmUgU0lOR0xFX1NTQV9UUkVFX09QRVJBTkQoU1RNVCwgRkxBR1MpCQkJXAorICBzaW5nbGVfc3NhX3RyZWVfb3BlcmFuZCAoU1RNVCwgRkxBR1MpCisKKy8qIFRoaXMgbWFjcm8gcmV0dXJucyBhbiBvcGVyYW5kIGluIFNUTVQgYXMgYSB1c2Vfb3BlcmFuZF9wIGlmIGl0IGlzIHRoZSBPTkxZCisgICBvcGVyYW5kIG1hdGNoaW5nIEZMQUdTLiAgSWYgdGhlcmUgYXJlIDAgb3IgbW9yZSB0aGFuIDEgb3BlcmFuZCBtYXRjaGluZworICAgRkxBR1MsIHRoZW4gTlVMTF9VU0VfT1BFUkFORF9QIGlzIHJldHVybmVkLiAgKi8KKyNkZWZpbmUgU0lOR0xFX1NTQV9VU0VfT1BFUkFORChTVE1ULCBGTEFHUykJCQlcCisgIHNpbmdsZV9zc2FfdXNlX29wZXJhbmQgKFNUTVQsIEZMQUdTKQorCisvKiBUaGlzIG1hY3JvIHJldHVybnMgYW4gb3BlcmFuZCBpbiBTVE1UIGFzIGEgZGVmX29wZXJhbmRfcCBpZiBpdCBpcyB0aGUgT05MWQorICAgb3BlcmFuZCBtYXRjaGluZyBGTEFHUy4gIElmIHRoZXJlIGFyZSAwIG9yIG1vcmUgdGhhbiAxIG9wZXJhbmQgbWF0Y2hpbmcKKyAgIEZMQUdTLCB0aGVuIE5VTExfREVGX09QRVJBTkRfUCBpcyByZXR1cm5lZC4gICovCisjZGVmaW5lIFNJTkdMRV9TU0FfREVGX09QRVJBTkQoU1RNVCwgRkxBR1MpCQkJXAorICBzaW5nbGVfc3NhX2RlZl9vcGVyYW5kIChTVE1ULCBGTEFHUykKKworLyogVGhpcyBtYWNybyByZXR1cm5zIFRSVUUgaWYgdGhlcmUgYXJlIG5vIG9wZXJhbmRzIG1hdGNoaW5nIEZMQUdTIGluIFNUTVQuICAqLworI2RlZmluZSBaRVJPX1NTQV9PUEVSQU5EUyhTVE1ULCBGTEFHUykgCXplcm9fc3NhX29wZXJhbmRzIChTVE1ULCBGTEFHUykKKworLyogVGhpcyBtYWNybyBjb3VudHMgdGhlIG51bWJlciBvZiBvcGVyYW5kcyBpbiBTVE1UIG1hdGNoaW5nIEZMQUdTLiAgKi8KKyNkZWZpbmUgTlVNX1NTQV9PUEVSQU5EUyhTVE1ULCBGTEFHUykJbnVtX3NzYV9vcGVyYW5kcyAoU1RNVCwgRkxBR1MpCisKKyNlbmRpZiAgLyogR0NDX1RSRUVfU1NBX09QRVJBTkRTX0ggICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS1zc2Etc2Njdm4uaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS90cmVlLXNzYS1zY2N2bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNTMxODEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS1zc2Etc2Njdm4uaApAQCAtMCwwICsxLDIwOSBAQAorLyogVHJlZSBTQ0MgdmFsdWUgbnVtYmVyaW5nCisgICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBEYW5pZWwgQmVybGluIDxkYmVybGluQGRiZXJsaW4ub3JnPgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKKyAgIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBUUkVFX1NTQV9TQ0NWTl9ICisjZGVmaW5lIFRSRUVfU1NBX1NDQ1ZOX0gKKworLyogSW4gdHJlZS1zc2Etc2Njdm4uYyAgKi8KK2Jvb2wgZXhwcmVzc2lvbnNfZXF1YWxfcCAodHJlZSwgdHJlZSk7CisKKworLyogVE9QIG9mIHRoZSBWTiBsYXR0aWNlLiAgKi8KK2V4dGVybiB0cmVlIFZOX1RPUDsKKworLyogTi1hcnkgb3BlcmF0aW9ucyBpbiB0aGUgaGFzaHRhYmxlIGNvbnNpc3Qgb2YgbGVuZ3RoIG9wZXJhbmRzLCBhbgorICAgb3Bjb2RlLCBhbmQgYSB0eXBlLiAgUmVzdWx0IGlzIHRoZSB2YWx1ZSBudW1iZXIgb2YgdGhlIG9wZXJhdGlvbiwKKyAgIGFuZCBoYXNoY29kZSBpcyBzdG9yZWQgdG8gYXZvaWQgaGF2aW5nIHRvIGNhbGN1bGF0ZSBpdAorICAgcmVwZWF0ZWRseS4gICovCisKK3R5cGVkZWYgc3RydWN0IHZuX25hcnlfb3BfcworeworICAvKiBVbmlxdWUgaWRlbnRpZnkgdGhhdCBhbGwgZXhwcmVzc2lvbnMgd2l0aCB0aGUgc2FtZSB2YWx1ZSBoYXZlLiAqLworICB1bnNpZ25lZCBpbnQgdmFsdWVfaWQ7CisgIEVOVU1fQklURklFTEQodHJlZV9jb2RlKSBvcGNvZGUgOiAxNjsKKyAgdW5zaWduZWQgbGVuZ3RoIDogMTY7CisgIGhhc2h2YWxfdCBoYXNoY29kZTsKKyAgdHJlZSByZXN1bHQ7CisgIHRyZWUgdHlwZTsKKyAgdHJlZSBvcFs0XTsKK30gKnZuX25hcnlfb3BfdDsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IHZuX25hcnlfb3BfcyAqY29uc3Rfdm5fbmFyeV9vcF90OworCisvKiBQaGkgbm9kZXMgaW4gdGhlIGhhc2h0YWJsZSBjb25zaXN0IG9mIHRoZWlyIG5vbi1WTl9UT1AgcGhpCisgICBhcmd1bWVudHMsIGFuZCB0aGUgYmFzaWMgYmxvY2sgdGhlIHBoaSBpcyBpbi4gUmVzdWx0IGlzIHRoZSB2YWx1ZQorICAgbnVtYmVyIG9mIHRoZSBvcGVyYXRpb24sIGFuZCBoYXNoY29kZSBpcyBzdG9yZWQgdG8gYXZvaWQgaGF2aW5nIHRvCisgICBjYWxjdWxhdGUgaXQgcmVwZWF0ZWRseS4gIFBoaSBub2RlcyBub3QgaW4gdGhlIHNhbWUgYmxvY2sgYXJlIG5ldmVyCisgICBjb25zaWRlcmVkIGVxdWl2YWxlbnQuICAqLworCit0eXBlZGVmIHN0cnVjdCB2bl9waGlfcworeworICAvKiBVbmlxdWUgaWRlbnRpZmllciB0aGF0IGFsbCBleHByZXNzaW9ucyB3aXRoIHRoZSBzYW1lIHZhbHVlIGhhdmUuICovCisgIHVuc2lnbmVkIGludCB2YWx1ZV9pZDsKKyAgaGFzaHZhbF90IGhhc2hjb2RlOworICBWRUMgKHRyZWUsIGhlYXApICpwaGlhcmdzOworICBiYXNpY19ibG9jayBibG9jazsKKyAgdHJlZSByZXN1bHQ7Cit9ICp2bl9waGlfdDsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IHZuX3BoaV9zICpjb25zdF92bl9waGlfdDsKKworLyogUmVmZXJlbmNlIG9wZXJhbmRzIG9ubHkgZXhpc3QgaW4gcmVmZXJlbmNlIG9wZXJhdGlvbnMgc3RydWN0dXJlcy4KKyAgIFRoZXkgY29uc2lzdCBvZiBhbiBvcGNvZGUsIHR5cGUsIGFuZCBzb21lIG51bWJlciBvZiBvcGVyYW5kcy4gIEZvcgorICAgYSBnaXZlbiBvcGNvZGUsIHNvbWUsIGFsbCwgb3Igbm9uZSBvZiB0aGUgb3BlcmFuZHMgbWF5IGJlIHVzZWQuCisgICBUaGUgb3BlcmFuZHMgYXJlIHRoZXJlIHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiB0aGF0IG1ha2VzIHVwIHRoZQorICAgcG9ydGlvbiBvZiB0aGUgYWRkcmVzc2luZyBjYWxjdWxhdGlvbiB0aGF0IG9wY29kZSBwZXJmb3Jtcy4gICovCisKK3R5cGVkZWYgc3RydWN0IHZuX3JlZmVyZW5jZV9vcF9zdHJ1Y3QKK3sKKyAgZW51bSB0cmVlX2NvZGUgb3Bjb2RlOworICB0cmVlIHR5cGU7CisgIHRyZWUgb3AwOworICB0cmVlIG9wMTsKKyAgdHJlZSBvcDI7Cit9IHZuX3JlZmVyZW5jZV9vcF9zOwordHlwZWRlZiB2bl9yZWZlcmVuY2Vfb3BfcyAqdm5fcmVmZXJlbmNlX29wX3Q7Cit0eXBlZGVmIGNvbnN0IHZuX3JlZmVyZW5jZV9vcF9zICpjb25zdF92bl9yZWZlcmVuY2Vfb3BfdDsKKworREVGX1ZFQ19PKHZuX3JlZmVyZW5jZV9vcF9zKTsKK0RFRl9WRUNfQUxMT0NfTyh2bl9yZWZlcmVuY2Vfb3BfcywgaGVhcCk7CisKKy8qIEEgcmVmZXJlbmNlIG9wZXJhdGlvbiBpbiB0aGUgaGFzaHRhYmxlIGlzIHJlcHJlc2VudGF0aW9uIGFzCisgICB0aGUgdnVzZSwgcmVwcmVzZW50aW5nIHRoZSBtZW1vcnkgc3RhdGUgYXQgdGhlIHRpbWUgb2YKKyAgIHRoZSBvcGVyYXRpb24sIGFuZCBhIGNvbGxlY3Rpb24gb2Ygb3BlcmFuZHMgdGhhdCBtYWtlIHVwIHRoZQorICAgYWRkcmVzc2luZyBjYWxjdWxhdGlvbi4gIElmIHR3byB2bl9yZWZlcmVuY2VfdCdzIGhhdmUgdGhlIHNhbWUgc2V0CisgICBvZiBvcGVyYW5kcywgdGhleSBhY2Nlc3MgdGhlIHNhbWUgbWVtb3J5IGxvY2F0aW9uLiBXZSBhbHNvIHN0b3JlCisgICB0aGUgcmVzdWx0aW5nIHZhbHVlIG51bWJlciwgYW5kIHRoZSBoYXNoY29kZS4gICovCisKK3R5cGVkZWYgc3RydWN0IHZuX3JlZmVyZW5jZV9zCit7CisgIC8qIFVuaXF1ZSBpZGVudGlmaWVyIHRoYXQgYWxsIGV4cHJlc3Npb25zIHdpdGggdGhlIHNhbWUgdmFsdWUgaGF2ZS4gKi8KKyAgdW5zaWduZWQgaW50IHZhbHVlX2lkOworICBoYXNodmFsX3QgaGFzaGNvZGU7CisgIHRyZWUgdnVzZTsKKyAgYWxpYXNfc2V0X3R5cGUgc2V0OworICB0cmVlIHR5cGU7CisgIFZFQyAodm5fcmVmZXJlbmNlX29wX3MsIGhlYXApICpvcGVyYW5kczsKKyAgdHJlZSByZXN1bHQ7Cit9ICp2bl9yZWZlcmVuY2VfdDsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IHZuX3JlZmVyZW5jZV9zICpjb25zdF92bl9yZWZlcmVuY2VfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgdm5fY29uc3RhbnRfcworeworICB1bnNpZ25lZCBpbnQgdmFsdWVfaWQ7CisgIGhhc2h2YWxfdCBoYXNoY29kZTsKKyAgdHJlZSBjb25zdGFudDsKK30gKnZuX2NvbnN0YW50X3Q7CisKKy8qIEhhc2ggdGhlIGNvbnN0YW50IENPTlNUQU5UIHdpdGggZGlzdGluZ3Vpc2hpbmcgdHlwZSBpbmNvbXBhdGlibGUKKyAgIGNvbnN0YW50cyBpbiB0aGUgdHlwZXNfY29tcGF0aWJsZV9wIHNlbnNlLiAgKi8KKworc3RhdGljIGlubGluZSBoYXNodmFsX3QKK3ZuX2hhc2hfY29uc3RhbnRfd2l0aF90eXBlICh0cmVlIGNvbnN0YW50KQoreworICB0cmVlIHR5cGUgPSBUUkVFX1RZUEUgKGNvbnN0YW50KTsKKyAgcmV0dXJuIChpdGVyYXRpdmVfaGFzaF9leHByIChjb25zdGFudCwgMCkKKwkgICsgSU5URUdSQUxfVFlQRV9QICh0eXBlKQorCSAgKyAoSU5URUdSQUxfVFlQRV9QICh0eXBlKQorCSAgICAgPyBUWVBFX1BSRUNJU0lPTiAodHlwZSkgKyBUWVBFX1VOU0lHTkVEICh0eXBlKSA6IDApKTsKK30KKworLyogQ29tcGFyZSB0aGUgY29uc3RhbnRzIEMxIGFuZCBDMiB3aXRoIGRpc3Rpbmd1aXNoaW5nIHR5cGUgaW5jb21wYXRpYmxlCisgICBjb25zdGFudHMgaW4gdGhlIHR5cGVzX2NvbXBhdGlibGVfcCBzZW5zZS4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAordm5fY29uc3RhbnRfZXFfd2l0aF90eXBlICh0cmVlIGMxLCB0cmVlIGMyKQoreworICByZXR1cm4gKGV4cHJlc3Npb25zX2VxdWFsX3AgKGMxLCBjMikKKwkgICYmIHR5cGVzX2NvbXBhdGlibGVfcCAoVFJFRV9UWVBFIChjMSksIFRSRUVfVFlQRSAoYzIpKSk7Cit9CisKK3R5cGVkZWYgc3RydWN0IHZuX3NzYV9hdXgKK3sKKyAgLyogVmFsdWUgbnVtYmVyLiBUaGlzIG1heSBiZSBhbiBTU0EgbmFtZSBvciBhIGNvbnN0YW50LiAgKi8KKyAgdHJlZSB2YWxudW07CisgIC8qIFJlcHJlc2VudGF0aXZlIGV4cHJlc3Npb24sIGlmIG5vdCBhIGRpcmVjdCBjb25zdGFudC4gKi8KKyAgdHJlZSBleHByOworCisgIC8qIFVuaXF1ZSBpZGVudGlmaWVyIHRoYXQgYWxsIGV4cHJlc3Npb25zIHdpdGggdGhlIHNhbWUgdmFsdWUgaGF2ZS4gKi8KKyAgdW5zaWduZWQgaW50IHZhbHVlX2lkOworCisgIC8qIFNDQyBpbmZvcm1hdGlvbi4gICovCisgIHVuc2lnbmVkIGludCBkZnNudW07CisgIHVuc2lnbmVkIGludCBsb3c7CisgIHVuc2lnbmVkIHZpc2l0ZWQgOiAxOworICB1bnNpZ25lZCBvbl9zY2NzdGFjayA6IDE7CisKKyAgLyogV2hldGhlciB0aGUgcmVwcmVzZW50YXRpdmUgZXhwcmVzc2lvbiBjb250YWlucyBjb25zdGFudHMuICAqLworICB1bnNpZ25lZCBoYXNfY29uc3RhbnRzIDogMTsKKyAgLyogV2hldGhlciB0aGUgU1NBX05BTUUgaGFzIGJlZW4gdmFsdWUgbnVtYmVyZWQgYWxyZWFkeS4gIFRoaXMgaXMKKyAgICAgb25seSBzYXlpbmcgd2hldGhlciB2aXNpdF91c2UgaGFzIGJlZW4gY2FsbGVkIG9uIGl0IGF0IGxlYXN0CisgICAgIG9uY2UuICBJdCBjYW5ub3QgYmUgdXNlZCB0byBhdm9pZCB2aXNpdGF0aW9uIGZvciBTU0FfTkFNRSdzCisgICAgIGludm9sdmVkIGluIG5vbi1zaW5nbGV0b24gU0NDJ3MuICAqLworICB1bnNpZ25lZCB1c2VfcHJvY2Vzc2VkIDogMTsKKworICAvKiBXaGV0aGVyIHRoZSBTU0FfTkFNRSBoYXMgbm8gZGVmaW5pbmcgc3RhdGVtZW50IGFuZCB0aHVzIGFuCisgICAgIGluc2VydGlvbiBvZiBzdWNoIHdpdGggRVhQUiBhcyBkZWZpbml0aW9uIGlzIHJlcXVpcmVkIGJlZm9yZQorICAgICBhIHVzZSBjYW4gYmUgY3JlYXRlZCBvZiBpdC4gICovCisgIHVuc2lnbmVkIG5lZWRzX2luc2VydGlvbiA6IDE7Cit9ICp2bl9zc2FfYXV4X3Q7CisKK3R5cGVkZWYgZW51bSB7IFZOX05PV0FMSywgVk5fV0FMSywgVk5fV0FMS1JFV1JJVEUgfSB2bl9sb29rdXBfa2luZDsKKworLyogUmV0dXJuIHRoZSB2YWx1ZSBudW1iZXJpbmcgaW5mbyBmb3IgYW4gU1NBX05BTUUuICAqLworZXh0ZXJuIHZuX3NzYV9hdXhfdCBWTl9JTkZPICh0cmVlKTsKK2V4dGVybiB2bl9zc2FfYXV4X3QgVk5fSU5GT19HRVQgKHRyZWUpOwordHJlZSB2bl9nZXRfZXhwcl9mb3IgKHRyZWUpOworYm9vbCBydW5fc2NjX3ZuIChib29sLCB2bl9sb29rdXBfa2luZCk7Cit2b2lkIGZyZWVfc2NjX3ZuICh2b2lkKTsKK3RyZWUgdm5fbmFyeV9vcF9sb29rdXAgKHRyZWUsIHZuX25hcnlfb3BfdCAqKTsKK3RyZWUgdm5fbmFyeV9vcF9sb29rdXBfc3RtdCAoZ2ltcGxlLCB2bl9uYXJ5X29wX3QgKik7Cit0cmVlIHZuX25hcnlfb3BfbG9va3VwX3BpZWNlcyAodW5zaWduZWQgaW50LCBlbnVtIHRyZWVfY29kZSwKKwkJCSAgICAgICB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLAorCQkJICAgICAgIHZuX25hcnlfb3BfdCAqKTsKK3ZuX25hcnlfb3BfdCB2bl9uYXJ5X29wX2luc2VydCAodHJlZSwgdHJlZSk7Cit2bl9uYXJ5X29wX3Qgdm5fbmFyeV9vcF9pbnNlcnRfc3RtdCAoZ2ltcGxlLCB0cmVlKTsKK3ZuX25hcnlfb3BfdCB2bl9uYXJ5X29wX2luc2VydF9waWVjZXMgKHVuc2lnbmVkIGludCwgZW51bSB0cmVlX2NvZGUsCisJCQkJICAgICAgIHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUsCisJCQkJICAgICAgIHRyZWUsIHRyZWUsIHVuc2lnbmVkIGludCk7Cit2b2lkIHZuX3JlZmVyZW5jZV9mb2xkX2luZGlyZWN0IChWRUMgKHZuX3JlZmVyZW5jZV9vcF9zLCBoZWFwKSAqKiwKKwkJCQkgdW5zaWduZWQgaW50ICopOwordm9pZCBjb3B5X3JlZmVyZW5jZV9vcHNfZnJvbV9yZWYgKHRyZWUsIFZFQyh2bl9yZWZlcmVuY2Vfb3BfcywgaGVhcCkgKiopOwordm9pZCBjb3B5X3JlZmVyZW5jZV9vcHNfZnJvbV9jYWxsIChnaW1wbGUsIFZFQyh2bl9yZWZlcmVuY2Vfb3BfcywgaGVhcCkgKiopOworYm9vbCBhb19yZWZfaW5pdF9mcm9tX3ZuX3JlZmVyZW5jZSAoYW9fcmVmICosIGFsaWFzX3NldF90eXBlLCB0cmVlLAorCQkJCSAgICBWRUMgKHZuX3JlZmVyZW5jZV9vcF9zLCBoZWFwKSAqKTsKK3RyZWUgdm5fcmVmZXJlbmNlX2xvb2t1cF9waWVjZXMgKHRyZWUsIGFsaWFzX3NldF90eXBlLCB0cmVlLAorCQkJCSBWRUMgKHZuX3JlZmVyZW5jZV9vcF9zLCBoZWFwKSAqLAorCQkJCSB2bl9yZWZlcmVuY2VfdCAqLCB2bl9sb29rdXBfa2luZCk7Cit0cmVlIHZuX3JlZmVyZW5jZV9sb29rdXAgKHRyZWUsIHRyZWUsIHZuX2xvb2t1cF9raW5kLCB2bl9yZWZlcmVuY2VfdCAqKTsKK3ZuX3JlZmVyZW5jZV90IHZuX3JlZmVyZW5jZV9pbnNlcnQgKHRyZWUsIHRyZWUsIHRyZWUpOwordm5fcmVmZXJlbmNlX3Qgdm5fcmVmZXJlbmNlX2luc2VydF9waWVjZXMgKHRyZWUsIGFsaWFzX3NldF90eXBlLCB0cmVlLAorCQkJCQkgICBWRUMgKHZuX3JlZmVyZW5jZV9vcF9zLCBoZWFwKSAqLAorCQkJCQkgICB0cmVlLCB1bnNpZ25lZCBpbnQpOworCitoYXNodmFsX3Qgdm5fbmFyeV9vcF9jb21wdXRlX2hhc2ggKGNvbnN0IHZuX25hcnlfb3BfdCk7CitpbnQgdm5fbmFyeV9vcF9lcSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOworYm9vbCB2bl9uYXJ5X21heV90cmFwICh2bl9uYXJ5X29wX3QpOworaGFzaHZhbF90IHZuX3JlZmVyZW5jZV9jb21wdXRlX2hhc2ggKGNvbnN0IHZuX3JlZmVyZW5jZV90KTsKK2ludCB2bl9yZWZlcmVuY2VfZXEgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKK3Vuc2lnbmVkIGludCBnZXRfbWF4X3ZhbHVlX2lkICh2b2lkKTsKK3Vuc2lnbmVkIGludCBnZXRfbmV4dF92YWx1ZV9pZCAodm9pZCk7Cit1bnNpZ25lZCBpbnQgZ2V0X2NvbnN0YW50X3ZhbHVlX2lkICh0cmVlKTsKK3Vuc2lnbmVkIGludCBnZXRfb3JfYWxsb2NfY29uc3RhbnRfdmFsdWVfaWQgKHRyZWUpOworYm9vbCB2YWx1ZV9pZF9jb25zdGFudF9wICh1bnNpZ25lZCBpbnQpOworI2VuZGlmIC8qIFRSRUVfU1NBX1NDQ1ZOX0ggICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS5kZWYgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMzYzQ4MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS90cmVlLmRlZgpAQCAtMCwwICsxLDExNTIgQEAKKy8qIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgYW5kIGRvY3VtZW50YXRpb24gZm9yIHRoZQorICAgdHJlZSBjb2RlcyB1c2VkIGluIEdDQy4KKyAgIENvcHlyaWdodCAoQykgMTk4NywgMTk4OCwgMTk5MywgMTk5NSwgMTk5NywgMTk5OCwgMjAwMCwgMjAwMSwgMjAwNCwgMjAwNSwKKyAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisKKy8qIEZvciB0Y2NfcmVmZXJlbmNlcywgdGNjX2V4cHJlc3Npb24sIHRjY19jb21wYXJpc29uLCB0Y2NfdW5hcnksCisgICB0Y2NfYmluYXJ5LCBhbmQgdGNjX3N0YXRlbWVudCBub2Rlcywgd2hpY2ggdXNlIHN0cnVjdCB0cmVlX2V4cCwgdGhlCisgICA0dGggZWxlbWVudCBpcyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50IHNsb3RzIHRvIGFsbG9jYXRlLiAgVGhpcworICAgZGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiB0aGUgdHJlZSBub2RlIG9iamVjdC4gIE90aGVyIG5vZGVzIHVzZQorICAgZGlmZmVyZW50IHN0cnVjdHVyZXMsIGFuZCB0aGUgc2l6ZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSB0cmVlX3VuaW9uCisgICBtZW1iZXIgc3RydWN0dXJlOyB0aGUgNHRoIGVsZW1lbnQgc2hvdWxkIGJlIHplcm8uICBMYW5ndWFnZXMgdGhhdAorICAgZGVmaW5lIGxhbmd1YWdlLXNwZWNpZmljIHRjY19leGNlcHRpb25hbCBvciB0Y2NfY29uc3RhbnQgY29kZXMgbXVzdAorICAgZGVmaW5lIHRoZSB0cmVlX3NpemUgbGFuZ2hvb2sgdG8gc2F5IGhvdyBiaWcgdGhleSBhcmUuCisKKyAgIFRoZXNlIHRyZWUgY29kZXMgaGF2ZSBiZWVuIHNvcnRlZCBzbyB0aGF0IHRoZSBtYWNyb3MgaW4gdHJlZS5oIHRoYXQKKyAgIGNoZWNrIGZvciB2YXJpb3VzIHRyZWUgY29kZXMgYXJlIG9wdGltaXplZCBpbnRvIHJhbmdlIGNoZWNrcy4gIFRoaXMKKyAgIGdpdmVzIGEgbWVhc3VyYWJsZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4gIFdoZW4gYWRkaW5nIGEgbmV3CisgICBjb2RlLCBjb25zaWRlciBpdHMgcGxhY2VtZW50IGluIHJlbGF0aW9uIHRvIHRoZSBvdGhlciBjb2Rlcy4gICovCisKKy8qIEFueSBlcnJvbmVvdXMgY29uc3RydWN0IGlzIHBhcnNlZCBpbnRvIGEgbm9kZSBvZiB0aGlzIHR5cGUuCisgICBUaGlzIHR5cGUgb2Ygbm9kZSBpcyBhY2NlcHRlZCB3aXRob3V0IGNvbXBsYWludCBpbiBhbGwgY29udGV4dHMKKyAgIGJ5IGxhdGVyIHBhcnNpbmcgYWN0aXZpdGllcywgdG8gYXZvaWQgbXVsdGlwbGUgZXJyb3IgbWVzc2FnZXMKKyAgIGZvciBvbmUgZXJyb3IuCisgICBObyBmaWVsZHMgaW4gdGhlc2Ugbm9kZXMgYXJlIHVzZWQgZXhjZXB0IHRoZSBUUkVFX0NPREUuICAqLworREVGVFJFRUNPREUgKEVSUk9SX01BUkssICJlcnJvcl9tYXJrIiwgdGNjX2V4Y2VwdGlvbmFsLCAwKQorCisvKiBVc2VkIHRvIHJlcHJlc2VudCBhIG5hbWUgKHN1Y2ggYXMsIGluIHRoZSBERUNMX05BTUUgb2YgYSBkZWNsIG5vZGUpLgorICAgSW50ZXJuYWxseSBpdCBsb29rcyBsaWtlIGEgU1RSSU5HX0NTVCBub2RlLgorICAgVGhlcmUgaXMgb25seSBvbmUgSURFTlRJRklFUl9OT0RFIGV2ZXIgbWFkZSBmb3IgYW55IHBhcnRpY3VsYXIgbmFtZS4KKyAgIFVzZSBgZ2V0X2lkZW50aWZpZXInIHRvIGdldCBpdCAob3IgY3JlYXRlIGl0LCB0aGUgZmlyc3QgdGltZSkuICAqLworREVGVFJFRUNPREUgKElERU5USUZJRVJfTk9ERSwgImlkZW50aWZpZXJfbm9kZSIsIHRjY19leGNlcHRpb25hbCwgMCkKKworLyogSGFzIHRoZSBUUkVFX1ZBTFVFIGFuZCBUUkVFX1BVUlBPU0UgZmllbGRzLiAgKi8KKy8qIFRoZXNlIG5vZGVzIGFyZSBtYWRlIGludG8gbGlzdHMgYnkgY2hhaW5pbmcgdGhyb3VnaCB0aGUKKyAgIFRSRUVfQ0hBSU4gZmllbGQuICBUaGUgZWxlbWVudHMgb2YgdGhlIGxpc3QgbGl2ZSBpbiB0aGUKKyAgIFRSRUVfVkFMVUUgZmllbGRzLCB3aGlsZSBUUkVFX1BVUlBPU0UgZmllbGRzIGFyZSBvY2Nhc2lvbmFsbHkKKyAgIHVzZWQgYXMgd2VsbCB0byBnZXQgdGhlIGVmZmVjdCBvZiBMaXNwIGFzc29jaWF0aW9uIGxpc3RzLiAgKi8KK0RFRlRSRUVDT0RFIChUUkVFX0xJU1QsICJ0cmVlX2xpc3QiLCB0Y2NfZXhjZXB0aW9uYWwsIDApCisKKy8qIFRoZXNlIG5vZGVzIGNvbnRhaW4gYW4gYXJyYXkgb2YgdHJlZSBub2Rlcy4gICovCitERUZUUkVFQ09ERSAoVFJFRV9WRUMsICJ0cmVlX3ZlYyIsIHRjY19leGNlcHRpb25hbCwgMCkKKworLyogQSBzeW1ib2wgYmluZGluZyBibG9jay4gIFRoZXNlIGFyZSBhcnJhbmdlZCBpbiBhIHRyZWUsCisgICB3aGVyZSB0aGUgQkxPQ0tfU1VCQkxPQ0tTIGZpZWxkIGNvbnRhaW5zIGEgY2hhaW4gb2Ygc3ViYmxvY2tzCisgICBjaGFpbmVkIHRocm91Z2ggdGhlIEJMT0NLX0NIQUlOIGZpZWxkLgorICAgQkxPQ0tfU1VQRVJDT05URVhUIHBvaW50cyB0byB0aGUgcGFyZW50IGJsb2NrLgorICAgICBGb3IgYSBibG9jayB3aGljaCByZXByZXNlbnRzIHRoZSBvdXRlcm1vc3Qgc2NvcGUgb2YgYSBmdW5jdGlvbiwgaXQKKyAgICAgcG9pbnRzIHRvIHRoZSBGVU5DVElPTl9ERUNMIG5vZGUuCisgICBCTE9DS19WQVJTIHBvaW50cyB0byBhIGNoYWluIG9mIGRlY2wgbm9kZXMuCisgICBCTE9DS19DSEFJTiBwb2ludHMgdG8gdGhlIG5leHQgQkxPQ0sgYXQgdGhlIHNhbWUgbGV2ZWwuCisgICBCTE9DS19BQlNUUkFDVF9PUklHSU4gcG9pbnRzIHRvIHRoZSBvcmlnaW5hbCAoYWJzdHJhY3QpIHRyZWUgbm9kZSB3aGljaAorICAgdGhpcyBibG9jayBpcyBhbiBpbnN0YW5jZSBvZiwgb3IgZWxzZSBpcyBOVUxMIHRvIGluZGljYXRlIHRoYXQgdGhpcworICAgYmxvY2sgaXMgbm90IGFuIGluc3RhbmNlIG9mIGFueXRoaW5nIGVsc2UuICBXaGVuIG5vbi1OVUxMLCB0aGUgdmFsdWUKKyAgIGNvdWxkIGVpdGhlciBwb2ludCB0byBhbm90aGVyIEJMT0NLIG5vZGUgb3IgaXQgY291bGQgcG9pbnQgdG8gYQorICAgRlVOQ1RJT05fREVDTCBub2RlIChlLmcuIGluIHRoZSBjYXNlIG9mIGEgYmxvY2sgcmVwcmVzZW50aW5nIHRoZQorICAgb3V0ZXJtb3N0IHNjb3BlIG9mIGEgcGFydGljdWxhciBpbmxpbmluZyBvZiBhIGZ1bmN0aW9uKS4KKyAgIEJMT0NLX0FCU1RSQUNUIGlzIG5vbnplcm8gaWYgdGhlIGJsb2NrIHJlcHJlc2VudHMgYW4gYWJzdHJhY3QKKyAgIGluc3RhbmNlIG9mIGEgYmxvY2sgKGkuZS4gb25lIHdoaWNoIGlzIG5lc3RlZCB3aXRoaW4gYW4gYWJzdHJhY3QKKyAgIGluc3RhbmNlIG9mIGFuIGlubGluZSBmdW5jdGlvbikuCisgICBUUkVFX0FTTV9XUklUVEVOIGlzIG5vbnplcm8gaWYgdGhlIGJsb2NrIHdhcyBhY3R1YWxseSByZWZlcmVuY2VkCisgICBpbiB0aGUgZ2VuZXJhdGVkIGFzc2VtYmx5LiAgKi8KK0RFRlRSRUVDT0RFIChCTE9DSywgImJsb2NrIiwgdGNjX2V4Y2VwdGlvbmFsLCAwKQorDAorLyogRWFjaCBkYXRhIHR5cGUgaXMgcmVwcmVzZW50ZWQgYnkgYSB0cmVlIG5vZGUgd2hvc2UgY29kZSBpcyBvbmUgb2YKKyAgIHRoZSBmb2xsb3dpbmc6ICAqLworLyogRWFjaCBub2RlIHRoYXQgcmVwcmVzZW50cyBhIGRhdGEgdHlwZSBoYXMgYSBjb21wb25lbnQgVFlQRV9TSVpFCisgICBjb250YWluaW5nIGEgdHJlZSB0aGF0IGlzIGFuIGV4cHJlc3Npb24gZm9yIHRoZSBzaXplIGluIGJpdHMuCisgICBUaGUgVFlQRV9NT0RFIGNvbnRhaW5zIHRoZSBtYWNoaW5lIG1vZGUgZm9yIHZhbHVlcyBvZiB0aGlzIHR5cGUuCisgICBUaGUgVFlQRV9QT0lOVEVSX1RPIGZpZWxkIGNvbnRhaW5zIGEgdHlwZSBmb3IgYSBwb2ludGVyIHRvIHRoaXMgdHlwZSwKKyAgICAgb3IgemVybyBpZiBubyBzdWNoIGhhcyBiZWVuIGNyZWF0ZWQgeWV0LgorICAgVGhlIFRZUEVfTkVYVF9WQVJJQU5UIGZpZWxkIGlzIHVzZWQgdG8gY2hhaW4gdG9nZXRoZXIgdHlwZXMKKyAgICAgdGhhdCBhcmUgdmFyaWFudHMgbWFkZSBieSB0eXBlIG1vZGlmaWVycyBzdWNoIGFzICJjb25zdCIgYW5kICJ2b2xhdGlsZSIuCisgICBUaGUgVFlQRV9NQUlOX1ZBUklBTlQgZmllbGQsIGluIGFueSBtZW1iZXIgb2Ygc3VjaCBhIGNoYWluLAorICAgICBwb2ludHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjaGFpbi4KKyAgIFRoZSBUWVBFX05BTUUgZmllbGQgY29udGFpbnMgaW5mbyBvbiB0aGUgbmFtZSB1c2VkIGluIHRoZSBwcm9ncmFtCisgICAgIGZvciB0aGlzIHR5cGUgKGZvciBHREIgc3ltYm9sIHRhYmxlIG91dHB1dCkuICBJdCBpcyBlaXRoZXIgYQorICAgICBUWVBFX0RFQ0wgbm9kZSwgZm9yIHR5cGVzIHRoYXQgYXJlIHR5cGVkZWZzLCBvciBhbiBJREVOVElGSUVSX05PREUKKyAgICAgaW4gdGhlIGNhc2Ugb2Ygc3RydWN0cywgdW5pb25zIG9yIGVudW1zIHRoYXQgYXJlIGtub3duIHdpdGggYSB0YWcsCisgICAgIG9yIHplcm8gZm9yIHR5cGVzIHRoYXQgaGF2ZSBubyBzcGVjaWFsIG5hbWUuCisgICBUaGUgVFlQRV9DT05URVhUIGZvciBhbnkgc29ydCBvZiB0eXBlIHdoaWNoIGNvdWxkIGhhdmUgYSBuYW1lIG9yCisgICAgd2hpY2ggY291bGQgaGF2ZSBuYW1lZCBtZW1iZXJzIChlLmcuIHRhZ2dlZCB0eXBlcyBpbiBDL0MrKykgd2lsbAorICAgIHBvaW50IHRvIHRoZSBub2RlIHdoaWNoIHJlcHJlc2VudHMgdGhlIHNjb3BlIG9mIHRoZSBnaXZlbiB0eXBlLCBvcgorICAgIHdpbGwgYmUgTlVMTF9UUkVFIGlmIHRoZSB0eXBlIGhhcyAiZmlsZSBzY29wZSIuICBGb3IgbW9zdCB0eXBlcywgdGhpcworICAgIHdpbGwgcG9pbnQgdG8gYSBCTE9DSyBub2RlIG9yIGEgRlVOQ1RJT05fREVDTCBub2RlLCBidXQgaXQgY291bGQgYWxzbworICAgIHBvaW50IHRvIGEgRlVOQ1RJT05fVFlQRSBub2RlIChmb3IgdHlwZXMgd2hvc2Ugc2NvcGUgaXMgbGltaXRlZCB0byB0aGUKKyAgICBmb3JtYWwgcGFyYW1ldGVyIGxpc3Qgb2Ygc29tZSBmdW5jdGlvbiB0eXBlIHNwZWNpZmljYXRpb24pIG9yIGl0CisgICAgY291bGQgcG9pbnQgdG8gYSBSRUNPUkRfVFlQRSwgVU5JT05fVFlQRSBvciBRVUFMX1VOSU9OX1RZUEUgbm9kZQorICAgIChmb3IgQysrICJtZW1iZXIiIHR5cGVzKS4KKyAgICBGb3Igbm9uLXRhZ2dlZC10eXBlcywgVFlQRV9DT05URVhUIG5lZWQgbm90IGJlIHNldCB0byBhbnl0aGluZyBpbgorICAgIHBhcnRpY3VsYXIsIHNpbmNlIGFueSB0eXBlIHdoaWNoIGlzIG9mIHNvbWUgdHlwZSBjYXRlZ29yeSAgKGUuZy4KKyAgICBhbiBhcnJheSB0eXBlIG9yIGEgZnVuY3Rpb24gdHlwZSkgd2hpY2ggY2Fubm90IGVpdGhlciBoYXZlIGEgbmFtZQorICAgIGl0c2VsZiBvciBoYXZlIG5hbWVkIG1lbWJlcnMgZG9lc24ndCByZWFsbHkgaGF2ZSBhICJzY29wZSIgcGVyIHNlLgorICBUaGUgVFJFRV9DSEFJTiBmaWVsZCBpcyB1c2VkIGFzIGEgZm9yd2FyZC1yZWZlcmVuY2VzIHRvIG5hbWVzIGZvcgorICAgIEVOVU1FUkFMX1RZUEUsIFJFQ09SRF9UWVBFLCBVTklPTl9UWVBFLCBhbmQgUVVBTF9VTklPTl9UWVBFIG5vZGVzOworICAgIHNlZSBiZWxvdy4gICovCisKKy8qIFRoZSBvcmRlcmluZyBvZiB0aGUgZm9sbG93aW5nIGNvZGVzIGlzIG9wdGltaXplZCBmb3IgdGhlIGNoZWNraW5nCisgICBtYWNyb3MgaW4gdHJlZS5oLiAgQ2hhbmdpbmcgdGhlIG9yZGVyIHdpbGwgZGVncmFkZSB0aGUgc3BlZWQgb2YgdGhlCisgICBjb21waWxlci4gIE9GRlNFVF9UWVBFLCBFTlVNRVJBTF9UWVBFLCBCT09MRUFOX1RZUEUsIElOVEVHRVJfVFlQRSwKKyAgIFJFQUxfVFlQRSwgUE9JTlRFUl9UWVBFLiAgKi8KKworLyogQW4gb2Zmc2V0IGlzIGEgcG9pbnRlciByZWxhdGl2ZSB0byBhbiBvYmplY3QuCisgICBUaGUgVFJFRV9UWVBFIGZpZWxkIGlzIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QgYXQgdGhlIG9mZnNldC4KKyAgIFRoZSBUWVBFX09GRlNFVF9CQVNFVFlQRSBwb2ludHMgdG8gdGhlIG5vZGUgZm9yIHRoZSB0eXBlIG9mIG9iamVjdAorICAgdGhhdCB0aGUgb2Zmc2V0IGlzIHJlbGF0aXZlIHRvLiAgKi8KK0RFRlRSRUVDT0RFIChPRkZTRVRfVFlQRSwgIm9mZnNldF90eXBlIiwgdGNjX3R5cGUsIDApCisKKy8qIEMgZW51bXMuICBUaGUgdHlwZSBub2RlIGxvb2tzIGp1c3QgbGlrZSBhbiBJTlRFR0VSX1RZUEUgbm9kZS4KKyAgIFRoZSBzeW1ib2xzIGZvciB0aGUgdmFsdWVzIG9mIHRoZSBlbnVtIHR5cGUgYXJlIGRlZmluZWQgYnkKKyAgIENPTlNUX0RFQ0wgbm9kZXMsIGJ1dCB0aGUgdHlwZSBkb2VzIG5vdCBwb2ludCB0byB0aGVtOworICAgaG93ZXZlciwgdGhlIFRZUEVfVkFMVUVTIGlzIGEgbGlzdCBpbiB3aGljaCBlYWNoIGVsZW1lbnQncyBUUkVFX1BVUlBPU0UKKyAgIGlzIGEgbmFtZSBhbmQgdGhlIFRSRUVfVkFMVUUgaXMgdGhlIHZhbHVlIChhbiBJTlRFR0VSX0NTVCBub2RlKS4gICovCisvKiBBIGZvcndhcmQgcmVmZXJlbmNlIGBlbnVtIGZvbycgd2hlbiBubyBlbnVtIG5hbWVkIGZvbyBpcyBkZWZpbmVkIHlldAorICAgaGFzIHplcm8gKGEgbnVsbCBwb2ludGVyKSBpbiBpdHMgVFlQRV9TSVpFLiAgVGhlIHRhZyBuYW1lIGlzIGluCisgICB0aGUgVFlQRV9OQU1FIGZpZWxkLiAgSWYgdGhlIHR5cGUgaXMgbGF0ZXIgZGVmaW5lZCwgdGhlIG5vcm1hbAorICAgZmllbGRzIGFyZSBmaWxsZWQgaW4uCisgICBSRUNPUkRfVFlQRSwgVU5JT05fVFlQRSwgYW5kIFFVQUxfVU5JT05fVFlQRSBmb3J3YXJkIHJlZnMgYXJlCisgICB0cmVhdGVkIHNpbWlsYXJseS4gICovCitERUZUUkVFQ09ERSAoRU5VTUVSQUxfVFlQRSwgImVudW1lcmFsX3R5cGUiLCB0Y2NfdHlwZSwgMCkKKworLyogQm9vbGVhbiB0eXBlICh0cnVlIG9yIGZhbHNlIGFyZSB0aGUgb25seSB2YWx1ZXMpLiAgTG9va3MgbGlrZSBhbgorICAgSU5URUdSQUxfVFlQRS4gICovCitERUZUUkVFQ09ERSAoQk9PTEVBTl9UWVBFLCAiYm9vbGVhbl90eXBlIiwgdGNjX3R5cGUsIDApCisKKy8qIEludGVnZXIgdHlwZXMgaW4gYWxsIGxhbmd1YWdlcywgaW5jbHVkaW5nIGNoYXIgaW4gQy4KKyAgIEFsc28gdXNlZCBmb3Igc3ViLXJhbmdlcyBvZiBvdGhlciBkaXNjcmV0ZSB0eXBlcy4KKyAgIEhhcyBjb21wb25lbnRzIFRZUEVfTUlOX1ZBTFVFLCBUWVBFX01BWF9WQUxVRSAoZXhwcmVzc2lvbnMsIGluY2x1c2l2ZSkKKyAgIGFuZCBUWVBFX1BSRUNJU0lPTiAobnVtYmVyIG9mIGJpdHMgdXNlZCBieSB0aGlzIHR5cGUpLgorICAgSW4gdGhlIGNhc2Ugb2YgYSBzdWJyYW5nZSB0eXBlIGluIFBhc2NhbCwgdGhlIFRSRUVfVFlQRQorICAgb2YgdGhpcyB3aWxsIHBvaW50IGF0IHRoZSBzdXBlcnR5cGUgKGFub3RoZXIgSU5URUdFUl9UWVBFLAorICAgb3IgYW4gRU5VTUVSQUxfVFlQRSBvciBCT09MRUFOX1RZUEUpLgorICAgT3RoZXJ3aXNlLCB0aGUgVFJFRV9UWVBFIGlzIHplcm8uICAqLworREVGVFJFRUNPREUgKElOVEVHRVJfVFlQRSwgImludGVnZXJfdHlwZSIsIHRjY190eXBlLCAwKQorCisvKiBDJ3MgZmxvYXQgYW5kIGRvdWJsZS4gIERpZmZlcmVudCBmbG9hdGluZyB0eXBlcyBhcmUgZGlzdGluZ3Vpc2hlZAorICAgYnkgbWFjaGluZSBtb2RlIGFuZCBieSB0aGUgVFlQRV9TSVpFIGFuZCB0aGUgVFlQRV9QUkVDSVNJT04uICAqLworREVGVFJFRUNPREUgKFJFQUxfVFlQRSwgInJlYWxfdHlwZSIsIHRjY190eXBlLCAwKQorCisvKiBUaGUgb3JkZXJpbmcgb2YgdGhlIGZvbGxvd2luZyBjb2RlcyBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBjaGVja2luZworICAgbWFjcm9zIGluIHRyZWUuaC4gIENoYW5naW5nIHRoZSBvcmRlciB3aWxsIGRlZ3JhZGUgdGhlIHNwZWVkIG9mIHRoZQorICAgY29tcGlsZXIuICBQT0lOVEVSX1RZUEUsIFJFRkVSRU5DRV9UWVBFLiAgTm90ZSB0aGF0IHRoaXMgcmFuZ2UKKyAgIG92ZXJsYXBzIHRoZSBwcmV2aW91cyByYW5nZSBvZiBvcmRlcmVkIHR5cGVzLiAgKi8KKworLyogQWxsIHBvaW50ZXItdG8teCB0eXBlcyBoYXZlIGNvZGUgUE9JTlRFUl9UWVBFLgorICAgVGhlIFRSRUVfVFlQRSBwb2ludHMgdG8gdGhlIG5vZGUgZm9yIHRoZSB0eXBlIHBvaW50ZWQgdG8uICAqLworREVGVFJFRUNPREUgKFBPSU5URVJfVFlQRSwgInBvaW50ZXJfdHlwZSIsIHRjY190eXBlLCAwKQorCisvKiBfRnJhY3QgYW5kIF9BY2N1bSB0eXBlcyBpbiBFbWJlZGRlZC1DLiAgRGlmZmVyZW50IGZpeGVkLXBvaW50IHR5cGVzCisgICBhcmUgZGlzdGluZ3Vpc2hlZCBieSBtYWNoaW5lIG1vZGUgYW5kIGJ5IHRoZSBUWVBFX1NJWkUgYW5kIHRoZQorICAgVFlQRV9QUkVDSVNJT04uICAqLworREVGVFJFRUNPREUgKEZJWEVEX1BPSU5UX1RZUEUsICJmaXhlZF9wb2ludF90eXBlIiwgdGNjX3R5cGUsIDApCisKKy8qIEEgcmVmZXJlbmNlIGlzIGxpa2UgYSBwb2ludGVyIGV4Y2VwdCB0aGF0IGl0IGlzIGNvZXJjZWQKKyAgIGF1dG9tYXRpY2FsbHkgdG8gdGhlIHZhbHVlIGl0IHBvaW50cyB0by4gIFVzZWQgaW4gQysrLiAgKi8KK0RFRlRSRUVDT0RFIChSRUZFUkVOQ0VfVFlQRSwgInJlZmVyZW5jZV90eXBlIiwgdGNjX3R5cGUsIDApCisKKy8qIFRoZSBvcmRlcmluZyBvZiB0aGUgZm9sbG93aW5nIGNvZGVzIGlzIG9wdGltaXplZCBmb3IgdGhlIGNoZWNraW5nCisgICBtYWNyb3MgaW4gdHJlZS5oLiAgQ2hhbmdpbmcgdGhlIG9yZGVyIHdpbGwgZGVncmFkZSB0aGUgc3BlZWQgb2YgdGhlCisgICBjb21waWxlci4gIENPTVBMRVhfVFlQRSwgVkVDVE9SX1RZUEUsIEFSUkFZX1RZUEUuICAqLworCisvKiBDb21wbGV4IG51bWJlciB0eXBlcy4gIFRoZSBUUkVFX1RZUEUgZmllbGQgaXMgdGhlIGRhdGEgdHlwZQorICAgb2YgdGhlIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0cy4gIEl0IG11c3QgYmUgb2Ygc2NhbGFyCisgICBhcml0aG1ldGljIHR5cGUsIG5vdCBpbmNsdWRpbmcgcG9pbnRlciB0eXBlLiAgKi8KK0RFRlRSRUVDT0RFIChDT01QTEVYX1RZUEUsICJjb21wbGV4X3R5cGUiLCB0Y2NfdHlwZSwgMCkKKworLyogVmVjdG9yIHR5cGVzLiAgVGhlIFRSRUVfVFlQRSBmaWVsZCBpcyB0aGUgZGF0YSB0eXBlIG9mIHRoZSB2ZWN0b3IKKyAgIGVsZW1lbnRzLiAgVGhlIFRZUEVfUFJFQ0lTSU9OIGZpZWxkIGlzIHRoZSBudW1iZXIgb2Ygc3VicGFydHMgb2YKKyAgIHRoZSB2ZWN0b3IuICAqLworREVGVFJFRUNPREUgKFZFQ1RPUl9UWVBFLCAidmVjdG9yX3R5cGUiLCB0Y2NfdHlwZSwgMCkKKworLyogVGhlIG9yZGVyaW5nIG9mIHRoZSBmb2xsb3dpbmcgY29kZXMgaXMgb3B0aW1pemVkIGZvciB0aGUgY2hlY2tpbmcKKyAgIG1hY3JvcyBpbiB0cmVlLmguICBDaGFuZ2luZyB0aGUgb3JkZXIgd2lsbCBkZWdyYWRlIHRoZSBzcGVlZCBvZiB0aGUKKyAgIGNvbXBpbGVyLiAgQVJSQVlfVFlQRSwgUkVDT1JEX1RZUEUsIFVOSU9OX1RZUEUsIFFVQUxfVU5JT05fVFlQRS4KKyAgIE5vdGUgdGhhdCB0aGlzIHJhbmdlIG92ZXJsYXBzIHRoZSBwcmV2aW91cyByYW5nZS4gICovCisKKy8qIFR5cGVzIG9mIGFycmF5cy4gIFNwZWNpYWwgZmllbGRzOgorICAgVFJFRV9UWVBFCQkgIFR5cGUgb2YgYW4gYXJyYXkgZWxlbWVudC4KKyAgIFRZUEVfRE9NQUlOCQkgIFR5cGUgdG8gaW5kZXggYnkuCisJCQkgICAgSXRzIHJhbmdlIG9mIHZhbHVlcyBzcGVjaWZpZXMgdGhlIGFycmF5IGxlbmd0aC4KKyBUaGUgZmllbGQgVFlQRV9QT0lOVEVSX1RPIChUUkVFX1RZUEUgKGFycmF5X3R5cGUpKSBpcyBhbHdheXMgbm9uemVybworIGFuZCBob2xkcyB0aGUgdHlwZSB0byBjb2VyY2UgYSB2YWx1ZSBvZiB0aGF0IGFycmF5IHR5cGUgdG8gaW4gQy4KKyBUWVBFX1NUUklOR19GTEFHIGluZGljYXRlcyBhIHN0cmluZyAoaW4gY29udHJhc3QgdG8gYW4gYXJyYXkgb2YgY2hhcnMpCisgaW4gbGFuZ3VhZ2VzIChzdWNoIGFzIENoaWxsKSB0aGF0IG1ha2UgYSBkaXN0aW5jdGlvbi4gICovCisvKiBBcnJheSB0eXBlcyBpbiBDIG9yIFBhc2NhbCAqLworREVGVFJFRUNPREUgKEFSUkFZX1RZUEUsICJhcnJheV90eXBlIiwgdGNjX3R5cGUsIDApCisKKy8qIFN0cnVjdCBpbiBDLCBvciByZWNvcmQgaW4gUGFzY2FsLiAgKi8KKy8qIFNwZWNpYWwgZmllbGRzOgorICAgVFlQRV9GSUVMRFMgIGNoYWluIG9mIEZJRUxEX0RFQ0xzIGZvciB0aGUgZmllbGRzIG9mIHRoZSBzdHJ1Y3QsCisgICAgIGFuZCBWQVJfREVDTHMsIFRZUEVfREVDTHMgYW5kIENPTlNUX0RFQ0xzIGZvciByZWNvcmQtc2NvcGUgdmFyaWFibGVzLAorICAgICB0eXBlcyBhbmQgZW51bWVyYXRvcnMuCisgICBBIGZldyBtYXkgbmVlZCB0byBiZSBhZGRlZCBmb3IgUGFzY2FsLiAgKi8KKy8qIFNlZSB0aGUgY29tbWVudCBhYm92ZSwgYmVmb3JlIEVOVU1FUkFMX1RZUEUsIGZvciBob3cKKyAgIGZvcndhcmQgcmVmZXJlbmNlcyB0byBzdHJ1Y3QgdGFncyBhcmUgaGFuZGxlZCBpbiBDLiAgKi8KK0RFRlRSRUVDT0RFIChSRUNPUkRfVFlQRSwgInJlY29yZF90eXBlIiwgdGNjX3R5cGUsIDApCisKKy8qIFVuaW9uIGluIEMuICBMaWtlIGEgc3RydWN0LCBleGNlcHQgdGhhdCB0aGUgb2Zmc2V0cyBvZiB0aGUgZmllbGRzCisgICB3aWxsIGFsbCBiZSB6ZXJvLiAgKi8KKy8qIFNlZSB0aGUgY29tbWVudCBhYm92ZSwgYmVmb3JlIEVOVU1FUkFMX1RZUEUsIGZvciBob3cKKyAgIGZvcndhcmQgcmVmZXJlbmNlcyB0byB1bmlvbiB0YWdzIGFyZSBoYW5kbGVkIGluIEMuICAqLworREVGVFJFRUNPREUgKFVOSU9OX1RZUEUsICJ1bmlvbl90eXBlIiwgdGNjX3R5cGUsIDApCS8qIEMgdW5pb24gdHlwZSAqLworCisvKiBTaW1pbGFyIHRvIFVOSU9OX1RZUEUsIGV4Y2VwdCB0aGF0IHRoZSBleHByZXNzaW9ucyBpbiBERUNMX1FVQUxJRklFUgorICAgaW4gZWFjaCBGSUVMRF9ERUNMIGRldGVybWluZSB3aGF0IHRoZSB1bmlvbiBjb250YWlucy4gIFRoZSBmaXJzdAorICAgZmllbGQgd2hvc2UgREVDTF9RVUFMSUZJRVIgZXhwcmVzc2lvbiBpcyB0cnVlIGlzIGRlZW1lZCB0byBvY2N1cHkKKyAgIHRoZSB1bmlvbi4gICovCitERUZUUkVFQ09ERSAoUVVBTF9VTklPTl9UWVBFLCAicXVhbF91bmlvbl90eXBlIiwgdGNjX3R5cGUsIDApCisKKy8qIFRoZSBvcmRlcmluZyBvZiB0aGUgZm9sbG93aW5nIGNvZGVzIGlzIG9wdGltaXplZCBmb3IgdGhlIGNoZWNraW5nCisgICBtYWNyb3MgaW4gdHJlZS5oLiAgQ2hhbmdpbmcgdGhlIG9yZGVyIHdpbGwgZGVncmFkZSB0aGUgc3BlZWQgb2YgdGhlCisgICBjb21waWxlci4gIFZPSURfVFlQRSwgRlVOQ1RJT05fVFlQRSwgTUVUSE9EX1RZUEUuICAqLworCisvKiBUaGUgdm9pZCB0eXBlIGluIEMgKi8KK0RFRlRSRUVDT0RFIChWT0lEX1RZUEUsICJ2b2lkX3R5cGUiLCB0Y2NfdHlwZSwgMCkKKworLyogVHlwZSBvZiBmdW5jdGlvbnMuICBTcGVjaWFsIGZpZWxkczoKKyAgIFRSRUVfVFlQRQkJICAgIHR5cGUgb2YgdmFsdWUgcmV0dXJuZWQuCisgICBUWVBFX0FSR19UWVBFUyAgICAgIGxpc3Qgb2YgdHlwZXMgb2YgYXJndW1lbnRzIGV4cGVjdGVkLgorCXRoaXMgbGlzdCBpcyBtYWRlIG9mIFRSRUVfTElTVCBub2Rlcy4KKyAgIFR5cGVzIG9mICJQcm9jZWR1cmVzIiBpbiBsYW5ndWFnZXMgd2hlcmUgdGhleSBhcmUgZGlmZmVyZW50IGZyb20gZnVuY3Rpb25zCisgICBoYXZlIGNvZGUgRlVOQ1RJT05fVFlQRSBhbHNvLCBidXQgdGhlbiBUUkVFX1RZUEUgaXMgemVybyBvciB2b2lkIHR5cGUuICAqLworREVGVFJFRUNPREUgKEZVTkNUSU9OX1RZUEUsICJmdW5jdGlvbl90eXBlIiwgdGNjX3R5cGUsIDApCisKKy8qIE1FVEhPRF9UWVBFIGlzIHRoZSB0eXBlIG9mIGEgZnVuY3Rpb24gd2hpY2ggdGFrZXMgYW4gZXh0cmEgZmlyc3QKKyAgIGFyZ3VtZW50IGZvciAic2VsZiIsIHdoaWNoIGlzIG5vdCBwcmVzZW50IGluIHRoZSBkZWNsYXJlZCBhcmd1bWVudCBsaXN0LgorICAgVGhlIFRSRUVfVFlQRSBpcyB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIG1ldGhvZC4gIFRoZSBUWVBFX01FVEhPRF9CQVNFVFlQRQorICAgaXMgdGhlIHR5cGUgb2YgInNlbGYiLiAgVFlQRV9BUkdfVFlQRVMgaXMgdGhlIHJlYWwgYXJndW1lbnQgbGlzdCwgd2hpY2gKKyAgIGluY2x1ZGVzIHRoZSBoaWRkZW4gYXJndW1lbnQgZm9yICJzZWxmIi4gICovCitERUZUUkVFQ09ERSAoTUVUSE9EX1RZUEUsICJtZXRob2RfdHlwZSIsIHRjY190eXBlLCAwKQorCisvKiBUaGlzIGlzIGEgbGFuZ3VhZ2Utc3BlY2lmaWMga2luZCBvZiB0eXBlLgorICAgSXRzIG1lYW5pbmcgaXMgZGVmaW5lZCBieSB0aGUgbGFuZ3VhZ2UgZnJvbnQgZW5kLgorICAgbGF5b3V0X3R5cGUgZG9lcyBub3Qga25vdyBob3cgdG8gbGF5IHRoaXMgb3V0LAorICAgc28gdGhlIGZyb250LWVuZCBtdXN0IGRvIHNvIG1hbnVhbGx5LiAgKi8KK0RFRlRSRUVDT0RFIChMQU5HX1RZUEUsICJsYW5nX3R5cGUiLCB0Y2NfdHlwZSwgMCkKKwwKKy8qIEV4cHJlc3Npb25zICovCisKKy8qIEZpcnN0LCB0aGUgY29uc3RhbnRzLiAgKi8KKworLyogQ29udGVudHMgYXJlIGluIFRSRUVfSU5UX0NTVF9MT1cgYW5kIFRSRUVfSU5UX0NTVF9ISUdIIGZpZWxkcywKKyAgIDMyIGJpdHMgZWFjaCwgZ2l2aW5nIHVzIGEgNjQgYml0IGNvbnN0YW50IGNhcGFiaWxpdHkuICBJTlRFR0VSX0NTVAorICAgbm9kZXMgY2FuIGJlIHNoYXJlZCwgYW5kIHRoZXJlZm9yZSBzaG91bGQgYmUgY29uc2lkZXJlZCByZWFkIG9ubHkuCisgICBUaGV5IHNob3VsZCBiZSBjb3BpZWQsIGJlZm9yZSBzZXR0aW5nIGEgZmxhZyBzdWNoIGFzIFRSRUVfT1ZFUkZMT1cuCisgICBJZiBhbiBJTlRFR0VSX0NTVCBoYXMgVFJFRV9PVkVSRkxPVyBhbHJlYWR5IHNldCwgaXQgaXMga25vd24gdG8gYmUgdW5pcXVlLgorICAgSU5URUdFUl9DU1Qgbm9kZXMgYXJlIGNyZWF0ZWQgZm9yIHRoZSBpbnRlZ3JhbCB0eXBlcywgZm9yIHBvaW50ZXIKKyAgIHR5cGVzIGFuZCBmb3IgdmVjdG9yIGFuZCBmbG9hdCB0eXBlcyBpbiBzb21lIGNpcmN1bXN0YW5jZXMuICAqLworREVGVFJFRUNPREUgKElOVEVHRVJfQ1NULCAiaW50ZWdlcl9jc3QiLCB0Y2NfY29uc3RhbnQsIDApCisKKy8qIENvbnRlbnRzIGFyZSBpbiBUUkVFX1JFQUxfQ1NUIGZpZWxkLiAgKi8KK0RFRlRSRUVDT0RFIChSRUFMX0NTVCwgInJlYWxfY3N0IiwgdGNjX2NvbnN0YW50LCAwKQorCisvKiBDb250ZW50cyBhcmUgaW4gVFJFRV9GSVhFRF9DU1QgZmllbGQuICAqLworREVGVFJFRUNPREUgKEZJWEVEX0NTVCwgImZpeGVkX2NzdCIsIHRjY19jb25zdGFudCwgMCkKKworLyogQ29udGVudHMgYXJlIGluIFRSRUVfUkVBTFBBUlQgYW5kIFRSRUVfSU1BR1BBUlQgZmllbGRzLAorICAgd2hvc2UgY29udGVudHMgYXJlIG90aGVyIGNvbnN0YW50IG5vZGVzLiAgKi8KK0RFRlRSRUVDT0RFIChDT01QTEVYX0NTVCwgImNvbXBsZXhfY3N0IiwgdGNjX2NvbnN0YW50LCAwKQorCisvKiBDb250ZW50cyBhcmUgaW4gVFJFRV9WRUNUT1JfQ1NUX0VMVFMgZmllbGQuICAqLworREVGVFJFRUNPREUgKFZFQ1RPUl9DU1QsICJ2ZWN0b3JfY3N0IiwgdGNjX2NvbnN0YW50LCAwKQorCisvKiBDb250ZW50cyBhcmUgVFJFRV9TVFJJTkdfTEVOR1RIIGFuZCB0aGUgYWN0dWFsIGNvbnRlbnRzIG9mIHRoZSBzdHJpbmcuICAqLworREVGVFJFRUNPREUgKFNUUklOR19DU1QsICJzdHJpbmdfY3N0IiwgdGNjX2NvbnN0YW50LCAwKQorCisvKiBEZWNsYXJhdGlvbnMuICBBbGwgcmVmZXJlbmNlcyB0byBuYW1lcyBhcmUgcmVwcmVzZW50ZWQgYXMgLi4uX0RFQ0wKKyAgIG5vZGVzLiAgVGhlIGRlY2xzIGluIG9uZSBiaW5kaW5nIGNvbnRleHQgYXJlIGNoYWluZWQgdGhyb3VnaCB0aGUKKyAgIFRSRUVfQ0hBSU4gZmllbGQuICBFYWNoIERFQ0wgaGFzIGEgREVDTF9OQU1FIGZpZWxkIHdoaWNoIGNvbnRhaW5zCisgICBhbiBJREVOVElGSUVSX05PREUuICAoU29tZSBkZWNscywgbW9zdCBvZnRlbiBsYWJlbHMsIG1heSBoYXZlIHplcm8KKyAgIGFzIHRoZSBERUNMX05BTUUpLiAgREVDTF9DT05URVhUIHBvaW50cyB0byB0aGUgbm9kZSByZXByZXNlbnRpbmcKKyAgIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoaXMgZGVjbGFyYXRpb24gaGFzIGl0cyBzY29wZS4gIEZvcgorICAgRklFTERfREVDTHMsIHRoaXMgaXMgdGhlIFJFQ09SRF9UWVBFLCBVTklPTl9UWVBFLCBvcgorICAgUVVBTF9VTklPTl9UWVBFIG5vZGUgdGhhdCB0aGUgZmllbGQgaXMgYSBtZW1iZXIgb2YuICBGb3IgVkFSX0RFQ0wsCisgICBQQVJNX0RFQ0wsIEZVTkNUSU9OX0RFQ0wsIExBQkVMX0RFQ0wsIGFuZCBDT05TVF9ERUNMIG5vZGVzLCB0aGlzCisgICBwb2ludHMgdG8gZWl0aGVyIHRoZSBGVU5DVElPTl9ERUNMIGZvciB0aGUgY29udGFpbmluZyBmdW5jdGlvbiwgdGhlCisgICBSRUNPUkRfVFlQRSBvciBVTklPTl9UWVBFIGZvciB0aGUgY29udGFpbmluZyB0eXBlLCBvciBOVUxMX1RSRUUgb3IKKyAgIGEgVFJBTlNMQVRJT05fVU5JVF9ERUNMIGlmIHRoZSBnaXZlbiBkZWNsIGhhcyAiZmlsZSBzY29wZSIuCisgICBERUNMX0FCU1RSQUNUX09SSUdJTiwgaWYgbm9uLU5VTEwsIHBvaW50cyB0byB0aGUgb3JpZ2luYWwgKGFic3RyYWN0KQorICAgIC4uLl9ERUNMIG5vZGUgb2Ygd2hpY2ggdGhpcyBkZWNsIGlzIGFuIChpbmxpbmVkIG9yIHRlbXBsYXRlIGV4cGFuZGVkKQorICAgIGluc3RhbmNlLgorICAgVGhlIFRSRUVfVFlQRSBmaWVsZCBob2xkcyB0aGUgZGF0YSB0eXBlIG9mIHRoZSBvYmplY3QsIHdoZW4gcmVsZXZhbnQuCisgICAgTEFCRUxfREVDTHMgaGF2ZSBubyBkYXRhIHR5cGUuICBGb3IgVFlQRV9ERUNMLCB0aGUgVFJFRV9UWVBFIGZpZWxkCisgICAgY29udGVudHMgYXJlIHRoZSB0eXBlIHdob3NlIG5hbWUgaXMgYmVpbmcgZGVjbGFyZWQuCisgICBUaGUgREVDTF9BTElHTiwgREVDTF9TSVpFLAorICAgIGFuZCBERUNMX01PREUgZmllbGRzIGV4aXN0IGluIGRlY2wgbm9kZXMganVzdCBhcyBpbiB0eXBlIG5vZGVzLgorICAgIFRoZXkgYXJlIHVudXNlZCBpbiBMQUJFTF9ERUNMLCBUWVBFX0RFQ0wgYW5kIENPTlNUX0RFQ0wgbm9kZXMuCisKKyAgIERFQ0xfRklFTERfQklUX09GRlNFVCBob2xkcyBhbiBpbnRlZ2VyIG51bWJlciBvZiBiaXRzIG9mZnNldCBmb3IKKyAgIHRoZSBsb2NhdGlvbi4gIERFQ0xfVk9GRlNFVCBob2xkcyBhbiBleHByZXNzaW9uIGZvciBhIHZhcmlhYmxlCisgICBvZmZzZXQ7IGl0IGlzIHRvIGJlIG11bHRpcGxpZWQgYnkgREVDTF9WT0ZGU0VUX1VOSVQgKGFuIGludGVnZXIpLgorICAgVGhlc2UgZmllbGRzIGFyZSByZWxldmFudCBvbmx5IGluIEZJRUxEX0RFQ0xzIGFuZCBQQVJNX0RFQ0xzLgorCisgICBERUNMX0lOSVRJQUwgaG9sZHMgdGhlIHZhbHVlIHRvIGluaXRpYWxpemUgYSB2YXJpYWJsZSB0bywKKyAgIG9yIHRoZSB2YWx1ZSBvZiBhIGNvbnN0YW50LiAgRm9yIGEgZnVuY3Rpb24sIGl0IGhvbGRzIHRoZSBib2R5CisgICAoYSBub2RlIG9mIHR5cGUgQkxPQ0sgcmVwcmVzZW50aW5nIHRoZSBmdW5jdGlvbidzIGJpbmRpbmcgY29udG91cgorICAgYW5kIHdob3NlIGJvZHkgY29udGFpbnMgdGhlIGZ1bmN0aW9uJ3Mgc3RhdGVtZW50cy4pICBGb3IgYSBMQUJFTF9ERUNMCisgICBpbiBDLCBpdCBpcyBhIGZsYWcsIG5vbnplcm8gaWYgdGhlIGxhYmVsJ3MgZGVmaW5pdGlvbiBoYXMgYmVlbiBzZWVuLgorCisgICBQQVJNX0RFQ0xzIHVzZSBhIHNwZWNpYWwgZmllbGQ6CisgICBERUNMX0FSR19UWVBFIGlzIHRoZSB0eXBlIGluIHdoaWNoIHRoZSBhcmd1bWVudCBpcyBhY3R1YWxseQorICAgIHBhc3NlZCwgd2hpY2ggbWF5IGJlIGRpZmZlcmVudCBmcm9tIGl0cyB0eXBlIHdpdGhpbiB0aGUgZnVuY3Rpb24uCisKKyAgIEZVTkNUSU9OX0RFQ0xzIHVzZSBmb3VyIHNwZWNpYWwgZmllbGRzOgorICAgREVDTF9BUkdVTUVOVFMgaG9sZHMgYSBjaGFpbiBvZiBQQVJNX0RFQ0wgbm9kZXMgZm9yIHRoZSBhcmd1bWVudHMuCisgICBERUNMX1JFU1VMVCBob2xkcyBhIFJFU1VMVF9ERUNMIG5vZGUgZm9yIHRoZSB2YWx1ZSBvZiBhIGZ1bmN0aW9uLgorICAgIFRoZSBERUNMX1JUTCBmaWVsZCBpcyAwIGZvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBubyB2YWx1ZS4KKyAgICAoQyBmdW5jdGlvbnMgcmV0dXJuaW5nIHZvaWQgaGF2ZSB6ZXJvIGhlcmUuKQorICAgIFRoZSBUUkVFX1RZUEUgZmllbGQgaXMgdGhlIHR5cGUgaW4gd2hpY2ggdGhlIHJlc3VsdCBpcyBhY3R1YWxseQorICAgIHJldHVybmVkLiAgVGhpcyBpcyB1c3VhbGx5IHRoZSBzYW1lIGFzIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUKKyAgICBGVU5DVElPTl9ERUNMLCBidXQgaXQgbWF5IGJlIGEgd2lkZXIgaW50ZWdlciB0eXBlIGJlY2F1c2Ugb2YKKyAgICBwcm9tb3Rpb24uCisgICBERUNMX0ZVTkNUSU9OX0NPREUgaXMgYSBjb2RlIG51bWJlciB0aGF0IGlzIG5vbnplcm8gZm9yCisgICAgYnVpbHQtaW4gZnVuY3Rpb25zLiAgSXRzIHZhbHVlIGlzIGFuIGVudW0gYnVpbHRfaW5fZnVuY3Rpb24KKyAgICB0aGF0IHNheXMgd2hpY2ggYnVpbHQtaW4gZnVuY3Rpb24gaXQgaXMuCisKKyAgIERFQ0xfU09VUkNFX0ZJTEUgaG9sZHMgYSBmaWxlbmFtZSBzdHJpbmcgYW5kIERFQ0xfU09VUkNFX0xJTkUKKyAgIGhvbGRzIGEgbGluZSBudW1iZXIuICBJbiBzb21lIGNhc2VzIHRoZXNlIGNhbiBiZSB0aGUgbG9jYXRpb24gb2YKKyAgIGEgcmVmZXJlbmNlLCBpZiBubyBkZWZpbml0aW9uIGhhcyBiZWVuIHNlZW4uCisKKyAgIERFQ0xfQUJTVFJBQ1QgaXMgbm9uemVybyBpZiB0aGUgZGVjbCByZXByZXNlbnRzIGFuIGFic3RyYWN0IGluc3RhbmNlCisgICBvZiBhIGRlY2wgKGkuZS4gb25lIHdoaWNoIGlzIG5lc3RlZCB3aXRoaW4gYW4gYWJzdHJhY3QgaW5zdGFuY2Ugb2YgYQorICAgaW5saW5lIGZ1bmN0aW9uLiAgKi8KKworREVGVFJFRUNPREUgKEZVTkNUSU9OX0RFQ0wsICJmdW5jdGlvbl9kZWNsIiwgdGNjX2RlY2xhcmF0aW9uLCAwKQorREVGVFJFRUNPREUgKExBQkVMX0RFQ0wsICJsYWJlbF9kZWNsIiwgdGNjX2RlY2xhcmF0aW9uLCAwKQorLyogVGhlIG9yZGVyaW5nIG9mIHRoZSBmb2xsb3dpbmcgY29kZXMgaXMgb3B0aW1pemVkIGZvciB0aGUgY2hlY2tpbmcKKyAgIG1hY3JvcyBpbiB0cmVlLmguICBDaGFuZ2luZyB0aGUgb3JkZXIgd2lsbCBkZWdyYWRlIHRoZSBzcGVlZCBvZiB0aGUKKyAgIGNvbXBpbGVyLiAgRklFTERfREVDTCwgVkFSX0RFQ0wsIENPTlNUX0RFQ0wsIFBBUk1fREVDTCwKKyAgIFRZUEVfREVDTC4gICovCitERUZUUkVFQ09ERSAoRklFTERfREVDTCwgImZpZWxkX2RlY2wiLCB0Y2NfZGVjbGFyYXRpb24sIDApCitERUZUUkVFQ09ERSAoVkFSX0RFQ0wsICJ2YXJfZGVjbCIsIHRjY19kZWNsYXJhdGlvbiwgMCkKK0RFRlRSRUVDT0RFIChDT05TVF9ERUNMLCAiY29uc3RfZGVjbCIsIHRjY19kZWNsYXJhdGlvbiwgMCkKK0RFRlRSRUVDT0RFIChQQVJNX0RFQ0wsICJwYXJtX2RlY2wiLCB0Y2NfZGVjbGFyYXRpb24sIDApCitERUZUUkVFQ09ERSAoVFlQRV9ERUNMLCAidHlwZV9kZWNsIiwgdGNjX2RlY2xhcmF0aW9uLCAwKQorREVGVFJFRUNPREUgKFJFU1VMVF9ERUNMLCAicmVzdWx0X2RlY2wiLCB0Y2NfZGVjbGFyYXRpb24sIDApCisKKy8qIEEgImRlY2xhcmF0aW9uIiBvZiBhIGRlYnVnIHRlbXBvcmFyeS4gIEl0IHNob3VsZCBvbmx5IGFwcGVhciBpbgorICAgREVCVUcgc3RtdHMuICAqLworREVGVFJFRUNPREUgKERFQlVHX0VYUFJfREVDTCwgImRlYnVnX2V4cHJfZGVjbCIsIHRjY19kZWNsYXJhdGlvbiwgMCkKKworLyogQSBuYW1lc3BhY2UgZGVjbGFyYXRpb24uICBOYW1lc3BhY2VzIGFwcGVhciBpbiBERUNMX0NPTlRFWFQgb2Ygb3RoZXIKKyAgIF9ERUNMcywgcHJvdmlkaW5nIGEgaGllcmFyY2h5IG9mIG5hbWVzLiAgKi8KK0RFRlRSRUVDT0RFIChOQU1FU1BBQ0VfREVDTCwgIm5hbWVzcGFjZV9kZWNsIiwgdGNjX2RlY2xhcmF0aW9uLCAwKQorCisvKiBBIGRlY2xhcmF0aW9uIGltcG9ydC4KKyAgIFRoZSBDKysgRkUgdXNlcyB0aGlzIHRvIHJlcHJlc2VudCBhIHVzaW5nLWRpcmVjdGl2ZTsgZWc6CisgICAidXNpbmcgbmFtZXNwYWNlIGZvbyIuCisgICBCdXQgaXQgY291bGQgYmUgdXNlZCB0byByZXByZXNlbnQgYW55IGRlY2xhcmF0aW9uIGltcG9ydCBjb25zdHJ1Y3QuCisgICBXaGVuZXZlciBhIGRlY2xhcmF0aW9uIGltcG9ydCBhcHBlYXJzIGluIGEgbGV4aWNhbCBibG9jaywgdGhlIEJMT0NLIG5vZGUKKyAgIHJlcHJlc2VudGluZyB0aGF0IGxleGljYWwgYmxvY2sgaW4gR0lNUExFIHdpbGwgY29udGFpbiBhbiBJTVBPUlRFRF9ERUNMCisgICBub2RlLCBsaW5rZWQgdmlhIEJMT0NLX1ZBUlMgYWNjZXNzb3Igb2YgdGhlIHNhaWQgQkxPQ0suCisgICBGb3IgYSBnaXZlbiBOT0RFIHdoaWNoIGNvZGUgaXMgSU1QT1JURURfREVDTCwKKyAgIElNUE9SVEVEX0RFQ0xfQVNTT0NJQVRFRF9ERUNMIChOT0RFKSBhY2Nlc3NlcyB0aGUgaW1wb3J0ZWQgZGVjbGFyYXRpb24uICAqLworREVGVFJFRUNPREUgKElNUE9SVEVEX0RFQ0wsICJpbXBvcnRlZF9kZWNsIiwgdGNjX2RlY2xhcmF0aW9uLCAwKQorCisvKiBBIHRyYW5zbGF0aW9uIHVuaXQuICBUaGlzIGlzIG5vdCB0ZWNobmljYWxseSBhIGRlY2xhcmF0aW9uLCBzaW5jZSBpdAorICAgY2FuJ3QgYmUgbG9va2VkIHVwLCBidXQgaXQncyBjbG9zZSBlbm91Z2guICAqLworREVGVFJFRUNPREUgKFRSQU5TTEFUSU9OX1VOSVRfREVDTCwgInRyYW5zbGF0aW9uX3VuaXRfZGVjbCIsXAorCSAgICAgdGNjX2RlY2xhcmF0aW9uLCAwKQorDAorLyogUmVmZXJlbmNlcyB0byBzdG9yYWdlLiAgKi8KKworLyogVGhlIG9yZGVyaW5nIG9mIHRoZSBmb2xsb3dpbmcgY29kZXMgaXMgb3B0aW1pemVkIGZvciB0aGUgY2xhc3NpZmljYXRpb24KKyAgIGluIGhhbmRsZWRfY29tcG9uZW50X3AuICBLZWVwIHRoZW0gaW4gYSBjb25zZWN1dGl2ZSBncm91cC4gICovCisKKy8qIFZhbHVlIGlzIHN0cnVjdHVyZSBvciB1bmlvbiBjb21wb25lbnQuCisgICBPcGVyYW5kIDAgaXMgdGhlIHN0cnVjdHVyZSBvciB1bmlvbiAoYW4gZXhwcmVzc2lvbikuCisgICBPcGVyYW5kIDEgaXMgdGhlIGZpZWxkIChhIG5vZGUgb2YgdHlwZSBGSUVMRF9ERUNMKS4KKyAgIE9wZXJhbmQgMiwgaWYgcHJlc2VudCwgaXMgdGhlIHZhbHVlIG9mIERFQ0xfRklFTERfT0ZGU0VULCBtZWFzdXJlZAorICAgaW4gdW5pdHMgb2YgREVDTF9PRkZTRVRfQUxJR04gLyBCSVRTX1BFUl9VTklULiAgKi8KK0RFRlRSRUVDT0RFIChDT01QT05FTlRfUkVGLCAiY29tcG9uZW50X3JlZiIsIHRjY19yZWZlcmVuY2UsIDMpCisKKy8qIFJlZmVyZW5jZSB0byBhIGdyb3VwIG9mIGJpdHMgd2l0aGluIGFuIG9iamVjdC4gIFNpbWlsYXIgdG8gQ09NUE9ORU5UX1JFRgorICAgZXhjZXB0IHRoZSBwb3NpdGlvbiBpcyBnaXZlbiBleHBsaWNpdGx5IHJhdGhlciB0aGFuIHZpYSBhIEZJRUxEX0RFQ0wuCisgICBPcGVyYW5kIDAgaXMgdGhlIHN0cnVjdHVyZSBvciB1bmlvbiBleHByZXNzaW9uOworICAgb3BlcmFuZCAxIGlzIGEgdHJlZSBnaXZpbmcgdGhlIGNvbnN0YW50IG51bWJlciBvZiBiaXRzIGJlaW5nIHJlZmVyZW5jZWQ7CisgICBvcGVyYW5kIDIgaXMgYSB0cmVlIGdpdmluZyB0aGUgY29uc3RhbnQgcG9zaXRpb24gb2YgdGhlIGZpcnN0IHJlZmVyZW5jZWQgYml0LgorICAgVGhlIHJlc3VsdCB0eXBlIHdpZHRoIGhhcyB0byBtYXRjaCB0aGUgbnVtYmVyIG9mIGJpdHMgcmVmZXJlbmNlZC4KKyAgIElmIHRoZSByZXN1bHQgdHlwZSBpcyBpbnRlZ3JhbCwgaXRzIHNpZ25lZG5lc3Mgc3BlY2lmaWVzIGhvdyBpdCBpcyBleHRlbmRlZAorICAgdG8gaXRzIG1vZGUgd2lkdGguICAqLworREVGVFJFRUNPREUgKEJJVF9GSUVMRF9SRUYsICJiaXRfZmllbGRfcmVmIiwgdGNjX3JlZmVyZW5jZSwgMykKKworLyogVXNlZCBvbmx5IG9uIGFuIG9wZXJhbmQgb2YgY29tcGxleCB0eXBlLCB0aGVzZSByZXR1cm4KKyAgIGEgdmFsdWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgY29tcG9uZW50IHR5cGUuICAqLworREVGVFJFRUNPREUgKFJFQUxQQVJUX0VYUFIsICJyZWFscGFydF9leHByIiwgdGNjX3JlZmVyZW5jZSwgMSkKK0RFRlRSRUVDT0RFIChJTUFHUEFSVF9FWFBSLCAiaW1hZ3BhcnRfZXhwciIsIHRjY19yZWZlcmVuY2UsIDEpCisKKy8qIEFycmF5IGluZGV4aW5nLgorICAgT3BlcmFuZCAwIGlzIHRoZSBhcnJheTsgb3BlcmFuZCAxIGlzIGEgKHNpbmdsZSkgYXJyYXkgaW5kZXguCisgICBPcGVyYW5kIDIsIGlmIHByZXNlbnQsIGlzIGEgY29weSBvZiBUWVBFX01JTl9WQUxVRSBvZiB0aGUgaW5kZXguCisgICBPcGVyYW5kIDMsIGlmIHByZXNlbnQsIGlzIHRoZSBlbGVtZW50IHNpemUsIG1lYXN1cmVkIGluIHVuaXRzIG9mCisgICB0aGUgYWxpZ25tZW50IG9mIHRoZSBlbGVtZW50IHR5cGUuICAqLworREVGVFJFRUNPREUgKEFSUkFZX1JFRiwgImFycmF5X3JlZiIsIHRjY19yZWZlcmVuY2UsIDQpCisKKy8qIExpa2V3aXNlLCBleGNlcHQgdGhhdCB0aGUgcmVzdWx0IGlzIGEgcmFuZ2UgKCJzbGljZSIpIG9mIHRoZSBhcnJheS4gIFRoZQorICAgc3RhcnRpbmcgaW5kZXggb2YgdGhlIHJlc3VsdGluZyBhcnJheSBpcyB0YWtlbiBmcm9tIG9wZXJhbmQgMSBhbmQgdGhlIHNpemUKKyAgIG9mIHRoZSByYW5nZSBpcyB0YWtlbiBmcm9tIHRoZSB0eXBlIG9mIHRoZSBleHByZXNzaW9uLiAgKi8KK0RFRlRSRUVDT0RFIChBUlJBWV9SQU5HRV9SRUYsICJhcnJheV9yYW5nZV9yZWYiLCB0Y2NfcmVmZXJlbmNlLCA0KQorCisvKiBUaGUgb3JkZXJpbmcgb2YgdGhlIGZvbGxvd2luZyBjb2RlcyBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBjaGVja2luZworICAgbWFjcm9zIGluIHRyZWUuaC4gIENoYW5naW5nIHRoZSBvcmRlciB3aWxsIGRlZ3JhZGUgdGhlIHNwZWVkIG9mIHRoZQorICAgY29tcGlsZXIuICBJTkRJUkVDVF9SRUYsIEFMSUdOX0lORElSRUNUX1JFRiwgTUlTQUxJR05FRF9JTkRJUkVDVF9SRUYuICAqLworCisvKiBDIHVuYXJ5IGAqJyBvciBQYXNjYWwgYF4nLiAgT25lIG9wZXJhbmQsIGFuIGV4cHJlc3Npb24gZm9yIGEgcG9pbnRlci4gICovCitERUZUUkVFQ09ERSAoSU5ESVJFQ1RfUkVGLCAiaW5kaXJlY3RfcmVmIiwgdGNjX3JlZmVyZW5jZSwgMSkKKworLyogTGlrZSBhYm92ZSwgYnV0IGFsaWducyB0aGUgcmVmZXJlbmNlZCBhZGRyZXNzIChpLmUsIGlmIHRoZSBhZGRyZXNzCisgICBpbiBQIGlzIG5vdCBhbGlnbmVkIG9uIFRZUEVfQUxJR04gYm91bmRhcnksIHRoZW4gJigqUCkgIT0gUCkuICAqLworREVGVFJFRUNPREUgKEFMSUdOX0lORElSRUNUX1JFRiwgImFsaWduX2luZGlyZWN0X3JlZiIsIHRjY19yZWZlcmVuY2UsIDEpCisKKy8qIFNhbWUgYXMgSU5ESVJFQ1RfUkVGLCBidXQgYWxzbyBzcGVjaWZpZXMgdGhlIGFsaWdubWVudCBvZiB0aGUgcmVmZXJlbmNlZAorICAgYWRkcmVzczoKKyAgIE9wZXJhbmQgMCBpcyB0aGUgcmVmZXJlbmNlZCBhZGRyZXNzIChhIHBvaW50ZXIpOworICAgT3BlcmFuZCAxIGlzIGFuIElOVEVHRVJfQ1NUIHdoaWNoIHJlcHJlc2VudHMgdGhlIGFsaWdubWVudCBvZiB0aGUgYWRkcmVzcywKKyAgIG9yIDAgaWYgdGhlIGFsaWdubWVudCBpcyB1bmtub3duLiAgKi8KK0RFRlRSRUVDT0RFIChNSVNBTElHTkVEX0lORElSRUNUX1JFRiwgIm1pc2FsaWduZWRfaW5kaXJlY3RfcmVmIiwgdGNjX3JlZmVyZW5jZSwgMikKKworLyogVXNlZCB0byByZXByZXNlbnQgbG9va3VwIG9mIHJ1bnRpbWUgdHlwZSBkZXBlbmRlbnQgZGF0YS4gIE9mdGVuIHRoaXMgaXMKKyAgIGEgcmVmZXJlbmNlIHRvIGEgdnRhYmxlLCBidXQgaXQgbmVlZG4ndCBiZS4gIE9wZXJhbmRzIGFyZToKKyAgIE9CSl9UWVBFX1JFRl9FWFBSOiBBbiBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRoZSB2YWx1ZSB0byB1c2UuCisgICBPQkpfVFlQRV9SRUZfT0JKRUNUOiBJcyB0aGUgb2JqZWN0IG9uIHdob3NlIGJlaGFsZiB0aGUgbG9va3VwIGlzCisgICBiZWluZyBwZXJmb3JtZWQuICBUaHJvdWdoIHRoaXMgdGhlIG9wdGltaXplcnMgbWF5IGJlIGFibGUgdG8gc3RhdGljYWxseQorICAgZGV0ZXJtaW5lIHRoZSBkeW5hbWljIHR5cGUgb2YgdGhlIG9iamVjdC4KKyAgIE9CSl9UWVBFX1JFRl9UT0tFTjogU29tZXRoaW5nIGZyb250LWVuZCBzcGVjaWZpYyB1c2VkIHRvIHJlc29sdmUgdGhlCisgICByZWZlcmVuY2UgdG8gc29tZXRoaW5nIHNpbXBsZXIsIHVzdWFsbHkgdG8gdGhlIGFkZHJlc3Mgb2YgYSBERUNMLgorICAgTmV2ZXIgdG91Y2hlZCBieSB0aGUgbWlkZGxlLWVuZC4gIEdvb2QgY2hvaWNlcyB3b3VsZCBiZSBlaXRoZXIgYW4KKyAgIGlkZW50aWZpZXIgb3IgYSB2dGFibGUgaW5kZXguICAqLworREVGVFJFRUNPREUgKE9CSl9UWVBFX1JFRiwgIm9ial90eXBlX3JlZiIsIHRjY19leHByZXNzaW9uLCAzKQorCisvKiBDb25zdHJ1Y3RvcjogcmV0dXJuIGFuIGFnZ3JlZ2F0ZSB2YWx1ZSBtYWRlIGZyb20gc3BlY2lmaWVkIGNvbXBvbmVudHMuCisgICBJbiBDLCB0aGlzIGlzIHVzZWQgb25seSBmb3Igc3RydWN0dXJlIGFuZCBhcnJheSBpbml0aWFsaXplcnMuCisgICBUaGUgb3BlcmFuZCBpcyBhIHNlcXVlbmNlIG9mIGNvbXBvbmVudCB2YWx1ZXMgbWFkZSBvdXQgb2YgYSBWRUMgb2YKKyAgIHN0cnVjdCBjb25zdHJ1Y3Rvcl9lbHQuCisKKyAgIEZvciBBUlJBWV9UWVBFOgorICAgVGhlIGZpZWxkIElOREVYIG9mIGVhY2ggY29uc3RydWN0b3JfZWx0IGlzIHRoZSBjb3JyZXNwb25kaW5nIGluZGV4LgorICAgSWYgdGhlIGluZGV4IGlzIGEgUkFOR0VfRVhQUiwgaXQgaXMgYSBzaG9ydC1oYW5kIGZvciBtYW55IG5vZGVzLAorICAgb25lIGZvciBlYWNoIGluZGV4IGluIHRoZSByYW5nZS4gIChJZiB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCBWQUxVRQorICAgaGFzIHNpZGUtZWZmZWN0cywgdGhleSBhcmUgZXZhbHVhdGVkIG9uY2UgZm9yIGVhY2ggZWxlbWVudC4gIFdyYXAgdGhlCisgICB2YWx1ZSBpbiBhIFNBVkVfRVhQUiBpZiB5b3Ugd2FudCB0byBldmFsdWF0ZSBzaWRlIGVmZmVjdHMgb25seSBvbmNlLikKKworICAgRm9yIFJFQ09SRF9UWVBFLCBVTklPTl9UWVBFLCBvciBRVUFMX1VOSU9OX1RZUEU6CisgICBUaGUgZmllbGQgSU5ERVggb2YgZWFjaCBub2RlIGlzIGEgRklFTERfREVDTC4gICovCitERUZUUkVFQ09ERSAoQ09OU1RSVUNUT1IsICJjb25zdHJ1Y3RvciIsIHRjY19leGNlcHRpb25hbCwgMCkKKworLyogVGhlIGV4cHJlc3Npb24gdHlwZXMgYXJlIG1vc3RseSBzdHJhaWdodGZvcndhcmQsIHdpdGggdGhlIGZvdXJ0aCBhcmd1bWVudAorICAgb2YgREVGVFJFRUNPREUgc2F5aW5nIGhvdyBtYW55IG9wZXJhbmRzIHRoZXJlIGFyZS4KKyAgIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLCB0aGUgb3BlcmFuZHMgYXJlIGV4cHJlc3Npb25zIGFuZCB0aGUKKyAgIHR5cGVzIG9mIGFsbCB0aGUgb3BlcmFuZHMgYW5kIHRoZSBleHByZXNzaW9uIG11c3QgYWxsIGJlIHRoZSBzYW1lLiAgKi8KKworLyogQ29udGFpbnMgdHdvIGV4cHJlc3Npb25zIHRvIGNvbXB1dGUsIG9uZSBmb2xsb3dlZCBieSB0aGUgb3RoZXIuCisgICB0aGUgZmlyc3QgdmFsdWUgaXMgaWdub3JlZC4gIFRoZSBzZWNvbmQgb25lJ3MgdmFsdWUgaXMgdXNlZC4gIFRoZQorICAgdHlwZSBvZiB0aGUgZmlyc3QgZXhwcmVzc2lvbiBuZWVkIG5vdCBhZ3JlZSB3aXRoIHRoZSBvdGhlciB0eXBlcy4gICovCitERUZUUkVFQ09ERSAoQ09NUE9VTkRfRVhQUiwgImNvbXBvdW5kX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMikKKworLyogQXNzaWdubWVudCBleHByZXNzaW9uLiAgT3BlcmFuZCAwIGlzIHRoZSB3aGF0IHRvIHNldDsgMSwgdGhlIG5ldyB2YWx1ZS4gICovCitERUZUUkVFQ09ERSAoTU9ESUZZX0VYUFIsICJtb2RpZnlfZXhwciIsIHRjY19leHByZXNzaW9uLCAyKQorCisvKiBJbml0aWFsaXphdGlvbiBleHByZXNzaW9uLiAgT3BlcmFuZCAwIGlzIHRoZSB2YXJpYWJsZSB0byBpbml0aWFsaXplOworICAgT3BlcmFuZCAxIGlzIHRoZSBpbml0aWFsaXplci4gIFRoaXMgZGlmZmVycyBmcm9tIE1PRElGWV9FWFBSIGluIHRoYXQgYW55CisgICByZWZlcmVuY2UgdG8gdGhlIHJlZmVyZW50IG9mIG9wZXJhbmQgMCB3aXRoaW4gb3BlcmFuZCAxIGlzIHVuZGVmaW5lZC4gICovCitERUZUUkVFQ09ERSAoSU5JVF9FWFBSLCAiaW5pdF9leHByIiwgdGNjX2V4cHJlc3Npb24sIDIpCisKKy8qIEZvciBUQVJHRVRfRVhQUiwgb3BlcmFuZCAwIGlzIHRoZSB0YXJnZXQgb2YgYW4gaW5pdGlhbGl6YXRpb24sCisgICBvcGVyYW5kIDEgaXMgdGhlIGluaXRpYWxpemVyIGZvciB0aGUgdGFyZ2V0LCB3aGljaCBtYXkgYmUgdm9pZAorICAgICBpZiBzaW1wbHkgZXhwYW5kaW5nIGl0IGluaXRpYWxpemVzIHRoZSB0YXJnZXQuCisgICBvcGVyYW5kIDIgaXMgdGhlIGNsZWFudXAgZm9yIHRoaXMgbm9kZSwgaWYgYW55LgorICAgb3BlcmFuZCAzIGlzIHRoZSBzYXZlZCBpbml0aWFsaXplciBhZnRlciB0aGlzIG5vZGUgaGFzIGJlZW4KKyAgIGV4cGFuZGVkIG9uY2U7IHRoaXMgaXMgc28gd2UgY2FuIHJlLWV4cGFuZCB0aGUgdHJlZSBsYXRlci4gICovCitERUZUUkVFQ09ERSAoVEFSR0VUX0VYUFIsICJ0YXJnZXRfZXhwciIsIHRjY19leHByZXNzaW9uLCA0KQorCisvKiBDb25kaXRpb25hbCBleHByZXNzaW9uICggLi4uID8gLi4uIDogLi4uICBpbiBDKS4KKyAgIE9wZXJhbmQgMCBpcyB0aGUgY29uZGl0aW9uLgorICAgT3BlcmFuZCAxIGlzIHRoZSB0aGVuLXZhbHVlLgorICAgT3BlcmFuZCAyIGlzIHRoZSBlbHNlLXZhbHVlLgorICAgT3BlcmFuZCAwIG1heSBiZSBvZiBhbnkgdHlwZS4KKyAgIE9wZXJhbmQgMSBtdXN0IGhhdmUgdGhlIHNhbWUgdHlwZSBhcyB0aGUgZW50aXJlIGV4cHJlc3Npb24sIHVubGVzcworICAgaXQgdW5jb25kaXRpb25hbGx5IHRocm93cyBhbiBleGNlcHRpb24sIGluIHdoaWNoIGNhc2UgaXQgc2hvdWxkCisgICBoYXZlIFZPSURfVFlQRS4gIFRoZSBzYW1lIGNvbnN0cmFpbnRzIGFwcGx5IHRvIG9wZXJhbmQgMi4gIFRoZQorICAgY29uZGl0aW9uIGluIG9wZXJhbmQgMCBtdXN0IGJlIG9mIGludGVncmFsIHR5cGUuCisKKyAgIEluIGNmZyBnaW1wbGUsIGlmIHlvdSBkbyBub3QgaGF2ZSBhIHNlbGVjdGlvbiBleHByZXNzaW9uLCBvcGVyYW5kcworICAgMSBhbmQgMiBhcmUgTlVMTC4gIFRoZSBvcGVyYW5kcyBhcmUgdGhlbiB0YWtlbiBmcm9tIHRoZSBjZmcgZWRnZXMuICovCitERUZUUkVFQ09ERSAoQ09ORF9FWFBSLCAiY29uZF9leHByIiwgdGNjX2V4cHJlc3Npb24sIDMpCisKKy8qIFZlY3RvciBjb25kaXRpb25hbCBleHByZXNzaW9uLiBJdCBpcyBsaWtlIENPTkRfRVhQUiwgYnV0IHdpdGgKKyAgIHZlY3RvciBvcGVyYW5kcy4KKworICAgQSA9IFZFQ19DT05EX0VYUFIgKCBYIDwgWSwgQiwgQykKKworICAgbWVhbnMKKworICAgZm9yIChpPTA7IGk8TjsgaSsrKQorICAgICBBW2ldID0gWFtpXSA8IFlbaV0gPyBCW2ldIDogQ1tpXTsKKyovCitERUZUUkVFQ09ERSAoVkVDX0NPTkRfRVhQUiwgInZlY19jb25kX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMykKKworLyogRGVjbGFyZSBsb2NhbCB2YXJpYWJsZXMsIGluY2x1ZGluZyBtYWtpbmcgUlRMIGFuZCBhbGxvY2F0aW5nIHNwYWNlLgorICAgQklORF9FWFBSX1ZBUlMgaXMgYSBjaGFpbiBvZiBWQVJfREVDTCBub2RlcyBmb3IgdGhlIHZhcmlhYmxlcy4KKyAgIEJJTkRfRVhQUl9CT0RZIGlzIHRoZSBib2R5LCB0aGUgZXhwcmVzc2lvbiB0byBiZSBjb21wdXRlZCB1c2luZworICAgdGhlIHZhcmlhYmxlcy4gIFRoZSB2YWx1ZSBvZiBvcGVyYW5kIDEgYmVjb21lcyB0aGF0IG9mIHRoZSBCSU5EX0VYUFIuCisgICBCSU5EX0VYUFJfQkxPQ0sgaXMgdGhlIEJMT0NLIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlc2UgYmluZGluZ3MKKyAgIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuICBJZiB0aGlzIEJJTkRfRVhQUiBpcyBhY3R1YWxseSBleHBhbmRlZCwKKyAgIHRoYXQgc2V0cyB0aGUgVFJFRV9VU0VEIGZsYWcgaW4gdGhlIEJMT0NLLgorCisgICBUaGUgQklORF9FWFBSIGlzIG5vdCByZXNwb25zaWJsZSBmb3IgaW5mb3JtaW5nIHBhcnNlcnMKKyAgIGFib3V0IHRoZXNlIHZhcmlhYmxlcy4gIElmIHRoZSBib2R5IGlzIGNvbWluZyBmcm9tIHRoZSBpbnB1dCBmaWxlLAorICAgdGhlbiB0aGUgY29kZSB0aGF0IGNyZWF0ZXMgdGhlIEJJTkRfRVhQUiBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvcgorICAgaW5mb3JtaW5nIHRoZSBwYXJzZXIgb2YgdGhlIHZhcmlhYmxlcy4KKworICAgSWYgdGhlIEJJTkRfRVhQUiBpcyBldmVyIGV4cGFuZGVkLCBpdHMgVFJFRV9VU0VEIGZsYWcgaXMgc2V0LgorICAgVGhpcyB0ZWxscyB0aGUgY29kZSBmb3IgZGVidWdnaW5nIHN5bWJvbCB0YWJsZXMgbm90IHRvIGlnbm9yZSB0aGUgQklORF9FWFBSLgorICAgSWYgdGhlIEJJTkRfRVhQUiBzaG91bGQgYmUgb3V0cHV0IGZvciBkZWJ1Z2dpbmcgYnV0IHdpbGwgbm90IGJlIGV4cGFuZGVkLAorICAgc2V0IHRoZSBUUkVFX1VTRUQgZmxhZyBieSBoYW5kLgorCisgICBJbiBvcmRlciBmb3IgdGhlIEJJTkRfRVhQUiB0byBiZSBrbm93biBhdCBhbGwsIHRoZSBjb2RlIHRoYXQgY3JlYXRlcyBpdAorICAgbXVzdCBhbHNvIGluc3RhbGwgaXQgYXMgYSBzdWJibG9jayBpbiB0aGUgdHJlZSBvZiBCTE9DSworICAgbm9kZXMgZm9yIHRoZSBmdW5jdGlvbi4gICovCitERUZUUkVFQ09ERSAoQklORF9FWFBSLCAiYmluZF9leHByIiwgdGNjX2V4cHJlc3Npb24sIDMpCisKKy8qIEZ1bmN0aW9uIGNhbGwuICBDQUxMX0VYUFJzIGFyZSByZXByZXNlbnRlZCBieSB2YXJpYWJseS1zaXplZCBleHByZXNzaW9uCisgICBub2Rlcy4gIFRoZXJlIGFyZSBhdCBsZWFzdCB0aHJlZSBmaXhlZCBvcGVyYW5kcy4gIE9wZXJhbmQgMCBpcyBhbgorICAgSU5URUdFUl9DU1Qgbm9kZSBjb250YWluaW5nIHRoZSB0b3RhbCBvcGVyYW5kIGNvdW50LCB0aGUgbnVtYmVyIG9mCisgICBhcmd1bWVudHMgcGx1cyAzLiAgT3BlcmFuZCAxIGlzIHRoZSBmdW5jdGlvbiwgd2hpbGUgb3BlcmFuZCAyIGlzCisgICBpcyBzdGF0aWMgY2hhaW4gYXJndW1lbnQsIG9yIE5VTEwuICBUaGUgcmVtYWluaW5nIG9wZXJhbmRzIGFyZSB0aGUKKyAgIGFyZ3VtZW50cyB0byB0aGUgY2FsbC4gICovCitERUZUUkVFQ09ERSAoQ0FMTF9FWFBSLCAiY2FsbF9leHByIiwgdGNjX3ZsX2V4cCwgMykKKworLyogU3BlY2lmeSBhIHZhbHVlIHRvIGNvbXB1dGUgYWxvbmcgd2l0aCBpdHMgY29ycmVzcG9uZGluZyBjbGVhbnVwLgorICAgT3BlcmFuZCAwIGlzIHRoZSBjbGVhbnVwIGV4cHJlc3Npb24uCisgICBUaGUgY2xlYW51cCBpcyBleGVjdXRlZCBieSB0aGUgZmlyc3QgZW5jbG9zaW5nIENMRUFOVVBfUE9JTlRfRVhQUiwKKyAgIHdoaWNoIG11c3QgZXhpc3QuICBUaGlzIGRpZmZlcnMgZnJvbSBUUllfQ0FUQ0hfRVhQUiBpbiB0aGF0IG9wZXJhbmQgMQorICAgaXMgYWx3YXlzIGV2YWx1YXRlZCB3aGVuIGNsZWFudXBzIGFyZSBydW4uICAqLworREVGVFJFRUNPREUgKFdJVEhfQ0xFQU5VUF9FWFBSLCAid2l0aF9jbGVhbnVwX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMSkKKworLyogU3BlY2lmeSBhIGNsZWFudXAgcG9pbnQuCisgICBPcGVyYW5kIDAgaXMgYW4gZXhwcmVzc2lvbiB0aGF0IG1heSBoYXZlIGNsZWFudXBzLiAgSWYgaXQgZG9lcywgdGhvc2UKKyAgIGNsZWFudXBzIGFyZSBleGVjdXRlZCBhZnRlciB0aGUgZXhwcmVzc2lvbiBpcyBleHBhbmRlZC4KKworICAgTm90ZSB0aGF0IGlmIHRoZSBleHByZXNzaW9uIGlzIGEgcmVmZXJlbmNlIHRvIHN0b3JhZ2UsIGl0IGlzIGZvcmNlZCBvdXQKKyAgIG9mIG1lbW9yeSBiZWZvcmUgdGhlIGNsZWFudXBzIGFyZSBydW4uICBUaGlzIGlzIG5lY2Vzc2FyeSB0byBoYW5kbGUKKyAgIGNhc2VzIHdoZXJlIHRoZSBjbGVhbnVwcyBtb2RpZnkgdGhlIHN0b3JhZ2UgcmVmZXJlbmNlZDsgaW4gdGhlCisgICBleHByZXNzaW9uICd0LmknLCBpZiAndCcgaXMgYSBzdHJ1Y3Qgd2l0aCBhbiBpbnRlZ2VyIG1lbWJlciAnaScgYW5kIGEKKyAgIGNsZWFudXAgd2hpY2ggbW9kaWZpZXMgJ2knLCB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gZGVwZW5kcyBvbgorICAgd2hldGhlciB0aGUgY2xlYW51cCBpcyBydW4gYmVmb3JlIG9yIGFmdGVyICd0LmknIGlzIGV2YWx1YXRlZC4gIFdoZW4KKyAgIGV4cGFuZF9leHByIGlzIHJ1biBvbiAndC5pJywgaXQgcmV0dXJucyBhIE1FTS4gIFRoaXMgaXMgbm90IGdvb2QgZW5vdWdoOworICAgdGhlIHZhbHVlIG9mICd0LmknIG11c3QgYmUgZm9yY2VkIG91dCBvZiBtZW1vcnkuCisKKyAgIEFzIGEgY29uc2VxdWVuY2UsIHRoZSBvcGVyYW5kIG9mIGEgQ0xFQU5VUF9QT0lOVF9FWFBSIG11c3Qgbm90IGhhdmUKKyAgIEJMS21vZGUsIGJlY2F1c2UgaXQgd2lsbCBub3QgYmUgZm9yY2VkIG91dCBvZiBtZW1vcnkuICAqLworREVGVFJFRUNPREUgKENMRUFOVVBfUE9JTlRfRVhQUiwgImNsZWFudXBfcG9pbnRfZXhwciIsIHRjY19leHByZXNzaW9uLCAxKQorCisvKiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgdXNlZCBpbiBsYW5ndWFnZXMgdGhhdCBoYXZlIHR5cGVzIHdoZXJlIHNvbWUKKyAgIGZpZWxkIGluIGFuIG9iamVjdCBvZiB0aGUgdHlwZSBjb250YWlucyBhIHZhbHVlIHRoYXQgaXMgdXNlZCBpbiB0aGUKKyAgIGNvbXB1dGF0aW9uIG9mIGFub3RoZXIgZmllbGQncyBvZmZzZXQgb3Igc2l6ZSBhbmQvb3IgdGhlIHNpemUgb2YgdGhlCisgICB0eXBlLiAgVGhlIHBvc2l0aW9ucyBhbmQvb3Igc2l6ZXMgb2YgZmllbGRzIGNhbiB2YXJ5IGZyb20gb2JqZWN0IHRvCisgICBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZSBvciBldmVuIGZvciBvbmUgYW5kIHRoZSBzYW1lIG9iamVjdCB3aXRoaW4KKyAgIGl0cyBzY29wZS4KKworICAgUmVjb3JkIHR5cGVzIHdpdGggZGlzY3JpbWluYW50cyBpbiBBZGEgb3Igc2NoZW1hIHR5cGVzIGluIFBhc2NhbCBhcmUKKyAgIGV4YW1wbGVzIG9mIHN1Y2ggdHlwZXMuICBUaGlzIG1lY2hhbmlzbSBpcyBhbHNvIHVzZWQgdG8gY3JlYXRlICJmYXQKKyAgIHBvaW50ZXJzIiBmb3IgdW5jb25zdHJhaW5lZCBhcnJheSB0eXBlcyBpbiBBZGE7IHRoZSBmYXQgcG9pbnRlciBpcyBhCisgICBzdHJ1Y3R1cmUgb25lIG9mIHdob3NlIGZpZWxkcyBpcyBhIHBvaW50ZXIgdG8gdGhlIGFjdHVhbCBhcnJheSB0eXBlCisgICBhbmQgdGhlIG90aGVyIGZpZWxkIGlzIGEgcG9pbnRlciB0byBhIHRlbXBsYXRlLCB3aGljaCBpcyBhIHN0cnVjdHVyZQorICAgY29udGFpbmluZyB0aGUgYm91bmRzIG9mIHRoZSBhcnJheS4gIFRoZSBib3VuZHMgaW4gdGhlIHR5cGUgcG9pbnRlZAorICAgdG8gYnkgdGhlIGZpcnN0IGZpZWxkIGluIHRoZSBmYXQgcG9pbnRlciByZWZlciB0byB0aGUgdmFsdWVzIGluIHRoZQorICAgdGVtcGxhdGUuCisKKyAgIFdoZW4geW91IHdpc2ggdG8gY29uc3RydWN0IHN1Y2ggYSB0eXBlIHlvdSBuZWVkICJzZWxmLXJlZmVyZW5jZXMiCisgICB0aGF0IGFsbG93IHlvdSB0byByZWZlcmVuY2UgdGhlIG9iamVjdCBoYXZpbmcgdGhpcyB0eXBlIGZyb20gdGhlCisgICBUWVBFIG5vZGUsIGkuZS4gd2l0aG91dCBoYXZpbmcgYSB2YXJpYWJsZSBpbnN0YW50aWF0aW5nIHRoaXMgdHlwZS4KKworICAgU3VjaCBhICJzZWxmLXJlZmVyZW5jZXMiIGlzIGRvbmUgdXNpbmcgYSBQTEFDRUhPTERFUl9FWFBSLiAgVGhpcyBpcworICAgYSBub2RlIHRoYXQgd2lsbCBsYXRlciBiZSByZXBsYWNlZCB3aXRoIHRoZSBvYmplY3QgYmVpbmcgcmVmZXJlbmNlZC4KKyAgIEl0cyB0eXBlIGlzIHRoYXQgb2YgdGhlIG9iamVjdCBhbmQgc2VsZWN0cyB3aGljaCBvYmplY3QgdG8gdXNlIGZyb20KKyAgIGEgY2hhaW4gb2YgcmVmZXJlbmNlcyAoc2VlIGJlbG93KS4gIE5vIG90aGVyIHNsb3RzIGFyZSB1c2VkIGluIHRoZQorICAgUExBQ0VIT0xERVJfRVhQUi4KKworICAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgdHlwZSBGT08gaXMgYSBSRUNPUkRfVFlQRSB3aXRoIGEgZmllbGQgQkFSLAorICAgYW5kIHlvdSBuZWVkIHRoZSB2YWx1ZSBvZiA8dmFyaWFibGU+LkJBUiB0byBjYWxjdWxhdGUgVFlQRV9TSVpFCisgICAoRk9PKSwganVzdCBzdWJzdGl0dXRlIDx2YXJpYWJsZT4gYWJvdmUgd2l0aCBhIFBMQUNFSE9MREVSX0VYUFIKKyAgIHdob3NlIFRSRUVfVFlQRSBpcyBGT08uICBUaGVuIGNvbnN0cnVjdCB5b3VyIENPTVBPTkVOVF9SRUYgd2l0aAorICAgdGhlIFBMQUNFSE9MREVSX0VYUFIgYXMgdGhlIGZpcnN0IG9wZXJhbmQgKHdoaWNoIGhhcyB0aGUgY29ycmVjdAorICAgdHlwZSkuICBMYXRlciwgd2hlbiB0aGUgc2l6ZSBpcyBuZWVkZWQgaW4gdGhlIHByb2dyYW0sIHRoZSBiYWNrLWVuZAorICAgd2lsbCBmaW5kIHRoaXMgUExBQ0VIT0xERVJfRVhQUiBhbmQgZ2VuZXJhdGUgY29kZSB0byBjYWxjdWxhdGUgdGhlCisgICBhY3R1YWwgc2l6ZSBhdCBydW4tdGltZS4gIEluIHRoZSBmb2xsb3dpbmcsIHdlIGRlc2NyaWJlIGhvdyB0aGlzCisgICBjYWxjdWxhdGlvbiBpcyBkb25lLgorCisgICBXaGVuIHdlIHdpc2ggdG8gZXZhbHVhdGUgYSBzaXplIG9yIG9mZnNldCwgd2UgY2hlY2sgd2hldGhlciBpdCBjb250YWlucyBhCisgICBQTEFDRUhPTERFUl9FWFBSLiAgSWYgaXQgZG9lcywgd2UgY2FsbCBzdWJzdGl0dXRlX3BsYWNlaG9sZGVyX2luX2V4cHIKKyAgIHBhc3NpbmcgYm90aCB0aGF0IHRyZWUgYW5kIGFuIGV4cHJlc3Npb24gd2l0aGluIHdoaWNoIHRoZSBvYmplY3QgbWF5IGJlCisgICBmb3VuZC4gIFRoZSBsYXR0ZXIgZXhwcmVzc2lvbiBpcyB0aGUgb2JqZWN0IGl0c2VsZiBpbiB0aGUgc2ltcGxlIGNhc2Ugb2YKKyAgIGFuIEFkYSByZWNvcmQgd2l0aCBkaXNjcmltaW5hbnQsIGJ1dCBpdCBjYW4gYmUgdGhlIGFycmF5IGluIHRoZSBjYXNlIG9mIGFuCisgICB1bmNvbnN0cmFpbmVkIGFycmF5LgorCisgICBJbiB0aGUgbGF0dGVyIGNhc2UsIHdlIG5lZWQgdGhlIGZhdCBwb2ludGVyLCBiZWNhdXNlIHRoZSBib3VuZHMgb2YKKyAgIHRoZSBhcnJheSBjYW4gb25seSBiZSBhY2Nlc3NlZCBmcm9tIGl0LiAgSG93ZXZlciwgd2UgcmVseSBoZXJlIG9uIHRoZQorICAgZmFjdCB0aGF0IHRoZSBleHByZXNzaW9uIGZvciB0aGUgYXJyYXkgY29udGFpbnMgdGhlIGRlcmVmZXJlbmNlIG9mCisgICB0aGUgZmF0IHBvaW50ZXIgdGhhdCBvYnRhaW5lZCB0aGUgYXJyYXkgcG9pbnRlci4gICovCisKKy8qIERlbm90ZXMgYSByZWNvcmQgdG8gbGF0ZXIgYmUgc3Vic3RpdHV0ZWQgYmVmb3JlIGV2YWx1YXRpbmcgdGhpcyBleHByZXNzaW9uLgorICAgVGhlIHR5cGUgb2YgdGhpcyBleHByZXNzaW9uIGlzIHVzZWQgdG8gZmluZCB0aGUgcmVjb3JkIHRvIHJlcGxhY2UgaXQuICAqLworREVGVFJFRUNPREUgKFBMQUNFSE9MREVSX0VYUFIsICJwbGFjZWhvbGRlcl9leHByIiwgdGNjX2V4Y2VwdGlvbmFsLCAwKQorCisvKiBTaW1wbGUgYXJpdGhtZXRpYy4gICovCitERUZUUkVFQ09ERSAoUExVU19FWFBSLCAicGx1c19leHByIiwgdGNjX2JpbmFyeSwgMikKK0RFRlRSRUVDT0RFIChNSU5VU19FWFBSLCAibWludXNfZXhwciIsIHRjY19iaW5hcnksIDIpCitERUZUUkVFQ09ERSAoTVVMVF9FWFBSLCAibXVsdF9leHByIiwgdGNjX2JpbmFyeSwgMikKKworLyogUG9pbnRlciBhZGRpdGlvbi4gIFRoZSBmaXJzdCBvcGVyYW5kIGlzIGFsd2F5cyBhIHBvaW50ZXIgYW5kIHRoZQorICAgc2Vjb25kIG9wZXJhbmQgaXMgYW4gaW50ZWdlciBvZiB0eXBlIHNpemV0eXBlLiAgKi8KK0RFRlRSRUVDT0RFIChQT0lOVEVSX1BMVVNfRVhQUiwgInBvaW50ZXJfcGx1c19leHByIiwgdGNjX2JpbmFyeSwgMikKKworLyogRGl2aXNpb24gZm9yIGludGVnZXIgcmVzdWx0IHRoYXQgcm91bmRzIHRoZSBxdW90aWVudCB0b3dhcmQgemVyby4gICovCitERUZUUkVFQ09ERSAoVFJVTkNfRElWX0VYUFIsICJ0cnVuY19kaXZfZXhwciIsIHRjY19iaW5hcnksIDIpCisKKy8qIERpdmlzaW9uIGZvciBpbnRlZ2VyIHJlc3VsdCB0aGF0IHJvdW5kcyB0aGUgcXVvdGllbnQgdG93YXJkIGluZmluaXR5LiAgKi8KK0RFRlRSRUVDT0RFIChDRUlMX0RJVl9FWFBSLCAiY2VpbF9kaXZfZXhwciIsIHRjY19iaW5hcnksIDIpCisKKy8qIERpdmlzaW9uIGZvciBpbnRlZ2VyIHJlc3VsdCB0aGF0IHJvdW5kcyB0b3dhcmQgbWludXMgaW5maW5pdHkuICAqLworREVGVFJFRUNPREUgKEZMT09SX0RJVl9FWFBSLCAiZmxvb3JfZGl2X2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorCisvKiBEaXZpc2lvbiBmb3IgaW50ZWdlciByZXN1bHQgdGhhdCByb3VuZHMgdG93YXJkIG5lYXJlc3QgaW50ZWdlci4gICovCitERUZUUkVFQ09ERSAoUk9VTkRfRElWX0VYUFIsICJyb3VuZF9kaXZfZXhwciIsIHRjY19iaW5hcnksIDIpCisKKy8qIEZvdXIga2luZHMgb2YgcmVtYWluZGVyIHRoYXQgZ28gd2l0aCB0aGUgZm91ciBraW5kcyBvZiBkaXZpc2lvbi4gICovCitERUZUUkVFQ09ERSAoVFJVTkNfTU9EX0VYUFIsICJ0cnVuY19tb2RfZXhwciIsIHRjY19iaW5hcnksIDIpCitERUZUUkVFQ09ERSAoQ0VJTF9NT0RfRVhQUiwgImNlaWxfbW9kX2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorREVGVFJFRUNPREUgKEZMT09SX01PRF9FWFBSLCAiZmxvb3JfbW9kX2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorREVGVFJFRUNPREUgKFJPVU5EX01PRF9FWFBSLCAicm91bmRfbW9kX2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorCisvKiBEaXZpc2lvbiBmb3IgcmVhbCByZXN1bHQuICAqLworREVGVFJFRUNPREUgKFJESVZfRVhQUiwgInJkaXZfZXhwciIsIHRjY19iaW5hcnksIDIpCisKKy8qIERpdmlzaW9uIHdoaWNoIGlzIG5vdCBzdXBwb3NlZCB0byBuZWVkIHJvdW5kaW5nLgorICAgVXNlZCBmb3IgcG9pbnRlciBzdWJ0cmFjdGlvbiBpbiBDLiAgKi8KK0RFRlRSRUVDT0RFIChFWEFDVF9ESVZfRVhQUiwgImV4YWN0X2Rpdl9leHByIiwgdGNjX2JpbmFyeSwgMikKKworLyogQ29udmVyc2lvbiBvZiByZWFsIHRvIGZpeGVkIHBvaW50IGJ5IHRydW5jYXRpb24uICAqLworREVGVFJFRUNPREUgKEZJWF9UUlVOQ19FWFBSLCAiZml4X3RydW5jX2V4cHIiLCB0Y2NfdW5hcnksIDEpCisKKy8qIENvbnZlcnNpb24gb2YgYW4gaW50ZWdlciB0byBhIHJlYWwuICAqLworREVGVFJFRUNPREUgKEZMT0FUX0VYUFIsICJmbG9hdF9leHByIiwgdGNjX3VuYXJ5LCAxKQorCisvKiBVbmFyeSBuZWdhdGlvbi4gICovCitERUZUUkVFQ09ERSAoTkVHQVRFX0VYUFIsICJuZWdhdGVfZXhwciIsIHRjY191bmFyeSwgMSkKKworLyogTWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMuICBXaGVuIHVzZWQgd2l0aCBmbG9hdGluZyBwb2ludCwgaWYgYm90aAorICAgb3BlcmFuZHMgYXJlIHplcm9zLCBvciBpZiBlaXRoZXIgb3BlcmFuZCBpcyBOYU4sIHRoZW4gaXQgaXMgdW5zcGVjaWZpZWQKKyAgIHdoaWNoIG9mIHRoZSB0d28gb3BlcmFuZHMgaXMgcmV0dXJuZWQgYXMgdGhlIHJlc3VsdC4gICovCitERUZUUkVFQ09ERSAoTUlOX0VYUFIsICJtaW5fZXhwciIsIHRjY19iaW5hcnksIDIpCitERUZUUkVFQ09ERSAoTUFYX0VYUFIsICJtYXhfZXhwciIsIHRjY19iaW5hcnksIDIpCisKKy8qIFJlcHJlc2VudHMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBvcGVyYW5kLgorCisgICBBbiBBQlNfRVhQUiBtdXN0IGhhdmUgZWl0aGVyIGFuIElOVEVHRVJfVFlQRSBvciBhIFJFQUxfVFlQRS4gIFRoZQorICAgb3BlcmFuZCBvZiB0aGUgQUJTX0VYUFIgbXVzdCBoYXZlIHRoZSBzYW1lIHR5cGUuICAqLworREVGVFJFRUNPREUgKEFCU19FWFBSLCAiYWJzX2V4cHIiLCB0Y2NfdW5hcnksIDEpCisKKy8qIFNoaWZ0IG9wZXJhdGlvbnMgZm9yIHNoaWZ0IGFuZCByb3RhdGUuCisgICBTaGlmdCBtZWFucyBsb2dpY2FsIHNoaWZ0IGlmIGRvbmUgb24gYW4KKyAgIHVuc2lnbmVkIHR5cGUsIGFyaXRobWV0aWMgc2hpZnQgaWYgZG9uZSBvbiBhIHNpZ25lZCB0eXBlLgorICAgVGhlIHNlY29uZCBvcGVyYW5kIGlzIHRoZSBudW1iZXIgb2YgYml0cyB0bworICAgc2hpZnQgYnk7IGl0IG5lZWQgbm90IGJlIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGZpcnN0IG9wZXJhbmQgYW5kIHJlc3VsdC4KKyAgIE5vdGUgdGhhdCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZCBpZiB0aGUgc2Vjb25kIG9wZXJhbmQgaXMgbGFyZ2VyCisgICB0aGFuIG9yIGVxdWFsIHRvIHRoZSBmaXJzdCBvcGVyYW5kJ3MgdHlwZSBzaXplLgorCisgICBUaGUgZmlyc3Qgb3BlcmFuZCBvZiBhIHNoaWZ0IGNhbiBoYXZlIGVpdGhlciBhbiBpbnRlZ2VyIG9yIGEKKyAgIChub24taW50ZWdlcikgZml4ZWQtcG9pbnQgdHlwZS4gIFdlIGZvbGxvdyB0aGUgSVNPL0lFQyBUUiAxODAzNzoyMDA0CisgICBzZW1hbnRpY3MgZm9yIHRoZSBsYXR0ZXIuCisKKyAgIFJvdGF0ZXMgYXJlIGRlZmluZWQgZm9yIGludGVnZXIgdHlwZXMgb25seS4gICovCitERUZUUkVFQ09ERSAoTFNISUZUX0VYUFIsICJsc2hpZnRfZXhwciIsIHRjY19iaW5hcnksIDIpCitERUZUUkVFQ09ERSAoUlNISUZUX0VYUFIsICJyc2hpZnRfZXhwciIsIHRjY19iaW5hcnksIDIpCitERUZUUkVFQ09ERSAoTFJPVEFURV9FWFBSLCAibHJvdGF0ZV9leHByIiwgdGNjX2JpbmFyeSwgMikKK0RFRlRSRUVDT0RFIChSUk9UQVRFX0VYUFIsICJycm90YXRlX2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorCisvKiBCaXR3aXNlIG9wZXJhdGlvbnMuICBPcGVyYW5kcyBoYXZlIHNhbWUgbW9kZSBhcyByZXN1bHQuICAqLworREVGVFJFRUNPREUgKEJJVF9JT1JfRVhQUiwgImJpdF9pb3JfZXhwciIsIHRjY19iaW5hcnksIDIpCitERUZUUkVFQ09ERSAoQklUX1hPUl9FWFBSLCAiYml0X3hvcl9leHByIiwgdGNjX2JpbmFyeSwgMikKK0RFRlRSRUVDT0RFIChCSVRfQU5EX0VYUFIsICJiaXRfYW5kX2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorREVGVFJFRUNPREUgKEJJVF9OT1RfRVhQUiwgImJpdF9ub3RfZXhwciIsIHRjY191bmFyeSwgMSkKKworLyogQU5ESUYgYW5kIE9SSUYgYWxsb3cgdGhlIHNlY29uZCBvcGVyYW5kIG5vdCB0byBiZSBjb21wdXRlZCBpZiB0aGUKKyAgIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGlzIGRldGVybWluZWQgZnJvbSB0aGUgZmlyc3Qgb3BlcmFuZC4gIEFORCwKKyAgIE9SLCBhbmQgWE9SIGFsd2F5cyBjb21wdXRlIHRoZSBzZWNvbmQgb3BlcmFuZCB3aGV0aGVyIGl0cyB2YWx1ZSBpcworICAgbmVlZGVkIG9yIG5vdCAoZm9yIHNpZGUgZWZmZWN0cykuICBUaGUgb3BlcmFuZCBtYXkgaGF2ZQorICAgQk9PTEVBTl9UWVBFIG9yIElOVEVHRVJfVFlQRS4gIEluIGVpdGhlciBjYXNlLCB0aGUgYXJndW1lbnQgd2lsbCBiZQorICAgZWl0aGVyIHplcm8gb3Igb25lLiAgRm9yIGV4YW1wbGUsIGEgVFJVVEhfTk9UX0VYUFIgd2lsbCBuZXZlciBoYXZlCisgICBhbiBJTlRFR0VSX1RZUEUgVkFSX0RFQ0wgYXMgaXRzIGFyZ3VtZW50OyBpbnN0ZWFkLCBhIE5FX0VYUFIgd2lsbCBiZQorICAgdXNlZCB0byBjb21wYXJlIHRoZSBWQVJfREVDTCB0byB6ZXJvLCB0aGVyZWJ5IG9idGFpbmluZyBhIG5vZGUgd2l0aAorICAgdmFsdWUgemVybyBvciBvbmUuICAqLworREVGVFJFRUNPREUgKFRSVVRIX0FORElGX0VYUFIsICJ0cnV0aF9hbmRpZl9leHByIiwgdGNjX2V4cHJlc3Npb24sIDIpCitERUZUUkVFQ09ERSAoVFJVVEhfT1JJRl9FWFBSLCAidHJ1dGhfb3JpZl9leHByIiwgdGNjX2V4cHJlc3Npb24sIDIpCitERUZUUkVFQ09ERSAoVFJVVEhfQU5EX0VYUFIsICJ0cnV0aF9hbmRfZXhwciIsIHRjY19leHByZXNzaW9uLCAyKQorREVGVFJFRUNPREUgKFRSVVRIX09SX0VYUFIsICJ0cnV0aF9vcl9leHByIiwgdGNjX2V4cHJlc3Npb24sIDIpCitERUZUUkVFQ09ERSAoVFJVVEhfWE9SX0VYUFIsICJ0cnV0aF94b3JfZXhwciIsIHRjY19leHByZXNzaW9uLCAyKQorREVGVFJFRUNPREUgKFRSVVRIX05PVF9FWFBSLCAidHJ1dGhfbm90X2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMSkKKworLyogUmVsYXRpb25hbCBvcGVyYXRvcnMuCisgICBgRVFfRVhQUicgYW5kIGBORV9FWFBSJyBhcmUgYWxsb3dlZCBmb3IgYW55IHR5cGVzLgorICAgVGhlIG90aGVycyBhcmUgYWxsb3dlZCBvbmx5IGZvciBpbnRlZ2VyIChvciBwb2ludGVyIG9yIGVudW1lcmFsKQorICAgb3IgcmVhbCB0eXBlcy4KKyAgIEluIGFsbCBjYXNlcyB0aGUgb3BlcmFuZHMgd2lsbCBoYXZlIHRoZSBzYW1lIHR5cGUsCisgICBhbmQgdGhlIHZhbHVlIGlzIGFsd2F5cyB0aGUgdHlwZSB1c2VkIGJ5IHRoZSBsYW5ndWFnZSBmb3IgYm9vbGVhbnMuICAqLworREVGVFJFRUNPREUgKExUX0VYUFIsICJsdF9leHByIiwgdGNjX2NvbXBhcmlzb24sIDIpCitERUZUUkVFQ09ERSAoTEVfRVhQUiwgImxlX2V4cHIiLCB0Y2NfY29tcGFyaXNvbiwgMikKK0RFRlRSRUVDT0RFIChHVF9FWFBSLCAiZ3RfZXhwciIsIHRjY19jb21wYXJpc29uLCAyKQorREVGVFJFRUNPREUgKEdFX0VYUFIsICJnZV9leHByIiwgdGNjX2NvbXBhcmlzb24sIDIpCitERUZUUkVFQ09ERSAoRVFfRVhQUiwgImVxX2V4cHIiLCB0Y2NfY29tcGFyaXNvbiwgMikKK0RFRlRSRUVDT0RFIChORV9FWFBSLCAibmVfZXhwciIsIHRjY19jb21wYXJpc29uLCAyKQorCisvKiBBZGRpdGlvbmFsIHJlbGF0aW9uYWwgb3BlcmF0b3JzIGZvciBmbG9hdGluZyBwb2ludCB1bm9yZGVyZWQuICAqLworREVGVFJFRUNPREUgKFVOT1JERVJFRF9FWFBSLCAidW5vcmRlcmVkX2V4cHIiLCB0Y2NfY29tcGFyaXNvbiwgMikKK0RFRlRSRUVDT0RFIChPUkRFUkVEX0VYUFIsICJvcmRlcmVkX2V4cHIiLCB0Y2NfY29tcGFyaXNvbiwgMikKKworLyogVGhlc2UgYXJlIGVxdWl2YWxlbnQgdG8gdW5vcmRlcmVkIG9yIC4uLiAgKi8KK0RFRlRSRUVDT0RFIChVTkxUX0VYUFIsICJ1bmx0X2V4cHIiLCB0Y2NfY29tcGFyaXNvbiwgMikKK0RFRlRSRUVDT0RFIChVTkxFX0VYUFIsICJ1bmxlX2V4cHIiLCB0Y2NfY29tcGFyaXNvbiwgMikKK0RFRlRSRUVDT0RFIChVTkdUX0VYUFIsICJ1bmd0X2V4cHIiLCB0Y2NfY29tcGFyaXNvbiwgMikKK0RFRlRSRUVDT0RFIChVTkdFX0VYUFIsICJ1bmdlX2V4cHIiLCB0Y2NfY29tcGFyaXNvbiwgMikKK0RFRlRSRUVDT0RFIChVTkVRX0VYUFIsICJ1bmVxX2V4cHIiLCB0Y2NfY29tcGFyaXNvbiwgMikKKworLyogVGhpcyBpcyB0aGUgcmV2ZXJzZSBvZiB1bmVxX2V4cHIuICAqLworREVGVFJFRUNPREUgKExUR1RfRVhQUiwgImx0Z3RfZXhwciIsIHRjY19jb21wYXJpc29uLCAyKQorCitERUZUUkVFQ09ERSAoUkFOR0VfRVhQUiwgInJhbmdlX2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorCisvKiBSZXByZXNlbnRzIGEgcmUtYXNzb2NpYXRpb24gYmFycmllciBmb3IgZmxvYXRpbmcgcG9pbnQgZXhwcmVzc2lvbnMKKyAgIGxpa2UgZXhwbGljaXQgcGFyZW50aGVzaXMgaW4gZm9ydHJhbi4gICovCitERUZUUkVFQ09ERSAoUEFSRU5fRVhQUiwgInBhcmVuX2V4cHIiLCB0Y2NfdW5hcnksIDEpCisKKy8qIFJlcHJlc2VudHMgYSBjb252ZXJzaW9uIG9mIHR5cGUgb2YgYSB2YWx1ZS4KKyAgIEFsbCBjb252ZXJzaW9ucywgaW5jbHVkaW5nIGltcGxpY2l0IG9uZXMsIG11c3QgYmUKKyAgIHJlcHJlc2VudGVkIGJ5IENPTlZFUlRfRVhQUiBvciBOT1BfRVhQUiBub2Rlcy4gICovCitERUZUUkVFQ09ERSAoQ09OVkVSVF9FWFBSLCAiY29udmVydF9leHByIiwgdGNjX3VuYXJ5LCAxKQorCisvKiBDb252ZXJzaW9uIG9mIGEgcG9pbnRlciB2YWx1ZSB0byBhIHBvaW50ZXIgdG8gYSBkaWZmZXJlbnQKKyAgIGFkZHJlc3Mgc3BhY2UuICAqLworREVGVFJFRUNPREUgKEFERFJfU1BBQ0VfQ09OVkVSVF9FWFBSLCAiYWRkcl9zcGFjZV9jb252ZXJ0X2V4cHIiLCB0Y2NfdW5hcnksIDEpCisKKy8qIENvbnZlcnNpb24gb2YgYSBmaXhlZC1wb2ludCB2YWx1ZSB0byBhbiBpbnRlZ2VyLCBhIHJlYWwsIG9yIGEgZml4ZWQtcG9pbnQKKyAgIHZhbHVlLiAgT3IgY29udmVyc2lvbiBvZiBhIGZpeGVkLXBvaW50IHZhbHVlIGZyb20gYW4gaW50ZWdlciwgYSByZWFsLCBvcgorICAgYSBmaXhlZC1wb2ludCB2YWx1ZS4gICovCitERUZUUkVFQ09ERSAoRklYRURfQ09OVkVSVF9FWFBSLCAiZml4ZWRfY29udmVydF9leHByIiwgdGNjX3VuYXJ5LCAxKQorCisvKiBSZXByZXNlbnRzIGEgY29udmVyc2lvbiBleHBlY3RlZCB0byByZXF1aXJlIG5vIGNvZGUgdG8gYmUgZ2VuZXJhdGVkLiAgKi8KK0RFRlRSRUVDT0RFIChOT1BfRVhQUiwgIm5vcF9leHByIiwgdGNjX3VuYXJ5LCAxKQorCisvKiBWYWx1ZSBpcyBzYW1lIGFzIGFyZ3VtZW50LCBidXQgZ3VhcmFudGVlZCBub3QgYW4gbHZhbHVlLiAgKi8KK0RFRlRSRUVDT0RFIChOT05fTFZBTFVFX0VYUFIsICJub25fbHZhbHVlX2V4cHIiLCB0Y2NfdW5hcnksIDEpCisKKy8qIFJlcHJlc2VudHMgdmlld2luZyBzb21ldGhpbmcgb2Ygb25lIHR5cGUgYXMgYmVpbmcgb2YgYSBzZWNvbmQgdHlwZS4KKyAgIFRoaXMgY29ycmVzcG9uZHMgdG8gYW4gIlVuY2hlY2tlZCBDb252ZXJzaW9uIiBpbiBBZGEgYW5kIHJvdWdobHkgdG8KKyAgIHRoZSBpZGlvbSAqKHR5cGUyICopJlggaW4gQy4gIFRoZSBvbmx5IG9wZXJhbmQgaXMgdGhlIHZhbHVlIHRvIGJlCisgICB2aWV3ZWQgYXMgYmVpbmcgb2YgYW5vdGhlciB0eXBlLiAgSXQgaXMgdW5kZWZpbmVkIGlmIHRoZSB0eXBlIG9mIHRoZQorICAgaW5wdXQgYW5kIG9mIHRoZSBleHByZXNzaW9uIGhhdmUgZGlmZmVyZW50IHNpemVzLgorCisgICBUaGlzIGNvZGUgbWF5IGFsc28gYmUgdXNlZCB3aXRoaW4gdGhlIExIUyBvZiBhIE1PRElGWV9FWFBSLCBpbiB3aGljaAorICAgY2FzZSBubyBhY3R1YWwgZGF0YSBtb3Rpb24gbWF5IG9jY3VyLiAgVFJFRV9BRERSRVNTQUJMRSB3aWxsIGJlIHNldCBpbgorICAgdGhpcyBjYXNlIGFuZCBHQ0MgbXVzdCBhYm9ydCBpZiBpdCBjb3VsZCBub3QgZG8gdGhlIG9wZXJhdGlvbiB3aXRob3V0CisgICBnZW5lcmF0aW5nIGluc25zLiAgKi8KK0RFRlRSRUVDT0RFIChWSUVXX0NPTlZFUlRfRVhQUiwgInZpZXdfY29udmVydF9leHByIiwgdGNjX3JlZmVyZW5jZSwgMSkKKworLyogQSBDT01QT1VORF9MSVRFUkFMX0VYUFIgcmVwcmVzZW50cyBhIGxpdGVyYWwgdGhhdCBpcyBwbGFjZWQgaW4gYSBERUNMLiAgVGhlCisgICBDT01QT1VORF9MSVRFUkFMX0VYUFJfREVDTF9FWFBSIGlzIHRoZSBhIERFQ0xfRVhQUiBjb250YWluaW5nIHRoZSBkZWNsCisgICBmb3IgdGhlIGFub255bW91cyBvYmplY3QgcmVwcmVzZW50ZWQgYnkgdGhlIENPTVBPVU5EX0xJVEVSQUw7CisgICB0aGUgREVDTF9JTklUSUFMIG9mIHRoYXQgZGVjbCBpcyB0aGUgQ09OU1RSVUNUT1IgdGhhdCBpbml0aWFsaXplcworICAgdGhlIGNvbXBvdW5kIGxpdGVyYWwuICAqLworREVGVFJFRUNPREUgKENPTVBPVU5EX0xJVEVSQUxfRVhQUiwgImNvbXBvdW5kX2xpdGVyYWxfZXhwciIsIHRjY19leHByZXNzaW9uLCAxKQorCisvKiBSZXByZXNlbnRzIHNvbWV0aGluZyB3ZSBjb21wdXRlZCBvbmNlIGFuZCB3aWxsIHVzZSBtdWx0aXBsZSB0aW1lcy4KKyAgIEZpcnN0IG9wZXJhbmQgaXMgdGhhdCBleHByZXNzaW9uLiAgQWZ0ZXIgaXQgaXMgZXZhbHVhdGVkIG9uY2UsIGl0CisgICB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSB0ZW1wb3JhcnkgdmFyaWFibGUgdGhhdCBob2xkcyB0aGUgdmFsdWUuICAqLworREVGVFJFRUNPREUgKFNBVkVfRVhQUiwgInNhdmVfZXhwciIsIHRjY19leHByZXNzaW9uLCAxKQorCisvKiAmIGluIEMuICBWYWx1ZSBpcyB0aGUgYWRkcmVzcyBhdCB3aGljaCB0aGUgb3BlcmFuZCdzIHZhbHVlIHJlc2lkZXMuCisgICBPcGVyYW5kIG1heSBoYXZlIGFueSBtb2RlLiAgUmVzdWx0IG1vZGUgaXMgUG1vZGUuICAqLworREVGVFJFRUNPREUgKEFERFJfRVhQUiwgImFkZHJfZXhwciIsIHRjY19leHByZXNzaW9uLCAxKQorCisvKiBPcGVyYW5kMCBpcyBhIGZ1bmN0aW9uIGNvbnN0YW50OyByZXN1bHQgaXMgcGFydCBOIG9mIGEgZnVuY3Rpb24KKyAgIGRlc2NyaXB0b3Igb2YgdHlwZSBwdHJfbW9kZS4gICovCitERUZUUkVFQ09ERSAoRkRFU0NfRVhQUiwgImZkZXNjX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMikKKworLyogR2l2ZW4gdHdvIHJlYWwgb3IgaW50ZWdlciBvcGVyYW5kcyBvZiB0aGUgc2FtZSB0eXBlLAorICAgcmV0dXJucyBhIGNvbXBsZXggdmFsdWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgY29tcGxleCB0eXBlLiAgKi8KK0RFRlRSRUVDT0RFIChDT01QTEVYX0VYUFIsICJjb21wbGV4X2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorCisvKiBDb21wbGV4IGNvbmp1Z2F0ZSBvZiBvcGVyYW5kLiAgVXNlZCBvbmx5IG9uIGNvbXBsZXggdHlwZXMuICAqLworREVGVFJFRUNPREUgKENPTkpfRVhQUiwgImNvbmpfZXhwciIsIHRjY191bmFyeSwgMSkKKworLyogTm9kZXMgZm9yICsrIGFuZCAtLSBpbiBDLgorICAgVGhlIHNlY29uZCBhcmcgaXMgaG93IG11Y2ggdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBieS4KKyAgIEZvciBhIHBvaW50ZXIsIGl0IHdvdWxkIGJlIHRoZSBzaXplIG9mIHRoZSBvYmplY3QgcG9pbnRlZCB0by4gICovCitERUZUUkVFQ09ERSAoUFJFREVDUkVNRU5UX0VYUFIsICJwcmVkZWNyZW1lbnRfZXhwciIsIHRjY19leHByZXNzaW9uLCAyKQorREVGVFJFRUNPREUgKFBSRUlOQ1JFTUVOVF9FWFBSLCAicHJlaW5jcmVtZW50X2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMikKK0RFRlRSRUVDT0RFIChQT1NUREVDUkVNRU5UX0VYUFIsICJwb3N0ZGVjcmVtZW50X2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMikKK0RFRlRSRUVDT0RFIChQT1NUSU5DUkVNRU5UX0VYUFIsICJwb3N0aW5jcmVtZW50X2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMikKKworLyogVXNlZCB0byBpbXBsZW1lbnQgYHZhX2FyZycuICAqLworREVGVFJFRUNPREUgKFZBX0FSR19FWFBSLCAidmFfYXJnX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMSkKKworLyogRXZhbHVhdGUgb3BlcmFuZCAxLiAgSWYgYW5kIG9ubHkgaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBkdXJpbmcKKyAgIHRoZSBldmFsdWF0aW9uIG9mIG9wZXJhbmQgMSwgZXZhbHVhdGUgb3BlcmFuZCAyLgorCisgICBUaGlzIGRpZmZlcnMgZnJvbSBUUllfRklOQUxMWV9FWFBSIGluIHRoYXQgb3BlcmFuZCAyIGlzIG5vdCBldmFsdWF0ZWQKKyAgIG9uIGEgbm9ybWFsIG9yIGp1bXAgZXhpdCwgb25seSBvbiBhbiBleGNlcHRpb24uICAqLworREVGVFJFRUNPREUgKFRSWV9DQVRDSF9FWFBSLCAidHJ5X2NhdGNoX2V4cHIiLCB0Y2Nfc3RhdGVtZW50LCAyKQorCisvKiBFdmFsdWF0ZSB0aGUgZmlyc3Qgb3BlcmFuZC4KKyAgIFRoZSBzZWNvbmQgb3BlcmFuZCBpcyBhIGNsZWFudXAgZXhwcmVzc2lvbiB3aGljaCBpcyBldmFsdWF0ZWQKKyAgIG9uIGFueSBleGl0IChub3JtYWwsIGV4Y2VwdGlvbiwgb3IganVtcCBvdXQpIGZyb20gdGhpcyBleHByZXNzaW9uLiAgKi8KK0RFRlRSRUVDT0RFIChUUllfRklOQUxMWV9FWFBSLCAidHJ5X2ZpbmFsbHkiLCB0Y2Nfc3RhdGVtZW50LCAyKQorDAorLyogVGhlc2UgdHlwZXMgb2YgZXhwcmVzc2lvbnMgaGF2ZSBubyB1c2VmdWwgdmFsdWUsCisgICBhbmQgYWx3YXlzIGhhdmUgc2lkZSBlZmZlY3RzLiAgKi8KKworLyogVXNlZCB0byByZXByZXNlbnQgYSBsb2NhbCBkZWNsYXJhdGlvbi4gVGhlIG9wZXJhbmQgaXMgREVDTF9FWFBSX0RFQ0wuICAqLworREVGVFJFRUNPREUgKERFQ0xfRVhQUiwgImRlY2xfZXhwciIsIHRjY19zdGF0ZW1lbnQsIDEpCisKKy8qIEEgbGFiZWwgZGVmaW5pdGlvbiwgZW5jYXBzdWxhdGVkIGFzIGEgc3RhdGVtZW50LgorICAgT3BlcmFuZCAwIGlzIHRoZSBMQUJFTF9ERUNMIG5vZGUgZm9yIHRoZSBsYWJlbCB0aGF0IGFwcGVhcnMgaGVyZS4KKyAgIFRoZSB0eXBlIHNob3VsZCBiZSB2b2lkIGFuZCB0aGUgdmFsdWUgc2hvdWxkIGJlIGlnbm9yZWQuICAqLworREVGVFJFRUNPREUgKExBQkVMX0VYUFIsICJsYWJlbF9leHByIiwgdGNjX3N0YXRlbWVudCwgMSkKKworLyogR09UTy4gIE9wZXJhbmQgMCBpcyBhIExBQkVMX0RFQ0wgbm9kZSBvciBhbiBleHByZXNzaW9uLgorICAgVGhlIHR5cGUgc2hvdWxkIGJlIHZvaWQgYW5kIHRoZSB2YWx1ZSBzaG91bGQgYmUgaWdub3JlZC4gICovCitERUZUUkVFQ09ERSAoR09UT19FWFBSLCAiZ290b19leHByIiwgdGNjX3N0YXRlbWVudCwgMSkKKworLyogUkVUVVJOLiAgRXZhbHVhdGVzIG9wZXJhbmQgMCwgdGhlbiByZXR1cm5zIGZyb20gdGhlIGN1cnJlbnQgZnVuY3Rpb24uCisgICBQcmVzdW1hYmx5IHRoYXQgb3BlcmFuZCBpcyBhbiBhc3NpZ25tZW50IHRoYXQgc3RvcmVzIGludG8gdGhlCisgICBSRVNVTFRfREVDTCB0aGF0IGhvbGQgdGhlIHZhbHVlIHRvIGJlIHJldHVybmVkLgorICAgVGhlIG9wZXJhbmQgbWF5IGJlIG51bGwuCisgICBUaGUgdHlwZSBzaG91bGQgYmUgdm9pZCBhbmQgdGhlIHZhbHVlIHNob3VsZCBiZSBpZ25vcmVkLiAgKi8KK0RFRlRSRUVDT0RFIChSRVRVUk5fRVhQUiwgInJldHVybl9leHByIiwgdGNjX3N0YXRlbWVudCwgMSkKKworLyogRXhpdCB0aGUgaW5uZXIgbW9zdCBsb29wIGNvbmRpdGlvbmFsbHkuICBPcGVyYW5kIDAgaXMgdGhlIGNvbmRpdGlvbi4KKyAgIFRoZSB0eXBlIHNob3VsZCBiZSB2b2lkIGFuZCB0aGUgdmFsdWUgc2hvdWxkIGJlIGlnbm9yZWQuICAqLworREVGVFJFRUNPREUgKEVYSVRfRVhQUiwgImV4aXRfZXhwciIsIHRjY19zdGF0ZW1lbnQsIDEpCisKKy8qIEEgbG9vcC4gIE9wZXJhbmQgMCBpcyB0aGUgYm9keSBvZiB0aGUgbG9vcC4KKyAgIEl0IG11c3QgY29udGFpbiBhbiBFWElUX0VYUFIgb3IgaXMgYW4gaW5maW5pdGUgbG9vcC4KKyAgIFRoZSB0eXBlIHNob3VsZCBiZSB2b2lkIGFuZCB0aGUgdmFsdWUgc2hvdWxkIGJlIGlnbm9yZWQuICAqLworREVGVFJFRUNPREUgKExPT1BfRVhQUiwgImxvb3BfZXhwciIsIHRjY19zdGF0ZW1lbnQsIDEpCisKKy8qIFN3aXRjaCBleHByZXNzaW9uLgorCisgICBUUkVFX1RZUEUgaXMgdGhlIG9yaWdpbmFsIHR5cGUgb2YgdGhlIGNvbmRpdGlvbiwgYmVmb3JlIGFueQorICAgbGFuZ3VhZ2UgcmVxdWlyZWQgdHlwZSBjb252ZXJzaW9ucy4gIEl0IG1heSBiZSBOVUxMLCBpbiB3aGljaCBjYXNlCisgICB0aGUgb3JpZ2luYWwgdHlwZSBhbmQgZmluYWwgdHlwZXMgYXJlIGFzc3VtZWQgdG8gYmUgdGhlIHNhbWUuCisKKyAgIE9wZXJhbmQgMCBpcyB0aGUgZXhwcmVzc2lvbiB1c2VkIHRvIHBlcmZvcm0gdGhlIGJyYW5jaCwKKyAgIE9wZXJhbmQgMSBpcyB0aGUgYm9keSBvZiB0aGUgc3dpdGNoLCB3aGljaCBwcm9iYWJseSBjb250YWlucworICAgICBDQVNFX0xBQkVMX0VYUFJzLiAgSXQgbWF5IGFsc28gYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSBvcGVyYW5kIDIKKyAgICAgbXVzdCBub3QgYmUgTlVMTC4KKyAgIE9wZXJhbmQgMiBpcyBlaXRoZXIgTlVMTF9UUkVFIG9yIGEgVFJFRV9WRUMgb2YgdGhlIENBU0VfTEFCRUxfRVhQUnMKKyAgICAgb2YgYWxsIHRoZSBjYXNlcy4gICovCitERUZUUkVFQ09ERSAoU1dJVENIX0VYUFIsICJzd2l0Y2hfZXhwciIsIHRjY19zdGF0ZW1lbnQsIDMpCisKKy8qIFVzZWQgdG8gcmVwcmVzZW50IGEgY2FzZSBsYWJlbC4gVGhlIG9wZXJhbmRzIGFyZSBDQVNFX0xPVyBhbmQKKyAgIENBU0VfSElHSCwgcmVzcGVjdGl2ZWx5LiBJZiBDQVNFX0xPVyBpcyBOVUxMX1RSRUUsIHRoZSBsYWJlbCBpcyBhCisgICAnZGVmYXVsdCcgbGFiZWwuIElmIENBU0VfSElHSCBpcyBOVUxMX1RSRUUsIHRoZSBsYWJlbCBpcyBhIG5vcm1hbCBjYXNlCisgICBsYWJlbC4gIENBU0VfTEFCRUwgaXMgdGhlIGNvcnJlc3BvbmRpbmcgTEFCRUxfREVDTC4gICovCitERUZUUkVFQ09ERSAoQ0FTRV9MQUJFTF9FWFBSLCAiY2FzZV9sYWJlbF9leHByIiwgdGNjX3N0YXRlbWVudCwgMykKKworLyogVXNlZCB0byByZXByZXNlbnQgYW4gaW5saW5lIGFzc2VtYmx5IHN0YXRlbWVudC4gIEFTTV9TVFJJTkcgcmV0dXJucyBhCisgICBTVFJJTkdfQ1NUIGZvciB0aGUgaW5zdHJ1Y3Rpb24gKGUuZy4sICJtb3YgeCwgeSIpLiBBU01fT1VUUFVUUywKKyAgIEFTTV9JTlBVVFMsIGFuZCBBU01fQ0xPQkJFUlMgcmVwcmVzZW50IHRoZSBvdXRwdXRzLCBpbnB1dHMsIGFuZCBjbG9iYmVycworICAgZm9yIHRoZSBzdGF0ZW1lbnQuICBBU01fTEFCRUxTLCBpZiBwcmVzZW50LCBpbmRpY2F0ZXMgdmFyaW91cyBkZXN0aW5hdGlvbnMKKyAgIGZvciB0aGUgYXNtOyBsYWJlbHMgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggb3V0cHV0cy4gICovCitERUZUUkVFQ09ERSAoQVNNX0VYUFIsICJhc21fZXhwciIsIHRjY19zdGF0ZW1lbnQsIDUpCisKKy8qIFZhcmlhYmxlIHJlZmVyZW5jZXMgZm9yIFNTQSBhbmFseXNpcy4gIE5ldyBTU0EgbmFtZXMgYXJlIGNyZWF0ZWQgZXZlcnkKKyAgIHRpbWUgYSB2YXJpYWJsZSBpcyBhc3NpZ25lZCBhIG5ldyB2YWx1ZS4gIFRoZSBTU0EgYnVpbGRlciB1c2VzIFNTQV9OQU1FCisgICBub2RlcyB0byBpbXBsZW1lbnQgU1NBIHZlcnNpb25pbmcuICAqLworREVGVFJFRUNPREUgKFNTQV9OQU1FLCAic3NhX25hbWUiLCB0Y2NfZXhjZXB0aW9uYWwsIDApCisKKy8qIFVzZWQgdG8gcmVwcmVzZW50IGEgdHlwZWQgZXhjZXB0aW9uIGhhbmRsZXIuICBDQVRDSF9UWVBFUyBpcyB0aGUgdHlwZSAob3IKKyAgIGxpc3Qgb2YgdHlwZXMpIGhhbmRsZWQsIGFuZCBDQVRDSF9CT0RZIGlzIHRoZSBjb2RlIGZvciB0aGUgaGFuZGxlci4gICovCitERUZUUkVFQ09ERSAoQ0FUQ0hfRVhQUiwgImNhdGNoX2V4cHIiLCB0Y2Nfc3RhdGVtZW50LCAyKQorCisvKiBVc2VkIHRvIHJlcHJlc2VudCBhbiBleGNlcHRpb24gc3BlY2lmaWNhdGlvbi4gIEVIX0ZJTFRFUl9UWVBFUyBpcyBhIGxpc3QKKyAgIG9mIGFsbG93ZWQgdHlwZXMsIGFuZCBFSF9GSUxURVJfRkFJTFVSRSBpcyBhbiBleHByZXNzaW9uIHRvIGV2YWx1YXRlIG9uCisgICBmYWlsdXJlLiAgRUhfRklMVEVSX01VU1RfTk9UX1RIUk9XIGNvbnRyb2xzIHdoaWNoIHJhbmdlIHR5cGUgdG8gdXNlIHdoZW4KKyAgIGV4cGFuZGluZy4gICovCitERUZUUkVFQ09ERSAoRUhfRklMVEVSX0VYUFIsICJlaF9maWx0ZXJfZXhwciIsIHRjY19zdGF0ZW1lbnQsIDIpCisKKy8qIE5vZGUgdXNlZCBmb3IgZGVzY3JpYmluZyBhIHByb3BlcnR5IHRoYXQgaXMga25vd24gYXQgY29tcGlsZQorICAgdGltZS4gICovCitERUZUUkVFQ09ERSAoU0NFVl9LTk9XTiwgInNjZXZfa25vd24iLCB0Y2NfZXhwcmVzc2lvbiwgMCkKKworLyogTm9kZSB1c2VkIGZvciBkZXNjcmliaW5nIGEgcHJvcGVydHkgdGhhdCBpcyBub3Qga25vd24gYXQgY29tcGlsZQorICAgdGltZS4gICovCitERUZUUkVFQ09ERSAoU0NFVl9OT1RfS05PV04sICJzY2V2X25vdF9rbm93biIsIHRjY19leHByZXNzaW9uLCAwKQorCisvKiBQb2x5bm9taWFsIGNoYWlucyBvZiByZWN1cnJlbmNlcy4KKyAgIFVuZGVyIHRoZSBmb3JtOiBjciA9IHtDSFJFQ19MRUZUIChjciksICssIENIUkVDX1JJR0hUIChjcil9LiAgKi8KK0RFRlRSRUVDT0RFIChQT0xZTk9NSUFMX0NIUkVDLCAicG9seW5vbWlhbF9jaHJlYyIsIHRjY19leHByZXNzaW9uLCAzKQorCisvKiBVc2VkIHRvIGNoYWluIGNoaWxkcmVuIG9mIGNvbnRhaW5lciBzdGF0ZW1lbnRzIHRvZ2V0aGVyLgorICAgVXNlIHRoZSBpbnRlcmZhY2UgaW4gdHJlZS1pdGVyYXRvci5oIHRvIGFjY2VzcyB0aGlzIG5vZGUuICAqLworREVGVFJFRUNPREUgKFNUQVRFTUVOVF9MSVNULCAic3RhdGVtZW50X2xpc3QiLCB0Y2NfZXhjZXB0aW9uYWwsIDApCisKKy8qIFByZWRpY2F0ZSBhc3NlcnRpb24uICBBcnRpZmljaWFsIGV4cHJlc3Npb24gZ2VuZXJhdGVkIGJ5IHRoZSBvcHRpbWl6ZXJzCisgICB0byBrZWVwIHRyYWNrIG9mIHByZWRpY2F0ZSB2YWx1ZXMuICBUaGlzIGV4cHJlc3Npb24gbWF5IG9ubHkgYXBwZWFyIG9uCisgICB0aGUgUkhTIG9mIGFzc2lnbm1lbnRzLgorCisgICBHaXZlbiBYID0gQVNTRVJUX0VYUFIgPFksIEVYUFI+LCB0aGUgb3B0aW1pemVycyBjYW4gaW5mZXIKKyAgIHR3byB0aGluZ3M6CisKKyAgIAkxLSBYIGlzIGEgY29weSBvZiBZLgorCTItIEVYUFIgaXMgYSBjb25kaXRpb25hbCBleHByZXNzaW9uIGFuZCBpcyBrbm93biB0byBiZSB0cnVlLgorCisgICBWYWxpZCBhbmQgdG8gYmUgZXhwZWN0ZWQgZm9ybXMgb2YgY29uZGl0aW9uYWwgZXhwcmVzc2lvbnMgYXJlCisgICB2YWxpZCBHSU1QTEUgY29uZGl0aW9uYWwgZXhwcmVzc2lvbnMgKGFzIGRlZmluZWQgYnkgaXNfZ2ltcGxlX2NvbmRleHByKQorICAgYW5kIGNvbmRpdGlvbmFsIGV4cHJlc3Npb25zIHdpdGggdGhlIGZpcnN0IG9wZXJhbmQgYmVpbmcgYQorICAgUExVU19FWFBSIHdpdGggYSB2YXJpYWJsZSBwb3NzaWJseSB3cmFwcGVkIGluIGEgTk9QX0VYUFIgZmlyc3QKKyAgIG9wZXJhbmQgYW5kIGFuIGludGVnZXIgY29uc3RhbnQgc2Vjb25kIG9wZXJhbmQuCisKKyAgIFRoZSB0eXBlIG9mIHRoZSBleHByZXNzaW9uIGlzIHRoZSBzYW1lIGFzIFkuICAqLworREVGVFJFRUNPREUgKEFTU0VSVF9FWFBSLCAiYXNzZXJ0X2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMikKKworLyogQmFzZSBjbGFzcyBpbmZvcm1hdGlvbi4gSG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgYSBjbGFzcyBhcyBhCisgICBiYXNlY2xhc3Mgb2YgaXRzZWxmIG9yIGFub3RoZXIgY2xhc3MuICAqLworREVGVFJFRUNPREUgKFRSRUVfQklORk8sICJ0cmVlX2JpbmZvIiwgdGNjX2V4Y2VwdGlvbmFsLCAwKQorCisvKiBSZWNvcmRzIHRoZSBzaXplIGZvciBhbiBleHByZXNzaW9uIG9mIHZhcmlhYmxlIHNpemUgdHlwZS4gIFRoaXMgaXMKKyAgIGZvciB1c2UgaW4gY29udGV4dHMgaW4gd2hpY2ggd2UgYXJlIGFjY2Vzc2luZyB0aGUgZW50aXJlIG9iamVjdCwKKyAgIHN1Y2ggYXMgZm9yIGEgZnVuY3Rpb24gY2FsbCwgb3IgYmxvY2sgY29weS4KKyAgIE9wZXJhbmQgMCBpcyB0aGUgcmVhbCBleHByZXNzaW9uLgorICAgT3BlcmFuZCAxIGlzIHRoZSBzaXplIG9mIHRoZSB0eXBlIGluIHRoZSBleHByZXNzaW9uLiAgKi8KK0RFRlRSRUVDT0RFIChXSVRIX1NJWkVfRVhQUiwgIndpdGhfc2l6ZV9leHByIiwgdGNjX2V4cHJlc3Npb24sIDIpCisKKy8qIEV4dHJhY3QgZWxlbWVudHMgZnJvbSB0d28gaW5wdXQgdmVjdG9ycyBPcGVyYW5kIDAgYW5kIE9wZXJhbmQgMQorICAgc2l6ZSBWUywgYWNjb3JkaW5nIHRvIHRoZSBvZmZzZXQgT0ZGIGRlZmluZWQgYnkgT3BlcmFuZCAyIGFzCisgICBmb2xsb3dzOgorICAgSWYgT0ZGID4gMCwgdGhlIGxhc3QgVlMgLSBPRkYgZWxlbWVudHMgb2YgdmVjdG9yIE9QMCBhcmUgY29uY2F0ZW5hdGVkIHRvCisgICB0aGUgZmlyc3QgT0ZGIGVsZW1lbnRzIG9mIHRoZSB2ZWN0b3IgT1AxLgorICAgSWYgT0ZGID09IDAsIHRoZW4gdGhlIHJldHVybmVkIHZlY3RvciBpcyBPUDEuCisgICBPbiBkaWZmZXJlbnQgdGFyZ2V0cyBPRkYgbWF5IHRha2UgZGlmZmVyZW50IGZvcm1zOyBJdCBjYW4gYmUgYW4gYWRkcmVzcywgaW4KKyAgIHdoaWNoIGNhc2UgaXRzIGxvdyBsb2cyKFZTKS0xIGJpdHMgZGVmaW5lIHRoZSBvZmZzZXQsIG9yIGl0IGNhbiBiZSBhIG1hc2sKKyAgIGdlbmVyYXRlZCBieSB0aGUgYnVpbHRpbiB0YXJnZXRtLnZlY3Rvcml6ZS5tYXNrX2Zvcl9sb2FkX2J1aWx0aW5fZGVjbC4gICovCitERUZUUkVFQ09ERSAoUkVBTElHTl9MT0FEX0VYUFIsICJyZWFsaWduX2xvYWQiLCB0Y2NfZXhwcmVzc2lvbiwgMykKKworLyogTG93LWxldmVsIG1lbW9yeSBhZGRyZXNzaW5nLiAgT3BlcmFuZHMgYXJlIFNZTUJPTCAoc3RhdGljIG9yIGdsb2JhbAorICAgdmFyaWFibGUpLCBCQVNFIChyZWdpc3RlciksIElOREVYIChyZWdpc3RlciksIFNURVAgKGludGVnZXIgY29uc3RhbnQpLAorICAgT0ZGU0VUIChpbnRlZ2VyIGNvbnN0YW50KS4gIENvcnJlc3BvbmRpbmcgYWRkcmVzcyBpcworICAgU1lNQk9MICsgQkFTRSArIFNURVAgKiBJTkRFWCArIE9GRlNFVC4gIE9ubHkgdmFyaWF0aW9ucyBhbmQgdmFsdWVzIHZhbGlkIG9uCisgICB0aGUgdGFyZ2V0IGFyZSBhbGxvd2VkLgorCisgICBUaGUgdHlwZSBvZiBTVEVQLCBJTkRFWCBhbmQgT0ZGU0VUIGlzIHNpemV0eXBlLiAgVGhlIHR5cGUgb2YgQkFTRSBpcworICAgc2l6ZXR5cGUgb3IgYSBwb2ludGVyIHR5cGUgKGlmIFNZTUJPTCBpcyBOVUxMKS4KKworICAgVGhlIHNpeHRoIGFyZ3VtZW50IGlzIHRoZSByZWZlcmVuY2UgdG8gdGhlIG9yaWdpbmFsIG1lbW9yeSBhY2Nlc3MsIHdoaWNoCisgICBpcyBwcmVzZXJ2ZWQgZm9yIHRoZSBwdXJwb3NlIG9mIGFsaWFzIGFuYWx5c2lzLiAgKi8KKworREVGVFJFRUNPREUgKFRBUkdFVF9NRU1fUkVGLCAidGFyZ2V0X21lbV9yZWYiLCB0Y2NfcmVmZXJlbmNlLCA2KQorCisvKiBUaGUgb3JkZXJpbmcgb2YgdGhlIGNvZGVzIGJldHdlZW4gT01QX1BBUkFMTEVMIGFuZCBPTVBfQ1JJVElDQUwgaXMKKyAgIGV4cG9zZWQgdG8gVFJFRV9SQU5HRV9DSEVDSy4gICovCisvKiBPcGVuTVAgLSAjcHJhZ21hIG9tcCBwYXJhbGxlbCBbY2xhdXNlMSAuLi4gY2xhdXNlTl0KKyAgIE9wZXJhbmQgMDogT01QX1BBUkFMTEVMX0JPRFk6IENvZGUgdG8gYmUgZXhlY3V0ZWQgYnkgYWxsIHRocmVhZHMuCisgICBPcGVyYW5kIDE6IE9NUF9QQVJBTExFTF9DTEFVU0VTOiBMaXN0IG9mIGNsYXVzZXMuICAqLworCitERUZUUkVFQ09ERSAoT01QX1BBUkFMTEVMLCAib21wX3BhcmFsbGVsIiwgdGNjX3N0YXRlbWVudCwgMikKKworLyogT3Blbk1QIC0gI3ByYWdtYSBvbXAgdGFzayBbY2xhdXNlMSAuLi4gY2xhdXNlTl0KKyAgIE9wZXJhbmQgMDogT01QX1RBU0tfQk9EWTogQ29kZSB0byBiZSBleGVjdXRlZCBieSBhbGwgdGhyZWFkcy4KKyAgIE9wZXJhbmQgMTogT01QX1RBU0tfQ0xBVVNFUzogTGlzdCBvZiBjbGF1c2VzLiAgKi8KKworREVGVFJFRUNPREUgKE9NUF9UQVNLLCAib21wX3Rhc2siLCB0Y2Nfc3RhdGVtZW50LCAyKQorCisvKiBPcGVuTVAgLSAjcHJhZ21hIG9tcCBmb3IgW2NsYXVzZTEgLi4uIGNsYXVzZU5dCisgICBPcGVyYW5kIDA6IE9NUF9GT1JfQk9EWTogTG9vcCBib2R5LgorICAgT3BlcmFuZCAxOiBPTVBfRk9SX0NMQVVTRVM6IExpc3Qgb2YgY2xhdXNlcy4KKyAgIE9wZXJhbmQgMjogT01QX0ZPUl9JTklUOiBJbml0aWFsaXphdGlvbiBjb2RlIG9mIHRoZSBmb3JtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlWQVIgPSBOMS4KKyAgIE9wZXJhbmQgMzogT01QX0ZPUl9DT05EOiBMb29wIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVZBUiB7IDwsID4sIDw9LCA+PSB9IE4yLgorICAgT3BlcmFuZCA0OiBPTVBfRk9SX0lOQ1I6IExvb3AgaW5kZXggaW5jcmVtZW50IG9mIHRoZSBmb3JtCisJCQkgICAgIAlWQVIgeyArPSwgLT0gfSBJTkNSLgorICAgT3BlcmFuZCA1OiBPTVBfRk9SX1BSRV9CT0RZOiBGaWxsZWQgYnkgdGhlIGdpbXBsaWZpZXIgd2l0aCB0aGluZ3MKKwlmcm9tIElOSVQsIENPTkQsIGFuZCBJTkNSIHRoYXQgYXJlIHRlY2huaWNhbGx5IHBhcnQgb2YgdGhlCisJT01QX0ZPUiBzdHJ1Y3R1cmVkIGJsb2NrLCBidXQgYXJlIGV2YWx1YXRlZCBiZWZvcmUgdGhlIGxvb3AKKwlib2R5IGJlZ2lucy4KKworICAgVkFSIG11c3QgYmUgYW4gaW50ZWdlciBvciBwb2ludGVyIHZhcmlhYmxlLCB3aGljaCBpcyBpbXBsaWNpdGx5IHRocmVhZAorICAgcHJpdmF0ZS4gIE4xLCBOMiBhbmQgSU5DUiBhcmUgcmVxdWlyZWQgdG8gYmUgbG9vcCBpbnZhcmlhbnQgaW50ZWdlcgorICAgZXhwcmVzc2lvbnMgdGhhdCBhcmUgZXZhbHVhdGVkIHdpdGhvdXQgYW55IHN5bmNocm9uaXphdGlvbi4KKyAgIFRoZSBldmFsdWF0aW9uIG9yZGVyLCBmcmVxdWVuY3kgb2YgZXZhbHVhdGlvbiBhbmQgc2lkZS1lZmZlY3RzIGFyZQorICAgdW5zcGVjaWZpZWQgYnkgdGhlIHN0YW5kYXJkLiAgKi8KK0RFRlRSRUVDT0RFIChPTVBfRk9SLCAib21wX2ZvciIsIHRjY19zdGF0ZW1lbnQsIDYpCisKKy8qIE9wZW5NUCAtICNwcmFnbWEgb21wIHNlY3Rpb25zIFtjbGF1c2UxIC4uLiBjbGF1c2VOXQorICAgT3BlcmFuZCAwOiBPTVBfU0VDVElPTlNfQk9EWTogU2VjdGlvbnMgYm9keS4KKyAgIE9wZXJhbmQgMTogT01QX1NFQ1RJT05TX0NMQVVTRVM6IExpc3Qgb2YgY2xhdXNlcy4gICovCitERUZUUkVFQ09ERSAoT01QX1NFQ1RJT05TLCAib21wX3NlY3Rpb25zIiwgdGNjX3N0YXRlbWVudCwgMikKKworLyogT3Blbk1QIC0gI3ByYWdtYSBvbXAgc2luZ2xlCisgICBPcGVyYW5kIDA6IE9NUF9TSU5HTEVfQk9EWTogU2luZ2xlIHNlY3Rpb24gYm9keS4KKyAgIE9wZXJhbmQgMTogT01QX1NJTkdMRV9DTEFVU0VTOiBMaXN0IG9mIGNsYXVzZXMuICAqLworREVGVFJFRUNPREUgKE9NUF9TSU5HTEUsICJvbXBfc2luZ2xlIiwgdGNjX3N0YXRlbWVudCwgMikKKworLyogT3Blbk1QIC0gI3ByYWdtYSBvbXAgc2VjdGlvbgorICAgT3BlcmFuZCAwOiBPTVBfU0VDVElPTl9CT0RZOiBTZWN0aW9uIGJvZHkuICAqLworREVGVFJFRUNPREUgKE9NUF9TRUNUSU9OLCAib21wX3NlY3Rpb24iLCB0Y2Nfc3RhdGVtZW50LCAxKQorCisvKiBPcGVuTVAgLSAjcHJhZ21hIG9tcCBtYXN0ZXIKKyAgIE9wZXJhbmQgMDogT01QX01BU1RFUl9CT0RZOiBNYXN0ZXIgc2VjdGlvbiBib2R5LiAgKi8KK0RFRlRSRUVDT0RFIChPTVBfTUFTVEVSLCAib21wX21hc3RlciIsIHRjY19zdGF0ZW1lbnQsIDEpCisKKy8qIE9wZW5NUCAtICNwcmFnbWEgb21wIG9yZGVyZWQKKyAgIE9wZXJhbmQgMDogT01QX09SREVSRURfQk9EWTogTWFzdGVyIHNlY3Rpb24gYm9keS4gICovCitERUZUUkVFQ09ERSAoT01QX09SREVSRUQsICJvbXBfb3JkZXJlZCIsIHRjY19zdGF0ZW1lbnQsIDEpCisKKy8qIE9wZW5NUCAtICNwcmFnbWEgb21wIGNyaXRpY2FsIFtuYW1lXQorICAgT3BlcmFuZCAwOiBPTVBfQ1JJVElDQUxfQk9EWTogQ3JpdGljYWwgc2VjdGlvbiBib2R5LgorICAgT3BlcmFuZCAxOiBPTVBfQ1JJVElDQUxfTkFNRTogSWRlbnRpZmllciBmb3IgY3JpdGljYWwgc2VjdGlvbi4gICovCitERUZUUkVFQ09ERSAoT01QX0NSSVRJQ0FMLCAib21wX2NyaXRpY2FsIiwgdGNjX3N0YXRlbWVudCwgMikKKworLyogT3Blbk1QIC0gI3ByYWdtYSBvbXAgYXRvbWljCisgICBPcGVyYW5kIDA6IFRoZSBhZGRyZXNzIGF0IHdoaWNoIHRoZSBhdG9taWMgb3BlcmF0aW9uIGlzIHRvIGJlIHBlcmZvcm1lZC4KKwlUaGlzIGFkZHJlc3Mgc2hvdWxkIGJlIHN0YWJpbGl6ZWQgd2l0aCBzYXZlX2V4cHIuCisgICBPcGVyYW5kIDE6IFRoZSBleHByZXNzaW9uIHRvIGV2YWx1YXRlLiAgV2hlbiB0aGUgb2xkIHZhbHVlIG9mIHRoZSBvYmplY3QKKwlhdCB0aGUgYWRkcmVzcyBpcyB1c2VkIGluIHRoZSBleHByZXNzaW9uLCBpdCBzaG91bGQgYXBwZWFyIGFzIGlmCisJYnVpbGRfZm9sZF9pbmRpcmVjdF9yZWYgb2YgdGhlIGFkZHJlc3MuICAqLworREVGVFJFRUNPREUgKE9NUF9BVE9NSUMsICJvbXBfYXRvbWljIiwgdGNjX3N0YXRlbWVudCwgMikKKworLyogT3Blbk1QIGNsYXVzZXMuICAqLworREVGVFJFRUNPREUgKE9NUF9DTEFVU0UsICJvbXBfY2xhdXNlIiwgdGNjX2V4Y2VwdGlvbmFsLCAwKQorCisvKiBSZWR1Y3Rpb24gb3BlcmF0aW9ucy4KKyAgIE9wZXJhdGlvbnMgdGhhdCB0YWtlIGEgdmVjdG9yIG9mIGVsZW1lbnRzIGFuZCAicmVkdWNlIiBpdCB0byBhIHNjYWxhcgorICAgcmVzdWx0IChlLmcuIHN1bW1pbmcgdGhlIGVsZW1lbnRzIG9mIHRoZSB2ZWN0b3IsIGZpbmRpbmcgdGhlIG1pbmltdW0gb3ZlcgorICAgdGhlIHZlY3RvciBlbGVtZW50cywgZXRjKS4KKyAgIE9wZXJhbmQgMCBpcyBhIHZlY3RvcjsgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHZlY3RvciBoYXMgdGhlIHJlc3VsdC4KKyAgIE9wZXJhbmQgMSBpcyBhIHZlY3Rvci4gICovCitERUZUUkVFQ09ERSAoUkVEVUNfTUFYX0VYUFIsICJyZWR1Y19tYXhfZXhwciIsIHRjY191bmFyeSwgMSkKK0RFRlRSRUVDT0RFIChSRURVQ19NSU5fRVhQUiwgInJlZHVjX21pbl9leHByIiwgdGNjX3VuYXJ5LCAxKQorREVGVFJFRUNPREUgKFJFRFVDX1BMVVNfRVhQUiwgInJlZHVjX3BsdXNfZXhwciIsIHRjY191bmFyeSwgMSkKKworLyogV2lkZW5pbmcgZG90LXByb2R1Y3QuCisgICBUaGUgZmlyc3QgdHdvIGFyZ3VtZW50cyBhcmUgb2YgdHlwZSB0MS4KKyAgIFRoZSB0aGlyZCBhcmd1bWVudCBhbmQgdGhlIHJlc3VsdCBhcmUgb2YgdHlwZSB0Miwgc3VjaCB0aGF0IHQyIGlzIGF0IGxlYXN0CisgICB0d2ljZSB0aGUgc2l6ZSBvZiB0MS4gRE9UX1BST0RfRVhQUihhcmcxLGFyZzIsYXJnMykgaXMgZXF1aXZhbGVudCB0bzoKKyAgIAl0bXAgPSBXSURFTl9NVUxUX0VYUFIoYXJnMSwgYXJnMik7CisgICAJYXJnMyA9IFBMVVNfRVhQUiAodG1wLCBhcmczKTsKKyAgIG9yOgorCXRtcCA9IFdJREVOX01VTFRfRVhQUihhcmcxLCBhcmcyKTsKKyAgICAgICAgYXJnMyA9IFdJREVOX1NVTV9FWFBSICh0bXAsIGFyZzMpOwkJICovCitERUZUUkVFQ09ERSAoRE9UX1BST0RfRVhQUiwgImRvdF9wcm9kX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMykKKworLyogV2lkZW5pbmcgc3VtbWF0aW9uLgorICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIG9mIHR5cGUgdDEuCisgICBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIG9mIHR5cGUgdDIsIHN1Y2ggdGhhdCB0MiBpcyBhdCBsZWFzdCB0d2ljZQorICAgdGhlIHNpemUgb2YgdDEuIFRoZSB0eXBlIG9mIHRoZSBlbnRpcmUgZXhwcmVzc2lvbiBpcyBhbHNvIHQyLgorICAgV0lERU5fU1VNX0VYUFIgaXMgZXF1aXZhbGVudCB0byBmaXJzdCB3aWRlbmluZyAocHJvbW90aW5nKQorICAgdGhlIGZpcnN0IGFyZ3VtZW50IGZyb20gdHlwZSB0MSB0byB0eXBlIHQyLCBhbmQgdGhlbiBzdW1taW5nIGl0CisgICB3aXRoIHRoZSBzZWNvbmQgYXJndW1lbnQuICAqLworREVGVFJFRUNPREUgKFdJREVOX1NVTV9FWFBSLCAid2lkZW5fc3VtX2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorCisvKiBXaWRlbmluZyBtdWx0aXBsaWNhdGlvbi4KKyAgIFRoZSB0d28gYXJndW1lbnRzIGFyZSBvZiB0eXBlIHQxLgorICAgVGhlIHJlc3VsdCBpcyBvZiB0eXBlIHQyLCBzdWNoIHRoYXQgdDIgaXMgYXQgbGVhc3QgdHdpY2UKKyAgIHRoZSBzaXplIG9mIHQxLiBXSURFTl9NVUxUX0VYUFIgaXMgZXF1aXZhbGVudCB0byBmaXJzdCB3aWRlbmluZyAocHJvbW90aW5nKQorICAgdGhlIGFyZ3VtZW50cyBmcm9tIHR5cGUgdDEgdG8gdHlwZSB0MiwgYW5kIHRoZW4gbXVsdGlwbHlpbmcgdGhlbS4gICovCitERUZUUkVFQ09ERSAoV0lERU5fTVVMVF9FWFBSLCAid2lkZW5fbXVsdF9leHByIiwgdGNjX2JpbmFyeSwgMikKKworLyogV2hvbGUgdmVjdG9yIGxlZnQvcmlnaHQgc2hpZnQgaW4gYml0cy4KKyAgIE9wZXJhbmQgMCBpcyBhIHZlY3RvciB0byBiZSBzaGlmdGVkLgorICAgT3BlcmFuZCAxIGlzIGFuIGludGVnZXIgc2hpZnQgYW1vdW50IGluIGJpdHMuICAqLworREVGVFJFRUNPREUgKFZFQ19MU0hJRlRfRVhQUiwgInZlY19sc2hpZnRfZXhwciIsIHRjY19iaW5hcnksIDIpCitERUZUUkVFQ09ERSAoVkVDX1JTSElGVF9FWFBSLCAidmVjX3JzaGlmdF9leHByIiwgdGNjX2JpbmFyeSwgMikKKwwKKy8qIFdpZGVuaW5nIHZlY3RvciBtdWx0aXBsaWNhdGlvbi4KKyAgIFRoZSB0d28gb3BlcmFuZHMgYXJlIHZlY3RvcnMgd2l0aCBOIGVsZW1lbnRzIG9mIHNpemUgUy4gTXVsdGlwbHlpbmcgdGhlCisgICBlbGVtZW50cyBvZiB0aGUgdHdvIHZlY3RvcnMgd2lsbCByZXN1bHQgaW4gTiBwcm9kdWN0cyBvZiBzaXplIDIqUy4KKyAgIFZFQ19XSURFTl9NVUxUX0hJX0VYUFIgY29tcHV0ZXMgdGhlIE4vMiBoaWdoIHByb2R1Y3RzLgorICAgVkVDX1dJREVOX01VTFRfTE9fRVhQUiBjb21wdXRlcyB0aGUgTi8yIGxvdyBwcm9kdWN0cy4gICovCitERUZUUkVFQ09ERSAoVkVDX1dJREVOX01VTFRfSElfRVhQUiwgIndpZGVuX211bHRfaGlfZXhwciIsIHRjY19iaW5hcnksIDIpCitERUZUUkVFQ09ERSAoVkVDX1dJREVOX01VTFRfTE9fRVhQUiwgIndpZGVuX211bHRfbG9fZXhwciIsIHRjY19iaW5hcnksIDIpCisKKy8qIFVucGFjayAoZXh0cmFjdCBhbmQgcHJvbW90ZS93aWRlbikgdGhlIGhpZ2gvbG93IGVsZW1lbnRzIG9mIHRoZSBpbnB1dAorICAgdmVjdG9yIGludG8gdGhlIG91dHB1dCB2ZWN0b3IuICBUaGUgaW5wdXQgdmVjdG9yIGhhcyB0d2ljZSBhcyBtYW55CisgICBlbGVtZW50cyBhcyB0aGUgb3V0cHV0IHZlY3RvciwgdGhhdCBhcmUgaGFsZiB0aGUgc2l6ZSBvZiB0aGUgZWxlbWVudHMKKyAgIG9mIHRoZSBvdXRwdXQgdmVjdG9yLiAgVGhpcyBpcyB1c2VkIHRvIHN1cHBvcnQgdHlwZSBwcm9tb3Rpb24uICovCitERUZUUkVFQ09ERSAoVkVDX1VOUEFDS19ISV9FWFBSLCAidmVjX3VucGFja19oaV9leHByIiwgdGNjX3VuYXJ5LCAxKQorREVGVFJFRUNPREUgKFZFQ19VTlBBQ0tfTE9fRVhQUiwgInZlY191bnBhY2tfbG9fZXhwciIsIHRjY191bmFyeSwgMSkKKworLyogVW5wYWNrIChleHRyYWN0KSB0aGUgaGlnaC9sb3cgZWxlbWVudHMgb2YgdGhlIGlucHV0IHZlY3RvciwgY29udmVydAorICAgZml4ZWQgcG9pbnQgdmFsdWVzIHRvIGZsb2F0aW5nIHBvaW50IGFuZCB3aWRlbiBlbGVtZW50cyBpbnRvIHRoZQorICAgb3V0cHV0IHZlY3Rvci4gIFRoZSBpbnB1dCB2ZWN0b3IgaGFzIHR3aWNlIGFzIG1hbnkgZWxlbWVudHMgYXMgdGhlIG91dHB1dAorICAgdmVjdG9yLCB0aGF0IGFyZSBoYWxmIHRoZSBzaXplIG9mIHRoZSBlbGVtZW50cyBvZiB0aGUgb3V0cHV0IHZlY3Rvci4gICovCitERUZUUkVFQ09ERSAoVkVDX1VOUEFDS19GTE9BVF9ISV9FWFBSLCAidmVjX3VucGFja19mbG9hdF9oaV9leHByIiwgdGNjX3VuYXJ5LCAxKQorREVGVFJFRUNPREUgKFZFQ19VTlBBQ0tfRkxPQVRfTE9fRVhQUiwgInZlY191bnBhY2tfZmxvYXRfbG9fZXhwciIsIHRjY191bmFyeSwgMSkKKworLyogUGFjayAoZGVtb3RlL25hcnJvdyBhbmQgbWVyZ2UpIHRoZSBlbGVtZW50cyBvZiB0aGUgdHdvIGlucHV0IHZlY3RvcnMKKyAgIGludG8gdGhlIG91dHB1dCB2ZWN0b3IgdXNpbmcgdHJ1bmNhdGlvbi9zYXR1cmF0aW9uLgorICAgVGhlIGVsZW1lbnRzIG9mIHRoZSBpbnB1dCB2ZWN0b3JzIGFyZSB0d2ljZSB0aGUgc2l6ZSBvZiB0aGUgZWxlbWVudHMgb2YgdGhlCisgICBvdXRwdXQgdmVjdG9yLiAgVGhpcyBpcyB1c2VkIHRvIHN1cHBvcnQgdHlwZSBkZW1vdGlvbi4gICovCitERUZUUkVFQ09ERSAoVkVDX1BBQ0tfVFJVTkNfRVhQUiwgInZlY19wYWNrX3RydW5jX2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorREVGVFJFRUNPREUgKFZFQ19QQUNLX1NBVF9FWFBSLCAidmVjX3BhY2tfc2F0X2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorCisvKiBDb252ZXJ0IGZsb2F0aW5nIHBvaW50IHZhbHVlcyBvZiB0aGUgdHdvIGlucHV0IHZlY3RvcnMgdG8gaW50ZWdlcgorICAgYW5kIHBhY2sgKG5hcnJvdyBhbmQgbWVyZ2UpIHRoZSBlbGVtZW50cyBpbnRvIHRoZSBvdXRwdXQgdmVjdG9yLiBUaGUKKyAgIGVsZW1lbnRzIG9mIHRoZSBpbnB1dCB2ZWN0b3IgYXJlIHR3aWNlIHRoZSBzaXplIG9mIHRoZSBlbGVtZW50cyBvZgorICAgdGhlIG91dHB1dCB2ZWN0b3IuICAqLworREVGVFJFRUNPREUgKFZFQ19QQUNLX0ZJWF9UUlVOQ19FWFBSLCAidmVjX3BhY2tfZml4X3RydW5jX2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorCisvKiBFeHRyYWN0IGV2ZW4vb2RkIGZpZWxkcyBmcm9tIHZlY3RvcnMuICAqLworREVGVFJFRUNPREUgKFZFQ19FWFRSQUNUX0VWRU5fRVhQUiwgInZlY19leHRyYWN0ZXZlbl9leHByIiwgdGNjX2JpbmFyeSwgMikKK0RFRlRSRUVDT0RFIChWRUNfRVhUUkFDVF9PRERfRVhQUiwgInZlY19leHRyYWN0b2RkX2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorCisvKiBNZXJnZSBpbnB1dCB2ZWN0b3JzIGludGVybGVhdmluZyB0aGVpciBmaWVsZHMuICAqLworREVGVFJFRUNPREUgKFZFQ19JTlRFUkxFQVZFX0hJR0hfRVhQUiwgInZlY19pbnRlcmxlYXZlaGlnaF9leHByIiwgdGNjX2JpbmFyeSwgMikKK0RFRlRSRUVDT0RFIChWRUNfSU5URVJMRUFWRV9MT1dfRVhQUiwgInZlY19pbnRlcmxlYXZlbG93X2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorCisvKiBQUkVESUNUX0VYUFIuICBTcGVjaWZ5IGhpbnQgZm9yIGJyYW5jaCBwcmVkaWN0aW9uLiAgVGhlCisgICBQUkVESUNUX0VYUFJfUFJFRElDVE9SIHNwZWNpZnkgcHJlZGljdG9yIGFuZCBQUkVESUNUX0VYUFJfT1VUQ09NRSB0aGUKKyAgIG91dGNvbWUgKDAgZm9yIG5vdCB0YWtlbiBhbmQgMSBmb3IgdGFrZW4pLiAgT25jZSB0aGUgcHJvZmlsZSBpcyBndWVzc2VkCisgICBhbGwgY29uZGl0aW9uYWwgYnJhbmNoZXMgbGVhZGluZyB0byBleGVjdXRpb24gcGF0aHMgZXhlY3V0aW5nIHRoZQorICAgUFJFRElDVF9FWFBSIHdpbGwgZ2V0IHByZWRpY3RlZCBieSB0aGUgc3BlY2lmaWVkIHByZWRpY3Rvci4gICovCitERUZUUkVFQ09ERSAoUFJFRElDVF9FWFBSLCAicHJlZGljdF9leHByIiwgdGNjX2V4cHJlc3Npb24sIDEpCisKKy8qIE9QVElNSVpBVElPTl9OT0RFLiAgTm9kZSB0byBzdG9yZSB0aGUgb3B0aW1pemF0aW9uIG9wdGlvbnMuICAqLworREVGVFJFRUNPREUgKE9QVElNSVpBVElPTl9OT0RFLCAib3B0aW1pemF0aW9uX25vZGUiLCB0Y2NfZXhjZXB0aW9uYWwsIDApCisKKy8qIFRBUkdFVF9PUFRJT05fTk9ERS4gIE5vZGUgdG8gc3RvcmUgdGhlIHRhcmdldCBzcGVjaWZpYyBvcHRpb25zLiAgKi8KK0RFRlRSRUVDT0RFIChUQVJHRVRfT1BUSU9OX05PREUsICJ0YXJnZXRfb3B0aW9uX25vZGUiLCB0Y2NfZXhjZXB0aW9uYWwsIDApCisKKy8qCitMb2NhbCB2YXJpYWJsZXM6Cittb2RlOmMKK0VuZDoKKyovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3RyZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTAzYzdkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3RyZWUuaApAQCAtMCwwICsxLDU0NDYgQEAKKy8qIEZyb250LWVuZCB0cmVlIGRlZmluaXRpb25zIGZvciBHTlUgY29tcGlsZXIuCisgICBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisgICAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX1RSRUVfSAorI2RlZmluZSBHQ0NfVFJFRV9ICisKKyNpbmNsdWRlICJoYXNodGFiLmgiCisjaW5jbHVkZSAibWFjaG1vZGUuaCIKKyNpbmNsdWRlICJpbnB1dC5oIgorI2luY2x1ZGUgInN0YXRpc3RpY3MuaCIKKyNpbmNsdWRlICJ2ZWMuaCIKKyNpbmNsdWRlICJkb3VibGUtaW50LmgiCisjaW5jbHVkZSAiYWxpYXMuaCIKKyNpbmNsdWRlICJvcHRpb25zLmgiCisKKy8qIENvZGVzIG9mIHRyZWUgbm9kZXMgKi8KKworI2RlZmluZSBERUZUUkVFQ09ERShTWU0sIFNUUklORywgVFlQRSwgTkFSR1MpICAgU1lNLAorI2RlZmluZSBFTkRfT0ZfQkFTRV9UUkVFX0NPREVTIExBU1RfQU5EX1VOVVNFRF9UUkVFX0NPREUsCisKK2VudW0gdHJlZV9jb2RlIHsKKyNpbmNsdWRlICJhbGwtdHJlZS5kZWYiCitNQVhfVFJFRV9DT0RFUworfTsKKworI3VuZGVmIERFRlRSRUVDT0RFCisjdW5kZWYgRU5EX09GX0JBU0VfVFJFRV9DT0RFUworCitleHRlcm4gdW5zaWduZWQgY2hhciB0cmVlX2NvbnRhaW5zX3N0cnVjdFtNQVhfVFJFRV9DT0RFU11bNjRdOworI2RlZmluZSBDT0RFX0NPTlRBSU5TX1NUUlVDVChDT0RFLCBTVFJVQ1QpICh0cmVlX2NvbnRhaW5zX3N0cnVjdFsoQ09ERSldWyhTVFJVQ1QpXSkKKworLyogTnVtYmVyIG9mIGxhbmd1YWdlLWluZGVwZW5kZW50IHRyZWUgY29kZXMuICAqLworI2RlZmluZSBOVU1fVFJFRV9DT0RFUyAoKGludCkgTEFTVF9BTkRfVU5VU0VEX1RSRUVfQ09ERSkKKworLyogVHJlZSBjb2RlIGNsYXNzZXMuICAqLworCisvKiBFYWNoIHRyZWVfY29kZSBoYXMgYW4gYXNzb2NpYXRlZCBjb2RlIGNsYXNzIHJlcHJlc2VudGVkIGJ5IGEKKyAgIFRSRUVfQ09ERV9DTEFTUy4gICovCisKK2VudW0gdHJlZV9jb2RlX2NsYXNzIHsKKyAgdGNjX2V4Y2VwdGlvbmFsLCAvKiBBbiBleGNlcHRpb25hbCBjb2RlIChmaXRzIG5vIGNhdGVnb3J5KS4gICovCisgIHRjY19jb25zdGFudCwgICAgLyogQSBjb25zdGFudC4gICovCisgIC8qIE9yZGVyIG9mIHRjY190eXBlIGFuZCB0Y2NfZGVjbGFyYXRpb24gaXMgaW1wb3J0YW50LiAgKi8KKyAgdGNjX3R5cGUsICAgICAgICAvKiBBIHR5cGUgb2JqZWN0IGNvZGUuICAqLworICB0Y2NfZGVjbGFyYXRpb24sIC8qIEEgZGVjbGFyYXRpb24gKGFsc28gc2VydmluZyBhcyB2YXJpYWJsZSByZWZzKS4gICovCisgIHRjY19yZWZlcmVuY2UsICAgLyogQSByZWZlcmVuY2UgdG8gc3RvcmFnZS4gICovCisgIHRjY19jb21wYXJpc29uLCAgLyogQSBjb21wYXJpc29uIGV4cHJlc3Npb24uICAqLworICB0Y2NfdW5hcnksICAgICAgIC8qIEEgdW5hcnkgYXJpdGhtZXRpYyBleHByZXNzaW9uLiAgKi8KKyAgdGNjX2JpbmFyeSwgICAgICAvKiBBIGJpbmFyeSBhcml0aG1ldGljIGV4cHJlc3Npb24uICAqLworICB0Y2Nfc3RhdGVtZW50LCAgIC8qIEEgc3RhdGVtZW50IGV4cHJlc3Npb24sIHdoaWNoIGhhdmUgc2lkZSBlZmZlY3RzCisJCSAgICAgIGJ1dCB1c3VhbGx5IG5vIGludGVyZXN0aW5nIHZhbHVlLiAgKi8KKyAgdGNjX3ZsX2V4cCwgICAgICAvKiBBIGZ1bmN0aW9uIGNhbGwgb3Igb3RoZXIgZXhwcmVzc2lvbiB3aXRoIGEKKwkJICAgICAgdmFyaWFibGUtbGVuZ3RoIG9wZXJhbmQgdmVjdG9yLiAgKi8KKyAgdGNjX2V4cHJlc3Npb24gICAvKiBBbnkgb3RoZXIgZXhwcmVzc2lvbi4gICovCit9OworCisvKiBFYWNoIHRyZWUgY29kZSBjbGFzcyBoYXMgYW4gYXNzb2NpYXRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24uCisgICBUaGVzZSBtdXN0IGNvcnJlc3BvbmQgdG8gdGhlIHRyZWVfY29kZV9jbGFzcyBlbnRyaWVzLiAgKi8KKworZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IHRyZWVfY29kZV9jbGFzc19zdHJpbmdzW107CisKKy8qIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRpbmcgQ0xBU1MuICAqLworCisjZGVmaW5lIFRSRUVfQ09ERV9DTEFTU19TVFJJTkcoQ0xBU1MpXAorICAgICAgICB0cmVlX2NvZGVfY2xhc3Nfc3RyaW5nc1soaW50KSAoQ0xBU1MpXQorCitleHRlcm4gY29uc3QgZW51bSB0cmVlX2NvZGVfY2xhc3MgdHJlZV9jb2RlX3R5cGVbXTsKKyNkZWZpbmUgVFJFRV9DT0RFX0NMQVNTKENPREUpCXRyZWVfY29kZV90eXBlWyhpbnQpIChDT0RFKV0KKworLyogTm9uemVybyBpZiBDT0RFIHJlcHJlc2VudHMgYW4gZXhjZXB0aW9uYWwgY29kZS4gICovCisKKyNkZWZpbmUgRVhDRVBUSU9OQUxfQ0xBU1NfUChDT0RFKVwKKwkoVFJFRV9DT0RFX0NMQVNTIChUUkVFX0NPREUgKENPREUpKSA9PSB0Y2NfZXhjZXB0aW9uYWwpCisKKy8qIE5vbnplcm8gaWYgQ09ERSByZXByZXNlbnRzIGEgY29uc3RhbnQuICAqLworCisjZGVmaW5lIENPTlNUQU5UX0NMQVNTX1AoQ09ERSlcCisJKFRSRUVfQ09ERV9DTEFTUyAoVFJFRV9DT0RFIChDT0RFKSkgPT0gdGNjX2NvbnN0YW50KQorCisvKiBOb256ZXJvIGlmIENPREUgcmVwcmVzZW50cyBhIHR5cGUuICAqLworCisjZGVmaW5lIFRZUEVfUChDT0RFKVwKKwkoVFJFRV9DT0RFX0NMQVNTIChUUkVFX0NPREUgKENPREUpKSA9PSB0Y2NfdHlwZSkKKworLyogTm9uemVybyBpZiBDT0RFIHJlcHJlc2VudHMgYSBkZWNsYXJhdGlvbi4gICovCisKKyNkZWZpbmUgREVDTF9QKENPREUpXAorICAgICAgICAoVFJFRV9DT0RFX0NMQVNTIChUUkVFX0NPREUgKENPREUpKSA9PSB0Y2NfZGVjbGFyYXRpb24pCisKKy8qIE5vbnplcm8gaWYgREVDTCByZXByZXNlbnRzIGEgVkFSX0RFQ0wgb3IgRlVOQ1RJT05fREVDTC4gICovCisKKyNkZWZpbmUgVkFSX09SX0ZVTkNUSU9OX0RFQ0xfUChERUNMKVwKKyAgKFRSRUVfQ09ERSAoREVDTCkgPT0gVkFSX0RFQ0wgfHwgVFJFRV9DT0RFIChERUNMKSA9PSBGVU5DVElPTl9ERUNMKQorCisvKiBOb256ZXJvIGlmIENPREUgcmVwcmVzZW50cyBhIElORElSRUNUX1JFRi4gIEtlZXAgdGhlc2UgY2hlY2tzIGluCisgICBhc2NlbmRpbmcgY29kZSBvcmRlci4gICovCisKKyNkZWZpbmUgSU5ESVJFQ1RfUkVGX1AoQ09ERSlcCisgIChUUkVFX0NPREUgKENPREUpID09IElORElSRUNUX1JFRiBcCisgICB8fCBUUkVFX0NPREUgKENPREUpID09IEFMSUdOX0lORElSRUNUX1JFRiBcCisgICB8fCBUUkVFX0NPREUgKENPREUpID09IE1JU0FMSUdORURfSU5ESVJFQ1RfUkVGKQorCisvKiBOb256ZXJvIGlmIENPREUgcmVwcmVzZW50cyBhIHJlZmVyZW5jZS4gICovCisKKyNkZWZpbmUgUkVGRVJFTkNFX0NMQVNTX1AoQ09ERSlcCisJKFRSRUVfQ09ERV9DTEFTUyAoVFJFRV9DT0RFIChDT0RFKSkgPT0gdGNjX3JlZmVyZW5jZSkKKworLyogTm9uemVybyBpZiBDT0RFIHJlcHJlc2VudHMgYSBjb21wYXJpc29uLiAgKi8KKworI2RlZmluZSBDT01QQVJJU09OX0NMQVNTX1AoQ09ERSlcCisJKFRSRUVfQ09ERV9DTEFTUyAoVFJFRV9DT0RFIChDT0RFKSkgPT0gdGNjX2NvbXBhcmlzb24pCisKKy8qIE5vbnplcm8gaWYgQ09ERSByZXByZXNlbnRzIGEgdW5hcnkgYXJpdGhtZXRpYyBleHByZXNzaW9uLiAgKi8KKworI2RlZmluZSBVTkFSWV9DTEFTU19QKENPREUpXAorCShUUkVFX0NPREVfQ0xBU1MgKFRSRUVfQ09ERSAoQ09ERSkpID09IHRjY191bmFyeSkKKworLyogTm9uemVybyBpZiBDT0RFIHJlcHJlc2VudHMgYSBiaW5hcnkgYXJpdGhtZXRpYyBleHByZXNzaW9uLiAgKi8KKworI2RlZmluZSBCSU5BUllfQ0xBU1NfUChDT0RFKVwKKwkoVFJFRV9DT0RFX0NMQVNTIChUUkVFX0NPREUgKENPREUpKSA9PSB0Y2NfYmluYXJ5KQorCisvKiBOb256ZXJvIGlmIENPREUgcmVwcmVzZW50cyBhIHN0YXRlbWVudCBleHByZXNzaW9uLiAgKi8KKworI2RlZmluZSBTVEFURU1FTlRfQ0xBU1NfUChDT0RFKVwKKwkoVFJFRV9DT0RFX0NMQVNTIChUUkVFX0NPREUgKENPREUpKSA9PSB0Y2Nfc3RhdGVtZW50KQorCisvKiBOb256ZXJvIGlmIENPREUgcmVwcmVzZW50cyBhIGZ1bmN0aW9uIGNhbGwtbGlrZSBleHByZXNzaW9uIHdpdGggYQorICAgdmFyaWFibGUtbGVuZ3RoIG9wZXJhbmQgdmVjdG9yLiAgKi8KKworI2RlZmluZSBWTF9FWFBfQ0xBU1NfUChDT0RFKVwKKwkoVFJFRV9DT0RFX0NMQVNTIChUUkVFX0NPREUgKENPREUpKSA9PSB0Y2NfdmxfZXhwKQorCisvKiBOb256ZXJvIGlmIENPREUgcmVwcmVzZW50cyBhbnkgb3RoZXIgZXhwcmVzc2lvbi4gICovCisKKyNkZWZpbmUgRVhQUkVTU0lPTl9DTEFTU19QKENPREUpXAorCShUUkVFX0NPREVfQ0xBU1MgKFRSRUVfQ09ERSAoQ09ERSkpID09IHRjY19leHByZXNzaW9uKQorCisvKiBSZXR1cm5zIG5vbnplcm8gaWZmIENPREUgcmVwcmVzZW50cyBhIHR5cGUgb3IgZGVjbGFyYXRpb24uICAqLworCisjZGVmaW5lIElTX1RZUEVfT1JfREVDTF9QKENPREUpXAorCShUWVBFX1AgKENPREUpIHx8IERFQ0xfUCAoQ09ERSkpCisKKy8qIFJldHVybnMgbm9uemVybyBpZmYgQ0xBU1MgaXMgdGhlIHRyZWUtY29kZSBjbGFzcyBvZiBhbgorICAgZXhwcmVzc2lvbi4gICovCisKKyNkZWZpbmUgSVNfRVhQUl9DT0RFX0NMQVNTKENMQVNTKVwKKwkoKENMQVNTKSA+PSB0Y2NfcmVmZXJlbmNlICYmIChDTEFTUykgPD0gdGNjX2V4cHJlc3Npb24pCisKKy8qIFJldHVybnMgbm9uemVybyBpZmYgTk9ERSBpcyBhbiBleHByZXNzaW9uIG9mIHNvbWUga2luZC4gICovCisKKyNkZWZpbmUgRVhQUl9QKE5PREUpIElTX0VYUFJfQ09ERV9DTEFTUyAoVFJFRV9DT0RFX0NMQVNTIChUUkVFX0NPREUgKE5PREUpKSkKKworLyogTnVtYmVyIG9mIGFyZ3VtZW50LXdvcmRzIGluIGVhY2gga2luZCBvZiB0cmVlLW5vZGUuICAqLworCitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciB0cmVlX2NvZGVfbGVuZ3RoW107CisjZGVmaW5lIFRSRUVfQ09ERV9MRU5HVEgoQ09ERSkJdHJlZV9jb2RlX2xlbmd0aFsoaW50KSAoQ09ERSldCisKKy8qIE5hbWVzIG9mIHRyZWUgY29tcG9uZW50cy4gICovCisKK2V4dGVybiBjb25zdCBjaGFyICpjb25zdCB0cmVlX2NvZGVfbmFtZVtdOworCisvKiBBIHZlY3RvcnMgb2YgdHJlZXMuICAqLworREVGX1ZFQ19QKHRyZWUpOworREVGX1ZFQ19BTExPQ19QKHRyZWUsZ2MpOworREVGX1ZFQ19BTExPQ19QKHRyZWUsaGVhcCk7CisKKy8qIFdlIGhhdmUgdG8gYmUgYWJsZSB0byB0ZWxsIGNncmFwaCBhYm91dCB0aGUgbmVlZGVkLW5lc3Mgb2YgdGhlIHRhcmdldAorICAgb2YgYW4gYWxpYXMuICBUaGlzIHJlcXVpcmVzIHRoYXQgdGhlIGRlY2wgaGF2ZSBiZWVuIGRlZmluZWQuICBBbGlhc2VzCisgICB0aGF0IHByZWNlZGUgdGhlaXIgZGVmaW5pdGlvbiBoYXZlIHRvIGJlIHF1ZXVlZCBmb3IgbGF0ZXIgcHJvY2Vzc2luZy4gICovCisKK3R5cGVkZWYgc3RydWN0IEdUWSgoKSkgYWxpYXNfcGFpcgoreworICB0cmVlIGRlY2w7CisgIHRyZWUgdGFyZ2V0OworfSBhbGlhc19wYWlyOworCisvKiBEZWZpbmUgZ2MnZCB2ZWN0b3IgdHlwZS4gICovCitERUZfVkVDX08oYWxpYXNfcGFpcik7CitERUZfVkVDX0FMTE9DX08oYWxpYXNfcGFpcixnYyk7CisKK2V4dGVybiBHVFkoKCkpIFZFQyhhbGlhc19wYWlyLGdjKSAqIGFsaWFzX3BhaXJzOworCisMCisvKiBDbGFzc2lmeSB3aGljaCBwYXJ0IG9mIHRoZSBjb21waWxlciBoYXMgZGVmaW5lZCBhIGdpdmVuIGJ1aWx0aW4gZnVuY3Rpb24uCisgICBOb3RlIHRoYXQgd2UgYXNzdW1lIGJlbG93IHRoYXQgdGhpcyBpcyBubyBtb3JlIHRoYW4gdHdvIGJpdHMuICAqLworZW51bSBidWlsdF9pbl9jbGFzcworeworICBOT1RfQlVJTFRfSU4gPSAwLAorICBCVUlMVF9JTl9GUk9OVEVORCwKKyAgQlVJTFRfSU5fTUQsCisgIEJVSUxUX0lOX05PUk1BTAorfTsKKworLyogTmFtZXMgZm9yIHRoZSBhYm92ZS4gICovCitleHRlcm4gY29uc3QgY2hhciAqY29uc3QgYnVpbHRfaW5fY2xhc3NfbmFtZXNbNF07CisKKy8qIENvZGVzIHRoYXQgaWRlbnRpZnkgdGhlIHZhcmlvdXMgYnVpbHQgaW4gZnVuY3Rpb25zCisgICBzbyB0aGF0IGV4cGFuZF9jYWxsIGNhbiBpZGVudGlmeSB0aGVtIHF1aWNrbHkuICAqLworCisjZGVmaW5lIERFRl9CVUlMVElOKEVOVU0sIE4sIEMsIFQsIExULCBCLCBGLCBOQSwgQVQsIElNLCBDT05EKSBFTlVNLAorZW51bSBidWlsdF9pbl9mdW5jdGlvbgoreworI2luY2x1ZGUgImJ1aWx0aW5zLmRlZiIKKworICAvKiBDb21wbGV4IGRpdmlzaW9uIHJvdXRpbmVzIGluIGxpYmdjYy4gIFRoZXNlIGFyZSBkb25lIHZpYSBidWlsdGlucworICAgICBiZWNhdXNlIGVtaXRfbGlicmFyeV9jYWxsX3ZhbHVlIGNhbid0IGhhbmRsZSBjb21wbGV4IHZhbHVlcy4gICovCisgIEJVSUxUX0lOX0NPTVBMRVhfTVVMX01JTiwKKyAgQlVJTFRfSU5fQ09NUExFWF9NVUxfTUFYCisgICAgPSBCVUlMVF9JTl9DT01QTEVYX01VTF9NSU4KKyAgICAgICsgTUFYX01PREVfQ09NUExFWF9GTE9BVAorICAgICAgLSBNSU5fTU9ERV9DT01QTEVYX0ZMT0FULAorCisgIEJVSUxUX0lOX0NPTVBMRVhfRElWX01JTiwKKyAgQlVJTFRfSU5fQ09NUExFWF9ESVZfTUFYCisgICAgPSBCVUlMVF9JTl9DT01QTEVYX0RJVl9NSU4KKyAgICAgICsgTUFYX01PREVfQ09NUExFWF9GTE9BVAorICAgICAgLSBNSU5fTU9ERV9DT01QTEVYX0ZMT0FULAorCisgIC8qIFVwcGVyIGJvdW5kIG9uIG5vbi1sYW5ndWFnZS1zcGVjaWZpYyBidWlsdGlucy4gICovCisgIEVORF9CVUlMVElOUworfTsKKyN1bmRlZiBERUZfQlVJTFRJTgorCisvKiBOYW1lcyBmb3IgdGhlIGFib3ZlLiAgKi8KK2V4dGVybiBjb25zdCBjaGFyICogYnVpbHRfaW5fbmFtZXNbKGludCkgRU5EX0JVSUxUSU5TXTsKKworLyogSGVscGVyIG1hY3JvcyBmb3IgbWF0aCBidWlsdGlucy4gICovCisKKyNkZWZpbmUgQlVJTFRJTl9FWFAxMF9QKEZOKSBcCisgKChGTikgPT0gQlVJTFRfSU5fRVhQMTAgfHwgKEZOKSA9PSBCVUlMVF9JTl9FWFAxMEYgfHwgKEZOKSA9PSBCVUlMVF9JTl9FWFAxMEwgXAorICB8fCAoRk4pID09IEJVSUxUX0lOX1BPVzEwIHx8IChGTikgPT0gQlVJTFRfSU5fUE9XMTBGIHx8IChGTikgPT0gQlVJTFRfSU5fUE9XMTBMKQorCisjZGVmaW5lIEJVSUxUSU5fRVhQT05FTlRfUChGTikgKEJVSUxUSU5fRVhQMTBfUCAoRk4pIFwKKyAgfHwgKEZOKSA9PSBCVUlMVF9JTl9FWFAgfHwgKEZOKSA9PSBCVUlMVF9JTl9FWFBGIHx8IChGTikgPT0gQlVJTFRfSU5fRVhQTCBcCisgIHx8IChGTikgPT0gQlVJTFRfSU5fRVhQMiB8fCAoRk4pID09IEJVSUxUX0lOX0VYUDJGIHx8IChGTikgPT0gQlVJTFRfSU5fRVhQMkwpCisKKyNkZWZpbmUgQlVJTFRJTl9TUVJUX1AoRk4pIFwKKyAoKEZOKSA9PSBCVUlMVF9JTl9TUVJUIHx8IChGTikgPT0gQlVJTFRfSU5fU1FSVEYgfHwgKEZOKSA9PSBCVUlMVF9JTl9TUVJUTCkKKworI2RlZmluZSBCVUlMVElOX0NCUlRfUChGTikgXAorICgoRk4pID09IEJVSUxUX0lOX0NCUlQgfHwgKEZOKSA9PSBCVUlMVF9JTl9DQlJURiB8fCAoRk4pID09IEJVSUxUX0lOX0NCUlRMKQorCisjZGVmaW5lIEJVSUxUSU5fUk9PVF9QKEZOKSAoQlVJTFRJTl9TUVJUX1AgKEZOKSB8fCBCVUlMVElOX0NCUlRfUCAoRk4pKQorCisjZGVmaW5lIENBU0VfRkxUX0ZOKEZOKSBjYXNlIEZOOiBjYXNlIEZOIyNGOiBjYXNlIEZOIyNMCisjZGVmaW5lIENBU0VfRkxUX0ZOX1JFRU5UKEZOKSBjYXNlIEZOIyNfUjogY2FzZSBGTiMjRl9SOiBjYXNlIEZOIyNMX1IKKyNkZWZpbmUgQ0FTRV9JTlRfRk4oRk4pIGNhc2UgRk46IGNhc2UgRk4jI0w6IGNhc2UgRk4jI0xMCisKKy8qIEFuIGFycmF5IG9mIF9ERUNMIHRyZWVzIGZvciB0aGUgYWJvdmUuICAqLworZXh0ZXJuIEdUWSgoKSkgdHJlZSBidWlsdF9pbl9kZWNsc1soaW50KSBFTkRfQlVJTFRJTlNdOworZXh0ZXJuIEdUWSgoKSkgdHJlZSBpbXBsaWNpdF9idWlsdF9pbl9kZWNsc1soaW50KSBFTkRfQlVJTFRJTlNdOworDAorLyogSW4gYW4gT01QX0NMQVVTRSBub2RlLiAgKi8KKworLyogTnVtYmVyIG9mIG9wZXJhbmRzIGFuZCBuYW1lcyBmb3IgZWFjaCBjbGF1c2UuICAqLworZXh0ZXJuIHVuc2lnbmVkIGNvbnN0IGNoYXIgb21wX2NsYXVzZV9udW1fb3BzW107CitleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG9tcF9jbGF1c2VfY29kZV9uYW1lW107CisKKy8qIENsYXVzZSBjb2Rlcy4gIERvIG5vdCByZW9yZGVyLCBhcyB0aGlzIGlzIHVzZWQgdG8gaW5kZXggaW50byB0aGUgdGFibGVzCisgICBvbXBfY2xhdXNlX251bV9vcHMgYW5kIG9tcF9jbGF1c2VfY29kZV9uYW1lLiAgKi8KK2VudW0gb21wX2NsYXVzZV9jb2RlCit7CisgIC8qIENsYXVzZSB6ZXJvIGlzIHNwZWNpYWwtY2FzZWQgaW5zaWRlIHRoZSBwYXJzZXIKKyAgICAgKGNfcGFyc2VyX29tcF92YXJpYWJsZV9saXN0KS4gICovCisgIE9NUF9DTEFVU0VfRVJST1IgPSAwLAorCisgIC8qIE9wZW5NUCBjbGF1c2U6IHByaXZhdGUgKHZhcmlhYmxlX2xpc3QpLiAgKi8KKyAgT01QX0NMQVVTRV9QUklWQVRFLAorCisgIC8qIE9wZW5NUCBjbGF1c2U6IHNoYXJlZCAodmFyaWFibGVfbGlzdCkuICAqLworICBPTVBfQ0xBVVNFX1NIQVJFRCwKKworICAvKiBPcGVuTVAgY2xhdXNlOiBmaXJzdHByaXZhdGUgKHZhcmlhYmxlX2xpc3QpLiAgKi8KKyAgT01QX0NMQVVTRV9GSVJTVFBSSVZBVEUsCisKKyAgLyogT3Blbk1QIGNsYXVzZTogbGFzdHByaXZhdGUgKHZhcmlhYmxlX2xpc3QpLiAgKi8KKyAgT01QX0NMQVVTRV9MQVNUUFJJVkFURSwKKworICAvKiBPcGVuTVAgY2xhdXNlOiByZWR1Y3Rpb24gKG9wZXJhdG9yOnZhcmlhYmxlX2xpc3QpLgorICAgICBPTVBfQ0xBVVNFX1JFRFVDVElPTl9DT0RFOiBUaGUgdHJlZV9jb2RlIG9mIHRoZSBvcGVyYXRvci4KKyAgICAgT3BlcmFuZCAxOiBPTVBfQ0xBVVNFX1JFRFVDVElPTl9JTklUOiBTdG10LWxpc3QgdG8gaW5pdGlhbGl6ZSB0aGUgdmFyLgorICAgICBPcGVyYW5kIDI6IE9NUF9DTEFVU0VfUkVEVUNUSU9OX01FUkdFOiBTdG10LWxpc3QgdG8gbWVyZ2UgcHJpdmF0ZSB2YXIKKyAgICAgICAgICAgICAgICBpbnRvIHRoZSBzaGFyZWQgb25lLgorICAgICBPcGVyYW5kIDM6IE9NUF9DTEFVU0VfUkVEVUNUSU9OX1BMQUNFSE9MREVSOiBBIGR1bW15IFZBUl9ERUNMCisgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXIgdXNlZCBpbiBPTVBfQ0xBVVNFX1JFRFVDVElPTl97SU5JVCxNRVJHRX0uICAqLworICBPTVBfQ0xBVVNFX1JFRFVDVElPTiwKKworICAvKiBPcGVuTVAgY2xhdXNlOiBjb3B5aW4gKHZhcmlhYmxlX2xpc3QpLiAgKi8KKyAgT01QX0NMQVVTRV9DT1BZSU4sCisKKyAgLyogT3Blbk1QIGNsYXVzZTogY29weXByaXZhdGUgKHZhcmlhYmxlX2xpc3QpLiAgKi8KKyAgT01QX0NMQVVTRV9DT1BZUFJJVkFURSwKKworICAvKiBPcGVuTVAgY2xhdXNlOiBpZiAoc2NhbGFyLWV4cHJlc3Npb24pLiAgKi8KKyAgT01QX0NMQVVTRV9JRiwKKworICAvKiBPcGVuTVAgY2xhdXNlOiBudW1fdGhyZWFkcyAoaW50ZWdlci1leHByZXNzaW9uKS4gICovCisgIE9NUF9DTEFVU0VfTlVNX1RIUkVBRFMsCisKKyAgLyogT3Blbk1QIGNsYXVzZTogc2NoZWR1bGUuICAqLworICBPTVBfQ0xBVVNFX1NDSEVEVUxFLAorCisgIC8qIE9wZW5NUCBjbGF1c2U6IG5vd2FpdC4gICovCisgIE9NUF9DTEFVU0VfTk9XQUlULAorCisgIC8qIE9wZW5NUCBjbGF1c2U6IG9yZGVyZWQuICAqLworICBPTVBfQ0xBVVNFX09SREVSRUQsCisKKyAgLyogT3Blbk1QIGNsYXVzZTogZGVmYXVsdC4gICovCisgIE9NUF9DTEFVU0VfREVGQVVMVCwKKworICAvKiBPcGVuTVAgY2xhdXNlOiBjb2xsYXBzZSAoY29uc3RhbnQtaW50ZWdlci1leHByZXNzaW9uKS4gICovCisgIE9NUF9DTEFVU0VfQ09MTEFQU0UsCisKKyAgLyogT3Blbk1QIGNsYXVzZTogdW50aWVkLiAgKi8KKyAgT01QX0NMQVVTRV9VTlRJRUQKK307CisMCisvKiBUaGUgZGVmaW5pdGlvbiBvZiB0cmVlIG5vZGVzIGZpbGxzIHRoZSBuZXh0IHNldmVyYWwgcGFnZXMuICAqLworCisvKiBBIHRyZWUgbm9kZSBjYW4gcmVwcmVzZW50IGEgZGF0YSB0eXBlLCBhIHZhcmlhYmxlLCBhbiBleHByZXNzaW9uCisgICBvciBhIHN0YXRlbWVudC4gIEVhY2ggbm9kZSBoYXMgYSBUUkVFX0NPREUgd2hpY2ggc2F5cyB3aGF0IGtpbmQgb2YKKyAgIHRoaW5nIGl0IHJlcHJlc2VudHMuICBTb21lIGNvbW1vbiBjb2RlcyBhcmU6CisgICBJTlRFR0VSX1RZUEUgLS0gcmVwcmVzZW50cyBhIHR5cGUgb2YgaW50ZWdlcnMuCisgICBBUlJBWV9UWVBFIC0tIHJlcHJlc2VudHMgYSB0eXBlIG9mIHBvaW50ZXIuCisgICBWQVJfREVDTCAtLSByZXByZXNlbnRzIGEgZGVjbGFyZWQgdmFyaWFibGUuCisgICBJTlRFR0VSX0NTVCAtLSByZXByZXNlbnRzIGEgY29uc3RhbnQgaW50ZWdlciB2YWx1ZS4KKyAgIFBMVVNfRVhQUiAtLSByZXByZXNlbnRzIGEgc3VtIChhbiBleHByZXNzaW9uKS4KKworICAgQXMgZm9yIHRoZSBjb250ZW50cyBvZiBhIHRyZWUgbm9kZTogdGhlcmUgYXJlIHNvbWUgZmllbGRzCisgICB0aGF0IGFsbCBub2RlcyBzaGFyZS4gIEVhY2ggVFJFRV9DT0RFIGhhcyB2YXJpb3VzIHNwZWNpYWwtcHVycG9zZQorICAgZmllbGRzIGFzIHdlbGwuICBUaGUgZmllbGRzIG9mIGEgbm9kZSBhcmUgbmV2ZXIgYWNjZXNzZWQgZGlyZWN0bHksCisgICBhbHdheXMgdGhyb3VnaCBhY2Nlc3NvciBtYWNyb3MuICAqLworCisvKiBFdmVyeSBraW5kIG9mIHRyZWUgbm9kZSBzdGFydHMgd2l0aCB0aGlzIHN0cnVjdHVyZSwKKyAgIHNvIGFsbCBub2RlcyBoYXZlIHRoZXNlIGZpZWxkcy4KKworICAgU2VlIHRoZSBhY2Nlc3NvciBtYWNyb3MsIGRlZmluZWQgYmVsb3csIGZvciBkb2N1bWVudGF0aW9uIG9mIHRoZQorICAgZmllbGRzLiAgKi8KKworc3RydWN0IEdUWSgoKSkgdHJlZV9iYXNlIHsKKyAgRU5VTV9CSVRGSUVMRCh0cmVlX2NvZGUpIGNvZGUgOiAxNjsKKworICB1bnNpZ25lZCBzaWRlX2VmZmVjdHNfZmxhZyA6IDE7CisgIHVuc2lnbmVkIGNvbnN0YW50X2ZsYWcgOiAxOworICB1bnNpZ25lZCBhZGRyZXNzYWJsZV9mbGFnIDogMTsKKyAgdW5zaWduZWQgdm9sYXRpbGVfZmxhZyA6IDE7CisgIHVuc2lnbmVkIHJlYWRvbmx5X2ZsYWcgOiAxOworICB1bnNpZ25lZCB1bnNpZ25lZF9mbGFnIDogMTsKKyAgdW5zaWduZWQgYXNtX3dyaXR0ZW5fZmxhZzogMTsKKyAgdW5zaWduZWQgbm93YXJuaW5nX2ZsYWcgOiAxOworCisgIHVuc2lnbmVkIHVzZWRfZmxhZyA6IDE7CisgIHVuc2lnbmVkIG5vdGhyb3dfZmxhZyA6IDE7CisgIHVuc2lnbmVkIHN0YXRpY19mbGFnIDogMTsKKyAgdW5zaWduZWQgcHVibGljX2ZsYWcgOiAxOworICB1bnNpZ25lZCBwcml2YXRlX2ZsYWcgOiAxOworICB1bnNpZ25lZCBwcm90ZWN0ZWRfZmxhZyA6IDE7CisgIHVuc2lnbmVkIGRlcHJlY2F0ZWRfZmxhZyA6IDE7CisgIHVuc2lnbmVkIHNhdHVyYXRpbmdfZmxhZyA6IDE7CisKKyAgdW5zaWduZWQgZGVmYXVsdF9kZWZfZmxhZyA6IDE7CisgIHVuc2lnbmVkIGxhbmdfZmxhZ18wIDogMTsKKyAgdW5zaWduZWQgbGFuZ19mbGFnXzEgOiAxOworICB1bnNpZ25lZCBsYW5nX2ZsYWdfMiA6IDE7CisgIHVuc2lnbmVkIGxhbmdfZmxhZ18zIDogMTsKKyAgdW5zaWduZWQgbGFuZ19mbGFnXzQgOiAxOworICB1bnNpZ25lZCBsYW5nX2ZsYWdfNSA6IDE7CisgIHVuc2lnbmVkIGxhbmdfZmxhZ182IDogMTsKKworICB1bnNpZ25lZCB2aXNpdGVkIDogMTsKKyAgdW5zaWduZWQgcGFja2VkX2ZsYWcgOiAxOworICB1bnNpZ25lZCB1c2VyX2FsaWduIDogMTsKKworICB1bnNpZ25lZCBzcGFyZSA6IDEzOworCisgIC8qIFRoaXMgZmllbGQgaXMgb25seSB1c2VkIHdpdGggdHlwZSBub2RlczsgdGhlIG9ubHkgcmVhc29uIGl0IGlzIHByZXNlbnQKKyAgICAgaW4gdHJlZV9iYXNlIGluc3RlYWQgb2YgdHJlZV90eXBlIGlzIHRvIHNhdmUgc3BhY2UuICBUaGUgc2l6ZSBvZiB0aGUKKyAgICAgZmllbGQgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhZGRyX3NwYWNlX3QgdmFsdWVzLiAgKi8KKyAgdW5zaWduZWQgYWRkcmVzc19zcGFjZSA6IDg7Cit9OworCitzdHJ1Y3QgR1RZKCgpKSB0cmVlX2NvbW1vbiB7CisgIHN0cnVjdCB0cmVlX2Jhc2UgYmFzZTsKKyAgdHJlZSBjaGFpbjsKKyAgdHJlZSB0eXBlOworfTsKKworLyogVGhlIGZvbGxvd2luZyB0YWJsZSBsaXN0cyB0aGUgdXNlcyBvZiBlYWNoIG9mIHRoZSBhYm92ZSBmbGFncyBhbmQKKyAgIGZvciB3aGljaCB0eXBlcyBvZiBub2RlcyB0aGV5IGFyZSBkZWZpbmVkLgorCisgICBhZGRyZXNzYWJsZV9mbGFnOgorCisgICAgICAgVFJFRV9BRERSRVNTQUJMRSBpbgorICAgICAgICAgICBWQVJfREVDTCwgRlVOQ1RJT05fREVDTCwgRklFTERfREVDTCwgTEFCRUxfREVDTAorICAgICAgICAgICBhbGwgdHlwZXMKKyAgICAgICAgICAgQ09OU1RSVUNUT1IsIElERU5USUZJRVJfTk9ERQorICAgICAgICAgICBTVE1UX0VYUFIsIGl0IG1lYW5zIHdlIHdhbnQgdGhlIHJlc3VsdCBvZiB0aGUgZW5jbG9zZWQgZXhwcmVzc2lvbgorCisgICAgICAgQ0FMTF9FWFBSX1RBSUxDQUxMIGluCisgICAgICAgICAgIENBTExfRVhQUgorCisgICAgICAgQ0FTRV9MT1dfU0VFTiBpbgorICAgICAgICAgICBDQVNFX0xBQkVMX0VYUFIKKworICAgc3RhdGljX2ZsYWc6CisKKyAgICAgICBUUkVFX1NUQVRJQyBpbgorICAgICAgICAgICBWQVJfREVDTCwgRlVOQ1RJT05fREVDTAorICAgICAgICAgICBDT05TVFJVQ1RPUgorCisgICAgICAgVFJFRV9OT19UUkFNUE9MSU5FIGluCisgICAgICAgICAgIEFERFJfRVhQUgorCisgICAgICAgQklORk9fVklSVFVBTF9QIGluCisgICAgICAgICAgIFRSRUVfQklORk8KKworICAgICAgIFRSRUVfU1lNQk9MX1JFRkVSRU5DRUQgaW4KKyAgICAgICAgICAgSURFTlRJRklFUl9OT0RFCisKKyAgICAgICBDTEVBTlVQX0VIX09OTFkgaW4KKyAgICAgICAgICAgVEFSR0VUX0VYUFIsIFdJVEhfQ0xFQU5VUF9FWFBSCisKKyAgICAgICBUUllfQ0FUQ0hfSVNfQ0xFQU5VUCBpbgorICAgICAgICAgICBUUllfQ0FUQ0hfRVhQUgorCisgICAgICAgQVNNX0lOUFVUX1AgaW4KKyAgICAgICAgICAgQVNNX0VYUFIKKworICAgICAgIFRZUEVfUkVGX0NBTl9BTElBU19BTEwgaW4KKyAgICAgICAgICAgUE9JTlRFUl9UWVBFLCBSRUZFUkVOQ0VfVFlQRQorCisgICAgICAgTU9WRV9OT05URU1QT1JBTCBpbgorICAgICAgICAgICBNT0RJRllfRVhQUgorCisgICAgICAgQ0FTRV9ISUdIX1NFRU4gaW4KKyAgICAgICAgICAgQ0FTRV9MQUJFTF9FWFBSCisKKyAgICAgICBDQUxMX0NBTk5PVF9JTkxJTkVfUCBpbgorICAgICAgICAgICBDQUxMX0VYUFIKKworICAgcHVibGljX2ZsYWc6CisKKyAgICAgICBUUkVFX09WRVJGTE9XIGluCisgICAgICAgICAgIElOVEVHRVJfQ1NULCBSRUFMX0NTVCwgQ09NUExFWF9DU1QsIFZFQ1RPUl9DU1QKKworICAgICAgIFRSRUVfUFVCTElDIGluCisgICAgICAgICAgIFZBUl9ERUNMLCBGVU5DVElPTl9ERUNMCisgICAgICAgICAgIElERU5USUZJRVJfTk9ERQorCisgICAgICAgQVNNX1ZPTEFUSUxFX1AgaW4KKyAgICAgICAgICAgQVNNX0VYUFIKKworICAgICAgIENBTExfRVhQUl9WQV9BUkdfUEFDSyBpbgorICAgICAgICAgICBDQUxMX0VYUFIKKworICAgICAgIFRZUEVfQ0FDSEVEX1ZBTFVFU19QIGluCisgICAgICAgICAgIGFsbCB0eXBlcworCisgICAgICAgU0FWRV9FWFBSX1JFU09MVkVEX1AgaW4KKyAgICAgICAgICAgU0FWRV9FWFBSCisKKyAgICAgICBPTVBfQ0xBVVNFX0xBU1RQUklWQVRFX0ZJUlNUUFJJVkFURSBpbgorICAgICAgICAgICBPTVBfQ0xBVVNFX0xBU1RQUklWQVRFCisKKyAgICAgICBPTVBfQ0xBVVNFX1BSSVZBVEVfREVCVUcgaW4KKyAgICAgICAgICAgT01QX0NMQVVTRV9QUklWQVRFCisKKyAgIHByaXZhdGVfZmxhZzoKKworICAgICAgIFRSRUVfUFJJVkFURSBpbgorICAgICAgICAgICBhbGwgZGVjbHMKKworICAgICAgIENBTExfRVhQUl9SRVRVUk5fU0xPVF9PUFQgaW4KKyAgICAgICAgICAgQ0FMTF9FWFBSCisKKyAgICAgICBPTVBfU0VDVElPTl9MQVNUIGluCisgICAgICAgICAgIE9NUF9TRUNUSU9OCisKKyAgICAgICBPTVBfUEFSQUxMRUxfQ09NQklORUQgaW4KKyAgICAgICAgICAgT01QX1BBUkFMTEVMCisgICAgICAgT01QX0NMQVVTRV9QUklWQVRFX09VVEVSX1JFRiBpbgorCSAgIE9NUF9DTEFVU0VfUFJJVkFURQorCisgICBwcm90ZWN0ZWRfZmxhZzoKKworICAgICAgIFRSRUVfUFJPVEVDVEVEIGluCisgICAgICAgICAgIEJMT0NLCisgICAgICAgICAgIGFsbCBkZWNscworCisgICAgICAgQ0FMTF9GUk9NX1RIVU5LX1AgaW4KKyAgICAgICAgICAgQ0FMTF9FWFBSCisKKyAgIHNpZGVfZWZmZWN0c19mbGFnOgorCisgICAgICAgVFJFRV9TSURFX0VGRkVDVFMgaW4KKyAgICAgICAgICAgYWxsIGV4cHJlc3Npb25zCisgICAgICAgICAgIGFsbCBkZWNscworICAgICAgICAgICBhbGwgY29uc3RhbnRzCisKKyAgICAgICBGT1JDRURfTEFCRUwgaW4KKyAgICAgICAgICAgTEFCRUxfREVDTAorCisgICB2b2xhdGlsZV9mbGFnOgorCisgICAgICAgVFJFRV9USElTX1ZPTEFUSUxFIGluCisgICAgICAgICAgIGFsbCBleHByZXNzaW9ucworICAgICAgICAgICBhbGwgZGVjbHMKKworICAgICAgIFRZUEVfVk9MQVRJTEUgaW4KKyAgICAgICAgICAgYWxsIHR5cGVzCisKKyAgIHJlYWRvbmx5X2ZsYWc6CisKKyAgICAgICBUUkVFX1JFQURPTkxZIGluCisgICAgICAgICAgIGFsbCBleHByZXNzaW9ucworICAgICAgICAgICBhbGwgZGVjbHMKKworICAgICAgIFRZUEVfUkVBRE9OTFkgaW4KKyAgICAgICAgICAgYWxsIHR5cGVzCisKKyAgIGNvbnN0YW50X2ZsYWc6CisKKyAgICAgICBUUkVFX0NPTlNUQU5UIGluCisgICAgICAgICAgIGFsbCBleHByZXNzaW9ucworICAgICAgICAgICBhbGwgZGVjbHMKKyAgICAgICAgICAgYWxsIGNvbnN0YW50cworCisgICAgICAgVFlQRV9TSVpFU19HSU1QTElGSUVEIGluCisgICAgICAgICAgIGFsbCB0eXBlcworCisgICB1bnNpZ25lZF9mbGFnOgorCisgICAgICAgVFlQRV9VTlNJR05FRCBpbgorICAgICAgICAgICBhbGwgdHlwZXMKKworICAgICAgIERFQ0xfVU5TSUdORUQgaW4KKyAgICAgICAgICAgYWxsIGRlY2xzCisKKyAgICAgICBSRUdJU1RFUl9ERUZTX0lOX1RISVNfU1RNVCBpbgorICAgICAgICAgICBhbGwgZXhwcmVzc2lvbnMgKHRyZWUtaW50by1zc2EuYykKKworICAgYXNtX3dyaXR0ZW5fZmxhZzoKKworICAgICAgIFRSRUVfQVNNX1dSSVRURU4gaW4KKyAgICAgICAgICAgVkFSX0RFQ0wsIEZVTkNUSU9OX0RFQ0wKKyAgICAgICAgICAgUkVDT1JEX1RZUEUsIFVOSU9OX1RZUEUsIFFVQUxfVU5JT05fVFlQRQorICAgICAgICAgICBCTE9DSywgU1NBX05BTUUsIFNUUklOR19DU1QKKworICAgICAgIE5FQ0VTU0FSWSBpbgorICAgICAgICAgICBhbGwgZXhwcmVzc2lvbnMgKHRyZWUtc3NhLWRjZS5jLCB0cmVlLXNzYS1wcmUuYykKKworICAgdXNlZF9mbGFnOgorCisgICAgICAgVFJFRV9VU0VEIGluCisgICAgICAgICAgIGFsbCBleHByZXNzaW9ucworICAgICAgICAgICBhbGwgZGVjbHMKKyAgICAgICAgICAgSURFTlRJRklFUl9OT0RFCisKKyAgIG5vdGhyb3dfZmxhZzoKKworICAgICAgIFRSRUVfTk9USFJPVyBpbgorICAgICAgICAgICBDQUxMX0VYUFIKKyAgICAgICAgICAgRlVOQ1RJT05fREVDTAorCisgICAgICAgVFlQRV9BTElHTl9PSyBpbgorICAgICAgICAgICBhbGwgdHlwZXMKKworICAgICAgIFRSRUVfVEhJU19OT1RSQVAgaW4KKyAgICAgICAgICAoQUxJR04vTUlTQUxJR05FRF8pSU5ESVJFQ1RfUkVGLCBBUlJBWV9SRUYsIEFSUkFZX1JBTkdFX1JFRgorCisgICBkZXByZWNhdGVkX2ZsYWc6CisKKyAgICAgICBUUkVFX0RFUFJFQ0FURUQgaW4KKyAgICAgICAgICAgYWxsIGRlY2xzCisJICAgYWxsIHR5cGVzCisKKyAgICAgICBJREVOVElGSUVSX1RSQU5TUEFSRU5UX0FMSUFTIGluCisgICAgICAgICAgIElERU5USUZJRVJfTk9ERQorCisgICAgICAgU1RNVF9JTl9TU0FfRURHRV9XT1JLTElTVCBpbgorICAgICAgICAgICBhbGwgZXhwcmVzc2lvbnMgKHRyZWUtc3NhLXByb3BhZ2F0ZS5jKQorCisgICB2aXNpdGVkOgorCisgICAgICAgVFJFRV9WSVNJVEVEIGluCisgICAgICAgICAgIGFsbCB0cmVlcyAodXNlZCBsaWJlcmFsbHkgYnkgbWFueSBwYXNzZXMpCisKKyAgIHNhdHVyYXRpbmdfZmxhZzoKKworICAgICAgIFRZUEVfU0FUVVJBVElORyBpbgorICAgICAgICAgICBhbGwgdHlwZXMKKworICAgbm93YXJuaW5nX2ZsYWc6CisKKyAgICAgICBUUkVFX05PX1dBUk5JTkcgaW4KKyAgICAgICAgICAgYWxsIGV4cHJlc3Npb25zCisgICAgICAgICAgIGFsbCBkZWNscworCisgICBkZWZhdWx0X2RlZl9mbGFnOgorCisgICAgICAgVFlQRV9WRUNUT1JfT1BBUVVFIGluCisJICAgVkVDVE9SX1RZUEUKKworICAgICAgIFNTQV9OQU1FX0lTX0RFRkFVTFRfREVGIGluCisgICAgICAgICAgIFNTQV9OQU1FCisqLworCisjdW5kZWYgREVGVFJFRVNUUlVDVAorI2RlZmluZSBERUZUUkVFU1RSVUNUKEVOVU0sIE5BTUUpIEVOVU0sCitlbnVtIHRyZWVfbm9kZV9zdHJ1Y3R1cmVfZW51bSB7CisjaW5jbHVkZSAidHJlZXN0cnVjdC5kZWYiCisgIExBU1RfVFNfRU5VTQorfTsKKyN1bmRlZiBERUZUUkVFU1RSVUNUCisKKy8qIERlZmluZSBhY2Nlc3NvcnMgZm9yIHRoZSBmaWVsZHMgdGhhdCBhbGwgdHJlZSBub2RlcyBoYXZlCisgICAodGhvdWdoIHNvbWUgZmllbGRzIGFyZSBub3QgdXNlZCBmb3IgYWxsIGtpbmRzIG9mIG5vZGVzKS4gICovCisKKy8qIFRoZSB0cmVlLWNvZGUgc2F5cyB3aGF0IGtpbmQgb2Ygbm9kZSBpdCBpcy4KKyAgIENvZGVzIGFyZSBkZWZpbmVkIGluIHRyZWUuZGVmLiAgKi8KKyNkZWZpbmUgVFJFRV9DT0RFKE5PREUpICgoZW51bSB0cmVlX2NvZGUpIChOT0RFKS0+YmFzZS5jb2RlKQorI2RlZmluZSBUUkVFX1NFVF9DT0RFKE5PREUsIFZBTFVFKSAoKE5PREUpLT5iYXNlLmNvZGUgPSAoVkFMVUUpKQorCisvKiBXaGVuIGNoZWNraW5nIGlzIGVuYWJsZWQsIGVycm9ycyB3aWxsIGJlIGdlbmVyYXRlZCBpZiBhIHRyZWUgbm9kZQorICAgaXMgYWNjZXNzZWQgaW5jb3JyZWN0bHkuIFRoZSBtYWNyb3MgZGllIHdpdGggYSBmYXRhbCBlcnJvci4gICovCisjaWYgZGVmaW5lZCBFTkFCTEVfVFJFRV9DSEVDS0lORyAmJiAoR0NDX1ZFUlNJT04gPj0gMjAwNykKKworI2RlZmluZSBUUkVFX0NIRUNLKFQsIENPREUpIF9fZXh0ZW5zaW9uX18JCQkJXAorKHsgIF9fdHlwZW9mIChUKSBjb25zdCBfX3QgPSAoVCk7CQkJCQlcCisgICAgaWYgKFRSRUVfQ09ERSAoX190KSAhPSAoQ09ERSkpCQkJCQlcCisgICAgICB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXywgCVwKKwkJCSAoQ09ERSksIDApOwkJCQkJXAorICAgIF9fdDsgfSkKKworI2RlZmluZSBUUkVFX05PVF9DSEVDSyhULCBDT0RFKSBfX2V4dGVuc2lvbl9fCQkJCVwKKyh7ICBfX3R5cGVvZiAoVCkgY29uc3QgX190ID0gKFQpOwkJCQkJXAorICAgIGlmIChUUkVFX0NPREUgKF9fdCkgPT0gKENPREUpKQkJCQkJXAorICAgICAgdHJlZV9ub3RfY2hlY2tfZmFpbGVkIChfX3QsIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fLAlcCisJCQkgICAgIChDT0RFKSwgMCk7CQkJCVwKKyAgICBfX3Q7IH0pCisKKyNkZWZpbmUgVFJFRV9DSEVDSzIoVCwgQ09ERTEsIENPREUyKSBfX2V4dGVuc2lvbl9fCQkJXAorKHsgIF9fdHlwZW9mIChUKSBjb25zdCBfX3QgPSAoVCk7CQkJCQlcCisgICAgaWYgKFRSRUVfQ09ERSAoX190KSAhPSAoQ09ERTEpCQkJCQlcCisJJiYgVFJFRV9DT0RFIChfX3QpICE9IChDT0RFMikpCQkJCQlcCisgICAgICB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXywJCVwKKyAJCQkgKENPREUxKSwgKENPREUyKSwgMCk7CQkJCVwKKyAgICBfX3Q7IH0pCisKKyNkZWZpbmUgVFJFRV9OT1RfQ0hFQ0syKFQsIENPREUxLCBDT0RFMikgX19leHRlbnNpb25fXwkJCVwKKyh7ICBfX3R5cGVvZiAoVCkgY29uc3QgX190ID0gKFQpOwkJCQkJXAorICAgIGlmIChUUkVFX0NPREUgKF9fdCkgPT0gKENPREUxKQkJCQkJXAorCXx8IFRSRUVfQ09ERSAoX190KSA9PSAoQ09ERTIpKQkJCQkJXAorICAgICAgdHJlZV9ub3RfY2hlY2tfZmFpbGVkIChfX3QsIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fLAlcCisJCQkgICAgIChDT0RFMSksIChDT0RFMiksIDApOwkJCVwKKyAgICBfX3Q7IH0pCisKKyNkZWZpbmUgVFJFRV9DSEVDSzMoVCwgQ09ERTEsIENPREUyLCBDT0RFMykgX19leHRlbnNpb25fXwkJXAorKHsgIF9fdHlwZW9mIChUKSBjb25zdCBfX3QgPSAoVCk7CQkJCQlcCisgICAgaWYgKFRSRUVfQ09ERSAoX190KSAhPSAoQ09ERTEpCQkJCQlcCisJJiYgVFJFRV9DT0RFIChfX3QpICE9IChDT0RFMikJCQkJCVwKKwkmJiBUUkVFX0NPREUgKF9fdCkgIT0gKENPREUzKSkJCQkJCVwKKyAgICAgIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fLAkJXAorCQkJICAgICAoQ09ERTEpLCAoQ09ERTIpLCAoQ09ERTMpLCAwKTsJCVwKKyAgICBfX3Q7IH0pCisKKyNkZWZpbmUgVFJFRV9OT1RfQ0hFQ0szKFQsIENPREUxLCBDT0RFMiwgQ09ERTMpIF9fZXh0ZW5zaW9uX18JCVwKKyh7ICBfX3R5cGVvZiAoVCkgY29uc3QgX190ID0gKFQpOwkJCQkJXAorICAgIGlmIChUUkVFX0NPREUgKF9fdCkgPT0gKENPREUxKQkJCQkJXAorCXx8IFRSRUVfQ09ERSAoX190KSA9PSAoQ09ERTIpCQkJCQlcCisJfHwgVFJFRV9DT0RFIChfX3QpID09IChDT0RFMykpCQkJCQlcCisgICAgICB0cmVlX25vdF9jaGVja19mYWlsZWQgKF9fdCwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18sCVwKKwkJCSAgICAgKENPREUxKSwgKENPREUyKSwgKENPREUzKSwgMCk7CQlcCisgICAgX190OyB9KQorCisjZGVmaW5lIFRSRUVfQ0hFQ0s0KFQsIENPREUxLCBDT0RFMiwgQ09ERTMsIENPREU0KSBfX2V4dGVuc2lvbl9fCVwKKyh7ICBfX3R5cGVvZiAoVCkgY29uc3QgX190ID0gKFQpOwkJCQkJXAorICAgIGlmIChUUkVFX0NPREUgKF9fdCkgIT0gKENPREUxKQkJCQkJXAorCSYmIFRSRUVfQ09ERSAoX190KSAhPSAoQ09ERTIpCQkJCQlcCisJJiYgVFJFRV9DT0RFIChfX3QpICE9IChDT0RFMykJCQkJCVwKKwkmJiBUUkVFX0NPREUgKF9fdCkgIT0gKENPREU0KSkJCQkJCVwKKyAgICAgIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fLAkJXAorCQkJICAgICAoQ09ERTEpLCAoQ09ERTIpLCAoQ09ERTMpLCAoQ09ERTQpLCAwKTsJXAorICAgIF9fdDsgfSkKKworI2RlZmluZSBOT05fVFJFRV9DSEVDSzQoVCwgQ09ERTEsIENPREUyLCBDT0RFMywgQ09ERTQpIF9fZXh0ZW5zaW9uX18JXAorKHsgIF9fdHlwZW9mIChUKSBjb25zdCBfX3QgPSAoVCk7CQkJCQlcCisgICAgaWYgKFRSRUVfQ09ERSAoX190KSA9PSAoQ09ERTEpCQkJCQlcCisJfHwgVFJFRV9DT0RFIChfX3QpID09IChDT0RFMikJCQkJCVwKKwl8fCBUUkVFX0NPREUgKF9fdCkgPT0gKENPREUzKQkJCQkJXAorCXx8IFRSRUVfQ09ERSAoX190KSA9PSAoQ09ERTQpKQkJCQkJXAorICAgICAgdHJlZV9ub3RfY2hlY2tfZmFpbGVkIChfX3QsIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fLAlcCisJCQkgICAgIChDT0RFMSksIChDT0RFMiksIChDT0RFMyksIChDT0RFNCksIDApOwlcCisgICAgX190OyB9KQorCisjZGVmaW5lIFRSRUVfQ0hFQ0s1KFQsIENPREUxLCBDT0RFMiwgQ09ERTMsIENPREU0LCBDT0RFNSkgX19leHRlbnNpb25fXwlcCisoeyAgX190eXBlb2YgKFQpIGNvbnN0IF9fdCA9IChUKTsJCQkJCVwKKyAgICBpZiAoVFJFRV9DT0RFIChfX3QpICE9IChDT0RFMSkJCQkJCVwKKwkmJiBUUkVFX0NPREUgKF9fdCkgIT0gKENPREUyKQkJCQkJXAorCSYmIFRSRUVfQ09ERSAoX190KSAhPSAoQ09ERTMpCQkJCQlcCisJJiYgVFJFRV9DT0RFIChfX3QpICE9IChDT0RFNCkJCQkJCVwKKwkmJiBUUkVFX0NPREUgKF9fdCkgIT0gKENPREU1KSkJCQkJCVwKKyAgICAgIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fLAkJXAorCQkJICAgICAoQ09ERTEpLCAoQ09ERTIpLCAoQ09ERTMpLCAoQ09ERTQpLCAoQ09ERTUpLCAwKTtcCisgICAgX190OyB9KQorCisjZGVmaW5lIFRSRUVfTk9UX0NIRUNLNShULCBDT0RFMSwgQ09ERTIsIENPREUzLCBDT0RFNCwgQ09ERTUpIF9fZXh0ZW5zaW9uX18gXAorKHsgIF9fdHlwZW9mIChUKSBjb25zdCBfX3QgPSAoVCk7CQkJCQlcCisgICAgaWYgKFRSRUVfQ09ERSAoX190KSA9PSAoQ09ERTEpCQkJCQlcCisJfHwgVFJFRV9DT0RFIChfX3QpID09IChDT0RFMikJCQkJCVwKKwl8fCBUUkVFX0NPREUgKF9fdCkgPT0gKENPREUzKQkJCQkJXAorCXx8IFRSRUVfQ09ERSAoX190KSA9PSAoQ09ERTQpCQkJCQlcCisJfHwgVFJFRV9DT0RFIChfX3QpID09IChDT0RFNSkpCQkJCQlcCisgICAgICB0cmVlX25vdF9jaGVja19mYWlsZWQgKF9fdCwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18sCVwKKwkJCSAgICAgKENPREUxKSwgKENPREUyKSwgKENPREUzKSwgKENPREU0KSwgKENPREU1KSwgMCk7XAorICAgIF9fdDsgfSkKKworI2RlZmluZSBDT05UQUlOU19TVFJVQ1RfQ0hFQ0soVCwgU1RSVUNUKSBfX2V4dGVuc2lvbl9fCQkJXAorKHsgIF9fdHlwZW9mIChUKSBjb25zdCBfX3QgPSAoVCk7CQkJCQlcCisgIGlmICh0cmVlX2NvbnRhaW5zX3N0cnVjdFtUUkVFX0NPREUoX190KV1bKFNUUlVDVCldICE9IDEpCQlcCisgICAgICB0cmVlX2NvbnRhaW5zX3N0cnVjdF9jaGVja19mYWlsZWQgKF9fdCwgKFNUUlVDVCksIF9fRklMRV9fLCBfX0xJTkVfXywJXAorCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CQkJCVwKKyAgICBfX3Q7IH0pCisKKyNkZWZpbmUgVFJFRV9DTEFTU19DSEVDSyhULCBDTEFTUykgX19leHRlbnNpb25fXwkJCVwKKyh7ICBfX3R5cGVvZiAoVCkgY29uc3QgX190ID0gKFQpOwkJCQkJXAorICAgIGlmIChUUkVFX0NPREVfQ0xBU1MgKFRSRUVfQ09ERShfX3QpKSAhPSAoQ0xBU1MpKQkJCVwKKyAgICAgIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsIChDTEFTUyksIF9fRklMRV9fLCBfX0xJTkVfXywJXAorCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CQkJCVwKKyAgICBfX3Q7IH0pCisKKyNkZWZpbmUgVFJFRV9SQU5HRV9DSEVDSyhULCBDT0RFMSwgQ09ERTIpIF9fZXh0ZW5zaW9uX18JCQlcCisoeyAgX190eXBlb2YgKFQpIGNvbnN0IF9fdCA9IChUKTsJCQkJCVwKKyAgICBpZiAoVFJFRV9DT0RFIChfX3QpIDwgKENPREUxKSB8fCBUUkVFX0NPREUgKF9fdCkgPiAoQ09ERTIpKQkJXAorICAgICAgdHJlZV9yYW5nZV9jaGVja19mYWlsZWQgKF9fdCwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18sCVwKKwkJCSAgICAgICAoQ09ERTEpLCAoQ09ERTIpKTsJCQlcCisgICAgX190OyB9KQorCisjZGVmaW5lIE9NUF9DTEFVU0VfU1VCQ09ERV9DSEVDSyhULCBDT0RFKSBfX2V4dGVuc2lvbl9fCQkJXAorKHsgIF9fdHlwZW9mIChUKSBjb25zdCBfX3QgPSAoVCk7CQkJCQlcCisgICAgaWYgKFRSRUVfQ09ERSAoX190KSAhPSBPTVBfQ0xBVVNFKQkJCQkJXAorICAgICAgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18sICAJXAorCQkJIE9NUF9DTEFVU0UsIDApOwkJCQlcCisgICAgaWYgKF9fdC0+b21wX2NsYXVzZS5jb2RlICE9IChDT0RFKSkJCQkJCVwKKyAgICAgIG9tcF9jbGF1c2VfY2hlY2tfZmFpbGVkIChfX3QsIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fLCAJXAorCQkJICAgICAgIChDT0RFKSk7CQkJCQlcCisgICAgX190OyB9KQorCisjZGVmaW5lIE9NUF9DTEFVU0VfUkFOR0VfQ0hFQ0soVCwgQ09ERTEsIENPREUyKSBfX2V4dGVuc2lvbl9fCQlcCisoeyAgX190eXBlb2YgKFQpIGNvbnN0IF9fdCA9IChUKTsJCQkJCVwKKyAgICBpZiAoVFJFRV9DT0RFIChfX3QpICE9IE9NUF9DTEFVU0UpCQkJCQlcCisgICAgICB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXywgIAlcCisJCQkgT01QX0NMQVVTRSwgMCk7CQkJCVwKKyAgICBpZiAoKGludCkgX190LT5vbXBfY2xhdXNlLmNvZGUgPCAoaW50KSAoQ09ERTEpCQkJXAorICAgICAgICB8fCAoaW50KSBfX3QtPm9tcF9jbGF1c2UuY29kZSA+IChpbnQpIChDT0RFMikpCQkJXAorICAgICAgb21wX2NsYXVzZV9yYW5nZV9jaGVja19mYWlsZWQgKF9fdCwgX19GSUxFX18sIF9fTElORV9fLAkJXAorCQkJCSAgICAgX19GVU5DVElPTl9fLCAoQ09ERTEpLCAoQ09ERTIpKTsJXAorICAgIF9fdDsgfSkKKworLyogVGhlc2UgY2hlY2tzIGhhdmUgdG8gYmUgc3BlY2lhbCBjYXNlZC4gICovCisjZGVmaW5lIEVYUFJfQ0hFQ0soVCkgX19leHRlbnNpb25fXwkJCQkJXAorKHsgIF9fdHlwZW9mIChUKSBjb25zdCBfX3QgPSAoVCk7CQkJCQlcCisgICAgY2hhciBjb25zdCBfX2MgPSBUUkVFX0NPREVfQ0xBU1MgKFRSRUVfQ09ERSAoX190KSk7CQkJXAorICAgIGlmICghSVNfRVhQUl9DT0RFX0NMQVNTIChfX2MpKQkJCQkJXAorICAgICAgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgdGNjX2V4cHJlc3Npb24sIF9fRklMRV9fLCBfX0xJTkVfXywJXAorCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CQkJCVwKKyAgICBfX3Q7IH0pCisKKy8qIFRoZXNlIGNoZWNrcyBoYXZlIHRvIGJlIHNwZWNpYWwgY2FzZWQuICAqLworI2RlZmluZSBOT05fVFlQRV9DSEVDSyhUKSBfX2V4dGVuc2lvbl9fCQkJCQlcCisoeyAgX190eXBlb2YgKFQpIGNvbnN0IF9fdCA9IChUKTsJCQkJCVwKKyAgICBpZiAoVFlQRV9QIChfX3QpKQkJCQkJCQlcCisgICAgICB0cmVlX25vdF9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgdGNjX3R5cGUsIF9fRklMRV9fLCBfX0xJTkVfXywJXAorCQkJCSAgIF9fRlVOQ1RJT05fXyk7CQkJXAorICAgIF9fdDsgfSkKKworI2RlZmluZSBUUkVFX1ZFQ19FTFRfQ0hFQ0soVCwgSSkgX19leHRlbnNpb25fXwkJCQlcCisoKih7X190eXBlb2YgKFQpIGNvbnN0IF9fdCA9IChUKTsJCQkJCVwKKyAgICBjb25zdCBpbnQgX19pID0gKEkpOwkJCQkJCVwKKyAgICBpZiAoVFJFRV9DT0RFIChfX3QpICE9IFRSRUVfVkVDKQkJCQkJXAorICAgICAgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18sCQlcCisgIAkJCSBUUkVFX1ZFQywgMCk7CQkJCQlcCisgICAgaWYgKF9faSA8IDAgfHwgX19pID49IF9fdC0+dmVjLmxlbmd0aCkJCQkJXAorICAgICAgdHJlZV92ZWNfZWx0X2NoZWNrX2ZhaWxlZCAoX19pLCBfX3QtPnZlYy5sZW5ndGgsCQkJXAorCQkJCSBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7CVwKKyAgICAmX190LT52ZWMuYVtfX2ldOyB9KSkKKworI2RlZmluZSBPTVBfQ0xBVVNFX0VMVF9DSEVDSyhULCBJKSBfX2V4dGVuc2lvbl9fCQkJXAorKCooe19fdHlwZW9mIChUKSBjb25zdCBfX3QgPSAoVCk7CQkJCQlcCisgICAgY29uc3QgaW50IF9faSA9IChJKTsJCQkJCQlcCisgICAgaWYgKFRSRUVfQ09ERSAoX190KSAhPSBPTVBfQ0xBVVNFKQkJCQkJXAorICAgICAgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18sICAJXAorCQkJIE9NUF9DTEFVU0UsIDApOwkJCQlcCisgICAgaWYgKF9faSA8IDAgfHwgX19pID49IG9tcF9jbGF1c2VfbnVtX29wcyBbX190LT5vbXBfY2xhdXNlLmNvZGVdKQlcCisgICAgICBvbXBfY2xhdXNlX29wZXJhbmRfY2hlY2tfZmFpbGVkIChfX2ksIF9fdCwgX19GSUxFX18sIF9fTElORV9fLAlcCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXyk7CQkJXAorICAgICZfX3QtPm9tcF9jbGF1c2Uub3BzW19faV07IH0pKQorCisvKiBTcGVjaWFsIGNoZWNrcyBmb3IgVFJFRV9PUEVSQU5Ecy4gICovCisjZGVmaW5lIFRSRUVfT1BFUkFORF9DSEVDSyhULCBJKSBfX2V4dGVuc2lvbl9fCQkJCVwKKygqKHtfX3R5cGVvZiAoVCkgY29uc3QgX190ID0gRVhQUl9DSEVDSyAoVCk7CQkJCVwKKyAgICBjb25zdCBpbnQgX19pID0gKEkpOwkJCQkJCVwKKyAgICBpZiAoX19pIDwgMCB8fCBfX2kgPj0gVFJFRV9PUEVSQU5EX0xFTkdUSCAoX190KSkJCQlcCisgICAgICB0cmVlX29wZXJhbmRfY2hlY2tfZmFpbGVkIChfX2ksIF9fdCwJCQkJXAorCQkJCSBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7CVwKKyAgICAmX190LT5leHAub3BlcmFuZHNbX19pXTsgfSkpCisKKyNkZWZpbmUgVFJFRV9PUEVSQU5EX0NIRUNLX0NPREUoVCwgQ09ERSwgSSkgX19leHRlbnNpb25fXwkJXAorKCooe19fdHlwZW9mIChUKSBjb25zdCBfX3QgPSAoVCk7CQkJCQlcCisgICAgY29uc3QgaW50IF9faSA9IChJKTsJCQkJCQlcCisgICAgaWYgKFRSRUVfQ09ERSAoX190KSAhPSBDT0RFKQkJCQkJXAorICAgICAgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18sIChDT0RFKSwgMCk7XAorICAgIGlmIChfX2kgPCAwIHx8IF9faSA+PSBUUkVFX09QRVJBTkRfTEVOR1RIIChfX3QpKQkJCVwKKyAgICAgIHRyZWVfb3BlcmFuZF9jaGVja19mYWlsZWQgKF9faSwgX190LAkJCQlcCisJCQkJIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKTsJXAorICAgICZfX3QtPmV4cC5vcGVyYW5kc1tfX2ldOyB9KSkKKworI2RlZmluZSBUUkVFX1JUTF9PUEVSQU5EX0NIRUNLKFQsIENPREUsIEkpIF9fZXh0ZW5zaW9uX18JCVwKKygqKHJ0eCAqKQkJCQkJCQkJXAorICh7X190eXBlb2YgKFQpIGNvbnN0IF9fdCA9IChUKTsJCQkJCVwKKyAgICBjb25zdCBpbnQgX19pID0gKEkpOwkJCQkJCVwKKyAgICBpZiAoVFJFRV9DT0RFIChfX3QpICE9IChDT0RFKSkJCQkJCVwKKyAgICAgIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fLCAoQ09ERSksIDApOyBcCisgICAgaWYgKF9faSA8IDAgfHwgX19pID49IFRSRUVfT1BFUkFORF9MRU5HVEggKF9fdCkpCQkJXAorICAgICAgdHJlZV9vcGVyYW5kX2NoZWNrX2ZhaWxlZCAoX19pLCBfX3QsCQkJCVwKKwkJCQkgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pOwlcCisgICAgJl9fdC0+ZXhwLm9wZXJhbmRzW19faV07IH0pKQorCisvKiBOb2RlcyBhcmUgY2hhaW5lZCB0b2dldGhlciBmb3IgbWFueSBwdXJwb3Nlcy4KKyAgIFR5cGVzIGFyZSBjaGFpbmVkIHRvZ2V0aGVyIHRvIHJlY29yZCB0aGVtIGZvciBiZWluZyBvdXRwdXQgdG8gdGhlIGRlYnVnZ2VyCisgICAoc2VlIHRoZSBmdW5jdGlvbiBgY2hhaW5fdHlwZScpLgorICAgRGVjbHMgaW4gdGhlIHNhbWUgc2NvcGUgYXJlIGNoYWluZWQgdG9nZXRoZXIgdG8gcmVjb3JkIHRoZSBjb250ZW50cworICAgb2YgdGhlIHNjb3BlLgorICAgU3RhdGVtZW50IG5vZGVzIGZvciBzdWNjZXNzaXZlIHN0YXRlbWVudHMgdXNlZCB0byBiZSBjaGFpbmVkIHRvZ2V0aGVyLgorICAgT2Z0ZW4gbGlzdHMgb2YgdGhpbmdzIGFyZSByZXByZXNlbnRlZCBieSBUUkVFX0xJU1Qgbm9kZXMgdGhhdAorICAgYXJlIGNoYWluZWQgdG9nZXRoZXIuICAqLworCisjZGVmaW5lIFRSRUVfQ0hBSU4oTk9ERSkgX19leHRlbnNpb25fXyBcCisoKih7X190eXBlb2YgKE5PREUpIGNvbnN0IF9fdCA9IChOT0RFKTsJCQkJXAorICAgICZfX3QtPmNvbW1vbi5jaGFpbjsgfSkpCisKKy8qIEluIGFsbCBub2RlcyB0aGF0IGFyZSBleHByZXNzaW9ucywgdGhpcyBpcyB0aGUgZGF0YSB0eXBlIG9mIHRoZSBleHByZXNzaW9uLgorICAgSW4gUE9JTlRFUl9UWVBFIG5vZGVzLCB0aGlzIGlzIHRoZSB0eXBlIHRoYXQgdGhlIHBvaW50ZXIgcG9pbnRzIHRvLgorICAgSW4gQVJSQVlfVFlQRSBub2RlcywgdGhpcyBpcyB0aGUgdHlwZSBvZiB0aGUgZWxlbWVudHMuCisgICBJbiBWRUNUT1JfVFlQRSBub2RlcywgdGhpcyBpcyB0aGUgdHlwZSBvZiB0aGUgZWxlbWVudHMuICAqLworI2RlZmluZSBUUkVFX1RZUEUoTk9ERSkgX19leHRlbnNpb25fXyBcCisoKih7X190eXBlb2YgKE5PREUpIGNvbnN0IF9fdCA9IChOT0RFKTsJCQkJCVwKKyAgICAmX190LT5jb21tb24udHlwZTsgfSkpCisKK2V4dGVybiB2b2lkIHRyZWVfY29udGFpbnNfc3RydWN0X2NoZWNrX2ZhaWxlZCAoY29uc3RfdHJlZSwKKwkJCQkJICAgICAgIGNvbnN0IGVudW0gdHJlZV9ub2RlX3N0cnVjdHVyZV9lbnVtLAorCQkJCQkgICAgICAgY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKikKKyAgQVRUUklCVVRFX05PUkVUVVJOOworCitleHRlcm4gdm9pZCB0cmVlX2NoZWNrX2ZhaWxlZCAoY29uc3RfdHJlZSwgY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKiwKKwkJCSAgICAgICAuLi4pIEFUVFJJQlVURV9OT1JFVFVSTjsKK2V4dGVybiB2b2lkIHRyZWVfbm90X2NoZWNrX2ZhaWxlZCAoY29uc3RfdHJlZSwgY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKiwKKwkJCQkgICAuLi4pIEFUVFJJQlVURV9OT1JFVFVSTjsKK2V4dGVybiB2b2lkIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChjb25zdF90cmVlLCBjb25zdCBlbnVtIHRyZWVfY29kZV9jbGFzcywKKwkJCQkgICAgIGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICopCisgICAgQVRUUklCVVRFX05PUkVUVVJOOworZXh0ZXJuIHZvaWQgdHJlZV9yYW5nZV9jaGVja19mYWlsZWQgKGNvbnN0X3RyZWUsIGNvbnN0IGNoYXIgKiwgaW50LAorCQkJCSAgICAgY29uc3QgY2hhciAqLCBlbnVtIHRyZWVfY29kZSwKKwkJCQkgICAgIGVudW0gdHJlZV9jb2RlKTsKK2V4dGVybiB2b2lkIHRyZWVfbm90X2NsYXNzX2NoZWNrX2ZhaWxlZCAoY29uc3RfdHJlZSwKKwkJCQkJIGNvbnN0IGVudW0gdHJlZV9jb2RlX2NsYXNzLAorCQkJCQkgY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKikKKyAgICBBVFRSSUJVVEVfTk9SRVRVUk47CitleHRlcm4gdm9pZCB0cmVlX3ZlY19lbHRfY2hlY2tfZmFpbGVkIChpbnQsIGludCwgY29uc3QgY2hhciAqLAorCQkJCSAgICAgICBpbnQsIGNvbnN0IGNoYXIgKikKKyAgICBBVFRSSUJVVEVfTk9SRVRVUk47CitleHRlcm4gdm9pZCBwaGlfbm9kZV9lbHRfY2hlY2tfZmFpbGVkIChpbnQsIGludCwgY29uc3QgY2hhciAqLAorCQkJCSAgICAgICBpbnQsIGNvbnN0IGNoYXIgKikKKyAgICBBVFRSSUJVVEVfTk9SRVRVUk47CitleHRlcm4gdm9pZCB0cmVlX29wZXJhbmRfY2hlY2tfZmFpbGVkIChpbnQsIGNvbnN0X3RyZWUsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICopCisgICAgQVRUUklCVVRFX05PUkVUVVJOOworZXh0ZXJuIHZvaWQgb21wX2NsYXVzZV9jaGVja19mYWlsZWQgKGNvbnN0X3RyZWUsIGNvbnN0IGNoYXIgKiwgaW50LAorCQkJCSAgICAgY29uc3QgY2hhciAqLCBlbnVtIG9tcF9jbGF1c2VfY29kZSkKKyAgICBBVFRSSUJVVEVfTk9SRVRVUk47CitleHRlcm4gdm9pZCBvbXBfY2xhdXNlX29wZXJhbmRfY2hlY2tfZmFpbGVkIChpbnQsIGNvbnN0X3RyZWUsIGNvbnN0IGNoYXIgKiwKKwkJCQkgICAgICAgICAgICAgaW50LCBjb25zdCBjaGFyICopCisgICAgQVRUUklCVVRFX05PUkVUVVJOOworZXh0ZXJuIHZvaWQgb21wX2NsYXVzZV9yYW5nZV9jaGVja19mYWlsZWQgKGNvbnN0X3RyZWUsIGNvbnN0IGNoYXIgKiwgaW50LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKiwgZW51bSBvbXBfY2xhdXNlX2NvZGUsCisJCQkgICAgICAgZW51bSBvbXBfY2xhdXNlX2NvZGUpCisgICAgQVRUUklCVVRFX05PUkVUVVJOOworCisjZWxzZSAvKiBub3QgRU5BQkxFX1RSRUVfQ0hFQ0tJTkcsIG9yIG5vdCBnY2MgKi8KKworI2RlZmluZSBDT05UQUlOU19TVFJVQ1RfQ0hFQ0soVCwgRU5VTSkgICAgICAgICAgKFQpCisjZGVmaW5lIFRSRUVfQ0hFQ0soVCwgQ09ERSkJCQkoVCkKKyNkZWZpbmUgVFJFRV9OT1RfQ0hFQ0soVCwgQ09ERSkJCQkoVCkKKyNkZWZpbmUgVFJFRV9DSEVDSzIoVCwgQ09ERTEsIENPREUyKQkJKFQpCisjZGVmaW5lIFRSRUVfTk9UX0NIRUNLMihULCBDT0RFMSwgQ09ERTIpCShUKQorI2RlZmluZSBUUkVFX0NIRUNLMyhULCBDT0RFMSwgQ09ERTIsIENPREUzKQkoVCkKKyNkZWZpbmUgVFJFRV9OT1RfQ0hFQ0szKFQsIENPREUxLCBDT0RFMiwgQ09ERTMpCShUKQorI2RlZmluZSBUUkVFX0NIRUNLNChULCBDT0RFMSwgQ09ERTIsIENPREUzLCBDT0RFNCkgKFQpCisjZGVmaW5lIFRSRUVfTk9UX0NIRUNLNChULCBDT0RFMSwgQ09ERTIsIENPREUzLCBDT0RFNCkgKFQpCisjZGVmaW5lIFRSRUVfQ0hFQ0s1KFQsIENPREUxLCBDT0RFMiwgQ09ERTMsIENPREU0LCBDT0RFNSkgKFQpCisjZGVmaW5lIFRSRUVfTk9UX0NIRUNLNShULCBDT0RFMSwgQ09ERTIsIENPREUzLCBDT0RFNCwgQ09ERTUpIChUKQorI2RlZmluZSBUUkVFX0NMQVNTX0NIRUNLKFQsIENPREUpCQkoVCkKKyNkZWZpbmUgVFJFRV9SQU5HRV9DSEVDSyhULCBDT0RFMSwgQ09ERTIpCShUKQorI2RlZmluZSBFWFBSX0NIRUNLKFQpCQkJCShUKQorI2RlZmluZSBOT05fVFlQRV9DSEVDSyhUKQkJCShUKQorI2RlZmluZSBUUkVFX1ZFQ19FTFRfQ0hFQ0soVCwgSSkJCSgoVCktPnZlYy5hW0ldKQorI2RlZmluZSBUUkVFX09QRVJBTkRfQ0hFQ0soVCwgSSkJCSgoVCktPmV4cC5vcGVyYW5kc1tJXSkKKyNkZWZpbmUgVFJFRV9PUEVSQU5EX0NIRUNLX0NPREUoVCwgQ09ERSwgSSkJKChUKS0+ZXhwLm9wZXJhbmRzW0ldKQorI2RlZmluZSBUUkVFX1JUTF9PUEVSQU5EX0NIRUNLKFQsIENPREUsIEkpICAoKihydHggKikgJigoVCktPmV4cC5vcGVyYW5kc1tJXSkpCisjZGVmaW5lIE9NUF9DTEFVU0VfRUxUX0NIRUNLKFQsIGkpCSAgICAgICAgKChUKS0+b21wX2NsYXVzZS5vcHNbaV0pCisjZGVmaW5lIE9NUF9DTEFVU0VfUkFOR0VfQ0hFQ0soVCwgQ09ERTEsIENPREUyKQkoVCkKKyNkZWZpbmUgT01QX0NMQVVTRV9TVUJDT0RFX0NIRUNLKFQsIENPREUpCShUKQorCisjZGVmaW5lIFRSRUVfQ0hBSU4oTk9ERSkgKChOT0RFKS0+Y29tbW9uLmNoYWluKQorI2RlZmluZSBUUkVFX1RZUEUoTk9ERSkgKChOT0RFKS0+Y29tbW9uLnR5cGUpCisKKyNlbmRpZgorCisjZGVmaW5lIFRSRUVfQkxPQ0soTk9ERSkJCSoodHJlZV9ibG9jayAoTk9ERSkpCisKKyNpbmNsdWRlICJ0cmVlLWNoZWNrLmgiCisKKyNkZWZpbmUgVFlQRV9DSEVDSyhUKQkJVFJFRV9DTEFTU19DSEVDSyAoVCwgdGNjX3R5cGUpCisjZGVmaW5lIERFQ0xfTUlOSU1BTF9DSEVDSyhUKSAgIENPTlRBSU5TX1NUUlVDVF9DSEVDSyAoVCwgVFNfREVDTF9NSU5JTUFMKQorI2RlZmluZSBERUNMX0NPTU1PTl9DSEVDSyhUKSAgICBDT05UQUlOU19TVFJVQ1RfQ0hFQ0sgKFQsIFRTX0RFQ0xfQ09NTU9OKQorI2RlZmluZSBERUNMX1dSVExfQ0hFQ0soVCkgICAgICBDT05UQUlOU19TVFJVQ1RfQ0hFQ0sgKFQsIFRTX0RFQ0xfV1JUTCkKKyNkZWZpbmUgREVDTF9XSVRIX1ZJU19DSEVDSyhUKSAgQ09OVEFJTlNfU1RSVUNUX0NIRUNLIChULCBUU19ERUNMX1dJVEhfVklTKQorI2RlZmluZSBERUNMX05PTl9DT01NT05fQ0hFQ0soVCkgQ09OVEFJTlNfU1RSVUNUX0NIRUNLIChULCBUU19ERUNMX05PTl9DT01NT04pCisjZGVmaW5lIENTVF9DSEVDSyhUKQkJVFJFRV9DTEFTU19DSEVDSyAoVCwgdGNjX2NvbnN0YW50KQorI2RlZmluZSBTVE1UX0NIRUNLKFQpCQlUUkVFX0NMQVNTX0NIRUNLIChULCB0Y2Nfc3RhdGVtZW50KQorI2RlZmluZSBWTF9FWFBfQ0hFQ0soVCkJCVRSRUVfQ0xBU1NfQ0hFQ0sgKFQsIHRjY192bF9leHApCisjZGVmaW5lIEZVTkNfT1JfTUVUSE9EX0NIRUNLKFQpCVRSRUVfQ0hFQ0syIChULCBGVU5DVElPTl9UWVBFLCBNRVRIT0RfVFlQRSkKKyNkZWZpbmUgUFRSX09SX1JFRl9DSEVDSyhUKQlUUkVFX0NIRUNLMiAoVCwgUE9JTlRFUl9UWVBFLCBSRUZFUkVOQ0VfVFlQRSkKKworI2RlZmluZSBSRUNPUkRfT1JfVU5JT05fQ0hFQ0soVCkJXAorICBUUkVFX0NIRUNLMyAoVCwgUkVDT1JEX1RZUEUsIFVOSU9OX1RZUEUsIFFVQUxfVU5JT05fVFlQRSkKKyNkZWZpbmUgTk9UX1JFQ09SRF9PUl9VTklPTl9DSEVDSyhUKSBcCisgIFRSRUVfTk9UX0NIRUNLMyAoVCwgUkVDT1JEX1RZUEUsIFVOSU9OX1RZUEUsIFFVQUxfVU5JT05fVFlQRSkKKworI2RlZmluZSBOVU1FUklDQUxfVFlQRV9DSEVDSyhUKQkJCQkJXAorICBUUkVFX0NIRUNLNSAoVCwgSU5URUdFUl9UWVBFLCBFTlVNRVJBTF9UWVBFLCBCT09MRUFOX1RZUEUsIFJFQUxfVFlQRSwJXAorCSAgICAgICBGSVhFRF9QT0lOVF9UWVBFKQorCisvKiBIZXJlIGlzIGhvdyBwcmltaXRpdmUgb3IgYWxyZWFkeS1jYW5vbmljYWxpemVkIHR5cGVzJyBoYXNoIGNvZGVzCisgICBhcmUgbWFkZS4gICovCisjZGVmaW5lIFRZUEVfSEFTSChUWVBFKSAoVFlQRV9VSUQgKFRZUEUpKQorCisvKiBBIHNpbXBsZSBoYXNoIGZ1bmN0aW9uIGZvciBhbiBhcmJpdHJhcnkgdHJlZSBub2RlLiAgVGhpcyBtdXN0IG5vdCBiZQorICAgdXNlZCBpbiBoYXNoIHRhYmxlcyB3aGljaCBhcmUgc2F2ZWQgdG8gYSBQQ0guICAqLworI2RlZmluZSBUUkVFX0hBU0goTk9ERSkgKChzaXplX3QpIChOT0RFKSAmIDA3Nzc3NzcpCisKKy8qIFRlc3RzIGlmIENPREUgaXMgYSBjb252ZXJzaW9uIGV4cHIgKE5PUF9FWFBSIG9yIENPTlZFUlRfRVhQUikuICAqLworI2RlZmluZSBDT05WRVJUX0VYUFJfQ09ERV9QKENPREUpCQkJCVwKKyAgKChDT0RFKSA9PSBOT1BfRVhQUiB8fCAoQ09ERSkgPT0gQ09OVkVSVF9FWFBSKQorCisvKiBTaW1pbGFybHksIGJ1dCBhY2NlcHQgYW4gZXhwcmVzc2lvbnMgaW5zdGVhZCBvZiBhIHRyZWUgY29kZS4gICovCisjZGVmaW5lIENPTlZFUlRfRVhQUl9QKEVYUCkJQ09OVkVSVF9FWFBSX0NPREVfUCAoVFJFRV9DT0RFIChFWFApKQorCisvKiBHZW5lcmF0ZSBjYXNlIGZvciBOT1BfRVhQUiwgQ09OVkVSVF9FWFBSLiAgKi8KKworI2RlZmluZSBDQVNFX0NPTlZFUlQJCQkJCQlcCisgIGNhc2UgTk9QX0VYUFI6CQkJCQkJXAorICBjYXNlIENPTlZFUlRfRVhQUgorCisvKiBHaXZlbiBhbiBleHByZXNzaW9uIGFzIGEgdHJlZSwgc3RyaXAgYW55IGNvbnZlcnNpb24gdGhhdCBnZW5lcmF0ZXMKKyAgIG5vIGluc3RydWN0aW9uLiAgQWNjZXB0cyBib3RoIHRyZWUgYW5kIGNvbnN0X3RyZWUgYXJndW1lbnRzIHNpbmNlCisgICB3ZSBhcmUgbm90IG1vZGlmeWluZyB0aGUgdHJlZSBpdHNlbGYuICAqLworCisjZGVmaW5lIFNUUklQX05PUFMoRVhQKSBcCisgIChFWFApID0gdHJlZV9zdHJpcF9ub3BfY29udmVyc2lvbnMgKENPTlNUX0NBU1RfVFJFRSAoRVhQKSkKKworLyogTGlrZSBTVFJJUF9OT1BTLCBidXQgZG9uJ3QgbGV0IHRoZSBzaWduZWRuZXNzIGNoYW5nZSBlaXRoZXIuICAqLworCisjZGVmaW5lIFNUUklQX1NJR05fTk9QUyhFWFApIFwKKyAgKEVYUCkgPSB0cmVlX3N0cmlwX3NpZ25fbm9wX2NvbnZlcnNpb25zIChDT05TVF9DQVNUX1RSRUUgKEVYUCkpCisKKy8qIExpa2UgU1RSSVBfTk9QUywgYnV0IGRvbid0IGFsdGVyIHRoZSBUUkVFX1RZUEUgZWl0aGVyLiAgKi8KKworI2RlZmluZSBTVFJJUF9UWVBFX05PUFMoRVhQKSBcCisgIHdoaWxlICgoQ09OVkVSVF9FWFBSX1AgKEVYUCkJCQkJCVwKKwkgIHx8IFRSRUVfQ09ERSAoRVhQKSA9PSBOT05fTFZBTFVFX0VYUFIpCQlcCisJICYmIFRSRUVfT1BFUkFORCAoRVhQLCAwKSAhPSBlcnJvcl9tYXJrX25vZGUJCVwKKwkgJiYgKFRSRUVfVFlQRSAoRVhQKQkJCQkJXAorCSAgICAgPT0gVFJFRV9UWVBFIChUUkVFX09QRVJBTkQgKEVYUCwgMCkpKSkJCVwKKyAgICAoRVhQKSA9IFRSRUVfT1BFUkFORCAoRVhQLCAwKQorCisvKiBSZW1vdmUgdW5uZWNlc3NhcnkgdHlwZSBjb252ZXJzaW9ucyBhY2NvcmRpbmcgdG8KKyAgIHRyZWVfc3NhX3VzZWxlc3NfdHlwZV9jb252ZXJzaW9uLiAgKi8KKworI2RlZmluZSBTVFJJUF9VU0VMRVNTX1RZUEVfQ09OVkVSU0lPTihFWFApIFwKKyAgKEVYUCkgPSB0cmVlX3NzYV9zdHJpcF91c2VsZXNzX3R5cGVfY29udmVyc2lvbnMgKEVYUCkKKworLyogTm9uemVybyBpZiBUWVBFIHJlcHJlc2VudHMgYW4gaW50ZWdyYWwgdHlwZS4gIE5vdGUgdGhhdCB3ZSBkbyBub3QKKyAgIGluY2x1ZGUgQ09NUExFWCB0eXBlcyBoZXJlLiAgS2VlcCB0aGVzZSBjaGVja3MgaW4gYXNjZW5kaW5nIGNvZGUKKyAgIG9yZGVyLiAgKi8KKworI2RlZmluZSBJTlRFR1JBTF9UWVBFX1AoVFlQRSkgIFwKKyAgKFRSRUVfQ09ERSAoVFlQRSkgPT0gRU5VTUVSQUxfVFlQRSAgXAorICAgfHwgVFJFRV9DT0RFIChUWVBFKSA9PSBCT09MRUFOX1RZUEUgXAorICAgfHwgVFJFRV9DT0RFIChUWVBFKSA9PSBJTlRFR0VSX1RZUEUpCisKKy8qIE5vbnplcm8gaWYgVFlQRSByZXByZXNlbnRzIGEgbm9uLXNhdHVyYXRpbmcgZml4ZWQtcG9pbnQgdHlwZS4gICovCisKKyNkZWZpbmUgTk9OX1NBVF9GSVhFRF9QT0lOVF9UWVBFX1AoVFlQRSkgXAorICAoVFJFRV9DT0RFIChUWVBFKSA9PSBGSVhFRF9QT0lOVF9UWVBFICYmICFUWVBFX1NBVFVSQVRJTkcgKFRZUEUpKQorCisvKiBOb256ZXJvIGlmIFRZUEUgcmVwcmVzZW50cyBhIHNhdHVyYXRpbmcgZml4ZWQtcG9pbnQgdHlwZS4gICovCisKKyNkZWZpbmUgU0FUX0ZJWEVEX1BPSU5UX1RZUEVfUChUWVBFKSBcCisgIChUUkVFX0NPREUgKFRZUEUpID09IEZJWEVEX1BPSU5UX1RZUEUgJiYgVFlQRV9TQVRVUkFUSU5HIChUWVBFKSkKKworLyogTm9uemVybyBpZiBUWVBFIHJlcHJlc2VudHMgYSBmaXhlZC1wb2ludCB0eXBlLiAgKi8KKworI2RlZmluZSBGSVhFRF9QT0lOVF9UWVBFX1AoVFlQRSkJKFRSRUVfQ09ERSAoVFlQRSkgPT0gRklYRURfUE9JTlRfVFlQRSkKKworLyogTm9uemVybyBpZiBUWVBFIHJlcHJlc2VudHMgYSBzY2FsYXIgZmxvYXRpbmctcG9pbnQgdHlwZS4gICovCisKKyNkZWZpbmUgU0NBTEFSX0ZMT0FUX1RZUEVfUChUWVBFKSAoVFJFRV9DT0RFIChUWVBFKSA9PSBSRUFMX1RZUEUpCisKKy8qIE5vbnplcm8gaWYgVFlQRSByZXByZXNlbnRzIGEgY29tcGxleCBmbG9hdGluZy1wb2ludCB0eXBlLiAgKi8KKworI2RlZmluZSBDT01QTEVYX0ZMT0FUX1RZUEVfUChUWVBFKQlcCisgIChUUkVFX0NPREUgKFRZUEUpID09IENPTVBMRVhfVFlQRQlcCisgICAmJiBUUkVFX0NPREUgKFRSRUVfVFlQRSAoVFlQRSkpID09IFJFQUxfVFlQRSkKKworLyogTm9uemVybyBpZiBUWVBFIHJlcHJlc2VudHMgYSB2ZWN0b3IgZmxvYXRpbmctcG9pbnQgdHlwZS4gICovCisKKyNkZWZpbmUgVkVDVE9SX0ZMT0FUX1RZUEVfUChUWVBFKQlcCisgIChUUkVFX0NPREUgKFRZUEUpID09IFZFQ1RPUl9UWVBFCVwKKyAgICYmIFRSRUVfQ09ERSAoVFJFRV9UWVBFIChUWVBFKSkgPT0gUkVBTF9UWVBFKQorCisvKiBOb256ZXJvIGlmIFRZUEUgcmVwcmVzZW50cyBhIGZsb2F0aW5nLXBvaW50IHR5cGUsIGluY2x1ZGluZyBjb21wbGV4CisgICBhbmQgdmVjdG9yIGZsb2F0aW5nLXBvaW50IHR5cGVzLiAgVGhlIHZlY3RvciBhbmQgY29tcGxleCBjaGVjayBkb2VzCisgICBub3QgdXNlIHRoZSBwcmV2aW91cyB0d28gbWFjcm9zIHRvIGVuYWJsZSBlYXJseSBmb2xkaW5nLiAgKi8KKworI2RlZmluZSBGTE9BVF9UWVBFX1AoVFlQRSkJCQlcCisgIChTQ0FMQVJfRkxPQVRfVFlQRV9QIChUWVBFKQkJCVwKKyAgIHx8ICgoVFJFRV9DT0RFIChUWVBFKSA9PSBDT01QTEVYX1RZUEUgCVwKKyAgICAgICAgfHwgVFJFRV9DT0RFIChUWVBFKSA9PSBWRUNUT1JfVFlQRSkJXAorICAgICAgICYmIFNDQUxBUl9GTE9BVF9UWVBFX1AgKFRSRUVfVFlQRSAoVFlQRSkpKSkKKworLyogTm9uemVybyBpZiBUWVBFIHJlcHJlc2VudHMgYSBkZWNpbWFsIGZsb2F0aW5nLXBvaW50IHR5cGUuICAqLworI2RlZmluZSBERUNJTUFMX0ZMT0FUX1RZUEVfUChUWVBFKQkJXAorICAoU0NBTEFSX0ZMT0FUX1RZUEVfUCAoVFlQRSkJCQlcCisgICAmJiBERUNJTUFMX0ZMT0FUX01PREVfUCAoVFlQRV9NT0RFIChUWVBFKSkpCisKKy8qIE5vbnplcm8gaWYgVFlQRSBpcyBhIHJlY29yZCBvciB1bmlvbiB0eXBlLiAgKi8KKyNkZWZpbmUgUkVDT1JEX09SX1VOSU9OX1RZUEVfUChUWVBFKQkJXAorICAoVFJFRV9DT0RFIChUWVBFKSA9PSBSRUNPUkRfVFlQRQkJXAorICAgfHwgVFJFRV9DT0RFIChUWVBFKSA9PSBVTklPTl9UWVBFCQlcCisgICB8fCBUUkVFX0NPREUgKFRZUEUpID09IFFVQUxfVU5JT05fVFlQRSkKKworLyogTm9uemVybyBpZiBUWVBFIHJlcHJlc2VudHMgYW4gYWdncmVnYXRlIChtdWx0aS1jb21wb25lbnQpIHR5cGUuCisgICBLZWVwIHRoZXNlIGNoZWNrcyBpbiBhc2NlbmRpbmcgY29kZSBvcmRlci4gICovCisKKyNkZWZpbmUgQUdHUkVHQVRFX1RZUEVfUChUWVBFKSBcCisgIChUUkVFX0NPREUgKFRZUEUpID09IEFSUkFZX1RZUEUgfHwgUkVDT1JEX09SX1VOSU9OX1RZUEVfUCAoVFlQRSkpCisKKy8qIE5vbnplcm8gaWYgVFlQRSByZXByZXNlbnRzIGEgcG9pbnRlciBvciByZWZlcmVuY2UgdHlwZS4KKyAgIChJdCBzaG91bGQgYmUgcmVuYW1lZCB0byBJTkRJUkVDVF9UWVBFX1AuKSAgS2VlcCB0aGVzZSBjaGVja3MgaW4KKyAgIGFzY2VuZGluZyBjb2RlIG9yZGVyLiAgKi8KKworI2RlZmluZSBQT0lOVEVSX1RZUEVfUChUWVBFKSBcCisgIChUUkVFX0NPREUgKFRZUEUpID09IFBPSU5URVJfVFlQRSB8fCBUUkVFX0NPREUgKFRZUEUpID09IFJFRkVSRU5DRV9UWVBFKQorCisvKiBOb256ZXJvIGlmIHRoaXMgdHlwZSBpcyBhIGNvbXBsZXRlIHR5cGUuICAqLworI2RlZmluZSBDT01QTEVURV9UWVBFX1AoTk9ERSkgKFRZUEVfU0laRSAoTk9ERSkgIT0gTlVMTF9UUkVFKQorCisvKiBOb256ZXJvIGlmIHRoaXMgdHlwZSBpcyB0aGUgKHBvc3NpYmx5IHF1YWxpZmllZCkgdm9pZCB0eXBlLiAgKi8KKyNkZWZpbmUgVk9JRF9UWVBFX1AoTk9ERSkgKFRSRUVfQ09ERSAoTk9ERSkgPT0gVk9JRF9UWVBFKQorCisvKiBOb256ZXJvIGlmIHRoaXMgdHlwZSBpcyBjb21wbGV0ZSBvciBpcyBjdiB2b2lkLiAgKi8KKyNkZWZpbmUgQ09NUExFVEVfT1JfVk9JRF9UWVBFX1AoTk9ERSkgXAorICAoQ09NUExFVEVfVFlQRV9QIChOT0RFKSB8fCBWT0lEX1RZUEVfUCAoTk9ERSkpCisKKy8qIE5vbnplcm8gaWYgdGhpcyB0eXBlIGlzIGNvbXBsZXRlIG9yIGlzIGFuIGFycmF5IHdpdGggdW5zcGVjaWZpZWQgYm91bmQuICAqLworI2RlZmluZSBDT01QTEVURV9PUl9VTkJPVU5EX0FSUkFZX1RZUEVfUChOT0RFKSBcCisgIChDT01QTEVURV9UWVBFX1AgKFRSRUVfQ09ERSAoTk9ERSkgPT0gQVJSQVlfVFlQRSA/IFRSRUVfVFlQRSAoTk9ERSkgOiAoTk9ERSkpKQorCisMCisvKiBEZWZpbmUgbWFueSBib29sZWFuIGZpZWxkcyB0aGF0IGFsbCB0cmVlIG5vZGVzIGhhdmUuICAqLworCisvKiBJbiBWQVJfREVDTCBub2Rlcywgbm9uemVybyBtZWFucyBhZGRyZXNzIG9mIHRoaXMgaXMgbmVlZGVkLgorICAgU28gaXQgY2Fubm90IGJlIGluIGEgcmVnaXN0ZXIuCisgICBJbiBhIEZVTkNUSU9OX0RFQ0wsIG5vbnplcm8gbWVhbnMgaXRzIGFkZHJlc3MgaXMgbmVlZGVkLgorICAgU28gaXQgbXVzdCBiZSBjb21waWxlZCBldmVuIGlmIGl0IGlzIGFuIGlubGluZSBmdW5jdGlvbi4KKyAgIEluIGEgRklFTERfREVDTCBub2RlLCBpdCBtZWFucyB0aGF0IHRoZSBwcm9ncmFtbWVyIGlzIHBlcm1pdHRlZCB0bworICAgY29uc3RydWN0IHRoZSBhZGRyZXNzIG9mIHRoaXMgZmllbGQuICBUaGlzIGlzIHVzZWQgZm9yIGFsaWFzaW5nCisgICBwdXJwb3Nlczogc2VlIHJlY29yZF9jb21wb25lbnRfYWxpYXNlcy4KKyAgIEluIENPTlNUUlVDVE9SIG5vZGVzLCBpdCBtZWFucyBvYmplY3QgY29uc3RydWN0ZWQgbXVzdCBiZSBpbiBtZW1vcnkuCisgICBJbiBMQUJFTF9ERUNMIG5vZGVzLCBpdCBtZWFucyBhIGdvdG8gZm9yIHRoaXMgbGFiZWwgaGFzIGJlZW4gc2VlbgorICAgZnJvbSBhIHBsYWNlIG91dHNpZGUgYWxsIGJpbmRpbmcgY29udG91cnMgdGhhdCByZXN0b3JlIHN0YWNrIGxldmVscy4KKyAgIEluIC4uLl9UWVBFIG5vZGVzLCBpdCBtZWFucyB0aGF0IG9iamVjdHMgb2YgdGhpcyB0eXBlIG11c3QKKyAgIGJlIGZ1bGx5IGFkZHJlc3NhYmxlLiAgVGhpcyBtZWFucyB0aGF0IHBpZWNlcyBvZiB0aGlzCisgICBvYmplY3QgY2Fubm90IGdvIGludG8gcmVnaXN0ZXIgcGFyYW1ldGVycywgZm9yIGV4YW1wbGUuCisgICBJbiBJREVOVElGSUVSX05PREVzLCB0aGlzIG1lYW5zIHRoYXQgc29tZSBleHRlcm4gZGVjbCBmb3IgdGhpcyBuYW1lCisgICBoYWQgaXRzIGFkZHJlc3MgdGFrZW4uICBUaGF0IG1hdHRlcnMgZm9yIGlubGluZSBmdW5jdGlvbnMuICAqLworI2RlZmluZSBUUkVFX0FERFJFU1NBQkxFKE5PREUpICgoTk9ERSktPmJhc2UuYWRkcmVzc2FibGVfZmxhZykKKworLyogU2V0IG9uIGEgQ0FMTF9FWFBSIGlmIHRoZSBjYWxsIGlzIGluIGEgdGFpbCBwb3NpdGlvbiwgaWUuIGp1c3QgYmVmb3JlIHRoZQorICAgZXhpdCBvZiBhIGZ1bmN0aW9uLiAgQ2FsbHMgZm9yIHdoaWNoIHRoaXMgaXMgdHJ1ZSBhcmUgY2FuZGlkYXRlcyBmb3IgdGFpbAorICAgY2FsbCBvcHRpbWl6YXRpb25zLiAgKi8KKyNkZWZpbmUgQ0FMTF9FWFBSX1RBSUxDQUxMKE5PREUpIFwKKyAgKENBTExfRVhQUl9DSEVDSyhOT0RFKS0+YmFzZS5hZGRyZXNzYWJsZV9mbGFnKQorCisvKiBVc2VkIGFzIGEgdGVtcG9yYXJ5IGZpZWxkIG9uIGEgQ0FTRV9MQUJFTF9FWFBSIHRvIGluZGljYXRlIHRoYXQgdGhlCisgICBDQVNFX0xPVyBvcGVyYW5kIGhhcyBiZWVuIHByb2Nlc3NlZC4gICovCisjZGVmaW5lIENBU0VfTE9XX1NFRU4oTk9ERSkgXAorICAoQ0FTRV9MQUJFTF9FWFBSX0NIRUNLIChOT0RFKS0+YmFzZS5hZGRyZXNzYWJsZV9mbGFnKQorCisjZGVmaW5lIFBSRURJQ1RfRVhQUl9PVVRDT01FKE5PREUpIFwKKyAgKChlbnVtIHByZWRpY3Rpb24pIChQUkVESUNUX0VYUFJfQ0hFQ0soTk9ERSktPmJhc2UuYWRkcmVzc2FibGVfZmxhZykpCisjZGVmaW5lIFNFVF9QUkVESUNUX0VYUFJfT1VUQ09NRShOT0RFLCBPVVRDT01FKSBcCisgIChQUkVESUNUX0VYUFJfQ0hFQ0soTk9ERSktPmJhc2UuYWRkcmVzc2FibGVfZmxhZyA9IChpbnQpIE9VVENPTUUpCisjZGVmaW5lIFBSRURJQ1RfRVhQUl9QUkVESUNUT1IoTk9ERSkgXAorICAoKGVudW0gYnJfcHJlZGljdG9yKXRyZWVfbG93X2NzdCAoVFJFRV9PUEVSQU5EIChQUkVESUNUX0VYUFJfQ0hFQ0sgKE5PREUpLCAwKSwgMCkpCisKKy8qIEluIGEgVkFSX0RFQ0wsIG5vbnplcm8gbWVhbnMgYWxsb2NhdGUgc3RhdGljIHN0b3JhZ2UuCisgICBJbiBhIEZVTkNUSU9OX0RFQ0wsIG5vbnplcm8gaWYgZnVuY3Rpb24gaGFzIGJlZW4gZGVmaW5lZC4KKyAgIEluIGEgQ09OU1RSVUNUT1IsIG5vbnplcm8gbWVhbnMgYWxsb2NhdGUgc3RhdGljIHN0b3JhZ2UuICAqLworI2RlZmluZSBUUkVFX1NUQVRJQyhOT0RFKSAoKE5PREUpLT5iYXNlLnN0YXRpY19mbGFnKQorCisvKiBJbiBhbiBBRERSX0VYUFIsIG5vbnplcm8gbWVhbnMgZG8gbm90IHVzZSBhIHRyYW1wb2xpbmUuICAqLworI2RlZmluZSBUUkVFX05PX1RSQU1QT0xJTkUoTk9ERSkgKEFERFJfRVhQUl9DSEVDSyAoTk9ERSktPmJhc2Uuc3RhdGljX2ZsYWcpCisKKy8qIEluIGEgVEFSR0VUX0VYUFIgb3IgV0lUSF9DTEVBTlVQX0VYUFIsIG1lYW5zIHRoYXQgdGhlIHBlcnRpbmVudCBjbGVhbnVwCisgICBzaG91bGQgb25seSBiZSBleGVjdXRlZCBpZiBhbiBleGNlcHRpb24gaXMgdGhyb3duLCBub3Qgb24gbm9ybWFsIGV4aXQKKyAgIG9mIGl0cyBzY29wZS4gICovCisjZGVmaW5lIENMRUFOVVBfRUhfT05MWShOT0RFKSAoKE5PREUpLT5iYXNlLnN0YXRpY19mbGFnKQorCisvKiBJbiBhIFRSWV9DQVRDSF9FWFBSLCBtZWFucyB0aGF0IHRoZSBoYW5kbGVyIHNob3VsZCBiZSBjb25zaWRlcmVkIGEKKyAgIHNlcGFyYXRlIGNsZWFudXAgaW4gaG9ub3JfcHJvdGVjdF9jbGVhbnVwX2FjdGlvbnMuICAqLworI2RlZmluZSBUUllfQ0FUQ0hfSVNfQ0xFQU5VUChOT0RFKSBcCisgIChUUllfQ0FUQ0hfRVhQUl9DSEVDSyAoTk9ERSktPmJhc2Uuc3RhdGljX2ZsYWcpCisKKy8qIFVzZWQgYXMgYSB0ZW1wb3JhcnkgZmllbGQgb24gYSBDQVNFX0xBQkVMX0VYUFIgdG8gaW5kaWNhdGUgdGhhdCB0aGUKKyAgIENBU0VfSElHSCBvcGVyYW5kIGhhcyBiZWVuIHByb2Nlc3NlZC4gICovCisjZGVmaW5lIENBU0VfSElHSF9TRUVOKE5PREUpIFwKKyAgKENBU0VfTEFCRUxfRVhQUl9DSEVDSyAoTk9ERSktPmJhc2Uuc3RhdGljX2ZsYWcpCisKKy8qIFVzZWQgdG8gbWFyayBhIENBTExfRVhQUiBhcyBub3Qgc3VpdGFibGUgZm9yIGlubGluaW5nLiAgKi8KKyNkZWZpbmUgQ0FMTF9DQU5OT1RfSU5MSU5FX1AoTk9ERSkgKENBTExfRVhQUl9DSEVDSyAoTk9ERSktPmJhc2Uuc3RhdGljX2ZsYWcpCisKKy8qIEluIGFuIGV4cHIgbm9kZSAodXN1YWxseSBhIGNvbnZlcnNpb24pIHRoaXMgbWVhbnMgdGhlIG5vZGUgd2FzIG1hZGUKKyAgIGltcGxpY2l0bHkgYW5kIHNob3VsZCBub3QgbGVhZCB0byBhbnkgc29ydCBvZiB3YXJuaW5nLiAgSW4gYSBkZWNsIG5vZGUsCisgICB3YXJuaW5ncyBjb25jZXJuaW5nIHRoZSBkZWNsIHNob3VsZCBiZSBzdXBwcmVzc2VkLiAgVGhpcyBpcyB1c2VkIGF0CisgICBsZWFzdCBmb3IgdXNlZC1iZWZvcmUtc2V0IHdhcm5pbmdzLCBhbmQgaXQgc2V0IGFmdGVyIG9uZSB3YXJuaW5nIGlzCisgICBlbWl0dGVkLiAgKi8KKyNkZWZpbmUgVFJFRV9OT19XQVJOSU5HKE5PREUpICgoTk9ERSktPmJhc2Uubm93YXJuaW5nX2ZsYWcpCisKKy8qIEluIGFuIElERU5USUZJRVJfTk9ERSwgdGhpcyBtZWFucyB0aGF0IGFzc2VtYmxlX25hbWUgd2FzIGNhbGxlZCB3aXRoCisgICB0aGlzIHN0cmluZyBhcyBhbiBhcmd1bWVudC4gICovCisjZGVmaW5lIFRSRUVfU1lNQk9MX1JFRkVSRU5DRUQoTk9ERSkgXAorICAoSURFTlRJRklFUl9OT0RFX0NIRUNLIChOT0RFKS0+YmFzZS5zdGF0aWNfZmxhZykKKworLyogTm9uemVybyBpbiBhIHBvaW50ZXIgb3IgcmVmZXJlbmNlIHR5cGUgbWVhbnMgdGhlIGRhdGEgcG9pbnRlZCB0bworICAgYnkgdGhpcyB0eXBlIGNhbiBhbGlhcyBhbnl0aGluZy4gICovCisjZGVmaW5lIFRZUEVfUkVGX0NBTl9BTElBU19BTEwoTk9ERSkgXAorICAoUFRSX09SX1JFRl9DSEVDSyAoTk9ERSktPmJhc2Uuc3RhdGljX2ZsYWcpCisKKy8qIEluIGEgTU9ESUZZX0VYUFIsIG1lYW5zIHRoYXQgdGhlIHN0b3JlIGluIHRoZSBleHByZXNzaW9uIGlzIG5vbnRlbXBvcmFsLiAgKi8KKyNkZWZpbmUgTU9WRV9OT05URU1QT1JBTChOT0RFKSBcCisgIChFWFBSX0NIRUNLIChOT0RFKS0+YmFzZS5zdGF0aWNfZmxhZykKKworLyogSW4gYW4gSU5URUdFUl9DU1QsIFJFQUxfQ1NULCBDT01QTEVYX0NTVCwgb3IgVkVDVE9SX0NTVCwgdGhpcyBtZWFucworICAgdGhlcmUgd2FzIGFuIG92ZXJmbG93IGluIGZvbGRpbmcuICAqLworCisjZGVmaW5lIFRSRUVfT1ZFUkZMT1coTk9ERSkgKENTVF9DSEVDSyAoTk9ERSktPmJhc2UucHVibGljX2ZsYWcpCisKKy8qIFRSRUVfT1ZFUkZMT1cgY2FuIG9ubHkgYmUgdHJ1ZSBmb3IgRVhQUiBvZiBDT05TVEFOVF9DTEFTU19QLiAgKi8KKworI2RlZmluZSBUUkVFX09WRVJGTE9XX1AoRVhQUikgXAorIChDT05TVEFOVF9DTEFTU19QIChFWFBSKSAmJiBUUkVFX09WRVJGTE9XIChFWFBSKSkKKworLyogSW4gYSBWQVJfREVDTCwgRlVOQ1RJT05fREVDTCwgTkFNRVNQQUNFX0RFQ0wgb3IgVFlQRV9ERUNMLAorICAgbm9uemVybyBtZWFucyBuYW1lIGlzIHRvIGJlIGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIHRoaXMgdHJhbnNsYXRpb24gdW5pdC4KKyAgIEluIGFuIElERU5USUZJRVJfTk9ERSwgbm9uemVybyBtZWFucyBhbiBleHRlcm5hbCBkZWNsYXJhdGlvbgorICAgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgdGhpcyB0cmFuc2xhdGlvbiB1bml0IHdhcyBwcmV2aW91c2x5IHNlZW4KKyAgIGZvciB0aGlzIG5hbWUgaW4gYW4gaW5uZXIgc2NvcGUuICAqLworI2RlZmluZSBUUkVFX1BVQkxJQyhOT0RFKSAoKE5PREUpLT5iYXNlLnB1YmxpY19mbGFnKQorCisvKiBJbiBhIF9UWVBFLCBpbmRpY2F0ZXMgd2hldGhlciBUWVBFX0NBQ0hFRF9WQUxVRVMgY29udGFpbnMgYSB2ZWN0b3IKKyAgIG9mIGNhY2hlZCB2YWx1ZXMsIG9yIGlzIHNvbWV0aGluZyBlbHNlLiAgKi8KKyNkZWZpbmUgVFlQRV9DQUNIRURfVkFMVUVTX1AoTk9ERSkgKFRZUEVfQ0hFQ0soTk9ERSktPmJhc2UucHVibGljX2ZsYWcpCisKKy8qIEluIGEgU0FWRV9FWFBSLCBpbmRpY2F0ZXMgdGhhdCB0aGUgb3JpZ2luYWwgZXhwcmVzc2lvbiBoYXMgYWxyZWFkeQorICAgYmVlbiBzdWJzdGl0dXRlZCB3aXRoIGEgVkFSX0RFQ0wgdGhhdCBjb250YWlucyB0aGUgdmFsdWUuICAqLworI2RlZmluZSBTQVZFX0VYUFJfUkVTT0xWRURfUChOT0RFKSBcCisgIChTQVZFX0VYUFJfQ0hFQ0sgKE5PREUpLT5iYXNlLnB1YmxpY19mbGFnKQorCisvKiBTZXQgb24gYSBDQUxMX0VYUFIgaWYgdGhpcyBzdGRhcmcgY2FsbCBzaG91bGQgYmUgcGFzc2VkIHRoZSBhcmd1bWVudAorICAgcGFjay4gICovCisjZGVmaW5lIENBTExfRVhQUl9WQV9BUkdfUEFDSyhOT0RFKSBcCisgIChDQUxMX0VYUFJfQ0hFQ0soTk9ERSktPmJhc2UucHVibGljX2ZsYWcpCisKKy8qIEluIGFueSBleHByZXNzaW9uLCBkZWNsLCBvciBjb25zdGFudCwgbm9uemVybyBtZWFucyBpdCBoYXMgc2lkZSBlZmZlY3RzIG9yCisgICByZWV2YWx1YXRpb24gb2YgdGhlIHdob2xlIGV4cHJlc3Npb24gY291bGQgcHJvZHVjZSBhIGRpZmZlcmVudCB2YWx1ZS4KKyAgIFRoaXMgaXMgc2V0IGlmIGFueSBzdWJleHByZXNzaW9uIGlzIGEgZnVuY3Rpb24gY2FsbCwgYSBzaWRlIGVmZmVjdCBvciBhCisgICByZWZlcmVuY2UgdG8gYSB2b2xhdGlsZSB2YXJpYWJsZS4gIEluIGEgLi4uX0RFQ0wsIHRoaXMgaXMgc2V0IG9ubHkgaWYgdGhlCisgICBkZWNsYXJhdGlvbiBzYWlkIGB2b2xhdGlsZScuICBUaGlzIHdpbGwgbmV2ZXIgYmUgc2V0IGZvciBhIGNvbnN0YW50LiAgKi8KKyNkZWZpbmUgVFJFRV9TSURFX0VGRkVDVFMoTk9ERSkgXAorICAoTk9OX1RZUEVfQ0hFQ0sgKE5PREUpLT5iYXNlLnNpZGVfZWZmZWN0c19mbGFnKQorCisvKiBJbiBhIExBQkVMX0RFQ0wsIG5vbnplcm8gbWVhbnMgdGhpcyBsYWJlbCBoYWQgaXRzIGFkZHJlc3MgdGFrZW4KKyAgIGFuZCB0aGVyZWZvcmUgY2FuIG5ldmVyIGJlIGRlbGV0ZWQgYW5kIGlzIGEganVtcCB0YXJnZXQgZm9yCisgICBjb21wdXRlZCBnb3Rvcy4gICovCisjZGVmaW5lIEZPUkNFRF9MQUJFTChOT0RFKSAoTEFCRUxfREVDTF9DSEVDSyAoTk9ERSktPmJhc2Uuc2lkZV9lZmZlY3RzX2ZsYWcpCisKKy8qIE5vbnplcm8gbWVhbnMgdGhpcyBleHByZXNzaW9uIGlzIHZvbGF0aWxlIGluIHRoZSBDIHNlbnNlOgorICAgaXRzIGFkZHJlc3Mgc2hvdWxkIGJlIG9mIHR5cGUgYHZvbGF0aWxlIFdIQVRFVkVSIConLgorICAgSW4gb3RoZXIgd29yZHMsIHRoZSBkZWNsYXJlZCBpdGVtIGlzIHZvbGF0aWxlIHF1YWxpZmllZC4KKyAgIFRoaXMgaXMgdXNlZCBpbiBfREVDTCBub2RlcyBhbmQgX1JFRiBub2Rlcy4KKyAgIE9uIGEgRlVOQ1RJT05fREVDTCBub2RlLCB0aGlzIG1lYW5zIHRoZSBmdW5jdGlvbiBkb2VzIG5vdAorICAgcmV0dXJuIG5vcm1hbGx5LiAgVGhpcyBpcyB0aGUgc2FtZSBlZmZlY3QgYXMgc2V0dGluZworICAgdGhlIGF0dHJpYnV0ZSBub3JldHVybiBvbiB0aGUgZnVuY3Rpb24gaW4gQy4KKworICAgSW4gYSAuLi5fVFlQRSBub2RlLCBtZWFucyB0aGlzIHR5cGUgaXMgdm9sYXRpbGUtcXVhbGlmaWVkLgorICAgQnV0IHVzZSBUWVBFX1ZPTEFUSUxFIGluc3RlYWQgb2YgdGhpcyBtYWNybyB3aGVuIHRoZSBub2RlIGlzIGEgdHlwZSwKKyAgIGJlY2F1c2UgZXZlbnR1YWxseSB3ZSBtYXkgbWFrZSB0aGF0IGEgZGlmZmVyZW50IGJpdC4KKworICAgSWYgdGhpcyBiaXQgaXMgc2V0IGluIGFuIGV4cHJlc3Npb24sIHNvIGlzIFRSRUVfU0lERV9FRkZFQ1RTLiAgKi8KKyNkZWZpbmUgVFJFRV9USElTX1ZPTEFUSUxFKE5PREUpICgoTk9ERSktPmJhc2Uudm9sYXRpbGVfZmxhZykKKworLyogTm9uemVybyBtZWFucyB0aGlzIG5vZGUgd2lsbCBub3QgdHJhcC4gIEluIGFuIElORElSRUNUX1JFRiwgbWVhbnMKKyAgIGFjY2Vzc2luZyB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gd29uJ3QgZ2VuZXJhdGUgYSB0cmFwLiAgSG93ZXZlciwKKyAgIHRoaXMgb25seSBhcHBsaWVzIHRvIGFuIG9iamVjdCB3aGVuIHVzZWQgYXBwcm9wcmlhdGVseTogaXQgZG9lc24ndAorICAgbWVhbiB0aGF0IHdyaXRpbmcgYSBSRUFET05MWSBtZW0gd29uJ3QgdHJhcC4gU2ltaWxhcmx5IGZvcgorICAgQUxJR05fSU5ESVJFQ1RfUkVGIGFuZCBNSVNBTElHTkVEX0lORElSRUNUX1JFRi4KKworICAgSW4gQVJSQVlfUkVGIGFuZCBBUlJBWV9SQU5HRV9SRUYgbWVhbnMgdGhhdCB3ZSBrbm93IHRoYXQgdGhlIGluZGV4CisgICAob3Igc2xpY2Ugb2YgdGhlIGFycmF5KSBhbHdheXMgYmVsb25ncyB0byB0aGUgcmFuZ2Ugb2YgdGhlIGFycmF5LgorICAgSS5lLiB0aGF0IHRoZSBhY2Nlc3Mgd2lsbCBub3QgdHJhcCwgcHJvdmlkZWQgdGhhdCB0aGUgYWNjZXNzIHRvCisgICB0aGUgYmFzZSB0byB0aGUgYXJyYXkgd2lsbCBub3QgdHJhcC4gICovCisjZGVmaW5lIFRSRUVfVEhJU19OT1RSQVAoTk9ERSkgKChOT0RFKS0+YmFzZS5ub3Rocm93X2ZsYWcpCisKKy8qIEluIGEgVkFSX0RFQ0wsIFBBUk1fREVDTCBvciBGSUVMRF9ERUNMLCBvciBhbnkga2luZCBvZiAuLi5fUkVGIG5vZGUsCisgICBub256ZXJvIG1lYW5zIGl0IG1heSBub3QgYmUgdGhlIGxocyBvZiBhbiBhc3NpZ25tZW50LgorICAgTm9uemVybyBpbiBhIEZVTkNUSU9OX0RFQ0wgbWVhbnMgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdHJlYXRlZAorICAgYXMgImNvbnN0IiBmdW5jdGlvbiAoY2FuIG9ubHkgcmVhZCBpdHMgYXJndW1lbnRzKS4gICovCisjZGVmaW5lIFRSRUVfUkVBRE9OTFkoTk9ERSkgKE5PTl9UWVBFX0NIRUNLIChOT0RFKS0+YmFzZS5yZWFkb25seV9mbGFnKQorCisvKiBWYWx1ZSBvZiBleHByZXNzaW9uIGlzIGNvbnN0YW50LiAgQWx3YXlzIG9uIGluIGFsbCAuLi5fQ1NUIG5vZGVzLiAgTWF5CisgICBhbHNvIGFwcGVhciBpbiBhbiBleHByZXNzaW9uIG9yIGRlY2wgd2hlcmUgdGhlIHZhbHVlIGlzIGNvbnN0YW50LiAgKi8KKyNkZWZpbmUgVFJFRV9DT05TVEFOVChOT0RFKSAoTk9OX1RZUEVfQ0hFQ0sgKE5PREUpLT5iYXNlLmNvbnN0YW50X2ZsYWcpCisKKy8qIE5vbnplcm8gaWYgTk9ERSwgYSB0eXBlLCBoYXMgaGFkIGl0cyBzaXplcyBnaW1wbGlmaWVkLiAgKi8KKyNkZWZpbmUgVFlQRV9TSVpFU19HSU1QTElGSUVEKE5PREUpIFwKKyAgKFRZUEVfQ0hFQ0sgKE5PREUpLT5iYXNlLmNvbnN0YW50X2ZsYWcpCisKKy8qIEluIGEgZGVjbCAobW9zdCBzaWduaWZpY2FudGx5IGEgRklFTERfREVDTCksIG1lYW5zIGFuIHVuc2lnbmVkIGZpZWxkLiAgKi8KKyNkZWZpbmUgREVDTF9VTlNJR05FRChOT0RFKSBcCisgIChERUNMX0NPTU1PTl9DSEVDSyAoTk9ERSktPmJhc2UudW5zaWduZWRfZmxhZykKKworLyogSW4gaW50ZWdyYWwgYW5kIHBvaW50ZXIgdHlwZXMsIG1lYW5zIGFuIHVuc2lnbmVkIHR5cGUuICAqLworI2RlZmluZSBUWVBFX1VOU0lHTkVEKE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+YmFzZS51bnNpZ25lZF9mbGFnKQorCisvKiBOb256ZXJvIGluIGEgVkFSX0RFQ0wgb3IgU1RSSU5HX0NTVCBtZWFucyBhc3NlbWJsZXIgY29kZSBoYXMgYmVlbiB3cml0dGVuLgorICAgTm9uemVybyBpbiBhIEZVTkNUSU9OX0RFQ0wgbWVhbnMgdGhhdCB0aGUgZnVuY3Rpb24gaGFzIGJlZW4gY29tcGlsZWQuCisgICBUaGlzIGlzIGludGVyZXN0aW5nIGluIGFuIGlubGluZSBmdW5jdGlvbiwgc2luY2UgaXQgbWlnaHQgbm90IG5lZWQKKyAgIHRvIGJlIGNvbXBpbGVkIHNlcGFyYXRlbHkuCisgICBOb256ZXJvIGluIGEgUkVDT1JEX1RZUEUsIFVOSU9OX1RZUEUsIFFVQUxfVU5JT05fVFlQRSBvciBFTlVNRVJBTF9UWVBFCisgICBpZiB0aGUgZGVidWdnaW5nIGluZm8gZm9yIHRoZSB0eXBlIGhhcyBiZWVuIHdyaXR0ZW4uCisgICBJbiBhIEJMT0NLIG5vZGUsIG5vbnplcm8gaWYgcmVvcmRlcl9ibG9ja3MgaGFzIGFscmVhZHkgc2VlbiB0aGlzIGJsb2NrLgorICAgSW4gYW4gU1NBX05BTUUgbm9kZSwgbm9uemVybyBpZiB0aGUgU1NBX05BTUUgb2NjdXJzIGluIGFuIGFibm9ybWFsCisgICBQSEkgbm9kZS4gICovCisjZGVmaW5lIFRSRUVfQVNNX1dSSVRURU4oTk9ERSkgKChOT0RFKS0+YmFzZS5hc21fd3JpdHRlbl9mbGFnKQorCisvKiBOb256ZXJvIGluIGEgX0RFQ0wgaWYgdGhlIG5hbWUgaXMgdXNlZCBpbiBpdHMgc2NvcGUuCisgICBOb256ZXJvIGluIGFuIGV4cHIgbm9kZSBtZWFucyBpbmhpYml0IHdhcm5pbmcgaWYgdmFsdWUgaXMgdW51c2VkLgorICAgSW4gSURFTlRJRklFUl9OT0RFcywgdGhpcyBtZWFucyB0aGF0IHNvbWUgZXh0ZXJuIGRlY2wgZm9yIHRoaXMgbmFtZQorICAgd2FzIHVzZWQuCisgICBJbiBhIEJMT0NLLCB0aGlzIG1lYW5zIHRoYXQgdGhlIGJsb2NrIGNvbnRhaW5zIHZhcmlhYmxlcyB0aGF0IGFyZSB1c2VkLiAgKi8KKyNkZWZpbmUgVFJFRV9VU0VEKE5PREUpICgoTk9ERSktPmJhc2UudXNlZF9mbGFnKQorCisvKiBJbiBhIEZVTkNUSU9OX0RFQ0wsIG5vbnplcm8gbWVhbnMgYSBjYWxsIHRvIHRoZSBmdW5jdGlvbiBjYW5ub3QgdGhyb3cKKyAgIGFuIGV4Y2VwdGlvbi4gIEluIGEgQ0FMTF9FWFBSLCBub256ZXJvIG1lYW5zIHRoZSBjYWxsIGNhbm5vdCB0aHJvdy4gICovCisjZGVmaW5lIFRSRUVfTk9USFJPVyhOT0RFKSAoKE5PREUpLT5iYXNlLm5vdGhyb3dfZmxhZykKKworLyogSW4gYSBDQUxMX0VYUFIsIG1lYW5zIHRoYXQgaXQncyBzYWZlIHRvIHVzZSB0aGUgdGFyZ2V0IG9mIHRoZSBjYWxsCisgICBleHBhbnNpb24gYXMgdGhlIHJldHVybiBzbG90IGZvciBhIGNhbGwgdGhhdCByZXR1cm5zIGluIG1lbW9yeS4gICovCisjZGVmaW5lIENBTExfRVhQUl9SRVRVUk5fU0xPVF9PUFQoTk9ERSkgXAorICAoQ0FMTF9FWFBSX0NIRUNLIChOT0RFKS0+YmFzZS5wcml2YXRlX2ZsYWcpCisKKy8qIEluIGEgUkVTVUxUX0RFQ0wsIFBBUk1fREVDTCBhbmQgVkFSX0RFQ0wsIG1lYW5zIHRoYXQgaXQgaXMKKyAgIHBhc3NlZCBieSBpbnZpc2libGUgcmVmZXJlbmNlIChhbmQgdGhlIFRSRUVfVFlQRSBpcyBhIHBvaW50ZXIgdG8gdGhlIHRydWUKKyAgIHR5cGUpLiAgKi8KKyNkZWZpbmUgREVDTF9CWV9SRUZFUkVOQ0UoTk9ERSkgXAorICAoVFJFRV9DSEVDSzMgKE5PREUsIFZBUl9ERUNMLCBQQVJNX0RFQ0wsIFwKKwkJUkVTVUxUX0RFQ0wpLT5kZWNsX2NvbW1vbi5kZWNsX2J5X3JlZmVyZW5jZV9mbGFnKQorCisvKiBJbiBhIFJFU1VMVF9ERUNMLCBQQVJNX0RFQ0wgYW5kIFZBUl9ERUNMLCBtZWFucyB0aGF0IHRoaXMgZGVjbAorICAgY2FuIGJlIHVzZWQgYXMgcmVzdHJpY3RlZCB0YWcgdG8gZGlzYW1iaWd1YXRlIGFnYWluc3Qgb3RoZXIgcmVzdHJpY3QKKyAgIHBvaW50ZXJzLiAgVXNlZCBieSBmb3J0cmFuIHRvIGNhcHR1cmUgc29tZXRoaW5nIGxpa2Ugbm9uLWFkZHJlc3NhYmlsaXR5CisgICAod2hpY2ggaXQgaXNuJ3QgcmVhbGx5IGJlY2F1c2UgdGhlIG1pZGRsZS1lbmQgZG9lcyB0YWtlIGFkZHJlc3NlcyBvZgorICAgc3VjaCB2YXJpYWJsZXMpLiAgKi8KKyNkZWZpbmUgREVDTF9SRVNUUklDVEVEX1AoTk9ERSkgXAorICAoVFJFRV9DSEVDSzMgKE5PREUsIFZBUl9ERUNMLCBQQVJNX0RFQ0wsIFwKKwkJUkVTVUxUX0RFQ0wpLT5kZWNsX2NvbW1vbi5kZWNsX3Jlc3RyaWN0ZWRfZmxhZykKKworLyogSW4gYSBDQUxMX0VYUFIsIG1lYW5zIHRoYXQgdGhlIGNhbGwgaXMgdGhlIGp1bXAgZnJvbSBhIHRodW5rIHRvIHRoZQorICAgdGh1bmtlZC10byBmdW5jdGlvbi4gICovCisjZGVmaW5lIENBTExfRlJPTV9USFVOS19QKE5PREUpIChDQUxMX0VYUFJfQ0hFQ0sgKE5PREUpLT5iYXNlLnByb3RlY3RlZF9mbGFnKQorCisvKiBJbiBhIHR5cGUsIG5vbnplcm8gbWVhbnMgdGhhdCBhbGwgb2JqZWN0cyBvZiB0aGUgdHlwZSBhcmUgZ3VhcmFudGVlZCBieSB0aGUKKyAgIGxhbmd1YWdlIG9yIGZyb250LWVuZCB0byBiZSBwcm9wZXJseSBhbGlnbmVkLCBzbyB3ZSBjYW4gaW5kaWNhdGUgdGhhdCBhIE1FTQorICAgb2YgdGhpcyB0eXBlIGlzIGFsaWduZWQgYXQgbGVhc3QgdG8gdGhlIGFsaWdubWVudCBvZiB0aGUgdHlwZSwgZXZlbiBpZiBpdAorICAgZG9lc24ndCBhcHBlYXIgdGhhdCBpdCBpcy4gIFdlIHNlZSB0aGlzLCBmb3IgZXhhbXBsZSwgaW4gb2JqZWN0LW9yaWVudGVkCisgICBsYW5ndWFnZXMgd2hlcmUgYSB0YWcgZmllbGQgbWF5IHNob3cgdGhpcyBpcyBhbiBvYmplY3Qgb2YgYSBtb3JlLWFsaWduZWQKKyAgIHZhcmlhbnQgb2YgdGhlIG1vcmUgZ2VuZXJpYyB0eXBlLgorCisgICBJbiBhbiBTU0FfTkFNRSBub2RlLCBub256ZXJvIGlmIHRoZSBTU0FfTkFNRSBub2RlIGlzIG9uIHRoZSBTU0FfTkFNRQorICAgZnJlZWxpc3QuICAqLworI2RlZmluZSBUWVBFX0FMSUdOX09LKE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+YmFzZS5ub3Rocm93X2ZsYWcpCisKKy8qIFVzZWQgaW4gY2xhc3NlcyBpbiBDKysuICAqLworI2RlZmluZSBUUkVFX1BSSVZBVEUoTk9ERSkgKChOT0RFKS0+YmFzZS5wcml2YXRlX2ZsYWcpCisvKiBVc2VkIGluIGNsYXNzZXMgaW4gQysrLiAqLworI2RlZmluZSBUUkVFX1BST1RFQ1RFRChOT0RFKSAoKE5PREUpLT5iYXNlLnByb3RlY3RlZF9mbGFnKQorCisvKiBOb256ZXJvIGluIGEgX0RFQ0wgaWYgdGhlIHVzZSBvZiB0aGUgbmFtZSBpcyBkZWZpbmVkIGFzIGEKKyAgIGRlcHJlY2F0ZWQgZmVhdHVyZSBieSBfX2F0dHJpYnV0ZV9fKChkZXByZWNhdGVkKSkuICAqLworI2RlZmluZSBUUkVFX0RFUFJFQ0FURUQoTk9ERSkgXAorICAoKE5PREUpLT5iYXNlLmRlcHJlY2F0ZWRfZmxhZykKKworLyogTm9uemVybyBpbiBhbiBJREVOVElGSUVSX05PREUgaWYgdGhlIG5hbWUgaXMgYSBsb2NhbCBhbGlhcywgd2hvc2UKKyAgIHVzZXMgYXJlIHRvIGJlIHN1YnN0aXR1dGVkIGZvciB1c2VzIG9mIHRoZSBUUkVFX0NIQUlOZWQgaWRlbnRpZmllci4gICovCisjZGVmaW5lIElERU5USUZJRVJfVFJBTlNQQVJFTlRfQUxJQVMoTk9ERSkgXAorICAoSURFTlRJRklFUl9OT0RFX0NIRUNLIChOT0RFKS0+YmFzZS5kZXByZWNhdGVkX2ZsYWcpCisKKy8qIEluIGZpeGVkLXBvaW50IHR5cGVzLCBtZWFucyBhIHNhdHVyYXRpbmcgdHlwZS4gICovCisjZGVmaW5lIFRZUEVfU0FUVVJBVElORyhOT0RFKSAoKE5PREUpLT5iYXNlLnNhdHVyYXRpbmdfZmxhZykKKworLyogVGhlc2UgZmxhZ3MgYXJlIGF2YWlsYWJsZSBmb3IgZWFjaCBsYW5ndWFnZSBmcm9udCBlbmQgdG8gdXNlIGludGVybmFsbHkuICAqLworI2RlZmluZSBUUkVFX0xBTkdfRkxBR18wKE5PREUpICgoTk9ERSktPmJhc2UubGFuZ19mbGFnXzApCisjZGVmaW5lIFRSRUVfTEFOR19GTEFHXzEoTk9ERSkgKChOT0RFKS0+YmFzZS5sYW5nX2ZsYWdfMSkKKyNkZWZpbmUgVFJFRV9MQU5HX0ZMQUdfMihOT0RFKSAoKE5PREUpLT5iYXNlLmxhbmdfZmxhZ18yKQorI2RlZmluZSBUUkVFX0xBTkdfRkxBR18zKE5PREUpICgoTk9ERSktPmJhc2UubGFuZ19mbGFnXzMpCisjZGVmaW5lIFRSRUVfTEFOR19GTEFHXzQoTk9ERSkgKChOT0RFKS0+YmFzZS5sYW5nX2ZsYWdfNCkKKyNkZWZpbmUgVFJFRV9MQU5HX0ZMQUdfNShOT0RFKSAoKE5PREUpLT5iYXNlLmxhbmdfZmxhZ181KQorI2RlZmluZSBUUkVFX0xBTkdfRkxBR182KE5PREUpICgoTk9ERSktPmJhc2UubGFuZ19mbGFnXzYpCisMCisvKiBEZWZpbmUgYWRkaXRpb25hbCBmaWVsZHMgYW5kIGFjY2Vzc29ycyBmb3Igbm9kZXMgcmVwcmVzZW50aW5nIGNvbnN0YW50cy4gICovCisKKy8qIEluIGFuIElOVEVHRVJfQ1NUIG5vZGUuICBUaGVzZSB0d28gdG9nZXRoZXIgbWFrZSBhIDItd29yZCBpbnRlZ2VyLgorICAgSWYgdGhlIGRhdGEgdHlwZSBpcyBzaWduZWQsIHRoZSB2YWx1ZSBpcyBzaWduLWV4dGVuZGVkIHRvIDIgd29yZHMKKyAgIGV2ZW4gdGhvdWdoIG5vdCBhbGwgb2YgdGhlbSBtYXkgcmVhbGx5IGJlIGluIHVzZS4KKyAgIEluIGFuIHVuc2lnbmVkIGNvbnN0YW50IHNob3J0ZXIgdGhhbiAyIHdvcmRzLCB0aGUgZXh0cmEgYml0cyBhcmUgMC4gICovCisjZGVmaW5lIFRSRUVfSU5UX0NTVChOT0RFKSAoSU5URUdFUl9DU1RfQ0hFQ0sgKE5PREUpLT5pbnRfY3N0LmludF9jc3QpCisjZGVmaW5lIFRSRUVfSU5UX0NTVF9MT1coTk9ERSkgKFRSRUVfSU5UX0NTVCAoTk9ERSkubG93KQorI2RlZmluZSBUUkVFX0lOVF9DU1RfSElHSChOT0RFKSAoVFJFRV9JTlRfQ1NUIChOT0RFKS5oaWdoKQorCisjZGVmaW5lIElOVF9DU1RfTFQoQSwgQikJCQkJXAorICAoVFJFRV9JTlRfQ1NUX0hJR0ggKEEpIDwgVFJFRV9JTlRfQ1NUX0hJR0ggKEIpCVwKKyAgIHx8IChUUkVFX0lOVF9DU1RfSElHSCAoQSkgPT0gVFJFRV9JTlRfQ1NUX0hJR0ggKEIpCVwKKyAgICAgICAmJiBUUkVFX0lOVF9DU1RfTE9XIChBKSA8IFRSRUVfSU5UX0NTVF9MT1cgKEIpKSkKKworI2RlZmluZSBJTlRfQ1NUX0xUX1VOU0lHTkVEKEEsIEIpCQkJCVwKKyAgKCgodW5zaWduZWQgSE9TVF9XSURFX0lOVCkgVFJFRV9JTlRfQ1NUX0hJR0ggKEEpCQlcCisgICAgPCAodW5zaWduZWQgSE9TVF9XSURFX0lOVCkgVFJFRV9JTlRfQ1NUX0hJR0ggKEIpKQkJXAorICAgfHwgKCgodW5zaWduZWQgSE9TVF9XSURFX0lOVCkgVFJFRV9JTlRfQ1NUX0hJR0ggKEEpCQlcCisJPT0gKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpIFRSRUVfSU5UX0NTVF9ISUdIIChCKSkJXAorICAgICAgICYmIFRSRUVfSU5UX0NTVF9MT1cgKEEpIDwgVFJFRV9JTlRfQ1NUX0xPVyAoQikpKQorCitzdHJ1Y3QgR1RZKCgpKSB0cmVlX2ludF9jc3QgeworICBzdHJ1Y3QgdHJlZV9jb21tb24gY29tbW9uOworICBkb3VibGVfaW50IGludF9jc3Q7Cit9OworCisvKiBJbiBhIFJFQUxfQ1NUIG5vZGUuICBzdHJ1Y3QgcmVhbF92YWx1ZSBpcyBhbiBvcGFxdWUgZW50aXR5LCB3aXRoCisgICBtYW5pcHVsYXRvcnMgZGVmaW5lZCBpbiByZWFsLmguICBXZSBkb24ndCB3YW50IHRyZWUuaCBkZXBlbmRpbmcgb24KKyAgIHJlYWwuaCBhbmQgdHJhbnNpdGl2ZWx5IG9uIHRtLmguICAqLworc3RydWN0IHJlYWxfdmFsdWU7CisKKyNkZWZpbmUgVFJFRV9SRUFMX0NTVF9QVFIoTk9ERSkgKFJFQUxfQ1NUX0NIRUNLIChOT0RFKS0+cmVhbF9jc3QucmVhbF9jc3RfcHRyKQorI2RlZmluZSBUUkVFX1JFQUxfQ1NUKE5PREUpICgqVFJFRV9SRUFMX0NTVF9QVFIgKE5PREUpKQorCitzdHJ1Y3QgR1RZKCgpKSB0cmVlX3JlYWxfY3N0IHsKKyAgc3RydWN0IHRyZWVfY29tbW9uIGNvbW1vbjsKKyAgc3RydWN0IHJlYWxfdmFsdWUgKiByZWFsX2NzdF9wdHI7Cit9OworCisvKiBJbiBhIEZJWEVEX0NTVCBub2RlLiAgKi8KK3N0cnVjdCBmaXhlZF92YWx1ZTsKKworI2RlZmluZSBUUkVFX0ZJWEVEX0NTVF9QVFIoTk9ERSkgKEZJWEVEX0NTVF9DSEVDSyAoTk9ERSktPmZpeGVkX2NzdC5maXhlZF9jc3RfcHRyKQorI2RlZmluZSBUUkVFX0ZJWEVEX0NTVChOT0RFKSAoKlRSRUVfRklYRURfQ1NUX1BUUiAoTk9ERSkpCisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfZml4ZWRfY3N0IHsKKyAgc3RydWN0IHRyZWVfY29tbW9uIGNvbW1vbjsKKyAgc3RydWN0IGZpeGVkX3ZhbHVlICogZml4ZWRfY3N0X3B0cjsKK307CisKKy8qIEluIGEgU1RSSU5HX0NTVCAqLworI2RlZmluZSBUUkVFX1NUUklOR19MRU5HVEgoTk9ERSkgKFNUUklOR19DU1RfQ0hFQ0sgKE5PREUpLT5zdHJpbmcubGVuZ3RoKQorI2RlZmluZSBUUkVFX1NUUklOR19QT0lOVEVSKE5PREUpIFwKKyAgKChjb25zdCBjaGFyICopKFNUUklOR19DU1RfQ0hFQ0sgKE5PREUpLT5zdHJpbmcuc3RyKSkKKworc3RydWN0IEdUWSgoKSkgdHJlZV9zdHJpbmcgeworICBzdHJ1Y3QgdHJlZV9jb21tb24gY29tbW9uOworICBpbnQgbGVuZ3RoOworICBjaGFyIHN0clsxXTsKK307CisKKy8qIEluIGEgQ09NUExFWF9DU1Qgbm9kZS4gICovCisjZGVmaW5lIFRSRUVfUkVBTFBBUlQoTk9ERSkgKENPTVBMRVhfQ1NUX0NIRUNLIChOT0RFKS0+Y29tcGxleC5yZWFsKQorI2RlZmluZSBUUkVFX0lNQUdQQVJUKE5PREUpIChDT01QTEVYX0NTVF9DSEVDSyAoTk9ERSktPmNvbXBsZXguaW1hZykKKworc3RydWN0IEdUWSgoKSkgdHJlZV9jb21wbGV4IHsKKyAgc3RydWN0IHRyZWVfY29tbW9uIGNvbW1vbjsKKyAgdHJlZSByZWFsOworICB0cmVlIGltYWc7Cit9OworCisvKiBJbiBhIFZFQ1RPUl9DU1Qgbm9kZS4gICovCisjZGVmaW5lIFRSRUVfVkVDVE9SX0NTVF9FTFRTKE5PREUpIChWRUNUT1JfQ1NUX0NIRUNLIChOT0RFKS0+dmVjdG9yLmVsZW1lbnRzKQorCitzdHJ1Y3QgR1RZKCgpKSB0cmVlX3ZlY3RvciB7CisgIHN0cnVjdCB0cmVlX2NvbW1vbiBjb21tb247CisgIHRyZWUgZWxlbWVudHM7Cit9OworDAorI2luY2x1ZGUgInN5bXRhYi5oIgorCisvKiBEZWZpbmUgZmllbGRzIGFuZCBhY2Nlc3NvcnMgZm9yIHNvbWUgc3BlY2lhbC1wdXJwb3NlIHRyZWUgbm9kZXMuICAqLworCisjZGVmaW5lIElERU5USUZJRVJfTEVOR1RIKE5PREUpIFwKKyAgKElERU5USUZJRVJfTk9ERV9DSEVDSyAoTk9ERSktPmlkZW50aWZpZXIuaWQubGVuKQorI2RlZmluZSBJREVOVElGSUVSX1BPSU5URVIoTk9ERSkgXAorICAoKGNvbnN0IGNoYXIgKikgSURFTlRJRklFUl9OT0RFX0NIRUNLIChOT0RFKS0+aWRlbnRpZmllci5pZC5zdHIpCisjZGVmaW5lIElERU5USUZJRVJfSEFTSF9WQUxVRShOT0RFKSBcCisgIChJREVOVElGSUVSX05PREVfQ0hFQ0sgKE5PREUpLT5pZGVudGlmaWVyLmlkLmhhc2hfdmFsdWUpCisKKy8qIFRyYW5zbGF0ZSBhIGhhc2ggdGFibGUgaWRlbnRpZmllciBwb2ludGVyIHRvIGEgdHJlZV9pZGVudGlmaWVyCisgICBwb2ludGVyLCBhbmQgdmljZSB2ZXJzYS4gICovCisKKyNkZWZpbmUgSFRfSURFTlRfVE9fR0NDX0lERU5UKE5PREUpIFwKKyAgKCh0cmVlKSAoKGNoYXIgKikgKE5PREUpIC0gc2l6ZW9mIChzdHJ1Y3QgdHJlZV9jb21tb24pKSkKKyNkZWZpbmUgR0NDX0lERU5UX1RPX0hUX0lERU5UKE5PREUpICgmKChzdHJ1Y3QgdHJlZV9pZGVudGlmaWVyICopIChOT0RFKSktPmlkKQorCitzdHJ1Y3QgR1RZKCgpKSB0cmVlX2lkZW50aWZpZXIgeworICBzdHJ1Y3QgdHJlZV9jb21tb24gY29tbW9uOworICBzdHJ1Y3QgaHRfaWRlbnRpZmllciBpZDsKK307CisKKy8qIEluIGEgVFJFRV9MSVNUIG5vZGUuICAqLworI2RlZmluZSBUUkVFX1BVUlBPU0UoTk9ERSkgKFRSRUVfTElTVF9DSEVDSyAoTk9ERSktPmxpc3QucHVycG9zZSkKKyNkZWZpbmUgVFJFRV9WQUxVRShOT0RFKSAoVFJFRV9MSVNUX0NIRUNLIChOT0RFKS0+bGlzdC52YWx1ZSkKKworc3RydWN0IEdUWSgoKSkgdHJlZV9saXN0IHsKKyAgc3RydWN0IHRyZWVfY29tbW9uIGNvbW1vbjsKKyAgdHJlZSBwdXJwb3NlOworICB0cmVlIHZhbHVlOworfTsKKworLyogSW4gYSBUUkVFX1ZFQyBub2RlLiAgKi8KKyNkZWZpbmUgVFJFRV9WRUNfTEVOR1RIKE5PREUpIChUUkVFX1ZFQ19DSEVDSyAoTk9ERSktPnZlYy5sZW5ndGgpCisjZGVmaW5lIFRSRUVfVkVDX0VORChOT0RFKSBcCisgICgodm9pZCkgVFJFRV9WRUNfQ0hFQ0sgKE5PREUpLCAmKChOT0RFKS0+dmVjLmFbKE5PREUpLT52ZWMubGVuZ3RoXSkpCisKKyNkZWZpbmUgVFJFRV9WRUNfRUxUKE5PREUsSSkgVFJFRV9WRUNfRUxUX0NIRUNLIChOT0RFLCBJKQorCitzdHJ1Y3QgR1RZKCgpKSB0cmVlX3ZlYyB7CisgIHN0cnVjdCB0cmVlX2NvbW1vbiBjb21tb247CisgIGludCBsZW5ndGg7CisgIHRyZWUgR1RZICgobGVuZ3RoICgiVFJFRV9WRUNfTEVOR1RIICgodHJlZSkmJWgpIikpKSBhWzFdOworfTsKKworLyogSW4gYSBDT05TVFJVQ1RPUiBub2RlLiAgKi8KKyNkZWZpbmUgQ09OU1RSVUNUT1JfRUxUUyhOT0RFKSAoQ09OU1RSVUNUT1JfQ0hFQ0sgKE5PREUpLT5jb25zdHJ1Y3Rvci5lbHRzKQorI2RlZmluZSBDT05TVFJVQ1RPUl9FTFQoTk9ERSxJRFgpIFwKKyAgKFZFQ19pbmRleCAoY29uc3RydWN0b3JfZWx0LCBDT05TVFJVQ1RPUl9FTFRTIChOT0RFKSwgSURYKSkKKyNkZWZpbmUgQ09OU1RSVUNUT1JfTkVMVFMoTk9ERSkgKFZFQ19sZW5ndGggKGNvbnN0cnVjdG9yX2VsdCwgQ09OU1RSVUNUT1JfRUxUUyAoTk9ERSkpKQorCisvKiBJdGVyYXRlIHRocm91Z2ggdGhlIHZlY3RvciBWIG9mIENPTlNUUlVDVE9SX0VMVCBlbGVtZW50cywgeWllbGRpbmcgdGhlCisgICB2YWx1ZSBvZiBlYWNoIGVsZW1lbnQgKHN0b3JlZCB3aXRoaW4gVkFMKS4gSVggbXVzdCBiZSBhIHNjcmF0Y2ggdmFyaWFibGUKKyAgIG9mIHVuc2lnbmVkIGludGVnZXIgdHlwZS4gICovCisjZGVmaW5lIEZPUl9FQUNIX0NPTlNUUlVDVE9SX1ZBTFVFKFYsIElYLCBWQUwpIFwKKyAgZm9yIChJWCA9IDA7IChJWCA+PSBWRUNfbGVuZ3RoIChjb25zdHJ1Y3Rvcl9lbHQsIFYpKSBcCisJICAgICAgID8gZmFsc2UgXAorCSAgICAgICA6ICgoVkFMID0gVkVDX2luZGV4IChjb25zdHJ1Y3Rvcl9lbHQsIFYsIElYKS0+dmFsdWUpLCBcCisJICAgICAgIHRydWUpOyBcCisgICAgICAgKElYKSsrKQorCisvKiBJdGVyYXRlIHRocm91Z2ggdGhlIHZlY3RvciBWIG9mIENPTlNUUlVDVE9SX0VMVCBlbGVtZW50cywgeWllbGRpbmcgYm90aAorICAgdGhlIHZhbHVlIG9mIGVhY2ggZWxlbWVudCAoc3RvcmVkIHdpdGhpbiBWQUwpIGFuZCBpdHMgaW5kZXggKHN0b3JlZAorICAgd2l0aGluIElOREVYKS4gSVggbXVzdCBiZSBhIHNjcmF0Y2ggdmFyaWFibGUgb2YgdW5zaWduZWQgaW50ZWdlciB0eXBlLiAgKi8KKyNkZWZpbmUgRk9SX0VBQ0hfQ09OU1RSVUNUT1JfRUxUKFYsIElYLCBJTkRFWCwgVkFMKSBcCisgIGZvciAoSVggPSAwOyAoSVggPj0gVkVDX2xlbmd0aCAoY29uc3RydWN0b3JfZWx0LCBWKSkgXAorCSAgICAgICA/IGZhbHNlIFwKKwkgICAgICAgOiAoKFZBTCA9IFZFQ19pbmRleCAoY29uc3RydWN0b3JfZWx0LCBWLCBJWCktPnZhbHVlKSwgXAorCQkgIChJTkRFWCA9IFZFQ19pbmRleCAoY29uc3RydWN0b3JfZWx0LCBWLCBJWCktPmluZGV4KSwgXAorCSAgICAgICB0cnVlKTsgXAorICAgICAgIChJWCkrKykKKworLyogQXBwZW5kIGEgbmV3IGNvbnN0cnVjdG9yIGVsZW1lbnQgdG8gViwgd2l0aCB0aGUgc3BlY2lmaWVkIElOREVYIGFuZCBWQUwuICAqLworI2RlZmluZSBDT05TVFJVQ1RPUl9BUFBFTkRfRUxUKFYsIElOREVYLCBWQUxVRSkgXAorICBkbyB7IFwKKyAgICBjb25zdHJ1Y3Rvcl9lbHQgKl9jZV9fXyA9IFZFQ19zYWZlX3B1c2ggKGNvbnN0cnVjdG9yX2VsdCwgZ2MsIFYsIE5VTEwpOyBcCisgICAgX2NlX19fLT5pbmRleCA9IElOREVYOyBcCisgICAgX2NlX19fLT52YWx1ZSA9IFZBTFVFOyBcCisgIH0gd2hpbGUgKDApCisKKy8qIFRydWUgaWYgTk9ERSwgYSBGSUVMRF9ERUNMLCBpcyB0byBiZSBwcm9jZXNzZWQgYXMgYSBiaXRmaWVsZCBmb3IKKyAgIGNvbnN0cnVjdG9yIG91dHB1dCBwdXJwb3Nlcy4gICovCisjZGVmaW5lIENPTlNUUlVDVE9SX0JJVEZJRUxEX1AoTk9ERSkgXAorICAoREVDTF9CSVRfRklFTEQgKEZJRUxEX0RFQ0xfQ0hFQ0sgKE5PREUpKSAmJiBERUNMX01PREUgKE5PREUpICE9IEJMS21vZGUpCisKKy8qIEEgc2luZ2xlIGVsZW1lbnQgb2YgYSBDT05TVFJVQ1RPUi4gVkFMVUUgaG9sZHMgdGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUKKyAgIGVsZW1lbnQuIElOREVYIGNhbiBvcHRpb25hbGx5IGRlc2lnbiB0aGUgcG9zaXRpb24gb2YgVkFMVUU6IGluIGFycmF5cywKKyAgIGl0IGlzIHRoZSBpbmRleCB3aGVyZSBWQUxVRSBoYXMgdG8gYmUgcGxhY2VkOyBpbiBzdHJ1Y3R1cmVzLCBpdCBpcyB0aGUKKyAgIEZJRUxEX0RFQ0wgb2YgdGhlIG1lbWJlci4gICovCit0eXBlZGVmIHN0cnVjdCBHVFkoKCkpIGNvbnN0cnVjdG9yX2VsdF9kIHsKKyAgdHJlZSBpbmRleDsKKyAgdHJlZSB2YWx1ZTsKK30gY29uc3RydWN0b3JfZWx0OworCitERUZfVkVDX08oY29uc3RydWN0b3JfZWx0KTsKK0RFRl9WRUNfQUxMT0NfTyhjb25zdHJ1Y3Rvcl9lbHQsZ2MpOworCitzdHJ1Y3QgR1RZKCgpKSB0cmVlX2NvbnN0cnVjdG9yIHsKKyAgc3RydWN0IHRyZWVfY29tbW9uIGNvbW1vbjsKKyAgVkVDKGNvbnN0cnVjdG9yX2VsdCxnYykgKmVsdHM7Cit9OworCisvKiBEZWZpbmUgZmllbGRzIGFuZCBhY2Nlc3NvcnMgZm9yIHNvbWUgbm9kZXMgdGhhdCByZXByZXNlbnQgZXhwcmVzc2lvbnMuICAqLworCisvKiBOb256ZXJvIGlmIE5PREUgaXMgYW4gZW1wdHkgc3RhdGVtZW50IChOT1BfRVhQUiA8MD4pLiAgKi8KKyNkZWZpbmUgSVNfRU1QVFlfU1RNVChOT0RFKQkoVFJFRV9DT0RFIChOT0RFKSA9PSBOT1BfRVhQUiBcCisJCQkJICYmIFZPSURfVFlQRV9QIChUUkVFX1RZUEUgKE5PREUpKSBcCisJCQkJICYmIGludGVnZXJfemVyb3AgKFRSRUVfT1BFUkFORCAoTk9ERSwgMCkpKQorCisvKiBJbiBvcmRpbmFyeSBleHByZXNzaW9uIG5vZGVzLiAgKi8KKyNkZWZpbmUgVFJFRV9PUEVSQU5EX0xFTkdUSChOT0RFKSB0cmVlX29wZXJhbmRfbGVuZ3RoIChOT0RFKQorI2RlZmluZSBUUkVFX09QRVJBTkQoTk9ERSwgSSkgVFJFRV9PUEVSQU5EX0NIRUNLIChOT0RFLCBJKQorCisvKiBJbiBhIHRjY192bF9leHAgbm9kZSwgb3BlcmFuZCAwIGlzIGFuIElOVF9DU1Qgbm9kZSBob2xkaW5nIHRoZSBvcGVyYW5kCisgICBsZW5ndGguICBJdHMgdmFsdWUgaW5jbHVkZXMgdGhlIGxlbmd0aCBvcGVyYW5kIGl0c2VsZjsgdGhhdCBpcywKKyAgIHRoZSBtaW5pbXVtIHZhbGlkIGxlbmd0aCBpcyAxLgorICAgTm90ZSB0aGF0IHdlIGhhdmUgdG8gYnlwYXNzIHRoZSB1c2Ugb2YgVFJFRV9PUEVSQU5EIHRvIGFjY2VzcworICAgdGhhdCBmaWVsZCB0byBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24gaW4gZXhwYW5kaW5nIHRoZSBtYWNyb3MuICAqLworI2RlZmluZSBWTF9FWFBfT1BFUkFORF9MRU5HVEgoTk9ERSkgXAorICAoKGludClUUkVFX0lOVF9DU1RfTE9XIChWTF9FWFBfQ0hFQ0sgKE5PREUpLT5leHAub3BlcmFuZHNbMF0pKQorCisvKiBOb256ZXJvIGlmIGlzX2dpbXBsZV9kZWJ1ZygpIG1heSBwb3NzaWJseSBob2xkLiAgKi8KKyNkZWZpbmUgTUFZX0hBVkVfREVCVUdfU1RNVFMgICAgKGZsYWdfdmFyX3RyYWNraW5nX2Fzc2lnbm1lbnRzKQorCisvKiBJbiBhIExPT1BfRVhQUiBub2RlLiAgKi8KKyNkZWZpbmUgTE9PUF9FWFBSX0JPRFkoTk9ERSkgVFJFRV9PUEVSQU5EX0NIRUNLX0NPREUgKE5PREUsIExPT1BfRVhQUiwgMCkKKworLyogVGhlIHNvdXJjZSBsb2NhdGlvbiBvZiB0aGlzIGV4cHJlc3Npb24uICBOb24tdHJlZV9leHAgbm9kZXMgc3VjaCBhcworICAgZGVjbHMgYW5kIGNvbnN0YW50cyBjYW4gYmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGxvY2F0aW9ucywgc28KKyAgIHJldHVybiBub3RoaW5nLiAgKi8KKyNkZWZpbmUgRVhQUl9MT0NBVElPTihOT0RFKSAoRVhQUl9QICgoTk9ERSkpID8gKE5PREUpLT5leHAubG9jdXMgOiBVTktOT1dOX0xPQ0FUSU9OKQorI2RlZmluZSBTRVRfRVhQUl9MT0NBVElPTihOT0RFLCBMT0NVUykgRVhQUl9DSEVDSyAoKE5PREUpKS0+ZXhwLmxvY3VzID0gKExPQ1VTKQorI2RlZmluZSBFWFBSX0hBU19MT0NBVElPTihOT0RFKSAoRVhQUl9MT0NBVElPTiAoTk9ERSkgIT0gVU5LTk9XTl9MT0NBVElPTikKKyNkZWZpbmUgRVhQUl9GSUxFTkFNRShOT0RFKSBMT0NBVElPTl9GSUxFIChFWFBSX0NIRUNLICgoTk9ERSkpLT5leHAubG9jdXMpCisjZGVmaW5lIEVYUFJfTElORU5PKE5PREUpIExPQ0FUSU9OX0xJTkUgKEVYUFJfQ0hFQ0sgKE5PREUpLT5leHAubG9jdXMpCisKKy8qIFRydWUgaWYgYSB0cmVlIGlzIGFuIGV4cHJlc3Npb24gb3Igc3RhdGVtZW50IHRoYXQgY2FuIGhhdmUgYQorICAgbG9jYXRpb24uICAqLworI2RlZmluZSBDQU5fSEFWRV9MT0NBVElPTl9QKE5PREUpICgoTk9ERSkgJiYgRVhQUl9QIChOT0RFKSkKKworZXh0ZXJuIHZvaWQgcHJvdGVjdGVkX3NldF9leHByX2xvY2F0aW9uICh0cmVlLCBsb2NhdGlvbl90KTsKKworLyogSW4gYSBUQVJHRVRfRVhQUiBub2RlLiAgKi8KKyNkZWZpbmUgVEFSR0VUX0VYUFJfU0xPVChOT0RFKSBUUkVFX09QRVJBTkRfQ0hFQ0tfQ09ERSAoTk9ERSwgVEFSR0VUX0VYUFIsIDApCisjZGVmaW5lIFRBUkdFVF9FWFBSX0lOSVRJQUwoTk9ERSkgVFJFRV9PUEVSQU5EX0NIRUNLX0NPREUgKE5PREUsIFRBUkdFVF9FWFBSLCAxKQorI2RlZmluZSBUQVJHRVRfRVhQUl9DTEVBTlVQKE5PREUpIFRSRUVfT1BFUkFORF9DSEVDS19DT0RFIChOT0RFLCBUQVJHRVRfRVhQUiwgMikKKworLyogREVDTF9FWFBSIGFjY2Vzc29yLiBUaGlzIGdpdmVzIGFjY2VzcyB0byB0aGUgREVDTCBhc3NvY2lhdGVkIHdpdGgKKyAgIHRoZSBnaXZlbiBkZWNsYXJhdGlvbiBzdGF0ZW1lbnQuICAqLworI2RlZmluZSBERUNMX0VYUFJfREVDTChOT0RFKSAgICBUUkVFX09QRVJBTkQgKERFQ0xfRVhQUl9DSEVDSyAoTk9ERSksIDApCisKKyNkZWZpbmUgRVhJVF9FWFBSX0NPTkQoTk9ERSkJICAgICBUUkVFX09QRVJBTkQgKEVYSVRfRVhQUl9DSEVDSyAoTk9ERSksIDApCisKKy8qIENPTVBPVU5EX0xJVEVSQUxfRVhQUiBhY2Nlc3NvcnMuICAqLworI2RlZmluZSBDT01QT1VORF9MSVRFUkFMX0VYUFJfREVDTF9FWFBSKE5PREUpCQlcCisgIFRSRUVfT1BFUkFORCAoQ09NUE9VTkRfTElURVJBTF9FWFBSX0NIRUNLIChOT0RFKSwgMCkKKyNkZWZpbmUgQ09NUE9VTkRfTElURVJBTF9FWFBSX0RFQ0woTk9ERSkJCQlcCisgIERFQ0xfRVhQUl9ERUNMIChDT01QT1VORF9MSVRFUkFMX0VYUFJfREVDTF9FWFBSIChOT0RFKSkKKworLyogU1dJVENIX0VYUFIgYWNjZXNzb3JzLiBUaGVzZSBnaXZlIGFjY2VzcyB0byB0aGUgY29uZGl0aW9uLCBib2R5IGFuZAorICAgb3JpZ2luYWwgY29uZGl0aW9uIHR5cGUgKGJlZm9yZSBhbnkgY29tcGlsZXIgY29udmVyc2lvbnMpCisgICBvZiB0aGUgc3dpdGNoIHN0YXRlbWVudCwgcmVzcGVjdGl2ZWx5LiAgKi8KKyNkZWZpbmUgU1dJVENIX0NPTkQoTk9ERSkgICAgICAgVFJFRV9PUEVSQU5EIChTV0lUQ0hfRVhQUl9DSEVDSyAoTk9ERSksIDApCisjZGVmaW5lIFNXSVRDSF9CT0RZKE5PREUpICAgICAgIFRSRUVfT1BFUkFORCAoU1dJVENIX0VYUFJfQ0hFQ0sgKE5PREUpLCAxKQorI2RlZmluZSBTV0lUQ0hfTEFCRUxTKE5PREUpICAgICBUUkVFX09QRVJBTkQgKFNXSVRDSF9FWFBSX0NIRUNLIChOT0RFKSwgMikKKworLyogQ0FTRV9MQUJFTF9FWFBSIGFjY2Vzc29ycy4gVGhlc2UgZ2l2ZSBhY2Nlc3MgdG8gdGhlIGhpZ2ggYW5kIGxvdyB2YWx1ZXMKKyAgIG9mIGEgY2FzZSBsYWJlbCwgcmVzcGVjdGl2ZWx5LiAgKi8KKyNkZWZpbmUgQ0FTRV9MT1coTk9ERSkgICAgICAgICAgCVRSRUVfT1BFUkFORCAoQ0FTRV9MQUJFTF9FWFBSX0NIRUNLIChOT0RFKSwgMCkKKyNkZWZpbmUgQ0FTRV9ISUdIKE5PREUpICAgICAgICAgCVRSRUVfT1BFUkFORCAoQ0FTRV9MQUJFTF9FWFBSX0NIRUNLIChOT0RFKSwgMSkKKyNkZWZpbmUgQ0FTRV9MQUJFTChOT0RFKQkJVFJFRV9PUEVSQU5EIChDQVNFX0xBQkVMX0VYUFJfQ0hFQ0sgKE5PREUpLCAyKQorCisvKiBUaGUgb3BlcmFuZHMgb2YgYSBUQVJHRVRfTUVNX1JFRi4gICovCisjZGVmaW5lIFRNUl9TWU1CT0woTk9ERSkgKFRSRUVfT1BFUkFORCAoVEFSR0VUX01FTV9SRUZfQ0hFQ0sgKE5PREUpLCAwKSkKKyNkZWZpbmUgVE1SX0JBU0UoTk9ERSkgKFRSRUVfT1BFUkFORCAoVEFSR0VUX01FTV9SRUZfQ0hFQ0sgKE5PREUpLCAxKSkKKyNkZWZpbmUgVE1SX0lOREVYKE5PREUpIChUUkVFX09QRVJBTkQgKFRBUkdFVF9NRU1fUkVGX0NIRUNLIChOT0RFKSwgMikpCisjZGVmaW5lIFRNUl9TVEVQKE5PREUpIChUUkVFX09QRVJBTkQgKFRBUkdFVF9NRU1fUkVGX0NIRUNLIChOT0RFKSwgMykpCisjZGVmaW5lIFRNUl9PRkZTRVQoTk9ERSkgKFRSRUVfT1BFUkFORCAoVEFSR0VUX01FTV9SRUZfQ0hFQ0sgKE5PREUpLCA0KSkKKyNkZWZpbmUgVE1SX09SSUdJTkFMKE5PREUpIChUUkVFX09QRVJBTkQgKFRBUkdFVF9NRU1fUkVGX0NIRUNLIChOT0RFKSwgNSkpCisKKy8qIFRoZSBvcGVyYW5kcyBvZiBhIEJJTkRfRVhQUi4gICovCisjZGVmaW5lIEJJTkRfRVhQUl9WQVJTKE5PREUpIChUUkVFX09QRVJBTkQgKEJJTkRfRVhQUl9DSEVDSyAoTk9ERSksIDApKQorI2RlZmluZSBCSU5EX0VYUFJfQk9EWShOT0RFKSAoVFJFRV9PUEVSQU5EIChCSU5EX0VYUFJfQ0hFQ0sgKE5PREUpLCAxKSkKKyNkZWZpbmUgQklORF9FWFBSX0JMT0NLKE5PREUpIChUUkVFX09QRVJBTkQgKEJJTkRfRVhQUl9DSEVDSyAoTk9ERSksIDIpKQorCisvKiBHT1RPX0VYUFIgYWNjZXNzb3IuIFRoaXMgZ2l2ZXMgYWNjZXNzIHRvIHRoZSBsYWJlbCBhc3NvY2lhdGVkIHdpdGgKKyAgIGEgZ290byBzdGF0ZW1lbnQuICAqLworI2RlZmluZSBHT1RPX0RFU1RJTkFUSU9OKE5PREUpICBUUkVFX09QRVJBTkQgKChOT0RFKSwgMCkKKworLyogQVNNX0VYUFIgYWNjZXNzb3JzLiBBU01fU1RSSU5HIHJldHVybnMgYSBTVFJJTkdfQ1NUIGZvciB0aGUKKyAgIGluc3RydWN0aW9uIChlLmcuLCAibW92IHgsIHkiKS4gQVNNX09VVFBVVFMsIEFTTV9JTlBVVFMsIGFuZAorICAgQVNNX0NMT0JCRVJTIHJlcHJlc2VudCB0aGUgb3V0cHV0cywgaW5wdXRzLCBhbmQgY2xvYmJlcnMgZm9yIHRoZQorICAgc3RhdGVtZW50LiAgKi8KKyNkZWZpbmUgQVNNX1NUUklORyhOT0RFKSAgICAgICAgVFJFRV9PUEVSQU5EIChBU01fRVhQUl9DSEVDSyAoTk9ERSksIDApCisjZGVmaW5lIEFTTV9PVVRQVVRTKE5PREUpICAgICAgIFRSRUVfT1BFUkFORCAoQVNNX0VYUFJfQ0hFQ0sgKE5PREUpLCAxKQorI2RlZmluZSBBU01fSU5QVVRTKE5PREUpICAgICAgICBUUkVFX09QRVJBTkQgKEFTTV9FWFBSX0NIRUNLIChOT0RFKSwgMikKKyNkZWZpbmUgQVNNX0NMT0JCRVJTKE5PREUpICAgICAgVFJFRV9PUEVSQU5EIChBU01fRVhQUl9DSEVDSyAoTk9ERSksIDMpCisjZGVmaW5lIEFTTV9MQUJFTFMoTk9ERSkJVFJFRV9PUEVSQU5EIChBU01fRVhQUl9DSEVDSyAoTk9ERSksIDQpCisvKiBOb256ZXJvIGlmIHdlIHdhbnQgdG8gY3JlYXRlIGFuIEFTTV9JTlBVVCBpbnN0ZWFkIG9mIGFuCisgICBBU01fT1BFUkFORCB3aXRoIG5vIG9wZXJhbmRzLiAgKi8KKyNkZWZpbmUgQVNNX0lOUFVUX1AoTk9ERSkgKEFTTV9FWFBSX0NIRUNLIChOT0RFKS0+YmFzZS5zdGF0aWNfZmxhZykKKyNkZWZpbmUgQVNNX1ZPTEFUSUxFX1AoTk9ERSkgKEFTTV9FWFBSX0NIRUNLIChOT0RFKS0+YmFzZS5wdWJsaWNfZmxhZykKKworLyogQ09ORF9FWFBSIGFjY2Vzc29ycy4gICovCisjZGVmaW5lIENPTkRfRVhQUl9DT05EKE5PREUpCShUUkVFX09QRVJBTkQgKENPTkRfRVhQUl9DSEVDSyAoTk9ERSksIDApKQorI2RlZmluZSBDT05EX0VYUFJfVEhFTihOT0RFKQkoVFJFRV9PUEVSQU5EIChDT05EX0VYUFJfQ0hFQ0sgKE5PREUpLCAxKSkKKyNkZWZpbmUgQ09ORF9FWFBSX0VMU0UoTk9ERSkJKFRSRUVfT1BFUkFORCAoQ09ORF9FWFBSX0NIRUNLIChOT0RFKSwgMikpCisKKy8qIEFjY2Vzc29ycyBmb3IgdGhlIGNoYWlucyBvZiByZWN1cnJlbmNlcy4gICovCisjZGVmaW5lIENIUkVDX1ZBUihOT0RFKSAgICAgICAgICAgVFJFRV9PUEVSQU5EIChQT0xZTk9NSUFMX0NIUkVDX0NIRUNLIChOT0RFKSwgMCkKKyNkZWZpbmUgQ0hSRUNfTEVGVChOT0RFKSAgICAgICAgICBUUkVFX09QRVJBTkQgKFBPTFlOT01JQUxfQ0hSRUNfQ0hFQ0sgKE5PREUpLCAxKQorI2RlZmluZSBDSFJFQ19SSUdIVChOT0RFKSAgICAgICAgIFRSRUVfT1BFUkFORCAoUE9MWU5PTUlBTF9DSFJFQ19DSEVDSyAoTk9ERSksIDIpCisjZGVmaW5lIENIUkVDX1ZBUklBQkxFKE5PREUpICAgICAgVFJFRV9JTlRfQ1NUX0xPVyAoQ0hSRUNfVkFSIChOT0RFKSkKKworLyogTEFCRUxfRVhQUiBhY2Nlc3Nvci4gVGhpcyBnaXZlcyBhY2Nlc3MgdG8gdGhlIGxhYmVsIGFzc29jaWF0ZWQgd2l0aAorICAgdGhlIGdpdmVuIGxhYmVsIGV4cHJlc3Npb24uICAqLworI2RlZmluZSBMQUJFTF9FWFBSX0xBQkVMKE5PREUpICBUUkVFX09QRVJBTkQgKExBQkVMX0VYUFJfQ0hFQ0sgKE5PREUpLCAwKQorCisvKiBWREVGX0VYUFIgYWNjZXNzb3JzIGFyZSBzcGVjaWZpZWQgaW4gdHJlZS1mbG93LmgsIGFsb25nIHdpdGggdGhlIG90aGVyCisgICBhY2Nlc3NvcnMgZm9yIFNTQSBvcGVyYW5kcy4gICovCisKKy8qIENBVENIX0VYUFIgYWNjZXNzb3JzLiAgKi8KKyNkZWZpbmUgQ0FUQ0hfVFlQRVMoTk9ERSkJVFJFRV9PUEVSQU5EIChDQVRDSF9FWFBSX0NIRUNLIChOT0RFKSwgMCkKKyNkZWZpbmUgQ0FUQ0hfQk9EWShOT0RFKQlUUkVFX09QRVJBTkQgKENBVENIX0VYUFJfQ0hFQ0sgKE5PREUpLCAxKQorCisvKiBFSF9GSUxURVJfRVhQUiBhY2Nlc3NvcnMuICAqLworI2RlZmluZSBFSF9GSUxURVJfVFlQRVMoTk9ERSkJVFJFRV9PUEVSQU5EIChFSF9GSUxURVJfRVhQUl9DSEVDSyAoTk9ERSksIDApCisjZGVmaW5lIEVIX0ZJTFRFUl9GQUlMVVJFKE5PREUpCVRSRUVfT1BFUkFORCAoRUhfRklMVEVSX0VYUFJfQ0hFQ0sgKE5PREUpLCAxKQorCisvKiBPQkpfVFlQRV9SRUYgYWNjZXNzb3JzLiAgKi8KKyNkZWZpbmUgT0JKX1RZUEVfUkVGX0VYUFIoTk9ERSkJICBUUkVFX09QRVJBTkQgKE9CSl9UWVBFX1JFRl9DSEVDSyAoTk9ERSksIDApCisjZGVmaW5lIE9CSl9UWVBFX1JFRl9PQkpFQ1QoTk9ERSkgVFJFRV9PUEVSQU5EIChPQkpfVFlQRV9SRUZfQ0hFQ0sgKE5PREUpLCAxKQorI2RlZmluZSBPQkpfVFlQRV9SRUZfVE9LRU4oTk9ERSkgIFRSRUVfT1BFUkFORCAoT0JKX1RZUEVfUkVGX0NIRUNLIChOT0RFKSwgMikKKworLyogQVNTRVJUX0VYUFIgYWNjZXNzb3JzLiAgKi8KKyNkZWZpbmUgQVNTRVJUX0VYUFJfVkFSKE5PREUpCVRSRUVfT1BFUkFORCAoQVNTRVJUX0VYUFJfQ0hFQ0sgKE5PREUpLCAwKQorI2RlZmluZSBBU1NFUlRfRVhQUl9DT05EKE5PREUpCVRSRUVfT1BFUkFORCAoQVNTRVJUX0VYUFJfQ0hFQ0sgKE5PREUpLCAxKQorCisvKiBDQUxMX0VYUFIgYWNjZXNzb3JzLgorICovCisjZGVmaW5lIENBTExfRVhQUl9GTihOT0RFKSBUUkVFX09QRVJBTkQgKENBTExfRVhQUl9DSEVDSyAoTk9ERSksIDEpCisjZGVmaW5lIENBTExfRVhQUl9TVEFUSUNfQ0hBSU4oTk9ERSkgVFJFRV9PUEVSQU5EIChDQUxMX0VYUFJfQ0hFQ0sgKE5PREUpLCAyKQorI2RlZmluZSBDQUxMX0VYUFJfQVJHUyhOT0RFKSBjYWxsX2V4cHJfYXJnbGlzdCAoTk9ERSkKKyNkZWZpbmUgQ0FMTF9FWFBSX0FSRyhOT0RFLCBJKSBUUkVFX09QRVJBTkQgKENBTExfRVhQUl9DSEVDSyAoTk9ERSksIChJKSArIDMpCisjZGVmaW5lIGNhbGxfZXhwcl9uYXJncyhOT0RFKSAoVkxfRVhQX09QRVJBTkRfTEVOR1RIKE5PREUpIC0gMykKKworLyogQ0FMTF9FWFBSX0FSR1AgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGFyZ3VtZW50IHZlY3RvciBmb3IgTk9ERS4KKyAgIFdlIGNhbid0IHVzZSAmQ0FMTF9FWFBSX0FSRyAoTk9ERSwgMCkgYmVjYXVzZSB0aGF0IHdpbGwgY29tcGxhaW4gaWYKKyAgIHRoZSBhcmd1bWVudCBjb3VudCBpcyB6ZXJvIHdoZW4gY2hlY2tpbmcgaXMgZW5hYmxlZC4gIEluc3RlYWQsIGRvCisgICB0aGUgcG9pbnRlciBhcml0aG1ldGljIHRvIGFkdmFuY2UgcGFzdCB0aGUgMyBmaXhlZCBvcGVyYW5kcyBpbiBhCisgICBDQUxMX0VYUFIuICBUaGF0IHByb2R1Y2VzIGEgdmFsaWQgcG9pbnRlciB0byBqdXN0IHBhc3QgdGhlIGVuZCBvZiB0aGUKKyAgIG9wZXJhbmQgYXJyYXksIGV2ZW4gaWYgaXQncyBub3QgdmFsaWQgdG8gZGVyZWZlcmVuY2UgaXQuICAqLworI2RlZmluZSBDQUxMX0VYUFJfQVJHUChOT0RFKSBcCisgICgmKFRSRUVfT1BFUkFORCAoQ0FMTF9FWFBSX0NIRUNLIChOT0RFKSwgMCkpICsgMykKKworLyogT3Blbk1QIGRpcmVjdGl2ZSBhbmQgY2xhdXNlIGFjY2Vzc29ycy4gICovCisKKyNkZWZpbmUgT01QX0JPRFkoTk9ERSkgXAorICBUUkVFX09QRVJBTkQgKFRSRUVfUkFOR0VfQ0hFQ0sgKE5PREUsIE9NUF9QQVJBTExFTCwgT01QX0NSSVRJQ0FMKSwgMCkKKyNkZWZpbmUgT01QX0NMQVVTRVMoTk9ERSkgXAorICBUUkVFX09QRVJBTkQgKFRSRUVfUkFOR0VfQ0hFQ0sgKE5PREUsIE9NUF9QQVJBTExFTCwgT01QX1NJTkdMRSksIDEpCisKKyNkZWZpbmUgT01QX1BBUkFMTEVMX0JPRFkoTk9ERSkgICAgVFJFRV9PUEVSQU5EIChPTVBfUEFSQUxMRUxfQ0hFQ0sgKE5PREUpLCAwKQorI2RlZmluZSBPTVBfUEFSQUxMRUxfQ0xBVVNFUyhOT0RFKSBUUkVFX09QRVJBTkQgKE9NUF9QQVJBTExFTF9DSEVDSyAoTk9ERSksIDEpCisKKyNkZWZpbmUgT01QX1RBU0tfQk9EWShOT0RFKQkgICBUUkVFX09QRVJBTkQgKE9NUF9UQVNLX0NIRUNLIChOT0RFKSwgMCkKKyNkZWZpbmUgT01QX1RBU0tfQ0xBVVNFUyhOT0RFKQkgICBUUkVFX09QRVJBTkQgKE9NUF9UQVNLX0NIRUNLIChOT0RFKSwgMSkKKworI2RlZmluZSBPTVBfVEFTS1JFR19DSEVDSyhOT0RFKQkgIFRSRUVfUkFOR0VfQ0hFQ0sgKE5PREUsIE9NUF9QQVJBTExFTCwgT01QX1RBU0spCisjZGVmaW5lIE9NUF9UQVNLUkVHX0JPRFkoTk9ERSkgICAgVFJFRV9PUEVSQU5EIChPTVBfVEFTS1JFR19DSEVDSyAoTk9ERSksIDApCisjZGVmaW5lIE9NUF9UQVNLUkVHX0NMQVVTRVMoTk9ERSkgVFJFRV9PUEVSQU5EIChPTVBfVEFTS1JFR19DSEVDSyAoTk9ERSksIDEpCisKKyNkZWZpbmUgT01QX0ZPUl9CT0RZKE5PREUpCSAgIFRSRUVfT1BFUkFORCAoT01QX0ZPUl9DSEVDSyAoTk9ERSksIDApCisjZGVmaW5lIE9NUF9GT1JfQ0xBVVNFUyhOT0RFKQkgICBUUkVFX09QRVJBTkQgKE9NUF9GT1JfQ0hFQ0sgKE5PREUpLCAxKQorI2RlZmluZSBPTVBfRk9SX0lOSVQoTk9ERSkJICAgVFJFRV9PUEVSQU5EIChPTVBfRk9SX0NIRUNLIChOT0RFKSwgMikKKyNkZWZpbmUgT01QX0ZPUl9DT05EKE5PREUpCSAgIFRSRUVfT1BFUkFORCAoT01QX0ZPUl9DSEVDSyAoTk9ERSksIDMpCisjZGVmaW5lIE9NUF9GT1JfSU5DUihOT0RFKQkgICBUUkVFX09QRVJBTkQgKE9NUF9GT1JfQ0hFQ0sgKE5PREUpLCA0KQorI2RlZmluZSBPTVBfRk9SX1BSRV9CT0RZKE5PREUpCSAgIFRSRUVfT1BFUkFORCAoT01QX0ZPUl9DSEVDSyAoTk9ERSksIDUpCisKKyNkZWZpbmUgT01QX1NFQ1RJT05TX0JPRFkoTk9ERSkgICAgVFJFRV9PUEVSQU5EIChPTVBfU0VDVElPTlNfQ0hFQ0sgKE5PREUpLCAwKQorI2RlZmluZSBPTVBfU0VDVElPTlNfQ0xBVVNFUyhOT0RFKSBUUkVFX09QRVJBTkQgKE9NUF9TRUNUSU9OU19DSEVDSyAoTk9ERSksIDEpCisKKyNkZWZpbmUgT01QX1NFQ1RJT05fQk9EWShOT0RFKQkgICBUUkVFX09QRVJBTkQgKE9NUF9TRUNUSU9OX0NIRUNLIChOT0RFKSwgMCkKKworI2RlZmluZSBPTVBfU0lOR0xFX0JPRFkoTk9ERSkJICAgVFJFRV9PUEVSQU5EIChPTVBfU0lOR0xFX0NIRUNLIChOT0RFKSwgMCkKKyNkZWZpbmUgT01QX1NJTkdMRV9DTEFVU0VTKE5PREUpICAgVFJFRV9PUEVSQU5EIChPTVBfU0lOR0xFX0NIRUNLIChOT0RFKSwgMSkKKworI2RlZmluZSBPTVBfTUFTVEVSX0JPRFkoTk9ERSkJICAgVFJFRV9PUEVSQU5EIChPTVBfTUFTVEVSX0NIRUNLIChOT0RFKSwgMCkKKworI2RlZmluZSBPTVBfT1JERVJFRF9CT0RZKE5PREUpCSAgIFRSRUVfT1BFUkFORCAoT01QX09SREVSRURfQ0hFQ0sgKE5PREUpLCAwKQorCisjZGVmaW5lIE9NUF9DUklUSUNBTF9CT0RZKE5PREUpICAgIFRSRUVfT1BFUkFORCAoT01QX0NSSVRJQ0FMX0NIRUNLIChOT0RFKSwgMCkKKyNkZWZpbmUgT01QX0NSSVRJQ0FMX05BTUUoTk9ERSkgICAgVFJFRV9PUEVSQU5EIChPTVBfQ1JJVElDQUxfQ0hFQ0sgKE5PREUpLCAxKQorCisjZGVmaW5lIE9NUF9DTEFVU0VfQ0hBSU4oTk9ERSkgICAgIFRSRUVfQ0hBSU4gKE9NUF9DTEFVU0VfQ0hFQ0sgKE5PREUpKQorI2RlZmluZSBPTVBfQ0xBVVNFX0RFQ0woTk9ERSkgICAgICAJCQkJCVwKKyAgT01QX0NMQVVTRV9PUEVSQU5EIChPTVBfQ0xBVVNFX1JBTkdFX0NIRUNLIChPTVBfQ0xBVVNFX0NIRUNLIChOT0RFKSwJXAorCQkJCQkgICAgICBPTVBfQ0xBVVNFX1BSSVZBVEUsCVwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9NUF9DTEFVU0VfQ09QWVBSSVZBVEUpLCAwKQorI2RlZmluZSBPTVBfQ0xBVVNFX0hBU19MT0NBVElPTihOT0RFKSBcCisgICgoT01QX0NMQVVTRV9DSEVDSyAoTk9ERSkpLT5vbXBfY2xhdXNlLmxvY3VzICE9IFVOS05PV05fTE9DQVRJT04pCisjZGVmaW5lIE9NUF9DTEFVU0VfTE9DQVRJT04oTk9ERSkgIChPTVBfQ0xBVVNFX0NIRUNLIChOT0RFKSktPm9tcF9jbGF1c2UubG9jdXMKKworLyogVHJ1ZSBvbiBhbiBPTVBfU0VDVElPTiBzdGF0ZW1lbnQgdGhhdCB3YXMgdGhlIGxhc3QgbGV4aWNhbCBtZW1iZXIuCisgICBUaGlzIHN0YXR1cyBpcyBtZWFuaW5nZnVsIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBsYXN0cHJpdmF0ZS4gICovCisjZGVmaW5lIE9NUF9TRUNUSU9OX0xBU1QoTk9ERSkgXAorICAoT01QX1NFQ1RJT05fQ0hFQ0sgKE5PREUpLT5iYXNlLnByaXZhdGVfZmxhZykKKworLyogVHJ1ZSBvbiBhbiBPTVBfUEFSQUxMRUwgc3RhdGVtZW50IGlmIGl0IHJlcHJlc2VudHMgYW4gZXhwbGljaXQKKyAgIGNvbWJpbmVkIHBhcmFsbGVsIHdvcmstc2hhcmluZyBjb25zdHJ1Y3RzLiAgKi8KKyNkZWZpbmUgT01QX1BBUkFMTEVMX0NPTUJJTkVEKE5PREUpIFwKKyAgKE9NUF9QQVJBTExFTF9DSEVDSyAoTk9ERSktPmJhc2UucHJpdmF0ZV9mbGFnKQorCisvKiBUcnVlIG9uIGEgUFJJVkFURSBjbGF1c2UgaWYgaXRzIGRlY2wgaXMga2VwdCBhcm91bmQgZm9yIGRlYnVnZ2luZworICAgaW5mb3JtYXRpb24gb25seSBhbmQgaXRzIERFQ0xfVkFMVUVfRVhQUiBpcyBzdXBwb3NlZCB0byBwb2ludAorICAgdG8gd2hhdCBpdCBoYXMgYmVlbiByZW1hcHBlZCB0by4gICovCisjZGVmaW5lIE9NUF9DTEFVU0VfUFJJVkFURV9ERUJVRyhOT0RFKSBcCisgIChPTVBfQ0xBVVNFX1NVQkNPREVfQ0hFQ0sgKE5PREUsIE9NUF9DTEFVU0VfUFJJVkFURSktPmJhc2UucHVibGljX2ZsYWcpCisKKy8qIFRydWUgb24gYSBQUklWQVRFIGNsYXVzZSBpZiBjdG9yIG5lZWRzIGFjY2VzcyB0byBvdXRlciByZWdpb24ncworICAgdmFyaWFibGUuICAqLworI2RlZmluZSBPTVBfQ0xBVVNFX1BSSVZBVEVfT1VURVJfUkVGKE5PREUpIFwKKyAgVFJFRV9QUklWQVRFIChPTVBfQ0xBVVNFX1NVQkNPREVfQ0hFQ0sgKE5PREUsIE9NUF9DTEFVU0VfUFJJVkFURSkpCisKKy8qIFRydWUgb24gYSBMQVNUUFJJVkFURSBjbGF1c2UgaWYgYSBGSVJTVFBSSVZBVEUgY2xhdXNlIGZvciB0aGUgc2FtZQorICAgZGVjbCBpcyBwcmVzZW50IGluIHRoZSBjaGFpbi4gICovCisjZGVmaW5lIE9NUF9DTEFVU0VfTEFTVFBSSVZBVEVfRklSU1RQUklWQVRFKE5PREUpIFwKKyAgKE9NUF9DTEFVU0VfU1VCQ09ERV9DSEVDSyAoTk9ERSwgT01QX0NMQVVTRV9MQVNUUFJJVkFURSktPmJhc2UucHVibGljX2ZsYWcpCisjZGVmaW5lIE9NUF9DTEFVU0VfTEFTVFBSSVZBVEVfU1RNVChOT0RFKSBcCisgIE9NUF9DTEFVU0VfT1BFUkFORCAoT01QX0NMQVVTRV9TVUJDT0RFX0NIRUNLIChOT0RFLAkJCVwKKwkJCQkJCU9NUF9DTEFVU0VfTEFTVFBSSVZBVEUpLFwKKwkJICAgICAgMSkKKyNkZWZpbmUgT01QX0NMQVVTRV9MQVNUUFJJVkFURV9HSU1QTEVfU0VRKE5PREUpIFwKKyAgKE9NUF9DTEFVU0VfQ0hFQ0sgKE5PREUpKS0+b21wX2NsYXVzZS5naW1wbGVfcmVkdWN0aW9uX2luaXQKKworI2RlZmluZSBPTVBfQ0xBVVNFX0lGX0VYUFIoTk9ERSkgXAorICBPTVBfQ0xBVVNFX09QRVJBTkQgKE9NUF9DTEFVU0VfU1VCQ09ERV9DSEVDSyAoTk9ERSwgT01QX0NMQVVTRV9JRiksIDApCisjZGVmaW5lIE9NUF9DTEFVU0VfTlVNX1RIUkVBRFNfRVhQUihOT0RFKSBcCisgIE9NUF9DTEFVU0VfT1BFUkFORCAoT01QX0NMQVVTRV9TVUJDT0RFX0NIRUNLIChOT0RFLCBPTVBfQ0xBVVNFX05VTV9USFJFQURTKSwwKQorI2RlZmluZSBPTVBfQ0xBVVNFX1NDSEVEVUxFX0NIVU5LX0VYUFIoTk9ERSkgXAorICBPTVBfQ0xBVVNFX09QRVJBTkQgKE9NUF9DTEFVU0VfU1VCQ09ERV9DSEVDSyAoTk9ERSwgT01QX0NMQVVTRV9TQ0hFRFVMRSksIDApCisKKyNkZWZpbmUgT01QX0NMQVVTRV9DT0xMQVBTRV9FWFBSKE5PREUpIFwKKyAgT01QX0NMQVVTRV9PUEVSQU5EIChPTVBfQ0xBVVNFX1NVQkNPREVfQ0hFQ0sgKE5PREUsIE9NUF9DTEFVU0VfQ09MTEFQU0UpLCAwKQorI2RlZmluZSBPTVBfQ0xBVVNFX0NPTExBUFNFX0lURVJWQVIoTk9ERSkgXAorICBPTVBfQ0xBVVNFX09QRVJBTkQgKE9NUF9DTEFVU0VfU1VCQ09ERV9DSEVDSyAoTk9ERSwgT01QX0NMQVVTRV9DT0xMQVBTRSksIDEpCisjZGVmaW5lIE9NUF9DTEFVU0VfQ09MTEFQU0VfQ09VTlQoTk9ERSkgXAorICBPTVBfQ0xBVVNFX09QRVJBTkQgKE9NUF9DTEFVU0VfU1VCQ09ERV9DSEVDSyAoTk9ERSwgT01QX0NMQVVTRV9DT0xMQVBTRSksIDIpCisKKyNkZWZpbmUgT01QX0NMQVVTRV9SRURVQ1RJT05fQ09ERShOT0RFKQlcCisgIChPTVBfQ0xBVVNFX1NVQkNPREVfQ0hFQ0sgKE5PREUsIE9NUF9DTEFVU0VfUkVEVUNUSU9OKS0+b21wX2NsYXVzZS5zdWJjb2RlLnJlZHVjdGlvbl9jb2RlKQorI2RlZmluZSBPTVBfQ0xBVVNFX1JFRFVDVElPTl9JTklUKE5PREUpIFwKKyAgT01QX0NMQVVTRV9PUEVSQU5EIChPTVBfQ0xBVVNFX1NVQkNPREVfQ0hFQ0sgKE5PREUsIE9NUF9DTEFVU0VfUkVEVUNUSU9OKSwgMSkKKyNkZWZpbmUgT01QX0NMQVVTRV9SRURVQ1RJT05fTUVSR0UoTk9ERSkgXAorICBPTVBfQ0xBVVNFX09QRVJBTkQgKE9NUF9DTEFVU0VfU1VCQ09ERV9DSEVDSyAoTk9ERSwgT01QX0NMQVVTRV9SRURVQ1RJT04pLCAyKQorI2RlZmluZSBPTVBfQ0xBVVNFX1JFRFVDVElPTl9HSU1QTEVfSU5JVChOT0RFKSBcCisgIChPTVBfQ0xBVVNFX0NIRUNLIChOT0RFKSktPm9tcF9jbGF1c2UuZ2ltcGxlX3JlZHVjdGlvbl9pbml0CisjZGVmaW5lIE9NUF9DTEFVU0VfUkVEVUNUSU9OX0dJTVBMRV9NRVJHRShOT0RFKSBcCisgIChPTVBfQ0xBVVNFX0NIRUNLIChOT0RFKSktPm9tcF9jbGF1c2UuZ2ltcGxlX3JlZHVjdGlvbl9tZXJnZQorI2RlZmluZSBPTVBfQ0xBVVNFX1JFRFVDVElPTl9QTEFDRUhPTERFUihOT0RFKSBcCisgIE9NUF9DTEFVU0VfT1BFUkFORCAoT01QX0NMQVVTRV9TVUJDT0RFX0NIRUNLIChOT0RFLCBPTVBfQ0xBVVNFX1JFRFVDVElPTiksIDMpCisKK2VudW0gb21wX2NsYXVzZV9zY2hlZHVsZV9raW5kCit7CisgIE9NUF9DTEFVU0VfU0NIRURVTEVfU1RBVElDLAorICBPTVBfQ0xBVVNFX1NDSEVEVUxFX0RZTkFNSUMsCisgIE9NUF9DTEFVU0VfU0NIRURVTEVfR1VJREVELAorICBPTVBfQ0xBVVNFX1NDSEVEVUxFX0FVVE8sCisgIE9NUF9DTEFVU0VfU0NIRURVTEVfUlVOVElNRQorfTsKKworI2RlZmluZSBPTVBfQ0xBVVNFX1NDSEVEVUxFX0tJTkQoTk9ERSkgXAorICAoT01QX0NMQVVTRV9TVUJDT0RFX0NIRUNLIChOT0RFLCBPTVBfQ0xBVVNFX1NDSEVEVUxFKS0+b21wX2NsYXVzZS5zdWJjb2RlLnNjaGVkdWxlX2tpbmQpCisKK2VudW0gb21wX2NsYXVzZV9kZWZhdWx0X2tpbmQKK3sKKyAgT01QX0NMQVVTRV9ERUZBVUxUX1VOU1BFQ0lGSUVELAorICBPTVBfQ0xBVVNFX0RFRkFVTFRfU0hBUkVELAorICBPTVBfQ0xBVVNFX0RFRkFVTFRfTk9ORSwKKyAgT01QX0NMQVVTRV9ERUZBVUxUX1BSSVZBVEUsCisgIE9NUF9DTEFVU0VfREVGQVVMVF9GSVJTVFBSSVZBVEUKK307CisKKyNkZWZpbmUgT01QX0NMQVVTRV9ERUZBVUxUX0tJTkQoTk9ERSkgXAorICAoT01QX0NMQVVTRV9TVUJDT0RFX0NIRUNLIChOT0RFLCBPTVBfQ0xBVVNFX0RFRkFVTFQpLT5vbXBfY2xhdXNlLnN1YmNvZGUuZGVmYXVsdF9raW5kKQorCitzdHJ1Y3QgR1RZKCgpKSB0cmVlX2V4cCB7CisgIHN0cnVjdCB0cmVlX2NvbW1vbiBjb21tb247CisgIGxvY2F0aW9uX3QgbG9jdXM7CisgIHRyZWUgYmxvY2s7CisgIHRyZWUgR1RZICgoc3BlY2lhbCAoInRyZWVfZXhwIiksCisJICAgICBkZXNjICgiVFJFRV9DT0RFICgodHJlZSkgJiUwKSIpKSkKKyAgICBvcGVyYW5kc1sxXTsKK307CisMCisvKiBTU0FfTkFNRSBhY2Nlc3NvcnMuICAqLworCisvKiBSZXR1cm5zIHRoZSB2YXJpYWJsZSBiZWluZyByZWZlcmVuY2VkLiAgT25jZSByZWxlYXNlZCwgdGhpcyBpcyB0aGUKKyAgIG9ubHkgZmllbGQgdGhhdCBjYW4gYmUgcmVsaWVkIHVwb24uICAqLworI2RlZmluZSBTU0FfTkFNRV9WQVIoTk9ERSkJU1NBX05BTUVfQ0hFQ0sgKE5PREUpLT5zc2FfbmFtZS52YXIKKworLyogUmV0dXJucyB0aGUgc3RhdGVtZW50IHdoaWNoIGRlZmluZXMgdGhpcyBTU0EgbmFtZS4gICovCisjZGVmaW5lIFNTQV9OQU1FX0RFRl9TVE1UKE5PREUpCVNTQV9OQU1FX0NIRUNLIChOT0RFKS0+c3NhX25hbWUuZGVmX3N0bXQKKworLyogUmV0dXJucyB0aGUgU1NBIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgU1NBIG5hbWUuICBOb3RlIHRoYXQgaW4KKyAgIHRyZWUgU1NBLCB2ZXJzaW9uIG51bWJlcnMgYXJlIG5vdCBwZXIgdmFyaWFibGUgYW5kIG1heSBiZSByZWN5Y2xlZC4gICovCisjZGVmaW5lIFNTQV9OQU1FX1ZFUlNJT04oTk9ERSkJU1NBX05BTUVfQ0hFQ0sgKE5PREUpLT5zc2FfbmFtZS52ZXJzaW9uCisKKy8qIE5vbnplcm8gaWYgdGhpcyBTU0EgbmFtZSBvY2N1cnMgaW4gYW4gYWJub3JtYWwgUEhJLiAgU1NBX05BTUVTIGFyZQorICAgbmV2ZXIgb3V0cHV0LCBzbyB3ZSBjYW4gc2FmZWx5IHVzZSB0aGUgQVNNX1dSSVRURU5fRkxBRyBmb3IgdGhpcworICAgc3RhdHVzIGJpdC4gICovCisjZGVmaW5lIFNTQV9OQU1FX09DQ1VSU19JTl9BQk5PUk1BTF9QSEkoTk9ERSkgXAorICAgIFNTQV9OQU1FX0NIRUNLIChOT0RFKS0+YmFzZS5hc21fd3JpdHRlbl9mbGFnCisKKy8qIE5vbnplcm8gaWYgdGhpcyBTU0FfTkFNRSBleHByZXNzaW9uIGlzIGN1cnJlbnRseSBvbiB0aGUgZnJlZSBsaXN0IG9mCisgICBTU0FfTkFNRVMuICBVc2luZyBOT1RIUk9XX0ZMQUcgc2VlbXMgcmVhc29uYWJseSBzYWZlIHNpbmNlIHRocm93aW5nCisgICBoYXMgbm8gbWVhbmluZyBmb3IgYW4gU1NBX05BTUUuICAqLworI2RlZmluZSBTU0FfTkFNRV9JTl9GUkVFX0xJU1QoTk9ERSkgXAorICAgIFNTQV9OQU1FX0NIRUNLIChOT0RFKS0+YmFzZS5ub3Rocm93X2ZsYWcKKworLyogTm9uemVybyBpZiB0aGlzIFNTQV9OQU1FIGlzIHRoZSBkZWZhdWx0IGRlZmluaXRpb24gZm9yIHRoZQorICAgdW5kZXJseWluZyBzeW1ib2wuICBBIGRlZmF1bHQgU1NBIG5hbWUgaXMgY3JlYXRlZCBmb3Igc3ltYm9sIFMgaWYKKyAgIHRoZSB2ZXJ5IGZpcnN0IHJlZmVyZW5jZSB0byBTIGluIHRoZSBmdW5jdGlvbiBpcyBhIHJlYWQgb3BlcmF0aW9uLgorICAgRGVmYXVsdCBkZWZpbml0aW9ucyBhcmUgYWx3YXlzIGNyZWF0ZWQgYnkgYW4gZW1wdHkgc3RhdGVtZW50IGFuZAorICAgYmVsb25nIHRvIG5vIGJhc2ljIGJsb2NrLiAgKi8KKyNkZWZpbmUgU1NBX05BTUVfSVNfREVGQVVMVF9ERUYoTk9ERSkJXAorICAgIFNTQV9OQU1FX0NIRUNLIChOT0RFKS0+YmFzZS5kZWZhdWx0X2RlZl9mbGFnCisKKy8qIEF0dHJpYnV0ZXMgZm9yIFNTQV9OQU1FcyBmb3IgcG9pbnRlci10eXBlIHZhcmlhYmxlcy4gICovCisjZGVmaW5lIFNTQV9OQU1FX1BUUl9JTkZPKE4pIFwKKyAgICBTU0FfTkFNRV9DSEVDSyAoTiktPnNzYV9uYW1lLnB0cl9pbmZvCisKKyNpZm5kZWYgX1RSRUVfRkxPV19ICitzdHJ1Y3QgcHRyX2luZm9fZGVmOworI2VuZGlmCisKKworCisvKiBJbW1lZGlhdGUgdXNlIGxpbmtpbmcgc3RydWN0dXJlLiAgVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBmb3IgbWFpbnRhaW5pbmcKKyAgIGEgZG91Ymx5IGxpbmtlZCBsaXN0IG9mIHVzZXMgb2YgYW4gU1NBX05BTUUuICAqLwordHlwZWRlZiBzdHJ1Y3QgR1RZKCgpKSBzc2FfdXNlX29wZXJhbmRfZCB7CisgIHN0cnVjdCBzc2FfdXNlX29wZXJhbmRfZCogR1RZKChza2lwKCIiKSkpIHByZXY7CisgIHN0cnVjdCBzc2FfdXNlX29wZXJhbmRfZCogR1RZKChza2lwKCIiKSkpIG5leHQ7CisgIC8qIEltbWVkaWF0ZSB1c2VzIGZvciBhIGdpdmVuIFNTQSBuYW1lIGFyZSBtYWludGFpbmVkIGFzIGEgY3ljbGljCisgICAgIGxpc3QuICBUbyByZWNvZ25pemUgdGhlIHJvb3Qgb2YgdGhpcyBsaXN0LCB0aGUgbG9jYXRpb24gZmllbGQKKyAgICAgbmVlZHMgdG8gcG9pbnQgdG8gdGhlIG9yaWdpbmFsIFNTQSBuYW1lLiAgU2luY2Ugc3RhdGVtZW50cyBhbmQKKyAgICAgU1NBIG5hbWVzIGFyZSBvZiBkaWZmZXJlbnQgZGF0YSB0eXBlcywgd2UgbmVlZCB0aGlzIHVuaW9uLiAgU2VlCisgICAgIHRoZSBleHBsYW5hdGlvbiBpbiBzdHJ1Y3QgaW1tZWRpYXRlX3VzZV9pdGVyYXRvcl9kLiAgKi8KKyAgdW5pb24geyBnaW1wbGUgc3RtdDsgdHJlZSBzc2FfbmFtZTsgfSBHVFkoKHNraXAoIiIpKSkgbG9jOworICB0cmVlICpHVFkoKHNraXAoIiIpKSkgdXNlOworfSBzc2FfdXNlX29wZXJhbmRfdDsKKworLyogUmV0dXJuIHRoZSBpbW1lZGlhdGVfdXNlIGluZm9ybWF0aW9uIGZvciBhbiBTU0FfTkFNRS4gKi8KKyNkZWZpbmUgU1NBX05BTUVfSU1NX1VTRV9OT0RFKE5PREUpIFNTQV9OQU1FX0NIRUNLIChOT0RFKS0+c3NhX25hbWUuaW1tX3VzZXMKKworc3RydWN0IEdUWSgoKSkgdHJlZV9zc2FfbmFtZSB7CisgIHN0cnVjdCB0cmVlX2NvbW1vbiBjb21tb247CisKKyAgLyogX0RFQ0wgd3JhcHBlZCBieSB0aGlzIFNTQSBuYW1lLiAgKi8KKyAgdHJlZSB2YXI7CisKKyAgLyogU3RhdGVtZW50IHRoYXQgZGVmaW5lcyB0aGlzIFNTQSBuYW1lLiAgKi8KKyAgZ2ltcGxlIGRlZl9zdG10OworCisgIC8qIFNTQSB2ZXJzaW9uIG51bWJlci4gICovCisgIHVuc2lnbmVkIGludCB2ZXJzaW9uOworCisgIC8qIFBvaW50ZXIgYXR0cmlidXRlcyB1c2VkIGZvciBhbGlhcyBhbmFseXNpcy4gICovCisgIHN0cnVjdCBwdHJfaW5mb19kZWYgKnB0cl9pbmZvOworCisgIC8qIEltbWVkaWF0ZSB1c2VzIGxpc3QgZm9yIHRoaXMgU1NBX05BTUUuICAqLworICBzdHJ1Y3Qgc3NhX3VzZV9vcGVyYW5kX2QgaW1tX3VzZXM7Cit9OworDAorc3RydWN0IEdUWSgoKSkgcGhpX2FyZ19kIHsKKyAgLyogaW1tX3VzZSBNVVNUIGJlIHRoZSBmaXJzdCBlbGVtZW50IGluIHN0cnVjdCBiZWNhdXNlIHdlIGRvIHNvbWUKKyAgICAgcG9pbnRlciBhcml0aG1ldGljIHdpdGggaXQuICBTZWUgcGhpX2FyZ19pbmRleF9mcm9tX3VzZS4gICovCisgIHN0cnVjdCBzc2FfdXNlX29wZXJhbmRfZCBpbW1fdXNlOworICB0cmVlIGRlZjsKKyAgbG9jYXRpb25fdCBsb2N1czsKK307CisKKwwKKyNkZWZpbmUgT01QX0NMQVVTRV9DT0RFKE5PREUpCQkJCQlcCisJKE9NUF9DTEFVU0VfQ0hFQ0sgKE5PREUpKS0+b21wX2NsYXVzZS5jb2RlCisKKyNkZWZpbmUgT01QX0NMQVVTRV9TRVRfQ09ERShOT0RFLCBDT0RFKQkJCQlcCisJKChPTVBfQ0xBVVNFX0NIRUNLIChOT0RFKSktPm9tcF9jbGF1c2UuY29kZSA9IChDT0RFKSkKKworI2RlZmluZSBPTVBfQ0xBVVNFX0NPREUoTk9ERSkJCQkJCVwKKwkoT01QX0NMQVVTRV9DSEVDSyAoTk9ERSkpLT5vbXBfY2xhdXNlLmNvZGUKKworI2RlZmluZSBPTVBfQ0xBVVNFX09QRVJBTkQoTk9ERSwgSSkJCQkJXAorCU9NUF9DTEFVU0VfRUxUX0NIRUNLIChOT0RFLCBJKQorCitzdHJ1Y3QgR1RZKCgpKSB0cmVlX29tcF9jbGF1c2UgeworICBzdHJ1Y3QgdHJlZV9jb21tb24gY29tbW9uOworICBsb2NhdGlvbl90IGxvY3VzOworICBlbnVtIG9tcF9jbGF1c2VfY29kZSBjb2RlOworICB1bmlvbiBvbXBfY2xhdXNlX3N1YmNvZGUgeworICAgIGVudW0gb21wX2NsYXVzZV9kZWZhdWx0X2tpbmQgIGRlZmF1bHRfa2luZDsKKyAgICBlbnVtIG9tcF9jbGF1c2Vfc2NoZWR1bGVfa2luZCBzY2hlZHVsZV9raW5kOworICAgIGVudW0gdHJlZV9jb2RlICAgICAgICAgICAgICAgIHJlZHVjdGlvbl9jb2RlOworICB9IEdUWSAoKHNraXApKSBzdWJjb2RlOworCisgIC8qIFRoZSBnaW1wbGlmaWNhdGlvbiBvZiBPTVBfQ0xBVVNFX1JFRFVDVElPTl97SU5JVCxNRVJHRX0gZm9yIG9tcC1sb3cncworICAgICB1c2FnZS4gICovCisgIGdpbXBsZV9zZXEgZ2ltcGxlX3JlZHVjdGlvbl9pbml0OworICBnaW1wbGVfc2VxIGdpbXBsZV9yZWR1Y3Rpb25fbWVyZ2U7CisKKyAgdHJlZSBHVFkgKChsZW5ndGggKCJvbXBfY2xhdXNlX251bV9vcHNbT01QX0NMQVVTRV9DT0RFICgodHJlZSkmJWgpXSIpKSkgb3BzWzFdOworfTsKKwwKKworc3RydWN0IHZhcnJheV9oZWFkX3RhZzsKKworLyogSW4gYSBCTE9DSyBub2RlLiAgKi8KKyNkZWZpbmUgQkxPQ0tfVkFSUyhOT0RFKSAoQkxPQ0tfQ0hFQ0sgKE5PREUpLT5ibG9jay52YXJzKQorI2RlZmluZSBCTE9DS19OT05MT0NBTElaRURfVkFSUyhOT0RFKSAoQkxPQ0tfQ0hFQ0sgKE5PREUpLT5ibG9jay5ub25sb2NhbGl6ZWRfdmFycykKKyNkZWZpbmUgQkxPQ0tfTlVNX05PTkxPQ0FMSVpFRF9WQVJTKE5PREUpIFZFQ19sZW5ndGggKHRyZWUsIEJMT0NLX05PTkxPQ0FMSVpFRF9WQVJTIChOT0RFKSkKKyNkZWZpbmUgQkxPQ0tfTk9OTE9DQUxJWkVEX1ZBUihOT0RFLE4pIFZFQ19pbmRleCAodHJlZSwgQkxPQ0tfTk9OTE9DQUxJWkVEX1ZBUlMgKE5PREUpLCBOKQorI2RlZmluZSBCTE9DS19TVUJCTE9DS1MoTk9ERSkgKEJMT0NLX0NIRUNLIChOT0RFKS0+YmxvY2suc3ViYmxvY2tzKQorI2RlZmluZSBCTE9DS19TVVBFUkNPTlRFWFQoTk9ERSkgKEJMT0NLX0NIRUNLIChOT0RFKS0+YmxvY2suc3VwZXJjb250ZXh0KQorLyogTm90ZTogd2hlbiBjaGFuZ2luZyB0aGlzLCBtYWtlIHN1cmUgdG8gZmluZCB0aGUgcGxhY2VzCisgICB0aGF0IHVzZSBjaGFpbm9uIG9yIG5yZXZlcnNlLiAgKi8KKyNkZWZpbmUgQkxPQ0tfQ0hBSU4oTk9ERSkgVFJFRV9DSEFJTiAoQkxPQ0tfQ0hFQ0sgKE5PREUpKQorI2RlZmluZSBCTE9DS19BQlNUUkFDVF9PUklHSU4oTk9ERSkgKEJMT0NLX0NIRUNLIChOT0RFKS0+YmxvY2suYWJzdHJhY3Rfb3JpZ2luKQorI2RlZmluZSBCTE9DS19BQlNUUkFDVChOT0RFKSAoQkxPQ0tfQ0hFQ0sgKE5PREUpLT5ibG9jay5hYnN0cmFjdF9mbGFnKQorCisvKiBBbiBpbmRleCBudW1iZXIgZm9yIHRoaXMgYmxvY2suICBUaGVzZSB2YWx1ZXMgYXJlIG5vdCBndWFyYW50ZWVkIHRvCisgICBiZSB1bmlxdWUgYWNyb3NzIGZ1bmN0aW9ucyAtLSB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBkZXBlbmRzIG9uCisgICB0aGUgZGVidWdnaW5nIG91dHB1dCBmb3JtYXQgaW4gdXNlLiAgKi8KKyNkZWZpbmUgQkxPQ0tfTlVNQkVSKE5PREUpIChCTE9DS19DSEVDSyAoTk9ERSktPmJsb2NrLmJsb2NrX251bSkKKworLyogSWYgYmxvY2sgcmVvcmRlcmluZyBzcGxpdHMgYSBsZXhpY2FsIGJsb2NrIGludG8gZGlzY29udGlndW91cworICAgYWRkcmVzcyByYW5nZXMsIHdlJ2xsIG1ha2UgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBibG9jay4KKworICAgTm90ZSB0aGF0IHRoaXMgaXMgbG9naWNhbGx5IGRpc3RpbmN0IGZyb20gQkxPQ0tfQUJTVFJBQ1RfT1JJR0lOLgorICAgSW4gdGhhdCBjYXNlLCB3ZSBoYXZlIG9uZSBzb3VyY2UgYmxvY2sgdGhhdCBoYXMgYmVlbiByZXBsaWNhdGVkCisgICAodGhyb3VnaCBpbmxpbmluZyBvciB1bnJvbGxpbmcpIGludG8gbWFueSBsb2dpY2FsIGJsb2NrcywgYW5kIHRoYXQKKyAgIHRoZXNlIGxvZ2ljYWwgYmxvY2tzIGhhdmUgZGlmZmVyZW50IHBoeXNpY2FsIHZhcmlhYmxlcyBpbiB0aGVtLgorCisgICBJbiB0aGlzIGNhc2UsIHdlIGhhdmUgb25lIGxvZ2ljYWwgYmxvY2sgc3BsaXQgaW50byBzZXZlcmFsCisgICBub24tY29udGlndW91cyBhZGRyZXNzIHJhbmdlcy4gIE1vc3QgZGVidWcgZm9ybWF0cyBjYW4ndCBhY3R1YWxseQorICAgcmVwcmVzZW50IHRoaXMgaWRlYSBkaXJlY3RseSwgc28gd2UgZmFrZSBpdCBieSBjcmVhdGluZyBtdWx0aXBsZQorICAgbG9naWNhbCBibG9ja3Mgd2l0aCB0aGUgc2FtZSB2YXJpYWJsZXMgaW4gdGhlbS4gIEhvd2V2ZXIsIGZvciB0aG9zZQorICAgdGhhdCBkbyBzdXBwb3J0IG5vbi1jb250aWd1b3VzIHJlZ2lvbnMsIHRoZXNlIGFsbG93IHRoZSBvcmlnaW5hbAorICAgbG9naWNhbCBibG9jayB0byBiZSByZWNvbnN0cnVjdGVkLCBhbG9uZyB3aXRoIHRoZSBzZXQgb2YgYWRkcmVzcworICAgcmFuZ2VzLgorCisgICBPbmUgb2YgdGhlIGxvZ2ljYWwgYmxvY2sgZnJhZ21lbnRzIGlzIGFyYml0cmFyaWx5IGNob3NlbiB0byBiZQorICAgdGhlIE9SSUdJTi4gIFRoZSBvdGhlciBmcmFnbWVudHMgd2lsbCBwb2ludCB0byB0aGUgb3JpZ2luIHZpYQorICAgQkxPQ0tfRlJBR01FTlRfT1JJR0lOOyB0aGUgb3JpZ2luIGl0c2VsZiB3aWxsIGhhdmUgdGhpcyBwb2ludGVyCisgICBiZSBudWxsLiAgVGhlIGxpc3Qgb2YgZnJhZ21lbnRzIHdpbGwgYmUgY2hhaW5lZCB0aHJvdWdoCisgICBCTE9DS19GUkFHTUVOVF9DSEFJTiBmcm9tIHRoZSBvcmlnaW4uICAqLworCisjZGVmaW5lIEJMT0NLX0ZSQUdNRU5UX09SSUdJTihOT0RFKSAoQkxPQ0tfQ0hFQ0sgKE5PREUpLT5ibG9jay5mcmFnbWVudF9vcmlnaW4pCisjZGVmaW5lIEJMT0NLX0ZSQUdNRU5UX0NIQUlOKE5PREUpIChCTE9DS19DSEVDSyAoTk9ERSktPmJsb2NrLmZyYWdtZW50X2NoYWluKQorCisvKiBGb3IgYW4gaW5saW5lZCBmdW5jdGlvbiwgdGhpcyBnaXZlcyB0aGUgbG9jYXRpb24gd2hlcmUgaXQgd2FzIGNhbGxlZAorICAgZnJvbS4gIFRoaXMgaXMgb25seSBzZXQgaW4gdGhlIHRvcCBsZXZlbCBibG9jaywgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlCisgICBpbmxpbmVkIGZ1bmN0aW9uIHNjb3BlLiAgVGhpcyBpcyB1c2VkIGluIHRoZSBkZWJ1ZyBvdXRwdXQgcm91dGluZXMuICAqLworCisjZGVmaW5lIEJMT0NLX1NPVVJDRV9MT0NBVElPTihOT0RFKSAoQkxPQ0tfQ0hFQ0sgKE5PREUpLT5ibG9jay5sb2N1cykKKworc3RydWN0IEdUWSgoKSkgdHJlZV9ibG9jayB7CisgIHN0cnVjdCB0cmVlX2NvbW1vbiBjb21tb247CisKKyAgdW5zaWduZWQgYWJzdHJhY3RfZmxhZyA6IDE7CisgIHVuc2lnbmVkIGJsb2NrX251bSA6IDMxOworCisgIGxvY2F0aW9uX3QgbG9jdXM7CisKKyAgdHJlZSB2YXJzOworICBWRUModHJlZSxnYykgKm5vbmxvY2FsaXplZF92YXJzOworCisgIHRyZWUgc3ViYmxvY2tzOworICB0cmVlIHN1cGVyY29udGV4dDsKKyAgdHJlZSBhYnN0cmFjdF9vcmlnaW47CisgIHRyZWUgZnJhZ21lbnRfb3JpZ2luOworICB0cmVlIGZyYWdtZW50X2NoYWluOworfTsKKwwKKy8qIERlZmluZSBmaWVsZHMgYW5kIGFjY2Vzc29ycyBmb3Igbm9kZXMgcmVwcmVzZW50aW5nIGRhdGEgdHlwZXMuICAqLworCisvKiBTZWUgdHJlZS5kZWYgZm9yIGRvY3VtZW50YXRpb24gb2YgdGhlIHVzZSBvZiB0aGVzZSBmaWVsZHMuCisgICBMb29rIGF0IHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSB2YXJpb3VzIC4uLl9UWVBFIHRyZWUgY29kZXMuCisKKyAgIE5vdGUgdGhhdCB0aGUgdHlwZS52YWx1ZXMsIHR5cGUubWludmFsLCBhbmQgdHlwZS5tYXh2YWwgZmllbGRzIGFyZQorICAgb3ZlcmxvYWRlZCBhbmQgdXNlZCBmb3IgZGlmZmVyZW50IG1hY3JvcyBpbiBkaWZmZXJlbnQga2luZHMgb2YgdHlwZXMuCisgICBFYWNoIG1hY3JvIG11c3QgY2hlY2sgdG8gZW5zdXJlIHRoZSB0cmVlIG5vZGUgaXMgb2YgdGhlIHByb3BlciBraW5kIG9mCisgICB0eXBlLiAgTm90ZSBhbHNvIHRoYXQgc29tZSBvZiB0aGUgZnJvbnQtZW5kcyBhbHNvIG92ZXJsb2FkIHRoZXNlIGZpZWxkcywKKyAgIHNvIHRoZXkgbXVzdCBiZSBjaGVja2VkIGFzIHdlbGwuICAqLworCisjZGVmaW5lIFRZUEVfVUlEKE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+dHlwZS51aWQpCisjZGVmaW5lIFRZUEVfU0laRShOT0RFKSAoVFlQRV9DSEVDSyAoTk9ERSktPnR5cGUuc2l6ZSkKKyNkZWZpbmUgVFlQRV9TSVpFX1VOSVQoTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlLnNpemVfdW5pdCkKKyNkZWZpbmUgVFlQRV9WQUxVRVMoTk9ERSkgKEVOVU1FUkFMX1RZUEVfQ0hFQ0sgKE5PREUpLT50eXBlLnZhbHVlcykKKyNkZWZpbmUgVFlQRV9ET01BSU4oTk9ERSkgKEFSUkFZX1RZUEVfQ0hFQ0sgKE5PREUpLT50eXBlLnZhbHVlcykKKyNkZWZpbmUgVFlQRV9GSUVMRFMoTk9ERSkgKFJFQ09SRF9PUl9VTklPTl9DSEVDSyAoTk9ERSktPnR5cGUudmFsdWVzKQorI2RlZmluZSBUWVBFX0NBQ0hFRF9WQUxVRVMoTk9ERSkgKFRZUEVfQ0hFQ0soTk9ERSktPnR5cGUudmFsdWVzKQorI2RlZmluZSBUWVBFX09SSUdfU0laRV9UWVBFKE5PREUpCQkJXAorICAoSU5URUdFUl9UWVBFX0NIRUNLIChOT0RFKS0+dHlwZS52YWx1ZXMJCVwKKyAgPyBUUkVFX1RZUEUgKChOT0RFKS0+dHlwZS52YWx1ZXMpIDogTlVMTF9UUkVFKQorI2RlZmluZSBUWVBFX01FVEhPRFMoTk9ERSkgKFJFQ09SRF9PUl9VTklPTl9DSEVDSyAoTk9ERSktPnR5cGUubWF4dmFsKQorI2RlZmluZSBUWVBFX1ZGSUVMRChOT0RFKSAoUkVDT1JEX09SX1VOSU9OX0NIRUNLIChOT0RFKS0+dHlwZS5taW52YWwpCisjZGVmaW5lIFRZUEVfQVJHX1RZUEVTKE5PREUpIChGVU5DX09SX01FVEhPRF9DSEVDSyAoTk9ERSktPnR5cGUudmFsdWVzKQorI2RlZmluZSBUWVBFX01FVEhPRF9CQVNFVFlQRShOT0RFKSAoRlVOQ19PUl9NRVRIT0RfQ0hFQ0sgKE5PREUpLT50eXBlLm1heHZhbCkKKyNkZWZpbmUgVFlQRV9PRkZTRVRfQkFTRVRZUEUoTk9ERSkgKE9GRlNFVF9UWVBFX0NIRUNLIChOT0RFKS0+dHlwZS5tYXh2YWwpCisjZGVmaW5lIFRZUEVfUE9JTlRFUl9UTyhOT0RFKSAoVFlQRV9DSEVDSyAoTk9ERSktPnR5cGUucG9pbnRlcl90bykKKyNkZWZpbmUgVFlQRV9SRUZFUkVOQ0VfVE8oTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlLnJlZmVyZW5jZV90bykKKyNkZWZpbmUgVFlQRV9ORVhUX1BUUl9UTyhOT0RFKSAoUE9JTlRFUl9UWVBFX0NIRUNLIChOT0RFKS0+dHlwZS5taW52YWwpCisjZGVmaW5lIFRZUEVfTkVYVF9SRUZfVE8oTk9ERSkgKFJFRkVSRU5DRV9UWVBFX0NIRUNLIChOT0RFKS0+dHlwZS5taW52YWwpCisjZGVmaW5lIFRZUEVfTUlOX1ZBTFVFKE5PREUpIChOVU1FUklDQUxfVFlQRV9DSEVDSyAoTk9ERSktPnR5cGUubWludmFsKQorI2RlZmluZSBUWVBFX01BWF9WQUxVRShOT0RFKSAoTlVNRVJJQ0FMX1RZUEVfQ0hFQ0sgKE5PREUpLT50eXBlLm1heHZhbCkKKyNkZWZpbmUgVFlQRV9QUkVDSVNJT04oTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlLnByZWNpc2lvbikKKyNkZWZpbmUgVFlQRV9TWU1UQUJfQUREUkVTUyhOT0RFKSAoVFlQRV9DSEVDSyAoTk9ERSktPnR5cGUuc3ltdGFiLmFkZHJlc3MpCisjZGVmaW5lIFRZUEVfU1lNVEFCX1BPSU5URVIoTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlLnN5bXRhYi5wb2ludGVyKQorI2RlZmluZSBUWVBFX1NZTVRBQl9ESUUoTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlLnN5bXRhYi5kaWUpCisjZGVmaW5lIFRZUEVfTkFNRShOT0RFKSAoVFlQRV9DSEVDSyAoTk9ERSktPnR5cGUubmFtZSkKKyNkZWZpbmUgVFlQRV9ORVhUX1ZBUklBTlQoTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlLm5leHRfdmFyaWFudCkKKyNkZWZpbmUgVFlQRV9NQUlOX1ZBUklBTlQoTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlLm1haW5fdmFyaWFudCkKKyNkZWZpbmUgVFlQRV9DT05URVhUKE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+dHlwZS5jb250ZXh0KQorI2RlZmluZSBUWVBFX01BWFZBTChOT0RFKSAoVFlQRV9DSEVDSyAoTk9ERSktPnR5cGUubWF4dmFsKQorI2RlZmluZSBUWVBFX01JTlZBTChOT0RFKSAoVFlQRV9DSEVDSyAoTk9ERSktPnR5cGUubWludmFsKQorCisvKiBWZWN0b3IgdHlwZXMgbmVlZCB0byBjaGVjayB0YXJnZXQgZmxhZ3MgdG8gZGV0ZXJtaW5lIHR5cGUuICAqLworZXh0ZXJuIGVudW0gbWFjaGluZV9tb2RlIHZlY3Rvcl90eXBlX21vZGUgKGNvbnN0X3RyZWUpOworI2RlZmluZSBUWVBFX01PREUoTk9ERSkgXAorICAoVFJFRV9DT0RFIChUWVBFX0NIRUNLIChOT0RFKSkgPT0gVkVDVE9SX1RZUEUgXAorICAgPyB2ZWN0b3JfdHlwZV9tb2RlIChOT0RFKSA6IChOT0RFKS0+dHlwZS5tb2RlKQorI2RlZmluZSBTRVRfVFlQRV9NT0RFKE5PREUsIE1PREUpIFwKKyAgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlLm1vZGUgPSAoTU9ERSkpCisKKy8qIFRoZSAiY2Fub25pY2FsIiB0eXBlIGZvciB0aGlzIHR5cGUgbm9kZSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8KKyAgIGNvbXBhcmUgdGhlIHR5cGUgZm9yIGVxdWFsaXR5IHdpdGggYW5vdGhlciB0eXBlLiBJZiB0d28gdHlwZXMgYXJlCisgICBlcXVhbCAoYmFzZWQgb24gdGhlIHNlbWFudGljcyBvZiB0aGUgbGFuZ3VhZ2UpLCB0aGVuIHRoZXkgd2lsbCBoYXZlCisgICBlcXVpdmFsZW50IFRZUEVfQ0FOT05JQ0FMIGVudHJpZXMuCisKKyAgIEFzIGEgc3BlY2lhbCBjYXNlLCBpZiBUWVBFX0NBTk9OSUNBTCBpcyBOVUxMX1RSRUUsIHRoZW4gaXQgY2Fubm90CisgICBiZSB1c2VkIGZvciBjb21wYXJpc29uIGFnYWluc3Qgb3RoZXIgdHlwZXMuIEluc3RlYWQsIHRoZSB0eXBlIGlzCisgICBzYWlkIHRvIHJlcXVpcmUgc3RydWN0dXJhbCBlcXVhbGl0eSBjaGVja3MsIGRlc2NyaWJlZCBpbgorICAgVFlQRV9TVFJVQ1RVUkFMX0VRVUFMSVRZX1AuICovCisjZGVmaW5lIFRZUEVfQ0FOT05JQ0FMKE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+dHlwZS5jYW5vbmljYWwpCisvKiBJbmRpY2F0ZXMgdGhhdCB0aGUgdHlwZSBub2RlIHJlcXVpcmVzIHN0cnVjdHVyYWwgZXF1YWxpdHkKKyAgIGNoZWNrcy4gVGhlIGNvbXBpbGVyIHdpbGwgbmVlZCB0byBsb29rIGF0IHRoZSBjb21wb3NpdGlvbiBvZiB0aGUKKyAgIHR5cGUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgaXMgZXF1YWwgdG8gYW5vdGhlciB0eXBlLCByYXRoZXIgdGhhbgorICAganVzdCBjb21wYXJpbmcgY2Fub25pY2FsIHR5cGUgcG9pbnRlcnMuIEZvciBpbnN0YW5jZSwgd2Ugd291bGQgbmVlZAorICAgdG8gbG9vayBhdCB0aGUgcmV0dXJuIGFuZCBwYXJhbWV0ZXIgdHlwZXMgb2YgYSBGVU5DVElPTl9UWVBFCisgICBub2RlLiAqLworI2RlZmluZSBUWVBFX1NUUlVDVFVSQUxfRVFVQUxJVFlfUChOT0RFKSAoVFlQRV9DQU5PTklDQUwgKE5PREUpID09IE5VTExfVFJFRSkKKy8qIFNldHMgdGhlIFRZUEVfQ0FOT05JQ0FMIGZpZWxkIHRvIE5VTExfVFJFRSwgaW5kaWNhdGluZyB0aGF0IHRoZQorICAgdHlwZSBub2RlIHJlcXVpcmVzIHN0cnVjdHVyYWwgZXF1YWxpdHkuICovCisjZGVmaW5lIFNFVF9UWVBFX1NUUlVDVFVSQUxfRVFVQUxJVFkoTk9ERSkgKFRZUEVfQ0FOT05JQ0FMIChOT0RFKSA9IE5VTExfVFJFRSkKKyNkZWZpbmUgVFlQRV9MQU5HX1NQRUNJRklDKE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+dHlwZS5sYW5nX3NwZWNpZmljKQorI2RlZmluZSBUWVBFX0lCSVQoTk9ERSkgKEdFVF9NT0RFX0lCSVQgKFRZUEVfTU9ERSAoTk9ERSkpKQorI2RlZmluZSBUWVBFX0ZCSVQoTk9ERSkgKEdFVF9NT0RFX0ZCSVQgKFRZUEVfTU9ERSAoTk9ERSkpKQorCisvKiBGb3IgYSBWRUNUT1JfVFlQRSBub2RlLCB0aGlzIGRlc2NyaWJlcyBhIGRpZmZlcmVudCB0eXBlIHdoaWNoIGlzIGVtaXR0ZWQKKyAgIGluIHRoZSBkZWJ1Z2dpbmcgb3V0cHV0LiAgV2UgdXNlIHRoaXMgdG8gZGVzY3JpYmUgYSB2ZWN0b3IgYXMgYQorICAgc3RydWN0dXJlIGNvbnRhaW5pbmcgYW4gYXJyYXkuICAqLworI2RlZmluZSBUWVBFX0RFQlVHX1JFUFJFU0VOVEFUSU9OX1RZUEUoTk9ERSkgKFZFQ1RPUl9UWVBFX0NIRUNLIChOT0RFKS0+dHlwZS52YWx1ZXMpCisKKy8qIEZvciByZWNvcmQgYW5kIHVuaW9uIHR5cGVzLCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHR5cGUsIGFzIGEgYmFzZSB0eXBlCisgICBmb3IgaXRzZWxmLiAgKi8KKyNkZWZpbmUgVFlQRV9CSU5GTyhOT0RFKSAoUkVDT1JEX09SX1VOSU9OX0NIRUNLKE5PREUpLT50eXBlLmJpbmZvKQorCisvKiBGb3Igbm9uIHJlY29yZCBhbmQgdW5pb24gdHlwZXMsIHVzZWQgaW4gYSBsYW5ndWFnZS1kZXBlbmRlbnQgd2F5LiAgKi8KKyNkZWZpbmUgVFlQRV9MQU5HX1NMT1RfMShOT0RFKSAoTk9UX1JFQ09SRF9PUl9VTklPTl9DSEVDSyhOT0RFKS0+dHlwZS5iaW5mbykKKworLyogVGhlIChsYW5ndWFnZS1zcGVjaWZpYykgdHlwZWQtYmFzZWQgYWxpYXMgc2V0IGZvciB0aGlzIHR5cGUuCisgICBPYmplY3RzIHdob3NlIFRZUEVfQUxJQVNfU0VUcyBhcmUgZGlmZmVyZW50IGNhbm5vdCBhbGlhcyBlYWNoCisgICBvdGhlci4gIElmIHRoZSBUWVBFX0FMSUFTX1NFVCBpcyAtMSwgbm8gYWxpYXMgc2V0IGhhcyB5ZXQgYmVlbgorICAgYXNzaWduZWQgdG8gdGhpcyB0eXBlLiAgSWYgdGhlIFRZUEVfQUxJQVNfU0VUIGlzIDAsIG9iamVjdHMgb2YgdGhpcworICAgdHlwZSBjYW4gYWxpYXMgb2JqZWN0cyBvZiBhbnkgdHlwZS4gICovCisjZGVmaW5lIFRZUEVfQUxJQVNfU0VUKE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+dHlwZS5hbGlhc19zZXQpCisKKy8qIE5vbnplcm8gaWZmIHRoZSB0eXBlZC1iYXNlZCBhbGlhcyBzZXQgZm9yIHRoaXMgdHlwZSBoYXMgYmVlbgorICAgY2FsY3VsYXRlZC4gICovCisjZGVmaW5lIFRZUEVfQUxJQVNfU0VUX0tOT1dOX1AoTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlLmFsaWFzX3NldCAhPSAtMSkKKworLyogQSBUUkVFX0xJU1Qgb2YgSURFTlRJRklFUiBub2RlcyBvZiB0aGUgYXR0cmlidXRlcyB0aGF0IGFwcGx5CisgICB0byB0aGlzIHR5cGUuICAqLworI2RlZmluZSBUWVBFX0FUVFJJQlVURVMoTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlLmF0dHJpYnV0ZXMpCisKKy8qIFRoZSBhbGlnbm1lbnQgbmVjZXNzYXJ5IGZvciBvYmplY3RzIG9mIHRoaXMgdHlwZS4KKyAgIFRoZSB2YWx1ZSBpcyBhbiBpbnQsIG1lYXN1cmVkIGluIGJpdHMuICAqLworI2RlZmluZSBUWVBFX0FMSUdOKE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+dHlwZS5hbGlnbikKKworLyogMSBpZiB0aGUgYWxpZ25tZW50IGZvciB0aGlzIHR5cGUgd2FzIHJlcXVlc3RlZCBieSAiYWxpZ25lZCIgYXR0cmlidXRlLAorICAgMCBpZiBpdCBpcyB0aGUgZGVmYXVsdCBmb3IgdGhpcyB0eXBlLiAgKi8KKyNkZWZpbmUgVFlQRV9VU0VSX0FMSUdOKE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+Y29tbW9uLmJhc2UudXNlcl9hbGlnbikKKworLyogVGhlIGFsaWdubWVudCBmb3IgTk9ERSwgaW4gYnl0ZXMuICAqLworI2RlZmluZSBUWVBFX0FMSUdOX1VOSVQoTk9ERSkgKFRZUEVfQUxJR04gKE5PREUpIC8gQklUU19QRVJfVU5JVCkKKworLyogSWYgeW91ciBsYW5ndWFnZSBhbGxvd3MgeW91IHRvIGRlY2xhcmUgdHlwZXMsIGFuZCB5b3Ugd2FudCBkZWJ1ZyBpbmZvCisgICBmb3IgdGhlbSwgdGhlbiB5b3UgbmVlZCB0byBnZW5lcmF0ZSBjb3JyZXNwb25kaW5nIFRZUEVfREVDTCBub2Rlcy4KKyAgIFRoZXNlICJzdHViIiBUWVBFX0RFQ0wgbm9kZXMgaGF2ZSBubyBuYW1lLCBhbmQgc2ltcGx5IHBvaW50IGF0IHRoZQorICAgdHlwZSBub2RlLiAgWW91IHRoZW4gc2V0IHRoZSBUWVBFX1NUVUJfREVDTCBmaWVsZCBvZiB0aGUgdHlwZSBub2RlCisgICB0byBwb2ludCBiYWNrIGF0IHRoZSBUWVBFX0RFQ0wgbm9kZS4gIFRoaXMgYWxsb3dzIHRoZSBkZWJ1ZyByb3V0aW5lcworICAgdG8ga25vdyB0aGF0IHRoZSB0d28gbm9kZXMgcmVwcmVzZW50IHRoZSBzYW1lIHR5cGUsIHNvIHRoYXQgd2Ugb25seQorICAgZ2V0IG9uZSBkZWJ1ZyBpbmZvIHJlY29yZCBmb3IgdGhlbS4gICovCisjZGVmaW5lIFRZUEVfU1RVQl9ERUNMKE5PREUpIFRSRUVfQ0hBSU4gKE5PREUpCisKKy8qIEluIGEgUkVDT1JEX1RZUEUsIFVOSU9OX1RZUEUgb3IgUVVBTF9VTklPTl9UWVBFLCBpdCBtZWFucyB0aGUgdHlwZQorICAgaGFzIEJMS21vZGUgb25seSBiZWNhdXNlIGl0IGxhY2tzIHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgZm9yCisgICBpdHMgc2l6ZS4gICovCisjZGVmaW5lIFRZUEVfTk9fRk9SQ0VfQkxLKE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+dHlwZS5ub19mb3JjZV9ibGtfZmxhZykKKworLyogSW4gYW4gSU5URUdFUl9UWVBFLCBpdCBtZWFucyB0aGUgdHlwZSByZXByZXNlbnRzIGEgc2l6ZS4gIFdlIHVzZQorICAgdGhpcyBib3RoIGZvciB2YWxpZGl0eSBjaGVja2luZyBhbmQgdG8gcGVybWl0IG9wdGltaXphdGlvbnMgdGhhdAorICAgYXJlIHVuc2FmZSBmb3Igb3RoZXIgdHlwZXMuICBOb3RlIHRoYXQgdGhlIEMgYHNpemVfdCcgdHlwZSBzaG91bGQKKyAgICpub3QqIGhhdmUgdGhpcyBmbGFnIHNldC4gIFRoZSBgc2l6ZV90JyB0eXBlIGlzIHNpbXBseSBhIHR5cGVkZWYKKyAgIGZvciBhbiBvcmRpbmFyeSBpbnRlZ2VyIHR5cGUgdGhhdCBoYXBwZW5zIHRvIGJlIHRoZSB0eXBlIG9mIGFuCisgICBleHByZXNzaW9uIHJldHVybmVkIGJ5IGBzaXplb2YnOyBgc2l6ZV90JyBoYXMgbm8gc3BlY2lhbAorICAgcHJvcGVydGllcy4gIEV4cHJlc3Npb25zIHdob3NlIHR5cGUgaGF2ZSBUWVBFX0lTX1NJWkVUWVBFIHNldCBhcmUKKyAgIGFsd2F5cyBhY3R1YWwgc2l6ZXMuICAqLworI2RlZmluZSBUWVBFX0lTX1NJWkVUWVBFKE5PREUpIFwKKyAgKElOVEVHRVJfVFlQRV9DSEVDSyAoTk9ERSktPnR5cGUubm9fZm9yY2VfYmxrX2ZsYWcpCisKKy8qIE5vbnplcm8gaW4gYSB0eXBlIGNvbnNpZGVyZWQgdm9sYXRpbGUgYXMgYSB3aG9sZS4gICovCisjZGVmaW5lIFRZUEVfVk9MQVRJTEUoTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT5iYXNlLnZvbGF0aWxlX2ZsYWcpCisKKy8qIE1lYW5zIHRoaXMgdHlwZSBpcyBjb25zdC1xdWFsaWZpZWQuICAqLworI2RlZmluZSBUWVBFX1JFQURPTkxZKE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+YmFzZS5yZWFkb25seV9mbGFnKQorCisvKiBJZiBub256ZXJvLCB0aGlzIHR5cGUgaXMgYHJlc3RyaWN0Jy1xdWFsaWZpZWQsIGluIHRoZSBDIHNlbnNlIG9mCisgICB0aGUgdGVybS4gICovCisjZGVmaW5lIFRZUEVfUkVTVFJJQ1QoTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlLnJlc3RyaWN0X2ZsYWcpCisKKy8qIFRoZSBhZGRyZXNzIHNwYWNlIHRoZSB0eXBlIGlzIGluLiAgKi8KKyNkZWZpbmUgVFlQRV9BRERSX1NQQUNFKE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+YmFzZS5hZGRyZXNzX3NwYWNlKQorCisvKiBUaGVyZSBpcyBhIFRZUEVfUVVBTCB2YWx1ZSBmb3IgZWFjaCB0eXBlIHF1YWxpZmllci4gIFRoZXkgY2FuIGJlCisgICBjb21iaW5lZCBieSBiaXR3aXNlLW9yIHRvIGZvcm0gdGhlIGNvbXBsZXRlIHNldCBvZiBxdWFsaWZpZXJzIGZvciBhCisgICB0eXBlLiAgKi8KKworI2RlZmluZSBUWVBFX1VOUVVBTElGSUVEICAgMHgwCisjZGVmaW5lIFRZUEVfUVVBTF9DT05TVCAgICAweDEKKyNkZWZpbmUgVFlQRV9RVUFMX1ZPTEFUSUxFIDB4MgorI2RlZmluZSBUWVBFX1FVQUxfUkVTVFJJQ1QgMHg0CisKKy8qIEVuY29kZS9kZWNvZGUgdGhlIG5hbWVkIG1lbW9yeSBzdXBwb3J0IGFzIHBhcnQgb2YgdGhlIHF1YWxpZmllci4gIElmIG1vcmUKKyAgIHRoYW4gOCBxdWFsaWZpZXJzIGFyZSBhZGRlZCwgdGhlc2UgbWFjcm9zIG5lZWQgdG8gYmUgYWRqdXN0ZWQuICAqLworI2RlZmluZSBFTkNPREVfUVVBTF9BRERSX1NQQUNFKE5VTSkgKChOVU0gJiAweEZGKSA8PCA4KQorI2RlZmluZSBERUNPREVfUVVBTF9BRERSX1NQQUNFKFgpICgoKFgpID4+IDgpICYgMHhGRikKKworLyogUmV0dXJuIGFsbCBxdWFsaWZpZXJzIGV4Y2VwdCBmb3IgdGhlIGFkZHJlc3Mgc3BhY2UgcXVhbGlmaWVycy4gICovCisjZGVmaW5lIENMRUFSX1FVQUxfQUREUl9TUEFDRShYKSAoKFgpICYgfjB4RkYwMCkKKworLyogT25seSBrZWVwIHRoZSBhZGRyZXNzIHNwYWNlIG91dCBvZiB0aGUgcXVhbGlmaWVycyBhbmQgZGlzY2FyZCB0aGUgb3RoZXIKKyAgIHF1YWxpZmllcnMuICAqLworI2RlZmluZSBLRUVQX1FVQUxfQUREUl9TUEFDRShYKSAoKFgpICYgMHhGRjAwKQorCisvKiBUaGUgc2V0IG9mIHR5cGUgcXVhbGlmaWVycyBmb3IgdGhpcyB0eXBlLiAgKi8KKyNkZWZpbmUgVFlQRV9RVUFMUyhOT0RFKQkJCQkJXAorICAoKFRZUEVfUkVBRE9OTFkgKE5PREUpICogVFlQRV9RVUFMX0NPTlNUKQkJCVwKKyAgIHwgKFRZUEVfVk9MQVRJTEUgKE5PREUpICogVFlQRV9RVUFMX1ZPTEFUSUxFKQkJXAorICAgfCAoVFlQRV9SRVNUUklDVCAoTk9ERSkgKiBUWVBFX1FVQUxfUkVTVFJJQ1QpCQlcCisgICB8IChFTkNPREVfUVVBTF9BRERSX1NQQUNFIChUWVBFX0FERFJfU1BBQ0UgKE5PREUpKSkpCisKKy8qIFRoZSBzYW1lIGFzIFRZUEVfUVVBTFMgd2l0aG91dCB0aGUgYWRkcmVzcyBzcGFjZSBxdWFsaWZpY2F0aW9ucy4gICovCisjZGVmaW5lIFRZUEVfUVVBTFNfTk9fQUREUl9TUEFDRShOT0RFKQkJCQlcCisgICgoVFlQRV9SRUFET05MWSAoTk9ERSkgKiBUWVBFX1FVQUxfQ09OU1QpCQkJXAorICAgfCAoVFlQRV9WT0xBVElMRSAoTk9ERSkgKiBUWVBFX1FVQUxfVk9MQVRJTEUpCQlcCisgICB8IChUWVBFX1JFU1RSSUNUIChOT0RFKSAqIFRZUEVfUVVBTF9SRVNUUklDVCkpCisKKy8qIFRoZXNlIGZsYWdzIGFyZSBhdmFpbGFibGUgZm9yIGVhY2ggbGFuZ3VhZ2UgZnJvbnQgZW5kIHRvIHVzZSBpbnRlcm5hbGx5LiAgKi8KKyNkZWZpbmUgVFlQRV9MQU5HX0ZMQUdfMChOT0RFKSAoVFlQRV9DSEVDSyAoTk9ERSktPnR5cGUubGFuZ19mbGFnXzApCisjZGVmaW5lIFRZUEVfTEFOR19GTEFHXzEoTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlLmxhbmdfZmxhZ18xKQorI2RlZmluZSBUWVBFX0xBTkdfRkxBR18yKE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+dHlwZS5sYW5nX2ZsYWdfMikKKyNkZWZpbmUgVFlQRV9MQU5HX0ZMQUdfMyhOT0RFKSAoVFlQRV9DSEVDSyAoTk9ERSktPnR5cGUubGFuZ19mbGFnXzMpCisjZGVmaW5lIFRZUEVfTEFOR19GTEFHXzQoTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlLmxhbmdfZmxhZ180KQorI2RlZmluZSBUWVBFX0xBTkdfRkxBR181KE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+dHlwZS5sYW5nX2ZsYWdfNSkKKyNkZWZpbmUgVFlQRV9MQU5HX0ZMQUdfNihOT0RFKSAoVFlQRV9DSEVDSyAoTk9ERSktPnR5cGUubGFuZ19mbGFnXzYpCisKKy8qIFVzZWQgdG8ga2VlcCB0cmFjayBvZiB2aXNpdGVkIG5vZGVzIGluIHRyZWUgdHJhdmVyc2Fscy4gIFRoaXMgaXMgc2V0IHRvCisgICAwIGJ5IGNvcHlfbm9kZSBhbmQgbWFrZV9ub2RlLiAgKi8KKyNkZWZpbmUgVFJFRV9WSVNJVEVEKE5PREUpICgoTk9ERSktPmJhc2UudmlzaXRlZCkKKworLyogSWYgc2V0IGluIGFuIEFSUkFZX1RZUEUsIGluZGljYXRlcyBhIHN0cmluZyB0eXBlIChmb3IgbGFuZ3VhZ2VzCisgICB0aGF0IGRpc3Rpbmd1aXNoIHN0cmluZyBmcm9tIGFycmF5IG9mIGNoYXIpLgorICAgSWYgc2V0IGluIGEgSU5URUdFUl9UWVBFLCBpbmRpY2F0ZXMgYSBjaGFyYWN0ZXIgdHlwZS4gICovCisjZGVmaW5lIFRZUEVfU1RSSU5HX0ZMQUcoTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlLnN0cmluZ19mbGFnKQorCisvKiBJZiBub24tTlVMTCwgdGhpcyBpcyBhbiB1cHBlciBib3VuZCBvZiB0aGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIGFuCisgICBvYmplY3Qgb2YgdGhlIGdpdmVuIEFSUkFZX1RZUEUuICBUaGlzIGFsbG93cyB0ZW1wb3JhcmllcyB0byBiZQorICAgYWxsb2NhdGVkLiAgKi8KKyNkZWZpbmUgVFlQRV9BUlJBWV9NQVhfU0laRShBUlJBWV9UWVBFKSBcCisgIChBUlJBWV9UWVBFX0NIRUNLIChBUlJBWV9UWVBFKS0+dHlwZS5tYXh2YWwpCisKKy8qIEZvciBhIFZFQ1RPUl9UWVBFLCB0aGlzIGlzIHRoZSBudW1iZXIgb2Ygc3ViLXBhcnRzIG9mIHRoZSB2ZWN0b3IuICAqLworI2RlZmluZSBUWVBFX1ZFQ1RPUl9TVUJQQVJUUyhWRUNUT1JfVFlQRSkgXAorICAoKCh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKSAxKSBcCisgICA8PCBWRUNUT1JfVFlQRV9DSEVDSyAoVkVDVE9SX1RZUEUpLT50eXBlLnByZWNpc2lvbikKKworLyogU2V0IHByZWNpc2lvbiB0byBuIHdoZW4gd2UgaGF2ZSAyXm4gc3ViLXBhcnRzIG9mIHRoZSB2ZWN0b3IuICAqLworI2RlZmluZSBTRVRfVFlQRV9WRUNUT1JfU1VCUEFSVFMoVkVDVE9SX1RZUEUsIFgpIFwKKyAgKFZFQ1RPUl9UWVBFX0NIRUNLIChWRUNUT1JfVFlQRSktPnR5cGUucHJlY2lzaW9uID0gZXhhY3RfbG9nMiAoWCkpCisKKy8qIE5vbnplcm8gaW4gYSBWRUNUT1JfVFlQRSBpZiB0aGUgZnJvbnRlbmRzIHNob3VsZCBub3QgZW1pdCB3YXJuaW5ncworICAgYWJvdXQgbWlzc2luZyBjb252ZXJzaW9ucyB0byBvdGhlciB2ZWN0b3IgdHlwZXMgb2YgdGhlIHNhbWUgc2l6ZS4gICovCisjZGVmaW5lIFRZUEVfVkVDVE9SX09QQVFVRShOT0RFKSBcCisgIChWRUNUT1JfVFlQRV9DSEVDSyAoTk9ERSktPmJhc2UuZGVmYXVsdF9kZWZfZmxhZykKKworLyogSW5kaWNhdGVzIHRoYXQgb2JqZWN0cyBvZiB0aGlzIHR5cGUgbXVzdCBiZSBpbml0aWFsaXplZCBieSBjYWxsaW5nIGEKKyAgIGZ1bmN0aW9uIHdoZW4gdGhleSBhcmUgY3JlYXRlZC4gICovCisjZGVmaW5lIFRZUEVfTkVFRFNfQ09OU1RSVUNUSU5HKE5PREUpIFwKKyAgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlLm5lZWRzX2NvbnN0cnVjdGluZ19mbGFnKQorCisvKiBJbmRpY2F0ZXMgdGhhdCBhIFVOSU9OX1RZUEUgb2JqZWN0IHNob3VsZCBiZSBwYXNzZWQgdGhlIHNhbWUgd2F5IHRoYXQKKyAgIHRoZSBmaXJzdCB1bmlvbiBhbHRlcm5hdGl2ZSB3b3VsZCBiZSBwYXNzZWQsIG9yIHRoYXQgYSBSRUNPUkRfVFlQRQorICAgb2JqZWN0IHNob3VsZCBiZSBwYXNzZWQgdGhlIHNhbWUgd2F5IHRoYXQgdGhlIGZpcnN0IChhbmQgb25seSkgbWVtYmVyCisgICB3b3VsZCBiZSBwYXNzZWQuICAqLworI2RlZmluZSBUWVBFX1RSQU5TUEFSRU5UX0FHR1IoTk9ERSkgXAorICAoUkVDT1JEX09SX1VOSU9OX0NIRUNLIChOT0RFKS0+dHlwZS50cmFuc3BhcmVudF9hZ2dyX2ZsYWcpCisKKy8qIEZvciBhbiBBUlJBWV9UWVBFLCBpbmRpY2F0ZXMgdGhhdCBpdCBpcyBub3QgcGVybWl0dGVkIHRvIHRha2UgdGhlCisgICBhZGRyZXNzIG9mIGEgY29tcG9uZW50IG9mIHRoZSB0eXBlLiAgVGhpcyBpcyB0aGUgY291bnRlcnBhcnQgb2YKKyAgIERFQ0xfTk9OQUREUkVTU0FCTEVfUCBmb3IgYXJyYXlzLCBzZWUgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBmbGFnLiAgKi8KKyNkZWZpbmUgVFlQRV9OT05BTElBU0VEX0NPTVBPTkVOVChOT0RFKSBcCisgIChBUlJBWV9UWVBFX0NIRUNLIChOT0RFKS0+dHlwZS50cmFuc3BhcmVudF9hZ2dyX2ZsYWcpCisKKy8qIEluZGljYXRlZCB0aGF0IG9iamVjdHMgb2YgdGhpcyB0eXBlIHNob3VsZCBiZSBsYWlkIG91dCBpbiBhcworICAgY29tcGFjdCBhIHdheSBhcyBwb3NzaWJsZS4gICovCisjZGVmaW5lIFRZUEVfUEFDS0VEKE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+Y29tbW9uLmJhc2UucGFja2VkX2ZsYWcpCisKKy8qIFVzZWQgYnkgdHlwZV9jb250YWluc19wbGFjZWhvbGRlcl9wIHRvIGF2b2lkIHJlY29tcHV0YXRpb24uCisgICBWYWx1ZXMgYXJlOiAwICh1bmtub3duKSwgMSAoZmFsc2UpLCAyICh0cnVlKS4gIE5ldmVyIGFjY2VzcworICAgdGhpcyBmaWVsZCBkaXJlY3RseS4gICovCisjZGVmaW5lIFRZUEVfQ09OVEFJTlNfUExBQ0VIT0xERVJfSU5URVJOQUwoTk9ERSkgXAorICAoVFlQRV9DSEVDSyAoTk9ERSktPnR5cGUuY29udGFpbnNfcGxhY2Vob2xkZXJfYml0cykKKworc3RydWN0IGRpZV9zdHJ1Y3Q7CisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfdHlwZSB7CisgIHN0cnVjdCB0cmVlX2NvbW1vbiBjb21tb247CisgIHRyZWUgdmFsdWVzOworICB0cmVlIHNpemU7CisgIHRyZWUgc2l6ZV91bml0OworICB0cmVlIGF0dHJpYnV0ZXM7CisgIHVuc2lnbmVkIGludCB1aWQ7CisKKyAgdW5zaWduZWQgaW50IHByZWNpc2lvbiA6IDEwOworICB1bnNpZ25lZCBub19mb3JjZV9ibGtfZmxhZyA6IDE7CisgIHVuc2lnbmVkIG5lZWRzX2NvbnN0cnVjdGluZ19mbGFnIDogMTsKKyAgdW5zaWduZWQgdHJhbnNwYXJlbnRfYWdncl9mbGFnIDogMTsKKyAgdW5zaWduZWQgcmVzdHJpY3RfZmxhZyA6IDE7CisgIHVuc2lnbmVkIGNvbnRhaW5zX3BsYWNlaG9sZGVyX2JpdHMgOiAyOworCisgIEVOVU1fQklURklFTEQobWFjaGluZV9tb2RlKSBtb2RlIDogODsKKworICB1bnNpZ25lZCBzdHJpbmdfZmxhZyA6IDE7CisgIHVuc2lnbmVkIGxhbmdfZmxhZ18wIDogMTsKKyAgdW5zaWduZWQgbGFuZ19mbGFnXzEgOiAxOworICB1bnNpZ25lZCBsYW5nX2ZsYWdfMiA6IDE7CisgIHVuc2lnbmVkIGxhbmdfZmxhZ18zIDogMTsKKyAgdW5zaWduZWQgbGFuZ19mbGFnXzQgOiAxOworICB1bnNpZ25lZCBsYW5nX2ZsYWdfNSA6IDE7CisgIHVuc2lnbmVkIGxhbmdfZmxhZ182IDogMTsKKworICB1bnNpZ25lZCBpbnQgYWxpZ247CisgIGFsaWFzX3NldF90eXBlIGFsaWFzX3NldDsKKyAgdHJlZSBwb2ludGVyX3RvOworICB0cmVlIHJlZmVyZW5jZV90bzsKKyAgdW5pb24gdHJlZV90eXBlX3N5bXRhYiB7CisgICAgaW50IEdUWSAoKHRhZyAoIjAiKSkpIGFkZHJlc3M7CisgICAgY29uc3QgY2hhciAqIEdUWSAoKHRhZyAoIjEiKSkpIHBvaW50ZXI7CisgICAgc3RydWN0IGRpZV9zdHJ1Y3QgKiBHVFkgKCh0YWcgKCIyIikpKSBkaWU7CisgIH0gR1RZICgoZGVzYyAoImRlYnVnX2hvb2tzID09ICZzZGJfZGVidWdfaG9va3MgPyAxIDogZGVidWdfaG9va3MgPT0gJmR3YXJmMl9kZWJ1Z19ob29rcyA/IDIgOiAwIiksCisJICBkZXNjYml0cyAoIjIiKSkpIHN5bXRhYjsKKyAgdHJlZSBuYW1lOworICB0cmVlIG1pbnZhbDsKKyAgdHJlZSBtYXh2YWw7CisgIHRyZWUgbmV4dF92YXJpYW50OworICB0cmVlIG1haW5fdmFyaWFudDsKKyAgdHJlZSBiaW5mbzsKKyAgdHJlZSBjb250ZXh0OworICB0cmVlIGNhbm9uaWNhbDsKKyAgLyogUG9pbnRzIHRvIGEgc3RydWN0dXJlIHdob3NlIGRldGFpbHMgZGVwZW5kIG9uIHRoZSBsYW5ndWFnZSBpbiB1c2UuICAqLworICBzdHJ1Y3QgbGFuZ190eXBlICpsYW5nX3NwZWNpZmljOworfTsKKwwKKy8qIERlZmluZSBhY2Nlc3NvciBtYWNyb3MgZm9yIGluZm9ybWF0aW9uIGFib3V0IHR5cGUgaW5oZXJpdGFuY2UKKyAgIGFuZCBiYXNldHlwZXMuCisKKyAgIEEgImJhc2V0eXBlIiBtZWFucyBhIHBhcnRpY3VsYXIgdXNhZ2Ugb2YgYSBkYXRhIHR5cGUgZm9yIGluaGVyaXRhbmNlCisgICBpbiBhbm90aGVyIHR5cGUuICBFYWNoIHN1Y2ggYmFzZXR5cGUgdXNhZ2UgaGFzIGl0cyBvd24gImJpbmZvIgorICAgb2JqZWN0IHRvIGRlc2NyaWJlIGl0LiAgVGhlIGJpbmZvIG9iamVjdCBpcyBhIFRSRUVfVkVDIG5vZGUuCisKKyAgIEluaGVyaXRhbmNlIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBiaW5mbyBub2RlcyBhbGxvY2F0ZWQgZm9yIGEKKyAgIGdpdmVuIHR5cGUuICBGb3IgZXhhbXBsZSwgZ2l2ZW4gdHlwZXMgQyBhbmQgRCwgc3VjaCB0aGF0IEQgaXMKKyAgIGluaGVyaXRlZCBieSBDLCAzIGJpbmZvIG5vZGVzIHdpbGwgYmUgYWxsb2NhdGVkOiBvbmUgZm9yIGRlc2NyaWJpbmcKKyAgIHRoZSBiaW5mbyBwcm9wZXJ0aWVzIG9mIEMsIHNpbWlsYXJseSBvbmUgZm9yIEQsIGFuZCBvbmUgZm9yCisgICBkZXNjcmliaW5nIHRoZSBiaW5mbyBwcm9wZXJ0aWVzIG9mIEQgYXMgYSBiYXNlIHR5cGUgZm9yIEMuCisgICBUaHVzLCBnaXZlbiBhIHBvaW50ZXIgdG8gY2xhc3MgQywgb25lIGNhbiBnZXQgYSBwb2ludGVyIHRvIHRoZSBiaW5mbworICAgb2YgRCBhY3RpbmcgYXMgYSBiYXNldHlwZSBmb3IgQyBieSBsb29raW5nIGF0IEMncyBiaW5mbydzIGJhc2V0eXBlcy4gICovCisKKy8qIEJJTkZPIHNwZWNpZmljIGZsYWdzLiAgKi8KKworLyogTm9uemVybyBtZWFucyB0aGF0IHRoZSBkZXJpdmF0aW9uIGNoYWluIGlzIHZpYSBhIGB2aXJ0dWFsJyBkZWNsYXJhdGlvbi4gICovCisjZGVmaW5lIEJJTkZPX1ZJUlRVQUxfUChOT0RFKSAoVFJFRV9CSU5GT19DSEVDSyAoTk9ERSktPmJhc2Uuc3RhdGljX2ZsYWcpCisKKy8qIEZsYWdzIGZvciBsYW5ndWFnZSBkZXBlbmRlbnQgdXNlLiAgKi8KKyNkZWZpbmUgQklORk9fTUFSS0VEKE5PREUpIFRSRUVfTEFOR19GTEFHXzAoVFJFRV9CSU5GT19DSEVDSyhOT0RFKSkKKyNkZWZpbmUgQklORk9fRkxBR18xKE5PREUpIFRSRUVfTEFOR19GTEFHXzEoVFJFRV9CSU5GT19DSEVDSyhOT0RFKSkKKyNkZWZpbmUgQklORk9fRkxBR18yKE5PREUpIFRSRUVfTEFOR19GTEFHXzIoVFJFRV9CSU5GT19DSEVDSyhOT0RFKSkKKyNkZWZpbmUgQklORk9fRkxBR18zKE5PREUpIFRSRUVfTEFOR19GTEFHXzMoVFJFRV9CSU5GT19DSEVDSyhOT0RFKSkKKyNkZWZpbmUgQklORk9fRkxBR180KE5PREUpIFRSRUVfTEFOR19GTEFHXzQoVFJFRV9CSU5GT19DSEVDSyhOT0RFKSkKKyNkZWZpbmUgQklORk9fRkxBR181KE5PREUpIFRSRUVfTEFOR19GTEFHXzUoVFJFRV9CSU5GT19DSEVDSyhOT0RFKSkKKyNkZWZpbmUgQklORk9fRkxBR182KE5PREUpIFRSRUVfTEFOR19GTEFHXzYoVFJFRV9CSU5GT19DSEVDSyhOT0RFKSkKKworLyogVGhlIGFjdHVhbCBkYXRhIHR5cGUgbm9kZSBiZWluZyBpbmhlcml0ZWQgaW4gdGhpcyBiYXNldHlwZS4gICovCisjZGVmaW5lIEJJTkZPX1RZUEUoTk9ERSkgVFJFRV9UWVBFIChUUkVFX0JJTkZPX0NIRUNLKE5PREUpKQorCisvKiBUaGUgb2Zmc2V0IHdoZXJlIHRoaXMgYmFzZXR5cGUgYXBwZWFycyBpbiBpdHMgY29udGFpbmluZyB0eXBlLgorICAgQklORk9fT0ZGU0VUIHNsb3QgaG9sZHMgdGhlIG9mZnNldCAoaW4gYnl0ZXMpCisgICBmcm9tIHRoZSBiYXNlIG9mIHRoZSBjb21wbGV0ZSBvYmplY3QgdG8gdGhlIGJhc2Ugb2YgdGhlIHBhcnQgb2YgdGhlCisgICBvYmplY3QgdGhhdCBpcyBhbGxvY2F0ZWQgb24gYmVoYWxmIG9mIHRoaXMgYHR5cGUnLgorICAgVGhpcyBpcyBhbHdheXMgMCBleGNlcHQgd2hlbiB0aGVyZSBpcyBtdWx0aXBsZSBpbmhlcml0YW5jZS4gICovCisKKyNkZWZpbmUgQklORk9fT0ZGU0VUKE5PREUpIChUUkVFX0JJTkZPX0NIRUNLKE5PREUpLT5iaW5mby5vZmZzZXQpCisjZGVmaW5lIEJJTkZPX09GRlNFVF9aRVJPUChOT0RFKSAoaW50ZWdlcl96ZXJvcCAoQklORk9fT0ZGU0VUIChOT0RFKSkpCisKKy8qIFRoZSB2aXJ0dWFsIGZ1bmN0aW9uIHRhYmxlIGJlbG9uZ2luZyB0byB0aGlzIGJhc2V0eXBlLiAgVmlydHVhbAorICAgZnVuY3Rpb24gdGFibGVzIHByb3ZpZGUgYSBtZWNoYW5pc20gZm9yIHJ1bi10aW1lIG1ldGhvZCBkaXNwYXRjaGluZy4KKyAgIFRoZSBlbnRyaWVzIG9mIGEgdmlydHVhbCBmdW5jdGlvbiB0YWJsZSBhcmUgbGFuZ3VhZ2UtZGVwZW5kZW50LiAgKi8KKworI2RlZmluZSBCSU5GT19WVEFCTEUoTk9ERSkgKFRSRUVfQklORk9fQ0hFQ0soTk9ERSktPmJpbmZvLnZ0YWJsZSkKKworLyogVGhlIHZpcnR1YWwgZnVuY3Rpb25zIGluIHRoZSB2aXJ0dWFsIGZ1bmN0aW9uIHRhYmxlLiAgVGhpcyBpcworICAgYSBUUkVFX0xJU1QgdGhhdCBpcyB1c2VkIGFzIGFuIGluaXRpYWwgYXBwcm94aW1hdGlvbiBmb3IgYnVpbGRpbmcKKyAgIGEgdmlydHVhbCBmdW5jdGlvbiB0YWJsZSBmb3IgdGhpcyBiYXNldHlwZS4gICovCisjZGVmaW5lIEJJTkZPX1ZJUlRVQUxTKE5PREUpIChUUkVFX0JJTkZPX0NIRUNLKE5PREUpLT5iaW5mby52aXJ0dWFscykKKworLyogQSB2ZWN0b3Igb2YgYmluZm9zIGZvciB0aGUgZGlyZWN0IGJhc2V0eXBlcyBpbmhlcml0ZWQgYnkgdGhpcworICAgYmFzZXR5cGUuCisKKyAgIElmIHRoaXMgYmFzZXR5cGUgZGVzY3JpYmVzIHR5cGUgRCBhcyBpbmhlcml0ZWQgaW4gQywgYW5kIGlmIHRoZQorICAgYmFzZXR5cGVzIG9mIEQgYXJlIEUgYW5kIEYsIHRoZW4gdGhpcyB2ZWN0b3IgY29udGFpbnMgYmluZm9zIGZvcgorICAgaW5oZXJpdGFuY2Ugb2YgRSBhbmQgRiBieSBDLiAgKi8KKyNkZWZpbmUgQklORk9fQkFTRV9CSU5GT1MoTk9ERSkgKCZUUkVFX0JJTkZPX0NIRUNLKE5PREUpLT5iaW5mby5iYXNlX2JpbmZvcykKKworLyogVGhlIG51bWJlciBvZiBiYXNldHlwZXMgZm9yIE5PREUuICAqLworI2RlZmluZSBCSU5GT19OX0JBU0VfQklORk9TKE5PREUpIChWRUNfbGVuZ3RoICh0cmVlLCBCSU5GT19CQVNFX0JJTkZPUyAoTk9ERSkpKQorCisvKiBBY2Nlc3NvciBtYWNybyB0byBnZXQgdG8gdGhlIE50aCBiYXNlIGJpbmZvIG9mIHRoaXMgYmluZm8uICAqLworI2RlZmluZSBCSU5GT19CQVNFX0JJTkZPKE5PREUsTikgXAorIChWRUNfaW5kZXggKHRyZWUsIEJJTkZPX0JBU0VfQklORk9TIChOT0RFKSwgKE4pKSkKKyNkZWZpbmUgQklORk9fQkFTRV9JVEVSQVRFKE5PREUsTixCKSBcCisgKFZFQ19pdGVyYXRlICh0cmVlLCBCSU5GT19CQVNFX0JJTkZPUyAoTk9ERSksIChOKSwgKEIpKSkKKyNkZWZpbmUgQklORk9fQkFTRV9BUFBFTkQoTk9ERSxUKSBcCisgKFZFQ19xdWlja19wdXNoICh0cmVlLCBCSU5GT19CQVNFX0JJTkZPUyAoTk9ERSksIChUKSkpCisKKy8qIEZvciBhIEJJTkZPIHJlY29yZCBkZXNjcmliaW5nIGEgdmlydHVhbCBiYXNlIGNsYXNzLCBpLmUuLCBvbmUgd2hlcmUKKyAgIFRSRUVfVklBX1ZJUlRVQUwgaXMgc2V0LCB0aGlzIGZpZWxkIGFzc2lzdHMgaW4gbG9jYXRpbmcgdGhlIHZpcnR1YWwKKyAgIGJhc2UuICBUaGUgYWN0dWFsIGNvbnRlbnRzIGFyZSBsYW5ndWFnZS1kZXBlbmRlbnQuICBJbiB0aGUgQysrCisgICBmcm9udC1lbmQgdGhpcyBmaWVsZCBpcyBhbiBJTlRFR0VSX0NTVCBnaXZpbmcgYW4gb2Zmc2V0IGludG8gdGhlCisgICB2dGFibGUgd2hlcmUgdGhlIG9mZnNldCB0byB0aGUgdmlydHVhbCBiYXNlIGNhbiBiZSBmb3VuZC4gICovCisjZGVmaW5lIEJJTkZPX1ZQVFJfRklFTEQoTk9ERSkgKFRSRUVfQklORk9fQ0hFQ0soTk9ERSktPmJpbmZvLnZwdHJfZmllbGQpCisKKy8qIEluZGljYXRlcyB0aGUgYWNjZXNzZXMgdGhpcyBiaW5mbyBoYXMgdG8gaXRzIGJhc2VzLiBUaGUgdmFsdWVzIGFyZQorICAgYWNjZXNzX3B1YmxpY19ub2RlLCBhY2Nlc3NfcHJvdGVjdGVkX25vZGUgb3IgYWNjZXNzX3ByaXZhdGVfbm9kZS4KKyAgIElmIHRoaXMgYXJyYXkgaXMgbm90IHByZXNlbnQsIHB1YmxpYyBhY2Nlc3MgaXMgaW1wbGllZC4gICovCisjZGVmaW5lIEJJTkZPX0JBU0VfQUNDRVNTRVMoTk9ERSkgKFRSRUVfQklORk9fQ0hFQ0soTk9ERSktPmJpbmZvLmJhc2VfYWNjZXNzZXMpCisKKyNkZWZpbmUgQklORk9fQkFTRV9BQ0NFU1MoTk9ERSxOKSBcCisgIFZFQ19pbmRleCAodHJlZSwgQklORk9fQkFTRV9BQ0NFU1NFUyAoTk9ERSksIChOKSkKKyNkZWZpbmUgQklORk9fQkFTRV9BQ0NFU1NfQVBQRU5EKE5PREUsVCkgXAorICBWRUNfcXVpY2tfcHVzaCAodHJlZSwgQklORk9fQkFTRV9BQ0NFU1NFUyAoTk9ERSksIChUKSkKKworLyogVGhlIGluZGV4IGluIHRoZSBWVFQgd2hlcmUgdGhpcyBzdWJvYmplY3QncyBzdWItVlRUIGNhbiBiZSBmb3VuZC4KKyAgIE5VTExfVFJFRSBpZiB0aGVyZSBpcyBubyBzdWItVlRULiAgKi8KKyNkZWZpbmUgQklORk9fU1VCVlRUX0lOREVYKE5PREUpIChUUkVFX0JJTkZPX0NIRUNLKE5PREUpLT5iaW5mby52dHRfc3VidnR0KQorCisvKiBUaGUgaW5kZXggaW4gdGhlIFZUVCB3aGVyZSB0aGUgdnB0ciBmb3IgdGhpcyBzdWJvYmplY3QgY2FuIGJlCisgICBmb3VuZC4gIE5VTExfVFJFRSBpZiB0aGVyZSBpcyBubyBzZWNvbmRhcnkgdnB0ciBpbiB0aGUgVlRULiAgKi8KKyNkZWZpbmUgQklORk9fVlBUUl9JTkRFWChOT0RFKSAoVFJFRV9CSU5GT19DSEVDSyhOT0RFKS0+YmluZm8udnR0X3ZwdHIpCisKKy8qIFRoZSBCSU5GT19JTkhFUklUQU5DRV9DSEFJTiBwb2ludHMgYXQgdGhlIGJpbmZvIGZvciB0aGUgYmFzZQorICAgaW5oZXJpdGluZyB0aGlzIGJhc2UgZm9yIG5vbi12aXJ0dWFsIGJhc2VzLiBGb3IgdmlydHVhbCBiYXNlcyBpdAorICAgcG9pbnRzIGVpdGhlciB0byB0aGUgYmluZm8gZm9yIHdoaWNoIHRoaXMgaXMgYSBwcmltYXJ5IGJpbmZvLCBvciB0bworICAgdGhlIGJpbmZvIG9mIHRoZSBtb3N0IGRlcml2ZWQgdHlwZS4gICovCisjZGVmaW5lIEJJTkZPX0lOSEVSSVRBTkNFX0NIQUlOKE5PREUpIFwKKwkoVFJFRV9CSU5GT19DSEVDSyhOT0RFKS0+YmluZm8uaW5oZXJpdGFuY2UpCisKK3N0cnVjdCBHVFkgKCgpKSB0cmVlX2JpbmZvIHsKKyAgc3RydWN0IHRyZWVfY29tbW9uIGNvbW1vbjsKKworICB0cmVlIG9mZnNldDsKKyAgdHJlZSB2dGFibGU7CisgIHRyZWUgdmlydHVhbHM7CisgIHRyZWUgdnB0cl9maWVsZDsKKyAgVkVDKHRyZWUsZ2MpICpiYXNlX2FjY2Vzc2VzOworICB0cmVlIGluaGVyaXRhbmNlOworCisgIHRyZWUgdnR0X3N1YnZ0dDsKKyAgdHJlZSB2dHRfdnB0cjsKKworICBWRUModHJlZSxub25lKSBiYXNlX2JpbmZvczsKK307CisKKwwKKy8qIERlZmluZSBmaWVsZHMgYW5kIGFjY2Vzc29ycyBmb3Igbm9kZXMgcmVwcmVzZW50aW5nIGRlY2xhcmVkIG5hbWVzLiAgKi8KKworLyogTm9uemVybyBpZiBERUNMIHJlcHJlc2VudHMgYSB2YXJpYWJsZSBmb3IgdGhlIFNTQSBwYXNzZXMuICAqLworI2RlZmluZSBTU0FfVkFSX1AoREVDTCkJCQkJCQkJXAorCShUUkVFX0NPREUgKERFQ0wpID09IFZBUl9ERUNMCQkJCQlcCisJIHx8IFRSRUVfQ09ERSAoREVDTCkgPT0gUEFSTV9ERUNMCQkJCVwKKwkgfHwgVFJFRV9DT0RFIChERUNMKSA9PSBSRVNVTFRfREVDTAkJCQlcCisJIHx8IChUUkVFX0NPREUgKERFQ0wpID09IFNTQV9OQU1FCQkJCVwKKwkgICAgICYmIChUUkVFX0NPREUgKFNTQV9OQU1FX1ZBUiAoREVDTCkpID09IFZBUl9ERUNMCQlcCisJCSB8fCBUUkVFX0NPREUgKFNTQV9OQU1FX1ZBUiAoREVDTCkpID09IFBBUk1fREVDTAlcCisJCSB8fCBUUkVFX0NPREUgKFNTQV9OQU1FX1ZBUiAoREVDTCkpID09IFJFU1VMVF9ERUNMKSkpCisKKworCisKKy8qIEVudW1lcmF0ZSB2aXNpYmlsaXR5IHNldHRpbmdzLiAgKi8KKyNpZm5kZWYgU1lNQk9MX1ZJU0lCSUxJVFlfREVGSU5FRAorI2RlZmluZSBTWU1CT0xfVklTSUJJTElUWV9ERUZJTkVECitlbnVtIHN5bWJvbF92aXNpYmlsaXR5Cit7CisgIFZJU0lCSUxJVFlfREVGQVVMVCwKKyAgVklTSUJJTElUWV9QUk9URUNURUQsCisgIFZJU0lCSUxJVFlfSElEREVOLAorICBWSVNJQklMSVRZX0lOVEVSTkFMCit9OworI2VuZGlmCisKK3N0cnVjdCBmdW5jdGlvbjsKKworCisvKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBvYmplY3QgYXMgd3JpdHRlbiBieSB0aGUgdXNlci4KKyAgIEl0IGlzIGFuIElERU5USUZJRVJfTk9ERS4gICovCisjZGVmaW5lIERFQ0xfTkFNRShOT0RFKSAoREVDTF9NSU5JTUFMX0NIRUNLIChOT0RFKS0+ZGVjbF9taW5pbWFsLm5hbWUpCisKKy8qIEV2ZXJ5IC4uLl9ERUNMIG5vZGUgZ2V0cyBhIHVuaXF1ZSBudW1iZXIuICAqLworI2RlZmluZSBERUNMX1VJRChOT0RFKSAoREVDTF9NSU5JTUFMX0NIRUNLIChOT0RFKS0+ZGVjbF9taW5pbWFsLnVpZCkKKworLyogREVCVUdfRVhQUl9ERUNMcyBnZXQgbmVnYXRpdmUgVUlEIG51bWJlcnMsIHRvIGNhdGNoIGVycm9uZW91cworICAgdXNlcy4gICovCisjZGVmaW5lIERFQlVHX1RFTVBfVUlEKE5PREUpICgtREVDTF9VSUQgKFRSRUVfQ0hFQ0sgKChOT0RFKSwgREVCVUdfRVhQUl9ERUNMKSkpCisKKy8qIFRoZXNlIHR3byBmaWVsZHMgZGVzY3JpYmUgd2hlcmUgaW4gdGhlIHNvdXJjZSBjb2RlIHRoZSBkZWNsYXJhdGlvbgorICAgd2FzLiAgSWYgdGhlIGRlY2xhcmF0aW9uIGFwcGVhcnMgaW4gc2V2ZXJhbCBwbGFjZXMgKGFzIGZvciBhIEMKKyAgIGZ1bmN0aW9uIHRoYXQgaXMgZGVjbGFyZWQgZmlyc3QgYW5kIHRoZW4gZGVmaW5lZCBsYXRlciksIHRoaXMKKyAgIGluZm9ybWF0aW9uIHNob3VsZCByZWZlciB0byB0aGUgZGVmaW5pdGlvbi4gICovCisjZGVmaW5lIERFQ0xfU09VUkNFX0xPQ0FUSU9OKE5PREUpIChERUNMX01JTklNQUxfQ0hFQ0sgKE5PREUpLT5kZWNsX21pbmltYWwubG9jdXMpCisjZGVmaW5lIERFQ0xfU09VUkNFX0ZJTEUoTk9ERSkgTE9DQVRJT05fRklMRSAoREVDTF9TT1VSQ0VfTE9DQVRJT04gKE5PREUpKQorI2RlZmluZSBERUNMX1NPVVJDRV9MSU5FKE5PREUpIExPQ0FUSU9OX0xJTkUgKERFQ0xfU09VUkNFX0xPQ0FUSU9OIChOT0RFKSkKKyNkZWZpbmUgREVDTF9JU19CVUlMVElOKERFQ0wpIFwKKyAgKERFQ0xfU09VUkNFX0xPQ0FUSU9OIChERUNMKSA8PSBCVUlMVElOU19MT0NBVElPTikKKworLyogIEZvciBGSUVMRF9ERUNMcywgdGhpcyBpcyB0aGUgUkVDT1JEX1RZUEUsIFVOSU9OX1RZUEUsIG9yCisgICAgUVVBTF9VTklPTl9UWVBFIG5vZGUgdGhhdCB0aGUgZmllbGQgaXMgYSBtZW1iZXIgb2YuICBGb3IgVkFSX0RFQ0wsCisgICAgUEFSTV9ERUNMLCBGVU5DVElPTl9ERUNMLCBMQUJFTF9ERUNMLCBSRVNVTFRfREVDTCwgYW5kIENPTlNUX0RFQ0wKKyAgICBub2RlcywgdGhpcyBwb2ludHMgdG8gZWl0aGVyIHRoZSBGVU5DVElPTl9ERUNMIGZvciB0aGUgY29udGFpbmluZworICAgIGZ1bmN0aW9uLCB0aGUgUkVDT1JEX1RZUEUgb3IgVU5JT05fVFlQRSBmb3IgdGhlIGNvbnRhaW5pbmcgdHlwZSwgb3IKKyAgICBOVUxMX1RSRUUgb3IgYSBUUkFOU0xBVElPTl9VTklUX0RFQ0wgaWYgdGhlIGdpdmVuIGRlY2wgaGFzICJmaWxlCisgICAgc2NvcGUiLiAgKi8KKyNkZWZpbmUgREVDTF9DT05URVhUKE5PREUpIChERUNMX01JTklNQUxfQ0hFQ0sgKE5PREUpLT5kZWNsX21pbmltYWwuY29udGV4dCkKKyNkZWZpbmUgREVDTF9GSUVMRF9DT05URVhUKE5PREUpIChGSUVMRF9ERUNMX0NIRUNLIChOT0RFKS0+ZGVjbF9taW5pbWFsLmNvbnRleHQpCitzdHJ1Y3QgR1RZKCgpKSB0cmVlX2RlY2xfbWluaW1hbCB7CisgIHN0cnVjdCB0cmVlX2NvbW1vbiBjb21tb247CisgIGxvY2F0aW9uX3QgbG9jdXM7CisgIHVuc2lnbmVkIGludCB1aWQ7CisgIHRyZWUgbmFtZTsKKyAgdHJlZSBjb250ZXh0OworfTsKKworCisvKiBGb3IgYW55IHNvcnQgb2YgYSAuLi5fREVDTCBub2RlLCB0aGlzIHBvaW50cyB0byB0aGUgb3JpZ2luYWwgKGFic3RyYWN0KQorICAgZGVjbCBub2RlIHdoaWNoIHRoaXMgZGVjbCBpcyBhbiBpbmxpbmVkL2Nsb25lZCBpbnN0YW5jZSBvZiwgb3IgZWxzZSBpdAorICAgaXMgTlVMTCBpbmRpY2F0aW5nIHRoYXQgdGhpcyBkZWNsIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBzb21lIG90aGVyIGRlY2wuCisKKyAgIFRoZSBDIGZyb250LWVuZCBhbHNvIHVzZXMgdGhpcyBpbiBhIG5lc3RlZCBkZWNsYXJhdGlvbiBvZiBhbiBpbmxpbmUKKyAgIGZ1bmN0aW9uLCB0byBwb2ludCBiYWNrIHRvIHRoZSBkZWZpbml0aW9uLiAgKi8KKyNkZWZpbmUgREVDTF9BQlNUUkFDVF9PUklHSU4oTk9ERSkgKERFQ0xfQ09NTU9OX0NIRUNLIChOT0RFKS0+ZGVjbF9jb21tb24uYWJzdHJhY3Rfb3JpZ2luKQorCisvKiBMaWtlIERFQ0xfQUJTVFJBQ1RfT1JJR0lOLCBidXQgcmV0dXJucyBOT0RFIGlmIHRoZXJlJ3Mgbm8gYWJzdHJhY3QKKyAgIG9yaWdpbi4gIFRoaXMgaXMgdXNlZnVsIHdoZW4gc2V0dGluZyB0aGUgREVDTF9BQlNUUkFDVF9PUklHSU4uICAqLworI2RlZmluZSBERUNMX09SSUdJTihOT0RFKSBcCisgIChERUNMX0FCU1RSQUNUX09SSUdJTiAoTk9ERSkgPyBERUNMX0FCU1RSQUNUX09SSUdJTiAoTk9ERSkgOiAoTk9ERSkpCisKKy8qIE5vbnplcm8gZm9yIGFueSBzb3J0IG9mIC4uLl9ERUNMIG5vZGUgbWVhbnMgdGhpcyBkZWNsIG5vZGUgcmVwcmVzZW50cyBhbgorICAgaW5saW5lIGluc3RhbmNlIG9mIHNvbWUgb3JpZ2luYWwgKGFic3RyYWN0KSBkZWNsIGZyb20gYW4gaW5saW5lIGZ1bmN0aW9uOworICAgc3VwcHJlc3MgYW55IHdhcm5pbmdzIGFib3V0IHNoYWRvd2luZyBzb21lIG90aGVyIHZhcmlhYmxlLiAgRlVOQ1RJT05fREVDTAorICAgbm9kZXMgY2FuIGFsc28gaGF2ZSB0aGVpciBhYnN0cmFjdCBvcmlnaW4gc2V0IHRvIHRoZW1zZWx2ZXMuICAqLworI2RlZmluZSBERUNMX0ZST01fSU5MSU5FKE5PREUpIChERUNMX0FCU1RSQUNUX09SSUdJTiAoTk9ERSkgIT0gTlVMTF9UUkVFIFwKKwkJCQkmJiBERUNMX0FCU1RSQUNUX09SSUdJTiAoTk9ERSkgIT0gKE5PREUpKQorCisvKiBJbiBhIERFQ0wgdGhpcyBpcyB0aGUgZmllbGQgd2hlcmUgYXR0cmlidXRlcyBhcmUgc3RvcmVkLiAgKi8KKyNkZWZpbmUgREVDTF9BVFRSSUJVVEVTKE5PREUpIChERUNMX0NPTU1PTl9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLmF0dHJpYnV0ZXMpCisKKy8qIEZvciBhIEZVTkNUSU9OX0RFQ0wsIGhvbGRzIHRoZSB0cmVlIG9mIEJJTkRJTkdzLgorICAgRm9yIGEgVFJBTlNMQVRJT05fVU5JVF9ERUNMLCBob2xkcyB0aGUgbmFtZXNwYWNlJ3MgQkxPQ0suCisgICBGb3IgYSBWQVJfREVDTCwgaG9sZHMgdGhlIGluaXRpYWwgdmFsdWUuCisgICBGb3IgYSBQQVJNX0RFQ0wsIHVzZWQgZm9yIERFQ0xfQVJHX1RZUEUtLWRlZmF1bHQKKyAgIHZhbHVlcyBmb3IgcGFyYW1ldGVycyBhcmUgZW5jb2RlZCBpbiB0aGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24sCisgICBub3QgaW4gdGhlIFBBUk1fREVDTCBzbG90LgorICAgRm9yIGEgRklFTERfREVDTCwgdGhpcyBpcyB1c2VkIGZvciBlbnVtZXJhdGlvbiB2YWx1ZXMgYW5kIHRoZSBDCisgICBmcm9udGVuZCB1c2VzIGl0IGZvciB0ZW1wb3JhcmlseSBzdG9yaW5nIGJpdHdpZHRoIG9mIGJpdGZpZWxkcy4KKworICAgPz8/IE5lZWQgdG8gZmlndXJlIG91dCBzb21lIHdheSB0byBjaGVjayB0aGlzIGlzbid0IGEgUEFSTV9ERUNMLiAgKi8KKyNkZWZpbmUgREVDTF9JTklUSUFMKE5PREUpIChERUNMX0NPTU1PTl9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLmluaXRpYWwpCisKKy8qIEhvbGRzIHRoZSBzaXplIG9mIHRoZSBkYXR1bSwgaW4gYml0cywgYXMgYSB0cmVlIGV4cHJlc3Npb24uCisgICBOZWVkIG5vdCBiZSBjb25zdGFudC4gICovCisjZGVmaW5lIERFQ0xfU0laRShOT0RFKSAoREVDTF9DT01NT05fQ0hFQ0sgKE5PREUpLT5kZWNsX2NvbW1vbi5zaXplKQorLyogTGlrZXdpc2UgZm9yIHRoZSBzaXplIGluIGJ5dGVzLiAgKi8KKyNkZWZpbmUgREVDTF9TSVpFX1VOSVQoTk9ERSkgKERFQ0xfQ09NTU9OX0NIRUNLIChOT0RFKS0+ZGVjbF9jb21tb24uc2l6ZV91bml0KQorLyogSG9sZHMgdGhlIGFsaWdubWVudCByZXF1aXJlZCBmb3IgdGhlIGRhdHVtLCBpbiBiaXRzLiAgKi8KKyNkZWZpbmUgREVDTF9BTElHTihOT0RFKSAoREVDTF9DT01NT05fQ0hFQ0sgKE5PREUpLT5kZWNsX2NvbW1vbi5hbGlnbikKKy8qIFRoZSBhbGlnbm1lbnQgb2YgTk9ERSwgaW4gYnl0ZXMuICAqLworI2RlZmluZSBERUNMX0FMSUdOX1VOSVQoTk9ERSkgKERFQ0xfQUxJR04gKE5PREUpIC8gQklUU19QRVJfVU5JVCkKKy8qIFNldCBpZiB0aGUgYWxpZ25tZW50IG9mIHRoaXMgREVDTCBoYXMgYmVlbiBzZXQgYnkgdGhlIHVzZXIsIGZvcgorICAgZXhhbXBsZSB3aXRoIGFuICdhbGlnbmVkJyBhdHRyaWJ1dGUuICAqLworI2RlZmluZSBERUNMX1VTRVJfQUxJR04oTk9ERSkgKERFQ0xfQ09NTU9OX0NIRUNLIChOT0RFKS0+Y29tbW9uLmJhc2UudXNlcl9hbGlnbikKKy8qIEhvbGRzIHRoZSBtYWNoaW5lIG1vZGUgY29ycmVzcG9uZGluZyB0byB0aGUgZGVjbGFyYXRpb24gb2YgYSB2YXJpYWJsZSBvcgorICAgZmllbGQuICBBbHdheXMgZXF1YWwgdG8gVFlQRV9NT0RFIChUUkVFX1RZUEUgKGRlY2wpKSBleGNlcHQgZm9yIGEKKyAgIEZJRUxEX0RFQ0wuICAqLworI2RlZmluZSBERUNMX01PREUoTk9ERSkgKERFQ0xfQ09NTU9OX0NIRUNLIChOT0RFKS0+ZGVjbF9jb21tb24ubW9kZSkKKworLyogRm9yIEZVTkNUSU9OX0RFQ0wsIGlmIGl0IGlzIGJ1aWx0LWluLCB0aGlzIGlkZW50aWZpZXMgd2hpY2ggYnVpbHQtaW4KKyAgIG9wZXJhdGlvbiBpdCBpcy4gIE5vdGUsIGhvd2V2ZXIsIHRoYXQgdGhpcyBmaWVsZCBpcyBvdmVybG9hZGVkLCB3aXRoCisgICBERUNMX0JVSUxUX0lOX0NMQVNTIGFzIHRoZSBkaXNjcmltaW5hbnQsIHNvIHRoZSBsYXR0ZXIgbXVzdCBhbHdheXMgYmUKKyAgIGNoZWNrZWQgYmVmb3JlIGFueSBhY2Nlc3MgdG8gdGhlIGZvcm1lci4gICovCisjZGVmaW5lIERFQ0xfRlVOQ1RJT05fQ09ERShOT0RFKSBcCisgIChGVU5DVElPTl9ERUNMX0NIRUNLIChOT0RFKS0+ZnVuY3Rpb25fZGVjbC5mdW5jdGlvbl9jb2RlKQorI2RlZmluZSBERUNMX0RFQlVHX0VYUFJfSVNfRlJPTShOT0RFKSBcCisgIChERUNMX0NPTU1PTl9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLmRlYnVnX2V4cHJfaXNfZnJvbSkKKworI2RlZmluZSBERUNMX0ZVTkNUSU9OX1BFUlNPTkFMSVRZKE5PREUpIFwKKyAgKEZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKE5PREUpLT5mdW5jdGlvbl9kZWNsLnBlcnNvbmFsaXR5KQorCisvKiBOb256ZXJvIGZvciBhIGdpdmVuIC4uLl9ERUNMIG5vZGUgbWVhbnMgdGhhdCB0aGUgbmFtZSBvZiB0aGlzIG5vZGUgc2hvdWxkCisgICBiZSBpZ25vcmVkIGZvciBzeW1ib2xpYyBkZWJ1ZyBwdXJwb3Nlcy4gIEZvciBhIFRZUEVfREVDTCwgdGhpcyBtZWFucyB0aGF0CisgICB0aGUgYXNzb2NpYXRlZCB0eXBlIHNob3VsZCBiZSBpZ25vcmVkLiAgRm9yIGEgRlVOQ1RJT05fREVDTCwgdGhlIGJvZHkgb2YKKyAgIHRoZSBmdW5jdGlvbiBzaG91bGQgYWxzbyBiZSBpZ25vcmVkLiAgKi8KKyNkZWZpbmUgREVDTF9JR05PUkVEX1AoTk9ERSkgXAorICAoREVDTF9DT01NT05fQ0hFQ0sgKE5PREUpLT5kZWNsX2NvbW1vbi5pZ25vcmVkX2ZsYWcpCisKKy8qIE5vbnplcm8gZm9yIGEgZ2l2ZW4gLi4uX0RFQ0wgbm9kZSBtZWFucyB0aGF0IHRoaXMgbm9kZSByZXByZXNlbnRzIGFuCisgICAiYWJzdHJhY3QgaW5zdGFuY2UiIG9mIHRoZSBnaXZlbiBkZWNsYXJhdGlvbiAoZS5nLiBpbiB0aGUgb3JpZ2luYWwKKyAgIGRlY2xhcmF0aW9uIG9mIGFuIGlubGluZSBmdW5jdGlvbikuICBXaGVuIGdlbmVyYXRpbmcgc3ltYm9saWMgZGVidWdnaW5nCisgICBpbmZvcm1hdGlvbiwgd2UgbXVzdG4ndCB0cnkgdG8gZ2VuZXJhdGUgYW55IGFkZHJlc3MgaW5mb3JtYXRpb24gZm9yIG5vZGVzCisgICBtYXJrZWQgYXMgImFic3RyYWN0IGluc3RhbmNlcyIgYmVjYXVzZSB3ZSBkb24ndCBhY3R1YWxseSBnZW5lcmF0ZQorICAgYW55IGNvZGUgb3IgYWxsb2NhdGUgYW55IGRhdGEgc3BhY2UgZm9yIHN1Y2ggaW5zdGFuY2VzLiAgKi8KKyNkZWZpbmUgREVDTF9BQlNUUkFDVChOT0RFKSAoREVDTF9DT01NT05fQ0hFQ0sgKE5PREUpLT5kZWNsX2NvbW1vbi5hYnN0cmFjdF9mbGFnKQorCisvKiBMYW5ndWFnZS1zcGVjaWZpYyBkZWNsIGluZm9ybWF0aW9uLiAgKi8KKyNkZWZpbmUgREVDTF9MQU5HX1NQRUNJRklDKE5PREUpIChERUNMX0NPTU1PTl9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLmxhbmdfc3BlY2lmaWMpCisKKy8qIEluIGEgVkFSX0RFQ0wgb3IgRlVOQ1RJT05fREVDTCwgbm9uemVybyBtZWFucyBleHRlcm5hbCByZWZlcmVuY2U6CisgICBkbyBub3QgYWxsb2NhdGUgc3RvcmFnZSwgYW5kIHJlZmVyIHRvIGEgZGVmaW5pdGlvbiBlbHNld2hlcmUuICBOb3RlIHRoYXQKKyAgIHRoaXMgZG9lcyBub3QgbmVjZXNzYXJpbHkgaW1wbHkgdGhlIGVudGl0eSByZXByZXNlbnRlZCBieSBOT0RFCisgICBoYXMgbm8gcHJvZ3JhbSBzb3VyY2UtbGV2ZWwgZGVmaW5pdGlvbiBpbiB0aGlzIHRyYW5zbGF0aW9uIHVuaXQuICBGb3IKKyAgIGV4YW1wbGUsIGZvciBhIEZVTkNUSU9OX0RFQ0wsIERFQ0xfU0FWRURfVFJFRSBtYXkgYmUgbm9uLU5VTEwgYW5kCisgICBERUNMX0VYVEVSTkFMIG1heSBiZSB0cnVlIHNpbXVsdGFuZW91c2x5OyB0aGF0IGNhbiBiZSB0aGUgY2FzZSBmb3IKKyAgIGEgQzk5ICJleHRlcm4gaW5saW5lIiBmdW5jdGlvbi4gICovCisjZGVmaW5lIERFQ0xfRVhURVJOQUwoTk9ERSkgKERFQ0xfQ09NTU9OX0NIRUNLIChOT0RFKS0+ZGVjbF9jb21tb24uZGVjbF9mbGFnXzEpCisKKy8qIE5vbnplcm8gaW4gYSAuLi5fREVDTCBtZWFucyB0aGlzIHZhcmlhYmxlIGlzIHJlZidkIGZyb20gYSBuZXN0ZWQgZnVuY3Rpb24uCisgICBGb3IgVkFSX0RFQ0wgbm9kZXMsIFBBUk1fREVDTCBub2RlcywgYW5kIEZVTkNUSU9OX0RFQ0wgbm9kZXMuCisKKyAgIEZvciBMQUJFTF9ERUNMIG5vZGVzLCBub256ZXJvIGlmIG5vbmxvY2FsIGdvdG9zIHRvIHRoZSBsYWJlbCBhcmUgcGVybWl0dGVkLgorCisgICBBbHNvIHNldCBpbiBzb21lIGxhbmd1YWdlcyBmb3IgdmFyaWFibGVzLCBldGMuLCBvdXRzaWRlIHRoZSBub3JtYWwKKyAgIGxleGljYWwgc2NvcGUsIHN1Y2ggYXMgY2xhc3MgaW5zdGFuY2UgdmFyaWFibGVzLiAgKi8KKyNkZWZpbmUgREVDTF9OT05MT0NBTChOT0RFKSAoREVDTF9DT01NT05fQ0hFQ0sgKE5PREUpLT5kZWNsX2NvbW1vbi5ub25sb2NhbF9mbGFnKQorCisvKiBVc2VkIGluIFZBUl9ERUNMcyB0byBpbmRpY2F0ZSB0aGF0IHRoZSB2YXJpYWJsZSBpcyBhIHZ0YWJsZS4KKyAgIFVzZWQgaW4gRklFTERfREVDTHMgZm9yIHZ0YWJsZSBwb2ludGVycy4KKyAgIFVzZWQgaW4gRlVOQ1RJT05fREVDTHMgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZnVuY3Rpb24gaXMgdmlydHVhbC4gICovCisjZGVmaW5lIERFQ0xfVklSVFVBTF9QKE5PREUpIChERUNMX0NPTU1PTl9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLnZpcnR1YWxfZmxhZykKKworLyogVXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgREVDTCByZXByZXNlbnRzIGEgY29tcGlsZXItZ2VuZXJhdGVkIGVudGl0eS4gICovCisjZGVmaW5lIERFQ0xfQVJUSUZJQ0lBTChOT0RFKSAoREVDTF9DT01NT05fQ0hFQ0sgKE5PREUpLT5kZWNsX2NvbW1vbi5hcnRpZmljaWFsX2ZsYWcpCisKKy8qIEFkZGl0aW9uYWwgZmxhZ3MgZm9yIGxhbmd1YWdlLXNwZWNpZmljIHVzZXMuICAqLworI2RlZmluZSBERUNMX0xBTkdfRkxBR18wKE5PREUpIChERUNMX0NPTU1PTl9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLmxhbmdfZmxhZ18wKQorI2RlZmluZSBERUNMX0xBTkdfRkxBR18xKE5PREUpIChERUNMX0NPTU1PTl9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLmxhbmdfZmxhZ18xKQorI2RlZmluZSBERUNMX0xBTkdfRkxBR18yKE5PREUpIChERUNMX0NPTU1PTl9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLmxhbmdfZmxhZ18yKQorI2RlZmluZSBERUNMX0xBTkdfRkxBR18zKE5PREUpIChERUNMX0NPTU1PTl9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLmxhbmdfZmxhZ18zKQorI2RlZmluZSBERUNMX0xBTkdfRkxBR180KE5PREUpIChERUNMX0NPTU1PTl9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLmxhbmdfZmxhZ180KQorI2RlZmluZSBERUNMX0xBTkdfRkxBR181KE5PREUpIChERUNMX0NPTU1PTl9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLmxhbmdfZmxhZ181KQorI2RlZmluZSBERUNMX0xBTkdfRkxBR182KE5PREUpIChERUNMX0NPTU1PTl9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLmxhbmdfZmxhZ182KQorI2RlZmluZSBERUNMX0xBTkdfRkxBR183KE5PREUpIChERUNMX0NPTU1PTl9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLmxhbmdfZmxhZ183KQorI2RlZmluZSBERUNMX0xBTkdfRkxBR184KE5PREUpIChERUNMX0NPTU1PTl9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLmxhbmdfZmxhZ184KQorCisvKiBOb256ZXJvIGZvciBhIGRlY2wgd2hpY2ggaXMgYXQgZmlsZSBzY29wZS4gICovCisjZGVmaW5lIERFQ0xfRklMRV9TQ09QRV9QKEVYUCkgCQkJCQlcCisgICghIERFQ0xfQ09OVEVYVCAoRVhQKQkJCQkJCVwKKyAgIHx8IFRSRUVfQ09ERSAoREVDTF9DT05URVhUIChFWFApKSA9PSBUUkFOU0xBVElPTl9VTklUX0RFQ0wpCisKKy8qIE5vbnplcm8gZm9yIGEgZGVjbCB0aGF0IGlzIGRlY29yYXRlZCB1c2luZyBhdHRyaWJ1dGUgdXNlZC4KKyAgIFRoaXMgaW5kaWNhdGVzIHRvIGNvbXBpbGVyIHRvb2xzIHRoYXQgdGhpcyBkZWNsIG5lZWRzIHRvIGJlIHByZXNlcnZlZC4gICovCisjZGVmaW5lIERFQ0xfUFJFU0VSVkVfUChERUNMKSBcCisgIERFQ0xfQ09NTU9OX0NIRUNLIChERUNMKS0+ZGVjbF9jb21tb24ucHJlc2VydmVfZmxhZworCisvKiBGb3IgZnVuY3Rpb24gbG9jYWwgdmFyaWFibGVzIG9mIENPTVBMRVggYW5kIFZFQ1RPUiB0eXBlcywKKyAgIGluZGljYXRlcyB0aGF0IHRoZSB2YXJpYWJsZSBpcyBub3QgYWxpYXNlZCwgYW5kIHRoYXQgYWxsCisgICBtb2RpZmljYXRpb25zIHRvIHRoZSB2YXJpYWJsZSBoYXZlIGJlZW4gYWRqdXN0ZWQgc28gdGhhdAorICAgdGhleSBhcmUga2lsbGluZyBhc3NpZ25tZW50cy4gIFRodXMgdGhlIHZhcmlhYmxlIG1heSBub3cKKyAgIGJlIHRyZWF0ZWQgYXMgYSBHSU1QTEUgcmVnaXN0ZXIsIGFuZCB1c2UgcmVhbCBpbnN0ZWFkIG9mCisgICB2aXJ0dWFsIG9wcyBpbiBTU0EgZm9ybS4gICovCisjZGVmaW5lIERFQ0xfR0lNUExFX1JFR19QKERFQ0wpIFwKKyAgREVDTF9DT01NT05fQ0hFQ0sgKERFQ0wpLT5kZWNsX2NvbW1vbi5naW1wbGVfcmVnX2ZsYWcKKworc3RydWN0IEdUWSgoKSkgdHJlZV9kZWNsX2NvbW1vbiB7CisgIHN0cnVjdCB0cmVlX2RlY2xfbWluaW1hbCBjb21tb247CisgIHRyZWUgc2l6ZTsKKworICBFTlVNX0JJVEZJRUxEKG1hY2hpbmVfbW9kZSkgbW9kZSA6IDg7CisKKyAgdW5zaWduZWQgbm9ubG9jYWxfZmxhZyA6IDE7CisgIHVuc2lnbmVkIHZpcnR1YWxfZmxhZyA6IDE7CisgIHVuc2lnbmVkIGlnbm9yZWRfZmxhZyA6IDE7CisgIHVuc2lnbmVkIGFic3RyYWN0X2ZsYWcgOiAxOworICB1bnNpZ25lZCBhcnRpZmljaWFsX2ZsYWcgOiAxOworICB1bnNpZ25lZCBwcmVzZXJ2ZV9mbGFnOiAxOworICB1bnNpZ25lZCBkZWJ1Z19leHByX2lzX2Zyb20gOiAxOworCisgIHVuc2lnbmVkIGxhbmdfZmxhZ18wIDogMTsKKyAgdW5zaWduZWQgbGFuZ19mbGFnXzEgOiAxOworICB1bnNpZ25lZCBsYW5nX2ZsYWdfMiA6IDE7CisgIHVuc2lnbmVkIGxhbmdfZmxhZ18zIDogMTsKKyAgdW5zaWduZWQgbGFuZ19mbGFnXzQgOiAxOworICB1bnNpZ25lZCBsYW5nX2ZsYWdfNSA6IDE7CisgIHVuc2lnbmVkIGxhbmdfZmxhZ182IDogMTsKKyAgdW5zaWduZWQgbGFuZ19mbGFnXzcgOiAxOworICB1bnNpZ25lZCBsYW5nX2ZsYWdfOCA6IDE7CisKKyAgLyogSW4gTEFCRUxfREVDTCwgdGhpcyBpcyBERUNMX0VSUk9SX0lTU1VFRC4KKyAgICAgSW4gVkFSX0RFQ0wgYW5kIFBBUk1fREVDTCwgdGhpcyBpcyBERUNMX1JFR0lTVEVSLiAgKi8KKyAgdW5zaWduZWQgZGVjbF9mbGFnXzAgOiAxOworICAvKiBJbiBGSUVMRF9ERUNMLCB0aGlzIGlzIERFQ0xfQklUX0ZJRUxECisgICAgIEluIFZBUl9ERUNMIGFuZCBGVU5DVElPTl9ERUNMLCB0aGlzIGlzIERFQ0xfRVhURVJOQUwuCisgICAgIEluIFRZUEVfREVDTCwgdGhpcyBpcyBUWVBFX0RFQ0xfU1VQUFJFU1NfREVCVUcuICAqLworICB1bnNpZ25lZCBkZWNsX2ZsYWdfMSA6IDE7CisgIC8qIEluIEZJRUxEX0RFQ0wsIHRoaXMgaXMgREVDTF9OT05BRERSRVNTQUJMRV9QCisgICAgIEluIFZBUl9ERUNMIGFuZCBQQVJNX0RFQ0wsIHRoaXMgaXMgREVDTF9IQVNfVkFMVUVfRVhQUl9QLiAgKi8KKyAgdW5zaWduZWQgZGVjbF9mbGFnXzIgOiAxOworICAvKiBMb2dpY2FsbHksIHRoZXNlIHR3byB3b3VsZCBnbyBpbiBhIHRoZW9yZXRpY2FsIGJhc2Ugc2hhcmVkIGJ5IHZhciBhbmQKKyAgICAgcGFybSBkZWNsLiAqLworICB1bnNpZ25lZCBnaW1wbGVfcmVnX2ZsYWcgOiAxOworICAvKiBJbiBWQVJfREVDTCwgUEFSTV9ERUNMIGFuZCBSRVNVTFRfREVDTCwgdGhpcyBpcyBERUNMX0JZX1JFRkVSRU5DRS4gICovCisgIHVuc2lnbmVkIGRlY2xfYnlfcmVmZXJlbmNlX2ZsYWcgOiAxOworICAvKiBJbiBWQVJfREVDTCwgUEFSTV9ERUNMIGFuZCBSRVNVTFRfREVDTCwgdGhpcyBpcyBERUNMX1JFU1RSSUNURURfUC4gICovCisgIHVuc2lnbmVkIGRlY2xfcmVzdHJpY3RlZF9mbGFnIDogMTsKKworICAvKiBQYWRkaW5nIHNvIHRoYXQgJ29mZl9hbGlnbicgY2FuIGJlIG9uIGEgMzItYml0IGJvdW5kYXJ5LiAgKi8KKyAgdW5zaWduZWQgZGVjbF9jb21tb25fdW51c2VkIDogMjsKKworICAvKiBERUNMX09GRlNFVF9BTElHTiwgdXNlZCBvbmx5IGZvciBGSUVMRF9ERUNMcy4gICovCisgIHVuc2lnbmVkIGludCBvZmZfYWxpZ24gOiA4OworCisgIC8qIDI0LWJpdHMgdW51c2VkLiAgKi8KKworICAvKiBERUNMX0FMSUdOLiAgSXQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgc2l6ZSBhcyBUWVBFX0FMSUdOLiAgKi8KKyAgdW5zaWduZWQgaW50IGFsaWduOworCisgIHRyZWUgc2l6ZV91bml0OworICB0cmVlIGluaXRpYWw7CisgIHRyZWUgYXR0cmlidXRlczsKKyAgdHJlZSBhYnN0cmFjdF9vcmlnaW47CisKKyAgLyogUG9pbnRzIHRvIGEgc3RydWN0dXJlIHdob3NlIGRldGFpbHMgZGVwZW5kIG9uIHRoZSBsYW5ndWFnZSBpbiB1c2UuICAqLworICBzdHJ1Y3QgbGFuZ19kZWNsICpsYW5nX3NwZWNpZmljOworfTsKKworZXh0ZXJuIHRyZWUgZGVjbF92YWx1ZV9leHByX2xvb2t1cCAodHJlZSk7CitleHRlcm4gdm9pZCBkZWNsX3ZhbHVlX2V4cHJfaW5zZXJ0ICh0cmVlLCB0cmVlKTsKKworLyogSW4gYSBWQVJfREVDTCBvciBQQVJNX0RFQ0wsIHRoZSBsb2NhdGlvbiBhdCB3aGljaCB0aGUgdmFsdWUgbWF5IGJlIGZvdW5kLAorICAgaWYgdHJhbnNmb3JtYXRpb25zIGhhdmUgbWFkZSB0aGlzIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiBldmFsdWF0aW5nIHRoZQorICAgZGVjbCBpdHNlbGYuICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGRlYnVnZ2luZzsgb25jZSB0aGlzIGZpZWxkIGhhcworICAgYmVlbiBzZXQsIHRoZSBkZWNsIGl0c2VsZiBtYXkgbm90IGxlZ2l0aW1hdGVseSBhcHBlYXIgaW4gdGhlIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgREVDTF9IQVNfVkFMVUVfRVhQUl9QKE5PREUpIFwKKyAgKFRSRUVfQ0hFQ0syIChOT0RFLCBWQVJfREVDTCwgUEFSTV9ERUNMKS0+ZGVjbF9jb21tb24uZGVjbF9mbGFnXzIpCisjZGVmaW5lIERFQ0xfVkFMVUVfRVhQUihOT0RFKSBcCisgIChkZWNsX3ZhbHVlX2V4cHJfbG9va3VwIChERUNMX1dSVExfQ0hFQ0sgKE5PREUpKSkKKyNkZWZpbmUgU0VUX0RFQ0xfVkFMVUVfRVhQUihOT0RFLCBWQUwpCQkJXAorICAoZGVjbF92YWx1ZV9leHByX2luc2VydCAoREVDTF9XUlRMX0NIRUNLIChOT0RFKSwgVkFMKSkKKworLyogSG9sZHMgdGhlIFJUTCBleHByZXNzaW9uIGZvciB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZSBvciBmdW5jdGlvbi4KKyAgIFRoaXMgdmFsdWUgY2FuIGJlIGV2YWx1YXRlZCBsYXppbHkgZm9yIGZ1bmN0aW9ucywgdmFyaWFibGVzIHdpdGgKKyAgIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uLCBhbmQgbGFiZWxzLiAgKi8KKyNkZWZpbmUgREVDTF9SVEwoTk9ERSkJCQkJCVwKKyAgKERFQ0xfV1JUTF9DSEVDSyAoTk9ERSktPmRlY2xfd2l0aF9ydGwucnRsCQlcCisgICA/IChOT0RFKS0+ZGVjbF93aXRoX3J0bC5ydGwJCQkJCVwKKyAgIDogKG1ha2VfZGVjbF9ydGwgKE5PREUpLCAoTk9ERSktPmRlY2xfd2l0aF9ydGwucnRsKSkKKworLyogU2V0IHRoZSBERUNMX1JUTCBmb3IgTk9ERSB0byBSVEwuICAqLworI2RlZmluZSBTRVRfREVDTF9SVEwoTk9ERSwgUlRMKSBzZXRfZGVjbF9ydGwgKE5PREUsIFJUTCkKKworLyogUmV0dXJucyBub256ZXJvIGlmIE5PREUgaXMgYSB0cmVlIG5vZGUgdGhhdCBjYW4gY29udGFpbiBSVEwuICAqLworI2RlZmluZSBIQVNfUlRMX1AoTk9ERSkgKENPREVfQ09OVEFJTlNfU1RSVUNUIChUUkVFX0NPREUgKE5PREUpLCBUU19ERUNMX1dSVEwpKQorCisvKiBSZXR1cm5zIG5vbnplcm8gaWYgdGhlIERFQ0xfUlRMIGZvciBOT0RFIGhhcyBhbHJlYWR5IGJlZW4gc2V0LiAgKi8KKyNkZWZpbmUgREVDTF9SVExfU0VUX1AoTk9ERSkgIChIQVNfUlRMX1AgKE5PREUpICYmIERFQ0xfV1JUTF9DSEVDSyAoTk9ERSktPmRlY2xfd2l0aF9ydGwucnRsICE9IE5VTEwpCisKKy8qIENvcHkgdGhlIFJUTCBmcm9tIE5PREUxIHRvIE5PREUyLiAgSWYgdGhlIFJUTCB3YXMgbm90IHNldCBmb3IKKyAgIE5PREUxLCBpdCB3aWxsIG5vdCBiZSBzZXQgZm9yIE5PREUyOyB0aGlzIGlzIGEgbGF6eSBjb3B5LiAgKi8KKyNkZWZpbmUgQ09QWV9ERUNMX1JUTChOT0RFMSwgTk9ERTIpIFwKKyAgKERFQ0xfV1JUTF9DSEVDSyAoTk9ERTIpLT5kZWNsX3dpdGhfcnRsLnJ0bCA9IERFQ0xfV1JUTF9DSEVDSyAoTk9ERTEpLT5kZWNsX3dpdGhfcnRsLnJ0bCkKKworLyogVGhlIERFQ0xfUlRMIGZvciBOT0RFLCBpZiBpdCBpcyBzZXQsIG9yIE5VTEwsIGlmIGl0IGlzIG5vdCBzZXQuICAqLworI2RlZmluZSBERUNMX1JUTF9JRl9TRVQoTk9ERSkgKERFQ0xfUlRMX1NFVF9QIChOT0RFKSA/IERFQ0xfUlRMIChOT0RFKSA6IE5VTEwpCisKKy8qIEluIFZBUl9ERUNMIGFuZCBQQVJNX0RFQ0wgbm9kZXMsIG5vbnplcm8gbWVhbnMgZGVjbGFyZWQgYHJlZ2lzdGVyJy4gICovCisjZGVmaW5lIERFQ0xfUkVHSVNURVIoTk9ERSkgKERFQ0xfV1JUTF9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLmRlY2xfZmxhZ18wKQorCitzdHJ1Y3QgR1RZKCgpKSB0cmVlX2RlY2xfd2l0aF9ydGwgeworICBzdHJ1Y3QgdHJlZV9kZWNsX2NvbW1vbiBjb21tb247CisgIHJ0eCBydGw7Cit9OworCisvKiBJbiBhIEZJRUxEX0RFQ0wsIHRoaXMgaXMgdGhlIGZpZWxkIHBvc2l0aW9uLCBjb3VudGluZyBpbiBieXRlcywgb2YgdGhlCisgICBERUNMX09GRlNFVF9BTElHTi1iaXQtc2l6ZWQgd29yZCBjb250YWluaW5nIHRoZSBiaXQgY2xvc2VzdCB0byB0aGUgYmVnaW5uaW5nCisgICBvZiB0aGUgc3RydWN0dXJlLiAgKi8KKyNkZWZpbmUgREVDTF9GSUVMRF9PRkZTRVQoTk9ERSkgKEZJRUxEX0RFQ0xfQ0hFQ0sgKE5PREUpLT5maWVsZF9kZWNsLm9mZnNldCkKKworLyogSW4gYSBGSUVMRF9ERUNMLCB0aGlzIGlzIHRoZSBvZmZzZXQsIGluIGJpdHMsIG9mIHRoZSBmaXJzdCBiaXQgb2YgdGhlCisgICBmaWVsZCBmcm9tIERFQ0xfRklFTERfT0ZGU0VULiAgVGhpcyBmaWVsZCBtYXkgYmUgbm9uemVybyBldmVuIGZvciBmaWVsZHMKKyAgIHRoYXQgYXJlIG5vdCBiaXQgZmllbGRzIChzaW5jZSBERUNMX09GRlNFVF9BTElHTiBtYXkgYmUgbGFyZ2VyIHRoYW4gdGhlCisgICBuYXR1cmFsIGFsaWdubWVudCBvZiB0aGUgZmllbGQncyB0eXBlKS4gICovCisjZGVmaW5lIERFQ0xfRklFTERfQklUX09GRlNFVChOT0RFKSAoRklFTERfREVDTF9DSEVDSyAoTk9ERSktPmZpZWxkX2RlY2wuYml0X29mZnNldCkKKworLyogSW4gYSBGSUVMRF9ERUNMLCB0aGlzIGluZGljYXRlcyB3aGV0aGVyIHRoZSBmaWVsZCB3YXMgYSBiaXQtZmllbGQgYW5kCisgICBpZiBzbywgdGhlIHR5cGUgdGhhdCB3YXMgb3JpZ2luYWxseSBzcGVjaWZpZWQgZm9yIGl0LgorICAgVFJFRV9UWVBFIG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgKGluIGZpbmlzaF9zdHJ1Y3QpLiAgKi8KKyNkZWZpbmUgREVDTF9CSVRfRklFTERfVFlQRShOT0RFKSAoRklFTERfREVDTF9DSEVDSyAoTk9ERSktPmZpZWxkX2RlY2wuYml0X2ZpZWxkX3R5cGUpCisKKy8qIEZvciBhIEZJRUxEX0RFQ0wgaW4gYSBRVUFMX1VOSU9OX1RZUEUsIHJlY29yZHMgdGhlIGV4cHJlc3Npb24sIHdoaWNoCisgICBpZiBub256ZXJvLCBpbmRpY2F0ZXMgdGhhdCB0aGUgZmllbGQgb2NjdXBpZXMgdGhlIHR5cGUuICAqLworI2RlZmluZSBERUNMX1FVQUxJRklFUihOT0RFKSAoRklFTERfREVDTF9DSEVDSyAoTk9ERSktPmZpZWxkX2RlY2wucXVhbGlmaWVyKQorCisvKiBGb3IgRklFTERfREVDTHMsIG9mZl9hbGlnbiBob2xkcyB0aGUgbnVtYmVyIG9mIGxvdy1vcmRlciBiaXRzIG9mCisgICBERUNMX0ZJRUxEX09GRlNFVCB3aGljaCBhcmUga25vd24gdG8gYmUgYWx3YXlzIHplcm8uCisgICBERUNMX09GRlNFVF9BTElHTiB0aHVzIHJldHVybnMgdGhlIGFsaWdubWVudCB0aGF0IERFQ0xfRklFTERfT0ZGU0VUCisgICBoYXMuICAqLworI2RlZmluZSBERUNMX09GRlNFVF9BTElHTihOT0RFKSBcCisgICgoKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpMSkgPDwgRklFTERfREVDTF9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLm9mZl9hbGlnbikKKworLyogU3BlY2lmeSB0aGF0IERFQ0xfQUxJR04oTk9ERSkgaXMgYSBtdWx0aXBsZSBvZiBYLiAgKi8KKyNkZWZpbmUgU0VUX0RFQ0xfT0ZGU0VUX0FMSUdOKE5PREUsIFgpIFwKKyAgKEZJRUxEX0RFQ0xfQ0hFQ0sgKE5PREUpLT5kZWNsX2NvbW1vbi5vZmZfYWxpZ24gPSBleGFjdF9sb2cyICgoWCkgJiAtKFgpKSkKKy8qIDEgaWYgdGhlIGFsaWdubWVudCBmb3IgdGhpcyB0eXBlIHdhcyByZXF1ZXN0ZWQgYnkgImFsaWduZWQiIGF0dHJpYnV0ZSwKKyAgIDAgaWYgaXQgaXMgdGhlIGRlZmF1bHQgZm9yIHRoaXMgdHlwZS4gICovCisKKy8qIEZvciBGSUVMRF9ERUNMUywgREVDTF9GQ09OVEVYVCBpcyB0aGUgKmZpcnN0KiBiYXNlY2xhc3MgaW4KKyAgIHdoaWNoIHRoaXMgRklFTERfREVDTCBpcyBkZWZpbmVkLiAgVGhpcyBpbmZvcm1hdGlvbiBpcyBuZWVkZWQgd2hlbgorICAgd3JpdGluZyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYWJvdXQgdmZpZWxkIGFuZCB2YmFzZSBkZWNscyBmb3IgQysrLiAgKi8KKyNkZWZpbmUgREVDTF9GQ09OVEVYVChOT0RFKSAoRklFTERfREVDTF9DSEVDSyAoTk9ERSktPmZpZWxkX2RlY2wuZmNvbnRleHQpCisKKy8qIEluIGEgRklFTERfREVDTCwgaW5kaWNhdGVzIHRoaXMgZmllbGQgc2hvdWxkIGJlIGJpdC1wYWNrZWQuICAqLworI2RlZmluZSBERUNMX1BBQ0tFRChOT0RFKSAoRklFTERfREVDTF9DSEVDSyAoTk9ERSktPmNvbW1vbi5iYXNlLnBhY2tlZF9mbGFnKQorCisvKiBOb256ZXJvIGluIGEgRklFTERfREVDTCBtZWFucyBpdCBpcyBhIGJpdCBmaWVsZCwgYW5kIG11c3QgYmUgYWNjZXNzZWQKKyAgIHNwZWNpYWxseS4gICovCisjZGVmaW5lIERFQ0xfQklUX0ZJRUxEKE5PREUpIChGSUVMRF9ERUNMX0NIRUNLIChOT0RFKS0+ZGVjbF9jb21tb24uZGVjbF9mbGFnXzEpCisKKy8qIFVzZWQgaW4gYSBGSUVMRF9ERUNMIHRvIGluZGljYXRlIHRoYXQgd2UgY2Fubm90IGZvcm0gdGhlIGFkZHJlc3Mgb2YKKyAgIHRoaXMgY29tcG9uZW50LiAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgVHlwZS1CYXNlZCBBbGlhcyBBbmFseXNpcworICAgdG8gZGlzYW1iaWd1YXRlIGFjY2Vzc2VzIHRvIHRoaXMgZmllbGQgd2l0aCBpbmRpcmVjdCBhY2Nlc3NlcyB1c2luZworICAgdGhlIGZpZWxkJ3MgdHlwZToKKworICAgICBzdHJ1Y3QgUyB7IGludCBpOyB9IHM7CisgICAgIGludCAqcDsKKworICAgSWYgdGhlIGZsYWcgaXMgc2V0IG9uICdpJywgVEJBQSBjb21wdXRlcyB0aGF0IHMuaSBhbmQgKnAgbmV2ZXIgY29uZmxpY3QuCisKKyAgIEZyb20gdGhlIGltcGxlbWVudGF0aW9uJ3Mgdmlld3BvaW50LCB0aGUgYWxpYXMgc2V0IG9mIHRoZSB0eXBlIG9mIHRoZQorICAgZmllbGQgJ2knIChpbnQpIHdpbGwgbm90IGJlIHJlY29yZGVkIGFzIGEgc3Vic2V0IG9mIHRoYXQgb2YgdGhlIHR5cGUgb2YKKyAgICdzJyAoc3RydWN0IFMpIGluIHJlY29yZF9jb21wb25lbnRfYWxpYXNlcy4gIFRoZSBjb3VudGVycGFydCBpcyB0aGF0CisgICBhY2Nlc3NlcyB0byBzLmkgbXVzdCBub3QgYmUgZ2l2ZW4gdGhlIGFsaWFzIHNldCBvZiB0aGUgdHlwZSBvZiAnaScKKyAgIChpbnQpIGJ1dCBpbnN0ZWFkIGRpcmVjdGx5IHRoYXQgb2YgdGhlIHR5cGUgb2YgJ3MnIChzdHJ1Y3QgUykuICAqLworI2RlZmluZSBERUNMX05PTkFERFJFU1NBQkxFX1AoTk9ERSkgXAorICAoRklFTERfREVDTF9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLmRlY2xfZmxhZ18yKQorCitzdHJ1Y3QgR1RZKCgpKSB0cmVlX2ZpZWxkX2RlY2wgeworICBzdHJ1Y3QgdHJlZV9kZWNsX2NvbW1vbiBjb21tb247CisKKyAgdHJlZSBvZmZzZXQ7CisgIHRyZWUgYml0X2ZpZWxkX3R5cGU7CisgIHRyZWUgcXVhbGlmaWVyOworICB0cmVlIGJpdF9vZmZzZXQ7CisgIHRyZWUgZmNvbnRleHQ7Cit9OworCisvKiBBIG51bWVyaWMgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGEgTEFCRUxfREVDTC4gIFRoZSBVSUQgYWxsb2NhdGlvbiBpcworICAgZGVuc2UsIHVuaXF1ZSB3aXRoaW4gYW55IG9uZSBmdW5jdGlvbiwgYW5kIG1heSBiZSB1c2VkIHRvIGluZGV4IGFycmF5cy4KKyAgIElmIHRoZSB2YWx1ZSBpcyAtMSwgdGhlbiBubyBVSUQgaGFzIGJlZW4gYXNzaWduZWQuICAqLworI2RlZmluZSBMQUJFTF9ERUNMX1VJRChOT0RFKSBcCisgIChMQUJFTF9ERUNMX0NIRUNLIChOT0RFKS0+bGFiZWxfZGVjbC5sYWJlbF9kZWNsX3VpZCkKKworLyogSW4gYSBMQUJFTF9ERUNMLCB0aGUgRUggcmVnaW9uIG51bWJlciBmb3Igd2hpY2ggdGhlIGxhYmVsIGlzIHRoZQorICAgcG9zdF9sYW5kaW5nX3BhZC4gICovCisjZGVmaW5lIEVIX0xBTkRJTkdfUEFEX05SKE5PREUpIFwKKyAgKExBQkVMX0RFQ0xfQ0hFQ0sgKE5PREUpLT5sYWJlbF9kZWNsLmVoX2xhbmRpbmdfcGFkX25yKQorCisvKiBJbiBMQUJFTF9ERUNMIG5vZGVzLCBub256ZXJvIG1lYW5zIHRoYXQgYW4gZXJyb3IgbWVzc2FnZSBhYm91dAorICAganVtcGluZyBpbnRvIHN1Y2ggYSBiaW5kaW5nIGNvbnRvdXIgaGFzIGJlZW4gcHJpbnRlZCBmb3IgdGhpcyBsYWJlbC4gICovCisjZGVmaW5lIERFQ0xfRVJST1JfSVNTVUVEKE5PREUpIFwKKyAgKExBQkVMX0RFQ0xfQ0hFQ0sgKE5PREUpLT5kZWNsX2NvbW1vbi5kZWNsX2ZsYWdfMCkKKworc3RydWN0IEdUWSgoKSkgdHJlZV9sYWJlbF9kZWNsIHsKKyAgc3RydWN0IHRyZWVfZGVjbF93aXRoX3J0bCBjb21tb247CisgIGludCBsYWJlbF9kZWNsX3VpZDsKKyAgaW50IGVoX2xhbmRpbmdfcGFkX25yOworfTsKKworc3RydWN0IHZhcl9hbm5fZDsKK3N0cnVjdCBHVFkoKCkpIHRyZWVfcmVzdWx0X2RlY2wgeworICBzdHJ1Y3QgdHJlZV9kZWNsX3dpdGhfcnRsIGNvbW1vbjsKKyAgc3RydWN0IHZhcl9hbm5fZCAqYW5uOworfTsKKworc3RydWN0IEdUWSgoKSkgdHJlZV9jb25zdF9kZWNsIHsKKyAgc3RydWN0IHRyZWVfZGVjbF93aXRoX3J0bCBjb21tb247Cit9OworCisvKiBGb3IgYSBQQVJNX0RFQ0wsIHJlY29yZHMgdGhlIGRhdGEgdHlwZSB1c2VkIHRvIHBhc3MgdGhlIGFyZ3VtZW50LAorICAgd2hpY2ggbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSB0eXBlIHNlZW4gaW4gdGhlIHByb2dyYW0uICAqLworI2RlZmluZSBERUNMX0FSR19UWVBFKE5PREUpIChQQVJNX0RFQ0xfQ0hFQ0sgKE5PREUpLT5kZWNsX2NvbW1vbi5pbml0aWFsKQorCisvKiBGb3IgUEFSTV9ERUNMLCBob2xkcyBhbiBSVEwgZm9yIHRoZSBzdGFjayBzbG90IG9yIHJlZ2lzdGVyCisgICB3aGVyZSB0aGUgZGF0YSB3YXMgYWN0dWFsbHkgcGFzc2VkLiAgKi8KKyNkZWZpbmUgREVDTF9JTkNPTUlOR19SVEwoTk9ERSkgKFBBUk1fREVDTF9DSEVDSyAoTk9ERSktPnBhcm1fZGVjbC5pbmNvbWluZ19ydGwpCisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfcGFybV9kZWNsIHsKKyAgc3RydWN0IHRyZWVfZGVjbF93aXRoX3J0bCBjb21tb247CisgIHJ0eCBpbmNvbWluZ19ydGw7CisgIHN0cnVjdCB2YXJfYW5uX2QgKmFubjsKK307CisKKworLyogTm9uemVybyBpbiBhIGRlY2wgbWVhbnMgdGhhdCB0aGUgZ2ltcGxpZmllciBoYXMgc2VlbiAob3IgcGxhY2VkKQorICAgdGhpcyB2YXJpYWJsZSBpbiBhIEJJTkRfRVhQUi4gICovCisjZGVmaW5lIERFQ0xfU0VFTl9JTl9CSU5EX0VYUFJfUChOT0RFKSBcCisgIChERUNMX1dJVEhfVklTX0NIRUNLIChOT0RFKS0+ZGVjbF93aXRoX3Zpcy5zZWVuX2luX2JpbmRfZXhwcikKKworLyogVXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBsaW5rYWdlIHN0YXR1cyBvZiB0aGlzIERFQ0wgaXMgbm90IHlldCBrbm93biwKKyAgIHNvIGl0IHNob3VsZCBub3QgYmUgb3V0cHV0IG5vdy4gICovCisjZGVmaW5lIERFQ0xfREVGRVJfT1VUUFVUKE5PREUpIChERUNMX1dJVEhfVklTX0NIRUNLIChOT0RFKS0+ZGVjbF93aXRoX3Zpcy5kZWZlcl9vdXRwdXQpCisKKy8qIE5vbnplcm8gZm9yIGEgZ2l2ZW4gLi4uX0RFQ0wgbm9kZSBtZWFucyB0aGF0IG5vIHdhcm5pbmdzIHNob3VsZCBiZQorICAgZ2VuZXJhdGVkIGp1c3QgYmVjYXVzZSB0aGlzIG5vZGUgaXMgdW51c2VkLiAgKi8KKyNkZWZpbmUgREVDTF9JTl9TWVNURU1fSEVBREVSKE5PREUpIFwKKyAgKGluX3N5c3RlbV9oZWFkZXJfYXQgKERFQ0xfU09VUkNFX0xPQ0FUSU9OIChOT0RFKSkpCisKKyAgLyogVXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgREVDTCBoYXMgd2VhayBsaW5rYWdlLiAgKi8KKyNkZWZpbmUgREVDTF9XRUFLKE5PREUpIChERUNMX1dJVEhfVklTX0NIRUNLIChOT0RFKS0+ZGVjbF93aXRoX3Zpcy53ZWFrX2ZsYWcpCisKKy8qIFVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgREVDTCBpcyBhIGRsbGltcG9ydC4gICovCisjZGVmaW5lIERFQ0xfRExMSU1QT1JUX1AoTk9ERSkgKERFQ0xfV0lUSF9WSVNfQ0hFQ0sgKE5PREUpLT5kZWNsX3dpdGhfdmlzLmRsbGltcG9ydF9mbGFnKQorCisvKiBVc2VkIGluIGEgREVDTCB0byBpbmRpY2F0ZSB0aGF0LCBldmVuIGlmIGl0IFRSRUVfUFVCTElDLCBpdCBuZWVkCisgICBub3QgYmUgcHV0IG91dCB1bmxlc3MgaXQgaXMgbmVlZGVkIGluIHRoaXMgdHJhbnNsYXRpb24gdW5pdC4KKyAgIEVudGl0aWVzIGxpa2UgdGhpcyBhcmUgc2hhcmVkIGFjcm9zcyB0cmFuc2xhdGlvbiB1bml0cyAobGlrZSB3ZWFrCisgICBlbnRpdGllcyksIGJ1dCBhcmUgZ3VhcmFudGVlZCB0byBiZSBnZW5lcmF0ZWQgYnkgYW55IHRyYW5zbGF0aW9uCisgICB1bml0IHRoYXQgbmVlZHMgdGhlbSwgYW5kIHRoZXJlZm9yZSBuZWVkIG5vdCBiZSBwdXQgb3V0IGFueXdoZXJlCisgICB3aGVyZSB0aGV5IGFyZSBub3QgbmVlZGVkLiAgREVDTF9DT01EQVQgaXMganVzdCBhIGhpbnQgdG8gdGhlCisgICBiYWNrLWVuZDsgaXQgaXMgdXAgdG8gZnJvbnQtZW5kcyB3aGljaCBzZXQgdGhpcyBmbGFnIHRvIGVuc3VyZQorICAgdGhhdCB0aGVyZSB3aWxsIG5ldmVyIGJlIGFueSBoYXJtLCBvdGhlciB0aGFuIGJsb2F0LCBpbiBwdXR0aW5nIG91dAorICAgc29tZXRoaW5nIHdoaWNoIGlzIERFQ0xfQ09NREFULiAgKi8KKyNkZWZpbmUgREVDTF9DT01EQVQoTk9ERSkgKERFQ0xfV0lUSF9WSVNfQ0hFQ0sgKE5PREUpLT5kZWNsX3dpdGhfdmlzLmNvbWRhdF9mbGFnKQorCisjZGVmaW5lIERFQ0xfQ09NREFUX0dST1VQKE5PREUpIChERUNMX1dJVEhfVklTX0NIRUNLIChOT0RFKS0+ZGVjbF93aXRoX3Zpcy5jb21kYXRfZ3JvdXApCisKKy8qIFRoZSBuYW1lIG9mIHRoZSBvYmplY3QgYXMgdGhlIGFzc2VtYmxlciB3aWxsIHNlZSBpdCAoYnV0IGJlZm9yZSBhbnkKKyAgIHRyYW5zbGF0aW9ucyBtYWRlIGJ5IEFTTV9PVVRQVVRfTEFCRUxSRUYpLiAgT2Z0ZW4gdGhpcyBpcyB0aGUgc2FtZQorICAgYXMgREVDTF9OQU1FLiAgSXQgaXMgYW4gSURFTlRJRklFUl9OT0RFLiAgKi8KKyNkZWZpbmUgREVDTF9BU1NFTUJMRVJfTkFNRShOT0RFKSBkZWNsX2Fzc2VtYmxlcl9uYW1lIChOT0RFKQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBOT0RFIGlzIGEgTk9ERSB0aGF0IGNhbiBjb250YWluIGEgREVDTF9BU1NFTUJMRVJfTkFNRS4KKyAgIFRoaXMgaXMgdHJ1ZSBvZiBhbGwgREVDTCBub2RlcyBleGNlcHQgRklFTERfREVDTC4gICovCisjZGVmaW5lIEhBU19ERUNMX0FTU0VNQkxFUl9OQU1FX1AoTk9ERSkgXAorICAoQ09ERV9DT05UQUlOU19TVFJVQ1QgKFRSRUVfQ09ERSAoTk9ERSksIFRTX0RFQ0xfV0lUSF9WSVMpKQorCisvKiBSZXR1cm5zIG5vbnplcm8gaWYgdGhlIERFQ0xfQVNTRU1CTEVSX05BTUUgZm9yIE5PREUgaGFzIGJlZW4gc2V0LiAgSWYgemVybywKKyAgIHRoZSBOT0RFIG1pZ2h0IHN0aWxsIGhhdmUgYSBERUNMX0FTU0VNQkxFUl9OQU1FIC0tIGl0IGp1c3QgaGFzbid0IGJlZW4gc2V0CisgICB5ZXQuICAqLworI2RlZmluZSBERUNMX0FTU0VNQkxFUl9OQU1FX1NFVF9QKE5PREUpIFwKKyAgKEhBU19ERUNMX0FTU0VNQkxFUl9OQU1FX1AgKE5PREUpICYmICBERUNMX1dJVEhfVklTX0NIRUNLIChOT0RFKS0+ZGVjbF93aXRoX3Zpcy5hc3NlbWJsZXJfbmFtZSAhPSBOVUxMX1RSRUUpCisKKy8qIFNldCB0aGUgREVDTF9BU1NFTUJMRVJfTkFNRSBmb3IgTk9ERSB0byBOQU1FLiAgKi8KKyNkZWZpbmUgU0VUX0RFQ0xfQVNTRU1CTEVSX05BTUUoTk9ERSwgTkFNRSkgXAorICAoREVDTF9XSVRIX1ZJU19DSEVDSyAoTk9ERSktPmRlY2xfd2l0aF92aXMuYXNzZW1ibGVyX25hbWUgPSAoTkFNRSkpCisKKy8qIENvcHkgdGhlIERFQ0xfQVNTRU1CTEVSX05BTUUgZnJvbSBERUNMMSB0byBERUNMMi4gIE5vdGUgdGhhdCBpZiBERUNMMSdzCisgICBERUNMX0FTU0VNQkxFUl9OQU1FIGhhcyBub3QgeWV0IGJlZW4gc2V0LCB1c2luZyB0aGlzIG1hY3JvIHdpbGwgbm90IGNhdXNlCisgICB0aGUgREVDTF9BU1NFTUJMRVJfTkFNRSBvZiBlaXRoZXIgREVDTCB0byBiZSBzZXQuICBJbiBvdGhlciB3b3JkcywgdGhlCisgICBzZW1hbnRpY3Mgb2YgdXNpbmcgdGhpcyBtYWNybywgYXJlIGRpZmZlcmVudCB0aGFuIHNheWluZzoKKworICAgICBTRVRfREVDTF9BU1NFTUJMRVJfTkFNRShERUNMMiwgREVDTF9BU1NFTUJMRVJfTkFNRSAoREVDTDEpKQorCisgICB3aGljaCB3aWxsIHRyeSB0byBzZXQgdGhlIERFQ0xfQVNTRU1CTEVSX05BTUUgZm9yIERFQ0wxLiAgKi8KKworI2RlZmluZSBDT1BZX0RFQ0xfQVNTRU1CTEVSX05BTUUoREVDTDEsIERFQ0wyKQkJCQlcCisgIChERUNMX0FTU0VNQkxFUl9OQU1FX1NFVF9QIChERUNMMSkJCQkJCVwKKyAgID8gKHZvaWQpIFNFVF9ERUNMX0FTU0VNQkxFUl9OQU1FIChERUNMMiwJCQkJXAorCQkJCSAgICAgREVDTF9BU1NFTUJMRVJfTkFNRSAoREVDTDEpKQlcCisgICA6ICh2b2lkKSAwKQorCisvKiBSZWNvcmRzIHRoZSBzZWN0aW9uIG5hbWUgaW4gYSBzZWN0aW9uIGF0dHJpYnV0ZS4gIFVzZWQgdG8gcGFzcworICAgdGhlIG5hbWUgZnJvbSBkZWNsX2F0dHJpYnV0ZXMgdG8gbWFrZV9mdW5jdGlvbl9ydGwgYW5kIG1ha2VfZGVjbF9ydGwuICAqLworI2RlZmluZSBERUNMX1NFQ1RJT05fTkFNRShOT0RFKSAoREVDTF9XSVRIX1ZJU19DSEVDSyAoTk9ERSktPmRlY2xfd2l0aF92aXMuc2VjdGlvbl9uYW1lKQorCisvKiBWYWx1ZSBvZiB0aGUgZGVjbHMncyB2aXNpYmlsaXR5IGF0dHJpYnV0ZSAqLworI2RlZmluZSBERUNMX1ZJU0lCSUxJVFkoTk9ERSkgKERFQ0xfV0lUSF9WSVNfQ0hFQ0sgKE5PREUpLT5kZWNsX3dpdGhfdmlzLnZpc2liaWxpdHkpCisKKy8qIE5vbnplcm8gbWVhbnMgdGhhdCB0aGUgZGVjbCBoYWQgaXRzIHZpc2liaWxpdHkgc3BlY2lmaWVkIHJhdGhlciB0aGFuCisgICBiZWluZyBpbmZlcnJlZC4gICovCisjZGVmaW5lIERFQ0xfVklTSUJJTElUWV9TUEVDSUZJRUQoTk9ERSkgKERFQ0xfV0lUSF9WSVNfQ0hFQ0sgKE5PREUpLT5kZWNsX3dpdGhfdmlzLnZpc2liaWxpdHlfc3BlY2lmaWVkKQorCisvKiBVc2VkIGluIFRSRUVfUFVCTElDIGRlY2xzIHRvIGluZGljYXRlIHRoYXQgY29waWVzIG9mIHRoaXMgREVDTCBpbgorICAgbXVsdGlwbGUgdHJhbnNsYXRpb24gdW5pdHMgc2hvdWxkIGJlIG1lcmdlZC4gICovCisjZGVmaW5lIERFQ0xfT05FX09OTFkoTk9ERSkgKERFQ0xfQ09NREFUX0dST1VQIChOT0RFKSAhPSBOVUxMX1RSRUUpCisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfZGVjbF93aXRoX3ZpcyB7Cisgc3RydWN0IHRyZWVfZGVjbF93aXRoX3J0bCBjb21tb247CisgdHJlZSBhc3NlbWJsZXJfbmFtZTsKKyB0cmVlIHNlY3Rpb25fbmFtZTsKKyB0cmVlIGNvbWRhdF9ncm91cDsKKworIC8qIEJlbG9uZyB0byBWQVJfREVDTCBleGNsdXNpdmVseS4gICovCisgdW5zaWduZWQgZGVmZXJfb3V0cHV0IDogMTsKKyB1bnNpZ25lZCBoYXJkX3JlZ2lzdGVyIDogMTsKKyB1bnNpZ25lZCB0aHJlYWRfbG9jYWwgOiAxOworIHVuc2lnbmVkIGNvbW1vbl9mbGFnIDogMTsKKyB1bnNpZ25lZCBpbl90ZXh0X3NlY3Rpb24gOiAxOworIHVuc2lnbmVkIGRsbGltcG9ydF9mbGFnIDogMTsKKyAvKiBVc2VkIGJ5IEMrKy4gIE1pZ2h0IGJlY29tZSBhIGdlbmVyaWMgZGVjbCBmbGFnLiAgKi8KKyB1bnNpZ25lZCBzaGFkb3dlZF9mb3JfdmFyX3AgOiAxOworIC8qIERvbid0IGJlbG9uZyB0byBWQVJfREVDTCBleGNsdXNpdmVseS4gICovCisgdW5zaWduZWQgd2Vha19mbGFnIDogMTsKKworIHVuc2lnbmVkIHNlZW5faW5fYmluZF9leHByIDogMTsKKyB1bnNpZ25lZCBjb21kYXRfZmxhZyA6IDE7CisgRU5VTV9CSVRGSUVMRChzeW1ib2xfdmlzaWJpbGl0eSkgdmlzaWJpbGl0eSA6IDI7CisgdW5zaWduZWQgdmlzaWJpbGl0eV9zcGVjaWZpZWQgOiAxOworIC8qIEJlbG9uZ3MgdG8gVkFSX0RFQ0wgZXhjbHVzaXZlbHkuICAqLworIEVOVU1fQklURklFTEQodGxzX21vZGVsKSB0bHNfbW9kZWwgOiAzOworCisgLyogQmVsb25nIHRvIEZVTkNUSU9OX0RFQ0wgZXhjbHVzaXZlbHkuICAqLworIHVuc2lnbmVkIGluaXRfcHJpb3JpdHlfcCA6IDE7CisgLyogMTUgdW51c2VkIGJpdHMuICovCit9OworCisvKiBJbiBhIFZBUl9ERUNMIHRoYXQncyBzdGF0aWMsCisgICBub256ZXJvIGlmIHRoZSBzcGFjZSBpcyBpbiB0aGUgdGV4dCBzZWN0aW9uLiAgKi8KKyNkZWZpbmUgREVDTF9JTl9URVhUX1NFQ1RJT04oTk9ERSkgKFZBUl9ERUNMX0NIRUNLIChOT0RFKS0+ZGVjbF93aXRoX3Zpcy5pbl90ZXh0X3NlY3Rpb24pCisKKy8qIE5vbnplcm8gZm9yIGEgZ2l2ZW4gLi4uX0RFQ0wgbm9kZSBtZWFucyB0aGF0IHRoaXMgbm9kZSBzaG91bGQgYmUKKyAgIHB1dCBpbiAuY29tbW9uLCBpZiBwb3NzaWJsZS4gIElmIGEgREVDTF9JTklUSUFMIGlzIGdpdmVuLCBhbmQgaXQKKyAgIGlzIG5vdCBlcnJvcl9tYXJrX25vZGUsIHRoZW4gdGhlIGRlY2wgY2Fubm90IGJlIHB1dCBpbiAuY29tbW9uLiAgKi8KKyNkZWZpbmUgREVDTF9DT01NT04oTk9ERSkgKERFQ0xfV0lUSF9WSVNfQ0hFQ0sgKE5PREUpLT5kZWNsX3dpdGhfdmlzLmNvbW1vbl9mbGFnKQorCisvKiBJbiBhIFZBUl9ERUNMLCBub256ZXJvIGlmIHRoZSBkZWNsIGlzIGEgcmVnaXN0ZXIgdmFyaWFibGUgd2l0aAorICAgYW4gZXhwbGljaXQgYXNtIHNwZWNpZmljYXRpb24uICAqLworI2RlZmluZSBERUNMX0hBUkRfUkVHSVNURVIoTk9ERSkgIChWQVJfREVDTF9DSEVDSyAoTk9ERSktPmRlY2xfd2l0aF92aXMuaGFyZF9yZWdpc3RlcikKKworZXh0ZXJuIHRyZWUgZGVjbF9kZWJ1Z19leHByX2xvb2t1cCAodHJlZSk7CitleHRlcm4gdm9pZCBkZWNsX2RlYnVnX2V4cHJfaW5zZXJ0ICh0cmVlLCB0cmVlKTsKKy8qIEZvciBWQVJfREVDTCwgdGhpcyBpcyBzZXQgdG8gZWl0aGVyIGFuIGV4cHJlc3Npb24gdGhhdCBpdCB3YXMgc3BsaXQKKyAgIGZyb20gKGlmIERFQ0xfREVCVUdfRVhQUl9JU19GUk9NIGlzIHRydWUpLCBvdGhlcndpc2UgYSB0cmVlX2xpc3Qgb2YKKyAgIHN1YmV4cHJlc3Npb25zIHRoYXQgaXQgd2FzIHNwbGl0IGludG8uICAqLworI2RlZmluZSBERUNMX0RFQlVHX0VYUFIoTk9ERSkgXAorICAoZGVjbF9kZWJ1Z19leHByX2xvb2t1cCAoVkFSX0RFQ0xfQ0hFQ0sgKE5PREUpKSkKKworI2RlZmluZSBTRVRfREVDTF9ERUJVR19FWFBSKE5PREUsIFZBTCkgXAorICAoZGVjbF9kZWJ1Z19leHByX2luc2VydCAoVkFSX0RFQ0xfQ0hFQ0sgKE5PREUpLCBWQUwpKQorCisvKiBBbiBpbml0aWFsaXphdGlvbiBwcmlvcml0eS4gICovCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHByaW9yaXR5X3R5cGU7CisKK2V4dGVybiBwcmlvcml0eV90eXBlIGRlY2xfaW5pdF9wcmlvcml0eV9sb29rdXAgKHRyZWUpOworZXh0ZXJuIHByaW9yaXR5X3R5cGUgZGVjbF9maW5pX3ByaW9yaXR5X2xvb2t1cCAodHJlZSk7CitleHRlcm4gdm9pZCBkZWNsX2luaXRfcHJpb3JpdHlfaW5zZXJ0ICh0cmVlLCBwcmlvcml0eV90eXBlKTsKK2V4dGVybiB2b2lkIGRlY2xfZmluaV9wcmlvcml0eV9pbnNlcnQgKHRyZWUsIHByaW9yaXR5X3R5cGUpOworCisvKiBJbiBhIG5vbi1sb2NhbCBWQVJfREVDTCB3aXRoIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uLCB0cnVlIGlmIHRoZQorICAgdmFyaWFibGUgaGFzIGFuIGluaXRpYWxpemF0aW9uIHByaW9yaXR5LiAgSWYgZmFsc2UsIHRoZSB2YXJpYWJsZQorICAgd2lsbCBiZSBpbml0aWFsaXplZCBhdCB0aGUgREVGQVVMVF9JTklUX1BSSU9SSVRZLiAgKi8KKyNkZWZpbmUgREVDTF9IQVNfSU5JVF9QUklPUklUWV9QKE5PREUpIFwKKyAgKFZBUl9ERUNMX0NIRUNLIChOT0RFKS0+ZGVjbF93aXRoX3Zpcy5pbml0X3ByaW9yaXR5X3ApCisKKy8qIEZvciBhIFZBUl9ERUNMIG9yIEZVTkNUSU9OX0RFQ0wgdGhlIGluaXRpYWxpemF0aW9uIHByaW9yaXR5IG9mCisgICBOT0RFLiAgKi8KKyNkZWZpbmUgREVDTF9JTklUX1BSSU9SSVRZKE5PREUpIFwKKyAgKGRlY2xfaW5pdF9wcmlvcml0eV9sb29rdXAgKE5PREUpKQorLyogU2V0IHRoZSBpbml0aWFsaXphdGlvbiBwcmlvcml0eSBmb3IgTk9ERSB0byBWQUwuICAqLworI2RlZmluZSBTRVRfREVDTF9JTklUX1BSSU9SSVRZKE5PREUsIFZBTCkgXAorICAoZGVjbF9pbml0X3ByaW9yaXR5X2luc2VydCAoTk9ERSwgVkFMKSkKKworLyogRm9yIGEgRlVOQ1RJT05fREVDTCB0aGUgZmluYWxpemF0aW9uIHByaW9yaXR5IG9mIE5PREUuICAqLworI2RlZmluZSBERUNMX0ZJTklfUFJJT1JJVFkoTk9ERSkgXAorICAoZGVjbF9maW5pX3ByaW9yaXR5X2xvb2t1cCAoTk9ERSkpCisvKiBTZXQgdGhlIGZpbmFsaXphdGlvbiBwcmlvcml0eSBmb3IgTk9ERSB0byBWQUwuICAqLworI2RlZmluZSBTRVRfREVDTF9GSU5JX1BSSU9SSVRZKE5PREUsIFZBTCkgXAorICAoZGVjbF9maW5pX3ByaW9yaXR5X2luc2VydCAoTk9ERSwgVkFMKSkKKworLyogVGhlIGluaXRpYWxpemF0aW9uIHByaW9yaXR5IGZvciBlbnRpdGllcyBmb3Igd2hpY2ggbm8gZXhwbGljaXQKKyAgIGluaXRpYWxpemF0aW9uIHByaW9yaXR5IGhhcyBiZWVuIHNwZWNpZmllZC4gICovCisjZGVmaW5lIERFRkFVTFRfSU5JVF9QUklPUklUWSA2NTUzNQorCisvKiBUaGUgbWF4aW11bSBhbGxvd2VkIGluaXRpYWxpemF0aW9uIHByaW9yaXR5LiAgKi8KKyNkZWZpbmUgTUFYX0lOSVRfUFJJT1JJVFkgNjU1MzUKKworLyogVGhlIGxhcmdlc3QgcHJpb3JpdHkgdmFsdWUgcmVzZXJ2ZWQgZm9yIHVzZSBieSBzeXN0ZW0gcnVudGltZQorICAgbGlicmFyaWVzLiAgKi8KKyNkZWZpbmUgTUFYX1JFU0VSVkVEX0lOSVRfUFJJT1JJVFkgMTAwCisKKy8qIEluIGEgVkFSX0RFQ0wsIHRoZSBtb2RlbCB0byB1c2UgaWYgdGhlIGRhdGEgc2hvdWxkIGJlIGFsbG9jYXRlZCBmcm9tCisgICB0aHJlYWQtbG9jYWwgc3RvcmFnZS4gICovCisjZGVmaW5lIERFQ0xfVExTX01PREVMKE5PREUpIChWQVJfREVDTF9DSEVDSyAoTk9ERSktPmRlY2xfd2l0aF92aXMudGxzX21vZGVsKQorCisvKiBJbiBhIFZBUl9ERUNMLCBub256ZXJvIGlmIHRoZSBkYXRhIHNob3VsZCBiZSBhbGxvY2F0ZWQgZnJvbQorICAgdGhyZWFkLWxvY2FsIHN0b3JhZ2UuICAqLworI2RlZmluZSBERUNMX1RIUkVBRF9MT0NBTF9QKE5PREUpIFwKKyAgKFZBUl9ERUNMX0NIRUNLIChOT0RFKS0+ZGVjbF93aXRoX3Zpcy50bHNfbW9kZWwgPj0gVExTX01PREVMX1JFQUwpCisKKyNkZWZpbmUgREVDTF9WQVJfQU5OX1BUUihOT0RFKSBcCisgIChUUkVFX0NPREUgKE5PREUpID09IFZBUl9ERUNMID8gJihOT0RFKS0+dmFyX2RlY2wuYW5uIFwKKyAgIDogVFJFRV9DT0RFIChOT0RFKSA9PSBQQVJNX0RFQ0wgPyAmKE5PREUpLT5wYXJtX2RlY2wuYW5uIFwKKyAgIDogVFJFRV9DT0RFIChOT0RFKSA9PSBSRVNVTFRfREVDTCA/ICYoTk9ERSktPnJlc3VsdF9kZWNsLmFubiBcCisgICA6IE5VTEwpCisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfdmFyX2RlY2wgeworICBzdHJ1Y3QgdHJlZV9kZWNsX3dpdGhfdmlzIGNvbW1vbjsKKyAgc3RydWN0IHZhcl9hbm5fZCAqYW5uOworfTsKKworCisvKiBUaGlzIGZpZWxkIGlzIHVzZWQgdG8gcmVmZXJlbmNlIGFueXRoaW5nIGluIGRlY2wucmVzdWx0IGFuZCBpcyBtZWFudCBvbmx5CisgICBmb3IgdXNlIGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4gICovCisjZGVmaW5lIERFQ0xfUkVTVUxUX0ZMRChOT0RFKSAoREVDTF9OT05fQ09NTU9OX0NIRUNLIChOT0RFKS0+ZGVjbF9ub25fY29tbW9uLnJlc3VsdCkKKworLyogVGhlIERFQ0xfVklOREVYIGlzIHVzZWQgZm9yIEZVTkNUSU9OX0RFQ0xTIGluIHR3byBkaWZmZXJlbnQgd2F5cy4KKyAgIEJlZm9yZSB0aGUgc3RydWN0IGNvbnRhaW5pbmcgdGhlIEZVTkNUSU9OX0RFQ0wgaXMgbGFpZCBvdXQsCisgICBERUNMX1ZJTkRFWCBtYXkgcG9pbnQgdG8gYSBGVU5DVElPTl9ERUNMIGluIGEgYmFzZSBjbGFzcyB3aGljaAorICAgaXMgdGhlIEZVTkNUSU9OX0RFQ0wgd2hpY2ggdGhpcyBGVU5DVElPTl9ERUNMIHdpbGwgcmVwbGFjZSBhcyBhIHZpcnR1YWwKKyAgIGZ1bmN0aW9uLiAgV2hlbiB0aGUgY2xhc3MgaXMgbGFpZCBvdXQsIHRoaXMgcG9pbnRlciBpcyBjaGFuZ2VkCisgICB0byBhbiBJTlRFR0VSX0NTVCBub2RlIHdoaWNoIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgYW4gaW5kZXgKKyAgIGludG8gdGhlIHZpcnR1YWwgZnVuY3Rpb24gdGFibGUuCisgICBDKysgYWxzbyB1c2VzIHRoaXMgZmllbGQgaW4gbmFtZXNwYWNlcywgaGVuY2UgdGhlIERFQ0xfTk9OX0NPTU1PTl9DSEVDSy4gICovCisjZGVmaW5lIERFQ0xfVklOREVYKE5PREUpIChERUNMX05PTl9DT01NT05fQ0hFQ0sgKE5PREUpLT5kZWNsX25vbl9jb21tb24udmluZGV4KQorCitzdHJ1Y3QgR1RZKCgpKQorIHRyZWVfZGVjbF9ub25fY29tbW9uIHsKKyAgc3RydWN0IHRyZWVfZGVjbF93aXRoX3ZpcyBjb21tb247CisgIC8qIEMrKyB1c2VzIHRoaXMgaW4gbmFtZXNwYWNlcy4gICovCisgIHRyZWUgc2F2ZWRfdHJlZTsKKyAgLyogQysrIHVzZXMgdGhpcyBpbiB0ZW1wbGF0ZXMuICAqLworICB0cmVlIGFyZ3VtZW50czsKKyAgLyogQWxtb3N0IGFsbCBGRSdzIHVzZSB0aGlzLiAgKi8KKyAgdHJlZSByZXN1bHQ7CisgIC8qIEMrKyB1c2VzIHRoaXMgaW4gbmFtZXNwYWNlcy4gICovCisgIHRyZWUgdmluZGV4OworfTsKKworLyogSW4gRlVOQ1RJT05fREVDTCwgaG9sZHMgdGhlIGRlY2wgZm9yIHRoZSByZXR1cm4gdmFsdWUuICAqLworI2RlZmluZSBERUNMX1JFU1VMVChOT0RFKSAoRlVOQ1RJT05fREVDTF9DSEVDSyAoTk9ERSktPmRlY2xfbm9uX2NvbW1vbi5yZXN1bHQpCisKKy8qIEluIGEgRlVOQ1RJT05fREVDTCwgbm9uemVybyBpZiB0aGUgZnVuY3Rpb24gY2Fubm90IGJlIGlubGluZWQuICAqLworI2RlZmluZSBERUNMX1VOSU5MSU5BQkxFKE5PREUpIChGVU5DVElPTl9ERUNMX0NIRUNLIChOT0RFKS0+ZnVuY3Rpb25fZGVjbC51bmlubGluYWJsZSkKKworLyogSW4gYSBGVU5DVElPTl9ERUNMLCB0aGUgc2F2ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJvZHkgb2YgdGhlCisgICBlbnRpcmUgZnVuY3Rpb24uICAqLworI2RlZmluZSBERUNMX1NBVkVEX1RSRUUoTk9ERSkgKEZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKE5PREUpLT5kZWNsX25vbl9jb21tb24uc2F2ZWRfdHJlZSkKKworLyogTm9uemVybyBpbiBhIEZVTkNUSU9OX0RFQ0wgbWVhbnMgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdHJlYXRlZAorICAgYXMgaWYgaXQgd2VyZSBhIG1hbGxvYywgbWVhbmluZyBpdCByZXR1cm5zIGEgcG9pbnRlciB0aGF0IGlzCisgICBub3QgYW4gYWxpYXMuICAqLworI2RlZmluZSBERUNMX0lTX01BTExPQyhOT0RFKSAoRlVOQ1RJT05fREVDTF9DSEVDSyAoTk9ERSktPmZ1bmN0aW9uX2RlY2wubWFsbG9jX2ZsYWcpCisKKy8qIE5vbnplcm8gaW4gYSBGVU5DVElPTl9ERUNMIG1lYW5zIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHRyZWF0ZWQgYXMKKyAgIEMrKyBvcGVyYXRvciBuZXcsIG1lYW5pbmcgdGhhdCBpdCByZXR1cm5zIGEgcG9pbnRlciBmb3Igd2hpY2ggd2UKKyAgIHNob3VsZCBub3QgdXNlIHR5cGUgYmFzZWQgYWxpYXNpbmcuICAqLworI2RlZmluZSBERUNMX0lTX09QRVJBVE9SX05FVyhOT0RFKSBcCisgIChGVU5DVElPTl9ERUNMX0NIRUNLIChOT0RFKS0+ZnVuY3Rpb25fZGVjbC5vcGVyYXRvcl9uZXdfZmxhZykKKworLyogTm9uemVybyBpbiBhIEZVTkNUSU9OX0RFQ0wgbWVhbnMgdGhpcyBmdW5jdGlvbiBtYXkgcmV0dXJuIG1vcmUKKyAgIHRoYW4gb25jZS4gICovCisjZGVmaW5lIERFQ0xfSVNfUkVUVVJOU19UV0lDRShOT0RFKSBcCisgIChGVU5DVElPTl9ERUNMX0NIRUNLIChOT0RFKS0+ZnVuY3Rpb25fZGVjbC5yZXR1cm5zX3R3aWNlX2ZsYWcpCisKKy8qIE5vbnplcm8gaW4gYSBGVU5DVElPTl9ERUNMIG1lYW5zIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHRyZWF0ZWQKKyAgIGFzICJwdXJlIiBmdW5jdGlvbiAobGlrZSBjb25zdCBmdW5jdGlvbiwgYnV0IG1heSByZWFkIGdsb2JhbCBtZW1vcnkpLiAgKi8KKyNkZWZpbmUgREVDTF9QVVJFX1AoTk9ERSkgKEZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKE5PREUpLT5mdW5jdGlvbl9kZWNsLnB1cmVfZmxhZykKKworLyogTm9uemVybyBvbmx5IGlmIG9uZSBvZiBUUkVFX1JFQURPTkxZIG9yIERFQ0xfUFVSRV9QIGlzIG5vbnplcm8gQU5ECisgICB0aGUgY29uc3Qgb3IgcHVyZSBmdW5jdGlvbiBtYXkgbm90IHRlcm1pbmF0ZS4gIFdoZW4gdGhpcyBpcyBub256ZXJvCisgICBmb3IgYSBjb25zdCBvciBwdXJlIGZ1bmN0aW9uLCBpdCBjYW4gYmUgZGVhbHQgd2l0aCBieSBjc2UgcGFzc2VzCisgICBidXQgY2Fubm90IGJlIHJlbW92ZWQgYnkgZGNlIHBhc3NlcyBzaW5jZSB5b3UgYXJlIG5vdCBhbGxvd2VkIHRvCisgICBjaGFuZ2UgYW4gaW5maW5pdGUgbG9vcGluZyBwcm9ncmFtIGludG8gb25lIHRoYXQgdGVybWluYXRlcyB3aXRob3V0CisgICBlcnJvci4gICovCisjZGVmaW5lIERFQ0xfTE9PUElOR19DT05TVF9PUl9QVVJFX1AoTk9ERSkgXAorICAoRlVOQ1RJT05fREVDTF9DSEVDSyAoTk9ERSktPmZ1bmN0aW9uX2RlY2wubG9vcGluZ19jb25zdF9vcl9wdXJlX2ZsYWcpCisKKy8qIE5vbnplcm8gaW4gYSBGVU5DVElPTl9ERUNMIG1lYW5zIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHRyZWF0ZWQKKyAgIGFzICJub3ZvcHMiIGZ1bmN0aW9uIChmdW5jdGlvbiB0aGF0IGRvZXMgbm90IHJlYWQgZ2xvYmFsIG1lbW9yeSwKKyAgIGJ1dCBtYXkgaGF2ZSBhcmJpdHJhcnkgc2lkZSBlZmZlY3RzKS4gICovCisjZGVmaW5lIERFQ0xfSVNfTk9WT1BTKE5PREUpIChGVU5DVElPTl9ERUNMX0NIRUNLIChOT0RFKS0+ZnVuY3Rpb25fZGVjbC5ub3ZvcHNfZmxhZykKKworLyogVXNlZCBpbiBGVU5DVElPTl9ERUNMcyB0byBpbmRpY2F0ZSB0aGF0IHRoZXkgc2hvdWxkIGJlIHJ1biBhdXRvbWF0aWNhbGx5CisgICBhdCB0aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiBleGVjdXRpb24uICAqLworI2RlZmluZSBERUNMX1NUQVRJQ19DT05TVFJVQ1RPUihOT0RFKSBcCisgIChGVU5DVElPTl9ERUNMX0NIRUNLIChOT0RFKS0+ZnVuY3Rpb25fZGVjbC5zdGF0aWNfY3Rvcl9mbGFnKQorCisjZGVmaW5lIERFQ0xfU1RBVElDX0RFU1RSVUNUT1IoTk9ERSkgXAorKEZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKE5PREUpLT5mdW5jdGlvbl9kZWNsLnN0YXRpY19kdG9yX2ZsYWcpCisKKy8qIFVzZWQgaW4gRlVOQ1RJT05fREVDTHMgdG8gaW5kaWNhdGUgdGhhdCBmdW5jdGlvbiBlbnRyeSBhbmQgZXhpdCBzaG91bGQKKyAgIGJlIGluc3RydW1lbnRlZCB3aXRoIGNhbGxzIHRvIHN1cHBvcnQgcm91dGluZXMuICAqLworI2RlZmluZSBERUNMX05PX0lOU1RSVU1FTlRfRlVOQ1RJT05fRU5UUllfRVhJVChOT0RFKSBcCisgIChGVU5DVElPTl9ERUNMX0NIRUNLIChOT0RFKS0+ZnVuY3Rpb25fZGVjbC5ub19pbnN0cnVtZW50X2Z1bmN0aW9uX2VudHJ5X2V4aXQpCisKKy8qIFVzZWQgaW4gRlVOQ1RJT05fREVDTHMgdG8gaW5kaWNhdGUgdGhhdCBsaW1pdC1zdGFjay0qIHNob3VsZCBiZQorICAgZGlzYWJsZWQgaW4gdGhpcyBmdW5jdGlvbi4gICovCisjZGVmaW5lIERFQ0xfTk9fTElNSVRfU1RBQ0soTk9ERSkgXAorICAoRlVOQ1RJT05fREVDTF9DSEVDSyAoTk9ERSktPmZ1bmN0aW9uX2RlY2wubm9fbGltaXRfc3RhY2spCisKKy8qIEluIGEgRlVOQ1RJT05fREVDTCBpbmRpY2F0ZXMgdGhhdCBhIHN0YXRpYyBjaGFpbiBpcyBuZWVkZWQuICAqLworI2RlZmluZSBERUNMX1NUQVRJQ19DSEFJTihOT0RFKSBcCisgIChGVU5DVElPTl9ERUNMX0NIRUNLIChOT0RFKS0+ZnVuY3Rpb25fZGVjbC5yZWdkZWNsX2ZsYWcpCisKKy8qIE5vbnplcm8gZm9yIGEgZGVjbCB0aGF0IGNncmFwaCBoYXMgZGVjaWRlZCBzaG91bGQgYmUgaW5saW5lZCBpbnRvCisgICBhdCBsZWFzdCBvbmUgY2FsbCBzaXRlLiAgSXQgaXMgbm90IG1lYW5pbmdmdWwgdG8gbG9vayBhdCB0aGlzCisgICBkaXJlY3RseTsgYWx3YXlzIHVzZSBjZ3JhcGhfZnVuY3Rpb25fcG9zc2libHlfaW5saW5lZF9wLiAgKi8KKyNkZWZpbmUgREVDTF9QT1NTSUJMWV9JTkxJTkVEKERFQ0wpIFwKKyAgRlVOQ1RJT05fREVDTF9DSEVDSyAoREVDTCktPmZ1bmN0aW9uX2RlY2wucG9zc2libHlfaW5saW5lZAorCisvKiBOb256ZXJvIGluIGEgRlVOQ1RJT05fREVDTCBtZWFucyB0aGF0IHRoaXMgZnVuY3Rpb24gd2FzIGRlY2xhcmVkIGlubGluZSwKKyAgIHN1Y2ggYXMgdmlhIHRoZSBgaW5saW5lJyBrZXl3b3JkIGluIEMvQysrLiAgVGhpcyBmbGFnIGNvbnRyb2xzIHRoZSBsaW5rYWdlCisgICBzZW1hbnRpY3Mgb2YgJ2lubGluZScgICovCisjZGVmaW5lIERFQ0xfREVDTEFSRURfSU5MSU5FX1AoTk9ERSkgXAorICAoRlVOQ1RJT05fREVDTF9DSEVDSyAoTk9ERSktPmZ1bmN0aW9uX2RlY2wuZGVjbGFyZWRfaW5saW5lX2ZsYWcpCisKKy8qIE5vbnplcm8gaW4gYSBGVU5DVElPTl9ERUNMIG1lYW5zIHRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBnZXQKKyAgIC1XaW5saW5lIHdhcm5pbmdzLiAgKi8KKyNkZWZpbmUgREVDTF9OT19JTkxJTkVfV0FSTklOR19QKE5PREUpIFwKKyAgKEZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKE5PREUpLT5mdW5jdGlvbl9kZWNsLm5vX2lubGluZV93YXJuaW5nX2ZsYWcpCisKKy8qIE5vbnplcm8gaW4gYSBGVU5DVElPTl9ERUNMIHRoYXQgc2hvdWxkIGJlIGFsd2F5cyBpbmxpbmVkIGJ5IHRoZSBpbmxpbmVyCisgICBkaXNyZWdhcmRpbmcgc2l6ZSBhbmQgY29zdCBoZXVyaXN0aWNzLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHVzaW5nCisgICB0aGUgYWx3YXlzX2lubGluZSBhdHRyaWJ1dGUgd2l0aG91dCB0aGUgcmVxdWlyZWQgZGlhZ25vc3RpY3MgaWYgdGhlCisgICBmdW5jdGlvbiBjYW5ub3QgYmUgaW5saW5lZC4gICovCisjZGVmaW5lIERFQ0xfRElTUkVHQVJEX0lOTElORV9MSU1JVFMoTk9ERSkgXAorICAoRlVOQ1RJT05fREVDTF9DSEVDSyAoTk9ERSktPmZ1bmN0aW9uX2RlY2wuZGlzcmVnYXJkX2lubGluZV9saW1pdHMpCisKKy8qIEZvciBGVU5DVElPTl9ERUNMLCB0aGlzIGhvbGRzIGEgcG9pbnRlciB0byBhIHN0cnVjdHVyZSAoInN0cnVjdCBmdW5jdGlvbiIpCisgICB0aGF0IGRlc2NyaWJlcyB0aGUgc3RhdHVzIG9mIHRoaXMgZnVuY3Rpb24uICAqLworI2RlZmluZSBERUNMX1NUUlVDVF9GVU5DVElPTihOT0RFKSAoRlVOQ1RJT05fREVDTF9DSEVDSyAoTk9ERSktPmZ1bmN0aW9uX2RlY2wuZikKKworLyogSW4gYSBGVU5DVElPTl9ERUNMLCBub256ZXJvIG1lYW5zIGEgYnVpbHQgaW4gZnVuY3Rpb24uICAqLworI2RlZmluZSBERUNMX0JVSUxUX0lOKE5PREUpIChERUNMX0JVSUxUX0lOX0NMQVNTIChOT0RFKSAhPSBOT1RfQlVJTFRfSU4pCisKKy8qIEZvciBhIGJ1aWx0aW4gZnVuY3Rpb24sIGlkZW50aWZ5IHdoaWNoIHBhcnQgb2YgdGhlIGNvbXBpbGVyIGRlZmluZWQgaXQuICAqLworI2RlZmluZSBERUNMX0JVSUxUX0lOX0NMQVNTKE5PREUpIFwKKyAgIChGVU5DVElPTl9ERUNMX0NIRUNLIChOT0RFKS0+ZnVuY3Rpb25fZGVjbC5idWlsdF9pbl9jbGFzcykKKworLyogSW4gRlVOQ1RJT05fREVDTCwgYSBjaGFpbiBvZiAuLi5fREVDTCBub2Rlcy4KKyAgIFZBUl9ERUNMIGFuZCBQQVJNX0RFQ0wgcmVzZXJ2ZSB0aGUgYXJndW1lbnRzIHNsb3QgZm9yIGxhbmd1YWdlLXNwZWNpZmljCisgICB1c2VzLiAgKi8KKyNkZWZpbmUgREVDTF9BUkdVTUVOVFMoTk9ERSkgKEZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKE5PREUpLT5kZWNsX25vbl9jb21tb24uYXJndW1lbnRzKQorI2RlZmluZSBERUNMX0FSR1VNRU5UX0ZMRChOT0RFKSAoREVDTF9OT05fQ09NTU9OX0NIRUNLIChOT0RFKS0+ZGVjbF9ub25fY29tbW9uLmFyZ3VtZW50cykKKworLyogSW4gRlVOQ1RJT05fREVDTCwgdGhlIGZ1bmN0aW9uIHNwZWNpZmljIHRhcmdldCBvcHRpb25zIHRvIHVzZSB3aGVuIGNvbXBpbGluZworICAgdGhpcyBmdW5jdGlvbi4gICovCisjZGVmaW5lIERFQ0xfRlVOQ1RJT05fU1BFQ0lGSUNfVEFSR0VUKE5PREUpIFwKKyAgIChGVU5DVElPTl9ERUNMX0NIRUNLIChOT0RFKS0+ZnVuY3Rpb25fZGVjbC5mdW5jdGlvbl9zcGVjaWZpY190YXJnZXQpCisKKy8qIEluIEZVTkNUSU9OX0RFQ0wsIHRoZSBmdW5jdGlvbiBzcGVjaWZpYyBvcHRpbWl6YXRpb24gb3B0aW9ucyB0byB1c2Ugd2hlbgorICAgY29tcGlsaW5nIHRoaXMgZnVuY3Rpb24uICAqLworI2RlZmluZSBERUNMX0ZVTkNUSU9OX1NQRUNJRklDX09QVElNSVpBVElPTihOT0RFKSBcCisgICAoRlVOQ1RJT05fREVDTF9DSEVDSyAoTk9ERSktPmZ1bmN0aW9uX2RlY2wuZnVuY3Rpb25fc3BlY2lmaWNfb3B0aW1pemF0aW9uKQorCisvKiBGVU5DVElPTl9ERUNMIGluaGVyaXRzIGZyb20gREVDTF9OT05fQ09NTU9OIGJlY2F1c2Ugb2YgdGhlIHVzZSBvZiB0aGUKKyAgIGFyZ3VtZW50cy9yZXN1bHQvc2F2ZWRfdHJlZSBmaWVsZHMgYnkgZnJvbnQgZW5kcy4gICBJdCB3YXMgZWl0aGVyIGluaGVyaXQKKyAgIEZVTkNUSU9OX0RFQ0wgZnJvbSBub25fY29tbW9uLCBvciBpbmhlcml0IG5vbl9jb21tb24gZnJvbSBGVU5DVElPTl9ERUNMLAorICAgd2hpY2ggc2VlbWVkIGEgYml0IHN0cmFuZ2UuICAqLworCitzdHJ1Y3QgR1RZKCgpKSB0cmVlX2Z1bmN0aW9uX2RlY2wgeworICBzdHJ1Y3QgdHJlZV9kZWNsX25vbl9jb21tb24gY29tbW9uOworCisgIHN0cnVjdCBmdW5jdGlvbiAqZjsKKworICAvKiBUaGUgcGVyc29uYWxpdHkgZnVuY3Rpb24uIFVzZWQgZm9yIHN0YWNrIHVud2luZGluZy4gKi8KKyAgdHJlZSBwZXJzb25hbGl0eTsKKworICAvKiBGdW5jdGlvbiBzcGVjaWZpYyBvcHRpb25zIHRoYXQgYXJlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbi4gICovCisgIHRyZWUgZnVuY3Rpb25fc3BlY2lmaWNfdGFyZ2V0OwkvKiB0YXJnZXQgb3B0aW9ucyAqLworICB0cmVlIGZ1bmN0aW9uX3NwZWNpZmljX29wdGltaXphdGlvbjsJLyogb3B0aW1pemF0aW9uIG9wdGlvbnMgKi8KKworICAvKiBJbiBhIEZVTkNUSU9OX0RFQ0wgZm9yIHdoaWNoIERFQ0xfQlVJTFRfSU4gaG9sZHMsIHRoaXMgaXMKKyAgICAgREVDTF9GVU5DVElPTl9DT0RFLiAgT3RoZXJ3aXNlIHVudXNlZC4KKyAgICAgPz8/ICBUaGUgYml0ZmllbGQgbmVlZHMgdG8gYmUgYWJsZSB0byBob2xkIGFsbCB0YXJnZXQgZnVuY3Rpb24KKwkgIGNvZGVzIGFzIHdlbGwuICAqLworICBFTlVNX0JJVEZJRUxEKGJ1aWx0X2luX2Z1bmN0aW9uKSBmdW5jdGlvbl9jb2RlIDogMTE7CisgIEVOVU1fQklURklFTEQoYnVpbHRfaW5fY2xhc3MpIGJ1aWx0X2luX2NsYXNzIDogMjsKKworICB1bnNpZ25lZCBzdGF0aWNfY3Rvcl9mbGFnIDogMTsKKyAgdW5zaWduZWQgc3RhdGljX2R0b3JfZmxhZyA6IDE7CisgIHVuc2lnbmVkIHVuaW5saW5hYmxlIDogMTsKKworICB1bnNpZ25lZCBwb3NzaWJseV9pbmxpbmVkIDogMTsKKyAgdW5zaWduZWQgbm92b3BzX2ZsYWcgOiAxOworICB1bnNpZ25lZCByZXR1cm5zX3R3aWNlX2ZsYWcgOiAxOworICB1bnNpZ25lZCBtYWxsb2NfZmxhZyA6IDE7CisgIHVuc2lnbmVkIG9wZXJhdG9yX25ld19mbGFnIDogMTsKKyAgdW5zaWduZWQgZGVjbGFyZWRfaW5saW5lX2ZsYWcgOiAxOworICB1bnNpZ25lZCByZWdkZWNsX2ZsYWcgOiAxOworCisgIHVuc2lnbmVkIG5vX2lubGluZV93YXJuaW5nX2ZsYWcgOiAxOworICB1bnNpZ25lZCBub19pbnN0cnVtZW50X2Z1bmN0aW9uX2VudHJ5X2V4aXQgOiAxOworICB1bnNpZ25lZCBub19saW1pdF9zdGFjayA6IDE7CisgIHVuc2lnbmVkIGRpc3JlZ2FyZF9pbmxpbmVfbGltaXRzIDogMTsKKyAgdW5zaWduZWQgcHVyZV9mbGFnIDogMTsKKyAgdW5zaWduZWQgbG9vcGluZ19jb25zdF9vcl9wdXJlX2ZsYWcgOiAxOworCisKKyAgLyogMyBiaXRzIGxlZnQgKi8KK307CisKKy8qIEZvciBhIFRZUEVfREVDTCwgaG9sZHMgdGhlICJvcmlnaW5hbCIgdHlwZS4gIChUUkVFX1RZUEUgaGFzIHRoZSBjb3B5LikgKi8KKyNkZWZpbmUgREVDTF9PUklHSU5BTF9UWVBFKE5PREUpIChUWVBFX0RFQ0xfQ0hFQ0sgKE5PREUpLT5kZWNsX25vbl9jb21tb24ucmVzdWx0KQorCisvKiBJbiBhIFRZUEVfREVDTCBub256ZXJvIG1lYW5zIHRoZSBkZXRhaWwgaW5mbyBhYm91dCB0aGlzIHR5cGUgaXMgbm90IGR1bXBlZAorICAgaW50byBzdGFicy4gIEluc3RlYWQgaXQgd2lsbCBnZW5lcmF0ZSBjcm9zcyByZWZlcmVuY2UgKCd4Jykgb2YgbmFtZXMuCisgICBUaGlzIHVzZXMgdGhlIHNhbWUgZmxhZyBhcyBERUNMX0VYVEVSTkFMLiAgKi8KKyNkZWZpbmUgVFlQRV9ERUNMX1NVUFBSRVNTX0RFQlVHKE5PREUpIFwKKyAgKFRZUEVfREVDTF9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLmRlY2xfZmxhZ18xKQorCisvKiBHZXR0ZXIgb2YgdGhlIGltcG9ydGVkIGRlY2xhcmF0aW9uIGFzc29jaWF0ZWQgdG8gdGhlCisgICBJTVBPUlRFRF9ERUNMIG5vZGUuICAqLworI2RlZmluZSBJTVBPUlRFRF9ERUNMX0FTU09DSUFURURfREVDTChOT0RFKSBcCisoREVDTF9JTklUSUFMIChJTVBPUlRFRF9ERUNMX0NIRUNLIChOT0RFKSkpCisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfdHlwZV9kZWNsIHsKKyAgc3RydWN0IHRyZWVfZGVjbF9ub25fY29tbW9uIGNvbW1vbjsKKworfTsKKwwKKy8qIEEgU1RBVEVNRU5UX0xJU1QgY2hhaW5zIHN0YXRlbWVudHMgdG9nZXRoZXIgaW4gR0VORVJJQyBhbmQgR0lNUExFLgorICAgVG8gcmVkdWNlIG92ZXJoZWFkLCB0aGUgbm9kZXMgY29udGFpbmluZyB0aGUgc3RhdGVtZW50cyBhcmUgbm90IHRyZWVzLgorICAgVGhpcyBhdm9pZHMgdGhlIG92ZXJoZWFkIG9mIHRyZWVfY29tbW9uIG9uIGFsbCBsaW5rZWQgbGlzdCBlbGVtZW50cy4KKworICAgVXNlIHRoZSBpbnRlcmZhY2UgaW4gdHJlZS1pdGVyYXRvci5oIHRvIGFjY2VzcyB0aGlzIG5vZGUuICAqLworCisjZGVmaW5lIFNUQVRFTUVOVF9MSVNUX0hFQUQoTk9ERSkgXAorICAoU1RBVEVNRU5UX0xJU1RfQ0hFQ0sgKE5PREUpLT5zdG10X2xpc3QuaGVhZCkKKyNkZWZpbmUgU1RBVEVNRU5UX0xJU1RfVEFJTChOT0RFKSBcCisgIChTVEFURU1FTlRfTElTVF9DSEVDSyAoTk9ERSktPnN0bXRfbGlzdC50YWlsKQorCitzdHJ1Y3QgR1RZICgoY2hhaW5fbmV4dCAoIiVoLm5leHQiKSwgY2hhaW5fcHJldiAoIiVoLnByZXYiKSkpIHRyZWVfc3RhdGVtZW50X2xpc3Rfbm9kZQorIHsKKyAgc3RydWN0IHRyZWVfc3RhdGVtZW50X2xpc3Rfbm9kZSAqcHJldjsKKyAgc3RydWN0IHRyZWVfc3RhdGVtZW50X2xpc3Rfbm9kZSAqbmV4dDsKKyAgdHJlZSBzdG10OworfTsKKworc3RydWN0IEdUWSgoKSkgdHJlZV9zdGF0ZW1lbnRfbGlzdAorIHsKKyAgc3RydWN0IHRyZWVfY29tbW9uIGNvbW1vbjsKKyAgc3RydWN0IHRyZWVfc3RhdGVtZW50X2xpc3Rfbm9kZSAqaGVhZDsKKyAgc3RydWN0IHRyZWVfc3RhdGVtZW50X2xpc3Rfbm9kZSAqdGFpbDsKK307CisKKworLyogT3B0aW1pemF0aW9uIG9wdGlvbnMgdXNlZCBieSBhIGZ1bmN0aW9uLiAgKi8KKworc3RydWN0IEdUWSgoKSkgdHJlZV9vcHRpbWl6YXRpb25fb3B0aW9uIHsKKyAgc3RydWN0IHRyZWVfY29tbW9uIGNvbW1vbjsKKworICAvKiBUaGUgb3B0aW1pemF0aW9uIG9wdGlvbnMgdXNlZCBieSB0aGUgdXNlci4gICovCisgIHN0cnVjdCBjbF9vcHRpbWl6YXRpb24gb3B0czsKK307CisKKyNkZWZpbmUgVFJFRV9PUFRJTUlaQVRJT04oTk9ERSkgXAorICAoJk9QVElNSVpBVElPTl9OT0RFX0NIRUNLIChOT0RFKS0+b3B0aW1pemF0aW9uLm9wdHMpCisKKy8qIFJldHVybiBhIHRyZWUgbm9kZSB0aGF0IGVuY2Fwc3VsYXRlcyB0aGUgY3VycmVudCBvcHRpbWl6YXRpb24gb3B0aW9ucy4gICovCitleHRlcm4gdHJlZSBidWlsZF9vcHRpbWl6YXRpb25fbm9kZSAodm9pZCk7CisKKy8qIFRhcmdldCBvcHRpb25zIHVzZWQgYnkgYSBmdW5jdGlvbi4gICovCisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfdGFyZ2V0X29wdGlvbiB7CisgIHN0cnVjdCB0cmVlX2NvbW1vbiBjb21tb247CisKKyAgLyogVGhlIG9wdGltaXphdGlvbiBvcHRpb25zIHVzZWQgYnkgdGhlIHVzZXIuICAqLworICBzdHJ1Y3QgY2xfdGFyZ2V0X29wdGlvbiBvcHRzOworfTsKKworI2RlZmluZSBUUkVFX1RBUkdFVF9PUFRJT04oTk9ERSkgXAorICAoJlRBUkdFVF9PUFRJT05fTk9ERV9DSEVDSyAoTk9ERSktPnRhcmdldF9vcHRpb24ub3B0cykKKworLyogUmV0dXJuIGEgdHJlZSBub2RlIHRoYXQgZW5jYXBzdWxhdGVzIHRoZSBjdXJyZW50IHRhcmdldCBvcHRpb25zLiAgKi8KK2V4dGVybiB0cmVlIGJ1aWxkX3RhcmdldF9vcHRpb25fbm9kZSAodm9pZCk7CisKKwwKKy8qIERlZmluZSB0aGUgb3ZlcmFsbCBjb250ZW50cyBvZiBhIHRyZWUgbm9kZS4KKyAgIEl0IG1heSBiZSBhbnkgb2YgdGhlIHN0cnVjdHVyZXMgZGVjbGFyZWQgYWJvdmUKKyAgIGZvciB2YXJpb3VzIHR5cGVzIG9mIG5vZGUuICAqLworCit1bmlvbiBHVFkgKChwdHJfYWxpYXMgKHVuaW9uIGxhbmdfdHJlZV9ub2RlKSwKKwkJICAgICAgZGVzYyAoInRyZWVfbm9kZV9zdHJ1Y3R1cmUgKCYlaCkiKSkpIHRyZWVfbm9kZSB7CisgIHN0cnVjdCB0cmVlX2Jhc2UgR1RZICgodGFnICgiVFNfQkFTRSIpKSkgYmFzZTsKKyAgc3RydWN0IHRyZWVfY29tbW9uIEdUWSAoKHRhZyAoIlRTX0NPTU1PTiIpKSkgY29tbW9uOworICBzdHJ1Y3QgdHJlZV9pbnRfY3N0IEdUWSAoKHRhZyAoIlRTX0lOVF9DU1QiKSkpIGludF9jc3Q7CisgIHN0cnVjdCB0cmVlX3JlYWxfY3N0IEdUWSAoKHRhZyAoIlRTX1JFQUxfQ1NUIikpKSByZWFsX2NzdDsKKyAgc3RydWN0IHRyZWVfZml4ZWRfY3N0IEdUWSAoKHRhZyAoIlRTX0ZJWEVEX0NTVCIpKSkgZml4ZWRfY3N0OworICBzdHJ1Y3QgdHJlZV92ZWN0b3IgR1RZICgodGFnICgiVFNfVkVDVE9SIikpKSB2ZWN0b3I7CisgIHN0cnVjdCB0cmVlX3N0cmluZyBHVFkgKCh0YWcgKCJUU19TVFJJTkciKSkpIHN0cmluZzsKKyAgc3RydWN0IHRyZWVfY29tcGxleCBHVFkgKCh0YWcgKCJUU19DT01QTEVYIikpKSBjb21wbGV4OworICBzdHJ1Y3QgdHJlZV9pZGVudGlmaWVyIEdUWSAoKHRhZyAoIlRTX0lERU5USUZJRVIiKSkpIGlkZW50aWZpZXI7CisgIHN0cnVjdCB0cmVlX2RlY2xfbWluaW1hbCBHVFkoKHRhZyAoIlRTX0RFQ0xfTUlOSU1BTCIpKSkgZGVjbF9taW5pbWFsOworICBzdHJ1Y3QgdHJlZV9kZWNsX2NvbW1vbiBHVFkgKCh0YWcgKCJUU19ERUNMX0NPTU1PTiIpKSkgZGVjbF9jb21tb247CisgIHN0cnVjdCB0cmVlX2RlY2xfd2l0aF9ydGwgR1RZICgodGFnICgiVFNfREVDTF9XUlRMIikpKSBkZWNsX3dpdGhfcnRsOworICBzdHJ1Y3QgdHJlZV9kZWNsX25vbl9jb21tb24gIEdUWSAoKHRhZyAoIlRTX0RFQ0xfTk9OX0NPTU1PTiIpKSkgZGVjbF9ub25fY29tbW9uOworICBzdHJ1Y3QgdHJlZV9wYXJtX2RlY2wgIEdUWSAgKCh0YWcgKCJUU19QQVJNX0RFQ0wiKSkpIHBhcm1fZGVjbDsKKyAgc3RydWN0IHRyZWVfZGVjbF93aXRoX3ZpcyBHVFkgKCh0YWcgKCJUU19ERUNMX1dJVEhfVklTIikpKSBkZWNsX3dpdGhfdmlzOworICBzdHJ1Y3QgdHJlZV92YXJfZGVjbCBHVFkgKCh0YWcgKCJUU19WQVJfREVDTCIpKSkgdmFyX2RlY2w7CisgIHN0cnVjdCB0cmVlX2ZpZWxkX2RlY2wgR1RZICgodGFnICgiVFNfRklFTERfREVDTCIpKSkgZmllbGRfZGVjbDsKKyAgc3RydWN0IHRyZWVfbGFiZWxfZGVjbCBHVFkgKCh0YWcgKCJUU19MQUJFTF9ERUNMIikpKSBsYWJlbF9kZWNsOworICBzdHJ1Y3QgdHJlZV9yZXN1bHRfZGVjbCBHVFkgKCh0YWcgKCJUU19SRVNVTFRfREVDTCIpKSkgcmVzdWx0X2RlY2w7CisgIHN0cnVjdCB0cmVlX2NvbnN0X2RlY2wgR1RZICgodGFnICgiVFNfQ09OU1RfREVDTCIpKSkgY29uc3RfZGVjbDsKKyAgc3RydWN0IHRyZWVfdHlwZV9kZWNsIEdUWSAoKHRhZyAoIlRTX1RZUEVfREVDTCIpKSkgdHlwZV9kZWNsOworICBzdHJ1Y3QgdHJlZV9mdW5jdGlvbl9kZWNsIEdUWSAoKHRhZyAoIlRTX0ZVTkNUSU9OX0RFQ0wiKSkpIGZ1bmN0aW9uX2RlY2w7CisgIHN0cnVjdCB0cmVlX3R5cGUgR1RZICgodGFnICgiVFNfVFlQRSIpKSkgdHlwZTsKKyAgc3RydWN0IHRyZWVfbGlzdCBHVFkgKCh0YWcgKCJUU19MSVNUIikpKSBsaXN0OworICBzdHJ1Y3QgdHJlZV92ZWMgR1RZICgodGFnICgiVFNfVkVDIikpKSB2ZWM7CisgIHN0cnVjdCB0cmVlX2V4cCBHVFkgKCh0YWcgKCJUU19FWFAiKSkpIGV4cDsKKyAgc3RydWN0IHRyZWVfc3NhX25hbWUgR1RZICgodGFnICgiVFNfU1NBX05BTUUiKSkpIHNzYV9uYW1lOworICBzdHJ1Y3QgdHJlZV9ibG9jayBHVFkgKCh0YWcgKCJUU19CTE9DSyIpKSkgYmxvY2s7CisgIHN0cnVjdCB0cmVlX2JpbmZvIEdUWSAoKHRhZyAoIlRTX0JJTkZPIikpKSBiaW5mbzsKKyAgc3RydWN0IHRyZWVfc3RhdGVtZW50X2xpc3QgR1RZICgodGFnICgiVFNfU1RBVEVNRU5UX0xJU1QiKSkpIHN0bXRfbGlzdDsKKyAgc3RydWN0IHRyZWVfY29uc3RydWN0b3IgR1RZICgodGFnICgiVFNfQ09OU1RSVUNUT1IiKSkpIGNvbnN0cnVjdG9yOworICBzdHJ1Y3QgdHJlZV9vbXBfY2xhdXNlIEdUWSAoKHRhZyAoIlRTX09NUF9DTEFVU0UiKSkpIG9tcF9jbGF1c2U7CisgIHN0cnVjdCB0cmVlX29wdGltaXphdGlvbl9vcHRpb24gR1RZICgodGFnICgiVFNfT1BUSU1JWkFUSU9OIikpKSBvcHRpbWl6YXRpb247CisgIHN0cnVjdCB0cmVlX3RhcmdldF9vcHRpb24gR1RZICgodGFnICgiVFNfVEFSR0VUX09QVElPTiIpKSkgdGFyZ2V0X29wdGlvbjsKK307CisMCisvKiBTdGFuZGFyZCBuYW1lZCBvciBuYW1lbGVzcyBkYXRhIHR5cGVzIG9mIHRoZSBDIGNvbXBpbGVyLiAgKi8KKworZW51bSB0cmVlX2luZGV4Cit7CisgIFRJX0VSUk9SX01BUkssCisgIFRJX0lOVFFJX1RZUEUsCisgIFRJX0lOVEhJX1RZUEUsCisgIFRJX0lOVFNJX1RZUEUsCisgIFRJX0lOVERJX1RZUEUsCisgIFRJX0lOVFRJX1RZUEUsCisKKyAgVElfVUlOVFFJX1RZUEUsCisgIFRJX1VJTlRISV9UWVBFLAorICBUSV9VSU5UU0lfVFlQRSwKKyAgVElfVUlOVERJX1RZUEUsCisgIFRJX1VJTlRUSV9UWVBFLAorCisgIFRJX1VJTlQzMl9UWVBFLAorICBUSV9VSU5UNjRfVFlQRSwKKworICBUSV9JTlRFR0VSX1pFUk8sCisgIFRJX0lOVEVHRVJfT05FLAorICBUSV9JTlRFR0VSX01JTlVTX09ORSwKKyAgVElfTlVMTF9QT0lOVEVSLAorCisgIFRJX1NJWkVfWkVSTywKKyAgVElfU0laRV9PTkUsCisKKyAgVElfQklUU0laRV9aRVJPLAorICBUSV9CSVRTSVpFX09ORSwKKyAgVElfQklUU0laRV9VTklULAorCisgIFRJX1BVQkxJQywKKyAgVElfUFJPVEVDVEVELAorICBUSV9QUklWQVRFLAorCisgIFRJX0JPT0xFQU5fRkFMU0UsCisgIFRJX0JPT0xFQU5fVFJVRSwKKworICBUSV9DT01QTEVYX0lOVEVHRVJfVFlQRSwKKyAgVElfQ09NUExFWF9GTE9BVF9UWVBFLAorICBUSV9DT01QTEVYX0RPVUJMRV9UWVBFLAorICBUSV9DT01QTEVYX0xPTkdfRE9VQkxFX1RZUEUsCisKKyAgVElfRkxPQVRfVFlQRSwKKyAgVElfRE9VQkxFX1RZUEUsCisgIFRJX0xPTkdfRE9VQkxFX1RZUEUsCisKKyAgVElfRkxPQVRfUFRSX1RZUEUsCisgIFRJX0RPVUJMRV9QVFJfVFlQRSwKKyAgVElfTE9OR19ET1VCTEVfUFRSX1RZUEUsCisgIFRJX0lOVEVHRVJfUFRSX1RZUEUsCisKKyAgVElfVk9JRF9UWVBFLAorICBUSV9QVFJfVFlQRSwKKyAgVElfQ09OU1RfUFRSX1RZUEUsCisgIFRJX1NJWkVfVFlQRSwKKyAgVElfUElEX1RZUEUsCisgIFRJX1BUUkRJRkZfVFlQRSwKKyAgVElfVkFfTElTVF9UWVBFLAorICBUSV9WQV9MSVNUX0dQUl9DT1VOVEVSX0ZJRUxELAorICBUSV9WQV9MSVNUX0ZQUl9DT1VOVEVSX0ZJRUxELAorICBUSV9CT09MRUFOX1RZUEUsCisgIFRJX0ZJTEVQVFJfVFlQRSwKKworICBUSV9ERkxPQVQzMl9UWVBFLAorICBUSV9ERkxPQVQ2NF9UWVBFLAorICBUSV9ERkxPQVQxMjhfVFlQRSwKKyAgVElfREZMT0FUMzJfUFRSX1RZUEUsCisgIFRJX0RGTE9BVDY0X1BUUl9UWVBFLAorICBUSV9ERkxPQVQxMjhfUFRSX1RZUEUsCisKKyAgVElfVk9JRF9MSVNUX05PREUsCisKKyAgVElfTUFJTl9JREVOVElGSUVSLAorCisgIFRJX1NBVF9TRlJBQ1RfVFlQRSwKKyAgVElfU0FUX0ZSQUNUX1RZUEUsCisgIFRJX1NBVF9MRlJBQ1RfVFlQRSwKKyAgVElfU0FUX0xMRlJBQ1RfVFlQRSwKKyAgVElfU0FUX1VTRlJBQ1RfVFlQRSwKKyAgVElfU0FUX1VGUkFDVF9UWVBFLAorICBUSV9TQVRfVUxGUkFDVF9UWVBFLAorICBUSV9TQVRfVUxMRlJBQ1RfVFlQRSwKKyAgVElfU0ZSQUNUX1RZUEUsCisgIFRJX0ZSQUNUX1RZUEUsCisgIFRJX0xGUkFDVF9UWVBFLAorICBUSV9MTEZSQUNUX1RZUEUsCisgIFRJX1VTRlJBQ1RfVFlQRSwKKyAgVElfVUZSQUNUX1RZUEUsCisgIFRJX1VMRlJBQ1RfVFlQRSwKKyAgVElfVUxMRlJBQ1RfVFlQRSwKKyAgVElfU0FUX1NBQ0NVTV9UWVBFLAorICBUSV9TQVRfQUNDVU1fVFlQRSwKKyAgVElfU0FUX0xBQ0NVTV9UWVBFLAorICBUSV9TQVRfTExBQ0NVTV9UWVBFLAorICBUSV9TQVRfVVNBQ0NVTV9UWVBFLAorICBUSV9TQVRfVUFDQ1VNX1RZUEUsCisgIFRJX1NBVF9VTEFDQ1VNX1RZUEUsCisgIFRJX1NBVF9VTExBQ0NVTV9UWVBFLAorICBUSV9TQUNDVU1fVFlQRSwKKyAgVElfQUNDVU1fVFlQRSwKKyAgVElfTEFDQ1VNX1RZUEUsCisgIFRJX0xMQUNDVU1fVFlQRSwKKyAgVElfVVNBQ0NVTV9UWVBFLAorICBUSV9VQUNDVU1fVFlQRSwKKyAgVElfVUxBQ0NVTV9UWVBFLAorICBUSV9VTExBQ0NVTV9UWVBFLAorICBUSV9RUV9UWVBFLAorICBUSV9IUV9UWVBFLAorICBUSV9TUV9UWVBFLAorICBUSV9EUV9UWVBFLAorICBUSV9UUV9UWVBFLAorICBUSV9VUVFfVFlQRSwKKyAgVElfVUhRX1RZUEUsCisgIFRJX1VTUV9UWVBFLAorICBUSV9VRFFfVFlQRSwKKyAgVElfVVRRX1RZUEUsCisgIFRJX1NBVF9RUV9UWVBFLAorICBUSV9TQVRfSFFfVFlQRSwKKyAgVElfU0FUX1NRX1RZUEUsCisgIFRJX1NBVF9EUV9UWVBFLAorICBUSV9TQVRfVFFfVFlQRSwKKyAgVElfU0FUX1VRUV9UWVBFLAorICBUSV9TQVRfVUhRX1RZUEUsCisgIFRJX1NBVF9VU1FfVFlQRSwKKyAgVElfU0FUX1VEUV9UWVBFLAorICBUSV9TQVRfVVRRX1RZUEUsCisgIFRJX0hBX1RZUEUsCisgIFRJX1NBX1RZUEUsCisgIFRJX0RBX1RZUEUsCisgIFRJX1RBX1RZUEUsCisgIFRJX1VIQV9UWVBFLAorICBUSV9VU0FfVFlQRSwKKyAgVElfVURBX1RZUEUsCisgIFRJX1VUQV9UWVBFLAorICBUSV9TQVRfSEFfVFlQRSwKKyAgVElfU0FUX1NBX1RZUEUsCisgIFRJX1NBVF9EQV9UWVBFLAorICBUSV9TQVRfVEFfVFlQRSwKKyAgVElfU0FUX1VIQV9UWVBFLAorICBUSV9TQVRfVVNBX1RZUEUsCisgIFRJX1NBVF9VREFfVFlQRSwKKyAgVElfU0FUX1VUQV9UWVBFLAorCisgIFRJX09QVElNSVpBVElPTl9ERUZBVUxULAorICBUSV9PUFRJTUlaQVRJT05fQ1VSUkVOVCwKKyAgVElfVEFSR0VUX09QVElPTl9ERUZBVUxULAorICBUSV9UQVJHRVRfT1BUSU9OX0NVUlJFTlQsCisgIFRJX0NVUlJFTlRfVEFSR0VUX1BSQUdNQSwKKyAgVElfQ1VSUkVOVF9PUFRJTUlaRV9QUkFHTUEsCisKKyAgVElfTUFYCit9OworCitleHRlcm4gR1RZKCgpKSB0cmVlIGdsb2JhbF90cmVlc1tUSV9NQVhdOworCisjZGVmaW5lIGVycm9yX21hcmtfbm9kZQkJCWdsb2JhbF90cmVlc1tUSV9FUlJPUl9NQVJLXQorCisjZGVmaW5lIGludFFJX3R5cGVfbm9kZQkJCWdsb2JhbF90cmVlc1tUSV9JTlRRSV9UWVBFXQorI2RlZmluZSBpbnRISV90eXBlX25vZGUJCQlnbG9iYWxfdHJlZXNbVElfSU5USElfVFlQRV0KKyNkZWZpbmUgaW50U0lfdHlwZV9ub2RlCQkJZ2xvYmFsX3RyZWVzW1RJX0lOVFNJX1RZUEVdCisjZGVmaW5lIGludERJX3R5cGVfbm9kZQkJCWdsb2JhbF90cmVlc1tUSV9JTlRESV9UWVBFXQorI2RlZmluZSBpbnRUSV90eXBlX25vZGUJCQlnbG9iYWxfdHJlZXNbVElfSU5UVElfVFlQRV0KKworI2RlZmluZSB1bnNpZ25lZF9pbnRRSV90eXBlX25vZGUJZ2xvYmFsX3RyZWVzW1RJX1VJTlRRSV9UWVBFXQorI2RlZmluZSB1bnNpZ25lZF9pbnRISV90eXBlX25vZGUJZ2xvYmFsX3RyZWVzW1RJX1VJTlRISV9UWVBFXQorI2RlZmluZSB1bnNpZ25lZF9pbnRTSV90eXBlX25vZGUJZ2xvYmFsX3RyZWVzW1RJX1VJTlRTSV9UWVBFXQorI2RlZmluZSB1bnNpZ25lZF9pbnRESV90eXBlX25vZGUJZ2xvYmFsX3RyZWVzW1RJX1VJTlRESV9UWVBFXQorI2RlZmluZSB1bnNpZ25lZF9pbnRUSV90eXBlX25vZGUJZ2xvYmFsX3RyZWVzW1RJX1VJTlRUSV9UWVBFXQorCisjZGVmaW5lIHVpbnQzMl90eXBlX25vZGUJCWdsb2JhbF90cmVlc1tUSV9VSU5UMzJfVFlQRV0KKyNkZWZpbmUgdWludDY0X3R5cGVfbm9kZQkJZ2xvYmFsX3RyZWVzW1RJX1VJTlQ2NF9UWVBFXQorCisjZGVmaW5lIGludGVnZXJfemVyb19ub2RlCQlnbG9iYWxfdHJlZXNbVElfSU5URUdFUl9aRVJPXQorI2RlZmluZSBpbnRlZ2VyX29uZV9ub2RlCQlnbG9iYWxfdHJlZXNbVElfSU5URUdFUl9PTkVdCisjZGVmaW5lIGludGVnZXJfbWludXNfb25lX25vZGUJCWdsb2JhbF90cmVlc1tUSV9JTlRFR0VSX01JTlVTX09ORV0KKyNkZWZpbmUgc2l6ZV96ZXJvX25vZGUJCQlnbG9iYWxfdHJlZXNbVElfU0laRV9aRVJPXQorI2RlZmluZSBzaXplX29uZV9ub2RlCQkJZ2xvYmFsX3RyZWVzW1RJX1NJWkVfT05FXQorI2RlZmluZSBiaXRzaXplX3plcm9fbm9kZQkJZ2xvYmFsX3RyZWVzW1RJX0JJVFNJWkVfWkVST10KKyNkZWZpbmUgYml0c2l6ZV9vbmVfbm9kZQkJZ2xvYmFsX3RyZWVzW1RJX0JJVFNJWkVfT05FXQorI2RlZmluZSBiaXRzaXplX3VuaXRfbm9kZQkJZ2xvYmFsX3RyZWVzW1RJX0JJVFNJWkVfVU5JVF0KKworLyogQmFzZSBhY2Nlc3Mgbm9kZXMuICAqLworI2RlZmluZSBhY2Nlc3NfcHVibGljX25vZGUJCWdsb2JhbF90cmVlc1tUSV9QVUJMSUNdCisjZGVmaW5lIGFjY2Vzc19wcm90ZWN0ZWRfbm9kZQkgICAgICAgIGdsb2JhbF90cmVlc1tUSV9QUk9URUNURURdCisjZGVmaW5lIGFjY2Vzc19wcml2YXRlX25vZGUJCWdsb2JhbF90cmVlc1tUSV9QUklWQVRFXQorCisjZGVmaW5lIG51bGxfcG9pbnRlcl9ub2RlCQlnbG9iYWxfdHJlZXNbVElfTlVMTF9QT0lOVEVSXQorCisjZGVmaW5lIGZsb2F0X3R5cGVfbm9kZQkJCWdsb2JhbF90cmVlc1tUSV9GTE9BVF9UWVBFXQorI2RlZmluZSBkb3VibGVfdHlwZV9ub2RlCQlnbG9iYWxfdHJlZXNbVElfRE9VQkxFX1RZUEVdCisjZGVmaW5lIGxvbmdfZG91YmxlX3R5cGVfbm9kZQkJZ2xvYmFsX3RyZWVzW1RJX0xPTkdfRE9VQkxFX1RZUEVdCisKKyNkZWZpbmUgZmxvYXRfcHRyX3R5cGVfbm9kZQkJZ2xvYmFsX3RyZWVzW1RJX0ZMT0FUX1BUUl9UWVBFXQorI2RlZmluZSBkb3VibGVfcHRyX3R5cGVfbm9kZQkJZ2xvYmFsX3RyZWVzW1RJX0RPVUJMRV9QVFJfVFlQRV0KKyNkZWZpbmUgbG9uZ19kb3VibGVfcHRyX3R5cGVfbm9kZQlnbG9iYWxfdHJlZXNbVElfTE9OR19ET1VCTEVfUFRSX1RZUEVdCisjZGVmaW5lIGludGVnZXJfcHRyX3R5cGVfbm9kZQkJZ2xvYmFsX3RyZWVzW1RJX0lOVEVHRVJfUFRSX1RZUEVdCisKKyNkZWZpbmUgY29tcGxleF9pbnRlZ2VyX3R5cGVfbm9kZQlnbG9iYWxfdHJlZXNbVElfQ09NUExFWF9JTlRFR0VSX1RZUEVdCisjZGVmaW5lIGNvbXBsZXhfZmxvYXRfdHlwZV9ub2RlCQlnbG9iYWxfdHJlZXNbVElfQ09NUExFWF9GTE9BVF9UWVBFXQorI2RlZmluZSBjb21wbGV4X2RvdWJsZV90eXBlX25vZGUJZ2xvYmFsX3RyZWVzW1RJX0NPTVBMRVhfRE9VQkxFX1RZUEVdCisjZGVmaW5lIGNvbXBsZXhfbG9uZ19kb3VibGVfdHlwZV9ub2RlCWdsb2JhbF90cmVlc1tUSV9DT01QTEVYX0xPTkdfRE9VQkxFX1RZUEVdCisKKyNkZWZpbmUgdm9pZF90eXBlX25vZGUJCQlnbG9iYWxfdHJlZXNbVElfVk9JRF9UWVBFXQorLyogVGhlIEMgdHlwZSBgdm9pZCAqJy4gICovCisjZGVmaW5lIHB0cl90eXBlX25vZGUJCQlnbG9iYWxfdHJlZXNbVElfUFRSX1RZUEVdCisvKiBUaGUgQyB0eXBlIGBjb25zdCB2b2lkIConLiAgKi8KKyNkZWZpbmUgY29uc3RfcHRyX3R5cGVfbm9kZQkJZ2xvYmFsX3RyZWVzW1RJX0NPTlNUX1BUUl9UWVBFXQorLyogVGhlIEMgdHlwZSBgc2l6ZV90Jy4gICovCisjZGVmaW5lIHNpemVfdHlwZV9ub2RlICAgICAgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1NJWkVfVFlQRV0KKyNkZWZpbmUgcGlkX3R5cGVfbm9kZSAgICAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfUElEX1RZUEVdCisjZGVmaW5lIHB0cmRpZmZfdHlwZV9ub2RlCQlnbG9iYWxfdHJlZXNbVElfUFRSRElGRl9UWVBFXQorI2RlZmluZSB2YV9saXN0X3R5cGVfbm9kZQkJZ2xvYmFsX3RyZWVzW1RJX1ZBX0xJU1RfVFlQRV0KKyNkZWZpbmUgdmFfbGlzdF9ncHJfY291bnRlcl9maWVsZAlnbG9iYWxfdHJlZXNbVElfVkFfTElTVF9HUFJfQ09VTlRFUl9GSUVMRF0KKyNkZWZpbmUgdmFfbGlzdF9mcHJfY291bnRlcl9maWVsZAlnbG9iYWxfdHJlZXNbVElfVkFfTElTVF9GUFJfQ09VTlRFUl9GSUVMRF0KKy8qIFRoZSBDIHR5cGUgYEZJTEUgKicuICAqLworI2RlZmluZSBmaWxlcHRyX3R5cGVfbm9kZQkJZ2xvYmFsX3RyZWVzW1RJX0ZJTEVQVFJfVFlQRV0KKworI2RlZmluZSBib29sZWFuX3R5cGVfbm9kZQkJZ2xvYmFsX3RyZWVzW1RJX0JPT0xFQU5fVFlQRV0KKyNkZWZpbmUgYm9vbGVhbl9mYWxzZV9ub2RlCQlnbG9iYWxfdHJlZXNbVElfQk9PTEVBTl9GQUxTRV0KKyNkZWZpbmUgYm9vbGVhbl90cnVlX25vZGUJCWdsb2JhbF90cmVlc1tUSV9CT09MRUFOX1RSVUVdCisKKy8qIFRoZSBkZWNpbWFsIGZsb2F0aW5nIHBvaW50IHR5cGVzLiAqLworI2RlZmluZSBkZmxvYXQzMl90eXBlX25vZGUgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9ERkxPQVQzMl9UWVBFXQorI2RlZmluZSBkZmxvYXQ2NF90eXBlX25vZGUgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9ERkxPQVQ2NF9UWVBFXQorI2RlZmluZSBkZmxvYXQxMjhfdHlwZV9ub2RlICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9ERkxPQVQxMjhfVFlQRV0KKyNkZWZpbmUgZGZsb2F0MzJfcHRyX3R5cGVfbm9kZSAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfREZMT0FUMzJfUFRSX1RZUEVdCisjZGVmaW5lIGRmbG9hdDY0X3B0cl90eXBlX25vZGUgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX0RGTE9BVDY0X1BUUl9UWVBFXQorI2RlZmluZSBkZmxvYXQxMjhfcHRyX3R5cGVfbm9kZSAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9ERkxPQVQxMjhfUFRSX1RZUEVdCisKKy8qIFRoZSBmaXhlZC1wb2ludCB0eXBlcy4gICovCisjZGVmaW5lIHNhdF9zaG9ydF9mcmFjdF90eXBlX25vZGUgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1NBVF9TRlJBQ1RfVFlQRV0KKyNkZWZpbmUgc2F0X2ZyYWN0X3R5cGVfbm9kZSAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfU0FUX0ZSQUNUX1RZUEVdCisjZGVmaW5lIHNhdF9sb25nX2ZyYWN0X3R5cGVfbm9kZSAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1NBVF9MRlJBQ1RfVFlQRV0KKyNkZWZpbmUgc2F0X2xvbmdfbG9uZ19mcmFjdF90eXBlX25vZGUgICBnbG9iYWxfdHJlZXNbVElfU0FUX0xMRlJBQ1RfVFlQRV0KKyNkZWZpbmUgc2F0X3Vuc2lnbmVkX3Nob3J0X2ZyYWN0X3R5cGVfbm9kZSBcCisJCQkJCWdsb2JhbF90cmVlc1tUSV9TQVRfVVNGUkFDVF9UWVBFXQorI2RlZmluZSBzYXRfdW5zaWduZWRfZnJhY3RfdHlwZV9ub2RlICAgIGdsb2JhbF90cmVlc1tUSV9TQVRfVUZSQUNUX1RZUEVdCisjZGVmaW5lIHNhdF91bnNpZ25lZF9sb25nX2ZyYWN0X3R5cGVfbm9kZSBcCisJCQkJCWdsb2JhbF90cmVlc1tUSV9TQVRfVUxGUkFDVF9UWVBFXQorI2RlZmluZSBzYXRfdW5zaWduZWRfbG9uZ19sb25nX2ZyYWN0X3R5cGVfbm9kZSBcCisJCQkJCWdsb2JhbF90cmVlc1tUSV9TQVRfVUxMRlJBQ1RfVFlQRV0KKyNkZWZpbmUgc2hvcnRfZnJhY3RfdHlwZV9ub2RlICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfU0ZSQUNUX1RZUEVdCisjZGVmaW5lIGZyYWN0X3R5cGVfbm9kZSAgICAgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX0ZSQUNUX1RZUEVdCisjZGVmaW5lIGxvbmdfZnJhY3RfdHlwZV9ub2RlICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX0xGUkFDVF9UWVBFXQorI2RlZmluZSBsb25nX2xvbmdfZnJhY3RfdHlwZV9ub2RlICAgICAgIGdsb2JhbF90cmVlc1tUSV9MTEZSQUNUX1RZUEVdCisjZGVmaW5lIHVuc2lnbmVkX3Nob3J0X2ZyYWN0X3R5cGVfbm9kZSAgZ2xvYmFsX3RyZWVzW1RJX1VTRlJBQ1RfVFlQRV0KKyNkZWZpbmUgdW5zaWduZWRfZnJhY3RfdHlwZV9ub2RlICAgICAgICBnbG9iYWxfdHJlZXNbVElfVUZSQUNUX1RZUEVdCisjZGVmaW5lIHVuc2lnbmVkX2xvbmdfZnJhY3RfdHlwZV9ub2RlICAgZ2xvYmFsX3RyZWVzW1RJX1VMRlJBQ1RfVFlQRV0KKyNkZWZpbmUgdW5zaWduZWRfbG9uZ19sb25nX2ZyYWN0X3R5cGVfbm9kZSBcCisJCQkJCWdsb2JhbF90cmVlc1tUSV9VTExGUkFDVF9UWVBFXQorI2RlZmluZSBzYXRfc2hvcnRfYWNjdW1fdHlwZV9ub2RlICAgICAgIGdsb2JhbF90cmVlc1tUSV9TQVRfU0FDQ1VNX1RZUEVdCisjZGVmaW5lIHNhdF9hY2N1bV90eXBlX25vZGUgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1NBVF9BQ0NVTV9UWVBFXQorI2RlZmluZSBzYXRfbG9uZ19hY2N1bV90eXBlX25vZGUgICAgICAgIGdsb2JhbF90cmVlc1tUSV9TQVRfTEFDQ1VNX1RZUEVdCisjZGVmaW5lIHNhdF9sb25nX2xvbmdfYWNjdW1fdHlwZV9ub2RlICAgZ2xvYmFsX3RyZWVzW1RJX1NBVF9MTEFDQ1VNX1RZUEVdCisjZGVmaW5lIHNhdF91bnNpZ25lZF9zaG9ydF9hY2N1bV90eXBlX25vZGUgXAorCQkJCQlnbG9iYWxfdHJlZXNbVElfU0FUX1VTQUNDVU1fVFlQRV0KKyNkZWZpbmUgc2F0X3Vuc2lnbmVkX2FjY3VtX3R5cGVfbm9kZSAgICBnbG9iYWxfdHJlZXNbVElfU0FUX1VBQ0NVTV9UWVBFXQorI2RlZmluZSBzYXRfdW5zaWduZWRfbG9uZ19hY2N1bV90eXBlX25vZGUgXAorCQkJCQlnbG9iYWxfdHJlZXNbVElfU0FUX1VMQUNDVU1fVFlQRV0KKyNkZWZpbmUgc2F0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hY2N1bV90eXBlX25vZGUgXAorCQkJCQlnbG9iYWxfdHJlZXNbVElfU0FUX1VMTEFDQ1VNX1RZUEVdCisjZGVmaW5lIHNob3J0X2FjY3VtX3R5cGVfbm9kZSAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1NBQ0NVTV9UWVBFXQorI2RlZmluZSBhY2N1bV90eXBlX25vZGUgICAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9BQ0NVTV9UWVBFXQorI2RlZmluZSBsb25nX2FjY3VtX3R5cGVfbm9kZSAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9MQUNDVU1fVFlQRV0KKyNkZWZpbmUgbG9uZ19sb25nX2FjY3VtX3R5cGVfbm9kZSAgICAgICBnbG9iYWxfdHJlZXNbVElfTExBQ0NVTV9UWVBFXQorI2RlZmluZSB1bnNpZ25lZF9zaG9ydF9hY2N1bV90eXBlX25vZGUgIGdsb2JhbF90cmVlc1tUSV9VU0FDQ1VNX1RZUEVdCisjZGVmaW5lIHVuc2lnbmVkX2FjY3VtX3R5cGVfbm9kZSAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1VBQ0NVTV9UWVBFXQorI2RlZmluZSB1bnNpZ25lZF9sb25nX2FjY3VtX3R5cGVfbm9kZSAgIGdsb2JhbF90cmVlc1tUSV9VTEFDQ1VNX1RZUEVdCisjZGVmaW5lIHVuc2lnbmVkX2xvbmdfbG9uZ19hY2N1bV90eXBlX25vZGUgXAorCQkJCQlnbG9iYWxfdHJlZXNbVElfVUxMQUNDVU1fVFlQRV0KKyNkZWZpbmUgcXFfdHlwZV9ub2RlICAgICAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfUVFfVFlQRV0KKyNkZWZpbmUgaHFfdHlwZV9ub2RlICAgICAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfSFFfVFlQRV0KKyNkZWZpbmUgc3FfdHlwZV9ub2RlICAgICAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfU1FfVFlQRV0KKyNkZWZpbmUgZHFfdHlwZV9ub2RlICAgICAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfRFFfVFlQRV0KKyNkZWZpbmUgdHFfdHlwZV9ub2RlICAgICAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfVFFfVFlQRV0KKyNkZWZpbmUgdXFxX3R5cGVfbm9kZSAgICAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfVVFRX1RZUEVdCisjZGVmaW5lIHVocV90eXBlX25vZGUgICAgICAgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1VIUV9UWVBFXQorI2RlZmluZSB1c3FfdHlwZV9ub2RlICAgICAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9VU1FfVFlQRV0KKyNkZWZpbmUgdWRxX3R5cGVfbm9kZSAgICAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfVURRX1RZUEVdCisjZGVmaW5lIHV0cV90eXBlX25vZGUgICAgICAgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1VUUV9UWVBFXQorI2RlZmluZSBzYXRfcXFfdHlwZV9ub2RlICAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9TQVRfUVFfVFlQRV0KKyNkZWZpbmUgc2F0X2hxX3R5cGVfbm9kZSAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfU0FUX0hRX1RZUEVdCisjZGVmaW5lIHNhdF9zcV90eXBlX25vZGUgICAgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1NBVF9TUV9UWVBFXQorI2RlZmluZSBzYXRfZHFfdHlwZV9ub2RlICAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9TQVRfRFFfVFlQRV0KKyNkZWZpbmUgc2F0X3RxX3R5cGVfbm9kZSAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfU0FUX1RRX1RZUEVdCisjZGVmaW5lIHNhdF91cXFfdHlwZV9ub2RlICAgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1NBVF9VUVFfVFlQRV0KKyNkZWZpbmUgc2F0X3VocV90eXBlX25vZGUgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfU0FUX1VIUV9UWVBFXQorI2RlZmluZSBzYXRfdXNxX3R5cGVfbm9kZSAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9TQVRfVVNRX1RZUEVdCisjZGVmaW5lIHNhdF91ZHFfdHlwZV9ub2RlICAgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1NBVF9VRFFfVFlQRV0KKyNkZWZpbmUgc2F0X3V0cV90eXBlX25vZGUgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfU0FUX1VUUV9UWVBFXQorI2RlZmluZSBoYV90eXBlX25vZGUgICAgICAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9IQV9UWVBFXQorI2RlZmluZSBzYV90eXBlX25vZGUgICAgICAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9TQV9UWVBFXQorI2RlZmluZSBkYV90eXBlX25vZGUgICAgICAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9EQV9UWVBFXQorI2RlZmluZSB0YV90eXBlX25vZGUgICAgICAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9UQV9UWVBFXQorI2RlZmluZSB1aGFfdHlwZV9ub2RlICAgICAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9VSEFfVFlQRV0KKyNkZWZpbmUgdXNhX3R5cGVfbm9kZSAgICAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfVVNBX1RZUEVdCisjZGVmaW5lIHVkYV90eXBlX25vZGUgICAgICAgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1VEQV9UWVBFXQorI2RlZmluZSB1dGFfdHlwZV9ub2RlICAgICAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9VVEFfVFlQRV0KKyNkZWZpbmUgc2F0X2hhX3R5cGVfbm9kZSAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfU0FUX0hBX1RZUEVdCisjZGVmaW5lIHNhdF9zYV90eXBlX25vZGUgICAgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1NBVF9TQV9UWVBFXQorI2RlZmluZSBzYXRfZGFfdHlwZV9ub2RlICAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9TQVRfREFfVFlQRV0KKyNkZWZpbmUgc2F0X3RhX3R5cGVfbm9kZSAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfU0FUX1RBX1RZUEVdCisjZGVmaW5lIHNhdF91aGFfdHlwZV9ub2RlICAgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1NBVF9VSEFfVFlQRV0KKyNkZWZpbmUgc2F0X3VzYV90eXBlX25vZGUgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfU0FUX1VTQV9UWVBFXQorI2RlZmluZSBzYXRfdWRhX3R5cGVfbm9kZSAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9TQVRfVURBX1RZUEVdCisjZGVmaW5lIHNhdF91dGFfdHlwZV9ub2RlICAgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1NBVF9VVEFfVFlQRV0KKworLyogVGhlIG5vZGUgdGhhdCBzaG91bGQgYmUgcGxhY2VkIGF0IHRoZSBlbmQgb2YgYSBwYXJhbWV0ZXIgbGlzdCB0bworICAgaW5kaWNhdGUgdGhhdCB0aGUgZnVuY3Rpb24gZG9lcyBub3QgdGFrZSBhIHZhcmlhYmxlIG51bWJlciBvZgorICAgYXJndW1lbnRzLiAgVGhlIFRSRUVfVkFMVUUgd2lsbCBiZSB2b2lkX3R5cGVfbm9kZSBhbmQgdGhlcmUgd2lsbCBiZQorICAgbm8gVFJFRV9DSEFJTi4gIExhbmd1YWdlLWluZGVwZW5kZW50IGNvZGUgc2hvdWxkIG5vdCBhc3N1bWUKKyAgIGFueXRoaW5nIGVsc2UgYWJvdXQgdGhpcyBub2RlLiAgKi8KKyNkZWZpbmUgdm9pZF9saXN0X25vZGUgICAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfVk9JRF9MSVNUX05PREVdCisKKyNkZWZpbmUgbWFpbl9pZGVudGlmaWVyX25vZGUJCWdsb2JhbF90cmVlc1tUSV9NQUlOX0lERU5USUZJRVJdCisjZGVmaW5lIE1BSU5fTkFNRV9QKE5PREUpIChJREVOVElGSUVSX05PREVfQ0hFQ0sgKE5PREUpID09IG1haW5faWRlbnRpZmllcl9ub2RlKQorCisvKiBPcHRpbWl6YXRpb24gb3B0aW9ucyAoT1BUSU1JWkFUSU9OX05PREUpIHRvIHVzZSBmb3IgZGVmYXVsdCBhbmQgY3VycmVudAorICAgZnVuY3Rpb25zLiAgKi8KKyNkZWZpbmUgb3B0aW1pemF0aW9uX2RlZmF1bHRfbm9kZQlnbG9iYWxfdHJlZXNbVElfT1BUSU1JWkFUSU9OX0RFRkFVTFRdCisjZGVmaW5lIG9wdGltaXphdGlvbl9jdXJyZW50X25vZGUJZ2xvYmFsX3RyZWVzW1RJX09QVElNSVpBVElPTl9DVVJSRU5UXQorCisvKiBEZWZhdWx0L2N1cnJlbnQgdGFyZ2V0IG9wdGlvbnMgKFRBUkdFVF9PUFRJT05fTk9ERSkuICAqLworI2RlZmluZSB0YXJnZXRfb3B0aW9uX2RlZmF1bHRfbm9kZQlnbG9iYWxfdHJlZXNbVElfVEFSR0VUX09QVElPTl9ERUZBVUxUXQorI2RlZmluZSB0YXJnZXRfb3B0aW9uX2N1cnJlbnRfbm9kZQlnbG9iYWxfdHJlZXNbVElfVEFSR0VUX09QVElPTl9DVVJSRU5UXQorCisvKiBEZWZhdWx0IHRyZWUgbGlzdCBvcHRpb24oKSwgb3B0aW1pemUoKSBwcmFnbWFzIHRvIGJlIGxpbmtlZCBpbnRvIHRoZQorICAgYXR0cmlidXRlIGxpc3QuICAqLworI2RlZmluZSBjdXJyZW50X3RhcmdldF9wcmFnbWEJCWdsb2JhbF90cmVlc1tUSV9DVVJSRU5UX1RBUkdFVF9QUkFHTUFdCisjZGVmaW5lIGN1cnJlbnRfb3B0aW1pemVfcHJhZ21hCQlnbG9iYWxfdHJlZXNbVElfQ1VSUkVOVF9PUFRJTUlaRV9QUkFHTUFdCisKKy8qIEFuIGVudW1lcmF0aW9uIG9mIHRoZSBzdGFuZGFyZCBDIGludGVnZXIgdHlwZXMuICBUaGVzZSBtdXN0IGJlCisgICBvcmRlcmVkIHNvIHRoYXQgc2hvcnRlciB0eXBlcyBhcHBlYXIgYmVmb3JlIGxvbmdlciBvbmVzLCBhbmQgc28KKyAgIHRoYXQgc2lnbmVkIHR5cGVzIGFwcGVhciBiZWZvcmUgdW5zaWduZWQgb25lcywgZm9yIHRoZSBjb3JyZWN0CisgICBmdW5jdGlvbmluZyBvZiBpbnRlcnByZXRfaW50ZWdlcigpIGluIGMtbGV4LmMuICAqLworZW51bSBpbnRlZ2VyX3R5cGVfa2luZAoreworICBpdGtfY2hhciwKKyAgaXRrX3NpZ25lZF9jaGFyLAorICBpdGtfdW5zaWduZWRfY2hhciwKKyAgaXRrX3Nob3J0LAorICBpdGtfdW5zaWduZWRfc2hvcnQsCisgIGl0a19pbnQsCisgIGl0a191bnNpZ25lZF9pbnQsCisgIGl0a19sb25nLAorICBpdGtfdW5zaWduZWRfbG9uZywKKyAgaXRrX2xvbmdfbG9uZywKKyAgaXRrX3Vuc2lnbmVkX2xvbmdfbG9uZywKKyAgaXRrX25vbmUKK307CisKK3R5cGVkZWYgZW51bSBpbnRlZ2VyX3R5cGVfa2luZCBpbnRlZ2VyX3R5cGVfa2luZDsKKworLyogVGhlIHN0YW5kYXJkIEMgaW50ZWdlciB0eXBlcy4gIFVzZSBpbnRlZ2VyX3R5cGVfa2luZCB0byBpbmRleCBpbnRvCisgICB0aGlzIGFycmF5LiAgKi8KK2V4dGVybiBHVFkoKCkpIHRyZWUgaW50ZWdlcl90eXBlc1tpdGtfbm9uZV07CisKKyNkZWZpbmUgY2hhcl90eXBlX25vZGUJCQlpbnRlZ2VyX3R5cGVzW2l0a19jaGFyXQorI2RlZmluZSBzaWduZWRfY2hhcl90eXBlX25vZGUJCWludGVnZXJfdHlwZXNbaXRrX3NpZ25lZF9jaGFyXQorI2RlZmluZSB1bnNpZ25lZF9jaGFyX3R5cGVfbm9kZQkJaW50ZWdlcl90eXBlc1tpdGtfdW5zaWduZWRfY2hhcl0KKyNkZWZpbmUgc2hvcnRfaW50ZWdlcl90eXBlX25vZGUJCWludGVnZXJfdHlwZXNbaXRrX3Nob3J0XQorI2RlZmluZSBzaG9ydF91bnNpZ25lZF90eXBlX25vZGUJaW50ZWdlcl90eXBlc1tpdGtfdW5zaWduZWRfc2hvcnRdCisjZGVmaW5lIGludGVnZXJfdHlwZV9ub2RlCQlpbnRlZ2VyX3R5cGVzW2l0a19pbnRdCisjZGVmaW5lIHVuc2lnbmVkX3R5cGVfbm9kZQkJaW50ZWdlcl90eXBlc1tpdGtfdW5zaWduZWRfaW50XQorI2RlZmluZSBsb25nX2ludGVnZXJfdHlwZV9ub2RlCQlpbnRlZ2VyX3R5cGVzW2l0a19sb25nXQorI2RlZmluZSBsb25nX3Vuc2lnbmVkX3R5cGVfbm9kZQkJaW50ZWdlcl90eXBlc1tpdGtfdW5zaWduZWRfbG9uZ10KKyNkZWZpbmUgbG9uZ19sb25nX2ludGVnZXJfdHlwZV9ub2RlCWludGVnZXJfdHlwZXNbaXRrX2xvbmdfbG9uZ10KKyNkZWZpbmUgbG9uZ19sb25nX3Vuc2lnbmVkX3R5cGVfbm9kZQlpbnRlZ2VyX3R5cGVzW2l0a191bnNpZ25lZF9sb25nX2xvbmddCisMCisvKiBTZXQgdG8gdGhlIGRlZmF1bHQgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgKHRscykgbW9kZWwgdG8gdXNlLiAgKi8KKworZXh0ZXJuIGVudW0gdGxzX21vZGVsIGZsYWdfdGxzX2RlZmF1bHQ7CisKKwwKKy8qIEEgcG9pbnRlci10by1mdW5jdGlvbiBtZW1iZXIgdHlwZSBsb29rcyBsaWtlOgorCisgICAgIHN0cnVjdCB7CisgICAgICAgX19QIF9fcGZuOworICAgICAgIHB0cmRpZmZfdCBfX2RlbHRhOworICAgICB9OworCisgICBJZiBfX3BmbiBpcyBOVUxMLCBpdCBpcyBhIE5VTEwgcG9pbnRlci10by1tZW1iZXItZnVuY3Rpb24uCisKKyAgIChCZWNhdXNlIHRoZSB2dGFibGUgaXMgYWx3YXlzIHRoZSBmaXJzdCB0aGluZyBpbiB0aGUgb2JqZWN0LCB3ZQorICAgZG9uJ3QgbmVlZCBpdHMgb2Zmc2V0LikgIElmIHRoZSBmdW5jdGlvbiBpcyB2aXJ0dWFsLCB0aGVuIFBGTiBpcworICAgb25lIHBsdXMgdHdpY2UgdGhlIGluZGV4IGludG8gdGhlIHZ0YWJsZTsgb3RoZXJ3aXNlLCBpdCBpcyBqdXN0IGEKKyAgIHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uLgorCisgICBVbmZvcnR1bmF0ZWx5LCB1c2luZyB0aGUgbG93ZXN0IGJpdCBvZiBQRk4gZG9lc24ndCB3b3JrIGluCisgICBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3QgaW1wb3NlIGFsaWdubWVudCByZXF1aXJlbWVudHMgb24gZnVuY3Rpb24KKyAgIGFkZHJlc3Nlcywgb3IgdGhhdCB1c2UgdGhlIGxvd2VzdCBiaXQgdG8gdGVsbCBvbmUgSVNBIGZyb20gYW5vdGhlciwKKyAgIGZvciBleGFtcGxlLiAgRm9yIHN1Y2ggYXJjaGl0ZWN0dXJlcywgd2UgdXNlIHRoZSBsb3dlc3QgYml0IG9mCisgICBERUxUQSBpbnN0ZWFkIG9mIHRoZSBsb3dlc3QgYml0IG9mIHRoZSBQRk4sIGFuZCBERUxUQSB3aWxsIGJlCisgICBtdWx0aXBsaWVkIGJ5IDIuICAqLworCitlbnVtIHB0cm1lbWZ1bmNfdmJpdF93aGVyZV90Cit7CisgIHB0cm1lbWZ1bmNfdmJpdF9pbl9wZm4sCisgIHB0cm1lbWZ1bmNfdmJpdF9pbl9kZWx0YQorfTsKKwwKKyNkZWZpbmUgTlVMTF9UUkVFICh0cmVlKSBOVUxMCisKK2V4dGVybiB0cmVlIGRlY2xfYXNzZW1ibGVyX25hbWUgKHRyZWUpOworZXh0ZXJuIGJvb2wgZGVjbF9hc3NlbWJsZXJfbmFtZV9lcXVhbCAodHJlZSBkZWNsLCBjb25zdF90cmVlIGFzbW5hbWUpOworZXh0ZXJuIGhhc2h2YWxfdCBkZWNsX2Fzc2VtYmxlcl9uYW1lX2hhc2ggKGNvbnN0X3RyZWUgYXNtbmFtZSk7CisKKy8qIENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyBvY2N1cGllZCBieSAnbm9kZScuICBUaGlzIHJvdXRpbmUgb25seQorICAgbG9va3MgYXQgVFJFRV9DT0RFIGFuZCwgaWYgdGhlIGNvZGUgaXMgVFJFRV9WRUMsIFRSRUVfVkVDX0xFTkdUSC4gICovCisKK2V4dGVybiBzaXplX3QgdHJlZV9zaXplIChjb25zdF90cmVlKTsKKworLyogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9jY3VwaWVkIGJ5IGEgdHJlZSB3aXRoIGNvZGUgQ09ERS4gIFRoaXMKKyAgIGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkIGZvciBUUkVFX1ZFQyBjb2Rlcywgd2hpY2ggYXJlIG9mIHZhcmlhYmxlCisgICBsZW5ndGguICAqLworZXh0ZXJuIHNpemVfdCB0cmVlX2NvZGVfc2l6ZSAoZW51bSB0cmVlX2NvZGUpOworCisvKiBMb3dlc3QgbGV2ZWwgcHJpbWl0aXZlIGZvciBhbGxvY2F0aW5nIGEgbm9kZS4KKyAgIFRoZSBUUkVFX0NPREUgaXMgdGhlIG9ubHkgYXJndW1lbnQuICBDb250ZW50cyBhcmUgaW5pdGlhbGl6ZWQKKyAgIHRvIHplcm8gZXhjZXB0IGZvciBhIGZldyBvZiB0aGUgY29tbW9uIGZpZWxkcy4gICovCisKK2V4dGVybiB0cmVlIG1ha2Vfbm9kZV9zdGF0IChlbnVtIHRyZWVfY29kZSBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgbWFrZV9ub2RlKHQpIG1ha2Vfbm9kZV9zdGF0ICh0IE1FTV9TVEFUX0lORk8pCisKKy8qIE1ha2UgYSBjb3B5IG9mIGEgbm9kZSwgd2l0aCBhbGwgdGhlIHNhbWUgY29udGVudHMuICAqLworCitleHRlcm4gdHJlZSBjb3B5X25vZGVfc3RhdCAodHJlZSBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgY29weV9ub2RlKHQpIGNvcHlfbm9kZV9zdGF0ICh0IE1FTV9TVEFUX0lORk8pCisKKy8qIE1ha2UgYSBjb3B5IG9mIGEgY2hhaW4gb2YgVFJFRV9MSVNUIG5vZGVzLiAgKi8KKworZXh0ZXJuIHRyZWUgY29weV9saXN0ICh0cmVlKTsKKworLyogTWFrZSBhIEJJTkZPLiAgKi8KK2V4dGVybiB0cmVlIG1ha2VfdHJlZV9iaW5mb19zdGF0ICh1bnNpZ25lZCBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgbWFrZV90cmVlX2JpbmZvKHQpIG1ha2VfdHJlZV9iaW5mb19zdGF0ICh0IE1FTV9TVEFUX0lORk8pCisKKy8qIE1ha2UgYSBUUkVFX1ZFQy4gICovCisKK2V4dGVybiB0cmVlIG1ha2VfdHJlZV92ZWNfc3RhdCAoaW50IE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBtYWtlX3RyZWVfdmVjKHQpIG1ha2VfdHJlZV92ZWNfc3RhdCAodCBNRU1fU1RBVF9JTkZPKQorCisvKiBSZXR1cm4gdGhlICh1bmlxdWUpIElERU5USUZJRVJfTk9ERSBub2RlIGZvciBhIGdpdmVuIG5hbWUuCisgICBUaGUgbmFtZSBpcyBzdXBwbGllZCBhcyBhIGNoYXIgKi4gICovCisKK2V4dGVybiB0cmVlIGdldF9pZGVudGlmaWVyIChjb25zdCBjaGFyICopOworCisjaWYgR0NDX1ZFUlNJT04gPj0gMzAwMAorI2RlZmluZSBnZXRfaWRlbnRpZmllcihzdHIpIFwKKyAgKF9fYnVpbHRpbl9jb25zdGFudF9wIChzdHIpCQkJCVwKKyAgICA/IGdldF9pZGVudGlmaWVyX3dpdGhfbGVuZ3RoICgoc3RyKSwgc3RybGVuIChzdHIpKSAgXAorICAgIDogZ2V0X2lkZW50aWZpZXIgKHN0cikpCisjZW5kaWYKKworCisvKiBJZGVudGljYWwgdG8gZ2V0X2lkZW50aWZpZXIsIGV4Y2VwdCB0aGF0IHRoZSBsZW5ndGggaXMgYXNzdW1lZAorICAga25vd24uICAqLworCitleHRlcm4gdHJlZSBnZXRfaWRlbnRpZmllcl93aXRoX2xlbmd0aCAoY29uc3QgY2hhciAqLCBzaXplX3QpOworCisvKiBJZiBhbiBpZGVudGlmaWVyIHdpdGggdGhlIG5hbWUgVEVYVCAoYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nKSBoYXMKKyAgIHByZXZpb3VzbHkgYmVlbiByZWZlcnJlZCB0bywgcmV0dXJuIHRoYXQgbm9kZTsgb3RoZXJ3aXNlIHJldHVybgorICAgTlVMTF9UUkVFLiAgKi8KKworZXh0ZXJuIHRyZWUgbWF5YmVfZ2V0X2lkZW50aWZpZXIgKGNvbnN0IGNoYXIgKik7CisKKy8qIENvbnN0cnVjdCB2YXJpb3VzIHR5cGVzIG9mIG5vZGVzLiAgKi8KKworZXh0ZXJuIHRyZWUgYnVpbGRfbnQgKGVudW0gdHJlZV9jb2RlLCAuLi4pOworZXh0ZXJuIHRyZWUgYnVpbGRfbnRfY2FsbF9saXN0ICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX250X2NhbGxfdmVjICh0cmVlLCBWRUModHJlZSxnYykgKik7CisKK2V4dGVybiB0cmVlIGJ1aWxkMF9zdGF0IChlbnVtIHRyZWVfY29kZSwgdHJlZSBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgYnVpbGQwKGMsdCkgYnVpbGQwX3N0YXQgKGMsdCBNRU1fU1RBVF9JTkZPKQorZXh0ZXJuIHRyZWUgYnVpbGQxX3N0YXQgKGVudW0gdHJlZV9jb2RlLCB0cmVlLCB0cmVlIE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBidWlsZDEoYyx0MSx0MikgYnVpbGQxX3N0YXQgKGMsdDEsdDIgTUVNX1NUQVRfSU5GTykKK2V4dGVybiB0cmVlIGJ1aWxkMl9zdGF0IChlbnVtIHRyZWVfY29kZSwgdHJlZSwgdHJlZSwgdHJlZSBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgYnVpbGQyKGMsdDEsdDIsdDMpIGJ1aWxkMl9zdGF0IChjLHQxLHQyLHQzIE1FTV9TVEFUX0lORk8pCitleHRlcm4gdHJlZSBidWlsZDNfc3RhdCAoZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGJ1aWxkMyhjLHQxLHQyLHQzLHQ0KSBidWlsZDNfc3RhdCAoYyx0MSx0Mix0Myx0NCBNRU1fU1RBVF9JTkZPKQorZXh0ZXJuIHRyZWUgYnVpbGQ0X3N0YXQgKGVudW0gdHJlZV9jb2RlLCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLAorCQkJIHRyZWUgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGJ1aWxkNChjLHQxLHQyLHQzLHQ0LHQ1KSBidWlsZDRfc3RhdCAoYyx0MSx0Mix0Myx0NCx0NSBNRU1fU1RBVF9JTkZPKQorZXh0ZXJuIHRyZWUgYnVpbGQ1X3N0YXQgKGVudW0gdHJlZV9jb2RlLCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLAorCQkJIHRyZWUgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGJ1aWxkNShjLHQxLHQyLHQzLHQ0LHQ1LHQ2KSBidWlsZDVfc3RhdCAoYyx0MSx0Mix0Myx0NCx0NSx0NiBNRU1fU1RBVF9JTkZPKQorZXh0ZXJuIHRyZWUgYnVpbGQ2X3N0YXQgKGVudW0gdHJlZV9jb2RlLCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLAorCQkJIHRyZWUsIHRyZWUgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGJ1aWxkNihjLHQxLHQyLHQzLHQ0LHQ1LHQ2LHQ3KSBcCisgIGJ1aWxkNl9zdGF0IChjLHQxLHQyLHQzLHQ0LHQ1LHQ2LHQ3IE1FTV9TVEFUX0lORk8pCisKK2V4dGVybiB0cmVlIGJ1aWxkX3Zhcl9kZWJ1Z192YWx1ZV9zdGF0ICh0cmVlLCB0cmVlIE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBidWlsZF92YXJfZGVidWdfdmFsdWUodDEsdDIpIFwKKyAgYnVpbGRfdmFyX2RlYnVnX3ZhbHVlX3N0YXQgKHQxLHQyIE1FTV9TVEFUX0lORk8pCisKK2V4dGVybiB0cmVlIGJ1aWxkX2ludF9jc3QgKHRyZWUsIEhPU1RfV0lERV9JTlQpOworZXh0ZXJuIHRyZWUgYnVpbGRfaW50X2NzdF90eXBlICh0cmVlLCBIT1NUX1dJREVfSU5UKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2ludF9jc3R1ICh0cmVlLCB1bnNpZ25lZCBIT1NUX1dJREVfSU5UKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2ludF9jc3Rfd2lkZSAodHJlZSwgdW5zaWduZWQgSE9TVF9XSURFX0lOVCwgSE9TVF9XSURFX0lOVCk7CitleHRlcm4gdHJlZSBidWlsZF9pbnRfY3N0X3dpZGVfdHlwZSAodHJlZSwKKwkJCQkgICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQsIEhPU1RfV0lERV9JTlQpOworZXh0ZXJuIHRyZWUgYnVpbGRfdmVjdG9yICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX3ZlY3Rvcl9mcm9tX2N0b3IgKHRyZWUsIFZFQyhjb25zdHJ1Y3Rvcl9lbHQsZ2MpICopOworZXh0ZXJuIHRyZWUgYnVpbGRfY29uc3RydWN0b3IgKHRyZWUsIFZFQyhjb25zdHJ1Y3Rvcl9lbHQsZ2MpICopOworZXh0ZXJuIHRyZWUgYnVpbGRfY29uc3RydWN0b3Jfc2luZ2xlICh0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2NvbnN0cnVjdG9yX2Zyb21fbGlzdCAodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9yZWFsX2Zyb21faW50X2NzdCAodHJlZSwgY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9jb21wbGV4ICh0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX29uZV9jc3QgKHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfc3RyaW5nIChpbnQsIGNvbnN0IGNoYXIgKik7CitleHRlcm4gdHJlZSBidWlsZF90cmVlX2xpc3Rfc3RhdCAodHJlZSwgdHJlZSBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgYnVpbGRfdHJlZV9saXN0KHQscSkgYnVpbGRfdHJlZV9saXN0X3N0YXQodCxxIE1FTV9TVEFUX0lORk8pCitleHRlcm4gdHJlZSBidWlsZF90cmVlX2xpc3RfdmVjX3N0YXQgKGNvbnN0IFZFQyh0cmVlLGdjKSAqIE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBidWlsZF90cmVlX2xpc3RfdmVjKHYpIGJ1aWxkX3RyZWVfbGlzdF92ZWNfc3RhdCAodiBNRU1fU1RBVF9JTkZPKQorZXh0ZXJuIHRyZWUgYnVpbGRfZGVjbF9zdGF0IChsb2NhdGlvbl90LCBlbnVtIHRyZWVfY29kZSwKKwkJCSAgICAgdHJlZSwgdHJlZSBNRU1fU1RBVF9ERUNMKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2ZuX2RlY2wgKGNvbnN0IGNoYXIgKiwgdHJlZSk7CisjZGVmaW5lIGJ1aWxkX2RlY2wobCxjLHQscSkgYnVpbGRfZGVjbF9zdGF0IChsLGMsdCxxIE1FTV9TVEFUX0lORk8pCitleHRlcm4gdHJlZSBidWlsZF9ibG9jayAodHJlZSwgdHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9lbXB0eV9zdG10IChsb2NhdGlvbl90KTsKK2V4dGVybiB0cmVlIGJ1aWxkX29tcF9jbGF1c2UgKGxvY2F0aW9uX3QsIGVudW0gb21wX2NsYXVzZV9jb2RlKTsKKworZXh0ZXJuIHRyZWUgYnVpbGRfdmxfZXhwX3N0YXQgKGVudW0gdHJlZV9jb2RlLCBpbnQgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGJ1aWxkX3ZsX2V4cChjLG4pIGJ1aWxkX3ZsX2V4cF9zdGF0IChjLG4gTUVNX1NUQVRfSU5GTykKKworZXh0ZXJuIHRyZWUgYnVpbGRfY2FsbF9saXN0ICh0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2NhbGxfbmFyeSAodHJlZSwgdHJlZSwgaW50LCAuLi4pOworZXh0ZXJuIHRyZWUgYnVpbGRfY2FsbF92YWxpc3QgKHRyZWUsIHRyZWUsIGludCwgdmFfbGlzdCk7CisjZGVmaW5lIGJ1aWxkX2NhbGxfYXJyYXkoVDEsVDIsTixUMylcCisgICBidWlsZF9jYWxsX2FycmF5X2xvYyAoVU5LTk9XTl9MT0NBVElPTiwgVDEsIFQyLCBOLCBUMykKK2V4dGVybiB0cmVlIGJ1aWxkX2NhbGxfYXJyYXlfbG9jIChsb2NhdGlvbl90LCB0cmVlLCB0cmVlLCBpbnQsIGNvbnN0IHRyZWUgKik7CitleHRlcm4gdHJlZSBidWlsZF9jYWxsX3ZlYyAodHJlZSwgdHJlZSwgVkVDKHRyZWUsZ2MpICopOworCisvKiBDb25zdHJ1Y3QgdmFyaW91cyBub2RlcyByZXByZXNlbnRpbmcgZGF0YSB0eXBlcy4gICovCisKK2V4dGVybiB0cmVlIG1ha2Vfc2lnbmVkX3R5cGUgKGludCk7CitleHRlcm4gdHJlZSBtYWtlX3Vuc2lnbmVkX3R5cGUgKGludCk7CitleHRlcm4gdHJlZSBzaWduZWRfb3JfdW5zaWduZWRfdHlwZV9mb3IgKGludCwgdHJlZSk7CitleHRlcm4gdHJlZSBzaWduZWRfdHlwZV9mb3IgKHRyZWUpOworZXh0ZXJuIHRyZWUgdW5zaWduZWRfdHlwZV9mb3IgKHRyZWUpOworZXh0ZXJuIHZvaWQgaW5pdGlhbGl6ZV9zaXpldHlwZXMgKGJvb2wpOworZXh0ZXJuIHZvaWQgc2V0X3NpemV0eXBlICh0cmVlKTsKK2V4dGVybiB2b2lkIGZpeHVwX3Vuc2lnbmVkX3R5cGUgKHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfcG9pbnRlcl90eXBlX2Zvcl9tb2RlICh0cmVlLCBlbnVtIG1hY2hpbmVfbW9kZSwgYm9vbCk7CitleHRlcm4gdHJlZSBidWlsZF9wb2ludGVyX3R5cGUgKHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfcmVmZXJlbmNlX3R5cGVfZm9yX21vZGUgKHRyZWUsIGVudW0gbWFjaGluZV9tb2RlLCBib29sKTsKK2V4dGVybiB0cmVlIGJ1aWxkX3JlZmVyZW5jZV90eXBlICh0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX3ZlY3Rvcl90eXBlX2Zvcl9tb2RlICh0cmVlLCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gdHJlZSBidWlsZF92ZWN0b3JfdHlwZSAodHJlZSBpbm5lcnR5cGUsIGludCBudW5pdHMpOworZXh0ZXJuIHRyZWUgYnVpbGRfb3BhcXVlX3ZlY3Rvcl90eXBlICh0cmVlIGlubmVydHlwZSwgaW50IG51bml0cyk7CitleHRlcm4gdHJlZSBidWlsZF90eXBlX25vX3F1YWxzICh0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2luZGV4X3R5cGUgKHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfaW5kZXhfMl90eXBlICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2FycmF5X3R5cGUgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfZnVuY3Rpb25fdHlwZSAodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9mdW5jdGlvbl90eXBlX2xpc3QgKHRyZWUsIC4uLik7CitleHRlcm4gdHJlZSBidWlsZF9mdW5jdGlvbl90eXBlX3NraXBfYXJncyAodHJlZSwgYml0bWFwKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2Z1bmN0aW9uX2RlY2xfc2tpcF9hcmdzICh0cmVlLCBiaXRtYXApOworZXh0ZXJuIHRyZWUgYnVpbGRfdmFyYXJnc19mdW5jdGlvbl90eXBlX2xpc3QgKHRyZWUsIC4uLik7CitleHRlcm4gdHJlZSBidWlsZF9tZXRob2RfdHlwZV9kaXJlY3RseSAodHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9tZXRob2RfdHlwZSAodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9vZmZzZXRfdHlwZSAodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9jb21wbGV4X3R5cGUgKHRyZWUpOworZXh0ZXJuIHRyZWUgYXJyYXlfdHlwZV9uZWx0cyAoY29uc3RfdHJlZSk7CitleHRlcm4gYm9vbCBpbl9hcnJheV9ib3VuZHNfcCAodHJlZSk7CitleHRlcm4gYm9vbCByYW5nZV9pbl9hcnJheV9ib3VuZHNfcCAodHJlZSk7CisKK2V4dGVybiB0cmVlIHZhbHVlX21lbWJlciAodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBwdXJwb3NlX21lbWJlciAoY29uc3RfdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBjaGFpbl9pbmRleCAoaW50LCB0cmVlKTsKKworZXh0ZXJuIGludCBhdHRyaWJ1dGVfbGlzdF9lcXVhbCAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CitleHRlcm4gaW50IGF0dHJpYnV0ZV9saXN0X2NvbnRhaW5lZCAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CitleHRlcm4gaW50IHRyZWVfaW50X2NzdF9lcXVhbCAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CitleHRlcm4gaW50IHRyZWVfaW50X2NzdF9sdCAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CitleHRlcm4gaW50IHRyZWVfaW50X2NzdF9jb21wYXJlIChjb25zdF90cmVlLCBjb25zdF90cmVlKTsKK2V4dGVybiBpbnQgaG9zdF9pbnRlZ2VycCAoY29uc3RfdHJlZSwgaW50KTsKK2V4dGVybiBIT1NUX1dJREVfSU5UIHRyZWVfbG93X2NzdCAoY29uc3RfdHJlZSwgaW50KTsKK2V4dGVybiBpbnQgdHJlZV9pbnRfY3N0X21zYiAoY29uc3RfdHJlZSk7CitleHRlcm4gaW50IHRyZWVfaW50X2NzdF9zZ24gKGNvbnN0X3RyZWUpOworZXh0ZXJuIGludCB0cmVlX2ludF9jc3Rfc2lnbl9iaXQgKGNvbnN0X3RyZWUpOworZXh0ZXJuIHVuc2lnbmVkIGludCB0cmVlX2ludF9jc3RfbWluX3ByZWNpc2lvbiAodHJlZSwgYm9vbCk7CitleHRlcm4gYm9vbCB0cmVlX2V4cHJfbm9ubmVnYXRpdmVfcCAodHJlZSk7CitleHRlcm4gYm9vbCB0cmVlX2V4cHJfbm9ubmVnYXRpdmVfd2FybnZfcCAodHJlZSwgYm9vbCAqKTsKK2V4dGVybiBib29sIG1heV9uZWdhdGVfd2l0aG91dF9vdmVyZmxvd19wIChjb25zdF90cmVlKTsKK2V4dGVybiB0cmVlIHN0cmlwX2FycmF5X3R5cGVzICh0cmVlKTsKK2V4dGVybiB0cmVlIGV4Y2Vzc19wcmVjaXNpb25fdHlwZSAodHJlZSk7CisKKy8qIENvbnN0cnVjdCB2YXJpb3VzIG5vZGVzIHJlcHJlc2VudGluZyBmcmFjdCBvciBhY2N1bSBkYXRhIHR5cGVzLiAgKi8KKworZXh0ZXJuIHRyZWUgbWFrZV9mcmFjdF90eXBlIChpbnQsIGludCwgaW50KTsKK2V4dGVybiB0cmVlIG1ha2VfYWNjdW1fdHlwZSAoaW50LCBpbnQsIGludCk7CisKKyNkZWZpbmUgbWFrZV9zaWduZWRfZnJhY3RfdHlwZShQKSBtYWtlX2ZyYWN0X3R5cGUgKFAsIDAsIDApCisjZGVmaW5lIG1ha2VfdW5zaWduZWRfZnJhY3RfdHlwZShQKSBtYWtlX2ZyYWN0X3R5cGUgKFAsIDEsIDApCisjZGVmaW5lIG1ha2Vfc2F0X3NpZ25lZF9mcmFjdF90eXBlKFApIG1ha2VfZnJhY3RfdHlwZSAoUCwgMCwgMSkKKyNkZWZpbmUgbWFrZV9zYXRfdW5zaWduZWRfZnJhY3RfdHlwZShQKSBtYWtlX2ZyYWN0X3R5cGUgKFAsIDEsIDEpCisjZGVmaW5lIG1ha2Vfc2lnbmVkX2FjY3VtX3R5cGUoUCkgbWFrZV9hY2N1bV90eXBlIChQLCAwLCAwKQorI2RlZmluZSBtYWtlX3Vuc2lnbmVkX2FjY3VtX3R5cGUoUCkgbWFrZV9hY2N1bV90eXBlIChQLCAxLCAwKQorI2RlZmluZSBtYWtlX3NhdF9zaWduZWRfYWNjdW1fdHlwZShQKSBtYWtlX2FjY3VtX3R5cGUgKFAsIDAsIDEpCisjZGVmaW5lIG1ha2Vfc2F0X3Vuc2lnbmVkX2FjY3VtX3R5cGUoUCkgbWFrZV9hY2N1bV90eXBlIChQLCAxLCAxKQorCisjZGVmaW5lIG1ha2Vfb3JfcmV1c2Vfc2lnbmVkX2ZyYWN0X3R5cGUoUCkgXAorCQltYWtlX29yX3JldXNlX2ZyYWN0X3R5cGUgKFAsIDAsIDApCisjZGVmaW5lIG1ha2Vfb3JfcmV1c2VfdW5zaWduZWRfZnJhY3RfdHlwZShQKSBcCisJCW1ha2Vfb3JfcmV1c2VfZnJhY3RfdHlwZSAoUCwgMSwgMCkKKyNkZWZpbmUgbWFrZV9vcl9yZXVzZV9zYXRfc2lnbmVkX2ZyYWN0X3R5cGUoUCkgXAorCQltYWtlX29yX3JldXNlX2ZyYWN0X3R5cGUgKFAsIDAsIDEpCisjZGVmaW5lIG1ha2Vfb3JfcmV1c2Vfc2F0X3Vuc2lnbmVkX2ZyYWN0X3R5cGUoUCkgXAorCQltYWtlX29yX3JldXNlX2ZyYWN0X3R5cGUgKFAsIDEsIDEpCisjZGVmaW5lIG1ha2Vfb3JfcmV1c2Vfc2lnbmVkX2FjY3VtX3R5cGUoUCkgXAorCQltYWtlX29yX3JldXNlX2FjY3VtX3R5cGUgKFAsIDAsIDApCisjZGVmaW5lIG1ha2Vfb3JfcmV1c2VfdW5zaWduZWRfYWNjdW1fdHlwZShQKSBcCisJCW1ha2Vfb3JfcmV1c2VfYWNjdW1fdHlwZSAoUCwgMSwgMCkKKyNkZWZpbmUgbWFrZV9vcl9yZXVzZV9zYXRfc2lnbmVkX2FjY3VtX3R5cGUoUCkgXAorCQltYWtlX29yX3JldXNlX2FjY3VtX3R5cGUgKFAsIDAsIDEpCisjZGVmaW5lIG1ha2Vfb3JfcmV1c2Vfc2F0X3Vuc2lnbmVkX2FjY3VtX3R5cGUoUCkgXAorCQltYWtlX29yX3JldXNlX2FjY3VtX3R5cGUgKFAsIDEsIDEpCisKKy8qIEZyb20gZXhwbWVkLmMuICBTaW5jZSBydGwuaCBpcyBpbmNsdWRlZCBhZnRlciB0cmVlLmgsIHdlIGNhbid0CisgICBwdXQgdGhlIHByb3RvdHlwZSBoZXJlLiAgUnRsLmggZG9lcyBkZWNsYXJlIHRoZSBwcm90b3R5cGUgaWYKKyAgIHRyZWUuaCBoYWQgYmVlbiBpbmNsdWRlZC4gICovCisKK2V4dGVybiB0cmVlIG1ha2VfdHJlZSAodHJlZSwgcnR4KTsKKwwKKy8qIFJldHVybiBhIHR5cGUgbGlrZSBUVFlQRSBleGNlcHQgdGhhdCBpdHMgVFlQRV9BVFRSSUJVVEVTCisgICBpcyBBVFRSSUJVVEUuCisKKyAgIFN1Y2ggbW9kaWZpZWQgdHlwZXMgYWxyZWFkeSBtYWRlIGFyZSByZWNvcmRlZCBzbyB0aGF0IGR1cGxpY2F0ZXMKKyAgIGFyZSBub3QgbWFkZS4gICovCisKK2V4dGVybiB0cmVlIGJ1aWxkX3R5cGVfYXR0cmlidXRlX3ZhcmlhbnQgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfZGVjbF9hdHRyaWJ1dGVfdmFyaWFudCAodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF90eXBlX2F0dHJpYnV0ZV9xdWFsX3ZhcmlhbnQgKHRyZWUsIHRyZWUsIGludCk7CisKKy8qIFN0cnVjdHVyZSBkZXNjcmliaW5nIGFuIGF0dHJpYnV0ZSBhbmQgYSBmdW5jdGlvbiB0byBoYW5kbGUgaXQuICAqLworc3RydWN0IGF0dHJpYnV0ZV9zcGVjCit7CisgIC8qIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgKHdpdGhvdXQgYW55IGxlYWRpbmcgb3IgdHJhaWxpbmcgX18pLAorICAgICBvciBOVUxMIHRvIG1hcmsgdGhlIGVuZCBvZiBhIHRhYmxlIG9mIGF0dHJpYnV0ZXMuICAqLworICBjb25zdCBjaGFyICpjb25zdCBuYW1lOworICAvKiBUaGUgbWluaW11bSBsZW5ndGggb2YgdGhlIGxpc3Qgb2YgYXJndW1lbnRzIG9mIHRoZSBhdHRyaWJ1dGUuICAqLworICBjb25zdCBpbnQgbWluX2xlbmd0aDsKKyAgLyogVGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBsaXN0IG9mIGFyZ3VtZW50cyBvZiB0aGUgYXR0cmlidXRlCisgICAgICgtMSBmb3Igbm8gbWF4aW11bSkuICAqLworICBjb25zdCBpbnQgbWF4X2xlbmd0aDsKKyAgLyogV2hldGhlciB0aGlzIGF0dHJpYnV0ZSByZXF1aXJlcyBhIERFQ0wuICBJZiBpdCBkb2VzLCBpdCB3aWxsIGJlIHBhc3NlZAorICAgICBmcm9tIHR5cGVzIG9mIERFQ0xzLCBmdW5jdGlvbiByZXR1cm4gdHlwZXMgYW5kIGFycmF5IGVsZW1lbnQgdHlwZXMgdG8KKyAgICAgdGhlIERFQ0xzLCBmdW5jdGlvbiB0eXBlcyBhbmQgYXJyYXkgdHlwZXMgcmVzcGVjdGl2ZWx5OyBidXQgd2hlbgorICAgICBhcHBsaWVkIHRvIGEgdHlwZSBpbiBhbnkgb3RoZXIgY2lyY3Vtc3RhbmNlcywgaXQgd2lsbCBiZSBpZ25vcmVkIHdpdGgKKyAgICAgYSB3YXJuaW5nLiAgKElmIGdyZWF0ZXIgY29udHJvbCBpcyBkZXNpcmVkIGZvciBhIGdpdmVuIGF0dHJpYnV0ZSwKKyAgICAgdGhpcyBzaG91bGQgYmUgZmFsc2UsIGFuZCB0aGUgZmxhZ3MgYXJndW1lbnQgdG8gdGhlIGhhbmRsZXIgbWF5IGJlCisgICAgIHVzZWQgdG8gZ2FpbiBncmVhdGVyIGNvbnRyb2wgaW4gdGhhdCBjYXNlLikgICovCisgIGNvbnN0IGJvb2wgZGVjbF9yZXF1aXJlZDsKKyAgLyogV2hldGhlciB0aGlzIGF0dHJpYnV0ZSByZXF1aXJlcyBhIHR5cGUuICBJZiBpdCBkb2VzLCBpdCB3aWxsIGJlIHBhc3NlZAorICAgICBmcm9tIGEgREVDTCB0byB0aGUgdHlwZSBvZiB0aGF0IERFQ0wuICAqLworICBjb25zdCBib29sIHR5cGVfcmVxdWlyZWQ7CisgIC8qIFdoZXRoZXIgdGhpcyBhdHRyaWJ1dGUgcmVxdWlyZXMgYSBmdW5jdGlvbiAob3IgbWV0aG9kKSB0eXBlLiAgSWYgaXQgZG9lcywKKyAgICAgaXQgd2lsbCBiZSBwYXNzZWQgZnJvbSBhIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZSB0byB0aGUgdGFyZ2V0IHR5cGUsCisgICAgIGFuZCBmcm9tIGEgZnVuY3Rpb24gcmV0dXJuIHR5cGUgKHdoaWNoIGlzIG5vdCBpdHNlbGYgYSBmdW5jdGlvbgorICAgICBwb2ludGVyIHR5cGUpIHRvIHRoZSBmdW5jdGlvbiB0eXBlLiAgKi8KKyAgY29uc3QgYm9vbCBmdW5jdGlvbl90eXBlX3JlcXVpcmVkOworICAvKiBGdW5jdGlvbiB0byBoYW5kbGUgdGhpcyBhdHRyaWJ1dGUuICBOT0RFIHBvaW50cyB0byB0aGUgbm9kZSB0byB3aGljaAorICAgICB0aGUgYXR0cmlidXRlIGlzIHRvIGJlIGFwcGxpZWQuICBJZiBhIERFQ0wsIGl0IHNob3VsZCBiZSBtb2RpZmllZCBpbgorICAgICBwbGFjZTsgaWYgYSBUWVBFLCBhIGNvcHkgc2hvdWxkIGJlIGNyZWF0ZWQuICBOQU1FIGlzIHRoZSBuYW1lIG9mIHRoZQorICAgICBhdHRyaWJ1dGUgKHBvc3NpYmx5IHdpdGggbGVhZGluZyBvciB0cmFpbGluZyBfXykuICBBUkdTIGlzIHRoZSBUUkVFX0xJU1QKKyAgICAgb2YgdGhlIGFyZ3VtZW50cyAod2hpY2ggbWF5IGJlIE5VTEwpLiAgRkxBR1MgZ2l2ZXMgZnVydGhlciBpbmZvcm1hdGlvbgorICAgICBhYm91dCB0aGUgY29udGV4dCBvZiB0aGUgYXR0cmlidXRlLiAgQWZ0ZXJ3YXJkcywgdGhlIGF0dHJpYnV0ZXMgd2lsbAorICAgICBiZSBhZGRlZCB0byB0aGUgREVDTF9BVFRSSUJVVEVTIG9yIFRZUEVfQVRUUklCVVRFUywgYXMgYXBwcm9wcmlhdGUsCisgICAgIHVubGVzcyAqTk9fQUREX0FUVFJTIGlzIHNldCB0byB0cnVlICh3aGljaCBzaG91bGQgYmUgZG9uZSBvbiBlcnJvciwKKyAgICAgYXMgd2VsbCBhcyBpbiBhbnkgb3RoZXIgY2FzZXMgd2hlbiB0aGUgYXR0cmlidXRlcyBzaG91bGQgbm90IGJlIGFkZGVkCisgICAgIHRvIHRoZSBERUNMIG9yIFRZUEUpLiAgRGVwZW5kaW5nIG9uIEZMQUdTLCBhbnkgYXR0cmlidXRlcyB0byBiZQorICAgICBhcHBsaWVkIHRvIGFub3RoZXIgdHlwZSBvciBERUNMIGxhdGVyIG1heSBiZSByZXR1cm5lZDsKKyAgICAgb3RoZXJ3aXNlIHRoZSByZXR1cm4gdmFsdWUgc2hvdWxkIGJlIE5VTExfVFJFRS4gIFRoaXMgcG9pbnRlciBtYXkgYmUKKyAgICAgTlVMTCBpZiBubyBzcGVjaWFsIGhhbmRsaW5nIGlzIHJlcXVpcmVkIGJleW9uZCB0aGUgY2hlY2tzIGltcGxpZWQKKyAgICAgYnkgdGhlIHJlc3Qgb2YgdGhpcyBzdHJ1Y3R1cmUuICAqLworICB0cmVlICgqY29uc3QgaGFuZGxlcikgKHRyZWUgKm5vZGUsIHRyZWUgbmFtZSwgdHJlZSBhcmdzLAorCQkJCSBpbnQgZmxhZ3MsIGJvb2wgKm5vX2FkZF9hdHRycyk7Cit9OworCisvKiBGbGFncyB0aGF0IG1heSBiZSBwYXNzZWQgaW4gdGhlIHRoaXJkIGFyZ3VtZW50IG9mIGRlY2xfYXR0cmlidXRlcywgYW5kCisgICB0byBoYW5kbGVyIGZ1bmN0aW9ucyBmb3IgYXR0cmlidXRlcy4gICovCitlbnVtIGF0dHJpYnV0ZV9mbGFncworeworICAvKiBUaGUgdHlwZSBwYXNzZWQgaW4gaXMgdGhlIHR5cGUgb2YgYSBERUNMLCBhbmQgYW55IGF0dHJpYnV0ZXMgdGhhdAorICAgICBzaG91bGQgYmUgcGFzc2VkIGluIGFnYWluIHRvIGJlIGFwcGxpZWQgdG8gdGhlIERFQ0wgcmF0aGVyIHRoYW4gdGhlCisgICAgIHR5cGUgc2hvdWxkIGJlIHJldHVybmVkLiAgKi8KKyAgQVRUUl9GTEFHX0RFQ0xfTkVYVCA9IDEsCisgIC8qIFRoZSB0eXBlIHBhc3NlZCBpbiBpcyBhIGZ1bmN0aW9uIHJldHVybiB0eXBlLCBhbmQgYW55IGF0dHJpYnV0ZXMgdGhhdAorICAgICBzaG91bGQgYmUgcGFzc2VkIGluIGFnYWluIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGZ1bmN0aW9uIHR5cGUgcmF0aGVyCisgICAgIHRoYW4gdGhlIHJldHVybiB0eXBlIHNob3VsZCBiZSByZXR1cm5lZC4gICovCisgIEFUVFJfRkxBR19GVU5DVElPTl9ORVhUID0gMiwKKyAgLyogVGhlIHR5cGUgcGFzc2VkIGluIGlzIGFuIGFycmF5IGVsZW1lbnQgdHlwZSwgYW5kIGFueSBhdHRyaWJ1dGVzIHRoYXQKKyAgICAgc2hvdWxkIGJlIHBhc3NlZCBpbiBhZ2FpbiB0byBiZSBhcHBsaWVkIHRvIHRoZSBhcnJheSB0eXBlIHJhdGhlcgorICAgICB0aGFuIHRoZSBlbGVtZW50IHR5cGUgc2hvdWxkIGJlIHJldHVybmVkLiAgKi8KKyAgQVRUUl9GTEFHX0FSUkFZX05FWFQgPSA0LAorICAvKiBUaGUgdHlwZSBwYXNzZWQgaW4gaXMgYSBzdHJ1Y3R1cmUsIHVuaW9uIG9yIGVudW1lcmF0aW9uIHR5cGUgYmVpbmcKKyAgICAgY3JlYXRlZCwgYW5kIHNob3VsZCBiZSBtb2RpZmllZCBpbiBwbGFjZS4gICovCisgIEFUVFJfRkxBR19UWVBFX0lOX1BMQUNFID0gOCwKKyAgLyogVGhlIGF0dHJpYnV0ZXMgYXJlIGJlaW5nIGFwcGxpZWQgYnkgZGVmYXVsdCB0byBhIGxpYnJhcnkgZnVuY3Rpb24gd2hvc2UKKyAgICAgbmFtZSBpbmRpY2F0ZXMga25vd24gYmVoYXZpb3IsIGFuZCBzaG91bGQgYmUgc2lsZW50bHkgaWdub3JlZCBpZiB0aGV5CisgICAgIGFyZSBub3QgaW4gZmFjdCBjb21wYXRpYmxlIHdpdGggdGhlIGZ1bmN0aW9uIHR5cGUuICAqLworICBBVFRSX0ZMQUdfQlVJTFRfSU4gPSAxNgorfTsKKworLyogRGVmYXVsdCB2ZXJzaW9ucyBvZiB0YXJnZXQtb3ZlcnJpZGFibGUgZnVuY3Rpb25zLiAgKi8KKworZXh0ZXJuIHRyZWUgbWVyZ2VfZGVjbF9hdHRyaWJ1dGVzICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIG1lcmdlX3R5cGVfYXR0cmlidXRlcyAodHJlZSwgdHJlZSk7CisKKy8qIEdpdmVuIGEgdHJlZSBub2RlIGFuZCBhIHN0cmluZywgcmV0dXJuIG5vbnplcm8gaWYgdGhlIHRyZWUgbm9kZSBpcworICAgYSB2YWxpZCBhdHRyaWJ1dGUgbmFtZSBmb3IgdGhlIHN0cmluZy4gICovCisKK2V4dGVybiBpbnQgaXNfYXR0cmlidXRlX3AgKGNvbnN0IGNoYXIgKiwgY29uc3RfdHJlZSk7CisKKy8qIEdpdmVuIGFuIGF0dHJpYnV0ZSBuYW1lIGFuZCBhIGxpc3Qgb2YgYXR0cmlidXRlcywgcmV0dXJuIHRoZSBsaXN0IGVsZW1lbnQKKyAgIG9mIHRoZSBhdHRyaWJ1dGUgb3IgTlVMTF9UUkVFIGlmIG5vdCBmb3VuZC4gICovCisKK2V4dGVybiB0cmVlIGxvb2t1cF9hdHRyaWJ1dGUgKGNvbnN0IGNoYXIgKiwgdHJlZSk7CisKKy8qIFJlbW92ZSBhbnkgaW5zdGFuY2VzIG9mIGF0dHJpYnV0ZSBBVFRSX05BTUUgaW4gTElTVCBhbmQgcmV0dXJuIHRoZQorICAgbW9kaWZpZWQgbGlzdC4gICovCisKK2V4dGVybiB0cmVlIHJlbW92ZV9hdHRyaWJ1dGUgKGNvbnN0IGNoYXIgKiwgdHJlZSk7CisKKy8qIEdpdmVuIHR3byBhdHRyaWJ1dGVzIGxpc3RzLCByZXR1cm4gYSBsaXN0IG9mIHRoZWlyIHVuaW9uLiAgKi8KKworZXh0ZXJuIHRyZWUgbWVyZ2VfYXR0cmlidXRlcyAodHJlZSwgdHJlZSk7CisKKyNpZiBUQVJHRVRfRExMSU1QT1JUX0RFQ0xfQVRUUklCVVRFUworLyogR2l2ZW4gdHdvIFdpbmRvd3MgZGVjbCBhdHRyaWJ1dGVzIGxpc3RzLCBwb3NzaWJseSBpbmNsdWRpbmcKKyAgIGRsbGltcG9ydCwgcmV0dXJuIGEgbGlzdCBvZiB0aGVpciB1bmlvbiAuICAqLworZXh0ZXJuIHRyZWUgbWVyZ2VfZGxsaW1wb3J0X2RlY2xfYXR0cmlidXRlcyAodHJlZSwgdHJlZSk7CisKKy8qIEhhbmRsZSBhICJkbGxpbXBvcnQiIG9yICJkbGxleHBvcnQiIGF0dHJpYnV0ZS4gICovCitleHRlcm4gdHJlZSBoYW5kbGVfZGxsX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CisjZW5kaWYKKworLyogQ2hlY2sgd2hldGhlciBDQU5EIGlzIHN1aXRhYmxlIHRvIGJlIHJldHVybmVkIGZyb20gZ2V0X3F1YWxpZmllZF90eXBlCisgICAoQkFTRSwgVFlQRV9RVUFMUykuICAqLworCitleHRlcm4gYm9vbCBjaGVja19xdWFsaWZpZWRfdHlwZSAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSwgaW50KTsKKworLyogUmV0dXJuIGEgdmVyc2lvbiBvZiB0aGUgVFlQRSwgcXVhbGlmaWVkIGFzIGluZGljYXRlZCBieSB0aGUKKyAgIFRZUEVfUVVBTFMsIGlmIG9uZSBleGlzdHMuICBJZiBubyBxdWFsaWZpZWQgdmVyc2lvbiBleGlzdHMgeWV0LAorICAgcmV0dXJuIE5VTExfVFJFRS4gICovCisKK2V4dGVybiB0cmVlIGdldF9xdWFsaWZpZWRfdHlwZSAodHJlZSwgaW50KTsKKworLyogTGlrZSBnZXRfcXVhbGlmaWVkX3R5cGUsIGJ1dCBjcmVhdGVzIHRoZSB0eXBlIGlmIGl0IGRvZXMgbm90CisgICBleGlzdC4gIFRoaXMgZnVuY3Rpb24gbmV2ZXIgcmV0dXJucyBOVUxMX1RSRUUuICAqLworCitleHRlcm4gdHJlZSBidWlsZF9xdWFsaWZpZWRfdHlwZSAodHJlZSwgaW50KTsKKworLyogTGlrZSBidWlsZF9xdWFsaWZpZWRfdHlwZSwgYnV0IG9ubHkgZGVhbHMgd2l0aCB0aGUgYGNvbnN0JyBhbmQKKyAgIGB2b2xhdGlsZScgcXVhbGlmaWVycy4gIFRoaXMgaW50ZXJmYWNlIGlzIHJldGFpbmVkIGZvciBiYWNrd2FyZHMKKyAgIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgdmFyaW91cyBmcm9udC1lbmRzOyBuZXcgY29kZSBzaG91bGQgdXNlCisgICBidWlsZF9xdWFsaWZpZWRfdHlwZSBpbnN0ZWFkLiAgKi8KKworI2RlZmluZSBidWlsZF90eXBlX3ZhcmlhbnQoVFlQRSwgQ09OU1RfUCwgVk9MQVRJTEVfUCkJCQlcCisgIGJ1aWxkX3F1YWxpZmllZF90eXBlICgoVFlQRSksCQkJCQkJXAorCQkJKChDT05TVF9QKSA/IFRZUEVfUVVBTF9DT05TVCA6IDApCQlcCisJCQl8ICgoVk9MQVRJTEVfUCkgPyBUWVBFX1FVQUxfVk9MQVRJTEUgOiAwKSkKKworLyogTWFrZSBhIGNvcHkgb2YgYSB0eXBlIG5vZGUuICAqLworCitleHRlcm4gdHJlZSBidWlsZF9kaXN0aW5jdF90eXBlX2NvcHkgKHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfdmFyaWFudF90eXBlX2NvcHkgKHRyZWUpOworCisvKiBGaW5pc2ggdXAgYSBidWlsdGluIFJFQ09SRF9UWVBFLiBHaXZlIGl0IGEgbmFtZSBhbmQgcHJvdmlkZSBpdHMKKyAgIGZpZWxkcy4gT3B0aW9uYWxseSBzcGVjaWZ5IGFuIGFsaWdubWVudCwgYW5kIHRoZW4gbGF5IGl0IG91dC4gICovCisKK2V4dGVybiB2b2lkIGZpbmlzaF9idWlsdGluX3N0cnVjdCAodHJlZSwgY29uc3QgY2hhciAqLAorCQkJCQkJCSB0cmVlLCB0cmVlKTsKKworLyogR2l2ZW4gYSAuLi5fVFlQRSBub2RlLCBjYWxjdWxhdGUgdGhlIFRZUEVfU0laRSwgVFlQRV9TSVpFX1VOSVQsCisgICBUWVBFX0FMSUdOIGFuZCBUWVBFX01PREUgZmllbGRzLiAgSWYgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9uIG9uZQorICAgbm9kZSwgZG9lcyBub3RoaW5nIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IHRpbWUuICAqLworCitleHRlcm4gdm9pZCBsYXlvdXRfdHlwZSAodHJlZSk7CisKKy8qIFRoZXNlIGZ1bmN0aW9ucyBhbGxvdyBhIGZyb250LWVuZCB0byBwZXJmb3JtIGEgbWFudWFsIGxheW91dCBvZiBhCisgICBSRUNPUkRfVFlQRS4gIChGb3IgaW5zdGFuY2UsIGlmIHRoZSBwbGFjZW1lbnQgb2Ygc3Vic2VxdWVudCBmaWVsZHMKKyAgIGRlcGVuZHMgb24gdGhlIHBsYWNlbWVudCBvZiBmaWVsZHMgc28gZmFyLikgIEJlZ2luIGJ5IGNhbGxpbmcKKyAgIHN0YXJ0X3JlY29yZF9sYXlvdXQuICBUaGVuLCBjYWxsIHBsYWNlX2ZpZWxkIGZvciBlYWNoIG9mIHRoZQorICAgZmllbGRzLiAgVGhlbiwgY2FsbCBmaW5pc2hfcmVjb3JkX2xheW91dC4gIFNlZSBsYXlvdXRfdHlwZSBmb3IgdGhlCisgICBkZWZhdWx0IHdheSBpbiB3aGljaCB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQuICAqLworCit0eXBlZGVmIHN0cnVjdCByZWNvcmRfbGF5b3V0X2luZm9fcworeworICAvKiBUaGUgUkVDT1JEX1RZUEUgdGhhdCB3ZSBhcmUgbGF5aW5nIG91dC4gICovCisgIHRyZWUgdDsKKyAgLyogVGhlIG9mZnNldCBpbnRvIHRoZSByZWNvcmQgc28gZmFyLCBpbiBieXRlcywgbm90IGluY2x1ZGluZyBiaXRzIGluCisgICAgIEJJVFBPUy4gICovCisgIHRyZWUgb2Zmc2V0OworICAvKiBUaGUgbGFzdCBrbm93biBhbGlnbm1lbnQgb2YgU0laRS4gICovCisgIHVuc2lnbmVkIGludCBvZmZzZXRfYWxpZ247CisgIC8qIFRoZSBiaXQgcG9zaXRpb24gd2l0aGluIHRoZSBsYXN0IE9GRlNFVF9BTElHTiBiaXRzLCBpbiBiaXRzLiAgKi8KKyAgdHJlZSBiaXRwb3M7CisgIC8qIFRoZSBhbGlnbm1lbnQgb2YgdGhlIHJlY29yZCBzbyBmYXIsIGluIGJpdHMuICAqLworICB1bnNpZ25lZCBpbnQgcmVjb3JkX2FsaWduOworICAvKiBUaGUgYWxpZ25tZW50IG9mIHRoZSByZWNvcmQgc28gZmFyLCBpZ25vcmluZyAjcHJhZ21hIHBhY2sgYW5kCisgICAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSwgaW4gYml0cy4gICovCisgIHVuc2lnbmVkIGludCB1bnBhY2tlZF9hbGlnbjsKKyAgLyogVGhlIHByZXZpb3VzIGZpZWxkIGxheWVkIG91dC4gICovCisgIHRyZWUgcHJldl9maWVsZDsKKyAgLyogVGhlIHN0YXRpYyB2YXJpYWJsZXMgKGkuZS4sIGNsYXNzIHZhcmlhYmxlcywgYXMgb3Bwb3NlZCB0bworICAgICBpbnN0YW5jZSB2YXJpYWJsZXMpIGVuY291bnRlcmVkIGluIFQuICAqLworICB0cmVlIHBlbmRpbmdfc3RhdGljczsKKyAgLyogQml0cyByZW1haW5pbmcgaW4gdGhlIGN1cnJlbnQgYWxpZ25tZW50IGdyb3VwICovCisgIGludCByZW1haW5pbmdfaW5fYWxpZ25tZW50OworICAvKiBUcnVlIGlmIHdlJ3ZlIHNlZW4gYSBwYWNrZWQgZmllbGQgdGhhdCBkaWRuJ3QgaGF2ZSBub3JtYWwKKyAgICAgYWxpZ25tZW50IGFueXdheS4gICovCisgIGludCBwYWNrZWRfbWF5YmVfbmVjZXNzYXJ5OworfSAqcmVjb3JkX2xheW91dF9pbmZvOworCitleHRlcm4gcmVjb3JkX2xheW91dF9pbmZvIHN0YXJ0X3JlY29yZF9sYXlvdXQgKHRyZWUpOworZXh0ZXJuIHRyZWUgYml0X2Zyb21fcG9zICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ5dGVfZnJvbV9wb3MgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgcG9zX2Zyb21fYml0ICh0cmVlICosIHRyZWUgKiwgdW5zaWduZWQgaW50LCB0cmVlKTsKK2V4dGVybiB2b2lkIG5vcm1hbGl6ZV9vZmZzZXQgKHRyZWUgKiwgdHJlZSAqLCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHRyZWUgcmxpX3NpemVfdW5pdF9zb19mYXIgKHJlY29yZF9sYXlvdXRfaW5mbyk7CitleHRlcm4gdHJlZSBybGlfc2l6ZV9zb19mYXIgKHJlY29yZF9sYXlvdXRfaW5mbyk7CitleHRlcm4gdm9pZCBub3JtYWxpemVfcmxpIChyZWNvcmRfbGF5b3V0X2luZm8pOworZXh0ZXJuIHZvaWQgcGxhY2VfZmllbGQgKHJlY29yZF9sYXlvdXRfaW5mbywgdHJlZSk7CitleHRlcm4gdm9pZCBjb21wdXRlX3JlY29yZF9tb2RlICh0cmVlKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9yZWNvcmRfbGF5b3V0IChyZWNvcmRfbGF5b3V0X2luZm8sIGludCk7CisKKy8qIEdpdmVuIGEgaGFzaGNvZGUgYW5kIGEgLi4uX1RZUEUgbm9kZSAoZm9yIHdoaWNoIHRoZSBoYXNoY29kZSB3YXMgbWFkZSksCisgICByZXR1cm4gYSBjYW5vbmljYWxpemVkIC4uLl9UWVBFIG5vZGUsIHNvIHRoYXQgZHVwbGljYXRlcyBhcmUgbm90IG1hZGUuCisgICBIb3cgdGhlIGhhc2ggY29kZSBpcyBjb21wdXRlZCBpcyB1cCB0byB0aGUgY2FsbGVyLCBhcyBsb25nIGFzIGFueSB0d28KKyAgIGNhbGxlcnMgdGhhdCBjb3VsZCBoYXNoIGlkZW50aWNhbC1sb29raW5nIHR5cGUgbm9kZXMgYWdyZWUuICAqLworCitleHRlcm4gdHJlZSB0eXBlX2hhc2hfY2Fub24gKHVuc2lnbmVkIGludCwgdHJlZSk7CisKKy8qIEdpdmVuIGEgVkFSX0RFQ0wsIFBBUk1fREVDTCwgUkVTVUxUX0RFQ0wgb3IgRklFTERfREVDTCBub2RlLAorICAgY2FsY3VsYXRlcyB0aGUgREVDTF9TSVpFLCBERUNMX1NJWkVfVU5JVCwgREVDTF9BTElHTiBhbmQgREVDTF9NT0RFCisgICBmaWVsZHMuICBDYWxsIHRoaXMgb25seSBvbmNlIGZvciBhbnkgZ2l2ZW4gZGVjbCBub2RlLgorCisgICBTZWNvbmQgYXJndW1lbnQgaXMgdGhlIGJvdW5kYXJ5IHRoYXQgdGhpcyBmaWVsZCBjYW4gYmUgYXNzdW1lZCB0bworICAgYmUgc3RhcnRpbmcgYXQgKGluIGJpdHMpLiAgWmVybyBtZWFucyBpdCBjYW4gYmUgYXNzdW1lZCBhbGlnbmVkCisgICBvbiBhbnkgYm91bmRhcnkgdGhhdCBtYXkgYmUgbmVlZGVkLiAgKi8KKworZXh0ZXJuIHZvaWQgbGF5b3V0X2RlY2wgKHRyZWUsIHVuc2lnbmVkKTsKKworLyogR2l2ZW4gYSBWQVJfREVDTCwgUEFSTV9ERUNMIG9yIFJFU1VMVF9ERUNMLCBjbGVhcnMgdGhlIHJlc3VsdHMgb2YKKyAgIGEgcHJldmlvdXMgY2FsbCB0byBsYXlvdXRfZGVjbCBhbmQgY2FsbHMgaXQgYWdhaW4uICAqLworCitleHRlcm4gdm9pZCByZWxheW91dF9kZWNsICh0cmVlKTsKKworLyogUmV0dXJuIHRoZSBtb2RlIGZvciBkYXRhIG9mIGEgZ2l2ZW4gc2l6ZSBTSVpFIGFuZCBtb2RlIGNsYXNzIENMQVNTLgorICAgSWYgTElNSVQgaXMgbm9uemVybywgdGhlbiBkb24ndCB1c2UgbW9kZXMgYmlnZ2VyIHRoYW4gTUFYX0ZJWEVEX01PREVfU0laRS4KKyAgIFRoZSB2YWx1ZSBpcyBCTEttb2RlIGlmIG5vIG90aGVyIG1vZGUgaXMgZm91bmQuICBUaGlzIGlzIGxpa2UKKyAgIG1vZGVfZm9yX3NpemUsIGJ1dCBpcyBwYXNzZWQgYSB0cmVlLiAgKi8KKworZXh0ZXJuIGVudW0gbWFjaGluZV9tb2RlIG1vZGVfZm9yX3NpemVfdHJlZSAoY29uc3RfdHJlZSwgZW51bSBtb2RlX2NsYXNzLCBpbnQpOworCisvKiBSZXR1cm4gYW4gZXhwciBlcXVhbCB0byBYIGJ1dCBjZXJ0YWlubHkgbm90IHZhbGlkIGFzIGFuIGx2YWx1ZS4gICovCisKKyNkZWZpbmUgbm9uX2x2YWx1ZShUKSBub25fbHZhbHVlX2xvYyAoVU5LTk9XTl9MT0NBVElPTiwgVCkKK2V4dGVybiB0cmVlIG5vbl9sdmFsdWVfbG9jIChsb2NhdGlvbl90LCB0cmVlKTsKKworZXh0ZXJuIHRyZWUgY29udmVydCAodHJlZSwgdHJlZSk7CitleHRlcm4gdW5zaWduZWQgaW50IGV4cHJfYWxpZ24gKGNvbnN0X3RyZWUpOworZXh0ZXJuIHRyZWUgZXhwcl9maXJzdCAodHJlZSk7CitleHRlcm4gdHJlZSBleHByX2xhc3QgKHRyZWUpOworZXh0ZXJuIHRyZWUgc2l6ZV9pbl9ieXRlcyAoY29uc3RfdHJlZSk7CitleHRlcm4gSE9TVF9XSURFX0lOVCBpbnRfc2l6ZV9pbl9ieXRlcyAoY29uc3RfdHJlZSk7CitleHRlcm4gSE9TVF9XSURFX0lOVCBtYXhfaW50X3NpemVfaW5fYnl0ZXMgKGNvbnN0X3RyZWUpOworZXh0ZXJuIHRyZWUgdHJlZV9leHByX3NpemUgKGNvbnN0X3RyZWUpOworZXh0ZXJuIHRyZWUgYml0X3Bvc2l0aW9uIChjb25zdF90cmVlKTsKK2V4dGVybiBIT1NUX1dJREVfSU5UIGludF9iaXRfcG9zaXRpb24gKGNvbnN0X3RyZWUpOworZXh0ZXJuIHRyZWUgYnl0ZV9wb3NpdGlvbiAoY29uc3RfdHJlZSk7CitleHRlcm4gSE9TVF9XSURFX0lOVCBpbnRfYnl0ZV9wb3NpdGlvbiAoY29uc3RfdHJlZSk7CisKKy8qIERlZmluZSBkYXRhIHN0cnVjdHVyZXMsIG1hY3JvcywgYW5kIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgc2l6ZXMKKyAgIGFuZCB0aGUgdmFyaW91cyB0eXBlcyB1c2VkIHRvIHJlcHJlc2VudCBzaXplcy4gICovCisKK2VudW0gc2l6ZV90eXBlX2tpbmQKK3sKKyAgU0laRVRZUEUsCQkvKiBOb3JtYWwgcmVwcmVzZW50YXRpb24gb2Ygc2l6ZXMgaW4gYnl0ZXMuICAqLworICBTU0laRVRZUEUsCQkvKiBTaWduZWQgcmVwcmVzZW50YXRpb24gb2Ygc2l6ZXMgaW4gYnl0ZXMuICAqLworICBCSVRTSVpFVFlQRSwJCS8qIE5vcm1hbCByZXByZXNlbnRhdGlvbiBvZiBzaXplcyBpbiBiaXRzLiAgKi8KKyAgU0JJVFNJWkVUWVBFLAkJLyogU2lnbmVkIHJlcHJlc2VudGF0aW9uIG9mIHNpemVzIGluIGJpdHMuICAqLworICBUWVBFX0tJTkRfTEFTVH07CisKK2V4dGVybiBHVFkoKCkpIHRyZWUgc2l6ZXR5cGVfdGFiWyhpbnQpIFRZUEVfS0lORF9MQVNUXTsKKworI2RlZmluZSBzaXpldHlwZSBzaXpldHlwZV90YWJbKGludCkgU0laRVRZUEVdCisjZGVmaW5lIGJpdHNpemV0eXBlIHNpemV0eXBlX3RhYlsoaW50KSBCSVRTSVpFVFlQRV0KKyNkZWZpbmUgc3NpemV0eXBlIHNpemV0eXBlX3RhYlsoaW50KSBTU0laRVRZUEVdCisjZGVmaW5lIHNiaXRzaXpldHlwZSBzaXpldHlwZV90YWJbKGludCkgU0JJVFNJWkVUWVBFXQorCitleHRlcm4gdHJlZSBzaXplX2ludF9raW5kIChIT1NUX1dJREVfSU5ULCBlbnVtIHNpemVfdHlwZV9raW5kKTsKKyNkZWZpbmUgc2l6ZV9iaW5vcChDT0RFLFQxLFQyKVwKKyAgIHNpemVfYmlub3BfbG9jIChVTktOT1dOX0xPQ0FUSU9OLCBDT0RFLCBUMSwgVDIpCitleHRlcm4gdHJlZSBzaXplX2Jpbm9wX2xvYyAobG9jYXRpb25fdCwgZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUpOworI2RlZmluZSBzaXplX2RpZmZvcChUMSxUMilcCisgICBzaXplX2RpZmZvcF9sb2MgKFVOS05PV05fTE9DQVRJT04sIFQxLCBUMikKK2V4dGVybiB0cmVlIHNpemVfZGlmZm9wX2xvYyAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSk7CisKKyNkZWZpbmUgc2l6ZV9pbnQoTCkgc2l6ZV9pbnRfa2luZCAoTCwgU0laRVRZUEUpCisjZGVmaW5lIHNzaXplX2ludChMKSBzaXplX2ludF9raW5kIChMLCBTU0laRVRZUEUpCisjZGVmaW5lIGJpdHNpemVfaW50KEwpIHNpemVfaW50X2tpbmQgKEwsIEJJVFNJWkVUWVBFKQorI2RlZmluZSBzYml0c2l6ZV9pbnQoTCkgc2l6ZV9pbnRfa2luZCAoTCwgU0JJVFNJWkVUWVBFKQorCisjZGVmaW5lIHJvdW5kX3VwKFQsTikgcm91bmRfdXBfbG9jIChVTktOT1dOX0xPQ0FUSU9OLCBULCBOKQorZXh0ZXJuIHRyZWUgcm91bmRfdXBfbG9jIChsb2NhdGlvbl90LCB0cmVlLCBpbnQpOworI2RlZmluZSByb3VuZF9kb3duKFQsTikgcm91bmRfZG93bl9sb2MgKFVOS05PV05fTE9DQVRJT04sIFQsIE4pCitleHRlcm4gdHJlZSByb3VuZF9kb3duX2xvYyAobG9jYXRpb25fdCwgdHJlZSwgaW50KTsKK2V4dGVybiB0cmVlIGdldF9wZW5kaW5nX3NpemVzICh2b2lkKTsKK2V4dGVybiB2b2lkIHB1dF9wZW5kaW5nX3NpemUgKHRyZWUpOworZXh0ZXJuIHZvaWQgcHV0X3BlbmRpbmdfc2l6ZXMgKHRyZWUpOworZXh0ZXJuIHZvaWQgZmluYWxpemVfc2l6ZV9mdW5jdGlvbnMgKHZvaWQpOworCisvKiBUeXBlIGZvciBzaXplcyBvZiBkYXRhLXR5cGUuICAqLworCisjZGVmaW5lIEJJVFNfUEVSX1VOSVRfTE9HIFwKKyAgKChCSVRTX1BFUl9VTklUID4gMSkgKyAoQklUU19QRVJfVU5JVCA+IDIpICsgKEJJVFNfUEVSX1VOSVQgPiA0KSBcCisgICArIChCSVRTX1BFUl9VTklUID4gOCkgKyAoQklUU19QRVJfVU5JVCA+IDE2KSArIChCSVRTX1BFUl9VTklUID4gMzIpIFwKKyAgICsgKEJJVFNfUEVSX1VOSVQgPiA2NCkgKyAoQklUU19QRVJfVU5JVCA+IDEyOCkgKyAoQklUU19QRVJfVU5JVCA+IDI1NikpCisKKy8qIElmIG5vbnplcm8sIGFuIHVwcGVyIGxpbWl0IG9uIGFsaWdubWVudCBvZiBzdHJ1Y3R1cmUgZmllbGRzLCBpbiBiaXRzLCAgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgbWF4aW11bV9maWVsZF9hbGlnbm1lbnQ7CisvKiBhbmQgaXRzIG9yaWdpbmFsIHZhbHVlIGluIGJ5dGVzLCBzcGVjaWZpZWQgdmlhIC1mcGFjay1zdHJ1Y3Q9PHZhbHVlPi4gICovCitleHRlcm4gdW5zaWduZWQgaW50IGluaXRpYWxfbWF4X2ZsZF9hbGlnbjsKKworLyogQ29uY2F0ZW5hdGUgdHdvIGxpc3RzIChjaGFpbnMgb2YgVFJFRV9MSVNUIG5vZGVzKSBYIGFuZCBZCisgICBieSBtYWtpbmcgdGhlIGxhc3Qgbm9kZSBpbiBYIHBvaW50IHRvIFkuCisgICBSZXR1cm5zIFgsIGV4Y2VwdCBpZiBYIGlzIDAgcmV0dXJucyBZLiAgKi8KKworZXh0ZXJuIHRyZWUgY2hhaW5vbiAodHJlZSwgdHJlZSk7CisKKy8qIE1ha2UgYSBuZXcgVFJFRV9MSVNUIG5vZGUgZnJvbSBzcGVjaWZpZWQgUFVSUE9TRSwgVkFMVUUgYW5kIENIQUlOLiAgKi8KKworZXh0ZXJuIHRyZWUgdHJlZV9jb25zX3N0YXQgKHRyZWUsIHRyZWUsIHRyZWUgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIHRyZWVfY29ucyh0LHEsdykgdHJlZV9jb25zX3N0YXQgKHQscSx3IE1FTV9TVEFUX0lORk8pCisKKy8qIFJldHVybiB0aGUgbGFzdCB0cmVlIG5vZGUgaW4gYSBjaGFpbi4gICovCisKK2V4dGVybiB0cmVlIHRyZWVfbGFzdCAodHJlZSk7CisKKy8qIFJldmVyc2UgdGhlIG9yZGVyIG9mIGVsZW1lbnRzIGluIGEgY2hhaW4sIGFuZCByZXR1cm4gdGhlIG5ldyBoZWFkLiAgKi8KKworZXh0ZXJuIHRyZWUgbnJldmVyc2UgKHRyZWUpOworCisvKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgYSBjaGFpbiBvZiBub2RlcworICAgKG51bWJlciBvZiBjaGFpbiBwb2ludGVycyB0byBmb2xsb3cgYmVmb3JlIHJlYWNoaW5nIGEgbnVsbCBwb2ludGVyKS4gICovCisKK2V4dGVybiBpbnQgbGlzdF9sZW5ndGggKGNvbnN0X3RyZWUpOworCisvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgRklFTERfREVDTHMgaW4gYSB0eXBlLiAgKi8KKworZXh0ZXJuIGludCBmaWVsZHNfbGVuZ3RoIChjb25zdF90cmVlKTsKKworLyogUmV0dXJucyB0aGUgZmlyc3QgRklFTERfREVDTCBpbiBhIHR5cGUuICAqLworCitleHRlcm4gdHJlZSBmaXJzdF9maWVsZCAoY29uc3RfdHJlZSk7CisKKy8qIEdpdmVuIGFuIGluaXRpYWxpemVyIElOSVQsIHJldHVybiBUUlVFIGlmIElOSVQgaXMgemVybyBvciBzb21lCisgICBhZ2dyZWdhdGUgb2YgemVyb3MuICBPdGhlcndpc2UgcmV0dXJuIEZBTFNFLiAgKi8KKworZXh0ZXJuIGJvb2wgaW5pdGlhbGl6ZXJfemVyb3AgKGNvbnN0X3RyZWUpOworCisvKiBHaXZlbiBhIENPTlNUUlVDVE9SIENUT1IsIHJldHVybiB0aGUgZWxlbWVudHMgYXMgYSBUUkVFX0xJU1QuICAqLworCitleHRlcm4gdHJlZSBjdG9yX3RvX2xpc3QgKHRyZWUpOworCisvKiBHaXZlbiBhIENPTlNUUlVDVE9SIENUT1IsIHJldHVybiB0aGUgZWxlbWVudCB2YWx1ZXMgYXMgYSB2ZWN0b3IuICAqLworCitleHRlcm4gVkVDKHRyZWUsZ2MpICpjdG9yX3RvX3ZlYyAodHJlZSk7CisKKy8qIEV4YW1pbmUgQ1RPUiB0byBkaXNjb3ZlcjoKKyAgICogaG93IG1hbnkgc2NhbGFyIGZpZWxkcyBhcmUgc2V0IHRvIG5vbnplcm8gdmFsdWVzLAorICAgICBhbmQgcGxhY2UgaXQgaW4gKlBfTlpfRUxUUzsKKyAgICogaG93IG1hbnkgc2NhbGFyIGZpZWxkcyBpbiB0b3RhbCBhcmUgaW4gQ1RPUiwKKyAgICAgYW5kIHBsYWNlIGl0IGluICpQX0VMVF9DT1VOVC4KKyAgICogaWYgYSB0eXBlIGlzIGEgdW5pb24sIGFuZCB0aGUgaW5pdGlhbGl6ZXIgZnJvbSB0aGUgY29uc3RydWN0b3IKKyAgICAgaXMgbm90IHRoZSBsYXJnZXN0IGVsZW1lbnQgaW4gdGhlIHVuaW9uLCB0aGVuIHNldCAqcF9tdXN0X2NsZWFyLgorCisgICBSZXR1cm4gd2hldGhlciBvciBub3QgQ1RPUiBpcyBhIHZhbGlkIHN0YXRpYyBjb25zdGFudCBpbml0aWFsaXplciwgdGhlIHNhbWUKKyAgIGFzICJpbml0aWFsaXplcl9jb25zdGFudF92YWxpZF9wIChDVE9SLCBUUkVFX1RZUEUgKENUT1IpKSAhPSAwIi4gICovCisKK2V4dGVybiBib29sIGNhdGVnb3JpemVfY3Rvcl9lbGVtZW50cyAoY29uc3RfdHJlZSwgSE9TVF9XSURFX0lOVCAqLCBIT1NUX1dJREVfSU5UICosCisJCQkJICAgICAgYm9vbCAqKTsKKworZXh0ZXJuIEhPU1RfV0lERV9JTlQgY291bnRfdHlwZV9lbGVtZW50cyAoY29uc3RfdHJlZSwgYm9vbCk7CisKKy8qIGludGVnZXJfemVyb3AgKHRyZWUgeCkgaXMgbm9uemVybyBpZiBYIGlzIGFuIGludGVnZXIgY29uc3RhbnQgb2YgdmFsdWUgMC4gICovCisKK2V4dGVybiBpbnQgaW50ZWdlcl96ZXJvcCAoY29uc3RfdHJlZSk7CisKKy8qIGludGVnZXJfb25lcCAodHJlZSB4KSBpcyBub256ZXJvIGlmIFggaXMgYW4gaW50ZWdlciBjb25zdGFudCBvZiB2YWx1ZSAxLiAgKi8KKworZXh0ZXJuIGludCBpbnRlZ2VyX29uZXAgKGNvbnN0X3RyZWUpOworCisvKiBpbnRlZ2VyX2FsbF9vbmVzcCAodHJlZSB4KSBpcyBub256ZXJvIGlmIFggaXMgYW4gaW50ZWdlciBjb25zdGFudAorICAgYWxsIG9mIHdob3NlIHNpZ25pZmljYW50IGJpdHMgYXJlIDEuICAqLworCitleHRlcm4gaW50IGludGVnZXJfYWxsX29uZXNwIChjb25zdF90cmVlKTsKKworLyogaW50ZWdlcl9wb3cycCAodHJlZSB4KSBpcyBub256ZXJvIGlzIFggaXMgYW4gaW50ZWdlciBjb25zdGFudCB3aXRoCisgICBleGFjdGx5IG9uZSBiaXQgMS4gICovCisKK2V4dGVybiBpbnQgaW50ZWdlcl9wb3cycCAoY29uc3RfdHJlZSk7CisKKy8qIGludGVnZXJfbm9uemVyb3AgKHRyZWUgeCkgaXMgbm9uemVybyBpZiBYIGlzIGFuIGludGVnZXIgY29uc3RhbnQKKyAgIHdpdGggYSBub256ZXJvIHZhbHVlLiAgKi8KKworZXh0ZXJuIGludCBpbnRlZ2VyX25vbnplcm9wIChjb25zdF90cmVlKTsKKworZXh0ZXJuIGJvb2wgY3N0X2FuZF9maXRzX2luX2h3aSAoY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSBudW1fZW5kaW5nX3plcm9zIChjb25zdF90cmVlKTsKKworLyogZml4ZWRfemVyb3AgKHRyZWUgeCkgaXMgbm9uemVybyBpZiBYIGlzIGEgZml4ZWQtcG9pbnQgY29uc3RhbnQgb2YKKyAgIHZhbHVlIDAuICAqLworCitleHRlcm4gaW50IGZpeGVkX3plcm9wIChjb25zdF90cmVlKTsKKworLyogc3RhdGljcCAodHJlZSB4KSBpcyBub256ZXJvIGlmIFggaXMgYSByZWZlcmVuY2UgdG8gZGF0YSBhbGxvY2F0ZWQKKyAgIGF0IGEgZml4ZWQgYWRkcmVzcyBpbiBtZW1vcnkuICBSZXR1cm5zIHRoZSBvdXRlcm1vc3QgZGF0YS4gICovCisKK2V4dGVybiB0cmVlIHN0YXRpY3AgKHRyZWUpOworCisvKiBzYXZlX2V4cHIgKEVYUCkgcmV0dXJucyBhbiBleHByZXNzaW9uIGVxdWl2YWxlbnQgdG8gRVhQCisgICBidXQgaXQgY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMgd2l0aGluIGNvbnRleHQgQ1RYCisgICBhbmQgb25seSBldmFsdWF0ZSBFWFAgb25jZS4gICovCisKK2V4dGVybiB0cmVlIHNhdmVfZXhwciAodHJlZSk7CisKKy8qIExvb2sgaW5zaWRlIEVYUFIgYW5kIGludG8gYW55IHNpbXBsZSBhcml0aG1ldGljIG9wZXJhdGlvbnMuICBSZXR1cm4KKyAgIHRoZSBpbm5lcm1vc3Qgbm9uLWFyaXRobWV0aWMgbm9kZS4gICovCisKK2V4dGVybiB0cmVlIHNraXBfc2ltcGxlX2FyaXRobWV0aWMgKHRyZWUpOworCisvKiBSZXR1cm4gd2hpY2ggdHJlZSBzdHJ1Y3R1cmUgaXMgdXNlZCBieSBULiAgKi8KKworZW51bSB0cmVlX25vZGVfc3RydWN0dXJlX2VudW0gdHJlZV9ub2RlX3N0cnVjdHVyZSAoY29uc3RfdHJlZSk7CisKKy8qIFJldHVybiAxIGlmIEVYUCBjb250YWlucyBhIFBMQUNFSE9MREVSX0VYUFI7IGkuZS4sIGlmIGl0IHJlcHJlc2VudHMgYSBzaXplCisgICBvciBvZmZzZXQgdGhhdCBkZXBlbmRzIG9uIGEgZmllbGQgd2l0aGluIGEgcmVjb3JkLgorCisgICBOb3RlIHRoYXQgd2Ugb25seSBhbGxvdyBzdWNoIGV4cHJlc3Npb25zIHdpdGhpbiBzaW1wbGUgYXJpdGhtZXRpYworICAgb3IgYSBDT05EX0VYUFIuICAqLworCitleHRlcm4gYm9vbCBjb250YWluc19wbGFjZWhvbGRlcl9wIChjb25zdF90cmVlKTsKKworLyogVGhpcyBtYWNybyBjYWxscyB0aGUgYWJvdmUgZnVuY3Rpb24gYnV0IHNob3J0LWNpcmN1aXRzIHRoZSBjb21tb24KKyAgIGNhc2Ugb2YgYSBjb25zdGFudCB0byBzYXZlIHRpbWUuICBBbHNvIGNoZWNrIGZvciBudWxsLiAgKi8KKworI2RlZmluZSBDT05UQUlOU19QTEFDRUhPTERFUl9QKEVYUCkgXAorICAoKEVYUCkgIT0gMCAmJiAhIFRSRUVfQ09OU1RBTlQgKEVYUCkgJiYgY29udGFpbnNfcGxhY2Vob2xkZXJfcCAoRVhQKSkKKworLyogUmV0dXJuIDEgaWYgYW55IHBhcnQgb2YgdGhlIGNvbXB1dGF0aW9uIG9mIFRZUEUgaW52b2x2ZXMgYSBQTEFDRUhPTERFUl9FWFBSLgorICAgVGhpcyBpbmNsdWRlcyBzaXplLCBib3VuZHMsIHF1YWxpZmllcnMgKGZvciBRVUFMX1VOSU9OX1RZUEUpIGFuZCBmaWVsZAorICAgcG9zaXRpb25zLiAgKi8KKworZXh0ZXJuIGJvb2wgdHlwZV9jb250YWluc19wbGFjZWhvbGRlcl9wICh0cmVlKTsKKworLyogR2l2ZW4gYSB0cmVlIEVYUCwgZmluZCBhbGwgb2NjdXJlbmNlcyBvZiByZWZlcmVuY2VzIHRvIGZpZWxkcworICAgaW4gYSBQTEFDRUhPTERFUl9FWFBSIGFuZCBwbGFjZSB0aGVtIGluIHZlY3RvciBSRUZTIHdpdGhvdXQKKyAgIGR1cGxpY2F0ZXMuICBBbHNvIHJlY29yZCBWQVJfREVDTHMgYW5kIENPTlNUX0RFQ0xzLiAgTm90ZSB0aGF0CisgICB3ZSBhc3N1bWUgaGVyZSB0aGF0IEVYUCBjb250YWlucyBvbmx5IGFyaXRobWV0aWMgZXhwcmVzc2lvbnMKKyAgIG9yIENBTExfRVhQUnMgd2l0aCBQTEFDRUhPTERFUl9FWFBScyBvY2N1cnJpbmcgb25seSBpbiB0aGVpcgorICAgYXJndW1lbnQgbGlzdC4gICovCisKK2V4dGVybiB2b2lkIGZpbmRfcGxhY2Vob2xkZXJfaW5fZXhwciAodHJlZSwgVkVDICh0cmVlLCBoZWFwKSAqKik7CisKKy8qIFRoaXMgbWFjcm8gY2FsbHMgdGhlIGFib3ZlIGZ1bmN0aW9uIGJ1dCBzaG9ydC1jaXJjdWl0cyB0aGUgY29tbW9uCisgICBjYXNlIG9mIGEgY29uc3RhbnQgdG8gc2F2ZSB0aW1lIGFuZCBhbHNvIGNoZWNrcyBmb3IgTlVMTC4gICovCisKKyNkZWZpbmUgRklORF9QTEFDRUhPTERFUl9JTl9FWFBSKEVYUCwgVikgXAorZG8gewkJCQkJIFwKKyAgaWYoKEVYUCkgJiYgIVRSRUVfQ09OU1RBTlQgKEVYUCkpCSBcCisgICAgZmluZF9wbGFjZWhvbGRlcl9pbl9leHByIChFWFAsIFYpOwkgXAorfSB3aGlsZSAoMCkKKworLyogR2l2ZW4gYSB0cmVlIEVYUCwgYSBGSUVMRF9ERUNMIEYsIGFuZCBhIHJlcGxhY2VtZW50IHZhbHVlIFIsCisgICByZXR1cm4gYSB0cmVlIHdpdGggYWxsIG9jY3VycmVuY2VzIG9mIHJlZmVyZW5jZXMgdG8gRiBpbiBhCisgICBQTEFDRUhPTERFUl9FWFBSIHJlcGxhY2VkIGJ5IFIuICBBbHNvIGhhbmRsZSBWQVJfREVDTHMgYW5kCisgICBDT05TVF9ERUNMcy4gIE5vdGUgdGhhdCB3ZSBhc3N1bWUgaGVyZSB0aGF0IEVYUCBjb250YWlucyBvbmx5CisgICBhcml0aG1ldGljIGV4cHJlc3Npb25zIG9yIENBTExfRVhQUnMgd2l0aCBQTEFDRUhPTERFUl9FWFBScworICAgb2NjdXJyaW5nIG9ubHkgaW4gdGhlaXIgYXJndW1lbnQgbGlzdC4gICovCisKK2V4dGVybiB0cmVlIHN1YnN0aXR1dGVfaW5fZXhwciAodHJlZSwgdHJlZSwgdHJlZSk7CisKKy8qIFRoaXMgbWFjcm8gY2FsbHMgdGhlIGFib3ZlIGZ1bmN0aW9uIGJ1dCBzaG9ydC1jaXJjdWl0cyB0aGUgY29tbW9uCisgICBjYXNlIG9mIGEgY29uc3RhbnQgdG8gc2F2ZSB0aW1lIGFuZCBhbHNvIGNoZWNrcyBmb3IgTlVMTC4gICovCisKKyNkZWZpbmUgU1VCU1RJVFVURV9JTl9FWFBSKEVYUCwgRiwgUikgXAorICAoKEVYUCkgPT0gMCB8fCBUUkVFX0NPTlNUQU5UIChFWFApID8gKEVYUCkgOiBzdWJzdGl0dXRlX2luX2V4cHIgKEVYUCwgRiwgUikpCisKKy8qIFNpbWlsYXIsIGJ1dCBsb29rIGZvciBhIFBMQUNFSE9MREVSX0VYUFIgaW4gRVhQIGFuZCBmaW5kIGEgcmVwbGFjZW1lbnQKKyAgIGZvciBpdCB3aXRoaW4gT0JKLCBhIHRyZWUgdGhhdCBpcyBhbiBvYmplY3Qgb3IgYSBjaGFpbiBvZiByZWZlcmVuY2VzLiAgKi8KKworZXh0ZXJuIHRyZWUgc3Vic3RpdHV0ZV9wbGFjZWhvbGRlcl9pbl9leHByICh0cmVlLCB0cmVlKTsKKworLyogVGhpcyBtYWNybyBjYWxscyB0aGUgYWJvdmUgZnVuY3Rpb24gYnV0IHNob3J0LWNpcmN1aXRzIHRoZSBjb21tb24KKyAgIGNhc2Ugb2YgYSBjb25zdGFudCB0byBzYXZlIHRpbWUgYW5kIGFsc28gY2hlY2tzIGZvciBOVUxMLiAgKi8KKworI2RlZmluZSBTVUJTVElUVVRFX1BMQUNFSE9MREVSX0lOX0VYUFIoRVhQLCBPQkopIFwKKyAgKChFWFApID09IDAgfHwgVFJFRV9DT05TVEFOVCAoRVhQKSA/IChFWFApCVwKKyAgIDogc3Vic3RpdHV0ZV9wbGFjZWhvbGRlcl9pbl9leHByIChFWFAsIE9CSikpCisKKy8qIHZhcmlhYmxlX3NpemUgKEVYUCkgaXMgbGlrZSBzYXZlX2V4cHIgKEVYUCkgZXhjZXB0IHRoYXQgaXQKKyAgIGlzIGZvciB0aGUgc3BlY2lhbCBjYXNlIG9mIHNvbWV0aGluZyB0aGF0IGlzIHBhcnQgb2YgYQorICAgdmFyaWFibGUgc2l6ZSBmb3IgYSBkYXRhIHR5cGUuICBJdCBtYWtlcyBzcGVjaWFsIGFycmFuZ2VtZW50cworICAgdG8gY29tcHV0ZSB0aGUgdmFsdWUgYXQgdGhlIHJpZ2h0IHRpbWUgd2hlbiB0aGUgZGF0YSB0eXBlCisgICBiZWxvbmdzIHRvIGEgZnVuY3Rpb24gcGFyYW1ldGVyLiAgKi8KKworZXh0ZXJuIHRyZWUgdmFyaWFibGVfc2l6ZSAodHJlZSk7CisKKy8qIHN0YWJpbGl6ZV9yZWZlcmVuY2UgKEVYUCkgcmV0dXJucyBhIHJlZmVyZW5jZSBlcXVpdmFsZW50IHRvIEVYUAorICAgYnV0IGl0IGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzCisgICBhbmQgb25seSBldmFsdWF0ZSB0aGUgc3ViZXhwcmVzc2lvbnMgb25jZS4gICovCisKK2V4dGVybiB0cmVlIHN0YWJpbGl6ZV9yZWZlcmVuY2UgKHRyZWUpOworCisvKiBTdWJyb3V0aW5lIG9mIHN0YWJpbGl6ZV9yZWZlcmVuY2U7IHRoaXMgaXMgY2FsbGVkIGZvciBzdWJ0cmVlcyBvZgorICAgcmVmZXJlbmNlcy4gIEFueSBleHByZXNzaW9uIHdpdGggc2lkZS1lZmZlY3RzIG11c3QgYmUgcHV0IGluIGEgU0FWRV9FWFBSCisgICB0byBlbnN1cmUgdGhhdCBpdCBpcyBvbmx5IGV2YWx1YXRlZCBvbmNlLiAgKi8KKworZXh0ZXJuIHRyZWUgc3RhYmlsaXplX3JlZmVyZW5jZV8xICh0cmVlKTsKKworLyogUmV0dXJuIEVYUCwgc3RyaXBwZWQgb2YgYW55IGNvbnZlcnNpb25zIHRvIHdpZGVyIHR5cGVzCisgICBpbiBzdWNoIGEgd2F5IHRoYXQgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIHRvIHR5cGUgRk9SX1RZUEUKKyAgIGlzIHRoZSBzYW1lIGFzIGlmIEVYUCB3ZXJlIGNvbnZlcnRlZCB0byBGT1JfVFlQRS4KKyAgIElmIEZPUl9UWVBFIGlzIDAsIGl0IHNpZ25pZmllcyBFWFAncyB0eXBlLiAgKi8KKworZXh0ZXJuIHRyZWUgZ2V0X3Vud2lkZW5lZCAodHJlZSwgdHJlZSk7CisKKy8qIFJldHVybiBPUCBvciBhIHNpbXBsZXIgZXhwcmVzc2lvbiBmb3IgYSBuYXJyb3dlciB2YWx1ZQorICAgd2hpY2ggY2FuIGJlIHNpZ24tZXh0ZW5kZWQgb3IgemVyby1leHRlbmRlZCB0byBnaXZlIGJhY2sgT1AuCisgICBTdG9yZSBpbiAqVU5TSUdORURQX1BUUiBlaXRoZXIgMSBpZiB0aGUgdmFsdWUgc2hvdWxkIGJlIHplcm8tZXh0ZW5kZWQKKyAgIG9yIDAgaWYgdGhlIHZhbHVlIHNob3VsZCBiZSBzaWduLWV4dGVuZGVkLiAgKi8KKworZXh0ZXJuIHRyZWUgZ2V0X25hcnJvd2VyICh0cmVlLCBpbnQgKik7CisKKy8qIFJldHVybiB0cnVlIGlmIFQgaXMgYW4gZXhwcmVzc2lvbiB0aGF0IGdldF9pbm5lcl9yZWZlcmVuY2UgaGFuZGxlcy4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraGFuZGxlZF9jb21wb25lbnRfcCAoY29uc3RfdHJlZSB0KQoreworICBzd2l0Y2ggKFRSRUVfQ09ERSAodCkpCisgICAgeworICAgIGNhc2UgQklUX0ZJRUxEX1JFRjoKKyAgICBjYXNlIENPTVBPTkVOVF9SRUY6CisgICAgY2FzZSBBUlJBWV9SRUY6CisgICAgY2FzZSBBUlJBWV9SQU5HRV9SRUY6CisgICAgY2FzZSBWSUVXX0NPTlZFUlRfRVhQUjoKKyAgICBjYXNlIFJFQUxQQVJUX0VYUFI6CisgICAgY2FzZSBJTUFHUEFSVF9FWFBSOgorICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworLyogR2l2ZW4gYW4gZXhwcmVzc2lvbiBFWFAgdGhhdCBpcyBhIGhhbmRsZWRfY29tcG9uZW50X3AsCisgICBsb29rIGZvciB0aGUgdWx0aW1hdGUgY29udGFpbmluZyBvYmplY3QsIHdoaWNoIGlzIHJldHVybmVkIGFuZCBzcGVjaWZ5CisgICB0aGUgYWNjZXNzIHBvc2l0aW9uIGFuZCBzaXplLiAgKi8KKworZXh0ZXJuIHRyZWUgZ2V0X2lubmVyX3JlZmVyZW5jZSAodHJlZSwgSE9TVF9XSURFX0lOVCAqLCBIT1NUX1dJREVfSU5UICosCisJCQkJIHRyZWUgKiwgZW51bSBtYWNoaW5lX21vZGUgKiwgaW50ICosIGludCAqLAorCQkJCSBib29sKTsKKworLyogR2l2ZW4gYW4gZXhwcmVzc2lvbiBFWFAgdGhhdCBtYXkgYmUgYSBDT01QT05FTlRfUkVGLCBhbiBBUlJBWV9SRUYgb3IgYW4KKyAgIEFSUkFZX1JBTkdFX1JFRiwgbG9vayBmb3Igd2hldGhlciBFWFAgb3IgYW55IG5lc3RlZCBjb21wb25lbnQtcmVmcyB3aXRoaW4KKyAgIEVYUCBpcyBtYXJrZWQgYXMgUEFDS0VELiAgKi8KKworZXh0ZXJuIGJvb2wgY29udGFpbnNfcGFja2VkX3JlZmVyZW5jZSAoY29uc3RfdHJlZSBleHApOworCisvKiBSZXR1cm4gYSB0cmVlIG9mIHNpemV0eXBlIHJlcHJlc2VudGluZyB0aGUgc2l6ZSwgaW4gYnl0ZXMsIG9mIHRoZSBlbGVtZW50CisgICBvZiBFWFAsIGFuIEFSUkFZX1JFRiBvciBhbiBBUlJBWV9SQU5HRV9SRUYuICAqLworCitleHRlcm4gdHJlZSBhcnJheV9yZWZfZWxlbWVudF9zaXplICh0cmVlKTsKKworLyogUmV0dXJuIGEgdHJlZSByZXByZXNlbnRpbmcgdGhlIGxvd2VyIGJvdW5kIG9mIHRoZSBhcnJheSBtZW50aW9uZWQgaW4KKyAgIEVYUCwgYW4gQVJSQVlfUkVGIG9yIGFuIEFSUkFZX1JBTkdFX1JFRi4gICovCisKK2V4dGVybiB0cmVlIGFycmF5X3JlZl9sb3dfYm91bmQgKHRyZWUpOworCisvKiBSZXR1cm4gYSB0cmVlIHJlcHJlc2VudGluZyB0aGUgdXBwZXIgYm91bmQgb2YgdGhlIGFycmF5IG1lbnRpb25lZCBpbgorICAgRVhQLCBhbiBBUlJBWV9SRUYgb3IgYW4gQVJSQVlfUkFOR0VfUkVGLiAgKi8KKworZXh0ZXJuIHRyZWUgYXJyYXlfcmVmX3VwX2JvdW5kICh0cmVlKTsKKworLyogUmV0dXJuIGEgdHJlZSByZXByZXNlbnRpbmcgdGhlIG9mZnNldCwgaW4gYnl0ZXMsIG9mIHRoZSBmaWVsZCByZWZlcmVuY2VkCisgICBieSBFWFAuICBUaGlzIGRvZXMgbm90IGluY2x1ZGUgYW55IG9mZnNldCBpbiBERUNMX0ZJRUxEX0JJVF9PRkZTRVQuICAqLworCitleHRlcm4gdHJlZSBjb21wb25lbnRfcmVmX2ZpZWxkX29mZnNldCAodHJlZSk7CisKKy8qIEdpdmVuIGEgREVDTCBvciBUWVBFLCByZXR1cm4gdGhlIHNjb3BlIGluIHdoaWNoIGl0IHdhcyBkZWNsYXJlZCwgb3IKKyAgIE5VTF9UUkVFIGlmIHRoZXJlIGlzIG5vIGNvbnRhaW5pbmcgc2NvcGUuICAqLworCitleHRlcm4gdHJlZSBnZXRfY29udGFpbmluZ19zY29wZSAoY29uc3RfdHJlZSk7CisKKy8qIFJldHVybiB0aGUgRlVOQ1RJT05fREVDTCB3aGljaCBwcm92aWRlcyB0aGlzIF9ERUNMIHdpdGggaXRzIGNvbnRleHQsCisgICBvciB6ZXJvIGlmIG5vbmUuICAqLworZXh0ZXJuIHRyZWUgZGVjbF9mdW5jdGlvbl9jb250ZXh0IChjb25zdF90cmVlKTsKKworLyogUmV0dXJuIHRoZSBSRUNPUkRfVFlQRSwgVU5JT05fVFlQRSwgb3IgUVVBTF9VTklPTl9UWVBFIHdoaWNoIHByb3ZpZGVzCisgICB0aGlzIF9ERUNMIHdpdGggaXRzIGNvbnRleHQsIG9yIHplcm8gaWYgbm9uZS4gICovCitleHRlcm4gdHJlZSBkZWNsX3R5cGVfY29udGV4dCAoY29uc3RfdHJlZSk7CisKKy8qIFJldHVybiAxIGlmIEVYUFIgaXMgdGhlIHJlYWwgY29uc3RhbnQgemVyby4gICovCitleHRlcm4gaW50IHJlYWxfemVyb3AgKGNvbnN0X3RyZWUpOworDAorLyogRGVjbGFyZSBjb21tb25seSB1c2VkIHZhcmlhYmxlcyBmb3IgdHJlZSBzdHJ1Y3R1cmUuICAqLworCisvKiBOb256ZXJvIG1lYW5zIGx2YWx1ZXMgYXJlIGxpbWl0ZWQgdG8gdGhvc2UgdmFsaWQgaW4gcGVkYW50aWMgQU5TSSBDLgorICAgWmVybyBtZWFucyBhbGxvdyBleHRlbmRlZCBsdmFsdWVzLiAgKi8KKworZXh0ZXJuIGludCBwZWRhbnRpY19sdmFsdWVzOworCisvKiBQb2ludHMgdG8gdGhlIEZVTkNUSU9OX0RFQ0wgb2YgdGhlIGZ1bmN0aW9uIHdob3NlIGJvZHkgd2UgYXJlIHJlYWRpbmcuICAqLworCitleHRlcm4gR1RZKCgpKSB0cmVlIGN1cnJlbnRfZnVuY3Rpb25fZGVjbDsKKworLyogTm9uemVybyBtZWFucyBhIEZVTkNfQkVHSU4gbGFiZWwgd2FzIGVtaXR0ZWQuICAqLworZXh0ZXJuIEdUWSgoKSkgY29uc3QgY2hhciAqIGN1cnJlbnRfZnVuY3Rpb25fZnVuY19iZWdpbl9sYWJlbDsKKwwKKy8qIEl0ZXJhdG9yIGZvciBnb2luZyB0aHJvdWdoIHRoZSBmdW5jdGlvbiBhcmd1bWVudHMuICAqLwordHlwZWRlZiBzdHJ1Y3QgeworICB0cmVlIGZudHlwZTsJCQkvKiBmdW5jdGlvbiB0eXBlIGRlY2xhcmF0aW9uICovCisgIHRyZWUgbmV4dDsJCQkvKiBUUkVFX0xJU1QgcG9pbnRpbmcgdG8gdGhlIG5leHQgYXJndW1lbnQgKi8KK30gZnVuY3Rpb25fYXJnc19pdGVyYXRvcjsKKworLyogSW5pdGlhbGl6ZSB0aGUgaXRlcmF0b3IgSSB3aXRoIGFyZ3VtZW50cyBmcm9tIGZ1bmN0aW9uIEZOREVDTCAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitmdW5jdGlvbl9hcmdzX2l0ZXJfaW5pdCAoZnVuY3Rpb25fYXJnc19pdGVyYXRvciAqaSwgdHJlZSBmbnR5cGUpCit7CisgIGktPmZudHlwZSA9IGZudHlwZTsKKyAgaS0+bmV4dCA9IFRZUEVfQVJHX1RZUEVTIChmbnR5cGUpOworfQorCisvKiBSZXR1cm4gYSBwb2ludGVyIHRoYXQgaG9sZHMgdGhlIG5leHQgYXJndW1lbnQgaWYgdGhlcmUgYXJlIG1vcmUgYXJndW1lbnRzIHRvCisgICBoYW5kbGUsIG90aGVyd2lzZSByZXR1cm4gTlVMTC4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitmdW5jdGlvbl9hcmdzX2l0ZXJfY29uZF9wdHIgKGZ1bmN0aW9uX2FyZ3NfaXRlcmF0b3IgKmkpCit7CisgIHJldHVybiAoaS0+bmV4dCkgPyAmVFJFRV9WQUxVRSAoaS0+bmV4dCkgOiBOVUxMOworfQorCisvKiBSZXR1cm4gdGhlIG5leHQgYXJndW1lbnQgaWYgdGhlcmUgYXJlIG1vcmUgYXJndW1lbnRzIHRvIGhhbmRsZSwgb3RoZXJ3aXNlCisgICByZXR1cm4gTlVMTC4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZnVuY3Rpb25fYXJnc19pdGVyX2NvbmQgKGZ1bmN0aW9uX2FyZ3NfaXRlcmF0b3IgKmkpCit7CisgIHJldHVybiAoaS0+bmV4dCkgPyBUUkVFX1ZBTFVFIChpLT5uZXh0KSA6IE5VTExfVFJFRTsKK30KKworLyogQWR2YW5jZSB0byB0aGUgbmV4dCBhcmd1bWVudC4gICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2Z1bmN0aW9uX2FyZ3NfaXRlcl9uZXh0IChmdW5jdGlvbl9hcmdzX2l0ZXJhdG9yICppKQoreworICBnY2NfYXNzZXJ0IChpLT5uZXh0ICE9IE5VTExfVFJFRSk7CisgIGktPm5leHQgPSBUUkVFX0NIQUlOIChpLT5uZXh0KTsKK30KKworLyogV2Ugc2V0IEJMT0NLX1NPVVJDRV9MT0NBVElPTiBvbmx5IHRvIGlubGluZWQgZnVuY3Rpb24gZW50cnkgcG9pbnRzLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitpbmxpbmVkX2Z1bmN0aW9uX291dGVyX3Njb3BlX3AgKGNvbnN0X3RyZWUgYmxvY2spCit7CisgcmV0dXJuIEJMT0NLX1NPVVJDRV9MT0NBVElPTiAoYmxvY2spICE9IFVOS05PV05fTE9DQVRJT047Cit9CisKKy8qIExvb3Agb3ZlciBhbGwgZnVuY3Rpb24gYXJndW1lbnRzIG9mIEZOVFlQRS4gIEluIGVhY2ggaXRlcmF0aW9uLCBQVFIgaXMgc2V0CisgICB0byBwb2ludCB0byB0aGUgbmV4dCB0cmVlIGVsZW1lbnQuICBJVEVSIGlzIGFuIGluc3RhbmNlIG9mCisgICBmdW5jdGlvbl9hcmdzX2l0ZXJhdG9yIHVzZWQgdG8gaXRlcmF0ZSB0aGUgYXJndW1lbnRzLiAgKi8KKyNkZWZpbmUgRk9SRUFDSF9GVU5DVElPTl9BUkdTX1BUUihGTlRZUEUsIFBUUiwgSVRFUikJCQlcCisgIGZvciAoZnVuY3Rpb25fYXJnc19pdGVyX2luaXQgKCYoSVRFUiksIChGTlRZUEUpKTsJCQlcCisgICAgICAgKFBUUiA9IGZ1bmN0aW9uX2FyZ3NfaXRlcl9jb25kX3B0ciAoJihJVEVSKSkpICE9IE5VTEw7CQlcCisgICAgICAgZnVuY3Rpb25fYXJnc19pdGVyX25leHQgKCYoSVRFUikpKQorCisvKiBMb29wIG92ZXIgYWxsIGZ1bmN0aW9uIGFyZ3VtZW50cyBvZiBGTlRZUEUuICBJbiBlYWNoIGl0ZXJhdGlvbiwgVFJFRSBpcyBzZXQKKyAgIHRvIHRoZSBuZXh0IHRyZWUgZWxlbWVudC4gIElURVIgaXMgYW4gaW5zdGFuY2Ugb2YgZnVuY3Rpb25fYXJnc19pdGVyYXRvcgorICAgdXNlZCB0byBpdGVyYXRlIHRoZSBhcmd1bWVudHMuICAqLworI2RlZmluZSBGT1JFQUNIX0ZVTkNUSU9OX0FSR1MoRk5UWVBFLCBUUkVFLCBJVEVSKQkJCVwKKyAgZm9yIChmdW5jdGlvbl9hcmdzX2l0ZXJfaW5pdCAoJihJVEVSKSwgKEZOVFlQRSkpOwkJCVwKKyAgICAgICAoVFJFRSA9IGZ1bmN0aW9uX2FyZ3NfaXRlcl9jb25kICgmKElURVIpKSkgIT0gTlVMTF9UUkVFOwkJXAorICAgICAgIGZ1bmN0aW9uX2FyZ3NfaXRlcl9uZXh0ICgmKElURVIpKSkKKworCisMCisvKiBJbiB0cmVlLmMgKi8KK2V4dGVybiB1bnNpZ25lZCBjcmMzMl9zdHJpbmcgKHVuc2lnbmVkLCBjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgY2xlYW5fc3ltYm9sX25hbWUgKGNoYXIgKik7CitleHRlcm4gdHJlZSBnZXRfZmlsZV9mdW5jdGlvbl9uYW1lIChjb25zdCBjaGFyICopOworZXh0ZXJuIHRyZWUgZ2V0X2NhbGxlZV9mbmRlY2wgKGNvbnN0X3RyZWUpOworZXh0ZXJuIGludCB0eXBlX251bV9hcmd1bWVudHMgKGNvbnN0X3RyZWUpOworZXh0ZXJuIGJvb2wgYXNzb2NpYXRpdmVfdHJlZV9jb2RlIChlbnVtIHRyZWVfY29kZSk7CitleHRlcm4gYm9vbCBjb21tdXRhdGl2ZV90cmVlX2NvZGUgKGVudW0gdHJlZV9jb2RlKTsKK2V4dGVybiB0cmVlIHVwcGVyX2JvdW5kX2luX3R5cGUgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgbG93ZXJfYm91bmRfaW5fdHlwZSAodHJlZSwgdHJlZSk7CitleHRlcm4gaW50IG9wZXJhbmRfZXF1YWxfZm9yX3BoaV9hcmdfcCAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSBjYWxsX2V4cHJfYXJnICh0cmVlLCBpbnQpOworZXh0ZXJuIHRyZWUgKmNhbGxfZXhwcl9hcmdwICh0cmVlLCBpbnQpOworZXh0ZXJuIHRyZWUgY2FsbF9leHByX2FyZ2xpc3QgKHRyZWUpOworZXh0ZXJuIHRyZWUgY3JlYXRlX2FydGlmaWNpYWxfbGFiZWwgKGxvY2F0aW9uX3QpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdldF9uYW1lICh0cmVlKTsKK2V4dGVybiBib29sIHN0ZGFyZ19wICh0cmVlKTsKK2V4dGVybiBib29sIHByb3RvdHlwZV9wICh0cmVlKTsKK2V4dGVybiBib29sIGF1dG9fdmFyX2luX2ZuX3AgKGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfbG93X2JpdHNfbWFzayAodHJlZSwgdW5zaWduZWQpOworZXh0ZXJuIHRyZWUgdHJlZV9zdHJpcF9ub3BfY29udmVyc2lvbnMgKHRyZWUpOworZXh0ZXJuIHRyZWUgdHJlZV9zdHJpcF9zaWduX25vcF9jb252ZXJzaW9ucyAodHJlZSk7CitleHRlcm4gdHJlZSBsaGRfZ2NjX3BlcnNvbmFsaXR5ICh2b2lkKTsKK2V4dGVybiB2b2lkIGFzc2lnbl9hc3NlbWJsZXJfbmFtZV9pZl9uZWVlZGVkICh0cmVlKTsKKworDAorLyogSW4gY2dyYXBoLmMgKi8KK2V4dGVybiB2b2lkIGNoYW5nZV9kZWNsX2Fzc2VtYmxlcl9uYW1lICh0cmVlLCB0cmVlKTsKKwwKKy8qIEluIGdpbXBsaWZ5LmMgKi8KK2V4dGVybiB0cmVlIHVuc2hhcmVfZXhwciAodHJlZSk7CisMCisvKiBJbiBzdG10LmMgKi8KKworZXh0ZXJuIHZvaWQgZXhwYW5kX2V4cHJfc3RtdCAodHJlZSk7CitleHRlcm4gaW50IHdhcm5faWZfdW51c2VkX3ZhbHVlIChjb25zdF90cmVlLCBsb2NhdGlvbl90KTsKK2V4dGVybiB2b2lkIGV4cGFuZF9sYWJlbCAodHJlZSk7CitleHRlcm4gdm9pZCBleHBhbmRfZ290byAodHJlZSk7CisKK2V4dGVybiBydHggZXhwYW5kX3N0YWNrX3NhdmUgKHZvaWQpOworZXh0ZXJuIHZvaWQgZXhwYW5kX3N0YWNrX3Jlc3RvcmUgKHRyZWUpOworZXh0ZXJuIHZvaWQgZXhwYW5kX3JldHVybiAodHJlZSk7CisKKy8qIEluIHRyZWUtZWguYyAqLworZXh0ZXJuIHZvaWQgdXNpbmdfZWhfZm9yX2NsZWFudXBzICh2b2lkKTsKKworLyogSW4gZm9sZC1jb25zdC5jICovCisKKy8qIE5vbi16ZXJvIGlmIHdlIGFyZSBmb2xkaW5nIGNvbnN0YW50cyBpbnNpZGUgYW4gaW5pdGlhbGl6ZXI7IHplcm8KKyAgIG90aGVyd2lzZS4gICovCitleHRlcm4gaW50IGZvbGRpbmdfaW5pdGlhbGl6ZXI7CisKKy8qIENvbnZlcnQgYmV0d2VlbiB0cmVlcyBhbmQgbmF0aXZlIG1lbW9yeSByZXByZXNlbnRhdGlvbi4gICovCitleHRlcm4gaW50IG5hdGl2ZV9lbmNvZGVfZXhwciAoY29uc3RfdHJlZSwgdW5zaWduZWQgY2hhciAqLCBpbnQpOworZXh0ZXJuIHRyZWUgbmF0aXZlX2ludGVycHJldF9leHByICh0cmVlLCBjb25zdCB1bnNpZ25lZCBjaGFyICosIGludCk7CisKKy8qIEZvbGQgY29uc3RhbnRzIGFzIG11Y2ggYXMgcG9zc2libGUgaW4gYW4gZXhwcmVzc2lvbi4KKyAgIFJldHVybnMgdGhlIHNpbXBsaWZpZWQgZXhwcmVzc2lvbi4KKyAgIEFjdHMgb25seSBvbiB0aGUgdG9wIGxldmVsIG9mIHRoZSBleHByZXNzaW9uOworICAgaWYgdGhlIGFyZ3VtZW50IGl0c2VsZiBjYW5ub3QgYmUgc2ltcGxpZmllZCwgaXRzCisgICBzdWJleHByZXNzaW9ucyBhcmUgbm90IGNoYW5nZWQuICAqLworCitleHRlcm4gdHJlZSBmb2xkICh0cmVlKTsKKyNkZWZpbmUgZm9sZF91bmFyeShDT0RFLFQxLFQyKVwKKyAgIGZvbGRfdW5hcnlfbG9jIChVTktOT1dOX0xPQ0FUSU9OLCBDT0RFLCBUMSwgVDIpCitleHRlcm4gdHJlZSBmb2xkX3VuYXJ5X2xvYyAobG9jYXRpb25fdCwgZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUpOworI2RlZmluZSBmb2xkX3VuYXJ5X2lnbm9yZV9vdmVyZmxvdyhDT0RFLFQxLFQyKVwKKyAgIGZvbGRfdW5hcnlfaWdub3JlX292ZXJmbG93X2xvYyAoVU5LTk9XTl9MT0NBVElPTiwgQ09ERSwgVDEsIFQyKQorZXh0ZXJuIHRyZWUgZm9sZF91bmFyeV9pZ25vcmVfb3ZlcmZsb3dfbG9jIChsb2NhdGlvbl90LCBlbnVtIHRyZWVfY29kZSwgdHJlZSwgdHJlZSk7CisjZGVmaW5lIGZvbGRfYmluYXJ5KENPREUsVDEsVDIsVDMpXAorICAgZm9sZF9iaW5hcnlfbG9jIChVTktOT1dOX0xPQ0FUSU9OLCBDT0RFLCBUMSwgVDIsIFQzKQorZXh0ZXJuIHRyZWUgZm9sZF9iaW5hcnlfbG9jIChsb2NhdGlvbl90LCBlbnVtIHRyZWVfY29kZSwgdHJlZSwgdHJlZSwgdHJlZSk7CisjZGVmaW5lIGZvbGRfdGVybmFyeShDT0RFLFQxLFQyLFQzLFQ0KVwKKyAgIGZvbGRfdGVybmFyeV9sb2MgKFVOS05PV05fTE9DQVRJT04sIENPREUsIFQxLCBUMiwgVDMsIFQ0KQorZXh0ZXJuIHRyZWUgZm9sZF90ZXJuYXJ5X2xvYyAobG9jYXRpb25fdCwgZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUpOworI2RlZmluZSBmb2xkX2J1aWxkMShjLHQxLHQyKVwKKyAgIGZvbGRfYnVpbGQxX3N0YXRfbG9jIChVTktOT1dOX0xPQ0FUSU9OLCBjLCB0MSwgdDIgTUVNX1NUQVRfSU5GTykKKyNkZWZpbmUgZm9sZF9idWlsZDFfbG9jKGwsYyx0MSx0MilcCisgICBmb2xkX2J1aWxkMV9zdGF0X2xvYyAobCwgYywgdDEsIHQyIE1FTV9TVEFUX0lORk8pCitleHRlcm4gdHJlZSBmb2xkX2J1aWxkMV9zdGF0X2xvYyAobG9jYXRpb25fdCwgZW51bSB0cmVlX2NvZGUsIHRyZWUsCisJCQkJICB0cmVlIE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBmb2xkX2J1aWxkMihjLHQxLHQyLHQzKVwKKyAgIGZvbGRfYnVpbGQyX3N0YXRfbG9jIChVTktOT1dOX0xPQ0FUSU9OLCBjLCB0MSwgdDIsIHQzIE1FTV9TVEFUX0lORk8pCisjZGVmaW5lIGZvbGRfYnVpbGQyX2xvYyhsLGMsdDEsdDIsdDMpXAorICAgZm9sZF9idWlsZDJfc3RhdF9sb2MgKGwsIGMsIHQxLCB0MiwgdDMgTUVNX1NUQVRfSU5GTykKK2V4dGVybiB0cmVlIGZvbGRfYnVpbGQyX3N0YXRfbG9jIChsb2NhdGlvbl90LCBlbnVtIHRyZWVfY29kZSwgdHJlZSwgdHJlZSwKKwkJCQkgIHRyZWUgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGZvbGRfYnVpbGQzKGMsdDEsdDIsdDMsdDQpXAorICAgZm9sZF9idWlsZDNfc3RhdF9sb2MgKFVOS05PV05fTE9DQVRJT04sIGMsIHQxLCB0MiwgdDMsIHQ0IE1FTV9TVEFUX0lORk8pCisjZGVmaW5lIGZvbGRfYnVpbGQzX2xvYyhsLGMsdDEsdDIsdDMsdDQpXAorICAgZm9sZF9idWlsZDNfc3RhdF9sb2MgKGwsIGMsIHQxLCB0MiwgdDMsIHQ0IE1FTV9TVEFUX0lORk8pCitleHRlcm4gdHJlZSBmb2xkX2J1aWxkM19zdGF0X2xvYyAobG9jYXRpb25fdCwgZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUsIHRyZWUsCisJCQkJICB0cmVlIE1FTV9TVEFUX0RFQ0wpOworZXh0ZXJuIHRyZWUgZm9sZF9idWlsZDFfaW5pdGlhbGl6ZXJfbG9jIChsb2NhdGlvbl90LCBlbnVtIHRyZWVfY29kZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBmb2xkX2J1aWxkMl9pbml0aWFsaXplcl9sb2MgKGxvY2F0aW9uX3QsIGVudW0gdHJlZV9jb2RlLCB0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGZvbGRfYnVpbGQzX2luaXRpYWxpemVyX2xvYyAobG9jYXRpb25fdCwgZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUpOworI2RlZmluZSBmb2xkX2J1aWxkX2NhbGxfYXJyYXkoVDEsVDIsTixUNClcCisgICBmb2xkX2J1aWxkX2NhbGxfYXJyYXlfbG9jIChVTktOT1dOX0xPQ0FUSU9OLCBUMSwgVDIsIE4sIFQ0KQorZXh0ZXJuIHRyZWUgZm9sZF9idWlsZF9jYWxsX2FycmF5X2xvYyAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSwgaW50LCB0cmVlICopOworI2RlZmluZSBmb2xkX2J1aWxkX2NhbGxfYXJyYXlfaW5pdGlhbGl6ZXIoVDEsVDIsTixUNClcCisgICBmb2xkX2J1aWxkX2NhbGxfYXJyYXlfaW5pdGlhbGl6ZXJfbG9jIChVTktOT1dOX0xPQ0FUSU9OLCBUMSwgVDIsIE4sIFQ0KQorZXh0ZXJuIHRyZWUgZm9sZF9idWlsZF9jYWxsX2FycmF5X2luaXRpYWxpemVyX2xvYyAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSwgaW50LCB0cmVlICopOworZXh0ZXJuIGJvb2wgZm9sZF9jb252ZXJ0aWJsZV9wIChjb25zdF90cmVlLCBjb25zdF90cmVlKTsKKyNkZWZpbmUgZm9sZF9jb252ZXJ0KFQxLFQyKVwKKyAgIGZvbGRfY29udmVydF9sb2MoVU5LTk9XTl9MT0NBVElPTiwgVDEsIFQyKQorZXh0ZXJuIHRyZWUgZm9sZF9jb252ZXJ0X2xvYyAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBmb2xkX3NpbmdsZV9iaXRfdGVzdCAobG9jYXRpb25fdCwgZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgZm9sZF9pZ25vcmVkX3Jlc3VsdCAodHJlZSk7CitleHRlcm4gdHJlZSBmb2xkX2Fic19jb25zdCAodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBmb2xkX2luZGlyZWN0X3JlZl8xIChsb2NhdGlvbl90LCB0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGZvbGRfZGVmZXJfb3ZlcmZsb3dfd2FybmluZ3MgKHZvaWQpOworZXh0ZXJuIHZvaWQgZm9sZF91bmRlZmVyX292ZXJmbG93X3dhcm5pbmdzIChib29sLCBjb25zdF9naW1wbGUsIGludCk7CitleHRlcm4gdm9pZCBmb2xkX3VuZGVmZXJfYW5kX2lnbm9yZV9vdmVyZmxvd193YXJuaW5ncyAodm9pZCk7CitleHRlcm4gYm9vbCBmb2xkX2RlZmVycmluZ19vdmVyZmxvd193YXJuaW5nc19wICh2b2lkKTsKKworZXh0ZXJuIHRyZWUgZm9yY2VfZml0X3R5cGVfZG91YmxlICh0cmVlLCB1bnNpZ25lZCBIT1NUX1dJREVfSU5ULCBIT1NUX1dJREVfSU5ULAorCQkJCSAgIGludCwgYm9vbCk7CisKK2V4dGVybiBpbnQgZml0X2RvdWJsZV90eXBlICh1bnNpZ25lZCBIT1NUX1dJREVfSU5ULCBIT1NUX1dJREVfSU5ULAorCQkJICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgKiwgSE9TVF9XSURFX0lOVCAqLCBjb25zdF90cmVlKTsKK2V4dGVybiBpbnQgYWRkX2RvdWJsZV93aXRoX3NpZ24gKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQsIEhPU1RfV0lERV9JTlQsCisJCQkJIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQsIEhPU1RfV0lERV9JTlQsCisJCQkJIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgKiwgSE9TVF9XSURFX0lOVCAqLAorCQkJCSBib29sKTsKKyNkZWZpbmUgYWRkX2RvdWJsZShsMSxoMSxsMixoMixsdixodikgXAorICBhZGRfZG91YmxlX3dpdGhfc2lnbiAobDEsIGgxLCBsMiwgaDIsIGx2LCBodiwgZmFsc2UpCitleHRlcm4gaW50IG5lZ19kb3VibGUgKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQsIEhPU1RfV0lERV9JTlQsCisJCSAgICAgICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UICosIEhPU1RfV0lERV9JTlQgKik7CitleHRlcm4gaW50IG11bF9kb3VibGVfd2l0aF9zaWduICh1bnNpZ25lZCBIT1NUX1dJREVfSU5ULCBIT1NUX1dJREVfSU5ULAorCQkJCSB1bnNpZ25lZCBIT1NUX1dJREVfSU5ULCBIT1NUX1dJREVfSU5ULAorCQkJCSB1bnNpZ25lZCBIT1NUX1dJREVfSU5UICosIEhPU1RfV0lERV9JTlQgKiwKKwkJCQkgYm9vbCk7CisjZGVmaW5lIG11bF9kb3VibGUobDEsaDEsbDIsaDIsbHYsaHYpIFwKKyAgbXVsX2RvdWJsZV93aXRoX3NpZ24gKGwxLCBoMSwgbDIsIGgyLCBsdiwgaHYsIGZhbHNlKQorZXh0ZXJuIHZvaWQgbHNoaWZ0X2RvdWJsZSAodW5zaWduZWQgSE9TVF9XSURFX0lOVCwgSE9TVF9XSURFX0lOVCwKKwkJCSAgIEhPU1RfV0lERV9JTlQsIHVuc2lnbmVkIGludCwKKwkJCSAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgKiwgSE9TVF9XSURFX0lOVCAqLCBpbnQpOworZXh0ZXJuIHZvaWQgcnNoaWZ0X2RvdWJsZSAodW5zaWduZWQgSE9TVF9XSURFX0lOVCwgSE9TVF9XSURFX0lOVCwKKwkJCSAgIEhPU1RfV0lERV9JTlQsIHVuc2lnbmVkIGludCwKKwkJCSAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgKiwgSE9TVF9XSURFX0lOVCAqLCBpbnQpOworZXh0ZXJuIHZvaWQgbHJvdGF0ZV9kb3VibGUgKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQsIEhPU1RfV0lERV9JTlQsCisJCQkgICAgSE9TVF9XSURFX0lOVCwgdW5zaWduZWQgaW50LAorCQkJICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgKiwgSE9TVF9XSURFX0lOVCAqKTsKK2V4dGVybiB2b2lkIHJyb3RhdGVfZG91YmxlICh1bnNpZ25lZCBIT1NUX1dJREVfSU5ULCBIT1NUX1dJREVfSU5ULAorCQkJICAgIEhPU1RfV0lERV9JTlQsIHVuc2lnbmVkIGludCwKKwkJCSAgICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UICosIEhPU1RfV0lERV9JTlQgKik7CisKK2V4dGVybiBpbnQgZGl2X2FuZF9yb3VuZF9kb3VibGUgKGVudW0gdHJlZV9jb2RlLCBpbnQsIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQsCisJCQkJIEhPU1RfV0lERV9JTlQsIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQsCisJCQkJIEhPU1RfV0lERV9JTlQsIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgKiwKKwkJCQkgSE9TVF9XSURFX0lOVCAqLCB1bnNpZ25lZCBIT1NUX1dJREVfSU5UICosCisJCQkJIEhPU1RfV0lERV9JTlQgKik7CisKK2VudW0gb3BlcmFuZF9lcXVhbF9mbGFnCit7CisgIE9FUF9PTkxZX0NPTlNUID0gMSwKKyAgT0VQX1BVUkVfU0FNRSA9IDIKK307CisKK2V4dGVybiBpbnQgb3BlcmFuZF9lcXVhbF9wIChjb25zdF90cmVlLCBjb25zdF90cmVlLCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIGludCBtdWx0aXBsZV9vZl9wICh0cmVlLCBjb25zdF90cmVlLCBjb25zdF90cmVlKTsKKyNkZWZpbmUgb21pdF9vbmVfb3BlcmFuZChUMSxUMixUMylcCisgICBvbWl0X29uZV9vcGVyYW5kX2xvYyAoVU5LTk9XTl9MT0NBVElPTiwgVDEsIFQyLCBUMykKK2V4dGVybiB0cmVlIG9taXRfb25lX29wZXJhbmRfbG9jIChsb2NhdGlvbl90LCB0cmVlLCB0cmVlLCB0cmVlKTsKKyNkZWZpbmUgb21pdF90d29fb3BlcmFuZHMoVDEsVDIsVDMsVDQpXAorICAgb21pdF90d29fb3BlcmFuZHNfbG9jIChVTktOT1dOX0xPQ0FUSU9OLCBUMSwgVDIsIFQzLCBUNCkKK2V4dGVybiB0cmVlIG9taXRfdHdvX29wZXJhbmRzX2xvYyAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSk7CisjZGVmaW5lIGludmVydF90cnV0aHZhbHVlKFQpXAorICAgaW52ZXJ0X3RydXRodmFsdWVfbG9jKFVOS05PV05fTE9DQVRJT04sIFQpCitleHRlcm4gdHJlZSBpbnZlcnRfdHJ1dGh2YWx1ZV9sb2MgKGxvY2F0aW9uX3QsIHRyZWUpOworZXh0ZXJuIHRyZWUgZm9sZF90cnV0aF9ub3RfZXhwciAobG9jYXRpb25fdCwgdHJlZSk7CitleHRlcm4gdHJlZSBmb2xkX3VuYXJ5X3RvX2NvbnN0YW50IChlbnVtIHRyZWVfY29kZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBmb2xkX2JpbmFyeV90b19jb25zdGFudCAoZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgZm9sZF9yZWFkX2Zyb21fY29uc3RhbnRfc3RyaW5nICh0cmVlKTsKK2V4dGVybiB0cmVlIGludF9jb25zdF9iaW5vcCAoZW51bSB0cmVlX2NvZGUsIGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUsIGludCk7CisjZGVmaW5lIGJ1aWxkX2ZvbGRfYWRkcl9leHByKFQpXAorICAgICAgICBidWlsZF9mb2xkX2FkZHJfZXhwcl9sb2MgKFVOS05PV05fTE9DQVRJT04sIChUKSkKK2V4dGVybiB0cmVlIGJ1aWxkX2ZvbGRfYWRkcl9leHByX2xvYyAobG9jYXRpb25fdCwgdHJlZSk7CisjZGVmaW5lIGJ1aWxkX2ZvbGRfYWRkcl9leHByX3dpdGhfdHlwZShULFRZUEUpXAorICAgICAgICBidWlsZF9mb2xkX2FkZHJfZXhwcl93aXRoX3R5cGVfbG9jIChVTktOT1dOX0xPQ0FUSU9OLCAoVCksIFRZUEUpCitleHRlcm4gdHJlZSBidWlsZF9mb2xkX2FkZHJfZXhwcl93aXRoX3R5cGVfbG9jIChsb2NhdGlvbl90LCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGZvbGRfYnVpbGRfY2xlYW51cF9wb2ludF9leHByICh0cmVlIHR5cGUsIHRyZWUgZXhwcik7CitleHRlcm4gdHJlZSBmb2xkX3N0cmlwX3NpZ25fb3BzICh0cmVlKTsKKyNkZWZpbmUgYnVpbGRfZm9sZF9pbmRpcmVjdF9yZWYoVClcCisgICAgICAgIGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmX2xvYyAoVU5LTk9XTl9MT0NBVElPTiwgVCkKK2V4dGVybiB0cmVlIGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmX2xvYyAobG9jYXRpb25fdCwgdHJlZSk7CisjZGVmaW5lIGZvbGRfaW5kaXJlY3RfcmVmKFQpXAorICAgICAgICBmb2xkX2luZGlyZWN0X3JlZl9sb2MgKFVOS05PV05fTE9DQVRJT04sIFQpCitleHRlcm4gdHJlZSBmb2xkX2luZGlyZWN0X3JlZl9sb2MgKGxvY2F0aW9uX3QsIHRyZWUpOworZXh0ZXJuIHRyZWUgY29uc3RhbnRfYm9vbGVhbl9ub2RlIChpbnQsIHRyZWUpOworZXh0ZXJuIHRyZWUgZGl2X2lmX3plcm9fcmVtYWluZGVyIChlbnVtIHRyZWVfY29kZSwgY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CisKK2V4dGVybiBib29sIHRyZWVfc3dhcF9vcGVyYW5kc19wIChjb25zdF90cmVlLCBjb25zdF90cmVlLCBib29sKTsKK2V4dGVybiBlbnVtIHRyZWVfY29kZSBzd2FwX3RyZWVfY29tcGFyaXNvbiAoZW51bSB0cmVlX2NvZGUpOworCitleHRlcm4gYm9vbCBwdHJfZGlmZmVyZW5jZV9jb25zdCAodHJlZSwgdHJlZSwgSE9TVF9XSURFX0lOVCAqKTsKK2V4dGVybiBlbnVtIHRyZWVfY29kZSBpbnZlcnRfdHJlZV9jb21wYXJpc29uIChlbnVtIHRyZWVfY29kZSwgYm9vbCk7CisKK2V4dGVybiBib29sIHRyZWVfZXhwcl9ub256ZXJvX3AgKHRyZWUpOworZXh0ZXJuIGJvb2wgdHJlZV91bmFyeV9ub256ZXJvX3dhcm52X3AgKGVudW0gdHJlZV9jb2RlLCB0cmVlLCB0cmVlLCBib29sICopOworZXh0ZXJuIGJvb2wgdHJlZV9iaW5hcnlfbm9uemVyb193YXJudl9wIChlbnVtIHRyZWVfY29kZSwgdHJlZSwgdHJlZSwgdHJlZSBvcDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKik7CitleHRlcm4gYm9vbCB0cmVlX3NpbmdsZV9ub256ZXJvX3dhcm52X3AgKHRyZWUsIGJvb2wgKik7CitleHRlcm4gYm9vbCB0cmVlX3VuYXJ5X25vbm5lZ2F0aXZlX3dhcm52X3AgKGVudW0gdHJlZV9jb2RlLCB0cmVlLCB0cmVlLCBib29sICopOworZXh0ZXJuIGJvb2wgdHJlZV9iaW5hcnlfbm9ubmVnYXRpdmVfd2FybnZfcCAoZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUsIHRyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICopOworZXh0ZXJuIGJvb2wgdHJlZV9zaW5nbGVfbm9ubmVnYXRpdmVfd2FybnZfcCAodHJlZSB0LCBib29sICpzdHJpY3Rfb3ZlcmZsb3dfcCk7CitleHRlcm4gYm9vbCB0cmVlX2ludmFsaWRfbm9ubmVnYXRpdmVfd2FybnZfcCAodHJlZSB0LCBib29sICpzdHJpY3Rfb3ZlcmZsb3dfcCk7CitleHRlcm4gYm9vbCB0cmVlX2NhbGxfbm9ubmVnYXRpdmVfd2FybnZfcCAodHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwgYm9vbCAqKTsKKworZXh0ZXJuIGJvb2wgdHJlZV9leHByX25vbnplcm9fd2FybnZfcCAodHJlZSwgYm9vbCAqKTsKKworZXh0ZXJuIGJvb2wgZm9sZF9yZWFsX3plcm9fYWRkaXRpb25fcCAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSwgaW50KTsKK2V4dGVybiB0cmVlIGNvbWJpbmVfY29tcGFyaXNvbnMgKGxvY2F0aW9uX3QsIGVudW0gdHJlZV9jb2RlLCBlbnVtIHRyZWVfY29kZSwKKwkJCQkgZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgZGVidWdfZm9sZF9jaGVja3N1bSAoY29uc3RfdHJlZSk7CisKKy8qIFJldHVybiBub256ZXJvIGlmIENPREUgaXMgYSB0cmVlIGNvZGUgdGhhdCByZXByZXNlbnRzIGEgdHJ1dGggdmFsdWUuICAqLworc3RhdGljIGlubGluZSBib29sCit0cnV0aF92YWx1ZV9wIChlbnVtIHRyZWVfY29kZSBjb2RlKQoreworICByZXR1cm4gKFRSRUVfQ09ERV9DTEFTUyAoY29kZSkgPT0gdGNjX2NvbXBhcmlzb24KKwkgIHx8IGNvZGUgPT0gVFJVVEhfQU5EX0VYUFIgfHwgY29kZSA9PSBUUlVUSF9BTkRJRl9FWFBSCisJICB8fCBjb2RlID09IFRSVVRIX09SX0VYUFIgfHwgY29kZSA9PSBUUlVUSF9PUklGX0VYUFIKKwkgIHx8IGNvZGUgPT0gVFJVVEhfWE9SX0VYUFIgfHwgY29kZSA9PSBUUlVUSF9OT1RfRVhQUik7Cit9CisKKworLyogSW4gYnVpbHRpbnMuYyAqLworZXh0ZXJuIHRyZWUgZm9sZF9jYWxsX2V4cHIgKGxvY2F0aW9uX3QsIHRyZWUsIGJvb2wpOworZXh0ZXJuIHRyZWUgZm9sZF9idWlsdGluX2ZwdXRzIChsb2NhdGlvbl90LCB0cmVlLCB0cmVlLCBib29sLCBib29sLCB0cmVlKTsKK2V4dGVybiB0cmVlIGZvbGRfYnVpbHRpbl9zdHJjcHkgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgZm9sZF9idWlsdGluX3N0cm5jcHkgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgZm9sZF9idWlsdGluX21lbW9yeV9jaGsgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUsIGJvb2wsCisJCQkJICAgICBlbnVtIGJ1aWx0X2luX2Z1bmN0aW9uKTsKK2V4dGVybiB0cmVlIGZvbGRfYnVpbHRpbl9zdHhjcHlfY2hrIChsb2NhdGlvbl90LCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLCBib29sLAorCQkJCSAgICAgZW51bSBidWlsdF9pbl9mdW5jdGlvbik7CitleHRlcm4gdHJlZSBmb2xkX2J1aWx0aW5fc3RybmNweV9jaGsgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgZm9sZF9idWlsdGluX3NucHJpbnRmX2NoayAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSwgZW51bSBidWlsdF9pbl9mdW5jdGlvbik7CitleHRlcm4gYm9vbCBmb2xkX2J1aWx0aW5fbmV4dF9hcmcgKHRyZWUsIGJvb2wpOworZXh0ZXJuIGVudW0gYnVpbHRfaW5fZnVuY3Rpb24gYnVpbHRpbl9tYXRoZm5fY29kZSAoY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9mdW5jdGlvbl9jYWxsX2V4cHIgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgZm9sZF9idWlsdGluX2NhbGxfYXJyYXkgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUsIGludCwgdHJlZSAqKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2NhbGxfZXhwcl9sb2MgKGxvY2F0aW9uX3QsIHRyZWUsIGludCwgLi4uKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2NhbGxfZXhwciAodHJlZSwgaW50LCAuLi4pOworZXh0ZXJuIHRyZWUgbWF0aGZuX2J1aWx0X2luICh0cmVlLCBlbnVtIGJ1aWx0X2luX2Z1bmN0aW9uIGZuKTsKK2V4dGVybiB0cmVlIGNfc3RybGVuICh0cmVlLCBpbnQpOworZXh0ZXJuIHRyZWUgc3RkX2dpbXBsaWZ5X3ZhX2FyZ19leHByICh0cmVlLCB0cmVlLCBnaW1wbGVfc2VxICosIGdpbXBsZV9zZXEgKik7CitleHRlcm4gdHJlZSBidWlsZF92YV9hcmdfaW5kaXJlY3RfcmVmICh0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX3N0cmluZ19saXRlcmFsIChpbnQsIGNvbnN0IGNoYXIgKik7CitleHRlcm4gYm9vbCB2YWxpZGF0ZV9hcmdsaXN0IChjb25zdF90cmVlLCAuLi4pOworZXh0ZXJuIHJ0eCBidWlsdGluX21lbXNldF9yZWFkX3N0ciAodm9pZCAqLCBIT1NUX1dJREVfSU5ULCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gYm9vbCBjYW5fdHJ1c3RfcG9pbnRlcl9hbGlnbm1lbnQgKHZvaWQpOworZXh0ZXJuIGludCBnZXRfcG9pbnRlcl9hbGlnbm1lbnQgKHRyZWUsIHVuc2lnbmVkIGludCk7CitleHRlcm4gYm9vbCBpc19idWlsdGluX25hbWUgKGNvbnN0IGNoYXIgKik7CitleHRlcm4gYm9vbCBpc19idWlsdGluX2ZuICh0cmVlKTsKK2V4dGVybiBpbnQgZ2V0X29iamVjdF9hbGlnbm1lbnQgKHRyZWUsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKK2V4dGVybiB0cmVlIGZvbGRfY2FsbF9zdG10IChnaW1wbGUsIGJvb2wpOworZXh0ZXJuIHRyZWUgZ2ltcGxlX2ZvbGRfYnVpbHRpbl9zbnByaW50Zl9jaGsgKGdpbXBsZSwgdHJlZSwgZW51bSBidWlsdF9pbl9mdW5jdGlvbik7CitleHRlcm4gdHJlZSBtYWtlX3JhbmdlICh0cmVlLCBpbnQgKiwgdHJlZSAqLCB0cmVlICosIGJvb2wgKik7CitleHRlcm4gdHJlZSBidWlsZF9yYW5nZV9jaGVjayAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSwgaW50LCB0cmVlLCB0cmVlKTsKK2V4dGVybiBib29sIG1lcmdlX3JhbmdlcyAoaW50ICosIHRyZWUgKiwgdHJlZSAqLCBpbnQsIHRyZWUsIHRyZWUsIGludCwKKwkJCSAgdHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBzZXRfYnVpbHRpbl91c2VyX2Fzc2VtYmxlcl9uYW1lICh0cmVlIGRlY2wsIGNvbnN0IGNoYXIgKmFzbXNwZWMpOworCisvKiBJbiBjb252ZXJ0LmMgKi8KK2V4dGVybiB0cmVlIHN0cmlwX2Zsb2F0X2V4dGVuc2lvbnMgKHRyZWUpOworCisvKiBJbiB0cmVlLmMgKi8KK2V4dGVybiBpbnQgcmVhbGx5X2NvbnN0YW50X3AgKGNvbnN0X3RyZWUpOworZXh0ZXJuIGJvb2wgZGVjbF9hZGRyZXNzX2ludmFyaWFudF9wIChjb25zdF90cmVlKTsKK2V4dGVybiBib29sIGRlY2xfYWRkcmVzc19pcF9pbnZhcmlhbnRfcCAoY29uc3RfdHJlZSk7CitleHRlcm4gaW50IGludF9maXRzX3R5cGVfcCAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CisjaWZuZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gdm9pZCBnZXRfdHlwZV9zdGF0aWNfYm91bmRzIChjb25zdF90cmVlLCBtcHpfdCwgbXB6X3QpOworI2VuZGlmCitleHRlcm4gYm9vbCB2YXJpYWJseV9tb2RpZmllZF90eXBlX3AgKHRyZWUsIHRyZWUpOworZXh0ZXJuIGludCB0cmVlX2xvZzIgKGNvbnN0X3RyZWUpOworZXh0ZXJuIGludCB0cmVlX2Zsb29yX2xvZzIgKGNvbnN0X3RyZWUpOworZXh0ZXJuIGludCBzaW1wbGVfY3N0X2VxdWFsIChjb25zdF90cmVlLCBjb25zdF90cmVlKTsKK2V4dGVybiBoYXNodmFsX3QgaXRlcmF0aXZlX2hhc2hfZXhwciAoY29uc3RfdHJlZSwgaGFzaHZhbF90KTsKK2V4dGVybiBoYXNodmFsX3QgaXRlcmF0aXZlX2hhc2hfZXhwcnNfY29tbXV0YXRpdmUgKGNvbnN0X3RyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF90cmVlLCBoYXNodmFsX3QpOworZXh0ZXJuIGhhc2h2YWxfdCBpdGVyYXRpdmVfaGFzaF9ob3N0X3dpZGVfaW50IChIT1NUX1dJREVfSU5ULCBoYXNodmFsX3QpOworZXh0ZXJuIGhhc2h2YWxfdCBpdGVyYXRpdmVfaGFzaF9oYXNodmFsX3QgKGhhc2h2YWxfdCwgaGFzaHZhbF90KTsKK2V4dGVybiBoYXNodmFsX3QgaXRlcmF0aXZlX2hhc2hfaG9zdF93aWRlX2ludCAoSE9TVF9XSURFX0lOVCwgaGFzaHZhbF90KTsKK2V4dGVybiBpbnQgY29tcGFyZV90cmVlX2ludCAoY29uc3RfdHJlZSwgdW5zaWduZWQgSE9TVF9XSURFX0lOVCk7CitleHRlcm4gaW50IHR5cGVfbGlzdF9lcXVhbCAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CitleHRlcm4gaW50IGNoYWluX21lbWJlciAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSB0eXBlX2hhc2hfbG9va3VwICh1bnNpZ25lZCBpbnQsIHRyZWUpOworZXh0ZXJuIHZvaWQgdHlwZV9oYXNoX2FkZCAodW5zaWduZWQgaW50LCB0cmVlKTsKK2V4dGVybiBpbnQgc2ltcGxlX2NzdF9saXN0X2VxdWFsIChjb25zdF90cmVlLCBjb25zdF90cmVlKTsKK2V4dGVybiB2b2lkIGR1bXBfdHJlZV9zdGF0aXN0aWNzICh2b2lkKTsKK2V4dGVybiB2b2lkIHJlY29tcHV0ZV90cmVlX2ludmFyaWFudF9mb3JfYWRkcl9leHByICh0cmVlKTsKK2V4dGVybiBib29sIG5lZWRzX3RvX2xpdmVfaW5fbWVtb3J5IChjb25zdF90cmVlKTsKK2V4dGVybiB0cmVlIHJlY29uc3RydWN0X2NvbXBsZXhfdHlwZSAodHJlZSwgdHJlZSk7CisKK2V4dGVybiBpbnQgcmVhbF9vbmVwIChjb25zdF90cmVlKTsKK2V4dGVybiBpbnQgcmVhbF90d29wIChjb25zdF90cmVlKTsKK2V4dGVybiBpbnQgcmVhbF9taW51c19vbmVwIChjb25zdF90cmVlKTsKK2V4dGVybiB2b2lkIGluaXRfdHRyZWUgKHZvaWQpOworZXh0ZXJuIHZvaWQgYnVpbGRfY29tbW9uX3RyZWVfbm9kZXMgKGJvb2wsIGJvb2wpOworZXh0ZXJuIHZvaWQgYnVpbGRfY29tbW9uX3RyZWVfbm9kZXNfMiAoaW50KTsKK2V4dGVybiB2b2lkIGJ1aWxkX2NvbW1vbl9idWlsdGluX25vZGVzICh2b2lkKTsKK2V4dGVybiB0cmVlIGJ1aWxkX25vbnN0YW5kYXJkX2ludGVnZXJfdHlwZSAodW5zaWduZWQgSE9TVF9XSURFX0lOVCwgaW50KTsKK2V4dGVybiB0cmVlIGJ1aWxkX3JhbmdlX3R5cGUgKHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIGJvb2wgc3VicmFuZ2VfdHlwZV9mb3JfZGVidWdfcCAoY29uc3RfdHJlZSwgdHJlZSAqLCB0cmVlICopOworZXh0ZXJuIEhPU1RfV0lERV9JTlQgaW50X2NzdF92YWx1ZSAoY29uc3RfdHJlZSk7CitleHRlcm4gSE9TVF9XSURFU1RfSU5UIHdpZGVzdF9pbnRfY3N0X3ZhbHVlIChjb25zdF90cmVlKTsKKworZXh0ZXJuIGJvb2wgZmllbGRzX2NvbXBhdGlibGVfcCAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSBmaW5kX2NvbXBhdGlibGVfZmllbGQgKHRyZWUsIHRyZWUpOworCitleHRlcm4gdHJlZSAqdHJlZV9ibG9jayAodHJlZSk7CitleHRlcm4gbG9jYXRpb25fdCAqYmxvY2tfbm9uYXJ0aWZpY2lhbF9sb2NhdGlvbiAodHJlZSk7CitleHRlcm4gbG9jYXRpb25fdCB0cmVlX25vbmFydGlmaWNpYWxfbG9jYXRpb24gKHRyZWUpOworCitleHRlcm4gdHJlZSBibG9ja191bHRpbWF0ZV9vcmlnaW4gKGNvbnN0X3RyZWUpOworCisvKiBJbiB0cmVlLW5lc3RlZC5jICovCitleHRlcm4gdHJlZSBidWlsZF9hZGRyICh0cmVlLCB0cmVlKTsKKworLyogSW4gZnVuY3Rpb24uYyAqLworZXh0ZXJuIHZvaWQgZXhwYW5kX21haW5fZnVuY3Rpb24gKHZvaWQpOworZXh0ZXJuIHZvaWQgZXhwYW5kX2Z1bmN0aW9uX2VuZCAodm9pZCk7CitleHRlcm4gdm9pZCBleHBhbmRfZnVuY3Rpb25fc3RhcnQgKHRyZWUpOworZXh0ZXJuIHZvaWQgc3RhY2tfcHJvdGVjdF9wcm9sb2d1ZSAodm9pZCk7CitleHRlcm4gdm9pZCBzdGFja19wcm90ZWN0X2VwaWxvZ3VlICh2b2lkKTsKK2V4dGVybiB2b2lkIGluaXRfZHVtbXlfZnVuY3Rpb25fc3RhcnQgKHZvaWQpOworZXh0ZXJuIHZvaWQgZXhwYW5kX2R1bW15X2Z1bmN0aW9uX2VuZCAodm9pZCk7CitleHRlcm4gdW5zaWduZWQgaW50IGluaXRfZnVuY3Rpb25fZm9yX2NvbXBpbGF0aW9uICh2b2lkKTsKK2V4dGVybiB2b2lkIGFsbG9jYXRlX3N0cnVjdF9mdW5jdGlvbiAodHJlZSwgYm9vbCk7CitleHRlcm4gdm9pZCBwdXNoX3N0cnVjdF9mdW5jdGlvbiAodHJlZSBmbmRlY2wpOworZXh0ZXJuIHZvaWQgaW5pdF9mdW5jdGlvbl9zdGFydCAodHJlZSk7CitleHRlcm4gYm9vbCB1c2VfcmVnaXN0ZXJfZm9yX2RlY2wgKGNvbnN0X3RyZWUpOworZXh0ZXJuIHZvaWQgZ2VuZXJhdGVfc2V0am1wX3dhcm5pbmdzICh2b2lkKTsKK2V4dGVybiB2b2lkIGluaXRfdGVtcF9zbG90cyAodm9pZCk7CitleHRlcm4gdm9pZCBmcmVlX3RlbXBfc2xvdHMgKHZvaWQpOworZXh0ZXJuIHZvaWQgcG9wX3RlbXBfc2xvdHMgKHZvaWQpOworZXh0ZXJuIHZvaWQgcHVzaF90ZW1wX3Nsb3RzICh2b2lkKTsKK2V4dGVybiB2b2lkIHByZXNlcnZlX3RlbXBfc2xvdHMgKHJ0eCk7CitleHRlcm4gaW50IGFnZ3JlZ2F0ZV92YWx1ZV9wIChjb25zdF90cmVlLCBjb25zdF90cmVlKTsKK2V4dGVybiB2b2lkIHB1c2hfZnVuY3Rpb25fY29udGV4dCAodm9pZCk7CitleHRlcm4gdm9pZCBwb3BfZnVuY3Rpb25fY29udGV4dCAodm9pZCk7CitleHRlcm4gZ2ltcGxlX3NlcSBnaW1wbGlmeV9wYXJhbWV0ZXJzICh2b2lkKTsKKworLyogSW4gcHJpbnQtcnRsLmMgKi8KKyNpZmRlZiBCVUZTSVoKK2V4dGVybiB2b2lkIHByaW50X3J0bCAoRklMRSAqLCBjb25zdF9ydHgpOworI2VuZGlmCisKKy8qIEluIHByaW50LXRyZWUuYyAqLworZXh0ZXJuIHZvaWQgZGVidWdfdHJlZSAodHJlZSk7CisjaWZkZWYgQlVGU0laCitleHRlcm4gdm9pZCBkdW1wX2FkZHIgKEZJTEUqLCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKik7CitleHRlcm4gdm9pZCBwcmludF9ub2RlIChGSUxFICosIGNvbnN0IGNoYXIgKiwgdHJlZSwgaW50KTsKK2V4dGVybiB2b2lkIHByaW50X25vZGVfYnJpZWYgKEZJTEUgKiwgY29uc3QgY2hhciAqLCBjb25zdF90cmVlLCBpbnQpOworZXh0ZXJuIHZvaWQgaW5kZW50X3RvIChGSUxFICosIGludCk7CisjZW5kaWYKKworLyogSW4gdHJlZS1pbmxpbmUuYzogICovCitleHRlcm4gYm9vbCBkZWJ1Z19maW5kX3RyZWUgKHRyZWUsIHRyZWUpOworLyogVGhpcyBpcyBpbiB0cmVlLWlubGluZS5jIHNpbmNlIHRoZSByb3V0aW5lIHVzZXMKKyAgIGRhdGEgc3RydWN0dXJlcyBmcm9tIHRoZSBpbmxpbmVyLiAgKi8KK2V4dGVybiB0cmVlIHVuc2F2ZV9leHByX25vdyAodHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9kdXBsaWNhdGVfdHlwZSAodHJlZSk7CisKKy8qIEluIGNhbGxzLmMgKi8KKworLyogTm9uemVybyBpZiB0aGlzIGlzIGEgY2FsbCB0byBhIGZ1bmN0aW9uIHdob3NlIHJldHVybiB2YWx1ZSBkZXBlbmRzCisgICBzb2xlbHkgb24gaXRzIGFyZ3VtZW50cywgaGFzIG5vIHNpZGUgZWZmZWN0cywgYW5kIGRvZXMgbm90IHJlYWQKKyAgIGdsb2JhbCBtZW1vcnkuICBUaGlzIGNvcnJlc3BvbmRzIHRvIFRSRUVfUkVBRE9OTFkgZm9yIGZ1bmN0aW9uCisgICBkZWNscy4gICovCisjZGVmaW5lIEVDRl9DT05TVAkJICAoMSA8PCAwKQorLyogTm9uemVybyBpZiB0aGlzIGlzIGEgY2FsbCB0byAicHVyZSIgZnVuY3Rpb24gKGxpa2UgY29uc3QgZnVuY3Rpb24sCisgICBidXQgbWF5IHJlYWQgbWVtb3J5LiAgVGhpcyBjb3JyZXNwb25kcyB0byBERUNMX1BVUkVfUCBmb3IgZnVuY3Rpb24KKyAgIGRlY2xzLiAgKi8KKyNkZWZpbmUgRUNGX1BVUkUJCSAgKDEgPDwgMSkKKy8qIE5vbnplcm8gaWYgdGhpcyBpcyBFQ0ZfQ09OU1Qgb3IgRUNGX1BVUkUgYnV0IGNhbm5vdCBiZSBwcm92ZW4gdG8gbm8KKyAgIGluZmluaXRlIGxvb3AuICBUaGlzIGNvcnJlc3BvbmRzIHRvIERFQ0xfTE9PUElOR19DT05TVF9PUl9QVVJFX1AKKyAgIGZvciBmdW5jdGlvbiBkZWNscy4qLworI2RlZmluZSBFQ0ZfTE9PUElOR19DT05TVF9PUl9QVVJFICgxIDw8IDIpCisvKiBOb256ZXJvIGlmIHRoaXMgY2FsbCB3aWxsIG5ldmVyIHJldHVybi4gICovCisjZGVmaW5lIEVDRl9OT1JFVFVSTgkJICAoMSA8PCAzKQorLyogTm9uemVybyBpZiB0aGlzIGlzIGEgY2FsbCB0byBtYWxsb2Mgb3IgYSByZWxhdGVkIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgRUNGX01BTExPQwkJICAoMSA8PCA0KQorLyogTm9uemVybyBpZiBpdCBpcyBwbGF1c2libGUgdGhhdCB0aGlzIGlzIGEgY2FsbCB0byBhbGxvY2EuICAqLworI2RlZmluZSBFQ0ZfTUFZX0JFX0FMTE9DQQkgICgxIDw8IDUpCisvKiBOb256ZXJvIGlmIHRoaXMgaXMgYSBjYWxsIHRvIGEgZnVuY3Rpb24gdGhhdCB3b24ndCB0aHJvdyBhbiBleGNlcHRpb24uICAqLworI2RlZmluZSBFQ0ZfTk9USFJPVwkJICAoMSA8PCA2KQorLyogTm9uemVybyBpZiB0aGlzIGlzIGEgY2FsbCB0byBzZXRqbXAgb3IgYSByZWxhdGVkIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgRUNGX1JFVFVSTlNfVFdJQ0UJICAoMSA8PCA3KQorLyogTm9uemVybyBpZiB0aGlzIGNhbGwgcmVwbGFjZXMgdGhlIGN1cnJlbnQgc3RhY2sgZnJhbWUuICAqLworI2RlZmluZSBFQ0ZfU0lCQ0FMTAkJICAoMSA8PCA4KQorLyogRnVuY3Rpb24gZG9lcyBub3QgcmVhZCBvciB3cml0ZSBtZW1vcnkgKGJ1dCBtYXkgaGF2ZSBzaWRlIGVmZmVjdHMsIHNvCisgICBpdCBkb2VzIG5vdCBuZWNlc3NhcmlseSBmaXQgRUNGX0NPTlNUKS4gICovCisjZGVmaW5lIEVDRl9OT1ZPUFMJCSAgKDEgPDwgOSkKKworZXh0ZXJuIGludCBmbGFnc19mcm9tX2RlY2xfb3JfdHlwZSAoY29uc3RfdHJlZSk7CitleHRlcm4gaW50IGNhbGxfZXhwcl9mbGFncyAoY29uc3RfdHJlZSk7CisKK2V4dGVybiBpbnQgc2V0am1wX2NhbGxfcCAoY29uc3RfdHJlZSk7CitleHRlcm4gYm9vbCBnaW1wbGVfYWxsb2NhX2NhbGxfcCAoY29uc3RfZ2ltcGxlKTsKK2V4dGVybiBib29sIGFsbG9jYV9jYWxsX3AgKGNvbnN0X3RyZWUpOworZXh0ZXJuIGJvb2wgbXVzdF9wYXNzX2luX3N0YWNrX3Zhcl9zaXplIChlbnVtIG1hY2hpbmVfbW9kZSwgY29uc3RfdHJlZSk7CitleHRlcm4gYm9vbCBtdXN0X3Bhc3NfaW5fc3RhY2tfdmFyX3NpemVfb3JfcGFkIChlbnVtIG1hY2hpbmVfbW9kZSwgY29uc3RfdHJlZSk7CisKKy8qIEluIGF0dHJpYnMuYy4gICovCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMgKmxvb2t1cF9hdHRyaWJ1dGVfc3BlYyAodHJlZSk7CisKKy8qIFByb2Nlc3MgdGhlIGF0dHJpYnV0ZXMgbGlzdGVkIGluIEFUVFJJQlVURVMgYW5kIGluc3RhbGwgdGhlbSBpbiAqTk9ERSwKKyAgIHdoaWNoIGlzIGVpdGhlciBhIERFQ0wgKGluY2x1ZGluZyBhIFRZUEVfREVDTCkgb3IgYSBUWVBFLiAgSWYgYSBERUNMLAorICAgaXQgc2hvdWxkIGJlIG1vZGlmaWVkIGluIHBsYWNlOyBpZiBhIFRZUEUsIGEgY29weSBzaG91bGQgYmUgY3JlYXRlZAorICAgdW5sZXNzIEFUVFJfRkxBR19UWVBFX0lOX1BMQUNFIGlzIHNldCBpbiBGTEFHUy4gIEZMQUdTIGdpdmVzIGZ1cnRoZXIKKyAgIGluZm9ybWF0aW9uLCBpbiB0aGUgZm9ybSBvZiBhIGJpdHdpc2UgT1Igb2YgZmxhZ3MgaW4gZW51bSBhdHRyaWJ1dGVfZmxhZ3MKKyAgIGZyb20gdHJlZS5oLiAgRGVwZW5kaW5nIG9uIHRoZXNlIGZsYWdzLCBzb21lIGF0dHJpYnV0ZXMgbWF5IGJlCisgICByZXR1cm5lZCB0byBiZSBhcHBsaWVkIGF0IGEgbGF0ZXIgc3RhZ2UgKGZvciBleGFtcGxlLCB0byBhcHBseQorICAgYSBkZWNsIGF0dHJpYnV0ZSB0byB0aGUgZGVjbGFyYXRpb24gcmF0aGVyIHRoYW4gdG8gaXRzIHR5cGUpLiAgKi8KK2V4dGVybiB0cmVlIGRlY2xfYXR0cmlidXRlcyAodHJlZSAqLCB0cmVlLCBpbnQpOworCisvKiBJbiBpbnRlZ3JhdGUuYyAqLworZXh0ZXJuIHZvaWQgc2V0X2RlY2xfYWJzdHJhY3RfZmxhZ3MgKHRyZWUsIGludCk7CitleHRlcm4gdm9pZCBzZXRfZGVjbF9vcmlnaW5fc2VsZiAodHJlZSk7CisKKy8qIEluIHN0b3ItbGF5b3V0LmMgKi8KK2V4dGVybiB2b2lkIHNldF9taW5fYW5kX21heF92YWx1ZXNfZm9yX2ludGVncmFsX3R5cGUgKHRyZWUsIGludCwgYm9vbCk7CitleHRlcm4gdm9pZCBmaXh1cF9zaWduZWRfdHlwZSAodHJlZSk7CitleHRlcm4gdm9pZCBpbnRlcm5hbF9yZWZlcmVuY2VfdHlwZXMgKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGludCB1cGRhdGVfYWxpZ25tZW50X2Zvcl9maWVsZCAocmVjb3JkX2xheW91dF9pbmZvLCB0cmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KTsKKy8qIHZhcmFzbS5jICovCitleHRlcm4gdm9pZCBtYWtlX2RlY2xfcnRsICh0cmVlKTsKK2V4dGVybiBydHggbWFrZV9kZWNsX3J0bF9mb3JfZGVidWcgKHRyZWUpOworZXh0ZXJuIHZvaWQgbWFrZV9kZWNsX29uZV9vbmx5ICh0cmVlLCB0cmVlKTsKK2V4dGVybiBpbnQgc3VwcG9ydHNfb25lX29ubHkgKHZvaWQpOworZXh0ZXJuIHZvaWQgcmVzb2x2ZV91bmlxdWVfc2VjdGlvbiAodHJlZSwgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgbWFya19yZWZlcmVuY2VkICh0cmVlKTsKK2V4dGVybiB2b2lkIG1hcmtfZGVjbF9yZWZlcmVuY2VkICh0cmVlKTsKK2V4dGVybiB2b2lkIG5vdGljZV9nbG9iYWxfc3ltYm9sICh0cmVlKTsKK2V4dGVybiB2b2lkIHNldF91c2VyX2Fzc2VtYmxlcl9uYW1lICh0cmVlLCBjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgcHJvY2Vzc19wZW5kaW5nX2Fzc2VtYmxlX2V4dGVybmFscyAodm9pZCk7CitleHRlcm4gdm9pZCBmaW5pc2hfYWxpYXNlc18xICh2b2lkKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9hbGlhc2VzXzIgKHZvaWQpOworZXh0ZXJuIHRyZWUgZW11dGxzX2RlY2wgKHRyZWUpOworZXh0ZXJuIHZvaWQgcmVtb3ZlX3VucmVhY2hhYmxlX2FsaWFzX3BhaXJzICh2b2lkKTsKK2V4dGVybiBib29sIGRlY2xfcmVwbGFjZWFibGVfcCAodHJlZSk7CitleHRlcm4gYm9vbCBkZWNsX2JpbmRzX3RvX2N1cnJlbnRfZGVmX3AgKHRyZWUpOworCisvKiBJbiBzdG10LmMgKi8KK2V4dGVybiB2b2lkIGV4cGFuZF9jb21wdXRlZF9nb3RvICh0cmVlKTsKK2V4dGVybiBib29sIHBhcnNlX291dHB1dF9jb25zdHJhaW50IChjb25zdCBjaGFyICoqLCBpbnQsIGludCwgaW50LAorCQkJCSAgICAgYm9vbCAqLCBib29sICosIGJvb2wgKik7CitleHRlcm4gYm9vbCBwYXJzZV9pbnB1dF9jb25zdHJhaW50IChjb25zdCBjaGFyICoqLCBpbnQsIGludCwgaW50LCBpbnQsCisJCQkJICAgIGNvbnN0IGNoYXIgKiBjb25zdCAqLCBib29sICosIGJvb2wgKik7CitleHRlcm4gdm9pZCBleHBhbmRfYXNtX3N0bXQgKGdpbXBsZSk7CitleHRlcm4gdHJlZSByZXNvbHZlX2FzbV9vcGVyYW5kX25hbWVzICh0cmVlLCB0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGV4cGFuZF9jYXNlIChnaW1wbGUpOworZXh0ZXJuIHZvaWQgZXhwYW5kX2RlY2wgKHRyZWUpOworI2lmZGVmIEhBUkRfQ09OU1QKKy8qIFNpbGx5IGlmZGVmIHRvIGF2b2lkIGhhdmluZyBhbGwgaW5jbHVkZXJzIGRlcGVuZCBvbiBoYXJkLXJlZy1zZXQuaC4gICovCitleHRlcm4gdHJlZSB0cmVlX292ZXJsYXBzX2hhcmRfcmVnX3NldCAodHJlZSwgSEFSRF9SRUdfU0VUICopOworI2VuZGlmCisKKwwKKy8qIEluIGR3YXJmMm91dC5jICovCisvKiBJbnRlcmZhY2Ugb2YgdGhlIERXQVJGMiB1bndpbmQgaW5mbyBzdXBwb3J0LiAgKi8KKworLyogR2VuZXJhdGUgYSBuZXcgbGFiZWwgZm9yIHRoZSBDRkkgaW5mbyB0byByZWZlciB0by4gICovCisKK2V4dGVybiBjaGFyICpkd2FyZjJvdXRfY2ZpX2xhYmVsIChib29sKTsKKworLyogRW50cnkgcG9pbnQgdG8gdXBkYXRlIHRoZSBjYW5vbmljYWwgZnJhbWUgYWRkcmVzcyAoQ0ZBKS4gICovCisKK2V4dGVybiB2b2lkIGR3YXJmMm91dF9kZWZfY2ZhIChjb25zdCBjaGFyICosIHVuc2lnbmVkLCBIT1NUX1dJREVfSU5UKTsKKworLyogQWRkIHRoZSBDRkkgZm9yIHNhdmluZyBhIHJlZ2lzdGVyIHdpbmRvdy4gICovCisKK2V4dGVybiB2b2lkIGR3YXJmMm91dF93aW5kb3dfc2F2ZSAoY29uc3QgY2hhciAqKTsKKworLyogRW50cnkgcG9pbnQgZm9yIHNhdmluZyBhIHJlZ2lzdGVyIHRvIHRoZSBzdGFjay4gICovCisKK2V4dGVybiB2b2lkIGR3YXJmMm91dF9yZWdfc2F2ZSAoY29uc3QgY2hhciAqLCB1bnNpZ25lZCwgSE9TVF9XSURFX0lOVCk7CisKKy8qIEVudHJ5IHBvaW50IGZvciBzYXZpbmcgdGhlIHJldHVybiBhZGRyZXNzIGluIHRoZSBzdGFjay4gICovCisKK2V4dGVybiB2b2lkIGR3YXJmMm91dF9yZXR1cm5fc2F2ZSAoY29uc3QgY2hhciAqLCBIT1NUX1dJREVfSU5UKTsKKworLyogRW50cnkgcG9pbnQgZm9yIHNhdmluZyB0aGUgcmV0dXJuIGFkZHJlc3MgaW4gYSByZWdpc3Rlci4gICovCisKK2V4dGVybiB2b2lkIGR3YXJmMm91dF9yZXR1cm5fcmVnIChjb25zdCBjaGFyICosIHVuc2lnbmVkKTsKKworLyogRW50cnkgcG9pbnQgZm9yIHNhdmluZyB0aGUgZmlyc3QgcmVnaXN0ZXIgaW50byB0aGUgc2Vjb25kLiAgKi8KKworZXh0ZXJuIHZvaWQgZHdhcmYyb3V0X3JlZ19zYXZlX3JlZyAoY29uc3QgY2hhciAqLCBydHgsIHJ0eCk7CisKKy8qIEluIHRyZWUtaW5saW5lLmMgICovCisKKy8qIFRoZSB0eXBlIG9mIGEgc2V0IG9mIGFscmVhZHktdmlzaXRlZCBwb2ludGVycy4gIEZ1bmN0aW9ucyBmb3IgY3JlYXRpbmcKKyAgIGFuZCBtYW5pcHVsYXRpbmcgaXQgYXJlIGRlY2xhcmVkIGluIHBvaW50ZXItc2V0LmggKi8KK3N0cnVjdCBwb2ludGVyX3NldF90OworCisvKiBUaGUgdHlwZSBvZiBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB3YWxraW5nIG92ZXIgdHJlZSBzdHJ1Y3R1cmUuICAqLworCit0eXBlZGVmIHRyZWUgKCp3YWxrX3RyZWVfZm4pICh0cmVlICosIGludCAqLCB2b2lkICopOworCisvKiBUaGUgdHlwZSBvZiBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgcmVwcmVzZW50cyBhIGN1c3RvbSB3YWxrX3RyZWUuICAqLworCit0eXBlZGVmIHRyZWUgKCp3YWxrX3RyZWVfbGgpICh0cmVlICosIGludCAqLCB0cmVlICgqKSAodHJlZSAqLCBpbnQgKiwgdm9pZCAqKSwKKwkJCSAgICAgIHZvaWQgKiwgc3RydWN0IHBvaW50ZXJfc2V0X3QqKTsKKworZXh0ZXJuIHRyZWUgd2Fsa190cmVlXzEgKHRyZWUqLCB3YWxrX3RyZWVfZm4sIHZvaWQqLCBzdHJ1Y3QgcG9pbnRlcl9zZXRfdCosCisJCQkgd2Fsa190cmVlX2xoKTsKK2V4dGVybiB0cmVlIHdhbGtfdHJlZV93aXRob3V0X2R1cGxpY2F0ZXNfMSAodHJlZSosIHdhbGtfdHJlZV9mbiwgdm9pZCosCisJCQkJCSAgICB3YWxrX3RyZWVfbGgpOworI2RlZmluZSB3YWxrX3RyZWUoYSxiLGMsZCkgXAorCXdhbGtfdHJlZV8xIChhLCBiLCBjLCBkLCBOVUxMKQorI2RlZmluZSB3YWxrX3RyZWVfd2l0aG91dF9kdXBsaWNhdGVzKGEsYixjKSBcCisJd2Fsa190cmVlX3dpdGhvdXRfZHVwbGljYXRlc18xIChhLCBiLCBjLCBOVUxMKQorCisvKiBJbiBlbWl0LXJ0bC5jICovCisvKiBBc3NpZ24gdGhlIFJUWCB0byBkZWNsYXJhdGlvbi4gICovCisKK2V4dGVybiB2b2lkIHNldF9kZWNsX3J0bCAodHJlZSwgcnR4KTsKK2V4dGVybiB2b2lkIHNldF9kZWNsX2luY29taW5nX3J0bCAodHJlZSwgcnR4LCBib29sKTsKKwwKKy8qIEVudW0gYW5kIGFycmF5cyB1c2VkIGZvciB0cmVlIGFsbG9jYXRpb24gc3RhdHMuCisgICBLZWVwIGluIHN5bmMgd2l0aCB0cmVlLmM6dHJlZV9ub2RlX2tpbmRfbmFtZXMuICAqLwordHlwZWRlZiBlbnVtCit7CisgIGRfa2luZCwKKyAgdF9raW5kLAorICBiX2tpbmQsCisgIHNfa2luZCwKKyAgcl9raW5kLAorICBlX2tpbmQsCisgIGNfa2luZCwKKyAgaWRfa2luZCwKKyAgcGVybV9saXN0X2tpbmQsCisgIHRlbXBfbGlzdF9raW5kLAorICB2ZWNfa2luZCwKKyAgYmluZm9fa2luZCwKKyAgc3NhX25hbWVfa2luZCwKKyAgY29uc3RyX2tpbmQsCisgIHhfa2luZCwKKyAgbGFuZ19kZWNsLAorICBsYW5nX3R5cGUsCisgIG9tcF9jbGF1c2Vfa2luZCwKKyAgYWxsX2tpbmRzCit9IHRyZWVfbm9kZV9raW5kOworCitleHRlcm4gaW50IHRyZWVfbm9kZV9jb3VudHNbXTsKK2V4dGVybiBpbnQgdHJlZV9ub2RlX3NpemVzW107CisKKy8qIFRydWUgaWYgd2UgYXJlIGluIGdpbXBsZSBmb3JtIGFuZCB0aGUgYWN0aW9ucyBvZiB0aGUgZm9sZGVycyBuZWVkIHRvCisgICBiZSByZXN0cmljdGVkLiAgRmFsc2UgaWYgd2UgYXJlIG5vdCBpbiBnaW1wbGUgZm9ybSBhbmQgZm9sZGluZyBpcyBub3QKKyAgIHJlc3RyaWN0ZWQgdG8gY3JlYXRpbmcgZ2ltcGxlIGV4cHJlc3Npb25zLiAgKi8KK2V4dGVybiBib29sIGluX2dpbXBsZV9mb3JtOworCisvKiBJbiBnaW1wbGUuYy4gICovCitleHRlcm4gdHJlZSBnZXRfYmFzZV9hZGRyZXNzICh0cmVlIHQpOworZXh0ZXJuIHZvaWQgbWFya19hZGRyZXNzYWJsZSAodHJlZSk7CisKKy8qIEluIHRyZWUtdmVjdG9yaXplci5jLiAgKi8KK2V4dGVybiB2b2lkIHZlY3Rfc2V0X3ZlcmJvc2l0eV9sZXZlbCAoY29uc3QgY2hhciAqKTsKKworLyogSW4gdHJlZS5jLiAgKi8KKworc3RydWN0IEdUWSgoKSkgdHJlZV9tYXBfYmFzZSB7CisgIHRyZWUgZnJvbTsKK307CisKK2V4dGVybiBpbnQgdHJlZV9tYXBfYmFzZV9lcSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOworZXh0ZXJuIHVuc2lnbmVkIGludCB0cmVlX21hcF9iYXNlX2hhc2ggKGNvbnN0IHZvaWQgKik7CitleHRlcm4gaW50IHRyZWVfbWFwX2Jhc2VfbWFya2VkX3AgKGNvbnN0IHZvaWQgKik7CitleHRlcm4gYm9vbCBsaXN0X2VxdWFsX3AgKGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUpOworCisvKiBNYXAgZnJvbSBhIHRyZWUgdG8gYW5vdGhlciB0cmVlLiAgKi8KKworc3RydWN0IEdUWSgoKSkgdHJlZV9tYXAgeworICBzdHJ1Y3QgdHJlZV9tYXBfYmFzZSBiYXNlOworICB1bnNpZ25lZCBpbnQgaGFzaDsKKyAgdHJlZSB0bzsKK307CisKKyNkZWZpbmUgdHJlZV9tYXBfZXEgdHJlZV9tYXBfYmFzZV9lcQorZXh0ZXJuIHVuc2lnbmVkIGludCB0cmVlX21hcF9oYXNoIChjb25zdCB2b2lkICopOworI2RlZmluZSB0cmVlX21hcF9tYXJrZWRfcCB0cmVlX21hcF9iYXNlX21hcmtlZF9wCisKKy8qIE1hcCBmcm9tIGEgdHJlZSB0byBhbiBpbnQuICAqLworCitzdHJ1Y3QgR1RZKCgpKSB0cmVlX2ludF9tYXAgeworICBzdHJ1Y3QgdHJlZV9tYXBfYmFzZSBiYXNlOworICB1bnNpZ25lZCBpbnQgdG87Cit9OworCisjZGVmaW5lIHRyZWVfaW50X21hcF9lcSB0cmVlX21hcF9iYXNlX2VxCisjZGVmaW5lIHRyZWVfaW50X21hcF9oYXNoIHRyZWVfbWFwX2Jhc2VfaGFzaAorI2RlZmluZSB0cmVlX2ludF9tYXBfbWFya2VkX3AgdHJlZV9tYXBfYmFzZV9tYXJrZWRfcAorCisvKiBNYXAgZnJvbSBhIHRyZWUgdG8gaW5pdGlhbGl6YXRpb24vZmluYWxpemF0aW9uIHByaW9yaXRpZXMuICAqLworCitzdHJ1Y3QgR1RZKCgpKSB0cmVlX3ByaW9yaXR5X21hcCB7CisgIHN0cnVjdCB0cmVlX21hcF9iYXNlIGJhc2U7CisgIHByaW9yaXR5X3R5cGUgaW5pdDsKKyAgcHJpb3JpdHlfdHlwZSBmaW5pOworfTsKKworI2RlZmluZSB0cmVlX3ByaW9yaXR5X21hcF9lcSB0cmVlX21hcF9iYXNlX2VxCisjZGVmaW5lIHRyZWVfcHJpb3JpdHlfbWFwX2hhc2ggdHJlZV9tYXBfYmFzZV9oYXNoCisjZGVmaW5lIHRyZWVfcHJpb3JpdHlfbWFwX21hcmtlZF9wIHRyZWVfbWFwX2Jhc2VfbWFya2VkX3AKKworLyogSW4gdHJlZS1zc2EuYyAqLworCit0cmVlIHRhcmdldF9mb3JfZGVidWdfYmluZCAodHJlZSk7CisKKy8qIEluIHRyZWUtc3NhLWNjcC5jICovCitleHRlcm4gdHJlZSBtYXliZV9mb2xkX29mZnNldF90b19yZWZlcmVuY2UgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgbWF5YmVfZm9sZF9vZmZzZXRfdG9fYWRkcmVzcyAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBtYXliZV9mb2xkX3N0bXRfYWRkaXRpb24gKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUsIHRyZWUpOworCisvKiBJbiB0cmVlLXNzYS1hZGRyZXNzLmMuICAqLworZXh0ZXJuIHRyZWUgdHJlZV9tZW1fcmVmX2FkZHIgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgY29weV9tZW1fcmVmX2luZm8gKHRyZWUsIHRyZWUpOworCisvKiBJbiB0cmVlLXZycC5jICovCitleHRlcm4gYm9vbCBzc2FfbmFtZV9ub25uZWdhdGl2ZV9wIChjb25zdF90cmVlKTsKKworLyogSW4gdHJlZS1vYmplY3Qtc2l6ZS5jLiAgKi8KK2V4dGVybiB2b2lkIGluaXRfb2JqZWN0X3NpemVzICh2b2lkKTsKK2V4dGVybiB2b2lkIGZpbmlfb2JqZWN0X3NpemVzICh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGNvbXB1dGVfYnVpbHRpbl9vYmplY3Rfc2l6ZSAodHJlZSwgaW50KTsKKworLyogSW4gZXhwci5jLiAgKi8KK2V4dGVybiB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGhpZ2hlc3RfcG93Ml9mYWN0b3IgKGNvbnN0X3RyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfcGVyc29uYWxpdHlfZnVuY3Rpb24gKGNvbnN0IGNoYXIgKik7CisKKy8qIEluIHRyZWUtaW5saW5lLmMuICAqLworCit2b2lkIGluaXRfaW5saW5lX29uY2UgKHZvaWQpOworCisvKiBJbiBpcGEtcmVmZXJlbmNlLmMuICBVc2VkIGZvciBwYXJzaW5nIGF0dHJpYnV0ZXMgb2YgYXNtIGNvZGUuICAqLworZXh0ZXJuIEdUWSgoKSkgdHJlZSBtZW1vcnlfaWRlbnRpZmllcl9zdHJpbmc7CisKKy8qIENvbXB1dGUgdGhlIG51bWJlciBvZiBvcGVyYW5kcyBpbiBhbiBleHByZXNzaW9uIG5vZGUgTk9ERS4gIEZvcgorICAgdGNjX3ZsX2V4cCBub2RlcyBsaWtlIENBTExfRVhQUnMsIHRoaXMgaXMgc3RvcmVkIGluIHRoZSBub2RlIGl0c2VsZiwKKyAgIG90aGVyd2lzZSBpdCBpcyBsb29rZWQgdXAgZnJvbSB0aGUgbm9kZSdzIGNvZGUuICAqLworc3RhdGljIGlubGluZSBpbnQKK3RyZWVfb3BlcmFuZF9sZW5ndGggKGNvbnN0X3RyZWUgbm9kZSkKK3sKKyAgaWYgKFZMX0VYUF9DTEFTU19QIChub2RlKSkKKyAgICByZXR1cm4gVkxfRVhQX09QRVJBTkRfTEVOR1RIIChub2RlKTsKKyAgZWxzZQorICAgIHJldHVybiBUUkVFX0NPREVfTEVOR1RIIChUUkVFX0NPREUgKG5vZGUpKTsKK30KKworLyogQWJzdHJhY3QgaXRlcmF0b3JzIGZvciBDQUxMX0VYUFJzLiAgVGhlc2Ugc3RhdGljIGlubGluZSBkZWZpbml0aW9ucworICAgaGF2ZSB0byBnbyB0b3dhcmRzIHRoZSBlbmQgb2YgdHJlZS5oIHNvIHRoYXQgdW5pb24gdHJlZV9ub2RlIGlzIGZ1bGx5CisgICBkZWZpbmVkIGJ5IHRoaXMgcG9pbnQuICAqLworCisvKiBTdHJ1Y3R1cmUgY29udGFpbmluZyBpdGVyYXRvciBzdGF0ZS4gICovCit0eXBlZGVmIHN0cnVjdCBHVFkgKCgpKSBjYWxsX2V4cHJfYXJnX2l0ZXJhdG9yX2QgeworICB0cmVlIHQ7CS8qIHRoZSBjYWxsX2V4cHIgKi8KKyAgaW50IG47CS8qIGFyZ3VtZW50IGNvdW50ICovCisgIGludCBpOwkvKiBuZXh0IGFyZ3VtZW50IGluZGV4ICovCit9IGNhbGxfZXhwcl9hcmdfaXRlcmF0b3I7CisKK3R5cGVkZWYgc3RydWN0IEdUWSAoKCkpIGNvbnN0X2NhbGxfZXhwcl9hcmdfaXRlcmF0b3JfZCB7CisgIGNvbnN0X3RyZWUgdDsJLyogdGhlIGNhbGxfZXhwciAqLworICBpbnQgbjsJLyogYXJndW1lbnQgY291bnQgKi8KKyAgaW50IGk7CS8qIG5leHQgYXJndW1lbnQgaW5kZXggKi8KK30gY29uc3RfY2FsbF9leHByX2FyZ19pdGVyYXRvcjsKKworLyogSW5pdGlhbGl6ZSB0aGUgYWJzdHJhY3QgYXJndW1lbnQgbGlzdCBpdGVyYXRvciBvYmplY3QgSVRFUiB3aXRoIHRoZQorICAgYXJndW1lbnRzIGZyb20gQ0FMTF9FWFBSIG5vZGUgRVhQLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAoraW5pdF9jYWxsX2V4cHJfYXJnX2l0ZXJhdG9yICh0cmVlIGV4cCwgY2FsbF9leHByX2FyZ19pdGVyYXRvciAqaXRlcikKK3sKKyAgaXRlci0+dCA9IGV4cDsKKyAgaXRlci0+biA9IGNhbGxfZXhwcl9uYXJncyAoZXhwKTsKKyAgaXRlci0+aSA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraW5pdF9jb25zdF9jYWxsX2V4cHJfYXJnX2l0ZXJhdG9yIChjb25zdF90cmVlIGV4cCwgY29uc3RfY2FsbF9leHByX2FyZ19pdGVyYXRvciAqaXRlcikKK3sKKyAgaXRlci0+dCA9IGV4cDsKKyAgaXRlci0+biA9IGNhbGxfZXhwcl9uYXJncyAoZXhwKTsKKyAgaXRlci0+aSA9IDA7Cit9CisKKy8qIFJldHVybiB0aGUgbmV4dCBhcmd1bWVudCBmcm9tIGFic3RyYWN0IGFyZ3VtZW50IGxpc3QgaXRlcmF0b3Igb2JqZWN0IElURVIsCisgICBhbmQgYWR2YW5jZSBpdHMgc3RhdGUuICBSZXR1cm4gTlVMTF9UUkVFIGlmIHRoZXJlIGFyZSBubyBtb3JlIGFyZ3VtZW50cy4gICovCitzdGF0aWMgaW5saW5lIHRyZWUKK25leHRfY2FsbF9leHByX2FyZyAoY2FsbF9leHByX2FyZ19pdGVyYXRvciAqaXRlcikKK3sKKyAgdHJlZSByZXN1bHQ7CisgIGlmIChpdGVyLT5pID49IGl0ZXItPm4pCisgICAgcmV0dXJuIE5VTExfVFJFRTsKKyAgcmVzdWx0ID0gQ0FMTF9FWFBSX0FSRyAoaXRlci0+dCwgaXRlci0+aSk7CisgIGl0ZXItPmkrKzsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBjb25zdF90cmVlCituZXh0X2NvbnN0X2NhbGxfZXhwcl9hcmcgKGNvbnN0X2NhbGxfZXhwcl9hcmdfaXRlcmF0b3IgKml0ZXIpCit7CisgIGNvbnN0X3RyZWUgcmVzdWx0OworICBpZiAoaXRlci0+aSA+PSBpdGVyLT5uKQorICAgIHJldHVybiBOVUxMX1RSRUU7CisgIHJlc3VsdCA9IENBTExfRVhQUl9BUkcgKGl0ZXItPnQsIGl0ZXItPmkpOworICBpdGVyLT5pKys7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIGFic3RyYWN0IGFyZ3VtZW50IGxpc3QgaXRlcmF0b3Igb2JqZWN0IElURVIsIHRoZW4gYWR2YW5jZQorICAgcGFzdCBhbmQgcmV0dXJuIHRoZSBmaXJzdCBhcmd1bWVudC4gIFVzZWZ1bCBpbiBmb3IgZXhwcmVzc2lvbnMsIGUuZy4KKyAgICAgZm9yIChhcmcgPSBmaXJzdF9jYWxsX2V4cHJfYXJnIChleHAsICZpdGVyKTsgYXJnOworICAgICAgICAgIGFyZyA9IG5leHRfY2FsbF9leHByX2FyZyAoJml0ZXIpKSAgICovCitzdGF0aWMgaW5saW5lIHRyZWUKK2ZpcnN0X2NhbGxfZXhwcl9hcmcgKHRyZWUgZXhwLCBjYWxsX2V4cHJfYXJnX2l0ZXJhdG9yICppdGVyKQoreworICBpbml0X2NhbGxfZXhwcl9hcmdfaXRlcmF0b3IgKGV4cCwgaXRlcik7CisgIHJldHVybiBuZXh0X2NhbGxfZXhwcl9hcmcgKGl0ZXIpOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0X3RyZWUKK2ZpcnN0X2NvbnN0X2NhbGxfZXhwcl9hcmcgKGNvbnN0X3RyZWUgZXhwLCBjb25zdF9jYWxsX2V4cHJfYXJnX2l0ZXJhdG9yICppdGVyKQoreworICBpbml0X2NvbnN0X2NhbGxfZXhwcl9hcmdfaXRlcmF0b3IgKGV4cCwgaXRlcik7CisgIHJldHVybiBuZXh0X2NvbnN0X2NhbGxfZXhwcl9hcmcgKGl0ZXIpOworfQorCisvKiBUZXN0IHdoZXRoZXIgdGhlcmUgYXJlIG1vcmUgYXJndW1lbnRzIGluIGFic3RyYWN0IGFyZ3VtZW50IGxpc3QgaXRlcmF0b3IKKyAgIElURVIsIHdpdGhvdXQgY2hhbmdpbmcgaXRzIHN0YXRlLiAgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorbW9yZV9jYWxsX2V4cHJfYXJnc19wIChjb25zdCBjYWxsX2V4cHJfYXJnX2l0ZXJhdG9yICppdGVyKQoreworICByZXR1cm4gKGl0ZXItPmkgPCBpdGVyLT5uKTsKK30KKworc3RhdGljIGlubGluZSBib29sCittb3JlX2NvbnN0X2NhbGxfZXhwcl9hcmdzX3AgKGNvbnN0IGNvbnN0X2NhbGxfZXhwcl9hcmdfaXRlcmF0b3IgKml0ZXIpCit7CisgIHJldHVybiAoaXRlci0+aSA8IGl0ZXItPm4pOworfQorCisvKiBJdGVyYXRlIHRocm91Z2ggZWFjaCBhcmd1bWVudCBBUkcgb2YgQ0FMTF9FWFBSIENBTEwsIHVzaW5nIHZhcmlhYmxlIElURVIKKyAgIChvZiB0eXBlIGNhbGxfZXhwcl9hcmdfaXRlcmF0b3IpIHRvIGhvbGQgdGhlIGl0ZXJhdGlvbiBzdGF0ZS4gICovCisjZGVmaW5lIEZPUl9FQUNIX0NBTExfRVhQUl9BUkcoYXJnLCBpdGVyLCBjYWxsKQkJCVwKKyAgZm9yICgoYXJnKSA9IGZpcnN0X2NhbGxfZXhwcl9hcmcgKChjYWxsKSwgJihpdGVyKSk7IChhcmcpOwlcCisgICAgICAgKGFyZykgPSBuZXh0X2NhbGxfZXhwcl9hcmcgKCYoaXRlcikpKQorCisjZGVmaW5lIEZPUl9FQUNIX0NPTlNUX0NBTExfRVhQUl9BUkcoYXJnLCBpdGVyLCBjYWxsKQkJCVwKKyAgZm9yICgoYXJnKSA9IGZpcnN0X2NvbnN0X2NhbGxfZXhwcl9hcmcgKChjYWxsKSwgJihpdGVyKSk7IChhcmcpOwlcCisgICAgICAgKGFyZykgPSBuZXh0X2NvbnN0X2NhbGxfZXhwcl9hcmcgKCYoaXRlcikpKQorCisvKiBSZXR1cm4gdHJ1ZSBpZiB0cmVlIG5vZGUgVCBpcyBhIGxhbmd1YWdlLXNwZWNpZmljIG5vZGUuICAqLworc3RhdGljIGlubGluZSBib29sCitpc19sYW5nX3NwZWNpZmljICh0cmVlIHQpCit7CisgIHJldHVybiBUUkVFX0NPREUgKHQpID09IExBTkdfVFlQRSB8fCBUUkVFX0NPREUgKHQpID49IE5VTV9UUkVFX0NPREVTOworfQorCisjZW5kaWYgIC8qIEdDQ19UUkVFX0ggICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdHJlZXN0cnVjdC5kZWYgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdHJlZXN0cnVjdC5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY3YzgwOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS90cmVlc3RydWN0LmRlZgpAQCAtMCwwICsxLDY2IEBACisvKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgdHJlZSBzdHJ1Y3R1cmUKKyAgIGVudW1lcmF0aW9uIHVzZWQgaW4gR0NDLgorCitDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBUaGUgZm9ybWF0IG9mIHRoaXMgZmlsZSBpcworCisgICBERUZUUkVFU1RSVUNUKGVudW1lcmF0aW9uIHZhbHVlLCBwcmludGFibGUgbmFtZSkuCisKKyAgIEVhY2ggZW51bWVyYXRpb24gdmFsdWUgc2hvdWxkIGNvcnJlc3BvbmQgd2l0aCBhIHNpbmdsZSBtZW1iZXIgb2YKKyAgIHVuaW9uIHRyZWVfbm9kZS4KKworICAgVGhlc2UgZW51bWVyYXRvciB2YWx1ZXMgYXJlIHVzZWQgaW4gb3JkZXIgdG8gZGlzdGluZ3Vpc2ggbWVtYmVycyBvZgorICAgdW5pb24gdHJlZV9ub2RlIGZvciBnYXJiYWdlIGNvbGxlY3Rpb24gcHVycG9zZXMsIGFzIHdlbGwgYXMKKyAgIHNwZWNpZnlpbmcgd2hhdCBzdHJ1Y3R1cmVzIGNvbnRhaW4gd2hhdCBvdGhlciBzdHJ1Y3R1cmVzIGluIHRoZQorICAgdHJlZV9jb250YWluc19zdHJ1Y3QgYXJyYXkuICAqLworREVGVFJFRVNUUlVDVChUU19CQVNFLCAiYmFzZSIpCitERUZUUkVFU1RSVUNUKFRTX0NPTU1PTiwgImNvbW1vbiIpCitERUZUUkVFU1RSVUNUKFRTX0lOVF9DU1QsICJpbnRlZ2VyIGNzdCIpCitERUZUUkVFU1RSVUNUKFRTX1JFQUxfQ1NULCAicmVhbCBjc3QiKQorREVGVFJFRVNUUlVDVChUU19GSVhFRF9DU1QsICJmaXhlZCBjc3QiKQorREVGVFJFRVNUUlVDVChUU19WRUNUT1IsICJ2ZWN0b3IiKQorREVGVFJFRVNUUlVDVChUU19TVFJJTkcsICJzdHJpbmciKQorREVGVFJFRVNUUlVDVChUU19DT01QTEVYLCAiY29tcGxleCIpCitERUZUUkVFU1RSVUNUKFRTX0lERU5USUZJRVIsICJpZGVudGlmaWVyIikKK0RFRlRSRUVTVFJVQ1QoVFNfREVDTF9NSU5JTUFMLCAiZGVjbCBtaW5pbWFsIikKK0RFRlRSRUVTVFJVQ1QoVFNfREVDTF9DT01NT04sICJkZWNsIGNvbW1vbiIpCitERUZUUkVFU1RSVUNUKFRTX0RFQ0xfV1JUTCwgImRlY2wgd2l0aCBSVEwiKQorREVGVFJFRVNUUlVDVChUU19ERUNMX05PTl9DT01NT04sICJkZWNsIG5vbi1jb21tb24iKQorREVGVFJFRVNUUlVDVChUU19ERUNMX1dJVEhfVklTLCAiZGVjbCB3aXRoIHZpc2liaWxpdHkiKQorREVGVFJFRVNUUlVDVChUU19GSUVMRF9ERUNMLCAiZmllbGQgZGVjbCIpCitERUZUUkVFU1RSVUNUKFRTX1ZBUl9ERUNMLCAidmFyIGRlY2wiKQorREVGVFJFRVNUUlVDVChUU19QQVJNX0RFQ0wsICJwYXJtIGRlY2wiKQorREVGVFJFRVNUUlVDVChUU19MQUJFTF9ERUNMLCAibGFiZWwgZGVjbCIpCitERUZUUkVFU1RSVUNUKFRTX1JFU1VMVF9ERUNMLCAicmVzdWx0IGRlY2wiKQorREVGVFJFRVNUUlVDVChUU19DT05TVF9ERUNMLCAiY29uc3QgZGVjbCIpCitERUZUUkVFU1RSVUNUKFRTX1RZUEVfREVDTCwgImxhYmVsIGRlY2wiKQorREVGVFJFRVNUUlVDVChUU19GVU5DVElPTl9ERUNMLCAiZnVuY3Rpb24gZGVjbCIpCitERUZUUkVFU1RSVUNUKFRTX1RZUEUsICJ0eXBlIikKK0RFRlRSRUVTVFJVQ1QoVFNfTElTVCwgImxpc3QiKQorREVGVFJFRVNUUlVDVChUU19WRUMsICJ2ZWMiKQorREVGVFJFRVNUUlVDVChUU19FWFAsICJleHAiKQorREVGVFJFRVNUUlVDVChUU19TU0FfTkFNRSwgInNzYSBuYW1lIikKK0RFRlRSRUVTVFJVQ1QoVFNfQkxPQ0ssICJibG9jayIpCitERUZUUkVFU1RSVUNUKFRTX0JJTkZPLCAiYmluZm8iKQorREVGVFJFRVNUUlVDVChUU19TVEFURU1FTlRfTElTVCwgInN0YXRlbWVudCBsaXN0IikKK0RFRlRSRUVTVFJVQ1QoVFNfQ09OU1RSVUNUT1IsICJjb25zdHJ1Y3RvciIpCitERUZUUkVFU1RSVUNUKFRTX09NUF9DTEFVU0UsICJvbXAgY2xhdXNlIikKK0RFRlRSRUVTVFJVQ1QoVFNfT1BUSU1JWkFUSU9OLCAib3B0aW1pemF0aW9uIG9wdGlvbnMiKQorREVGVFJFRVNUUlVDVChUU19UQVJHRVRfT1BUSU9OLCAidGFyZ2V0IG9wdGlvbnMiKQpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3ZhcnJheS5oIGIvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3ZhcnJheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiY2NkZTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdmFycmF5LmgKQEAgLTAsMCArMSwzMjMgQEAKKy8qIFZpcnR1YWwgYXJyYXkgc3VwcG9ydC4KKyAgIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNworICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBDeWdudXMgU29sdXRpb25zLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKKyAgIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfVkFSUkFZX0gKKyNkZWZpbmUgR0NDX1ZBUlJBWV9ICisKKyNpZm5kZWYgSE9TVF9XSURFX0lOVAorI2luY2x1ZGUgIm1hY2htb2RlLmgiCisjZW5kaWYKKworI2lmbmRlZiBHQ0NfU1lTVEVNX0gKKyNpbmNsdWRlICJzeXN0ZW0uaCIKKyNpbmNsdWRlICJjb3JldHlwZXMuaCIKKyNpbmNsdWRlICJ0bS5oIgorI2VuZGlmCisKKy8qIEVudW0gaW5kaWNhdGluZyB3aGF0IHRoZSB2YXJyYXkgY29udGFpbnMuCisgICBJZiB0aGlzIGlzIGNoYW5nZWQsIGBlbGVtZW50JyBpbiB2YXJyYXkuYyBuZWVkcyB0byBiZSB1cGRhdGVkLiAgKi8KKworZW51bSB2YXJyYXlfZGF0YV9lbnVtIHsKKyAgVkFSUkFZX0RBVEFfQywKKyAgVkFSUkFZX0RBVEFfVUMsCisgIFZBUlJBWV9EQVRBX1MsCisgIFZBUlJBWV9EQVRBX1VTLAorICBWQVJSQVlfREFUQV9JLAorICBWQVJSQVlfREFUQV9VLAorICBWQVJSQVlfREFUQV9MLAorICBWQVJSQVlfREFUQV9VTCwKKyAgVkFSUkFZX0RBVEFfSElOVCwKKyAgVkFSUkFZX0RBVEFfVUhJTlQsCisgIFZBUlJBWV9EQVRBX0dFTkVSSUMsCisgIFZBUlJBWV9EQVRBX0dFTkVSSUNfTk9HQywKKyAgVkFSUkFZX0RBVEFfQ1BUUiwKKyAgVkFSUkFZX0RBVEFfUlRYLAorICBWQVJSQVlfREFUQV9SVFZFQywKKyAgVkFSUkFZX0RBVEFfVFJFRSwKKyAgVkFSUkFZX0RBVEFfQklUTUFQLAorICBWQVJSQVlfREFUQV9SRUcsCisgIFZBUlJBWV9EQVRBX0JCLAorICBWQVJSQVlfREFUQV9URSwKKyAgVkFSUkFZX0RBVEFfRURHRSwKKyAgVkFSUkFZX0RBVEFfVFJFRV9QVFIsCisgIE5VTV9WQVJSQVlfREFUQQorfTsKKworLyogVW5pb24gb2YgdmFyaW91cyBhcnJheSB0eXBlcyB0aGF0IGFyZSB1c2VkLiAgKi8KK3R5cGVkZWYgdW5pb24gR1RZICgoKSkgdmFycmF5X2RhdGFfdGFnIHsKKyAgY2hhcgkJCSAgR1RZICgobGVuZ3RoICgiJTAubnVtX2VsZW1lbnRzIiksCisJCQkJdGFnICgiVkFSUkFZX0RBVEFfQyIpKSkJCXZkdF9jWzFdOworICB1bnNpZ25lZCBjaGFyCQkgIEdUWSAoKGxlbmd0aCAoIiUwLm51bV9lbGVtZW50cyIpLAorCQkJCXRhZyAoIlZBUlJBWV9EQVRBX1VDIikpKQl2ZHRfdWNbMV07CisgIHNob3J0CQkJICBHVFkgKChsZW5ndGggKCIlMC5udW1fZWxlbWVudHMiKSwKKwkJCQl0YWcgKCJWQVJSQVlfREFUQV9TIikpKQkJdmR0X3NbMV07CisgIHVuc2lnbmVkIHNob3J0CSAgR1RZICgobGVuZ3RoICgiJTAubnVtX2VsZW1lbnRzIiksCisJCQkJdGFnICgiVkFSUkFZX0RBVEFfVVMiKSkpCXZkdF91c1sxXTsKKyAgaW50CQkJICBHVFkgKChsZW5ndGggKCIlMC5udW1fZWxlbWVudHMiKSwKKwkJCQl0YWcgKCJWQVJSQVlfREFUQV9JIikpKQkJdmR0X2lbMV07CisgIHVuc2lnbmVkIGludAkJICBHVFkgKChsZW5ndGggKCIlMC5udW1fZWxlbWVudHMiKSwKKwkJCQl0YWcgKCJWQVJSQVlfREFUQV9VIikpKQkJdmR0X3VbMV07CisgIGxvbmcJCQkgIEdUWSAoKGxlbmd0aCAoIiUwLm51bV9lbGVtZW50cyIpLAorCQkJCXRhZyAoIlZBUlJBWV9EQVRBX0wiKSkpCQl2ZHRfbFsxXTsKKyAgdW5zaWduZWQgbG9uZwkJICBHVFkgKChsZW5ndGggKCIlMC5udW1fZWxlbWVudHMiKSwKKwkJCQl0YWcgKCJWQVJSQVlfREFUQV9VTCIpKSkJdmR0X3VsWzFdOworICBIT1NUX1dJREVfSU5UCQkgIEdUWSAoKGxlbmd0aCAoIiUwLm51bV9lbGVtZW50cyIpLAorCQkJCXRhZyAoIlZBUlJBWV9EQVRBX0hJTlQiKSkpCXZkdF9oaW50WzFdOworICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UICBHVFkgKChsZW5ndGggKCIlMC5udW1fZWxlbWVudHMiKSwKKwkJCQl0YWcgKCJWQVJSQVlfREFUQV9VSElOVCIpKSkJdmR0X3VoaW50WzFdOworICBQVFIJCQkgIEdUWSAoKGxlbmd0aCAoIiUwLm51bV9lbGVtZW50cyIpLCB1c2VfcGFyYW0sCisJCQkJdGFnICgiVkFSUkFZX0RBVEFfR0VORVJJQyIpKSkJdmR0X2dlbmVyaWNbMV07CisgIFBUUgkJCSAgR1RZICgobGVuZ3RoICgiJTAubnVtX2VsZW1lbnRzIiksIHNraXAgKCIiKSwKKwkJCQl0YWcgKCJWQVJSQVlfREFUQV9HRU5FUklDX05PR0MiKSkpCXZkdF9nZW5lcmljX25vZ2NbMV07CisgIGNoYXIJCQkgKkdUWSAoKGxlbmd0aCAoIiUwLm51bV9lbGVtZW50cyIpLAorCQkJCXRhZyAoIlZBUlJBWV9EQVRBX0NQVFIiKSkpCXZkdF9jcHRyWzFdOworICBydHgJCQkgIEdUWSAoKGxlbmd0aCAoIiUwLm51bV9lbGVtZW50cyIpLAorCQkJCXRhZyAoIlZBUlJBWV9EQVRBX1JUWCIpKSkJdmR0X3J0eFsxXTsKKyAgcnR2ZWMJCQkgIEdUWSAoKGxlbmd0aCAoIiUwLm51bV9lbGVtZW50cyIpLAorCQkJCXRhZyAoIlZBUlJBWV9EQVRBX1JUVkVDIikpKQl2ZHRfcnR2ZWNbMV07CisgIHRyZWUJCQkgIEdUWSAoKGxlbmd0aCAoIiUwLm51bV9lbGVtZW50cyIpLAorCQkJCXRhZyAoIlZBUlJBWV9EQVRBX1RSRUUiKSkpCXZkdF90cmVlWzFdOworICBzdHJ1Y3QgYml0bWFwX2hlYWRfZGVmICpHVFkgKChsZW5ndGggKCIlMC5udW1fZWxlbWVudHMiKSwKKwkJCQl0YWcgKCJWQVJSQVlfREFUQV9CSVRNQVAiKSkpCXZkdF9iaXRtYXBbMV07CisgIHN0cnVjdCByZWdfaW5mb19kZWYJICpHVFkgKChsZW5ndGggKCIlMC5udW1fZWxlbWVudHMiKSwgc2tpcCwKKwkJCQl0YWcgKCJWQVJSQVlfREFUQV9SRUciKSkpCXZkdF9yZWdbMV07CisgIHN0cnVjdCBiYXNpY19ibG9ja19kZWYgKkdUWSAoKGxlbmd0aCAoIiUwLm51bV9lbGVtZW50cyIpLCBza2lwLAorCQkJCXRhZyAoIlZBUlJBWV9EQVRBX0JCIikpKQl2ZHRfYmJbMV07CisgIHN0cnVjdCBlbHRfbGlzdAkgKkdUWSAoKGxlbmd0aCAoIiUwLm51bV9lbGVtZW50cyIpLAorCQkJCXRhZyAoIlZBUlJBWV9EQVRBX1RFIikpKQl2ZHRfdGVbMV07CisgIHN0cnVjdCBlZGdlX2RlZiAgICAgICAgKkdUWSAoKGxlbmd0aCAoIiUwLm51bV9lbGVtZW50cyIpLAorCSAgICAgICAgICAgICAgICAgICAgICAgIHRhZyAoIlZBUlJBWV9EQVRBX0VER0UiKSkpCXZkdF9lWzFdOworICB0cmVlICAgICAgICAgICAgICAgICAgICpHVFkgKChsZW5ndGggKCIlMC5udW1fZWxlbWVudHMiKSwgc2tpcCAoIiIpLAorCSAgICAgICAgICAgICAgICAgICAgICAgIHRhZyAoIlZBUlJBWV9EQVRBX1RSRUVfUFRSIikpKQl2ZHRfdHBbMV07Cit9IHZhcnJheV9kYXRhOworCisvKiBWaXJ0dWFsIGFycmF5IG9mIHBvaW50ZXJzIGhlYWRlci4gICovCitzdHJ1Y3QgR1RZKCgpKSB2YXJyYXlfaGVhZF90YWcgeworICBzaXplX3QJbnVtX2VsZW1lbnRzOwkvKiBNYXhpbXVtIGVsZW1lbnQgbnVtYmVyIGFsbG9jYXRlZC4gICovCisgIHNpemVfdCAgICAgICAgZWxlbWVudHNfdXNlZDsgIC8qIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdXNlZCwgaWYKKwkJCQkgICB1c2luZyBWQVJSQVlfUFVTSC9WQVJSQVlfUE9QLiAgKi8KKyAgZW51bSB2YXJyYXlfZGF0YV9lbnVtIHR5cGU7CS8qIFRoZSBraW5kIG9mIGVsZW1lbnRzIGluIHRoZSB2YXJyYXkuICAqLworICBjb25zdCBjaGFyICAgKm5hbWU7CQkvKiBuYW1lIG9mIHRoZSB2YXJyYXkgZm9yIHJlcG9ydGluZyBlcnJvcnMgKi8KKyAgdmFycmF5X2RhdGEJR1RZICgoZGVzYyAoIiUwLnR5cGUiKSkpIGRhdGE7CS8qIFRoZSBkYXRhIGVsZW1lbnRzIGZvbGxvdywKKwkJCQkJCSAgIG11c3QgYmUgbGFzdC4gICovCit9OwordHlwZWRlZiBzdHJ1Y3QgdmFycmF5X2hlYWRfdGFnICp2YXJyYXlfdHlwZTsKKworLyogQWxsb2NhdGUgYSB2aXJ0dWFsIGFycmF5IHdpdGggTlVNIGVsZW1lbnRzLCBlYWNoIG9mIHdoaWNoIGlzIFNJWkUgYnl0ZXMKKyAgIGxvbmcsIG5hbWVkIE5BTUUuICBBcnJheSBlbGVtZW50cyBhcmUgemVyb2VkLiAgKi8KK2V4dGVybiB2YXJyYXlfdHlwZSB2YXJyYXlfaW5pdCAoc2l6ZV90LCBlbnVtIHZhcnJheV9kYXRhX2VudW0sIGNvbnN0IGNoYXIgKik7CisKKyNkZWZpbmUgVkFSUkFZX0NIQVJfSU5JVCh2YSwgbnVtLCBuYW1lKSBcCisgIHZhID0gdmFycmF5X2luaXQgKG51bSwgVkFSUkFZX0RBVEFfQywgbmFtZSkKKworI2RlZmluZSBWQVJSQVlfVUNIQVJfSU5JVCh2YSwgbnVtLCBuYW1lKSBcCisgIHZhID0gdmFycmF5X2luaXQgKG51bSwgVkFSUkFZX0RBVEFfVUMsIG5hbWUpCisKKyNkZWZpbmUgVkFSUkFZX1NIT1JUX0lOSVQodmEsIG51bSwgbmFtZSkgXAorICB2YSA9IHZhcnJheV9pbml0IChudW0sIFZBUlJBWV9EQVRBX1MsIG5hbWUpCisKKyNkZWZpbmUgVkFSUkFZX1VTSE9SVF9JTklUKHZhLCBudW0sIG5hbWUpIFwKKyAgdmEgPSB2YXJyYXlfaW5pdCAobnVtLCBWQVJSQVlfREFUQV9VUywgbmFtZSkKKworI2RlZmluZSBWQVJSQVlfSU5UX0lOSVQodmEsIG51bSwgbmFtZSkgXAorICB2YSA9IHZhcnJheV9pbml0IChudW0sIFZBUlJBWV9EQVRBX0ksIG5hbWUpCisKKyNkZWZpbmUgVkFSUkFZX1VJTlRfSU5JVCh2YSwgbnVtLCBuYW1lKSBcCisgIHZhID0gdmFycmF5X2luaXQgKG51bSwgVkFSUkFZX0RBVEFfVSwgbmFtZSkKKworI2RlZmluZSBWQVJSQVlfTE9OR19JTklUKHZhLCBudW0sIG5hbWUpIFwKKyAgdmEgPSB2YXJyYXlfaW5pdCAobnVtLCBWQVJSQVlfREFUQV9MLCBuYW1lKQorCisjZGVmaW5lIFZBUlJBWV9VTE9OR19JTklUKHZhLCBudW0sIG5hbWUpIFwKKyAgdmEgPSB2YXJyYXlfaW5pdCAobnVtLCBWQVJSQVlfREFUQV9VTCwgbmFtZSkKKworI2RlZmluZSBWQVJSQVlfV0lERV9JTlRfSU5JVCh2YSwgbnVtLCBuYW1lKSBcCisgIHZhID0gdmFycmF5X2luaXQgKG51bSwgVkFSUkFZX0RBVEFfSElOVCwgbmFtZSkKKworI2RlZmluZSBWQVJSQVlfVVdJREVfSU5UX0lOSVQodmEsIG51bSwgbmFtZSkgXAorICB2YSA9IHZhcnJheV9pbml0IChudW0sIFZBUlJBWV9EQVRBX1VISU5ULCBuYW1lKQorCisjZGVmaW5lIFZBUlJBWV9HRU5FUklDX1BUUl9JTklUKHZhLCBudW0sIG5hbWUpIFwKKyAgdmEgPSB2YXJyYXlfaW5pdCAobnVtLCBWQVJSQVlfREFUQV9HRU5FUklDLCBuYW1lKQorCisjZGVmaW5lIFZBUlJBWV9HRU5FUklDX1BUUl9OT0dDX0lOSVQodmEsIG51bSwgbmFtZSkgXAorICB2YSA9IHZhcnJheV9pbml0IChudW0sIFZBUlJBWV9EQVRBX0dFTkVSSUNfTk9HQywgbmFtZSkKKworI2RlZmluZSBWQVJSQVlfQ0hBUl9QVFJfSU5JVCh2YSwgbnVtLCBuYW1lKSBcCisgIHZhID0gdmFycmF5X2luaXQgKG51bSwgVkFSUkFZX0RBVEFfQ1BUUiwgbmFtZSkKKworI2RlZmluZSBWQVJSQVlfUlRYX0lOSVQodmEsIG51bSwgbmFtZSkgXAorICB2YSA9IHZhcnJheV9pbml0IChudW0sIFZBUlJBWV9EQVRBX1JUWCwgbmFtZSkKKworI2RlZmluZSBWQVJSQVlfUlRWRUNfSU5JVCh2YSwgbnVtLCBuYW1lKSBcCisgIHZhID0gdmFycmF5X2luaXQgKG51bSwgVkFSUkFZX0RBVEFfUlRWRUMsIG5hbWUpCisKKyNkZWZpbmUgVkFSUkFZX1RSRUVfSU5JVCh2YSwgbnVtLCBuYW1lKSBcCisgIHZhID0gdmFycmF5X2luaXQgKG51bSwgVkFSUkFZX0RBVEFfVFJFRSwgbmFtZSkKKworI2RlZmluZSBWQVJSQVlfQklUTUFQX0lOSVQodmEsIG51bSwgbmFtZSkgXAorICB2YSA9IHZhcnJheV9pbml0IChudW0sIFZBUlJBWV9EQVRBX0JJVE1BUCwgbmFtZSkKKworI2RlZmluZSBWQVJSQVlfUkVHX0lOSVQodmEsIG51bSwgbmFtZSkgXAorICB2YSA9IHZhcnJheV9pbml0IChudW0sIFZBUlJBWV9EQVRBX1JFRywgbmFtZSkKKworI2RlZmluZSBWQVJSQVlfQkJfSU5JVCh2YSwgbnVtLCBuYW1lKSBcCisgIHZhID0gdmFycmF5X2luaXQgKG51bSwgVkFSUkFZX0RBVEFfQkIsIG5hbWUpCisKKyNkZWZpbmUgVkFSUkFZX0VMVF9MSVNUX0lOSVQodmEsIG51bSwgbmFtZSkgXAorICB2YSA9IHZhcnJheV9pbml0IChudW0sIFZBUlJBWV9EQVRBX1RFLCBuYW1lKQorCisjZGVmaW5lIFZBUlJBWV9FREdFX0lOSVQodmEsIG51bSwgbmFtZSkgXAorICB2YSA9IHZhcnJheV9pbml0IChudW0sIFZBUlJBWV9EQVRBX0VER0UsIG5hbWUpCisKKyNkZWZpbmUgVkFSUkFZX1RSRUVfUFRSX0lOSVQodmEsIG51bSwgbmFtZSkgXAorICB2YSA9IHZhcnJheV9pbml0IChudW0sIFZBUlJBWV9EQVRBX1RSRUVfUFRSLCBuYW1lKQorCisvKiBGcmVlIHVwIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhlIHZpcnR1YWwgYXJyYXksIGJ1dCBkbyBub3QgZnJlZSBhbnkgb2YgdGhlCisgICBlbGVtZW50cyBpbnZvbHZlZC4gICovCisjZGVmaW5lIFZBUlJBWV9GUkVFKHZwKSBcCisgIGRvIHsgaWYgKHZwKSB7IGZyZWUgKHZwKTsgdnAgPSAodmFycmF5X3R5cGUpIDA7IH0gfSB3aGlsZSAoMCkKKworLyogR3Jvdy9zaHJpbmsgdGhlIHZpcnR1YWwgYXJyYXkgVkEgdG8gTiBlbGVtZW50cy4gICovCitleHRlcm4gdmFycmF5X3R5cGUgdmFycmF5X2dyb3cgKHZhcnJheV90eXBlLCBzaXplX3QpOworCisjZGVmaW5lIFZBUlJBWV9HUk9XKFZBLCBOKSAoKFZBKSA9IHZhcnJheV9ncm93IChWQSwgTikpCisKKyNkZWZpbmUgVkFSUkFZX1NJWkUoVkEpCSgoVkEpLT5udW1fZWxlbWVudHMpCisKKyNkZWZpbmUgVkFSUkFZX0FDVElWRV9TSVpFKFZBKQkoKFZBKS0+ZWxlbWVudHNfdXNlZCkKKyNkZWZpbmUgVkFSUkFZX1BPUF9BTEwoVkEpCSgoVkEpLT5lbGVtZW50c191c2VkID0gMCkKKworI2RlZmluZSBWQVJSQVlfQ0xFQVIoVkEpIHZhcnJheV9jbGVhcihWQSkKKworZXh0ZXJuIHZvaWQgdmFycmF5X2NsZWFyICh2YXJyYXlfdHlwZSk7CitleHRlcm4gdm9pZCBkdW1wX3ZhcnJheV9zdGF0aXN0aWNzICh2b2lkKTsKKworLyogQ2hlY2sgZm9yIFZBUlJBWV94eHggbWFjcm9zIGJlaW5nIGluIGJvdW5kLiAgKi8KKyNpZiBkZWZpbmVkIEVOQUJMRV9DSEVDS0lORyAmJiAoR0NDX1ZFUlNJT04gPj0gMjAwNykKK2V4dGVybiB2b2lkIHZhcnJheV9jaGVja19mYWlsZWQgKHZhcnJheV90eXBlLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgaW50LAorCQkJCSBjb25zdCBjaGFyICopIEFUVFJJQlVURV9OT1JFVFVSTjsKK2V4dGVybiB2b2lkIHZhcnJheV91bmRlcmZsb3cgKHZhcnJheV90eXBlLCBjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKQorICAgICBBVFRSSUJVVEVfTk9SRVRVUk47CisjZGVmaW5lIFZBUlJBWV9DSEVDSyhWQSwgTiwgVCkgX19leHRlbnNpb25fXwkJCVwKKygqKHsgdmFycmF5X3R5cGUgY29uc3QgX3ZhID0gKFZBKTsJCQkJXAorICAgICBjb25zdCBzaXplX3QgX24gPSAoTik7CQkJCQlcCisgICAgIGlmIChfbiA+PSBfdmEtPm51bV9lbGVtZW50cykJCQkJXAorICAgICAgIHZhcnJheV9jaGVja19mYWlsZWQgKF92YSwgX24sIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKTsJXAorICAgICAmX3ZhLT5kYXRhLlRbX25dOyB9KSkKKworI2RlZmluZSBWQVJSQVlfUE9QKFZBKSBkbyB7CQkJCQlcCisgIHZhcnJheV90eXBlIGNvbnN0IF92YSA9IChWQSk7CQkJCQlcCisgIGlmIChfdmEtPmVsZW1lbnRzX3VzZWQgPT0gMCkJCQkJCVwKKyAgICB2YXJyYXlfdW5kZXJmbG93IChfdmEsIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKTsJXAorICBlbHNlCQkJCQkJCQlcCisgICAgX3ZhLT5lbGVtZW50c191c2VkLS07CQkJCQlcCit9IHdoaWxlICgwKQorCisjZWxzZQorI2RlZmluZSBWQVJSQVlfQ0hFQ0soVkEsIE4sIFQpICgoVkEpLT5kYXRhLlRbTl0pCisvKiBQb3AgdGhlIHRvcCBlbGVtZW50IG9mIFZBLiAgKi8KKyNkZWZpbmUgVkFSUkFZX1BPUChWQSkgZG8geyAoKFZBKS0+ZWxlbWVudHNfdXNlZC0tKTsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKiBQdXNoIFggb250byBWQS4gIFQgaXMgdGhlIG5hbWUgb2YgdGhlIGZpZWxkIGluIHZhcnJheV9kYXRhCisgICBjb3JyZXNwb25kaW5nIHRvIHRoZSB0eXBlIG9mIFguICAqLworI2RlZmluZSBWQVJSQVlfUFVTSChWQSwgVCwgWCkJCQkJXAorICBkbwkJCQkJCQlcCisgICAgewkJCQkJCQlcCisgICAgICBpZiAoKFZBKS0+ZWxlbWVudHNfdXNlZCA+PSAoVkEpLT5udW1fZWxlbWVudHMpCVwKKyAgICAgICAgVkFSUkFZX0dST1cgKChWQSksIDIgKiAoVkEpLT5udW1fZWxlbWVudHMpOwlcCisgICAgICAoVkEpLT5kYXRhLlRbKFZBKS0+ZWxlbWVudHNfdXNlZCsrXSA9IChYKTsJXAorICAgIH0JCQkJCQkJXAorICB3aGlsZSAoMCkKKworI2RlZmluZSBWQVJSQVlfQ0hBUihWQSwgTikJCVZBUlJBWV9DSEVDSyAoVkEsIE4sIHZkdF9jKQorI2RlZmluZSBWQVJSQVlfVUNIQVIoVkEsIE4pCQlWQVJSQVlfQ0hFQ0sgKFZBLCBOLCB2ZHRfdWMpCisjZGVmaW5lIFZBUlJBWV9TSE9SVChWQSwgTikJCVZBUlJBWV9DSEVDSyAoVkEsIE4sIHZkdF9zKQorI2RlZmluZSBWQVJSQVlfVVNIT1JUKFZBLCBOKQkJVkFSUkFZX0NIRUNLIChWQSwgTiwgdmR0X3VzKQorI2RlZmluZSBWQVJSQVlfSU5UKFZBLCBOKQkJVkFSUkFZX0NIRUNLIChWQSwgTiwgdmR0X2kpCisjZGVmaW5lIFZBUlJBWV9VSU5UKFZBLCBOKQkJVkFSUkFZX0NIRUNLIChWQSwgTiwgdmR0X3UpCisjZGVmaW5lIFZBUlJBWV9MT05HKFZBLCBOKQkJVkFSUkFZX0NIRUNLIChWQSwgTiwgdmR0X2wpCisjZGVmaW5lIFZBUlJBWV9VTE9ORyhWQSwgTikJCVZBUlJBWV9DSEVDSyAoVkEsIE4sIHZkdF91bCkKKyNkZWZpbmUgVkFSUkFZX1dJREVfSU5UKFZBLCBOKQkJVkFSUkFZX0NIRUNLIChWQSwgTiwgdmR0X2hpbnQpCisjZGVmaW5lIFZBUlJBWV9VV0lERV9JTlQoVkEsIE4pCQlWQVJSQVlfQ0hFQ0sgKFZBLCBOLCB2ZHRfdWhpbnQpCisjZGVmaW5lIFZBUlJBWV9HRU5FUklDX1BUUihWQSxOKQlWQVJSQVlfQ0hFQ0sgKFZBLCBOLCB2ZHRfZ2VuZXJpYykKKyNkZWZpbmUgVkFSUkFZX0dFTkVSSUNfUFRSX05PR0MoVkEsTikJVkFSUkFZX0NIRUNLIChWQSwgTiwgdmR0X2dlbmVyaWNfbm9nYykKKyNkZWZpbmUgVkFSUkFZX0NIQVJfUFRSKFZBLE4pCQlWQVJSQVlfQ0hFQ0sgKFZBLCBOLCB2ZHRfY3B0cikKKyNkZWZpbmUgVkFSUkFZX1JUWChWQSwgTikJCVZBUlJBWV9DSEVDSyAoVkEsIE4sIHZkdF9ydHgpCisjZGVmaW5lIFZBUlJBWV9SVFZFQyhWQSwgTikJCVZBUlJBWV9DSEVDSyAoVkEsIE4sIHZkdF9ydHZlYykKKyNkZWZpbmUgVkFSUkFZX1RSRUUoVkEsIE4pCQlWQVJSQVlfQ0hFQ0sgKFZBLCBOLCB2ZHRfdHJlZSkKKyNkZWZpbmUgVkFSUkFZX0JJVE1BUChWQSwgTikJCVZBUlJBWV9DSEVDSyAoVkEsIE4sIHZkdF9iaXRtYXApCisjZGVmaW5lIFZBUlJBWV9SRUcoVkEsIE4pCQlWQVJSQVlfQ0hFQ0sgKFZBLCBOLCB2ZHRfcmVnKQorI2RlZmluZSBWQVJSQVlfQkIoVkEsIE4pCQlWQVJSQVlfQ0hFQ0sgKFZBLCBOLCB2ZHRfYmIpCisjZGVmaW5lIFZBUlJBWV9FTFRfTElTVChWQSwgTikJCVZBUlJBWV9DSEVDSyAoVkEsIE4sIHZkdF90ZSkKKyNkZWZpbmUgVkFSUkFZX0VER0UoVkEsIE4pCQlWQVJSQVlfQ0hFQ0sgKFZBLCBOLCB2ZHRfZSkKKyNkZWZpbmUgVkFSUkFZX1RSRUVfUFRSKFZBLCBOKQkJVkFSUkFZX0NIRUNLIChWQSwgTiwgdmR0X3RwKQorCisvKiBQdXNoIGEgbmV3IGVsZW1lbnQgb24gdGhlIGVuZCBvZiBWQSwgZXh0ZW5kaW5nIGl0IGlmIG5lY2Vzc2FyeS4gICovCisjZGVmaW5lIFZBUlJBWV9QVVNIX0NIQVIoVkEsIFgpCQlWQVJSQVlfUFVTSCAoVkEsIHZkdF9jLCBYKQorI2RlZmluZSBWQVJSQVlfUFVTSF9VQ0hBUihWQSwgWCkJVkFSUkFZX1BVU0ggKFZBLCB2ZHRfdWMsIFgpCisjZGVmaW5lIFZBUlJBWV9QVVNIX1NIT1JUKFZBLCBYKQlWQVJSQVlfUFVTSCAoVkEsIHZkdF9zLCBYKQorI2RlZmluZSBWQVJSQVlfUFVTSF9VU0hPUlQoVkEsIFgpCVZBUlJBWV9QVVNIIChWQSwgdmR0X3VzLCBYKQorI2RlZmluZSBWQVJSQVlfUFVTSF9JTlQoVkEsIFgpCQlWQVJSQVlfUFVTSCAoVkEsIHZkdF9pLCBYKQorI2RlZmluZSBWQVJSQVlfUFVTSF9VSU5UKFZBLCBYKQkJVkFSUkFZX1BVU0ggKFZBLCB2ZHRfdSwgWCkKKyNkZWZpbmUgVkFSUkFZX1BVU0hfTE9ORyhWQSwgWCkJCVZBUlJBWV9QVVNIIChWQSwgdmR0X2wsIFgpCisjZGVmaW5lIFZBUlJBWV9QVVNIX1VMT05HKFZBLCBYKQlWQVJSQVlfUFVTSCAoVkEsIHZkdF91bCwgWCkKKyNkZWZpbmUgVkFSUkFZX1BVU0hfV0lERV9JTlQoVkEsIFgpCVZBUlJBWV9QVVNIIChWQSwgdmR0X2hpbnQsIFgpCisjZGVmaW5lIFZBUlJBWV9QVVNIX1VXSURFX0lOVChWQSwgWCkJVkFSUkFZX1BVU0ggKFZBLCB2ZHRfdWhpbnQsIFgpCisjZGVmaW5lIFZBUlJBWV9QVVNIX0dFTkVSSUNfUFRSKFZBLCBYKQlWQVJSQVlfUFVTSCAoVkEsIHZkdF9nZW5lcmljLCBYKQorI2RlZmluZSBWQVJSQVlfUFVTSF9HRU5FUklDX1BUUl9OT0dDKFZBLCBYKQlWQVJSQVlfUFVTSCAoVkEsIHZkdF9nZW5lcmljX25vZ2MsIFgpCisjZGVmaW5lIFZBUlJBWV9QVVNIX0NIQVJfUFRSKFZBLCBYKQlWQVJSQVlfUFVTSCAoVkEsIHZkdF9jcHRyLCBYKQorI2RlZmluZSBWQVJSQVlfUFVTSF9SVFgoVkEsIFgpCQlWQVJSQVlfUFVTSCAoVkEsIHZkdF9ydHgsIFgpCisjZGVmaW5lIFZBUlJBWV9QVVNIX1JUVkVDKFZBLCBYKQlWQVJSQVlfUFVTSCAoVkEsIHZkdF9ydHZlYywgWCkKKyNkZWZpbmUgVkFSUkFZX1BVU0hfVFJFRShWQSwgWCkJCVZBUlJBWV9QVVNIIChWQSwgdmR0X3RyZWUsIFgpCisjZGVmaW5lIFZBUlJBWV9QVVNIX0JJVE1BUChWQSwgWCkJVkFSUkFZX1BVU0ggKFZBLCB2ZHRfYml0bWFwLCBYKQorI2RlZmluZSBWQVJSQVlfUFVTSF9SRUcoVkEsIFgpCQlWQVJSQVlfUFVTSCAoVkEsIHZkdF9yZWcsIFgpCisjZGVmaW5lIFZBUlJBWV9QVVNIX0JCKFZBLCBYKQkJVkFSUkFZX1BVU0ggKFZBLCB2ZHRfYmIsIFgpCisjZGVmaW5lIFZBUlJBWV9QVVNIX0VER0UoVkEsIFgpCQlWQVJSQVlfUFVTSCAoVkEsIHZkdF9lLCBYKQorI2RlZmluZSBWQVJSQVlfUFVTSF9UUkVFX1BUUihWQSwgWCkJVkFSUkFZX1BVU0ggKFZBLCB2ZHRfdHAsIFgpCisKKy8qIFJldHVybiB0aGUgbGFzdCBlbGVtZW50IG9mIFZBLiAgKi8KKyNkZWZpbmUgVkFSUkFZX1RPUChWQSwgVCkgVkFSUkFZX0NIRUNLKFZBLCAoVkEpLT5lbGVtZW50c191c2VkIC0gMSwgVCkKKworI2RlZmluZSBWQVJSQVlfVE9QX0NIQVIoVkEpCQlWQVJSQVlfVE9QIChWQSwgdmR0X2MpCisjZGVmaW5lIFZBUlJBWV9UT1BfVUNIQVIoVkEpCSAgICAgICAgVkFSUkFZX1RPUCAoVkEsIHZkdF91YykKKyNkZWZpbmUgVkFSUkFZX1RPUF9TSE9SVChWQSkJICAgICAgICBWQVJSQVlfVE9QIChWQSwgdmR0X3MpCisjZGVmaW5lIFZBUlJBWV9UT1BfVVNIT1JUKFZBKQkgICAgICAgIFZBUlJBWV9UT1AgKFZBLCB2ZHRfdXMpCisjZGVmaW5lIFZBUlJBWV9UT1BfSU5UKFZBKQkJVkFSUkFZX1RPUCAoVkEsIHZkdF9pKQorI2RlZmluZSBWQVJSQVlfVE9QX1VJTlQoVkEpCQlWQVJSQVlfVE9QIChWQSwgdmR0X3UpCisjZGVmaW5lIFZBUlJBWV9UT1BfTE9ORyhWQSkJCVZBUlJBWV9UT1AgKFZBLCB2ZHRfbCkKKyNkZWZpbmUgVkFSUkFZX1RPUF9VTE9ORyhWQSkJICAgICAgICBWQVJSQVlfVE9QIChWQSwgdmR0X3VsKQorI2RlZmluZSBWQVJSQVlfVE9QX1dJREVfSU5UKFZBKQkgICAgICAgIFZBUlJBWV9UT1AgKFZBLCB2ZHRfaGludCkKKyNkZWZpbmUgVkFSUkFZX1RPUF9VV0lERV9JTlQoVkEpCVZBUlJBWV9UT1AgKFZBLCB2ZHRfdWhpbnQpCisjZGVmaW5lIFZBUlJBWV9UT1BfR0VORVJJQ19QVFIoVkEpCVZBUlJBWV9UT1AgKFZBLCB2ZHRfZ2VuZXJpYykKKyNkZWZpbmUgVkFSUkFZX1RPUF9HRU5FUklDX1BUUl9OT0dDKFZBKQlWQVJSQVlfVE9QIChWQSwgdmR0X2dlbmVyaWNfbm9nYykKKyNkZWZpbmUgVkFSUkFZX1RPUF9DSEFSX1BUUihWQSkJCVZBUlJBWV9UT1AgKFZBLCB2ZHRfY3B0cikKKyNkZWZpbmUgVkFSUkFZX1RPUF9SVFgoVkEpCQlWQVJSQVlfVE9QIChWQSwgdmR0X3J0eCkKKyNkZWZpbmUgVkFSUkFZX1RPUF9SVFZFQyhWQSkJICAgICAgICBWQVJSQVlfVE9QIChWQSwgdmR0X3J0dmVjKQorI2RlZmluZSBWQVJSQVlfVE9QX1RSRUUoVkEpCQlWQVJSQVlfVE9QIChWQSwgdmR0X3RyZWUpCisjZGVmaW5lIFZBUlJBWV9UT1BfQklUTUFQKFZBKQkgICAgICAgIFZBUlJBWV9UT1AgKFZBLCB2ZHRfYml0bWFwKQorI2RlZmluZSBWQVJSQVlfVE9QX1JFRyhWQSkJCVZBUlJBWV9UT1AgKFZBLCB2ZHRfcmVnKQorI2RlZmluZSBWQVJSQVlfVE9QX0JCKFZBKQkJVkFSUkFZX1RPUCAoVkEsIHZkdF9iYikKKyNkZWZpbmUgVkFSUkFZX1RPUF9FREdFKFZBKQkJVkFSUkFZX1RPUCAoVkEsIHZkdF9lKQorI2RlZmluZSBWQVJSQVlfVE9QX1RSRUVfUFRSKFZBKQkJVkFSUkFZX1RPUCAoVkEsIHZkdF90cCkKKworI2VuZGlmIC8qICEgR0NDX1ZBUlJBWV9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdmVjLmggYi9saWIvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvcGx1Z2luL2luY2x1ZGUvdmVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNiOWM1OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS92ZWMuaApAQCAtMCwwICsxLDEyODIgQEAKKy8qIFZlY3RvciBBUEkgZm9yIEdOVSBjb21waWxlci4KKyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBOYXRoYW4gU2lkd2VsbCA8bmF0aGFuQGNvZGVzb3VyY2VyeS5jb20+CisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19WRUNfSAorI2RlZmluZSBHQ0NfVkVDX0gKKworLyogVGhlIG1hY3JvcyBoZXJlIGltcGxlbWVudCBhIHNldCBvZiB0ZW1wbGF0ZWQgdmVjdG9yIHR5cGVzIGFuZAorICAgYXNzb2NpYXRlZCBpbnRlcmZhY2VzLiAgVGhlc2UgdGVtcGxhdGVzIGFyZSBpbXBsZW1lbnRlZCB3aXRoCisgICBtYWNyb3MsIGFzIHdlJ3JlIG5vdCBpbiBDKysgbGFuZC4gIFRoZSBpbnRlcmZhY2UgZnVuY3Rpb25zIGFyZQorICAgdHlwZXNhZmUgYW5kIHVzZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucywgc29tZXRpbWVzIGJhY2tlZCBieQorICAgb3V0LW9mLWxpbmUgZ2VuZXJpYyBmdW5jdGlvbnMuICBUaGUgdmVjdG9ycyBhcmUgZGVzaWduZWQgdG8KKyAgIGludGVyb3BlcmF0ZSB3aXRoIHRoZSBHVFkgbWFjaGluZXJ5LgorCisgICBCZWNhdXNlIG9mIHRoZSBkaWZmZXJlbnQgYmVoYXZpb3Igb2Ygc3RydWN0dXJlIG9iamVjdHMsIHNjYWxhcgorICAgb2JqZWN0cyBhbmQgb2YgcG9pbnRlcnMsIHRoZXJlIGFyZSB0aHJlZSBmbGF2b3JzLCBvbmUgZm9yIGVhY2ggb2YKKyAgIHRoZXNlIHZhcmlhbnRzLiAgQm90aCB0aGUgc3RydWN0dXJlIG9iamVjdCBhbmQgcG9pbnRlciB2YXJpYW50cworICAgcGFzcyBwb2ludGVycyB0byBvYmplY3RzIGFyb3VuZCAtLSBpbiB0aGUgZm9ybWVyIGNhc2UgdGhlIHBvaW50ZXJzCisgICBhcmUgc3RvcmVkIGludG8gdGhlIHZlY3RvciBhbmQgaW4gdGhlIGxhdHRlciBjYXNlIHRoZSBwb2ludGVycyBhcmUKKyAgIGRlcmVmZXJlbmNlZCBhbmQgdGhlIG9iamVjdHMgY29waWVkIGludG8gdGhlIHZlY3Rvci4gIFRoZSBzY2FsYXIKKyAgIG9iamVjdCB2YXJpYW50IGlzIHN1aXRhYmxlIGZvciBpbnQtbGlrZSBvYmplY3RzLCBhbmQgdGhlIHZlY3RvcgorICAgZWxlbWVudHMgYXJlIHJldHVybmVkIGJ5IHZhbHVlLgorCisgICBUaGVyZSBhcmUgYm90aCAnaW5kZXgnIGFuZCAnaXRlcmF0ZScgYWNjZXNzb3JzLiAgVGhlIGl0ZXJhdG9yCisgICByZXR1cm5zIGEgYm9vbGVhbiBpdGVyYXRpb24gY29uZGl0aW9uIGFuZCB1cGRhdGVzIHRoZSBpdGVyYXRpb24KKyAgIHZhcmlhYmxlIHBhc3NlZCBieSByZWZlcmVuY2UuICBCZWNhdXNlIHRoZSBpdGVyYXRvciB3aWxsIGJlCisgICBpbmxpbmVkLCB0aGUgYWRkcmVzcy1vZiBjYW4gYmUgb3B0aW1pemVkIGF3YXkuCisKKyAgIFRoZSB2ZWN0b3JzIGFyZSBpbXBsZW1lbnRlZCB1c2luZyB0aGUgdHJhaWxpbmcgYXJyYXkgaWRpb20sIHRodXMKKyAgIHRoZXkgYXJlIG5vdCByZXNpemVhYmxlIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHZlY3RvcgorICAgb2JqZWN0IGl0c2VsZi4gIFRoaXMgbWVhbnMgeW91IGNhbm5vdCBoYXZlIHZhcmlhYmxlcyBvciBmaWVsZHMgb2YKKyAgIHZlY3RvciB0eXBlIC0tIGFsd2F5cyB1c2UgYSBwb2ludGVyIHRvIGEgdmVjdG9yLiAgVGhlIG9uZSBleGNlcHRpb24KKyAgIGlzIHRoZSBmaW5hbCBmaWVsZCBvZiBhIHN0cnVjdHVyZSwgd2hpY2ggY291bGQgYmUgYSB2ZWN0b3IgdHlwZS4KKyAgIFlvdSB3aWxsIGhhdmUgdG8gdXNlIHRoZSBlbWJlZGRlZF9zaXplICYgZW1iZWRkZWRfaW5pdCBjYWxscyB0bworICAgY3JlYXRlIHN1Y2ggb2JqZWN0cywgYW5kIHRoZXkgd2lsbCBwcm9iYWJseSBub3QgYmUgcmVzaXplYWJsZSAoc28KKyAgIGRvbid0IHVzZSB0aGUgJ3NhZmUnIGFsbG9jYXRpb24gdmFyaWFudHMpLiAgVGhlIHRyYWlsaW5nIGFycmF5CisgICBpZGlvbSBpcyB1c2VkIChyYXRoZXIgdGhhbiBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgZGF0YSksIGJlY2F1c2UsCisgICBpZiB3ZSBhbGxvdyBOVUxMIHRvIGFsc28gcmVwcmVzZW50IGFuIGVtcHR5IHZlY3RvciwgZW1wdHkgdmVjdG9ycworICAgb2NjdXB5IG1pbmltYWwgc3BhY2UgaW4gdGhlIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZW0uCisKKyAgIEVhY2ggb3BlcmF0aW9uIHRoYXQgaW5jcmVhc2VzIHRoZSBudW1iZXIgb2YgYWN0aXZlIGVsZW1lbnRzIGlzCisgICBhdmFpbGFibGUgaW4gJ3F1aWNrJyBhbmQgJ3NhZmUnIHZhcmlhbnRzLiAgVGhlIGZvcm1lciBwcmVzdW1lcyB0aGF0CisgICB0aGVyZSBpcyBzdWZmaWNpZW50IGFsbG9jYXRlZCBzcGFjZSBmb3IgdGhlIG9wZXJhdGlvbiB0byBzdWNjZWVkCisgICAoaXQgZGllcyBpZiB0aGVyZSBpcyBub3QpLiAgVGhlIGxhdHRlciB3aWxsIHJlYWxsb2NhdGUgdGhlCisgICB2ZWN0b3IsIGlmIG5lZWRlZC4gIFJlYWxsb2NhdGlvbiBjYXVzZXMgYW4gZXhwb25lbnRpYWwgaW5jcmVhc2UgaW4KKyAgIHZlY3RvciBzaXplLiAgSWYgeW91IGtub3cgeW91IHdpbGwgYmUgYWRkaW5nIE4gZWxlbWVudHMsIGl0IHdvdWxkCisgICBiZSBtb3JlIGVmZmljaWVudCB0byB1c2UgdGhlIHJlc2VydmUgb3BlcmF0aW9uIGJlZm9yZSBhZGRpbmcgdGhlCisgICBlbGVtZW50cyB3aXRoIHRoZSAncXVpY2snIG9wZXJhdGlvbi4gIFRoaXMgd2lsbCBlbnN1cmUgdGhlcmUgYXJlIGF0CisgICBsZWFzdCBhcyBtYW55IGVsZW1lbnRzIGFzIHlvdSBhc2sgZm9yLCBpdCB3aWxsIGV4cG9uZW50aWFsbHkKKyAgIGluY3JlYXNlIGlmIHRoZXJlIGFyZSB0b28gZmV3IHNwYXJlIHNsb3RzLiAgSWYgeW91IHdhbnQgcmVzZXJ2ZSBhCisgICBzcGVjaWZpYyBudW1iZXIgb2Ygc2xvdHMsIGJ1dCBkbyBub3Qgd2FudCB0aGUgZXhwb25lbnRpYWwgaW5jcmVhc2UKKyAgIChmb3IgaW5zdGFuY2UsIHlvdSBrbm93IHRoaXMgaXMgdGhlIGxhc3QgYWxsb2NhdGlvbiksIHVzZSB0aGUKKyAgIHJlc2VydmVfZXhhY3Qgb3BlcmF0aW9uLiAgWW91IGNhbiBhbHNvIGNyZWF0ZSBhIHZlY3RvciBvZiBhCisgICBzcGVjaWZpYyBzaXplIGZyb20gdGhlIGdldCBnby4KKworICAgWW91IHNob3VsZCBwcmVmZXIgdGhlIHB1c2ggYW5kIHBvcCBvcGVyYXRpb25zLCBhcyB0aGV5IGFwcGVuZCBhbmQKKyAgIHJlbW92ZSBmcm9tIHRoZSBlbmQgb2YgdGhlIHZlY3Rvci4gSWYgeW91IG5lZWQgdG8gcmVtb3ZlIHNldmVyYWwKKyAgIGl0ZW1zIGluIG9uZSBnbywgdXNlIHRoZSB0cnVuY2F0ZSBvcGVyYXRpb24uICBUaGUgaW5zZXJ0IGFuZCByZW1vdmUKKyAgIG9wZXJhdGlvbnMgYWxsb3cgeW91IHRvIGNoYW5nZSBlbGVtZW50cyBpbiB0aGUgbWlkZGxlIG9mIHRoZQorICAgdmVjdG9yLiAgVGhlcmUgYXJlIHR3byByZW1vdmUgb3BlcmF0aW9ucywgb25lIHdoaWNoIHByZXNlcnZlcyB0aGUKKyAgIGVsZW1lbnQgb3JkZXJpbmcgJ29yZGVyZWRfcmVtb3ZlJywgYW5kIG9uZSB3aGljaCBkb2VzIG5vdAorICAgJ3Vub3JkZXJlZF9yZW1vdmUnLiAgVGhlIGxhdHRlciBmdW5jdGlvbiBjb3BpZXMgdGhlIGVuZCBlbGVtZW50CisgICBpbnRvIHRoZSByZW1vdmVkIHNsb3QsIHJhdGhlciB0aGFuIGludm9rZSBhIG1lbW1vdmUgb3BlcmF0aW9uLiAgVGhlCisgICAnbG93ZXJfYm91bmQnIGZ1bmN0aW9uIHdpbGwgZGV0ZXJtaW5lIHdoZXJlIHRvIHBsYWNlIGFuIGl0ZW0gaW4gdGhlCisgICBhcnJheSB1c2luZyBpbnNlcnQgdGhhdCB3aWxsIG1haW50YWluIHNvcnRlZCBvcmRlci4KKworICAgV2hlbiBhIHZlY3RvciB0eXBlIGlzIGRlZmluZWQsIGZpcnN0IGEgbm9uLW1lbW9yeSBtYW5hZ2VkIHZlcnNpb24KKyAgIGlzIGNyZWF0ZWQuICBZb3UgY2FuIHRoZW4gZGVmaW5lIGVpdGhlciBvciBib3RoIGdhcmJhZ2UgY29sbGVjdGVkCisgICBhbmQgaGVhcCBhbGxvY2F0ZWQgdmVyc2lvbnMuICBUaGUgYWxsb2NhdGlvbiBtZWNoYW5pc20gaXMgc3BlY2lmaWVkCisgICB3aGVuIHRoZSB0eXBlIGlzIGRlZmluZWQsIGFuZCBpcyB0aGVyZWZvcmUgcGFydCBvZiB0aGUgdHlwZS4gIElmCisgICB5b3UgbmVlZCBib3RoIGdjJ2QgYW5kIGhlYXAgYWxsb2NhdGVkIHZlcnNpb25zLCB5b3Ugc3RpbGwgbXVzdCBoYXZlCisgICAqZXhhY3RseSogb25lIGRlZmluaXRpb24gb2YgdGhlIGNvbW1vbiBub24tbWVtb3J5IG1hbmFnZWQgYmFzZSB2ZWN0b3IuCisKKyAgIElmIHlvdSBuZWVkIHRvIGRpcmVjdGx5IG1hbmlwdWxhdGUgYSB2ZWN0b3IsIHRoZW4gdGhlICdhZGRyZXNzJworICAgYWNjZXNzb3Igd2lsbCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIHN0YXJ0IG9mIHRoZSB2ZWN0b3IuICBBbHNvCisgICB0aGUgJ3NwYWNlJyBwcmVkaWNhdGUgd2lsbCB0ZWxsIHlvdSB3aGV0aGVyIHRoZXJlIGlzIHNwYXJlIGNhcGFjaXR5CisgICBpbiB0aGUgdmVjdG9yLiAgWW91IHdpbGwgbm90IG5vcm1hbGx5IG5lZWQgdG8gdXNlIHRoZXNlIHR3byBmdW5jdGlvbnMuCisKKyAgIFZlY3RvciB0eXBlcyBhcmUgZGVmaW5lZCB1c2luZyBhIERFRl9WRUNfe08sUCxJfShUWVBFREVGKSBtYWNybywgdG8KKyAgIGdldCB0aGUgbm9uLW1lbW9yeSBhbGxvY2F0aW9uIHZlcnNpb24sIGFuZCB0aGVuIGEKKyAgIERFRl9WRUNfQUxMT0Nfe08sUCxJfShUWVBFREVGLEFMTE9DKSBtYWNybyB0byBnZXQgbWVtb3J5IG1hbmFnZWQKKyAgIHZlY3RvcnMuICBWYXJpYWJsZXMgb2YgdmVjdG9yIHR5cGUgYXJlIGRlY2xhcmVkIHVzaW5nIGEKKyAgIFZFQyhUWVBFREVGLEFMTE9DKSBtYWNyby4gIFRoZSBBTExPQyBhcmd1bWVudCBzcGVjaWZpZXMgdGhlCisgICBhbGxvY2F0aW9uIHN0cmF0ZWd5LCBhbmQgY2FuIGJlIGVpdGhlciAnZ2MnIG9yICdoZWFwJyBmb3IgZ2FyYmFnZQorICAgY29sbGVjdGVkIGFuZCBoZWFwIGFsbG9jYXRlZCByZXNwZWN0aXZlbHkuICBJdCBjYW4gYmUgJ25vbmUnIHRvIGdldAorICAgYSB2ZWN0b3IgdGhhdCBtdXN0IGJlIGV4cGxpY2l0bHkgYWxsb2NhdGVkIChmb3IgaW5zdGFuY2UgYXMgYQorICAgdHJhaWxpbmcgYXJyYXkgb2YgYW5vdGhlciBzdHJ1Y3R1cmUpLiAgVGhlIGNoYXJhY3RlcnMgTywgUCBhbmQgSQorICAgaW5kaWNhdGUgd2hldGhlciBUWVBFREVGIGlzIGEgcG9pbnRlciAoUCksIG9iamVjdCAoTykgb3IgaW50ZWdyYWwKKyAgIChJKSB0eXBlLiAgQmUgY2FyZWZ1bCB0byBwaWNrIHRoZSBjb3JyZWN0IG9uZSwgYXMgeW91J2xsIGdldCBhbgorICAgYXdrd2FyZCBhbmQgaW5lZmZpY2llbnQgQVBJIGlmIHlvdSB1c2UgdGhlIHdyb25nIG9uZS4gIFRoZXJlIGlzIGEKKyAgIGNoZWNrLCB3aGljaCByZXN1bHRzIGluIGEgY29tcGlsZS10aW1lIHdhcm5pbmcsIGZvciB0aGUgUCBhbmQgSQorICAgdmVyc2lvbnMsIGJ1dCB0aGVyZSBpcyBubyBjaGVjayBmb3IgdGhlIE8gdmVyc2lvbnMsIGFzIHRoYXQgaXMgbm90CisgICBwb3NzaWJsZSBpbiBwbGFpbiBDLiAgRHVlIHRvIHRoZSB3YXkgR1RZIHdvcmtzLCB5b3UgbXVzdCBhbm5vdGF0ZQorICAgYW55IHN0cnVjdHVyZXMgeW91IHdpc2ggdG8gaW5zZXJ0IG9yIHJlZmVyZW5jZSBmcm9tIGEgdmVjdG9yIHdpdGggYQorICAgR1RZKCgpKSB0YWcuICBZb3UgbmVlZCB0byBkbyB0aGlzIGV2ZW4gaWYgeW91IG5ldmVyIGRlY2xhcmUgdGhlIEdDCisgICBhbGxvY2F0ZWQgdmFyaWFudHMuCisKKyAgIEFuIGV4YW1wbGUgb2YgdGhlaXIgdXNlIHdvdWxkIGJlLAorCisgICBERUZfVkVDX1AodHJlZSk7ICAgLy8gbm9uLW1hbmFnZWQgdHJlZSB2ZWN0b3IuCisgICBERUZfVkVDX0FMTE9DX1AodHJlZSxnYyk7CS8vIGdjJ2QgdmVjdG9yIG9mIHRyZWUgcG9pbnRlcnMuICBUaGlzIG11c3QKKyAgIAkJCSAgICAgICAgLy8gYXBwZWFyIGF0IGZpbGUgc2NvcGUuCisKKyAgIHN0cnVjdCBteV9zdHJ1Y3QgeworICAgICBWRUModHJlZSxnYykgKnY7ICAgICAgLy8gQSAocG9pbnRlciB0bykgYSB2ZWN0b3Igb2YgdHJlZSBwb2ludGVycy4KKyAgIH07CisKKyAgIHN0cnVjdCBteV9zdHJ1Y3QgKnM7CisKKyAgIGlmIChWRUNfbGVuZ3RoKHRyZWUscy0+dikpIHsgd2UgaGF2ZSBzb21lIGNvbnRlbnRzIH0KKyAgIFZFQ19zYWZlX3B1c2godHJlZSxnYyxzLT52LGRlY2wpOyAvLyBhcHBlbmQgc29tZSBkZWNsIG9udG8gdGhlIGVuZAorICAgZm9yIChpeCA9IDA7IFZFQ19pdGVyYXRlKHRyZWUscy0+dixpeCxlbHQpOyBpeCsrKQorICAgICB7IGRvIHNvbWV0aGluZyB3aXRoIGVsdCB9CisKKyovCisKKy8qIE1hY3JvcyB0byBpbnZva2UgQVBJIGNhbGxzLiAgQSBzaW5nbGUgbWFjcm8gd29ya3MgZm9yIGJvdGggcG9pbnRlcgorICAgYW5kIG9iamVjdCB2ZWN0b3JzLCBidXQgdGhlIGFyZ3VtZW50IGFuZCByZXR1cm4gdHlwZXMgbWlnaHQgd2VsbCBiZQorICAgZGlmZmVyZW50LiAgSW4gZWFjaCBtYWNybywgVCBpcyB0aGUgdHlwZWRlZiBvZiB0aGUgdmVjdG9yIGVsZW1lbnRzLAorICAgYW5kIEEgaXMgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kuICBUaGUgYWxsb2NhdGlvbiBzdHJhdGVneSBpcyBvbmx5CisgICBwcmVzZW50IHdoZW4gaXQgaXMgcmVxdWlyZWQuICBTb21lIG9mIHRoZXNlIG1hY3JvcyBwYXNzIHRoZSB2ZWN0b3IsCisgICBWLCBieSByZWZlcmVuY2UgKGJ5IHRha2luZyBpdHMgYWRkcmVzcyksIHRoaXMgaXMgbm90ZWQgaW4gdGhlCisgICBkZXNjcmlwdGlvbnMuICAqLworCisvKiBMZW5ndGggb2YgdmVjdG9yCisgICB1bnNpZ25lZCBWRUNfVF9sZW5ndGgoY29uc3QgVkVDKFQpICp2KTsKKworICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYWN0aXZlIGVsZW1lbnRzIGluIFYuICBWIGNhbiBiZSBOVUxMLCBpbiB3aGljaAorICAgY2FzZSB6ZXJvIGlzIHJldHVybmVkLiAgKi8KKworI2RlZmluZSBWRUNfbGVuZ3RoKFQsVikJKFZFQ19PUChULGJhc2UsbGVuZ3RoKShWRUNfQkFTRShWKSkpCisKKworLyogQ2hlY2sgaWYgdmVjdG9yIGlzIGVtcHR5CisgICBpbnQgVkVDX1RfZW1wdHkoY29uc3QgVkVDKFQpICp2KTsKKworICAgUmV0dXJuIG5vbnplcm8gaWYgViBpcyBhbiBlbXB0eSB2ZWN0b3IgKG9yIFYgaXMgTlVMTCksIHplcm8gb3RoZXJ3aXNlLiAgKi8KKworI2RlZmluZSBWRUNfZW1wdHkoVCxWKQkoVkVDX2xlbmd0aCAoVCxWKSA9PSAwKQorCisKKy8qIEdldCB0aGUgZmluYWwgZWxlbWVudCBvZiB0aGUgdmVjdG9yLgorICAgVCBWRUNfVF9sYXN0KFZFQyhUKSAqdik7IC8vIEludGVnZXIKKyAgIFQgVkVDX1RfbGFzdChWRUMoVCkgKnYpOyAvLyBQb2ludGVyCisgICBUICpWRUNfVF9sYXN0KFZFQyhUKSAqdik7IC8vIE9iamVjdAorCisgICBSZXR1cm4gdGhlIGZpbmFsIGVsZW1lbnQuICBWIG11c3Qgbm90IGJlIGVtcHR5LiAgKi8KKworI2RlZmluZSBWRUNfbGFzdChULFYpCShWRUNfT1AoVCxiYXNlLGxhc3QpKFZFQ19CQVNFKFYpIFZFQ19DSEVDS19JTkZPKSkKKworLyogSW5kZXggaW50byB2ZWN0b3IKKyAgIFQgVkVDX1RfaW5kZXgoVkVDKFQpICp2LCB1bnNpZ25lZCBpeCk7IC8vIEludGVnZXIKKyAgIFQgVkVDX1RfaW5kZXgoVkVDKFQpICp2LCB1bnNpZ25lZCBpeCk7IC8vIFBvaW50ZXIKKyAgIFQgKlZFQ19UX2luZGV4KFZFQyhUKSAqdiwgdW5zaWduZWQgaXgpOyAvLyBPYmplY3QKKworICAgUmV0dXJuIHRoZSBJWCd0aCBlbGVtZW50LiAgSWYgSVggbXVzdCBiZSBpbiB0aGUgZG9tYWluIG9mIFYuICAqLworCisjZGVmaW5lIFZFQ19pbmRleChULFYsSSkgKFZFQ19PUChULGJhc2UsaW5kZXgpKFZFQ19CQVNFKFYpLEkgVkVDX0NIRUNLX0lORk8pKQorCisvKiBJdGVyYXRlIG92ZXIgdmVjdG9yCisgICBpbnQgVkVDX1RfaXRlcmF0ZShWRUMoVCkgKnYsIHVuc2lnbmVkIGl4LCBUICZwdHIpOyAvLyBJbnRlZ2VyCisgICBpbnQgVkVDX1RfaXRlcmF0ZShWRUMoVCkgKnYsIHVuc2lnbmVkIGl4LCBUICZwdHIpOyAvLyBQb2ludGVyCisgICBpbnQgVkVDX1RfaXRlcmF0ZShWRUMoVCkgKnYsIHVuc2lnbmVkIGl4LCBUIComcHRyKTsgLy8gT2JqZWN0CisKKyAgIFJldHVybiBpdGVyYXRpb24gY29uZGl0aW9uIGFuZCB1cGRhdGUgUFRSIHRvIHBvaW50IHRvIHRoZSBJWCd0aAorICAgZWxlbWVudC4gIEF0IHRoZSBlbmQgb2YgaXRlcmF0aW9uLCBzZXRzIFBUUiB0byBOVUxMLiAgVXNlIHRoaXMgdG8KKyAgIGl0ZXJhdGUgb3ZlciB0aGUgZWxlbWVudHMgb2YgYSB2ZWN0b3IgYXMgZm9sbG93cywKKworICAgICBmb3IgKGl4ID0gMDsgVkVDX2l0ZXJhdGUoVCx2LGl4LHB0cik7IGl4KyspCisgICAgICAgY29udGludWU7ICAqLworCisjZGVmaW5lIFZFQ19pdGVyYXRlKFQsVixJLFApCShWRUNfT1AoVCxiYXNlLGl0ZXJhdGUpKFZFQ19CQVNFKFYpLEksJihQKSkpCisKKy8qIEFsbG9jYXRlIG5ldyB2ZWN0b3IuCisgICBWRUMoVCxBKSAqVkVDX1RfQV9hbGxvYyhpbnQgcmVzZXJ2ZSk7CisKKyAgIEFsbG9jYXRlIGEgbmV3IHZlY3RvciB3aXRoIHNwYWNlIGZvciBSRVNFUlZFIG9iamVjdHMuICBJZiBSRVNFUlZFCisgICBpcyB6ZXJvLCBOTyB2ZWN0b3IgaXMgY3JlYXRlZC4gICovCisKKyNkZWZpbmUgVkVDX2FsbG9jKFQsQSxOKQkoVkVDX09QKFQsQSxhbGxvYykoTiBNRU1fU1RBVF9JTkZPKSkKKworLyogRnJlZSBhIHZlY3Rvci4KKyAgIHZvaWQgVkVDX1RfQV9mcmVlKFZFQyhULEEpIComKTsKKworICAgRnJlZSBhIHZlY3RvciBhbmQgc2V0IGl0IHRvIE5VTEwuICAqLworCisjZGVmaW5lIFZFQ19mcmVlKFQsQSxWKQkoVkVDX09QKFQsQSxmcmVlKSgmVikpCisKKy8qIFVzZSB0aGVzZSB0byBkZXRlcm1pbmUgdGhlIHJlcXVpcmVkIHNpemUgYW5kIGluaXRpYWxpemF0aW9uIG9mIGEKKyAgIHZlY3RvciBlbWJlZGRlZCB3aXRoaW4gYW5vdGhlciBzdHJ1Y3R1cmUgKGFzIHRoZSBmaW5hbCBtZW1iZXIpLgorCisgICBzaXplX3QgVkVDX1RfZW1iZWRkZWRfc2l6ZShpbnQgcmVzZXJ2ZSk7CisgICB2b2lkIFZFQ19UX2VtYmVkZGVkX2luaXQoVkVDKFQpICp2LCBpbnQgcmVzZXJ2ZSk7CisKKyAgIFRoZXNlIGFsbG93IHRoZSBjYWxsZXIgdG8gcGVyZm9ybSB0aGUgbWVtb3J5IGFsbG9jYXRpb24uICAqLworCisjZGVmaW5lIFZFQ19lbWJlZGRlZF9zaXplKFQsTikJIChWRUNfT1AoVCxiYXNlLGVtYmVkZGVkX3NpemUpKE4pKQorI2RlZmluZSBWRUNfZW1iZWRkZWRfaW5pdChULE8sTikgKFZFQ19PUChULGJhc2UsZW1iZWRkZWRfaW5pdCkoVkVDX0JBU0UoTyksTikpCisKKy8qIENvcHkgYSB2ZWN0b3IuCisgICBWRUMoVCxBKSAqVkVDX1RfQV9jb3B5KFZFQyhUKSAqKTsKKworICAgQ29weSB0aGUgbGl2ZSBlbGVtZW50cyBvZiBhIHZlY3RvciBpbnRvIGEgbmV3IHZlY3Rvci4gIFRoZSBuZXcgYW5kCisgICBvbGQgdmVjdG9ycyBuZWVkIG5vdCBiZSBhbGxvY2F0ZWQgYnkgdGhlIHNhbWUgbWVjaGFuaXNtLiAgKi8KKworI2RlZmluZSBWRUNfY29weShULEEsVikgKFZFQ19PUChULEEsY29weSkoVkVDX0JBU0UoVikgTUVNX1NUQVRfSU5GTykpCisKKy8qIERldGVybWluZSBpZiBhIHZlY3RvciBoYXMgYWRkaXRpb25hbCBjYXBhY2l0eS4KKworICAgaW50IFZFQ19UX3NwYWNlIChWRUMoVCkgKnYsaW50IHJlc2VydmUpCisKKyAgIElmIFYgaGFzIHNwYWNlIGZvciBSRVNFUlZFIGFkZGl0aW9uYWwgZW50cmllcywgcmV0dXJuIG5vbnplcm8uICBZb3UKKyAgIHVzdWFsbHkgb25seSBuZWVkIHRvIHVzZSB0aGlzIGlmIHlvdSBhcmUgZG9pbmcgeW91ciBvd24gdmVjdG9yCisgICByZWFsbG9jYXRpb24sIGZvciBpbnN0YW5jZSBvbiBhbiBlbWJlZGRlZCB2ZWN0b3IuICBUaGlzIHJldHVybnMKKyAgIG5vbnplcm8gaW4gZXhhY3RseSB0aGUgc2FtZSBjaXJjdW1zdGFuY2VzIHRoYXQgVkVDX1RfcmVzZXJ2ZQorICAgd2lsbC4gICovCisKKyNkZWZpbmUgVkVDX3NwYWNlKFQsVixSKSBcCisJKFZFQ19PUChULGJhc2Usc3BhY2UpKFZFQ19CQVNFKFYpLFIgVkVDX0NIRUNLX0lORk8pKQorCisvKiBSZXNlcnZlIHNwYWNlLgorICAgaW50IFZFQ19UX0FfcmVzZXJ2ZShWRUMoVCxBKSAqJnYsIGludCByZXNlcnZlKTsKKworICAgRW5zdXJlIHRoYXQgViBoYXMgYXQgbGVhc3QgUkVTRVJWRSBzbG90cyBhdmFpbGFibGUuICBUaGlzIHdpbGwKKyAgIGNyZWF0ZSBhZGRpdGlvbmFsIGhlYWRyb29tLiAgTm90ZSB0aGlzIGNhbiBjYXVzZSBWIHRvIGJlCisgICByZWFsbG9jYXRlZC4gIFJldHVybnMgbm9uemVybyBpZmYgcmVhbGxvY2F0aW9uIGFjdHVhbGx5CisgICBvY2N1cnJlZC4gICovCisKKyNkZWZpbmUgVkVDX3Jlc2VydmUoVCxBLFYsUikJXAorCShWRUNfT1AoVCxBLHJlc2VydmUpKCYoViksUiBWRUNfQ0hFQ0tfSU5GTyBNRU1fU1RBVF9JTkZPKSkKKworLyogUmVzZXJ2ZSBzcGFjZSBleGFjdGx5LgorICAgaW50IFZFQ19UX0FfcmVzZXJ2ZV9leGFjdChWRUMoVCxBKSAqJnYsIGludCByZXNlcnZlKTsKKworICAgRW5zdXJlIHRoYXQgViBoYXMgYXQgbGVhc3QgUkVTRVJWRSBzbG90cyBhdmFpbGFibGUuICBUaGlzIHdpbGwgbm90CisgICBjcmVhdGUgYWRkaXRpb25hbCBoZWFkcm9vbS4gIE5vdGUgdGhpcyBjYW4gY2F1c2UgViB0byBiZQorICAgcmVhbGxvY2F0ZWQuICBSZXR1cm5zIG5vbnplcm8gaWZmIHJlYWxsb2NhdGlvbiBhY3R1YWxseQorICAgb2NjdXJyZWQuICAqLworCisjZGVmaW5lIFZFQ19yZXNlcnZlX2V4YWN0KFQsQSxWLFIpCVwKKwkoVkVDX09QKFQsQSxyZXNlcnZlX2V4YWN0KSgmKFYpLFIgVkVDX0NIRUNLX0lORk8gTUVNX1NUQVRfSU5GTykpCisKKy8qIFB1c2ggb2JqZWN0IHdpdGggbm8gcmVhbGxvY2F0aW9uCisgICBUICpWRUNfVF9xdWlja19wdXNoIChWRUMoVCkgKnYsIFQgb2JqKTsgLy8gSW50ZWdlcgorICAgVCAqVkVDX1RfcXVpY2tfcHVzaCAoVkVDKFQpICp2LCBUIG9iaik7IC8vIFBvaW50ZXIKKyAgIFQgKlZFQ19UX3F1aWNrX3B1c2ggKFZFQyhUKSAqdiwgVCAqb2JqKTsgLy8gT2JqZWN0CisKKyAgIFB1c2ggYSBuZXcgZWxlbWVudCBvbnRvIHRoZSBlbmQsIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBzbG90CisgICBmaWxsZWQgaW4uIEZvciBvYmplY3QgdmVjdG9ycywgdGhlIG5ldyB2YWx1ZSBjYW4gYmUgTlVMTCwgaW4gd2hpY2gKKyAgIGNhc2UgTk8gaW5pdGlhbGl6YXRpb24gaXMgcGVyZm9ybWVkLiAgVGhlcmUgbXVzdAorICAgYmUgc3VmZmljaWVudCBzcGFjZSBpbiB0aGUgdmVjdG9yLiAgKi8KKworI2RlZmluZSBWRUNfcXVpY2tfcHVzaChULFYsTykJXAorCShWRUNfT1AoVCxiYXNlLHF1aWNrX3B1c2gpKFZFQ19CQVNFKFYpLE8gVkVDX0NIRUNLX0lORk8pKQorCisvKiBQdXNoIG9iamVjdCB3aXRoIHJlYWxsb2NhdGlvbgorICAgVCAqVkVDX1RfQV9zYWZlX3B1c2ggKFZFQyhULEEpIComdiwgVCBvYmopOyAvLyBJbnRlZ2VyCisgICBUICpWRUNfVF9BX3NhZmVfcHVzaCAoVkVDKFQsQSkgKiZ2LCBUIG9iaik7IC8vIFBvaW50ZXIKKyAgIFQgKlZFQ19UX0Ffc2FmZV9wdXNoIChWRUMoVCxBKSAqJnYsIFQgKm9iaik7IC8vIE9iamVjdAorCisgICBQdXNoIGEgbmV3IGVsZW1lbnQgb250byB0aGUgZW5kLCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgc2xvdAorICAgZmlsbGVkIGluLiBGb3Igb2JqZWN0IHZlY3RvcnMsIHRoZSBuZXcgdmFsdWUgY2FuIGJlIE5VTEwsIGluIHdoaWNoCisgICBjYXNlIE5PIGluaXRpYWxpemF0aW9uIGlzIHBlcmZvcm1lZC4gIFJlYWxsb2NhdGVzIFYsIGlmIG5lZWRlZC4gICovCisKKyNkZWZpbmUgVkVDX3NhZmVfcHVzaChULEEsVixPKQkJXAorCShWRUNfT1AoVCxBLHNhZmVfcHVzaCkoJihWKSxPIFZFQ19DSEVDS19JTkZPIE1FTV9TVEFUX0lORk8pKQorCisvKiBQb3AgZWxlbWVudCBvZmYgZW5kCisgICBUIFZFQ19UX3BvcCAoVkVDKFQpICp2KTsJCS8vIEludGVnZXIKKyAgIFQgVkVDX1RfcG9wIChWRUMoVCkgKnYpOwkJLy8gUG9pbnRlcgorICAgdm9pZCBWRUNfVF9wb3AgKFZFQyhUKSAqdik7CQkvLyBPYmplY3QKKworICAgUG9wIHRoZSBsYXN0IGVsZW1lbnQgb2ZmIHRoZSBlbmQuIFJldHVybnMgdGhlIGVsZW1lbnQgcG9wcGVkLCBmb3IKKyAgIHBvaW50ZXIgdmVjdG9ycy4gICovCisKKyNkZWZpbmUgVkVDX3BvcChULFYpCShWRUNfT1AoVCxiYXNlLHBvcCkoVkVDX0JBU0UoVikgVkVDX0NIRUNLX0lORk8pKQorCisvKiBUcnVuY2F0ZSB0byBzcGVjaWZpYyBsZW5ndGgKKyAgIHZvaWQgVkVDX1RfdHJ1bmNhdGUgKFZFQyhUKSAqdiwgdW5zaWduZWQgbGVuKTsKKworICAgU2V0IHRoZSBsZW5ndGggYXMgc3BlY2lmaWVkLiAgVGhlIG5ldyBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IKKyAgIGVxdWFsIHRvIHRoZSBjdXJyZW50IGxlbmd0aC4gIFRoaXMgaXMgYW4gTygxKSBvcGVyYXRpb24uICAqLworCisjZGVmaW5lIFZFQ190cnVuY2F0ZShULFYsSSkJCVwKKwkoVkVDX09QKFQsYmFzZSx0cnVuY2F0ZSkoVkVDX0JBU0UoViksSSBWRUNfQ0hFQ0tfSU5GTykpCisKKy8qIEdyb3cgdG8gYSBzcGVjaWZpYyBsZW5ndGguCisgICB2b2lkIFZFQ19UX0Ffc2FmZV9ncm93IChWRUMoVCxBKSAqJnYsIGludCBsZW4pOworCisgICBHcm93IHRoZSB2ZWN0b3IgdG8gYSBzcGVjaWZpYyBsZW5ndGguICBUaGUgTEVOIG11c3QgYmUgYXMKKyAgIGxvbmcgb3IgbG9uZ2VyIHRoYW4gdGhlIGN1cnJlbnQgbGVuZ3RoLiAgVGhlIG5ldyBlbGVtZW50cyBhcmUKKyAgIHVuaW5pdGlhbGl6ZWQuICAqLworCisjZGVmaW5lIFZFQ19zYWZlX2dyb3coVCxBLFYsSSkJCVwKKwkoVkVDX09QKFQsQSxzYWZlX2dyb3cpKCYoViksSSBWRUNfQ0hFQ0tfSU5GTyBNRU1fU1RBVF9JTkZPKSkKKworLyogR3JvdyB0byBhIHNwZWNpZmljIGxlbmd0aC4KKyAgIHZvaWQgVkVDX1RfQV9zYWZlX2dyb3dfY2xlYXJlZCAoVkVDKFQsQSkgKiZ2LCBpbnQgbGVuKTsKKworICAgR3JvdyB0aGUgdmVjdG9yIHRvIGEgc3BlY2lmaWMgbGVuZ3RoLiAgVGhlIExFTiBtdXN0IGJlIGFzCisgICBsb25nIG9yIGxvbmdlciB0aGFuIHRoZSBjdXJyZW50IGxlbmd0aC4gIFRoZSBuZXcgZWxlbWVudHMgYXJlCisgICBpbml0aWFsaXplZCB0byB6ZXJvLiAgKi8KKworI2RlZmluZSBWRUNfc2FmZV9ncm93X2NsZWFyZWQoVCxBLFYsSSkJCVwKKwkoVkVDX09QKFQsQSxzYWZlX2dyb3dfY2xlYXJlZCkoJihWKSxJIFZFQ19DSEVDS19JTkZPIE1FTV9TVEFUX0lORk8pKQorCisvKiBSZXBsYWNlIGVsZW1lbnQKKyAgIFQgVkVDX1RfcmVwbGFjZSAoVkVDKFQpICp2LCB1bnNpZ25lZCBpeCwgVCB2YWwpOyAvLyBJbnRlZ2VyCisgICBUIFZFQ19UX3JlcGxhY2UgKFZFQyhUKSAqdiwgdW5zaWduZWQgaXgsIFQgdmFsKTsgLy8gUG9pbnRlcgorICAgVCAqVkVDX1RfcmVwbGFjZSAoVkVDKFQpICp2LCB1bnNpZ25lZCBpeCwgVCAqdmFsKTsgIC8vIE9iamVjdAorCisgICBSZXBsYWNlIHRoZSBJWHRoIGVsZW1lbnQgb2YgViB3aXRoIGEgbmV3IHZhbHVlLCBWQUwuICBGb3IgcG9pbnRlcgorICAgdmVjdG9ycyByZXR1cm5zIHRoZSBvcmlnaW5hbCB2YWx1ZS4gRm9yIG9iamVjdCB2ZWN0b3JzIHJldHVybnMgYQorICAgcG9pbnRlciB0byB0aGUgbmV3IHZhbHVlLiAgRm9yIG9iamVjdCB2ZWN0b3JzIHRoZSBuZXcgdmFsdWUgY2FuIGJlCisgICBOVUxMLCBpbiB3aGljaCBjYXNlIG5vIG92ZXJ3cml0aW5nIG9mIHRoZSBzbG90IGlzIGFjdHVhbGx5CisgICBwZXJmb3JtZWQuICAqLworCisjZGVmaW5lIFZFQ19yZXBsYWNlKFQsVixJLE8pCQlcCisJKFZFQ19PUChULGJhc2UscmVwbGFjZSkoVkVDX0JBU0UoViksSSxPIFZFQ19DSEVDS19JTkZPKSkKKworLyogSW5zZXJ0IG9iamVjdCB3aXRoIG5vIHJlYWxsb2NhdGlvbgorICAgVCAqVkVDX1RfcXVpY2tfaW5zZXJ0IChWRUMoVCkgKnYsIHVuc2lnbmVkIGl4LCBUIHZhbCk7IC8vIEludGVnZXIKKyAgIFQgKlZFQ19UX3F1aWNrX2luc2VydCAoVkVDKFQpICp2LCB1bnNpZ25lZCBpeCwgVCB2YWwpOyAvLyBQb2ludGVyCisgICBUICpWRUNfVF9xdWlja19pbnNlcnQgKFZFQyhUKSAqdiwgdW5zaWduZWQgaXgsIFQgKnZhbCk7IC8vIE9iamVjdAorCisgICBJbnNlcnQgYW4gZWxlbWVudCwgVkFMLCBhdCB0aGUgSVh0aCBwb3NpdGlvbiBvZiBWLiBSZXR1cm4gYSBwb2ludGVyCisgICB0byB0aGUgc2xvdCBjcmVhdGVkLiAgRm9yIHZlY3RvcnMgb2Ygb2JqZWN0LCB0aGUgbmV3IHZhbHVlIGNhbiBiZQorICAgTlVMTCwgaW4gd2hpY2ggY2FzZSBubyBpbml0aWFsaXphdGlvbiBvZiB0aGUgaW5zZXJ0ZWQgc2xvdCB0YWtlcworICAgcGxhY2UuIFRoZXJlIG11c3QgYmUgc3VmZmljaWVudCBzcGFjZS4gICovCisKKyNkZWZpbmUgVkVDX3F1aWNrX2luc2VydChULFYsSSxPKQlcCisJKFZFQ19PUChULGJhc2UscXVpY2tfaW5zZXJ0KShWRUNfQkFTRShWKSxJLE8gVkVDX0NIRUNLX0lORk8pKQorCisvKiBJbnNlcnQgb2JqZWN0IHdpdGggcmVhbGxvY2F0aW9uCisgICBUICpWRUNfVF9BX3NhZmVfaW5zZXJ0IChWRUMoVCxBKSAqJnYsIHVuc2lnbmVkIGl4LCBUIHZhbCk7IC8vIEludGVnZXIKKyAgIFQgKlZFQ19UX0Ffc2FmZV9pbnNlcnQgKFZFQyhULEEpIComdiwgdW5zaWduZWQgaXgsIFQgdmFsKTsgLy8gUG9pbnRlcgorICAgVCAqVkVDX1RfQV9zYWZlX2luc2VydCAoVkVDKFQsQSkgKiZ2LCB1bnNpZ25lZCBpeCwgVCAqdmFsKTsgLy8gT2JqZWN0CisKKyAgIEluc2VydCBhbiBlbGVtZW50LCBWQUwsIGF0IHRoZSBJWHRoIHBvc2l0aW9uIG9mIFYuIFJldHVybiBhIHBvaW50ZXIKKyAgIHRvIHRoZSBzbG90IGNyZWF0ZWQuICBGb3IgdmVjdG9ycyBvZiBvYmplY3QsIHRoZSBuZXcgdmFsdWUgY2FuIGJlCisgICBOVUxMLCBpbiB3aGljaCBjYXNlIG5vIGluaXRpYWxpemF0aW9uIG9mIHRoZSBpbnNlcnRlZCBzbG90IHRha2VzCisgICBwbGFjZS4gUmVhbGxvY2F0ZSBWLCBpZiBuZWNlc3NhcnkuICAqLworCisjZGVmaW5lIFZFQ19zYWZlX2luc2VydChULEEsVixJLE8pCVwKKwkoVkVDX09QKFQsQSxzYWZlX2luc2VydCkoJihWKSxJLE8gVkVDX0NIRUNLX0lORk8gTUVNX1NUQVRfSU5GTykpCisKKy8qIFJlbW92ZSBlbGVtZW50IHJldGFpbmluZyBvcmRlcgorICAgVCBWRUNfVF9vcmRlcmVkX3JlbW92ZSAoVkVDKFQpICp2LCB1bnNpZ25lZCBpeCk7IC8vIEludGVnZXIKKyAgIFQgVkVDX1Rfb3JkZXJlZF9yZW1vdmUgKFZFQyhUKSAqdiwgdW5zaWduZWQgaXgpOyAvLyBQb2ludGVyCisgICB2b2lkIFZFQ19UX29yZGVyZWRfcmVtb3ZlIChWRUMoVCkgKnYsIHVuc2lnbmVkIGl4KTsgLy8gT2JqZWN0CisKKyAgIFJlbW92ZSBhbiBlbGVtZW50IGZyb20gdGhlIElYdGggcG9zaXRpb24gb2YgVi4gT3JkZXJpbmcgb2YKKyAgIHJlbWFpbmluZyBlbGVtZW50cyBpcyBwcmVzZXJ2ZWQuICBGb3IgcG9pbnRlciB2ZWN0b3JzIHJldHVybnMgdGhlCisgICByZW1vdmVkIG9iamVjdC4gIFRoaXMgaXMgYW4gTyhOKSBvcGVyYXRpb24gZHVlIHRvIGEgbWVtbW92ZS4gICovCisKKyNkZWZpbmUgVkVDX29yZGVyZWRfcmVtb3ZlKFQsVixJKQlcCisJKFZFQ19PUChULGJhc2Usb3JkZXJlZF9yZW1vdmUpKFZFQ19CQVNFKFYpLEkgVkVDX0NIRUNLX0lORk8pKQorCisvKiBSZW1vdmUgZWxlbWVudCBkZXN0cm95aW5nIG9yZGVyCisgICBUIFZFQ19UX3Vub3JkZXJlZF9yZW1vdmUgKFZFQyhUKSAqdiwgdW5zaWduZWQgaXgpOyAvLyBJbnRlZ2VyCisgICBUIFZFQ19UX3Vub3JkZXJlZF9yZW1vdmUgKFZFQyhUKSAqdiwgdW5zaWduZWQgaXgpOyAvLyBQb2ludGVyCisgICB2b2lkIFZFQ19UX3Vub3JkZXJlZF9yZW1vdmUgKFZFQyhUKSAqdiwgdW5zaWduZWQgaXgpOyAvLyBPYmplY3QKKworICAgUmVtb3ZlIGFuIGVsZW1lbnQgZnJvbSB0aGUgSVh0aCBwb3NpdGlvbiBvZiBWLiBPcmRlcmluZyBvZgorICAgcmVtYWluaW5nIGVsZW1lbnRzIGlzIGRlc3Ryb3llZC4gIEZvciBwb2ludGVyIHZlY3RvcnMgcmV0dXJucyB0aGUKKyAgIHJlbW92ZWQgb2JqZWN0LiAgVGhpcyBpcyBhbiBPKDEpIG9wZXJhdGlvbi4gICovCisKKyNkZWZpbmUgVkVDX3Vub3JkZXJlZF9yZW1vdmUoVCxWLEkpCVwKKwkoVkVDX09QKFQsYmFzZSx1bm9yZGVyZWRfcmVtb3ZlKShWRUNfQkFTRShWKSxJIFZFQ19DSEVDS19JTkZPKSkKKworLyogUmVtb3ZlIGEgYmxvY2sgb2YgZWxlbWVudHMKKyAgIHZvaWQgVkVDX1RfYmxvY2tfcmVtb3ZlIChWRUMoVCkgKnYsIHVuc2lnbmVkIGl4LCB1bnNpZ25lZCBsZW4pOworCisgICBSZW1vdmUgTEVOIGVsZW1lbnRzIHN0YXJ0aW5nIGF0IHRoZSBJWHRoLiAgT3JkZXJpbmcgaXMgcmV0YWluZWQuCisgICBUaGlzIGlzIGFuIE8oMSkgb3BlcmF0aW9uLiAgKi8KKworI2RlZmluZSBWRUNfYmxvY2tfcmVtb3ZlKFQsVixJLEwpCVwKKwkoVkVDX09QKFQsYmFzZSxibG9ja19yZW1vdmUpKFZFQ19CQVNFKFYpLEksTCBWRUNfQ0hFQ0tfSU5GTykpCisKKy8qIEdldCB0aGUgYWRkcmVzcyBvZiB0aGUgYXJyYXkgb2YgZWxlbWVudHMKKyAgIFQgKlZFQ19UX2FkZHJlc3MgKFZFQyhUKSB2KQorCisgICBJZiB5b3UgbmVlZCB0byBkaXJlY3RseSBtYW5pcHVsYXRlIHRoZSBhcnJheSAoZm9yIGluc3RhbmNlLCB5b3UKKyAgIHdhbnQgdG8gZmVlZCBpdCB0byBxc29ydCksIHVzZSB0aGlzIGFjY2Vzc29yLiAgKi8KKworI2RlZmluZSBWRUNfYWRkcmVzcyhULFYpCQkoVkVDX09QKFQsYmFzZSxhZGRyZXNzKShWRUNfQkFTRShWKSkpCisKKy8qIEZpbmQgdGhlIGZpcnN0IGluZGV4IGluIHRoZSB2ZWN0b3Igbm90IGxlc3MgdGhhbiB0aGUgb2JqZWN0LgorICAgdW5zaWduZWQgVkVDX1RfbG93ZXJfYm91bmQgKFZFQyhUKSAqdiwgY29uc3QgVCB2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAoKmxlc3N0aGFuKSAoY29uc3QgVCwgY29uc3QgVCkpOyAvLyBJbnRlZ2VyCisgICB1bnNpZ25lZCBWRUNfVF9sb3dlcl9ib3VuZCAoVkVDKFQpICp2LCBjb25zdCBUIHZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICgqbGVzc3RoYW4pIChjb25zdCBULCBjb25zdCBUKSk7IC8vIFBvaW50ZXIKKyAgIHVuc2lnbmVkIFZFQ19UX2xvd2VyX2JvdW5kIChWRUMoVCkgKnYsIGNvbnN0IFQgKnZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICgqbGVzc3RoYW4pIChjb25zdCBUKiwgY29uc3QgVCopKTsgLy8gT2JqZWN0CisKKyAgIEZpbmQgdGhlIGZpcnN0IHBvc2l0aW9uIGluIHdoaWNoIFZBTCBjb3VsZCBiZSBpbnNlcnRlZCB3aXRob3V0CisgICBjaGFuZ2luZyB0aGUgb3JkZXJpbmcgb2YgVi4gIExFU1NUSEFOIGlzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zCisgICB0cnVlIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBzdHJpY3RseSBsZXNzIHRoYW4gdGhlIHNlY29uZC4gICovCisKKyNkZWZpbmUgVkVDX2xvd2VyX2JvdW5kKFQsVixPLExUKSAgICBcCisgICAgICAgKFZFQ19PUChULGJhc2UsbG93ZXJfYm91bmQpKFZFQ19CQVNFKFYpLE8sTFQgVkVDX0NIRUNLX0lORk8pKQorCisvKiBSZWFsbG9jYXRlIGFuIGFycmF5IG9mIGVsZW1lbnRzIHdpdGggcHJlZml4LiAgKi8KK2V4dGVybiB2b2lkICp2ZWNfZ2NfcF9yZXNlcnZlICh2b2lkICosIGludCBNRU1fU1RBVF9ERUNMKTsKK2V4dGVybiB2b2lkICp2ZWNfZ2NfcF9yZXNlcnZlX2V4YWN0ICh2b2lkICosIGludCBNRU1fU1RBVF9ERUNMKTsKK2V4dGVybiB2b2lkICp2ZWNfZ2Nfb19yZXNlcnZlICh2b2lkICosIGludCwgc2l6ZV90LCBzaXplX3QgTUVNX1NUQVRfREVDTCk7CitleHRlcm4gdm9pZCAqdmVjX2djX29fcmVzZXJ2ZV9leGFjdCAodm9pZCAqLCBpbnQsIHNpemVfdCwgc2l6ZV90CisJCQkJICAgICBNRU1fU1RBVF9ERUNMKTsKK2V4dGVybiB2b2lkIGdnY19mcmVlICh2b2lkICopOworI2RlZmluZSB2ZWNfZ2NfZnJlZShWKSBnZ2NfZnJlZSAoVikKK2V4dGVybiB2b2lkICp2ZWNfaGVhcF9wX3Jlc2VydmUgKHZvaWQgKiwgaW50IE1FTV9TVEFUX0RFQ0wpOworZXh0ZXJuIHZvaWQgKnZlY19oZWFwX3BfcmVzZXJ2ZV9leGFjdCAodm9pZCAqLCBpbnQgTUVNX1NUQVRfREVDTCk7CitleHRlcm4gdm9pZCAqdmVjX2hlYXBfb19yZXNlcnZlICh2b2lkICosIGludCwgc2l6ZV90LCBzaXplX3QgTUVNX1NUQVRfREVDTCk7CitleHRlcm4gdm9pZCAqdmVjX2hlYXBfb19yZXNlcnZlX2V4YWN0ICh2b2lkICosIGludCwgc2l6ZV90LCBzaXplX3QKKwkJCQkgICAgICAgTUVNX1NUQVRfREVDTCk7CitleHRlcm4gdm9pZCBkdW1wX3ZlY19sb2Nfc3RhdGlzdGljcyAodm9pZCk7CisjaWZkZWYgR0FUSEVSX1NUQVRJU1RJQ1MKK3ZvaWQgdmVjX2hlYXBfZnJlZSAodm9pZCAqKTsKKyNlbHNlCisjZGVmaW5lIHZlY19oZWFwX2ZyZWUoVikgZnJlZSAoVikKKyNlbmRpZgorCisjaWYgRU5BQkxFX0NIRUNLSU5HCisjZGVmaW5lIFZFQ19DSEVDS19JTkZPICxfX0ZJTEVfXyxfX0xJTkVfXyxfX0ZVTkNUSU9OX18KKyNkZWZpbmUgVkVDX0NIRUNLX0RFQ0wgLGNvbnN0IGNoYXIgKmZpbGVfLHVuc2lnbmVkIGxpbmVfLGNvbnN0IGNoYXIgKmZ1bmN0aW9uXworI2RlZmluZSBWRUNfQ0hFQ0tfUEFTUyAsZmlsZV8sbGluZV8sZnVuY3Rpb25fCisKKyNkZWZpbmUgVkVDX0FTU0VSVChFWFBSLE9QLFQsQSkgXAorICAodm9pZCkoKEVYUFIpID8gMCA6IChWRUNfQVNTRVJUX0ZBSUwoT1AsVkVDKFQsQSkpLCAwKSkKKworZXh0ZXJuIHZvaWQgdmVjX2Fzc2VydF9mYWlsIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiBWRUNfQ0hFQ0tfREVDTCkKKyAgICAgQVRUUklCVVRFX05PUkVUVVJOOworI2RlZmluZSBWRUNfQVNTRVJUX0ZBSUwoT1AsVkVDKSB2ZWNfYXNzZXJ0X2ZhaWwgKE9QLCNWRUMgVkVDX0NIRUNLX1BBU1MpCisjZWxzZQorI2RlZmluZSBWRUNfQ0hFQ0tfSU5GTworI2RlZmluZSBWRUNfQ0hFQ0tfREVDTAorI2RlZmluZSBWRUNfQ0hFQ0tfUEFTUworI2RlZmluZSBWRUNfQVNTRVJUKEVYUFIsT1AsVCxBKSAodm9pZCkoRVhQUikKKyNlbmRpZgorCisvKiBOb3RlOiBnZW5ndHlwZSBoYXMgaGFyZHdpcmVkIGtub3dsZWRnZSBvZiB0aGUgZXhwYW5zaW9ucyBvZiB0aGUKKyAgIFZFQywgREVGX1ZFQ18qLCBhbmQgREVGX1ZFQ19BTExPQ18qIG1hY3Jvcy4gIElmIHlvdSBjaGFuZ2UgdGhlCisgICBleHBhbnNpb25zIG9mIHRoZXNlIG1hY3JvcyB5b3UgbWF5IG5lZWQgdG8gY2hhbmdlIGdlbmd0eXBlIHRvby4gICovCisKKyNkZWZpbmUgVkVDKFQsQSkgVkVDXyMjVCMjXyMjQQorI2RlZmluZSBWRUNfT1AoVCxBLE9QKSBWRUNfIyNUIyNfIyNBIyNfIyNPUAorCisvKiBCYXNlIG9mIHZlY3RvciB0eXBlLCBub3QgdXNlciB2aXNpYmxlLiAgKi8KKyNkZWZpbmUgVkVDX1QoVCxCKQkJCQkJCQkgIFwKK3R5cGVkZWYgc3RydWN0IFZFQyhULEIpIAkJCQkgCQkgIFwKK3sJCQkJCQkJCQkgIFwKKyAgdW5zaWduZWQgbnVtOwkJCQkJCQkJICBcCisgIHVuc2lnbmVkIGFsbG9jOwkJCQkJCQkgIFwKKyAgVCB2ZWNbMV07CQkJCQkJCQkgIFwKK30gVkVDKFQsQikKKworI2RlZmluZSBWRUNfVF9HVFkoVCxCKQkJCQkJCQkgIFwKK3R5cGVkZWYgc3RydWN0IEdUWSgoKSkgVkVDKFQsQikJCQkJIAkJICBcCit7CQkJCQkJCQkJICBcCisgIHVuc2lnbmVkIG51bTsJCQkJCQkJCSAgXAorICB1bnNpZ25lZCBhbGxvYzsJCQkJCQkJICBcCisgIFQgR1RZICgobGVuZ3RoICgiJWgubnVtIikpKSB2ZWNbMV07CQkJCQkgIFwKK30gVkVDKFQsQikKKworLyogRGVyaXZlZCB2ZWN0b3IgdHlwZSwgdXNlciB2aXNpYmxlLiAgKi8KKyNkZWZpbmUgVkVDX1RBX0dUWShULEIsQSxHVFkpCQkJCQkJICBcCit0eXBlZGVmIHN0cnVjdCBHVFkgVkVDKFQsQSkJCQkJCQkgIFwKK3sJCQkJCQkJCQkgIFwKKyAgVkVDKFQsQikgYmFzZTsJCQkJCQkJICBcCit9IFZFQyhULEEpCisKKyNkZWZpbmUgVkVDX1RBKFQsQixBKQkJCQkJCQkgIFwKK3R5cGVkZWYgc3RydWN0IFZFQyhULEEpCQkJCQkJCSAgXAorewkJCQkJCQkJCSAgXAorICBWRUMoVCxCKSBiYXNlOwkJCQkJCQkgIFwKK30gVkVDKFQsQSkKKworLyogQ29udmVydCB0byBiYXNlIHR5cGUuICAqLworI2RlZmluZSBWRUNfQkFTRShQKSAgKChQKSA/ICYoUCktPmJhc2UgOiAwKQorCisvKiBWZWN0b3Igb2YgaW50ZWdlci1saWtlIG9iamVjdC4gICovCisjZGVmaW5lIERFRl9WRUNfSShUKQkJCQkJCQkgIFwKK3N0YXRpYyBpbmxpbmUgdm9pZCBWRUNfT1AgKFQsbXVzdF9iZSxpbnRlZ3JhbF90eXBlKSAodm9pZCkgCQkgIFwKK3sJCQkJCQkJCQkgIFwKKyAgKHZvaWQpfihUKTA7CQkJCQkJCQkgIFwKK30JCQkJCQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorVkVDX1QoVCxiYXNlKTsJCQkJCQkJCSAgXAorVkVDX1RBKFQsYmFzZSxub25lKTsJCQkJCQkJICBcCitERUZfVkVDX0ZVTkNfUChUKQkJCQkJCQkgIFwKK3N0cnVjdCB2ZWNfc3dhbGxvd190cmFpbGluZ19zZW1pCisjZGVmaW5lIERFRl9WRUNfQUxMT0NfSShULEEpCQkJCQkJICBcCitWRUNfVEEoVCxiYXNlLEEpOwkJCQkJCQkgIFwKK0RFRl9WRUNfQUxMT0NfRlVOQ19JKFQsQSkJCQkJCQkgIFwKK0RFRl9WRUNfTk9OQUxMT0NfRlVOQ1NfSShULEEpCQkJCQkJICBcCitzdHJ1Y3QgdmVjX3N3YWxsb3dfdHJhaWxpbmdfc2VtaQorCisvKiBWZWN0b3Igb2YgcG9pbnRlciB0byBvYmplY3QuICAqLworI2RlZmluZSBERUZfVkVDX1AoVCkgCQkJCQkJCSAgXAorc3RhdGljIGlubGluZSB2b2lkIFZFQ19PUCAoVCxtdXN0X2JlLHBvaW50ZXJfdHlwZSkgKHZvaWQpIAkJICBcCit7CQkJCQkJCQkJICBcCisgICh2b2lkKSgoVCkxID09ICh2b2lkICopMSk7CQkJCQkJICBcCit9CQkJCQkJCQkJICBcCisJCQkJCQkJCQkgIFwKK1ZFQ19UX0dUWShULGJhc2UpOwkJCQkJCQkgIFwKK1ZFQ19UQShULGJhc2Usbm9uZSk7CQkJCQkJCSAgXAorREVGX1ZFQ19GVU5DX1AoVCkJCQkJCQkJICBcCitzdHJ1Y3QgdmVjX3N3YWxsb3dfdHJhaWxpbmdfc2VtaQorI2RlZmluZSBERUZfVkVDX0FMTE9DX1AoVCxBKQkJCQkJCSAgXAorVkVDX1RBKFQsYmFzZSxBKTsJCQkJCQkJICBcCitERUZfVkVDX0FMTE9DX0ZVTkNfUChULEEpCQkJCQkJICBcCitERUZfVkVDX05PTkFMTE9DX0ZVTkNTX1AoVCxBKQkJCQkJCSAgXAorc3RydWN0IHZlY19zd2FsbG93X3RyYWlsaW5nX3NlbWkKKworI2RlZmluZSBERUZfVkVDX0ZVTkNfUChUKQkJCQkJCSAgXAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBWRUNfT1AgKFQsYmFzZSxsZW5ndGgpIChjb25zdCBWRUMoVCxiYXNlKSAqdmVjXykgICBcCit7CQkJCQkJCQkJICBcCisgIHJldHVybiB2ZWNfID8gdmVjXy0+bnVtIDogMDsJCQkJCQkgIFwKK30JCQkJCQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorc3RhdGljIGlubGluZSBUIFZFQ19PUCAoVCxiYXNlLGxhc3QpCQkJCQkgIFwKKyAgICAgKGNvbnN0IFZFQyhULGJhc2UpICp2ZWNfIFZFQ19DSEVDS19ERUNMKQkJCQkgIFwKK3sJCQkJCQkJCQkgIFwKKyAgVkVDX0FTU0VSVCAodmVjXyAmJiB2ZWNfLT5udW0sICJsYXN0IiwgVCwgYmFzZSk7CQkJICBcCisgIAkJCQkJCQkJCSAgXAorICByZXR1cm4gdmVjXy0+dmVjW3ZlY18tPm51bSAtIDFdOwkJCQkJICBcCit9CQkJCQkJCQkJICBcCisJCQkJCQkJCQkgIFwKK3N0YXRpYyBpbmxpbmUgVCBWRUNfT1AgKFQsYmFzZSxpbmRleCkJCQkJCSAgXAorICAgICAoY29uc3QgVkVDKFQsYmFzZSkgKnZlY18sIHVuc2lnbmVkIGl4XyBWRUNfQ0hFQ0tfREVDTCkJCSAgXAorewkJCQkJCQkJCSAgXAorICBWRUNfQVNTRVJUICh2ZWNfICYmIGl4XyA8IHZlY18tPm51bSwgImluZGV4IiwgVCwgYmFzZSk7CQkgIFwKKyAgCQkJCQkJCQkJICBcCisgIHJldHVybiB2ZWNfLT52ZWNbaXhfXTsJCQkJCQkgIFwKK30JCQkJCQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorc3RhdGljIGlubGluZSBpbnQgVkVDX09QIChULGJhc2UsaXRlcmF0ZSkJCQkgIAkgIFwKKyAgICAgKGNvbnN0IFZFQyhULGJhc2UpICp2ZWNfLCB1bnNpZ25lZCBpeF8sIFQgKnB0cikJCQkgIFwKK3sJCQkJCQkJCQkgIFwKKyAgaWYgKHZlY18gJiYgaXhfIDwgdmVjXy0+bnVtKQkJCQkJCSAgXAorICAgIHsJCQkJCQkJCQkgIFwKKyAgICAgICpwdHIgPSB2ZWNfLT52ZWNbaXhfXTsJCQkJCQkgIFwKKyAgICAgIHJldHVybiAxOwkJCQkJCQkJICBcCisgICAgfQkJCQkJCQkJCSAgXAorICBlbHNlCQkJCQkJCQkJICBcCisgICAgewkJCQkJCQkJCSAgXAorICAgICAgKnB0ciA9IChUKSAwOwkJCQkJCQkgIFwKKyAgICAgIHJldHVybiAwOwkJCQkJCQkJICBcCisgICAgfQkJCQkJCQkJCSAgXAorfQkJCQkJCQkJCSAgXAorCQkJCQkJCQkJICBcCitzdGF0aWMgaW5saW5lIHNpemVfdCBWRUNfT1AgKFQsYmFzZSxlbWJlZGRlZF9zaXplKQkJCSAgXAorICAgICAoaW50IGFsbG9jXykJCQkJCQkJICBcCit7CQkJCQkJCQkJICBcCisgIHJldHVybiBvZmZzZXRvZiAoVkVDKFQsYmFzZSksdmVjKSArIGFsbG9jXyAqIHNpemVvZihUKTsJCSAgXAorfQkJCQkJCQkJCSAgXAorCQkJCQkJCQkJICBcCitzdGF0aWMgaW5saW5lIHZvaWQgVkVDX09QIChULGJhc2UsZW1iZWRkZWRfaW5pdCkJCQkgIFwKKyAgICAgKFZFQyhULGJhc2UpICp2ZWNfLCBpbnQgYWxsb2NfKQkJCQkJICBcCit7CQkJCQkJCQkJICBcCisgIHZlY18tPm51bSA9IDA7CQkJCQkJCSAgXAorICB2ZWNfLT5hbGxvYyA9IGFsbG9jXzsJCQkJCQkJICBcCit9CQkJCQkJCQkJICBcCisJCQkJCQkJCQkgIFwKK3N0YXRpYyBpbmxpbmUgaW50IFZFQ19PUCAoVCxiYXNlLHNwYWNlKQkgICAgICAgCQkJCSAgXAorICAgICAoVkVDKFQsYmFzZSkgKnZlY18sIGludCBhbGxvY18gVkVDX0NIRUNLX0RFQ0wpCQkJICBcCit7CQkJCQkJCQkJICBcCisgIFZFQ19BU1NFUlQgKGFsbG9jXyA+PSAwLCAic3BhY2UiLCBULCBiYXNlKTsJCQkJICBcCisgIHJldHVybiB2ZWNfID8gdmVjXy0+YWxsb2MgLSB2ZWNfLT5udW0gPj0gKHVuc2lnbmVkKWFsbG9jXyA6ICFhbGxvY187CSAgXAorfQkJCQkJCQkJCSAgXAorCQkJCQkJCQkJICBcCitzdGF0aWMgaW5saW5lIFQgKlZFQ19PUCAoVCxiYXNlLHF1aWNrX3B1c2gpCQkJCSAgXAorICAgICAoVkVDKFQsYmFzZSkgKnZlY18sIFQgb2JqXyBWRUNfQ0hFQ0tfREVDTCkJCQkJICBcCit7CQkJCQkJCQkJICBcCisgIFQgKnNsb3RfOwkJCQkJCQkJICBcCisgIAkJCQkJCQkJCSAgXAorICBWRUNfQVNTRVJUICh2ZWNfLT5udW0gPCB2ZWNfLT5hbGxvYywgInB1c2giLCBULCBiYXNlKTsJCSAgXAorICBzbG90XyA9ICZ2ZWNfLT52ZWNbdmVjXy0+bnVtKytdOwkJCQkJICBcCisgICpzbG90XyA9IG9ial87CQkJCQkJCSAgXAorICAJCQkJCQkJCQkgIFwKKyAgcmV0dXJuIHNsb3RfOwkJCQkJCQkJICBcCit9CQkJCQkJCQkJICBcCisJCQkJCQkJCQkgIFwKK3N0YXRpYyBpbmxpbmUgVCBWRUNfT1AgKFQsYmFzZSxwb3ApIChWRUMoVCxiYXNlKSAqdmVjXyBWRUNfQ0hFQ0tfREVDTCkJICBcCit7CQkJCQkJCQkJICBcCisgIFQgb2JqXzsJCQkJCQkJCSAgXAorCQkJCQkJCQkJICBcCisgIFZFQ19BU1NFUlQgKHZlY18tPm51bSwgInBvcCIsIFQsIGJhc2UpOwkJCQkgIFwKKyAgb2JqXyA9IHZlY18tPnZlY1stLXZlY18tPm51bV07CQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorICByZXR1cm4gb2JqXzsJCQkJCQkJCSAgXAorfQkJCQkJCQkJCSAgXAorCQkJCQkJCQkJICBcCitzdGF0aWMgaW5saW5lIHZvaWQgVkVDX09QIChULGJhc2UsdHJ1bmNhdGUpCQkJCSAgXAorICAgICAoVkVDKFQsYmFzZSkgKnZlY18sIHVuc2lnbmVkIHNpemVfIFZFQ19DSEVDS19ERUNMKQkJCSAgXAorewkJCQkJCQkJCSAgXAorICBWRUNfQVNTRVJUICh2ZWNfID8gdmVjXy0+bnVtID49IHNpemVfIDogIXNpemVfLCAidHJ1bmNhdGUiLCBULCBiYXNlKTsJICBcCisgIGlmICh2ZWNfKQkJCQkJCQkJICBcCisgICAgdmVjXy0+bnVtID0gc2l6ZV87CQkJCQkJCSAgXAorfQkJCQkJCQkJCSAgXAorCQkJCQkJCQkJICBcCitzdGF0aWMgaW5saW5lIFQgVkVDX09QIChULGJhc2UscmVwbGFjZSkJCSAgCSAgICAgCQkgIFwKKyAgICAgKFZFQyhULGJhc2UpICp2ZWNfLCB1bnNpZ25lZCBpeF8sIFQgb2JqXyBWRUNfQ0hFQ0tfREVDTCkJCSAgXAorewkJCQkJCQkJCSAgXAorICBUIG9sZF9vYmpfOwkJCQkJCQkJICBcCisJCQkJCQkJCQkgIFwKKyAgVkVDX0FTU0VSVCAoaXhfIDwgdmVjXy0+bnVtLCAicmVwbGFjZSIsIFQsIGJhc2UpOwkJCSAgXAorICBvbGRfb2JqXyA9IHZlY18tPnZlY1tpeF9dOwkJCQkJCSAgXAorICB2ZWNfLT52ZWNbaXhfXSA9IG9ial87CQkJCQkJICBcCisJCQkJCQkJCQkgIFwKKyAgcmV0dXJuIG9sZF9vYmpfOwkJCQkJCQkgIFwKK30JCQkJCQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorc3RhdGljIGlubGluZSBUICpWRUNfT1AgKFQsYmFzZSxxdWlja19pbnNlcnQpCQkJCSAgXAorICAgICAoVkVDKFQsYmFzZSkgKnZlY18sIHVuc2lnbmVkIGl4XywgVCBvYmpfIFZFQ19DSEVDS19ERUNMKQkJICBcCit7CQkJCQkJCQkJICBcCisgIFQgKnNsb3RfOwkJCQkJCQkJICBcCisJCQkJCQkJCQkgIFwKKyAgVkVDX0FTU0VSVCAodmVjXy0+bnVtIDwgdmVjXy0+YWxsb2MsICJpbnNlcnQiLCBULCBiYXNlKTsJCSAgXAorICBWRUNfQVNTRVJUIChpeF8gPD0gdmVjXy0+bnVtLCAiaW5zZXJ0IiwgVCwgYmFzZSk7CQkJICBcCisgIHNsb3RfID0gJnZlY18tPnZlY1tpeF9dOwkJCQkJCSAgXAorICBtZW1tb3ZlIChzbG90XyArIDEsIHNsb3RfLCAodmVjXy0+bnVtKysgLSBpeF8pICogc2l6ZW9mIChUKSk7CQkgIFwKKyAgKnNsb3RfID0gb2JqXzsJCQkJCQkJICBcCisgIAkJCQkJCQkJCSAgXAorICByZXR1cm4gc2xvdF87CQkJCQkJCQkgIFwKK30JCQkJCQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorc3RhdGljIGlubGluZSBUIFZFQ19PUCAoVCxiYXNlLG9yZGVyZWRfcmVtb3ZlKQkJCQkgIFwKKyAgICAgKFZFQyhULGJhc2UpICp2ZWNfLCB1bnNpZ25lZCBpeF8gVkVDX0NIRUNLX0RFQ0wpCQkJICBcCit7CQkJCQkJCQkJICBcCisgIFQgKnNsb3RfOwkJCQkJCQkJICBcCisgIFQgb2JqXzsJCQkJCQkJCSAgXAorCQkJCQkJCQkJICBcCisgIFZFQ19BU1NFUlQgKGl4XyA8IHZlY18tPm51bSwgInJlbW92ZSIsIFQsIGJhc2UpOwkJCSAgXAorICBzbG90XyA9ICZ2ZWNfLT52ZWNbaXhfXTsJCQkJCQkgIFwKKyAgb2JqXyA9ICpzbG90XzsJCQkJCQkJICBcCisgIG1lbW1vdmUgKHNsb3RfLCBzbG90XyArIDEsICgtLXZlY18tPm51bSAtIGl4XykgKiBzaXplb2YgKFQpKTsgICAgIAkgIFwKKwkJCQkJCQkJCSAgXAorICByZXR1cm4gb2JqXzsJCQkJCQkJCSAgXAorfQkJCQkJCQkJCSAgXAorCQkJCQkJCQkJICBcCitzdGF0aWMgaW5saW5lIFQgVkVDX09QIChULGJhc2UsdW5vcmRlcmVkX3JlbW92ZSkJCQkgIFwKKyAgICAgKFZFQyhULGJhc2UpICp2ZWNfLCB1bnNpZ25lZCBpeF8gVkVDX0NIRUNLX0RFQ0wpCQkJICBcCit7CQkJCQkJCQkJICBcCisgIFQgKnNsb3RfOwkJCQkJCQkJICBcCisgIFQgb2JqXzsJCQkJCQkJCSAgXAorCQkJCQkJCQkJICBcCisgIFZFQ19BU1NFUlQgKGl4XyA8IHZlY18tPm51bSwgInJlbW92ZSIsIFQsIGJhc2UpOwkJCSAgXAorICBzbG90XyA9ICZ2ZWNfLT52ZWNbaXhfXTsJCQkJCQkgIFwKKyAgb2JqXyA9ICpzbG90XzsJCQkJCQkJICBcCisgICpzbG90XyA9IHZlY18tPnZlY1stLXZlY18tPm51bV07CQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorICByZXR1cm4gb2JqXzsJCQkJCQkJCSAgXAorfQkJCQkJCQkJCSAgXAorCQkJCQkJCQkJICBcCitzdGF0aWMgaW5saW5lIHZvaWQgVkVDX09QIChULGJhc2UsYmxvY2tfcmVtb3ZlKQkJCQkgIFwKKyAgICAgKFZFQyhULGJhc2UpICp2ZWNfLCB1bnNpZ25lZCBpeF8sIHVuc2lnbmVkIGxlbl8gVkVDX0NIRUNLX0RFQ0wpCSAgXAorewkJCQkJCQkJCSAgXAorICBUICpzbG90XzsJCQkJCQkJCSAgXAorCQkJCQkJCQkJICBcCisgIFZFQ19BU1NFUlQgKGl4XyArIGxlbl8gPD0gdmVjXy0+bnVtLCAiYmxvY2tfcmVtb3ZlIiwgVCwgYmFzZSk7CSAgXAorICBzbG90XyA9ICZ2ZWNfLT52ZWNbaXhfXTsJCQkJCQkgIFwKKyAgdmVjXy0+bnVtIC09IGxlbl87CQkJCQkJCSAgXAorICBtZW1tb3ZlIChzbG90Xywgc2xvdF8gKyBsZW5fLCAodmVjXy0+bnVtIC0gaXhfKSAqIHNpemVvZiAoVCkpOwkgIFwKK30JCQkJCQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorc3RhdGljIGlubGluZSBUICpWRUNfT1AgKFQsYmFzZSxhZGRyZXNzKQkJCQkgIFwKKyAgICAgKFZFQyhULGJhc2UpICp2ZWNfKQkJCQkJCSAgXAorewkJCQkJCQkJCSAgXAorICByZXR1cm4gdmVjXyA/IHZlY18tPnZlYyA6IDA7CQkJCQkJICBcCit9CQkJCQkJCQkJICBcCisJCQkJCQkJCQkgIFwKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgVkVDX09QIChULGJhc2UsbG93ZXJfYm91bmQpCQkJICBcCisgICAgIChWRUMoVCxiYXNlKSAqdmVjXywgY29uc3QgVCBvYmpfLAkJCQkJICBcCisgICAgICBib29sICgqbGVzc3RoYW5fKShjb25zdCBULCBjb25zdCBUKSBWRUNfQ0hFQ0tfREVDTCkJCSAgXAorewkJCQkJCQkJCSAgXAorICAgdW5zaWduZWQgaW50IGxlbl8gPSBWRUNfT1AgKFQsYmFzZSwgbGVuZ3RoKSAodmVjXyk7CQkJICBcCisgICB1bnNpZ25lZCBpbnQgaGFsZl8sIG1pZGRsZV87CQkJCQkJICBcCisgICB1bnNpZ25lZCBpbnQgZmlyc3RfID0gMDsJCQkJCQkgIFwKKyAgIHdoaWxlIChsZW5fID4gMCkJCQkJCQkJICBcCisgICAgIHsJCQkJCQkJCQkgIFwKKyAgICAgICAgVCBtaWRkbGVfZWxlbV87CQkJCQkJCSAgXAorICAgICAgICBoYWxmXyA9IGxlbl8gPj4gMTsJCQkJCQkgIFwKKyAgICAgICAgbWlkZGxlXyA9IGZpcnN0XzsJCQkJCQkgIFwKKyAgICAgICAgbWlkZGxlXyArPSBoYWxmXzsJCQkJCQkgIFwKKyAgICAgICAgbWlkZGxlX2VsZW1fID0gVkVDX09QIChULGJhc2UsaW5kZXgpICh2ZWNfLCBtaWRkbGVfIFZFQ19DSEVDS19QQVNTKTsgXAorICAgICAgICBpZiAobGVzc3RoYW5fIChtaWRkbGVfZWxlbV8sIG9ial8pKQkJCQkgIFwKKyAgICAgICAgICB7CQkJCQkJCQkgIFwKKyAgICAgICAgICAgICBmaXJzdF8gPSBtaWRkbGVfOwkJCQkJCSAgXAorICAgICAgICAgICAgICsrZmlyc3RfOwkJCQkJCQkgIFwKKyAgICAgICAgICAgICBsZW5fID0gbGVuXyAtIGhhbGZfIC0gMTsJCQkJCSAgXAorICAgICAgICAgIH0JCQkJCQkJCSAgXAorICAgICAgICBlbHNlCQkJCQkJCQkgIFwKKyAgICAgICAgICBsZW5fID0gaGFsZl87CQkJCQkJCSAgXAorICAgICB9CQkJCQkJCQkJICBcCisgICByZXR1cm4gZmlyc3RfOwkJCQkJCQkgIFwKK30KKworI2RlZmluZSBERUZfVkVDX0FMTE9DX0ZVTkNfUChULEEpCQkJCQkgIFwKK3N0YXRpYyBpbmxpbmUgVkVDKFQsQSkgKlZFQ19PUCAoVCxBLGFsbG9jKQkJCQkgIFwKKyAgICAgKGludCBhbGxvY18gTUVNX1NUQVRfREVDTCkJCQkJCQkgIFwKK3sJCQkJCQkJCQkgIFwKKyAgcmV0dXJuIChWRUMoVCxBKSAqKSB2ZWNfIyNBIyNfcF9yZXNlcnZlX2V4YWN0IChOVUxMLCBhbGxvY18JCSAgXAorCQkJCQkJIFBBU1NfTUVNX1NUQVQpOwkgIFwKK30KKworCisjZGVmaW5lIERFRl9WRUNfTk9OQUxMT0NfRlVOQ1NfUChULEEpCQkJCQkgIFwKK3N0YXRpYyBpbmxpbmUgdm9pZCBWRUNfT1AgKFQsQSxmcmVlKQkJCQkJICBcCisgICAgIChWRUMoVCxBKSAqKnZlY18pCQkJCQkJCSAgXAorewkJCQkJCQkJCSAgXAorICBpZiAoKnZlY18pCQkJCQkJCQkgIFwKKyAgICB2ZWNfIyNBIyNfZnJlZSAoKnZlY18pOwkJCQkJCSAgXAorICAqdmVjXyA9IE5VTEw7CQkJCQkJCQkgIFwKK30JCQkJCQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorc3RhdGljIGlubGluZSBWRUMoVCxBKSAqVkVDX09QIChULEEsY29weSkgKFZFQyhULGJhc2UpICp2ZWNfIE1FTV9TVEFUX0RFQ0wpIFwKK3sJCQkJCQkJCQkgIFwKKyAgc2l6ZV90IGxlbl8gPSB2ZWNfID8gdmVjXy0+bnVtIDogMDsJCQkJCSAgXAorICBWRUMgKFQsQSkgKm5ld192ZWNfID0gTlVMTDsJCQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorICBpZiAobGVuXykJCQkJCQkJCSAgXAorICAgIHsJCQkJCQkJCQkgIFwKKyAgICAgIG5ld192ZWNfID0gKFZFQyAoVCxBKSAqKSh2ZWNfIyNBIyNfcF9yZXNlcnZlX2V4YWN0CQkgIFwKKwkJCSAgICAgICAoTlVMTCwgbGVuXyBQQVNTX01FTV9TVEFUKSk7CQkgIFwKKwkJCQkJCQkJCSAgXAorICAgICAgbmV3X3ZlY18tPmJhc2UubnVtID0gbGVuXzsJCQkJCSAgXAorICAgICAgbWVtY3B5IChuZXdfdmVjXy0+YmFzZS52ZWMsIHZlY18tPnZlYywgc2l6ZW9mIChUKSAqIGxlbl8pOwkgIFwKKyAgICB9CQkJCQkJCQkJICBcCisgIHJldHVybiBuZXdfdmVjXzsJCQkJCQkJICBcCit9CQkJCQkJCQkJICBcCisJCQkJCQkJCQkgIFwKK3N0YXRpYyBpbmxpbmUgaW50IFZFQ19PUCAoVCxBLHJlc2VydmUpCSAgICAgICAJCQkJICBcCisgICAgIChWRUMoVCxBKSAqKnZlY18sIGludCBhbGxvY18gVkVDX0NIRUNLX0RFQ0wgTUVNX1NUQVRfREVDTCkJCSAgXAorewkJCQkJCQkJCSAgXAorICBpbnQgZXh0ZW5kID0gIVZFQ19PUCAoVCxiYXNlLHNwYWNlKSAoVkVDX0JBU0UoKnZlY18pLCBhbGxvY18JCSAgXAorCQkJCSAgICAgICBWRUNfQ0hFQ0tfUEFTUyk7CQkJICBcCisJCSAgCQkJCQkJCSAgXAorICBpZiAoZXh0ZW5kKQkgIAkJCQkJCQkgIFwKKyAgICAqdmVjXyA9IChWRUMoVCxBKSAqKSB2ZWNfIyNBIyNfcF9yZXNlcnZlICgqdmVjXywgYWxsb2NfIFBBU1NfTUVNX1NUQVQpOyBcCisJCSAgCQkJCQkJCSAgXAorICByZXR1cm4gZXh0ZW5kOwkJCQkJCQkgIFwKK30JCQkJCQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorc3RhdGljIGlubGluZSBpbnQgVkVDX09QIChULEEscmVzZXJ2ZV9leGFjdCkgIAkJCQkgIFwKKyAgICAgKFZFQyhULEEpICoqdmVjXywgaW50IGFsbG9jXyBWRUNfQ0hFQ0tfREVDTCBNRU1fU1RBVF9ERUNMKQkJICBcCit7CQkJCQkJCQkJICBcCisgIGludCBleHRlbmQgPSAhVkVDX09QIChULGJhc2Usc3BhY2UpIChWRUNfQkFTRSgqdmVjXyksIGFsbG9jXwkJICBcCisJCQkJICAgICAgIFZFQ19DSEVDS19QQVNTKTsJCQkgIFwKKwkJICAJCQkJCQkJICBcCisgIGlmIChleHRlbmQpCSAgCQkJCQkJCSAgXAorICAgICp2ZWNfID0gKFZFQyhULEEpICopIHZlY18jI0EjI19wX3Jlc2VydmVfZXhhY3QgKCp2ZWNfLCBhbGxvY18JICBcCisJCQkJCQkgICAgUEFTU19NRU1fU1RBVCk7CSAgXAorCQkgIAkJCQkJCQkgIFwKKyAgcmV0dXJuIGV4dGVuZDsJCQkJCQkJICBcCit9CQkJCQkJCQkJICBcCisJCQkJCQkJCQkgIFwKK3N0YXRpYyBpbmxpbmUgdm9pZCBWRUNfT1AgKFQsQSxzYWZlX2dyb3cpCQkJCSAgXAorICAgICAoVkVDKFQsQSkgKip2ZWNfLCBpbnQgc2l6ZV8gVkVDX0NIRUNLX0RFQ0wgTUVNX1NUQVRfREVDTCkJCSAgXAorewkJCQkJCQkJCSAgXAorICBWRUNfQVNTRVJUIChzaXplXyA+PSAwCQkJCQkJICBcCisJICAgICAgJiYgVkVDX09QKFQsYmFzZSxsZW5ndGgpIFZFQ19CQVNFKCp2ZWNfKSA8PSAodW5zaWduZWQpc2l6ZV8sIFwKKwkJCQkJCSAiZ3JvdyIsIFQsIEEpOwkJICBcCisgIFZFQ19PUCAoVCxBLHJlc2VydmVfZXhhY3QpICh2ZWNfLAkJCQkJICBcCisJCQkgICAgICBzaXplXyAtIChpbnQpKCp2ZWNfID8gVkVDX0JBU0UoKnZlY18pLT5udW0gOiAwKSBcCisJCQkgICAgICBWRUNfQ0hFQ0tfUEFTUyBQQVNTX01FTV9TVEFUKTsJCSAgXAorICBWRUNfQkFTRSAoKnZlY18pLT5udW0gPSBzaXplXzsJCQkJCSAgXAorfQkJCQkJCQkJCSAgXAorCQkJCQkJCQkJICBcCitzdGF0aWMgaW5saW5lIHZvaWQgVkVDX09QIChULEEsc2FmZV9ncm93X2NsZWFyZWQpCQkJICBcCisgICAgIChWRUMoVCxBKSAqKnZlY18sIGludCBzaXplXyBWRUNfQ0hFQ0tfREVDTCBNRU1fU1RBVF9ERUNMKQkJICBcCit7CQkJCQkJCQkJICBcCisgIGludCBvbGRzaXplID0gVkVDX09QKFQsYmFzZSxsZW5ndGgpIFZFQ19CQVNFKCp2ZWNfKTsJCQkgIFwKKyAgVkVDX09QIChULEEsc2FmZV9ncm93KSAodmVjXywgc2l6ZV8gVkVDX0NIRUNLX1BBU1MgUEFTU19NRU1fU1RBVCk7CSAgXAorICBtZW1zZXQgKCYoVkVDX09QIChULGJhc2UsYWRkcmVzcykgVkVDX0JBU0UoKnZlY18pKVtvbGRzaXplXSwgMCwJICBcCisJICBzaXplb2YgKFQpICogKHNpemVfIC0gb2xkc2l6ZSkpOwkJCQkgIFwKK30JCQkJCQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorc3RhdGljIGlubGluZSBUICpWRUNfT1AgKFQsQSxzYWZlX3B1c2gpCQkJCQkgIFwKKyAgICAgKFZFQyhULEEpICoqdmVjXywgVCBvYmpfIFZFQ19DSEVDS19ERUNMIE1FTV9TVEFUX0RFQ0wpICAgICAgIAkgIFwKK3sJCQkJCQkJCQkgIFwKKyAgVkVDX09QIChULEEscmVzZXJ2ZSkgKHZlY18sIDEgVkVDX0NIRUNLX1BBU1MgUEFTU19NRU1fU1RBVCk7CQkgIFwKKwkJCQkJCQkJCSAgXAorICByZXR1cm4gVkVDX09QIChULGJhc2UscXVpY2tfcHVzaCkgKFZFQ19CQVNFKCp2ZWNfKSwgb2JqXyBWRUNfQ0hFQ0tfUEFTUyk7IFwKK30JCQkJCQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorc3RhdGljIGlubGluZSBUICpWRUNfT1AgKFQsQSxzYWZlX2luc2VydCkJCSAgICAgCSAgCSAgXAorICAgICAoVkVDKFQsQSkgKip2ZWNfLCB1bnNpZ25lZCBpeF8sIFQgb2JqXyBWRUNfQ0hFQ0tfREVDTCBNRU1fU1RBVF9ERUNMKSAgXAorewkJCQkJCQkJCSAgXAorICBWRUNfT1AgKFQsQSxyZXNlcnZlKSAodmVjXywgMSBWRUNfQ0hFQ0tfUEFTUyBQQVNTX01FTV9TVEFUKTsJCSAgXAorCQkJCQkJCQkJICBcCisgIHJldHVybiBWRUNfT1AgKFQsYmFzZSxxdWlja19pbnNlcnQpIChWRUNfQkFTRSgqdmVjXyksIGl4Xywgb2JqXwkgIFwKKyAJCQkJICAgICAgIFZFQ19DSEVDS19QQVNTKTsJCQkgIFwKK30KKworLyogVmVjdG9yIG9mIG9iamVjdC4gICovCisjZGVmaW5lIERFRl9WRUNfTyhUKQkJCQkJCQkgIFwKK1ZFQ19UX0dUWShULGJhc2UpOwkJCQkJCQkgIFwKK1ZFQ19UQShULGJhc2Usbm9uZSk7CQkJCQkJICBcCitERUZfVkVDX0ZVTkNfTyhUKQkJCQkJCQkgIFwKK3N0cnVjdCB2ZWNfc3dhbGxvd190cmFpbGluZ19zZW1pCisjZGVmaW5lIERFRl9WRUNfQUxMT0NfTyhULEEpCQkJCQkJICBcCitWRUNfVEEoVCxiYXNlLEEpOwkJCQkJCQkgIFwKK0RFRl9WRUNfQUxMT0NfRlVOQ19PKFQsQSkJCQkJCQkgIFwKK0RFRl9WRUNfTk9OQUxMT0NfRlVOQ1NfTyhULEEpCQkJCQkJICBcCitzdHJ1Y3QgdmVjX3N3YWxsb3dfdHJhaWxpbmdfc2VtaQorCisjZGVmaW5lIERFRl9WRUNfRlVOQ19PKFQpCQkJCQkJICBcCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIFZFQ19PUCAoVCxiYXNlLGxlbmd0aCkgKGNvbnN0IFZFQyhULGJhc2UpICp2ZWNfKQkgIFwKK3sJCQkJCQkJCQkgIFwKKyAgcmV0dXJuIHZlY18gPyB2ZWNfLT5udW0gOiAwOwkJCQkJCSAgXAorfQkJCQkJCQkJCSAgXAorCQkJCQkJCQkJICBcCitzdGF0aWMgaW5saW5lIFQgKlZFQ19PUCAoVCxiYXNlLGxhc3QpIChWRUMoVCxiYXNlKSAqdmVjXyBWRUNfQ0hFQ0tfREVDTCkgIFwKK3sJCQkJCQkJCQkgIFwKKyAgVkVDX0FTU0VSVCAodmVjXyAmJiB2ZWNfLT5udW0sICJsYXN0IiwgVCwgYmFzZSk7CQkJICBcCisgIAkJCQkJCQkJCSAgXAorICByZXR1cm4gJnZlY18tPnZlY1t2ZWNfLT5udW0gLSAxXTsJCQkJCSAgXAorfQkJCQkJCQkJCSAgXAorCQkJCQkJCQkJICBcCitzdGF0aWMgaW5saW5lIFQgKlZFQ19PUCAoVCxiYXNlLGluZGV4KQkJCQkJICBcCisgICAgIChWRUMoVCxiYXNlKSAqdmVjXywgdW5zaWduZWQgaXhfIFZFQ19DSEVDS19ERUNMKQkJCSAgXAorewkJCQkJCQkJCSAgXAorICBWRUNfQVNTRVJUICh2ZWNfICYmIGl4XyA8IHZlY18tPm51bSwgImluZGV4IiwgVCwgYmFzZSk7CQkgIFwKKyAgCQkJCQkJCQkJICBcCisgIHJldHVybiAmdmVjXy0+dmVjW2l4X107CQkJCQkJICBcCit9CQkJCQkJCQkJICBcCisJCQkJCQkJCQkgIFwKK3N0YXRpYyBpbmxpbmUgaW50IFZFQ19PUCAoVCxiYXNlLGl0ZXJhdGUpCQkJICAgICAJICBcCisgICAgIChWRUMoVCxiYXNlKSAqdmVjXywgdW5zaWduZWQgaXhfLCBUICoqcHRyKQkJCQkgIFwKK3sJCQkJCQkJCQkgIFwKKyAgaWYgKHZlY18gJiYgaXhfIDwgdmVjXy0+bnVtKQkJCQkJCSAgXAorICAgIHsJCQkJCQkJCQkgIFwKKyAgICAgICpwdHIgPSAmdmVjXy0+dmVjW2l4X107CQkJCQkJICBcCisgICAgICByZXR1cm4gMTsJCQkJCQkJCSAgXAorICAgIH0JCQkJCQkJCQkgIFwKKyAgZWxzZQkJCQkJCQkJCSAgXAorICAgIHsJCQkJCQkJCQkgIFwKKyAgICAgICpwdHIgPSAwOwkJCQkJCQkJICBcCisgICAgICByZXR1cm4gMDsJCQkJCQkJCSAgXAorICAgIH0JCQkJCQkJCQkgIFwKK30JCQkJCQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorc3RhdGljIGlubGluZSBzaXplX3QgVkVDX09QIChULGJhc2UsZW1iZWRkZWRfc2l6ZSkJCQkgIFwKKyAgICAgKGludCBhbGxvY18pCQkJCQkJCSAgXAorewkJCQkJCQkJCSAgXAorICByZXR1cm4gb2Zmc2V0b2YgKFZFQyhULGJhc2UpLHZlYykgKyBhbGxvY18gKiBzaXplb2YoVCk7CQkgIFwKK30JCQkJCQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorc3RhdGljIGlubGluZSB2b2lkIFZFQ19PUCAoVCxiYXNlLGVtYmVkZGVkX2luaXQpCQkJICBcCisgICAgIChWRUMoVCxiYXNlKSAqdmVjXywgaW50IGFsbG9jXykJCQkJCSAgXAorewkJCQkJCQkJCSAgXAorICB2ZWNfLT5udW0gPSAwOwkJCQkJCQkgIFwKKyAgdmVjXy0+YWxsb2MgPSBhbGxvY187CQkJCQkJCSAgXAorfQkJCQkJCQkJCSAgXAorCQkJCQkJCQkJICBcCitzdGF0aWMgaW5saW5lIGludCBWRUNfT1AgKFQsYmFzZSxzcGFjZSkJICAgICAgIAkJCQkgIFwKKyAgICAgKFZFQyhULGJhc2UpICp2ZWNfLCBpbnQgYWxsb2NfIFZFQ19DSEVDS19ERUNMKQkJCSAgXAorewkJCQkJCQkJCSAgXAorICBWRUNfQVNTRVJUIChhbGxvY18gPj0gMCwgInNwYWNlIiwgVCwgYmFzZSk7CQkJCSAgXAorICByZXR1cm4gdmVjXyA/IHZlY18tPmFsbG9jIC0gdmVjXy0+bnVtID49ICh1bnNpZ25lZClhbGxvY18gOiAhYWxsb2NfOwkgIFwKK30JCQkJCQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorc3RhdGljIGlubGluZSBUICpWRUNfT1AgKFQsYmFzZSxxdWlja19wdXNoKQkJCQkgIFwKKyAgICAgKFZFQyhULGJhc2UpICp2ZWNfLCBjb25zdCBUICpvYmpfIFZFQ19DSEVDS19ERUNMKQkJCSAgXAorewkJCQkJCQkJCSAgXAorICBUICpzbG90XzsJCQkJCQkJCSAgXAorICAJCQkJCQkJCQkgIFwKKyAgVkVDX0FTU0VSVCAodmVjXy0+bnVtIDwgdmVjXy0+YWxsb2MsICJwdXNoIiwgVCwgYmFzZSk7CQkgIFwKKyAgc2xvdF8gPSAmdmVjXy0+dmVjW3ZlY18tPm51bSsrXTsJCQkJCSAgXAorICBpZiAob2JqXykJCQkJCQkJCSAgXAorICAgICpzbG90XyA9ICpvYmpfOwkJCQkJCQkgIFwKKyAgCQkJCQkJCQkJICBcCisgIHJldHVybiBzbG90XzsJCQkJCQkJCSAgXAorfQkJCQkJCQkJCSAgXAorCQkJCQkJCQkJICBcCitzdGF0aWMgaW5saW5lIHZvaWQgVkVDX09QIChULGJhc2UscG9wKSAoVkVDKFQsYmFzZSkgKnZlY18gVkVDX0NIRUNLX0RFQ0wpIFwKK3sJCQkJCQkJCQkgIFwKKyAgVkVDX0FTU0VSVCAodmVjXy0+bnVtLCAicG9wIiwgVCwgYmFzZSk7CQkJCSAgXAorICAtLXZlY18tPm51bTsJCQkJCQkJCSAgXAorfQkJCQkJCQkJCSAgXAorCQkJCQkJCQkJICBcCitzdGF0aWMgaW5saW5lIHZvaWQgVkVDX09QIChULGJhc2UsdHJ1bmNhdGUpCQkJCSAgXAorICAgICAoVkVDKFQsYmFzZSkgKnZlY18sIHVuc2lnbmVkIHNpemVfIFZFQ19DSEVDS19ERUNMKQkJCSAgXAorewkJCQkJCQkJCSAgXAorICBWRUNfQVNTRVJUICh2ZWNfID8gdmVjXy0+bnVtID49IHNpemVfIDogIXNpemVfLCAidHJ1bmNhdGUiLCBULCBiYXNlKTsJICBcCisgIGlmICh2ZWNfKQkJCQkJCQkJICBcCisgICAgdmVjXy0+bnVtID0gc2l6ZV87CQkJCQkJCSAgXAorfQkJCQkJCQkJCSAgXAorCQkJCQkJCQkJICBcCitzdGF0aWMgaW5saW5lIFQgKlZFQ19PUCAoVCxiYXNlLHJlcGxhY2UpCQkJCSAgXAorICAgICAoVkVDKFQsYmFzZSkgKnZlY18sIHVuc2lnbmVkIGl4XywgY29uc3QgVCAqb2JqXyBWRUNfQ0hFQ0tfREVDTCkJICBcCit7CQkJCQkJCQkJICBcCisgIFQgKnNsb3RfOwkJCQkJCQkJICBcCisJCQkJCQkJCQkgIFwKKyAgVkVDX0FTU0VSVCAoaXhfIDwgdmVjXy0+bnVtLCAicmVwbGFjZSIsIFQsIGJhc2UpOwkJCSAgXAorICBzbG90XyA9ICZ2ZWNfLT52ZWNbaXhfXTsJCQkJCQkgIFwKKyAgaWYgKG9ial8pCQkJCQkJCQkgIFwKKyAgICAqc2xvdF8gPSAqb2JqXzsJCQkJCQkJICBcCisJCQkJCQkJCQkgIFwKKyAgcmV0dXJuIHNsb3RfOwkJCQkJCQkJICBcCit9CQkJCQkJCQkJICBcCisJCQkJCQkJCQkgIFwKK3N0YXRpYyBpbmxpbmUgVCAqVkVDX09QIChULGJhc2UscXVpY2tfaW5zZXJ0KQkJCQkgIFwKKyAgICAgKFZFQyhULGJhc2UpICp2ZWNfLCB1bnNpZ25lZCBpeF8sIGNvbnN0IFQgKm9ial8gVkVDX0NIRUNLX0RFQ0wpCSAgXAorewkJCQkJCQkJCSAgXAorICBUICpzbG90XzsJCQkJCQkJCSAgXAorCQkJCQkJCQkJICBcCisgIFZFQ19BU1NFUlQgKHZlY18tPm51bSA8IHZlY18tPmFsbG9jLCAiaW5zZXJ0IiwgVCwgYmFzZSk7CQkgIFwKKyAgVkVDX0FTU0VSVCAoaXhfIDw9IHZlY18tPm51bSwgImluc2VydCIsIFQsIGJhc2UpOwkJCSAgXAorICBzbG90XyA9ICZ2ZWNfLT52ZWNbaXhfXTsJCQkJCQkgIFwKKyAgbWVtbW92ZSAoc2xvdF8gKyAxLCBzbG90XywgKHZlY18tPm51bSsrIC0gaXhfKSAqIHNpemVvZiAoVCkpOwkJICBcCisgIGlmIChvYmpfKQkJCQkJCQkJICBcCisgICAgKnNsb3RfID0gKm9ial87CQkJCQkJCSAgXAorICAJCQkJCQkJCQkgIFwKKyAgcmV0dXJuIHNsb3RfOwkJCQkJCQkJICBcCit9CQkJCQkJCQkJICBcCisJCQkJCQkJCQkgIFwKK3N0YXRpYyBpbmxpbmUgdm9pZCBWRUNfT1AgKFQsYmFzZSxvcmRlcmVkX3JlbW92ZSkJCQkgIFwKKyAgICAgKFZFQyhULGJhc2UpICp2ZWNfLCB1bnNpZ25lZCBpeF8gVkVDX0NIRUNLX0RFQ0wpCQkJICBcCit7CQkJCQkJCQkJICBcCisgIFQgKnNsb3RfOwkJCQkJCQkJICBcCisJCQkJCQkJCQkgIFwKKyAgVkVDX0FTU0VSVCAoaXhfIDwgdmVjXy0+bnVtLCAicmVtb3ZlIiwgVCwgYmFzZSk7CQkJICBcCisgIHNsb3RfID0gJnZlY18tPnZlY1tpeF9dOwkJCQkJCSAgXAorICBtZW1tb3ZlIChzbG90Xywgc2xvdF8gKyAxLCAoLS12ZWNfLT5udW0gLSBpeF8pICogc2l6ZW9mIChUKSk7CQkgIFwKK30JCQkJCQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorc3RhdGljIGlubGluZSB2b2lkIFZFQ19PUCAoVCxiYXNlLHVub3JkZXJlZF9yZW1vdmUpCQkJICBcCisgICAgIChWRUMoVCxiYXNlKSAqdmVjXywgdW5zaWduZWQgaXhfIFZFQ19DSEVDS19ERUNMKQkJCSAgXAorewkJCQkJCQkJCSAgXAorICBWRUNfQVNTRVJUIChpeF8gPCB2ZWNfLT5udW0sICJyZW1vdmUiLCBULCBiYXNlKTsJCQkgIFwKKyAgdmVjXy0+dmVjW2l4X10gPSB2ZWNfLT52ZWNbLS12ZWNfLT5udW1dOwkJCQkgIFwKK30JCQkJCQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorc3RhdGljIGlubGluZSB2b2lkIFZFQ19PUCAoVCxiYXNlLGJsb2NrX3JlbW92ZSkJCQkJICBcCisgICAgIChWRUMoVCxiYXNlKSAqdmVjXywgdW5zaWduZWQgaXhfLCB1bnNpZ25lZCBsZW5fIFZFQ19DSEVDS19ERUNMKQkgIFwKK3sJCQkJCQkJCQkgIFwKKyAgVCAqc2xvdF87CQkJCQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorICBWRUNfQVNTRVJUIChpeF8gKyBsZW5fIDw9IHZlY18tPm51bSwgImJsb2NrX3JlbW92ZSIsIFQsIGJhc2UpOwkgIFwKKyAgc2xvdF8gPSAmdmVjXy0+dmVjW2l4X107CQkJCQkJICBcCisgIHZlY18tPm51bSAtPSBsZW5fOwkJCQkJCQkgIFwKKyAgbWVtbW92ZSAoc2xvdF8sIHNsb3RfICsgbGVuXywgKHZlY18tPm51bSAtIGl4XykgKiBzaXplb2YgKFQpKTsJICBcCit9CQkJCQkJCQkJICBcCisJCQkJCQkJCQkgIFwKK3N0YXRpYyBpbmxpbmUgVCAqVkVDX09QIChULGJhc2UsYWRkcmVzcykJCQkJICBcCisgICAgIChWRUMoVCxiYXNlKSAqdmVjXykJCQkJCQkgIFwKK3sJCQkJCQkJCQkgIFwKKyAgcmV0dXJuIHZlY18gPyB2ZWNfLT52ZWMgOiAwOwkJCQkJCSAgXAorfQkJCQkJCQkJCSAgXAorCQkJCQkJCQkJICBcCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIFZFQ19PUCAoVCxiYXNlLGxvd2VyX2JvdW5kKQkJCSAgXAorICAgICAoVkVDKFQsYmFzZSkgKnZlY18sIGNvbnN0IFQgKm9ial8sCQkJCQkgIFwKKyAgICAgIGJvb2wgKCpsZXNzdGhhbl8pKGNvbnN0IFQgKiwgY29uc3QgVCAqKSBWRUNfQ0hFQ0tfREVDTCkJCSAgXAorewkJCQkJCQkJCSAgXAorICAgdW5zaWduZWQgaW50IGxlbl8gPSBWRUNfT1AgKFQsIGJhc2UsIGxlbmd0aCkgKHZlY18pOwkJCSAgXAorICAgdW5zaWduZWQgaW50IGhhbGZfLCBtaWRkbGVfOwkJCQkJCSAgXAorICAgdW5zaWduZWQgaW50IGZpcnN0XyA9IDA7CQkJCQkJICBcCisgICB3aGlsZSAobGVuXyA+IDApCQkJCQkJCSAgXAorICAgICB7CQkJCQkJCQkJICBcCisgICAgICAgIFQgKm1pZGRsZV9lbGVtXzsJCQkJCQkgIFwKKyAgICAgICAgaGFsZl8gPSBsZW5fID4+IDE7CQkJCQkJICBcCisgICAgICAgIG1pZGRsZV8gPSBmaXJzdF87CQkJCQkJICBcCisgICAgICAgIG1pZGRsZV8gKz0gaGFsZl87CQkJCQkJICBcCisgICAgICAgIG1pZGRsZV9lbGVtXyA9IFZFQ19PUCAoVCxiYXNlLGluZGV4KSAodmVjXywgbWlkZGxlXyBWRUNfQ0hFQ0tfUEFTUyk7IFwKKyAgICAgICAgaWYgKGxlc3N0aGFuXyAobWlkZGxlX2VsZW1fLCBvYmpfKSkJCQkJICBcCisgICAgICAgICAgewkJCQkJCQkJICBcCisgICAgICAgICAgICAgZmlyc3RfID0gbWlkZGxlXzsJCQkJCQkgIFwKKyAgICAgICAgICAgICArK2ZpcnN0XzsJCQkJCQkJICBcCisgICAgICAgICAgICAgbGVuXyA9IGxlbl8gLSBoYWxmXyAtIDE7CQkJCQkgIFwKKyAgICAgICAgICB9CQkJCQkJCQkgIFwKKyAgICAgICAgZWxzZQkJCQkJCQkJICBcCisgICAgICAgICAgbGVuXyA9IGhhbGZfOwkJCQkJCQkgIFwKKyAgICAgfQkJCQkJCQkJCSAgXAorICAgcmV0dXJuIGZpcnN0XzsJCQkJCQkJICBcCit9CisKKyNkZWZpbmUgREVGX1ZFQ19BTExPQ19GVU5DX08oVCxBKQkJCQkJICBcCitzdGF0aWMgaW5saW5lIFZFQyhULEEpICpWRUNfT1AgKFQsQSxhbGxvYykgICAgICAJCQkgIFwKKyAgICAgKGludCBhbGxvY18gTUVNX1NUQVRfREVDTCkJCQkJCQkgIFwKK3sJCQkJCQkJCQkgIFwKKyAgcmV0dXJuIChWRUMoVCxBKSAqKSB2ZWNfIyNBIyNfb19yZXNlcnZlX2V4YWN0IChOVUxMLCBhbGxvY18sCQkgIFwKKwkJCQkJCSBvZmZzZXRvZiAoVkVDKFQsQSksYmFzZS52ZWMpLCBcCisJCQkJCQkgc2l6ZW9mIChUKQkJICBcCisJCQkJCQkgUEFTU19NRU1fU1RBVCk7CSAgXAorfQorCisjZGVmaW5lIERFRl9WRUNfTk9OQUxMT0NfRlVOQ1NfTyhULEEpCQkJCQkgIFwKK3N0YXRpYyBpbmxpbmUgVkVDKFQsQSkgKlZFQ19PUCAoVCxBLGNvcHkpIChWRUMoVCxiYXNlKSAqdmVjXyBNRU1fU1RBVF9ERUNMKSBcCit7CQkJCQkJCQkJICBcCisgIHNpemVfdCBsZW5fID0gdmVjXyA/IHZlY18tPm51bSA6IDA7CQkJCQkgIFwKKyAgVkVDIChULEEpICpuZXdfdmVjXyA9IE5VTEw7CQkJCQkJICBcCisJCQkJCQkJCQkgIFwKKyAgaWYgKGxlbl8pCQkJCQkJCQkgIFwKKyAgICB7CQkJCQkJCQkJICBcCisgICAgICBuZXdfdmVjXyA9IChWRUMgKFQsQSkgKikodmVjXyMjQSMjX29fcmVzZXJ2ZV9leGFjdAkJICBcCisJCQkgICAgICAgKE5VTEwsIGxlbl8sCQkJCSAgXAorCQkJCW9mZnNldG9mIChWRUMoVCxBKSxiYXNlLnZlYyksIHNpemVvZiAoVCkgIFwKKwkJCQlQQVNTX01FTV9TVEFUKSk7CQkJICBcCisJCQkJCQkJCQkgIFwKKyAgICAgIG5ld192ZWNfLT5iYXNlLm51bSA9IGxlbl87CQkJCQkgIFwKKyAgICAgIG1lbWNweSAobmV3X3ZlY18tPmJhc2UudmVjLCB2ZWNfLT52ZWMsIHNpemVvZiAoVCkgKiBsZW5fKTsJICBcCisgICAgfQkJCQkJCQkJCSAgXAorICByZXR1cm4gbmV3X3ZlY187CQkJCQkJCSAgXAorfQkJCQkJCQkJCSAgXAorCQkJCQkJCQkJICBcCitzdGF0aWMgaW5saW5lIHZvaWQgVkVDX09QIChULEEsZnJlZSkJCQkJCSAgXAorICAgICAoVkVDKFQsQSkgKip2ZWNfKQkJCQkJCQkgIFwKK3sJCQkJCQkJCQkgIFwKKyAgaWYgKCp2ZWNfKQkJCQkJCQkJICBcCisgICAgdmVjXyMjQSMjX2ZyZWUgKCp2ZWNfKTsJCQkJCQkgIFwKKyAgKnZlY18gPSBOVUxMOwkJCQkJCQkJICBcCit9CQkJCQkJCQkJICBcCisJCQkJCQkJCQkgIFwKK3N0YXRpYyBpbmxpbmUgaW50IFZFQ19PUCAoVCxBLHJlc2VydmUpCSAgIAkgICAgCQkJICBcCisgICAgIChWRUMoVCxBKSAqKnZlY18sIGludCBhbGxvY18gVkVDX0NIRUNLX0RFQ0wgTUVNX1NUQVRfREVDTCkJCSAgXAorewkJCQkJCQkJCSAgXAorICBpbnQgZXh0ZW5kID0gIVZFQ19PUCAoVCxiYXNlLHNwYWNlKSAoVkVDX0JBU0UoKnZlY18pLCBhbGxvY18JCSAgXAorCQkJCSAgICAgICBWRUNfQ0hFQ0tfUEFTUyk7CQkJICBcCisJCQkJCQkJCQkgIFwKKyAgaWYgKGV4dGVuZCkJCQkJCQkJCSAgXAorICAgICp2ZWNfID0gKFZFQyhULEEpICopIHZlY18jI0EjI19vX3Jlc2VydmUgKCp2ZWNfLCBhbGxvY18sCQkgIFwKKwkJCSAgIAkJICAgICAgb2Zmc2V0b2YgKFZFQyhULEEpLGJhc2UudmVjKSxcCisgCQkJCQkgICAgICBzaXplb2YgKFQpCQkgIFwKKwkJCSAgIAkJICAgICAgUEFTU19NRU1fU1RBVCk7CQkgIFwKKwkJCQkJCQkJCSAgXAorICByZXR1cm4gZXh0ZW5kOwkJCQkJCQkgIFwKK30JCQkJCQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorc3RhdGljIGlubGluZSBpbnQgVkVDX09QIChULEEscmVzZXJ2ZV9leGFjdCkgICAJICAgIAkJCSAgXAorICAgICAoVkVDKFQsQSkgKip2ZWNfLCBpbnQgYWxsb2NfIFZFQ19DSEVDS19ERUNMIE1FTV9TVEFUX0RFQ0wpCQkgIFwKK3sJCQkJCQkJCQkgIFwKKyAgaW50IGV4dGVuZCA9ICFWRUNfT1AgKFQsYmFzZSxzcGFjZSkgKFZFQ19CQVNFKCp2ZWNfKSwgYWxsb2NfCQkgIFwKKwkJCQkgICAgICAgVkVDX0NIRUNLX1BBU1MpOwkJCSAgXAorCQkJCQkJCQkJICBcCisgIGlmIChleHRlbmQpCQkJCQkJCQkgIFwKKyAgICAqdmVjXyA9IChWRUMoVCxBKSAqKSB2ZWNfIyNBIyNfb19yZXNlcnZlX2V4YWN0CQkJICBcCisJCQkgKCp2ZWNfLCBhbGxvY18sCQkJCSAgXAorCQkJICBvZmZzZXRvZiAoVkVDKFQsQSksYmFzZS52ZWMpLAkJCSAgXAorCQkJICBzaXplb2YgKFQpIFBBU1NfTUVNX1NUQVQpOwkJCSAgXAorCQkJCQkJCQkJICBcCisgIHJldHVybiBleHRlbmQ7CQkJCQkJCSAgXAorfQkJCQkJCQkJCSAgXAorCQkJCQkJCQkJICBcCitzdGF0aWMgaW5saW5lIHZvaWQgVkVDX09QIChULEEsc2FmZV9ncm93KQkJCQkgIFwKKyAgICAgKFZFQyhULEEpICoqdmVjXywgaW50IHNpemVfIFZFQ19DSEVDS19ERUNMIE1FTV9TVEFUX0RFQ0wpCQkgIFwKK3sJCQkJCQkJCQkgIFwKKyAgVkVDX0FTU0VSVCAoc2l6ZV8gPj0gMAkJCQkJCSAgXAorCSAgICAgICYmIFZFQ19PUChULGJhc2UsbGVuZ3RoKSBWRUNfQkFTRSgqdmVjXykgPD0gKHVuc2lnbmVkKXNpemVfLCBcCisJCQkJCQkgImdyb3ciLCBULCBBKTsJCSAgXAorICBWRUNfT1AgKFQsQSxyZXNlcnZlX2V4YWN0KSAodmVjXywJCQkJCSAgXAorCQkJICAgICAgc2l6ZV8gLSAoaW50KSgqdmVjXyA/IFZFQ19CQVNFKCp2ZWNfKS0+bnVtIDogMCkgXAorCQkJICAgICAgVkVDX0NIRUNLX1BBU1MgUEFTU19NRU1fU1RBVCk7CQkgIFwKKyAgVkVDX0JBU0UgKCp2ZWNfKS0+bnVtID0gc2l6ZV87CQkJCQkgIFwKK30JCQkJCQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorc3RhdGljIGlubGluZSB2b2lkIFZFQ19PUCAoVCxBLHNhZmVfZ3Jvd19jbGVhcmVkKQkJCSAgXAorICAgICAoVkVDKFQsQSkgKip2ZWNfLCBpbnQgc2l6ZV8gVkVDX0NIRUNLX0RFQ0wgTUVNX1NUQVRfREVDTCkJCSAgXAorewkJCQkJCQkJCSAgXAorICBpbnQgb2xkc2l6ZSA9IFZFQ19PUChULGJhc2UsbGVuZ3RoKSBWRUNfQkFTRSgqdmVjXyk7CQkJICBcCisgIFZFQ19PUCAoVCxBLHNhZmVfZ3JvdykgKHZlY18sIHNpemVfIFZFQ19DSEVDS19QQVNTIFBBU1NfTUVNX1NUQVQpOwkgIFwKKyAgbWVtc2V0ICgmKFZFQ19PUCAoVCxiYXNlLGFkZHJlc3MpIFZFQ19CQVNFKCp2ZWNfKSlbb2xkc2l6ZV0sIDAsCSAgXAorCSAgc2l6ZW9mIChUKSAqIChzaXplXyAtIG9sZHNpemUpKTsJCQkJICBcCit9CQkJCQkJCQkJICBcCisJCQkJCQkJCQkgIFwKK3N0YXRpYyBpbmxpbmUgVCAqVkVDX09QIChULEEsc2FmZV9wdXNoKQkJCQkJICBcCisgICAgIChWRUMoVCxBKSAqKnZlY18sIGNvbnN0IFQgKm9ial8gVkVDX0NIRUNLX0RFQ0wgTUVNX1NUQVRfREVDTCkJICBcCit7CQkJCQkJCQkJICBcCisgIFZFQ19PUCAoVCxBLHJlc2VydmUpICh2ZWNfLCAxIFZFQ19DSEVDS19QQVNTIFBBU1NfTUVNX1NUQVQpOwkJICBcCisJCQkJCQkJCQkgIFwKKyAgcmV0dXJuIFZFQ19PUCAoVCxiYXNlLHF1aWNrX3B1c2gpIChWRUNfQkFTRSgqdmVjXyksIG9ial8gVkVDX0NIRUNLX1BBU1MpOyAgXAorfQkJCQkJCQkJCSAgXAorCQkJCQkJCQkJICBcCitzdGF0aWMgaW5saW5lIFQgKlZFQ19PUCAoVCxBLHNhZmVfaW5zZXJ0KQkJICAgICAJICAJICBcCisgICAgIChWRUMoVCxBKSAqKnZlY18sIHVuc2lnbmVkIGl4XywgY29uc3QgVCAqb2JqXwkJCSAgXAorIAkJVkVDX0NIRUNLX0RFQ0wgTUVNX1NUQVRfREVDTCkJCQkJICBcCit7CQkJCQkJCQkJICBcCisgIFZFQ19PUCAoVCxBLHJlc2VydmUpICh2ZWNfLCAxIFZFQ19DSEVDS19QQVNTIFBBU1NfTUVNX1NUQVQpOwkJICBcCisJCQkJCQkJCQkgIFwKKyAgcmV0dXJuIFZFQ19PUCAoVCxiYXNlLHF1aWNrX2luc2VydCkgKFZFQ19CQVNFKCp2ZWNfKSwgaXhfLCBvYmpfCSAgXAorCQkJCSAgICAgICBWRUNfQ0hFQ0tfUEFTUyk7CQkJICBcCit9CisKKyNkZWZpbmUgREVGX1ZFQ19BTExPQ19GVU5DX0koVCxBKQkJCQkJICBcCitzdGF0aWMgaW5saW5lIFZFQyhULEEpICpWRUNfT1AgKFQsQSxhbGxvYykgICAgICAJCQkgIFwKKyAgICAgKGludCBhbGxvY18gTUVNX1NUQVRfREVDTCkJCQkJCQkgIFwKK3sJCQkJCQkJCQkgIFwKKyAgcmV0dXJuIChWRUMoVCxBKSAqKSB2ZWNfIyNBIyNfb19yZXNlcnZlX2V4YWN0CQkJCSAgXAorCQkgICAgICAoTlVMTCwgYWxsb2NfLCBvZmZzZXRvZiAoVkVDKFQsQSksYmFzZS52ZWMpLAkgIFwKKwkJICAgICAgIHNpemVvZiAoVCkgUEFTU19NRU1fU1RBVCk7CQkJICBcCit9CisKKyNkZWZpbmUgREVGX1ZFQ19OT05BTExPQ19GVU5DU19JKFQsQSkJCQkJCSAgXAorc3RhdGljIGlubGluZSBWRUMoVCxBKSAqVkVDX09QIChULEEsY29weSkgKFZFQyhULGJhc2UpICp2ZWNfIE1FTV9TVEFUX0RFQ0wpIFwKK3sJCQkJCQkJCQkgIFwKKyAgc2l6ZV90IGxlbl8gPSB2ZWNfID8gdmVjXy0+bnVtIDogMDsJCQkJCSAgXAorICBWRUMgKFQsQSkgKm5ld192ZWNfID0gTlVMTDsJCQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorICBpZiAobGVuXykJCQkJCQkJCSAgXAorICAgIHsJCQkJCQkJCQkgIFwKKyAgICAgIG5ld192ZWNfID0gKFZFQyAoVCxBKSAqKSh2ZWNfIyNBIyNfb19yZXNlcnZlX2V4YWN0CQkgIFwKKwkJCSAgICAgICAoTlVMTCwgbGVuXywJCQkJICBcCisJCQkJb2Zmc2V0b2YgKFZFQyhULEEpLGJhc2UudmVjKSwgc2l6ZW9mIChUKSAgXAorCQkJCVBBU1NfTUVNX1NUQVQpKTsJCQkgIFwKKwkJCQkJCQkJCSAgXAorICAgICAgbmV3X3ZlY18tPmJhc2UubnVtID0gbGVuXzsJCQkJCSAgXAorICAgICAgbWVtY3B5IChuZXdfdmVjXy0+YmFzZS52ZWMsIHZlY18tPnZlYywgc2l6ZW9mIChUKSAqIGxlbl8pOwkgIFwKKyAgICB9CQkJCQkJCQkJICBcCisgIHJldHVybiBuZXdfdmVjXzsJCQkJCQkJICBcCit9CQkJCQkJCQkJICBcCisJCQkJCQkJCQkgIFwKK3N0YXRpYyBpbmxpbmUgdm9pZCBWRUNfT1AgKFQsQSxmcmVlKQkJCQkJICBcCisgICAgIChWRUMoVCxBKSAqKnZlY18pCQkJCQkJCSAgXAorewkJCQkJCQkJCSAgXAorICBpZiAoKnZlY18pCQkJCQkJCQkgIFwKKyAgICB2ZWNfIyNBIyNfZnJlZSAoKnZlY18pOwkJCQkJCSAgXAorICAqdmVjXyA9IE5VTEw7CQkJCQkJCQkgIFwKK30JCQkJCQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorc3RhdGljIGlubGluZSBpbnQgVkVDX09QIChULEEscmVzZXJ2ZSkJICAgCSAgICAJCQkgIFwKKyAgICAgKFZFQyhULEEpICoqdmVjXywgaW50IGFsbG9jXyBWRUNfQ0hFQ0tfREVDTCBNRU1fU1RBVF9ERUNMKQkJICBcCit7CQkJCQkJCQkJICBcCisgIGludCBleHRlbmQgPSAhVkVDX09QIChULGJhc2Usc3BhY2UpIChWRUNfQkFTRSgqdmVjXyksIGFsbG9jXwkJICBcCisJCQkJICAgICAgIFZFQ19DSEVDS19QQVNTKTsJCQkgIFwKKwkJCQkJCQkJCSAgXAorICBpZiAoZXh0ZW5kKQkJCQkJCQkJICBcCisgICAgKnZlY18gPSAoVkVDKFQsQSkgKikgdmVjXyMjQSMjX29fcmVzZXJ2ZSAoKnZlY18sIGFsbG9jXywJCSAgXAorCQkJICAgCQkgICAgICBvZmZzZXRvZiAoVkVDKFQsQSksYmFzZS52ZWMpLFwKKyAJCQkJCSAgICAgIHNpemVvZiAoVCkJCSAgXAorCQkJICAgCQkgICAgICBQQVNTX01FTV9TVEFUKTsJCSAgXAorCQkJCQkJCQkJICBcCisgIHJldHVybiBleHRlbmQ7CQkJCQkJCSAgXAorfQkJCQkJCQkJCSAgXAorCQkJCQkJCQkJICBcCitzdGF0aWMgaW5saW5lIGludCBWRUNfT1AgKFQsQSxyZXNlcnZlX2V4YWN0KSAgIAkgICAgCQkJICBcCisgICAgIChWRUMoVCxBKSAqKnZlY18sIGludCBhbGxvY18gVkVDX0NIRUNLX0RFQ0wgTUVNX1NUQVRfREVDTCkJCSAgXAorewkJCQkJCQkJCSAgXAorICBpbnQgZXh0ZW5kID0gIVZFQ19PUCAoVCxiYXNlLHNwYWNlKSAoVkVDX0JBU0UoKnZlY18pLCBhbGxvY18JCSAgXAorCQkJCSAgICAgICBWRUNfQ0hFQ0tfUEFTUyk7CQkJICBcCisJCQkJCQkJCQkgIFwKKyAgaWYgKGV4dGVuZCkJCQkJCQkJCSAgXAorICAgICp2ZWNfID0gKFZFQyhULEEpICopIHZlY18jI0EjI19vX3Jlc2VydmVfZXhhY3QJCQkgIFwKKwkJCSAoKnZlY18sIGFsbG9jXywgb2Zmc2V0b2YgKFZFQyhULEEpLGJhc2UudmVjKSwJICBcCisJCQkgIHNpemVvZiAoVCkgUEFTU19NRU1fU1RBVCk7CQkJICBcCisJCQkJCQkJCQkgIFwKKyAgcmV0dXJuIGV4dGVuZDsJCQkJCQkJICBcCit9CQkJCQkJCQkJICBcCisJCQkJCQkJCQkgIFwKK3N0YXRpYyBpbmxpbmUgdm9pZCBWRUNfT1AgKFQsQSxzYWZlX2dyb3cpCQkJCSAgXAorICAgICAoVkVDKFQsQSkgKip2ZWNfLCBpbnQgc2l6ZV8gVkVDX0NIRUNLX0RFQ0wgTUVNX1NUQVRfREVDTCkJCSAgXAorewkJCQkJCQkJCSAgXAorICBWRUNfQVNTRVJUIChzaXplXyA+PSAwCQkJCQkJICBcCisJICAgICAgJiYgVkVDX09QKFQsYmFzZSxsZW5ndGgpIFZFQ19CQVNFKCp2ZWNfKSA8PSAodW5zaWduZWQpc2l6ZV8sIFwKKwkJCQkJCSAiZ3JvdyIsIFQsIEEpOwkJICBcCisgIFZFQ19PUCAoVCxBLHJlc2VydmVfZXhhY3QpICh2ZWNfLAkJCQkJICBcCisJCQkgICAgICBzaXplXyAtIChpbnQpKCp2ZWNfID8gVkVDX0JBU0UoKnZlY18pLT5udW0gOiAwKSBcCisJCQkgICAgICBWRUNfQ0hFQ0tfUEFTUyBQQVNTX01FTV9TVEFUKTsJCSAgXAorICBWRUNfQkFTRSAoKnZlY18pLT5udW0gPSBzaXplXzsJCQkJCSAgXAorfQkJCQkJCQkJCSAgXAorCQkJCQkJCQkJICBcCitzdGF0aWMgaW5saW5lIHZvaWQgVkVDX09QIChULEEsc2FmZV9ncm93X2NsZWFyZWQpCQkJICBcCisgICAgIChWRUMoVCxBKSAqKnZlY18sIGludCBzaXplXyBWRUNfQ0hFQ0tfREVDTCBNRU1fU1RBVF9ERUNMKQkJICBcCit7CQkJCQkJCQkJICBcCisgIGludCBvbGRzaXplID0gVkVDX09QKFQsYmFzZSxsZW5ndGgpIFZFQ19CQVNFKCp2ZWNfKTsJCQkgIFwKKyAgVkVDX09QIChULEEsc2FmZV9ncm93KSAodmVjXywgc2l6ZV8gVkVDX0NIRUNLX1BBU1MgUEFTU19NRU1fU1RBVCk7CSAgXAorICBtZW1zZXQgKCYoVkVDX09QIChULGJhc2UsYWRkcmVzcykgVkVDX0JBU0UoKnZlY18pKVtvbGRzaXplXSwgMCwJICBcCisJICBzaXplb2YgKFQpICogKHNpemVfIC0gb2xkc2l6ZSkpOwkJCQkgIFwKK30JCQkJCQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorc3RhdGljIGlubGluZSBUICpWRUNfT1AgKFQsQSxzYWZlX3B1c2gpCQkJCQkgIFwKKyAgICAgKFZFQyhULEEpICoqdmVjXywgY29uc3QgVCBvYmpfIFZFQ19DSEVDS19ERUNMIE1FTV9TVEFUX0RFQ0wpCSAgXAorewkJCQkJCQkJCSAgXAorICBWRUNfT1AgKFQsQSxyZXNlcnZlKSAodmVjXywgMSBWRUNfQ0hFQ0tfUEFTUyBQQVNTX01FTV9TVEFUKTsJCSAgXAorCQkJCQkJCQkJICBcCisgIHJldHVybiBWRUNfT1AgKFQsYmFzZSxxdWlja19wdXNoKSAoVkVDX0JBU0UoKnZlY18pLCBvYmpfIFZFQ19DSEVDS19QQVNTKTsgIFwKK30JCQkJCQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorc3RhdGljIGlubGluZSBUICpWRUNfT1AgKFQsQSxzYWZlX2luc2VydCkJCSAgICAgCSAgCSAgXAorICAgICAoVkVDKFQsQSkgKip2ZWNfLCB1bnNpZ25lZCBpeF8sIGNvbnN0IFQgb2JqXwkJCSAgXAorIAkJVkVDX0NIRUNLX0RFQ0wgTUVNX1NUQVRfREVDTCkJCQkJICBcCit7CQkJCQkJCQkJICBcCisgIFZFQ19PUCAoVCxBLHJlc2VydmUpICh2ZWNfLCAxIFZFQ19DSEVDS19QQVNTIFBBU1NfTUVNX1NUQVQpOwkJICBcCisJCQkJCQkJCQkgIFwKKyAgcmV0dXJuIFZFQ19PUCAoVCxiYXNlLHF1aWNrX2luc2VydCkgKFZFQ19CQVNFKCp2ZWNfKSwgaXhfLCBvYmpfCSAgXAorCQkJCSAgICAgICBWRUNfQ0hFQ0tfUEFTUyk7CQkJICBcCit9CisKKy8qIFdlIHN1cHBvcnQgYSB2ZWN0b3Igd2hpY2ggc3RhcnRzIG91dCB3aXRoIHNwYWNlIG9uIHRoZSBzdGFjayBhbmQKKyAgIHN3aXRjaGVzIHRvIGhlYXAgc3BhY2Ugd2hlbiBmb3JjZWQgdG8gcmVhbGxvY2F0ZS4gIFRoaXMgd29ya3MgYQorICAgbGl0dGxlIGRpZmZlcmVudGx5LiAgSW5zdGVhZCBvZiBERUZfVkVDX0FMTE9DX1AoVFlQRSwgaGVhcHxnYyksIHVzZQorICAgREVGX1ZFQ19BTExPQ19QX1NUQUNLKFRZUEUpLiAgVGhpcyB1c2VzIGFsbG9jYSB0byBnZXQgdGhlIGluaXRpYWwKKyAgIHNwYWNlOyBiZWNhdXNlIGFsbG9jYSBjYW4gbm90IGJlIHVzZWZ1bGx5IGNhbGxlZCBpbiBhbiBpbmxpbmUKKyAgIGZ1bmN0aW9uLCBhbmQgYmVjYXVzZSBhIG1hY3JvIGNhbiBub3QgZGVmaW5lIGEgbWFjcm8sIHlvdSBtdXN0IHRoZW4KKyAgIHdyaXRlIGEgI2RlZmluZSBmb3IgZWFjaCB0eXBlOgorCisgICAjZGVmaW5lIFZFQ197VFlQRX1fc3RhY2tfYWxsb2MoYWxsb2MpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIFZFQ19zdGFja19hbGxvYyh7VFlQRX0sIGFsbG9jKQorCisgICBUaGlzIGlzIHJlYWxseSBhIGhhY2sgYW5kIHBlcmhhcHMgY2FuIGJlIG1hZGUgYmV0dGVyLiAgTm90ZSB0aGF0CisgICB0aGlzIG1hY3JvIHdpbGwgd2luZCB1cCBldmFsdWF0aW5nIHRoZSBBTExPQyBwYXJhbWV0ZXIgdHdpY2UuCisKKyAgIE9ubHkgdGhlIGluaXRpYWwgYWxsb2NhdGlvbiB3aWxsIGJlIG1hZGUgdXNpbmcgYWxsb2NhLCBzbyBwYXNzIGEKKyAgIHJlYXNvbmFibGUgZXN0aW1hdGUgdGhhdCBkb2Vzbid0IHVzZSB0b28gbXVjaCBzdGFjayBzcGFjZTsgZG9uJ3QKKyAgIHBhc3MgemVyby4gIERvbid0IHJldHVybiBhIFZFQyhUWVBFLHN0YWNrKSB2ZWN0b3IgZnJvbSB0aGUgZnVuY3Rpb24KKyAgIHdoaWNoIGFsbG9jYXRlZCBpdC4gICovCisKK2V4dGVybiB2b2lkICp2ZWNfc3RhY2tfcF9yZXNlcnZlICh2b2lkICosIGludCBNRU1fU1RBVF9ERUNMKTsKK2V4dGVybiB2b2lkICp2ZWNfc3RhY2tfcF9yZXNlcnZlX2V4YWN0ICh2b2lkICosIGludCBNRU1fU1RBVF9ERUNMKTsKK2V4dGVybiB2b2lkICp2ZWNfc3RhY2tfcF9yZXNlcnZlX2V4YWN0XzEgKGludCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkICp2ZWNfc3RhY2tfb19yZXNlcnZlICh2b2lkICosIGludCwgc2l6ZV90LCBzaXplX3QgTUVNX1NUQVRfREVDTCk7CitleHRlcm4gdm9pZCAqdmVjX3N0YWNrX29fcmVzZXJ2ZV9leGFjdCAodm9pZCAqLCBpbnQsIHNpemVfdCwgc2l6ZV90CisJCQkJCSBNRU1fU1RBVF9ERUNMKTsKK2V4dGVybiB2b2lkIHZlY19zdGFja19mcmVlICh2b2lkICopOworCisjaWZkZWYgR0FUSEVSX1NUQVRJU1RJQ1MKKyNkZWZpbmUgVkVDX3N0YWNrX2FsbG9jKFQsYWxsb2MsbmFtZSxsaW5lLGZ1bmN0aW9uKQkJCSAgXAorICAoVkVDX09QIChULHN0YWNrLGFsbG9jMSkJCQkJCQkgIFwKKyAgIChhbGxvYywgWEFMTE9DQVZBUiAoVkVDKFQsc3RhY2spLCBWRUNfZW1iZWRkZWRfc2l6ZSAoVCwgYWxsb2MpKSkpCisjZWxzZQorI2RlZmluZSBWRUNfc3RhY2tfYWxsb2MoVCxhbGxvYykJCQkJCSAgXAorICAoVkVDX09QIChULHN0YWNrLGFsbG9jMSkJCQkJCQkgIFwKKyAgIChhbGxvYywgWEFMTE9DQVZBUiAoVkVDKFQsc3RhY2spLCBWRUNfZW1iZWRkZWRfc2l6ZSAoVCwgYWxsb2MpKSkpCisjZW5kaWYKKworI2RlZmluZSBERUZfVkVDX0FMTE9DX1BfU1RBQ0soVCkJCQkJCSAgXAorVkVDX1RBKFQsYmFzZSxzdGFjayk7CQkJCQkJCSAgXAorREVGX1ZFQ19BTExPQ19GVU5DX1BfU1RBQ0soVCkJCQkJCQkgIFwKK0RFRl9WRUNfTk9OQUxMT0NfRlVOQ1NfUChULHN0YWNrKQkJCQkJICBcCitzdHJ1Y3QgdmVjX3N3YWxsb3dfdHJhaWxpbmdfc2VtaQorCisjZGVmaW5lIERFRl9WRUNfQUxMT0NfRlVOQ19QX1NUQUNLKFQpCQkJCQkgIFwKK3N0YXRpYyBpbmxpbmUgVkVDKFQsc3RhY2spICpWRUNfT1AgKFQsc3RhY2ssYWxsb2MxKQkJCSAgXAorICAgICAoaW50IGFsbG9jXywgVkVDKFQsc3RhY2spKiBzcGFjZSkJCQkJCSAgXAorewkJCQkJCQkJCSAgXAorICByZXR1cm4gKFZFQyhULHN0YWNrKSAqKSB2ZWNfc3RhY2tfcF9yZXNlcnZlX2V4YWN0XzEgKGFsbG9jXywgc3BhY2UpOwkgIFwKK30KKworI2RlZmluZSBERUZfVkVDX0FMTE9DX09fU1RBQ0soVCkJCQkJCSAgXAorVkVDX1RBKFQsYmFzZSxzdGFjayk7CQkJCQkJCSAgXAorREVGX1ZFQ19BTExPQ19GVU5DX09fU1RBQ0soVCkJCQkJCQkgIFwKK0RFRl9WRUNfTk9OQUxMT0NfRlVOQ1NfTyhULHN0YWNrKQkJCQkJICBcCitzdHJ1Y3QgdmVjX3N3YWxsb3dfdHJhaWxpbmdfc2VtaQorCisjZGVmaW5lIERFRl9WRUNfQUxMT0NfRlVOQ19PX1NUQUNLKFQpCQkJCQkgIFwKK3N0YXRpYyBpbmxpbmUgVkVDKFQsc3RhY2spICpWRUNfT1AgKFQsc3RhY2ssYWxsb2MxKQkJCSAgXAorICAgICAoaW50IGFsbG9jXywgVkVDKFQsc3RhY2spKiBzcGFjZSkJCQkJCSAgXAorewkJCQkJCQkJCSAgXAorICByZXR1cm4gKFZFQyhULHN0YWNrKSAqKSB2ZWNfc3RhY2tfcF9yZXNlcnZlX2V4YWN0XzEgKGFsbG9jXywgc3BhY2UpOwkgIFwKK30KKworI2RlZmluZSBERUZfVkVDX0FMTE9DX0lfU1RBQ0soVCkJCQkJCSAgXAorVkVDX1RBKFQsYmFzZSxzdGFjayk7CQkJCQkJCSAgXAorREVGX1ZFQ19BTExPQ19GVU5DX0lfU1RBQ0soVCkJCQkJCQkgIFwKK0RFRl9WRUNfTk9OQUxMT0NfRlVOQ1NfSShULHN0YWNrKQkJCQkJICBcCitzdHJ1Y3QgdmVjX3N3YWxsb3dfdHJhaWxpbmdfc2VtaQorCisjZGVmaW5lIERFRl9WRUNfQUxMT0NfRlVOQ19JX1NUQUNLKFQpCQkJCQkgIFwKK3N0YXRpYyBpbmxpbmUgVkVDKFQsc3RhY2spICpWRUNfT1AgKFQsc3RhY2ssYWxsb2MxKQkJCSAgXAorICAgICAoaW50IGFsbG9jXywgVkVDKFQsc3RhY2spKiBzcGFjZSkJCQkJCSAgXAorewkJCQkJCQkJCSAgXAorICByZXR1cm4gKFZFQyhULHN0YWNrKSAqKSB2ZWNfc3RhY2tfcF9yZXNlcnZlX2V4YWN0XzEgKGFsbG9jXywgc3BhY2UpOyAgIFwKK30KKworI2VuZGlmIC8qIEdDQ19WRUNfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3ZlY3ByaW0uaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS92ZWNwcmltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTljY2M1MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS92ZWNwcmltLmgKQEAgLTAsMCArMSwzNyBAQAorLyogVkVDIHR5cGVzIGZvciBwcmltaXRpdmUgdHlwZXMKKyAgIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX1ZFQ1BSSU1fSAorI2RlZmluZSBHQ0NfVkVDUFJJTV9ICisKK0RFRl9WRUNfSShjaGFyKTsKK0RFRl9WRUNfQUxMT0NfSShjaGFyLGhlYXApOworCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWNoYXI7CitERUZfVkVDX0kodWNoYXIpOworREVGX1ZFQ19BTExPQ19JKHVjaGFyLGhlYXApOworREVGX1ZFQ19BTExPQ19JKHVjaGFyLGdjKTsKKworREVGX1ZFQ19JKGludCk7CitERUZfVkVDX0FMTE9DX0koaW50LGhlYXApOworCitERUZfVkVDX0kodW5zaWduZWQpOworREVGX1ZFQ19BTExPQ19JKHVuc2lnbmVkLGhlYXApOworCisjZW5kaWYgLyogR0NDX1ZFQ1BSSU1fSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL3BsdWdpbi9pbmNsdWRlL3ZlcnNpb24uaCBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS92ZXJzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg5MTkwMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9wbHVnaW4vaW5jbHVkZS92ZXJzaW9uLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIEdDQ19WRVJTSU9OX0gKKyNkZWZpbmUgR0NDX1ZFUlNJT05fSAorZXh0ZXJuIGNvbnN0IGNoYXIgdmVyc2lvbl9zdHJpbmdbXTsKK2V4dGVybiBjb25zdCBjaGFyIHBrZ3ZlcnNpb25fc3RyaW5nW107CitleHRlcm4gY29uc3QgY2hhciBidWdfcmVwb3J0X3VybFtdOworI2VuZGlmIC8qICEgR0NDX1ZFUlNJT05fSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2xkc2NyaXB0cy9hcm1lbGZfbGludXhfZWFiaS54IGIvbGliL2xkc2NyaXB0cy9hcm1lbGZfbGludXhfZWFiaS54Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0Mjg1YTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbGRzY3JpcHRzL2FybWVsZl9saW51eF9lYWJpLngKQEAgLTAsMCArMSwyMjQgQEAKKy8qIERlZmF1bHQgbGlua2VyIHNjcmlwdCwgZm9yIG5vcm1hbCBleGVjdXRhYmxlcyAqLworT1VUUFVUX0ZPUk1BVCgiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWJpZ2FybSIsCisJICAgICAgImVsZjMyLWxpdHRsZWFybSIpCitPVVRQVVRfQVJDSChhcm0pCitFTlRSWShfc3RhcnQpCitTRUFSQ0hfRElSKCI9L3Vzci9sb2NhbC9saWIiKTsgU0VBUkNIX0RJUigiPS9saWIiKTsgU0VBUkNIX0RJUigiPS91c3IvbGliIik7CitTRUNUSU9OUworeworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgUFJPVklERSAoX19leGVjdXRhYmxlX3N0YXJ0ID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHgwMDAwODAwMCkpOyAuID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHgwMDAwODAwMCkgKyBTSVpFT0ZfSEVBREVSUzsKKyAgLmludGVycCAgICAgICAgIDogeyAqKC5pbnRlcnApIH0KKyAgLm5vdGUuZ251LmJ1aWxkLWlkIDogeyAqKC5ub3RlLmdudS5idWlsZC1pZCkgfQorICAuaGFzaCAgICAgICAgICAgOiB7ICooLmhhc2gpIH0KKyAgLmdudS5oYXNoICAgICAgIDogeyAqKC5nbnUuaGFzaCkgfQorICAuZHluc3ltICAgICAgICAgOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyICAgICAgICAgOiB7ICooLmR5bnN0cikgfQorICAuZ251LnZlcnNpb24gICAgOiB7ICooLmdudS52ZXJzaW9uKSB9CisgIC5nbnUudmVyc2lvbl9kICA6IHsgKiguZ251LnZlcnNpb25fZCkgfQorICAuZ251LnZlcnNpb25fciAgOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KKyAgLnJlbC5pbml0ICAgICAgIDogeyAqKC5yZWwuaW5pdCkgfQorICAucmVsYS5pbml0ICAgICAgOiB7ICooLnJlbGEuaW5pdCkgfQorICAucmVsLnRleHQgICAgICAgOiB7ICooLnJlbC50ZXh0IC5yZWwudGV4dC4qIC5yZWwuZ251LmxpbmtvbmNlLnQuKikgfQorICAucmVsYS50ZXh0ICAgICAgOiB7ICooLnJlbGEudGV4dCAucmVsYS50ZXh0LiogLnJlbGEuZ251LmxpbmtvbmNlLnQuKikgfQorICAucmVsLmZpbmkgICAgICAgOiB7ICooLnJlbC5maW5pKSB9CisgIC5yZWxhLmZpbmkgICAgICA6IHsgKigucmVsYS5maW5pKSB9CisgIC5yZWwucm9kYXRhICAgICA6IHsgKigucmVsLnJvZGF0YSAucmVsLnJvZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnIuKikgfQorICAucmVsYS5yb2RhdGEgICAgOiB7ICooLnJlbGEucm9kYXRhIC5yZWxhLnJvZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJlbC5kYXRhLnJlbC5ybyAgIDogeyAqKC5yZWwuZGF0YS5yZWwucm8qIC5yZWwuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLnJlbGEuZGF0YS5yZWwucm8gICA6IHsgKigucmVsYS5kYXRhLnJlbC5ybyogLnJlbGEuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLnJlbC5kYXRhICAgICAgIDogeyAqKC5yZWwuZGF0YSAucmVsLmRhdGEuKiAucmVsLmdudS5saW5rb25jZS5kLiopIH0KKyAgLnJlbGEuZGF0YSAgICAgIDogeyAqKC5yZWxhLmRhdGEgLnJlbGEuZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5kLiopIH0KKyAgLnJlbC50ZGF0YQkgIDogeyAqKC5yZWwudGRhdGEgLnJlbC50ZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnJlbGEudGRhdGEJICA6IHsgKigucmVsYS50ZGF0YSAucmVsYS50ZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC5yZWwudGJzcwkgIDogeyAqKC5yZWwudGJzcyAucmVsLnRic3MuKiAucmVsLmdudS5saW5rb25jZS50Yi4qKSB9CisgIC5yZWxhLnRic3MJICA6IHsgKigucmVsYS50YnNzIC5yZWxhLnRic3MuKiAucmVsYS5nbnUubGlua29uY2UudGIuKikgfQorICAucmVsLmN0b3JzICAgICAgOiB7ICooLnJlbC5jdG9ycykgfQorICAucmVsYS5jdG9ycyAgICAgOiB7ICooLnJlbGEuY3RvcnMpIH0KKyAgLnJlbC5kdG9ycyAgICAgIDogeyAqKC5yZWwuZHRvcnMpIH0KKyAgLnJlbGEuZHRvcnMgICAgIDogeyAqKC5yZWxhLmR0b3JzKSB9CisgIC5yZWwuZ290ICAgICAgICA6IHsgKigucmVsLmdvdCkgfQorICAucmVsYS5nb3QgICAgICAgOiB7ICooLnJlbGEuZ290KSB9CisgIC5yZWwuYnNzICAgICAgICA6IHsgKigucmVsLmJzcyAucmVsLmJzcy4qIC5yZWwuZ251LmxpbmtvbmNlLmIuKikgfQorICAucmVsYS5ic3MgICAgICAgOiB7ICooLnJlbGEuYnNzIC5yZWxhLmJzcy4qIC5yZWxhLmdudS5saW5rb25jZS5iLiopIH0KKyAgLnJlbC5pcGx0ICAgICAgIDoKKyAgICB7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9zdGFydCA9IC4pOworICAgICAgKigucmVsLmlwbHQpCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9lbmQgPSAuKTsKKyAgICB9CisgIC5yZWxhLmlwbHQgICAgICA6CisgICAgeworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X3N0YXJ0ID0gLik7CisgICAgICAqKC5yZWxhLmlwbHQpCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfZW5kID0gLik7CisgICAgfQorICAucmVsLnBsdCAgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbC5wbHQpCisgICAgfQorICAucmVsYS5wbHQgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEucGx0KQorICAgIH0KKyAgLmluaXQgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooLmluaXQpKQorICB9ID0wCisgIC5wbHQgICAgICAgICAgICA6IHsgKigucGx0KSB9CisgIC5pcGx0ICAgICAgICAgICA6IHsgKiguaXBsdCkgfQorICAudGV4dCAgICAgICAgICAgOgorICB7CisgICAgKigudGV4dC51bmxpa2VseSAudGV4dC4qX3VubGlrZWx5KQorICAgICooLnRleHQgLnN0dWIgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKikKKyAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KKyAgICAqKC5nbnUud2FybmluZykKKyAgICAqKC5nbHVlXzd0KSAqKC5nbHVlXzcpICooLnZmcDExX3ZlbmVlcikgKigudjRfYngpCisgIH0gPTAKKyAgLmZpbmkgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooLmZpbmkpKQorICB9ID0wCisgIFBST1ZJREUgKF9fZXRleHQgPSAuKTsKKyAgUFJPVklERSAoX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgIC5yb2RhdGEgICAgICAgICA6IHsgKigucm9kYXRhIC5yb2RhdGEuKiAuZ251LmxpbmtvbmNlLnIuKikgfQorICAucm9kYXRhMSAgICAgICAgOiB7ICooLnJvZGF0YTEpIH0KKyAgLkFSTS5leHRhYiAgIDogeyAqKC5BUk0uZXh0YWIqIC5nbnUubGlua29uY2UuYXJtZXh0YWIuKikgfQorICAgX19leGlkeF9zdGFydCA9IC47CisgIC5BUk0uZXhpZHggICA6IHsgKiguQVJNLmV4aWR4KiAuZ251LmxpbmtvbmNlLmFybWV4aWR4LiopIH0KKyAgIF9fZXhpZHhfZW5kID0gLjsKKyAgLmVoX2ZyYW1lX2hkciA6IHsgKiguZWhfZnJhbWVfaGRyKSB9CisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUk8geyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogQWRqdXN0IHRoZSBhZGRyZXNzIGZvciB0aGUgZGF0YSBzZWdtZW50LiAgV2Ugd2FudCB0byBhZGp1c3QgdXAgdG8KKyAgICAgdGhlIHNhbWUgYWRkcmVzcyB3aXRoaW4gdGhlIHBhZ2Ugb24gdGhlIG5leHQgcGFnZSB1cC4gICovCisgIC4gPSBBTElHTiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSkgLSAoKENPTlNUQU5UIChNQVhQQUdFU0laRSkgLSAuKSAmIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gMSkpOyAuID0gREFUQV9TRUdNRU5UX0FMSUdOIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpLCBDT05TVEFOVCAoQ09NTU9OUEFHRVNJWkUpKTsKKyAgLyogRXhjZXB0aW9uIGhhbmRsaW5nICAqLworICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JXIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JXIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIFRocmVhZCBMb2NhbCBTdG9yYWdlIHNlY3Rpb25zICAqLworICAudGRhdGEJICA6IHsgKigudGRhdGEgLnRkYXRhLiogLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC50YnNzCQkgIDogeyAqKC50YnNzIC50YnNzLiogLmdudS5saW5rb25jZS50Yi4qKSAqKC50Y29tbW9uKSB9CisgIC5wcmVpbml0X2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICAgS0VFUCAoKihTT1JUKC5pbml0X2FycmF5LiopKSkKKyAgICAgS0VFUCAoKiguaW5pdF9hcnJheSkpCisgICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmZpbmlfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKC5maW5pX2FycmF5KSkKKyAgICBLRUVQICgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQorICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmN0b3JzICAgICAgICAgIDoKKyAgeworICAgIC8qIGdjYyB1c2VzIGNydGJlZ2luLm8gdG8gZmluZCB0aGUgc3RhcnQgb2YKKyAgICAgICB0aGUgY29uc3RydWN0b3JzLCBzbyB3ZSBtYWtlIHN1cmUgaXQgaXMKKyAgICAgICBmaXJzdC4gIEJlY2F1c2UgdGhpcyBpcyBhIHdpbGRjYXJkLCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSB1c2VyIGRvZXMgbm90CisgICAgICAgYWN0dWFsbHkgbGluayBhZ2FpbnN0IGNydGJlZ2luLm87IHRoZQorICAgICAgIGxpbmtlciB3b24ndCBsb29rIGZvciBhIGZpbGUgdG8gbWF0Y2ggYQorICAgICAgIHdpbGRjYXJkLiAgVGhlIHdpbGRjYXJkIGFsc28gbWVhbnMgdGhhdCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGRpcmVjdG9yeSBjcnRiZWdpbi5vCisgICAgICAgaXMgaW4uICAqLworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5jdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5jdG9ycykpCisgICAgLyogV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSAuY3RvciBzZWN0aW9uIGZyb20KKyAgICAgICB0aGUgY3J0ZW5kLm8gZmlsZSB1bnRpbCBhZnRlciB0aGUgc29ydGVkIGN0b3JzLgorICAgICAgIFRoZSAuY3RvciBzZWN0aW9uIGZyb20gdGhlIGNydGVuZCBmaWxlIGNvbnRhaW5zIHRoZQorICAgICAgIGVuZCBvZiBjdG9ycyBtYXJrZXIgYW5kIGl0IG11c3QgYmUgbGFzdCAqLworICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5jdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5jdG9ycy4qKSkpCisgICAgS0VFUCAoKiguY3RvcnMpKQorICB9CisgIC5kdG9ycyAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqY3J0YmVnaW4ubyguZHRvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguZHRvcnMpKQorICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5kdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5kdG9ycy4qKSkpCisgICAgS0VFUCAoKiguZHRvcnMpKQorICB9CisgIC5qY3IgICAgICAgICAgICA6IHsgS0VFUCAoKiguamNyKSkgfQorICAuZGF0YS5yZWwucm8gOiB7ICooLmRhdGEucmVsLnJvLmxvY2FsKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLmxvY2FsLiopICooLmRhdGEucmVsLnJvKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLmR5bmFtaWMgICAgICAgIDogeyAqKC5keW5hbWljKSB9CisgIC4gPSBEQVRBX1NFR01FTlRfUkVMUk9fRU5EICgwLCAuKTsKKyAgLmdvdCAgICAgICAgICAgIDogeyAqKC5nb3QucGx0KSAqKC5pZ290LnBsdCkgKiguZ290KSAqKC5pZ290KSB9CisgIC5kYXRhICAgICAgICAgICA6CisgIHsKKyAgICBQUk9WSURFIChfX2RhdGFfc3RhcnQgPSAuKTsKKyAgICAqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisgICAgU09SVChDT05TVFJVQ1RPUlMpCisgIH0KKyAgLmRhdGExICAgICAgICAgIDogeyAqKC5kYXRhMSkgfQorICBfZWRhdGEgPSAuOyBQUk9WSURFIChlZGF0YSA9IC4pOworICBfX2Jzc19zdGFydCA9IC47CisgIF9fYnNzX3N0YXJ0X18gPSAuOworICAuYnNzICAgICAgICAgICAgOgorICB7CisgICAqKC5keW5ic3MpCisgICAqKC5ic3MgLmJzcy4qIC5nbnUubGlua29uY2UuYi4qKQorICAgKihDT01NT04pCisgICAvKiBBbGlnbiBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSAuYnNzIHNlY3Rpb24gb2NjdXBpZXMgc3BhY2UgdXAgdG8KKyAgICAgIF9lbmQuICBBbGlnbiBhZnRlciAuYnNzIHRvIGVuc3VyZSBjb3JyZWN0IGFsaWdubWVudCBldmVuIGlmIHRoZQorICAgICAgLmJzcyBzZWN0aW9uIGRpc2FwcGVhcnMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gaW5wdXQgc2VjdGlvbnMuCisgICAgICBGSVhNRTogV2h5IGRvIHdlIG5lZWQgaXQ/IFdoZW4gdGhlcmUgaXMgbm8gLmJzcyBzZWN0aW9uLCB3ZSBkb24ndAorICAgICAgcGFkIHRoZSAuZGF0YSBzZWN0aW9uLiAgKi8KKyAgIC4gPSBBTElHTiguICE9IDAgPyAzMiAvIDggOiAxKTsKKyAgfQorICBfYnNzX2VuZF9fID0gLiA7IF9fYnNzX2VuZF9fID0gLiA7CisgIC4gPSBBTElHTigzMiAvIDgpOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgX19lbmRfXyA9IC4gOworICBfZW5kID0gLjsgUFJPVklERSAoZW5kID0gLik7CisgIC4gPSBEQVRBX1NFR01FTlRfRU5EICguKTsKKyAgLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KKyAgLnN0YWIgICAgICAgICAgMCA6IHsgKiguc3RhYikgfQorICAuc3RhYnN0ciAgICAgICAwIDogeyAqKC5zdGFic3RyKSB9CisgIC5zdGFiLmV4Y2wgICAgIDAgOiB7ICooLnN0YWIuZXhjbCkgfQorICAuc3RhYi5leGNsc3RyICAwIDogeyAqKC5zdGFiLmV4Y2xzdHIpIH0KKyAgLnN0YWIuaW5kZXggICAgMCA6IHsgKiguc3RhYi5pbmRleCkgfQorICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9CisgIC5jb21tZW50ICAgICAgIDAgOiB7ICooLmNvbW1lbnQpIH0KKyAgLyogRFdBUkYgZGVidWcgc2VjdGlvbnMuCisgICAgIFN5bWJvbHMgaW4gdGhlIERXQVJGIGRlYnVnZ2luZyBzZWN0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc2VjdGlvbiBzbyB3ZSBiZWdpbiB0aGVtIGF0IDAuICAqLworICAvKiBEV0FSRiAxICovCisgIC5kZWJ1ZyAgICAgICAgICAwIDogeyAqKC5kZWJ1ZykgfQorICAubGluZSAgICAgICAgICAgMCA6IHsgKigubGluZSkgfQorICAvKiBHTlUgRFdBUkYgMSBleHRlbnNpb25zICovCisgIC5kZWJ1Z19zcmNpbmZvICAwIDogeyAqKC5kZWJ1Z19zcmNpbmZvKSB9CisgIC5kZWJ1Z19zZm5hbWVzICAwIDogeyAqKC5kZWJ1Z19zZm5hbWVzKSB9CisgIC8qIERXQVJGIDEuMSBhbmQgRFdBUkYgMiAqLworICAuZGVidWdfYXJhbmdlcyAgMCA6IHsgKiguZGVidWdfYXJhbmdlcykgfQorICAuZGVidWdfcHVibmFtZXMgMCA6IHsgKiguZGVidWdfcHVibmFtZXMpIH0KKyAgLyogRFdBUkYgMiAqLworICAuZGVidWdfaW5mbyAgICAgMCA6IHsgKiguZGVidWdfaW5mbyAuZ251LmxpbmtvbmNlLndpLiopIH0KKyAgLmRlYnVnX2FiYnJldiAgIDAgOiB7ICooLmRlYnVnX2FiYnJldikgfQorICAuZGVidWdfbGluZSAgICAgMCA6IHsgKiguZGVidWdfbGluZSkgfQorICAuZGVidWdfZnJhbWUgICAgMCA6IHsgKiguZGVidWdfZnJhbWUpIH0KKyAgLmRlYnVnX3N0ciAgICAgIDAgOiB7ICooLmRlYnVnX3N0cikgfQorICAuZGVidWdfbG9jICAgICAgMCA6IHsgKiguZGVidWdfbG9jKSB9CisgIC5kZWJ1Z19tYWNpbmZvICAwIDogeyAqKC5kZWJ1Z19tYWNpbmZvKSB9CisgIC8qIFNHSS9NSVBTIERXQVJGIDIgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfd2Vha25hbWVzIDAgOiB7ICooLmRlYnVnX3dlYWtuYW1lcykgfQorICAuZGVidWdfZnVuY25hbWVzIDAgOiB7ICooLmRlYnVnX2Z1bmNuYW1lcykgfQorICAuZGVidWdfdHlwZW5hbWVzIDAgOiB7ICooLmRlYnVnX3R5cGVuYW1lcykgfQorICAuZGVidWdfdmFybmFtZXMgIDAgOiB7ICooLmRlYnVnX3Zhcm5hbWVzKSB9CisgIC8qIERXQVJGIDMgKi8KKyAgLmRlYnVnX3B1YnR5cGVzIDAgOiB7ICooLmRlYnVnX3B1YnR5cGVzKSB9CisgIC5kZWJ1Z19yYW5nZXMgICAwIDogeyAqKC5kZWJ1Z19yYW5nZXMpIH0KKyAgLmdudS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLmdudS5hdHRyaWJ1dGVzKSkgfQorICAubm90ZS5nbnUuYXJtLmlkZW50IDAgOiB7IEtFRVAgKCooLm5vdGUuZ251LmFybS5pZGVudCkpIH0KKyAgL0RJU0NBUkQvIDogeyAqKC5ub3RlLkdOVS1zdGFjaykgKiguZ251X2RlYnVnbGluaykgKiguZ251Lmx0b18qKSB9Cit9CmRpZmYgLS1naXQgYS9saWIvbGRzY3JpcHRzL2FybWVsZl9saW51eF9lYWJpLnhibiBiL2xpYi9sZHNjcmlwdHMvYXJtZWxmX2xpbnV4X2VhYmkueGJuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MGJhZGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbGRzY3JpcHRzL2FybWVsZl9saW51eF9lYWJpLnhibgpAQCAtMCwwICsxLDIyMiBAQAorLyogU2NyaXB0IGZvciAtTjogbWl4IHRleHQgYW5kIGRhdGEgb24gc2FtZSBwYWdlOyBkb24ndCBhbGlnbiBkYXRhICovCitPVVRQVVRfRk9STUFUKCJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItYmlnYXJtIiwKKwkgICAgICAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQVJDSF9ESVIoIj0vdXNyL2xvY2FsL2xpYiIpOyBTRUFSQ0hfRElSKCI9L2xpYiIpOyBTRUFSQ0hfRElSKCI9L3Vzci9saWIiKTsKK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICBQUk9WSURFIChfX2V4ZWN1dGFibGVfc3RhcnQgPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAweDAwMDA4MDAwKSk7IC4gPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAweDAwMDA4MDAwKSArIFNJWkVPRl9IRUFERVJTOworICAuaW50ZXJwICAgICAgICAgOiB7ICooLmludGVycCkgfQorICAubm90ZS5nbnUuYnVpbGQtaWQgOiB7ICooLm5vdGUuZ251LmJ1aWxkLWlkKSB9CisgIC5oYXNoICAgICAgICAgICA6IHsgKiguaGFzaCkgfQorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CisgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CisgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CisgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KKyAgLmdudS52ZXJzaW9uX2QgIDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CisgIC5nbnUudmVyc2lvbl9yICA6IHsgKiguZ251LnZlcnNpb25fcikgfQorICAucmVsLmluaXQgICAgICAgOiB7ICooLnJlbC5pbml0KSB9CisgIC5yZWxhLmluaXQgICAgICA6IHsgKigucmVsYS5pbml0KSB9CisgIC5yZWwudGV4dCAgICAgICA6IHsgKigucmVsLnRleHQgLnJlbC50ZXh0LiogLnJlbC5nbnUubGlua29uY2UudC4qKSB9CisgIC5yZWxhLnRleHQgICAgICA6IHsgKigucmVsYS50ZXh0IC5yZWxhLnRleHQuKiAucmVsYS5nbnUubGlua29uY2UudC4qKSB9CisgIC5yZWwuZmluaSAgICAgICA6IHsgKigucmVsLmZpbmkpIH0KKyAgLnJlbGEuZmluaSAgICAgIDogeyAqKC5yZWxhLmZpbmkpIH0KKyAgLnJlbC5yb2RhdGEgICAgIDogeyAqKC5yZWwucm9kYXRhIC5yZWwucm9kYXRhLiogLnJlbC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yZWxhLnJvZGF0YSAgICA6IHsgKigucmVsYS5yb2RhdGEgLnJlbGEucm9kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnIuKikgfQorICAucmVsLmRhdGEucmVsLnJvICAgOiB7ICooLnJlbC5kYXRhLnJlbC5ybyogLnJlbC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAucmVsYS5kYXRhLnJlbC5ybyAgIDogeyAqKC5yZWxhLmRhdGEucmVsLnJvKiAucmVsYS5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAucmVsLmRhdGEgICAgICAgOiB7ICooLnJlbC5kYXRhIC5yZWwuZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLmQuKikgfQorICAucmVsYS5kYXRhICAgICAgOiB7ICooLnJlbGEuZGF0YSAucmVsYS5kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLmQuKikgfQorICAucmVsLnRkYXRhCSAgOiB7ICooLnJlbC50ZGF0YSAucmVsLnRkYXRhLiogLnJlbC5nbnUubGlua29uY2UudGQuKikgfQorICAucmVsYS50ZGF0YQkgIDogeyAqKC5yZWxhLnRkYXRhIC5yZWxhLnRkYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnJlbC50YnNzCSAgOiB7ICooLnJlbC50YnNzIC5yZWwudGJzcy4qIC5yZWwuZ251LmxpbmtvbmNlLnRiLiopIH0KKyAgLnJlbGEudGJzcwkgIDogeyAqKC5yZWxhLnRic3MgLnJlbGEudGJzcy4qIC5yZWxhLmdudS5saW5rb25jZS50Yi4qKSB9CisgIC5yZWwuY3RvcnMgICAgICA6IHsgKigucmVsLmN0b3JzKSB9CisgIC5yZWxhLmN0b3JzICAgICA6IHsgKigucmVsYS5jdG9ycykgfQorICAucmVsLmR0b3JzICAgICAgOiB7ICooLnJlbC5kdG9ycykgfQorICAucmVsYS5kdG9ycyAgICAgOiB7ICooLnJlbGEuZHRvcnMpIH0KKyAgLnJlbC5nb3QgICAgICAgIDogeyAqKC5yZWwuZ290KSB9CisgIC5yZWxhLmdvdCAgICAgICA6IHsgKigucmVsYS5nb3QpIH0KKyAgLnJlbC5ic3MgICAgICAgIDogeyAqKC5yZWwuYnNzIC5yZWwuYnNzLiogLnJlbC5nbnUubGlua29uY2UuYi4qKSB9CisgIC5yZWxhLmJzcyAgICAgICA6IHsgKigucmVsYS5ic3MgLnJlbGEuYnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLmIuKikgfQorICAucmVsLmlwbHQgICAgICAgOgorICAgIHsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbF9pcGx0X3N0YXJ0ID0gLik7CisgICAgICAqKC5yZWwuaXBsdCkKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbF9pcGx0X2VuZCA9IC4pOworICAgIH0KKyAgLnJlbGEuaXBsdCAgICAgIDoKKyAgICB7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgICooLnJlbGEuaXBsdCkKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9lbmQgPSAuKTsKKyAgICB9CisgIC5yZWwucGx0ICAgICAgICA6CisgICAgeworICAgICAgKigucmVsLnBsdCkKKyAgICB9CisgIC5yZWxhLnBsdCAgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5wbHQpCisgICAgfQorICAuaW5pdCAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKiguaW5pdCkpCisgIH0gPTAKKyAgLnBsdCAgICAgICAgICAgIDogeyAqKC5wbHQpIH0KKyAgLmlwbHQgICAgICAgICAgIDogeyAqKC5pcGx0KSB9CisgIC50ZXh0ICAgICAgICAgICA6CisgIHsKKyAgICAqKC50ZXh0LnVubGlrZWx5IC50ZXh0LipfdW5saWtlbHkpCisgICAgKigudGV4dCAuc3R1YiAudGV4dC4qIC5nbnUubGlua29uY2UudC4qKQorICAgIC8qIC5nbnUud2FybmluZyBzZWN0aW9ucyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgYnkgZWxmMzIuZW0uICAqLworICAgICooLmdudS53YXJuaW5nKQorICAgICooLmdsdWVfN3QpICooLmdsdWVfNykgKigudmZwMTFfdmVuZWVyKSAqKC52NF9ieCkKKyAgfSA9MAorICAuZmluaSAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKiguZmluaSkpCisgIH0gPTAKKyAgUFJPVklERSAoX19ldGV4dCA9IC4pOworICBQUk9WSURFIChfZXRleHQgPSAuKTsKKyAgUFJPVklERSAoZXRleHQgPSAuKTsKKyAgLnJvZGF0YSAgICAgICAgIDogeyAqKC5yb2RhdGEgLnJvZGF0YS4qIC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yb2RhdGExICAgICAgICA6IHsgKigucm9kYXRhMSkgfQorICAuQVJNLmV4dGFiICAgOiB7ICooLkFSTS5leHRhYiogLmdudS5saW5rb25jZS5hcm1leHRhYi4qKSB9CisgICBfX2V4aWR4X3N0YXJ0ID0gLjsKKyAgLkFSTS5leGlkeCAgIDogeyAqKC5BUk0uZXhpZHgqIC5nbnUubGlua29uY2UuYXJtZXhpZHguKikgfQorICAgX19leGlkeF9lbmQgPSAuOworICAuZWhfZnJhbWVfaGRyIDogeyAqKC5laF9mcmFtZV9oZHIpIH0KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9STyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9STyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQuICBXZSB3YW50IHRvIGFkanVzdCB1cCB0bworICAgICB0aGUgc2FtZSBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZSBvbiB0aGUgbmV4dCBwYWdlIHVwLiAgKi8KKyAgLiA9IC47CisgIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyAgKi8KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9SVyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9SVyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCSAgOiB7ICooLnRkYXRhIC50ZGF0YS4qIC5nbnUubGlua29uY2UudGQuKikgfQorICAudGJzcwkJICA6IHsgKigudGJzcyAudGJzcy4qIC5nbnUubGlua29uY2UudGIuKikgKigudGNvbW1vbikgfQorICAucHJlaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmluaXRfYXJyYXkgICAgIDoKKyAgeworICAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgIEtFRVAgKCooLmluaXRfYXJyYXkpKQorICAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X2VuZCA9IC4pOworICB9CisgIC5maW5pX2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgICAgS0VFUCAoKihTT1JUKC5maW5pX2FycmF5LiopKSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X2VuZCA9IC4pOworICB9CisgIC5jdG9ycyAgICAgICAgICA6CisgIHsKKyAgICAvKiBnY2MgdXNlcyBjcnRiZWdpbi5vIHRvIGZpbmQgdGhlIHN0YXJ0IG9mCisgICAgICAgdGhlIGNvbnN0cnVjdG9ycywgc28gd2UgbWFrZSBzdXJlIGl0IGlzCisgICAgICAgZmlyc3QuICBCZWNhdXNlIHRoaXMgaXMgYSB3aWxkY2FyZCwgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciBpZiB0aGUgdXNlciBkb2VzIG5vdAorICAgICAgIGFjdHVhbGx5IGxpbmsgYWdhaW5zdCBjcnRiZWdpbi5vOyB0aGUKKyAgICAgICBsaW5rZXIgd29uJ3QgbG9vayBmb3IgYSBmaWxlIHRvIG1hdGNoIGEKKyAgICAgICB3aWxkY2FyZC4gIFRoZSB3aWxkY2FyZCBhbHNvIG1lYW5zIHRoYXQgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciB3aGljaCBkaXJlY3RvcnkgY3J0YmVnaW4ubworICAgICAgIGlzIGluLiAgKi8KKyAgICBLRUVQICgqY3J0YmVnaW4ubyguY3RvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguY3RvcnMpKQorICAgIC8qIFdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGUgLmN0b3Igc2VjdGlvbiBmcm9tCisgICAgICAgdGhlIGNydGVuZC5vIGZpbGUgdW50aWwgYWZ0ZXIgdGhlIHNvcnRlZCBjdG9ycy4KKyAgICAgICBUaGUgLmN0b3Igc2VjdGlvbiBmcm9tIHRoZSBjcnRlbmQgZmlsZSBjb250YWlucyB0aGUKKyAgICAgICBlbmQgb2YgY3RvcnMgbWFya2VyIGFuZCBpdCBtdXN0IGJlIGxhc3QgKi8KKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuY3RvcnMpKQorICAgIEtFRVAgKCooU09SVCguY3RvcnMuKikpKQorICAgIEtFRVAgKCooLmN0b3JzKSkKKyAgfQorICAuZHRvcnMgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmR0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmR0b3JzKSkKKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuZHRvcnMpKQorICAgIEtFRVAgKCooU09SVCguZHRvcnMuKikpKQorICAgIEtFRVAgKCooLmR0b3JzKSkKKyAgfQorICAuamNyICAgICAgICAgICAgOiB7IEtFRVAgKCooLmpjcikpIH0KKyAgLmRhdGEucmVsLnJvIDogeyAqKC5kYXRhLnJlbC5yby5sb2NhbCogLmdudS5saW5rb25jZS5kLnJlbC5yby5sb2NhbC4qKSAqKC5kYXRhLnJlbC5ybyogLmdudS5saW5rb25jZS5kLnJlbC5yby4qKSB9CisgIC5keW5hbWljICAgICAgICA6IHsgKiguZHluYW1pYykgfQorICAuZ290ICAgICAgICAgICAgOiB7ICooLmdvdC5wbHQpICooLmlnb3QucGx0KSAqKC5nb3QpICooLmlnb3QpIH0KKyAgLmRhdGEgICAgICAgICAgIDoKKyAgeworICAgIFBST1ZJREUgKF9fZGF0YV9zdGFydCA9IC4pOworICAgICooLmRhdGEgLmRhdGEuKiAuZ251LmxpbmtvbmNlLmQuKikKKyAgICBTT1JUKENPTlNUUlVDVE9SUykKKyAgfQorICAuZGF0YTEgICAgICAgICAgOiB7ICooLmRhdGExKSB9CisgIF9lZGF0YSA9IC47IFBST1ZJREUgKGVkYXRhID0gLik7CisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgX19ic3Nfc3RhcnRfXyA9IC47CisgIC5ic3MgICAgICAgICAgICA6CisgIHsKKyAgICooLmR5bmJzcykKKyAgICooLmJzcyAuYnNzLiogLmdudS5saW5rb25jZS5iLiopCisgICAqKENPTU1PTikKKyAgIC8qIEFsaWduIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIC5ic3Mgc2VjdGlvbiBvY2N1cGllcyBzcGFjZSB1cCB0bworICAgICAgX2VuZC4gIEFsaWduIGFmdGVyIC5ic3MgdG8gZW5zdXJlIGNvcnJlY3QgYWxpZ25tZW50IGV2ZW4gaWYgdGhlCisgICAgICAuYnNzIHNlY3Rpb24gZGlzYXBwZWFycyBiZWNhdXNlIHRoZXJlIGFyZSBubyBpbnB1dCBzZWN0aW9ucy4KKyAgICAgIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCBpdD8gV2hlbiB0aGVyZSBpcyBubyAuYnNzIHNlY3Rpb24sIHdlIGRvbid0CisgICAgICBwYWQgdGhlIC5kYXRhIHNlY3Rpb24uICAqLworICAgLiA9IEFMSUdOKC4gIT0gMCA/IDMyIC8gOCA6IDEpOworICB9CisgIF9ic3NfZW5kX18gPSAuIDsgX19ic3NfZW5kX18gPSAuIDsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIC4gPSBBTElHTigzMiAvIDgpOworICBfX2VuZF9fID0gLiA7CisgIF9lbmQgPSAuOyBQUk9WSURFIChlbmQgPSAuKTsKKyAgLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KKyAgLnN0YWIgICAgICAgICAgMCA6IHsgKiguc3RhYikgfQorICAuc3RhYnN0ciAgICAgICAwIDogeyAqKC5zdGFic3RyKSB9CisgIC5zdGFiLmV4Y2wgICAgIDAgOiB7ICooLnN0YWIuZXhjbCkgfQorICAuc3RhYi5leGNsc3RyICAwIDogeyAqKC5zdGFiLmV4Y2xzdHIpIH0KKyAgLnN0YWIuaW5kZXggICAgMCA6IHsgKiguc3RhYi5pbmRleCkgfQorICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9CisgIC5jb21tZW50ICAgICAgIDAgOiB7ICooLmNvbW1lbnQpIH0KKyAgLyogRFdBUkYgZGVidWcgc2VjdGlvbnMuCisgICAgIFN5bWJvbHMgaW4gdGhlIERXQVJGIGRlYnVnZ2luZyBzZWN0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc2VjdGlvbiBzbyB3ZSBiZWdpbiB0aGVtIGF0IDAuICAqLworICAvKiBEV0FSRiAxICovCisgIC5kZWJ1ZyAgICAgICAgICAwIDogeyAqKC5kZWJ1ZykgfQorICAubGluZSAgICAgICAgICAgMCA6IHsgKigubGluZSkgfQorICAvKiBHTlUgRFdBUkYgMSBleHRlbnNpb25zICovCisgIC5kZWJ1Z19zcmNpbmZvICAwIDogeyAqKC5kZWJ1Z19zcmNpbmZvKSB9CisgIC5kZWJ1Z19zZm5hbWVzICAwIDogeyAqKC5kZWJ1Z19zZm5hbWVzKSB9CisgIC8qIERXQVJGIDEuMSBhbmQgRFdBUkYgMiAqLworICAuZGVidWdfYXJhbmdlcyAgMCA6IHsgKiguZGVidWdfYXJhbmdlcykgfQorICAuZGVidWdfcHVibmFtZXMgMCA6IHsgKiguZGVidWdfcHVibmFtZXMpIH0KKyAgLyogRFdBUkYgMiAqLworICAuZGVidWdfaW5mbyAgICAgMCA6IHsgKiguZGVidWdfaW5mbyAuZ251LmxpbmtvbmNlLndpLiopIH0KKyAgLmRlYnVnX2FiYnJldiAgIDAgOiB7ICooLmRlYnVnX2FiYnJldikgfQorICAuZGVidWdfbGluZSAgICAgMCA6IHsgKiguZGVidWdfbGluZSkgfQorICAuZGVidWdfZnJhbWUgICAgMCA6IHsgKiguZGVidWdfZnJhbWUpIH0KKyAgLmRlYnVnX3N0ciAgICAgIDAgOiB7ICooLmRlYnVnX3N0cikgfQorICAuZGVidWdfbG9jICAgICAgMCA6IHsgKiguZGVidWdfbG9jKSB9CisgIC5kZWJ1Z19tYWNpbmZvICAwIDogeyAqKC5kZWJ1Z19tYWNpbmZvKSB9CisgIC8qIFNHSS9NSVBTIERXQVJGIDIgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfd2Vha25hbWVzIDAgOiB7ICooLmRlYnVnX3dlYWtuYW1lcykgfQorICAuZGVidWdfZnVuY25hbWVzIDAgOiB7ICooLmRlYnVnX2Z1bmNuYW1lcykgfQorICAuZGVidWdfdHlwZW5hbWVzIDAgOiB7ICooLmRlYnVnX3R5cGVuYW1lcykgfQorICAuZGVidWdfdmFybmFtZXMgIDAgOiB7ICooLmRlYnVnX3Zhcm5hbWVzKSB9CisgIC8qIERXQVJGIDMgKi8KKyAgLmRlYnVnX3B1YnR5cGVzIDAgOiB7ICooLmRlYnVnX3B1YnR5cGVzKSB9CisgIC5kZWJ1Z19yYW5nZXMgICAwIDogeyAqKC5kZWJ1Z19yYW5nZXMpIH0KKyAgLmdudS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLmdudS5hdHRyaWJ1dGVzKSkgfQorICAubm90ZS5nbnUuYXJtLmlkZW50IDAgOiB7IEtFRVAgKCooLm5vdGUuZ251LmFybS5pZGVudCkpIH0KKyAgL0RJU0NBUkQvIDogeyAqKC5ub3RlLkdOVS1zdGFjaykgKiguZ251X2RlYnVnbGluaykgKiguZ251Lmx0b18qKSB9Cit9CmRpZmYgLS1naXQgYS9saWIvbGRzY3JpcHRzL2FybWVsZl9saW51eF9lYWJpLnhjIGIvbGliL2xkc2NyaXB0cy9hcm1lbGZfbGludXhfZWFiaS54YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWE2NmViCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2xkc2NyaXB0cy9hcm1lbGZfbGludXhfZWFiaS54YwpAQCAtMCwwICsxLDIyNyBAQAorLyogU2NyaXB0IGZvciAteiBjb21icmVsb2M6IGNvbWJpbmUgYW5kIHNvcnQgcmVsb2Mgc2VjdGlvbnMgKi8KK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1iaWdhcm0iLAorCSAgICAgICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VBUkNIX0RJUigiPS91c3IvbG9jYWwvbGliIik7IFNFQVJDSF9ESVIoIj0vbGliIik7IFNFQVJDSF9ESVIoIj0vdXNyL2xpYiIpOworU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIFBST1ZJREUgKF9fZXhlY3V0YWJsZV9zdGFydCA9IFNFR01FTlRfU1RBUlQoInRleHQtc2VnbWVudCIsIDB4MDAwMDgwMDApKTsgLiA9IFNFR01FTlRfU1RBUlQoInRleHQtc2VnbWVudCIsIDB4MDAwMDgwMDApICsgU0laRU9GX0hFQURFUlM7CisgIC5pbnRlcnAgICAgICAgICA6IHsgKiguaW50ZXJwKSB9CisgIC5ub3RlLmdudS5idWlsZC1pZCA6IHsgKigubm90ZS5nbnUuYnVpbGQtaWQpIH0KKyAgLmhhc2ggICAgICAgICAgIDogeyAqKC5oYXNoKSB9CisgIC5nbnUuaGFzaCAgICAgICA6IHsgKiguZ251Lmhhc2gpIH0KKyAgLmR5bnN5bSAgICAgICAgIDogeyAqKC5keW5zeW0pIH0KKyAgLmR5bnN0ciAgICAgICAgIDogeyAqKC5keW5zdHIpIH0KKyAgLmdudS52ZXJzaW9uICAgIDogeyAqKC5nbnUudmVyc2lvbikgfQorICAuZ251LnZlcnNpb25fZCAgOiB7ICooLmdudS52ZXJzaW9uX2QpIH0KKyAgLmdudS52ZXJzaW9uX3IgIDogeyAqKC5nbnUudmVyc2lvbl9yKSB9CisgIC5yZWwuZHluICAgICAgICA6CisgICAgeworICAgICAgKigucmVsLmluaXQpCisgICAgICAqKC5yZWwudGV4dCAucmVsLnRleHQuKiAucmVsLmdudS5saW5rb25jZS50LiopCisgICAgICAqKC5yZWwuZmluaSkKKyAgICAgICooLnJlbC5yb2RhdGEgLnJlbC5yb2RhdGEuKiAucmVsLmdudS5saW5rb25jZS5yLiopCisgICAgICAqKC5yZWwuZGF0YS5yZWwucm8qIC5yZWwuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopCisgICAgICAqKC5yZWwuZGF0YSAucmVsLmRhdGEuKiAucmVsLmdudS5saW5rb25jZS5kLiopCisgICAgICAqKC5yZWwudGRhdGEgLnJlbC50ZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnRkLiopCisgICAgICAqKC5yZWwudGJzcyAucmVsLnRic3MuKiAucmVsLmdudS5saW5rb25jZS50Yi4qKQorICAgICAgKigucmVsLmN0b3JzKQorICAgICAgKigucmVsLmR0b3JzKQorICAgICAgKigucmVsLmdvdCkKKyAgICAgICooLnJlbC5ic3MgLnJlbC5ic3MuKiAucmVsLmdudS5saW5rb25jZS5iLiopCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9zdGFydCA9IC4pOworICAgICAgKigucmVsLmlwbHQpCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9lbmQgPSAuKTsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9zdGFydCA9IC4pOworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X2VuZCA9IC4pOworICAgIH0KKyAgLnJlbGEuZHluICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLmluaXQpCisgICAgICAqKC5yZWxhLnRleHQgLnJlbGEudGV4dC4qIC5yZWxhLmdudS5saW5rb25jZS50LiopCisgICAgICAqKC5yZWxhLmZpbmkpCisgICAgICAqKC5yZWxhLnJvZGF0YSAucmVsYS5yb2RhdGEuKiAucmVsYS5nbnUubGlua29uY2Uuci4qKQorICAgICAgKigucmVsYS5kYXRhIC5yZWxhLmRhdGEuKiAucmVsYS5nbnUubGlua29uY2UuZC4qKQorICAgICAgKigucmVsYS50ZGF0YSAucmVsYS50ZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS50ZC4qKQorICAgICAgKigucmVsYS50YnNzIC5yZWxhLnRic3MuKiAucmVsYS5nbnUubGlua29uY2UudGIuKikKKyAgICAgICooLnJlbGEuY3RvcnMpCisgICAgICAqKC5yZWxhLmR0b3JzKQorICAgICAgKigucmVsYS5nb3QpCisgICAgICAqKC5yZWxhLmJzcyAucmVsYS5ic3MuKiAucmVsYS5nbnUubGlua29uY2UuYi4qKQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbF9pcGx0X2VuZCA9IC4pOworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X3N0YXJ0ID0gLik7CisgICAgICAqKC5yZWxhLmlwbHQpCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfZW5kID0gLik7CisgICAgfQorICAucmVsLnBsdCAgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbC5wbHQpCisgICAgfQorICAucmVsYS5wbHQgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEucGx0KQorICAgIH0KKyAgLmluaXQgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooLmluaXQpKQorICB9ID0wCisgIC5wbHQgICAgICAgICAgICA6IHsgKigucGx0KSB9CisgIC5pcGx0ICAgICAgICAgICA6IHsgKiguaXBsdCkgfQorICAudGV4dCAgICAgICAgICAgOgorICB7CisgICAgKigudGV4dC51bmxpa2VseSAudGV4dC4qX3VubGlrZWx5KQorICAgICooLnRleHQgLnN0dWIgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKikKKyAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KKyAgICAqKC5nbnUud2FybmluZykKKyAgICAqKC5nbHVlXzd0KSAqKC5nbHVlXzcpICooLnZmcDExX3ZlbmVlcikgKigudjRfYngpCisgIH0gPTAKKyAgLmZpbmkgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooLmZpbmkpKQorICB9ID0wCisgIFBST1ZJREUgKF9fZXRleHQgPSAuKTsKKyAgUFJPVklERSAoX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgIC5yb2RhdGEgICAgICAgICA6IHsgKigucm9kYXRhIC5yb2RhdGEuKiAuZ251LmxpbmtvbmNlLnIuKikgfQorICAucm9kYXRhMSAgICAgICAgOiB7ICooLnJvZGF0YTEpIH0KKyAgLkFSTS5leHRhYiAgIDogeyAqKC5BUk0uZXh0YWIqIC5nbnUubGlua29uY2UuYXJtZXh0YWIuKikgfQorICAgX19leGlkeF9zdGFydCA9IC47CisgIC5BUk0uZXhpZHggICA6IHsgKiguQVJNLmV4aWR4KiAuZ251LmxpbmtvbmNlLmFybWV4aWR4LiopIH0KKyAgIF9fZXhpZHhfZW5kID0gLjsKKyAgLmVoX2ZyYW1lX2hkciA6IHsgKiguZWhfZnJhbWVfaGRyKSB9CisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUk8geyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogQWRqdXN0IHRoZSBhZGRyZXNzIGZvciB0aGUgZGF0YSBzZWdtZW50LiAgV2Ugd2FudCB0byBhZGp1c3QgdXAgdG8KKyAgICAgdGhlIHNhbWUgYWRkcmVzcyB3aXRoaW4gdGhlIHBhZ2Ugb24gdGhlIG5leHQgcGFnZSB1cC4gICovCisgIC4gPSBBTElHTiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSkgLSAoKENPTlNUQU5UIChNQVhQQUdFU0laRSkgLSAuKSAmIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gMSkpOyAuID0gREFUQV9TRUdNRU5UX0FMSUdOIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpLCBDT05TVEFOVCAoQ09NTU9OUEFHRVNJWkUpKTsKKyAgLyogRXhjZXB0aW9uIGhhbmRsaW5nICAqLworICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JXIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JXIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIFRocmVhZCBMb2NhbCBTdG9yYWdlIHNlY3Rpb25zICAqLworICAudGRhdGEJICA6IHsgKigudGRhdGEgLnRkYXRhLiogLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC50YnNzCQkgIDogeyAqKC50YnNzIC50YnNzLiogLmdudS5saW5rb25jZS50Yi4qKSAqKC50Y29tbW9uKSB9CisgIC5wcmVpbml0X2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICAgS0VFUCAoKihTT1JUKC5pbml0X2FycmF5LiopKSkKKyAgICAgS0VFUCAoKiguaW5pdF9hcnJheSkpCisgICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmZpbmlfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKC5maW5pX2FycmF5KSkKKyAgICBLRUVQICgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQorICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmN0b3JzICAgICAgICAgIDoKKyAgeworICAgIC8qIGdjYyB1c2VzIGNydGJlZ2luLm8gdG8gZmluZCB0aGUgc3RhcnQgb2YKKyAgICAgICB0aGUgY29uc3RydWN0b3JzLCBzbyB3ZSBtYWtlIHN1cmUgaXQgaXMKKyAgICAgICBmaXJzdC4gIEJlY2F1c2UgdGhpcyBpcyBhIHdpbGRjYXJkLCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSB1c2VyIGRvZXMgbm90CisgICAgICAgYWN0dWFsbHkgbGluayBhZ2FpbnN0IGNydGJlZ2luLm87IHRoZQorICAgICAgIGxpbmtlciB3b24ndCBsb29rIGZvciBhIGZpbGUgdG8gbWF0Y2ggYQorICAgICAgIHdpbGRjYXJkLiAgVGhlIHdpbGRjYXJkIGFsc28gbWVhbnMgdGhhdCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGRpcmVjdG9yeSBjcnRiZWdpbi5vCisgICAgICAgaXMgaW4uICAqLworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5jdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5jdG9ycykpCisgICAgLyogV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSAuY3RvciBzZWN0aW9uIGZyb20KKyAgICAgICB0aGUgY3J0ZW5kLm8gZmlsZSB1bnRpbCBhZnRlciB0aGUgc29ydGVkIGN0b3JzLgorICAgICAgIFRoZSAuY3RvciBzZWN0aW9uIGZyb20gdGhlIGNydGVuZCBmaWxlIGNvbnRhaW5zIHRoZQorICAgICAgIGVuZCBvZiBjdG9ycyBtYXJrZXIgYW5kIGl0IG11c3QgYmUgbGFzdCAqLworICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5jdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5jdG9ycy4qKSkpCisgICAgS0VFUCAoKiguY3RvcnMpKQorICB9CisgIC5kdG9ycyAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqY3J0YmVnaW4ubyguZHRvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguZHRvcnMpKQorICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5kdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5kdG9ycy4qKSkpCisgICAgS0VFUCAoKiguZHRvcnMpKQorICB9CisgIC5qY3IgICAgICAgICAgICA6IHsgS0VFUCAoKiguamNyKSkgfQorICAuZGF0YS5yZWwucm8gOiB7ICooLmRhdGEucmVsLnJvLmxvY2FsKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLmxvY2FsLiopICooLmRhdGEucmVsLnJvKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLmR5bmFtaWMgICAgICAgIDogeyAqKC5keW5hbWljKSB9CisgIC4gPSBEQVRBX1NFR01FTlRfUkVMUk9fRU5EICgwLCAuKTsKKyAgLmdvdCAgICAgICAgICAgIDogeyAqKC5nb3QucGx0KSAqKC5pZ290LnBsdCkgKiguZ290KSAqKC5pZ290KSB9CisgIC5kYXRhICAgICAgICAgICA6CisgIHsKKyAgICBQUk9WSURFIChfX2RhdGFfc3RhcnQgPSAuKTsKKyAgICAqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisgICAgU09SVChDT05TVFJVQ1RPUlMpCisgIH0KKyAgLmRhdGExICAgICAgICAgIDogeyAqKC5kYXRhMSkgfQorICBfZWRhdGEgPSAuOyBQUk9WSURFIChlZGF0YSA9IC4pOworICBfX2Jzc19zdGFydCA9IC47CisgIF9fYnNzX3N0YXJ0X18gPSAuOworICAuYnNzICAgICAgICAgICAgOgorICB7CisgICAqKC5keW5ic3MpCisgICAqKC5ic3MgLmJzcy4qIC5nbnUubGlua29uY2UuYi4qKQorICAgKihDT01NT04pCisgICAvKiBBbGlnbiBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSAuYnNzIHNlY3Rpb24gb2NjdXBpZXMgc3BhY2UgdXAgdG8KKyAgICAgIF9lbmQuICBBbGlnbiBhZnRlciAuYnNzIHRvIGVuc3VyZSBjb3JyZWN0IGFsaWdubWVudCBldmVuIGlmIHRoZQorICAgICAgLmJzcyBzZWN0aW9uIGRpc2FwcGVhcnMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gaW5wdXQgc2VjdGlvbnMuCisgICAgICBGSVhNRTogV2h5IGRvIHdlIG5lZWQgaXQ/IFdoZW4gdGhlcmUgaXMgbm8gLmJzcyBzZWN0aW9uLCB3ZSBkb24ndAorICAgICAgcGFkIHRoZSAuZGF0YSBzZWN0aW9uLiAgKi8KKyAgIC4gPSBBTElHTiguICE9IDAgPyAzMiAvIDggOiAxKTsKKyAgfQorICBfYnNzX2VuZF9fID0gLiA7IF9fYnNzX2VuZF9fID0gLiA7CisgIC4gPSBBTElHTigzMiAvIDgpOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgX19lbmRfXyA9IC4gOworICBfZW5kID0gLjsgUFJPVklERSAoZW5kID0gLik7CisgIC4gPSBEQVRBX1NFR01FTlRfRU5EICguKTsKKyAgLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KKyAgLnN0YWIgICAgICAgICAgMCA6IHsgKiguc3RhYikgfQorICAuc3RhYnN0ciAgICAgICAwIDogeyAqKC5zdGFic3RyKSB9CisgIC5zdGFiLmV4Y2wgICAgIDAgOiB7ICooLnN0YWIuZXhjbCkgfQorICAuc3RhYi5leGNsc3RyICAwIDogeyAqKC5zdGFiLmV4Y2xzdHIpIH0KKyAgLnN0YWIuaW5kZXggICAgMCA6IHsgKiguc3RhYi5pbmRleCkgfQorICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9CisgIC5jb21tZW50ICAgICAgIDAgOiB7ICooLmNvbW1lbnQpIH0KKyAgLyogRFdBUkYgZGVidWcgc2VjdGlvbnMuCisgICAgIFN5bWJvbHMgaW4gdGhlIERXQVJGIGRlYnVnZ2luZyBzZWN0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc2VjdGlvbiBzbyB3ZSBiZWdpbiB0aGVtIGF0IDAuICAqLworICAvKiBEV0FSRiAxICovCisgIC5kZWJ1ZyAgICAgICAgICAwIDogeyAqKC5kZWJ1ZykgfQorICAubGluZSAgICAgICAgICAgMCA6IHsgKigubGluZSkgfQorICAvKiBHTlUgRFdBUkYgMSBleHRlbnNpb25zICovCisgIC5kZWJ1Z19zcmNpbmZvICAwIDogeyAqKC5kZWJ1Z19zcmNpbmZvKSB9CisgIC5kZWJ1Z19zZm5hbWVzICAwIDogeyAqKC5kZWJ1Z19zZm5hbWVzKSB9CisgIC8qIERXQVJGIDEuMSBhbmQgRFdBUkYgMiAqLworICAuZGVidWdfYXJhbmdlcyAgMCA6IHsgKiguZGVidWdfYXJhbmdlcykgfQorICAuZGVidWdfcHVibmFtZXMgMCA6IHsgKiguZGVidWdfcHVibmFtZXMpIH0KKyAgLyogRFdBUkYgMiAqLworICAuZGVidWdfaW5mbyAgICAgMCA6IHsgKiguZGVidWdfaW5mbyAuZ251LmxpbmtvbmNlLndpLiopIH0KKyAgLmRlYnVnX2FiYnJldiAgIDAgOiB7ICooLmRlYnVnX2FiYnJldikgfQorICAuZGVidWdfbGluZSAgICAgMCA6IHsgKiguZGVidWdfbGluZSkgfQorICAuZGVidWdfZnJhbWUgICAgMCA6IHsgKiguZGVidWdfZnJhbWUpIH0KKyAgLmRlYnVnX3N0ciAgICAgIDAgOiB7ICooLmRlYnVnX3N0cikgfQorICAuZGVidWdfbG9jICAgICAgMCA6IHsgKiguZGVidWdfbG9jKSB9CisgIC5kZWJ1Z19tYWNpbmZvICAwIDogeyAqKC5kZWJ1Z19tYWNpbmZvKSB9CisgIC8qIFNHSS9NSVBTIERXQVJGIDIgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfd2Vha25hbWVzIDAgOiB7ICooLmRlYnVnX3dlYWtuYW1lcykgfQorICAuZGVidWdfZnVuY25hbWVzIDAgOiB7ICooLmRlYnVnX2Z1bmNuYW1lcykgfQorICAuZGVidWdfdHlwZW5hbWVzIDAgOiB7ICooLmRlYnVnX3R5cGVuYW1lcykgfQorICAuZGVidWdfdmFybmFtZXMgIDAgOiB7ICooLmRlYnVnX3Zhcm5hbWVzKSB9CisgIC8qIERXQVJGIDMgKi8KKyAgLmRlYnVnX3B1YnR5cGVzIDAgOiB7ICooLmRlYnVnX3B1YnR5cGVzKSB9CisgIC5kZWJ1Z19yYW5nZXMgICAwIDogeyAqKC5kZWJ1Z19yYW5nZXMpIH0KKyAgLmdudS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLmdudS5hdHRyaWJ1dGVzKSkgfQorICAubm90ZS5nbnUuYXJtLmlkZW50IDAgOiB7IEtFRVAgKCooLm5vdGUuZ251LmFybS5pZGVudCkpIH0KKyAgL0RJU0NBUkQvIDogeyAqKC5ub3RlLkdOVS1zdGFjaykgKiguZ251X2RlYnVnbGluaykgKiguZ251Lmx0b18qKSB9Cit9CmRpZmYgLS1naXQgYS9saWIvbGRzY3JpcHRzL2FybWVsZl9saW51eF9lYWJpLnhkIGIvbGliL2xkc2NyaXB0cy9hcm1lbGZfbGludXhfZWFiaS54ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTNlYTk0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2xkc2NyaXB0cy9hcm1lbGZfbGludXhfZWFiaS54ZApAQCAtMCwwICsxLDIyNCBAQAorLyogU2NyaXB0IGZvciBsZCAtcGllOiBsaW5rIHBvc2l0aW9uIGluZGVwZW5kZW50IGV4ZWN1dGFibGUgKi8KK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1iaWdhcm0iLAorCSAgICAgICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VBUkNIX0RJUigiPS91c3IvbG9jYWwvbGliIik7IFNFQVJDSF9ESVIoIj0vbGliIik7IFNFQVJDSF9ESVIoIj0vdXNyL2xpYiIpOworU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC4gPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAwKSArIFNJWkVPRl9IRUFERVJTOworICAuaW50ZXJwICAgICAgICAgOiB7ICooLmludGVycCkgfQorICAubm90ZS5nbnUuYnVpbGQtaWQgOiB7ICooLm5vdGUuZ251LmJ1aWxkLWlkKSB9CisgIC5oYXNoICAgICAgICAgICA6IHsgKiguaGFzaCkgfQorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CisgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CisgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CisgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KKyAgLmdudS52ZXJzaW9uX2QgIDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CisgIC5nbnUudmVyc2lvbl9yICA6IHsgKiguZ251LnZlcnNpb25fcikgfQorICAucmVsLmluaXQgICAgICAgOiB7ICooLnJlbC5pbml0KSB9CisgIC5yZWxhLmluaXQgICAgICA6IHsgKigucmVsYS5pbml0KSB9CisgIC5yZWwudGV4dCAgICAgICA6IHsgKigucmVsLnRleHQgLnJlbC50ZXh0LiogLnJlbC5nbnUubGlua29uY2UudC4qKSB9CisgIC5yZWxhLnRleHQgICAgICA6IHsgKigucmVsYS50ZXh0IC5yZWxhLnRleHQuKiAucmVsYS5nbnUubGlua29uY2UudC4qKSB9CisgIC5yZWwuZmluaSAgICAgICA6IHsgKigucmVsLmZpbmkpIH0KKyAgLnJlbGEuZmluaSAgICAgIDogeyAqKC5yZWxhLmZpbmkpIH0KKyAgLnJlbC5yb2RhdGEgICAgIDogeyAqKC5yZWwucm9kYXRhIC5yZWwucm9kYXRhLiogLnJlbC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yZWxhLnJvZGF0YSAgICA6IHsgKigucmVsYS5yb2RhdGEgLnJlbGEucm9kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnIuKikgfQorICAucmVsLmRhdGEucmVsLnJvICAgOiB7ICooLnJlbC5kYXRhLnJlbC5ybyogLnJlbC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAucmVsYS5kYXRhLnJlbC5ybyAgIDogeyAqKC5yZWxhLmRhdGEucmVsLnJvKiAucmVsYS5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAucmVsLmRhdGEgICAgICAgOiB7ICooLnJlbC5kYXRhIC5yZWwuZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLmQuKikgfQorICAucmVsYS5kYXRhICAgICAgOiB7ICooLnJlbGEuZGF0YSAucmVsYS5kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLmQuKikgfQorICAucmVsLnRkYXRhCSAgOiB7ICooLnJlbC50ZGF0YSAucmVsLnRkYXRhLiogLnJlbC5nbnUubGlua29uY2UudGQuKikgfQorICAucmVsYS50ZGF0YQkgIDogeyAqKC5yZWxhLnRkYXRhIC5yZWxhLnRkYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnJlbC50YnNzCSAgOiB7ICooLnJlbC50YnNzIC5yZWwudGJzcy4qIC5yZWwuZ251LmxpbmtvbmNlLnRiLiopIH0KKyAgLnJlbGEudGJzcwkgIDogeyAqKC5yZWxhLnRic3MgLnJlbGEudGJzcy4qIC5yZWxhLmdudS5saW5rb25jZS50Yi4qKSB9CisgIC5yZWwuY3RvcnMgICAgICA6IHsgKigucmVsLmN0b3JzKSB9CisgIC5yZWxhLmN0b3JzICAgICA6IHsgKigucmVsYS5jdG9ycykgfQorICAucmVsLmR0b3JzICAgICAgOiB7ICooLnJlbC5kdG9ycykgfQorICAucmVsYS5kdG9ycyAgICAgOiB7ICooLnJlbGEuZHRvcnMpIH0KKyAgLnJlbC5nb3QgICAgICAgIDogeyAqKC5yZWwuZ290KSB9CisgIC5yZWxhLmdvdCAgICAgICA6IHsgKigucmVsYS5nb3QpIH0KKyAgLnJlbC5ic3MgICAgICAgIDogeyAqKC5yZWwuYnNzIC5yZWwuYnNzLiogLnJlbC5nbnUubGlua29uY2UuYi4qKSB9CisgIC5yZWxhLmJzcyAgICAgICA6IHsgKigucmVsYS5ic3MgLnJlbGEuYnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLmIuKikgfQorICAucmVsLmlwbHQgICAgICAgOgorICAgIHsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbF9pcGx0X3N0YXJ0ID0gLik7CisgICAgICAqKC5yZWwuaXBsdCkKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbF9pcGx0X2VuZCA9IC4pOworICAgIH0KKyAgLnJlbGEuaXBsdCAgICAgIDoKKyAgICB7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgICooLnJlbGEuaXBsdCkKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9lbmQgPSAuKTsKKyAgICB9CisgIC5yZWwucGx0ICAgICAgICA6CisgICAgeworICAgICAgKigucmVsLnBsdCkKKyAgICB9CisgIC5yZWxhLnBsdCAgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5wbHQpCisgICAgfQorICAuaW5pdCAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKiguaW5pdCkpCisgIH0gPTAKKyAgLnBsdCAgICAgICAgICAgIDogeyAqKC5wbHQpIH0KKyAgLmlwbHQgICAgICAgICAgIDogeyAqKC5pcGx0KSB9CisgIC50ZXh0ICAgICAgICAgICA6CisgIHsKKyAgICAqKC50ZXh0LnVubGlrZWx5IC50ZXh0LipfdW5saWtlbHkpCisgICAgKigudGV4dCAuc3R1YiAudGV4dC4qIC5nbnUubGlua29uY2UudC4qKQorICAgIC8qIC5nbnUud2FybmluZyBzZWN0aW9ucyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgYnkgZWxmMzIuZW0uICAqLworICAgICooLmdudS53YXJuaW5nKQorICAgICooLmdsdWVfN3QpICooLmdsdWVfNykgKigudmZwMTFfdmVuZWVyKSAqKC52NF9ieCkKKyAgfSA9MAorICAuZmluaSAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKiguZmluaSkpCisgIH0gPTAKKyAgUFJPVklERSAoX19ldGV4dCA9IC4pOworICBQUk9WSURFIChfZXRleHQgPSAuKTsKKyAgUFJPVklERSAoZXRleHQgPSAuKTsKKyAgLnJvZGF0YSAgICAgICAgIDogeyAqKC5yb2RhdGEgLnJvZGF0YS4qIC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yb2RhdGExICAgICAgICA6IHsgKigucm9kYXRhMSkgfQorICAuQVJNLmV4dGFiICAgOiB7ICooLkFSTS5leHRhYiogLmdudS5saW5rb25jZS5hcm1leHRhYi4qKSB9CisgICBfX2V4aWR4X3N0YXJ0ID0gLjsKKyAgLkFSTS5leGlkeCAgIDogeyAqKC5BUk0uZXhpZHgqIC5nbnUubGlua29uY2UuYXJtZXhpZHguKikgfQorICAgX19leGlkeF9lbmQgPSAuOworICAuZWhfZnJhbWVfaGRyIDogeyAqKC5laF9mcmFtZV9oZHIpIH0KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9STyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9STyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQuICBXZSB3YW50IHRvIGFkanVzdCB1cCB0bworICAgICB0aGUgc2FtZSBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZSBvbiB0aGUgbmV4dCBwYWdlIHVwLiAgKi8KKyAgLiA9IEFMSUdOIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpKSAtICgoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSAtIC4pICYgKENPTlNUQU5UIChNQVhQQUdFU0laRSkgLSAxKSk7IC4gPSBEQVRBX1NFR01FTlRfQUxJR04gKENPTlNUQU5UIChNQVhQQUdFU0laRSksIENPTlNUQU5UIChDT01NT05QQUdFU0laRSkpOworICAvKiBFeGNlcHRpb24gaGFuZGxpbmcgICovCisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUlcgeyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUlcgeyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogVGhyZWFkIExvY2FsIFN0b3JhZ2Ugc2VjdGlvbnMgICovCisgIC50ZGF0YQkgIDogeyAqKC50ZGF0YSAudGRhdGEuKiAuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnRic3MJCSAgOiB7ICooLnRic3MgLnRic3MuKiAuZ251LmxpbmtvbmNlLnRiLiopICooLnRjb21tb24pIH0KKyAgLnByZWluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKC5wcmVpbml0X2FycmF5KSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X2VuZCA9IC4pOworICB9CisgIC5pbml0X2FycmF5ICAgICA6CisgIHsKKyAgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgICBLRUVQICgqKFNPUlQoLmluaXRfYXJyYXkuKikpKQorICAgICBLRUVQICgqKC5pbml0X2FycmF5KSkKKyAgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuZmluaV9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooLmZpbmlfYXJyYXkpKQorICAgIEtFRVAgKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuY3RvcnMgICAgICAgICAgOgorICB7CisgICAgLyogZ2NjIHVzZXMgY3J0YmVnaW4ubyB0byBmaW5kIHRoZSBzdGFydCBvZgorICAgICAgIHRoZSBjb25zdHJ1Y3RvcnMsIHNvIHdlIG1ha2Ugc3VyZSBpdCBpcworICAgICAgIGZpcnN0LiAgQmVjYXVzZSB0aGlzIGlzIGEgd2lsZGNhcmQsIGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgaWYgdGhlIHVzZXIgZG9lcyBub3QKKyAgICAgICBhY3R1YWxseSBsaW5rIGFnYWluc3QgY3J0YmVnaW4ubzsgdGhlCisgICAgICAgbGlua2VyIHdvbid0IGxvb2sgZm9yIGEgZmlsZSB0byBtYXRjaCBhCisgICAgICAgd2lsZGNhcmQuICBUaGUgd2lsZGNhcmQgYWxzbyBtZWFucyB0aGF0IGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgd2hpY2ggZGlyZWN0b3J5IGNydGJlZ2luLm8KKyAgICAgICBpcyBpbi4gICovCisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmN0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmN0b3JzKSkKKyAgICAvKiBXZSBkb24ndCB3YW50IHRvIGluY2x1ZGUgdGhlIC5jdG9yIHNlY3Rpb24gZnJvbQorICAgICAgIHRoZSBjcnRlbmQubyBmaWxlIHVudGlsIGFmdGVyIHRoZSBzb3J0ZWQgY3RvcnMuCisgICAgICAgVGhlIC5jdG9yIHNlY3Rpb24gZnJvbSB0aGUgY3J0ZW5kIGZpbGUgY29udGFpbnMgdGhlCisgICAgICAgZW5kIG9mIGN0b3JzIG1hcmtlciBhbmQgaXQgbXVzdCBiZSBsYXN0ICovCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmN0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmN0b3JzLiopKSkKKyAgICBLRUVQICgqKC5jdG9ycykpCisgIH0KKyAgLmR0b3JzICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5kdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5kdG9ycykpCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmR0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmR0b3JzLiopKSkKKyAgICBLRUVQICgqKC5kdG9ycykpCisgIH0KKyAgLmpjciAgICAgICAgICAgIDogeyBLRUVQICgqKC5qY3IpKSB9CisgIC5kYXRhLnJlbC5ybyA6IHsgKiguZGF0YS5yZWwucm8ubG9jYWwqIC5nbnUubGlua29uY2UuZC5yZWwucm8ubG9jYWwuKikgKiguZGF0YS5yZWwucm8qIC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAuZHluYW1pYyAgICAgICAgOiB7ICooLmR5bmFtaWMpIH0KKyAgLiA9IERBVEFfU0VHTUVOVF9SRUxST19FTkQgKDAsIC4pOworICAuZ290ICAgICAgICAgICAgOiB7ICooLmdvdC5wbHQpICooLmlnb3QucGx0KSAqKC5nb3QpICooLmlnb3QpIH0KKyAgLmRhdGEgICAgICAgICAgIDoKKyAgeworICAgIFBST1ZJREUgKF9fZGF0YV9zdGFydCA9IC4pOworICAgICooLmRhdGEgLmRhdGEuKiAuZ251LmxpbmtvbmNlLmQuKikKKyAgICBTT1JUKENPTlNUUlVDVE9SUykKKyAgfQorICAuZGF0YTEgICAgICAgICAgOiB7ICooLmRhdGExKSB9CisgIF9lZGF0YSA9IC47IFBST1ZJREUgKGVkYXRhID0gLik7CisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgX19ic3Nfc3RhcnRfXyA9IC47CisgIC5ic3MgICAgICAgICAgICA6CisgIHsKKyAgICooLmR5bmJzcykKKyAgICooLmJzcyAuYnNzLiogLmdudS5saW5rb25jZS5iLiopCisgICAqKENPTU1PTikKKyAgIC8qIEFsaWduIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIC5ic3Mgc2VjdGlvbiBvY2N1cGllcyBzcGFjZSB1cCB0bworICAgICAgX2VuZC4gIEFsaWduIGFmdGVyIC5ic3MgdG8gZW5zdXJlIGNvcnJlY3QgYWxpZ25tZW50IGV2ZW4gaWYgdGhlCisgICAgICAuYnNzIHNlY3Rpb24gZGlzYXBwZWFycyBiZWNhdXNlIHRoZXJlIGFyZSBubyBpbnB1dCBzZWN0aW9ucy4KKyAgICAgIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCBpdD8gV2hlbiB0aGVyZSBpcyBubyAuYnNzIHNlY3Rpb24sIHdlIGRvbid0CisgICAgICBwYWQgdGhlIC5kYXRhIHNlY3Rpb24uICAqLworICAgLiA9IEFMSUdOKC4gIT0gMCA/IDMyIC8gOCA6IDEpOworICB9CisgIF9ic3NfZW5kX18gPSAuIDsgX19ic3NfZW5kX18gPSAuIDsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIC4gPSBBTElHTigzMiAvIDgpOworICBfX2VuZF9fID0gLiA7CisgIF9lbmQgPSAuOyBQUk9WSURFIChlbmQgPSAuKTsKKyAgLiA9IERBVEFfU0VHTUVOVF9FTkQgKC4pOworICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAgICAgICAgICAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyICAgICAgIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAgICAgMCA6IHsgKiguc3RhYi5leGNsKSB9CisgIC5zdGFiLmV4Y2xzdHIgIDAgOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAuc3RhYi5pbmRleCAgICAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisgIC5zdGFiLmluZGV4c3RyIDAgOiB7ICooLnN0YWIuaW5kZXhzdHIpIH0KKyAgLmNvbW1lbnQgICAgICAgMCA6IHsgKiguY29tbWVudCkgfQorICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KKyAgICAgU3ltYm9scyBpbiB0aGUgRFdBUkYgZGVidWdnaW5nIHNlY3Rpb25zIGFyZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nCisgICAgIG9mIHRoZSBzZWN0aW9uIHNvIHdlIGJlZ2luIHRoZW0gYXQgMC4gICovCisgIC8qIERXQVJGIDEgKi8KKyAgLmRlYnVnICAgICAgICAgIDAgOiB7ICooLmRlYnVnKSB9CisgIC5saW5lICAgICAgICAgICAwIDogeyAqKC5saW5lKSB9CisgIC8qIEdOVSBEV0FSRiAxIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3NyY2luZm8gIDAgOiB7ICooLmRlYnVnX3NyY2luZm8pIH0KKyAgLmRlYnVnX3NmbmFtZXMgIDAgOiB7ICooLmRlYnVnX3NmbmFtZXMpIH0KKyAgLyogRFdBUkYgMS4xIGFuZCBEV0FSRiAyICovCisgIC5kZWJ1Z19hcmFuZ2VzICAwIDogeyAqKC5kZWJ1Z19hcmFuZ2VzKSB9CisgIC5kZWJ1Z19wdWJuYW1lcyAwIDogeyAqKC5kZWJ1Z19wdWJuYW1lcykgfQorICAvKiBEV0FSRiAyICovCisgIC5kZWJ1Z19pbmZvICAgICAwIDogeyAqKC5kZWJ1Z19pbmZvIC5nbnUubGlua29uY2Uud2kuKikgfQorICAuZGVidWdfYWJicmV2ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9CisgIC5kZWJ1Z19saW5lICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisgIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5kZWJ1Z19mcmFtZSkgfQorICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9CisgIC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKyAgLmRlYnVnX21hY2luZm8gIDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0KKyAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRlbnNpb25zICovCisgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9CisgIC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9CisgIC5kZWJ1Z190eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9CisgIC5kZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKyAgLyogRFdBUkYgMyAqLworICAuZGVidWdfcHVidHlwZXMgMCA6IHsgKiguZGVidWdfcHVidHlwZXMpIH0KKyAgLmRlYnVnX3JhbmdlcyAgIDAgOiB7ICooLmRlYnVnX3JhbmdlcykgfQorICAuZ251LmF0dHJpYnV0ZXMgMCA6IHsgS0VFUCAoKiguZ251LmF0dHJpYnV0ZXMpKSB9CisgIC5ub3RlLmdudS5hcm0uaWRlbnQgMCA6IHsgS0VFUCAoKigubm90ZS5nbnUuYXJtLmlkZW50KSkgfQorICAvRElTQ0FSRC8gOiB7ICooLm5vdGUuR05VLXN0YWNrKSAqKC5nbnVfZGVidWdsaW5rKSAqKC5nbnUubHRvXyopIH0KK30KZGlmZiAtLWdpdCBhL2xpYi9sZHNjcmlwdHMvYXJtZWxmX2xpbnV4X2VhYmkueGRjIGIvbGliL2xkc2NyaXB0cy9hcm1lbGZfbGludXhfZWFiaS54ZGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM0ZjQ2ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9sZHNjcmlwdHMvYXJtZWxmX2xpbnV4X2VhYmkueGRjCkBAIC0wLDAgKzEsMjI3IEBACisvKiBTY3JpcHQgZm9yIC1waWUgLXogY29tYnJlbG9jOiBwb3NpdGlvbiBpbmRlcGVuZGVudCBleGVjdXRhYmxlLCBjb21iaW5lICYgc29ydCByZWxvY3MgKi8KK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1iaWdhcm0iLAorCSAgICAgICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VBUkNIX0RJUigiPS91c3IvbG9jYWwvbGliIik7IFNFQVJDSF9ESVIoIj0vbGliIik7IFNFQVJDSF9ESVIoIj0vdXNyL2xpYiIpOworU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC4gPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAwKSArIFNJWkVPRl9IRUFERVJTOworICAuaW50ZXJwICAgICAgICAgOiB7ICooLmludGVycCkgfQorICAubm90ZS5nbnUuYnVpbGQtaWQgOiB7ICooLm5vdGUuZ251LmJ1aWxkLWlkKSB9CisgIC5oYXNoICAgICAgICAgICA6IHsgKiguaGFzaCkgfQorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CisgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CisgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CisgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KKyAgLmdudS52ZXJzaW9uX2QgIDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CisgIC5nbnUudmVyc2lvbl9yICA6IHsgKiguZ251LnZlcnNpb25fcikgfQorICAucmVsLmR5biAgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbC5pbml0KQorICAgICAgKigucmVsLnRleHQgLnJlbC50ZXh0LiogLnJlbC5nbnUubGlua29uY2UudC4qKQorICAgICAgKigucmVsLmZpbmkpCisgICAgICAqKC5yZWwucm9kYXRhIC5yZWwucm9kYXRhLiogLnJlbC5nbnUubGlua29uY2Uuci4qKQorICAgICAgKigucmVsLmRhdGEucmVsLnJvKiAucmVsLmdudS5saW5rb25jZS5kLnJlbC5yby4qKQorICAgICAgKigucmVsLmRhdGEgLnJlbC5kYXRhLiogLnJlbC5nbnUubGlua29uY2UuZC4qKQorICAgICAgKigucmVsLnRkYXRhIC5yZWwudGRhdGEuKiAucmVsLmdudS5saW5rb25jZS50ZC4qKQorICAgICAgKigucmVsLnRic3MgLnJlbC50YnNzLiogLnJlbC5nbnUubGlua29uY2UudGIuKikKKyAgICAgICooLnJlbC5jdG9ycykKKyAgICAgICooLnJlbC5kdG9ycykKKyAgICAgICooLnJlbC5nb3QpCisgICAgICAqKC5yZWwuYnNzIC5yZWwuYnNzLiogLnJlbC5nbnUubGlua29uY2UuYi4qKQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgICooLnJlbC5pcGx0KQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfZW5kID0gLik7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9lbmQgPSAuKTsKKyAgICB9CisgIC5yZWxhLmR5biAgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5pbml0KQorICAgICAgKigucmVsYS50ZXh0IC5yZWxhLnRleHQuKiAucmVsYS5nbnUubGlua29uY2UudC4qKQorICAgICAgKigucmVsYS5maW5pKQorICAgICAgKigucmVsYS5yb2RhdGEgLnJlbGEucm9kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnIuKikKKyAgICAgICooLnJlbGEuZGF0YSAucmVsYS5kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLmQuKikKKyAgICAgICooLnJlbGEudGRhdGEgLnJlbGEudGRhdGEuKiAucmVsYS5nbnUubGlua29uY2UudGQuKikKKyAgICAgICooLnJlbGEudGJzcyAucmVsYS50YnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLnRiLiopCisgICAgICAqKC5yZWxhLmN0b3JzKQorICAgICAgKigucmVsYS5kdG9ycykKKyAgICAgICooLnJlbGEuZ290KQorICAgICAgKigucmVsYS5ic3MgLnJlbGEuYnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLmIuKikKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbF9pcGx0X3N0YXJ0ID0gLik7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9lbmQgPSAuKTsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9zdGFydCA9IC4pOworICAgICAgKigucmVsYS5pcGx0KQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X2VuZCA9IC4pOworICAgIH0KKyAgLnJlbC5wbHQgICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWwucGx0KQorICAgIH0KKyAgLnJlbGEucGx0ICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLnBsdCkKKyAgICB9CisgIC5pbml0ICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKC5pbml0KSkKKyAgfSA9MAorICAucGx0ICAgICAgICAgICAgOiB7ICooLnBsdCkgfQorICAuaXBsdCAgICAgICAgICAgOiB7ICooLmlwbHQpIH0KKyAgLnRleHQgICAgICAgICAgIDoKKyAgeworICAgICooLnRleHQudW5saWtlbHkgLnRleHQuKl91bmxpa2VseSkKKyAgICAqKC50ZXh0IC5zdHViIC50ZXh0LiogLmdudS5saW5rb25jZS50LiopCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgICAgKiguZ2x1ZV83dCkgKiguZ2x1ZV83KSAqKC52ZnAxMV92ZW5lZXIpICooLnY0X2J4KQorICB9ID0wCisgIC5maW5pICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKC5maW5pKSkKKyAgfSA9MAorICBQUk9WSURFIChfX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKF9ldGV4dCA9IC4pOworICBQUk9WSURFIChldGV4dCA9IC4pOworICAucm9kYXRhICAgICAgICAgOiB7ICooLnJvZGF0YSAucm9kYXRhLiogLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJvZGF0YTEgICAgICAgIDogeyAqKC5yb2RhdGExKSB9CisgIC5BUk0uZXh0YWIgICA6IHsgKiguQVJNLmV4dGFiKiAuZ251LmxpbmtvbmNlLmFybWV4dGFiLiopIH0KKyAgIF9fZXhpZHhfc3RhcnQgPSAuOworICAuQVJNLmV4aWR4ICAgOiB7ICooLkFSTS5leGlkeCogLmdudS5saW5rb25jZS5hcm1leGlkeC4qKSB9CisgICBfX2V4aWR4X2VuZCA9IC47CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAuID0gQUxJR04gKENPTlNUQU5UIChNQVhQQUdFU0laRSkpIC0gKChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gLikgJiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSAtIDEpKTsgLiA9IERBVEFfU0VHTUVOVF9BTElHTiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSwgQ09OU1RBTlQgKENPTU1PTlBBR0VTSVpFKSk7CisgIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyAgKi8KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9SVyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9SVyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCSAgOiB7ICooLnRkYXRhIC50ZGF0YS4qIC5nbnUubGlua29uY2UudGQuKikgfQorICAudGJzcwkJICA6IHsgKigudGJzcyAudGJzcy4qIC5nbnUubGlua29uY2UudGIuKikgKigudGNvbW1vbikgfQorICAucHJlaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmluaXRfYXJyYXkgICAgIDoKKyAgeworICAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgIEtFRVAgKCooLmluaXRfYXJyYXkpKQorICAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X2VuZCA9IC4pOworICB9CisgIC5maW5pX2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgICAgS0VFUCAoKihTT1JUKC5maW5pX2FycmF5LiopKSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X2VuZCA9IC4pOworICB9CisgIC5jdG9ycyAgICAgICAgICA6CisgIHsKKyAgICAvKiBnY2MgdXNlcyBjcnRiZWdpbi5vIHRvIGZpbmQgdGhlIHN0YXJ0IG9mCisgICAgICAgdGhlIGNvbnN0cnVjdG9ycywgc28gd2UgbWFrZSBzdXJlIGl0IGlzCisgICAgICAgZmlyc3QuICBCZWNhdXNlIHRoaXMgaXMgYSB3aWxkY2FyZCwgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciBpZiB0aGUgdXNlciBkb2VzIG5vdAorICAgICAgIGFjdHVhbGx5IGxpbmsgYWdhaW5zdCBjcnRiZWdpbi5vOyB0aGUKKyAgICAgICBsaW5rZXIgd29uJ3QgbG9vayBmb3IgYSBmaWxlIHRvIG1hdGNoIGEKKyAgICAgICB3aWxkY2FyZC4gIFRoZSB3aWxkY2FyZCBhbHNvIG1lYW5zIHRoYXQgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciB3aGljaCBkaXJlY3RvcnkgY3J0YmVnaW4ubworICAgICAgIGlzIGluLiAgKi8KKyAgICBLRUVQICgqY3J0YmVnaW4ubyguY3RvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguY3RvcnMpKQorICAgIC8qIFdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGUgLmN0b3Igc2VjdGlvbiBmcm9tCisgICAgICAgdGhlIGNydGVuZC5vIGZpbGUgdW50aWwgYWZ0ZXIgdGhlIHNvcnRlZCBjdG9ycy4KKyAgICAgICBUaGUgLmN0b3Igc2VjdGlvbiBmcm9tIHRoZSBjcnRlbmQgZmlsZSBjb250YWlucyB0aGUKKyAgICAgICBlbmQgb2YgY3RvcnMgbWFya2VyIGFuZCBpdCBtdXN0IGJlIGxhc3QgKi8KKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuY3RvcnMpKQorICAgIEtFRVAgKCooU09SVCguY3RvcnMuKikpKQorICAgIEtFRVAgKCooLmN0b3JzKSkKKyAgfQorICAuZHRvcnMgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmR0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmR0b3JzKSkKKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuZHRvcnMpKQorICAgIEtFRVAgKCooU09SVCguZHRvcnMuKikpKQorICAgIEtFRVAgKCooLmR0b3JzKSkKKyAgfQorICAuamNyICAgICAgICAgICAgOiB7IEtFRVAgKCooLmpjcikpIH0KKyAgLmRhdGEucmVsLnJvIDogeyAqKC5kYXRhLnJlbC5yby5sb2NhbCogLmdudS5saW5rb25jZS5kLnJlbC5yby5sb2NhbC4qKSAqKC5kYXRhLnJlbC5ybyogLmdudS5saW5rb25jZS5kLnJlbC5yby4qKSB9CisgIC5keW5hbWljICAgICAgICA6IHsgKiguZHluYW1pYykgfQorICAuID0gREFUQV9TRUdNRU5UX1JFTFJPX0VORCAoMCwgLik7CisgIC5nb3QgICAgICAgICAgICA6IHsgKiguZ290LnBsdCkgKiguaWdvdC5wbHQpICooLmdvdCkgKiguaWdvdCkgfQorICAuZGF0YSAgICAgICAgICAgOgorICB7CisgICAgUFJPVklERSAoX19kYXRhX3N0YXJ0ID0gLik7CisgICAgKiguZGF0YSAuZGF0YS4qIC5nbnUubGlua29uY2UuZC4qKQorICAgIFNPUlQoQ09OU1RSVUNUT1JTKQorICB9CisgIC5kYXRhMSAgICAgICAgICA6IHsgKiguZGF0YTEpIH0KKyAgX2VkYXRhID0gLjsgUFJPVklERSAoZWRhdGEgPSAuKTsKKyAgX19ic3Nfc3RhcnQgPSAuOworICBfX2Jzc19zdGFydF9fID0gLjsKKyAgLmJzcyAgICAgICAgICAgIDoKKyAgeworICAgKiguZHluYnNzKQorICAgKiguYnNzIC5ic3MuKiAuZ251LmxpbmtvbmNlLmIuKikKKyAgICooQ09NTU9OKQorICAgLyogQWxpZ24gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgLmJzcyBzZWN0aW9uIG9jY3VwaWVzIHNwYWNlIHVwIHRvCisgICAgICBfZW5kLiAgQWxpZ24gYWZ0ZXIgLmJzcyB0byBlbnN1cmUgY29ycmVjdCBhbGlnbm1lbnQgZXZlbiBpZiB0aGUKKyAgICAgIC5ic3Mgc2VjdGlvbiBkaXNhcHBlYXJzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGlucHV0IHNlY3Rpb25zLgorICAgICAgRklYTUU6IFdoeSBkbyB3ZSBuZWVkIGl0PyBXaGVuIHRoZXJlIGlzIG5vIC5ic3Mgc2VjdGlvbiwgd2UgZG9uJ3QKKyAgICAgIHBhZCB0aGUgLmRhdGEgc2VjdGlvbi4gICovCisgICAuID0gQUxJR04oLiAhPSAwID8gMzIgLyA4IDogMSk7CisgIH0KKyAgX2Jzc19lbmRfXyA9IC4gOyBfX2Jzc19lbmRfXyA9IC4gOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIF9fZW5kX18gPSAuIDsKKyAgX2VuZCA9IC47IFBST1ZJREUgKGVuZCA9IC4pOworICAuID0gREFUQV9TRUdNRU5UX0VORCAoLik7CisgIC8qIFN0YWJzIGRlYnVnZ2luZyBzZWN0aW9ucy4gICovCisgIC5zdGFiICAgICAgICAgIDAgOiB7ICooLnN0YWIpIH0KKyAgLnN0YWJzdHIgICAgICAgMCA6IHsgKiguc3RhYnN0cikgfQorICAuc3RhYi5leGNsICAgICAwIDogeyAqKC5zdGFiLmV4Y2wpIH0KKyAgLnN0YWIuZXhjbHN0ciAgMCA6IHsgKiguc3RhYi5leGNsc3RyKSB9CisgIC5zdGFiLmluZGV4ICAgIDAgOiB7ICooLnN0YWIuaW5kZXgpIH0KKyAgLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQorICAuY29tbWVudCAgICAgICAwIDogeyAqKC5jb21tZW50KSB9CisgIC8qIERXQVJGIGRlYnVnIHNlY3Rpb25zLgorICAgICBTeW1ib2xzIGluIHRoZSBEV0FSRiBkZWJ1Z2dpbmcgc2VjdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcKKyAgICAgb2YgdGhlIHNlY3Rpb24gc28gd2UgYmVnaW4gdGhlbSBhdCAwLiAgKi8KKyAgLyogRFdBUkYgMSAqLworICAuZGVidWcgICAgICAgICAgMCA6IHsgKiguZGVidWcpIH0KKyAgLmxpbmUgICAgICAgICAgIDAgOiB7ICooLmxpbmUpIH0KKyAgLyogR05VIERXQVJGIDEgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfc3JjaW5mbyAgMCA6IHsgKiguZGVidWdfc3JjaW5mbykgfQorICAuZGVidWdfc2ZuYW1lcyAgMCA6IHsgKiguZGVidWdfc2ZuYW1lcykgfQorICAvKiBEV0FSRiAxLjEgYW5kIERXQVJGIDIgKi8KKyAgLmRlYnVnX2FyYW5nZXMgIDAgOiB7ICooLmRlYnVnX2FyYW5nZXMpIH0KKyAgLmRlYnVnX3B1Ym5hbWVzIDAgOiB7ICooLmRlYnVnX3B1Ym5hbWVzKSB9CisgIC8qIERXQVJGIDIgKi8KKyAgLmRlYnVnX2luZm8gICAgIDAgOiB7ICooLmRlYnVnX2luZm8gLmdudS5saW5rb25jZS53aS4qKSB9CisgIC5kZWJ1Z19hYmJyZXYgICAwIDogeyAqKC5kZWJ1Z19hYmJyZXYpIH0KKyAgLmRlYnVnX2xpbmUgICAgIDAgOiB7ICooLmRlYnVnX2xpbmUpIH0KKyAgLmRlYnVnX2ZyYW1lICAgIDAgOiB7ICooLmRlYnVnX2ZyYW1lKSB9CisgIC5kZWJ1Z19zdHIgICAgICAwIDogeyAqKC5kZWJ1Z19zdHIpIH0KKyAgLmRlYnVnX2xvYyAgICAgIDAgOiB7ICooLmRlYnVnX2xvYykgfQorICAuZGVidWdfbWFjaW5mbyAgMCA6IHsgKiguZGVidWdfbWFjaW5mbykgfQorICAvKiBTR0kvTUlQUyBEV0FSRiAyIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3dlYWtuYW1lcyAwIDogeyAqKC5kZWJ1Z193ZWFrbmFtZXMpIH0KKyAgLmRlYnVnX2Z1bmNuYW1lcyAwIDogeyAqKC5kZWJ1Z19mdW5jbmFtZXMpIH0KKyAgLmRlYnVnX3R5cGVuYW1lcyAwIDogeyAqKC5kZWJ1Z190eXBlbmFtZXMpIH0KKyAgLmRlYnVnX3Zhcm5hbWVzICAwIDogeyAqKC5kZWJ1Z192YXJuYW1lcykgfQorICAvKiBEV0FSRiAzICovCisgIC5kZWJ1Z19wdWJ0eXBlcyAwIDogeyAqKC5kZWJ1Z19wdWJ0eXBlcykgfQorICAuZGVidWdfcmFuZ2VzICAgMCA6IHsgKiguZGVidWdfcmFuZ2VzKSB9CisgIC5nbnUuYXR0cmlidXRlcyAwIDogeyBLRUVQICgqKC5nbnUuYXR0cmlidXRlcykpIH0KKyAgLm5vdGUuZ251LmFybS5pZGVudCAwIDogeyBLRUVQICgqKC5ub3RlLmdudS5hcm0uaWRlbnQpKSB9CisgIC9ESVNDQVJELyA6IHsgKigubm90ZS5HTlUtc3RhY2spICooLmdudV9kZWJ1Z2xpbmspICooLmdudS5sdG9fKikgfQorfQpkaWZmIC0tZ2l0IGEvbGliL2xkc2NyaXB0cy9hcm1lbGZfbGludXhfZWFiaS54ZHcgYi9saWIvbGRzY3JpcHRzL2FybWVsZl9saW51eF9lYWJpLnhkdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWUwZjdmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2xkc2NyaXB0cy9hcm1lbGZfbGludXhfZWFiaS54ZHcKQEAgLTAsMCArMSwyMjcgQEAKKy8qIFNjcmlwdCBmb3IgLXBpZSAteiBjb21icmVsb2MgLXogbm93IC16IHJlbHJvOiBwb3NpdGlvbiBpbmRlcGVuZGVudCBleGVjdXRhYmxlLCBjb21iaW5lICYgc29ydCByZWxvY3MgKi8KK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1iaWdhcm0iLAorCSAgICAgICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VBUkNIX0RJUigiPS91c3IvbG9jYWwvbGliIik7IFNFQVJDSF9ESVIoIj0vbGliIik7IFNFQVJDSF9ESVIoIj0vdXNyL2xpYiIpOworU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC4gPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAwKSArIFNJWkVPRl9IRUFERVJTOworICAuaW50ZXJwICAgICAgICAgOiB7ICooLmludGVycCkgfQorICAubm90ZS5nbnUuYnVpbGQtaWQgOiB7ICooLm5vdGUuZ251LmJ1aWxkLWlkKSB9CisgIC5oYXNoICAgICAgICAgICA6IHsgKiguaGFzaCkgfQorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CisgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CisgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CisgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KKyAgLmdudS52ZXJzaW9uX2QgIDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CisgIC5nbnUudmVyc2lvbl9yICA6IHsgKiguZ251LnZlcnNpb25fcikgfQorICAucmVsLmR5biAgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbC5pbml0KQorICAgICAgKigucmVsLnRleHQgLnJlbC50ZXh0LiogLnJlbC5nbnUubGlua29uY2UudC4qKQorICAgICAgKigucmVsLmZpbmkpCisgICAgICAqKC5yZWwucm9kYXRhIC5yZWwucm9kYXRhLiogLnJlbC5nbnUubGlua29uY2Uuci4qKQorICAgICAgKigucmVsLmRhdGEucmVsLnJvKiAucmVsLmdudS5saW5rb25jZS5kLnJlbC5yby4qKQorICAgICAgKigucmVsLmRhdGEgLnJlbC5kYXRhLiogLnJlbC5nbnUubGlua29uY2UuZC4qKQorICAgICAgKigucmVsLnRkYXRhIC5yZWwudGRhdGEuKiAucmVsLmdudS5saW5rb25jZS50ZC4qKQorICAgICAgKigucmVsLnRic3MgLnJlbC50YnNzLiogLnJlbC5nbnUubGlua29uY2UudGIuKikKKyAgICAgICooLnJlbC5jdG9ycykKKyAgICAgICooLnJlbC5kdG9ycykKKyAgICAgICooLnJlbC5nb3QpCisgICAgICAqKC5yZWwuYnNzIC5yZWwuYnNzLiogLnJlbC5nbnUubGlua29uY2UuYi4qKQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgICooLnJlbC5pcGx0KQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfZW5kID0gLik7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9lbmQgPSAuKTsKKyAgICB9CisgIC5yZWxhLmR5biAgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5pbml0KQorICAgICAgKigucmVsYS50ZXh0IC5yZWxhLnRleHQuKiAucmVsYS5nbnUubGlua29uY2UudC4qKQorICAgICAgKigucmVsYS5maW5pKQorICAgICAgKigucmVsYS5yb2RhdGEgLnJlbGEucm9kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnIuKikKKyAgICAgICooLnJlbGEuZGF0YSAucmVsYS5kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLmQuKikKKyAgICAgICooLnJlbGEudGRhdGEgLnJlbGEudGRhdGEuKiAucmVsYS5nbnUubGlua29uY2UudGQuKikKKyAgICAgICooLnJlbGEudGJzcyAucmVsYS50YnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLnRiLiopCisgICAgICAqKC5yZWxhLmN0b3JzKQorICAgICAgKigucmVsYS5kdG9ycykKKyAgICAgICooLnJlbGEuZ290KQorICAgICAgKigucmVsYS5ic3MgLnJlbGEuYnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLmIuKikKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbF9pcGx0X3N0YXJ0ID0gLik7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9lbmQgPSAuKTsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9zdGFydCA9IC4pOworICAgICAgKigucmVsYS5pcGx0KQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X2VuZCA9IC4pOworICAgIH0KKyAgLnJlbC5wbHQgICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWwucGx0KQorICAgIH0KKyAgLnJlbGEucGx0ICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLnBsdCkKKyAgICB9CisgIC5pbml0ICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKC5pbml0KSkKKyAgfSA9MAorICAucGx0ICAgICAgICAgICAgOiB7ICooLnBsdCkgfQorICAuaXBsdCAgICAgICAgICAgOiB7ICooLmlwbHQpIH0KKyAgLnRleHQgICAgICAgICAgIDoKKyAgeworICAgICooLnRleHQudW5saWtlbHkgLnRleHQuKl91bmxpa2VseSkKKyAgICAqKC50ZXh0IC5zdHViIC50ZXh0LiogLmdudS5saW5rb25jZS50LiopCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgICAgKiguZ2x1ZV83dCkgKiguZ2x1ZV83KSAqKC52ZnAxMV92ZW5lZXIpICooLnY0X2J4KQorICB9ID0wCisgIC5maW5pICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKC5maW5pKSkKKyAgfSA9MAorICBQUk9WSURFIChfX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKF9ldGV4dCA9IC4pOworICBQUk9WSURFIChldGV4dCA9IC4pOworICAucm9kYXRhICAgICAgICAgOiB7ICooLnJvZGF0YSAucm9kYXRhLiogLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJvZGF0YTEgICAgICAgIDogeyAqKC5yb2RhdGExKSB9CisgIC5BUk0uZXh0YWIgICA6IHsgKiguQVJNLmV4dGFiKiAuZ251LmxpbmtvbmNlLmFybWV4dGFiLiopIH0KKyAgIF9fZXhpZHhfc3RhcnQgPSAuOworICAuQVJNLmV4aWR4ICAgOiB7ICooLkFSTS5leGlkeCogLmdudS5saW5rb25jZS5hcm1leGlkeC4qKSB9CisgICBfX2V4aWR4X2VuZCA9IC47CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAuID0gQUxJR04gKENPTlNUQU5UIChNQVhQQUdFU0laRSkpIC0gKChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gLikgJiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSAtIDEpKTsgLiA9IERBVEFfU0VHTUVOVF9BTElHTiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSwgQ09OU1RBTlQgKENPTU1PTlBBR0VTSVpFKSk7CisgIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyAgKi8KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9SVyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9SVyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCSAgOiB7ICooLnRkYXRhIC50ZGF0YS4qIC5nbnUubGlua29uY2UudGQuKikgfQorICAudGJzcwkJICA6IHsgKigudGJzcyAudGJzcy4qIC5nbnUubGlua29uY2UudGIuKikgKigudGNvbW1vbikgfQorICAucHJlaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmluaXRfYXJyYXkgICAgIDoKKyAgeworICAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgIEtFRVAgKCooLmluaXRfYXJyYXkpKQorICAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X2VuZCA9IC4pOworICB9CisgIC5maW5pX2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgICAgS0VFUCAoKihTT1JUKC5maW5pX2FycmF5LiopKSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X2VuZCA9IC4pOworICB9CisgIC5jdG9ycyAgICAgICAgICA6CisgIHsKKyAgICAvKiBnY2MgdXNlcyBjcnRiZWdpbi5vIHRvIGZpbmQgdGhlIHN0YXJ0IG9mCisgICAgICAgdGhlIGNvbnN0cnVjdG9ycywgc28gd2UgbWFrZSBzdXJlIGl0IGlzCisgICAgICAgZmlyc3QuICBCZWNhdXNlIHRoaXMgaXMgYSB3aWxkY2FyZCwgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciBpZiB0aGUgdXNlciBkb2VzIG5vdAorICAgICAgIGFjdHVhbGx5IGxpbmsgYWdhaW5zdCBjcnRiZWdpbi5vOyB0aGUKKyAgICAgICBsaW5rZXIgd29uJ3QgbG9vayBmb3IgYSBmaWxlIHRvIG1hdGNoIGEKKyAgICAgICB3aWxkY2FyZC4gIFRoZSB3aWxkY2FyZCBhbHNvIG1lYW5zIHRoYXQgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciB3aGljaCBkaXJlY3RvcnkgY3J0YmVnaW4ubworICAgICAgIGlzIGluLiAgKi8KKyAgICBLRUVQICgqY3J0YmVnaW4ubyguY3RvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguY3RvcnMpKQorICAgIC8qIFdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGUgLmN0b3Igc2VjdGlvbiBmcm9tCisgICAgICAgdGhlIGNydGVuZC5vIGZpbGUgdW50aWwgYWZ0ZXIgdGhlIHNvcnRlZCBjdG9ycy4KKyAgICAgICBUaGUgLmN0b3Igc2VjdGlvbiBmcm9tIHRoZSBjcnRlbmQgZmlsZSBjb250YWlucyB0aGUKKyAgICAgICBlbmQgb2YgY3RvcnMgbWFya2VyIGFuZCBpdCBtdXN0IGJlIGxhc3QgKi8KKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuY3RvcnMpKQorICAgIEtFRVAgKCooU09SVCguY3RvcnMuKikpKQorICAgIEtFRVAgKCooLmN0b3JzKSkKKyAgfQorICAuZHRvcnMgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmR0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmR0b3JzKSkKKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuZHRvcnMpKQorICAgIEtFRVAgKCooU09SVCguZHRvcnMuKikpKQorICAgIEtFRVAgKCooLmR0b3JzKSkKKyAgfQorICAuamNyICAgICAgICAgICAgOiB7IEtFRVAgKCooLmpjcikpIH0KKyAgLmRhdGEucmVsLnJvIDogeyAqKC5kYXRhLnJlbC5yby5sb2NhbCogLmdudS5saW5rb25jZS5kLnJlbC5yby5sb2NhbC4qKSAqKC5kYXRhLnJlbC5ybyogLmdudS5saW5rb25jZS5kLnJlbC5yby4qKSB9CisgIC5keW5hbWljICAgICAgICA6IHsgKiguZHluYW1pYykgfQorICAuZ290ICAgICAgICAgICAgOiB7ICooLmdvdC5wbHQpICooLmlnb3QucGx0KSAqKC5nb3QpICooLmlnb3QpIH0KKyAgLiA9IERBVEFfU0VHTUVOVF9SRUxST19FTkQgKDAsIC4pOworICAuZGF0YSAgICAgICAgICAgOgorICB7CisgICAgUFJPVklERSAoX19kYXRhX3N0YXJ0ID0gLik7CisgICAgKiguZGF0YSAuZGF0YS4qIC5nbnUubGlua29uY2UuZC4qKQorICAgIFNPUlQoQ09OU1RSVUNUT1JTKQorICB9CisgIC5kYXRhMSAgICAgICAgICA6IHsgKiguZGF0YTEpIH0KKyAgX2VkYXRhID0gLjsgUFJPVklERSAoZWRhdGEgPSAuKTsKKyAgX19ic3Nfc3RhcnQgPSAuOworICBfX2Jzc19zdGFydF9fID0gLjsKKyAgLmJzcyAgICAgICAgICAgIDoKKyAgeworICAgKiguZHluYnNzKQorICAgKiguYnNzIC5ic3MuKiAuZ251LmxpbmtvbmNlLmIuKikKKyAgICooQ09NTU9OKQorICAgLyogQWxpZ24gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgLmJzcyBzZWN0aW9uIG9jY3VwaWVzIHNwYWNlIHVwIHRvCisgICAgICBfZW5kLiAgQWxpZ24gYWZ0ZXIgLmJzcyB0byBlbnN1cmUgY29ycmVjdCBhbGlnbm1lbnQgZXZlbiBpZiB0aGUKKyAgICAgIC5ic3Mgc2VjdGlvbiBkaXNhcHBlYXJzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGlucHV0IHNlY3Rpb25zLgorICAgICAgRklYTUU6IFdoeSBkbyB3ZSBuZWVkIGl0PyBXaGVuIHRoZXJlIGlzIG5vIC5ic3Mgc2VjdGlvbiwgd2UgZG9uJ3QKKyAgICAgIHBhZCB0aGUgLmRhdGEgc2VjdGlvbi4gICovCisgICAuID0gQUxJR04oLiAhPSAwID8gMzIgLyA4IDogMSk7CisgIH0KKyAgX2Jzc19lbmRfXyA9IC4gOyBfX2Jzc19lbmRfXyA9IC4gOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIF9fZW5kX18gPSAuIDsKKyAgX2VuZCA9IC47IFBST1ZJREUgKGVuZCA9IC4pOworICAuID0gREFUQV9TRUdNRU5UX0VORCAoLik7CisgIC8qIFN0YWJzIGRlYnVnZ2luZyBzZWN0aW9ucy4gICovCisgIC5zdGFiICAgICAgICAgIDAgOiB7ICooLnN0YWIpIH0KKyAgLnN0YWJzdHIgICAgICAgMCA6IHsgKiguc3RhYnN0cikgfQorICAuc3RhYi5leGNsICAgICAwIDogeyAqKC5zdGFiLmV4Y2wpIH0KKyAgLnN0YWIuZXhjbHN0ciAgMCA6IHsgKiguc3RhYi5leGNsc3RyKSB9CisgIC5zdGFiLmluZGV4ICAgIDAgOiB7ICooLnN0YWIuaW5kZXgpIH0KKyAgLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQorICAuY29tbWVudCAgICAgICAwIDogeyAqKC5jb21tZW50KSB9CisgIC8qIERXQVJGIGRlYnVnIHNlY3Rpb25zLgorICAgICBTeW1ib2xzIGluIHRoZSBEV0FSRiBkZWJ1Z2dpbmcgc2VjdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcKKyAgICAgb2YgdGhlIHNlY3Rpb24gc28gd2UgYmVnaW4gdGhlbSBhdCAwLiAgKi8KKyAgLyogRFdBUkYgMSAqLworICAuZGVidWcgICAgICAgICAgMCA6IHsgKiguZGVidWcpIH0KKyAgLmxpbmUgICAgICAgICAgIDAgOiB7ICooLmxpbmUpIH0KKyAgLyogR05VIERXQVJGIDEgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfc3JjaW5mbyAgMCA6IHsgKiguZGVidWdfc3JjaW5mbykgfQorICAuZGVidWdfc2ZuYW1lcyAgMCA6IHsgKiguZGVidWdfc2ZuYW1lcykgfQorICAvKiBEV0FSRiAxLjEgYW5kIERXQVJGIDIgKi8KKyAgLmRlYnVnX2FyYW5nZXMgIDAgOiB7ICooLmRlYnVnX2FyYW5nZXMpIH0KKyAgLmRlYnVnX3B1Ym5hbWVzIDAgOiB7ICooLmRlYnVnX3B1Ym5hbWVzKSB9CisgIC8qIERXQVJGIDIgKi8KKyAgLmRlYnVnX2luZm8gICAgIDAgOiB7ICooLmRlYnVnX2luZm8gLmdudS5saW5rb25jZS53aS4qKSB9CisgIC5kZWJ1Z19hYmJyZXYgICAwIDogeyAqKC5kZWJ1Z19hYmJyZXYpIH0KKyAgLmRlYnVnX2xpbmUgICAgIDAgOiB7ICooLmRlYnVnX2xpbmUpIH0KKyAgLmRlYnVnX2ZyYW1lICAgIDAgOiB7ICooLmRlYnVnX2ZyYW1lKSB9CisgIC5kZWJ1Z19zdHIgICAgICAwIDogeyAqKC5kZWJ1Z19zdHIpIH0KKyAgLmRlYnVnX2xvYyAgICAgIDAgOiB7ICooLmRlYnVnX2xvYykgfQorICAuZGVidWdfbWFjaW5mbyAgMCA6IHsgKiguZGVidWdfbWFjaW5mbykgfQorICAvKiBTR0kvTUlQUyBEV0FSRiAyIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3dlYWtuYW1lcyAwIDogeyAqKC5kZWJ1Z193ZWFrbmFtZXMpIH0KKyAgLmRlYnVnX2Z1bmNuYW1lcyAwIDogeyAqKC5kZWJ1Z19mdW5jbmFtZXMpIH0KKyAgLmRlYnVnX3R5cGVuYW1lcyAwIDogeyAqKC5kZWJ1Z190eXBlbmFtZXMpIH0KKyAgLmRlYnVnX3Zhcm5hbWVzICAwIDogeyAqKC5kZWJ1Z192YXJuYW1lcykgfQorICAvKiBEV0FSRiAzICovCisgIC5kZWJ1Z19wdWJ0eXBlcyAwIDogeyAqKC5kZWJ1Z19wdWJ0eXBlcykgfQorICAuZGVidWdfcmFuZ2VzICAgMCA6IHsgKiguZGVidWdfcmFuZ2VzKSB9CisgIC5nbnUuYXR0cmlidXRlcyAwIDogeyBLRUVQICgqKC5nbnUuYXR0cmlidXRlcykpIH0KKyAgLm5vdGUuZ251LmFybS5pZGVudCAwIDogeyBLRUVQICgqKC5ub3RlLmdudS5hcm0uaWRlbnQpKSB9CisgIC9ESVNDQVJELyA6IHsgKigubm90ZS5HTlUtc3RhY2spICooLmdudV9kZWJ1Z2xpbmspICooLmdudS5sdG9fKikgfQorfQpkaWZmIC0tZ2l0IGEvbGliL2xkc2NyaXB0cy9hcm1lbGZfbGludXhfZWFiaS54biBiL2xpYi9sZHNjcmlwdHMvYXJtZWxmX2xpbnV4X2VhYmkueG4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRhMjZmMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9sZHNjcmlwdHMvYXJtZWxmX2xpbnV4X2VhYmkueG4KQEAgLTAsMCArMSwyMjQgQEAKKy8qIFNjcmlwdCBmb3IgLW46IG1peCB0ZXh0IGFuZCBkYXRhIG9uIHNhbWUgcGFnZSAqLworT1VUUFVUX0ZPUk1BVCgiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWJpZ2FybSIsCisJICAgICAgImVsZjMyLWxpdHRsZWFybSIpCitPVVRQVVRfQVJDSChhcm0pCitFTlRSWShfc3RhcnQpCitTRUFSQ0hfRElSKCI9L3Vzci9sb2NhbC9saWIiKTsgU0VBUkNIX0RJUigiPS9saWIiKTsgU0VBUkNIX0RJUigiPS91c3IvbGliIik7CitTRUNUSU9OUworeworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgUFJPVklERSAoX19leGVjdXRhYmxlX3N0YXJ0ID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHgwMDAwODAwMCkpOyAuID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHgwMDAwODAwMCkgKyBTSVpFT0ZfSEVBREVSUzsKKyAgLmludGVycCAgICAgICAgIDogeyAqKC5pbnRlcnApIH0KKyAgLm5vdGUuZ251LmJ1aWxkLWlkIDogeyAqKC5ub3RlLmdudS5idWlsZC1pZCkgfQorICAuaGFzaCAgICAgICAgICAgOiB7ICooLmhhc2gpIH0KKyAgLmdudS5oYXNoICAgICAgIDogeyAqKC5nbnUuaGFzaCkgfQorICAuZHluc3ltICAgICAgICAgOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyICAgICAgICAgOiB7ICooLmR5bnN0cikgfQorICAuZ251LnZlcnNpb24gICAgOiB7ICooLmdudS52ZXJzaW9uKSB9CisgIC5nbnUudmVyc2lvbl9kICA6IHsgKiguZ251LnZlcnNpb25fZCkgfQorICAuZ251LnZlcnNpb25fciAgOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KKyAgLnJlbC5pbml0ICAgICAgIDogeyAqKC5yZWwuaW5pdCkgfQorICAucmVsYS5pbml0ICAgICAgOiB7ICooLnJlbGEuaW5pdCkgfQorICAucmVsLnRleHQgICAgICAgOiB7ICooLnJlbC50ZXh0IC5yZWwudGV4dC4qIC5yZWwuZ251LmxpbmtvbmNlLnQuKikgfQorICAucmVsYS50ZXh0ICAgICAgOiB7ICooLnJlbGEudGV4dCAucmVsYS50ZXh0LiogLnJlbGEuZ251LmxpbmtvbmNlLnQuKikgfQorICAucmVsLmZpbmkgICAgICAgOiB7ICooLnJlbC5maW5pKSB9CisgIC5yZWxhLmZpbmkgICAgICA6IHsgKigucmVsYS5maW5pKSB9CisgIC5yZWwucm9kYXRhICAgICA6IHsgKigucmVsLnJvZGF0YSAucmVsLnJvZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnIuKikgfQorICAucmVsYS5yb2RhdGEgICAgOiB7ICooLnJlbGEucm9kYXRhIC5yZWxhLnJvZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJlbC5kYXRhLnJlbC5ybyAgIDogeyAqKC5yZWwuZGF0YS5yZWwucm8qIC5yZWwuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLnJlbGEuZGF0YS5yZWwucm8gICA6IHsgKigucmVsYS5kYXRhLnJlbC5ybyogLnJlbGEuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLnJlbC5kYXRhICAgICAgIDogeyAqKC5yZWwuZGF0YSAucmVsLmRhdGEuKiAucmVsLmdudS5saW5rb25jZS5kLiopIH0KKyAgLnJlbGEuZGF0YSAgICAgIDogeyAqKC5yZWxhLmRhdGEgLnJlbGEuZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5kLiopIH0KKyAgLnJlbC50ZGF0YQkgIDogeyAqKC5yZWwudGRhdGEgLnJlbC50ZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnJlbGEudGRhdGEJICA6IHsgKigucmVsYS50ZGF0YSAucmVsYS50ZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC5yZWwudGJzcwkgIDogeyAqKC5yZWwudGJzcyAucmVsLnRic3MuKiAucmVsLmdudS5saW5rb25jZS50Yi4qKSB9CisgIC5yZWxhLnRic3MJICA6IHsgKigucmVsYS50YnNzIC5yZWxhLnRic3MuKiAucmVsYS5nbnUubGlua29uY2UudGIuKikgfQorICAucmVsLmN0b3JzICAgICAgOiB7ICooLnJlbC5jdG9ycykgfQorICAucmVsYS5jdG9ycyAgICAgOiB7ICooLnJlbGEuY3RvcnMpIH0KKyAgLnJlbC5kdG9ycyAgICAgIDogeyAqKC5yZWwuZHRvcnMpIH0KKyAgLnJlbGEuZHRvcnMgICAgIDogeyAqKC5yZWxhLmR0b3JzKSB9CisgIC5yZWwuZ290ICAgICAgICA6IHsgKigucmVsLmdvdCkgfQorICAucmVsYS5nb3QgICAgICAgOiB7ICooLnJlbGEuZ290KSB9CisgIC5yZWwuYnNzICAgICAgICA6IHsgKigucmVsLmJzcyAucmVsLmJzcy4qIC5yZWwuZ251LmxpbmtvbmNlLmIuKikgfQorICAucmVsYS5ic3MgICAgICAgOiB7ICooLnJlbGEuYnNzIC5yZWxhLmJzcy4qIC5yZWxhLmdudS5saW5rb25jZS5iLiopIH0KKyAgLnJlbC5pcGx0ICAgICAgIDoKKyAgICB7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9zdGFydCA9IC4pOworICAgICAgKigucmVsLmlwbHQpCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9lbmQgPSAuKTsKKyAgICB9CisgIC5yZWxhLmlwbHQgICAgICA6CisgICAgeworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X3N0YXJ0ID0gLik7CisgICAgICAqKC5yZWxhLmlwbHQpCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfZW5kID0gLik7CisgICAgfQorICAucmVsLnBsdCAgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbC5wbHQpCisgICAgfQorICAucmVsYS5wbHQgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEucGx0KQorICAgIH0KKyAgLmluaXQgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooLmluaXQpKQorICB9ID0wCisgIC5wbHQgICAgICAgICAgICA6IHsgKigucGx0KSB9CisgIC5pcGx0ICAgICAgICAgICA6IHsgKiguaXBsdCkgfQorICAudGV4dCAgICAgICAgICAgOgorICB7CisgICAgKigudGV4dC51bmxpa2VseSAudGV4dC4qX3VubGlrZWx5KQorICAgICooLnRleHQgLnN0dWIgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKikKKyAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KKyAgICAqKC5nbnUud2FybmluZykKKyAgICAqKC5nbHVlXzd0KSAqKC5nbHVlXzcpICooLnZmcDExX3ZlbmVlcikgKigudjRfYngpCisgIH0gPTAKKyAgLmZpbmkgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooLmZpbmkpKQorICB9ID0wCisgIFBST1ZJREUgKF9fZXRleHQgPSAuKTsKKyAgUFJPVklERSAoX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgIC5yb2RhdGEgICAgICAgICA6IHsgKigucm9kYXRhIC5yb2RhdGEuKiAuZ251LmxpbmtvbmNlLnIuKikgfQorICAucm9kYXRhMSAgICAgICAgOiB7ICooLnJvZGF0YTEpIH0KKyAgLkFSTS5leHRhYiAgIDogeyAqKC5BUk0uZXh0YWIqIC5nbnUubGlua29uY2UuYXJtZXh0YWIuKikgfQorICAgX19leGlkeF9zdGFydCA9IC47CisgIC5BUk0uZXhpZHggICA6IHsgKiguQVJNLmV4aWR4KiAuZ251LmxpbmtvbmNlLmFybWV4aWR4LiopIH0KKyAgIF9fZXhpZHhfZW5kID0gLjsKKyAgLmVoX2ZyYW1lX2hkciA6IHsgKiguZWhfZnJhbWVfaGRyKSB9CisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUk8geyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogQWRqdXN0IHRoZSBhZGRyZXNzIGZvciB0aGUgZGF0YSBzZWdtZW50LiAgV2Ugd2FudCB0byBhZGp1c3QgdXAgdG8KKyAgICAgdGhlIHNhbWUgYWRkcmVzcyB3aXRoaW4gdGhlIHBhZ2Ugb24gdGhlIG5leHQgcGFnZSB1cC4gICovCisgIC4gPSBBTElHTiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSkgLSAoKENPTlNUQU5UIChNQVhQQUdFU0laRSkgLSAuKSAmIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gMSkpOyAuID0gREFUQV9TRUdNRU5UX0FMSUdOIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpLCBDT05TVEFOVCAoQ09NTU9OUEFHRVNJWkUpKTsKKyAgLyogRXhjZXB0aW9uIGhhbmRsaW5nICAqLworICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JXIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JXIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIFRocmVhZCBMb2NhbCBTdG9yYWdlIHNlY3Rpb25zICAqLworICAudGRhdGEJICA6IHsgKigudGRhdGEgLnRkYXRhLiogLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC50YnNzCQkgIDogeyAqKC50YnNzIC50YnNzLiogLmdudS5saW5rb25jZS50Yi4qKSAqKC50Y29tbW9uKSB9CisgIC5wcmVpbml0X2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICAgS0VFUCAoKihTT1JUKC5pbml0X2FycmF5LiopKSkKKyAgICAgS0VFUCAoKiguaW5pdF9hcnJheSkpCisgICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmZpbmlfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKC5maW5pX2FycmF5KSkKKyAgICBLRUVQICgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQorICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmN0b3JzICAgICAgICAgIDoKKyAgeworICAgIC8qIGdjYyB1c2VzIGNydGJlZ2luLm8gdG8gZmluZCB0aGUgc3RhcnQgb2YKKyAgICAgICB0aGUgY29uc3RydWN0b3JzLCBzbyB3ZSBtYWtlIHN1cmUgaXQgaXMKKyAgICAgICBmaXJzdC4gIEJlY2F1c2UgdGhpcyBpcyBhIHdpbGRjYXJkLCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSB1c2VyIGRvZXMgbm90CisgICAgICAgYWN0dWFsbHkgbGluayBhZ2FpbnN0IGNydGJlZ2luLm87IHRoZQorICAgICAgIGxpbmtlciB3b24ndCBsb29rIGZvciBhIGZpbGUgdG8gbWF0Y2ggYQorICAgICAgIHdpbGRjYXJkLiAgVGhlIHdpbGRjYXJkIGFsc28gbWVhbnMgdGhhdCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGRpcmVjdG9yeSBjcnRiZWdpbi5vCisgICAgICAgaXMgaW4uICAqLworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5jdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5jdG9ycykpCisgICAgLyogV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSAuY3RvciBzZWN0aW9uIGZyb20KKyAgICAgICB0aGUgY3J0ZW5kLm8gZmlsZSB1bnRpbCBhZnRlciB0aGUgc29ydGVkIGN0b3JzLgorICAgICAgIFRoZSAuY3RvciBzZWN0aW9uIGZyb20gdGhlIGNydGVuZCBmaWxlIGNvbnRhaW5zIHRoZQorICAgICAgIGVuZCBvZiBjdG9ycyBtYXJrZXIgYW5kIGl0IG11c3QgYmUgbGFzdCAqLworICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5jdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5jdG9ycy4qKSkpCisgICAgS0VFUCAoKiguY3RvcnMpKQorICB9CisgIC5kdG9ycyAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqY3J0YmVnaW4ubyguZHRvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguZHRvcnMpKQorICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5kdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5kdG9ycy4qKSkpCisgICAgS0VFUCAoKiguZHRvcnMpKQorICB9CisgIC5qY3IgICAgICAgICAgICA6IHsgS0VFUCAoKiguamNyKSkgfQorICAuZGF0YS5yZWwucm8gOiB7ICooLmRhdGEucmVsLnJvLmxvY2FsKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLmxvY2FsLiopICooLmRhdGEucmVsLnJvKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLmR5bmFtaWMgICAgICAgIDogeyAqKC5keW5hbWljKSB9CisgIC4gPSBEQVRBX1NFR01FTlRfUkVMUk9fRU5EICgwLCAuKTsKKyAgLmdvdCAgICAgICAgICAgIDogeyAqKC5nb3QucGx0KSAqKC5pZ290LnBsdCkgKiguZ290KSAqKC5pZ290KSB9CisgIC5kYXRhICAgICAgICAgICA6CisgIHsKKyAgICBQUk9WSURFIChfX2RhdGFfc3RhcnQgPSAuKTsKKyAgICAqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisgICAgU09SVChDT05TVFJVQ1RPUlMpCisgIH0KKyAgLmRhdGExICAgICAgICAgIDogeyAqKC5kYXRhMSkgfQorICBfZWRhdGEgPSAuOyBQUk9WSURFIChlZGF0YSA9IC4pOworICBfX2Jzc19zdGFydCA9IC47CisgIF9fYnNzX3N0YXJ0X18gPSAuOworICAuYnNzICAgICAgICAgICAgOgorICB7CisgICAqKC5keW5ic3MpCisgICAqKC5ic3MgLmJzcy4qIC5nbnUubGlua29uY2UuYi4qKQorICAgKihDT01NT04pCisgICAvKiBBbGlnbiBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSAuYnNzIHNlY3Rpb24gb2NjdXBpZXMgc3BhY2UgdXAgdG8KKyAgICAgIF9lbmQuICBBbGlnbiBhZnRlciAuYnNzIHRvIGVuc3VyZSBjb3JyZWN0IGFsaWdubWVudCBldmVuIGlmIHRoZQorICAgICAgLmJzcyBzZWN0aW9uIGRpc2FwcGVhcnMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gaW5wdXQgc2VjdGlvbnMuCisgICAgICBGSVhNRTogV2h5IGRvIHdlIG5lZWQgaXQ/IFdoZW4gdGhlcmUgaXMgbm8gLmJzcyBzZWN0aW9uLCB3ZSBkb24ndAorICAgICAgcGFkIHRoZSAuZGF0YSBzZWN0aW9uLiAgKi8KKyAgIC4gPSBBTElHTiguICE9IDAgPyAzMiAvIDggOiAxKTsKKyAgfQorICBfYnNzX2VuZF9fID0gLiA7IF9fYnNzX2VuZF9fID0gLiA7CisgIC4gPSBBTElHTigzMiAvIDgpOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgX19lbmRfXyA9IC4gOworICBfZW5kID0gLjsgUFJPVklERSAoZW5kID0gLik7CisgIC4gPSBEQVRBX1NFR01FTlRfRU5EICguKTsKKyAgLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KKyAgLnN0YWIgICAgICAgICAgMCA6IHsgKiguc3RhYikgfQorICAuc3RhYnN0ciAgICAgICAwIDogeyAqKC5zdGFic3RyKSB9CisgIC5zdGFiLmV4Y2wgICAgIDAgOiB7ICooLnN0YWIuZXhjbCkgfQorICAuc3RhYi5leGNsc3RyICAwIDogeyAqKC5zdGFiLmV4Y2xzdHIpIH0KKyAgLnN0YWIuaW5kZXggICAgMCA6IHsgKiguc3RhYi5pbmRleCkgfQorICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9CisgIC5jb21tZW50ICAgICAgIDAgOiB7ICooLmNvbW1lbnQpIH0KKyAgLyogRFdBUkYgZGVidWcgc2VjdGlvbnMuCisgICAgIFN5bWJvbHMgaW4gdGhlIERXQVJGIGRlYnVnZ2luZyBzZWN0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc2VjdGlvbiBzbyB3ZSBiZWdpbiB0aGVtIGF0IDAuICAqLworICAvKiBEV0FSRiAxICovCisgIC5kZWJ1ZyAgICAgICAgICAwIDogeyAqKC5kZWJ1ZykgfQorICAubGluZSAgICAgICAgICAgMCA6IHsgKigubGluZSkgfQorICAvKiBHTlUgRFdBUkYgMSBleHRlbnNpb25zICovCisgIC5kZWJ1Z19zcmNpbmZvICAwIDogeyAqKC5kZWJ1Z19zcmNpbmZvKSB9CisgIC5kZWJ1Z19zZm5hbWVzICAwIDogeyAqKC5kZWJ1Z19zZm5hbWVzKSB9CisgIC8qIERXQVJGIDEuMSBhbmQgRFdBUkYgMiAqLworICAuZGVidWdfYXJhbmdlcyAgMCA6IHsgKiguZGVidWdfYXJhbmdlcykgfQorICAuZGVidWdfcHVibmFtZXMgMCA6IHsgKiguZGVidWdfcHVibmFtZXMpIH0KKyAgLyogRFdBUkYgMiAqLworICAuZGVidWdfaW5mbyAgICAgMCA6IHsgKiguZGVidWdfaW5mbyAuZ251LmxpbmtvbmNlLndpLiopIH0KKyAgLmRlYnVnX2FiYnJldiAgIDAgOiB7ICooLmRlYnVnX2FiYnJldikgfQorICAuZGVidWdfbGluZSAgICAgMCA6IHsgKiguZGVidWdfbGluZSkgfQorICAuZGVidWdfZnJhbWUgICAgMCA6IHsgKiguZGVidWdfZnJhbWUpIH0KKyAgLmRlYnVnX3N0ciAgICAgIDAgOiB7ICooLmRlYnVnX3N0cikgfQorICAuZGVidWdfbG9jICAgICAgMCA6IHsgKiguZGVidWdfbG9jKSB9CisgIC5kZWJ1Z19tYWNpbmZvICAwIDogeyAqKC5kZWJ1Z19tYWNpbmZvKSB9CisgIC8qIFNHSS9NSVBTIERXQVJGIDIgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfd2Vha25hbWVzIDAgOiB7ICooLmRlYnVnX3dlYWtuYW1lcykgfQorICAuZGVidWdfZnVuY25hbWVzIDAgOiB7ICooLmRlYnVnX2Z1bmNuYW1lcykgfQorICAuZGVidWdfdHlwZW5hbWVzIDAgOiB7ICooLmRlYnVnX3R5cGVuYW1lcykgfQorICAuZGVidWdfdmFybmFtZXMgIDAgOiB7ICooLmRlYnVnX3Zhcm5hbWVzKSB9CisgIC8qIERXQVJGIDMgKi8KKyAgLmRlYnVnX3B1YnR5cGVzIDAgOiB7ICooLmRlYnVnX3B1YnR5cGVzKSB9CisgIC5kZWJ1Z19yYW5nZXMgICAwIDogeyAqKC5kZWJ1Z19yYW5nZXMpIH0KKyAgLmdudS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLmdudS5hdHRyaWJ1dGVzKSkgfQorICAubm90ZS5nbnUuYXJtLmlkZW50IDAgOiB7IEtFRVAgKCooLm5vdGUuZ251LmFybS5pZGVudCkpIH0KKyAgL0RJU0NBUkQvIDogeyAqKC5ub3RlLkdOVS1zdGFjaykgKiguZ251X2RlYnVnbGluaykgKiguZ251Lmx0b18qKSB9Cit9CmRpZmYgLS1naXQgYS9saWIvbGRzY3JpcHRzL2FybWVsZl9saW51eF9lYWJpLnhyIGIvbGliL2xkc2NyaXB0cy9hcm1lbGZfbGludXhfZWFiaS54cgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmYzZjFlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2xkc2NyaXB0cy9hcm1lbGZfbGludXhfZWFiaS54cgpAQCAtMCwwICsxLDE2MyBAQAorLyogU2NyaXB0IGZvciBsZCAtcjogbGluayB3aXRob3V0IHJlbG9jYXRpb24gKi8KK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1iaWdhcm0iLAorCSAgICAgICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorIC8qIEZvciBzb21lIHJlYXNvbiwgdGhlIFNvbGFyaXMgbGlua2VyIG1ha2VzIGJhZCBleGVjdXRhYmxlcworICBpZiBnbGQgLXIgaXMgdXNlZCBhbmQgdGhlIGludGVybWVkaWF0ZSBmaWxlIGhhcyBzZWN0aW9ucyBzdGFydGluZworICBhdCBub24temVybyBhZGRyZXNzZXMuICBDb3VsZCBiZSBhIFNvbGFyaXMgbGQgYnVnLCBjb3VsZCBiZSBhIEdOVSBsZAorICBidWcuICBCdXQgZm9yIG5vdyBhc3NpZ25pbmcgdGhlIHplcm8gdm1hcyB3b3Jrcy4gICovCitTRUNUSU9OUworeworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgLmludGVycCAgICAgICAwIDogeyAqKC5pbnRlcnApIH0KKyAgLm5vdGUuZ251LmJ1aWxkLWlkIDogeyAqKC5ub3RlLmdudS5idWlsZC1pZCkgfQorICAuaGFzaCAgICAgICAgIDAgOiB7ICooLmhhc2gpIH0KKyAgLmdudS5oYXNoICAgICAwIDogeyAqKC5nbnUuaGFzaCkgfQorICAuZHluc3ltICAgICAgIDAgOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyICAgICAgIDAgOiB7ICooLmR5bnN0cikgfQorICAuZ251LnZlcnNpb24gIDAgOiB7ICooLmdudS52ZXJzaW9uKSB9CisgIC5nbnUudmVyc2lvbl9kIDA6IHsgKiguZ251LnZlcnNpb25fZCkgfQorICAuZ251LnZlcnNpb25fciAwOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KKyAgLnJlbC5pbml0ICAgICAwIDogeyAqKC5yZWwuaW5pdCkgfQorICAucmVsYS5pbml0ICAgIDAgOiB7ICooLnJlbGEuaW5pdCkgfQorICAucmVsLnRleHQgICAgIDAgOiB7ICooLnJlbC50ZXh0KSB9CisgIC5yZWxhLnRleHQgICAgMCA6IHsgKigucmVsYS50ZXh0KSB9CisgIC5yZWwuZmluaSAgICAgMCA6IHsgKigucmVsLmZpbmkpIH0KKyAgLnJlbGEuZmluaSAgICAwIDogeyAqKC5yZWxhLmZpbmkpIH0KKyAgLnJlbC5yb2RhdGEgICAwIDogeyAqKC5yZWwucm9kYXRhKSB9CisgIC5yZWxhLnJvZGF0YSAgMCA6IHsgKigucmVsYS5yb2RhdGEpIH0KKyAgLnJlbC5kYXRhLnJlbC5ybyAwIDogeyAqKC5yZWwuZGF0YS5yZWwucm8pIH0KKyAgLnJlbGEuZGF0YS5yZWwucm8gMCA6IHsgKigucmVsYS5kYXRhLnJlbC5ybykgfQorICAucmVsLmRhdGEgICAgIDAgOiB7ICooLnJlbC5kYXRhKSB9CisgIC5yZWxhLmRhdGEgICAgMCA6IHsgKigucmVsYS5kYXRhKSB9CisgIC5yZWwudGRhdGEJMCA6IHsgKigucmVsLnRkYXRhKSB9CisgIC5yZWxhLnRkYXRhCTAgOiB7ICooLnJlbGEudGRhdGEpIH0KKyAgLnJlbC50YnNzCTAgOiB7ICooLnJlbC50YnNzKSB9CisgIC5yZWxhLnRic3MJMCA6IHsgKigucmVsYS50YnNzKSB9CisgIC5yZWwuY3RvcnMgICAgMCA6IHsgKigucmVsLmN0b3JzKSB9CisgIC5yZWxhLmN0b3JzICAgMCA6IHsgKigucmVsYS5jdG9ycykgfQorICAucmVsLmR0b3JzICAgIDAgOiB7ICooLnJlbC5kdG9ycykgfQorICAucmVsYS5kdG9ycyAgIDAgOiB7ICooLnJlbGEuZHRvcnMpIH0KKyAgLnJlbC5nb3QgICAgICAwIDogeyAqKC5yZWwuZ290KSB9CisgIC5yZWxhLmdvdCAgICAgMCA6IHsgKigucmVsYS5nb3QpIH0KKyAgLnJlbC5ic3MgICAgICAwIDogeyAqKC5yZWwuYnNzKSB9CisgIC5yZWxhLmJzcyAgICAgMCA6IHsgKigucmVsYS5ic3MpIH0KKyAgLnJlbC5pcGx0ICAgICAwIDoKKyAgICB7CisgICAgICAqKC5yZWwuaXBsdCkKKyAgICB9CisgIC5yZWxhLmlwbHQgICAgMCA6CisgICAgeworICAgICAgKigucmVsYS5pcGx0KQorICAgIH0KKyAgLnJlbC5wbHQgICAgICAwIDoKKyAgICB7CisgICAgICAqKC5yZWwucGx0KQorICAgIH0KKyAgLnJlbGEucGx0ICAgICAwIDoKKyAgICB7CisgICAgICAqKC5yZWxhLnBsdCkKKyAgICB9CisgIC5pbml0ICAgICAgICAgMCA6CisgIHsKKyAgICBLRUVQICgqKC5pbml0KSkKKyAgfSA9MAorICAucGx0ICAgICAgICAgIDAgOiB7ICooLnBsdCkgfQorICAuaXBsdCAgICAgICAgIDAgOiB7ICooLmlwbHQpIH0KKyAgLnRleHQgICAgICAgICAwIDoKKyAgeworICAgICooLnRleHQgLnN0dWIpCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgIH0gPTAKKyAgLmZpbmkgICAgICAgICAwIDoKKyAgeworICAgIEtFRVAgKCooLmZpbmkpKQorICB9ID0wCisgIC5yb2RhdGEgICAgICAgMCA6IHsgKigucm9kYXRhKSB9CisgIC5yb2RhdGExICAgICAgMCA6IHsgKigucm9kYXRhMSkgfQorICAuQVJNLmV4dGFiIDAgOiB7ICooLkFSTS5leHRhYikgfQorICAuQVJNLmV4aWR4IDAgOiB7ICooLkFSTS5leGlkeCkgfQorICAuZWhfZnJhbWVfaGRyIDogeyAqKC5laF9mcmFtZV9oZHIpIH0KKyAgLmVoX2ZyYW1lICAgICAwIDogT05MWV9JRl9STyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAwIDogT05MWV9JRl9STyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQuICBXZSB3YW50IHRvIGFkanVzdCB1cCB0bworICAgICB0aGUgc2FtZSBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZSBvbiB0aGUgbmV4dCBwYWdlIHVwLiAgKi8KKyAgLyogRXhjZXB0aW9uIGhhbmRsaW5nICAqLworICAuZWhfZnJhbWUgICAgIDAgOiBPTkxZX0lGX1JXIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlIDAgOiBPTkxZX0lGX1JXIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIFRocmVhZCBMb2NhbCBTdG9yYWdlIHNlY3Rpb25zICAqLworICAudGRhdGEJMCA6IHsgKigudGRhdGEpIH0KKyAgLnRic3MJCTAgOiB7ICooLnRic3MpIH0KKyAgLnByZWluaXRfYXJyYXkgICAwIDoKKyAgeworICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkpKQorICB9CisgIC5pbml0X2FycmF5ICAgMCA6CisgIHsKKyAgICAgS0VFUCAoKihTT1JUKC5pbml0X2FycmF5LiopKSkKKyAgICAgS0VFUCAoKiguaW5pdF9hcnJheSkpCisgIH0KKyAgLmZpbmlfYXJyYXkgICAwIDoKKyAgeworICAgIEtFRVAgKCooLmZpbmlfYXJyYXkpKQorICAgIEtFRVAgKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgIH0KKyAgLmpjciAgICAgICAgICAwIDogeyBLRUVQICgqKC5qY3IpKSB9CisgIC5keW5hbWljICAgICAgMCA6IHsgKiguZHluYW1pYykgfQorICAuZ290ICAgICAgICAgIDAgOiB7ICooLmdvdC5wbHQpICooLmlnb3QucGx0KSAqKC5nb3QpICooLmlnb3QpIH0KKyAgLmRhdGEgICAgICAgICAwIDoKKyAgeworICAgICooLmRhdGEpCisgIH0KKyAgLmRhdGExICAgICAgICAwIDogeyAqKC5kYXRhMSkgfQorICAuYnNzICAgICAgICAgIDAgOgorICB7CisgICAqKC5keW5ic3MpCisgICAqKC5ic3MpCisgICAqKENPTU1PTikKKyAgIC8qIEFsaWduIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIC5ic3Mgc2VjdGlvbiBvY2N1cGllcyBzcGFjZSB1cCB0bworICAgICAgX2VuZC4gIEFsaWduIGFmdGVyIC5ic3MgdG8gZW5zdXJlIGNvcnJlY3QgYWxpZ25tZW50IGV2ZW4gaWYgdGhlCisgICAgICAuYnNzIHNlY3Rpb24gZGlzYXBwZWFycyBiZWNhdXNlIHRoZXJlIGFyZSBubyBpbnB1dCBzZWN0aW9ucy4KKyAgICAgIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCBpdD8gV2hlbiB0aGVyZSBpcyBubyAuYnNzIHNlY3Rpb24sIHdlIGRvbid0CisgICAgICBwYWQgdGhlIC5kYXRhIHNlY3Rpb24uICAqLworICB9CisgIC8qIFN0YWJzIGRlYnVnZ2luZyBzZWN0aW9ucy4gICovCisgIC5zdGFiICAgICAgICAgIDAgOiB7ICooLnN0YWIpIH0KKyAgLnN0YWJzdHIgICAgICAgMCA6IHsgKiguc3RhYnN0cikgfQorICAuc3RhYi5leGNsICAgICAwIDogeyAqKC5zdGFiLmV4Y2wpIH0KKyAgLnN0YWIuZXhjbHN0ciAgMCA6IHsgKiguc3RhYi5leGNsc3RyKSB9CisgIC5zdGFiLmluZGV4ICAgIDAgOiB7ICooLnN0YWIuaW5kZXgpIH0KKyAgLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQorICAuY29tbWVudCAgICAgICAwIDogeyAqKC5jb21tZW50KSB9CisgIC8qIERXQVJGIGRlYnVnIHNlY3Rpb25zLgorICAgICBTeW1ib2xzIGluIHRoZSBEV0FSRiBkZWJ1Z2dpbmcgc2VjdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcKKyAgICAgb2YgdGhlIHNlY3Rpb24gc28gd2UgYmVnaW4gdGhlbSBhdCAwLiAgKi8KKyAgLyogRFdBUkYgMSAqLworICAuZGVidWcgICAgICAgICAgMCA6IHsgKiguZGVidWcpIH0KKyAgLmxpbmUgICAgICAgICAgIDAgOiB7ICooLmxpbmUpIH0KKyAgLyogR05VIERXQVJGIDEgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfc3JjaW5mbyAgMCA6IHsgKiguZGVidWdfc3JjaW5mbykgfQorICAuZGVidWdfc2ZuYW1lcyAgMCA6IHsgKiguZGVidWdfc2ZuYW1lcykgfQorICAvKiBEV0FSRiAxLjEgYW5kIERXQVJGIDIgKi8KKyAgLmRlYnVnX2FyYW5nZXMgIDAgOiB7ICooLmRlYnVnX2FyYW5nZXMpIH0KKyAgLmRlYnVnX3B1Ym5hbWVzIDAgOiB7ICooLmRlYnVnX3B1Ym5hbWVzKSB9CisgIC8qIERXQVJGIDIgKi8KKyAgLmRlYnVnX2luZm8gICAgIDAgOiB7ICooLmRlYnVnX2luZm8pIH0KKyAgLmRlYnVnX2FiYnJldiAgIDAgOiB7ICooLmRlYnVnX2FiYnJldikgfQorICAuZGVidWdfbGluZSAgICAgMCA6IHsgKiguZGVidWdfbGluZSkgfQorICAuZGVidWdfZnJhbWUgICAgMCA6IHsgKiguZGVidWdfZnJhbWUpIH0KKyAgLmRlYnVnX3N0ciAgICAgIDAgOiB7ICooLmRlYnVnX3N0cikgfQorICAuZGVidWdfbG9jICAgICAgMCA6IHsgKiguZGVidWdfbG9jKSB9CisgIC5kZWJ1Z19tYWNpbmZvICAwIDogeyAqKC5kZWJ1Z19tYWNpbmZvKSB9CisgIC8qIFNHSS9NSVBTIERXQVJGIDIgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfd2Vha25hbWVzIDAgOiB7ICooLmRlYnVnX3dlYWtuYW1lcykgfQorICAuZGVidWdfZnVuY25hbWVzIDAgOiB7ICooLmRlYnVnX2Z1bmNuYW1lcykgfQorICAuZGVidWdfdHlwZW5hbWVzIDAgOiB7ICooLmRlYnVnX3R5cGVuYW1lcykgfQorICAuZGVidWdfdmFybmFtZXMgIDAgOiB7ICooLmRlYnVnX3Zhcm5hbWVzKSB9CisgIC8qIERXQVJGIDMgKi8KKyAgLmRlYnVnX3B1YnR5cGVzIDAgOiB7ICooLmRlYnVnX3B1YnR5cGVzKSB9CisgIC5kZWJ1Z19yYW5nZXMgICAwIDogeyAqKC5kZWJ1Z19yYW5nZXMpIH0KKyAgLmdudS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLmdudS5hdHRyaWJ1dGVzKSkgfQorICAubm90ZS5nbnUuYXJtLmlkZW50IDAgOiB7IEtFRVAgKCooLm5vdGUuZ251LmFybS5pZGVudCkpIH0KK30KZGlmZiAtLWdpdCBhL2xpYi9sZHNjcmlwdHMvYXJtZWxmX2xpbnV4X2VhYmkueHMgYi9saWIvbGRzY3JpcHRzL2FybWVsZl9saW51eF9lYWJpLnhzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNjg1ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbGRzY3JpcHRzL2FybWVsZl9saW51eF9lYWJpLnhzCkBAIC0wLDAgKzEsMjEzIEBACisvKiBTY3JpcHQgZm9yIGxkIC0tc2hhcmVkOiBsaW5rIHNoYXJlZCBsaWJyYXJ5ICovCitPVVRQVVRfRk9STUFUKCJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItYmlnYXJtIiwKKwkgICAgICAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQVJDSF9ESVIoIj0vdXNyL2xvY2FsL2xpYiIpOyBTRUFSQ0hfRElSKCI9L2xpYiIpOyBTRUFSQ0hfRElSKCI9L3Vzci9saWIiKTsKK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICAuID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMCkgKyBTSVpFT0ZfSEVBREVSUzsKKyAgLm5vdGUuZ251LmJ1aWxkLWlkIDogeyAqKC5ub3RlLmdudS5idWlsZC1pZCkgfQorICAuaGFzaCAgICAgICAgICAgOiB7ICooLmhhc2gpIH0KKyAgLmdudS5oYXNoICAgICAgIDogeyAqKC5nbnUuaGFzaCkgfQorICAuZHluc3ltICAgICAgICAgOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyICAgICAgICAgOiB7ICooLmR5bnN0cikgfQorICAuZ251LnZlcnNpb24gICAgOiB7ICooLmdudS52ZXJzaW9uKSB9CisgIC5nbnUudmVyc2lvbl9kICA6IHsgKiguZ251LnZlcnNpb25fZCkgfQorICAuZ251LnZlcnNpb25fciAgOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KKyAgLnJlbC5pbml0ICAgICAgIDogeyAqKC5yZWwuaW5pdCkgfQorICAucmVsYS5pbml0ICAgICAgOiB7ICooLnJlbGEuaW5pdCkgfQorICAucmVsLnRleHQgICAgICAgOiB7ICooLnJlbC50ZXh0IC5yZWwudGV4dC4qIC5yZWwuZ251LmxpbmtvbmNlLnQuKikgfQorICAucmVsYS50ZXh0ICAgICAgOiB7ICooLnJlbGEudGV4dCAucmVsYS50ZXh0LiogLnJlbGEuZ251LmxpbmtvbmNlLnQuKikgfQorICAucmVsLmZpbmkgICAgICAgOiB7ICooLnJlbC5maW5pKSB9CisgIC5yZWxhLmZpbmkgICAgICA6IHsgKigucmVsYS5maW5pKSB9CisgIC5yZWwucm9kYXRhICAgICA6IHsgKigucmVsLnJvZGF0YSAucmVsLnJvZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnIuKikgfQorICAucmVsYS5yb2RhdGEgICAgOiB7ICooLnJlbGEucm9kYXRhIC5yZWxhLnJvZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJlbC5kYXRhLnJlbC5ybyAgIDogeyAqKC5yZWwuZGF0YS5yZWwucm8qIC5yZWwuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLnJlbGEuZGF0YS5yZWwucm8gICA6IHsgKigucmVsYS5kYXRhLnJlbC5ybyogLnJlbGEuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLnJlbC5kYXRhICAgICAgIDogeyAqKC5yZWwuZGF0YSAucmVsLmRhdGEuKiAucmVsLmdudS5saW5rb25jZS5kLiopIH0KKyAgLnJlbGEuZGF0YSAgICAgIDogeyAqKC5yZWxhLmRhdGEgLnJlbGEuZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5kLiopIH0KKyAgLnJlbC50ZGF0YQkgIDogeyAqKC5yZWwudGRhdGEgLnJlbC50ZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnJlbGEudGRhdGEJICA6IHsgKigucmVsYS50ZGF0YSAucmVsYS50ZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC5yZWwudGJzcwkgIDogeyAqKC5yZWwudGJzcyAucmVsLnRic3MuKiAucmVsLmdudS5saW5rb25jZS50Yi4qKSB9CisgIC5yZWxhLnRic3MJICA6IHsgKigucmVsYS50YnNzIC5yZWxhLnRic3MuKiAucmVsYS5nbnUubGlua29uY2UudGIuKikgfQorICAucmVsLmN0b3JzICAgICAgOiB7ICooLnJlbC5jdG9ycykgfQorICAucmVsYS5jdG9ycyAgICAgOiB7ICooLnJlbGEuY3RvcnMpIH0KKyAgLnJlbC5kdG9ycyAgICAgIDogeyAqKC5yZWwuZHRvcnMpIH0KKyAgLnJlbGEuZHRvcnMgICAgIDogeyAqKC5yZWxhLmR0b3JzKSB9CisgIC5yZWwuZ290ICAgICAgICA6IHsgKigucmVsLmdvdCkgfQorICAucmVsYS5nb3QgICAgICAgOiB7ICooLnJlbGEuZ290KSB9CisgIC5yZWwuYnNzICAgICAgICA6IHsgKigucmVsLmJzcyAucmVsLmJzcy4qIC5yZWwuZ251LmxpbmtvbmNlLmIuKikgfQorICAucmVsYS5ic3MgICAgICAgOiB7ICooLnJlbGEuYnNzIC5yZWxhLmJzcy4qIC5yZWxhLmdudS5saW5rb25jZS5iLiopIH0KKyAgLnJlbC5pcGx0ICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWwuaXBsdCkKKyAgICB9CisgIC5yZWxhLmlwbHQgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5pcGx0KQorICAgIH0KKyAgLnJlbC5wbHQgICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWwucGx0KQorICAgIH0KKyAgLnJlbGEucGx0ICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLnBsdCkKKyAgICB9CisgIC5pbml0ICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKC5pbml0KSkKKyAgfSA9MAorICAucGx0ICAgICAgICAgICAgOiB7ICooLnBsdCkgfQorICAuaXBsdCAgICAgICAgICAgOiB7ICooLmlwbHQpIH0KKyAgLnRleHQgICAgICAgICAgIDoKKyAgeworICAgICooLnRleHQudW5saWtlbHkgLnRleHQuKl91bmxpa2VseSkKKyAgICAqKC50ZXh0IC5zdHViIC50ZXh0LiogLmdudS5saW5rb25jZS50LiopCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgICAgKiguZ2x1ZV83dCkgKiguZ2x1ZV83KSAqKC52ZnAxMV92ZW5lZXIpICooLnY0X2J4KQorICB9ID0wCisgIC5maW5pICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKC5maW5pKSkKKyAgfSA9MAorICBQUk9WSURFIChfX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKF9ldGV4dCA9IC4pOworICBQUk9WSURFIChldGV4dCA9IC4pOworICAucm9kYXRhICAgICAgICAgOiB7ICooLnJvZGF0YSAucm9kYXRhLiogLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJvZGF0YTEgICAgICAgIDogeyAqKC5yb2RhdGExKSB9CisgIC5BUk0uZXh0YWIgICA6IHsgKiguQVJNLmV4dGFiKiAuZ251LmxpbmtvbmNlLmFybWV4dGFiLiopIH0KKyAgIF9fZXhpZHhfc3RhcnQgPSAuOworICAuQVJNLmV4aWR4ICAgOiB7ICooLkFSTS5leGlkeCogLmdudS5saW5rb25jZS5hcm1leGlkeC4qKSB9CisgICBfX2V4aWR4X2VuZCA9IC47CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAuID0gQUxJR04gKENPTlNUQU5UIChNQVhQQUdFU0laRSkpIC0gKChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gLikgJiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSAtIDEpKTsgLiA9IERBVEFfU0VHTUVOVF9BTElHTiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSwgQ09OU1RBTlQgKENPTU1PTlBBR0VTSVpFKSk7CisgIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyAgKi8KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9SVyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9SVyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCSAgOiB7ICooLnRkYXRhIC50ZGF0YS4qIC5nbnUubGlua29uY2UudGQuKikgfQorICAudGJzcwkJICA6IHsgKigudGJzcyAudGJzcy4qIC5nbnUubGlua29uY2UudGIuKikgKigudGNvbW1vbikgfQorICAucHJlaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgIH0KKyAgLmluaXRfYXJyYXkgICAgIDoKKyAgeworICAgICBLRUVQICgqKFNPUlQoLmluaXRfYXJyYXkuKikpKQorICAgICBLRUVQICgqKC5pbml0X2FycmF5KSkKKyAgfQorICAuZmluaV9hcnJheSAgICAgOgorICB7CisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgICAgS0VFUCAoKihTT1JUKC5maW5pX2FycmF5LiopKSkKKyAgfQorICAuY3RvcnMgICAgICAgICAgOgorICB7CisgICAgLyogZ2NjIHVzZXMgY3J0YmVnaW4ubyB0byBmaW5kIHRoZSBzdGFydCBvZgorICAgICAgIHRoZSBjb25zdHJ1Y3RvcnMsIHNvIHdlIG1ha2Ugc3VyZSBpdCBpcworICAgICAgIGZpcnN0LiAgQmVjYXVzZSB0aGlzIGlzIGEgd2lsZGNhcmQsIGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgaWYgdGhlIHVzZXIgZG9lcyBub3QKKyAgICAgICBhY3R1YWxseSBsaW5rIGFnYWluc3QgY3J0YmVnaW4ubzsgdGhlCisgICAgICAgbGlua2VyIHdvbid0IGxvb2sgZm9yIGEgZmlsZSB0byBtYXRjaCBhCisgICAgICAgd2lsZGNhcmQuICBUaGUgd2lsZGNhcmQgYWxzbyBtZWFucyB0aGF0IGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgd2hpY2ggZGlyZWN0b3J5IGNydGJlZ2luLm8KKyAgICAgICBpcyBpbi4gICovCisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmN0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmN0b3JzKSkKKyAgICAvKiBXZSBkb24ndCB3YW50IHRvIGluY2x1ZGUgdGhlIC5jdG9yIHNlY3Rpb24gZnJvbQorICAgICAgIHRoZSBjcnRlbmQubyBmaWxlIHVudGlsIGFmdGVyIHRoZSBzb3J0ZWQgY3RvcnMuCisgICAgICAgVGhlIC5jdG9yIHNlY3Rpb24gZnJvbSB0aGUgY3J0ZW5kIGZpbGUgY29udGFpbnMgdGhlCisgICAgICAgZW5kIG9mIGN0b3JzIG1hcmtlciBhbmQgaXQgbXVzdCBiZSBsYXN0ICovCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmN0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmN0b3JzLiopKSkKKyAgICBLRUVQICgqKC5jdG9ycykpCisgIH0KKyAgLmR0b3JzICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5kdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5kdG9ycykpCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmR0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmR0b3JzLiopKSkKKyAgICBLRUVQICgqKC5kdG9ycykpCisgIH0KKyAgLmpjciAgICAgICAgICAgIDogeyBLRUVQICgqKC5qY3IpKSB9CisgIC5kYXRhLnJlbC5ybyA6IHsgKiguZGF0YS5yZWwucm8ubG9jYWwqIC5nbnUubGlua29uY2UuZC5yZWwucm8ubG9jYWwuKikgKiguZGF0YS5yZWwucm8qIC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAuZHluYW1pYyAgICAgICAgOiB7ICooLmR5bmFtaWMpIH0KKyAgLiA9IERBVEFfU0VHTUVOVF9SRUxST19FTkQgKDAsIC4pOworICAuZ290ICAgICAgICAgICAgOiB7ICooLmdvdC5wbHQpICooLmlnb3QucGx0KSAqKC5nb3QpICooLmlnb3QpIH0KKyAgLmRhdGEgICAgICAgICAgIDoKKyAgeworICAgIFBST1ZJREUgKF9fZGF0YV9zdGFydCA9IC4pOworICAgICooLmRhdGEgLmRhdGEuKiAuZ251LmxpbmtvbmNlLmQuKikKKyAgICBTT1JUKENPTlNUUlVDVE9SUykKKyAgfQorICAuZGF0YTEgICAgICAgICAgOiB7ICooLmRhdGExKSB9CisgIF9lZGF0YSA9IC47IFBST1ZJREUgKGVkYXRhID0gLik7CisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgX19ic3Nfc3RhcnRfXyA9IC47CisgIC5ic3MgICAgICAgICAgICA6CisgIHsKKyAgICooLmR5bmJzcykKKyAgICooLmJzcyAuYnNzLiogLmdudS5saW5rb25jZS5iLiopCisgICAqKENPTU1PTikKKyAgIC8qIEFsaWduIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIC5ic3Mgc2VjdGlvbiBvY2N1cGllcyBzcGFjZSB1cCB0bworICAgICAgX2VuZC4gIEFsaWduIGFmdGVyIC5ic3MgdG8gZW5zdXJlIGNvcnJlY3QgYWxpZ25tZW50IGV2ZW4gaWYgdGhlCisgICAgICAuYnNzIHNlY3Rpb24gZGlzYXBwZWFycyBiZWNhdXNlIHRoZXJlIGFyZSBubyBpbnB1dCBzZWN0aW9ucy4KKyAgICAgIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCBpdD8gV2hlbiB0aGVyZSBpcyBubyAuYnNzIHNlY3Rpb24sIHdlIGRvbid0CisgICAgICBwYWQgdGhlIC5kYXRhIHNlY3Rpb24uICAqLworICAgLiA9IEFMSUdOKC4gIT0gMCA/IDMyIC8gOCA6IDEpOworICB9CisgIF9ic3NfZW5kX18gPSAuIDsgX19ic3NfZW5kX18gPSAuIDsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIC4gPSBBTElHTigzMiAvIDgpOworICBfX2VuZF9fID0gLiA7CisgIF9lbmQgPSAuOyBQUk9WSURFIChlbmQgPSAuKTsKKyAgLiA9IERBVEFfU0VHTUVOVF9FTkQgKC4pOworICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAgICAgICAgICAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyICAgICAgIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAgICAgMCA6IHsgKiguc3RhYi5leGNsKSB9CisgIC5zdGFiLmV4Y2xzdHIgIDAgOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAuc3RhYi5pbmRleCAgICAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisgIC5zdGFiLmluZGV4c3RyIDAgOiB7ICooLnN0YWIuaW5kZXhzdHIpIH0KKyAgLmNvbW1lbnQgICAgICAgMCA6IHsgKiguY29tbWVudCkgfQorICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KKyAgICAgU3ltYm9scyBpbiB0aGUgRFdBUkYgZGVidWdnaW5nIHNlY3Rpb25zIGFyZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nCisgICAgIG9mIHRoZSBzZWN0aW9uIHNvIHdlIGJlZ2luIHRoZW0gYXQgMC4gICovCisgIC8qIERXQVJGIDEgKi8KKyAgLmRlYnVnICAgICAgICAgIDAgOiB7ICooLmRlYnVnKSB9CisgIC5saW5lICAgICAgICAgICAwIDogeyAqKC5saW5lKSB9CisgIC8qIEdOVSBEV0FSRiAxIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3NyY2luZm8gIDAgOiB7ICooLmRlYnVnX3NyY2luZm8pIH0KKyAgLmRlYnVnX3NmbmFtZXMgIDAgOiB7ICooLmRlYnVnX3NmbmFtZXMpIH0KKyAgLyogRFdBUkYgMS4xIGFuZCBEV0FSRiAyICovCisgIC5kZWJ1Z19hcmFuZ2VzICAwIDogeyAqKC5kZWJ1Z19hcmFuZ2VzKSB9CisgIC5kZWJ1Z19wdWJuYW1lcyAwIDogeyAqKC5kZWJ1Z19wdWJuYW1lcykgfQorICAvKiBEV0FSRiAyICovCisgIC5kZWJ1Z19pbmZvICAgICAwIDogeyAqKC5kZWJ1Z19pbmZvIC5nbnUubGlua29uY2Uud2kuKikgfQorICAuZGVidWdfYWJicmV2ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9CisgIC5kZWJ1Z19saW5lICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisgIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5kZWJ1Z19mcmFtZSkgfQorICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9CisgIC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKyAgLmRlYnVnX21hY2luZm8gIDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0KKyAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRlbnNpb25zICovCisgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9CisgIC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9CisgIC5kZWJ1Z190eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9CisgIC5kZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKyAgLyogRFdBUkYgMyAqLworICAuZGVidWdfcHVidHlwZXMgMCA6IHsgKiguZGVidWdfcHVidHlwZXMpIH0KKyAgLmRlYnVnX3JhbmdlcyAgIDAgOiB7ICooLmRlYnVnX3JhbmdlcykgfQorICAuZ251LmF0dHJpYnV0ZXMgMCA6IHsgS0VFUCAoKiguZ251LmF0dHJpYnV0ZXMpKSB9CisgIC5ub3RlLmdudS5hcm0uaWRlbnQgMCA6IHsgS0VFUCAoKigubm90ZS5nbnUuYXJtLmlkZW50KSkgfQorICAvRElTQ0FSRC8gOiB7ICooLm5vdGUuR05VLXN0YWNrKSAqKC5nbnVfZGVidWdsaW5rKSAqKC5nbnUubHRvXyopIH0KK30KZGlmZiAtLWdpdCBhL2xpYi9sZHNjcmlwdHMvYXJtZWxmX2xpbnV4X2VhYmkueHNjIGIvbGliL2xkc2NyaXB0cy9hcm1lbGZfbGludXhfZWFiaS54c2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI1NGFhNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9sZHNjcmlwdHMvYXJtZWxmX2xpbnV4X2VhYmkueHNjCkBAIC0wLDAgKzEsMjEyIEBACisvKiBTY3JpcHQgZm9yIC0tc2hhcmVkIC16IGNvbWJyZWxvYzogc2hhcmVkIGxpYnJhcnksIGNvbWJpbmUgJiBzb3J0IHJlbG9jcyAqLworT1VUUFVUX0ZPUk1BVCgiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWJpZ2FybSIsCisJICAgICAgImVsZjMyLWxpdHRsZWFybSIpCitPVVRQVVRfQVJDSChhcm0pCitFTlRSWShfc3RhcnQpCitTRUFSQ0hfRElSKCI9L3Vzci9sb2NhbC9saWIiKTsgU0VBUkNIX0RJUigiPS9saWIiKTsgU0VBUkNIX0RJUigiPS91c3IvbGliIik7CitTRUNUSU9OUworeworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgLiA9IFNFR01FTlRfU1RBUlQoInRleHQtc2VnbWVudCIsIDApICsgU0laRU9GX0hFQURFUlM7CisgIC5ub3RlLmdudS5idWlsZC1pZCA6IHsgKigubm90ZS5nbnUuYnVpbGQtaWQpIH0KKyAgLmhhc2ggICAgICAgICAgIDogeyAqKC5oYXNoKSB9CisgIC5nbnUuaGFzaCAgICAgICA6IHsgKiguZ251Lmhhc2gpIH0KKyAgLmR5bnN5bSAgICAgICAgIDogeyAqKC5keW5zeW0pIH0KKyAgLmR5bnN0ciAgICAgICAgIDogeyAqKC5keW5zdHIpIH0KKyAgLmdudS52ZXJzaW9uICAgIDogeyAqKC5nbnUudmVyc2lvbikgfQorICAuZ251LnZlcnNpb25fZCAgOiB7ICooLmdudS52ZXJzaW9uX2QpIH0KKyAgLmdudS52ZXJzaW9uX3IgIDogeyAqKC5nbnUudmVyc2lvbl9yKSB9CisgIC5yZWwuZHluICAgICAgICA6CisgICAgeworICAgICAgKigucmVsLmluaXQpCisgICAgICAqKC5yZWwudGV4dCAucmVsLnRleHQuKiAucmVsLmdudS5saW5rb25jZS50LiopCisgICAgICAqKC5yZWwuZmluaSkKKyAgICAgICooLnJlbC5yb2RhdGEgLnJlbC5yb2RhdGEuKiAucmVsLmdudS5saW5rb25jZS5yLiopCisgICAgICAqKC5yZWwuZGF0YS5yZWwucm8qIC5yZWwuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopCisgICAgICAqKC5yZWwuZGF0YSAucmVsLmRhdGEuKiAucmVsLmdudS5saW5rb25jZS5kLiopCisgICAgICAqKC5yZWwudGRhdGEgLnJlbC50ZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnRkLiopCisgICAgICAqKC5yZWwudGJzcyAucmVsLnRic3MuKiAucmVsLmdudS5saW5rb25jZS50Yi4qKQorICAgICAgKigucmVsLmN0b3JzKQorICAgICAgKigucmVsLmR0b3JzKQorICAgICAgKigucmVsLmdvdCkKKyAgICAgICooLnJlbC5ic3MgLnJlbC5ic3MuKiAucmVsLmdudS5saW5rb25jZS5iLiopCisgICAgICAqKC5yZWwuaXBsdCkKKyAgICB9CisgIC5yZWxhLmR5biAgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5pbml0KQorICAgICAgKigucmVsYS50ZXh0IC5yZWxhLnRleHQuKiAucmVsYS5nbnUubGlua29uY2UudC4qKQorICAgICAgKigucmVsYS5maW5pKQorICAgICAgKigucmVsYS5yb2RhdGEgLnJlbGEucm9kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnIuKikKKyAgICAgICooLnJlbGEuZGF0YSAucmVsYS5kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLmQuKikKKyAgICAgICooLnJlbGEudGRhdGEgLnJlbGEudGRhdGEuKiAucmVsYS5nbnUubGlua29uY2UudGQuKikKKyAgICAgICooLnJlbGEudGJzcyAucmVsYS50YnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLnRiLiopCisgICAgICAqKC5yZWxhLmN0b3JzKQorICAgICAgKigucmVsYS5kdG9ycykKKyAgICAgICooLnJlbGEuZ290KQorICAgICAgKigucmVsYS5ic3MgLnJlbGEuYnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLmIuKikKKyAgICAgICooLnJlbGEuaXBsdCkKKyAgICB9CisgIC5yZWwucGx0ICAgICAgICA6CisgICAgeworICAgICAgKigucmVsLnBsdCkKKyAgICB9CisgIC5yZWxhLnBsdCAgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5wbHQpCisgICAgfQorICAuaW5pdCAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKiguaW5pdCkpCisgIH0gPTAKKyAgLnBsdCAgICAgICAgICAgIDogeyAqKC5wbHQpIH0KKyAgLmlwbHQgICAgICAgICAgIDogeyAqKC5pcGx0KSB9CisgIC50ZXh0ICAgICAgICAgICA6CisgIHsKKyAgICAqKC50ZXh0LnVubGlrZWx5IC50ZXh0LipfdW5saWtlbHkpCisgICAgKigudGV4dCAuc3R1YiAudGV4dC4qIC5nbnUubGlua29uY2UudC4qKQorICAgIC8qIC5nbnUud2FybmluZyBzZWN0aW9ucyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgYnkgZWxmMzIuZW0uICAqLworICAgICooLmdudS53YXJuaW5nKQorICAgICooLmdsdWVfN3QpICooLmdsdWVfNykgKigudmZwMTFfdmVuZWVyKSAqKC52NF9ieCkKKyAgfSA9MAorICAuZmluaSAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKiguZmluaSkpCisgIH0gPTAKKyAgUFJPVklERSAoX19ldGV4dCA9IC4pOworICBQUk9WSURFIChfZXRleHQgPSAuKTsKKyAgUFJPVklERSAoZXRleHQgPSAuKTsKKyAgLnJvZGF0YSAgICAgICAgIDogeyAqKC5yb2RhdGEgLnJvZGF0YS4qIC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yb2RhdGExICAgICAgICA6IHsgKigucm9kYXRhMSkgfQorICAuQVJNLmV4dGFiICAgOiB7ICooLkFSTS5leHRhYiogLmdudS5saW5rb25jZS5hcm1leHRhYi4qKSB9CisgICBfX2V4aWR4X3N0YXJ0ID0gLjsKKyAgLkFSTS5leGlkeCAgIDogeyAqKC5BUk0uZXhpZHgqIC5nbnUubGlua29uY2UuYXJtZXhpZHguKikgfQorICAgX19leGlkeF9lbmQgPSAuOworICAuZWhfZnJhbWVfaGRyIDogeyAqKC5laF9mcmFtZV9oZHIpIH0KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9STyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9STyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQuICBXZSB3YW50IHRvIGFkanVzdCB1cCB0bworICAgICB0aGUgc2FtZSBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZSBvbiB0aGUgbmV4dCBwYWdlIHVwLiAgKi8KKyAgLiA9IEFMSUdOIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpKSAtICgoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSAtIC4pICYgKENPTlNUQU5UIChNQVhQQUdFU0laRSkgLSAxKSk7IC4gPSBEQVRBX1NFR01FTlRfQUxJR04gKENPTlNUQU5UIChNQVhQQUdFU0laRSksIENPTlNUQU5UIChDT01NT05QQUdFU0laRSkpOworICAvKiBFeGNlcHRpb24gaGFuZGxpbmcgICovCisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUlcgeyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUlcgeyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogVGhyZWFkIExvY2FsIFN0b3JhZ2Ugc2VjdGlvbnMgICovCisgIC50ZGF0YQkgIDogeyAqKC50ZGF0YSAudGRhdGEuKiAuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnRic3MJCSAgOiB7ICooLnRic3MgLnRic3MuKiAuZ251LmxpbmtvbmNlLnRiLiopICooLnRjb21tb24pIH0KKyAgLnByZWluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkpKQorICB9CisgIC5pbml0X2FycmF5ICAgICA6CisgIHsKKyAgICAgS0VFUCAoKihTT1JUKC5pbml0X2FycmF5LiopKSkKKyAgICAgS0VFUCAoKiguaW5pdF9hcnJheSkpCisgIH0KKyAgLmZpbmlfYXJyYXkgICAgIDoKKyAgeworICAgIEtFRVAgKCooLmZpbmlfYXJyYXkpKQorICAgIEtFRVAgKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgIH0KKyAgLmN0b3JzICAgICAgICAgIDoKKyAgeworICAgIC8qIGdjYyB1c2VzIGNydGJlZ2luLm8gdG8gZmluZCB0aGUgc3RhcnQgb2YKKyAgICAgICB0aGUgY29uc3RydWN0b3JzLCBzbyB3ZSBtYWtlIHN1cmUgaXQgaXMKKyAgICAgICBmaXJzdC4gIEJlY2F1c2UgdGhpcyBpcyBhIHdpbGRjYXJkLCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSB1c2VyIGRvZXMgbm90CisgICAgICAgYWN0dWFsbHkgbGluayBhZ2FpbnN0IGNydGJlZ2luLm87IHRoZQorICAgICAgIGxpbmtlciB3b24ndCBsb29rIGZvciBhIGZpbGUgdG8gbWF0Y2ggYQorICAgICAgIHdpbGRjYXJkLiAgVGhlIHdpbGRjYXJkIGFsc28gbWVhbnMgdGhhdCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGRpcmVjdG9yeSBjcnRiZWdpbi5vCisgICAgICAgaXMgaW4uICAqLworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5jdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5jdG9ycykpCisgICAgLyogV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSAuY3RvciBzZWN0aW9uIGZyb20KKyAgICAgICB0aGUgY3J0ZW5kLm8gZmlsZSB1bnRpbCBhZnRlciB0aGUgc29ydGVkIGN0b3JzLgorICAgICAgIFRoZSAuY3RvciBzZWN0aW9uIGZyb20gdGhlIGNydGVuZCBmaWxlIGNvbnRhaW5zIHRoZQorICAgICAgIGVuZCBvZiBjdG9ycyBtYXJrZXIgYW5kIGl0IG11c3QgYmUgbGFzdCAqLworICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5jdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5jdG9ycy4qKSkpCisgICAgS0VFUCAoKiguY3RvcnMpKQorICB9CisgIC5kdG9ycyAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqY3J0YmVnaW4ubyguZHRvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguZHRvcnMpKQorICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5kdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5kdG9ycy4qKSkpCisgICAgS0VFUCAoKiguZHRvcnMpKQorICB9CisgIC5qY3IgICAgICAgICAgICA6IHsgS0VFUCAoKiguamNyKSkgfQorICAuZGF0YS5yZWwucm8gOiB7ICooLmRhdGEucmVsLnJvLmxvY2FsKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLmxvY2FsLiopICooLmRhdGEucmVsLnJvKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLmR5bmFtaWMgICAgICAgIDogeyAqKC5keW5hbWljKSB9CisgIC4gPSBEQVRBX1NFR01FTlRfUkVMUk9fRU5EICgwLCAuKTsKKyAgLmdvdCAgICAgICAgICAgIDogeyAqKC5nb3QucGx0KSAqKC5pZ290LnBsdCkgKiguZ290KSAqKC5pZ290KSB9CisgIC5kYXRhICAgICAgICAgICA6CisgIHsKKyAgICBQUk9WSURFIChfX2RhdGFfc3RhcnQgPSAuKTsKKyAgICAqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisgICAgU09SVChDT05TVFJVQ1RPUlMpCisgIH0KKyAgLmRhdGExICAgICAgICAgIDogeyAqKC5kYXRhMSkgfQorICBfZWRhdGEgPSAuOyBQUk9WSURFIChlZGF0YSA9IC4pOworICBfX2Jzc19zdGFydCA9IC47CisgIF9fYnNzX3N0YXJ0X18gPSAuOworICAuYnNzICAgICAgICAgICAgOgorICB7CisgICAqKC5keW5ic3MpCisgICAqKC5ic3MgLmJzcy4qIC5nbnUubGlua29uY2UuYi4qKQorICAgKihDT01NT04pCisgICAvKiBBbGlnbiBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSAuYnNzIHNlY3Rpb24gb2NjdXBpZXMgc3BhY2UgdXAgdG8KKyAgICAgIF9lbmQuICBBbGlnbiBhZnRlciAuYnNzIHRvIGVuc3VyZSBjb3JyZWN0IGFsaWdubWVudCBldmVuIGlmIHRoZQorICAgICAgLmJzcyBzZWN0aW9uIGRpc2FwcGVhcnMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gaW5wdXQgc2VjdGlvbnMuCisgICAgICBGSVhNRTogV2h5IGRvIHdlIG5lZWQgaXQ/IFdoZW4gdGhlcmUgaXMgbm8gLmJzcyBzZWN0aW9uLCB3ZSBkb24ndAorICAgICAgcGFkIHRoZSAuZGF0YSBzZWN0aW9uLiAgKi8KKyAgIC4gPSBBTElHTiguICE9IDAgPyAzMiAvIDggOiAxKTsKKyAgfQorICBfYnNzX2VuZF9fID0gLiA7IF9fYnNzX2VuZF9fID0gLiA7CisgIC4gPSBBTElHTigzMiAvIDgpOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgX19lbmRfXyA9IC4gOworICBfZW5kID0gLjsgUFJPVklERSAoZW5kID0gLik7CisgIC4gPSBEQVRBX1NFR01FTlRfRU5EICguKTsKKyAgLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KKyAgLnN0YWIgICAgICAgICAgMCA6IHsgKiguc3RhYikgfQorICAuc3RhYnN0ciAgICAgICAwIDogeyAqKC5zdGFic3RyKSB9CisgIC5zdGFiLmV4Y2wgICAgIDAgOiB7ICooLnN0YWIuZXhjbCkgfQorICAuc3RhYi5leGNsc3RyICAwIDogeyAqKC5zdGFiLmV4Y2xzdHIpIH0KKyAgLnN0YWIuaW5kZXggICAgMCA6IHsgKiguc3RhYi5pbmRleCkgfQorICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9CisgIC5jb21tZW50ICAgICAgIDAgOiB7ICooLmNvbW1lbnQpIH0KKyAgLyogRFdBUkYgZGVidWcgc2VjdGlvbnMuCisgICAgIFN5bWJvbHMgaW4gdGhlIERXQVJGIGRlYnVnZ2luZyBzZWN0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc2VjdGlvbiBzbyB3ZSBiZWdpbiB0aGVtIGF0IDAuICAqLworICAvKiBEV0FSRiAxICovCisgIC5kZWJ1ZyAgICAgICAgICAwIDogeyAqKC5kZWJ1ZykgfQorICAubGluZSAgICAgICAgICAgMCA6IHsgKigubGluZSkgfQorICAvKiBHTlUgRFdBUkYgMSBleHRlbnNpb25zICovCisgIC5kZWJ1Z19zcmNpbmZvICAwIDogeyAqKC5kZWJ1Z19zcmNpbmZvKSB9CisgIC5kZWJ1Z19zZm5hbWVzICAwIDogeyAqKC5kZWJ1Z19zZm5hbWVzKSB9CisgIC8qIERXQVJGIDEuMSBhbmQgRFdBUkYgMiAqLworICAuZGVidWdfYXJhbmdlcyAgMCA6IHsgKiguZGVidWdfYXJhbmdlcykgfQorICAuZGVidWdfcHVibmFtZXMgMCA6IHsgKiguZGVidWdfcHVibmFtZXMpIH0KKyAgLyogRFdBUkYgMiAqLworICAuZGVidWdfaW5mbyAgICAgMCA6IHsgKiguZGVidWdfaW5mbyAuZ251LmxpbmtvbmNlLndpLiopIH0KKyAgLmRlYnVnX2FiYnJldiAgIDAgOiB7ICooLmRlYnVnX2FiYnJldikgfQorICAuZGVidWdfbGluZSAgICAgMCA6IHsgKiguZGVidWdfbGluZSkgfQorICAuZGVidWdfZnJhbWUgICAgMCA6IHsgKiguZGVidWdfZnJhbWUpIH0KKyAgLmRlYnVnX3N0ciAgICAgIDAgOiB7ICooLmRlYnVnX3N0cikgfQorICAuZGVidWdfbG9jICAgICAgMCA6IHsgKiguZGVidWdfbG9jKSB9CisgIC5kZWJ1Z19tYWNpbmZvICAwIDogeyAqKC5kZWJ1Z19tYWNpbmZvKSB9CisgIC8qIFNHSS9NSVBTIERXQVJGIDIgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfd2Vha25hbWVzIDAgOiB7ICooLmRlYnVnX3dlYWtuYW1lcykgfQorICAuZGVidWdfZnVuY25hbWVzIDAgOiB7ICooLmRlYnVnX2Z1bmNuYW1lcykgfQorICAuZGVidWdfdHlwZW5hbWVzIDAgOiB7ICooLmRlYnVnX3R5cGVuYW1lcykgfQorICAuZGVidWdfdmFybmFtZXMgIDAgOiB7ICooLmRlYnVnX3Zhcm5hbWVzKSB9CisgIC8qIERXQVJGIDMgKi8KKyAgLmRlYnVnX3B1YnR5cGVzIDAgOiB7ICooLmRlYnVnX3B1YnR5cGVzKSB9CisgIC5kZWJ1Z19yYW5nZXMgICAwIDogeyAqKC5kZWJ1Z19yYW5nZXMpIH0KKyAgLmdudS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLmdudS5hdHRyaWJ1dGVzKSkgfQorICAubm90ZS5nbnUuYXJtLmlkZW50IDAgOiB7IEtFRVAgKCooLm5vdGUuZ251LmFybS5pZGVudCkpIH0KKyAgL0RJU0NBUkQvIDogeyAqKC5ub3RlLkdOVS1zdGFjaykgKiguZ251X2RlYnVnbGluaykgKiguZ251Lmx0b18qKSB9Cit9CmRpZmYgLS1naXQgYS9saWIvbGRzY3JpcHRzL2FybWVsZl9saW51eF9lYWJpLnhzdyBiL2xpYi9sZHNjcmlwdHMvYXJtZWxmX2xpbnV4X2VhYmkueHN3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZGYyZDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbGRzY3JpcHRzL2FybWVsZl9saW51eF9lYWJpLnhzdwpAQCAtMCwwICsxLDIxMiBAQAorLyogU2NyaXB0IGZvciAtLXNoYXJlZCAteiBjb21icmVsb2MgLXogbm93IC16IHJlbHJvOiBzaGFyZWQgbGlicmFyeSwgY29tYmluZSAmIHNvcnQgcmVsb2NzICovCitPVVRQVVRfRk9STUFUKCJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItYmlnYXJtIiwKKwkgICAgICAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQVJDSF9ESVIoIj0vdXNyL2xvY2FsL2xpYiIpOyBTRUFSQ0hfRElSKCI9L2xpYiIpOyBTRUFSQ0hfRElSKCI9L3Vzci9saWIiKTsKK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICAuID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMCkgKyBTSVpFT0ZfSEVBREVSUzsKKyAgLm5vdGUuZ251LmJ1aWxkLWlkIDogeyAqKC5ub3RlLmdudS5idWlsZC1pZCkgfQorICAuaGFzaCAgICAgICAgICAgOiB7ICooLmhhc2gpIH0KKyAgLmdudS5oYXNoICAgICAgIDogeyAqKC5nbnUuaGFzaCkgfQorICAuZHluc3ltICAgICAgICAgOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyICAgICAgICAgOiB7ICooLmR5bnN0cikgfQorICAuZ251LnZlcnNpb24gICAgOiB7ICooLmdudS52ZXJzaW9uKSB9CisgIC5nbnUudmVyc2lvbl9kICA6IHsgKiguZ251LnZlcnNpb25fZCkgfQorICAuZ251LnZlcnNpb25fciAgOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KKyAgLnJlbC5keW4gICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWwuaW5pdCkKKyAgICAgICooLnJlbC50ZXh0IC5yZWwudGV4dC4qIC5yZWwuZ251LmxpbmtvbmNlLnQuKikKKyAgICAgICooLnJlbC5maW5pKQorICAgICAgKigucmVsLnJvZGF0YSAucmVsLnJvZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnIuKikKKyAgICAgICooLnJlbC5kYXRhLnJlbC5ybyogLnJlbC5nbnUubGlua29uY2UuZC5yZWwucm8uKikKKyAgICAgICooLnJlbC5kYXRhIC5yZWwuZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLmQuKikKKyAgICAgICooLnJlbC50ZGF0YSAucmVsLnRkYXRhLiogLnJlbC5nbnUubGlua29uY2UudGQuKikKKyAgICAgICooLnJlbC50YnNzIC5yZWwudGJzcy4qIC5yZWwuZ251LmxpbmtvbmNlLnRiLiopCisgICAgICAqKC5yZWwuY3RvcnMpCisgICAgICAqKC5yZWwuZHRvcnMpCisgICAgICAqKC5yZWwuZ290KQorICAgICAgKigucmVsLmJzcyAucmVsLmJzcy4qIC5yZWwuZ251LmxpbmtvbmNlLmIuKikKKyAgICAgICooLnJlbC5pcGx0KQorICAgIH0KKyAgLnJlbGEuZHluICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLmluaXQpCisgICAgICAqKC5yZWxhLnRleHQgLnJlbGEudGV4dC4qIC5yZWxhLmdudS5saW5rb25jZS50LiopCisgICAgICAqKC5yZWxhLmZpbmkpCisgICAgICAqKC5yZWxhLnJvZGF0YSAucmVsYS5yb2RhdGEuKiAucmVsYS5nbnUubGlua29uY2Uuci4qKQorICAgICAgKigucmVsYS5kYXRhIC5yZWxhLmRhdGEuKiAucmVsYS5nbnUubGlua29uY2UuZC4qKQorICAgICAgKigucmVsYS50ZGF0YSAucmVsYS50ZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS50ZC4qKQorICAgICAgKigucmVsYS50YnNzIC5yZWxhLnRic3MuKiAucmVsYS5nbnUubGlua29uY2UudGIuKikKKyAgICAgICooLnJlbGEuY3RvcnMpCisgICAgICAqKC5yZWxhLmR0b3JzKQorICAgICAgKigucmVsYS5nb3QpCisgICAgICAqKC5yZWxhLmJzcyAucmVsYS5ic3MuKiAucmVsYS5nbnUubGlua29uY2UuYi4qKQorICAgICAgKigucmVsYS5pcGx0KQorICAgIH0KKyAgLnJlbC5wbHQgICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWwucGx0KQorICAgIH0KKyAgLnJlbGEucGx0ICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLnBsdCkKKyAgICB9CisgIC5pbml0ICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKC5pbml0KSkKKyAgfSA9MAorICAucGx0ICAgICAgICAgICAgOiB7ICooLnBsdCkgfQorICAuaXBsdCAgICAgICAgICAgOiB7ICooLmlwbHQpIH0KKyAgLnRleHQgICAgICAgICAgIDoKKyAgeworICAgICooLnRleHQudW5saWtlbHkgLnRleHQuKl91bmxpa2VseSkKKyAgICAqKC50ZXh0IC5zdHViIC50ZXh0LiogLmdudS5saW5rb25jZS50LiopCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgICAgKiguZ2x1ZV83dCkgKiguZ2x1ZV83KSAqKC52ZnAxMV92ZW5lZXIpICooLnY0X2J4KQorICB9ID0wCisgIC5maW5pICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKC5maW5pKSkKKyAgfSA9MAorICBQUk9WSURFIChfX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKF9ldGV4dCA9IC4pOworICBQUk9WSURFIChldGV4dCA9IC4pOworICAucm9kYXRhICAgICAgICAgOiB7ICooLnJvZGF0YSAucm9kYXRhLiogLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJvZGF0YTEgICAgICAgIDogeyAqKC5yb2RhdGExKSB9CisgIC5BUk0uZXh0YWIgICA6IHsgKiguQVJNLmV4dGFiKiAuZ251LmxpbmtvbmNlLmFybWV4dGFiLiopIH0KKyAgIF9fZXhpZHhfc3RhcnQgPSAuOworICAuQVJNLmV4aWR4ICAgOiB7ICooLkFSTS5leGlkeCogLmdudS5saW5rb25jZS5hcm1leGlkeC4qKSB9CisgICBfX2V4aWR4X2VuZCA9IC47CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAuID0gQUxJR04gKENPTlNUQU5UIChNQVhQQUdFU0laRSkpIC0gKChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gLikgJiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSAtIDEpKTsgLiA9IERBVEFfU0VHTUVOVF9BTElHTiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSwgQ09OU1RBTlQgKENPTU1PTlBBR0VTSVpFKSk7CisgIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyAgKi8KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9SVyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9SVyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCSAgOiB7ICooLnRkYXRhIC50ZGF0YS4qIC5nbnUubGlua29uY2UudGQuKikgfQorICAudGJzcwkJICA6IHsgKigudGJzcyAudGJzcy4qIC5nbnUubGlua29uY2UudGIuKikgKigudGNvbW1vbikgfQorICAucHJlaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgIH0KKyAgLmluaXRfYXJyYXkgICAgIDoKKyAgeworICAgICBLRUVQICgqKFNPUlQoLmluaXRfYXJyYXkuKikpKQorICAgICBLRUVQICgqKC5pbml0X2FycmF5KSkKKyAgfQorICAuZmluaV9hcnJheSAgICAgOgorICB7CisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgICAgS0VFUCAoKihTT1JUKC5maW5pX2FycmF5LiopKSkKKyAgfQorICAuY3RvcnMgICAgICAgICAgOgorICB7CisgICAgLyogZ2NjIHVzZXMgY3J0YmVnaW4ubyB0byBmaW5kIHRoZSBzdGFydCBvZgorICAgICAgIHRoZSBjb25zdHJ1Y3RvcnMsIHNvIHdlIG1ha2Ugc3VyZSBpdCBpcworICAgICAgIGZpcnN0LiAgQmVjYXVzZSB0aGlzIGlzIGEgd2lsZGNhcmQsIGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgaWYgdGhlIHVzZXIgZG9lcyBub3QKKyAgICAgICBhY3R1YWxseSBsaW5rIGFnYWluc3QgY3J0YmVnaW4ubzsgdGhlCisgICAgICAgbGlua2VyIHdvbid0IGxvb2sgZm9yIGEgZmlsZSB0byBtYXRjaCBhCisgICAgICAgd2lsZGNhcmQuICBUaGUgd2lsZGNhcmQgYWxzbyBtZWFucyB0aGF0IGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgd2hpY2ggZGlyZWN0b3J5IGNydGJlZ2luLm8KKyAgICAgICBpcyBpbi4gICovCisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmN0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmN0b3JzKSkKKyAgICAvKiBXZSBkb24ndCB3YW50IHRvIGluY2x1ZGUgdGhlIC5jdG9yIHNlY3Rpb24gZnJvbQorICAgICAgIHRoZSBjcnRlbmQubyBmaWxlIHVudGlsIGFmdGVyIHRoZSBzb3J0ZWQgY3RvcnMuCisgICAgICAgVGhlIC5jdG9yIHNlY3Rpb24gZnJvbSB0aGUgY3J0ZW5kIGZpbGUgY29udGFpbnMgdGhlCisgICAgICAgZW5kIG9mIGN0b3JzIG1hcmtlciBhbmQgaXQgbXVzdCBiZSBsYXN0ICovCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmN0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmN0b3JzLiopKSkKKyAgICBLRUVQICgqKC5jdG9ycykpCisgIH0KKyAgLmR0b3JzICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5kdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5kdG9ycykpCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmR0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmR0b3JzLiopKSkKKyAgICBLRUVQICgqKC5kdG9ycykpCisgIH0KKyAgLmpjciAgICAgICAgICAgIDogeyBLRUVQICgqKC5qY3IpKSB9CisgIC5kYXRhLnJlbC5ybyA6IHsgKiguZGF0YS5yZWwucm8ubG9jYWwqIC5nbnUubGlua29uY2UuZC5yZWwucm8ubG9jYWwuKikgKiguZGF0YS5yZWwucm8qIC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAuZHluYW1pYyAgICAgICAgOiB7ICooLmR5bmFtaWMpIH0KKyAgLmdvdCAgICAgICAgICAgIDogeyAqKC5nb3QucGx0KSAqKC5pZ290LnBsdCkgKiguZ290KSAqKC5pZ290KSB9CisgIC4gPSBEQVRBX1NFR01FTlRfUkVMUk9fRU5EICgwLCAuKTsKKyAgLmRhdGEgICAgICAgICAgIDoKKyAgeworICAgIFBST1ZJREUgKF9fZGF0YV9zdGFydCA9IC4pOworICAgICooLmRhdGEgLmRhdGEuKiAuZ251LmxpbmtvbmNlLmQuKikKKyAgICBTT1JUKENPTlNUUlVDVE9SUykKKyAgfQorICAuZGF0YTEgICAgICAgICAgOiB7ICooLmRhdGExKSB9CisgIF9lZGF0YSA9IC47IFBST1ZJREUgKGVkYXRhID0gLik7CisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgX19ic3Nfc3RhcnRfXyA9IC47CisgIC5ic3MgICAgICAgICAgICA6CisgIHsKKyAgICooLmR5bmJzcykKKyAgICooLmJzcyAuYnNzLiogLmdudS5saW5rb25jZS5iLiopCisgICAqKENPTU1PTikKKyAgIC8qIEFsaWduIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIC5ic3Mgc2VjdGlvbiBvY2N1cGllcyBzcGFjZSB1cCB0bworICAgICAgX2VuZC4gIEFsaWduIGFmdGVyIC5ic3MgdG8gZW5zdXJlIGNvcnJlY3QgYWxpZ25tZW50IGV2ZW4gaWYgdGhlCisgICAgICAuYnNzIHNlY3Rpb24gZGlzYXBwZWFycyBiZWNhdXNlIHRoZXJlIGFyZSBubyBpbnB1dCBzZWN0aW9ucy4KKyAgICAgIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCBpdD8gV2hlbiB0aGVyZSBpcyBubyAuYnNzIHNlY3Rpb24sIHdlIGRvbid0CisgICAgICBwYWQgdGhlIC5kYXRhIHNlY3Rpb24uICAqLworICAgLiA9IEFMSUdOKC4gIT0gMCA/IDMyIC8gOCA6IDEpOworICB9CisgIF9ic3NfZW5kX18gPSAuIDsgX19ic3NfZW5kX18gPSAuIDsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIC4gPSBBTElHTigzMiAvIDgpOworICBfX2VuZF9fID0gLiA7CisgIF9lbmQgPSAuOyBQUk9WSURFIChlbmQgPSAuKTsKKyAgLiA9IERBVEFfU0VHTUVOVF9FTkQgKC4pOworICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAgICAgICAgICAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyICAgICAgIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAgICAgMCA6IHsgKiguc3RhYi5leGNsKSB9CisgIC5zdGFiLmV4Y2xzdHIgIDAgOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAuc3RhYi5pbmRleCAgICAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisgIC5zdGFiLmluZGV4c3RyIDAgOiB7ICooLnN0YWIuaW5kZXhzdHIpIH0KKyAgLmNvbW1lbnQgICAgICAgMCA6IHsgKiguY29tbWVudCkgfQorICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KKyAgICAgU3ltYm9scyBpbiB0aGUgRFdBUkYgZGVidWdnaW5nIHNlY3Rpb25zIGFyZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nCisgICAgIG9mIHRoZSBzZWN0aW9uIHNvIHdlIGJlZ2luIHRoZW0gYXQgMC4gICovCisgIC8qIERXQVJGIDEgKi8KKyAgLmRlYnVnICAgICAgICAgIDAgOiB7ICooLmRlYnVnKSB9CisgIC5saW5lICAgICAgICAgICAwIDogeyAqKC5saW5lKSB9CisgIC8qIEdOVSBEV0FSRiAxIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3NyY2luZm8gIDAgOiB7ICooLmRlYnVnX3NyY2luZm8pIH0KKyAgLmRlYnVnX3NmbmFtZXMgIDAgOiB7ICooLmRlYnVnX3NmbmFtZXMpIH0KKyAgLyogRFdBUkYgMS4xIGFuZCBEV0FSRiAyICovCisgIC5kZWJ1Z19hcmFuZ2VzICAwIDogeyAqKC5kZWJ1Z19hcmFuZ2VzKSB9CisgIC5kZWJ1Z19wdWJuYW1lcyAwIDogeyAqKC5kZWJ1Z19wdWJuYW1lcykgfQorICAvKiBEV0FSRiAyICovCisgIC5kZWJ1Z19pbmZvICAgICAwIDogeyAqKC5kZWJ1Z19pbmZvIC5nbnUubGlua29uY2Uud2kuKikgfQorICAuZGVidWdfYWJicmV2ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9CisgIC5kZWJ1Z19saW5lICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisgIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5kZWJ1Z19mcmFtZSkgfQorICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9CisgIC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKyAgLmRlYnVnX21hY2luZm8gIDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0KKyAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRlbnNpb25zICovCisgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9CisgIC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9CisgIC5kZWJ1Z190eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9CisgIC5kZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKyAgLyogRFdBUkYgMyAqLworICAuZGVidWdfcHVidHlwZXMgMCA6IHsgKiguZGVidWdfcHVidHlwZXMpIH0KKyAgLmRlYnVnX3JhbmdlcyAgIDAgOiB7ICooLmRlYnVnX3JhbmdlcykgfQorICAuZ251LmF0dHJpYnV0ZXMgMCA6IHsgS0VFUCAoKiguZ251LmF0dHJpYnV0ZXMpKSB9CisgIC5ub3RlLmdudS5hcm0uaWRlbnQgMCA6IHsgS0VFUCAoKigubm90ZS5nbnUuYXJtLmlkZW50KSkgfQorICAvRElTQ0FSRC8gOiB7ICooLm5vdGUuR05VLXN0YWNrKSAqKC5nbnVfZGVidWdsaW5rKSAqKC5nbnUubHRvXyopIH0KK30KZGlmZiAtLWdpdCBhL2xpYi9sZHNjcmlwdHMvYXJtZWxmX2xpbnV4X2VhYmkueHUgYi9saWIvbGRzY3JpcHRzL2FybWVsZl9saW51eF9lYWJpLnh1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYTIzZWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbGRzY3JpcHRzL2FybWVsZl9saW51eF9lYWJpLnh1CkBAIC0wLDAgKzEsMTY0IEBACisvKiBTY3JpcHQgZm9yIGxkIC1VcjogbGluayB3L291dCByZWxvY2F0aW9uLCBkbyBjcmVhdGUgY29uc3RydWN0b3JzICovCitPVVRQVVRfRk9STUFUKCJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItYmlnYXJtIiwKKwkgICAgICAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKKyAvKiBGb3Igc29tZSByZWFzb24sIHRoZSBTb2xhcmlzIGxpbmtlciBtYWtlcyBiYWQgZXhlY3V0YWJsZXMKKyAgaWYgZ2xkIC1yIGlzIHVzZWQgYW5kIHRoZSBpbnRlcm1lZGlhdGUgZmlsZSBoYXMgc2VjdGlvbnMgc3RhcnRpbmcKKyAgYXQgbm9uLXplcm8gYWRkcmVzc2VzLiAgQ291bGQgYmUgYSBTb2xhcmlzIGxkIGJ1ZywgY291bGQgYmUgYSBHTlUgbGQKKyAgYnVnLiAgQnV0IGZvciBub3cgYXNzaWduaW5nIHRoZSB6ZXJvIHZtYXMgd29ya3MuICAqLworU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC5pbnRlcnAgICAgICAgMCA6IHsgKiguaW50ZXJwKSB9CisgIC5ub3RlLmdudS5idWlsZC1pZCA6IHsgKigubm90ZS5nbnUuYnVpbGQtaWQpIH0KKyAgLmhhc2ggICAgICAgICAwIDogeyAqKC5oYXNoKSB9CisgIC5nbnUuaGFzaCAgICAgMCA6IHsgKiguZ251Lmhhc2gpIH0KKyAgLmR5bnN5bSAgICAgICAwIDogeyAqKC5keW5zeW0pIH0KKyAgLmR5bnN0ciAgICAgICAwIDogeyAqKC5keW5zdHIpIH0KKyAgLmdudS52ZXJzaW9uICAwIDogeyAqKC5nbnUudmVyc2lvbikgfQorICAuZ251LnZlcnNpb25fZCAwOiB7ICooLmdudS52ZXJzaW9uX2QpIH0KKyAgLmdudS52ZXJzaW9uX3IgMDogeyAqKC5nbnUudmVyc2lvbl9yKSB9CisgIC5yZWwuaW5pdCAgICAgMCA6IHsgKigucmVsLmluaXQpIH0KKyAgLnJlbGEuaW5pdCAgICAwIDogeyAqKC5yZWxhLmluaXQpIH0KKyAgLnJlbC50ZXh0ICAgICAwIDogeyAqKC5yZWwudGV4dCkgfQorICAucmVsYS50ZXh0ICAgIDAgOiB7ICooLnJlbGEudGV4dCkgfQorICAucmVsLmZpbmkgICAgIDAgOiB7ICooLnJlbC5maW5pKSB9CisgIC5yZWxhLmZpbmkgICAgMCA6IHsgKigucmVsYS5maW5pKSB9CisgIC5yZWwucm9kYXRhICAgMCA6IHsgKigucmVsLnJvZGF0YSkgfQorICAucmVsYS5yb2RhdGEgIDAgOiB7ICooLnJlbGEucm9kYXRhKSB9CisgIC5yZWwuZGF0YS5yZWwucm8gMCA6IHsgKigucmVsLmRhdGEucmVsLnJvKSB9CisgIC5yZWxhLmRhdGEucmVsLnJvIDAgOiB7ICooLnJlbGEuZGF0YS5yZWwucm8pIH0KKyAgLnJlbC5kYXRhICAgICAwIDogeyAqKC5yZWwuZGF0YSkgfQorICAucmVsYS5kYXRhICAgIDAgOiB7ICooLnJlbGEuZGF0YSkgfQorICAucmVsLnRkYXRhCTAgOiB7ICooLnJlbC50ZGF0YSkgfQorICAucmVsYS50ZGF0YQkwIDogeyAqKC5yZWxhLnRkYXRhKSB9CisgIC5yZWwudGJzcwkwIDogeyAqKC5yZWwudGJzcykgfQorICAucmVsYS50YnNzCTAgOiB7ICooLnJlbGEudGJzcykgfQorICAucmVsLmN0b3JzICAgIDAgOiB7ICooLnJlbC5jdG9ycykgfQorICAucmVsYS5jdG9ycyAgIDAgOiB7ICooLnJlbGEuY3RvcnMpIH0KKyAgLnJlbC5kdG9ycyAgICAwIDogeyAqKC5yZWwuZHRvcnMpIH0KKyAgLnJlbGEuZHRvcnMgICAwIDogeyAqKC5yZWxhLmR0b3JzKSB9CisgIC5yZWwuZ290ICAgICAgMCA6IHsgKigucmVsLmdvdCkgfQorICAucmVsYS5nb3QgICAgIDAgOiB7ICooLnJlbGEuZ290KSB9CisgIC5yZWwuYnNzICAgICAgMCA6IHsgKigucmVsLmJzcykgfQorICAucmVsYS5ic3MgICAgIDAgOiB7ICooLnJlbGEuYnNzKSB9CisgIC5yZWwuaXBsdCAgICAgMCA6CisgICAgeworICAgICAgKigucmVsLmlwbHQpCisgICAgfQorICAucmVsYS5pcGx0ICAgIDAgOgorICAgIHsKKyAgICAgICooLnJlbGEuaXBsdCkKKyAgICB9CisgIC5yZWwucGx0ICAgICAgMCA6CisgICAgeworICAgICAgKigucmVsLnBsdCkKKyAgICB9CisgIC5yZWxhLnBsdCAgICAgMCA6CisgICAgeworICAgICAgKigucmVsYS5wbHQpCisgICAgfQorICAuaW5pdCAgICAgICAgIDAgOgorICB7CisgICAgS0VFUCAoKiguaW5pdCkpCisgIH0gPTAKKyAgLnBsdCAgICAgICAgICAwIDogeyAqKC5wbHQpIH0KKyAgLmlwbHQgICAgICAgICAwIDogeyAqKC5pcGx0KSB9CisgIC50ZXh0ICAgICAgICAgMCA6CisgIHsKKyAgICAqKC50ZXh0IC5zdHViKQorICAgIC8qIC5nbnUud2FybmluZyBzZWN0aW9ucyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgYnkgZWxmMzIuZW0uICAqLworICAgICooLmdudS53YXJuaW5nKQorICB9ID0wCisgIC5maW5pICAgICAgICAgMCA6CisgIHsKKyAgICBLRUVQICgqKC5maW5pKSkKKyAgfSA9MAorICAucm9kYXRhICAgICAgIDAgOiB7ICooLnJvZGF0YSkgfQorICAucm9kYXRhMSAgICAgIDAgOiB7ICooLnJvZGF0YTEpIH0KKyAgLkFSTS5leHRhYiAwIDogeyAqKC5BUk0uZXh0YWIpIH0KKyAgLkFSTS5leGlkeCAwIDogeyAqKC5BUk0uZXhpZHgpIH0KKyAgLmVoX2ZyYW1lX2hkciA6IHsgKiguZWhfZnJhbWVfaGRyKSB9CisgIC5laF9mcmFtZSAgICAgMCA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgMCA6IE9OTFlfSUZfUk8geyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogQWRqdXN0IHRoZSBhZGRyZXNzIGZvciB0aGUgZGF0YSBzZWdtZW50LiAgV2Ugd2FudCB0byBhZGp1c3QgdXAgdG8KKyAgICAgdGhlIHNhbWUgYWRkcmVzcyB3aXRoaW4gdGhlIHBhZ2Ugb24gdGhlIG5leHQgcGFnZSB1cC4gICovCisgIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyAgKi8KKyAgLmVoX2ZyYW1lICAgICAwIDogT05MWV9JRl9SVyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAwIDogT05MWV9JRl9SVyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCTAgOiB7ICooLnRkYXRhKSB9CisgIC50YnNzCQkwIDogeyAqKC50YnNzKSB9CisgIC5wcmVpbml0X2FycmF5ICAgMCA6CisgIHsKKyAgICBLRUVQICgqKC5wcmVpbml0X2FycmF5KSkKKyAgfQorICAuaW5pdF9hcnJheSAgIDAgOgorICB7CisgICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgIEtFRVAgKCooLmluaXRfYXJyYXkpKQorICB9CisgIC5maW5pX2FycmF5ICAgMCA6CisgIHsKKyAgICBLRUVQICgqKC5maW5pX2FycmF5KSkKKyAgICBLRUVQICgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQorICB9CisgIC5qY3IgICAgICAgICAgMCA6IHsgS0VFUCAoKiguamNyKSkgfQorICAuZHluYW1pYyAgICAgIDAgOiB7ICooLmR5bmFtaWMpIH0KKyAgLmdvdCAgICAgICAgICAwIDogeyAqKC5nb3QucGx0KSAqKC5pZ290LnBsdCkgKiguZ290KSAqKC5pZ290KSB9CisgIC5kYXRhICAgICAgICAgMCA6CisgIHsKKyAgICAqKC5kYXRhKQorICAgIFNPUlQoQ09OU1RSVUNUT1JTKQorICB9CisgIC5kYXRhMSAgICAgICAgMCA6IHsgKiguZGF0YTEpIH0KKyAgLmJzcyAgICAgICAgICAwIDoKKyAgeworICAgKiguZHluYnNzKQorICAgKiguYnNzKQorICAgKihDT01NT04pCisgICAvKiBBbGlnbiBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSAuYnNzIHNlY3Rpb24gb2NjdXBpZXMgc3BhY2UgdXAgdG8KKyAgICAgIF9lbmQuICBBbGlnbiBhZnRlciAuYnNzIHRvIGVuc3VyZSBjb3JyZWN0IGFsaWdubWVudCBldmVuIGlmIHRoZQorICAgICAgLmJzcyBzZWN0aW9uIGRpc2FwcGVhcnMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gaW5wdXQgc2VjdGlvbnMuCisgICAgICBGSVhNRTogV2h5IGRvIHdlIG5lZWQgaXQ/IFdoZW4gdGhlcmUgaXMgbm8gLmJzcyBzZWN0aW9uLCB3ZSBkb24ndAorICAgICAgcGFkIHRoZSAuZGF0YSBzZWN0aW9uLiAgKi8KKyAgfQorICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAgICAgICAgICAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyICAgICAgIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAgICAgMCA6IHsgKiguc3RhYi5leGNsKSB9CisgIC5zdGFiLmV4Y2xzdHIgIDAgOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAuc3RhYi5pbmRleCAgICAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisgIC5zdGFiLmluZGV4c3RyIDAgOiB7ICooLnN0YWIuaW5kZXhzdHIpIH0KKyAgLmNvbW1lbnQgICAgICAgMCA6IHsgKiguY29tbWVudCkgfQorICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KKyAgICAgU3ltYm9scyBpbiB0aGUgRFdBUkYgZGVidWdnaW5nIHNlY3Rpb25zIGFyZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nCisgICAgIG9mIHRoZSBzZWN0aW9uIHNvIHdlIGJlZ2luIHRoZW0gYXQgMC4gICovCisgIC8qIERXQVJGIDEgKi8KKyAgLmRlYnVnICAgICAgICAgIDAgOiB7ICooLmRlYnVnKSB9CisgIC5saW5lICAgICAgICAgICAwIDogeyAqKC5saW5lKSB9CisgIC8qIEdOVSBEV0FSRiAxIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3NyY2luZm8gIDAgOiB7ICooLmRlYnVnX3NyY2luZm8pIH0KKyAgLmRlYnVnX3NmbmFtZXMgIDAgOiB7ICooLmRlYnVnX3NmbmFtZXMpIH0KKyAgLyogRFdBUkYgMS4xIGFuZCBEV0FSRiAyICovCisgIC5kZWJ1Z19hcmFuZ2VzICAwIDogeyAqKC5kZWJ1Z19hcmFuZ2VzKSB9CisgIC5kZWJ1Z19wdWJuYW1lcyAwIDogeyAqKC5kZWJ1Z19wdWJuYW1lcykgfQorICAvKiBEV0FSRiAyICovCisgIC5kZWJ1Z19pbmZvICAgICAwIDogeyAqKC5kZWJ1Z19pbmZvKSB9CisgIC5kZWJ1Z19hYmJyZXYgICAwIDogeyAqKC5kZWJ1Z19hYmJyZXYpIH0KKyAgLmRlYnVnX2xpbmUgICAgIDAgOiB7ICooLmRlYnVnX2xpbmUpIH0KKyAgLmRlYnVnX2ZyYW1lICAgIDAgOiB7ICooLmRlYnVnX2ZyYW1lKSB9CisgIC5kZWJ1Z19zdHIgICAgICAwIDogeyAqKC5kZWJ1Z19zdHIpIH0KKyAgLmRlYnVnX2xvYyAgICAgIDAgOiB7ICooLmRlYnVnX2xvYykgfQorICAuZGVidWdfbWFjaW5mbyAgMCA6IHsgKiguZGVidWdfbWFjaW5mbykgfQorICAvKiBTR0kvTUlQUyBEV0FSRiAyIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3dlYWtuYW1lcyAwIDogeyAqKC5kZWJ1Z193ZWFrbmFtZXMpIH0KKyAgLmRlYnVnX2Z1bmNuYW1lcyAwIDogeyAqKC5kZWJ1Z19mdW5jbmFtZXMpIH0KKyAgLmRlYnVnX3R5cGVuYW1lcyAwIDogeyAqKC5kZWJ1Z190eXBlbmFtZXMpIH0KKyAgLmRlYnVnX3Zhcm5hbWVzICAwIDogeyAqKC5kZWJ1Z192YXJuYW1lcykgfQorICAvKiBEV0FSRiAzICovCisgIC5kZWJ1Z19wdWJ0eXBlcyAwIDogeyAqKC5kZWJ1Z19wdWJ0eXBlcykgfQorICAuZGVidWdfcmFuZ2VzICAgMCA6IHsgKiguZGVidWdfcmFuZ2VzKSB9CisgIC5nbnUuYXR0cmlidXRlcyAwIDogeyBLRUVQICgqKC5nbnUuYXR0cmlidXRlcykpIH0KKyAgLm5vdGUuZ251LmFybS5pZGVudCAwIDogeyBLRUVQICgqKC5ub3RlLmdudS5hcm0uaWRlbnQpKSB9Cit9CmRpZmYgLS1naXQgYS9saWIvbGRzY3JpcHRzL2FybWVsZl9saW51eF9lYWJpLnh3IGIvbGliL2xkc2NyaXB0cy9hcm1lbGZfbGludXhfZWFiaS54dwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGNiODg3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2xkc2NyaXB0cy9hcm1lbGZfbGludXhfZWFiaS54dwpAQCAtMCwwICsxLDIyNyBAQAorLyogU2NyaXB0IGZvciAteiBjb21icmVsb2MgLXogbm93IC16IHJlbHJvOiBjb21iaW5lIGFuZCBzb3J0IHJlbG9jIHNlY3Rpb25zICovCitPVVRQVVRfRk9STUFUKCJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItYmlnYXJtIiwKKwkgICAgICAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQVJDSF9ESVIoIj0vdXNyL2xvY2FsL2xpYiIpOyBTRUFSQ0hfRElSKCI9L2xpYiIpOyBTRUFSQ0hfRElSKCI9L3Vzci9saWIiKTsKK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICBQUk9WSURFIChfX2V4ZWN1dGFibGVfc3RhcnQgPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAweDAwMDA4MDAwKSk7IC4gPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAweDAwMDA4MDAwKSArIFNJWkVPRl9IRUFERVJTOworICAuaW50ZXJwICAgICAgICAgOiB7ICooLmludGVycCkgfQorICAubm90ZS5nbnUuYnVpbGQtaWQgOiB7ICooLm5vdGUuZ251LmJ1aWxkLWlkKSB9CisgIC5oYXNoICAgICAgICAgICA6IHsgKiguaGFzaCkgfQorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CisgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CisgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CisgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KKyAgLmdudS52ZXJzaW9uX2QgIDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CisgIC5nbnUudmVyc2lvbl9yICA6IHsgKiguZ251LnZlcnNpb25fcikgfQorICAucmVsLmR5biAgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbC5pbml0KQorICAgICAgKigucmVsLnRleHQgLnJlbC50ZXh0LiogLnJlbC5nbnUubGlua29uY2UudC4qKQorICAgICAgKigucmVsLmZpbmkpCisgICAgICAqKC5yZWwucm9kYXRhIC5yZWwucm9kYXRhLiogLnJlbC5nbnUubGlua29uY2Uuci4qKQorICAgICAgKigucmVsLmRhdGEucmVsLnJvKiAucmVsLmdudS5saW5rb25jZS5kLnJlbC5yby4qKQorICAgICAgKigucmVsLmRhdGEgLnJlbC5kYXRhLiogLnJlbC5nbnUubGlua29uY2UuZC4qKQorICAgICAgKigucmVsLnRkYXRhIC5yZWwudGRhdGEuKiAucmVsLmdudS5saW5rb25jZS50ZC4qKQorICAgICAgKigucmVsLnRic3MgLnJlbC50YnNzLiogLnJlbC5nbnUubGlua29uY2UudGIuKikKKyAgICAgICooLnJlbC5jdG9ycykKKyAgICAgICooLnJlbC5kdG9ycykKKyAgICAgICooLnJlbC5nb3QpCisgICAgICAqKC5yZWwuYnNzIC5yZWwuYnNzLiogLnJlbC5nbnUubGlua29uY2UuYi4qKQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgICooLnJlbC5pcGx0KQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfZW5kID0gLik7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9lbmQgPSAuKTsKKyAgICB9CisgIC5yZWxhLmR5biAgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5pbml0KQorICAgICAgKigucmVsYS50ZXh0IC5yZWxhLnRleHQuKiAucmVsYS5nbnUubGlua29uY2UudC4qKQorICAgICAgKigucmVsYS5maW5pKQorICAgICAgKigucmVsYS5yb2RhdGEgLnJlbGEucm9kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnIuKikKKyAgICAgICooLnJlbGEuZGF0YSAucmVsYS5kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLmQuKikKKyAgICAgICooLnJlbGEudGRhdGEgLnJlbGEudGRhdGEuKiAucmVsYS5nbnUubGlua29uY2UudGQuKikKKyAgICAgICooLnJlbGEudGJzcyAucmVsYS50YnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLnRiLiopCisgICAgICAqKC5yZWxhLmN0b3JzKQorICAgICAgKigucmVsYS5kdG9ycykKKyAgICAgICooLnJlbGEuZ290KQorICAgICAgKigucmVsYS5ic3MgLnJlbGEuYnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLmIuKikKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbF9pcGx0X3N0YXJ0ID0gLik7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9lbmQgPSAuKTsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9zdGFydCA9IC4pOworICAgICAgKigucmVsYS5pcGx0KQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X2VuZCA9IC4pOworICAgIH0KKyAgLnJlbC5wbHQgICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWwucGx0KQorICAgIH0KKyAgLnJlbGEucGx0ICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLnBsdCkKKyAgICB9CisgIC5pbml0ICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKC5pbml0KSkKKyAgfSA9MAorICAucGx0ICAgICAgICAgICAgOiB7ICooLnBsdCkgfQorICAuaXBsdCAgICAgICAgICAgOiB7ICooLmlwbHQpIH0KKyAgLnRleHQgICAgICAgICAgIDoKKyAgeworICAgICooLnRleHQudW5saWtlbHkgLnRleHQuKl91bmxpa2VseSkKKyAgICAqKC50ZXh0IC5zdHViIC50ZXh0LiogLmdudS5saW5rb25jZS50LiopCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgICAgKiguZ2x1ZV83dCkgKiguZ2x1ZV83KSAqKC52ZnAxMV92ZW5lZXIpICooLnY0X2J4KQorICB9ID0wCisgIC5maW5pICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKC5maW5pKSkKKyAgfSA9MAorICBQUk9WSURFIChfX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKF9ldGV4dCA9IC4pOworICBQUk9WSURFIChldGV4dCA9IC4pOworICAucm9kYXRhICAgICAgICAgOiB7ICooLnJvZGF0YSAucm9kYXRhLiogLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJvZGF0YTEgICAgICAgIDogeyAqKC5yb2RhdGExKSB9CisgIC5BUk0uZXh0YWIgICA6IHsgKiguQVJNLmV4dGFiKiAuZ251LmxpbmtvbmNlLmFybWV4dGFiLiopIH0KKyAgIF9fZXhpZHhfc3RhcnQgPSAuOworICAuQVJNLmV4aWR4ICAgOiB7ICooLkFSTS5leGlkeCogLmdudS5saW5rb25jZS5hcm1leGlkeC4qKSB9CisgICBfX2V4aWR4X2VuZCA9IC47CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAuID0gQUxJR04gKENPTlNUQU5UIChNQVhQQUdFU0laRSkpIC0gKChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gLikgJiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSAtIDEpKTsgLiA9IERBVEFfU0VHTUVOVF9BTElHTiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSwgQ09OU1RBTlQgKENPTU1PTlBBR0VTSVpFKSk7CisgIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyAgKi8KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9SVyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9SVyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCSAgOiB7ICooLnRkYXRhIC50ZGF0YS4qIC5nbnUubGlua29uY2UudGQuKikgfQorICAudGJzcwkJICA6IHsgKigudGJzcyAudGJzcy4qIC5nbnUubGlua29uY2UudGIuKikgKigudGNvbW1vbikgfQorICAucHJlaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmluaXRfYXJyYXkgICAgIDoKKyAgeworICAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgIEtFRVAgKCooLmluaXRfYXJyYXkpKQorICAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X2VuZCA9IC4pOworICB9CisgIC5maW5pX2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgICAgS0VFUCAoKihTT1JUKC5maW5pX2FycmF5LiopKSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X2VuZCA9IC4pOworICB9CisgIC5jdG9ycyAgICAgICAgICA6CisgIHsKKyAgICAvKiBnY2MgdXNlcyBjcnRiZWdpbi5vIHRvIGZpbmQgdGhlIHN0YXJ0IG9mCisgICAgICAgdGhlIGNvbnN0cnVjdG9ycywgc28gd2UgbWFrZSBzdXJlIGl0IGlzCisgICAgICAgZmlyc3QuICBCZWNhdXNlIHRoaXMgaXMgYSB3aWxkY2FyZCwgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciBpZiB0aGUgdXNlciBkb2VzIG5vdAorICAgICAgIGFjdHVhbGx5IGxpbmsgYWdhaW5zdCBjcnRiZWdpbi5vOyB0aGUKKyAgICAgICBsaW5rZXIgd29uJ3QgbG9vayBmb3IgYSBmaWxlIHRvIG1hdGNoIGEKKyAgICAgICB3aWxkY2FyZC4gIFRoZSB3aWxkY2FyZCBhbHNvIG1lYW5zIHRoYXQgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciB3aGljaCBkaXJlY3RvcnkgY3J0YmVnaW4ubworICAgICAgIGlzIGluLiAgKi8KKyAgICBLRUVQICgqY3J0YmVnaW4ubyguY3RvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguY3RvcnMpKQorICAgIC8qIFdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGUgLmN0b3Igc2VjdGlvbiBmcm9tCisgICAgICAgdGhlIGNydGVuZC5vIGZpbGUgdW50aWwgYWZ0ZXIgdGhlIHNvcnRlZCBjdG9ycy4KKyAgICAgICBUaGUgLmN0b3Igc2VjdGlvbiBmcm9tIHRoZSBjcnRlbmQgZmlsZSBjb250YWlucyB0aGUKKyAgICAgICBlbmQgb2YgY3RvcnMgbWFya2VyIGFuZCBpdCBtdXN0IGJlIGxhc3QgKi8KKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuY3RvcnMpKQorICAgIEtFRVAgKCooU09SVCguY3RvcnMuKikpKQorICAgIEtFRVAgKCooLmN0b3JzKSkKKyAgfQorICAuZHRvcnMgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmR0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmR0b3JzKSkKKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuZHRvcnMpKQorICAgIEtFRVAgKCooU09SVCguZHRvcnMuKikpKQorICAgIEtFRVAgKCooLmR0b3JzKSkKKyAgfQorICAuamNyICAgICAgICAgICAgOiB7IEtFRVAgKCooLmpjcikpIH0KKyAgLmRhdGEucmVsLnJvIDogeyAqKC5kYXRhLnJlbC5yby5sb2NhbCogLmdudS5saW5rb25jZS5kLnJlbC5yby5sb2NhbC4qKSAqKC5kYXRhLnJlbC5ybyogLmdudS5saW5rb25jZS5kLnJlbC5yby4qKSB9CisgIC5keW5hbWljICAgICAgICA6IHsgKiguZHluYW1pYykgfQorICAuZ290ICAgICAgICAgICAgOiB7ICooLmdvdC5wbHQpICooLmlnb3QucGx0KSAqKC5nb3QpICooLmlnb3QpIH0KKyAgLiA9IERBVEFfU0VHTUVOVF9SRUxST19FTkQgKDAsIC4pOworICAuZGF0YSAgICAgICAgICAgOgorICB7CisgICAgUFJPVklERSAoX19kYXRhX3N0YXJ0ID0gLik7CisgICAgKiguZGF0YSAuZGF0YS4qIC5nbnUubGlua29uY2UuZC4qKQorICAgIFNPUlQoQ09OU1RSVUNUT1JTKQorICB9CisgIC5kYXRhMSAgICAgICAgICA6IHsgKiguZGF0YTEpIH0KKyAgX2VkYXRhID0gLjsgUFJPVklERSAoZWRhdGEgPSAuKTsKKyAgX19ic3Nfc3RhcnQgPSAuOworICBfX2Jzc19zdGFydF9fID0gLjsKKyAgLmJzcyAgICAgICAgICAgIDoKKyAgeworICAgKiguZHluYnNzKQorICAgKiguYnNzIC5ic3MuKiAuZ251LmxpbmtvbmNlLmIuKikKKyAgICooQ09NTU9OKQorICAgLyogQWxpZ24gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgLmJzcyBzZWN0aW9uIG9jY3VwaWVzIHNwYWNlIHVwIHRvCisgICAgICBfZW5kLiAgQWxpZ24gYWZ0ZXIgLmJzcyB0byBlbnN1cmUgY29ycmVjdCBhbGlnbm1lbnQgZXZlbiBpZiB0aGUKKyAgICAgIC5ic3Mgc2VjdGlvbiBkaXNhcHBlYXJzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGlucHV0IHNlY3Rpb25zLgorICAgICAgRklYTUU6IFdoeSBkbyB3ZSBuZWVkIGl0PyBXaGVuIHRoZXJlIGlzIG5vIC5ic3Mgc2VjdGlvbiwgd2UgZG9uJ3QKKyAgICAgIHBhZCB0aGUgLmRhdGEgc2VjdGlvbi4gICovCisgICAuID0gQUxJR04oLiAhPSAwID8gMzIgLyA4IDogMSk7CisgIH0KKyAgX2Jzc19lbmRfXyA9IC4gOyBfX2Jzc19lbmRfXyA9IC4gOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIF9fZW5kX18gPSAuIDsKKyAgX2VuZCA9IC47IFBST1ZJREUgKGVuZCA9IC4pOworICAuID0gREFUQV9TRUdNRU5UX0VORCAoLik7CisgIC8qIFN0YWJzIGRlYnVnZ2luZyBzZWN0aW9ucy4gICovCisgIC5zdGFiICAgICAgICAgIDAgOiB7ICooLnN0YWIpIH0KKyAgLnN0YWJzdHIgICAgICAgMCA6IHsgKiguc3RhYnN0cikgfQorICAuc3RhYi5leGNsICAgICAwIDogeyAqKC5zdGFiLmV4Y2wpIH0KKyAgLnN0YWIuZXhjbHN0ciAgMCA6IHsgKiguc3RhYi5leGNsc3RyKSB9CisgIC5zdGFiLmluZGV4ICAgIDAgOiB7ICooLnN0YWIuaW5kZXgpIH0KKyAgLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQorICAuY29tbWVudCAgICAgICAwIDogeyAqKC5jb21tZW50KSB9CisgIC8qIERXQVJGIGRlYnVnIHNlY3Rpb25zLgorICAgICBTeW1ib2xzIGluIHRoZSBEV0FSRiBkZWJ1Z2dpbmcgc2VjdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcKKyAgICAgb2YgdGhlIHNlY3Rpb24gc28gd2UgYmVnaW4gdGhlbSBhdCAwLiAgKi8KKyAgLyogRFdBUkYgMSAqLworICAuZGVidWcgICAgICAgICAgMCA6IHsgKiguZGVidWcpIH0KKyAgLmxpbmUgICAgICAgICAgIDAgOiB7ICooLmxpbmUpIH0KKyAgLyogR05VIERXQVJGIDEgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfc3JjaW5mbyAgMCA6IHsgKiguZGVidWdfc3JjaW5mbykgfQorICAuZGVidWdfc2ZuYW1lcyAgMCA6IHsgKiguZGVidWdfc2ZuYW1lcykgfQorICAvKiBEV0FSRiAxLjEgYW5kIERXQVJGIDIgKi8KKyAgLmRlYnVnX2FyYW5nZXMgIDAgOiB7ICooLmRlYnVnX2FyYW5nZXMpIH0KKyAgLmRlYnVnX3B1Ym5hbWVzIDAgOiB7ICooLmRlYnVnX3B1Ym5hbWVzKSB9CisgIC8qIERXQVJGIDIgKi8KKyAgLmRlYnVnX2luZm8gICAgIDAgOiB7ICooLmRlYnVnX2luZm8gLmdudS5saW5rb25jZS53aS4qKSB9CisgIC5kZWJ1Z19hYmJyZXYgICAwIDogeyAqKC5kZWJ1Z19hYmJyZXYpIH0KKyAgLmRlYnVnX2xpbmUgICAgIDAgOiB7ICooLmRlYnVnX2xpbmUpIH0KKyAgLmRlYnVnX2ZyYW1lICAgIDAgOiB7ICooLmRlYnVnX2ZyYW1lKSB9CisgIC5kZWJ1Z19zdHIgICAgICAwIDogeyAqKC5kZWJ1Z19zdHIpIH0KKyAgLmRlYnVnX2xvYyAgICAgIDAgOiB7ICooLmRlYnVnX2xvYykgfQorICAuZGVidWdfbWFjaW5mbyAgMCA6IHsgKiguZGVidWdfbWFjaW5mbykgfQorICAvKiBTR0kvTUlQUyBEV0FSRiAyIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3dlYWtuYW1lcyAwIDogeyAqKC5kZWJ1Z193ZWFrbmFtZXMpIH0KKyAgLmRlYnVnX2Z1bmNuYW1lcyAwIDogeyAqKC5kZWJ1Z19mdW5jbmFtZXMpIH0KKyAgLmRlYnVnX3R5cGVuYW1lcyAwIDogeyAqKC5kZWJ1Z190eXBlbmFtZXMpIH0KKyAgLmRlYnVnX3Zhcm5hbWVzICAwIDogeyAqKC5kZWJ1Z192YXJuYW1lcykgfQorICAvKiBEV0FSRiAzICovCisgIC5kZWJ1Z19wdWJ0eXBlcyAwIDogeyAqKC5kZWJ1Z19wdWJ0eXBlcykgfQorICAuZGVidWdfcmFuZ2VzICAgMCA6IHsgKiguZGVidWdfcmFuZ2VzKSB9CisgIC5nbnUuYXR0cmlidXRlcyAwIDogeyBLRUVQICgqKC5nbnUuYXR0cmlidXRlcykpIH0KKyAgLm5vdGUuZ251LmFybS5pZGVudCAwIDogeyBLRUVQICgqKC5ub3RlLmdudS5hcm0uaWRlbnQpKSB9CisgIC9ESVNDQVJELyA6IHsgKigubm90ZS5HTlUtc3RhY2spICooLmdudV9kZWJ1Z2xpbmspICooLmdudS5sdG9fKikgfQorfQpkaWZmIC0tZ2l0IGEvbGliL2xkc2NyaXB0cy9hcm1lbGZiX2xpbnV4X2VhYmkueCBiL2xpYi9sZHNjcmlwdHMvYXJtZWxmYl9saW51eF9lYWJpLngKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZmOGNhOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9sZHNjcmlwdHMvYXJtZWxmYl9saW51eF9lYWJpLngKQEAgLTAsMCArMSwyMjQgQEAKKy8qIERlZmF1bHQgbGlua2VyIHNjcmlwdCwgZm9yIG5vcm1hbCBleGVjdXRhYmxlcyAqLworT1VUUFVUX0ZPUk1BVCgiZWxmMzItYmlnYXJtIiwgImVsZjMyLWJpZ2FybSIsCisJICAgICAgImVsZjMyLWxpdHRsZWFybSIpCitPVVRQVVRfQVJDSChhcm0pCitFTlRSWShfc3RhcnQpCitTRUFSQ0hfRElSKCI9L3Vzci9sb2NhbC9saWIiKTsgU0VBUkNIX0RJUigiPS9saWIiKTsgU0VBUkNIX0RJUigiPS91c3IvbGliIik7CitTRUNUSU9OUworeworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgUFJPVklERSAoX19leGVjdXRhYmxlX3N0YXJ0ID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHgwMDAwODAwMCkpOyAuID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHgwMDAwODAwMCkgKyBTSVpFT0ZfSEVBREVSUzsKKyAgLmludGVycCAgICAgICAgIDogeyAqKC5pbnRlcnApIH0KKyAgLm5vdGUuZ251LmJ1aWxkLWlkIDogeyAqKC5ub3RlLmdudS5idWlsZC1pZCkgfQorICAuaGFzaCAgICAgICAgICAgOiB7ICooLmhhc2gpIH0KKyAgLmdudS5oYXNoICAgICAgIDogeyAqKC5nbnUuaGFzaCkgfQorICAuZHluc3ltICAgICAgICAgOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyICAgICAgICAgOiB7ICooLmR5bnN0cikgfQorICAuZ251LnZlcnNpb24gICAgOiB7ICooLmdudS52ZXJzaW9uKSB9CisgIC5nbnUudmVyc2lvbl9kICA6IHsgKiguZ251LnZlcnNpb25fZCkgfQorICAuZ251LnZlcnNpb25fciAgOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KKyAgLnJlbC5pbml0ICAgICAgIDogeyAqKC5yZWwuaW5pdCkgfQorICAucmVsYS5pbml0ICAgICAgOiB7ICooLnJlbGEuaW5pdCkgfQorICAucmVsLnRleHQgICAgICAgOiB7ICooLnJlbC50ZXh0IC5yZWwudGV4dC4qIC5yZWwuZ251LmxpbmtvbmNlLnQuKikgfQorICAucmVsYS50ZXh0ICAgICAgOiB7ICooLnJlbGEudGV4dCAucmVsYS50ZXh0LiogLnJlbGEuZ251LmxpbmtvbmNlLnQuKikgfQorICAucmVsLmZpbmkgICAgICAgOiB7ICooLnJlbC5maW5pKSB9CisgIC5yZWxhLmZpbmkgICAgICA6IHsgKigucmVsYS5maW5pKSB9CisgIC5yZWwucm9kYXRhICAgICA6IHsgKigucmVsLnJvZGF0YSAucmVsLnJvZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnIuKikgfQorICAucmVsYS5yb2RhdGEgICAgOiB7ICooLnJlbGEucm9kYXRhIC5yZWxhLnJvZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJlbC5kYXRhLnJlbC5ybyAgIDogeyAqKC5yZWwuZGF0YS5yZWwucm8qIC5yZWwuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLnJlbGEuZGF0YS5yZWwucm8gICA6IHsgKigucmVsYS5kYXRhLnJlbC5ybyogLnJlbGEuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLnJlbC5kYXRhICAgICAgIDogeyAqKC5yZWwuZGF0YSAucmVsLmRhdGEuKiAucmVsLmdudS5saW5rb25jZS5kLiopIH0KKyAgLnJlbGEuZGF0YSAgICAgIDogeyAqKC5yZWxhLmRhdGEgLnJlbGEuZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5kLiopIH0KKyAgLnJlbC50ZGF0YQkgIDogeyAqKC5yZWwudGRhdGEgLnJlbC50ZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnJlbGEudGRhdGEJICA6IHsgKigucmVsYS50ZGF0YSAucmVsYS50ZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC5yZWwudGJzcwkgIDogeyAqKC5yZWwudGJzcyAucmVsLnRic3MuKiAucmVsLmdudS5saW5rb25jZS50Yi4qKSB9CisgIC5yZWxhLnRic3MJICA6IHsgKigucmVsYS50YnNzIC5yZWxhLnRic3MuKiAucmVsYS5nbnUubGlua29uY2UudGIuKikgfQorICAucmVsLmN0b3JzICAgICAgOiB7ICooLnJlbC5jdG9ycykgfQorICAucmVsYS5jdG9ycyAgICAgOiB7ICooLnJlbGEuY3RvcnMpIH0KKyAgLnJlbC5kdG9ycyAgICAgIDogeyAqKC5yZWwuZHRvcnMpIH0KKyAgLnJlbGEuZHRvcnMgICAgIDogeyAqKC5yZWxhLmR0b3JzKSB9CisgIC5yZWwuZ290ICAgICAgICA6IHsgKigucmVsLmdvdCkgfQorICAucmVsYS5nb3QgICAgICAgOiB7ICooLnJlbGEuZ290KSB9CisgIC5yZWwuYnNzICAgICAgICA6IHsgKigucmVsLmJzcyAucmVsLmJzcy4qIC5yZWwuZ251LmxpbmtvbmNlLmIuKikgfQorICAucmVsYS5ic3MgICAgICAgOiB7ICooLnJlbGEuYnNzIC5yZWxhLmJzcy4qIC5yZWxhLmdudS5saW5rb25jZS5iLiopIH0KKyAgLnJlbC5pcGx0ICAgICAgIDoKKyAgICB7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9zdGFydCA9IC4pOworICAgICAgKigucmVsLmlwbHQpCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9lbmQgPSAuKTsKKyAgICB9CisgIC5yZWxhLmlwbHQgICAgICA6CisgICAgeworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X3N0YXJ0ID0gLik7CisgICAgICAqKC5yZWxhLmlwbHQpCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfZW5kID0gLik7CisgICAgfQorICAucmVsLnBsdCAgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbC5wbHQpCisgICAgfQorICAucmVsYS5wbHQgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEucGx0KQorICAgIH0KKyAgLmluaXQgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooLmluaXQpKQorICB9ID0wCisgIC5wbHQgICAgICAgICAgICA6IHsgKigucGx0KSB9CisgIC5pcGx0ICAgICAgICAgICA6IHsgKiguaXBsdCkgfQorICAudGV4dCAgICAgICAgICAgOgorICB7CisgICAgKigudGV4dC51bmxpa2VseSAudGV4dC4qX3VubGlrZWx5KQorICAgICooLnRleHQgLnN0dWIgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKikKKyAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KKyAgICAqKC5nbnUud2FybmluZykKKyAgICAqKC5nbHVlXzd0KSAqKC5nbHVlXzcpICooLnZmcDExX3ZlbmVlcikgKigudjRfYngpCisgIH0gPTAKKyAgLmZpbmkgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooLmZpbmkpKQorICB9ID0wCisgIFBST1ZJREUgKF9fZXRleHQgPSAuKTsKKyAgUFJPVklERSAoX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgIC5yb2RhdGEgICAgICAgICA6IHsgKigucm9kYXRhIC5yb2RhdGEuKiAuZ251LmxpbmtvbmNlLnIuKikgfQorICAucm9kYXRhMSAgICAgICAgOiB7ICooLnJvZGF0YTEpIH0KKyAgLkFSTS5leHRhYiAgIDogeyAqKC5BUk0uZXh0YWIqIC5nbnUubGlua29uY2UuYXJtZXh0YWIuKikgfQorICAgX19leGlkeF9zdGFydCA9IC47CisgIC5BUk0uZXhpZHggICA6IHsgKiguQVJNLmV4aWR4KiAuZ251LmxpbmtvbmNlLmFybWV4aWR4LiopIH0KKyAgIF9fZXhpZHhfZW5kID0gLjsKKyAgLmVoX2ZyYW1lX2hkciA6IHsgKiguZWhfZnJhbWVfaGRyKSB9CisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUk8geyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogQWRqdXN0IHRoZSBhZGRyZXNzIGZvciB0aGUgZGF0YSBzZWdtZW50LiAgV2Ugd2FudCB0byBhZGp1c3QgdXAgdG8KKyAgICAgdGhlIHNhbWUgYWRkcmVzcyB3aXRoaW4gdGhlIHBhZ2Ugb24gdGhlIG5leHQgcGFnZSB1cC4gICovCisgIC4gPSBBTElHTiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSkgLSAoKENPTlNUQU5UIChNQVhQQUdFU0laRSkgLSAuKSAmIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gMSkpOyAuID0gREFUQV9TRUdNRU5UX0FMSUdOIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpLCBDT05TVEFOVCAoQ09NTU9OUEFHRVNJWkUpKTsKKyAgLyogRXhjZXB0aW9uIGhhbmRsaW5nICAqLworICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JXIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JXIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIFRocmVhZCBMb2NhbCBTdG9yYWdlIHNlY3Rpb25zICAqLworICAudGRhdGEJICA6IHsgKigudGRhdGEgLnRkYXRhLiogLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC50YnNzCQkgIDogeyAqKC50YnNzIC50YnNzLiogLmdudS5saW5rb25jZS50Yi4qKSAqKC50Y29tbW9uKSB9CisgIC5wcmVpbml0X2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICAgS0VFUCAoKihTT1JUKC5pbml0X2FycmF5LiopKSkKKyAgICAgS0VFUCAoKiguaW5pdF9hcnJheSkpCisgICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmZpbmlfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKC5maW5pX2FycmF5KSkKKyAgICBLRUVQICgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQorICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmN0b3JzICAgICAgICAgIDoKKyAgeworICAgIC8qIGdjYyB1c2VzIGNydGJlZ2luLm8gdG8gZmluZCB0aGUgc3RhcnQgb2YKKyAgICAgICB0aGUgY29uc3RydWN0b3JzLCBzbyB3ZSBtYWtlIHN1cmUgaXQgaXMKKyAgICAgICBmaXJzdC4gIEJlY2F1c2UgdGhpcyBpcyBhIHdpbGRjYXJkLCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSB1c2VyIGRvZXMgbm90CisgICAgICAgYWN0dWFsbHkgbGluayBhZ2FpbnN0IGNydGJlZ2luLm87IHRoZQorICAgICAgIGxpbmtlciB3b24ndCBsb29rIGZvciBhIGZpbGUgdG8gbWF0Y2ggYQorICAgICAgIHdpbGRjYXJkLiAgVGhlIHdpbGRjYXJkIGFsc28gbWVhbnMgdGhhdCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGRpcmVjdG9yeSBjcnRiZWdpbi5vCisgICAgICAgaXMgaW4uICAqLworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5jdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5jdG9ycykpCisgICAgLyogV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSAuY3RvciBzZWN0aW9uIGZyb20KKyAgICAgICB0aGUgY3J0ZW5kLm8gZmlsZSB1bnRpbCBhZnRlciB0aGUgc29ydGVkIGN0b3JzLgorICAgICAgIFRoZSAuY3RvciBzZWN0aW9uIGZyb20gdGhlIGNydGVuZCBmaWxlIGNvbnRhaW5zIHRoZQorICAgICAgIGVuZCBvZiBjdG9ycyBtYXJrZXIgYW5kIGl0IG11c3QgYmUgbGFzdCAqLworICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5jdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5jdG9ycy4qKSkpCisgICAgS0VFUCAoKiguY3RvcnMpKQorICB9CisgIC5kdG9ycyAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqY3J0YmVnaW4ubyguZHRvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguZHRvcnMpKQorICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5kdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5kdG9ycy4qKSkpCisgICAgS0VFUCAoKiguZHRvcnMpKQorICB9CisgIC5qY3IgICAgICAgICAgICA6IHsgS0VFUCAoKiguamNyKSkgfQorICAuZGF0YS5yZWwucm8gOiB7ICooLmRhdGEucmVsLnJvLmxvY2FsKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLmxvY2FsLiopICooLmRhdGEucmVsLnJvKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLmR5bmFtaWMgICAgICAgIDogeyAqKC5keW5hbWljKSB9CisgIC4gPSBEQVRBX1NFR01FTlRfUkVMUk9fRU5EICgwLCAuKTsKKyAgLmdvdCAgICAgICAgICAgIDogeyAqKC5nb3QucGx0KSAqKC5pZ290LnBsdCkgKiguZ290KSAqKC5pZ290KSB9CisgIC5kYXRhICAgICAgICAgICA6CisgIHsKKyAgICBQUk9WSURFIChfX2RhdGFfc3RhcnQgPSAuKTsKKyAgICAqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisgICAgU09SVChDT05TVFJVQ1RPUlMpCisgIH0KKyAgLmRhdGExICAgICAgICAgIDogeyAqKC5kYXRhMSkgfQorICBfZWRhdGEgPSAuOyBQUk9WSURFIChlZGF0YSA9IC4pOworICBfX2Jzc19zdGFydCA9IC47CisgIF9fYnNzX3N0YXJ0X18gPSAuOworICAuYnNzICAgICAgICAgICAgOgorICB7CisgICAqKC5keW5ic3MpCisgICAqKC5ic3MgLmJzcy4qIC5nbnUubGlua29uY2UuYi4qKQorICAgKihDT01NT04pCisgICAvKiBBbGlnbiBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSAuYnNzIHNlY3Rpb24gb2NjdXBpZXMgc3BhY2UgdXAgdG8KKyAgICAgIF9lbmQuICBBbGlnbiBhZnRlciAuYnNzIHRvIGVuc3VyZSBjb3JyZWN0IGFsaWdubWVudCBldmVuIGlmIHRoZQorICAgICAgLmJzcyBzZWN0aW9uIGRpc2FwcGVhcnMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gaW5wdXQgc2VjdGlvbnMuCisgICAgICBGSVhNRTogV2h5IGRvIHdlIG5lZWQgaXQ/IFdoZW4gdGhlcmUgaXMgbm8gLmJzcyBzZWN0aW9uLCB3ZSBkb24ndAorICAgICAgcGFkIHRoZSAuZGF0YSBzZWN0aW9uLiAgKi8KKyAgIC4gPSBBTElHTiguICE9IDAgPyAzMiAvIDggOiAxKTsKKyAgfQorICBfYnNzX2VuZF9fID0gLiA7IF9fYnNzX2VuZF9fID0gLiA7CisgIC4gPSBBTElHTigzMiAvIDgpOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgX19lbmRfXyA9IC4gOworICBfZW5kID0gLjsgUFJPVklERSAoZW5kID0gLik7CisgIC4gPSBEQVRBX1NFR01FTlRfRU5EICguKTsKKyAgLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KKyAgLnN0YWIgICAgICAgICAgMCA6IHsgKiguc3RhYikgfQorICAuc3RhYnN0ciAgICAgICAwIDogeyAqKC5zdGFic3RyKSB9CisgIC5zdGFiLmV4Y2wgICAgIDAgOiB7ICooLnN0YWIuZXhjbCkgfQorICAuc3RhYi5leGNsc3RyICAwIDogeyAqKC5zdGFiLmV4Y2xzdHIpIH0KKyAgLnN0YWIuaW5kZXggICAgMCA6IHsgKiguc3RhYi5pbmRleCkgfQorICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9CisgIC5jb21tZW50ICAgICAgIDAgOiB7ICooLmNvbW1lbnQpIH0KKyAgLyogRFdBUkYgZGVidWcgc2VjdGlvbnMuCisgICAgIFN5bWJvbHMgaW4gdGhlIERXQVJGIGRlYnVnZ2luZyBzZWN0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc2VjdGlvbiBzbyB3ZSBiZWdpbiB0aGVtIGF0IDAuICAqLworICAvKiBEV0FSRiAxICovCisgIC5kZWJ1ZyAgICAgICAgICAwIDogeyAqKC5kZWJ1ZykgfQorICAubGluZSAgICAgICAgICAgMCA6IHsgKigubGluZSkgfQorICAvKiBHTlUgRFdBUkYgMSBleHRlbnNpb25zICovCisgIC5kZWJ1Z19zcmNpbmZvICAwIDogeyAqKC5kZWJ1Z19zcmNpbmZvKSB9CisgIC5kZWJ1Z19zZm5hbWVzICAwIDogeyAqKC5kZWJ1Z19zZm5hbWVzKSB9CisgIC8qIERXQVJGIDEuMSBhbmQgRFdBUkYgMiAqLworICAuZGVidWdfYXJhbmdlcyAgMCA6IHsgKiguZGVidWdfYXJhbmdlcykgfQorICAuZGVidWdfcHVibmFtZXMgMCA6IHsgKiguZGVidWdfcHVibmFtZXMpIH0KKyAgLyogRFdBUkYgMiAqLworICAuZGVidWdfaW5mbyAgICAgMCA6IHsgKiguZGVidWdfaW5mbyAuZ251LmxpbmtvbmNlLndpLiopIH0KKyAgLmRlYnVnX2FiYnJldiAgIDAgOiB7ICooLmRlYnVnX2FiYnJldikgfQorICAuZGVidWdfbGluZSAgICAgMCA6IHsgKiguZGVidWdfbGluZSkgfQorICAuZGVidWdfZnJhbWUgICAgMCA6IHsgKiguZGVidWdfZnJhbWUpIH0KKyAgLmRlYnVnX3N0ciAgICAgIDAgOiB7ICooLmRlYnVnX3N0cikgfQorICAuZGVidWdfbG9jICAgICAgMCA6IHsgKiguZGVidWdfbG9jKSB9CisgIC5kZWJ1Z19tYWNpbmZvICAwIDogeyAqKC5kZWJ1Z19tYWNpbmZvKSB9CisgIC8qIFNHSS9NSVBTIERXQVJGIDIgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfd2Vha25hbWVzIDAgOiB7ICooLmRlYnVnX3dlYWtuYW1lcykgfQorICAuZGVidWdfZnVuY25hbWVzIDAgOiB7ICooLmRlYnVnX2Z1bmNuYW1lcykgfQorICAuZGVidWdfdHlwZW5hbWVzIDAgOiB7ICooLmRlYnVnX3R5cGVuYW1lcykgfQorICAuZGVidWdfdmFybmFtZXMgIDAgOiB7ICooLmRlYnVnX3Zhcm5hbWVzKSB9CisgIC8qIERXQVJGIDMgKi8KKyAgLmRlYnVnX3B1YnR5cGVzIDAgOiB7ICooLmRlYnVnX3B1YnR5cGVzKSB9CisgIC5kZWJ1Z19yYW5nZXMgICAwIDogeyAqKC5kZWJ1Z19yYW5nZXMpIH0KKyAgLmdudS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLmdudS5hdHRyaWJ1dGVzKSkgfQorICAubm90ZS5nbnUuYXJtLmlkZW50IDAgOiB7IEtFRVAgKCooLm5vdGUuZ251LmFybS5pZGVudCkpIH0KKyAgL0RJU0NBUkQvIDogeyAqKC5ub3RlLkdOVS1zdGFjaykgKiguZ251X2RlYnVnbGluaykgKiguZ251Lmx0b18qKSB9Cit9CmRpZmYgLS1naXQgYS9saWIvbGRzY3JpcHRzL2FybWVsZmJfbGludXhfZWFiaS54Ym4gYi9saWIvbGRzY3JpcHRzL2FybWVsZmJfbGludXhfZWFiaS54Ym4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThkZDcxZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9sZHNjcmlwdHMvYXJtZWxmYl9saW51eF9lYWJpLnhibgpAQCAtMCwwICsxLDIyMiBAQAorLyogU2NyaXB0IGZvciAtTjogbWl4IHRleHQgYW5kIGRhdGEgb24gc2FtZSBwYWdlOyBkb24ndCBhbGlnbiBkYXRhICovCitPVVRQVVRfRk9STUFUKCJlbGYzMi1iaWdhcm0iLCAiZWxmMzItYmlnYXJtIiwKKwkgICAgICAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQVJDSF9ESVIoIj0vdXNyL2xvY2FsL2xpYiIpOyBTRUFSQ0hfRElSKCI9L2xpYiIpOyBTRUFSQ0hfRElSKCI9L3Vzci9saWIiKTsKK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICBQUk9WSURFIChfX2V4ZWN1dGFibGVfc3RhcnQgPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAweDAwMDA4MDAwKSk7IC4gPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAweDAwMDA4MDAwKSArIFNJWkVPRl9IRUFERVJTOworICAuaW50ZXJwICAgICAgICAgOiB7ICooLmludGVycCkgfQorICAubm90ZS5nbnUuYnVpbGQtaWQgOiB7ICooLm5vdGUuZ251LmJ1aWxkLWlkKSB9CisgIC5oYXNoICAgICAgICAgICA6IHsgKiguaGFzaCkgfQorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CisgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CisgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CisgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KKyAgLmdudS52ZXJzaW9uX2QgIDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CisgIC5nbnUudmVyc2lvbl9yICA6IHsgKiguZ251LnZlcnNpb25fcikgfQorICAucmVsLmluaXQgICAgICAgOiB7ICooLnJlbC5pbml0KSB9CisgIC5yZWxhLmluaXQgICAgICA6IHsgKigucmVsYS5pbml0KSB9CisgIC5yZWwudGV4dCAgICAgICA6IHsgKigucmVsLnRleHQgLnJlbC50ZXh0LiogLnJlbC5nbnUubGlua29uY2UudC4qKSB9CisgIC5yZWxhLnRleHQgICAgICA6IHsgKigucmVsYS50ZXh0IC5yZWxhLnRleHQuKiAucmVsYS5nbnUubGlua29uY2UudC4qKSB9CisgIC5yZWwuZmluaSAgICAgICA6IHsgKigucmVsLmZpbmkpIH0KKyAgLnJlbGEuZmluaSAgICAgIDogeyAqKC5yZWxhLmZpbmkpIH0KKyAgLnJlbC5yb2RhdGEgICAgIDogeyAqKC5yZWwucm9kYXRhIC5yZWwucm9kYXRhLiogLnJlbC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yZWxhLnJvZGF0YSAgICA6IHsgKigucmVsYS5yb2RhdGEgLnJlbGEucm9kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnIuKikgfQorICAucmVsLmRhdGEucmVsLnJvICAgOiB7ICooLnJlbC5kYXRhLnJlbC5ybyogLnJlbC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAucmVsYS5kYXRhLnJlbC5ybyAgIDogeyAqKC5yZWxhLmRhdGEucmVsLnJvKiAucmVsYS5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAucmVsLmRhdGEgICAgICAgOiB7ICooLnJlbC5kYXRhIC5yZWwuZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLmQuKikgfQorICAucmVsYS5kYXRhICAgICAgOiB7ICooLnJlbGEuZGF0YSAucmVsYS5kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLmQuKikgfQorICAucmVsLnRkYXRhCSAgOiB7ICooLnJlbC50ZGF0YSAucmVsLnRkYXRhLiogLnJlbC5nbnUubGlua29uY2UudGQuKikgfQorICAucmVsYS50ZGF0YQkgIDogeyAqKC5yZWxhLnRkYXRhIC5yZWxhLnRkYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnJlbC50YnNzCSAgOiB7ICooLnJlbC50YnNzIC5yZWwudGJzcy4qIC5yZWwuZ251LmxpbmtvbmNlLnRiLiopIH0KKyAgLnJlbGEudGJzcwkgIDogeyAqKC5yZWxhLnRic3MgLnJlbGEudGJzcy4qIC5yZWxhLmdudS5saW5rb25jZS50Yi4qKSB9CisgIC5yZWwuY3RvcnMgICAgICA6IHsgKigucmVsLmN0b3JzKSB9CisgIC5yZWxhLmN0b3JzICAgICA6IHsgKigucmVsYS5jdG9ycykgfQorICAucmVsLmR0b3JzICAgICAgOiB7ICooLnJlbC5kdG9ycykgfQorICAucmVsYS5kdG9ycyAgICAgOiB7ICooLnJlbGEuZHRvcnMpIH0KKyAgLnJlbC5nb3QgICAgICAgIDogeyAqKC5yZWwuZ290KSB9CisgIC5yZWxhLmdvdCAgICAgICA6IHsgKigucmVsYS5nb3QpIH0KKyAgLnJlbC5ic3MgICAgICAgIDogeyAqKC5yZWwuYnNzIC5yZWwuYnNzLiogLnJlbC5nbnUubGlua29uY2UuYi4qKSB9CisgIC5yZWxhLmJzcyAgICAgICA6IHsgKigucmVsYS5ic3MgLnJlbGEuYnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLmIuKikgfQorICAucmVsLmlwbHQgICAgICAgOgorICAgIHsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbF9pcGx0X3N0YXJ0ID0gLik7CisgICAgICAqKC5yZWwuaXBsdCkKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbF9pcGx0X2VuZCA9IC4pOworICAgIH0KKyAgLnJlbGEuaXBsdCAgICAgIDoKKyAgICB7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgICooLnJlbGEuaXBsdCkKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9lbmQgPSAuKTsKKyAgICB9CisgIC5yZWwucGx0ICAgICAgICA6CisgICAgeworICAgICAgKigucmVsLnBsdCkKKyAgICB9CisgIC5yZWxhLnBsdCAgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5wbHQpCisgICAgfQorICAuaW5pdCAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKiguaW5pdCkpCisgIH0gPTAKKyAgLnBsdCAgICAgICAgICAgIDogeyAqKC5wbHQpIH0KKyAgLmlwbHQgICAgICAgICAgIDogeyAqKC5pcGx0KSB9CisgIC50ZXh0ICAgICAgICAgICA6CisgIHsKKyAgICAqKC50ZXh0LnVubGlrZWx5IC50ZXh0LipfdW5saWtlbHkpCisgICAgKigudGV4dCAuc3R1YiAudGV4dC4qIC5nbnUubGlua29uY2UudC4qKQorICAgIC8qIC5nbnUud2FybmluZyBzZWN0aW9ucyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgYnkgZWxmMzIuZW0uICAqLworICAgICooLmdudS53YXJuaW5nKQorICAgICooLmdsdWVfN3QpICooLmdsdWVfNykgKigudmZwMTFfdmVuZWVyKSAqKC52NF9ieCkKKyAgfSA9MAorICAuZmluaSAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKiguZmluaSkpCisgIH0gPTAKKyAgUFJPVklERSAoX19ldGV4dCA9IC4pOworICBQUk9WSURFIChfZXRleHQgPSAuKTsKKyAgUFJPVklERSAoZXRleHQgPSAuKTsKKyAgLnJvZGF0YSAgICAgICAgIDogeyAqKC5yb2RhdGEgLnJvZGF0YS4qIC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yb2RhdGExICAgICAgICA6IHsgKigucm9kYXRhMSkgfQorICAuQVJNLmV4dGFiICAgOiB7ICooLkFSTS5leHRhYiogLmdudS5saW5rb25jZS5hcm1leHRhYi4qKSB9CisgICBfX2V4aWR4X3N0YXJ0ID0gLjsKKyAgLkFSTS5leGlkeCAgIDogeyAqKC5BUk0uZXhpZHgqIC5nbnUubGlua29uY2UuYXJtZXhpZHguKikgfQorICAgX19leGlkeF9lbmQgPSAuOworICAuZWhfZnJhbWVfaGRyIDogeyAqKC5laF9mcmFtZV9oZHIpIH0KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9STyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9STyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQuICBXZSB3YW50IHRvIGFkanVzdCB1cCB0bworICAgICB0aGUgc2FtZSBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZSBvbiB0aGUgbmV4dCBwYWdlIHVwLiAgKi8KKyAgLiA9IC47CisgIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyAgKi8KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9SVyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9SVyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCSAgOiB7ICooLnRkYXRhIC50ZGF0YS4qIC5nbnUubGlua29uY2UudGQuKikgfQorICAudGJzcwkJICA6IHsgKigudGJzcyAudGJzcy4qIC5nbnUubGlua29uY2UudGIuKikgKigudGNvbW1vbikgfQorICAucHJlaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmluaXRfYXJyYXkgICAgIDoKKyAgeworICAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgIEtFRVAgKCooLmluaXRfYXJyYXkpKQorICAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X2VuZCA9IC4pOworICB9CisgIC5maW5pX2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgICAgS0VFUCAoKihTT1JUKC5maW5pX2FycmF5LiopKSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X2VuZCA9IC4pOworICB9CisgIC5jdG9ycyAgICAgICAgICA6CisgIHsKKyAgICAvKiBnY2MgdXNlcyBjcnRiZWdpbi5vIHRvIGZpbmQgdGhlIHN0YXJ0IG9mCisgICAgICAgdGhlIGNvbnN0cnVjdG9ycywgc28gd2UgbWFrZSBzdXJlIGl0IGlzCisgICAgICAgZmlyc3QuICBCZWNhdXNlIHRoaXMgaXMgYSB3aWxkY2FyZCwgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciBpZiB0aGUgdXNlciBkb2VzIG5vdAorICAgICAgIGFjdHVhbGx5IGxpbmsgYWdhaW5zdCBjcnRiZWdpbi5vOyB0aGUKKyAgICAgICBsaW5rZXIgd29uJ3QgbG9vayBmb3IgYSBmaWxlIHRvIG1hdGNoIGEKKyAgICAgICB3aWxkY2FyZC4gIFRoZSB3aWxkY2FyZCBhbHNvIG1lYW5zIHRoYXQgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciB3aGljaCBkaXJlY3RvcnkgY3J0YmVnaW4ubworICAgICAgIGlzIGluLiAgKi8KKyAgICBLRUVQICgqY3J0YmVnaW4ubyguY3RvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguY3RvcnMpKQorICAgIC8qIFdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGUgLmN0b3Igc2VjdGlvbiBmcm9tCisgICAgICAgdGhlIGNydGVuZC5vIGZpbGUgdW50aWwgYWZ0ZXIgdGhlIHNvcnRlZCBjdG9ycy4KKyAgICAgICBUaGUgLmN0b3Igc2VjdGlvbiBmcm9tIHRoZSBjcnRlbmQgZmlsZSBjb250YWlucyB0aGUKKyAgICAgICBlbmQgb2YgY3RvcnMgbWFya2VyIGFuZCBpdCBtdXN0IGJlIGxhc3QgKi8KKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuY3RvcnMpKQorICAgIEtFRVAgKCooU09SVCguY3RvcnMuKikpKQorICAgIEtFRVAgKCooLmN0b3JzKSkKKyAgfQorICAuZHRvcnMgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmR0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmR0b3JzKSkKKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuZHRvcnMpKQorICAgIEtFRVAgKCooU09SVCguZHRvcnMuKikpKQorICAgIEtFRVAgKCooLmR0b3JzKSkKKyAgfQorICAuamNyICAgICAgICAgICAgOiB7IEtFRVAgKCooLmpjcikpIH0KKyAgLmRhdGEucmVsLnJvIDogeyAqKC5kYXRhLnJlbC5yby5sb2NhbCogLmdudS5saW5rb25jZS5kLnJlbC5yby5sb2NhbC4qKSAqKC5kYXRhLnJlbC5ybyogLmdudS5saW5rb25jZS5kLnJlbC5yby4qKSB9CisgIC5keW5hbWljICAgICAgICA6IHsgKiguZHluYW1pYykgfQorICAuZ290ICAgICAgICAgICAgOiB7ICooLmdvdC5wbHQpICooLmlnb3QucGx0KSAqKC5nb3QpICooLmlnb3QpIH0KKyAgLmRhdGEgICAgICAgICAgIDoKKyAgeworICAgIFBST1ZJREUgKF9fZGF0YV9zdGFydCA9IC4pOworICAgICooLmRhdGEgLmRhdGEuKiAuZ251LmxpbmtvbmNlLmQuKikKKyAgICBTT1JUKENPTlNUUlVDVE9SUykKKyAgfQorICAuZGF0YTEgICAgICAgICAgOiB7ICooLmRhdGExKSB9CisgIF9lZGF0YSA9IC47IFBST1ZJREUgKGVkYXRhID0gLik7CisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgX19ic3Nfc3RhcnRfXyA9IC47CisgIC5ic3MgICAgICAgICAgICA6CisgIHsKKyAgICooLmR5bmJzcykKKyAgICooLmJzcyAuYnNzLiogLmdudS5saW5rb25jZS5iLiopCisgICAqKENPTU1PTikKKyAgIC8qIEFsaWduIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIC5ic3Mgc2VjdGlvbiBvY2N1cGllcyBzcGFjZSB1cCB0bworICAgICAgX2VuZC4gIEFsaWduIGFmdGVyIC5ic3MgdG8gZW5zdXJlIGNvcnJlY3QgYWxpZ25tZW50IGV2ZW4gaWYgdGhlCisgICAgICAuYnNzIHNlY3Rpb24gZGlzYXBwZWFycyBiZWNhdXNlIHRoZXJlIGFyZSBubyBpbnB1dCBzZWN0aW9ucy4KKyAgICAgIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCBpdD8gV2hlbiB0aGVyZSBpcyBubyAuYnNzIHNlY3Rpb24sIHdlIGRvbid0CisgICAgICBwYWQgdGhlIC5kYXRhIHNlY3Rpb24uICAqLworICAgLiA9IEFMSUdOKC4gIT0gMCA/IDMyIC8gOCA6IDEpOworICB9CisgIF9ic3NfZW5kX18gPSAuIDsgX19ic3NfZW5kX18gPSAuIDsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIC4gPSBBTElHTigzMiAvIDgpOworICBfX2VuZF9fID0gLiA7CisgIF9lbmQgPSAuOyBQUk9WSURFIChlbmQgPSAuKTsKKyAgLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KKyAgLnN0YWIgICAgICAgICAgMCA6IHsgKiguc3RhYikgfQorICAuc3RhYnN0ciAgICAgICAwIDogeyAqKC5zdGFic3RyKSB9CisgIC5zdGFiLmV4Y2wgICAgIDAgOiB7ICooLnN0YWIuZXhjbCkgfQorICAuc3RhYi5leGNsc3RyICAwIDogeyAqKC5zdGFiLmV4Y2xzdHIpIH0KKyAgLnN0YWIuaW5kZXggICAgMCA6IHsgKiguc3RhYi5pbmRleCkgfQorICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9CisgIC5jb21tZW50ICAgICAgIDAgOiB7ICooLmNvbW1lbnQpIH0KKyAgLyogRFdBUkYgZGVidWcgc2VjdGlvbnMuCisgICAgIFN5bWJvbHMgaW4gdGhlIERXQVJGIGRlYnVnZ2luZyBzZWN0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc2VjdGlvbiBzbyB3ZSBiZWdpbiB0aGVtIGF0IDAuICAqLworICAvKiBEV0FSRiAxICovCisgIC5kZWJ1ZyAgICAgICAgICAwIDogeyAqKC5kZWJ1ZykgfQorICAubGluZSAgICAgICAgICAgMCA6IHsgKigubGluZSkgfQorICAvKiBHTlUgRFdBUkYgMSBleHRlbnNpb25zICovCisgIC5kZWJ1Z19zcmNpbmZvICAwIDogeyAqKC5kZWJ1Z19zcmNpbmZvKSB9CisgIC5kZWJ1Z19zZm5hbWVzICAwIDogeyAqKC5kZWJ1Z19zZm5hbWVzKSB9CisgIC8qIERXQVJGIDEuMSBhbmQgRFdBUkYgMiAqLworICAuZGVidWdfYXJhbmdlcyAgMCA6IHsgKiguZGVidWdfYXJhbmdlcykgfQorICAuZGVidWdfcHVibmFtZXMgMCA6IHsgKiguZGVidWdfcHVibmFtZXMpIH0KKyAgLyogRFdBUkYgMiAqLworICAuZGVidWdfaW5mbyAgICAgMCA6IHsgKiguZGVidWdfaW5mbyAuZ251LmxpbmtvbmNlLndpLiopIH0KKyAgLmRlYnVnX2FiYnJldiAgIDAgOiB7ICooLmRlYnVnX2FiYnJldikgfQorICAuZGVidWdfbGluZSAgICAgMCA6IHsgKiguZGVidWdfbGluZSkgfQorICAuZGVidWdfZnJhbWUgICAgMCA6IHsgKiguZGVidWdfZnJhbWUpIH0KKyAgLmRlYnVnX3N0ciAgICAgIDAgOiB7ICooLmRlYnVnX3N0cikgfQorICAuZGVidWdfbG9jICAgICAgMCA6IHsgKiguZGVidWdfbG9jKSB9CisgIC5kZWJ1Z19tYWNpbmZvICAwIDogeyAqKC5kZWJ1Z19tYWNpbmZvKSB9CisgIC8qIFNHSS9NSVBTIERXQVJGIDIgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfd2Vha25hbWVzIDAgOiB7ICooLmRlYnVnX3dlYWtuYW1lcykgfQorICAuZGVidWdfZnVuY25hbWVzIDAgOiB7ICooLmRlYnVnX2Z1bmNuYW1lcykgfQorICAuZGVidWdfdHlwZW5hbWVzIDAgOiB7ICooLmRlYnVnX3R5cGVuYW1lcykgfQorICAuZGVidWdfdmFybmFtZXMgIDAgOiB7ICooLmRlYnVnX3Zhcm5hbWVzKSB9CisgIC8qIERXQVJGIDMgKi8KKyAgLmRlYnVnX3B1YnR5cGVzIDAgOiB7ICooLmRlYnVnX3B1YnR5cGVzKSB9CisgIC5kZWJ1Z19yYW5nZXMgICAwIDogeyAqKC5kZWJ1Z19yYW5nZXMpIH0KKyAgLmdudS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLmdudS5hdHRyaWJ1dGVzKSkgfQorICAubm90ZS5nbnUuYXJtLmlkZW50IDAgOiB7IEtFRVAgKCooLm5vdGUuZ251LmFybS5pZGVudCkpIH0KKyAgL0RJU0NBUkQvIDogeyAqKC5ub3RlLkdOVS1zdGFjaykgKiguZ251X2RlYnVnbGluaykgKiguZ251Lmx0b18qKSB9Cit9CmRpZmYgLS1naXQgYS9saWIvbGRzY3JpcHRzL2FybWVsZmJfbGludXhfZWFiaS54YyBiL2xpYi9sZHNjcmlwdHMvYXJtZWxmYl9saW51eF9lYWJpLnhjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNDNjMGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbGRzY3JpcHRzL2FybWVsZmJfbGludXhfZWFiaS54YwpAQCAtMCwwICsxLDIyNyBAQAorLyogU2NyaXB0IGZvciAteiBjb21icmVsb2M6IGNvbWJpbmUgYW5kIHNvcnQgcmVsb2Mgc2VjdGlvbnMgKi8KK09VVFBVVF9GT1JNQVQoImVsZjMyLWJpZ2FybSIsICJlbGYzMi1iaWdhcm0iLAorCSAgICAgICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VBUkNIX0RJUigiPS91c3IvbG9jYWwvbGliIik7IFNFQVJDSF9ESVIoIj0vbGliIik7IFNFQVJDSF9ESVIoIj0vdXNyL2xpYiIpOworU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIFBST1ZJREUgKF9fZXhlY3V0YWJsZV9zdGFydCA9IFNFR01FTlRfU1RBUlQoInRleHQtc2VnbWVudCIsIDB4MDAwMDgwMDApKTsgLiA9IFNFR01FTlRfU1RBUlQoInRleHQtc2VnbWVudCIsIDB4MDAwMDgwMDApICsgU0laRU9GX0hFQURFUlM7CisgIC5pbnRlcnAgICAgICAgICA6IHsgKiguaW50ZXJwKSB9CisgIC5ub3RlLmdudS5idWlsZC1pZCA6IHsgKigubm90ZS5nbnUuYnVpbGQtaWQpIH0KKyAgLmhhc2ggICAgICAgICAgIDogeyAqKC5oYXNoKSB9CisgIC5nbnUuaGFzaCAgICAgICA6IHsgKiguZ251Lmhhc2gpIH0KKyAgLmR5bnN5bSAgICAgICAgIDogeyAqKC5keW5zeW0pIH0KKyAgLmR5bnN0ciAgICAgICAgIDogeyAqKC5keW5zdHIpIH0KKyAgLmdudS52ZXJzaW9uICAgIDogeyAqKC5nbnUudmVyc2lvbikgfQorICAuZ251LnZlcnNpb25fZCAgOiB7ICooLmdudS52ZXJzaW9uX2QpIH0KKyAgLmdudS52ZXJzaW9uX3IgIDogeyAqKC5nbnUudmVyc2lvbl9yKSB9CisgIC5yZWwuZHluICAgICAgICA6CisgICAgeworICAgICAgKigucmVsLmluaXQpCisgICAgICAqKC5yZWwudGV4dCAucmVsLnRleHQuKiAucmVsLmdudS5saW5rb25jZS50LiopCisgICAgICAqKC5yZWwuZmluaSkKKyAgICAgICooLnJlbC5yb2RhdGEgLnJlbC5yb2RhdGEuKiAucmVsLmdudS5saW5rb25jZS5yLiopCisgICAgICAqKC5yZWwuZGF0YS5yZWwucm8qIC5yZWwuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopCisgICAgICAqKC5yZWwuZGF0YSAucmVsLmRhdGEuKiAucmVsLmdudS5saW5rb25jZS5kLiopCisgICAgICAqKC5yZWwudGRhdGEgLnJlbC50ZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnRkLiopCisgICAgICAqKC5yZWwudGJzcyAucmVsLnRic3MuKiAucmVsLmdudS5saW5rb25jZS50Yi4qKQorICAgICAgKigucmVsLmN0b3JzKQorICAgICAgKigucmVsLmR0b3JzKQorICAgICAgKigucmVsLmdvdCkKKyAgICAgICooLnJlbC5ic3MgLnJlbC5ic3MuKiAucmVsLmdudS5saW5rb25jZS5iLiopCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9zdGFydCA9IC4pOworICAgICAgKigucmVsLmlwbHQpCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9lbmQgPSAuKTsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9zdGFydCA9IC4pOworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X2VuZCA9IC4pOworICAgIH0KKyAgLnJlbGEuZHluICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLmluaXQpCisgICAgICAqKC5yZWxhLnRleHQgLnJlbGEudGV4dC4qIC5yZWxhLmdudS5saW5rb25jZS50LiopCisgICAgICAqKC5yZWxhLmZpbmkpCisgICAgICAqKC5yZWxhLnJvZGF0YSAucmVsYS5yb2RhdGEuKiAucmVsYS5nbnUubGlua29uY2Uuci4qKQorICAgICAgKigucmVsYS5kYXRhIC5yZWxhLmRhdGEuKiAucmVsYS5nbnUubGlua29uY2UuZC4qKQorICAgICAgKigucmVsYS50ZGF0YSAucmVsYS50ZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS50ZC4qKQorICAgICAgKigucmVsYS50YnNzIC5yZWxhLnRic3MuKiAucmVsYS5nbnUubGlua29uY2UudGIuKikKKyAgICAgICooLnJlbGEuY3RvcnMpCisgICAgICAqKC5yZWxhLmR0b3JzKQorICAgICAgKigucmVsYS5nb3QpCisgICAgICAqKC5yZWxhLmJzcyAucmVsYS5ic3MuKiAucmVsYS5nbnUubGlua29uY2UuYi4qKQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbF9pcGx0X2VuZCA9IC4pOworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X3N0YXJ0ID0gLik7CisgICAgICAqKC5yZWxhLmlwbHQpCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfZW5kID0gLik7CisgICAgfQorICAucmVsLnBsdCAgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbC5wbHQpCisgICAgfQorICAucmVsYS5wbHQgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEucGx0KQorICAgIH0KKyAgLmluaXQgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooLmluaXQpKQorICB9ID0wCisgIC5wbHQgICAgICAgICAgICA6IHsgKigucGx0KSB9CisgIC5pcGx0ICAgICAgICAgICA6IHsgKiguaXBsdCkgfQorICAudGV4dCAgICAgICAgICAgOgorICB7CisgICAgKigudGV4dC51bmxpa2VseSAudGV4dC4qX3VubGlrZWx5KQorICAgICooLnRleHQgLnN0dWIgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKikKKyAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KKyAgICAqKC5nbnUud2FybmluZykKKyAgICAqKC5nbHVlXzd0KSAqKC5nbHVlXzcpICooLnZmcDExX3ZlbmVlcikgKigudjRfYngpCisgIH0gPTAKKyAgLmZpbmkgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooLmZpbmkpKQorICB9ID0wCisgIFBST1ZJREUgKF9fZXRleHQgPSAuKTsKKyAgUFJPVklERSAoX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgIC5yb2RhdGEgICAgICAgICA6IHsgKigucm9kYXRhIC5yb2RhdGEuKiAuZ251LmxpbmtvbmNlLnIuKikgfQorICAucm9kYXRhMSAgICAgICAgOiB7ICooLnJvZGF0YTEpIH0KKyAgLkFSTS5leHRhYiAgIDogeyAqKC5BUk0uZXh0YWIqIC5nbnUubGlua29uY2UuYXJtZXh0YWIuKikgfQorICAgX19leGlkeF9zdGFydCA9IC47CisgIC5BUk0uZXhpZHggICA6IHsgKiguQVJNLmV4aWR4KiAuZ251LmxpbmtvbmNlLmFybWV4aWR4LiopIH0KKyAgIF9fZXhpZHhfZW5kID0gLjsKKyAgLmVoX2ZyYW1lX2hkciA6IHsgKiguZWhfZnJhbWVfaGRyKSB9CisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUk8geyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogQWRqdXN0IHRoZSBhZGRyZXNzIGZvciB0aGUgZGF0YSBzZWdtZW50LiAgV2Ugd2FudCB0byBhZGp1c3QgdXAgdG8KKyAgICAgdGhlIHNhbWUgYWRkcmVzcyB3aXRoaW4gdGhlIHBhZ2Ugb24gdGhlIG5leHQgcGFnZSB1cC4gICovCisgIC4gPSBBTElHTiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSkgLSAoKENPTlNUQU5UIChNQVhQQUdFU0laRSkgLSAuKSAmIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gMSkpOyAuID0gREFUQV9TRUdNRU5UX0FMSUdOIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpLCBDT05TVEFOVCAoQ09NTU9OUEFHRVNJWkUpKTsKKyAgLyogRXhjZXB0aW9uIGhhbmRsaW5nICAqLworICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JXIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JXIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIFRocmVhZCBMb2NhbCBTdG9yYWdlIHNlY3Rpb25zICAqLworICAudGRhdGEJICA6IHsgKigudGRhdGEgLnRkYXRhLiogLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC50YnNzCQkgIDogeyAqKC50YnNzIC50YnNzLiogLmdudS5saW5rb25jZS50Yi4qKSAqKC50Y29tbW9uKSB9CisgIC5wcmVpbml0X2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICAgS0VFUCAoKihTT1JUKC5pbml0X2FycmF5LiopKSkKKyAgICAgS0VFUCAoKiguaW5pdF9hcnJheSkpCisgICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmZpbmlfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKC5maW5pX2FycmF5KSkKKyAgICBLRUVQICgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQorICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmN0b3JzICAgICAgICAgIDoKKyAgeworICAgIC8qIGdjYyB1c2VzIGNydGJlZ2luLm8gdG8gZmluZCB0aGUgc3RhcnQgb2YKKyAgICAgICB0aGUgY29uc3RydWN0b3JzLCBzbyB3ZSBtYWtlIHN1cmUgaXQgaXMKKyAgICAgICBmaXJzdC4gIEJlY2F1c2UgdGhpcyBpcyBhIHdpbGRjYXJkLCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSB1c2VyIGRvZXMgbm90CisgICAgICAgYWN0dWFsbHkgbGluayBhZ2FpbnN0IGNydGJlZ2luLm87IHRoZQorICAgICAgIGxpbmtlciB3b24ndCBsb29rIGZvciBhIGZpbGUgdG8gbWF0Y2ggYQorICAgICAgIHdpbGRjYXJkLiAgVGhlIHdpbGRjYXJkIGFsc28gbWVhbnMgdGhhdCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGRpcmVjdG9yeSBjcnRiZWdpbi5vCisgICAgICAgaXMgaW4uICAqLworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5jdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5jdG9ycykpCisgICAgLyogV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSAuY3RvciBzZWN0aW9uIGZyb20KKyAgICAgICB0aGUgY3J0ZW5kLm8gZmlsZSB1bnRpbCBhZnRlciB0aGUgc29ydGVkIGN0b3JzLgorICAgICAgIFRoZSAuY3RvciBzZWN0aW9uIGZyb20gdGhlIGNydGVuZCBmaWxlIGNvbnRhaW5zIHRoZQorICAgICAgIGVuZCBvZiBjdG9ycyBtYXJrZXIgYW5kIGl0IG11c3QgYmUgbGFzdCAqLworICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5jdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5jdG9ycy4qKSkpCisgICAgS0VFUCAoKiguY3RvcnMpKQorICB9CisgIC5kdG9ycyAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqY3J0YmVnaW4ubyguZHRvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguZHRvcnMpKQorICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5kdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5kdG9ycy4qKSkpCisgICAgS0VFUCAoKiguZHRvcnMpKQorICB9CisgIC5qY3IgICAgICAgICAgICA6IHsgS0VFUCAoKiguamNyKSkgfQorICAuZGF0YS5yZWwucm8gOiB7ICooLmRhdGEucmVsLnJvLmxvY2FsKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLmxvY2FsLiopICooLmRhdGEucmVsLnJvKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLmR5bmFtaWMgICAgICAgIDogeyAqKC5keW5hbWljKSB9CisgIC4gPSBEQVRBX1NFR01FTlRfUkVMUk9fRU5EICgwLCAuKTsKKyAgLmdvdCAgICAgICAgICAgIDogeyAqKC5nb3QucGx0KSAqKC5pZ290LnBsdCkgKiguZ290KSAqKC5pZ290KSB9CisgIC5kYXRhICAgICAgICAgICA6CisgIHsKKyAgICBQUk9WSURFIChfX2RhdGFfc3RhcnQgPSAuKTsKKyAgICAqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisgICAgU09SVChDT05TVFJVQ1RPUlMpCisgIH0KKyAgLmRhdGExICAgICAgICAgIDogeyAqKC5kYXRhMSkgfQorICBfZWRhdGEgPSAuOyBQUk9WSURFIChlZGF0YSA9IC4pOworICBfX2Jzc19zdGFydCA9IC47CisgIF9fYnNzX3N0YXJ0X18gPSAuOworICAuYnNzICAgICAgICAgICAgOgorICB7CisgICAqKC5keW5ic3MpCisgICAqKC5ic3MgLmJzcy4qIC5nbnUubGlua29uY2UuYi4qKQorICAgKihDT01NT04pCisgICAvKiBBbGlnbiBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSAuYnNzIHNlY3Rpb24gb2NjdXBpZXMgc3BhY2UgdXAgdG8KKyAgICAgIF9lbmQuICBBbGlnbiBhZnRlciAuYnNzIHRvIGVuc3VyZSBjb3JyZWN0IGFsaWdubWVudCBldmVuIGlmIHRoZQorICAgICAgLmJzcyBzZWN0aW9uIGRpc2FwcGVhcnMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gaW5wdXQgc2VjdGlvbnMuCisgICAgICBGSVhNRTogV2h5IGRvIHdlIG5lZWQgaXQ/IFdoZW4gdGhlcmUgaXMgbm8gLmJzcyBzZWN0aW9uLCB3ZSBkb24ndAorICAgICAgcGFkIHRoZSAuZGF0YSBzZWN0aW9uLiAgKi8KKyAgIC4gPSBBTElHTiguICE9IDAgPyAzMiAvIDggOiAxKTsKKyAgfQorICBfYnNzX2VuZF9fID0gLiA7IF9fYnNzX2VuZF9fID0gLiA7CisgIC4gPSBBTElHTigzMiAvIDgpOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgX19lbmRfXyA9IC4gOworICBfZW5kID0gLjsgUFJPVklERSAoZW5kID0gLik7CisgIC4gPSBEQVRBX1NFR01FTlRfRU5EICguKTsKKyAgLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KKyAgLnN0YWIgICAgICAgICAgMCA6IHsgKiguc3RhYikgfQorICAuc3RhYnN0ciAgICAgICAwIDogeyAqKC5zdGFic3RyKSB9CisgIC5zdGFiLmV4Y2wgICAgIDAgOiB7ICooLnN0YWIuZXhjbCkgfQorICAuc3RhYi5leGNsc3RyICAwIDogeyAqKC5zdGFiLmV4Y2xzdHIpIH0KKyAgLnN0YWIuaW5kZXggICAgMCA6IHsgKiguc3RhYi5pbmRleCkgfQorICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9CisgIC5jb21tZW50ICAgICAgIDAgOiB7ICooLmNvbW1lbnQpIH0KKyAgLyogRFdBUkYgZGVidWcgc2VjdGlvbnMuCisgICAgIFN5bWJvbHMgaW4gdGhlIERXQVJGIGRlYnVnZ2luZyBzZWN0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc2VjdGlvbiBzbyB3ZSBiZWdpbiB0aGVtIGF0IDAuICAqLworICAvKiBEV0FSRiAxICovCisgIC5kZWJ1ZyAgICAgICAgICAwIDogeyAqKC5kZWJ1ZykgfQorICAubGluZSAgICAgICAgICAgMCA6IHsgKigubGluZSkgfQorICAvKiBHTlUgRFdBUkYgMSBleHRlbnNpb25zICovCisgIC5kZWJ1Z19zcmNpbmZvICAwIDogeyAqKC5kZWJ1Z19zcmNpbmZvKSB9CisgIC5kZWJ1Z19zZm5hbWVzICAwIDogeyAqKC5kZWJ1Z19zZm5hbWVzKSB9CisgIC8qIERXQVJGIDEuMSBhbmQgRFdBUkYgMiAqLworICAuZGVidWdfYXJhbmdlcyAgMCA6IHsgKiguZGVidWdfYXJhbmdlcykgfQorICAuZGVidWdfcHVibmFtZXMgMCA6IHsgKiguZGVidWdfcHVibmFtZXMpIH0KKyAgLyogRFdBUkYgMiAqLworICAuZGVidWdfaW5mbyAgICAgMCA6IHsgKiguZGVidWdfaW5mbyAuZ251LmxpbmtvbmNlLndpLiopIH0KKyAgLmRlYnVnX2FiYnJldiAgIDAgOiB7ICooLmRlYnVnX2FiYnJldikgfQorICAuZGVidWdfbGluZSAgICAgMCA6IHsgKiguZGVidWdfbGluZSkgfQorICAuZGVidWdfZnJhbWUgICAgMCA6IHsgKiguZGVidWdfZnJhbWUpIH0KKyAgLmRlYnVnX3N0ciAgICAgIDAgOiB7ICooLmRlYnVnX3N0cikgfQorICAuZGVidWdfbG9jICAgICAgMCA6IHsgKiguZGVidWdfbG9jKSB9CisgIC5kZWJ1Z19tYWNpbmZvICAwIDogeyAqKC5kZWJ1Z19tYWNpbmZvKSB9CisgIC8qIFNHSS9NSVBTIERXQVJGIDIgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfd2Vha25hbWVzIDAgOiB7ICooLmRlYnVnX3dlYWtuYW1lcykgfQorICAuZGVidWdfZnVuY25hbWVzIDAgOiB7ICooLmRlYnVnX2Z1bmNuYW1lcykgfQorICAuZGVidWdfdHlwZW5hbWVzIDAgOiB7ICooLmRlYnVnX3R5cGVuYW1lcykgfQorICAuZGVidWdfdmFybmFtZXMgIDAgOiB7ICooLmRlYnVnX3Zhcm5hbWVzKSB9CisgIC8qIERXQVJGIDMgKi8KKyAgLmRlYnVnX3B1YnR5cGVzIDAgOiB7ICooLmRlYnVnX3B1YnR5cGVzKSB9CisgIC5kZWJ1Z19yYW5nZXMgICAwIDogeyAqKC5kZWJ1Z19yYW5nZXMpIH0KKyAgLmdudS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLmdudS5hdHRyaWJ1dGVzKSkgfQorICAubm90ZS5nbnUuYXJtLmlkZW50IDAgOiB7IEtFRVAgKCooLm5vdGUuZ251LmFybS5pZGVudCkpIH0KKyAgL0RJU0NBUkQvIDogeyAqKC5ub3RlLkdOVS1zdGFjaykgKiguZ251X2RlYnVnbGluaykgKiguZ251Lmx0b18qKSB9Cit9CmRpZmYgLS1naXQgYS9saWIvbGRzY3JpcHRzL2FybWVsZmJfbGludXhfZWFiaS54ZCBiL2xpYi9sZHNjcmlwdHMvYXJtZWxmYl9saW51eF9lYWJpLnhkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiOWI1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbGRzY3JpcHRzL2FybWVsZmJfbGludXhfZWFiaS54ZApAQCAtMCwwICsxLDIyNCBAQAorLyogU2NyaXB0IGZvciBsZCAtcGllOiBsaW5rIHBvc2l0aW9uIGluZGVwZW5kZW50IGV4ZWN1dGFibGUgKi8KK09VVFBVVF9GT1JNQVQoImVsZjMyLWJpZ2FybSIsICJlbGYzMi1iaWdhcm0iLAorCSAgICAgICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VBUkNIX0RJUigiPS91c3IvbG9jYWwvbGliIik7IFNFQVJDSF9ESVIoIj0vbGliIik7IFNFQVJDSF9ESVIoIj0vdXNyL2xpYiIpOworU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC4gPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAwKSArIFNJWkVPRl9IRUFERVJTOworICAuaW50ZXJwICAgICAgICAgOiB7ICooLmludGVycCkgfQorICAubm90ZS5nbnUuYnVpbGQtaWQgOiB7ICooLm5vdGUuZ251LmJ1aWxkLWlkKSB9CisgIC5oYXNoICAgICAgICAgICA6IHsgKiguaGFzaCkgfQorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CisgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CisgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CisgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KKyAgLmdudS52ZXJzaW9uX2QgIDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CisgIC5nbnUudmVyc2lvbl9yICA6IHsgKiguZ251LnZlcnNpb25fcikgfQorICAucmVsLmluaXQgICAgICAgOiB7ICooLnJlbC5pbml0KSB9CisgIC5yZWxhLmluaXQgICAgICA6IHsgKigucmVsYS5pbml0KSB9CisgIC5yZWwudGV4dCAgICAgICA6IHsgKigucmVsLnRleHQgLnJlbC50ZXh0LiogLnJlbC5nbnUubGlua29uY2UudC4qKSB9CisgIC5yZWxhLnRleHQgICAgICA6IHsgKigucmVsYS50ZXh0IC5yZWxhLnRleHQuKiAucmVsYS5nbnUubGlua29uY2UudC4qKSB9CisgIC5yZWwuZmluaSAgICAgICA6IHsgKigucmVsLmZpbmkpIH0KKyAgLnJlbGEuZmluaSAgICAgIDogeyAqKC5yZWxhLmZpbmkpIH0KKyAgLnJlbC5yb2RhdGEgICAgIDogeyAqKC5yZWwucm9kYXRhIC5yZWwucm9kYXRhLiogLnJlbC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yZWxhLnJvZGF0YSAgICA6IHsgKigucmVsYS5yb2RhdGEgLnJlbGEucm9kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnIuKikgfQorICAucmVsLmRhdGEucmVsLnJvICAgOiB7ICooLnJlbC5kYXRhLnJlbC5ybyogLnJlbC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAucmVsYS5kYXRhLnJlbC5ybyAgIDogeyAqKC5yZWxhLmRhdGEucmVsLnJvKiAucmVsYS5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAucmVsLmRhdGEgICAgICAgOiB7ICooLnJlbC5kYXRhIC5yZWwuZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLmQuKikgfQorICAucmVsYS5kYXRhICAgICAgOiB7ICooLnJlbGEuZGF0YSAucmVsYS5kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLmQuKikgfQorICAucmVsLnRkYXRhCSAgOiB7ICooLnJlbC50ZGF0YSAucmVsLnRkYXRhLiogLnJlbC5nbnUubGlua29uY2UudGQuKikgfQorICAucmVsYS50ZGF0YQkgIDogeyAqKC5yZWxhLnRkYXRhIC5yZWxhLnRkYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnJlbC50YnNzCSAgOiB7ICooLnJlbC50YnNzIC5yZWwudGJzcy4qIC5yZWwuZ251LmxpbmtvbmNlLnRiLiopIH0KKyAgLnJlbGEudGJzcwkgIDogeyAqKC5yZWxhLnRic3MgLnJlbGEudGJzcy4qIC5yZWxhLmdudS5saW5rb25jZS50Yi4qKSB9CisgIC5yZWwuY3RvcnMgICAgICA6IHsgKigucmVsLmN0b3JzKSB9CisgIC5yZWxhLmN0b3JzICAgICA6IHsgKigucmVsYS5jdG9ycykgfQorICAucmVsLmR0b3JzICAgICAgOiB7ICooLnJlbC5kdG9ycykgfQorICAucmVsYS5kdG9ycyAgICAgOiB7ICooLnJlbGEuZHRvcnMpIH0KKyAgLnJlbC5nb3QgICAgICAgIDogeyAqKC5yZWwuZ290KSB9CisgIC5yZWxhLmdvdCAgICAgICA6IHsgKigucmVsYS5nb3QpIH0KKyAgLnJlbC5ic3MgICAgICAgIDogeyAqKC5yZWwuYnNzIC5yZWwuYnNzLiogLnJlbC5nbnUubGlua29uY2UuYi4qKSB9CisgIC5yZWxhLmJzcyAgICAgICA6IHsgKigucmVsYS5ic3MgLnJlbGEuYnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLmIuKikgfQorICAucmVsLmlwbHQgICAgICAgOgorICAgIHsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbF9pcGx0X3N0YXJ0ID0gLik7CisgICAgICAqKC5yZWwuaXBsdCkKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbF9pcGx0X2VuZCA9IC4pOworICAgIH0KKyAgLnJlbGEuaXBsdCAgICAgIDoKKyAgICB7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgICooLnJlbGEuaXBsdCkKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9lbmQgPSAuKTsKKyAgICB9CisgIC5yZWwucGx0ICAgICAgICA6CisgICAgeworICAgICAgKigucmVsLnBsdCkKKyAgICB9CisgIC5yZWxhLnBsdCAgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5wbHQpCisgICAgfQorICAuaW5pdCAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKiguaW5pdCkpCisgIH0gPTAKKyAgLnBsdCAgICAgICAgICAgIDogeyAqKC5wbHQpIH0KKyAgLmlwbHQgICAgICAgICAgIDogeyAqKC5pcGx0KSB9CisgIC50ZXh0ICAgICAgICAgICA6CisgIHsKKyAgICAqKC50ZXh0LnVubGlrZWx5IC50ZXh0LipfdW5saWtlbHkpCisgICAgKigudGV4dCAuc3R1YiAudGV4dC4qIC5nbnUubGlua29uY2UudC4qKQorICAgIC8qIC5nbnUud2FybmluZyBzZWN0aW9ucyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgYnkgZWxmMzIuZW0uICAqLworICAgICooLmdudS53YXJuaW5nKQorICAgICooLmdsdWVfN3QpICooLmdsdWVfNykgKigudmZwMTFfdmVuZWVyKSAqKC52NF9ieCkKKyAgfSA9MAorICAuZmluaSAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKiguZmluaSkpCisgIH0gPTAKKyAgUFJPVklERSAoX19ldGV4dCA9IC4pOworICBQUk9WSURFIChfZXRleHQgPSAuKTsKKyAgUFJPVklERSAoZXRleHQgPSAuKTsKKyAgLnJvZGF0YSAgICAgICAgIDogeyAqKC5yb2RhdGEgLnJvZGF0YS4qIC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yb2RhdGExICAgICAgICA6IHsgKigucm9kYXRhMSkgfQorICAuQVJNLmV4dGFiICAgOiB7ICooLkFSTS5leHRhYiogLmdudS5saW5rb25jZS5hcm1leHRhYi4qKSB9CisgICBfX2V4aWR4X3N0YXJ0ID0gLjsKKyAgLkFSTS5leGlkeCAgIDogeyAqKC5BUk0uZXhpZHgqIC5nbnUubGlua29uY2UuYXJtZXhpZHguKikgfQorICAgX19leGlkeF9lbmQgPSAuOworICAuZWhfZnJhbWVfaGRyIDogeyAqKC5laF9mcmFtZV9oZHIpIH0KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9STyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9STyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQuICBXZSB3YW50IHRvIGFkanVzdCB1cCB0bworICAgICB0aGUgc2FtZSBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZSBvbiB0aGUgbmV4dCBwYWdlIHVwLiAgKi8KKyAgLiA9IEFMSUdOIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpKSAtICgoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSAtIC4pICYgKENPTlNUQU5UIChNQVhQQUdFU0laRSkgLSAxKSk7IC4gPSBEQVRBX1NFR01FTlRfQUxJR04gKENPTlNUQU5UIChNQVhQQUdFU0laRSksIENPTlNUQU5UIChDT01NT05QQUdFU0laRSkpOworICAvKiBFeGNlcHRpb24gaGFuZGxpbmcgICovCisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUlcgeyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUlcgeyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogVGhyZWFkIExvY2FsIFN0b3JhZ2Ugc2VjdGlvbnMgICovCisgIC50ZGF0YQkgIDogeyAqKC50ZGF0YSAudGRhdGEuKiAuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnRic3MJCSAgOiB7ICooLnRic3MgLnRic3MuKiAuZ251LmxpbmtvbmNlLnRiLiopICooLnRjb21tb24pIH0KKyAgLnByZWluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKC5wcmVpbml0X2FycmF5KSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X2VuZCA9IC4pOworICB9CisgIC5pbml0X2FycmF5ICAgICA6CisgIHsKKyAgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgICBLRUVQICgqKFNPUlQoLmluaXRfYXJyYXkuKikpKQorICAgICBLRUVQICgqKC5pbml0X2FycmF5KSkKKyAgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuZmluaV9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooLmZpbmlfYXJyYXkpKQorICAgIEtFRVAgKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuY3RvcnMgICAgICAgICAgOgorICB7CisgICAgLyogZ2NjIHVzZXMgY3J0YmVnaW4ubyB0byBmaW5kIHRoZSBzdGFydCBvZgorICAgICAgIHRoZSBjb25zdHJ1Y3RvcnMsIHNvIHdlIG1ha2Ugc3VyZSBpdCBpcworICAgICAgIGZpcnN0LiAgQmVjYXVzZSB0aGlzIGlzIGEgd2lsZGNhcmQsIGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgaWYgdGhlIHVzZXIgZG9lcyBub3QKKyAgICAgICBhY3R1YWxseSBsaW5rIGFnYWluc3QgY3J0YmVnaW4ubzsgdGhlCisgICAgICAgbGlua2VyIHdvbid0IGxvb2sgZm9yIGEgZmlsZSB0byBtYXRjaCBhCisgICAgICAgd2lsZGNhcmQuICBUaGUgd2lsZGNhcmQgYWxzbyBtZWFucyB0aGF0IGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgd2hpY2ggZGlyZWN0b3J5IGNydGJlZ2luLm8KKyAgICAgICBpcyBpbi4gICovCisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmN0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmN0b3JzKSkKKyAgICAvKiBXZSBkb24ndCB3YW50IHRvIGluY2x1ZGUgdGhlIC5jdG9yIHNlY3Rpb24gZnJvbQorICAgICAgIHRoZSBjcnRlbmQubyBmaWxlIHVudGlsIGFmdGVyIHRoZSBzb3J0ZWQgY3RvcnMuCisgICAgICAgVGhlIC5jdG9yIHNlY3Rpb24gZnJvbSB0aGUgY3J0ZW5kIGZpbGUgY29udGFpbnMgdGhlCisgICAgICAgZW5kIG9mIGN0b3JzIG1hcmtlciBhbmQgaXQgbXVzdCBiZSBsYXN0ICovCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmN0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmN0b3JzLiopKSkKKyAgICBLRUVQICgqKC5jdG9ycykpCisgIH0KKyAgLmR0b3JzICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5kdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5kdG9ycykpCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmR0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmR0b3JzLiopKSkKKyAgICBLRUVQICgqKC5kdG9ycykpCisgIH0KKyAgLmpjciAgICAgICAgICAgIDogeyBLRUVQICgqKC5qY3IpKSB9CisgIC5kYXRhLnJlbC5ybyA6IHsgKiguZGF0YS5yZWwucm8ubG9jYWwqIC5nbnUubGlua29uY2UuZC5yZWwucm8ubG9jYWwuKikgKiguZGF0YS5yZWwucm8qIC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAuZHluYW1pYyAgICAgICAgOiB7ICooLmR5bmFtaWMpIH0KKyAgLiA9IERBVEFfU0VHTUVOVF9SRUxST19FTkQgKDAsIC4pOworICAuZ290ICAgICAgICAgICAgOiB7ICooLmdvdC5wbHQpICooLmlnb3QucGx0KSAqKC5nb3QpICooLmlnb3QpIH0KKyAgLmRhdGEgICAgICAgICAgIDoKKyAgeworICAgIFBST1ZJREUgKF9fZGF0YV9zdGFydCA9IC4pOworICAgICooLmRhdGEgLmRhdGEuKiAuZ251LmxpbmtvbmNlLmQuKikKKyAgICBTT1JUKENPTlNUUlVDVE9SUykKKyAgfQorICAuZGF0YTEgICAgICAgICAgOiB7ICooLmRhdGExKSB9CisgIF9lZGF0YSA9IC47IFBST1ZJREUgKGVkYXRhID0gLik7CisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgX19ic3Nfc3RhcnRfXyA9IC47CisgIC5ic3MgICAgICAgICAgICA6CisgIHsKKyAgICooLmR5bmJzcykKKyAgICooLmJzcyAuYnNzLiogLmdudS5saW5rb25jZS5iLiopCisgICAqKENPTU1PTikKKyAgIC8qIEFsaWduIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIC5ic3Mgc2VjdGlvbiBvY2N1cGllcyBzcGFjZSB1cCB0bworICAgICAgX2VuZC4gIEFsaWduIGFmdGVyIC5ic3MgdG8gZW5zdXJlIGNvcnJlY3QgYWxpZ25tZW50IGV2ZW4gaWYgdGhlCisgICAgICAuYnNzIHNlY3Rpb24gZGlzYXBwZWFycyBiZWNhdXNlIHRoZXJlIGFyZSBubyBpbnB1dCBzZWN0aW9ucy4KKyAgICAgIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCBpdD8gV2hlbiB0aGVyZSBpcyBubyAuYnNzIHNlY3Rpb24sIHdlIGRvbid0CisgICAgICBwYWQgdGhlIC5kYXRhIHNlY3Rpb24uICAqLworICAgLiA9IEFMSUdOKC4gIT0gMCA/IDMyIC8gOCA6IDEpOworICB9CisgIF9ic3NfZW5kX18gPSAuIDsgX19ic3NfZW5kX18gPSAuIDsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIC4gPSBBTElHTigzMiAvIDgpOworICBfX2VuZF9fID0gLiA7CisgIF9lbmQgPSAuOyBQUk9WSURFIChlbmQgPSAuKTsKKyAgLiA9IERBVEFfU0VHTUVOVF9FTkQgKC4pOworICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAgICAgICAgICAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyICAgICAgIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAgICAgMCA6IHsgKiguc3RhYi5leGNsKSB9CisgIC5zdGFiLmV4Y2xzdHIgIDAgOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAuc3RhYi5pbmRleCAgICAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisgIC5zdGFiLmluZGV4c3RyIDAgOiB7ICooLnN0YWIuaW5kZXhzdHIpIH0KKyAgLmNvbW1lbnQgICAgICAgMCA6IHsgKiguY29tbWVudCkgfQorICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KKyAgICAgU3ltYm9scyBpbiB0aGUgRFdBUkYgZGVidWdnaW5nIHNlY3Rpb25zIGFyZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nCisgICAgIG9mIHRoZSBzZWN0aW9uIHNvIHdlIGJlZ2luIHRoZW0gYXQgMC4gICovCisgIC8qIERXQVJGIDEgKi8KKyAgLmRlYnVnICAgICAgICAgIDAgOiB7ICooLmRlYnVnKSB9CisgIC5saW5lICAgICAgICAgICAwIDogeyAqKC5saW5lKSB9CisgIC8qIEdOVSBEV0FSRiAxIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3NyY2luZm8gIDAgOiB7ICooLmRlYnVnX3NyY2luZm8pIH0KKyAgLmRlYnVnX3NmbmFtZXMgIDAgOiB7ICooLmRlYnVnX3NmbmFtZXMpIH0KKyAgLyogRFdBUkYgMS4xIGFuZCBEV0FSRiAyICovCisgIC5kZWJ1Z19hcmFuZ2VzICAwIDogeyAqKC5kZWJ1Z19hcmFuZ2VzKSB9CisgIC5kZWJ1Z19wdWJuYW1lcyAwIDogeyAqKC5kZWJ1Z19wdWJuYW1lcykgfQorICAvKiBEV0FSRiAyICovCisgIC5kZWJ1Z19pbmZvICAgICAwIDogeyAqKC5kZWJ1Z19pbmZvIC5nbnUubGlua29uY2Uud2kuKikgfQorICAuZGVidWdfYWJicmV2ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9CisgIC5kZWJ1Z19saW5lICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisgIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5kZWJ1Z19mcmFtZSkgfQorICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9CisgIC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKyAgLmRlYnVnX21hY2luZm8gIDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0KKyAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRlbnNpb25zICovCisgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9CisgIC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9CisgIC5kZWJ1Z190eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9CisgIC5kZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKyAgLyogRFdBUkYgMyAqLworICAuZGVidWdfcHVidHlwZXMgMCA6IHsgKiguZGVidWdfcHVidHlwZXMpIH0KKyAgLmRlYnVnX3JhbmdlcyAgIDAgOiB7ICooLmRlYnVnX3JhbmdlcykgfQorICAuZ251LmF0dHJpYnV0ZXMgMCA6IHsgS0VFUCAoKiguZ251LmF0dHJpYnV0ZXMpKSB9CisgIC5ub3RlLmdudS5hcm0uaWRlbnQgMCA6IHsgS0VFUCAoKigubm90ZS5nbnUuYXJtLmlkZW50KSkgfQorICAvRElTQ0FSRC8gOiB7ICooLm5vdGUuR05VLXN0YWNrKSAqKC5nbnVfZGVidWdsaW5rKSAqKC5nbnUubHRvXyopIH0KK30KZGlmZiAtLWdpdCBhL2xpYi9sZHNjcmlwdHMvYXJtZWxmYl9saW51eF9lYWJpLnhkYyBiL2xpYi9sZHNjcmlwdHMvYXJtZWxmYl9saW51eF9lYWJpLnhkYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWRjZjJmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2xkc2NyaXB0cy9hcm1lbGZiX2xpbnV4X2VhYmkueGRjCkBAIC0wLDAgKzEsMjI3IEBACisvKiBTY3JpcHQgZm9yIC1waWUgLXogY29tYnJlbG9jOiBwb3NpdGlvbiBpbmRlcGVuZGVudCBleGVjdXRhYmxlLCBjb21iaW5lICYgc29ydCByZWxvY3MgKi8KK09VVFBVVF9GT1JNQVQoImVsZjMyLWJpZ2FybSIsICJlbGYzMi1iaWdhcm0iLAorCSAgICAgICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VBUkNIX0RJUigiPS91c3IvbG9jYWwvbGliIik7IFNFQVJDSF9ESVIoIj0vbGliIik7IFNFQVJDSF9ESVIoIj0vdXNyL2xpYiIpOworU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC4gPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAwKSArIFNJWkVPRl9IRUFERVJTOworICAuaW50ZXJwICAgICAgICAgOiB7ICooLmludGVycCkgfQorICAubm90ZS5nbnUuYnVpbGQtaWQgOiB7ICooLm5vdGUuZ251LmJ1aWxkLWlkKSB9CisgIC5oYXNoICAgICAgICAgICA6IHsgKiguaGFzaCkgfQorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CisgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CisgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CisgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KKyAgLmdudS52ZXJzaW9uX2QgIDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CisgIC5nbnUudmVyc2lvbl9yICA6IHsgKiguZ251LnZlcnNpb25fcikgfQorICAucmVsLmR5biAgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbC5pbml0KQorICAgICAgKigucmVsLnRleHQgLnJlbC50ZXh0LiogLnJlbC5nbnUubGlua29uY2UudC4qKQorICAgICAgKigucmVsLmZpbmkpCisgICAgICAqKC5yZWwucm9kYXRhIC5yZWwucm9kYXRhLiogLnJlbC5nbnUubGlua29uY2Uuci4qKQorICAgICAgKigucmVsLmRhdGEucmVsLnJvKiAucmVsLmdudS5saW5rb25jZS5kLnJlbC5yby4qKQorICAgICAgKigucmVsLmRhdGEgLnJlbC5kYXRhLiogLnJlbC5nbnUubGlua29uY2UuZC4qKQorICAgICAgKigucmVsLnRkYXRhIC5yZWwudGRhdGEuKiAucmVsLmdudS5saW5rb25jZS50ZC4qKQorICAgICAgKigucmVsLnRic3MgLnJlbC50YnNzLiogLnJlbC5nbnUubGlua29uY2UudGIuKikKKyAgICAgICooLnJlbC5jdG9ycykKKyAgICAgICooLnJlbC5kdG9ycykKKyAgICAgICooLnJlbC5nb3QpCisgICAgICAqKC5yZWwuYnNzIC5yZWwuYnNzLiogLnJlbC5nbnUubGlua29uY2UuYi4qKQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgICooLnJlbC5pcGx0KQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfZW5kID0gLik7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9lbmQgPSAuKTsKKyAgICB9CisgIC5yZWxhLmR5biAgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5pbml0KQorICAgICAgKigucmVsYS50ZXh0IC5yZWxhLnRleHQuKiAucmVsYS5nbnUubGlua29uY2UudC4qKQorICAgICAgKigucmVsYS5maW5pKQorICAgICAgKigucmVsYS5yb2RhdGEgLnJlbGEucm9kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnIuKikKKyAgICAgICooLnJlbGEuZGF0YSAucmVsYS5kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLmQuKikKKyAgICAgICooLnJlbGEudGRhdGEgLnJlbGEudGRhdGEuKiAucmVsYS5nbnUubGlua29uY2UudGQuKikKKyAgICAgICooLnJlbGEudGJzcyAucmVsYS50YnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLnRiLiopCisgICAgICAqKC5yZWxhLmN0b3JzKQorICAgICAgKigucmVsYS5kdG9ycykKKyAgICAgICooLnJlbGEuZ290KQorICAgICAgKigucmVsYS5ic3MgLnJlbGEuYnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLmIuKikKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbF9pcGx0X3N0YXJ0ID0gLik7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9lbmQgPSAuKTsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9zdGFydCA9IC4pOworICAgICAgKigucmVsYS5pcGx0KQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X2VuZCA9IC4pOworICAgIH0KKyAgLnJlbC5wbHQgICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWwucGx0KQorICAgIH0KKyAgLnJlbGEucGx0ICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLnBsdCkKKyAgICB9CisgIC5pbml0ICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKC5pbml0KSkKKyAgfSA9MAorICAucGx0ICAgICAgICAgICAgOiB7ICooLnBsdCkgfQorICAuaXBsdCAgICAgICAgICAgOiB7ICooLmlwbHQpIH0KKyAgLnRleHQgICAgICAgICAgIDoKKyAgeworICAgICooLnRleHQudW5saWtlbHkgLnRleHQuKl91bmxpa2VseSkKKyAgICAqKC50ZXh0IC5zdHViIC50ZXh0LiogLmdudS5saW5rb25jZS50LiopCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgICAgKiguZ2x1ZV83dCkgKiguZ2x1ZV83KSAqKC52ZnAxMV92ZW5lZXIpICooLnY0X2J4KQorICB9ID0wCisgIC5maW5pICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKC5maW5pKSkKKyAgfSA9MAorICBQUk9WSURFIChfX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKF9ldGV4dCA9IC4pOworICBQUk9WSURFIChldGV4dCA9IC4pOworICAucm9kYXRhICAgICAgICAgOiB7ICooLnJvZGF0YSAucm9kYXRhLiogLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJvZGF0YTEgICAgICAgIDogeyAqKC5yb2RhdGExKSB9CisgIC5BUk0uZXh0YWIgICA6IHsgKiguQVJNLmV4dGFiKiAuZ251LmxpbmtvbmNlLmFybWV4dGFiLiopIH0KKyAgIF9fZXhpZHhfc3RhcnQgPSAuOworICAuQVJNLmV4aWR4ICAgOiB7ICooLkFSTS5leGlkeCogLmdudS5saW5rb25jZS5hcm1leGlkeC4qKSB9CisgICBfX2V4aWR4X2VuZCA9IC47CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAuID0gQUxJR04gKENPTlNUQU5UIChNQVhQQUdFU0laRSkpIC0gKChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gLikgJiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSAtIDEpKTsgLiA9IERBVEFfU0VHTUVOVF9BTElHTiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSwgQ09OU1RBTlQgKENPTU1PTlBBR0VTSVpFKSk7CisgIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyAgKi8KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9SVyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9SVyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCSAgOiB7ICooLnRkYXRhIC50ZGF0YS4qIC5nbnUubGlua29uY2UudGQuKikgfQorICAudGJzcwkJICA6IHsgKigudGJzcyAudGJzcy4qIC5nbnUubGlua29uY2UudGIuKikgKigudGNvbW1vbikgfQorICAucHJlaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmluaXRfYXJyYXkgICAgIDoKKyAgeworICAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgIEtFRVAgKCooLmluaXRfYXJyYXkpKQorICAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X2VuZCA9IC4pOworICB9CisgIC5maW5pX2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgICAgS0VFUCAoKihTT1JUKC5maW5pX2FycmF5LiopKSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X2VuZCA9IC4pOworICB9CisgIC5jdG9ycyAgICAgICAgICA6CisgIHsKKyAgICAvKiBnY2MgdXNlcyBjcnRiZWdpbi5vIHRvIGZpbmQgdGhlIHN0YXJ0IG9mCisgICAgICAgdGhlIGNvbnN0cnVjdG9ycywgc28gd2UgbWFrZSBzdXJlIGl0IGlzCisgICAgICAgZmlyc3QuICBCZWNhdXNlIHRoaXMgaXMgYSB3aWxkY2FyZCwgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciBpZiB0aGUgdXNlciBkb2VzIG5vdAorICAgICAgIGFjdHVhbGx5IGxpbmsgYWdhaW5zdCBjcnRiZWdpbi5vOyB0aGUKKyAgICAgICBsaW5rZXIgd29uJ3QgbG9vayBmb3IgYSBmaWxlIHRvIG1hdGNoIGEKKyAgICAgICB3aWxkY2FyZC4gIFRoZSB3aWxkY2FyZCBhbHNvIG1lYW5zIHRoYXQgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciB3aGljaCBkaXJlY3RvcnkgY3J0YmVnaW4ubworICAgICAgIGlzIGluLiAgKi8KKyAgICBLRUVQICgqY3J0YmVnaW4ubyguY3RvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguY3RvcnMpKQorICAgIC8qIFdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGUgLmN0b3Igc2VjdGlvbiBmcm9tCisgICAgICAgdGhlIGNydGVuZC5vIGZpbGUgdW50aWwgYWZ0ZXIgdGhlIHNvcnRlZCBjdG9ycy4KKyAgICAgICBUaGUgLmN0b3Igc2VjdGlvbiBmcm9tIHRoZSBjcnRlbmQgZmlsZSBjb250YWlucyB0aGUKKyAgICAgICBlbmQgb2YgY3RvcnMgbWFya2VyIGFuZCBpdCBtdXN0IGJlIGxhc3QgKi8KKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuY3RvcnMpKQorICAgIEtFRVAgKCooU09SVCguY3RvcnMuKikpKQorICAgIEtFRVAgKCooLmN0b3JzKSkKKyAgfQorICAuZHRvcnMgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmR0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmR0b3JzKSkKKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuZHRvcnMpKQorICAgIEtFRVAgKCooU09SVCguZHRvcnMuKikpKQorICAgIEtFRVAgKCooLmR0b3JzKSkKKyAgfQorICAuamNyICAgICAgICAgICAgOiB7IEtFRVAgKCooLmpjcikpIH0KKyAgLmRhdGEucmVsLnJvIDogeyAqKC5kYXRhLnJlbC5yby5sb2NhbCogLmdudS5saW5rb25jZS5kLnJlbC5yby5sb2NhbC4qKSAqKC5kYXRhLnJlbC5ybyogLmdudS5saW5rb25jZS5kLnJlbC5yby4qKSB9CisgIC5keW5hbWljICAgICAgICA6IHsgKiguZHluYW1pYykgfQorICAuID0gREFUQV9TRUdNRU5UX1JFTFJPX0VORCAoMCwgLik7CisgIC5nb3QgICAgICAgICAgICA6IHsgKiguZ290LnBsdCkgKiguaWdvdC5wbHQpICooLmdvdCkgKiguaWdvdCkgfQorICAuZGF0YSAgICAgICAgICAgOgorICB7CisgICAgUFJPVklERSAoX19kYXRhX3N0YXJ0ID0gLik7CisgICAgKiguZGF0YSAuZGF0YS4qIC5nbnUubGlua29uY2UuZC4qKQorICAgIFNPUlQoQ09OU1RSVUNUT1JTKQorICB9CisgIC5kYXRhMSAgICAgICAgICA6IHsgKiguZGF0YTEpIH0KKyAgX2VkYXRhID0gLjsgUFJPVklERSAoZWRhdGEgPSAuKTsKKyAgX19ic3Nfc3RhcnQgPSAuOworICBfX2Jzc19zdGFydF9fID0gLjsKKyAgLmJzcyAgICAgICAgICAgIDoKKyAgeworICAgKiguZHluYnNzKQorICAgKiguYnNzIC5ic3MuKiAuZ251LmxpbmtvbmNlLmIuKikKKyAgICooQ09NTU9OKQorICAgLyogQWxpZ24gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgLmJzcyBzZWN0aW9uIG9jY3VwaWVzIHNwYWNlIHVwIHRvCisgICAgICBfZW5kLiAgQWxpZ24gYWZ0ZXIgLmJzcyB0byBlbnN1cmUgY29ycmVjdCBhbGlnbm1lbnQgZXZlbiBpZiB0aGUKKyAgICAgIC5ic3Mgc2VjdGlvbiBkaXNhcHBlYXJzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGlucHV0IHNlY3Rpb25zLgorICAgICAgRklYTUU6IFdoeSBkbyB3ZSBuZWVkIGl0PyBXaGVuIHRoZXJlIGlzIG5vIC5ic3Mgc2VjdGlvbiwgd2UgZG9uJ3QKKyAgICAgIHBhZCB0aGUgLmRhdGEgc2VjdGlvbi4gICovCisgICAuID0gQUxJR04oLiAhPSAwID8gMzIgLyA4IDogMSk7CisgIH0KKyAgX2Jzc19lbmRfXyA9IC4gOyBfX2Jzc19lbmRfXyA9IC4gOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIF9fZW5kX18gPSAuIDsKKyAgX2VuZCA9IC47IFBST1ZJREUgKGVuZCA9IC4pOworICAuID0gREFUQV9TRUdNRU5UX0VORCAoLik7CisgIC8qIFN0YWJzIGRlYnVnZ2luZyBzZWN0aW9ucy4gICovCisgIC5zdGFiICAgICAgICAgIDAgOiB7ICooLnN0YWIpIH0KKyAgLnN0YWJzdHIgICAgICAgMCA6IHsgKiguc3RhYnN0cikgfQorICAuc3RhYi5leGNsICAgICAwIDogeyAqKC5zdGFiLmV4Y2wpIH0KKyAgLnN0YWIuZXhjbHN0ciAgMCA6IHsgKiguc3RhYi5leGNsc3RyKSB9CisgIC5zdGFiLmluZGV4ICAgIDAgOiB7ICooLnN0YWIuaW5kZXgpIH0KKyAgLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQorICAuY29tbWVudCAgICAgICAwIDogeyAqKC5jb21tZW50KSB9CisgIC8qIERXQVJGIGRlYnVnIHNlY3Rpb25zLgorICAgICBTeW1ib2xzIGluIHRoZSBEV0FSRiBkZWJ1Z2dpbmcgc2VjdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcKKyAgICAgb2YgdGhlIHNlY3Rpb24gc28gd2UgYmVnaW4gdGhlbSBhdCAwLiAgKi8KKyAgLyogRFdBUkYgMSAqLworICAuZGVidWcgICAgICAgICAgMCA6IHsgKiguZGVidWcpIH0KKyAgLmxpbmUgICAgICAgICAgIDAgOiB7ICooLmxpbmUpIH0KKyAgLyogR05VIERXQVJGIDEgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfc3JjaW5mbyAgMCA6IHsgKiguZGVidWdfc3JjaW5mbykgfQorICAuZGVidWdfc2ZuYW1lcyAgMCA6IHsgKiguZGVidWdfc2ZuYW1lcykgfQorICAvKiBEV0FSRiAxLjEgYW5kIERXQVJGIDIgKi8KKyAgLmRlYnVnX2FyYW5nZXMgIDAgOiB7ICooLmRlYnVnX2FyYW5nZXMpIH0KKyAgLmRlYnVnX3B1Ym5hbWVzIDAgOiB7ICooLmRlYnVnX3B1Ym5hbWVzKSB9CisgIC8qIERXQVJGIDIgKi8KKyAgLmRlYnVnX2luZm8gICAgIDAgOiB7ICooLmRlYnVnX2luZm8gLmdudS5saW5rb25jZS53aS4qKSB9CisgIC5kZWJ1Z19hYmJyZXYgICAwIDogeyAqKC5kZWJ1Z19hYmJyZXYpIH0KKyAgLmRlYnVnX2xpbmUgICAgIDAgOiB7ICooLmRlYnVnX2xpbmUpIH0KKyAgLmRlYnVnX2ZyYW1lICAgIDAgOiB7ICooLmRlYnVnX2ZyYW1lKSB9CisgIC5kZWJ1Z19zdHIgICAgICAwIDogeyAqKC5kZWJ1Z19zdHIpIH0KKyAgLmRlYnVnX2xvYyAgICAgIDAgOiB7ICooLmRlYnVnX2xvYykgfQorICAuZGVidWdfbWFjaW5mbyAgMCA6IHsgKiguZGVidWdfbWFjaW5mbykgfQorICAvKiBTR0kvTUlQUyBEV0FSRiAyIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3dlYWtuYW1lcyAwIDogeyAqKC5kZWJ1Z193ZWFrbmFtZXMpIH0KKyAgLmRlYnVnX2Z1bmNuYW1lcyAwIDogeyAqKC5kZWJ1Z19mdW5jbmFtZXMpIH0KKyAgLmRlYnVnX3R5cGVuYW1lcyAwIDogeyAqKC5kZWJ1Z190eXBlbmFtZXMpIH0KKyAgLmRlYnVnX3Zhcm5hbWVzICAwIDogeyAqKC5kZWJ1Z192YXJuYW1lcykgfQorICAvKiBEV0FSRiAzICovCisgIC5kZWJ1Z19wdWJ0eXBlcyAwIDogeyAqKC5kZWJ1Z19wdWJ0eXBlcykgfQorICAuZGVidWdfcmFuZ2VzICAgMCA6IHsgKiguZGVidWdfcmFuZ2VzKSB9CisgIC5nbnUuYXR0cmlidXRlcyAwIDogeyBLRUVQICgqKC5nbnUuYXR0cmlidXRlcykpIH0KKyAgLm5vdGUuZ251LmFybS5pZGVudCAwIDogeyBLRUVQICgqKC5ub3RlLmdudS5hcm0uaWRlbnQpKSB9CisgIC9ESVNDQVJELyA6IHsgKigubm90ZS5HTlUtc3RhY2spICooLmdudV9kZWJ1Z2xpbmspICooLmdudS5sdG9fKikgfQorfQpkaWZmIC0tZ2l0IGEvbGliL2xkc2NyaXB0cy9hcm1lbGZiX2xpbnV4X2VhYmkueGR3IGIvbGliL2xkc2NyaXB0cy9hcm1lbGZiX2xpbnV4X2VhYmkueGR3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjM2M3ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbGRzY3JpcHRzL2FybWVsZmJfbGludXhfZWFiaS54ZHcKQEAgLTAsMCArMSwyMjcgQEAKKy8qIFNjcmlwdCBmb3IgLXBpZSAteiBjb21icmVsb2MgLXogbm93IC16IHJlbHJvOiBwb3NpdGlvbiBpbmRlcGVuZGVudCBleGVjdXRhYmxlLCBjb21iaW5lICYgc29ydCByZWxvY3MgKi8KK09VVFBVVF9GT1JNQVQoImVsZjMyLWJpZ2FybSIsICJlbGYzMi1iaWdhcm0iLAorCSAgICAgICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VBUkNIX0RJUigiPS91c3IvbG9jYWwvbGliIik7IFNFQVJDSF9ESVIoIj0vbGliIik7IFNFQVJDSF9ESVIoIj0vdXNyL2xpYiIpOworU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC4gPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAwKSArIFNJWkVPRl9IRUFERVJTOworICAuaW50ZXJwICAgICAgICAgOiB7ICooLmludGVycCkgfQorICAubm90ZS5nbnUuYnVpbGQtaWQgOiB7ICooLm5vdGUuZ251LmJ1aWxkLWlkKSB9CisgIC5oYXNoICAgICAgICAgICA6IHsgKiguaGFzaCkgfQorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CisgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CisgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CisgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KKyAgLmdudS52ZXJzaW9uX2QgIDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CisgIC5nbnUudmVyc2lvbl9yICA6IHsgKiguZ251LnZlcnNpb25fcikgfQorICAucmVsLmR5biAgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbC5pbml0KQorICAgICAgKigucmVsLnRleHQgLnJlbC50ZXh0LiogLnJlbC5nbnUubGlua29uY2UudC4qKQorICAgICAgKigucmVsLmZpbmkpCisgICAgICAqKC5yZWwucm9kYXRhIC5yZWwucm9kYXRhLiogLnJlbC5nbnUubGlua29uY2Uuci4qKQorICAgICAgKigucmVsLmRhdGEucmVsLnJvKiAucmVsLmdudS5saW5rb25jZS5kLnJlbC5yby4qKQorICAgICAgKigucmVsLmRhdGEgLnJlbC5kYXRhLiogLnJlbC5nbnUubGlua29uY2UuZC4qKQorICAgICAgKigucmVsLnRkYXRhIC5yZWwudGRhdGEuKiAucmVsLmdudS5saW5rb25jZS50ZC4qKQorICAgICAgKigucmVsLnRic3MgLnJlbC50YnNzLiogLnJlbC5nbnUubGlua29uY2UudGIuKikKKyAgICAgICooLnJlbC5jdG9ycykKKyAgICAgICooLnJlbC5kdG9ycykKKyAgICAgICooLnJlbC5nb3QpCisgICAgICAqKC5yZWwuYnNzIC5yZWwuYnNzLiogLnJlbC5nbnUubGlua29uY2UuYi4qKQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgICooLnJlbC5pcGx0KQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfZW5kID0gLik7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9lbmQgPSAuKTsKKyAgICB9CisgIC5yZWxhLmR5biAgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5pbml0KQorICAgICAgKigucmVsYS50ZXh0IC5yZWxhLnRleHQuKiAucmVsYS5nbnUubGlua29uY2UudC4qKQorICAgICAgKigucmVsYS5maW5pKQorICAgICAgKigucmVsYS5yb2RhdGEgLnJlbGEucm9kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnIuKikKKyAgICAgICooLnJlbGEuZGF0YSAucmVsYS5kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLmQuKikKKyAgICAgICooLnJlbGEudGRhdGEgLnJlbGEudGRhdGEuKiAucmVsYS5nbnUubGlua29uY2UudGQuKikKKyAgICAgICooLnJlbGEudGJzcyAucmVsYS50YnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLnRiLiopCisgICAgICAqKC5yZWxhLmN0b3JzKQorICAgICAgKigucmVsYS5kdG9ycykKKyAgICAgICooLnJlbGEuZ290KQorICAgICAgKigucmVsYS5ic3MgLnJlbGEuYnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLmIuKikKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbF9pcGx0X3N0YXJ0ID0gLik7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9lbmQgPSAuKTsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9zdGFydCA9IC4pOworICAgICAgKigucmVsYS5pcGx0KQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X2VuZCA9IC4pOworICAgIH0KKyAgLnJlbC5wbHQgICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWwucGx0KQorICAgIH0KKyAgLnJlbGEucGx0ICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLnBsdCkKKyAgICB9CisgIC5pbml0ICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKC5pbml0KSkKKyAgfSA9MAorICAucGx0ICAgICAgICAgICAgOiB7ICooLnBsdCkgfQorICAuaXBsdCAgICAgICAgICAgOiB7ICooLmlwbHQpIH0KKyAgLnRleHQgICAgICAgICAgIDoKKyAgeworICAgICooLnRleHQudW5saWtlbHkgLnRleHQuKl91bmxpa2VseSkKKyAgICAqKC50ZXh0IC5zdHViIC50ZXh0LiogLmdudS5saW5rb25jZS50LiopCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgICAgKiguZ2x1ZV83dCkgKiguZ2x1ZV83KSAqKC52ZnAxMV92ZW5lZXIpICooLnY0X2J4KQorICB9ID0wCisgIC5maW5pICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKC5maW5pKSkKKyAgfSA9MAorICBQUk9WSURFIChfX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKF9ldGV4dCA9IC4pOworICBQUk9WSURFIChldGV4dCA9IC4pOworICAucm9kYXRhICAgICAgICAgOiB7ICooLnJvZGF0YSAucm9kYXRhLiogLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJvZGF0YTEgICAgICAgIDogeyAqKC5yb2RhdGExKSB9CisgIC5BUk0uZXh0YWIgICA6IHsgKiguQVJNLmV4dGFiKiAuZ251LmxpbmtvbmNlLmFybWV4dGFiLiopIH0KKyAgIF9fZXhpZHhfc3RhcnQgPSAuOworICAuQVJNLmV4aWR4ICAgOiB7ICooLkFSTS5leGlkeCogLmdudS5saW5rb25jZS5hcm1leGlkeC4qKSB9CisgICBfX2V4aWR4X2VuZCA9IC47CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAuID0gQUxJR04gKENPTlNUQU5UIChNQVhQQUdFU0laRSkpIC0gKChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gLikgJiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSAtIDEpKTsgLiA9IERBVEFfU0VHTUVOVF9BTElHTiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSwgQ09OU1RBTlQgKENPTU1PTlBBR0VTSVpFKSk7CisgIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyAgKi8KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9SVyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9SVyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCSAgOiB7ICooLnRkYXRhIC50ZGF0YS4qIC5nbnUubGlua29uY2UudGQuKikgfQorICAudGJzcwkJICA6IHsgKigudGJzcyAudGJzcy4qIC5nbnUubGlua29uY2UudGIuKikgKigudGNvbW1vbikgfQorICAucHJlaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmluaXRfYXJyYXkgICAgIDoKKyAgeworICAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgIEtFRVAgKCooLmluaXRfYXJyYXkpKQorICAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X2VuZCA9IC4pOworICB9CisgIC5maW5pX2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgICAgS0VFUCAoKihTT1JUKC5maW5pX2FycmF5LiopKSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X2VuZCA9IC4pOworICB9CisgIC5jdG9ycyAgICAgICAgICA6CisgIHsKKyAgICAvKiBnY2MgdXNlcyBjcnRiZWdpbi5vIHRvIGZpbmQgdGhlIHN0YXJ0IG9mCisgICAgICAgdGhlIGNvbnN0cnVjdG9ycywgc28gd2UgbWFrZSBzdXJlIGl0IGlzCisgICAgICAgZmlyc3QuICBCZWNhdXNlIHRoaXMgaXMgYSB3aWxkY2FyZCwgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciBpZiB0aGUgdXNlciBkb2VzIG5vdAorICAgICAgIGFjdHVhbGx5IGxpbmsgYWdhaW5zdCBjcnRiZWdpbi5vOyB0aGUKKyAgICAgICBsaW5rZXIgd29uJ3QgbG9vayBmb3IgYSBmaWxlIHRvIG1hdGNoIGEKKyAgICAgICB3aWxkY2FyZC4gIFRoZSB3aWxkY2FyZCBhbHNvIG1lYW5zIHRoYXQgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciB3aGljaCBkaXJlY3RvcnkgY3J0YmVnaW4ubworICAgICAgIGlzIGluLiAgKi8KKyAgICBLRUVQICgqY3J0YmVnaW4ubyguY3RvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguY3RvcnMpKQorICAgIC8qIFdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGUgLmN0b3Igc2VjdGlvbiBmcm9tCisgICAgICAgdGhlIGNydGVuZC5vIGZpbGUgdW50aWwgYWZ0ZXIgdGhlIHNvcnRlZCBjdG9ycy4KKyAgICAgICBUaGUgLmN0b3Igc2VjdGlvbiBmcm9tIHRoZSBjcnRlbmQgZmlsZSBjb250YWlucyB0aGUKKyAgICAgICBlbmQgb2YgY3RvcnMgbWFya2VyIGFuZCBpdCBtdXN0IGJlIGxhc3QgKi8KKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuY3RvcnMpKQorICAgIEtFRVAgKCooU09SVCguY3RvcnMuKikpKQorICAgIEtFRVAgKCooLmN0b3JzKSkKKyAgfQorICAuZHRvcnMgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmR0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmR0b3JzKSkKKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuZHRvcnMpKQorICAgIEtFRVAgKCooU09SVCguZHRvcnMuKikpKQorICAgIEtFRVAgKCooLmR0b3JzKSkKKyAgfQorICAuamNyICAgICAgICAgICAgOiB7IEtFRVAgKCooLmpjcikpIH0KKyAgLmRhdGEucmVsLnJvIDogeyAqKC5kYXRhLnJlbC5yby5sb2NhbCogLmdudS5saW5rb25jZS5kLnJlbC5yby5sb2NhbC4qKSAqKC5kYXRhLnJlbC5ybyogLmdudS5saW5rb25jZS5kLnJlbC5yby4qKSB9CisgIC5keW5hbWljICAgICAgICA6IHsgKiguZHluYW1pYykgfQorICAuZ290ICAgICAgICAgICAgOiB7ICooLmdvdC5wbHQpICooLmlnb3QucGx0KSAqKC5nb3QpICooLmlnb3QpIH0KKyAgLiA9IERBVEFfU0VHTUVOVF9SRUxST19FTkQgKDAsIC4pOworICAuZGF0YSAgICAgICAgICAgOgorICB7CisgICAgUFJPVklERSAoX19kYXRhX3N0YXJ0ID0gLik7CisgICAgKiguZGF0YSAuZGF0YS4qIC5nbnUubGlua29uY2UuZC4qKQorICAgIFNPUlQoQ09OU1RSVUNUT1JTKQorICB9CisgIC5kYXRhMSAgICAgICAgICA6IHsgKiguZGF0YTEpIH0KKyAgX2VkYXRhID0gLjsgUFJPVklERSAoZWRhdGEgPSAuKTsKKyAgX19ic3Nfc3RhcnQgPSAuOworICBfX2Jzc19zdGFydF9fID0gLjsKKyAgLmJzcyAgICAgICAgICAgIDoKKyAgeworICAgKiguZHluYnNzKQorICAgKiguYnNzIC5ic3MuKiAuZ251LmxpbmtvbmNlLmIuKikKKyAgICooQ09NTU9OKQorICAgLyogQWxpZ24gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgLmJzcyBzZWN0aW9uIG9jY3VwaWVzIHNwYWNlIHVwIHRvCisgICAgICBfZW5kLiAgQWxpZ24gYWZ0ZXIgLmJzcyB0byBlbnN1cmUgY29ycmVjdCBhbGlnbm1lbnQgZXZlbiBpZiB0aGUKKyAgICAgIC5ic3Mgc2VjdGlvbiBkaXNhcHBlYXJzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGlucHV0IHNlY3Rpb25zLgorICAgICAgRklYTUU6IFdoeSBkbyB3ZSBuZWVkIGl0PyBXaGVuIHRoZXJlIGlzIG5vIC5ic3Mgc2VjdGlvbiwgd2UgZG9uJ3QKKyAgICAgIHBhZCB0aGUgLmRhdGEgc2VjdGlvbi4gICovCisgICAuID0gQUxJR04oLiAhPSAwID8gMzIgLyA4IDogMSk7CisgIH0KKyAgX2Jzc19lbmRfXyA9IC4gOyBfX2Jzc19lbmRfXyA9IC4gOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIF9fZW5kX18gPSAuIDsKKyAgX2VuZCA9IC47IFBST1ZJREUgKGVuZCA9IC4pOworICAuID0gREFUQV9TRUdNRU5UX0VORCAoLik7CisgIC8qIFN0YWJzIGRlYnVnZ2luZyBzZWN0aW9ucy4gICovCisgIC5zdGFiICAgICAgICAgIDAgOiB7ICooLnN0YWIpIH0KKyAgLnN0YWJzdHIgICAgICAgMCA6IHsgKiguc3RhYnN0cikgfQorICAuc3RhYi5leGNsICAgICAwIDogeyAqKC5zdGFiLmV4Y2wpIH0KKyAgLnN0YWIuZXhjbHN0ciAgMCA6IHsgKiguc3RhYi5leGNsc3RyKSB9CisgIC5zdGFiLmluZGV4ICAgIDAgOiB7ICooLnN0YWIuaW5kZXgpIH0KKyAgLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQorICAuY29tbWVudCAgICAgICAwIDogeyAqKC5jb21tZW50KSB9CisgIC8qIERXQVJGIGRlYnVnIHNlY3Rpb25zLgorICAgICBTeW1ib2xzIGluIHRoZSBEV0FSRiBkZWJ1Z2dpbmcgc2VjdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcKKyAgICAgb2YgdGhlIHNlY3Rpb24gc28gd2UgYmVnaW4gdGhlbSBhdCAwLiAgKi8KKyAgLyogRFdBUkYgMSAqLworICAuZGVidWcgICAgICAgICAgMCA6IHsgKiguZGVidWcpIH0KKyAgLmxpbmUgICAgICAgICAgIDAgOiB7ICooLmxpbmUpIH0KKyAgLyogR05VIERXQVJGIDEgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfc3JjaW5mbyAgMCA6IHsgKiguZGVidWdfc3JjaW5mbykgfQorICAuZGVidWdfc2ZuYW1lcyAgMCA6IHsgKiguZGVidWdfc2ZuYW1lcykgfQorICAvKiBEV0FSRiAxLjEgYW5kIERXQVJGIDIgKi8KKyAgLmRlYnVnX2FyYW5nZXMgIDAgOiB7ICooLmRlYnVnX2FyYW5nZXMpIH0KKyAgLmRlYnVnX3B1Ym5hbWVzIDAgOiB7ICooLmRlYnVnX3B1Ym5hbWVzKSB9CisgIC8qIERXQVJGIDIgKi8KKyAgLmRlYnVnX2luZm8gICAgIDAgOiB7ICooLmRlYnVnX2luZm8gLmdudS5saW5rb25jZS53aS4qKSB9CisgIC5kZWJ1Z19hYmJyZXYgICAwIDogeyAqKC5kZWJ1Z19hYmJyZXYpIH0KKyAgLmRlYnVnX2xpbmUgICAgIDAgOiB7ICooLmRlYnVnX2xpbmUpIH0KKyAgLmRlYnVnX2ZyYW1lICAgIDAgOiB7ICooLmRlYnVnX2ZyYW1lKSB9CisgIC5kZWJ1Z19zdHIgICAgICAwIDogeyAqKC5kZWJ1Z19zdHIpIH0KKyAgLmRlYnVnX2xvYyAgICAgIDAgOiB7ICooLmRlYnVnX2xvYykgfQorICAuZGVidWdfbWFjaW5mbyAgMCA6IHsgKiguZGVidWdfbWFjaW5mbykgfQorICAvKiBTR0kvTUlQUyBEV0FSRiAyIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3dlYWtuYW1lcyAwIDogeyAqKC5kZWJ1Z193ZWFrbmFtZXMpIH0KKyAgLmRlYnVnX2Z1bmNuYW1lcyAwIDogeyAqKC5kZWJ1Z19mdW5jbmFtZXMpIH0KKyAgLmRlYnVnX3R5cGVuYW1lcyAwIDogeyAqKC5kZWJ1Z190eXBlbmFtZXMpIH0KKyAgLmRlYnVnX3Zhcm5hbWVzICAwIDogeyAqKC5kZWJ1Z192YXJuYW1lcykgfQorICAvKiBEV0FSRiAzICovCisgIC5kZWJ1Z19wdWJ0eXBlcyAwIDogeyAqKC5kZWJ1Z19wdWJ0eXBlcykgfQorICAuZGVidWdfcmFuZ2VzICAgMCA6IHsgKiguZGVidWdfcmFuZ2VzKSB9CisgIC5nbnUuYXR0cmlidXRlcyAwIDogeyBLRUVQICgqKC5nbnUuYXR0cmlidXRlcykpIH0KKyAgLm5vdGUuZ251LmFybS5pZGVudCAwIDogeyBLRUVQICgqKC5ub3RlLmdudS5hcm0uaWRlbnQpKSB9CisgIC9ESVNDQVJELyA6IHsgKigubm90ZS5HTlUtc3RhY2spICooLmdudV9kZWJ1Z2xpbmspICooLmdudS5sdG9fKikgfQorfQpkaWZmIC0tZ2l0IGEvbGliL2xkc2NyaXB0cy9hcm1lbGZiX2xpbnV4X2VhYmkueG4gYi9saWIvbGRzY3JpcHRzL2FybWVsZmJfbGludXhfZWFiaS54bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDM4Mjk0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2xkc2NyaXB0cy9hcm1lbGZiX2xpbnV4X2VhYmkueG4KQEAgLTAsMCArMSwyMjQgQEAKKy8qIFNjcmlwdCBmb3IgLW46IG1peCB0ZXh0IGFuZCBkYXRhIG9uIHNhbWUgcGFnZSAqLworT1VUUFVUX0ZPUk1BVCgiZWxmMzItYmlnYXJtIiwgImVsZjMyLWJpZ2FybSIsCisJICAgICAgImVsZjMyLWxpdHRsZWFybSIpCitPVVRQVVRfQVJDSChhcm0pCitFTlRSWShfc3RhcnQpCitTRUFSQ0hfRElSKCI9L3Vzci9sb2NhbC9saWIiKTsgU0VBUkNIX0RJUigiPS9saWIiKTsgU0VBUkNIX0RJUigiPS91c3IvbGliIik7CitTRUNUSU9OUworeworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgUFJPVklERSAoX19leGVjdXRhYmxlX3N0YXJ0ID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHgwMDAwODAwMCkpOyAuID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHgwMDAwODAwMCkgKyBTSVpFT0ZfSEVBREVSUzsKKyAgLmludGVycCAgICAgICAgIDogeyAqKC5pbnRlcnApIH0KKyAgLm5vdGUuZ251LmJ1aWxkLWlkIDogeyAqKC5ub3RlLmdudS5idWlsZC1pZCkgfQorICAuaGFzaCAgICAgICAgICAgOiB7ICooLmhhc2gpIH0KKyAgLmdudS5oYXNoICAgICAgIDogeyAqKC5nbnUuaGFzaCkgfQorICAuZHluc3ltICAgICAgICAgOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyICAgICAgICAgOiB7ICooLmR5bnN0cikgfQorICAuZ251LnZlcnNpb24gICAgOiB7ICooLmdudS52ZXJzaW9uKSB9CisgIC5nbnUudmVyc2lvbl9kICA6IHsgKiguZ251LnZlcnNpb25fZCkgfQorICAuZ251LnZlcnNpb25fciAgOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KKyAgLnJlbC5pbml0ICAgICAgIDogeyAqKC5yZWwuaW5pdCkgfQorICAucmVsYS5pbml0ICAgICAgOiB7ICooLnJlbGEuaW5pdCkgfQorICAucmVsLnRleHQgICAgICAgOiB7ICooLnJlbC50ZXh0IC5yZWwudGV4dC4qIC5yZWwuZ251LmxpbmtvbmNlLnQuKikgfQorICAucmVsYS50ZXh0ICAgICAgOiB7ICooLnJlbGEudGV4dCAucmVsYS50ZXh0LiogLnJlbGEuZ251LmxpbmtvbmNlLnQuKikgfQorICAucmVsLmZpbmkgICAgICAgOiB7ICooLnJlbC5maW5pKSB9CisgIC5yZWxhLmZpbmkgICAgICA6IHsgKigucmVsYS5maW5pKSB9CisgIC5yZWwucm9kYXRhICAgICA6IHsgKigucmVsLnJvZGF0YSAucmVsLnJvZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnIuKikgfQorICAucmVsYS5yb2RhdGEgICAgOiB7ICooLnJlbGEucm9kYXRhIC5yZWxhLnJvZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJlbC5kYXRhLnJlbC5ybyAgIDogeyAqKC5yZWwuZGF0YS5yZWwucm8qIC5yZWwuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLnJlbGEuZGF0YS5yZWwucm8gICA6IHsgKigucmVsYS5kYXRhLnJlbC5ybyogLnJlbGEuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLnJlbC5kYXRhICAgICAgIDogeyAqKC5yZWwuZGF0YSAucmVsLmRhdGEuKiAucmVsLmdudS5saW5rb25jZS5kLiopIH0KKyAgLnJlbGEuZGF0YSAgICAgIDogeyAqKC5yZWxhLmRhdGEgLnJlbGEuZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5kLiopIH0KKyAgLnJlbC50ZGF0YQkgIDogeyAqKC5yZWwudGRhdGEgLnJlbC50ZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnJlbGEudGRhdGEJICA6IHsgKigucmVsYS50ZGF0YSAucmVsYS50ZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC5yZWwudGJzcwkgIDogeyAqKC5yZWwudGJzcyAucmVsLnRic3MuKiAucmVsLmdudS5saW5rb25jZS50Yi4qKSB9CisgIC5yZWxhLnRic3MJICA6IHsgKigucmVsYS50YnNzIC5yZWxhLnRic3MuKiAucmVsYS5nbnUubGlua29uY2UudGIuKikgfQorICAucmVsLmN0b3JzICAgICAgOiB7ICooLnJlbC5jdG9ycykgfQorICAucmVsYS5jdG9ycyAgICAgOiB7ICooLnJlbGEuY3RvcnMpIH0KKyAgLnJlbC5kdG9ycyAgICAgIDogeyAqKC5yZWwuZHRvcnMpIH0KKyAgLnJlbGEuZHRvcnMgICAgIDogeyAqKC5yZWxhLmR0b3JzKSB9CisgIC5yZWwuZ290ICAgICAgICA6IHsgKigucmVsLmdvdCkgfQorICAucmVsYS5nb3QgICAgICAgOiB7ICooLnJlbGEuZ290KSB9CisgIC5yZWwuYnNzICAgICAgICA6IHsgKigucmVsLmJzcyAucmVsLmJzcy4qIC5yZWwuZ251LmxpbmtvbmNlLmIuKikgfQorICAucmVsYS5ic3MgICAgICAgOiB7ICooLnJlbGEuYnNzIC5yZWxhLmJzcy4qIC5yZWxhLmdudS5saW5rb25jZS5iLiopIH0KKyAgLnJlbC5pcGx0ICAgICAgIDoKKyAgICB7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9zdGFydCA9IC4pOworICAgICAgKigucmVsLmlwbHQpCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9lbmQgPSAuKTsKKyAgICB9CisgIC5yZWxhLmlwbHQgICAgICA6CisgICAgeworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X3N0YXJ0ID0gLik7CisgICAgICAqKC5yZWxhLmlwbHQpCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfZW5kID0gLik7CisgICAgfQorICAucmVsLnBsdCAgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbC5wbHQpCisgICAgfQorICAucmVsYS5wbHQgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEucGx0KQorICAgIH0KKyAgLmluaXQgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooLmluaXQpKQorICB9ID0wCisgIC5wbHQgICAgICAgICAgICA6IHsgKigucGx0KSB9CisgIC5pcGx0ICAgICAgICAgICA6IHsgKiguaXBsdCkgfQorICAudGV4dCAgICAgICAgICAgOgorICB7CisgICAgKigudGV4dC51bmxpa2VseSAudGV4dC4qX3VubGlrZWx5KQorICAgICooLnRleHQgLnN0dWIgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKikKKyAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KKyAgICAqKC5nbnUud2FybmluZykKKyAgICAqKC5nbHVlXzd0KSAqKC5nbHVlXzcpICooLnZmcDExX3ZlbmVlcikgKigudjRfYngpCisgIH0gPTAKKyAgLmZpbmkgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooLmZpbmkpKQorICB9ID0wCisgIFBST1ZJREUgKF9fZXRleHQgPSAuKTsKKyAgUFJPVklERSAoX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgIC5yb2RhdGEgICAgICAgICA6IHsgKigucm9kYXRhIC5yb2RhdGEuKiAuZ251LmxpbmtvbmNlLnIuKikgfQorICAucm9kYXRhMSAgICAgICAgOiB7ICooLnJvZGF0YTEpIH0KKyAgLkFSTS5leHRhYiAgIDogeyAqKC5BUk0uZXh0YWIqIC5nbnUubGlua29uY2UuYXJtZXh0YWIuKikgfQorICAgX19leGlkeF9zdGFydCA9IC47CisgIC5BUk0uZXhpZHggICA6IHsgKiguQVJNLmV4aWR4KiAuZ251LmxpbmtvbmNlLmFybWV4aWR4LiopIH0KKyAgIF9fZXhpZHhfZW5kID0gLjsKKyAgLmVoX2ZyYW1lX2hkciA6IHsgKiguZWhfZnJhbWVfaGRyKSB9CisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUk8geyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogQWRqdXN0IHRoZSBhZGRyZXNzIGZvciB0aGUgZGF0YSBzZWdtZW50LiAgV2Ugd2FudCB0byBhZGp1c3QgdXAgdG8KKyAgICAgdGhlIHNhbWUgYWRkcmVzcyB3aXRoaW4gdGhlIHBhZ2Ugb24gdGhlIG5leHQgcGFnZSB1cC4gICovCisgIC4gPSBBTElHTiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSkgLSAoKENPTlNUQU5UIChNQVhQQUdFU0laRSkgLSAuKSAmIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gMSkpOyAuID0gREFUQV9TRUdNRU5UX0FMSUdOIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpLCBDT05TVEFOVCAoQ09NTU9OUEFHRVNJWkUpKTsKKyAgLyogRXhjZXB0aW9uIGhhbmRsaW5nICAqLworICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JXIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JXIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIFRocmVhZCBMb2NhbCBTdG9yYWdlIHNlY3Rpb25zICAqLworICAudGRhdGEJICA6IHsgKigudGRhdGEgLnRkYXRhLiogLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC50YnNzCQkgIDogeyAqKC50YnNzIC50YnNzLiogLmdudS5saW5rb25jZS50Yi4qKSAqKC50Y29tbW9uKSB9CisgIC5wcmVpbml0X2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICAgS0VFUCAoKihTT1JUKC5pbml0X2FycmF5LiopKSkKKyAgICAgS0VFUCAoKiguaW5pdF9hcnJheSkpCisgICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmZpbmlfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKC5maW5pX2FycmF5KSkKKyAgICBLRUVQICgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQorICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmN0b3JzICAgICAgICAgIDoKKyAgeworICAgIC8qIGdjYyB1c2VzIGNydGJlZ2luLm8gdG8gZmluZCB0aGUgc3RhcnQgb2YKKyAgICAgICB0aGUgY29uc3RydWN0b3JzLCBzbyB3ZSBtYWtlIHN1cmUgaXQgaXMKKyAgICAgICBmaXJzdC4gIEJlY2F1c2UgdGhpcyBpcyBhIHdpbGRjYXJkLCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSB1c2VyIGRvZXMgbm90CisgICAgICAgYWN0dWFsbHkgbGluayBhZ2FpbnN0IGNydGJlZ2luLm87IHRoZQorICAgICAgIGxpbmtlciB3b24ndCBsb29rIGZvciBhIGZpbGUgdG8gbWF0Y2ggYQorICAgICAgIHdpbGRjYXJkLiAgVGhlIHdpbGRjYXJkIGFsc28gbWVhbnMgdGhhdCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGRpcmVjdG9yeSBjcnRiZWdpbi5vCisgICAgICAgaXMgaW4uICAqLworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5jdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5jdG9ycykpCisgICAgLyogV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSAuY3RvciBzZWN0aW9uIGZyb20KKyAgICAgICB0aGUgY3J0ZW5kLm8gZmlsZSB1bnRpbCBhZnRlciB0aGUgc29ydGVkIGN0b3JzLgorICAgICAgIFRoZSAuY3RvciBzZWN0aW9uIGZyb20gdGhlIGNydGVuZCBmaWxlIGNvbnRhaW5zIHRoZQorICAgICAgIGVuZCBvZiBjdG9ycyBtYXJrZXIgYW5kIGl0IG11c3QgYmUgbGFzdCAqLworICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5jdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5jdG9ycy4qKSkpCisgICAgS0VFUCAoKiguY3RvcnMpKQorICB9CisgIC5kdG9ycyAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqY3J0YmVnaW4ubyguZHRvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguZHRvcnMpKQorICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5kdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5kdG9ycy4qKSkpCisgICAgS0VFUCAoKiguZHRvcnMpKQorICB9CisgIC5qY3IgICAgICAgICAgICA6IHsgS0VFUCAoKiguamNyKSkgfQorICAuZGF0YS5yZWwucm8gOiB7ICooLmRhdGEucmVsLnJvLmxvY2FsKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLmxvY2FsLiopICooLmRhdGEucmVsLnJvKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLmR5bmFtaWMgICAgICAgIDogeyAqKC5keW5hbWljKSB9CisgIC4gPSBEQVRBX1NFR01FTlRfUkVMUk9fRU5EICgwLCAuKTsKKyAgLmdvdCAgICAgICAgICAgIDogeyAqKC5nb3QucGx0KSAqKC5pZ290LnBsdCkgKiguZ290KSAqKC5pZ290KSB9CisgIC5kYXRhICAgICAgICAgICA6CisgIHsKKyAgICBQUk9WSURFIChfX2RhdGFfc3RhcnQgPSAuKTsKKyAgICAqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisgICAgU09SVChDT05TVFJVQ1RPUlMpCisgIH0KKyAgLmRhdGExICAgICAgICAgIDogeyAqKC5kYXRhMSkgfQorICBfZWRhdGEgPSAuOyBQUk9WSURFIChlZGF0YSA9IC4pOworICBfX2Jzc19zdGFydCA9IC47CisgIF9fYnNzX3N0YXJ0X18gPSAuOworICAuYnNzICAgICAgICAgICAgOgorICB7CisgICAqKC5keW5ic3MpCisgICAqKC5ic3MgLmJzcy4qIC5nbnUubGlua29uY2UuYi4qKQorICAgKihDT01NT04pCisgICAvKiBBbGlnbiBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSAuYnNzIHNlY3Rpb24gb2NjdXBpZXMgc3BhY2UgdXAgdG8KKyAgICAgIF9lbmQuICBBbGlnbiBhZnRlciAuYnNzIHRvIGVuc3VyZSBjb3JyZWN0IGFsaWdubWVudCBldmVuIGlmIHRoZQorICAgICAgLmJzcyBzZWN0aW9uIGRpc2FwcGVhcnMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gaW5wdXQgc2VjdGlvbnMuCisgICAgICBGSVhNRTogV2h5IGRvIHdlIG5lZWQgaXQ/IFdoZW4gdGhlcmUgaXMgbm8gLmJzcyBzZWN0aW9uLCB3ZSBkb24ndAorICAgICAgcGFkIHRoZSAuZGF0YSBzZWN0aW9uLiAgKi8KKyAgIC4gPSBBTElHTiguICE9IDAgPyAzMiAvIDggOiAxKTsKKyAgfQorICBfYnNzX2VuZF9fID0gLiA7IF9fYnNzX2VuZF9fID0gLiA7CisgIC4gPSBBTElHTigzMiAvIDgpOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgX19lbmRfXyA9IC4gOworICBfZW5kID0gLjsgUFJPVklERSAoZW5kID0gLik7CisgIC4gPSBEQVRBX1NFR01FTlRfRU5EICguKTsKKyAgLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KKyAgLnN0YWIgICAgICAgICAgMCA6IHsgKiguc3RhYikgfQorICAuc3RhYnN0ciAgICAgICAwIDogeyAqKC5zdGFic3RyKSB9CisgIC5zdGFiLmV4Y2wgICAgIDAgOiB7ICooLnN0YWIuZXhjbCkgfQorICAuc3RhYi5leGNsc3RyICAwIDogeyAqKC5zdGFiLmV4Y2xzdHIpIH0KKyAgLnN0YWIuaW5kZXggICAgMCA6IHsgKiguc3RhYi5pbmRleCkgfQorICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9CisgIC5jb21tZW50ICAgICAgIDAgOiB7ICooLmNvbW1lbnQpIH0KKyAgLyogRFdBUkYgZGVidWcgc2VjdGlvbnMuCisgICAgIFN5bWJvbHMgaW4gdGhlIERXQVJGIGRlYnVnZ2luZyBzZWN0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc2VjdGlvbiBzbyB3ZSBiZWdpbiB0aGVtIGF0IDAuICAqLworICAvKiBEV0FSRiAxICovCisgIC5kZWJ1ZyAgICAgICAgICAwIDogeyAqKC5kZWJ1ZykgfQorICAubGluZSAgICAgICAgICAgMCA6IHsgKigubGluZSkgfQorICAvKiBHTlUgRFdBUkYgMSBleHRlbnNpb25zICovCisgIC5kZWJ1Z19zcmNpbmZvICAwIDogeyAqKC5kZWJ1Z19zcmNpbmZvKSB9CisgIC5kZWJ1Z19zZm5hbWVzICAwIDogeyAqKC5kZWJ1Z19zZm5hbWVzKSB9CisgIC8qIERXQVJGIDEuMSBhbmQgRFdBUkYgMiAqLworICAuZGVidWdfYXJhbmdlcyAgMCA6IHsgKiguZGVidWdfYXJhbmdlcykgfQorICAuZGVidWdfcHVibmFtZXMgMCA6IHsgKiguZGVidWdfcHVibmFtZXMpIH0KKyAgLyogRFdBUkYgMiAqLworICAuZGVidWdfaW5mbyAgICAgMCA6IHsgKiguZGVidWdfaW5mbyAuZ251LmxpbmtvbmNlLndpLiopIH0KKyAgLmRlYnVnX2FiYnJldiAgIDAgOiB7ICooLmRlYnVnX2FiYnJldikgfQorICAuZGVidWdfbGluZSAgICAgMCA6IHsgKiguZGVidWdfbGluZSkgfQorICAuZGVidWdfZnJhbWUgICAgMCA6IHsgKiguZGVidWdfZnJhbWUpIH0KKyAgLmRlYnVnX3N0ciAgICAgIDAgOiB7ICooLmRlYnVnX3N0cikgfQorICAuZGVidWdfbG9jICAgICAgMCA6IHsgKiguZGVidWdfbG9jKSB9CisgIC5kZWJ1Z19tYWNpbmZvICAwIDogeyAqKC5kZWJ1Z19tYWNpbmZvKSB9CisgIC8qIFNHSS9NSVBTIERXQVJGIDIgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfd2Vha25hbWVzIDAgOiB7ICooLmRlYnVnX3dlYWtuYW1lcykgfQorICAuZGVidWdfZnVuY25hbWVzIDAgOiB7ICooLmRlYnVnX2Z1bmNuYW1lcykgfQorICAuZGVidWdfdHlwZW5hbWVzIDAgOiB7ICooLmRlYnVnX3R5cGVuYW1lcykgfQorICAuZGVidWdfdmFybmFtZXMgIDAgOiB7ICooLmRlYnVnX3Zhcm5hbWVzKSB9CisgIC8qIERXQVJGIDMgKi8KKyAgLmRlYnVnX3B1YnR5cGVzIDAgOiB7ICooLmRlYnVnX3B1YnR5cGVzKSB9CisgIC5kZWJ1Z19yYW5nZXMgICAwIDogeyAqKC5kZWJ1Z19yYW5nZXMpIH0KKyAgLmdudS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLmdudS5hdHRyaWJ1dGVzKSkgfQorICAubm90ZS5nbnUuYXJtLmlkZW50IDAgOiB7IEtFRVAgKCooLm5vdGUuZ251LmFybS5pZGVudCkpIH0KKyAgL0RJU0NBUkQvIDogeyAqKC5ub3RlLkdOVS1zdGFjaykgKiguZ251X2RlYnVnbGluaykgKiguZ251Lmx0b18qKSB9Cit9CmRpZmYgLS1naXQgYS9saWIvbGRzY3JpcHRzL2FybWVsZmJfbGludXhfZWFiaS54ciBiL2xpYi9sZHNjcmlwdHMvYXJtZWxmYl9saW51eF9lYWJpLnhyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMTllNmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbGRzY3JpcHRzL2FybWVsZmJfbGludXhfZWFiaS54cgpAQCAtMCwwICsxLDE2MyBAQAorLyogU2NyaXB0IGZvciBsZCAtcjogbGluayB3aXRob3V0IHJlbG9jYXRpb24gKi8KK09VVFBVVF9GT1JNQVQoImVsZjMyLWJpZ2FybSIsICJlbGYzMi1iaWdhcm0iLAorCSAgICAgICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorIC8qIEZvciBzb21lIHJlYXNvbiwgdGhlIFNvbGFyaXMgbGlua2VyIG1ha2VzIGJhZCBleGVjdXRhYmxlcworICBpZiBnbGQgLXIgaXMgdXNlZCBhbmQgdGhlIGludGVybWVkaWF0ZSBmaWxlIGhhcyBzZWN0aW9ucyBzdGFydGluZworICBhdCBub24temVybyBhZGRyZXNzZXMuICBDb3VsZCBiZSBhIFNvbGFyaXMgbGQgYnVnLCBjb3VsZCBiZSBhIEdOVSBsZAorICBidWcuICBCdXQgZm9yIG5vdyBhc3NpZ25pbmcgdGhlIHplcm8gdm1hcyB3b3Jrcy4gICovCitTRUNUSU9OUworeworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgLmludGVycCAgICAgICAwIDogeyAqKC5pbnRlcnApIH0KKyAgLm5vdGUuZ251LmJ1aWxkLWlkIDogeyAqKC5ub3RlLmdudS5idWlsZC1pZCkgfQorICAuaGFzaCAgICAgICAgIDAgOiB7ICooLmhhc2gpIH0KKyAgLmdudS5oYXNoICAgICAwIDogeyAqKC5nbnUuaGFzaCkgfQorICAuZHluc3ltICAgICAgIDAgOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyICAgICAgIDAgOiB7ICooLmR5bnN0cikgfQorICAuZ251LnZlcnNpb24gIDAgOiB7ICooLmdudS52ZXJzaW9uKSB9CisgIC5nbnUudmVyc2lvbl9kIDA6IHsgKiguZ251LnZlcnNpb25fZCkgfQorICAuZ251LnZlcnNpb25fciAwOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KKyAgLnJlbC5pbml0ICAgICAwIDogeyAqKC5yZWwuaW5pdCkgfQorICAucmVsYS5pbml0ICAgIDAgOiB7ICooLnJlbGEuaW5pdCkgfQorICAucmVsLnRleHQgICAgIDAgOiB7ICooLnJlbC50ZXh0KSB9CisgIC5yZWxhLnRleHQgICAgMCA6IHsgKigucmVsYS50ZXh0KSB9CisgIC5yZWwuZmluaSAgICAgMCA6IHsgKigucmVsLmZpbmkpIH0KKyAgLnJlbGEuZmluaSAgICAwIDogeyAqKC5yZWxhLmZpbmkpIH0KKyAgLnJlbC5yb2RhdGEgICAwIDogeyAqKC5yZWwucm9kYXRhKSB9CisgIC5yZWxhLnJvZGF0YSAgMCA6IHsgKigucmVsYS5yb2RhdGEpIH0KKyAgLnJlbC5kYXRhLnJlbC5ybyAwIDogeyAqKC5yZWwuZGF0YS5yZWwucm8pIH0KKyAgLnJlbGEuZGF0YS5yZWwucm8gMCA6IHsgKigucmVsYS5kYXRhLnJlbC5ybykgfQorICAucmVsLmRhdGEgICAgIDAgOiB7ICooLnJlbC5kYXRhKSB9CisgIC5yZWxhLmRhdGEgICAgMCA6IHsgKigucmVsYS5kYXRhKSB9CisgIC5yZWwudGRhdGEJMCA6IHsgKigucmVsLnRkYXRhKSB9CisgIC5yZWxhLnRkYXRhCTAgOiB7ICooLnJlbGEudGRhdGEpIH0KKyAgLnJlbC50YnNzCTAgOiB7ICooLnJlbC50YnNzKSB9CisgIC5yZWxhLnRic3MJMCA6IHsgKigucmVsYS50YnNzKSB9CisgIC5yZWwuY3RvcnMgICAgMCA6IHsgKigucmVsLmN0b3JzKSB9CisgIC5yZWxhLmN0b3JzICAgMCA6IHsgKigucmVsYS5jdG9ycykgfQorICAucmVsLmR0b3JzICAgIDAgOiB7ICooLnJlbC5kdG9ycykgfQorICAucmVsYS5kdG9ycyAgIDAgOiB7ICooLnJlbGEuZHRvcnMpIH0KKyAgLnJlbC5nb3QgICAgICAwIDogeyAqKC5yZWwuZ290KSB9CisgIC5yZWxhLmdvdCAgICAgMCA6IHsgKigucmVsYS5nb3QpIH0KKyAgLnJlbC5ic3MgICAgICAwIDogeyAqKC5yZWwuYnNzKSB9CisgIC5yZWxhLmJzcyAgICAgMCA6IHsgKigucmVsYS5ic3MpIH0KKyAgLnJlbC5pcGx0ICAgICAwIDoKKyAgICB7CisgICAgICAqKC5yZWwuaXBsdCkKKyAgICB9CisgIC5yZWxhLmlwbHQgICAgMCA6CisgICAgeworICAgICAgKigucmVsYS5pcGx0KQorICAgIH0KKyAgLnJlbC5wbHQgICAgICAwIDoKKyAgICB7CisgICAgICAqKC5yZWwucGx0KQorICAgIH0KKyAgLnJlbGEucGx0ICAgICAwIDoKKyAgICB7CisgICAgICAqKC5yZWxhLnBsdCkKKyAgICB9CisgIC5pbml0ICAgICAgICAgMCA6CisgIHsKKyAgICBLRUVQICgqKC5pbml0KSkKKyAgfSA9MAorICAucGx0ICAgICAgICAgIDAgOiB7ICooLnBsdCkgfQorICAuaXBsdCAgICAgICAgIDAgOiB7ICooLmlwbHQpIH0KKyAgLnRleHQgICAgICAgICAwIDoKKyAgeworICAgICooLnRleHQgLnN0dWIpCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgIH0gPTAKKyAgLmZpbmkgICAgICAgICAwIDoKKyAgeworICAgIEtFRVAgKCooLmZpbmkpKQorICB9ID0wCisgIC5yb2RhdGEgICAgICAgMCA6IHsgKigucm9kYXRhKSB9CisgIC5yb2RhdGExICAgICAgMCA6IHsgKigucm9kYXRhMSkgfQorICAuQVJNLmV4dGFiIDAgOiB7ICooLkFSTS5leHRhYikgfQorICAuQVJNLmV4aWR4IDAgOiB7ICooLkFSTS5leGlkeCkgfQorICAuZWhfZnJhbWVfaGRyIDogeyAqKC5laF9mcmFtZV9oZHIpIH0KKyAgLmVoX2ZyYW1lICAgICAwIDogT05MWV9JRl9STyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAwIDogT05MWV9JRl9STyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQuICBXZSB3YW50IHRvIGFkanVzdCB1cCB0bworICAgICB0aGUgc2FtZSBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZSBvbiB0aGUgbmV4dCBwYWdlIHVwLiAgKi8KKyAgLyogRXhjZXB0aW9uIGhhbmRsaW5nICAqLworICAuZWhfZnJhbWUgICAgIDAgOiBPTkxZX0lGX1JXIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlIDAgOiBPTkxZX0lGX1JXIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIFRocmVhZCBMb2NhbCBTdG9yYWdlIHNlY3Rpb25zICAqLworICAudGRhdGEJMCA6IHsgKigudGRhdGEpIH0KKyAgLnRic3MJCTAgOiB7ICooLnRic3MpIH0KKyAgLnByZWluaXRfYXJyYXkgICAwIDoKKyAgeworICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkpKQorICB9CisgIC5pbml0X2FycmF5ICAgMCA6CisgIHsKKyAgICAgS0VFUCAoKihTT1JUKC5pbml0X2FycmF5LiopKSkKKyAgICAgS0VFUCAoKiguaW5pdF9hcnJheSkpCisgIH0KKyAgLmZpbmlfYXJyYXkgICAwIDoKKyAgeworICAgIEtFRVAgKCooLmZpbmlfYXJyYXkpKQorICAgIEtFRVAgKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgIH0KKyAgLmpjciAgICAgICAgICAwIDogeyBLRUVQICgqKC5qY3IpKSB9CisgIC5keW5hbWljICAgICAgMCA6IHsgKiguZHluYW1pYykgfQorICAuZ290ICAgICAgICAgIDAgOiB7ICooLmdvdC5wbHQpICooLmlnb3QucGx0KSAqKC5nb3QpICooLmlnb3QpIH0KKyAgLmRhdGEgICAgICAgICAwIDoKKyAgeworICAgICooLmRhdGEpCisgIH0KKyAgLmRhdGExICAgICAgICAwIDogeyAqKC5kYXRhMSkgfQorICAuYnNzICAgICAgICAgIDAgOgorICB7CisgICAqKC5keW5ic3MpCisgICAqKC5ic3MpCisgICAqKENPTU1PTikKKyAgIC8qIEFsaWduIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIC5ic3Mgc2VjdGlvbiBvY2N1cGllcyBzcGFjZSB1cCB0bworICAgICAgX2VuZC4gIEFsaWduIGFmdGVyIC5ic3MgdG8gZW5zdXJlIGNvcnJlY3QgYWxpZ25tZW50IGV2ZW4gaWYgdGhlCisgICAgICAuYnNzIHNlY3Rpb24gZGlzYXBwZWFycyBiZWNhdXNlIHRoZXJlIGFyZSBubyBpbnB1dCBzZWN0aW9ucy4KKyAgICAgIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCBpdD8gV2hlbiB0aGVyZSBpcyBubyAuYnNzIHNlY3Rpb24sIHdlIGRvbid0CisgICAgICBwYWQgdGhlIC5kYXRhIHNlY3Rpb24uICAqLworICB9CisgIC8qIFN0YWJzIGRlYnVnZ2luZyBzZWN0aW9ucy4gICovCisgIC5zdGFiICAgICAgICAgIDAgOiB7ICooLnN0YWIpIH0KKyAgLnN0YWJzdHIgICAgICAgMCA6IHsgKiguc3RhYnN0cikgfQorICAuc3RhYi5leGNsICAgICAwIDogeyAqKC5zdGFiLmV4Y2wpIH0KKyAgLnN0YWIuZXhjbHN0ciAgMCA6IHsgKiguc3RhYi5leGNsc3RyKSB9CisgIC5zdGFiLmluZGV4ICAgIDAgOiB7ICooLnN0YWIuaW5kZXgpIH0KKyAgLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQorICAuY29tbWVudCAgICAgICAwIDogeyAqKC5jb21tZW50KSB9CisgIC8qIERXQVJGIGRlYnVnIHNlY3Rpb25zLgorICAgICBTeW1ib2xzIGluIHRoZSBEV0FSRiBkZWJ1Z2dpbmcgc2VjdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcKKyAgICAgb2YgdGhlIHNlY3Rpb24gc28gd2UgYmVnaW4gdGhlbSBhdCAwLiAgKi8KKyAgLyogRFdBUkYgMSAqLworICAuZGVidWcgICAgICAgICAgMCA6IHsgKiguZGVidWcpIH0KKyAgLmxpbmUgICAgICAgICAgIDAgOiB7ICooLmxpbmUpIH0KKyAgLyogR05VIERXQVJGIDEgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfc3JjaW5mbyAgMCA6IHsgKiguZGVidWdfc3JjaW5mbykgfQorICAuZGVidWdfc2ZuYW1lcyAgMCA6IHsgKiguZGVidWdfc2ZuYW1lcykgfQorICAvKiBEV0FSRiAxLjEgYW5kIERXQVJGIDIgKi8KKyAgLmRlYnVnX2FyYW5nZXMgIDAgOiB7ICooLmRlYnVnX2FyYW5nZXMpIH0KKyAgLmRlYnVnX3B1Ym5hbWVzIDAgOiB7ICooLmRlYnVnX3B1Ym5hbWVzKSB9CisgIC8qIERXQVJGIDIgKi8KKyAgLmRlYnVnX2luZm8gICAgIDAgOiB7ICooLmRlYnVnX2luZm8pIH0KKyAgLmRlYnVnX2FiYnJldiAgIDAgOiB7ICooLmRlYnVnX2FiYnJldikgfQorICAuZGVidWdfbGluZSAgICAgMCA6IHsgKiguZGVidWdfbGluZSkgfQorICAuZGVidWdfZnJhbWUgICAgMCA6IHsgKiguZGVidWdfZnJhbWUpIH0KKyAgLmRlYnVnX3N0ciAgICAgIDAgOiB7ICooLmRlYnVnX3N0cikgfQorICAuZGVidWdfbG9jICAgICAgMCA6IHsgKiguZGVidWdfbG9jKSB9CisgIC5kZWJ1Z19tYWNpbmZvICAwIDogeyAqKC5kZWJ1Z19tYWNpbmZvKSB9CisgIC8qIFNHSS9NSVBTIERXQVJGIDIgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfd2Vha25hbWVzIDAgOiB7ICooLmRlYnVnX3dlYWtuYW1lcykgfQorICAuZGVidWdfZnVuY25hbWVzIDAgOiB7ICooLmRlYnVnX2Z1bmNuYW1lcykgfQorICAuZGVidWdfdHlwZW5hbWVzIDAgOiB7ICooLmRlYnVnX3R5cGVuYW1lcykgfQorICAuZGVidWdfdmFybmFtZXMgIDAgOiB7ICooLmRlYnVnX3Zhcm5hbWVzKSB9CisgIC8qIERXQVJGIDMgKi8KKyAgLmRlYnVnX3B1YnR5cGVzIDAgOiB7ICooLmRlYnVnX3B1YnR5cGVzKSB9CisgIC5kZWJ1Z19yYW5nZXMgICAwIDogeyAqKC5kZWJ1Z19yYW5nZXMpIH0KKyAgLmdudS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLmdudS5hdHRyaWJ1dGVzKSkgfQorICAubm90ZS5nbnUuYXJtLmlkZW50IDAgOiB7IEtFRVAgKCooLm5vdGUuZ251LmFybS5pZGVudCkpIH0KK30KZGlmZiAtLWdpdCBhL2xpYi9sZHNjcmlwdHMvYXJtZWxmYl9saW51eF9lYWJpLnhzIGIvbGliL2xkc2NyaXB0cy9hcm1lbGZiX2xpbnV4X2VhYmkueHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRmOGI2YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9sZHNjcmlwdHMvYXJtZWxmYl9saW51eF9lYWJpLnhzCkBAIC0wLDAgKzEsMjEzIEBACisvKiBTY3JpcHQgZm9yIGxkIC0tc2hhcmVkOiBsaW5rIHNoYXJlZCBsaWJyYXJ5ICovCitPVVRQVVRfRk9STUFUKCJlbGYzMi1iaWdhcm0iLCAiZWxmMzItYmlnYXJtIiwKKwkgICAgICAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQVJDSF9ESVIoIj0vdXNyL2xvY2FsL2xpYiIpOyBTRUFSQ0hfRElSKCI9L2xpYiIpOyBTRUFSQ0hfRElSKCI9L3Vzci9saWIiKTsKK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICAuID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMCkgKyBTSVpFT0ZfSEVBREVSUzsKKyAgLm5vdGUuZ251LmJ1aWxkLWlkIDogeyAqKC5ub3RlLmdudS5idWlsZC1pZCkgfQorICAuaGFzaCAgICAgICAgICAgOiB7ICooLmhhc2gpIH0KKyAgLmdudS5oYXNoICAgICAgIDogeyAqKC5nbnUuaGFzaCkgfQorICAuZHluc3ltICAgICAgICAgOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyICAgICAgICAgOiB7ICooLmR5bnN0cikgfQorICAuZ251LnZlcnNpb24gICAgOiB7ICooLmdudS52ZXJzaW9uKSB9CisgIC5nbnUudmVyc2lvbl9kICA6IHsgKiguZ251LnZlcnNpb25fZCkgfQorICAuZ251LnZlcnNpb25fciAgOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KKyAgLnJlbC5pbml0ICAgICAgIDogeyAqKC5yZWwuaW5pdCkgfQorICAucmVsYS5pbml0ICAgICAgOiB7ICooLnJlbGEuaW5pdCkgfQorICAucmVsLnRleHQgICAgICAgOiB7ICooLnJlbC50ZXh0IC5yZWwudGV4dC4qIC5yZWwuZ251LmxpbmtvbmNlLnQuKikgfQorICAucmVsYS50ZXh0ICAgICAgOiB7ICooLnJlbGEudGV4dCAucmVsYS50ZXh0LiogLnJlbGEuZ251LmxpbmtvbmNlLnQuKikgfQorICAucmVsLmZpbmkgICAgICAgOiB7ICooLnJlbC5maW5pKSB9CisgIC5yZWxhLmZpbmkgICAgICA6IHsgKigucmVsYS5maW5pKSB9CisgIC5yZWwucm9kYXRhICAgICA6IHsgKigucmVsLnJvZGF0YSAucmVsLnJvZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnIuKikgfQorICAucmVsYS5yb2RhdGEgICAgOiB7ICooLnJlbGEucm9kYXRhIC5yZWxhLnJvZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJlbC5kYXRhLnJlbC5ybyAgIDogeyAqKC5yZWwuZGF0YS5yZWwucm8qIC5yZWwuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLnJlbGEuZGF0YS5yZWwucm8gICA6IHsgKigucmVsYS5kYXRhLnJlbC5ybyogLnJlbGEuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLnJlbC5kYXRhICAgICAgIDogeyAqKC5yZWwuZGF0YSAucmVsLmRhdGEuKiAucmVsLmdudS5saW5rb25jZS5kLiopIH0KKyAgLnJlbGEuZGF0YSAgICAgIDogeyAqKC5yZWxhLmRhdGEgLnJlbGEuZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5kLiopIH0KKyAgLnJlbC50ZGF0YQkgIDogeyAqKC5yZWwudGRhdGEgLnJlbC50ZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnJlbGEudGRhdGEJICA6IHsgKigucmVsYS50ZGF0YSAucmVsYS50ZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC5yZWwudGJzcwkgIDogeyAqKC5yZWwudGJzcyAucmVsLnRic3MuKiAucmVsLmdudS5saW5rb25jZS50Yi4qKSB9CisgIC5yZWxhLnRic3MJICA6IHsgKigucmVsYS50YnNzIC5yZWxhLnRic3MuKiAucmVsYS5nbnUubGlua29uY2UudGIuKikgfQorICAucmVsLmN0b3JzICAgICAgOiB7ICooLnJlbC5jdG9ycykgfQorICAucmVsYS5jdG9ycyAgICAgOiB7ICooLnJlbGEuY3RvcnMpIH0KKyAgLnJlbC5kdG9ycyAgICAgIDogeyAqKC5yZWwuZHRvcnMpIH0KKyAgLnJlbGEuZHRvcnMgICAgIDogeyAqKC5yZWxhLmR0b3JzKSB9CisgIC5yZWwuZ290ICAgICAgICA6IHsgKigucmVsLmdvdCkgfQorICAucmVsYS5nb3QgICAgICAgOiB7ICooLnJlbGEuZ290KSB9CisgIC5yZWwuYnNzICAgICAgICA6IHsgKigucmVsLmJzcyAucmVsLmJzcy4qIC5yZWwuZ251LmxpbmtvbmNlLmIuKikgfQorICAucmVsYS5ic3MgICAgICAgOiB7ICooLnJlbGEuYnNzIC5yZWxhLmJzcy4qIC5yZWxhLmdudS5saW5rb25jZS5iLiopIH0KKyAgLnJlbC5pcGx0ICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWwuaXBsdCkKKyAgICB9CisgIC5yZWxhLmlwbHQgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5pcGx0KQorICAgIH0KKyAgLnJlbC5wbHQgICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWwucGx0KQorICAgIH0KKyAgLnJlbGEucGx0ICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLnBsdCkKKyAgICB9CisgIC5pbml0ICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKC5pbml0KSkKKyAgfSA9MAorICAucGx0ICAgICAgICAgICAgOiB7ICooLnBsdCkgfQorICAuaXBsdCAgICAgICAgICAgOiB7ICooLmlwbHQpIH0KKyAgLnRleHQgICAgICAgICAgIDoKKyAgeworICAgICooLnRleHQudW5saWtlbHkgLnRleHQuKl91bmxpa2VseSkKKyAgICAqKC50ZXh0IC5zdHViIC50ZXh0LiogLmdudS5saW5rb25jZS50LiopCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgICAgKiguZ2x1ZV83dCkgKiguZ2x1ZV83KSAqKC52ZnAxMV92ZW5lZXIpICooLnY0X2J4KQorICB9ID0wCisgIC5maW5pICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKC5maW5pKSkKKyAgfSA9MAorICBQUk9WSURFIChfX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKF9ldGV4dCA9IC4pOworICBQUk9WSURFIChldGV4dCA9IC4pOworICAucm9kYXRhICAgICAgICAgOiB7ICooLnJvZGF0YSAucm9kYXRhLiogLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJvZGF0YTEgICAgICAgIDogeyAqKC5yb2RhdGExKSB9CisgIC5BUk0uZXh0YWIgICA6IHsgKiguQVJNLmV4dGFiKiAuZ251LmxpbmtvbmNlLmFybWV4dGFiLiopIH0KKyAgIF9fZXhpZHhfc3RhcnQgPSAuOworICAuQVJNLmV4aWR4ICAgOiB7ICooLkFSTS5leGlkeCogLmdudS5saW5rb25jZS5hcm1leGlkeC4qKSB9CisgICBfX2V4aWR4X2VuZCA9IC47CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAuID0gQUxJR04gKENPTlNUQU5UIChNQVhQQUdFU0laRSkpIC0gKChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gLikgJiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSAtIDEpKTsgLiA9IERBVEFfU0VHTUVOVF9BTElHTiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSwgQ09OU1RBTlQgKENPTU1PTlBBR0VTSVpFKSk7CisgIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyAgKi8KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9SVyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9SVyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCSAgOiB7ICooLnRkYXRhIC50ZGF0YS4qIC5nbnUubGlua29uY2UudGQuKikgfQorICAudGJzcwkJICA6IHsgKigudGJzcyAudGJzcy4qIC5nbnUubGlua29uY2UudGIuKikgKigudGNvbW1vbikgfQorICAucHJlaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgIH0KKyAgLmluaXRfYXJyYXkgICAgIDoKKyAgeworICAgICBLRUVQICgqKFNPUlQoLmluaXRfYXJyYXkuKikpKQorICAgICBLRUVQICgqKC5pbml0X2FycmF5KSkKKyAgfQorICAuZmluaV9hcnJheSAgICAgOgorICB7CisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgICAgS0VFUCAoKihTT1JUKC5maW5pX2FycmF5LiopKSkKKyAgfQorICAuY3RvcnMgICAgICAgICAgOgorICB7CisgICAgLyogZ2NjIHVzZXMgY3J0YmVnaW4ubyB0byBmaW5kIHRoZSBzdGFydCBvZgorICAgICAgIHRoZSBjb25zdHJ1Y3RvcnMsIHNvIHdlIG1ha2Ugc3VyZSBpdCBpcworICAgICAgIGZpcnN0LiAgQmVjYXVzZSB0aGlzIGlzIGEgd2lsZGNhcmQsIGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgaWYgdGhlIHVzZXIgZG9lcyBub3QKKyAgICAgICBhY3R1YWxseSBsaW5rIGFnYWluc3QgY3J0YmVnaW4ubzsgdGhlCisgICAgICAgbGlua2VyIHdvbid0IGxvb2sgZm9yIGEgZmlsZSB0byBtYXRjaCBhCisgICAgICAgd2lsZGNhcmQuICBUaGUgd2lsZGNhcmQgYWxzbyBtZWFucyB0aGF0IGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgd2hpY2ggZGlyZWN0b3J5IGNydGJlZ2luLm8KKyAgICAgICBpcyBpbi4gICovCisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmN0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmN0b3JzKSkKKyAgICAvKiBXZSBkb24ndCB3YW50IHRvIGluY2x1ZGUgdGhlIC5jdG9yIHNlY3Rpb24gZnJvbQorICAgICAgIHRoZSBjcnRlbmQubyBmaWxlIHVudGlsIGFmdGVyIHRoZSBzb3J0ZWQgY3RvcnMuCisgICAgICAgVGhlIC5jdG9yIHNlY3Rpb24gZnJvbSB0aGUgY3J0ZW5kIGZpbGUgY29udGFpbnMgdGhlCisgICAgICAgZW5kIG9mIGN0b3JzIG1hcmtlciBhbmQgaXQgbXVzdCBiZSBsYXN0ICovCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmN0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmN0b3JzLiopKSkKKyAgICBLRUVQICgqKC5jdG9ycykpCisgIH0KKyAgLmR0b3JzICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5kdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5kdG9ycykpCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmR0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmR0b3JzLiopKSkKKyAgICBLRUVQICgqKC5kdG9ycykpCisgIH0KKyAgLmpjciAgICAgICAgICAgIDogeyBLRUVQICgqKC5qY3IpKSB9CisgIC5kYXRhLnJlbC5ybyA6IHsgKiguZGF0YS5yZWwucm8ubG9jYWwqIC5nbnUubGlua29uY2UuZC5yZWwucm8ubG9jYWwuKikgKiguZGF0YS5yZWwucm8qIC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAuZHluYW1pYyAgICAgICAgOiB7ICooLmR5bmFtaWMpIH0KKyAgLiA9IERBVEFfU0VHTUVOVF9SRUxST19FTkQgKDAsIC4pOworICAuZ290ICAgICAgICAgICAgOiB7ICooLmdvdC5wbHQpICooLmlnb3QucGx0KSAqKC5nb3QpICooLmlnb3QpIH0KKyAgLmRhdGEgICAgICAgICAgIDoKKyAgeworICAgIFBST1ZJREUgKF9fZGF0YV9zdGFydCA9IC4pOworICAgICooLmRhdGEgLmRhdGEuKiAuZ251LmxpbmtvbmNlLmQuKikKKyAgICBTT1JUKENPTlNUUlVDVE9SUykKKyAgfQorICAuZGF0YTEgICAgICAgICAgOiB7ICooLmRhdGExKSB9CisgIF9lZGF0YSA9IC47IFBST1ZJREUgKGVkYXRhID0gLik7CisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgX19ic3Nfc3RhcnRfXyA9IC47CisgIC5ic3MgICAgICAgICAgICA6CisgIHsKKyAgICooLmR5bmJzcykKKyAgICooLmJzcyAuYnNzLiogLmdudS5saW5rb25jZS5iLiopCisgICAqKENPTU1PTikKKyAgIC8qIEFsaWduIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIC5ic3Mgc2VjdGlvbiBvY2N1cGllcyBzcGFjZSB1cCB0bworICAgICAgX2VuZC4gIEFsaWduIGFmdGVyIC5ic3MgdG8gZW5zdXJlIGNvcnJlY3QgYWxpZ25tZW50IGV2ZW4gaWYgdGhlCisgICAgICAuYnNzIHNlY3Rpb24gZGlzYXBwZWFycyBiZWNhdXNlIHRoZXJlIGFyZSBubyBpbnB1dCBzZWN0aW9ucy4KKyAgICAgIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCBpdD8gV2hlbiB0aGVyZSBpcyBubyAuYnNzIHNlY3Rpb24sIHdlIGRvbid0CisgICAgICBwYWQgdGhlIC5kYXRhIHNlY3Rpb24uICAqLworICAgLiA9IEFMSUdOKC4gIT0gMCA/IDMyIC8gOCA6IDEpOworICB9CisgIF9ic3NfZW5kX18gPSAuIDsgX19ic3NfZW5kX18gPSAuIDsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIC4gPSBBTElHTigzMiAvIDgpOworICBfX2VuZF9fID0gLiA7CisgIF9lbmQgPSAuOyBQUk9WSURFIChlbmQgPSAuKTsKKyAgLiA9IERBVEFfU0VHTUVOVF9FTkQgKC4pOworICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAgICAgICAgICAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyICAgICAgIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAgICAgMCA6IHsgKiguc3RhYi5leGNsKSB9CisgIC5zdGFiLmV4Y2xzdHIgIDAgOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAuc3RhYi5pbmRleCAgICAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisgIC5zdGFiLmluZGV4c3RyIDAgOiB7ICooLnN0YWIuaW5kZXhzdHIpIH0KKyAgLmNvbW1lbnQgICAgICAgMCA6IHsgKiguY29tbWVudCkgfQorICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KKyAgICAgU3ltYm9scyBpbiB0aGUgRFdBUkYgZGVidWdnaW5nIHNlY3Rpb25zIGFyZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nCisgICAgIG9mIHRoZSBzZWN0aW9uIHNvIHdlIGJlZ2luIHRoZW0gYXQgMC4gICovCisgIC8qIERXQVJGIDEgKi8KKyAgLmRlYnVnICAgICAgICAgIDAgOiB7ICooLmRlYnVnKSB9CisgIC5saW5lICAgICAgICAgICAwIDogeyAqKC5saW5lKSB9CisgIC8qIEdOVSBEV0FSRiAxIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3NyY2luZm8gIDAgOiB7ICooLmRlYnVnX3NyY2luZm8pIH0KKyAgLmRlYnVnX3NmbmFtZXMgIDAgOiB7ICooLmRlYnVnX3NmbmFtZXMpIH0KKyAgLyogRFdBUkYgMS4xIGFuZCBEV0FSRiAyICovCisgIC5kZWJ1Z19hcmFuZ2VzICAwIDogeyAqKC5kZWJ1Z19hcmFuZ2VzKSB9CisgIC5kZWJ1Z19wdWJuYW1lcyAwIDogeyAqKC5kZWJ1Z19wdWJuYW1lcykgfQorICAvKiBEV0FSRiAyICovCisgIC5kZWJ1Z19pbmZvICAgICAwIDogeyAqKC5kZWJ1Z19pbmZvIC5nbnUubGlua29uY2Uud2kuKikgfQorICAuZGVidWdfYWJicmV2ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9CisgIC5kZWJ1Z19saW5lICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisgIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5kZWJ1Z19mcmFtZSkgfQorICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9CisgIC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKyAgLmRlYnVnX21hY2luZm8gIDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0KKyAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRlbnNpb25zICovCisgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9CisgIC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9CisgIC5kZWJ1Z190eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9CisgIC5kZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKyAgLyogRFdBUkYgMyAqLworICAuZGVidWdfcHVidHlwZXMgMCA6IHsgKiguZGVidWdfcHVidHlwZXMpIH0KKyAgLmRlYnVnX3JhbmdlcyAgIDAgOiB7ICooLmRlYnVnX3JhbmdlcykgfQorICAuZ251LmF0dHJpYnV0ZXMgMCA6IHsgS0VFUCAoKiguZ251LmF0dHJpYnV0ZXMpKSB9CisgIC5ub3RlLmdudS5hcm0uaWRlbnQgMCA6IHsgS0VFUCAoKigubm90ZS5nbnUuYXJtLmlkZW50KSkgfQorICAvRElTQ0FSRC8gOiB7ICooLm5vdGUuR05VLXN0YWNrKSAqKC5nbnVfZGVidWdsaW5rKSAqKC5nbnUubHRvXyopIH0KK30KZGlmZiAtLWdpdCBhL2xpYi9sZHNjcmlwdHMvYXJtZWxmYl9saW51eF9lYWJpLnhzYyBiL2xpYi9sZHNjcmlwdHMvYXJtZWxmYl9saW51eF9lYWJpLnhzYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTE5ZjU3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2xkc2NyaXB0cy9hcm1lbGZiX2xpbnV4X2VhYmkueHNjCkBAIC0wLDAgKzEsMjEyIEBACisvKiBTY3JpcHQgZm9yIC0tc2hhcmVkIC16IGNvbWJyZWxvYzogc2hhcmVkIGxpYnJhcnksIGNvbWJpbmUgJiBzb3J0IHJlbG9jcyAqLworT1VUUFVUX0ZPUk1BVCgiZWxmMzItYmlnYXJtIiwgImVsZjMyLWJpZ2FybSIsCisJICAgICAgImVsZjMyLWxpdHRsZWFybSIpCitPVVRQVVRfQVJDSChhcm0pCitFTlRSWShfc3RhcnQpCitTRUFSQ0hfRElSKCI9L3Vzci9sb2NhbC9saWIiKTsgU0VBUkNIX0RJUigiPS9saWIiKTsgU0VBUkNIX0RJUigiPS91c3IvbGliIik7CitTRUNUSU9OUworeworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgLiA9IFNFR01FTlRfU1RBUlQoInRleHQtc2VnbWVudCIsIDApICsgU0laRU9GX0hFQURFUlM7CisgIC5ub3RlLmdudS5idWlsZC1pZCA6IHsgKigubm90ZS5nbnUuYnVpbGQtaWQpIH0KKyAgLmhhc2ggICAgICAgICAgIDogeyAqKC5oYXNoKSB9CisgIC5nbnUuaGFzaCAgICAgICA6IHsgKiguZ251Lmhhc2gpIH0KKyAgLmR5bnN5bSAgICAgICAgIDogeyAqKC5keW5zeW0pIH0KKyAgLmR5bnN0ciAgICAgICAgIDogeyAqKC5keW5zdHIpIH0KKyAgLmdudS52ZXJzaW9uICAgIDogeyAqKC5nbnUudmVyc2lvbikgfQorICAuZ251LnZlcnNpb25fZCAgOiB7ICooLmdudS52ZXJzaW9uX2QpIH0KKyAgLmdudS52ZXJzaW9uX3IgIDogeyAqKC5nbnUudmVyc2lvbl9yKSB9CisgIC5yZWwuZHluICAgICAgICA6CisgICAgeworICAgICAgKigucmVsLmluaXQpCisgICAgICAqKC5yZWwudGV4dCAucmVsLnRleHQuKiAucmVsLmdudS5saW5rb25jZS50LiopCisgICAgICAqKC5yZWwuZmluaSkKKyAgICAgICooLnJlbC5yb2RhdGEgLnJlbC5yb2RhdGEuKiAucmVsLmdudS5saW5rb25jZS5yLiopCisgICAgICAqKC5yZWwuZGF0YS5yZWwucm8qIC5yZWwuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopCisgICAgICAqKC5yZWwuZGF0YSAucmVsLmRhdGEuKiAucmVsLmdudS5saW5rb25jZS5kLiopCisgICAgICAqKC5yZWwudGRhdGEgLnJlbC50ZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnRkLiopCisgICAgICAqKC5yZWwudGJzcyAucmVsLnRic3MuKiAucmVsLmdudS5saW5rb25jZS50Yi4qKQorICAgICAgKigucmVsLmN0b3JzKQorICAgICAgKigucmVsLmR0b3JzKQorICAgICAgKigucmVsLmdvdCkKKyAgICAgICooLnJlbC5ic3MgLnJlbC5ic3MuKiAucmVsLmdudS5saW5rb25jZS5iLiopCisgICAgICAqKC5yZWwuaXBsdCkKKyAgICB9CisgIC5yZWxhLmR5biAgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5pbml0KQorICAgICAgKigucmVsYS50ZXh0IC5yZWxhLnRleHQuKiAucmVsYS5nbnUubGlua29uY2UudC4qKQorICAgICAgKigucmVsYS5maW5pKQorICAgICAgKigucmVsYS5yb2RhdGEgLnJlbGEucm9kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnIuKikKKyAgICAgICooLnJlbGEuZGF0YSAucmVsYS5kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLmQuKikKKyAgICAgICooLnJlbGEudGRhdGEgLnJlbGEudGRhdGEuKiAucmVsYS5nbnUubGlua29uY2UudGQuKikKKyAgICAgICooLnJlbGEudGJzcyAucmVsYS50YnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLnRiLiopCisgICAgICAqKC5yZWxhLmN0b3JzKQorICAgICAgKigucmVsYS5kdG9ycykKKyAgICAgICooLnJlbGEuZ290KQorICAgICAgKigucmVsYS5ic3MgLnJlbGEuYnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLmIuKikKKyAgICAgICooLnJlbGEuaXBsdCkKKyAgICB9CisgIC5yZWwucGx0ICAgICAgICA6CisgICAgeworICAgICAgKigucmVsLnBsdCkKKyAgICB9CisgIC5yZWxhLnBsdCAgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5wbHQpCisgICAgfQorICAuaW5pdCAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKiguaW5pdCkpCisgIH0gPTAKKyAgLnBsdCAgICAgICAgICAgIDogeyAqKC5wbHQpIH0KKyAgLmlwbHQgICAgICAgICAgIDogeyAqKC5pcGx0KSB9CisgIC50ZXh0ICAgICAgICAgICA6CisgIHsKKyAgICAqKC50ZXh0LnVubGlrZWx5IC50ZXh0LipfdW5saWtlbHkpCisgICAgKigudGV4dCAuc3R1YiAudGV4dC4qIC5nbnUubGlua29uY2UudC4qKQorICAgIC8qIC5nbnUud2FybmluZyBzZWN0aW9ucyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgYnkgZWxmMzIuZW0uICAqLworICAgICooLmdudS53YXJuaW5nKQorICAgICooLmdsdWVfN3QpICooLmdsdWVfNykgKigudmZwMTFfdmVuZWVyKSAqKC52NF9ieCkKKyAgfSA9MAorICAuZmluaSAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKiguZmluaSkpCisgIH0gPTAKKyAgUFJPVklERSAoX19ldGV4dCA9IC4pOworICBQUk9WSURFIChfZXRleHQgPSAuKTsKKyAgUFJPVklERSAoZXRleHQgPSAuKTsKKyAgLnJvZGF0YSAgICAgICAgIDogeyAqKC5yb2RhdGEgLnJvZGF0YS4qIC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yb2RhdGExICAgICAgICA6IHsgKigucm9kYXRhMSkgfQorICAuQVJNLmV4dGFiICAgOiB7ICooLkFSTS5leHRhYiogLmdudS5saW5rb25jZS5hcm1leHRhYi4qKSB9CisgICBfX2V4aWR4X3N0YXJ0ID0gLjsKKyAgLkFSTS5leGlkeCAgIDogeyAqKC5BUk0uZXhpZHgqIC5nbnUubGlua29uY2UuYXJtZXhpZHguKikgfQorICAgX19leGlkeF9lbmQgPSAuOworICAuZWhfZnJhbWVfaGRyIDogeyAqKC5laF9mcmFtZV9oZHIpIH0KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9STyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9STyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQuICBXZSB3YW50IHRvIGFkanVzdCB1cCB0bworICAgICB0aGUgc2FtZSBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZSBvbiB0aGUgbmV4dCBwYWdlIHVwLiAgKi8KKyAgLiA9IEFMSUdOIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpKSAtICgoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSAtIC4pICYgKENPTlNUQU5UIChNQVhQQUdFU0laRSkgLSAxKSk7IC4gPSBEQVRBX1NFR01FTlRfQUxJR04gKENPTlNUQU5UIChNQVhQQUdFU0laRSksIENPTlNUQU5UIChDT01NT05QQUdFU0laRSkpOworICAvKiBFeGNlcHRpb24gaGFuZGxpbmcgICovCisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUlcgeyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUlcgeyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogVGhyZWFkIExvY2FsIFN0b3JhZ2Ugc2VjdGlvbnMgICovCisgIC50ZGF0YQkgIDogeyAqKC50ZGF0YSAudGRhdGEuKiAuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnRic3MJCSAgOiB7ICooLnRic3MgLnRic3MuKiAuZ251LmxpbmtvbmNlLnRiLiopICooLnRjb21tb24pIH0KKyAgLnByZWluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkpKQorICB9CisgIC5pbml0X2FycmF5ICAgICA6CisgIHsKKyAgICAgS0VFUCAoKihTT1JUKC5pbml0X2FycmF5LiopKSkKKyAgICAgS0VFUCAoKiguaW5pdF9hcnJheSkpCisgIH0KKyAgLmZpbmlfYXJyYXkgICAgIDoKKyAgeworICAgIEtFRVAgKCooLmZpbmlfYXJyYXkpKQorICAgIEtFRVAgKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgIH0KKyAgLmN0b3JzICAgICAgICAgIDoKKyAgeworICAgIC8qIGdjYyB1c2VzIGNydGJlZ2luLm8gdG8gZmluZCB0aGUgc3RhcnQgb2YKKyAgICAgICB0aGUgY29uc3RydWN0b3JzLCBzbyB3ZSBtYWtlIHN1cmUgaXQgaXMKKyAgICAgICBmaXJzdC4gIEJlY2F1c2UgdGhpcyBpcyBhIHdpbGRjYXJkLCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSB1c2VyIGRvZXMgbm90CisgICAgICAgYWN0dWFsbHkgbGluayBhZ2FpbnN0IGNydGJlZ2luLm87IHRoZQorICAgICAgIGxpbmtlciB3b24ndCBsb29rIGZvciBhIGZpbGUgdG8gbWF0Y2ggYQorICAgICAgIHdpbGRjYXJkLiAgVGhlIHdpbGRjYXJkIGFsc28gbWVhbnMgdGhhdCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGRpcmVjdG9yeSBjcnRiZWdpbi5vCisgICAgICAgaXMgaW4uICAqLworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5jdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5jdG9ycykpCisgICAgLyogV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSAuY3RvciBzZWN0aW9uIGZyb20KKyAgICAgICB0aGUgY3J0ZW5kLm8gZmlsZSB1bnRpbCBhZnRlciB0aGUgc29ydGVkIGN0b3JzLgorICAgICAgIFRoZSAuY3RvciBzZWN0aW9uIGZyb20gdGhlIGNydGVuZCBmaWxlIGNvbnRhaW5zIHRoZQorICAgICAgIGVuZCBvZiBjdG9ycyBtYXJrZXIgYW5kIGl0IG11c3QgYmUgbGFzdCAqLworICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5jdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5jdG9ycy4qKSkpCisgICAgS0VFUCAoKiguY3RvcnMpKQorICB9CisgIC5kdG9ycyAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqY3J0YmVnaW4ubyguZHRvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguZHRvcnMpKQorICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5kdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5kdG9ycy4qKSkpCisgICAgS0VFUCAoKiguZHRvcnMpKQorICB9CisgIC5qY3IgICAgICAgICAgICA6IHsgS0VFUCAoKiguamNyKSkgfQorICAuZGF0YS5yZWwucm8gOiB7ICooLmRhdGEucmVsLnJvLmxvY2FsKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLmxvY2FsLiopICooLmRhdGEucmVsLnJvKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLmR5bmFtaWMgICAgICAgIDogeyAqKC5keW5hbWljKSB9CisgIC4gPSBEQVRBX1NFR01FTlRfUkVMUk9fRU5EICgwLCAuKTsKKyAgLmdvdCAgICAgICAgICAgIDogeyAqKC5nb3QucGx0KSAqKC5pZ290LnBsdCkgKiguZ290KSAqKC5pZ290KSB9CisgIC5kYXRhICAgICAgICAgICA6CisgIHsKKyAgICBQUk9WSURFIChfX2RhdGFfc3RhcnQgPSAuKTsKKyAgICAqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisgICAgU09SVChDT05TVFJVQ1RPUlMpCisgIH0KKyAgLmRhdGExICAgICAgICAgIDogeyAqKC5kYXRhMSkgfQorICBfZWRhdGEgPSAuOyBQUk9WSURFIChlZGF0YSA9IC4pOworICBfX2Jzc19zdGFydCA9IC47CisgIF9fYnNzX3N0YXJ0X18gPSAuOworICAuYnNzICAgICAgICAgICAgOgorICB7CisgICAqKC5keW5ic3MpCisgICAqKC5ic3MgLmJzcy4qIC5nbnUubGlua29uY2UuYi4qKQorICAgKihDT01NT04pCisgICAvKiBBbGlnbiBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSAuYnNzIHNlY3Rpb24gb2NjdXBpZXMgc3BhY2UgdXAgdG8KKyAgICAgIF9lbmQuICBBbGlnbiBhZnRlciAuYnNzIHRvIGVuc3VyZSBjb3JyZWN0IGFsaWdubWVudCBldmVuIGlmIHRoZQorICAgICAgLmJzcyBzZWN0aW9uIGRpc2FwcGVhcnMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gaW5wdXQgc2VjdGlvbnMuCisgICAgICBGSVhNRTogV2h5IGRvIHdlIG5lZWQgaXQ/IFdoZW4gdGhlcmUgaXMgbm8gLmJzcyBzZWN0aW9uLCB3ZSBkb24ndAorICAgICAgcGFkIHRoZSAuZGF0YSBzZWN0aW9uLiAgKi8KKyAgIC4gPSBBTElHTiguICE9IDAgPyAzMiAvIDggOiAxKTsKKyAgfQorICBfYnNzX2VuZF9fID0gLiA7IF9fYnNzX2VuZF9fID0gLiA7CisgIC4gPSBBTElHTigzMiAvIDgpOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgX19lbmRfXyA9IC4gOworICBfZW5kID0gLjsgUFJPVklERSAoZW5kID0gLik7CisgIC4gPSBEQVRBX1NFR01FTlRfRU5EICguKTsKKyAgLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KKyAgLnN0YWIgICAgICAgICAgMCA6IHsgKiguc3RhYikgfQorICAuc3RhYnN0ciAgICAgICAwIDogeyAqKC5zdGFic3RyKSB9CisgIC5zdGFiLmV4Y2wgICAgIDAgOiB7ICooLnN0YWIuZXhjbCkgfQorICAuc3RhYi5leGNsc3RyICAwIDogeyAqKC5zdGFiLmV4Y2xzdHIpIH0KKyAgLnN0YWIuaW5kZXggICAgMCA6IHsgKiguc3RhYi5pbmRleCkgfQorICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9CisgIC5jb21tZW50ICAgICAgIDAgOiB7ICooLmNvbW1lbnQpIH0KKyAgLyogRFdBUkYgZGVidWcgc2VjdGlvbnMuCisgICAgIFN5bWJvbHMgaW4gdGhlIERXQVJGIGRlYnVnZ2luZyBzZWN0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc2VjdGlvbiBzbyB3ZSBiZWdpbiB0aGVtIGF0IDAuICAqLworICAvKiBEV0FSRiAxICovCisgIC5kZWJ1ZyAgICAgICAgICAwIDogeyAqKC5kZWJ1ZykgfQorICAubGluZSAgICAgICAgICAgMCA6IHsgKigubGluZSkgfQorICAvKiBHTlUgRFdBUkYgMSBleHRlbnNpb25zICovCisgIC5kZWJ1Z19zcmNpbmZvICAwIDogeyAqKC5kZWJ1Z19zcmNpbmZvKSB9CisgIC5kZWJ1Z19zZm5hbWVzICAwIDogeyAqKC5kZWJ1Z19zZm5hbWVzKSB9CisgIC8qIERXQVJGIDEuMSBhbmQgRFdBUkYgMiAqLworICAuZGVidWdfYXJhbmdlcyAgMCA6IHsgKiguZGVidWdfYXJhbmdlcykgfQorICAuZGVidWdfcHVibmFtZXMgMCA6IHsgKiguZGVidWdfcHVibmFtZXMpIH0KKyAgLyogRFdBUkYgMiAqLworICAuZGVidWdfaW5mbyAgICAgMCA6IHsgKiguZGVidWdfaW5mbyAuZ251LmxpbmtvbmNlLndpLiopIH0KKyAgLmRlYnVnX2FiYnJldiAgIDAgOiB7ICooLmRlYnVnX2FiYnJldikgfQorICAuZGVidWdfbGluZSAgICAgMCA6IHsgKiguZGVidWdfbGluZSkgfQorICAuZGVidWdfZnJhbWUgICAgMCA6IHsgKiguZGVidWdfZnJhbWUpIH0KKyAgLmRlYnVnX3N0ciAgICAgIDAgOiB7ICooLmRlYnVnX3N0cikgfQorICAuZGVidWdfbG9jICAgICAgMCA6IHsgKiguZGVidWdfbG9jKSB9CisgIC5kZWJ1Z19tYWNpbmZvICAwIDogeyAqKC5kZWJ1Z19tYWNpbmZvKSB9CisgIC8qIFNHSS9NSVBTIERXQVJGIDIgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfd2Vha25hbWVzIDAgOiB7ICooLmRlYnVnX3dlYWtuYW1lcykgfQorICAuZGVidWdfZnVuY25hbWVzIDAgOiB7ICooLmRlYnVnX2Z1bmNuYW1lcykgfQorICAuZGVidWdfdHlwZW5hbWVzIDAgOiB7ICooLmRlYnVnX3R5cGVuYW1lcykgfQorICAuZGVidWdfdmFybmFtZXMgIDAgOiB7ICooLmRlYnVnX3Zhcm5hbWVzKSB9CisgIC8qIERXQVJGIDMgKi8KKyAgLmRlYnVnX3B1YnR5cGVzIDAgOiB7ICooLmRlYnVnX3B1YnR5cGVzKSB9CisgIC5kZWJ1Z19yYW5nZXMgICAwIDogeyAqKC5kZWJ1Z19yYW5nZXMpIH0KKyAgLmdudS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLmdudS5hdHRyaWJ1dGVzKSkgfQorICAubm90ZS5nbnUuYXJtLmlkZW50IDAgOiB7IEtFRVAgKCooLm5vdGUuZ251LmFybS5pZGVudCkpIH0KKyAgL0RJU0NBUkQvIDogeyAqKC5ub3RlLkdOVS1zdGFjaykgKiguZ251X2RlYnVnbGluaykgKiguZ251Lmx0b18qKSB9Cit9CmRpZmYgLS1naXQgYS9saWIvbGRzY3JpcHRzL2FybWVsZmJfbGludXhfZWFiaS54c3cgYi9saWIvbGRzY3JpcHRzL2FybWVsZmJfbGludXhfZWFiaS54c3cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM5MjZlNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9sZHNjcmlwdHMvYXJtZWxmYl9saW51eF9lYWJpLnhzdwpAQCAtMCwwICsxLDIxMiBAQAorLyogU2NyaXB0IGZvciAtLXNoYXJlZCAteiBjb21icmVsb2MgLXogbm93IC16IHJlbHJvOiBzaGFyZWQgbGlicmFyeSwgY29tYmluZSAmIHNvcnQgcmVsb2NzICovCitPVVRQVVRfRk9STUFUKCJlbGYzMi1iaWdhcm0iLCAiZWxmMzItYmlnYXJtIiwKKwkgICAgICAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQVJDSF9ESVIoIj0vdXNyL2xvY2FsL2xpYiIpOyBTRUFSQ0hfRElSKCI9L2xpYiIpOyBTRUFSQ0hfRElSKCI9L3Vzci9saWIiKTsKK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICAuID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMCkgKyBTSVpFT0ZfSEVBREVSUzsKKyAgLm5vdGUuZ251LmJ1aWxkLWlkIDogeyAqKC5ub3RlLmdudS5idWlsZC1pZCkgfQorICAuaGFzaCAgICAgICAgICAgOiB7ICooLmhhc2gpIH0KKyAgLmdudS5oYXNoICAgICAgIDogeyAqKC5nbnUuaGFzaCkgfQorICAuZHluc3ltICAgICAgICAgOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyICAgICAgICAgOiB7ICooLmR5bnN0cikgfQorICAuZ251LnZlcnNpb24gICAgOiB7ICooLmdudS52ZXJzaW9uKSB9CisgIC5nbnUudmVyc2lvbl9kICA6IHsgKiguZ251LnZlcnNpb25fZCkgfQorICAuZ251LnZlcnNpb25fciAgOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KKyAgLnJlbC5keW4gICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWwuaW5pdCkKKyAgICAgICooLnJlbC50ZXh0IC5yZWwudGV4dC4qIC5yZWwuZ251LmxpbmtvbmNlLnQuKikKKyAgICAgICooLnJlbC5maW5pKQorICAgICAgKigucmVsLnJvZGF0YSAucmVsLnJvZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnIuKikKKyAgICAgICooLnJlbC5kYXRhLnJlbC5ybyogLnJlbC5nbnUubGlua29uY2UuZC5yZWwucm8uKikKKyAgICAgICooLnJlbC5kYXRhIC5yZWwuZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLmQuKikKKyAgICAgICooLnJlbC50ZGF0YSAucmVsLnRkYXRhLiogLnJlbC5nbnUubGlua29uY2UudGQuKikKKyAgICAgICooLnJlbC50YnNzIC5yZWwudGJzcy4qIC5yZWwuZ251LmxpbmtvbmNlLnRiLiopCisgICAgICAqKC5yZWwuY3RvcnMpCisgICAgICAqKC5yZWwuZHRvcnMpCisgICAgICAqKC5yZWwuZ290KQorICAgICAgKigucmVsLmJzcyAucmVsLmJzcy4qIC5yZWwuZ251LmxpbmtvbmNlLmIuKikKKyAgICAgICooLnJlbC5pcGx0KQorICAgIH0KKyAgLnJlbGEuZHluICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLmluaXQpCisgICAgICAqKC5yZWxhLnRleHQgLnJlbGEudGV4dC4qIC5yZWxhLmdudS5saW5rb25jZS50LiopCisgICAgICAqKC5yZWxhLmZpbmkpCisgICAgICAqKC5yZWxhLnJvZGF0YSAucmVsYS5yb2RhdGEuKiAucmVsYS5nbnUubGlua29uY2Uuci4qKQorICAgICAgKigucmVsYS5kYXRhIC5yZWxhLmRhdGEuKiAucmVsYS5nbnUubGlua29uY2UuZC4qKQorICAgICAgKigucmVsYS50ZGF0YSAucmVsYS50ZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS50ZC4qKQorICAgICAgKigucmVsYS50YnNzIC5yZWxhLnRic3MuKiAucmVsYS5nbnUubGlua29uY2UudGIuKikKKyAgICAgICooLnJlbGEuY3RvcnMpCisgICAgICAqKC5yZWxhLmR0b3JzKQorICAgICAgKigucmVsYS5nb3QpCisgICAgICAqKC5yZWxhLmJzcyAucmVsYS5ic3MuKiAucmVsYS5nbnUubGlua29uY2UuYi4qKQorICAgICAgKigucmVsYS5pcGx0KQorICAgIH0KKyAgLnJlbC5wbHQgICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWwucGx0KQorICAgIH0KKyAgLnJlbGEucGx0ICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLnBsdCkKKyAgICB9CisgIC5pbml0ICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKC5pbml0KSkKKyAgfSA9MAorICAucGx0ICAgICAgICAgICAgOiB7ICooLnBsdCkgfQorICAuaXBsdCAgICAgICAgICAgOiB7ICooLmlwbHQpIH0KKyAgLnRleHQgICAgICAgICAgIDoKKyAgeworICAgICooLnRleHQudW5saWtlbHkgLnRleHQuKl91bmxpa2VseSkKKyAgICAqKC50ZXh0IC5zdHViIC50ZXh0LiogLmdudS5saW5rb25jZS50LiopCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgICAgKiguZ2x1ZV83dCkgKiguZ2x1ZV83KSAqKC52ZnAxMV92ZW5lZXIpICooLnY0X2J4KQorICB9ID0wCisgIC5maW5pICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKC5maW5pKSkKKyAgfSA9MAorICBQUk9WSURFIChfX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKF9ldGV4dCA9IC4pOworICBQUk9WSURFIChldGV4dCA9IC4pOworICAucm9kYXRhICAgICAgICAgOiB7ICooLnJvZGF0YSAucm9kYXRhLiogLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJvZGF0YTEgICAgICAgIDogeyAqKC5yb2RhdGExKSB9CisgIC5BUk0uZXh0YWIgICA6IHsgKiguQVJNLmV4dGFiKiAuZ251LmxpbmtvbmNlLmFybWV4dGFiLiopIH0KKyAgIF9fZXhpZHhfc3RhcnQgPSAuOworICAuQVJNLmV4aWR4ICAgOiB7ICooLkFSTS5leGlkeCogLmdudS5saW5rb25jZS5hcm1leGlkeC4qKSB9CisgICBfX2V4aWR4X2VuZCA9IC47CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAuID0gQUxJR04gKENPTlNUQU5UIChNQVhQQUdFU0laRSkpIC0gKChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gLikgJiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSAtIDEpKTsgLiA9IERBVEFfU0VHTUVOVF9BTElHTiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSwgQ09OU1RBTlQgKENPTU1PTlBBR0VTSVpFKSk7CisgIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyAgKi8KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9SVyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9SVyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCSAgOiB7ICooLnRkYXRhIC50ZGF0YS4qIC5nbnUubGlua29uY2UudGQuKikgfQorICAudGJzcwkJICA6IHsgKigudGJzcyAudGJzcy4qIC5nbnUubGlua29uY2UudGIuKikgKigudGNvbW1vbikgfQorICAucHJlaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgIH0KKyAgLmluaXRfYXJyYXkgICAgIDoKKyAgeworICAgICBLRUVQICgqKFNPUlQoLmluaXRfYXJyYXkuKikpKQorICAgICBLRUVQICgqKC5pbml0X2FycmF5KSkKKyAgfQorICAuZmluaV9hcnJheSAgICAgOgorICB7CisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgICAgS0VFUCAoKihTT1JUKC5maW5pX2FycmF5LiopKSkKKyAgfQorICAuY3RvcnMgICAgICAgICAgOgorICB7CisgICAgLyogZ2NjIHVzZXMgY3J0YmVnaW4ubyB0byBmaW5kIHRoZSBzdGFydCBvZgorICAgICAgIHRoZSBjb25zdHJ1Y3RvcnMsIHNvIHdlIG1ha2Ugc3VyZSBpdCBpcworICAgICAgIGZpcnN0LiAgQmVjYXVzZSB0aGlzIGlzIGEgd2lsZGNhcmQsIGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgaWYgdGhlIHVzZXIgZG9lcyBub3QKKyAgICAgICBhY3R1YWxseSBsaW5rIGFnYWluc3QgY3J0YmVnaW4ubzsgdGhlCisgICAgICAgbGlua2VyIHdvbid0IGxvb2sgZm9yIGEgZmlsZSB0byBtYXRjaCBhCisgICAgICAgd2lsZGNhcmQuICBUaGUgd2lsZGNhcmQgYWxzbyBtZWFucyB0aGF0IGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgd2hpY2ggZGlyZWN0b3J5IGNydGJlZ2luLm8KKyAgICAgICBpcyBpbi4gICovCisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmN0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmN0b3JzKSkKKyAgICAvKiBXZSBkb24ndCB3YW50IHRvIGluY2x1ZGUgdGhlIC5jdG9yIHNlY3Rpb24gZnJvbQorICAgICAgIHRoZSBjcnRlbmQubyBmaWxlIHVudGlsIGFmdGVyIHRoZSBzb3J0ZWQgY3RvcnMuCisgICAgICAgVGhlIC5jdG9yIHNlY3Rpb24gZnJvbSB0aGUgY3J0ZW5kIGZpbGUgY29udGFpbnMgdGhlCisgICAgICAgZW5kIG9mIGN0b3JzIG1hcmtlciBhbmQgaXQgbXVzdCBiZSBsYXN0ICovCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmN0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmN0b3JzLiopKSkKKyAgICBLRUVQICgqKC5jdG9ycykpCisgIH0KKyAgLmR0b3JzICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5kdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5kdG9ycykpCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmR0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmR0b3JzLiopKSkKKyAgICBLRUVQICgqKC5kdG9ycykpCisgIH0KKyAgLmpjciAgICAgICAgICAgIDogeyBLRUVQICgqKC5qY3IpKSB9CisgIC5kYXRhLnJlbC5ybyA6IHsgKiguZGF0YS5yZWwucm8ubG9jYWwqIC5nbnUubGlua29uY2UuZC5yZWwucm8ubG9jYWwuKikgKiguZGF0YS5yZWwucm8qIC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAuZHluYW1pYyAgICAgICAgOiB7ICooLmR5bmFtaWMpIH0KKyAgLmdvdCAgICAgICAgICAgIDogeyAqKC5nb3QucGx0KSAqKC5pZ290LnBsdCkgKiguZ290KSAqKC5pZ290KSB9CisgIC4gPSBEQVRBX1NFR01FTlRfUkVMUk9fRU5EICgwLCAuKTsKKyAgLmRhdGEgICAgICAgICAgIDoKKyAgeworICAgIFBST1ZJREUgKF9fZGF0YV9zdGFydCA9IC4pOworICAgICooLmRhdGEgLmRhdGEuKiAuZ251LmxpbmtvbmNlLmQuKikKKyAgICBTT1JUKENPTlNUUlVDVE9SUykKKyAgfQorICAuZGF0YTEgICAgICAgICAgOiB7ICooLmRhdGExKSB9CisgIF9lZGF0YSA9IC47IFBST1ZJREUgKGVkYXRhID0gLik7CisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgX19ic3Nfc3RhcnRfXyA9IC47CisgIC5ic3MgICAgICAgICAgICA6CisgIHsKKyAgICooLmR5bmJzcykKKyAgICooLmJzcyAuYnNzLiogLmdudS5saW5rb25jZS5iLiopCisgICAqKENPTU1PTikKKyAgIC8qIEFsaWduIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIC5ic3Mgc2VjdGlvbiBvY2N1cGllcyBzcGFjZSB1cCB0bworICAgICAgX2VuZC4gIEFsaWduIGFmdGVyIC5ic3MgdG8gZW5zdXJlIGNvcnJlY3QgYWxpZ25tZW50IGV2ZW4gaWYgdGhlCisgICAgICAuYnNzIHNlY3Rpb24gZGlzYXBwZWFycyBiZWNhdXNlIHRoZXJlIGFyZSBubyBpbnB1dCBzZWN0aW9ucy4KKyAgICAgIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCBpdD8gV2hlbiB0aGVyZSBpcyBubyAuYnNzIHNlY3Rpb24sIHdlIGRvbid0CisgICAgICBwYWQgdGhlIC5kYXRhIHNlY3Rpb24uICAqLworICAgLiA9IEFMSUdOKC4gIT0gMCA/IDMyIC8gOCA6IDEpOworICB9CisgIF9ic3NfZW5kX18gPSAuIDsgX19ic3NfZW5kX18gPSAuIDsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIC4gPSBBTElHTigzMiAvIDgpOworICBfX2VuZF9fID0gLiA7CisgIF9lbmQgPSAuOyBQUk9WSURFIChlbmQgPSAuKTsKKyAgLiA9IERBVEFfU0VHTUVOVF9FTkQgKC4pOworICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAgICAgICAgICAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyICAgICAgIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAgICAgMCA6IHsgKiguc3RhYi5leGNsKSB9CisgIC5zdGFiLmV4Y2xzdHIgIDAgOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAuc3RhYi5pbmRleCAgICAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisgIC5zdGFiLmluZGV4c3RyIDAgOiB7ICooLnN0YWIuaW5kZXhzdHIpIH0KKyAgLmNvbW1lbnQgICAgICAgMCA6IHsgKiguY29tbWVudCkgfQorICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KKyAgICAgU3ltYm9scyBpbiB0aGUgRFdBUkYgZGVidWdnaW5nIHNlY3Rpb25zIGFyZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nCisgICAgIG9mIHRoZSBzZWN0aW9uIHNvIHdlIGJlZ2luIHRoZW0gYXQgMC4gICovCisgIC8qIERXQVJGIDEgKi8KKyAgLmRlYnVnICAgICAgICAgIDAgOiB7ICooLmRlYnVnKSB9CisgIC5saW5lICAgICAgICAgICAwIDogeyAqKC5saW5lKSB9CisgIC8qIEdOVSBEV0FSRiAxIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3NyY2luZm8gIDAgOiB7ICooLmRlYnVnX3NyY2luZm8pIH0KKyAgLmRlYnVnX3NmbmFtZXMgIDAgOiB7ICooLmRlYnVnX3NmbmFtZXMpIH0KKyAgLyogRFdBUkYgMS4xIGFuZCBEV0FSRiAyICovCisgIC5kZWJ1Z19hcmFuZ2VzICAwIDogeyAqKC5kZWJ1Z19hcmFuZ2VzKSB9CisgIC5kZWJ1Z19wdWJuYW1lcyAwIDogeyAqKC5kZWJ1Z19wdWJuYW1lcykgfQorICAvKiBEV0FSRiAyICovCisgIC5kZWJ1Z19pbmZvICAgICAwIDogeyAqKC5kZWJ1Z19pbmZvIC5nbnUubGlua29uY2Uud2kuKikgfQorICAuZGVidWdfYWJicmV2ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9CisgIC5kZWJ1Z19saW5lICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisgIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5kZWJ1Z19mcmFtZSkgfQorICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9CisgIC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKyAgLmRlYnVnX21hY2luZm8gIDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0KKyAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRlbnNpb25zICovCisgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9CisgIC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9CisgIC5kZWJ1Z190eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9CisgIC5kZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKyAgLyogRFdBUkYgMyAqLworICAuZGVidWdfcHVidHlwZXMgMCA6IHsgKiguZGVidWdfcHVidHlwZXMpIH0KKyAgLmRlYnVnX3JhbmdlcyAgIDAgOiB7ICooLmRlYnVnX3JhbmdlcykgfQorICAuZ251LmF0dHJpYnV0ZXMgMCA6IHsgS0VFUCAoKiguZ251LmF0dHJpYnV0ZXMpKSB9CisgIC5ub3RlLmdudS5hcm0uaWRlbnQgMCA6IHsgS0VFUCAoKigubm90ZS5nbnUuYXJtLmlkZW50KSkgfQorICAvRElTQ0FSRC8gOiB7ICooLm5vdGUuR05VLXN0YWNrKSAqKC5nbnVfZGVidWdsaW5rKSAqKC5nbnUubHRvXyopIH0KK30KZGlmZiAtLWdpdCBhL2xpYi9sZHNjcmlwdHMvYXJtZWxmYl9saW51eF9lYWJpLnh1IGIvbGliL2xkc2NyaXB0cy9hcm1lbGZiX2xpbnV4X2VhYmkueHUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YwODE1YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9sZHNjcmlwdHMvYXJtZWxmYl9saW51eF9lYWJpLnh1CkBAIC0wLDAgKzEsMTY0IEBACisvKiBTY3JpcHQgZm9yIGxkIC1VcjogbGluayB3L291dCByZWxvY2F0aW9uLCBkbyBjcmVhdGUgY29uc3RydWN0b3JzICovCitPVVRQVVRfRk9STUFUKCJlbGYzMi1iaWdhcm0iLCAiZWxmMzItYmlnYXJtIiwKKwkgICAgICAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKKyAvKiBGb3Igc29tZSByZWFzb24sIHRoZSBTb2xhcmlzIGxpbmtlciBtYWtlcyBiYWQgZXhlY3V0YWJsZXMKKyAgaWYgZ2xkIC1yIGlzIHVzZWQgYW5kIHRoZSBpbnRlcm1lZGlhdGUgZmlsZSBoYXMgc2VjdGlvbnMgc3RhcnRpbmcKKyAgYXQgbm9uLXplcm8gYWRkcmVzc2VzLiAgQ291bGQgYmUgYSBTb2xhcmlzIGxkIGJ1ZywgY291bGQgYmUgYSBHTlUgbGQKKyAgYnVnLiAgQnV0IGZvciBub3cgYXNzaWduaW5nIHRoZSB6ZXJvIHZtYXMgd29ya3MuICAqLworU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC5pbnRlcnAgICAgICAgMCA6IHsgKiguaW50ZXJwKSB9CisgIC5ub3RlLmdudS5idWlsZC1pZCA6IHsgKigubm90ZS5nbnUuYnVpbGQtaWQpIH0KKyAgLmhhc2ggICAgICAgICAwIDogeyAqKC5oYXNoKSB9CisgIC5nbnUuaGFzaCAgICAgMCA6IHsgKiguZ251Lmhhc2gpIH0KKyAgLmR5bnN5bSAgICAgICAwIDogeyAqKC5keW5zeW0pIH0KKyAgLmR5bnN0ciAgICAgICAwIDogeyAqKC5keW5zdHIpIH0KKyAgLmdudS52ZXJzaW9uICAwIDogeyAqKC5nbnUudmVyc2lvbikgfQorICAuZ251LnZlcnNpb25fZCAwOiB7ICooLmdudS52ZXJzaW9uX2QpIH0KKyAgLmdudS52ZXJzaW9uX3IgMDogeyAqKC5nbnUudmVyc2lvbl9yKSB9CisgIC5yZWwuaW5pdCAgICAgMCA6IHsgKigucmVsLmluaXQpIH0KKyAgLnJlbGEuaW5pdCAgICAwIDogeyAqKC5yZWxhLmluaXQpIH0KKyAgLnJlbC50ZXh0ICAgICAwIDogeyAqKC5yZWwudGV4dCkgfQorICAucmVsYS50ZXh0ICAgIDAgOiB7ICooLnJlbGEudGV4dCkgfQorICAucmVsLmZpbmkgICAgIDAgOiB7ICooLnJlbC5maW5pKSB9CisgIC5yZWxhLmZpbmkgICAgMCA6IHsgKigucmVsYS5maW5pKSB9CisgIC5yZWwucm9kYXRhICAgMCA6IHsgKigucmVsLnJvZGF0YSkgfQorICAucmVsYS5yb2RhdGEgIDAgOiB7ICooLnJlbGEucm9kYXRhKSB9CisgIC5yZWwuZGF0YS5yZWwucm8gMCA6IHsgKigucmVsLmRhdGEucmVsLnJvKSB9CisgIC5yZWxhLmRhdGEucmVsLnJvIDAgOiB7ICooLnJlbGEuZGF0YS5yZWwucm8pIH0KKyAgLnJlbC5kYXRhICAgICAwIDogeyAqKC5yZWwuZGF0YSkgfQorICAucmVsYS5kYXRhICAgIDAgOiB7ICooLnJlbGEuZGF0YSkgfQorICAucmVsLnRkYXRhCTAgOiB7ICooLnJlbC50ZGF0YSkgfQorICAucmVsYS50ZGF0YQkwIDogeyAqKC5yZWxhLnRkYXRhKSB9CisgIC5yZWwudGJzcwkwIDogeyAqKC5yZWwudGJzcykgfQorICAucmVsYS50YnNzCTAgOiB7ICooLnJlbGEudGJzcykgfQorICAucmVsLmN0b3JzICAgIDAgOiB7ICooLnJlbC5jdG9ycykgfQorICAucmVsYS5jdG9ycyAgIDAgOiB7ICooLnJlbGEuY3RvcnMpIH0KKyAgLnJlbC5kdG9ycyAgICAwIDogeyAqKC5yZWwuZHRvcnMpIH0KKyAgLnJlbGEuZHRvcnMgICAwIDogeyAqKC5yZWxhLmR0b3JzKSB9CisgIC5yZWwuZ290ICAgICAgMCA6IHsgKigucmVsLmdvdCkgfQorICAucmVsYS5nb3QgICAgIDAgOiB7ICooLnJlbGEuZ290KSB9CisgIC5yZWwuYnNzICAgICAgMCA6IHsgKigucmVsLmJzcykgfQorICAucmVsYS5ic3MgICAgIDAgOiB7ICooLnJlbGEuYnNzKSB9CisgIC5yZWwuaXBsdCAgICAgMCA6CisgICAgeworICAgICAgKigucmVsLmlwbHQpCisgICAgfQorICAucmVsYS5pcGx0ICAgIDAgOgorICAgIHsKKyAgICAgICooLnJlbGEuaXBsdCkKKyAgICB9CisgIC5yZWwucGx0ICAgICAgMCA6CisgICAgeworICAgICAgKigucmVsLnBsdCkKKyAgICB9CisgIC5yZWxhLnBsdCAgICAgMCA6CisgICAgeworICAgICAgKigucmVsYS5wbHQpCisgICAgfQorICAuaW5pdCAgICAgICAgIDAgOgorICB7CisgICAgS0VFUCAoKiguaW5pdCkpCisgIH0gPTAKKyAgLnBsdCAgICAgICAgICAwIDogeyAqKC5wbHQpIH0KKyAgLmlwbHQgICAgICAgICAwIDogeyAqKC5pcGx0KSB9CisgIC50ZXh0ICAgICAgICAgMCA6CisgIHsKKyAgICAqKC50ZXh0IC5zdHViKQorICAgIC8qIC5nbnUud2FybmluZyBzZWN0aW9ucyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgYnkgZWxmMzIuZW0uICAqLworICAgICooLmdudS53YXJuaW5nKQorICB9ID0wCisgIC5maW5pICAgICAgICAgMCA6CisgIHsKKyAgICBLRUVQICgqKC5maW5pKSkKKyAgfSA9MAorICAucm9kYXRhICAgICAgIDAgOiB7ICooLnJvZGF0YSkgfQorICAucm9kYXRhMSAgICAgIDAgOiB7ICooLnJvZGF0YTEpIH0KKyAgLkFSTS5leHRhYiAwIDogeyAqKC5BUk0uZXh0YWIpIH0KKyAgLkFSTS5leGlkeCAwIDogeyAqKC5BUk0uZXhpZHgpIH0KKyAgLmVoX2ZyYW1lX2hkciA6IHsgKiguZWhfZnJhbWVfaGRyKSB9CisgIC5laF9mcmFtZSAgICAgMCA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgMCA6IE9OTFlfSUZfUk8geyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogQWRqdXN0IHRoZSBhZGRyZXNzIGZvciB0aGUgZGF0YSBzZWdtZW50LiAgV2Ugd2FudCB0byBhZGp1c3QgdXAgdG8KKyAgICAgdGhlIHNhbWUgYWRkcmVzcyB3aXRoaW4gdGhlIHBhZ2Ugb24gdGhlIG5leHQgcGFnZSB1cC4gICovCisgIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyAgKi8KKyAgLmVoX2ZyYW1lICAgICAwIDogT05MWV9JRl9SVyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAwIDogT05MWV9JRl9SVyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCTAgOiB7ICooLnRkYXRhKSB9CisgIC50YnNzCQkwIDogeyAqKC50YnNzKSB9CisgIC5wcmVpbml0X2FycmF5ICAgMCA6CisgIHsKKyAgICBLRUVQICgqKC5wcmVpbml0X2FycmF5KSkKKyAgfQorICAuaW5pdF9hcnJheSAgIDAgOgorICB7CisgICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgIEtFRVAgKCooLmluaXRfYXJyYXkpKQorICB9CisgIC5maW5pX2FycmF5ICAgMCA6CisgIHsKKyAgICBLRUVQICgqKC5maW5pX2FycmF5KSkKKyAgICBLRUVQICgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQorICB9CisgIC5qY3IgICAgICAgICAgMCA6IHsgS0VFUCAoKiguamNyKSkgfQorICAuZHluYW1pYyAgICAgIDAgOiB7ICooLmR5bmFtaWMpIH0KKyAgLmdvdCAgICAgICAgICAwIDogeyAqKC5nb3QucGx0KSAqKC5pZ290LnBsdCkgKiguZ290KSAqKC5pZ290KSB9CisgIC5kYXRhICAgICAgICAgMCA6CisgIHsKKyAgICAqKC5kYXRhKQorICAgIFNPUlQoQ09OU1RSVUNUT1JTKQorICB9CisgIC5kYXRhMSAgICAgICAgMCA6IHsgKiguZGF0YTEpIH0KKyAgLmJzcyAgICAgICAgICAwIDoKKyAgeworICAgKiguZHluYnNzKQorICAgKiguYnNzKQorICAgKihDT01NT04pCisgICAvKiBBbGlnbiBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSAuYnNzIHNlY3Rpb24gb2NjdXBpZXMgc3BhY2UgdXAgdG8KKyAgICAgIF9lbmQuICBBbGlnbiBhZnRlciAuYnNzIHRvIGVuc3VyZSBjb3JyZWN0IGFsaWdubWVudCBldmVuIGlmIHRoZQorICAgICAgLmJzcyBzZWN0aW9uIGRpc2FwcGVhcnMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gaW5wdXQgc2VjdGlvbnMuCisgICAgICBGSVhNRTogV2h5IGRvIHdlIG5lZWQgaXQ/IFdoZW4gdGhlcmUgaXMgbm8gLmJzcyBzZWN0aW9uLCB3ZSBkb24ndAorICAgICAgcGFkIHRoZSAuZGF0YSBzZWN0aW9uLiAgKi8KKyAgfQorICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAgICAgICAgICAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyICAgICAgIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAgICAgMCA6IHsgKiguc3RhYi5leGNsKSB9CisgIC5zdGFiLmV4Y2xzdHIgIDAgOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAuc3RhYi5pbmRleCAgICAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisgIC5zdGFiLmluZGV4c3RyIDAgOiB7ICooLnN0YWIuaW5kZXhzdHIpIH0KKyAgLmNvbW1lbnQgICAgICAgMCA6IHsgKiguY29tbWVudCkgfQorICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KKyAgICAgU3ltYm9scyBpbiB0aGUgRFdBUkYgZGVidWdnaW5nIHNlY3Rpb25zIGFyZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nCisgICAgIG9mIHRoZSBzZWN0aW9uIHNvIHdlIGJlZ2luIHRoZW0gYXQgMC4gICovCisgIC8qIERXQVJGIDEgKi8KKyAgLmRlYnVnICAgICAgICAgIDAgOiB7ICooLmRlYnVnKSB9CisgIC5saW5lICAgICAgICAgICAwIDogeyAqKC5saW5lKSB9CisgIC8qIEdOVSBEV0FSRiAxIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3NyY2luZm8gIDAgOiB7ICooLmRlYnVnX3NyY2luZm8pIH0KKyAgLmRlYnVnX3NmbmFtZXMgIDAgOiB7ICooLmRlYnVnX3NmbmFtZXMpIH0KKyAgLyogRFdBUkYgMS4xIGFuZCBEV0FSRiAyICovCisgIC5kZWJ1Z19hcmFuZ2VzICAwIDogeyAqKC5kZWJ1Z19hcmFuZ2VzKSB9CisgIC5kZWJ1Z19wdWJuYW1lcyAwIDogeyAqKC5kZWJ1Z19wdWJuYW1lcykgfQorICAvKiBEV0FSRiAyICovCisgIC5kZWJ1Z19pbmZvICAgICAwIDogeyAqKC5kZWJ1Z19pbmZvKSB9CisgIC5kZWJ1Z19hYmJyZXYgICAwIDogeyAqKC5kZWJ1Z19hYmJyZXYpIH0KKyAgLmRlYnVnX2xpbmUgICAgIDAgOiB7ICooLmRlYnVnX2xpbmUpIH0KKyAgLmRlYnVnX2ZyYW1lICAgIDAgOiB7ICooLmRlYnVnX2ZyYW1lKSB9CisgIC5kZWJ1Z19zdHIgICAgICAwIDogeyAqKC5kZWJ1Z19zdHIpIH0KKyAgLmRlYnVnX2xvYyAgICAgIDAgOiB7ICooLmRlYnVnX2xvYykgfQorICAuZGVidWdfbWFjaW5mbyAgMCA6IHsgKiguZGVidWdfbWFjaW5mbykgfQorICAvKiBTR0kvTUlQUyBEV0FSRiAyIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3dlYWtuYW1lcyAwIDogeyAqKC5kZWJ1Z193ZWFrbmFtZXMpIH0KKyAgLmRlYnVnX2Z1bmNuYW1lcyAwIDogeyAqKC5kZWJ1Z19mdW5jbmFtZXMpIH0KKyAgLmRlYnVnX3R5cGVuYW1lcyAwIDogeyAqKC5kZWJ1Z190eXBlbmFtZXMpIH0KKyAgLmRlYnVnX3Zhcm5hbWVzICAwIDogeyAqKC5kZWJ1Z192YXJuYW1lcykgfQorICAvKiBEV0FSRiAzICovCisgIC5kZWJ1Z19wdWJ0eXBlcyAwIDogeyAqKC5kZWJ1Z19wdWJ0eXBlcykgfQorICAuZGVidWdfcmFuZ2VzICAgMCA6IHsgKiguZGVidWdfcmFuZ2VzKSB9CisgIC5nbnUuYXR0cmlidXRlcyAwIDogeyBLRUVQICgqKC5nbnUuYXR0cmlidXRlcykpIH0KKyAgLm5vdGUuZ251LmFybS5pZGVudCAwIDogeyBLRUVQICgqKC5ub3RlLmdudS5hcm0uaWRlbnQpKSB9Cit9CmRpZmYgLS1naXQgYS9saWIvbGRzY3JpcHRzL2FybWVsZmJfbGludXhfZWFiaS54dyBiL2xpYi9sZHNjcmlwdHMvYXJtZWxmYl9saW51eF9lYWJpLnh3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYzhmZjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbGRzY3JpcHRzL2FybWVsZmJfbGludXhfZWFiaS54dwpAQCAtMCwwICsxLDIyNyBAQAorLyogU2NyaXB0IGZvciAteiBjb21icmVsb2MgLXogbm93IC16IHJlbHJvOiBjb21iaW5lIGFuZCBzb3J0IHJlbG9jIHNlY3Rpb25zICovCitPVVRQVVRfRk9STUFUKCJlbGYzMi1iaWdhcm0iLCAiZWxmMzItYmlnYXJtIiwKKwkgICAgICAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQVJDSF9ESVIoIj0vdXNyL2xvY2FsL2xpYiIpOyBTRUFSQ0hfRElSKCI9L2xpYiIpOyBTRUFSQ0hfRElSKCI9L3Vzci9saWIiKTsKK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICBQUk9WSURFIChfX2V4ZWN1dGFibGVfc3RhcnQgPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAweDAwMDA4MDAwKSk7IC4gPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAweDAwMDA4MDAwKSArIFNJWkVPRl9IRUFERVJTOworICAuaW50ZXJwICAgICAgICAgOiB7ICooLmludGVycCkgfQorICAubm90ZS5nbnUuYnVpbGQtaWQgOiB7ICooLm5vdGUuZ251LmJ1aWxkLWlkKSB9CisgIC5oYXNoICAgICAgICAgICA6IHsgKiguaGFzaCkgfQorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CisgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CisgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CisgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KKyAgLmdudS52ZXJzaW9uX2QgIDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CisgIC5nbnUudmVyc2lvbl9yICA6IHsgKiguZ251LnZlcnNpb25fcikgfQorICAucmVsLmR5biAgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbC5pbml0KQorICAgICAgKigucmVsLnRleHQgLnJlbC50ZXh0LiogLnJlbC5nbnUubGlua29uY2UudC4qKQorICAgICAgKigucmVsLmZpbmkpCisgICAgICAqKC5yZWwucm9kYXRhIC5yZWwucm9kYXRhLiogLnJlbC5nbnUubGlua29uY2Uuci4qKQorICAgICAgKigucmVsLmRhdGEucmVsLnJvKiAucmVsLmdudS5saW5rb25jZS5kLnJlbC5yby4qKQorICAgICAgKigucmVsLmRhdGEgLnJlbC5kYXRhLiogLnJlbC5nbnUubGlua29uY2UuZC4qKQorICAgICAgKigucmVsLnRkYXRhIC5yZWwudGRhdGEuKiAucmVsLmdudS5saW5rb25jZS50ZC4qKQorICAgICAgKigucmVsLnRic3MgLnJlbC50YnNzLiogLnJlbC5nbnUubGlua29uY2UudGIuKikKKyAgICAgICooLnJlbC5jdG9ycykKKyAgICAgICooLnJlbC5kdG9ycykKKyAgICAgICooLnJlbC5nb3QpCisgICAgICAqKC5yZWwuYnNzIC5yZWwuYnNzLiogLnJlbC5nbnUubGlua29uY2UuYi4qKQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgICooLnJlbC5pcGx0KQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfZW5kID0gLik7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9lbmQgPSAuKTsKKyAgICB9CisgIC5yZWxhLmR5biAgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5pbml0KQorICAgICAgKigucmVsYS50ZXh0IC5yZWxhLnRleHQuKiAucmVsYS5nbnUubGlua29uY2UudC4qKQorICAgICAgKigucmVsYS5maW5pKQorICAgICAgKigucmVsYS5yb2RhdGEgLnJlbGEucm9kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnIuKikKKyAgICAgICooLnJlbGEuZGF0YSAucmVsYS5kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLmQuKikKKyAgICAgICooLnJlbGEudGRhdGEgLnJlbGEudGRhdGEuKiAucmVsYS5nbnUubGlua29uY2UudGQuKikKKyAgICAgICooLnJlbGEudGJzcyAucmVsYS50YnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLnRiLiopCisgICAgICAqKC5yZWxhLmN0b3JzKQorICAgICAgKigucmVsYS5kdG9ycykKKyAgICAgICooLnJlbGEuZ290KQorICAgICAgKigucmVsYS5ic3MgLnJlbGEuYnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLmIuKikKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbF9pcGx0X3N0YXJ0ID0gLik7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9lbmQgPSAuKTsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9zdGFydCA9IC4pOworICAgICAgKigucmVsYS5pcGx0KQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X2VuZCA9IC4pOworICAgIH0KKyAgLnJlbC5wbHQgICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWwucGx0KQorICAgIH0KKyAgLnJlbGEucGx0ICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLnBsdCkKKyAgICB9CisgIC5pbml0ICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKC5pbml0KSkKKyAgfSA9MAorICAucGx0ICAgICAgICAgICAgOiB7ICooLnBsdCkgfQorICAuaXBsdCAgICAgICAgICAgOiB7ICooLmlwbHQpIH0KKyAgLnRleHQgICAgICAgICAgIDoKKyAgeworICAgICooLnRleHQudW5saWtlbHkgLnRleHQuKl91bmxpa2VseSkKKyAgICAqKC50ZXh0IC5zdHViIC50ZXh0LiogLmdudS5saW5rb25jZS50LiopCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgICAgKiguZ2x1ZV83dCkgKiguZ2x1ZV83KSAqKC52ZnAxMV92ZW5lZXIpICooLnY0X2J4KQorICB9ID0wCisgIC5maW5pICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKC5maW5pKSkKKyAgfSA9MAorICBQUk9WSURFIChfX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKF9ldGV4dCA9IC4pOworICBQUk9WSURFIChldGV4dCA9IC4pOworICAucm9kYXRhICAgICAgICAgOiB7ICooLnJvZGF0YSAucm9kYXRhLiogLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJvZGF0YTEgICAgICAgIDogeyAqKC5yb2RhdGExKSB9CisgIC5BUk0uZXh0YWIgICA6IHsgKiguQVJNLmV4dGFiKiAuZ251LmxpbmtvbmNlLmFybWV4dGFiLiopIH0KKyAgIF9fZXhpZHhfc3RhcnQgPSAuOworICAuQVJNLmV4aWR4ICAgOiB7ICooLkFSTS5leGlkeCogLmdudS5saW5rb25jZS5hcm1leGlkeC4qKSB9CisgICBfX2V4aWR4X2VuZCA9IC47CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAuID0gQUxJR04gKENPTlNUQU5UIChNQVhQQUdFU0laRSkpIC0gKChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gLikgJiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSAtIDEpKTsgLiA9IERBVEFfU0VHTUVOVF9BTElHTiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSwgQ09OU1RBTlQgKENPTU1PTlBBR0VTSVpFKSk7CisgIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyAgKi8KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9SVyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9SVyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCSAgOiB7ICooLnRkYXRhIC50ZGF0YS4qIC5nbnUubGlua29uY2UudGQuKikgfQorICAudGJzcwkJICA6IHsgKigudGJzcyAudGJzcy4qIC5nbnUubGlua29uY2UudGIuKikgKigudGNvbW1vbikgfQorICAucHJlaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmluaXRfYXJyYXkgICAgIDoKKyAgeworICAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgIEtFRVAgKCooLmluaXRfYXJyYXkpKQorICAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X2VuZCA9IC4pOworICB9CisgIC5maW5pX2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgICAgS0VFUCAoKihTT1JUKC5maW5pX2FycmF5LiopKSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X2VuZCA9IC4pOworICB9CisgIC5jdG9ycyAgICAgICAgICA6CisgIHsKKyAgICAvKiBnY2MgdXNlcyBjcnRiZWdpbi5vIHRvIGZpbmQgdGhlIHN0YXJ0IG9mCisgICAgICAgdGhlIGNvbnN0cnVjdG9ycywgc28gd2UgbWFrZSBzdXJlIGl0IGlzCisgICAgICAgZmlyc3QuICBCZWNhdXNlIHRoaXMgaXMgYSB3aWxkY2FyZCwgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciBpZiB0aGUgdXNlciBkb2VzIG5vdAorICAgICAgIGFjdHVhbGx5IGxpbmsgYWdhaW5zdCBjcnRiZWdpbi5vOyB0aGUKKyAgICAgICBsaW5rZXIgd29uJ3QgbG9vayBmb3IgYSBmaWxlIHRvIG1hdGNoIGEKKyAgICAgICB3aWxkY2FyZC4gIFRoZSB3aWxkY2FyZCBhbHNvIG1lYW5zIHRoYXQgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciB3aGljaCBkaXJlY3RvcnkgY3J0YmVnaW4ubworICAgICAgIGlzIGluLiAgKi8KKyAgICBLRUVQICgqY3J0YmVnaW4ubyguY3RvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguY3RvcnMpKQorICAgIC8qIFdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGUgLmN0b3Igc2VjdGlvbiBmcm9tCisgICAgICAgdGhlIGNydGVuZC5vIGZpbGUgdW50aWwgYWZ0ZXIgdGhlIHNvcnRlZCBjdG9ycy4KKyAgICAgICBUaGUgLmN0b3Igc2VjdGlvbiBmcm9tIHRoZSBjcnRlbmQgZmlsZSBjb250YWlucyB0aGUKKyAgICAgICBlbmQgb2YgY3RvcnMgbWFya2VyIGFuZCBpdCBtdXN0IGJlIGxhc3QgKi8KKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuY3RvcnMpKQorICAgIEtFRVAgKCooU09SVCguY3RvcnMuKikpKQorICAgIEtFRVAgKCooLmN0b3JzKSkKKyAgfQorICAuZHRvcnMgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmR0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmR0b3JzKSkKKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuZHRvcnMpKQorICAgIEtFRVAgKCooU09SVCguZHRvcnMuKikpKQorICAgIEtFRVAgKCooLmR0b3JzKSkKKyAgfQorICAuamNyICAgICAgICAgICAgOiB7IEtFRVAgKCooLmpjcikpIH0KKyAgLmRhdGEucmVsLnJvIDogeyAqKC5kYXRhLnJlbC5yby5sb2NhbCogLmdudS5saW5rb25jZS5kLnJlbC5yby5sb2NhbC4qKSAqKC5kYXRhLnJlbC5ybyogLmdudS5saW5rb25jZS5kLnJlbC5yby4qKSB9CisgIC5keW5hbWljICAgICAgICA6IHsgKiguZHluYW1pYykgfQorICAuZ290ICAgICAgICAgICAgOiB7ICooLmdvdC5wbHQpICooLmlnb3QucGx0KSAqKC5nb3QpICooLmlnb3QpIH0KKyAgLiA9IERBVEFfU0VHTUVOVF9SRUxST19FTkQgKDAsIC4pOworICAuZGF0YSAgICAgICAgICAgOgorICB7CisgICAgUFJPVklERSAoX19kYXRhX3N0YXJ0ID0gLik7CisgICAgKiguZGF0YSAuZGF0YS4qIC5nbnUubGlua29uY2UuZC4qKQorICAgIFNPUlQoQ09OU1RSVUNUT1JTKQorICB9CisgIC5kYXRhMSAgICAgICAgICA6IHsgKiguZGF0YTEpIH0KKyAgX2VkYXRhID0gLjsgUFJPVklERSAoZWRhdGEgPSAuKTsKKyAgX19ic3Nfc3RhcnQgPSAuOworICBfX2Jzc19zdGFydF9fID0gLjsKKyAgLmJzcyAgICAgICAgICAgIDoKKyAgeworICAgKiguZHluYnNzKQorICAgKiguYnNzIC5ic3MuKiAuZ251LmxpbmtvbmNlLmIuKikKKyAgICooQ09NTU9OKQorICAgLyogQWxpZ24gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgLmJzcyBzZWN0aW9uIG9jY3VwaWVzIHNwYWNlIHVwIHRvCisgICAgICBfZW5kLiAgQWxpZ24gYWZ0ZXIgLmJzcyB0byBlbnN1cmUgY29ycmVjdCBhbGlnbm1lbnQgZXZlbiBpZiB0aGUKKyAgICAgIC5ic3Mgc2VjdGlvbiBkaXNhcHBlYXJzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGlucHV0IHNlY3Rpb25zLgorICAgICAgRklYTUU6IFdoeSBkbyB3ZSBuZWVkIGl0PyBXaGVuIHRoZXJlIGlzIG5vIC5ic3Mgc2VjdGlvbiwgd2UgZG9uJ3QKKyAgICAgIHBhZCB0aGUgLmRhdGEgc2VjdGlvbi4gICovCisgICAuID0gQUxJR04oLiAhPSAwID8gMzIgLyA4IDogMSk7CisgIH0KKyAgX2Jzc19lbmRfXyA9IC4gOyBfX2Jzc19lbmRfXyA9IC4gOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIF9fZW5kX18gPSAuIDsKKyAgX2VuZCA9IC47IFBST1ZJREUgKGVuZCA9IC4pOworICAuID0gREFUQV9TRUdNRU5UX0VORCAoLik7CisgIC8qIFN0YWJzIGRlYnVnZ2luZyBzZWN0aW9ucy4gICovCisgIC5zdGFiICAgICAgICAgIDAgOiB7ICooLnN0YWIpIH0KKyAgLnN0YWJzdHIgICAgICAgMCA6IHsgKiguc3RhYnN0cikgfQorICAuc3RhYi5leGNsICAgICAwIDogeyAqKC5zdGFiLmV4Y2wpIH0KKyAgLnN0YWIuZXhjbHN0ciAgMCA6IHsgKiguc3RhYi5leGNsc3RyKSB9CisgIC5zdGFiLmluZGV4ICAgIDAgOiB7ICooLnN0YWIuaW5kZXgpIH0KKyAgLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQorICAuY29tbWVudCAgICAgICAwIDogeyAqKC5jb21tZW50KSB9CisgIC8qIERXQVJGIGRlYnVnIHNlY3Rpb25zLgorICAgICBTeW1ib2xzIGluIHRoZSBEV0FSRiBkZWJ1Z2dpbmcgc2VjdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcKKyAgICAgb2YgdGhlIHNlY3Rpb24gc28gd2UgYmVnaW4gdGhlbSBhdCAwLiAgKi8KKyAgLyogRFdBUkYgMSAqLworICAuZGVidWcgICAgICAgICAgMCA6IHsgKiguZGVidWcpIH0KKyAgLmxpbmUgICAgICAgICAgIDAgOiB7ICooLmxpbmUpIH0KKyAgLyogR05VIERXQVJGIDEgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfc3JjaW5mbyAgMCA6IHsgKiguZGVidWdfc3JjaW5mbykgfQorICAuZGVidWdfc2ZuYW1lcyAgMCA6IHsgKiguZGVidWdfc2ZuYW1lcykgfQorICAvKiBEV0FSRiAxLjEgYW5kIERXQVJGIDIgKi8KKyAgLmRlYnVnX2FyYW5nZXMgIDAgOiB7ICooLmRlYnVnX2FyYW5nZXMpIH0KKyAgLmRlYnVnX3B1Ym5hbWVzIDAgOiB7ICooLmRlYnVnX3B1Ym5hbWVzKSB9CisgIC8qIERXQVJGIDIgKi8KKyAgLmRlYnVnX2luZm8gICAgIDAgOiB7ICooLmRlYnVnX2luZm8gLmdudS5saW5rb25jZS53aS4qKSB9CisgIC5kZWJ1Z19hYmJyZXYgICAwIDogeyAqKC5kZWJ1Z19hYmJyZXYpIH0KKyAgLmRlYnVnX2xpbmUgICAgIDAgOiB7ICooLmRlYnVnX2xpbmUpIH0KKyAgLmRlYnVnX2ZyYW1lICAgIDAgOiB7ICooLmRlYnVnX2ZyYW1lKSB9CisgIC5kZWJ1Z19zdHIgICAgICAwIDogeyAqKC5kZWJ1Z19zdHIpIH0KKyAgLmRlYnVnX2xvYyAgICAgIDAgOiB7ICooLmRlYnVnX2xvYykgfQorICAuZGVidWdfbWFjaW5mbyAgMCA6IHsgKiguZGVidWdfbWFjaW5mbykgfQorICAvKiBTR0kvTUlQUyBEV0FSRiAyIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3dlYWtuYW1lcyAwIDogeyAqKC5kZWJ1Z193ZWFrbmFtZXMpIH0KKyAgLmRlYnVnX2Z1bmNuYW1lcyAwIDogeyAqKC5kZWJ1Z19mdW5jbmFtZXMpIH0KKyAgLmRlYnVnX3R5cGVuYW1lcyAwIDogeyAqKC5kZWJ1Z190eXBlbmFtZXMpIH0KKyAgLmRlYnVnX3Zhcm5hbWVzICAwIDogeyAqKC5kZWJ1Z192YXJuYW1lcykgfQorICAvKiBEV0FSRiAzICovCisgIC5kZWJ1Z19wdWJ0eXBlcyAwIDogeyAqKC5kZWJ1Z19wdWJ0eXBlcykgfQorICAuZGVidWdfcmFuZ2VzICAgMCA6IHsgKiguZGVidWdfcmFuZ2VzKSB9CisgIC5nbnUuYXR0cmlidXRlcyAwIDogeyBLRUVQICgqKC5nbnUuYXR0cmlidXRlcykpIH0KKyAgLm5vdGUuZ251LmFybS5pZGVudCAwIDogeyBLRUVQICgqKC5ub3RlLmdudS5hcm0uaWRlbnQpKSB9CisgIC9ESVNDQVJELyA6IHsgKigubm90ZS5HTlUtc3RhY2spICooLmdudV9kZWJ1Z2xpbmspICooLmdudS5sdG9fKikgfQorfQpkaWZmIC0tZ2l0IGEvbGliL2xpYiBiL2xpYi9saWIKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uNzk1MTQwNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9saWIKQEAgLTAsMCArMSBAQAorbGliClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGliL2xpYmV4cGF0LmxhIGIvbGliL2xpYmV4cGF0LmxhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE0NzY4Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbGliZXhwYXQubGEKQEAgLTAsMCArMSwzNSBAQAorIyBsaWJleHBhdC5sYSAtIGEgbGlidG9vbCBsaWJyYXJ5IGZpbGUKKyMgR2VuZXJhdGVkIGJ5IGx0bWFpbi5zaCAtIEdOVSBsaWJ0b29sIDEuNS4yMiAoMS4xMjIwLjIuMzY1IDIwMDUvMTIvMTggMjI6MTQ6MDYpCisjCisjIFBsZWFzZSBETyBOT1QgZGVsZXRlIHRoaXMgZmlsZSEKKyMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgorCisjIFRoZSBuYW1lIHRoYXQgd2UgY2FuIGRsb3BlbigzKS4KK2RsbmFtZT0nbGliZXhwYXQuc28uMScKKworIyBOYW1lcyBvZiB0aGlzIGxpYnJhcnkuCitsaWJyYXJ5X25hbWVzPSdsaWJleHBhdC5zby4xLjUuMiBsaWJleHBhdC5zby4xIGxpYmV4cGF0LnNvJworCisjIFRoZSBuYW1lIG9mIHRoZSBzdGF0aWMgYXJjaGl2ZS4KK29sZF9saWJyYXJ5PScnCisKKyMgTGlicmFyaWVzIHRoYXQgdGhpcyBvbmUgZGVwZW5kcyB1cG9uLgorZGVwZW5kZW5jeV9saWJzPScgLUwvdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC9saWIgLUwvdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3IvbGliJworCisjIFZlcnNpb24gaW5mb3JtYXRpb24gZm9yIGxpYmV4cGF0LgorY3VycmVudD02CithZ2U9NQorcmV2aXNpb249MgorCisjIElzIHRoaXMgYW4gYWxyZWFkeSBpbnN0YWxsZWQgbGlicmFyeT8KK2luc3RhbGxlZD15ZXMKKworIyBTaG91bGQgd2Ugd2FybiBhYm91dCBwb3J0YWJpbGl0eSB3aGVuIGxpbmtpbmcgYWdhaW5zdCAtbW9kdWxlcz8KK3Nob3VsZG5vdGxpbms9bm8KKworIyBGaWxlcyB0byBkbG9wZW4vZGxwcmVvcGVuCitkbG9wZW49JycKK2RscHJlb3Blbj0nJworCisjIERpcmVjdG9yeSB0aGF0IHRoaXMgbGlicmFyeSBuZWVkcyB0byBiZSBpbnN0YWxsZWQgaW46CitsaWJkaXI9Jy91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9ob3N0L3Vzci9saWInCmRpZmYgLS1naXQgYS9saWIvbGliZXhwYXQuc28gYi9saWIvbGliZXhwYXQuc28KbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uZDlhMjczNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9saWJleHBhdC5zbwpAQCAtMCwwICsxIEBACitsaWJleHBhdC5zby4xLjUuMgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYi9saWJleHBhdC5zby4xIGIvbGliL2xpYmV4cGF0LnNvLjEKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uZDlhMjczNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9saWJleHBhdC5zby4xCkBAIC0wLDAgKzEgQEAKK2xpYmV4cGF0LnNvLjEuNS4yClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGliL2xpYmV4cGF0LnNvLjEuNS4yIGIvbGliL2xpYmV4cGF0LnNvLjEuNS4yCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE0OGJhYjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbGliZXhwYXQuc28uMS41LjIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliL2xpYmliZXJ0eS5hIGIvbGliL2xpYmliZXJ0eS5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxODBkNjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbGliaWJlcnR5LmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliL2xpYmx0ZGwubGEgYi9saWIvbGlibHRkbC5sYQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NzM0NmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2xpYmx0ZGwubGEKQEAgLTAsMCArMSw0MSBAQAorIyBsaWJsdGRsLmxhIC0gYSBsaWJ0b29sIGxpYnJhcnkgZmlsZQorIyBHZW5lcmF0ZWQgYnkgbGlidG9vbCAoR05VIGxpYnRvb2wpIDIuMi4xMAorIworIyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZpbGUhCisjIEl0IGlzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyB0aGUgbGlicmFyeS4KKworIyBUaGUgbmFtZSB0aGF0IHdlIGNhbiBkbG9wZW4oMykuCitkbG5hbWU9J2xpYmx0ZGwuc28uNycKKworIyBOYW1lcyBvZiB0aGlzIGxpYnJhcnkuCitsaWJyYXJ5X25hbWVzPSdsaWJsdGRsLnNvLjcuMi4yIGxpYmx0ZGwuc28uNyBsaWJsdGRsLnNvJworCisjIFRoZSBuYW1lIG9mIHRoZSBzdGF0aWMgYXJjaGl2ZS4KK29sZF9saWJyYXJ5PScnCisKKyMgTGlua2VyIGZsYWdzIHRoYXQgY2FuIG5vdCBnbyBpbiBkZXBlbmRlbmN5X2xpYnMuCitpbmhlcml0ZWRfbGlua2VyX2ZsYWdzPScnCisKKyMgTGlicmFyaWVzIHRoYXQgdGhpcyBvbmUgZGVwZW5kcyB1cG9uLgorZGVwZW5kZW5jeV9saWJzPScgLWxkbCAtTC91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9ob3N0L2xpYiAtTC91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9ob3N0L3Vzci9saWInCisKKyMgTmFtZXMgb2YgYWRkaXRpb25hbCB3ZWFrIGxpYnJhcmllcyBwcm92aWRlZCBieSB0aGlzIGxpYnJhcnkKK3dlYWtfbGlicmFyeV9uYW1lcz0nJworCisjIFZlcnNpb24gaW5mb3JtYXRpb24gZm9yIGxpYmx0ZGwuCitjdXJyZW50PTkKK2FnZT0yCityZXZpc2lvbj0yCisKKyMgSXMgdGhpcyBhbiBhbHJlYWR5IGluc3RhbGxlZCBsaWJyYXJ5PworaW5zdGFsbGVkPXllcworCisjIFNob3VsZCB3ZSB3YXJuIGFib3V0IHBvcnRhYmlsaXR5IHdoZW4gbGlua2luZyBhZ2FpbnN0IC1tb2R1bGVzPworc2hvdWxkbm90bGluaz1ubworCisjIEZpbGVzIHRvIGRsb3Blbi9kbHByZW9wZW4KK2Rsb3Blbj0nJworZGxwcmVvcGVuPScnCisKKyMgRGlyZWN0b3J5IHRoYXQgdGhpcyBsaWJyYXJ5IG5lZWRzIHRvIGJlIGluc3RhbGxlZCBpbjoKK2xpYmRpcj0nL3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyL2xpYicKZGlmZiAtLWdpdCBhL2xpYi9saWJsdGRsLnNvIGIvbGliL2xpYmx0ZGwuc28KbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uZDg5NmM3MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9saWJsdGRsLnNvCkBAIC0wLDAgKzEgQEAKK2xpYmx0ZGwuc28uNy4yLjIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWIvbGlibHRkbC5zby43IGIvbGliL2xpYmx0ZGwuc28uNwpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5kODk2YzcyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2xpYmx0ZGwuc28uNwpAQCAtMCwwICsxIEBACitsaWJsdGRsLnNvLjcuMi4yClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGliL2xpYmx0ZGwuc28uNy4yLjIgYi9saWIvbGlibHRkbC5zby43LjIuMgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44OGJiM2IzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2xpYmx0ZGwuc28uNy4yLjIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXhlYy9hd2svZ3JjYXQgYi9saWJleGVjL2F3ay9ncmNhdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNGRmYzI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZXhlYy9hd2svZ3JjYXQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXhlYy9hd2svcHdjYXQgYi9saWJleGVjL2F3ay9wd2NhdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYTUyNjU3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZXhlYy9hd2svcHdjYXQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXhlYy9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9jYzEgYi9saWJleGVjL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2NjMQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMmVmODE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZXhlYy9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9jYzEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXhlYy9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9jYzFwbHVzIGIvbGliZXhlYy9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9jYzFwbHVzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQzMjAyYzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJleGVjL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2NjMXBsdXMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXhlYy9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9jb2xsZWN0MiBiL2xpYmV4ZWMvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvY29sbGVjdDIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmRjMDBiMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmV4ZWMvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvY29sbGVjdDIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXhlYy9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9pbnN0YWxsLXRvb2xzL2ZpeGluYy5zaCBiL2xpYmV4ZWMvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5zdGFsbC10b29scy9maXhpbmMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTczYWVkOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmV4ZWMvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5zdGFsbC10b29scy9maXhpbmMuc2gKQEAgLTAsMCArMSw0OTggQEAKKyMhL2Jpbi9zaAorIworIyBJbnN0YWxsIG1vZGlmaWVkIHZlcnNpb25zIG9mIGNlcnRhaW4gQU5TSS1pbmNvbXBhdGlibGUgc3lzdGVtIGhlYWRlcgorIyBmaWxlcyB3aGljaCBhcmUgZml4ZWQgdG8gd29yayBjb3JyZWN0bHkgd2l0aCBBTlNJIEMgYW5kIHBsYWNlZCBpbiBhCisjIGRpcmVjdG9yeSB0aGF0IEdDQyB3aWxsIHNlYXJjaC4KKyMKKyMgU2VlIFJFQURNRS1maXhpbmMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisjCisjICBmaXhpbmNsdWRlcyBjb3B5cmlnaHQgKGMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDIsIDIwMDkKKyMgIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgZml4aW5jbHVkZXMgaXMgZnJlZSBzb2Z0d2FyZS4KKyMgCisjIFlvdSBtYXkgcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjIAorIyBmaXhpbmNsdWRlcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMgCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggZml4aW5jbHVkZXM7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyMgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIworIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMKKworIyBVc2FnZTogZml4aW5jLnNoIG91dHB1dC1kaXIgaW5wdXQtZGlyCisjCisjIERpcmVjdG9yeSBpbiB3aGljaCB0byBzdG9yZSB0aGUgcmVzdWx0cy4KKyMgRmFpbCBpZiBubyBhcmcgdG8gc3BlY2lmeSBhIGRpcmVjdG9yeSBmb3IgdGhlIG91dHB1dC4KK2lmIFsgIngkMSIgPSAieCIgXQordGhlbgorICBlY2hvIGZpeGluY2x1ZGVzOiBubyBvdXRwdXQgZGlyZWN0b3J5IHNwZWNpZmllZAorICBleGl0IDEKK2ZpCisKK0xJQj0kezF9CitzaGlmdAorCisjIE1ha2Ugc3VyZSBpdCBleGlzdHMuCitpZiBbICEgLWQgJExJQiBdOyB0aGVuCisgIG1rZGlyICRMSUIgfHwgeworICAgIGVjaG8gZml4aW5jbHVkZXM6ICBvdXRwdXQgZGlyICdgJyRMSUIiJyBjYW5ub3QgYmUgY3JlYXRlZCIKKyAgICBleGl0IDEKKyAgfQorZWxzZQorICAoIGNkICRMSUIgJiYgdG91Y2ggRE9ORSAmJiBybSBET05FICkgfHwgeworICAgIGVjaG8gZml4aW5jbHVkZXM6ICBvdXRwdXQgZGlyICdgJyRMSUIiJyBpcyBhbiBpbnZhbGlkIGRpcmVjdG9yeSIKKyAgICBleGl0IDEKKyAgfQorZmkKKworaWYgdGVzdCAteiAiJFZFUkJPU0UiCit0aGVuCisgIFZFUkJPU0U9MgorICBleHBvcnQgVkVSQk9TRQorZWxzZQorICBjYXNlICIkVkVSQk9TRSIgaW4KKyAgWzAtOV0gKSA6IDs7CisgICogKSAgVkVSQk9TRT0zIDs7CisgIGVzYWMKK2ZpCisKKyMgRGVmaW5lIHdoYXQgdGFyZ2V0IHN5c3RlbSB3ZSdyZSBmaXhpbmcuCisjCitpZiB0ZXN0IC1yIC4vTWFrZWZpbGU7IHRoZW4KKyAgdGFyZ2V0X2Nhbm9uaWNhbD0iYHNlZCAtbiAtZSAncyxedGFyZ2V0WyAJXSo9WyAJXSpcKC4qXCkkLFwxLHAnIDwgTWFrZWZpbGVgIgorZmkKKworIyBJZiBub3QgZnJvbSB0aGUgTWFrZWZpbGUsIHRoZW4gdHJ5IGNvbmZpZy5ndWVzcworIworaWYgdGVzdCAteiAiJHt0YXJnZXRfY2Fub25pY2FsfSIgOyB0aGVuCisgIGlmIHRlc3QgLXggLi9jb25maWcuZ3Vlc3MgOyB0aGVuCisgICAgdGFyZ2V0X2Nhbm9uaWNhbD0iYGNvbmZpZy5ndWVzc2AiIDsgZmkKKyAgdGVzdCAteiAiJHt0YXJnZXRfY2Fub25pY2FsfSIgJiYgdGFyZ2V0X2Nhbm9uaWNhbD11bmtub3duCitmaQorZXhwb3J0IHRhcmdldF9jYW5vbmljYWwKKworIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMKKyMKKyMgRGVmaW5lIFBXRENNRCBhcyBhIGNvbW1hbmQgdG8gdXNlIHRvIGdldCB0aGUgd29ya2luZyBkaXIKKyMgaW4gdGhlIGZvcm0gdGhhdCB3ZSB3YW50LgorUFdEQ01EPSR7UFdEQ01ELXB3ZH0KKworY2FzZSAiYCRQV0RDTURgIiBpbgorLy8qKQorICAgICMgT24gYW4gQXBvbGxvLCBkaXNjYXJkIGV2ZXJ5dGhpbmcgYmVmb3JlIGAvdXNyJy4KKyAgICBQV0RDTUQ9ImV2YWwgcHdkIHwgc2VkIC1lICdzLC4qL3Vzci8sL3Vzci8sJyIKKyAgICA7OworZXNhYworCisjIE9yaWdpbmFsIGRpcmVjdG9yeS4KK09SSUdESVI9YCR7UFdEQ01EfWAKK2V4cG9ydCBPUklHRElSCitGSVhJTkNMPWAke1BXRENNRH1gL2ZpeGluY2wKK2lmIFsgISAteCAkRklYSU5DTCBdIDsgdGhlbgorICBlY2hvICJDYW5ub3QgZmluZCBmaXhpbmNsIiA+JjIKKyAgZXhpdCAxCitmaQorZXhwb3J0IEZJWElOQ0wKKworIyBNYWtlIExJQiBhYnNvbHV0ZSBvbmx5IGlmIG5lZWRlZCB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIHRoZSBhbWQuCitjYXNlICRMSUIgaW4KKy8qKQorICAgIDs7CisqKQorICAgIGNkICRMSUI7IExJQj1gJHtQV0RDTUR9YAorICAgIDs7Citlc2FjCisKK2lmIHRlc3QgJFZFUkJPU0UgLWd0IDAKK3RoZW4gZWNobyBGaXhpbmcgaGVhZGVycyBpbnRvICR7TElCfSBmb3IgJHt0YXJnZXRfY2Fub25pY2FsfSB0YXJnZXQgOyBmaQorCisjIERldGVybWluZSB3aGV0aGVyIHRoaXMgc3lzdGVtIGhhcyBzeW1ib2xpYyBsaW5rcy4KK2lmIHRlc3QgLW4gIiRESkRJUiI7IHRoZW4KKyAgTElOS1M9ZmFsc2UKK2VsaWYgbG4gLXMgWCAkTElCL1Nob3VsZE5vdEV4aXN0IDI+L2Rldi9udWxsOyB0aGVuCisgIHJtIC1mICRMSUIvU2hvdWxkTm90RXhpc3QKKyAgTElOS1M9dHJ1ZQorZWxpZiBsbiAtcyBYIC90bXAvU2hvdWxkTm90RXhpc3QgMj4vZGV2L251bGw7IHRoZW4KKyAgcm0gLWYgL3RtcC9TaG91bGROb3RFeGlzdAorICBMSU5LUz10cnVlCitlbHNlCisgIExJTktTPWZhbHNlCitmaQorCisjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIworIworIyAgSW4gdGhlIGZpbGUgbWFjcm9fbGlzdCBhcmUgbGlzdGVkIGFsbCB0aGUgcHJlZGVmaW5lZAorIyAgbWFjcm9zIHRoYXQgYXJlIG5vdCBpbiB0aGUgQzg5IHJlc2VydmVkIG5hbWVzcGFjZSAodGhlIHJlc2VydmVkCisjICBuYW1lc3BhY2UgaXMgYWxsIGlkZW50aWZpZXJzIGJlZ2lubm5pbmcgd2l0aCB0d28gdW5kZXJzY29yZXMgb3Igb25lCisjICB1bmRlcnNjb3JlIGZvbGxvd2VkIGJ5IGEgY2FwaXRhbCBsZXR0ZXIpLiAgQSByZWd1bGFyIGV4cHJlc3Npb24gdG8gZmluZAorIyAgYW55IG9mIHRob3NlIG1hY3JvcyBpbiBhIGhlYWRlciBmaWxlIGlzIHdyaXR0ZW4gdG8gTU5fTkFNRV9QQVQuCisjCisjICBOb3RlIGRlcGVuZGVuY3kgb24gQVNDSUkuIFwwMTIgPSBuZXdsaW5lLgorIyAgdHIgJyAnICdcbicgaXMsIGFsYXMsIG5vdCBwb3J0YWJsZS4KKworaWYgdGVzdCAtcyAke01BQ1JPX0xJU1R9Cit0aGVuCisgIGlmIHRlc3QgJFZFUkJPU0UgLWd0IDA7IHRoZW4KKyAgICBlY2hvICJGb3JiaWRkZW4gaWRlbnRpZmllcnM6IGB0ciAnXDAxMicgJyAnIDwgJHtNQUNST19MSVNUfWAiCisgIGZpCisgIE1OX05BTUVfUEFUPSJgc2VkICdzL14vXFxcXDwvOyBzLyQvXFxcXD4vOyAkIXMvJC98LycgXAorICAgICAgPCAke01BQ1JPX0xJU1R9IHwgdHIgLWQgJ1wwMTInYCIKKyAgZXhwb3J0IE1OX05BTUVfUEFUCitlbHNlCisgIGlmIHRlc3QgJFZFUkJPU0UgLWd0IDAKKyAgdGhlbiBlY2hvICJObyBmb3JiaWRkZW4gaWRlbnRpZmllcnMgZGVmaW5lZCBieSB0aGlzIHRhcmdldCIgOyBmaQorZmkKKworIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMKKyMKKyMgIFNlYXJjaCBlYWNoIGlucHV0IGRpcmVjdG9yeSBmb3IgYnJva2VuIGhlYWRlciBmaWxlcy4KKyMgIFRoaXMgbG9vcCBlbmRzIG5lYXIgdGhlIGVuZCBvZiB0aGUgZmlsZS4KKyMKK2lmIHRlc3QgJCMgLWVxIDAKK3RoZW4KKyAgICBJTlBVVExJU1Q9Ii91c3IvaW5jbHVkZSIKK2Vsc2UKKyAgICBJTlBVVExJU1Q9IiRAIgorZmkKKworZm9yIElOUFVUIGluICR7SU5QVVRMSVNUfSA7IGRvCisKK2NkICR7T1JJR0RJUn0KKworIyAgTWFrZSBzdXJlIGEgZGlyZWN0b3J5IGV4aXN0cyBiZWZvcmUgY2hhbmdpbmcgaW50byBpdCwKKyMgIG90aGVyd2lzZSBTb2xhcmlzMiB3aWxsIGZhaWwtZXhpdCB0aGUgc2NyaXB0LgorIworaWYgWyAhIC1kICR7SU5QVVR9IF07IHRoZW4KKyAgY29udGludWUKK2ZpCitjZCAke0lOUFVUfQorCitJTlBVVD1gJHtQV0RDTUR9YAorZXhwb3J0IElOUFVUCisKKyMKKyMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjCisjCitpZiB0ZXN0ICRWRVJCT1NFIC1ndCAxCit0aGVuIGVjaG8gRmluZGluZyBkaXJlY3RvcmllcyBhbmQgbGlua3MgdG8gZGlyZWN0b3JpZXMgOyBmaQorCisjIEZpbmQgYWxsIGRpcmVjdG9yaWVzIGFuZCBhbGwgc3ltbGlua3MgdGhhdCBwb2ludCB0byBkaXJlY3Rvcmllcy4KKyMgUHV0IHRoZSBsaXN0IGluICRhbGxfZGlycy4KKyMgRWFjaCB0aW1lIHdlIGZpbmQgYSBzeW1saW5rLCBhZGQgaXQgdG8gbmV3ZGlycworIyBzbyB0aGF0IHdlIGRvIGFub3RoZXIgZmluZCB3aXRoaW4gdGhlIGRpciB0aGUgbGluayBwb2ludHMgdG8uCisjIE5vdGUgdGhhdCAkYWxsX2RpcnMgbWF5IGhhdmUgZHVwbGljYXRlcyBpbiBpdDsKKyMgbGF0ZXIgcGFydHMgb2YgdGhpcyBmaWxlIGFyZSBzdXBwb3NlZCB0byBpZ25vcmUgdGhlbS4KK2RpcnM9Ii4iCitsZXZlbHM9MgorYWxsX2RpcnM9IiIKK3NlYXJjaF9kaXJzPSIiCisKK3doaWxlIFsgLW4gIiRkaXJzIiBdICYmIFsgJGxldmVscyAtZ3QgMCBdCitkbworICBsZXZlbHM9YGV4cHIgJGxldmVscyAtIDFgCisgIG5ld2RpcnM9CisgIGZvciBkIGluICRkaXJzCisgIGRvCisgICAgaWYgdGVzdCAkVkVSQk9TRSAtZ3QgMQorICAgIHRoZW4gZWNobyAiIFNlYXJjaGluZyAkSU5QVVQvJGQiIDsgZmkKKworICAgICMgRmluZCBhbGwgZGlyZWN0b3JpZXMgdW5kZXIgJGQsIHJlbGF0aXZlIHRvICRkLCBleGNsdWRpbmcgJGQgaXRzZWxmLgorICAgICMgKFRoZSAvLiBpcyBuZWVkZWQgYWZ0ZXIgJGQgaW4gY2FzZSAkZCBpcyBhIHN5bWxpbmsuKQorICAgIGFsbF9kaXJzPSIkYWxsX2RpcnMgYGZpbmQgJGQvLiAtdHlwZSBkIC1wcmludCB8IFwKKyAgICAgICAgICAgICAgIHNlZCAtZSAnL1wvXC4kL2QnIC1lICdzQC8uL0AvQGcnYCIKKyAgICAjIEZpbmQgYWxsIGxpbmtzIHRvIGRpcmVjdG9yaWVzLgorICAgICMgVXNpbmcgYC1leGVjIHRlc3QgLWQnIGluIGZpbmQgZmFpbHMgb24gc29tZSBzeXN0ZW1zLAorICAgICMgYW5kIHRyeWluZyB0byBydW4gdGVzdCB2aWEgc2ggZmFpbHMgb24gb3RoZXJzLAorICAgICMgc28gdGhpcyBpcyB0aGUgc2ltcGxlc3QgYWx0ZXJuYXRpdmUgbGVmdC4KKyAgICAjIEZpcnN0IGZpbmQgYWxsIHRoZSBsaW5rcywgdGhlbiB0ZXN0IGVhY2ggb25lLgorICAgIHRoZXNlbGlua3M9CisgICAgJExJTktTICYmIFwKKyAgICAgIHRoZXNlbGlua3M9YGZpbmQgJGQvLiAtdHlwZSBsIC1wcmludCB8IHNlZCAtZSAnc0AvLi9AL0BnJ2AKKyAgICBmb3IgZDEgaW4gJHRoZXNlbGlua3MgLS1kdW1teS0tCisgICAgZG8KKyAgICAgICMgSWYgdGhlIGxpbmsgcG9pbnRzIHRvIGEgZGlyZWN0b3J5LAorICAgICAgIyBhZGQgdGhhdCBkaXIgdG8gJG5ld2RpcnMKKyAgICAgIGlmIFsgLWQgJGQxIF0KKyAgICAgIHRoZW4KKyAgICAgICAgYWxsX2RpcnM9IiRhbGxfZGlycyAkZDEiCisgICAgICAgIGlmIFsgImBscyAtbGQgJGQxIHwgc2VkIC1uICdzLy4qLT4gLy9wJ2AiICE9ICIuIiBdCisgICAgICAgIHRoZW4KKyAgICAgICAgICBuZXdkaXJzPSIkbmV3ZGlycyAkZDEiCisgICAgICAgICAgc2VhcmNoX2RpcnM9IiRzZWFyY2hfZGlycyAkZDEiCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGRvbmUKKyAgZG9uZQorCisgIGRpcnM9IiRuZXdkaXJzIgorZG9uZQorCisjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIworIworZGlycz0KK2lmIHRlc3QgJFZFUkJPU0UgLWd0IDIKK3RoZW4gZWNobyAiQWxsIGRpcmVjdG9yaWVzIChpbmNsdWRpbmcgbGlua3MgdG8gZGlyZWN0b3JpZXMpOiIKKyAgICAgZWNobyAkYWxsX2RpcnMKK2ZpCisKK2ZvciBmaWxlIGluICRhbGxfZGlyczsgZG8KKyAgcm0gLXJmICRMSUIvJGZpbGUKKyAgaWYgWyAhIC1kICRMSUIvJGZpbGUgXQorICB0aGVuIG1rZGlyICRMSUIvJGZpbGUKKyAgZmkKK2RvbmUKK21rZGlyICRMSUIvcm9vdAorCisjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIworIworIyB0cmVldG9wcyBnZXRzIGFuIGFsdGVybmF0aW5nIGxpc3QKKyMgb2Ygb2xkIGRpcmVjdG9yaWVzIHRvIGNvcHkKKyMgYW5kIHRoZSBuZXcgZGlyZWN0b3JpZXMgdG8gY29weSB0by4KK3RyZWV0b3BzPSIuICR7TElCfSIKKworaWYgJExJTktTOyB0aGVuCisgIGlmIHRlc3QgJFZFUkJPU0UgLWd0IDEKKyAgdGhlbiBlY2hvICdNYWtpbmcgc3ltYm9saWMgZGlyZWN0b3J5IGxpbmtzJyA7IGZpCisgIGN3ZD1gJHtQV0RDTUR9YAorCisgIGZvciBzeW1fbGluayBpbiAkc2VhcmNoX2RpcnM7IGRvCisgICAgY2QgJHtJTlBVVH0KKyAgICBkZXN0PWBscyAtbGQgJHtzeW1fbGlua30gfCBzZWQgLW4gJ3MvLiotPiAvL3AnYAorCisgICAgIyBJbiBjYXNlICRkZXN0IGlzIHJlbGF0aXZlLCBnZXQgdG8gJHtzeW1fbGlua30ncyBkaXIgZmlyc3QuCisgICAgIworICAgIGNkIC4vYGVjaG8gJHtzeW1fbGlua30gfCBzZWQgJ3M7L1teL10qJDs7J2AKKworICAgICMgQ2hlY2sgdGhhdCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBleGlzdHMuCisgICAgIyBSZWRpcmVjdGlvbnMgY2hhbmdlZCB0byBhdm9pZCBidWcgaW4gc2ggb24gVWx0cml4LgorICAgICMKKyAgICAoY2QgJGRlc3QpID4gL2Rldi9udWxsIDI+JjEKKyAgICBpZiBbICQ/ID0gMCBdOyB0aGVuCisgICAgICBjZCAkZGVzdAorCisgICAgICAjIGZ1bGxfZGVzdF9kaXIgZ2V0cyB0aGUgZGlyIHRoYXQgdGhlIGxpbmsgYWN0dWFsbHkgbGVhZHMgdG8uCisgICAgICAjCisgICAgICBmdWxsX2Rlc3RfZGlyPWAke1BXRENNRH1gCisKKyAgICAgICMgQ2Fub25pY2FsaXplICR7SU5QVVR9IG5vdyB0byBtaW5pbWl6ZSB0aGUgdGltZSBhbgorICAgICAgIyBhdXRvbW91bnRlciBoYXMgdG8gY2hhbmdlIHRoZSByZXN1bHQgb2YgJHtQV0RDTUR9LgorICAgICAgIworICAgICAgY2lucHV0PWBjZCAke0lOUFVUfTsgJHtQV0RDTUR9YAorCisgICAgICAjIElmIGEgbGluayBwb2ludHMgdG8gLiwgbWFrZSBhIHNpbWlsYXIgbGluayB0byAuCisgICAgICAjCisgICAgICBpZiBbICR7ZnVsbF9kZXN0X2Rpcn0gPSAke2NpbnB1dH0gXTsgdGhlbgorICAgICAgICBpZiB0ZXN0ICRWRVJCT1NFIC1ndCAyCisgICAgICAgIHRoZW4gZWNobyAke3N5bV9saW5rfSAnLT4nIC4gJzogTWFraW5nIHNlbGYgbGluaycgOyBmaQorICAgICAgICBybSAtZnIgJHtMSUJ9LyR7c3ltX2xpbmt9ID4gL2Rldi9udWxsIDI+JjEKKyAgICAgICAgbG4gLXMgLiAke0xJQn0vJHtzeW1fbGlua30gPiAvZGV2L251bGwgMj4mMQorCisgICAgICAjIElmIGxpbmsgbGVhZHMgYmFjayBpbnRvICR7SU5QVVR9LAorICAgICAgIyBtYWtlIGEgc2ltaWxhciBsaW5rIGhlcmUuCisgICAgICAjCisgICAgICBlbGlmIGV4cHIgJHtmdWxsX2Rlc3RfZGlyfSA6ICIke2NpbnB1dH0vLioiID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICMgWSBnZXRzIHRoZSBhY3R1YWwgdGFyZ2V0IGRpciBuYW1lLCByZWxhdGl2ZSB0byAke0lOUFVUfS4KKyAgICAgICAgeT1gZWNobyAke2Z1bGxfZGVzdF9kaXJ9IHwgc2VkIC1uICJzJiR7Y2lucHV0fS8mJnAiYAorICAgICAgICAjIERPVFMgaXMgdGhlIHJlbGF0aXZlIHBhdGggZnJvbSAke0xJQn0vJHtzeW1fbGlua30gYmFjayB0byAke0xJQn0uCisgICAgICAgIGRvdHM9YGVjaG8gIiR7c3ltX2xpbmt9IiB8CisgICAgICAgICAgc2VkIC1lICdzQF4uL0BAJyAtZSAnc0AvLi9AL0BnJyAtZSAnc0BbXi9dW14vXSpALi5AZycgLWUgJ3NALi4kQEAnYAorICAgICAgICBpZiB0ZXN0ICRWRVJCT1NFIC1ndCAyCisgICAgICAgIHRoZW4gZWNobyAke3N5bV9saW5rfSAnLT4nICRkb3RzJHkgJzogTWFraW5nIGxvY2FsIGxpbmsnIDsgZmkKKyAgICAgICAgcm0gLWZyICR7TElCfS8ke3N5bV9saW5rfSA+IC9kZXYvbnVsbCAyPiYxCisgICAgICAgIGxuIC1zICRkb3RzJHkgJHtMSUJ9LyR7c3ltX2xpbmt9ID4gL2Rldi9udWxsIDI+JjEKKworICAgICAgZWxzZQorICAgICAgICAjIElmIHRoZSBsaW5rIGlzIHRvIGEgZGlyICR0YXJnZXQgb3V0c2lkZSAke0lOUFVUfSwKKyAgICAgICAgIyByZXBvaW50IHRoZSBsaW5rIGF0ICR7SU5QVVR9L3Jvb3QkdGFyZ2V0CisgICAgICAgICMgYW5kIHByb2Nlc3MgJHRhcmdldCBpbnRvICR7SU5QVVR9L3Jvb3QkdGFyZ2V0CisgICAgICAgICMgdHJlYXQgdGhpcyBkaXJlY3RvcnkgYXMgaWYgaXQgYWN0dWFsbHkgY29udGFpbmVkIHRoZSBmaWxlcy4KKyAgICAgICAgIworICAgICAgICBpZiB0ZXN0ICRWRVJCT1NFIC1ndCAyCisgICAgICAgIHRoZW4gZWNobyAke3N5bV9saW5rfSAnLT4nIHJvb3Qke2Z1bGxfZGVzdF9kaXJ9ICc6IE1ha2luZyByb290ZWQgbGluaycKKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAtZCAkTElCL3Jvb3Qke2Z1bGxfZGVzdF9kaXJ9IF0KKyAgICAgICAgdGhlbiB0cnVlCisgICAgICAgIGVsc2UKKyAgICAgICAgICBkaXJuYW1lPXJvb3Qke2Z1bGxfZGVzdF9kaXJ9LworICAgICAgICAgIGRpcm1hZGU9LgorICAgICAgICAgIGNkICRMSUIKKyAgICAgICAgICB3aGlsZSBbIHgkZGlybmFtZSAhPSB4IF07IGRvCisgICAgICAgICAgICBjb21wb25lbnQ9YGVjaG8gJGRpcm5hbWUgfCBzZWQgLWUgJ3N8Ly4qJHx8J2AKKyAgICAgICAgICAgIG1rZGlyICRjb21wb25lbnQgPi9kZXYvbnVsbCAyPiYxCisgICAgICAgICAgICBjZCAkY29tcG9uZW50CisgICAgICAgICAgICBkaXJtYWRlPSRkaXJtYWRlLyRjb21wb25lbnQKKyAgICAgICAgICAgIGRpcm5hbWU9YGVjaG8gJGRpcm5hbWUgfCBzZWQgLWUgJ3N8W14vXSovfHwnYAorICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKworICAgICAgICAjIER1cGxpY2F0ZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGNyZWF0ZWQgaW4gJHtMSUJ9LyR7c3ltX2xpbmt9IGluIG5ldworICAgICAgICAjIHJvb3QgYXJlYS4KKyAgICAgICAgIworICAgICAgICBmb3IgZmlsZTIgaW4gJGFsbF9kaXJzOyBkbworICAgICAgICAgIGNhc2UgJGZpbGUyIGluCisgICAgICAgICAgICAke3N5bV9saW5rfS8qKQorICAgICAgICAgICAgICBkdXBkaXI9JHtMSUJ9L3Jvb3Qke2Z1bGxfZGVzdF9kaXJ9L2BlY2hvICRmaWxlMiB8CisgICAgICAgICAgICAgICAgICAgICAgc2VkIC1uICJzfF4ke3N5bV9saW5rfS98fHAiYAorICAgICAgICAgICAgICBpZiB0ZXN0ICRWRVJCT1NFIC1ndCAyCisgICAgICAgICAgICAgIHRoZW4gZWNobyAiRHVwbGljYXRpbmcgJHtzeW1fbGlua30ncyAke2R1cGRpcn0iIDsgZmkKKyAgICAgICAgICAgICAgaWYgWyAtZCAke2R1cGRpcn0gXQorICAgICAgICAgICAgICB0aGVuIHRydWUKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1rZGlyICR7ZHVwZGlyfQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgIGRvbmUKKworICAgICAgICAjIEdldCB0aGUgcGF0aCBmcm9tICR7TElCfSB0byAke3N5bV9saW5rfSwgYWNjb3VudGluZyBmb3Igc3ltbGlua3MuCisgICAgICAgICMKKyAgICAgICAgcGFyZW50PWBlY2hvICIke3N5bV9saW5rfSIgfCBzZWQgLWUgJ3NAL1teL10qJEBAJ2AKKyAgICAgICAgbGliYWJzPWBjZCAke0xJQn07ICR7UFdEQ01EfWAKKyAgICAgICAgZmlsZTI9YGNkICR7TElCfTsgY2QgJHBhcmVudDsgJHtQV0RDTUR9IHwgc2VkIC1lICJzQF4ke2xpYmFic31AQCJgCisKKyAgICAgICAgIyBET1RTIGlzIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gJHtMSUJ9LyR7c3ltX2xpbmt9IGJhY2sgdG8gJHtMSUJ9LgorICAgICAgICAjCisgICAgICAgIGRvdHM9YGVjaG8gIiRmaWxlMiIgfCBzZWQgLWUgJ3NAL1teL10qQC4uL0BnJ2AKKyAgICAgICAgcm0gLWZyICR7TElCfS8ke3N5bV9saW5rfSA+IC9kZXYvbnVsbCAyPiYxCisgICAgICAgIGxuIC1zICR7ZG90c31yb290JHtmdWxsX2Rlc3RfZGlyfSAke0xJQn0vJHtzeW1fbGlua30gPiAvZGV2L251bGwgMj4mMQorICAgICAgICB0cmVldG9wcz0iJHRyZWV0b3BzICR7c3ltX2xpbmt9ICR7TElCfS9yb290JHtmdWxsX2Rlc3RfZGlyfSIKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorZmkKKworIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMKKyMKK3JlcXVpcmVkPQorc2V0IHggJHRyZWV0b3BzCitzaGlmdAord2hpbGUgWyAkIyAhPSAwIF07IGRvCisgICMgJDEgaXMgYW4gb2xkIGRpcmVjdG9yeSB0byBjb3B5LCBhbmQgJDIgaXMgdGhlIG5ldyBkaXJlY3RvcnkgdG8gY29weSB0by4KKyAgIworICBTUkNESVI9YGNkICR7SU5QVVR9IDsgY2QgJDEgOyAke1BXRENNRH1gCisgIGV4cG9ydCBTUkNESVIKKworICBGSU5EX0JBU0U9JDEKKyAgZXhwb3J0IEZJTkRfQkFTRQorICBzaGlmdAorCisgIERFU1RESVI9YGNkICQxOyR7UFdEQ01EfWAKKyAgZXhwb3J0IERFU1RESVIKKyAgc2hpZnQKKworICAjIFRoZSBzYW1lIGRpciBjYW4gYXBwZWFyIG1vcmUgdGhhbiBvbmNlIGluIHRyZWV0b3BzLgorICAjIFRoZXJlJ3Mgbm8gbmVlZCB0byBzY2FuIGl0IG1vcmUgdGhhbiBvbmNlLgorICAjCisgIGlmIFsgLWYgJHtERVNURElSfS9ET05FIF0KKyAgdGhlbiBjb250aW51ZSA7IGZpCisKKyAgdG91Y2ggJHtERVNURElSfS9ET05FCisgIGlmIHRlc3QgJFZFUkJPU0UgLWd0IDEKKyAgdGhlbiBlY2hvIEZpeGluZyBkaXJlY3RvcnkgJHtTUkNESVJ9IGludG8gJHtERVNURElSfSA7IGZpCisKKyAgIyBDaGVjayBmaWxlcyB3aGljaCBhcmUgc3ltbGlua3MgYXMgd2VsbCBhcyB0aG9zZSB3aGljaCBhcmUgZmlsZXMuCisgICMKKyAgY2QgJHtJTlBVVH0KKyAgcmVxdWlyZWQ9IiRyZXF1aXJlZCBgaWYgJExJTktTOyB0aGVuCisgICAgZmluZCAke0ZJTkRfQkFTRX0vLiAtbmFtZSAnKi5oJyBcKCAtdHlwZSBmIC1vIC10eXBlIGwgXCkgLXByaW50CisgIGVsc2UKKyAgICBmaW5kICR7RklORF9CQVNFfS8uIC1uYW1lICcqLmgnIC10eXBlIGYgLXByaW50CisgIGZpIHwgXAorICAgIHNlZCAtZSAnczsvXC4vOy87ZycgLWUgJ3M7Ly8qOy87ZycgfCBcCisgICAgJHtGSVhJTkNMfWAiCitkb25lCisKKyMjIE1ha2Ugc3VyZSB0aGF0IGFueSBpbmNsdWRlIGZpbGVzIHJlZmVyZW5jZWQgdXNpbmcgZG91YmxlIHF1b3RlcworIyMgZXhpc3QgaW4gdGhlIGZpeGVkIGRpcmVjdG9yeS4gIFRoaXMgY29tZXMgbGFzdCBzaW5jZSBvdGhlcndpc2UKKyMjIHdlIG1pZ2h0IGVuZCB1cCBkZWxldGluZyBzb21lIG9mIHRoZXNlIGZpbGVzICJiZWNhdXNlIHRoZXkgZG9uJ3QKKyMjIG5lZWQgYW55IGNoYW5nZS4iCitzZXQgeCBgZWNobyAkcmVxdWlyZWRgCitzaGlmdAord2hpbGUgWyAkIyAhPSAwIF07IGRvCisgIG5ld3JlcT0KKyAgd2hpbGUgWyAkIyAhPSAwIF07IGRvCisgICAgIyAkMSBpcyB0aGUgZGlyZWN0b3J5IHRvIGNvcHkgZnJvbSwKKyAgICAjICQyIGlzIHRoZSB1bmZpeGVkIGZpbGUsCisgICAgIyAkMyBpcyB0aGUgZml4ZWQgZmlsZSBuYW1lLgorICAgICMKKyAgICBjZCAke0lOUFVUfQorICAgIGNkICQxCisgICAgaWYgWyAtZiAkMiBdIDsgdGhlbgorICAgICAgaWYgWyAtciAkMiBdICYmIFsgISAtciAkMyBdOyB0aGVuCisgICAgICAgIGNwICQyICQzID4vZGV2L251bGwgMj4mMSB8fCBlY2hvICJDYW4ndCBjb3B5ICQyIiA+JjIKKyAgICAgICAgY2htb2QgK3cgJDMgMj4vZGV2L251bGwKKyAgICAgICAgY2htb2QgYStyICQzIDI+L2Rldi9udWxsCisgICAgICAgIGlmIHRlc3QgJFZFUkJPU0UgLWd0IDIKKyAgICAgICAgdGhlbiBlY2hvIENvcGllZCAkMiA7IGZpCisgICAgICAgIGZvciBpbmNsdWRlIGluIGBlZ3JlcCAnXlsgCV0qI1sgCV0qaW5jbHVkZVsgCV0qIlteL10nICQzIHwKKyAgICAgICAgICAgICBzZWQgLWUgJ3MvXlsgCV0qI1sgCV0qaW5jbHVkZVsgCV0qIlwoW14iXSpcKSIuKiQvXDEvJ2AKKyAgICAgICAgZG8KKwkgIGRpcj1gZWNobyAkMiB8IHNlZCAtZSBzJ3wvW14vXSokfHwnYAorCSAgZGlyMj1gZWNobyAkMyB8IHNlZCAtZSBzJ3wvW14vXSokfHwnYAorCSAgbmV3cmVxPSIkbmV3cmVxICQxICRkaXIvJGluY2x1ZGUgJGRpcjIvJGluY2x1ZGUiCisgICAgICAgIGRvbmUKKyAgICAgIGZpCisgICAgZmkKKyAgICBzaGlmdDsgc2hpZnQ7IHNoaWZ0CisgIGRvbmUKKyAgc2V0IHggJG5ld3JlcQorICBzaGlmdAorZG9uZQorCitpZiB0ZXN0ICRWRVJCT1NFIC1ndCAyCit0aGVuIGVjaG8gJ0NsZWFuaW5nIHVwIERPTkUgZmlsZXMuJyA7IGZpCitjZCAkTElCCisjIExvb2sgZm9yIGZpbGVzIGNhc2UtaW5zZW5zaXRpdmVseSwgZm9yIHRoZSBiZW5lZml0IG9mCisjIERPUy9XaW5kb3dzIGZpbGVzeXN0ZW1zLgorZmluZCAuIC1uYW1lICdbRGRdW09vXVtObl1bRWVdJyAtZXhlYyBybSAtZiAne30nICc7JworCitpZiB0ZXN0ICRWRVJCT1NFIC1ndCAxCit0aGVuIGVjaG8gJ0NsZWFuaW5nIHVwIHVubmVlZGVkIGRpcmVjdG9yaWVzOicgOyBmaQorY2QgJExJQgorYWxsX2RpcnM9YGZpbmQgLiAtdHlwZSBkIFwhIC1uYW1lICcuJyAtcHJpbnQgfCBzb3J0IC1yYAorZm9yIGZpbGUgaW4gJGFsbF9kaXJzOyBkbworICBpZiBybWRpciAkTElCLyRmaWxlID4gL2Rldi9udWxsCisgIHRoZW4KKyAgICB0ZXN0ICRWRVJCT1NFIC1ndCAzICYmIGVjaG8gIiAgcmVtb3ZlZCAkZmlsZSIKKyAgZmkKK2RvbmUgMj4gL2Rldi9udWxsCisKKyMgT24gc3lzdGVtcyB3aGljaCBkb24ndCBzdXBwb3J0IHN5bWxpbmtzLCBgZmluZCcgbWF5IGJhcmYKKyMgaWYgY2FsbGVkIHdpdGggIi10eXBlIGwiIHByZWRpY2F0ZS4gIFNvIG9ubHkgdXNlIHRoYXQgaWYKKyMgd2Uga25vdyB3ZSBzaG91bGQgbG9vayBmb3Igc3ltbGlua3MuCitpZiAkTElOS1M7IHRoZW4KKyAgdGVzdCAkVkVSQk9TRSAtZ3QgMiAmJiBlY2hvICJSZW1vdmluZyB1bnVzZWQgc3ltbGlua3MiCisKKyAgYWxsX2RpcnM9YGZpbmQgLiAtdHlwZSBsIC1wcmludGAKKyAgZm9yIGZpbGUgaW4gJGFsbF9kaXJzCisgIGRvCisgICAgaWYgdGVzdCAhIC1kICRmaWxlCisgICAgdGhlbgorICAgICAgcm0gLWYgJGZpbGUKKyAgICAgIHRlc3QgJFZFUkJPU0UgLWd0IDMgJiYgZWNobyAiICByZW1vdmVkICRmaWxlIgorICAgICAgcm1kaXIgYGRpcm5hbWUgJGZpbGVgID4gL2Rldi9udWxsICYmIFwKKyAgICAgICAgICAgdGVzdCAkVkVSQk9TRSAtZ3QgMyAmJiBcCisgICAgICAgICAgIGVjaG8gIiAgcmVtb3ZlZCBgZGlybmFtZSAkZmlsZWAiCisgICAgZmkKKyAgZG9uZSAyPiAvZGV2L251bGwKK2ZpCisKK2lmIHRlc3QgJFZFUkJPU0UgLWd0IDAKK3RoZW4gZWNobyBmaXhpbmNsdWRlcyBpcyBkb25lIDsgZmkKKworIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMKKyMKKyMgRW5kIG9mIGZvciBJTlBVVCBkaXJlY3RvcmllcworIworZG9uZQorIworIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMKZGlmZiAtLWdpdCBhL2xpYmV4ZWMvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5zdGFsbC10b29scy9maXhpbmNsIGIvbGliZXhlYy9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9pbnN0YWxsLXRvb2xzL2ZpeGluY2wKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmEwYzc5YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmV4ZWMvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5zdGFsbC10b29scy9maXhpbmNsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYmV4ZWMvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5zdGFsbC10b29scy9ta2hlYWRlcnMgYi9saWJleGVjL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luc3RhbGwtdG9vbHMvbWtoZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdiYzU3YmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJleGVjL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luc3RhbGwtdG9vbHMvbWtoZWFkZXJzCkBAIC0wLDAgKzEsMTA0IEBACisjIS9iaW4vc2gKKworIyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyNUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKKyNHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorI3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisjU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKyN2ZXJzaW9uLgorCisjR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisjRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjZm9yIG1vcmUgZGV0YWlscy4KKworI1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyM8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgQmFzaWMgaW5mb3JtYXRpb24KK3RhcmdldD1hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpCit0YXJnZXRfbm9uY2Fub25pY2FsPWFybS11bmtub3duLWxpbnV4LWdudWVhYmkKK3ZlcnNpb249NC41LjMKKworVkVSQk9TRT0wCit3aGlsZSBbIHgkMSA9IHgtdiBdIDsgZG8KKyAgICBzaGlmdAorICAgIFZFUkJPU0U9YGV4cHIgJFZFUkJPU0UgKyAxYAorZG9uZQorZXhwb3J0IFZFUkJPU0UKKworaWYgWyB4JDEgPSB4LS1oZWxwIF0gOyB0aGVuCisgICAgZWNobyAiVXNhZ2U6IG1raGVhZGVycyBbb3B0aW9uc10gW3ByZWZpeCBbaXN5c3Jvb3RdXSIKKyAgICBlY2hvICJPcHRpb25zOiIKKyAgICBlY2hvICIgIC12ICAgICAgICBQcmludCBtb3JlIG91dHB1dCAobWF5IGJlIHJlcGVhdGVkIGZvciBldmVuIG1vcmUgb3V0cHV0KSIKKyAgICBlY2hvICIgIC0taGVscCAgICBUaGlzIGhlbHAiCisgICAgZWNobyAiICAtLXZlcnNpb24gUHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKyAgICBleGl0IDAKK2ZpCisKK2lmIFsgeCQxID0geC0tdmVyc2lvbiBdIDsgdGhlbgorICAgIGVjaG8gIm1raGVhZGVycyAoR0NDKSB2ZXJzaW9uICR2ZXJzaW9uIgorICAgIGVjaG8gIkNvcHlyaWdodCAyMDAyLCAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiIKKyAgICBlY2hvICJUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IG1heSByZWRpc3RyaWJ1dGUgaXQgdW5kZXIgdGhlIgorICAgIGVjaG8gInRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgcHJvZ3JhbSBoYXMiCisgICAgZWNobyAiYWJzb2x1dGVseSBubyB3YXJyYW50eS4iCisgICAgZXhpdCAwCitmaQorCisjIENvbW1vbiBwcmVmaXggZm9yIGluc3RhbGxhdGlvbiBkaXJlY3Rvcmllcy4KK2lmIFsgeCQxICE9IHggXSA7IHRoZW4KKyAgcHJlZml4PSQxCisgIHNoaWZ0CitlbHNlCisgIHByZWZpeD0vdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3IKK2ZpCisKKyMgQWxsb3cgZm9yIGFsdGVybmF0ZSBpc3lzcm9vdCBpbiB3aGljaCB0byBmaW5kIGhlYWRlcnMKK2lmIFsgeCQxICE9IHggXSA7IHRoZW4KKyAgaXN5c3Jvb3Q9JDEKKyAgc2hpZnQKK2Vsc2UKKyAgaXN5c3Jvb3Q9CitmaQorCisjIERpcmVjdG9yeSBpbiB3aGljaCB0byBwdXQgaG9zdCBkZXBlbmRlbnQgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcworZXhlY19wcmVmaXg9JHtwcmVmaXh9CisjIERpcmVjdG9yeSBpbiB3aGljaCB0byBwdXQgdGhlIGRpcmVjdG9yaWVzIHVzZWQgYnkgdGhlIGNvbXBpbGVyLgorbGliZGlyPSR7ZXhlY19wcmVmaXh9L2xpYgorbGliZXhlY2Rpcj0ke2V4ZWNfcHJlZml4fS9saWJleGVjCisjIERpcmVjdG9yeSBpbiB3aGljaCB0aGUgY29tcGlsZXIgZmluZHMgbGlicmFyaWVzLCBldGMuCitsaWJzdWJkaXI9JHtsaWJkaXJ9L2djYy8ke3RhcmdldF9ub25jYW5vbmljYWx9LyR7dmVyc2lvbn0KKyMgRGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21waWxlciBmaW5kcyBleGVjdXRhYmxlcworbGliZXhlY3N1YmRpcj0ke2xpYmV4ZWNkaXJ9L2djYy8ke3RhcmdldF9ub25jYW5vbmljYWx9LyR7dmVyc2lvbn0KKworaXRvb2xzZGlyPSR7bGliZXhlY3N1YmRpcn0vaW5zdGFsbC10b29scworaXRvb2xzZGF0YWRpcj0ke2xpYnN1YmRpcn0vaW5zdGFsbC10b29scworaW5jZGlyPSR7bGlic3ViZGlyfS9pbmNsdWRlLWZpeGVkCitta2luc3RhbGxkaXJzPSIvYmluL3NoICR7aXRvb2xzZGlyfS9ta2luc3RhbGxkaXJzIgorCitjZCAke2l0b29sc2Rpcn0KK3JtIC1yZiAke2luY2Rpcn0vKgorCitmb3IgbWwgaW4gYGNhdCAke2l0b29sc2RhdGFkaXJ9L2ZpeGluY19saXN0YDsgZG8KKyAgc3lzcm9vdF9oZWFkZXJzX3N1ZmZpeD1gZWNobyAke21sfSB8IHNlZCAtZSAncy87LiokLy8nYAorICBtdWx0aV9kaXI9YGVjaG8gJHttbH0gfCBzZWQgLWUgJ3MvXlteO10qOy8vJ2AKKyAgc3ViaW5jZGlyPSR7aW5jZGlyfSR7bXVsdGlfZGlyfQorICAuICR7aXRvb2xzZGF0YWRpcn0vbWtoZWFkZXJzLmNvbmYKKyAgaWYgWyB4JHtTVE1QX0ZJWElOQ30gIT0geCBdIDsgdGhlbgorCVRBUkdFVF9NQUNISU5FPSIke3RhcmdldH0iIHRhcmdldF9jYW5vbmljYWw9IiR7dGFyZ2V0fSIgXAorCSAgICBNQUNST19MSVNUPSIke2l0b29sc2RhdGFkaXJ9L21hY3JvX2xpc3QiIFwKKwkgICAgL2Jpbi9zaCAuL2ZpeGluYy5zaCAke3N1YmluY2Rpcn0gXAorCSAgICAke2lzeXNyb290fSR7U1lTVEVNX0hFQURFUl9ESVJ9ICR7T1RIRVJfRklYSU5DTFVERVNfRElSU30KKwlybSAtZiAke3N1YmluY2Rpcn0vc3lzbGltaXRzLmgKKwlpZiBbIC1mICR7c3ViaW5jZGlyfS9saW1pdHMuaCBdOyB0aGVuCisJICBtdiAke3N1YmluY2Rpcn0vbGltaXRzLmggJHtzdWJpbmNkaXJ9L3N5c2xpbWl0cy5oCisJZWxzZQorCSAgY3AgJHtpdG9vbHNkYXRhZGlyfS9nc3lzbGltaXRzLmggJHtzdWJpbmNkaXJ9L3N5c2xpbWl0cy5oCisJZmkKKyAgZmkKKworICBjcCAke2l0b29sc2RhdGFkaXJ9L2luY2x1ZGUke211bHRpX2Rpcn0vbGltaXRzLmggJHtzdWJpbmNkaXJ9Citkb25lCmRpZmYgLS1naXQgYS9saWJleGVjL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luc3RhbGwtdG9vbHMvbWtpbnN0YWxsZGlycyBiL2xpYmV4ZWMvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvaW5zdGFsbC10b29scy9ta2luc3RhbGxkaXJzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQxOTFhNDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJleGVjL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2luc3RhbGwtdG9vbHMvbWtpbnN0YWxsZGlycwpAQCAtMCwwICsxLDE2MiBAQAorIyEgL2Jpbi9zaAorIyBta2luc3RhbGxkaXJzIC0tLSBtYWtlIGRpcmVjdG9yeSBoaWVyYXJjaHkKKworc2NyaXB0dmVyc2lvbj0yMDA5LTA0LTI4LjIxOyAjIFVUQworCisjIE9yaWdpbmFsIGF1dGhvcjogTm9haCBGcmllZG1hbiA8ZnJpZWRtYW5AcHJlcC5haS5taXQuZWR1PgorIyBDcmVhdGVkOiAxOTkzLTA1LTE2CisjIFB1YmxpYyBkb21haW4uCisjCisjIFRoaXMgZmlsZSBpcyBtYWludGFpbmVkIGluIEF1dG9tYWtlLCBwbGVhc2UgcmVwb3J0CisjIGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPiBvciBzZW5kIHBhdGNoZXMgdG8KKyMgPGF1dG9tYWtlLXBhdGNoZXNAZ251Lm9yZz4uCisKK25sPScKKycKK0lGUz0iICIiCSRubCIKK2VycnN0YXR1cz0wCitkaXJtb2RlPQorCit1c2FnZT0iXAorVXNhZ2U6IG1raW5zdGFsbGRpcnMgWy1oXSBbLS1oZWxwXSBbLS12ZXJzaW9uXSBbLW0gTU9ERV0gRElSIC4uLgorCitDcmVhdGUgZWFjaCBkaXJlY3RvcnkgRElSICh3aXRoIG1vZGUgTU9ERSwgaWYgc3BlY2lmaWVkKSwgaW5jbHVkaW5nIGFsbAorbGVhZGluZyBmaWxlIG5hbWUgY29tcG9uZW50cy4KKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4iCisKKyMgcHJvY2VzcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzCit3aGlsZSB0ZXN0ICQjIC1ndCAwIDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC1oIHwgLS1oZWxwIHwgLS1oKikgICAgICAgICAjIC1oIGZvciBoZWxwCisgICAgICBlY2hvICIkdXNhZ2UiCisgICAgICBleGl0ICQ/CisgICAgICA7OworICAgIC1tKSAgICAgICAgICAgICAgICAgICAgICAgICAjIC1tIFBFUk0gYXJnCisgICAgICBzaGlmdAorICAgICAgdGVzdCAkIyAtZXEgMCAmJiB7IGVjaG8gIiR1c2FnZSIgMT4mMjsgZXhpdCAxOyB9CisgICAgICBkaXJtb2RlPSQxCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAtLXZlcnNpb24pCisgICAgICBlY2hvICIkMCAkc2NyaXB0dmVyc2lvbiIKKyAgICAgIGV4aXQgJD8KKyAgICAgIDs7CisgICAgLS0pICAgICAgICAgICAgICAgICAgICAgICAgICMgc3RvcCBvcHRpb24gcHJvY2Vzc2luZworICAgICAgc2hpZnQKKyAgICAgIGJyZWFrCisgICAgICA7OworICAgIC0qKSAgICAgICAgICAgICAgICAgICAgICAgICAjIHVua25vd24gb3B0aW9uCisgICAgICBlY2hvICIkdXNhZ2UiIDE+JjIKKyAgICAgIGV4aXQgMQorICAgICAgOzsKKyAgICAqKSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmaXJzdCBub24tb3B0IGFyZworICAgICAgYnJlYWsKKyAgICAgIDs7CisgIGVzYWMKK2RvbmUKKworZm9yIGZpbGUKK2RvCisgIGlmIHRlc3QgLWQgIiRmaWxlIjsgdGhlbgorICAgIHNoaWZ0CisgIGVsc2UKKyAgICBicmVhaworICBmaQorZG9uZQorCitjYXNlICQjIGluCisgIDApIGV4aXQgMCA7OworZXNhYworCisjIFNvbGFyaXMgOCdzIG1rZGlyIC1wIGlzbid0IHRocmVhZC1zYWZlLiAgSWYgeW91IG1rZGlyIC1wIGEvYiBhbmQKKyMgbWtkaXIgLXAgYS9jIGF0IHRoZSBzYW1lIHRpbWUsIGJvdGggd2lsbCBkZXRlY3QgdGhhdCBhIGlzIG1pc3NpbmcsCisjIG9uZSB3aWxsIGNyZWF0ZSBhLCB0aGVuIHRoZSBvdGhlciB3aWxsIHRyeSB0byBjcmVhdGUgYSBhbmQgZGllIHdpdGgKKyMgYSAiRmlsZSBleGlzdHMiIGVycm9yLiAgVGhpcyBpcyBhIHByb2JsZW0gd2hlbiBjYWxsaW5nIG1raW5zdGFsbGRpcnMKKyMgZnJvbSBhIHBhcmFsbGVsIG1ha2UuICBXZSB1c2UgLS12ZXJzaW9uIGluIHRoZSBwcm9iZSB0byByZXN0cmljdAorIyBvdXJzZWx2ZXMgdG8gR05VIG1rZGlyLCB3aGljaCBpcyB0aHJlYWQtc2FmZS4KK2Nhc2UgJGRpcm1vZGUgaW4KKyAgJycpCisgICAgaWYgbWtkaXIgLXAgLS12ZXJzaW9uIC4gPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgISAtZCAuLy0tdmVyc2lvbjsgdGhlbgorICAgICAgZWNobyAibWtkaXIgLXAgLS0gJCoiCisgICAgICBleGVjIG1rZGlyIC1wIC0tICIkQCIKKyAgICBlbHNlCisgICAgICAjIE9uIE5leHRTdGVwIGFuZCBPcGVuU3RlcCwgdGhlIGBta2RpcicgY29tbWFuZCBkb2VzIG5vdAorICAgICAgIyByZWNvZ25pemUgYW55IG9wdGlvbi4gIEl0IHdpbGwgaW50ZXJwcmV0IGFsbCBvcHRpb25zIGFzCisgICAgICAjIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZSwgYW5kIHRoZW4gYWJvcnQgYmVjYXVzZSBgLicgYWxyZWFkeQorICAgICAgIyBleGlzdHMuCisgICAgICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAorICAgICAgdGVzdCAtZCAuLy0tdmVyc2lvbiAmJiBybWRpciAuLy0tdmVyc2lvbgorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICBpZiBta2RpciAtbSAiJGRpcm1vZGUiIC1wIC0tdmVyc2lvbiAuID4vZGV2L251bGwgMj4mMSAmJgorICAgICAgIHRlc3QgISAtZCAuLy0tdmVyc2lvbjsgdGhlbgorICAgICAgZWNobyAibWtkaXIgLW0gJGRpcm1vZGUgLXAgLS0gJCoiCisgICAgICBleGVjIG1rZGlyIC1tICIkZGlybW9kZSIgLXAgLS0gIiRAIgorICAgIGVsc2UKKyAgICAgICMgQ2xlYW4gdXAgYWZ0ZXIgTmV4dFN0ZXAgYW5kIE9wZW5TdGVwIG1rZGlyLgorICAgICAgZm9yIGQgaW4gLi8tbSAuLy1wIC4vLS12ZXJzaW9uICIuLyRkaXJtb2RlIjsKKyAgICAgIGRvCisgICAgICAgIHRlc3QgLWQgJGQgJiYgcm1kaXIgJGQKKyAgICAgIGRvbmUKKyAgICBmaQorICAgIDs7Citlc2FjCisKK2ZvciBmaWxlCitkbworICBjYXNlICRmaWxlIGluCisgICAgLyopIHBhdGhjb21wPS8gOzsKKyAgICAqKSAgcGF0aGNvbXA9IDs7CisgIGVzYWMKKyAgb0lGUz0kSUZTCisgIElGUz0vCisgIHNldCBmbm9yZCAkZmlsZQorICBzaGlmdAorICBJRlM9JG9JRlMKKworICBmb3IgZAorICBkbworICAgIHRlc3QgIngkZCIgPSB4ICYmIGNvbnRpbnVlCisKKyAgICBwYXRoY29tcD0kcGF0aGNvbXAkZAorICAgIGNhc2UgJHBhdGhjb21wIGluCisgICAgICAtKikgcGF0aGNvbXA9Li8kcGF0aGNvbXAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0ICEgLWQgIiRwYXRoY29tcCI7IHRoZW4KKyAgICAgIGVjaG8gIm1rZGlyICRwYXRoY29tcCIKKworICAgICAgbWtkaXIgIiRwYXRoY29tcCIgfHwgbGFzdGVycj0kPworCisgICAgICBpZiB0ZXN0ICEgLWQgIiRwYXRoY29tcCI7IHRoZW4KKwllcnJzdGF0dXM9JGxhc3RlcnIKKyAgICAgIGVsc2UKKwlpZiB0ZXN0ICEgLXogIiRkaXJtb2RlIjsgdGhlbgorCSAgZWNobyAiY2htb2QgJGRpcm1vZGUgJHBhdGhjb21wIgorCSAgbGFzdGVycj0KKwkgIGNobW9kICIkZGlybW9kZSIgIiRwYXRoY29tcCIgfHwgbGFzdGVycj0kPworCisJICBpZiB0ZXN0ICEgLXogIiRsYXN0ZXJyIjsgdGhlbgorCSAgICBlcnJzdGF0dXM9JGxhc3RlcnIKKwkgIGZpCisJZmkKKyAgICAgIGZpCisgICAgZmkKKworICAgIHBhdGhjb21wPSRwYXRoY29tcC8KKyAgZG9uZQorZG9uZQorCitleGl0ICRlcnJzdGF0dXMKKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6IHNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjogMgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL2xpYmV4ZWMvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvbHRvLXdyYXBwZXIgYi9saWJleGVjL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2x0by13cmFwcGVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU2Njg5YTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJleGVjL2djYy9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLzQuNS4zL2x0by13cmFwcGVyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYmV4ZWMvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvbHRvMSBiL2xpYmV4ZWMvZ2NjL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvNC41LjMvbHRvMQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NWUyMmM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZXhlYy9nY2MvYXJtLXVua25vd24tbGludXgtZ251ZWFiaS80LjUuMy9sdG8xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21hbi9tYW4xL3htbHdmLjEgYi9tYW4vbWFuMS94bWx3Zi4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NDcxOWEKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vbWFuMS94bWx3Zi4xCkBAIC0wLDAgKzEsMjUxIEBACisuXCIgVGhpcyBtYW5wYWdlIGhhcyBiZWVuIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGRvY2Jvb2sybWFuIAorLlwiIGZyb20gYSBEb2NCb29rIGRvY3VtZW50LiAgVGhpcyB0b29sIGNhbiBiZSBmb3VuZCBhdDoKKy5cIiA8aHR0cDovL3NoZWxsLmlwb2xpbmUuY29tL35lbG1lcnQvY29tcC9kb2Nib29rMlgvPiAKKy5cIiBQbGVhc2Ugc2VuZCBhbnkgYnVnIHJlcG9ydHMsIGltcHJvdmVtZW50cywgY29tbWVudHMsIHBhdGNoZXMsIAorLlwiIGV0Yy4gdG8gU3RldmUgQ2hlbmcgPHN0ZXZlQGdnaS1wcm9qZWN0Lm9yZz4uCisuVEggIlhNTFdGIiAiMSIgIjI0IEphbnVhcnkgMjAwMyIgIiIgIiIKKy5TSCBOQU1FCit4bWx3ZiBcLSBEZXRlcm1pbmVzIGlmIGFuIFhNTCBkb2N1bWVudCBpcyB3ZWxsLWZvcm1lZAorLlNIIFNZTk9QU0lTCisKK1xmQnhtbHdmXGZSIFsgXGZCLXNcZlJdICBbIFxmQi1uXGZSXSAgWyBcZkItcFxmUl0gIFsgXGZCLXhcZlJdICBbIFxmQi1lIFxmSWVuY29kaW5nXGZCXGZSXSAgWyBcZkItd1xmUl0gIFsgXGZCLWQgXGZJb3V0cHV0LWRpclxmQlxmUl0gIFsgXGZCLWNcZlJdICBbIFxmQi1tXGZSXSAgWyBcZkItclxmUl0gIFsgXGZCLXRcZlJdICBbIFxmQi12XGZSXSAgWyBcZkJmaWxlIC4uLlxmUl0gCisKKy5TSCAiREVTQ1JJUFRJT04iCisuUFAKK1xmQnhtbHdmXGZSIHVzZXMgdGhlIEV4cGF0IGxpYnJhcnkgdG8KK2RldGVybWluZSBpZiBhbiBYTUwgZG9jdW1lbnQgaXMgd2VsbC1mb3JtZWQuICBJdCBpcworbm9uLXZhbGlkYXRpbmcuCisuUFAKK0lmIHlvdSBkbyBub3Qgc3BlY2lmeSBhbnkgZmlsZXMgb24gdGhlIGNvbW1hbmQtbGluZSwgYW5kIHlvdQoraGF2ZSBhIHJlY2VudCB2ZXJzaW9uIG9mIFxmQnhtbHdmXGZSLCB0aGUKK2lucHV0IGZpbGUgd2lsbCBiZSByZWFkIGZyb20gc3RhbmRhcmQgaW5wdXQuCisuU0ggIldFTEwtRk9STUVEIERPQ1VNRU5UUyIKKy5QUAorQSB3ZWxsLWZvcm1lZCBkb2N1bWVudCBtdXN0IGFkaGVyZSB0byB0aGUKK2ZvbGxvd2luZyBydWxlczoKKy5UUCAwLjJpCitcKGJ1CitUaGUgZmlsZSBiZWdpbnMgd2l0aCBhbiBYTUwgZGVjbGFyYXRpb24uICBGb3IgaW5zdGFuY2UsCis8P3htbCB2ZXJzaW9uPSIxLjAiIHN0YW5kYWxvbmU9InllcyI/Pi4KK1xmQk5PVEU6XGZSCitcZkJ4bWx3ZlxmUiBkb2VzIG5vdCBjdXJyZW50bHkKK2NoZWNrIGZvciBhIHZhbGlkIFhNTCBkZWNsYXJhdGlvbi4KKy5UUCAwLjJpCitcKGJ1CitFdmVyeSBzdGFydCB0YWcgaXMgZWl0aGVyIGVtcHR5ICg8dGFnLz4pCitvciBoYXMgYSBjb3JyZXNwb25kaW5nIGVuZCB0YWcuCisuVFAgMC4yaQorXChidQorVGhlcmUgaXMgZXhhY3RseSBvbmUgcm9vdCBlbGVtZW50LiAgVGhpcyBlbGVtZW50IG11c3QgY29udGFpbgorYWxsIG90aGVyIGVsZW1lbnRzIGluIHRoZSBkb2N1bWVudC4gIE9ubHkgY29tbWVudHMsIHdoaXRlCitzcGFjZSwgYW5kIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zIG1heSBjb21lIGFmdGVyIHRoZSBjbG9zZQorb2YgdGhlIHJvb3QgZWxlbWVudC4KKy5UUCAwLjJpCitcKGJ1CitBbGwgZWxlbWVudHMgbmVzdCBwcm9wZXJseS4KKy5UUCAwLjJpCitcKGJ1CitBbGwgYXR0cmlidXRlIHZhbHVlcyBhcmUgZW5jbG9zZWQgaW4gcXVvdGVzIChlaXRoZXIgc2luZ2xlCitvciBkb3VibGUpLgorLlBQCitJZiB0aGUgZG9jdW1lbnQgaGFzIGEgRFRELCBhbmQgaXQgc3RyaWN0bHkgY29tcGxpZXMgd2l0aCB0aGF0CitEVEQsIHRoZW4gdGhlIGRvY3VtZW50IGlzIGFsc28gY29uc2lkZXJlZCBcZkJ2YWxpZFxmUi4KK1xmQnhtbHdmXGZSIGlzIGEgbm9uLXZhbGlkYXRpbmcgcGFyc2VyIC0tCitpdCBkb2VzIG5vdCBjaGVjayB0aGUgRFRELiAgSG93ZXZlciwgaXQgZG9lcyBzdXBwb3J0CitleHRlcm5hbCBlbnRpdGllcyAoc2VlIHRoZSBcZkIteFxmUiBvcHRpb24pLgorLlNIICJPUFRJT05TIgorLlBQCitXaGVuIGFuIG9wdGlvbiBpbmNsdWRlcyBhbiBhcmd1bWVudCwgeW91IG1heSBzcGVjaWZ5IHRoZSBhcmd1bWVudCBlaXRoZXIKK3NlcGFyYXRlbHkgKCJcZkItZFxmUiBvdXRwdXQiKSBvciBjb25jYXRlbmF0ZWQgd2l0aCB0aGUKK29wdGlvbiAoIlxmQi1kXGZSb3V0cHV0IikuICBcZkJ4bWx3ZlxmUgorc3VwcG9ydHMgYm90aC4KKy5UUAorXGZCLWNcZlIKK0lmIHRoZSBpbnB1dCBmaWxlIGlzIHdlbGwtZm9ybWVkIGFuZCBcZkJ4bWx3ZlxmUgorZG9lc24ndCBlbmNvdW50ZXIgYW55IGVycm9ycywgdGhlIGlucHV0IGZpbGUgaXMgc2ltcGx5IGNvcGllZCB0bwordGhlIG91dHB1dCBkaXJlY3RvcnkgdW5jaGFuZ2VkLgorVGhpcyBpbXBsaWVzIG5vIG5hbWVzcGFjZXMgKHR1cm5zIG9mZiBcZkItblxmUikgYW5kCityZXF1aXJlcyBcZkItZFxmUiB0byBzcGVjaWZ5IGFuIG91dHB1dCBmaWxlLgorLlRQCitcZkItZCBvdXRwdXQtZGlyXGZSCitTcGVjaWZpZXMgYSBkaXJlY3RvcnkgdG8gY29udGFpbiB0cmFuc2Zvcm1lZAorcmVwcmVzZW50YXRpb25zIG9mIHRoZSBpbnB1dCBmaWxlcy4KK0J5IGRlZmF1bHQsIFxmQi1kXGZSIG91dHB1dHMgYSBjYW5vbmljYWwgcmVwcmVzZW50YXRpb24KKyhkZXNjcmliZWQgYmVsb3cpLgorWW91IGNhbiBzZWxlY3QgZGlmZmVyZW50IG91dHB1dCBmb3JtYXRzIHVzaW5nIFxmQi1jXGZSCithbmQgXGZCLW1cZlIuCisKK1RoZSBvdXRwdXQgZmlsZW5hbWVzIHdpbGwKK2JlIGV4YWN0bHkgdGhlIHNhbWUgYXMgdGhlIGlucHV0IGZpbGVuYW1lcyBvciAiU1RESU4iIGlmIHRoZSBpbnB1dCBpcworY29taW5nIGZyb20gc3RhbmRhcmQgaW5wdXQuICBUaGVyZWZvcmUsIHlvdSBtdXN0IGJlIGNhcmVmdWwgdGhhdCB0aGUKK291dHB1dCBmaWxlIGRvZXMgbm90IGdvIGludG8gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBpbnB1dAorZmlsZS4gIE90aGVyd2lzZSwgXGZCeG1sd2ZcZlIgd2lsbCBkZWxldGUgdGhlCitpbnB1dCBmaWxlIGJlZm9yZSBpdCBnZW5lcmF0ZXMgdGhlIG91dHB1dCBmaWxlIChqdXN0IGxpa2UgcnVubmluZworY2F0IDwgZmlsZSA+IGZpbGUgaW4gbW9zdCBzaGVsbHMpLgorCitUd28gc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgWE1MIGRvY3VtZW50cyBoYXZlIGEgYnl0ZS1mb3ItYnl0ZQoraWRlbnRpY2FsIGNhbm9uaWNhbCBYTUwgcmVwcmVzZW50YXRpb24uCitOb3RlIHRoYXQgaWdub3JhYmxlIHdoaXRlIHNwYWNlIGlzIGNvbnNpZGVyZWQgc2lnbmlmaWNhbnQgYW5kCitpcyB0cmVhdGVkIGVxdWl2YWxlbnRseSB0byBkYXRhLgorTW9yZSBvbiBjYW5vbmljYWwgWE1MIGNhbiBiZSBmb3VuZCBhdAoraHR0cDovL3d3dy5qY2xhcmsuY29tL3htbC9jYW5vbnhtbC5odG1sIC4KKy5UUAorXGZCLWUgZW5jb2RpbmdcZlIKK1NwZWNpZmllcyB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIGZvciB0aGUgZG9jdW1lbnQsIG92ZXJyaWRpbmcKK2FueSBkb2N1bWVudCBlbmNvZGluZyBkZWNsYXJhdGlvbi4gIFxmQnhtbHdmXGZSCitzdXBwb3J0cyBmb3VyIGJ1aWx0LWluIGVuY29kaW5nczoKK1VTLUFTQ0lJLAorVVRGLTgsCitVVEYtMTYsIGFuZAorSVNPLTg4NTktMS4KK0Fsc28gc2VlIHRoZSBcZkItd1xmUiBvcHRpb24uCisuVFAKK1xmQi1tXGZSCitPdXRwdXRzIHNvbWUgc3RyYW5nZSBzb3J0IG9mIFhNTCBmaWxlIHRoYXQgY29tcGxldGVseQorZGVzY3JpYmVzIHRoZSBpbnB1dCBmaWxlLCBpbmNsdWRpbmcgY2hhcmFjdGVyIHBvc2l0aW9ucy4KK1JlcXVpcmVzIFxmQi1kXGZSIHRvIHNwZWNpZnkgYW4gb3V0cHV0IGZpbGUuCisuVFAKK1xmQi1uXGZSCitUdXJucyBvbiBuYW1lc3BhY2UgcHJvY2Vzc2luZy4gIChkZXNjcmliZSBuYW1lc3BhY2VzKQorXGZCLWNcZlIgZGlzYWJsZXMgbmFtZXNwYWNlcy4KKy5UUAorXGZCLXBcZlIKK1RlbGxzIHhtbHdmIHRvIHByb2Nlc3MgZXh0ZXJuYWwgRFREcyBhbmQgcGFyYW1ldGVyCitlbnRpdGllcy4KKworTm9ybWFsbHkgXGZCeG1sd2ZcZlIgbmV2ZXIgcGFyc2VzIHBhcmFtZXRlcgorZW50aXRpZXMuICBcZkItcFxmUiB0ZWxscyBpdCB0byBhbHdheXMgcGFyc2UgdGhlbS4KK1xmQi1wXGZSIGltcGxpZXMgXGZCLXhcZlIuCisuVFAKK1xmQi1yXGZSCitOb3JtYWxseSBcZkJ4bWx3ZlxmUiBtZW1vcnktbWFwcyB0aGUgWE1MIGZpbGUKK2JlZm9yZSBwYXJzaW5nOyB0aGlzIGNhbiByZXN1bHQgaW4gZmFzdGVyIHBhcnNpbmcgb24gbWFueQorcGxhdGZvcm1zLgorXGZCLXJcZlIgdHVybnMgb2ZmIG1lbW9yeS1tYXBwaW5nIGFuZCB1c2VzIG5vcm1hbCBmaWxlCitJTyBjYWxscyBpbnN0ZWFkLgorT2YgY291cnNlLCBtZW1vcnktbWFwcGluZyBpcyBhdXRvbWF0aWNhbGx5IHR1cm5lZCBvZmYKK3doZW4gcmVhZGluZyBmcm9tIHN0YW5kYXJkIGlucHV0LgorCitVc2Ugb2YgbWVtb3J5LW1hcHBpbmcgY2FuIGNhdXNlIHNvbWUgcGxhdGZvcm1zIHRvIHJlcG9ydAorc3Vic3RhbnRpYWxseSBoaWdoZXIgbWVtb3J5IHVzYWdlIGZvcgorXGZCeG1sd2ZcZlIsIGJ1dCB0aGlzIGFwcGVhcnMgdG8gYmUgYSBtYXR0ZXIgb2YKK3RoZSBvcGVyYXRpbmcgc3lzdGVtIHJlcG9ydGluZyBtZW1vcnkgaW4gYSBzdHJhbmdlIHdheTsgdGhlcmUgaXMKK25vdCBhIGxlYWsgaW4gXGZCeG1sd2ZcZlIuCisuVFAKK1xmQi1zXGZSCitQcmludHMgYW4gZXJyb3IgaWYgdGhlIGRvY3VtZW50IGlzIG5vdCBzdGFuZGFsb25lLiAKK0EgZG9jdW1lbnQgaXMgc3RhbmRhbG9uZSBpZiBpdCBoYXMgbm8gZXh0ZXJuYWwgc3Vic2V0IGFuZCBubworcmVmZXJlbmNlcyB0byBwYXJhbWV0ZXIgZW50aXRpZXMuCisuVFAKK1xmQi10XGZSCitUdXJucyBvbiB0aW1pbmdzLiAgVGhpcyB0ZWxscyBFeHBhdCB0byBwYXJzZSB0aGUgZW50aXJlIGZpbGUsCitidXQgbm90IHBlcmZvcm0gYW55IHByb2Nlc3NpbmcuCitUaGlzIGdpdmVzIGEgZmFpcmx5IGFjY3VyYXRlIGlkZWEgb2YgdGhlIHJhdyBzcGVlZCBvZiBFeHBhdCBpdHNlbGYKK3dpdGhvdXQgY2xpZW50IG92ZXJoZWFkLgorXGZCLXRcZlIgdHVybnMgb2ZmIG1vc3Qgb2YgdGhlIG91dHB1dCBvcHRpb25zCisoXGZCLWRcZlIsIFxmQi1tXGZSLCBcZkItY1xmUiwKK1wmLi4uKS4KKy5UUAorXGZCLXZcZlIKK1ByaW50cyB0aGUgdmVyc2lvbiBvZiB0aGUgRXhwYXQgbGlicmFyeSBiZWluZyB1c2VkLCBpbmNsdWRpbmcgc29tZQoraW5mb3JtYXRpb24gb24gdGhlIGNvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uIG9mIHRoZSBsaWJyYXJ5LCBhbmQKK3RoZW4gZXhpdHMuCisuVFAKK1xmQi13XGZSCitFbmFibGVzIHN1cHBvcnQgZm9yIFdpbmRvd3MgY29kZSBwYWdlcy4KK05vcm1hbGx5LCBcZkJ4bWx3ZlxmUiB3aWxsIHRocm93IGFuIGVycm9yIGlmIGl0CitydW5zIGFjcm9zcyBhbiBlbmNvZGluZyB0aGF0IGl0IGlzIG5vdCBlcXVpcHBlZCB0byBoYW5kbGUgaXRzZWxmLiAgV2l0aAorXGZCLXdcZlIsIHhtbHdmIHdpbGwgdHJ5IHRvIHVzZSBhIFdpbmRvd3MgY29kZQorcGFnZS4gIFNlZSBhbHNvIFxmQi1lXGZSLgorLlRQCitcZkIteFxmUgorVHVybnMgb24gcGFyc2luZyBleHRlcm5hbCBlbnRpdGllcy4KKworTm9uLXZhbGlkYXRpbmcgcGFyc2VycyBhcmUgbm90IHJlcXVpcmVkIHRvIHJlc29sdmUgZXh0ZXJuYWwKK2VudGl0aWVzLCBvciBldmVuIGV4cGFuZCBlbnRpdGllcyBhdCBhbGwuCitFeHBhdCBhbHdheXMgZXhwYW5kcyBpbnRlcm5hbCBlbnRpdGllcyAoPyksCitidXQgZXh0ZXJuYWwgZW50aXR5IHBhcnNpbmcgbXVzdCBiZSBlbmFibGVkIGV4cGxpY2l0bHkuCisKK0V4dGVybmFsIGVudGl0aWVzIGFyZSBzaW1wbHkgZW50aXRpZXMgdGhhdCBvYnRhaW4gdGhlaXIKK2RhdGEgZnJvbSBvdXRzaWRlIHRoZSBYTUwgZmlsZSBjdXJyZW50bHkgYmVpbmcgcGFyc2VkLgorCitUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYW4gaW50ZXJuYWwgZW50aXR5OgorCisubmYKKzwhRU5USVRZIHZlcnMgJzEuMC4yJz4KKy5maQorCitBbmQgaGVyZSBhcmUgc29tZSBleGFtcGxlcyBvZiBleHRlcm5hbCBlbnRpdGllczoKKworLm5mCis8IUVOVElUWSBoZWFkZXIgU1lTVEVNICJoZWFkZXItJnZlcnM7LnhtbCI+ICAocGFyc2VkKQorPCFFTlRJVFkgbG9nbyBTWVNURU0gImxvZ28ucG5nIiBQTkc+ICAgICAgICAgKHVucGFyc2VkKQorLmZpCisuVFAKK1xmQi0tXGZSCisoVHdvIGh5cGhlbnMuKQorVGVybWluYXRlcyB0aGUgbGlzdCBvZiBvcHRpb25zLiAgVGhpcyBpcyBvbmx5IG5lZWRlZCBpZiBhIGZpbGVuYW1lCitzdGFydHMgd2l0aCBhIGh5cGhlbi4gIEZvciBleGFtcGxlOgorCisubmYKK3htbHdmIC0tIC1teWZpbGUueG1sCisuZmkKKword2lsbCBydW4gXGZCeG1sd2ZcZlIgb24gdGhlIGZpbGUKK1xmSS1teWZpbGUueG1sXGZSLgorLlBQCitPbGRlciB2ZXJzaW9ucyBvZiBcZkJ4bWx3ZlxmUiBkbyBub3Qgc3VwcG9ydAorcmVhZGluZyBmcm9tIHN0YW5kYXJkIGlucHV0LgorLlNIICJPVVRQVVQiCisuUFAKK0lmIGFuIGlucHV0IGZpbGUgaXMgbm90IHdlbGwtZm9ybWVkLAorXGZCeG1sd2ZcZlIgcHJpbnRzIGEgc2luZ2xlIGxpbmUgZGVzY3JpYmluZwordGhlIHByb2JsZW0gdG8gc3RhbmRhcmQgb3V0cHV0LiAgSWYgYSBmaWxlIGlzIHdlbGwgZm9ybWVkLAorXGZCeG1sd2ZcZlIgb3V0cHV0cyBub3RoaW5nLgorTm90ZSB0aGF0IHRoZSByZXN1bHQgY29kZSBpcyBcZkJub3RcZlIgc2V0LgorLlNIICJCVUdTIgorLlBQCitBY2NvcmRpbmcgdG8gdGhlIFczQyBzdGFuZGFyZCwgYW4gWE1MIGZpbGUgd2l0aG91dCBhCitkZWNsYXJhdGlvbiBhdCB0aGUgYmVnaW5uaW5nIGlzIG5vdCBjb25zaWRlcmVkIHdlbGwtZm9ybWVkLgorSG93ZXZlciwgXGZCeG1sd2ZcZlIgYWxsb3dzIHRoaXMgdG8gcGFzcy4KKy5QUAorXGZCeG1sd2ZcZlIgcmV0dXJucyBhIDAgLSBub2VyciByZXN1bHQsCitldmVuIGlmIHRoZSBmaWxlIGlzIG5vdCB3ZWxsLWZvcm1lZC4gIFRoZXJlIGlzIG5vIGdvb2Qgd2F5IGZvcgorYSBwcm9ncmFtIHRvIHVzZSBcZkJ4bWx3ZlxmUiB0byBxdWlja2x5CitjaGVjayBhIGZpbGUgLS0gaXQgbXVzdCBwYXJzZSBcZkJ4bWx3ZlxmUidzCitzdGFuZGFyZCBvdXRwdXQuCisuUFAKK1RoZSBlcnJvcnMgc2hvdWxkIGdvIHRvIHN0YW5kYXJkIGVycm9yLCBub3Qgc3RhbmRhcmQgb3V0cHV0LgorLlBQCitUaGVyZSBzaG91bGQgYmUgYSB3YXkgdG8gZ2V0IFxmQi1kXGZSIHRvIHNlbmQgaXRzCitvdXRwdXQgdG8gc3RhbmRhcmQgb3V0cHV0IHJhdGhlciB0aGFuIGZvcmNpbmcgdGhlIHVzZXIgdG8gc2VuZAoraXQgdG8gYSBmaWxlLgorLlBQCitJIGhhdmUgbm8gaWRlYSB3aHkgYW55b25lIHdvdWxkIHdhbnQgdG8gdXNlIHRoZQorXGZCLWRcZlIsIFxmQi1jXGZSLCBhbmQKK1xmQi1tXGZSIG9wdGlvbnMuICBJZiBzb21lb25lIGNvdWxkIGV4cGxhaW4gaXQgdG8KK21lLCBJJ2QgbGlrZSB0byBhZGQgdGhpcyBpbmZvcm1hdGlvbiB0byB0aGlzIG1hbnBhZ2UuCisuU0ggIkFMVEVSTkFUSVZFUyIKKy5QUAorSGVyZSBhcmUgc29tZSBYTUwgdmFsaWRhdG9ycyBvbiB0aGUgd2ViOgorCisubmYKK2h0dHA6Ly93d3cuaGNyYy5lZC5hYy51ay9+cmljaGFyZC94bWwtY2hlY2suaHRtbAoraHR0cDovL3d3dy5zdGcuYnJvd24uZWR1L3NlcnZpY2UveG1sdmFsaWQvCitodHRwOi8vd3d3LnNjcmlwdGluZy5jb20vZnJvbnRpZXI1L3htbC9jb2RlL3htbFZhbGlkYXRvci5odG1sCitodHRwOi8vd3d3LnhtbC5jb20vcHViL2EvdG9vbHMvcnV3Zi9jaGVjay5odG1sCisuZmkKKy5TSCAiU0VFIEFMU08iCisuUFAKKworLm5mCitUaGUgRXhwYXQgaG9tZSBwYWdlOiAgICAgICAgaHR0cDovL3d3dy5saWJleHBhdC5vcmcvCitUaGUgVzMgWE1MIHNwZWNpZmljYXRpb246ICAgaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbAorLmZpCisuU0ggIkFVVEhPUiIKKy5QUAorVGhpcyBtYW51YWwgcGFnZSB3YXMgd3JpdHRlbiBieSBTY290dCBCcm9uc29uIDxicm9uc29uQHJpbnNwaW4uY29tPiBmb3IKK3RoZSBEZWJpYW4gR05VL0xpbnV4IHN5c3RlbSAoYnV0IG1heSBiZSB1c2VkIGJ5IG90aGVycykuICBQZXJtaXNzaW9uIGlzCitncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24KK0xpY2Vuc2UsIFZlcnNpb24gMS4xLgpkaWZmIC0tZ2l0IGEvc2hhcmUvYWNsb2NhbC0xLjExL2FtdmVyc2lvbi5tNCBiL3NoYXJlL2FjbG9jYWwtMS4xMS9hbXZlcnNpb24ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA4ZGJjMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2FjbG9jYWwtMS4xMS9hbXZlcnNpb24ubTQKQEAgLTAsMCArMSwzNyBAQAorIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyMgR2VuZXJhdGVkIGZyb20gYW12ZXJzaW9uLmluOyBkbyBub3QgZWRpdCBieSBoYW5kLgorIyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fQVVUT01BS0VfVkVSU0lPTihWRVJTSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEF1dG9tYWtlIFguWSB0cmFjZXMgdGhpcyBtYWNybyB0byBlbnN1cmUgYWNsb2NhbC5tNCBoYXMgYmVlbgorIyBnZW5lcmF0ZWQgZnJvbSB0aGUgbTQgZmlsZXMgYWNjb21wYW55aW5nIEF1dG9tYWtlIFguWS4KKyMgKFRoaXMgcHJpdmF0ZSBtYWNybyBzaG91bGQgbm90IGJlIGNhbGxlZCBvdXRzaWRlIHRoaXMgZmlsZS4pCitBQ19ERUZVTihbQU1fQVVUT01BS0VfVkVSU0lPTl0sCitbYW1fX2FwaV92ZXJzaW9uPScxLjExJworZG5sIFNvbWUgdXNlcnMgZmluZCBBTV9BVVRPTUFLRV9WRVJTSU9OIGFuZCBtaXN0YWtlIGl0IGZvciBhIHdheSB0bworZG5sIHJlcXVpcmUgc29tZSBtaW5pbXVtIHZlcnNpb24uICBQb2ludCB0aGVtIHRvIHRoZSByaWdodCBtYWNyby4KK200X2lmKFskMV0sIFsxLjExLjFdLCBbXSwKKyAgICAgIFtBQ19GQVRBTChbRG8gbm90IGNhbGwgJDAsIHVzZSBBTV9JTklUX0FVVE9NQUtFKFskMV0pLl0pXSlkbmwKK10pCisKKyMgX0FNX0FVVE9DT05GX1ZFUlNJT04oVkVSU0lPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgYWNsb2NhbCB0cmFjZXMgdGhpcyBtYWNybyB0byBmaW5kIHRoZSBBdXRvY29uZiB2ZXJzaW9uLgorIyBUaGlzIGlzIGEgcHJpdmF0ZSBtYWNybyB0b28uICBVc2luZyBtNF9kZWZpbmUgc2ltcGxpZmllcworIyB0aGUgbG9naWMgaW4gYWNsb2NhbCwgd2hpY2ggY2FuIHNpbXBseSBpZ25vcmUgdGhpcyBkZWZpbml0aW9uLgorbTRfZGVmaW5lKFtfQU1fQVVUT0NPTkZfVkVSU0lPTl0sIFtdKQorCisjIEFNX1NFVF9DVVJSRU5UX0FVVE9NQUtFX1ZFUlNJT04KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDYWxsIEFNX0FVVE9NQUtFX1ZFUlNJT04gYW5kIEFNX0FVVE9NQUtFX1ZFUlNJT04gc28gdGhleSBjYW4gYmUgdHJhY2VkLgorIyBUaGlzIGZ1bmN0aW9uIGlzIEFDX1JFUVVJUkVkIGJ5IEFNX0lOSVRfQVVUT01BS0UuCitBQ19ERUZVTihbQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTl0sCitbQU1fQVVUT01BS0VfVkVSU0lPTihbMS4xMS4xXSlkbmwKK200X2lmbmRlZihbQUNfQVVUT0NPTkZfVkVSU0lPTl0sCisgIFttNF9jb3B5KFttNF9QQUNLQUdFX1ZFUlNJT05dLCBbQUNfQVVUT0NPTkZfVkVSU0lPTl0pXSlkbmwKK19BTV9BVVRPQ09ORl9WRVJTSU9OKG00X2RlZm4oW0FDX0FVVE9DT05GX1ZFUlNJT05dKSldKQpkaWZmIC0tZ2l0IGEvc2hhcmUvYWNsb2NhbC0xLjExL2FzLm00IGIvc2hhcmUvYWNsb2NhbC0xLjExL2FzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOGJmNDcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hY2xvY2FsLTEuMTEvYXMubTQKQEAgLTAsMCArMSwyMSBAQAorIyBGaWd1cmUgb3V0IGhvdyB0byBydW4gdGhlIGFzc2VtYmxlci4gICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNQorCisjIEFNX1BST0dfQVMKKyMgLS0tLS0tLS0tLQorQUNfREVGVU4oW0FNX1BST0dfQVNdLAorWyMgQnkgZGVmYXVsdCB3ZSBzaW1wbHkgdXNlIHRoZSBDIGNvbXBpbGVyIHRvIGJ1aWxkIGFzc2VtYmx5IGNvZGUuCitBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKK3Rlc3QgIiR7Q0NBUytzZXR9IiA9IHNldCB8fCBDQ0FTPSRDQwordGVzdCAiJHtDQ0FTRkxBR1Mrc2V0fSIgPSBzZXQgfHwgQ0NBU0ZMQUdTPSRDRkxBR1MKK0FDX0FSR19WQVIoW0NDQVNdLCAgICAgIFthc3NlbWJsZXIgY29tcGlsZXIgY29tbWFuZCAoZGVmYXVsdHMgdG8gQ0MpXSkKK0FDX0FSR19WQVIoW0NDQVNGTEFHU10sIFthc3NlbWJsZXIgY29tcGlsZXIgZmxhZ3MgKGRlZmF1bHRzIHRvIENGTEFHUyldKQorX0FNX0lGX09QVElPTihbbm8tZGVwZW5kZW5jaWVzXSwsIFtfQU1fREVQRU5ERU5DSUVTKFtDQ0FTXSldKWRubAorXSkKZGlmZiAtLWdpdCBhL3NoYXJlL2FjbG9jYWwtMS4xMS9hdXhkaXIubTQgYi9zaGFyZS9hY2xvY2FsLTEuMTEvYXV4ZGlyLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MWUzYjcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hY2xvY2FsLTEuMTEvYXV4ZGlyLm00CkBAIC0wLDAgKzEsNTIgQEAKKyMgQU1fQVVYX0RJUl9FWFBBTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgRm9yIHByb2plY3RzIHVzaW5nIEFDX0NPTkZJR19BVVhfRElSKFtmb29dKSwgQXV0b2NvbmYgc2V0cworIyAkYWNfYXV4X2RpciB0byBgJHNyY2Rpci9mb28nLiAgSW4gb3RoZXIgcHJvamVjdHMsIGl0IGlzIHNldCB0bworIyBgJHNyY2RpcicsIGAkc3JjZGlyLy4uJywgb3IgYCRzcmNkaXIvLi4vLi4nLgorIworIyBPZiBjb3Vyc2UsIEF1dG9tYWtlIG11c3QgaG9ub3IgdGhpcyB2YXJpYWJsZSB3aGVuZXZlciBpdCBjYWxscyBhCisjIHRvb2wgZnJvbSB0aGUgYXV4aWxpYXJ5IGRpcmVjdG9yeS4gIFRoZSBwcm9ibGVtIGlzIHRoYXQgJHNyY2RpciAoYW5kCisjIHRoZXJlZm9yZSAkYWNfYXV4X2RpciBhcyB3ZWxsKSBjYW4gYmUgZWl0aGVyIGFic29sdXRlIG9yIHJlbGF0aXZlLAorIyBkZXBlbmRpbmcgb24gaG93IGNvbmZpZ3VyZSBpcyBydW4uICBUaGlzIGlzIHByZXR0eSBhbm5veWluZywgc2luY2UKKyMgaXQgbWFrZXMgJGFjX2F1eF9kaXIgcXVpdGUgdW51c2FibGUgaW4gc3ViZGlyZWN0b3JpZXM6IGluIHRoZSB0b3AKKyMgc291cmNlIGRpcmVjdG9yeSwgYW55IGZvcm0gd2lsbCB3b3JrIGZpbmUsIGJ1dCBpbiBzdWJkaXJlY3RvcmllcyBhCisjIHJlbGF0aXZlIHBhdGggbmVlZHMgdG8gYmUgYWRqdXN0ZWQgZmlyc3QuCisjCisjICRhY19hdXhfZGlyL21pc3NpbmcKKyMgICAgZmFpbHMgd2hlbiBjYWxsZWQgZnJvbSBhIHN1YmRpcmVjdG9yeSBpZiAkYWNfYXV4X2RpciBpcyByZWxhdGl2ZQorIyAkdG9wX3NyY2Rpci8kYWNfYXV4X2Rpci9taXNzaW5nCisjICAgIGZhaWxzIGlmICRhY19hdXhfZGlyIGlzIGFic29sdXRlLAorIyAgICBmYWlscyB3aGVuIGNhbGxlZCBmcm9tIGEgc3ViZGlyZWN0b3J5IGluIGEgVlBBVEggYnVpbGQgd2l0aAorIyAgICAgICAgICBhIHJlbGF0aXZlICRhY19hdXhfZGlyCisjCisjIFRoZSByZWFzb24gb2YgdGhlIGxhdHRlciBmYWlsdXJlIGlzIHRoYXQgJHRvcF9zcmNkaXIgYW5kICRhY19hdXhfZGlyCisjIGFyZSBib3RoIHByZWZpeGVkIGJ5ICRzcmNkaXIuICBJbiBhbiBpbi1zb3VyY2UgYnVpbGQgdGhpcyBpcyB1c3VhbGx5CisjIGhhcm1sZXNzIGJlY2F1c2UgJHNyY2RpciBpcyBgLicsIGJ1dCB0aGluZ3Mgd2lsbCBicm9rZSB3aGVuIHlvdQorIyBzdGFydCBhIFZQQVRIIGJ1aWxkIG9yIHVzZSBhbiBhYnNvbHV0ZSAkc3JjZGlyLgorIworIyBTbyB3ZSBjb3VsZCB1c2Ugc29tZXRoaW5nIHNpbWlsYXIgdG8gJHRvcF9zcmNkaXIvJGFjX2F1eF9kaXIvbWlzc2luZywKKyMgaWZmIHdlIHN0cmlwIHRoZSBsZWFkaW5nICRzcmNkaXIgZnJvbSAkYWNfYXV4X2Rpci4gIFRoYXQgd291bGQgYmU6CisjICAgYW1fYXV4X2Rpcj0nXCQodG9wX3NyY2RpcikvJ2BleHByICIkYWNfYXV4X2RpciIgOiAiJHNyY2Rpci8vKlwoLipcKSJgCisjIGFuZCB0aGVuIHdlIHdvdWxkIGRlZmluZSAkTUlTU0lORyBhcworIyAgIE1JU1NJTkc9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9taXNzaW5nIgorIyBUaGlzIHdpbGwgd29yayBhcyBsb25nIGFzIE1JU1NJTkcgaXMgbm90IGNhbGxlZCBmcm9tIGNvbmZpZ3VyZSwgYmVjYXVzZQorIyB1bmZvcnR1bmF0ZWx5ICQodG9wX3NyY2RpcikgaGFzIG5vIG1lYW5pbmcgaW4gY29uZmlndXJlLgorIyBIb3dldmVyIHRoZXJlIGFyZSBvdGhlciB2YXJpYWJsZXMsIGxpa2UgQ0MsIHdoaWNoIGFyZSBvZnRlbiB1c2VkIGluCisjIGNvbmZpZ3VyZSwgYW5kIGNvdWxkIHRoZXJlZm9yZSBub3QgdXNlIHRoaXMgImZpeGVkIiAkYWNfYXV4X2Rpci4KKyMKKyMgQW5vdGhlciBzb2x1dGlvbiwgdXNlZCBoZXJlLCBpcyB0byBhbHdheXMgZXhwYW5kICRhY19hdXhfZGlyIHRvIGFuCisjIGFic29sdXRlIFBBVEguICBUaGUgZHJhd2JhY2sgaXMgdGhhdCB1c2luZyBhYnNvbHV0ZSBwYXRocyBwcmV2ZW50IGEKKyMgY29uZmlndXJlZCB0cmVlIHRvIGJlIG1vdmVkIHdpdGhvdXQgcmVjb25maWd1cmF0aW9uLgorCitBQ19ERUZVTihbQU1fQVVYX0RJUl9FWFBBTkRdLAorW2RubCBSZWx5IG9uIGF1dG9jb25mIHRvIHNldCB1cCBDRFBBVEggcHJvcGVybHkuCitBQ19QUkVSRVEoWzIuNTBdKWRubAorIyBleHBhbmQgJGFjX2F1eF9kaXIgdG8gYW4gYWJzb2x1dGUgcGF0aAorYW1fYXV4X2Rpcj1gY2QgJGFjX2F1eF9kaXIgJiYgcHdkYAorXSkKZGlmZiAtLWdpdCBhL3NoYXJlL2FjbG9jYWwtMS4xMS9jY3N0ZGMubTQgYi9zaGFyZS9hY2xvY2FsLTEuMTEvY2NzdGRjLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMTU0MWUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hY2xvY2FsLTEuMTEvY2NzdGRjLm00CkBAIC0wLDAgKzEsMjYgQEAKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMjIEFOU0lmeSB0aGUgQyBjb21waWxlciB3aGVuZXZlciBwb3NzaWJsZS4gICMjCisjIyBGcm9tIEZyYW5jLG9pcyBQaW5hcmQgICAgICAgICAgICAgICAgICAgICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNAorCisjIFRoaXMgd2FzIG1lcmdlZCBpbnRvIEFDX1BST0dfQ0MgaW4gQXV0b2NvbmYuCisKK0FVX0RFRlVOKFtBTV9QUk9HX0NDX1NURENdLAorW0FDX1BST0dfQ0MKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sIFskMDoKKwl5b3VyIGNvZGUgc2hvdWxkIG5vIGxvbmdlciBkZXBlbmQgdXBvbiBgYW1fY3ZfcHJvZ19jY19zdGRjJywgYnV0IHVwb24KKwlgYWNfY3ZfcHJvZ19jY19zdGRjJy4gIFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBhc3NpZ25tZW50IHdoZW4KKwl5b3UgYWRqdXN0IHRoZSBjb2RlLiAgWW91IGNhbiBhbHNvIHJlbW92ZSB0aGUgYWJvdmUgY2FsbCB0bworCUFDX1BST0dfQ0MgaWYgeW91IGFscmVhZHkgY2FsbGVkIGl0IGVsc2V3aGVyZS5dKQorYW1fY3ZfcHJvZ19jY19zdGRjPSRhY19jdl9wcm9nX2NjX3N0ZGMKK10pCitBVV9ERUZVTihbZnBfUFJPR19DQ19TVERDXSkKZGlmZiAtLWdpdCBhL3NoYXJlL2FjbG9jYWwtMS4xMS9jb25kLWlmLm00IGIvc2hhcmUvYWNsb2NhbC0xLjExL2NvbmQtaWYubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYyNjExZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2FjbG9jYWwtMS4xMS9jb25kLWlmLm00CkBAIC0wLDAgKzEsMzkgQEAKKyMgQU1fQ09ORF9JRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCAxCisKKyMgX0FNX0NPTkRfSUYKKyMgX0FNX0NPTkRfRUxTRQorIyBfQU1fQ09ORF9FTkRJRgorIyAtLS0tLS0tLS0tLS0tLQorIyBUaGVzZSBtYWNyb3MgYXJlIG9ubHkgdXNlZCBmb3IgdHJhY2luZy4KK200X2RlZmluZShbX0FNX0NPTkRfSUZdKQorbTRfZGVmaW5lKFtfQU1fQ09ORF9FTFNFXSkKK200X2RlZmluZShbX0FNX0NPTkRfRU5ESUZdKQorCisKKyMgQU1fQ09ORF9JRihDT05ELCBbSUYtVFJVRV0sIFtJRi1GQUxTRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZiB0aGUgc2hlbGwgY29uZGl0aW9uIG1hdGNoaW5nIENPTkQgaXMgdHJ1ZSwgZXhlY3V0ZSBJRi1UUlVFLAorIyBvdGhlcndpc2UgZXhlY3V0ZSBJRi1GQUxTRS4gIEFsbG93IGF1dG9tYWtlIHRvIGxlYXJuIGFib3V0IGNvbmRpdGlvbmFsCisjIGluc3RhbnRpYXRpbmcgbWFjcm9zICh0aGUgQUNfQ09ORklHX0ZPT1MpLgorQUNfREVGVU4oW0FNX0NPTkRfSUZdLAorW200X2lmbmRlZihbX0FNX0NPTkRfVkFMVUVfJDFdLAorCSAgIFttNF9mYXRhbChbJDA6IG5vIHN1Y2ggY29uZGl0aW9uICIkMSJdKV0pZG5sCitfQU1fQ09ORF9JRihbJDFdKWRubAoraWYgX0FNX0NPTkRfVkFMVUVfJDE7IHRoZW4KKyAgbTRfZGVmYXVsdChbJDJdLCBbOl0pCittNF9pZnZhbChbJDNdLAorW19BTV9DT05EX0VMU0UoWyQxXSlkbmwKK2Vsc2UKKyAgJDMKK10pZG5sCitfQU1fQ09ORF9FTkRJRihbJDFdKWRubAorZmlbXWRubAorXSkKZGlmZiAtLWdpdCBhL3NoYXJlL2FjbG9jYWwtMS4xMS9jb25kLm00IGIvc2hhcmUvYWNsb2NhbC0xLjExL2NvbmQubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQyNDhiMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2FjbG9jYWwtMS4xMS9jb25kLm00CkBAIC0wLDAgKzEsMzUgQEAKKyMgQU1fQ09ORElUSU9OQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTcsIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgOQorCisjIEFNX0NPTkRJVElPTkFMKE5BTUUsIFNIRUxMLUNPTkRJVElPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgYSBjb25kaXRpb25hbC4KK0FDX0RFRlVOKFtBTV9DT05ESVRJT05BTF0sCitbQUNfUFJFUkVRKDIuNTIpZG5sCisgaWZlbHNlKFskMV0sIFtUUlVFXSwgIFtBQ19GQVRBTChbJDA6IGludmFsaWQgY29uZGl0aW9uOiAkMV0pXSwKKwlbJDFdLCBbRkFMU0VdLCBbQUNfRkFUQUwoWyQwOiBpbnZhbGlkIGNvbmRpdGlvbjogJDFdKV0pZG5sCitBQ19TVUJTVChbJDFfVFJVRV0pZG5sCitBQ19TVUJTVChbJDFfRkFMU0VdKWRubAorX0FNX1NVQlNUX05PVE1BS0UoWyQxX1RSVUVdKWRubAorX0FNX1NVQlNUX05PVE1BS0UoWyQxX0ZBTFNFXSlkbmwKK200X2RlZmluZShbX0FNX0NPTkRfVkFMVUVfJDFdLCBbJDJdKWRubAoraWYgJDI7IHRoZW4KKyAgJDFfVFJVRT0KKyAgJDFfRkFMU0U9JyMnCitlbHNlCisgICQxX1RSVUU9JyMnCisgICQxX0ZBTFNFPQorZmkKK0FDX0NPTkZJR19DT01NQU5EU19QUkUoCitbaWYgdGVzdCAteiAiJHskMV9UUlVFfSIgJiYgdGVzdCAteiAiJHskMV9GQUxTRX0iOyB0aGVuCisgIEFDX01TR19FUlJPUihbW2NvbmRpdGlvbmFsICIkMSIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS5dXSkKK2ZpXSldKQpkaWZmIC0tZ2l0IGEvc2hhcmUvYWNsb2NhbC0xLjExL2RlcGVuZC5tNCBiL3NoYXJlL2FjbG9jYWwtMS4xMS9kZXBlbmQubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZlODY0MwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2FjbG9jYWwtMS4xMS9kZXBlbmQubTQKQEAgLTAsMCArMSwxODIgQEAKKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA5CisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDEwCisKKyMgVGhlcmUgYXJlIGEgZmV3IGRpcnR5IGhhY2tzIGJlbG93IHRvIGF2b2lkIGxldHRpbmcgYEFDX1BST0dfQ0MnIGJlCisjIHdyaXR0ZW4gaW4gY2xlYXIsIGluIHdoaWNoIGNhc2UgYXV0b21ha2UsIHdoZW4gcmVhZGluZyBhY2xvY2FsLm00LAorIyB3aWxsIHRoaW5rIGl0IHNlZXMgYSAqdXNlKiwgYW5kIHRoZXJlZm9yZSB3aWxsIHRyaWdnZXIgYWxsIGl0J3MKKyMgQyBzdXBwb3J0IG1hY2hpbmVyeS4gIEFsc28gbm90ZSB0aGF0IGl0IG1lYW5zIHRoYXQgYXV0b3NjYW4sIHNlZWluZworIyBDQyBldGMuIGluIHRoZSBNYWtlZmlsZSwgd2lsbCBhc2sgZm9yIGFuIEFDX1BST0dfQ0MgdXNlLi4uCisKKworIyBfQU1fREVQRU5ERU5DSUVTKE5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VlIGhvdyB0aGUgY29tcGlsZXIgaW1wbGVtZW50cyBkZXBlbmRlbmN5IGNoZWNraW5nLgorIyBOQU1FIGlzICJDQyIsICJDWFgiLCAiR0NKIiwgb3IgIk9CSkMiLgorIyBXZSB0cnkgYSBmZXcgdGVjaG5pcXVlcyBhbmQgdXNlIHRoYXQgdG8gc2V0IGEgc2luZ2xlIGNhY2hlIHZhcmlhYmxlLgorIworIyBXZSBkb24ndCBBQ19SRVFVSVJFIHRoZSBjb3JyZXNwb25kaW5nIEFDX1BST0dfQ0Mgc2luY2UgdGhlIGxhdHRlciB3YXMKKyMgbW9kaWZpZWQgdG8gaW52b2tlIF9BTV9ERVBFTkRFTkNJRVMoQ0MpOyB3ZSB3b3VsZCBoYXZlIGEgY2lyY3VsYXIKKyMgZGVwZW5kZW5jeSwgYW5kIGdpdmVuIHRoYXQgdGhlIHVzZXIgaXMgbm90IGV4cGVjdGVkIHRvIHJ1biB0aGlzIG1hY3JvLAorIyBqdXN0IHJlbHkgb24gQUNfUFJPR19DQy4KK0FDX0RFRlVOKFtfQU1fREVQRU5ERU5DSUVTXSwKK1tBQ19SRVFVSVJFKFtBTV9TRVRfREVQRElSXSlkbmwKK0FDX1JFUVVJUkUoW0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTXSlkbmwKK0FDX1JFUVVJUkUoW0FNX01BS0VfSU5DTFVERV0pZG5sCitBQ19SRVFVSVJFKFtBTV9ERVBfVFJBQ0tdKWRubAorCitpZmVsc2UoWyQxXSwgQ0MsICAgW2RlcGNjPSIkQ0MiICAgYW1fY29tcGlsZXJfbGlzdD1dLAorICAgICAgIFskMV0sIENYWCwgIFtkZXBjYz0iJENYWCIgIGFtX2NvbXBpbGVyX2xpc3Q9XSwKKyAgICAgICBbJDFdLCBPQkpDLCBbZGVwY2M9IiRPQkpDIiBhbV9jb21waWxlcl9saXN0PSdnY2MzIGdjYyddLAorICAgICAgIFskMV0sIFVQQywgIFtkZXBjYz0iJFVQQyIgIGFtX2NvbXBpbGVyX2xpc3Q9XSwKKyAgICAgICBbJDFdLCBHQ0osICBbZGVwY2M9IiRHQ0oiICBhbV9jb21waWxlcl9saXN0PSdnY2MzIGdjYyddLAorICAgICAgICAgICAgICAgICAgIFtkZXBjYz0iJCQxIiAgIGFtX2NvbXBpbGVyX2xpc3Q9XSkKKworQUNfQ0FDSEVfQ0hFQ0soW2RlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjXSwKKyAgICAgICAgICAgICAgIFthbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZV0sCitbaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgorICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCisgICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCisgICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCisgICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCBgRCcgLS0gYmVjYXVzZSBgLU1EJyBtZWFucyBgcHV0IHRoZSBvdXRwdXQKKyAgIyBpbiBEJy4KKyAgbWtkaXIgY29uZnRlc3QuZGlyCisgICMgQ29weSBkZXBjb21wIHRvIHN1YmRpciBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b24ndCBmaW5kIGl0IGlmIHdlJ3JlCisgICMgdXNpbmcgYSByZWxhdGl2ZSBkaXJlY3RvcnkuCisgIGNwICIkYW1fZGVwY29tcCIgY29uZnRlc3QuZGlyCisgIGNkIGNvbmZ0ZXN0LmRpcgorICAjIFdlIHdpbGwgYnVpbGQgb2JqZWN0cyBhbmQgZGVwZW5kZW5jaWVzIGluIGEgc3ViZGlyZWN0b3J5IGJlY2F1c2UKKyAgIyBpdCBoZWxwcyB0byBkZXRlY3QgaW5hcHBsaWNhYmxlIGRlcGVuZGVuY3kgbW9kZXMuICBGb3IgaW5zdGFuY2UKKyAgIyBib3RoIFRydTY0J3MgY2MgYW5kIElDQyBzdXBwb3J0IC1NRCB0byBvdXRwdXQgZGVwZW5kZW5jaWVzIGFzIGEKKyAgIyBzaWRlIGVmZmVjdCBvZiBjb21waWxhdGlvbiwgYnV0IElDQyB3aWxsIHB1dCB0aGUgZGVwZW5kZW5jaWVzIGluCisgICMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdoaWxlIFRydTY0IHdpbGwgcHV0IHRoZW0gaW4gdGhlIG9iamVjdAorICAjIGRpcmVjdG9yeS4KKyAgbWtkaXIgc3ViCisKKyAgYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgorICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gWydzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJ10gPCAuL2RlcGNvbXBgCisgIGZpCisgIGFtX191bml2ZXJzYWw9ZmFsc2UKKyAgbTRfY2FzZShbJDFdLCBbQ0NdLAorICAgIFtjYXNlICIgJGRlcGNjICIgaW4gIygKKyAgICAgKlwgLWFyY2hcICpcIC1hcmNoXCAqKSBhbV9fdW5pdmVyc2FsPXRydWUgOzsKKyAgICAgZXNhY10sCisgICAgW0NYWF0sCisgICAgW2Nhc2UgIiAkZGVwY2MgIiBpbiAjKAorICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworICAgICBlc2FjXSkKKworICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KKyAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKKyAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCisgICAgIyB3ZSBzaG91bGQgbm90IGNob29zZSBhIGRlcGNvbXAgbW9kZSB3aGljaCBpcyBjb25mdXNlZCBieSB0aGlzLgorICAgICMKKyAgICAjIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlc2UgZmlsZXMgZm9yIGVhY2ggdGVzdCwgYXMgdGhlIGNvbXBpbGVyIG1heQorICAgICMgb3ZlcndyaXRlIHNvbWUgb2YgdGhlbSB3aGVuIHRlc3Rpbmcgd2l0aCBvYnNjdXJlIGNvbW1hbmQgbGluZXMuCisgICAgIyBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCB0aGUgQUlYIEMgY29tcGlsZXIuCisgICAgOiA+IHN1Yi9jb25mdGVzdC5jCisgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCisgICAgICBlY2hvICcjaW5jbHVkZSAiY29uZnRzdCckaScuaCInID4+IHN1Yi9jb25mdGVzdC5jCisgICAgICAjIFVzaW5nIGA6ID4gc3ViL2NvbmZ0c3QkaS5oJyBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAorICAgICAgIyBTb2xhcmlzIDgncyB7L3Vzcix9L2Jpbi9zaC4KKyAgICAgIHRvdWNoIHN1Yi9jb25mdHN0JGkuaAorICAgIGRvbmUKKyAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCisKKyAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKKyAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQorICAgICMgaGFuZGxlIGAtTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLiAgQWxzbywgc29tZSBJbnRlbAorICAgICMgdmVyc2lvbnMgaGFkIHRyb3VibGUgd2l0aCBvdXRwdXQgaW4gc3ViZGlycworICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgYW1fX21pbnVzX29iaj0iLW8gJGFtX19vYmoiCisgICAgY2FzZSAkZGVwbW9kZSBpbgorICAgIGdjYykKKyAgICAgICMgVGhpcyBkZXBtb2RlIGNhdXNlcyBhIGNvbXBpbGVyIHJhY2UgaW4gdW5pdmVyc2FsIG1vZGUuCisgICAgICB0ZXN0ICIkYW1fX3VuaXZlcnNhbCIgPSBmYWxzZSB8fCBjb250aW51ZQorICAgICAgOzsKKyAgICBub3NpZGVlZmZlY3QpCisgICAgICAjIGFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKKyAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQKKyAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciID0geHllczsgdGhlbgorCWNvbnRpbnVlCisgICAgICBlbHNlCisJYnJlYWsKKyAgICAgIGZpCisgICAgICA7OworICAgIG1zdmlzdWFsY3BwIHwgbXN2Y21zeXMpCisgICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayBgLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcworICAgICAgIyBub3QgcnVuIHlldC4gIFRoZXNlIGRlcG1vZGVzIGFyZSBsYXRlIGVub3VnaCBpbiB0aGUgZ2FtZSwgYW5kCisgICAgICAjIHNvIHdlYWsgdGhhdCB0aGVpciBmdW5jdGlvbmluZyBzaG91bGQgbm90IGJlIGltcGFjdGVkLgorICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQorICAgICAgYW1fX21pbnVzX29iaj0KKyAgICAgIDs7CisgICAgbm9uZSkgYnJlYWsgOzsKKyAgICBlc2FjCisgICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCisgICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD0kYW1fX29iaiBcCisgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwICRhbV9fb2JqIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCisgICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQorICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCisgICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAorICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCisgICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKKyAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgICAgIGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPSRkZXBtb2RlCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKKworICBjZCAuLgorICBybSAtcmYgY29uZnRlc3QuZGlyCitlbHNlCisgIGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKK2ZpCitdKQorQUNfU1VCU1QoWyQxREVQTU9ERV0sIFtkZXBtb2RlPSRhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZV0pCitBTV9DT05ESVRJT05BTChbYW1fX2Zhc3RkZXAkMV0sIFsKKyAgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vIFwKKyAgJiYgdGVzdCAiJGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzNdKQorXSkKKworCisjIEFNX1NFVF9ERVBESVIKKyMgLS0tLS0tLS0tLS0tLQorIyBDaG9vc2UgYSBkaXJlY3RvcnkgbmFtZSBmb3IgZGVwZW5kZW5jeSBmaWxlcy4KKyMgVGhpcyBtYWNybyBpcyBBQ19SRVFVSVJFZCBpbiBfQU1fREVQRU5ERU5DSUVTCitBQ19ERUZVTihbQU1fU0VUX0RFUERJUl0sCitbQUNfUkVRVUlSRShbQU1fU0VUX0xFQURJTkdfRE9UXSlkbmwKK0FDX1NVQlNUKFtERVBESVJdLCBbIiR7YW1fX2xlYWRpbmdfZG90fWRlcHMiXSlkbmwKK10pCisKKworIyBBTV9ERVBfVFJBQ0sKKyMgLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQU1fREVQX1RSQUNLXSwKK1tBQ19BUkdfRU5BQkxFKGRlcGVuZGVuY3ktdHJhY2tpbmcsCitbICAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyAgc3BlZWRzIHVwIG9uZS10aW1lIGJ1aWxkCisgIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgICBkbyBub3QgcmVqZWN0IHNsb3cgZGVwZW5kZW5jeSBleHRyYWN0b3JzXSkKK2lmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgorICBhbV9kZXBjb21wPSIkYWNfYXV4X2Rpci9kZXBjb21wIgorICBBTURFUEJBQ0tTTEFTSD0nXCcKK2ZpCitBTV9DT05ESVRJT05BTChbQU1ERVBdLCBbdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vXSkKK0FDX1NVQlNUKFtBTURFUEJBQ0tTTEFTSF0pZG5sCitfQU1fU1VCU1RfTk9UTUFLRShbQU1ERVBCQUNLU0xBU0hdKWRubAorXSkKZGlmZiAtLWdpdCBhL3NoYXJlL2FjbG9jYWwtMS4xMS9kZXBvdXQubTQgYi9zaGFyZS9hY2xvY2FsLTEuMTEvZGVwb3V0Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwYTM5MjYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hY2xvY2FsLTEuMTEvZGVwb3V0Lm00CkBAIC0wLDAgKzEsNzkgQEAKKyMgR2VuZXJhdGUgY29kZSB0byBzZXQgdXAgZGVwZW5kZW5jeSB0cmFja2luZy4gICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDgKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworI3NlcmlhbCA1CisKKyMgX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10sCitbeworICAjIEF1dG9jb25mIDIuNjIgcXVvdGVzIC0tZmlsZSBhcmd1bWVudHMgZm9yIGV2YWwsIGJ1dCBub3Qgd2hlbiBmaWxlcworICAjIGFyZSBsaXN0ZWQgd2l0aG91dCAtLWZpbGUuICBMZXQncyBwbGF5IHNhZmUgYW5kIG9ubHkgZW5hYmxlIHRoZSBldmFsCisgICMgaWYgd2UgZGV0ZWN0IHRoZSBxdW90aW5nLgorICBjYXNlICRDT05GSUdfRklMRVMgaW4KKyAgKlwnKikgZXZhbCBzZXQgeCAiJENPTkZJR19GSUxFUyIgOzsKKyAgKikgICBzZXQgeCAkQ09ORklHX0ZJTEVTIDs7CisgIGVzYWMKKyAgc2hpZnQKKyAgZm9yIG1mCisgIGRvCisgICAgIyBTdHJpcCBNRiBzbyB3ZSBlbmQgdXAgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KKyAgICBtZj1gZWNobyAiJG1mIiB8IHNlZCAtZSAncy86LiokLy8nYAorICAgICMgQ2hlY2sgd2hldGhlciB0aGlzIGlzIGFuIEF1dG9tYWtlIGdlbmVyYXRlZCBNYWtlZmlsZSBvciBub3QuCisgICAgIyBXZSB1c2VkIHRvIG1hdGNoIG9ubHkgdGhlIGZpbGVzIG5hbWVkIGBNYWtlZmlsZS5pbicsIGJ1dAorICAgICMgc29tZSBwZW9wbGUgcmVuYW1lIHRoZW07IHNvIGluc3RlYWQgd2UgbG9vayBhdCB0aGUgZmlsZSBjb250ZW50LgorICAgICMgR3JlcCdpbmcgdGhlIGZpcnN0IGxpbmUgaXMgbm90IGVub3VnaDogc29tZSBwZW9wbGUgcG9zdC1wcm9jZXNzCisgICAgIyBlYWNoIE1ha2VmaWxlLmluIGFuZCBhZGQgYSBuZXcgbGluZSBvbiB0b3Agb2YgZWFjaCBmaWxlIHRvIHNheSBzby4KKyAgICAjIEdyZXAnaW5nIHRoZSB3aG9sZSBmaWxlIGlzIG5vdCBnb29kIGVpdGhlcjogQUlYIGdyZXAgaGFzIGEgbGluZQorICAgICMgbGltaXQgb2YgMjA0OCwgYnV0IGFsbCBzZWQncyB3ZSBrbm93IGhhdmUgdW5kZXJzdGFuZCBhdCBsZWFzdCA0MDAwLgorICAgIGlmIHNlZCAtbiAncyxeIy4qZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlLiosWCxwJyAiJG1mIiB8IGdyZXAgWCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIGRpcnBhcnQ9YEFTX0RJUk5BTUUoIiRtZiIpYAorICAgIGVsc2UKKyAgICAgIGNvbnRpbnVlCisgICAgZmkKKyAgICAjIEV4dHJhY3QgdGhlIGRlZmluaXRpb24gb2YgREVQRElSLCBhbV9faW5jbHVkZSwgYW5kIGFtX19xdW90ZQorICAgICMgZnJvbSB0aGUgTWFrZWZpbGUgd2l0aG91dCBydW5uaW5nIGBtYWtlJy4KKyAgICBERVBESVI9YHNlZCAtbiAncy9eREVQRElSID0gLy9wJyA8ICIkbWYiYAorICAgIHRlc3QgLXogIiRERVBESVIiICYmIGNvbnRpbnVlCisgICAgYW1fX2luY2x1ZGU9YHNlZCAtbiAncy9eYW1fX2luY2x1ZGUgPSAvL3AnIDwgIiRtZiJgCisgICAgdGVzdCAteiAiYW1fX2luY2x1ZGUiICYmIGNvbnRpbnVlCisgICAgYW1fX3F1b3RlPWBzZWQgLW4gJ3MvXmFtX19xdW90ZSA9IC8vcCcgPCAiJG1mImAKKyAgICAjIFdoZW4gdXNpbmcgYW5zaTJrbnIsIFUgbWF5IGJlIGVtcHR5IG9yIGFuIHVuZGVyc2NvcmU7IGV4cGFuZCBpdAorICAgIFU9YHNlZCAtbiAncy9eVSA9IC8vcCcgPCAiJG1mImAKKyAgICAjIEZpbmQgYWxsIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGVzLCB0aGV5IGFyZSBpbmNsdWRlZCBmaWxlcyB3aXRoCisgICAgIyAkKERFUERJUikgaW4gdGhlaXIgbmFtZXMuICBXZSBpbnZva2Ugc2VkIHR3aWNlIGJlY2F1c2UgaXQgaXMgdGhlCisgICAgIyBzaW1wbGVzdCBhcHByb2FjaCB0byBjaGFuZ2luZyAkKERFUERJUikgdG8gaXRzIGFjdHVhbCB2YWx1ZSBpbiB0aGUKKyAgICAjIGV4cGFuc2lvbi4KKyAgICBmb3IgZmlsZSBpbiBgc2VkIC1uICIKKyAgICAgIHMvXiRhbV9faW5jbHVkZSAkYW1fX3F1b3RlXCguKihERVBESVIpLipcKSRhbV9fcXVvdGUiJyQvXDEvcCcgPCIkbWYiIHwgXAorCSBzZWQgLWUgJ3MvXCQoREVQRElSKS8nIiRERVBESVIiJy9nJyAtZSAncy9cJFUvJyIkVSInL2cnYDsgZG8KKyAgICAgICMgTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzLgorICAgICAgdGVzdCAtZiAiJGRpcnBhcnQvJGZpbGUiICYmIGNvbnRpbnVlCisgICAgICBmZGlyPWBBU19ESVJOQU1FKFsiJGZpbGUiXSlgCisgICAgICBBU19NS0RJUl9QKFskZGlycGFydC8kZmRpcl0pCisgICAgICAjIGVjaG8gImNyZWF0aW5nICRkaXJwYXJ0LyRmaWxlIgorICAgICAgZWNobyAnIyBkdW1teScgPiAiJGRpcnBhcnQvJGZpbGUiCisgICAgZG9uZQorICBkb25lCit9CitdKSMgX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTCisKKworIyBBTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIG1hY3JvIHNob3VsZCBvbmx5IGJlIGludm9rZWQgb25jZSAtLSB1c2UgdmlhIEFDX1JFUVVJUkUuCisjCisjIFRoaXMgY29kZSBpcyBvbmx5IHJlcXVpcmVkIHdoZW4gYXV0b21hdGljIGRlcGVuZGVuY3kgdHJhY2tpbmcKKyMgaXMgZW5hYmxlZC4gIEZJWE1FLiAgVGhpcyBjcmVhdGVzIGVhY2ggYC5QJyBmaWxlIHRoYXQgd2Ugd2lsbAorIyBuZWVkIGluIG9yZGVyIHRvIGJvb3RzdHJhcCB0aGUgZGVwZW5kZW5jeSBoYW5kbGluZyBjb2RlLgorQUNfREVGVU4oW0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTXSwKK1tBQ19DT05GSUdfQ09NTUFORFMoW2RlcGZpbGVzXSwKKyAgICAgW3Rlc3QgeCIkQU1ERVBfVFJVRSIgIT0geCIiIHx8IF9BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10sCisgICAgIFtBTURFUF9UUlVFPSIkQU1ERVBfVFJVRSIgYWNfYXV4X2Rpcj0iJGFjX2F1eF9kaXIiXSkKK10pCmRpZmYgLS1naXQgYS9zaGFyZS9hY2xvY2FsLTEuMTEvZG1hbGxvYy5tNCBiL3NoYXJlL2FjbG9jYWwtMS4xMS9kbWFsbG9jLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0OTkwMTUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hY2xvY2FsLTEuMTEvZG1hbGxvYy5tNApAQCAtMCwwICsxLDMxIEBACisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIyAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjIyBDaGVjayBpZiAtLXdpdGgtZG1hbGxvYyB3YXMgZ2l2ZW4uICAjIworIyMgRnJvbSBGcmFuYyxvaXMgUGluYXJkICAgICAgICAgICAgICAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1CisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDMKKworQUNfREVGVU4oW0FNX1dJVEhfRE1BTExPQ10sCitbQUNfTVNHX0NIRUNLSU5HKFtpZiBtYWxsb2MgZGVidWdnaW5nIGlzIHdhbnRlZF0pCitBQ19BUkdfV0lUSChkbWFsbG9jLAorWyAgLS13aXRoLWRtYWxsb2MgICAgICAgICAgdXNlIGRtYWxsb2MsIGFzIGluCisJCQkgIGh0dHA6Ly93d3cuZG1hbGxvYy5jb20vZG1hbGxvYy50YXIuZ3pdLAorW2lmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgorICBBQ19NU0dfUkVTVUxUKHllcykKKyAgQUNfREVGSU5FKFdJVEhfRE1BTExPQywxLAorCSAgICBbRGVmaW5lIGlmIHVzaW5nIHRoZSBkbWFsbG9jIGRlYnVnZ2luZyBtYWxsb2MgcGFja2FnZV0pCisgIExJQlM9IiRMSUJTIC1sZG1hbGxvYyIKKyAgTERGTEFHUz0iJExERkxBR1MgLWciCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCitmaV0sIFtBQ19NU0dfUkVTVUxUKG5vKV0pCitdKQorCitBVV9ERUZVTihbZnBfV0lUSF9ETUFMTE9DXSwgW0FNX1dJVEhfRE1BTExPQ10pCmRpZmYgLS1naXQgYS9zaGFyZS9hY2xvY2FsLTEuMTEvZ2NqLm00IGIvc2hhcmUvYWNsb2NhbC0xLjExL2djai5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTkzMGUwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYWNsb2NhbC0xLjExL2djai5tNApAQCAtMCwwICsxLDE4IEBACisjIENoZWNrIGZvciBKYXZhIGNvbXBpbGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjIEZvciBub3cgd2Ugb25seSBoYW5kbGUgdGhlIEdOVSBjb21waWxlci4KKworIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDMsIDIwMDUsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtBTV9QUk9HX0dDSl0sWworQUNfQ0hFQ0tfVE9PTFMoR0NKLCBnY2osIGdjaikKK3Rlc3QgLXogIiRHQ0oiICYmIEFDX01TR19FUlJPUihbbm8gYWNjZXB0YWJsZSBnY2ogZm91bmQgaW4gXCRQQVRIXSkKK2lmIHRlc3QgIngke0dDSkZMQUdTLXVuc2V0fSIgPSB4dW5zZXQ7IHRoZW4KKyAgIEdDSkZMQUdTPSItZyAtTzIiCitmaQorQUNfU1VCU1QoR0NKRkxBR1MpCitfQU1fSUZfT1BUSU9OKFtuby1kZXBlbmRlbmNpZXNdLCwgW19BTV9ERVBFTkRFTkNJRVMoR0NKKV0pCitdKQpkaWZmIC0tZ2l0IGEvc2hhcmUvYWNsb2NhbC0xLjExL2hlYWRlci5tNCBiL3NoYXJlL2FjbG9jYWwtMS4xMS9oZWFkZXIubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMyOGNlYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2FjbG9jYWwtMS4xMS9oZWFkZXIubTQKQEAgLTAsMCArMSwxMiBAQAorIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgOAorCisjIEFNX0NPTkZJR19IRUFERVIgaXMgb2Jzb2xldGUuICBJdCBoYXMgYmVlbiByZXBsYWNlZCBieSBBQ19DT05GSUdfSEVBREVSUy4KK0FVX0RFRlVOKFtBTV9DT05GSUdfSEVBREVSXSwgW0FDX0NPTkZJR19IRUFERVJTKCRAKV0pCmRpZmYgLS1naXQgYS9zaGFyZS9hY2xvY2FsLTEuMTEvaW5pdC5tNCBiL3NoYXJlL2FjbG9jYWwtMS4xMS9pbml0Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NWM5YWMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hY2xvY2FsLTEuMTEvaW5pdC5tNApAQCAtMCwwICsxLDEzOCBAQAorIyBEbyBhbGwgdGhlIHdvcmsgZm9yIEF1dG9tYWtlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwKKyMgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCAxNgorCisjIFRoaXMgbWFjcm8gYWN0dWFsbHkgZG9lcyB0b28gbXVjaC4gIFNvbWUgY2hlY2tzIGFyZSBvbmx5IG5lZWRlZCBpZgorIyB5b3VyIHBhY2thZ2UgZG9lcyBjZXJ0YWluIHRoaW5ncy4gIEJ1dCB0aGlzIGlzbid0IHJlYWxseSBhIGJpZyBkZWFsLgorCisjIEFNX0lOSVRfQVVUT01BS0UoUEFDS0FHRSwgVkVSU0lPTiwgW05PLURFRklORV0pCisjIEFNX0lOSVRfQVVUT01BS0UoW09QVElPTlNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGUgY2FsbCB3aXRoIFBBQ0tBR0UgYW5kIFZFUlNJT04gYXJndW1lbnRzIGlzIHRoZSBvbGQgc3R5bGUKKyMgY2FsbCAocHJlIGF1dG9jb25mLTIuNTApLCB3aGljaCBpcyBiZWluZyBwaGFzZWQgb3V0LiAgUEFDS0FHRQorIyBhbmQgVkVSU0lPTiBzaG91bGQgbm93IGJlIHBhc3NlZCB0byBBQ19JTklUIGFuZCByZW1vdmVkIGZyb20KKyMgdGhlIGNhbGwgdG8gQU1fSU5JVF9BVVRPTUFLRS4KKyMgV2Ugc3VwcG9ydCBib3RoIGNhbGwgc3R5bGVzIGZvciB0aGUgdHJhbnNpdGlvbi4gIEFmdGVyCisjIHRoZSBuZXh0IEF1dG9tYWtlIHJlbGVhc2UsIEF1dG9jb25mIGNhbiBtYWtlIHRoZSBBQ19JTklUCisjIGFyZ3VtZW50cyBtYW5kYXRvcnksIGFuZCB0aGVuIHdlIGNhbiBkZXBlbmQgb24gYSBuZXcgQXV0b2NvbmYKKyMgcmVsZWFzZSBhbmQgZHJvcCB0aGUgb2xkIGNhbGwgc3VwcG9ydC4KK0FDX0RFRlVOKFtBTV9JTklUX0FVVE9NQUtFXSwKK1tBQ19QUkVSRVEoWzIuNjJdKWRubAorZG5sIEF1dG9jb25mIHdhbnRzIHRvIGRpc2FsbG93IEFNXyBuYW1lcy4gIFdlIGV4cGxpY2l0bHkgYWxsb3cKK2RubCB0aGUgb25lcyB3ZSBjYXJlIGFib3V0LgorbTRfcGF0dGVybl9hbGxvdyhbXkFNX1tBLVpdK0ZMQUdTJF0pZG5sCitBQ19SRVFVSVJFKFtBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfSU5TVEFMTF0pZG5sCitpZiB0ZXN0ICJgY2QgJHNyY2RpciAmJiBwd2RgIiAhPSAiYHB3ZGAiOyB0aGVuCisgICMgVXNlIC1JJChzcmNkaXIpIG9ubHkgd2hlbiAkKHNyY2RpcikgIT0gLiwgc28gdGhhdCBtYWtlJ3Mgb3V0cHV0CisgICMgaXMgbm90IHBvbGx1dGVkIHdpdGggcmVwZWF0ZWQgIi1JLiIKKyAgQUNfU1VCU1QoW2FtX19pc3JjXSwgWycgLUkkKHNyY2RpciknXSlfQU1fU1VCU1RfTk9UTUFLRShbYW1fX2lzcmNdKWRubAorICAjIHRlc3QgdG8gc2VlIGlmIHNyY2RpciBhbHJlYWR5IGNvbmZpZ3VyZWQKKyAgaWYgdGVzdCAtZiAkc3JjZGlyL2NvbmZpZy5zdGF0dXM7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoW3NvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkOyBydW4gIm1ha2UgZGlzdGNsZWFuIiB0aGVyZSBmaXJzdF0pCisgIGZpCitmaQorCisjIHRlc3Qgd2hldGhlciB3ZSBoYXZlIGN5Z3BhdGgKK2lmIHRlc3QgLXogIiRDWUdQQVRIX1ciOyB0aGVuCisgIGlmIChjeWdwYXRoIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIENZR1BBVEhfVz0nY3lncGF0aCAtdycKKyAgZWxzZQorICAgIENZR1BBVEhfVz1lY2hvCisgIGZpCitmaQorQUNfU1VCU1QoW0NZR1BBVEhfV10pCisKKyMgRGVmaW5lIHRoZSBpZGVudGl0eSBvZiB0aGUgcGFja2FnZS4KK2RubCBEaXN0aW5ndWlzaCBiZXR3ZWVuIG9sZC1zdHlsZSBhbmQgbmV3LXN0eWxlIGNhbGxzLgorbTRfaWZ2YWwoWyQyXSwKK1ttNF9pZnZhbChbJDNdLCBbX0FNX1NFVF9PUFRJT04oW25vLWRlZmluZV0pXSlkbmwKKyBBQ19TVUJTVChbUEFDS0FHRV0sIFskMV0pZG5sCisgQUNfU1VCU1QoW1ZFUlNJT05dLCBbJDJdKV0sCitbX0FNX1NFVF9PUFRJT05TKFskMV0pZG5sCitkbmwgRGlhZ25vc2Ugb2xkLXN0eWxlIEFDX0lOSVQgd2l0aCBuZXctc3R5bGUgQU1fQVVUT01BS0VfSU5JVC4KK200X2lmKG00X2lmZGVmKFtBQ19QQUNLQUdFX05BTUVdLCAxKW00X2lmZGVmKFtBQ19QQUNLQUdFX1ZFUlNJT05dLCAxKSwgMTEsLAorICBbbTRfZmF0YWwoW0FDX0lOSVQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHBhY2thZ2UgYW5kIHZlcnNpb24gYXJndW1lbnRzXSldKWRubAorIEFDX1NVQlNUKFtQQUNLQUdFXSwgWydBQ19QQUNLQUdFX1RBUk5BTUUnXSlkbmwKKyBBQ19TVUJTVChbVkVSU0lPTl0sIFsnQUNfUEFDS0FHRV9WRVJTSU9OJ10pXSlkbmwKKworX0FNX0lGX09QVElPTihbbm8tZGVmaW5lXSwsCitbQUNfREVGSU5FX1VOUVVPVEVEKFBBQ0tBR0UsICIkUEFDS0FHRSIsIFtOYW1lIG9mIHBhY2thZ2VdKQorIEFDX0RFRklORV9VTlFVT1RFRChWRVJTSU9OLCAiJFZFUlNJT04iLCBbVmVyc2lvbiBudW1iZXIgb2YgcGFja2FnZV0pXSlkbmwKKworIyBTb21lIHRvb2xzIEF1dG9tYWtlIG5lZWRzLgorQUNfUkVRVUlSRShbQU1fU0FOSVRZX0NIRUNLXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0FSR19QUk9HUkFNXSlkbmwKK0FNX01JU1NJTkdfUFJPRyhBQ0xPQ0FMLCBhY2xvY2FsLSR7YW1fX2FwaV92ZXJzaW9ufSkKK0FNX01JU1NJTkdfUFJPRyhBVVRPQ09ORiwgYXV0b2NvbmYpCitBTV9NSVNTSU5HX1BST0coQVVUT01BS0UsIGF1dG9tYWtlLSR7YW1fX2FwaV92ZXJzaW9ufSkKK0FNX01JU1NJTkdfUFJPRyhBVVRPSEVBREVSLCBhdXRvaGVhZGVyKQorQU1fTUlTU0lOR19QUk9HKE1BS0VJTkZPLCBtYWtlaW5mbykKK0FDX1JFUVVJUkUoW0FNX1BST0dfSU5TVEFMTF9TSF0pZG5sCitBQ19SRVFVSVJFKFtBTV9QUk9HX0lOU1RBTExfU1RSSVBdKWRubAorQUNfUkVRVUlSRShbQU1fUFJPR19NS0RJUl9QXSlkbmwKKyMgV2UgbmVlZCBhd2sgZm9yIHRoZSAiY2hlY2siIHRhcmdldC4gIFRoZSBzeXN0ZW0gImF3ayIgaXMgYmFkIG9uCisjIHNvbWUgcGxhdGZvcm1zLgorQUNfUkVRVUlSRShbQUNfUFJPR19BV0tdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19NQUtFX1NFVF0pZG5sCitBQ19SRVFVSVJFKFtBTV9TRVRfTEVBRElOR19ET1RdKWRubAorX0FNX0lGX09QVElPTihbdGFyLXVzdGFyXSwgW19BTV9QUk9HX1RBUihbdXN0YXJdKV0sCisJICAgICAgW19BTV9JRl9PUFRJT04oW3Rhci1wYXhdLCBbX0FNX1BST0dfVEFSKFtwYXhdKV0sCisJCQkgICAgIFtfQU1fUFJPR19UQVIoW3Y3XSldKV0pCitfQU1fSUZfT1BUSU9OKFtuby1kZXBlbmRlbmNpZXNdLCwKK1tBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19DQ10sCisJCSAgW19BTV9ERVBFTkRFTkNJRVMoQ0MpXSwKKwkJICBbZGVmaW5lKFtBQ19QUk9HX0NDXSwKKwkJCSAgZGVmbihbQUNfUFJPR19DQ10pW19BTV9ERVBFTkRFTkNJRVMoQ0MpXSldKWRubAorQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ1hYXSwKKwkJICBbX0FNX0RFUEVOREVOQ0lFUyhDWFgpXSwKKwkJICBbZGVmaW5lKFtBQ19QUk9HX0NYWF0sCisJCQkgIGRlZm4oW0FDX1BST0dfQ1hYXSlbX0FNX0RFUEVOREVOQ0lFUyhDWFgpXSldKWRubAorQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfT0JKQ10sCisJCSAgW19BTV9ERVBFTkRFTkNJRVMoT0JKQyldLAorCQkgIFtkZWZpbmUoW0FDX1BST0dfT0JKQ10sCisJCQkgIGRlZm4oW0FDX1BST0dfT0JKQ10pW19BTV9ERVBFTkRFTkNJRVMoT0JKQyldKV0pZG5sCitdKQorX0FNX0lGX09QVElPTihbc2lsZW50LXJ1bGVzXSwgW0FDX1JFUVVJUkUoW0FNX1NJTEVOVF9SVUxFU10pXSlkbmwKK2RubCBUaGUgYHBhcmFsbGVsLXRlc3RzJyBkcml2ZXIgbWF5IG5lZWQgdG8ga25vdyBhYm91dCBFWEVFWFQsIHNvIGFkZCB0aGUKK2RubCBgYW1fX0VYRUVYVCcgY29uZGl0aW9uYWwgaWYgX0FNX0NPTVBJTEVSX0VYRUVYVCB3YXMgc2Vlbi4gIFRoaXMgbWFjcm8KK2RubCBpcyBob29rZWQgb250byBfQUNfQ09NUElMRVJfRVhFRVhUIGVhcmx5LCBzZWUgYmVsb3cuCitBQ19DT05GSUdfQ09NTUFORFNfUFJFKGRubAorW200X3Byb3ZpZGVfaWYoW19BTV9DT01QSUxFUl9FWEVFWFRdLAorICBbQU1fQ09ORElUSU9OQUwoW2FtX19FWEVFWFRdLCBbdGVzdCAtbiAiJEVYRUVYVCJdKV0pXSlkbmwKK10pCisKK2RubCBIb29rIGludG8gYF9BQ19DT01QSUxFUl9FWEVFWFQnIGVhcmx5IHRvIGxlYXJuIGl0cyBleHBhbnNpb24uICBEbyBub3QKK2RubCBhZGQgdGhlIGNvbmRpdGlvbmFsIHJpZ2h0IGhlcmUsIGFzIF9BQ19DT01QSUxFUl9FWEVFWFQgbWF5IGJlIGZ1cnRoZXIKK2RubCBtYW5nbGVkIGJ5IEF1dG9jb25mIGFuZCBydW4gaW4gYSBzaGVsbCBjb25kaXRpb25hbCBzdGF0ZW1lbnQuCittNF9kZWZpbmUoW19BQ19DT01QSUxFUl9FWEVFWFRdLAorbTRfZGVmbihbX0FDX0NPTVBJTEVSX0VYRUVYVF0pW200X3Byb3ZpZGUoW19BTV9DT01QSUxFUl9FWEVFWFRdKV0pCisKKworIyBXaGVuIGNvbmZpZy5zdGF0dXMgZ2VuZXJhdGVzIGEgaGVhZGVyLCB3ZSBtdXN0IHVwZGF0ZSB0aGUgc3RhbXAtaCBmaWxlLgorIyBUaGlzIGZpbGUgcmVzaWRlcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGNvbmZpZyBoZWFkZXIKKyMgdGhhdCBpcyBnZW5lcmF0ZWQuICBUaGUgc3RhbXAgZmlsZXMgYXJlIG51bWJlcmVkIHRvIGhhdmUgZGlmZmVyZW50IG5hbWVzLgorCisjIEF1dG9jb25mIGNhbGxzIF9BQ19BTV9DT05GSUdfSEVBREVSX0hPT0sgKHdoZW4gZGVmaW5lZCkgaW4gdGhlCisjIGxvb3Agd2hlcmUgY29uZmlnLnN0YXR1cyBjcmVhdGVzIHRoZSBoZWFkZXJzLCBzbyB3ZSBjYW4gZ2VuZXJhdGUKKyMgb3VyIHN0YW1wIGZpbGVzIHRoZXJlLgorQUNfREVGVU4oW19BQ19BTV9DT05GSUdfSEVBREVSX0hPT0tdLAorWyMgQ29tcHV0ZSAkMSdzIGluZGV4IGluICRjb25maWdfaGVhZGVycy4KK19hbV9hcmc9JDEKK19hbV9zdGFtcF9jb3VudD0xCitmb3IgX2FtX2hlYWRlciBpbiAkY29uZmlnX2hlYWRlcnMgOjsgZG8KKyAgY2FzZSAkX2FtX2hlYWRlciBpbgorICAgICRfYW1fYXJnIHwgJF9hbV9hcmc6KiApCisgICAgICBicmVhayA7OworICAgICogKQorICAgICAgX2FtX3N0YW1wX2NvdW50PWBleHByICRfYW1fc3RhbXBfY291bnQgKyAxYCA7OworICBlc2FjCitkb25lCitlY2hvICJ0aW1lc3RhbXAgZm9yICRfYW1fYXJnIiA+YEFTX0RJUk5BTUUoWyIkX2FtX2FyZyJdKWAvc3RhbXAtaFtdJF9hbV9zdGFtcF9jb3VudF0pCmRpZmYgLS1naXQgYS9zaGFyZS9hY2xvY2FsLTEuMTEvaW5zdGFsbC1zaC5tNCBiL3NoYXJlL2FjbG9jYWwtMS4xMS9pbnN0YWxsLXNoLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNTM3MTUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hY2xvY2FsLTEuMTEvaW5zdGFsbC1zaC5tNApAQCAtMCwwICsxLDIxIEBACisjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMywgMjAwNSwgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBBTV9QUk9HX0lOU1RBTExfU0gKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSAkaW5zdGFsbF9zaC4KK0FDX0RFRlVOKFtBTV9QUk9HX0lOU1RBTExfU0hdLAorW0FDX1JFUVVJUkUoW0FNX0FVWF9ESVJfRVhQQU5EXSlkbmwKK2lmIHRlc3QgeCIke2luc3RhbGxfc2h9IiAhPSB4c2V0OyB0aGVuCisgIGNhc2UgJGFtX2F1eF9kaXIgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgaW5zdGFsbF9zaD0iXCR7U0hFTEx9ICckYW1fYXV4X2Rpci9pbnN0YWxsLXNoJyIgOzsKKyAgKikKKyAgICBpbnN0YWxsX3NoPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCIKKyAgZXNhYworZmkKK0FDX1NVQlNUKGluc3RhbGxfc2gpXSkKZGlmZiAtLWdpdCBhL3NoYXJlL2FjbG9jYWwtMS4xMS9sZWFkLWRvdC5tNCBiL3NoYXJlL2FjbG9jYWwtMS4xMS9sZWFkLWRvdC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODNiZmEwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYWNsb2NhbC0xLjExL2xlYWQtZG90Lm00CkBAIC0wLDAgKzEsMjEgQEAKKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCAyCisKKyMgQ2hlY2sgd2hldGhlciB0aGUgdW5kZXJseWluZyBmaWxlLXN5c3RlbSBzdXBwb3J0cyBmaWxlbmFtZXMKKyMgd2l0aCBhIGxlYWRpbmcgZG90LiAgRm9yIGluc3RhbmNlIE1TLURPUyBkb2Vzbid0LgorQUNfREVGVU4oW0FNX1NFVF9MRUFESU5HX0RPVF0sCitbcm0gLXJmIC50c3QgMj4vZGV2L251bGwKK21rZGlyIC50c3QgMj4vZGV2L251bGwKK2lmIHRlc3QgLWQgLnRzdDsgdGhlbgorICBhbV9fbGVhZGluZ19kb3Q9LgorZWxzZQorICBhbV9fbGVhZGluZ19kb3Q9XworZmkKK3JtZGlyIC50c3QgMj4vZGV2L251bGwKK0FDX1NVQlNUKFthbV9fbGVhZGluZ19kb3RdKV0pCmRpZmYgLS1naXQgYS9zaGFyZS9hY2xvY2FsLTEuMTEvbGV4Lm00IGIvc2hhcmUvYWNsb2NhbC0xLjExL2xleC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjJmNmE4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYWNsb2NhbC0xLjExL2xleC5tNApAQCAtMCwwICsxLDIyIEBACisjIyBSZXBsYWNlbWVudCBmb3IgQUNfUFJPR19MRVguICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSAgQXV0b2NvbmYgLSotCisjIyBieSBBbGV4YW5kcmUgT2xpdmEgPG9saXZhQGRjYy51bmljYW1wLmJyPgorIyBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNQorCisjIEFNX1BST0dfTEVYCisjIC0tLS0tLS0tLS0tCisjIEF1dG9jb25mIGxlYXZlcyBMRVg9OiBpZiBsZXggb3IgZmxleCBjYW4ndCBiZSBmb3VuZC4gIENoYW5nZSB0aGF0IHRvIGEKKyMgIm1pc3NpbmciIGludm9jYXRpb24sIGZvciBiZXR0ZXIgZXJyb3Igb3V0cHV0LgorQUNfREVGVU4oW0FNX1BST0dfTEVYXSwKK1tBQ19QUkVSRVEoMi41MClkbmwKK0FDX1JFUVVJUkUoW0FNX01JU1NJTkdfSEFTX1JVTl0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0xFWF0pZG5sCitpZiB0ZXN0ICIkTEVYIiA9IDo7IHRoZW4KKyAgTEVYPSR7YW1fbWlzc2luZ19ydW59ZmxleAorZmldKQpkaWZmIC0tZ2l0IGEvc2hhcmUvYWNsb2NhbC0xLjExL2xpc3BkaXIubTQgYi9zaGFyZS9hY2xvY2FsLTEuMTEvbGlzcGRpci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmMyZGFmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYWNsb2NhbC0xLjExL2xpc3BkaXIubTQKQEAgLTAsMCArMSw1NSBAQAorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyMgRW1hY3MgTElTUCBmaWxlIGhhbmRsaW5nCisjIyBGcm9tIFVscmljaCBEcmVwcGVyCisjIyBBbG1vc3QgZW50aXJlbHkgcmV3cml0dGVuIGJ5IEFsZXhhbmRyZSBPbGl2YQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwKKyMgMjAwNiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMTAKKworIyBBTV9QQVRIX0xJU1BESVIKKyMgLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQU1fUEFUSF9MSVNQRElSXSwKK1tBQ19QUkVSRVEoWzIuNjBdKWRubAorICMgSWYgc2V0IHRvIHQsIHRoYXQgbWVhbnMgd2UgYXJlIHJ1bm5pbmcgaW4gYSBzaGVsbCB1bmRlciBFbWFjcy4KKyAjIElmIHlvdSBoYXZlIGFuIEVtYWNzIG5hbWVkICJ0IiwgdGhlbiB1c2UgdGhlIGZ1bGwgcGF0aC4KKyB0ZXN0IHgiJEVNQUNTIiA9IHh0ICYmIEVNQUNTPQorIEFDX0NIRUNLX1BST0dTKFtFTUFDU10sIFtlbWFjcyB4ZW1hY3NdLCBbbm9dKQorIEFDX0FSR19WQVIoW0VNQUNTXSwgW3RoZSBFbWFjcyBlZGl0b3IgY29tbWFuZF0pCisgQUNfQVJHX1ZBUihbRU1BQ1NMT0FEUEFUSF0sIFt0aGUgRW1hY3MgbGlicmFyeSBzZWFyY2ggcGF0aF0pCisgQUNfQVJHX1dJVEgoW2xpc3BkaXJdLAorIFsgIC0td2l0aC1saXNwZGlyICAgICAgICAgIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGxpc3AgZGlyZWN0b3J5XSwKKyBbIGxpc3BkaXI9IiR3aXRodmFsIgorICAgQUNfTVNHX0NIRUNLSU5HKFt3aGVyZSAuZWxjIGZpbGVzIHNob3VsZCBnb10pCisgICBBQ19NU0dfUkVTVUxUKFskbGlzcGRpcl0pXSwKKyBbCisgQUNfQ0FDSEVfQ0hFQ0soW3doZXJlIC5lbGMgZmlsZXMgc2hvdWxkIGdvXSwgW2FtX2N2X2xpc3BkaXJdLCBbCisgICBpZiB0ZXN0ICRFTUFDUyAhPSAibm8iOyB0aGVuCisgICAgIGlmIHRlc3QgeCR7bGlzcGRpcitzZXR9ICE9IHhzZXQ7IHRoZW4KKyAgIyBJZiAkRU1BQ1MgaXNuJ3QgR05VIEVtYWNzIG9yIFhFbWFjcywgdGhpcyBjYW4gYmxvdyB1cCBwcmV0dHkgYmFkbHkKKyAgIyBTb21lIGVtYWNzZW4gd2lsbCBzdGFydCB1cCBpbiBpbnRlcmFjdGl2ZSBtb2RlLCByZXF1aXJpbmcgQy14IEMtYyB0byBleGl0LAorICAjICB3aGljaCBpcyBub24tb2J2aW91cyBmb3Igbm9uLWVtYWNzIHVzZXJzLgorICAjIFJlZGlyZWN0aW5nIC9kZXYvbnVsbCBzaG91bGQgaGVscCBhIGJpdDsgcGl0eSB3ZSBjYW4ndCBkZXRlY3QgImJyb2tlbiIKKyAgIyAgZW1hY3NlbiBlYXJsaWVyIGFuZCBhdm9pZCBydW5uaW5nIHRoaXMgYWx0b2dldGhlci4KKyAgQUNfUlVOX0xPRyhbJEVNQUNTIC1iYXRjaCAtcSAtZXZhbCAnKHdoaWxlIGxvYWQtcGF0aCAocHJpbmMgKGNvbmNhdCAoY2FyIGxvYWQtcGF0aCkgIlxuIikpIChzZXRxIGxvYWQtcGF0aCAoY2RyIGxvYWQtcGF0aCkpKScgPC9kZXYvbnVsbCA+Y29uZnRlc3Qub3V0XSkKKwlhbV9jdl9saXNwZGlyPWBzZWQgLW4gXAorICAgICAgIC1lICdzLC8kLCwnIFwKKyAgICAgICAtZSAnLy4qXC9saWJcL3gqZW1hY3NcL3NpdGUtbGlzcCQve3MsLiovbGliL1woeCplbWFjcy9zaXRlLWxpc3BcKSQsJHtsaWJkaXJ9L1wxLDtwO3E7fScgXAorICAgICAgIC1lICcvLipcL3NoYXJlXC94KmVtYWNzXC9zaXRlLWxpc3AkL3tzLC4qL3NoYXJlL1woeCplbWFjcy9zaXRlLWxpc3BcKSwke2RhdGFyb290ZGlyfS9cMSw7cDtxO30nIFwKKyAgICAgICBjb25mdGVzdC5vdXRgCisgICAgICAgcm0gY29uZnRlc3Qub3V0CisgICAgIGZpCisgICBmaQorICAgdGVzdCAteiAiJGFtX2N2X2xpc3BkaXIiICYmIGFtX2N2X2xpc3BkaXI9JyR7ZGF0YWRpcn0vZW1hY3Mvc2l0ZS1saXNwJworICBdKQorICBsaXNwZGlyPSIkYW1fY3ZfbGlzcGRpciIKK10pCitBQ19TVUJTVChbbGlzcGRpcl0pCitdKSMgQU1fUEFUSF9MSVNQRElSCisKK0FVX0RFRlVOKFt1ZF9QQVRIX0xJU1BESVJdLCBbQU1fUEFUSF9MSVNQRElSXSkKZGlmZiAtLWdpdCBhL3NoYXJlL2FjbG9jYWwtMS4xMS9tYWludGFpbmVyLm00IGIvc2hhcmUvYWNsb2NhbC0xLjExL21haW50YWluZXIubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI1NGU2NwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2FjbG9jYWwtMS4xMS9tYWludGFpbmVyLm00CkBAIC0wLDAgKzEsMzkgQEAKKyMgQWRkIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSBvcHRpb24gdG8gY29uZmlndXJlLiAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMgRnJvbSBKaW0gTWV5ZXJpbmcKKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTgsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDgKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNQorCisjIEFNX01BSU5UQUlORVJfTU9ERShbREVGQVVMVC1NT0RFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb250cm9sIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzLgorIyBEZWZhdWx0IGlzIHRvIGRpc2FibGUgdGhlbSwgdW5sZXNzIGBlbmFibGUnIGlzIHBhc3NlZCBsaXRlcmFsbHkuCisjIEZvciBzeW1tZXRyeSwgYGRpc2FibGUnIG1heSBiZSBwYXNzZWQgYXMgd2VsbC4gIEFueXdheSwgdGhlIHVzZXIKKyMgY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHdpdGggdGhlIC0tZW5hYmxlLy0tZGlzYWJsZSBzd2l0Y2guCitBQ19ERUZVTihbQU1fTUFJTlRBSU5FUl9NT0RFXSwKK1ttNF9jYXNlKG00X2RlZmF1bHQoWyQxXSwgW2Rpc2FibGVdKSwKKyAgICAgICBbZW5hYmxlXSwgW200X2RlZmluZShbYW1fbWFpbnRhaW5lcl9vdGhlcl0sIFtkaXNhYmxlXSldLAorICAgICAgIFtkaXNhYmxlXSwgW200X2RlZmluZShbYW1fbWFpbnRhaW5lcl9vdGhlcl0sIFtlbmFibGVdKV0sCisgICAgICAgW200X2RlZmluZShbYW1fbWFpbnRhaW5lcl9vdGhlcl0sIFtlbmFibGVdKQorICAgICAgICBtNF93YXJuKFtzeW50YXhdLCBbdW5leHBlY3RlZCBhcmd1bWVudCB0byBBTUAmdEBfTUFJTlRBSU5FUl9NT0RFOiAkMV0pXSkKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBhbV9tYWludGFpbmVyX290aGVyIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzXSkKKyAgZG5sIG1haW50YWluZXItbW9kZSdzIGRlZmF1bHQgaXMgJ2Rpc2FibGUnIHVubGVzcyAnZW5hYmxlJyBpcyBwYXNzZWQKKyAgQUNfQVJHX0VOQUJMRShbbWFpbnRhaW5lci1tb2RlXSwKK1sgIC0tXVthbV9tYWludGFpbmVyX290aGVyXVstbWFpbnRhaW5lci1tb2RlICBhbV9tYWludGFpbmVyX290aGVyIG1ha2UgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBub3QgdXNlZnVsCisJCQkgIChhbmQgc29tZXRpbWVzIGNvbmZ1c2luZykgdG8gdGhlIGNhc3VhbCBpbnN0YWxsZXJdLAorICAgICAgW1VTRV9NQUlOVEFJTkVSX01PREU9JGVuYWJsZXZhbF0sCisgICAgICBbVVNFX01BSU5UQUlORVJfTU9ERT1dbTRfaWYoYW1fbWFpbnRhaW5lcl9vdGhlciwgW2VuYWJsZV0sIFtub10sIFt5ZXNdKSkKKyAgQUNfTVNHX1JFU1VMVChbJFVTRV9NQUlOVEFJTkVSX01PREVdKQorICBBTV9DT05ESVRJT05BTChbTUFJTlRBSU5FUl9NT0RFXSwgW3Rlc3QgJFVTRV9NQUlOVEFJTkVSX01PREUgPSB5ZXNdKQorICBNQUlOVD0kTUFJTlRBSU5FUl9NT0RFX1RSVUUKKyAgQUNfU1VCU1QoW01BSU5UXSlkbmwKK10KKykKKworQVVfREVGVU4oW2ptX01BSU5UQUlORVJfTU9ERV0sIFtBTV9NQUlOVEFJTkVSX01PREVdKQpkaWZmIC0tZ2l0IGEvc2hhcmUvYWNsb2NhbC0xLjExL21ha2UubTQgYi9zaGFyZS9hY2xvY2FsLTEuMTEvbWFrZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGQxNWI5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYWNsb2NhbC0xLjExL21ha2UubTQKQEAgLTAsMCArMSw1MSBAQAorIyBDaGVjayB0byBzZWUgaG93ICdtYWtlJyB0cmVhdHMgaW5jbHVkZXMuCSAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDUsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDQKKworIyBBTV9NQUtFX0lOQ0xVREUoKQorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0byBzZWUgaG93IG1ha2UgdHJlYXRzIGluY2x1ZGVzLgorQUNfREVGVU4oW0FNX01BS0VfSU5DTFVERV0sCitbYW1fbWFrZT0ke01BS0UtbWFrZX0KK2NhdCA+IGNvbmZpbmMgPDwgJ0VORCcKK2FtX19kb2l0OgorCUBlY2hvIHRoaXMgaXMgdGhlIGFtX19kb2l0IHRhcmdldAorLlBIT05ZOiBhbV9fZG9pdAorRU5ECisjIElmIHdlIGRvbid0IGZpbmQgYW4gaW5jbHVkZSBkaXJlY3RpdmUsIGp1c3QgY29tbWVudCBvdXQgdGhlIGNvZGUuCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzdHlsZSBvZiBpbmNsdWRlIHVzZWQgYnkgJGFtX21ha2VdKQorYW1fX2luY2x1ZGU9IiMiCithbV9fcXVvdGU9CitfYW1fcmVzdWx0PW5vbmUKKyMgRmlyc3QgdHJ5IEdOVSBtYWtlIHN0eWxlIGluY2x1ZGUuCitlY2hvICJpbmNsdWRlIGNvbmZpbmMiID4gY29uZm1mCisjIElnbm9yZSBhbGwga2luZHMgb2YgYWRkaXRpb25hbCBvdXRwdXQgZnJvbSBgbWFrZScuCitjYXNlIGAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCBpbiAjKAorKnRoZVwgYW1fX2RvaXRcIHRhcmdldCopCisgIGFtX19pbmNsdWRlPWluY2x1ZGUKKyAgYW1fX3F1b3RlPQorICBfYW1fcmVzdWx0PUdOVQorICA7OworZXNhYworIyBOb3cgdHJ5IEJTRCBtYWtlIHN0eWxlIGluY2x1ZGUuCitpZiB0ZXN0ICIkYW1fX2luY2x1ZGUiID0gIiMiOyB0aGVuCisgICBlY2hvICcuaW5jbHVkZSAiY29uZmluYyInID4gY29uZm1mCisgICBjYXNlIGAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCBpbiAjKAorICAgKnRoZVwgYW1fX2RvaXRcIHRhcmdldCopCisgICAgIGFtX19pbmNsdWRlPS5pbmNsdWRlCisgICAgIGFtX19xdW90ZT0iXCIiCisgICAgIF9hbV9yZXN1bHQ9QlNECisgICAgIDs7CisgICBlc2FjCitmaQorQUNfU1VCU1QoW2FtX19pbmNsdWRlXSkKK0FDX1NVQlNUKFthbV9fcXVvdGVdKQorQUNfTVNHX1JFU1VMVChbJF9hbV9yZXN1bHRdKQorcm0gLWYgY29uZmluYyBjb25mbWYKK10pCmRpZmYgLS1naXQgYS9zaGFyZS9hY2xvY2FsLTEuMTEvbWludXNvLm00IGIvc2hhcmUvYWNsb2NhbC0xLjExL21pbnVzby5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGIxNjIwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYWNsb2NhbC0xLjExL21pbnVzby5tNApAQCAtMCwwICsxLDM1IEBACisjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwOAorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA2CisKKyMgQU1fUFJPR19DQ19DX08KKyMgLS0tLS0tLS0tLS0tLS0KKyMgTGlrZSBBQ19QUk9HX0NDX0NfTywgYnV0IGNoYW5nZWQgZm9yIGF1dG9tYWtlLgorQUNfREVGVU4oW0FNX1BST0dfQ0NfQ19PXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NDX0NfT10pZG5sCitBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCitBQ19SRVFVSVJFX0FVWF9GSUxFKFtjb21waWxlXSlkbmwKKyMgRklYTUU6IHdlIHJlbHkgb24gdGhlIGNhY2hlIHZhcmlhYmxlIG5hbWUgYmVjYXVzZQorIyB0aGVyZSBpcyBubyBvdGhlciB3YXkuCitzZXQgZHVtbXkgJENDCithbV9jYz1gZWNobyAkWzJdIHwgc2VkIFsncy9bXmEtekEtWjAtOV9dL18vZztzL15bMC05XS9fLyddYAorZXZhbCBhbV90PVwkYWNfY3ZfcHJvZ19jY18ke2FtX2NjfV9jX28KK2lmIHRlc3QgIiRhbV90IiAhPSB5ZXM7IHRoZW4KKyAgICMgTG9zaW5nIGNvbXBpbGVyLCBzbyBvdmVycmlkZSB3aXRoIHRoZSBzY3JpcHQuCisgICAjIEZJWE1FOiBJdCBpcyB3cm9uZyB0byByZXdyaXRlIENDLgorICAgIyBCdXQgaWYgd2UgZG9uJ3QgdGhlbiB3ZSBnZXQgaW50byB0cm91YmxlIG9mIG9uZSBzb3J0IG9yIGFub3RoZXIuCisgICAjIEEgbG9uZ2VyLXRlcm0gZml4IHdvdWxkIGJlIHRvIGhhdmUgYXV0b21ha2UgdXNlIGFtX19DQyBpbiB0aGlzIGNhc2UsCisgICAjIGFuZCB0aGVuIHdlIGNvdWxkIHNldCBhbV9fQ0M9IlwkKHRvcF9zcmNkaXIpL2NvbXBpbGUgXCQoQ0MpIgorICAgQ0M9IiRhbV9hdXhfZGlyL2NvbXBpbGUgJENDIgorZmkKK2RubCBNYWtlIHN1cmUgQUNfUFJPR19DQyBpcyBuZXZlciBjYWxsZWQgYWdhaW4sIG9yIGl0IHdpbGwgb3ZlcnJpZGUgb3VyCitkbmwgc2V0dGluZyBvZiBDQy4KK200X2RlZmluZShbQUNfUFJPR19DQ10sCisgICAgICAgICAgW200X2ZhdGFsKFtBQ19QUk9HX0NDIGNhbm5vdCBiZSBjYWxsZWQgYWZ0ZXIgQU1fUFJPR19DQ19DX09dKV0pCitdKQpkaWZmIC0tZ2l0IGEvc2hhcmUvYWNsb2NhbC0xLjExL21pc3NpbmcubTQgYi9zaGFyZS9hY2xvY2FsLTEuMTEvbWlzc2luZy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzYzOTljCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYWNsb2NhbC0xLjExL21pc3NpbmcubTQKQEAgLTAsMCArMSw0MiBAQAorIyBGYWtlIHRoZSBleGlzdGVuY2Ugb2YgcHJvZ3JhbXMgdGhhdCBHTlUgbWFpbnRhaW5lcnMgdXNlLiAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5NywgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwOAorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA2CisKKyMgQU1fTUlTU0lOR19QUk9HKE5BTUUsIFBST0dSQU0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FNX01JU1NJTkdfUFJPR10sCitbQUNfUkVRVUlSRShbQU1fTUlTU0lOR19IQVNfUlVOXSkKKyQxPSR7JDEtIiR7YW1fbWlzc2luZ19ydW59JDIifQorQUNfU1VCU1QoJDEpXSkKKworCisjIEFNX01JU1NJTkdfSEFTX1JVTgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIE1JU1NJTkcgaWYgbm90IGRlZmluZWQgc28gZmFyIGFuZCB0ZXN0IGlmIGl0IHN1cHBvcnRzIC0tcnVuLgorIyBJZiBpdCBkb2VzLCBzZXQgYW1fbWlzc2luZ19ydW4gdG8gdXNlIGl0LCBvdGhlcndpc2UsIHRvIG5vdGhpbmcuCitBQ19ERUZVTihbQU1fTUlTU0lOR19IQVNfUlVOXSwKK1tBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCitBQ19SRVFVSVJFX0FVWF9GSUxFKFttaXNzaW5nXSlkbmwKK2lmIHRlc3QgeCIke01JU1NJTkcrc2V0fSIgIT0geHNldDsgdGhlbgorICBjYXNlICRhbV9hdXhfZGlyIGluCisgICpcICogfCAqXAkqKQorICAgIE1JU1NJTkc9Ilwke1NIRUxMfSBcIiRhbV9hdXhfZGlyL21pc3NpbmdcIiIgOzsKKyAgKikKKyAgICBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIgOzsKKyAgZXNhYworZmkKKyMgVXNlIGV2YWwgdG8gZXhwYW5kICRTSEVMTAoraWYgZXZhbCAiJE1JU1NJTkcgLS1ydW4gdHJ1ZSI7IHRoZW4KKyAgYW1fbWlzc2luZ19ydW49IiRNSVNTSU5HIC0tcnVuICIKK2Vsc2UKKyAgYW1fbWlzc2luZ19ydW49CisgIEFDX01TR19XQVJOKFtgbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZ10pCitmaQorXSkKZGlmZiAtLWdpdCBhL3NoYXJlL2FjbG9jYWwtMS4xMS9ta2RpcnAubTQgYi9zaGFyZS9hY2xvY2FsLTEuMTEvbWtkaXJwLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlOGE5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hY2xvY2FsLTEuMTEvbWtkaXJwLm00CkBAIC0wLDAgKzEsMjYgQEAKKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEFNX1BST0dfTUtESVJfUAorIyAtLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGBta2RpciAtcCcuCitBQ19ERUZVTihbQU1fUFJPR19NS0RJUl9QXSwKK1tBQ19QUkVSRVEoWzIuNjBdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19NS0RJUl9QXSlkbmwKK2RubCBBdXRvbWFrZSAxLjggdG8gMS45LjYgdXNlZCB0byBkZWZpbmUgbWtkaXJfcC4gIFdlIG5vdyB1c2UgTUtESVJfUCwKK2RubCB3aGlsZSBrZWVwaW5nIGEgZGVmaW5pdGlvbiBvZiBta2Rpcl9wIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorZG5sIEBNS0RJUl9QQCBpcyBtYWdpYzogQUNfT1VUUFVUIGFkanVzdHMgaXRzIHZhbHVlIGZvciBlYWNoIE1ha2VmaWxlLgorZG5sIEhvd2V2ZXIgd2UgY2Fubm90IGRlZmluZSBta2Rpcl9wIGFzICQoTUtESVJfUCkgZm9yIHRoZSBzYWtlIG9mCitkbmwgTWFrZWZpbGUuaW5zIHRoYXQgZG8gbm90IGRlZmluZSBNS0RJUl9QLCBzbyB3ZSBkbyBvdXIgb3duCitkbmwgYWRqdXN0bWVudCB1c2luZyB0b3BfYnVpbGRkaXIgKHdoaWNoIGlzIGRlZmluZWQgbW9yZSBvZnRlbiB0aGFuCitkbmwgTUtESVJfUCkuCitBQ19TVUJTVChbbWtkaXJfcF0sIFsiJE1LRElSX1AiXSlkbmwKK2Nhc2UgJG1rZGlyX3AgaW4KKyAgW1tcXC8kXV0qIHwgPzpbW1xcL11dKikgOzsKKyAgKi8qKSBta2Rpcl9wPSJcJCh0b3BfYnVpbGRkaXIpLyRta2Rpcl9wIiA7OworZXNhYworXSkKZGlmZiAtLWdpdCBhL3NoYXJlL2FjbG9jYWwtMS4xMS9tdWx0aS5tNCBiL3NoYXJlL2FjbG9jYWwtMS4xMS9tdWx0aS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODQxNzY3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYWNsb2NhbC0xLjExL211bHRpLm00CkBAIC0wLDAgKzEsNjUgQEAKKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2CisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDYKKworIyBBTV9FTkFCTEVfTVVMVElMSUIoW01BS0VGSUxFXSwgW1JFTC1UTy1UT1AtU1JDRElSXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFkZCAtLWVuYWJsZS1tdWx0aWxpYiB0byBjb25maWd1cmUuCitBQ19ERUZVTihbQU1fRU5BQkxFX01VTFRJTElCXSwKK1sjIERlZmF1bHQgdG8gLS1lbmFibGUtbXVsdGlsaWIKK0FDX0FSR19FTkFCTEUobXVsdGlsaWIsCitbICAtLWVuYWJsZS1tdWx0aWxpYiAgICAgICBidWlsZCBtYW55IGxpYnJhcnkgdmVyc2lvbnMgKGRlZmF1bHQpXSwKK1tjYXNlICIkZW5hYmxldmFsIiBpbgorICB5ZXMpIG11bHRpbGliPXllcyA7OworICBubykgIG11bHRpbGliPW5vIDs7CisgICopICAgQUNfTVNHX0VSUk9SKFtiYWQgdmFsdWUgJGVuYWJsZXZhbCBmb3IgbXVsdGlsaWIgb3B0aW9uXSkgOzsKKyBlc2FjXSwKKwkgICAgICBbbXVsdGlsaWI9eWVzXSkKKworIyBXZSBtYXkgZ2V0IG90aGVyIG9wdGlvbnMgd2hpY2ggd2UgbGVhdmUgdW5kb2N1bWVudGVkOgorIyAtLXdpdGgtdGFyZ2V0LXN1YmRpciwgLS13aXRoLW11bHRpc3JjdG9wLCAtLXdpdGgtbXVsdGlzdWJkaXIKKyMgU2VlIGNvbmZpZy1tbC5pbiBpZiB5b3Ugd2FudCB0aGUgZ29yeSBkZXRhaWxzLgorCitpZiB0ZXN0ICIkc3JjZGlyIiA9ICIuIjsgdGhlbgorICBpZiB0ZXN0ICIkd2l0aF90YXJnZXRfc3ViZGlyIiAhPSAiLiI7IHRoZW4KKyAgICBtdWx0aV9iYXNlZGlyPSIkc3JjZGlyLyR3aXRoX211bHRpc3JjdG9wLi4vJDIiCisgIGVsc2UKKyAgICBtdWx0aV9iYXNlZGlyPSIkc3JjZGlyLyR3aXRoX211bHRpc3JjdG9wJDIiCisgIGZpCitlbHNlCisgIG11bHRpX2Jhc2VkaXI9IiRzcmNkaXIvJDIiCitmaQorQUNfU1VCU1QobXVsdGlfYmFzZWRpcikKKworIyBFdmVuIGlmIHRoZSBkZWZhdWx0IG11bHRpbGliIGlzIG5vdCBhIGNyb3NzIGNvbXBpbGF0aW9uLAorIyBpdCBtYXkgYmUgdGhhdCBzb21lIG9mIHRoZSBvdGhlciBtdWx0aWxpYnMgYXJlLgoraWYgdGVzdCAkY3Jvc3NfY29tcGlsaW5nID0gbm8gJiYgdGVzdCAkbXVsdGlsaWIgPSB5ZXMgXAorICAgJiYgdGVzdCAieCR7d2l0aF9tdWx0aXN1YmRpcn0iICE9IHggOyB0aGVuCisgICBjcm9zc19jb21waWxpbmc9bWF5YmUKK2ZpCisKK0FDX09VVFBVVF9DT01NQU5EUyhbCisjIE9ubHkgYWRkIG11bHRpbGliIHN1cHBvcnQgY29kZSBpZiB3ZSBqdXN0IHJlYnVpbHQgdGhlIHRvcC1sZXZlbAorIyBNYWtlZmlsZS4KK2Nhc2UgIiAkQ09ORklHX0ZJTEVTICIgaW4KKyAqIiBdbTRfZGVmYXVsdChbJDFdLE1ha2VmaWxlKVsgIiopCisgICBhY19maWxlPV1tNF9kZWZhdWx0KFskMV0sTWFrZWZpbGUpWyAuICR7bXVsdGlfYmFzZWRpcn0vY29uZmlnLW1sLmluCisgICA7OworZXNhY10sCisJCSAgIFsKK3NyY2Rpcj0iJHNyY2RpciIKK2hvc3Q9IiRob3N0IgordGFyZ2V0PSIkdGFyZ2V0Igord2l0aF9tdWx0aXN1YmRpcj0iJHdpdGhfbXVsdGlzdWJkaXIiCit3aXRoX211bHRpc3JjdG9wPSIkd2l0aF9tdWx0aXNyY3RvcCIKK3dpdGhfdGFyZ2V0X3N1YmRpcj0iJHdpdGhfdGFyZ2V0X3N1YmRpciIKK2FjX2NvbmZpZ3VyZV9hcmdzPSIke211bHRpbGliX2FyZ30gJHthY19jb25maWd1cmVfYXJnc30iCittdWx0aV9iYXNlZGlyPSIkbXVsdGlfYmFzZWRpciIKK0NPTkZJR19TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorQ0M9IiRDQyJdKV0pZG5sCmRpZmYgLS1naXQgYS9zaGFyZS9hY2xvY2FsLTEuMTEvb2Jzb2wtZ3QubTQgYi9zaGFyZS9hY2xvY2FsLTEuMTEvb2Jzb2wtZ3QubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM4MGM2ZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2FjbG9jYWwtMS4xMS9vYnNvbC1ndC5tNApAQCAtMCwwICsxLDEyIEBACisjIFN1cHBvcnQgZm9yIG9ic29sZXRlIEdldHRleHQgbWFjcm8uICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCAyCisKKyMgU2VlIGNvbW1lbnQgaW4gb2Jzb2xldGUubTQuCitBVV9ERUZVTihbdWRfR05VX0dFVFRFWFRdLCBbQU1fR05VX0dFVFRFWFRdKQpkaWZmIC0tZ2l0IGEvc2hhcmUvYWNsb2NhbC0xLjExL29ic29sLWx0Lm00IGIvc2hhcmUvYWNsb2NhbC0xLjExL29ic29sLWx0Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYzRkN2QKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hY2xvY2FsLTEuMTEvb2Jzb2wtbHQubTQKQEAgLTAsMCArMSwxMiBAQAorIyBTdXBwb3J0IGZvciBvYnNvbGV0ZSBMaWJ0b29sIG1hY3JvLiAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMgorCisjIFNlZSBjb21tZW50IGluIG9ic29sZXRlLm00LgorQVVfREVGVU4oW2dtX1BST0dfTElCVE9PTF0sIFtBTV9QUk9HX0xJQlRPT0xdKQpkaWZmIC0tZ2l0IGEvc2hhcmUvYWNsb2NhbC0xLjExL29ic29sZXRlLm00IGIvc2hhcmUvYWNsb2NhbC0xLjExL29ic29sZXRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZDFkYjcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hY2xvY2FsLTEuMTEvb2Jzb2xldGUubTQKQEAgLTAsMCArMSwzNyBAQAorIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDIKKworIyBPYnNvbGV0ZSBBdXRvbWFrZSBtYWNyb3MuCisKKyMgV2UgcHV0IGhlcmUgb25seSB0aGUgbWFjcm9zIHdob3NlIHN1YnN0aXR1dGlvbiBpcyBub3QgYW4gQXV0b21ha2UKKyMgbWFjcm87IG90aGVyd2lzZSBpbmNsdWRpbmcgdGhpcyBmaWxlIHdvdWxkIHRyaWdnZXIgZGVwZW5kZW5jaWVzIGZvcgorIyBhbGwgdGhlIHN1YnN0aXR1dGlvbnMuICBHZW5lcmFsbHksIG9ic29sZXRlIEF1dG9tYWtlIG1hY3JvcyBhcmUKKyMgYmV0dGVyIEFVX0RFRlVOZWQgaW4gdGhlIHNhbWUgZmlsZSBhcyB0aGVpciByZXBsYWNlbWVudCwgb3IgYWxvbmUgaW4KKyMgYSBzZXBhcmF0ZSBmaWxlIChzZWUgb2Jzb2wtZ3QubTQgb3Igb2Jzb2wtbHQubTQgZm9yIGluc3RhbmNlKS4KKworQVVfREVGVU4oW0FDX0ZFQVRVUkVfQ1RZUEVdLCAgICAgW0FDX0hFQURFUl9TVERDXSkKK0FVX0RFRlVOKFtBQ19GRUFUVVJFX0VSUk5PXSwgICAgIFtBQ19SRVBMQUNFX0ZVTkNTKFtzdHJlcnJvcl0pXSkKK0FVX0RFRlVOKFtBTV9DWUdXSU4zMl0sCSAgICAgICAgIFtBQ19DWUdXSU5dKQorQVVfREVGVU4oW0FNX0VYRUVYVF0sICAgICAgICAgICAgW0FDX0VYRUVYVF0pCitBVV9ERUZVTihbQU1fRlVOQ19NS1RJTUVdLCAgICAgICBbQUNfRlVOQ19NS1RJTUVdKQorQVVfREVGVU4oW0FNX0hFQURFUl9USU9DR1dJTlNaX05FRURTX1NZU19JT0NUTF0sCisJCQkJIFtBQ19IRUFERVJfVElPQ0dXSU5TWl0pCitBVV9ERUZVTihbQU1fTUlOR1czMl0sICAgICAgICAgICBbQUNfTUlOR1czMl0pCitBVV9ERUZVTihbQU1fUFJPR19JTlNUQUxMXSwgICAgICBbQUNfUFJPR19JTlNUQUxMXSkKK0FVX0RFRlVOKFtBTV9TQU5JVFlfQ0hFQ0tfQ0NdLCAgIFtBQ19QUk9HX0NDXSkKK0FVX0RFRlVOKFtBTV9TWVNfUE9TSVhfVEVSTUlPU10sIFtBQ19TWVNfUE9TSVhfVEVSTUlPU10pCitBVV9ERUZVTihbZnBfRlVOQ19GTk1BVENIXSwgICAgICBbQUNfRlVOQ19GTk1BVENIXSkKK0FVX0RFRlVOKFtmcF9QUk9HX0lOU1RBTExdLCAgICAgIFtBQ19QUk9HX0lOU1RBTExdKQorQVVfREVGVU4oW21kX1RZUEVfUFRSRElGRl9UXSwgICAgW0FDX0NIRUNLX1RZUEVTKFtwdHJkaWZmX3RdKV0pCisKKyMgRG9uJ3Qga25vdyBob3cgdG8gdHJhbnNsYXRlIHRoZXNlLgorIyBJZiB1c2VkLCBBdXRvY29uZiB3aWxsIGNvbXBsYWluIHRoYXQgdGhleSBhcmUgcG9zc2libHkgdW5leHBlbmRlZDsKKyMgdGhpcyBzZWVtcyBhIGdvb2QgZW5vdWdoIGVycm9yIG1lc3NhZ2UuCisjIEFDX0ZFQVRVUkVfRVhJVAorIyBBQ19TWVNURU1fSEVBREVSCmRpZmYgLS1naXQgYS9zaGFyZS9hY2xvY2FsLTEuMTEvb3B0aW9ucy5tNCBiL3NoYXJlL2FjbG9jYWwtMS4xMS9vcHRpb25zLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNTAxN2UKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hY2xvY2FsLTEuMTEvb3B0aW9ucy5tNApAQCAtMCwwICsxLDMyIEBACisjIEhlbHBlciBmdW5jdGlvbnMgZm9yIG9wdGlvbiBoYW5kbGluZy4gICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1LCAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA0CisKKyMgX0FNX01BTkdMRV9PUFRJT04oTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfQU1fTUFOR0xFX09QVElPTl0sCitbW19BTV9PUFRJT05fXW00X2JwYXRzdWJzdCgkMSwgW1teYS16QS1aMC05X11dLCBbX10pXSkKKworIyBfQU1fU0VUX09QVElPTihOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IG9wdGlvbiBOQU1FLiAgUHJlc2VudGx5IHRoYXQgb25seSBtZWFucyBkZWZpbmluZyBhIGZsYWcgZm9yIHRoaXMgb3B0aW9uLgorQUNfREVGVU4oW19BTV9TRVRfT1BUSU9OXSwKK1ttNF9kZWZpbmUoX0FNX01BTkdMRV9PUFRJT04oWyQxXSksIDEpXSkKKworIyBfQU1fU0VUX09QVElPTlMoT1BUSU9OUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPUFRJT05TIGlzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgQXV0b21ha2Ugb3B0aW9ucy4KK0FDX0RFRlVOKFtfQU1fU0VUX09QVElPTlNdLAorW200X2ZvcmVhY2hfdyhbX0FNX09wdGlvbl0sIFskMV0sIFtfQU1fU0VUX09QVElPTihfQU1fT3B0aW9uKV0pXSkKKworIyBfQU1fSUZfT1BUSU9OKE9QVElPTiwgSUYtU0VULCBbSUYtTk9ULVNFVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhlY3V0ZSBJRi1TRVQgaWYgT1BUSU9OIGlzIHNldCwgSUYtTk9ULVNFVCBvdGhlcndpc2UuCitBQ19ERUZVTihbX0FNX0lGX09QVElPTl0sCitbbTRfaWZzZXQoX0FNX01BTkdMRV9PUFRJT04oWyQxXSksIFskMl0sIFskM10pXSkKZGlmZiAtLWdpdCBhL3NoYXJlL2FjbG9jYWwtMS4xMS9wcm90b3MubTQgYi9zaGFyZS9hY2xvY2FsLTEuMTEvcHJvdG9zLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNzE5M2IKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hY2xvY2FsLTEuMTEvcHJvdG9zLm00CkBAIC0wLDAgKzEsMjkgQEAKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMjIENoZWNrIGZvciBmdW5jdGlvbiBwcm90b3R5cGVzLiAgIyMKKyMjIEZyb20gRnJhbmMsb2lzIFBpbmFyZCAgICAgICAgICAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1LCAyMDA2CisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDUKKworQUNfREVGVU4oW0FNX0NfUFJPVE9UWVBFU10sCitbQUNfUkVRVUlSRShbQUNfQ19QUk9UT1RZUEVTXSkKK2lmIHRlc3QgIiRhY19jdl9wcm9nX2NjX3N0ZGMiICE9IG5vOyB0aGVuCisgIFU9IEFOU0kyS05SPQorZWxzZQorICBVPV8gQU5TSTJLTlI9Li9hbnNpMmtucgorZmkKKyMgRW5zdXJlIHNvbWUgY2hlY2tzIG5lZWRlZCBieSBhbnNpMmtuciBpdHNlbGYuCitBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCitBQ19DSEVDS19IRUFERVJTKFtzdHJpbmcuaF0pCitBQ19TVUJTVChbVV0pZG5sCitBQ19TVUJTVChbQU5TSTJLTlJdKWRubAorX0FNX1NVQlNUX05PVE1BS0UoW0FOU0kyS05SXSlkbmwKK10pCisKK0FVX0RFRlVOKFtmcF9DX1BST1RPVFlQRVNdLCBbQU1fQ19QUk9UT1RZUEVTXSkKZGlmZiAtLWdpdCBhL3NoYXJlL2FjbG9jYWwtMS4xMS9weXRob24ubTQgYi9zaGFyZS9hY2xvY2FsLTEuMTEvcHl0aG9uLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZGU5YzMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hY2xvY2FsLTEuMTEvcHl0aG9uLm00CkBAIC0wLDAgKzEsMjA5IEBACisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjIyBQeXRob24gZmlsZSBoYW5kbGluZworIyMgRnJvbSBBbmRyZXcgRGFsa2UKKyMjIFVwZGF0ZWQgYnkgSmFtZXMgSGVuc3RyaWRnZQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwOCwgMjAwOQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEFNX1BBVEhfUFlUSE9OKFtNSU5JTVVNLVZFUlNJT05dLCBbQUNUSU9OLUlGLUZPVU5EXSwgW0FDVElPTi1JRi1OT1QtRk9VTkRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWRkcyBzdXBwb3J0IGZvciBkaXN0cmlidXRpbmcgUHl0aG9uIG1vZHVsZXMgYW5kIHBhY2thZ2VzLiAgVG8KKyMgaW5zdGFsbCBtb2R1bGVzLCBjb3B5IHRoZW0gdG8gJChweXRob25kaXIpLCB1c2luZyB0aGUgcHl0aG9uX1BZVEhPTgorIyBhdXRvbWFrZSB2YXJpYWJsZS4gIFRvIGluc3RhbGwgYSBwYWNrYWdlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUKKyMgYXV0b21ha2UgcGFja2FnZSwgaW5zdGFsbCB0byAkKHBrZ3B5dGhvbmRpciksIG9yIHVzZSB0aGUKKyMgcGtncHl0aG9uX1BZVEhPTiBhdXRvbWFrZSB2YXJpYWJsZS4KKyMKKyMgVGhlIHZhcmlhYmxlcyAkKHB5ZXhlY2RpcikgYW5kICQocGtncHlleGVjZGlyKSBhcmUgcHJvdmlkZWQgYXMKKyMgbG9jYXRpb25zIHRvIGluc3RhbGwgcHl0aG9uIGV4dGVuc2lvbiBtb2R1bGVzIChzaGFyZWQgbGlicmFyaWVzKS4KKyMgQW5vdGhlciBtYWNybyBpcyByZXF1aXJlZCB0byBmaW5kIHRoZSBhcHByb3ByaWF0ZSBmbGFncyB0byBjb21waWxlCisjIGV4dGVuc2lvbiBtb2R1bGVzLgorIworIyBJZiB5b3VyIHBhY2thZ2UgaXMgY29uZmlndXJlZCB3aXRoIGEgZGlmZmVyZW50IHByZWZpeCB0byBweXRob24sCisjIHVzZXJzIHdpbGwgaGF2ZSB0byBhZGQgdGhlIGluc3RhbGwgZGlyZWN0b3J5IHRvIHRoZSBQWVRIT05QQVRICisjIGVudmlyb25tZW50IHZhcmlhYmxlLCBvciBjcmVhdGUgYSAucHRoIGZpbGUgKHNlZSB0aGUgcHl0aG9uCisjIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMpLgorIworIyBJZiB0aGUgTUlOSU1VTS1WRVJTSU9OIGFyZ3VtZW50IGlzIHBhc3NlZCwgQU1fUEFUSF9QWVRIT04gd2lsbAorIyBjYXVzZSBhbiBlcnJvciBpZiB0aGUgdmVyc2lvbiBvZiBweXRob24gaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0KKyMgZG9lc24ndCBtZWV0IHRoZSByZXF1aXJlbWVudC4gIE1JTklNVU0tVkVSU0lPTiBzaG91bGQgY29uc2lzdCBvZgorIyBudW1iZXJzIGFuZCBkb3RzIG9ubHkuCitBQ19ERUZVTihbQU1fUEFUSF9QWVRIT05dLAorIFsKKyAgZG5sIEZpbmQgYSBQeXRob24gaW50ZXJwcmV0ZXIuICBQeXRob24gdmVyc2lvbnMgcHJpb3IgdG8gMi4wIGFyZSBub3QKKyAgZG5sIHN1cHBvcnRlZC4gKDIuMCB3YXMgcmVsZWFzZWQgb24gT2N0b2JlciAxNiwgMjAwMCkuCisgIG00X2RlZmluZV9kZWZhdWx0KFtfQU1fUFlUSE9OX0lOVEVSUFJFVEVSX0xJU1RdLAorICAgICAgICAgICAgICAgICAgICBbcHl0aG9uIHB5dGhvbjIgcHl0aG9uMyBweXRob24zLjAgcHl0aG9uMi41IHB5dGhvbjIuNCBweXRob24yLjMgcHl0aG9uMi4yIGRubAorcHl0aG9uMi4xIHB5dGhvbjIuMF0pCisKKyAgbTRfaWYoWyQxXSxbXSxbCisgICAgZG5sIE5vIHZlcnNpb24gY2hlY2sgaXMgbmVlZGVkLgorICAgICMgRmluZCBhbnkgUHl0aG9uIGludGVycHJldGVyLgorICAgIGlmIHRlc3QgLXogIiRQWVRIT04iOyB0aGVuCisgICAgICBBQ19QQVRIX1BST0dTKFtQWVRIT05dLCBfQU1fUFlUSE9OX0lOVEVSUFJFVEVSX0xJU1QsIDopCisgICAgZmkKKyAgICBhbV9kaXNwbGF5X1BZVEhPTj1weXRob24KKyAgXSwgWworICAgIGRubCBBIHZlcnNpb24gY2hlY2sgaXMgbmVlZGVkLgorICAgIGlmIHRlc3QgLW4gIiRQWVRIT04iOyB0aGVuCisgICAgICAjIElmIHRoZSB1c2VyIHNldCAkUFlUSE9OLCB1c2UgaXQgYW5kIGRvbid0IHNlYXJjaCBzb21ldGhpbmcgZWxzZS4KKyAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciAkUFlUSE9OIHZlcnNpb24gPj0gJDFdKQorICAgICAgQU1fUFlUSE9OX0NIRUNLX1ZFUlNJT04oWyRQWVRIT05dLCBbJDFdLAorCQkJICAgICAgW0FDX01TR19SRVNVTFQoeWVzKV0sCisJCQkgICAgICBbQUNfTVNHX0VSUk9SKHRvbyBvbGQpXSkKKyAgICAgIGFtX2Rpc3BsYXlfUFlUSE9OPSRQWVRIT04KKyAgICBlbHNlCisgICAgICAjIE90aGVyd2lzZSwgdHJ5IGVhY2ggaW50ZXJwcmV0ZXIgdW50aWwgd2UgZmluZCBvbmUgdGhhdCBzYXRpc2ZpZXMKKyAgICAgICMgVkVSU0lPTi4KKyAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgYSBQeXRob24gaW50ZXJwcmV0ZXIgd2l0aCB2ZXJzaW9uID49ICQxXSwKKwlbYW1fY3ZfcGF0aGxlc3NfUFlUSE9OXSxbCisJZm9yIGFtX2N2X3BhdGhsZXNzX1BZVEhPTiBpbiBfQU1fUFlUSE9OX0lOVEVSUFJFVEVSX0xJU1Qgbm9uZTsgZG8KKwkgIHRlc3QgIiRhbV9jdl9wYXRobGVzc19QWVRIT04iID0gbm9uZSAmJiBicmVhaworCSAgQU1fUFlUSE9OX0NIRUNLX1ZFUlNJT04oWyRhbV9jdl9wYXRobGVzc19QWVRIT05dLCBbJDFdLCBbYnJlYWtdKQorCWRvbmVdKQorICAgICAgIyBTZXQgJFBZVEhPTiB0byB0aGUgYWJzb2x1dGUgcGF0aCBvZiAkYW1fY3ZfcGF0aGxlc3NfUFlUSE9OLgorICAgICAgaWYgdGVzdCAiJGFtX2N2X3BhdGhsZXNzX1BZVEhPTiIgPSBub25lOyB0aGVuCisJUFlUSE9OPToKKyAgICAgIGVsc2UKKyAgICAgICAgQUNfUEFUSF9QUk9HKFtQWVRIT05dLCBbJGFtX2N2X3BhdGhsZXNzX1BZVEhPTl0pCisgICAgICBmaQorICAgICAgYW1fZGlzcGxheV9QWVRIT049JGFtX2N2X3BhdGhsZXNzX1BZVEhPTgorICAgIGZpCisgIF0pCisKKyAgaWYgdGVzdCAiJFBZVEhPTiIgPSA6OyB0aGVuCisgIGRubCBSdW4gYW55IHVzZXItc3BlY2lmaWVkIGFjdGlvbiwgb3IgYWJvcnQuCisgICAgbTRfZGVmYXVsdChbJDNdLCBbQUNfTVNHX0VSUk9SKFtubyBzdWl0YWJsZSBQeXRob24gaW50ZXJwcmV0ZXIgZm91bmRdKV0pCisgIGVsc2UKKworICBkbmwgUXVlcnkgUHl0aG9uIGZvciBpdHMgdmVyc2lvbiBudW1iZXIuICBHZXR0aW5nIFs6M10gc2VlbXMgdG8gYmUKKyAgZG5sIHRoZSBiZXN0IHdheSB0byBkbyB0aGlzOyBpdCdzIHdoYXQgInNpdGUucHkiIGRvZXMgaW4gdGhlIHN0YW5kYXJkCisgIGRubCBsaWJyYXJ5LgorCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgJGFtX2Rpc3BsYXlfUFlUSE9OIHZlcnNpb25dLCBbYW1fY3ZfcHl0aG9uX3ZlcnNpb25dLAorICAgIFthbV9jdl9weXRob25fdmVyc2lvbj1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMudmVyc2lvbltbOjNdXSkiYF0pCisgIEFDX1NVQlNUKFtQWVRIT05fVkVSU0lPTl0sIFskYW1fY3ZfcHl0aG9uX3ZlcnNpb25dKQorCisgIGRubCBVc2UgdGhlIHZhbHVlcyBvZiAkcHJlZml4IGFuZCAkZXhlY19wcmVmaXggZm9yIHRoZSBjb3JyZXNwb25kaW5nCisgIGRubCB2YWx1ZXMgb2YgUFlUSE9OX1BSRUZJWCBhbmQgUFlUSE9OX0VYRUNfUFJFRklYLiAgVGhlc2UgYXJlIG1hZGUKKyAgZG5sIGRpc3RpbmN0IHZhcmlhYmxlcyBzbyB0aGV5IGNhbiBiZSBvdmVycmlkZGVuIGlmIG5lZWQgYmUuICBIb3dldmVyLAorICBkbmwgZ2VuZXJhbCBjb25zZW5zdXMgaXMgdGhhdCB5b3Ugc2hvdWxkbid0IG5lZWQgdGhpcyBhYmlsaXR5LgorCisgIEFDX1NVQlNUKFtQWVRIT05fUFJFRklYXSwgWycke3ByZWZpeH0nXSkKKyAgQUNfU1VCU1QoW1BZVEhPTl9FWEVDX1BSRUZJWF0sIFsnJHtleGVjX3ByZWZpeH0nXSkKKworICBkbmwgQXQgdGltZXMgKGxpa2Ugd2hlbiBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzKSB5b3UgbWF5IHdhbnQKKyAgZG5sIHRvIGtub3cgd2hpY2ggT1MgcGxhdGZvcm0gUHl0aG9uIHRoaW5rcyB0aGlzIGlzLgorCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgJGFtX2Rpc3BsYXlfUFlUSE9OIHBsYXRmb3JtXSwgW2FtX2N2X3B5dGhvbl9wbGF0Zm9ybV0sCisgICAgW2FtX2N2X3B5dGhvbl9wbGF0Zm9ybT1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMucGxhdGZvcm0pImBdKQorICBBQ19TVUJTVChbUFlUSE9OX1BMQVRGT1JNXSwgWyRhbV9jdl9weXRob25fcGxhdGZvcm1dKQorCisKKyAgZG5sIFNldCB1cCA0IGRpcmVjdG9yaWVzOgorCisgIGRubCBweXRob25kaXIgLS0gd2hlcmUgdG8gaW5zdGFsbCBweXRob24gc2NyaXB0cy4gIFRoaXMgaXMgdGhlCisgIGRubCAgIHNpdGUtcGFja2FnZXMgZGlyZWN0b3J5LCBub3QgdGhlIHB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5CisgIGRubCAgIGRpcmVjdG9yeSBsaWtlIGluIHByZXZpb3VzIGF1dG9tYWtlIGJldGFzLiAgVGhpcyBiZWhhdmlvcgorICBkbmwgICBpcyBtb3JlIGNvbnNpc3RlbnQgd2l0aCBsaXNwZGlyLm00IGZvciBleGFtcGxlLgorICBkbmwgUXVlcnkgZGlzdHV0aWxzIGZvciB0aGlzIGRpcmVjdG9yeS4gIGRpc3R1dGlscyBkb2VzIG5vdCBleGlzdCBpbgorICBkbmwgUHl0aG9uIDEuNSwgc28gd2UgZmFsbCBiYWNrIHRvIHRoZSBoYXJkY29kZWQgZGlyZWN0b3J5IGlmIGl0CisgIGRubCBkb2Vzbid0IHdvcmsuCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgJGFtX2Rpc3BsYXlfUFlUSE9OIHNjcmlwdCBkaXJlY3RvcnldLAorICAgIFthbV9jdl9weXRob25fcHl0aG9uZGlyXSwKKyAgICBbaWYgdGVzdCAieCRwcmVmaXgiID0geE5PTkUKKyAgICAgdGhlbgorICAgICAgIGFtX3B5X3ByZWZpeD0kYWNfZGVmYXVsdF9wcmVmaXgKKyAgICAgZWxzZQorICAgICAgIGFtX3B5X3ByZWZpeD0kcHJlZml4CisgICAgIGZpCisgICAgIGFtX2N2X3B5dGhvbl9weXRob25kaXI9YCRQWVRIT04gLWMgImltcG9ydCBzeXM7IGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWc7IHN5cy5zdGRvdXQud3JpdGUoc3lzY29uZmlnLmdldF9weXRob25fbGliKDAsMCxwcmVmaXg9JyRhbV9weV9wcmVmaXgnKSkiIDI+L2Rldi9udWxsIHx8CisgICAgIGVjaG8gIiRQWVRIT05fUFJFRklYL2xpYi9weXRob24kUFlUSE9OX1ZFUlNJT04vc2l0ZS1wYWNrYWdlcyJgCisgICAgIGNhc2UgJGFtX2N2X3B5dGhvbl9weXRob25kaXIgaW4KKyAgICAgJGFtX3B5X3ByZWZpeCopCisgICAgICAgYW1fX3N0cmlwX3ByZWZpeD1gZWNobyAiJGFtX3B5X3ByZWZpeCIgfCBzZWQgJ3N8LnwufGcnYAorICAgICAgIGFtX2N2X3B5dGhvbl9weXRob25kaXI9YGVjaG8gIiRhbV9jdl9weXRob25fcHl0aG9uZGlyIiB8IHNlZCAicyxeJGFtX19zdHJpcF9wcmVmaXgsJFBZVEhPTl9QUkVGSVgsImAKKyAgICAgICA7OworICAgICAqKQorICAgICAgIGNhc2UgJGFtX3B5X3ByZWZpeCBpbgorICAgICAgICAgL3VzcnwvU3lzdGVtKikgOzsKKyAgICAgICAgICopCisJICBhbV9jdl9weXRob25fcHl0aG9uZGlyPSRQWVRIT05fUFJFRklYL2xpYi9weXRob24kUFlUSE9OX1ZFUlNJT04vc2l0ZS1wYWNrYWdlcworCSAgOzsKKyAgICAgICBlc2FjCisgICAgICAgOzsKKyAgICAgZXNhYworICAgIF0pCisgIEFDX1NVQlNUKFtweXRob25kaXJdLCBbJGFtX2N2X3B5dGhvbl9weXRob25kaXJdKQorCisgIGRubCBwa2dweXRob25kaXIgLS0gJFBBQ0tBR0UgZGlyZWN0b3J5IHVuZGVyIHB5dGhvbmRpci4gIFdhcworICBkbmwgICBQWVRIT05fU0lURV9QQUNLQUdFIGluIHByZXZpb3VzIGJldGFzLCBidXQgdGhpcyBuYW1pbmcgaXMKKyAgZG5sICAgbW9yZSBjb25zaXN0ZW50IHdpdGggdGhlIHJlc3Qgb2YgYXV0b21ha2UuCisKKyAgQUNfU1VCU1QoW3BrZ3B5dGhvbmRpcl0sIFtcJHtweXRob25kaXJ9LyRQQUNLQUdFXSkKKworICBkbmwgcHlleGVjZGlyIC0tIGRpcmVjdG9yeSBmb3IgaW5zdGFsbGluZyBweXRob24gZXh0ZW5zaW9uIG1vZHVsZXMKKyAgZG5sICAgKHNoYXJlZCBsaWJyYXJpZXMpCisgIGRubCBRdWVyeSBkaXN0dXRpbHMgZm9yIHRoaXMgZGlyZWN0b3J5LiAgZGlzdHV0aWxzIGRvZXMgbm90IGV4aXN0IGluCisgIGRubCBQeXRob24gMS41LCBzbyB3ZSBmYWxsIGJhY2sgdG8gdGhlIGhhcmRjb2RlZCBkaXJlY3RvcnkgaWYgaXQKKyAgZG5sIGRvZXNuJ3Qgd29yay4KKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkYW1fZGlzcGxheV9QWVRIT04gZXh0ZW5zaW9uIG1vZHVsZSBkaXJlY3RvcnldLAorICAgIFthbV9jdl9weXRob25fcHlleGVjZGlyXSwKKyAgICBbaWYgdGVzdCAieCRleGVjX3ByZWZpeCIgPSB4Tk9ORQorICAgICB0aGVuCisgICAgICAgYW1fcHlfZXhlY19wcmVmaXg9JGFtX3B5X3ByZWZpeAorICAgICBlbHNlCisgICAgICAgYW1fcHlfZXhlY19wcmVmaXg9JGV4ZWNfcHJlZml4CisgICAgIGZpCisgICAgIGFtX2N2X3B5dGhvbl9weWV4ZWNkaXI9YCRQWVRIT04gLWMgImltcG9ydCBzeXM7IGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWc7IHN5cy5zdGRvdXQud3JpdGUoc3lzY29uZmlnLmdldF9weXRob25fbGliKDEsMCxwcmVmaXg9JyRhbV9weV9leGVjX3ByZWZpeCcpKSIgMj4vZGV2L251bGwgfHwKKyAgICAgZWNobyAiJFBZVEhPTl9FWEVDX1BSRUZJWC9saWIvcHl0aG9uJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMiYAorICAgICBjYXNlICRhbV9jdl9weXRob25fcHlleGVjZGlyIGluCisgICAgICRhbV9weV9leGVjX3ByZWZpeCopCisgICAgICAgYW1fX3N0cmlwX3ByZWZpeD1gZWNobyAiJGFtX3B5X2V4ZWNfcHJlZml4IiB8IHNlZCAnc3wufC58ZydgCisgICAgICAgYW1fY3ZfcHl0aG9uX3B5ZXhlY2Rpcj1gZWNobyAiJGFtX2N2X3B5dGhvbl9weWV4ZWNkaXIiIHwgc2VkICJzLF4kYW1fX3N0cmlwX3ByZWZpeCwkUFlUSE9OX0VYRUNfUFJFRklYLCJgCisgICAgICAgOzsKKyAgICAgKikKKyAgICAgICBjYXNlICRhbV9weV9leGVjX3ByZWZpeCBpbgorICAgICAgICAgL3VzcnwvU3lzdGVtKikgOzsKKyAgICAgICAgICopCisJICAgYW1fY3ZfcHl0aG9uX3B5ZXhlY2Rpcj0kUFlUSE9OX0VYRUNfUFJFRklYL2xpYi9weXRob24kUFlUSE9OX1ZFUlNJT04vc2l0ZS1wYWNrYWdlcworCSAgIDs7CisgICAgICAgZXNhYworICAgICAgIDs7CisgICAgIGVzYWMKKyAgICBdKQorICBBQ19TVUJTVChbcHlleGVjZGlyXSwgWyRhbV9jdl9weXRob25fcHlleGVjZGlyXSkKKworICBkbmwgcGtncHlleGVjZGlyIC0tICQocHlleGVjZGlyKS8kKFBBQ0tBR0UpCisKKyAgQUNfU1VCU1QoW3BrZ3B5ZXhlY2Rpcl0sIFtcJHtweWV4ZWNkaXJ9LyRQQUNLQUdFXSkKKworICBkbmwgUnVuIGFueSB1c2VyLXNwZWNpZmllZCBhY3Rpb24uCisgICQyCisgIGZpCisKK10pCisKKworIyBBTV9QWVRIT05fQ0hFQ0tfVkVSU0lPTihQUk9HLCBWRVJTSU9OLCBbQUNUSU9OLUlGLVRSVUVdLCBbQUNUSU9OLUlGLUZBTFNFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJ1biBBQ1RJT04tSUYtVFJVRSBpZiB0aGUgUHl0aG9uIGludGVycHJldGVyIFBST0cgaGFzIHZlcnNpb24gPj0gVkVSU0lPTi4KKyMgUnVuIEFDVElPTi1JRi1GQUxTRSBvdGhlcndpc2UuCisjIFRoaXMgdGVzdCB1c2VzIHN5cy5oZXh2ZXJzaW9uIGluc3RlYWQgb2YgdGhlIHN0cmluZyBlcXVpdmFsZW50IChmaXJzdAorIyB3b3JkIG9mIHN5cy52ZXJzaW9uKSwgaW4gb3JkZXIgdG8gY29wZSB3aXRoIHZlcnNpb25zIHN1Y2ggYXMgMi4yYzEuCisjIFRoaXMgc3VwcG9ydHMgUHl0aG9uIDIuMCBvciBoaWdoZXIuICgyLjAgd2FzIHJlbGVhc2VkIG9uIE9jdG9iZXIgMTYsIDIwMDApLgorQUNfREVGVU4oW0FNX1BZVEhPTl9DSEVDS19WRVJTSU9OXSwKKyBbcHJvZz0iaW1wb3J0IHN5cworIyBzcGxpdCBzdHJpbmdzIGJ5ICcuJyBhbmQgY29udmVydCB0byBudW1lcmljLiAgQXBwZW5kIHNvbWUgemVyb3MKKyMgYmVjYXVzZSB3ZSBuZWVkIGF0IGxlYXN0IDQgZGlnaXRzIGZvciB0aGUgaGV4IGNvbnZlcnNpb24uCisjIG1hcCByZXR1cm5zIGFuIGl0ZXJhdG9yIGluIFB5dGhvbiAzLjAgYW5kIGEgbGlzdCBpbiAyLngKK21pbnZlciA9IGxpc3QobWFwKGludCwgJyQyJy5zcGxpdCgnLicpKSkgKyBbWzAsIDAsIDBdXQorbWludmVyaGV4ID0gMAorIyB4cmFuZ2UgaXMgbm90IHByZXNlbnQgaW4gUHl0aG9uIDMuMCBhbmQgcmFuZ2UgcmV0dXJucyBhbiBpdGVyYXRvcgorZm9yIGkgaW4gbGlzdChyYW5nZSgwLCA0KSk6IG1pbnZlcmhleCA9IChtaW52ZXJoZXggPDwgOCkgKyBtaW52ZXJbW2ldXQorc3lzLmV4aXQoc3lzLmhleHZlcnNpb24gPCBtaW52ZXJoZXgpIgorICBBU19JRihbQU1fUlVOX0xPRyhbJDEgLWMgIiRwcm9nIl0pXSwgWyQzXSwgWyQ0XSldKQpkaWZmIC0tZ2l0IGEvc2hhcmUvYWNsb2NhbC0xLjExL3JlZ2V4Lm00IGIvc2hhcmUvYWNsb2NhbC0xLjExL3JlZ2V4Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNWJiMzgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hY2xvY2FsLTEuMTEvcmVnZXgubTQKQEAgLTAsMCArMSw1MyBAQAorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyMgQ2hlY2sgaWYgLS13aXRoLXJlZ2V4IHdhcyBnaXZlbi4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1CisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDcKKworIyBBTV9XSVRIX1JFR0VYCisjIC0tLS0tLS0tLS0tLS0KKyMKKyMgVGhlIGlkZWEgaXMgdG8gZGlzdHJpYnV0ZSByeC5baGNdIGFuZCByZWdleC5baGNdIHRvZ2V0aGVyLCBmb3IgYQorIyB3aGlsZS4gIFRoZSBXSVRIX1JFR0VYIHN5bWJvbCBpcyB1c2VkIHRvIGRlY2lkZSB3aGljaCBvZiByZWdleC5oIG9yCisjIHJ4Lmggc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBhcHBsaWNhdGlvbi4gIElmIGAuL2NvbmZpZ3VyZQorIyAtLXdpdGgtcmVnZXgnIGlzIGdpdmVuICh0aGUgZGVmYXVsdCksIHRoZSBwYWNrYWdlIHdpbGwgdXNlIGdhd2sncworIyByZWdleC4gIElmIGAuL2NvbmZpZ3VyZSAtLXdpdGhvdXQtcmVnZXgnLCBhIGNoZWNrIGlzIG1hZGUgdG8gc2VlIGlmCisjIHJ4IGlzIGFscmVhZHkgaW5zdGFsbGVkLCBhcyB3aXRoIG5ld2VyIExpbnV4J2VzLiAgSWYgbm90IGZvdW5kLCB0aGUKKyMgcGFja2FnZSB3aWxsIHVzZSB0aGUgcnggZnJvbSB0aGUgZGlzdHJpYnV0aW9uLiAgSWYgZm91bmQsIHRoZQorIyBwYWNrYWdlIHdpbGwgdXNlIHRoZSBzeXN0ZW0ncyByeCB3aGljaCwgb24gTGludXggYXQgbGVhc3QsIHdpbGwKKyMgcmVzdWx0IGluIGEgc21hbGxlciBleGVjdXRhYmxlIGZpbGUuCisjCisjIEZJWE1FOiBUaGlzIG1hY3JvIHNlZW1zIHF1aXRlIG9ic29sZXRlIG5vdyBzaW5jZSByeCBkb2Vzbid0IHNlZW0gdG8KKyMgYmUgbWFpbnRhaW5lZCwgd2hpbGUgcmVnZXggaXMuCitBQ19ERUZVTihbQU1fV0lUSF9SRUdFWF0sCitbQUNfUFJFUkVRKDIuNTApZG5sCitBQ19MSUJTT1VSQ0VTKFtyeC5oLCByeC5jLCByZWdleC5jLCByZWdleC5oXSlkbmwKK0FDX01TR19DSEVDS0lORyhbd2hpY2ggb2YgR05VIHJ4IG9yIGdhd2sncyByZWdleCBpcyB3YW50ZWRdKQorQUNfQVJHX1dJVEgoW3JlZ2V4XSwKK1sgIC0td2l0aG91dC1yZWdleCAgICAgICAgIHVzZSBHTlUgcnggaW4gbGlldSBvZiBnYXdrJ3MgcmVnZXggZm9yIG1hdGNoaW5nXSwKKwkgICAgW3Rlc3QgIiR3aXRodmFsIiA9IHllcyAmJiBhbV93aXRoX3JlZ2V4PTFdLAorCSAgICBbYW1fd2l0aF9yZWdleD0xXSkKK2lmIHRlc3QgLW4gIiRhbV93aXRoX3JlZ2V4IjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKFtyZWdleF0pCisgIEFDX0RFRklORShbV0lUSF9SRUdFWF0sIDEsIFtEZWZpbmUgaWYgdXNpbmcgR05VIHJlZ2V4XSkKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBHTlUgcmVnZXggaW4gbGliY10sIFthbV9jdl9nbnVfcmVnZXhdLAorICAgIFtBQ19UUllfTElOSyhbXSwKKwkJIFtleHRlcm4gaW50IHJlX21heF9mYWlsdXJlczsgcmVfbWF4X2ZhaWx1cmVzID0gMV0sCisJCSBbYW1fY3ZfZ251X3JlZ2V4PXllc10sCisJCSBbYW1fY3ZfZ251X3JlZ2V4PW5vXSldKQorICBpZiB0ZXN0ICRhbV9jdl9nbnVfcmVnZXggPSBubzsgdGhlbgorICAgIEFDX0xJQk9CSihbcmVnZXhdKQorICBmaQorZWxzZQorICBBQ19NU0dfUkVTVUxUKFtyeF0pCisgIEFDX0NIRUNLX0ZVTkMoW3JlX3J4X3NlYXJjaF0sICwgW0FDX0xJQk9CSihbcnhdKV0pCitmaVtdZG5sCitdKQorCitBVV9ERUZVTihbZnBfV0lUSF9SRUdFWF0sIFtBTV9XSVRIX1JFR0VYXSkKZGlmZiAtLWdpdCBhL3NoYXJlL2FjbG9jYWwtMS4xMS9ydW5sb2cubTQgYi9zaGFyZS9hY2xvY2FsLTEuMTEvcnVubG9nLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNjA4ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hY2xvY2FsLTEuMTEvcnVubG9nLm00CkBAIC0wLDAgKzEsMTcgQEAKKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEFNX1JVTl9MT0coQ09NTUFORCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSdW4gQ09NTUFORCwgc2F2ZSB0aGUgZXhpdCBzdGF0dXMgaW4gYWNfc3RhdHVzLCBhbmQgbG9nIGl0LgorIyAoVGhpcyBoYXMgYmVlbiBhZGFwdGVkIGZyb20gQXV0b2NvbmYncyBfQUNfUlVOX0xPRyBtYWNyby4pCitBQ19ERUZVTihbQU1fUlVOX0xPR10sCitbeyBlY2hvICIkYXNfbWU6JExJTkVOTzogJDEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICgkMSkgPiZBU19NRVNTQUdFX0xPR19GRCAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgYWNfc3RhdHVzPSQ/CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH1dKQpkaWZmIC0tZ2l0IGEvc2hhcmUvYWNsb2NhbC0xLjExL3Nhbml0eS5tNCBiL3NoYXJlL2FjbG9jYWwtMS4xMS9zYW5pdHkubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QyZjMwNAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2FjbG9jYWwtMS4xMS9zYW5pdHkubTQKQEAgLTAsMCArMSw2NCBAQAorIyBDaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZS4gICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMjAwMCwgMjAwMSwgMjAwMywgMjAwNSwgMjAwOAorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA1CisKKyMgQU1fU0FOSVRZX0NIRUNLCisjIC0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FNX1NBTklUWV9DSEVDS10sCitbQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmVdKQorIyBKdXN0IGluIGNhc2UKK3NsZWVwIDEKK2VjaG8gdGltZXN0YW1wID4gY29uZnRlc3QuZmlsZQorIyBSZWplY3QgdW5zYWZlIGNoYXJhY3RlcnMgaW4gJHNyY2RpciBvciB0aGUgYWJzb2x1dGUgd29ya2luZyBkaXJlY3RvcnkKKyMgbmFtZS4gIEFjY2VwdCBzcGFjZSBhbmQgdGFiIG9ubHkgaW4gdGhlIGxhdHRlci4KK2FtX2xmPScKKycKK2Nhc2UgYHB3ZGAgaW4KKyAgKltbXFxcIlwjXCRcJlwnXGAkYW1fbGZdXSopCisgICAgQUNfTVNHX0VSUk9SKFt1bnNhZmUgYWJzb2x1dGUgd29ya2luZyBkaXJlY3RvcnkgbmFtZV0pOzsKK2VzYWMKK2Nhc2UgJHNyY2RpciBpbgorICAqW1tcXFwiXCNcJFwmXCdcYCRhbV9sZlwgXAldXSopCisgICAgQUNfTVNHX0VSUk9SKFt1bnNhZmUgc3JjZGlyIHZhbHVlOiBgJHNyY2RpciddKTs7Citlc2FjCisKKyMgRG8gYHNldCcgaW4gYSBzdWJzaGVsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBjdXJyZW50IHNoZWxsJ3MKKyMgYXJndW1lbnRzLiAgTXVzdCB0cnkgLUwgZmlyc3QgaW4gY2FzZSBjb25maWd1cmUgaXMgYWN0dWFsbHkgYQorIyBzeW1saW5rOyBzb21lIHN5c3RlbXMgcGxheSB3ZWlyZCBnYW1lcyB3aXRoIHRoZSBtb2QgdGltZSBvZiBzeW1saW5rcworIyAoZWcgRnJlZUJTRCByZXR1cm5zIHRoZSBtb2QgdGltZSBvZiB0aGUgc3ltbGluaydzIGNvbnRhaW5pbmcKKyMgZGlyZWN0b3J5KS4KK2lmICgKKyAgIHNldCBYIGBscyAtTHQgIiRzcmNkaXIvY29uZmlndXJlIiBjb25mdGVzdC5maWxlIDI+IC9kZXYvbnVsbGAKKyAgIGlmIHRlc3QgIiRbKl0iID0gIlgiOyB0aGVuCisgICAgICAjIC1MIGRpZG4ndCB3b3JrLgorICAgICAgc2V0IFggYGxzIC10ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZWAKKyAgIGZpCisgICBybSAtZiBjb25mdGVzdC5maWxlCisgICBpZiB0ZXN0ICIkWypdIiAhPSAiWCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIiBcCisgICAgICAmJiB0ZXN0ICIkWypdIiAhPSAiWCBjb25mdGVzdC5maWxlICRzcmNkaXIvY29uZmlndXJlIjsgdGhlbgorCisgICAgICAjIElmIG5laXRoZXIgbWF0Y2hlZCwgdGhlbiB3ZSBoYXZlIGEgYnJva2VuIGxzLiAgVGhpcyBjYW4gaGFwcGVuCisgICAgICAjIGlmLCBmb3IgaW5zdGFuY2UsIENPTkZJR19TSEVMTCBpcyBiYXNoIGFuZCBpdCBpbmhlcml0cyBhCisgICAgICAjIGJyb2tlbiBscyBhbGlhcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4gIFRoaXMgaGFzIGFjdHVhbGx5CisgICAgICAjIGhhcHBlbmVkLiAgU3VjaCBhIHN5c3RlbSBjb3VsZCBub3QgYmUgY29uc2lkZXJlZCAic2FuZSIuCisgICAgICBBQ19NU0dfRVJST1IoW2xzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KK2FsaWFzIGluIHlvdXIgZW52aXJvbm1lbnRdKQorICAgZmkKKworICAgdGVzdCAiJFsyXSIgPSBjb25mdGVzdC5maWxlCisgICApCit0aGVuCisgICAjIE9rLgorICAgOgorZWxzZQorICAgQUNfTVNHX0VSUk9SKFtuZXdseSBjcmVhdGVkIGZpbGUgaXMgb2xkZXIgdGhhbiBkaXN0cmlidXRlZCBmaWxlcyEKK0NoZWNrIHlvdXIgc3lzdGVtIGNsb2NrXSkKK2ZpCitBQ19NU0dfUkVTVUxUKHllcyldKQpkaWZmIC0tZ2l0IGEvc2hhcmUvYWNsb2NhbC0xLjExL3NpbGVudC5tNCBiL3NoYXJlL2FjbG9jYWwtMS4xMS9zaWxlbnQubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQyYTFhMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2FjbG9jYWwtMS4xMS9zaWxlbnQubTQKQEAgLTAsMCArMSwyNyBAQAorIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyBDb3B5cmlnaHQgKEMpIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDEKKworIyBBTV9TSUxFTlRfUlVMRVMoW0RFRkFVTFRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbmFibGUgbGVzcyB2ZXJib3NlIGJ1aWxkIHJ1bGVzOyB3aXRoIHRoZSBkZWZhdWx0IHNldCB0byBERUZBVUxUCisjIChgeWVzJyBiZWluZyBsZXNzIHZlcmJvc2UsIGBubycgb3IgZW1wdHkgYmVpbmcgdmVyYm9zZSkuCitBQ19ERUZVTihbQU1fU0lMRU5UX1JVTEVTXSwKK1tBQ19BUkdfRU5BQkxFKFtzaWxlbnQtcnVsZXNdLAorWyAgLS1lbmFibGUtc2lsZW50LXJ1bGVzICAgICAgICAgIGxlc3MgdmVyYm9zZSBidWlsZCBvdXRwdXQgKHVuZG86IGBtYWtlIFY9MScpCisgIC0tZGlzYWJsZS1zaWxlbnQtcnVsZXMgICAgICAgICB2ZXJib3NlIGJ1aWxkIG91dHB1dCAodW5kbzogYG1ha2UgVj0wJyldKQorY2FzZSAkZW5hYmxlX3NpbGVudF9ydWxlcyBpbgoreWVzKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0wOzsKK25vKSAgQU1fREVGQVVMVF9WRVJCT1NJVFk9MTs7CisqKSAgIEFNX0RFRkFVTFRfVkVSQk9TSVRZPW00X2lmKFskMV0sIFt5ZXNdLCBbMF0sIFsxXSk7OworZXNhYworQUNfU1VCU1QoW0FNX0RFRkFVTFRfVkVSQk9TSVRZXSlkbmwKK0FNX0JBQ0tTTEFTSD0nXCcKK0FDX1NVQlNUKFtBTV9CQUNLU0xBU0hdKWRubAorX0FNX1NVQlNUX05PVE1BS0UoW0FNX0JBQ0tTTEFTSF0pZG5sCitdKQpkaWZmIC0tZ2l0IGEvc2hhcmUvYWNsb2NhbC0xLjExL3N0cmlwLm00IGIvc2hhcmUvYWNsb2NhbC0xLjExL3N0cmlwLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNDM1ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hY2xvY2FsLTEuMTEvc3RyaXAubTQKQEAgLTAsMCArMSwyOCBAQAorIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fUFJPR19JTlNUQUxMX1NUUklQCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPbmUgaXNzdWUgd2l0aCB2ZW5kb3IgYGluc3RhbGwnIChldmVuIEdOVSkgaXMgdGhhdCB5b3UgY2FuJ3QKKyMgc3BlY2lmeSB0aGUgcHJvZ3JhbSB1c2VkIHRvIHN0cmlwIGJpbmFyaWVzLiAgVGhpcyBpcyBlc3BlY2lhbGx5CisjIGFubm95aW5nIGluIGNyb3NzLWNvbXBpbGluZyBlbnZpcm9ubWVudHMsIHdoZXJlIHRoZSBidWlsZCdzIHN0cmlwCisjIGlzIHVubGlrZWx5IHRvIGhhbmRsZSB0aGUgaG9zdCdzIGJpbmFyaWVzLgorIyBGb3J0dW5hdGVseSBpbnN0YWxsLXNoIHdpbGwgaG9ub3IgYSBTVFJJUFBST0cgdmFyaWFibGUsIHNvIHdlCisjIGFsd2F5cyB1c2UgaW5zdGFsbC1zaCBpbiBgbWFrZSBpbnN0YWxsLXN0cmlwJywgYW5kIGluaXRpYWxpemUKKyMgU1RSSVBQUk9HIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBTVFJJUCB2YXJpYWJsZSAoc2V0IGJ5IHRoZSB1c2VyKS4KK0FDX0RFRlVOKFtBTV9QUk9HX0lOU1RBTExfU1RSSVBdLAorW0FDX1JFUVVJUkUoW0FNX1BST0dfSU5TVEFMTF9TSF0pZG5sCisjIEluc3RhbGxlZCBiaW5hcmllcyBhcmUgdXN1YWxseSBzdHJpcHBlZCB1c2luZyBgc3RyaXAnIHdoZW4gdGhlIHVzZXIKKyMgcnVuIGBtYWtlIGluc3RhbGwtc3RyaXAnLiAgSG93ZXZlciBgc3RyaXAnIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQKKyMgdG9vbCB0byB1c2UgaW4gY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnRzLCB0aGVyZWZvcmUgQXV0b21ha2UKKyMgd2lsbCBob25vciB0aGUgYFNUUklQJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBvdmVycnVsZSB0aGlzIHByb2dyYW0uCitkbmwgRG9uJ3QgdGVzdCBmb3IgJGNyb3NzX2NvbXBpbGluZyA9IHllcywgYmVjYXVzZSBpdCBtaWdodCBiZSBgbWF5YmUnLgoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0gbm87IHRoZW4KKyAgQUNfQ0hFQ0tfVE9PTChbU1RSSVBdLCBbc3RyaXBdLCA6KQorZmkKK0lOU1RBTExfU1RSSVBfUFJPR1JBTT0iXCQoaW5zdGFsbF9zaCkgLWMgLXMiCitBQ19TVUJTVChbSU5TVEFMTF9TVFJJUF9QUk9HUkFNXSldKQpkaWZmIC0tZ2l0IGEvc2hhcmUvYWNsb2NhbC0xLjExL3N1YnN0bm90Lm00IGIvc2hhcmUvYWNsb2NhbC0xLjExL3N1YnN0bm90Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMWQyODYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hY2xvY2FsLTEuMTEvc3Vic3Rub3QubTQKQEAgLTAsMCArMSwxOSBAQAorIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDIKKworIyBfQU1fU1VCU1RfTk9UTUFLRShWQVJJQUJMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByZXZlbnQgQXV0b21ha2UgZnJvbSBvdXRwdXR0aW5nIFZBUklBQkxFID0gQFZBUklBQkxFQCBpbiBNYWtlZmlsZS5pbi4KKyMgVGhpcyBtYWNybyBpcyB0cmFjZWQgYnkgQXV0b21ha2UuCitBQ19ERUZVTihbX0FNX1NVQlNUX05PVE1BS0VdKQorCisjIEFNX1NVQlNUX05PVE1BS0UoVkFSSUFCTEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQdWJsaWMgc2lzdGVyIG9mIF9BTV9TVUJTVF9OT1RNQUtFLgorQUNfREVGVU4oW0FNX1NVQlNUX05PVE1BS0VdLCBbX0FNX1NVQlNUX05PVE1BS0UoJEApXSkKZGlmZiAtLWdpdCBhL3NoYXJlL2FjbG9jYWwtMS4xMS90YXIubTQgYi9zaGFyZS9hY2xvY2FsLTEuMTEvdGFyLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YTAwZWMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hY2xvY2FsLTEuMTEvdGFyLm00CkBAIC0wLDAgKzEsOTUgQEAKKyMgQ2hlY2sgaG93IHRvIGNyZWF0ZSBhIHRhcmJhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDIKKworIyBfQU1fUFJPR19UQVIoRk9STUFUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBob3cgdG8gY3JlYXRlIGEgdGFyYmFsbCBpbiBmb3JtYXQgRk9STUFULgorIyBGT1JNQVQgc2hvdWxkIGJlIG9uZSBvZiBgdjcnLCBgdXN0YXInLCBvciBgcGF4Jy4KKyMKKyMgU3Vic3RpdHV0ZSBhIHZhcmlhYmxlICQoYW1fX3RhcikgdGhhdCBpcyBhIGNvbW1hbmQKKyMgd3JpdGluZyB0byBzdGRvdXQgYSBGT1JNQVQtdGFyYmFsbCBjb250YWluaW5nIHRoZSBkaXJlY3RvcnkKKyMgJHRhcmRpci4KKyMgICAgIHRhcmRpcj1kaXJlY3RvcnkgJiYgJChhbV9fdGFyKSA+IHJlc3VsdC50YXIKKyMKKyMgU3Vic3RpdHV0ZSBhIHZhcmlhYmxlICQoYW1fX3VudGFyKSB0aGF0IGV4dHJhY3Qgc3VjaAorIyBhIHRhcmJhbGwgcmVhZCBmcm9tIHN0ZGluLgorIyAgICAgJChhbV9fdW50YXIpIDwgcmVzdWx0LnRhcgorQUNfREVGVU4oW19BTV9QUk9HX1RBUl0sCitbIyBBbHdheXMgZGVmaW5lIEFNVEFSIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorQU1fTUlTU0lOR19QUk9HKFtBTVRBUl0sIFt0YXJdKQorbTRfaWYoWyQxXSwgW3Y3XSwKKyAgICAgW2FtX190YXI9JyR7QU1UQVJ9IGNob2YgLSAiJCR0YXJkaXIiJzsgYW1fX3VudGFyPScke0FNVEFSfSB4ZiAtJ10sCisgICAgIFttNF9jYXNlKFskMV0sIFt1c3Rhcl0sLCBbcGF4XSwsCisgICAgICAgICAgICAgIFttNF9mYXRhbChbVW5rbm93biB0YXIgZm9ybWF0XSldKQorQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY3JlYXRlIGEgJDEgdGFyIGFyY2hpdmVdKQorIyBMb29wIG92ZXIgYWxsIGtub3duIG1ldGhvZHMgdG8gY3JlYXRlIGEgdGFyIGFyY2hpdmUgdW50aWwgb25lIHdvcmtzLgorX2FtX3Rvb2xzPSdnbnV0YXIgbTRfaWYoWyQxXSwgW3VzdGFyXSwgW3BsYWludGFyXSkgcGF4IGNwaW8gbm9uZScKK19hbV90b29scz0ke2FtX2N2X3Byb2dfdGFyXyQxLSRfYW1fdG9vbHN9CisjIERvIG5vdCBmb2xkIHRoZSBhYm92ZSB0d28gbGluZSBpbnRvIG9uZSwgYmVjYXVzZSBUcnU2NCBzaCBhbmQKKyMgU29sYXJpcyBzaCB3aWxsIG5vdCBncm9rIHNwYWNlcyBpbiB0aGUgcmhzIG9mIGAtJy4KK2ZvciBfYW1fdG9vbCBpbiAkX2FtX3Rvb2xzCitkbworICBjYXNlICRfYW1fdG9vbCBpbgorICBnbnV0YXIpCisgICAgZm9yIF9hbV90YXIgaW4gdGFyIGdudXRhciBndGFyOworICAgIGRvCisgICAgICBBTV9SVU5fTE9HKFskX2FtX3RhciAtLXZlcnNpb25dKSAmJiBicmVhaworICAgIGRvbmUKKyAgICBhbV9fdGFyPSIkX2FtX3RhciAtLWZvcm1hdD1tNF9pZihbJDFdLCBbcGF4XSwgW3Bvc2l4XSwgWyQxXSkgLWNoZiAtICInIiQkdGFyZGlyIicKKyAgICBhbV9fdGFyXz0iJF9hbV90YXIgLS1mb3JtYXQ9bTRfaWYoWyQxXSwgW3BheF0sIFtwb3NpeF0sIFskMV0pIC1jaGYgLSAiJyIkdGFyZGlyIicKKyAgICBhbV9fdW50YXI9IiRfYW1fdGFyIC14ZiAtIgorICAgIDs7CisgIHBsYWludGFyKQorICAgICMgTXVzdCBza2lwIEdOVSB0YXI6IGlmIGl0IGRvZXMgbm90IHN1cHBvcnQgLS1mb3JtYXQ9IGl0IGRvZXNuJ3QgY3JlYXRlCisgICAgIyB1c3RhciB0YXJiYWxsIGVpdGhlci4KKyAgICAodGFyIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxICYmIGNvbnRpbnVlCisgICAgYW1fX3Rhcj0ndGFyIGNoZiAtICIkJHRhcmRpciInCisgICAgYW1fX3Rhcl89J3RhciBjaGYgLSAiJHRhcmRpciInCisgICAgYW1fX3VudGFyPSd0YXIgeGYgLScKKyAgICA7OworICBwYXgpCisgICAgYW1fX3Rhcj0ncGF4IC1MIC14ICQxIC13ICIkJHRhcmRpciInCisgICAgYW1fX3Rhcl89J3BheCAtTCAteCAkMSAtdyAiJHRhcmRpciInCisgICAgYW1fX3VudGFyPSdwYXggLXInCisgICAgOzsKKyAgY3BpbykKKyAgICBhbV9fdGFyPSdmaW5kICIkJHRhcmRpciIgLXByaW50IHwgY3BpbyAtbyAtSCAkMSAtTCcKKyAgICBhbV9fdGFyXz0nZmluZCAiJHRhcmRpciIgLXByaW50IHwgY3BpbyAtbyAtSCAkMSAtTCcKKyAgICBhbV9fdW50YXI9J2NwaW8gLWkgLUggJDEgLWQnCisgICAgOzsKKyAgbm9uZSkKKyAgICBhbV9fdGFyPWZhbHNlCisgICAgYW1fX3Rhcl89ZmFsc2UKKyAgICBhbV9fdW50YXI9ZmFsc2UKKyAgICA7OworICBlc2FjCisKKyAgIyBJZiB0aGUgdmFsdWUgd2FzIGNhY2hlZCwgc3RvcCBub3cuICBXZSBqdXN0IHdhbnRlZCB0byBoYXZlIGFtX190YXIKKyAgIyBhbmQgYW1fX3VudGFyIHNldC4KKyAgdGVzdCAtbiAiJHthbV9jdl9wcm9nX3Rhcl8kMX0iICYmIGJyZWFrCisKKyAgIyB0YXIvdW50YXIgYSBkdW1teSBkaXJlY3RvcnksIGFuZCBzdG9wIGlmIHRoZSBjb21tYW5kIHdvcmtzCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKKyAgbWtkaXIgY29uZnRlc3QuZGlyCisgIGVjaG8gR3JlcE1lID4gY29uZnRlc3QuZGlyL2ZpbGUKKyAgQU1fUlVOX0xPRyhbdGFyZGlyPWNvbmZ0ZXN0LmRpciAmJiBldmFsICRhbV9fdGFyXyA+Y29uZnRlc3QudGFyXSkKKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LnRhcjsgdGhlbgorICAgIEFNX1JVTl9MT0coWyRhbV9fdW50YXIgPGNvbmZ0ZXN0LnRhcl0pCisgICAgZ3JlcCBHcmVwTWUgY29uZnRlc3QuZGlyL2ZpbGUgPi9kZXYvbnVsbCAyPiYxICYmIGJyZWFrCisgIGZpCitkb25lCitybSAtcmYgY29uZnRlc3QuZGlyCisKK0FDX0NBQ0hFX1ZBTChbYW1fY3ZfcHJvZ190YXJfJDFdLCBbYW1fY3ZfcHJvZ190YXJfJDE9JF9hbV90b29sXSkKK0FDX01TR19SRVNVTFQoWyRhbV9jdl9wcm9nX3Rhcl8kMV0pXSkKK0FDX1NVQlNUKFthbV9fdGFyXSkKK0FDX1NVQlNUKFthbV9fdW50YXJdKQorXSkgIyBfQU1fUFJPR19UQVIKZGlmZiAtLWdpdCBhL3NoYXJlL2FjbG9jYWwtMS4xMS91cGMubTQgYi9zaGFyZS9hY2xvY2FsLTEuMTEvdXBjLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MTllYTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hY2xvY2FsLTEuMTEvdXBjLm00CkBAIC0wLDAgKzEsMjAgQEAKKyMgRmluZCBhIGNvbXBpbGVyIGZvciBVbmlmaWVkIFBhcmFsbGVsIEMuCSAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtBTV9QUk9HX1VQQ10sCitbZG5sIFdlIG5lZWQgT0JKRVhUIGFuZCBFWEVFWFQsIGJ1dCBBdXRvY29uZiBkb2Vzbid0IG9mZmVyIGFueSBwdWJsaWMKK2RubCBtYWNybyB0byBjb21wdXRlIHRoZW0uICBVc2UgQUNfUFJPR19DQyBpbnN0ZWFkLgorQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19BUkdfVkFSKFtVUENdLCBbVW5pZmllZCBQYXJhbGxlbCBDIGNvbXBpbGVyIGNvbW1hbmRdKWRubAorQUNfQVJHX1ZBUihbVVBDRkxBR1NdLCBbVW5pZmllZCBQYXJhbGxlbCBDIGNvbXBpbGVyIGZsYWdzXSlkbmwKK0FDX0NIRUNLX1RPT0xTKFtVUENdLCBbbTRfZGVmYXVsdChbJDFdLCBbdXBjYyB1cGNdKV0sIFs6XSkKK2lmIHRlc3QgIiRVUEMiID0gOjsgdGhlbgorICBBQ19NU0dfRVJST1IoW25vIFVuaWZpZWQgUGFyYWxsZWwgQyBjb21waWxlciB3YXMgZm91bmRdLCBbNzddKQorZmkKK19BTV9JRl9PUFRJT04oW25vLWRlcGVuZGVuY2llc10sLCBbX0FNX0RFUEVOREVOQ0lFUyhbVVBDXSldKWRubAorXSkKZGlmZiAtLWdpdCBhL3NoYXJlL2FjbG9jYWwtMS4xMS92YWxhLm00IGIvc2hhcmUvYWNsb2NhbC0xLjExL3ZhbGEubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk1NzM0YQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2FjbG9jYWwtMS4xMS92YWxhLm00CkBAIC0wLDAgKzEsMjkgQEAKKyMgQXV0b2NvbmYgc3VwcG9ydCBmb3IgdGhlIFZhbGEgY29tcGlsZXIKKworIyBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNAorCisjIENoZWNrIHdoZXRoZXIgdGhlIFZhbGEgY29tcGlsZXIgZXhpc3RzIGluIGBQQVRIJy4gSWYgaXQgaXMgZm91bmQsIHRoZQorIyB2YXJpYWJsZSBWQUxBQyBpcyBzZXQuIE9wdGlvbmFsbHkgYSBtaW5pbXVtIHJlbGVhc2UgbnVtYmVyIG9mIHRoZQorIyBjb21waWxlciBjYW4gYmUgcmVxdWVzdGVkLgorIworIyBBTV9QUk9HX1ZBTEFDKFtNSU5JTVVNLVZFUlNJT05dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FNX1BST0dfVkFMQUNdLAorW0FDX1BBVEhfUFJPRyhbVkFMQUNdLCBbdmFsYWNdLCBbXSkKKyBBU19JRihbdGVzdCAteiAiJFZBTEFDIl0sCisgICBbQUNfTVNHX1dBUk4oW05vIFZhbGEgY29tcGlsZXIgZm91bmQuICBZb3Ugd2lsbCBub3QgYmUgYWJsZSB0byBjb21waWxlIC52YWxhIHNvdXJjZSBmaWxlcy5dKV0sCisgICBbQVNfSUYoW3Rlc3QgLW4gIiQxIl0sCisgICAgICBbQUNfTVNHX0NIRUNLSU5HKFskVkFMQUMgaXMgYXQgbGVhc3QgdmVyc2lvbiAkMV0pCisgICAgICAgYW1fX3ZhbGFfdmVyc2lvbj1gJFZBTEFDIC0tdmVyc2lvbiB8IHNlZCAncy9WYWxhICAqLy8nYAorICAgICAgIEFTX1ZFUlNJT05fQ09NUEFSRShbJDFdLCBbIiRhbV9fdmFsYV92ZXJzaW9uIl0sCisgICAgICAgICBbQUNfTVNHX1JFU1VMVChbeWVzXSldLAorICAgICAgICAgW0FDX01TR19SRVNVTFQoW3llc10pXSwKKyAgICAgICAgIFtBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgICAgQUNfTVNHX0VSUk9SKFtWYWxhICQxIG5vdCBmb3VuZC5dKV0pXSldKQorXSkKZGlmZiAtLWdpdCBhL3NoYXJlL2FjbG9jYWwvYXJnei5tNCBiL3NoYXJlL2FjbG9jYWwvYXJnei5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2MxYjExCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYWNsb2NhbC9hcmd6Lm00CkBAIC0wLDAgKzEsNzkgQEAKKyMgUG9ydGFiaWxpdHkgbWFjcm9zIGZvciBnbGliYyBhcmd6LiAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIworIyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiA8Z2FyeUBnbnUub3JnPgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDUgYXJnei5tNAorCitBQ19ERUZVTihbZ2xfRlVOQ19BUkdaXSwKK1tnbF9QUkVSRVFfQVJHWgorCitBQ19DSEVDS19IRUFERVJTKFthcmd6LmhdLCBbXSwgW10sIFtBQ19JTkNMVURFU19ERUZBVUxUXSkKKworQUNfQ0hFQ0tfVFlQRVMoW2Vycm9yX3RdLAorICBbXSwKKyAgW0FDX0RFRklORShbZXJyb3JfdF0sIFtpbnRdLAorICAgW0RlZmluZSB0byBhIHR5cGUgdG8gdXNlIGZvciBgZXJyb3JfdCcgaWYgaXQgaXMgbm90IG90aGVyd2lzZSBhdmFpbGFibGUuXSkKKyAgIEFDX0RFRklORShbX19lcnJvcl90X2RlZmluZWRdLCBbMV0sIFtEZWZpbmUgc28gdGhhdCBnbGliYy9nbnVsaWIgYXJncC5oCisgICAgZG9lcyBub3QgdHlwZWRlZiBlcnJvcl90Ll0pXSwKKyAgWyNpZiBkZWZpbmVkKEhBVkVfQVJHWl9IKQorIyAgaW5jbHVkZSA8YXJnei5oPgorI2VuZGlmXSkKKworQVJHWl9IPQorQUNfQ0hFQ0tfRlVOQ1MoW2FyZ3pfYWRkIGFyZ3pfYXBwZW5kIGFyZ3pfY291bnQgYXJnel9jcmVhdGVfc2VwIGFyZ3pfaW5zZXJ0IFwKKwlhcmd6X25leHQgYXJnel9zdHJpbmdpZnldLCBbXSwgW0FSR1pfSD1hcmd6Lmg7IEFDX0xJQk9CSihbYXJnel0pXSkKKworZG5sIGlmIGhhdmUgc3lzdGVtIGFyZ3ogZnVuY3Rpb25zLCBhbGxvdyBmb3JjZWQgdXNlIG9mCitkbmwgbGlibHRkbC1zdXBwbGllZCBpbXBsZW1lbnRhdGlvbiAoYW5kIGRlZmF1bHQgdG8gZG8gc28KK2RubCBvbiAia25vd24gYmFkIiBzeXN0ZW1zKS4gQ291bGQgdXNlIGEgcnVudGltZSBjaGVjaywgYnV0CitkbmwgKGEpIGRldGVjdGluZyBtYWxsb2MgaXNzdWVzIGlzIG5vdG9yaW91c2x5IHVucmVsaWFibGUKK2RubCAoYikgb25seSBrbm93biBzeXN0ZW0gdGhhdCBkZWNsYXJlcyBhcmd6IGZ1bmN0aW9ucywKK2RubCAgICAgcHJvdmlkZXMgdGhlbSwgeWV0IHRoZXkgYXJlIGJyb2tlbiwgaXMgY3lnd2luCitkbmwgICAgIHJlbGVhc2VzIHByaW9yIHRvIDE2LU1hci0yMDA3ICgxLjUuMjQgYW5kIGVhcmxpZXIpCitkbmwgU28sIGl0J3MgbW9yZSBzdHJhaWdodGZvcndhcmQgc2ltcGx5IHRvIHNwZWNpYWwgY2FzZQorZG5sIHRoaXMgZm9yIGtub3duIGJhZCBzeXN0ZW1zLgorQVNfSUYoW3Rlc3QgLXogIiRBUkdaX0giXSwKKyAgICBbQUNfQ0FDSEVfQ0hFQ0soCisgICAgICAgIFtpZiBhcmd6IGFjdHVhbGx5IHdvcmtzXSwKKyAgICAgICAgW2x0X2N2X3N5c19hcmd6X3dvcmtzXSwKKyAgICAgICAgW1tjYXNlICRob3N0X29zIGluICMoCisJICpjeWd3aW4qKQorCSAgIGx0X2N2X3N5c19hcmd6X3dvcmtzPW5vCisJICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0gbm87IHRoZW4KKwkgICAgIGx0X2N2X3N5c19hcmd6X3dvcmtzPSJndWVzc2luZyBubyIKKwkgICBlbHNlCisJICAgICBsdF9zZWRfZXh0cmFjdF9sZWFkaW5nX2RpZ2l0cz0ncy9eXChbMC05XC5dKlwpLiovXDEvJworCSAgICAgc2F2ZV9JRlM9JElGUworCSAgICAgSUZTPS0uCisJICAgICBzZXQgeCBgdW5hbWUgLXIgfCBzZWQgLWUgIiRsdF9zZWRfZXh0cmFjdF9sZWFkaW5nX2RpZ2l0cyJgCisJICAgICBJRlM9JHNhdmVfSUZTCisJICAgICBsdF9vc19tYWpvcj0kezItMH0KKwkgICAgIGx0X29zX21pbm9yPSR7My0wfQorCSAgICAgbHRfb3NfbWljcm89JHs0LTB9CisJICAgICBpZiB0ZXN0ICIkbHRfb3NfbWFqb3IiIC1ndCAxIFwKKwkJfHwgeyB0ZXN0ICIkbHRfb3NfbWFqb3IiIC1lcSAxIFwKKwkJICAmJiB7IHRlc3QgIiRsdF9vc19taW5vciIgLWd0IDUgXAorCQkgICAgfHwgeyB0ZXN0ICIkbHRfb3NfbWlub3IiIC1lcSA1IFwKKwkJICAgICAgJiYgdGVzdCAiJGx0X29zX21pY3JvIiAtZ3QgMjQ7IH07IH07IH07IHRoZW4KKwkgICAgICAgbHRfY3Zfc3lzX2FyZ3pfd29ya3M9eWVzCisJICAgICBmaQorCSAgIGZpCisJICAgOzsgIygKKwkgKikgbHRfY3Zfc3lzX2FyZ3pfd29ya3M9eWVzIDs7CisJIGVzYWNdXSkKKyAgICAgQVNfSUYoW3Rlc3QgJGx0X2N2X3N5c19hcmd6X3dvcmtzID0geWVzXSwKKyAgICAgICAgW0FDX0RFRklORShbSEFWRV9XT1JLSU5HX0FSR1pdLCAxLAorICAgICAgICAgICAgICAgICAgIFtUaGlzIHZhbHVlIGlzIHNldCB0byAxIHRvIGluZGljYXRlIHRoYXQgdGhlIHN5c3RlbSBhcmd6IGZhY2lsaXR5IHdvcmtzXSldLAorICAgICAgICBbQVJHWl9IPWFyZ3ouaAorICAgICAgICBBQ19MSUJPQkooW2FyZ3pdKV0pXSkKKworQUNfU1VCU1QoW0FSR1pfSF0pCitdKQorCisjIFByZXJlcXVpc2l0ZXMgb2YgbGliL2FyZ3ouYy4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfQVJHWl0sIFs6XSkKZGlmZiAtLWdpdCBhL3NoYXJlL2FjbG9jYWwvZ3RrLWRvYy5tNCBiL3NoYXJlL2FjbG9jYWwvZ3RrLWRvYy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2ZhMWU3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYWNsb2NhbC9ndGstZG9jLm00CkBAIC0wLDAgKzEsNjEgQEAKK2RubCAtKi0gbW9kZTogYXV0b2NvbmYgLSotCisKKyMgc2VyaWFsIDEKKworZG5sIFVzYWdlOgorZG5sICAgR1RLX0RPQ19DSEVDSyhbbWluaW11bS1ndGstZG9jLXZlcnNpb25dKQorQUNfREVGVU4oW0dUS19ET0NfQ0hFQ0tdLAorWworICBBQ19CRUZPUkUoW0FDX1BST0dfTElCVE9PTF0sWyQwXSlkbmwgc2V0dXAgbGlidG9vbCBmaXJzdAorICBBQ19CRUZPUkUoW0FNX1BST0dfTElCVE9PTF0sWyQwXSlkbmwgc2V0dXAgbGlidG9vbCBmaXJzdAorCisgIGRubCBjaGVjayBmb3IgdG9vbHMgd2UgYWRkZWQgZHVyaW5nIGRldmVsb3BtZW50CisgIEFDX1BBVEhfUFJPRyhbR1RLRE9DX0NIRUNLXSxbZ3RrZG9jLWNoZWNrXSkKKyAgQUNfUEFUSF9QUk9HUyhbR1RLRE9DX1JFQkFTRV0sW2d0a2RvYy1yZWJhc2VdLFt0cnVlXSkKKyAgQUNfUEFUSF9QUk9HKFtHVEtET0NfTUtQREZdLFtndGtkb2MtbWtwZGZdKQorCisgIGRubCBmb3Igb3ZlcnJpZGluZyB0aGUgZG9jdW1lbnRhdGlvbiBpbnN0YWxsYXRpb24gZGlyZWN0b3J5CisgIEFDX0FSR19XSVRIKFtodG1sLWRpcl0sCisgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1odG1sLWRpcj1QQVRIXSwgW3BhdGggdG8gaW5zdGFsbGVkIGRvY3NdKSwsCisgICAgW3dpdGhfaHRtbF9kaXI9JyR7ZGF0YWRpcn0vZ3RrLWRvYy9odG1sJ10pCisgIEhUTUxfRElSPSIkd2l0aF9odG1sX2RpciIKKyAgQUNfU1VCU1QoW0hUTUxfRElSXSkKKworICBkbmwgZW5hYmxlL2Rpc2FibGUgZG9jdW1lbnRhdGlvbiBidWlsZGluZworICBBQ19BUkdfRU5BQkxFKFtndGstZG9jXSwKKyAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZ3RrLWRvY10sCisgICAgICAgICAgICAgICAgICAgW3VzZSBndGstZG9jIHRvIGJ1aWxkIGRvY3VtZW50YXRpb24gW1tkZWZhdWx0PW5vXV1dKSwsCisgICAgW2VuYWJsZV9ndGtfZG9jPW5vXSkKKworICBpZiB0ZXN0IHgkZW5hYmxlX2d0a19kb2MgPSB4eWVzOyB0aGVuCisgICAgaWZlbHNlKFskMV0sW10sCisgICAgICBbUEtHX0NIRUNLX0VYSVNUUyhbZ3RrLWRvY10sLAorICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtndGstZG9jIG5vdCBpbnN0YWxsZWQgYW5kIC0tZW5hYmxlLWd0ay1kb2MgcmVxdWVzdGVkXSkpXSwKKyAgICAgIFtQS0dfQ0hFQ0tfRVhJU1RTKFtndGstZG9jID49ICQxXSwsCisgICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW1lvdSBuZWVkIHRvIGhhdmUgZ3RrLWRvYyA+PSAkMSBpbnN0YWxsZWQgdG8gYnVpbGQgJFBBQ0tBR0VfTkFNRV0pKV0pCisgIGZpCisKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIGd0ay1kb2MgZG9jdW1lbnRhdGlvbl0pCisgIEFDX01TR19SRVNVTFQoJGVuYWJsZV9ndGtfZG9jKQorCisgIGRubCBlbmFibGUvZGlzYWJsZSBvdXRwdXQgZm9ybWF0cworICBBQ19BUkdfRU5BQkxFKFtndGstZG9jLWh0bWxdLAorICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1ndGstZG9jLWh0bWxdLAorICAgICAgICAgICAgICAgICAgIFtidWlsZCBkb2N1bWVudGF0aW9uIGluIGh0bWwgZm9ybWF0IFtbZGVmYXVsdD15ZXNdXV0pLCwKKyAgICBbZW5hYmxlX2d0a19kb2NfaHRtbD15ZXNdKQorICAgIEFDX0FSR19FTkFCTEUoW2d0ay1kb2MtcGRmXSwKKyAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1ndGstZG9jLXBkZl0sCisgICAgICAgICAgICAgICAgICAgICBbYnVpbGQgZG9jdW1lbnRhdGlvbiBpbiBwZGYgZm9ybWF0IFtbZGVmYXVsdD1ub11dXSksLAorICAgICAgW2VuYWJsZV9ndGtfZG9jX3BkZj1ub10pCisKKyAgaWYgdGVzdCAteiAiJEdUS0RPQ19NS1BERiI7IHRoZW4KKyAgICBlbmFibGVfZ3RrX2RvY19wZGY9bm8KKyAgZmkKKworCisgIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfR1RLX0RPQ10sIFt0ZXN0IHgkZW5hYmxlX2d0a19kb2MgPSB4eWVzXSkKKyAgQU1fQ09ORElUSU9OQUwoW0dUS19ET0NfQlVJTERfSFRNTF0sIFt0ZXN0IHgkZW5hYmxlX2d0a19kb2NfaHRtbCA9IHh5ZXNdKQorICBBTV9DT05ESVRJT05BTChbR1RLX0RPQ19CVUlMRF9QREZdLCBbdGVzdCB4JGVuYWJsZV9ndGtfZG9jX3BkZiA9IHh5ZXNdKQorICBBTV9DT05ESVRJT05BTChbR1RLX0RPQ19VU0VfTElCVE9PTF0sIFt0ZXN0IC1uICIkTElCVE9PTCJdKQorICBBTV9DT05ESVRJT05BTChbR1RLX0RPQ19VU0VfUkVCQVNFXSwgW3Rlc3QgLW4gIiRHVEtET0NfUkVCQVNFIl0pCitdKQpkaWZmIC0tZ2l0IGEvc2hhcmUvYWNsb2NhbC9saWJ0b29sLm00IGIvc2hhcmUvYWNsb2NhbC9saWJ0b29sLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOTI0YTgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hY2xvY2FsL2xpYnRvb2wubTQKQEAgLTAsMCArMSw3NDM3IEBACisjIGxpYnRvb2wubTQgLSBDb25maWd1cmUgbGlidG9vbCBmb3IgdGhlIGhvc3Qgc3lzdGVtLiAtKi1BdXRvY29uZi0qLQorIworIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyAgICAgICAgICAgICAgICAgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCittNF9kZWZpbmUoW19MVF9DT1BZSU5HXSwgW2RubAorIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyAgICAgICAgICAgICAgICAgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyMKKyMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KKyMKKyMgR05VIExpYnRvb2wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgaWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAorIyBpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKKyMgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjCisjIEdOVSBMaWJ0b29sIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCBHTlUgTGlidG9vbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIGEgY29weQorIyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbCwgb3IKKyMgb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KK10pCisKKyMgc2VyaWFsIDU3IExUX0lOSVQKKworCisjIExUX1BSRVJFUShWRVJTSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcGxhaW4gYW5kIGV4aXQgaWYgdGhpcyBsaWJ0b29sIHZlcnNpb24gaXMgbGVzcyB0aGF0IFZFUlNJT04uCittNF9kZWZ1bihbTFRfUFJFUkVRXSwKK1ttNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUobTRfZGVmbihbTFRfUEFDS0FHRV9WRVJTSU9OXSksIFskMV0pLCAtMSwKKyAgICAgICBbbTRfZGVmYXVsdChbJDNdLAorCQkgICBbbTRfZmF0YWwoW0xpYnRvb2wgdmVyc2lvbiAkMSBvciBoaWdoZXIgaXMgcmVxdWlyZWRdLAorCQkgICAgICAgICAgICAgNjMpXSldLAorICAgICAgIFskMl0pXSkKKworCisjIF9MVF9DSEVDS19CVUlMRERJUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcGxhaW4gaWYgdGhlIGFic29sdXRlIGJ1aWxkIGRpcmVjdG9yeSBuYW1lIGNvbnRhaW5zIHVudXN1YWwgY2hhcmFjdGVycworbTRfZGVmdW4oW19MVF9DSEVDS19CVUlMRERJUl0sCitbY2FzZSBgcHdkYCBpbgorICAqXCAqIHwgKlwJKikKKyAgICBBQ19NU0dfV0FSTihbTGlidG9vbCBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCB3aGl0ZXNwYWNlIGluIGBwd2RgXSkgOzsKK2VzYWMKK10pCisKKworIyBMVF9JTklUKFtPUFRJT05TXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfSU5JVF0sCitbQUNfUFJFUkVRKFsyLjU4XSlkbmwgV2UgdXNlIEFDX0lOQ0xVREVTX0RFRkFVTFQKK0FDX1JFUVVJUkUoW0FDX0NPTkZJR19BVVhfRElSX0RFRkFVTFRdKWRubAorQUNfQkVGT1JFKFskMF0sIFtMVF9MQU5HXSlkbmwKK0FDX0JFRk9SRShbJDBdLCBbTFRfT1VUUFVUXSlkbmwKK0FDX0JFRk9SRShbJDBdLCBbTFRETF9JTklUXSlkbmwKK200X3JlcXVpcmUoW19MVF9DSEVDS19CVUlMRERJUl0pZG5sCisKK2RubCBBdXRvY29uZiBkb2Vzbid0IGNhdGNoIHVuZXhwYW5kZWQgTFRfIG1hY3JvcyBieSBkZWZhdWx0OgorbTRfcGF0dGVybl9mb3JiaWQoW15fP0xUX1tBLVpfXSskXSlkbmwKK200X3BhdHRlcm5fYWxsb3coW14oX0xUX0VPRnxMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XfExUX01VTFRJX01PRFVMRSkkXSlkbmwKK2RubCBhY2xvY2FsIGRvZXNuJ3QgcHVsbCBsdG9wdGlvbnMubTQsIGx0c3VnYXIubTQsIG9yIGx0dmVyc2lvbi5tNAorZG5sIHVubGVzcyB3ZSByZXF1aXJlIGFuIEFDX0RFRlVOZWQgbWFjcm86CitBQ19SRVFVSVJFKFtMVE9QVElPTlNfVkVSU0lPTl0pZG5sCitBQ19SRVFVSVJFKFtMVFNVR0FSX1ZFUlNJT05dKWRubAorQUNfUkVRVUlSRShbTFRWRVJTSU9OX1ZFUlNJT05dKWRubAorQUNfUkVRVUlSRShbTFRPQlNPTEVURV9WRVJTSU9OXSlkbmwKK200X3JlcXVpcmUoW19MVF9QUk9HX0xUTUFJTl0pZG5sCisKK19MVF9TSEVMTF9JTklUKFtTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofV0pCisKK2RubCBQYXJzZSBPUFRJT05TCitfTFRfU0VUX09QVElPTlMoWyQwXSwgWyQxXSkKKworIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgbGlidG9vbCB3aGVuIG5lZWRlZAorTElCVE9PTF9ERVBTPSIkbHRtYWluIgorCisjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCitBQ19TVUJTVChMSUJUT09MKWRubAorCitfTFRfU0VUVVAKKworIyBPbmx5IGV4cGFuZCBvbmNlOgorbTRfZGVmaW5lKFtMVF9JTklUXSkKK10pIyBMVF9JTklUCisKKyMgT2xkIG5hbWVzOgorQVVfQUxJQVMoW0FDX1BST0dfTElCVE9PTF0sIFtMVF9JTklUXSkKK0FVX0FMSUFTKFtBTV9QUk9HX0xJQlRPT0xdLCBbTFRfSU5JVF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX1BST0dfTElCVE9PTF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9QUk9HX0xJQlRPT0xdLCBbXSkKKworCisjIF9MVF9DQ19CQVNFTkFNRShDQykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDYWxjdWxhdGUgY2NfYmFzZW5hbWUuICBTa2lwIGtub3duIGNvbXBpbGVyIHdyYXBwZXJzIGFuZCBjcm9zcy1wcmVmaXguCittNF9kZWZ1bihbX0xUX0NDX0JBU0VOQU1FXSwKK1tmb3IgY2NfdGVtcCBpbiAkMSIiOyBkbworICBjYXNlICRjY190ZW1wIGluCisgICAgY29tcGlsZSB8ICpbW1xcL11dY29tcGlsZSB8IGNjYWNoZSB8ICpbW1xcL11dY2NhY2hlICkgOzsKKyAgICBkaXN0Y2MgfCAqW1tcXC9dXWRpc3RjYyB8IHB1cmlmeSB8ICpbW1xcL11dcHVyaWZ5ICkgOzsKKyAgICBcLSopIDs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCitjY19iYXNlbmFtZT1gJEVDSE8gIiRjY190ZW1wIiB8ICRTRUQgInMlLiovJSU7IHMlXiRob3N0X2FsaWFzLSUlImAKK10pCisKKworIyBfTFRfRklMRVVUSUxTX0RFRkFVTFRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSXQgaXMgb2theSB0byB1c2UgdGhlc2UgZmlsZSBjb21tYW5kcyBhbmQgYXNzdW1lIHRoZXkgaGF2ZSBiZWVuIHNldAorIyBzZW5zaWJseSBhZnRlciBgbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pJy4KK200X2RlZnVuKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSwKK1s6ICR7Q1A9ImNwIC1mIn0KKzogJHtNVj0ibXYgLWYifQorOiAke1JNPSJybSAtZiJ9CitdKSMgX0xUX0ZJTEVVVElMU19ERUZBVUxUUworCisKKyMgX0xUX1NFVFVQCisjIC0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9TRVRVUF0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKK0FDX1JFUVVJUkUoW19MVF9QUkVQQVJFX1NFRF9RVU9URV9WQVJTXSlkbmwKK0FDX1JFUVVJUkUoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSlkbmwKKworX0xUX0RFQ0woW10sIFtob3N0X2FsaWFzXSwgWzBdLCBbVGhlIGhvc3Qgc3lzdGVtXSlkbmwKK19MVF9ERUNMKFtdLCBbaG9zdF0sIFswXSlkbmwKK19MVF9ERUNMKFtdLCBbaG9zdF9vc10sIFswXSlkbmwKK2RubAorX0xUX0RFQ0woW10sIFtidWlsZF9hbGlhc10sIFswXSwgW1RoZSBidWlsZCBzeXN0ZW1dKWRubAorX0xUX0RFQ0woW10sIFtidWlsZF0sIFswXSlkbmwKK19MVF9ERUNMKFtdLCBbYnVpbGRfb3NdLCBbMF0pZG5sCitkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9MRF0pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX05NXSlkbmwKK2RubAorQUNfUkVRVUlSRShbQUNfUFJPR19MTl9TXSlkbmwKK3Rlc3QgLXogIiRMTl9TIiAmJiBMTl9TPSJsbiAtcyIKK19MVF9ERUNMKFtdLCBbTE5fU10sIFsxXSwgW1doZXRoZXIgd2UgbmVlZCBzb2Z0IG9yIGhhcmQgbGlua3NdKWRubAorZG5sCitBQ19SRVFVSVJFKFtMVF9DTURfTUFYX0xFTl0pZG5sCitfTFRfREVDTChbb2JqZXh0XSwgW2FjX29iamV4dF0sIFswXSwgW09iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKV0pZG5sCitfTFRfREVDTChbXSwgW2V4ZWV4dF0sIFswXSwgW0V4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKV0pZG5sCitkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTXSlkbmwKK200X3JlcXVpcmUoW19MVF9DTURfUkVMT0FEXSlkbmwKK200X3JlcXVpcmUoW19MVF9DSEVDS19NQUdJQ19NRVRIT0RdKWRubAorbTRfcmVxdWlyZShbX0xUX0NNRF9PTERfQVJDSElWRV0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX0dMT0JBTF9TWU1CT0xTXSlkbmwKKworX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoWworIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgorIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMgSU5JVC4KK2lmIHRlc3QgLW4gIlwke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCitdKQoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgIHNldG9wdCBOT19HTE9CX1NVQlNUCitmaQorCitfTFRfQ0hFQ0tfT0JKRElSCisKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisgICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworICAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCisgIGlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICAgIENPTExFQ1RfTkFNRVM9CisgICAgZXhwb3J0IENPTExFQ1RfTkFNRVMKKyAgZmkKKyAgOzsKK2VzYWMKKworIyBHbG9iYWwgdmFyaWFibGVzOgorb2ZpbGU9bGlidG9vbAorY2FuX2J1aWxkX3NoYXJlZD15ZXMKKworIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCisjIHdoaWNoIG5lZWRzICcubGliJykuCitsaWJleHQ9YQorCit3aXRoX2dudV9sZD0iJGx0X2N2X3Byb2dfZ251X2xkIgorCitvbGRfQ0M9IiRDQyIKK29sZF9DRkxBR1M9IiRDRkxBR1MiCisKKyMgU2V0IHNhbmUgZGVmYXVsdHMgZm9yIHZhcmlvdXMgdmFyaWFibGVzCit0ZXN0IC16ICIkQ0MiICYmIENDPWNjCit0ZXN0IC16ICIkTFRDQyIgJiYgTFRDQz0kQ0MKK3Rlc3QgLXogIiRMVENGTEFHUyIgJiYgTFRDRkxBR1M9JENGTEFHUwordGVzdCAteiAiJExEIiAmJiBMRD1sZAordGVzdCAteiAiJGFjX29iamV4dCIgJiYgYWNfb2JqZXh0PW8KKworX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisjIE9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIGZpbGUsIGlmIHRoZSBjaGVjayBtZXRob2QgcmVxdWlyZXMgaXQKK3Rlc3QgLXogIiRNQUdJQ19DTUQiICYmIE1BR0lDX0NNRD1maWxlCitjYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorZmlsZV9tYWdpYyopCisgIGlmIHRlc3QgIiRmaWxlX21hZ2ljX2NtZCIgPSAnJE1BR0lDX0NNRCc7IHRoZW4KKyAgICBfTFRfUEFUSF9NQUdJQworICBmaQorICA7OworZXNhYworCisjIFVzZSBDIGZvciB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGluIHRoZSBsaWJ0b29sIHNjcmlwdAorTFRfU1VQUE9SVEVEX1RBRyhbQ0NdKQorX0xUX0xBTkdfQ19DT05GSUcKK19MVF9MQU5HX0RFRkFVTFRfQ09ORklHCitfTFRfQ09ORklHX0NPTU1BTkRTCitdKSMgX0xUX1NFVFVQCisKKworIyBfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgYSBmZXcgc2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHAgdXMgZG8gcm9idXN0IHF1b3RpbmcuCittNF9kZWZ1bihbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdLAorWyMgQmFja3NsYXNoaWZ5IG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4KKyMgZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorc2VkX3F1b3RlX3N1YnN0PSdzL1woW1siYCRcXF1dXCkvXFxcMS9nJworCisjIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2RvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFtbImBcXF1dXCkvXFxcMS9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2hlbGwgdmFyaWFibGUgaW4gYQorIyBkb3VibGVfcXVvdGVfc3Vic3QnZWQgc3RyaW5nLgorZGVsYXlfdmFyaWFibGVfc3Vic3Q9J3MvXFxcXFxcXFxcXFwkL1xcXFxcXCQvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNpbmdsZSBxdW90ZS4KK2RlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdD0ncy8nXCcnLydcJ1xcXFxcXFwnXCcnL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBhdm9pZCBhY2NpZGVudGFsIGdsb2JiaW5nIGluIGV2YWxlZCBleHByZXNzaW9ucworbm9fZ2xvYl9zdWJzdD0ncy9cKi9cXFwqL2cnCitdKQorCisjIF9MVF9QUk9HX0xUTUFJTgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgTm90ZSB0aGF0IHRoaXMgY29kZSBpcyBjYWxsZWQgYm90aCBmcm9tIGBjb25maWd1cmUnLCBhbmQgYGNvbmZpZy5zdGF0dXMnCisjIG5vdyB0aGF0IHdlIHVzZSBBQ19DT05GSUdfQ09NTUFORFMgdG8gZ2VuZXJhdGUgbGlidG9vbC4gIE5vdGFibHksCisjIGBjb25maWcuc3RhdHVzJyBoYXMgbm8gdmFsdWUgZm9yIGFjX2F1eF9kaXIgdW5sZXNzIHdlIGFyZSB1c2luZyBBdXRvbWFrZSwKKyMgc28gd2UgcGFzcyBhIGNvcHkgYWxvbmcgdG8gbWFrZSBzdXJlIGl0IGhhcyBhIHNlbnNpYmxlIHZhbHVlIGFueXdheS4KK200X2RlZnVuKFtfTFRfUFJPR19MVE1BSU5dLAorW200X2lmZGVmKFtBQ19SRVFVSVJFX0FVWF9GSUxFXSwgW0FDX1JFUVVJUkVfQVVYX0ZJTEUoW2x0bWFpbi5zaF0pXSlkbmwKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFthY19hdXhfZGlyPSckYWNfYXV4X2RpciddKQorbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCitdKSMgX0xUX1BST0dfTFRNQUlOCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQWNjdW11bGF0ZSBjb2RlIGZvciBjcmVhdGluZyBsaWJ0b29sLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIFNvIHRoYXQgd2UgY2FuIHJlY3JlYXRlIGEgZnVsbCBsaWJ0b29sIHNjcmlwdCBpbmNsdWRpbmcgYWRkaXRpb25hbAorIyB0YWdzLCB3ZSBhY2N1bXVsYXRlIHRoZSBjaHVua3Mgb2YgY29kZSB0byBzZW5kIHRvIEFDX0NPTkZJR19DT01NQU5EUworIyBpbiBtYWNyb3MgYW5kIHRoZW4gbWFrZSBhIHNpbmdsZSBjYWxsIGF0IHRoZSBlbmQgdXNpbmcgdGhlIGBsaWJ0b29sJworIyBsYWJlbC4KKworCisjIF9MVF9DT05GSUdfTElCVE9PTF9JTklUKFtJTklULUNPTU1BTkRTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWdpc3RlciBJTklULUNPTU1BTkRTIHRvIGJlIHBhc3NlZCB0byBBQ19DT05GSUdfQ09NTUFORFMgbGF0ZXIuCittNF9kZWZpbmUoW19MVF9DT05GSUdfTElCVE9PTF9JTklUXSwKK1ttNF9pZnZhbChbJDFdLAorICAgICAgICAgIFttNF9hcHBlbmQoW19MVF9PVVRQVVRfTElCVE9PTF9JTklUXSwKKyAgICAgICAgICAgICAgICAgICAgIFskMQorXSldKV0pCisKKyMgSW5pdGlhbGl6ZS4KK200X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0lOSVRdKQorCisKKyMgX0xUX0NPTkZJR19MSUJUT09MKFtDT01NQU5EU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWdpc3RlciBDT01NQU5EUyB0byBiZSBwYXNzZWQgdG8gQUNfQ09ORklHX0NPTU1BTkRTIGxhdGVyLgorbTRfZGVmaW5lKFtfTFRfQ09ORklHX0xJQlRPT0xdLAorW200X2lmdmFsKFskMV0sCisgICAgICAgICAgW200X2FwcGVuZChbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSwKKyAgICAgICAgICAgICAgICAgICAgIFskMQorXSldKV0pCisKKyMgSW5pdGlhbGl6ZS4KK200X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSkKKworCisjIF9MVF9DT05GSUdfU0FWRV9DT01NQU5EUyhbQ09NTUFORFNdLCBbSU5JVF9DT01NQU5EU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTXSwKK1tfTFRfQ09ORklHX0xJQlRPT0woWyQxXSkKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFskMl0pCitdKQorCisKKyMgX0xUX0ZPUk1BVF9DT01NRU5UKFtDT01NRU5UXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWRkIGxlYWRpbmcgY29tbWVudCBtYXJrcyB0byB0aGUgc3RhcnQgb2YgZWFjaCBsaW5lLCBhbmQgYSB0cmFpbGluZworIyBmdWxsLXN0b3AgdG8gdGhlIHdob2xlIGNvbW1lbnQgaWYgb25lIGlzIG5vdCBwcmVzZW50IGFscmVhZHkuCittNF9kZWZpbmUoW19MVF9GT1JNQVRfQ09NTUVOVF0sCitbbTRfaWZ2YWwoWyQxXSwgWworbTRfYnBhdHN1YnN0KFttNF9icGF0c3Vic3QoWyQxXSwgW14gKl0sIFsjIF0pXSwKKyAgICAgICAgICAgICAgW1snYCRcXV0sIFtcXFwmXSldbTRfYm1hdGNoKFskMV0sIFtbIT8uXSRdLCBbXSwgWy5dKQorKV0pCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEZJWE1FOiBFbGltaW5hdGUgVkFSTkFNRSAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBfTFRfREVDTChbQ09ORklHTkFNRV0sIFZBUk5BTUUsIFZBTFVFLCBbREVTQ1JJUFRJT05dLCBbSVMtVEFHR0VEP10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ09ORklHTkFNRSBpcyB0aGUgbmFtZSBnaXZlbiB0byB0aGUgdmFsdWUgaW4gdGhlIGxpYnRvb2wgc2NyaXB0LgorIyBWQVJOQU1FIGlzIHRoZSAoYmFzZSkgbmFtZSB1c2VkIGluIHRoZSBjb25maWd1cmUgc2NyaXB0LgorIyBWQUxVRSBtYXkgYmUgMCwgMSBvciAyIGZvciBhIGNvbXB1dGVkIHF1b3RlIGVzY2FwZWQgdmFsdWUgYmFzZWQgb24KKyMgVkFSTkFNRS4gIEFueSBvdGhlciB2YWx1ZSB3aWxsIGJlIHVzZWQgZGlyZWN0bHkuCittNF9kZWZpbmUoW19MVF9ERUNMXSwKK1tsdF9pZl9hcHBlbmRfdW5pcShbbHRfZGVjbF92YXJuYW1lc10sIFskMl0sIFssIF0sCisgICAgW2x0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwgW2xpYnRvb2xfbmFtZV0sCisJW200X2lmdmFsKFskMV0sIFskMV0sIFskMl0pXSkKKyAgICBsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sIFt2YWx1ZV0sIFskM10pCisgICAgbTRfaWZ2YWwoWyQ0XSwKKwlbbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbZGVzY3JpcHRpb25dLCBbJDRdKV0pCisgICAgbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLAorCVt0YWdnZWQ/XSwgW200X2lmdmFsKFskNV0sIFt5ZXNdLCBbbm9dKV0pXSkKK10pCisKKworIyBfTFRfVEFHREVDTChbQ09ORklHTkFNRV0sIFZBUk5BTUUsIFZBTFVFLCBbREVTQ1JJUFRJT05dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfVEFHREVDTF0sIFtfTFRfREVDTChbJDFdLCBbJDJdLCBbJDNdLCBbJDRdLCBbeWVzXSldKQorCisKKyMgbHRfZGVjbF90YWdfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX3RhZ192YXJuYW1lc10sCitbX2x0X2RlY2xfZmlsdGVyKFt0YWdnZWQ/XSwgW3llc10sICRAKV0pCisKKworIyBfbHRfZGVjbF9maWx0ZXIoU1VCS0VZLCBWQUxVRSwgW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19sdF9kZWNsX2ZpbHRlcl0sCitbbTRfY2FzZShbJCNdLAorICBbMF0sIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkI10pXSwKKyAgWzFdLCBbbTRfZmF0YWwoWyQwOiB0b28gZmV3IGFyZ3VtZW50czogJCM6ICQxXSldLAorICBbMl0sIFtsdF9kaWN0X2ZpbHRlcihbbHRfZGVjbF9kaWN0XSwgWyQxXSwgWyQyXSwgW10sIGx0X2RlY2xfdmFybmFtZXMpXSwKKyAgWzNdLCBbbHRfZGljdF9maWx0ZXIoW2x0X2RlY2xfZGljdF0sIFskMV0sIFskMl0sIFskM10sIGx0X2RlY2xfdmFybmFtZXMpXSwKKyAgW2x0X2RpY3RfZmlsdGVyKFtsdF9kZWNsX2RpY3RdLCAkQCldKVtdZG5sCitdKQorCisKKyMgbHRfZGVjbF9xdW90ZV92YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF9xdW90ZV92YXJuYW1lc10sCitbX2x0X2RlY2xfZmlsdGVyKFt2YWx1ZV0sIFsxXSwgJEApXSkKKworCisjIGx0X2RlY2xfZHF1b3RlX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF9kcXVvdGVfdmFybmFtZXNdLAorW19sdF9kZWNsX2ZpbHRlcihbdmFsdWVdLCBbMl0sICRAKV0pCisKKworIyBsdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZChbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfdmFybmFtZXNfdGFnZ2VkXSwKK1ttNF9hc3NlcnQoWyQjIDw9IDJdKWRubAorXyQwKG00X3F1b3RlKG00X2RlZmF1bHQoWyQxXSwgW1ssIF1dKSksCisgICAgbTRfaWZ2YWwoWyQyXSwgW1skMl1dLCBbbTRfZHF1b3RlKGx0X2RlY2xfdGFnX3Zhcm5hbWVzKV0pLAorICAgIG00X3NwbGl0KG00X25vcm1hbGl6ZShtNF9xdW90ZShfTFRfVEFHUykpLCBbIF0pKV0pCittNF9kZWZpbmUoW19sdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZF0sCitbbTRfaWZ2YWwoWyQzXSwgW2x0X2NvbWJpbmUoWyQxXSwgWyQyXSwgW19dLCAkMyldKV0pCisKKworIyBsdF9kZWNsX2FsbF92YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfYWxsX3Zhcm5hbWVzXSwKK1tfJDAobTRfcXVvdGUobTRfZGVmYXVsdChbJDFdLCBbWywgXV0pKSwKKyAgICAgbTRfaWYoWyQyXSwgW10sCisJICAgbTRfcXVvdGUobHRfZGVjbF92YXJuYW1lcyksCisJbTRfcXVvdGUobTRfc2hpZnQoJEApKSkpW11kbmwKK10pCittNF9kZWZpbmUoW19sdF9kZWNsX2FsbF92YXJuYW1lc10sCitbbHRfam9pbigkQCwgbHRfZGVjbF92YXJuYW1lc190YWdnZWQoWyQxXSwKKwkJCWx0X2RlY2xfdGFnX3Zhcm5hbWVzKFtbLCBdXSwgbTRfc2hpZnQoJEApKSkpZG5sCitdKQorCisKKyMgX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRShbVkFSTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBRdW90ZSBhIHZhcmlhYmxlIHZhbHVlLCBhbmQgZm9yd2FyZCBpdCB0byBgY29uZmlnLnN0YXR1cycgc28gdGhhdCBpdHMKKyMgZGVjbGFyYXRpb24gdGhlcmUgd2lsbCBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIGluIGBjb25maWd1cmUnLiAgVkFSTkFNRQorIyBtdXN0IGhhdmUgYSBzaW5nbGUgcXVvdGUgZGVsaW1pdGVkIHZhbHVlIGZvciB0aGlzIHRvIHdvcmsuCittNF9kZWZpbmUoW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkVdLAorWyQxPSdgJEVDSE8gIiRdWyQxIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCddKQorCisKKyMgX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSQVRJT05TCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBXZSBkZWxpbWl0IGxpYnRvb2wgY29uZmlnIHZhcmlhYmxlcyB3aXRoIHNpbmdsZSBxdW90ZXMsIHNvIHdoZW4KKyMgd2Ugd3JpdGUgdGhlbSB0byBjb25maWcuc3RhdHVzLCB3ZSBoYXZlIHRvIGJlIHN1cmUgdG8gcXVvdGUgYWxsCisjIGVtYmVkZGVkIHNpbmdsZSBxdW90ZXMgcHJvcGVybHkuICBJbiBjb25maWd1cmUsIHRoaXMgbWFjcm8gZXhwYW5kcworIyBlYWNoIHZhcmlhYmxlIGRlY2xhcmVkIHdpdGggX0xUX0RFQ0wgKGFuZCBfTFRfVEFHREVDTCkgaW50bzoKKyMKKyMgICAgPHZhcj49J2AkRUNITyAiJDx2YXI+IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK200X2RlZnVuKFtfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJBVElPTlNdLAorW200X2ZvcmVhY2goW19sdF92YXJdLCBtNF9xdW90ZShsdF9kZWNsX2FsbF92YXJuYW1lcyksCisgICAgW200X24oW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkUoX2x0X3ZhcildKV0pXSkKKworCisjIF9MVF9MSUJUT09MX1RBR1MKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBPdXRwdXQgY29tbWVudCBhbmQgbGlzdCBvZiB0YWdzIHN1cHBvcnRlZCBieSB0aGUgc2NyaXB0CittNF9kZWZ1bihbX0xUX0xJQlRPT0xfVEFHU10sCitbX0xUX0ZPUk1BVF9DT01NRU5UKFtUaGUgbmFtZXMgb2YgdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHRdKWRubAorYXZhaWxhYmxlX3RhZ3M9Il9MVF9UQUdTImRubAorXSkKKworCisjIF9MVF9MSUJUT09MX0RFQ0xBUkUoVkFSTkFNRSwgW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4dHJhY3QgdGhlIGRpY3Rpb25hcnkgdmFsdWVzIGZvciBWQVJOQU1FIChvcHRpb25hbGx5IHdpdGggVEFHKSBhbmQKKyMgZXhwYW5kIHRvIGEgY29tbWVudGVkIHNoZWxsIHZhcmlhYmxlIHNldHRpbmc6CisjCisjICAgICMgU29tZSBjb21tZW50IGFib3V0IHdoYXQgVkFSIGlzIGZvci4KKyMgICAgdmlzaWJsZV9uYW1lPSRsdF9pbnRlcm5hbF9uYW1lCittNF9kZWZpbmUoW19MVF9MSUJUT09MX0RFQ0xBUkVdLAorW19MVF9GT1JNQVRfQ09NTUVOVChtNF9xdW90ZShsdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLAorCQkJCQkgICBbZGVzY3JpcHRpb25dKSkpW11kbmwKK200X3B1c2hkZWYoW19saWJ0b29sX25hbWVdLAorICAgIG00X3F1b3RlKGx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFtsaWJ0b29sX25hbWVdKSkpW11kbmwKK200X2Nhc2UobTRfcXVvdGUobHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwgW3ZhbHVlXSkpLAorICAgIFswXSwgW19saWJ0b29sX25hbWU9WyRdJDFdLAorICAgIFsxXSwgW19saWJ0b29sX25hbWU9JGx0X1tdJDFdLAorICAgIFsyXSwgW19saWJ0b29sX25hbWU9JGx0X1tdJDFdLAorICAgIFtfbGlidG9vbF9uYW1lPWx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFt2YWx1ZV0pXSlbXWRubAorbTRfaWZ2YWwoWyQyXSwgW18kMl0pW11tNF9wb3BkZWYoW19saWJ0b29sX25hbWVdKVtdZG5sCitdKQorCisKKyMgX0xUX0xJQlRPT0xfQ09ORklHX1ZBUlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBjb21tZW50ZWQgZGVjbGFyYXRpb25zIG9mIG5vbi10YWdnZWQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzCisjIHN1aXRhYmxlIGZvciBpbnNlcnRpb24gaW4gdGhlIExJQlRPT0wgQ09ORklHIHNlY3Rpb24gb2YgdGhlIGBsaWJ0b29sJworIyBzY3JpcHQuICBUYWdnZWQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzIChldmVuIGZvciB0aGUgTElCVE9PTCBDT05GSUcKKyMgc2VjdGlvbikgYXJlIHByb2R1Y2VkIGJ5IF9MVF9MSUJUT09MX1RBR19WQVJTLgorbTRfZGVmdW4oW19MVF9MSUJUT09MX0NPTkZJR19WQVJTXSwKK1ttNF9mb3JlYWNoKFtfbHRfdmFyXSwKKyAgICBtNF9xdW90ZShfbHRfZGVjbF9maWx0ZXIoW3RhZ2dlZD9dLCBbbm9dLCBbXSwgbHRfZGVjbF92YXJuYW1lcykpLAorICAgIFttNF9uKFtfTFRfTElCVE9PTF9ERUNMQVJFKF9sdF92YXIpXSldKV0pCisKKworIyBfTFRfTElCVE9PTF9UQUdfVkFSUyhUQUcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX0xJQlRPT0xfVEFHX1ZBUlNdLAorW200X2ZvcmVhY2goW19sdF92YXJdLCBtNF9xdW90ZShsdF9kZWNsX3RhZ192YXJuYW1lcyksCisgICAgW200X24oW19MVF9MSUJUT09MX0RFQ0xBUkUoX2x0X3ZhciwgWyQxXSldKV0pXSkKKworCisjIF9MVF9UQUdWQVIoVkFSTkFNRSwgW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX1RBR1ZBUl0sIFttNF9pZnZhbChbJDJdLCBbJDFfJDJdLCBbJDFdKV0pCisKKworIyBfTFRfQ09ORklHX0NPTU1BTkRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VuZCBhY2N1bXVsYXRlZCBvdXRwdXQgdG8gJENPTkZJR19TVEFUVVMuICBUaGFua3MgdG8gdGhlIGxpc3RzIG9mCisjIHZhcmlhYmxlcyBmb3Igc2luZ2xlIGFuZCBkb3VibGUgcXVvdGUgZXNjYXBpbmcgd2Ugc2F2ZWQgZnJvbSBjYWxscworIyB0byBfTFRfREVDTCwgd2UgY2FuIHB1dCBxdW90ZSBlc2NhcGVkIHZhcmlhYmxlcyBkZWNsYXJhdGlvbnMKKyMgaW50byBgY29uZmlnLnN0YXR1cycsIGFuZCB0aGVuIHRoZSBzaGVsbCBjb2RlIHRvIHF1b3RlIGVzY2FwZSB0aGVtIGluCisjIGZvciBsb29wcyBpbiBgY29uZmlnLnN0YXR1cycuICBGaW5hbGx5LCBhbnkgYWRkaXRpb25hbCBjb2RlIGFjY3VtdWxhdGVkCisjIGZyb20gY2FsbHMgdG8gX0xUX0NPTkZJR19MSUJUT09MX0lOSVQgaXMgZXhwYW5kZWQuCittNF9kZWZ1bihbX0xUX0NPTkZJR19DT01NQU5EU10sCitbQUNfUFJPVklERV9JRkVMU0UoW0xUX09VVFBVVF0sCisJZG5sIElmIHRoZSBsaWJ0b29sIGdlbmVyYXRpb24gY29kZSBoYXMgYmVlbiBwbGFjZWQgaW4gJENPTkZJR19MVCwKKwlkbmwgaW5zdGVhZCBvZiBkdXBsaWNhdGluZyBpdCBhbGwgb3ZlciBhZ2FpbiBpbnRvIGNvbmZpZy5zdGF0dXMsCisJZG5sIHRoZW4gd2Ugd2lsbCBoYXZlIGNvbmZpZy5zdGF0dXMgcnVuICRDT05GSUdfTFQgbGF0ZXIsIHNvIGl0CisJZG5sIG5lZWRzIHRvIGtub3cgd2hhdCBuYW1lIGlzIHN0b3JlZCB0aGVyZToKKyAgICAgICAgW0FDX0NPTkZJR19DT01NQU5EUyhbbGlidG9vbF0sCisgICAgICAgICAgICBbJFNIRUxMICRDT05GSUdfTFQgfHwgQVNfRVhJVCgxKV0sIFtDT05GSUdfTFQ9JyRDT05GSUdfTFQnXSldLAorICAgIGRubCBJZiB0aGUgbGlidG9vbCBnZW5lcmF0aW9uIGNvZGUgaXMgZGVzdGluZWQgZm9yIGNvbmZpZy5zdGF0dXMsCisgICAgZG5sIGV4cGFuZCB0aGUgYWNjdW11bGF0ZWQgY29tbWFuZHMgYW5kIGluaXQgY29kZSBub3c6CisgICAgW0FDX0NPTkZJR19DT01NQU5EUyhbbGlidG9vbF0sCisgICAgICAgIFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNdLCBbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTX0lOSVRdKV0pCitdKSNfTFRfQ09ORklHX0NPTU1BTkRTCisKKworIyBJbml0aWFsaXplLgorbTRfZGVmaW5lKFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNfSU5JVF0sCitbCisKKyMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0CisjIGlmIENEUEFUSCBpcyBzZXQuCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK3NlZF9xdW90ZV9zdWJzdD0nJHNlZF9xdW90ZV9zdWJzdCcKK2RvdWJsZV9xdW90ZV9zdWJzdD0nJGRvdWJsZV9xdW90ZV9zdWJzdCcKK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSckZGVsYXlfdmFyaWFibGVfc3Vic3QnCitfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJBVElPTlMKK0xUQ0M9JyRMVENDJworTFRDRkxBR1M9JyRMVENGTEFHUycKK2NvbXBpbGVyPSckY29tcGlsZXJfREVGQVVMVCcKKworIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgorZnVuY19mYWxsYmFja19lY2hvICgpCit7CisgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCitcJFtdMQorX0xURUNIT19FT0YnCit9CisKKyMgUXVvdGUgZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIGx0X2RlY2xfYWxsX3Zhcm5hbWVzKFtbIFwKK11dLCBsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzKTsgZG8KKyAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KKyAgICAqW1tcXFxcXFxcYFxcIlxcXCRdXSopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCisgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgorZm9yIHZhciBpbiBsdF9kZWNsX2FsbF92YXJuYW1lcyhbWyBcCitdXSwgbHRfZGVjbF9kcXVvdGVfdmFybmFtZXMpOyBkbworICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgorICAgICpbW1xcXFxcXFxgXFwiXFxcJF1dKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCitfTFRfT1VUUFVUX0xJQlRPT0xfSU5JVAorXSkKKworIyBfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVChGSUxFLCBbQ09NTUVOVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBHZW5lcmF0ZSBhIGNoaWxkIHNjcmlwdCBGSUxFIHdpdGggYWxsIGluaXRpYWxpemF0aW9uIG5lY2Vzc2FyeSB0bworIyByZXVzZSB0aGUgZW52aXJvbm1lbnQgbGVhcm5lZCBieSB0aGUgcGFyZW50IHNjcmlwdCwgYW5kIG1ha2UgdGhlCisjIGZpbGUgZXhlY3V0YWJsZS4gIElmIENPTU1FTlQgaXMgc3VwcGxpZWQsIGl0IGlzIGluc2VydGVkIGFmdGVyIHRoZQorIyBgIyEnIHNlcXVlbmNlIGJ1dCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gdGV4dCBiZWdpbnMuICBBZnRlciB0aGlzCisjIG1hY3JvLCBhZGRpdGlvbmFsIHRleHQgY2FuIGJlIGFwcGVuZGVkIHRvIEZJTEUgdG8gZm9ybSB0aGUgYm9keSBvZgorIyB0aGUgY2hpbGQgc2NyaXB0LiAgVGhlIG1hY3JvIGVuZHMgd2l0aCBub24temVybyBzdGF0dXMgaWYgdGhlCisjIGZpbGUgY291bGQgbm90IGJlIGZ1bGx5IHdyaXR0ZW4gKHN1Y2ggYXMgaWYgdGhlIGRpc2sgaXMgZnVsbCkuCittNF9pZmRlZihbQVNfSU5JVF9HRU5FUkFURURdLAorW200X2RlZnVuKFtfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVF0sW0FTX0lOSVRfR0VORVJBVEVEKCRAKV0pXSwKK1ttNF9kZWZ1bihbX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVRdLAorW200X3JlcXVpcmUoW0FTX1BSRVBBUkVdKV1kbmwKK1ttNF9wdXNoZGVmKFtBU19NRVNTQUdFX0xPR19GRF0pXWRubAorW2x0X3dyaXRlX2ZhaWw9MAorY2F0ID4kMSA8PF9BU0VPRiB8fCBsdF93cml0ZV9mYWlsPTEKKyMhICRTSEVMTAorIyBHZW5lcmF0ZWQgYnkgJGFzX21lLgorJDIKK1NIRUxMPVwke0NPTkZJR19TSEVMTC0kU0hFTEx9CitleHBvcnQgU0hFTEwKK19BU0VPRgorY2F0ID4+JDEgPDxcX0FTRU9GIHx8IGx0X3dyaXRlX2ZhaWw9MQorQVNfU0hFTExfU0FOSVRJWkUKK19BU19QUkVQQVJFCitleGVjIEFTX01FU1NBR0VfRkQ+JjEKK19BU0VPRgordGVzdCAkbHRfd3JpdGVfZmFpbCA9IDAgJiYgY2htb2QgK3ggJDFbXWRubAorbTRfcG9wZGVmKFtBU19NRVNTQUdFX0xPR19GRF0pXSldKSMgX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVQKKworIyBMVF9PVVRQVVQKKyMgLS0tLS0tLS0tCisjIFRoaXMgbWFjcm8gYWxsb3dzIGVhcmx5IGdlbmVyYXRpb24gb2YgdGhlIGxpYnRvb2wgc2NyaXB0IChiZWZvcmUKKyMgQUNfT1VUUFVUIGlzIGNhbGxlZCksIGluY2FzZSBpdCBpcyB1c2VkIGluIGNvbmZpZ3VyZSBmb3IgY29tcGlsYXRpb24KKyMgdGVzdHMuCitBQ19ERUZVTihbTFRfT1VUUFVUXSwKK1s6ICR7Q09ORklHX0xUPS4vY29uZmlnLmx0fQorQUNfTVNHX05PVElDRShbY3JlYXRpbmcgJENPTkZJR19MVF0pCitfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVChbIiRDT05GSUdfTFQiXSwKK1sjIFJ1biB0aGlzIGZpbGUgdG8gcmVjcmVhdGUgYSBsaWJ0b29sIHN0dWIgd2l0aCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLl0pCisKK2NhdCA+PiIkQ09ORklHX0xUIiA8PFxfTFRFT0YKK2x0X2NsX3NpbGVudD1mYWxzZQorZXhlYyBBU19NRVNTQUdFX0xPR19GRD4+Y29uZmlnLmxvZworeworICBlY2hvCisgIEFTX0JPWChbUnVubmluZyAkYXNfbWUuXSkKK30gPiZBU19NRVNTQUdFX0xPR19GRAorCitsdF9jbF9oZWxwPSJcCitcYCRhc19tZScgY3JlYXRlcyBhIGxvY2FsIGxpYnRvb2wgc3R1YiBmcm9tIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sCitmb3IgdXNlIGluIGZ1cnRoZXIgY29uZmlndXJlIHRpbWUgdGVzdHMgYmVmb3JlIHRoZSByZWFsIGxpYnRvb2wgaXMKK2dlbmVyYXRlZC4KKworVXNhZ2U6ICRbMF0gW1tPUFRJT05TXV0KKworICAtaCwgLS1oZWxwICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLVYsIC0tdmVyc2lvbiAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKyAgLXEsIC0tcXVpZXQgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcworICAtZCwgLS1kZWJ1ZyAgICAgZG9uJ3QgcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcworCitSZXBvcnQgYnVncyB0byA8YnVnLWxpYnRvb2xAZ251Lm9yZz4uIgorCitsdF9jbF92ZXJzaW9uPSJcCittNF9pZnNldChbQUNfUEFDS0FHRV9OQU1FXSwgW0FDX1BBQ0tBR0VfTkFNRSBdKWNvbmZpZy5sdFtdZG5sCittNF9pZnNldChbQUNfUEFDS0FHRV9WRVJTSU9OXSwgWyBBQ19QQUNLQUdFX1ZFUlNJT05dKQorY29uZmlndXJlZCBieSAkWzBdLCBnZW5lcmF0ZWQgYnkgbTRfUEFDS0FHRV9TVFJJTkcuCisKK0NvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgY29uZmlnLmx0IHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitnaXZlcyB1bmxpbWl0ZWQgcGVybWlzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCisKK3doaWxlIHRlc3QgJFsjXSAhPSAwCitkbworICBjYXNlICRbMV0gaW4KKyAgICAtLXZlcnNpb24gfCAtLXYqIHwgLVYgKQorICAgICAgZWNobyAiJGx0X2NsX3ZlcnNpb24iOyBleGl0IDAgOzsKKyAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQorICAgICAgZWNobyAiJGx0X2NsX2hlbHAiOyBleGl0IDAgOzsKKyAgICAtLWRlYnVnIHwgLS1kKiB8IC1kICkKKyAgICAgIGRlYnVnPTogOzsKKyAgICAtLXF1aWV0IHwgLS1xKiB8IC0tc2lsZW50IHwgLS1zKiB8IC1xICkKKyAgICAgIGx0X2NsX3NpbGVudD06IDs7CisKKyAgICAtKikgQUNfTVNHX0VSUk9SKFt1bnJlY29nbml6ZWQgb3B0aW9uOiAkWzFdCitUcnkgXGAkWzBdIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXSkgOzsKKworICAgICopIEFDX01TR19FUlJPUihbdW5yZWNvZ25pemVkIGFyZ3VtZW50OiAkWzFdCitUcnkgXGAkWzBdIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXSkgOzsKKyAgZXNhYworICBzaGlmdAorZG9uZQorCitpZiAkbHRfY2xfc2lsZW50OyB0aGVuCisgIGV4ZWMgQVNfTUVTU0FHRV9GRD4vZGV2L251bGwKK2ZpCitfTFRFT0YKKworY2F0ID4+IiRDT05GSUdfTFQiIDw8X0xURU9GCitfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNfSU5JVAorX0xURU9GCisKK2NhdCA+PiIkQ09ORklHX0xUIiA8PFxfTFRFT0YKK0FDX01TR19OT1RJQ0UoW2NyZWF0aW5nICRvZmlsZV0pCitfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFMKK0FTX0VYSVQoMCkKK19MVEVPRgorY2htb2QgK3ggIiRDT05GSUdfTFQiCisKKyMgY29uZmlndXJlIGlzIHdyaXRpbmcgdG8gY29uZmlnLmxvZywgYnV0IGNvbmZpZy5sdCBkb2VzIGl0cyBvd24gcmVkaXJlY3Rpb24sCisjIGFwcGVuZGluZyB0byBjb25maWcubG9nLCB3aGljaCBmYWlscyBvbiBET1MsIGFzIGNvbmZpZy5sb2cgaXMgc3RpbGwga2VwdAorIyBvcGVuIGJ5IGNvbmZpZ3VyZS4gIEhlcmUgd2UgZXhlYyB0aGUgRkQgdG8gL2Rldi9udWxsLCBlZmZlY3RpdmVseSBjbG9zaW5nCisjIGNvbmZpZy5sb2csIHNvIGl0IGNhbiBiZSBwcm9wZXJseSAocmUpb3BlbmVkIGFuZCBhcHBlbmRlZCB0byBieSBjb25maWcubHQuCitsdF9jbF9zdWNjZXNzPToKK3Rlc3QgIiRzaWxlbnQiID0geWVzICYmCisgIGx0X2NvbmZpZ19sdF9hcmdzPSIkbHRfY29uZmlnX2x0X2FyZ3MgLS1xdWlldCIKK2V4ZWMgQVNfTUVTU0FHRV9MT0dfRkQ+L2Rldi9udWxsCiskU0hFTEwgIiRDT05GSUdfTFQiICRsdF9jb25maWdfbHRfYXJncyB8fCBsdF9jbF9zdWNjZXNzPWZhbHNlCitleGVjIEFTX01FU1NBR0VfTE9HX0ZEPj5jb25maWcubG9nCiskbHRfY2xfc3VjY2VzcyB8fCBBU19FWElUKDEpCitdKSMgTFRfT1VUUFVUCisKKworIyBfTFRfQ09ORklHKFRBRykKKyMgLS0tLS0tLS0tLS0tLS0tCisjIElmIFRBRyBpcyB0aGUgYnVpbHQtaW4gdGFnLCBjcmVhdGUgYW4gaW5pdGlhbCBsaWJ0b29sIHNjcmlwdCB3aXRoIGEKKyMgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIHVudGFnZ2VkIGNvbmZpZyB2YXJzLiAgT3RoZXJ3aXNlIGFkZCBjb2RlCisjIHRvIGNvbmZpZy5zdGF0dXMgZm9yIGFwcGVuZGluZyB0aGUgY29uZmlndXJhdGlvbiBuYW1lZCBieSBUQUcgZnJvbSB0aGUKKyMgbWF0Y2hpbmcgdGFnZ2VkIGNvbmZpZyB2YXJzLgorbTRfZGVmdW4oW19MVF9DT05GSUddLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTKFsKKyAgbTRfZGVmaW5lKFtfTFRfVEFHXSwgbTRfaWYoWyQxXSwgW10sIFtDXSwgWyQxXSkpZG5sCisgIG00X2lmKF9MVF9UQUcsIFtDXSwgWworICAgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyAgICAjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KKyAgICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKyAgICBmaQorCisgICAgY2ZnZmlsZT0iJHtvZmlsZX1UIgorICAgIHRyYXAgIiRSTSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1CisgICAgJFJNICIkY2ZnZmlsZSIKKworICAgIGNhdCA8PF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyEgJFNIRUxMCisKKyMgYCRFQ0hPICIkb2ZpbGUiIHwgc2VkICdzJV4uKi8lJSdgIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRhc19tZSAoJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisjCitfTFRfQ09QWUlORworX0xUX0xJQlRPT0xfVEFHUworCisjICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRworX0xUX0xJQlRPT0xfQ09ORklHX1ZBUlMKK19MVF9MSUJUT09MX1RBR19WQVJTCisjICMjIyBFTkQgTElCVE9PTCBDT05GSUcKKworX0xUX0VPRgorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgY2F0IDw8XF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KK2lmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICBDT0xMRUNUX05BTUVTPQorICBleHBvcnQgQ09MTEVDVF9OQU1FUworZmkKK19MVF9FT0YKKyAgICA7OworICBlc2FjCisKKyAgX0xUX1BST0dfTFRNQUlOCisKKyAgIyBXZSB1c2Ugc2VkIGluc3RlYWQgb2YgY2F0IGJlY2F1c2UgYmFzaCBvbiBESkdQUCBnZXRzIGNvbmZ1c2VkIGlmCisgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKyAgc2VkICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlL3EnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorCisgIF9MVF9QUk9HX1hTSV9TSEVMTEZOUworCisgIHNlZCAtbiAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS8sJHAnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorCisgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICBjaG1vZCAreCAiJG9maWxlIgorXSwKK1tjYXQgPDxfTFRfRU9GID4+ICIkb2ZpbGUiCisKK2RubCBVbmZvcnR1bmF0ZWx5IHdlIGhhdmUgdG8gdXNlICQxIGhlcmUsIHNpbmNlIF9MVF9UQUcgaXMgbm90IGV4cGFuZGVkCitkbmwgaW4gYSBjb21tZW50IChpZSBhZnRlciBhICMpLgorIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkMQorX0xUX0xJQlRPT0xfVEFHX1ZBUlMoX0xUX1RBRykKKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICQxCitfTFRfRU9GCitdKWRubCAvbTRfaWYKK10sCitbbTRfaWYoWyQxXSwgW10sIFsKKyAgICBQQUNLQUdFPSckUEFDS0FHRScKKyAgICBWRVJTSU9OPSckVkVSU0lPTicKKyAgICBUSU1FU1RBTVA9JyRUSU1FU1RBTVAnCisgICAgUk09JyRSTScKKyAgICBvZmlsZT0nJG9maWxlJ10sIFtdKQorXSlkbmwgL19MVF9DT05GSUdfU0FWRV9DT01NQU5EUworXSkjIF9MVF9DT05GSUcKKworCisjIExUX1NVUFBPUlRFRF9UQUcoVEFHKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJhY2UgdGhpcyBtYWNybyB0byBkaXNjb3ZlciB3aGF0IHRhZ3MgYXJlIHN1cHBvcnRlZCBieSB0aGUgbGlidG9vbAorIyAtLXRhZyBvcHRpb24sIHVzaW5nOgorIyAgICBhdXRvY29uZiAtLXRyYWNlICdMVF9TVVBQT1JURURfVEFHOiQxJworQUNfREVGVU4oW0xUX1NVUFBPUlRFRF9UQUddLCBbXSkKKworCisjIEMgc3VwcG9ydCBpcyBidWlsdC1pbiBmb3Igbm93CittNF9kZWZpbmUoW19MVF9MQU5HX0NfZW5hYmxlZF0sIFtdKQorbTRfZGVmaW5lKFtfTFRfVEFHU10sIFtdKQorCisKKyMgTFRfTEFORyhMQU5HKQorIyAtLS0tLS0tLS0tLS0tCisjIEVuYWJsZSBsaWJ0b29sIHN1cHBvcnQgZm9yIHRoZSBnaXZlbiBsYW5ndWFnZSBpZiBub3QgYWxyZWFkeSBlbmFibGVkLgorQUNfREVGVU4oW0xUX0xBTkddLAorW0FDX0JFRk9SRShbJDBdLCBbTFRfT1VUUFVUXSlkbmwKK200X2Nhc2UoWyQxXSwKKyAgW0NdLAkJCVtfTFRfTEFORyhDKV0sCisgIFtDKytdLAkJW19MVF9MQU5HKENYWCldLAorICBbSmF2YV0sCQlbX0xUX0xBTkcoR0NKKV0sCisgIFtGb3J0cmFuIDc3XSwJCVtfTFRfTEFORyhGNzcpXSwKKyAgW0ZvcnRyYW5dLAkJW19MVF9MQU5HKEZDKV0sCisgIFtXaW5kb3dzIFJlc291cmNlXSwJW19MVF9MQU5HKFJDKV0sCisgIFttNF9pZmRlZihbX0xUX0xBTkdfXSQxW19DT05GSUddLAorICAgIFtfTFRfTEFORygkMSldLAorICAgIFttNF9mYXRhbChbJDA6IHVuc3VwcG9ydGVkIGxhbmd1YWdlOiAiJDEiXSldKV0pZG5sCitdKSMgTFRfTEFORworCisKKyMgX0xUX0xBTkcoTEFOR05BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9MQU5HXSwKK1ttNF9pZmRlZihbX0xUX0xBTkdfXSQxW19lbmFibGVkXSwgW10sCisgIFtMVF9TVVBQT1JURURfVEFHKFskMV0pZG5sCisgIG00X2FwcGVuZChbX0xUX1RBR1NdLCBbJDEgXSlkbmwKKyAgbTRfZGVmaW5lKFtfTFRfTEFOR19dJDFbX2VuYWJsZWRdLCBbXSlkbmwKKyAgX0xUX0xBTkdfJDFfQ09ORklHKCQxKV0pZG5sCitdKSMgX0xUX0xBTkcKKworCisjIF9MVF9MQU5HX0RFRkFVTFRfQ09ORklHCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0xBTkdfREVGQVVMVF9DT05GSUddLAorW0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NYWF0sCisgIFtMVF9MQU5HKENYWCldLAorICBbbTRfZGVmaW5lKFtBQ19QUk9HX0NYWF0sIGRlZm4oW0FDX1BST0dfQ1hYXSlbTFRfTEFORyhDWFgpXSldKQorCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19GNzddLAorICBbTFRfTEFORyhGNzcpXSwKKyAgW200X2RlZmluZShbQUNfUFJPR19GNzddLCBkZWZuKFtBQ19QUk9HX0Y3N10pW0xUX0xBTkcoRjc3KV0pXSkKKworQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfRkNdLAorICBbTFRfTEFORyhGQyldLAorICBbbTRfZGVmaW5lKFtBQ19QUk9HX0ZDXSwgZGVmbihbQUNfUFJPR19GQ10pW0xUX0xBTkcoRkMpXSldKQorCitkbmwgVGhlIGNhbGwgdG8gW0FdW01fUFJPR19HQ0pdIGlzIHF1b3RlZCBsaWtlIHRoYXQgdG8gc3RvcCBhY2xvY2FsCitkbmwgcHVsbGluZyB0aGluZ3MgaW4gbmVlZGxlc3NseS4KK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0dDSl0sCisgIFtMVF9MQU5HKEdDSildLAorICBbQUNfUFJPVklERV9JRkVMU0UoW0FdW01fUFJPR19HQ0pdLAorICAgIFtMVF9MQU5HKEdDSildLAorICAgIFtBQ19QUk9WSURFX0lGRUxTRShbTFRfUFJPR19HQ0pdLAorICAgICAgW0xUX0xBTkcoR0NKKV0sCisgICAgICBbbTRfaWZkZWYoW0FDX1BST0dfR0NKXSwKKwlbbTRfZGVmaW5lKFtBQ19QUk9HX0dDSl0sIGRlZm4oW0FDX1BST0dfR0NKXSlbTFRfTEFORyhHQ0opXSldKQorICAgICAgIG00X2lmZGVmKFtBXVtNX1BST0dfR0NKXSwKKwlbbTRfZGVmaW5lKFtBXVtNX1BST0dfR0NKXSwgZGVmbihbQV1bTV9QUk9HX0dDSl0pW0xUX0xBTkcoR0NKKV0pXSkKKyAgICAgICBtNF9pZmRlZihbTFRfUFJPR19HQ0pdLAorCVttNF9kZWZpbmUoW0xUX1BST0dfR0NKXSwgZGVmbihbTFRfUFJPR19HQ0pdKVtMVF9MQU5HKEdDSildKV0pXSldKV0pCisKK0FDX1BST1ZJREVfSUZFTFNFKFtMVF9QUk9HX1JDXSwKKyAgW0xUX0xBTkcoUkMpXSwKKyAgW200X2RlZmluZShbTFRfUFJPR19SQ10sIGRlZm4oW0xUX1BST0dfUkNdKVtMVF9MQU5HKFJDKV0pXSkKK10pIyBfTFRfTEFOR19ERUZBVUxUX0NPTkZJRworCisjIE9ic29sZXRlIG1hY3JvczoKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0NYWF0sIFtMVF9MQU5HKEMrKyldKQorQVVfREVGVU4oW0FDX0xJQlRPT0xfRjc3XSwgW0xUX0xBTkcoRm9ydHJhbiA3NyldKQorQVVfREVGVU4oW0FDX0xJQlRPT0xfRkNdLCBbTFRfTEFORyhGb3J0cmFuKV0pCitBVV9ERUZVTihbQUNfTElCVE9PTF9HQ0pdLCBbTFRfTEFORyhKYXZhKV0pCitBVV9ERUZVTihbQUNfTElCVE9PTF9SQ10sIFtMVF9MQU5HKFdpbmRvd3MgUmVzb3VyY2UpXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9DWFhdLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9GNzddLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9GQ10sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0dDSl0sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX1JDXSwgW10pCisKKworIyBfTFRfVEFHX0NPTVBJTEVSCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfVEFHX0NPTVBJTEVSXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKworX0xUX0RFQ0woW0xUQ0NdLCBbQ0NdLCBbMV0sIFtBIEMgY29tcGlsZXJdKWRubAorX0xUX0RFQ0woW0xUQ0ZMQUdTXSwgW0NGTEFHU10sIFsxXSwgW0xUQ0MgY29tcGlsZXIgZmxhZ3NdKWRubAorX0xUX1RBR0RFQ0woW0NDXSwgW2NvbXBpbGVyXSwgWzFdLCBbQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlcl0pZG5sCitfTFRfVEFHREVDTChbd2l0aF9nY2NdLCBbR0NDXSwgWzBdLCBbSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgY29tcGlsZXI/XSlkbmwKKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworXSkjIF9MVF9UQUdfQ09NUElMRVIKKworCisjIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGNvbXBpbGVyIGJvaWxlcnBsYXRlIG91dHB1dCBvciB3YXJuaW5ncyB3aXRoCisjIHRoZSBzaW1wbGUgY29tcGlsZXIgdGVzdCBjb2RlLgorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIGNvbmZ0ZXN0KgorXSkjIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorCisKKyMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBsaW5rZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKKyMgdGhlIHNpbXBsZSBsaW5rIHRlc3QgY29kZS4KK200X2RlZnVuKFtfTFRfTElOS0VSX0JPSUxFUlBMQVRFXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIC1yIGNvbmZ0ZXN0KgorXSkjIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyBfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bl9vbmNlKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10sWworICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKKyAgICBBQ19DSEVDS19UT09MKFtEU1lNVVRJTF0sIFtkc3ltdXRpbF0sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtOTUVESVRdLCBbbm1lZGl0XSwgWzpdKQorICAgIEFDX0NIRUNLX1RPT0woW0xJUE9dLCBbbGlwb10sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtPVE9PTF0sIFtvdG9vbF0sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtPVE9PTDY0XSwgW290b29sNjRdLCBbOl0pCisgICAgX0xUX0RFQ0woW10sIFtEU1lNVVRJTF0sIFsxXSwKKyAgICAgIFtUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYXSkKKyAgICBfTFRfREVDTChbXSwgW05NRURJVF0sIFsxXSwKKyAgICAgIFtUb29sIHRvIGNoYW5nZSBnbG9iYWwgdG8gbG9jYWwgc3ltYm9scyBvbiBNYWMgT1MgWF0pCisgICAgX0xUX0RFQ0woW10sIFtMSVBPXSwgWzFdLAorICAgICAgW1Rvb2wgdG8gbWFuaXB1bGF0ZSBmYXQgb2JqZWN0cyBhbmQgYXJjaGl2ZXMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbT1RPT0xdLCBbMV0sCisgICAgICBbbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbT1RPT0w2NF0sIFsxXSwKKyAgICAgIFtsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIDY0IGJpdCBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFggMTAuNF0pCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnXSxbbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZF0sCisgICAgICBbbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD1ubworICAgICAgaWYgdGVzdCAteiAiJHtMVF9NVUxUSV9NT0RVTEV9IjsgdGhlbgorCSMgQnkgZGVmYXVsdCB3ZSB3aWxsIGFkZCB0aGUgLXNpbmdsZV9tb2R1bGUgZmxhZy4gWW91IGNhbiBvdmVycmlkZQorCSMgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExUX01VTFRJX01PRFVMRQorCSMgbm9uLWVtcHR5IGF0IGNvbmZpZ3VyZSB0aW1lLCBvciBieSBhZGRpbmcgLW11bHRpX21vZHVsZSB0byB0aGUKKwkjIGxpbmsgZmxhZ3MuCisJcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorCWVjaG8gImludCBmb28odm9pZCl7cmV0dXJuIDE7fSIgPiBjb25mdGVzdC5jCisJZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKy1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIiA+JkFTX01FU1NBR0VfTE9HX0ZECisJJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKwkgIC1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIDI+Y29uZnRlc3QuZXJyCisgICAgICAgIF9sdF9yZXN1bHQ9JD8KKwlpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliICYmIHRlc3QgISAtcyBjb25mdGVzdC5lcnIgJiYgdGVzdCAkX2x0X3Jlc3VsdCA9IDA7IHRoZW4KKwkgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisJZmkKKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisJcm0gLWYgY29uZnRlc3QuKgorICAgICAgZmldKQorICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZ10sCisgICAgICBbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0XSwKKyAgICAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm8KKyAgICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgICAgZWNobyAiX21haW4iID4gY29uZnRlc3Quc3ltCisgICAgICBMREZMQUdTPSIkTERGTEFHUyAtV2wsLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCxjb25mdGVzdC5zeW0iCisgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLFtdKV0sCisJW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD15ZXNdLAorCVtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm9dKQorCUxERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgICAgXSkKKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIC1mb3JjZV9sb2FkIGxpbmtlciBmbGFnXSxbbHRfY3ZfbGRfZm9yY2VfbG9hZF0sCisgICAgICBbbHRfY3ZfbGRfZm9yY2VfbG9hZD1ubworICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCitpbnQgZm9yY2VkX2xvYWRlZCgpIHsgcmV0dXJuIDI7fQorX0xUX0VPRgorICAgICAgZWNobyAiJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCitpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorX0xUX0VPRgorICAgICAgZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgLVdsLC1mb3JjZV9sb2FkLC4vbGliY29uZnRlc3QuYSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgLVdsLC1mb3JjZV9sb2FkLC4vbGliY29uZnRlc3QuYSAyPmNvbmZ0ZXN0LmVycgorICAgICAgX2x0X3Jlc3VsdD0kPworICAgICAgaWYgdGVzdCAtZiBjb25mdGVzdCAmJiB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyICYmIHRlc3QgJF9sdF9yZXN1bHQgPSAwICYmICRHUkVQIGZvcmNlZF9sb2FkIGNvbmZ0ZXN0IDI+JjEgPi9kZXYvbnVsbDsgdGhlbgorCWx0X2N2X2xkX2ZvcmNlX2xvYWQ9eWVzCisgICAgICBlbHNlCisJY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBmaQorICAgICAgICBybSAtZiBjb25mdGVzdC5lcnIgbGliY29uZnRlc3QuYSBjb25mdGVzdCBjb25mdGVzdC5jCisgICAgICAgIHJtIC1yZiBjb25mdGVzdC5kU1lNCisgICAgXSkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bWzAxMl1dKQorICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbjEuKikKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICBkYXJ3aW4qKSAjIGRhcndpbiA1Lnggb24KKyAgICAgICMgaWYgcnVubmluZyBvbiAxMC41IG9yIGxhdGVyLCB0aGUgZGVwbG95bWVudCB0YXJnZXQgZGVmYXVsdHMKKyAgICAgICMgdG8gdGhlIE9TIHZlcnNpb24sIGlmIG9uIHg4NiwgYW5kIDEwLjQsIHRoZSBkZXBsb3ltZW50CisgICAgICAjIHRhcmdldCBkZWZhdWx0cyB0byAxMC40LiBEb24ndCB5b3UgbG92ZSBpdD8KKyAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0sJGhvc3QgaW4KKwkxMC4wLCo4NiotZGFyd2luOCp8MTAuMCwqLWRhcndpbltbOTFdXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CisJMTAuW1swMTJdXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisJMTAuKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKyAgICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID0gInllcyI7IHRoZW4KKyAgICAgIF9sdF9kYXJfc2luZ2xlX21vZD0nJHNpbmdsZV9tb2R1bGUnCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPScgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sc19saXN0LCRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0nCisgICAgZWxzZQorICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nfiROTUVESVQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkRFNZTVVUSUwiICE9ICI6IiAmJiB0ZXN0ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPSAibm8iOyB0aGVuCisgICAgICBfbHRfZHN5bXV0aWw9J34kRFNZTVVUSUwgJGxpYiB8fCA6JworICAgIGVsc2UKKyAgICAgIF9sdF9kc3ltdXRpbD0KKyAgICBmaQorICAgIDs7CisgIGVzYWMKK10pCisKKworIyBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVja3MgZm9yIGxpbmtlciBhbmQgY29tcGlsZXIgZmVhdHVyZXMgb24gZGFyd2luCittNF9kZWZ1bihbX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVNdLAorWworICBtNF9yZXF1aXJlKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10pCisgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9eWVzCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCisgIGlmIHRlc3QgIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA9ICJ5ZXMiOyB0aGVuCisgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSdgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UgJHt3bH0tZm9yY2VfbG9hZCwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCcKKyAgZWxzZQorICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJworICBmaQorICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSIkX2x0X2Rhcl9hbGxvd191bmRlZmluZWQiCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgIGlmb3J0KikgX2x0X2Rhcl9jYW5fc2hhcmVkPXllcyA7OworICAgICAqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9JEdDQyA7OworICBlc2FjCisgIGlmIHRlc3QgIiRfbHRfZGFyX2Nhbl9zaGFyZWQiID0gInllcyI7IHRoZW4KKyAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCisgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKKyAgICBfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2RzeW11dGlsfSIKKyAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAke19sdF9kYXJfc2luZ2xlX21vZH0ke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorICAgIF9MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAtZSAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBtNF9pZihbJDFdLCBbQ1hYXSwKK1sgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgIT0gInllcyI7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9IlwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJHtsaWJ9LW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCR7bGlifS1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcke19sdF9kc3ltdXRpbH0iCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCR7bGlifS1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwke2xpYn0tbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBmaQorXSxbXSkKKyAgZWxzZQorICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgIGZpCitdKQorCisjIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpbmtzIGEgbWluaW1hbCBwcm9ncmFtIGFuZCBjaGVja3MgdGhlIGV4ZWN1dGFibGUKKyMgZm9yIHRoZSBzeXN0ZW0gZGVmYXVsdCBoYXJkY29kZWQgbGlicmFyeSBwYXRoLiBJbiBtb3N0IGNhc2VzLAorIyB0aGlzIGlzIC91c3IvbGliOi9saWIsIGJ1dCB3aGVuIHRoZSBNUEkgY29tcGlsZXJzIGFyZSB1c2VkCisjIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29tbXVuaWNhdGlvbiBhbmQgTVBJIGxpYnMgYXJlIGluY2x1ZGVkIHRvby4KKyMgSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgdXNlIHRoZSBkZWZhdWx0IGxpYnJhcnkgcGF0aCBhY2NvcmRpbmcKKyMgdG8gdGhlIGFpeCBsZCBtYW51YWwuCittNF9kZWZ1bihbX0xUX1NZU19NT0RVTEVfUEFUSF9BSVhdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitBQ19MSU5LX0lGRUxTRShBQ19MQU5HX1BST0dSQU0sWworbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJL14wLyB7CisJICAgIHMvXjAgICpcKC4qXCkkL1wxLworCSAgICBwCisJfQorICAgIH0nCithaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKyAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCitmaV0sW10pCitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKK10pIyBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorCisKKyMgX0xUX1NIRUxMX0lOSVQoQVJHKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9TSEVMTF9JTklUXSwKK1ttNF9kaXZlcnRfdGV4dChbTTRTSC1JTklUXSwgWyQxCitdKV0pIyBfTFRfU0hFTExfSU5JVAorCisKKworIyBfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaW5kIGhvdyB3ZSBjYW4gZmFrZSBhbiBlY2hvIGNvbW1hbmQgdGhhdCBkb2VzIG5vdCBpbnRlcnByZXQgYmFja3NsYXNoLgorIyBJbiBwYXJ0aWN1bGFyLCB3aXRoIEF1dG9jb25mIDIuNjAgb3IgbGF0ZXIgd2UgYWRkIHNvbWUgY29kZSB0byB0aGUgc3RhcnQKKyMgb2YgdGhlIGdlbmVyYXRlZCBjb25maWd1cmUgc2NyaXB0IHdoaWNoIHdpbGwgZmluZCBhIHNoZWxsIHdpdGggYSBidWlsdGluCisjIHByaW50ZiAod2hpY2ggd2UgY2FuIHVzZSBhcyBhbiBlY2hvIGNvbW1hbmQpLgorbTRfZGVmdW4oW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSwKK1tFQ0hPPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCitFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworCitBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBwcmludCBzdHJpbmdzXSkKKyMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgoraWYgdGVzdCAiWGBwcmludCAtciAtLSAtbiAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKyAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgIEVDSE89J3ByaW50IC1yIC0tJworZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgRUNITz0ncHJpbnRmICVzXG4nCitlbHNlCisgICMgVXNlIHRoaXMgZnVuY3Rpb24gYXMgYSBmYWxsYmFjayB0aGF0IGFsd2F5cyB3b3Jrcy4KKyAgZnVuY19mYWxsYmFja19lY2hvICgpCisgIHsKKyAgICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorJFtdMQorX0xURUNIT19FT0YnCisgIH0KKyAgRUNITz0nZnVuY19mYWxsYmFja19lY2hvJworZmkKKworIyBmdW5jX2VjaG9fYWxsIGFyZy4uLgorIyBJbnZva2UgJEVDSE8gd2l0aCBhbGwgYXJncywgc3BhY2Utc2VwYXJhdGVkLgorZnVuY19lY2hvX2FsbCAoKQoreworICAgICRFQ0hPICIkKiIgCit9CisKK2Nhc2UgIiRFQ0hPIiBpbgorICBwcmludGYqKSBBQ19NU0dfUkVTVUxUKFtwcmludGZdKSA7OworICBwcmludCopIEFDX01TR19SRVNVTFQoW3ByaW50IC1yXSkgOzsKKyAgKikgQUNfTVNHX1JFU1VMVChbY2F0XSkgOzsKK2VzYWMKKworbTRfaWZkZWYoW19BU19ERVRFQ1RfU1VHR0VTVEVEXSwKK1tfQVNfREVURUNUX1NVR0dFU1RFRChbCisgIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSR7QkFTSF9WRVJTSU9OK3NldH0iIHx8ICgKKyAgICBFQ0hPPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworICAgIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworICAgIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisgICAgUEFUSD0vZW1wdHkgRlBBVEg9L2VtcHR5OyBleHBvcnQgUEFUSCBGUEFUSAorICAgIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPYCIgPSAiWCRFQ0hPIiBcCisgICAgICB8fCB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPYCIgPSAiWCRFQ0hPIiApXSldKQorCitfTFRfREVDTChbXSwgW1NIRUxMXSwgWzFdLCBbU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0c10pCitfTFRfREVDTChbXSwgW0VDSE9dLCBbMV0sIFtBbiBlY2hvIHByb2dyYW0gdGhhdCBwcm90ZWN0cyBiYWNrc2xhc2hlc10pCitdKSMgX0xUX1BST0dfRUNIT19CQUNLU0xBU0gKKworCisjIF9MVF9FTkFCTEVfTE9DSworIyAtLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfRU5BQkxFX0xPQ0tdLAorW0FDX0FSR19FTkFCTEUoW2xpYnRvb2wtbG9ja10sCisgIFtBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWxpYnRvb2wtbG9ja10sCisgICAgW2F2b2lkIGxvY2tpbmcgKG1pZ2h0IGJyZWFrIHBhcmFsbGVsIGJ1aWxkcyldKV0pCit0ZXN0ICJ4JGVuYWJsZV9saWJ0b29sX2xvY2siICE9IHhubyAmJiBlbmFibGVfbGlidG9vbF9sb2NrPXllcworCisjIFNvbWUgZmxhZ3MgbmVlZCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb21waWxlciBvciBsaW5rZXIgZm9yIGdvb2QKKyMgbGlidG9vbCBzdXBwb3J0LgorY2FzZSAkaG9zdCBpbgoraWE2NC0qLWhwdXgqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICAgKkVMRi0zMiopCisJSFBVWF9JQTY0X01PREU9IjMyIgorCTs7CisgICAgICAqRUxGLTY0KikKKwlIUFVYX0lBNjRfTU9ERT0iNjQiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKyotKi1pcml4NiopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnWyNdbGluZSAnJExJTkVOTycgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKwkqMzItYml0KikKKwkgIExEPSIke0xELWxkfSAtbWVsZjMyYnNtaXAiCisJICA7OworCSpOMzIqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJibWlwbjMyIgorCSAgOzsKKwkqNjQtYml0KikKKwkgIExEPSIke0xELWxkfSAtbWVsZjY0Ym1pcCIKKwk7OworICAgICAgZXNhYworICAgIGVsc2UKKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKwkqMzItYml0KikKKwkgIExEPSIke0xELWxkfSAtMzIiCisJICA7OworCSpOMzIqKQorCSAgTEQ9IiR7TEQtbGR9IC1uMzIiCisJICA7OworCSo2NC1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC02NCIKKwkgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCit4ODZfNjQtKmtmcmVlYnNkKi1nbnV8eDg2XzY0LSpsaW51eCp8cHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCp8IFwKK3MzOTAqLSpsaW51eCp8czM5MCotKnRwZip8c3BhcmMqLSpsaW51eCopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgICAqMzItYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4Nl9mYnNkIgorCSAgICA7OworCSAgeDg2XzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKKwkgICAgOzsKKwkgIHBwYzY0LSpsaW51eCp8cG93ZXJwYzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMnBwY2xpbnV4IgorCSAgICA7OworCSAgczM5MHgtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9zMzkwIgorCSAgICA7OworCSAgc3BhcmM2NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJfc3BhcmMiCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICAqNjQtYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0X2Zic2QiCisJICAgIDs7CisJICB4ODZfNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCisJICAgIDs7CisJICBwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0cHBjIgorCSAgICA7OworCSAgczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3MzOTAiCisJICAgIDs7CisJICBzcGFyYyotKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgorCSAgICA7OworCWVzYWMKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCisqLSotc2NvMy4ydjUqKQorICAjIE9uIFNDTyBPcGVuU2VydmVyIDUsIHdlIG5lZWQgLWJlbGYgdG8gZ2V0IGZ1bGwtZmVhdHVyZWQgYmluYXJpZXMuCisgIFNBVkVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBDRkxBR1M9IiRDRkxBR1MgLWJlbGYiCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmXSwgbHRfY3ZfY2NfbmVlZHNfYmVsZiwKKyAgICBbQUNfTEFOR19QVVNIKEMpCisgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSxbW11dKV0sW2x0X2N2X2NjX25lZWRzX2JlbGY9eWVzXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj1ub10pCisgICAgIEFDX0xBTkdfUE9QXSkKKyAgaWYgdGVzdCB4IiRsdF9jdl9jY19uZWVkc19iZWxmIiAhPSB4InllcyI7IHRoZW4KKyAgICAjIHRoaXMgaXMgcHJvYmFibHkgZ2NjIDIuOC4wLCBlZ2NzIDEuMCBvciBuZXdlcjsgbm8gbmVlZCBmb3IgLWJlbGYKKyAgICBDRkxBR1M9IiRTQVZFX0NGTEFHUyIKKyAgZmkKKyAgOzsKK3NwYXJjKi0qc29sYXJpcyopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgKjY0LWJpdCopCisgICAgICBjYXNlICRsdF9jdl9wcm9nX2dudV9sZCBpbgorICAgICAgeWVzKikgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIiA7OworICAgICAgKikKKwlpZiAke0xELWxkfSAtNjQgLXIgLW8gY29uZnRlc3QyLm8gY29uZnRlc3QubyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgIExEPSIke0xELWxkfSAtNjQiCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKK2VzYWMKKworbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCitdKSMgX0xUX0VOQUJMRV9MT0NLCisKKworIyBfTFRfQ01EX09MRF9BUkNISVZFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ01EX09MRF9BUkNISVZFXSwKK1tBQ19DSEVDS19UT09MKEFSLCBhciwgZmFsc2UpCit0ZXN0IC16ICIkQVIiICYmIEFSPWFyCit0ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorX0xUX0RFQ0woW10sIFtBUl0sIFsxXSwgW1RoZSBhcmNoaXZlcl0pCitfTFRfREVDTChbXSwgW0FSX0ZMQUdTXSwgWzFdKQorCitBQ19DSEVDS19UT09MKFNUUklQLCBzdHJpcCwgOikKK3Rlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgorX0xUX0RFQ0woW10sIFtTVFJJUF0sIFsxXSwgW0Egc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtXSkKKworQUNfQ0hFQ0tfVE9PTChSQU5MSUIsIHJhbmxpYiwgOikKK3Rlc3QgLXogIiRSQU5MSUIiICYmIFJBTkxJQj06CitfTFRfREVDTChbXSwgW1JBTkxJQl0sIFsxXSwKKyAgICBbQ29tbWFuZHMgdXNlZCB0byBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlXSkKKworIyBEZXRlcm1pbmUgY29tbWFuZHMgdG8gY3JlYXRlIG9sZC1zdHlsZSBzdGF0aWMgYXJjaGl2ZXMuCitvbGRfYXJjaGl2ZV9jbWRzPSckQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcycKK29sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9CisKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgb3BlbmJzZCopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiAtdCBcJG9sZGxpYiIKKyAgICA7OworICAqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCisgICAgOzsKKyAgZXNhYworICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKK2ZpCisKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgZGFyd2luKikKKyAgICBsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249eWVzIDs7CisgICopCisgICAgbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPW5vIDs7Citlc2FjCitfTFRfREVDTChbXSwgW29sZF9wb3N0aW5zdGFsbF9jbWRzXSwgWzJdKQorX0xUX0RFQ0woW10sIFtvbGRfcG9zdHVuaW5zdGFsbF9jbWRzXSwgWzJdKQorX0xUX1RBR0RFQ0woW10sIFtvbGRfYXJjaGl2ZV9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuIG9sZC1zdHlsZSBhcmNoaXZlXSkKK19MVF9ERUNMKFtdLCBbbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uXSwgWzBdLAorICAgIFtXaGV0aGVyIHRvIHVzZSBhIGxvY2sgZm9yIG9sZCBhcmNoaXZlIGV4dHJhY3Rpb25dKQorXSkjIF9MVF9DTURfT0xEX0FSQ0hJVkUKKworCisjIF9MVF9DT01QSUxFUl9PUFRJT04oTUVTU0FHRSwgVkFSSUFCTEUtTkFNRSwgRkxBR1MsCisjCQlbT1VUUFVULUZJTEVdLCBbQUNUSU9OLVNVQ0NFU1NdLCBbQUNUSU9OLUZBSUxVUkVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGNvbXBpbGVyIG9wdGlvbiB3b3JrcworQUNfREVGVU4oW19MVF9DT01QSUxFUl9PUFRJT05dLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFskMV0sIFskMl0sCisgIFskMj1ubworICAgbTRfaWYoWyQ0XSwgLCBbYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0XSwgW2FjX291dGZpbGU9JDRdKQorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBsdF9jb21waWxlcl9mbGFnPSIkMyIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbW14gXV0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgJDI9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIGNvbmZ0ZXN0KgorXSkKKworaWYgdGVzdCB4IlskXSQyIiA9IHh5ZXM7IHRoZW4KKyAgICBtNF9pZihbJDVdLCAsIDosIFskNV0pCitlbHNlCisgICAgbTRfaWYoWyQ2XSwgLCA6LCBbJDZdKQorZmkKK10pIyBfTFRfQ09NUElMRVJfT1BUSU9OCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT05dLCBbX0xUX0NPTVBJTEVSX09QVElPTl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OXSwgW10pCisKKworIyBfTFRfTElOS0VSX09QVElPTihNRVNTQUdFLCBWQVJJQUJMRS1OQU1FLCBGTEFHUywKKyMgICAgICAgICAgICAgICAgICBbQUNUSU9OLVNVQ0NFU1NdLCBbQUNUSU9OLUZBSUxVUkVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGxpbmtlciBvcHRpb24gd29ya3MKK0FDX0RFRlVOKFtfTFRfTElOS0VSX09QVElPTl0sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorQUNfQ0FDSEVfQ0hFQ0soWyQxXSwgWyQyXSwKKyAgWyQyPW5vCisgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgTERGTEFHUz0iJExERkxBR1MgJDMiCisgICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KKyAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgJEVDSE8gIiRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAorICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAkMj15ZXMKKyAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgJDI9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIC1yIGNvbmZ0ZXN0KgorICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKK10pCisKK2lmIHRlc3QgeCJbJF0kMiIgPSB4eWVzOyB0aGVuCisgICAgbTRfaWYoWyQ0XSwgLCA6LCBbJDRdKQorZWxzZQorICAgIG00X2lmKFskNV0sICwgOiwgWyQ1XSkKK2ZpCitdKSMgX0xUX0xJTktFUl9PUFRJT04KKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLCBbX0xUX0xJTktFUl9PUFRJT05dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLCBbXSkKKworCisjIExUX0NNRF9NQVhfTEVOCisjLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfQ01EX01BWF9MRU5dLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKyMgZmluZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworQUNfTVNHX0NIRUNLSU5HKFt0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50c10pCitBQ19DQUNIRV9WQUwoW2x0X2N2X3N5c19tYXhfY21kX2xlbl0sIFtkbmwKKyAgaT0wCisgIHRlc3RzdHJpbmc9IkFCQ0QiCisKKyAgY2FzZSAkYnVpbGRfb3MgaW4KKyAgbXNkb3NkamdwcCopCisgICAgIyBPbiBESkdQUCwgdGhpcyB0ZXN0IGNhbiBibG93IHVwIHByZXR0eSBiYWRseSBkdWUgdG8gcHJvYmxlbXMgaW4gbGliYworICAgICMgKGFueSBzaW5nbGUgYXJndW1lbnQgZXhjZWVkaW5nIDIwMDAgYnl0ZXMgY2F1c2VzIGEgYnVmZmVyIG92ZXJydW4KKyAgICAjIGR1cmluZyBnbG9iIGV4cGFuc2lvbikuICBFdmVuIGlmIGl0IHdlcmUgZml4ZWQsIHRoZSByZXN1bHQgb2YgdGhpcworICAgICMgY2hlY2sgd291bGQgYmUgbGFyZ2VyIHRoYW4gaXQgc2hvdWxkIGJlLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMjI4ODsgICAgIyAxMksgaXMgYWJvdXQgcmlnaHQKKyAgICA7OworCisgIGdudSopCisgICAgIyBVbmRlciBHTlUgSHVyZCwgdGhpcyB0ZXN0IGlzIG5vdCByZXF1aXJlZCBiZWNhdXNlIHRoZXJlIGlzCisgICAgIyBubyBsaW1pdCB0byB0aGUgbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCisgICAgIyBMaWJ0b29sIHdpbGwgaW50ZXJwcmV0IC0xIGFzIG5vIGxpbWl0IHdoYXRzb2V2ZXIKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTE7CisgICAgOzsKKworICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorICAgICMgT24gV2luOXgvTUUsIHRoaXMgdGVzdCBibG93cyB1cCAtLSBpdCBzdWNjZWVkcywgYnV0IHRha2VzCisgICAgIyBhYm91dCA1IG1pbnV0ZXMgYXMgdGhlIHRlc3RzdHJpbmcgZ3Jvd3MgZXhwb25lbnRpYWxseS4KKyAgICAjIFdvcnNlLCBzaW5jZSA5eC9NRSBhcmUgbm90IHByZS1lbXB0aXZlbHkgbXVsdGl0YXNraW5nLAorICAgICMgeW91IGVuZCB1cCB3aXRoIGEgImZyb3plbiIgY29tcHV0ZXIsIGV2ZW4gdGhvdWdoIHdpdGggcGF0aWVuY2UKKyAgICAjIHRoZSB0ZXN0IGV2ZW50dWFsbHkgc3VjY2VlZHMgKHdpdGggYSBtYXggbGluZSBsZW5ndGggb2YgMjU2aykuCisgICAgIyBJbnN0ZWFkLCBsZXQncyBqdXN0IHB1bnQ6IHVzZSB0aGUgbWluaW11bSBsaW5lbGVuZ3RoIHJlcG9ydGVkIGJ5CisgICAgIyBhbGwgb2YgdGhlIHN1cHBvcnRlZCBwbGF0Zm9ybXM6IDgxOTIgKG9uIE5ULzJLL1hQKS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIG1pbnQqKQorICAgICMgT24gTWlOVCB0aGlzIGNhbiB0YWtlIGEgbG9uZyB0aW1lIGFuZCBydW4gb3V0IG9mIG1lbW9yeS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIGFtaWdhb3MqKQorICAgICMgT24gQW1pZ2FPUyB3aXRoIHBka3NoLCB0aGlzIHRlc3QgdGFrZXMgaG91cnMsIGxpdGVyYWxseS4KKyAgICAjIFNvIHdlIGp1c3QgcHVudCBhbmQgdXNlIGEgbWluaW11bSBsaW5lIGxlbmd0aCBvZiA4MTkyLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgbmV0YnNkKiB8IGZyZWVic2QqIHwgb3BlbmJzZCogfCBkYXJ3aW4qIHwgZHJhZ29uZmx5KikKKyAgICAjIFRoaXMgaGFzIGJlZW4gYXJvdW5kIHNpbmNlIDM4NkJTRCwgYXQgbGVhc3QuICBMaWtlbHkgZnVydGhlci4KKyAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2N0bDsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisgICAgZWxpZiB0ZXN0IC14IC91c3Ivc2Jpbi9zeXNjdGw7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3Vzci9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49NjU1MzYJIyB1c2FibGUgZGVmYXVsdCBmb3IgYWxsIEJTRHMKKyAgICBmaQorICAgICMgQW5kIGFkZCBhIHNhZmV0eSB6b25lCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAorICAgIDs7CisKKyAgaW50ZXJpeCopCisgICAgIyBXZSBrbm93IHRoZSB2YWx1ZSAyNjIxNDQgYW5kIGhhcmRjb2RlIGl0IHdpdGggYSBzYWZldHkgem9uZSAobGlrZSBCU0QpCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE5NjYwOAorICAgIDs7CisKKyAgb3NmKikKKyAgICAjIERyLiBIYW5zIEVra2VoYXJkIFBsZXNzZXIgcmVwb3J0cyBzZWVpbmcgYSBrZXJuZWwgcGFuaWMgcnVubmluZyBjb25maWd1cmUKKyAgICAjIGR1ZSB0byB0aGlzIHRlc3Qgd2hlbiBleGVjX2Rpc2FibGVfYXJnX2xpbWl0IGlzIDEgb24gVHJ1NjQuIEl0IGlzIG5vdAorICAgICMgbmljZSB0byBjYXVzZSBrZXJuZWwgcGFuaWNzIHNvIGxldHMgYXZvaWQgdGhlIGxvb3AgYmVsb3cuCisgICAgIyBGaXJzdCBzZXQgYSByZWFzb25hYmxlIGRlZmF1bHQuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE2Mzg0CisgICAgIworICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY29uZmlnOyB0aGVuCisgICAgICBjYXNlIGAvc2Jpbi9zeXNjb25maWcgLXEgcHJvYyBleGVjX2Rpc2FibGVfYXJnX2xpbWl0YCBpbgorICAgICAgICAqMSopIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMSA7OworICAgICAgZXNhYworICAgIGZpCisgICAgOzsKKyAgc2NvMy4ydjUqKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMDI0MDAKKyAgICA7OworICBzeXN2NSogfCBzY281djYqIHwgc3lzdjQuMnV3MiopCisgICAga2FyZ21heD1gZ3JlcCBBUkdfTUFYIC9ldGMvY29uZi9jZi5kL3N0dW5lIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLW4gIiRrYXJnbWF4IjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBlY2hvICRrYXJnbWF4IHwgc2VkICdzLy4qW1sJIF1dLy8nYAorICAgIGVsc2UKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0zMjc2OAorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YChnZXRjb25mIEFSR19NQVgpIDI+IC9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisgICAgZWxzZQorICAgICAgIyBNYWtlIHRlc3RzdHJpbmcgYSBsaXR0bGUgYmlnZ2VyIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyB3aXRoIGl0LgorICAgICAgIyBhIDFLIHN0cmluZyBzaG91bGQgYmUgYSByZWFzb25hYmxlIHN0YXJ0LgorICAgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDsgZG8KKyAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCisgICAgICBkb25lCisgICAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQorICAgICAgIyBJZiB0ZXN0IGlzIG5vdCBhIHNoZWxsIGJ1aWx0LWluLCB3ZSdsbCBwcm9iYWJseSBlbmQgdXAgY29tcHV0aW5nIGEKKyAgICAgICMgbWF4aW11bSBsZW5ndGggdGhhdCBpcyBvbmx5IGhhbGYgb2YgdGhlIGFjdHVhbCBtYXhpbXVtIGxlbmd0aCwgYnV0CisgICAgICAjIHdlIGNhbid0IHRlbGwuCisgICAgICB3aGlsZSB7IHRlc3QgIlgiYGZ1bmNfZmFsbGJhY2tfZWNobyAiJHRlc3RzdHJpbmckdGVzdHN0cmluZyIgMj4vZGV2L251bGxgIFwKKwkgICAgICAgICA9ICJYJHRlc3RzdHJpbmckdGVzdHN0cmluZyI7IH0gPi9kZXYvbnVsbCAyPiYxICYmCisJICAgICAgdGVzdCAkaSAhPSAxNyAjIDEvMiBNQiBzaG91bGQgYmUgZW5vdWdoCisgICAgICBkbworICAgICAgICBpPWBleHByICRpICsgMWAKKyAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCisgICAgICBkb25lCisgICAgICAjIE9ubHkgY2hlY2sgdGhlIHN0cmluZyBsZW5ndGggb3V0c2lkZSB0aGUgbG9vcC4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAiWCR0ZXN0c3RyaW5nIiA6ICIuKiIgMj4mMWAKKyAgICAgIHRlc3RzdHJpbmc9CisgICAgICAjIEFkZCBhIHNpZ25pZmljYW50IHNhZmV0eSBmYWN0b3IgYmVjYXVzZSBDKysgY29tcGlsZXJzIGNhbiB0YWNrIG9uCisgICAgICAjIG1hc3NpdmUgYW1vdW50cyBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZQorICAgICAgIyBsaW5rZXIuICBJdCBhcHBlYXJzIGFzIHRob3VnaCAxLzIgaXMgYSB1c2FibGUgdmFsdWUuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyAyYAorICAgIGZpCisgICAgOzsKKyAgZXNhYworXSkKK2lmIHRlc3QgLW4gJGx0X2N2X3N5c19tYXhfY21kX2xlbiA7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCgkbHRfY3Zfc3lzX21heF9jbWRfbGVuKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vbmUpCitmaQorbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgorX0xUX0RFQ0woW10sIFttYXhfY21kX2xlbl0sIFswXSwKKyAgICBbV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kP10pCitdKSMgTFRfQ01EX01BWF9MRU4KKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTl0sIFtMVF9DTURfTUFYX0xFTl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX01BWF9DTURfTEVOXSwgW10pCisKKworIyBfTFRfSEVBREVSX0RMRkNOCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfSEVBREVSX0RMRkNOXSwKK1tBQ19DSEVDS19IRUFERVJTKFtkbGZjbi5oXSwgW10sIFtdLCBbQUNfSU5DTFVERVNfREVGQVVMVF0pZG5sCitdKSMgX0xUX0hFQURFUl9ETEZDTgorCisKKyMgX0xUX1RSWV9ETE9QRU5fU0VMRiAoQUNUSU9OLUlGLVRSVUUsIEFDVElPTi1JRi1UUlVFLVctVVNDT1JFLAorIyAgICAgICAgICAgICAgICAgICAgICBBQ1RJT04tSUYtRkFMU0UsIEFDVElPTi1JRi1DUk9TUy1DT01QSUxJTkcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfVFJZX0RMT1BFTl9TRUxGXSwKK1ttNF9yZXF1aXJlKFtfTFRfSEVBREVSX0RMRkNOXSlkbmwKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgWyQ0XQorZWxzZQorICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitbI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZiBIQVZFX0RMRkNOX0gKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZkZWYgUlRMRF9HTE9CQUwKKyMgIGRlZmluZSBMVF9ETEdMT0JBTAkJUlRMRF9HTE9CQUwKKyNlbHNlCisjICBpZmRlZiBETF9HTE9CQUwKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQlETF9HTE9CQUwKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQkwCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdlIG1heSBoYXZlIHRvIGRlZmluZSBMVF9ETExBWllfT1JfTk9XIGluIHRoZSBjb21tYW5kIGxpbmUgaWYgd2UKKyAgIGZpbmQgb3V0IGl0IGRvZXMgbm90IHdvcmsgaW4gc29tZSBwbGF0Zm9ybS4gKi8KKyNpZm5kZWYgTFRfRExMQVpZX09SX05PVworIyAgaWZkZWYgUlRMRF9MQVpZCisjICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlSVExEX0xBWlkKKyMgIGVsc2UKKyMgICAgaWZkZWYgRExfTEFaWQorIyAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlETF9MQVpZCisjICAgIGVsc2UKKyMgICAgICBpZmRlZiBSVExEX05PVworIyAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJUlRMRF9OT1cKKyMgICAgICBlbHNlCisjICAgICAgICBpZmRlZiBETF9OT1cKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJRExfTk9XCisjICAgICAgICBlbHNlCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCTAKKyMgICAgICAgIGVuZGlmCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCit2b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworI2VuZGlmCisKK3ZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQoraW50IG1haW4gKCkKK3sKKyAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CisgIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOworCisgIGlmIChzZWxmKQorICAgIHsKKyAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOworICAgICAgZWxzZQorICAgICAgICB7CisJICBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSAgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7CisgICAgICAgICAgZWxzZSBwdXRzIChkbGVycm9yICgpKTsKKwl9CisgICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KKyAgICB9CisgIGVsc2UKKyAgICBwdXRzIChkbGVycm9yICgpKTsKKworICByZXR1cm4gc3RhdHVzOworfV0KK19MVF9FT0YKKyAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4vZGV2L251bGwKKyAgICBsdF9zdGF0dXM9JD8KKyAgICBjYXNlIHgkbHRfc3RhdHVzIGluCisgICAgICB4JGx0X2Rsbm9fdXNjb3JlKSAkMSA7OworICAgICAgeCRsdF9kbG5lZWRfdXNjb3JlKSAkMiA7OworICAgICAgeCRsdF9kbHVua25vd258eCopICQzIDs7CisgICAgZXNhYworICBlbHNlIDoKKyAgICAjIGNvbXBpbGF0aW9uIGZhaWxlZAorICAgICQzCisgIGZpCitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorXSkjIF9MVF9UUllfRExPUEVOX1NFTEYKKworCisjIExUX1NZU19ETE9QRU5fU0VMRgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9TWVNfRExPUEVOX1NFTEZdLAorW200X3JlcXVpcmUoW19MVF9IRUFERVJfRExGQ05dKWRubAoraWYgdGVzdCAieCRlbmFibGVfZGxvcGVuIiAhPSB4eWVzOyB0aGVuCisgIGVuYWJsZV9kbG9wZW49dW5rbm93bgorICBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93bgorICBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24KK2Vsc2UKKyAgbHRfY3ZfZGxvcGVuPW5vCisgIGx0X2N2X2Rsb3Blbl9saWJzPQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYmVvcyopCisgICAgbHRfY3ZfZGxvcGVuPSJsb2FkX2FkZF9vbiIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKKyAgICA7OworCisgIG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgIGx0X2N2X2Rsb3Blbj0iTG9hZExpYnJhcnkiCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgOzsKKworICBjeWd3aW4qKQorICAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIDs7CisKKyAgZGFyd2luKikKKyAgIyBpZiBsaWJkbCBpcyBpbnN0YWxsZWQgd2UgbmVlZCB0byBsaW5rIGFnYWluc3QgaXQKKyAgICBBQ19DSEVDS19MSUIoW2RsXSwgW2Rsb3Blbl0sCisJCVtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiXSxbCisgICAgbHRfY3ZfZGxvcGVuPSJkeWxkIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworICAgIF0pCisgICAgOzsKKworICAqKQorICAgIEFDX0NIRUNLX0ZVTkMoW3NobF9sb2FkXSwKKwkgIFtsdF9jdl9kbG9wZW49InNobF9sb2FkIl0sCisgICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbc2hsX2xvYWRdLAorCSAgICBbbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIl0sCisJW0FDX0NIRUNLX0ZVTkMoW2Rsb3Blbl0sCisJICAgICAgW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIl0sCisJICBbQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAorCQlbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIl0sCisJICAgIFtBQ19DSEVDS19MSUIoW3N2bGRdLCBbZGxvcGVuXSwKKwkJICBbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbHN2bGQiXSwKKwkgICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbZGxkX2xpbmtdLAorCQkgICAgW2x0X2N2X2Rsb3Blbj0iZGxkX2xpbmsiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCJdKQorCSAgICAgIF0pCisJICAgIF0pCisJICBdKQorCV0pCisgICAgICBdKQorICAgIDs7CisgIGVzYWMKKworICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3BlbiIgIT0geG5vOyB0aGVuCisgICAgZW5hYmxlX2Rsb3Blbj15ZXMKKyAgZWxzZQorICAgIGVuYWJsZV9kbG9wZW49bm8KKyAgZmkKKworICBjYXNlICRsdF9jdl9kbG9wZW4gaW4KKyAgZGxvcGVuKQorICAgIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHh5ZXMgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKKworICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorCisgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAorCSAgbHRfY3ZfZGxvcGVuX3NlbGYsIFtkbmwKKwkgIF9MVF9UUllfRExPUEVOX1NFTEYoCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzLAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubywgbHRfY3ZfZGxvcGVuX3NlbGY9Y3Jvc3MpCisgICAgXSkKKworICAgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuX3NlbGYiID0geHllczsgdGhlbgorICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCisgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAorCSAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljLCBbZG5sCisJICBfTFRfVFJZX0RMT1BFTl9TRUxGKAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzLCBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzLAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9bm8sICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9Y3Jvc3MpCisgICAgICBdKQorICAgIGZpCisKKyAgICBDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCisgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAgICBMSUJTPSIkc2F2ZV9MSUJTIgorICAgIDs7CisgIGVzYWMKKworICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZiBpbgorICB5ZXN8bm8pIGVuYWJsZV9kbG9wZW5fc2VsZj0kbHRfY3ZfZGxvcGVuX3NlbGYgOzsKKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24gOzsKKyAgZXNhYworCisgIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyBpbgorICB5ZXN8bm8pIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9JGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyA7OworICAqKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24gOzsKKyAgZXNhYworZmkKK19MVF9ERUNMKFtkbG9wZW5fc3VwcG9ydF0sIFtlbmFibGVfZGxvcGVuXSwgWzBdLAorCSBbV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkXSkKK19MVF9ERUNMKFtkbG9wZW5fc2VsZl0sIFtlbmFibGVfZGxvcGVuX3NlbGZdLCBbMF0sCisJIFtXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWRdKQorX0xUX0RFQ0woW2Rsb3Blbl9zZWxmX3N0YXRpY10sIFtlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljXSwgWzBdLAorCSBbV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkXSkKK10pIyBMVF9TWVNfRExPUEVOX1NFTEYKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MSUJUT09MX0RMT1BFTl9TRUxGXSwgW0xUX1NZU19ETE9QRU5fU0VMRl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOX1NFTEZdLCBbXSkKKworCisjIF9MVF9DT01QSUxFUl9DX08oW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdG8gc2VlIGlmIG9wdGlvbnMgLWMgYW5kIC1vIGFyZSBzaW11bHRhbmVvdXNseSBzdXBwb3J0ZWQgYnkgY29tcGlsZXIuCisjIFRoaXMgbWFjcm8gZG9lcyBub3QgaGFyZCBjb2RlIHRoZSBjb21waWxlciBsaWtlIEFDX1BST0dfQ0NfQ19PLgorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9DX09dLAorW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW2lmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHRdLAorICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpXSwKKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT1ubworICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFtbXiBdXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICRSTSBjb25mdGVzdCoKKyAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKKyAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJFJNIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcworICAgJFJNIG91dC8qICYmIHJtZGlyIG91dAorICAgY2QgLi4KKyAgICRSTSAtciBjb25mdGVzdAorICAgJFJNIGNvbmZ0ZXN0KgorXSkKK19MVF9UQUdERUNMKFtjb21waWxlcl9jX29dLCBbbHRfY3ZfcHJvZ19jb21waWxlcl9jX29dLCBbMV0sCisJW0RvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz9dKQorXSkjIF9MVF9DT01QSUxFUl9DX08KKworCisjIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0byBzZWUgaWYgd2UgY2FuIGRvIGhhcmQgbGlua3MgdG8gbG9jayBzb21lIGZpbGVzIGlmIG5lZWRlZAorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9GSUxFX0xPQ0tTXSwKK1ttNF9yZXF1aXJlKFtfTFRfRU5BQkxFX0xPQ0tdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCitfTFRfQ09NUElMRVJfQ19PKFskMV0pCisKK2hhcmRfbGlua3M9Im5vdHRlc3RlZCIKK2lmIHRlc3QgIiRfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSkiID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgorICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rc10pCisgIGhhcmRfbGlua3M9eWVzCisgICRSTSBjb25mdGVzdCoKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgdG91Y2ggY29uZnRlc3QuYQorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIEFDX01TR19SRVNVTFQoWyRoYXJkX2xpbmtzXSkKKyAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KKyAgICBBQ19NU0dfV0FSTihbYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBgLWMgLW8nLCBzbyBgbWFrZSAtaicgbWF5IGJlIHVuc2FmZV0pCisgICAgbmVlZF9sb2Nrcz13YXJuCisgIGZpCitlbHNlCisgIG5lZWRfbG9ja3M9bm8KK2ZpCitfTFRfREVDTChbXSwgW25lZWRfbG9ja3NdLCBbMV0sIFtNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj9dKQorXSkjIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTCisKKworIyBfTFRfQ0hFQ0tfT0JKRElSCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ0hFQ0tfT0JKRElSXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yIG9iamRpcl0sIFtsdF9jdl9vYmpkaXJdLAorW3JtIC1mIC5saWJzIDI+L2Rldi9udWxsCitta2RpciAubGlicyAyPi9kZXYvbnVsbAoraWYgdGVzdCAtZCAubGliczsgdGhlbgorICBsdF9jdl9vYmpkaXI9LmxpYnMKK2Vsc2UKKyAgIyBNUy1ET1MgZG9lcyBub3QgYWxsb3cgZmlsZW5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhIGRvdC4KKyAgbHRfY3Zfb2JqZGlyPV9saWJzCitmaQorcm1kaXIgLmxpYnMgMj4vZGV2L251bGxdKQorb2JqZGlyPSRsdF9jdl9vYmpkaXIKK19MVF9ERUNMKFtdLCBbb2JqZGlyXSwgWzBdLAorICAgICAgICAgW1RoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlc10pZG5sCittNF9wYXR0ZXJuX2FsbG93KFtMVF9PQkpESVJdKWRubAorQUNfREVGSU5FX1VOUVVPVEVEKExUX09CSkRJUiwgIiRsdF9jdl9vYmpkaXIvIiwKKyAgW0RlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSBpbiB3aGljaCBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuXSkKK10pIyBfTFRfQ0hFQ0tfT0JKRElSCisKKworIyBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBoYXJkY29kaW5nIGF0dHJpYnV0ZXMuCittNF9kZWZ1bihbX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXNdKQorX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT0KK2lmIHRlc3QgLW4gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSIgfHwKKyAgIHRlc3QgLW4gIiRfTFRfVEFHVkFSKHJ1bnBhdGhfdmFyLCAkMSkiIHx8CisgICB0ZXN0ICJYJF9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSkiID0gIlh5ZXMiIDsgdGhlbgorCisgICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KKyAgaWYgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSkiICE9IG5vICYmCisgICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKKyAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQorICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCisgICAgICMjIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKSIgIT0gbm8gJiYKKyAgICAgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpIiAhPSBubzsgdGhlbgorICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCisgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1yZWxpbmsKKyAgZWxzZQorICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCisgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1pbW1lZGlhdGUKKyAgZmkKK2Vsc2UKKyAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKKyAgIyBkaXJlY3Rvcmllcy4KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT11bnN1cHBvcnRlZAorZmkKK0FDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpXSkKKworaWYgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSkiID0gcmVsaW5rIHx8CisgICB0ZXN0ICIkX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSkiID0geWVzOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCitlbGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzIHx8CisgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IG5vOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCitmaQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9hY3Rpb25dLCBbMF0sCisgICAgW0hvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlXSkKK10pIyBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgKKworCisjIF9MVF9DTURfU1RSSVBMSUIKKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DTURfU1RSSVBMSUJdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKK3N0cmlwbGliPQorb2xkX3N0cmlwbGliPQorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGVdKQoraWYgdGVzdCAtbiAiJFNUUklQIiAmJiAkU1RSSVAgLVYgMj4mMSB8ICRHUkVQICJHTlUgc3RyaXAiID4vZGV2L251bGw7IHRoZW4KKyAgdGVzdCAteiAiJG9sZF9zdHJpcGxpYiIgJiYgb2xkX3N0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC1kZWJ1ZyIKKyAgdGVzdCAteiAiJHN0cmlwbGliIiAmJiBzdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtdW5uZWVkZWQiCisgIEFDX01TR19SRVNVTFQoW3llc10pCitlbHNlCisjIEZJWE1FIC0gaW5zZXJ0IHNvbWUgcmVhbCB0ZXN0cywgaG9zdF9vcyBpc24ndCByZWFsbHkgZ29vZCBlbm91Z2gKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgLW4gIiRTVFJJUCIgOyB0aGVuCisgICAgICBzdHJpcGxpYj0iJFNUUklQIC14IgorICAgICAgb2xkX3N0cmlwbGliPSIkU1RSSVAgLVMiCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBmaQorICAgIDs7CisgICopCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIDs7CisgIGVzYWMKK2ZpCitfTFRfREVDTChbXSwgW29sZF9zdHJpcGxpYl0sIFsxXSwgW0NvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW3N0cmlwbGliXSwgWzFdKQorXSkjIF9MVF9DTURfU1RSSVBMSUIKKworCisjIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBPUlRNRSBGaWxsIGluIHlvdXIgbGQuc28gY2hhcmFjdGVyaXN0aWNzCittNF9kZWZ1bihbX0xUX1NZU19EWU5BTUlDX0xJTktFUl0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9PQkpEVU1QXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdKWRubAorQUNfTVNHX0NIRUNLSU5HKFtkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3NdKQorbTRfaWYoWyQxXSwKKwlbXSwgWworaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGRhcndpbiopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8sL0xSLyIgOzsKKyAgICAqKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovIiA7OworICBlc2FjCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlZF9zdHJpcF9lcT0icyw9XChbW0EtWmEtel1dOlwpLFwxLGciIDs7CisgICAgKikgbHRfc2VkX3N0cmlwX2VxPSJzLD0vLC8sZyIgOzsKKyAgZXNhYworICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgYXdrICRsdF9hd2tfYXJnIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAkbHRfc2VkX3N0cmlwX2VxYAorICBjYXNlICRsdF9zZWFyY2hfcGF0aF9zcGVjIGluCisgICpcOyopCisgICAgIyBpZiB0aGUgcGF0aCBjb250YWlucyAiOyIgdGhlbiB3ZSBhc3N1bWUgaXQgdG8gYmUgdGhlIHNlcGFyYXRvcgorICAgICMgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIHN0YW5kYXJkIHBhdGggc2VwYXJhdG9yIChpLmUuICI6IikgLSBpdCBpcworICAgICMgYXNzdW1lZCB0aGF0IG5vIHBhcnQgb2YgYSBub3JtYWwgcGF0aG5hbWUgY29udGFpbnMgIjsiIGJ1dCB0aGF0IHNob3VsZAorICAgICMgb2theSBpbiB0aGUgcmVhbCB3b3JsZCB3aGVyZSAiOyIgaW4gZGlycGF0aHMgaXMgaXRzZWxmIHByb2JsZW1hdGljLgorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICdzLzsvIC9nJ2AKKyAgICA7OworICAqKQorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgIDs7CisgIGVzYWMKKyAgIyBPaywgbm93IHdlIGhhdmUgdGhlIHBhdGgsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHdlIGNhbiBzdGVwIHRocm91Z2ggaXQKKyAgIyBhbmQgYWRkIG11bHRpbGliIGRpciBpZiBuZWNlc3NhcnkuCisgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPQorICBsdF9tdWx0aV9vc19kaXI9YCRDQyAkQ1BQRkxBR1MgJENGTEFHUyAkTERGTEFHUyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5IDI+L2Rldi9udWxsYAorICBmb3IgbHRfc3lzX3BhdGggaW4gJGx0X3NlYXJjaF9wYXRoX3NwZWM7IGRvCisgICAgaWYgdGVzdCAtZCAiJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCisgICAgICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIgorICAgIGVsc2UKKyAgICAgIHRlc3QgLWQgIiRsdF9zeXNfcGF0aCIgJiYgXAorCWx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoIgorICAgIGZpCisgIGRvbmUKKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCBhd2sgJworQkVHSU4ge1JTPSIgIjsgRlM9Ii98XG4iO30geworICBsdF9mb289IiI7CisgIGx0X2NvdW50PTA7CisgIGZvciAobHRfaSA9IE5GOyBsdF9pID4gMDsgbHRfaS0tKSB7CisgICAgaWYgKCRsdF9pICE9ICIiICYmICRsdF9pICE9ICIuIikgeworICAgICAgaWYgKCRsdF9pID09ICIuLiIpIHsKKyAgICAgICAgbHRfY291bnQrKzsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChsdF9jb3VudCA9PSAwKSB7CisgICAgICAgICAgbHRfZm9vPSIvIiAkbHRfaSBsdF9mb287CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbHRfY291bnQtLTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICBpZiAobHRfZm9vICE9ICIiKSB7IGx0X2ZyZXFbW2x0X2Zvb11dKys7IH0KKyAgaWYgKGx0X2ZyZXFbW2x0X2Zvb11dID09IDEpIHsgcHJpbnQgbHRfZm9vOyB9Cit9J2AKKyAgIyBBV0sgcHJvZ3JhbSBhYm92ZSBlcnJvbmVvdXNseSBwcmVwZW5kcyAnLycgdG8gQzovZG9zL3BhdGhzCisgICMgZm9yIHRoZXNlIGhvc3RzLgorICBjYXNlICRob3N0X29zIGluCisgICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHxcCisgICAgICAkU0VEICdzLC9cKFtbQS1aYS16XV06XCksXDEsZydgIDs7CisgIGVzYWMKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJGx0X05MMlNQYAorZWxzZQorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCitmaV0pCitsaWJyYXJ5X25hbWVzX3NwZWM9CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworc29uYW1lX3NwZWM9CitzaHJleHRfY21kcz0iLnNvIgorcG9zdGluc3RhbGxfY21kcz0KK3Bvc3R1bmluc3RhbGxfY21kcz0KK2ZpbmlzaF9jbWRzPQorZmluaXNoX2V2YWw9CitzaGxpYnBhdGhfdmFyPQorc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KK3ZlcnNpb25fdHlwZT1ub25lCitkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKK25lZWRfbGliX3ByZWZpeD11bmtub3duCitoYXJkY29kZV9pbnRvX2xpYnM9bm8KKworIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCisjIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKK25lZWRfdmVyc2lvbj11bmtub3duCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lLmEnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorCisgICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgOzsKKworYWl4W1s0LTldXSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBlbHNlCisgICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQorICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKKyAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCisgICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKyAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDQgfCBhaXg0LltbMDFdXSB8IGFpeDQuW1swMV1dLiopCisgICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJworCSAgIGVjaG8gJyB5ZXMgJworCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgJEdSRVAgeWVzID4gL2Rldi9udWxsOyB0aGVuCisJOgorICAgICAgZWxzZQorCWNhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2FuIG5vdCBoYXJkY29kZSBjb3JyZWN0CisgICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bworICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCisgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KKyAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90CisgICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBlbHNlCisgICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgorICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LmEgJGxpYm5hbWUuYScKKyAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZmkKKyAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgZmkKKyAgOzsKKworYW1pZ2FvcyopCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIHBvd2VycGMpCisgICAgIyBTaW5jZSBKdWx5IDIwMDcgQW1pZ2FPUzQgb2ZmaWNpYWxseSBzdXBwb3J0cyAuc28gbGlicmFyaWVzLgorICAgICMgV2hlbiBjb21waWxpbmcgdGhlIGV4ZWN1dGFibGUsIGFkZCAtdXNlLWR5bmxkIC1Mc29ianM6IHRvIHRoZSBjb21waWxlbGluZS4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICA7OworICBtNjhrKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCisgICAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KKyAgICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YGZ1bmNfZWNob19hbGwgIiRsaWIiIHwgJFNFRCAnXCcncyVeLiovXChbW14vXV0qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICAgIDs7CisgIGVzYWMKKyAgOzsKKworYmVvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgOzsKKworYnNkaVtbNDVdXSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisgICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCisgICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdworICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKKyAgOzsKKworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICB2ZXJzaW9uX3R5cGU9d2luZG93cworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF92ZXJzaW9uPW5vCisgIG5lZWRfbGliX3ByZWZpeD1ubworCisgIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgorICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCisgICAgICAgIGV2YWwgJ1wnJyRzdHJpcGxpYiBcJGRsZGlyLyRkbG5hbWUnXCcnIHx8IGV4aXQgXCQ/OworICAgICAgZmknCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJFJNIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qKQorICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKK200X2lmKFskMV0sIFtdLFsKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xpYi93MzJhcGkiXSkKKyAgICAgIDs7CisgICAgbWluZ3cqIHwgY2VnY2MqKQorICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKKyAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgOzsKKyAgICBwdzMyKikKKyAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICA7OworICAgIGVzYWMKKyAgICA7OworCisgICopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKyAgICA7OworICBlc2FjCisgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCisgIHZlcnNpb25fdHlwZT1kYXJ3aW4KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQnCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSAorICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKK200X2lmKFskMV0sIFtdLFsKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbG9jYWwvbGliIl0pCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJworICA7OworCitkZ3V4KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCitmcmVlYnNkMSopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldworICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KKyAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KKyAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBmcmVlYnNkW1sxMjNdXSopIG9iamZvcm1hdD1hb3V0IDs7CisgICAgKikgb2JqZm9ybWF0PWVsZiA7OworICAgIGVzYWMKKyAgZmkKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAorICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKyAgICBmcmVlYnNkLWVsZiopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIGZyZWVic2QtKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgICAgbmVlZF92ZXJzaW9uPXllcworICAgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X29zIGluCisgIGZyZWVic2QyKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuW1swMV1dKiB8IGZyZWVic2RlbGYzLltbMDFdXSopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bWzItOV1dKiB8IGZyZWVic2RlbGYzLltbMi05XV0qIHwgXAorICBmcmVlYnNkNC5bWzAtNV1dIHwgZnJlZWJzZGVsZjQuW1swLTVdXSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgKikgIyBmcm9tIDQuNiBvbiwgYW5kIERyYWdvbkZseQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZXNhYworICA7OworCitnbnUqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaGFpa3UqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgcnVudGltZV9sb2FkZXIiCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bworICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbycKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGlmIHRlc3QgIlgkSFBVWF9JQTY0X01PREUiID0gWDMyOyB0aGVuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCisgICAgZWxzZQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgorICAgIGZpCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgIGhwcGEqNjQqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICA7OworICAqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgOzsKKyAgZXNhYworICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NSwgLi4uCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJworICAjIG9yIGZhaWxzIG91dHJpZ2h0LCBzbyBvdmVycmlkZSBhdG9taWNhbGx5OgorICBpbnN0YWxsX292ZXJyaWRlX21vZGU9NTU1CisgIDs7CisKK2ludGVyaXhbWzMtOV1dKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7CisgICAgKikKKwlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisJCXZlcnNpb25fdHlwZT1saW51eAorCWVsc2UKKwkJdmVyc2lvbl90eXBlPWlyaXgKKwlmaSA7OworICBlc2FjCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBjYXNlICRob3N0X29zIGluCisgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorICAgIDs7CisgICopCisgICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAorICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCisgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7CisgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKKyAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OworICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQorICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKKyAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKKyMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KK2xpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCisgICMgU29tZSBiaW51dGlscyBsZCBhcmUgcGF0Y2hlZCB0byBzZXQgRFRfUlVOUEFUSAorICBBQ19DQUNIRV9WQUwoW2x0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aF0sCisgICAgW2x0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgIHNhdmVfbGliZGlyPSRsaWJkaXIKKyAgICBldmFsICJsaWJkaXI9L2Zvbzsgd2w9XCIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSlcIjsgXAorCSBMREZMQUdTPVwiXCRMREZMQUdTICRfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKVwiIgorICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sW10pXSwKKyAgICAgIFtBU19JRihbICgkT0JKRFVNUCAtcCBjb25mdGVzdCRhY19leGVleHQpIDI+L2Rldi9udWxsIHwgZ3JlcCAiUlVOUEFUSC4qJGxpYmRpciIgPi9kZXYvbnVsbF0sCisJIFtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzXSldKQorICAgIExERkxBR1M9JHNhdmVfTERGTEFHUworICAgIGxpYmRpcj0kc2F2ZV9saWJkaXIKKyAgICBdKQorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAorCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCisgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXFskXTIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFxbJF0wOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWwkgXSpod2NhcFsJIF0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZztzLyIvL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgJGx0X2xkX2V4dHJhIgorICBmaQorCisgICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgorICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCisgICMgR05VIGR5bmFtaWMgbGlua2VyLiAgU2luY2UgdGhpcyB3YXMgYnJva2VuIHdpdGggY3Jvc3MgY29tcGlsZXJzLAorICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAorICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKKyAgIyBhc3N1bWUgdGhlIEdOVS9MaW51eCBkeW5hbWljIGxpbmtlciBpcyBpbiB1c2UuCisgIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCisgIDs7CisKK25ldGJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKKyAgZWxzZQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKKyAgZmkKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK25ld3NvczYpCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICA7OworCisqbnRvKiB8ICpxbngqKQorICB2ZXJzaW9uX3R5cGU9cW54CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdsZHFueC5zbycKKyAgOzsKKworb3BlbmJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCisgIG5lZWRfbGliX3ByZWZpeD1ubworICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKQluZWVkX3ZlcnNpb249eWVzIDs7CisgICAgKikJCQkJbmVlZF92ZXJzaW9uPW5vICA7OworICBlc2FjCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBvcGVuYnNkMi5bWzg5XV0gfCBvcGVuYnNkMi5bWzg5XV0uKikKKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKwk7OworICAgICAgKikKKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisJOzsKKyAgICAgIGVzYWMKKyAgZWxzZQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgZmkKKyAgOzsKKworb3MyKikKKyAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fSAkbGlibmFtZS5hJworICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorICA7OworCitvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgIHZlcnNpb25fdHlwZT1vc2YKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCisgIDs7CisKK3Jkb3MqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCitzb2xhcmlzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJworICA7OworCitzdW5vczQqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgbmVlZF9saWJfcHJlZml4PW5vCisgIGZpCisgIG5lZWRfdmVyc2lvbj15ZXMKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICAgIHNuaSkKKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgICAgOzsKKyAgICBzaWVtZW5zKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIG1vdG9yb2xhKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKKyAgICAgIDs7CisgIGVzYWMKKyAgOzsKKworc3lzdjQqTVAqKQorICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCisgICAgdmVyc2lvbl90eXBlPWxpbnV4CisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvcicKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBmaQorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtZWxmCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCisgIGVsc2UKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzY28zLjJ2NSopCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgorCTs7CisgICAgZXNhYworICBmaQorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCisgIDs7CisKK3RwZiopCisgICMgVFBGIGlzIGEgY3Jvc3MtdGFyZ2V0IG9ubHkuICBQcmVmZXJyZWQgY3Jvc3MtaG9zdCA9IEdOVS9MaW51eC4KKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK3V0czQqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKKyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7Citlc2FjCitBQ19NU0dfUkVTVUxUKFskZHluYW1pY19saW5rZXJdKQordGVzdCAiJGR5bmFtaWNfbGlua2VyIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKwordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCitmaQorCitpZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCitmaQoraWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIgorZmkKKworX0xUX0RFQ0woW10sIFt2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGlua10sIFsxXSwKKyAgICBbVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCisgICAgcmVzdG9yZWQgYXQgbGluayB0aW1lXSkKK19MVF9ERUNMKFtdLCBbbmVlZF9saWJfcHJlZml4XSwgWzBdLAorICAgIFtEbyB3ZSBuZWVkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXM/XSkKK19MVF9ERUNMKFtdLCBbbmVlZF92ZXJzaW9uXSwgWzBdLCBbRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz9dKQorX0xUX0RFQ0woW10sIFt2ZXJzaW9uX3R5cGVdLCBbMF0sIFtMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZV0pCitfTFRfREVDTChbXSwgW3J1bnBhdGhfdmFyXSwgWzBdLCAgW1NoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZV0pCitfTFRfREVDTChbXSwgW3NobGlicGF0aF92YXJdLCBbMF0sW1NoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGVdKQorX0xUX0RFQ0woW10sIFtzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGhdLCBbMF0sCisgICAgW0lzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD9dKQorX0xUX0RFQ0woW10sIFtsaWJuYW1lX3NwZWNdLCBbMV0sIFtGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeF0pCitfTFRfREVDTChbXSwgW2xpYnJhcnlfbmFtZXNfc3BlY10sIFsxXSwKKyAgICBbW0xpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCisgICAgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRV1dKQorX0xUX0RFQ0woW10sIFtzb25hbWVfc3BlY10sIFsxXSwKKyAgICBbW1RoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lXV0pCitfTFRfREVDTChbXSwgW2luc3RhbGxfb3ZlcnJpZGVfbW9kZV0sIFsxXSwKKyAgICBbUGVybWlzc2lvbiBtb2RlIG92ZXJyaWRlIGZvciBpbnN0YWxsYXRpb24gb2Ygc2hhcmVkIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW3Bvc3RpbnN0YWxsX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmQgdG8gdXNlIGFmdGVyIGluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9ERUNMKFtdLCBbcG9zdHVuaW5zdGFsbF9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kIHRvIHVzZSBhZnRlciB1bmluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9ERUNMKFtdLCBbZmluaXNoX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeV0pCitfTFRfREVDTChbXSwgW2ZpbmlzaF9ldmFsXSwgWzFdLAorICAgIFtbQXMgImZpbmlzaF9jbWRzIiwgZXhjZXB0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0CisgICAgbm90IHNob3duXV0pCitfTFRfREVDTChbXSwgW2hhcmRjb2RlX2ludG9fbGlic10sIFswXSwKKyAgICBbV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW3N5c19saWJfc2VhcmNoX3BhdGhfc3BlY10sIFsyXSwKKyAgICBbQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzXSkKK19MVF9ERUNMKFtdLCBbc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWNdLCBbMl0sCisgICAgW1J1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzXSkKK10pIyBfTFRfU1lTX0RZTkFNSUNfTElOS0VSCisKKworIyBfTFRfUEFUSF9UT09MX1BSRUZJWChUT09MKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaW5kIGEgZmlsZSBwcm9ncmFtIHdoaWNoIGNhbiByZWNvZ25pemUgc2hhcmVkIGxpYnJhcnkKK0FDX0RFRlVOKFtfTFRfUEFUSF9UT09MX1BSRUZJWF0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDFdKQorQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfTUFHSUNfQ01ELAorW2Nhc2UgJE1BR0lDX0NNRCBpbgorW1tcXC8qXSB8ICA/OltcXC9dKl0pCisgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyopCisgIGx0X3NhdmVfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2RubCAkYWNfZHVtbXkgZm9yY2VzIHNwbGl0dGluZyBvbiBjb25zdGFudCB1c2VyLXN1cHBsaWVkIHBhdGhzLgorZG5sIFBPU0lYLjIgd29yZCBzcGxpdHRpbmcgaXMgZG9uZSBvbmx5IG9uIHRoZSBvdXRwdXQgb2Ygd29yZCBleHBhbnNpb25zLAorZG5sIG5vdCBldmVyeSB3b3JkLiAgVGhpcyBjbG9zZXMgYSBsb25nc3RhbmRpbmcgc2ggc2VjdXJpdHkgaG9sZS4KKyAgYWNfZHVtbXk9Im00X2lmKFskMl0sICwgJFBBVEgsIFskMl0pIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kMTsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRhY19kaXIvJDEiCisgICAgICBpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY190ZXN0X2ZpbGUiOyB0aGVuCisJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwkiZmlsZV9tYWdpYyAiKikKKwkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiZmlsZV9tYWdpYyBcKC4qXCkiYAorCSAgTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCisJICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcJGZpbGVfbWFnaWNfdGVzdF9maWxlIDI+IC9kZXYvbnVsbCB8CisJICAgICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJICAgIDoKKwkgIGVsc2UKKwkgICAgY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiB0aGUgY29tbWFuZCBsaWJ0b29sIHVzZXMgdG8gZGV0ZWN0IHNoYXJlZCBsaWJyYXJpZXMsCisqKiogJGZpbGVfbWFnaWNfY21kLCBwcm9kdWNlcyBvdXRwdXQgdGhhdCBsaWJ0b29sIGNhbm5vdCByZWNvZ25pemUuCisqKiogVGhlIHJlc3VsdCBpcyB0aGF0IGxpYnRvb2wgbWF5IGZhaWwgdG8gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJpZXMKKyoqKiBhcyBzdWNoLiAgVGhpcyB3aWxsIGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMgdGhhdAorKioqIGRlcGVuZCBvbiBzaGFyZWQgbGlicmFyaWVzLCBidXQgcHJvZ3JhbXMgbGlua2VkIHdpdGggc3VjaCBsaWJ0b29sCisqKiogbGlicmFyaWVzIHdpbGwgd29yayByZWdhcmRsZXNzIG9mIHRoaXMgcHJvYmxlbS4gIE5ldmVydGhlbGVzcywgeW91CisqKiogbWF5IHdhbnQgdG8gcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHlvdXIgc3lzdGVtIG1hbmFnZXIgYW5kL29yIHRvCisqKiogYnVnLWxpYnRvb2xAZ251Lm9yZworCitfTFRfRU9GCisJICBmaSA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgIE1BR0lDX0NNRD0iJGx0X3NhdmVfTUFHSUNfQ01EIgorICA7OworZXNhY10pCitNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKK2lmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCisgIEFDX01TR19SRVNVTFQoJE1BR0lDX0NNRCkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKK2ZpCitfTFRfREVDTChbXSwgW01BR0lDX0NNRF0sIFswXSwKKwkgW1VzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgd2l0aCAiZmlsZSJdKWRubAorXSkjIF9MVF9QQVRIX1RPT0xfUFJFRklYCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfUEFUSF9UT09MX1BSRUZJWF0sIFtfTFRfUEFUSF9UT09MX1BSRUZJWF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX1BBVEhfVE9PTF9QUkVGSVhdLCBbXSkKKworCisjIF9MVF9QQVRIX01BR0lDCisjIC0tLS0tLS0tLS0tLS0tCisjIGZpbmQgYSBmaWxlIHByb2dyYW0gd2hpY2ggY2FuIHJlY29nbml6ZSBhIHNoYXJlZCBsaWJyYXJ5CittNF9kZWZ1bihbX0xUX1BBVEhfTUFHSUNdLAorW19MVF9QQVRIX1RPT0xfUFJFRklYKCR7YWNfdG9vbF9wcmVmaXh9ZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKK2lmIHRlc3QgLXogIiRsdF9jdl9wYXRoX01BR0lDX0NNRCI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIF9MVF9QQVRIX1RPT0xfUFJFRklYKGZpbGUsIC91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgpCisgIGVsc2UKKyAgICBNQUdJQ19DTUQ9OgorICBmaQorZmkKK10pIyBfTFRfUEFUSF9NQUdJQworCisKKyMgTFRfUEFUSF9MRAorIyAtLS0tLS0tLS0tCisjIGZpbmQgdGhlIHBhdGhuYW1lIHRvIHRoZSBHTlUgb3Igbm9uLUdOVSBsaW5rZXIKK0FDX0RFRlVOKFtMVF9QQVRIX0xEXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbTRfcmVxdWlyZShbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdKWRubAorCitBQ19BUkdfV0lUSChbZ251LWxkXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1nbnUtbGRdLAorCVthc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgQDw6QGRlZmF1bHQ9bm9AOj5AXSldLAorICAgIFt0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXNdLAorICAgIFt3aXRoX2dudV9sZD1ub10pZG5sCisKK2FjX3Byb2c9bGQKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBsZCB1c2VkIGJ5ICRDQ10pCisgIGNhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KikKKyAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3CisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OworICAqKQorICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKKyAgZXNhYworICBjYXNlICRhY19wcm9nIGluCisgICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCisgICAgW1tcXC9dXSogfCA/OltbXFwvXV0qKQorICAgICAgcmVfZGlyZWx0PScvW1teL11dW1teL11dKi9cLlwuLycKKyAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZSBvZiBsZAorICAgICAgYWNfcHJvZz1gJEVDSE8gIiRhY19wcm9nInwgJFNFRCAncyVcXFxcJS8lZydgCisgICAgICB3aGlsZSAkRUNITyAiJGFjX3Byb2ciIHwgJEdSRVAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCisJYWNfcHJvZz1gJEVDSE8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBkb25lCisgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKKyAgICAgIDs7CisgICIiKQorICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorICAgIGFjX3Byb2c9bGQKKyAgICA7OworICAqKQorICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKyAgICB3aXRoX2dudV9sZD11bmtub3duCisgICAgOzsKKyAgZXNhYworZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgIEFDX01TR19DSEVDS0lORyhbZm9yIEdOVSBsZF0pCitlbHNlCisgIEFDX01TR19DSEVDS0lORyhbZm9yIG5vbi1HTlUgbGRdKQorZmkKK0FDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX0xELAorW2lmIHRlc3QgLXogIiRMRCI7IHRoZW4KKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCisgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCisgICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgdmFyaWFudHMgb2YgR05VIGxkIG9ubHkgYWNjZXB0IC12LgorICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCisgICAgICBjYXNlIGAiJGx0X2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKyAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsKKwk7OworICAgICAgKikKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhaworCTs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRsdF9zYXZlX2lmcyIKK2Vsc2UKKyAgbHRfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KK2ZpXSkKK0xEPSIkbHRfY3ZfcGF0aF9MRCIKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCgkTEQpCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCitmaQordGVzdCAteiAiJExEIiAmJiBBQ19NU0dfRVJST1IoW25vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIXSkKK19MVF9QQVRIX0xEX0dOVQorQUNfU1VCU1QoW0xEXSkKKworX0xUX1RBR0RFQ0woW10sIFtMRF0sIFsxXSwgW1RoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXNdKQorXSkjIExUX1BBVEhfTEQKKworIyBPbGQgbmFtZXM6CitBVV9BTElBUyhbQU1fUFJPR19MRF0sIFtMVF9QQVRIX0xEXSkKK0FVX0FMSUFTKFtBQ19QUk9HX0xEXSwgW0xUX1BBVEhfTERdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9QUk9HX0xEXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX1BST0dfTERdLCBbXSkKKworCisjIF9MVF9QQVRIX0xEX0dOVQorIy0gLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfUEFUSF9MRF9HTlVdLAorW0FDX0NBQ0hFX0NIRUNLKFtpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZF0sIGx0X2N2X3Byb2dfZ251X2xkLAorWyMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkcyBvbmx5IGFjY2VwdCAtdi4KK2Nhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9eWVzCisgIDs7CisqKQorICBsdF9jdl9wcm9nX2dudV9sZD1ubworICA7OworZXNhY10pCit3aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKK10pIyBfTFRfUEFUSF9MRF9HTlUKKworCisjIF9MVF9DTURfUkVMT0FECisjIC0tLS0tLS0tLS0tLS0tCisjIGZpbmQgcmVsb2FkIGZsYWcgZm9yIGxpbmtlcgorIyAgIC0tIFBPUlRNRSBTb21lIGxpbmtlcnMgbWF5IG5lZWQgYSBkaWZmZXJlbnQgcmVsb2FkIGZsYWcuCittNF9kZWZ1bihbX0xUX0NNRF9SRUxPQURdLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzXSwKKyAgbHRfY3ZfbGRfcmVsb2FkX2ZsYWcsCisgIFtsdF9jdl9sZF9yZWxvYWRfZmxhZz0nLXInXSkKK3JlbG9hZF9mbGFnPSRsdF9jdl9sZF9yZWxvYWRfZmxhZworY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyIiIHwgIiAiKikgOzsKKyopIHJlbG9hZF9mbGFnPSIgJHJlbG9hZF9mbGFnIiA7OworZXNhYworcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZWxzZQorICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGZpCisgICAgOzsKK2VzYWMKK19MVF9UQUdERUNMKFtdLCBbcmVsb2FkX2ZsYWddLCBbMV0sIFtIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzXSlkbmwKK19MVF9UQUdERUNMKFtdLCBbcmVsb2FkX2NtZHNdLCBbMl0pZG5sCitdKSMgX0xUX0NNRF9SRUxPQUQKKworCisjIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBob3cgdG8gY2hlY2sgZm9yIGxpYnJhcnkgZGVwZW5kZW5jaWVzCisjICAtLSBQT1JUTUUgZmlsbCBpbiB3aXRoIHRoZSBkeW5hbWljIGxpYnJhcnkgY2hhcmFjdGVyaXN0aWNzCittNF9kZWZ1bihbX0xUX0NIRUNLX01BR0lDX01FVEhPRF0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKQorbTRfcmVxdWlyZShbX0xUX0RFQ0xfT0JKRFVNUF0pCitBQ19DQUNIRV9DSEVDSyhbaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzXSwKK2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kLAorW2x0X2N2X2ZpbGVfbWFnaWNfY21kPSckTUFHSUNfQ01EJworbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9CitsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0ndW5rbm93bicKKyMgTmVlZCB0byBzZXQgdGhlIHByZWNlZGluZyB2YXJpYWJsZSBvbiBhbGwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydAorIyBpbnRlcmxpYnJhcnkgZGVwZW5kZW5jaWVzLgorIyAnbm9uZScgLS0gZGVwZW5kZW5jaWVzIG5vdCBzdXBwb3J0ZWQuCisjIGB1bmtub3duJyAtLSBzYW1lIGFzIG5vbmUsIGJ1dCBkb2N1bWVudHMgdGhhdCB3ZSByZWFsbHkgZG9uJ3Qga25vdy4KKyMgJ3Bhc3NfYWxsJyAtLSBhbGwgZGVwZW5kZW5jaWVzIHBhc3NlZCB3aXRoIG5vIGNoZWNrcy4KKyMgJ3Rlc3RfY29tcGlsZScgLS0gY2hlY2sgYnkgbWFraW5nIHRlc3QgcHJvZ3JhbS4KKyMgJ2ZpbGVfbWFnaWMgW1tyZWdleF1dJyAtLSBjaGVjayBieSBsb29raW5nIGZvciBmaWxlcyBpbiBsaWJyYXJ5IHBhdGgKKyMgd2hpY2ggcmVzcG9uZHMgdG8gdGhlICRmaWxlX21hZ2ljX2NtZCB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgcmVnZXguCisjIElmIHlvdSBoYXZlIGBmaWxlJyBvciBlcXVpdmFsZW50IG9uIHlvdXIgc3lzdGVtIGFuZCB5b3UncmUgbm90IHN1cmUKKyMgd2hldGhlciBgcGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeFtbNC05XV0qKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitiZW9zKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworYnNkaVtbNDVdXSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKScKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy91c3IvYmluL2ZpbGUgLUwnCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9zaGxpYi9saWJjLnNvCisgIDs7CisKK2N5Z3dpbiopCisgICMgZnVuY193aW4zMl9saWJpZCBpcyBhIHNoZWxsIGZ1bmN0aW9uIGRlZmluZWQgaW4gbHRtYWluLnNoCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICA7OworCittaW5ndyogfCBwdzMyKikKKyAgIyBCYXNlIE1TWVMvTWluR1cgZG8gbm90IHByb3ZpZGUgdGhlICdmaWxlJyBjb21tYW5kIG5lZWRlZCBieQorICAjIGZ1bmNfd2luMzJfbGliaWQgc2hlbGwgZnVuY3Rpb24sIHNvIHVzZSBhIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJywKKyAgIyB1bmxlc3Mgd2UgZmluZCAnZmlsZScsIGZvciBleGFtcGxlIGJlY2F1c2Ugd2UgYXJlIGNyb3NzLWNvbXBpbGluZy4KKyAgIyBmdW5jX3dpbjMyX2xpYmlkIGFzc3VtZXMgQlNEIG5tLCBzbyBkaXNhbGxvdyBpdCBpZiB1c2luZyBNUyBkdW1wYmluLgorICBpZiAoIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIkJTRCBubSIgJiYgZmlsZSAvICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgZWxzZQorICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICBmaQorICA7OworCitjZWdjYyopCisgICMgdXNlIHRoZSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcuIFNlZSBtaW5ndyouCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlLWFybS0uKmxpdHRsZSguKmFyY2hpdGVjdHVyZTogYXJtKT8nCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICBjYXNlICRob3N0X2NwdSBpbgorICAgIGkqODYgKQorICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHRoZSBwcmVzZW5jZSBvZiBPcGVuQlNEIGhlcmUgd2FzIGEgbWlzdGFrZS4KKyAgICAgICMgTGV0J3MgYWNjZXB0IGJvdGggb2YgdGhlbSB1bnRpbCB0aGlzIGlzIGNsZWFyZWQgdXAuCisgICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoRnJlZUJTRHxPcGVuQlNEfERyYWdvbkZseSkvaVtbMy05XV04NiAoY29tcGFjdCApP2RlbWFuZCBwYWdlZCBzaGFyZWQgbGlicmFyeScKKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28uKmAKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgZmkKKyAgOzsKKworZ251KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworaGFpa3UqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitocHV4MTAuMjAqIHwgaHB1eDExKikKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1tbMC05XV1bWzAtOV1dW1swLTldXXxFTEYtW1swLTldXVtbMC05XV0pIHNoYXJlZCBvYmplY3QgZmlsZSAtIElBNjQnCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvaHB1eDMyL2xpYmMuc28KKyAgICA7OworICBocHBhKjY0KikKKyAgICBbbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGWyAtXVswLTldWzAtOV0pKC1iaXQpPyggW0xNXVNCKT8gc2hhcmVkIG9iamVjdCggZmlsZSk/WywgLV0qIFBBLVJJU0MgWzAtOV1cLlswLTldJ10KKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9wYTIwXzY0L2xpYmMuc2wKKyAgICA7OworICAqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzW1swLTldXVtbMC05XV1bWzAtOV1dfFBBLVJJU0NbWzAtOV1dXC5bWzAtOV1dKSBzaGFyZWQgbGlicmFyeScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJjLnNsCisgICAgOzsKKyAgZXNhYworICA7OworCitpbnRlcml4W1szLTldXSopCisgICMgUElDIGNvZGUgaXMgYnJva2VuIG9uIEludGVyaXggMy54LCB0aGF0J3Mgd2h5IHxcLmEgbm90IHxfcGljXC5hIGhlcmUKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb3xcLmEpJCcKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkTEQgaW4KKyAgKi0zMnwqIi0zMiAiKSBsaWJtYWdpYz0zMi1iaXQ7OworICAqLW4zMnwqIi1uMzIgIikgbGlibWFnaWM9TjMyOzsKKyAgKi02NHwqIi02NCAiKSBsaWJtYWdpYz02NC1iaXQ7OworICAqKSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgIGVzYWMKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCituZXRic2QqKQorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvXC5bWzAtOV1dK1wuW1swLTldXSt8X3BpY1wuYSkkJworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb3xfcGljXC5hKSQnCisgIGZpCisgIDs7CisKK25ld29zNiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChleGVjdXRhYmxlfGR5bmFtaWMgbGliKScKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJubHMuc28KKyAgOzsKKworKm50byogfCAqcW54KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworb3BlbmJzZCopCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvXC5bWzAtOV1dK1wuW1swLTldXSt8XC5zb3xfcGljXC5hKSQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvXC5bWzAtOV1dK1wuW1swLTldXSt8X3BpY1wuYSkkJworICBmaQorICA7OworCitvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3Jkb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzb2xhcmlzKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3N5c3Y0IHwgc3lzdjQuMyopCisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgIG1vdG9yb2xhKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKSBNW1swLTldXVtbMC05XV0qIFZlcnNpb24gW1swLTldXScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvKmAKKyAgICA7OworICBuY3IpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBzZXF1ZW50KQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tMTV1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIgKScKKyAgICA7OworICBzbmkpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0iZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW0xNXV1TQiBkeW5hbWljIGxpYiIKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vbGliL2xpYmMuc28KKyAgICA7OworICBzaWVtZW5zKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgcGMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBlc2FjCisgIDs7CisKK3RwZiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7Citlc2FjCitdKQorZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKK3Rlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorCitfTFRfREVDTChbXSwgW2RlcGxpYnNfY2hlY2tfbWV0aG9kXSwgWzFdLAorICAgIFtNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0c10pCitfTFRfREVDTChbXSwgW2ZpbGVfbWFnaWNfY21kXSwgWzFdLAorICAgIFtDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIl0pCitdKSMgX0xUX0NIRUNLX01BR0lDX01FVEhPRAorCisKKyMgTFRfUEFUSF9OTQorIyAtLS0tLS0tLS0tCisjIGZpbmQgdGhlIHBhdGhuYW1lIHRvIGEgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyCitBQ19ERUZVTihbTFRfUEFUSF9OTV0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19DQUNIRV9DSEVDSyhbZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pXSwgbHRfY3ZfcGF0aF9OTSwKK1tpZiB0ZXN0IC1uICIkTk0iOyB0aGVuCisgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBsdF9jdl9wYXRoX05NPSIkTk0iCitlbHNlCisgIGx0X25tX3RvX2NoZWNrPSIke2FjX3Rvb2xfcHJlZml4fW5tIgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiICYmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisgICAgbHRfbm1fdG9fY2hlY2s9IiRsdF9ubV90b19jaGVjayBubSIKKyAgZmkKKyAgZm9yIGx0X3RtcF9ubSBpbiAkbHRfbm1fdG9fY2hlY2s7IGRvCisgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICAgZm9yIGFjX2RpciBpbiAkUEFUSCAvdXNyL2Njcy9iaW4vZWxmIC91c3IvY2NzL2JpbiAvdXNyL3VjYiAvYmluOyBkbworICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgICAgdG1wX25tPSIkYWNfZGlyLyRsdF90bXBfbm0iCisgICAgICBpZiB0ZXN0IC1mICIkdG1wX25tIiB8fCB0ZXN0IC1mICIkdG1wX25tJGFjX2V4ZWV4dCIgOyB0aGVuCisJIyBDaGVjayB0byBzZWUgaWYgdGhlIG5tIGFjY2VwdHMgYSBCU0QtY29tcGF0IGZsYWcuCisJIyBBZGRpbmcgdGhlIGBzZWQgMXEnIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBIUC1VWCwgd2hpY2ggc2F5czoKKwkjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCisJIyBUcnU2NCdzIG5tIGNvbXBsYWlucyB0aGF0IC9kZXYvbnVsbCBpcyBhbiBpbnZhbGlkIG9iamVjdCBmaWxlCisJY2FzZSBgIiR0bXBfbm0iIC1CIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisJKi9kZXYvbnVsbCogfCAqJ0ludmFsaWQgZmlsZSBvciBvYmplY3QgdHlwZScqKQorCSAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtQiIKKwkgIGJyZWFrCisJICA7OworCSopCisJICBjYXNlIGAiJHRtcF9ubSIgLXAgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKwkgICovZGV2L251bGwqKQorCSAgICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1wIgorCSAgICBicmVhaworCSAgICA7OworCSAgKikKKwkgICAgbHRfY3ZfcGF0aF9OTT0ke2x0X2N2X3BhdGhfTk09IiR0bXBfbm0ifSAjIGtlZXAgdGhlIGZpcnN0IG1hdGNoLCBidXQKKwkgICAgY29udGludWUgIyBzbyB0aGF0IHdlIGNhbiB0cnkgdG8gZmluZCBvbmUgdGhhdCBzdXBwb3J0cyBCU0QgZmxhZ3MKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICBkb25lCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgIGRvbmUKKyAgOiAke2x0X2N2X3BhdGhfTk09bm99CitmaV0pCitpZiB0ZXN0ICIkbHRfY3ZfcGF0aF9OTSIgIT0gIm5vIjsgdGhlbgorICBOTT0iJGx0X2N2X3BhdGhfTk0iCitlbHNlCisgICMgRGlkbid0IGZpbmQgYW55IEJTRCBjb21wYXRpYmxlIG5hbWUgbGlzdGVyLCBsb29rIGZvciBkdW1wYmluLgorICBpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4gOgorICAgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBlbHNlCisgICAgQUNfQ0hFQ0tfVE9PTFMoRFVNUEJJTiwgW2R1bXBiaW4gImxpbmsgLWR1bXAiXSwgOikKKyAgICBjYXNlIGAkRFVNUEJJTiAtc3ltYm9scyAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorICAgICpDT0ZGKikKKyAgICAgIERVTVBCSU49IiREVU1QQklOIC1zeW1ib2xzIgorICAgICAgOzsKKyAgICAqKQorICAgICAgRFVNUEJJTj06CisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgQUNfU1VCU1QoW0RVTVBCSU5dKQorICBpZiB0ZXN0ICIkRFVNUEJJTiIgIT0gIjoiOyB0aGVuCisgICAgTk09IiREVU1QQklOIgorICBmaQorZmkKK3Rlc3QgLXogIiROTSIgJiYgTk09bm0KK0FDX1NVQlNUKFtOTV0pCitfTFRfREVDTChbXSwgW05NXSwgWzFdLCBbQSBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXJdKWRubAorCitBQ19DQUNIRV9DSEVDSyhbdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZV0sIFtsdF9jdl9ubV9pbnRlcmZhY2VdLAorICBbbHRfY3Zfbm1faW50ZXJmYWNlPSJCU0Qgbm0iCisgIGVjaG8gImludCBzb21lX3ZhcmlhYmxlID0gMDsiID4gY29uZnRlc3QuJGFjX2V4dAorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGFjX2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgKGV2YWwgIiRhY19jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkTk0gXFxcImNvbmZ0ZXN0LiRhY19vYmpleHRcXFwiXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgIChldmFsICIkTk0gXCJjb25mdGVzdC4kYWNfb2JqZXh0XCIiIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0KQorICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86IG91dHB1dFwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICBjYXQgY29uZnRlc3Qub3V0ID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgaWYgJEdSRVAgJ0V4dGVybmFsLipzb21lX3ZhcmlhYmxlJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9ubV9pbnRlcmZhY2U9Ik1TIGR1bXBiaW4iCisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0Kl0pCitdKSMgTFRfUEFUSF9OTQorCisjIE9sZCBuYW1lczoKK0FVX0FMSUFTKFtBTV9QUk9HX05NXSwgW0xUX1BBVEhfTk1dKQorQVVfQUxJQVMoW0FDX1BST0dfTk1dLCBbTFRfUEFUSF9OTV0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FNX1BST0dfTk1dLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfUFJPR19OTV0sIFtdKQorCisKKyMgTFRfTElCX00KKyMgLS0tLS0tLS0KKyMgY2hlY2sgZm9yIG1hdGggbGlicmFyeQorQUNfREVGVU4oW0xUX0xJQl9NXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitMSUJNPQorY2FzZSAkaG9zdCBpbgorKi0qLWJlb3MqIHwgKi0qLWNlZ2NjKiB8ICotKi1jeWd3aW4qIHwgKi0qLWhhaWt1KiB8ICotKi1wdzMyKiB8ICotKi1kYXJ3aW4qKQorICAjIFRoZXNlIHN5c3RlbSBkb24ndCBoYXZlIGxpYm0sIG9yIGRvbid0IG5lZWQgaXQKKyAgOzsKKyotbmNyLXN5c3Y0LjMqKQorICBBQ19DSEVDS19MSUIobXcsIF9td3ZhbGlkY2hlY2tsLCBMSUJNPSItbG13IikKKyAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0iJExJQk0gLWxtIikKKyAgOzsKKyopCisgIEFDX0NIRUNLX0xJQihtLCBjb3MsIExJQk09Ii1sbSIpCisgIDs7Citlc2FjCitBQ19TVUJTVChbTElCTV0pCitdKSMgTFRfTElCX00KKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19DSEVDS19MSUJNXSwgW0xUX0xJQl9NXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfQ0hFQ0tfTElCTV0sIFtdKQorCisKKyMgX0xUX0NPTVBJTEVSX05PX1JUVEkoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NPTVBJTEVSX05PX1JUVEldLAorW200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorCitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9CisKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgIG52Y2MqKQorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1YY29tcGlsZXIgLWZuby1idWlsdGluJyA7OworICAqKQorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1mbm8tYnVpbHRpbicgOzsKKyAgZXNhYworCisgIF9MVF9DT01QSUxFUl9PUFRJT04oW2lmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zXSwKKyAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucywKKyAgICBbLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9uc10sIFtdLAorICAgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9IiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyJdKQorZmkKK19MVF9UQUdERUNMKFtub19idWlsdGluX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWddLCBbMV0sCisJW0NvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnNdKQorXSkjIF9MVF9DT01QSUxFUl9OT19SVFRJCisKKworIyBfTFRfQ01EX0dMT0JBTF9TWU1CT0xTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ01EX0dMT0JBTF9TWU1CT0xTXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfQVdLXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9MRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCisKKyMgQ2hlY2sgZm9yIGNvbW1hbmQgdG8gZ3JhYiB0aGUgcmF3IHN5bWJvbCBuYW1lIGZvbGxvd2VkIGJ5IEMgc3ltYm9sIGZyb20gbm0uCitBQ19NU0dfQ0hFQ0tJTkcoW2NvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3RdKQorQUNfQ0FDSEVfVkFMKFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlXSwKK1sKKyMgVGhlc2UgYXJlIHNhbmUgZGVmYXVsdHMgdGhhdCB3b3JrIG9uIGF0IGxlYXN0IGEgZmV3IG9sZCBzeXN0ZW1zLgorIyBbVGhleSBjb21lIGZyb20gVWx0cml4LiAgV2hhdCBjb3VsZCBiZSBvbGRlciB0aGFuIFVsdHJpeD8hISA7KV0KKworIyBDaGFyYWN0ZXIgY2xhc3MgZGVzY3JpYmluZyBOTSBnbG9iYWwgc3ltYm9sIGNvZGVzLgorc3ltY29kZT0nW1tCQ0RFR1JTVF1dJworCisjIFJlZ2V4cCB0byBtYXRjaCBzeW1ib2xzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gQy4KK3N5bXBhdD0nXChbW19BLVphLXpdXVtbX0EtWmEtejAtOV1dKlwpJworCisjIERlZmluZSBzeXN0ZW0tc3BlY2lmaWMgdmFyaWFibGVzLgorY2FzZSAkaG9zdF9vcyBpbgorYWl4KikKKyAgc3ltY29kZT0nW1tCQ0RUXV0nCisgIDs7CitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgIHN5bWNvZGU9J1tbQUJDREdJU1RXXV0nCisgIDs7CitocHV4KikKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICBzeW1jb2RlPSdbW0FCQ0RFR1JTVF1dJworICBmaQorICA7OworaXJpeCogfCBub25zdG9wdXgqKQorICBzeW1jb2RlPSdbW0JDREVHUlNUXV0nCisgIDs7Citvc2YqKQorICBzeW1jb2RlPSdbW0JDREVHUVJTVF1dJworICA7Oworc29sYXJpcyopCisgIHN5bWNvZGU9J1tbQkRSVF1dJworICA7Oworc2NvMy4ydjUqKQorICBzeW1jb2RlPSdbW0RUXV0nCisgIDs7CitzeXN2NC4ydXcyKikKKyAgc3ltY29kZT0nW1tEVF1dJworICA7Oworc3lzdjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgc3ltY29kZT0nW1tBQkRUXV0nCisgIDs7CitzeXN2NCkKKyAgc3ltY29kZT0nW1tERk5TVFVdXScKKyAgOzsKK2VzYWMKKworIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gdXNlIGl0cyBzdGFuZGFyZCBzeW1ib2wgY29kZXMuCitjYXNlIGAkTk0gLVYgMj4mMWAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBzeW1jb2RlPSdbW0FCQ0RHSVJTVFddXScgOzsKK2VzYWMKKworIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4KKyMgU29tZSBzeXN0ZW1zIChlc3AuIG9uIGlhNjQpIGxpbmsgZGF0YSBhbmQgY29kZSBzeW1ib2xzIGRpZmZlcmVudGx5LAorIyBzbyB1c2UgdGhpcyBnZW5lcmFsIGFwcHJvYWNoLgorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKworIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChsaWJbW14gXV0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorCisjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KK29wdF9jcj0KK2Nhc2UgJGJ1aWxkX29zIGluCittaW5ndyopCisgIG9wdF9jcj1gJEVDSE8gJ3hcezAsMVx9JyB8IHRyIHggJ1wwMTUnYCAjIG9wdGlvbiBjciBpbiByZWdleHAKKyAgOzsKK2VzYWMKKworIyBUcnkgd2l0aG91dCBhIHByZWZpeCB1bmRlcnNjb3JlLCB0aGVuIHdpdGggaXQuCitmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisKKyAgIyBUcmFuc2Zvcm0gc3ltY29kZSwgc3ltcGF0LCBhbmQgc3ltcHJmeCBpbnRvIGEgcmF3IHN5bWJvbCBhbmQgYSBDIHN5bWJvbC4KKyAgc3lteGZybT0iXFwxICRhY19zeW1wcmZ4XFwyIFxcMiIKKworICAjIFdyaXRlIHRoZSByYXcgYW5kIEMgaWRlbnRpZmllcnMuCisgIGlmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisgICAgIyBGYWtlIGl0IGZvciBkdW1wYmluIGFuZCBzYXkgVCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24KKyAgICAjIGFuZCBEIGZvciBhbnkgZ2xvYmFsIHZhcmlhYmxlLgorICAgICMgQWxzbyBmaW5kIEMrKyBhbmQgX19mYXN0Y2FsbCBzeW1ib2xzIGZyb20gTVNWQysrLAorICAgICMgd2hpY2ggc3RhcnQgd2l0aCBAIG9yID8uCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJEFXSyBbJyJcCisiICAgICB7bGFzdF9zZWN0aW9uPXNlY3Rpb247IHNlY3Rpb249XCQgM307IlwKKyIgICAgIC9TZWN0aW9uIGxlbmd0aCAuKiNyZWxvY3MuKihwaWNrIGFueSkve2hpZGVbbGFzdF9zZWN0aW9uXT0xfTsiXAorIiAgICAgXCQgMCF+L0V4dGVybmFsICpcfC97bmV4dH07IlwKKyIgICAgIC8gMCsgVU5ERUYgL3tuZXh0fTsgLyBVTkRFRiBcKFtefF1cKSooKS97bmV4dH07IlwKKyIgICAgIHtpZihoaWRlW3NlY3Rpb25dKSBuZXh0fTsiXAorIiAgICAge2Y9MH07IFwkIDB+L1woXCkuKlx8L3tmPTF9OyB7cHJpbnRmIGYgPyBcIlQgXCIgOiBcIkQgXCJ9OyJcCisiICAgICB7c3BsaXQoXCQgMCwgYSwgL1x8fFxyLyk7IHNwbGl0KGFbMl0sIHMpfTsiXAorIiAgICAgc1sxXX4vXltAP10ve3ByaW50IHNbMV0sIHNbMV07IG5leHR9OyJcCisiICAgICBzWzFdfnByZngge3NwbGl0KHNbMV0sdCxcIkBcIik7IHByaW50IHRbMV0sIHN1YnN0cih0WzFdLGxlbmd0aChwcmZ4KSl9IlwKKyIgICAgICcgcHJmeD1eJGFjX3N5bXByZnhdIgorICBlbHNlCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKltbCSBdXVwoJHN5bWNvZGUkc3ltY29kZSpcKVtbCSBdXVtbCSBdXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgZmkKKworICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgcGlwZV93b3Jrcz1ubworCisgIHJtIC1mIGNvbmZ0ZXN0KgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorY2hhciBubV90ZXN0X3ZhcjsKK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpOwordm9pZCBubV90ZXN0X2Z1bmModm9pZCl7fQorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK2ludCBtYWluKCl7bm1fdGVzdF92YXI9J2EnO25tX3Rlc3RfZnVuYygpO3JldHVybigwKTt9CitfTFRfRU9GCisKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICAjIE5vdyB0cnkgdG8gZ3JhYiB0aGUgc3ltYm9scy4KKyAgICBubGlzdD1jb25mdGVzdC5ubQorICAgIGlmIEFDX1RSWV9FVkFMKE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiBcPiAkbmxpc3QpICYmIHRlc3QgLXMgIiRubGlzdCI7IHRoZW4KKyAgICAgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCisgICAgICBpZiBzb3J0ICIkbmxpc3QiIHwgdW5pcSA+ICIkbmxpc3QiVDsgdGhlbgorCW12IC1mICIkbmxpc3QiVCAiJG5saXN0IgorICAgICAgZWxzZQorCXJtIC1mICIkbmxpc3QiVAorICAgICAgZmkKKworICAgICAgIyBNYWtlIHN1cmUgdGhhdCB3ZSBzbmFnZ2VkIGFsbCB0aGUgc3ltYm9scyB3ZSBuZWVkLgorICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK19MVF9FT0YKKwkgICMgTm93IGdlbmVyYXRlIHRoZSBzeW1ib2wgZmlsZS4KKwkgIGV2YWwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQnCisKKwkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorCisvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCitjb25zdCBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICB2b2lkICAgICAgICphZGRyZXNzOworfQorbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tbXV0gPQoreworICB7ICJAUFJPR1JBTUAiLCAodm9pZCAqKSAwIH0sCitfTFRfRU9GCisJICAkU0VEICJzL14kc3ltY29kZSRzeW1jb2RlKiBcKC4qXCkgXCguKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC8iIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQKKwkgIGNhdCA8PFxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAgezAsICh2b2lkICopIDB9Cit9OworCisvKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KKyNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKK3N0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgIHJldHVybiBsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzOworfQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCitfTFRfRU9GCisJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CisJICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorCSAgQ0ZMQUdTPSIkQ0ZMQUdTJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKSIKKwkgIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKwkgICAgcGlwZV93b3Jrcz15ZXMKKwkgIGZpCisJICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCisJZWxzZQorCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiZBU19NRVNTQUdFX0xPR19GRAorCWZpCisgICAgICBlbHNlCisJZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF92YXIgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGVjaG8gImNhbm5vdCBydW4gJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICBmaQorICBlbHNlCisgICAgZWNobyAiJHByb2duYW1lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCogY29uZnRzdCoKKworICAjIERvIG5vdCB1c2UgdGhlIGdsb2JhbF9zeW1ib2xfcGlwZSB1bmxlc3MgaXQgd29ya3MuCisgIGlmIHRlc3QgIiRwaXBlX3dvcmtzIiA9IHllczsgdGhlbgorICAgIGJyZWFrCisgIGVsc2UKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPQorICBmaQorZG9uZQorXSkKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0KK2ZpCitpZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVChmYWlsZWQpCitlbHNlCisgIEFDX01TR19SRVNVTFQob2spCitmaQorCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF9waXBlXSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGVdLCBbMV0sCisgICAgW1Rha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXNdKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY2RlY2xdLCBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2xdLCBbMV0sCisgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb25dKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NdLAorICAgIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc10sIFsxXSwKKyAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyXSkKK19MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLAorICAgIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4XSwgWzFdLAorICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZF0pCitdKSAjIF9MVF9DTURfR0xPQkFMX1NZTUJPTFMKKworCisjIF9MVF9DT01QSUxFUl9QSUMoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ09NUElMRVJfUElDXSwKK1ttNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKK19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPQorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQorCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDXSkKK200X2lmKFskMV0sIFtDWFhdLCBbCisgICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KKyAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisgICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisgICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCisgICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcworICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorCVtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQorICAgICAgOzsKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKKyAgICAgIDs7CisgICAgKmRqZ3BwKikKKyAgICAgICMgREpHUFAgZG9lcyBub3Qgc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzIGF0IGFsbAorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorICAgICAgOzsKKyAgICBoYWlrdSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSGFpa3UuCisgICAgICAjIFRoZSAiLXN0YXRpYyIgZmxhZyBleGlzdHMsIGJ1dCBpcyBicm9rZW4uCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9CisgICAgICA7OworICAgIGludGVyaXhbWzMtOV1dKikKKyAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCisgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KKyAgICAgIDs7CisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0tS2NvbmZvcm1fcGljCisgICAgICBmaQorICAgICAgOzsKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciA2NC1iaXQgUEEgSFAtVVgsIGJ1dCBub3QgZm9yIDMyLWJpdAorICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCisgICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqKQorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgKnFueCogfCAqbnRvKikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworICAgICopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXhbWzQtOV1dKikKKwkjIEFsbCBBSVggY29kZSBpcyBQSUMuCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgICMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCWVsc2UKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworCWZpCisJOzsKKyAgICAgIGNob3J1cyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwljeGNoNjgqKQorCSAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICMgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSItLW5vX2F1dG9faW5zdGFudGlhdGlvbiAtdSBfX21haW4gLXUgX19wcmVtYWluIC11IF9hYm9ydCAtciAkQ09PTF9ESVIvbGliL2xpYk9yYi5hICRNVk1FX0RJUi9saWIvQ0MvbGliQy5hICRNVk1FX0RJUi9saWIvY2xhc3NpeC9saWJjeC5zLmEiCisJICA7OworCWVzYWMKKwk7OworICAgICAgZGd1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGVjKysqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICA7OworCSAgZ2hjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisJIyBGcmVlQlNEIHVzZXMgR05VIEMrKworCTs7CisgICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKwkgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwkgICAgZmkKKwkgICAgOzsKKwkgIGFDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworCSAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICBocHBhKjY0KnxpYTY0KikKKwkgICAgICAjICtaIHRoZSBkZWZhdWx0CisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JytaJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBpbnRlcml4KikKKwkjIFRoaXMgaXMgYzg5LCB3aGljaCBpcyBNUyBWaXN1YWwgQysrIChubyBzaGFyZWQgbGlicykKKwkjIEFueW9uZSB3YW50cyB0byBkbyBhIHBvcnQ/CisJOzsKKyAgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisJICAgICMgQ0MgcGljIGZsYWcgLUtQSUMgaXMgdGhlIGRlZmF1bHQuCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBLQ0MqKQorCSAgICAjIEtBSSBDKysgQ29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy0tYmFja2VuZCAtV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCSAgICA7OworCSAgZWNwYyogKQorCSAgICAjIG9sZCBJbnRlbCBDKysgZm9yIHg4Nl82NCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisJICAgIDs7CisJICBpY3BjKiApCisJICAgICMgSW50ZWwgQysrLCB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKwkgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisJICAgIDs7CisJICBwZ0NDKiB8IHBnY3BwKikKKwkgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIDs7CisJICBjeHgqKQorCSAgICAjIENvbXBhcSBDKysKKwkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQorCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKwkgICAgOzsKKwkgIHhsYyogfCB4bEMqIHwgYmd4bFtbY0NdXSogfCBtcGl4bFtbY0NdXSopCisJICAgICMgSUJNIFhMIDguMCwgOS4wIG9uIFBQQyBhbmQgQmx1ZUdlbmUKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXFwaWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXFzdGF0aWNsaW5rJworCSAgICA7OworCSAgKikKKwkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJICAgICpTdW5cIEMqKQorCSAgICAgICMgU3VuIEMrKyA1LjkKKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBseW54b3MqKQorCTs7CisgICAgICBtODhrKikKKwk7OworICAgICAgbXZzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgY3h4KikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctVyBjLGV4cG9ydGFsbCcKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBuZXRic2QqKQorCTs7CisgICAgICAqcW54KiB8ICpudG8qKQorICAgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgS0NDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy0tYmFja2VuZCAtV2wsJworCSAgICA7OworCSAgUkNDKikKKwkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICA7OworCSAgY3h4KikKKwkgICAgIyBEaWdpdGFsL0NvbXBhcSBDKysKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKKwkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgcHNvcyopCisJOzsKKyAgICAgIHNvbGFyaXMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyogfCBzdW5DQyopCisJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKwkgICAgOzsKKwkgIGdjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBzdW5vczQqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgICMgU3VuIEMrKyA0LngKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICA7OworCSAgbGNjKikKKwkgICAgIyBMdWNpZAorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHRhbmRlbSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIE5DQyopCisJICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHZ4d29ya3MqKQorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKwk7OworICAgIGVzYWMKKyAgZmkKK10sCitbCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisgICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKKyAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCisgICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCisJW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCisgICAgICA7OworCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZuby1jb21tb24nCisgICAgICA7OworCisgICAgaGFpa3UqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIEhhaWt1LgorICAgICAgIyBUaGUgIi1zdGF0aWMiIGZsYWcgZXhpc3RzLCBidXQgaXMgYnJva2VuLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQorICAgICAgOzsKKworICAgIGhwdXgqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIDY0LWJpdCBQQSBIUC1VWCwgYnV0IG5vdCBmb3IgMzItYml0CisgICAgICAjIFBBIEhQLVVYLiAgT24gSUE2NCBIUC1VWCwgUElDIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgcGljIGZsYWcKKyAgICAgICMgc2V0cyB0aGUgZGVmYXVsdCBUTFMgbW9kZWwgYW5kIGFmZmVjdHMgaW5saW5pbmcuCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBpbnRlcml4W1szLTldXSopCisgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisgICAgICA7OworCisgICAgbXNkb3NkamdwcCopCisgICAgICAjIEp1c3QgYmVjYXVzZSB3ZSB1c2UgR0NDIGRvZXNuJ3QgbWVhbiB3ZSBzdWRkZW5seSBnZXQgc2hhcmVkIGxpYnJhcmllcworICAgICAgIyBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGVtLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworICAgICAgZW5hYmxlX3NoYXJlZD1ubworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICBudmNjKikgIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctWGxpbmtlciAnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1YY29tcGlsZXIgLWZQSUMnCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgICMgUE9SVE1FIENoZWNrIGZvciBmbGFnIHRvIHBhc3MgbGlua2VyIGZsYWdzIHRocm91Z2ggdGhlIHN5c3RlbSBjb21waWxlci4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCisgICAgICBmaQorICAgICAgOzsKKworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorCVtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQorICAgICAgOzsKKworICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKKyAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KnxpYTY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwk7OworICAgICAgZXNhYworICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/CisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICMgb2xkIEludGVsIGZvciB4ODZfNjQgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgorICAgICAgZWNjKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgICMgaWNjIHVzZWQgdG8gYmUgaW5jb21wYXRpYmxlIHdpdGggR0NDLgorICAgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCisgICAgICBpY2MqIHwgaWZvcnQqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworICAgICAgICA7OworICAgICAgIyBMYWhleSBGb3J0cmFuIDguMS4KKyAgICAgIGxmOTUqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLS1zaGFyZWQnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctLXN0YXRpYycKKwk7OworICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZnBpYycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgICA7OworICAgICAgY2NjKikKKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAgICMgQWxsIEFscGhhIGNvZGUgaXMgUElDLgorICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgICA7OworICAgICAgeGwqIHwgYmd4bCogfCBiZ2YqIHwgbXBpeGwqKQorCSMgSUJNIFhMIEMgOC4wL0ZvcnRyYW4gMTAuMSwgMTEuMSBvbiBQUEMgYW5kIEJsdWVHZW5lCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcXBpYycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1xc3RhdGljbGluaycKKwk7OworICAgICAgKikKKwljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkqU3VuXCBGKiB8ICpTdW4qRm9ydHJhbiopCisJICAjIFN1biBGb3J0cmFuIDguMyBwYXNzZXMgYWxsIHVucmVjb2duaXplZCBmbGFncyB0byB0aGUgbGlua2VyCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPScnCisJICA7OworCSpTdW5cIEMqKQorCSAgIyBTdW4gQyA1LjkKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICA7OworCWVzYWMKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIG5ld3NvczYpCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisKKyAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICByZG9zKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCc7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LY29uZm9ybV9waWMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgdW5pY29zKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCitdKQorY2FzZSAkaG9zdF9vcyBpbgorICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKKyAgKmRqZ3BwKikKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisgICAgOzsKKyAgKikKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9IiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSlAJnRAbTRfaWYoWyQxXSxbXSxbIC1EUElDXSxbbTRfaWYoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKSIKKyAgICA7OworZXNhYworQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKV0pCitfTFRfVEFHREVDTChbd2xdLCBbbHRfcHJvZ19jb21waWxlcl93bF0sIFsxXSwKKwlbSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlcl0pCisKKyMKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyMKK2lmIHRlc3QgLW4gIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiOyB0aGVuCisgIF9MVF9DT01QSUxFUl9PUFRJT04oW2lmICRjb21waWxlciBQSUMgZmxhZyAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIHdvcmtzXSwKKyAgICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcywgJDEpXSwKKyAgICBbJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKUAmdEBtNF9pZihbJDFdLFtdLFsgLURQSUNdLFttNF9pZihbJDFdLFtDWFhdLFsgLURQSUNdLFtdKV0pXSwgW10sCisgICAgW2Nhc2UgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSBpbgorICAgICAiIiB8ICIgIiopIDs7CisgICAgICopIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiIDs7CisgICAgIGVzYWNdLAorICAgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm9dKQorZmkKK19MVF9UQUdERUNMKFtwaWNfZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX3BpY10sIFsxXSwKKwlbQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzXSkKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIword2w9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKVwiCitfTFRfTElOS0VSX09QVElPTihbaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3NdLAorICBfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzLCAkMSksCisgICRsdF90bXBfc3RhdGljX2ZsYWcsCisgIFtdLAorICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPV0pCitfTFRfVEFHREVDTChbbGlua19zdGF0aWNfZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY10sIFsxXSwKKwlbQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZ10pCitdKSMgX0xUX0NPTVBJTEVSX1BJQworCisKKyMgX0xUX0xJTktFUl9TSExJQlMoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNlZSBpZiB0aGUgbGlua2VyIHN1cHBvcnRzIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCittNF9kZWZ1bihbX0xUX0xJTktFUl9TSExJQlNdLAorW0FDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX0dMT0JBTF9TWU1CT0xTXSlkbmwKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorbTRfaWYoWyQxXSwgW0NYWF0sIFsKKyAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXhbWzQtOV1dKikKKyAgICAjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKyAgICAjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisgICAgIyBBbHNvLCBBSVggbm0gdHJlYXRzIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsIGRlZmluZWQKKyAgICAjIHN5bWJvbHMsIHdoZXJlYXMgR05VIG5tIG1hcmtzIHRoZW0gYXMgIlciLgorICAgIGlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKyAgICBlbHNlCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKyAgICBmaQorICAgIDs7CisgIHB3MzIqKQorICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSIkbHRkbGxfY21kcyIKKyAgOzsKKyAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKyAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLzsvXi4qW1sgXV1fX25tX18vcy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIDs7CisgICopCisgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgOzsKKyAgZXNhYworICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJ10KK10sIFsKKyAgcnVucGF0aF92YXI9CisgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KKyAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPQorICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT1ubworICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9CisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAorICBfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCisgIF9MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUih0aHJlYWRfc2FmZV9mbGFnX3NwZWMsICQxKT0KKyAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorICAjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCisgICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0CisgIF9MVF9UQUdWQVIoaW5jbHVkZV9leHBzeW1zLCAkMSk9CisgICMgZXhjbHVkZV9leHBzeW1zIGNhbiBiZSBhbiBleHRlbmRlZCByZWdleHAgb2Ygc3ltYm9scyB0byBleGNsdWRlCisgICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5IGAgKCcgYW5kIGApJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKKyAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6IGBhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgYGEnIGFuZCBgYmMnLAorICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zIGBkJy4KKyAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCisgICMgQWx0aG91Z2ggX0dMT0JBTF9PRkZTRVRfVEFCTEVfIGlzIGEgdmFsaWQgc3ltYm9sIEMgbmFtZSwgbW9zdCBhLm91dAorICAjIHBsYXRmb3JtcyAoYWIpdXNlIGl0IGluIFBJQyBjb2RlLCBidXQgdGhlaXIgbGlua2VycyBnZXQgY29uZnVzZWQgaWYKKyAgIyB0aGUgc3ltYm9sIGlzIGV4cGxpY2l0bHkgcmVmZXJlbmNlZC4gIFNpbmNlIHBvcnRhYmxlIGNvZGUgY2Fubm90CisgICMgcmVseSBvbiB0aGlzIHN5bWJvbCBuYW1lLCBpdCdzIHByb2JhYmx5IGZpbmUgdG8gbmV2ZXIgaW5jbHVkZSBpdCBpbgorICAjIHByZWxvYWRlZCBzeW1ib2wgdGFibGVzLgorICAjIEV4Y2x1ZGUgc2hhcmVkIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24vZmluYWxpemF0aW9uIHN5bWJvbHMuCitkbmwgTm90ZSBhbHNvIGFkanVzdCBleGNsdWRlX2V4cHN5bXMgZm9yIEMrKyBhYm92ZS4KKyAgZXh0cmFjdF9leHBzeW1zX2NtZHM9CisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQorICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgZmkKKyAgICA7OworICBpbnRlcml4KikKKyAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQorICAgIHdpdGhfZ251X2xkPXllcworICAgIDs7CisgIG9wZW5ic2QqKQorICAgIHdpdGhfZ251X2xkPW5vCisgICAgOzsKKyAgZXNhYworCisgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisKKyAgIyBPbiBzb21lIHRhcmdldHMsIEdOVSBsZCBpcyBjb21wYXRpYmxlIGVub3VnaCB3aXRoIHRoZSBuYXRpdmUgbGlua2VyCisgICMgdGhhdCB3ZSdyZSBiZXR0ZXIgb2ZmIHVzaW5nIHRoZSBuYXRpdmUgaW50ZXJmYWNlIGZvciBib3RoLgorICBsdF91c2VfZ251X2xkX2ludGVyZmFjZT1ubworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4KikKKwkjIFRoZSBBSVggcG9ydCBvZiBHTlUgbGQgaGFzIGFsd2F5cyBhc3BpcmVkIHRvIGNvbXBhdGliaWxpdHkKKwkjIHdpdGggdGhlIG5hdGl2ZSBsaW5rZXIuICBIb3dldmVyLCBhcyB0aGUgd2FybmluZyBpbiB0aGUgR05VIGxkCisJIyBibG9jayBzYXlzLCB2ZXJzaW9ucyBiZWZvcmUgMi4xOS41KiBjb3VsZG4ndCByZWFsbHkgY3JlYXRlIHdvcmtpbmcKKwkjIHNoYXJlZCBsaWJyYXJpZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIGludGVyZmFjZSB1c2VkLgorCWNhc2UgYCRMRCAtdiAyPiYxYCBpbgorCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIDIuMTkuNSopIDs7CisJICAqXCBcKEdOVVwgQmludXRpbHNcKVwgMi5bWzItOV1dKikgOzsKKwkgICpcIFwoR05VXCBCaW51dGlsc1wpXCBbWzMtOV1dKikgOzsKKwkgICopCisJICAgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPXllcworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKikKKwlsdF91c2VfZ251X2xkX2ludGVyZmFjZT15ZXMKKwk7OworICAgIGVzYWMKKyAgZmkKKworICBpZiB0ZXN0ICIkbHRfdXNlX2dudV9sZF9pbnRlcmZhY2UiID0geWVzOyB0aGVuCisgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICB3bGFyYz0nJHt3bH0nCisKKyAgICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQorICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQorICAgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KKyAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICBlbHNlCisgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICAgZmkKKyAgICBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9bm8KKyAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICAgICpHTlVcIGdvbGQqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7CisgICAgICAqXCBbWzAxXV0uKiB8ICpcIDIuW1swLTldXS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQorICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KKyAgICAgICpcIDIuMTEuOTIuMC4xMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIE1hbmRyYWtlIDguMiAuLi4KKyAgICAgICpcIDIuMTEuKikgOzsgIyBvdGhlciAyLjExIHZlcnNpb25zCisgICAgICAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7CisgICAgZXNhYworCisgICAgIyBTZWUgaWYgR05VIGxkIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeFtbMy05XV0qKQorICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi4xOSwgaXMgcmVwb3J0ZWQKKyoqKiB0byBiZSB1bmFibGUgdG8gcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gQUlYLgorKioqIFRoZXJlZm9yZSwgbGlidG9vbCBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgSWYgeW91CisqKiogcmVhbGx5IGNhcmUgZm9yIHNoYXJlZCBsaWJyYXJpZXMsIHlvdSBtYXkgd2FudCB0byBpbnN0YWxsIGJpbnV0aWxzCisqKiogMi4yMCBvciBhYm92ZSwgb3IgbW9kaWZ5IHlvdXIgUEFUSCBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQuCisqKiogWW91IHdpbGwgdGhlbiBuZWVkIHRvIHJlc3RhcnQgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2Vzcy4KKworX0xUX0VPRgorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYworCSMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJworICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW1tBSVRXXV1bWyBdXS9zLy4qW1sgXV0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKworICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCisJIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwkgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwllbHNlCisJICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwkgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJZml+CisJJENDIC1zaGFyZWQgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBoYWlrdSopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgOzsKKworICAgIGludGVyaXhbWzMtOV1dKikKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCisgICAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CisgICAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5CisgICAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCisgICAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCisgICAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIDs7CisKKyAgICBnbnUqIHwgbGludXgqIHwgdHBmKiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgIHRtcF9kaWV0PW5vCisgICAgICBpZiB0ZXN0ICIkaG9zdF9vcyIgPSBsaW51eC1kaWV0bGliYzsgdGhlbgorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBkaWV0XCAqKSB0bXBfZGlldD15ZXM7OwkjIGxpbnV4LWRpZXRsaWJjIHdpdGggc3RhdGljIGxpbmtpbmcgKCFkaWV0LWR5bikKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKyAgICAgIHRoZW4KKwl0bXBfYWRkZmxhZz0KKwl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKKwljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworCSAgOzsKKwlwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorCQkJCQkjIFBvcnRsYW5kIEdyb3VwIGY3NyBhbmQgZjkwIGNvbXBpbGVycworCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnIC1Nbm9tYWluJyA7OworCWVjYyosaWE2NCogfCBpY2MqLGlhNjQqKQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAorCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljJyA7OworCWVmYyosaWE2NCogfCBpZm9ydCosaWE2NCopCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlciBvbiBpYTY0CisJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMgLW5vZm9yX21haW4nIDs7CisJaWZjKiB8IGlmb3J0KikJCQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIKKwkgIHRtcF9hZGRmbGFnPScgLW5vZm9yX21haW4nIDs7CisJbGY5NSopCQkJCSMgTGFoZXkgRm9ydHJhbiA4LjEKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKwkgIHRtcF9zaGFyZWRmbGFnPSctLXNoYXJlZCcgOzsKKwl4bFtbY0NdXSogfCBiZ3hsW1tjQ11dKiB8IG1waXhsW1tjQ11dKikgIyBJQk0gWEwgQyA4LjAgb24gUFBDIChkZWFsIHdpdGggeGxmIGJlbG93KQorCSAgdG1wX3NoYXJlZGZsYWc9Jy1xbWtzaHJvYmonCisJICB0bXBfYWRkZmxhZz0gOzsKKwludmNjKikJIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllcworCSAgOzsKKwllc2FjCisJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJKlN1blwgQyopCQkJIyBTdW4gQyA1LjkKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzCisJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CisJKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKKwkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKKwllc2FjCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKworICAgICAgICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgICAgICAgIGZpCisKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCXhsZiogfCBiZ2YqIHwgYmd4bGYqIHwgbXBpeGxmKikKKwkgICMgSUJNIFhMIEZvcnRyYW4gMTAuMSBvbiBQUEMgY2Fubm90IGNyZWF0ZSBzaGFyZWQgbGlicyBpdHNlbGYKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKwkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKwkgIGZpCisJICA7OworCWVzYWMKKyAgICAgIGVsc2UKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBuZXRic2QqKQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworCXdsYXJjPQorICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBpZiAkTEQgLXYgMj4mMSB8ICRHUkVQICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBUaGUgcmVsZWFzZXMgMi44Liogb2YgdGhlIEdOVSBsaW5rZXIgY2Fubm90IHJlbGlhYmx5CisqKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjkuMSBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAgICpcIFtbMDFdXS4qIHwgKlwgMi5bWzAtOV1dLiogfCAqXCAyLjFbWzAtNV1dLiopCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogUmVsZWFzZXMgb2YgdGhlIEdOVSBsaW5rZXIgcHJpb3IgdG8gMi4xNi45MS4wLjMgY2FuIG5vdAorKioqIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNDTyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjE2LjkxLjAuMyBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisJOzsKKwkqKQorCSAgIyBGb3Igc2VjdXJpdHkgcmVhc29ucywgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IGFsd2F5cworCSAgIyB1c2UgYWJzb2x1dGUgcGF0aHMgZm9yIG5hbWluZyBzaGFyZWQgbGlicmFyaWVzLCBhbmQgZXhjbHVkZSB0aGUKKwkgICMgRFRfUlVOUEFUSCB0YWcgZnJvbSBleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzLiAgQnV0IGRvaW5nIHNvCisJICAjIHJlcXVpcmVzIHRoYXQgeW91IGNvbXBpbGUgZXZlcnl0aGluZyB0d2ljZSwgd2hpY2ggaXMgYSBwYWluLgorCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgZWxzZQorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICBmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICB3bGFyYz0KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vOyB0aGVuCisgICAgICBydW5wYXRoX3Zhcj0KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KKyAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKyAgICBmaQorICBlbHNlCisgICAgIyBQT1JUTUUgZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgbGlua2VyIChub3QgR05VIGxkKQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXgzKikKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckTEQgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1iRTokZXhwb3J0X3N5bWJvbHMgLVQ1MTIgLUg1MTIgLWJNOlNSRX4kQVIgJEFSX0ZMQUdTICRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKyAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCisgICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KKwkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKKwkjIGJyb2tlbiBjb2xsZWN0Mi4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFpeFtbNC05XV0qKQorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisJIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCWV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCisJbm9fZW50cnlfZmxhZz0iIgorICAgICAgZWxzZQorCSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorCSMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KKwkjIEFsc28sIEFJWCBubSB0cmVhdHMgd2VhayBkZWZpbmVkIHN5bWJvbHMgbGlrZSBvdGhlciBnbG9iYWwKKwkjIGRlZmluZWQgc3ltYm9scywgd2hlcmVhcyBHTlUgbm0gbWFya3MgdGhlbSBhcyAiVyIuCisJaWYgJE5NIC1WIDI+JjEgfCAkR1JFUCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpIHx8IChcJCAyID09ICJXIikpICYmIChbc3Vic3RyXShcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworCWVsc2UKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChbc3Vic3RyXShcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworCWZpCisJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCisJIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisJIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisJIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKwljYXNlICRob3N0X29zIGluIGFpeDQuW1syM11dfGFpeDQuW1syM11dLip8YWl4W1s1LTldXSopCisJICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKwkgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCisJICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisJICAgIGJyZWFrCisJICBmaQorCSAgZG9uZQorCSAgOzsKKwllc2FjCisKKwlleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKKyAgICAgIGZpCisKKyAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKyAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQorICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KKyAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisgICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KKworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKyAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPScke3dsfS1mLCcKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwljYXNlICRob3N0X29zIGluIGFpeDQuW1swMTJdXXxhaXg0LltbMDEyXV0uKikKKwkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKKwkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKKwkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKwkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCisJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKwkgIHRoZW4KKwkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorCSAgOgorCSAgZWxzZQorCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAorCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAorCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKwkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CisJICBmaQorCSAgOzsKKwllc2FjCisJc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCisJaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKKwlmaQorICAgICAgZWxzZQorCSMgbm90IHVzaW5nIGdjYworCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKwkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgorCSAgc2hhcmVkX2ZsYWc9Jy1HJworCWVsc2UKKwkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwkgIGVsc2UKKwkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKKwkgIGZpCisJZmkKKyAgICAgIGZpCisKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJleHBhbGwnCisgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKyAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0byBleHBvcnQuCisgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisJIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJworICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICBlbHNlCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisJZWxzZQorCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKwkgIyBlbXB0eSBleGVjdXRhYmxlLgorCSBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorCSBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisJICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJub3RvaycKKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm9rJworCSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorCSAgICAjIFdlIG9ubHkgdXNlIHRoaXMgY29kZSBmb3IgR05VIGxkcyB0aGF0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlLgorCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgZWxzZQorCSAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckY29udmVuaWVuY2UnCisJICBmaQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworCSAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisJZmkKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJzZGlbWzQ1XV0qKQorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0tcmR5bmFtaWMKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKyAgICAgIGxpYmV4dD1saWIKKyAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKyAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKyAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworICAgICAgX0xUX1RBR1ZBUihmaXhfc3JjZmlsZV9wYXRoLCAkMSk9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworICAgICAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisgICAgICA7OworCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKCQxKQorICAgICAgOzsKKworICAgIGRndXgqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgZnJlZWJzZDEqKQorICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAyLjIuWzAxMl0gYWxsb3dzIHVzIHRvIGluY2x1ZGUgYysrcnQwLm8gdG8gZ2V0IEMrKyBjb25zdHJ1Y3RvcgorICAgICMgc3VwcG9ydC4gIEZ1dHVyZSB2ZXJzaW9ucyBkbyB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCBhbiBleHBsaWNpdCBjKytydDAubworICAgICMgZG9lcyBub3QgYnJlYWsgYW55dGhpbmcsIGFuZCBoZWxwcyBzaWduaWZpY2FudGx5IChhdCB0aGUgY29zdCBvZiBhIGxpdHRsZQorICAgICMgZXh0cmEgc3BhY2UpLgorICAgIGZyZWVic2QyLjIqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCisgICAgZnJlZWJzZDIqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgIGhwdXg5KikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCisgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICA7OworCisgICAgaHB1eDEwKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9JytiICRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBmaQorICAgICAgOzsKKworICAgIGhwdXgxMSopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWlhNjQqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJbTRfaWYoJDEsIFtdLCBbCisJICAjIE9sZGVyIHZlcnNpb25zIG9mIHRoZSAxMS4wMCBjb21waWxlciBkbyBub3QgdW5kZXJzdGFuZCAtYiB5ZXQKKwkgICMgKEhQOTI0NTMtMDEgQS4xMS4wMS4yMCBkb2Vzbid0LCBIUDkyNDUzLTAxIEIuMTEuWC4zNTE3NS0zNTE3Ni5HUCBkb2VzKQorCSAgX0xUX0xJTktFUl9PUFRJT04oW2lmICRDQyB1bmRlcnN0YW5kcyAtYl0sCisJICAgIF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9fYiwgJDEpLCBbLWJdLAorCSAgICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnXSwKKwkgICAgW19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnXSldLAorCSAgW19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJ10pCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KnxpYTY0KikKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJICA7OworCSopCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisKKwkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCisgICAgICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKyAgICAgICAgQUNfTElOS19JRkVMU0UoaW50IGZvbyh2b2lkKSB7fSwKKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgICApCisgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0nbm8nCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBuZXRic2QqKQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAorICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgorICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICA7OworCisgICAgb3BlbmJzZCopCisgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisJZWxzZQorCSAgY2FzZSAkaG9zdF9vcyBpbgorCSAgIG9wZW5ic2RbWzAxXV0uKiB8IG9wZW5ic2QyLltbMC03XV0gfCBvcGVuYnNkMi5bWzAtN11dLiopCisJICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgICAgIDs7CisJICAgKikKKwkgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICAgOzsKKwkgIGVzYWMKKwlmaQorICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgb3MyKikKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJEVDSE8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZWNobyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lY2hvICIgU0lOR0xFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVjaG8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIDs7CisKKyAgICBvc2YzKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0nbm8nCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgOzsKKworICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmU7IHByaW50ZiAiJXNcXG4iICItaGlkZGVuIj4+ICRsaWIuZXhwfgorCSRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0taW5wdXQgJHt3bH0kbGliLmV4cCAkY29tcGlsZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JFJNICRsaWIuZXhwJworCisJIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXogZGVmcycKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJd2xhcmM9JyR7d2x9JworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgZWxzZQorCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorCSoiQ29tcGlsZXJzIDUuMCIqKQorCSAgd2xhcmM9JycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKwkgIDs7CisJKikKKwkgIHdsYXJjPScke3dsfScKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CisgICAgICAqKQorCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCisJIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAorCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgorCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JworCWVsc2UKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c2VxdWVudDsgdGhlbgorCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KKwkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgc3lzdjQpCisgICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgorCXNuaSkKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PworCTs7CisJc2llbWVucykKKwkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgorCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICAgIDs7CisJbW90b3JvbGEpCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKKwk7OworICAgICAgZXNhYworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NC4zKikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSctQmV4cG9ydCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKwloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bWzAxXV0uW1sxMF1dKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLltbMDI0XV0qKQorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisgICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisgICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKyAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKyAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorICAgICAgIyBhcyAteiBkZWZzLgorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosbm9kZWZzJworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIsJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CZXhwb3J0JworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCB4JGhvc3RfdmVuZG9yID0geHNuaTsgdGhlbgorICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqIHwgc3lzdjUqKQorCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJsYXJnZWR5bnN5bScKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCitdKQorQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSldKQordGVzdCAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCitfTFRfVEFHVkFSKHdpdGhfZ251X2xkLCAkMSk9JHdpdGhfZ251X2xkCisKK19MVF9ERUNMKFtdLCBbbGliZXh0XSwgWzBdLCBbT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpXSlkbmwKK19MVF9ERUNMKFtdLCBbc2hyZXh0X2NtZHNdLCBbMV0sIFtTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKV0pZG5sCitfTFRfREVDTChbXSwgW2V4dHJhY3RfZXhwc3ltc19jbWRzXSwgWzJdLAorICAgIFtUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlXSkKKworIworIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPworIworY2FzZSAieCRfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSkiIGluCit4fHh5ZXMpCisgICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKKyAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworCisgIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIGNhc2UgJF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgaW4KKyAgICAqJ34nKikKKyAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KKyAgICAgIDs7CisgICAgJyRDQyAnKikKKyAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKKyAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYworICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCisgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluXSwKKwlbbHRfY3ZfXV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKSwKKwlbJFJNIGNvbmZ0ZXN0KgorCWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisJaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcnI7IHRoZW4KKwkgIHNvbmFtZT1jb25mdGVzdAorCSAgbGliPWNvbmZ0ZXN0CisJICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKKwkgIGRlcGxpYnM9CisJICB3bD0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSkKKwkgIHBpY19mbGFnPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkKKwkgIGNvbXBpbGVyX2ZsYWdzPS12CisJICBsaW5rZXJfZmxhZ3M9LXYKKwkgIHZlcnN0cmluZz0KKwkgIG91dHB1dF9vYmpkaXI9LgorCSAgbGlibmFtZT1jb25mdGVzdAorCSAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CisJICBpZiBBQ19UUllfRVZBTChfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKQorCSAgdGhlbgorCSAgICBsdF9jdl9bXV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCSAgZWxzZQorCSAgICBsdF9jdl9bXV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKwkgIGZpCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKwllbHNlCisJICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKwlmaQorCSRSTSBjb25mdGVzdCoKKwldKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSRsdF9jdl9bXV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKQorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIDs7Citlc2FjCisKK19MVF9UQUdERUNMKFtidWlsZF9saWJ0b29sX25lZWRfbGNdLCBbYXJjaGl2ZV9jbWRzX25lZWRfbGNdLCBbMF0sCisgICAgW1doZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXNdKQorX0xUX1RBR0RFQ0woW2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lc10sCisgICAgW2VuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNdLCBbMF0sCisgICAgW1doZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWNdKQorX0xUX1RBR0RFQ0woW10sIFtleHBvcnRfZHluYW1pY19mbGFnX3NwZWNdLCBbMV0sCisgICAgW0NvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnNdKQorX0xUX1RBR0RFQ0woW10sIFt3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY10sIFsxXSwKKyAgICBbQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzXSkKK19MVF9UQUdERUNMKFtdLCBbY29tcGlsZXJfbmVlZHNfb2JqZWN0XSwgWzFdLAorICAgIFtXaGV0aGVyIHRoZSBjb21waWxlciBjb3BlcyB3aXRoIHBhc3Npbmcgbm8gb2JqZWN0cyBkaXJlY3RseV0pCitfTFRfVEFHREVDTChbXSwgW29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNdLCBbMl0sCisgICAgW0NyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX1RBR0RFQ0woW10sIFtvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc10sIFsyXSwKKyAgICBbQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9UQUdERUNMKFtdLCBbYXJjaGl2ZV9jbWRzXSwgWzJdLCBbQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9UQUdERUNMKFtdLCBbYXJjaGl2ZV9leHBzeW1fY21kc10sIFsyXSkKK19MVF9UQUdERUNMKFtdLCBbbW9kdWxlX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVpbGRpbmcKKyAgICBhIHNoYXJlZCBhcmNoaXZlLl0pCitfTFRfVEFHREVDTChbXSwgW21vZHVsZV9leHBzeW1fY21kc10sIFsyXSkKK19MVF9UQUdERUNMKFtdLCBbd2l0aF9nbnVfbGRdLCBbMV0sCisgICAgW1doZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIHdpdGggR05VIGxkIG9yIG5vdF0pCitfTFRfVEFHREVDTChbXSwgW2FsbG93X3VuZGVmaW5lZF9mbGFnXSwgWzFdLAorICAgIFtGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdF0pCitfTFRfVEFHREVDTChbXSwgW25vX3VuZGVmaW5lZF9mbGFnXSwgWzFdLAorICAgIFtGbGFnIHRoYXQgZW5mb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHNdKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXSwgWzFdLAorICAgIFtGbGFnIHRvIGhhcmRjb2RlICRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyAgICBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3RdKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkXSwgWzFdLAorICAgIFtbSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgJGxpYmRpciBpbnRvIGEgYmluYXJ5CisgICAgZHVyaW5nIGxpbmtpbmcuICBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3RdXSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl0sIFsxXSwKKyAgICBbV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudF0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2RpcmVjdF0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyAgICBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeV0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyAgICBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKKyAgICAiYWJzb2x1dGUiLCBpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyAke3NobGlicGF0aF92YXJ9IGlmIHRoZQorICAgIGxpYnJhcnkgaXMgcmVsb2NhdGVkXSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbWludXNfTF0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyAgICBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyAgICBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfYXV0b21hdGljXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKKyAgICBpbnRvIHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAorICAgIGFnYWluc3QgaXRdKQorX0xUX1RBR0RFQ0woW10sIFtpbmhlcml0X3JwYXRoXSwgWzBdLAorICAgIFtTZXQgdG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJhcmllcworICAgIHRvIHJ1bnRpbWUgcGF0aCBsaXN0XSkKK19MVF9UQUdERUNMKFtdLCBbbGlua19hbGxfZGVwbGlic10sIFswXSwKKyAgICBbV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzXSkKK19MVF9UQUdERUNMKFtdLCBbZml4X3NyY2ZpbGVfcGF0aF0sIFsxXSwKKyAgICBbRml4IHRoZSBzaGVsbCB2YXJpYWJsZSAkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyXSkKK19MVF9UQUdERUNMKFtdLCBbYWx3YXlzX2V4cG9ydF9zeW1ib2xzXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWRdKQorX0xUX1RBR0RFQ0woW10sIFtleHBvcnRfc3ltYm9sc19jbWRzXSwgWzJdLAorICAgIFtUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzXSkKK19MVF9UQUdERUNMKFtdLCBbZXhjbHVkZV9leHBzeW1zXSwgWzFdLAorICAgIFtTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzXSkKK19MVF9UQUdERUNMKFtdLCBbaW5jbHVkZV9leHBzeW1zXSwgWzFdLAorICAgIFtTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWRdKQorX0xUX1RBR0RFQ0woW10sIFtwcmVsaW5rX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzXSkKK19MVF9UQUdERUNMKFtdLCBbZmlsZV9saXN0X3NwZWNdLCBbMV0sCisgICAgW1NwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlc10pCitkbmwgRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKK2RubCBfTFRfVEFHREVDTChbXSwgW3RocmVhZF9zYWZlX2ZsYWdfc3BlY10sIFsxXSwKK2RubCAgICBbQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQgc2FmZSBvYmplY3RzXSkKK10pIyBfTFRfTElOS0VSX1NITElCUworCisKKyMgX0xUX0xBTkdfQ19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgQyBjb21waWxlciBhcmUgc3VpdGFibHkKKyMgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRyB0byB3cml0ZQorIyB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfQ19DT05GSUddLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK2x0X3NhdmVfQ0M9IiRDQyIKK0FDX0xBTkdfUFVTSChDKQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQyB0ZXN0IHNvdXJjZXMuCithY19leHQ9YworCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKCl7cmV0dXJuKDApO30nCisKK19MVF9UQUdfQ09NUElMRVIKKyMgU2F2ZSB0aGUgZGVmYXVsdCBjb21waWxlciwgc2luY2UgaXQgZ2V0cyBvdmVyd3JpdHRlbiB3aGVuIHRoZSBvdGhlcgorIyB0YWdzIGFyZSBiZWluZyB0ZXN0ZWQsIGFuZCBfTFRfVEFHVkFSKGNvbXBpbGVyLCBbXSkgaXMgYSBOT1AuCitjb21waWxlcl9ERUZBVUxUPSRDQworCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMjIENBVkVBVCBFTVBUT1I6CisjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgoraWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICBfTFRfQ09NUElMRVJfTk9fUlRUSSgkMSkKKyAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisgIExUX1NZU19ETE9QRU5fU0VMRgorICBfTFRfQ01EX1NUUklQTElCCisKKyAgIyBSZXBvcnQgd2hpY2ggbGlicmFyeSB0eXBlcyB3aWxsIGFjdHVhbGx5IGJlIGJ1aWx0CisgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQorCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKKyAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXgzKikKKyAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgICAgZmkKKyAgICA7OworCisgIGFpeFtbNC05XV0qKQorICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKyAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKKworICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCisgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQorCisgIF9MVF9DT05GSUcoJDEpCitmaQorQUNfTEFOR19QT1AKK0NDPSIkbHRfc2F2ZV9DQyIKK10pIyBfTFRfTEFOR19DX0NPTkZJRworCisKKyMgX0xUX0xBTkdfQ1hYX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEMrKyBjb21waWxlciBhcmUgc3VpdGFibHkKKyMgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRyB0byB3cml0ZQorIyB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfQ1hYX0NPTkZJR10sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCitpZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3QgIlgkQ1hYIiAhPSAiWG5vIiAmJgorICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAorICAgICh0ZXN0ICJYJENYWCIgIT0gIlhnKysiKSkpIDsgdGhlbgorICBBQ19QUk9HX0NYWENQUAorZWxzZQorICBfbHRfY2F1Z2h0X0NYWF9lcnJvcj15ZXMKK2ZpCisKK0FDX0xBTkdfUFVTSChDKyspCitfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KK19MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KK19MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT1ubworX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAorX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KK19MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworX0xUX1RBR1ZBUihyZWxvYWRfZmxhZywgJDEpPSRyZWxvYWRfZmxhZworX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSRyZWxvYWRfY21kcworX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEMrKyB0ZXN0IHNvdXJjZXMuCithY19leHQ9Y3BwCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDKysgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0CisjIHRoZSBDWFggY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCisjIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCisjIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KK2lmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCisgIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKKworICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKGludCwgY2hhciAqW1tdXSkgeyByZXR1cm4oMCk7IH0nCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorICBfTFRfVEFHX0NPTVBJTEVSCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSRDQworICBsdF9zYXZlX0xEPSRMRAorICBsdF9zYXZlX0dDQz0kR0NDCisgIEdDQz0kR1hYCisgIGx0X3NhdmVfd2l0aF9nbnVfbGQ9JHdpdGhfZ251X2xkCisgIGx0X3NhdmVfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRAorICBpZiB0ZXN0IC1uICIke2x0X2N2X3Byb2dfZ251X2xkY3h4K3NldH0iOyB0aGVuCisgICAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkY3h4CisgIGVsc2UKKyAgICAkYXNfdW5zZXQgbHRfY3ZfcHJvZ19nbnVfbGQKKyAgZmkKKyAgaWYgdGVzdCAtbiAiJHtsdF9jdl9wYXRoX0xEQ1hYK3NldH0iOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRENYWAorICBlbHNlCisgICAgJGFzX3Vuc2V0IGx0X2N2X3BhdGhfTEQKKyAgZmkKKyAgdGVzdCAteiAiJHtMRENYWCtzZXR9IiB8fCBMRD0kTERDWFgKKyAgQ0M9JHtDWFgtImMrKyJ9CisgIGNvbXBpbGVyPSRDQworICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisgIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKworICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgICAgIyBXZSBkb24ndCB3YW50IC1mbm8tZXhjZXB0aW9uIHdoZW4gY29tcGlsaW5nIEMrKyBjb2RlLCBzbyBzZXQgdGhlCisgICAgIyBub19idWlsdGluX2ZsYWcgc2VwYXJhdGVseQorICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtZm5vLWJ1aWx0aW4nCisgICAgZWxzZQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQorICAgIGZpCisKKyAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgIyBTZXQgdXAgZGVmYXVsdCBHTlUgQysrIGNvbmZpZ3VyYXRpb24KKworICAgICAgTFRfUEFUSF9MRAorCisgICAgICAjIENoZWNrIGlmIEdOVSBDKysgdXNlcyBHTlUgbGQgYXMgdGhlIHVuZGVybHlpbmcgbGlua2VyLCBzaW5jZSB0aGUKKyAgICAgICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCisgICAgICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CisgICAgICAgICMgWFhYIEkgdGhpbmsgd2xhcmMgY2FuIGJlIGVsaW1pbmF0ZWQgaW4gbHRjZi1jeHgsIGJ1dCBJIG5lZWQgdG8KKyAgICAgICAgIyAgICAgaW52ZXN0aWdhdGUgaXQgYSBsaXR0bGUgYml0IG1vcmUuIChNTSkKKyAgICAgICAgd2xhcmM9JyR7d2x9JworCisgICAgICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICAgICAgaWYgZXZhbCAiYCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkYCAtLWhlbHAgMj4mMSIgfAorCSAgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICBlbHNlCisgICAgICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorICAgICAgICBmaQorICAgICAgZWxzZQorICAgICAgICB3aXRoX2dudV9sZD1ubworICAgICAgICB3bGFyYz0KKworICAgICAgICAjIEEgZ2VuZXJpYyBhbmQgdmVyeSBzaW1wbGUgZGVmYXVsdCBzaGFyZWQgbGlicmFyeSBjcmVhdGlvbgorICAgICAgICAjIGNvbW1hbmQgZm9yIEdOVSBDKysgZm9yIHRoZSBjYXNlIHdoZXJlIGl0IHVzZXMgdGhlIG5hdGl2ZQorICAgICAgICAjIGxpbmtlciwgaW5zdGVhZCBvZiBHTlUgbGQuICBJZiBwb3NzaWJsZSwgdGhpcyBzZXR0aW5nIHNob3VsZAorICAgICAgICAjIG92ZXJyaWRkZW4gdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG5hdGl2ZSBsaW5rZXIgZmVhdHVyZXMgb24KKyAgICAgICAgIyB0aGUgcGxhdGZvcm0gaXQgaXMgYmVpbmcgdXNlZCBvbi4KKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJworICAgICAgZmkKKworICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKworICAgIGVsc2UKKyAgICAgIEdYWD1ubworICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICAgIHdsYXJjPQorICAgIGZpCisKKyAgICAjIFBPUlRNRTogZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgQysrIGxpbmsgY2hhcmFjdGVyaXN0aWNzCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4MyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisgICAgICBhaXhbWzQtOV1dKikKKyAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisgICAgICAgICAgIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworICAgICAgICAgIGV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCisgICAgICAgICAgbm9fZW50cnlfZmxhZz0iIgorICAgICAgICBlbHNlCisgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCisgICAgICAgICAgIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisgICAgICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisgICAgICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKyAgICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuW1syM11dfGFpeDQuW1syM11dLip8YWl4W1s1LTldXSopCisJICAgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbworCSAgICAgIGNhc2UgJGxkX2ZsYWcgaW4KKwkgICAgICAqLWJydGwqKQorCSAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKwkgICAgICAgIGJyZWFrCisJICAgICAgICA7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICA7OworICAgICAgICAgIGVzYWMKKworICAgICAgICAgIGV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCisgICAgICAgICAgbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JworICAgICAgICBmaQorCisgICAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKyAgICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5CisgICAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisgICAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgorCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JycKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisgICAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9JyR7d2x9LWYsJworCisgICAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCisgICAgICAgICAgIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisgICAgICAgICAgIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisJICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgorCSAgICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKwkgIHRoZW4KKwkgICAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisJICAgIDoKKwkgIGVsc2UKKwkgICAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCisJICAgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKwkgICAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKwkgICAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKwkgIGZpCisgICAgICAgICAgZXNhYworICAgICAgICAgIHNoYXJlZF9mbGFnPSctc2hhcmVkJworCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICAgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJworCSAgZmkKKyAgICAgICAgZWxzZQorICAgICAgICAgICMgbm90IHVzaW5nIGdjYworICAgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICAjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorCSAgIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwkgIHNoYXJlZF9mbGFnPSctRycKKyAgICAgICAgICBlbHNlCisJICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJworCSAgICBlbHNlCisJICAgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKKwkgICAgZmkKKyAgICAgICAgICBmaQorICAgICAgICBmaQorCisgICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJleHBhbGwnCisgICAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAorICAgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8KKwkjIGV4cG9ydC4KKyAgICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKyAgICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisgICAgICAgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorICAgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJworICAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eQorICAgICAgICAgICMgZXhlY3V0YWJsZS4KKyAgICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCisgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICAgIGVsc2UKKyAgICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKKyAgICAgICAgICBlbHNlCisJICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorCSAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCisJICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm5vdG9rJworCSAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJvaycKKwkgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorCSAgICAgICMgV2Ugb25seSB1c2UgdGhpcyBjb2RlIGZvciBHTlUgbGRzIHRoYXQgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUuCisJICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgZWxzZQorCSAgICAgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcworCSAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJGNvbnZlbmllbmNlJworCSAgICBmaQorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCisJICAgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZAorCSAgICAjIGxpYnJhcmllcy4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICA7OworCisgICAgICBiZW9zKikKKwlpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwkgICMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKwkgICMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwllbHNlCisJICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJZmkKKwk7OworCisgICAgICBjaG9ydXMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgICopCisJICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorICAgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJworICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworICAgICAgICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKworICAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworICAgICAgICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKyAgICAgICAgICAjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgICAgZWxzZQorCSAgICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwkgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgICBmaX4KKyAgICAgICAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICAgIGVsc2UKKyAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgICBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUygkMSkKKwk7OworCisgICAgICBkZ3V4KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBlYysrKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBnaGN4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGZyZWVic2RbWzEyXV0qKQorICAgICAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIHJlcG9ydGVkIHRvIGJlIGZhaXJseSBicm9rZW4gYmVmb3JlCisJIyBzd2l0Y2ggdG8gRUxGCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZC1lbGYqKQorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAgICAgICAjIEZyZWVCU0QgMyBhbmQgbGF0ZXIgdXNlIEdOVSBDKysgYW5kIEdOVSBsZCB3aXRoIHN0YW5kYXJkIEVMRgorICAgICAgICAjIGNvbnZlbnRpb25zCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGdudSopCisgICAgICAgIDs7CisKKyAgICAgIGhhaWt1KikKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgICA7OworCisgICAgICBocHV4OSopCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAorCQkJCSAgICAgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAorCQkJCSAgICAgICAgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorICAgICAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgICAgICA7OworICAgICAgICAgIGFDQyopCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLWIgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKyAgICAgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorICAgICAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisgICAgICAgICAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorICAgICAgICAgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorICAgICAgICAgICAgIyBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEVHUkVQICJcLUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgaHB1eDEwKnxocHV4MTEqKQorICAgICAgICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKyAgICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorCSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICBmaQorICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkJCQkJICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKKwkJCQkJICAgICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKworICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBhQ0MqKQorCSAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICAgIGhwcGEqNjQqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgICBpYTY0KikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIDs7CisJICAgICAgKikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgZXNhYworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkR1JFUCAiXC1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCisJICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICAgICAgICBocHBhKjY0KikKKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgICAgaWE2NCopCisJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICAgICopCisJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgIGVzYWMKKwkgICAgICBmaQorCSAgICBlbHNlCisJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGludGVyaXhbWzMtOV1dKikKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCSMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKwkjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CisJIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorCSMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKwkjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCisJIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKwk7OworICAgICAgaXJpeDUqIHwgaXJpeDYqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBTR0kgQysrCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1hbGwgLW11bHRpZ290ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjICJDQyAtYXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBJUklYIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJICAgICMgaW4gdGhlIGFyY2hpdmUuCisJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLWFyIC1XUiwtdSAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworICAgICAgICAgICopCisJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisJICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgZWxzZQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAtbyAkbGliJworCSAgICAgIGZpCisJICAgIGZpCisJICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgICAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBLQ0MqKQorCSAgICAjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCisKKwkgICAgIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQorCSAgICAjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CisJICAgICMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzOyBtdiBcJHRlbXBsaWIgJGxpYicKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxIHwgJEdSRVAgImxkImA7IHJtIC1mIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQ7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLUJzdGF0aWMiLCB3aGVyZSAiQ0MiIGlzIHRoZSBLQUkgQysrIGNvbXBpbGVyLgorCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisJICBpY3BjKiB8IGVjcGMqICkKKwkgICAgIyBJbnRlbCBDKysKKwkgICAgd2l0aF9nbnVfbGQ9eWVzCisJICAgICMgdmVyc2lvbiA4LjAgYW5kIGFib3ZlIG9mIGljcGMgY2hva2Ugb24gbXVsdGlwbHkgZGVmaW5lZCBzeW1ib2xzCisJICAgICMgaWYgd2UgYWRkICRwcmVkZXBfb2JqZWN0cyBhbmQgJHBvc3RkZXBfb2JqZWN0cywgaG93ZXZlciA3LjEgYW5kCisJICAgICMgZWFybGllciBkbyBub3QgYWRkIHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMuCisJICAgIGNhc2UgYCRDQyAtViAyPiYxYCBpbgorCSAgICAgICoiVmVyc2lvbiA3LiIqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkJOzsKKwkgICAgICAqKSAgIyBWZXJzaW9uIDguMCBvciBuZXdlcgorCSAgICAgICAgdG1wX2lkeW49CisJICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorCQkgIGlhNjQqKSB0bXBfaWR5bj0nIC1pX2R5bmFtaWMnOzsKKwkJZXNhYworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCQk7OworCSAgICBlc2FjCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgICA7OworICAgICAgICAgIHBnQ0MqIHwgcGdjcHAqKQorICAgICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKKwkgICAgY2FzZSBgJENDIC1WYCBpbgorCSAgICAqcGdDQ1wgW1sxLTVdXS4qIHwgKnBnY3BwXCBbWzEtNV1dLiopCisJICAgICAgX0xUX1RBR1ZBUihwcmVsaW5rX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9ianMgJGxpYm9ianMgJGNvbXBpbGVfZGVwbGlic34KKwkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgIicKKwkgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9sZG9ianMkb2xkX2RlcGxpYnN+CisJCSRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgfgorCQkkUkFOTElCICRvbGRsaWInCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICAgIDs7CisJICAgICopICMgVmVyc2lvbiA2IGFuZCBhYm92ZSB1c2Ugd2VhayBzeW1ib2xzCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgICAgOzsKKwkgICAgZXNhYworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICAgICAgICA7OworCSAgY3h4KikKKwkgICAgIyBDb21wYXEgQysrCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICAtbyAkbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJworCisJICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJsZCJgOyB0ZW1wbGlzdD1gZnVuY19lY2hvX2FsbCAiJHRlbXBsaXN0IiB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkIC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiWCRsaXN0IiB8ICRYc2VkJworCSAgICA7OworCSAgeGwqIHwgbXBpeGwqIHwgYmd4bCopCisJICAgICMgSUJNIFhMIDguMCBvbiBQUEMsIHdpdGggR05VIGxkCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkJY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCQllY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkJJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICAgIGZpCisJICAgIDs7CisJICAqKQorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkgICAgKlN1blwgQyopCisJICAgICAgIyBTdW4gQysrIDUuOQorCSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzJworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisJICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgICAgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzCisKKwkgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgc29tZXRoaW5nIGJhc2VkIG9uCisJICAgICAgIyAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMQorCSAgICAgICMgd291bGQgYmUgYmV0dGVyLgorCSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdmdW5jX2VjaG9fYWxsJworCisJICAgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJICAgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJZXNhYworCTs7CisKKyAgICAgIGx5bnhvcyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwk7OworCisgICAgICBtODhrKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwk7OworCisgICAgICBtdnMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIGN4eCopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisJICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworCWVzYWMKKwk7OworCisgICAgICBuZXRic2QqKQorICAgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRsaW5rZXJfZmxhZ3MnCisJICB3bGFyYz0KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlmaQorCSMgV29ya2Fyb3VuZCBzb21lIGJyb2tlbiBwcmUtMS41IHRvb2xjaGFpbnMKKwlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCBjb25mdGVzdC4kb2JqZXh0IHwgJFNFRCAtZSAiczotbGdjYyAtbGMgLWxnY2M6OiInCisJOzsKKworICAgICAgKm50byogfCAqcW54KikKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKwk7OworCisgICAgICBvcGVuYnNkMiopCisgICAgICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGZhaXJseSBicm9rZW4KKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKworICAgICAgb3BlbmJzZCopCisJaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGZpCisJICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCisJZWxzZQorCSAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWZpCisJOzsKKworICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIEtDQyopCisJICAgICMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKKworCSAgICAjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCisJICAgICMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKKwkgICAgIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICIkbGliIiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwkgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgIG9zZjMqKSBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnIDs7CisJICAgICAgKikgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb2xkbGliICRvbGRvYmpzJyA7OworCSAgICBlc2FjCisJICAgIDs7CisgICAgICAgICAgUkNDKikKKwkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBjeHgqKQorCSAgICBjYXNlICRob3N0IGluCisJICAgICAgb3NmMyopCisJICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCQk7OworCSAgICAgICopCisJICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZX4KKwkgICAgICAgICAgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKwkgICAgICAgICAgJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSAke3dsfS1pbnB1dCAke3dsfSRsaWIuZXhwICBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifgorCSAgICAgICAgICAkUk0gJGxpYi5leHAnCisJICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisJCTs7CisJICAgIGVzYWMKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkIiB8ICRHUkVQIC12ICJsZDoiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworCSAgICA7OworCSAgKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgICBvc2YzKikKKwkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCQkgIDs7CisJICAgICAgICAqKQorCSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkJICA7OworCSAgICAgIGVzYWMKKworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKworCSAgICBlbHNlCisJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHBzb3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworCisgICAgICBzdW5vczQqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBTdW4gQysrIDQueAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgIGxjYyopCisJICAgICMgTHVjaWQKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHNvbGFyaXMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKiB8IHN1bkNDKikKKwkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywkMSk9eWVzCisJICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICAgICAkQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAke3dsfS1NICR7d2x9JGxpYi5leHAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKKwkgICAgICAqKQorCQkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAorCQkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLgorCSAgICAgICAgIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKwkJX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JworCSAgICAgICAgOzsKKwkgICAgZXNhYworCSAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKworCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZnVuY19lY2hvX2FsbCcKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICBnY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisKKwkgICAgIyBUaGUgQysrIGNvbXBpbGVyIG11c3QgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGFyY2hpdmUuCisJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgJExERkxBR1MgLWFyY2hpdmUgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEdOVSBDKysgY29tcGlsZXIgd2l0aCBTb2xhcmlzIGxpbmtlcgorCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwkgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS16ICR7d2x9ZGVmcycKKwkgICAgICBpZiAkQ0MgLS12ZXJzaW9uIHwgJEdSRVAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJCSAgJENDIC1zaGFyZWQgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCisJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworCSAgICAgIGVsc2UKKwkgICAgICAgICMgZysrIDIuNyBhcHBlYXJzIHRvIHJlcXVpcmUgYC1HJyBOT1QgYC1zaGFyZWQnIG9uIHRoaXMKKwkgICAgICAgICMgcGxhdGZvcm0uCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJCSAgJENDIC1HIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLUcgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisJICAgICAgZmkKKworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICR3bCRsaWJkaXInCisJICAgICAgY2FzZSAkaG9zdF9vcyBpbgorCQlzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OworCQkqKQorCQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JworCQkgIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bWzAxXV0uW1sxMF1dKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLltbMDI0XV0qKQorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgIENDKikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKwkjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAorCSMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKwkjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKwkjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0CisJIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCisJIyBhcyAteiBkZWZzLgorCV9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JworCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teixub2RlZnMnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiwkbGliZGlyJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworCV9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJleHBvcnQnCisJcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1UcHJlbGlua19vYmplY3RzICRvbGRvYmpzfgorCSAgICAgICciJF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpIgorCSAgICBfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JyRDQyAtVHByZWxpbmtfb2JqZWN0cyAkcmVsb2FkX29ianN+CisJICAgICAgJyIkX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpIgorCSAgICA7OworCSAgKikKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICA7OworCWVzYWMKKyAgICAgIDs7CisKKyAgICAgIHRhbmRlbSopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgTkNDKikKKwkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICB2eHdvcmtzKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKworICAgICAgKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBBQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKV0pCisgICAgdGVzdCAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCisgICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0iJEdYWCIKKyAgICBfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKKworICAgICMjIENBVkVBVCBFTVBUT1I6CisgICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyAgICAjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorICAgICMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgorICAgIF9MVF9TWVNfSElEREVOX0xJQkRFUFMoJDEpCisgICAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICAgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICAgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICAgIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCisgICAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorCisgICAgX0xUX0NPTkZJRygkMSkKKyAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisKKyAgQ0M9JGx0X3NhdmVfQ0MKKyAgTERDWFg9JExECisgIExEPSRsdF9zYXZlX0xECisgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgd2l0aF9nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKKyAgbHRfY3ZfcGF0aF9MRENYWD0kbHRfY3ZfcGF0aF9MRAorICBsdF9jdl9wYXRoX0xEPSRsdF9zYXZlX3BhdGhfTEQKKyAgbHRfY3ZfcHJvZ19nbnVfbGRjeHg9JGx0X2N2X3Byb2dfZ251X2xkCisgIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCitmaSAjIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzCisKK0FDX0xBTkdfUE9QCitdKSMgX0xUX0xBTkdfQ1hYX0NPTkZJRworCisKKyMgX0xUX1NZU19ISURERU5fTElCREVQUyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaWd1cmUgb3V0ICJoaWRkZW4iIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGZyb20gdmVyYm9zZQorIyBjb21waWxlciBvdXRwdXQgd2hlbiBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisjIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCittNF9kZWZ1bihbX0xUX1NZU19ISURERU5fTElCREVQU10sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3QgYmVpbmcgbGlua2VkOgorX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPQorX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0KK19MVF9UQUdWQVIocHJlZGVwcywgJDEpPQorX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPQorX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0KKworZG5sIHdlIGNhbid0IHVzZSB0aGUgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIGhlcmUsCitkbmwgYmVjYXVzZSBpdCBjb250YWlucyBjb2RlIGludGVuZGVkIGZvciBhbiBleGVjdXRhYmxlLAorZG5sIG5vdCBhIGxpYnJhcnkuICBJdCdzIHBvc3NpYmxlIHdlIHNob3VsZCBsZXQgZWFjaAorZG5sIHRhZyBkZWZpbmUgYSBuZXcgbHRfPz8/P19saW5rX3Rlc3RfY29kZSB2YXJpYWJsZSwKK2RubCBidXQgaXQncyBvbmx5IHVzZWQgaGVyZS4uLgorbTRfaWYoWyQxXSwgW10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgoraW50IGE7Cit2b2lkIGZvbyAodm9pZCkgeyBhID0gMDsgfQorX0xUX0VPRgorXSwgWyQxXSwgW0NYWF0sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorY2xhc3MgRm9vCit7CitwdWJsaWM6CisgIEZvbyAodm9pZCkgeyBhID0gMDsgfQorcHJpdmF0ZToKKyAgaW50IGE7Cit9OworX0xUX0VPRgorXSwgWyQxXSwgW0Y3N10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorICAgICAgc3Vicm91dGluZSBmb28KKyAgICAgIGltcGxpY2l0IG5vbmUKKyAgICAgIGludGVnZXIqNCBhCisgICAgICBhPTAKKyAgICAgIHJldHVybgorICAgICAgZW5kCitfTFRfRU9GCitdLCBbJDFdLCBbRkNdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyAgICAgIHN1YnJvdXRpbmUgZm9vCisgICAgICBpbXBsaWNpdCBub25lCisgICAgICBpbnRlZ2VyIGEKKyAgICAgIGE9MAorICAgICAgcmV0dXJuCisgICAgICBlbmQKK19MVF9FT0YKK10sIFskMV0sIFtHQ0pdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKK3B1YmxpYyBjbGFzcyBmb28geworICBwcml2YXRlIGludCBhOworICBwdWJsaWMgdm9pZCBiYXIgKHZvaWQpIHsKKyAgICBhID0gMDsKKyAgfQorfTsKK19MVF9FT0YKK10pCitkbmwgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5Citkbmwgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgoraWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKKyAgIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCisKKyAgIyBTZW50aW5lbCB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBvciBub3Qgd2UgYXJlIGJlZm9yZQorICAjIHRoZSBjb25mdGVzdCBvYmplY3QgZmlsZS4KKyAgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT1ubworCisgIGZvciBwIGluIGBldmFsICIkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQiYDsgZG8KKyAgICBjYXNlICRwIGluCisKKyAgICAtTCogfCAtUiogfCAtbCopCisgICAgICAgIyBTb21lIGNvbXBpbGVycyBwbGFjZSBzcGFjZSBiZXR3ZWVuICIte0wsUn0iIGFuZCB0aGUgcGF0aC4KKyAgICAgICAjIFJlbW92ZSB0aGUgc3BhY2UuCisgICAgICAgaWYgdGVzdCAkcCA9ICItTCIgfHwKKyAgICAgICAgICB0ZXN0ICRwID0gIi1SIjsgdGhlbgorCSBwcmV2PSRwCisJIGNvbnRpbnVlCisgICAgICAgZWxzZQorCSBwcmV2PQorICAgICAgIGZpCisKKyAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorCSBjYXNlICRwIGluCisJIC1MKiB8IC1SKikKKwkgICAjIEludGVybmFsIGNvbXBpbGVyIGxpYnJhcnkgcGF0aHMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhvc2UKKwkgICAjIHByb3ZpZGVkIHRoZSB1c2VyLiAgVGhlIHBvc3RkZXBzIGFscmVhZHkgY29tZSBhZnRlciB0aGUKKwkgICAjIHVzZXIgc3VwcGxpZWQgbGlicyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgdGhlbS4KKwkgICBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKSI7IHRoZW4KKwkgICAgIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9IiR7cHJldn0ke3B9IgorCSAgIGVsc2UKKwkgICAgIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9IiR7X0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0gJHtwcmV2fSR7cH0iCisJICAgZmkKKwkgICA7OworCSAjIFRoZSAiLWwiIGNhc2Ugd291bGQgbmV2ZXIgY29tZSBiZWZvcmUgdGhlIG9iamVjdCBiZWluZworCSAjIGxpbmtlZCwgc28gZG9uJ3QgYm90aGVyIGhhbmRsaW5nIHRoaXMgY2FzZS4KKwkgZXNhYworICAgICAgIGVsc2UKKwkgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKSI7IHRoZW4KKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9IiR7cHJldn0ke3B9IgorCSBlbHNlCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSIke19MVF9UQUdWQVIocG9zdGRlcHMsICQxKX0gJHtwcmV2fSR7cH0iCisJIGZpCisgICAgICAgZmkKKyAgICAgICA7OworCisgICAgKi4kb2JqZXh0KQorICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3Qgb2JqZWN0IGZpbGUgb25seSBzaG93cyB1cAorICAgICAgICMgb25jZSBpbiB0aGUgY29tcGlsZXIgb3V0cHV0LgorICAgICAgIGlmIHRlc3QgIiRwIiA9ICJjb25mdGVzdC4kb2JqZXh0IjsgdGhlbgorCSBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPXllcworCSBjb250aW51ZQorICAgICAgIGZpCisKKyAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorCSBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpIjsgdGhlbgorCSAgIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0iJHAiCisJIGVsc2UKKwkgICBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9IiRfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkgJHAiCisJIGZpCisgICAgICAgZWxzZQorCSBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSI7IHRoZW4KKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSIkcCIKKwkgZWxzZQorCSAgIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9IiRfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpICRwIgorCSBmaQorICAgICAgIGZpCisgICAgICAgOzsKKworICAgICopIDs7ICMgSWdub3JlIHRoZSByZXN0LgorCisgICAgZXNhYworICBkb25lCisKKyAgIyBDbGVhbiB1cC4KKyAgcm0gLWYgYS5vdXQgYS5leGUKK2Vsc2UKKyAgZWNobyAibGlidG9vbC5tNDogZXJyb3I6IHByb2JsZW0gY29tcGlsaW5nICQxIHRlc3QgcHJvZ3JhbSIKK2ZpCisKKyRSTSAtZiBjb25mZXN0LiRvYmpleHQKKworIyBQT1JUTUU6IG92ZXJyaWRlIGFib3ZlIHRlc3Qgb24gc3lzdGVtcyB3aGVyZSBpdCBpcyBicm9rZW4KK200X2lmKFskMV0sIFtDWFhdLAorW2Nhc2UgJGhvc3Rfb3MgaW4KK2ludGVyaXhbWzMtOV1dKikKKyAgIyBJbnRlcml4IDMuNSBpbnN0YWxscyBjb21wbGV0ZWx5IGhvc2VkIC5sYSBmaWxlcyBmb3IgQysrLCBzbyByYXRoZXIgdGhhbgorICAjIGhhY2sgYWxsIGFyb3VuZCBpdCwgbGV0J3MganVzdCB0cnVzdCAiZysrIiB0byBEVFJULgorICBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCQxKT0KKyAgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsJDEpPQorICBfTFRfVEFHVkFSKHBvc3RkZXBzLCQxKT0KKyAgOzsKKworbGludXgqKQorICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKyAgKlN1blwgQyopCisgICAgIyBTdW4gQysrIDUuOQorCisgICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCisgICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCisgICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcworICAgICMgLWxpYnJhcnk9c3RscG9ydDQgZGVwZW5kcyBvbiBpdC4KKyAgICBjYXNlICIgJENYWCAkQ1hYRkxBR1MgIiBpbgorICAgICoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQorICAgICAgc29sYXJpc191c2Vfc3RscG9ydDQ9eWVzCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgIiRzb2xhcmlzX3VzZV9zdGxwb3J0NCIgIT0geWVzOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCQxKT0nLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJworICAgIGZpCisgICAgOzsKKyAgZXNhYworICA7OworCitzb2xhcmlzKikKKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgQ0MqIHwgc3VuQ0MqKQorICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcworICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZworICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKKyAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCisgICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KKyAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKKyAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIEFkZGluZyB0aGlzIHJlcXVpcmVzIGEga25vd24tZ29vZCBzZXR1cCBvZiBzaGFyZWQgbGlicmFyaWVzIGZvcgorICAgICMgU3VuIGNvbXBpbGVyIHZlcnNpb25zIGJlZm9yZSA1LjYsIGVsc2UgUElDIG9iamVjdHMgZnJvbSBhbiBvbGQKKyAgICAjIGFyY2hpdmUgd2lsbCBiZSBsaW5rZWQgaW50byB0aGUgb3V0cHV0LCBsZWFkaW5nIHRvIHN1YnRsZSBidWdzLgorICAgIGlmIHRlc3QgIiRzb2xhcmlzX3VzZV9zdGxwb3J0NCIgIT0geWVzOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCQxKT0nLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJworICAgIGZpCisgICAgOzsKKyAgZXNhYworICA7OworZXNhYworXSkKKworY2FzZSAiICRfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSkgIiBpbgorKiIgLWxjICIqKSBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8gOzsKK2VzYWMKKyBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycywgJDEpPQoraWYgdGVzdCAtbiAiJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSI7IHRoZW4KKyBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycywgJDEpPWBlY2hvICIgJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSIgfCAke1NFRH0gLWUgJ3MhIC1MISAhZycgLWUgJ3MhXiAhISdgCitmaQorX0xUX1RBR0RFQ0woW10sIFtjb21waWxlcl9saWJfc2VhcmNoX2RpcnNdLCBbMV0sCisgICAgW1RoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBieSB0aGlzIGNvbXBpbGVyIHdoZW4gY3JlYXRpbmcgYSBzaGFyZWQgbGlicmFyeV0pCitfTFRfVEFHREVDTChbXSwgW3ByZWRlcF9vYmplY3RzXSwgWzFdLAorICAgIFtEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8KKyAgICBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeV0pCitfTFRfVEFHREVDTChbXSwgW3Bvc3RkZXBfb2JqZWN0c10sIFsxXSkKK19MVF9UQUdERUNMKFtdLCBbcHJlZGVwc10sIFsxXSkKK19MVF9UQUdERUNMKFtdLCBbcG9zdGRlcHNdLCBbMV0pCitfTFRfVEFHREVDTChbXSwgW2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF0sIFsxXSwKKyAgICBbVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKKyAgICBhIHNoYXJlZCBsaWJyYXJ5XSkKK10pIyBfTFRfU1lTX0hJRERFTl9MSUJERVBTCisKKworIyBfTFRfTEFOR19GNzdfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgRm9ydHJhbiA3NyBjb21waWxlciBhcmUKKyMgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRworIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfRjc3X0NPTkZJR10sCitbQUNfTEFOR19QVVNIKEZvcnRyYW4gNzcpCitpZiB0ZXN0IC16ICIkRjc3IiB8fCB0ZXN0ICJYJEY3NyIgPSAiWG5vIjsgdGhlbgorICBfbHRfZGlzYWJsZV9GNzc9eWVzCitmaQorCitfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KK19MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KK19MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCitfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCitfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCitfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZjc3IHRlc3Qgc291cmNlcy4KK2FjX2V4dD1mCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmNzcgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0CisjIHRoZSBGNzcgY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCisjIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCisjIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KK2lmIHRlc3QgIiRfbHRfZGlzYWJsZV9GNzciICE9IHllczsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKKyAgICAgIHN1YnJvdXRpbmUgdAorICAgICAgcmV0dXJuCisgICAgICBlbmQKKyIKKworICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IlwKKyAgICAgIHByb2dyYW0gdAorICAgICAgZW5kCisiCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorICBfTFRfVEFHX0NPTVBJTEVSCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSIkQ0MiCisgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgQ0M9JHtGNzctImY3NyJ9CisgIGNvbXBpbGVyPSRDQworICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisgIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKyAgR0NDPSRHNzcKKyAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCisgICAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyAgICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyAgICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4MyopCisgICAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorICAgICAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgIGFpeFtbNC05XV0qKQorCWlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKwkgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisJZmkKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQorCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorICAgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljXSkKKworICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9IiRHNzciCisgICAgX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCisKKyAgICAjIyBDQVZFQVQgRU1QVE9SOgorICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisgICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKyAgICBfTFRfQ09NUElMRVJfUElDKCQxKQorICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgICAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKKyAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgICBfTFRfQ09ORklHKCQxKQorICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKworICBHQ0M9JGx0X3NhdmVfR0NDCisgIENDPSIkbHRfc2F2ZV9DQyIKK2ZpICMgdGVzdCAiJF9sdF9kaXNhYmxlX0Y3NyIgIT0geWVzCisKK0FDX0xBTkdfUE9QCitdKSMgX0xUX0xBTkdfRjc3X0NPTkZJRworCisKKyMgX0xUX0xBTkdfRkNfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBGb3J0cmFuIGNvbXBpbGVyIGFyZQorIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19GQ19DT05GSUddLAorW0FDX0xBTkdfUFVTSChGb3J0cmFuKQorCitpZiB0ZXN0IC16ICIkRkMiIHx8IHRlc3QgIlgkRkMiID0gIlhubyI7IHRoZW4KKyAgX2x0X2Rpc2FibGVfRkM9eWVzCitmaQorCitfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KK19MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KK19MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCitfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCitfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCitfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZmMgdGVzdCBzb3VyY2VzLgorYWNfZXh0PSR7YWNfZmNfc3JjZXh0LWZ9CisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmYyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKyMgdGhlIEZDIGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQorIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCitpZiB0ZXN0ICIkX2x0X2Rpc2FibGVfRkMiICE9IHllczsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKKyAgICAgIHN1YnJvdXRpbmUgdAorICAgICAgcmV0dXJuCisgICAgICBlbmQKKyIKKworICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IlwKKyAgICAgIHByb2dyYW0gdAorICAgICAgZW5kCisiCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorICBfTFRfVEFHX0NPTVBJTEVSCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSIkQ0MiCisgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgQ0M9JHtGQy0iZjk1In0KKyAgY29tcGlsZXI9JENDCisgIEdDQz0kYWNfY3ZfZmNfY29tcGlsZXJfZ251CisKKyAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCisgICAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyAgICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyAgICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4MyopCisgICAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorICAgICAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgIGFpeFtbNC05XV0qKQorCWlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKwkgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisJZmkKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQorCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorICAgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljXSkKKworICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9IiRhY19jdl9mY19jb21waWxlcl9nbnUiCisgICAgX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCisKKyAgICAjIyBDQVZFQVQgRU1QVE9SOgorICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisgICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKyAgICBfTFRfU1lTX0hJRERFTl9MSUJERVBTKCQxKQorICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICAgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICAgIF9MVF9DT05GSUcoJDEpCisgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorCisgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgQ0M9IiRsdF9zYXZlX0NDIgorZmkgIyB0ZXN0ICIkX2x0X2Rpc2FibGVfRkMiICE9IHllcworCitBQ19MQU5HX1BPUAorXSkjIF9MVF9MQU5HX0ZDX0NPTkZJRworCisKKyMgX0xUX0xBTkdfR0NKX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciB0aGUgR05VIEphdmEgQ29tcGlsZXIgY29tcGlsZXIKKyMgYXJlIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0dDSl9DT05GSUddLAorW0FDX1JFUVVJUkUoW0xUX1BST0dfR0NKXSlkbmwKK0FDX0xBTkdfU0FWRQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgSmF2YSB0ZXN0IHNvdXJjZXMuCithY19leHQ9amF2YQorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgSmF2YSB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImNsYXNzIGZvbyB7fSIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0ncHVibGljIGNsYXNzIGNvbmZ0ZXN0IHsgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW1tdXSBhcmd2KSB7fTsgfScKKworIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorX0xUX1RBR19DT01QSUxFUgorCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitsdF9zYXZlX0NDPSIkQ0MiCitsdF9zYXZlX0dDQz0kR0NDCitHQ0M9eWVzCitDQz0ke0dDSi0iZ2NqIn0KK2NvbXBpbGVyPSRDQworX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyMgR0NKIGRpZCBub3QgZXhpc3QgYXQgdGhlIHRpbWUgR0NDIGRpZG4ndCBpbXBsaWNpdGx5IGxpbmsgbGliYyBpbi4KK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworX0xUX1RBR1ZBUihyZWxvYWRfZmxhZywgJDEpPSRyZWxvYWRfZmxhZworX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSRyZWxvYWRfY21kcworCisjIyBDQVZFQVQgRU1QVE9SOgorIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KK2lmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgX0xUX0NPTVBJTEVSX05PX1JUVEkoJDEpCisgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorCisgIF9MVF9DT05GSUcoJDEpCitmaQorCitBQ19MQU5HX1JFU1RPUkUKKworR0NDPSRsdF9zYXZlX0dDQworQ0M9IiRsdF9zYXZlX0NDIgorXSkjIF9MVF9MQU5HX0dDSl9DT05GSUcKKworCisjIF9MVF9MQU5HX1JDX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIHRoZSBXaW5kb3dzIHJlc291cmNlIGNvbXBpbGVyCisjIGFyZSBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19SQ19DT05GSUddLAorW0FDX1JFUVVJUkUoW0xUX1BST0dfUkNdKWRubAorQUNfTEFOR19TQVZFCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBSQyB0ZXN0IHNvdXJjZXMuCithY19leHQ9cmMKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIFJDIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0nc2FtcGxlIE1FTlUgeyBNRU5VSVRFTSAiJlNvdXAiLCAxMDAsIENIRUNLRUQgfScKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIKKworIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorX0xUX1RBR19DT01QSUxFUgorCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitsdF9zYXZlX0NDPSIkQ0MiCitsdF9zYXZlX0dDQz0kR0NDCitHQ0M9CitDQz0ke1JDLSJ3aW5kcmVzIn0KK2NvbXBpbGVyPSRDQworX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPXllcworCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgIDoKKyAgX0xUX0NPTkZJRygkMSkKK2ZpCisKK0dDQz0kbHRfc2F2ZV9HQ0MKK0FDX0xBTkdfUkVTVE9SRQorQ0M9IiRsdF9zYXZlX0NDIgorXSkjIF9MVF9MQU5HX1JDX0NPTkZJRworCisKKyMgTFRfUFJPR19HQ0oKKyMgLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9QUk9HX0dDSl0sCitbbTRfaWZkZWYoW0FDX1BST0dfR0NKXSwgW0FDX1BST0dfR0NKXSwKKyAgW200X2lmZGVmKFtBXVtNX1BST0dfR0NKXSwgW0FdW01fUFJPR19HQ0pdLAorICAgIFtBQ19DSEVDS19UT09MKEdDSiwgZ2NqLCkKKyAgICAgIHRlc3QgIngke0dDSkZMQUdTK3NldH0iID0geHNldCB8fCBHQ0pGTEFHUz0iLWcgLU8yIgorICAgICAgQUNfU1VCU1QoR0NKRkxBR1MpXSldKVtdZG5sCitdKQorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0xUX0FDX1BST0dfR0NKXSwgW0xUX1BST0dfR0NKXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbTFRfQUNfUFJPR19HQ0pdLCBbXSkKKworCisjIExUX1BST0dfUkMKKyMgLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX1BST0dfUkNdLAorW0FDX0NIRUNLX1RPT0woUkMsIHdpbmRyZXMsKQorXSkKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtMVF9BQ19QUk9HX1JDXSwgW0xUX1BST0dfUkNdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtMVF9BQ19QUk9HX1JDXSwgW10pCisKKworIyBfTFRfREVDTF9FR1JFUAorIyAtLS0tLS0tLS0tLS0tLQorIyBJZiB3ZSBkb24ndCBoYXZlIGEgbmV3IGVub3VnaCBBdXRvY29uZiB0byBjaG9vc2UgdGhlIGJlc3QgZ3JlcAorIyBhdmFpbGFibGUsIGNob29zZSB0aGUgb25lIGZpcnN0IGluIHRoZSB1c2VyJ3MgUEFUSC4KK200X2RlZnVuKFtfTFRfREVDTF9FR1JFUF0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19FR1JFUF0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0ZHUkVQXSlkbmwKK3Rlc3QgLXogIiRHUkVQIiAmJiBHUkVQPWdyZXAKK19MVF9ERUNMKFtdLCBbR1JFUF0sIFsxXSwgW0EgZ3JlcCBwcm9ncmFtIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzXSkKK19MVF9ERUNMKFtdLCBbRUdSRVBdLCBbMV0sIFtBbiBFUkUgbWF0Y2hlcl0pCitfTFRfREVDTChbXSwgW0ZHUkVQXSwgWzFdLCBbQSBsaXRlcmFsIHN0cmluZyBtYXRjaGVyXSkKK2RubCBOb24tYmxlZWRpbmctZWRnZSBhdXRvY29uZiBkb2Vzbid0IHN1YnN0IEdSRVAsIHNvIGRvIGl0IGhlcmUgdG9vCitBQ19TVUJTVChbR1JFUF0pCitdKQorCisKKyMgX0xUX0RFQ0xfT0JKRFVNUAorIyAtLS0tLS0tLS0tLS0tLQorIyBJZiB3ZSBkb24ndCBoYXZlIGEgbmV3IGVub3VnaCBBdXRvY29uZiB0byBjaG9vc2UgdGhlIGJlc3Qgb2JqZHVtcAorIyBhdmFpbGFibGUsIGNob29zZSB0aGUgb25lIGZpcnN0IGluIHRoZSB1c2VyJ3MgUEFUSC4KK200X2RlZnVuKFtfTFRfREVDTF9PQkpEVU1QXSwKK1tBQ19DSEVDS19UT09MKE9CSkRVTVAsIG9iamR1bXAsIGZhbHNlKQordGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAorX0xUX0RFQ0woW10sIFtPQkpEVU1QXSwgWzFdLCBbQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXJdKQorQUNfU1VCU1QoW09CSkRVTVBdKQorXSkKKworCisjIF9MVF9ERUNMX1NFRAorIyAtLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGEgZnVsbHktZnVuY3Rpb25hbCBzZWQgcHJvZ3JhbSwgdGhhdCB0cnVuY2F0ZXMKKyMgYXMgZmV3IGNoYXJhY3RlcnMgYXMgcG9zc2libGUuICBQcmVmZXIgR05VIHNlZCBpZiBmb3VuZC4KK200X2RlZnVuKFtfTFRfREVDTF9TRURdLAorW0FDX1BST0dfU0VECit0ZXN0IC16ICIkU0VEIiAmJiBTRUQ9c2VkCitYc2VkPSIkU0VEIC1lIDFzL15YLy8iCitfTFRfREVDTChbXSwgW1NFRF0sIFsxXSwgW0Egc2VkIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXRdKQorX0xUX0RFQ0woW10sIFtYc2VkXSwgWyJcJFNFRCAtZSAxcy9eWC8vIl0sCisgICAgW1NlZCB0aGF0IGhlbHBzIHVzIGF2b2lkIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uXSkKK10pIyBfTFRfREVDTF9TRUQKKworbTRfaWZuZGVmKFtBQ19QUk9HX1NFRF0sIFsKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBOT1RFOiBUaGlzIG1hY3JvIGhhcyBiZWVuIHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGludG8gICAjCisjICBHTlUgQXV0b2NvbmYgYXMgQUNfUFJPR19TRUQuICBXaGVuIGl0IGlzIGF2YWlsYWJsZSBpbiAgICMKKyMgIGEgcmVsZWFzZWQgdmVyc2lvbiBvZiBBdXRvY29uZiB3ZSBzaG91bGQgcmVtb3ZlIHRoaXMgICAgIworIyAgbWFjcm8gYW5kIHVzZSBpdCBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbTRfZGVmdW4oW0FDX1BST0dfU0VEXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dF0pCitBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9TRUQsCitbIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBzZWQgYW5kIGdzZWQuCisjIFRoZW4gdXNlIHRoYXQgbGlzdCBvZiBzZWQncyBhcyBvbmVzIHRvIHRlc3QgZm9yIHRydW5jYXRpb24uCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBsdF9hY19wcm9nIGluIHNlZCBnc2VkOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCI7IHRoZW4KKyAgICAgICAgbHRfYWNfc2VkX2xpc3Q9IiRsdF9hY19zZWRfbGlzdCAkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgZmkKKyAgICBkb25lCisgIGRvbmUKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKK2x0X2FjX21heD0wCitsdF9hY19jb3VudD0wCisjIEFkZCAvdXNyL3hwZzQvYmluL3NlZCBhcyBpdCBpcyB0eXBpY2FsbHkgZm91bmQgb24gU29sYXJpcworIyBhbG9uZyB3aXRoIC9iaW4vc2VkIHRoYXQgdHJ1bmNhdGVzIG91dHB1dC4KK2ZvciBsdF9hY19zZWQgaW4gJGx0X2FjX3NlZF9saXN0IC91c3IveHBnNC9iaW4vc2VkOyBkbworICB0ZXN0ICEgLWYgJGx0X2FjX3NlZCAmJiBjb250aW51ZQorICBjYXQgL2Rldi9udWxsID4gY29uZnRlc3QuaW4KKyAgbHRfYWNfY291bnQ9MAorICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+Y29uZnRlc3QuaW4KKyAgIyBDaGVjayBmb3IgR05VIHNlZCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICBpZiAiJGx0X2FjX3NlZCIgLS12ZXJzaW9uIDI+JjEgPCAvZGV2L251bGwgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAorICAgIGJyZWFrCisgIGZpCisgIHdoaWxlIHRydWU7IGRvCisgICAgY2F0IGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LmluID5jb25mdGVzdC50bXAKKyAgICBtdiBjb25mdGVzdC50bXAgY29uZnRlc3QuaW4KKyAgICBjcCBjb25mdGVzdC5pbiBjb25mdGVzdC5ubAorICAgIGVjaG8gPj5jb25mdGVzdC5ubAorICAgICRsdF9hY19zZWQgLWUgJ3MvYSQvLycgPCBjb25mdGVzdC5ubCA+Y29uZnRlc3Qub3V0IHx8IGJyZWFrCisgICAgY21wIC1zIGNvbmZ0ZXN0Lm91dCBjb25mdGVzdC5ubCB8fCBicmVhaworICAgICMgMTAwMDAgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICAgIGx0X2FjX2NvdW50PWBleHByICRsdF9hY19jb3VudCArIDFgCisgICAgaWYgdGVzdCAkbHRfYWNfY291bnQgLWd0ICRsdF9hY19tYXg7IHRoZW4KKyAgICAgIGx0X2FjX21heD0kbHRfYWNfY291bnQKKyAgICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKKyAgICBmaQorICBkb25lCitkb25lCitdKQorU0VEPSRsdF9jdl9wYXRoX1NFRAorQUNfU1VCU1QoW1NFRF0pCitBQ19NU0dfUkVTVUxUKFskU0VEXSkKK10pI0FDX1BST0dfU0VECitdKSNtNF9pZm5kZWYKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtMVF9BQ19QUk9HX1NFRF0sIFtBQ19QUk9HX1NFRF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0xUX0FDX1BST0dfU0VEXSwgW10pCisKKworIyBfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpbmQgb3V0IHdoZXRoZXIgdGhlIHNoZWxsIGlzIEJvdXJuZSBvciBYU0kgY29tcGF0aWJsZSwKKyMgb3IgaGFzIHNvbWUgb3RoZXIgdXNlZnVsIGZlYXR1cmVzLgorbTRfZGVmdW4oW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10sCitbQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzXSkKKyMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCit4c2lfc2hlbGw9bm8KKyggX2x0X2R1bW15PSJhL2IvYyIKKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKyAgICAgID0gYyxhL2IsLCBcCisgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICYmIHhzaV9zaGVsbD15ZXMKK0FDX01TR19SRVNVTFQoWyR4c2lfc2hlbGxdKQorX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW3hzaV9zaGVsbD0nJHhzaV9zaGVsbCddKQorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzICIrPSJdKQorbHRfc2hlbGxfYXBwZW5kPW5vCisoIGZvbz1iYXI7IHNldCBmb28gYmF6OyBldmFsICIkWzFdKz1cJFsyXSIgJiYgdGVzdCAiJGZvbyIgPSBiYXJiYXogKSBcCisgICAgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgbHRfc2hlbGxfYXBwZW5kPXllcworQUNfTVNHX1JFU1VMVChbJGx0X3NoZWxsX2FwcGVuZF0pCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbbHRfc2hlbGxfYXBwZW5kPSckbHRfc2hlbGxfYXBwZW5kJ10pCisKK2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBsdF91bnNldD11bnNldAorZWxzZQorICBsdF91bnNldD1mYWxzZQorZmkKK19MVF9ERUNMKFtdLCBbbHRfdW5zZXRdLCBbMF0sIFt3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyAidW5zZXQiXSlkbmwKKworIyB0ZXN0IEVCQ0RJQyBvciBBU0NJSQorY2FzZSBgZWNobyBYfHRyIFggJ1wxMDEnYCBpbgorIEEpICMgQVNDSUkgYmFzZWQgc3lzdGVtCisgICAgIyBcbiBpcyBub3QgaW50ZXJwcmV0ZWQgY29ycmVjdGx5IGJ5IFNvbGFyaXMgOCAvdXNyL3VjYi90cgorICBsdF9TUDJOTD0ndHIgXDA0MCBcMDEyJworICBsdF9OTDJTUD0ndHIgXDAxNVwwMTIgXDA0MFwwNDAnCisgIDs7CisgKikgIyBFQkNESUMgYmFzZWQgc3lzdGVtCisgIGx0X1NQMk5MPSd0ciBcMTAwIFxuJworICBsdF9OTDJTUD0ndHIgXHJcbiBcMTAwXDEwMCcKKyAgOzsKK2VzYWMKK19MVF9ERUNMKFtTUDJOTF0sIFtsdF9TUDJOTF0sIFsxXSwgW3R1cm4gc3BhY2VzIGludG8gbmV3bGluZXNdKWRubAorX0xUX0RFQ0woW05MMlNQXSwgW2x0X05MMlNQXSwgWzFdLCBbdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlc10pZG5sCitdKSMgX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTCisKKworIyBfTFRfUFJPR19YU0lfU0hFTExGTlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEJvdXJuZSBhbmQgWFNJIGNvbXBhdGlibGUgdmFyaWFudHMgb2Ygc29tZSB1c2VmdWwgc2hlbGwgZnVuY3Rpb25zLgorbTRfZGVmdW4oW19MVF9QUk9HX1hTSV9TSEVMTEZOU10sCitbY2FzZSAkeHNpX3NoZWxsIGluCisgIHllcykKKyAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorCisjIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKyMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKyMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorZnVuY19kaXJuYW1lICgpCit7CisgIGNhc2UgJHsxfSBpbgorICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CisgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworICBlc2FjCit9CisKKyMgZnVuY19iYXNlbmFtZSBmaWxlCitmdW5jX2Jhc2VuYW1lICgpCit7CisgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKK30KKworIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorIyBjYWxsOgorIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKyMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisjIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKyMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKyMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQoreworICBjYXNlICR7MX0gaW4KKyAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKyAgZXNhYworICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCit9CisKKyMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCisjIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorZnVuY19zdHJpcG5hbWUgKCkKK3sKKyAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCisgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CisgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CisgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9Cit9CisKKyMgZnVuY19vcHRfc3BsaXQKK2Z1bmNfb3B0X3NwbGl0ICgpCit7CisgIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQorfQorCisjIGZ1bmNfbG8ybyBvYmplY3QKK2Z1bmNfbG8ybyAoKQoreworICBjYXNlICR7MX0gaW4KKyAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworICBlc2FjCit9CisKKyMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCitmdW5jX3hmb3JtICgpCit7CisgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KK30KKworIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorZnVuY19hcml0aCAoKQoreworICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJFsqXSApKQorfQorCisjIGZ1bmNfbGVuIHN0cmluZworIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorZnVuY19sZW4gKCkKK3sKKyAgZnVuY19sZW5fcmVzdWx0PSR7IzF9Cit9CisKK19MVF9FT0YKKyAgICA7OworICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KKyAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorCisjIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKyMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKyMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorZnVuY19kaXJuYW1lICgpCit7CisgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKKyAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorICBlbHNlCisgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorICBmaQorfQorCisjIGZ1bmNfYmFzZW5hbWUgZmlsZQorZnVuY19iYXNlbmFtZSAoKQoreworICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKK30KKworZG5sIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUKK2RubCBBIHBvcnRhYmxlIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiBpcyBhbHJlYWR5IGRlZmluZWQgaW4gZ2VuZXJhbC5tNHNoCitkbmwgc28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgaXQgaGVyZS4KKworIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKyMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCisjIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCisjIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCisjIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCitmdW5jX3N0cmlwbmFtZSAoKQoreworICBjYXNlICR7Mn0gaW4KKyAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKyAgZXNhYworfQorCisjIHNlZCBzY3JpcHRzOgorbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtW1tePV1dKlwpPS4qL1wxLztxJworbXlfc2VkX2xvbmdfYXJnPScxcy9eLVtbXj1dXSo9Ly8nCisKKyMgZnVuY19vcHRfc3BsaXQKK2Z1bmNfb3B0X3NwbGl0ICgpCit7CisgIGZ1bmNfb3B0X3NwbGl0X29wdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCisgIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCit9CisKKyMgZnVuY19sbzJvIG9iamVjdAorZnVuY19sbzJvICgpCit7CisgIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKK30KKworIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKK2Z1bmNfeGZvcm0gKCkKK3sKKyAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bW14uXV0qJC8ubG8vJ2AKK30KKworIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorZnVuY19hcml0aCAoKQoreworICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJFtAXSJgCit9CisKKyMgZnVuY19sZW4gc3RyaW5nCisjIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCitmdW5jX2xlbiAoKQoreworICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiRbMV0iIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKK30KKworX0xUX0VPRgorZXNhYworCitjYXNlICRsdF9zaGVsbF9hcHBlbmQgaW4KKyAgeWVzKQorICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisKKyMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCisjIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KK2Z1bmNfYXBwZW5kICgpCit7CisgIGV2YWwgIiRbMV0rPVwkWzJdIgorfQorX0xUX0VPRgorICAgIDs7CisgICopCisgICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKworIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKyMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorZnVuY19hcHBlbmQgKCkKK3sKKyAgZXZhbCAiJFsxXT1cJCRbMV1cJFsyXSIKK30KKworX0xUX0VPRgorICAgIDs7CisgIGVzYWMKK10pCmRpZmYgLS1naXQgYS9zaGFyZS9hY2xvY2FsL2x0ZGwubTQgYi9zaGFyZS9hY2xvY2FsL2x0ZGwubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNkZTEyYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2FjbG9jYWwvbHRkbC5tNApAQCAtMCwwICsxLDgwNSBAQAorIyBsdGRsLm00IC0gQ29uZmlndXJlIGx0ZGwgZm9yIHRoZSB0YXJnZXQgc3lzdGVtLiAtKi1BdXRvY29uZi0qLQorIworIyAgIENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgVGhvbWFzIFRhbm5lciwgMTk5OQorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDE4IExURExfSU5JVAorCisjIExUX0NPTkZJR19MVERMX0RJUihESVJFQ1RPUlksIFtMVERMLU1PREVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRElSRUNUT1JZIGNvbnRhaW5zIHRoZSBsaWJsdGRsIHNvdXJjZXMuICBJdCBpcyBva2F5IHRvIGNhbGwgdGhpcworIyBmdW5jdGlvbiBtdWx0aXBsZSB0aW1lcywgYXMgbG9uZyBhcyB0aGUgc2FtZSBESVJFQ1RPUlkgaXMgYWx3YXlzIGdpdmVuLgorQUNfREVGVU4oW0xUX0NPTkZJR19MVERMX0RJUl0sCitbQUNfQkVGT1JFKFskMF0sIFtMVERMX0lOSVRdKQorXyQwKCQqKQorXSkjIExUX0NPTkZJR19MVERMX0RJUgorCisjIFdlIGJyZWFrIHRoaXMgb3V0IGludG8gYSBzZXBhcmF0ZSBtYWNybywgc28gdGhhdCB3ZSBjYW4gY2FsbCBpdCBzYWZlbHkKKyMgaW50ZXJuYWxseSB3aXRob3V0IGJlaW5nIGNhdWdodCBhY2NpZGVudGFsbHkgYnkgdGhlIHNlZCBzY2FuIGluIGxpYnRvb2xpemUuCittNF9kZWZ1bihbX0xUX0NPTkZJR19MVERMX0RJUl0sCitbZG5sIHJlbW92ZSB0cmFpbGluZyBzbGFzaGVzCittNF9wdXNoZGVmKFtfQVJHX0RJUl0sIG00X2JwYXRzdWJzdChbJDFdLCBbLyokXSkpCittNF9jYXNlKF9MVERMX0RJUiwKKwlbXSwgW2RubCBvbmx5IHNldCBsdF9sdGRsX2RpciBpZiBfQVJHX0RJUiBpcyBub3Qgc2ltcGx5IGAuJworCSAgICAgbTRfaWYoX0FSR19ESVIsIFsuXSwKKwkgICAgICAgICAgICAgW10sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9ESVJdLCBfQVJHX0RJUikKKwkgICAgICAgICAgX0xUX1NIRUxMX0lOSVQoW2x0X2x0ZGxfZGlyPSddX0FSR19ESVJbJ10pXSldLAorICAgIFttNF9pZihfQVJHX0RJUiwgX0xURExfRElSLAorCSAgICBbXSwKKwlbbTRfZmF0YWwoW211bHRpcGxlIGxpYmx0ZGwgZGlyZWN0b3JpZXM6IGBdX0xURExfRElSWycsIGBdX0FSR19ESVJbJ10pXSldKQorbTRfcG9wZGVmKFtfQVJHX0RJUl0pCitdKSMgX0xUX0NPTkZJR19MVERMX0RJUgorCisjIEluaXRpYWxpc2U6CittNF9kZWZpbmUoW19MVERMX0RJUl0sIFtdKQorCisKKyMgX0xUX0JVSUxEX1BSRUZJWAorIyAtLS0tLS0tLS0tLS0tLS0tCisjIElmIEF1dG9jb25mIGlzIG5ldyBlbm91Z2gsIGV4cGFuZCB0byBgJHt0b3BfYnVpbGRfcHJlZml4fScsIG90aGVyd2lzZQorIyB0byBgJHt0b3BfYnVpbGRkaXJ9LycuCittNF9kZWZpbmUoW19MVF9CVUlMRF9QUkVGSVhdLAorW200X2lmZGVmKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSwKKyAgIFttNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUobTRfZGVmbihbQUNfQVVUT0NPTkZfVkVSU0lPTl0pLCBbMi42Ml0pLAorCSAgWy0xXSwgW200X2lmZGVmKFtfQUNfSEFWRV9UT1BfQlVJTERfUFJFRklYXSwKKwkJCSAgWyR7dG9wX2J1aWxkX3ByZWZpeH1dLAorCQkJICBbJHt0b3BfYnVpbGRkaXJ9L10pXSwKKwkgIFske3RvcF9idWlsZF9wcmVmaXh9XSldLAorICAgWyR7dG9wX2J1aWxkZGlyfS9dKVtdZG5sCitdKQorCisKKyMgTFRETF9DT05WRU5JRU5DRQorIyAtLS0tLS0tLS0tLS0tLS0tCisjIHNldHMgTElCTFRETCB0byB0aGUgbGluayBmbGFncyBmb3IgdGhlIGxpYmx0ZGwgY29udmVuaWVuY2UgbGlicmFyeSBhbmQKKyMgTFRETElOQ0wgdG8gdGhlIGluY2x1ZGUgZmxhZ3MgZm9yIHRoZSBsaWJsdGRsIGhlYWRlciBhbmQgYWRkcworIyAtLWVuYWJsZS1sdGRsLWNvbnZlbmllbmNlIHRvIHRoZSBjb25maWd1cmUgYXJndW1lbnRzLiAgTm90ZSB0aGF0CisjIEFDX0NPTkZJR19TVUJESVJTIGlzIG5vdCBjYWxsZWQgaGVyZS4gIExJQkxUREwgd2lsbCBiZSBwcmVmaXhlZCB3aXRoCisjICcke3RvcF9idWlsZF9wcmVmaXh9JyBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB3aXRoICcke3RvcF9idWlsZGRpcn0vJywKKyMgYW5kIExURExJTkNMIHdpbGwgYmUgcHJlZml4ZWQgd2l0aCAnJHt0b3Bfc3JjZGlyfS8nIChub3RlIHRoZSBzaW5nbGUKKyMgcXVvdGVzISkuICBJZiB5b3VyIHBhY2thZ2UgaXMgbm90IGZsYXQgYW5kIHlvdSdyZSBub3QgdXNpbmcgYXV0b21ha2UsCisjIGRlZmluZSB0b3BfYnVpbGRfcHJlZml4LCB0b3BfYnVpbGRkaXIsIGFuZCB0b3Bfc3JjZGlyIGFwcHJvcHJpYXRlbHkKKyMgaW4geW91ciBNYWtlZmlsZXMuCitBQ19ERUZVTihbTFRETF9DT05WRU5JRU5DRV0sCitbQUNfQkVGT1JFKFskMF0sIFtMVERMX0lOSVRdKWRubAorZG5sIEFsdGhvdWdoIHRoZSBhcmd1bWVudCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9jdW1lbnRlZCwKK2RubCBMVERMX0NPTlZFTklFTkNFIHVzZWQgdG8gdGFrZSBhIERJUkVDVE9SWSBvcmd1bWVudCwgaWYgd2UgaGF2ZSBvbmUKK2RubCBoZXJlIG1ha2Ugc3VyZSBpdCBpcyB0aGUgc2FtZSBhcyBhbnkgb3RoZXIgZGVjbGFyYXRpb24gb2YgbGlibHRkbCdzCitkbmwgbG9jYXRpb24hICBUaGlzIGFsc28gZW5zdXJlcyBsdF9sdGRsX2RpciBpcyBzZXQgd2hlbiBjb25maWd1cmUuYWMgaXMKK2RubCBub3QgeWV0IHVzaW5nIGFuIGV4cGxpY2l0IExUX0NPTkZJR19MVERMX0RJUi4KK200X2lmdmFsKFskMV0sIFtfTFRfQ09ORklHX0xURExfRElSKFskMV0pXSlkbmwKK18kMCgpCitdKSMgTFRETF9DT05WRU5JRU5DRQorCisjIEFDX0xJQkxURExfQ09OVkVOSUVOQ0UgYWNjZXB0ZWQgYSBkaXJlY3RvcnkgYXJndW1lbnQgaW4gb2xkZXIgbGlidG9vbHMsCisjIG5vdyB3ZSBoYXZlIExUX0NPTkZJR19MVERMX0RJUjoKK0FVX0RFRlVOKFtBQ19MSUJMVERMX0NPTlZFTklFTkNFXSwKK1tfTFRfQ09ORklHX0xURExfRElSKFttNF9kZWZhdWx0KFskMV0sIFtsaWJsdGRsXSldKQorX0xURExfQ09OVkVOSUVOQ0VdKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQkxURExfQ09OVkVOSUVOQ0VdLCBbXSkKKworCisjIF9MVERMX0NPTlZFTklFTkNFCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIENvZGUgc2hhcmVkIGJ5IExURExfQ09OVkVOSUVOQ0UgYW5kIExURExfSU5JVChbY29udmVuaWVuY2VdKS4KK200X2RlZnVuKFtfTFRETF9DT05WRU5JRU5DRV0sCitbY2FzZSAkZW5hYmxlX2x0ZGxfY29udmVuaWVuY2UgaW4KKyAgbm8pIEFDX01TR19FUlJPUihbdGhpcyBwYWNrYWdlIG5lZWRzIGEgY29udmVuaWVuY2UgbGlibHRkbF0pIDs7CisgICIiKSBlbmFibGVfbHRkbF9jb252ZW5pZW5jZT15ZXMKKyAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1lbmFibGUtbHRkbC1jb252ZW5pZW5jZSIgOzsKK2VzYWMKK0xJQkxUREw9J19MVF9CVUlMRF9QUkVGSVgnIiR7bHRfbHRkbF9kaXIrJGx0X2x0ZGxfZGlyL31saWJsdGRsYy5sYSIKK0xURExERVBTPSRMSUJMVERMCitMVERMSU5DTD0nLUkke3RvcF9zcmNkaXJ9JyIke2x0X2x0ZGxfZGlyKy8kbHRfbHRkbF9kaXJ9IgorCitBQ19TVUJTVChbTElCTFRETF0pCitBQ19TVUJTVChbTFRETERFUFNdKQorQUNfU1VCU1QoW0xURExJTkNMXSkKKworIyBGb3IgYmFja3dhcmRzIG5vbi1nZXR0ZXh0IGNvbnNpc3RlbnQgY29tcGF0aWJpbGl0eS4uLgorSU5DTFRETD0iJExURExJTkNMIgorQUNfU1VCU1QoW0lOQ0xURExdKQorXSkjIF9MVERMX0NPTlZFTklFTkNFCisKKworIyBMVERMX0lOU1RBTExBQkxFCisjIC0tLS0tLS0tLS0tLS0tLS0KKyMgc2V0cyBMSUJMVERMIHRvIHRoZSBsaW5rIGZsYWdzIGZvciB0aGUgbGlibHRkbCBpbnN0YWxsYWJsZSBsaWJyYXJ5CisjIGFuZCBMVERMSU5DTCB0byB0aGUgaW5jbHVkZSBmbGFncyBmb3IgdGhlIGxpYmx0ZGwgaGVhZGVyIGFuZCBhZGRzCisjIC0tZW5hYmxlLWx0ZGwtaW5zdGFsbCB0byB0aGUgY29uZmlndXJlIGFyZ3VtZW50cy4gIE5vdGUgdGhhdAorIyBBQ19DT05GSUdfU1VCRElSUyBpcyBub3QgY2FsbGVkIGZyb20gaGVyZS4gIElmIGFuIGluc3RhbGxlZCBsaWJsdGRsCisjIGlzIG5vdCBmb3VuZCwgTElCTFRETCB3aWxsIGJlIHByZWZpeGVkIHdpdGggJyR7dG9wX2J1aWxkX3ByZWZpeH0nIGlmCisjIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHdpdGggJyR7dG9wX2J1aWxkZGlyfS8nLCBhbmQgTFRETElOQ0wgd2lsbCBiZQorIyBwcmVmaXhlZCB3aXRoICcke3RvcF9zcmNkaXJ9LycgKG5vdGUgdGhlIHNpbmdsZSBxdW90ZXMhKS4gIElmIHlvdXIKKyMgcGFja2FnZSBpcyBub3QgZmxhdCBhbmQgeW91J3JlIG5vdCB1c2luZyBhdXRvbWFrZSwgZGVmaW5lIHRvcF9idWlsZF9wcmVmaXgsCisjIHRvcF9idWlsZGRpciwgYW5kIHRvcF9zcmNkaXIgYXBwcm9wcmlhdGVseSBpbiB5b3VyIE1ha2VmaWxlcy4KKyMgSW4gdGhlIGZ1dHVyZSwgdGhpcyBtYWNybyBtYXkgaGF2ZSB0byBiZSBjYWxsZWQgYWZ0ZXIgTFRfSU5JVC4KK0FDX0RFRlVOKFtMVERMX0lOU1RBTExBQkxFXSwKK1tBQ19CRUZPUkUoWyQwXSwgW0xURExfSU5JVF0pZG5sCitkbmwgQWx0aG91Z2ggdGhlIGFyZ3VtZW50IGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2N1bWVudGVkLAorZG5sIExURExfSU5TVEFMTEFCTEUgdXNlZCB0byB0YWtlIGEgRElSRUNUT1JZIG9yZ3VtZW50LCBpZiB3ZSBoYXZlIG9uZQorZG5sIGhlcmUgbWFrZSBzdXJlIGl0IGlzIHRoZSBzYW1lIGFzIGFueSBvdGhlciBkZWNsYXJhdGlvbiBvZiBsaWJsdGRsJ3MKK2RubCBsb2NhdGlvbiEgIFRoaXMgYWxzbyBlbnN1cmVzIGx0X2x0ZGxfZGlyIGlzIHNldCB3aGVuIGNvbmZpZ3VyZS5hYyBpcworZG5sIG5vdCB5ZXQgdXNpbmcgYW4gZXhwbGljaXQgTFRfQ09ORklHX0xURExfRElSLgorbTRfaWZ2YWwoWyQxXSwgW19MVF9DT05GSUdfTFRETF9ESVIoWyQxXSldKWRubAorXyQwKCkKK10pIyBMVERMX0lOU1RBTExBQkxFCisKKyMgQUNfTElCTFRETF9JTlNUQUxMQUJMRSBhY2NlcHRlZCBhIGRpcmVjdG9yeSBhcmd1bWVudCBpbiBvbGRlciBsaWJ0b29scywKKyMgbm93IHdlIGhhdmUgTFRfQ09ORklHX0xURExfRElSOgorQVVfREVGVU4oW0FDX0xJQkxURExfSU5TVEFMTEFCTEVdLAorW19MVF9DT05GSUdfTFRETF9ESVIoW200X2RlZmF1bHQoWyQxXSwgW2xpYmx0ZGxdKV0pCitfTFRETF9JTlNUQUxMQUJMRV0pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCTFRETF9JTlNUQUxMQUJMRV0sIFtdKQorCisKKyMgX0xURExfSU5TVEFMTEFCTEUKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29kZSBzaGFyZWQgYnkgTFRETF9JTlNUQUxMQUJMRSBhbmQgTFRETF9JTklUKFtpbnN0YWxsYWJsZV0pLgorbTRfZGVmdW4oW19MVERMX0lOU1RBTExBQkxFXSwKK1tpZiB0ZXN0IC1mICRwcmVmaXgvbGliL2xpYmx0ZGwubGE7IHRoZW4KKyAgbHRfc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgTERGTEFHUz0iLUwkcHJlZml4L2xpYiAkTERGTEFHUyIKKyAgQUNfQ0hFQ0tfTElCKFtsdGRsXSwgW2x0X2RsaW5pdF0sIFtsdF9saWJfbHRkbD15ZXNdKQorICBMREZMQUdTPSIkbHRfc2F2ZV9MREZMQUdTIgorICBpZiB0ZXN0IHgiJHtsdF9saWJfbHRkbC1ub30iID0geHllczsgdGhlbgorICAgIGlmIHRlc3QgeCIkZW5hYmxlX2x0ZGxfaW5zdGFsbCIgIT0geHllczsgdGhlbgorICAgICAgIyBEb24ndCBvdmVyd3JpdGUgJHByZWZpeC9saWIvbGlibHRkbC5sYSB3aXRob3V0IC0tZW5hYmxlLWx0ZGwtaW5zdGFsbAorICAgICAgQUNfTVNHX1dBUk4oW25vdCBvdmVyd3JpdGluZyBsaWJsdGRsIGF0ICRwcmVmaXgsIGZvcmNlIHdpdGggYC0tZW5hYmxlLWx0ZGwtaW5zdGFsbCddKQorICAgICAgZW5hYmxlX2x0ZGxfaW5zdGFsbD1ubworICAgIGZpCisgIGVsaWYgdGVzdCB4IiRlbmFibGVfbHRkbF9pbnN0YWxsIiA9IHhubzsgdGhlbgorICAgIEFDX01TR19XQVJOKFtsaWJsdGRsIG5vdCBpbnN0YWxsZWQsIGJ1dCBpbnN0YWxsYXRpb24gZGlzYWJsZWRdKQorICBmaQorZmkKKworIyBJZiBjb25maWd1cmUuYWMgZGVjbGFyZWQgYW4gaW5zdGFsbGFibGUgbHRkbCwgYW5kIHRoZSB1c2VyIGRpZG4ndCBvdmVycmlkZQorIyB3aXRoIC0tZGlzYWJsZS1sdGRsLWluc3RhbGwsIHdlIHdpbGwgaW5zdGFsbCB0aGUgc2hpcHBlZCBsaWJsdGRsLgorY2FzZSAkZW5hYmxlX2x0ZGxfaW5zdGFsbCBpbgorICBubykgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAtLWVuYWJsZS1sdGRsLWluc3RhbGw9bm8iCisgICAgICBMSUJMVERMPSItbGx0ZGwiCisgICAgICBMVERMREVQUz0KKyAgICAgIExURExJTkNMPQorICAgICAgOzsKKyAgKikgIGVuYWJsZV9sdGRsX2luc3RhbGw9eWVzCisgICAgICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzIC0tZW5hYmxlLWx0ZGwtaW5zdGFsbCIKKyAgICAgIExJQkxUREw9J19MVF9CVUlMRF9QUkVGSVgnIiR7bHRfbHRkbF9kaXIrJGx0X2x0ZGxfZGlyL31saWJsdGRsLmxhIgorICAgICAgTFRETERFUFM9JExJQkxUREwKKyAgICAgIExURExJTkNMPSctSSR7dG9wX3NyY2Rpcn0nIiR7bHRfbHRkbF9kaXIrLyRsdF9sdGRsX2Rpcn0iCisgICAgICA7OworZXNhYworCitBQ19TVUJTVChbTElCTFRETF0pCitBQ19TVUJTVChbTFRETERFUFNdKQorQUNfU1VCU1QoW0xURExJTkNMXSkKKworIyBGb3IgYmFja3dhcmRzIG5vbi1nZXR0ZXh0IGNvbnNpc3RlbnQgY29tcGF0aWJpbGl0eS4uLgorSU5DTFRETD0iJExURExJTkNMIgorQUNfU1VCU1QoW0lOQ0xURExdKQorXSkjIExURExfSU5TVEFMTEFCTEUKKworCisjIF9MVERMX01PREVfRElTUEFUQ0gKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRETF9NT0RFX0RJU1BBVENIXSwKK1tkbmwgSWYgX0xURExfRElSIGlzIGAuJywgdGhlbiB3ZSBhcmUgY29uZmlndXJpbmcgbGlibHRkbCBpdHNlbGY6CittNF9pZihfTFRETF9ESVIsIFtdLAorCVtdLAorICAgIGRubCBpZiBfTFRETF9NT0RFIHdhcyBub3Qgc2V0IGFscmVhZHksIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGBzdWJwcm9qZWN0JzoKKyAgICBbbTRfY2FzZShtNF9kZWZhdWx0KF9MVERMX01PREUsIFtzdWJwcm9qZWN0XSksCisJICBbc3VicHJvamVjdF0sIFtBQ19DT05GSUdfU1VCRElSUyhfTFRETF9ESVIpCisJCQkgIF9MVF9TSEVMTF9JTklUKFtsdF9kbG9wZW5fZGlyPSIkbHRfbHRkbF9kaXIiXSldLAorCSAgW25vbnJlY3Vyc2l2ZV0sIFtfTFRfU0hFTExfSU5JVChbbHRfZGxvcGVuX2Rpcj0iJGx0X2x0ZGxfZGlyIjsgbHRfbGlib2JqX3ByZWZpeD0iJGx0X2x0ZGxfZGlyLyJdKV0sCisJICBbcmVjdXJzaXZlXSwgW10sCisJW200X2ZhdGFsKFt1bmtub3duIGxpYmx0ZGwgbW9kZTogXV9MVERMX01PREUpXSldKWRubAorZG5sIEJlIGNhcmVmdWwgbm90IHRvIGV4cGFuZCB0d2ljZToKK200X2RlZmluZShbJDBdLCBbXSkKK10pIyBfTFRETF9NT0RFX0RJU1BBVENICisKKworIyBfTFRfTElCT0JKKE1PRFVMRV9OQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWtlIEFDX0xJQk9CSiwgZXhjZXB0IHRoYXQgTU9EVUxFX05BTUUgZ29lcyBpbnRvIF9MVF9MSUJPQkpTIGluc3RlYWQKKyMgb2YgaW50byBMSUJPQkpTLgorQUNfREVGVU4oW19MVF9MSUJPQkpdLCBbCisgIG00X3BhdHRlcm5fYWxsb3coW15fTFRfTElCT0JKUyRdKQorICBfTFRfTElCT0JKUz0iJF9MVF9MSUJPQkpTICQxLiRhY19vYmpleHQiCitdKSMgX0xUX0xJQk9CSlMKKworCisjIExURExfSU5JVChbT1BUSU9OU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENsaWVudHMgb2YgbGlibHRkbCBjYW4gdXNlIHRoaXMgbWFjcm8gdG8gYWxsb3cgdGhlIGluc3RhbGxlciB0bworIyBjaG9vc2UgYmV0d2VlbiBhIHNoaXBwZWQgY29weSBvZiB0aGUgbHRkbCBzb3VyY2VzIG9yIGEgcHJlaW5zdGFsbGVkCisjIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuICBJZiB0aGUgc2hpcHBlZCBsdGRsIHNvdXJjZXMgYXJlIG5vdCBpbiBhCisjIHN1YmRpcmVjdG9yeSBuYW1lZCBsaWJsdGRsLCB0aGUgZGlyZWN0b3J5IG5hbWUgbXVzdCBiZSBnaXZlbiBieQorIyBMVF9DT05GSUdfTFRETF9ESVIuCitBQ19ERUZVTihbTFRETF9JTklUXSwKK1tkbmwgUGFyc2UgT1BUSU9OUworX0xUX1NFVF9PUFRJT05TKFskMF0sIFskMV0pCisKK2RubCBXZSBuZWVkIHRvIGtlZXAgb3VyIG93biBsaXN0IG9mIGxpYm9ianMgc2VwYXJhdGUgZnJvbSBvdXIgcGFyZW50IHByb2plY3QsCitkbmwgYW5kIHRoZSBlYXNpZXN0IHdheSB0byBkbyB0aGF0IGlzIHJlZGVmaW5lIHRoZSBBQ19MSUJPQkpzIG1hY3JvIHdoaWxlCitkbmwgd2UgbG9vayBmb3Igb3VyIG93biBMSUJPQkpzLgorbTRfcHVzaGRlZihbQUNfTElCT0JKXSwgbTRfZGVmbihbX0xUX0xJQk9CSl0pKQorbTRfcHVzaGRlZihbQUNfTElCU09VUkNFU10pCisKK2RubCBJZiBub3Qgb3RoZXJ3aXNlIGRlZmluZWQsIGRlZmF1bHQgdG8gdGhlIDEuNS54IGNvbXBhdGlibGUgc3VicHJvamVjdCBtb2RlOgorbTRfaWYoX0xURExfTU9ERSwgW10sCisgICAgICAgIFttNF9kZWZpbmUoW19MVERMX01PREVdLCBtNF9kZWZhdWx0KFskMl0sIFtzdWJwcm9qZWN0XSkpCisgICAgICAgIG00X2lmKFstMV0sIFttNF9icmVnZXhwKF9MVERMX01PREUsIFtcKHN1YnByb2plY3RcfFwobm9uXCk/cmVjdXJzaXZlXCldKV0sCisgICAgICAgICAgICAgICAgW200X2ZhdGFsKFt1bmtub3duIGxpYmx0ZGwgbW9kZTogXV9MVERMX01PREUpXSldKQorCitBQ19BUkdfV0lUSChbaW5jbHVkZWRfbHRkbF0sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtaW5jbHVkZWQtbHRkbF0sCisgICAgICAgICAgICAgICAgICAgIFt1c2UgdGhlIEdOVSBsdGRsIHNvdXJjZXMgaW5jbHVkZWQgaGVyZV0pXSkKKworaWYgdGVzdCAieCR3aXRoX2luY2x1ZGVkX2x0ZGwiICE9IHh5ZXM7IHRoZW4KKyAgIyBXZSBhcmUgbm90IGJlaW5nIGZvcmNlZCB0byB1c2UgdGhlIGluY2x1ZGVkIGxpYmx0ZGwgc291cmNlcywgc28KKyAgIyBkZWNpZGUgd2hldGhlciB0aGVyZSBpcyBhIHVzZWZ1bCBpbnN0YWxsZWQgdmVyc2lvbiB3ZSBjYW4gdXNlLgorICBBQ19DSEVDS19IRUFERVIoW2x0ZGwuaF0sCisgICAgICBbQUNfQ0hFQ0tfREVDTChbbHRfZGxpbnRlcmZhY2VfcmVnaXN0ZXJdLAorCSAgIFtBQ19DSEVDS19MSUIoW2x0ZGxdLCBbbHRfZGxhZHZpc2VfcHJlbG9hZF0sCisJICAgICAgIFt3aXRoX2luY2x1ZGVkX2x0ZGw9bm9dLAorCSAgICAgICBbd2l0aF9pbmNsdWRlZF9sdGRsPXllc10pXSwKKwkgICBbd2l0aF9pbmNsdWRlZF9sdGRsPXllc10sCisJICAgW0FDX0lOQ0xVREVTX0RFRkFVTFQKKwkgICAgI2luY2x1ZGUgPGx0ZGwuaD5dKV0sCisgICAgICBbd2l0aF9pbmNsdWRlZF9sdGRsPXllc10sCisgICAgICBbQUNfSU5DTFVERVNfREVGQVVMVF0KKyAgKQorZmkKKworZG5sIElmIG5laXRoZXIgTFRfQ09ORklHX0xURExfRElSLCBMVERMX0NPTlZFTklFTkNFIG5vciBMVERMX0lOU1RBTExBQkxFCitkbmwgd2FzIGNhbGxlZCB5ZXQsIHRoZW4gZm9yIG9sZCB0aW1lcycgc2FrZSwgd2UgYXNzdW1lIGxpYmx0ZGwgaXMgaW4gYW4KK2RubCBlcG9ueW1vdXMgZGlyZWN0b3J5OgorQUNfUFJPVklERV9JRkVMU0UoW0xUX0NPTkZJR19MVERMX0RJUl0sIFtdLCBbX0xUX0NPTkZJR19MVERMX0RJUihbbGlibHRkbF0pXSkKKworQUNfQVJHX1dJVEgoW2x0ZGxfaW5jbHVkZV0sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtbHRkbC1pbmNsdWRlPURJUl0sCisgICAgICAgICAgICAgICAgICAgIFt1c2UgdGhlIGx0ZGwgaGVhZGVycyBpbnN0YWxsZWQgaW4gRElSXSldKQorCitpZiB0ZXN0IC1uICIkd2l0aF9sdGRsX2luY2x1ZGUiOyB0aGVuCisgIGlmIHRlc3QgLWYgIiR3aXRoX2x0ZGxfaW5jbHVkZS9sdGRsLmgiOyB0aGVuIDoKKyAgZWxzZQorICAgIEFDX01TR19FUlJPUihbaW52YWxpZCBsdGRsIGluY2x1ZGUgZGlyZWN0b3J5OiBgJHdpdGhfbHRkbF9pbmNsdWRlJ10pCisgIGZpCitlbHNlCisgIHdpdGhfbHRkbF9pbmNsdWRlPW5vCitmaQorCitBQ19BUkdfV0lUSChbbHRkbF9saWJdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLWx0ZGwtbGliPURJUl0sCisgICAgICAgICAgICAgICAgICAgIFt1c2UgdGhlIGxpYmx0ZGwubGEgaW5zdGFsbGVkIGluIERJUl0pXSkKKworaWYgdGVzdCAtbiAiJHdpdGhfbHRkbF9saWIiOyB0aGVuCisgIGlmIHRlc3QgLWYgIiR3aXRoX2x0ZGxfbGliL2xpYmx0ZGwubGEiOyB0aGVuIDoKKyAgZWxzZQorICAgIEFDX01TR19FUlJPUihbaW52YWxpZCBsdGRsIGxpYnJhcnkgZGlyZWN0b3J5OiBgJHdpdGhfbHRkbF9saWInXSkKKyAgZmkKK2Vsc2UKKyAgd2l0aF9sdGRsX2xpYj1ubworZmkKKworY2FzZSAsJHdpdGhfaW5jbHVkZWRfbHRkbCwkd2l0aF9sdGRsX2luY2x1ZGUsJHdpdGhfbHRkbF9saWIsIGluCisgICx5ZXMsbm8sbm8sKQorCW00X2Nhc2UobTRfZGVmYXVsdChfTFRETF9UWVBFLCBbY29udmVuaWVuY2VdKSwKKwkgICAgW2NvbnZlbmllbmNlXSwgW19MVERMX0NPTlZFTklFTkNFXSwKKwkgICAgW2luc3RhbGxhYmxlXSwgW19MVERMX0lOU1RBTExBQkxFXSwKKwkgIFttNF9mYXRhbChbdW5rbm93biBsaWJsdGRsIGJ1aWxkIHR5cGU6IF1fTFRETF9UWVBFKV0pCisJOzsKKyAgLG5vLG5vLG5vLCkKKwkjIElmIHRoZSBpbmNsdWRlZCBsdGRsIGlzIG5vdCB0byBiZSB1c2VkLCB0aGVuIHVzZSB0aGUKKwkjIHByZWluc3RhbGxlZCBsaWJsdGRsIHdlIGZvdW5kLgorCUFDX0RFRklORShbSEFWRV9MVERMXSwgWzFdLAorCSAgW0RlZmluZSB0aGlzIGlmIGEgbW9kZXJuIGxpYmx0ZGwgaXMgYWxyZWFkeSBpbnN0YWxsZWRdKQorCUxJQkxUREw9LWxsdGRsCisJTFRETERFUFM9CisJTFRETElOQ0w9CisJOzsKKyAgLG5vKixubywqKQorCUFDX01TR19FUlJPUihbYC0td2l0aC1sdGRsLWluY2x1ZGUnIGFuZCBgLS13aXRoLWx0ZGwtbGliJyBvcHRpb25zIG11c3QgYmUgdXNlZCB0b2dldGhlcl0pCisJOzsKKyAgKikJd2l0aF9pbmNsdWRlZF9sdGRsPW5vCisJTElCTFRETD0iLUwkd2l0aF9sdGRsX2xpYiAtbGx0ZGwiCisJTFRETERFUFM9CisJTFRETElOQ0w9Ii1JJHdpdGhfbHRkbF9pbmNsdWRlIgorCTs7Citlc2FjCitJTkNMVERMPSIkTFRETElOQ0wiCisKKyMgUmVwb3J0IG91ciBkZWNpc2lvbi4uLgorQUNfTVNHX0NIRUNLSU5HKFt3aGVyZSB0byBmaW5kIGxpYmx0ZGwgaGVhZGVyc10pCitBQ19NU0dfUkVTVUxUKFskTFRETElOQ0xdKQorQUNfTVNHX0NIRUNLSU5HKFt3aGVyZSB0byBmaW5kIGxpYmx0ZGwgbGlicmFyeV0pCitBQ19NU0dfUkVTVUxUKFskTElCTFRETF0pCisKK19MVERMX1NFVFVQCisKK2RubCByZXN0b3JlIGF1dG9jb25mIGRlZmluaXRpb24uCittNF9wb3BkZWYoW0FDX0xJQk9CSl0pCittNF9wb3BkZWYoW0FDX0xJQlNPVVJDRVNdKQorCitBQ19DT05GSUdfQ09NTUFORFNfUFJFKFsKKyAgICBfbHRkbF9saWJvYmpzPQorICAgIF9sdGRsX2x0bGlib2Jqcz0KKyAgICBpZiB0ZXN0IC1uICIkX0xUX0xJQk9CSlMiOyB0aGVuCisgICAgICAjIFJlbW92ZSB0aGUgZXh0ZW5zaW9uLgorICAgICAgX2x0X3NlZF9kcm9wX29iamV4dD0ncy9cLm8kLy87cy9cLm9iaiQvLycKKyAgICAgIGZvciBpIGluIGBmb3IgaSBpbiAkX0xUX0xJQk9CSlM7IGRvIGVjaG8gIiRpIjsgZG9uZSB8IHNlZCAiJF9sdF9zZWRfZHJvcF9vYmpleHQiIHwgc29ydCAtdWA7IGRvCisgICAgICAgIF9sdGRsX2xpYm9ianM9IiRfbHRkbF9saWJvYmpzICRsdF9saWJvYmpfcHJlZml4JGkuJGFjX29iamV4dCIKKyAgICAgICAgX2x0ZGxfbHRsaWJvYmpzPSIkX2x0ZGxfbHRsaWJvYmpzICRsdF9saWJvYmpfcHJlZml4JGkubG8iCisgICAgICBkb25lCisgICAgZmkKKyAgICBBQ19TVUJTVChbbHRkbF9MSUJPQkpTXSwgWyRfbHRkbF9saWJvYmpzXSkKKyAgICBBQ19TVUJTVChbbHRkbF9MVExJQk9CSlNdLCBbJF9sdGRsX2x0bGlib2Jqc10pCitdKQorCisjIE9ubHkgZXhwYW5kIG9uY2U6CittNF9kZWZpbmUoW0xURExfSU5JVF0pCitdKSMgTFRETF9JTklUCisKKyMgT2xkIG5hbWVzOgorQVVfREVGVU4oW0FDX0xJQl9MVERMXSwgW0xURExfSU5JVCgkQCldKQorQVVfREVGVU4oW0FDX1dJVEhfTFRETF0sIFtMVERMX0lOSVQoJEApXSkKK0FVX0RFRlVOKFtMVF9XSVRIX0xURExdLCBbTFRETF9JTklUKCRAKV0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQl9MVERMXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX1dJVEhfTFRETF0sIFtdKQorZG5sIEFDX0RFRlVOKFtMVF9XSVRIX0xURExdLCBbXSkKKworCisjIF9MVERMX1NFVFVQCisjIC0tLS0tLS0tLS0tCisjIFBlcmZvcm0gYWxsIHRoZSBjaGVja3MgbmVjZXNzYXJ5IGZvciBjb21waWxhdGlvbiBvZiB0aGUgbHRkbCBvYmplY3RzCisjICAtLSBpbmNsdWRpbmcgY29tcGlsZXIgY2hlY2tzIGFuZCBoZWFkZXIgY2hlY2tzLiAgVGhpcyBpcyBhIHB1YmxpYworIyBpbnRlcmZhY2UgIG1haW5seSBmb3IgdGhlIGJlbmVmaXQgb2YgbGlibHRkbCdzIG93biBjb25maWd1cmUuYWMsIG1vc3QKKyMgb3RoZXIgdXNlcnMgc2hvdWxkIGNhbGwgTFRETF9JTklUIGluc3RlYWQuCitBQ19ERUZVTihbX0xURExfU0VUVVBdLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfUkVRVUlSRShbTFRfU1lTX01PRFVMRV9FWFRdKWRubAorQUNfUkVRVUlSRShbTFRfU1lTX01PRFVMRV9QQVRIXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1NZU19ETFNFQVJDSF9QQVRIXSlkbmwKK0FDX1JFUVVJUkUoW0xUX0xJQl9ETExPQURdKWRubAorQUNfUkVRVUlSRShbTFRfU1lTX1NZTUJPTF9VU0NPUkVdKWRubAorQUNfUkVRVUlSRShbTFRfRlVOQ19ETFNZTV9VU0NPUkVdKWRubAorQUNfUkVRVUlSRShbTFRfU1lTX0RMT1BFTl9ERVBMSUJTXSlkbmwKK0FDX1JFUVVJUkUoW2dsX0ZVTkNfQVJHWl0pZG5sCisKK200X3JlcXVpcmUoW19MVF9DSEVDS19PQkpESVJdKWRubAorbTRfcmVxdWlyZShbX0xUX0hFQURFUl9ETEZDTl0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfRExQUkVPUEVOXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCisKK2RubCBEb24ndCByZXF1aXJlIHRoaXMsIG9yIGl0IHdpbGwgYmUgZXhwYW5kZWQgZWFybGllciB0aGFuIHRoZSBjb2RlCitkbmwgdGhhdCBzZXRzIHRoZSB2YXJpYWJsZXMgaXQgcmVsaWVzIG9uOgorX0xUX0VOQUJMRV9JTlNUQUxMCisKK2RubCBfTFRETF9NT0RFIHNwZWNpZmljIGNvZGUgbXVzdCBiZSBjYWxsZWQgYXQgbGVhc3Qgb25jZToKK19MVERMX01PREVfRElTUEFUQ0gKKworIyBJbiBvcmRlciB0aGF0IGx0ZGwuYyBjYW4gY29tcGlsZSwgZmluZCBvdXQgdGhlIGZpcnN0IEFDX0NPTkZJR19IRUFERVJTCisjIHRoZSB1c2VyIHVzZWQuICBUaGlzIGlzIHNvIHRoYXQgbHRkbC5oIGNhbiBwaWNrIHVwIHRoZSBwYXJlbnQgcHJvamVjdHMKKyMgY29uZmlnLmggZmlsZSwgVGhlIGZpcnN0IGZpbGUgaW4gQUNfQ09ORklHX0hFQURFUlMgbXVzdCBjb250YWluIHRoZQorIyBkZWZpbml0aW9ucyByZXF1aXJlZCBieSBsdGRsLmMuCisjIEZJWE1FOiBSZW1vdmUgdXNlIG9mIHVuZG9jdW1lbnRlZCBBQ19MSVNUX0hFQURFUlMgKDIuNTkgY29tcGF0aWJpbGl0eSkuCitBQ19DT05GSUdfQ09NTUFORFNfUFJFKFtkbmwKK200X3BhdHRlcm5fYWxsb3coW15MVF9DT05GSUdfSCRdKWRubAorbTRfaWZzZXQoW0FIX0hFQURFUl0sCisgICAgW0xUX0NPTkZJR19IPUFIX0hFQURFUl0sCisgICAgW200X2lmc2V0KFtBQ19MSVNUX0hFQURFUlNdLAorCSAgICBbTFRfQ09ORklHX0g9YGVjaG8gIkFDX0xJU1RfSEVBREVSUyIgfCAkU0VEICdzLF5bWyAgICAgIF1dKiwsO3MsW1sgOl1dLiokLCwnYF0sCisJW10pXSldKQorQUNfU1VCU1QoW0xUX0NPTkZJR19IXSkKKworQUNfQ0hFQ0tfSEVBREVSUyhbdW5pc3RkLmggZGwuaCBzeXMvZGwuaCBkbGQuaCBtYWNoLW8vZHlsZC5oIGRpcmVudC5oXSwKKwlbXSwgW10sIFtBQ19JTkNMVURFU19ERUZBVUxUXSkKKworQUNfQ0hFQ0tfRlVOQ1MoW2Nsb3NlZGlyIG9wZW5kaXIgcmVhZGRpcl0sIFtdLCBbQUNfTElCT0JKKFtsdF9fZGlyZW50XSldKQorQUNfQ0hFQ0tfRlVOQ1MoW3N0cmxjYXQgc3RybGNweV0sIFtdLCBbQUNfTElCT0JKKFtsdF9fc3RybF0pXSkKKworbTRfcGF0dGVybl9hbGxvdyhbTFRfTElCRVhUXSlkbmwKK0FDX0RFRklORV9VTlFVT1RFRChbTFRfTElCRVhUXSxbIiRsaWJleHQiXSxbVGhlIGFyY2hpdmUgZXh0ZW5zaW9uXSkKKworbmFtZT1sdGRsCitMVERMT1BFTj1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCitBQ19TVUJTVChbTFRETE9QRU5dKQorXSkjIF9MVERMX1NFVFVQCisKKworIyBfTFRfRU5BQkxFX0lOU1RBTEwKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9FTkFCTEVfSU5TVEFMTF0sCitbQUNfQVJHX0VOQUJMRShbbHRkbC1pbnN0YWxsXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWx0ZGwtaW5zdGFsbF0sIFtpbnN0YWxsIGxpYmx0ZGxdKV0pCisKK2Nhc2UgLCR7ZW5hYmxlX2x0ZGxfaW5zdGFsbH0sJHtlbmFibGVfbHRkbF9jb252ZW5pZW5jZX0gaW4KKyAgKnllcyopIDs7CisgICopIGVuYWJsZV9sdGRsX2NvbnZlbmllbmNlPXllcyA7OworZXNhYworCittNF9pZmRlZihbQU1fQ09ORElUSU9OQUxdLAorW0FNX0NPTkRJVElPTkFMKElOU1RBTExfTFRETCwgdGVzdCB4IiR7ZW5hYmxlX2x0ZGxfaW5zdGFsbC1ub30iICE9IHhubykKKyBBTV9DT05ESVRJT05BTChDT05WRU5JRU5DRV9MVERMLCB0ZXN0IHgiJHtlbmFibGVfbHRkbF9jb252ZW5pZW5jZS1ub30iICE9IHhubyldKQorXSkjIF9MVF9FTkFCTEVfSU5TVEFMTAorCisKKyMgTFRfU1lTX0RMT1BFTl9ERVBMSUJTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX1NZU19ETE9QRU5fREVQTElCU10sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgZGVwbGlicyBhcmUgbG9hZGVkIGJ5IGRsb3Blbl0sCisgIFtsdF9jdl9zeXNfZGxvcGVuX2RlcGxpYnNdLAorICBbIyBQT1JUTUUgZG9lcyB5b3VyIHN5c3RlbSBhdXRvbWF0aWNhbGx5IGxvYWQgZGVwbGlicyBmb3IgZGxvcGVuPworICAjIG9yIGl0cyBsb2dpY2FsIGVxdWl2YWxlbnQgKGUuZy4gc2hsX2xvYWQgZm9yIEhQLVVYIDwgMTEpCisgICMgRm9yIG5vdywgd2UganVzdCBjYXRjaCBPU2VzIHdlIGtub3cgc29tZXRoaW5nIGFib3V0IC0tIGluIHRoZQorICAjIGZ1dHVyZSwgd2UnbGwgdHJ5IHRlc3QgdGhpcyBwcm9ncmFtbWF0aWNhbGx5LgorICBsdF9jdl9zeXNfZGxvcGVuX2RlcGxpYnM9dW5rbm93bgorICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqfGFpeDQuMS4qfGFpeDQuMi4qKQorICAgICMgVW5rbm93biB3aGV0aGVyIHRoaXMgaXMgdHJ1ZSBmb3IgdGhlc2UgdmVyc2lvbnMgb2YgQUlYLCBidXQKKyAgICAjIHdlIHdhbnQgdGhpcyBgY2FzZScgaGVyZSB0byBleHBsaWNpdGx5IGNhdGNoIHRob3NlIHZlcnNpb25zLgorICAgIGx0X2N2X3N5c19kbG9wZW5fZGVwbGlicz11bmtub3duCisgICAgOzsKKyAgYWl4W1s0LTldXSopCisgICAgbHRfY3Zfc3lzX2Rsb3Blbl9kZXBsaWJzPXllcworICAgIDs7CisgIGFtaWdhb3MqKQorICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgcG93ZXJwYykKKyAgICAgIGx0X2N2X3N5c19kbG9wZW5fZGVwbGlicz1ubworICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZGFyd2luKikKKyAgICAjIEFzc3VtaW5nIHRoZSB1c2VyIGhhcyBpbnN0YWxsZWQgYSBsaWJkbCBmcm9tIHNvbWV3aGVyZSwgdGhpcyBpcyB0cnVlCisgICAgIyBJZiB5b3UgYXJlIGxvb2tpbmcgZm9yIG9uZSBodHRwOi8vd3d3Lm9wZW5kYXJ3aW4ub3JnL3Byb2plY3RzL2RsY29tcGF0CisgICAgbHRfY3Zfc3lzX2Rsb3Blbl9kZXBsaWJzPXllcworICAgIDs7CisgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICBsdF9jdl9zeXNfZGxvcGVuX2RlcGxpYnM9eWVzCisgICAgOzsKKyAgZ251KiB8IGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAjIEdOVSBhbmQgaXRzIHZhcmlhbnRzLCB1c2luZyBnbnUgbGQuc28gKEdsaWJjKQorICAgIGx0X2N2X3N5c19kbG9wZW5fZGVwbGlicz15ZXMKKyAgICA7OworICBocHV4MTAqfGhwdXgxMSopCisgICAgbHRfY3Zfc3lzX2Rsb3Blbl9kZXBsaWJzPXllcworICAgIDs7CisgIGludGVyaXgqKQorICAgIGx0X2N2X3N5c19kbG9wZW5fZGVwbGlicz15ZXMKKyAgICA7OworICBpcml4W1sxMjM0NV1dKnxpcml4Ni5bWzAxXV0qKQorICAgICMgQ2F0Y2ggYWxsIHZlcnNpb25zIG9mIElSSVggYmVmb3JlIDYuMiwgYW5kIGluZGljYXRlIHRoYXQgd2UgZG9uJ3QKKyAgICAjIGtub3cgaG93IGl0IHdvcmtlZCBmb3IgYW55IG9mIHRob3NlIHZlcnNpb25zLgorICAgIGx0X2N2X3N5c19kbG9wZW5fZGVwbGlicz11bmtub3duCisgICAgOzsKKyAgaXJpeCopCisgICAgIyBUaGUgY2FzZSBhYm92ZSBjYXRjaGVzIGFueXRoaW5nIGJlZm9yZSA2LjIsIGFuZCBpdCdzIGtub3duIHRoYXQKKyAgICAjIGF0IDYuMiBhbmQgbGF0ZXIgZGxvcGVuIGRvZXMgbG9hZCBkZXBsaWJzLgorICAgIGx0X2N2X3N5c19kbG9wZW5fZGVwbGlicz15ZXMKKyAgICA7OworICBuZXRic2QqKQorICAgIGx0X2N2X3N5c19kbG9wZW5fZGVwbGlicz15ZXMKKyAgICA7OworICBvcGVuYnNkKikKKyAgICBsdF9jdl9zeXNfZGxvcGVuX2RlcGxpYnM9eWVzCisgICAgOzsKKyAgb3NmW1sxMjM0XV0qKQorICAgICMgZGxvcGVuIGRpZCBsb2FkIGRlcGxpYnMgKGF0IGxlYXN0IGF0IDQueCksIGJ1dCB1bnRpbCB0aGUgNS54IHNlcmllcywKKyAgICAjIGl0IGRpZCAqbm90KiB1c2UgYW4gUlBBVEggaW4gYSBzaGFyZWQgbGlicmFyeSB0byBmaW5kIG9iamVjdHMgdGhlCisgICAgIyBsaWJyYXJ5IGRlcGVuZHMgb24sIHNvIHdlIGV4cGxpY2l0bHkgc2F5IGBubycuCisgICAgbHRfY3Zfc3lzX2Rsb3Blbl9kZXBsaWJzPW5vCisgICAgOzsKKyAgb3NmNS4wfG9zZjUuMGF8b3NmNS4xKQorICAgICMgZGxvcGVuICpkb2VzKiBsb2FkIGRlcGxpYnMgYW5kIHdpdGggdGhlIHJpZ2h0IGxvYWRlciBwYXRjaCBhcHBsaWVkCisgICAgIyBpdCBldmVuIHVzZXMgUlBBVEggaW4gYSBzaGFyZWQgbGlicmFyeSB0byBzZWFyY2ggZm9yIHNoYXJlZCBvYmplY3RzCisgICAgIyB0aGF0IHRoZSBsaWJyYXJ5IGRlcGVuZHMgb24sIGJ1dCB0aGVyZSdzIG5vIGVhc3kgd2F5IHRvIGtub3cgaWYgdGhhdAorICAgICMgcGF0Y2ggaXMgaW5zdGFsbGVkLiAgU2luY2UgdGhpcyBpcyB0aGUgY2FzZSwgYWxsIHdlIGNhbiByZWFsbHkKKyAgICAjIHNheSBpcyB1bmtub3duIC0tIGl0IGRlcGVuZHMgb24gdGhlIHBhdGNoIGJlaW5nIGluc3RhbGxlZC4gIElmCisgICAgIyBpdCBpcywgdGhpcyBjaGFuZ2VzIHRvIGB5ZXMnLiAgV2l0aG91dCBpdCwgaXQgd291bGQgYmUgYG5vJy4KKyAgICBsdF9jdl9zeXNfZGxvcGVuX2RlcGxpYnM9dW5rbm93bgorICAgIDs7CisgIG9zZiopCisgICAgIyB0aGUgdHdvIGNhc2VzIGFib3ZlIHNob3VsZCBjYXRjaCBhbGwgdmVyc2lvbnMgb2Ygb3NmIDw9IDUuMS4gIFJlYWQKKyAgICAjIHRoZSBjb21tZW50cyBhYm92ZSBmb3Igd2hhdCB3ZSBrbm93IGFib3V0IHRoZW0uCisgICAgIyBBdCA+IDUuMSwgZGVwbGlicyBhcmUgbG9hZGVkICphbmQqIGFueSBSUEFUSCBpbiBhIHNoYXJlZCBsaWJyYXJ5CisgICAgIyBpcyB1c2VkIHRvIGZpbmQgdGhlbSBzbyB3ZSBjYW4gZmluYWxseSBzYXkgYHllcycuCisgICAgbHRfY3Zfc3lzX2Rsb3Blbl9kZXBsaWJzPXllcworICAgIDs7CisgIHFueCopCisgICAgbHRfY3Zfc3lzX2Rsb3Blbl9kZXBsaWJzPXllcworICAgIDs7CisgIHNvbGFyaXMqKQorICAgIGx0X2N2X3N5c19kbG9wZW5fZGVwbGlicz15ZXMKKyAgICA7OworICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgICBsaWJsdGRsX2N2X3N5c19kbG9wZW5fZGVwbGlicz15ZXMKKyAgICA7OworICBlc2FjCisgIF0pCitpZiB0ZXN0ICIkbHRfY3Zfc3lzX2Rsb3Blbl9kZXBsaWJzIiAhPSB5ZXM7IHRoZW4KKyBBQ19ERUZJTkUoW0xURExfRExPUEVOX0RFUExJQlNdLCBbMV0sCisgICAgW0RlZmluZSBpZiB0aGUgT1MgbmVlZHMgaGVscCB0byBsb2FkIGRlcGVuZGVudCBsaWJyYXJpZXMgZm9yIGRsb3BlbigpLl0pCitmaQorXSkjIExUX1NZU19ETE9QRU5fREVQTElCUworCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xURExfU1lTX0RMT1BFTl9ERVBMSUJTXSwgW0xUX1NZU19ETE9QRU5fREVQTElCU10pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xURExfU1lTX0RMT1BFTl9ERVBMSUJTXSwgW10pCisKKworIyBMVF9TWVNfTU9EVUxFX0VYVAorIyAtLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX1NZU19NT0RVTEVfRVhUXSwKK1ttNF9yZXF1aXJlKFtfTFRfU1lTX0RZTkFNSUNfTElOS0VSXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFt3aGljaCBleHRlbnNpb24gaXMgdXNlZCBmb3IgcnVudGltZSBsb2FkYWJsZSBtb2R1bGVzXSwKKyAgW2xpYmx0ZGxfY3Zfc2hsaWJleHRdLAorWworbW9kdWxlPXllcworZXZhbCBsaWJsdGRsX2N2X3NobGliZXh0PSRzaHJleHRfY21kcworICBdKQoraWYgdGVzdCAtbiAiJGxpYmx0ZGxfY3Zfc2hsaWJleHQiOyB0aGVuCisgIG00X3BhdHRlcm5fYWxsb3coW0xUX01PRFVMRV9FWFRdKWRubAorICBBQ19ERUZJTkVfVU5RVU9URUQoW0xUX01PRFVMRV9FWFRdLCBbIiRsaWJsdGRsX2N2X3NobGliZXh0Il0sCisgICAgW0RlZmluZSB0byB0aGUgZXh0ZW5zaW9uIHVzZWQgZm9yIHJ1bnRpbWUgbG9hZGFibGUgbW9kdWxlcywgc2F5LCAiLnNvIi5dKQorZmkKK10pIyBMVF9TWVNfTU9EVUxFX0VYVAorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xURExfU0hMSUJFWFRdLCBbTFRfU1lTX01PRFVMRV9FWFRdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MVERMX1NITElCRVhUXSwgW10pCisKKworIyBMVF9TWVNfTU9EVUxFX1BBVEgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfU1lTX01PRFVMRV9QQVRIXSwKK1ttNF9yZXF1aXJlKFtfTFRfU1lTX0RZTkFNSUNfTElOS0VSXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFt3aGljaCB2YXJpYWJsZSBzcGVjaWZpZXMgcnVuLXRpbWUgbW9kdWxlIHNlYXJjaCBwYXRoXSwKKyAgW2x0X2N2X21vZHVsZV9wYXRoX3Zhcl0sIFtsdF9jdl9tb2R1bGVfcGF0aF92YXI9IiRzaGxpYnBhdGhfdmFyIl0pCitpZiB0ZXN0IC1uICIkbHRfY3ZfbW9kdWxlX3BhdGhfdmFyIjsgdGhlbgorICBtNF9wYXR0ZXJuX2FsbG93KFtMVF9NT0RVTEVfUEFUSF9WQVJdKWRubAorICBBQ19ERUZJTkVfVU5RVU9URUQoW0xUX01PRFVMRV9QQVRIX1ZBUl0sIFsiJGx0X2N2X21vZHVsZV9wYXRoX3ZhciJdLAorICAgIFtEZWZpbmUgdG8gdGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHRoYXQgZGV0ZXJtaW5lcyB0aGUgcnVuLXRpbWUgbW9kdWxlIHNlYXJjaCBwYXRoLl0pCitmaQorXSkjIExUX1NZU19NT0RVTEVfUEFUSAorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xURExfU0hMSUJQQVRIXSwgW0xUX1NZU19NT0RVTEVfUEFUSF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xURExfU0hMSUJQQVRIXSwgW10pCisKKworIyBMVF9TWVNfRExTRUFSQ0hfUEFUSAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX1NZU19ETFNFQVJDSF9QQVRIXSwKK1ttNF9yZXF1aXJlKFtfTFRfU1lTX0RZTkFNSUNfTElOS0VSXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgdGhlIGRlZmF1bHQgbGlicmFyeSBzZWFyY2ggcGF0aF0sCisgIFtsdF9jdl9zeXNfZGxzZWFyY2hfcGF0aF0sCisgIFtsdF9jdl9zeXNfZGxzZWFyY2hfcGF0aD0iJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIl0pCitpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX2Rsc2VhcmNoX3BhdGgiOyB0aGVuCisgIHN5c19kbHNlYXJjaF9wYXRoPQorICBmb3IgZGlyIGluICRsdF9jdl9zeXNfZGxzZWFyY2hfcGF0aDsgZG8KKyAgICBpZiB0ZXN0IC16ICIkc3lzX2Rsc2VhcmNoX3BhdGgiOyB0aGVuCisgICAgICBzeXNfZGxzZWFyY2hfcGF0aD0iJGRpciIKKyAgICBlbHNlCisgICAgICBzeXNfZGxzZWFyY2hfcGF0aD0iJHN5c19kbHNlYXJjaF9wYXRoJFBBVEhfU0VQQVJBVE9SJGRpciIKKyAgICBmaQorICBkb25lCisgIG00X3BhdHRlcm5fYWxsb3coW0xUX0RMU0VBUkNIX1BBVEhdKWRubAorICBBQ19ERUZJTkVfVU5RVU9URUQoW0xUX0RMU0VBUkNIX1BBVEhdLCBbIiRzeXNfZGxzZWFyY2hfcGF0aCJdLAorICAgIFtEZWZpbmUgdG8gdGhlIHN5c3RlbSBkZWZhdWx0IGxpYnJhcnkgc2VhcmNoIHBhdGguXSkKK2ZpCitdKSMgTFRfU1lTX0RMU0VBUkNIX1BBVEgKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MVERMX1NZU1NFQVJDSFBBVEhdLCBbTFRfU1lTX0RMU0VBUkNIX1BBVEhdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MVERMX1NZU1NFQVJDSFBBVEhdLCBbXSkKKworCisjIF9MVF9DSEVDS19ETFBSRU9QRU4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DSEVDS19ETFBSRU9QRU5dLAorW200X3JlcXVpcmUoW19MVF9DTURfR0xPQkFMX1NZTUJPTFNdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgbGlidG9vbCBzdXBwb3J0cyAtZGxvcGVuLy1kbHByZW9wZW5dLAorICBbbGlibHRkbF9jdl9wcmVsb2FkZWRfc3ltYm9sc10sCisgIFtpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKyAgICBsaWJsdGRsX2N2X3ByZWxvYWRlZF9zeW1ib2xzPXllcworICBlbHNlCisgICAgbGlibHRkbF9jdl9wcmVsb2FkZWRfc3ltYm9scz1ubworICBmaQorICBdKQoraWYgdGVzdCB4IiRsaWJsdGRsX2N2X3ByZWxvYWRlZF9zeW1ib2xzIiA9IHh5ZXM7IHRoZW4KKyAgQUNfREVGSU5FKFtIQVZFX1BSRUxPQURFRF9TWU1CT0xTXSwgWzFdLAorICAgIFtEZWZpbmUgaWYgbGlidG9vbCBjYW4gZXh0cmFjdCBzeW1ib2wgbGlzdHMgZnJvbSBvYmplY3QgZmlsZXMuXSkKK2ZpCitdKSMgX0xUX0NIRUNLX0RMUFJFT1BFTgorCisKKyMgTFRfTElCX0RMTE9BRAorIyAtLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfTElCX0RMTE9BRF0sCitbbTRfcGF0dGVybl9hbGxvdyhbXkxUX0RMTE9BREVSUyRdKQorTFRfRExMT0FERVJTPQorQUNfU1VCU1QoW0xUX0RMTE9BREVSU10pCisKK0FDX0xBTkdfUFVTSChbQ10pCisKK0xJQkFERF9ETE9QRU49CitBQ19TRUFSQ0hfTElCUyhbZGxvcGVuXSwgW2RsXSwKKwlbQUNfREVGSU5FKFtIQVZFX0xJQkRMXSwgWzFdLAorCQkgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBsaWJkbCBsaWJyYXJ5IG9yIGVxdWl2YWxlbnQuXSkKKwlpZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX2Rsb3BlbiIgIT0gIm5vbmUgcmVxdWlyZWQiIDsgdGhlbgorCSAgTElCQUREX0RMT1BFTj0iLWxkbCIKKwlmaQorCWxpYmx0ZGxfY3ZfbGliX2RsX2Rsb3Blbj0ieWVzIgorCUxUX0RMTE9BREVSUz0iJExUX0RMTE9BREVSUyAke2x0X2Rsb3Blbl9kaXIrJGx0X2Rsb3Blbl9kaXIvfWRsb3Blbi5sYSJdLAorICAgIFtBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2lmIEhBVkVfRExGQ05fSAorIyAgaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorICAgIF1dLCBbW2Rsb3BlbigwLCAwKTtdXSldLAorCSAgICBbQUNfREVGSU5FKFtIQVZFX0xJQkRMXSwgWzFdLAorCQkgICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgbGliZGwgbGlicmFyeSBvciBlcXVpdmFsZW50Ll0pCisJICAgIGxpYmx0ZGxfY3ZfZnVuY19kbG9wZW49InllcyIKKwkgICAgTFRfRExMT0FERVJTPSIkTFRfRExMT0FERVJTICR7bHRfZGxvcGVuX2RpciskbHRfZGxvcGVuX2Rpci99ZGxvcGVuLmxhIl0sCisJW0FDX0NIRUNLX0xJQihbc3ZsZF0sIFtkbG9wZW5dLAorCQlbQUNfREVGSU5FKFtIQVZFX0xJQkRMXSwgWzFdLAorCQkJIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGxpYmRsIGxpYnJhcnkgb3IgZXF1aXZhbGVudC5dKQorCSAgICAgICAgTElCQUREX0RMT1BFTj0iLWxzdmxkIiBsaWJsdGRsX2N2X2Z1bmNfZGxvcGVuPSJ5ZXMiCisJCUxUX0RMTE9BREVSUz0iJExUX0RMTE9BREVSUyAke2x0X2Rsb3Blbl9kaXIrJGx0X2Rsb3Blbl9kaXIvfWRsb3Blbi5sYSJdKV0pXSkKK2lmIHRlc3QgeCIkbGlibHRkbF9jdl9mdW5jX2Rsb3BlbiIgPSB4eWVzIHx8IHRlc3QgeCIkbGlibHRkbF9jdl9saWJfZGxfZGxvcGVuIiA9IHh5ZXMKK3RoZW4KKyAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKKyAgTElCUz0iJExJQlMgJExJQkFERF9ETE9QRU4iCisgIEFDX0NIRUNLX0ZVTkNTKFtkbGVycm9yXSkKKyAgTElCUz0iJGx0X3NhdmVfTElCUyIKK2ZpCitBQ19TVUJTVChbTElCQUREX0RMT1BFTl0pCisKK0xJQkFERF9TSExfTE9BRD0KK0FDX0NIRUNLX0ZVTkMoW3NobF9sb2FkXSwKKwlbQUNfREVGSU5FKFtIQVZFX1NITF9MT0FEXSwgWzFdLAorCQkgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzaGxfbG9hZCBmdW5jdGlvbi5dKQorCUxUX0RMTE9BREVSUz0iJExUX0RMTE9BREVSUyAke2x0X2Rsb3Blbl9kaXIrJGx0X2Rsb3Blbl9kaXIvfXNobF9sb2FkLmxhIl0sCisgICAgW0FDX0NIRUNLX0xJQihbZGxkXSwgW3NobF9sb2FkXSwKKwkgICAgW0FDX0RFRklORShbSEFWRV9TSExfTE9BRF0sIFsxXSwKKwkJICAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNobF9sb2FkIGZ1bmN0aW9uLl0pCisJICAgIExUX0RMTE9BREVSUz0iJExUX0RMTE9BREVSUyAke2x0X2Rsb3Blbl9kaXIrJGx0X2Rsb3Blbl9kaXIvfXNobF9sb2FkLmxhIgorCSAgICBMSUJBRERfU0hMX0xPQUQ9Ii1sZGxkIl0pXSkKK0FDX1NVQlNUKFtMSUJBRERfU0hMX0xPQURdKQorCitjYXNlICRob3N0X29zIGluCitkYXJ3aW5bWzE1NjddXS4qKQorIyBXZSBvbmx5IHdhbnQgdGhpcyBmb3IgcHJlLU1hYyBPUyBYIDEwLjQuCisgIEFDX0NIRUNLX0ZVTkMoW19keWxkX2Z1bmNfbG9va3VwXSwKKwlbQUNfREVGSU5FKFtIQVZFX0RZTERdLCBbMV0sCisJCSAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlIF9keWxkX2Z1bmNfbG9va3VwIGZ1bmN0aW9uLl0pCisJTFRfRExMT0FERVJTPSIkTFRfRExMT0FERVJTICR7bHRfZGxvcGVuX2RpciskbHRfZGxvcGVuX2Rpci99ZHlsZC5sYSJdKQorICA7OworYmVvcyopCisgIExUX0RMTE9BREVSUz0iJExUX0RMTE9BREVSUyAke2x0X2Rsb3Blbl9kaXIrJGx0X2Rsb3Blbl9kaXIvfWxvYWRfYWRkX29uLmxhIgorICA7OworY3lnd2luKiB8IG1pbmd3KiB8IG9zMiogfCBwdzMyKikKKyAgQUNfQ0hFQ0tfREVDTFMoW2N5Z3dpbl9jb252X3BhdGhdLCBbXSwgW10sIFtbI2luY2x1ZGUgPHN5cy9jeWd3aW4uaD5dXSkKKyAgTFRfRExMT0FERVJTPSIkTFRfRExMT0FERVJTICR7bHRfZGxvcGVuX2RpciskbHRfZGxvcGVuX2Rpci99bG9hZGxpYnJhcnkubGEiCisgIDs7Citlc2FjCisKK0FDX0NIRUNLX0xJQihbZGxkXSwgW2RsZF9saW5rXSwKKwlbQUNfREVGSU5FKFtIQVZFX0RMRF0sIFsxXSwKKwkJICAgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgR05VIGRsZCBsaWJyYXJ5Ll0pCisJCUxUX0RMTE9BREVSUz0iJExUX0RMTE9BREVSUyAke2x0X2Rsb3Blbl9kaXIrJGx0X2Rsb3Blbl9kaXIvfWRsZF9saW5rLmxhIl0pCitBQ19TVUJTVChbTElCQUREX0RMRF9MSU5LXSkKKworbTRfcGF0dGVybl9hbGxvdyhbXkxUX0RMUFJFT1BFTiRdKQorTFRfRExQUkVPUEVOPQoraWYgdGVzdCAtbiAiJExUX0RMTE9BREVSUyIKK3RoZW4KKyAgZm9yIGx0X2xvYWRlciBpbiAkTFRfRExMT0FERVJTOyBkbworICAgIExUX0RMUFJFT1BFTj0iJExUX0RMUFJFT1BFTi1kbHByZW9wZW4gJGx0X2xvYWRlciAiCisgIGRvbmUKKyAgQUNfREVGSU5FKFtIQVZFX0xJQkRMTE9BREVSXSwgWzFdLAorICAgICAgICAgICAgW0RlZmluZSBpZiBsaWJkbGxvYWRlciB3aWxsIGJlIGJ1aWx0IG9uIHRoaXMgcGxhdGZvcm1dKQorZmkKK0FDX1NVQlNUKFtMVF9ETFBSRU9QRU5dKQorCitkbmwgVGhpcyBpc24ndCB1c2VkIGFueW1vcmUsIGJ1dCBzZXQgaXQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CitMSUJBRERfREw9IiRMSUJBRERfRExPUEVOICRMSUJBRERfU0hMX0xPQUQiCitBQ19TVUJTVChbTElCQUREX0RMXSkKKworQUNfTEFOR19QT1AKK10pIyBMVF9MSUJfRExMT0FECisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfTFRETF9ETExJQl0sIFtMVF9MSUJfRExMT0FEXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTFRETF9ETExJQl0sIFtdKQorCisKKyMgTFRfU1lTX1NZTUJPTF9VU0NPUkUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZG9lcyB0aGUgY29tcGlsZXIgcHJlZml4IGdsb2JhbCBzeW1ib2xzIHdpdGggYW4gdW5kZXJzY29yZT8KK0FDX0RFRlVOKFtMVF9TWVNfU1lNQk9MX1VTQ09SRV0sCitbbTRfcmVxdWlyZShbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10pZG5sCitBQ19DQUNIRV9DSEVDSyhbZm9yIF8gcHJlZml4IGluIGNvbXBpbGVkIHN5bWJvbHNdLAorICBbbHRfY3Zfc3lzX3N5bWJvbF91bmRlcnNjb3JlXSwKKyAgW2x0X2N2X3N5c19zeW1ib2xfdW5kZXJzY29yZT1ubworICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgordm9pZCBubV90ZXN0X2Z1bmMoKXt9CitpbnQgbWFpbigpe25tX3Rlc3RfZnVuYztyZXR1cm4gMDt9CitfTFRfRU9GCisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCisgICAgYWNfbmxpc3Q9Y29uZnRlc3Qubm0KKyAgICBpZiBBQ19UUllfRVZBTChOTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFw+ICRhY19ubGlzdCkgJiYgdGVzdCAtcyAiJGFjX25saXN0IjsgdGhlbgorICAgICAgIyBTZWUgd2hldGhlciB0aGUgc3ltYm9scyBoYXZlIGEgbGVhZGluZyB1bmRlcnNjb3JlLgorICAgICAgaWYgZ3JlcCAnXi4gX25tX3Rlc3RfZnVuYycgIiRhY19ubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBsdF9jdl9zeXNfc3ltYm9sX3VuZGVyc2NvcmU9eWVzCisgICAgICBlbHNlCisgICAgICAgIGlmIGdyZXAgJ14uIG5tX3Rlc3RfZnVuYyAnICIkYWNfbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwkgIDoKKyAgICAgICAgZWxzZQorCSAgZWNobyAiY29uZmlndXJlOiBjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJGFjX25saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgIGZpCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGVjaG8gImNvbmZpZ3VyZTogY2Fubm90IHJ1biAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgIGZpCisgIGVsc2UKKyAgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICBjYXQgY29uZnRlc3QuYyA+JkFTX01FU1NBR0VfTE9HX0ZECisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgXSkKKyAgc3lzX3N5bWJvbF91bmRlcnNjb3JlPSRsdF9jdl9zeXNfc3ltYm9sX3VuZGVyc2NvcmUKKyAgQUNfU1VCU1QoW3N5c19zeW1ib2xfdW5kZXJzY29yZV0pCitdKSMgTFRfU1lTX1NZTUJPTF9VU0NPUkUKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MVERMX1NZTUJPTF9VU0NPUkVdLCBbTFRfU1lTX1NZTUJPTF9VU0NPUkVdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MVERMX1NZTUJPTF9VU0NPUkVdLCBbXSkKKworCisjIExUX0ZVTkNfRExTWU1fVVNDT1JFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfRlVOQ19ETFNZTV9VU0NPUkVdLAorW0FDX1JFUVVJUkUoW0xUX1NZU19TWU1CT0xfVVNDT1JFXSlkbmwKK2lmIHRlc3QgeCIkbHRfY3Zfc3lzX3N5bWJvbF91bmRlcnNjb3JlIiA9IHh5ZXM7IHRoZW4KKyAgaWYgdGVzdCB4IiRsaWJsdGRsX2N2X2Z1bmNfZGxvcGVuIiA9IHh5ZXMgfHwKKyAgICAgdGVzdCB4IiRsaWJsdGRsX2N2X2xpYl9kbF9kbG9wZW4iID0geHllcyA7IHRoZW4KKwlBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB3ZSBoYXZlIHRvIGFkZCBhbiB1bmRlcnNjb3JlIGZvciBkbHN5bV0sCisJICBbbGlibHRkbF9jdl9uZWVkX3VzY29yZV0sCisJICBbbGlibHRkbF9jdl9uZWVkX3VzY29yZT11bmtub3duCisgICAgICAgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgICAgICBMSUJTPSIkTElCUyAkTElCQUREX0RMT1BFTiIKKwkgIF9MVF9UUllfRExPUEVOX1NFTEYoCisJICAgIFtsaWJsdGRsX2N2X25lZWRfdXNjb3JlPW5vXSwgW2xpYmx0ZGxfY3ZfbmVlZF91c2NvcmU9eWVzXSwKKwkgICAgW10sCQkJCSBbbGlibHRkbF9jdl9uZWVkX3VzY29yZT1jcm9zc10pCisJICBMSUJTPSIkc2F2ZV9MSUJTIgorCV0pCisgIGZpCitmaQorCitpZiB0ZXN0IHgiJGxpYmx0ZGxfY3ZfbmVlZF91c2NvcmUiID0geHllczsgdGhlbgorICBBQ19ERUZJTkUoW05FRURfVVNDT1JFXSwgWzFdLAorICAgIFtEZWZpbmUgaWYgZGxzeW0oKSByZXF1aXJlcyBhIGxlYWRpbmcgdW5kZXJzY29yZSBpbiBzeW1ib2wgbmFtZXMuXSkKK2ZpCitdKSMgTFRfRlVOQ19ETFNZTV9VU0NPUkUKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MVERMX0RMU1lNX1VTQ09SRV0sIFtMVF9GVU5DX0RMU1lNX1VTQ09SRV0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xURExfRExTWU1fVVNDT1JFXSwgW10pCmRpZmYgLS1naXQgYS9zaGFyZS9hY2xvY2FsL2x0b3B0aW9ucy5tNCBiL3NoYXJlL2FjbG9jYWwvbHRvcHRpb25zLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3Y2ZkNTEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hY2xvY2FsL2x0b3B0aW9ucy5tNApAQCAtMCwwICsxLDM2OSBAQAorIyBIZWxwZXIgZnVuY3Rpb25zIGZvciBvcHRpb24gaGFuZGxpbmcuICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgICBJbmMuCisjICAgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA3IGx0b3B0aW9ucy5tNAorCisjIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgorQUNfREVGVU4oW0xUT1BUSU9OU19WRVJTSU9OXSwgW200X2lmKFsxXSldKQorCisKKyMgX0xUX01BTkdMRV9PUFRJT04oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfTUFOR0xFX09QVElPTl0sCitbW19MVF9PUFRJT05fXW00X2JwYXRzdWJzdCgkMV9fJDIsIFtbXmEtekEtWjAtOV9dXSwgW19dKV0pCisKKworIyBfTFRfU0VUX09QVElPTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCBvcHRpb24gT1BUSU9OLU5BTUUgZm9yIG1hY3JvIE1BQ1JPLU5BTUUsIGFuZCBpZiB0aGVyZSBpcyBhCisjIG1hdGNoaW5nIGhhbmRsZXIgZGVmaW5lZCwgZGlzcGF0Y2ggdG8gaXQuICBPdGhlciBPUFRJT04tTkFNRXMgYXJlCisjIHNhdmVkIGFzIGEgZmxhZy4KK200X2RlZmluZShbX0xUX1NFVF9PUFRJT05dLAorW200X2RlZmluZShfTFRfTUFOR0xFX09QVElPTihbJDFdLCBbJDJdKSlkbmwKK200X2lmZGVmKF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksCisgICAgICAgIF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksCisgICAgW200X3dhcm5pbmcoW1Vua25vd24gJDEgb3B0aW9uIGAkMiddKV0pW11kbmwKK10pCisKKworIyBfTFRfSUZfT1BUSU9OKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FLCBJRi1TRVQsIFtJRi1OT1QtU0VUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4ZWN1dGUgSUYtU0VUIGlmIE9QVElPTiBpcyBzZXQsIElGLU5PVC1TRVQgb3RoZXJ3aXNlLgorbTRfZGVmaW5lKFtfTFRfSUZfT1BUSU9OXSwKK1ttNF9pZmRlZihfTFRfTUFOR0xFX09QVElPTihbJDFdLCBbJDJdKSwgWyQzXSwgWyQ0XSldKQorCisKKyMgX0xUX1VOTEVTU19PUFRJT05TKE1BQ1JPLU5BTUUsIE9QVElPTi1MSVNULCBJRi1OT1QtU0VUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4ZWN1dGUgSUYtTk9ULVNFVCB1bmxlc3MgYWxsIG9wdGlvbnMgaW4gT1BUSU9OLUxJU1QgZm9yIE1BQ1JPLU5BTUUKKyMgYXJlIHNldC4KK200X2RlZmluZShbX0xUX1VOTEVTU19PUFRJT05TXSwKK1ttNF9mb3JlYWNoKFtfTFRfT3B0aW9uXSwgbTRfc3BsaXQobTRfbm9ybWFsaXplKFskMl0pKSwKKwkgICAgW200X2lmZGVmKF9MVF9NQU5HTEVfT1BUSU9OKFskMV0sIF9MVF9PcHRpb24pLAorCQkgICAgICBbbTRfZGVmaW5lKFskMF9mb3VuZF0pXSldKVtdZG5sCittNF9pZmRlZihbJDBfZm91bmRdLCBbbTRfdW5kZWZpbmUoWyQwX2ZvdW5kXSldLCBbJDMKK10pW11kbmwKK10pCisKKworIyBfTFRfU0VUX09QVElPTlMoTUFDUk8tTkFNRSwgT1BUSU9OLUxJU1QpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT1BUSU9OLUxJU1QgaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBMaWJ0b29sIG9wdGlvbnMgYXNzb2NpYXRlZAorIyB3aXRoIE1BQ1JPLU5BTUUuICBJZiBhbnkgT1BUSU9OIGhhcyBhIG1hdGNoaW5nIGhhbmRsZXIgZGVjbGFyZWQgd2l0aAorIyBMVF9PUFRJT05fREVGSU5FLCBkaXNwYXRjaCB0byB0aGF0IG1hY3JvOyBvdGhlcndpc2UgY29tcGxhaW4gYWJvdXQKKyMgdGhlIHVua25vd24gb3B0aW9uIGFuZCBleGl0LgorbTRfZGVmdW4oW19MVF9TRVRfT1BUSU9OU10sCitbIyBTZXQgb3B0aW9ucworbTRfZm9yZWFjaChbX0xUX09wdGlvbl0sIG00X3NwbGl0KG00X25vcm1hbGl6ZShbJDJdKSksCisgICAgW19MVF9TRVRfT1BUSU9OKFskMV0sIF9MVF9PcHRpb24pXSkKKworbTRfaWYoWyQxXSxbTFRfSU5JVF0sWworICBkbmwKKyAgZG5sIFNpbXBseSBzZXQgc29tZSBkZWZhdWx0IHZhbHVlcyAoaS5lIG9mZikgaWYgYm9vbGVhbiBvcHRpb25zIHdlcmUgbm90CisgIGRubCBzcGVjaWZpZWQ6CisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtkbG9wZW5dLCBbZW5hYmxlX2Rsb3Blbj1ubworICBdKQorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbd2luMzItZGxsXSwgW2VuYWJsZV93aW4zMl9kbGw9bm8KKyAgXSkKKyAgZG5sCisgIGRubCBJZiBubyByZWZlcmVuY2Ugd2FzIG1hZGUgdG8gdmFyaW91cyBwYWlycyBvZiBvcHBvc2luZyBvcHRpb25zLCB0aGVuCisgIGRubCB3ZSBydW4gdGhlIGRlZmF1bHQgbW9kZSBoYW5kbGVyIGZvciB0aGUgcGFpci4gIEZvciBleGFtcGxlLCBpZiBuZWl0aGVyCisgIGRubCBgc2hhcmVkJyBub3IgYGRpc2FibGUtc2hhcmVkJyB3YXMgcGFzc2VkLCB3ZSBlbmFibGUgYnVpbGRpbmcgb2Ygc2hhcmVkCisgIGRubCBhcmNoaXZlcyBieSBkZWZhdWx0OgorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbc2hhcmVkIGRpc2FibGUtc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEXSkKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3N0YXRpYyBkaXNhYmxlLXN0YXRpY10sIFtfTFRfRU5BQkxFX1NUQVRJQ10pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtwaWMtb25seSBuby1waWNdLCBbX0xUX1dJVEhfUElDXSkKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW2Zhc3QtaW5zdGFsbCBkaXNhYmxlLWZhc3QtaW5zdGFsbF0sCisgIAkJICAgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMXSkKKyAgXSkKK10pIyBfTFRfU0VUX09QVElPTlMKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1hY3JvcyB0byBoYW5kbGUgTFRfSU5JVCBvcHRpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgX0xUX01BTkdMRV9ERUZVTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX01BTkdMRV9ERUZVTl0sCitbW19MVF9PUFRJT05fREVGVU5fXW00X2JwYXRzdWJzdChtNF90b3VwcGVyKFskMV9fJDJdKSwgW1teQS1aMC05X11dLCBbX10pXSkKKworCisjIExUX09QVElPTl9ERUZJTkUoTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUsIENPREUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW0xUX09QVElPTl9ERUZJTkVdLAorW200X2RlZmluZShfTFRfTUFOR0xFX0RFRlVOKFskMV0sIFskMl0pLCBbJDNdKVtdZG5sCitdKSMgTFRfT1BUSU9OX0RFRklORQorCisKKyMgZGxvcGVuCisjIC0tLS0tLQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkbG9wZW5dLCBbZW5hYmxlX2Rsb3Blbj15ZXMKK10pCisKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGxvcGVuXSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91CitwdXQgdGhlIGBkbG9wZW4nIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5dLCBbXSkKKworCisjIHdpbjMyLWRsbAorIyAtLS0tLS0tLS0KKyMgRGVjbGFyZSBwYWNrYWdlIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIHdpbjMyIGRsbCdzLgorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFt3aW4zMi1kbGxdLAorW2VuYWJsZV93aW4zMl9kbGw9eWVzCisKK2Nhc2UgJGhvc3QgaW4KKyotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1jZWdjYyopCisgIEFDX0NIRUNLX1RPT0woQVMsIGFzLCBmYWxzZSkKKyAgQUNfQ0hFQ0tfVE9PTChETExUT09MLCBkbGx0b29sLCBmYWxzZSkKKyAgQUNfQ0hFQ0tfVE9PTChPQkpEVU1QLCBvYmpkdW1wLCBmYWxzZSkKKyAgOzsKK2VzYWMKKwordGVzdCAteiAiJEFTIiAmJiBBUz1hcworX0xUX0RFQ0woW10sIFtBU10sICAgICAgWzFdLCBbQXNzZW1ibGVyIHByb2dyYW1dKWRubAorCit0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCitfTFRfREVDTChbXSwgW0RMTFRPT0xdLCBbMV0sIFtETEwgY3JlYXRpb24gcHJvZ3JhbV0pZG5sCisKK3Rlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKK19MVF9ERUNMKFtdLCBbT0JKRFVNUF0sIFsxXSwgW09iamVjdCBkdW1wZXIgcHJvZ3JhbV0pZG5sCitdKSMgd2luMzItZGxsCisKK0FVX0RFRlVOKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbd2luMzItZGxsXSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91CitwdXQgdGhlIGB3aW4zMi1kbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9XSU4zMl9ETExdLCBbXSkKKworCisjIF9MVF9FTkFCTEVfU0hBUkVEKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXNoYXJlZCBmbGFnLCBhbmQgc3VwcG9ydHMgdGhlIGBzaGFyZWQnIGFuZAorIyBgZGlzYWJsZS1zaGFyZWQnIExUX0lOSVQgb3B0aW9ucy4KKyMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgorbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF0sCitbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAorQUNfQVJHX0VOQUJMRShbc2hhcmVkXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXNoYXJlZEA8OkA9UEtHU0A6PkBdLAorCVtidWlsZCBzaGFyZWQgbGlicmFyaWVzIEA8OkBkZWZhdWx0PV1fTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUW0A6PkBdKV0sCisgICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OworICAgIG5vKSBlbmFibGVfc2hhcmVkPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfc2hhcmVkPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhY10sCisgICAgW2VuYWJsZV9zaGFyZWQ9XV9MVF9FTkFCTEVfU0hBUkVEX0RFRkFVTFQpCisKKyAgICBfTFRfREVDTChbYnVpbGRfbGlidG9vbF9saWJzXSwgW2VuYWJsZV9zaGFyZWRdLCBbMF0sCisJW1doZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorXSkjIF9MVF9FTkFCTEVfU0hBUkVECisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBQ19ERUZVTihbQUNfRU5BQkxFX1NIQVJFRF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtzaGFyZWRdKQorXSkKKworQUNfREVGVU4oW0FDX0RJU0FCTEVfU0hBUkVEXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLXNoYXJlZF0pCitdKQorCitBVV9ERUZVTihbQU1fRU5BQkxFX1NIQVJFRF0sIFtBQ19FTkFCTEVfU0hBUkVEKCRAKV0pCitBVV9ERUZVTihbQU1fRElTQUJMRV9TSEFSRURdLCBbQUNfRElTQUJMRV9TSEFSRUQoJEApXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9FTkFCTEVfU0hBUkVEXSwgW10pCitkbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfU0hBUkVEXSwgW10pCisKKworCisjIF9MVF9FTkFCTEVfU1RBVElDKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXN0YXRpYyBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYHN0YXRpYycgYW5kCisjIGBkaXNhYmxlLXN0YXRpYycgTFRfSU5JVCBvcHRpb25zLgorIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCittNF9kZWZpbmUoW19MVF9FTkFCTEVfU1RBVElDXSwKK1ttNF9kZWZpbmUoW19MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCitBQ19BUkdfRU5BQkxFKFtzdGF0aWNdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtc3RhdGljQDw6QD1QS0dTQDo+QF0sCisJW2J1aWxkIHN0YXRpYyBsaWJyYXJpZXMgQDw6QGRlZmF1bHQ9XV9MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFRbQDo+QF0pXSwKKyAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9zdGF0aWM9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9zdGF0aWM9bm8gOzsKKyAgICAqKQorICAgICBlbmFibGVfc3RhdGljPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3N0YXRpYz15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtlbmFibGVfc3RhdGljPV1fTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUKQorCisgICAgX0xUX0RFQ0woW2J1aWxkX29sZF9saWJzXSwgW2VuYWJsZV9zdGF0aWNdLCBbMF0sCisJW1doZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorXSkjIF9MVF9FTkFCTEVfU1RBVElDCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBQ19ERUZVTihbQUNfRU5BQkxFX1NUQVRJQ10sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtzdGF0aWNdKQorXSkKKworQUNfREVGVU4oW0FDX0RJU0FCTEVfU1RBVElDXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLXN0YXRpY10pCitdKQorCitBVV9ERUZVTihbQU1fRU5BQkxFX1NUQVRJQ10sIFtBQ19FTkFCTEVfU1RBVElDKCRAKV0pCitBVV9ERUZVTihbQU1fRElTQUJMRV9TVEFUSUNdLCBbQUNfRElTQUJMRV9TVEFUSUMoJEApXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9FTkFCTEVfU1RBVElDXSwgW10pCitkbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfU1RBVElDXSwgW10pCisKKworCisjIF9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLWZhc3QtaW5zdGFsbCBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYGZhc3QtaW5zdGFsbCcKKyMgYW5kIGBkaXNhYmxlLWZhc3QtaW5zdGFsbCcgTFRfSU5JVCBvcHRpb25zLgorIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCittNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMXSwKK1ttNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCitBQ19BUkdfRU5BQkxFKFtmYXN0LWluc3RhbGxdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZmFzdC1pbnN0YWxsQDw6QD1QS0dTQDo+QF0sCisgICAgW29wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbiBAPDpAZGVmYXVsdD1dX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVFtAOj5AXSldLAorICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMgOzsKKyAgICBubykgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtlbmFibGVfZmFzdF9pbnN0YWxsPV1fTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUKQorCitfTFRfREVDTChbZmFzdF9pbnN0YWxsXSwgW2VuYWJsZV9mYXN0X2luc3RhbGxdLCBbMF0sCisJIFtXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb25dKWRubAorXSkjIF9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZmFzdC1pbnN0YWxsXSwgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtZmFzdC1pbnN0YWxsXSwgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBVV9ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtmYXN0LWluc3RhbGxdKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UgcHV0Cit0aGUgYGZhc3QtaW5zdGFsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorXSkKKworQVVfREVGVU4oW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLWZhc3QtaW5zdGFsbF0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdSBwdXQKK3RoZSBgZGlzYWJsZS1mYXN0LWluc3RhbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sIFtdKQorCisKKyMgX0xUX1dJVEhfUElDKFtNT0RFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLXdpdGgtcGljIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSBgcGljLW9ubHknIGFuZCBgbm8tcGljJworIyBMVF9JTklUIG9wdGlvbnMuCisjIE1PREUgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgYm90aCcuCittNF9kZWZpbmUoW19MVF9XSVRIX1BJQ10sCitbQUNfQVJHX1dJVEgoW3BpY10sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtcGljXSwKKwlbdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgQDw6QGRlZmF1bHQ9dXNlIGJvdGhAOj5AXSldLAorICAgIFtwaWNfbW9kZT0iJHdpdGh2YWwiXSwKKyAgICBbcGljX21vZGU9ZGVmYXVsdF0pCisKK3Rlc3QgLXogIiRwaWNfbW9kZSIgJiYgcGljX21vZGU9bTRfZGVmYXVsdChbJDFdLCBbZGVmYXVsdF0pCisKK19MVF9ERUNMKFtdLCBbcGljX21vZGVdLCBbMF0sIFtXaGF0IHR5cGUgb2Ygb2JqZWN0cyB0byBidWlsZF0pZG5sCitdKSMgX0xUX1dJVEhfUElDCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbcGljLW9ubHldLCBbX0xUX1dJVEhfUElDKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW25vLXBpY10sIFtfTFRfV0lUSF9QSUMoW25vXSldKQorCisjIE9sZCBuYW1lOgorQVVfREVGVU4oW0FDX0xJQlRPT0xfUElDTU9ERV0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbcGljLW9ubHldKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UKK3B1dCB0aGUgYHBpYy1vbmx5JyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfUElDTU9ERV0sIFtdKQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTFRETF9JTklUIE9wdGlvbnMgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisKK200X2RlZmluZShbX0xURExfTU9ERV0sIFtdKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW25vbnJlY3Vyc2l2ZV0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW25vbnJlY3Vyc2l2ZV0pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtyZWN1cnNpdmVdLAorCQkgW200X2RlZmluZShbX0xURExfTU9ERV0sIFtyZWN1cnNpdmVdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbc3VicHJvamVjdF0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW3N1YnByb2plY3RdKV0pCisKK200X2RlZmluZShbX0xURExfVFlQRV0sIFtdKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW2luc3RhbGxhYmxlXSwKKwkJIFttNF9kZWZpbmUoW19MVERMX1RZUEVdLCBbaW5zdGFsbGFibGVdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbY29udmVuaWVuY2VdLAorCQkgW200X2RlZmluZShbX0xURExfVFlQRV0sIFtjb252ZW5pZW5jZV0pXSkKZGlmZiAtLWdpdCBhL3NoYXJlL2FjbG9jYWwvbHRzdWdhci5tNCBiL3NoYXJlL2FjbG9jYWwvbHRzdWdhci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDAwYTA1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYWNsb2NhbC9sdHN1Z2FyLm00CkBAIC0wLDAgKzEsMTIzIEBACisjIGx0c3VnYXIubTQgLS0gbGlidG9vbCBtNCBiYXNlIGxheWVyLiAgICAgICAgICAgICAgICAgICAgICAgICAtKi1BdXRvY29uZi0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDA0CisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNiBsdHN1Z2FyLm00CisKKyMgVGhpcyBpcyB0byBoZWxwIGFjbG9jYWwgZmluZCB0aGVzZSBtYWNyb3MsIGFzIGl0IGNhbid0IHNlZSBtNF9kZWZpbmUuCitBQ19ERUZVTihbTFRTVUdBUl9WRVJTSU9OXSwgW200X2lmKFswLjFdKV0pCisKKworIyBsdF9qb2luKFNFUCwgQVJHMSwgW0FSRzIuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9kdWNlIEFSRzFTRVBBUkcyLi4uU0VQQVJHbiwgb21pdHRpbmcgW10gYXJndW1lbnRzIGFuZCB0aGVpcgorIyBhc3NvY2lhdGVkIHNlcGFyYXRvci4KKyMgTmVlZGVkIHVudGlsIHdlIGNhbiByZWx5IG9uIG00X2pvaW4gZnJvbSBBdXRvY29uZiAyLjYyLCBzaW5jZSBhbGwgZWFybGllcgorIyB2ZXJzaW9ucyBpbiBtNHN1Z2FyIGhhZCBidWdzLgorbTRfZGVmaW5lKFtsdF9qb2luXSwKK1ttNF9pZihbJCNdLCBbMV0sIFtdLAorICAgICAgIFskI10sIFsyXSwgW1skMl1dLAorICAgICAgIFttNF9pZihbJDJdLCBbXSwgW10sIFtbJDJdX10pJDAoWyQxXSwgbTRfc2hpZnQobTRfc2hpZnQoJEApKSldKV0pCittNF9kZWZpbmUoW19sdF9qb2luXSwKK1ttNF9pZihbJCMkMl0sIFsyXSwgW10sCisgICAgICAgW200X2lmKFskMl0sIFtdLCBbXSwgW1skMSQyXV0pJDAoWyQxXSwgbTRfc2hpZnQobTRfc2hpZnQoJEApKSldKV0pCisKKworIyBsdF9jYXIoTElTVCkKKyMgbHRfY2RyKExJU1QpCisjIC0tLS0tLS0tLS0tLQorIyBNYW5pcHVsYXRlIG00IGxpc3RzLgorIyBUaGVzZSBtYWNyb3MgYXJlIG5lY2Vzc2FyeSBhcyBsb25nIGFzIHdpbGwgc3RpbGwgbmVlZCB0byBzdXBwb3J0CisjIEF1dG9jb25mLTIuNTkgd2hpY2ggcXVvdGVzIGRpZmZlcmVudGx5LgorbTRfZGVmaW5lKFtsdF9jYXJdLCBbWyQxXV0pCittNF9kZWZpbmUoW2x0X2Nkcl0sCitbbTRfaWYoWyQjXSwgMCwgW200X2ZhdGFsKFskMDogY2Fubm90IGJlIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50c10pXSwKKyAgICAgICBbJCNdLCAxLCBbXSwKKyAgICAgICBbbTRfZHF1b3RlKG00X3NoaWZ0KCRAKSldKV0pCittNF9kZWZpbmUoW2x0X3VucXVvdGVdLCAkMSkKKworCisjIGx0X2FwcGVuZChNQUNSTy1OQU1FLCBTVFJJTkcsIFtTRVBBUkFUT1JdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVkZWZpbmUgTUFDUk8tTkFNRSB0byBob2xkIGl0cyBmb3JtZXIgY29udGVudCBwbHVzIGBTRVBBUkFUT1InYFNUUklORycuCisjIE5vdGUgdGhhdCBuZWl0aGVyIFNFUEFSQVRPUiBub3IgU1RSSU5HIGFyZSBleHBhbmRlZDsgdGhleSBhcmUgYXBwZW5kZWQKKyMgdG8gTUFDUk8tTkFNRSBhcyBpcyAobGVhdmluZyB0aGUgZXhwYW5zaW9uIGZvciB3aGVuIE1BQ1JPLU5BTUUgaXMgaW52b2tlZCkuCisjIE5vIFNFUEFSQVRPUiBpcyBvdXRwdXQgaWYgTUFDUk8tTkFNRSB3YXMgcHJldmlvdXNseSB1bmRlZmluZWQgKGRpZmZlcmVudAorIyB0aGFuIGRlZmluZWQgYW5kIGVtcHR5KS4KKyMKKyMgVGhpcyBtYWNybyBpcyBuZWVkZWQgdW50aWwgd2UgY2FuIHJlbHkgb24gQXV0b2NvbmYgMi42Miwgc2luY2UgZWFybGllcgorIyB2ZXJzaW9ucyBvZiBtNHN1Z2FyIG1pc3Rha2VubHkgZXhwYW5kZWQgU0VQQVJBVE9SIGJ1dCBub3QgU1RSSU5HLgorbTRfZGVmaW5lKFtsdF9hcHBlbmRdLAorW200X2RlZmluZShbJDFdLAorCSAgIG00X2lmZGVmKFskMV0sIFttNF9kZWZuKFskMV0pWyQzXV0pWyQyXSldKQorCisKKworIyBsdF9jb21iaW5lKFNFUCwgUFJFRklYLUxJU1QsIElORklYLCBTVUZGSVgxLCBbU1VGRklYMi4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBhIFNFUCBkZWxpbWl0ZWQgbGlzdCBvZiBhbGwgcGFpcmVkIGNvbWJpbmF0aW9ucyBvZiBlbGVtZW50cyBvZgorIyBQUkVGSVgtTElTVCB3aXRoIFNVRkZJWDEgdGhyb3VnaCBTVUZGSVhuLiAgRWFjaCBlbGVtZW50IG9mIHRoZSBsaXN0CisjIGhhcyB0aGUgZm9ybSBQUkVGSVhtSU5GSVhTVUZGSVhuLgorIyBOZWVkZWQgdW50aWwgd2UgY2FuIHJlbHkgb24gbTRfY29tYmluZSBhZGRlZCBpbiBBdXRvY29uZiAyLjYyLgorbTRfZGVmaW5lKFtsdF9jb21iaW5lXSwKK1ttNF9pZihtNF9ldmFsKFskIyA+IDNdKSwgWzFdLAorICAgICAgIFttNF9wdXNoZGVmKFtfTHRfc2VwXSwgW200X2RlZmluZShbX0x0X3NlcF0sIG00X2RlZm4oW2x0X2Nhcl0pKV0pXV1kbmwKK1tbbTRfZm9yZWFjaChbX0x0X3ByZWZpeF0sIFskMl0sCisJICAgICBbbTRfZm9yZWFjaChbX0x0X3N1ZmZpeF0sCisJCV1tNF9kcXVvdGUobTRfZHF1b3RlKG00X3NoaWZ0KG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpKSlbLAorCVtfTHRfc2VwKFskMV0pW11tNF9kZWZuKFtfTHRfcHJlZml4XSlbJDNdbTRfZGVmbihbX0x0X3N1ZmZpeF0pXSldKV0pXSkKKworCisjIGx0X2lmX2FwcGVuZF91bmlxKE1BQ1JPLU5BTUUsIFZBUk5BTUUsIFtTRVBBUkFUT1JdLCBbVU5JUV0sIFtOT1QtVU5JUV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmZiBNQUNSTy1OQU1FIGRvZXMgbm90IHlldCBjb250YWluIFZBUk5BTUUsIHRoZW4gYXBwZW5kIGl0IChkZWxpbWl0ZWQKKyMgYnkgU0VQQVJBVE9SIGlmIHN1cHBsaWVkKSBhbmQgZXhwYW5kIFVOSVEsIGVsc2UgTk9ULVVOSVEuCittNF9kZWZpbmUoW2x0X2lmX2FwcGVuZF91bmlxXSwKK1ttNF9pZmRlZihbJDFdLAorCSAgW200X2lmKG00X2luZGV4KFskM11tNF9kZWZuKFskMV0pWyQzXSwgWyQzJDIkM10pLCBbLTFdLAorCQkgW2x0X2FwcGVuZChbJDFdLCBbJDJdLCBbJDNdKSQ0XSwKKwkJIFskNV0pXSwKKwkgIFtsdF9hcHBlbmQoWyQxXSwgWyQyXSwgWyQzXSkkNF0pXSkKKworCisjIGx0X2RpY3RfYWRkKERJQ1QsIEtFWSwgVkFMVUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RpY3RfYWRkXSwKK1ttNF9kZWZpbmUoWyQxKCQyKV0sIFskM10pXSkKKworCisjIGx0X2RpY3RfYWRkX3N1YmtleShESUNULCBLRVksIFNVQktFWSwgVkFMVUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RpY3RfYWRkX3N1YmtleV0sCitbbTRfZGVmaW5lKFskMSgkMjokMyldLCBbJDRdKV0pCisKKworIyBsdF9kaWN0X2ZldGNoKERJQ1QsIEtFWSwgW1NVQktFWV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9mZXRjaF0sCitbbTRfaWZ2YWwoWyQzXSwKKwltNF9pZmRlZihbJDEoJDI6JDMpXSwgW200X2RlZm4oWyQxKCQyOiQzKV0pXSksCisgICAgbTRfaWZkZWYoWyQxKCQyKV0sIFttNF9kZWZuKFskMSgkMildKV0pKV0pCisKKworIyBsdF9pZl9kaWN0X2ZldGNoKERJQ1QsIEtFWSwgW1NVQktFWV0sIFZBTFVFLCBJRi1UUlVFLCBbSUYtRkFMU0VdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9pZl9kaWN0X2ZldGNoXSwKK1ttNF9pZihsdF9kaWN0X2ZldGNoKFskMV0sIFskMl0sIFskM10pLCBbJDRdLAorCVskNV0sCisgICAgWyQ2XSldKQorCisKKyMgbHRfZGljdF9maWx0ZXIoRElDVCwgW1NVQktFWV0sIFZBTFVFLCBbU0VQQVJBVE9SXSwgS0VZLCBbLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9maWx0ZXJdLAorW200X2lmKFskNV0sIFtdLCBbXSwKKyAgW2x0X2pvaW4obTRfcXVvdGUobTRfZGVmYXVsdChbJDRdLCBbWywgXV0pKSwKKyAgICAgICAgICAgbHRfdW5xdW90ZShtNF9zcGxpdChtNF9ub3JtYWxpemUobTRfZm9yZWFjaChfTHRfa2V5LCBsdF9jYXIoW200X3NoaWZ0big0LCAkQCldKSwKKwkJICAgICAgW2x0X2lmX2RpY3RfZmV0Y2goWyQxXSwgX0x0X2tleSwgWyQyXSwgWyQzXSwgW19MdF9rZXkgXSldKSkpKSldKVtdZG5sCitdKQpkaWZmIC0tZ2l0IGEvc2hhcmUvYWNsb2NhbC9sdHZlcnNpb24ubTQgYi9zaGFyZS9hY2xvY2FsL2x0dmVyc2lvbi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2ZjNzcxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYWNsb2NhbC9sdHZlcnNpb24ubTQKQEAgLTAsMCArMSwyMyBAQAorIyBsdHZlcnNpb24ubTQgLS0gdmVyc2lvbiBudW1iZXJzCQkJLSotIEF1dG9jb25mIC0qLQorIworIyAgIENvcHlyaWdodCAoQykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IFNjb3R0IEphbWVzIFJlbW5hbnQsIDIwMDQKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEdlbmVyYXRlZCBmcm9tIGx0dmVyc2lvbi5pbi4KKworIyBzZXJpYWwgMzE3NSBsdHZlcnNpb24ubTQKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wKKworbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1ZFUlNJT05dLCBbMi4yLjEwXSkKK200X2RlZmluZShbTFRfUEFDS0FHRV9SRVZJU0lPTl0sIFsxLjMxNzVdKQorCitBQ19ERUZVTihbTFRWRVJTSU9OX1ZFUlNJT05dLAorW21hY3JvX3ZlcnNpb249JzIuMi4xMCcKK21hY3JvX3JldmlzaW9uPScxLjMxNzUnCitfTFRfREVDTCgsIG1hY3JvX3ZlcnNpb24sIDAsIFtXaGljaCByZWxlYXNlIG9mIGxpYnRvb2wubTQgd2FzIHVzZWQ/XSkKK19MVF9ERUNMKCwgbWFjcm9fcmV2aXNpb24sIDApCitdKQpkaWZmIC0tZ2l0IGEvc2hhcmUvYWNsb2NhbC9sdH5vYnNvbGV0ZS5tNCBiL3NoYXJlL2FjbG9jYWwvbHR+b2Jzb2xldGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU3M2RhOQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2FjbG9jYWwvbHR+b2Jzb2xldGUubTQKQEAgLTAsMCArMSw5OCBAQAorIyBsdH5vYnNvbGV0ZS5tNCAtLSBhY2xvY2FsIHNhdGlzZnlpbmcgb2Jzb2xldGUgZGVmaW5pdGlvbnMuICAgIC0qLUF1dG9jb25mLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgU2NvdHQgSmFtZXMgUmVtbmFudCwgMjAwNC4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA1IGx0fm9ic29sZXRlLm00CisKKyMgVGhlc2UgZXhpc3QgZW50aXJlbHkgdG8gZm9vbCBhY2xvY2FsIHdoZW4gYm9vdHN0cmFwcGluZyBsaWJ0b29sLgorIworIyBJbiB0aGUgcGFzdCBsaWJ0b29sLm00IGhhcyBwcm92aWRlZCBtYWNyb3MgdmlhIEFDX0RFRlVOIChvciBBVV9ERUZVTikKKyMgd2hpY2ggaGF2ZSBsYXRlciBiZWVuIGNoYW5nZWQgdG8gbTRfZGVmaW5lIGFzIHRoZXkgYXJlbid0IHBhcnQgb2YgdGhlCisjIGV4cG9ydGVkIEFQSSwgb3IgbW92ZWQgdG8gQXV0b2NvbmYgb3IgQXV0b21ha2Ugd2hlcmUgdGhleSBiZWxvbmcuCisjCisjIFRoZSB0cm91YmxlIGlzLCBhY2xvY2FsIGlzIGEgYml0IHRoaWNrLiAgSXQnbGwgc2VlIHRoZSBvbGQgQUNfREVGVU4KKyMgaW4gL3Vzci9zaGFyZS9hY2xvY2FsL2xpYnRvb2wubTQgYW5kIHJlbWVtYmVyIGl0LCB0aGVuIHdoZW4gaXQgc2VlcyB1cworIyB1c2luZyBhIG1hY3JvIHdpdGggdGhlIHNhbWUgbmFtZSBpbiBvdXIgbG9jYWwgbTQvbGlidG9vbC5tNCBpdCdsbAorIyBwdWxsIHRoZSBvbGQgbGlidG9vbC5tNCBpbiAoaXQgZG9lc24ndCBzZWUgb3VyIHNoaW55IG5ldyBtNF9kZWZpbmUKKyMgYW5kIGRvZXNuJ3Qga25vdyBhYm91dCBBdXRvY29uZiBtYWNyb3MgYXQgYWxsLikKKyMKKyMgU28gd2UgcHJvdmlkZSB0aGlzIGZpbGUsIHdoaWNoIGhhcyBhIHNpbGx5IGZpbGVuYW1lIHNvIGl0J3MgYWx3YXlzCisjIGluY2x1ZGVkIGFmdGVyIGV2ZXJ5dGhpbmcgZWxzZS4gIFRoaXMgcHJvdmlkZXMgYWNsb2NhbCB3aXRoIHRoZQorIyBBQ19ERUZVTnMgaXQgd2FudHMsIGJ1dCB3aGVuIG00IHByb2Nlc3NlcyBpdCwgaXQgZG9lc24ndCBkbyBhbnl0aGluZworIyBiZWNhdXNlIHRob3NlIG1hY3JvcyBhbHJlYWR5IGV4aXN0LCBvciB3aWxsIGJlIG92ZXJ3cml0dGVuIGxhdGVyLgorIyBXZSB1c2UgQUNfREVGVU4gb3ZlciBBVV9ERUZVTiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGFjbG9jYWwtMS42LiAKKyMKKyMgQW55dGltZSB3ZSB3aXRoZHJhdyBhbiBBQ19ERUZVTiBvciBBVV9ERUZVTiwgcmVtZW1iZXIgdG8gYWRkIGl0IGhlcmUuCisjIFllcywgdGhhdCBtZWFucyBldmVyeSBuYW1lIG9uY2UgdGFrZW4gd2lsbCBuZWVkIHRvIHJlbWFpbiBoZXJlIHVudGlsCisjIHdlIGdpdmUgdXAgY29tcGF0aWJpbGl0eSB3aXRoIHZlcnNpb25zIGJlZm9yZSAxLjcsIGF0IHdoaWNoIHBvaW50CisjIHdlIG5lZWQgdG8ga2VlcCBvbmx5IHRob3NlIG5hbWVzIHdoaWNoIHdlIHN0aWxsIHJlZmVyIHRvLgorCisjIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgorQUNfREVGVU4oW0xUT0JTT0xFVEVfVkVSU0lPTl0sIFttNF9pZihbMV0pXSkKKworbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0pXSkKK200X2lmbmRlZihbQUNfUFJPR19FR1JFUF0sCQlbQUNfREVGVU4oW0FDX1BST0dfRUdSRVBdKV0pCittNF9pZm5kZWYoW19MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNIXSwJW0FDX0RFRlVOKFtfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pXSkKK200X2lmbmRlZihbX0xUX0FDX1NIRUxMX0lOSVRdLAkJW0FDX0RFRlVOKFtfTFRfQUNfU0hFTExfSU5JVF0pXSkKK200X2lmbmRlZihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0sCVtBQ19ERUZVTihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0pXSkKK200X2lmbmRlZihbX0xUX1BST0dfTFRNQUlOXSwJCVtBQ19ERUZVTihbX0xUX1BST0dfTFRNQUlOXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfVEFHVkFSXSwJCVtBQ19ERUZVTihbX0xUX0FDX1RBR1ZBUl0pXSkKK200X2lmbmRlZihbQUNfTFRETF9FTkFCTEVfSU5TVEFMTF0sCVtBQ19ERUZVTihbQUNfTFRETF9FTkFCTEVfSU5TVEFMTF0pXSkKK200X2lmbmRlZihbQUNfTFRETF9QUkVPUEVOXSwJCVtBQ19ERUZVTihbQUNfTFRETF9QUkVPUEVOXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSwJW0FDX0RFRlVOKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTE9DS10sCQlbQUNfREVGVU4oW19MVF9BQ19MT0NLXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19PTERfQVJDSElWRV0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfT0xEX0FSQ0hJVkVdKV0pCittNF9pZm5kZWYoW19MVF9BQ19UUllfRExPUEVOX1NFTEZdLAlbQUNfREVGVU4oW19MVF9BQ19UUllfRExPUEVOX1NFTEZdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLU10sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX09CSkRJUl0sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfT0JKRElSXSldKQorbTRfaWZuZGVmKFtBQ19MVERMX09CSkRJUl0sCQlbQUNfREVGVU4oW0FDX0xURExfT0JKRElSXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSF0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEhdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUF0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfTElCX1NUUklQXSldKQorbTRfaWZuZGVmKFtBQ19QQVRIX01BR0lDXSwJCVtBQ19ERUZVTihbQUNfUEFUSF9NQUdJQ10pXSkKK200X2lmbmRlZihbQUNfUFJPR19MRF9HTlVdLAkJW0FDX0RFRlVOKFtBQ19QUk9HX0xEX0dOVV0pXSkKK200X2lmbmRlZihbQUNfUFJPR19MRF9SRUxPQURfRkxBR10sCVtBQ19ERUZVTihbQUNfUFJPR19MRF9SRUxPQURfRkxBR10pXSkKK200X2lmbmRlZihbQUNfREVQTElCU19DSEVDS19NRVRIT0RdLAlbQUNfREVGVU4oW0FDX0RFUExJQlNfQ0hFQ0tfTUVUSE9EXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSV0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEldKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRV0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfR0xPQkFMX1NZTUJPTF9QSVBFXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSwgW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQXSldKQorbTRfaWZuZGVmKFtMVF9BQ19QUk9HX0VHUkVQXSwJCVtBQ19ERUZVTihbTFRfQUNfUFJPR19FR1JFUF0pXSkKK200X2lmbmRlZihbTFRfQUNfUFJPR19TRURdLAkJW0FDX0RFRlVOKFtMVF9BQ19QUk9HX1NFRF0pXSkKK200X2lmbmRlZihbX0xUX0NDX0JBU0VOQU1FXSwJCVtBQ19ERUZVTihbX0xUX0NDX0JBU0VOQU1FXSldKQorbTRfaWZuZGVmKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdLAlbQUNfREVGVU4oW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0pXSkKK200X2lmbmRlZihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0sCVtBQ19ERUZVTihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0pXSkKK200X2lmbmRlZihbX0FDX1BST0dfTElCVE9PTF0sCQlbQUNfREVGVU4oW19BQ19QUk9HX0xJQlRPT0xdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU0VUVVBdLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NFVFVQXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfQ0hFQ0tfRExGQ05dLAkJW0FDX0RFRlVOKFtfTFRfQUNfQ0hFQ0tfRExGQ05dKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUl0pXSkKK200X2lmbmRlZihbX0xUX0FDX1RBR0NPTkZJR10sCQlbQUNfREVGVU4oW19MVF9BQ19UQUdDT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwJW0FDX0RFRlVOKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfQ1hYXSwJCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ1hYXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19GNzddLAkJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0dDSl0sCQlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfQ19DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0NfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19DX0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19DWFhfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19DWFhfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfRjc3X0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0Y3N19DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0Y3N19DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfR0NKX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfR0NKX0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfUkNfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19SQ19DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfQ09ORklHXSwJCVtBQ19ERUZVTihbQUNfTElCVE9PTF9DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19GSUxFX0xURExMX0NdLAlbQUNfREVGVU4oW19MVF9BQ19GSUxFX0xURExMX0NdKV0pCittNF9pZm5kZWYoW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSwJW0FDX0RFRlVOKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10pXSkKK200X2lmbmRlZihbX0xUX0FDX1BST0dfQ1hYQ1BQXSwJCVtBQ19ERUZVTihbX0xUX0FDX1BST0dfQ1hYQ1BQXSldKQorbTRfaWZuZGVmKFtfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSU10sCVtBQ19ERUZVTihbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdKV0pCittNF9pZm5kZWYoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSwJW0FDX0RFRlVOKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pXSkKK200X2lmbmRlZihbX0xUX1BST0dfRjc3XSwJCVtBQ19ERUZVTihbX0xUX1BST0dfRjc3XSldKQorbTRfaWZuZGVmKFtfTFRfUFJPR19GQ10sCQlbQUNfREVGVU4oW19MVF9QUk9HX0ZDXSldKQorbTRfaWZuZGVmKFtfTFRfUFJPR19DWFhdLAkJW0FDX0RFRlVOKFtfTFRfUFJPR19DWFhdKV0pCmRpZmYgLS1naXQgYS9zaGFyZS9hY2xvY2FsL3BrZy5tNCBiL3NoYXJlL2FjbG9jYWwvcGtnLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYjNlMDYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hY2xvY2FsL3BrZy5tNApAQCAtMCwwICsxLDE1NyBAQAorIyBwa2cubTQgLSBNYWNyb3MgdG8gbG9jYXRlIGFuZCB1dGlsaXNlIHBrZy1jb25maWcuICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyBzZXJpYWwgMSAocGtnLWNvbmZpZy0wLjI0KQorIyAKKyMgQ29weXJpZ2h0IMKpIDIwMDQgU2NvdHQgSmFtZXMgUmVtbmFudCA8c2NvdHRAbmV0c3BsaXQuY29tPi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIFBLR19QUk9HX1BLR19DT05GSUcoW01JTi1WRVJTSU9OXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW1BLR19QUk9HX1BLR19DT05GSUddLAorW200X3BhdHRlcm5fZm9yYmlkKFteXz9QS0dfW0EtWl9dKyRdKQorbTRfcGF0dGVybl9hbGxvdyhbXlBLR19DT05GSUcoX1BBVEgpPyRdKQorQUNfQVJHX1ZBUihbUEtHX0NPTkZJR10sIFtwYXRoIHRvIHBrZy1jb25maWcgdXRpbGl0eV0pCitBQ19BUkdfVkFSKFtQS0dfQ09ORklHX1BBVEhdLCBbZGlyZWN0b3JpZXMgdG8gYWRkIHRvIHBrZy1jb25maWcncyBzZWFyY2ggcGF0aF0pCitBQ19BUkdfVkFSKFtQS0dfQ09ORklHX0xJQkRJUl0sIFtwYXRoIG92ZXJyaWRpbmcgcGtnLWNvbmZpZydzIGJ1aWx0LWluIHNlYXJjaCBwYXRoXSkKKworaWYgdGVzdCAieCRhY19jdl9lbnZfUEtHX0NPTkZJR19zZXQiICE9ICJ4c2V0IjsgdGhlbgorCUFDX1BBVEhfVE9PTChbUEtHX0NPTkZJR10sIFtwa2ctY29uZmlnXSkKK2ZpCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKwlfcGtnX21pbl92ZXJzaW9uPW00X2RlZmF1bHQoWyQxXSwgWzAuOS4wXSkKKwlBQ19NU0dfQ0hFQ0tJTkcoW3BrZy1jb25maWcgaXMgYXQgbGVhc3QgdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbl0pCisJaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uOyB0aGVuCisJCUFDX01TR19SRVNVTFQoW3llc10pCisJZWxzZQorCQlBQ19NU0dfUkVTVUxUKFtub10pCisJCVBLR19DT05GSUc9IiIKKwlmaQorZmlbXWRubAorXSkjIFBLR19QUk9HX1BLR19DT05GSUcKKworIyBQS0dfQ0hFQ0tfRVhJU1RTKE1PRFVMRVMsIFtBQ1RJT04tSUYtRk9VTkRdLCBbQUNUSU9OLUlGLU5PVC1GT1VORF0pCisjCisjIENoZWNrIHRvIHNlZSB3aGV0aGVyIGEgcGFydGljdWxhciBzZXQgb2YgbW9kdWxlcyBleGlzdHMuICBTaW1pbGFyCisjIHRvIFBLR19DSEVDS19NT0RVTEVTKCksIGJ1dCBkb2VzIG5vdCBzZXQgdmFyaWFibGVzIG9yIHByaW50IGVycm9ycy4KKyMKKyMgUGxlYXNlIHJlbWVtYmVyIHRoYXQgbTQgZXhwYW5kcyBBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSkKKyMgb25seSBhdCB0aGUgZmlyc3Qgb2NjdXJlbmNlIGluIGNvbmZpZ3VyZS5hYywgc28gaWYgdGhlIGZpcnN0IHBsYWNlCisjIGl0J3MgY2FsbGVkIG1pZ2h0IGJlIHNraXBwZWQgKHN1Y2ggYXMgaWYgaXQgaXMgd2l0aGluIGFuICJpZiIsIHlvdQorIyBoYXZlIHRvIGNhbGwgUEtHX0NIRUNLX0VYSVNUUyBtYW51YWxseQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW1BLR19DSEVDS19FWElTVFNdLAorW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKWRubAoraWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICBBQ19SVU5fTE9HKFskUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJDEiXSk7IHRoZW4KKyAgbTRfZGVmYXVsdChbJDJdLCBbOl0pCittNF9pZnZhbG4oWyQzXSwgW2Vsc2UKKyAgJDNdKWRubAorZmldKQorCisjIF9QS0dfQ09ORklHKFtWQVJJQUJMRV0sIFtDT01NQU5EXSwgW01PRFVMRVNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX1BLR19DT05GSUddLAorW2lmIHRlc3QgLW4gIiQkMSI7IHRoZW4KKyAgICBwa2dfY3ZfW10kMT0iJCQxIgorIGVsaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgUEtHX0NIRUNLX0VYSVNUUyhbJDNdLAorICAgICAgICAgICAgICAgICAgICAgW3BrZ19jdl9bXSQxPWAkUEtHX0NPTkZJRyAtLVtdJDIgIiQzIiAyPi9kZXYvbnVsbGBdLAorCQkgICAgIFtwa2dfZmFpbGVkPXllc10pCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50cmllZAorZmlbXWRubAorXSkjIF9QS0dfQ09ORklHCisKKyMgX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVECisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVEXSwKK1tBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSkKK2lmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKK2Vsc2UKKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCitmaVtdZG5sCitdKSMgX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVECisKKworIyBQS0dfQ0hFQ0tfTU9EVUxFUyhWQVJJQUJMRS1QUkVGSVgsIE1PRFVMRVMsIFtBQ1RJT04tSUYtRk9VTkRdLAorIyBbQUNUSU9OLUlGLU5PVC1GT1VORF0pCisjCisjCisjIE5vdGUgdGhhdCBpZiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoZSBmaXJzdCBjYWxsIHRvCisjIFBLR19DSEVDS19NT0RVTEVTIG1pZ2h0IG5vdCBoYXBwZW4sIHlvdSBzaG91bGQgYmUgc3VyZSB0byBpbmNsdWRlIGFuCisjIGV4cGxpY2l0IGNhbGwgdG8gUEtHX1BST0dfUEtHX0NPTkZJRyBpbiB5b3VyIGNvbmZpZ3VyZS5hYworIworIworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW1BLR19DSEVDS19NT0RVTEVTXSwKK1tBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSlkbmwKK0FDX0FSR19WQVIoWyQxXVtfQ0ZMQUdTXSwgW0MgY29tcGlsZXIgZmxhZ3MgZm9yICQxLCBvdmVycmlkaW5nIHBrZy1jb25maWddKWRubAorQUNfQVJHX1ZBUihbJDFdW19MSUJTXSwgW2xpbmtlciBmbGFncyBmb3IgJDEsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZ10pZG5sCisKK3BrZ19mYWlsZWQ9bm8KK0FDX01TR19DSEVDS0lORyhbZm9yICQxXSkKKworX1BLR19DT05GSUcoWyQxXVtfQ0ZMQUdTXSwgW2NmbGFnc10sIFskMl0pCitfUEtHX0NPTkZJRyhbJDFdW19MSUJTXSwgW2xpYnNdLCBbJDJdKQorCittNF9kZWZpbmUoW19QS0dfVEVYVF0sIFtBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzICQxW11fQ0ZMQUdTCithbmQgJDFbXV9MSUJTIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNhbGwgcGtnLWNvbmZpZy4KK1NlZSB0aGUgcGtnLWNvbmZpZyBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLl0pCisKK2lmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KKyAgIAlBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIF9QS0dfU0hPUlRfRVJST1JTX1NVUFBPUlRFRAorICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KKwkgICAgICAgICQxW11fUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1wcmludC1lcnJvcnMgIiQyIiAyPiYxYAorICAgICAgICBlbHNlIAorCSAgICAgICAgJDFbXV9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXByaW50LWVycm9ycyAiJDIiIDI+JjFgCisgICAgICAgIGZpCisJIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCisJZWNobyAiJCQxW11fUEtHX0VSUk9SUyIgPiZBU19NRVNTQUdFX0xPR19GRAorCisJbTRfZGVmYXVsdChbJDRdLCBbQUNfTVNHX0VSUk9SKAorW1BhY2thZ2UgcmVxdWlyZW1lbnRzICgkMikgd2VyZSBub3QgbWV0OgorCiskJDFfUEtHX0VSUk9SUworCitDb25zaWRlciBhZGp1c3RpbmcgdGhlIFBLR19DT05GSUdfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiB5b3UKK2luc3RhbGxlZCBzb2Z0d2FyZSBpbiBhIG5vbi1zdGFuZGFyZCBwcmVmaXguCisKK19QS0dfVEVYVF0pZG5sCisgICAgICAgIF0pCitlbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCisgICAgIAlBQ19NU0dfUkVTVUxUKFtub10pCisJbTRfZGVmYXVsdChbJDRdLCBbQUNfTVNHX0ZBSUxVUkUoCitbVGhlIHBrZy1jb25maWcgc2NyaXB0IGNvdWxkIG5vdCBiZSBmb3VuZCBvciBpcyB0b28gb2xkLiAgTWFrZSBzdXJlIGl0CitpcyBpbiB5b3VyIFBBVEggb3Igc2V0IHRoZSBQS0dfQ09ORklHIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBmdWxsCitwYXRoIHRvIHBrZy1jb25maWcuCisKK19QS0dfVEVYVAorCitUbyBnZXQgcGtnLWNvbmZpZywgc2VlIDxodHRwOi8vcGtnLWNvbmZpZy5mcmVlZGVza3RvcC5vcmcvPi5dKWRubAorICAgICAgICBdKQorZWxzZQorCSQxW11fQ0ZMQUdTPSRwa2dfY3ZfW10kMVtdX0NGTEFHUworCSQxW11fTElCUz0kcGtnX2N2X1tdJDFbXV9MSUJTCisgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisJJDMKK2ZpW11kbmwKK10pIyBQS0dfQ0hFQ0tfTU9EVUxFUwpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b2NvbmYvQXV0b200dGUvQzRjaGUucG0gYi9zaGFyZS9hdXRvY29uZi9BdXRvbTR0ZS9DNGNoZS5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTA4NGY1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b2NvbmYvQXV0b200dGUvQzRjaGUucG0KQEAgLTAsMCArMSwyNDIgQEAKKyMgYXV0b2NvbmYgLS0gY3JlYXRlIGBjb25maWd1cmUnIHVzaW5nIG00IG1hY3JvcworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK3BhY2thZ2UgQXV0b200dGU6OkM0Y2hlOworCis9aGVhZDEgTkFNRQorCitBdXRvbTR0ZTo6QzRjaGUgLSBhIHNpbmdsZSBtNCBydW4gcmVxdWVzdAorCis9aGVhZDEgU1lOT1BTSVMKKworICB1c2UgQXV0b200dGU6OkM0Y2hlOworCis9aGVhZDEgREVTQ1JJUFRJT04KKworVGhpcyBQZXJsIG1vZHVsZSBoYW5kbGVzIHRoZSBjYWNoZSBvZiBNNCBydW5zIHVzZWQgYnkgYXV0b200dGUuCisKKz1jdXQKKwordXNlIERhdGE6OkR1bXBlcjsKK3VzZSBBdXRvbTR0ZTo6UmVxdWVzdDsKK3VzZSBDYXJwOwordXNlIHN0cmljdDsKKworPW92ZXIgNAorCis9aXRlbSBAcmVxdWVzdAorCitMaXN0IG9mIHJlcXVlc3RzLgorCitXZSBjYW5ub3QgZGVjbGFyZSBpdCAibXkiIGFzIHRoZSBsb2FkaW5nLCBwZXJmb3JtZWQgdmlhICJkbyIsIHdvdWxkCityZWZlciB0byBhbm90aGVyIHNjb3BlLCBhbmQgQHJlcXVlc3Qgd291bGQgbm90IGJlIHVwZGF0ZWQuICBJdCB1c2VkIHRvCit3b3JrIHdpdGggIm15IiB2YXJzLCBhbmQgSSBkbyBub3Qga25vdyB3aGV0aGVyIHRoZSBjdXJyZW50IGJlaGF2aW9yCisoNS42KSBpcyB3YW50ZWQgb3Igbm90LgorCis9Y3V0CisKK3VzZSB2YXJzIHF3KEByZXF1ZXN0KTsKKworPWl0ZW0gQzwkcmVxID0gQXV0b200dGU6OkM0Y2hlLUU8Z3Q+cmV0cmlldmUgKCVhdHRyKT4KKworRmluZCBhIHJlcXVlc3Qgd2l0aCB0aGUgc2FtZSBwYXRoIGFuZCBpbnB1dC4KKworPWN1dAorCitzdWIgcmV0cmlldmUoJCUpCit7CisgIG15ICgkc2VsZiwgJWF0dHIpID0gQF87CisKKyAgZm9yZWFjaCAoQHJlcXVlc3QpCisgICAgeworICAgICAgIyBTYW1lIHBhdGguCisgICAgICBuZXh0CisJaWYgam9pbiAoIlxuIiwgQHskXy0+cGF0aH0pIG5lIGpvaW4gKCJcbiIsIEB7JGF0dHJ7cGF0aH19KTsKKworICAgICAgIyBTYW1lIGlucHV0cy4KKyAgICAgIG5leHQKKwlpZiBqb2luICgiXG4iLCBAeyRfLT5pbnB1dH0pIG5lIGpvaW4gKCJcbiIsIEB7JGF0dHJ7aW5wdXR9fSk7CisKKyAgICAgICMgRm91bmQgaXQuCisgICAgICByZXR1cm4gJF87CisgICAgfQorCisgIHJldHVybiB1bmRlZjsKK30KKworPWl0ZW0gQzwkcmVxID0gQXV0b200dGU6OkM0Y2hlLUU8Z3Q+cmVnaXN0ZXIgKCVhdHRyKT4KKworQ3JlYXRlIGFuZCByZWdpc3RlciBhIHJlcXVlc3QgZm9yIHRoZXNlIHBhdGggYW5kIGlucHV0LgorCis9Y3V0CisKKyMgJFJFUVVFU1QtT0JKCisjIHJlZ2lzdGVyICgkU0VMRiwgJUFUVFIpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE5FVyBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4KKyMgUHJpdmF0ZS4KK3N1YiByZWdpc3RlciAoJCUpCit7CisgIG15ICgkc2VsZiwgJWF0dHIpID0gQF87CisKKyAgIyBwYXRoIGFuZCBpbnB1dCBhcmUgdGhlIG9ubHkgSUQgZm9yIGEgcmVxdWVzdCBvYmplY3QuCisgIG15ICRvYmogPSBuZXcgQXV0b200dGU6OlJlcXVlc3QgKCdwYXRoJyAgPT4gJGF0dHJ7cGF0aH0sCisJCQkJICAgJ2lucHV0JyA9PiAkYXR0cntpbnB1dH0pOworICBwdXNoIEByZXF1ZXN0LCAkb2JqOworCisgICMgQXNzaWduIGFuIGlkIGZvciBjYWNoZSBmaWxlLgorICAkb2JqLT5pZCAoIiQjcmVxdWVzdCIpOworCisgIHJldHVybiAkb2JqOworfQorCisKKz1pdGVtIEM8JHJlcSA9IEF1dG9tNHRlOjpDNGNoZS1FPGd0PnJlcXVlc3QgKCVyZXF1ZXN0KT4KKworR2V0IChyZXRyaWV2ZSBvciBjcmVhdGUpIGEgcmVxdWVzdCBmb3IgdGhlIHBhdGggQzwkcmVxdWVzdHtwYXRofT4gYW5kCit0aGUgaW5wdXQgQzwkcmVxdWVzdHtpbnB1dH0+LgorCis9Y3V0CisKKyMgJFJFUVVFU1QtT0JKCisjIHJlcXVlc3QoJFNFTEYsICVSRVFVRVNUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N1YiByZXF1ZXN0ICgkJSkKK3sKKyAgbXkgKCRzZWxmLCAlcmVxdWVzdCkgPSBAXzsKKworICBteSAkcmVxID0KKyAgICBBdXRvbTR0ZTo6QzRjaGUtPnJldHJpZXZlICglcmVxdWVzdCkKKyAgICB8fCBBdXRvbTR0ZTo6QzRjaGUtPnJlZ2lzdGVyICglcmVxdWVzdCk7CisKKyAgIyBJZiB0aGVyZSBhcmUgbmV3IHRyYWNlcyB0byBwcm9kdWNlLCB0aGVuIHdlIGFyZSBub3QgdmFsaWQuCisgIGZvcmVhY2ggKEB7JHJlcXVlc3R7J21hY3JvJ319KQorICAgIHsKKyAgICAgIGlmICghIGV4aXN0cyAkeyRyZXEtPm1hY3JvfXskX30pCisJeworCSAgJHskcmVxLT5tYWNyb317JF99ID0gMTsKKwkgICRyZXEtPnZhbGlkICgwKTsKKwl9CisgICAgfQorCisgICMgSXQgd291bGQgYmUgZ3JlYXQgdG8gaGF2ZSAkUkVRIGNoZWNrIHRoYXQgaXQgaXMgdXAgdG8gZGF0ZSB3cnQKKyAgIyBpdHMgZGVwZW5kZW5jaWVzLCBidXQgdGhhdCByZXF1aXJlcyBnZXR0aW5nIHRyYWNlcyAodG8gZmV0Y2ggdGhlCisgICMgaW5jbHVkZWQgZmlsZXMpLCB3aGljaCBpcyBvdXQgb2YgdGhlIHNjb3BlIG9mIFJlcXVlc3QgKGN1cnJlbnRseT8pLgorCisgIHJldHVybiAkcmVxOworfQorCisKKz1pdGVtIEM8JHN0cmluZyA9IEF1dG9tNHRlOjpDNGNoZS1FPGd0Pm1hcnNoYWxsICgpPgorCitTZXJpYWxpemUgYWxsIHRoZSBjdXJyZW50IHJlcXVlc3RzLgorCis9Y3V0CisKKworIyBtYXJzaGFsbCgkU0VMRikKKyMgLS0tLS0tLS0tLS0tLS0tCitzdWIgbWFyc2hhbGwgKCQpCit7CisgIG15ICgkY2FsbGVyKSA9IEBfOworICBteSAkcmVzID0gJyc7CisKKyAgbXkgJG1hcnNoYWxsID0gRGF0YTo6RHVtcGVyLT5uZXcgKFtcQHJlcXVlc3RdLCBbcXcgKCpyZXF1ZXN0KV0pOworICAkbWFyc2hhbGwtPkluZGVudCgyKS0+VGVyc2UoMCk7CisgICRyZXMgPSAkbWFyc2hhbGwtPkR1bXAgLiAiXG4iOworCisgIHJldHVybiAkcmVzOworfQorCisKKz1pdGVtIEM8QXV0b200dGU6OkM0Y2hlLUU8Z3Q+c2F2ZSAoJGZpbGUpPgorCitTYXZlIHRoZSBjYWNoZSBpbiB0aGUgQzwkZmlsZT4gZmlsZSBvYmplY3QuCisKKz1jdXQKKworIyBTQVZFICgkRklMRSkKKyMgLS0tLS0tLS0tLS0tCitzdWIgc2F2ZSAoJCQpCit7CisgIG15ICgkc2VsZiwgJGZpbGUpID0gQF87CisKKyAgY29uZmVzcyAiY2Fubm90IHNhdmUgYSBzaW5nbGUgcmVxdWVzdFxuIgorICAgIGlmIHJlZiAoJHNlbGYpOworCisgICRmaWxlLT5zZWVrICgwLCAwKTsKKyAgJGZpbGUtPnRydW5jYXRlICgwKTsKKyAgcHJpbnQgJGZpbGUKKyAgICAiIyBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZC5cbiIsCisgICAgIiMgSXQgY29udGFpbnMgdGhlIGxpc3RzIG9mIG1hY3JvcyB3aGljaCBoYXZlIGJlZW4gdHJhY2VkLlxuIiwKKyAgICAiIyBJdCBjYW4gYmUgc2FmZWx5IHJlbW92ZWQuXG4iLAorICAgICJcbiIsCisgICAgJHNlbGYtPm1hcnNoYWxsOworfQorCisKKz1pdGVtIEM8QXV0b200dGU6OkM0Y2hlLUU8Z3Q+bG9hZCAoJGZpbGUpPgorCitMb2FkIHRoZSBjYWNoZSBmcm9tIHRoZSBDPCRmaWxlPiBmaWxlIG9iamVjdC4KKworPWN1dAorCisjIExPQUQgKCRGSUxFKQorIyAtLS0tLS0tLS0tLS0KK3N1YiBsb2FkICgkJCkKK3sKKyAgbXkgKCRzZWxmLCAkZmlsZSkgPSBAXzsKKyAgbXkgJGZuYW1lID0gJGZpbGUtPm5hbWU7CisKKyAgY29uZmVzcyAiY2Fubm90IGxvYWQgYSBzaW5nbGUgcmVxdWVzdFxuIgorICAgIGlmIHJlZiAoJHNlbGYpOworCisgIG15ICRjb250ZW50cyA9IGpvaW4gIiIsICRmaWxlLT5nZXRsaW5lczsKKworICBldmFsICRjb250ZW50czsKKworICBjb25mZXNzICJjYW5ub3QgZXZhbCAkZm5hbWU6ICRAXG4iIGlmICRAOworfQorCisKKz1oZWFkMSBTRUUgQUxTTworCitMPEF1dG9tNHRlOjpSZXF1ZXN0PgorCis9aGVhZDEgSElTVE9SWQorCitXcml0dGVuIGJ5IEFraW0gRGVtYWlsbGUgRTxsdD5GPGFraW1AZnJlZWZyaWVuZHMub3JnPkU8Z3Q+LgorCis9Y3V0CisKKzE7ICMgZm9yIHJlcXVpcmUKKworIyMjIFNldHVwICJHTlUiIHN0eWxlIGZvciBwZXJsLW1vZGUgYW5kIGNwZXJsLW1vZGUuCisjIyBMb2NhbCBWYXJpYWJsZXM6CisjIyBwZXJsLWluZGVudC1sZXZlbDogMgorIyMgcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1pbWFnaW5hcnktb2Zmc2V0OiAwCisjIyBwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWluZGVudC1sZXZlbDogMgorIyMgY3BlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1leHRyYS1uZXdsaW5lLWJlZm9yZS1icmFjZTogdAorIyMgY3BlcmwtbWVyZ2UtdHJhaWxpbmctZWxzZTogbmlsCisjIyBjcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgRW5kOgpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b2NvbmYvQXV0b200dGUvQ2hhbm5lbERlZnMucG0gYi9zaGFyZS9hdXRvY29uZi9BdXRvbTR0ZS9DaGFubmVsRGVmcy5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODYzZGQzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b2NvbmYvQXV0b200dGUvQ2hhbm5lbERlZnMucG0KQEAgLTAsMCArMSwzOTAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA2LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworcGFja2FnZSBBdXRvbTR0ZTo6Q2hhbm5lbERlZnM7CisKK3VzZSBBdXRvbTR0ZTo6Q2hhbm5lbHM7CisKKz1oZWFkMSBOQU1FCisKK0F1dG9tNHRlOjpDaGFubmVsRGVmcyAtIGNoYW5uZWwgZGVmaW5pdGlvbnMgZm9yIEF1dG9tYWtlIGFuZCBoZWxwZXIgZnVuY3Rpb25zCisKKz1oZWFkMSBTWU5PUFNJUworCisgIHVzZSBBdXRvbTR0ZTo6Q2hhbm5lbERlZnM7CisKKyAgcHJpbnQgQXV0b200dGU6OkNoYW5uZWxEZWZzOjp1c2FnZSAoKSwgIlxuIjsKKyAgcHJvZ19lcnJvciAoJE1FU1NBR0UsIFslT1BUSU9OU10pOworICBlcnJvciAoJFdIRVJFLCAkTUVTU0FHRSwgWyVPUFRJT05TXSk7CisgIGVycm9yICgkTUVTU0FHRSk7CisgIGZhdGFsICgkV0hFUkUsICRNRVNTQUdFLCBbJU9QVElPTlNdKTsKKyAgZmF0YWwgKCRNRVNTQUdFKTsKKyAgdmVyYiAoJE1FU1NBR0UsIFslT1BUSU9OU10pOworICBzd2l0Y2hfd2FybmluZyAoJENBVEVHT1JZKTsKKyAgcGFyc2VfV0FSTklOR1MgKCk7CisgIHBhcnNlX3dhcm5pbmdzICgkT1BUSU9OLCAkQVJHVU1FTlQpOworICBBdXRvbTR0ZTo6Q2hhbm5lbERlZnM6OnNldF9zdHJpY3RuZXNzICgkU1RSSUNUTkVTU19OQU1FKTsKKworPWhlYWQxIERFU0NSSVBUSU9OCisKK1RoaXMgcGFja2FnZSBkZWZpbmVzIGNoYW5uZWxzIHRoYXQgY2FuIGJlIHVzZWQgaW4gQXV0b21ha2UgdG8KK291dHB1dCBkaWFnbm9zdGljcyBhbmQgb3RoZXIgbWVzc2FnZXMgKHZpYSBDPG1zZygpPikuICBJdCBhbHNvIGRlZmluZXMKK3NvbWUgaGVscGVyIGZ1bmN0aW9uIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZXNlIGNoYW5uZWxzLCBhbmQgc29tZQorc2hvcnRoYW5kIGZ1bmN0aW9uIHRvIG91dHB1dCBvbiBzcGVjaWZpYyBjaGFubmVscy4KKworPWN1dAorCit1c2UgNS4wMDU7Cit1c2Ugc3RyaWN0OwordXNlIEV4cG9ydGVyOworCit1c2UgdmFycyBxdyAoQElTQSBARVhQT1JUKTsKKworQElTQSA9IHF3IChFeHBvcnRlcik7CitARVhQT1JUID0gcXcgKCZwcm9nX2Vycm9yICZlcnJvciAmZmF0YWwgJnZlcmIKKwkgICAgICAmc3dpdGNoX3dhcm5pbmcgJnBhcnNlX1dBUk5JTkdTICZwYXJzZV93YXJuaW5ncyk7CisKKz1oZWFkMiBDSEFOTkVMUworCitUaGUgZm9sbG93aW5nIGNoYW5uZWxzIGNhbiBiZSB1c2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCBvZgorQzxBdXRvbTR0ZTo6Q2hhbm5lbDo6bXNnPi4gIEZvciBzb21lIG9mIHRoZW0gd2UgbGlzdCBhIHNob3J0aGFuZAorZnVuY3Rpb24gdGhhdCBtYWtlcyB0aGUgY29kZSBtb3JlIHJlYWRhYmxlLgorCis9b3ZlciA0CisKKz1pdGVtIEM8ZmF0YWw+CisKK0ZhdGFsIGVycm9ycy4gIFVzZSBDPCZmYXRhbD4gdG8gc2VuZCBtZXNzYWdlcyBvdmVyIHRoaXMgY2hhbm5lbC4KKworPWl0ZW0gQzxlcnJvcj4KKworQ29tbW9uIGVycm9ycy4gICBVc2UgQzwmZXJyb3I+IHRvIHNlbmQgbWVzc2FnZXMgb3ZlciB0aGlzIGNoYW5uZWwuCisKKz1pdGVtIEM8ZXJyb3ItZ251PgorCitFcnJvcnMgcmVsYXRlZCB0byBHTlUgU3RhbmRhcmRzLgorCis9aXRlbSBDPGVycm9yLWdudS93YXJuPgorCitFcnJvcnMgcmVsYXRlZCB0byBHTlUgU3RhbmRhcmRzIHRoYXQgc2hvdWxkIGJlIHdhcm5pbmdzIGluICJmb3JlaWduIiBtb2RlLgorCis9aXRlbSBDPGVycm9yLWduaXRzPgorCitFcnJvcnMgcmVsYXRlZCB0byBHTklUUyBTdGFuZGFyZHMgKHNpbGVudCBieSBkZWZhdWx0KS4KKworPWl0ZW0gQzxhdXRvbWFrZT4KKworSW50ZXJuYWwgZXJyb3JzLiAgVXNlIEM8JnByb2dfZXJyb3I+IHRvIHNlbmQgbWVzc2FnZXMgb3ZlciB0aGlzIGNoYW5uZWwuCisKKz1pdGVtIEM8Y3Jvc3M+CisKK0NvbnN0cnVjdHMgY29tcHJvbWlzaW5nIHRoZSBjcm9zcy1jb21waWxhdGlvbiBvZiB0aGUgcGFja2FnZS4KKworPWl0ZW0gQzxnbnU+CisKK1dhcm5pbmdzIHJlbGF0ZWQgdG8gR05VIENvZGluZyBTdGFuZGFyZHMuCisKKz1pdGVtIEM8b2Jzb2xldGU+CisKK1dhcm5pbmdzIGFib3V0IG9ic29sZXRlIGZlYXR1cmVzIChzaWxlbnQgYnkgZGVmYXVsdCkuCisKKz1pdGVtIEM8b3ZlcnJpZGU+CisKK1dhcm5pbmdzIGFib3V0IHVzZXIgcmVkZWZpbml0aW9ucyBvZiBBdXRvbWFrZSBydWxlcyBvcgordmFyaWFibGVzIChzaWxlbnQgYnkgZGVmYXVsdCkuCisKKz1pdGVtIEM8cG9ydGFiaWxpdHk+CisKK1dhcm5pbmdzIGFib3V0IG5vbi1wb3J0YWJsZSBjb25zdHJ1Y3RzLgorCis9aXRlbSBDPHN5bnRheD4KKworV2FybmluZ3MgYWJvdXQgd2VpcmQgc3ludGF4LCB1bnVzZWQgdmFyaWFibGVzLCB0eXBvcy4uLgorCis9aXRlbSBDPHVuc3VwcG9ydGVkPgorCitXYXJuaW5ncyBhYm91dCB1bnN1cHBvcnRlZCAob3IgbWlzLXN1cHBvcnRlZCkgZmVhdHVyZXMuCisKKz1pdGVtIEM8dmVyYj4KKworTWVzc2FnZXMgb3V0cHV0IGluIEM8LS12ZXJib3NlPiBtb2RlLiAgVXNlIEM8JnZlcmI+IHRvIHNlbmQgc3VjaCBtZXNzYWdlcy4KKworPWl0ZW0gQzxub3RlPgorCitJbmZvcm1hdGl2ZSBtZXNzYWdlcy4KKworPWJhY2sKKworPWN1dAorCisjIEluaXRpYWxpemUgb3VyIGxpc3Qgb2YgZXJyb3Ivd2FybmluZyBjaGFubmVscy4KKyMgRG8gbm90IGZvcmdldCB0byB1cGRhdGUgJnVzYWdlIGFuZCB0aGUgbWFudWFsCisjIGlmIHlvdSBhZGQgb3IgY2hhbmdlIGEgd2FybmluZyBjaGFubmVsLgorCityZWdpc3Rlcl9jaGFubmVsICdmYXRhbCcsIHR5cGUgPT4gJ2ZhdGFsJywgb3JkZXJlZCA9PiAwOworcmVnaXN0ZXJfY2hhbm5lbCAnZXJyb3InLCB0eXBlID0+ICdlcnJvcic7CityZWdpc3Rlcl9jaGFubmVsICdlcnJvci1nbnUnLCB0eXBlID0+ICdlcnJvcic7CityZWdpc3Rlcl9jaGFubmVsICdlcnJvci1nbnUvd2FybicsIHR5cGUgPT4gJ2Vycm9yJzsKK3JlZ2lzdGVyX2NoYW5uZWwgJ2Vycm9yLWduaXRzJywgdHlwZSA9PiAnZXJyb3InLCBzaWxlbnQgPT4gMTsKK3JlZ2lzdGVyX2NoYW5uZWwgJ2F1dG9tYWtlJywgdHlwZSA9PiAnZmF0YWwnLCBiYWNrdHJhY2UgPT4gMSwKKyAgaGVhZGVyID0+ICgiIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIgLgorCSAgICAgIiMjIEludGVybmFsIEVycm9yICMjXG4iIC4KKwkgICAgICIjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIiksCisgIGZvb3RlciA9PiAiXG5QbGVhc2UgY29udGFjdCA8YnVnLWF1dG9tYWtlXEBnbnUub3JnPi4iLAorICBvcmRlcmVkID0+IDA7CisKK3JlZ2lzdGVyX2NoYW5uZWwgJ2Nyb3NzJywgdHlwZSA9PiAnd2FybmluZycsIHNpbGVudCA9PiAxOworcmVnaXN0ZXJfY2hhbm5lbCAnZ251JywgdHlwZSA9PiAnd2FybmluZyc7CityZWdpc3Rlcl9jaGFubmVsICdvYnNvbGV0ZScsIHR5cGUgPT4gJ3dhcm5pbmcnLCBzaWxlbnQgPT4gMTsKK3JlZ2lzdGVyX2NoYW5uZWwgJ292ZXJyaWRlJywgdHlwZSA9PiAnd2FybmluZycsIHNpbGVudCA9PiAxOworcmVnaXN0ZXJfY2hhbm5lbCAncG9ydGFiaWxpdHknLCB0eXBlID0+ICd3YXJuaW5nJywgc2lsZW50ID0+IDE7CityZWdpc3Rlcl9jaGFubmVsICdzeW50YXgnLCB0eXBlID0+ICd3YXJuaW5nJzsKK3JlZ2lzdGVyX2NoYW5uZWwgJ3Vuc3VwcG9ydGVkJywgdHlwZSA9PiAnd2FybmluZyc7CisKK3JlZ2lzdGVyX2NoYW5uZWwgJ3ZlcmInLCB0eXBlID0+ICdkZWJ1ZycsIHNpbGVudCA9PiAxLCBvcmRlcmVkID0+IDA7CityZWdpc3Rlcl9jaGFubmVsICdub3RlJywgdHlwZSA9PiAnZGVidWcnLCBzaWxlbnQgPT4gMDsKKworPWhlYWQyIEZVTkNUSU9OUworCis9b3ZlciA0CisKKz1pdGVtIEM8dXNhZ2UgKCk+CisKK1JldHVybiB0aGUgd2FybmluZyBjYXRlZ29yeSBkZXNjcmlwdGlvbnMuCisKKz1jdXQKKworc3ViIHVzYWdlICgpCit7CisgIHJldHVybiAiV2FybmluZyBjYXRlZ29yaWVzIGluY2x1ZGU6CisgIGBjcm9zcycgICAgICAgICBjcm9zcyBjb21waWxhdGlvbiBpc3N1ZXMKKyAgYGdudScgICAgICAgICAgIEdOVSBjb2Rpbmcgc3RhbmRhcmRzIChkZWZhdWx0IGluIGdudSBhbmQgZ25pdHMgbW9kZXMpCisgIGBvYnNvbGV0ZScgICAgICBvYnNvbGV0ZSBmZWF0dXJlcyBvciBjb25zdHJ1Y3Rpb25zCisgIGBvdmVycmlkZScgICAgICB1c2VyIHJlZGVmaW5pdGlvbnMgb2YgQXV0b21ha2UgcnVsZXMgb3IgdmFyaWFibGVzCisgIGBwb3J0YWJpbGl0eScgICBwb3J0YWJpbGl0eSBpc3N1ZXMgKGRlZmF1bHQgaW4gZ251IGFuZCBnbml0cyBtb2RlcykKKyAgYHN5bnRheCcgICAgICAgIGR1YmlvdXMgc3ludGFjdGljIGNvbnN0cnVjdHMgKGRlZmF1bHQpCisgIGB1bnN1cHBvcnRlZCcgICB1bnN1cHBvcnRlZCBvciBpbmNvbXBsZXRlIGZlYXR1cmVzIChkZWZhdWx0KQorICBgYWxsJyAgICAgICAgICAgYWxsIHRoZSB3YXJuaW5ncworICBgbm8tQ0FURUdPUlknICAgdHVybiBvZmYgd2FybmluZ3MgaW4gQ0FURUdPUlkKKyAgYG5vbmUnICAgICAgICAgIHR1cm4gb2ZmIGFsbCB0aGUgd2FybmluZ3MKKyAgYGVycm9yJyAgICAgICAgIHRyZWF0IHdhcm5pbmdzIGFzIGVycm9ycyI7Cit9CisKKz1pdGVtIEM8cHJvZ19lcnJvciAoJE1FU1NBR0UsIFslT1BUSU9OU10pPgorCitTaWduYWwgYSBwcm9ncmFtbWluZyBlcnJvciAob24gY2hhbm5lbCBDPGF1dG9tYWtlPiksCitkaXNwbGF5IEM8JE1FU1NBR0U+LCBhbmQgZXhpdCAxLgorCis9Y3V0CisKK3N1YiBwcm9nX2Vycm9yICgkOyUpCit7CisgIG15ICgkbXNnLCAlb3B0cykgPSBAXzsKKyAgbXNnICdhdXRvbWFrZScsICcnLCAkbXNnLCAlb3B0czsKK30KKworPWl0ZW0gQzxlcnJvciAoJFdIRVJFLCAkTUVTU0FHRSwgWyVPUFRJT05TXSk+CisKKz1pdGVtIEM8ZXJyb3IgKCRNRVNTQUdFKT4KKworVW5jYXRlZ29yaXplZCBlcnJvcnMuCisKKz1jdXQKKworc3ViIGVycm9yICgkOyQlKQoreworICBteSAoJHdoZXJlLCAkbXNnLCAlb3B0cykgPSBAXzsKKyAgbXNnICgnZXJyb3InLCAkd2hlcmUsICRtc2csICVvcHRzKTsKK30KKworPWl0ZW0gQzxmYXRhbCAoJFdIRVJFLCAkTUVTU0FHRSwgWyVPUFRJT05TXSk+CisKKz1pdGVtIEM8ZmF0YWwgKCRNRVNTQUdFKT4KKworRmF0YWwgZXJyb3JzLgorCis9Y3V0CisKK3N1YiBmYXRhbCAoJDskJSkKK3sKKyAgbXkgKCR3aGVyZSwgJG1zZywgJW9wdHMpID0gQF87CisgIG1zZyAoJ2ZhdGFsJywgJHdoZXJlLCAkbXNnLCAlb3B0cyk7Cit9CisKKz1pdGVtIEM8dmVyYiAoJE1FU1NBR0UsIFslT1BUSU9OU10pPgorCitDPC0tdmVyYm9zZT4gbWVzc2FnZXMuCisKKz1jdXQKKworc3ViIHZlcmIgKCQ7JSkKK3sKKyAgbXkgKCRtc2csICVvcHRzKSA9IEBfOworICBtc2cgJ3ZlcmInLCAnJywgJG1zZywgJW9wdHM7Cit9CisKKz1pdGVtIEM8c3dpdGNoX3dhcm5pbmcgKCRDQVRFR09SWSk+CisKK0lmIEM8JENBVEVHT1JZPiBpcyBDPG11bWJsZT4sIHR1cm4gb24gY2hhbm5lbCBDPG11bWJsZT4uCitJZiBpdCBpcyBDPG5vLW11bWJsZT4sIHR1cm4gQzxtdW1ibGU+IG9mZi4KK0Vsc2UgaGFuZGxlIEM8YWxsPiBhbmQgQzxub25lPiBmb3IgY29tcGxldGVuZXNzLgorCis9Y3V0CisKK3N1YiBzd2l0Y2hfd2FybmluZyAoJCkKK3sKKyAgbXkgKCRjYXQpID0gQF87CisgIG15ICRoYXNfbm8gPSAwOworCisgIGlmICgkY2F0ID1+IC9ebm8tKC4qKSQvKQorICAgIHsKKyAgICAgICRjYXQgPSAkMTsKKyAgICAgICRoYXNfbm8gPSAxOworICAgIH0KKworICBpZiAoJGNhdCBlcSAnYWxsJykKKyAgICB7CisgICAgICBzZXR1cF9jaGFubmVsX3R5cGUgJ3dhcm5pbmcnLCBzaWxlbnQgPT4gJGhhc19ubzsKKyAgICB9CisgIGVsc2lmICgkY2F0IGVxICdub25lJykKKyAgICB7CisgICAgICBzZXR1cF9jaGFubmVsX3R5cGUgJ3dhcm5pbmcnLCBzaWxlbnQgPT4gISAkaGFzX25vOworICAgIH0KKyAgZWxzaWYgKCRjYXQgZXEgJ2Vycm9yJykKKyAgICB7CisgICAgICAkd2FybmluZ3NfYXJlX2Vycm9ycyA9ICEgJGhhc19ubzsKKyAgICAgICMgU2V0IGV4aXQgY29kZSBpZiBQZXJsIHdhcm5zIGFib3V0IHNvbWV0aGluZworICAgICAgIyAobGlrZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcykuCisgICAgICAkU0lHeyJfX1dBUk5fXyJ9ID0KKwkkaGFzX25vID8gJ0RFRkFVTFQnIDogc3ViIHsgcHJpbnQgU1RERVJSIEBfOyAkZXhpdF9jb2RlID0gMTsgfTsKKyAgICB9CisgIGVsc2lmIChjaGFubmVsX3R5cGUgKCRjYXQpIGVxICd3YXJuaW5nJykKKyAgICB7CisgICAgICBzZXR1cF9jaGFubmVsICRjYXQsIHNpbGVudCA9PiAkaGFzX25vOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKKz1pdGVtIEM8cGFyc2VfV0FSTklOR1MgKCk+CisKK1BhcnNlIHRoZSBXQVJOSU5HUyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworPWN1dAorCitzdWIgcGFyc2VfV0FSTklOR1MgKCkKK3sKKyAgaWYgKGV4aXN0cyAkRU5WeydXQVJOSU5HUyd9KQorICAgIHsKKyAgICAgICMgSWdub3JlIHVua25vd24gY2F0ZWdvcmllcy4gIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBXQVJOSU5HUworICAgICAgIyBzaG91bGQgYmUgaG9ub3JlZCBieSBtYW55IHRvb2xzLgorICAgICAgc3dpdGNoX3dhcm5pbmcgJF8gZm9yZWFjaCAoc3BsaXQgKCcsJywgJEVOVnsnV0FSTklOR1MnfSkpOworICAgIH0KK30KKworPWl0ZW0gQzxwYXJzZV93YXJuaW5ncyAoJE9QVElPTiwgQEFSR1VNRU5UKT4KKworUGFyc2UgdGhlIGFyZ3VtZW50IG9mIEM8LS13YXJuaW5nPUNBVEVHT1JZPiBvciBDPC1XQ0FURUdPUlk+LgorCitDPCRPUFRJT05TPiBpcyBDPCItLXdhcm5pbmciPiBvciBDPCItVyI+LCBDPEBBUkdVTUVOVD4gaXMgYSBsaXN0IG9mCitDPENBVEVHT1JZPi4KKworVGhpcyBjYW4gYmUgdXNlZCBhcyBhbiBhcmd1bWVudCB0byBDPEdldG9wdD4uCisKKz1jdXQKKworc3ViIHBhcnNlX3dhcm5pbmdzICgkQCkKK3sKKyAgbXkgKCRvcHQsIEBjYXRlZ29yaWVzKSA9IEBfOworCisgIGZvcmVhY2ggbXkgJGNhdCAobWFwIHsgc3BsaXQgJywnIH0gQGNhdGVnb3JpZXMpCisgICAgeworICAgICAgbXNnICd1bnN1cHBvcnRlZCcsICJ1bmtub3duIHdhcm5pbmcgY2F0ZWdvcnkgYCRjYXQnIgorCWlmIHN3aXRjaF93YXJuaW5nICRjYXQ7CisgICAgfQorfQorCis9aXRlbSBDPHNldF9zdHJpY3RuZXNzICgkU1RSSUNUTkVTU19OQU1FKT4KKworQ29uZmlndXJlIGNoYW5uZWxzIGZvciBzdHJpY3RuZXNzIEM8JFNUUklDVE5FU1NfTkFNRT4uCisKKz1jdXQKKworc3ViIHNldF9zdHJpY3RuZXNzICgkKQoreworICBteSAoJG5hbWUpID0gQF87CisKKyAgaWYgKCRuYW1lIGVxICdnbnUnKQorICAgIHsKKyAgICAgIHNldHVwX2NoYW5uZWwgJ2Vycm9yLWdudScsIHNpbGVudCA9PiAwOworICAgICAgc2V0dXBfY2hhbm5lbCAnZXJyb3ItZ251L3dhcm4nLCBzaWxlbnQgPT4gMCwgdHlwZSA9PiAnZXJyb3InOworICAgICAgc2V0dXBfY2hhbm5lbCAnZXJyb3ItZ25pdHMnLCBzaWxlbnQgPT4gMTsKKyAgICAgIHNldHVwX2NoYW5uZWwgJ3BvcnRhYmlsaXR5Jywgc2lsZW50ID0+IDA7CisgICAgICBzZXR1cF9jaGFubmVsICdnbnUnLCBzaWxlbnQgPT4gMDsKKyAgICB9CisgIGVsc2lmICgkbmFtZSBlcSAnZ25pdHMnKQorICAgIHsKKyAgICAgIHNldHVwX2NoYW5uZWwgJ2Vycm9yLWdudScsIHNpbGVudCA9PiAwOworICAgICAgc2V0dXBfY2hhbm5lbCAnZXJyb3ItZ251L3dhcm4nLCBzaWxlbnQgPT4gMCwgdHlwZSA9PiAnZXJyb3InOworICAgICAgc2V0dXBfY2hhbm5lbCAnZXJyb3ItZ25pdHMnLCBzaWxlbnQgPT4gMDsKKyAgICAgIHNldHVwX2NoYW5uZWwgJ3BvcnRhYmlsaXR5Jywgc2lsZW50ID0+IDA7CisgICAgICBzZXR1cF9jaGFubmVsICdnbnUnLCBzaWxlbnQgPT4gMDsKKyAgICB9CisgIGVsc2lmICgkbmFtZSBlcSAnZm9yZWlnbicpCisgICAgeworICAgICAgc2V0dXBfY2hhbm5lbCAnZXJyb3ItZ251Jywgc2lsZW50ID0+IDE7CisgICAgICBzZXR1cF9jaGFubmVsICdlcnJvci1nbnUvd2FybicsIHNpbGVudCA9PiAwLCB0eXBlID0+ICd3YXJuaW5nJzsKKyAgICAgIHNldHVwX2NoYW5uZWwgJ2Vycm9yLWduaXRzJywgc2lsZW50ID0+IDE7CisgICAgICBzZXR1cF9jaGFubmVsICdwb3J0YWJpbGl0eScsIHNpbGVudCA9PiAxOworICAgICAgc2V0dXBfY2hhbm5lbCAnZ251Jywgc2lsZW50ID0+IDE7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcHJvZ19lcnJvciAibGV2ZWwgYCRuYW1lJyBub3QgcmVjb2duaXplZFxuIjsKKyAgICB9Cit9CisKKz1iYWNrCisKKz1oZWFkMSBTRUUgQUxTTworCitMPEF1dG9tNHRlOjpDaGFubmVscz4KKworPWhlYWQxIEhJU1RPUlkKKworV3JpdHRlbiBieSBBbGV4YW5kcmUgRHVyZXQtTHV0eiBFPGx0PkY8YWRsQGdudS5vcmc+RTxndD4uCisKKz1jdXQKKworIyMjIFNldHVwICJHTlUiIHN0eWxlIGZvciBwZXJsLW1vZGUgYW5kIGNwZXJsLW1vZGUuCisjIyBMb2NhbCBWYXJpYWJsZXM6CisjIyBwZXJsLWluZGVudC1sZXZlbDogMgorIyMgcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1pbWFnaW5hcnktb2Zmc2V0OiAwCisjIyBwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWluZGVudC1sZXZlbDogMgorIyMgY3BlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1leHRyYS1uZXdsaW5lLWJlZm9yZS1icmFjZTogdAorIyMgY3BlcmwtbWVyZ2UtdHJhaWxpbmctZWxzZTogbmlsCisjIyBjcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgRW5kOgpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b2NvbmYvQXV0b200dGUvQ2hhbm5lbHMucG0gYi9zaGFyZS9hdXRvY29uZi9BdXRvbTR0ZS9DaGFubmVscy5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWRjZWFmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b2NvbmYvQXV0b200dGUvQ2hhbm5lbHMucG0KQEAgLTAsMCArMSw4MjcgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LCAyMDA2LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoZSBtYWluIGNvcHkgb2YgdGhpcyBmaWxlIGlzIGluIEF1dG9tYWtlJ3MgQ1ZTIHJlcG9zaXRvcnkuICMKKyMgVXBkYXRlcyBzaG91bGQgYmUgc2VudCB0byBhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmcuICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3BhY2thZ2UgQXV0b200dGU6OkNoYW5uZWxzOworCis9aGVhZDEgTkFNRQorCitBdXRvbTR0ZTo6Q2hhbm5lbHMgLSBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgZXJyb3IgYW5kIHdhcm5pbmcgbWFuYWdlbWVudAorCis9aGVhZDEgU1lOT1BTSVMKKworICB1c2UgQXV0b200dGU6OkNoYW5uZWxzOworCisgICMgUmVnaXN0ZXIgYSBjaGFubmVsIHRvIG91dHB1dCB3YXJuaW5ncyBhYm91dCB1bnVzZWQgdmFyaWFibGVzLgorICByZWdpc3Rlcl9jaGFubmVsICd1bnVzZWQnLCB0eXBlID0+ICd3YXJuaW5nJzsKKworICAjIFJlZ2lzdGVyIGEgY2hhbm5lbCBmb3Igc3lzdGVtIGVycm9ycy4KKyAgcmVnaXN0ZXJfY2hhbm5lbCAnc3lzdGVtJywgdHlwZSA9PiAnZXJyb3InLCBleGl0X2NvZGUgPT4gNDsKKworICAjIE91dHB1dCBhIG1lc3NhZ2Ugb24gY2hhbm5lbCAndW51c2VkJy4KKyAgbXNnICd1bnVzZWQnLCAiJGZpbGU6JGxpbmUiLCAidW51c2VkIHZhcmlhYmxlIGAkdmFyJyI7CisKKyAgIyBNYWtlIHRoZSAndW51c2VkJyBjaGFubmVsIHNpbGVudC4KKyAgc2V0dXBfY2hhbm5lbCAndW51c2VkJywgc2lsZW50ID0+IDE7CisKKyAgIyBUdXJuIG9uIGFsbCBjaGFubmVscyBvZiB0eXBlICd3YXJuaW5nJy4KKyAgc2V0dXBfY2hhbm5lbF90eXBlICd3YXJuaW5nJywgc2lsZW50ID0+IDA7CisKKyAgIyBSZWRpcmVjdCBhbGwgY2hhbm5lbHMgdG8gcHVzaCBtZXNzYWdlcyBvbiBhIFRocmVhZDo6UXVldWUgdXNpbmcKKyAgIyB0aGUgc3BlY2lmaWVkIHNlcmlhbGl6YXRpb24ga2V5LgorICBzZXR1cF9jaGFubmVsX3F1ZXVlICRxdWV1ZSwgJGtleTsKKworICAjIE91dHB1dCBhIG1lc3NhZ2UgcGVuZGluZyBpbiBhIFRocmVhZDo6UXVldWUuCisgIHBvcF9jaGFubmVsX3F1ZXVlICRxdWV1ZTsKKworICAjIFRyZWF0IGFsbCB3YXJuaW5ncyBhcyBlcnJvcnMuCisgICR3YXJuaW5nc19hcmVfZXJyb3JzID0gMTsKKworICAjIEV4aXQgd2l0aCB0aGUgZ3JlYXRlc3QgZXhpdCBjb2RlIGVuY291bnRlcmVkIHNvIGZhci4KKyAgZXhpdCAkZXhpdF9jb2RlOworCis9aGVhZDEgREVTQ1JJUFRJT04KKworVGhpcyBwZXJsIG1vZHVsZSBwcm92aWRlcyBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgZGlhZ25vc3RpYworY2hhbm5lbHMgaW4gcHJvZ3JhbXMuICBDaGFubmVscyBjYW4gYmUgcmVnaXN0ZXJlZCB0byBjb252ZXkgZmF0YWwsCitlcnJvciwgd2FybmluZywgb3IgZGVidWcgbWVzc2FnZXMuICBFYWNoIGNoYW5uZWwgaGFzIHZhcmlvdXMgb3B0aW9ucworKGUuZy4gaXMgdGhlIGNoYW5uZWwgc2lsZW50LCBzaG91bGQgZHVwbGljYXRlIG1lc3NhZ2VzIGJlIHJlbW92ZWQsCitldGMuKSB0aGF0IGNhbiBhbHNvIGJlIG92ZXJyaWRkZW4gb24gYSBwZXItbWVzc2FnZSBiYXNpcy4KKworPWN1dAorCit1c2UgNS4wMDU7Cit1c2Ugc3RyaWN0OwordXNlIEV4cG9ydGVyOwordXNlIENhcnA7Cit1c2UgRmlsZTo6QmFzZW5hbWU7CisKK3VzZSB2YXJzIHF3IChASVNBIEBFWFBPUlQgJWNoYW5uZWxzICRtZSk7CisKK0BJU0EgPSBxdyAoRXhwb3J0ZXIpOworQEVYUE9SVCA9IHF3ICgkZXhpdF9jb2RlICR3YXJuaW5nc19hcmVfZXJyb3JzCisJICAgICAgJnJlc2V0X2xvY2FsX2R1cGxpY2F0ZXMgJnJlc2V0X2dsb2JhbF9kdXBsaWNhdGVzCisJICAgICAgJnJlZ2lzdGVyX2NoYW5uZWwgJm1zZyAmZXhpc3RzX2NoYW5uZWwgJmNoYW5uZWxfdHlwZQorCSAgICAgICZzZXR1cF9jaGFubmVsICZzZXR1cF9jaGFubmVsX3R5cGUKKwkgICAgICAmZHVwX2NoYW5uZWxfc2V0dXAgJmRyb3BfY2hhbm5lbF9zZXR1cAorCSAgICAgICZidWZmZXJfbWVzc2FnZXMgJmZsdXNoX21lc3NhZ2VzCisJICAgICAgJnNldHVwX2NoYW5uZWxfcXVldWUgJnBvcF9jaGFubmVsX3F1ZXVlCisJICAgICAgVVNfR0xPQkFMIFVTX0xPQ0FMCisJICAgICAgVVBfTk9ORSBVUF9URVhUIFVQX0xPQ19URVhUKTsKKworJG1lID0gYmFzZW5hbWUgJDA7CisKKz1oZWFkMiBHbG9iYWwgVmFyaWFibGVzCisKKz1vdmVyIDQKKworPWl0ZW0gQzwkZXhpdF9jb2RlPgorCitUaGUgZ3JlYXRlc3QgZXhpdCBjb2RlIHNlZW4gc28gZmFyLiBDPCRleGl0X2NvZGU+IGlzIHVwZGF0ZWQgZnJvbQordGhlIEM8ZXhpdF9jb2RlPiBvcHRpb25zIG9mIEM8ZmF0YWw+IGFuZCBDPGVycm9yPiBjaGFubmVscy4KKworPWN1dAorCit1c2UgdmFycyBxdyAoJGV4aXRfY29kZSk7CiskZXhpdF9jb2RlID0gMDsKKworPWl0ZW0gQzwkd2FybmluZ3NfYXJlX2Vycm9ycz4KKworU2V0IHRoaXMgdmFyaWFibGUgdG8gMSBpZiB3YXJuaW5nIG1lc3NhZ2VzIHNob3VsZCBiZSB0cmVhdGVkIGFzCitlcnJvcnMgKGkuZS4gaWYgdGhleSBzaG91bGQgdXBkYXRlIEM8JGV4aXRfY29kZT4pLgorCis9Y3V0CisKK3VzZSB2YXJzIHF3ICgkd2FybmluZ3NfYXJlX2Vycm9ycyk7Ciskd2FybmluZ3NfYXJlX2Vycm9ycyA9IDA7CisKKz1iYWNrCisKKz1oZWFkMiBDb25zdGFudHMKKworPW92ZXIgNAorCis9aXRlbSBDPFVQX05PTkU+LCBDPFVQX1RFWFQ+LCBDPFVQX0xPQ19URVhUPgorCitQb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSBDPHVuaXFfcGFydD4gb3B0aW9ucy4gIFRoaXMgc2VsZWN0cyB0aGUgcGFydAorb2YgdGhlIG1lc3NhZ2UgdGhhdCBzaG91bGQgYmUgY29uc2lkZXJlZCB3aGVuIGZpbHRlcmluZyBvdXQgZHVwbGljYXRlcy4KK0lmIEM8VVBfTE9DX1RFWFQ+IGlzIHVzZWQsIHRoZSBsb2NhdGlvbiBhbmQgdGhlIGV4cGxhbmF0aW9uIG1lc3NhZ2UKK2FyZSB1c2VkIGZvciBmaWx0ZXJpbmcuICBJZiBDPFVQX1RFWFQ+IGlzIHVzZWQsIG9ubHkgdGhlIGV4cGxhbmF0aW9uCittZXNzYWdlIGlzIHVzZWQgKHNvIHRoZSBzYW1lIG1lc3NhZ2Ugd2lsbCBiZSBmaWx0ZXJlZCBvdXQgaWYgaXQgYXBwZWFycworYXQgZGlmZmVyZW50IGxvY2F0aW9ucykuICBDPFVQX05PTkU+IG1lYW5zIHRoYXQgZHVwbGljYXRlIG1lc3NhZ2VzCitzaG91bGQgYmUgb3V0cHV0LgorCis9Y3V0CisKK3VzZSBjb25zdGFudCBVUF9OT05FID0+IDA7Cit1c2UgY29uc3RhbnQgVVBfVEVYVCA9PiAxOwordXNlIGNvbnN0YW50IFVQX0xPQ19URVhUID0+IDI7CisKKz1pdGVtIEM8VVNfTE9DQUw+LCBDPFVTX0dMT0JBTD4KKworUG9zc2libGUgdmFsdWVzIGZvciB0aGUgQzx1bmlxX3Njb3BlPiBvcHRpb25zLgorVXNlIEM8VVNfR0xPQkFMPiBmb3IgZXJyb3IgbWVzc2FnZXMgdGhhdCBzaG91bGQgYmUgcHJpbnRlZCBvbmx5CitvbmNlIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtLCBDPFVTX0xPQ0FMPiBmb3IgbWVzc2FnZSB0aGF0CitzaG91bGQgYmUgcHJpbnRlZCBvbmx5IG9uY2UgcGVyIGZpbGUuICAoQWN0dWFsbHksIEM8Q2hhbm5lbHM+IGRvZXMgbm90CitkbyB0aGlzIG5vdyB3aGVuIGZpbGVzIGFyZSBjaGFuZ2VkLCBpdCByZWxpZXMgb24geW91IGNhbGxpbmcKK0M8cmVzZXRfbG9jYWxfZHVwbGljYXRlcz4gd2hlbiB0aGlzIGhhcHBlbnMuKQorCis9Y3V0CisKKyMgcG9zc2libGUgdmFsdWVzIGZvciB1bmlxX3Njb3BlCit1c2UgY29uc3RhbnQgVVNfTE9DQUwgPT4gMDsKK3VzZSBjb25zdGFudCBVU19HTE9CQUwgPT4gMTsKKworPWJhY2sKKworPWhlYWQyIE9wdGlvbnMKKworQ2hhbm5lbHMgYWNjZXB0IHRoZSBvcHRpb25zIGRlc2NyaWJlZCBiZWxvdy4gIFRoZXNlIG9wdGlvbnMgY2FuIGJlCitwYXNzZWQgYXMgYSBoYXNoIHRvIHRoZSBDPHJlZ2lzdGVyX2NoYW5uZWw+LCBDPHNldHVwX2NoYW5uZWw+LCBhbmQgQzxtc2c+CitmdW5jdGlvbnMuICBUaGUgcG9zc2libGUga2V5cywgd2l0aCB0aGVpciBkZWZhdWx0IHZhbHVlIGFyZToKKworPW92ZXIKKworPWl0ZW0gQzx0eXBlID1FPGd0PiAnd2FybmluZyc+CisKK1RoZSB0eXBlIG9mIHRoZSBjaGFubmVsLiAgT25lIG9mIEM8J2RlYnVnJz4sIEM8J3dhcm5pbmcnPiwgQzwnZXJyb3InPiwgb3IKK0M8J2ZhdGFsJz4uICBGYXRhbCBtZXNzYWdlcyBhYm9ydCB0aGUgcHJvZ3JhbSB3aGVuIHRoZXkgYXJlIG91dHB1dC4KK0Vycm9yIG1lc3NhZ2VzIHVwZGF0ZSB0aGUgZXhpdCBzdGF0dXMuICBEZWJ1ZyBhbmQgd2FybmluZyBtZXNzYWdlcyBhcmUKK2hhcm1sZXNzLCBleGNlcHQgdGhhdCB3YXJuaW5ncyBjYW4gYmUgdHJlYXRlZCBhcyBlcnJvcnMgb2YKK0M8JHdhcm5pbmdzX2FyZV9lcnJvcnM+IGlzIHNldC4KKworPWl0ZW0gQzxleGl0X2NvZGUgPUU8Z3Q+IDE+CisKK1RoZSB2YWx1ZSB0byB1cGRhdGUgQzwkZXhpdF9jb2RlPiB3aXRoIHdoZW4gYSBmYXRhbCBvciBlcnJvciBtZXNzYWdlCitpcyBlbWl0dGVkLiAgQzwkZXhpdF9jb2RlPiBpcyBhbHNvIHVwZGF0ZWQgZm9yIHdhcm5pbmdzIG91dHB1dAord2hlbiBAPCR3YXJuaW5nc19hcmVfZXJyb3JzPiBpcyBzZXQuCisKKz1pdGVtIEM8ZmlsZSA9RTxndD4gXCpTVERFUlI+CisKK1RoZSBmaWxlIHdoZXJlIHRoZSBlcnJvciBzaG91bGQgYmUgb3V0cHV0LgorCis9aXRlbSBDPHNpbGVudCA9RTxndD4gMD4KKworV2hldGhlciB0aGUgY2hhbm5lbCBzaG91bGQgYmUgc2lsZW50LiAgVXNlIHRoaXMgZG8gZGlzYWJsZSBhCitjYXRlZ29yeSBvZiB3YXJuaW5nLCBmb3IgaW5zdGFuY2UuCisKKz1pdGVtIEM8b3JkZXJlZCA9RTxndD4gMT4KKworV2hldGhlciwgd2l0aCBtdWx0aS10aHJlYWRlZCBleGVjdXRpb24sIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBxdWV1ZWQKK2ZvciBvcmRlcmVkIG91dHB1dC4KKworPWl0ZW0gQzx1bmlxX3BhcnQgPUU8Z3Q+IFVQX0xPQ19URVhUPgorCitUaGUgcGFydCBvZiB0aGUgbWVzc2FnZSBzdWJqZWN0IHRvIGR1cGxpY2F0ZSBmaWx0ZXJpbmcuICBTZWUgdGhlCitkb2N1bWVudGF0aW9uIGZvciB0aGUgQzxVUF9OT05FPiwgQzxVUF9URVhUPiwgYW5kIEM8VVBfTE9DX1RFWFQ+Citjb25zdGFudHMgYWJvdmUuCisKK0M8dW5pcV9wYXJ0PiBjYW4gYWxzbyBiZSBzZXQgdG8gYW4gYXJiaXRyYXJ5IHN0cmluZyB0aGF0IHdpbGwgYmUgdXNlZAoraW5zdGVhZCBvZiB0aGUgbWVzc2FnZSB3aGVuIGNvbnNpZGVyaW5nIGR1cGxpY2F0ZXMuCisKKz1pdGVtIEM8dW5pcV9zY29wZSA9RTxndD4gVVNfTE9DQUw+CisKK1RoZSBzY29wZSBvZiBkdXBsaWNhdGUgZmlsdGVyaW5nLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUKK0M8VVNfTE9DQUw+LCBhbmQgQzxVU19HTE9CQUw+IGNvbnN0YW50cyBhYm92ZS4KKworPWl0ZW0gQzxoZWFkZXIgPUU8Z3Q+ICcnPgorCitBIHN0cmluZyB0byBwcmVwZW5kIHRvIGVhY2ggbWVzc2FnZSBlbWl0dGVkIHRocm91Z2ggdGhpcyBjaGFubmVsLgorCis9aXRlbSBDPGZvb3RlciA9RTxndD4gJyc+CisKK0Egc3RyaW5nIHRvIGFwcGVuZCB0byBlYWNoIG1lc3NhZ2UgZW1pdHRlZCB0aHJvdWdoIHRoaXMgY2hhbm5lbC4KKworPWl0ZW0gQzxiYWNrdHJhY2UgPUU8Z3Q+IDA+CisKK0RpZSB3aXRoIGEgc3RhY2sgYmFja3RyYWNlIGFmdGVyIGRpc3BsYXlpbmcgdGhlIG1lc3NhZ2UuCisKKz1pdGVtIEM8cGFydGlhbCA9RTxndD4gMD4KKworV2hlbiBzZXQsIGluZGljYXRlcyBhIHBhcnRpYWwgbWVzc2FnZSB0aGF0IHNob3VsZAorYmUgb3V0cHV0IGFsb25nIHdpdGggdGhlIG5leHQgbWVzc2FnZSB3aXRoIEM8cGFydGlhbD4gdW5zZXQuCitTZXZlcmFsIHBhcnRpYWwgbWVzc2FnZXMgY2FuIGJlIHN0YWNrZWQgdGhpcyB3YXkuCisKK0R1cGxpY2F0ZSBmaWx0ZXJpbmcgd2lsbCBhcHBseSB0byB0aGUgSTxnbG9iYWw+IG1lc3NhZ2UgcmVzdWx0aW5nIGZyb20KK2FsbCBJPHBhcnRpYWw+IG1lc3NhZ2VzLCB1c2luZyB0aGUgb3B0aW9ucyBmcm9tIHRoZSBsYXN0IChub24tcGFydGlhbCkKK21lc3NhZ2UuICBMaW5raW5nIGFzc29jaWF0ZWQgbWVzc2FnZXMgaXMgdGhlIG1haW4gcmVhc29uIHRvIHVzZSB0aGlzCitvcHRpb24uCisKK0ZvciBpbnN0YW5jZSB0aGUgZm9sbG93aW5nIG1lc3NhZ2VzCisKKyAgbXNnICdjaGFubmVsJywgJ2ZvbzoyJywgJ3JlZGVmaW5pdGlvbiBvZiBBIC4uLic7CisgIG1zZyAnY2hhbm5lbCcsICdmb286MScsICcuLi4gQSBwcmV2aW91c2x5IGRlZmluZWQgaGVyZSc7CisgIG1zZyAnY2hhbm5lbCcsICdmb286MycsICdyZWRlZmluaXRpb24gb2YgQSAuLi4nOworICBtc2cgJ2NoYW5uZWwnLCAnZm9vOjEnLCAnLi4uIEEgcHJldmlvdXNseSBkZWZpbmVkIGhlcmUnOworCit3aWxsIHJlc3VsdCBpbgorCisgZm9vOjI6IHJlZGVmaW5pdGlvbiBvZiBBIC4uLgorIGZvbzoxOiAuLi4gQSBwcmV2aW91c2x5IGRlZmluZWQgaGVyZQorIGZvbzozOiByZWRlZmluaXRpb24gb2YgQSAuLi4KKword2hlcmUgdGhlIGR1cGxpY2F0ZSAiSTwuLi4gQSBwcmV2aW91c2x5IGRlZmluZWQgaGVyZT4iIGhhcyBiZWVuCitmaWx0ZXJlZCBvdXQuCisKK0xpbmtpbmcgdGhlc2UgbWVzc2FnZXMgdXNpbmcgQzxwYXJ0aWFsPiBhcyBmb2xsb3dzIHdpbGwgcHJldmVudCB0aGUKK2ZvdXJ0aCBtZXNzYWdlIHRvIGRpc2FwcGVhci4KKworICBtc2cgJ2NoYW5uZWwnLCAnZm9vOjInLCAncmVkZWZpbml0aW9uIG9mIEEgLi4uJywgcGFydGlhbCA9PiAxOworICBtc2cgJ2NoYW5uZWwnLCAnZm9vOjEnLCAnLi4uIEEgcHJldmlvdXNseSBkZWZpbmVkIGhlcmUnOworICBtc2cgJ2NoYW5uZWwnLCAnZm9vOjMnLCAncmVkZWZpbml0aW9uIG9mIEEgLi4uJywgcGFydGlhbCA9PiAxOworICBtc2cgJ2NoYW5uZWwnLCAnZm9vOjEnLCAnLi4uIEEgcHJldmlvdXNseSBkZWZpbmVkIGhlcmUnOworCitOb3RlIHRoYXQgYmVjYXVzZSB0aGUgc3RhY2sgb2YgQzxwYXJ0aWFsPiBtZXNzYWdlcyBpcyBwcmludGVkIHdpdGggdGhlCitmaXJzdCBub24tQzxwYXJ0aWFsPiBtZXNzYWdlLCBtb3N0IG9wdGlvbnMgb2YgQzxwYXJ0aWFsPiBtZXNzYWdlcyB3aWxsCitiZSBpZ25vcmVkLgorCis9YmFjaworCis9Y3V0CisKK3VzZSB2YXJzIHF3ICglX2RlZmF1bHRfb3B0aW9ucyAlX2dsb2JhbF9kdXBsaWNhdGVfbWVzc2FnZXMKKwkgICAgICVfbG9jYWxfZHVwbGljYXRlX21lc3NhZ2VzKTsKKworIyBEZWZhdWx0IG9wdGlvbnMgZm9yIGEgY2hhbm5lbC4KKyVfZGVmYXVsdF9vcHRpb25zID0KKyAgKAorICAgdHlwZSA9PiAnd2FybmluZycsCisgICBleGl0X2NvZGUgPT4gMSwKKyAgIGZpbGUgPT4gXCpTVERFUlIsCisgICBzaWxlbnQgPT4gMCwKKyAgIG9yZGVyZWQgPT4gMSwKKyAgIHF1ZXVlID0+IDAsCisgICBxdWV1ZV9rZXkgPT4gdW5kZWYsCisgICB1bmlxX3Njb3BlID0+IFVTX0xPQ0FMLAorICAgdW5pcV9wYXJ0ID0+IFVQX0xPQ19URVhULAorICAgaGVhZGVyID0+ICcnLAorICAgZm9vdGVyID0+ICcnLAorICAgYmFja3RyYWNlID0+IDAsCisgICBwYXJ0aWFsID0+IDAsCisgICApOworCisjIEZpbGxlZCB3aXRoIG91dHB1dCBtZXNzYWdlcyBhcyBrZXlzLCB0byBkZXRlY3QgZHVwbGljYXRlcy4KKyMgVGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGtleSBpcyB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzCisjIGZpbHRlcmVkIG91dC4KKyVfbG9jYWxfZHVwbGljYXRlX21lc3NhZ2VzID0gKCk7CislX2dsb2JhbF9kdXBsaWNhdGVfbWVzc2FnZXMgPSAoKTsKKworc3ViIF9yZXNldF9kdXBsaWNhdGVzIChcJSkKK3sKKyAgbXkgKCRyZWYpID0gQF87CisgIG15ICRkdXAgPSAwOworICBmb3JlYWNoIG15ICRrIChrZXlzICUkcmVmKQorICAgIHsKKyAgICAgICRkdXAgKz0gJHJlZi0+eyRrfTsKKyAgICB9CisgICUkcmVmID0gKCk7CisgIHJldHVybiAkZHVwOworfQorCisKKz1oZWFkMiBGdW5jdGlvbnMKKworPW92ZXIgNAorCis9aXRlbSBDPHJlc2V0X2xvY2FsX2R1cGxpY2F0ZXMgKCk+CisKK1Jlc2V0IGxvY2FsIGR1cGxpY2F0ZSBtZXNzYWdlcyAoc2VlIEM8VVNfTE9DQUw+KSwgYW5kCityZXR1cm4gdGhlIG51bWJlciBvZiBtZXNzYWdlcyB0aGF0IGhhdmUgYmVlbiBmaWx0ZXJlZCBvdXQuCisKKz1jdXQKKworc3ViIHJlc2V0X2xvY2FsX2R1cGxpY2F0ZXMgKCkKK3sKKyAgcmV0dXJuIF9yZXNldF9kdXBsaWNhdGVzICVfbG9jYWxfZHVwbGljYXRlX21lc3NhZ2VzOworfQorCis9aXRlbSBDPHJlc2V0X2dsb2JhbF9kdXBsaWNhdGVzICgpPgorCitSZXNldCBsb2NhbCBkdXBsaWNhdGUgbWVzc2FnZXMgKHNlZSBDPFVTX0dMT0JBTD4pLCBhbmQKK3JldHVybiB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHRoYXQgaGF2ZSBiZWVuIGZpbHRlcmVkIG91dC4KKworPWN1dAorCitzdWIgcmVzZXRfZ2xvYmFsX2R1cGxpY2F0ZXMgKCkKK3sKKyAgcmV0dXJuIF9yZXNldF9kdXBsaWNhdGVzICVfZ2xvYmFsX2R1cGxpY2F0ZV9tZXNzYWdlczsKK30KKworc3ViIF9tZXJnZV9vcHRpb25zIChcJSUpCit7CisgIG15ICgkaGFzaCwgJW9wdGlvbnMpID0gQF87CisgIGxvY2FsICRfOworCisgIGZvcmVhY2ggKGtleXMgJW9wdGlvbnMpCisgICAgeworICAgICAgaWYgKGV4aXN0cyAkaGFzaC0+eyRffSkKKwl7CisJICAkaGFzaC0+eyRffSA9ICRvcHRpb25zeyRffQorCX0KKyAgICAgIGVsc2UKKwl7CisJICBjb25mZXNzICJ1bmtub3duIG9wdGlvbiBgJF8nIjsKKwl9CisgICAgfQorICBpZiAoJGhhc2gtPnsnb3JkZXJlZCd9KQorICAgIHsKKyAgICAgIGNvbmZlc3MgImZhdGFsIG1lc3NhZ2VzIGNhbm5vdCBiZSBvcmRlcmVkIgorCWlmICRoYXNoLT57J3R5cGUnfSBlcSAnZmF0YWwnOworICAgICAgY29uZmVzcyAiYmFja3RyYWNlIGNhbm5vdCBiZSBvdXRwdXQgb24gb3JkZXJlZCBtZXNzYWdlcyIKKwlpZiAkaGFzaC0+eydiYWNrdHJhY2UnfTsKKyAgICB9Cit9CisKKz1pdGVtIEM8cmVnaXN0ZXJfY2hhbm5lbCAoJG5hbWUsIFslb3B0aW9uc10pPgorCitEZWNsYXJlIGNoYW5uZWwgQzwkbmFtZT4sIGFuZCBvdmVycmlkZSB0aGUgZGVmYXVsdCBvcHRpb25zCit3aXRoIHRob3NlIGxpc3RlZCBpbiBDPCVvcHRpb25zPi4KKworPWN1dAorCitzdWIgcmVnaXN0ZXJfY2hhbm5lbCAoJDslKQoreworICBteSAoJG5hbWUsICVvcHRpb25zKSA9IEBfOworICBteSAlY2hhbm5lbF9vcHRzID0gJV9kZWZhdWx0X29wdGlvbnM7CisgIF9tZXJnZV9vcHRpb25zICVjaGFubmVsX29wdHMsICVvcHRpb25zOworICAkY2hhbm5lbHN7JG5hbWV9ID0gXCVjaGFubmVsX29wdHM7Cit9CisKKz1pdGVtIEM8ZXhpc3RzX2NoYW5uZWwgKCRuYW1lKT4KKworUmV0dXJucyB0cnVlIGlmZiBjaGFubmVsIEM8JG5hbWU+IGhhcyBiZWVuIHJlZ2lzdGVyZWQuCisKKz1jdXQKKworc3ViIGV4aXN0c19jaGFubmVsICgkKQoreworICBteSAoJG5hbWUpID0gQF87CisgIHJldHVybiBleGlzdHMgJGNoYW5uZWxzeyRuYW1lfTsKK30KKworPWl0ZW0gQzxjaGFubmVsX3R5cGUgKCRuYW1lKT4KKworUmV0dXJucyB0aGUgdHlwZSBvZiBjaGFubmVsIEM8JG5hbWU+IGlmIGl0IGhhcyBiZWVuIHJlZ2lzdGVyZWQuCitSZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcgb3RoZXJ3aXNlLgorCis9Y3V0CisKK3N1YiBjaGFubmVsX3R5cGUgKCQpCit7CisgIG15ICgkbmFtZSkgPSBAXzsKKyAgcmV0dXJuICRjaGFubmVsc3skbmFtZX17J3R5cGUnfSBpZiBleGlzdHNfY2hhbm5lbCAkbmFtZTsKKyAgcmV0dXJuICcnOworfQorCisjIF9mb3JtYXRfc3ViX21lc3NhZ2UgKCRMRUFERVIsICRNRVNTQUdFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU3BsaXQgJE1FU1NBR0UgYXQgbmV3IGxpbmVzIGFuZCBhZGQgJExFQURFUiB0byBlYWNoIGxpbmUuCitzdWIgX2Zvcm1hdF9zdWJfbWVzc2FnZSAoJCQpCit7CisgIG15ICgkbGVhZGVyLCAkbWVzc2FnZSkgPSBAXzsKKyAgcmV0dXJuICRsZWFkZXIgLiBqb2luICgiXG4iIC4gJGxlYWRlciwgc3BsaXQgKCJcbiIsICRtZXNzYWdlKSkgLiAiXG4iOworfQorCisjIF9mb3JtYXRfbWVzc2FnZSAoJExPQ0FUSU9OLCAkTUVTU0FHRSwgJU9QVElPTlMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZvcm1hdCB0aGUgbWVzc2FnZS4gIFJldHVybiBhIHN0cmluZyByZWFkeSB0byBwcmludC4KK3N1YiBfZm9ybWF0X21lc3NhZ2UgKCQkJSkKK3sKKyAgbXkgKCRsb2NhdGlvbiwgJG1lc3NhZ2UsICVvcHRzKSA9IEBfOworICBteSAkbXNnID0gJyc7CisgIGlmIChyZWYgJGxvY2F0aW9uKQorICAgIHsKKyAgICAgICMgSWYgJExPQ0FUSU9OIGlzIGEgcmVmZXJlbmNlLCBhc3N1bWUgaXQncyBhbiBpbnN0YW5jZSBvZiB0aGUKKyAgICAgICMgQXV0b200dGU6OkxvY2F0aW9uIGNsYXNzIGFuZCBkaXNwbGF5IGNvbnRleHRzLgorICAgICAgbXkgJGxvYyA9ICRsb2NhdGlvbi0+Z2V0IHx8ICRtZTsKKyAgICAgICRtc2cgPSBfZm9ybWF0X3N1Yl9tZXNzYWdlICgiJGxvYzogIiwgJG9wdHN7J2hlYWRlcid9CisJCQkJICAuICRtZXNzYWdlIC4gJG9wdHN7J2Zvb3Rlcid9KTsKKyAgICAgIGZvciBteSAkcGFpciAoJGxvY2F0aW9uLT5nZXRfY29udGV4dHMpCisJeworCSAgJG1zZyAuPSBfZm9ybWF0X3N1Yl9tZXNzYWdlICgkcGFpci0+WzBdIC4gIjogICAiLCAkcGFpci0+WzFdKTsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgJGxvY2F0aW9uIHx8PSAkbWU7CisgICAgICAkbXNnID0gX2Zvcm1hdF9zdWJfbWVzc2FnZSAoIiRsb2NhdGlvbjogIiwgJG9wdHN7J2hlYWRlcid9CisJCQkJICAuICRtZXNzYWdlIC4gJG9wdHN7J2Zvb3Rlcid9KTsKKyAgICB9CisgIHJldHVybiAkbXNnOworfQorCisjIF9lbnF1ZXVlICgkUVVFVUUsICRLRVksICRVTklRX1NDT1BFLCAkVE9fRklMVEVSLCAkTVNHLCAkRklMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFB1c2ggbWVzc2FnZSBvbiBhIHF1ZXVlLCB0byBiZSBwcm9jZXNzZWQgYnkgYW5vdGhlciB0aHJlYWQuCitzdWIgX2VucXVldWUgKCQkJCQkJCkKK3sKKyAgbXkgKCRxdWV1ZSwgJGtleSwgJHVuaXFfc2NvcGUsICR0b19maWx0ZXIsICRtc2csICRmaWxlKSA9IEBfOworICAkcXVldWUtPmVucXVldWUgKCRrZXksICRtc2csICR0b19maWx0ZXIsICR1bmlxX3Njb3BlKTsKKyAgY29uZmVzcyAibWVzc2FnZSBxdWV1aW5nIHdvcmtzIG9ubHkgZm9yIFNUREVSUiIKKyAgICBpZiAkZmlsZSBuZSBcKlNUREVSUjsKK30KKworIyBfZGVxdWV1ZSAoJFFVRVVFKQorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBQb3AgYSBtZXNzYWdlIGZyb20gYSBxdWV1ZSwgYW5kIHByaW50LCBzaW1pbGFybHkgdG8gaG93CisjIF9wcmludF9tZXNzYWdlIHdvdWxkIGRvIGl0LiAgUmV0dXJuIDAgaWYgdGhlIHF1ZXVlIGlzCisjIGVtcHR5LiAgTm90ZSB0aGF0IHRoZSBrZXkgaGFzIGFscmVhZHkgYmVlbiBkZXF1ZXVlZC4KK3N1YiBfZGVxdWV1ZSAoJCkKK3sKKyAgbXkgKCRxdWV1ZSkgPSBAXzsKKyAgbXkgJG1zZyA9ICRxdWV1ZS0+ZGVxdWV1ZSB8fCByZXR1cm4gMDsKKyAgbXkgJHRvX2ZpbHRlciA9ICRxdWV1ZS0+ZGVxdWV1ZTsKKyAgbXkgJHVuaXFfc2NvcGUgPSAkcXVldWUtPmRlcXVldWU7CisgIG15ICRmaWxlID0gXCpTVERFUlI7CisKKyAgaWYgKCR0b19maWx0ZXIgbmUgJycpCisgICAgeworICAgICAgIyBEbyB3ZSB3YW50IGxvY2FsIG9yIGdsb2JhbCB1bmlxdWVuZXNzPworICAgICAgbXkgJGR1cHM7CisgICAgICBpZiAoJHVuaXFfc2NvcGUgPT0gVVNfTE9DQUwpCisJeworCSAgJGR1cHMgPSBcJV9sb2NhbF9kdXBsaWNhdGVfbWVzc2FnZXM7CisJfQorICAgICAgZWxzaWYgKCR1bmlxX3Njb3BlID09IFVTX0dMT0JBTCkKKwl7CisJICAkZHVwcyA9IFwlX2dsb2JhbF9kdXBsaWNhdGVfbWVzc2FnZXM7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGNvbmZlc3MgInVua25vd24gdmFsdWUgZm9yIHVuaXFfc2NvcGU6ICIgLiAkdW5pcV9zY29wZTsKKwl9CisKKyAgICAgICMgVXBkYXRlIHRoZSBoYXNoIG9mIG1lc3NhZ2VzLgorICAgICAgaWYgKGV4aXN0cyAkZHVwcy0+eyR0b19maWx0ZXJ9KQorCXsKKwkgICsrJGR1cHMtPnskdG9fZmlsdGVyfTsKKwkgIHJldHVybiAxOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAkZHVwcy0+eyR0b19maWx0ZXJ9ID0gMDsKKwl9CisgICAgfQorICBwcmludCAkZmlsZSAkbXNnOworICByZXR1cm4gMTsKK30KKworCisjIFN0b3JlIHBhcnRpYWwgbWVzc2FnZXMgaGVyZS4gKFNlZSB0aGUgJ3BhcnRpYWwnIG9wdGlvbi4pCit1c2UgdmFycyBxdyAoJHBhcnRpYWwpOworJHBhcnRpYWwgPSAnJzsKKworIyBfcHJpbnRfbWVzc2FnZSAoJExPQ0FUSU9OLCAkTUVTU0FHRSwgJU9QVElPTlMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRm9ybWF0IHRoZSBtZXNzYWdlLCBjaGVjayBkdXBsaWNhdGVzLCBhbmQgcHJpbnQgaXQuCitzdWIgX3ByaW50X21lc3NhZ2UgKCQkJSkKK3sKKyAgbXkgKCRsb2NhdGlvbiwgJG1lc3NhZ2UsICVvcHRzKSA9IEBfOworCisgIHJldHVybiAwIGlmICgkb3B0c3snc2lsZW50J30pOworCisgIG15ICRtc2cgPSBfZm9ybWF0X21lc3NhZ2UgKCRsb2NhdGlvbiwgJG1lc3NhZ2UsICVvcHRzKTsKKyAgaWYgKCRvcHRzeydwYXJ0aWFsJ30pCisgICAgeworICAgICAgIyBJbmNvbXBsZXRlIG1lc3NhZ2UuICAgU3RvcmUsIGRvbid0IHByaW50LgorICAgICAgJHBhcnRpYWwgLj0gJG1zZzsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAjIFByZWZpeCB3aXRoIGFueSBwYXJ0aWFsIG1lc3NhZ2Ugc2VuZCBzbyBmYXIuCisgICAgICAkbXNnID0gJHBhcnRpYWwgLiAkbXNnOworICAgICAgJHBhcnRpYWwgPSAnJzsKKyAgICB9CisKKyAgIyBDaGVjayBmb3IgZHVwbGljYXRlIG1lc3NhZ2UgaWYgcmVxdWVzdGVkLgorICBteSAkdG9fZmlsdGVyOworICBpZiAoJG9wdHN7J3VuaXFfcGFydCd9IG5lIFVQX05PTkUpCisgICAgeworICAgICAgIyBXaGljaCBwYXJ0IG9mIHRoZSBlcnJvciBzaG91bGQgd2UgbWF0Y2g/CisgICAgICBpZiAoJG9wdHN7J3VuaXFfcGFydCd9IGVxIFVQX1RFWFQpCisJeworCSAgJHRvX2ZpbHRlciA9ICRtZXNzYWdlOworCX0KKyAgICAgIGVsc2lmICgkb3B0c3sndW5pcV9wYXJ0J30gZXEgVVBfTE9DX1RFWFQpCisJeworCSAgJHRvX2ZpbHRlciA9ICRtc2c7CisJfQorICAgICAgZWxzZQorCXsKKwkgICR0b19maWx0ZXIgPSAkb3B0c3sndW5pcV9wYXJ0J307CisJfQorCisgICAgICAjIERvIHdlIHdhbnQgbG9jYWwgb3IgZ2xvYmFsIHVuaXF1ZW5lc3M/CisgICAgICBteSAkZHVwczsKKyAgICAgIGlmICgkb3B0c3sndW5pcV9zY29wZSd9ID09IFVTX0xPQ0FMKQorCXsKKwkgICRkdXBzID0gXCVfbG9jYWxfZHVwbGljYXRlX21lc3NhZ2VzOworCX0KKyAgICAgIGVsc2lmICgkb3B0c3sndW5pcV9zY29wZSd9ID09IFVTX0dMT0JBTCkKKwl7CisJICAkZHVwcyA9IFwlX2dsb2JhbF9kdXBsaWNhdGVfbWVzc2FnZXM7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGNvbmZlc3MgInVua25vd24gdmFsdWUgZm9yIHVuaXFfc2NvcGU6ICIgLiAkb3B0c3sndW5pcV9zY29wZSd9OworCX0KKworICAgICAgIyBVcGRhdGUgdGhlIGhhc2ggb2YgbWVzc2FnZXMuCisgICAgICBpZiAoZXhpc3RzICRkdXBzLT57JHRvX2ZpbHRlcn0pCisJeworCSAgKyskZHVwcy0+eyR0b19maWx0ZXJ9OworCSAgcmV0dXJuIDA7CisJfQorICAgICAgZWxzZQorCXsKKwkgICRkdXBzLT57JHRvX2ZpbHRlcn0gPSAwOworCX0KKyAgICB9CisgIG15ICRmaWxlID0gJG9wdHN7J2ZpbGUnfTsKKyAgaWYgKCRvcHRzeydvcmRlcmVkJ30gJiYgJG9wdHN7J3F1ZXVlJ30pCisgICAgeworICAgICAgX2VucXVldWUgKCRvcHRzeydxdWV1ZSd9LCAkb3B0c3sncXVldWVfa2V5J30sICRvcHRzeyd1bmlxX3Njb3BlJ30sCisJCSR0b19maWx0ZXIsICRtc2csICRmaWxlKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBwcmludCAkZmlsZSAkbXNnOworICAgIH0KKyAgcmV0dXJuIDE7Cit9CisKKz1pdGVtIEM8bXNnICgkY2hhbm5lbCwgJGxvY2F0aW9uLCAkbWVzc2FnZSwgWyVvcHRpb25zXSk+CisKK0VtaXQgYSBtZXNzYWdlIG9uIEM8JGNoYW5uZWw+LCBvdmVycmlkaW5nIHNvbWUgb3B0aW9ucyBvZiB0aGUgY2hhbm5lbCB3aXRoCit0aG9zZSBzcGVjaWZpZWQgaW4gQzwlb3B0aW9ucz4uICBPYnZpb3VzbHkgQzwkY2hhbm5lbD4gbXVzdCBoYXZlIGJlZW4KK3JlZ2lzdGVyZWQgd2l0aCBDPHJlZ2lzdGVyX2NoYW5uZWw+LgorCitDPCRtZXNzYWdlPiBpcyB0aGUgdGV4dCBvZiB0aGUgbWVzc2FnZSwgYW5kIEM8JGxvY2F0aW9uPiBpcyBhIGxvY2F0aW9uCithc3NvY2lhdGVkIHRvIHRoZSBtZXNzYWdlLgorCitGb3IgaW5zdGFuY2UgdG8gY29tcGxhaW4gYWJvdXQgc29tZSB1bnVzZWQgdmFyaWFibGUgQzxtdW1ibGU+CitkZWNsYXJlZCBhdCBsaW5lIDEwIGluIEY8Zm9vLmM+LCBvbmUgY291bGQgZG86CisKKyAgbXNnICd1bnVzZWQnLCAnZm9vLmM6MTAnLCAidW51c2VkIHZhcmlhYmxlIGBtdW1ibGUnIjsKKworSWYgY2hhbm5lbCBDPHVudXNlZD4gaXMgbm90IHNpbGVudCAoYW5kIGlmIHRoaXMgbWVzc2FnZSBpcyBub3QgYSBkdXBsaWNhdGUpLAordGhlIGZvbGxvd2luZyB3b3VsZCBiZSBvdXRwdXQ6CisKKyAgZm9vLmM6MTA6IHVudXNlZCB2YXJpYWJsZSBgbXVtYmxlJworCitDPCRsb2NhdGlvbj4gY2FuIGFsc28gYmUgYW4gaW5zdGFuY2Ugb2YgQzxBdXRvbTR0ZTo6TG9jYXRpb24+LiAgSW4gdGhpcworY2FzZSwgdGhlIHN0YWNrIG9mIGNvbnRleHRzIHdpbGwgYmUgZGlzcGxheWVkIGluIGFkZGl0aW9uLgorCitJZiBDPCRtZXNzYWdlPiBjb250YWlucyBuZXdsaW5lIGNoYXJhY3RlcnMsIEM8JGxvY2F0aW9uPiBpcyBwcmVwZW5kZWQKK3RvIGVhY2ggbGluZS4gIEZvciBpbnN0YW5jZSwKKworICBtc2cgJ2Vycm9yJywgJ3NvbWV3aGVyZScsICIxc3QgbGluZVxuMm5kIGxpbmUiOworCitiZWNvbWVzCisKKyAgc29tZXdoZXJlOiAxc3QgbGluZQorICBzb21ld2hlcmU6IDJuZCBsaW5lCisKK0lmIEM8JGxvY2F0aW9uPiBpcyBhbiBlbXB0eSBzdHJpbmcsIGl0IGlzIHJlcGxhY2VkIGJ5IHRoZSBuYW1lIG9mIHRoZQorcHJvZ3JhbS4gIEFjdHVhbGx5LCBpZiB5b3UgZG9uJ3QgdXNlIEM8JW9wdGlvbnM+LCB5b3UgY2FuIGV2ZW4KK2VsaWRlIHRoZSBlbXB0eSBDPCRsb2NhdGlvbj4uICBUaHVzCisKKyAgbXNnICdmYXRhbCcsICcnLCAnZmF0YWwgZXJyb3InOworICBtc2cgJ2ZhdGFsJywgJ2ZhdGFsIGVycm9yJzsKKworYm90aCBwcmludAorCisgIHByb2duYW1lOiBmYXRhbCBlcnJvcgorCis9Y3V0CisKKwordXNlIHZhcnMgcXcgKEBiYWNrbG9nICVidWZmZXJpbmcpOworCisjIFNlZSBidWZmZXJfbWVzc2FnZXMoKSBhbmQgZmx1c2hfbWVzc2FnZXMoKSBiZWxvdy4KKyVidWZmZXJpbmcgPSAoKTsJIyBUaGUgbWFwIG9mIGNoYW5uZWwgdHlwZXMgdG8gYnVmZmVyLgorQGJhY2tsb2cgPSAoKTsJCSMgVGhlIGJ1ZmZlciBvZiBtZXNzYWdlcy4KKworc3ViIG1zZyAoJCQ7JCUpCit7CisgIG15ICgkY2hhbm5lbCwgJGxvY2F0aW9uLCAkbWVzc2FnZSwgJW9wdGlvbnMpID0gQF87CisKKyAgaWYgKCEgZGVmaW5lZCAkbWVzc2FnZSkKKyAgICB7CisgICAgICAkbWVzc2FnZSA9ICRsb2NhdGlvbjsKKyAgICAgICRsb2NhdGlvbiA9ICcnOworICAgIH0KKworICBjb25mZXNzICJ1bmtub3duIGNoYW5uZWwgJGNoYW5uZWwiIHVubGVzcyBleGlzdHMgJGNoYW5uZWxzeyRjaGFubmVsfTsKKworICBteSAlb3B0cyA9ICV7JGNoYW5uZWxzeyRjaGFubmVsfX07CisgIF9tZXJnZV9vcHRpb25zICglb3B0cywgJW9wdGlvbnMpOworCisgIGlmIChleGlzdHMgJGJ1ZmZlcmluZ3skb3B0c3sndHlwZSd9fSkKKyAgICB7CisgICAgICBwdXNoIEBiYWNrbG9nLCBbJGNoYW5uZWwsICRsb2NhdGlvbi0+Y2xvbmUsICRtZXNzYWdlLCAlb3B0aW9uc107CisgICAgICByZXR1cm47CisgICAgfQorCisgICMgUHJpbnQgdGhlIG1lc3NhZ2UgaWYgbmVlZGVkLgorICBpZiAoX3ByaW50X21lc3NhZ2UgKCRsb2NhdGlvbiwgJG1lc3NhZ2UsICVvcHRzKSkKKyAgICB7CisgICAgICAjIEFkanVzdCBleGl0IHN0YXR1cy4KKyAgICAgIGlmICgkb3B0c3sndHlwZSd9IGVxICdlcnJvcicKKwkgIHx8ICRvcHRzeyd0eXBlJ30gZXEgJ2ZhdGFsJworCSAgfHwgKCRvcHRzeyd0eXBlJ30gZXEgJ3dhcm5pbmcnICYmICR3YXJuaW5nc19hcmVfZXJyb3JzKSkKKwl7CisJICBteSAkZXMgPSAkb3B0c3snZXhpdF9jb2RlJ307CisJICAkZXhpdF9jb2RlID0gJGVzIGlmICRlcyA+ICRleGl0X2NvZGU7CisJfQorCisgICAgICAjIERpZSBvbiBmYXRhbCBtZXNzYWdlcy4KKyAgICAgIGNvbmZlc3MgaWYgJG9wdHN7J2JhY2t0cmFjZSd9OworICAgICAgaWYgKCRvcHRzeyd0eXBlJ30gZXEgJ2ZhdGFsJykKKyAgICAgICAgeworCSAgIyBmbHVzaCBtZXNzYWdlcyBleHBsaWNpdGx5IGhlcmUsIG5lZWRlZCBpbiB3b3JrZXIgdGhyZWFkcy4KKwkgIFNUREVSUi0+Zmx1c2g7CisJICBleGl0ICRleGl0X2NvZGU7CisJfQorICAgIH0KK30KKworCis9aXRlbSBDPHNldHVwX2NoYW5uZWwgKCRjaGFubmVsLCAlb3B0aW9ucyk+CisKK092ZXJyaWRlIHRoZSBvcHRpb25zIG9mIEM8JGNoYW5uZWw+IHdpdGggdGhvc2Ugc3BlY2lmaWVkIGJ5IEM8JW9wdGlvbnM+LgorCis9Y3V0CisKK3N1YiBzZXR1cF9jaGFubmVsICgkJSkKK3sKKyAgbXkgKCRuYW1lLCAlb3B0cykgPSBAXzsKKyAgY29uZmVzcyAiY2hhbm5lbCAkbmFtZSBkb2Vzbid0IGV4aXN0IiB1bmxlc3MgZXhpc3RzICRjaGFubmVsc3skbmFtZX07CisgIF9tZXJnZV9vcHRpb25zICV7JGNoYW5uZWxzeyRuYW1lfX0sICVvcHRzOworfQorCis9aXRlbSBDPHNldHVwX2NoYW5uZWxfdHlwZSAoJHR5cGUsICVvcHRpb25zKT4KKworT3ZlcnJpZGUgdGhlIG9wdGlvbnMgb2YgYW55IGNoYW5uZWwgb2YgdHlwZSBDPCR0eXBlPgord2l0aCB0aG9zZSBzcGVjaWZpZWQgYnkgQzwlb3B0aW9ucz4uCisKKz1jdXQKKworc3ViIHNldHVwX2NoYW5uZWxfdHlwZSAoJCUpCit7CisgIG15ICgkdHlwZSwgJW9wdHMpID0gQF87CisgIGZvcmVhY2ggbXkgJGNoYW5uZWwgKGtleXMgJWNoYW5uZWxzKQorICAgIHsKKyAgICAgIHNldHVwX2NoYW5uZWwgJGNoYW5uZWwsICVvcHRzCisJaWYgJGNoYW5uZWxzeyRjaGFubmVsfXsndHlwZSd9IGVxICR0eXBlOworICAgIH0KK30KKworPWl0ZW0gQzxkdXBfY2hhbm5lbF9zZXR1cCAoKT4sIEM8ZHJvcF9jaGFubmVsX3NldHVwICgpPgorCitTb21ldGltZXMgaXQgaXMgbmVjZXNzYXJ5IHRvIG1ha2UgdGVtcG9yYXJ5IG1vZGlmaWNhdGlvbnMgdG8gY2hhbm5lbHMuCitGb3IgaW5zdGFuY2Ugb25lIG1heSB3YW50IHRvIGRpc2FibGUgYSB3YXJuaW5nIHdoaWxlIHByb2Nlc3NpbmcgYQorcGFydGljdWxhciBmaWxlLCBhbmQgdGhlbiByZXN0b3JlIHRoZSBpbml0aWFsIHNldHVwLiAgVGhlc2UgdHdvCitmdW5jdGlvbnMgbWFrZSBpdCBlYXN5OiBDPGR1cF9jaGFubmVsX3NldHVwICgpPiBzYXZlcyBhIGNvcHkgb2YgdGhlCitjdXJyZW50IGNvbmZpZ3VyYXRpb24gZm9yIGxhdGVyIHJlc3RvcmF0aW9uIGJ5CitDPGRyb3BfY2hhbm5lbF9zZXR1cCAoKT4uCisKK1lvdSBjYW4gdGhpbmsgb2YgdGhpcyBhcyBhIHN0YWNrIG9mIGNvbmZpZ3VyYXRpb25zIHdob3NlIGZpcnN0IGVudHJ5CitpcyB0aGUgYWN0aXZlIG9uZS4gIEM8ZHVwX2NoYW5uZWxfc2V0dXAgKCk+IGR1cGxpY2F0ZXMgdGhlIGZpcnN0CitlbnRyeSwgd2hpbGUgQzxkcm9wX2NoYW5uZWxfc2V0dXAgKCk+IGp1c3QgZGVsZXRlcyBpdC4KKworPWN1dAorCit1c2UgdmFycyBxdyAoQF9zYXZlZF9jaGFubmVscyk7CitAX3NhdmVkX2NoYW5uZWxzID0gKCk7CisKK3N1YiBkdXBfY2hhbm5lbF9zZXR1cCAoKQoreworICBteSAlY2hhbm5lbHNfY29weTsKKyAgZm9yZWFjaCBteSAkazEgKGtleXMgJWNoYW5uZWxzKQorICAgIHsKKyAgICAgICRjaGFubmVsc19jb3B5eyRrMX0gPSB7JXskY2hhbm5lbHN7JGsxfX19OworICAgIH0KKyAgcHVzaCBAX3NhdmVkX2NoYW5uZWxzLCBcJWNoYW5uZWxzX2NvcHk7Cit9CisKK3N1YiBkcm9wX2NoYW5uZWxfc2V0dXAgKCkKK3sKKyAgbXkgJHNhdmVkID0gcG9wIEBfc2F2ZWRfY2hhbm5lbHM7CisgICVjaGFubmVscyA9ICUkc2F2ZWQ7Cit9CisKKz1pdGVtIEM8YnVmZmVyX21lc3NhZ2VzIChAdHlwZXMpPiwgQzxmbHVzaF9tZXNzYWdlcyAoKT4KKworQnkgZGVmYXVsdCwgd2hlbiBDPG1zZz4gaXMgY2FsbGVkLCBtZXNzYWdlcyBhcmUgcHJvY2Vzc2VkIGltbWVkaWF0ZWx5LgorCitTb21ldGltZXMgaXQgaXMgbmVjZXNzYXJ5IHRvIGRlbGF5IHRoZSBvdXRwdXQgb2YgbWVzc2FnZXMuCitGb3IgaW5zdGFuY2UgeW91IG1pZ2h0IHdhbnQgdG8gbWFrZSBkaWFnbm9zdGljcyBiZWZvcmUKK2NoYW5uZWxzIGhhdmUgYmVlbiBjb21wbGV0ZWx5IGNvbmZpZ3VyZWQuCisKK0FmdGVyIEM8YnVmZmVyX21lc3NhZ2VzKEB0eXBlcyk+IGhhcyBiZWVuIGNhbGxlZCwgbWVzc2FnZXMgc2VudCB3aXRoCitDPG1zZz4gdG8gYSBjaGFubmVsIHdob3NlIHR5cGUgaXMgbGlzdGVkIGluIEM8QHR5cGVzPiB3aWxsIGJlIHN0b3JlZCBpbiBhCitsaXN0IGZvciBsYXRlciBwcm9jZXNzaW5nLgorCitUaGlzIGJhY2tsb2cgb2YgbWVzc2FnZXMgaXMgcHJvY2Vzc2VkIHdoZW4gQzxmbHVzaF9tZXNzYWdlcz4gaXMKK2NhbGxlZCwgd2l0aCB0aGUgY3VycmVudCBjaGFubmVsIG9wdGlvbnMgKG5vdCB0aGUgb3B0aW9ucyBpbiBlZmZlY3QsCithdCB0aGUgdGltZSBvZiBDPG1zZz4pLiAgU28gZm9yIGluc3RhbmNlLCBpZiBzb21lIGNoYW5uZWwgd2FzIHNpbGVuY2VkCitpbiB0aGUgbWVhbnRpbWUsIG1lc3NhZ2VzIHRvIHRoaXMgY2hhbm5lbCB3aWxsIG5vdCBiZSBwcmludGVkLgorCitDPGZsdXNoX21lc3NhZ2VzPiBjYW5jZWxzIHRoZSBlZmZlY3Qgb2YgQzxidWZmZXJfbWVzc2FnZXM+LiAgRm9sbG93aW5nCitjYWxscyB0byBDPG1zZz4gYXJlIHByb2Nlc3NlZCBpbW1lZGlhdGVseSBhcyB1c3VhbC4KKworPWN1dAorCitzdWIgYnVmZmVyX21lc3NhZ2VzIChAKQoreworICBmb3JlYWNoIG15ICR0eXBlIChAXykKKyAgICB7CisgICAgICAkYnVmZmVyaW5neyR0eXBlfSA9IDE7CisgICAgfQorfQorCitzdWIgZmx1c2hfbWVzc2FnZXMgKCkKK3sKKyAgJWJ1ZmZlcmluZyA9ICgpOworICBmb3JlYWNoIG15ICRhcmdzIChAYmFja2xvZykKKyAgICB7CisgICAgICAmbXNnIChAJGFyZ3MpOworICAgIH0KKyAgQGJhY2tsb2cgPSAoKTsKK30KKworPWl0ZW0gQzxzZXR1cF9jaGFubmVsX3F1ZXVlICgkcXVldWUsICRrZXkpPgorCitTZXQgdGhlIHF1ZXVlIHRvIGZpbGwgZm9yIGVhY2ggY2hhbm5lbCB0aGF0IGlzIG9yZGVyZWQsCithbmQgdGhlIGtleSB0byB1c2UgZm9yIHNlcmlhbGl6YXRpb24uCisKKz1jdXQKK3N1YiBzZXR1cF9jaGFubmVsX3F1ZXVlICgkJCkKK3sKKyAgbXkgKCRxdWV1ZSwgJGtleSkgPSBAXzsKKyAgZm9yZWFjaCBteSAkY2hhbm5lbCAoa2V5cyAlY2hhbm5lbHMpCisgICAgeworICAgICAgc2V0dXBfY2hhbm5lbCAkY2hhbm5lbCwgcXVldWUgPT4gJHF1ZXVlLCBxdWV1ZV9rZXkgPT4gJGtleQorICAgICAgICBpZiAkY2hhbm5lbHN7JGNoYW5uZWx9eydvcmRlcmVkJ307CisgICAgfQorfQorCis9aXRlbSBDPHBvcF9jaGFubmVsX3F1ZXVlICgkcXVldWUpPgorCitwb3AgYSBtZXNzYWdlIG9mZiB0aGUgJHF1ZXVlOyB0aGUga2V5IGhhcyBhbHJlYWR5IGJlZW4gcG9wcGVkLgorCis9Y3V0CitzdWIgcG9wX2NoYW5uZWxfcXVldWUgKCQpCit7CisgIG15ICgkcXVldWUpID0gQF87CisgIHJldHVybiBfZGVxdWV1ZSAoJHF1ZXVlKTsKK30KKworPWJhY2sKKworPWhlYWQxIFNFRSBBTFNPCisKK0w8QXV0b200dGU6OkxvY2F0aW9uPgorCis9aGVhZDEgSElTVE9SWQorCitXcml0dGVuIGJ5IEFsZXhhbmRyZSBEdXJldC1MdXR6IEU8bHQ+RjxhZGxAZ251Lm9yZz5FPGd0Pi4KKworPWN1dAorCisxOworCisjIyMgU2V0dXAgIkdOVSIgc3R5bGUgZm9yIHBlcmwtbW9kZSBhbmQgY3BlcmwtbW9kZS4KKyMjIExvY2FsIFZhcmlhYmxlczoKKyMjIHBlcmwtaW5kZW50LWxldmVsOiAyCisjIyBwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLWltYWdpbmFyeS1vZmZzZXQ6IDAKKyMjIHBlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtaW5kZW50LWxldmVsOiAyCisjIyBjcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWV4dHJhLW5ld2xpbmUtYmVmb3JlLWJyYWNlOiB0CisjIyBjcGVybC1tZXJnZS10cmFpbGluZy1lbHNlOiBuaWwKKyMjIGNwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBFbmQ6CmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvY29uZi9BdXRvbTR0ZS9Db25maWd1cmVfYWMucG0gYi9zaGFyZS9hdXRvY29uZi9BdXRvbTR0ZS9Db25maWd1cmVfYWMucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNhYzA5MQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9jb25mL0F1dG9tNHRlL0NvbmZpZ3VyZV9hYy5wbQpAQCAtMCwwICsxLDEyNiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoZSBtYWluIGNvcHkgb2YgdGhpcyBmaWxlIGlzIGluIEF1dG9tYWtlJ3MgQ1ZTIHJlcG9zaXRvcnkuICMKKyMgVXBkYXRlcyBzaG91bGQgYmUgc2VudCB0byBhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmcuICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3BhY2thZ2UgQXV0b200dGU6OkNvbmZpZ3VyZV9hYzsKKwordXNlIHN0cmljdDsKK3VzZSBFeHBvcnRlcjsKK3VzZSBBdXRvbTR0ZTo6Q2hhbm5lbHM7Cit1c2UgQXV0b200dGU6OkNoYW5uZWxEZWZzOworCit1c2UgdmFycyBxdyAoQElTQSBARVhQT1JUKTsKKworQElTQSA9IHF3IChFeHBvcnRlcik7CitARVhQT1JUID0gcXcgKCZmaW5kX2NvbmZpZ3VyZV9hYyAmcmVxdWlyZV9jb25maWd1cmVfYWMpOworCis9aGVhZDEgTkFNRQorCitBdXRvbTR0ZTo6Q29uZmlndXJlX2FjIC0gTG9jYXRlIGNvbmZpZ3VyZS5hYyBvciBjb25maWd1cmUuaW4uCisKKz1oZWFkMSBTWU5PUFNJUworCisgIHVzZSBBdXRvbTR0ZTo6Q29uZmlndXJlX2FjOworCisgICMgVHJ5IHRvIGxvY2F0ZSBjb25maWd1cmUuaW4gb3IgY29uZmlndXJlLmFjIGluIHRoZSBjdXJyZW50CisgICMgZGlyZWN0b3J5LiAgSXQgbWF5IGJlIGFic2VudC4gIENvbXBsYWluIGlmIGJvdGggZmlsZXMgZXhpc3QuCisgIG15ICRmaWxlX25hbWUgPSBmaW5kX2NvbmZpZ3VyZV9hYzsKKworICAjIExpa2V3aXNlLCBidXQgYm9tYiBvdXQgaWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QuCisgIG15ICRmaWxlX25hbWUgPSByZXF1aXJlX2NvbmZpZ3VyZV9hYzsKKworICAjIExpa2V3aXNlLCBidXQgaW4gJGRpci4KKyAgbXkgJGZpbGVfbmFtZSA9IGZpbmRfY29uZmlndXJlX2FjICgkZGlyKTsKKyAgbXkgJGZpbGVfbmFtZSA9IHJlcXVpcmVfY29uZmlndXJlX2FjICgkZGlyKTsKKworPW92ZXIgNAorCis9YmFjaworCis9aGVhZDIgRnVuY3Rpb25zCisKKz1vdmVyIDQKKworPWl0ZW0gQzwkY29uZmlndXJlX2FjID0gZmluZF9jb25maWd1cmVfYWMgKFskZGlyZWN0b3J5XSk+CisKK0ZpbmQgYSBGPGNvbmZpZ3VyZS5hYz4gb3IgRjxjb25maWd1cmUuaW4+IGZpbGUgaW4gQzwkZGlyZWN0b3J5PiwKK2RlZmF1bHRpbmcgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgQ29tcGxhaW4gaWYgYm90aCBmaWxlcyBhcmUgcHJlc2VudC4KK1JldHVybiB0aGUgbmFtZSBvZiB0aGUgZmlsZSBmb3VuZCwgb3IgdGhlIGZvcm1lciBpZiBuZWl0aGVyIGlzIHByZXNlbnQuCisKKz1jdXQKKworc3ViIGZpbmRfY29uZmlndXJlX2FjICg7QCkKK3sKKyAgbXkgKCRkaXJlY3RvcnkpID0gQF87CisgICRkaXJlY3RvcnkgfHw9ICcuJzsKKyAgbXkgJGNvbmZpZ3VyZV9hYyA9CisgICAgRmlsZTo6U3BlYy0+Y2Fub25wYXRoIChGaWxlOjpTcGVjLT5jYXRmaWxlICgkZGlyZWN0b3J5LCAnY29uZmlndXJlLmFjJykpOworICBteSAkY29uZmlndXJlX2luID0KKyAgICBGaWxlOjpTcGVjLT5jYW5vbnBhdGggKEZpbGU6OlNwZWMtPmNhdGZpbGUgKCRkaXJlY3RvcnksICdjb25maWd1cmUuaW4nKSk7CisKKyAgaWYgKC1mICRjb25maWd1cmVfYWMpCisgICAgeworICAgICAgaWYgKC1mICRjb25maWd1cmVfaW4pCisJeworCSAgbXNnICgndW5zdXBwb3J0ZWQnLAorCSAgICAgICAiYCRjb25maWd1cmVfYWMnIGFuZCBgJGNvbmZpZ3VyZV9pbicgYm90aCBwcmVzZW50LlxuIgorCSAgICAgICAuICJwcm9jZWVkaW5nIHdpdGggYCRjb25maWd1cmVfYWMnLiIpOworCX0KKyAgICAgIHJldHVybiAkY29uZmlndXJlX2FjCisgICAgfQorICBlbHNpZiAoLWYgJGNvbmZpZ3VyZV9pbikKKyAgICB7CisgICAgICByZXR1cm4gJGNvbmZpZ3VyZV9pbjsKKyAgICB9CisgIHJldHVybiAkY29uZmlndXJlX2FjOworfQorCisKKz1pdGVtIEM8JGNvbmZpZ3VyZV9hYyA9IHJlcXVpcmVfY29uZmlndXJlX2FjIChbJGRpcmVjdG9yeV0pPgorCitMaWtlIEM8ZmluZF9jb25maWd1cmVfYWM+LCBidXQgZmFpbCBpZiBuZWl0aGVyIGlzIHByZXNlbnQuCisKKz1jdXQKKworc3ViIHJlcXVpcmVfY29uZmlndXJlX2FjICg7JCkKK3sKKyAgbXkgJHJlcyA9IGZpbmRfY29uZmlndXJlX2FjIChAXyk7CisgIGZhdGFsICJgY29uZmlndXJlLmFjJyBvciBgY29uZmlndXJlLmluJyBpcyByZXF1aXJlZCIKKyAgICB1bmxlc3MgLWYgJHJlczsKKyAgcmV0dXJuICRyZXMKK30KKworMTsKKworIyMjIFNldHVwICJHTlUiIHN0eWxlIGZvciBwZXJsLW1vZGUgYW5kIGNwZXJsLW1vZGUuCisjIyBMb2NhbCBWYXJpYWJsZXM6CisjIyBwZXJsLWluZGVudC1sZXZlbDogMgorIyMgcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1pbWFnaW5hcnktb2Zmc2V0OiAwCisjIyBwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWluZGVudC1sZXZlbDogMgorIyMgY3BlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1leHRyYS1uZXdsaW5lLWJlZm9yZS1icmFjZTogdAorIyMgY3BlcmwtbWVyZ2UtdHJhaWxpbmctZWxzZTogbmlsCisjIyBjcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgRW5kOgpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b2NvbmYvQXV0b200dGUvRmlsZVV0aWxzLnBtIGIvc2hhcmUvYXV0b2NvbmYvQXV0b200dGUvRmlsZVV0aWxzLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYjkzZDUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvY29uZi9BdXRvbTR0ZS9GaWxlVXRpbHMucG0KQEAgLTAsMCArMSw0NTEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUaGUgbWFpbiBjb3B5IG9mIHRoaXMgZmlsZSBpcyBpbiBBdXRvbWFrZSdzIENWUyByZXBvc2l0b3J5LiAjCisjIFVwZGF0ZXMgc2hvdWxkIGJlIHNlbnQgdG8gYXV0b21ha2UtcGF0Y2hlc0BnbnUub3JnLiAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitwYWNrYWdlIEF1dG9tNHRlOjpGaWxlVXRpbHM7CisKKz1oZWFkMSBOQU1FCisKK0F1dG9tNHRlOjpGaWxlVXRpbHMgLSBoYW5kbGluZyBmaWxlcworCis9aGVhZDEgU1lOT1BTSVMKKworICB1c2UgQXV0b200dGU6OkZpbGVVdGlscworCis9aGVhZDEgREVTQ1JJUFRJT04KKworVGhpcyBwZXJsIG1vZHVsZSBwcm92aWRlcyB2YXJpb3VzIGdlbmVyYWwgcHVycG9zZSBmaWxlIGhhbmRsaW5nIGZ1bmN0aW9ucy4KKworPWN1dAorCit1c2Ugc3RyaWN0OwordXNlIEV4cG9ydGVyOwordXNlIEZpbGU6OnN0YXQ7Cit1c2UgSU86OkZpbGU7Cit1c2UgQXV0b200dGU6OkNoYW5uZWxzOwordXNlIEF1dG9tNHRlOjpDaGFubmVsRGVmczsKKwordXNlIHZhcnMgcXcgKEBJU0EgQEVYUE9SVCk7CisKK0BJU0EgPSBxdyAoRXhwb3J0ZXIpOworQEVYUE9SVCA9IHF3ICgmb3Blbl9xdW90ZSAmY29udGVudHMKKwkgICAgICAmZmluZF9maWxlICZtdGltZQorCSAgICAgICZ1cGRhdGVfZmlsZSAmdXBfdG9fZGF0ZV9wCisJICAgICAgJnhzeXN0ZW0gJnhzeXN0ZW1faGludCAmeHF4CisJICAgICAgJmRpcl9oYXNfY2FzZV9tYXRjaGluZ19maWxlICZyZXNldF9kaXJfY2FjaGUKKwkgICAgICAmc2V0X2Rpcl9jYWNoZV9maWxlKTsKKworCis9aXRlbSBDPG9wZW5fcXVvdGUgKCRmaWxlX25hbWUpPgorCitRdW90ZSBDPCRmaWxlX25hbWU+IGZvciBvcGVuLgorCis9Y3V0CisKKyMgJEZJTEVfTkFNRQorIyBvcGVuX3F1b3RlICgkRklMRV9OQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZiB0aGUgc3RyaW5nICRTIGlzIGEgd2VsbC1iZWhhdmVkIGZpbGUgbmFtZSwgc2ltcGx5IHJldHVybiBpdC4KKyMgSWYgaXQgc3RhcnRzIHdpdGggd2hpdGUgc3BhY2UsIHByZXBlbmQgYC4vJywgaWYgaXQgZW5kcyB3aXRoCisjIHdoaXRlIHNwYWNlLCBhZGQgYFwwJy4gIFJldHVybiB0aGUgbmV3IHN0cmluZy4KK3N1YiBvcGVuX3F1b3RlKCQpCit7CisgIG15ICgkcykgPSBAXzsKKyAgaWYgKCRzID1+IG0vXlxzLykKKyAgICB7CisgICAgICAkcyA9ICIuLyRzIjsKKyAgICB9CisgIGlmICgkcyA9fiBtL1xzJC8pCisgICAgeworICAgICAgJHMgPSAiJHNcMCI7CisgICAgfQorICByZXR1cm4gJHM7Cit9CisKKz1pdGVtIEM8ZmluZF9maWxlICgkZmlsZV9uYW1lLCBAaW5jbHVkZSk+CisKK1JldHVybiB0aGUgZmlyc3QgcGF0aCBmb3IgYSBDPCRmaWxlX25hbWU+IGluIHRoZSBDPGluY2x1ZGU+cy4KKworV2UgbWF0Y2ggZXhhY3RseSB0aGUgYmVoYXZpb3Igb2YgR05VIE00OiBmaXJzdCBsb29rIGluIHRoZSBjdXJyZW50CitkaXJlY3RvcnkgKHdoaWNoIGluY2x1ZGVzIHRoZSBjYXNlIG9mIGFic29sdXRlIGZpbGUgbmFtZXMpLCBhbmQgdGhlbiwKK2lmIHRoZSBmaWxlIG5hbWUgaXMgbm90IGFic29sdXRlLCBsb29rIGluIEM8QGluY2x1ZGU+LgorCitJZiB0aGUgZmlsZSBpcyBmbGFnZ2VkIGFzIG9wdGlvbmFsIChlbmRzIHdpdGggQzw/PiksIHRoZW4gcmV0dXJuIHVuZGVmCitpZiBhYnNlbnQsIG90aGVyd2lzZSBleGl0IHdpdGggZXJyb3IuCisKKz1jdXQKKworIyAkRklMRV9OQU1FCisjIGZpbmRfZmlsZSAoJEZJTEVfTkFNRSwgQElOQ0xVREUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N1YiBmaW5kX2ZpbGUgKCRAKQoreworICB1c2UgRmlsZTo6U3BlYzsKKworICBteSAoJGZpbGVfbmFtZSwgQGluY2x1ZGUpID0gQF87CisgIG15ICRvcHRpb25hbCA9IDA7CisKKyAgJG9wdGlvbmFsID0gMQorICAgIGlmICRmaWxlX25hbWUgPX4gcy9cPyQvLzsKKworICByZXR1cm4gRmlsZTo6U3BlYy0+Y2Fub25wYXRoICgkZmlsZV9uYW1lKQorICAgIGlmIC1lICRmaWxlX25hbWU7CisKKyAgaWYgKCFGaWxlOjpTcGVjLT5maWxlX25hbWVfaXNfYWJzb2x1dGUgKCRmaWxlX25hbWUpKQorICAgIHsKKyAgICAgIGZvcmVhY2ggbXkgJHBhdGggKEBpbmNsdWRlKQorCXsKKwkgIHJldHVybiBGaWxlOjpTcGVjLT5jYW5vbnBhdGggKEZpbGU6OlNwZWMtPmNhdGZpbGUgKCRwYXRoLCAkZmlsZV9uYW1lKSkKKwkgICAgaWYgLWUgRmlsZTo6U3BlYy0+Y2F0ZmlsZSAoJHBhdGgsICRmaWxlX25hbWUpCisJfQorICAgIH0KKworICBmYXRhbCAiJGZpbGVfbmFtZTogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKKyAgICB1bmxlc3MgJG9wdGlvbmFsOworICByZXR1cm4gdW5kZWY7Cit9CisKKz1pdGVtIEM8bXRpbWUgKCRmaWxlKT4KKworUmV0dXJuIHRoZSBtdGltZSBvZiBDPCRmaWxlPi4gIE1pc3NpbmcgZmlsZXMsIG9yIEM8LT4gc3RhbmRpbmcgZm9yCitDPFNURElOPiBvciBDPFNURE9VVD4gYXJlIGBgb2Jzb2xldGUnJywgaS5lLiwgYXMgb2xkIGFzIHBvc3NpYmxlLgorCis9Y3V0CisKKyMgJE1USU1FCisjIE1USU1FICgkRklMRSkKKyMgLS0tLS0tLS0tLS0tLQorc3ViIG10aW1lICgkKQoreworICBteSAoJGZpbGUpID0gQF87CisKKyAgcmV0dXJuIDAKKyAgICBpZiAkZmlsZSBlcSAnLScgfHwgISAtZiAkZmlsZTsKKworICBteSAkc3RhdCA9IHN0YXQgKCRmaWxlKQorICAgIG9yIGZhdGFsICJjYW5ub3Qgc3RhdCAkZmlsZTogJCEiOworCisgIHJldHVybiAkc3RhdC0+bXRpbWU7Cit9CisKKworPWl0ZW0gQzx1cGRhdGVfZmlsZSAoJGZyb20sICR0bywgWyRmb3JjZV0pPgorCitSZW5hbWUgQzwkZnJvbT4gYXMgQzwkdG8+LCBwcmVzZXJ2aW5nIEM8JHRvPiB0aW1lc3RhbXAgaWYgaXQgaGFzIG5vdAorY2hhbmdlZCwgdW5sZXNzIEM8JGZvcmNlPiBpcyB0cnVlIChkZWZhdWx0cyB0byBmYWxzZSkuICBSZWNvZ25pemUKK0M8JHRvPiA9IEM8LT4gc3RhbmRpbmcgZm9yIEM8U1RESU4+LiAgQzwkZnJvbT4gaXMgYWx3YXlzCityZW1vdmVkL3JlbmFtZWQuCisKKz1jdXQKKworIyAmdXBkYXRlX2ZpbGUgKCRGUk9NLCAkVE87ICRGT1JDRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdWIgdXBkYXRlX2ZpbGUgKCQkOyQpCit7CisgIG15ICgkZnJvbSwgJHRvLCAkZm9yY2UpID0gQF87CisgICRmb3JjZSA9IDAKKyAgICB1bmxlc3MgZGVmaW5lZCAkZm9yY2U7CisgIG15ICRTSU1QTEVfQkFDS1VQX1NVRkZJWCA9ICRFTlZ7J1NJTVBMRV9CQUNLVVBfU1VGRklYJ30gfHwgJ34nOworICB1c2UgRmlsZTo6Q29tcGFyZTsKKyAgdXNlIEZpbGU6OkNvcHk7CisKKyAgaWYgKCR0byBlcSAnLScpCisgICAgeworICAgICAgbXkgJGluID0gbmV3IElPOjpGaWxlICgiPCAiIC4gb3Blbl9xdW90ZSAoJGZyb20pKTsKKyAgICAgIG15ICRvdXQgPSBuZXcgSU86OkZpbGUgKCI+LSIpOworICAgICAgd2hpbGUgKCRfID0gJGluLT5nZXRsaW5lKQorCXsKKwkgIHByaW50ICRvdXQgJF87CisJfQorICAgICAgJGluLT5jbG9zZTsKKyAgICAgIHVubGluayAoJGZyb20pIHx8IGZhdGFsICJjYW5ub3QgcmVtb3ZlICRmcm9tOiAkISI7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGlmICghJGZvcmNlICYmIC1mICIkdG8iICYmIGNvbXBhcmUgKCIkZnJvbSIsICIkdG8iKSA9PSAwKQorICAgIHsKKyAgICAgICMgRmlsZSBkaWRuJ3QgY2hhbmdlLCBzbyBkb24ndCB1cGRhdGUgaXRzIG1vZCB0aW1lLgorICAgICAgbXNnICdub3RlJywgImAkdG8nIGlzIHVuY2hhbmdlZCI7CisgICAgICB1bmxpbmsgKCRmcm9tKQorICAgICAgICBvciBmYXRhbCAiY2Fubm90IHJlbW92ZSAkZnJvbTogJCEiOworICAgICAgcmV0dXJuCisgICAgfQorCisgIGlmICgtZiAiJHRvIikKKyAgICB7CisgICAgICAjIEJhY2sgdXAgYW5kIGluc3RhbGwgdGhlIG5ldyBvbmUuCisgICAgICBtb3ZlICgiJHRvIiwgICIkdG8kU0lNUExFX0JBQ0tVUF9TVUZGSVgiKQorCW9yIGZhdGFsICJjYW5ub3QgYmFja3VwICR0bzogJCEiOworICAgICAgbW92ZSAoIiRmcm9tIiwgIiR0byIpCisJb3IgZmF0YWwgImNhbm5vdCByZW5hbWUgJGZyb20gYXMgJHRvOiAkISI7CisgICAgICBtc2cgJ25vdGUnLCAiYCR0bycgaXMgdXBkYXRlZCI7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbW92ZSAoIiRmcm9tIiwgIiR0byIpCisJb3IgZmF0YWwgImNhbm5vdCByZW5hbWUgJGZyb20gYXMgJHRvOiAkISI7CisgICAgICBtc2cgJ25vdGUnLCAiYCR0bycgaXMgY3JlYXRlZCI7CisgICAgfQorfQorCisKKz1pdGVtIEM8dXBfdG9fZGF0ZV9wICgkZmlsZSwgQGRlcCk+CisKK0lzIEM8JGZpbGU+IG1vcmUgcmVjZW50IHRoYW4gQzxAZGVwPj8KKworPWN1dAorCisjICRCT09MRUFOCisjICZ1cF90b19kYXRlX3AgKCRGSUxFLCBAREVQKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N1YiB1cF90b19kYXRlX3AgKCRAKQoreworICBteSAoJGZpbGUsIEBkZXApID0gQF87CisgIG15ICRtdGltZSA9IG10aW1lICgkZmlsZSk7CisKKyAgZm9yZWFjaCBteSAkZGVwIChAZGVwKQorICAgIHsKKyAgICAgIGlmICgkbXRpbWUgPCBtdGltZSAoJGRlcCkpCisJeworCSAgdmVyYiAidXBfdG9fZGF0ZSAoJGZpbGUpOiBvdXRkYXRlZDogJGRlcCI7CisJICByZXR1cm4gMDsKKwl9CisgICAgfQorCisgIHZlcmIgInVwX3RvX2RhdGUgKCRmaWxlKTogdXAgdG8gZGF0ZSI7CisgIHJldHVybiAxOworfQorCisKKz1pdGVtIEM8aGFuZGxlX2V4ZWNfZXJyb3JzICgkY29tbWFuZCwgWyRleHBlY3RlZF9leGl0X2NvZGUgPSAwXSwgWyRoaW50XSk+CisKK0Rpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZSBmb3IgQzwkY29tbWFuZD4sIGJhc2VkIG9uIHRoZSBjb250ZW50IG9mCitDPCQ/PiBhbmQgQzwkIT4uICBCZSBxdWlldCBpZiB0aGUgY29tbWFuZCBleGl0ZWQgbm9ybWFsbHkKK3dpdGggQzwkZXhwZWN0ZWRfZXhpdF9jb2RlPi4gIElmIEM8JGhpbnQ+IGlzIGdpdmVuLCBkaXNwbGF5IHRoYXQgYXMgd2VsbAoraWYgdGhlIGNvbW1hbmQgZmFpbGVkIHRvIHJ1biBhdCBhbGwuCisKKz1jdXQKKworc3ViIGhhbmRsZV9leGVjX2Vycm9ycyAoJDskJCkKK3sKKyAgbXkgKCRjb21tYW5kLCAkZXhwZWN0ZWQsICRoaW50KSA9IEBfOworICAkZXhwZWN0ZWQgPSAwIHVubGVzcyBkZWZpbmVkICRleHBlY3RlZDsKKyAgaWYgKGRlZmluZWQgJGhpbnQpCisgICAgeworICAgICAgJGhpbnQgPSAiXG4iIC4gJGhpbnQ7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgJGhpbnQgPSAnJzsKKyAgICB9CisKKyAgJGNvbW1hbmQgPSAoc3BsaXQgKCcgJywgJGNvbW1hbmQpKVswXTsKKyAgaWYgKCQhKQorICAgIHsKKyAgICAgIGZhdGFsICJmYWlsZWQgdG8gcnVuICRjb21tYW5kOiAkISIgLiAkaGludDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB1c2UgUE9TSVggcXcgKFdJRkVYSVRFRCBXRVhJVFNUQVRVUyBXSUZTSUdOQUxFRCBXVEVSTVNJRyk7CisKKyAgICAgIGlmIChXSUZFWElURUQgKCQ/KSkKKwl7CisJICBteSAkc3RhdHVzID0gV0VYSVRTVEFUVVMgKCQ/KTsKKwkgICMgUHJvcGFnYXRlIGV4aXQgY29kZXMuCisJICBmYXRhbCAoJycsCisJCSAiJGNvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXM6ICRzdGF0dXMiLAorCQkgZXhpdF9jb2RlID0+ICRzdGF0dXMpCisJICAgIHVubGVzcyAkc3RhdHVzID09ICRleHBlY3RlZDsKKwl9CisgICAgICBlbHNpZiAoV0lGU0lHTkFMRUQgKCQ/KSkKKwl7CisJICBteSAkc2lnbmFsID0gV1RFUk1TSUcgKCQ/KTsKKwkgIGZhdGFsICIkY29tbWFuZCB0ZXJtaW5hdGVkIGJ5IHNpZ25hbDogJHNpZ25hbCI7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGZhdGFsICIkY29tbWFuZCBleGl0ZWQgYWJub3JtYWxseSI7CisJfQorICAgIH0KK30KKworPWl0ZW0gQzx4cXggKCRjb21tYW5kKT4KKworU2FtZSBhcyBDPHF4PiAoYnV0IGluIHNjYWxhciBjb250ZXh0KSwgYnV0IGZhaWxzIG9uIGVycm9ycy4KKworPWN1dAorCisjIHhxeCAoJENPTU1BTkQpCisjIC0tLS0tLS0tLS0tLS0tCitzdWIgeHF4ICgkKQoreworICBteSAoJGNvbW1hbmQpID0gQF87CisKKyAgdmVyYiAicnVubmluZzogJGNvbW1hbmQiOworCisgICQhID0gMDsKKyAgbXkgJHJlcyA9IGAkY29tbWFuZGA7CisgIGhhbmRsZV9leGVjX2Vycm9ycyAkY29tbWFuZAorICAgIGlmICQ/OworCisgIHJldHVybiAkcmVzOworfQorCisKKz1pdGVtIEM8eHN5c3RlbSAoQGFyZ3YpPgorCitTYW1lIGFzIEM8c3lzdGVtPiwgYnV0IGZhaWxzIG9uIGVycm9ycywgYW5kIHJlcG9ydHMgdGhlIEM8QGFyZ3Y+CitpbiB2ZXJib3NlIG1vZGUuCisKKz1jdXQKKworc3ViIHhzeXN0ZW0gKEApCit7CisgIG15IChAY29tbWFuZCkgPSBAXzsKKworICB2ZXJiICJydW5uaW5nOiBAY29tbWFuZCI7CisKKyAgJCEgPSAwOworICBoYW5kbGVfZXhlY19lcnJvcnMgIkBjb21tYW5kIgorICAgIGlmIHN5c3RlbSBAY29tbWFuZDsKK30KKworCis9aXRlbSBDPHhzeXN0ZW1faGludCAoJG1zZywgQGFyZ3YpPgorCitTYW1lIGFzIEM8eHN5c3RlbT4sIGJ1dCBhbGxvd3MgdG8gcGFzcyBhIGhpbnQgdGhhdCB3aWxsIGJlIGRpc3BsYXllZAoraW4gY2FzZSB0aGUgY29tbWFuZCBmYWlsZWQgdG8gcnVuIGF0IGFsbC4KKworPWN1dAorCitzdWIgeHN5c3RlbV9oaW50IChAKQoreworICBteSAoJGhpbnQsIEBjb21tYW5kKSA9IEBfOworCisgIHZlcmIgInJ1bm5pbmc6IEBjb21tYW5kIjsKKworICAkISA9IDA7CisgIGhhbmRsZV9leGVjX2Vycm9ycyAiQGNvbW1hbmQiLCAwLCAkaGludAorICAgIGlmIHN5c3RlbSBAY29tbWFuZDsKK30KKworCis9aXRlbSBDPGNvbnRlbnRzICgkZmlsZV9uYW1lKT4KKworUmV0dXJuIHRoZSBjb250ZW50cyBvZiBDPCRmaWxlX25hbWU+LgorCis9Y3V0CisKKyMgY29udGVudHMgKCRGSUxFX05BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3ViIGNvbnRlbnRzICgkKQoreworICBteSAoJGZpbGUpID0gQF87CisgIHZlcmIgInJlYWRpbmcgJGZpbGUiOworICBsb2NhbCAkLzsJCQkjIFR1cm4gb24gc2x1cnAtbW9kZS4KKyAgbXkgJGYgPSBuZXcgQXV0b200dGU6OlhGaWxlICI8ICIgLiBvcGVuX3F1b3RlICgkZmlsZSk7CisgIG15ICRjb250ZW50cyA9ICRmLT5nZXRsaW5lOworICAkZi0+Y2xvc2U7CisgIHJldHVybiAkY29udGVudHM7Cit9CisKKworPWl0ZW0gQzxkaXJfaGFzX2Nhc2VfbWF0Y2hpbmdfZmlsZSAoJERJUk5BTUUsICRGSUxFX05BTUUpPgorCitSZXR1cm4gdHJ1ZSBpZmYgJERJUiBjb250YWlucyBhIGZpbGUgbmFtZSB0aGF0IG1hdGNoZXMgJEZJTEVfTkFNRSBjYXNlCitpbnNlbnNpdGl2ZWx5LgorCitXZSBuZWVkIHRvIGJlIGNhdXRpb3VzIG9uIGNhc2UtaW5zZW5zaXRpdmUgY2FzZS1wcmVzZXJ2aW5nIGZpbGUKK3N5c3RlbXMgKGUuZy4gTWFjIE9TIFgncyBIRlMrKS4gIE9uIHN1Y2ggc3lzdGVtcyBDPC1mICdGb28nPiBhbmQgQzwtZgorJ2ZvTyc+IGFuc3dlciB0aGUgc2FtZSB0aGluZy4gIEhlbmNlIGlmIGEgcGFja2FnZSBkaXN0cmlidXRlcyBpdHMgb3duCitGPENIQU5HRUxPRz4gZmlsZSwgYnV0IGhhcyBubyBGPENoYW5nZUxvZz4gZmlsZSwgYXV0b21ha2Ugd291bGQgc3RpbGwKK3RyeSB0byBkaXN0cmlidXRlIEY8Q2hhbmdlTG9nPiAoYmVjYXVzZSBpdCB0aGlua3MgaXQgZXhpc3RzKSBpbgorYWRkaXRpb24gdG8gRjxDSEFOR0VMT0c+LCBhbHRob3VnaCBpdCBpcyBpbXBvc3NpYmxlIGZvciB0aGVzZSB0d28KK2ZpbGVzIHRvIGJlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSAodGhlIHR3byBmaWxlIG5hbWVzIGRlc2lnbmF0ZSB0aGUKK3NhbWUgZmlsZSkuCisKKz1jdXQKKwordXNlIHZhcnMgJyVfZGlyZWN0b3J5X2NhY2hlJzsKK3N1YiBkaXJfaGFzX2Nhc2VfbWF0Y2hpbmdfZmlsZSAoJCQpCit7CisgICMgTm90ZSB0aGF0IHByaW50IEZpbGU6OlNwZWMtPmNhc2VfdG9sZXJhbnQgcmV0dXJucyAwIGV2ZW4gb24gTWFjT1MKKyAgIyBYICh3aXRoIFBlcmwgdjUuOC4xLVJDMyBhdCBsZWFzdCksIHNvIGRvIG5vdCB0cnkgdG8gc2hvcnRjdXQgdGhpcworICAjIGZ1bmN0aW9uIHVzaW5nIHRoYXQuCisKKyAgbXkgKCRkaXJuYW1lLCAkZmlsZV9uYW1lKSA9IEBfOworICByZXR1cm4gMCB1bmxlc3MgLWYgIiRkaXJuYW1lLyRmaWxlX25hbWUiOworCisgICMgVGhlIGZpbGUgYXBwZWFycyB0byBleGlzdCwgaG93ZXZlciBpdCBtaWdodCBiZSBhIG1pcmFnZSBpZiB0aGUKKyAgIyBzeXN0ZW0gaXMgY2FzZSBpbnNlbnNpdGl2ZS4gIExldCdzIGJyb3dzZSB0aGUgZGlyZWN0b3J5IGFuZCBjaGVjaworICAjIHdoZXRoZXIgdGhlIGZpbGUgaXMgcmVhbGx5IGluLiAgV2UgbWFpbnRhaW4gYSBjYWNoZSBvZiBkaXJlY3RvcmllcworICAjIHNvIEF1dG9tYWtlIGRvZXNuJ3Qgc3BlbmQgYWxsIGl0cyB0aW1lIHJlYWRpbmcgdGhlIHNhbWUgZGlyZWN0b3J5CisgICMgYWdhaW4gYW5kIGFnYWluLgorICBpZiAoIWV4aXN0cyAkX2RpcmVjdG9yeV9jYWNoZXskZGlybmFtZX0pCisgICAgeworICAgICAgZXJyb3IgImZhaWxlZCB0byBvcGVuIGRpcmVjdG9yeSBgJGRpcm5hbWUnIgorCXVubGVzcyBvcGVuZGlyIChESVIsICRkaXJuYW1lKTsKKyAgICAgICRfZGlyZWN0b3J5X2NhY2hleyRkaXJuYW1lfSA9IHsgbWFwIHsgJF8gPT4gMSB9IHJlYWRkaXIgKERJUikgfTsKKyAgICAgIGNsb3NlZGlyIChESVIpOworICAgIH0KKyAgcmV0dXJuIGV4aXN0cyAkX2RpcmVjdG9yeV9jYWNoZXskZGlybmFtZX17JGZpbGVfbmFtZX07Cit9CisKKz1pdGVtIEM8cmVzZXRfZGlyX2NhY2hlICgkZGlybmFtZSk+CisKK0NsZWFyIEM8ZGlyX2hhc19jYXNlX21hdGNoaW5nX2ZpbGU+J3MgY2FjaGUgZm9yIEM8JGRpcm5hbWU+LgorCis9Y3V0CisKK3N1YiByZXNldF9kaXJfY2FjaGUgKCQpCit7CisgIGRlbGV0ZSAkX2RpcmVjdG9yeV9jYWNoZXskX1swXX07Cit9CisKKz1pdGVtIEM8c2V0X2Rpcl9jYWNoZV9maWxlICgkZGlybmFtZSwgJGZpbGVfbmFtZSk+CisKK1N0YXRlIHRoYXQgQzwkZGlybmFtZT4gY29udGFpbnMgQzwkZmlsZV9uYW1lPiBub3cuCisKKz1jdXQKKworc3ViIHNldF9kaXJfY2FjaGVfZmlsZSAoJCQpCit7CisgIG15ICgkZGlybmFtZSwgJGZpbGVfbmFtZSkgPSBAXzsKKyAgJF9kaXJlY3RvcnlfY2FjaGV7JGRpcm5hbWV9eyRmaWxlX25hbWV9ID0gMQorICAgIGlmIGV4aXN0cyAkX2RpcmVjdG9yeV9jYWNoZXskZGlybmFtZX07Cit9CisKKzE7ICMgZm9yIHJlcXVpcmUKKworIyMjIFNldHVwICJHTlUiIHN0eWxlIGZvciBwZXJsLW1vZGUgYW5kIGNwZXJsLW1vZGUuCisjIyBMb2NhbCBWYXJpYWJsZXM6CisjIyBwZXJsLWluZGVudC1sZXZlbDogMgorIyMgcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1pbWFnaW5hcnktb2Zmc2V0OiAwCisjIyBwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWluZGVudC1sZXZlbDogMgorIyMgY3BlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1leHRyYS1uZXdsaW5lLWJlZm9yZS1icmFjZTogdAorIyMgY3BlcmwtbWVyZ2UtdHJhaWxpbmctZWxzZTogbmlsCisjIyBjcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgRW5kOgpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b2NvbmYvQXV0b200dGUvR2VuZXJhbC5wbSBiL3NoYXJlL2F1dG9jb25mL0F1dG9tNHRlL0dlbmVyYWwucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQxMTFiOQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9jb25mL0F1dG9tNHRlL0dlbmVyYWwucG0KQEAgLTAsMCArMSw0NDYgQEAKKyMgYXV0b2NvbmYgLS0gY3JlYXRlIGBjb25maWd1cmUnIHVzaW5nIG00IG1hY3JvcworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitwYWNrYWdlIEF1dG9tNHRlOjpHZW5lcmFsOworCis9aGVhZDEgTkFNRQorCitBdXRvbTR0ZTo6R2VuZXJhbCAtIGdlbmVyYWwgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIEF1dG9jb25mIGFuZCBBdXRvbWFrZQorCis9aGVhZDEgU1lOT1BTSVMKKworICB1c2UgQXV0b200dGU6OkdlbmVyYWwKKworPWhlYWQxIERFU0NSSVBUSU9OCisKK1RoaXMgcGVybCBtb2R1bGUgcHJvdmlkZXMgdmFyaW91cyBnZW5lcmFsIHB1cnBvc2Ugc3VwcG9ydCBmdW5jdGlvbnMKK3VzZWQgaW4gc2V2ZXJhbCBleGVjdXRhYmxlcyBvZiB0aGUgQXV0b2NvbmYgYW5kIEF1dG9tYWtlIHBhY2thZ2VzLgorCis9Y3V0CisKK3VzZSA1LjAwNV8wMzsKK3VzZSBFeHBvcnRlcjsKK3VzZSBBdXRvbTR0ZTo6Q2hhbm5lbERlZnM7Cit1c2UgQXV0b200dGU6OkNoYW5uZWxzOwordXNlIEZpbGU6OkJhc2VuYW1lOwordXNlIEZpbGU6OlBhdGggKCk7Cit1c2UgRmlsZTo6c3RhdDsKK3VzZSBJTzo6RmlsZTsKK3VzZSBDYXJwOwordXNlIHN0cmljdDsKKwordXNlIHZhcnMgcXcgKEBJU0EgQEVYUE9SVCk7CisKK0BJU0EgPSBxdyAoRXhwb3J0ZXIpOworCisjIFZhcmlhYmxlcyB3ZSBkZWZpbmUgYW5kIGV4cG9ydC4KK215IEBleHBvcnRfdmFycyA9CisgIHF3ICgkZGVidWcgJGZvcmNlICRoZWxwICRtZSAkdG1wICR2ZXJib3NlICR2ZXJzaW9uKTsKKworIyBGdW5jdGlvbnMgd2UgZGVmaW5lIGFuZCBleHBvcnQuCitteSBAZXhwb3J0X3N1YnMgPQorICBxdyAoJmRlYnVnCisgICAgICAmZ2V0b3B0ICZzaGVsbF9xdW90ZSAmbWt0bXBkaXIKKyAgICAgICZ1bmlxKTsKKworIyBGdW5jdGlvbnMgd2UgZm9yd2FyZCAoY29taW5nIGZyb20gbW9kdWxlcyB3ZSB1c2UpLgorbXkgQGV4cG9ydF9mb3J3YXJkX3N1YnMgPQorICBxdyAoJmJhc2VuYW1lICZkaXJuYW1lICZmaWxlcGFyc2UpOworCitARVhQT1JUID0gKEBleHBvcnRfdmFycywgQGV4cG9ydF9zdWJzLCBAZXhwb3J0X2ZvcndhcmRfc3Vicyk7CisKKworIyBWYXJpYWJsZSB3ZSBzaGFyZSB3aXRoIHRoZSBtYWluIHBhY2thZ2UuICBCZSBzdXJlIHRvIGhhdmUgYSBzaW5nbGUKKyMgY29weSBvZiB0aGVtOiB1c2luZyBgbXknIHRvZ2V0aGVyIHdpdGggbXVsdGlwbGUgaW5jbHVzaW9uIG9mIHRoaXMKKyMgcGFja2FnZSB3b3VsZCBpbnRyb2R1Y2Ugc2V2ZXJhbCBjb3BpZXMuCisKKz1oZWFkMiBHbG9iYWwgVmFyaWFibGVzCisKKz1vdmVyIDQKKworPWl0ZW0gQzwkZGVidWc+CisKK1NldCB0aGlzIHZhcmlhYmxlIHRvIDEgaWYgZGVidWcgbWVzc2FnZXMgc2hvdWxkIGJlIGVuYWJsZWQuICBEZWJ1ZworbWVzc2FnZXMgYXJlIG1lYW50IGZvciBkZXZlbG9wcGVycyBvbmx5LCBvciB3aGVuIHRyYWNraW5nIGRvd24gYW4KK2luY29ycmVjdCBleGVjdXRpb24uCisKKz1jdXQKKwordXNlIHZhcnMgcXcgKCRkZWJ1Zyk7CiskZGVidWcgPSAwOworCis9aXRlbSBDPCRmb3JjZT4KKworU2V0IHRoaXMgdmFyaWFibGUgdG8gMSB0byByZWNyZWF0ZSBhbGwgdGhlIGZpbGVzLCBvciB0byBjb25zaWRlciBhbGwKK3RoZSBvdXRwdXQgZmlsZXMgYXJlIG9ic29sZXRlLgorCis9Y3V0CisKK3VzZSB2YXJzIHF3ICgkZm9yY2UpOworJGZvcmNlID0gdW5kZWY7CisKKz1pdGVtIEM8JGhlbHA+CisKK1NldCB0byB0aGUgaGVscCBtZXNzYWdlIGFzc29jaWF0ZWQgdG8gdGhlIG9wdGlvbiBDPC0taGVscD4uCisKKz1jdXQKKwordXNlIHZhcnMgcXcgKCRoZWxwKTsKKyRoZWxwID0gdW5kZWY7CisKKz1pdGVtIEM8JG1lPgorCitUaGUgbmFtZSBvZiB0aGlzIGFwcGxpY2F0aW9uLCBhcyBzaG91bGQgYmUgdXNlZCBpbiBkaWFnb3N0aWMgbWVzc2FnZXMuCisKKz1jdXQKKwordXNlIHZhcnMgcXcgKCRtZSk7CiskbWUgPSBiYXNlbmFtZSAoJDApOworCis9aXRlbSBDPCR0bXA+CisKK1RoZSBuYW1lIG9mIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGNyZWF0ZWQgYnkgQzxta3RtcGRpcj4uICBMZWZ0CitDPHVuZGVmPiBvdGhlcndpc2UuCisKKz1jdXQKKworIyBPdXIgdG1wIGRpci4KK3VzZSB2YXJzIHF3ICgkdG1wKTsKKyR0bXAgPSB1bmRlZjsKKworPWl0ZW0gQzwkdmVyYm9zZT4KKworRW5hYmxlIHZlcmJvc2l0eSBtZXNzYWdlcy4gIFRoZXNlIG1lc3NhZ2VzIGFyZSBtZWFudCBmb3Igb3JkaW5hcnkKK3VzZXJzLCBhbmQgdHlwaWNhbGx5IG1ha2UgZXhwbGljaXQgdGhlIHN0ZXBzIGJlaW5nIHBlcmZvcm1lZC4KKworPWN1dAorCit1c2UgdmFycyBxdyAoJHZlcmJvc2UpOworJHZlcmJvc2UgPSAwOworCis9aXRlbSBDPCR2ZXJzaW9uPgorCitTZXQgdG8gdGhlIHZlcnNpb24gbWVzc2FnZSBhc3NvY2lhdGVkIHRvIHRoZSBvcHRpb24gQzwtLXZlcnNpb24+LgorCis9Y3V0CisKK3VzZSB2YXJzIHF3ICgkdmVyc2lvbik7CiskdmVyc2lvbiA9IHVuZGVmOworCis9YmFjaworCis9Y3V0CisKKworCisjIyAtLS0tLSAjIworIyMgRU5ELiAgIyMKKyMjIC0tLS0tICMjCisKKz1oZWFkMiBGdW5jdGlvbnMKKworPW92ZXIgNAorCis9aXRlbSBDPEVORD4KKworRmlsdGVyIFBlcmwncyBleGl0IGNvZGVzLCBkZWxldGUgYW55IHRlbXBvcmFyeSBkaXJlY3RvcnkgKHVubGVzcworQzwkZGVidWc+KSwgYW5kIGV4aXQgbm9uemVybyB3aGVuZXZlciBjbG9zaW5nIEM8U1RET1VUPiBmYWlscy4KKworPWN1dAorCisjIEVORAorIyAtLS0KK3N1YiBFTkQKK3sKKyAgIyAkPyBjb250YWlucyB0aGUgZXhpdCBzdGF0dXMgd2Ugd2lsbCByZXR1cm4uCisgICMgSXQgd2FzIHNldCB1c2luZyBvbmUgb2YgdGhlIGZvbGxvd2luZyB3YXlzOgorICAjCisgICMgIDEpIG5vcm1hbCB0ZXJtaW5hdGlvbgorICAjICAgICB0aGlzIHNldHMgJD8gPSAwCisgICMgIDIpIGNhbGxpbmcgYGV4aXQgKG4pJworICAjICAgICB0aGlzIHNldHMgJD8gPSBuCisgICMgIDMpIGNhbGxpbmcgZGllIG9yIGZyaWVuZHMgKGNyb2FrLCBjb25mZXNzLi4uKToKKyAgIyAgICAgYSkgd2hlbiAkISBpcyBub24tMAorICAjICAgICAgICB0aGlzIHNldCAkPyA9ICQhCisgICMgICAgIGIpIHdoZW4gJCEgaXMgMCBidXQgJD8gaXMgbm90CisgICMgICAgICAgIHRoaXMgc2V0cyAkPyA9ICgkPyA+PiA4KSAgIChpLmUuLCB0aGUgZXhpdCBjb2RlIG9mIHRoZQorICAjICAgICAgICBsYXN0IHByb2dyYW0gZXhlY3V0ZWQpCisgICMgICAgIGMpIHdoZW4gYm90aCAkISBhbmQgJD8gYXJlIDAKKyAgIyAgICAgICAgdGhpcyBzZXRzICQ/ID0gMjU1CisgICMKKyAgIyBDYXNlcyAxKSwgMiksIGFuZCAzYikgYXJlIGZpbmUsIGJ1dCB3ZSBwcmVmZXIgJD8gPSAxIGZvciAzYSkgYW5kIDNjKS4KKyAgbXkgJHN0YXR1cyA9ICQ/OworICAkc3RhdHVzID0gMSBpZiAoJCEgJiYgJCEgPT0gJD8pIHx8ICQ/ID09IDI1NTsKKyAgIyAoTm90ZSB0aGF0IHdlIGNhbm5vdCBzYWZlbHkgZGlzdGluZ3Vpc2ggY2FsbHMgdG8gYGV4aXQgKG4pJworICAjIGZyb20gY2FsbHMgdG8gZGllIHdoZW4gYCQhID0gbicuICBJdCdzIG5vdCBiaWcgZGVhbCBiZWNhdXNlCisgICMgd2Ugb25seSBjYWxsIGBleGl0ICgwKScgb3IgYGV4aXQgKDEpJy4pCisKKyAgaWYgKCEkZGVidWcgJiYgZGVmaW5lZCAkdG1wICYmIC1kICR0bXApCisgICAgeworICAgICAgbG9jYWwgJFNJR3tfX1dBUk5fX30gPSBzdWIgeyAkc3RhdHVzID0gMTsgd2FybiAkX1swXSB9OworICAgICAgRmlsZTo6UGF0aDo6cm10cmVlICR0bXA7CisgICAgfQorCisgICMgVGhpcyBpcyByZXF1aXJlZCBpZiB0aGUgY29kZSBtaWdodCBzZW5kIGFueSBvdXRwdXQgdG8gc3Rkb3V0CisgICMgRS5nLiwgZXZlbiAtLXZlcnNpb24gb3IgLS1oZWxwLiAgU28gaXQncyBiZXN0IHRvIGRvIGl0IHVuY29uZGl0aW9uYWxseS4KKyAgaWYgKCEgY2xvc2UgU1RET1VUKQorICAgIHsKKyAgICAgIHByaW50IFNUREVSUiAiJG1lOiBjbG9zaW5nIHN0YW5kYXJkIG91dHB1dDogJCFcbiI7CisgICAgICAkPyA9IDE7CisgICAgICByZXR1cm47CisgICAgfQorCisgICQ/ID0gJHN0YXR1czsKK30KKworCisjIyAtLS0tLS0tLS0tLSAjIworIyMgRnVuY3Rpb25zLiAgIyMKKyMjIC0tLS0tLS0tLS0tICMjCisKKworPWl0ZW0gQzxkZWJ1ZyAoQG1lc3NhZ2UpPgorCitJZiB0aGUgZGVidWcgbW9kZSBpcyBlbmFibGVkIChDPCRkZWJ1Zz4gYW5kIEM8JHZlcmJvc2U+KSwgcmVwb3J0IHRoZQorQzxAbWVzc2FnZT4gb24gQzxTVERFUlI+LCBzaWduZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbS4KKworPWN1dAorCisjICZkZWJ1ZyhATUVTU0FHRSkKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBNZXNzYWdlcyBkaXNwbGF5ZWQgb25seSBpZiAkREVCVUcgYW5kICRWRVJCT1NFLgorc3ViIGRlYnVnIChAKQoreworICBwcmludCBTVERFUlIgIiRtZTogIiwgQF8sICJcbiIKKyAgICBpZiAkdmVyYm9zZSAmJiAkZGVidWc7Cit9CisKKworPWl0ZW0gQzxnZXRvcHQgKCVvcHRpb24pPgorCitXcmFwcGVyIGFyb3VuZCBDPEdldG9wdDo6TG9uZz4uICBJbiBhZGRpdGlvbiB0byB0aGUgdXNlciBDPG9wdGlvbj5zLAorc3VwcG9ydCBDPC1oPi9DPC0taGVscD4sIEM8LVY+L0M8LS12ZXJzaW9uPiwgQzwtdj4vQzwtLXZlcmJvc2U+LAorQzwtZD4vQzwtLWRlYnVnPiwgQzwtZj4vQzwtLWZvcmNlPi4gIENvbmZvcm0gdG8gdGhlIEdOVSBDb2RpbmcKK1N0YW5kYXJkcyBmb3IgZXJyb3IgbWVzc2FnZXMuICBUcnkgdG8gd29yayBhcm91bmQgYSB3ZWlyZCBiZWhhdmlvcgorZnJvbSBDPEdldG9wdDo6TG9uZz4gdG8gcHJlc2VydmUgQzwtPiBhcyBhbiBDPEBBUkdWPiBpbnN0ZWFkIG9mCityZWplY3RpbmcgaXQgYXMgYSBicm9rZW4gb3B0aW9uLgorCis9Y3V0CisKKyMgZ2V0b3B0ICglT1BUSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tCisjIEhhbmRsZSB0aGUgJU9QVElPTiwgcGx1cyBhbGwgdGhlIGNvbW1vbiBvcHRpb25zLgorIyBXb3JrIGFyb3VuZCBHZXRvcHQgYnVncyB3cnQgYC0nLgorc3ViIGdldG9wdCAoJSkKK3sKKyAgbXkgKCVvcHRpb24pID0gQF87CisgIHVzZSBHZXRvcHQ6Okxvbmc7CisKKyAgIyBGKmsuICBHZXRvcHQgc2VlbXMgYm9ndXMgYW5kIGRpZXMgd2hlbiBnaXZlbiBgLScgd2l0aCBgYnVuZGxpbmcnLgorICAjIElmIGZpeGVkIHNvbWUgZGF5LCB1c2UgdGhpczogJycgPT4gc3ViIHsgcHVzaCBAQVJHViwgIi0iIH0KKyAgbXkgJHN0ZGluID0gZ3JlcCAvXi0kLywgQEFSR1Y7CisgIEBBUkdWID0gZ3JlcCAhL14tJC8sIEBBUkdWOworICAlb3B0aW9uID0gKCJofGhlbHAiICAgICA9PiBzdWIgeyBwcmludCAkaGVscDsgZXhpdCAwIH0sCisJICAgICAiVnx2ZXJzaW9uIiAgPT4gc3ViIHsgcHJpbnQgJHZlcnNpb247IGV4aXQgMCB9LAorCisJICAgICAidnx2ZXJib3NlIiAgPT4gc3ViIHsgKyskdmVyYm9zZSB9LAorCSAgICAgImR8ZGVidWciICAgID0+IHN1YiB7ICsrJGRlYnVnIH0sCisJICAgICAnZnxmb3JjZScgICAgPT4gXCRmb3JjZSwKKworCSAgICAgIyBVc2VyIG9wdGlvbnMgbGFzdCwgc28gdGhhdCB0aGV5IGhhdmUgcHJlY2VkZW5jZS4KKwkgICAgICVvcHRpb24pOworICBHZXRvcHQ6Okxvbmc6OkNvbmZpZ3VyZSAoImJ1bmRsaW5nIiwgInBhc3NfdGhyb3VnaCIpOworICBHZXRPcHRpb25zICglb3B0aW9uKQorICAgIG9yIGV4aXQgMTsKKworICBmb3JlYWNoIChncmVwIHsgL14tLi8gfSBAQVJHVikKKyAgICB7CisgICAgICBwcmludCBTVERFUlIgIiQwOiB1bnJlY29nbml6ZWQgb3B0aW9uIGAkXydcbiI7CisgICAgICBwcmludCBTVERFUlIgIlRyeSBgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiI7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisKKyAgcHVzaCBAQVJHViwgJy0nCisgICAgaWYgJHN0ZGluOworCisgIHNldHVwX2NoYW5uZWwgJ25vdGUnLCBzaWxlbnQgPT4gISR2ZXJib3NlOworICBzZXR1cF9jaGFubmVsICd2ZXJiJywgc2lsZW50ID0+ICEkdmVyYm9zZTsKK30KKworCis9aXRlbSBDPHNoZWxsX3F1b3RlICgkZmlsZV9uYW1lKT4KKworUXVvdGUgQzwkZmlsZV9uYW1lPiBmb3IgdGhlIHNoZWxsLgorCis9Y3V0CisKKyMgJEZJTEVfTkFNRQorIyBzaGVsbF9xdW90ZSAoJEZJTEVfTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmIHRoZSBzdHJpbmcgJFMgaXMgYSB3ZWxsLWJlaGF2ZWQgZmlsZSBuYW1lLCBzaW1wbHkgcmV0dXJuIGl0LgorIyBJZiBpdCBjb250YWlucyB3aGl0ZSBzcGFjZSwgcXVvdGVzLCBldGMuLCBxdW90ZSBpdCwgYW5kIHJldHVybgorIyB0aGUgbmV3IHN0cmluZy4KK3N1YiBzaGVsbF9xdW90ZSgkKQoreworICBteSAoJHMpID0gQF87CisgIGlmICgkcyA9fiBtIVteXHcrLy4sLV0hKQorICAgIHsKKyAgICAgICMgQ29udmVydCBlYWNoIHNpbmdsZSBxdW90ZSB0byAnXCcnCisgICAgICAkcyA9fiBzL1wnL1wnXFxcJ1wnL2c7CisgICAgICAjIFRoZW4gc2luZ2xlIHF1b3RlIHRoZSBzdHJpbmcuCisgICAgICAkcyA9ICInJHMnIjsKKyAgICB9CisgIHJldHVybiAkczsKK30KKworPWl0ZW0gQzxta3RtcGRpciAoJHNpZ25hdHVyZSk+CisKK0NyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3Rvcnkgd2hpY2ggbmFtZSBpcyBiYXNlZCBvbiBDPCRzaWduYXR1cmU+LgorU3RvcmUgaXRzIG5hbWUgaW4gQzwkdG1wPi4gIEM8RU5EPiBpcyBpbiBjaGFyZ2Ugb2YgcmVtb3ZpbmcgaXQsIHVubGVzcworQzwkZGVidWc+LgorCis9Y3V0CisKKyMgbWt0bXBkaXIgKCRTSUdOQVRVUkUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3ViIG1rdG1wZGlyICgkKQoreworICBteSAoJHNpZ25hdHVyZSkgPSBAXzsKKyAgbXkgJFRNUERJUiA9ICRFTlZ7J1RNUERJUid9IHx8ICcvdG1wJzsKKyAgbXkgJHF1b3RlZF90bXBkaXIgPSBzaGVsbF9xdW90ZSAoJFRNUERJUik7CisKKyAgIyBJZiBta3RlbXAgc3VwcG9ydHMgZGlycywgdXNlIGl0LgorICAkdG1wID0gYCh1bWFzayAwNzcgJiYKKwkgICBta3RlbXAgLWQgJHF1b3RlZF90bXBkaXIvIiR7c2lnbmF0dXJlfVhYWFhYWCIpIDI+L2Rldi9udWxsYDsKKyAgY2hvbXAgJHRtcDsKKworICBpZiAoISR0bXAgfHwgISAtZCAkdG1wKQorICAgIHsKKyAgICAgICR0bXAgPSAiJFRNUERJUi8kc2lnbmF0dXJlIiAuIGludCAocmFuZCAxMDAwMCkgLiAiLiQkIjsKKyAgICAgIG1rZGlyICR0bXAsIDA3MDAKKwlvciBjcm9hayAiJG1lOiBjYW5ub3QgY3JlYXRlICR0bXA6ICQhXG4iOworICAgIH0KKworICBwcmludCBTVERFUlIgIiRtZTokJDogd29ya2luZyBpbiAkdG1wXG4iCisgICAgaWYgJGRlYnVnOworfQorCisKKz1pdGVtIEM8dW5pcSAoQGxpc3QpPgorCitSZXR1cm4gQzxAbGlzdD4gd2l0aCBubyBkdXBsaWNhdGVzLCBrZWVwaW5nIG9ubHkgdGhlIGZpcnN0CitvY2N1cnJlbmNlcy4KKworPWN1dAorCisjIEBSRVMKKyMgdW5pcSAoQExJU1QpCisjIC0tLS0tLS0tLS0tLQorc3ViIHVuaXEgKEApCit7CisgIG15IEByZXMgPSAoKTsKKyAgbXkgJXNlZW4gPSAoKTsKKyAgZm9yZWFjaCBteSAkaXRlbSAoQF8pCisgICAgeworICAgICAgaWYgKCEgZXhpc3RzICRzZWVueyRpdGVtfSkKKwl7CisJICAkc2VlbnskaXRlbX0gPSAxOworCSAgcHVzaCAoQHJlcywgJGl0ZW0pOworCX0KKyAgICB9CisgIHJldHVybiB3YW50YXJyYXkgPyBAcmVzIDogIkByZXMiOworfQorCisKKz1pdGVtIEM8aGFuZGxlX2V4ZWNfZXJyb3JzICgkY29tbWFuZCk+CisKK0Rpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZSBmb3IgQzwkY29tbWFuZD4sIGJhc2VkIG9uIHRoZSBjb250ZW50IG9mCitDPCQ/PiBhbmQgQzwkIT4uCisKKz1jdXQKKworCisjIGhhbmRsZV9leGVjX2Vycm9ycyAoJENPTU1BTkQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdWIgaGFuZGxlX2V4ZWNfZXJyb3JzICgkKQoreworICBteSAoJGNvbW1hbmQpID0gQF87CisKKyAgJGNvbW1hbmQgPSAoc3BsaXQgKCcgJywgJGNvbW1hbmQpKVswXTsKKyAgaWYgKCQhKQorICAgIHsKKyAgICAgIGVycm9yICJmYWlsZWQgdG8gcnVuICRjb21tYW5kOiAkISI7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdXNlIFBPU0lYIHF3IChXSUZFWElURUQgV0VYSVRTVEFUVVMgV0lGU0lHTkFMRUQgV1RFUk1TSUcpOworCisgICAgICBpZiAoV0lGRVhJVEVEICgkPykpCisJeworCSAgbXkgJHN0YXR1cyA9IFdFWElUU1RBVFVTICgkPyk7CisJICAjIFdJRkVYSVRFRCBhbmQgV0VYSVRTVEFUVVMgY2FuIGFsdGVyICQhLCByZXNldCBpdCBzbyB0aGF0CisJICAjIGVycm9yKCkgYWN0dWFsbHkgcHJvcGFnYXRlcyB0aGUgY29tbWFuZCdzIGV4aXQgc3RhdHVzLCBub3QgJCEuCisJICAkISA9IDA7CisJICBlcnJvciAiJGNvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXM6ICRzdGF0dXMiOworCX0KKyAgICAgIGVsc2lmIChXSUZTSUdOQUxFRCAoJD8pKQorCXsKKwkgIG15ICRzaWduYWwgPSBXVEVSTVNJRyAoJD8pOworCSAgIyBJbiB0aGlzIGNhc2Ugd2UgcHJlZmVyIHRvIGV4aXQgd2l0aCBzdGF0dXMgMS4KKwkgICQhID0gMTsKKwkgIGVycm9yICIkY29tbWFuZCB0ZXJtaW5hdGVkIGJ5IHNpZ25hbDogJHNpZ25hbCI7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGVycm9yICIkY29tbWFuZCBleGl0ZWQgYWJub3JtYWxseSI7CisJfQorICAgIH0KK30KKworPWJhY2sKKworPWhlYWQxIFNFRSBBTFNPCisKK0w8QXV0b200dGU6OlhGaWxlPgorCis9aGVhZDEgSElTVE9SWQorCitXcml0dGVuIGJ5IEFsZXhhbmRyZSBEdXJldC1MdXR6IEU8bHQ+RjxhZGxAZ251Lm9yZz5FPGd0PiBhbmQgQWtpbQorRGVtYWlsbGUgRTxsdD5GPGFraW1AZnJlZWZyaWVuZHMub3JnPkU8Z3Q+LgorCis9Y3V0CisKKworCisxOyAjIGZvciByZXF1aXJlCisKKyMjIyBTZXR1cCAiR05VIiBzdHlsZSBmb3IgcGVybC1tb2RlIGFuZCBjcGVybC1tb2RlLgorIyMgTG9jYWwgVmFyaWFibGVzOgorIyMgcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIHBlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIHBlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2UtaW1hZ2luYXJ5LW9mZnNldDogMAorIyMgcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIGNwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtZXh0cmEtbmV3bGluZS1iZWZvcmUtYnJhY2U6IHQKKyMjIGNwZXJsLW1lcmdlLXRyYWlsaW5nLWVsc2U6IG5pbAorIyMgY3BlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIEVuZDoKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9jb25mL0F1dG9tNHRlL1JlcXVlc3QucG0gYi9zaGFyZS9hdXRvY29uZi9BdXRvbTR0ZS9SZXF1ZXN0LnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYzU0ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvY29uZi9BdXRvbTR0ZS9SZXF1ZXN0LnBtCkBAIC0wLDAgKzEsMTE0IEBACisjIGF1dG9jb25mIC0tIGNyZWF0ZSBgY29uZmlndXJlJyB1c2luZyBtNCBtYWNyb3MKKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworcGFja2FnZSBBdXRvbTR0ZTo6UmVxdWVzdDsKKworPWhlYWQxIE5BTUUKKworQXV0b200dGU6OlJlcXVlc3QgLSBhIHNpbmdsZSBtNCBydW4gcmVxdWVzdAorCis9aGVhZDEgU1lOT1BTSVMKKworICB1c2UgQXV0b200dGU6OlJlcXVlc3Q7CisKKz1oZWFkMSBERVNDUklQVElPTgorCitUaGlzIHBlcmwgbW9kdWxlIHByb3ZpZGVzIHZhcmlvdXMgZ2VuZXJhbCBwdXJwb3NlIHN1cHBvcnQgZnVuY3Rpb25zCit1c2VkIGluIHNldmVyYWwgZXhlY3V0YWJsZXMgb2YgdGhlIEF1dG9jb25mIGFuZCBBdXRvbWFrZSBwYWNrYWdlcy4KKworPWN1dAorCit1c2Ugc3RyaWN0OwordXNlIEF1dG9tNHRlOjpTdHJ1Y3Q7Cit1c2UgQ2FycDsKK3VzZSBEYXRhOjpEdW1wZXI7CisKK3N0cnVjdAorICAoCisgICAjIFRoZSBrZXkgb2YgdGhlIGNhY2hlIGZpbGVzLgorICAgJ2lkJyA9PiAiXCQiLAorICAgIyBUcnVlIGlmZiAlTUFDUk8gY29udGFpbnMgYWxsIHRoZSBtYWNyb3Mgd2Ugd2FudCB0byB0cmFjZS4KKyAgICd2YWxpZCcgPT4gIlwkIiwKKyAgICMgVGhlIGluY2x1ZGUgcGF0aC4KKyAgICdwYXRoJyA9PiAnQCcsCisgICAjIFRoZSBzZXQgb2YgaW5wdXQgZmlsZXMuCisgICAnaW5wdXQnID0+ICdAJywKKyAgICMgVGhlIHNldCBvZiBtYWNyb3MgY3VycmVudGx5IHRyYWNlZC4KKyAgICdtYWNybycgPT4gJyUnLAorICApOworCisKKyMgU2VyaWFsaXplIGEgcmVxdWVzdCBvciBhbGwgdGhlIGN1cnJlbnQgcmVxdWVzdHMuCitzdWIgbWFyc2hhbGwoJCkKK3sKKyAgbXkgKCRjYWxsZXIpID0gQF87CisgIG15ICRyZXMgPSAnJzsKKworICAjIENBTExFUiBpcyBhbiBvYmplY3Q6IGluc3RhbmNlIG1ldGhvZC4KKyAgbXkgJG1hcnNoYWxsID0gRGF0YTo6RHVtcGVyLT5uZXcgKFskY2FsbGVyXSk7CisgICRtYXJzaGFsbC0+SW5kZW50KDIpLT5UZXJzZSgwKTsKKyAgJHJlcyA9ICRtYXJzaGFsbC0+RHVtcCAuICJcbiI7CisKKyAgcmV0dXJuICRyZXM7Cit9CisKKworIyBpbmNsdWRlc19wICgkU0VMRiwgQE1BQ1JPKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEb2VzIHRoaXMgcmVxdWVzdCBjb3ZlcnMgYWxsIHRoZSBATUFDUk8uCitzdWIgaW5jbHVkZXNfcAoreworICBteSAoJHNlbGYsIEBtYWNybykgPSBAXzsKKworICBmb3JlYWNoIChAbWFjcm8pCisgICAgeworICAgICAgcmV0dXJuIDAKKwlpZiAhIGV4aXN0cyAkeyRzZWxmLT5tYWNyb317JF99OworICAgIH0KKyAgcmV0dXJuIDE7Cit9CisKKworPWhlYWQxIFNFRSBBTFNPCisKK0w8QXV0b200dGU6OkM0Y2hlPgorCis9aGVhZDEgSElTVE9SWQorCitXcml0dGVuIGJ5IEFraW0gRGVtYWlsbGUgRTxsdD5GPGFraW1AZnJlZWZyaWVuZHMub3JnPkU8Z3Q+LgorCis9Y3V0CisKKworCisxOyAjIGZvciByZXF1aXJlCisKKyMjIyBTZXR1cCAiR05VIiBzdHlsZSBmb3IgcGVybC1tb2RlIGFuZCBjcGVybC1tb2RlLgorIyMgTG9jYWwgVmFyaWFibGVzOgorIyMgcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIHBlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIHBlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2UtaW1hZ2luYXJ5LW9mZnNldDogMAorIyMgcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIGNwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtZXh0cmEtbmV3bGluZS1iZWZvcmUtYnJhY2U6IHQKKyMjIGNwZXJsLW1lcmdlLXRyYWlsaW5nLWVsc2U6IG5pbAorIyMgY3BlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIEVuZDoKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9jb25mL0F1dG9tNHRlL1N0cnVjdC5wbSBiL3NoYXJlL2F1dG9jb25mL0F1dG9tNHRlL1N0cnVjdC5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzUyZTUyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b2NvbmYvQXV0b200dGUvU3RydWN0LnBtCkBAIC0wLDAgKzEsNjI4IEBACisjIGF1dG9jb25mIC0tIGNyZWF0ZSBgY29uZmlndXJlJyB1c2luZyBtNCBtYWNyb3MKKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBUaGlzIGZpbGUgaXMgYmFzaWNhbGx5IFBlcmwgNS42J3MgQ2xhc3M6OlN0cnVjdCwgYnV0IG1hZGUgY29tcGF0aWJsZQorIyB3aXRoIFBlcmwgNS41LiAgSWYgc29tZWRheSB0aGlzIGhhcyB0byBiZSB1cGRhdGVkLCBiZSBzdXJlIHRvIHJlbmFtZQorIyBhbGwgdGhlIG9jY3VycmVuY2VzIG9mIENsYXNzOjpTdHJ1Y3QgaW50byBBdXRvbTR0ZTo6U3RydWN0LCBvdGhlcndpc2UKKyMgaWYgd2UgYHVzZScgYSBQZXJsIG1vZHVsZSAoZS5nLiwgRmlsZTo6c3RhdCkgdGhhdCB1c2VzIENsYXNzOjpTdHJ1Y3QsCisjIHdlIHdvdWxkIGhhdmUgdHdvIHBhY2thZ2VzIGRlZmluaW5nIHRoZSBzYW1lIHN5bWJvbHMuICBCb29tLgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGhlIG1haW4gY29weSBvZiB0aGlzIGZpbGUgaXMgaW4gQXV0b21ha2UncyBDVlMgcmVwb3NpdG9yeS4gIworIyBVcGRhdGVzIHNob3VsZCBiZSBzZW50IHRvIGF1dG9tYWtlLXBhdGNoZXNAZ251Lm9yZy4gICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworcGFja2FnZSBBdXRvbTR0ZTo6U3RydWN0OworCisjIyBTZWUgUE9EIGFmdGVyIF9fRU5EX18KKwordXNlIDUuMDA1XzAzOworCit1c2Ugc3RyaWN0OwordXNlIHZhcnMgcXcoQElTQSBARVhQT1JUICRWRVJTSU9OKTsKKwordXNlIENhcnA7CisKK3JlcXVpcmUgRXhwb3J0ZXI7CitASVNBID0gcXcoRXhwb3J0ZXIpOworQEVYUE9SVCA9IHF3KHN0cnVjdCk7CisKKyRWRVJTSU9OID0gJzAuNTgnOworCisjIyBUZXN0ZWQgb24gNS4wMDIgYW5kIDUuMDAzIHdpdGhvdXQgY2xhc3MgbWVtYmVyc2hpcCB0ZXN0czoKK215ICRDSEVDS19DTEFTU19NRU1CRVJTSElQID0gKCRdID49IDUuMDAzXzk1KTsKKworbXkgJHByaW50ID0gMDsKK3N1YiBwcmludGVtIHsKKyAgICBpZiAoQF8pIHsgJHByaW50ID0gc2hpZnQgfQorICAgIGVsc2UgICAgeyAkcHJpbnQrKyB9Cit9CisKK3sKKyAgICBwYWNrYWdlIEF1dG9tNHRlOjpTdHJ1Y3Q6OlRpZV9JU0E7CisKKyAgICBzdWIgVElFQVJSQVkgeworICAgICAgICBteSAkY2xhc3MgPSBzaGlmdDsKKyAgICAgICAgcmV0dXJuIGJsZXNzIFtdLCAkY2xhc3M7CisgICAgfQorCisgICAgc3ViIFNUT1JFIHsKKyAgICAgICAgbXkgKCRzZWxmLCAkaW5kZXgsICR2YWx1ZSkgPSBAXzsKKyAgICAgICAgQXV0b200dGU6OlN0cnVjdDo6X3N1YmNsYXNzX2Vycm9yKCk7CisgICAgfQorCisgICAgc3ViIEZFVENIIHsKKyAgICAgICAgbXkgKCRzZWxmLCAkaW5kZXgpID0gQF87CisgICAgICAgICRzZWxmLT5bJGluZGV4XTsKKyAgICB9CisKKyAgICBzdWIgRkVUQ0hTSVpFIHsKKyAgICAgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICAgICAgcmV0dXJuIHNjYWxhcihAJHNlbGYpOworICAgIH0KKworICAgIHN1YiBERVNUUk9ZIHsgfQorfQorCitzdWIgc3RydWN0IHsKKworICAgICMgRGV0ZXJtaW5lIHBhcmFtZXRlciBsaXN0IHN0cnVjdHVyZSwgb25lIG9mOgorICAgICMgICBzdHJ1Y3QoIGNsYXNzID0+IFsgZWxlbWVudC1saXN0IF0pCisgICAgIyAgIHN0cnVjdCggY2xhc3MgPT4geyBlbGVtZW50LWxpc3QgfSkKKyAgICAjICAgc3RydWN0KCBlbGVtZW50LWxpc3QgKQorICAgICMgTGF0dGVyIGZvcm0gYXNzdW1lcyBjdXJyZW50IHBhY2thZ2UgbmFtZSBhcyBzdHJ1Y3QgbmFtZS4KKworICAgIG15ICgkY2xhc3MsIEBkZWNscyk7CisgICAgbXkgJGJhc2VfdHlwZSA9IHJlZiAkX1sxXTsKKyAgICBpZiAoICRiYXNlX3R5cGUgZXEgJ0hBU0gnICkgeworICAgICAgICAkY2xhc3MgPSBzaGlmdDsKKyAgICAgICAgQGRlY2xzID0gJXtzaGlmdCgpfTsKKyAgICAgICAgX3VzYWdlX2Vycm9yKCkgaWYgQF87CisgICAgfQorICAgIGVsc2lmICggJGJhc2VfdHlwZSBlcSAnQVJSQVknICkgeworICAgICAgICAkY2xhc3MgPSBzaGlmdDsKKyAgICAgICAgQGRlY2xzID0gQHtzaGlmdCgpfTsKKyAgICAgICAgX3VzYWdlX2Vycm9yKCkgaWYgQF87CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAkYmFzZV90eXBlID0gJ0FSUkFZJzsKKyAgICAgICAgJGNsYXNzID0gKGNhbGxlcigpKVswXTsKKyAgICAgICAgQGRlY2xzID0gQF87CisgICAgfQorICAgIF91c2FnZV9lcnJvcigpIGlmIEBkZWNscyAlIDIgPT0gMTsKKworICAgICMgRW5zdXJlIHdlIGFyZSBub3QsIGFuZCB3aWxsIG5vdCBiZSwgYSBzdWJjbGFzcy4KKworICAgIG15ICRpc2EgPSBkbyB7CisgICAgICAgIG5vIHN0cmljdCAncmVmcyc7CisgICAgICAgIFxAeyRjbGFzcyAuICc6OklTQSd9OworICAgIH07CisgICAgX3N1YmNsYXNzX2Vycm9yKCkgaWYgQCRpc2E7CisgICAgdGllIEAkaXNhLCAnQXV0b200dGU6OlN0cnVjdDo6VGllX0lTQSc7CisKKyAgICAjIENyZWF0ZSBjb25zdHJ1Y3Rvci4KKworICAgIGNyb2FrICJmdW5jdGlvbiAnbmV3JyBhbHJlYWR5IGRlZmluZWQgaW4gcGFja2FnZSAkY2xhc3MiCisgICAgICAgIGlmIGRvIHsgbm8gc3RyaWN0ICdyZWZzJzsgZGVmaW5lZCAmeyRjbGFzcyAuICI6Om5ldyJ9IH07CisKKyAgICBteSBAbWV0aG9kcyA9ICgpOworICAgIG15ICVyZWZzID0gKCk7CisgICAgbXkgJWFycmF5cyA9ICgpOworICAgIG15ICVoYXNoZXMgPSAoKTsKKyAgICBteSAlY2xhc3NlcyA9ICgpOworICAgIG15ICRnb3RfY2xhc3MgPSAwOworICAgIG15ICRvdXQgPSAnJzsKKworICAgICRvdXQgPSAie1xuICBwYWNrYWdlICRjbGFzcztcbiAgdXNlIENhcnA7XG4gIHN1YiBuZXcge1xuIjsKKyAgICAkb3V0IC49ICIgICAgbXkgKFwkY2xhc3MsIFwlaW5pdCkgPSBcQF87XG4iOworICAgICRvdXQgLj0gIiAgICBcJGNsYXNzID0gX19QQUNLQUdFX18gdW5sZXNzIFxAXztcbiI7CisKKyAgICBteSAkY250ID0gMDsKKyAgICBteSAkaWR4ID0gMDsKKyAgICBteSggJGNtdCwgJG5hbWUsICR0eXBlLCAkZWxlbSApOworCisgICAgaWYoICRiYXNlX3R5cGUgZXEgJ0hBU0gnICl7CisgICAgICAgICRvdXQgLj0gIiAgICBteShcJHIpID0ge307XG4iOworICAgICAgICAkY210ID0gJyc7CisgICAgfQorICAgIGVsc2lmKCAkYmFzZV90eXBlIGVxICdBUlJBWScgKXsKKyAgICAgICAgJG91dCAuPSAiICAgIG15KFwkcikgPSBbXTtcbiI7CisgICAgfQorICAgIHdoaWxlKCAkaWR4IDwgQGRlY2xzICl7CisgICAgICAgICRuYW1lID0gJGRlY2xzWyRpZHhdOworICAgICAgICAkdHlwZSA9ICRkZWNsc1skaWR4KzFdOworICAgICAgICBwdXNoKCBAbWV0aG9kcywgJG5hbWUgKTsKKyAgICAgICAgaWYoICRiYXNlX3R5cGUgZXEgJ0hBU0gnICl7CisgICAgICAgICAgICAkZWxlbSA9ICJ7JyR7Y2xhc3N9OjokbmFtZSd9IjsKKyAgICAgICAgfQorICAgICAgICBlbHNpZiggJGJhc2VfdHlwZSBlcSAnQVJSQVknICl7CisgICAgICAgICAgICAkZWxlbSA9ICJbJGNudF0iOworICAgICAgICAgICAgKyskY250OworICAgICAgICAgICAgJGNtdCA9ICIgIyAkbmFtZSI7CisgICAgICAgIH0KKyAgICAgICAgaWYoICR0eXBlID1+IC9eXCooLikvICl7CisgICAgICAgICAgICAkcmVmc3skbmFtZX0rKzsKKyAgICAgICAgICAgICR0eXBlID0gJDE7CisgICAgICAgIH0KKyAgICAgICAgbXkgJGluaXQgPSAiZGVmaW5lZChcJGluaXR7JyRuYW1lJ30pID8gXCRpbml0eyckbmFtZSd9IDoiOworICAgICAgICBpZiggJHR5cGUgZXEgJ0AnICl7CisgICAgICAgICAgICAkb3V0IC49ICIgICAgY3JvYWsgJ0luaXRpYWxpemVyIGZvciAkbmFtZSBtdXN0IGJlIGFycmF5IHJlZmVyZW5jZSdcbiI7CisgICAgICAgICAgICAkb3V0IC49ICIgICAgICAgIGlmIGRlZmluZWQoXCRpbml0eyckbmFtZSd9KSAmJiByZWYoXCRpbml0eyckbmFtZSd9KSBuZSAnQVJSQVknO1xuIjsKKyAgICAgICAgICAgICRvdXQgLj0gIiAgICBcJHItPiRlbGVtID0gJGluaXQgW107JGNtdFxuIjsKKyAgICAgICAgICAgICRhcnJheXN7JG5hbWV9Kys7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoICR0eXBlIGVxICclJyApeworICAgICAgICAgICAgJG91dCAuPSAiICAgIGNyb2FrICdJbml0aWFsaXplciBmb3IgJG5hbWUgbXVzdCBiZSBoYXNoIHJlZmVyZW5jZSdcbiI7CisgICAgICAgICAgICAkb3V0IC49ICIgICAgICAgIGlmIGRlZmluZWQoXCRpbml0eyckbmFtZSd9KSAmJiByZWYoXCRpbml0eyckbmFtZSd9KSBuZSAnSEFTSCc7XG4iOworICAgICAgICAgICAgJG91dCAuPSAiICAgIFwkci0+JGVsZW0gPSAkaW5pdCB7fTskY210XG4iOworICAgICAgICAgICAgJGhhc2hlc3skbmFtZX0rKzsKKyAgICAgICAgfQorICAgICAgICBlbHNpZiAoICR0eXBlIGVxICckJykgeworICAgICAgICAgICAgJG91dCAuPSAiICAgIFwkci0+JGVsZW0gPSAkaW5pdCB1bmRlZjskY210XG4iOworICAgICAgICB9CisgICAgICAgIGVsc2lmKCAkdHlwZSA9fiAvXlx3Kyg/Ojo6XHcrKSokLyApeworICAgICAgICAgICAgJGluaXQgPSAiZGVmaW5lZChcJGluaXR7JyRuYW1lJ30pID8gXCV7XCRpbml0eyckbmFtZSd9fSA6ICgpIjsKKyAgICAgICAgICAgICRvdXQgLj0gIiAgICBjcm9hayAnSW5pdGlhbGl6ZXIgZm9yICRuYW1lIG11c3QgYmUgaGFzaCByZWZlcmVuY2UnXG4iOworICAgICAgICAgICAgJG91dCAuPSAiICAgICAgICBpZiBkZWZpbmVkKFwkaW5pdHsnJG5hbWUnfSkgJiYgcmVmKFwkaW5pdHsnJG5hbWUnfSkgbmUgJ0hBU0gnO1xuIjsKKyAgICAgICAgICAgICRvdXQgLj0gIiAgICBcJHItPiRlbGVtID0gJyR7dHlwZX0nLT5uZXcoJGluaXQpOyRjbXRcbiI7CisgICAgICAgICAgICAkY2xhc3Nlc3skbmFtZX0gPSAkdHlwZTsKKyAgICAgICAgICAgICRnb3RfY2xhc3MgPSAxOworICAgICAgICB9CisgICAgICAgIGVsc2V7CisgICAgICAgICAgICBjcm9hayAiJyR0eXBlJyBpcyBub3QgYSB2YWxpZCBzdHJ1Y3QgZWxlbWVudCB0eXBlIjsKKyAgICAgICAgfQorICAgICAgICAkaWR4ICs9IDI7CisgICAgfQorICAgICRvdXQgLj0gIiAgICBibGVzcyBcJHIsIFwkY2xhc3M7XG4gIH1cbiI7CisKKyAgICAjIENyZWF0ZSBhY2Nlc3NvciBtZXRob2RzLgorCisgICAgbXkoICRwcmUsICRwc3QsICRzZWwgKTsKKyAgICAkY250ID0gMDsKKyAgICBmb3JlYWNoICRuYW1lIChAbWV0aG9kcyl7CisgICAgICAgIGlmICggZG8geyBubyBzdHJpY3QgJ3JlZnMnOyBkZWZpbmVkICZ7JGNsYXNzIC4gIjo6JG5hbWUifSB9ICkgeworICAgICAgICAgICAgY2FycCAiZnVuY3Rpb24gJyRuYW1lJyBhbHJlYWR5IGRlZmluZWQsIG92ZXJyaWRlcyBzdHJ1Y3QgYWNjZXNzb3IgbWV0aG9kIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICRwcmUgPSAkcHN0ID0gJGNtdCA9ICRzZWwgPSAnJzsKKyAgICAgICAgICAgIGlmKCBkZWZpbmVkICRyZWZzeyRuYW1lfSApeworICAgICAgICAgICAgICAgICRwcmUgPSAiXFwoIjsKKyAgICAgICAgICAgICAgICAkcHN0ID0gIikiOworICAgICAgICAgICAgICAgICRjbXQgPSAiICMgcmV0dXJucyByZWYiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgJG91dCAuPSAiICBzdWIgJG5hbWUgeyRjbXRcbiAgICBteSBcJHIgPSBzaGlmdDtcbiI7CisgICAgICAgICAgICBpZiggJGJhc2VfdHlwZSBlcSAnQVJSQVknICl7CisgICAgICAgICAgICAgICAgJGVsZW0gPSAiWyRjbnRdIjsKKyAgICAgICAgICAgICAgICArKyRjbnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNpZiggJGJhc2VfdHlwZSBlcSAnSEFTSCcgKXsKKyAgICAgICAgICAgICAgICAkZWxlbSA9ICJ7JyR7Y2xhc3N9OjokbmFtZSd9IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCBkZWZpbmVkICRhcnJheXN7JG5hbWV9ICl7CisgICAgICAgICAgICAgICAgJG91dCAuPSAiICAgIG15IFwkaTtcbiI7CisgICAgICAgICAgICAgICAgJG91dCAuPSAiICAgIFxAXyA/IChcJGkgPSBzaGlmdCkgOiByZXR1cm4gXCRyLT4kZWxlbTtcbiI7CisgICAgICAgICAgICAgICAgJHNlbCA9ICItPltcJGldIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2lmKCBkZWZpbmVkICRoYXNoZXN7JG5hbWV9ICl7CisgICAgICAgICAgICAgICAgJG91dCAuPSAiICAgIG15IFwkaTtcbiI7CisgICAgICAgICAgICAgICAgJG91dCAuPSAiICAgIFxAXyA/IChcJGkgPSBzaGlmdCkgOiByZXR1cm4gXCRyLT4kZWxlbTtcbiI7CisgICAgICAgICAgICAgICAgJHNlbCA9ICItPntcJGl9IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2lmKCBkZWZpbmVkICRjbGFzc2VzeyRuYW1lfSApeworICAgICAgICAgICAgICAgIGlmICggJENIRUNLX0NMQVNTX01FTUJFUlNISVAgKSB7CisgICAgICAgICAgICAgICAgICAgICRvdXQgLj0gIiAgICBjcm9hayAnJG5hbWUgYXJndW1lbnQgaXMgd3JvbmcgY2xhc3MnIGlmIFxAXyAmJiAhIFVOSVZFUlNBTDo6aXNhKFwkX1swXSwgJyRjbGFzc2VzeyRuYW1lfScpO1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAkb3V0IC49ICIgICAgY3JvYWsgJ1RvbyBtYW55IGFyZ3MgdG8gJG5hbWUnIGlmIFxAXyA+IDE7XG4iOworICAgICAgICAgICAgJG91dCAuPSAiICAgIFxAXyA/ICgkcHJlXCRyLT4kZWxlbSRzZWwgPSBzaGlmdCRwc3QpIDogJHByZVwkci0+JGVsZW0kc2VsJHBzdDtcbiI7CisgICAgICAgICAgICAkb3V0IC49ICIgIH1cbiI7CisgICAgICAgIH0KKyAgICB9CisgICAgJG91dCAuPSAifVxuMTtcbiI7CisKKyAgICBwcmludCAkb3V0IGlmICRwcmludDsKKyAgICBteSAkcmVzdWx0ID0gZXZhbCAkb3V0OworICAgIGNhcnAgJEAgaWYgJEA7Cit9CisKK3N1YiBfdXNhZ2VfZXJyb3IgeworICAgIGNvbmZlc3MgInN0cnVjdCB1c2FnZSBlcnJvciI7Cit9CisKK3N1YiBfc3ViY2xhc3NfZXJyb3IgeworICAgIGNyb2FrICdzdHJ1Y3QgY2xhc3MgY2Fubm90IGJlIGEgc3ViY2xhc3MgKEBJU0Egbm90IGFsbG93ZWQpJzsKK30KKworMTsgIyBmb3IgcmVxdWlyZQorCisKK19fRU5EX18KKworPWhlYWQxIE5BTUUKKworQXV0b200dGU6OlN0cnVjdCAtIGRlY2xhcmUgc3RydWN0LWxpa2UgZGF0YXR5cGVzIGFzIFBlcmwgY2xhc3NlcworCis9aGVhZDEgU1lOT1BTSVMKKworICAgIHVzZSBBdXRvbTR0ZTo6U3RydWN0OworICAgICAgICAgICAgIyBkZWNsYXJlIHN0cnVjdCwgYmFzZWQgb24gYXJyYXk6CisgICAgc3RydWN0KCBDTEFTU19OQU1FID0+IFsgRUxFTUVOVF9OQU1FID0+IEVMRU1FTlRfVFlQRSwgLi4uIF0pOworICAgICAgICAgICAgIyBkZWNsYXJlIHN0cnVjdCwgYmFzZWQgb24gaGFzaDoKKyAgICBzdHJ1Y3QoIENMQVNTX05BTUUgPT4geyBFTEVNRU5UX05BTUUgPT4gRUxFTUVOVF9UWVBFLCAuLi4gfSk7CisKKyAgICBwYWNrYWdlIENMQVNTX05BTUU7CisgICAgdXNlIEF1dG9tNHRlOjpTdHJ1Y3Q7CisgICAgICAgICAgICAjIGRlY2xhcmUgc3RydWN0LCBiYXNlZCBvbiBhcnJheSwgaW1wbGljaXQgY2xhc3MgbmFtZToKKyAgICBzdHJ1Y3QoIEVMRU1FTlRfTkFNRSA9PiBFTEVNRU5UX1RZUEUsIC4uLiApOworCisKKyAgICBwYWNrYWdlIE15b2JqOworICAgIHVzZSBBdXRvbTR0ZTo6U3RydWN0OworICAgICAgICAgICAgIyBkZWNsYXJlIHN0cnVjdCB3aXRoIGZvdXIgdHlwZXMgb2YgZWxlbWVudHM6CisgICAgc3RydWN0KCBzID0+ICckJywgYSA9PiAnQCcsIGggPT4gJyUnLCBjID0+ICdNeV9PdGhlcl9DbGFzcycgKTsKKworICAgICRvYmogPSBuZXcgTXlvYmo7ICAgICAgICAgICAgICAgIyBjb25zdHJ1Y3RvcgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNjYWxhciB0eXBlIGFjY2Vzc29yOgorICAgICRlbGVtZW50X3ZhbHVlID0gJG9iai0+czsgICAgICAgICAgICMgZWxlbWVudCB2YWx1ZQorICAgICRvYmotPnMoJ25ldyB2YWx1ZScpOyAgICAgICAgICAgICAgICMgYXNzaWduIHRvIGVsZW1lbnQKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhcnJheSB0eXBlIGFjY2Vzc29yOgorICAgICRhcnlfcmVmID0gJG9iai0+YTsgICAgICAgICAgICAgICAgICMgcmVmZXJlbmNlIHRvIHdob2xlIGFycmF5CisgICAgJGFyeV9lbGVtZW50X3ZhbHVlID0gJG9iai0+YSgyKTsgICAgIyBhcnJheSBlbGVtZW50IHZhbHVlCisgICAgJG9iai0+YSgyLCAnbmV3IHZhbHVlJyk7ICAgICAgICAgICAgIyBhc3NpZ24gdG8gYXJyYXkgZWxlbWVudAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGhhc2ggdHlwZSBhY2Nlc3NvcjoKKyAgICAkaGFzaF9yZWYgPSAkb2JqLT5oOyAgICAgICAgICAgICAgICAjIHJlZmVyZW5jZSB0byB3aG9sZSBoYXNoCisgICAgJGhhc2hfZWxlbWVudF92YWx1ZSA9ICRvYmotPmgoJ3gnKTsgIyBoYXNoIGVsZW1lbnQgdmFsdWUKKyAgICAkb2JqLT5oKCd4JywgJ25ldyB2YWx1ZScpOyAgICAgICAgIyBhc3NpZ24gdG8gaGFzaCBlbGVtZW50CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2xhc3MgdHlwZSBhY2Nlc3NvcjoKKyAgICAkZWxlbWVudF92YWx1ZSA9ICRvYmotPmM7ICAgICAgICAgICAjIG9iamVjdCByZWZlcmVuY2UKKyAgICAkb2JqLT5jLT5tZXRob2QoLi4uKTsgICAgICAgICAgICAgICAjIGNhbGwgbWV0aG9kIG9mIG9iamVjdAorICAgICRvYmotPmMobmV3IE15X090aGVyX0NsYXNzKTsgICAgICAgICMgYXNzaWduIGEgbmV3IG9iamVjdAorCisKKz1oZWFkMSBERVNDUklQVElPTgorCitDPEF1dG9tNHRlOjpTdHJ1Y3Q+IGV4cG9ydHMgYSBzaW5nbGUgZnVuY3Rpb24sIEM8c3RydWN0Pi4KK0dpdmVuIGEgbGlzdCBvZiBlbGVtZW50IG5hbWVzIGFuZCB0eXBlcywgYW5kIG9wdGlvbmFsbHkKK2EgY2xhc3MgbmFtZSwgQzxzdHJ1Y3Q+IGNyZWF0ZXMgYSBQZXJsIDUgY2xhc3MgdGhhdCBpbXBsZW1lbnRzCithICJzdHJ1Y3QtbGlrZSIgZGF0YSBzdHJ1Y3R1cmUuCisKK1RoZSBuZXcgY2xhc3MgaXMgZ2l2ZW4gYSBjb25zdHJ1Y3RvciBtZXRob2QsIEM8bmV3PiwgZm9yIGNyZWF0aW5nCitzdHJ1Y3Qgb2JqZWN0cy4KKworRWFjaCBlbGVtZW50IGluIHRoZSBzdHJ1Y3QgZGF0YSBoYXMgYW4gYWNjZXNzb3IgbWV0aG9kLCB3aGljaCBpcwordXNlZCB0byBhc3NpZ24gdG8gdGhlIGVsZW1lbnQgYW5kIHRvIGZldGNoIGl0cyB2YWx1ZS4gIFRoZQorZGVmYXVsdCBhY2Nlc3NvciBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWNsYXJpbmcgYSBDPHN1Yj4gb2YgdGhlCitzYW1lIG5hbWUgaW4gdGhlIHBhY2thZ2UuICAoU2VlIEV4YW1wbGUgMi4pCisKK0VhY2ggZWxlbWVudCdzIHR5cGUgY2FuIGJlIHNjYWxhciwgYXJyYXksIGhhc2gsIG9yIGNsYXNzLgorCisKKz1oZWFkMiBUaGUgQzxzdHJ1Y3QoKT4gZnVuY3Rpb24KKworVGhlIEM8c3RydWN0PiBmdW5jdGlvbiBoYXMgdGhyZWUgZm9ybXMgb2YgcGFyYW1ldGVyLWxpc3QuCisKKyAgICBzdHJ1Y3QoIENMQVNTX05BTUUgPT4gWyBFTEVNRU5UX0xJU1QgXSk7CisgICAgc3RydWN0KCBDTEFTU19OQU1FID0+IHsgRUxFTUVOVF9MSVNUIH0pOworICAgIHN0cnVjdCggRUxFTUVOVF9MSVNUICk7CisKK1RoZSBmaXJzdCBhbmQgc2Vjb25kIGZvcm1zIGV4cGxpY2l0bHkgaWRlbnRpZnkgdGhlIG5hbWUgb2YgdGhlCitjbGFzcyBiZWluZyBjcmVhdGVkLiAgVGhlIHRoaXJkIGZvcm0gYXNzdW1lcyB0aGUgY3VycmVudCBwYWNrYWdlCituYW1lIGFzIHRoZSBjbGFzcyBuYW1lLgorCitBbiBvYmplY3Qgb2YgYSBjbGFzcyBjcmVhdGVkIGJ5IHRoZSBmaXJzdCBhbmQgdGhpcmQgZm9ybXMgaXMKK2Jhc2VkIG9uIGFuIGFycmF5LCB3aGVyZWFzIGFuIG9iamVjdCBvZiBhIGNsYXNzIGNyZWF0ZWQgYnkgdGhlCitzZWNvbmQgZm9ybSBpcyBiYXNlZCBvbiBhIGhhc2guIFRoZSBhcnJheS1iYXNlZCBmb3JtcyB3aWxsIGJlCitzb21ld2hhdCBmYXN0ZXIgYW5kIHNtYWxsZXI7IHRoZSBoYXNoLWJhc2VkIGZvcm1zIGFyZSBtb3JlCitmbGV4aWJsZS4KKworVGhlIGNsYXNzIGNyZWF0ZWQgYnkgQzxzdHJ1Y3Q+IG11c3Qgbm90IGJlIGEgc3ViY2xhc3Mgb2YgYW5vdGhlcgorY2xhc3Mgb3RoZXIgdGhhbiBDPFVOSVZFUlNBTD4uCisKK0l0IGNhbiwgaG93ZXZlciwgYmUgdXNlZCBhcyBhIHN1cGVyY2xhc3MgZm9yIG90aGVyIGNsYXNzZXMuIFRvIGZhY2lsaXRhdGUKK3RoaXMsIHRoZSBnZW5lcmF0ZWQgY29uc3RydWN0b3IgbWV0aG9kIHVzZXMgYSB0d28tYXJndW1lbnQgYmxlc3NpbmcuCitGdXJ0aGVybW9yZSwgaWYgdGhlIGNsYXNzIGlzIGhhc2gtYmFzZWQsIHRoZSBrZXkgb2YgZWFjaCBlbGVtZW50IGlzCitwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIChzZWUgSTxQZXJsIENvb2tib29rPiwgUmVjaXBlIDEzLjEyKS4KKworQSBmdW5jdGlvbiBuYW1lZCBDPG5ldz4gbXVzdCBub3QgYmUgZXhwbGljaXRseSBkZWZpbmVkIGluIGEgY2xhc3MKK2NyZWF0ZWQgYnkgQzxzdHJ1Y3Q+LgorCitUaGUgSTxFTEVNRU5UX0xJU1Q+IGhhcyB0aGUgZm9ybQorCisgICAgTkFNRSA9PiBUWVBFLCAuLi4KKworRWFjaCBuYW1lLXR5cGUgcGFpciBkZWNsYXJlcyBvbmUgZWxlbWVudCBvZiB0aGUgc3RydWN0LiBFYWNoCitlbGVtZW50IG5hbWUgd2lsbCBiZSBkZWZpbmVkIGFzIGFuIGFjY2Vzc29yIG1ldGhvZCB1bmxlc3MgYQorbWV0aG9kIGJ5IHRoYXQgbmFtZSBpcyBleHBsaWNpdGx5IGRlZmluZWQ7IGluIHRoZSBsYXR0ZXIgY2FzZSwgYQord2FybmluZyBpcyBpc3N1ZWQgaWYgdGhlIHdhcm5pbmcgZmxhZyAoQjwtdz4pIGlzIHNldC4KKworCis9aGVhZDIgRWxlbWVudCBUeXBlcyBhbmQgQWNjZXNzb3IgTWV0aG9kcworCitUaGUgZm91ciBlbGVtZW50IHR5cGVzIC0tIHNjYWxhciwgYXJyYXksIGhhc2gsIGFuZCBjbGFzcyAtLSBhcmUKK3JlcHJlc2VudGVkIGJ5IHN0cmluZ3MgLS0gQzwnJCc+LCBDPCdAJz4sIEM8JyUnPiwgYW5kIGEgY2xhc3MgbmFtZSAtLQorb3B0aW9uYWxseSBwcmVjZWRlZCBieSBhIEM8JyonPi4KKworVGhlIGFjY2Vzc29yIG1ldGhvZCBwcm92aWRlZCBieSBDPHN0cnVjdD4gZm9yIGFuIGVsZW1lbnQgZGVwZW5kcworb24gdGhlIGRlY2xhcmVkIHR5cGUgb2YgdGhlIGVsZW1lbnQuCisKKz1vdmVyCisKKz1pdGVtIFNjYWxhciAoQzwnJCc+IG9yIEM8JyokJz4pCisKK1RoZSBlbGVtZW50IGlzIGEgc2NhbGFyLCBhbmQgYnkgZGVmYXVsdCBpcyBpbml0aWFsaXplZCB0byBDPHVuZGVmPgorKGJ1dCBzZWUgTDxJbml0aWFsaXppbmcgd2l0aCBuZXc+KS4KKworVGhlIGFjY2Vzc29yJ3MgYXJndW1lbnQsIGlmIGFueSwgaXMgYXNzaWduZWQgdG8gdGhlIGVsZW1lbnQuCisKK0lmIHRoZSBlbGVtZW50IHR5cGUgaXMgQzwnJCc+LCB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQgKGFmdGVyCithc3NpZ25tZW50KSBpcyByZXR1cm5lZC4gSWYgdGhlIGVsZW1lbnQgdHlwZSBpcyBDPCcqJCc+LCBhIHJlZmVyZW5jZQordG8gdGhlIGVsZW1lbnQgaXMgcmV0dXJuZWQuCisKKz1pdGVtIEFycmF5IChDPCdAJz4gb3IgQzwnKkAnPikKKworVGhlIGVsZW1lbnQgaXMgYW4gYXJyYXksIGluaXRpYWxpemVkIGJ5IGRlZmF1bHQgdG8gQzwoKT4uCisKK1dpdGggbm8gYXJndW1lbnQsIHRoZSBhY2Nlc3NvciByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZQorZWxlbWVudCdzIHdob2xlIGFycmF5ICh3aGV0aGVyIG9yIG5vdCB0aGUgZWxlbWVudCB3YXMKK3NwZWNpZmllZCBhcyBDPCdAJz4gb3IgQzwnKkAnPikuCisKK1dpdGggb25lIG9yIHR3byBhcmd1bWVudHMsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBhbiBpbmRleAorc3BlY2lmeWluZyBvbmUgZWxlbWVudCBvZiB0aGUgYXJyYXk7IHRoZSBzZWNvbmQgYXJndW1lbnQsIGlmCitwcmVzZW50LCBpcyBhc3NpZ25lZCB0byB0aGUgYXJyYXkgZWxlbWVudC4gIElmIHRoZSBlbGVtZW50IHR5cGUKK2lzIEM8J0AnPiwgdGhlIGFjY2Vzc29yIHJldHVybnMgdGhlIGFycmF5IGVsZW1lbnQgdmFsdWUuICBJZiB0aGUKK2VsZW1lbnQgdHlwZSBpcyBDPCcqQCc+LCBhIHJlZmVyZW5jZSB0byB0aGUgYXJyYXkgZWxlbWVudCBpcworcmV0dXJuZWQuCisKKz1pdGVtIEhhc2ggKEM8JyUnPiBvciBDPCcqJSc+KQorCitUaGUgZWxlbWVudCBpcyBhIGhhc2gsIGluaXRpYWxpemVkIGJ5IGRlZmF1bHQgdG8gQzwoKT4uCisKK1dpdGggbm8gYXJndW1lbnQsIHRoZSBhY2Nlc3NvciByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZQorZWxlbWVudCdzIHdob2xlIGhhc2ggKHdoZXRoZXIgb3Igbm90IHRoZSBlbGVtZW50IHdhcworc3BlY2lmaWVkIGFzIEM8JyUnPiBvciBDPCcqJSc+KS4KKworV2l0aCBvbmUgb3IgdHdvIGFyZ3VtZW50cywgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEga2V5IHNwZWNpZnlpbmcKK29uZSBlbGVtZW50IG9mIHRoZSBoYXNoOyB0aGUgc2Vjb25kIGFyZ3VtZW50LCBpZiBwcmVzZW50LCBpcworYXNzaWduZWQgdG8gdGhlIGhhc2ggZWxlbWVudC4gIElmIHRoZSBlbGVtZW50IHR5cGUgaXMgQzwnJSc+LCB0aGUKK2FjY2Vzc29yIHJldHVybnMgdGhlIGhhc2ggZWxlbWVudCB2YWx1ZS4gIElmIHRoZSBlbGVtZW50IHR5cGUgaXMKK0M8JyolJz4sIGEgcmVmZXJlbmNlIHRvIHRoZSBoYXNoIGVsZW1lbnQgaXMgcmV0dXJuZWQuCisKKz1pdGVtIENsYXNzIChDPCdDbGFzc19OYW1lJz4gb3IgQzwnKkNsYXNzX05hbWUnPikKKworVGhlIGVsZW1lbnQncyB2YWx1ZSBtdXN0IGJlIGEgcmVmZXJlbmNlIGJsZXNzZWQgdG8gdGhlIG5hbWVkCitjbGFzcyBvciB0byBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuIFRoZSBlbGVtZW50IGlzIGluaXRpYWxpemVkIHRvCit0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIEM8bmV3PiBjb25zdHJ1Y3RvciBvZiB0aGUgbmFtZWQgY2xhc3MuCisKK1RoZSBhY2Nlc3NvcidzIGFyZ3VtZW50LCBpZiBhbnksIGlzIGFzc2lnbmVkIHRvIHRoZSBlbGVtZW50LiBUaGUKK2FjY2Vzc29yIHdpbGwgQzxjcm9haz4gaWYgdGhpcyBpcyBub3QgYW4gYXBwcm9wcmlhdGUgb2JqZWN0CityZWZlcmVuY2UuCisKK0lmIHRoZSBlbGVtZW50IHR5cGUgZG9lcyBub3Qgc3RhcnQgd2l0aCBhIEM8JyonPiwgdGhlIGFjY2Vzc29yCityZXR1cm5zIHRoZSBlbGVtZW50IHZhbHVlIChhZnRlciBhc3NpZ25tZW50KS4gSWYgdGhlIGVsZW1lbnQgdHlwZQorc3RhcnRzIHdpdGggYSBDPCcqJz4sIGEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGl0c2VsZiBpcyByZXR1cm5lZC4KKworPWJhY2sKKworPWhlYWQyIEluaXRpYWxpemluZyB3aXRoIEM8bmV3PgorCitDPHN0cnVjdD4gYWx3YXlzIGNyZWF0ZXMgYSBjb25zdHJ1Y3RvciBjYWxsZWQgQzxuZXc+LiBUaGF0IGNvbnN0cnVjdG9yCittYXkgdGFrZSBhIGxpc3Qgb2YgaW5pdGlhbGl6ZXJzIGZvciB0aGUgdmFyaW91cyBlbGVtZW50cyBvZiB0aGUgbmV3CitzdHJ1Y3QuCisKK0VhY2ggaW5pdGlhbGl6ZXIgaXMgYSBwYWlyIG9mIHZhbHVlczogSTxlbGVtZW50IG5hbWU+QzwgPUU8Z3Q+ID5JPHZhbHVlPi4KK1RoZSBpbml0aWFsaXplciB2YWx1ZSBmb3IgYSBzY2FsYXIgZWxlbWVudCBpcyBqdXN0IGEgc2NhbGFyIHZhbHVlLiBUaGUKK2luaXRpYWxpemVyIGZvciBhbiBhcnJheSBlbGVtZW50IGlzIGFuIGFycmF5IHJlZmVyZW5jZS4gVGhlIGluaXRpYWxpemVyCitmb3IgYSBoYXNoIGlzIGEgaGFzaCByZWZlcmVuY2UuCisKK1RoZSBpbml0aWFsaXplciBmb3IgYSBjbGFzcyBlbGVtZW50IGlzIGFsc28gYSBoYXNoIHJlZmVyZW5jZSwgYW5kIHRoZQorY29udGVudHMgb2YgdGhhdCBoYXNoIGFyZSBwYXNzZWQgdG8gdGhlIGVsZW1lbnQncyBvd24gY29uc3RydWN0b3IuCisKK1NlZSBFeGFtcGxlIDMgYmVsb3cgZm9yIGFuIGV4YW1wbGUgb2YgaW5pdGlhbGl6YXRpb24uCisKKworPWhlYWQxIEVYQU1QTEVTCisKKz1vdmVyCisKKz1pdGVtIEV4YW1wbGUgMQorCitHaXZpbmcgYSBzdHJ1Y3QgZWxlbWVudCBhIGNsYXNzIHR5cGUgdGhhdCBpcyBhbHNvIGEgc3RydWN0IGlzIGhvdworc3RydWN0cyBhcmUgbmVzdGVkLiAgSGVyZSwgQzx0aW1ldmFsPiByZXByZXNlbnRzIGEgdGltZSAoc2Vjb25kcyBhbmQKK21pY3Jvc2Vjb25kcyksIGFuZCBDPHJ1c2FnZT4gaGFzIHR3byBlbGVtZW50cywgZWFjaCBvZiB3aGljaCBpcyBvZgordHlwZSBDPHRpbWV2YWw+LgorCisgICAgdXNlIEF1dG9tNHRlOjpTdHJ1Y3Q7CisKKyAgICBzdHJ1Y3QoIHJ1c2FnZSA9PiB7CisgICAgICAgIHJ1X3V0aW1lID0+IHRpbWV2YWwsICAjIHNlY29uZHMKKyAgICAgICAgcnVfc3RpbWUgPT4gdGltZXZhbCwgICMgbWljcm9zZWNvbmRzCisgICAgfSk7CisKKyAgICBzdHJ1Y3QoIHRpbWV2YWwgPT4gWworICAgICAgICB0dl9zZWNzICA9PiAnJCcsCisgICAgICAgIHR2X3VzZWNzID0+ICckJywKKyAgICBdKTsKKworICAgICAgICAjIGNyZWF0ZSBhbiBvYmplY3Q6CisgICAgbXkgJHQgPSBuZXcgcnVzYWdlOworCisgICAgICAgICMgJHQtPnJ1X3V0aW1lIGFuZCAkdC0+cnVfc3RpbWUgYXJlIG9iamVjdHMgb2YgdHlwZSB0aW1ldmFsLgorICAgICAgICAjIHNldCAkdC0+cnVfdXRpbWUgdG8gMTAwLjAgc2VjIGFuZCAkdC0+cnVfc3RpbWUgdG8gNS4wIHNlYy4KKyAgICAkdC0+cnVfdXRpbWUtPnR2X3NlY3MoMTAwKTsKKyAgICAkdC0+cnVfdXRpbWUtPnR2X3VzZWNzKDApOworICAgICR0LT5ydV9zdGltZS0+dHZfc2Vjcyg1KTsKKyAgICAkdC0+cnVfc3RpbWUtPnR2X3VzZWNzKDApOworCisKKz1pdGVtIEV4YW1wbGUgMgorCitBbiBhY2Nlc3NvciBmdW5jdGlvbiBjYW4gYmUgcmVkZWZpbmVkIGluIG9yZGVyIHRvIHByb3ZpZGUKK2FkZGl0aW9uYWwgY2hlY2tpbmcgb2YgdmFsdWVzLCBldGMuICBIZXJlLCB3ZSB3YW50IHRoZSBDPGNvdW50PgorZWxlbWVudCBhbHdheXMgdG8gYmUgbm9ubmVnYXRpdmUsIHNvIHdlIHJlZGVmaW5lIHRoZSBDPGNvdW50PgorYWNjZXNzb3IgYWNjb3JkaW5nbHkuCisKKyAgICBwYWNrYWdlIE15T2JqOworICAgIHVzZSBBdXRvbTR0ZTo6U3RydWN0OworCisgICAgIyBkZWNsYXJlIHRoZSBzdHJ1Y3QKKyAgICBzdHJ1Y3QgKCAnTXlPYmonLCB7IGNvdW50ID0+ICckJywgc3R1ZmYgPT4gJyUnIH0gKTsKKworICAgICMgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYWNjZXNzb3IgbWV0aG9kIGZvciAnY291bnQnCisgICAgc3ViIGNvdW50IHsKKyAgICAgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICAgICAgaWYgKCBAXyApIHsKKyAgICAgICAgICAgIGRpZSAnY291bnQgbXVzdCBiZSBub25uZWdhdGl2ZScgaWYgJF9bMF0gPCAwOworICAgICAgICAgICAgJHNlbGYtPnsnY291bnQnfSA9IHNoaWZ0OworICAgICAgICAgICAgd2FybiAiVG9vIG1hbnkgYXJncyB0byBjb3VudCIgaWYgQF87CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICRzZWxmLT57J2NvdW50J307CisgICAgfQorCisgICAgcGFja2FnZSBtYWluOworICAgICR4ID0gbmV3IE15T2JqOworICAgIHByaW50ICJcJHgtPmNvdW50KDUpID0gIiwgJHgtPmNvdW50KDUpLCAiXG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcHJpbnRzICckeC0+Y291bnQoNSkgPSA1JworCisgICAgcHJpbnQgIlwkeC0+Y291bnQgPSAiLCAkeC0+Y291bnQsICJcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwcmludHMgJyR4LT5jb3VudCA9IDUnCisKKyAgICBwcmludCAiXCR4LT5jb3VudCgtNSkgPSAiLCAkeC0+Y291bnQoLTUpLCAiXG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGllcyBkdWUgdG8gbmVnYXRpdmUgYXJndW1lbnQhCisKKz1pdGVtIEV4YW1wbGUgMworCitUaGUgY29uc3RydWN0b3Igb2YgYSBnZW5lcmF0ZWQgY2xhc3MgY2FuIGJlIHBhc3NlZCBhIGxpc3QKK29mIEk8ZWxlbWVudD49Pkk8dmFsdWU+IHBhaXJzLCB3aXRoIHdoaWNoIHRvIGluaXRpYWxpemUgdGhlIHN0cnVjdC4KK0lmIG5vIGluaXRpYWxpemVyIGlzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIGVsZW1lbnQsIGl0cyBkZWZhdWx0Citpbml0aWFsaXphdGlvbiBpcyBwZXJmb3JtZWQgaW5zdGVhZC4gSW5pdGlhbGl6ZXJzIGZvciBub24tZXhpc3RlbnQKK2VsZW1lbnRzIGFyZSBzaWxlbnRseSBpZ25vcmVkLgorCitOb3RlIHRoYXQgdGhlIGluaXRpYWxpemVyIGZvciBhIG5lc3RlZCBzdHJ1Y3QgaXMgc3BlY2lmaWVkCithcyBhbiBhbm9ueW1vdXMgaGFzaCBvZiBpbml0aWFsaXplcnMsIHdoaWNoIGlzIHBhc3NlZCBvbiB0byB0aGUgbmVzdGVkCitzdHJ1Y3QncyBjb25zdHJ1Y3Rvci4KKworCisgICAgdXNlIEF1dG9tNHRlOjpTdHJ1Y3Q7CisKKyAgICBzdHJ1Y3QgQnJlZWQgPT4KKyAgICB7CisgICAgICAgIG5hbWUgID0+ICckJywKKyAgICAgICAgY3Jvc3MgPT4gJyQnLAorICAgIH07CisKKyAgICBzdHJ1Y3QgQ2F0ID0+CisgICAgWworICAgICAgICBuYW1lICAgICA9PiAnJCcsCisgICAgICAgIGtpdHRlbnMgID0+ICdAJywKKyAgICAgICAgbWFya2luZ3MgPT4gJyUnLAorICAgICAgICBicmVlZCAgICA9PiAnQnJlZWQnLAorICAgIF07CisKKworICAgIG15ICRjYXQgPSBDYXQtPm5ldyggbmFtZSAgICAgPT4gJ1NvY2tzJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGtpdHRlbnMgID0+IFsnTW9uaWNhJywgJ0tlbm5ldGgnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtpbmdzID0+IHsgc29ja3M9PjEsIGJsYXplPT4id2hpdGUiIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBicmVlZCAgICA9PiB7IG5hbWU9PidzaG9ydC1oYWlyJywgY3Jvc3M9PjEgfSwKKyAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgcHJpbnQgIk9uY2UgYSBjYXQgY2FsbGVkICIsICRjYXQtPm5hbWUsICJcbiI7CisgICAgcHJpbnQgIih3aGljaCB3YXMgYSAiLCAkY2F0LT5icmVlZC0+bmFtZSwgIilcbiI7CisgICAgcHJpbnQgImhhZCB0d28ga2l0dGVuczogIiwgam9pbignIGFuZCAnLCBAeyRjYXQtPmtpdHRlbnN9KSwgIlxuIjsKKworPWJhY2sKKworPWhlYWQxIEF1dGhvciBhbmQgTW9kaWZpY2F0aW9uIEhpc3RvcnkKKworTW9kaWZpZWQgYnkgQWtpbSBEZW1haWxsZSwgMjAwMS0wOC0wMworCisgICAgUmVuYW1lIGFzIEF1dG9tNHRlOjpTdHJ1Y3QgdG8gYXZvaWQgbmFtZSBjbGFzaGVzIHdpdGgKKyAgICBDbGFzczo6U3RydWN0LgorCisgICAgTWFrZSBpdCBjb21wYXRpYmxlIHdpdGggUGVybCA1LjUuCisKK01vZGlmaWVkIGJ5IERhbWlhbiBDb253YXksIDE5OTktMDMtMDUsIHYwLjU4LgorCisgICAgQWRkZWQgaGFuZGxpbmcgb2YgaGFzaC1saWtlIGFyZyBsaXN0IHRvIGNsYXNzIGN0b3IuCisKKyAgICBDaGFuZ2VkIHRvIHR3by1hcmd1bWVudCBibGVzc2luZyBpbiBjdG9yIHRvIHN1cHBvcnQKKyAgICBkZXJpdmF0aW9uIGZyb20gY3JlYXRlZCBjbGFzc2VzLgorCisgICAgQWRkZWQgY2xhc3NuYW1lIHByZWZpeGVzIHRvIGtleXMgaW4gaGFzaC1iYXNlZCBjbGFzc2VzCisgICAgKHJlZmVyIHRvICJQZXJsIENvb2tib29rIiwgUmVjaXBlIDEzLjEyIGZvciByYXRpb25hbGUpLgorCisgICAgQ29ycmVjdGVkIGJlaGF2aW9yIG9mIGFjY2Vzc29ycyBmb3IgJypAJyBhbmQgJyolJyBzdHJ1Y3QKKyAgICBlbGVtZW50cy4gIFBhY2thZ2Ugbm93IGltcGxlbWVudHMgZG9jdW1lbnRlZCBiZWhhdmlvciB3aGVuCisgICAgcmV0dXJuaW5nIGEgcmVmZXJlbmNlIHRvIGFuIGVudGlyZSBoYXNoIG9yIGFycmF5IGVsZW1lbnQuCisgICAgUHJldmlvdXNseSB0aGVzZSB3ZXJlIHJldHVybmVkIGFzIGEgcmVmZXJlbmNlIHRvIGEgcmVmZXJlbmNlCisgICAgdG8gdGhlIGVsZW1lbnQuCisKKworUmVuYW1lZCB0byBDPENsYXNzOjpTdHJ1Y3Q+IGFuZCBtb2RpZmllZCBieSBKaW0gTWluZXIsIDE5OTctMDQtMDIuCisKKyAgICBtZW1iZXJzKCkgZnVuY3Rpb24gcmVtb3ZlZC4KKyAgICBEb2N1bWVudGF0aW9uIGNvcnJlY3RlZCBhbmQgZXh0ZW5kZWQuCisgICAgVXNlIG9mIHN0cnVjdCgpIGluIGEgc3ViY2xhc3MgcHJvaGliaXRlZC4KKyAgICBVc2VyIGRlZmluaXRpb24gb2YgYWNjZXNzb3IgYWxsb3dlZC4KKyAgICBUcmVhdG1lbnQgb2YgJyonIGluIGVsZW1lbnQgdHlwZXMgY29ycmVjdGVkLgorICAgIFRyZWF0bWVudCBvZiBjbGFzc2VzIGFzIGVsZW1lbnQgdHlwZXMgY29ycmVjdGVkLgorICAgIENsYXNzIG5hbWUgdG8gc3RydWN0KCkgbWFkZSBvcHRpb25hbC4KKyAgICBEaWFnbm9zdGljIGNoZWNrcyBhZGRlZC4KKworCitPcmlnaW5hbGx5IEM8Q2xhc3M6OlRlbXBsYXRlPiBieSBEZWFuIFJvZWhyaWNoLgorCisgICAgIyBUZW1wbGF0ZS5wbSAgIC0tLSBzdHJ1Y3QvbWVtYmVyIHRlbXBsYXRlIGJ1aWxkZXIKKyAgICAjICAgMTJtYXI5NQorICAgICMgICBEZWFuIFJvZWhyaWNoCisgICAgIworICAgICMgY2hhbmdlcy9idWdzIGZpeGVkIHNpbmNlIDI4bm92OTQgdmVyc2lvbjoKKyAgICAjICAtIHBvZGlmaWVkCisgICAgIyBjaGFuZ2VzL2J1Z3MgZml4ZWQgc2luY2UgMjFub3Y5NCB2ZXJzaW9uOgorICAgICMgIC0gRml4ZWQgZXhhbXBsZXMuCisgICAgIyBjaGFuZ2VzL2J1Z3MgZml4ZWQgc2luY2UgMDJzZXA5NCB2ZXJzaW9uOgorICAgICMgIC0gTW92ZWQgdG8gQ2xhc3M6OlRlbXBsYXRlLgorICAgICMgY2hhbmdlcy9idWdzIGZpeGVkIHNpbmNlIDIwZmViOTQgdmVyc2lvbjoKKyAgICAjICAtIFVwZGF0ZWQgdG8gYmUgYSBtb3JlIHByb3BlciBtb2R1bGUuCisgICAgIyAgLSBBZGRlZCAidXNlIHN0cmljdCIuCisgICAgIyAgLSBCdWcgaW4gYnVpbGRfbWV0aG9kcywgd2FzIHVzaW5nIEB2YXIgd2hlbiBAJHZhciBuZWVkZWQuCisgICAgIyAgLSBOb3cgdXNpbmcgbXkoKSByYXRoZXIgdGhhbiBsb2NhbCgpLgorICAgICMKKyAgICAjIFVzZXMgcGVybDUgY2xhc3NlcyB0byBjcmVhdGUgbmVzdGVkIGRhdGEgdHlwZXMuCisgICAgIyBUaGlzIGlzIG9mZmVyZWQgYXMgb25lIGltcGxlbWVudGF0aW9uIG9mIFRvbSBDaHJpc3RpYW5zZW4ncyAic3RydWN0cy5wbCIKKyAgICAjIGlkZWEuCisKKz1jdXQKKworIyMjIFNldHVwICJHTlUiIHN0eWxlIGZvciBwZXJsLW1vZGUgYW5kIGNwZXJsLW1vZGUuCisjIyBMb2NhbCBWYXJpYWJsZXM6CisjIyBwZXJsLWluZGVudC1sZXZlbDogMgorIyMgcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1pbWFnaW5hcnktb2Zmc2V0OiAwCisjIyBwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWluZGVudC1sZXZlbDogMgorIyMgY3BlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1leHRyYS1uZXdsaW5lLWJlZm9yZS1icmFjZTogdAorIyMgY3BlcmwtbWVyZ2UtdHJhaWxpbmctZWxzZTogbmlsCisjIyBjcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgRW5kOgpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b2NvbmYvQXV0b200dGUvWEZpbGUucG0gYi9zaGFyZS9hdXRvY29uZi9BdXRvbTR0ZS9YRmlsZS5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTQzN2I3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b2NvbmYvQXV0b200dGUvWEZpbGUucG0KQEAgLTAsMCArMSwzMjMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzLCAyMDA0LCAyMDA2LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBXcml0dGVuIGJ5IEFraW0gRGVtYWlsbGUgPGFraW1AZnJlZWZyaWVuZHMub3JnPi4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoZSBtYWluIGNvcHkgb2YgdGhpcyBmaWxlIGlzIGluIEF1dG9tYWtlJ3MgQ1ZTIHJlcG9zaXRvcnkuICMKKyMgVXBkYXRlcyBzaG91bGQgYmUgc2VudCB0byBhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmcuICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3BhY2thZ2UgQXV0b200dGU6OlhGaWxlOworCis9aGVhZDEgTkFNRQorCitBdXRvbTR0ZTo6WEZpbGUgLSBzdXBwbHkgb2JqZWN0IG1ldGhvZHMgZm9yIGZpbGVoYW5kbGVzIHdpdGggZXJyb3IgaGFuZGxpbmcKKworPWhlYWQxIFNZTk9QU0lTCisKKyAgICB1c2UgQXV0b200dGU6OlhGaWxlOworCisgICAgJGZoID0gbmV3IEF1dG9tNHRlOjpYRmlsZTsKKyAgICAkZmgtPm9wZW4gKCI8IGZpbGUiKTsKKyAgICAjIE5vIG5lZWQgdG8gY2hlY2sgJEZIOiB3ZSBkaWVkIGlmIG9wZW4gZmFpbGVkLgorICAgIHByaW50IDwkZmg+OworICAgICRmaC0+Y2xvc2U7CisgICAgIyBObyBuZWVkIHRvIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2YgY2xvc2U6IHdlIGRpZWQgaWYgaXQgZmFpbGVkLgorCisgICAgJGZoID0gbmV3IEF1dG9tNHRlOjpYRmlsZSAiPiBmaWxlIjsKKyAgICAjIE5vIG5lZWQgdG8gY2hlY2sgJEZIOiB3ZSBkaWVkIGlmIG5ldyBmYWlsZWQuCisgICAgcHJpbnQgJGZoICJiYXJcbiI7CisgICAgJGZoLT5jbG9zZTsKKworICAgICRmaCA9IG5ldyBBdXRvbTR0ZTo6WEZpbGUgImZpbGUiLCAiciI7CisgICAgIyBObyBuZWVkIHRvIGNoZWNrICRGSDogd2UgZGllZCBpZiBuZXcgZmFpbGVkLgorICAgIGRlZmluZWQgJGZoCisgICAgcHJpbnQgPCRmaD47CisgICAgdW5kZWYgJGZoOyAgICMgYXV0b21hdGljYWxseSBjbG9zZXMgdGhlIGZpbGUgYW5kIGNoZWNrcyBmb3IgZXJyb3JzLgorCisgICAgJGZoID0gbmV3IEF1dG9tNHRlOjpYRmlsZSAiZmlsZSIsIE9fV1JPTkxZIHwgT19BUFBFTkQ7CisgICAgIyBObyBuZWVkIHRvIGNoZWNrICRGSDogd2UgZGllZCBpZiBuZXcgZmFpbGVkLgorICAgIHByaW50ICRmaCAiY29yZ2VcbiI7CisKKyAgICAkcG9zID0gJGZoLT5nZXRwb3M7CisgICAgJGZoLT5zZXRwb3MgKCRwb3MpOworCisgICAgdW5kZWYgJGZoOyAgICMgYXV0b21hdGljYWxseSBjbG9zZXMgdGhlIGZpbGUgYW5kIGNoZWNrcyBmb3IgZXJyb3JzLgorCisgICAgYXV0b2ZsdXNoIFNURE9VVCAxOworCis9aGVhZDEgREVTQ1JJUFRJT04KKworQzxBdXRvbTR0ZTo6WEZpbGU+IGluaGVyaXRzIGZyb20gQzxJTzo6RmlsZT4uICBJdCBwcm92aWRlcyB0aGUgbWV0aG9kCitDPG5hbWU+IHJldHVybmluZyB0aGUgZmlsZSBuYW1lLiAgSXQgcHJvdmlkZXMgZHlpbmcgdmVyc2lvbnMgb2YgdGhlCittZXRob2RzIEM8Y2xvc2U+LCBDPGxvY2s+IChjb3JyZXNwb25kaW5nIHRvIEM8ZmxvY2s+KSwgQzxuZXc+LAorQzxvcGVuPiwgQzxzZWVrPiwgYW5kIEM8dHJ1bmNhdGU+LiAgSXQgYWxzbyBvdmVycmlkZXMgdGhlIEM8Z2V0bGluZT4KK2FuZCBDPGdldGxpbmVzPiBtZXRob2RzIHRvIHRyYW5zbGF0ZSBDPFxyXG4+IHRvIEM8XG4+LgorCis9Y3V0CisKK3JlcXVpcmUgNS4wMDA7Cit1c2Ugc3RyaWN0OwordXNlIHZhcnMgcXcoJFZFUlNJT04gQEVYUE9SVCBARVhQT1JUX09LICRBVVRPTE9BRCBASVNBKTsKK3VzZSBDYXJwOwordXNlIEVycm5vOwordXNlIElPOjpGaWxlOwordXNlIEZpbGU6OkJhc2VuYW1lOwordXNlIEF1dG9tNHRlOjpDaGFubmVsRGVmczsKK3VzZSBBdXRvbTR0ZTo6Q2hhbm5lbHMgcXcobXNnKTsKK3VzZSBBdXRvbTR0ZTo6RmlsZVV0aWxzOworCityZXF1aXJlIEV4cG9ydGVyOworcmVxdWlyZSBEeW5hTG9hZGVyOworCitASVNBID0gcXcoSU86OkZpbGUgRXhwb3J0ZXIgRHluYUxvYWRlcik7CisKKyRWRVJTSU9OID0gIjEuMiI7CisKK0BFWFBPUlQgPSBASU86OkZpbGU6OkVYUE9SVDsKKworZXZhbCB7CisgICMgTWFrZSBhbGwgRmNudGwgT19YWFggYW5kIExPQ0tfWFhYIGNvbnN0YW50cyBhdmFpbGFibGUgZm9yIGltcG9ydGluZworICByZXF1aXJlIEZjbnRsOworICBteSBATyA9IGdyZXAgL14oTE9DS3xPKV8vLCBARmNudGw6OkVYUE9SVCwgQEZjbnRsOjpFWFBPUlRfT0s7CisgIEZjbnRsLT5pbXBvcnQgKEBPKTsgICMgZmlyc3Qgd2UgaW1wb3J0IHdoYXQgd2Ugd2FudCB0byBleHBvcnQKKyAgcHVzaCAoQEVYUE9SVCwgQE8pOworfTsKKworIyBVc2VkIGluIGNyb2FrIGVycm9yIG1lc3NhZ2VzLgorbXkgJG1lID0gYmFzZW5hbWUgKCQwKTsKKworPWhlYWQyIE1ldGhvZHMKKworPW92ZXIKKworPWl0ZW0gQzwkZmggPSBuZXcgQXV0b200dGU6OlhGaWxlIChbJGV4cHIsIC4uLl0+CisKK0NvbnN0cnVjdG9yIGEgbmV3IFhGaWxlIG9iamVjdC4gIEFkZGl0aW9uYWwgYXJndW1lbnRzCithcmUgcGFzc2VkIHRvIEM8b3Blbj4sIGlmIGFueS4KKworPWN1dAorCitzdWIgbmV3Cit7CisgIG15ICR0eXBlID0gc2hpZnQ7CisgIG15ICRjbGFzcyA9IHJlZiAkdHlwZSB8fCAkdHlwZSB8fCAiQXV0b200dGU6OlhGaWxlIjsKKyAgbXkgJGZoID0gJGNsYXNzLT5TVVBFUjo6bmV3ICgpOworICBpZiAoQF8pCisgICAgeworICAgICAgJGZoLT5vcGVuIChAXyk7CisgICAgfQorICAkZmg7Cit9CisKKz1pdGVtIEM8JGZoLUU8Z3Q+b3BlbiAoWyRmaWxlLCAuLi5dKT4KKworT3BlbiBhIGZpbGUsIHBhc3NpbmcgQzwkZmlsZT4gYW5kIGZ1cnRoZXIgYXJndW1lbnRzIHRvIEM8SU86OkZpbGU6Om9wZW4+LgorRGllIGlmIG9wZW5pbmcgZmFpbHMuICBTdG9yZSB0aGUgbmFtZSBvZiB0aGUgZmlsZS4gIFVzZSBiaW5tb2RlIGZvciB3cml0aW5nLgorCis9Y3V0CisKK3N1YiBvcGVuCit7CisgIG15ICRmaCA9IHNoaWZ0OworICBteSAoJGZpbGUpID0gQF87CisKKyAgIyBXQVJOSU5HOiBHcm9zcyBoYWNrOiAkRkggaXMgYSB0eXBlZ2xvYjogdXNlIGl0cyBoYXNoIHNsb3QgdG8gc3RvcmUKKyAgIyB0aGUgYG5hbWUnIG9mIHRoZSBmaWxlIHdlIGFyZSBvcGVuaW5nLiAgU2VlIHRoZSBleGFtcGxlIHdpdGgKKyAgIyBpb19zb2NrZXRfdGltZW91dCBpbiBJTzo6U29ja2V0IGZvciBtb3JlLCBhbmQgcmVhZCBHcmFoYW0ncworICAjIGNvbW1lbnQgaW4gSU86OkhhbmRsZS4KKyAgJHsqJGZofXsnYXV0b200dGVfeGZpbGVfZmlsZSd9ID0gIiRmaWxlIjsKKworICBpZiAoISRmaC0+U1VQRVI6Om9wZW4gKEBfKSkKKyAgICB7CisgICAgICBmYXRhbCAiY2Fubm90IG9wZW4gJGZpbGU6ICQhIjsKKyAgICB9CisKKyAgIyBJbiBjYXNlIHdlJ3JlIHJ1bm5pbmcgdW5kZXIgTVNXaW5kb3dzLCBkb24ndCB3cml0ZSB3aXRoIENSTEYuCisgICMgKFRoaXMgY2lyY3VtdmVudHMgYSBidWcgaW4gYXQgbGVhc3QgQ3lnd2luIGJhc2ggd2hlcmUgdGhlIHNoZWxsCisgICMgcGFyc2luZyBmYWlscyBvbiBsaW5lcyBlbmRpbmcgd2l0aCB0aGUgY29udGludWF0aW9uIGNoYXJhY3RlciAnXCcKKyAgIyBhbmQgQ1JMRikuCisgIGJpbm1vZGUgJGZoIGlmICRmaWxlID1+IC9eXHMqPi87Cit9CisKKz1pdGVtIEM8JGZoLUU8Z3Q+Y2xvc2U+CisKK0Nsb3NlIHRoZSBmaWxlLCBoYW5kbGluZyBlcnJvcnMuCisKKz1jdXQKKworc3ViIGNsb3NlCit7CisgIG15ICRmaCA9IHNoaWZ0OworICBpZiAoISRmaC0+U1VQRVI6OmNsb3NlIChAXykpCisgICAgeworICAgICAgbXkgJGZpbGUgPSAkZmgtPm5hbWU7CisgICAgICBBdXRvbTR0ZTo6RmlsZVV0aWxzOjpoYW5kbGVfZXhlY19lcnJvcnMgJGZpbGUKKwl1bmxlc3MgJCE7CisgICAgICBmYXRhbCAiY2Fubm90IGNsb3NlICRmaWxlOiAkISI7CisgICAgfQorfQorCis9aXRlbSBDPCRsaW5lID0gJGZoLUU8Z3Q+Z2V0bGluZT4KKworUmVhZCBhbmQgcmV0dXJuIGEgbGluZSBmcm9tIHRoZSBmaWxlLiAgRW5zdXJlIEM8XHJcbj4gaXMgdHJhbnNsYXRlZCB0bworQzxcbj4gb24gaW5wdXQgZmlsZXMuCisKKz1jdXQKKworIyBTb21lIFdpbjMyL3BlcmwgaW5zdGFsbGF0aW9ucyBmYWlsIHRvIHRyYW5zbGF0ZSBcclxuIHRvIFxuIG9uIGlucHV0CisjIHNvIHdlIGRvIHRoYXQgaGVyZS4KK3N1YiBnZXRsaW5lCit7CisgIGxvY2FsICRfID0gJF9bMF0tPlNVUEVSOjpnZXRsaW5lOworICAjIFBlcmZvcm0gYSBfZ2xvYmFsXyByZXBsYWNlbWVudDogJF8gbWF5IGNhbiBjb250YWlucyBtYW55IGxpbmVzCisgICMgaW4gc2x1cnAgbW9kZSAoJC8gPSB1bmRlZikuCisgIHMvXDAxNVwwMTIvXG4vZ3MgaWYgZGVmaW5lZCAkXzsKKyAgcmV0dXJuICRfOworfQorCis9aXRlbSBDPEBsaW5lcyA9ICRmaC1FPGd0PmdldGxpbmVzPgorCitTbHVycCBsaW5lcyBmcm9tIHRoZSBmaWxlcy4KKworPWN1dAorCitzdWIgZ2V0bGluZXMKK3sKKyAgbXkgQHJlcyA9ICgpOworICBteSAkbGluZTsKKyAgcHVzaCBAcmVzLCAkbGluZSB3aGlsZSAkbGluZSA9ICRfWzBdLT5nZXRsaW5lOworICByZXR1cm4gQHJlczsKK30KKworPWl0ZW0gQzwkbmFtZSA9ICRmaC1FPGd0Pm5hbWU+CisKK1JldHVybiB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KKworPWN1dAorCitzdWIgbmFtZQoreworICBteSAkZmggPSBzaGlmdDsKKyAgcmV0dXJuICR7KiRmaH17J2F1dG9tNHRlX3hmaWxlX2ZpbGUnfTsKK30KKworPWl0ZW0gQzwkZmgtRTxndD5sb2NrPgorCitMb2NrIHRoZSBmaWxlIHVzaW5nIEM8ZmxvY2s+LiAgSWYgbG9ja2luZyBmYWlscyBmb3IgcmVhc29ucyBvdGhlciB0aGFuCitDPGZsb2NrPiBiZWluZyB1bnN1cHBvcnRlZCwgdGhlbiBlcnJvciBvdXQgaWYgQzwkRU5WeydNQUtFRkxBR1MnfT4gaW5kaWNhdGVzCit0aGF0IHdlIGFyZSBzcGF3bmVkIGZyb20gYSBwYXJhbGxlbCBDPG1ha2U+LgorCis9Y3V0CisKK3N1YiBsb2NrCit7CisgIG15ICgkZmgsICRtb2RlKSA9IEBfOworICAjIENhbm5vdCB1c2UgQF8gaGVyZS4KKworICAjIFVubGVzcyBleHBsaWNpdGx5IGNvbmZpZ3VyZWQgb3RoZXJ3aXNlLCBQZXJsIGltcGxlbWVudHMgaXRzIGBmbG9jaycgd2l0aCB0aGUKKyAgIyBmaXJzdCBvZiBmbG9jaygyKSwgZmNudGwoMiksIG9yIGxvY2tmKDMpIHRoYXQgd29ya3MuICBUaGVzZSBjYW4gZmFpbCBvbgorICAjIE5GUy1iYWNrZWQgZmlsZXMsIHdpdGggRU5PTENLIChHTlUvTGludXgpIG9yIEVPUE5PVFNVUFAgKEZyZWVCU0QpOyB3ZQorICAjIHVzdWFsbHkgaWdub3JlIHRoZXNlIGVycm9ycy4gIElmICRFTlZ7TUFLRUZMQUdTfSBzdWdnZXN0cyB0aGF0IGEgcGFyYWxsZWwKKyAgIyBpbnZvY2F0aW9uIG9mIGBtYWtlJyBoYXMgaW52b2tlZCB0aGUgdG9vbCB3ZSBzZXJ2ZSwgcmVwb3J0IGFsbCBsb2NraW5nCisgICMgZmFpbHVyZXMgYW5kIGFib3J0LgorICAjCisgICMgT24gVW5pY29zLCBmbG9jaygyKSBhbmQgZmNudGwoMikgb3ZlciBORlMgaGFuZyBpbmRlZmluaXRlbHkgd2hlbiBgbG9ja2QnIGlzCisgICMgbm90IHJ1bm5pbmcuICBOZXRCU0QgTkZTIGNsaWVudHMgc2lsZW50bHkgZ3JhbnQgYWxsIGxvY2tzLiAgV2UgZG8gbm90CisgICMgYXR0ZW1wdCB0byBkZWZlbmQgYWdhaW5zdCB0aGVzZSBkYW5nZXJzLgorICAjCisgICMgLWogaXMgZm9yIHBhcmFsbGVsIEJTRCBtYWtlLCAtUCBpcyBmb3IgcGFyYWxsZWwgSFAtVVggbWFrZS4KKyAgaWYgKCFmbG9jayAoJGZoLCAkbW9kZSkpCisgICAgeworICAgICAgbXkgJG1ha2VfaiA9IChleGlzdHMgJEVOVnsnTUFLRUZMQUdTJ30KKwkJICAgICYmICIgLSRFTlZ7J01BS0VGTEFHUyd9IiA9fiAvICgtW0JkZWlrclJzU3ddKltqUF18LS1balBdfC0tLT9qb2JzKS8pOworICAgICAgbXkgJG5vdGUgPSAiXG5mb3JnbyBgbWFrZSAtaicgb3IgdXNlIGEgZmlsZSBzeXN0ZW0gdGhhdCBzdXBwb3J0cyBsb2NrcyI7CisgICAgICBteSAkZmlsZSA9ICRmaC0+bmFtZTsKKworICAgICAgbXNnICgkbWFrZV9qID8gJ2ZhdGFsJyA6ICd1bnN1cHBvcnRlZCcsCisJICAgImNhbm5vdCBsb2NrICRmaWxlIHdpdGggbW9kZSAkbW9kZTogJCEiIC4gKCRtYWtlX2ogPyAkbm90ZSA6ICIiKSkKKwlpZiAkbWFrZV9qIHx8ICEoJCF7RU5PTENLfSB8fCAkIXtFT1BOT1RTVVBQfSk7CisgICAgfQorfQorCis9aXRlbSBDPCRmaC1FPGd0PnNlZWsgKCRwb3NpdGlvbiwgWyR3aGVuY2VdKT4KKworU2VlayBmaWxlIHRvIEM8JHBvc2l0aW9uPi4gIERpZSBpZiBzZWVraW5nIGZhaWxzLgorCis9Y3V0CisKK3N1YiBzZWVrCit7CisgIG15ICRmaCA9IHNoaWZ0OworICAjIENhbm5vdCB1c2UgQF8gaGVyZS4KKyAgaWYgKCFzZWVrICgkZmgsICRfWzBdLCAkX1sxXSkpCisgICAgeworICAgICAgbXkgJGZpbGUgPSAkZmgtPm5hbWU7CisgICAgICBmYXRhbCAiJG1lOiBjYW5ub3QgcmV3aW5kICRmaWxlIHdpdGggQF86ICQhIjsKKyAgICB9Cit9CisKKz1pdGVtIEM8JGZoLUU8Z3Q+dHJ1bmNhdGUgKCRsZW4pPgorCitUcnVuY2F0ZSB0aGUgZmlsZSB0byBsZW5ndGggQzwkbGVuPi4gIERpZSBvbiBmYWlsdXJlLgorCis9Y3V0CisKK3N1YiB0cnVuY2F0ZQoreworICBteSAoJGZoLCAkbGVuKSA9IEBfOworICBpZiAoIXRydW5jYXRlICgkZmgsICRsZW4pKQorICAgIHsKKyAgICAgIG15ICRmaWxlID0gJGZoLT5uYW1lOworICAgICAgZmF0YWwgImNhbm5vdCB0cnVuY2F0ZSAkZmlsZSBhdCAkbGVuOiAkISI7CisgICAgfQorfQorCis9YmFjaworCis9aGVhZDEgU0VFIEFMU08KKworTDxwZXJsZnVuYz4sCitMPHBlcmxvcC8iSS9PIE9wZXJhdG9ycyI+LAorTDxJTzo6RmlsZT4KK0w8SU86OkhhbmRsZT4KK0w8SU86OlNlZWthYmxlPgorCis9aGVhZDEgSElTVE9SWQorCitEZXJpdmVkIGZyb20gSU86OkZpbGUucG0gYnkgQWtpbSBEZW1haWxsZSBFPGx0PkY8YWtpbUBmcmVlZnJpZW5kcy5vcmc+RTxndD4uCisKKz1jdXQKKworMTsKKworIyMjIFNldHVwICJHTlUiIHN0eWxlIGZvciBwZXJsLW1vZGUgYW5kIGNwZXJsLW1vZGUuCisjIyBMb2NhbCBWYXJpYWJsZXM6CisjIyBwZXJsLWluZGVudC1sZXZlbDogMgorIyMgcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1pbWFnaW5hcnktb2Zmc2V0OiAwCisjIyBwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWluZGVudC1sZXZlbDogMgorIyMgY3BlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1leHRyYS1uZXdsaW5lLWJlZm9yZS1icmFjZTogdAorIyMgY3BlcmwtbWVyZ2UtdHJhaWxpbmctZWxzZTogbmlsCisjIyBjcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgRW5kOgpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b2NvbmYvSU5TVEFMTCBiL3NoYXJlL2F1dG9jb25mL0lOU1RBTEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QxYzMyMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9jb25mL0lOU1RBTEwKQEAgLTAsMCArMSwzNjUgQEAKK0luc3RhbGxhdGlvbiBJbnN0cnVjdGlvbnMKKyoqKioqKioqKioqKioqKioqKioqKioqKioKKworQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDA0LCAyMDA1LAorMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKK2FyZSBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodAorbm90aWNlIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIG9mZmVyZWQgYXMtaXMsCit3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kLgorCitCYXNpYyBJbnN0YWxsYXRpb24KKz09PT09PT09PT09PT09PT09PQorCisgICBCcmllZmx5LCB0aGUgc2hlbGwgY29tbWFuZHMgYC4vY29uZmlndXJlOyBtYWtlOyBtYWtlIGluc3RhbGwnIHNob3VsZAorY29uZmlndXJlLCBidWlsZCwgYW5kIGluc3RhbGwgdGhpcyBwYWNrYWdlLiAgVGhlIGZvbGxvd2luZworbW9yZS1kZXRhaWxlZCBpbnN0cnVjdGlvbnMgYXJlIGdlbmVyaWM7IHNlZSB0aGUgYFJFQURNRScgZmlsZSBmb3IKK2luc3RydWN0aW9ucyBzcGVjaWZpYyB0byB0aGlzIHBhY2thZ2UuICBTb21lIHBhY2thZ2VzIHByb3ZpZGUgdGhpcworYElOU1RBTEwnIGZpbGUgYnV0IGRvIG5vdCBpbXBsZW1lbnQgYWxsIG9mIHRoZSBmZWF0dXJlcyBkb2N1bWVudGVkCitiZWxvdy4gIFRoZSBsYWNrIG9mIGFuIG9wdGlvbmFsIGZlYXR1cmUgaW4gYSBnaXZlbiBwYWNrYWdlIGlzIG5vdAorbmVjZXNzYXJpbHkgYSBidWcuICBNb3JlIHJlY29tbWVuZGF0aW9ucyBmb3IgR05VIHBhY2thZ2VzIGNhbiBiZSBmb3VuZAoraW4gKm5vdGUgTWFrZWZpbGUgQ29udmVudGlvbnM6IChzdGFuZGFyZHMpTWFrZWZpbGUgQ29udmVudGlvbnMuCisKKyAgIFRoZSBgY29uZmlndXJlJyBzaGVsbCBzY3JpcHQgYXR0ZW1wdHMgdG8gZ3Vlc3MgY29ycmVjdCB2YWx1ZXMgZm9yCit2YXJpb3VzIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIHVzZWQgZHVyaW5nIGNvbXBpbGF0aW9uLiAgSXQgdXNlcwordGhvc2UgdmFsdWVzIHRvIGNyZWF0ZSBhIGBNYWtlZmlsZScgaW4gZWFjaCBkaXJlY3Rvcnkgb2YgdGhlIHBhY2thZ2UuCitJdCBtYXkgYWxzbyBjcmVhdGUgb25lIG9yIG1vcmUgYC5oJyBmaWxlcyBjb250YWluaW5nIHN5c3RlbS1kZXBlbmRlbnQKK2RlZmluaXRpb25zLiAgRmluYWxseSwgaXQgY3JlYXRlcyBhIHNoZWxsIHNjcmlwdCBgY29uZmlnLnN0YXR1cycgdGhhdAoreW91IGNhbiBydW4gaW4gdGhlIGZ1dHVyZSB0byByZWNyZWF0ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLCBhbmQgYQorZmlsZSBgY29uZmlnLmxvZycgY29udGFpbmluZyBjb21waWxlciBvdXRwdXQgKHVzZWZ1bCBtYWlubHkgZm9yCitkZWJ1Z2dpbmcgYGNvbmZpZ3VyZScpLgorCisgICBJdCBjYW4gYWxzbyB1c2UgYW4gb3B0aW9uYWwgZmlsZSAodHlwaWNhbGx5IGNhbGxlZCBgY29uZmlnLmNhY2hlJworYW5kIGVuYWJsZWQgd2l0aCBgLS1jYWNoZS1maWxlPWNvbmZpZy5jYWNoZScgb3Igc2ltcGx5IGAtQycpIHRoYXQgc2F2ZXMKK3RoZSByZXN1bHRzIG9mIGl0cyB0ZXN0cyB0byBzcGVlZCB1cCByZWNvbmZpZ3VyaW5nLiAgQ2FjaGluZyBpcworZGlzYWJsZWQgYnkgZGVmYXVsdCB0byBwcmV2ZW50IHByb2JsZW1zIHdpdGggYWNjaWRlbnRhbCB1c2Ugb2Ygc3RhbGUKK2NhY2hlIGZpbGVzLgorCisgICBJZiB5b3UgbmVlZCB0byBkbyB1bnVzdWFsIHRoaW5ncyB0byBjb21waWxlIHRoZSBwYWNrYWdlLCBwbGVhc2UgdHJ5Cit0byBmaWd1cmUgb3V0IGhvdyBgY29uZmlndXJlJyBjb3VsZCBjaGVjayB3aGV0aGVyIHRvIGRvIHRoZW0sIGFuZCBtYWlsCitkaWZmcyBvciBpbnN0cnVjdGlvbnMgdG8gdGhlIGFkZHJlc3MgZ2l2ZW4gaW4gdGhlIGBSRUFETUUnIHNvIHRoZXkgY2FuCitiZSBjb25zaWRlcmVkIGZvciB0aGUgbmV4dCByZWxlYXNlLiAgSWYgeW91IGFyZSB1c2luZyB0aGUgY2FjaGUsIGFuZCBhdAorc29tZSBwb2ludCBgY29uZmlnLmNhY2hlJyBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndCB3YW50IHRvIGtlZXAsIHlvdQorbWF5IHJlbW92ZSBvciBlZGl0IGl0LgorCisgICBUaGUgZmlsZSBgY29uZmlndXJlLmFjJyAob3IgYGNvbmZpZ3VyZS5pbicpIGlzIHVzZWQgdG8gY3JlYXRlCitgY29uZmlndXJlJyBieSBhIHByb2dyYW0gY2FsbGVkIGBhdXRvY29uZicuICBZb3UgbmVlZCBgY29uZmlndXJlLmFjJyBpZgoreW91IHdhbnQgdG8gY2hhbmdlIGl0IG9yIHJlZ2VuZXJhdGUgYGNvbmZpZ3VyZScgdXNpbmcgYSBuZXdlciB2ZXJzaW9uCitvZiBgYXV0b2NvbmYnLgorCisgICBUaGUgc2ltcGxlc3Qgd2F5IHRvIGNvbXBpbGUgdGhpcyBwYWNrYWdlIGlzOgorCisgIDEuIGBjZCcgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBwYWNrYWdlJ3Mgc291cmNlIGNvZGUgYW5kIHR5cGUKKyAgICAgYC4vY29uZmlndXJlJyB0byBjb25maWd1cmUgdGhlIHBhY2thZ2UgZm9yIHlvdXIgc3lzdGVtLgorCisgICAgIFJ1bm5pbmcgYGNvbmZpZ3VyZScgbWlnaHQgdGFrZSBhIHdoaWxlLiAgV2hpbGUgcnVubmluZywgaXQgcHJpbnRzCisgICAgIHNvbWUgbWVzc2FnZXMgdGVsbGluZyB3aGljaCBmZWF0dXJlcyBpdCBpcyBjaGVja2luZyBmb3IuCisKKyAgMi4gVHlwZSBgbWFrZScgdG8gY29tcGlsZSB0aGUgcGFja2FnZS4KKworICAzLiBPcHRpb25hbGx5LCB0eXBlIGBtYWtlIGNoZWNrJyB0byBydW4gYW55IHNlbGYtdGVzdHMgdGhhdCBjb21lIHdpdGgKKyAgICAgdGhlIHBhY2thZ2UsIGdlbmVyYWxseSB1c2luZyB0aGUganVzdC1idWlsdCB1bmluc3RhbGxlZCBiaW5hcmllcy4KKworICA0LiBUeXBlIGBtYWtlIGluc3RhbGwnIHRvIGluc3RhbGwgdGhlIHByb2dyYW1zIGFuZCBhbnkgZGF0YSBmaWxlcyBhbmQKKyAgICAgZG9jdW1lbnRhdGlvbi4gIFdoZW4gaW5zdGFsbGluZyBpbnRvIGEgcHJlZml4IG93bmVkIGJ5IHJvb3QsIGl0IGlzCisgICAgIHJlY29tbWVuZGVkIHRoYXQgdGhlIHBhY2thZ2UgYmUgY29uZmlndXJlZCBhbmQgYnVpbHQgYXMgYSByZWd1bGFyCisgICAgIHVzZXIsIGFuZCBvbmx5IHRoZSBgbWFrZSBpbnN0YWxsJyBwaGFzZSBleGVjdXRlZCB3aXRoIHJvb3QKKyAgICAgcHJpdmlsZWdlcy4KKworICA1LiBPcHRpb25hbGx5LCB0eXBlIGBtYWtlIGluc3RhbGxjaGVjaycgdG8gcmVwZWF0IGFueSBzZWxmLXRlc3RzLCBidXQKKyAgICAgdGhpcyB0aW1lIHVzaW5nIHRoZSBiaW5hcmllcyBpbiB0aGVpciBmaW5hbCBpbnN0YWxsZWQgbG9jYXRpb24uCisgICAgIFRoaXMgdGFyZ2V0IGRvZXMgbm90IGluc3RhbGwgYW55dGhpbmcuICBSdW5uaW5nIHRoaXMgdGFyZ2V0IGFzIGEKKyAgICAgcmVndWxhciB1c2VyLCBwYXJ0aWN1bGFybHkgaWYgdGhlIHByaW9yIGBtYWtlIGluc3RhbGwnIHJlcXVpcmVkCisgICAgIHJvb3QgcHJpdmlsZWdlcywgdmVyaWZpZXMgdGhhdCB0aGUgaW5zdGFsbGF0aW9uIGNvbXBsZXRlZAorICAgICBjb3JyZWN0bHkuCisKKyAgNi4gWW91IGNhbiByZW1vdmUgdGhlIHByb2dyYW0gYmluYXJpZXMgYW5kIG9iamVjdCBmaWxlcyBmcm9tIHRoZQorICAgICBzb3VyY2UgY29kZSBkaXJlY3RvcnkgYnkgdHlwaW5nIGBtYWtlIGNsZWFuJy4gIFRvIGFsc28gcmVtb3ZlIHRoZQorICAgICBmaWxlcyB0aGF0IGBjb25maWd1cmUnIGNyZWF0ZWQgKHNvIHlvdSBjYW4gY29tcGlsZSB0aGUgcGFja2FnZSBmb3IKKyAgICAgYSBkaWZmZXJlbnQga2luZCBvZiBjb21wdXRlciksIHR5cGUgYG1ha2UgZGlzdGNsZWFuJy4gIFRoZXJlIGlzCisgICAgIGFsc28gYSBgbWFrZSBtYWludGFpbmVyLWNsZWFuJyB0YXJnZXQsIGJ1dCB0aGF0IGlzIGludGVuZGVkIG1haW5seQorICAgICBmb3IgdGhlIHBhY2thZ2UncyBkZXZlbG9wZXJzLiAgSWYgeW91IHVzZSBpdCwgeW91IG1heSBoYXZlIHRvIGdldAorICAgICBhbGwgc29ydHMgb2Ygb3RoZXIgcHJvZ3JhbXMgaW4gb3JkZXIgdG8gcmVnZW5lcmF0ZSBmaWxlcyB0aGF0IGNhbWUKKyAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgIDcuIE9mdGVuLCB5b3UgY2FuIGFsc28gdHlwZSBgbWFrZSB1bmluc3RhbGwnIHRvIHJlbW92ZSB0aGUgaW5zdGFsbGVkCisgICAgIGZpbGVzIGFnYWluLiAgSW4gcHJhY3RpY2UsIG5vdCBhbGwgcGFja2FnZXMgaGF2ZSB0ZXN0ZWQgdGhhdAorICAgICB1bmluc3RhbGxhdGlvbiB3b3JrcyBjb3JyZWN0bHksIGV2ZW4gdGhvdWdoIGl0IGlzIHJlcXVpcmVkIGJ5IHRoZQorICAgICBHTlUgQ29kaW5nIFN0YW5kYXJkcy4KKworICA4LiBTb21lIHBhY2thZ2VzLCBwYXJ0aWN1bGFybHkgdGhvc2UgdGhhdCB1c2UgQXV0b21ha2UsIHByb3ZpZGUgYG1ha2UKKyAgICAgZGlzdGNoZWNrJywgd2hpY2ggY2FuIGJ5IHVzZWQgYnkgZGV2ZWxvcGVycyB0byB0ZXN0IHRoYXQgYWxsIG90aGVyCisgICAgIHRhcmdldHMgbGlrZSBgbWFrZSBpbnN0YWxsJyBhbmQgYG1ha2UgdW5pbnN0YWxsJyB3b3JrIGNvcnJlY3RseS4KKyAgICAgVGhpcyB0YXJnZXQgaXMgZ2VuZXJhbGx5IG5vdCBydW4gYnkgZW5kIHVzZXJzLgorCitDb21waWxlcnMgYW5kIE9wdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PQorCisgICBTb21lIHN5c3RlbXMgcmVxdWlyZSB1bnVzdWFsIG9wdGlvbnMgZm9yIGNvbXBpbGF0aW9uIG9yIGxpbmtpbmcgdGhhdAordGhlIGBjb25maWd1cmUnIHNjcmlwdCBkb2VzIG5vdCBrbm93IGFib3V0LiAgUnVuIGAuL2NvbmZpZ3VyZSAtLWhlbHAnCitmb3IgZGV0YWlscyBvbiBzb21lIG9mIHRoZSBwZXJ0aW5lbnQgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorCisgICBZb3UgY2FuIGdpdmUgYGNvbmZpZ3VyZScgaW5pdGlhbCB2YWx1ZXMgZm9yIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycworYnkgc2V0dGluZyB2YXJpYWJsZXMgaW4gdGhlIGNvbW1hbmQgbGluZSBvciBpbiB0aGUgZW52aXJvbm1lbnQuICBIZXJlCitpcyBhbiBleGFtcGxlOgorCisgICAgIC4vY29uZmlndXJlIENDPWM5OSBDRkxBR1M9LWcgTElCUz0tbHBvc2l4CisKKyAgICpOb3RlIERlZmluaW5nIFZhcmlhYmxlczo6LCBmb3IgbW9yZSBkZXRhaWxzLgorCitDb21waWxpbmcgRm9yIE11bHRpcGxlIEFyY2hpdGVjdHVyZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICBZb3UgY2FuIGNvbXBpbGUgdGhlIHBhY2thZ2UgZm9yIG1vcmUgdGhhbiBvbmUga2luZCBvZiBjb21wdXRlciBhdCB0aGUKK3NhbWUgdGltZSwgYnkgcGxhY2luZyB0aGUgb2JqZWN0IGZpbGVzIGZvciBlYWNoIGFyY2hpdGVjdHVyZSBpbiB0aGVpcgorb3duIGRpcmVjdG9yeS4gIFRvIGRvIHRoaXMsIHlvdSBjYW4gdXNlIEdOVSBgbWFrZScuICBgY2QnIHRvIHRoZQorZGlyZWN0b3J5IHdoZXJlIHlvdSB3YW50IHRoZSBvYmplY3QgZmlsZXMgYW5kIGV4ZWN1dGFibGVzIHRvIGdvIGFuZCBydW4KK3RoZSBgY29uZmlndXJlJyBzY3JpcHQuICBgY29uZmlndXJlJyBhdXRvbWF0aWNhbGx5IGNoZWNrcyBmb3IgdGhlCitzb3VyY2UgY29kZSBpbiB0aGUgZGlyZWN0b3J5IHRoYXQgYGNvbmZpZ3VyZScgaXMgaW4gYW5kIGluIGAuLicuICBUaGlzCitpcyBrbm93biBhcyBhICJWUEFUSCIgYnVpbGQuCisKKyAgIFdpdGggYSBub24tR05VIGBtYWtlJywgaXQgaXMgc2FmZXIgdG8gY29tcGlsZSB0aGUgcGFja2FnZSBmb3Igb25lCithcmNoaXRlY3R1cmUgYXQgYSB0aW1lIGluIHRoZSBzb3VyY2UgY29kZSBkaXJlY3RvcnkuICBBZnRlciB5b3UgaGF2ZQoraW5zdGFsbGVkIHRoZSBwYWNrYWdlIGZvciBvbmUgYXJjaGl0ZWN0dXJlLCB1c2UgYG1ha2UgZGlzdGNsZWFuJyBiZWZvcmUKK3JlY29uZmlndXJpbmcgZm9yIGFub3RoZXIgYXJjaGl0ZWN0dXJlLgorCisgICBPbiBNYWNPUyBYIDEwLjUgYW5kIGxhdGVyIHN5c3RlbXMsIHlvdSBjYW4gY3JlYXRlIGxpYnJhcmllcyBhbmQKK2V4ZWN1dGFibGVzIHRoYXQgd29yayBvbiBtdWx0aXBsZSBzeXN0ZW0gdHlwZXMtLWtub3duIGFzICJmYXQiIG9yCisidW5pdmVyc2FsIiBiaW5hcmllcy0tYnkgc3BlY2lmeWluZyBtdWx0aXBsZSBgLWFyY2gnIG9wdGlvbnMgdG8gdGhlCitjb21waWxlciBidXQgb25seSBhIHNpbmdsZSBgLWFyY2gnIG9wdGlvbiB0byB0aGUgcHJlcHJvY2Vzc29yLiAgTGlrZQordGhpczoKKworICAgICAuL2NvbmZpZ3VyZSBDQz0iZ2NjIC1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IC1hcmNoIHBwYyAtYXJjaCBwcGM2NCIgXAorICAgICAgICAgICAgICAgICBDWFg9ImcrKyAtYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCAtYXJjaCBwcGMgLWFyY2ggcHBjNjQiIFwKKyAgICAgICAgICAgICAgICAgQ1BQPSJnY2MgLUUiIENYWENQUD0iZysrIC1FIgorCisgICBUaGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIHByb2R1Y2Ugd29ya2luZyBvdXRwdXQgaW4gYWxsIGNhc2VzLCB5b3UKK21heSBoYXZlIHRvIGJ1aWxkIG9uZSBhcmNoaXRlY3R1cmUgYXQgYSB0aW1lIGFuZCBjb21iaW5lIHRoZSByZXN1bHRzCit1c2luZyB0aGUgYGxpcG8nIHRvb2wgaWYgeW91IGhhdmUgcHJvYmxlbXMuCisKK0luc3RhbGxhdGlvbiBOYW1lcworPT09PT09PT09PT09PT09PT09CisKKyAgIEJ5IGRlZmF1bHQsIGBtYWtlIGluc3RhbGwnIGluc3RhbGxzIHRoZSBwYWNrYWdlJ3MgY29tbWFuZHMgdW5kZXIKK2AvdXNyL2xvY2FsL2JpbicsIGluY2x1ZGUgZmlsZXMgdW5kZXIgYC91c3IvbG9jYWwvaW5jbHVkZScsIGV0Yy4gIFlvdQorY2FuIHNwZWNpZnkgYW4gaW5zdGFsbGF0aW9uIHByZWZpeCBvdGhlciB0aGFuIGAvdXNyL2xvY2FsJyBieSBnaXZpbmcKK2Bjb25maWd1cmUnIHRoZSBvcHRpb24gYC0tcHJlZml4PVBSRUZJWCcsIHdoZXJlIFBSRUZJWCBtdXN0IGJlIGFuCithYnNvbHV0ZSBmaWxlIG5hbWUuCisKKyAgIFlvdSBjYW4gc3BlY2lmeSBzZXBhcmF0ZSBpbnN0YWxsYXRpb24gcHJlZml4ZXMgZm9yCithcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmlsZXMgYW5kIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBmaWxlcy4gIElmIHlvdQorcGFzcyB0aGUgb3B0aW9uIGAtLWV4ZWMtcHJlZml4PVBSRUZJWCcgdG8gYGNvbmZpZ3VyZScsIHRoZSBwYWNrYWdlIHVzZXMKK1BSRUZJWCBhcyB0aGUgcHJlZml4IGZvciBpbnN0YWxsaW5nIHByb2dyYW1zIGFuZCBsaWJyYXJpZXMuCitEb2N1bWVudGF0aW9uIGFuZCBvdGhlciBkYXRhIGZpbGVzIHN0aWxsIHVzZSB0aGUgcmVndWxhciBwcmVmaXguCisKKyAgIEluIGFkZGl0aW9uLCBpZiB5b3UgdXNlIGFuIHVudXN1YWwgZGlyZWN0b3J5IGxheW91dCB5b3UgY2FuIGdpdmUKK29wdGlvbnMgbGlrZSBgLS1iaW5kaXI9RElSJyB0byBzcGVjaWZ5IGRpZmZlcmVudCB2YWx1ZXMgZm9yIHBhcnRpY3VsYXIKK2tpbmRzIG9mIGZpbGVzLiAgUnVuIGBjb25maWd1cmUgLS1oZWxwJyBmb3IgYSBsaXN0IG9mIHRoZSBkaXJlY3RvcmllcworeW91IGNhbiBzZXQgYW5kIHdoYXQga2luZHMgb2YgZmlsZXMgZ28gaW4gdGhlbS4gIEluIGdlbmVyYWwsIHRoZQorZGVmYXVsdCBmb3IgdGhlc2Ugb3B0aW9ucyBpcyBleHByZXNzZWQgaW4gdGVybXMgb2YgYCR7cHJlZml4fScsIHNvIHRoYXQKK3NwZWNpZnlpbmcganVzdCBgLS1wcmVmaXgnIHdpbGwgYWZmZWN0IGFsbCBvZiB0aGUgb3RoZXIgZGlyZWN0b3J5CitzcGVjaWZpY2F0aW9ucyB0aGF0IHdlcmUgbm90IGV4cGxpY2l0bHkgcHJvdmlkZWQuCisKKyAgIFRoZSBtb3N0IHBvcnRhYmxlIHdheSB0byBhZmZlY3QgaW5zdGFsbGF0aW9uIGxvY2F0aW9ucyBpcyB0byBwYXNzIHRoZQorY29ycmVjdCBsb2NhdGlvbnMgdG8gYGNvbmZpZ3VyZSc7IGhvd2V2ZXIsIG1hbnkgcGFja2FnZXMgcHJvdmlkZSBvbmUgb3IKK2JvdGggb2YgdGhlIGZvbGxvd2luZyBzaG9ydGN1dHMgb2YgcGFzc2luZyB2YXJpYWJsZSBhc3NpZ25tZW50cyB0byB0aGUKK2BtYWtlIGluc3RhbGwnIGNvbW1hbmQgbGluZSB0byBjaGFuZ2UgaW5zdGFsbGF0aW9uIGxvY2F0aW9ucyB3aXRob3V0CitoYXZpbmcgdG8gcmVjb25maWd1cmUgb3IgcmVjb21waWxlLgorCisgICBUaGUgZmlyc3QgbWV0aG9kIGludm9sdmVzIHByb3ZpZGluZyBhbiBvdmVycmlkZSB2YXJpYWJsZSBmb3IgZWFjaAorYWZmZWN0ZWQgZGlyZWN0b3J5LiAgRm9yIGV4YW1wbGUsIGBtYWtlIGluc3RhbGwKK3ByZWZpeD0vYWx0ZXJuYXRlL2RpcmVjdG9yeScgd2lsbCBjaG9vc2UgYW4gYWx0ZXJuYXRlIGxvY2F0aW9uIGZvciBhbGwKK2RpcmVjdG9yeSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB0aGF0IHdlcmUgZXhwcmVzc2VkIGluIHRlcm1zIG9mCitgJHtwcmVmaXh9Jy4gIEFueSBkaXJlY3RvcmllcyB0aGF0IHdlcmUgc3BlY2lmaWVkIGR1cmluZyBgY29uZmlndXJlJywKK2J1dCBub3QgaW4gdGVybXMgb2YgYCR7cHJlZml4fScsIG11c3QgZWFjaCBiZSBvdmVycmlkZGVuIGF0IGluc3RhbGwKK3RpbWUgZm9yIHRoZSBlbnRpcmUgaW5zdGFsbGF0aW9uIHRvIGJlIHJlbG9jYXRlZC4gIFRoZSBhcHByb2FjaCBvZgorbWFrZWZpbGUgdmFyaWFibGUgb3ZlcnJpZGVzIGZvciBlYWNoIGRpcmVjdG9yeSB2YXJpYWJsZSBpcyByZXF1aXJlZCBieQordGhlIEdOVSBDb2RpbmcgU3RhbmRhcmRzLCBhbmQgaWRlYWxseSBjYXVzZXMgbm8gcmVjb21waWxhdGlvbi4KK0hvd2V2ZXIsIHNvbWUgcGxhdGZvcm1zIGhhdmUga25vd24gbGltaXRhdGlvbnMgd2l0aCB0aGUgc2VtYW50aWNzIG9mCitzaGFyZWQgbGlicmFyaWVzIHRoYXQgZW5kIHVwIHJlcXVpcmluZyByZWNvbXBpbGF0aW9uIHdoZW4gdXNpbmcgdGhpcworbWV0aG9kLCBwYXJ0aWN1bGFybHkgbm90aWNlYWJsZSBpbiBwYWNrYWdlcyB0aGF0IHVzZSBHTlUgTGlidG9vbC4KKworICAgVGhlIHNlY29uZCBtZXRob2QgaW52b2x2ZXMgcHJvdmlkaW5nIHRoZSBgREVTVERJUicgdmFyaWFibGUuICBGb3IKK2V4YW1wbGUsIGBtYWtlIGluc3RhbGwgREVTVERJUj0vYWx0ZXJuYXRlL2RpcmVjdG9yeScgd2lsbCBwcmVwZW5kCitgL2FsdGVybmF0ZS9kaXJlY3RvcnknIGJlZm9yZSBhbGwgaW5zdGFsbGF0aW9uIG5hbWVzLiAgVGhlIGFwcHJvYWNoIG9mCitgREVTVERJUicgb3ZlcnJpZGVzIGlzIG5vdCByZXF1aXJlZCBieSB0aGUgR05VIENvZGluZyBTdGFuZGFyZHMsIGFuZAorZG9lcyBub3Qgd29yayBvbiBwbGF0Zm9ybXMgdGhhdCBoYXZlIGRyaXZlIGxldHRlcnMuICBPbiB0aGUgb3RoZXIgaGFuZCwKK2l0IGRvZXMgYmV0dGVyIGF0IGF2b2lkaW5nIHJlY29tcGlsYXRpb24gaXNzdWVzLCBhbmQgd29ya3Mgd2VsbCBldmVuCit3aGVuIHNvbWUgZGlyZWN0b3J5IG9wdGlvbnMgd2VyZSBub3Qgc3BlY2lmaWVkIGluIHRlcm1zIG9mIGAke3ByZWZpeH0nCithdCBgY29uZmlndXJlJyB0aW1lLgorCitPcHRpb25hbCBGZWF0dXJlcworPT09PT09PT09PT09PT09PT0KKworICAgSWYgdGhlIHBhY2thZ2Ugc3VwcG9ydHMgaXQsIHlvdSBjYW4gY2F1c2UgcHJvZ3JhbXMgdG8gYmUgaW5zdGFsbGVkCit3aXRoIGFuIGV4dHJhIHByZWZpeCBvciBzdWZmaXggb24gdGhlaXIgbmFtZXMgYnkgZ2l2aW5nIGBjb25maWd1cmUnIHRoZQorb3B0aW9uIGAtLXByb2dyYW0tcHJlZml4PVBSRUZJWCcgb3IgYC0tcHJvZ3JhbS1zdWZmaXg9U1VGRklYJy4KKworICAgU29tZSBwYWNrYWdlcyBwYXkgYXR0ZW50aW9uIHRvIGAtLWVuYWJsZS1GRUFUVVJFJyBvcHRpb25zIHRvCitgY29uZmlndXJlJywgd2hlcmUgRkVBVFVSRSBpbmRpY2F0ZXMgYW4gb3B0aW9uYWwgcGFydCBvZiB0aGUgcGFja2FnZS4KK1RoZXkgbWF5IGFsc28gcGF5IGF0dGVudGlvbiB0byBgLS13aXRoLVBBQ0tBR0UnIG9wdGlvbnMsIHdoZXJlIFBBQ0tBR0UKK2lzIHNvbWV0aGluZyBsaWtlIGBnbnUtYXMnIG9yIGB4JyAoZm9yIHRoZSBYIFdpbmRvdyBTeXN0ZW0pLiAgVGhlCitgUkVBRE1FJyBzaG91bGQgbWVudGlvbiBhbnkgYC0tZW5hYmxlLScgYW5kIGAtLXdpdGgtJyBvcHRpb25zIHRoYXQgdGhlCitwYWNrYWdlIHJlY29nbml6ZXMuCisKKyAgIEZvciBwYWNrYWdlcyB0aGF0IHVzZSB0aGUgWCBXaW5kb3cgU3lzdGVtLCBgY29uZmlndXJlJyBjYW4gdXN1YWxseQorZmluZCB0aGUgWCBpbmNsdWRlIGFuZCBsaWJyYXJ5IGZpbGVzIGF1dG9tYXRpY2FsbHksIGJ1dCBpZiBpdCBkb2Vzbid0LAoreW91IGNhbiB1c2UgdGhlIGBjb25maWd1cmUnIG9wdGlvbnMgYC0teC1pbmNsdWRlcz1ESVInIGFuZAorYC0teC1saWJyYXJpZXM9RElSJyB0byBzcGVjaWZ5IHRoZWlyIGxvY2F0aW9ucy4KKworICAgU29tZSBwYWNrYWdlcyBvZmZlciB0aGUgYWJpbGl0eSB0byBjb25maWd1cmUgaG93IHZlcmJvc2UgdGhlCitleGVjdXRpb24gb2YgYG1ha2UnIHdpbGwgYmUuICBGb3IgdGhlc2UgcGFja2FnZXMsIHJ1bm5pbmcgYC4vY29uZmlndXJlCistLWVuYWJsZS1zaWxlbnQtcnVsZXMnIHNldHMgdGhlIGRlZmF1bHQgdG8gbWluaW1hbCBvdXRwdXQsIHdoaWNoIGNhbiBiZQorb3ZlcnJpZGRlbiB3aXRoIGBtYWtlIFY9MSc7IHdoaWxlIHJ1bm5pbmcgYC4vY29uZmlndXJlCistLWRpc2FibGUtc2lsZW50LXJ1bGVzJyBzZXRzIHRoZSBkZWZhdWx0IHRvIHZlcmJvc2UsIHdoaWNoIGNhbiBiZQorb3ZlcnJpZGRlbiB3aXRoIGBtYWtlIFY9MCcuCisKK1BhcnRpY3VsYXIgc3lzdGVtcworPT09PT09PT09PT09PT09PT09CisKKyAgIE9uIEhQLVVYLCB0aGUgZGVmYXVsdCBDIGNvbXBpbGVyIGlzIG5vdCBBTlNJIEMgY29tcGF0aWJsZS4gIElmIEdOVQorQ0MgaXMgbm90IGluc3RhbGxlZCwgaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBpbgorb3JkZXIgdG8gdXNlIGFuIEFOU0kgQyBjb21waWxlcjoKKworICAgICAuL2NvbmZpZ3VyZSBDQz0iY2MgLUFlIC1EX1hPUEVOX1NPVVJDRT01MDAiCisKK2FuZCBpZiB0aGF0IGRvZXNuJ3Qgd29yaywgaW5zdGFsbCBwcmUtYnVpbHQgYmluYXJpZXMgb2YgR0NDIGZvciBIUC1VWC4KKworICAgT24gT1NGLzEgYS5rLmEuIFRydTY0LCBzb21lIHZlcnNpb25zIG9mIHRoZSBkZWZhdWx0IEMgY29tcGlsZXIgY2Fubm90CitwYXJzZSBpdHMgYDx3Y2hhci5oPicgaGVhZGVyIGZpbGUuICBUaGUgb3B0aW9uIGAtbm9kdGsnIGNhbiBiZSB1c2VkIGFzCithIHdvcmthcm91bmQuICBJZiBHTlUgQ0MgaXMgbm90IGluc3RhbGxlZCwgaXQgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkCit0byB0cnkKKworICAgICAuL2NvbmZpZ3VyZSBDQz0iY2MiCisKK2FuZCBpZiB0aGF0IGRvZXNuJ3Qgd29yaywgdHJ5CisKKyAgICAgLi9jb25maWd1cmUgQ0M9ImNjIC1ub2R0ayIKKworICAgT24gU29sYXJpcywgZG9uJ3QgcHV0IGAvdXNyL3VjYicgZWFybHkgaW4geW91ciBgUEFUSCcuICBUaGlzCitkaXJlY3RvcnkgY29udGFpbnMgc2V2ZXJhbCBkeXNmdW5jdGlvbmFsIHByb2dyYW1zOyB3b3JraW5nIHZhcmlhbnRzIG9mCit0aGVzZSBwcm9ncmFtcyBhcmUgYXZhaWxhYmxlIGluIGAvdXNyL2JpbicuICBTbywgaWYgeW91IG5lZWQgYC91c3IvdWNiJworaW4geW91ciBgUEFUSCcsIHB1dCBpdCBfYWZ0ZXJfIGAvdXNyL2JpbicuCisKKyAgIE9uIEhhaWt1LCBzb2Z0d2FyZSBpbnN0YWxsZWQgZm9yIGFsbCB1c2VycyBnb2VzIGluIGAvYm9vdC9jb21tb24nLAorbm90IGAvdXNyL2xvY2FsJy4gIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisKKyAgICAgLi9jb25maWd1cmUgLS1wcmVmaXg9L2Jvb3QvY29tbW9uCisKK1NwZWNpZnlpbmcgdGhlIFN5c3RlbSBUeXBlCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICBUaGVyZSBtYXkgYmUgc29tZSBmZWF0dXJlcyBgY29uZmlndXJlJyBjYW5ub3QgZmlndXJlIG91dAorYXV0b21hdGljYWxseSwgYnV0IG5lZWRzIHRvIGRldGVybWluZSBieSB0aGUgdHlwZSBvZiBtYWNoaW5lIHRoZSBwYWNrYWdlCit3aWxsIHJ1biBvbi4gIFVzdWFsbHksIGFzc3VtaW5nIHRoZSBwYWNrYWdlIGlzIGJ1aWx0IHRvIGJlIHJ1biBvbiB0aGUKK19zYW1lXyBhcmNoaXRlY3R1cmVzLCBgY29uZmlndXJlJyBjYW4gZmlndXJlIHRoYXQgb3V0LCBidXQgaWYgaXQgcHJpbnRzCithIG1lc3NhZ2Ugc2F5aW5nIGl0IGNhbm5vdCBndWVzcyB0aGUgbWFjaGluZSB0eXBlLCBnaXZlIGl0IHRoZQorYC0tYnVpbGQ9VFlQRScgb3B0aW9uLiAgVFlQRSBjYW4gZWl0aGVyIGJlIGEgc2hvcnQgbmFtZSBmb3IgdGhlIHN5c3RlbQordHlwZSwgc3VjaCBhcyBgc3VuNCcsIG9yIGEgY2Fub25pY2FsIG5hbWUgd2hpY2ggaGFzIHRoZSBmb3JtOgorCisgICAgIENQVS1DT01QQU5ZLVNZU1RFTQorCit3aGVyZSBTWVNURU0gY2FuIGhhdmUgb25lIG9mIHRoZXNlIGZvcm1zOgorCisgICAgIE9TCisgICAgIEtFUk5FTC1PUworCisgICBTZWUgdGhlIGZpbGUgYGNvbmZpZy5zdWInIGZvciB0aGUgcG9zc2libGUgdmFsdWVzIG9mIGVhY2ggZmllbGQuICBJZgorYGNvbmZpZy5zdWInIGlzbid0IGluY2x1ZGVkIGluIHRoaXMgcGFja2FnZSwgdGhlbiB0aGlzIHBhY2thZ2UgZG9lc24ndAorbmVlZCB0byBrbm93IHRoZSBtYWNoaW5lIHR5cGUuCisKKyAgIElmIHlvdSBhcmUgX2J1aWxkaW5nXyBjb21waWxlciB0b29scyBmb3IgY3Jvc3MtY29tcGlsaW5nLCB5b3Ugc2hvdWxkCit1c2UgdGhlIG9wdGlvbiBgLS10YXJnZXQ9VFlQRScgdG8gc2VsZWN0IHRoZSB0eXBlIG9mIHN5c3RlbSB0aGV5IHdpbGwKK3Byb2R1Y2UgY29kZSBmb3IuCisKKyAgIElmIHlvdSB3YW50IHRvIF91c2VfIGEgY3Jvc3MgY29tcGlsZXIsIHRoYXQgZ2VuZXJhdGVzIGNvZGUgZm9yIGEKK3BsYXRmb3JtIGRpZmZlcmVudCBmcm9tIHRoZSBidWlsZCBwbGF0Zm9ybSwgeW91IHNob3VsZCBzcGVjaWZ5IHRoZQorImhvc3QiIHBsYXRmb3JtIChpLmUuLCB0aGF0IG9uIHdoaWNoIHRoZSBnZW5lcmF0ZWQgcHJvZ3JhbXMgd2lsbAorZXZlbnR1YWxseSBiZSBydW4pIHdpdGggYC0taG9zdD1UWVBFJy4KKworU2hhcmluZyBEZWZhdWx0cworPT09PT09PT09PT09PT09PQorCisgICBJZiB5b3Ugd2FudCB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGBjb25maWd1cmUnIHNjcmlwdHMgdG8gc2hhcmUsCit5b3UgY2FuIGNyZWF0ZSBhIHNpdGUgc2hlbGwgc2NyaXB0IGNhbGxlZCBgY29uZmlnLnNpdGUnIHRoYXQgZ2l2ZXMKK2RlZmF1bHQgdmFsdWVzIGZvciB2YXJpYWJsZXMgbGlrZSBgQ0MnLCBgY2FjaGVfZmlsZScsIGFuZCBgcHJlZml4Jy4KK2Bjb25maWd1cmUnIGxvb2tzIGZvciBgUFJFRklYL3NoYXJlL2NvbmZpZy5zaXRlJyBpZiBpdCBleGlzdHMsIHRoZW4KK2BQUkVGSVgvZXRjL2NvbmZpZy5zaXRlJyBpZiBpdCBleGlzdHMuICBPciwgeW91IGNhbiBzZXQgdGhlCitgQ09ORklHX1NJVEUnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgc2l0ZSBzY3JpcHQuCitBIHdhcm5pbmc6IG5vdCBhbGwgYGNvbmZpZ3VyZScgc2NyaXB0cyBsb29rIGZvciBhIHNpdGUgc2NyaXB0LgorCitEZWZpbmluZyBWYXJpYWJsZXMKKz09PT09PT09PT09PT09PT09PQorCisgICBWYXJpYWJsZXMgbm90IGRlZmluZWQgaW4gYSBzaXRlIHNoZWxsIHNjcmlwdCBjYW4gYmUgc2V0IGluIHRoZQorZW52aXJvbm1lbnQgcGFzc2VkIHRvIGBjb25maWd1cmUnLiAgSG93ZXZlciwgc29tZSBwYWNrYWdlcyBtYXkgcnVuCitjb25maWd1cmUgYWdhaW4gZHVyaW5nIHRoZSBidWlsZCwgYW5kIHRoZSBjdXN0b21pemVkIHZhbHVlcyBvZiB0aGVzZQordmFyaWFibGVzIG1heSBiZSBsb3N0LiAgSW4gb3JkZXIgdG8gYXZvaWQgdGhpcyBwcm9ibGVtLCB5b3Ugc2hvdWxkIHNldAordGhlbSBpbiB0aGUgYGNvbmZpZ3VyZScgY29tbWFuZCBsaW5lLCB1c2luZyBgVkFSPXZhbHVlJy4gIEZvciBleGFtcGxlOgorCisgICAgIC4vY29uZmlndXJlIENDPS91c3IvbG9jYWwyL2Jpbi9nY2MKKworY2F1c2VzIHRoZSBzcGVjaWZpZWQgYGdjYycgdG8gYmUgdXNlZCBhcyB0aGUgQyBjb21waWxlciAodW5sZXNzIGl0IGlzCitvdmVycmlkZGVuIGluIHRoZSBzaXRlIHNoZWxsIHNjcmlwdCkuCisKK1VuZm9ydHVuYXRlbHksIHRoaXMgdGVjaG5pcXVlIGRvZXMgbm90IHdvcmsgZm9yIGBDT05GSUdfU0hFTEwnIGR1ZSB0bworYW4gQXV0b2NvbmYgYnVnLiAgVW50aWwgdGhlIGJ1ZyBpcyBmaXhlZCB5b3UgY2FuIHVzZSB0aGlzIHdvcmthcm91bmQ6CisKKyAgICAgQ09ORklHX1NIRUxMPS9iaW4vYmFzaCAvYmluL2Jhc2ggLi9jb25maWd1cmUgQ09ORklHX1NIRUxMPS9iaW4vYmFzaAorCitgY29uZmlndXJlJyBJbnZvY2F0aW9uCis9PT09PT09PT09PT09PT09PT09PT09CisKKyAgIGBjb25maWd1cmUnIHJlY29nbml6ZXMgdGhlIGZvbGxvd2luZyBvcHRpb25zIHRvIGNvbnRyb2wgaG93IGl0CitvcGVyYXRlcy4KKworYC0taGVscCcKK2AtaCcKKyAgICAgUHJpbnQgYSBzdW1tYXJ5IG9mIGFsbCBvZiB0aGUgb3B0aW9ucyB0byBgY29uZmlndXJlJywgYW5kIGV4aXQuCisKK2AtLWhlbHA9c2hvcnQnCitgLS1oZWxwPXJlY3Vyc2l2ZScKKyAgICAgUHJpbnQgYSBzdW1tYXJ5IG9mIHRoZSBvcHRpb25zIHVuaXF1ZSB0byB0aGlzIHBhY2thZ2UncworICAgICBgY29uZmlndXJlJywgYW5kIGV4aXQuICBUaGUgYHNob3J0JyB2YXJpYW50IGxpc3RzIG9wdGlvbnMgdXNlZAorICAgICBvbmx5IGluIHRoZSB0b3AgbGV2ZWwsIHdoaWxlIHRoZSBgcmVjdXJzaXZlJyB2YXJpYW50IGxpc3RzIG9wdGlvbnMKKyAgICAgYWxzbyBwcmVzZW50IGluIGFueSBuZXN0ZWQgcGFja2FnZXMuCisKK2AtLXZlcnNpb24nCitgLVYnCisgICAgIFByaW50IHRoZSB2ZXJzaW9uIG9mIEF1dG9jb25mIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGBjb25maWd1cmUnCisgICAgIHNjcmlwdCwgYW5kIGV4aXQuCisKK2AtLWNhY2hlLWZpbGU9RklMRScKKyAgICAgRW5hYmxlIHRoZSBjYWNoZTogdXNlIGFuZCBzYXZlIHRoZSByZXN1bHRzIG9mIHRoZSB0ZXN0cyBpbiBGSUxFLAorICAgICB0cmFkaXRpb25hbGx5IGBjb25maWcuY2FjaGUnLiAgRklMRSBkZWZhdWx0cyB0byBgL2Rldi9udWxsJyB0bworICAgICBkaXNhYmxlIGNhY2hpbmcuCisKK2AtLWNvbmZpZy1jYWNoZScKK2AtQycKKyAgICAgQWxpYXMgZm9yIGAtLWNhY2hlLWZpbGU9Y29uZmlnLmNhY2hlJy4KKworYC0tcXVpZXQnCitgLS1zaWxlbnQnCitgLXEnCisgICAgIERvIG5vdCBwcmludCBtZXNzYWdlcyBzYXlpbmcgd2hpY2ggY2hlY2tzIGFyZSBiZWluZyBtYWRlLiAgVG8KKyAgICAgc3VwcHJlc3MgYWxsIG5vcm1hbCBvdXRwdXQsIHJlZGlyZWN0IGl0IHRvIGAvZGV2L251bGwnIChhbnkgZXJyb3IKKyAgICAgbWVzc2FnZXMgd2lsbCBzdGlsbCBiZSBzaG93bikuCisKK2AtLXNyY2Rpcj1ESVInCisgICAgIExvb2sgZm9yIHRoZSBwYWNrYWdlJ3Mgc291cmNlIGNvZGUgaW4gZGlyZWN0b3J5IERJUi4gIFVzdWFsbHkKKyAgICAgYGNvbmZpZ3VyZScgY2FuIGRldGVybWluZSB0aGF0IGRpcmVjdG9yeSBhdXRvbWF0aWNhbGx5LgorCitgLS1wcmVmaXg9RElSJworICAgICBVc2UgRElSIGFzIHRoZSBpbnN0YWxsYXRpb24gcHJlZml4LiAgKm5vdGUgSW5zdGFsbGF0aW9uIE5hbWVzOjoKKyAgICAgZm9yIG1vcmUgZGV0YWlscywgaW5jbHVkaW5nIG90aGVyIG9wdGlvbnMgYXZhaWxhYmxlIGZvciBmaW5lLXR1bmluZworICAgICB0aGUgaW5zdGFsbGF0aW9uIGxvY2F0aW9ucy4KKworYC0tbm8tY3JlYXRlJworYC1uJworICAgICBSdW4gdGhlIGNvbmZpZ3VyZSBjaGVja3MsIGJ1dCBzdG9wIGJlZm9yZSBjcmVhdGluZyBhbnkgb3V0cHV0CisgICAgIGZpbGVzLgorCitgY29uZmlndXJlJyBhbHNvIGFjY2VwdHMgc29tZSBvdGhlciwgbm90IHdpZGVseSB1c2VmdWwsIG9wdGlvbnMuICBSdW4KK2Bjb25maWd1cmUgLS1oZWxwJyBmb3IgbW9yZSBkZXRhaWxzLgorCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvY29uZi9hdXRvY29uZi9hdXRvY29uZi5tNCBiL3NoYXJlL2F1dG9jb25mL2F1dG9jb25mL2F1dG9jb25mLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNDUzNzYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvY29uZi9hdXRvY29uZi9hdXRvY29uZi5tNApAQCAtMCwwICsxLDEwNCBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4gICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyBEcml2ZXIgdGhhdCBsb2FkcyB0aGUgQXV0b2NvbmYgbWFjcm8gZmlsZXMuCisjCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwOCwgMjAwOSBGcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlCisjIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorIyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorIyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uLAorIyB2ZXJzaW9uIDMuMCwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFuZCBhIGNvcHkgb2YgdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGVzIENPUFlJTkd2MyBhbmQgQ09QWUlORy5FWENFUFRJT04KKyMgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFdyaXR0ZW4gYnkgRGF2aWQgTWFjS2VuemllIGFuZCBtYW55IG90aGVycy4KKyMKKyMgRG8gbm90IHNpbmNsdWRlIGFjc2l0ZS5tNCBoZXJlLCBiZWNhdXNlIGl0IG1heSBub3QgYmUgaW5zdGFsbGVkCisjIHlldCB3aGVuIEF1dG9jb25mIGlzIGZyb3plbi4KKyMgRG8gbm90IHNpbmNsdWRlIC4vYWNsb2NhbC5tNCBoZXJlLCB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcgZnJvemVuLgorCisjIGdlbmVyYWwgaW5jbHVkZXMgc29tZSBBVV9ERUZVTi4KK200X2luY2x1ZGUoW2F1dG9jb25mL2F1dG91cGRhdGUubTRdKQorbTRfaW5jbHVkZShbYXV0b2NvbmYvYXV0b3NjYW4ubTRdKQorbTRfaW5jbHVkZShbYXV0b2NvbmYvZ2VuZXJhbC5tNF0pCittNF9pbmNsdWRlKFthdXRvY29uZi9zdGF0dXMubTRdKQorbTRfaW5jbHVkZShbYXV0b2NvbmYvYXV0b2hlYWRlci5tNF0pCittNF9pbmNsdWRlKFthdXRvY29uZi9hdXRvdGVzdC5tNF0pCittNF9pbmNsdWRlKFthdXRvY29uZi9wcm9ncmFtcy5tNF0pCittNF9pbmNsdWRlKFthdXRvY29uZi9sYW5nLm00XSkKK200X2luY2x1ZGUoW2F1dG9jb25mL2MubTRdKQorbTRfaW5jbHVkZShbYXV0b2NvbmYvZXJsYW5nLm00XSkKK200X2luY2x1ZGUoW2F1dG9jb25mL2ZvcnRyYW4ubTRdKQorbTRfaW5jbHVkZShbYXV0b2NvbmYvZnVuY3Rpb25zLm00XSkKK200X2luY2x1ZGUoW2F1dG9jb25mL2hlYWRlcnMubTRdKQorbTRfaW5jbHVkZShbYXV0b2NvbmYvdHlwZXMubTRdKQorbTRfaW5jbHVkZShbYXV0b2NvbmYvbGlicy5tNF0pCittNF9pbmNsdWRlKFthdXRvY29uZi9zcGVjaWZpYy5tNF0pCittNF9pbmNsdWRlKFthdXRvY29uZi9vbGRuYW1lcy5tNF0pCisKKyMgV2UgZGlzY291cmFnZSB0aGUgdXNlIG9mIHRoZSBub24gcHJlZml4ZWQgbWFjcm8gbmFtZXM6IE00c3VnYXIgbWFwcworIyBhbGwgdGhlIGJ1aWx0aW5zIGludG8gYG00XycuICBBdXRvY29uZiBoYXMgYmVlbiBjb252ZXJ0ZWQgdG8gdGhlc2UKKyMgbmFtZXMgdG9vLiAgQnV0IHVzZXJzIG1heSBzdGlsbCBkZXBlbmQgdXBvbiB0aGVzZSwgc28gcmVlc3RhYmxpc2gKKyMgdGhlbS4KKworIyBJbiBvcmRlciB0byBjb3B5IHB1c2hkZWYgc3RhY2tzLCBtNF9jb3B5IHRlbXBvcmFyaWx5IGRlc3Ryb3lzIHRoZQorIyBjdXJyZW50IHB1c2hkZWYgc3RhY2suICBCdXQgdGhlc2UgYnVpbHRpbnMgYXJlIHNvIHByaW1pdGl2ZSB0aGF0OgorIyAgIDEuIHRoZXkgc2hvdWxkIG5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgcHVzaGRlZiBkZWZpbml0aW9uCisjICAgMi4gdW5kZWZpbmluZyB0aGUgcHVzaGRlZiBzdGFjayB0byBjb3B5IGJyZWFrcyBtNF9jb3B5CisjIEhlbmNlLCB3ZSB0ZW1wb3JhcmlseSByZXN0b3JlIGEgc2ltcGxlciBtNF9jb3B5LgorCittNF9wdXNoZGVmKFttNF9jb3B5XSwgW200X2RlZmluZShbJDJdLCBtNF9kZWZuKFskMV0pKV0pCisKK200X2NvcHlfdW5tNChbbTRfYnVpbHRpbl0pCittNF9jb3B5X3VubTQoW200X2NoYW5nZXF1b3RlXSkKK200X2NvcHlfdW5tNChbbTRfZGVjcl0pCittNF9jb3B5X3VubTQoW200X2RlZmluZV0pCittNF9jb3B5X3VubTQoW200X2RlZm5dKQorbTRfY29weV91bm00KFttNF9kaXZlcnRdKQorbTRfY29weV91bm00KFttNF9kaXZudW1dKQorbTRfY29weV91bm00KFttNF9lcnJwcmludF0pCittNF9jb3B5X3VubTQoW200X2VzeXNjbWRdKQorbTRfY29weV91bm00KFttNF9pZmRlZl0pCittNF9jb3B5KFttNF9pZl0sIFtpZmVsc2VdKQorbTRfY29weV91bm00KFttNF9pbmNyXSkKK200X2NvcHlfdW5tNChbbTRfaW5kZXhdKQorbTRfY29weV91bm00KFttNF9pbmRpcl0pCittNF9jb3B5X3VubTQoW200X2xlbl0pCittNF9jb3B5KFttNF9icGF0c3Vic3RdLCBbcGF0c3Vic3RdKQorbTRfY29weV91bm00KFttNF9wb3BkZWZdKQorbTRfY29weV91bm00KFttNF9wdXNoZGVmXSkKK200X2NvcHkoW200X2JyZWdleHBdLCBbcmVnZXhwXSkKK200X2NvcHlfdW5tNChbbTRfc2luY2x1ZGVdKQorbTRfY29weV91bm00KFttNF9zeXNjbWRdKQorbTRfY29weV91bm00KFttNF9zeXN2YWxdKQorbTRfY29weV91bm00KFttNF90cmFjZW9mZl0pCittNF9jb3B5X3VubTQoW200X3RyYWNlb25dKQorbTRfY29weV91bm00KFttNF90cmFuc2xpdF0pCittNF9jb3B5X3VubTQoW200X3VuZGVmaW5lXSkKK200X2NvcHlfdW5tNChbbTRfdW5kaXZlcnRdKQorCittNF9wb3BkZWYoW200X2NvcHldKQorCisjIFlldCBzb21lIHBlb3BsZSBoYXZlIHN0YXJ0ZWQgdG8gdXNlIG00X3BhdHN1YnN0IGFuZCBtNF9yZWdleHAuCittNF9kZWZpbmUoW200X3BhdHN1YnN0XSwKK1ttNF9leHBhbmRfb25jZShbbTRfd2Fybihbc3ludGF4XSwKKwkJIFtkbyBub3QgdXNlIG00X3BhdHN1YnN0OiB1c2UgcGF0c3Vic3Qgb3IgbTRfYnBhdHN1YnN0XSldKWRubAorcGF0c3Vic3QoJEApXSkKKworbTRfZGVmaW5lKFttNF9yZWdleHBdLAorW200X2V4cGFuZF9vbmNlKFttNF93YXJuKFtzeW50YXhdLAorCQkgW2RvIG5vdCB1c2UgbTRfcmVnZXhwOiB1c2UgcmVnZXhwIG9yIG00X2JyZWdleHBdKV0pZG5sCityZWdleHAoJEApXSkKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9jb25mL2F1dG9jb25mL2F1dG9jb25mLm00ZiBiL3NoYXJlL2F1dG9jb25mL2F1dG9jb25mL2F1dG9jb25mLm00ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzdjYmE3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b2NvbmYubTRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9jb25mL2F1dG9jb25mL2F1dG9oZWFkZXIubTQgYi9zaGFyZS9hdXRvY29uZi9hdXRvY29uZi9hdXRvaGVhZGVyLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MzYyM2UKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvY29uZi9hdXRvY29uZi9hdXRvaGVhZGVyLm00CkBAIC0wLDAgKzEsNzggQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQXV0b2NvbmYuICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjIEludGVyZmFjZSB3aXRoIGF1dG9oZWFkZXIuCisKKyMgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLAorIyAyMDAyLCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEF1dG9jb25mLiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUKKyMgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisjIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisjIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgQXV0b2NvbmYgQ29uZmlndXJlIFNjcmlwdCBFeGNlcHRpb24sCisjIHZlcnNpb24gMy4wLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYW5kIGEgY29weSBvZiB0aGUgQXV0b2NvbmYgQ29uZmlndXJlIFNjcmlwdCBFeGNlcHRpb24gYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZXMgQ09QWUlOR3YzIGFuZCBDT1BZSU5HLkVYQ0VQVElPTgorIyByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgV3JpdHRlbiBieSBEYXZpZCBNYWNLZW56aWUsIHdpdGggaGVscCBmcm9tCisjIEZyYW5jLG9pcyBQaW5hcmQsIEthcmwgQmVycnksIFJpY2hhcmQgUGl4bGV5LCBJYW4gTGFuY2UgVGF5bG9yLAorIyBSb2xhbmQgTWNHcmF0aCwgTm9haCBGcmllZG1hbiwgZGF2aWQgZCB6dWhuLCBhbmQgbWFueSBvdGhlcnMuCisKKworIyBBSF9PVVRQVVQoS0VZLCBURVhUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQYXNzIFRFWFQgdG8gYXV0b2hlYWRlci4KKyMgVGhpcyBtYWNybyBpcyBgcmVhZCcgb25seSB2aWEgYGF1dG9jb25mIC0tdHJhY2UnLCBpdCBvdXRwdXRzIG5vdGhpbmcuCittNF9kZWZpbmUoW0FIX09VVFBVVF0sIFtdKQorCisKKyMgQUhfVkVSQkFUSU0oS0VZLCBURU1QTEFURSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSWYgS0VZIGlzIGRpcmVjdCAoaS5lLiwgbm8gaW5kaXJlY3Rpb24gc3VjaCBhcyBpbiBLRVk9JG15X2Z1bmMgd2hpY2gKKyMgbWF5IG9jY3VyIGlmIHRoZXJlIGlzIEFDX0NIRUNLX0ZVTkNTKCRteV9mdW5jKSksIGlzc3VlIGFuIGF1dG9oZWFkZXIKKyMgVEVNUExBVEUgYXNzb2NpYXRlZCB0byB0aGUgS0VZLiAgT3RoZXJ3aXNlLCBkbyBub3RoaW5nLiAgVEVNUExBVEUgaXMKKyMgb3V0cHV0IGFzIGlzLCB3aXRoIG5vIGZvcm1hdHRpbmcuCisjCisjIFF1b3RlIGZvciBQZXJsICcnIHN0cmluZ3MsIHdoaWNoIGFyZSB0aG9zZSB1c2VkIGJ5IEF1dG9oZWFkZXIuCittNF9kZWZpbmUoW0FIX1ZFUkJBVElNXSwKK1tBU19MSVRFUkFMX0lGKFskMV0sCisJICAgICAgIFtBSF9PVVRQVVQoX200X2V4cGFuZChbJDFdKSwgQVNfRVNDQVBFKFtbJDJdXSwgW1wnXSkpXSldKQorCisKKyMgQUhfVEVNUExBVEUoS0VZLCBERVNDUklQVElPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSXNzdWUgYW4gYXV0b2hlYWRlciB0ZW1wbGF0ZSBmb3IgS0VZLCBpLmUuLCBhIGNvbW1lbnQgY29tcG9zZWQgb2YKKyMgREVTQ1JJUFRJT04gKHByb3Blcmx5IHdyYXBwZWQpLCBhbmQgdGhlbiAjdW5kZWYgS0VZLgorbTRfZGVmaW5lKFtBSF9URU1QTEFURV0sCitbQUhfVkVSQkFUSU0oWyQxXSwKKwkgICAgIG00X3RleHRfd3JhcChbJDIgKi9dLCBbICAgXSwgWy8qIF0pWworQCU6QHVuZGVmIF1fbTRfZXhwYW5kKFskMV0pKV0pCisKKworIyBBSF9UT1AoVEVYVCkKKyMgLS0tLS0tLS0tLS0tCisjIE91dHB1dCBURVhUIGF0IHRoZSB0b3Agb2YgYGNvbmZpZy5oLmluJy4KK200X2RlZmluZShbQUhfVE9QXSwKK1ttNF9kZWZpbmUoW19BSF9DT1VOVEVSXSwgbTRfaW5jcihfQUhfQ09VTlRFUikpZG5sCitBSF9WRVJCQVRJTShbMDAwMF1fQUhfQ09VTlRFUiwgWyQxXSldKQorCisKKyMgQUhfQk9UVE9NKFRFWFQpCisjIC0tLS0tLS0tLS0tLS0tLQorIyBPdXRwdXQgVEVYVCBhdCB0aGUgYm90dG9tIG9mIGBjb25maWcuaC5pbicuCittNF9kZWZpbmUoW0FIX0JPVFRPTV0sCitbbTRfZGVmaW5lKFtfQUhfQ09VTlRFUl0sIG00X2luY3IoX0FIX0NPVU5URVIpKWRubAorQUhfVkVSQkFUSU0oW3p6enpdX0FIX0NPVU5URVIsIFskMV0pXSkKKworIyBJbml0aWFsaXplLgorbTRfZGVmaW5lKFtfQUhfQ09VTlRFUl0sIFswXSkKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9jb25mL2F1dG9jb25mL2F1dG9zY2FuLm00IGIvc2hhcmUvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3NjYW4ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE1YmM4MQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9jb25mL2F1dG9jb25mL2F1dG9zY2FuLm00CkBAIC0wLDAgKzEsNTAgQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQXV0b2NvbmYuICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjIEludGVyZmFjZSB3aXRoIGF1dG9zY2FuLgorCisjIENvcHlyaWdodCAoQykgMjAwMiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlCisjIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorIyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorIyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uLAorIyB2ZXJzaW9uIDMuMCwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFuZCBhIGNvcHkgb2YgdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGVzIENPUFlJTkd2MyBhbmQgQ09QWUlORy5FWENFUFRJT04KKyMgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFdyaXR0ZW4gYnkgQWtpbSBEZW1haWxsZS4KKworIyBUaGUgcHJlZml4IGBBTicgaXMgY2hvc2VuIGFmdGVyIGBBdXRvc2NhTicuCisKKyMgQU5fT1VUUFVUKEtJTkQsIFdPUkQsIE1BQ1JPUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVjbGFyZSB0aGF0IHRoZSBXT1JELCB1c2VkIGFzIGEgS0lORCwgcmVxdWlyZXMgdHJpZ2dlcmluZyB0aGUgTUFDUk9TLgorbTRfZGVmaW5lKFtBTl9PVVRQVVRdLCBbXSkKKworCisjIEFOX0ZVTkNUSU9OKE5BTUUsIE1BQ1JPUykKKyMgQU5fSEVBREVSKE5BTUUsIE1BQ1JPUykKKyMgQU5fSURFTlRJRklFUihOQU1FLCBNQUNST1MpCisjIEFOX0xJQlJBUlkoTkFNRSwgTUFDUk9TKQorIyBBTl9NQUtFVkFSKE5BTUUsIE1BQ1JPUykKKyMgQU5fUFJPR1JBTShOQU1FLCBNQUNST1MpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZiB0aGUgRlVOQ1RJT04vSEVBREVSIGV0Yy4gaXMgdXNlZCBpbiB0aGUgcGFja2FnZSwgdGhlbiB0aGUgTUFDUk9TCisjIHNob3VsZCBiZSBpbnZva2VkIGZyb20gY29uZmlndXJlLmFjLgorbTRfZGVmaW5lKFtBTl9GVU5DVElPTl0sICAgW0FOX09VVFBVVChbZnVuY3Rpb25dLCAkQCldKQorbTRfZGVmaW5lKFtBTl9IRUFERVJdLCAgICAgW0FOX09VVFBVVChbaGVhZGVyXSwgJEApXSkKK200X2RlZmluZShbQU5fSURFTlRJRklFUl0sIFtBTl9PVVRQVVQoW2lkZW50aWZpZXJdLCAkQCldKQorbTRfZGVmaW5lKFtBTl9MSUJSQVJZXSwgICAgW0FOX09VVFBVVChbbGlicmFyeV0sICRAKV0pCittNF9kZWZpbmUoW0FOX01BS0VWQVJdLCAgICBbQU5fT1VUUFVUKFttYWtldmFyXSwgJEApXSkKK200X2RlZmluZShbQU5fUFJPR1JBTV0sICAgIFtBTl9PVVRQVVQoW3Byb2dyYW1dLCAkQCldKQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3Rlc3QubTQgYi9zaGFyZS9hdXRvY29uZi9hdXRvY29uZi9hdXRvdGVzdC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWFmYzViCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3Rlc3QubTQKQEAgLTAsMCArMSw3NyBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4gICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMgSW50ZXJmYWNlIHdpdGggQXV0b3Rlc3QuCisjIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKyMgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlCisjIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorIyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorIyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uLAorIyB2ZXJzaW9uIDMuMCwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFuZCBhIGNvcHkgb2YgdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGVzIENPUFlJTkd2MyBhbmQgQ09QWUlORy5FWENFUFRJT04KKyMgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFdyaXR0ZW4gYnkgRGF2aWQgTWFjS2VuemllLCB3aXRoIGhlbHAgZnJvbQorIyBGcmFuYyxvaXMgUGluYXJkLCBLYXJsIEJlcnJ5LCBSaWNoYXJkIFBpeGxleSwgSWFuIExhbmNlIFRheWxvciwKKyMgUm9sYW5kIE1jR3JhdGgsIE5vYWggRnJpZWRtYW4sIGRhdmlkIGQgenVobiwgYW5kIG1hbnkgb3RoZXJzLgorCisKKyMgQUNfQ09ORklHX1RFU1RESVIoVEVTVC1ESVJFQ1RPUlksIFtBVVRPVEVTVC1QQVRIID0gVEVTVC1ESVJFQ1RPUlldKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyZSBhbiBBdXRvdGVzdCB0ZXN0IHN1aXRlIGRpcmVjdG9yeS4gIEludm9rZSBpdCBvbmNlIHBlciBkaXIsCisjIGV2ZW4gaWYgdGhlcmUgYXJlIHNldmVyYWwgdGVzdCBzdWl0ZXMgaW4gdGhlcmUuCisjCisjIEFVVE9URVNULVBBVEggbXVzdCBoZWxwIHRoZSB0ZXN0IHN1aXRlIHRvIGZpbmQgdGhlIGV4ZWN1dGFibGVzLgorIyBJdCBpcyByZWxhdGl2ZSB0byB0aGUgdG9wIGxldmVsIG9mIHRoZSBwYWNrYWdlLCBhbmQgaXMgZXhwYW5kZWQKKyMgaW50byBhbGwgdGhlIGJ1aWxkIGRpcnMgb2YgQVVUT1RFU1QtUEFUSCwgdGhlbiBhbGwgdGhlIHNyYyBkaXJzLgorIworIyBEbyBub3QgdXNlIF9BQ0VPRiBhcyB3ZSBhcmUgYmVpbmcgZHVtcGVkIGludG8gY29uZmlnLnN0YXR1cyB2aWEKKyMgYW4gX0FDRU9GLWhlcmVkb2MuCitBQ19ERUZVTihbQUNfQ09ORklHX1RFU1RESVJdLAorW0FDX0NPTkZJR19DT01NQU5EUyhbJDEvYXRjb25maWddLAorW2NhdCA+JDEvYXRjb25maWcgPDxBVEVPRgorQCU6QCBDb25maWd1cmFibGUgdmFyaWFibGUgdmFsdWVzIGZvciBidWlsZGluZyB0ZXN0IHN1aXRlcy4KK0AlOkAgR2VuZXJhdGVkIGJ5ICRbMF0uCitAJTpAIENvcHlyaWdodCAoQykgbTRfUEFDS0FHRV9ZRUFSIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoZSB0ZXN0IHN1aXRlIHdpbGwgZGVmaW5lIHRvcF9zcmNkaXI9JGF0X3RvcF9zcmNkaXIvLi4vLi4gZXRjLgorYXRfdGVzdGRpcj0nJDEnCithYnNfYnVpbGRkaXI9JyRhY19hYnNfYnVpbGRkaXInCithdF9zcmNkaXI9JyRhY19zcmNkaXInCithYnNfc3JjZGlyPSckYWNfYWJzX3NyY2RpcicKK2F0X3RvcF9zcmNkaXI9JyRhY190b3Bfc3JjZGlyJworYWJzX3RvcF9zcmNkaXI9JyRhY19hYnNfdG9wX3NyY2RpcicKK2F0X3RvcF9idWlsZF9wcmVmaXg9JyRhY190b3BfYnVpbGRfcHJlZml4JworYWJzX3RvcF9idWlsZGRpcj0nJGFjX2Fic190b3BfYnVpbGRkaXInCisKKyMgQmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIEF1dG90ZXN0IDw9IDIuNTliOgorYXRfdG9wX2J1aWxkZGlyPVwkYXRfdG9wX2J1aWxkX3ByZWZpeAorCitBVVRPVEVTVF9QQVRIPSdtNF9kZWZhdWx0KFskMl0sIFskMV0pJworCitTSEVMTD1cJHtDT05GSUdfU0hFTEwtJyRTSEVMTCd9CittNF9wcm92aWRlX2lmKFtBQ19FUkxBTkdfUEFUSF9FUkxdLCBbCitFUkw9JyRFUkwnCitdKWRubAorbTRfcHJvdmlkZV9pZihbQUNfRVJMQU5HX1BBVEhfRVJMQ10sIFsKK0VSTEM9JyRFUkxDJworRVJMQ0ZMQUdTPSckRVJMQ0ZMQUdTJworXSlkbmwKK0FURU9GCitdLAorW200X3Byb3ZpZGVfaWYoW0FDX0VSTEFOR19QQVRIX0VSTF0sIFtFUkw9IiRFUkwiCitdKW00X3Byb3ZpZGVfaWYoW0FDX0VSTEFOR19QQVRIX0VSTENdLCBbRVJMQz0iJEVSTEMiCitFUkxDRkxBR1M9IiRFUkxDRkxBR1MiCitdKV0pXSkjIEFDX0NPTkZJR19URVNURElSCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvY29uZi9hdXRvY29uZi9hdXRvdXBkYXRlLm00IGIvc2hhcmUvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3VwZGF0ZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDdhNWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3VwZGF0ZS5tNApAQCAtMCwwICsxLDEwOCBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4gICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMgSW50ZXJmYWNlIHdpdGggYXV0b3VwZGF0ZS4KKworIyBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisjIDIwMDMsIDIwMDQsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQXV0b2NvbmYuICBUaGlzIHByb2dyYW0gaXMgZnJlZQorIyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKyMgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKyMgcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBBdXRvY29uZiBDb25maWd1cmUgU2NyaXB0IEV4Y2VwdGlvbiwKKyMgdmVyc2lvbiAzLjAsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbmQgYSBjb3B5IG9mIHRoZSBBdXRvY29uZiBDb25maWd1cmUgU2NyaXB0IEV4Y2VwdGlvbiBhbG9uZyB3aXRoCisjIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlcyBDT1BZSU5HdjMgYW5kIENPUFlJTkcuRVhDRVBUSU9OCisjIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBXcml0dGVuIGJ5IERhdmlkIE1hY0tlbnppZSwgd2l0aCBoZWxwIGZyb20KKyMgRnJhbmMsb2lzIFBpbmFyZCwgS2FybCBCZXJyeSwgUmljaGFyZCBQaXhsZXksIElhbiBMYW5jZSBUYXlsb3IsCisjIFJvbGFuZCBNY0dyYXRoLCBOb2FoIEZyaWVkbWFuLCBkYXZpZCBkIHp1aG4sIGFuZCBtYW55IG90aGVycy4KKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNYWNyb3MgdG8gZGVmaW5lIG9ic29sZXRlIG1hY3Jvcy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBBVV9ERUZJTkUoTkFNRSwgQ09ERSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSB0aGUgbWFjcm8gTkFNRSBzbyB0aGF0IGl0IGV4cGFuZCB0byBDT0RFIG9ubHkgd2hlbgorIyBhdXRvdXBkYXRlIGlzIHJ1bm5pbmcuICBUaGlzIGlzIGFjaGlldmVkIHdpdGggdHJhY2VzIGluCisjIGF1dG91cGRhdGUgaXRzZWxmLCBzbyB0aGlzIG1hY3JvIGV4cGFuZHMgdG8gbm90aGluZy4KKyMKK200X2RlZmluZShbQVVfREVGSU5FXSwgW10pCisKKyMgQVVfREVGVU4oTkFNRSwgTkVXLUNPREUsIFtNRVNTQUdFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVjbGFyZSB0aGF0IHRoZSBtYWNybyBOQU1FIGlzIG5vdyBvYnNvbGV0ZWQsIGFuZCBzaG91bGQgYmUgcmVwbGFjZWQKKyMgYnkgTkVXLUNPREUuICBUZWxsIHRoZSB1c2VyIHNoZSBzaG91bGQgcnVuIGF1dG91cGRhdGUsIGFuZCB3aGVuCisjIGF1dG91cGRhdGUgaXMgcnVuLCBlbWl0IE1FU1NBR0UgYXMgYSB3YXJuaW5nIGFuZCBpbmNsdWRlIGl0IGluCisjIHRoZSB1cGRhdGVkIGNvbmZpZ3VyZS5hYyBmaWxlLgorIworIyBBbHNvIGRlZmluZSBOQU1FIGFzIGEgbWFjcm8gd2hpY2ggY29kZSBpcyBORVctQ09ERS4KKyMKKyMgVGhpcyBhbGxvd3Mgc2hhcmluZyB0aGUgc2FtZSBjb2RlIGZvciBib3RoIHN1cHBvcnRpbmcgb2Jzb2xldGVkIG1hY3JvcywKKyMgYW5kIHRvIHVwZGF0ZSBhIGNvbmZpZ3VyZS5hYy4KKyMgU2VlIHRoZSBlbmQgb2YgYGF1dG91cGRhdGUuaW4nIGZvciBhIGxvbmdlciBkZXNjcmlwdGlvbi4KK200X2RlZmluZShbQVVfREVGVU5dLAorWyMgVGhpcyBpcyB3aGF0IGF1dG91cGRhdGUncyBtNCBydW4gd2lsbCBleHBhbmQuICBJdCBmaXJlcworIyB0aGUgd2FybmluZyAod2l0aCBfYXVfd2Fybl9YWFgpLCBvdXRwdXRzIGl0IGludG8gdGhlCisjIHVwZGF0ZWQgY29uZmlndXJlLmFjICh3aXRoIEFDX0RJQUdOT1NFKSwgYW5kIHRoZW4gb3V0cHV0cworIyB0aGUgcmVwbGFjZW1lbnQgZXhwYW5zaW9uLgorQVVfREVGSU5FKFskMV0sCitbbTRfaWZ2YWwoWyQzXSwgW19hdV93YXJuXyQxKFskM10pQUNfRElBR05PU0UoW29ic29sZXRlXSwgWyQzXSlkW11ubAorXSlkbmwKKyQyXSkKKworIyBUaGlzIGlzIGFuIGF1eGlsaWFyeSBtYWNybyB0aGF0IGlzIGFsc28gcnVuIHdoZW4KKyMgYXV0b3VwZGF0ZSBydW5zIG00LiAgSXQgc2ltcGx5IGNhbGxzIG00X3dhcm5pbmcsIGJ1dAorIyB3ZSBuZWVkIGEgd3JhcHBlciBzbyB0aGF0IGVhY2ggd2FybmluZyBpcyBlbWl0dGVkIG9ubHkKKyMgb25jZS4gIFdlIGJyZWFrIHRoZSBxdW90aW5nIGluIG00X3dhcm5pbmcncyBhcmd1bWVudCBpbgorIyBvcmRlciB0byBleHBhbmQgdGhpcyBtYWNybydzIGFyZ3VtZW50cywgbm90IEFVX0RFRlVOJ3MuCitBVV9ERUZJTkUoW19hdV93YXJuXyQxXSwKK1ttNF93YXJuaW5nKCRdW0ApZG5sCittNF9kZWZpbmUoW19hdV93YXJuXyQxXSwgW10pXSkKKworIyBGaW5hbGx5LCB0aGlzIGlzIHRoZSBleHBhbnNpb24gdGhhdCBpcyBwaWNrZWQgdXAgYnkKKyMgYXV0b2NvbmYuICBJdCB0ZWxscyB0aGUgdXNlciB0byBydW4gYXV0b3VwZGF0ZSwgYW5kCisjIHRoZW4gb3V0cHV0cyB0aGUgcmVwbGFjZW1lbnQgZXhwYW5zaW9uLiAgV2UgZG8gbm90IGNhcmUKKyMgYWJvdXQgYXV0b3VwZGF0ZSdzIHdhcm5pbmcgYmVjYXVzZSB0aGF0IGNvbnRhaW5zCisjIGluZm9ybWF0aW9uIG9uIHdoYXQgdG8gZG8gKmFmdGVyKiBydW5uaW5nIGF1dG91cGRhdGUuCitBQ19ERUZVTihbJDFdLAorCSBbQUNfRElBR05PU0UoW29ic29sZXRlXSwgW1RoZSBtYWNybyBgJDEnIGlzIG9ic29sZXRlLgorWW91IHNob3VsZCBydW4gYXV0b3VwZGF0ZS5dKWRubAorJDJdKV0pCisKKworIyBBVV9BTElBUyhPTEQtTkFNRSwgTkVXLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhlIE9MRC1OQU1FIGlzIG5vIGxvbmdlciB1c2VkLCBqdXN0IHVzZSBORVctTkFNRSBpbnN0ZWFkLiAgVGhlcmUgaXMKKyMgbGl0dGxlIGRpZmZlcmVuY2Ugd2l0aCB1c2luZyBBVV9ERUZVTiBidXQgdGhlIGZhY3QgdGhlcmUgaXMgbGl0dGxlCisjIGludGVyZXN0IGluIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUgb24gYm90aCBPTEQtTkFNRSBhbmQgTkVXLU5BTUUuCisjIFRoaXMgbWFjcm8gbWFrZXMgaXQgcG9zc2libGUgdG8gZGlzdGluZ3Vpc2ggc3VjaCBjYXNlcy4KKyMKKyMgRG8gbm90IHVzZSBgZGVmbicgc2luY2UgdGhlbiBhdXRvdXBkYXRlIHdvdWxkIHJlcGxhY2UgYW4gb2xkIG1hY3JvCisjIGNhbGwgd2l0aCB0aGUgbmV3IG1hY3JvIGJvZHkgaW5zdGVhZCBvZiB0aGUgbmV3IG1hY3JvIGNhbGwuCisjCisjIE1vcmVvdmVyLCB3ZSBoYXZlIHRvIHRha2UgY2FyZSB0aGF0IGNhbGxzIHdpdGhvdXQgcGFyYW1ldGVycyBhcmUKKyMgZXhwYW5kZWQgdG8gY2FsbHMgd2l0aG91dCBwYXJhbWV0ZXJzLCBub3Qgd2l0aCBvbmUgZW1wdHkgcGFyYW1ldGVyLgorIyBUaGlzIGlzIG5vdCBvbmx5IGFuIGFlc3RoZXRpY2FsIGltcHJvdmVtZW50IG9mIGF1dG91cGRhdGUsIGl0IGFsc28KKyMgbWF0dGVycyB3aXRoIHBvb3JseSB3cml0dGVuIG1hY3JvcyB3aGljaCB0ZXN0IGZvciAkIyA9IDAuCisjCittNF9kZWZpbmUoW0FVX0FMSUFTXSwKK1tBVV9ERUZVTihbJDFdLCBfQVVfQUxJQVNfQk9EWShbJF0sIFskMl0pKV0pCisKKyMgVGhlIGJvZHkgZm9yIHRoZSBBVV9ERUZVTiBhYm92ZSBzaG91bGQgbG9vayBsaWtlOgorIwlbbTRfaWYoJCMsIDAsIFtORVctTkFNRV0sIFtORVctTkFNRSgkQCldKV0KKyMgVGh1cyB0aGUgaGVscGVyIG1hY3JvIGlzOgorbTRfZGVmaW5lKFtfQVVfQUxJQVNfQk9EWV0sIFtbbTRfaWYoJDEjLCAwLCBbJDJdLCBbJDIoJDFAKV0pXV0pCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvY29uZi9hdXRvY29uZi9jLm00IGIvc2hhcmUvYXV0b2NvbmYvYXV0b2NvbmYvYy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjBjOGI2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b2NvbmYvYXV0b2NvbmYvYy5tNApAQCAtMCwwICsxLDIwMTEgQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQXV0b2NvbmYuCQkJLSotIEF1dG9jb25mIC0qLQorIyBQcm9ncmFtbWluZyBsYW5ndWFnZXMgc3VwcG9ydC4KKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5CisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEF1dG9jb25mLiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUKKyMgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisjIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisjIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgQXV0b2NvbmYgQ29uZmlndXJlIFNjcmlwdCBFeGNlcHRpb24sCisjIHZlcnNpb24gMy4wLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYW5kIGEgY29weSBvZiB0aGUgQXV0b2NvbmYgQ29uZmlndXJlIFNjcmlwdCBFeGNlcHRpb24gYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZXMgQ09QWUlOR3YzIGFuZCBDT1BZSU5HLkVYQ0VQVElPTgorIyByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgV3JpdHRlbiBieSBEYXZpZCBNYWNLZW56aWUsIHdpdGggaGVscCBmcm9tCisjIEFraW0gRGVtYWlsbGUsIFBhdWwgRWdnZXJ0LAorIyBGcmFuYyxvaXMgUGluYXJkLCBLYXJsIEJlcnJ5LCBSaWNoYXJkIFBpeGxleSwgSWFuIExhbmNlIFRheWxvciwKKyMgUm9sYW5kIE1jR3JhdGgsIE5vYWggRnJpZWRtYW4sIGRhdmlkIGQgenVobiwgYW5kIG1hbnkgb3RoZXJzLgorCisKKyMgVGFibGUgb2YgQ29udGVudHM6CisjCisjIDEuIExhbmd1YWdlIHNlbGVjdGlvbgorIyAyLiBhbmQgcm91dGluZXMgdG8gcHJvZHVjZSBwcm9ncmFtcyBpbiBhIGdpdmVuIGxhbmd1YWdlLgorIyAgICAgIDFhLiBDICAgMmEuIEMKKyMgICAgICAxYi4gQysrCisjICAgICAgMWMuIE9iamVjdGl2ZSBDCisjICAgICAgMWQuIE9iamVjdGl2ZSBDKysKKyMKKyMgMy4gTG9va2luZyBmb3IgYSBjb21waWxlcgorIyAgICBBbmQgcG9zc2libHkgdGhlIGFzc29jaWF0ZWQgcHJlcHJvY2Vzc29yLgorIyAgICAgIDNhLiBDICAgM2IuIEMrKyAgIDNjLiBPYmplY3RpdmUgQyAgIDNkLiBPYmplY3RpdmUgQysrCisjCisjIDQuIENvbXBpbGVycycgY2hhcmFjdGVyaXN0aWNzLgorIyAgICAgIDRhLiBDCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgMWEvMmEuIFRoZSBDIGxhbmd1YWdlLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworIyAxYS4gTGFuZ3VhZ2Ugc2VsZWN0aW9uLiAgIworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworCisjIEFDX0xBTkcoQykKKyMgLS0tLS0tLS0tLQorIyBDRkxBR1MgaXMgbm90IGluIGFjX2NwcCBiZWNhdXNlIC1nLCAtTywgZXRjLiBhcmUgbm90IHZhbGlkIGNwcCBvcHRpb25zLgorQUNfTEFOR19ERUZJTkUoW0NdLCBbY10sIFtDXSwgW0NDXSwgW10sCitbYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JkFTX01FU1NBR0VfTE9HX0ZEJworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mQVNfTUVTU0FHRV9MT0dfRkQnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CitdKQorCisKKyMgQUNfTEFOR19DCisjIC0tLS0tLS0tLQorQVVfREVGVU4oW0FDX0xBTkdfQ10sIFtBQ19MQU5HKEMpXSkKKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisjIDJhLiBQcm9kdWNpbmcgcHJvZ3JhbXMuICAjCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisKKworIyBBQ19MQU5HX0NPTkZURVNUKEMpKEJPRFkpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFdlIGNhbid0IHVzZSAnI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIicgaGVyZSwgc2luY2UKKyMgU3VuIGM4OSAoU3VuIFdvcmtTaG9wIDYgdXBkYXRlIDIgQyA1LjMgUGF0Y2ggMTExNjc5LTA4IDIwMDIvMDUvMDkpCisjIHJlamVjdHMgJExJTkVOTyBncmVhdGVyIHRoYW4gMzI3NjcsIGFuZCBzb21lIGNvbmZpZ3VyZSBzY3JpcHRzCisjIGFyZSBsb25nZXIgdGhhbiAzMjc2NyBsaW5lcy4KK200X2RlZmluZShbQUNfTEFOR19DT05GVEVTVChDKV0sCitbY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDEKK19BQ0VPRl0pCisKKworIyBBQ19MQU5HX1BST0dSQU0oQykoW1BST0xPR1VFXSwgW0JPRFldKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtBQ19MQU5HX1BST0dSQU0oQyldLAorWyQxCittNF9pZmRlZihbX0FDX0xBTkdfUFJPR1JBTV9DX0Y3N19IT09LU10sIFtfQUNfTEFOR19QUk9HUkFNX0NfRjc3X0hPT0tTXSlbXWRubAorbTRfaWZkZWYoW19BQ19MQU5HX1BST0dSQU1fQ19GQ19IT09LU10sIFtfQUNfTEFOR19QUk9HUkFNX0NfRkNfSE9PS1NdKVtdZG5sCitpbnQKK21haW4gKCkKK3sKK2RubCBEbyAqbm90KiBpbmRlbnQgdGhlIGZvbGxvd2luZyBsaW5lOiB0aGVyZSBtYXkgYmUgQ1BQIGRpcmVjdGl2ZXMuCitkbmwgRG9uJ3QgbW92ZSB0aGUgYDsnIHJpZ2h0IGFmdGVyIGZvciB0aGUgc2FtZSByZWFzb24uCiskMgorICA7CisgIHJldHVybiAwOworfV0pCisKKworIyBfQUNfTEFOR19JT19QUk9HUkFNKEMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBzb3VyY2UgdGhhdCBwZXJmb3JtcyBJL08sIG5lY2Vzc2FyeSBmb3IgcHJvcGVyCisjIGNyb3NzLWNvbXBpbGVyIGRldGVjdGlvbi4KK200X2RlZmluZShbX0FDX0xBTkdfSU9fUFJPR1JBTShDKV0sCitbQUNfTEFOR19QUk9HUkFNKFtAJTpAaW5jbHVkZSA8c3RkaW8uaD5dLAorW0ZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0Lm91dCIsICJ3Iik7CisgcmV0dXJuIGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwOworXSldKQorCisKKyMgQUNfTEFOR19DQUxMKEMpKFBST0xPR1VFLCBGVU5DVElPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXZvaWQgY29uZmxpY3RpbmcgZGVjbCBvZiBtYWluLgorbTRfZGVmaW5lKFtBQ19MQU5HX0NBTEwoQyldLAorW0FDX0xBTkdfUFJPR1JBTShbJDEKK200X2lmKFskMl0sIFttYWluXSwgLAorWy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgJDIgKCk7XSldLCBbcmV0dXJuICQyICgpO10pXSkKKworCisjIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShDKShGVU5DVElPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEb24ndCBpbmNsdWRlIDxjdHlwZS5oPiBiZWNhdXNlIG9uIE9TRi8xIDMuMCBpdCBpbmNsdWRlcworIyA8c3lzL3R5cGVzLmg+IHdoaWNoIGluY2x1ZGVzIDxzeXMvc2VsZWN0Lmg+IHdoaWNoIGNvbnRhaW5zIGEKKyMgcHJvdG90eXBlIGZvciBzZWxlY3QuICBTaW1pbGFybHkgZm9yIGJ6ZXJvLgorIworIyBUaGlzIHRlc3QgdXNlZCB0byBtZXJlbHkgYXNzaWduIGY9JDEgaW4gbWFpbigpLCBidXQgdGhhdCB3YXMKKyMgb3B0aW1pemVkIGF3YXkgYnkgSFAgdW5idW5kbGVkIGNjIEEuMDUuMzYgZm9yIGlhNjQgdW5kZXIgK08zLAorIyBwcmVzdW1hYmx5IG9uIHRoZSBiYXNpcyB0aGF0IHRoZXJlJ3Mgbm8gbmVlZCB0byBkbyB0aGF0IHN0b3JlIGlmIHRoZQorIyBwcm9ncmFtIGlzIGFib3V0IHRvIGV4aXQuICBDb252ZXJzZWx5LCB0aGUgQUlYIGxpbmtlciBvcHRpbWl6ZXMgYW4KKyMgdW51c2VkIGV4dGVybmFsIGRlY2xhcmF0aW9uIHRoYXQgaW5pdGlhbGl6ZXMgZj0kMS4gIFNvIHRoaXMgdGVzdAorIyBwcm9ncmFtIGhhcyBib3RoIGFuIGV4dGVybmFsIGluaXRpYWxpemF0aW9uIG9mIGYsIGFuZCBhIHVzZSBvZiBmIGluCisjIG1haW4gdGhhdCBhZmZlY3RzIHRoZSBleGl0IHN0YXR1cy4KKyMKK200X2RlZmluZShbQUNfTEFOR19GVU5DX0xJTktfVFJZKEMpXSwKK1tBQ19MQU5HX1BST0dSQU0oCitbLyogRGVmaW5lICQxIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJDEuCisgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKyNkZWZpbmUgJDEgaW5ub2N1b3VzXyQxCisKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICQxICgpOyBiZWxvdy4KKyAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKworI3VuZGVmICQxCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgJDEgKCk7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIF9fc3R1Yl8kMSB8fCBkZWZpbmVkIF9fc3R1Yl9fXyQxCitjaG9rZSBtZQorI2VuZGlmCitdLCBbcmV0dXJuICQxICgpO10pXSkKKworCisjIEFDX0xBTkdfQk9PTF9DT01QSUxFX1RSWShDKShQUk9MT0dVRSwgRVhQUkVTU0lPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZXR1cm4gYSBwcm9ncmFtIHRoYXQgaXMgdmFsaWQgaWYgRVhQUkVTU0lPTiBpcyBub256ZXJvLgorIyBFWFBSRVNTSU9OIG11c3QgYmUgYW4gaW50ZWdlciBjb25zdGFudCBleHByZXNzaW9uLgorIyBCZSBzdXJlIHRvIHVzZSB0aGlzIGFycmF5IHRvIGF2b2lkIGB1bnVzZWQnIHdhcm5pbmdzLCB3aGljaCBhcmUgZXZlbgorIyBlcnJvcnMgd2l0aCBgLVcgZXJyb3InLgorbTRfZGVmaW5lKFtBQ19MQU5HX0JPT0xfQ09NUElMRV9UUlkoQyldLAorW0FDX0xBTkdfUFJPR1JBTShbJDFdLCBbc3RhdGljIGludCB0ZXN0X2FycmF5IEA8OkAxIC0gMiAqICEoJDIpQDo+QDsKK3Rlc3RfYXJyYXkgQDw6QDBAOj5AID0gMAorXSldKQorCisKKyMgQUNfTEFOR19JTlRfU0FWRShDKShQUk9MT0dVRSwgRVhQUkVTU0lPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgV2UgbmVlZCBgc3RkaW8uaCcgdG8gb3BlbiBhIGBGSUxFJyBhbmQgYHN0ZGxpYi5oJyBmb3IgYGV4aXQnLgorIyBCdXQgd2UgaW5jbHVkZSB0aGVtIG9ubHkgYWZ0ZXIgdGhlIEVYUFJFU1NJT04gaGFzIGJlZW4gZXZhbHVhdGVkLgorbTRfZGVmaW5lKFtBQ19MQU5HX0lOVF9TQVZFKEMpXSwKK1tBQ19MQU5HX1BST0dSQU0oWyQxCitzdGF0aWMgbG9uZyBpbnQgbG9uZ3ZhbCAoKSB7IHJldHVybiAkMjsgfQorc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50IHVsb25ndmFsICgpIHsgcmV0dXJuICQyOyB9CitAJTpAaW5jbHVkZSA8c3RkaW8uaD4KK0AlOkBpbmNsdWRlIDxzdGRsaWIuaD5dLAorWworICBGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC52YWwiLCAidyIpOworICBpZiAoISBmKQorICAgIHJldHVybiAxOworICBpZiAoKCQyKSA8IDApCisgICAgeworICAgICAgbG9uZyBpbnQgaSA9IGxvbmd2YWwgKCk7CisgICAgICBpZiAoaSAhPSAoJDIpKQorCXJldHVybiAxOworICAgICAgZnByaW50ZiAoZiwgIiVsZCIsIGkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgaW50IGkgPSB1bG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgkMikpCisJcmV0dXJuIDE7CisgICAgICBmcHJpbnRmIChmLCAiJWx1IiwgaSk7CisgICAgfQorICAvKiBEbyBub3Qgb3V0cHV0IGEgdHJhaWxpbmcgbmV3bGluZSwgYXMgdGhpcyBjYXVzZXMgXHJcbiBjb25mdXNpb24KKyAgICAgb24gc29tZSBwbGF0Zm9ybXMuICAqLworICByZXR1cm4gZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDA7CitdKV0pCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAxYi4gVGhlIEMrKyBsYW5ndWFnZS4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBBQ19MQU5HKEMrKykKKyMgLS0tLS0tLS0tLS0tCisjIENYWEZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4KK0FDX0xBTkdfREVGSU5FKFtDKytdLCBbY3h4XSwgW0NYWF0sIFtDWFhdLCBbQ10sCitbYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mQVNfTUVTU0FHRV9MT0dfRkQnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiZBU19NRVNTQUdFX0xPR19GRCcKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorXSkKKworCisjIEFDX0xBTkdfQ1BMVVNQTFVTCisjIC0tLS0tLS0tLS0tLS0tLS0tCitBVV9ERUZVTihbQUNfTEFOR19DUExVU1BMVVNdLCBbQUNfTEFORyhDKyspXSkKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgMWMuIFRoZSBPYmplY3RpdmUgQyBsYW5ndWFnZS4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIEFDX0xBTkcoT2JqZWN0aXZlIEMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19MQU5HX0RFRklORShbT2JqZWN0aXZlIENdLCBbb2JqY10sIFtPQkpDXSwgW09CSkNdLCBbQ10sCitbYWNfZXh0PW0KK2FjX2NwcD0nJE9CSkNQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckT0JKQyAtYyAkT0JKQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mQVNfTUVTU0FHRV9MT0dfRkQnCithY19saW5rPSckT0JKQyAtbyBjb25mdGVzdCRhY19leGVleHQgJE9CSkNGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JkFTX01FU1NBR0VfTE9HX0ZEJworYWNfY29tcGlsZXJfZ251PSRhY19jdl9vYmpjX2NvbXBpbGVyX2dudQorXSkKKworCisjIEFDX0xBTkdfT0JKQworIyAtLS0tLS0tLS0tLS0KK0FVX0RFRlVOKFtBQ19MQU5HX09CSkNdLCBbQUNfTEFORyhPYmplY3RpdmUgQyldKQorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIDFkLiBUaGUgT2JqZWN0aXZlIEMrKyBsYW5ndWFnZS4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgQUNfTEFORyhPYmplY3RpdmUgQysrKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19MQU5HX0RFRklORShbT2JqZWN0aXZlIEMrK10sIFtvYmpjeHhdLCBbT0JKQ1hYXSwgW09CSkNYWF0sIFtDKytdLAorW2FjX2V4dD1tbQorYWNfY3BwPSckT0JKQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRPQkpDWFggLWMgJE9CSkNYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mQVNfTUVTU0FHRV9MT0dfRkQnCithY19saW5rPSckT0JKQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkT0JKQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiZBU19NRVNTQUdFX0xPR19GRCcKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3Zfb2JqY3h4X2NvbXBpbGVyX2dudQorXSkKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAzLiBMb29raW5nIGZvciBDb21waWxlcnMgYW5kIFByZXByb2Nlc3NvcnMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisjIDNhLiBUaGUgQyBjb21waWxlci4gICMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworCisKKyMgX0FDX0FSR19WQVJfQ1BQRkxBR1MKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRG9jdW1lbnQgYW5kIHJlZ2lzdGVyIENQUEZMQUdTLCB3aGljaCBpcyB1c2VkIGJ5CisjIEFDX1BST0dfe0NDLCBDUFAsIENYWCwgQ1hYQ1BQLCBPQkpDLCBPQkpDUFAsIE9CSkNYWCwgT0JKQ1hYQ1BQfS4KK0FDX0RFRlVOKFtfQUNfQVJHX1ZBUl9DUFBGTEFHU10sCitbQUNfQVJHX1ZBUihbQ1BQRkxBR1NdLAorCSAgICBbKE9iamVjdGl2ZSkgQy9DKysgcHJlcHJvY2Vzc29yIGZsYWdzLCBlLmcuIC1JPGluY2x1ZGUgZGlyPgorCSAgICAgaWYgeW91IGhhdmUgaGVhZGVycyBpbiBhIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8aW5jbHVkZSBkaXI+XSldKQorCisKKyMgX0FDX0FSR19WQVJfTERGTEFHUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIERvY3VtZW50IGFuZCByZWdpc3RlciBMREZMQUdTLCB3aGljaCBpcyB1c2VkIGJ5CisjIEFDX1BST0dfe0NDLCBDWFgsIEY3NywgRkMsIE9CSkMsIE9CSkNYWH0uCitBQ19ERUZVTihbX0FDX0FSR19WQVJfTERGTEFHU10sCitbQUNfQVJHX1ZBUihbTERGTEFHU10sCisJICAgIFtsaW5rZXIgZmxhZ3MsIGUuZy4gLUw8bGliIGRpcj4gaWYgeW91IGhhdmUgbGlicmFyaWVzIGluIGEKKwkgICAgIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8bGliIGRpcj5dKV0pCisKKworIyBfQUNfQVJHX1ZBUl9MSUJTCisjIC0tLS0tLS0tLS0tLS0tLS0KKyMgRG9jdW1lbnQgYW5kIHJlZ2lzdGVyIExJQlMsIHdoaWNoIGlzIHVzZWQgYnkKKyMgQUNfUFJPR197Q0MsIENYWCwgRjc3LCBGQywgT0JKQywgT0JKQ1hYfS4KK0FDX0RFRlVOKFtfQUNfQVJHX1ZBUl9MSUJTXSwKK1tBQ19BUkdfVkFSKFtMSUJTXSwKKwkgICAgW2xpYnJhcmllcyB0byBwYXNzIHRvIHRoZSBsaW5rZXIsIGUuZy4gLWw8bGlicmFyeT5dKV0pCisKKworIyBBQ19MQU5HX1BSRVBST0MoQykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaW5kIHRoZSBDIHByZXByb2Nlc3Nvci4gIE11c3QgYmUgQUNfREVGVU4nZCB0byBiZSBBQ19SRVFVSVJFJ2FibGUuCitBQ19ERUZVTihbQUNfTEFOR19QUkVQUk9DKEMpXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NQUF0pXSkKKworCisjIF9BQ19QUk9HX1BSRVBST0NfV09SS1NfSUZFTFNFKElGLVdPUktTLCBJRi1OT1QpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGlmICRhY19jcHAgaXMgYSB3b3JraW5nIHByZXByb2Nlc3NvciB0aGF0IGNhbiBmbGFnIGFic2VudAorIyBpbmNsdWRlcyBlaXRoZXIgYnkgdGhlIGV4aXQgc3RhdHVzIG9yIGJ5IHdhcm5pbmdzLgorIyBUaGlzIG1hY3JvIGlzIGZvciBhbGwgbGFuZ3VhZ2VzLCBub3Qgb25seSBDLgorQUNfREVGVU4oW19BQ19QUk9HX1BSRVBST0NfV09SS1NfSUZFTFNFXSwKK1thY19wcmVwcm9jX29rPWZhbHNlCitmb3IgYWNfW11fQUNfTEFOR19BQkJSRVZbXV9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgIF9BQ19QUkVQUk9DX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1tAJTpAaWZkZWYgX19TVERDX18KK0AlOkAgaW5jbHVkZSA8bGltaXRzLmg+CitAJTpAZWxzZQorQCU6QCBpbmNsdWRlIDxhc3NlcnQuaD4KK0AlOkBlbmRpZgorCQkgICAgIFN5bnRheCBlcnJvcl1dKV0sCisJCSAgICAgW10sCisJCSAgICAgWyMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KK2NvbnRpbnVlXSkKKworICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBfQUNfUFJFUFJPQ19JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbQCU6QGluY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+XV0pXSwKKwkJICAgICBbIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlXSwKKwkJICAgICBbIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWtdKQorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitBU19JRihbJGFjX3ByZXByb2Nfb2tdLCBbJDFdLCBbJDJdKQorXSkjIF9BQ19QUk9HX1BSRVBST0NfV09SS1NfSUZFTFNFCisKKworIyBBQ19QUk9HX0NQUAorIyAtLS0tLS0tLS0tLQorIyBGaW5kIGEgd29ya2luZyBDIHByZXByb2Nlc3Nvci4KKyMgV2Ugc2hvdWxkbid0IGhhdmUgdG8gcmVxdWlyZSBBQ19QUk9HX0NDLCBidXQgdGhpcyBpcyBkdWUgdG8gdGhlIGNvbmN1cnJlbmN5CisjIGJldHdlZW4gdGhlIEFDX0xBTkdfQ09NUElMRVJfUkVRVUlSRSBmYW1pbHkgYW5kIHRoYXQgb2YgQUNfUFJPR19DQy4KK0FOX01BS0VWQVIoW0NQUF0sIFtBQ19QUk9HX0NQUF0pCitBTl9QUk9HUkFNKFtjcHBdLCBbQUNfUFJPR19DUFBdKQorQUNfREVGVU4oW0FDX1BST0dfQ1BQXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX0FSR19WQVIoW0NQUF0sICAgICAgW0MgcHJlcHJvY2Vzc29yXSlkbmwKK19BQ19BUkdfVkFSX0NQUEZMQUdTKClkbmwKK0FDX0xBTkdfUFVTSChDKWRubAorQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3Nvcl0pCisjIE9uIFN1bnMsIHNvbWV0aW1lcyAkQ1BQIG5hbWVzIGEgZGlyZWN0b3J5LgoraWYgdGVzdCAtbiAiJENQUCIgJiYgdGVzdCAtZCAiJENQUCI7IHRoZW4KKyAgQ1BQPQorZmkKK2lmIHRlc3QgLXogIiRDUFAiOyB0aGVuCisgIEFDX0NBQ0hFX1ZBTChbYWNfY3ZfcHJvZ19DUFBdLAorICBbZG5sCisgICAgIyBEb3VibGUgcXVvdGVzIGJlY2F1c2UgQ1BQIG5lZWRzIHRvIGJlIGV4cGFuZGVkCisgICAgZm9yIENQUCBpbiAiJENDIC1FIiAiJENDIC1FIC10cmFkaXRpb25hbC1jcHAiICIvbGliL2NwcCIKKyAgICBkbworICAgICAgX0FDX1BST0dfUFJFUFJPQ19XT1JLU19JRkVMU0UoW2JyZWFrXSkKKyAgICBkb25lCisgICAgYWNfY3ZfcHJvZ19DUFA9JENQUAorICBdKWRubAorICBDUFA9JGFjX2N2X3Byb2dfQ1BQCitlbHNlCisgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKK2ZpCitBQ19NU0dfUkVTVUxUKFskQ1BQXSkKK19BQ19QUk9HX1BSRVBST0NfV09SS1NfSUZFTFNFKFtdLAorCQlbQUNfTVNHX0ZBSUxVUkUoW0MgcHJlcHJvY2Vzc29yICIkQ1BQIiBmYWlscyBzYW5pdHkgY2hlY2tdKV0pCitBQ19TVUJTVChDUFApZG5sCitBQ19MQU5HX1BPUChDKWRubAorXSkjIEFDX1BST0dfQ1BQCisKKyMgQUNfUFJPR19DUFBfV0VSUk9SCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcmVhdCB3YXJuaW5ncyBmcm9tIHRoZSBwcmVwcm9jZXNzb3IgYXMgZXJyb3JzLgorQUNfREVGVU4oW0FDX1BST0dfQ1BQX1dFUlJPUl0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DUFBdKWRubAorYWNfY19wcmVwcm9jX3dhcm5fZmxhZz15ZXNdKSMgQUNfUFJPR19DUFBfV0VSUk9SCisKKyMgQUNfTEFOR19DT01QSUxFUihDKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpbmQgdGhlIEMgY29tcGlsZXIuICBNdXN0IGJlIEFDX0RFRlVOJ2QgdG8gYmUgQUNfUkVRVUlSRSdhYmxlLgorQUNfREVGVU4oW0FDX0xBTkdfQ09NUElMRVIoQyldLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKV0pCisKKworIyBhY19jdl9wcm9nX2djYworIyAtLS0tLS0tLS0tLS0tLQorIyBXZSB1c2VkIHRvIG5hbWUgdGhlIGNhY2hlIHZhcmlhYmxlIHRoaXMgd2F5LgorQVVfREVGVU4oW2FjX2N2X3Byb2dfZ2NjXSwKK1thY19jdl9jX2NvbXBpbGVyX2dudV0pCisKKworIyBBQ19QUk9HX0NDKFtDT01QSUxFUiAuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDT01QSUxFUiAuLi4gaXMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBDIGNvbXBpbGVycyB0byBzZWFyY2ggZm9yLgorIyBUaGlzIGp1c3QgZ2l2ZXMgdGhlIHVzZXIgYW4gb3Bwb3J0dW5pdHkgdG8gc3BlY2lmeSBhbiBhbHRlcm5hdGl2ZQorIyBzZWFyY2ggbGlzdCBmb3IgdGhlIEMgY29tcGlsZXIuCitBTl9NQUtFVkFSKFtDQ10sICBbQUNfUFJPR19DQ10pCitBTl9QUk9HUkFNKFtjY10sICBbQUNfUFJPR19DQ10pCitBTl9QUk9HUkFNKFtnY2NdLCBbQUNfUFJPR19DQ10pCitBQ19ERUZVTihbQUNfUFJPR19DQ10sCitbQUNfTEFOR19QVVNIKEMpZG5sCitBQ19BUkdfVkFSKFtDQ10sICAgICBbQyBjb21waWxlciBjb21tYW5kXSlkbmwKK0FDX0FSR19WQVIoW0NGTEFHU10sIFtDIGNvbXBpbGVyIGZsYWdzXSlkbmwKK19BQ19BUkdfVkFSX0xERkxBR1MoKWRubAorX0FDX0FSR19WQVJfTElCUygpZG5sCitfQUNfQVJHX1ZBUl9DUFBGTEFHUygpZG5sCittNF9pZnZhbChbJDFdLAorICAgICAgW0FDX0NIRUNLX1RPT0xTKENDLCBbJDFdKV0sCitbQUNfQ0hFQ0tfVE9PTChDQywgZ2NjKQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBkbmwgSGVyZSB3ZSB3YW50OgorICBkbmwJQUNfQ0hFQ0tfVE9PTChDQywgY2MpCisgIGRubCBidXQgd2l0aG91dCB0aGUgY2hlY2sgZm9yIGEgdG9vbCB3aXRob3V0IHRoZSBwcmVmaXguCisgIGRubCBVbnRpbCB0aGUgY2hlY2sgaXMgcmVtb3ZlZCBmcm9tIHRoZXJlLCBjb3B5IHRoZSBjb2RlOgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgQUNfQ0hFQ0tfUFJPRyhDQywgWyR7YWNfdG9vbF9wcmVmaXh9Y2NdLCBbJHthY190b29sX3ByZWZpeH1jY10pCisgIGZpCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBBQ19DSEVDS19QUk9HKENDLCBjYywgY2MsICwgLCAvdXNyL3VjYi9jYykKK2ZpCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgIEFDX0NIRUNLX1RPT0xTKENDLCBjbC5leGUpCitmaQorXSkKKwordGVzdCAteiAiJENDIiAmJiBBQ19NU0dfRkFJTFVSRShbbm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSF0pCisKKyMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KK19BU19FQ0hPX0xPRyhbY2hlY2tpbmcgZm9yIF9BQ19MQU5HIGNvbXBpbGVyIHZlcnNpb25dKQorc2V0IFggJGFjX2NvbXBpbGUKK2FjX2NvbXBpbGVyPSRbMl0KK2ZvciBhY19vcHRpb24gaW4gLS12ZXJzaW9uIC12IC1WIC1xdmVyc2lvbjsgZG8KKyAgX0FDX0RPX0xJTUlUKFskYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JkFTX01FU1NBR0VfTE9HX0ZEXSkKK2RvbmUKKworbTRfZXhwYW5kX29uY2UoW19BQ19DT01QSUxFUl9FWEVFWFRdKVtdZG5sCittNF9leHBhbmRfb25jZShbX0FDX0NPTVBJTEVSX09CSkVYVF0pW11kbmwKK19BQ19MQU5HX0NPTVBJTEVSX0dOVQoraWYgdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCisgIEdDQz15ZXMKK2Vsc2UKKyAgR0NDPQorZmkKK19BQ19QUk9HX0NDX0cKK19BQ19QUk9HX0NDX0M4OQorQUNfTEFOR19QT1AoQylkbmwKK10pIyBBQ19QUk9HX0NDCisKKworIyBfQUNfUFJPR19DQ19HCisjIC0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgd2hldGhlciAtZyB3b3JrcywgZXZlbiBpZiBDRkxBR1MgaXMgc2V0LCBpbiBjYXNlIHRoZSBwYWNrYWdlCisjIHBsYXlzIGFyb3VuZCB3aXRoIENGTEFHUyAoc3VjaCBhcyB0byBidWlsZCBib3RoIGRlYnVnZ2luZyBhbmQgbm9ybWFsCisjIHZlcnNpb25zIG9mIGEgbGlicmFyeSksIHRhc3RlbGVzcyBhcyB0aGF0IGlkZWEgaXMuCisjIERvbid0IGNvbnNpZGVyIC1nIHRvIHdvcmsgaWYgaXQgZ2VuZXJhdGVzIHdhcm5pbmdzIHdoZW4gcGxhaW4gY29tcGlsZXMgZG9uJ3QuCittNF9kZWZpbmUoW19BQ19QUk9HX0NDX0ddLAorW2FjX3Rlc3RfQ0ZMQUdTPSR7Q0ZMQUdTK3NldH0KK2FjX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK0FDX0NBQ0hFX0NIRUNLKHdoZXRoZXIgJENDIGFjY2VwdHMgLWcsIGFjX2N2X3Byb2dfY2NfZywKKyAgW2FjX3NhdmVfY193ZXJyb3JfZmxhZz0kYWNfY193ZXJyb3JfZmxhZworICAgYWNfY193ZXJyb3JfZmxhZz15ZXMKKyAgIGFjX2N2X3Byb2dfY2NfZz1ubworICAgQ0ZMQUdTPSItZyIKKyAgIF9BQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKCldLAorICAgICBbYWNfY3ZfcHJvZ19jY19nPXllc10sCisgICAgIFtDRkxBR1M9IiIKKyAgICAgIF9BQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKCldLAorCVtdLAorCVthY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKKwkgQ0ZMQUdTPSItZyIKKwkgX0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oKV0sCisJICAgW2FjX2N2X3Byb2dfY2NfZz15ZXNdKV0pXSkKKyAgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZ10pCitpZiB0ZXN0ICIkYWNfdGVzdF9DRkxBR1MiID0gc2V0OyB0aGVuCisgIENGTEFHUz0kYWNfc2F2ZV9DRkxBR1MKK2VsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jY19nID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgQ0ZMQUdTPSItZyAtTzIiCisgIGVsc2UKKyAgICBDRkxBR1M9Ii1nIgorICBmaQorZWxzZQorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENGTEFHUz0iLU8yIgorICBlbHNlCisgICAgQ0ZMQUdTPQorICBmaQorZmlbXWRubAorXSkjIF9BQ19QUk9HX0NDX0cKKworCisjIEFDX1BST0dfR0NDX1RSQURJVElPTkFMCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfUFJPR19HQ0NfVFJBRElUSU9OQUxdLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAoraWYgdGVzdCAkYWNfY3ZfY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KKyAgICBBQ19DQUNIRV9DSEVDSyh3aGV0aGVyICRDQyBuZWVkcyAtdHJhZGl0aW9uYWwsCisgICAgICBhY19jdl9wcm9nX2djY190cmFkaXRpb25hbCwKK1sgIGFjX3BhdHRlcm49IkF1dG9jb25mLioneCciCisgIEFDX0VHUkVQX0NQUCgkYWNfcGF0dGVybiwgWyNpbmNsdWRlIDxzZ3R0eS5oPgorQXV0b2NvbmYgVElPQ0dFVFBdLAorICBhY19jdl9wcm9nX2djY190cmFkaXRpb25hbD15ZXMsIGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsPW5vKQorCisgIGlmIHRlc3QgJGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsID0gbm87IHRoZW4KKyAgICBBQ19FR1JFUF9DUFAoJGFjX3BhdHRlcm4sIFsjaW5jbHVkZSA8dGVybWlvLmg+CitBdXRvY29uZiBUQ0dFVEFdLAorICAgIGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsPXllcykKKyAgZmldKQorICBpZiB0ZXN0ICRhY19jdl9wcm9nX2djY190cmFkaXRpb25hbCA9IHllczsgdGhlbgorICAgIENDPSIkQ0MgLXRyYWRpdGlvbmFsIgorICBmaQorZmkKK10pIyBBQ19QUk9HX0dDQ19UUkFESVRJT05BTAorCisKKyMgQUNfUFJPR19DQ19DX08KKyMgLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19QUk9HX0NDX0NfT10sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitpZiB0ZXN0ICJ4JENDIiAhPSB4Y2M7IHRoZW4KKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyICRDQyBhbmQgY2MgdW5kZXJzdGFuZCAtYyBhbmQgLW8gdG9nZXRoZXJdKQorZWxzZQorICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgY2MgdW5kZXJzdGFuZHMgLWMgYW5kIC1vIHRvZ2V0aGVyXSkKK2ZpCitzZXQgZHVtbXkgJENDOyBhY19jYz1gQVNfRUNITyhbIiRbMl0iXSkgfAorCQkgICAgICBzZWQgJ3MvW1teYS16QS1aMC05X11dL18vZztzL15bWzAtOV1dL18vJ2AKK0FDX0NBQ0hFX1ZBTChhY19jdl9wcm9nX2NjXyR7YWNfY2N9X2NfbywKK1tBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oW10pXSkKKyMgTWFrZSBzdXJlIGl0IHdvcmtzIGJvdGggd2l0aCAkQ0MgYW5kIHdpdGggc2ltcGxlIGNjLgorIyBXZSBkbyB0aGUgdGVzdCB0d2ljZSBiZWNhdXNlIHNvbWUgY29tcGlsZXJzIHJlZnVzZSB0byBvdmVyd3JpdGUgYW4KKyMgZXhpc3RpbmcgLm8gZmlsZSB3aXRoIC1vLCB0aG91Z2ggdGhleSB3aWxsIGNyZWF0ZSBvbmUuCithY190cnk9JyRDQyAtYyBjb25mdGVzdC4kYWNfZXh0IC1vIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ID4mQVNfTUVTU0FHRV9MT0dfRkQnCitybSAtZiBjb25mdGVzdDIuKgoraWYgX0FDX0RPX1ZBUihhY190cnkpICYmCisgICB0ZXN0IC1mIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ICYmIF9BQ19ET19WQVIoYWNfdHJ5KTsKK3RoZW4KKyAgZXZhbCBhY19jdl9wcm9nX2NjXyR7YWNfY2N9X2Nfbz15ZXMKKyAgaWYgdGVzdCAieCRDQyIgIT0geGNjOyB0aGVuCisgICAgIyBUZXN0IGZpcnN0IHRoYXQgY2MgZXhpc3RzIGF0IGFsbC4KKyAgICBpZiBfQUNfRE9fVE9LRU5TKGNjIC1jIGNvbmZ0ZXN0LiRhY19leHQgPiZBU19NRVNTQUdFX0xPR19GRCk7IHRoZW4KKyAgICAgIGFjX3RyeT0nY2MgLWMgY29uZnRlc3QuJGFjX2V4dCAtbyBjb25mdGVzdDIuJGFjX29iamV4dCA+JkFTX01FU1NBR0VfTE9HX0ZEJworICAgICAgcm0gLWYgY29uZnRlc3QyLioKKyAgICAgIGlmIF9BQ19ET19WQVIoYWNfdHJ5KSAmJgorCSB0ZXN0IC1mIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ICYmIF9BQ19ET19WQVIoYWNfdHJ5KTsKKyAgICAgIHRoZW4KKwkjIGNjIHdvcmtzIHRvby4KKwk6CisgICAgICBlbHNlCisJIyBjYyBleGlzdHMgYnV0IGRvZXNuJ3QgbGlrZSAtby4KKwlldmFsIGFjX2N2X3Byb2dfY2NfJHthY19jY31fY19vPW5vCisgICAgICBmaQorICAgIGZpCisgIGZpCitlbHNlCisgIGV2YWwgYWNfY3ZfcHJvZ19jY18ke2FjX2NjfV9jX289bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0KgorXSlkbmwKK2lmIGV2YWwgdGVzdCBcJGFjX2N2X3Byb2dfY2NfJHthY19jY31fY19vID0geWVzOyB0aGVuCisgIEFDX01TR19SRVNVTFQoW3llc10pCitlbHNlCisgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgQUNfREVGSU5FKE5PX01JTlVTX0NfTUlOVVNfTywgMSwKKwkgICBbRGVmaW5lIHRvIDEgaWYgeW91ciBDIGNvbXBpbGVyIGRvZXNuJ3QgYWNjZXB0IC1jIGFuZCAtbyB0b2dldGhlci5dKQorZmkKK10pIyBBQ19QUk9HX0NDX0NfTworCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKyMgM2IuIFRoZSBDKysgY29tcGlsZXIuICAjCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworCisKKyMgQUNfTEFOR19QUkVQUk9DKEMrKykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpbmQgdGhlIEMrKyBwcmVwcm9jZXNzb3IuICBNdXN0IGJlIEFDX0RFRlVOJ2QgdG8gYmUgQUNfUkVRVUlSRSdhYmxlLgorQUNfREVGVU4oW0FDX0xBTkdfUFJFUFJPQyhDKyspXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NYWENQUF0pXSkKKworCisjIEFDX1BST0dfQ1hYQ1BQCisjIC0tLS0tLS0tLS0tLS0tCisjIEZpbmQgYSB3b3JraW5nIEMrKyBwcmVwcm9jZXNzb3IuCisjIFdlIHNob3VsZG4ndCBoYXZlIHRvIHJlcXVpcmUgQUNfUFJPR19DQywgYnV0IHRoaXMgaXMgZHVlIHRvIHRoZSBjb25jdXJyZW5jeQorIyBiZXR3ZWVuIHRoZSBBQ19MQU5HX0NPTVBJTEVSX1JFUVVJUkUgZmFtaWx5IGFuZCB0aGF0IG9mIEFDX1BST0dfQ1hYLgorQUNfREVGVU4oW0FDX1BST0dfQ1hYQ1BQXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NYWF0pZG5sCitBQ19BUkdfVkFSKFtDWFhDUFBdLCAgIFtDKysgcHJlcHJvY2Vzc29yXSlkbmwKK19BQ19BUkdfVkFSX0NQUEZMQUdTKClkbmwKK0FDX0xBTkdfUFVTSChDKyspZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBydW4gdGhlIEMrKyBwcmVwcm9jZXNzb3JdKQoraWYgdGVzdCAteiAiJENYWENQUCI7IHRoZW4KKyAgQUNfQ0FDSEVfVkFMKGFjX2N2X3Byb2dfQ1hYQ1BQLAorICBbZG5sCisgICAgIyBEb3VibGUgcXVvdGVzIGJlY2F1c2UgQ1hYQ1BQIG5lZWRzIHRvIGJlIGV4cGFuZGVkCisgICAgZm9yIENYWENQUCBpbiAiJENYWCAtRSIgIi9saWIvY3BwIgorICAgIGRvCisgICAgICBfQUNfUFJPR19QUkVQUk9DX1dPUktTX0lGRUxTRShbYnJlYWtdKQorICAgIGRvbmUKKyAgICBhY19jdl9wcm9nX0NYWENQUD0kQ1hYQ1BQCisgIF0pZG5sCisgIENYWENQUD0kYWNfY3ZfcHJvZ19DWFhDUFAKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19DWFhDUFA9JENYWENQUAorZmkKK0FDX01TR19SRVNVTFQoWyRDWFhDUFBdKQorX0FDX1BST0dfUFJFUFJPQ19XT1JLU19JRkVMU0UoW10sCisJICBbQUNfTVNHX0ZBSUxVUkUoW0MrKyBwcmVwcm9jZXNzb3IgIiRDWFhDUFAiIGZhaWxzIHNhbml0eSBjaGVja10pXSkKK0FDX1NVQlNUKENYWENQUClkbmwKK0FDX0xBTkdfUE9QKEMrKylkbmwKK10pIyBBQ19QUk9HX0NYWENQUAorCisKKyMgQUNfTEFOR19DT01QSUxFUihDKyspCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaW5kIHRoZSBDKysgY29tcGlsZXIuICBNdXN0IGJlIEFDX0RFRlVOJ2QgdG8gYmUgQUNfUkVRVUlSRSdhYmxlLgorQUNfREVGVU4oW0FDX0xBTkdfQ09NUElMRVIoQysrKV0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DWFhdKV0pCisKKworIyBhY19jdl9wcm9nX2d4eAorIyAtLS0tLS0tLS0tLS0tLQorIyBXZSB1c2VkIHRvIG5hbWUgdGhlIGNhY2hlIHZhcmlhYmxlIHRoaXMgd2F5LgorQVVfREVGVU4oW2FjX2N2X3Byb2dfZ3h4XSwKK1thY19jdl9jeHhfY29tcGlsZXJfZ251XSkKKworCisjIEFDX1BST0dfQ1hYKFtMSVNULU9GLUNPTVBJTEVSU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExJU1QtT0YtQ09NUElMRVJTIGlzIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgQysrIGNvbXBpbGVycyB0byBzZWFyY2gKKyMgZm9yIChpZiBub3Qgc3BlY2lmaWVkLCBhIGRlZmF1bHQgbGlzdCBpcyB1c2VkKS4gIFRoaXMganVzdCBnaXZlcyB0aGUKKyMgdXNlciBhbiBvcHBvcnR1bml0eSB0byBzcGVjaWZ5IGFuIGFsdGVybmF0aXZlIHNlYXJjaCBsaXN0IGZvciB0aGUgQysrCisjIGNvbXBpbGVyLgorIyBhQ0MJSFAtVVggQysrIGNvbXBpbGVyIG11Y2ggYmV0dGVyIHRoYW4gYENDJywgc28gdGVzdCBiZWZvcmUuCisjIEZDQyAgIEZ1aml0c3UgQysrIGNvbXBpbGVyCisjIEtDQwlLQUkgQysrIGNvbXBpbGVyCisjIFJDQwlSYXRpb25hbCBDKysKKyMgeGxDX3IJQUlYIEMgU2V0KysgKHdpdGggc3VwcG9ydCBmb3IgcmVlbnRyYW50IGNvZGUpCisjIHhsQwlBSVggQyBTZXQrKworQU5fTUFLRVZBUihbQ1hYXSwgIFtBQ19QUk9HX0NYWF0pCitBTl9QUk9HUkFNKFtDQ10sICAgW0FDX1BST0dfQ1hYXSkKK0FOX1BST0dSQU0oW2MrK10sICBbQUNfUFJPR19DWFhdKQorQU5fUFJPR1JBTShbZysrXSwgIFtBQ19QUk9HX0NYWF0pCitBQ19ERUZVTihbQUNfUFJPR19DWFhdLAorW0FDX0xBTkdfUFVTSChDKyspZG5sCitBQ19BUkdfVkFSKFtDWFhdLCAgICAgIFtDKysgY29tcGlsZXIgY29tbWFuZF0pZG5sCitBQ19BUkdfVkFSKFtDWFhGTEFHU10sIFtDKysgY29tcGlsZXIgZmxhZ3NdKWRubAorX0FDX0FSR19WQVJfTERGTEFHUygpZG5sCitfQUNfQVJHX1ZBUl9MSUJTKClkbmwKK19BQ19BUkdfVkFSX0NQUEZMQUdTKClkbmwKK19BQ19BUkdfVkFSX1BSRUNJT1VTKFtDQ0NdKWRubAoraWYgdGVzdCAteiAiJENYWCI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJENDQyI7IHRoZW4KKyAgICBDWFg9JENDQworICBlbHNlCisgICAgQUNfQ0hFQ0tfVE9PTFMoQ1hYLAorCQkgICBbbTRfZGVmYXVsdChbJDFdLAorCQkJICAgICAgIFtnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wuZXhlIEZDQyBLQ0MgUkNDIHhsQ19yIHhsQ10pXSwKKwkJICAgZysrKQorICBmaQorZmkKKyMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KK19BU19FQ0hPX0xPRyhbY2hlY2tpbmcgZm9yIF9BQ19MQU5HIGNvbXBpbGVyIHZlcnNpb25dKQorc2V0IFggJGFjX2NvbXBpbGUKK2FjX2NvbXBpbGVyPSRbMl0KK2ZvciBhY19vcHRpb24gaW4gLS12ZXJzaW9uIC12IC1WIC1xdmVyc2lvbjsgZG8KKyAgX0FDX0RPX0xJTUlUKFskYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JkFTX01FU1NBR0VfTE9HX0ZEXSkKK2RvbmUKKworbTRfZXhwYW5kX29uY2UoW19BQ19DT01QSUxFUl9FWEVFWFRdKVtdZG5sCittNF9leHBhbmRfb25jZShbX0FDX0NPTVBJTEVSX09CSkVYVF0pW11kbmwKK19BQ19MQU5HX0NPTVBJTEVSX0dOVQoraWYgdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCisgIEdYWD15ZXMKK2Vsc2UKKyAgR1hYPQorZmkKK19BQ19QUk9HX0NYWF9HCitBQ19MQU5HX1BPUChDKyspZG5sCitdKSMgQUNfUFJPR19DWFgKKworCisjIF9BQ19QUk9HX0NYWF9HCisjIC0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgLWcgd29ya3MsIGV2ZW4gaWYgQ1hYRkxBR1MgaXMgc2V0LCBpbiBjYXNlIHRoZSBwYWNrYWdlCisjIHBsYXlzIGFyb3VuZCB3aXRoIENYWEZMQUdTIChzdWNoIGFzIHRvIGJ1aWxkIGJvdGggZGVidWdnaW5nIGFuZAorIyBub3JtYWwgdmVyc2lvbnMgb2YgYSBsaWJyYXJ5KSwgdGFzdGVsZXNzIGFzIHRoYXQgaWRlYSBpcy4KKyMgRG9uJ3QgY29uc2lkZXIgLWcgdG8gd29yayBpZiBpdCBnZW5lcmF0ZXMgd2FybmluZ3Mgd2hlbiBwbGFpbiBjb21waWxlcyBkb24ndC4KK200X2RlZmluZShbX0FDX1BST0dfQ1hYX0ddLAorW2FjX3Rlc3RfQ1hYRkxBR1M9JHtDWFhGTEFHUytzZXR9CithY19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUworQUNfQ0FDSEVfQ0hFQ0sod2hldGhlciAkQ1hYIGFjY2VwdHMgLWcsIGFjX2N2X3Byb2dfY3h4X2csCisgIFthY19zYXZlX2N4eF93ZXJyb3JfZmxhZz0kYWNfY3h4X3dlcnJvcl9mbGFnCisgICBhY19jeHhfd2Vycm9yX2ZsYWc9eWVzCisgICBhY19jdl9wcm9nX2N4eF9nPW5vCisgICBDWFhGTEFHUz0iLWciCisgICBfQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTSgpXSwKKyAgICAgW2FjX2N2X3Byb2dfY3h4X2c9eWVzXSwKKyAgICAgW0NYWEZMQUdTPSIiCisgICAgICBfQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTSgpXSwKKwlbXSwKKwlbYWNfY3h4X3dlcnJvcl9mbGFnPSRhY19zYXZlX2N4eF93ZXJyb3JfZmxhZworCSBDWFhGTEFHUz0iLWciCisJIF9BQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKCldLAorCSAgIFthY19jdl9wcm9nX2N4eF9nPXllc10pXSldKQorICAgYWNfY3h4X3dlcnJvcl9mbGFnPSRhY19zYXZlX2N4eF93ZXJyb3JfZmxhZ10pCitpZiB0ZXN0ICIkYWNfdGVzdF9DWFhGTEFHUyIgPSBzZXQ7IHRoZW4KKyAgQ1hYRkxBR1M9JGFjX3NhdmVfQ1hYRkxBR1MKK2VsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jeHhfZyA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgIENYWEZMQUdTPSItZyAtTzIiCisgIGVsc2UKKyAgICBDWFhGTEFHUz0iLWciCisgIGZpCitlbHNlCisgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgQ1hYRkxBR1M9Ii1PMiIKKyAgZWxzZQorICAgIENYWEZMQUdTPQorICBmaQorZmlbXWRubAorXSkjIF9BQ19QUk9HX0NYWF9HCisKKworIyBBQ19QUk9HX0NYWF9DX08KKyMgLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QgaWYgdGhlIEMrKyBjb21waWxlciBhY2NlcHRzIHRoZSBvcHRpb25zIGAtYycgYW5kIGAtbycKKyMgc2ltdWx0YW5lb3VzbHksIGFuZCBkZWZpbmUgYENYWF9OT19NSU5VU19DX01JTlVTX08nIGlmIGl0IGRvZXMgbm90LgorQUNfREVGVU4oW0FDX1BST0dfQ1hYX0NfT10sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DWFhdKWRubAorQUNfTEFOR19QVVNIKFtDKytdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgJENYWCB1bmRlcnN0YW5kcyAtYyBhbmQgLW8gdG9nZXRoZXJdLAorCSAgICAgICBbYWNfY3ZfcHJvZ19jeHhfY19vXSwKK1tBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oW10pXSkKKyMgV2UgdGVzdCB0d2ljZSBiZWNhdXNlIHNvbWUgY29tcGlsZXJzIHJlZnVzZSB0byBvdmVyd3JpdGUgYW4gZXhpc3RpbmcKKyMgYC5vJyBmaWxlIHdpdGggYC1vJywgYWx0aG91Z2ggdGhleSB3aWxsIGNyZWF0ZSBvbmUuCithY190cnk9JyRDWFggJENYWEZMQUdTIC1jIGNvbmZ0ZXN0LiRhY19leHQgLW8gY29uZnRlc3QyLiRhY19vYmpleHQgPiZBU19NRVNTQUdFX0xPR19GRCcKK3JtIC1mIGNvbmZ0ZXN0Mi4qCitpZiBfQUNfRE9fVkFSKGFjX3RyeSkgJiYKKyAgICAgdGVzdCAtZiBjb25mdGVzdDIuJGFjX29iamV4dCAmJgorICAgICBfQUNfRE9fVkFSKGFjX3RyeSk7IHRoZW4KKyAgYWNfY3ZfcHJvZ19jeHhfY19vPXllcworZWxzZQorICBhY19jdl9wcm9nX2N4eF9jX289bm8KK2ZpCitybSAtZiBjb25mdGVzdCpdKQoraWYgdGVzdCAkYWNfY3ZfcHJvZ19jeHhfY19vID0gbm87IHRoZW4KKyAgQUNfREVGSU5FKENYWF9OT19NSU5VU19DX01JTlVTX08sIDEsCisJICAgIFtEZWZpbmUgdG8gMSBpZiB5b3VyIEMrKyBjb21waWxlciBkb2Vzbid0IGFjY2VwdAorCSAgICAgLWMgYW5kIC1vIHRvZ2V0aGVyLl0pCitmaQorQUNfTEFOR19QT1AoW0MrK10pZG5sCitdKSMgQUNfUFJPR19DWFhfQ19PCisKKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisjIDNjLiBUaGUgT2JqZWN0aXZlIEMgY29tcGlsZXIuICAjCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisKKworIyBBQ19MQU5HX1BSRVBST0MoT2JqZWN0aXZlIEMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZCB0aGUgT2JqZWN0aXZlIEMgcHJlcHJvY2Vzc29yLiAgTXVzdCBiZSBBQ19ERUZVTidkIHRvIGJlIEFDX1JFUVVJUkUnYWJsZS4KK0FDX0RFRlVOKFtBQ19MQU5HX1BSRVBST0MoT2JqZWN0aXZlIEMpXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX09CSkNQUF0pXSkKKworCisjIEFDX1BST0dfT0JKQ1BQCisjIC0tLS0tLS0tLS0tLS0tCisjIEZpbmQgYSB3b3JraW5nIE9iamVjdGl2ZSBDIHByZXByb2Nlc3Nvci4KK0FDX0RFRlVOKFtBQ19QUk9HX09CSkNQUF0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19PQkpDXSlkbmwKK0FDX0FSR19WQVIoW09CSkNQUF0sICAgW09iamVjdGl2ZSBDIHByZXByb2Nlc3Nvcl0pZG5sCitfQUNfQVJHX1ZBUl9DUFBGTEFHUygpZG5sCitBQ19MQU5HX1BVU0goT2JqZWN0aXZlIEMpZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBydW4gdGhlIE9iamVjdGl2ZSBDIHByZXByb2Nlc3Nvcl0pCitpZiB0ZXN0IC16ICIkT0JKQ1BQIjsgdGhlbgorICBBQ19DQUNIRV9WQUwoYWNfY3ZfcHJvZ19PQkpDUFAsCisgIFtkbmwKKyAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBPQkpDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKKyAgICBmb3IgT0JKQ1BQIGluICIkT0JKQyAtRSIgIi9saWIvY3BwIgorICAgIGRvCisgICAgICBfQUNfUFJPR19QUkVQUk9DX1dPUktTX0lGRUxTRShbYnJlYWtdKQorICAgIGRvbmUKKyAgICBhY19jdl9wcm9nX09CSkNQUD0kT0JKQ1BQCisgIF0pZG5sCisgIE9CSkNQUD0kYWNfY3ZfcHJvZ19PQkpDUFAKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19PQkpDUFA9JE9CSkNQUAorZmkKK0FDX01TR19SRVNVTFQoWyRPQkpDUFBdKQorX0FDX1BST0dfUFJFUFJPQ19XT1JLU19JRkVMU0UoW10sCisJICBbQUNfTVNHX0ZBSUxVUkUoW09iamVjdGl2ZSBDIHByZXByb2Nlc3NvciAiJE9CSkNQUCIgZmFpbHMgc2FuaXR5IGNoZWNrXSldKQorQUNfU1VCU1QoT0JKQ1BQKWRubAorQUNfTEFOR19QT1AoT2JqZWN0aXZlIEMpZG5sCitdKSMgQUNfUFJPR19PQkpDUFAKKworCisjIEFDX0xBTkdfQ09NUElMRVIoT2JqZWN0aXZlIEMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpbmQgdGhlIE9iamVjdGl2ZSBDIGNvbXBpbGVyLiAgTXVzdCBiZSBBQ19ERUZVTidkIHRvIGJlIEFDX1JFUVVJUkUnYWJsZS4KK0FDX0RFRlVOKFtBQ19MQU5HX0NPTVBJTEVSKE9iamVjdGl2ZSBDKV0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19PQkpDXSldKQorCisKKworIyBBQ19QUk9HX09CSkMoW0xJU1QtT0YtQ09NUElMRVJTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExJU1QtT0YtQ09NUElMRVJTIGlzIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgT2JqZWN0aXZlIEMgY29tcGlsZXJzIHRvCisjIHNlYXJjaCBmb3IgKGlmIG5vdCBzcGVjaWZpZWQsIGEgZGVmYXVsdCBsaXN0IGlzIHVzZWQpLiAgVGhpcyBqdXN0IGdpdmVzCisjIHRoZSB1c2VyIGFuIG9wcG9ydHVuaXR5IHRvIHNwZWNpZnkgYW4gYWx0ZXJuYXRpdmUgc2VhcmNoIGxpc3QgZm9yIHRoZQorIyBPYmplY3RpdmUgQyBjb21waWxlci4KKyMgb2JqY2MgU3RlcFN0b25lIE9iamVjdGl2ZS1DIGNvbXBpbGVyIChhbHNvICJzdGFuZGFyZCIgbmFtZSBmb3IgT0JKQykKKyMgb2JqYyAgRGF2aWQgU3RlcycgUE9DLiAgSWYgeW91IGluc3RhbGxlZCB0aGlzLCB5b3UgbGlrZWx5IHdhbnQgaXQuCisjIGNjICAgIE5hdGl2ZSBDIGNvbXBpbGVyIChmb3IgaW5zdGFuY2UsIEFwcGxlKS4KKyMgQ0MgICAgWW91IG5ldmVyIGtub3cuCitBTl9NQUtFVkFSKFtPQkpDXSwgIFtBQ19QUk9HX09CSkNdKQorQU5fUFJPR1JBTShbb2JqY2NdLCAgW0FDX1BST0dfT0JKQ10pCitBTl9QUk9HUkFNKFtvYmpjXSwgIFtBQ19QUk9HX09CSkNdKQorQUNfREVGVU4oW0FDX1BST0dfT0JKQ10sCitbQUNfTEFOR19QVVNIKE9iamVjdGl2ZSBDKWRubAorQUNfQVJHX1ZBUihbT0JKQ10sICAgICAgW09iamVjdGl2ZSBDIGNvbXBpbGVyIGNvbW1hbmRdKWRubAorQUNfQVJHX1ZBUihbT0JKQ0ZMQUdTXSwgW09iamVjdGl2ZSBDIGNvbXBpbGVyIGZsYWdzXSlkbmwKK19BQ19BUkdfVkFSX0xERkxBR1MoKWRubAorX0FDX0FSR19WQVJfTElCUygpZG5sCitfQUNfQVJHX1ZBUl9DUFBGTEFHUygpZG5sCitfQUNfQVJHX1ZBUl9QUkVDSU9VUyhbT0JKQ10pZG5sCitBQ19DSEVDS19UT09MUyhPQkpDLAorCSAgICAgICBbbTRfZGVmYXVsdChbJDFdLCBbZ2NjIG9iamNjIG9iamMgY2MgQ0NdKV0sCisJICAgICAgIGdjYykKKyMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KK19BU19FQ0hPX0xPRyhbY2hlY2tpbmcgZm9yIF9BQ19MQU5HIGNvbXBpbGVyIHZlcnNpb25dKQorc2V0IFggJGFjX2NvbXBpbGUKK2FjX2NvbXBpbGVyPSRbMl0KK2ZvciBhY19vcHRpb24gaW4gLS12ZXJzaW9uIC12IC1WIC1xdmVyc2lvbjsgZG8KKyAgX0FDX0RPX0xJTUlUKFskYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JkFTX01FU1NBR0VfTE9HX0ZEXSkKK2RvbmUKKworbTRfZXhwYW5kX29uY2UoW19BQ19DT01QSUxFUl9FWEVFWFRdKVtdZG5sCittNF9leHBhbmRfb25jZShbX0FDX0NPTVBJTEVSX09CSkVYVF0pW11kbmwKK19BQ19MQU5HX0NPTVBJTEVSX0dOVQoraWYgdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCisgIEdPQkpDPXllcworZWxzZQorICBHT0JKQz0KK2ZpCitfQUNfUFJPR19PQkpDX0cKK0FDX0xBTkdfUE9QKE9iamVjdGl2ZSBDKWRubAorXSkjIEFDX1BST0dfT0JKQworCisKKyMgX0FDX1BST0dfT0JKQ19HCisjIC0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIC1nIHdvcmtzLCBldmVuIGlmIE9CSkNGTEFHUyBpcyBzZXQsIGluIGNhc2UgdGhlIHBhY2thZ2UKKyMgcGxheXMgYXJvdW5kIHdpdGggT0JKQ0ZMQUdTIChzdWNoIGFzIHRvIGJ1aWxkIGJvdGggZGVidWdnaW5nIGFuZAorIyBub3JtYWwgdmVyc2lvbnMgb2YgYSBsaWJyYXJ5KSwgdGFzdGVsZXNzIGFzIHRoYXQgaWRlYSBpcy4KKyMgRG9uJ3QgY29uc2lkZXIgLWcgdG8gd29yayBpZiBpdCBnZW5lcmF0ZXMgd2FybmluZ3Mgd2hlbiBwbGFpbiBjb21waWxlcyBkb24ndC4KK200X2RlZmluZShbX0FDX1BST0dfT0JKQ19HXSwKK1thY190ZXN0X09CSkNGTEFHUz0ke09CSkNGTEFHUytzZXR9CithY19zYXZlX09CSkNGTEFHUz0kT0JKQ0ZMQUdTCitBQ19DQUNIRV9DSEVDSyh3aGV0aGVyICRPQkpDIGFjY2VwdHMgLWcsIGFjX2N2X3Byb2dfb2JqY19nLAorICBbYWNfc2F2ZV9vYmpjX3dlcnJvcl9mbGFnPSRhY19vYmpjX3dlcnJvcl9mbGFnCisgICBhY19vYmpjX3dlcnJvcl9mbGFnPXllcworICAgYWNfY3ZfcHJvZ19vYmpjX2c9bm8KKyAgIE9CSkNGTEFHUz0iLWciCisgICBfQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTSgpXSwKKyAgICAgW2FjX2N2X3Byb2dfb2JqY19nPXllc10sCisgICAgIFtPQkpDRkxBR1M9IiIKKyAgICAgIF9BQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKCldLAorCVtdLAorCVthY19vYmpjX3dlcnJvcl9mbGFnPSRhY19zYXZlX29iamNfd2Vycm9yX2ZsYWcKKwkgT0JKQ0ZMQUdTPSItZyIKKwkgX0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oKV0sCisJICAgW2FjX2N2X3Byb2dfb2JqY19nPXllc10pXSldKQorICAgYWNfb2JqY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9vYmpjX3dlcnJvcl9mbGFnXSkKK2lmIHRlc3QgIiRhY190ZXN0X09CSkNGTEFHUyIgPSBzZXQ7IHRoZW4KKyAgT0JKQ0ZMQUdTPSRhY19zYXZlX09CSkNGTEFHUworZWxpZiB0ZXN0ICRhY19jdl9wcm9nX29iamNfZyA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkR09CSkMiID0geWVzOyB0aGVuCisgICAgT0JKQ0ZMQUdTPSItZyAtTzIiCisgIGVsc2UKKyAgICBPQkpDRkxBR1M9Ii1nIgorICBmaQorZWxzZQorICBpZiB0ZXN0ICIkR09CSkMiID0geWVzOyB0aGVuCisgICAgT0JKQ0ZMQUdTPSItTzIiCisgIGVsc2UKKyAgICBPQkpDRkxBR1M9CisgIGZpCitmaVtdZG5sCitdKSMgX0FDX1BST0dfT0JKQ19HCisKKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKyMgM2QuIFRoZSBPYmplY3RpdmUgQysrIGNvbXBpbGVyLiAgIworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisKKworIyBBQ19MQU5HX1BSRVBST0MoT2JqZWN0aXZlIEMrKykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpbmQgdGhlIE9iamVjdGl2ZSBDKysgcHJlcHJvY2Vzc29yLiAgTXVzdCBiZSBBQ19ERUZVTidkIHRvIGJlIEFDX1JFUVVJUkUnYWJsZS4KK0FDX0RFRlVOKFtBQ19MQU5HX1BSRVBST0MoT2JqZWN0aXZlIEMrKyldLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfT0JKQ1hYQ1BQXSldKQorCisKKyMgQUNfUFJPR19PQkpDWFhDUFAKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZCBhIHdvcmtpbmcgT2JqZWN0aXZlIEMrKyBwcmVwcm9jZXNzb3IuCitBQ19ERUZVTihbQUNfUFJPR19PQkpDWFhDUFBdLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfT0JKQ1hYXSlkbmwKK0FDX0FSR19WQVIoW09CSkNYWENQUF0sICAgW09iamVjdGl2ZSBDKysgcHJlcHJvY2Vzc29yXSlkbmwKK19BQ19BUkdfVkFSX0NQUEZMQUdTKClkbmwKK0FDX0xBTkdfUFVTSChPYmplY3RpdmUgQysrKWRubAorQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gcnVuIHRoZSBPYmplY3RpdmUgQysrIHByZXByb2Nlc3Nvcl0pCitpZiB0ZXN0IC16ICIkT0JKQ1hYQ1BQIjsgdGhlbgorICBBQ19DQUNIRV9WQUwoYWNfY3ZfcHJvZ19PQkpDWFhDUFAsCisgIFtkbmwKKyAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBPQkpDWFhDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKKyAgICBmb3IgT0JKQ1hYQ1BQIGluICIkT0JKQ1hYIC1FIiAiL2xpYi9jcHAiCisgICAgZG8KKyAgICAgIF9BQ19QUk9HX1BSRVBST0NfV09SS1NfSUZFTFNFKFticmVha10pCisgICAgZG9uZQorICAgIGFjX2N2X3Byb2dfT0JKQ1hYQ1BQPSRPQkpDWFhDUFAKKyAgXSlkbmwKKyAgT0JKQ1hYQ1BQPSRhY19jdl9wcm9nX09CSkNYWENQUAorZWxzZQorICBhY19jdl9wcm9nX09CSkNYWENQUD0kT0JKQ1hYQ1BQCitmaQorQUNfTVNHX1JFU1VMVChbJE9CSkNYWENQUF0pCitfQUNfUFJPR19QUkVQUk9DX1dPUktTX0lGRUxTRShbXSwKKwkgIFtBQ19NU0dfRkFJTFVSRShbT2JqZWN0aXZlIEMrKyBwcmVwcm9jZXNzb3IgIiRPQkpDWFhDUFAiIGZhaWxzIHNhbml0eSBjaGVja10pXSkKK0FDX1NVQlNUKE9CSkNYWENQUClkbmwKK0FDX0xBTkdfUE9QKE9iamVjdGl2ZSBDKyspZG5sCitdKSMgQUNfUFJPR19PQkpDWFhDUFAKKworCisjIEFDX0xBTkdfQ09NUElMRVIoT2JqZWN0aXZlIEMrKykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaW5kIHRoZSBPYmplY3RpdmUgQysrIGNvbXBpbGVyLiAgTXVzdCBiZSBBQ19ERUZVTidkIHRvIGJlIEFDX1JFUVVJUkUnYWJsZS4KK0FDX0RFRlVOKFtBQ19MQU5HX0NPTVBJTEVSKE9iamVjdGl2ZSBDKyspXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX09CSkNYWF0pXSkKKworCisKKyMgQUNfUFJPR19PQkpDWFgoW0xJU1QtT0YtQ09NUElMRVJTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExJU1QtT0YtQ09NUElMRVJTIGlzIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgT2JqZWN0aXZlIEMrKyBjb21waWxlcnMgdG8KKyMgc2VhcmNoIGZvciAoaWYgbm90IHNwZWNpZmllZCwgYSBkZWZhdWx0IGxpc3QgaXMgdXNlZCkuICBUaGlzIGp1c3QgZ2l2ZXMKKyMgdGhlIHVzZXIgYW4gb3Bwb3J0dW5pdHkgdG8gc3BlY2lmeSBhbiBhbHRlcm5hdGl2ZSBzZWFyY2ggbGlzdCBmb3IgdGhlCisjIE9iamVjdGl2ZSBDKysgY29tcGlsZXIuCisjIEZJWE1FOiB0aGlzIGxpc3QgaXMgcHVyZSBndWVzc3dvcmsKKyMgb2JqYysrIFN0ZXBTdG9uZSBPYmplY3RpdmUtQysrIGNvbXBpbGVyIChhbHNvICJzdGFuZGFyZCIgbmFtZSBmb3IgT0JKQ1hYKQorIyBvYmpjeHggRGF2aWQgU3RlcycgUE9DLiAgSWYgeW91IGluc3RhbGxlZCB0aGlzLCB5b3UgbGlrZWx5IHdhbnQgaXQuCisjIGMrKyAgICBOYXRpdmUgQysrIGNvbXBpbGVyIChmb3IgaW5zdGFuY2UsIEFwcGxlKS4KKyMgQ1hYICAgIFlvdSBuZXZlciBrbm93LgorQU5fTUFLRVZBUihbT0JKQ1hYXSwgIFtBQ19QUk9HX09CSkNYWF0pCitBTl9QUk9HUkFNKFtvYmpjeHhdLCAgW0FDX1BST0dfT0JKQ1hYXSkKK0FDX0RFRlVOKFtBQ19QUk9HX09CSkNYWF0sCitbQUNfTEFOR19QVVNIKE9iamVjdGl2ZSBDKyspZG5sCitBQ19BUkdfVkFSKFtPQkpDWFhdLCAgICAgIFtPYmplY3RpdmUgQysrIGNvbXBpbGVyIGNvbW1hbmRdKWRubAorQUNfQVJHX1ZBUihbT0JKQ1hYRkxBR1NdLCBbT2JqZWN0aXZlIEMrKyBjb21waWxlciBmbGFnc10pZG5sCitfQUNfQVJHX1ZBUl9MREZMQUdTKClkbmwKK19BQ19BUkdfVkFSX0xJQlMoKWRubAorX0FDX0FSR19WQVJfQ1BQRkxBR1MoKWRubAorX0FDX0FSR19WQVJfUFJFQ0lPVVMoW09CSkNYWF0pZG5sCitBQ19DSEVDS19UT09MUyhPQkpDWFgsCisJICAgICAgIFttNF9kZWZhdWx0KFskMV0sIFtnKysgb2JqYysrIG9iamN4eCBjKysgQ1hYXSldLAorCSAgICAgICBnKyspCisjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCitfQVNfRUNIT19MT0coW2NoZWNraW5nIGZvciBfQUNfTEFORyBjb21waWxlciB2ZXJzaW9uXSkKK3NldCBYICRhY19jb21waWxlCithY19jb21waWxlcj0kWzJdCitmb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCisgIF9BQ19ET19MSU1JVChbJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiZBU19NRVNTQUdFX0xPR19GRF0pCitkb25lCisKK200X2V4cGFuZF9vbmNlKFtfQUNfQ09NUElMRVJfRVhFRVhUXSlbXWRubAorbTRfZXhwYW5kX29uY2UoW19BQ19DT01QSUxFUl9PQkpFWFRdKVtdZG5sCitfQUNfTEFOR19DT01QSUxFUl9HTlUKK2lmIHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgorICBHT0JKQ1hYPXllcworZWxzZQorICBHT0JKQ1hYPQorZmkKK19BQ19QUk9HX09CSkNYWF9HCitBQ19MQU5HX1BPUChPYmplY3RpdmUgQysrKWRubAorXSkjIEFDX1BST0dfT0JKQ1hYCisKKworIyBfQUNfUFJPR19PQkpDWFhfRworIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIC1nIHdvcmtzLCBldmVuIGlmIE9CSkNGTEFHUyBpcyBzZXQsIGluIGNhc2UgdGhlIHBhY2thZ2UKKyMgcGxheXMgYXJvdW5kIHdpdGggT0JKQ0ZMQUdTIChzdWNoIGFzIHRvIGJ1aWxkIGJvdGggZGVidWdnaW5nIGFuZAorIyBub3JtYWwgdmVyc2lvbnMgb2YgYSBsaWJyYXJ5KSwgdGFzdGVsZXNzIGFzIHRoYXQgaWRlYSBpcy4KKyMgRG9uJ3QgY29uc2lkZXIgLWcgdG8gd29yayBpZiBpdCBnZW5lcmF0ZXMgd2FybmluZ3Mgd2hlbiBwbGFpbiBjb21waWxlcyBkb24ndC4KK200X2RlZmluZShbX0FDX1BST0dfT0JKQ1hYX0ddLAorW2FjX3Rlc3RfT0JKQ1hYRkxBR1M9JHtPQkpDWFhGTEFHUytzZXR9CithY19zYXZlX09CSkNYWEZMQUdTPSRPQkpDWFhGTEFHUworQUNfQ0FDSEVfQ0hFQ0sod2hldGhlciAkT0JKQ1hYIGFjY2VwdHMgLWcsIGFjX2N2X3Byb2dfb2JqY3h4X2csCisgIFthY19zYXZlX29iamN4eF93ZXJyb3JfZmxhZz0kYWNfb2JqY3h4X3dlcnJvcl9mbGFnCisgICBhY19vYmpjeHhfd2Vycm9yX2ZsYWc9eWVzCisgICBhY19jdl9wcm9nX29iamN4eF9nPW5vCisgICBPQkpDWFhGTEFHUz0iLWciCisgICBfQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTSgpXSwKKyAgICAgW2FjX2N2X3Byb2dfb2JqY3h4X2c9eWVzXSwKKyAgICAgW09CSkNYWEZMQUdTPSIiCisgICAgICBfQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTSgpXSwKKwlbXSwKKwlbYWNfb2JqY3h4X3dlcnJvcl9mbGFnPSRhY19zYXZlX29iamN4eF93ZXJyb3JfZmxhZworCSBPQkpDWFhGTEFHUz0iLWciCisJIF9BQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKCldLAorCSAgIFthY19jdl9wcm9nX29iamN4eF9nPXllc10pXSldKQorICAgYWNfb2JqY3h4X3dlcnJvcl9mbGFnPSRhY19zYXZlX29iamN4X3dlcnJvcl9mbGFnXSkKK2lmIHRlc3QgIiRhY190ZXN0X09CSkNYWEZMQUdTIiA9IHNldDsgdGhlbgorICBPQkpDWFhGTEFHUz0kYWNfc2F2ZV9PQkpDWFhGTEFHUworZWxpZiB0ZXN0ICRhY19jdl9wcm9nX29iamN4eF9nID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIiRHT0JKQ1hYIiA9IHllczsgdGhlbgorICAgIE9CSkNYWEZMQUdTPSItZyAtTzIiCisgIGVsc2UKKyAgICBPQkpDWFhGTEFHUz0iLWciCisgIGZpCitlbHNlCisgIGlmIHRlc3QgIiRHT0JKQ1hYIiA9IHllczsgdGhlbgorICAgIE9CSkNYWEZMQUdTPSItTzIiCisgIGVsc2UKKyAgICBPQkpDWFhGTEFHUz0KKyAgZmkKK2ZpW11kbmwKK10pIyBfQUNfUFJPR19PQkpDWFhfRworCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgNC4gQ29tcGlsZXJzJyBjaGFyYWN0ZXJpc3RpY3MuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKyMgNGEuIEMgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLiAgIworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisKKworIyBfQUNfUFJPR19DQ19DODkgKFtBQ1RJT04tSUYtQVZBSUxBQkxFXSwgW0FDVElPTi1JRi1VTkFWQUlMQUJMRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSWYgdGhlIEMgY29tcGlsZXIgaXMgbm90IGluIEFOU0kgQzg5IChJU08gQzkwKSBtb2RlIGJ5IGRlZmF1bHQsIHRyeQorIyB0byBhZGQgYW4gb3B0aW9uIHRvIG91dHB1dCB2YXJpYWJsZSBDQyB0byBtYWtlIGl0IHNvLiAgVGhpcyBtYWNybworIyB0cmllcyB2YXJpb3VzIG9wdGlvbnMgdGhhdCBzZWxlY3QgQU5TSSBDODkgb24gc29tZSBzeXN0ZW0gb3IKKyMgYW5vdGhlci4gIEl0IGNvbnNpZGVycyB0aGUgY29tcGlsZXIgdG8gYmUgaW4gQU5TSSBDODkgbW9kZSBpZiBpdAorIyBoYW5kbGVzIGZ1bmN0aW9uIHByb3RvdHlwZXMgY29ycmVjdGx5LgorQUNfREVGVU4oW19BQ19QUk9HX0NDX0M4OV0sCitbX0FDX0NfU1REX1RSWShbYzg5XSwKK1tbI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKy8qIE1vc3Qgb2YgdGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgc3RvbGVuIGZyb20gUkNTIDUuNydzIHNyYy9jb25mLnNoLiAgKi8KK3N0cnVjdCBidWYgeyBpbnQgeDsgfTsKK0ZJTEUgKiAoKnJjc29wZW4pIChzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCk7CitzdGF0aWMgY2hhciAqZSAocCwgaSkKKyAgICAgY2hhciAqKnA7CisgICAgIGludCBpOworeworICByZXR1cm4gcFtpXTsKK30KK3N0YXRpYyBjaGFyICpmIChjaGFyICogKCpnKSAoY2hhciAqKiwgaW50KSwgY2hhciAqKnAsIC4uLikKK3sKKyAgY2hhciAqczsKKyAgdmFfbGlzdCB2OworICB2YV9zdGFydCAodixwKTsKKyAgcyA9IGcgKHAsIHZhX2FyZyAodixpbnQpKTsKKyAgdmFfZW5kICh2KTsKKyAgcmV0dXJuIHM7Cit9CisKKy8qIE9TRiA0LjAgQ29tcGFxIGNjIGlzIHNvbWUgc29ydCBvZiBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LiAgSXQgaGFzCisgICBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBzdHVmZiwgYnV0IG5vdCAnXHhISCcgaGV4IGNoYXJhY3RlciBjb25zdGFudHMuCisgICBUaGVzZSBkb24ndCBwcm92b2tlIGFuIGVycm9yIHVuZm9ydHVuYXRlbHksIGluc3RlYWQgYXJlIHNpbGVudGx5IHRyZWF0ZWQKKyAgIGFzICd4Jy4gIFRoZSBmb2xsb3dpbmcgaW5kdWNlcyBhbiBlcnJvciwgdW50aWwgLXN0ZCBpcyBhZGRlZCB0byBnZXQKKyAgIHByb3BlciBBTlNJIG1vZGUuICBDdXJpb3VzbHkgJ1x4MDAnIT0neCcgYWx3YXlzIGNvbWVzIG91dCB0cnVlLCBmb3IgYW4KKyAgIGFycmF5IHNpemUgYXQgbGVhc3QuICBJdCdzIG5lY2Vzc2FyeSB0byB3cml0ZSAnXHgwMCc9PTAgdG8gZ2V0IHNvbWV0aGluZworICAgdGhhdCdzIHRydWUgb25seSB3aXRoIC1zdGQuICAqLworaW50IG9zZjRfY2NfYXJyYXkgWydceDAwJyA9PSAwID8gMSA6IC0xXTsKKworLyogSUJNIEMgNiBmb3IgQUlYIGlzIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQsIGJ1dCBpdCByZXBsYWNlcyBtYWNybyBwYXJhbWV0ZXJzCisgICBpbnNpZGUgc3RyaW5ncyBhbmQgY2hhcmFjdGVyIGNvbnN0YW50cy4gICovCisjZGVmaW5lIEZPTyh4KSAneCcKK2ludCB4bGM2X2NjX2FycmF5W0ZPTyhhKSA9PSAneCcgPyAxIDogLTFdOworCitpbnQgdGVzdCAoaW50IGksIGRvdWJsZSB4KTsKK3N0cnVjdCBzMSB7aW50ICgqZikgKGludCBhKTt9Oworc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307CitpbnQgcGFpcm5hbWVzIChpbnQsIGNoYXIgKiosIEZJTEUgKigqKShzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCksIGludCwgaW50KTsKK2ludCBhcmdjOworY2hhciAqKmFyZ3Y7XV0sCitbW3JldHVybiBmIChlLCBhcmd2LCAwKSAhPSBhcmd2WzBdICB8fCAgZiAoZSwgYXJndiwgMSkgIT0gYXJndlsxXTtdXSwKK2RubCBEb24ndCB0cnkgZ2NjIC1hbnNpOyB0aGF0IHR1cm5zIG9mZiB1c2VmdWwgZXh0ZW5zaW9ucyBhbmQKK2RubCBicmVha3Mgc29tZSBzeXN0ZW1zJyBoZWFkZXIgZmlsZXMuCitkbmwgQUlYIGNpcmNhIDIwMDMJLXFsYW5nbHZsPWV4dGM4OQorZG5sIG9sZCBBSVgJCS1xbGFuZ2x2bD1hbnNpCitkbmwgVWx0cml4LCBPU0YvMSwgVHJ1NjQJLXN0ZAorZG5sIEhQLVVYIDEwLjIwIGFuZCBsYXRlcgktQWUKK2RubCBIUC1VWCBvbGRlciB2ZXJzaW9ucwktQWEgLURfSFBVWF9TT1VSQ0UKK2RubCBTVlI0CQkJLVhjIC1EX19FWFRFTlNJT05TX18KK1stcWxhbmdsdmw9ZXh0Yzg5IC1xbGFuZ2x2bD1hbnNpIC1zdGQgXAorCS1BZSAiLUFhIC1EX0hQVVhfU09VUkNFIiAiLVhjIC1EX19FWFRFTlNJT05TX18iXSwgWyQxXSwgWyQyXSlbXWRubAorXSkjIF9BQ19QUk9HX0NDX0M4OQorCisKKyMgX0FDX0NfU1REX1RSWShTVEFOREFSRCwgVEVTVC1QUk9MT0dVRSwgVEVTVC1CT0RZLCBPUFRJT04tTElTVCwKKyMJCUFDVElPTi1JRi1BVkFJTEFCTEUsIEFDVElPTi1JRi1VTkFWQUlMQUJMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgd2hldGhlciB0aGUgQyBjb21waWxlciBhY2NlcHRzIGZlYXR1cmVzIG9mIFNUQU5EQVJEIChlLmcgYGM4OScsIGBjOTknKQorIyBieSB0cnlpbmcgdG8gY29tcGlsZSBhIHByb2dyYW0gb2YgVEVTVC1QUk9MT0dVRSBhbmQgVEVTVC1CT0RZLiAgSWYgdGhpcyBmYWlscywKKyMgdHJ5IGFnYWluIHdpdGggZWFjaCBjb21waWxlciBvcHRpb24gaW4gdGhlIHNwYWNlLXNlcGFyYXRlZCBPUFRJT04tTElTVDsgaWYgb25lCisjIGhlbHBzLCBhcHBlbmQgaXQgdG8gQ0MuICBJZiBldmVudHVhbGx5IHN1Y2Nlc3NmdWwsIHJ1biBBQ1RJT04tSUYtQVZBSUxBQkxFLAorIyBlbHNlIEFDVElPTi1JRi1VTkFWQUlMQUJMRS4KK0FDX0RFRlVOKFtfQUNfQ19TVERfVFJZXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gXW00X3RyYW5zbGl0KCQxLCBbY10sIFtDXSkpCitBQ19DQUNIRV9WQUwoYWNfY3ZfcHJvZ19jY18kMSwKK1thY19jdl9wcm9nX2NjXyQxPW5vCithY19zYXZlX0NDPSRDQworQUNfTEFOR19DT05GVEVTVChbQUNfTEFOR19QUk9HUkFNKFskMl0sIFskM10pXSkKK2ZvciBhY19hcmcgaW4gJycgJDQKK2RvCisgIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgorICBfQUNfQ09NUElMRV9JRkVMU0UoW10sIFthY19jdl9wcm9nX2NjXyQxPSRhY19hcmddKQorICB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfJDEiICE9ICJ4bm8iICYmIGJyZWFrCitkb25lCitybSAtZiBjb25mdGVzdC4kYWNfZXh0CitDQz0kYWNfc2F2ZV9DQworXSkjIEFDX0NBQ0hFX1ZBTAorY2FzZSAieCRhY19jdl9wcm9nX2NjXyQxIiBpbgorICB4KQorICAgIEFDX01TR19SRVNVTFQoW25vbmUgbmVlZGVkXSkgOzsKKyAgeG5vKQorICAgIEFDX01TR19SRVNVTFQoW3Vuc3VwcG9ydGVkXSkgOzsKKyAgKikKKyAgICBDQz0iJENDICRhY19jdl9wcm9nX2NjXyQxIgorICAgIEFDX01TR19SRVNVTFQoWyRhY19jdl9wcm9nX2NjXyQxXSkgOzsKK2VzYWMKK0FTX0lGKFt0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfJDEiICE9IHhub10sIFskNV0sIFskNl0pCitdKSMgX0FDX0NfU1REX1RSWQorCisKKyMgX0FDX1BST0dfQ0NfQzk5IChbQUNUSU9OLUlGLUFWQUlMQUJMRV0sIFtBQ1RJT04tSUYtVU5BVkFJTEFCTEVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmIHRoZSBDIGNvbXBpbGVyIGlzIG5vdCBpbiBJU08gQzk5IG1vZGUgYnkgZGVmYXVsdCwgdHJ5IHRvIGFkZCBhbgorIyBvcHRpb24gdG8gb3V0cHV0IHZhcmlhYmxlIENDIHRvIG1ha2UgaXQgc28uICBUaGlzIG1hY3JvIHRyaWVzCisjIHZhcmlvdXMgb3B0aW9ucyB0aGF0IHNlbGVjdCBJU08gQzk5IG9uIHNvbWUgc3lzdGVtIG9yIGFub3RoZXIuICBJdAorIyBjb25zaWRlcnMgdGhlIGNvbXBpbGVyIHRvIGJlIGluIElTTyBDOTkgbW9kZSBpZiBpdCBoYW5kbGVzIF9Cb29sLAorIyAvLyBjb21tZW50cywgZmxleGlibGUgYXJyYXkgbWVtYmVycywgaW5saW5lLCBsb25nIGxvbmcgaW50LCBtaXhlZAorIyBjb2RlIGFuZCBkZWNsYXJhdGlvbnMsIG5hbWVkIGluaXRpYWxpemF0aW9uIG9mIHN0cnVjdHMsIHJlc3RyaWN0LAorIyB2YV9jb3B5LCB2YXJhcmdzIG1hY3JvcywgdmFyaWFibGUgZGVjbGFyYXRpb25zIGluIGZvciBsb29wcyBhbmQKKyMgdmFyaWFibGUgbGVuZ3RoIGFycmF5cy4KK0FDX0RFRlVOKFtfQUNfUFJPR19DQ19DOTldLAorW19BQ19DX1NURF9UUlkoW2M5OV0sCitbWyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisvLyBDaGVjayB2YXJhcmdzIG1hY3Jvcy4gIFRoZXNlIGV4YW1wbGVzIGFyZSB0YWtlbiBmcm9tIEM5OSA2LjEwLjMuNS4KKyNkZWZpbmUgZGVidWcoLi4uKSBmcHJpbnRmIChzdGRlcnIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBzaG93bGlzdCguLi4pIHB1dHMgKCNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgcmVwb3J0KHRlc3QsLi4uKSAoKHRlc3QpID8gcHV0cyAoI3Rlc3QpIDogcHJpbnRmIChfX1ZBX0FSR1NfXykpCitzdGF0aWMgdm9pZAordGVzdF92YXJhcmdzX21hY3JvcyAodm9pZCkKK3sKKyAgaW50IHggPSAxMjM0OworICBpbnQgeSA9IDU2Nzg7CisgIGRlYnVnICgiRmxhZyIpOworICBkZWJ1ZyAoIlggPSAlZFxuIiwgeCk7CisgIHNob3dsaXN0IChUaGUgZmlyc3QsIHNlY29uZCwgYW5kIHRoaXJkIGl0ZW1zLik7CisgIHJlcG9ydCAoeD55LCAieCBpcyAlZCBidXQgeSBpcyAlZCIsIHgsIHkpOworfQorCisvLyBDaGVjayBsb25nIGxvbmcgdHlwZXMuCisjZGVmaW5lIEJJRzY0IDE4NDQ2NzQ0MDczNzA5NTUxNjE1dWxsCisjZGVmaW5lIEJJRzMyIDQyOTQ5NjcyOTV1bAorI2RlZmluZSBCSUdfT0sgKEJJRzY0IC8gQklHMzIgPT0gNDI5NDk2NzI5N3VsbCAmJiBCSUc2NCAlIEJJRzMyID09IDApCisjaWYgIUJJR19PSworICB5b3VyIHByZXByb2Nlc3NvciBpcyBicm9rZW47CisjZW5kaWYKKyNpZiBCSUdfT0sKKyNlbHNlCisgIHlvdXIgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbjsKKyNlbmRpZgorc3RhdGljIGxvbmcgbG9uZyBpbnQgYmlnbnVtID0gLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHViaWdudW0gPSBCSUc2NDsKKworc3RydWN0IGluY29tcGxldGVfYXJyYXkKK3sKKyAgaW50IGRhdGFzaXplOworICBkb3VibGUgZGF0YVtdOworfTsKKworc3RydWN0IG5hbWVkX2luaXQgeworICBpbnQgbnVtYmVyOworICBjb25zdCB3Y2hhcl90ICpuYW1lOworICBkb3VibGUgYXZlcmFnZTsKK307CisKK3R5cGVkZWYgY29uc3QgY2hhciAqY2NwOworCitzdGF0aWMgaW5saW5lIGludAordGVzdF9yZXN0cmljdCAoY2NwIHJlc3RyaWN0IHRleHQpCit7CisgIC8vIFNlZSBpZiBDKystc3R5bGUgY29tbWVudHMgd29yay4KKyAgLy8gSXRlcmF0ZSB0aHJvdWdoIGl0ZW1zIHZpYSB0aGUgcmVzdHJpY3RlZCBwb2ludGVyLgorICAvLyBBbHNvIGNoZWNrIGZvciBkZWNsYXJhdGlvbnMgaW4gZm9yIGxvb3BzLgorICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgKih0ZXh0K2kpICE9ICdcMCc7ICsraSkKKyAgICBjb250aW51ZTsKKyAgcmV0dXJuIDA7Cit9CisKKy8vIENoZWNrIHZhcmFyZ3MgYW5kIHZhX2NvcHkuCitzdGF0aWMgdm9pZAordGVzdF92YXJhcmdzIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdzOworICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKyAgdmFfbGlzdCBhcmdzX2NvcHk7CisgIHZhX2NvcHkgKGFyZ3NfY29weSwgYXJncyk7CisKKyAgY29uc3QgY2hhciAqc3RyOworICBpbnQgbnVtYmVyOworICBmbG9hdCBmbnVtYmVyOworCisgIHdoaWxlICgqZm9ybWF0KQorICAgIHsKKyAgICAgIHN3aXRjaCAoKmZvcm1hdCsrKQorCXsKKwljYXNlICdzJzogLy8gc3RyaW5nCisJICBzdHIgPSB2YV9hcmcgKGFyZ3NfY29weSwgY29uc3QgY2hhciAqKTsKKwkgIGJyZWFrOworCWNhc2UgJ2QnOiAvLyBpbnQKKwkgIG51bWJlciA9IHZhX2FyZyAoYXJnc19jb3B5LCBpbnQpOworCSAgYnJlYWs7CisJY2FzZSAnZic6IC8vIGZsb2F0CisJICBmbnVtYmVyID0gdmFfYXJnIChhcmdzX2NvcHksIGRvdWJsZSk7CisJICBicmVhazsKKwlkZWZhdWx0OgorCSAgYnJlYWs7CisJfQorICAgIH0KKyAgdmFfZW5kIChhcmdzX2NvcHkpOworICB2YV9lbmQgKGFyZ3MpOworfQorXV0sCitbWworICAvLyBDaGVjayBib29sLgorICBfQm9vbCBzdWNjZXNzID0gZmFsc2U7CisKKyAgLy8gQ2hlY2sgcmVzdHJpY3QuCisgIGlmICh0ZXN0X3Jlc3RyaWN0ICgiU3RyaW5nIGxpdGVyYWwiKSA9PSAwKQorICAgIHN1Y2Nlc3MgPSB0cnVlOworICBjaGFyICpyZXN0cmljdCBuZXd2YXIgPSAiQW5vdGhlciBzdHJpbmciOworCisgIC8vIENoZWNrIHZhcmFyZ3MuCisgIHRlc3RfdmFyYXJncyAoInMsIGQnIGYgLiIsICJzdHJpbmciLCA2NSwgMzQuMjM0KTsKKyAgdGVzdF92YXJhcmdzX21hY3JvcyAoKTsKKworICAvLyBDaGVjayBmbGV4aWJsZSBhcnJheSBtZW1iZXJzLgorICBzdHJ1Y3QgaW5jb21wbGV0ZV9hcnJheSAqaWEgPQorICAgIG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgaW5jb21wbGV0ZV9hcnJheSkgKyAoc2l6ZW9mIChkb3VibGUpICogMTApKTsKKyAgaWEtPmRhdGFzaXplID0gMTA7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgaWEtPmRhdGFzaXplOyArK2kpCisgICAgaWEtPmRhdGFbaV0gPSBpICogMS4yMzQ7CisKKyAgLy8gQ2hlY2sgbmFtZWQgaW5pdGlhbGl6ZXJzLgorICBzdHJ1Y3QgbmFtZWRfaW5pdCBuaSA9IHsKKyAgICAubnVtYmVyID0gMzQsCisgICAgLm5hbWUgPSBMIlRlc3Qgd2lkZSBzdHJpbmciLAorICAgIC5hdmVyYWdlID0gNTQzLjM0MzQzLAorICB9OworCisgIG5pLm51bWJlciA9IDU4OworCisgIGludCBkeW5hbWljX2FycmF5W25pLm51bWJlcl07CisgIGR5bmFtaWNfYXJyYXlbbmkubnVtYmVyIC0gMV0gPSA1NDM7CisKKyAgLy8gd29yayBhcm91bmQgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmdzCisgIHJldHVybiAoIXN1Y2Nlc3MgfHwgYmlnbnVtID09IDBMTCB8fCB1YmlnbnVtID09IDB1TEwgfHwgbmV3dmFyWzBdID09ICd4JworCSAgfHwgZHluYW1pY19hcnJheVtuaS5udW1iZXIgLSAxXSAhPSA1NDMpOworXV0sCitkbmwgVHJ5CitkbmwgR0NDCQktc3RkPWdudTk5ICh1bnVzZWQgcmVzdHJpY3RpdmUgbW9kZXM6IC1zdGQ9Yzk5IC1zdGQ9aXNvOTg5OToxOTk5KQorZG5sIEFJWAkJLXFsYW5nbHZsPWV4dGM5OSAodW51c2VkIHJlc3RyaWN0aXZlIG1vZGU6IC1xbGFuZ2x2bD1zdGRjOTkpCitkbmwgSFAgY2MJLUFDOTkKK2RubCBJbnRlbCBJQ0MJLXN0ZD1jOTksIC1jOTkgKGRlcHJlY2F0ZWQpCitkbmwgSVJJWAktYzk5CitkbmwgU29sYXJpcwkteGM5OT1hbGwgKEZvcnRlIERldmVsb3BlciA3IEMgbWlzaGFuZGxlcyAteGM5OSBvbiBTb2xhcmlzIDksCitkbmwJCWFzIGl0IGluY29ycmVjdGx5IGFzc3VtZXMgQzk5IHNlbWFudGljcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMpCitkbmwgVHJ1NjQJLWM5OQorZG5sIHdpdGggZXh0ZW5kZWQgbW9kZXMgYmVpbmcgdHJpZWQgZmlyc3QuCitbWy1zdGQ9Z251OTkgLXN0ZD1jOTkgLWM5OSAtQUM5OSAteGM5OT1hbGwgLXFsYW5nbHZsPWV4dGM5OV1dLCBbJDFdLCBbJDJdKVtdZG5sCitdKSMgX0FDX1BST0dfQ0NfQzk5CisKKworIyBBQ19QUk9HX0NDX0M4OQorIyAtLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX1BST0dfQ0NfQzg5XSwKK1sgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCisgIF9BQ19QUk9HX0NDX0M4OQorXSkKKworCisjIEFDX1BST0dfQ0NfQzk5CisjIC0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfUFJPR19DQ19DOTldLAorWyBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKyAgX0FDX1BST0dfQ0NfQzk5CitdKQorCisKKyMgQUNfUFJPR19DQ19TVERDCisjIC0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX1BST0dfQ0NfU1REQ10sCitbIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorICBBU19DQVNFKFskYWNfY3ZfcHJvZ19jY19zdGRjXSwKKyAgICBbbm9dLCBbYWNfY3ZfcHJvZ19jY19jOTk9bm87IGFjX2N2X3Byb2dfY2NfYzg5PW5vXSwKKwkgIFtfQUNfUFJPR19DQ19DOTkoW2FjX2N2X3Byb2dfY2Nfc3RkYz0kYWNfY3ZfcHJvZ19jY19jOTldLAorCSAgICAgW19BQ19QUk9HX0NDX0M4OShbYWNfY3ZfcHJvZ19jY19zdGRjPSRhY19jdl9wcm9nX2NjX2M4OV0sCisJCQkgICAgICBbYWNfY3ZfcHJvZ19jY19zdGRjPW5vXSldKV0pCisgIEFDX01TR19DSEVDS0lORyhbZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBTdGFuZGFyZCBDXSkKKyAgQUNfQ0FDSEVfVkFMKFthY19jdl9wcm9nX2NjX3N0ZGNdLCBbXSkKKyAgQVNfQ0FTRShbJGFjX2N2X3Byb2dfY2Nfc3RkY10sCisgICAgW25vXSwgW0FDX01TR19SRVNVTFQoW3Vuc3VwcG9ydGVkXSldLAorICAgIFsnJ10sIFtBQ19NU0dfUkVTVUxUKFtub25lIG5lZWRlZF0pXSwKKwkgIFtBQ19NU0dfUkVTVUxUKFskYWNfY3ZfcHJvZ19jY19zdGRjXSldKQorXSkKKworCisjIEFDX0NfQkFDS1NMQVNIX0EKKyMgLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX0NfQkFDS1NMQVNIX0FdLAorWworICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBiYWNrc2xhc2gtYSB3b3JrcyBpbiBzdHJpbmdzXSwgYWNfY3ZfY19iYWNrc2xhc2hfYSwKKyAgIFtBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLAorICAgICBbWworI2lmICdcYScgPT0gJ2EnCisgICAgICBzeW50YXggZXJyb3I7CisjZW5kaWYKKyAgICAgIGNoYXIgYnVmWydcYScgPT0gJ2EnID8gLTEgOiAxXTsKKyAgICAgIGJ1ZlswXSA9ICdcYSc7CisgICAgICByZXR1cm4gYnVmWzBdICE9ICJcYSJbMF07CisgICAgIF1dKV0sCisgICAgIFthY19jdl9jX2JhY2tzbGFzaF9hPXllc10sCisgICAgIFthY19jdl9jX2JhY2tzbGFzaF9hPW5vXSldKQorICBpZiB0ZXN0ICRhY19jdl9jX2JhY2tzbGFzaF9hID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKEhBVkVfQ19CQUNLU0xBU0hfQSwgMSwKKyAgICAgIFtEZWZpbmUgaWYgYmFja3NsYXNoLWEgd29ya3MgaW4gQyBzdHJpbmdzLl0pCisgIGZpCitdKQorCisKKyMgQUNfQ19DUk9TUworIyAtLS0tLS0tLS0tCisjIEhhcyBiZWVuIG1lcmdlZCBpbnRvIEFDX1BST0dfQ0MuCitBVV9ERUZVTihbQUNfQ19DUk9TU10sIFtdKQorCisKKyMgQUNfQ19DSEFSX1VOU0lHTkVECisjIC0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX0NfQ0hBUl9VTlNJR05FRF0sCitbQUhfVkVSQkFUSU0oW19fQ0hBUl9VTlNJR05FRF9fXSwKK1svKiBEZWZpbmUgdG8gMSBpZiB0eXBlIGBjaGFyJyBpcyB1bnNpZ25lZCBhbmQgeW91IGFyZSBub3QgdXNpbmcgZ2NjLiAgKi8KKyNpZm5kZWYgX19DSEFSX1VOU0lHTkVEX18KKyMgdW5kZWYgX19DSEFSX1VOU0lHTkVEX18KKyNlbmRpZl0pZG5sCitBQ19DQUNIRV9DSEVDSyh3aGV0aGVyIGNoYXIgaXMgdW5zaWduZWQsIGFjX2N2X2NfY2hhcl91bnNpZ25lZCwKK1tBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19CT09MX0NPTVBJTEVfVFJZKFtBQ19JTkNMVURFU19ERUZBVUxUKFtdKV0sCisJCQkJCSAgICAgWygoY2hhcikgLTEpIDwgMF0pXSwKKwkJICAgYWNfY3ZfY19jaGFyX3Vuc2lnbmVkPW5vLCBhY19jdl9jX2NoYXJfdW5zaWduZWQ9eWVzKV0pCitpZiB0ZXN0ICRhY19jdl9jX2NoYXJfdW5zaWduZWQgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgIEFDX0RFRklORShfX0NIQVJfVU5TSUdORURfXykKK2ZpCitdKSMgQUNfQ19DSEFSX1VOU0lHTkVECisKKworIyBBQ19DX0JJR0VORElBTiAoW0FDVElPTi1JRi1UUlVFXSwgW0FDVElPTi1JRi1GQUxTRV0sIFtBQ1RJT04tSUYtVU5LTk9XTl0sCisjICAgICAgICAgICAgICAgICBbQUNUSU9OLUlGLVVOSVZFUlNBTF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19DX0JJR0VORElBTl0sCitbQUhfVkVSQkFUSU0oW1dPUkRTX0JJR0VORElBTl0sCitbLyogRGVmaW5lIFdPUkRTX0JJR0VORElBTiB0byAxIGlmIHlvdXIgcHJvY2Vzc29yIHN0b3JlcyB3b3JkcyB3aXRoIHRoZSBtb3N0CisgICBzaWduaWZpY2FudCBieXRlIGZpcnN0IChsaWtlIE1vdG9yb2xhIGFuZCBTUEFSQywgdW5saWtlIEludGVsKS4gKi8KKyNpZiBkZWZpbmVkIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRAorIyBpZiBkZWZpbmVkIF9fQklHX0VORElBTl9fCisjICBkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEKKyMgZW5kaWYKKyNlbHNlCisjIGlmbmRlZiBXT1JEU19CSUdFTkRJQU4KKyMgIHVuZGVmIFdPUkRTX0JJR0VORElBTgorIyBlbmRpZgorI2VuZGlmXSlkbmwKKyBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbl0sIFthY19jdl9jX2JpZ2VuZGlhbl0sCisgICBbYWNfY3ZfY19iaWdlbmRpYW49dW5rbm93bgorICAgICMgU2VlIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHVuaXZlcnNhbCBjb21waWxlci4KKyAgICBBQ19DT01QSUxFX0lGRUxTRSgKKwkgW0FDX0xBTkdfU09VUkNFKAorCSAgICBbWyNpZm5kZWYgX19BUFBMRV9DQ19fCisJICAgICAgIG5vdCBhIHVuaXZlcnNhbCBjYXBhYmxlIGNvbXBpbGVyCisJICAgICAjZW5kaWYKKwkgICAgIHR5cGVkZWYgaW50IGR1bW15OworCSAgICBdXSldLAorCSBbCisJIyBDaGVjayBmb3IgcG90ZW50aWFsIC1hcmNoIGZsYWdzLiAgSXQgaXMgbm90IHVuaXZlcnNhbCB1bmxlc3MKKwkjIHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gLWFyY2ggZmxhZ3Mgd2l0aCBkaWZmZXJlbnQgdmFsdWVzLgorCWFjX2FyY2g9CisJYWNfcHJldj0KKwlmb3IgYWNfd29yZCBpbiAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1M7IGRvCisJIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorCSAgIGNhc2UgJGFjX3dvcmQgaW4KKwkgICAgIGk/ODYgfCB4ODZfNjQgfCBwcGMgfCBwcGM2NCkKKwkgICAgICAgaWYgdGVzdCAteiAiJGFjX2FyY2giIHx8IHRlc3QgIiRhY19hcmNoIiA9ICIkYWNfd29yZCI7IHRoZW4KKwkJIGFjX2FyY2g9JGFjX3dvcmQKKwkgICAgICAgZWxzZQorCQkgYWNfY3ZfY19iaWdlbmRpYW49dW5pdmVyc2FsCisJCSBicmVhaworCSAgICAgICBmaQorCSAgICAgICA7OworCSAgIGVzYWMKKwkgICBhY19wcmV2PQorCSBlbGlmIHRlc3QgIngkYWNfd29yZCIgPSAieC1hcmNoIjsgdGhlbgorCSAgIGFjX3ByZXY9YXJjaAorCSBmaQorICAgICAgIGRvbmVdKQorICAgIGlmIHRlc3QgJGFjX2N2X2NfYmlnZW5kaWFuID0gdW5rbm93bjsgdGhlbgorICAgICAgIyBTZWUgaWYgc3lzL3BhcmFtLmggZGVmaW5lcyB0aGUgQllURV9PUkRFUiBtYWNyby4KKyAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorCVtBQ19MQU5HX1BST0dSQU0oCisJICAgW1sjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisJICAgICAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisJICAgXV0sCisJICAgW1sjaWYgISAoZGVmaW5lZCBCWVRFX09SREVSICYmIGRlZmluZWQgQklHX0VORElBTiBcCisJCSAgICAgJiYgZGVmaW5lZCBMSVRUTEVfRU5ESUFOICYmIEJZVEVfT1JERVIgJiYgQklHX0VORElBTiBcCisJCSAgICAgJiYgTElUVExFX0VORElBTikKKwkgICAgICBib2d1cyBlbmRpYW4gbWFjcm9zCisJICAgICAjZW5kaWYKKwkgICBdXSldLAorCVsjIEl0IGRvZXM7IG5vdyBzZWUgd2hldGhlciBpdCBkZWZpbmVkIHRvIEJJR19FTkRJQU4gb3Igbm90LgorCSBBQ19DT01QSUxFX0lGRUxTRSgKKwkgICBbQUNfTEFOR19QUk9HUkFNKAorCSAgICAgIFtbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCQkjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisJICAgICAgXV0sCisJICAgICAgW1sjaWYgQllURV9PUkRFUiAhPSBCSUdfRU5ESUFOCisJCSBub3QgYmlnIGVuZGlhbgorCQkjZW5kaWYKKwkgICAgICBdXSldLAorCSAgIFthY19jdl9jX2JpZ2VuZGlhbj15ZXNdLAorCSAgIFthY19jdl9jX2JpZ2VuZGlhbj1ub10pXSkKKyAgICBmaQorICAgIGlmIHRlc3QgJGFjX2N2X2NfYmlnZW5kaWFuID0gdW5rbm93bjsgdGhlbgorICAgICAgIyBTZWUgaWYgPGxpbWl0cy5oPiBkZWZpbmVzIF9MSVRUTEVfRU5ESUFOIG9yIF9CSUdfRU5ESUFOIChlLmcuLCBTb2xhcmlzKS4KKyAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorCVtBQ19MQU5HX1BST0dSQU0oCisJICAgW1sjaW5jbHVkZSA8bGltaXRzLmg+CisJICAgXV0sCisJICAgW1sjaWYgISAoZGVmaW5lZCBfTElUVExFX0VORElBTiB8fCBkZWZpbmVkIF9CSUdfRU5ESUFOKQorCSAgICAgIGJvZ3VzIGVuZGlhbiBtYWNyb3MKKwkgICAgICNlbmRpZgorCSAgIF1dKV0sCisJWyMgSXQgZG9lczsgbm93IHNlZSB3aGV0aGVyIGl0IGRlZmluZWQgdG8gX0JJR19FTkRJQU4gb3Igbm90LgorCSBBQ19DT01QSUxFX0lGRUxTRSgKKwkgICBbQUNfTEFOR19QUk9HUkFNKAorCSAgICAgIFtbI2luY2x1ZGUgPGxpbWl0cy5oPgorCSAgICAgIF1dLAorCSAgICAgIFtbI2lmbmRlZiBfQklHX0VORElBTgorCQkgbm90IGJpZyBlbmRpYW4KKwkJI2VuZGlmCisJICAgICAgXV0pXSwKKwkgICBbYWNfY3ZfY19iaWdlbmRpYW49eWVzXSwKKwkgICBbYWNfY3ZfY19iaWdlbmRpYW49bm9dKV0pCisgICAgZmkKKyAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KKyAgICAgICMgQ29tcGlsZSBhIHRlc3QgcHJvZ3JhbS4KKyAgICAgIEFDX1JVTl9JRkVMU0UoCisJW0FDX0xBTkdfUFJPR1JBTShbQUNfSU5DTFVERVNfREVGQVVMVF0sCisJICAgW1sKKwkgICAgIC8qIEFyZSB3ZSBsaXR0bGUgb3IgYmlnIGVuZGlhbj8gIEZyb20gSGFyYmlzb24mU3RlZWxlLiAgKi8KKwkgICAgIHVuaW9uCisJICAgICB7CisJICAgICAgIGxvbmcgaW50IGw7CisJICAgICAgIGNoYXIgY1tzaXplb2YgKGxvbmcgaW50KV07CisJICAgICB9IHU7CisJICAgICB1LmwgPSAxOworCSAgICAgcmV0dXJuIHUuY1tzaXplb2YgKGxvbmcgaW50KSAtIDFdID09IDE7CisJICAgXV0pXSwKKwlbYWNfY3ZfY19iaWdlbmRpYW49bm9dLAorCVthY19jdl9jX2JpZ2VuZGlhbj15ZXNdLAorCVsjIFRyeSB0byBndWVzcyBieSBncmVwcGluZyB2YWx1ZXMgZnJvbSBhbiBvYmplY3QgZmlsZS4KKwkgQUNfQ09NUElMRV9JRkVMU0UoCisJICAgW0FDX0xBTkdfUFJPR1JBTSgKKwkgICAgICBbW3Nob3J0IGludCBhc2NpaV9tbVtdID0KKwkJICB7IDB4NDI0OSwgMHg0NzY1LCAweDZFNDQsIDB4Njk2MSwgMHg2RTUzLCAweDc5NTMsIDAgfTsKKwkJc2hvcnQgaW50IGFzY2lpX2lpW10gPQorCQkgIHsgMHg2OTRDLCAweDU0NTQsIDB4NjU2QywgMHg2RTQ1LCAweDY5NDQsIDB4NkU2MSwgMCB9OworCQlpbnQgdXNlX2FzY2lpIChpbnQgaSkgeworCQkgIHJldHVybiBhc2NpaV9tbVtpXSArIGFzY2lpX2lpW2ldOworCQl9CisJCXNob3J0IGludCBlYmNkaWNfaWlbXSA9CisJCSAgeyAweDg5RDMsIDB4RTNFMywgMHg4NTkzLCAweDk1QzUsIDB4ODlDNCwgMHg5NTgxLCAwIH07CisJCXNob3J0IGludCBlYmNkaWNfbW1bXSA9CisJCSAgeyAweEMyQzksIDB4Qzc4NSwgMHg5NUM0LCAweDg5ODEsIDB4OTVFMiwgMHhBOEUyLCAwIH07CisJCWludCB1c2VfZWJjZGljIChpbnQgaSkgeworCQkgIHJldHVybiBlYmNkaWNfbW1baV0gKyBlYmNkaWNfaWlbaV07CisJCX0KKwkJZXh0ZXJuIGludCBmb287CisJICAgICAgXV0sCisJICAgICAgW1tyZXR1cm4gdXNlX2FzY2lpIChmb28pID09IHVzZV9lYmNkaWMgKGZvbyk7XV0pXSwKKwkgICBbaWYgZ3JlcCBCSUdlbkRpYW5TeVMgY29uZnRlc3QuJGFjX29iamV4dCA+L2Rldi9udWxsOyB0aGVuCisJICAgICAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCisJICAgIGZpCisJICAgIGlmIGdyZXAgTGlUVGxlRW5EaWFuIGNvbmZ0ZXN0LiRhY19vYmpleHQgPi9kZXYvbnVsbCA7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICIkYWNfY3ZfY19iaWdlbmRpYW4iID0gdW5rbm93bjsgdGhlbgorCQlhY19jdl9jX2JpZ2VuZGlhbj1ubworCSAgICAgIGVsc2UKKwkJIyBmaW5kaW5nIGJvdGggc3RyaW5ncyBpcyB1bmxpa2VseSB0byBoYXBwZW4sIGJ1dCB3aG8ga25vd3M/CisJCWFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KKwkgICAgICBmaQorCSAgICBmaV0pXSkKKyAgICBmaV0pCisgY2FzZSAkYWNfY3ZfY19iaWdlbmRpYW4gaW4gIygKKyAgIHllcykKKyAgICAgbTRfZGVmYXVsdChbJDFdLAorICAgICAgIFtBQ19ERUZJTkUoW1dPUkRTX0JJR0VORElBTl0sIDEpXSk7OyAjKAorICAgbm8pCisgICAgICQyIDs7ICMoCisgICB1bml2ZXJzYWwpCitkbmwgTm90ZSB0aGF0IEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRCBzb3J0cyBsZXNzIHRoYW4gV09SRFNfQklHRU5ESUFOOworZG5sIHRoaXMgaXMgYSBuZWNlc3NpdHkgZm9yIHByb3BlciBjb25maWcgaGVhZGVyIG9wZXJhdGlvbi4gIFdhcm4gaWYKK2RubCB0aGUgdXNlciBkaWQgbm90IHNwZWNpZnkgYSBjb25maWcgaGVhZGVyIGJ1dCBpcyByZWx5aW5nIG9uIHRoZQorZG5sIGRlZmF1bHQgYmVoYXZpb3IgZm9yIHVuaXZlcnNhbCBidWlsZHMuCisgICAgIG00X2RlZmF1bHQoWyQ0XSwKKyAgICAgICBbQUNfQ09ORklHX0NPTU1BTkRTX1BSRShbbTRfaWZzZXQoW0FIX0hFQURFUl0sIFtdLAorCSBbQUNfRElBR05PU0UoW29ic29sZXRlXSwKKwkgICBbQUNfQ19CSUdFTkRJQU4gc2hvdWxkIGJlIHVzZWQgd2l0aCBBQ19DT05GSUdfSEVBREVSU10pXSldKWRubAorCUFDX0RFRklORShbQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxEXSwxLAorCSAgW0RlZmluZSBpZiBidWlsZGluZyB1bml2ZXJzYWwgKGludGVybmFsIGhlbHBlciBtYWNybyldKV0pCisgICAgIDs7ICMoCisgICAqKQorICAgICBtNF9kZWZhdWx0KFskM10sCisgICAgICAgW0FDX01TR19FUlJPUihbdW5rbm93biBlbmRpYW5uZXNzCisgcHJlc2V0dGluZyBhY19jdl9jX2JpZ2VuZGlhbj1ubyAob3IgeWVzKSB3aWxsIGhlbHBdKV0pIDs7CisgZXNhYworXSkjIEFDX0NfQklHRU5ESUFOCisKKworIyBBQ19DX0lOTElORQorIyAtLS0tLS0tLS0tLQorIyBEbyBub3RoaW5nIGlmIHRoZSBjb21waWxlciBhY2NlcHRzIHRoZSBpbmxpbmUga2V5d29yZC4KKyMgT3RoZXJ3aXNlIGRlZmluZSBpbmxpbmUgdG8gX19pbmxpbmVfXyBvciBfX2lubGluZSBpZiBvbmUgb2YgdGhvc2Ugd29yaywKKyMgb3RoZXJ3aXNlIGRlZmluZSBpbmxpbmUgdG8gYmUgZW1wdHkuCisjCisjIEhQIEMgdmVyc2lvbiBCLjExLjExLjA0IGRvZXNuJ3QgYWxsb3cgYSB0eXBlZGVmIGFzIHRoZSByZXR1cm4gdmFsdWUgZm9yIGFuCisjIGlubGluZSBmdW5jdGlvbiwgb25seSBidWlsdGluIHR5cGVzLgorIworQU5fSURFTlRJRklFUihbaW5saW5lXSwgW0FDX0NfSU5MSU5FXSkKK0FDX0RFRlVOKFtBQ19DX0lOTElORV0sCitbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBpbmxpbmVdLCBhY19jdl9jX2lubGluZSwKK1thY19jdl9jX2lubGluZT1ubworZm9yIGFjX2t3IGluIGlubGluZSBfX2lubGluZV9fIF9faW5saW5lOyBkbworICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoCitbI2lmbmRlZiBfX2NwbHVzcGx1cwordHlwZWRlZiBpbnQgZm9vX3Q7CitzdGF0aWMgJGFjX2t3IGZvb190IHN0YXRpY19mb28gKCkge3JldHVybiAwOyB9CiskYWNfa3cgZm9vX3QgZm9vICgpIHtyZXR1cm4gMDsgfQorI2VuZGlmCitdKV0sCisJCSAgICBbYWNfY3ZfY19pbmxpbmU9JGFjX2t3XSkKKyAgdGVzdCAiJGFjX2N2X2NfaW5saW5lIiAhPSBubyAmJiBicmVhaworZG9uZQorXSkKK0FIX1ZFUkJBVElNKFtpbmxpbmVdLAorWy8qIERlZmluZSB0byBgX19pbmxpbmVfXycgb3IgYF9faW5saW5lJyBpZiB0aGF0J3Mgd2hhdCB0aGUgQyBjb21waWxlcgorICAgY2FsbHMgaXQsIG9yIHRvIG5vdGhpbmcgaWYgJ2lubGluZScgaXMgbm90IHN1cHBvcnRlZCB1bmRlciBhbnkgbmFtZS4gICovCisjaWZuZGVmIF9fY3BsdXNwbHVzCisjdW5kZWYgaW5saW5lCisjZW5kaWZdKQorY2FzZSAkYWNfY3ZfY19pbmxpbmUgaW4KKyAgaW5saW5lIHwgeWVzKSA7OworICAqKQorICAgIGNhc2UgJGFjX2N2X2NfaW5saW5lIGluCisgICAgICBubykgYWNfdmFsPTs7CisgICAgICAqKSBhY192YWw9JGFjX2N2X2NfaW5saW5lOzsKKyAgICBlc2FjCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2lmbmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBpbmxpbmUgJGFjX3ZhbAorI2VuZGlmCitfQUNFT0YKKyAgICA7OworZXNhYworXSkjIEFDX0NfSU5MSU5FCisKKworIyBBQ19DX0NPTlNUCisjIC0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19DX0NPTlNUXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yIGFuIEFOU0kgQy1jb25mb3JtaW5nIGNvbnN0XSwgYWNfY3ZfY19jb25zdCwKK1tBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLAorW1svKiBGSVhNRTogSW5jbHVkZSB0aGUgY29tbWVudHMgc3VnZ2VzdGVkIGJ5IFBhdWwuICovCisjaWZuZGVmIF9fY3BsdXNwbHVzCisgIC8qIFVsdHJpeCBtaXBzIGNjIHJlamVjdHMgdGhpcy4gICovCisgIHR5cGVkZWYgaW50IGNoYXJzZXRbMl07CisgIGNvbnN0IGNoYXJzZXQgY3M7CisgIC8qIFN1bk9TIDQuMS4xIGNjIHJlamVjdHMgdGhpcy4gICovCisgIGNoYXIgY29uc3QgKmNvbnN0ICpwY3BjYzsKKyAgY2hhciAqKnBwYzsKKyAgLyogTkVDIFNWUjQuMC4yIG1pcHMgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgc3RydWN0IHBvaW50IHtpbnQgeCwgeTt9OworICBzdGF0aWMgc3RydWN0IHBvaW50IGNvbnN0IHplcm8gPSB7MCwwfTsKKyAgLyogQUlYIFhMIEMgMS4wMi4wLjAgcmVqZWN0cyB0aGlzLgorICAgICBJdCBkb2VzIG5vdCBsZXQgeW91IHN1YnRyYWN0IG9uZSBjb25zdCBYKiBwb2ludGVyIGZyb20gYW5vdGhlciBpbgorICAgICBhbiBhcm0gb2YgYW4gaWYtZXhwcmVzc2lvbiB3aG9zZSBpZi1wYXJ0IGlzIG5vdCBhIGNvbnN0YW50CisgICAgIGV4cHJlc3Npb24gKi8KKyAgY29uc3QgY2hhciAqZyA9ICJzdHJpbmciOworICBwY3BjYyA9ICZnICsgKGcgPyBnLWcgOiAwKTsKKyAgLyogSFBVWCA3LjAgY2MgcmVqZWN0cyB0aGVzZS4gKi8KKyAgKytwY3BjYzsKKyAgcHBjID0gKGNoYXIqKikgcGNwY2M7CisgIHBjcGNjID0gKGNoYXIgY29uc3QgKmNvbnN0ICopIHBwYzsKKyAgeyAvKiBTQ08gMy4ydjQgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgICBjaGFyICp0OworICAgIGNoYXIgY29uc3QgKnMgPSAwID8gKGNoYXIgKikgMCA6IChjaGFyIGNvbnN0ICopIDA7CisKKyAgICAqdCsrID0gMDsKKyAgICBpZiAocykgcmV0dXJuIDA7CisgIH0KKyAgeyAvKiBTb21lb25lIHRoaW5rcyB0aGUgU3VuIHN1cHBvc2VkbHktQU5TSSBjb21waWxlciB3aWxsIHJlamVjdCB0aGlzLiAgKi8KKyAgICBpbnQgeFtdID0gezI1LCAxN307CisgICAgY29uc3QgaW50ICpmb28gPSAmeFswXTsKKyAgICArK2ZvbzsKKyAgfQorICB7IC8qIFN1biBTQzEuMCBBTlNJIGNvbXBpbGVyIHJlamVjdHMgdGhpcyAtLSBidXQgbm90IHRoZSBhYm92ZS4gKi8KKyAgICB0eXBlZGVmIGNvbnN0IGludCAqaXB0cjsKKyAgICBpcHRyIHAgPSAwOworICAgICsrcDsKKyAgfQorICB7IC8qIEFJWCBYTCBDIDEuMDIuMC4wIHJlamVjdHMgdGhpcyBzYXlpbmcKKyAgICAgICAiay5jIiwgbGluZSAyLjI3OiAxNTA2LTAyNSAoUykgT3BlcmFuZCBtdXN0IGJlIGEgbW9kaWZpYWJsZSBsdmFsdWUuICovCisgICAgc3RydWN0IHMgeyBpbnQgajsgY29uc3QgaW50ICphcFszXTsgfTsKKyAgICBzdHJ1Y3QgcyAqYjsgYi0+aiA9IDU7CisgIH0KKyAgeyAvKiBVTFRSSVgtMzIgVjMuMSAoUmV2IDkpIHZjYyByZWplY3RzIHRoaXMgKi8KKyAgICBjb25zdCBpbnQgZm9vID0gMTA7CisgICAgaWYgKCFmb28pIHJldHVybiAwOworICB9CisgIHJldHVybiAhY3NbMF0gJiYgIXplcm8ueDsKKyNlbmRpZgorXV0pXSwKKwkJICAgW2FjX2N2X2NfY29uc3Q9eWVzXSwKKwkJICAgW2FjX2N2X2NfY29uc3Q9bm9dKV0pCitpZiB0ZXN0ICRhY19jdl9jX2NvbnN0ID0gbm87IHRoZW4KKyAgQUNfREVGSU5FKGNvbnN0LCwKKwkgICAgW0RlZmluZSB0byBlbXB0eSBpZiBgY29uc3QnIGRvZXMgbm90IGNvbmZvcm0gdG8gQU5TSSBDLl0pCitmaQorXSkjIEFDX0NfQ09OU1QKKworCisjIEFDX0NfUkVTVFJJQ1QKKyMgLS0tLS0tLS0tLS0tLQorIyBiYXNlZCBvbiBhY3hfcmVzdHJpY3QubTQsIGZyb20gdGhlIEdOVSBBdXRvY29uZiBNYWNybyBBcmNoaXZlIGF0OgorIyBodHRwOi8vYXV0b2NvbmYtYXJjaGl2ZS5jcnlwLnRvL2FjeF9yZXN0cmljdC5odG1sCisjCisjIERldGVybWluZSB3aGV0aGVyIHRoZSBDL0MrKyBjb21waWxlciBzdXBwb3J0cyB0aGUgInJlc3RyaWN0IiBrZXl3b3JkCisjIGludHJvZHVjZWQgaW4gQU5TSSBDOTksIG9yIGFuIGVxdWl2YWxlbnQuICBEZWZpbmUgInJlc3RyaWN0IiB0byB0aGUgYWx0ZXJuYXRlCisjIHNwZWxsaW5nLCBpZiBhbnk7IHRoZXNlIGFyZSBtb3JlIGxpa2VseSB0byB3b3JrIGluIGJvdGggQyBhbmQgQysrIGNvbXBpbGVycyBvZgorIyB0aGUgc2FtZSBmYW1pbHksIGFuZCBpbiB0aGUgcHJlc2VuY2Ugb2YgdmFyeWluZyBjb21waWxlciBvcHRpb25zLiAgSWYgb25seQorIyBwbGFpbiAicmVzdHJpY3QiIHdvcmtzLCBkbyBub3RoaW5nLiAgSGVyZSBhcmUgc29tZSB2YXJpYW50czoKKyMgLSBHQ0Mgc3VwcG9ydHMgYm90aCBfX3Jlc3RyaWN0IGFuZCBfX3Jlc3RyaWN0X18KKyMgLSBvbGRlciBERUMgQWxwaGEgQyBjb21waWxlcnMgc3VwcG9ydCBvbmx5IF9fcmVzdHJpY3QKKyMgLSBfUmVzdHJpY3QgaXMgdGhlIG9ubHkgc3BlbGxpbmcgYWNjZXB0ZWQgYnkgU3VuIFdvcmtTaG9wIDYgdXBkYXRlIDIgQworIyBPdGhlcndpc2UsIGRlZmluZSAicmVzdHJpY3QiIHRvIGJlIGVtcHR5LgorQU5fSURFTlRJRklFUihbcmVzdHJpY3RdLCBbQUNfQ19SRVNUUklDVF0pCitBQ19ERUZVTihbQUNfQ19SRVNUUklDVF0sCitbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBDL0MrKyByZXN0cmljdCBrZXl3b3JkXSwgYWNfY3ZfY19yZXN0cmljdCwKKyAgW2FjX2N2X2NfcmVzdHJpY3Q9bm8KKyAgICMgVGhlIG9yZGVyIGhlcmUgY2F0ZXJzIHRvIHRoZSBmYWN0IHRoYXQgQysrIGRvZXMgbm90IHJlcXVpcmUgcmVzdHJpY3QuCisgICBmb3IgYWNfa3cgaW4gX19yZXN0cmljdCBfX3Jlc3RyaWN0X18gX1Jlc3RyaWN0IHJlc3RyaWN0OyBkbworICAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKAorICAgICAgW1t0eXBlZGVmIGludCAqIGludF9wdHI7CisJaW50IGZvbyAoaW50X3B0ciAkYWNfa3cgaXApIHsKKwlyZXR1cm4gaXBbMF07CisgICAgICAgfV1dLAorICAgICAgW1tpbnQgc1sxXTsKKwlpbnQgKiAkYWNfa3cgdCA9IHM7CisJdFswXSA9IDA7CisJcmV0dXJuIGZvbyh0KV1dKV0sCisgICAgICBbYWNfY3ZfY19yZXN0cmljdD0kYWNfa3ddKQorICAgICB0ZXN0ICIkYWNfY3ZfY19yZXN0cmljdCIgIT0gbm8gJiYgYnJlYWsKKyAgIGRvbmUKKyAgXSkKKyBBSF9WRVJCQVRJTShbcmVzdHJpY3RdLAorWy8qIERlZmluZSB0byB0aGUgZXF1aXZhbGVudCBvZiB0aGUgQzk5ICdyZXN0cmljdCcga2V5d29yZCwgb3IgdG8KKyAgIG5vdGhpbmcgaWYgdGhpcyBpcyBub3Qgc3VwcG9ydGVkLiAgRG8gbm90IGRlZmluZSBpZiByZXN0cmljdCBpcworICAgc3VwcG9ydGVkIGRpcmVjdGx5LiAgKi8KKyN1bmRlZiByZXN0cmljdAorLyogV29yayBhcm91bmQgYSBidWcgaW4gU3VuIEMrKzogaXQgZG9lcyBub3Qgc3VwcG9ydCBfUmVzdHJpY3Qgb3IKKyAgIF9fcmVzdHJpY3RfXywgZXZlbiB0aG91Z2ggdGhlIGNvcnJlc3BvbmRpbmcgU3VuIEMgY29tcGlsZXIgZW5kcyB1cCB3aXRoCisgICAiI2RlZmluZSByZXN0cmljdCBfUmVzdHJpY3QiIG9yICIjZGVmaW5lIHJlc3RyaWN0IF9fcmVzdHJpY3RfXyIgaW4gdGhlCisgICBwcmV2aW91cyBsaW5lLiAgUGVyaGFwcyBzb21lIGZ1dHVyZSB2ZXJzaW9uIG9mIFN1biBDKysgd2lsbCB3b3JrIHdpdGgKKyAgIHJlc3RyaWN0OyBpZiBzbywgaG9wZWZ1bGx5IGl0IGRlZmluZXMgX19SRVNUUklDVCBsaWtlIFN1biBDIGRvZXMuICAqLworI2lmIGRlZmluZWQgX19TVU5QUk9fQ0MgJiYgIWRlZmluZWQgX19SRVNUUklDVAorIyBkZWZpbmUgX1Jlc3RyaWN0CisjIGRlZmluZSBfX3Jlc3RyaWN0X18KKyNlbmRpZl0pCisgY2FzZSAkYWNfY3ZfY19yZXN0cmljdCBpbgorICAgcmVzdHJpY3QpIDs7CisgICBubykgQUNfREVGSU5FKFtyZXN0cmljdF0sIFtdKSA7OworICAgKikgIEFDX0RFRklORV9VTlFVT1RFRChbcmVzdHJpY3RdLCBbJGFjX2N2X2NfcmVzdHJpY3RdKSA7OworIGVzYWMKK10pIyBBQ19DX1JFU1RSSUNUCisKKworIyBBQ19DX1ZPTEFUSUxFCisjIC0tLS0tLS0tLS0tLS0KKyMgTm90ZSB0aGF0LCB1bmxpa2UgY29uc3QsICNkZWZpbmluZyB2b2xhdGlsZSB0byBiZSB0aGUgZW1wdHkgc3RyaW5nIGNhbgorIyBhY3R1YWxseSB0dXJuIGEgY29ycmVjdCBwcm9ncmFtIGludG8gYW4gaW5jb3JyZWN0IG9uZSwgc2luY2UgcmVtb3ZpbmcKKyMgdXNlcyBvZiB2b2xhdGlsZSBhY3R1YWxseSBncmFudHMgdGhlIGNvbXBpbGVyIHBlcm1pc3Npb24gdG8gcGVyZm9ybQorIyBvcHRpbWl6YXRpb25zIHRoYXQgY291bGQgYnJlYWsgdGhlIHVzZXIncyBjb2RlLiAgU28sIGRvIG5vdCAjZGVmaW5lCisjIHZvbGF0aWxlIGF3YXkgdW5sZXNzIGl0IGlzIHJlYWxseSBuZWNlc3NhcnkgdG8gYWxsb3cgdGhlIHVzZXIncyBjb2RlCisjIHRvIGNvbXBpbGUgY2xlYW5seS4gIEJlbmlnbiBjb21waWxlciBmYWlsdXJlcyBzaG91bGQgYmUgdG9sZXJhdGVkLgorQUNfREVGVU4oW0FDX0NfVk9MQVRJTEVdLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3Igd29ya2luZyB2b2xhdGlsZV0sIGFjX2N2X2Nfdm9sYXRpbGUsCitbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSwgWwordm9sYXRpbGUgaW50IHg7CitpbnQgKiB2b2xhdGlsZSB5ID0gKGludCAqKSAwOworcmV0dXJuICF4ICYmICF5O10pXSwKKwkJICAgW2FjX2N2X2Nfdm9sYXRpbGU9eWVzXSwKKwkJICAgW2FjX2N2X2Nfdm9sYXRpbGU9bm9dKV0pCitpZiB0ZXN0ICRhY19jdl9jX3ZvbGF0aWxlID0gbm87IHRoZW4KKyAgQUNfREVGSU5FKHZvbGF0aWxlLCwKKwkgICAgW0RlZmluZSB0byBlbXB0eSBpZiB0aGUga2V5d29yZCBgdm9sYXRpbGUnIGRvZXMgbm90IHdvcmsuCisJICAgICBXYXJuaW5nOiB2YWxpZCBjb2RlIHVzaW5nIGB2b2xhdGlsZScgY2FuIGJlY29tZSBpbmNvcnJlY3QKKwkgICAgIHdpdGhvdXQuICBEaXNhYmxlIHdpdGggY2FyZS5dKQorZmkKK10pIyBBQ19DX1ZPTEFUSUxFCisKKworIyBBQ19DX1NUUklOR0laRQorIyAtLS0tLS0tLS0tLS0tLQorIyBDaGVja3MgaWYgYCMnIGNhbiBiZSB1c2VkIHRvIGdsdWUgc3RyaW5ncyB0b2dldGhlciBhdCB0aGUgQ1BQIGxldmVsLgorIyBEZWZpbmVzIEhBVkVfU1RSSU5HSVpFIGlmIHBvc2l0aXZlLgorQUNfREVGVU4oW0FDX0NfU1RSSU5HSVpFXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yIHByZXByb2Nlc3NvciBzdHJpbmdpemluZyBvcGVyYXRvcl0sCisJCVthY19jdl9jX3N0cmluZ2l6ZV0sCitbQUNfRUdSRVBfQ1BQKFtAJTpAdGVzdHN0cmluZ10sCisJICAgICAgW0AlOkBkZWZpbmUgeCh5KSAjeQorCitjaGFyICpzID0geCh0ZXN0c3RyaW5nKTtdLAorCSAgICAgIFthY19jdl9jX3N0cmluZ2l6ZT1ub10sCisJICAgICAgW2FjX2N2X2Nfc3RyaW5naXplPXllc10pXSkKK2lmIHRlc3QgJGFjX2N2X2Nfc3RyaW5naXplID0geWVzOyB0aGVuCisgIEFDX0RFRklORShIQVZFX1NUUklOR0laRSwgMSwKKwkgICAgW0RlZmluZSB0byAxIGlmIGNwcCBzdXBwb3J0cyB0aGUgQU5TSSBAJTpAIHN0cmluZ2l6aW5nIG9wZXJhdG9yLl0pCitmaQorXSkjIEFDX0NfU1RSSU5HSVpFCisKKworIyBBQ19DX1BST1RPVFlQRVMKKyMgLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGlmIHRoZSBDIGNvbXBpbGVyIHN1cHBvcnRzIHByb3RvdHlwZXMsIGluY2x1ZGVkIGlmIGl0IG5lZWRzCisjIG9wdGlvbnMuCitBQ19ERUZVTihbQUNfQ19QUk9UT1RZUEVTXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX01TR19DSEVDS0lORyhbZm9yIGZ1bmN0aW9uIHByb3RvdHlwZXNdKQoraWYgdGVzdCAiJGFjX2N2X3Byb2dfY2NfYzg5IiAhPSBubzsgdGhlbgorICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICBBQ19ERUZJTkUoUFJPVE9UWVBFUywgMSwKKwkgICAgW0RlZmluZSB0byAxIGlmIHRoZSBDIGNvbXBpbGVyIHN1cHBvcnRzIGZ1bmN0aW9uIHByb3RvdHlwZXMuXSkKKyAgQUNfREVGSU5FKF9fUFJPVE9UWVBFUywgMSwKKwkgICAgW0RlZmluZSBsaWtlIFBST1RPVFlQRVM7IHRoaXMgY2FuIGJlIHVzZWQgYnkgc3lzdGVtIGhlYWRlcnMuXSkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChbbm9dKQorZmkKK10pIyBBQ19DX1BST1RPVFlQRVMKKworCisjIEFDX0NfRkxFWElCTEVfQVJSQVlfTUVNQkVSCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgc3VwcG9ydHMgZmxleGlibGUgYXJyYXkgbWVtYmVycy4KK0FDX0RFRlVOKFtBQ19DX0ZMRVhJQkxFX0FSUkFZX01FTUJFUl0sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgZmxleGlibGUgYXJyYXkgbWVtYmVyc10sCisgICAgYWNfY3ZfY19mbGV4bWVtYmVyLAorICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorCSAgW1sjaW5jbHVkZSA8c3RkbGliLmg+CisJICAgICNpbmNsdWRlIDxzdGRpby5oPgorCSAgICAjaW5jbHVkZSA8c3RkZGVmLmg+CisJICAgIHN0cnVjdCBzIHsgaW50IG47IGRvdWJsZSBkW107IH07XV0sCisJICBbW2ludCBtID0gZ2V0Y2hhciAoKTsKKwkgICAgc3RydWN0IHMgKnAgPSBtYWxsb2MgKG9mZnNldG9mIChzdHJ1Y3QgcywgZCkKKwkJCQkgICsgbSAqIHNpemVvZiAoZG91YmxlKSk7CisJICAgIHAtPmRbMF0gPSAwLjA7CisJICAgIHJldHVybiBwLT5kICE9IChkb3VibGUgKikgTlVMTDtdXSldLAorICAgICAgIFthY19jdl9jX2ZsZXhtZW1iZXI9eWVzXSwKKyAgICAgICBbYWNfY3ZfY19mbGV4bWVtYmVyPW5vXSldKQorICBpZiB0ZXN0ICRhY19jdl9jX2ZsZXhtZW1iZXIgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl0sIFtdLAorICAgICAgW0RlZmluZSB0byBub3RoaW5nIGlmIEMgc3VwcG9ydHMgZmxleGlibGUgYXJyYXkgbWVtYmVycywgYW5kIHRvCisgICAgICAgMSBpZiBpdCBkb2VzIG5vdC4gIFRoYXQgd2F5LCB3aXRoIGEgZGVjbGFyYXRpb24gbGlrZSBgc3RydWN0IHMKKyAgICAgICB7IGludCBuOyBkb3VibGUgZEA8OkBGTEVYSUJMRV9BUlJBWV9NRU1CRVJAOj5AOyB9OycsIHRoZSBzdHJ1Y3QgaGFjaworICAgICAgIGNhbiBiZSB1c2VkIHdpdGggcHJlLUM5OSBjb21waWxlcnMuCisgICAgICAgV2hlbiBjb21wdXRpbmcgdGhlIHNpemUgb2Ygc3VjaCBhbiBvYmplY3QsIGRvbid0IHVzZSAnc2l6ZW9mIChzdHJ1Y3QgcyknCisgICAgICAgYXMgaXQgb3ZlcmVzdGltYXRlcyB0aGUgc2l6ZS4gIFVzZSAnb2Zmc2V0b2YgKHN0cnVjdCBzLCBkKScgaW5zdGVhZC4KKyAgICAgICBEb24ndCB1c2UgJ29mZnNldG9mIChzdHJ1Y3QgcywgZEA8OkAwQDo+QCknLCBhcyB0aGlzIGRvZXNuJ3Qgd29yayB3aXRoCisgICAgICAgTVNWQyBhbmQgd2l0aCBDKysgY29tcGlsZXJzLl0pCisgIGVsc2UKKyAgICBBQ19ERUZJTkUoW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl0sIDEpCisgIGZpCitdKQorCisKKyMgQUNfQ19WQVJBUlJBWVMKKyMgLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgd2hldGhlciB0aGUgQyBjb21waWxlciBzdXBwb3J0cyB2YXJpYWJsZS1sZW5ndGggYXJyYXlzLgorQUNfREVGVU4oW0FDX0NfVkFSQVJSQVlTXSwKK1sKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB2YXJpYWJsZS1sZW5ndGggYXJyYXlzXSwKKyAgICBhY19jdl9jX3ZhcmFycmF5cywKKyAgICBbQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgW0FDX0xBTkdfUFJPR1JBTShbXSwKKwkgIFtbc3RhdGljIGludCB4OyBjaGFyIGFbKyt4XTsgYVtzaXplb2YgYSAtIDFdID0gMDsgcmV0dXJuIGFbMF07XV0pXSwKKyAgICAgICBbYWNfY3ZfY192YXJhcnJheXM9eWVzXSwKKyAgICAgICBbYWNfY3ZfY192YXJhcnJheXM9bm9dKV0pCisgIGlmIHRlc3QgJGFjX2N2X2NfdmFyYXJyYXlzID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKFtIQVZFX0NfVkFSQVJSQVlTXSwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiBDIHN1cHBvcnRzIHZhcmlhYmxlLWxlbmd0aCBhcnJheXMuXSkKKyAgZmkKK10pCisKKworIyBBQ19DX1RZUEVPRgorIyAtLS0tLS0tLS0tLQorIyBDaGVjayBpZiB0aGUgQyBjb21waWxlciBzdXBwb3J0cyBHQ0MncyB0eXBlb2Ygc3ludGF4LgorIyBUaGUgdGVzdCBjYXNlIHByb3Zva2VzIGluY29tcGF0aWJpbGl0aWVzIGluIHRoZSBTdW4gQyBjb21waWxlcnMKKyMgKGJvdGggU29sYXJpcyA4IGFuZCBTb2xhcmlzIDEwKS4KK0FDX0RFRlVOKFtBQ19DX1RZUEVPRl0sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgdHlwZW9mIHN5bnRheCBhbmQga2V5d29yZCBzcGVsbGluZ10sIGFjX2N2X2NfdHlwZW9mLAorICAgIFthY19jdl9jX3R5cGVvZj1ubworICAgICBmb3IgYWNfa3cgaW4gdHlwZW9mIF9fdHlwZW9mX18gbm87IGRvCisgICAgICAgdGVzdCAkYWNfa3cgPSBubyAmJiBicmVhaworICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sCisJIFtbCisJICAgaW50IHZhbHVlOworCSAgIHR5cGVkZWYgc3RydWN0IHsKKwkJICAgY2hhciBhIFsxCisJCQkgICArICEgKCgkYWNfa3cgKHZhbHVlKSkKKwkJCQkoKCRhY19rdyAodmFsdWUpKSAwIDwgKCRhY19rdyAodmFsdWUpKSAtMQorCQkJCSA/ICgkYWNfa3cgKHZhbHVlKSkgLSAxCisJCQkJIDogfiAofiAoJGFjX2t3ICh2YWx1ZSkpIDAKKwkJCQkgICAgICA8PCBzaXplb2YgKCRhY19rdyAodmFsdWUpKSkpKV07IH0KKwkgICAgICBhY19fdHlwZW9mX3R5cGVfOworCSAgIHJldHVybgorCSAgICAgKCEgKCh2b2lkKSAoKGFjX190eXBlb2ZfdHlwZV8gKikgMCksIDApKTsKKwkgXV0pXSwKKwkgW2FjX2N2X2NfdHlwZW9mPSRhY19rd10pCisgICAgICAgdGVzdCAkYWNfY3ZfY190eXBlb2YgIT0gbm8gJiYgYnJlYWsKKyAgICAgZG9uZV0pCisgIGlmIHRlc3QgJGFjX2N2X2NfdHlwZW9mICE9IG5vOyB0aGVuCisgICAgQUNfREVGSU5FKFtIQVZFX1RZUEVPRl0sIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgdHlwZW9mIHdvcmtzIHdpdGggeW91ciBjb21waWxlci5dKQorICAgIGlmIHRlc3QgJGFjX2N2X2NfdHlwZW9mICE9IHR5cGVvZjsgdGhlbgorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFt0eXBlb2ZdLCBbJGFjX2N2X2NfdHlwZW9mXSwKKwlbRGVmaW5lIHRvIF9fdHlwZW9mX18gaWYgeW91ciBjb21waWxlciBzcGVsbHMgaXQgdGhhdCB3YXkuXSkKKyAgICBmaQorICBmaQorXSkKKworCisjIF9BQ19MQU5HX09QRU5NUAorIyAtLS0tLS0tLS0tLS0tLS0KKyMgRXhwYW5kcyB0byBzb21lIGxhbmd1YWdlIGRlcGVuZGVudCBzb3VyY2UgY29kZSBmb3IgdGVzdGluZyB0aGUgcHJlc2VuY2Ugb2YKKyMgT3Blbk1QLgorQUNfREVGVU4oW19BQ19MQU5HX09QRU5NUF0sCitbX0FDX0xBTkdfRElTUEFUQ0goWyQwXSwgX0FDX0xBTkcsICRAKV0pCisKKyMgX0FDX0xBTkdfT1BFTk1QKEMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfQUNfTEFOR19PUEVOTVAoQyldLAorWworI2lmbmRlZiBfT1BFTk1QCisgY2hva2UgbWUKKyNlbmRpZgorI2luY2x1ZGUgPG9tcC5oPgoraW50IG1haW4gKCkgeyByZXR1cm4gb21wX2dldF9udW1fdGhyZWFkcyAoKTsgfQorXSkKKworIyBfQUNfTEFOR19PUEVOTVAoQysrKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfY29weShbX0FDX0xBTkdfT1BFTk1QKEMpXSwgW19BQ19MQU5HX09QRU5NUChDKyspXSkKKworIyBfQUNfTEFOR19PUEVOTVAoRm9ydHJhbiA3NykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19BQ19MQU5HX09QRU5NUChGb3J0cmFuIDc3KV0sCitbQUNfTEFOR19GVU5DX0xJTktfVFJZKFtvbXBfZ2V0X251bV90aHJlYWRzXSldKQorCisjIF9BQ19MQU5HX09QRU5NUChGb3J0cmFuKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2NvcHkoW19BQ19MQU5HX09QRU5NUChGb3J0cmFuIDc3KV0sIFtfQUNfTEFOR19PUEVOTVAoRm9ydHJhbildKQorCisjIEFDX09QRU5NUAorIyAtLS0tLS0tLS0KKyMgQ2hlY2sgd2hpY2ggb3B0aW9ucyBuZWVkIHRvIGJlIHBhc3NlZCB0byB0aGUgQyBjb21waWxlciB0byBzdXBwb3J0IE9wZW5NUC4KKyMgU2V0IHRoZSBPUEVOTVBfQ0ZMQUdTIC8gT1BFTk1QX0NYWEZMQUdTIC8gT1BFTk1QX0ZGTEFHUyB2YXJpYWJsZSB0byB0aGVzZQorIyBvcHRpb25zLgorIyBUaGUgb3B0aW9ucyBhcmUgbmVjZXNzYXJ5IGF0IGNvbXBpbGUgdGltZSAoc28gdGhlICNwcmFnbWFzIGFyZSB1bmRlcnN0b29kKQorIyBhbmQgYXQgbGluayB0aW1lIChzbyB0aGUgYXBwcm9wcmlhdGUgbGlicmFyeSBpcyBsaW5rZWQgd2l0aCkuCisjIFRoaXMgbWFjcm8gdGFrZXMgY2FyZSB0byBub3QgcHJvZHVjZSByZWR1bmRhbnQgb3B0aW9ucyBpZiAkQ0MgJENGTEFHUyBhbHJlYWR5CisjIHN1cHBvcnRzIE9wZW5NUC4gSXQgYWxzbyBpcyBjYXJlZnVsIHRvIG5vdCBwYXNzIG9wdGlvbnMgdG8gY29tcGlsZXJzIHRoYXQKKyMgbWlzaW50ZXJwcmV0IHRoZW07IGZvciBleGFtcGxlLCBtb3N0IGNvbXBpbGVycyBhY2NlcHQgIi1vcGVubXAiIGFuZCBjcmVhdGUKKyMgYW4gb3V0cHV0IGZpbGUgY2FsbGVkICdwZW5tcCcgcmF0aGVyIHRoYW4gYWN0aXZhdGluZyBPcGVuTVAgc3VwcG9ydC4KK0FDX0RFRlVOKFtBQ19PUEVOTVBdLAorWworICBPUEVOTVBfW11fQUNfTEFOR19QUkVGSVhbXUZMQUdTPQorICBBQ19BUkdfRU5BQkxFKFtvcGVubXBdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLW9wZW5tcF0sIFtkbyBub3QgdXNlIE9wZW5NUF0pXSkKKyAgaWYgdGVzdCAiJGVuYWJsZV9vcGVubXAiICE9IG5vOyB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkW11fQUNfQ0NbXSBvcHRpb24gdG8gc3VwcG9ydCBPcGVuTVBdLAorICAgICAgW2FjX2N2X3Byb2dfW11fQUNfTEFOR19BQkJSRVZbXV9vcGVubXBdLAorICAgICAgW0FDX0xJTktfSUZFTFNFKFtfQUNfTEFOR19PUEVOTVBdLAorCSBbYWNfY3ZfcHJvZ19bXV9BQ19MQU5HX0FCQlJFVltdX29wZW5tcD0nbm9uZSBuZWVkZWQnXSwKKwkgW2FjX2N2X3Byb2dfW11fQUNfTEFOR19BQkJSRVZbXV9vcGVubXA9J3Vuc3VwcG9ydGVkJworCSAgZG5sIFRyeSB0aGVzZSBmbGFnczoKKwkgIGRubCAgIEdDQyA+PSA0LjIgICAgICAgICAgIC1mb3Blbm1wCisJICBkbmwgICBTdW5QUk8gQyAgICAgICAgICAgICAteG9wZW5tcAorCSAgZG5sICAgSW50ZWwgQyAgICAgICAgICAgICAgLW9wZW5tcAorCSAgZG5sICAgU0dJIEMsIFBHSSBDICAgICAgICAgLW1wCisJICBkbmwgICBUcnU2NCBDb21wYXEgQyAgICAgICAtb21wCisJICBkbmwgICBJQk0gQyAoQUlYLCBMaW51eCkgICAtcXNtcD1vbXAKKwkgIGRubCBJZiBpbiB0aGlzIGxvb3AgYSBjb21waWxlciBpcyBwYXNzZWQgYW4gb3B0aW9uIHRoYXQgaXQgZG9lc24ndAorCSAgZG5sIHVuZGVyc3RhbmQgb3IgdGhhdCBpdCBtaXNpbnRlcnByZXRzLCB0aGUgQUNfTElOS19JRkVMU0UgdGVzdAorCSAgZG5sIHdpbGwgZmFpbCAoc2luY2Ugd2Uga25vdyB0aGF0IGl0IGZhaWxlZCB3aXRob3V0IHRoZSBvcHRpb24pLAorCSAgZG5sIHRoZXJlZm9yZSB0aGUgbG9vcCB3aWxsIGNvbnRpbnVlIHNlYXJjaGluZyBmb3IgYW4gb3B0aW9uLCBhbmQKKwkgIGRubCBubyBvdXRwdXQgZmlsZSBjYWxsZWQgJ3Blbm1wJyBvciAnbXAnIGlzIGNyZWF0ZWQuCisJICBmb3IgYWNfb3B0aW9uIGluIC1mb3Blbm1wIC14b3Blbm1wIC1vcGVubXAgLW1wIC1vbXAgLXFzbXA9b21wOyBkbworCSAgICBhY19zYXZlX1tdX0FDX0xBTkdfUFJFRklYW11GTEFHUz0kW11fQUNfTEFOR19QUkVGSVhbXUZMQUdTCisJICAgIF9BQ19MQU5HX1BSRUZJWFtdRkxBR1M9IiRbXV9BQ19MQU5HX1BSRUZJWFtdRkxBR1MgJGFjX29wdGlvbiIKKwkgICAgQUNfTElOS19JRkVMU0UoW19BQ19MQU5HX09QRU5NUF0sCisJICAgICAgW2FjX2N2X3Byb2dfW11fQUNfTEFOR19BQkJSRVZbXV9vcGVubXA9JGFjX29wdGlvbl0pCisJICAgIF9BQ19MQU5HX1BSRUZJWFtdRkxBR1M9JGFjX3NhdmVfW11fQUNfTEFOR19QUkVGSVhbXUZMQUdTCisJICAgIGlmIHRlc3QgIiRhY19jdl9wcm9nX1tdX0FDX0xBTkdfQUJCUkVWW11fb3Blbm1wIiAhPSB1bnN1cHBvcnRlZDsgdGhlbgorCSAgICAgIGJyZWFrCisJICAgIGZpCisJICBkb25lXSldKQorICAgIGNhc2UgJGFjX2N2X3Byb2dfW11fQUNfTEFOR19BQkJSRVZbXV9vcGVubXAgaW4gIygKKyAgICAgICJub25lIG5lZWRlZCIgfCB1bnN1cHBvcnRlZCkKKwk7OyAjKAorICAgICAgKikKKwlPUEVOTVBfW11fQUNfTEFOR19QUkVGSVhbXUZMQUdTPSRhY19jdl9wcm9nX1tdX0FDX0xBTkdfQUJCUkVWW11fb3Blbm1wIDs7CisgICAgZXNhYworICBmaQorICBBQ19TVUJTVChbT1BFTk1QX11fQUNfTEFOR19QUkVGSVhbRkxBR1NdKQorXSkKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9jb25mL2F1dG9jb25mL2VybGFuZy5tNCBiL3NoYXJlL2F1dG9jb25mL2F1dG9jb25mL2VybGFuZy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDhmY2E4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b2NvbmYvYXV0b2NvbmYvZXJsYW5nLm00CkBAIC0wLDAgKzEsMzIwIEBACisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEF1dG9jb25mLiAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyBFcmxhbmcvT1RQIGxhbmd1YWdlIHN1cHBvcnQuCisjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlCisjIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorIyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorIyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uLAorIyB2ZXJzaW9uIDMuMCwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFuZCBhIGNvcHkgb2YgdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGVzIENPUFlJTkd2MyBhbmQgQ09QWUlORy5FWENFUFRJT04KKyMgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFdyaXR0ZW4gYnkgUm9tYWluIExlbmdsZXQuCisKKworIyBUYWJsZSBvZiBDb250ZW50czoKKyMKKyMgMC4gVXRpbGl0eSBtYWNyb3MKKyMKKyMgMS4gTGFuZ3VhZ2Ugc2VsZWN0aW9uCisjICAgIGFuZCByb3V0aW5lcyB0byBwcm9kdWNlIHByb2dyYW1zIGluIGEgZ2l2ZW4gbGFuZ3VhZ2UuCisjCisjIDIuIFByb2R1Y2luZyBwcm9ncmFtcyBpbiBhIGdpdmVuIGxhbmd1YWdlLgorIworIyAzLiBMb29raW5nIGZvciBhIGNvbXBpbGVyCisjICAgIEFuZCBwb3NzaWJseSB0aGUgYXNzb2NpYXRlZCBwcmVwcm9jZXNzb3IuCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAwLiBVdGlsaXR5IG1hY3Jvcy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBBQ19FUkxBTkdfUEFUSF9FUkxDKFtWQUxVRS1JRi1OT1QtRk9VTkRdLCBbUEFUSF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19FUkxBTkdfUEFUSF9FUkxDXSwKK1tBQ19BUkdfVkFSKFtFUkxDXSwgW0VybGFuZy9PVFAgY29tcGlsZXIgY29tbWFuZCBbYXV0b2RldGVjdGVkXV0pZG5sCitpZiB0ZXN0IC1uICIkRVJMQyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBlcmxjXSkKKyAgICBBQ19NU0dfUkVTVUxUKFskRVJMQ10pCitlbHNlCisgICAgQUNfUEFUSF9UT09MKEVSTEMsIGVybGMsIFskMV0sIFskMl0pCitmaQorQUNfQVJHX1ZBUihbRVJMQ0ZMQUdTXSwgW0VybGFuZy9PVFAgY29tcGlsZXIgZmxhZ3MgW25vbmVdXSlkbmwKK10pCisKKworIyBBQ19FUkxBTkdfTkVFRF9FUkxDKFtQQVRIXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfRVJMQU5HX05FRURfRVJMQ10sCitbQUNfRVJMQU5HX1BBVEhfRVJMQyhbbm90IGZvdW5kXSwgWyQxXSkKK2lmIHRlc3QgIiRFUkxDIiA9ICJub3QgZm91bmQiOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtFcmxhbmcvT1RQIGNvbXBpbGVyIChlcmxjKSBub3QgZm91bmQgYnV0IHJlcXVpcmVkXSkKK2ZpCitdKQorCisKKyMgQUNfRVJMQU5HX1BBVEhfRVJMKFtWQUxVRS1JRi1OT1QtRk9VTkRdLCBbUEFUSF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX0VSTEFOR19QQVRIX0VSTF0sCitbQUNfQVJHX1ZBUihbRVJMXSwgW0VybGFuZy9PVFAgaW50ZXJwcmV0ZXIgY29tbWFuZCBbYXV0b2RldGVjdGVkXV0pZG5sCitpZiB0ZXN0IC1uICIkRVJMIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbZm9yIGVybF0pCisgICAgQUNfTVNHX1JFU1VMVChbJEVSTF0pCitlbHNlCisgICAgQUNfUEFUSF9UT09MKEVSTCwgZXJsLCBbJDFdLCBbJDJdKVtdZG5sCitmaQorXSkKKworCisjIEFDX0VSTEFOR19ORUVEX0VSTChbUEFUSF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfRVJMQU5HX05FRURfRVJMXSwKK1tBQ19FUkxBTkdfUEFUSF9FUkwoW25vdCBmb3VuZF0sIFskMV0pCitpZiB0ZXN0ICIkRVJMIiA9ICJub3QgZm91bmQiOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtFcmxhbmcvT1RQIGludGVycHJldGVyIChlcmwpIG5vdCBmb3VuZCBidXQgcmVxdWlyZWRdKQorZmkKK10pCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgMS4gTGFuZ3VhZ2Ugc2VsZWN0aW9uLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBBQ19MQU5HKEVybGFuZykKKyMgLS0tLS0tLS0tLS0tLS0tCitBQ19MQU5HX0RFRklORShbRXJsYW5nXSwgW2VybF0sIFtFUkxdLCBbRVJMQ10sIFtdLAorW2FjX2V4dD1lcmwKK2FjX2NvbXBpbGU9JyRFUkxDICRFUkxDRkxBR1MgLWIgYmVhbSBjb25mdGVzdC4kYWNfZXh0ID4mQVNfTUVTU0FHRV9MT0dfRkQnCithY19saW5rPSckRVJMQyAkRVJMQ0ZMQUdTIC1iIGJlYW0gY29uZnRlc3QuJGFjX2V4dCA+JkFTX01FU1NBR0VfTE9HX0ZEICYmIGVjaG8gIlsjXSEvYmluL3NoIiA+IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiBBU19FQ0hPKFsiXCIkRVJMXCIgLXJ1biBjb25mdGVzdCBzdGFydCAtcnVuIGluaXQgc3RvcCAtbm9zaGVsbCJdKSA+PiBjb25mdGVzdCRhY19leGVleHQgJiYgY2htb2QgK3ggY29uZnRlc3QkYWNfZXhlZXh0JworXSkKKworCisKKyMgQUNfTEFOR19FUkxBTkcKKyMgLS0tLS0tLS0tLS0tLS0tLS0KK0FVX0RFRlVOKFtBQ19MQU5HX0VSTEFOR10sIFtBQ19MQU5HKEVybGFuZyldKQorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIDIuIFByb2R1Y2luZyBwcm9ncmFtcy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgQUNfTEFOR19QUk9HUkFNKEVybGFuZykoW1BST0xPR1VFXSwgW0JPRFldKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW0FDX0xBTkdfUFJPR1JBTShFcmxhbmcpXSwKK1tbLW1vZHVsZShjb25mdGVzdCkuCistZXhwb3J0KFtzdGFydC8wXSkuXV0KK1skMQorc3RhcnQoKSAtPgorJDIKKy4KK10pCisKKworIyBfQUNfTEFOR19OVUxMX1BST0dSQU0oRXJsYW5nKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9kdWNlIHNvdXJjZSB0aGF0IGRvZXMgbm90aGluZy4KK200X2RlZmluZShbX0FDX0xBTkdfTlVMTF9QUk9HUkFNKEVybGFuZyldLAorW0FDX0xBTkdfUFJPR1JBTShbXSwgW2hhbHQoMCldKV0pCisKKworIyBfQUNfTEFOR19JT19QUk9HUkFNKEVybGFuZykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2Ugc291cmNlIHRoYXQgcGVyZm9ybXMgSS9PLgorbTRfZGVmaW5lKFtfQUNfTEFOR19JT19QUk9HUkFNKEVybGFuZyldLAorW0FDX0xBTkdfUFJPR1JBTShbXSwgW2RubAorICAgUmV0dXJuVmFsdWUgPSBjYXNlIGZpbGU6d3JpdGVfZmlsZSgiY29uZnRlc3Qub3V0IiwgIiIpIG9mCisgICAgICAge2Vycm9yLCBffSAtPiAxOworICAgICAgIG9rIC0+IDAKKyAgIGVuZCwKKyAgIGhhbHQoUmV0dXJuVmFsdWUpXSldKQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAzLiBMb29raW5nIGZvciBDb21waWxlcnMgYW5kIFByZXByb2Nlc3NvcnMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIEFDX0xBTkdfUFJFUFJPQyhFcmxhbmcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpbmQgdGhlIEVybGFuZyBwcmVwcm9jZXNzb3IuICBNdXN0IGJlIEFDX0RFRlVOJ2QgdG8gYmUgQUNfUkVRVUlSRSdhYmxlLgorQUNfREVGVU4oW0FDX0xBTkdfUFJFUFJPQyhFcmxhbmcpXSwKK1ttNF93YXJuKFtzeW50YXhdLAorCSBbJDA6IE5vIHByZXByb2Nlc3NvciBkZWZpbmVkIGZvciBdX0FDX0xBTkcpXSkKKworIyBBQ19MQU5HX0NPTVBJTEVSKEVybGFuZykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpbmQgdGhlIEVybGFuZyBjb21waWxlci4gIE11c3QgYmUgQUNfREVGVU4nZCB0byBiZSBBQ19SRVFVSVJFJ2FibGUuCitBQ19ERUZVTihbQUNfTEFOR19DT01QSUxFUihFcmxhbmcpXSwKK1tBQ19SRVFVSVJFKFtBQ19FUkxBTkdfUEFUSF9FUkxDXSldKQorCisKKyMgQUNfRVJMQU5HX0NIRUNLX0xJQihMSUJSQVJZLCBbQUNUSU9OLUlGLUZPVU5EXSwgW0FDVElPTi1JRi1OT1QtRk9VTkRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1hY3JvIGZvciBjaGVja2luZyBpZiBhbiBFcmxhbmcgbGlicmFyeSBpcyBpbnN0YWxsZWQsIGFuZCB0bworIyBkZXRlcm1pbmUgaXRzIHZlcnNpb24uCitBQ19ERUZVTihbQUNfRVJMQU5HX0NIRUNLX0xJQl0sCitbQUNfUkVRVUlSRShbQUNfRVJMQU5HX1BBVEhfRVJMQ10pW11kbmwKK0FDX1JFUVVJUkUoW0FDX0VSTEFOR19QQVRIX0VSTF0pW11kbmwKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgRXJsYW5nL09UUCAnJDEnIGxpYnJhcnkgc3ViZGlyZWN0b3J5XSwKKyAgICBbYWNfY3ZfZXJsYW5nX2xpYl9kaXJfJDFdLAorICAgIFtBQ19MQU5HX1BVU0goRXJsYW5nKVtdZG5sCisgICAgIEFDX1JVTl9JRkVMU0UoCisJW0FDX0xBTkdfUFJPR1JBTShbXSwgW2RubAorCSAgICBSZXR1cm5WYWx1ZSA9IGNhc2UgY29kZTpsaWJfZGlyKCJbJDFdIikgb2YKKwkgICAge2Vycm9yLCBiYWRfbmFtZX0gLT4KKwkJZmlsZTp3cml0ZV9maWxlKCJjb25mdGVzdC5vdXQiLCAibm90IGZvdW5kXG4iKSwKKwkJMTsKKwkgICAgTGliRGlyIC0+CisJCWZpbGU6d3JpdGVfZmlsZSgiY29uZnRlc3Qub3V0IiwgTGliRGlyKSwKKwkJMAorCSAgICBlbmQsCisJICAgIGhhbHQoUmV0dXJuVmFsdWUpXSldLAorCVthY19jdl9lcmxhbmdfbGliX2Rpcl8kMT1gY2F0IGNvbmZ0ZXN0Lm91dGAKKwkgcm0gLWYgY29uZnRlc3Qub3V0XSwKKwlbaWYgdGVzdCAhIC1mIGNvbmZ0ZXN0Lm91dDsgdGhlbgorCSAgICAgQUNfTVNHX0ZBSUxVUkUoW3Rlc3QgRXJsYW5nIHByb2dyYW0gZXhlY3V0aW9uIGZhaWxlZF0pCisJIGVsc2UKKwkgICAgIGFjX2N2X2VybGFuZ19saWJfZGlyXyQxPSJub3QgZm91bmQiCisJICAgICBybSAtZiBjb25mdGVzdC5vdXQKKwkgZmldKQorICAgICBBQ19MQU5HX1BPUChFcmxhbmcpW11kbmwKKyAgICBdKQorQUNfQ0FDSEVfQ0hFQ0soW2ZvciBFcmxhbmcvT1RQICckMScgbGlicmFyeSB2ZXJzaW9uXSwKKyAgICBbYWNfY3ZfZXJsYW5nX2xpYl92ZXJfJDFdLAorICAgIFtBU19JRihbdGVzdCAiJGFjX2N2X2VybGFuZ19saWJfZGlyXyQxIiA9ICJub3QgZm91bmQiXSwKKwlbYWNfY3ZfZXJsYW5nX2xpYl92ZXJfJDE9Im5vdCBmb3VuZCJdLAorCVthY19jdl9lcmxhbmdfbGliX3Zlcl8kMT1gQVNfRUNITyhbIiRhY19jdl9lcmxhbmdfbGliX2Rpcl8kMSJdKSB8IHNlZCAtbiAtZSAncyxeLiotXChbW14vLV1dKlwpJCxcMSxwJ2BdKVtdZG5sCisgICAgXSkKK0FDX1NVQlNUKFtFUkxBTkdfTElCX0RJUl8kMV0sIFskYWNfY3ZfZXJsYW5nX2xpYl9kaXJfJDFdKQorQUNfU1VCU1QoW0VSTEFOR19MSUJfVkVSXyQxXSwgWyRhY19jdl9lcmxhbmdfbGliX3Zlcl8kMV0pCitBU19JRihbdGVzdCAiJGFjX2N2X2VybGFuZ19saWJfZGlyXyQxIiA9ICJub3QgZm91bmQiXSwgWyQzXSwgWyQyXSkKK10pIyBBQ19FUkxBTkdfQ0hFQ0tfTElCCisKKworIyBBQ19FUkxBTkdfU1VCU1RfUk9PVF9ESVIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERldGVybWluZXMgdGhlIEVybGFuZy9PVFAgcm9vdCBkaXJlY3RvcnkuCitBQ19ERUZVTihbQUNfRVJMQU5HX1NVQlNUX1JPT1RfRElSXSwKK1tBQ19SRVFVSVJFKFtBQ19FUkxBTkdfTkVFRF9FUkxDXSlbXWRubAorQUNfUkVRVUlSRShbQUNfRVJMQU5HX05FRURfRVJMXSlbXWRubAorQUNfQ0FDSEVfQ0hFQ0soW2ZvciBFcmxhbmcvT1RQIHJvb3QgZGlyZWN0b3J5XSwKKyAgICBbYWNfY3ZfZXJsYW5nX3Jvb3RfZGlyXSwKKyAgICBbQUNfTEFOR19QVVNIKEVybGFuZylbXWRubAorICAgICBBQ19SVU5fSUZFTFNFKAorCVtBQ19MQU5HX1BST0dSQU0oW10sIFtkbmwKKwkgICAgUm9vdERpciA9IGNvZGU6cm9vdF9kaXIoKSwKKwkgICAgZmlsZTp3cml0ZV9maWxlKCJjb25mdGVzdC5vdXQiLCBSb290RGlyKSwKKwkgICAgUmV0dXJuVmFsdWUgPSAwLAorCSAgICBoYWx0KFJldHVyblZhbHVlKV0pXSwKKwlbYWNfY3ZfZXJsYW5nX3Jvb3RfZGlyPWBjYXQgY29uZnRlc3Qub3V0YAorCSBybSAtZiBjb25mdGVzdC5vdXRdLAorCVtybSAtZiBjb25mdGVzdC5vdXQKKwkgQUNfTVNHX0ZBSUxVUkUoW3Rlc3QgRXJsYW5nIHByb2dyYW0gZXhlY3V0aW9uIGZhaWxlZF0pXSkKKyAgICAgQUNfTEFOR19QT1AoRXJsYW5nKVtdZG5sCisgICAgXSkKK0FDX1NVQlNUKFtFUkxBTkdfUk9PVF9ESVJdLCBbJGFjX2N2X2VybGFuZ19yb290X2Rpcl0pCitdKSMgQUNfRVJMQU5HX1NVQlNUX1JPT1RfRElSCisKKworIyBBQ19FUkxBTkdfU1VCU1RfTElCX0RJUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX0VSTEFOR19TVUJTVF9MSUJfRElSXSwKK1tBQ19SRVFVSVJFKFtBQ19FUkxBTkdfTkVFRF9FUkxDXSlbXWRubAorQUNfUkVRVUlSRShbQUNfRVJMQU5HX05FRURfRVJMXSlbXWRubAorQUNfQ0FDSEVfQ0hFQ0soW2ZvciBFcmxhbmcvT1RQIGxpYnJhcnkgYmFzZSBkaXJlY3RvcnldLAorICAgIFthY19jdl9lcmxhbmdfbGliX2Rpcl0sCisgICAgW0FDX0xBTkdfUFVTSChFcmxhbmcpW11kbmwKKyAgICAgQUNfUlVOX0lGRUxTRSgKKwlbQUNfTEFOR19QUk9HUkFNKFtdLCBbZG5sCisJICAgIExpYkRpciA9IGNvZGU6bGliX2RpcigpLAorCSAgICBmaWxlOndyaXRlX2ZpbGUoImNvbmZ0ZXN0Lm91dCIsIExpYkRpciksCisJICAgIFJldHVyblZhbHVlID0gMCwKKwkgICAgaGFsdChSZXR1cm5WYWx1ZSldKV0sCisJW2FjX2N2X2VybGFuZ19saWJfZGlyPWBjYXQgY29uZnRlc3Qub3V0YAorCSBybSAtZiBjb25mdGVzdC5vdXRdLAorCVtybSAtZiBjb25mdGVzdC5vdXQKKwkgQUNfTVNHX0ZBSUxVUkUoW3Rlc3QgRXJsYW5nIHByb2dyYW0gZXhlY3V0aW9uIGZhaWxlZF0pXSkKKyAgICAgQUNfTEFOR19QT1AoRXJsYW5nKVtdZG5sCisgICAgXSkKK0FDX1NVQlNUKFtFUkxBTkdfTElCX0RJUl0sIFskYWNfY3ZfZXJsYW5nX2xpYl9kaXJdKQorXSkjIEFDX0VSTEFOR19TVUJTVF9MSUJfRElSCisKKworIyBBQ19FUkxBTkdfU1VCU1RfSU5TVEFMTF9MSUJfRElSCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGlyZWN0b3JpZXMgZm9yIGluc3RhbGxpbmcgRXJsYW5nL09UUCBwYWNrYWdlcyBhcmUgc2VwYXJhdGVkIGZyb20gdGhlCisjIGRpcmVjdG9yaWVzIGRldGVybWluZWQgYnkgcnVubmluZyB0aGUgRXJsYW5nL09UUCBpbnN0YWxsYXRpb24gdGhhdCBpcyB1c2VkCisjIGZvciBidWlsZGluZy4KK0FDX0RFRlVOKFtBQ19FUkxBTkdfU1VCU1RfSU5TVEFMTF9MSUJfRElSXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBFcmxhbmcvT1RQIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGJhc2UgZGlyZWN0b3J5XSkKK0FDX0FSR19WQVIoW0VSTEFOR19JTlNUQUxMX0xJQl9ESVJdLAorICAgIFtFcmxhbmcvT1RQIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGJhc2UgZGlyZWN0b3J5IFtMSUJESVIvZXJsYW5nL2xpYl1dKQoraWYgdGVzdCAtbiAiJEVSTEFOR19JTlNUQUxMX0xJQl9ESVIiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbJEVSTEFOR19JTlNUQUxMX0xJQl9ESVJdKQorZWxzZQorICAgIEFDX1NVQlNUKFtFUkxBTkdfSU5TVEFMTF9MSUJfRElSXSwgWycke2xpYmRpcn0vZXJsYW5nL2xpYiddKQorICAgIEFDX01TR19SRVNVTFQoWyRsaWJkaXIvZXJsYW5nL2xpYl0pCitmaQorXSkjIEFDX0VSTEFOR19TVUJTVF9JTlNUQUxMX0xJQl9ESVIKKworCisjIEFDX0VSTEFOR19TVUJTVF9JTlNUQUxMX0xJQl9TVUJESVIoUEFDS0FHRV9UQVJOQU1FLCBQQUNLQUdFX1ZFUlNJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfRVJMQU5HX1NVQlNUX0lOU1RBTExfTElCX1NVQkRJUl0sCitbQUNfUkVRVUlSRShbQUNfRVJMQU5HX1NVQlNUX0lOU1RBTExfTElCX0RJUl0pW11kbmwKK0FDX01TR19DSEVDS0lORyhbZm9yIEVybGFuZy9PVFAgJyQxJyBsaWJyYXJ5IGluc3RhbGxhdGlvbiBzdWJkaXJlY3RvcnldKQorQUNfQVJHX1ZBUihbRVJMQU5HX0lOU1RBTExfTElCX0RJUl8kMV0sCisgICAgW0VybGFuZy9PVFAgJyQxJyBsaWJyYXJ5IGluc3RhbGxhdGlvbiBzdWJkaXJlY3RvcnkKKyAgICAgICBbRVJMQU5HX0lOU1RBTExfTElCX0RJUi8kMS0kMl1dKQoraWYgdGVzdCAtbiAiJEVSTEFOR19JTlNUQUxMX0xJQl9ESVJfJDEiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbJEVSTEFOR19JTlNUQUxMX0xJQl9ESVJfJDFdKQorZWxzZQorICAgIEFDX1NVQlNUKFtFUkxBTkdfSU5TVEFMTF9MSUJfRElSXyQxXSwgWycke0VSTEFOR19JTlNUQUxMX0xJQl9ESVJ9LyQxLSQyJ10pCisgICAgQUNfTVNHX1JFU1VMVChbJEVSTEFOR19JTlNUQUxMX0xJQl9ESVIvJDEtJDJdKQorZmkKK10pIyBBQ19FUkxBTkdfU1VCU1RfSU5TVEFMTF9MSUJfU1VCRElSCisKKworIyBBQ19FUkxBTkdfU1VCU1RfRVJUU19WRVIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERldGVybWluZXMgdGhlIEVybGFuZyBydW50aW1lIHN5c3RlbSB2ZXJzaW9uLgorQUNfREVGVU4oW0FDX0VSTEFOR19TVUJTVF9FUlRTX1ZFUl0sCitbQUNfUkVRVUlSRShbQUNfRVJMQU5HX05FRURfRVJMQ10pW11kbmwKK0FDX1JFUVVJUkUoW0FDX0VSTEFOR19ORUVEX0VSTF0pW11kbmwKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgRXJsYW5nL09UUCBFUlRTIHZlcnNpb25dLAorICAgIFthY19jdl9lcmxhbmdfZXJ0c192ZXJdLAorICAgIFtBQ19MQU5HX1BVU0goW0VybGFuZ10pW11kbmwKKyAgICAgQUNfUlVOX0lGRUxTRSgKKwlbQUNfTEFOR19QUk9HUkFNKFtdLCBbZG5sCisJICAgIFZlcnNpb24gPSBlcmxhbmc6c3lzdGVtX2luZm8odmVyc2lvbiksCisJICAgIGZpbGU6d3JpdGVfZmlsZSgiY29uZnRlc3Qub3V0IiwgVmVyc2lvbiksCisJICAgIFJldHVyblZhbHVlID0gMCwKKwkgICAgaGFsdChSZXR1cm5WYWx1ZSldKV0sCisJW2FjX2N2X2VybGFuZ19lcnRzX3Zlcj1gY2F0IGNvbmZ0ZXN0Lm91dGAKKwkgcm0gLWYgY29uZnRlc3Qub3V0XSwKKwlbcm0gLWYgY29uZnRlc3Qub3V0CisJIEFDX01TR19GQUlMVVJFKFt0ZXN0IEVybGFuZyBwcm9ncmFtIGV4ZWN1dGlvbiBmYWlsZWRdKV0pCisgICAgIEFDX0xBTkdfUE9QKFtFcmxhbmddKVtdZG5sCisgICAgXSkKK0FDX1NVQlNUKFtFUkxBTkdfRVJUU19WRVJdLCBbJGFjX2N2X2VybGFuZ19lcnRzX3Zlcl0pCitdKSMgQUNfRVJMQU5HX1NVQlNUX0VSVFNfVkVSCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvY29uZi9hdXRvY29uZi9mb3J0cmFuLm00IGIvc2hhcmUvYXV0b2NvbmYvYXV0b2NvbmYvZm9ydHJhbi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTkxOGQwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b2NvbmYvYXV0b2NvbmYvZm9ydHJhbi5tNApAQCAtMCwwICsxLDEyMDggQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQXV0b2NvbmYuICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjIEZvcnRyYW4gbGFuZ3VhZ2VzIHN1cHBvcnQuCisjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlCisjIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorIyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorIyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uLAorIyB2ZXJzaW9uIDMuMCwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFuZCBhIGNvcHkgb2YgdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGVzIENPUFlJTkd2MyBhbmQgQ09QWUlORy5FWENFUFRJT04KKyMgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFdyaXR0ZW4gYnkgRGF2aWQgTWFjS2VuemllLCB3aXRoIGhlbHAgZnJvbQorIyBGcmFuYyxvaXMgUGluYXJkLCBLYXJsIEJlcnJ5LCBSaWNoYXJkIFBpeGxleSwgSWFuIExhbmNlIFRheWxvciwKKyMgUm9sYW5kIE1jR3JhdGgsIE5vYWggRnJpZWRtYW4sIGRhdmlkIGQgenVobiwgYW5kIG1hbnkgb3RoZXJzLgorCisKKyMgVGFibGUgb2YgQ29udGVudHM6CisjCisjIFByZWFtYmxlCisjCisjIDAuIFV0aWxpdHkgbWFjcm9zCisjCisjIDEuIExhbmd1YWdlIHNlbGVjdGlvbgorIyAgICBhbmQgcm91dGluZXMgdG8gcHJvZHVjZSBwcm9ncmFtcyBpbiBhIGdpdmVuIGxhbmd1YWdlLgorIworIyAyLiBQcm9kdWNpbmcgcHJvZ3JhbXMgaW4gYSBnaXZlbiBsYW5ndWFnZS4KKyMKKyMgMy4gTG9va2luZyBmb3IgYSBjb21waWxlcgorIyAgICBBbmQgcG9zc2libHkgdGhlIGFzc29jaWF0ZWQgcHJlcHJvY2Vzc29yLgorIworIyA0LiBDb21waWxlcnMnIGNoYXJhY3RlcmlzdGljcy4KKworCisKKyMjIC0tLS0tLS0tLS0gIyMKKyMjIFByZWFtYmxlLiAgIyMKKyMjIC0tLS0tLS0tLS0gIyMKKworIyBGb3J0cmFuIHZzLiBGb3J0cmFuIDc3OgorIyAgIFRoaXMgZmlsZSBjb250YWlucyBtYWNyb3MgZm9yIGJvdGggIkZvcnRyYW4gNzciIGFuZCAiRm9ydHJhbiIsIHdoZXJlCisjIHRoZSBmb3JtZXIgaXMgdGhlICJjbGFzc2ljIiBhdXRvY29uZiBGb3J0cmFuIGludGVyZmFjZSBhbmQgaXMgaW50ZW5kZWQKKyMgZm9yIGxlZ2FjeSBGNzcgY29kZXMsIHdoaWxlIHRoZSBsYXR0ZXIgaXMgaW50ZW5kZWQgdG8gc3VwcG9ydCBuZXdlciBGb3J0cmFuCisjIGRpYWxlY3RzLiAgRm9ydHJhbiA3NyB1c2VzIGVudmlyb25tZW50IHZhcmlhYmxlcyBGNzcsIEZGTEFHUywgYW5kIEZMSUJTLAorIyB3aGlsZSBGb3J0cmFuIHVzZXMgRkMsIEZDRkxBR1MsIGFuZCBGQ0xJQlMuICBGb3IgZWFjaCB1c2VyLWNhbGxhYmxlIEFDXyoKKyMgbWFjcm8sIHRoZXJlIGlzIGdlbmVyYWxseSBib3RoIGFuIEY3NyBhbmQgYW4gRkMgdmVyc2lvbiwgd2hlcmUgYm90aCB2ZXJzaW9ucworIyBzaGFyZSB0aGUgc2FtZSBfQUNfKl9GQ18qIGJhY2tlbmQuICBUaGlzIGJhY2tlbmQgbWFjcm8gcmVxdWlyZXMgdGhhdAorIyB0aGUgYXBwcm9wcmlhdGUgbGFuZ3VhZ2UgYmUgQUNfTEFOR19QVVNIJ2VkLCBhbmQgdXNlcyBfQUNfTEFOR19BQkJSRVYgYW5kCisjIF9BQ19MQU5HX1BSRUZJWCBpbiBvcmRlciB0byBuYW1lIGNhY2hlIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGV0Yy4KKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIDAuIFV0aWxpdHkgbWFjcm9zLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIF9BQ19MSVNUX01FTUJFUl9JRihFTEVNRU5ULCBMSVNULCBbQUNUSU9OLUlGLUZPVU5EXSwgW0FDVElPTi1JRi1OT1QtRk9VTkRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgUHJvY2Vzc2luZyB0aGUgZWxlbWVudHMgb2YgYSBsaXN0IGlzIHRlZGlvdXMgaW4gc2hlbGwgcHJvZ3JhbW1pbmcsCisjIGFzIGxpc3RzIHRlbmQgdG8gYmUgaW1wbGVtZW50ZWQgYXMgc3BhY2UgZGVsaW1pdGVkIHN0cmluZ3MuCisjCisjIFRoaXMgbWFjcm8gc2VhcmNoZXMgTElTVCBmb3IgRUxFTUVOVCwgYW5kIGV4ZWN1dGVzIEFDVElPTi1JRi1GT1VORAorIyBpZiBFTEVNRU5UIGlzIGEgbWVtYmVyIG9mIExJU1QsIG90aGVyd2lzZSBpdCBleGVjdXRlcworIyBBQ1RJT04tSUYtTk9ULUZPVU5ELgorQUNfREVGVU4oW19BQ19MSVNUX01FTUJFUl9JRl0sCitkbmwgRG8gc29tZSBzYW5pdHkgY2hlY2tpbmcgb2YgdGhlIGFyZ3VtZW50cy4KK1ttNF9pZihbJDFdLCAsIFttNF9mYXRhbChbJDA6IG1pc3NpbmcgYXJndW1lbnQgMV0pXSwKKyAgICAgIFskMl0sICwgW200X2ZhdGFsKFskMDogbWlzc2luZyBhcmd1bWVudCAyXSldKV1kbmwKK1sgIGFjX2V4aXN0cz1mYWxzZQorICBmb3IgYWNfaSBpbiAkMjsgZG8KKyAgICBpZiB0ZXN0IHgiJDEiID0geCIkYWNfaSI7IHRoZW4KKyAgICAgIGFjX2V4aXN0cz10cnVlCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKworICBBU19JRihbdGVzdCB4IiRhY19leGlzdHMiID0geHRydWVdLCBbJDNdLCBbJDRdKVtdZG5sCitdKSMgX0FDX0xJU1RfTUVNQkVSX0lGCisKKworIyBfQUNfTElOS0VSX09QVElPTihMSU5LRVItT1BUSU9OUywgU0hFTEwtVkFSSUFCTEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgU3BlY2lmeWluZyBvcHRpb25zIHRvIHRoZSBjb21waWxlciAod2hldGhlciBpdCBiZSB0aGUgQywgQysrIG9yCisjIEZvcnRyYW4gNzcgY29tcGlsZXIpIHRoYXQgYXJlIG1lYW50IGZvciB0aGUgbGlua2VyIGlzIGNvbXBpbGVyCisjIGRlcGVuZGVudC4gIFRoaXMgbWFjcm8gbGV0cyB5b3UgZ2l2ZSBvcHRpb25zIHRvIHRoZSBjb21waWxlciB0aGF0CisjIGFyZSBtZWFudCBmb3IgdGhlIGxpbmtlciBpbiBhIHBvcnRhYmxlLCBjb21waWxlci1pbmRlcGVuZGVudCB3YXkuCisjCisjIFRoaXMgbWFjcm8gdGFrZSB0d28gYXJndW1lbnRzLCBhIGxpc3Qgb2YgbGlua2VyIG9wdGlvbnMgdGhhdCB0aGUKKyMgY29tcGlsZXIgc2hvdWxkIHBhc3MgdG8gdGhlIGxpbmtlciAoTElOS0VSLU9QVElPTlMpIGFuZCB0aGUgbmFtZSBvZgorIyBhIHNoZWxsIHZhcmlhYmxlIChTSEVMTC1WQVJJQUJMRSkuICBUaGUgbGlzdCBvZiBsaW5rZXIgb3B0aW9ucyBhcmUKKyMgYXBwZW5kZWQgdG8gdGhlIHNoZWxsIHZhcmlhYmxlIGluIGEgY29tcGlsZXItZGVwZW5kZW50IHdheS4KKyMKKyMgRm9yIGV4YW1wbGUsIGlmIHRoZSBzZWxlY3RlZCBsYW5ndWFnZSBpcyBDLCB0aGVuIHRoaXM6CisjCisjICAgX0FDX0xJTktFUl9PUFRJT04oWy1SIC91c3IvbG9jYWwvbGliL2Zvb10sIGZvb19MREZMQUdTKQorIworIyB3aWxsIGV4cGFuZCBpbnRvIHRoaXMgaWYgdGhlIHNlbGVjdGVkIEMgY29tcGlsZXIgaXMgZ2NjOgorIworIyAgIGZvb19MREZMQUdTPSItWGxpbmtlciAtUiAtWGxpbmtlciAvdXNyL2xvY2FsL2xpYi9mb28iCisjCisjIG90aGVyd2lzZSwgaXQgd2lsbCBleHBhbmQgaW50byB0aGlzOgorIworIyAgIGZvb19MREZMQUdTIi1SIC91c3IvbG9jYWwvbGliL2ZvbyIKKyMKKyMgWW91IGFyZSBlbmNvdXJhZ2VkIHRvIGFkZCBzdXBwb3J0IGZvciBjb21waWxlcnMgdGhhdCB0aGlzIG1hY3JvCisjIGRvZXNuJ3QgY3VycmVudGx5IHN1cHBvcnQuCisjIEZJWE1FOiBHZXQgcmlkIG9mIHRoaXMgbWFjcm8uCitBQ19ERUZVTihbX0FDX0xJTktFUl9PUFRJT05dLAorW2lmIHRlc3QgIiRhY19jb21waWxlcl9nbnUiID0geWVzOyB0aGVuCisgIGZvciBhY19saW5rX29wdCBpbiAkMTsgZG8KKyAgICAkMj0iWyRdJDIgLVhsaW5rZXIgJGFjX2xpbmtfb3B0IgorICBkb25lCitlbHNlCisgICQyPSJbJF0kMiAkMSIKK2ZpW11kbmwKK10pIyBfQUNfTElOS0VSX09QVElPTgorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAxYS4gTGFuZ3VhZ2Ugc2VsZWN0aW9uLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgQUNfTEFORyhGb3J0cmFuIDc3KQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19MQU5HX0RFRklORShbRm9ydHJhbiA3N10sIFtmNzddLCBbRl0sIFtGNzddLCBbXSwKK1thY19leHQ9ZgorYWNfY29tcGlsZT0nJEY3NyAtYyAkRkZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiZBU19NRVNTQUdFX0xPR19GRCcKK2FjX2xpbms9JyRGNzcgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRGRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JkFTX01FU1NBR0VfTE9HX0ZEJworYWNfY29tcGlsZXJfZ251PSRhY19jdl9mNzdfY29tcGlsZXJfZ251CitdKQorCisKKyMgQUNfTEFOR19GT1JUUkFONzcKKyMgLS0tLS0tLS0tLS0tLS0tLS0KK0FVX0RFRlVOKFtBQ19MQU5HX0ZPUlRSQU43N10sIFtBQ19MQU5HKEZvcnRyYW4gNzcpXSkKKworCisjIF9BQ19GT1JUUkFOX0FTU0VSVAorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ3VycmVudCBsYW5ndWFnZSBtdXN0IGJlIEZvcnRyYW4gb3IgRm9ydHJhbiA3Ny4KK200X2RlZnVuKFtfQUNfRk9SVFJBTl9BU1NFUlRdLAorW200X2lmKF9BQ19MQU5HLCBbRm9ydHJhbl0sIFtdLAorICAgICAgIFttNF9pZihfQUNfTEFORywgW0ZvcnRyYW4gNzddLCBbXSwKKwkgICAgICBbbTRfZmF0YWwoWyQwOiBjdXJyZW50IGxhbmd1YWdlIGlzIG5vdCBGb3J0cmFuOiBdIF9BQ19MQU5HKV0pXSldKQorCisKKyMgX0FDX0ZDCisjIC0tLS0tLQorIyBSZXR1cm4gRjc3IG9yIEZDLCBkZXBlbmRpbmcgdXBvbiB0aGUgbGFuZ3VhZ2UuCitBQ19ERUZVTihbX0FDX0ZDXSwKK1tfQUNfRk9SVFJBTl9BU1NFUlQoKWRubAorQUNfTEFOR19DQVNFKFtGb3J0cmFuIDc3XSwgW0Y3N10sCisJICAgICBbRm9ydHJhbl0sICAgIFtGQ10pXSkKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAyLiBQcm9kdWNpbmcgcHJvZ3JhbXMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIEFDX0xBTkdfUFJPR1JBTShGb3J0cmFuIDc3KShbUFJPTE9HVUVdLCBbQk9EWV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFllcywgd2UgZGlzY2FyZCB0aGUgUFJPTE9HVUUuCittNF9kZWZpbmUoW0FDX0xBTkdfUFJPR1JBTShGb3J0cmFuIDc3KV0sCitbbTRfaWZ2YWwoWyQxXSwKKyAgICAgICBbbTRfd2Fybihbc3ludGF4XSwgWyQwOiBpZ25vcmluZyBQUk9MT0dVRTogJDFdKV0pZG5sCisgICAgICBwcm9ncmFtIG1haW4KKyQyCisgICAgICBlbmRdKQorCisKKyMgX0FDX0xBTkdfSU9fUFJPR1JBTShGb3J0cmFuIDc3KQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2Ugc291cmNlIHRoYXQgcGVyZm9ybXMgSS9PLgorbTRfZGVmaW5lKFtfQUNfTEFOR19JT19QUk9HUkFNKEZvcnRyYW4gNzcpXSwKK1tBQ19MQU5HX1BST0dSQU0oW10sCitbZG5sCisgICAgICBvcGVuKHVuaXQ9OSxmaWxlPSdjb25mdGVzdC5vdXQnKQorICAgICAgY2xvc2UodW5pdD05KQorXSldKQorCisKKyMgQUNfTEFOR19DQUxMKEZvcnRyYW4gNzcpKFBST0xPR1VFLCBGVU5DVElPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRklYTUU6IFRoaXMgaXMgYSBndWVzcywgaGVscCEKK200X2RlZmluZShbQUNfTEFOR19DQUxMKEZvcnRyYW4gNzcpXSwKK1tBQ19MQU5HX1BST0dSQU0oWyQxXSwKK1sgICAgICBjYWxsICQyXSldKQorCisKKyMgQUNfTEFOR19GVU5DX0xJTktfVFJZKEZvcnRyYW4gNzcpKEZVTkNUSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW0FDX0xBTkdfRlVOQ19MSU5LX1RSWShGb3J0cmFuIDc3KV0sCitbQUNfTEFOR19QUk9HUkFNKFtdLAorWyAgICAgIGNhbGwgJDFdKV0pCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgMWIuIExhbmd1YWdlIHNlbGVjdGlvbi4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIEFDX0xBTkcoRm9ydHJhbikKKyMgLS0tLS0tLS0tLS0tLS0tLQorQUNfTEFOR19ERUZJTkUoW0ZvcnRyYW5dLCBbZmNdLCBbRkNdLCBbRkNdLCBbRm9ydHJhbiA3N10sCitbYWNfZXh0PSR7YWNfZmNfc3JjZXh0LWZ9CithY19jb21waWxlPSckRkMgLWMgJEZDRkxBR1MgJGFjX2ZjZmxhZ3Nfc3JjZXh0IGNvbmZ0ZXN0LiRhY19leHQgPiZBU19NRVNTQUdFX0xPR19GRCcKK2FjX2xpbms9JyRGQyAtbyBjb25mdGVzdCRhY19leGVleHQgJEZDRkxBR1MgJExERkxBR1MgJGFjX2ZjZmxhZ3Nfc3JjZXh0IGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiZBU19NRVNTQUdFX0xPR19GRCcKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfZmNfY29tcGlsZXJfZ251CitdKQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAzLiBMb29raW5nIGZvciBDb21waWxlcnMgYW5kIFByZXByb2Nlc3NvcnMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIEFDX0xBTkdfUFJFUFJPQyhGb3J0cmFuIDc3KQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZCB0aGUgRm9ydHJhbiA3NyBwcmVwcm9jZXNzb3IuICBNdXN0IGJlIEFDX0RFRlVOJ2QgdG8gYmUgQUNfUkVRVUlSRSdhYmxlLgorQUNfREVGVU4oW0FDX0xBTkdfUFJFUFJPQyhGb3J0cmFuIDc3KV0sCitbbTRfd2Fybihbc3ludGF4XSwKKwkgWyQwOiBObyBwcmVwcm9jZXNzb3IgZGVmaW5lZCBmb3IgXV9BQ19MQU5HKV0pCisKKyMgQUNfTEFOR19QUkVQUk9DKEZvcnRyYW4pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaW5kIHRoZSBGb3J0cmFuIHByZXByb2Nlc3Nvci4gIE11c3QgYmUgQUNfREVGVU4nZCB0byBiZSBBQ19SRVFVSVJFJ2FibGUuCitBQ19ERUZVTihbQUNfTEFOR19QUkVQUk9DKEZvcnRyYW4pXSwKK1ttNF93YXJuKFtzeW50YXhdLAorCSBbJDA6IE5vIHByZXByb2Nlc3NvciBkZWZpbmVkIGZvciBdX0FDX0xBTkcpXSkKKworCisjIEFDX0xBTkdfQ09NUElMRVIoRm9ydHJhbiA3NykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaW5kIHRoZSBGb3J0cmFuIDc3IGNvbXBpbGVyLiAgTXVzdCBiZSBBQ19ERUZVTidkIHRvIGJlCisjIEFDX1JFUVVJUkUnYWJsZS4KK0FDX0RFRlVOKFtBQ19MQU5HX0NPTVBJTEVSKEZvcnRyYW4gNzcpXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0Y3N10pXSkKKworIyBBQ19MQU5HX0NPTVBJTEVSKEZvcnRyYW4pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZCB0aGUgRm9ydHJhbiBjb21waWxlci4gIE11c3QgYmUgQUNfREVGVU4nZCB0byBiZQorIyBBQ19SRVFVSVJFJ2FibGUuCitBQ19ERUZVTihbQUNfTEFOR19DT01QSUxFUihGb3J0cmFuKV0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19GQ10pXSkKKworCisjIGFjX2N2X3Byb2dfZzc3CisjIC0tLS0tLS0tLS0tLS0tCisjIFdlIHVzZWQgdG8gbmFtZSB0aGUgY2FjaGUgdmFyaWFibGUgdGhpcyB3YXkuCitBVV9ERUZVTihbYWNfY3ZfcHJvZ19nNzddLAorW2FjX2N2X2Y3N19jb21waWxlcl9nbnVdKQorCisKKyMgX0FDX0ZDX0RJQUxFQ1RfWUVBUihbRElBTEVDVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBHaXZlbiBhIEZvcnRyYW4gRElBTEVDVCwgd2hpY2ggaXMgRm9ydHJhbiBbWVldWVkgb3Igc2ltcGx5IFtZWV1ZWSwKKyMgY29udmVydCB0byBhIDQtZGlnaXQgeWVhci4gIFRoZSBkaWFsZWN0IG11c3QgYmUgb25lIG9mIEZvcnRyYW4gNzcsCisjIDkwLCA5NSwgb3IgMjAwMCwgY3VycmVudGx5LiAgSWYgRElBTEVDVCBpcyBzaW1wbHkgRm9ydHJhbiBvciB0aGUKKyMgZW1wdHkgc3RyaW5nLCByZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcuCitBQ19ERUZVTihbX0FDX0ZDX0RJQUxFQ1RfWUVBUl0sCitbbTRfY2FzZShtNF9icGF0c3Vic3RzKG00X3RvbG93ZXIoWyQxXSksIFtmb3J0cmFuXSxbXSwgWyAqXSxbXSksCisJIFs3N10sWzE5NzddLCBbMTk3N10sWzE5NzddLAorCSBbOTBdLFsxOTkwXSwgWzE5OTBdLFsxOTkwXSwKKwkgWzk1XSxbMTk5NV0sIFsxOTk1XSxbMTk5NV0sCisJIFsyMDAwXSxbMjAwMF0sCisJIFtdLFtdLAorCSBbbTRfZmF0YWwoW3Vua25vd24gRm9ydHJhbiBkaWFsZWN0XSldKV0pCisKKworIyBfQUNfUFJPR19GQyhbRElBTEVDVF0sIFtDT01QSUxFUlMuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBESUFMRUNUIGlzIGEgRm9ydHJhbiBkaWFsZWN0LCBnaXZlbiBieSBGb3J0cmFuIFtZWV1ZWSBvciBzaW1wbHkgW1lZXVlZLAorIyBhbmQgbXVzdCBiZSBvbmUgb2YgdGhvc2Ugc3VwcG9ydGVkIGJ5IF9BQ19GQ19ESUFMRUNUX1lFQVIKKyMKKyMgSWYgRElBTEVDVCBpcyBzdXBwbGllZCwgdGhlbiB3ZSBzZWFyY2ggZm9yIGNvbXBpbGVycyBvZiB0aGF0IGRpYWxlY3QKKyMgZmlyc3QsIGFuZCB0aGVuIGxhdGVyIGRpYWxlY3RzLiAgT3RoZXJ3aXNlLCB3ZSBzZWFyY2ggZm9yIGNvbXBpbGVycworIyBvZiB0aGUgbmV3ZXN0IGRpYWxlY3QgZmlyc3QsIGFuZCB0aGVuIGVhcmxpZXIgZGlhbGVjdHMgaW4gaW5jcmVhc2luZyBhZ2UuCisjIFRoaXMgc2VhcmNoIG9yZGVyIGlzIG5lY2Vzc2FyaWx5IGltcGVyZmVjdCBiZWNhdXNlIHRoZSBkaWFsZWN0IGNhbm5vdAorIyBhbHdheXMgYmUgaW5mZXJyZWQgZnJvbSB0aGUgY29tcGlsZXIgbmFtZS4KKyMKKyMgS25vd24gY29tcGlsZXJzOgorIyAgZjc3L2Y5MC9mOTU6IGdlbmVyaWMgY29tcGlsZXIgbmFtZXMKKyMgIGc3NzogR05VIEZvcnRyYW4gNzcgY29tcGlsZXIKKyMgIGdmb3J0cmFuOiBHTlUgRm9ydHJhbiA5NSsgY29tcGlsZXIgKHJlbGVhc2VkIGluIGdjYyA0LjApCisjICBnOTU6IG9yaWdpbmFsIGdjYy1iYXNlZCBmOTUgY29tcGlsZXIgKGdmb3J0cmFuIGlzIGEgZm9yaykKKyMgIGZ0bjogbmF0aXZlIEZvcnRyYW4gOTUgY29tcGlsZXIgb24gQ3JheSBYMQorIyAgY2Y3NzogbmF0aXZlIEY3NyBjb21waWxlciB1bmRlciBvbGRlciBDcmF5cyAocHJlZmVyIG92ZXIgZm9ydDc3KQorIyAgZm9ydDc3OiBuYXRpdmUgRjc3IGNvbXBpbGVyIHVuZGVyIEhQLVVYIChhbmQgc29tZSBvbGRlciBDcmF5cykKKyMgIGZydDogRnVqaXRzdSBGNzcgY29tcGlsZXIKKyMgIHBnZjc3L3BnZjkwL3BnaHBmL3BnZjk1OiBQb3J0bGFuZCBHcm91cCBGNzcvRjkwL0Y5NSBjb21waWxlcnMKKyMgIHhsZi94bGY5MC94bGY5NTogSUJNIChBSVgpIEY3Ny9GOTAvRjk1IGNvbXBpbGVycworIyAgICBQcmVmZXIgeGxmOXggdG8gdGhlIGdlbmVyaWMgbmFtZXMgYmVjYXVzZSB0aGV5IGRvIG5vdCByZWplY3QgZmlsZQorIyAgICB3aXRoIGV4dGVuc2lvbiBgLmYnLgorIyAgbGY5NTogTGFoZXktRnVqaXRzdSBGOTUgY29tcGlsZXIKKyMgIGZsMzI6IE1pY3Jvc29mdCBGb3J0cmFuIDc3ICJQb3dlclN0YXRpb24iIGNvbXBpbGVyCisjICBhZjc3OiBBcG9nZWUgRjc3IGNvbXBpbGVyIGZvciBJbnRlcmdyYXBoIGhhcmR3YXJlIHJ1bm5pbmcgQ0xJWAorIyAgZXBjZjkwOiAiRWRpbmJ1cmdoIFBvcnRhYmxlIENvbXBpbGVyIiBGOTAKKyMgIGZvcnQ6IENvbXBhcSAobm93IEhQKSBGb3J0cmFuIDkwLzk1IGNvbXBpbGVyIGZvciBUcnU2NCBhbmQgTGludXgvQWxwaGEKKyMgIGlmb3J0LCBwcmV2aW91c2x5IGlmYzogSW50ZWwgRm9ydHJhbiA5NSBjb21waWxlciBmb3IgTGludXgveDg2CisjICBlZmM6IEludGVsIEZvcnRyYW4gOTUgY29tcGlsZXIgZm9yIElBNjQKK200X2RlZmluZShbX0FDX0Y5NV9GQ10sIFtnZm9ydHJhbiBnOTUgeGxmOTUgZjk1IGZvcnQgaWZvcnQgaWZjIGVmYyBwZ2Y5NSBsZjk1IGZ0bl0pCittNF9kZWZpbmUoW19BQ19GOTBfRkNdLCBbeGxmOTAgZjkwIHBnZjkwIHBnaHBmIGVwY2Y5MF0pCittNF9kZWZpbmUoW19BQ19GNzdfRkNdLCBbZzc3IHhsZiBmNzcgZnJ0IHBnZjc3IGNmNzcgZm9ydDc3IGZsMzIgYWY3N10pCitBQ19ERUZVTihbX0FDX1BST0dfRkNdLAorW19BQ19GT1JUUkFOX0FTU0VSVCgpZG5sCitBQ19DSEVDS19UT09MUyhbXV9BQ19GQ1tdLAorICAgICAgbTRfZGVmYXVsdChbJDJdLAorCW00X2Nhc2UoX0FDX0ZDX0RJQUxFQ1RfWUVBUihbJDFdKSwKKwkJWzE5OTVdLCBbX0FDX0Y5NV9GQ10sCisJCVsxOTkwXSwgW19BQ19GOTBfRkMgX0FDX0Y5NV9GQ10sCisJCVsxOTc3XSwgW19BQ19GNzdfRkMgX0FDX0Y5MF9GQyBfQUNfRjk1X0ZDXSwKKwkJW19BQ19GOTVfRkMgX0FDX0Y5MF9GQyBfQUNfRjc3X0ZDXSkpKQorCisjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCitfQVNfRUNIT19MT0coW2NoZWNraW5nIGZvciBfQUNfTEFORyBjb21waWxlciB2ZXJzaW9uXSkKK3NldCBYICRhY19jb21waWxlCithY19jb21waWxlcj0kWzJdCitmb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCisgIF9BQ19ET19MSU1JVChbJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiZBU19NRVNTQUdFX0xPR19GRF0pCitkb25lCitybSAtZiBhLm91dAorCittNF9leHBhbmRfb25jZShbX0FDX0NPTVBJTEVSX0VYRUVYVF0pW11kbmwKK200X2V4cGFuZF9vbmNlKFtfQUNfQ09NUElMRVJfT0JKRVhUXSlbXWRubAorIyBJZiB3ZSBkb24ndCB1c2UgYC5GJyBhcyBleHRlbnNpb24sIHRoZSBwcmVwcm9jZXNzb3IgaXMgbm90IHJ1biBvbiB0aGUKKyMgaW5wdXQgZmlsZS4gIChOb3RlIHRoYXQgdGhpcyBvbmx5IG5lZWRzIHRvIHdvcmsgZm9yIEdOVSBjb21waWxlcnMuKQorYWNfc2F2ZV9leHQ9JGFjX2V4dAorYWNfZXh0PUYKK19BQ19MQU5HX0NPTVBJTEVSX0dOVQorYWNfZXh0PSRhY19zYXZlX2V4dAorX0FDX1BST0dfRkNfRworXSkjIF9BQ19QUk9HX0ZDCisKKworIyBBQ19QUk9HX0Y3NyhbQ09NUElMRVJTLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENPTVBJTEVSUyBpcyBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIEZvcnRyYW4gNzcgY29tcGlsZXJzIHRvIHNlYXJjaAorIyBmb3IuICBTZWUgYWxzbyBfQUNfUFJPR19GQy4KK0FDX0RFRlVOKFtBQ19QUk9HX0Y3N10sCitbQUNfTEFOR19QVVNIKEZvcnRyYW4gNzcpZG5sCitBQ19BUkdfVkFSKFtGNzddLCAgICBbRm9ydHJhbiA3NyBjb21waWxlciBjb21tYW5kXSlkbmwKK0FDX0FSR19WQVIoW0ZGTEFHU10sIFtGb3J0cmFuIDc3IGNvbXBpbGVyIGZsYWdzXSlkbmwKK19BQ19BUkdfVkFSX0xERkxBR1MoKWRubAorX0FDX0FSR19WQVJfTElCUygpZG5sCitfQUNfUFJPR19GQyhbRm9ydHJhbiA3N10sIFskMV0pCitpZiB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KKyAgRzc3PXllcworZWxzZQorICBHNzc9CitmaQorQUNfTEFOR19QT1AoRm9ydHJhbiA3NylkbmwKK10pIyBBQ19QUk9HX0Y3NworCisKKyMgQUNfUFJPR19GQyhbQ09NUElMRVJTLi4uXSwgW0RJQUxFQ1RdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENPTVBJTEVSUyBpcyBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIEZvcnRyYW4gNzcgY29tcGlsZXJzIHRvIHNlYXJjaAorIyBmb3IsIGFuZCBbRElBTEVDVF0gaXMgYW4gb3B0aW9uYWwgZGlhbGVjdC4gIFNlZSBhbHNvIF9BQ19QUk9HX0ZDLgorQUNfREVGVU4oW0FDX1BST0dfRkNdLAorW0FDX0xBTkdfUFVTSChGb3J0cmFuKWRubAorQUNfQVJHX1ZBUihbRkNdLCAgICBbRm9ydHJhbiBjb21waWxlciBjb21tYW5kXSlkbmwKK0FDX0FSR19WQVIoW0ZDRkxBR1NdLCBbRm9ydHJhbiBjb21waWxlciBmbGFnc10pZG5sCitfQUNfQVJHX1ZBUl9MREZMQUdTKClkbmwKK19BQ19BUkdfVkFSX0xJQlMoKWRubAorX0FDX1BST0dfRkMoWyQyXSwgWyQxXSkKK0FDX0xBTkdfUE9QKEZvcnRyYW4pZG5sCitdKSMgQUNfUFJPR19GQworCisKKyMgX0FDX1BST0dfRkNfRworIyAtLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgLWcgd29ya3MsIGV2ZW4gaWYgRltDXUZMQUdTIGlzIHNldCwgaW4gY2FzZSB0aGUgcGFja2FnZQorIyBwbGF5cyBhcm91bmQgd2l0aCBGW0NdRkxBR1MgKHN1Y2ggYXMgdG8gYnVpbGQgYm90aCBkZWJ1Z2dpbmcgYW5kIG5vcm1hbAorIyB2ZXJzaW9ucyBvZiBhIGxpYnJhcnkpLCB0YXN0ZWxlc3MgYXMgdGhhdCBpZGVhIGlzLgorbTRfZGVmaW5lKFtfQUNfUFJPR19GQ19HXSwKK1tfQUNfRk9SVFJBTl9BU1NFUlQoKWRubAorYWNfdGVzdF9bXV9BQ19MQU5HX1BSRUZJWFtdRkxBR1M9JHtbXV9BQ19MQU5HX1BSRUZJWFtdRkxBR1Mrc2V0fQorYWNfc2F2ZV9bXV9BQ19MQU5HX1BSRUZJWFtdRkxBR1M9JFtdX0FDX0xBTkdfUFJFRklYW11GTEFHUworX0FDX0xBTkdfUFJFRklYW11GTEFHUz0KK0FDX0NBQ0hFX0NIRUNLKHdoZXRoZXIgJFtdX0FDX0ZDW10gYWNjZXB0cyAtZywgYWNfY3ZfcHJvZ19bXV9BQ19MQU5HX0FCQlJFVltdX2csCitbX0FDX0xBTkdfUFJFRklYW11GTEFHUz0tZworX0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oKV0sCitbYWNfY3ZfcHJvZ19bXV9BQ19MQU5HX0FCQlJFVltdX2c9eWVzXSwKK1thY19jdl9wcm9nX1tdX0FDX0xBTkdfQUJCUkVWW11fZz1ub10pCitdKQoraWYgdGVzdCAiJGFjX3Rlc3RfW11fQUNfTEFOR19QUkVGSVhbXUZMQUdTIiA9IHNldDsgdGhlbgorICBfQUNfTEFOR19QUkVGSVhbXUZMQUdTPSRhY19zYXZlX1tdX0FDX0xBTkdfUFJFRklYW11GTEFHUworZWxpZiB0ZXN0ICRhY19jdl9wcm9nX1tdX0FDX0xBTkdfQUJCUkVWW11fZyA9IHllczsgdGhlbgorICBpZiB0ZXN0ICJ4JGFjX2N2X1tdX0FDX0xBTkdfQUJCUkVWW11fY29tcGlsZXJfZ251IiA9IHh5ZXM7IHRoZW4KKyAgICBfQUNfTEFOR19QUkVGSVhbXUZMQUdTPSItZyAtTzIiCisgIGVsc2UKKyAgICBfQUNfTEFOR19QUkVGSVhbXUZMQUdTPSItZyIKKyAgZmkKK2Vsc2UKKyAgaWYgdGVzdCAieCRhY19jdl9bXV9BQ19MQU5HX0FCQlJFVltdX2NvbXBpbGVyX2dudSIgPSB4eWVzOyB0aGVuCisgICAgX0FDX0xBTkdfUFJFRklYW11GTEFHUz0iLU8yIgorICBlbHNlCisgICAgX0FDX0xBTkdfUFJFRklYW11GTEFHUz0KKyAgZmkKK2ZpW11kbmwKK10pIyBfQUNfUFJPR19GQ19HCisKKworIyBfQUNfUFJPR19GQ19DX08KKyMgLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QgaWYgdGhlIEZvcnRyYW4gY29tcGlsZXIgYWNjZXB0cyB0aGUgb3B0aW9ucyBgLWMnIGFuZCBgLW8nCisjIHNpbXVsdGFuZW91c2x5LCBhbmQgZGVmaW5lIGBbRjc3L0ZDXV9OT19NSU5VU19DX01JTlVTX08nIGlmIGl0IGRvZXMgbm90LgorIworIyBUaGUgdXNlZnVsbmVzcyBvZiB0aGlzIG1hY3JvIGlzIHF1ZXN0aW9uYWJsZSwgYXMgSSBjYW4ndCByZWFsbHkgc2VlCisjIHdoeSBhbnlvbmUgd291bGQgdXNlIGl0LiAgVGhlIG9ubHkgcmVhc29uIEkgaW5jbHVkZSBpdCBpcyBmb3IKKyMgY29tcGxldGVuZXNzLCBzaW5jZSBhIHNpbWlsYXIgdGVzdCBleGlzdHMgZm9yIHRoZSBDIGNvbXBpbGVyLgorIworIyBGSVhNRTogaXQgc2VlbXMgbGlrZSB3ZSBjb3VsZCBtZXJnZSB0aGUgQy9DKysvRm9ydHJhbiB2ZXJzaW9ucyBvZiB0aGlzLgorQUNfREVGVU4oW19BQ19QUk9HX0ZDX0NfT10sCitbX0FDX0ZPUlRSQU5fQVNTRVJUKClkbmwKK0FDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyICRbXV9BQ19GQ1tdIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlcl0sCisJICAgICAgIFthY19jdl9wcm9nX1tdX0FDX0xBTkdfQUJCUkVWW11fY19vXSwKK1tBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oW10pXSkKKyMgV2UgdGVzdCB0d2ljZSBiZWNhdXNlIHNvbWUgY29tcGlsZXJzIHJlZnVzZSB0byBvdmVyd3JpdGUgYW4gZXhpc3RpbmcKKyMgYC5vJyBmaWxlIHdpdGggYC1vJywgYWx0aG91Z2ggdGhleSB3aWxsIGNyZWF0ZSBvbmUuCithY190cnk9JyRbXV9BQ19GQ1tdICRbXV9BQ19MQU5HX1BSRUZJWFtdRkxBR1MgLWMgY29uZnRlc3QuJGFjX2V4dCAtbyBjb25mdGVzdDIuJGFjX29iamV4dCA+JkFTX01FU1NBR0VfTE9HX0ZEJworcm0gLWYgY29uZnRlc3QyLioKK2lmIF9BQ19ET19WQVIoYWNfdHJ5KSAmJgorICAgICB0ZXN0IC1mIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ICYmCisgICAgIF9BQ19ET19WQVIoYWNfdHJ5KTsgdGhlbgorICBhY19jdl9wcm9nX1tdX0FDX0xBTkdfQUJCUkVWW11fY19vPXllcworZWxzZQorICBhY19jdl9wcm9nX1tdX0FDX0xBTkdfQUJCUkVWW11fY19vPW5vCitmaQorcm0gLWYgY29uZnRlc3QqXSkKK2lmIHRlc3QgJGFjX2N2X3Byb2dfW11fQUNfTEFOR19BQkJSRVZbXV9jX28gPSBubzsgdGhlbgorICBBQ19ERUZJTkUoW11fQUNfRkNbXV9OT19NSU5VU19DX01JTlVTX08sIDEsCisJICAgIFtEZWZpbmUgdG8gMSBpZiB5b3VyIEZvcnRyYW4gY29tcGlsZXIgZG9lc24ndCBhY2NlcHQKKwkgICAgIC1jIGFuZCAtbyB0b2dldGhlci5dKQorZmkKK10pIyBfQUNfUFJPR19GQ19DX08KKworCisjIEFDX1BST0dfRjc3X0NfTworIyAtLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19QUk9HX0Y3N19DX09dLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfRjc3XSlkbmwKK0FDX0xBTkdfUFVTSChGb3J0cmFuIDc3KWRubAorX0FDX1BST0dfRkNfQ19PCitBQ19MQU5HX1BPUChGb3J0cmFuIDc3KWRubAorXSkjIEFDX1BST0dfRjc3X0NfTworCisKKyMgQUNfUFJPR19GQ19DX08KKyMgLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfUFJPR19GQ19DX09dLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfRkNdKWRubAorQUNfTEFOR19QVVNIKEZvcnRyYW4pZG5sCitfQUNfUFJPR19GQ19DX08KK0FDX0xBTkdfUE9QKEZvcnRyYW4pZG5sCitdKSMgQUNfUFJPR19GQ19DX08KKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIDQuIENvbXBpbGVycycgY2hhcmFjdGVyaXN0aWNzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIF9BQ19QUk9HX0ZDX1ZfT1VUUFVUKFtGTEFHID0gJGFjX2N2X3Byb2dfe2Y3Ny9mY31fdl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGluayBhIHRyaXZpYWwgRm9ydHJhbiBwcm9ncmFtLCBjb21waWxpbmcgd2l0aCBhIHZlcmJvc2Ugb3V0cHV0IEZMQUcKKyMgKHdob3NlIGRlZmF1bHQgdmFsdWUsICRhY19jdl9wcm9nX3tmNzcvZmN9X3YsIGlzIGNvbXB1dGVkIGJ5CisjIF9BQ19QUk9HX0ZDX1YpLCBhbmQgcmV0dXJuIHRoZSBvdXRwdXQgaW4gJGFjX3tmNzcvZmN9X3Zfb3V0cHV0LiAgVGhpcworIyBvdXRwdXQgaXMgcHJvY2Vzc2VkIGluIHRoZSB3YXkgZXhwZWN0ZWQgYnkgX0FDX0ZDX0xJQlJBUllfTERGTEFHUywKKyMgc28gdGhhdCBhbnkgbGluayBmbGFncyB0aGF0IGFyZSBlY2hvZWQgYnkgdGhlIGNvbXBpbGVyIGFwcGVhciBhcworIyBzcGFjZS1zZXBhcmF0ZWQgaXRlbXMuCitBQ19ERUZVTihbX0FDX1BST0dfRkNfVl9PVVRQVVRdLAorW19BQ19GT1JUUkFOX0FTU0VSVCgpZG5sCitBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oW10pXSkKKworIyBDb21waWxlIGFuZCBsaW5rIG91ciBzaW1wbGUgdGVzdCBwcm9ncmFtIGJ5IHBhc3NpbmcgYSBmbGFnIChhcmd1bWVudAorIyAxIHRvIHRoaXMgbWFjcm8pIHRvIHRoZSBGb3J0cmFuIGNvbXBpbGVyIGluIG9yZGVyIHRvIGdldAorIyAidmVyYm9zZSIgb3V0cHV0IHRoYXQgd2UgY2FuIHRoZW4gcGFyc2UgZm9yIHRoZSBGb3J0cmFuIGxpbmtlcgorIyBmbGFncy4KK2FjX3NhdmVfW11fQUNfTEFOR19QUkVGSVhbXUZMQUdTPSRbXV9BQ19MQU5HX1BSRUZJWFtdRkxBR1MKK19BQ19MQU5HX1BSRUZJWFtdRkxBR1M9IiRbXV9BQ19MQU5HX1BSRUZJWFtdRkxBR1MgbTRfZGVmYXVsdChbJDFdLCBbJGFjX2N2X3Byb2dfW11fQUNfTEFOR19BQkJSRVZbXV92XSkiCitldmFsICJzZXQgeCAkYWNfbGluayIKK3NoaWZ0CitfQVNfRUNIT19MT0coWyRbKl1dKQorIyBnZm9ydHJhbiA0LjMgb3V0cHV0cyBsaW5lcyBzZXR0aW5nIENPTExFQ1RfR0NDX09QVElPTlMsIENPTVBJTEVSX1BBVEgsCisjIExJQlJBUllfUEFUSDsgc2tpcCBhbGwgc3VjaCBzZXR0aW5ncy4KK2FjX1tdX0FDX0xBTkdfQUJCUkVWW11fdl9vdXRwdXQ9YGV2YWwgJGFjX2xpbmsgQVNfTUVTU0FHRV9MT0dfRkQ+JjEgMj4mMSB8CisgIGdyZXAgLXYgJ0RyaXZpbmc6JyB8IGdyZXAgLXYgIl5bW18kYXNfY3JfTGV0dGVyc11dW1tfJGFzX2NyX2FsbnVtXV0qPSJgCitBU19FQ0hPKFsiJGFjX1tdX0FDX0xBTkdfQUJCUkVWW11fdl9vdXRwdXQiXSkgPiZBU19NRVNTQUdFX0xPR19GRAorX0FDX0xBTkdfUFJFRklYW11GTEFHUz0kYWNfc2F2ZV9bXV9BQ19MQU5HX1BSRUZJWFtdRkxBR1MKKworcm0gLXJmIGNvbmZ0ZXN0KgorCisjIE9uIEhQL1VYIHRoZXJlIGlzIGEgbGluZSBsaWtlOiAiTFBBVEggaXM6IC9mb286L2JhcjovYmF6IiB3aGVyZQorIyAvZm9vLCAvYmFyLCBhbmQgL2JheiBhcmUgc2VhcmNoIGRpcmVjdG9yaWVzIGZvciB0aGUgRm9ydHJhbiBsaW5rZXIuCisjIEhlcmUsIHdlIGNoYW5nZSB0aGVzZSBpbnRvIC1ML2ZvbyAtTC9iYXIgLUwvYmF6IChhbmQgcHV0IGl0IGZpcnN0KToKK2FjX1tdX0FDX0xBTkdfQUJCUkVWW11fdl9vdXRwdXQ9ImBlY2hvICRhY19bXV9BQ19MQU5HX0FCQlJFVltdX3Zfb3V0cHV0IHwKKwlncmVwICdMUEFUSCBpczonIHwKKwlzZWQgJ3N8LipMUEFUSCBpc1woOiAqW1teIF1dKlwpLip8XDF8O3N8OiAqL3wgLUwvfGcnYCAkYWNfW11fQUNfTEFOR19BQkJSRVZbXV92X291dHB1dCIKKworIyBGSVhNRTogd2Uga2VlcCBnZXR0aW5nIGJpdHRlbiBieSBxdW90ZWQgYXJndW1lbnRzOyBhIG1vcmUgZ2VuZXJhbCBmaXgKKyMgICAgICAgIHRoYXQgZGV0ZWN0cyB1bmJhbGFuY2VkIHF1b3RlcyBpbiBGTElCUyBzaG91bGQgYmUgaW1wbGVtZW50ZWQKKyMgICAgICAgIGFuZCAodWdoKSB0ZXN0ZWQgYXQgc29tZSBwb2ludC4KK2Nhc2UgJGFjX1tdX0FDX0xBTkdfQUJCUkVWW11fdl9vdXRwdXQgaW4KKyAgIyBJZiB3ZSBhcmUgdXNpbmcgeGxmIHRoZW4gcmVwbGFjZSBhbGwgdGhlIGNvbW1hcyB3aXRoIHNwYWNlcy4KKyAgKnhsZmVudHJ5KikKKyAgICBhY19bXV9BQ19MQU5HX0FCQlJFVltdX3Zfb3V0cHV0PWBlY2hvICRhY19bXV9BQ19MQU5HX0FCQlJFVltdX3Zfb3V0cHV0IHwgc2VkICdzLywvIC9nJ2AgOzsKKworICAjIFdpdGggSW50ZWwgaWZjLCBpZ25vcmUgdGhlIHF1b3RlZCAtbUdMT0Jfb3B0aW9uc19zdHJpbmcgc3R1ZmYgKHF1b3RlZAorICAjICRMSUJTIGNvbmZ1c2UgdXMsIGFuZCB0aGUgbGlicmFyaWVzIGFwcGVhciBsYXRlciBpbiB0aGUgb3V0cHV0IGFueXdheSkuCisgICptR0xPQl9vcHRpb25zX3N0cmluZyopCisgICAgYWNfW11fQUNfTEFOR19BQkJSRVZbXV92X291dHB1dD1gZWNobyAkYWNfW11fQUNfTEFOR19BQkJSRVZbXV92X291dHB1dCB8IHNlZCAncy8iLW1HTE9CW1teIl1dKiIvIC9nJ2AgOzsKKworICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVyIGhhcyBzaW5nbHktIG9yIGRvdWJseS1xdW90ZWQgLWNtZGxpbmUgYXJndW1lbnQKKyAgIyBTaW5nbHktcXVvdGVkIGFyZ3VtZW50cyB3ZXJlIHJlcG9ydGVkIGZvciB2ZXJzaW9ucyA1LjItNCBhbmQgNi4wLTQuCisgICMgRG91Ymx5LXF1b3RlZCBhcmd1bWVudHMgd2VyZSByZXBvcnRlZCBmb3IgIlBHRjkwL3g4NiBMaW51eC94ODYgNS4wLTIiLgorICAqLWNtZGxpbmVcICogfCAqLWlnbm9yZVwgKiB8ICotZGVmXCAqKQorICAgIGFjX1tdX0FDX0xBTkdfQUJCUkVWW11fdl9vdXRwdXQ9YGVjaG8gJGFjX1tdX0FDX0xBTkdfQUJCUkVWW11fdl9vdXRwdXQgfCBzZWQgIlwKKwlzLy1jbWRsaW5lICAqJ1tbXiddXSonLyAvZzsgcy8tY21kbGluZSAgKlwiW1teXCJdXSpcIi8gL2cKKwlzLy1pZ25vcmUgIConW1teJ11dKicvIC9nOyBzLy1pZ25vcmUgICpcIltbXlwiXV0qXCIvIC9nCisJcy8tZGVmICAqJ1tbXiddXSonLyAvZzsgcy8tZGVmICAqXCJbW15cIl1dKlwiLyAvZyJgIDs7CisKKyAgIyBJZiB3ZSBhcmUgdXNpbmcgQ3JheSBGb3J0cmFuIHRoZW4gZGVsZXRlIHF1b3Rlcy4KKyAgKmNmdDkwKikKKyAgICBhY19bXV9BQ19MQU5HX0FCQlJFVltdX3Zfb3V0cHV0PWBlY2hvICRhY19bXV9BQ19MQU5HX0FCQlJFVltdX3Zfb3V0cHV0IHwgc2VkICdzLyIvL2cnYCA7OworZXNhYworCitdKSMgX0FDX1BST0dfRkNfVl9PVVRQVVQKKworCisjIF9BQ19QUk9HX0ZDX1YKKyMgLS0tLS0tLS0tLS0tLS0KKyMKKyMgRGV0ZXJtaW5lIHRoZSBmbGFnIHRoYXQgY2F1c2VzIHRoZSBGb3J0cmFuIGNvbXBpbGVyIHRvIHByaW50CisjIGluZm9ybWF0aW9uIG9mIGxpYnJhcnkgYW5kIG9iamVjdCBmaWxlcyAobm9ybWFsbHkgLXYpCisjIE5lZWRlZCBmb3IgX0FDX0ZDX0xJQlJBUllfRkxBR1MKKyMgU29tZSBjb21waWxlcnMgZG9uJ3QgYWNjZXB0IC12IChMYWhleTogLXZlcmJvc2UsIHhsZjogLVYsIEZ1aml0c3U6IC0jIyMpCitBQ19ERUZVTihbX0FDX1BST0dfRkNfVl0sCitbX0FDX0ZPUlRSQU5fQVNTRVJUKClkbmwKK0FDX0NBQ0hFX0NIRUNLKFtob3cgdG8gZ2V0IHZlcmJvc2UgbGlua2luZyBvdXRwdXQgZnJvbSAkW11fQUNfRkNbXV0sCisJCVthY19jdl9wcm9nX1tdX0FDX0xBTkdfQUJCUkVWW11fdl0sCitbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTSgpXSwKK1thY19jdl9wcm9nX1tdX0FDX0xBTkdfQUJCUkVWW11fdj0KKyMgVHJ5IHNvbWUgb3B0aW9ucyBmcmVxdWVudGx5IHVzZWQgdmVyYm9zZSBvdXRwdXQKK2ZvciBhY192ZXJiIGluIC12IC12ZXJib3NlIC0tdmVyYm9zZSAtViAtXCNcI1wjOyBkbworICBfQUNfUFJPR19GQ19WX09VVFBVVCgkYWNfdmVyYikKKyAgIyBsb29rIGZvciAtbCogYW5kICouYSBjb25zdHJ1Y3RzIGluIHRoZSBvdXRwdXQKKyAgZm9yIGFjX2FyZyBpbiAkYWNfW11fQUNfTEFOR19BQkJSRVZbXV92X291dHB1dDsgZG8KKyAgICAgY2FzZSAkYWNfYXJnIGluCisJW1tcXC9dXSouYSB8ID86W1tcXC9dXSouYSB8IC1bW2xMUnVdXSopCisJICBhY19jdl9wcm9nX1tdX0FDX0xBTkdfQUJCUkVWW11fdj0kYWNfdmVyYgorCSAgYnJlYWsgMiA7OworICAgICBlc2FjCisgIGRvbmUKK2RvbmUKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX1tdX0FDX0xBTkdfQUJCUkVWW11fdiI7IHRoZW4KKyAgIEFDX01TR19XQVJOKFtjYW5ub3QgZGV0ZXJtaW5lIGhvdyB0byBvYnRhaW4gbGlua2luZyBpbmZvcm1hdGlvbiBmcm9tICRbXV9BQ19GQ1tdXSkKK2ZpXSwKKwkJICBbQUNfTVNHX1dBUk4oW2NvbXBpbGF0aW9uIGZhaWxlZF0pXSkKK10pXSkjIF9BQ19QUk9HX0ZDX1YKKworCisjIF9BQ19GQ19MSUJSQVJZX0xERkxBR1MKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBEZXRlcm1pbmUgdGhlIGxpbmtlciBmbGFncyAoZS5nLiAiLUwiIGFuZCAiLWwiKSBmb3IgdGhlIEZvcnRyYW4KKyMgaW50cmluc2ljIGFuZCBydW50aW1lIGxpYnJhcmllcyB0aGF0IGFyZSByZXF1aXJlZCB0byBzdWNjZXNzZnVsbHkKKyMgbGluayBhIEZvcnRyYW4gcHJvZ3JhbSBvciBzaGFyZWQgbGlicmFyeS4gIFRoZSBvdXRwdXQgdmFyaWFibGUKKyMgRkxJQlMvRkNMSUJTIGlzIHNldCB0byB0aGVzZSBmbGFncy4KKyMKKyMgVGhpcyBtYWNybyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGluIHRob3NlIHNpdHVhdGlvbnMgd2hlbiBpdCBpcworIyBuZWNlc3NhcnkgdG8gbWl4LCBlLmcuIEMrKyBhbmQgRm9ydHJhbiwgc291cmNlIGNvZGUgaW50byBhIHNpbmdsZQorIyBwcm9ncmFtIG9yIHNoYXJlZCBsaWJyYXJ5LgorIworIyBGb3IgZXhhbXBsZSwgaWYgb2JqZWN0IGZpbGVzIGZyb20gYSBDKysgYW5kIEZvcnRyYW4gY29tcGlsZXIgbXVzdAorIyBiZSBsaW5rZWQgdG9nZXRoZXIsIHRoZW4gdGhlIEMrKyBjb21waWxlci9saW5rZXIgbXVzdCBiZSB1c2VkIGZvcgorIyBsaW5raW5nIChzaW5jZSBzcGVjaWFsIEMrKy1pc2ggdGhpbmdzIG5lZWQgdG8gaGFwcGVuIGF0IGxpbmsgdGltZQorIyBsaWtlIGNhbGxpbmcgZ2xvYmFsIGNvbnN0cnVjdG9ycywgaW5zdGFudGlhdGluZyB0ZW1wbGF0ZXMsIGVuYWJsaW5nCisjIGV4Y2VwdGlvbiBzdXBwb3J0LCBldGMuKS4KKyMKKyMgSG93ZXZlciwgdGhlIEZvcnRyYW4gaW50cmluc2ljIGFuZCBydW50aW1lIGxpYnJhcmllcyBtdXN0IGJlCisjIGxpbmtlZCBpbiBhcyB3ZWxsLCBidXQgdGhlIEMrKyBjb21waWxlci9saW5rZXIgZG9lc24ndCBrbm93IGhvdyB0bworIyBhZGQgdGhlc2UgRm9ydHJhbiBsaWJyYXJpZXMuICBIZW5jZSwgdGhlIG1hY3JvCisjICJBQ19GNzdfTElCUkFSWV9MREZMQUdTIiB3YXMgY3JlYXRlZCB0byBkZXRlcm1pbmUgdGhlc2UgRm9ydHJhbgorIyBsaWJyYXJpZXMuCisjCisjIFRoaXMgbWFjcm8gd2FzIHBhY2thZ2VkIGluIGl0cyBjdXJyZW50IGZvcm0gYnkgTWF0dGhldyBELiBMYW5nc3Rvbi4KKyMgSG93ZXZlciwgbmVhcmx5IGFsbCBvZiB0aGlzIG1hY3JvIGNhbWUgZnJvbSB0aGUgIk9DVEFWRV9GTElCUyIgbWFjcm8KKyMgaW4gIm9jdGF2ZS0yLjAuMTMvYWNsb2NhbC5tNCIsIGFuZCBmdWxsIGNyZWRpdCBzaG91bGQgZ28gdG8gSm9obgorIyBXLiBFYXRvbiBmb3Igd3JpdGluZyB0aGlzIGV4dHJlbWVseSB1c2VmdWwgbWFjcm8uICBUaGFuayB5b3UgSm9obi4KK0FDX0RFRlVOKFtfQUNfRkNfTElCUkFSWV9MREZMQUdTXSwKK1tfQUNfRk9SVFJBTl9BU1NFUlQoKWRubAorX0FDX1BST0dfRkNfVgorQUNfQ0FDSEVfQ0hFQ0soW2ZvciBfQUNfTEFORyBsaWJyYXJpZXMgb2YgJFtdX0FDX0ZDW11dLCBhY19jdl9bXV9BQ19MQU5HX0FCQlJFVltdX2xpYnMsCitbaWYgdGVzdCAieCRbXV9BQ19MQU5HX1BSRUZJWFtdTElCUyIgIT0gIngiOyB0aGVuCisgIGFjX2N2X1tdX0FDX0xBTkdfQUJCUkVWW11fbGlicz0iJFtdX0FDX0xBTkdfUFJFRklYW11MSUJTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKworX0FDX1BST0dfRkNfVl9PVVRQVVQKKworYWNfY3ZfW11fQUNfTEFOR19BQkJSRVZbXV9saWJzPQorCisjIFNhdmUgcG9zaXRpb25hbCBhcmd1bWVudHMgKGlmIGFueSkKK2FjX3NhdmVfcG9zaXRpb25hbD0iJFtAXSIKKworc2V0IFggJGFjX1tdX0FDX0xBTkdfQUJCUkVWW11fdl9vdXRwdXQKK3doaWxlIHRlc3QgJFtAJTpAXSAhPSAxOyBkbworICBzaGlmdAorICBhY19hcmc9JFsxXQorICBjYXNlICRhY19hcmcgaW4KKwlbW1xcL11dKi5hIHwgPzpbW1xcL11dKi5hKQorCSAgX0FDX0xJU1RfTUVNQkVSX0lGKCRhY19hcmcsICRhY19jdl9bXV9BQ19MQU5HX0FCQlJFVltdX2xpYnMsICwKKwkgICAgICBhY19jdl9bXV9BQ19MQU5HX0FCQlJFVltdX2xpYnM9IiRhY19jdl9bXV9BQ19MQU5HX0FCQlJFVltdX2xpYnMgJGFjX2FyZyIpCisJICA7OworCS1iSToqKQorCSAgX0FDX0xJU1RfTUVNQkVSX0lGKCRhY19hcmcsICRhY19jdl9bXV9BQ19MQU5HX0FCQlJFVltdX2xpYnMsICwKKwkgICAgIFtfQUNfTElOS0VSX09QVElPTihbJGFjX2FyZ10sIGFjX2N2X1tdX0FDX0xBTkdfQUJCUkVWW11fbGlicyldKQorCSAgOzsKKwkgICMgSWdub3JlIHRoZXNlIGZsYWdzLgorCS1sYW5nKiB8IC1sY3J0Ki5vIHwgLWxjIHwgLWxnY2MqIHwgLWxTeXN0ZW0gfCAtbGlibWlsIHwgLWxpdHRsZSBcCisJICB8LUxBTkc6PSogfCAtTElTVDoqIHwgLUxOTzoqKQorCSAgOzsKKwktbGtlcm5lbDMyKQorCSAgdGVzdCB4IiRDWUdXSU4iICE9IHh5ZXMgJiYgYWNfY3ZfW11fQUNfTEFOR19BQkJSRVZbXV9saWJzPSIkYWNfY3ZfW11fQUNfTEFOR19BQkJSRVZbXV9saWJzICRhY19hcmciCisJICA7OworCS1bW0xSdVl6XV0pCisJICAjIFRoZXNlIGZsYWdzLCB3aGVuIHNlZW4gYnkgdGhlbXNlbHZlcywgdGFrZSBhbiBhcmd1bWVudC4KKwkgICMgV2UgcmVtb3ZlIHRoZSBzcGFjZSBiZXR3ZWVuIG9wdGlvbiBhbmQgYXJndW1lbnQgYW5kIHJlLWl0ZXJhdGUKKwkgICMgdW5sZXNzIHdlIGZpbmQgYW4gZW1wdHkgYXJnIG9yIGEgbmV3IG9wdGlvbiAoc3RhcnRpbmcgd2l0aCAtKQorCSAgY2FzZSAkWzJdIGluCisJICAgICAiIiB8IC0qKTs7CisJICAgICAqKQorCQlhY19hcmc9IiRhY19hcmckWzJdIgorCQlzaGlmdDsgc2hpZnQKKwkJc2V0IFggJGFjX2FyZyAiJFtAXSIKKwkJOzsKKwkgIGVzYWMKKwkgIDs7CisJLVlQLCopCisJICBmb3IgYWNfaiBpbiBgQVNfRUNITyhbIiRhY19hcmciXSkgfCBzZWQgLWUgJ3MvLVlQLC8tTC87cy86LyAtTC9nJ2A7IGRvCisJICAgIF9BQ19MSVNUX01FTUJFUl9JRigkYWNfaiwgJGFjX2N2X1tdX0FDX0xBTkdfQUJCUkVWW11fbGlicywgLAorCQkJICAgICAgIFthY19hcmc9IiRhY19hcmcgJGFjX2oiCisJCQkgICAgICAgYWNfY3ZfW11fQUNfTEFOR19BQkJSRVZbXV9saWJzPSIkYWNfY3ZfW11fQUNfTEFOR19BQkJSRVZbXV9saWJzICRhY19qIl0pCisJICBkb25lCisJICA7OworCS1bW2xMUl1dKikKKwkgIF9BQ19MSVNUX01FTUJFUl9JRigkYWNfYXJnLCAkYWNfY3ZfW11fQUNfTEFOR19BQkJSRVZbXV9saWJzLCAsCisJCQkgICAgIGFjX2N2X1tdX0FDX0xBTkdfQUJCUkVWW11fbGlicz0iJGFjX2N2X1tdX0FDX0xBTkdfQUJCUkVWW11fbGlicyAkYWNfYXJnIikKKwkgIDs7CisJLXphbGxleHRyYWN0KnwgLXpkZWZhdWx0ZXh0cmFjdCkKKwkgIGFjX2N2X1tdX0FDX0xBTkdfQUJCUkVWW11fbGlicz0iJGFjX2N2X1tdX0FDX0xBTkdfQUJCUkVWW11fbGlicyAkYWNfYXJnIgorCSAgOzsKKwkgICMgSWdub3JlIGV2ZXJ5dGhpbmcgZWxzZS4KKyAgZXNhYworZG9uZQorIyByZXN0b3JlIHBvc2l0aW9uYWwgYXJndW1lbnRzCitzZXQgWCAkYWNfc2F2ZV9wb3NpdGlvbmFsOyBzaGlmdAorCisjIFdlIG9ubHkgY29uc2lkZXIgIkxEX1JVTl9QQVRIIiBvbiBTb2xhcmlzIHN5c3RlbXMuICBJZiB0aGlzIGlzIHNlZW4sCisjIHRoZW4gd2UgaW5zaXN0IHRoYXQgdGhlICJydW4gcGF0aCIgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoIChpLmUuIGl0CisjIG11c3QgYmVnaW4gd2l0aCBhICIvIikuCitjYXNlIGAodW5hbWUgLXNyKSAyPi9kZXYvbnVsbGAgaW4KKyAgICJTdW5PUyA1IiopCisgICAgICBhY19sZF9ydW5fcGF0aD1gQVNfRUNITyhbIiRhY19bXV9BQ19MQU5HX0FCQlJFVltdX3Zfb3V0cHV0Il0pIHwKKwkJCXNlZCAtbiAncyxeLipMRF9SVU5fUEFUSCAqPSAqXCgvW1teIF1dKlwpLiokLC1SXDEscCdgCisgICAgICB0ZXN0ICJ4JGFjX2xkX3J1bl9wYXRoIiAhPSB4ICYmCisJX0FDX0xJTktFUl9PUFRJT04oWyRhY19sZF9ydW5fcGF0aF0sIGFjX2N2X1tdX0FDX0xBTkdfQUJCUkVWW11fbGlicykKKyAgICAgIDs7Citlc2FjCitmaSAjIHRlc3QgIngkW11fQUNfTEFOR19QUkVGSVhbXUxJQlMiID0gIngiCitdKQorW11fQUNfTEFOR19QUkVGSVhbXUxJQlM9IiRhY19jdl9bXV9BQ19MQU5HX0FCQlJFVltdX2xpYnMiCitBQ19TVUJTVChbXV9BQ19MQU5HX1BSRUZJWFtdTElCUykKK10pIyBfQUNfRkNfTElCUkFSWV9MREZMQUdTCisKKworIyBBQ19GNzdfTElCUkFSWV9MREZMQUdTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19GNzdfTElCUkFSWV9MREZMQUdTXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0Y3N10pZG5sCitBQ19MQU5HX1BVU0goRm9ydHJhbiA3NylkbmwKK19BQ19GQ19MSUJSQVJZX0xERkxBR1MKK0FDX0xBTkdfUE9QKEZvcnRyYW4gNzcpZG5sCitdKSMgQUNfRjc3X0xJQlJBUllfTERGTEFHUworCisKKyMgQUNfRkNfTElCUkFSWV9MREZMQUdTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19GQ19MSUJSQVJZX0xERkxBR1NdLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfRkNdKWRubAorQUNfTEFOR19QVVNIKEZvcnRyYW4pZG5sCitfQUNfRkNfTElCUkFSWV9MREZMQUdTCitBQ19MQU5HX1BPUChGb3J0cmFuKWRubAorXSkjIEFDX0ZDX0xJQlJBUllfTERGTEFHUworCisKKyMgX0FDX0ZDX0RVTU1ZX01BSU4oW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgRGV0ZWN0IG5hbWUgb2YgZHVtbXkgbWFpbiByb3V0aW5lIHJlcXVpcmVkIGJ5IHRoZSBGb3J0cmFuIGxpYnJhcmllcywKKyMgKGlmIGFueSkgYW5kIGRlZmluZSB7Rjc3LEZDfV9EVU1NWV9NQUlOIHRvIHRoaXMgbmFtZSAod2hpY2ggc2hvdWxkIGJlCisjIHVzZWQgZm9yIGEgZHVtbXkgZGVjbGFyYXRpb24sIGlmIGl0IGlzIGRlZmluZWQpLiAgT24gc29tZSBzeXN0ZW1zLAorIyBsaW5raW5nIGEgQyBwcm9ncmFtIHRvIHRoZSBGb3J0cmFuIGxpYnJhcnkgZG9lcyBub3Qgd29yayB1bmxlc3MgeW91CisjIHN1cHBseSBhIGR1bW15IGZ1bmN0aW9uIGNhbGxlZCBzb21ldGhpbmcgbGlrZSBNQUlOX18uCisjCisjIEV4ZWN1dGUgQUNUSU9OLUlGLU5PVC1GT1VORCBpZiBubyB3YXkgb2Ygc3VjY2Vzc2Z1bGx5IGxpbmtpbmcgYSBDCisjIHByb2dyYW0gd2l0aCB0aGUge0Y3NyxGQ30gbGlicyBpcyBmb3VuZDsgZGVmYXVsdCB0byBleGl0aW5nIHdpdGggYW4gZXJyb3IKKyMgbWVzc2FnZS4gIEV4ZWN1dGUgQUNUSU9OLUlGLUZPVU5EIGlmIGEgZHVtbXkgcm91dGluZSBuYW1lIGlzIG5lZWRlZAorIyBhbmQgZm91bmQgb3IgaWYgaXQgaXMgbm90IG5lZWRlZCAoZGVmYXVsdCB0byBkZWZpbmluZyB7Rjc3LEZDfV9EVU1NWV9NQUlOCisjIHdoZW4gbmVlZGVkKS4KKyMKKyMgV2hhdCBpcyB0ZWNobmljYWxseSBoYXBwZW5pbmcgaXMgdGhhdCB0aGUgRm9ydHJhbiBsaWJyYXJpZXMgcHJvdmlkZQorIyB0aGVpciBvd24gbWFpbigpIGZ1bmN0aW9uLCB3aGljaCB1c3VhbGx5IGluaXRpYWxpemVzIEZvcnRyYW4gSS9PIGFuZAorIyBzaW1pbGFyIHN0dWZmLCBhbmQgdGhlbiBjYWxscyBNQUlOX18sIHdoaWNoIGlzIHRoZSBlbnRyeSBwb2ludCBvZgorIyB5b3VyIHByb2dyYW0uICBVc3VhbGx5LCBhIEMgcHJvZ3JhbSB3aWxsIG92ZXJyaWRlIHRoaXMgd2l0aCBpdHMgb3duCisjIG1haW4oKSByb3V0aW5lLCBidXQgdGhlIGxpbmtlciBzb21ldGltZXMgY29tcGxhaW4gaWYgeW91IGRvbid0CisjIHByb3ZpZGUgYSBkdW1teSAobmV2ZXItY2FsbGVkKSBNQUlOX18gcm91dGluZSBhbnl3YXkuCisjCisjIE9mIGNvdXJzZSwgcHJvZ3JhbXMgdGhhdCB3YW50IHRvIGFsbG93IEZvcnRyYW4gc3Vicm91dGluZXMgdG8gZG8KKyMgSS9PLCBldGNldGVyYSwgc2hvdWxkIGNhbGwgdGhlaXIgbWFpbiByb3V0aW5lIE1BSU5fXygpIChvciB3aGF0ZXZlcikKKyMgaW5zdGVhZCBvZiBtYWluKCkuICBBIHNlcGFyYXRlIGF1dG9jb25mIHRlc3QgKF9BQ19GQ19NQUlOKSBjaGVja3MKKyMgZm9yIHRoZSByb3V0aW5lIHRvIHVzZSBpbiB0aGlzIGNhc2UgKHNpbmNlIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIHRlc3QKKyMgYXJlIHNsaWdodGx5IGRpZmZlcmVudCkuICBUbyBsaW5rIHRvIGUuZy4gcHVyZWx5IG51bWVyaWNhbAorIyBsaWJyYXJpZXMsIHRoaXMgaXMgbm9ybWFsbHkgbm90IG5lY2Vzc2FyeSwgaG93ZXZlciwgYW5kIG1vc3QgQy9DKysKKyMgcHJvZ3JhbXMgYXJlIHJlbHVjdGFudCB0byB0dXJuIG92ZXIgc28gbXVjaCBjb250cm9sIHRvIEZvcnRyYW4uICA9KQorIworIyBUaGUgbmFtZSB2YXJpYW50cyB3ZSBjaGVjayBmb3IgYXJlIChpbiBvcmRlcik6CisjICAgTUFJTl9fIChnNzcsIE1BSU5fXyByZXF1aXJlZCBvbiBzb21lIHN5c3RlbXM7IElSSVgsIE1BSU5fXyBvcHRpb25hbCkKKyMgICBNQUlOXywgX19tYWluIChTdW5PUykKKyMgICBNQUlOIF9NQUlOIF9fTUFJTiBtYWluXyBtYWluX18gX21haW4gKHdlIGZvbGxvdyBEREQgYW5kIHRyeSB0aGVzZSB0b28pCitBQ19ERUZVTihbX0FDX0ZDX0RVTU1ZX01BSU5dLAorW19BQ19GT1JUUkFOX0FTU0VSVCgpZG5sCittNF9kZWZpbmUoX0FDX0xBTkdfUFJPR1JBTV9DX1tdX0FDX0ZDW11fSE9PS1MsCitbI2lmZGVmIF1fQUNfRkNbX0RVTU1ZX01BSU4KK11BQ19MQU5HX0NBU0UoW0ZvcnRyYW5dLCBbI2lmbmRlZiBGQ19EVU1NWV9NQUlOX0VRX0Y3N10pCitbIyAgaWZkZWYgX19jcGx1c3BsdXMKKyAgICAgZXh0ZXJuICJDIgorIyAgZW5kaWYKKyAgIGludCBdX0FDX0ZDW19EVU1NWV9NQUlOKCkgeyByZXR1cm4gMTsgfQorXUFDX0xBTkdfQ0FTRShbRm9ydHJhbl0sIFsjZW5kaWZdKQorWyNlbmRpZgorXSkKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgZHVtbXkgbWFpbiB0byBsaW5rIHdpdGggX0FDX0xBTkcgbGlicmFyaWVzXSwKKwkgICAgICAgYWNfY3ZfW11fQUNfTEFOR19BQkJSRVZbXV9kdW1teV9tYWluLAorW2FjX1tdX0FDX0xBTkdfQUJCUkVWW11fZG1fc2F2ZV9MSUJTPSRMSUJTCisgTElCUz0iJExJQlMgJFtdX0FDX0xBTkdfUFJFRklYW11MSUJTIgorIGFjX2ZvcnRyYW5fZG1fdmFyPVtdX0FDX0ZDW11fRFVNTVlfTUFJTgorIEFDX0xBTkdfUFVTSChDKWRubAorCisgIyBGaXJzdCwgdHJ5IGxpbmtpbmcgd2l0aG91dCBhIGR1bW15IG1haW46CisgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSwgW10pXSwKKwkJW2FjX2N2X2ZvcnRyYW5fZHVtbXlfbWFpbj1ub25lXSwKKwkJW2FjX2N2X2ZvcnRyYW5fZHVtbXlfbWFpbj11bmtub3duXSkKKworIGlmIHRlc3QgJGFjX2N2X2ZvcnRyYW5fZHVtbXlfbWFpbiA9IHVua25vd247IHRoZW4KKyAgIGZvciBhY19mdW5jIGluIE1BSU5fXyBNQUlOXyBfX21haW4gTUFJTiBfTUFJTiBfX01BSU4gbWFpbl8gbWFpbl9fIF9tYWluOyBkbworICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbQCU6QGRlZmluZSAkYWNfZm9ydHJhbl9kbV92YXIgJGFjX2Z1bmNdXSldLAorCQkgICAgW2FjX2N2X2ZvcnRyYW5fZHVtbXlfbWFpbj0kYWNfZnVuYzsgYnJlYWtdKQorICAgZG9uZQorIGZpCisgQUNfTEFOR19QT1AoQylkbmwKKyBhY19jdl9bXV9BQ19MQU5HX0FCQlJFVltdX2R1bW15X21haW49JGFjX2N2X2ZvcnRyYW5fZHVtbXlfbWFpbgorIHJtIC1yZiBjb25mdGVzdCoKKyBMSUJTPSRhY19bXV9BQ19MQU5HX0FCQlJFVltdX2RtX3NhdmVfTElCUworXSkKK1tdX0FDX0ZDW11fRFVNTVlfTUFJTj0kYWNfY3ZfW11fQUNfTEFOR19BQkJSRVZbXV9kdW1teV9tYWluCitBU19JRihbdGVzdCAiJFtdX0FDX0ZDW11fRFVNTVlfTUFJTiIgIT0gdW5rbm93bl0sCisgICAgICBbbTRfZGVmYXVsdChbJDFdLAorW2lmIHRlc3QgJFtdX0FDX0ZDW11fRFVNTVlfTUFJTiAhPSBub25lOyB0aGVuCisgIEFDX0RFRklORV9VTlFVT1RFRChbXV9BQ19GQ1tdX0RVTU1ZX01BSU4sICRbXV9BQ19GQ1tdX0RVTU1ZX01BSU4sCisJCSAgICAgW0RlZmluZSB0byBkdW1teSBgbWFpbicgZnVuY3Rpb24gKGlmIGFueSkgcmVxdWlyZWQgdG8KKwkJICAgICAgbGluayB0byB0aGUgRm9ydHJhbiBsaWJyYXJpZXMuXSkKKyAgaWYgdGVzdCAieCRhY19jdl9mY19kdW1teV9tYWluIiA9ICJ4JGFjX2N2X2Y3N19kdW1teV9tYWluIjsgdGhlbgorCUFDX0RFRklORShbRkNfRFVNTVlfTUFJTl9FUV9GNzddLCAxLAorCQkgIFtEZWZpbmUgaWYgRjc3IGFuZCBGQyBkdW1teSBgbWFpbicgZnVuY3Rpb25zIGFyZSBpZGVudGljYWwuXSkKKyAgZmkKK2ZpXSldLAorICAgICAgW200X2RlZmF1bHQoWyQyXSwKKwkgICAgW0FDX01TR19GQUlMVVJFKFtsaW5raW5nIHRvIEZvcnRyYW4gbGlicmFyaWVzIGZyb20gQyBmYWlsc10pXSldKQorXSkjIF9BQ19GQ19EVU1NWV9NQUlOCisKKworIyBBQ19GNzdfRFVNTVlfTUFJTgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfRjc3X0RVTU1ZX01BSU5dLAorW0FDX1JFUVVJUkUoW0FDX0Y3N19MSUJSQVJZX0xERkxBR1NdKWRubAorQUNfTEFOR19QVVNIKEZvcnRyYW4gNzcpZG5sCitfQUNfRkNfRFVNTVlfTUFJTigkQCkKK0FDX0xBTkdfUE9QKEZvcnRyYW4gNzcpZG5sCitdKSMgQUNfRjc3X0RVTU1ZX01BSU4KKworCisjIEFDX0ZDX0RVTU1ZX01BSU4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX0ZDX0RVTU1ZX01BSU5dLAorW0FDX1JFUVVJUkUoW0FDX0ZDX0xJQlJBUllfTERGTEFHU10pZG5sCitBQ19MQU5HX1BVU0goRm9ydHJhbilkbmwKK19BQ19GQ19EVU1NWV9NQUlOKCRAKQorQUNfTEFOR19QT1AoRm9ydHJhbilkbmwKK10pIyBBQ19GQ19EVU1NWV9NQUlOCisKKworIyBfQUNfRkNfTUFJTgorIyAtLS0tLS0tLS0tLQorIyBEZWZpbmUge0Y3NyxGQ31fTUFJTiB0byBuYW1lIG9mIGFsdGVybmF0ZSBtYWluKCkgZnVuY3Rpb24gZm9yIHVzZSB3aXRoCisjIHRoZSBGb3J0cmFuIGxpYnJhcmllcy4gIChUeXBpY2FsbHksIHRoZSBsaWJyYXJpZXMgbWF5IGRlZmluZSB0aGVpcgorIyBvd24gbWFpbigpIHRvIGluaXRpYWxpemUgSS9PLCBldGNldGVyYSwgdGhhdCB0aGVuIGNhbGwgeW91ciBvd24KKyMgcm91dGluZSBjYWxsZWQgTUFJTl9fIG9yIHdoYXRldmVyLikgIFNlZSBfQUNfRkNfRFVNTVlfTUFJTiwgYWJvdmUuCisjIElmIG5vIHN1Y2ggYWx0ZXJuYXRlIG5hbWUgaXMgZm91bmQsIGp1c3QgZGVmaW5lIHtGNzcsRkN9X01BSU4gdG8gbWFpbi4KKyMKK0FDX0RFRlVOKFtfQUNfRkNfTUFJTl0sCitbX0FDX0ZPUlRSQU5fQVNTRVJUKClkbmwKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgYWx0ZXJuYXRlIG1haW4gdG8gbGluayB3aXRoIF9BQ19MQU5HIGxpYnJhcmllc10sCisJICAgICAgIGFjX2N2X1tdX0FDX0xBTkdfQUJCUkVWW11fbWFpbiwKK1thY19bXV9BQ19MQU5HX0FCQlJFVltdX21fc2F2ZV9MSUJTPSRMSUJTCisgTElCUz0iJExJQlMgJFtdX0FDX0xBTkdfUFJFRklYW11MSUJTIgorIGFjX2ZvcnRyYW5fZG1fdmFyPVtdX0FDX0ZDW11fRFVNTVlfTUFJTgorIEFDX0xBTkdfUFVTSChDKWRubAorIGFjX2N2X2ZvcnRyYW5fbWFpbj0ibWFpbiIgIyBkZWZhdWx0IGVudHJ5IHBvaW50IG5hbWUKKyBmb3IgYWNfZnVuYyBpbiBNQUlOX18gTUFJTl8gX19tYWluIE1BSU4gX01BSU4gX19NQUlOIG1haW5fIG1haW5fXyBfbWFpbjsgZG8KKyAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW0AlOkBpZmRlZiBGQ19EVU1NWV9NQUlOX0VRX0Y3NworQCU6QCAgdW5kZWYgRjc3X0RVTU1ZX01BSU4KK0AlOkAgIHVuZGVmIEZDX0RVTU1ZX01BSU4KK0AlOkBlbHNlCitAJTpAICB1bmRlZiAkYWNfZm9ydHJhbl9kbV92YXIKK0AlOkBlbmRpZgorQCU6QGRlZmluZSBtYWluICRhY19mdW5jXSldLAorCQkgIFthY19jdl9mb3J0cmFuX21haW49JGFjX2Z1bmM7IGJyZWFrXSkKKyBkb25lCisgQUNfTEFOR19QT1AoQylkbmwKKyBhY19jdl9bXV9BQ19MQU5HX0FCQlJFVltdX21haW49JGFjX2N2X2ZvcnRyYW5fbWFpbgorIHJtIC1yZiBjb25mdGVzdCoKKyBMSUJTPSRhY19bXV9BQ19MQU5HX0FCQlJFVltdX21fc2F2ZV9MSUJTCitdKQorQUNfREVGSU5FX1VOUVVPVEVEKFtdX0FDX0ZDW11fTUFJTiwgJGFjX2N2X1tdX0FDX0xBTkdfQUJCUkVWW11fbWFpbiwKKwkJICAgW0RlZmluZSB0byBhbHRlcm5hdGUgbmFtZSBmb3IgYG1haW4nIHJvdXRpbmUgdGhhdCBpcworCQkgICAgY2FsbGVkIGZyb20gYSBgbWFpbicgaW4gdGhlIEZvcnRyYW4gbGlicmFyaWVzLl0pCitdKSMgX0FDX0ZDX01BSU4KKworCisjIEFDX0Y3N19NQUlOCisjIC0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfRjc3X01BSU5dLAorW0FDX1JFUVVJUkUoW0FDX0Y3N19MSUJSQVJZX0xERkxBR1NdKWRubAorQUNfTEFOR19QVVNIKEZvcnRyYW4gNzcpZG5sCitfQUNfRkNfTUFJTgorQUNfTEFOR19QT1AoRm9ydHJhbiA3NylkbmwKK10pIyBBQ19GNzdfTUFJTgorCisKKyMgQUNfRkNfTUFJTgorIyAtLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfRkNfTUFJTl0sCitbQUNfUkVRVUlSRShbQUNfRkNfTElCUkFSWV9MREZMQUdTXSlkbmwKK0FDX0xBTkdfUFVTSChGb3J0cmFuKWRubAorX0FDX0ZDX01BSU4KK0FDX0xBTkdfUE9QKEZvcnRyYW4pZG5sCitdKSMgQUNfRkNfTUFJTgorCisKKyMgX19BQ19GQ19OQU1FX01BTkdMSU5HCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0IGZvciB0aGUgbmFtZSBtYW5nbGluZyBzY2hlbWUgdXNlZCBieSB0aGUgRm9ydHJhbiBjb21waWxlci4KKyMKKyMgU2V0cyBhY19jdl97Zjc3LGZjfV9tYW5nbGluZy4gVGhlIHZhbHVlIGNvbnRhaW5zIHRocmVlIGZpZWxkcywgc2VwYXJhdGVkCisjIGJ5IGNvbW1hczoKKyMKKyMgbG93ZXIgY2FzZSAvIHVwcGVyIGNhc2U6CisjICAgIGNhc2UgdHJhbnNsYXRpb24gb2YgdGhlIEZvcnRyYW4gc3ltYm9scworIyB1bmRlcnNjb3JlIC8gbm8gdW5kZXJzY29yZToKKyMgICAgd2hldGhlciB0aGUgY29tcGlsZXIgYXBwZW5kcyAiXyIgdG8gc3ltYm9sIG5hbWVzCisjIGV4dHJhIHVuZGVyc2NvcmUgLyBubyBleHRyYSB1bmRlcnNjb3JlOgorIyAgICB3aGV0aGVyIHRoZSBjb21waWxlciBhcHBlbmRzIGFuIGV4dHJhICJfIiB0byBzeW1ib2wgbmFtZXMgYWxyZWFkeQorIyAgICBjb250YWluaW5nIGF0IGxlYXN0IG9uZSB1bmRlcnNjb3JlCisjCitBQ19ERUZVTihbX19BQ19GQ19OQU1FX01BTkdMSU5HXSwKK1tfQUNfRk9SVFJBTl9BU1NFUlQoKWRubAorQUNfQ0FDSEVfQ0hFQ0soW2ZvciBfQUNfTEFORyBuYW1lLW1hbmdsaW5nIHNjaGVtZV0sCisJICAgICAgIGFjX2N2X1tdX0FDX0xBTkdfQUJCUkVWW11fbWFuZ2xpbmcsCitbQUNfQ09NUElMRV9JRkVMU0UoCitbICAgICAgc3Vicm91dGluZSBmb29iYXIoKQorICAgICAgcmV0dXJuCisgICAgICBlbmQKKyAgICAgIHN1YnJvdXRpbmUgZm9vX2JhcigpCisgICAgICByZXR1cm4KKyAgICAgIGVuZF0sCitbbXYgY29uZnRlc3QuJGFjX29iamV4dCBjZm9ydHJhbl90ZXN0LiRhY19vYmpleHQKKworICBhY19zYXZlX0xJQlM9JExJQlMKKyAgTElCUz0iY2ZvcnRyYW5fdGVzdC4kYWNfb2JqZXh0ICRMSUJTICRbXV9BQ19MQU5HX1BSRUZJWFtdTElCUyIKKworICBBQ19MQU5HX1BVU0goQylkbmwKKyAgYWNfc3VjY2Vzcz1ubworICBmb3IgYWNfZm9vYmFyIGluIGZvb2JhciBGT09CQVI7IGRvCisgICAgZm9yIGFjX3VuZGVyc2NvcmUgaW4gIiIgIl8iOyBkbworICAgICAgYWNfZnVuYz0iJGFjX2Zvb2JhciRhY191bmRlcnNjb3JlIgorICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfQ0FMTChbXSwgWyRhY19mdW5jXSldLAorCQkgICAgIFthY19zdWNjZXNzPXllczsgYnJlYWsgMl0pCisgICAgZG9uZQorICBkb25lCisgIEFDX0xBTkdfUE9QKEMpZG5sCisKKyAgaWYgdGVzdCAiJGFjX3N1Y2Nlc3MiID0gInllcyI7IHRoZW4KKyAgICAgY2FzZSAkYWNfZm9vYmFyIGluCisJZm9vYmFyKQorCSAgIGFjX2Nhc2U9bG93ZXIKKwkgICBhY19mb29fYmFyPWZvb19iYXIKKwkgICA7OworCUZPT0JBUikKKwkgICBhY19jYXNlPXVwcGVyCisJICAgYWNfZm9vX2Jhcj1GT09fQkFSCisJICAgOzsKKyAgICAgZXNhYworCisgICAgIEFDX0xBTkdfUFVTSChDKWRubAorICAgICBhY19zdWNjZXNzX2V4dHJhPW5vCisgICAgIGZvciBhY19leHRyYSBpbiAiIiAiXyI7IGRvCisJYWNfZnVuYz0iJGFjX2Zvb19iYXIkYWNfdW5kZXJzY29yZSRhY19leHRyYSIKKwlBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19DQUxMKFtdLCBbJGFjX2Z1bmNdKV0sCisJCSAgICAgICBbYWNfc3VjY2Vzc19leHRyYT15ZXM7IGJyZWFrXSkKKyAgICAgZG9uZQorICAgICBBQ19MQU5HX1BPUChDKWRubAorCisgICAgIGlmIHRlc3QgIiRhY19zdWNjZXNzX2V4dHJhIiA9ICJ5ZXMiOyB0aGVuCisJYWNfY3ZfW11fQUNfTEFOR19BQkJSRVZbXV9tYW5nbGluZz0iJGFjX2Nhc2UgY2FzZSIKKwlpZiB0ZXN0IC16ICIkYWNfdW5kZXJzY29yZSI7IHRoZW4KKwkgICBhY19jdl9bXV9BQ19MQU5HX0FCQlJFVltdX21hbmdsaW5nPSIkYWNfY3ZfW11fQUNfTEFOR19BQkJSRVZbXV9tYW5nbGluZywgbm8gdW5kZXJzY29yZSIKKwllbHNlCisJICAgYWNfY3ZfW11fQUNfTEFOR19BQkJSRVZbXV9tYW5nbGluZz0iJGFjX2N2X1tdX0FDX0xBTkdfQUJCUkVWW11fbWFuZ2xpbmcsIHVuZGVyc2NvcmUiCisJZmkKKwlpZiB0ZXN0IC16ICIkYWNfZXh0cmEiOyB0aGVuCisJICAgYWNfY3ZfW11fQUNfTEFOR19BQkJSRVZbXV9tYW5nbGluZz0iJGFjX2N2X1tdX0FDX0xBTkdfQUJCUkVWW11fbWFuZ2xpbmcsIG5vIGV4dHJhIHVuZGVyc2NvcmUiCisJZWxzZQorCSAgIGFjX2N2X1tdX0FDX0xBTkdfQUJCUkVWW11fbWFuZ2xpbmc9IiRhY19jdl9bXV9BQ19MQU5HX0FCQlJFVltdX21hbmdsaW5nLCBleHRyYSB1bmRlcnNjb3JlIgorCWZpCisgICAgICBlbHNlCisJYWNfY3ZfW11fQUNfTEFOR19BQkJSRVZbXV9tYW5nbGluZz0idW5rbm93biIKKyAgICAgIGZpCisgIGVsc2UKKyAgICAgYWNfY3ZfW11fQUNfTEFOR19BQkJSRVZbXV9tYW5nbGluZz0idW5rbm93biIKKyAgZmkKKworICBMSUJTPSRhY19zYXZlX0xJQlMKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBybSAtZiBjZm9ydHJhbl90ZXN0Kl0sCisgIFtBQ19NU0dfRkFJTFVSRShbY2Fubm90IGNvbXBpbGUgYSBzaW1wbGUgRm9ydHJhbiBwcm9ncmFtXSldKQorXSkKK10pIyBfX0FDX0ZDX05BTUVfTUFOR0xJTkcKKworIyBUaGUgcmVwbGFjZW1lbnQgaXMgZW1wdHkuCitBVV9ERUZVTihbQUNfRjc3X05BTUVfTUFOR0xJTkddLCBbXSkKKworCisjIF9BQ19GNzdfTkFNRV9NQU5HTElORworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0FDX0Y3N19OQU1FX01BTkdMSU5HXSwKK1tBQ19SRVFVSVJFKFtBQ19GNzdfTElCUkFSWV9MREZMQUdTXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0Y3N19EVU1NWV9NQUlOXSlkbmwKK0FDX0xBTkdfUFVTSChGb3J0cmFuIDc3KWRubAorX19BQ19GQ19OQU1FX01BTkdMSU5HCitBQ19MQU5HX1BPUChGb3J0cmFuIDc3KWRubAorXSkjIF9BQ19GNzdfTkFNRV9NQU5HTElORworCisKKyMgX0FDX0ZDX05BTUVfTUFOR0xJTkcKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19BQ19GQ19OQU1FX01BTkdMSU5HXSwKK1tBQ19SRVFVSVJFKFtBQ19GQ19MSUJSQVJZX0xERkxBR1NdKWRubAorQUNfUkVRVUlSRShbQUNfRkNfRFVNTVlfTUFJTl0pZG5sCitBQ19MQU5HX1BVU0goRm9ydHJhbilkbmwKK19fQUNfRkNfTkFNRV9NQU5HTElORworQUNfTEFOR19QT1AoRm9ydHJhbilkbmwKK10pIyBfQUNfRkNfTkFNRV9NQU5HTElORworCisKKyMgX0FDX0ZDX1dSQVBQRVJTCisjIC0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmVzIEMgbWFjcm9zIHtGNzcsRkN9X0ZVTkMobmFtZSxOQU1FKSBhbmQge0Y3NyxGQ31fRlVOQ18obmFtZSxOQU1FKSB0bworIyBwcm9wZXJseSBtYW5nbGUgdGhlIG5hbWVzIG9mIEMgaWRlbnRpZmllcnMsIGFuZCBDIGlkZW50aWZpZXJzIHdpdGgKKyMgdW5kZXJzY29yZXMsIHJlc3BlY3RpdmVseSwgc28gdGhhdCB0aGV5IG1hdGNoIHRoZSBuYW1lIG1hbmdsaW5nCisjIHNjaGVtZSB1c2VkIGJ5IHRoZSBGb3J0cmFuIGNvbXBpbGVyLgorQUNfREVGVU4oW19BQ19GQ19XUkFQUEVSU10sCitbX0FDX0ZPUlRSQU5fQVNTRVJUKClkbmwKK0FIX1RFTVBMQVRFKF9BQ19GQ1tfRlVOQ10sCisgICAgW0RlZmluZSB0byBhIG1hY3JvIG1hbmdsaW5nIHRoZSBnaXZlbiBDIGlkZW50aWZpZXIgKGluIGxvd2VyIGFuZCB1cHBlcgorICAgICBjYXNlKSwgd2hpY2ggbXVzdCBub3QgY29udGFpbiB1bmRlcnNjb3JlcywgZm9yIGxpbmtpbmcgd2l0aCBGb3J0cmFuLl0pZG5sCitBSF9URU1QTEFURShfQUNfRkNbX0ZVTkNfXSwKKyAgICBbQXMgXV9BQ19GQ1tfRlVOQywgYnV0IGZvciBDIGlkZW50aWZpZXJzIGNvbnRhaW5pbmcgdW5kZXJzY29yZXMuXSlkbmwKK2Nhc2UgJGFjX2N2X1tdX0FDX0xBTkdfQUJCUkVWW11fbWFuZ2xpbmcgaW4KKyAgImxvd2VyIGNhc2UsIG5vIHVuZGVyc2NvcmUsIG5vIGV4dHJhIHVuZGVyc2NvcmUiKQorCSAgQUNfREVGSU5FKF9BQ19GQ1tfRlVOQyhuYW1lLE5BTUUpXSwgIFtuYW1lXSkKKwkgIEFDX0RFRklORShfQUNfRkNbX0ZVTkNfKG5hbWUsTkFNRSldLCBbbmFtZV0pIDs7CisgICJsb3dlciBjYXNlLCBubyB1bmRlcnNjb3JlLCBleHRyYSB1bmRlcnNjb3JlIikKKwkgIEFDX0RFRklORShfQUNfRkNbX0ZVTkMobmFtZSxOQU1FKV0sICBbbmFtZV0pCisJICBBQ19ERUZJTkUoX0FDX0ZDW19GVU5DXyhuYW1lLE5BTUUpXSwgW25hbWUgWyMjXSBfXSkgOzsKKyAgImxvd2VyIGNhc2UsIHVuZGVyc2NvcmUsIG5vIGV4dHJhIHVuZGVyc2NvcmUiKQorCSAgQUNfREVGSU5FKF9BQ19GQ1tfRlVOQyhuYW1lLE5BTUUpXSwgIFtuYW1lIFsjI10gX10pCisJICBBQ19ERUZJTkUoX0FDX0ZDW19GVU5DXyhuYW1lLE5BTUUpXSwgW25hbWUgWyMjXSBfXSkgOzsKKyAgImxvd2VyIGNhc2UsIHVuZGVyc2NvcmUsIGV4dHJhIHVuZGVyc2NvcmUiKQorCSAgQUNfREVGSU5FKF9BQ19GQ1tfRlVOQyhuYW1lLE5BTUUpXSwgIFtuYW1lIFsjI10gX10pCisJICBBQ19ERUZJTkUoX0FDX0ZDW19GVU5DXyhuYW1lLE5BTUUpXSwgW25hbWUgWyMjXSBfX10pIDs7CisgICJ1cHBlciBjYXNlLCBubyB1bmRlcnNjb3JlLCBubyBleHRyYSB1bmRlcnNjb3JlIikKKwkgIEFDX0RFRklORShfQUNfRkNbX0ZVTkMobmFtZSxOQU1FKV0sICBbTkFNRV0pCisJICBBQ19ERUZJTkUoX0FDX0ZDW19GVU5DXyhuYW1lLE5BTUUpXSwgW05BTUVdKSA7OworICAidXBwZXIgY2FzZSwgbm8gdW5kZXJzY29yZSwgZXh0cmEgdW5kZXJzY29yZSIpCisJICBBQ19ERUZJTkUoX0FDX0ZDW19GVU5DKG5hbWUsTkFNRSldLCAgW05BTUVdKQorCSAgQUNfREVGSU5FKF9BQ19GQ1tfRlVOQ18obmFtZSxOQU1FKV0sIFtOQU1FIFsjI10gX10pIDs7CisgICJ1cHBlciBjYXNlLCB1bmRlcnNjb3JlLCBubyBleHRyYSB1bmRlcnNjb3JlIikKKwkgIEFDX0RFRklORShfQUNfRkNbX0ZVTkMobmFtZSxOQU1FKV0sICBbTkFNRSBbIyNdIF9dKQorCSAgQUNfREVGSU5FKF9BQ19GQ1tfRlVOQ18obmFtZSxOQU1FKV0sIFtOQU1FIFsjI10gX10pIDs7CisgICJ1cHBlciBjYXNlLCB1bmRlcnNjb3JlLCBleHRyYSB1bmRlcnNjb3JlIikKKwkgIEFDX0RFRklORShfQUNfRkNbX0ZVTkMobmFtZSxOQU1FKV0sICBbTkFNRSBbIyNdIF9dKQorCSAgQUNfREVGSU5FKF9BQ19GQ1tfRlVOQ18obmFtZSxOQU1FKV0sIFtOQU1FIFsjI10gX19dKSA7OworICAqKQorCSAgQUNfTVNHX1dBUk4oW3Vua25vd24gRm9ydHJhbiBuYW1lLW1hbmdsaW5nIHNjaGVtZV0pCisJICA7OworZXNhYworXSkjIF9BQ19GQ19XUkFQUEVSUworCisKKyMgQUNfRjc3X1dSQVBQRVJTCisjIC0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX0Y3N19XUkFQUEVSU10sCitbQUNfUkVRVUlSRShbX0FDX0Y3N19OQU1FX01BTkdMSU5HXSlkbmwKK0FDX0xBTkdfUFVTSChGb3J0cmFuIDc3KWRubAorX0FDX0ZDX1dSQVBQRVJTCitBQ19MQU5HX1BPUChGb3J0cmFuIDc3KWRubAorXSkjIEFDX0Y3N19XUkFQUEVSUworCisKKyMgQUNfRkNfV1JBUFBFUlMKKyMgLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19GQ19XUkFQUEVSU10sCitbQUNfUkVRVUlSRShbX0FDX0ZDX05BTUVfTUFOR0xJTkddKWRubAorQUNfTEFOR19QVVNIKEZvcnRyYW4pZG5sCitfQUNfRkNfV1JBUFBFUlMKK0FDX0xBTkdfUE9QKEZvcnRyYW4pZG5sCitdKSMgQUNfRkNfV1JBUFBFUlMKKworCisjIF9BQ19GQ19GVU5DKE5BTUUsIFtTSEVMTFZBUiA9IE5BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRm9yIGEgRm9ydHJhbiBzdWJyb3V0aW5lIG9mIGdpdmVuIE5BTUUsIGRlZmluZSBhIHNoZWxsIHZhcmlhYmxlCisjICRTSEVMTFZBUiB0byB0aGUgRm9ydHJhbi1tYW5nbGVkIG5hbWUuICBJZiB0aGUgU0hFTExWQVIKKyMgYXJndW1lbnQgaXMgbm90IHN1cHBsaWVkLCBpdCBkZWZhdWx0cyB0byBOQU1FLgorQUNfREVGVU4oW19BQ19GQ19GVU5DXSwKK1tfQUNfRk9SVFJBTl9BU1NFUlQoKWRubAorY2FzZSAkYWNfY3ZfW11fQUNfTEFOR19BQkJSRVZbXV9tYW5nbGluZyBpbgorICB1cHBlciopIGFjX3ZhbD0ibTRfdG91cHBlcihbJDFdKSIgOzsKKyAgbG93ZXIqKSBhY192YWw9Im00X3RvbG93ZXIoWyQxXSkiIDs7CisgICopICAgICAgYWNfdmFsPSJ1bmtub3duIiA7OworZXNhYworY2FzZSAkYWNfY3ZfW11fQUNfTEFOR19BQkJSRVZbXV9tYW5nbGluZyBpbiAqLCIgdW5kZXJzY29yZSIqKSBhY192YWw9IiRhY192YWwiXyA7OyBlc2FjCittNF9pZihtNF9pbmRleChbJDFdLFtfXSksLTEsW10sCitbY2FzZSAkYWNfY3ZfW11fQUNfTEFOR19BQkJSRVZbXV9tYW5nbGluZyBpbiAqLCIgZXh0cmEgdW5kZXJzY29yZSIqKSBhY192YWw9IiRhY192YWwiXyA7OyBlc2FjCitdKQorbTRfZGVmYXVsdChbJDJdLFskMV0pPSIkYWNfdmFsIgorXSkjIF9BQ19GQ19GVU5DCisKKworIyBBQ19GNzdfRlVOQyhOQU1FLCBbU0hFTExWQVIgPSBOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfRjc3X0ZVTkNdLAorW0FDX1JFUVVJUkUoW19BQ19GNzdfTkFNRV9NQU5HTElOR10pZG5sCitBQ19MQU5HX1BVU0goRm9ydHJhbiA3NylkbmwKK19BQ19GQ19GVU5DKFskMV0sWyQyXSkKK0FDX0xBTkdfUE9QKEZvcnRyYW4gNzcpZG5sCitdKSMgQUNfRjc3X0ZVTkMKKworCisjIEFDX0ZDX0ZVTkMoTkFNRSwgW1NIRUxMVkFSID0gTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfRkNfRlVOQ10sCitbQUNfUkVRVUlSRShbX0FDX0ZDX05BTUVfTUFOR0xJTkddKWRubAorQUNfTEFOR19QVVNIKEZvcnRyYW4pZG5sCitfQUNfRkNfRlVOQyhbJDFdLFskMl0pCitBQ19MQU5HX1BPUChGb3J0cmFuKWRubAorXSkjIEFDX0ZDX0ZVTkMKKworCisjIEFDX0ZDX1NSQ0VYVChFWFQsIFtBQ1RJT04tSUYtU1VDQ0VTU10sIFtBQ1RJT04tSUYtRkFJTFVSRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCB0aGUgc291cmNlLWNvZGUgZXh0ZW5zaW9uIHVzZWQgaW4gRm9ydHJhbiAoRkMpIHRlc3RzIHRvIEVYVCAod2hpY2gKKyMgZGVmYXVsdHMgdG8gZikuICBBbHNvLCBsb29rIGZvciBhbnkgbmVjZXNzYXJ5IGFkZGl0aW9uYWwgRkNGTEFHUyBuZWVkZWQKKyMgdG8gYWxsb3cgdGhpcyBleHRlbnNpb24sIGFuZCBzdG9yZSB0aGVtIGluIHRoZSBvdXRwdXQgdmFyaWFibGUKKyMgRkNGTEFHU188RVhUPiAoZS5nLiBGQ0ZMQUdTX2Y5MCBmb3IgRVhUPWY5MCkuICBJZiBzdWNjZXNzZnVsLAorIyBjYWxsIEFDVElPTi1JRi1TVUNDRVNTLiAgSWYgdW5hYmxlIHRvIGNvbXBpbGUgc291cmNlIGNvZGUgd2l0aCBFWFQsCisjIGNhbGwgQUNUSU9OLUlGLUZBSUxVUkUsIHdoaWNoIGRlZmF1bHRzIHRvIGZhaWxpbmcgd2l0aCBhbiBlcnJvcgorIyBtZXNzYWdlLgorIworIyAoVGhlIGZsYWdzIGZvciB0aGUgY3VycmVudCBzb3VyY2UtY29kZSBleHRlbnNpb24sIGlmIGFueSwgYXJlIHN0b3JlZCBpbgorIyAkYWNfZmNmbGFnc19zcmNleHQgYW5kIHVzZWQgYXV0b21hdGljYWxseSBpbiBzdWJzZXF1ZW50IGF1dG9jb25mIHRlc3RzLikKKyMKKyMgRm9yIG9yZGluYXJ5IGV4dGVuc2lvbnMgbGlrZSBmOTAsIGV0Y2V0ZXJhLCB0aGUgbW9kaWZpZWQgRkNGTEFHUworIyBhcmUgY3VycmVudGx5IG5lZWRlZCBmb3IgSUJNJ3MgeGxmKiBhbmQgSW50ZWwncyBpZmMgKGdycnIpLiAgVW5mb3J0dW5hdGVseSwKKyMgeGxmKiB3aWxsIG9ubHkgdGFrZSBmbGFncyB0byByZWNvZ25pemUgb25lIGV4dGVuc2lvbiBhdCBhIHRpbWUsIHNvIGlmIHRoZQorIyB1c2VyIHdhbnRzIHRvIGNvbXBpbGUgbXVsdGlwbGUgZXh0ZW5zaW9ucyAoLmY5MCBhbmQgLmY5NSwgc2F5KSwgc2hlCisjIHdpbGwgbmVlZCB0byB1c2UgdGhlIEZDRkxBR1NfRjkwIGFuZCBGQ0ZMQUdTX0Y5NSBpbmRpdmlkdWFsbHkgcmF0aGVyCisjIHRoYW4ganVzdCBhZGRpbmcgdGhlbSBhbGwgdG8gRkNGTEFHUywgZm9yIGV4YW1wbGUuCisjCisjIEFsc28sIGZvciBJbnRlbCdzIGlmYyBjb21waWxlciAod2hpY2ggZG9lcyBub3QgYWNjZXB0IC5mOTUgYnkgZGVmYXVsdCBpbgorIyBzb21lIHZlcnNpb25zKSwgdGhlICRGQ0ZMQUdTXzxFWFQ+IHZhcmlhYmxlICptdXN0KiBnbyBpbW1lZGlhdGVseSBiZWZvcmUKKyMgdGhlIHNvdXJjZSBmaWxlIG9uIHRoZSBjb21tYW5kIGxpbmUsIHVubGlrZSBvdGhlciAkRkNGTEFHUy4gIFVnaC4KK0FDX0RFRlVOKFtBQ19GQ19TUkNFWFRdLAorW0FDX0xBTkdfUFVTSChGb3J0cmFuKWRubAorQUNfQ0FDSEVfQ0hFQ0soW2ZvciBGb3J0cmFuIGZsYWcgdG8gY29tcGlsZSAuJDEgZmlsZXNdLAorCQlhY19jdl9mY19zcmNleHRfJDEsCitbYWNfZXh0PSQxCithY19mY2ZsYWdzX3NyY2V4dF9zYXZlPSRhY19mY2ZsYWdzX3NyY2V4dAorYWNfZmNmbGFnc19zcmNleHQ9CithY19jdl9mY19zcmNleHRfJDE9dW5rbm93bgorZm9yIGFjX2ZsYWcgaW4gbm9uZSAtcXN1ZmZpeD1mPSQxIC1UZjsgZG8KKyAgdGVzdCAieCRhY19mbGFnIiAhPSB4bm9uZSAmJiBhY19mY2ZsYWdzX3NyY2V4dD0iJGFjX2ZsYWciCisgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oKV0sIFthY19jdl9mY19zcmNleHRfJDE9JGFjX2ZsYWc7IGJyZWFrXSkKK2RvbmUKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJDEKK2FjX2ZjZmxhZ3Nfc3JjZXh0PSRhY19mY2ZsYWdzX3NyY2V4dF9zYXZlCitdKQoraWYgdGVzdCAieCRhY19jdl9mY19zcmNleHRfJDEiID0geHVua25vd247IHRoZW4KKyAgbTRfZGVmYXVsdChbJDNdLFtBQ19NU0dfRVJST1IoW0ZvcnRyYW4gY291bGQgbm90IGNvbXBpbGUgLiQxIGZpbGVzXSldKQorZWxzZQorICBhY19mY19zcmNleHQ9JDEKKyAgaWYgdGVzdCAieCRhY19jdl9mY19zcmNleHRfJDEiID0geG5vbmU7IHRoZW4KKyAgICBhY19mY2ZsYWdzX3NyY2V4dD0iIgorICAgIEZDRkxBR1NfW10kMVtdPSIiCisgIGVsc2UKKyAgICBhY19mY2ZsYWdzX3NyY2V4dD0kYWNfY3ZfZmNfc3JjZXh0XyQxCisgICAgRkNGTEFHU19bXSQxW109JGFjX2N2X2ZjX3NyY2V4dF8kMQorICBmaQorICBBQ19TVUJTVChGQ0ZMQUdTX1tdJDEpCisgICQyCitmaQorQUNfTEFOR19QT1AoRm9ydHJhbilkbmwKK10pIyBBQ19GQ19TUkNFWFQKKworCisjIEFDX0ZDX0ZSRUVGT1JNKFtBQ1RJT04tSUYtU1VDQ0VTU10sIFtBQ1RJT04tSUYtRkFJTFVSRSA9IEZBSUxVUkVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTG9vayBmb3IgYSBjb21waWxlciBmbGFnIHRvIG1ha2UgdGhlIEZvcnRyYW4gKEZDKSBjb21waWxlciBhY2NlcHQKKyMgZnJlZS1mb3JtYXQgc291cmNlIGNvZGUsIGFuZCBhZGRzIGl0IHRvIEZDRkxBR1MuICBDYWxsCisjIEFDVElPTi1JRi1TVUNDRVNTIChkZWZhdWx0cyB0byBub3RoaW5nKSBpZiBzdWNjZXNzZnVsIChpLmUuIGNhbgorIyBjb21waWxlIGNvZGUgdXNpbmcgbmV3IGV4dGVuc2lvbikgYW5kIEFDVElPTi1JRi1GQUlMVVJFIChkZWZhdWx0cyB0bworIyBmYWlsaW5nIHdpdGggYW4gZXJyb3IgbWVzc2FnZSkgaWYgbm90LiAgKERlZmluZWQgdmlhIERFRlVOX09OQ0UgdG8KKyMgcHJldmVudCBmbGFnIGZyb20gYmVpbmcgYWRkZWQgdG8gRkNGTEFHUyBtdWx0aXBsZSB0aW1lcy4pCisjCisjIFRoZSBrbm93biBmbGFncyBhcmU6CisjICAgICAgICAtZmZyZWUtZm9ybTogR05VIGc3NworIyAgICAgICAgICAgICAgICAtRlI6IEludGVsIGNvbXBpbGVyIChpY2MsIGVjYykKKyMgICAgICAgICAgICAgIC1mcmVlOiBDb21wYXEgY29tcGlsZXIgKGZvcnQpCisjICAgICAgICAgICAgIC1xZnJlZTogSUJNIGNvbXBpbGVyICh4bGYpCisjIC1NZnJlZSwgLU1mcmVlZm9ybTogUG9ydGxhbmQgR3JvdXAgY29tcGlsZXIKKyMgICAgICAgICAgLWZyZWVmb3JtOiBTR0kgY29tcGlsZXIKKyMgICAgICAgICAgICAtZiBmcmVlOiBBYnNvZnQgRm9ydHJhbgorIyBXZSB0cnkgdG8gdGVzdCB0aGUgIm1vcmUgcG9wdWxhciIgZmxhZ3MgZmlyc3QsIGJ5IHNvbWUgcHJlanVkaWNlZAorIyBub3Rpb24gb2YgcG9wdWxhcml0eS4KK0FDX0RFRlVOX09OQ0UoW0FDX0ZDX0ZSRUVGT1JNXSwKK1tBQ19MQU5HX1BVU0goRm9ydHJhbilkbmwKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgRm9ydHJhbiBmbGFnIG5lZWRlZCB0byBhbGxvdyBmcmVlLWZvcm0gc291cmNlXSwKKwkJYWNfY3ZfZmNfZnJlZWZvcm0sCitbYWNfY3ZfZmNfZnJlZWZvcm09dW5rbm93bgorYWNfZmNfZnJlZWZvcm1fRkNGTEFHU19zYXZlPSRGQ0ZMQUdTCitmb3IgYWNfZmxhZyBpbiBub25lIC1mZnJlZS1mb3JtIC1GUiAtZnJlZSAtcWZyZWUgLU1mcmVlIC1NZnJlZWZvcm0gXAorCSAgICAgICAtZnJlZWZvcm0gIi1mIGZyZWUiCitkbworICB0ZXN0ICJ4JGFjX2ZsYWciICE9IHhub25lICYmIEZDRkxBR1M9IiRhY19mY19mcmVlZm9ybV9GQ0ZMQUdTX3NhdmUgJGFjX2ZsYWciCitkbmwgVXNlIEAmdEAgYmVsb3cgdG8gZW5zdXJlIHRoYXQgZWRpdG9ycyBkb24ndCB0dXJuIDgrIHNwYWNlcyBpbnRvIHRhYi4KKyAgQUNfQ09NUElMRV9JRkVMU0UoWworICBwcm9ncmFtIGZyZWVmb3JtCisgICAgICAgISBGSVhNRTogaG93IHRvIGJlc3QgY29uZnVzZSBub24tZnJlZWZvcm0gY29tcGlsZXJzPworICAgICAgIHByaW50ICosICdIZWxsbyAnLCAmCisgICAgIEAmdEAgICAgICd3b3JsZC4nCisgICAgICAgZW5kXSwKKwkJICAgIFthY19jdl9mY19mcmVlZm9ybT0kYWNfZmxhZzsgYnJlYWtdKQorZG9uZQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorRkNGTEFHUz0kYWNfZmNfZnJlZWZvcm1fRkNGTEFHU19zYXZlCitdKQoraWYgdGVzdCAieCRhY19jdl9mY19mcmVlZm9ybSIgPSB4dW5rbm93bjsgdGhlbgorICBtNF9kZWZhdWx0KFskMl0sCisJICAgICBbQUNfTVNHX0VSUk9SKFtGb3J0cmFuIGRvZXMgbm90IGFjY2VwdCBmcmVlLWZvcm0gc291cmNlXSwgNzcpXSkKK2Vsc2UKKyAgaWYgdGVzdCAieCRhY19jdl9mY19mcmVlZm9ybSIgIT0geG5vbmU7IHRoZW4KKyAgICBGQ0ZMQUdTPSIkRkNGTEFHUyAkYWNfY3ZfZmNfZnJlZWZvcm0iCisgIGZpCisgICQxCitmaQorQUNfTEFOR19QT1AoRm9ydHJhbilkbmwKK10pIyBBQ19GQ19GUkVFRk9STQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b2NvbmYvYXV0b2NvbmYvZnVuY3Rpb25zLm00IGIvc2hhcmUvYXV0b2NvbmYvYXV0b2NvbmYvZnVuY3Rpb25zLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNmU3ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvY29uZi9hdXRvY29uZi9mdW5jdGlvbnMubTQKQEAgLTAsMCArMSwyMDExIEBACisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEF1dG9jb25mLgkJCS0qLSBBdXRvY29uZiAtKi0KKyMgQ2hlY2tpbmcgZm9yIGZ1bmN0aW9ucy4KKyMgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LAorIyAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEF1dG9jb25mLiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUKKyMgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisjIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisjIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgQXV0b2NvbmYgQ29uZmlndXJlIFNjcmlwdCBFeGNlcHRpb24sCisjIHZlcnNpb24gMy4wLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYW5kIGEgY29weSBvZiB0aGUgQXV0b2NvbmYgQ29uZmlndXJlIFNjcmlwdCBFeGNlcHRpb24gYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZXMgQ09QWUlOR3YzIGFuZCBDT1BZSU5HLkVYQ0VQVElPTgorIyByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgV3JpdHRlbiBieSBEYXZpZCBNYWNLZW56aWUsIHdpdGggaGVscCBmcm9tCisjIEZyYW5jLG9pcyBQaW5hcmQsIEthcmwgQmVycnksIFJpY2hhcmQgUGl4bGV5LCBJYW4gTGFuY2UgVGF5bG9yLAorIyBSb2xhbmQgTWNHcmF0aCwgTm9haCBGcmllZG1hbiwgZGF2aWQgZCB6dWhuLCBhbmQgbWFueSBvdGhlcnMuCisKKworIyBUYWJsZSBvZiBjb250ZW50cworIworIyAxLiBHZW5lcmljIHRlc3RzIGZvciBmdW5jdGlvbnMuCisjIDIuIEZ1bmN0aW9ucyB0byBjaGVjayB3aXRoIEFDX0NIRUNLX0ZVTkNTCisjIDMuIFRlc3RzIGZvciBzcGVjaWZpYyBmdW5jdGlvbnMuCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIDEuIEdlbmVyaWMgdGVzdHMgZm9yIGZ1bmN0aW9ucy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIF9BQ19DSEVDS19GVU5DX0JPRFkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTaGVsbCBmdW5jdGlvbiBib2R5IGZvciBBQ19DSEVDS19GVU5DLgorbTRfZGVmaW5lKFtfQUNfQ0hFQ0tfRlVOQ19CT0RZXSwKK1sgIEFTX0xJTkVOT19QVVNIKFskW10xXSkKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkW10yXSwgWyRbXTNdLAorICBbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfRlVOQ19MSU5LX1RSWSgkW10yKV0sCisJCSAgW0FTX1ZBUl9TRVQoWyRbXTNdLCBbeWVzXSldLAorCQkgIFtBU19WQVJfU0VUKFskW10zXSwgW25vXSldKV0pCisgIEFTX0xJTkVOT19QT1AKK10pIyBfQUNfQ0hFQ0tfRlVOQ19CT0RZCisKKworIyBBQ19DSEVDS19GVU5DKEZVTkNUSU9OLCBbQUNUSU9OLUlGLUZPVU5EXSwgW0FDVElPTi1JRi1OT1QtRk9VTkRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIEZVTkNUSU9OIGxpbmtzIGluIHRoZSBjdXJyZW50IGxhbmd1YWdlLiAgU2V0IHRoZSBjYWNoZQorIyB2YXJpYWJsZSBhY19jdl9mdW5jX0ZVTkNUSU9OIGFjY29yZGluZ2x5LCB0aGVuIGV4ZWN1dGUKKyMgQUNUSU9OLUlGLUZPVU5EIG9yIEFDVElPTi1JRi1OT1QtRk9VTkQuCitBQ19ERUZVTihbQUNfQ0hFQ0tfRlVOQ10sCitbQUNfUkVRVUlSRV9TSEVMTF9GTihbYWNfZm5fXV9BQ19MQU5HX0FCQlJFVltfY2hlY2tfZnVuY10sCisgIFtBU19GVU5DVElPTl9ERVNDUklCRShbYWNfZm5fXV9BQ19MQU5HX0FCQlJFVltfY2hlY2tfZnVuY10sCisgICAgW0xJTkVOTyBGVU5DIFZBUl0sCisgICAgW1Rlc3RzIHdoZXRoZXIgRlVOQyBleGlzdHMsIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseV0pXSwKKyAgW18kMF9CT0RZXSldZG5sCitbQVNfVkFSX1BVU0hERUYoW2FjX3Zhcl0sIFthY19jdl9mdW5jXyQxXSldZG5sCitbYWNfZm5fW11fQUNfTEFOR19BQkJSRVZbXV9jaGVja19mdW5jICIkTElORU5PIiAiJDEiICJhY192YXIiCitBU19WQVJfSUYoW2FjX3Zhcl0sIFt5ZXNdLCBbJDJdLCBbJDNdKQorQVNfVkFSX1BPUERFRihbYWNfdmFyXSldKSMgQUNfQ0hFQ0tfRlVOQworCisKKyMgX0FIX0NIRUNLX0ZVTkMoRlVOQ1RJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcmVwYXJlIHRoZSBhdXRvaGVhZGVyIHNuaXBwZXQgZm9yIEZVTkNUSU9OLgorbTRfZGVmaW5lKFtfQUhfQ0hFQ0tfRlVOQ10sCitbQUhfVEVNUExBVEUoQVNfVFJfQ1BQKFtIQVZFXyQxXSksCisgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYCQxJyBmdW5jdGlvbi5dKV0pCisKKworIyBBQ19DSEVDS19GVU5DUyhGVU5DVElPTi4uLiwgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBlYWNoIHdoaXRlc3BhY2Utc2VwYXJhdGVkIEZVTkNUSU9OLCBhbmQgcGVyZm9ybQorIyBBQ1RJT04tSUYtRk9VTkQgb3IgQUNUSU9OLUlGLU5PVC1GT1VORCBmb3IgZWFjaCBmdW5jdGlvbi4KKyMgQWRkaXRpb25hbGx5LCBtYWtlIHRoZSBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbiBIQVZFX0ZVTkNUSU9OCisjIGF2YWlsYWJsZSBmb3IgZWFjaCBmb3VuZCBmdW5jdGlvbi4gIEVpdGhlciBBQ1RJT04gbWF5IGluY2x1ZGUKKyMgYGJyZWFrJyB0byBzdG9wIHRoZSBzZWFyY2guCitBQ19ERUZVTihbQUNfQ0hFQ0tfRlVOQ1NdLAorW200X21hcF9hcmdzX3coWyQxXSwgW19BSF9DSEVDS19GVU5DKF0sIFspXSldZG5sCitbQVNfRk9SKFtBQ19mdW5jXSwgW2FjX2Z1bmNdLCBbJDFdLAorW0FDX0NIRUNLX0ZVTkMoQUNfZnVuYywKKwkgICAgICAgW0FDX0RFRklORV9VTlFVT1RFRChBU19UUl9DUFAoW0hBVkVfXUFDX2Z1bmMpKSAkMl0sCisJICAgICAgIFskM10pZG5sXSkKK10pIyBBQ19DSEVDS19GVU5DUworCisKKyMgX0FDX0NIRUNLX0ZVTkNfT05DRShGVU5DVElPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGEgc2luZ2xlIEZVTkNUSU9OIG9uY2UuCittNF9kZWZpbmUoW19BQ19DSEVDS19GVU5DX09OQ0VdLAorW19BSF9DSEVDS19GVU5DKFskMV0pQUNfREVGVU4oW19BQ19GdW5jXyQxXSwKKyAgW200X2RpdmVydF90ZXh0KFtJTklUX1BSRVBBUkVdLCBbQVNfVkFSX0FQUEVORChbYWNfZnVuY19saXN0XSwgWyIgJDEiXSldKQorX0FDX0ZVTkNTX0VYUEFOU0lPTl0pQUNfUkVRVUlSRShbX0FDX0Z1bmNfJDFdKV0pCisKKyMgQUNfQ0hFQ0tfRlVOQ1NfT05DRShGVU5DVElPTi4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWRkIGVhY2ggd2hpdGVzcGFjZS1zZXBhcmF0ZWQgbmFtZSBpbiBGVU5DVElPTiB0byB0aGUgbGlzdCBvZiBmdW5jdGlvbnMKKyMgdG8gY2hlY2sgb25jZS4KK0FDX0RFRlVOKFtBQ19DSEVDS19GVU5DU19PTkNFXSwKK1ttNF9tYXBfYXJnc193KFskMV0sIFtfQUNfQ0hFQ0tfRlVOQ19PTkNFKF0sIFspXSldKQorCittNF9kZWZpbmUoW19BQ19GVU5DU19FWFBBTlNJT05dLAorWworICBtNF9kaXZlcnRfdGV4dChbREVGQVVMVFNdLCBbYWNfZnVuY19saXN0PV0pCisgIEFDX0NIRUNLX0ZVTkNTKFskYWNfZnVuY19saXN0XSkKKyAgbTRfZGVmaW5lKFtfQUNfRlVOQ1NfRVhQQU5TSU9OXSwgW10pCitdKQorCisKKyMgQUNfUkVQTEFDRV9GVU5DUyhGVU5DVElPTi4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19SRVBMQUNFX0ZVTkNTXSwKK1ttNF9tYXBfYXJnc193KFskMV0sIFtBQ19MSUJTT1VSQ0UoXSwgWy5jKV0pXWRubAorW0FDX0NIRUNLX0ZVTkNTKFskMV0sICwgW19BQ19MSUJPQkooJGFjX2Z1bmMpXSkKK10pCisKKworIyBBQ19UUllfTElOS19GVU5DKEZVTkMsIEFDVElPTi1JRi1GT1VORCwgQUNUSU9OLUlGLU5PVC1GT1VORCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBsaW5rIGEgcHJvZ3JhbSB0aGF0IGNhbGxzIEZVTkMsIGhhbmRsaW5nIEdDQyBidWlsdGlucy4gIElmCisjIHRoZSBsaW5rIHN1Y2NlZWRzLCBleGVjdXRlIEFDVElPTi1JRi1GT1VORDsgb3RoZXJ3aXNlLCBleGVjdXRlCisjIEFDVElPTi1JRi1OT1QtRk9VTkQuCitBQ19ERUZVTihbQUNfVFJZX0xJTktfRlVOQ10sCitbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfQ0FMTChbXSwgWyQxXSldLCBbJDJdLCBbJDNdKV0pCisKKworIyBBVTo6QUNfRlVOQ19DSEVDSworIyAtLS0tLS0tLS0tLS0tLS0tLQorQVVfQUxJQVMoW0FDX0ZVTkNfQ0hFQ0tdLCBbQUNfQ0hFQ0tfRlVOQ10pCisKKworIyBBVTo6QUNfSEFWRV9GVU5DUworIyAtLS0tLS0tLS0tLS0tLS0tLQorQVVfQUxJQVMoW0FDX0hBVkVfRlVOQ1NdLCBbQUNfQ0hFQ0tfRlVOQ1NdKQorCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAyLiBGdW5jdGlvbnMgdG8gY2hlY2sgd2l0aCBBQ19DSEVDS19GVU5DUy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FOX0ZVTkNUSU9OKFtfX2FyZ3pfY291bnRdLCAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbX19hcmd6X25leHRdLCAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW19fYXJnel9zdHJpbmdpZnldLCAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtfX2ZwZW5kaW5nXSwgICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbYWNsXSwgICAgICAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW2FsYXJtXSwgICAgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFthdGV4aXRdLCAgICAgICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbYnRvd2NdLCAgICAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW2J6ZXJvXSwgICAgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtjbG9ja19nZXR0aW1lXSwgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbZG9wcm50XSwgICAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW2R1cDJdLCAgICAgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtlbmRncmVudF0sICAgICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbZW5kcHdlbnRdLCAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW2V1aWRhY2Nlc3NdLCAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtmY2hkaXJdLCAgICAgICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbZmRhdGFzeW5jXSwgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW2Zlc2V0cm91bmRdLCAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtmbG9vcl0sICAgICAgICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbZnNfc3RhdF9kZXZdLCAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW2Z0aW1lXSwgICAgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtmdHJ1bmNhdGVdLCAgICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbZ2V0Y3dkXSwgICAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW2dldGRlbGltXSwgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtnZXRob3N0YnlhZGRyXSwgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbZ2V0aG9zdGJ5bmFtZV0sICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW2dldGhvc3RuYW1lXSwgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtnZXRocnRpbWVdLCAgICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbZ2V0bW50ZW50XSwgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW2dldG1udGluZm9dLCAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtnZXRwYWdlc2l6ZV0sICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbZ2V0cGFzc10sICAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW2dldHNwbmFtXSwgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtnZXR0aW1lb2ZkYXldLCAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbZ2V0dXNlcnNoZWxsXSwgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW2hhc21udG9wdF0sICAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtpbmV0X250b2FdLCAgICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbaXNhc2NpaV0sICAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW2lzd3ByaW50XSwgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtsY2hvd25dLCAgICAgICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbbGlzdG1udGVudF0sICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW2xvY2FsZWNvbnZdLCAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtsb2NhbHRpbWVfcl0sICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbbWJsZW5dLCAgICAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW21icmxlbl0sICAgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFttZW1jaHJdLCAgICAgICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbbWVtbW92ZV0sICAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW21lbXBjcHldLCAgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFttZW1zZXRdLCAgICAgICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbbWtkaXJdLCAgICAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW21rZmlmb10sICAgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFttb2RmXSwgICAgICAgICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbbXVubWFwXSwgICAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW25leHRfZGV2XSwgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtubF9sYW5naW5mb10sICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbcGF0aGNvbmZdLCAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW3Bvd10sICAgICAgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtwc3RhdF9nZXRkeW5hbWljXSwgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbcHV0ZW52XSwgICAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW3JlX2NvbXBdLCAgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtyZWFscGF0aF0sICAgICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbcmVnY21wXSwgICAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW3JlZ2NvbXBdLCAgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtyZXNvbHZlcGF0aF0sICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbcmludF0sICAgICAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW3JtZGlyXSwgICAgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtycG1hdGNoXSwgICAgICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbc2VsZWN0XSwgICAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW3NldGVudl0sICAgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtzZXRob3N0bmFtZV0sICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbc2V0bG9jYWxlXSwgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW3NvY2tldF0sICAgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtzcXJ0XSwgICAgICAgICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbc3RpbWVdLCAgICAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW3N0cGNweV0sICAgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtzdHJjYXNlY21wXSwgICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbc3RyY2hyXSwgICAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW3N0cmNzcG5dLCAgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtzdHJkdXBdLCAgICAgICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbc3RyZXJyb3JdLCAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW3N0cm5jYXNlY21wXSwgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtzdHJuZHVwXSwgICAgICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbc3RycGJya10sICAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW3N0cnJjaHJdLCAgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtzdHJzcG5dLCAgICAgICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbc3Ryc3RyXSwgICAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW3N0cnRvbF0sICAgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtzdHJ0b3VsXSwgICAgICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbc3RydG91bGxdLCAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW3N0cnRvdW1heF0sICAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFtzdHJ2ZXJzY21wXSwgICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbc3lzaW5mb10sICAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW3R6c2V0XSwgICAgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFt1bmFtZV0sICAgICAgICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbdXRpbWVdLCAgICAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorQU5fRlVOQ1RJT04oW3V0bXBuYW1lXSwgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0ZVTkNTXSkKK0FOX0ZVTkNUSU9OKFt1dG1weG5hbWVdLCAgICAgICAgICAgICAgIFtBQ19DSEVDS19GVU5DU10pCitBTl9GVU5DVElPTihbd2N3aWR0aF0sICAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfRlVOQ1NdKQorCisKK0FOX0ZVTkNUSU9OKFtkY2dldHRleHRdLCAgICBbQU1fR05VX0dFVFRFWFRdKQorQU5fRlVOQ1RJT04oW2dldHdkXSwgICAgICAgIFt3YXJuOiBnZXR3ZCBpcyBkZXByZWNhdGVkLCB1c2UgZ2V0Y3dkIGluc3RlYWRdKQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgMy4gVGVzdHMgZm9yIHNwZWNpZmljIGZ1bmN0aW9ucy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIFRoZSBtYWNyb3MgYXJlIHNvcnRlZDoKKyMKKyMgMS4gQUNfRlVOQ18qIG1hY3JvcyBhcmUgc29ydGVkIGJ5IGFscGhhYmV0aWNhbCBvcmRlci4KKyMKKyMgMi4gSGVscGluZyBtYWNyb3Mgc3VjaCBhcyBfQUNfTElCT0JKXyogYXJlIGJlZm9yZSB0aGUgbWFjcm8gdGhhdAorIyAgICB1c2VzIGl0LgorIworIyAzLiBPYnNvbGV0ZSBtYWNyb3MgYXJlIHJpZ2h0IGFmdGVyIHRoZSBtb2Rlcm4gbWFjcm8uCisKKworCisjIF9BQ19MSUJPQkpfQUxMT0NBCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCB1cCB0aGUgTElCT0JKIHJlcGxhY2VtZW50IG9mIGBhbGxvY2EnLiAgV2VsbCwgbm90IGV4YWN0bHkKKyMgQUNfTElCT0JKIHNpbmNlIHdlIGFjdHVhbGx5IHNldCB0aGUgb3V0cHV0IHZhcmlhYmxlIGBBTExPQ0EnLgorIyBOZXZlcnRoZWxlc3MsIGZvciBBdXRvbWFrZSwgQUNfTElCU09VUkNFUyBpdC4KK200X2RlZmluZShbX0FDX0xJQk9CSl9BTExPQ0FdLAorWyMgVGhlIFNWUjMgbGliUFcgYW5kIFNWUjQgbGlidWNiIGJvdGggY29udGFpbiBpbmNvbXBhdGlibGUgZnVuY3Rpb25zCisjIHRoYXQgY2F1c2UgdHJvdWJsZS4gIFNvbWUgdmVyc2lvbnMgZG8gbm90IGV2ZW4gY29udGFpbiBhbGxvY2Egb3IKKyMgY29udGFpbiBhIGJ1Z2d5IHZlcnNpb24uICBJZiB5b3Ugc3RpbGwgd2FudCB0byB1c2UgdGhlaXIgYWxsb2NhLAorIyB1c2UgYXIgdG8gZXh0cmFjdCBhbGxvY2EubyBmcm9tIHRoZW0gaW5zdGVhZCBvZiBjb21waWxpbmcgYWxsb2NhLmMuCitBQ19MSUJTT1VSQ0VTKGFsbG9jYS5jKQorQUNfU1VCU1QoW0FMTE9DQV0sIFtcJHtMSUJPQkpESVJ9YWxsb2NhLiRhY19vYmpleHRdKWRubAorQUNfREVGSU5FKENfQUxMT0NBLCAxLCBbRGVmaW5lIHRvIDEgaWYgdXNpbmcgYGFsbG9jYS5jJy5dKQorCitBQ19DQUNIRV9DSEVDSyh3aGV0aGVyIGBhbGxvY2EuYycgbmVlZHMgQ3JheSBob29rcywgYWNfY3Zfb3NfY3JheSwKK1tBQ19FR1JFUF9DUFAod2ViZWNyYXksCitbI2lmIGRlZmluZWQgQ1JBWSAmJiAhIGRlZmluZWQgQ1JBWTIKK3dlYmVjcmF5CisjZWxzZQord2Vub3RiZWNyYXkKKyNlbmRpZgorXSwgYWNfY3Zfb3NfY3JheT15ZXMsIGFjX2N2X29zX2NyYXk9bm8pXSkKK2lmIHRlc3QgJGFjX2N2X29zX2NyYXkgPSB5ZXM7IHRoZW4KKyAgZm9yIGFjX2Z1bmMgaW4gX2dldGI2NyBHRVRCNjcgZ2V0YjY3OyBkbworICAgIEFDX0NIRUNLX0ZVTkMoJGFjX2Z1bmMsCisJCSAgW0FDX0RFRklORV9VTlFVT1RFRChDUkFZX1NUQUNLU0VHX0VORCwgJGFjX2Z1bmMsCisJCQkJICAgICAgW0RlZmluZSB0byBvbmUgb2YgYF9nZXRiNjcnLCBgR0VUQjY3JywKKwkJCQkgICAgICAgYGdldGI2NycgZm9yIENyYXktMiBhbmQgQ3JheS1ZTVAKKwkJCQkgICAgICAgc3lzdGVtcy4gVGhpcyBmdW5jdGlvbiBpcyByZXF1aXJlZCBmb3IKKwkJCQkgICAgICAgYGFsbG9jYS5jJyBzdXBwb3J0IG9uIHRob3NlIHN5c3RlbXMuXSkKKyAgICBicmVha10pCisgIGRvbmUKK2ZpCisKK0FDX0NBQ0hFX0NIRUNLKFtzdGFjayBkaXJlY3Rpb24gZm9yIEMgYWxsb2NhXSwKKwkgICAgICAgW2FjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uXSwKK1tBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRSgKK1tBQ19JTkNMVURFU19ERUZBVUxUCitpbnQKK2ZpbmRfc3RhY2tfZGlyZWN0aW9uICgpCit7CisgIHN0YXRpYyBjaGFyICphZGRyID0gMDsKKyAgYXV0byBjaGFyIGR1bW15OworICBpZiAoYWRkciA9PSAwKQorICAgIHsKKyAgICAgIGFkZHIgPSAmZHVtbXk7CisgICAgICByZXR1cm4gZmluZF9zdGFja19kaXJlY3Rpb24gKCk7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuICgmZHVtbXkgPiBhZGRyKSA/IDEgOiAtMTsKK30KKworaW50CittYWluICgpCit7CisgIHJldHVybiBmaW5kX3N0YWNrX2RpcmVjdGlvbiAoKSA8IDA7Cit9XSldLAorCSAgICAgICBbYWNfY3ZfY19zdGFja19kaXJlY3Rpb249MV0sCisJICAgICAgIFthY19jdl9jX3N0YWNrX2RpcmVjdGlvbj0tMV0sCisJICAgICAgIFthY19jdl9jX3N0YWNrX2RpcmVjdGlvbj0wXSldKQorQUhfVkVSQkFUSU0oW1NUQUNLX0RJUkVDVElPTl0sCitbLyogSWYgdXNpbmcgdGhlIEMgaW1wbGVtZW50YXRpb24gb2YgYWxsb2NhLCBkZWZpbmUgaWYgeW91IGtub3cgdGhlCisgICBkaXJlY3Rpb24gb2Ygc3RhY2sgZ3Jvd3RoIGZvciB5b3VyIHN5c3RlbTsgb3RoZXJ3aXNlIGl0IHdpbGwgYmUKKyAgIGF1dG9tYXRpY2FsbHkgZGVkdWNlZCBhdCBydW50aW1lLgorCVNUQUNLX0RJUkVDVElPTiA+IDAgPT4gZ3Jvd3MgdG93YXJkIGhpZ2hlciBhZGRyZXNzZXMKKwlTVEFDS19ESVJFQ1RJT04gPCAwID0+IGdyb3dzIHRvd2FyZCBsb3dlciBhZGRyZXNzZXMKKwlTVEFDS19ESVJFQ1RJT04gPSAwID0+IGRpcmVjdGlvbiBvZiBncm93dGggdW5rbm93biAqLworQCU6QHVuZGVmIFNUQUNLX0RJUkVDVElPTl0pZG5sCitBQ19ERUZJTkVfVU5RVU9URUQoU1RBQ0tfRElSRUNUSU9OLCAkYWNfY3ZfY19zdGFja19kaXJlY3Rpb24pCitdKSMgX0FDX0xJQk9CSl9BTExPQ0EKKworCisjIEFDX0ZVTkNfQUxMT0NBCisjIC0tLS0tLS0tLS0tLS0tCitBTl9GVU5DVElPTihbYWxsb2NhXSwgW0FDX0ZVTkNfQUxMT0NBXSkKK0FOX0hFQURFUihbYWxsb2NhLmhdLCBbQUNfRlVOQ19BTExPQ0FdKQorQUNfREVGVU4oW0FDX0ZVTkNfQUxMT0NBXSwKK1sjIFRoZSBVbHRyaXggNC4yIG1pcHMgYnVpbHRpbiBhbGxvY2EgZGVjbGFyZWQgYnkgYWxsb2NhLmggb25seSB3b3JrcworIyBmb3IgY29uc3RhbnQgYXJndW1lbnRzLiAgVXNlbGVzcyEKK0FDX0NBQ0hFX0NIRUNLKFtmb3Igd29ya2luZyBhbGxvY2EuaF0sIGFjX2N2X3dvcmtpbmdfYWxsb2NhX2gsCitbQUNfTElOS19JRkVMU0UoCisgICAgICAgW0FDX0xBTkdfUFJPR1JBTShbW0AlOkBpbmNsdWRlIDxhbGxvY2EuaD5dXSwKKwkJCVtbY2hhciAqcCA9IChjaGFyICopIGFsbG9jYSAoMiAqIHNpemVvZiAoaW50KSk7CisJCQkgIGlmIChwKSByZXR1cm4gMDtdXSldLAorCQlbYWNfY3Zfd29ya2luZ19hbGxvY2FfaD15ZXNdLAorCQlbYWNfY3Zfd29ya2luZ19hbGxvY2FfaD1ub10pXSkKK2lmIHRlc3QgJGFjX2N2X3dvcmtpbmdfYWxsb2NhX2ggPSB5ZXM7IHRoZW4KKyAgQUNfREVGSU5FKEhBVkVfQUxMT0NBX0gsIDEsCisJICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSA8YWxsb2NhLmg+IGFuZCBpdCBzaG91bGQgYmUgdXNlZAorCSAgICAgKG5vdCBvbiBVbHRyaXgpLl0pCitmaQorCitBQ19DQUNIRV9DSEVDSyhbZm9yIGFsbG9jYV0sIGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzLAorW0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oCitbWyNpZmRlZiBfX0dOVUNfXworIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKyNlbHNlCisjIGlmZGVmIF9NU0NfVkVSCisjICBpbmNsdWRlIDxtYWxsb2MuaD4KKyMgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQorIyBlbHNlCisjICBpZmRlZiBIQVZFX0FMTE9DQV9ICisjICAgaW5jbHVkZSA8YWxsb2NhLmg+CisjICBlbHNlCisjICAgaWZkZWYgX0FJWAorICNwcmFnbWEgYWxsb2NhCisjICAgZWxzZQorIyAgICBpZm5kZWYgYWxsb2NhIC8qIHByZWRlZmluZWQgYnkgSFAgY2MgK09saWJjYWxscyAqLworY2hhciAqYWxsb2NhICgpOworIyAgICBlbmRpZgorIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCitdXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tjaGFyICpwID0gKGNoYXIgKikgYWxsb2NhICgxKTsKKwkJCQkgICAgaWYgKHApIHJldHVybiAwO11dKV0sCisJCVthY19jdl9mdW5jX2FsbG9jYV93b3Jrcz15ZXNdLAorCQlbYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3M9bm9dKV0pCisKK2lmIHRlc3QgJGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzID0geWVzOyB0aGVuCisgIEFDX0RFRklORShIQVZFX0FMTE9DQSwgMSwKKwkgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIGBhbGxvY2EnLCBhcyBhIGZ1bmN0aW9uIG9yIG1hY3JvLl0pCitlbHNlCisgIF9BQ19MSUJPQkpfQUxMT0NBCitmaQorXSkjIEFDX0ZVTkNfQUxMT0NBCisKKworIyBBVTo6QUNfQUxMT0NBCisjIC0tLS0tLS0tLS0tLS0KK0FVX0FMSUFTKFtBQ19BTExPQ0FdLCBbQUNfRlVOQ19BTExPQ0FdKQorCisKKyMgQUNfRlVOQ19DSE9XTgorIyAtLS0tLS0tLS0tLS0tCisjIERldGVybWluZSB3aGV0aGVyIGNob3duIGFjY2VwdHMgYXJndW1lbnRzIG9mIC0xIGZvciB1aWQgYW5kIGdpZC4KK0FOX0ZVTkNUSU9OKFtjaG93bl0sIFtBQ19GVU5DX0NIT1dOXSkKK0FDX0RFRlVOKFtBQ19GVU5DX0NIT1dOXSwKK1tBQ19SRVFVSVJFKFtBQ19UWVBFX1VJRF9UXSlkbmwKK0FDX0NIRUNLX0hFQURFUlModW5pc3RkLmgpCitBQ19DQUNIRV9DSEVDSyhbZm9yIHdvcmtpbmcgY2hvd25dLCBhY19jdl9mdW5jX2Nob3duX3dvcmtzLAorW0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbQUNfSU5DTFVERVNfREVGQVVMVAorI2luY2x1ZGUgPGZjbnRsLmg+CitdLAorW1sgIGNoYXIgKmYgPSAiY29uZnRlc3QuY2hvd24iOworICBzdHJ1Y3Qgc3RhdCBiZWZvcmUsIGFmdGVyOworCisgIGlmIChjcmVhdCAoZiwgMDYwMCkgPCAwKQorICAgIHJldHVybiAxOworICBpZiAoc3RhdCAoZiwgJmJlZm9yZSkgPCAwKQorICAgIHJldHVybiAxOworICBpZiAoY2hvd24gKGYsICh1aWRfdCkgLTEsIChnaWRfdCkgLTEpID09IC0xKQorICAgIHJldHVybiAxOworICBpZiAoc3RhdCAoZiwgJmFmdGVyKSA8IDApCisgICAgcmV0dXJuIDE7CisgIHJldHVybiAhIChiZWZvcmUuc3RfdWlkID09IGFmdGVyLnN0X3VpZCAmJiBiZWZvcmUuc3RfZ2lkID09IGFmdGVyLnN0X2dpZCk7CitdXSldLAorCSAgICAgICBbYWNfY3ZfZnVuY19jaG93bl93b3Jrcz15ZXNdLAorCSAgICAgICBbYWNfY3ZfZnVuY19jaG93bl93b3Jrcz1ub10sCisJICAgICAgIFthY19jdl9mdW5jX2Nob3duX3dvcmtzPW5vXSkKK3JtIC1mIGNvbmZ0ZXN0LmNob3duCitdKQoraWYgdGVzdCAkYWNfY3ZfZnVuY19jaG93bl93b3JrcyA9IHllczsgdGhlbgorICBBQ19ERUZJTkUoSEFWRV9DSE9XTiwgMSwKKwkgICAgW0RlZmluZSB0byAxIGlmIHlvdXIgc3lzdGVtIGhhcyBhIHdvcmtpbmcgYGNob3duJyBmdW5jdGlvbi5dKQorZmkKK10pIyBBQ19GVU5DX0NIT1dOCisKKworIyBBQ19GVU5DX0NMT1NFRElSX1ZPSUQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgY2xvc2VkaXIgcmV0dXJucyB2b2lkLCBhbmQgI2RlZmluZSBDTE9TRURJUl9WT0lEIGluCisjIHRoYXQgY2FzZS4KK0FDX0RFRlVOKFtBQ19GVU5DX0NMT1NFRElSX1ZPSURdLAorW0FDX1JFUVVJUkUoW0FDX0hFQURFUl9ESVJFTlRdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgY2xvc2VkaXIgcmV0dXJucyB2b2lkXSwKKwkgICAgICAgW2FjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZF0sCitbQUNfUlVOX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtBQ19JTkNMVURFU19ERUZBVUxUCisjaW5jbHVkZSA8JGFjX2hlYWRlcl9kaXJlbnQ+CisjaWZuZGVmIF9fY3BsdXNwbHVzCitpbnQgY2xvc2VkaXIgKCk7CisjZW5kaWYKK10sCisJCQkJW1tyZXR1cm4gY2xvc2VkaXIgKG9wZW5kaXIgKCIuIikpICE9IDA7XV0pXSwKKwkgICAgICAgW2FjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZD1ub10sCisJICAgICAgIFthY19jdl9mdW5jX2Nsb3NlZGlyX3ZvaWQ9eWVzXSwKKwkgICAgICAgW2FjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZD15ZXNdKV0pCitpZiB0ZXN0ICRhY19jdl9mdW5jX2Nsb3NlZGlyX3ZvaWQgPSB5ZXM7IHRoZW4KKyAgQUNfREVGSU5FKENMT1NFRElSX1ZPSUQsIDEsCisJICAgIFtEZWZpbmUgdG8gMSBpZiB0aGUgYGNsb3NlZGlyJyBmdW5jdGlvbiByZXR1cm5zIHZvaWQgaW5zdGVhZAorCSAgICAgb2YgYGludCcuXSkKK2ZpCitdKQorCisKKyMgQUNfRlVOQ19FUlJPUl9BVF9MSU5FCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQU5fRlVOQ1RJT04oW2Vycm9yXSwgICAgICAgICBbQUNfRlVOQ19FUlJPUl9BVF9MSU5FXSkKK0FOX0ZVTkNUSU9OKFtlcnJvcl9hdF9saW5lXSwgW0FDX0ZVTkNfRVJST1JfQVRfTElORV0pCitBQ19ERUZVTihbQUNfRlVOQ19FUlJPUl9BVF9MSU5FXSwKK1tBQ19MSUJTT1VSQ0VTKFtlcnJvci5oLCBlcnJvci5jXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgZXJyb3JfYXRfbGluZV0sIGFjX2N2X2xpYl9lcnJvcl9hdF9saW5lLAorW0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oWyNpbmNsdWRlIDxlcnJvci5oPl0sCisJCQkJIFtlcnJvcl9hdF9saW5lICgwLCAwLCAiIiwgMCwgImFuIGVycm9yIG9jY3VycmVkIik7XSldLAorCQlbYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmU9eWVzXSwKKwkJW2FjX2N2X2xpYl9lcnJvcl9hdF9saW5lPW5vXSldKQoraWYgdGVzdCAkYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmUgPSBubzsgdGhlbgorICBBQ19MSUJPQkooZXJyb3IpCitmaQorXSkKKworCisjIEFVOjpBTV9GVU5DX0VSUk9SX0FUX0xJTkUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQVVfQUxJQVMoW0FNX0ZVTkNfRVJST1JfQVRfTElORV0sIFtBQ19GVU5DX0VSUk9SX0FUX0xJTkVdKQorCisKKyMgX0FDX0ZVTkNfRk5NQVRDSF9JRihTVEFOREFSRCA9IEdOVSB8IFBPU0lYLCBDQUNIRV9WQVIsIElGLVRSVUUsIElGLUZBTFNFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmIGEgU1RBTkRBUkQgY29tcGxpYW50IGZubWF0Y2ggaXMgZm91bmQsIHJ1biBJRi1UUlVFLCBvdGhlcndpc2UKKyMgSUYtRkFMU0UuICBVc2UgQ0FDSEVfVkFSLgorQUNfREVGVU4oW19BQ19GVU5DX0ZOTUFUQ0hfSUZdLAorW0FDX0NBQ0hFX0NIRUNLKAorICAgW2ZvciB3b3JraW5nICQxIGZubWF0Y2hdLAorICAgWyQyXSwKKyAgWyMgU29tZSB2ZXJzaW9ucyBvZiBTb2xhcmlzLCBTQ08sIGFuZCB0aGUgR05VIEMgTGlicmFyeQorICAgIyBoYXZlIGEgYnJva2VuIG9yIGluY29tcGF0aWJsZSBmbm1hdGNoLgorICAgIyBTbyB3ZSBydW4gYSB0ZXN0IHByb2dyYW0uICBJZiB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLCB0YWtlIG5vIGNoYW5jZS4KKyAgICMgVGhhbmtzIHRvIEpvaG4gT2xleW5pY2ssIEZyYW5jLG9pcyBQaW5hcmQsIGFuZCBQYXVsIEVnZ2VydCBmb3IgdGhpcyB0ZXN0LgorICAgQUNfUlVOX0lGRUxTRSgKKyAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisJIFsjaW5jbHVkZSA8Zm5tYXRjaC5oPgorIwkgICBkZWZpbmUgeShhLCBiLCBjKSAoZm5tYXRjaCAoYSwgYiwgYykgPT0gMCkKKyMJICAgZGVmaW5lIG4oYSwgYiwgYykgKGZubWF0Y2ggKGEsIGIsIGMpID09IEZOTV9OT01BVENIKQorCSBdLAorCSBbcmV0dXJuCisJICAgKCEoeSAoImEqIiwgImFiYyIsIDApCisJICAgICAgJiYgbiAoImQqLyoxIiwgImQvcy8xIiwgRk5NX1BBVEhOQU1FKQorCSAgICAgICYmIHkgKCJhXFxcXGJjIiwgImFiYyIsIDApCisJICAgICAgJiYgbiAoImFcXFxcYmMiLCAiYWJjIiwgRk5NX05PRVNDQVBFKQorCSAgICAgICYmIHkgKCIqeCIsICIueCIsIDApCisJICAgICAgJiYgbiAoIip4IiwgIi54IiwgRk5NX1BFUklPRCkKKwkgICAgICAmJiBtNF9pZihbJDFdLCBbR05VXSwKKwkJICAgW3kgKCJ4eFhYIiwgInhYeFgiLCBGTk1fQ0FTRUZPTEQpCisJCSAgICAmJiB5ICgiYSsrKHh8eXkpYiIsICJhK3h5eXl5eGIiLCBGTk1fRVhUTUFUQ0gpCisJCSAgICAmJiBuICgiZCovKjEiLCAiZC9zLzEiLCBGTk1fRklMRV9OQU1FKQorCQkgICAgJiYgeSAoIioiLCAieCIsIEZOTV9GSUxFX05BTUUgfCBGTk1fTEVBRElOR19ESVIpCisJCSAgICAmJiB5ICgieCoiLCAieC95L3oiLCBGTk1fRklMRV9OQU1FIHwgRk5NX0xFQURJTkdfRElSKQorCQkgICAgJiYgeSAoIipjKiIsICJjL3giLCBGTk1fRklMRV9OQU1FIHwgRk5NX0xFQURJTkdfRElSKV0sCisJCSAgIDEpKSk7XSldLAorICAgICAgWyQyPXllc10sCisgICAgICBbJDI9bm9dLAorICAgICAgWyQyPWNyb3NzXSldKQorQVNfSUYoW3Rlc3QgJCQyID0geWVzXSwgWyQzXSwgWyQ0XSkKK10pIyBfQUNfRlVOQ19GTk1BVENIX0lGCisKKworIyBBQ19GVU5DX0ZOTUFUQ0gKKyMgLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfRlVOQ19GTk1BVENIXSwKK1tfQUNfRlVOQ19GTk1BVENIX0lGKFtQT1NJWF0sIFthY19jdl9mdW5jX2ZubWF0Y2hfd29ya3NdLAorCQkgICAgIFtBQ19ERUZJTkUoW0hBVkVfRk5NQVRDSF0sIDEsCisJCSAgICAgW0RlZmluZSB0byAxIGlmIHlvdXIgc3lzdGVtIGhhcyBhIHdvcmtpbmcgUE9TSVggYGZubWF0Y2gnCisJCSAgICAgIGZ1bmN0aW9uLl0pXSkKK10pIyBBQ19GVU5DX0ZOTUFUQ0gKKworCisjIF9BQ19MSUJPQkpfRk5NQVRDSAorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJlcGFyZSB0aGUgcmVwbGFjZW1lbnQgb2YgZm5tYXRjaC4KK0FDX0RFRlVOKFtfQUNfTElCT0JKX0ZOTUFUQ0hdLAorW0FDX1JFUVVJUkUoW0FDX0NfQ09OU1RdKWRubAorQUNfUkVRVUlSRShbQUNfRlVOQ19BTExPQ0FdKWRubAorQUNfUkVRVUlSRShbQUNfVFlQRV9NQlNUQVRFX1RdKWRubAorQUNfQ0hFQ0tfREVDTFMoW2dldGVudl0pCitBQ19DSEVDS19GVU5DUyhbYnRvd2MgbWJzcnRvd2NzIG1lbXBjcHkgd21lbXBjcHldKQorQUNfQ0hFQ0tfSEVBREVSUyhbd2NoYXIuaCB3Y3R5cGUuaF0pCitBQ19MSUJPQkooW2ZubWF0Y2hdKQorQUNfQ09ORklHX0xJTktTKFskYWNfY29uZmlnX2xpYm9ial9kaXIvZm5tYXRjaC5oOiRhY19jb25maWdfbGlib2JqX2Rpci9mbm1hdGNoXy5oXSkKK0FDX0RFRklORShmbm1hdGNoLCBycGxfZm5tYXRjaCwKKwkgIFtEZWZpbmUgdG8gcnBsX2ZubWF0Y2ggaWYgdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkLl0pCitdKSMgX0FDX0xJQk9CSl9GTk1BVENICisKKworIyBBQ19SRVBMQUNFX0ZOTUFUQ0gKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfUkVQTEFDRV9GTk1BVENIXSwKK1tfQUNfRlVOQ19GTk1BVENIX0lGKFtQT1NJWF0sIFthY19jdl9mdW5jX2ZubWF0Y2hfd29ya3NdLAorCQkgICAgIFtybSAtZiAiJGFjX2NvbmZpZ19saWJvYmpfZGlyL2ZubWF0Y2guaCJdLAorCQkgICAgIFtfQUNfTElCT0JKX0ZOTUFUQ0hdKQorXSkjIEFDX1JFUExBQ0VfRk5NQVRDSAorCisKKyMgQUNfRlVOQ19GTk1BVENIX0dOVQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfRlVOQ19GTk1BVENIX0dOVV0sCitbQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCitfQUNfRlVOQ19GTk1BVENIX0lGKFtHTlVdLCBbYWNfY3ZfZnVuY19mbm1hdGNoX2dudV0sCisJCSAgICBbcm0gLWYgIiRhY19jb25maWdfbGlib2JqX2Rpci9mbm1hdGNoLmgiXSwKKwkJICAgIFtfQUNfTElCT0JKX0ZOTUFUQ0hdKQorXSkjIEFDX0ZVTkNfRk5NQVRDSF9HTlUKKworCisjIEFVOjpBTV9GVU5DX0ZOTUFUQ0gKKyMgQVU6OmZwX0ZVTkNfRk5NQVRDSAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCitBVV9BTElBUyhbQU1fRlVOQ19GTk1BVENIXSwgW0FDX0ZVTkNfRk5NQVRDSF0pCitBVV9BTElBUyhbZnBfRlVOQ19GTk1BVENIXSwgW0FDX0ZVTkNfRk5NQVRDSF0pCisKKworIyBBQ19GVU5DX0ZTRUVLTworIyAtLS0tLS0tLS0tLS0tLQorQU5fRlVOQ1RJT04oW2Z0ZWxsb10sIFtBQ19GVU5DX0ZTRUVLT10pCitBTl9GVU5DVElPTihbZnNlZWtvXSwgW0FDX0ZVTkNfRlNFRUtPXSkKK0FDX0RFRlVOKFtBQ19GVU5DX0ZTRUVLT10sCitbX0FDX1NZU19MQVJHRUZJTEVfTUFDUk9fVkFMVUUoX0xBUkdFRklMRV9TT1VSQ0UsIDEsCisgICBbYWNfY3Zfc3lzX2xhcmdlZmlsZV9zb3VyY2VdLAorICAgW0RlZmluZSB0byAxIHRvIG1ha2UgZnNlZWtvIHZpc2libGUgb24gc29tZSBob3N0cyAoZS5nLiBnbGliYyAyLjIpLl0sCisgICBbWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gLyogZm9yIG9mZl90ICovCisgICAgICNpbmNsdWRlIDxzdGRpby5oPl1dLAorICAgW1tpbnQgKCpmcCkgKEZJTEUgKiwgb2ZmX3QsIGludCkgPSBmc2Vla287CisgICAgIHJldHVybiBmc2Vla28gKHN0ZGluLCAwLCAwKSAmJiBmcCAoc3RkaW4sIDAsIDApO11dKQorCisjIFdlIHVzZWQgdG8gdHJ5IGRlZmluaW5nIF9YT1BFTl9TT1VSQ0U9NTAwIHRvbywgdG8gd29yayBhcm91bmQgYSBidWcKKyMgaW4gZ2xpYmMgMi4xLjMsIGJ1dCB0aGF0IGJyZWFrcyB0b28gbWFueSBvdGhlciB0aGluZ3MuCisjIElmIHlvdSB3YW50IGZzZWVrbyBhbmQgZnRlbGxvIHdpdGggZ2xpYmMsIHVwZ3JhZGUgdG8gYSBmaXhlZCBnbGliYy4KK2lmIHRlc3QgJGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlICE9IHVua25vd247IHRoZW4KKyAgQUNfREVGSU5FKEhBVkVfRlNFRUtPLCAxLAorICAgIFtEZWZpbmUgdG8gMSBpZiBmc2Vla28gKGFuZCBwcmVzdW1hYmx5IGZ0ZWxsbykgZXhpc3RzIGFuZCBpcyBkZWNsYXJlZC5dKQorZmkKK10pIyBBQ19GVU5DX0ZTRUVLTworCisKKyMgQUNfRlVOQ19HRVRHUk9VUFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGZpbmQgYGdldGdyb3VwcycsIGFuZCBjaGVjayB0aGF0IGl0IHdvcmtzLgorIyBXaGVuIGNyb3NzLWNvbXBpbGluZywgYXNzdW1lIGdldGdyb3VwcyBpcyBicm9rZW4uCitBTl9GVU5DVElPTihbZ2V0Z3JvdXBzXSwgW0FDX0ZVTkNfR0VUR1JPVVBTXSkKK0FDX0RFRlVOKFtBQ19GVU5DX0dFVEdST1VQU10sCitbQUNfUkVRVUlSRShbQUNfVFlQRV9HRVRHUk9VUFNdKWRubAorQUNfUkVRVUlSRShbQUNfVFlQRV9TSVpFX1RdKWRubAorQUNfQ0hFQ0tfRlVOQyhnZXRncm91cHMpCisKKyMgSWYgd2UgZG9uJ3QgeWV0IGhhdmUgZ2V0Z3JvdXBzLCBzZWUgaWYgaXQncyBpbiAtbGJzZC4KKyMgVGhpcyBpcyByZXBvcnRlZCB0byBiZSBuZWNlc3Nhcnkgb24gYW4gSVRPUyAzMDAwV1MgcnVubmluZyBTRUlVWCAzLjEuCithY19zYXZlX0xJQlM9JExJQlMKK2lmIHRlc3QgJGFjX2N2X2Z1bmNfZ2V0Z3JvdXBzID0gbm87IHRoZW4KKyAgQUNfQ0hFQ0tfTElCKGJzZCwgZ2V0Z3JvdXBzLCBbR0VUR1JPVVBTX0xJQj0tbGJzZF0pCitmaQorCisjIFJ1biB0aGUgcHJvZ3JhbSB0byB0ZXN0IHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBzeXN0ZW0tc3VwcGxpZWQKKyMgZ2V0Z3JvdXBzIGZ1bmN0aW9uIG9ubHkgaWYgdGhlcmUgaXMgc3VjaCBhIGZ1bmN0aW9uLgoraWYgdGVzdCAkYWNfY3ZfZnVuY19nZXRncm91cHMgPSB5ZXM7IHRoZW4KKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3b3JraW5nIGdldGdyb3Vwc10sIGFjX2N2X2Z1bmNfZ2V0Z3JvdXBzX3dvcmtzLAorICAgW0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbQUNfSU5DTFVERVNfREVGQVVMVF0sCisgICAgICBbWy8qIE9uIFVsdHJpeCA0LjMsIGdldGdyb3VwcyAoMCwgMCkgYWx3YXlzIGZhaWxzLiAgKi8KKyAgICAgICByZXR1cm4gZ2V0Z3JvdXBzICgwLCAwKSA9PSAtMTtdXSldLAorCQkgIFthY19jdl9mdW5jX2dldGdyb3Vwc193b3Jrcz15ZXNdLAorCQkgIFthY19jdl9mdW5jX2dldGdyb3Vwc193b3Jrcz1ub10sCisJCSAgW2FjX2N2X2Z1bmNfZ2V0Z3JvdXBzX3dvcmtzPW5vXSkKKyAgIF0pCitlbHNlCisgIGFjX2N2X2Z1bmNfZ2V0Z3JvdXBzX3dvcmtzPW5vCitmaQoraWYgdGVzdCAkYWNfY3ZfZnVuY19nZXRncm91cHNfd29ya3MgPSB5ZXM7IHRoZW4KKyAgQUNfREVGSU5FKEhBVkVfR0VUR1JPVVBTLCAxLAorCSAgICBbRGVmaW5lIHRvIDEgaWYgeW91ciBzeXN0ZW0gaGFzIGEgd29ya2luZyBgZ2V0Z3JvdXBzJyBmdW5jdGlvbi5dKQorZmkKK0xJQlM9JGFjX3NhdmVfTElCUworXSkjIEFDX0ZVTkNfR0VUR1JPVVBTCisKKworIyBfQUNfTElCT0JKX0dFVExPQURBVkcKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCB1cCB0aGUgQUNfTElCT0JKIHJlcGxhY2VtZW50IG9mIGBnZXRsb2FkYXZnJy4KK200X2RlZmluZShbX0FDX0xJQk9CSl9HRVRMT0FEQVZHXSwKK1tBQ19MSUJPQkooZ2V0bG9hZGF2ZykKK0FDX0RFRklORShDX0dFVExPQURBVkcsIDEsIFtEZWZpbmUgdG8gMSBpZiB1c2luZyBgZ2V0bG9hZGF2Zy5jJy5dKQorIyBGaWd1cmUgb3V0IHdoYXQgb3VyIGdldGxvYWRhdmcuYyBuZWVkcy4KK2FjX2hhdmVfZnVuYz1ubworQUNfQ0hFQ0tfSEVBREVSKHN5cy9kZ19zeXNfaW5mby5oLAorW2FjX2hhdmVfZnVuYz15ZXMKKyBBQ19ERUZJTkUoREdVWCwgMSwgW0RlZmluZSB0byAxIGZvciBER1VYIHdpdGggPHN5cy9kZ19zeXNfaW5mby5oPi5dKQorIEFDX0NIRUNLX0xJQihkZ2MsIGRnX3N5c19pbmZvKV0pCisKK0FDX0NIRUNLX0hFQURFUihsb2NhbGUuaCkKK0FDX0NIRUNLX0ZVTkNTKHNldGxvY2FsZSkKKworIyBXZSBjYW5ub3QgY2hlY2sgZm9yIDxkd2FyZi5oPiwgYmVjYXVzZSBTb2xhcmlzIDIgZG9lcyBub3QgdXNlIGR3YXJmIChpdAorIyB1c2VzIHN0YWJzKSwgYnV0IGl0IGlzIHN0aWxsIFNWUjQuICBXZSBjYW5ub3QgY2hlY2sgZm9yIDxlbGYuaD4gYmVjYXVzZQorIyBJcml4IDQuMC41RiBoYXMgdGhlIGhlYWRlciBidXQgbm90IHRoZSBsaWJyYXJ5LgoraWYgdGVzdCAkYWNfaGF2ZV9mdW5jID0gbm8gJiYgdGVzdCAiJGFjX2N2X2xpYl9lbGZfZWxmX2JlZ2luIiA9IHllczsgdGhlbgorICBhY19oYXZlX2Z1bmM9eWVzCisgIEFDX0RFRklORShTVlI0LCAxLCBbRGVmaW5lIHRvIDEgb24gU3lzdGVtIFYgUmVsZWFzZSA0Ll0pCitmaQorCitpZiB0ZXN0ICRhY19oYXZlX2Z1bmMgPSBubzsgdGhlbgorICBBQ19DSEVDS19IRUFERVIoaW5xX3N0YXRzL2NwdXN0YXRzLmgsCisgIFthY19oYXZlX2Z1bmM9eWVzCisgICBBQ19ERUZJTkUoVU1BWCwgMSwgW0RlZmluZSB0byAxIGZvciBFbmNvcmUgVU1BWC5dKQorICAgQUNfREVGSU5FKFVNQVg0XzMsIDEsCisJICAgICBbRGVmaW5lIHRvIDEgZm9yIEVuY29yZSBVTUFYIDQuMyB0aGF0IGhhcyA8aW5xX3N0YXR1cy9jcHVzdGF0cy5oPgorCSAgICAgIGluc3RlYWQgb2YgPHN5cy9jcHVzdGF0cy5oPi5dKV0pCitmaQorCitpZiB0ZXN0ICRhY19oYXZlX2Z1bmMgPSBubzsgdGhlbgorICBBQ19DSEVDS19IRUFERVIoc3lzL2NwdXN0YXRzLmgsCisgIFthY19oYXZlX2Z1bmM9eWVzOyBBQ19ERUZJTkUoVU1BWCldKQorZmkKKworaWYgdGVzdCAkYWNfaGF2ZV9mdW5jID0gbm87IHRoZW4KKyAgQUNfQ0hFQ0tfSEVBREVSUyhtYWNoL21hY2guaCkKK2ZpCisKK0FDX0NIRUNLX0hFQURFUlMobmxpc3QuaCwKK1tBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3Qgbmxpc3Qubl91bi5uX25hbWVdLAorCQkgIFtBQ19ERUZJTkUoTkxJU1RfTkFNRV9VTklPTiwgMSwKKwkJCSAgICAgW0RlZmluZSB0byAxIGlmIHlvdXIgYHN0cnVjdCBubGlzdCcgaGFzIGFuCisJCQkgICAgICBgbl91bicgbWVtYmVyLiAgT2Jzb2xldGUsIGRlcGVuZCBvbgorCQkJICAgICAgYEhBVkVfU1RSVUNUX05MSVNUX05fVU5fTl9OQU1FXSldLCBbXSwKKwkJICBbQCU6QGluY2x1ZGUgPG5saXN0Lmg+XSkKK10pZG5sCitdKSMgX0FDX0xJQk9CSl9HRVRMT0FEQVZHCisKKworIyBBQ19GVU5DX0dFVExPQURBVkcKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfRlVOQ19HRVRMT0FEQVZHXSwKK1thY19oYXZlX2Z1bmM9bm8gIyB5ZXMgbWVhbnMgd2UndmUgZm91bmQgYSB3YXkgdG8gZ2V0IHRoZSBsb2FkIGF2ZXJhZ2UuCisKKyMgTWFrZSBzdXJlIGdldGxvYWRhdmcuYyBpcyB3aGVyZSBpdCBiZWxvbmdzLCBhdCBjb25maWd1cmUtdGltZS4KK3Rlc3QgLWYgIiRzcmNkaXIvJGFjX2NvbmZpZ19saWJvYmpfZGlyL2dldGxvYWRhdmcuYyIgfHwKKyAgQUNfTVNHX0VSUk9SKFskc3JjZGlyLyRhY19jb25maWdfbGlib2JqX2Rpci9nZXRsb2FkYXZnLmMgaXMgbWlzc2luZ10pCisKK2FjX3NhdmVfTElCUz0kTElCUworCisjIENoZWNrIGZvciBnZXRsb2FkYXZnLCBidXQgYmUgc3VyZSBub3QgdG8gdG91Y2ggdGhlIGNhY2hlIHZhcmlhYmxlLgorKEFDX0NIRUNLX0ZVTkMoZ2V0bG9hZGF2ZywgZXhpdCAwLCBleGl0IDEpKSAmJiBhY19oYXZlX2Z1bmM9eWVzCisKKyMgT24gSFBVWDksIGFuIHVucHJpdmlsZWdlZCB1c2VyIGNhbiBnZXQgbG9hZCBhdmVyYWdlcyB0aHJvdWdoIHRoaXMgZnVuY3Rpb24uCitBQ19DSEVDS19GVU5DUyhwc3RhdF9nZXRkeW5hbWljKQorCisjIFNvbGFyaXMgaGFzIGxpYmtzdGF0IHdoaWNoIGRvZXMgbm90IHJlcXVpcmUgcm9vdC4KK0FDX0NIRUNLX0xJQihrc3RhdCwga3N0YXRfb3BlbikKK3Rlc3QgJGFjX2N2X2xpYl9rc3RhdF9rc3RhdF9vcGVuID0geWVzICYmIGFjX2hhdmVfZnVuYz15ZXMKKworIyBTb21lIHN5c3RlbXMgd2l0aCAtbHV0aWwgaGF2ZSAoYW5kIG5lZWQpIC1sa3ZtIGFzIHdlbGwsIHNvbWUgZG8gbm90LgorIyBPbiBTb2xhcmlzLCAtbGt2bSByZXF1aXJlcyBubGlzdCBmcm9tIC1sZWxmLCBzbyBjaGVjayB0aGF0IGZpcnN0CisjIHRvIGdldCB0aGUgcmlnaHQgYW5zd2VyIGludG8gdGhlIGNhY2hlLgorIyBGb3Iga3N0YXQgb24gc29sYXJpcywgd2UgbmVlZCBsaWJlbGYgdG8gZm9yY2UgdGhlIGRlZmluaXRpb24gb2YgU1ZSNCBiZWxvdy4KK2lmIHRlc3QgJGFjX2hhdmVfZnVuYyA9IG5vOyB0aGVuCisgIEFDX0NIRUNLX0xJQihlbGYsIGVsZl9iZWdpbiwgTElCUz0iLWxlbGYgJExJQlMiKQorZmkKK2lmIHRlc3QgJGFjX2hhdmVfZnVuYyA9IG5vOyB0aGVuCisgIEFDX0NIRUNLX0xJQihrdm0sIGt2bV9vcGVuLCBMSUJTPSItbGt2bSAkTElCUyIpCisgICMgQ2hlY2sgZm9yIHRoZSA0LjRCU0QgZGVmaW5pdGlvbiBvZiBnZXRsb2FkYXZnLgorICBBQ19DSEVDS19MSUIodXRpbCwgZ2V0bG9hZGF2ZywKKyAgICBbTElCUz0iLWx1dGlsICRMSUJTIiBhY19oYXZlX2Z1bmM9eWVzIGFjX2N2X2Z1bmNfZ2V0bG9hZGF2Z19zZXRnaWQ9eWVzXSkKK2ZpCisKK2lmIHRlc3QgJGFjX2hhdmVfZnVuYyA9IG5vOyB0aGVuCisgICMgVGhlcmUgaXMgYSBjb21tb25seSBhdmFpbGFibGUgbGlicmFyeSBmb3IgUlMvNjAwMCBBSVguCisgICMgU2luY2UgaXQgaXMgbm90IGEgc3RhbmRhcmQgcGFydCBvZiBBSVgsIGl0IG1pZ2h0IGJlIGluc3RhbGxlZCBsb2NhbGx5LgorICBhY19nZXRsb2FkYXZnX0xJQlM9JExJQlMKKyAgTElCUz0iLUwvdXNyL2xvY2FsL2xpYiAkTElCUyIKKyAgQUNfQ0hFQ0tfTElCKGdldGxvYWRhdmcsIGdldGxvYWRhdmcsCisJICAgICAgIFtMSUJTPSItbGdldGxvYWRhdmcgJExJQlMiXSwgW0xJQlM9JGFjX2dldGxvYWRhdmdfTElCU10pCitmaQorCisjIE1ha2Ugc3VyZSBpdCBpcyByZWFsbHkgaW4gdGhlIGxpYnJhcnksIGlmIHdlIHRoaW5rIHdlIGZvdW5kIGl0LAorIyBvdGhlcndpc2Ugc2V0IHVwIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbi4KK0FDX0NIRUNLX0ZVTkNTKGdldGxvYWRhdmcsIFtdLAorCSAgICAgICBbX0FDX0xJQk9CSl9HRVRMT0FEQVZHXSkKKworIyBTb21lIGRlZmluaXRpb25zIG9mIGdldGxvYWRhdmcgcmVxdWlyZSB0aGF0IHRoZSBwcm9ncmFtIGJlIGluc3RhbGxlZCBzZXRnaWQuCitBQ19DQUNIRV9DSEVDSyh3aGV0aGVyIGdldGxvYWRhdmcgcmVxdWlyZXMgc2V0Z2lkLAorCSAgICAgICBhY19jdl9mdW5jX2dldGxvYWRhdmdfc2V0Z2lkLAorW0FDX0VHUkVQX0NQUChbWW93emEgQW0gSSBTRVRHSUQgeWV0XSwKK1sjaW5jbHVkZSAiJHNyY2Rpci8kYWNfY29uZmlnX2xpYm9ial9kaXIvZ2V0bG9hZGF2Zy5jIgorI2lmZGVmIExEQVZfUFJJVklMRUdFRAorWW93emEgQW0gSSBTRVRHSUQgeWV0CitAJTpAZW5kaWZdLAorCSAgICAgIGFjX2N2X2Z1bmNfZ2V0bG9hZGF2Z19zZXRnaWQ9eWVzLAorCSAgICAgIGFjX2N2X2Z1bmNfZ2V0bG9hZGF2Z19zZXRnaWQ9bm8pXSkKK2lmIHRlc3QgJGFjX2N2X2Z1bmNfZ2V0bG9hZGF2Z19zZXRnaWQgPSB5ZXM7IHRoZW4KKyAgTkVFRF9TRVRHSUQ9dHJ1ZQorICBBQ19ERUZJTkUoR0VUTE9BREFWR19QUklWSUxFR0VELCAxLAorCSAgICBbRGVmaW5lIHRvIDEgaWYgdGhlIGBnZXRsb2FkYXZnJyBmdW5jdGlvbiBuZWVkcyB0byBiZSBydW4gc2V0dWlkCisJICAgICBvciBzZXRnaWQuXSkKK2Vsc2UKKyAgTkVFRF9TRVRHSUQ9ZmFsc2UKK2ZpCitBQ19TVUJTVChORUVEX1NFVEdJRClkbmwKKworaWYgdGVzdCAkYWNfY3ZfZnVuY19nZXRsb2FkYXZnX3NldGdpZCA9IHllczsgdGhlbgorICBBQ19DQUNIRV9DSEVDSyhncm91cCBvZiAvZGV2L2ttZW0sIGFjX2N2X2dyb3VwX2ttZW0sCitbICMgT24gU29sYXJpcywgL2Rldi9rbWVtIGlzIGEgc3ltbGluay4gIEdldCBpbmZvIG9uIHRoZSByZWFsIGZpbGUuCisgIGFjX2xzX291dHB1dD1gbHMgLWxnTCAvZGV2L2ttZW0gMj4vZGV2L251bGxgCisgICMgSWYgd2UgZ290IGFuIGVycm9yIChzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBzeW1saW5rcyksIHRyeSB3aXRob3V0IC1MLgorICB0ZXN0IC16ICIkYWNfbHNfb3V0cHV0IiAmJiBhY19sc19vdXRwdXQ9YGxzIC1sZyAvZGV2L2ttZW1gCisgIGFjX2N2X2dyb3VwX2ttZW09YEFTX0VDSE8oWyIkYWNfbHNfb3V0cHV0Il0pIFwKKyAgICB8IHNlZCAtbmUgWydzL1sJIF1bCSBdKi8gL2c7CisJICAgICAgIHMvXi5bc1Nyd3gtXSogKlswLTldKiAqXChbXjAtOV0qXCkgICouKi9cMS87CisJICAgICAgIC8gL3MvLiogLy87cDsnXWAKK10pCisgIEFDX1NVQlNUKEtNRU1fR1JPVVAsICRhY19jdl9ncm91cF9rbWVtKWRubAorZmkKK2lmIHRlc3QgIngkYWNfc2F2ZV9MSUJTIiA9IHg7IHRoZW4KKyAgR0VUTE9BREFWR19MSUJTPSRMSUJTCitlbHNlCisgIEdFVExPQURBVkdfTElCUz1gQVNfRUNITyhbIiRMSUJTIl0pIHwgc2VkICJzfCRhY19zYXZlX0xJQlN8fCJgCitmaQorTElCUz0kYWNfc2F2ZV9MSUJTCisKK0FDX1NVQlNUKEdFVExPQURBVkdfTElCUylkbmwKK10pIyBBQ19GVU5DX0dFVExPQURBVkcKKworCisjIEFVOjpBQ19HRVRMT0FEQVZHCisjIC0tLS0tLS0tLS0tLS0tLS0tCitBVV9BTElBUyhbQUNfR0VUTE9BREFWR10sIFtBQ19GVU5DX0dFVExPQURBVkddKQorCisKKyMgQUNfRlVOQ19HRVRNTlRFTlQKKyMgLS0tLS0tLS0tLS0tLS0tLS0KK0FOX0ZVTkNUSU9OKFtnZXRtbnRlbnRdLCBbQUNfRlVOQ19HRVRNTlRFTlRdKQorQUNfREVGVU4oW0FDX0ZVTkNfR0VUTU5URU5UXSwKK1sjIGdldG1udGVudCBpcyBpbiB0aGUgc3RhbmRhcmQgQyBsaWJyYXJ5IG9uIFVOSUNPUywgaW4gLWxzdW4gb24gSXJpeCA0LAorIyAtbHNlcSBvbiBEeW5peC9QVFgsIC1sZ2VuIG9uIFVuaXh3YXJlLgorQUNfU0VBUkNIX0xJQlMoZ2V0bW50ZW50LCBbc3VuIHNlcSBnZW5dLAorCSAgICAgICBbYWNfY3ZfZnVuY19nZXRtbnRlbnQ9eWVzCisJCUFDX0RFRklORShbSEFWRV9HRVRNTlRFTlRdLCAxLAorCQkJICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRtbnRlbnQnIGZ1bmN0aW9uLl0pXSwKKwkgICAgICAgW2FjX2N2X2Z1bmNfZ2V0bW50ZW50PW5vXSkKK10pCisKKworIyBBQ19GVU5DX0dFVFBHUlAKKyMgLS0tLS0tLS0tLS0tLS0tCisjIEZpZ3VyZSBvdXQgd2hldGhlciBnZXRwZ3JwIHJlcXVpcmVzIHplcm8gYXJndW1lbnRzLgorQUNfREVGVU4oW0FDX0ZVTkNfR0VUUEdSUF0sCitbQUNfQ0FDSEVfQ0hFQ0sod2hldGhlciBnZXRwZ3JwIHJlcXVpcmVzIHplcm8gYXJndW1lbnRzLAorIGFjX2N2X2Z1bmNfZ2V0cGdycF92b2lkLAorWyMgVXNlIGl0IHdpdGggYSBzaW5nbGUgYXJnLgorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbQUNfSU5DTFVERVNfREVGQVVMVF0sIFtnZXRwZ3JwICgwKTtdKV0sCisJCSAgW2FjX2N2X2Z1bmNfZ2V0cGdycF92b2lkPW5vXSwKKwkJICBbYWNfY3ZfZnVuY19nZXRwZ3JwX3ZvaWQ9eWVzXSkKK10pCitpZiB0ZXN0ICRhY19jdl9mdW5jX2dldHBncnBfdm9pZCA9IHllczsgdGhlbgorICBBQ19ERUZJTkUoR0VUUEdSUF9WT0lELCAxLAorCSAgICBbRGVmaW5lIHRvIDEgaWYgdGhlIGBnZXRwZ3JwJyBmdW5jdGlvbiByZXF1aXJlcyB6ZXJvIGFyZ3VtZW50cy5dKQorZmkKK10pIyBBQ19GVU5DX0dFVFBHUlAKKworCisjIEFDX0ZVTkNfTFNUQVRfRk9MTE9XU19TTEFTSEVEX1NZTUxJTksKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBXaGVuIGNyb3NzLWNvbXBpbGluZywgYmUgcGVzc2ltaXN0aWMgc28gd2Ugd2lsbCBlbmQgdXAgdXNpbmcgdGhlCisjIHJlcGxhY2VtZW50IHZlcnNpb24gb2YgbHN0YXQgdGhhdCBjaGVja3MgZm9yIHRyYWlsaW5nIHNsYXNoZXMgYW5kCisjIGNhbGxzIGxzdGF0IGEgc2Vjb25kIHRpbWUgd2hlbiBuZWNlc3NhcnkuCitBTl9GVU5DVElPTihbbHN0YXRdLCBbQUNfRlVOQ19MU1RBVF9GT0xMT1dTX1NMQVNIRURfU1lNTElOS10pCitBQ19ERUZVTihbQUNfRlVOQ19MU1RBVF9GT0xMT1dTX1NMQVNIRURfU1lNTElOS10sCitbQUNfQ0FDSEVfQ0hFQ0soCisgICAgICAgW3doZXRoZXIgbHN0YXQgY29ycmVjdGx5IGhhbmRsZXMgdHJhaWxpbmcgc2xhc2hdLAorICAgICAgIFthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbmtdLAorW3JtIC1mIGNvbmZ0ZXN0LnN5bSBjb25mdGVzdC5maWxlCitlY2hvID5jb25mdGVzdC5maWxlCitpZiB0ZXN0ICIkYXNfbG5fcyIgPSAibG4gLXMiICYmIGxuIC1zIGNvbmZ0ZXN0LmZpbGUgY29uZnRlc3Quc3ltOyB0aGVuCisgIEFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbQUNfSU5DTFVERVNfREVGQVVMVF0sCisgICAgW3N0cnVjdCBzdGF0IHNidWY7CisgICAgIC8qIExpbnV4IHdpbGwgZGVyZWZlcmVuY2UgdGhlIHN5bWxpbmsgYW5kIGZhaWwsIGFzIHJlcXVpcmVkIGJ5IFBPU0lYLgorCVRoYXQgaXMgYmV0dGVyIGluIHRoZSBzZW5zZSB0aGF0IGl0IG1lYW5zIHdlIHdpbGwgbm90CisJaGF2ZSB0byBjb21waWxlIGFuZCB1c2UgdGhlIGxzdGF0IHdyYXBwZXIuICAqLworICAgICByZXR1cm4gbHN0YXQgKCJjb25mdGVzdC5zeW0vIiwgJnNidWYpID09IDA7XSldLAorCQlbYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPXllc10sCisJCVthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9bm9dLAorCQlbYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPW5vXSkKK2Vsc2UKKyAgIyBJZiB0aGUgYGxuIC1zJyBjb21tYW5kIGZhaWxlZCwgdGhlbiB3ZSBwcm9iYWJseSBkb24ndCBldmVuCisgICMgaGF2ZSBhbiBsc3RhdCBmdW5jdGlvbi4KKyAgYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPW5vCitmaQorcm0gLWYgY29uZnRlc3Quc3ltIGNvbmZ0ZXN0LmZpbGUKK10pCisKK3Rlc3QgJGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluayA9IHllcyAmJgorICBBQ19ERUZJTkVfVU5RVU9URUQoW0xTVEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LXSwgWzFdLAorCQkgICAgIFtEZWZpbmUgdG8gMSBpZiBgbHN0YXQnIGRlcmVmZXJlbmNlcyBhIHN5bWxpbmsgc3BlY2lmaWVkCisJCSAgICAgIHdpdGggYSB0cmFpbGluZyBzbGFzaC5dKQorCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluayIgPSB4bm87IHRoZW4KKyAgQUNfTElCT0JKKFtsc3RhdF0pCitmaQorXSkKKworCisjIF9BQ19GVU5DX01BTExPQ19JRihJRi1XT1JLUywgSUYtTk9UKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSWYgYG1hbGxvYyAoMCknIHByb3Blcmx5IGhhbmRsZWQsIHJ1biBJRi1XT1JLUywgb3RoZXJ3aXNlLCBJRi1OT1QuCitBQ19ERUZVTihbX0FDX0ZVTkNfTUFMTE9DX0lGXSwKK1tBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pZG5sCitBQ19DSEVDS19IRUFERVJTKHN0ZGxpYi5oKQorQUNfQ0FDSEVfQ0hFQ0soW2ZvciBHTlUgbGliYyBjb21wYXRpYmxlIG1hbGxvY10sIGFjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbCwKK1tBQ19SVU5fSUZFTFNFKAorW0FDX0xBTkdfUFJPR1JBTSgKK1tbI2lmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgSEFWRV9TVERMSUJfSAorIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbHNlCitjaGFyICptYWxsb2MgKCk7CisjZW5kaWYKK11dLAorCQkgW3JldHVybiAhIG1hbGxvYyAoMCk7XSldLAorCSAgICAgICBbYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPXllc10sCisJICAgICAgIFthY19jdl9mdW5jX21hbGxvY18wX25vbm51bGw9bm9dLAorCSAgICAgICBbYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPW5vXSldKQorQVNfSUYoW3Rlc3QgJGFjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbCA9IHllc10sIFskMV0sIFskMl0pCitdKSMgX0FDX0ZVTkNfTUFMTE9DX0lGCisKKworIyBBQ19GVU5DX01BTExPQworIyAtLS0tLS0tLS0tLS0tLQorIyBSZXBvcnQgd2hldGhlciBgbWFsbG9jICgwKScgcHJvcGVybHkgaGFuZGxlZCwgYW5kIHJlcGxhY2UgbWFsbG9jIGlmCisjIG5lZWRlZC4KK0FOX0ZVTkNUSU9OKFttYWxsb2NdLCBbQUNfRlVOQ19NQUxMT0NdKQorQUNfREVGVU4oW0FDX0ZVTkNfTUFMTE9DXSwKK1tfQUNfRlVOQ19NQUxMT0NfSUYoCisgIFtBQ19ERUZJTkUoW0hBVkVfTUFMTE9DXSwgMSwKKwkgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3VyIHN5c3RlbSBoYXMgYSBHTlUgbGliYyBjb21wYXRpYmxlIGBtYWxsb2MnCisJICAgICAgZnVuY3Rpb24sIGFuZCB0byAwIG90aGVyd2lzZS5dKV0sCisgIFtBQ19ERUZJTkUoW0hBVkVfTUFMTE9DXSwgMCkKKyAgIEFDX0xJQk9CSihtYWxsb2MpCisgICBBQ19ERUZJTkUoW21hbGxvY10sIFtycGxfbWFsbG9jXSwKKyAgICAgIFtEZWZpbmUgdG8gcnBsX21hbGxvYyBpZiB0aGUgcmVwbGFjZW1lbnQgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQuXSldKQorXSkjIEFDX0ZVTkNfTUFMTE9DCisKKworIyBBQ19GVU5DX01CUlRPV0MKKyMgLS0tLS0tLS0tLS0tLS0tCitBTl9GVU5DVElPTihbbWJydG93Y10sIFtBQ19GVU5DX01CUlRPV0NdKQorQUNfREVGVU4oW0FDX0ZVTkNfTUJSVE9XQ10sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIG1icnRvd2MgYW5kIG1ic3RhdGVfdCBhcmUgcHJvcGVybHkgZGVjbGFyZWRdLAorICAgIGFjX2N2X2Z1bmNfbWJydG93YywKKyAgICBbQUNfTElOS19JRkVMU0UoCisgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKwkgICAgW1tAJTpAaW5jbHVkZSA8d2NoYXIuaD5dXSwKKwkgICAgW1t3Y2hhcl90IHdjOworCSAgICAgIGNoYXIgY29uc3Qgc1tdID0gIiI7CisJICAgICAgc2l6ZV90IG4gPSAxOworCSAgICAgIG1ic3RhdGVfdCBzdGF0ZTsKKwkgICAgICByZXR1cm4gISAoc2l6ZW9mIHN0YXRlICYmIChtYnJ0b3djKSAoJndjLCBzLCBuLCAmc3RhdGUpKTtdXSldLAorICAgICAgIGFjX2N2X2Z1bmNfbWJydG93Yz15ZXMsCisgICAgICAgYWNfY3ZfZnVuY19tYnJ0b3djPW5vKV0pCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWJydG93YyA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShbSEFWRV9NQlJUT1dDXSwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiBtYnJ0b3djIGFuZCBtYnN0YXRlX3QgYXJlIHByb3Blcmx5IGRlY2xhcmVkLl0pCisgIGZpCitdKQorCisKKyMgQUNfRlVOQ19NRU1DTVAKKyMgLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19GVU5DX01FTUNNUF0sCitbQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3b3JraW5nIG1lbWNtcF0sIGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmcsCitbQUNfUlVOX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtBQ19JTkNMVURFU19ERUZBVUxUXSwgW1sKKyAgLyogU29tZSB2ZXJzaW9ucyBvZiBtZW1jbXAgYXJlIG5vdCA4LWJpdCBjbGVhbi4gICovCisgIGNoYXIgYzAgPSAnXDEwMCcsIGMxID0gJ1wyMDAnLCBjMiA9ICdcMjAxJzsKKyAgaWYgKG1lbWNtcCgmYzAsICZjMiwgMSkgPj0gMCB8fCBtZW1jbXAoJmMxLCAmYzIsIDEpID49IDApCisgICAgcmV0dXJuIDE7CisKKyAgLyogVGhlIE5leHQgeDg2IE9wZW5TdGVwIGJ1ZyBzaG93cyB1cCBvbmx5IHdoZW4gY29tcGFyaW5nIDE2IGJ5dGVzCisgICAgIG9yIG1vcmUgYW5kIHdpdGggYXQgbGVhc3Qgb25lIGJ1ZmZlciBub3Qgc3RhcnRpbmcgb24gYSA0LWJ5dGUgYm91bmRhcnkuCisgICAgIFdpbGxpYW0gTGV3aXMgcHJvdmlkZWQgdGhpcyB0ZXN0IHByb2dyYW0uICAgKi8KKyAgeworICAgIGNoYXIgZm9vWzIxXTsKKyAgICBjaGFyIGJhclsyMV07CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKyAgICAgIHsKKwljaGFyICphID0gZm9vICsgaTsKKwljaGFyICpiID0gYmFyICsgaTsKKwlzdHJjcHkgKGEsICItLS0tLS0tLTAxMTExMTExIik7CisJc3RyY3B5IChiLCAiLS0tLS0tLS0xMDAwMDAwMCIpOworCWlmIChtZW1jbXAgKGEsIGIsIDE2KSA+PSAwKQorCSAgcmV0dXJuIDE7CisgICAgICB9CisgICAgcmV0dXJuIDA7CisgIH0KK11dKV0sCisJICAgICAgIFthY19jdl9mdW5jX21lbWNtcF93b3JraW5nPXllc10sCisJICAgICAgIFthY19jdl9mdW5jX21lbWNtcF93b3JraW5nPW5vXSwKKwkgICAgICAgW2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9bm9dKV0pCit0ZXN0ICRhY19jdl9mdW5jX21lbWNtcF93b3JraW5nID0gbm8gJiYgQUNfTElCT0JKKFttZW1jbXBdKQorXSkjIEFDX0ZVTkNfTUVNQ01QCisKKworIyBBQ19GVU5DX01LVElNRQorIyAtLS0tLS0tLS0tLS0tLQorQU5fRlVOQ1RJT04oW21rdGltZV0sIFtBQ19GVU5DX01LVElNRV0pCitBQ19ERUZVTihbQUNfRlVOQ19NS1RJTUVdLAorW0FDX1JFUVVJUkUoW0FDX0hFQURFUl9USU1FXSlkbmwKK0FDX0NIRUNLX0hFQURFUlNfT05DRShzeXMvdGltZS5oIHVuaXN0ZC5oKQorQUNfQ0hFQ0tfRlVOQ1NfT05DRShhbGFybSkKK0FDX0NBQ0hFX0NIRUNLKFtmb3Igd29ya2luZyBta3RpbWVdLCBhY19jdl9mdW5jX3dvcmtpbmdfbWt0aW1lLAorW0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKAorW1svKiBUZXN0IHByb2dyYW0gZnJvbSBQYXVsIEVnZ2VydCBhbmQgVG9ueSBMZW5laXMuICAqLworI2lmZGVmIFRJTUVfV0lUSF9TWVNfVElNRQorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBpbmNsdWRlIDx0aW1lLmg+CisjZWxzZQorIyBpZmRlZiBIQVZFX1NZU19USU1FX0gKKyMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGVsc2UKKyMgIGluY2x1ZGUgPHRpbWUuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9BTEFSTQorIyBkZWZpbmUgYWxhcm0oWCkgLyogZW1wdHkgKi8KKyNlbmRpZgorCisvKiBXb3JrIGFyb3VuZCByZWRlZmluaXRpb24gdG8gcnBsX3B1dGVudiBieSBvdGhlciBjb25maWcgdGVzdHMuICAqLworI3VuZGVmIHB1dGVudgorCitzdGF0aWMgdGltZV90IHRpbWVfdF9tYXg7CitzdGF0aWMgdGltZV90IHRpbWVfdF9taW47CisKKy8qIFZhbHVlcyB3ZSdsbCB1c2UgdG8gc2V0IHRoZSBUWiBlbnZpcm9ubWVudCB2YXJpYWJsZS4gICovCitzdGF0aWMgY2hhciAqdHpfc3RyaW5nc1tdID0geworICAoY2hhciAqKSAwLCAiVFo9R01UMCIsICJUWj1KU1QtOSIsCisgICJUWj1FU1QrM0VEVCsyLE0xMC4xLjAvMDA6MDA6MDAsTTIuMy4wLzAwOjAwOjAwIgorfTsKKyNkZWZpbmUgTl9TVFJJTkdTIChzaXplb2YgKHR6X3N0cmluZ3MpIC8gc2l6ZW9mICh0el9zdHJpbmdzWzBdKSkKKworLyogUmV0dXJuIDAgaWYgbWt0aW1lIGZhaWxzIHRvIGNvbnZlcnQgYSBkYXRlIGluIHRoZSBzcHJpbmctZm9yd2FyZCBnYXAuCisgICBCYXNlZCBvbiBhIHByb2JsZW0gcmVwb3J0IGZyb20gQW5kcmVhcyBKYWVnZXIuICAqLworc3RhdGljIGludAorc3ByaW5nX2ZvcndhcmRfZ2FwICgpCit7CisgIC8qIGdsaWJjICh1cCB0byBhYm91dCAxOTk4LTEwLTA3KSBmYWlsZWQgdGhpcyB0ZXN0LiAqLworICBzdHJ1Y3QgdG0gdG07CisKKyAgLyogVXNlIHRoZSBwb3J0YWJsZSBQT1NJWC4xIHNwZWNpZmljYXRpb24gIlRaPVBTVDhQRFQsTTQuMS4wLE0xMC41LjAiCisgICAgIGluc3RlYWQgb2YgIlRaPUFtZXJpY2EvVmFuY291dmVyIiBpbiBvcmRlciB0byBkZXRlY3QgdGhlIGJ1ZyBldmVuCisgICAgIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZSBPbHNvbiBleHRlbnNpb24sIG9yIGRvbid0IGhhdmUgdGhlCisgICAgIGZ1bGwgem9uZWluZm8gdGFibGVzIGluc3RhbGxlZC4gICovCisgIHB1dGVudiAoIlRaPVBTVDhQRFQsTTQuMS4wLE0xMC41LjAiKTsKKworICB0bS50bV95ZWFyID0gOTg7CisgIHRtLnRtX21vbiA9IDM7CisgIHRtLnRtX21kYXkgPSA1OworICB0bS50bV9ob3VyID0gMjsKKyAgdG0udG1fbWluID0gMDsKKyAgdG0udG1fc2VjID0gMDsKKyAgdG0udG1faXNkc3QgPSAtMTsKKyAgcmV0dXJuIG1rdGltZSAoJnRtKSAhPSAodGltZV90KSAtMTsKK30KKworc3RhdGljIGludAorbWt0aW1lX3Rlc3QxIChub3cpCisgICAgIHRpbWVfdCBub3c7Cit7CisgIHN0cnVjdCB0bSAqbHQ7CisgIHJldHVybiAhIChsdCA9IGxvY2FsdGltZSAoJm5vdykpIHx8IG1rdGltZSAobHQpID09IG5vdzsKK30KKworc3RhdGljIGludAorbWt0aW1lX3Rlc3QgKG5vdykKKyAgICAgdGltZV90IG5vdzsKK3sKKyAgcmV0dXJuIChta3RpbWVfdGVzdDEgKG5vdykKKwkgICYmIG1rdGltZV90ZXN0MSAoKHRpbWVfdCkgKHRpbWVfdF9tYXggLSBub3cpKQorCSAgJiYgbWt0aW1lX3Rlc3QxICgodGltZV90KSAodGltZV90X21pbiArIG5vdykpKTsKK30KKworc3RhdGljIGludAoraXJpeF82XzRfYnVnICgpCit7CisgIC8qIEJhc2VkIG9uIGNvZGUgZnJvbSBBcmllbCBGYWlnb24uICAqLworICBzdHJ1Y3QgdG0gdG07CisgIHRtLnRtX3llYXIgPSA5NjsKKyAgdG0udG1fbW9uID0gMzsKKyAgdG0udG1fbWRheSA9IDA7CisgIHRtLnRtX2hvdXIgPSAwOworICB0bS50bV9taW4gPSAwOworICB0bS50bV9zZWMgPSAwOworICB0bS50bV9pc2RzdCA9IC0xOworICBta3RpbWUgKCZ0bSk7CisgIHJldHVybiB0bS50bV9tb24gPT0gMiAmJiB0bS50bV9tZGF5ID09IDMxOworfQorCitzdGF0aWMgaW50CitiaWd0aW1lX3Rlc3QgKGopCisgICAgIGludCBqOworeworICBzdHJ1Y3QgdG0gdG07CisgIHRpbWVfdCBub3c7CisgIHRtLnRtX3llYXIgPSB0bS50bV9tb24gPSB0bS50bV9tZGF5ID0gdG0udG1faG91ciA9IHRtLnRtX21pbiA9IHRtLnRtX3NlYyA9IGo7CisgIG5vdyA9IG1rdGltZSAoJnRtKTsKKyAgaWYgKG5vdyAhPSAodGltZV90KSAtMSkKKyAgICB7CisgICAgICBzdHJ1Y3QgdG0gKmx0ID0gbG9jYWx0aW1lICgmbm93KTsKKyAgICAgIGlmICghIChsdAorCSAgICAgJiYgbHQtPnRtX3llYXIgPT0gdG0udG1feWVhcgorCSAgICAgJiYgbHQtPnRtX21vbiA9PSB0bS50bV9tb24KKwkgICAgICYmIGx0LT50bV9tZGF5ID09IHRtLnRtX21kYXkKKwkgICAgICYmIGx0LT50bV9ob3VyID09IHRtLnRtX2hvdXIKKwkgICAgICYmIGx0LT50bV9taW4gPT0gdG0udG1fbWluCisJICAgICAmJiBsdC0+dG1fc2VjID09IHRtLnRtX3NlYworCSAgICAgJiYgbHQtPnRtX3lkYXkgPT0gdG0udG1feWRheQorCSAgICAgJiYgbHQtPnRtX3dkYXkgPT0gdG0udG1fd2RheQorCSAgICAgJiYgKChsdC0+dG1faXNkc3QgPCAwID8gLTEgOiAwIDwgbHQtPnRtX2lzZHN0KQorCQkgID09ICh0bS50bV9pc2RzdCA8IDAgPyAtMSA6IDAgPCB0bS50bV9pc2RzdCkpKSkKKwlyZXR1cm4gMDsKKyAgICB9CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit5ZWFyXzIwNTBfdGVzdCAoKQoreworICAvKiBUaGUgY29ycmVjdCBhbnN3ZXIgZm9yIDIwNTAtMDItMDEgMDA6MDA6MDAgaW4gUGFjaWZpYyB0aW1lLAorICAgICBpZ25vcmluZyBsZWFwIHNlY29uZHMuICAqLworICB1bnNpZ25lZCBsb25nIGludCBhbnN3ZXIgPSAyNTI3MzE1MjAwVUw7CisKKyAgc3RydWN0IHRtIHRtOworICB0aW1lX3QgdDsKKyAgdG0udG1feWVhciA9IDIwNTAgLSAxOTAwOworICB0bS50bV9tb24gPSAyIC0gMTsKKyAgdG0udG1fbWRheSA9IDE7CisgIHRtLnRtX2hvdXIgPSB0bS50bV9taW4gPSB0bS50bV9zZWMgPSAwOworICB0bS50bV9pc2RzdCA9IC0xOworCisgIC8qIFVzZSB0aGUgcG9ydGFibGUgUE9TSVguMSBzcGVjaWZpY2F0aW9uICJUWj1QU1Q4UERULE00LjEuMCxNMTAuNS4wIgorICAgICBpbnN0ZWFkIG9mICJUWj1BbWVyaWNhL1ZhbmNvdXZlciIgaW4gb3JkZXIgdG8gZGV0ZWN0IHRoZSBidWcgZXZlbgorICAgICBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGUgT2xzb24gZXh0ZW5zaW9uLCBvciBkb24ndCBoYXZlIHRoZQorICAgICBmdWxsIHpvbmVpbmZvIHRhYmxlcyBpbnN0YWxsZWQuICAqLworICBwdXRlbnYgKCJUWj1QU1Q4UERULE00LjEuMCxNMTAuNS4wIik7CisKKyAgdCA9IG1rdGltZSAoJnRtKTsKKworICAvKiBDaGVjayB0aGF0IHRoZSByZXN1bHQgaXMgZWl0aGVyIGEgZmFpbHVyZSwgb3IgY2xvc2UgZW5vdWdoCisgICAgIHRvIHRoZSBjb3JyZWN0IGFuc3dlciB0aGF0IHdlIGNhbiBhc3N1bWUgdGhlIGRpc2NyZXBhbmN5IGlzCisgICAgIGR1ZSB0byBsZWFwIHNlY29uZHMuICAqLworICByZXR1cm4gKHQgPT0gKHRpbWVfdCkgLTEKKwkgIHx8ICgwIDwgdCAmJiBhbnN3ZXIgLSAxMjAgPD0gdCAmJiB0IDw9IGFuc3dlciArIDEyMCkpOworfQorCitpbnQKK21haW4gKCkKK3sKKyAgdGltZV90IHQsIGRlbHRhOworICBpbnQgaSwgajsKKworICAvKiBUaGlzIHRlc3QgbWFrZXMgc29tZSBidWdneSBta3RpbWUgaW1wbGVtZW50YXRpb25zIGxvb3AuCisgICAgIEdpdmUgdXAgYWZ0ZXIgNjAgc2Vjb25kczsgYSBta3RpbWUgc2xvd2VyIHRoYW4gdGhhdAorICAgICBpc24ndCB3b3J0aCB1c2luZyBhbnl3YXkuICAqLworICBhbGFybSAoNjApOworCisgIGZvciAoOzspCisgICAgeworICAgICAgdCA9ICh0aW1lX3RfbWF4IDw8IDEpICsgMTsKKyAgICAgIGlmICh0IDw9IHRpbWVfdF9tYXgpCisJYnJlYWs7CisgICAgICB0aW1lX3RfbWF4ID0gdDsKKyAgICB9CisgIHRpbWVfdF9taW4gPSAtICgodGltZV90KSB+ICh0aW1lX3QpIDAgPT0gKHRpbWVfdCkgLTEpIC0gdGltZV90X21heDsKKworICBkZWx0YSA9IHRpbWVfdF9tYXggLyA5OTc7IC8qIGEgc3VpdGFibGUgcHJpbWUgbnVtYmVyICovCisgIGZvciAoaSA9IDA7IGkgPCBOX1NUUklOR1M7IGkrKykKKyAgICB7CisgICAgICBpZiAodHpfc3RyaW5nc1tpXSkKKwlwdXRlbnYgKHR6X3N0cmluZ3NbaV0pOworCisgICAgICBmb3IgKHQgPSAwOyB0IDw9IHRpbWVfdF9tYXggLSBkZWx0YTsgdCArPSBkZWx0YSkKKwlpZiAoISBta3RpbWVfdGVzdCAodCkpCisJICByZXR1cm4gMTsKKyAgICAgIGlmICghIChta3RpbWVfdGVzdCAoKHRpbWVfdCkgMSkKKwkgICAgICYmIG1rdGltZV90ZXN0ICgodGltZV90KSAoNjAgKiA2MCkpCisJICAgICAmJiBta3RpbWVfdGVzdCAoKHRpbWVfdCkgKDYwICogNjAgKiAyNCkpKSkKKwlyZXR1cm4gMTsKKworICAgICAgZm9yIChqID0gMTsgOyBqIDw8PSAxKQorCWlmICghIGJpZ3RpbWVfdGVzdCAoaikpCisJICByZXR1cm4gMTsKKwllbHNlIGlmIChJTlRfTUFYIC8gMiA8IGopCisJICBicmVhazsKKyAgICAgIGlmICghIGJpZ3RpbWVfdGVzdCAoSU5UX01BWCkpCisJcmV0dXJuIDE7CisgICAgfQorICByZXR1cm4gISAoaXJpeF82XzRfYnVnICgpICYmIHNwcmluZ19mb3J3YXJkX2dhcCAoKSAmJiB5ZWFyXzIwNTBfdGVzdCAoKSk7Cit9XV0pXSwKKwkgICAgICAgW2FjX2N2X2Z1bmNfd29ya2luZ19ta3RpbWU9eWVzXSwKKwkgICAgICAgW2FjX2N2X2Z1bmNfd29ya2luZ19ta3RpbWU9bm9dLAorCSAgICAgICBbYWNfY3ZfZnVuY193b3JraW5nX21rdGltZT1ub10pXSkKK2lmIHRlc3QgJGFjX2N2X2Z1bmNfd29ya2luZ19ta3RpbWUgPSBubzsgdGhlbgorICBBQ19MSUJPQkooW21rdGltZV0pCitmaQorXSkjIEFDX0ZVTkNfTUtUSU1FCisKKworIyBBVTo6QU1fRlVOQ19NS1RJTUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCitBVV9BTElBUyhbQU1fRlVOQ19NS1RJTUVdLCBbQUNfRlVOQ19NS1RJTUVdKQorCisKKyMgQUNfRlVOQ19NTUFQCisjIC0tLS0tLS0tLS0tLQorQU5fRlVOQ1RJT04oW21tYXBdLCBbQUNfRlVOQ19NTUFQXSkKK0FDX0RFRlVOKFtBQ19GVU5DX01NQVBdLAorW0FDX0NIRUNLX0hFQURFUlNfT05DRShbc3RkbGliLmggdW5pc3RkLmggc3lzL3BhcmFtLmhdKQorQUNfQ0hFQ0tfRlVOQ1MoW2dldHBhZ2VzaXplXSkKK0FDX0NBQ0hFX0NIRUNLKFtmb3Igd29ya2luZyBtbWFwXSwgW2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWRdLAorW0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtBQ19JTkNMVURFU19ERUZBVUxUXQorW1svKiBtYWxsb2MgbWlnaHQgaGF2ZSBiZWVuIHJlbmFtZWQgYXMgcnBsX21hbGxvYy4gKi8KKyN1bmRlZiBtYWxsb2MKKworLyogVGhhbmtzIHRvIE1pa2UgSGFlcnRlbCBhbmQgSmltIEF2ZXJhIGZvciB0aGlzIHRlc3QuCisgICBIZXJlIGlzIGEgbWF0cml4IG9mIG1tYXAgcG9zc2liaWxpdGllczoKKwltbWFwIHByaXZhdGUgbm90IGZpeGVkCisJbW1hcCBwcml2YXRlIGZpeGVkIGF0IHNvbWV3aGVyZSBjdXJyZW50bHkgdW5tYXBwZWQKKwltbWFwIHByaXZhdGUgZml4ZWQgYXQgc29tZXdoZXJlIGFscmVhZHkgbWFwcGVkCisJbW1hcCBzaGFyZWQgbm90IGZpeGVkCisJbW1hcCBzaGFyZWQgZml4ZWQgYXQgc29tZXdoZXJlIGN1cnJlbnRseSB1bm1hcHBlZAorCW1tYXAgc2hhcmVkIGZpeGVkIGF0IHNvbWV3aGVyZSBhbHJlYWR5IG1hcHBlZAorICAgRm9yIHByaXZhdGUgbWFwcGluZ3MsIHdlIHNob3VsZCB2ZXJpZnkgdGhhdCBjaGFuZ2VzIGNhbm5vdCBiZSByZWFkKCkKKyAgIGJhY2sgZnJvbSB0aGUgZmlsZSwgbm9yIG1tYXAncyBiYWNrIGZyb20gdGhlIGZpbGUgYXQgYSBkaWZmZXJlbnQKKyAgIGFkZHJlc3MuICAoVGhlcmUgaGF2ZSBiZWVuIHN5c3RlbXMgd2hlcmUgcHJpdmF0ZSB3YXMgbm90IGNvcnJlY3RseQorICAgaW1wbGVtZW50ZWQgbGlrZSB0aGUgaW5mYW1vdXMgaTM4NiBzdnI0LjAsIGFuZCBzeXN0ZW1zIHdoZXJlIHRoZQorICAgVk0gcGFnZSBjYWNoZSB3YXMgbm90IGNvaGVyZW50IHdpdGggdGhlIGZpbGUgc3lzdGVtIGJ1ZmZlciBjYWNoZQorICAgbGlrZSBlYXJseSB2ZXJzaW9ucyBvZiBGcmVlQlNEIGFuZCBwb3NzaWJseSBjb250ZW1wb3JhcnkgTmV0QlNELikKKyAgIEZvciBzaGFyZWQgbWFwcGluZ3MsIHdlIHNob3VsZCBjb252ZXJzZWx5IHZlcmlmeSB0aGF0IGNoYW5nZXMgZ2V0CisgICBwcm9wYWdhdGVkIGJhY2sgdG8gYWxsIHRoZSBwbGFjZXMgdGhleSdyZSBzdXBwb3NlZCB0byBiZS4KKworICAgR3JlcCB3YW50cyBwcml2YXRlIGZpeGVkIGFscmVhZHkgbWFwcGVkLgorICAgVGhlIG1haW4gdGhpbmdzIGdyZXAgbmVlZHMgdG8ga25vdyBhYm91dCBtbWFwIGFyZToKKyAgICogZG9lcyBpdCBleGlzdCBhbmQgaXMgaXQgc2FmZSB0byB3cml0ZSBpbnRvIHRoZSBtbWFwJ2QgYXJlYQorICAgKiBob3cgdG8gdXNlIGl0IChCU0QgdmFyaWFudHMpICAqLworCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorCisjaWYgIWRlZmluZWQgU1REQ19IRUFERVJTICYmICFkZWZpbmVkIEhBVkVfU1RETElCX0gKK2NoYXIgKm1hbGxvYyAoKTsKKyNlbmRpZgorCisvKiBUaGlzIG1lc3Mgd2FzIGNvcGllZCBmcm9tIHRoZSBHTlUgZ2V0cGFnZXNpemUuaC4gICovCisjaWZuZGVmIEhBVkVfR0VUUEFHRVNJWkUKKyMgaWZkZWYgX1NDX1BBR0VTSVpFCisjICBkZWZpbmUgZ2V0cGFnZXNpemUoKSBzeXNjb25mKF9TQ19QQUdFU0laRSkKKyMgZWxzZSAvKiBubyBfU0NfUEFHRVNJWkUgKi8KKyMgIGlmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyMgICBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyMgICBpZmRlZiBFWEVDX1BBR0VTSVpFCisjICAgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIEVYRUNfUEFHRVNJWkUKKyMgICBlbHNlIC8qIG5vIEVYRUNfUEFHRVNJWkUgKi8KKyMgICAgaWZkZWYgTkJQRworIyAgICAgZGVmaW5lIGdldHBhZ2VzaXplKCkgTkJQRyAqIENMU0laRQorIyAgICAgaWZuZGVmIENMU0laRQorIyAgICAgIGRlZmluZSBDTFNJWkUgMQorIyAgICAgZW5kaWYgLyogbm8gQ0xTSVpFICovCisjICAgIGVsc2UgLyogbm8gTkJQRyAqLworIyAgICAgaWZkZWYgTkJQQworIyAgICAgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIE5CUEMKKyMgICAgIGVsc2UgLyogbm8gTkJQQyAqLworIyAgICAgIGlmZGVmIFBBR0VTSVpFCisjICAgICAgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIFBBR0VTSVpFCisjICAgICAgZW5kaWYgLyogUEFHRVNJWkUgKi8KKyMgICAgIGVuZGlmIC8qIG5vIE5CUEMgKi8KKyMgICAgZW5kaWYgLyogbm8gTkJQRyAqLworIyAgIGVuZGlmIC8qIG5vIEVYRUNfUEFHRVNJWkUgKi8KKyMgIGVsc2UgLyogbm8gSEFWRV9TWVNfUEFSQU1fSCAqLworIyAgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIDgxOTIJLyogcHVudCB0b3RhbGx5ICovCisjICBlbmRpZiAvKiBubyBIQVZFX1NZU19QQVJBTV9IICovCisjIGVuZGlmIC8qIG5vIF9TQ19QQUdFU0laRSAqLworCisjZW5kaWYgLyogbm8gSEFWRV9HRVRQQUdFU0laRSAqLworCitpbnQKK21haW4gKCkKK3sKKyAgY2hhciAqZGF0YSwgKmRhdGEyLCAqZGF0YTM7CisgIGludCBpLCBwYWdlc2l6ZTsKKyAgaW50IGZkLCBmZDI7CisKKyAgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSAoKTsKKworICAvKiBGaXJzdCwgbWFrZSBhIGZpbGUgd2l0aCBzb21lIGtub3duIGdhcmJhZ2UgaW4gaXQuICovCisgIGRhdGEgPSAoY2hhciAqKSBtYWxsb2MgKHBhZ2VzaXplKTsKKyAgaWYgKCFkYXRhKQorICAgIHJldHVybiAxOworICBmb3IgKGkgPSAwOyBpIDwgcGFnZXNpemU7ICsraSkKKyAgICAqKGRhdGEgKyBpKSA9IHJhbmQgKCk7CisgIHVtYXNrICgwKTsKKyAgZmQgPSBjcmVhdCAoImNvbmZ0ZXN0Lm1tYXAiLCAwNjAwKTsKKyAgaWYgKGZkIDwgMCkKKyAgICByZXR1cm4gMjsKKyAgaWYgKHdyaXRlIChmZCwgZGF0YSwgcGFnZXNpemUpICE9IHBhZ2VzaXplKQorICAgIHJldHVybiAzOworICBjbG9zZSAoZmQpOworCisgIC8qIE5leHQsIGNoZWNrIHRoYXQgdGhlIHRhaWwgb2YgYSBwYWdlIGlzIHplcm8tZmlsbGVkLiAgRmlsZSBtdXN0IGhhdmUKKyAgICAgbm9uLXplcm8gbGVuZ3RoLCBvdGhlcndpc2Ugd2UgcmlzayBTSUdCVVMgZm9yIGVudGlyZSBwYWdlLiAgKi8KKyAgZmQyID0gb3BlbiAoImNvbmZ0ZXN0LnR4dCIsIE9fUkRXUiB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAwNjAwKTsKKyAgaWYgKGZkMiA8IDApCisgICAgcmV0dXJuIDQ7CisgIGRhdGEyID0gIiI7CisgIGlmICh3cml0ZSAoZmQyLCBkYXRhMiwgMSkgIT0gMSkKKyAgICByZXR1cm4gNTsKKyAgZGF0YTIgPSBtbWFwICgwLCBwYWdlc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQyLCAwTCk7CisgIGlmIChkYXRhMiA9PSBNQVBfRkFJTEVEKQorICAgIHJldHVybiA2OworICBmb3IgKGkgPSAwOyBpIDwgcGFnZXNpemU7ICsraSkKKyAgICBpZiAoKihkYXRhMiArIGkpKQorICAgICAgcmV0dXJuIDc7CisgIGNsb3NlIChmZDIpOworICBpZiAobXVubWFwIChkYXRhMiwgcGFnZXNpemUpKQorICAgIHJldHVybiA4OworCisgIC8qIE5leHQsIHRyeSB0byBtbWFwIHRoZSBmaWxlIGF0IGEgZml4ZWQgYWRkcmVzcyB3aGljaCBhbHJlYWR5IGhhcworICAgICBzb21ldGhpbmcgZWxzZSBhbGxvY2F0ZWQgYXQgaXQuICBJZiB3ZSBjYW4sIGFsc28gbWFrZSBzdXJlIHRoYXQKKyAgICAgd2Ugc2VlIHRoZSBzYW1lIGdhcmJhZ2UuICAqLworICBmZCA9IG9wZW4gKCJjb25mdGVzdC5tbWFwIiwgT19SRFdSKTsKKyAgaWYgKGZkIDwgMCkKKyAgICByZXR1cm4gOTsKKyAgaWYgKGRhdGEyICE9IG1tYXAgKGRhdGEyLCBwYWdlc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKKwkJICAgICBNQVBfUFJJVkFURSB8IE1BUF9GSVhFRCwgZmQsIDBMKSkKKyAgICByZXR1cm4gMTA7CisgIGZvciAoaSA9IDA7IGkgPCBwYWdlc2l6ZTsgKytpKQorICAgIGlmICgqKGRhdGEgKyBpKSAhPSAqKGRhdGEyICsgaSkpCisgICAgICByZXR1cm4gMTE7CisKKyAgLyogRmluYWxseSwgbWFrZSBzdXJlIHRoYXQgY2hhbmdlcyB0byB0aGUgbWFwcGVkIGFyZWEgZG8gbm90CisgICAgIHBlcmNvbGF0ZSBiYWNrIHRvIHRoZSBmaWxlIGFzIHNlZW4gYnkgcmVhZCgpLiAgKFRoaXMgaXMgYSBidWcgb24KKyAgICAgc29tZSB2YXJpYW50cyBvZiBpMzg2IHN2cjQuMC4pICAqLworICBmb3IgKGkgPSAwOyBpIDwgcGFnZXNpemU7ICsraSkKKyAgICAqKGRhdGEyICsgaSkgPSAqKGRhdGEyICsgaSkgKyAxOworICBkYXRhMyA9IChjaGFyICopIG1hbGxvYyAocGFnZXNpemUpOworICBpZiAoIWRhdGEzKQorICAgIHJldHVybiAxMjsKKyAgaWYgKHJlYWQgKGZkLCBkYXRhMywgcGFnZXNpemUpICE9IHBhZ2VzaXplKQorICAgIHJldHVybiAxMzsKKyAgZm9yIChpID0gMDsgaSA8IHBhZ2VzaXplOyArK2kpCisgICAgaWYgKCooZGF0YSArIGkpICE9ICooZGF0YTMgKyBpKSkKKyAgICAgIHJldHVybiAxNDsKKyAgY2xvc2UgKGZkKTsKKyAgcmV0dXJuIDA7Cit9XV0pXSwKKwkgICAgICAgW2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9eWVzXSwKKwkgICAgICAgW2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9bm9dLAorCSAgICAgICBbYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD1ub10pXSkKK2lmIHRlc3QgJGFjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQgPSB5ZXM7IHRoZW4KKyAgQUNfREVGSU5FKFtIQVZFX01NQVBdLCBbMV0sCisJICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgYG1tYXAnIHN5c3RlbSBjYWxsLl0pCitmaQorcm0gLWYgY29uZnRlc3QubW1hcCBjb25mdGVzdC50eHQKK10pIyBBQ19GVU5DX01NQVAKKworCisjIEFVOjpBQ19NTUFQCisjIC0tLS0tLS0tLS0tCitBVV9BTElBUyhbQUNfTU1BUF0sIFtBQ19GVU5DX01NQVBdKQorCisKKyMgQUNfRlVOQ19PQlNUQUNLCisjIC0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgb2JzdGFjayBzdXBwb3J0LiAgWWVhaCwgdGhpcyBpcyBub3QgZXhhY3RseSBhIGBGVU5DJyBjaGVjay4KK0FOX0ZVTkNUSU9OKFtvYnN0YWNrX2luaXRdLCBbQUNfRlVOQ19PQlNUQUNLXSkKK0FOX0lERU5USUZJRVIoW29ic3RhY2tdLCAgICBbQUNfRlVOQ19PQlNUQUNLXSkKK0FDX0RFRlVOKFtBQ19GVU5DX09CU1RBQ0tdLAorW0FDX0xJQlNPVVJDRVMoW29ic3RhY2suaCwgb2JzdGFjay5jXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFtmb3Igb2JzdGFja3NdLCBhY19jdl9mdW5jX29ic3RhY2ssCitbQUNfTElOS19JRkVMU0UoCisgICAgW0FDX0xBTkdfUFJPR1JBTShbQUNfSU5DTFVERVNfREVGQVVMVAorCQkgICAgICBbQCU6QGluY2x1ZGUgIm9ic3RhY2suaCJdXSwKKwkJICAgICBbW3N0cnVjdCBvYnN0YWNrIG1lbTsKKwkJICAgICAgIEAlOkBkZWZpbmUgb2JzdGFja19jaHVua19hbGxvYyBtYWxsb2MKKwkJICAgICAgIEAlOkBkZWZpbmUgb2JzdGFja19jaHVua19mcmVlIGZyZWUKKwkJICAgICAgIG9ic3RhY2tfaW5pdCAoJm1lbSk7CisJCSAgICAgICBvYnN0YWNrX2ZyZWUgKCZtZW0sIDApO11dKV0sCisJCVthY19jdl9mdW5jX29ic3RhY2s9eWVzXSwKKwkJW2FjX2N2X2Z1bmNfb2JzdGFjaz1ub10pXSkKK2lmIHRlc3QgJGFjX2N2X2Z1bmNfb2JzdGFjayA9IHllczsgdGhlbgorICBBQ19ERUZJTkUoSEFWRV9PQlNUQUNLLCAxLCBbRGVmaW5lIHRvIDEgaWYgbGliYyBpbmNsdWRlcyBvYnN0YWNrcy5dKQorZWxzZQorICBBQ19MSUJPQkoob2JzdGFjaykKK2ZpCitdKSMgQUNfRlVOQ19PQlNUQUNLCisKKworIyBBVTo6QU1fRlVOQ19PQlNUQUNLCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KK0FVX0FMSUFTKFtBTV9GVU5DX09CU1RBQ0tdLCBbQUNfRlVOQ19PQlNUQUNLXSkKKworCisKKyMgX0FDX0ZVTkNfUkVBTExPQ19JRihJRi1XT1JLUywgSUYtTk9UKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmIGByZWFsbG9jICgwLCAwKScgaXMgcHJvcGVybHkgaGFuZGxlZCwgcnVuIElGLVdPUktTLCBvdGhlcndpc2UsIElGLU5PVC4KK0FDX0RFRlVOKFtfQUNfRlVOQ19SRUFMTE9DX0lGXSwKK1tBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pZG5sCitBQ19DSEVDS19IRUFERVJTKHN0ZGxpYi5oKQorQUNfQ0FDSEVfQ0hFQ0soW2ZvciBHTlUgbGliYyBjb21wYXRpYmxlIHJlYWxsb2NdLCBhY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsLAorW0FDX1JVTl9JRkVMU0UoCitbQUNfTEFOR19QUk9HUkFNKAorW1sjaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBIQVZFX1NURExJQl9ICisjIGluY2x1ZGUgPHN0ZGxpYi5oPgorI2Vsc2UKK2NoYXIgKnJlYWxsb2MgKCk7CisjZW5kaWYKK11dLAorCQkgW3JldHVybiAhIHJlYWxsb2MgKDAsIDApO10pXSwKKwkgICAgICAgW2FjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGw9eWVzXSwKKwkgICAgICAgW2FjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGw9bm9dLAorCSAgICAgICBbYWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbD1ub10pXSkKK0FTX0lGKFt0ZXN0ICRhY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsID0geWVzXSwgWyQxXSwgWyQyXSkKK10pIyBBQ19GVU5DX1JFQUxMT0MKKworCisjIEFDX0ZVTkNfUkVBTExPQworIyAtLS0tLS0tLS0tLS0tLS0KKyMgUmVwb3J0IHdoZXRoZXIgYHJlYWxsb2MgKDAsIDApJyBpcyBwcm9wZXJseSBoYW5kbGVkLCBhbmQgcmVwbGFjZSByZWFsbG9jIGlmCisjIG5lZWRlZC4KK0FOX0ZVTkNUSU9OKFtyZWFsbG9jXSwgW0FDX0ZVTkNfUkVBTExPQ10pCitBQ19ERUZVTihbQUNfRlVOQ19SRUFMTE9DXSwKK1tfQUNfRlVOQ19SRUFMTE9DX0lGKAorICBbQUNfREVGSU5FKFtIQVZFX1JFQUxMT0NdLCAxLAorCSAgICAgW0RlZmluZSB0byAxIGlmIHlvdXIgc3lzdGVtIGhhcyBhIEdOVSBsaWJjIGNvbXBhdGlibGUgYHJlYWxsb2MnCisJICAgICAgZnVuY3Rpb24sIGFuZCB0byAwIG90aGVyd2lzZS5dKV0sCisgIFtBQ19ERUZJTkUoW0hBVkVfUkVBTExPQ10sIDApCisgICBBQ19MSUJPQkooW3JlYWxsb2NdKQorICAgQUNfREVGSU5FKFtyZWFsbG9jXSwgW3JwbF9yZWFsbG9jXSwKKyAgICAgIFtEZWZpbmUgdG8gcnBsX3JlYWxsb2MgaWYgdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkLl0pXSkKK10pIyBBQ19GVU5DX1JFQUxMT0MKKworCisjIEFDX0ZVTkNfU0VMRUNUX0FSR1RZUEVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERldGVybWluZSB0aGUgY29ycmVjdCB0eXBlIHRvIGJlIHBhc3NlZCB0byBlYWNoIG9mIHRoZSBgc2VsZWN0JworIyBmdW5jdGlvbidzIGFyZ3VtZW50cywgYW5kIGRlZmluZSB0aG9zZSB0eXBlcyBpbiBgU0VMRUNUX1RZUEVfQVJHMScsCisjIGBTRUxFQ1RfVFlQRV9BUkcyMzQnLCBhbmQgYFNFTEVDVF9UWVBFX0FSRzUnLgorQUNfREVGVU4oW0FDX0ZVTkNfU0VMRUNUX0FSR1RZUEVTXSwKK1tBQ19DSEVDS19IRUFERVJTKHN5cy9zZWxlY3QuaCBzeXMvc29ja2V0LmgpCitBQ19DQUNIRV9DSEVDSyhbdHlwZXMgb2YgYXJndW1lbnRzIGZvciBzZWxlY3RdLAorW2FjX2N2X2Z1bmNfc2VsZWN0X2FyZ3NdLAorW2ZvciBhY19hcmcyMzQgaW4gJ2ZkX3NldCAqJyAnaW50IConICd2b2lkIConOyBkbworIGZvciBhY19hcmcxIGluICdpbnQnICdzaXplX3QnICd1bnNpZ25lZCBsb25nIGludCcgJ3Vuc2lnbmVkIGludCc7IGRvCisgIGZvciBhY19hcmc1IGluICdzdHJ1Y3QgdGltZXZhbCAqJyAnY29uc3Qgc3RydWN0IHRpbWV2YWwgKic7IGRvCisgICBBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorW0FDX0lOQ0xVREVTX0RFRkFVTFQKKyNpZmRlZiBIQVZFX1NZU19TRUxFQ1RfSAorIyBpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorIyBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKK10sCisJCQlbZXh0ZXJuIGludCBzZWxlY3QgKCRhY19hcmcxLAorCQkJCQkgICAgJGFjX2FyZzIzNCwgJGFjX2FyZzIzNCwgJGFjX2FyZzIzNCwKKwkJCQkJICAgICRhY19hcmc1KTtdKV0sCisJICAgICAgW2FjX2N2X2Z1bmNfc2VsZWN0X2FyZ3M9IiRhY19hcmcxLCRhY19hcmcyMzQsJGFjX2FyZzUiOyBicmVhayAzXSkKKyAgZG9uZQorIGRvbmUKK2RvbmUKKyMgUHJvdmlkZSBhIHNhZmUgZGVmYXVsdCB2YWx1ZS4KKzogJHthY19jdl9mdW5jX3NlbGVjdF9hcmdzPSdpbnQsaW50ICosc3RydWN0IHRpbWV2YWwgKid9CitdKQorYWNfc2F2ZV9JRlM9JElGUzsgSUZTPScsJworc2V0IGR1bW15IGBlY2hvICIkYWNfY3ZfZnVuY19zZWxlY3RfYXJncyIgfCBzZWQgJ3MvXCovXCovZydgCitJRlM9JGFjX3NhdmVfSUZTCitzaGlmdAorQUNfREVGSU5FX1VOUVVPVEVEKFNFTEVDVF9UWVBFX0FSRzEsICRbMV0sCisJCSAgIFtEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIGBzZWxlY3QnLl0pCitBQ19ERUZJTkVfVU5RVU9URUQoU0VMRUNUX1RZUEVfQVJHMjM0LCAoJFsyXSksCisJCSAgIFtEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJncyAyLCAzIGFuZCA0IGZvciBgc2VsZWN0Jy5dKQorQUNfREVGSU5FX1VOUVVPVEVEKFNFTEVDVF9UWVBFX0FSRzUsICgkWzNdKSwKKwkJICAgW0RlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNSBmb3IgYHNlbGVjdCcuXSkKK3JtIC1mIGNvbmZ0ZXN0KgorXSkjIEFDX0ZVTkNfU0VMRUNUX0FSR1RZUEVTCisKKworIyBBQ19GVU5DX1NFVFBHUlAKKyMgLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfRlVOQ19TRVRQR1JQXSwKK1tBQ19DQUNIRV9DSEVDSyh3aGV0aGVyIHNldHBncnAgdGFrZXMgbm8gYXJndW1lbnQsIGFjX2N2X2Z1bmNfc2V0cGdycF92b2lkLAorW0FDX1JVTl9JRkVMU0UoCitbQUNfTEFOR19QUk9HUkFNKFtBQ19JTkNMVURFU19ERUZBVUxUXSwKK1svKiBJZiB0aGlzIHN5c3RlbSBoYXMgYSBCU0Qtc3R5bGUgc2V0cGdycCB3aGljaCB0YWtlcyBhcmd1bWVudHMsCisgIHNldHBncnAoMSwgMSkgd2lsbCBmYWlsIHdpdGggRVNSQ0ggYW5kIHJldHVybiAtMSwgaW4gdGhhdCBjYXNlCisgIGV4aXQgc3VjY2Vzc2Z1bGx5LiAqLworICByZXR1cm4gc2V0cGdycCAoMSwxKSAhPSAtMTtdKV0sCisJICAgICAgIFthY19jdl9mdW5jX3NldHBncnBfdm9pZD1ub10sCisJICAgICAgIFthY19jdl9mdW5jX3NldHBncnBfdm9pZD15ZXNdLAorCSAgICAgICBbQUNfTVNHX0VSUk9SKFtjYW5ub3QgY2hlY2sgc2V0cGdycCB3aGVuIGNyb3NzIGNvbXBpbGluZ10pXSldKQoraWYgdGVzdCAkYWNfY3ZfZnVuY19zZXRwZ3JwX3ZvaWQgPSB5ZXM7IHRoZW4KKyAgQUNfREVGSU5FKFNFVFBHUlBfVk9JRCwgMSwKKwkgICAgW0RlZmluZSB0byAxIGlmIHRoZSBgc2V0cGdycCcgZnVuY3Rpb24gdGFrZXMgbm8gYXJndW1lbnQuXSkKK2ZpCitdKSMgQUNfRlVOQ19TRVRQR1JQCisKKworIyBfQUNfRlVOQ19TVEFUKFNUQVQgfCBMU1RBVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERldGVybWluZSB3aGV0aGVyIHN0YXQgb3IgbHN0YXQgaGF2ZSB0aGUgYnVnIHRoYXQgaXQgc3VjY2VlZHMgd2hlbgorIyBnaXZlbiB0aGUgemVyby1sZW5ndGggZmlsZSBuYW1lIGFyZ3VtZW50LiAgVGhlIHN0YXQgYW5kIGxzdGF0IGZyb20KKyMgU3VuT1M0LjEuNCBhbmQgdGhlIEh1cmQgKGFzIG9mIDE5OTgtMTEtMDEpIGRvIHRoaXMuCisjCisjIElmIGl0IGRvZXMsIHRoZW4gZGVmaW5lIEhBVkVfU1RBVF9FTVBUWV9TVFJJTkdfQlVHIChvcgorIyBIQVZFX0xTVEFUX0VNUFRZX1NUUklOR19CVUcpIGFuZCBhcnJhbmdlIHRvIGNvbXBpbGUgdGhlIHdyYXBwZXIKKyMgZnVuY3Rpb24uCittNF9kZWZpbmUoW19BQ19GVU5DX1NUQVRdLAorW0FDX1JFUVVJUkUoW0FDX0ZVTkNfTFNUQVRfRk9MTE9XU19TTEFTSEVEX1NZTUxJTktdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgJDEgYWNjZXB0cyBhbiBlbXB0eSBzdHJpbmddLAorCSAgICAgICBbYWNfY3ZfZnVuY18kMV9lbXB0eV9zdHJpbmdfYnVnXSwKK1tBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW0FDX0lOQ0xVREVTX0RFRkFVTFRdLAorW1tzdHJ1Y3Qgc3RhdCBzYnVmOworICByZXR1cm4gJDEgKCIiLCAmc2J1ZikgPT0gMDtdXSldLAorCSAgICBbYWNfY3ZfZnVuY18kMV9lbXB0eV9zdHJpbmdfYnVnPW5vXSwKKwkgICAgW2FjX2N2X2Z1bmNfJDFfZW1wdHlfc3RyaW5nX2J1Zz15ZXNdLAorCSAgICBbYWNfY3ZfZnVuY18kMV9lbXB0eV9zdHJpbmdfYnVnPXllc10pXSkKK2lmIHRlc3QgJGFjX2N2X2Z1bmNfJDFfZW1wdHlfc3RyaW5nX2J1ZyA9IHllczsgdGhlbgorICBBQ19MSUJPQkooWyQxXSkKKyAgQUNfREVGSU5FX1VOUVVPVEVEKEFTX1RSX0NQUChbSEFWRV8kMV9FTVBUWV9TVFJJTkdfQlVHXSksIDEsCisJCSAgICAgW0RlZmluZSB0byAxIGlmIGAkMScgaGFzIHRoZSBidWcgdGhhdCBpdCBzdWNjZWVkcyB3aGVuCisJCSAgICAgIGdpdmVuIHRoZSB6ZXJvLWxlbmd0aCBmaWxlIG5hbWUgYXJndW1lbnQuXSkKK2ZpCitdKSMgX0FDX0ZVTkNfU1RBVAorCisKKyMgQUNfRlVOQ19TVEFUICYgQUNfRlVOQ19MU1RBVAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfRlVOQ19TVEFUXSwgIFtfQUNfRlVOQ19TVEFUKHN0YXQpXSkKK0FDX0RFRlVOKFtBQ19GVU5DX0xTVEFUXSwgW19BQ19GVU5DX1NUQVQobHN0YXQpXSkKKworCisjIF9BQ19MSUJPQkpfU1RSVE9ECisjIC0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19BQ19MSUJPQkpfU1RSVE9EXSwKK1tBQ19MSUJPQkooc3RydG9kKQorQUNfQ0hFQ0tfRlVOQyhwb3cpCitpZiB0ZXN0ICRhY19jdl9mdW5jX3BvdyA9IG5vOyB0aGVuCisgIEFDX0NIRUNLX0xJQihtLCBwb3csCisJICAgICAgIFtQT1dfTElCPS1sbV0sCisJICAgICAgIFtBQ19NU0dfV0FSTihbY2Fubm90IGZpbmQgbGlicmFyeSBjb250YWluaW5nIGRlZmluaXRpb24gb2YgcG93XSldKQorZmkKK10pIyBfQUNfTElCT0JKX1NUUlRPRAorCisKKyMgQUNfRlVOQ19TVFJUT0QKKyMgLS0tLS0tLS0tLS0tLS0KK0FOX0ZVTkNUSU9OKFtzdHJ0b2RdLCBbQUNfRlVOQ19TVFJUT0RdKQorQUNfREVGVU4oW0FDX0ZVTkNfU1RSVE9EXSwKK1tBQ19TVUJTVChQT1dfTElCKWRubAorQUNfQ0FDSEVfQ0hFQ0soZm9yIHdvcmtpbmcgc3RydG9kLCBhY19jdl9mdW5jX3N0cnRvZCwKK1tBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWworXUFDX0lOQ0xVREVTX0RFRkFVTFRbCisjaWZuZGVmIHN0cnRvZAorZG91YmxlIHN0cnRvZCAoKTsKKyNlbmRpZgoraW50CittYWluKCkKK3sKKyAgeworICAgIC8qIFNvbWUgdmVyc2lvbnMgb2YgTGludXggc3RydG9kIG1pcy1wYXJzZSBzdHJpbmdzIHdpdGggbGVhZGluZyAnKycuICAqLworICAgIGNoYXIgKnN0cmluZyA9ICIgKzY5IjsKKyAgICBjaGFyICp0ZXJtOworICAgIGRvdWJsZSB2YWx1ZTsKKyAgICB2YWx1ZSA9IHN0cnRvZCAoc3RyaW5nLCAmdGVybSk7CisgICAgaWYgKHZhbHVlICE9IDY5IHx8IHRlcm0gIT0gKHN0cmluZyArIDQpKQorICAgICAgcmV0dXJuIDE7CisgIH0KKworICB7CisgICAgLyogVW5kZXIgU29sYXJpcyAyLjQsIHN0cnRvZCByZXR1cm5zIHRoZSB3cm9uZyB2YWx1ZSBmb3IgdGhlCisgICAgICAgdGVybWluYXRpbmcgY2hhcmFjdGVyIHVuZGVyIHNvbWUgY29uZGl0aW9ucy4gICovCisgICAgY2hhciAqc3RyaW5nID0gIk5hTiI7CisgICAgY2hhciAqdGVybTsKKyAgICBzdHJ0b2QgKHN0cmluZywgJnRlcm0pOworICAgIGlmICh0ZXJtICE9IHN0cmluZyAmJiAqKHRlcm0gLSAxKSA9PSAwKQorICAgICAgcmV0dXJuIDE7CisgIH0KKyAgcmV0dXJuIDA7Cit9CitdXSldLAorCSAgICAgICBhY19jdl9mdW5jX3N0cnRvZD15ZXMsCisJICAgICAgIGFjX2N2X2Z1bmNfc3RydG9kPW5vLAorCSAgICAgICBhY19jdl9mdW5jX3N0cnRvZD1ubyldKQoraWYgdGVzdCAkYWNfY3ZfZnVuY19zdHJ0b2QgPSBubzsgdGhlbgorICBfQUNfTElCT0JKX1NUUlRPRAorZmkKK10pCisKKworIyBBQ19GVU5DX1NUUlRPTEQKKyMgLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfRlVOQ19TVFJUT0xEXSwKK1sKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgc3RydG9sZCBjb25mb3JtcyB0byBDOTldLAorICAgIFthY19jdl9mdW5jX3N0cnRvbGRdLAorICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorCSAgW1svKiBPbiBIUC1VWCBiZWZvcmUgMTEuMjMsIHN0cnRvbGQgcmV0dXJucyBhIHN0cnVjdCBpbnN0ZWFkIG9mCisJCWxvbmcgZG91YmxlLiAgUmVqZWN0IGltcGxlbWVudGF0aW9ucyBsaWtlIHRoYXQsIGJ5IHJlcXVpcmluZworCQljb21wYXRpYmlsaXR5IHdpdGggdGhlIEM5OSBwcm90b3R5cGUuICAqLworIwkgICAgIGluY2x1ZGUgPHN0ZGxpYi5oPgorCSAgICAgc3RhdGljIGxvbmcgZG91YmxlICgqcCkgKGNoYXIgY29uc3QgKiwgY2hhciAqKikgPSBzdHJ0b2xkOworCSAgICAgc3RhdGljIGxvbmcgZG91YmxlCisJICAgICB0ZXN0IChjaGFyIGNvbnN0ICpucHRyLCBjaGFyICoqZW5kcHRyKQorCSAgICAgeworCSAgICAgICBsb25nIGRvdWJsZSByOworCSAgICAgICByID0gc3RydG9sZCAobnB0ciwgZW5kcHRyKTsKKwkgICAgICAgcmV0dXJuIHI7CisJICAgICB9XV0sCisJICAgW1tyZXR1cm4gdGVzdCAoIjEuMCIsIE5VTEwpICE9IDEgfHwgcCAoIjEuMCIsIE5VTEwpICE9IDE7XV0pXSwKKyAgICAgICBbYWNfY3ZfZnVuY19zdHJ0b2xkPXllc10sCisgICAgICAgW2FjX2N2X2Z1bmNfc3RydG9sZD1ub10pXSkKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zdHJ0b2xkID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKFtIQVZFX1NUUlRPTERdLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHN0cnRvbGQgZXhpc3RzIGFuZCBjb25mb3JtcyB0byBDOTkuXSkKKyAgZmkKK10pIyBBQ19GVU5DX1NUUlRPTEQKKworCisjIEFVOjpBTV9GVU5DX1NUUlRPRAorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK0FVX0FMSUFTKFtBTV9GVU5DX1NUUlRPRF0sIFtBQ19GVU5DX1NUUlRPRF0pCisKKworIyBBQ19GVU5DX1NUUkVSUk9SX1IKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCitBTl9GVU5DVElPTihbc3RyZXJyb3Jfcl0sIFtBQ19GVU5DX1NUUkVSUk9SX1JdKQorQUNfREVGVU4oW0FDX0ZVTkNfU1RSRVJST1JfUl0sCitbQUNfQ0hFQ0tfREVDTFMoW3N0cmVycm9yX3JdKQorQUNfQ0hFQ0tfRlVOQ1MoW3N0cmVycm9yX3JdKQorQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgc3RyZXJyb3JfciByZXR1cm5zIGNoYXIgKl0sCisJICAgICAgIGFjX2N2X2Z1bmNfc3RyZXJyb3Jfcl9jaGFyX3AsCisgICBbCisgICAgYWNfY3ZfZnVuY19zdHJlcnJvcl9yX2NoYXJfcD1ubworICAgIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9zdHJlcnJvcl9yID0geWVzOyB0aGVuCisgICAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtBQ19JTkNMVURFU19ERUZBVUxUXSwKKwlbWworCSAgY2hhciBidWZbMTAwXTsKKwkgIGNoYXIgeCA9ICpzdHJlcnJvcl9yICgwLCBidWYsIHNpemVvZiBidWYpOworCSAgY2hhciAqcCA9IHN0cmVycm9yX3IgKDAsIGJ1Ziwgc2l6ZW9mIGJ1Zik7CisJICByZXR1cm4gIXAgfHwgeDsKKwldXSldLAorCQkJYWNfY3ZfZnVuY19zdHJlcnJvcl9yX2NoYXJfcD15ZXMpCisgICAgZWxzZQorICAgICAgIyBzdHJlcnJvcl9yIGlzIG5vdCBkZWNsYXJlZC4gIENob29zZSBiZXR3ZWVuCisgICAgICAjIHN5c3RlbXMgdGhhdCBoYXZlIHJlbGF0aXZlbHkgaW5hY2Nlc3NpYmxlIGRlY2xhcmF0aW9ucyBmb3IgdGhlCisgICAgICAjIGZ1bmN0aW9uLiAgQmVPUyBhbmQgREVDIFVOSVggNC4wIGZhbGwgaW4gdGhpcyBjYXRlZ29yeSwgYnV0IHRoZQorICAgICAgIyBmb3JtZXIgaGFzIGEgc3RyZXJyb3JfciB0aGF0IHJldHVybnMgY2hhciosIHdoaWxlIHRoZSBsYXR0ZXIKKyAgICAgICMgaGFzIGEgc3RyZXJyb3JfciB0aGF0IHJldHVybnMgYGludCcuCisgICAgICAjIFRoaXMgdGVzdCBzaG91bGQgc2VnZmF1bHQgb24gdGhlIERFQyBzeXN0ZW0uCisgICAgICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW0FDX0lOQ0xVREVTX0RFRkFVTFQKKwlleHRlcm4gY2hhciAqc3RyZXJyb3JfciAoKTtdLAorCVtbY2hhciBidWZbMTAwXTsKKwkgIGNoYXIgeCA9ICpzdHJlcnJvcl9yICgwLCBidWYsIHNpemVvZiBidWYpOworCSAgcmV0dXJuICEgaXNhbHBoYSAoeCk7XV0pXSwKKwkJICAgIGFjX2N2X2Z1bmNfc3RyZXJyb3Jfcl9jaGFyX3A9eWVzLCAsIDopCisgICAgZmkKKyAgXSkKK2lmIHRlc3QgJGFjX2N2X2Z1bmNfc3RyZXJyb3Jfcl9jaGFyX3AgPSB5ZXM7IHRoZW4KKyAgQUNfREVGSU5FKFtTVFJFUlJPUl9SX0NIQVJfUF0sIDEsCisJICAgIFtEZWZpbmUgdG8gMSBpZiBzdHJlcnJvcl9yIHJldHVybnMgY2hhciAqLl0pCitmaQorXSkjIEFDX0ZVTkNfU1RSRVJST1JfUgorCisKKyMgQUNfRlVOQ19TVFJGVElNRQorIyAtLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfRlVOQ19TVFJGVElNRV0sCitbQUNfQ0hFQ0tfRlVOQ1Moc3RyZnRpbWUsIFtdLAorWyMgc3RyZnRpbWUgaXMgaW4gLWxpbnRsIG9uIFNDTyBVTklYLgorQUNfQ0hFQ0tfTElCKGludGwsIHN0cmZ0aW1lLAorCSAgICAgW0FDX0RFRklORShIQVZFX1NUUkZUSU1FKQorTElCUz0iLWxpbnRsICRMSUJTIl0pXSlkbmwKK10pIyBBQ19GVU5DX1NUUkZUSU1FCisKKworIyBBQ19GVU5DX1NUUk5MRU4KKyMgLS0tLS0tLS0tLS0tLS0tCitBTl9GVU5DVElPTihbc3Rybmxlbl0sIFtBQ19GVU5DX1NUUk5MRU5dKQorQUNfREVGVU4oW0FDX0ZVTkNfU1RSTkxFTl0sCitbQUNfUkVRVUlSRShbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFtmb3Igd29ya2luZyBzdHJubGVuXSwgYWNfY3ZfZnVuY19zdHJubGVuX3dvcmtpbmcsCitbQUNfUlVOX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtBQ19JTkNMVURFU19ERUZBVUxUXSwgW1sKKyNkZWZpbmUgUyAiZm9vYmFyIgorI2RlZmluZSBTX0xFTiAoc2l6ZW9mIFMgLSAxKQorCisgIC8qIEF0IGxlYXN0IG9uZSBpbXBsZW1lbnRhdGlvbiBpcyBidWdneTogdGhhdCBvZiBBSVggNC4zIHdvdWxkCisgICAgIGdpdmUgc3RybmxlbiAoUywgMSkgPT0gMy4gICovCisKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCBTX0xFTiArIDE7ICsraSkKKyAgICB7CisgICAgICBpbnQgZXhwZWN0ZWQgPSBpIDw9IFNfTEVOID8gaSA6IFNfTEVOOworICAgICAgaWYgKHN0cm5sZW4gKFMsIGkpICE9IGV4cGVjdGVkKQorCXJldHVybiAxOworICAgIH0KKyAgcmV0dXJuIDA7CitdXSldLAorCSAgICAgICBbYWNfY3ZfZnVuY19zdHJubGVuX3dvcmtpbmc9eWVzXSwKKwkgICAgICAgW2FjX2N2X2Z1bmNfc3Rybmxlbl93b3JraW5nPW5vXSwKKwkgICAgICAgW2FjX2N2X2Z1bmNfc3Rybmxlbl93b3JraW5nPW5vXSldKQordGVzdCAkYWNfY3ZfZnVuY19zdHJubGVuX3dvcmtpbmcgPSBubyAmJiBBQ19MSUJPQkooW3N0cm5sZW5dKQorXSkjIEFDX0ZVTkNfU1RSTkxFTgorCisKKyMgQUNfRlVOQ19TRVRWQlVGX1JFVkVSU0VECisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX0ZVTkNfU0VUVkJVRl9SRVZFUlNFRF0sCitbQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1tUaGUgbWFjcm8gYCQwJyBpcyBvYnNvbGV0ZS4gIFJlbW92ZSBpdCBhbmQgYWxsIHJlZmVyZW5jZXMgdG8gU0VUVkJVRl9SRVZFUlNFRC5dKWRubAorQUNfQ0FDSEVfVkFMKFthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWRdLCBbYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vXSkKK10pIyBBQ19GVU5DX1NFVFZCVUZfUkVWRVJTRUQKKworCisjIEFVOjpBQ19TRVRWQlVGX1JFVkVSU0VECisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBVV9BTElBUyhbQUNfU0VUVkJVRl9SRVZFUlNFRF0sIFtBQ19GVU5DX1NFVFZCVUZfUkVWRVJTRURdKQorCisKKyMgQUNfRlVOQ19TVFJDT0xMCisjIC0tLS0tLS0tLS0tLS0tLQorQU5fRlVOQ1RJT04oW3N0cmNvbGxdLCBbQUNfRlVOQ19TVFJDT0xMXSkKK0FDX0RFRlVOKFtBQ19GVU5DX1NUUkNPTExdLAorW0FDX0NBQ0hFX0NIRUNLKGZvciB3b3JraW5nIHN0cmNvbGwsIGFjX2N2X2Z1bmNfc3RyY29sbF93b3JrcywKK1tBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW0FDX0lOQ0xVREVTX0RFRkFVTFRdLAorICBbW3JldHVybiAoc3RyY29sbCAoImFiYyIsICJkZWYiKSA+PSAwIHx8CisJIHN0cmNvbGwgKCJBQkMiLCAiREVGIikgPj0gMCB8fAorCSBzdHJjb2xsICgiMTIzIiwgIjQ1NiIpID49IDApXV0pXSwKKwkgICAgICAgYWNfY3ZfZnVuY19zdHJjb2xsX3dvcmtzPXllcywKKwkgICAgICAgYWNfY3ZfZnVuY19zdHJjb2xsX3dvcmtzPW5vLAorCSAgICAgICBhY19jdl9mdW5jX3N0cmNvbGxfd29ya3M9bm8pXSkKK2lmIHRlc3QgJGFjX2N2X2Z1bmNfc3RyY29sbF93b3JrcyA9IHllczsgdGhlbgorICBBQ19ERUZJTkUoSEFWRV9TVFJDT0xMLCAxLAorCSAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJjb2xsJyBmdW5jdGlvbiBhbmQgaXQgaXMgcHJvcGVybHkKKwkgICAgIGRlZmluZWQuXSkKK2ZpCitdKSMgQUNfRlVOQ19TVFJDT0xMCisKKworIyBBVTo6QUNfU1RSQ09MTAorIyAtLS0tLS0tLS0tLS0tLQorQVVfQUxJQVMoW0FDX1NUUkNPTExdLCBbQUNfRlVOQ19TVFJDT0xMXSkKKworCisjIEFDX0ZVTkNfVVRJTUVfTlVMTAorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19GVU5DX1VUSU1FX05VTExdLAorW0FDX0NIRUNLX0hFQURFUlNfT05DRSh1dGltZS5oKQorQUNfQ0FDSEVfQ0hFQ0sod2hldGhlciB1dGltZSBhY2NlcHRzIGEgbnVsbCBhcmd1bWVudCwgYWNfY3ZfZnVuY191dGltZV9udWxsLAorW3JtIC1mIGNvbmZ0ZXN0LmRhdGE7ID5jb25mdGVzdC5kYXRhCisjIFNlcXVlbnQgaW50ZXJwcmV0cyB1dGltZShmaWxlLCAwKSB0byBtZWFuIHVzZSBzdGFydCBvZiBlcG9jaC4gIFdyb25nLgorQUNfUlVOX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtBQ19JTkNMVURFU19ERUZBVUxUCisJICAgICAgICNpZmRlZiBIQVZFX1VUSU1FX0gKKwkgICAgICAgIyBpbmNsdWRlIDx1dGltZS5oPgorCSAgICAgICAjZW5kaWZdLAorW1tzdHJ1Y3Qgc3RhdCBzLCB0OworICByZXR1cm4gISAoc3RhdCAoImNvbmZ0ZXN0LmRhdGEiLCAmcykgPT0gMAorCSAgICAmJiB1dGltZSAoImNvbmZ0ZXN0LmRhdGEiLCAwKSA9PSAwCisJICAgICYmIHN0YXQgKCJjb25mdGVzdC5kYXRhIiwgJnQpID09IDAKKwkgICAgJiYgdC5zdF9tdGltZSA+PSBzLnN0X210aW1lCisJICAgICYmIHQuc3RfbXRpbWUgLSBzLnN0X210aW1lIDwgMTIwKTtdXSldLAorCSAgICAgIGFjX2N2X2Z1bmNfdXRpbWVfbnVsbD15ZXMsCisJICAgICAgYWNfY3ZfZnVuY191dGltZV9udWxsPW5vLAorCSAgICAgIGFjX2N2X2Z1bmNfdXRpbWVfbnVsbD0nZ3Vlc3NpbmcgeWVzJyldKQoraWYgdGVzdCAieCRhY19jdl9mdW5jX3V0aW1lX251bGwiICE9IHhubzsgdGhlbgorICBhY19jdl9mdW5jX3V0aW1lX251bGw9eWVzCisgIEFDX0RFRklORShIQVZFX1VUSU1FX05VTEwsIDEsCisJICAgIFtEZWZpbmUgdG8gMSBpZiBgdXRpbWUoZmlsZSwgTlVMTCknIHNldHMgZmlsZSdzIHRpbWVzdGFtcCB0byB0aGUKKwkgICAgIHByZXNlbnQuXSkKK2ZpCitybSAtZiBjb25mdGVzdC5kYXRhCitdKSMgQUNfRlVOQ19VVElNRV9OVUxMCisKKworIyBBVTo6QUNfVVRJTUVfTlVMTAorIyAtLS0tLS0tLS0tLS0tLS0tLQorQVVfQUxJQVMoW0FDX1VUSU1FX05VTExdLCBbQUNfRlVOQ19VVElNRV9OVUxMXSkKKworCisjIEFDX0ZVTkNfRk9SSworIyAtLS0tLS0tLS0tLS0tCitBTl9GVU5DVElPTihbZm9ya10sICBbQUNfRlVOQ19GT1JLXSkKK0FOX0ZVTkNUSU9OKFt2Zm9ya10sIFtBQ19GVU5DX0ZPUktdKQorQUNfREVGVU4oW0FDX0ZVTkNfRk9SS10sCitbQUNfUkVRVUlSRShbQUNfVFlQRV9QSURfVF0pZG5sCitBQ19DSEVDS19IRUFERVJTKHZmb3JrLmgpCitBQ19DSEVDS19GVU5DUyhmb3JrIHZmb3JrKQoraWYgdGVzdCAieCRhY19jdl9mdW5jX2ZvcmsiID0geHllczsgdGhlbgorICBfQUNfRlVOQ19GT1JLCitlbHNlCisgIGFjX2N2X2Z1bmNfZm9ya193b3Jrcz0kYWNfY3ZfZnVuY19mb3JrCitmaQoraWYgdGVzdCAieCRhY19jdl9mdW5jX2Zvcmtfd29ya3MiID0geGNyb3NzOyB0aGVuCisgIGNhc2UgJGhvc3QgaW4KKyAgICAqLSotYW1pZ2FvcyogfCAqLSotbXNkb3NkamdwcCopCisgICAgICAjIE92ZXJyaWRlLCBhcyB0aGVzZSBzeXN0ZW1zIGhhdmUgb25seSBhIGR1bW15IGZvcmsoKSBzdHViCisgICAgICBhY19jdl9mdW5jX2Zvcmtfd29ya3M9bm8KKyAgICAgIDs7CisgICAgKikKKyAgICAgIGFjX2N2X2Z1bmNfZm9ya193b3Jrcz15ZXMKKyAgICAgIDs7CisgIGVzYWMKKyAgQUNfTVNHX1dBUk4oW3Jlc3VsdCAkYWNfY3ZfZnVuY19mb3JrX3dvcmtzIGd1ZXNzZWQgYmVjYXVzZSBvZiBjcm9zcyBjb21waWxhdGlvbl0pCitmaQorYWNfY3ZfZnVuY192Zm9ya193b3Jrcz0kYWNfY3ZfZnVuY192Zm9yaworaWYgdGVzdCAieCRhY19jdl9mdW5jX3Zmb3JrIiA9IHh5ZXM7IHRoZW4KKyAgX0FDX0ZVTkNfVkZPUksKK2ZpOworaWYgdGVzdCAieCRhY19jdl9mdW5jX2Zvcmtfd29ya3MiID0geGNyb3NzOyB0aGVuCisgIGFjX2N2X2Z1bmNfdmZvcmtfd29ya3M9JGFjX2N2X2Z1bmNfdmZvcmsKKyAgQUNfTVNHX1dBUk4oW3Jlc3VsdCAkYWNfY3ZfZnVuY192Zm9ya193b3JrcyBndWVzc2VkIGJlY2F1c2Ugb2YgY3Jvc3MgY29tcGlsYXRpb25dKQorZmkKKworaWYgdGVzdCAieCRhY19jdl9mdW5jX3Zmb3JrX3dvcmtzIiA9IHh5ZXM7IHRoZW4KKyAgQUNfREVGSU5FKEhBVkVfV09SS0lOR19WRk9SSywgMSwgW0RlZmluZSB0byAxIGlmIGB2Zm9yaycgd29ya3MuXSkKK2Vsc2UKKyAgQUNfREVGSU5FKHZmb3JrLCBmb3JrLCBbRGVmaW5lIGFzIGBmb3JrJyBpZiBgdmZvcmsnIGRvZXMgbm90IHdvcmsuXSkKK2ZpCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZm9ya193b3JrcyIgPSB4eWVzOyB0aGVuCisgIEFDX0RFRklORShIQVZFX1dPUktJTkdfRk9SSywgMSwgW0RlZmluZSB0byAxIGlmIGBmb3JrJyB3b3Jrcy5dKQorZmkKK10pIyBBQ19GVU5DX0ZPUksKKworCisjIF9BQ19GVU5DX0ZPUksKKyMgLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19BQ19GVU5DX0ZPUktdLAorICBbQUNfQ0FDSEVfQ0hFQ0soZm9yIHdvcmtpbmcgZm9yaywgYWNfY3ZfZnVuY19mb3JrX3dvcmtzLAorICAgIFtBQ19SVU5fSUZFTFNFKAorICAgICAgW0FDX0xBTkdfUFJPR1JBTShbQUNfSU5DTFVERVNfREVGQVVMVF0sCisJWworCSAgLyogQnkgUnVlZGlnZXIgS3VobG1hbm4uICovCisJICByZXR1cm4gZm9yayAoKSA8IDA7CisJXSldLAorICAgICAgW2FjX2N2X2Z1bmNfZm9ya193b3Jrcz15ZXNdLAorICAgICAgW2FjX2N2X2Z1bmNfZm9ya193b3Jrcz1ub10sCisgICAgICBbYWNfY3ZfZnVuY19mb3JrX3dvcmtzPWNyb3NzXSldKV0KKykjIF9BQ19GVU5DX0ZPUksKKworCisjIF9BQ19GVU5DX1ZGT1JLCisjIC0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfQUNfRlVOQ19WRk9SS10sCitbQUNfQ0FDSEVfQ0hFQ0soZm9yIHdvcmtpbmcgdmZvcmssIGFjX2N2X2Z1bmNfdmZvcmtfd29ya3MsCitbQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1svKiBUaGFua3MgdG8gUGF1bCBFZ2dlcnQgZm9yIHRoaXMgdGVzdC4gICovCitdQUNfSU5DTFVERVNfREVGQVVMVFsKKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2lmZGVmIEhBVkVfVkZPUktfSAorIyBpbmNsdWRlIDx2Zm9yay5oPgorI2VuZGlmCisvKiBPbiBzb21lIHNwYXJjIHN5c3RlbXMsIGNoYW5nZXMgYnkgdGhlIGNoaWxkIHRvIGxvY2FsIGFuZCBpbmNvbWluZworICAgYXJndW1lbnQgcmVnaXN0ZXJzIGFyZSBwcm9wYWdhdGVkIGJhY2sgdG8gdGhlIHBhcmVudC4gIFRoZSBjb21waWxlcgorICAgaXMgdG9sZCBhYm91dCB0aGlzIHdpdGggI2luY2x1ZGUgPHZmb3JrLmg+LCBidXQgc29tZSBjb21waWxlcnMKKyAgIChlLmcuIGdjYyAtTykgZG9uJ3QgZ3JvayA8dmZvcmsuaD4uICBUZXN0IGZvciB0aGlzIGJ5IHVzaW5nIGEKKyAgIHN0YXRpYyB2YXJpYWJsZSB3aG9zZSBhZGRyZXNzIGlzIHB1dCBpbnRvIGEgcmVnaXN0ZXIgdGhhdCBpcworICAgY2xvYmJlcmVkIGJ5IHRoZSB2Zm9yay4gICovCitzdGF0aWMgdm9pZAorI2lmZGVmIF9fY3BsdXNwbHVzCitzcGFyY19hZGRyZXNzX3Rlc3QgKGludCBhcmcpCisjIGVsc2UKK3NwYXJjX2FkZHJlc3NfdGVzdCAoYXJnKSBpbnQgYXJnOworI2VuZGlmCit7CisgIHN0YXRpYyBwaWRfdCBjaGlsZDsKKyAgaWYgKCFjaGlsZCkgeworICAgIGNoaWxkID0gdmZvcmsgKCk7CisgICAgaWYgKGNoaWxkIDwgMCkgeworICAgICAgcGVycm9yICgidmZvcmsiKTsKKyAgICAgIF9leGl0KDIpOworICAgIH0KKyAgICBpZiAoIWNoaWxkKSB7CisgICAgICBhcmcgPSBnZXRwaWQoKTsKKyAgICAgIHdyaXRlKC0xLCAiIiwgMCk7CisgICAgICBfZXhpdCAoYXJnKTsKKyAgICB9CisgIH0KK30KKworaW50CittYWluICgpCit7CisgIHBpZF90IHBhcmVudCA9IGdldHBpZCAoKTsKKyAgcGlkX3QgY2hpbGQ7CisKKyAgc3BhcmNfYWRkcmVzc190ZXN0ICgwKTsKKworICBjaGlsZCA9IHZmb3JrICgpOworCisgIGlmIChjaGlsZCA9PSAwKSB7CisgICAgLyogSGVyZSBpcyBhbm90aGVyIHRlc3QgZm9yIHNwYXJjIHZmb3JrIHJlZ2lzdGVyIHByb2JsZW1zLiAgVGhpcworICAgICAgIHRlc3QgdXNlcyBsb3RzIG9mIGxvY2FsIHZhcmlhYmxlcywgYXQgbGVhc3QgYXMgbWFueSBsb2NhbAorICAgICAgIHZhcmlhYmxlcyBhcyBtYWluIGhhcyBhbGxvY2F0ZWQgc28gZmFyIGluY2x1ZGluZyBjb21waWxlcgorICAgICAgIHRlbXBvcmFyaWVzLiAgNCBsb2NhbHMgYXJlIGVub3VnaCBmb3IgZ2NjIDEuNDAuMyBvbiBhIFNvbGFyaXMKKyAgICAgICA0LjEuMyBzcGFyYywgYnV0IHdlIHVzZSA4IHRvIGJlIHNhZmUuICBBIGJ1Z2d5IGNvbXBpbGVyIHNob3VsZAorICAgICAgIHJldXNlIHRoZSByZWdpc3RlciBvZiBwYXJlbnQgZm9yIG9uZSBvZiB0aGUgbG9jYWwgdmFyaWFibGVzLAorICAgICAgIHNpbmNlIGl0IHdpbGwgdGhpbmsgdGhhdCBwYXJlbnQgY2FuJ3QgcG9zc2libHkgYmUgdXNlZCBhbnkgbW9yZQorICAgICAgIGluIHRoaXMgcm91dGluZS4gIEFzc2lnbmluZyB0byB0aGUgbG9jYWwgdmFyaWFibGUgd2lsbCB0aHVzCisgICAgICAgbXVuZ2UgcGFyZW50IGluIHRoZSBwYXJlbnQgcHJvY2Vzcy4gICovCisgICAgcGlkX3QKKyAgICAgIHAgPSBnZXRwaWQoKSwgcDEgPSBnZXRwaWQoKSwgcDIgPSBnZXRwaWQoKSwgcDMgPSBnZXRwaWQoKSwKKyAgICAgIHA0ID0gZ2V0cGlkKCksIHA1ID0gZ2V0cGlkKCksIHA2ID0gZ2V0cGlkKCksIHA3ID0gZ2V0cGlkKCk7CisgICAgLyogQ29udmluY2UgdGhlIGNvbXBpbGVyIHRoYXQgcC4ucDcgYXJlIGxpdmU7IG90aGVyd2lzZSwgaXQgbWlnaHQKKyAgICAgICB1c2UgdGhlIHNhbWUgaGFyZHdhcmUgcmVnaXN0ZXIgZm9yIGFsbCA4IGxvY2FsIHZhcmlhYmxlcy4gICovCisgICAgaWYgKHAgIT0gcDEgfHwgcCAhPSBwMiB8fCBwICE9IHAzIHx8IHAgIT0gcDQKKwl8fCBwICE9IHA1IHx8IHAgIT0gcDYgfHwgcCAhPSBwNykKKyAgICAgIF9leGl0KDEpOworCisgICAgLyogT24gc29tZSBzeXN0ZW1zIChlLmcuIElSSVggMy4zKSwgdmZvcmsgZG9lc24ndCBzZXBhcmF0ZSBwYXJlbnQKKyAgICAgICBmcm9tIGNoaWxkIGZpbGUgZGVzY3JpcHRvcnMuICBJZiB0aGUgY2hpbGQgY2xvc2VzIGEgZGVzY3JpcHRvcgorICAgICAgIGJlZm9yZSBpdCBleGVjcyBvciBleGl0cywgdGhpcyBtdW5nZXMgdGhlIHBhcmVudCdzIGRlc2NyaXB0b3IKKyAgICAgICBhcyB3ZWxsLiAgVGVzdCBmb3IgdGhpcyBieSBjbG9zaW5nIHN0ZG91dCBpbiB0aGUgY2hpbGQuICAqLworICAgIF9leGl0KGNsb3NlKGZpbGVubyhzdGRvdXQpKSAhPSAwKTsKKyAgfSBlbHNlIHsKKyAgICBpbnQgc3RhdHVzOworICAgIHN0cnVjdCBzdGF0IHN0OworCisgICAgd2hpbGUgKHdhaXQoJnN0YXR1cykgIT0gY2hpbGQpCisgICAgICA7CisgICAgcmV0dXJuICgKKwkgLyogV2FzIHRoZXJlIHNvbWUgcHJvYmxlbSB3aXRoIHZmb3JraW5nPyAgKi8KKwkgY2hpbGQgPCAwCisKKwkgLyogRGlkIHRoZSBjaGlsZCBmYWlsPyAgKFRoaXMgc2hvdWxkbid0IGhhcHBlbi4pICAqLworCSB8fCBzdGF0dXMKKworCSAvKiBEaWQgdGhlIHZmb3JrL2NvbXBpbGVyIGJ1ZyBvY2N1cj8gICovCisJIHx8IHBhcmVudCAhPSBnZXRwaWQoKQorCisJIC8qIERpZCB0aGUgZmlsZSBkZXNjcmlwdG9yIGJ1ZyBvY2N1cj8gICovCisJIHx8IGZzdGF0KGZpbGVubyhzdGRvdXQpLCAmc3QpICE9IDAKKwkgKTsKKyAgfQorfV1dKV0sCisJICAgIFthY19jdl9mdW5jX3Zmb3JrX3dvcmtzPXllc10sCisJICAgIFthY19jdl9mdW5jX3Zmb3JrX3dvcmtzPW5vXSwKKwkgICAgW2FjX2N2X2Z1bmNfdmZvcmtfd29ya3M9Y3Jvc3NdKV0pCitdKSMgX0FDX0ZVTkNfVkZPUksKKworCisjIEFVOjpBQ19GVU5DX1ZGT1JLCisjIC0tLS0tLS0tLS0tLQorQVVfQUxJQVMoW0FDX0ZVTkNfVkZPUktdLCBbQUNfRlVOQ19GT1JLXSkKKworIyBBVTo6QUNfVkZPUksKKyMgLS0tLS0tLS0tLS0tCitBVV9BTElBUyhbQUNfVkZPUktdLCBbQUNfRlVOQ19GT1JLXSkKKworCisjIEFDX0ZVTkNfVlBSSU5URgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgV2h5IHRoZSBoZWNrIGlzIHRoYXQgX2RvcHJudCBkb2VzIG5vdCBkZWZpbmUgSEFWRV9fRE9QUk5UPz8/CisjIFRoYXQgdGhlIGxvZ2ljYWwgbmFtZSEKK0FDX0RFRlVOKFtBQ19GVU5DX1ZQUklOVEZdLAorW0FDX0NIRUNLX0ZVTkNTKHZwcmludGYsIFtdCitbQUNfQ0hFQ0tfRlVOQyhfZG9wcm50LAorCSAgICAgICBbQUNfREVGSU5FKEhBVkVfRE9QUk5ULCAxLAorCQkJICBbRGVmaW5lIHRvIDEgaWYgeW91IGRvbid0IGhhdmUgYHZwcmludGYnIGJ1dCBkbyBoYXZlCisJCQkgIGBfZG9wcm50LiddKV0pXSkKK10pCisKKworIyBBVTo6QUNfVlBSSU5URgorIyAtLS0tLS0tLS0tLS0tLQorQVVfQUxJQVMoW0FDX1ZQUklOVEZdLCBbQUNfRlVOQ19WUFJJTlRGXSkKKworCisjIEFDX0ZVTkNfV0FJVDMKKyMgLS0tLS0tLS0tLS0tLQorIyBEb24ndCBib3RoZXIgdG9vIGhhcmQgbWFpbnRhaW5pbmcgdGhpcyBtYWNybywgYXMgaXQncyBvYnNvbGV0ZWQuCisjIFdlIGRvbid0IEFVIGRlZmluZSBpdCwgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnkgYWx0ZXJuYXRpdmUgdG8gcHJvcG9zZSwKKyMgYW55IGludm9jYXRpb24gc2hvdWxkIGJlIHJlbW92ZWQsIGFuZCB0aGUgY29kZSBhZGp1c3RlZC4KK0FOX0ZVTkNUSU9OKFt3YWl0M10sIFtBQ19GVU5DX1dBSVQzXSkKK0FDX0RFRlVOKFtBQ19GVU5DX1dBSVQzXSwKK1tBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBgd2FpdDMnIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBQT1NJWC4KK1JlbW92ZSB0aGlzIGBBQ19GVU5DX1dBSVQzJyBhbmQgYWRqdXN0IHlvdXIgY29kZSB0byB1c2UgYHdhaXRwaWQnIGluc3RlYWQuXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFtmb3Igd2FpdDMgdGhhdCBmaWxscyBpbiBydXNhZ2VdLAorCSAgICAgICBbYWNfY3ZfZnVuY193YWl0M19ydXNhZ2VdLAorW0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKAorW0FDX0lOQ0xVREVTX0RFRkFVTFRbCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorLyogSFAtVVggaGFzIHdhaXQzIGJ1dCBkb2VzIG5vdCBmaWxsIGluIHJ1c2FnZSBhdCBhbGwuICAqLworaW50CittYWluICgpCit7CisgIHN0cnVjdCBydXNhZ2UgcjsKKyAgaW50IGk7CisgIC8qIFVzZSBhIGZpZWxkIHRoYXQgd2UgY2FuIGZvcmNlIG5vbnplcm8gLS0KKyAgICAgdm9sdW50YXJ5IGNvbnRleHQgc3dpdGNoZXMuCisgICAgIEZvciBzeXN0ZW1zIGxpa2UgTmVYVCBhbmQgT1NGLzEgdGhhdCBkb24ndCBzZXQgaXQsCisgICAgIGFsc28gdXNlIHRoZSBzeXN0ZW0gQ1BVIHRpbWUuICBBbmQgcGFnZSBmYXVsdHMgKEkvTykgZm9yIExpbnV4LiAgKi8KKyAgci5ydV9udmNzdyA9IDA7CisgIHIucnVfc3RpbWUudHZfc2VjID0gMDsKKyAgci5ydV9zdGltZS50dl91c2VjID0gMDsKKyAgci5ydV9tYWpmbHQgPSByLnJ1X21pbmZsdCA9IDA7CisgIHN3aXRjaCAoZm9yayAoKSkKKyAgICB7CisgICAgY2FzZSAwOiAvKiBDaGlsZC4gICovCisgICAgICBzbGVlcCgxKTsgLyogR2l2ZSB1cCB0aGUgQ1BVLiAgKi8KKyAgICAgIF9leGl0KDApOworICAgICAgYnJlYWs7CisgICAgY2FzZSAtMTogLyogV2hhdCBjYW4gd2UgZG8/ICAqLworICAgICAgX2V4aXQoMCk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiAvKiBQYXJlbnQuICAqLworICAgICAgd2FpdDMoJmksIDAsICZyKTsKKyAgICAgIC8qIEF2b2lkICJ0ZXh0IGZpbGUgYnVzeSIgZnJvbSBybSBvbiBmYXN0IEhQLVVYIG1hY2hpbmVzLiAgKi8KKyAgICAgIHNsZWVwKDIpOworICAgICAgcmV0dXJuIChyLnJ1X252Y3N3ID09IDAgJiYgci5ydV9tYWpmbHQgPT0gMCAmJiByLnJ1X21pbmZsdCA9PSAwCisJICAgICAgJiYgci5ydV9zdGltZS50dl9zZWMgPT0gMCAmJiByLnJ1X3N0aW1lLnR2X3VzZWMgPT0gMCk7CisgICAgfQorfV1dKV0sCisJICAgICAgIFthY19jdl9mdW5jX3dhaXQzX3J1c2FnZT15ZXNdLAorCSAgICAgICBbYWNfY3ZfZnVuY193YWl0M19ydXNhZ2U9bm9dLAorCSAgICAgICBbYWNfY3ZfZnVuY193YWl0M19ydXNhZ2U9bm9dKV0pCitpZiB0ZXN0ICRhY19jdl9mdW5jX3dhaXQzX3J1c2FnZSA9IHllczsgdGhlbgorICBBQ19ERUZJTkUoSEFWRV9XQUlUMywgMSwKKwkgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd2FpdDMnIHN5c3RlbSBjYWxsLgorCSAgICAgRGVwcmVjYXRlZCwgeW91IHNob3VsZCBubyBsb25nZXIgZGVwZW5kIHVwb24gYHdhaXQzJy5dKQorZmkKK10pIyBBQ19GVU5DX1dBSVQzCisKKworIyBBVTo6QUNfV0FJVDMKKyMgLS0tLS0tLS0tLS0tCitBVV9BTElBUyhbQUNfV0FJVDNdLCBbQUNfRlVOQ19XQUlUM10pCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvY29uZi9hdXRvY29uZi9nZW5lcmFsLm00IGIvc2hhcmUvYXV0b2NvbmYvYXV0b2NvbmYvZ2VuZXJhbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzRiZWE0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b2NvbmYvYXV0b2NvbmYvZ2VuZXJhbC5tNApAQCAtMCwwICsxLDMwNDIgQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQXV0b2NvbmYuICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjIFBhcmFtZXRlcml6ZWQgbWFjcm9zLgorbTRfZGVmaW5lKFtfQUNfQ09QWVJJR0hUX1lFQVJTXSwgWworQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLAorMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCitdKQorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEF1dG9jb25mLiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUKKyMgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisjIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisjIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgQXV0b2NvbmYgQ29uZmlndXJlIFNjcmlwdCBFeGNlcHRpb24sCisjIHZlcnNpb24gMy4wLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYW5kIGEgY29weSBvZiB0aGUgQXV0b2NvbmYgQ29uZmlndXJlIFNjcmlwdCBFeGNlcHRpb24gYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZXMgQ09QWUlOR3YzIGFuZCBDT1BZSU5HLkVYQ0VQVElPTgorIyByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgV3JpdHRlbiBieSBEYXZpZCBNYWNLZW56aWUsIHdpdGggaGVscCBmcm9tCisjIEZyYW5jLG9pcyBQaW5hcmQsIEthcmwgQmVycnksIFJpY2hhcmQgUGl4bGV5LCBJYW4gTGFuY2UgVGF5bG9yLAorIyBSb2xhbmQgTWNHcmF0aCwgTm9haCBGcmllZG1hbiwgZGF2aWQgZCB6dWhuLCBhbmQgbWFueSBvdGhlcnMuCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgVGhlIGRpdmVyc2lvbnMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgV2UgaGVhdmlseSB1c2UgbTQncyBkaXZlcnNpb25zIGJvdGggZm9yIHRoZSBpbml0aWFsaXphdGlvbnMgYW5kIGZvcgorIyByZXF1aXJlZCBtYWNyb3MgKHNlZSBBQ19SRVFVSVJFKSwgYmVjYXVzZSBpbiBib3RoIGNhc2VzIHdlIGhhdmUgdG8KKyMgaXNzdWUgaGlnaCBpbiBgY29uZmlndXJlJyBzb21ldGhpbmcgd2hpY2ggaXMgZGlzY292ZXJlZCBsYXRlLgorIworIyBLSUxMIGlzIG9ubHkgdXNlZCB0byBzdXBwcmVzcyBvdXRwdXQuCisjCisjIFRoZSBsYXllcnMgb2YgYGNvbmZpZ3VyZScuICBXZSBsZXQgbTQgdW5kaXZlcnQgdGhlbSBieSBpdHNlbGYsIHdoZW4KKyMgaXQgcmVhY2hlcyB0aGUgZW5kIG9mIGBjb25maWd1cmUuYWMnLgorIworIyAtIEJJTlNICisjICAgIyEgL2Jpbi9zaAorIyAtIEhFQURFUi1SRVZJU0lPTgorIyAgIFNlbnQgYnkgQUNfUkVWSVNJT04KKyMgLSBIRUFERVItQ09NTUVOVAorIyAgIFB1cnBvc2Ugb2YgdGhlIHNjcmlwdC4KKyMgLSBIRUFERVItQ09QWVJJR0hUCisjICAgQ29weXJpZ2h0IG5vdGljZShzKQorIyAtIE00U0gtSU5JVAorIyAgIEluaXRpYWxpemF0aW9uIG9mIGJvdHRvbSBsYXllcnMuCisjCisjIC0gREVGQVVMVFMKKyMgICBlYXJseSBpbml0aWFsaXphdGlvbnMgKGRlZmF1bHRzKQorIyAtIFBBUlNFX0FSR1MKKyMgICBpbml0aWFsaXphdGlvbiBjb2RlLCBvcHRpb24gaGFuZGxpbmcgbG9vcC4KKyMKKyMgLSBIRUxQX0JFR0lOCisjICAgSGFuZGxpbmcgYGNvbmZpZ3VyZSAtLWhlbHAnLgorIyAtIEhFTFBfQ0FOT04KKyMgICBIZWxwIG1zZyBmb3IgQUNfQ0FOT05JQ0FMXyoKKyMgLSBIRUxQX0VOQUJMRQorIyAgIEhlbHAgbXNnIGZyb20gQUNfQVJHX0VOQUJMRS4KKyMgLSBIRUxQX1dJVEgKKyMgICBIZWxwIG1zZyBmcm9tIEFDX0FSR19XSVRILgorIyAtIEhFTFBfVkFSCisjICAgSGVscCBtc2cgZnJvbSBBQ19BUkdfVkFSLgorIyAtIEhFTFBfVkFSX0VORAorIyAgIEEgc21hbGwgcGFyYWdyYXBoIG9uIHRoZSB1c2Ugb2YgdGhlIHZhcmlhYmxlcy4KKyMgLSBIRUxQX0VORAorIyAgIFRhaWwgb2YgdGhlIGhhbmRsaW5nIG9mIC0taGVscC4KKyMKKyMgLSBWRVJTSU9OX0JFR0lOCisjICAgSGVhZCBvZiB0aGUgaGFuZGxpbmcgb2YgLS12ZXJzaW9uLgorIyAtIFZFUlNJT05fRlNGCisjICAgRlNGIGNvcHlyaWdodCBub3RpY2UgZm9yIC0tdmVyc2lvbi4KKyMgLSBWRVJTSU9OX1VTRVIKKyMgICBVc2VyIGNvcHlyaWdodCBub3RpY2UgZm9yIC0tdmVyc2lvbi4KKyMgLSBWRVJTSU9OX0VORAorIyAgIFRhaWwgb2YgdGhlIGhhbmRsaW5nIG9mIC0tdmVyc2lvbi4KKyMKKyMgLSBTSEVMTF9GTgorIyAgIFNoZWxsIGZ1bmN0aW9ucy4KKyMKKyMgLSBJTklUX1BSRVBBUkUKKyMgICBUYWlsIG9mIGluaXRpYWxpemF0aW9uIGNvZGUuCisjCisjIC0gQk9EWQorIyAgIHRoZSB0ZXN0cyBhbmQgb3V0cHV0IGNvZGUKKyMKKworCisjIF9tNF9kaXZlcnQoRElWRVJTSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbnZlcnQgYSBkaXZlcnNpb24gbmFtZSBpbnRvIGl0cyBudW1iZXIuICBPdGhlcndpc2UsIHJldHVybgorIyBESVZFUlNJT04tTkFNRSB3aGljaCBpcyBzdXBwb3NlZCB0byBiZSBhbiBhY3R1YWwgZGl2ZXJzaW9uIG51bWJlci4KKyMgT2YgY291cnNlIGl0IHdvdWxkIGJlIG5pY2VyIHRvIHVzZSBtNF9jYXNlIGhlcmUsIGluc3RlYWQgb2YgemlsbGlvbnMKKyMgb2YgbGl0dGxlIG1hY3JvcywgYnV0IGl0IHRoZW4gdGFrZXMgdHdpY2UgbG9uZ2VyIHRvIHJ1biBgYXV0b2NvbmYnIQorIworIyBGcm9tIE00c3VnYXI6CisjICAgIC0xLiBLSUxMCisjIDEwMDAwLiBHUk9XCisjCisjIEZyb20gTTRzaDoKKyMgICAgMC4gQklOU0gKKyMgICAgMS4gSEVBREVSLVJFVklTSU9OCisjICAgIDIuIEhFQURFUi1DT01NRU5UCisjICAgIDMuIEhFQURFUi1DT1BZUklHSFQKKyMgICAgNC4gTTRTSC1JTklUCisjIDEwMDAuIEJPRFkKK200X2RlZmluZShbX200X2RpdmVydChERUZBVUxUUyldLCAgICAgICAgMTApCittNF9kZWZpbmUoW19tNF9kaXZlcnQoUEFSU0VfQVJHUyldLCAgICAgIDIwKQorCittNF9kZWZpbmUoW19tNF9kaXZlcnQoSEVMUF9CRUdJTildLCAgICAgMTAwKQorbTRfZGVmaW5lKFtfbTRfZGl2ZXJ0KEhFTFBfQ0FOT04pXSwgICAgIDEwMSkKK200X2RlZmluZShbX200X2RpdmVydChIRUxQX0VOQUJMRSldLCAgICAxMDIpCittNF9kZWZpbmUoW19tNF9kaXZlcnQoSEVMUF9XSVRIKV0sICAgICAgMTAzKQorbTRfZGVmaW5lKFtfbTRfZGl2ZXJ0KEhFTFBfVkFSKV0sICAgICAgIDEwNCkKK200X2RlZmluZShbX200X2RpdmVydChIRUxQX1ZBUl9FTkQpXSwgICAxMDUpCittNF9kZWZpbmUoW19tNF9kaXZlcnQoSEVMUF9FTkQpXSwgICAgICAgMTA2KQorCittNF9kZWZpbmUoW19tNF9kaXZlcnQoVkVSU0lPTl9CRUdJTildLCAgMjAwKQorbTRfZGVmaW5lKFtfbTRfZGl2ZXJ0KFZFUlNJT05fRlNGKV0sICAgIDIwMSkKK200X2RlZmluZShbX200X2RpdmVydChWRVJTSU9OX1VTRVIpXSwgICAyMDIpCittNF9kZWZpbmUoW19tNF9kaXZlcnQoVkVSU0lPTl9FTkQpXSwgICAgMjAzKQorCittNF9kZWZpbmUoW19tNF9kaXZlcnQoU0hFTExfRk4pXSwgICAgICAgMjUwKQorCittNF9kZWZpbmUoW19tNF9kaXZlcnQoSU5JVF9QUkVQQVJFKV0sICAgMzAwKQorCisKKworIyBBQ19ESVZFUlRfUFVTSChESVZFUlNJT04tTkFNRSkKKyMgQUNfRElWRVJUX1BPUAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2NvcHkoW200X2RpdmVydF9wdXNoXSxbQUNfRElWRVJUX1BVU0hdKQorbTRfY29weShbbTRfZGl2ZXJ0X3BvcF0sIFtBQ19ESVZFUlRfUE9QXSkKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRGVmaW5pbmcvcmVxdWlyaW5nIEF1dG9jb25mIG1hY3Jvcy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIEFDX0RFRlVOKE5BTUUsIEVYUEFOU0lPTikKKyMgQUNfREVGVU5fT05DRShOQU1FLCBFWFBBTlNJT04pCisjIEFDX0JFRk9SRShUSElTLU1BQ1JPLU5BTUUsIENBTExFRC1NQUNSTy1OQU1FKQorIyBBQ19SRVFVSVJFKFNUUklORykKKyMgQUNfUFJPVklERShNQUNSTy1OQU1FKQorIyBBQ19QUk9WSURFX0lGRUxTRShNQUNSTy1OQU1FLCBJRi1QUk9WSURFRCwgSUYtTk9ULVBST1ZJREVEKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfY29weShbbTRfZGVmdW5dLCAgICAgICBbQUNfREVGVU5dKQorbTRfY29weShbbTRfZGVmdW5fb25jZV0sICBbQUNfREVGVU5fT05DRV0pCittNF9jb3B5KFttNF9iZWZvcmVdLCAgICAgIFtBQ19CRUZPUkVdKQorbTRfY29weShbbTRfcmVxdWlyZV0sICAgICBbQUNfUkVRVUlSRV0pCittNF9jb3B5KFttNF9wcm92aWRlXSwgICAgIFtBQ19QUk9WSURFXSkKK200X2NvcHkoW200X3Byb3ZpZGVfaWZdLCAgW0FDX1BST1ZJREVfSUZFTFNFXSkKKworCisjIEFDX09CU09MRVRFKFRISVMtTUFDUk8tTkFNRSwgW1NVR0dFU1RJT05dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbQUNfT0JTT0xFVEVdLAorW0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sIFskMSBpcyBvYnNvbGV0ZSQyXSldKQorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEltcGxlbWVudGluZyBzaGVsbCBmdW5jdGlvbnMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgQUNfUkVRVUlSRV9TSEVMTF9GTihOQU1FLVRPLUNIRUNLLCBDT01NRU5ULCBCT0RZLCBbRElWRVJTSU9OID0gU0hFTExfRk5dCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTYW1lIGFzIEFTX1JFUVVJUkVfU0hFTExfRk4gZXhjZXB0IHRoYXQgdGhlIGRlZmF1bHQgZGl2ZXJzaW9uIGNvbWVzCisjIGxhdGVyIGluIHRoZSBzY3JpcHQgKHNwZWVkaW5nIHVwIGNvbmZpZ3VyZSAtLWhlbHAgYW5kIC0tdmVyc2lvbikuCitBQ19ERUZVTihbQUNfUkVRVUlSRV9TSEVMTF9GTl0sCitbQVNfUkVRVUlSRV9TSEVMTF9GTihbJDFdLCBbJDJdLCBbJDNdLCBtNF9kZWZhdWx0X3F1b3RlZChbJDRdLCBbU0hFTExfRk5dKSldKQorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEltcGxlbWVudGluZyBBdXRvY29uZiBsb29wcy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgQVU6OkFDX0ZPUkVBQ0goVkFSSUFCTEUsIExJU1QsIEVYUFJFU1NJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQVVfREVGVU4oW0FDX0ZPUkVBQ0hdLCBbW200X2ZvcmVhY2hfdygkQCldXSkKK0FDX0RFRlVOKFtBQ19GT1JFQUNIXSwgW200X2ZvcmVhY2hfdygkQClkbmwKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sIFtUaGUgbWFjcm8gYEFDX0ZPUkVBQ0gnIGlzIG9ic29sZXRlLgorWW91IHNob3VsZCBydW4gYXV0b3VwZGF0ZS5dKV0pCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgSGVscGluZyBtYWNyb3MgdG8gZGlzcGxheSBzdHJpbmdzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBBVTo6QUNfSEVMUF9TVFJJTkcoTEhTLCBSSFMsIFtDT0xVTU5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQVVfQUxJQVMoW0FDX0hFTFBfU1RSSU5HXSwgW0FTX0hFTFBfU1RSSU5HXSkKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEluZm9ybWF0aW9uIG9uIHRoZSBwYWNrYWdlIGJlaW5nIEF1dG9jb25mJ2VkLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIEl0IGlzIHN1Z2dlc3RlZCB0aGF0IHRoZSBtYWNyb3MgaW4gdGhpcyBzZWN0aW9uIGFwcGVhciBiZWZvcmUKKyMgQUNfSU5JVCBpbiBgY29uZmlndXJlLmFjJy4gIE5ldmVydGhlbGVzcywgdGhpcyBpcyBqdXN0IHN0eWxpc3RpYywKKyMgYW5kIGZyb20gdGhlIGltcGxlbWVudGF0aW9uIHBvaW50IG9mIHZpZXcsIEFDX0lOSVQgKm11c3QqIGJlIGV4cGFuZGVkCisjIGJlZm9yZWhhbmQ6IGl0IHB1dHMgZGF0YSBpbiBkaXZlcnNpb25zIHdoaWNoIG11c3QgYXBwZWFyIGJlZm9yZSB0aGUKKyMgZGF0YSBwcm92aWRlZCBieSB0aGUgbWFjcm9zIG9mIHRoaXMgc2VjdGlvbi4KKworIyBUaGUgc29sdXRpb24gaXMgdG8gcmVxdWlyZSBBQ19JTklUIGluIGVhY2ggb2YgdGhlc2UgbWFjcm9zLiAgQUNfSU5JVAorIyBoYXMgdGhlIG5lZWRlZCBtYWdpYyBzbyB0aGF0IGl0IGNhbid0IGJlIGV4cGFuZGVkIHR3aWNlLgorCisKKworIyBfQUNfSU5JVF9QQUNLQUdFKFBBQ0tBR0UtTkFNRSwgVkVSU0lPTiwgQlVHLVJFUE9SVCwgW1RBUk5BTUVdLCBbVVJMXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19BQ19JTklUX1BBQ0tBR0VdLAorW0FTX0xJVEVSQUxfSUYoWyQxXSwgW10sIFttNF93YXJuKFtzeW50YXhdLCBbQUNfSU5JVDogbm90IGEgbGl0ZXJhbDogJDFdKV0pCitBU19MSVRFUkFMX0lGKFskMl0sIFtdLCAgW200X3dhcm4oW3N5bnRheF0sIFtBQ19JTklUOiBub3QgYSBsaXRlcmFsOiAkMl0pXSkKK0FTX0xJVEVSQUxfSUYoWyQzXSwgW10sICBbbTRfd2Fybihbc3ludGF4XSwgW0FDX0lOSVQ6IG5vdCBhIGxpdGVyYWw6ICQzXSldKQorbTRfaWZuZGVmKFtBQ19QQUNLQUdFX05BTUVdLAorCSAgW200X2RlZmluZShbQUNfUEFDS0FHRV9OQU1FXSwgICAgIFskMV0pXSkKK200X2lmbmRlZihbQUNfUEFDS0FHRV9UQVJOQU1FXSwKKwkgIFttNF9kZWZpbmUoW0FDX1BBQ0tBR0VfVEFSTkFNRV0sCisJCSAgICAgbTRfZGVmYXVsdChbJDRdLAorCQkJCVttNF9icGF0c3Vic3QobTRfdG9sb3dlcihtNF9icGF0c3Vic3QoW1skMV1dLAorCQkJCQkJCQkgICAgIFtHTlUgXSkpLAorCQkJCSBbW15fYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5XV0sCisJCQkJIFstXSldKSldKQorbTRfaWZuZGVmKFtBQ19QQUNLQUdFX1ZFUlNJT05dLAorCSAgW200X2RlZmluZShbQUNfUEFDS0FHRV9WRVJTSU9OXSwgICBbJDJdKV0pCittNF9pZm5kZWYoW0FDX1BBQ0tBR0VfU1RSSU5HXSwKKwkgIFttNF9kZWZpbmUoW0FDX1BBQ0tBR0VfU1RSSU5HXSwgICAgWyQxICQyXSldKQorbTRfaWZuZGVmKFtBQ19QQUNLQUdFX0JVR1JFUE9SVF0sCisJICBbbTRfZGVmaW5lKFtBQ19QQUNLQUdFX0JVR1JFUE9SVF0sIFskM10pXSkKK200X2lmbmRlZihbQUNfUEFDS0FHRV9VUkxdLAorCSAgW200X2RlZmluZShbQUNfUEFDS0FHRV9VUkxdLAorICBtNF9pZihbJDVdLCBbXSwgW200X2lmKG00X2luZGV4KFskMV0sIFtHTlUgXSksIFswXSwKKwkgIFtbaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL11tNF9kZWZuKFtBQ19QQUNLQUdFX1RBUk5BTUVdKVsvXV0pXSwKKwlbWyQ1XV0pKV0pCitdKQorCisKKyMgQUNfQ09QWVJJR0hUKFRFWFQsIFtWRVJTSU9OLURJVkVSU0lPTiA9IFZFUlNJT05fVVNFUl0sCisjICAgICAgICAgICAgICBbRklMVEVSID0gbTRfbmV3bGluZV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbWl0IFRFWFQsIGEgY29weXJpZ2h0IG5vdGljZSwgaW4gdGhlIHRvcCBvZiBgY29uZmlndXJlJyBhbmQgaW4KKyMgLS12ZXJzaW9uIG91dHB1dC4gIE1hY3JvcyBpbiBURVhUIGFyZSBldmFsdWF0ZWQgb25jZS4gIFByb2Nlc3MKKyMgdGhlIC0tdmVyc2lvbiBvdXRwdXQgdGhyb3VnaCBGSUxURVIgKG00X25ld2xpbmUsIG00X2RvLCBhbmQKKyMgbTRfY29weXJpZ2h0X2NvbmRlbnNlIGFyZSBjb21tb24gZmlsdGVycykuCittNF9kZWZpbmUoW0FDX0NPUFlSSUdIVF0sCitbQVNfQ09QWVJJR0hUKFskMV0pW11dZG5sCitbbTRfZGl2ZXJ0X3RleHQobTRfZGVmYXVsdF9xdW90ZWQoWyQyXSwgW1ZFUlNJT05fVVNFUl0pLAorW200X2RlZmF1bHQoWyQzXSwgW200X25ld2xpbmVdKShbJDFdKV0pXSkjIEFDX0NPUFlSSUdIVAorCisKKyMgQUNfUkVWSVNJT04oUkVWSVNJT04tSU5GTykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhlIHNlY29uZCBxdW90ZSBpbiB0aGUgdHJhbnNsaXQgaXMganVzdCB0byBjb3BlIHdpdGggZm9udC1sb2NrLW1vZGUKKyMgd2hpY2ggc2VlcyB0aGUgb3BlbmluZyBvZiBhIHN0cmluZy4KK200X2RlZmluZShbQUNfUkVWSVNJT05dLAorW200X2RpdmVydF90ZXh0KFtIRUFERVItUkVWSVNJT05dLAorCQlbQCU6QCBGcm9tIF9fZmlsZV9fIG00X3RyYW5zbGl0KFskMV0sIFskIiJdKS5dKWRubAorXSkKKworCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgUmVxdWlyZW1lbnRzIG92ZXIgdGhlIEF1dG9jb25mIHZlcnNpb24uICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgQVU6OkFDX1BSRVJFUShWRVJTSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFVwZGF0ZSB0aGlzIGBBQ19QUkVSRVEnIHN0YXRlbWVudCB0byByZXF1aXJlIHRoZSBjdXJyZW50IHZlcnNpb24gb2YKKyMgQXV0b2NvbmYuICBCdXQgZmFpbCBpZiBldmVyIHRoaXMgYXV0b3VwZGF0ZSBpcyB0b28gb2xkLgorIworIyBOb3RlIHRoYXQgYG00X2RlZm4oW200X1BBQ0tBR0VfVkVSU0lPTl0pJyBiZWxvdyBhcmUgZXhwYW5kZWQgYmVmb3JlCisjIGNhbGxpbmcgYEFVX0RFRlVOJywgaS5lLiwgaXQgaXMgaGFyZCBjb2RlZC4gIE90aGVyd2lzZSBpdCB3b3VsZCBiZQorIyBxdWl0ZSBjb21wbGV4IGZvciBhdXRvdXBkYXRlIHRvIGltcG9ydCB0aGUgdmFsdWUgb2YKKyMgYG00X1BBQ0tBR0VfVkVSU0lPTicuICBXZSBjb3VsZCBgQVVfREVGVU4nIGBtNF9QQUNLQUdFX1ZFUlNJT04nLCBidXQKKyMgdGhpcyB3b3VsZCByZXBsYWNlIGFsbCBpdHMgb2NjdXJyZW5jZXMgd2l0aCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mCisjIEF1dG9jb25mLCB3aGljaCBpcyBjZXJ0YWlubHkgbm90IHdoYXQgdGhlIHVzZXIgaW50ZW5kZWQuCitBVV9ERUZVTihbQUNfUFJFUkVRXSwKK1ttNF92ZXJzaW9uX3ByZXJlcShbJDFdKVtdZG5sCitbQUNfUFJFUkVRKF1dbTRfZGVmbihbbTRfUEFDS0FHRV9WRVJTSU9OXSlbWyldXSkKKworCisjIEFDX1BSRVJFUShWRVJTSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcGxhaW4gYW5kIGV4aXQgaWYgdGhlIEF1dG9jb25mIHZlcnNpb24gaXMgbGVzcyB0aGFuIFZFUlNJT04uCittNF91bmRlZmluZShbQUNfUFJFUkVRXSkKK200X2NvcHkoW200X3ZlcnNpb25fcHJlcmVxXSwgW0FDX1BSRVJFUV0pCisKKworIyBBQ19BVVRPQ09ORl9WRVJTSU9OCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBBdXRvY29uZiBwYXJzaW5nIHRoaXMgZmlsZS4KK200X2NvcHkoW200X1BBQ0tBR0VfVkVSU0lPTl0sIFtBQ19BVVRPQ09ORl9WRVJTSU9OXSkKKworCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisjIyBJbml0aWFsaXphdGlvbi4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBBbGwgdGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIHVzZWQgYnkgQUNfSU5JVC4gIElkZWFsbHksIHRoZXkgc2hvdWxkCisjIGJlIHByZXNlbnRlZCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUgb3V0cHV0LiAgUGxlYXNlLCBoZWxwIHVzCisjIHNvcnRpbmcgaXQsIG9yIGF0IGxlYXN0LCBkb24ndCBhdWdtZW50IHRoZSBlbnRyb3B5LgorCisKKyMgX0FDX0lOSVRfTk9USUNFCisjIC0tLS0tLS0tLS0tLS0tLQorIyBQcm92aWRlIHVzZWZ1bCBoZWFkZXJzOyBvdmVycmlkZSB0aGUgSEVBREVSLUNPTU1FTlQgY3JlYXRlZCBieSBNNHNoLgorbTRfZGVmaW5lKFtfQUNfSU5JVF9OT1RJQ0VdLAorW200X2NsZWFyZGl2ZXJ0KFtIRUFERVItQ09NTUVOVF0pXWRubAorW200X2RpdmVydF90ZXh0KFtIRUFERVItQ09NTUVOVF0sCitbQCU6QCBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLgorQCU6QCBHZW5lcmF0ZWQgYnkgbTRfUEFDS0FHRV9TVFJJTkdbXWRubAorbTRfaWZzZXQoW0FDX1BBQ0tBR0VfU1RSSU5HXSwgWyBmb3IgQUNfUEFDS0FHRV9TVFJJTkddKS5dKQorCittNF9pZnNldChbQUNfUEFDS0FHRV9CVUdSRVBPUlRdLAorCSBbbTRfZGl2ZXJ0X3RleHQoW0hFQURFUi1DT01NRU5UXSwKKwkJCSBbQCU6QAorQCU6QCBSZXBvcnQgYnVncyB0byA8QUNfUEFDS0FHRV9CVUdSRVBPUlQ+Ll0pXSkKK10pCisKKworIyBfQUNfSU5JVF9DT1BZUklHSFQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFdlIGR1bXAgdG8gVkVSU0lPTl9GU0YgdG8gbWFrZSBzdXJlIHdlIGFyZSBpbnNlcnRlZCBiZWZvcmUgdGhlCisjIHVzZXIgY29weXJpZ2h0cywgYW5kIGFmdGVyIHRoZSBzZXR1cCBvZiB0aGUgLS12ZXJzaW9uIGhhbmRsaW5nLgorbTRfZGVmaW5lKFtfQUNfSU5JVF9DT1BZUklHSFRdLAorW0FDX0NPUFlSSUdIVChtNF9kZWZuKFtfQUNfQ09QWVJJR0hUX1lFQVJTXSksIFtWRVJTSU9OX0ZTRl0sIFsKK200X2NvcHlyaWdodF9jb25kZW5zZV0pZG5sCitBQ19DT1BZUklHSFQoCitbVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2dpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC5dLAorCSAgICAgW1ZFUlNJT05fRlNGXSwgW200X2VjaG9dKV0pCisKKworIyBGaWxlIERlc2NyaXB0b3JzCisjIC0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IHVwIHRoZSBmaWxlIGRlc2NyaXB0b3JzIHVzZWQgYnkgYGNvbmZpZ3VyZScuCisjIEZpbGUgZGVzY3JpcHRvciB1c2FnZToKKyMgMCBzdGFuZGFyZCBpbnB1dCAoL2Rldi9udWxsKQorIyAxIGZpbGUgY3JlYXRpb24KKyMgMiBlcnJvcnMgYW5kIHdhcm5pbmdzCisjIEFTX01FU1NBR0VfTE9HX0ZEIGNvbXBpbGVyIG1lc3NhZ2VzIHNhdmVkIGluIGNvbmZpZy5sb2cKKyMgQVNfTUVTU0FHRV9GRCBjaGVja2luZyBmb3IuLi4gbWVzc2FnZXMgYW5kIHJlc3VsdHMKKyMgQVNfT1JJR0lOQUxfU1RESU5fRkQgb3JpZ2luYWwgc3RhbmRhcmQgaW5wdXQgKHN0aWxsIG9wZW4pCisjCisjIHN0ZGluIGlzIC9kZXYvbnVsbCBiZWNhdXNlIGNoZWNrcyB0aGF0IHJ1biBwcm9ncmFtcyBtYXkKKyMgaW5hZHZlcnRlbnRseSBydW4gaW50ZXJhY3RpdmUgb25lcywgd2hpY2ggd291bGQgc3RvcCBjb25maWd1cmF0aW9uCisjIHVudGlsIHNvbWVvbmUgdHlwZWQgYW4gRU9GLgorbTRfZGVmaW5lKFtBU19NRVNTQUdFX0ZEXSwgNikKK200X2RlZmluZShbQVNfT1JJR0lOQUxfU1RESU5fRkRdLCA3KQorIyBUaGF0J3MgaG93IHRoZXkgdXNlZCB0byBiZSBuYW1lZC4KK0FVX0FMSUFTKFtBQ19GRF9DQ10sICBbQVNfTUVTU0FHRV9MT0dfRkRdKQorQVVfQUxJQVMoW0FDX0ZEX01TR10sIFtBU19NRVNTQUdFX0ZEXSkKKworCisjIF9BQ19JTklUX0RFRkFVTFRTCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIFZhbHVlcyB3aGljaCBkZWZhdWx0cyBjYW4gYmUgc2V0IGZyb20gYGNvbmZpZ3VyZS5hYycuCisjIGAvYmluL21hY2hpbmUnIGlzIHVzZWQgaW4gYGdsaWJjYnVnJy4gIFRoZSBvdGhlcnMgYXJlIHVzZWQgaW4gY29uZmlnLioKK200X2RlZmluZShbX0FDX0lOSVRfREVGQVVMVFNdLAorW200X2RpdmVydF9wdXNoKFtERUZBVUxUU10pZG5sCisKK3Rlc3QgLW4gIiRESkRJUiIgfHwgZXhlYyBBU19PUklHSU5BTF9TVERJTl9GRDwmMCA8L2Rldi9udWxsCitleGVjIEFTX01FU1NBR0VfRkQ+JjEKKworIyBOYW1lIG9mIHRoZSBob3N0LgorIyBob3N0bmFtZSBvbiBzb21lIHN5c3RlbXMgKFNWUjMuMiwgTGludXgpIHJldHVybnMgYSBib2d1cyBleGl0IHN0YXR1cywKKyMgc28gdW5hbWUgZ2V0cyBydW4gdG9vLgorYWNfaG9zdG5hbWU9YChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCisKKyMKKyMgSW5pdGlhbGl6YXRpb25zLgorIworYWNfZGVmYXVsdF9wcmVmaXg9L3Vzci9sb2NhbAorYWNfY2xlYW5fZmlsZXM9CithY19jb25maWdfbGlib2JqX2Rpcj0uCitMSUJAJnRAT0JKUz0KK2Nyb3NzX2NvbXBpbGluZz1ubworc3ViZGlycz0KK01GTEFHUz0KK01BS0VGTEFHUz0KK0FDX1NVQlNUKFtTSEVMTF0pZG5sCitBQ19TVUJTVChbUEFUSF9TRVBBUkFUT1JdKWRubAorCisjIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KK0FDX1NVQlNUKFtQQUNLQUdFX05BTUVdLAorCSBbbTRfaWZkZWYoW0FDX1BBQ0tBR0VfTkFNRV0sICAgICAgWydBQ19QQUNLQUdFX05BTUUnXSldKWRubAorQUNfU1VCU1QoW1BBQ0tBR0VfVEFSTkFNRV0sCisJIFttNF9pZmRlZihbQUNfUEFDS0FHRV9UQVJOQU1FXSwgICBbJ0FDX1BBQ0tBR0VfVEFSTkFNRSddKV0pZG5sCitBQ19TVUJTVChbUEFDS0FHRV9WRVJTSU9OXSwKKwkgW200X2lmZGVmKFtBQ19QQUNLQUdFX1ZFUlNJT05dLCAgIFsnQUNfUEFDS0FHRV9WRVJTSU9OJ10pXSlkbmwKK0FDX1NVQlNUKFtQQUNLQUdFX1NUUklOR10sCisJIFttNF9pZmRlZihbQUNfUEFDS0FHRV9TVFJJTkddLCAgICBbJ0FDX1BBQ0tBR0VfU1RSSU5HJ10pXSlkbmwKK0FDX1NVQlNUKFtQQUNLQUdFX0JVR1JFUE9SVF0sCisJIFttNF9pZmRlZihbQUNfUEFDS0FHRV9CVUdSRVBPUlRdLCBbJ0FDX1BBQ0tBR0VfQlVHUkVQT1JUJ10pXSlkbmwKK0FDX1NVQlNUKFtQQUNLQUdFX1VSTF0sCisJIFttNF9pZmRlZihbQUNfUEFDS0FHRV9VUkxdLCAgICAgICBbJ0FDX1BBQ0tBR0VfVVJMJ10pXSlkbmwKKworbTRfZGl2ZXJ0X3BvcChbREVGQVVMVFNdKWRubAorbTRfd3JhcF9saWZvKFttNF9kaXZlcnRfdGV4dChbREVGQVVMVFNdLAorW2FjX3N1YnN0X3ZhcnM9J200X3NldF9kdW1wKFtfQUNfU1VCU1RfVkFSU10sIG00X25ld2xpbmUpJworYWNfc3Vic3RfZmlsZXM9J200X2lmZGVmKFtfQUNfU1VCU1RfRklMRVNdLCBbbTRfZGVmbihbX0FDX1NVQlNUX0ZJTEVTXSldKScKK2FjX3VzZXJfb3B0cz0nCitlbmFibGVfb3B0aW9uX2NoZWNraW5nCittNF9pZmRlZihbX0FDX1VTRVJfT1BUU10sIFttNF9kZWZuKFtfQUNfVVNFUl9PUFRTXSkKK10pJworbTRfaWZkZWYoW19BQ19QUkVDSU9VU19WQVJTXSwKKyAgW19BQ19BUkdfVkFSX1NUT1JFW11kbmwKKyAgIF9BQ19BUkdfVkFSX1ZBTElEQVRFW11kbmwKKyAgIGFjX3ByZWNpb3VzX3ZhcnM9J200X2RlZm4oW19BQ19QUkVDSU9VU19WQVJTXSknXSkKK200X2lmZGVmKFtfQUNfTElTVF9TVUJESVJTXSwKKyAgW2FjX3N1YmRpcnNfYWxsPSdtNF9kZWZuKFtfQUNfTElTVF9TVUJESVJTXSknXSlkbmwKK10pXSlkbmwKK10pIyBfQUNfSU5JVF9ERUZBVUxUUworCisKKyMgQUNfUFJFRklYX0RFRkFVTFQoUFJFRklYKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfUFJFRklYX0RFRkFVTFRdLAorW200X2RpdmVydF90ZXh0KFtERUZBVUxUU10sIFthY19kZWZhdWx0X3ByZWZpeD0kMV0pXSkKKworCisjIEFDX1BSRUZJWF9QUk9HUkFNKFBST0dSQU0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEd1ZXNzIHRoZSB2YWx1ZSBmb3IgdGhlIGBwcmVmaXgnIHZhcmlhYmxlIGJ5IGxvb2tpbmcgZm9yCisjIHRoZSBhcmd1bWVudCBwcm9ncmFtIGFsb25nIFBBVEggYW5kIHRha2luZyBpdHMgcGFyZW50LgorIyBFeGFtcGxlOiBpZiB0aGUgYXJndW1lbnQgaXMgYGdjYycgYW5kIHdlIGZpbmQgL3Vzci9sb2NhbC9nbnUvYmluL2djYywKKyMgc2V0IGBwcmVmaXgnIHRvIC91c3IvbG9jYWwvZ251LgorIyBUaGlzIGNvbWVzIHRvbyBsYXRlIHRvIGZpbmQgYSBzaXRlIGZpbGUgYmFzZWQgb24gdGhlIHByZWZpeCwKKyMgYW5kIGl0IG1pZ2h0IHVzZSBhIGNhY2hlZCB2YWx1ZSBmb3IgdGhlIHBhdGguCisjIE5vIGJpZyBsb3NzLCBJIHRoaW5rLCBzaW5jZSBtb3N0IGNvbmZpZ3VyZXMgZG9uJ3QgdXNlIHRoaXMgbWFjcm8gYW55d2F5LgorQUNfREVGVU4oW0FDX1BSRUZJWF9QUk9HUkFNXSwKK1tpZiB0ZXN0ICJ4JHByZWZpeCIgPSB4Tk9ORTsgdGhlbgorZG5sIFdlIHJlaW1wbGVtZW50IEFDX01TR19DSEVDS0lORyAobW9zdGx5KSB0byBhdm9pZCB0aGUgLi4uIGluIHRoZSBtaWRkbGUuCisgIF9BU19FQ0hPX04oW2NoZWNraW5nIGZvciBwcmVmaXggYnkgXSkKKyAgQUNfUEFUSF9QUk9HKGFjX3ByZWZpeF9wcm9ncmFtLCBbJDFdKQorICBpZiB0ZXN0IC1uICIkYWNfcHJlZml4X3Byb2dyYW0iOyB0aGVuCisgICAgcHJlZml4PWBBU19ESVJOQU1FKFsiJGFjX3ByZWZpeF9wcm9ncmFtIl0pYAorICAgIHByZWZpeD1gQVNfRElSTkFNRShbIiRwcmVmaXgiXSlgCisgIGZpCitmaQorXSkjIEFDX1BSRUZJWF9QUk9HUkFNCisKKworIyBBQ19DT05GSUdfU1JDRElSKFtVTklRVUUtRklMRS1JTi1TT1VSQ0UtRElSXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFVOSVFVRS1GSUxFLUlOLVNPVVJDRS1ESVIgaXMgYSBmaWxlIG5hbWUgdW5pcXVlIHRvIHRoaXMgcGFja2FnZSwKKyMgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSB0aGF0IGNvbmZpZ3VyZSBpcyBpbiwgd2hpY2ggd2UgY2FuIGxvb2sKKyMgZm9yIHRvIGZpbmQgb3V0IGlmIHNyY2RpciBpcyBjb3JyZWN0LgorQUNfREVGVU4oW0FDX0NPTkZJR19TUkNESVJdLAorW200X2RpdmVydF90ZXh0KFtERUZBVUxUU10sIFthY191bmlxdWVfZmlsZT0iJDEiXSldKQorCisKKyMgX0FDX0lOSVRfRElSQ0hFQ0sKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IGFjX3B3ZCwgYW5kIHNhbml0eS1jaGVjayBpdCBhbmQgdGhlIHNvdXJjZSBhbmQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzLgorIworIyAoVGhpcyBtYWNybyBpcyBBQ19SRVFVSVJFZCBieSBfQUNfSU5JVF9TUkNESVIsIHNvIGl0IGhhcyB0byBiZSBBQ19ERUZVTmVkLikKKyMKK0FDX0RFRlVOKFtfQUNfSU5JVF9ESVJDSEVDS10sCitbbTRfZGl2ZXJ0X3B1c2goW1BBUlNFX0FSR1NdKWRubAorCithY19wd2Q9YHB3ZGAgJiYgdGVzdCAtbiAiJGFjX3B3ZCIgJiYKK2FjX2xzX2RpPWBscyAtZGkgLmAgJiYKK2FjX3B3ZF9sc19kaT1gY2QgIiRhY19wd2QiICYmIGxzIC1kaSAuYCB8fAorICBBQ19NU0dfRVJST1IoW3dvcmtpbmcgZGlyZWN0b3J5IGNhbm5vdCBiZSBkZXRlcm1pbmVkXSkKK3Rlc3QgIlgkYWNfbHNfZGkiID0gIlgkYWNfcHdkX2xzX2RpIiB8fAorICBBQ19NU0dfRVJST1IoW3B3ZCBkb2VzIG5vdCByZXBvcnQgbmFtZSBvZiB3b3JraW5nIGRpcmVjdG9yeV0pCisKK200X2RpdmVydF9wb3AoW1BBUlNFX0FSR1NdKWRubAorXSkjIF9BQ19JTklUX0RJUkNIRUNLCisKKyMgX0FDX0lOSVRfU1JDRElSCisjIC0tLS0tLS0tLS0tLS0tLQorIyBDb21wdXRlIGBzcmNkaXInIGJhc2VkIG9uIGAkYWNfdW5pcXVlX2ZpbGUnLgorIworIyAoV2UgaGF2ZSB0byBBQ19ERUZVTiBpdCwgc2luY2Ugd2UgdXNlIEFDX1JFUVVJUkUuKQorIworQUNfREVGVU4oW19BQ19JTklUX1NSQ0RJUl0sCitbQUNfUkVRVUlSRShbX0FDX0lOSVRfRElSQ0hFQ0tdKWRubAorbTRfZGl2ZXJ0X3B1c2goW1BBUlNFX0FSR1NdKWRubAorCisjIEZpbmQgdGhlIHNvdXJjZSBmaWxlcywgaWYgbG9jYXRpb24gd2FzIG5vdCBzcGVjaWZpZWQuCitpZiB0ZXN0IC16ICIkc3JjZGlyIjsgdGhlbgorICBhY19zcmNkaXJfZGVmYXVsdGVkPXllcworICAjIFRyeSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBzY3JpcHQsIHRoZW4gdGhlIHBhcmVudCBkaXJlY3RvcnkuCisgIGFjX2NvbmZkaXI9YEFTX0RJUk5BTUUoWyIkYXNfbXlzZWxmIl0pYAorICBzcmNkaXI9JGFjX2NvbmZkaXIKKyAgaWYgdGVzdCAhIC1yICIkc3JjZGlyLyRhY191bmlxdWVfZmlsZSI7IHRoZW4KKyAgICBzcmNkaXI9Li4KKyAgZmkKK2Vsc2UKKyAgYWNfc3JjZGlyX2RlZmF1bHRlZD1ubworZmkKK2lmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCisgIHRlc3QgIiRhY19zcmNkaXJfZGVmYXVsdGVkIiA9IHllcyAmJiBzcmNkaXI9IiRhY19jb25mZGlyIG9yIC4uIgorICBBQ19NU0dfRVJST1IoW2Nhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4gJHNyY2Rpcl0pCitmaQorYWNfbXNnPSJzb3VyY2VzIGFyZSBpbiAkc3JjZGlyLCBidXQgXGBjZCAkc3JjZGlyJyBkb2VzIG5vdCB3b3JrIgorYWNfYWJzX2NvbmZkaXI9YCgKKwljZCAiJHNyY2RpciIgJiYgdGVzdCAtciAiLi8kYWNfdW5pcXVlX2ZpbGUiIHx8IEFDX01TR19FUlJPUihbJGFjX21zZ10pCisJcHdkKWAKKyMgV2hlbiBidWlsZGluZyBpbiBwbGFjZSwgc2V0IHNyY2Rpcj0uCitpZiB0ZXN0ICIkYWNfYWJzX2NvbmZkaXIiID0gIiRhY19wd2QiOyB0aGVuCisgIHNyY2Rpcj0uCitmaQorIyBSZW1vdmUgdW5uZWNlc3NhcnkgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIHNyY2Rpci4KKyMgRG91YmxlIHNsYXNoZXMgaW4gZmlsZSBuYW1lcyBpbiBvYmplY3QgZmlsZSBkZWJ1Z2dpbmcgaW5mbworIyBtZXNzIHVwIE0teCBnZGIgaW4gRW1hY3MuCitjYXNlICRzcmNkaXIgaW4KKyovKSBzcmNkaXI9YGV4cHIgIlgkc3JjZGlyIiA6ICdYXCguKltbXi9dXVwpJyBcfCAiWCRzcmNkaXIiIDogJ1hcKC4qXCknYDs7Citlc2FjCittNF9kaXZlcnRfcG9wKFtQQVJTRV9BUkdTXSlkbmwKK10pIyBfQUNfSU5JVF9TUkNESVIKKworCisjIF9BQ19JTklUX1BBUlNFX0FSR1MKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfQUNfSU5JVF9QQVJTRV9BUkdTXSwKK1ttNF9kaXZlcnRfcHVzaChbUEFSU0VfQVJHU10pZG5sCisKKyMgSW5pdGlhbGl6ZSBzb21lIHZhcmlhYmxlcyBzZXQgYnkgb3B0aW9ucy4KK2FjX2luaXRfaGVscD0KK2FjX2luaXRfdmVyc2lvbj1mYWxzZQorYWNfdW5yZWNvZ25pemVkX29wdHM9CithY191bnJlY29nbml6ZWRfc2VwPQorIyBUaGUgdmFyaWFibGVzIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgdGhlIG9wdGlvbnMsIHdpdGgKKyMgZGFzaGVzIGNoYW5nZWQgdG8gdW5kZXJsaW5lcy4KK2NhY2hlX2ZpbGU9L2Rldi9udWxsCitBQ19TVUJTVChleGVjX3ByZWZpeCwgTk9ORSlkbmwKK25vX2NyZWF0ZT0KK25vX3JlY3Vyc2lvbj0KK0FDX1NVQlNUKHByZWZpeCwgTk9ORSlkbmwKK3Byb2dyYW1fcHJlZml4PU5PTkUKK3Byb2dyYW1fc3VmZml4PU5PTkUKK0FDX1NVQlNUKHByb2dyYW1fdHJhbnNmb3JtX25hbWUsIFtzLHgseCxdKWRubAorc2lsZW50PQorc2l0ZT0KK3NyY2Rpcj0KK3ZlcmJvc2U9Cit4X2luY2x1ZGVzPU5PTkUKK3hfbGlicmFyaWVzPU5PTkUKKworIyBJbnN0YWxsYXRpb24gZGlyZWN0b3J5IG9wdGlvbnMuCisjIFRoZXNlIGFyZSBsZWZ0IHVuZXhwYW5kZWQgc28gdXNlcnMgY2FuICJtYWtlIGluc3RhbGwgZXhlY19wcmVmaXg9L2ZvbyIKKyMgYW5kIGFsbCB0aGUgdmFyaWFibGVzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIGJhc2VkIG9uIGV4ZWNfcHJlZml4CisjIGJ5IGRlZmF1bHQgd2lsbCBhY3R1YWxseSBjaGFuZ2UuCisjIFVzZSBicmFjZXMgaW5zdGVhZCBvZiBwYXJlbnMgYmVjYXVzZSBzaCwgcGVybCwgZXRjLiBhbHNvIGFjY2VwdCB0aGVtLgorIyAoVGhlIGxpc3QgZm9sbG93cyB0aGUgc2FtZSBvcmRlciBhcyB0aGUgR05VIENvZGluZyBTdGFuZGFyZHMuKQorQUNfU1VCU1QoW2JpbmRpcl0sICAgICAgICAgWycke2V4ZWNfcHJlZml4fS9iaW4nXSlkbmwKK0FDX1NVQlNUKFtzYmluZGlyXSwgICAgICAgIFsnJHtleGVjX3ByZWZpeH0vc2JpbiddKWRubAorQUNfU1VCU1QoW2xpYmV4ZWNkaXJdLCAgICAgWycke2V4ZWNfcHJlZml4fS9saWJleGVjJ10pZG5sCitBQ19TVUJTVChbZGF0YXJvb3RkaXJdLCAgICBbJyR7cHJlZml4fS9zaGFyZSddKWRubAorQUNfU1VCU1QoW2RhdGFkaXJdLCAgICAgICAgWycke2RhdGFyb290ZGlyfSddKWRubAorQUNfU1VCU1QoW3N5c2NvbmZkaXJdLCAgICAgWycke3ByZWZpeH0vZXRjJ10pZG5sCitBQ19TVUJTVChbc2hhcmVkc3RhdGVkaXJdLCBbJyR7cHJlZml4fS9jb20nXSlkbmwKK0FDX1NVQlNUKFtsb2NhbHN0YXRlZGlyXSwgIFsnJHtwcmVmaXh9L3ZhciddKWRubAorQUNfU1VCU1QoW2luY2x1ZGVkaXJdLCAgICAgWycke3ByZWZpeH0vaW5jbHVkZSddKWRubAorQUNfU1VCU1QoW29sZGluY2x1ZGVkaXJdLCAgWycvdXNyL2luY2x1ZGUnXSlkbmwKK0FDX1NVQlNUKFtkb2NkaXJdLCAgICAgICAgIFttNF9pZnNldChbQUNfUEFDS0FHRV9UQVJOQU1FXSwKKwkJCQkgICAgIFsnJHtkYXRhcm9vdGRpcn0vZG9jLyR7UEFDS0FHRV9UQVJOQU1FfSddLAorCQkJCSAgICAgWycke2RhdGFyb290ZGlyfS9kb2MvJHtQQUNLQUdFfSddKV0pZG5sCitBQ19TVUJTVChbaW5mb2Rpcl0sICAgICAgICBbJyR7ZGF0YXJvb3RkaXJ9L2luZm8nXSlkbmwKK0FDX1NVQlNUKFtodG1sZGlyXSwgICAgICAgIFsnJHtkb2NkaXJ9J10pZG5sCitBQ19TVUJTVChbZHZpZGlyXSwgICAgICAgICBbJyR7ZG9jZGlyfSddKWRubAorQUNfU1VCU1QoW3BkZmRpcl0sICAgICAgICAgWycke2RvY2Rpcn0nXSlkbmwKK0FDX1NVQlNUKFtwc2Rpcl0sICAgICAgICAgIFsnJHtkb2NkaXJ9J10pZG5sCitBQ19TVUJTVChbbGliZGlyXSwgICAgICAgICBbJyR7ZXhlY19wcmVmaXh9L2xpYiddKWRubAorQUNfU1VCU1QoW2xvY2FsZWRpcl0sICAgICAgWycke2RhdGFyb290ZGlyfS9sb2NhbGUnXSlkbmwKK0FDX1NVQlNUKFttYW5kaXJdLCAgICAgICAgIFsnJHtkYXRhcm9vdGRpcn0vbWFuJ10pZG5sCisKK2FjX3ByZXY9CithY19kYXNoZGFzaD0KK2ZvciBhY19vcHRpb24KK2RvCisgICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudCwgYXNzaWduIGl0LgorICBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKyAgICBldmFsICRhY19wcmV2PVwkYWNfb3B0aW9uCisgICAgYWNfcHJldj0KKyAgICBjb250aW51ZQorICBmaQorCisgIGNhc2UgJGFjX29wdGlvbiBpbgorICAqPSopCWFjX29wdGFyZz1gZXhwciAiWCRhY19vcHRpb24iIDogJ1tbXj1dXSo9XCguKlwpJ2AgOzsKKyAgKikJYWNfb3B0YXJnPXllcyA7OworICBlc2FjCisKKyAgIyBBY2NlcHQgdGhlIGltcG9ydGFudCBDeWdudXMgY29uZmlndXJlIG9wdGlvbnMsIHNvIHdlIGNhbiBkaWFnbm9zZSB0eXBvcy4KKworICBjYXNlICRhY19kYXNoZGFzaCRhY19vcHRpb24gaW4KKyAgLS0pCisgICAgYWNfZGFzaGRhc2g9eWVzIDs7CisKKyAgLWJpbmRpciB8IC0tYmluZGlyIHwgLS1iaW5kaSB8IC0tYmluZCB8IC0tYmluIHwgLS1iaSkKKyAgICBhY19wcmV2PWJpbmRpciA7OworICAtYmluZGlyPSogfCAtLWJpbmRpcj0qIHwgLS1iaW5kaT0qIHwgLS1iaW5kPSogfCAtLWJpbj0qIHwgLS1iaT0qKQorICAgIGJpbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWJ1aWxkIHwgLS1idWlsZCB8IC0tYnVpbCB8IC0tYnVpIHwgLS1idSkKKyAgICBhY19wcmV2PWJ1aWxkX2FsaWFzIDs7CisgIC1idWlsZD0qIHwgLS1idWlsZD0qIHwgLS1idWlsPSogfCAtLWJ1aT0qIHwgLS1idT0qKQorICAgIGJ1aWxkX2FsaWFzPSRhY19vcHRhcmcgOzsKKworICAtY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsIHwgLS1jYWNoZS1maSBcCisgIHwgLS1jYWNoZS1mIHwgLS1jYWNoZS0gfCAtLWNhY2hlIHwgLS1jYWNoIHwgLS1jYWMgfCAtLWNhIHwgLS1jKQorICAgIGFjX3ByZXY9Y2FjaGVfZmlsZSA7OworICAtY2FjaGUtZmlsZT0qIHwgLS1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbD0qIHwgLS1jYWNoZS1maT0qIFwKKyAgfCAtLWNhY2hlLWY9KiB8IC0tY2FjaGUtPSogfCAtLWNhY2hlPSogfCAtLWNhY2g9KiB8IC0tY2FjPSogfCAtLWNhPSogfCAtLWM9KikKKyAgICBjYWNoZV9maWxlPSRhY19vcHRhcmcgOzsKKworICAtLWNvbmZpZy1jYWNoZSB8IC1DKQorICAgIGNhY2hlX2ZpbGU9Y29uZmlnLmNhY2hlIDs7CisKKyAgLWRhdGFkaXIgfCAtLWRhdGFkaXIgfCAtLWRhdGFkaSB8IC0tZGF0YWQpCisgICAgYWNfcHJldj1kYXRhZGlyIDs7CisgIC1kYXRhZGlyPSogfCAtLWRhdGFkaXI9KiB8IC0tZGF0YWRpPSogfCAtLWRhdGFkPSopCisgICAgZGF0YWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWRhdGFyb290ZGlyIHwgLS1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaSB8IC0tZGF0YXJvb3RkIHwgLS1kYXRhcm9vdCBcCisgIHwgLS1kYXRhcm9vIHwgLS1kYXRhcm8gfCAtLWRhdGFyKQorICAgIGFjX3ByZXY9ZGF0YXJvb3RkaXIgOzsKKyAgLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGk9KiB8IC0tZGF0YXJvb3RkPSogXAorICB8IC0tZGF0YXJvb3Q9KiB8IC0tZGF0YXJvbz0qIHwgLS1kYXRhcm89KiB8IC0tZGF0YXI9KikKKyAgICBkYXRhcm9vdGRpcj0kYWNfb3B0YXJnIDs7CisKKyAgX0FDX0lOSVRfUEFSU0VfRU5BQkxFKFtkaXNhYmxlXSkKKworICAtZG9jZGlyIHwgLS1kb2NkaXIgfCAtLWRvY2RpIHwgLS1kb2MgfCAtLWRvKQorICAgIGFjX3ByZXY9ZG9jZGlyIDs7CisgIC1kb2NkaXI9KiB8IC0tZG9jZGlyPSogfCAtLWRvY2RpPSogfCAtLWRvYz0qIHwgLS1kbz0qKQorICAgIGRvY2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWR2aWRpciB8IC0tZHZpZGlyIHwgLS1kdmlkaSB8IC0tZHZpZCB8IC0tZHZpIHwgLS1kdikKKyAgICBhY19wcmV2PWR2aWRpciA7OworICAtZHZpZGlyPSogfCAtLWR2aWRpcj0qIHwgLS1kdmlkaT0qIHwgLS1kdmlkPSogfCAtLWR2aT0qIHwgLS1kdj0qKQorICAgIGR2aWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgX0FDX0lOSVRfUEFSU0VfRU5BQkxFKFtlbmFibGVdKQorCisgIC1leGVjLXByZWZpeCB8IC0tZXhlY19wcmVmaXggfCAtLWV4ZWMtcHJlZml4IHwgLS1leGVjLXByZWZpIFwKKyAgfCAtLWV4ZWMtcHJlZiB8IC0tZXhlYy1wcmUgfCAtLWV4ZWMtcHIgfCAtLWV4ZWMtcCB8IC0tZXhlYy0gXAorICB8IC0tZXhlYyB8IC0tZXhlIHwgLS1leCkKKyAgICBhY19wcmV2PWV4ZWNfcHJlZml4IDs7CisgIC1leGVjLXByZWZpeD0qIHwgLS1leGVjX3ByZWZpeD0qIHwgLS1leGVjLXByZWZpeD0qIHwgLS1leGVjLXByZWZpPSogXAorICB8IC0tZXhlYy1wcmVmPSogfCAtLWV4ZWMtcHJlPSogfCAtLWV4ZWMtcHI9KiB8IC0tZXhlYy1wPSogfCAtLWV4ZWMtPSogXAorICB8IC0tZXhlYz0qIHwgLS1leGU9KiB8IC0tZXg9KikKKyAgICBleGVjX3ByZWZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLWdhcyB8IC0tZ2FzIHwgLS1nYSB8IC0tZykKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLWdhcy4KKyAgICB3aXRoX2dhcz15ZXMgOzsKKworICAtaGVscCB8IC0taGVscCB8IC0taGVsIHwgLS1oZSB8IC1oKQorICAgIGFjX2luaXRfaGVscD1sb25nIDs7CisgIC1oZWxwPXIqIHwgLS1oZWxwPXIqIHwgLS1oZWw9ciogfCAtLWhlPXIqIHwgLWhyKikKKyAgICBhY19pbml0X2hlbHA9cmVjdXJzaXZlIDs7CisgIC1oZWxwPXMqIHwgLS1oZWxwPXMqIHwgLS1oZWw9cyogfCAtLWhlPXMqIHwgLWhzKikKKyAgICBhY19pbml0X2hlbHA9c2hvcnQgOzsKKworICAtaG9zdCB8IC0taG9zdCB8IC0taG9zIHwgLS1obykKKyAgICBhY19wcmV2PWhvc3RfYWxpYXMgOzsKKyAgLWhvc3Q9KiB8IC0taG9zdD0qIHwgLS1ob3M9KiB8IC0taG89KikKKyAgICBob3N0X2FsaWFzPSRhY19vcHRhcmcgOzsKKworICAtaHRtbGRpciB8IC0taHRtbGRpciB8IC0taHRtbGRpIHwgLS1odG1sZCB8IC0taHRtbCB8IC0taHRtIHwgLS1odCkKKyAgICBhY19wcmV2PWh0bWxkaXIgOzsKKyAgLWh0bWxkaXI9KiB8IC0taHRtbGRpcj0qIHwgLS1odG1sZGk9KiB8IC0taHRtbGQ9KiB8IC0taHRtbD0qIHwgLS1odG09KiBcCisgIHwgLS1odD0qKQorICAgIGh0bWxkaXI9JGFjX29wdGFyZyA7OworCisgIC1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGkgfCAtLWluY2x1ZGVkIHwgLS1pbmNsdWRlIFwKKyAgfCAtLWluY2x1ZCB8IC0taW5jbHUgfCAtLWluY2wgfCAtLWluYykKKyAgICBhY19wcmV2PWluY2x1ZGVkaXIgOzsKKyAgLWluY2x1ZGVkaXI9KiB8IC0taW5jbHVkZWRpcj0qIHwgLS1pbmNsdWRlZGk9KiB8IC0taW5jbHVkZWQ9KiB8IC0taW5jbHVkZT0qIFwKKyAgfCAtLWluY2x1ZD0qIHwgLS1pbmNsdT0qIHwgLS1pbmNsPSogfCAtLWluYz0qKQorICAgIGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1pbmZvZGlyIHwgLS1pbmZvZGlyIHwgLS1pbmZvZGkgfCAtLWluZm9kIHwgLS1pbmZvIHwgLS1pbmYpCisgICAgYWNfcHJldj1pbmZvZGlyIDs7CisgIC1pbmZvZGlyPSogfCAtLWluZm9kaXI9KiB8IC0taW5mb2RpPSogfCAtLWluZm9kPSogfCAtLWluZm89KiB8IC0taW5mPSopCisgICAgaW5mb2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxpYmRpciB8IC0tbGliZGlyIHwgLS1saWJkaSB8IC0tbGliZCkKKyAgICBhY19wcmV2PWxpYmRpciA7OworICAtbGliZGlyPSogfCAtLWxpYmRpcj0qIHwgLS1saWJkaT0qIHwgLS1saWJkPSopCisgICAgbGliZGlyPSRhY19vcHRhcmcgOzsKKworICAtbGliZXhlY2RpciB8IC0tbGliZXhlY2RpciB8IC0tbGliZXhlY2RpIHwgLS1saWJleGVjZCB8IC0tbGliZXhlYyBcCisgIHwgLS1saWJleGUgfCAtLWxpYmV4IHwgLS1saWJlKQorICAgIGFjX3ByZXY9bGliZXhlY2RpciA7OworICAtbGliZXhlY2Rpcj0qIHwgLS1saWJleGVjZGlyPSogfCAtLWxpYmV4ZWNkaT0qIHwgLS1saWJleGVjZD0qIHwgLS1saWJleGVjPSogXAorICB8IC0tbGliZXhlPSogfCAtLWxpYmV4PSogfCAtLWxpYmU9KikKKyAgICBsaWJleGVjZGlyPSRhY19vcHRhcmcgOzsKKworICAtbG9jYWxlZGlyIHwgLS1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpIHwgLS1sb2NhbGVkIHwgLS1sb2NhbGUpCisgICAgYWNfcHJldj1sb2NhbGVkaXIgOzsKKyAgLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaXI9KiB8IC0tbG9jYWxlZGk9KiB8IC0tbG9jYWxlZD0qIHwgLS1sb2NhbGU9KikKKyAgICBsb2NhbGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1sb2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGkgfCAtLWxvY2Fsc3RhdGVkIFwKKyAgfCAtLWxvY2Fsc3RhdGUgfCAtLWxvY2Fsc3RhdCB8IC0tbG9jYWxzdGEgfCAtLWxvY2Fsc3QgfCAtLWxvY2FscykKKyAgICBhY19wcmV2PWxvY2Fsc3RhdGVkaXIgOzsKKyAgLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGk9KiB8IC0tbG9jYWxzdGF0ZWQ9KiBcCisgIHwgLS1sb2NhbHN0YXRlPSogfCAtLWxvY2Fsc3RhdD0qIHwgLS1sb2NhbHN0YT0qIHwgLS1sb2NhbHN0PSogfCAtLWxvY2Fscz0qKQorICAgIGxvY2Fsc3RhdGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1tYW5kaXIgfCAtLW1hbmRpciB8IC0tbWFuZGkgfCAtLW1hbmQgfCAtLW1hbiB8IC0tbWEgfCAtLW0pCisgICAgYWNfcHJldj1tYW5kaXIgOzsKKyAgLW1hbmRpcj0qIHwgLS1tYW5kaXI9KiB8IC0tbWFuZGk9KiB8IC0tbWFuZD0qIHwgLS1tYW49KiB8IC0tbWE9KiB8IC0tbT0qKQorICAgIG1hbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLW5mcCB8IC0tbmZwIHwgLS1uZikKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRob3V0LWZwLgorICAgIHdpdGhfZnA9bm8gOzsKKworICAtbm8tY3JlYXRlIHwgLS1uby1jcmVhdGUgfCAtLW5vLWNyZWF0IHwgLS1uby1jcmVhIHwgLS1uby1jcmUgXAorICB8IC0tbm8tY3IgfCAtLW5vLWMgfCAtbikKKyAgICBub19jcmVhdGU9eWVzIDs7CisKKyAgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpbyB8IC0tbm8tcmVjdXJzaSBcCisgIHwgLS1uby1yZWN1cnMgfCAtLW5vLXJlY3VyIHwgLS1uby1yZWN1IHwgLS1uby1yZWMgfCAtLW5vLXJlIHwgLS1uby1yKQorICAgIG5vX3JlY3Vyc2lvbj15ZXMgOzsKKworICAtb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpIHwgLS1vbGRpbmNsdWRlZCBcCisgIHwgLS1vbGRpbmNsdWRlIHwgLS1vbGRpbmNsdWQgfCAtLW9sZGluY2x1IHwgLS1vbGRpbmNsIHwgLS1vbGRpbmMgXAorICB8IC0tb2xkaW4gfCAtLW9sZGkgfCAtLW9sZCB8IC0tb2wgfCAtLW8pCisgICAgYWNfcHJldj1vbGRpbmNsdWRlZGlyIDs7CisgIC1vbGRpbmNsdWRlZGlyPSogfCAtLW9sZGluY2x1ZGVkaXI9KiB8IC0tb2xkaW5jbHVkZWRpPSogfCAtLW9sZGluY2x1ZGVkPSogXAorICB8IC0tb2xkaW5jbHVkZT0qIHwgLS1vbGRpbmNsdWQ9KiB8IC0tb2xkaW5jbHU9KiB8IC0tb2xkaW5jbD0qIHwgLS1vbGRpbmM9KiBcCisgIHwgLS1vbGRpbj0qIHwgLS1vbGRpPSogfCAtLW9sZD0qIHwgLS1vbD0qIHwgLS1vPSopCisgICAgb2xkaW5jbHVkZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXByZWZpeCB8IC0tcHJlZml4IHwgLS1wcmVmaSB8IC0tcHJlZiB8IC0tcHJlIHwgLS1wciB8IC0tcCkKKyAgICBhY19wcmV2PXByZWZpeCA7OworICAtcHJlZml4PSogfCAtLXByZWZpeD0qIHwgLS1wcmVmaT0qIHwgLS1wcmVmPSogfCAtLXByZT0qIHwgLS1wcj0qIHwgLS1wPSopCisgICAgcHJlZml4PSRhY19vcHRhcmcgOzsKKworICAtcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dyYW0tcHJlZml4IHwgLS1wcm9ncmFtLXByZWZpIHwgLS1wcm9ncmFtLXByZWYgXAorICB8IC0tcHJvZ3JhbS1wcmUgfCAtLXByb2dyYW0tcHIgfCAtLXByb2dyYW0tcCkKKyAgICBhY19wcmV2PXByb2dyYW1fcHJlZml4IDs7CisgIC1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpPSogXAorICB8IC0tcHJvZ3JhbS1wcmVmPSogfCAtLXByb2dyYW0tcHJlPSogfCAtLXByb2dyYW0tcHI9KiB8IC0tcHJvZ3JhbS1wPSopCisgICAgcHJvZ3JhbV9wcmVmaXg9JGFjX29wdGFyZyA7OworCisgIC1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaXggfCAtLXByb2dyYW0tc3VmZmkgfCAtLXByb2dyYW0tc3VmZiBcCisgIHwgLS1wcm9ncmFtLXN1ZiB8IC0tcHJvZ3JhbS1zdSB8IC0tcHJvZ3JhbS1zKQorICAgIGFjX3ByZXY9cHJvZ3JhbV9zdWZmaXggOzsKKyAgLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZmk9KiBcCisgIHwgLS1wcm9ncmFtLXN1ZmY9KiB8IC0tcHJvZ3JhbS1zdWY9KiB8IC0tcHJvZ3JhbS1zdT0qIHwgLS1wcm9ncmFtLXM9KikKKyAgICBwcm9ncmFtX3N1ZmZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS0gXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0gfCAtLXByb2dyYW0tdHJhbnNmb3IgXAorICB8IC0tcHJvZ3JhbS10cmFuc2ZvIHwgLS1wcm9ncmFtLXRyYW5zZiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zIHwgLS1wcm9ncmFtLXRyYW4gXAorICB8IC0tcHJvZ3ItdHJhIHwgLS1wcm9ncmFtLXRyIHwgLS1wcm9ncmFtLXQpCisgICAgYWNfcHJldj1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lIDs7CisgIC1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW09KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmE9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtPSogfCAtLXByb2dyYW0tdHJhbnNmb3I9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm89KiB8IC0tcHJvZ3JhbS10cmFuc2Y9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zPSogfCAtLXByb2dyYW0tdHJhbj0qIFwKKyAgfCAtLXByb2dyLXRyYT0qIHwgLS1wcm9ncmFtLXRyPSogfCAtLXByb2dyYW0tdD0qKQorICAgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9JGFjX29wdGFyZyA7OworCisgIC1wZGZkaXIgfCAtLXBkZmRpciB8IC0tcGRmZGkgfCAtLXBkZmQgfCAtLXBkZiB8IC0tcGQpCisgICAgYWNfcHJldj1wZGZkaXIgOzsKKyAgLXBkZmRpcj0qIHwgLS1wZGZkaXI9KiB8IC0tcGRmZGk9KiB8IC0tcGRmZD0qIHwgLS1wZGY9KiB8IC0tcGQ9KikKKyAgICBwZGZkaXI9JGFjX29wdGFyZyA7OworCisgIC1wc2RpciB8IC0tcHNkaXIgfCAtLXBzZGkgfCAtLXBzZCB8IC0tcHMpCisgICAgYWNfcHJldj1wc2RpciA7OworICAtcHNkaXI9KiB8IC0tcHNkaXI9KiB8IC0tcHNkaT0qIHwgLS1wc2Q9KiB8IC0tcHM9KikKKyAgICBwc2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCisgICAgc2lsZW50PXllcyA7OworCisgIC1zYmluZGlyIHwgLS1zYmluZGlyIHwgLS1zYmluZGkgfCAtLXNiaW5kIHwgLS1zYmluIHwgLS1zYmkgfCAtLXNiKQorICAgIGFjX3ByZXY9c2JpbmRpciA7OworICAtc2JpbmRpcj0qIHwgLS1zYmluZGlyPSogfCAtLXNiaW5kaT0qIHwgLS1zYmluZD0qIHwgLS1zYmluPSogXAorICB8IC0tc2JpPSogfCAtLXNiPSopCisgICAgc2JpbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXNoYXJlZHN0YXRlZGlyIHwgLS1zaGFyZWRzdGF0ZWRpciB8IC0tc2hhcmVkc3RhdGVkaSBcCisgIHwgLS1zaGFyZWRzdGF0ZWQgfCAtLXNoYXJlZHN0YXRlIHwgLS1zaGFyZWRzdGF0IHwgLS1zaGFyZWRzdGEgXAorICB8IC0tc2hhcmVkc3QgfCAtLXNoYXJlZHMgfCAtLXNoYXJlZCB8IC0tc2hhcmUgfCAtLXNoYXIgXAorICB8IC0tc2hhIHwgLS1zaCkKKyAgICBhY19wcmV2PXNoYXJlZHN0YXRlZGlyIDs7CisgIC1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpPSogXAorICB8IC0tc2hhcmVkc3RhdGVkPSogfCAtLXNoYXJlZHN0YXRlPSogfCAtLXNoYXJlZHN0YXQ9KiB8IC0tc2hhcmVkc3RhPSogXAorICB8IC0tc2hhcmVkc3Q9KiB8IC0tc2hhcmVkcz0qIHwgLS1zaGFyZWQ9KiB8IC0tc2hhcmU9KiB8IC0tc2hhcj0qIFwKKyAgfCAtLXNoYT0qIHwgLS1zaD0qKQorICAgIHNoYXJlZHN0YXRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtc2l0ZSB8IC0tc2l0ZSB8IC0tc2l0KQorICAgIGFjX3ByZXY9c2l0ZSA7OworICAtc2l0ZT0qIHwgLS1zaXRlPSogfCAtLXNpdD0qKQorICAgIHNpdGU9JGFjX29wdGFyZyA7OworCisgIC1zcmNkaXIgfCAtLXNyY2RpciB8IC0tc3JjZGkgfCAtLXNyY2QgfCAtLXNyYyB8IC0tc3IpCisgICAgYWNfcHJldj1zcmNkaXIgOzsKKyAgLXNyY2Rpcj0qIHwgLS1zcmNkaXI9KiB8IC0tc3JjZGk9KiB8IC0tc3JjZD0qIHwgLS1zcmM9KiB8IC0tc3I9KikKKyAgICBzcmNkaXI9JGFjX29wdGFyZyA7OworCisgIC1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGkgfCAtLXN5c2NvbmZkIHwgLS1zeXNjb25mIFwKKyAgfCAtLXN5c2NvbiB8IC0tc3lzY28gfCAtLXN5c2MgfCAtLXN5cyB8IC0tc3kpCisgICAgYWNfcHJldj1zeXNjb25mZGlyIDs7CisgIC1zeXNjb25mZGlyPSogfCAtLXN5c2NvbmZkaXI9KiB8IC0tc3lzY29uZmRpPSogfCAtLXN5c2NvbmZkPSogfCAtLXN5c2NvbmY9KiBcCisgIHwgLS1zeXNjb249KiB8IC0tc3lzY289KiB8IC0tc3lzYz0qIHwgLS1zeXM9KiB8IC0tc3k9KikKKyAgICBzeXNjb25mZGlyPSRhY19vcHRhcmcgOzsKKworICAtdGFyZ2V0IHwgLS10YXJnZXQgfCAtLXRhcmdlIHwgLS10YXJnIHwgLS10YXIgfCAtLXRhIHwgLS10KQorICAgIGFjX3ByZXY9dGFyZ2V0X2FsaWFzIDs7CisgIC10YXJnZXQ9KiB8IC0tdGFyZ2V0PSogfCAtLXRhcmdlPSogfCAtLXRhcmc9KiB8IC0tdGFyPSogfCAtLXRhPSogfCAtLXQ9KikKKyAgICB0YXJnZXRfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC12IHwgLXZlcmJvc2UgfCAtLXZlcmJvc2UgfCAtLXZlcmJvcyB8IC0tdmVyYm8gfCAtLXZlcmIpCisgICAgdmVyYm9zZT15ZXMgOzsKKworICAtdmVyc2lvbiB8IC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC1WKQorICAgIGFjX2luaXRfdmVyc2lvbj06IDs7CisKKyAgX0FDX0lOSVRfUEFSU0VfRU5BQkxFKFt3aXRoXSkKKworICBfQUNfSU5JVF9QQVJTRV9FTkFCTEUoW3dpdGhvdXRdKQorCisgIC0teCkKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLXguCisgICAgd2l0aF94PXllcyA7OworCisgIC14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGUgfCAtLXgtaW5jbHVkIHwgLS14LWluY2x1IFwKKyAgfCAtLXgtaW5jbCB8IC0teC1pbmMgfCAtLXgtaW4gfCAtLXgtaSkKKyAgICBhY19wcmV2PXhfaW5jbHVkZXMgOzsKKyAgLXgtaW5jbHVkZXM9KiB8IC0teC1pbmNsdWRlcz0qIHwgLS14LWluY2x1ZGU9KiB8IC0teC1pbmNsdWQ9KiB8IC0teC1pbmNsdT0qIFwKKyAgfCAtLXgtaW5jbD0qIHwgLS14LWluYz0qIHwgLS14LWluPSogfCAtLXgtaT0qKQorICAgIHhfaW5jbHVkZXM9JGFjX29wdGFyZyA7OworCisgIC14LWxpYnJhcmllcyB8IC0teC1saWJyYXJpZXMgfCAtLXgtbGlicmFyaWUgfCAtLXgtbGlicmFyaSBcCisgIHwgLS14LWxpYnJhciB8IC0teC1saWJyYSB8IC0teC1saWJyIHwgLS14LWxpYiB8IC0teC1saSB8IC0teC1sKQorICAgIGFjX3ByZXY9eF9saWJyYXJpZXMgOzsKKyAgLXgtbGlicmFyaWVzPSogfCAtLXgtbGlicmFyaWVzPSogfCAtLXgtbGlicmFyaWU9KiB8IC0teC1saWJyYXJpPSogXAorICB8IC0teC1saWJyYXI9KiB8IC0teC1saWJyYT0qIHwgLS14LWxpYnI9KiB8IC0teC1saWI9KiB8IC0teC1saT0qIHwgLS14LWw9KikKKyAgICB4X2xpYnJhcmllcz0kYWNfb3B0YXJnIDs7CisKKyAgLSopIEFDX01TR19FUlJPUihbdW5yZWNvZ25pemVkIG9wdGlvbjogYCRhY19vcHRpb24nCitUcnkgYCRbMF0gLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5dKQorICAgIDs7CisKKyAgKj0qKQorICAgIGFjX2VudnZhcj1gZXhwciAieCRhY19vcHRpb24iIDogJ3hcKFtbXj1dXSpcKT0nYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBjYXNlICRhY19lbnZ2YXIgaW4gIygKKyAgICAgICcnIHwgW1swLTldXSogfCAqW1shXyRhc19jcl9hbG51bV1dKiApCisgICAgICBBQ19NU0dfRVJST1IoW2ludmFsaWQgdmFyaWFibGUgbmFtZTogYCRhY19lbnZ2YXInXSkgOzsKKyAgICBlc2FjCisgICAgZXZhbCAkYWNfZW52dmFyPVwkYWNfb3B0YXJnCisgICAgZXhwb3J0ICRhY19lbnZ2YXIgOzsKKworICAqKQorICAgICMgRklYTUU6IHNob3VsZCBiZSByZW1vdmVkIGluIGF1dG9jb25mIDMuMC4KKyAgICBBQ19NU0dfV0FSTihbeW91IHNob3VsZCB1c2UgLS1idWlsZCwgLS1ob3N0LCAtLXRhcmdldF0pCisgICAgZXhwciAieCRhY19vcHRpb24iIDogIlsuKlteLS5fJGFzX2NyX2FsbnVtXV0iID4vZGV2L251bGwgJiYKKyAgICAgIEFDX01TR19XQVJOKFtpbnZhbGlkIGhvc3QgdHlwZTogJGFjX29wdGlvbl0pCisgICAgOiAke2J1aWxkX2FsaWFzPSRhY19vcHRpb259ICR7aG9zdF9hbGlhcz0kYWNfb3B0aW9ufSAke3RhcmdldF9hbGlhcz0kYWNfb3B0aW9ufQorICAgIDs7CisKKyAgZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKyAgYWNfb3B0aW9uPS0tYGVjaG8gJGFjX3ByZXYgfCBzZWQgJ3MvXy8tL2cnYAorICBBQ19NU0dfRVJST1IoW21pc3NpbmcgYXJndW1lbnQgdG8gJGFjX29wdGlvbl0pCitmaQorCitpZiB0ZXN0IC1uICIkYWNfdW5yZWNvZ25pemVkX29wdHMiOyB0aGVuCisgIGNhc2UgJGVuYWJsZV9vcHRpb25fY2hlY2tpbmcgaW4KKyAgICBubykgOzsKKyAgICBmYXRhbCkgQUNfTVNHX0VSUk9SKFt1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzXSkgOzsKKyAgICAqKSAgICAgQUNfTVNHX1dBUk4oIFt1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzXSkgOzsKKyAgZXNhYworZmkKKworIyBDaGVjayBhbGwgZGlyZWN0b3J5IGFyZ3VtZW50cyBmb3IgY29uc2lzdGVuY3kuCitmb3IgYWNfdmFyIGluCWV4ZWNfcHJlZml4IHByZWZpeCBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFyb290ZGlyIFwKKwkJZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgaW5jbHVkZWRpciBcCisJCW9sZGluY2x1ZGVkaXIgZG9jZGlyIGluZm9kaXIgaHRtbGRpciBkdmlkaXIgcGRmZGlyIHBzZGlyIFwKKwkJbGliZGlyIGxvY2FsZWRpciBtYW5kaXIKK2RvCisgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAjIFJlbW92ZSB0cmFpbGluZyBzbGFzaGVzLgorICBjYXNlICRhY192YWwgaW4KKyAgICAqLyApCisgICAgICBhY192YWw9YGV4cHIgIlgkYWNfdmFsIiA6ICdYXCguKltbXi9dXVwpJyBcfCAiWCRhY192YWwiIDogJ1hcKC4qXCknYAorICAgICAgZXZhbCAkYWNfdmFyPVwkYWNfdmFsOzsKKyAgZXNhYworICAjIEJlIHN1cmUgdG8gaGF2ZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZXMuCisgIGNhc2UgJGFjX3ZhbCBpbgorICAgIFtbXFwvJF1dKiB8ID86W1tcXC9dXSogKSAgY29udGludWU7OworICAgIE5PTkUgfCAnJyApIGNhc2UgJGFjX3ZhciBpbiAqcHJlZml4ICkgY29udGludWU7OyBlc2FjOzsKKyAgZXNhYworICBBQ19NU0dfRVJST1IoW2V4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWxdKQorZG9uZQorCisjIFRoZXJlIG1pZ2h0IGJlIHBlb3BsZSB3aG8gZGVwZW5kIG9uIHRoZSBvbGQgYnJva2VuIGJlaGF2aW9yOiBgJGhvc3QnCisjIHVzZWQgdG8gaG9sZCB0aGUgYXJndW1lbnQgb2YgLS1ob3N0IGV0Yy4KKyMgRklYTUU6IFRvIHJlbW92ZSBzb21lIGRheS4KK2J1aWxkPSRidWlsZF9hbGlhcworaG9zdD0kaG9zdF9hbGlhcwordGFyZ2V0PSR0YXJnZXRfYWxpYXMKKworIyBGSVhNRTogVG8gcmVtb3ZlIHNvbWUgZGF5LgoraWYgdGVzdCAieCRob3N0X2FsaWFzIiAhPSB4OyB0aGVuCisgIGlmIHRlc3QgIngkYnVpbGRfYWxpYXMiID0geDsgdGhlbgorICAgIGNyb3NzX2NvbXBpbGluZz1tYXliZQorICAgIEFDX01TR19XQVJOKFtJZiB5b3Ugd2FudGVkIHRvIHNldCB0aGUgLS1idWlsZCB0eXBlLCBkb24ndCB1c2UgLS1ob3N0LgorICAgIElmIGEgY3Jvc3MgY29tcGlsZXIgaXMgZGV0ZWN0ZWQgdGhlbiBjcm9zcyBjb21waWxlIG1vZGUgd2lsbCBiZSB1c2VkLl0pCisgIGVsaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgIT0gIngkaG9zdF9hbGlhcyI7IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9eWVzCisgIGZpCitmaQorCithY190b29sX3ByZWZpeD0KK3Rlc3QgLW4gIiRob3N0X2FsaWFzIiAmJiBhY190b29sX3ByZWZpeD0kaG9zdF9hbGlhcy0KKwordGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYgZXhlYyBBU19NRVNTQUdFX0ZEPi9kZXYvbnVsbAorCittNF9kaXZlcnRfcG9wKFtQQVJTRV9BUkdTXSlkbmwKK10pIyBfQUNfSU5JVF9QQVJTRV9BUkdTCisKKworIyBfQUNfSU5JVF9QQVJTRV9FTkFCTEUoT1BUSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQSB0cml2aWFsIGZyb250LWVuZCBmb3IgX0FDX0lOSVRfUEFSU0VfRU5BQkxFMi4KKyMKK200X2RlZmluZShbX0FDX0lOSVRfUEFSU0VfRU5BQkxFXSwKK1ttNF9ibWF0Y2goWyQxXSwgW153aXRoXSwKKwkgICBbX0FDX0lOSVRfUEFSU0VfRU5BQkxFMihbJDFdLCBbd2l0aF0pXSwKKwkgICBbX0FDX0lOSVRfUEFSU0VfRU5BQkxFMihbJDFdLCBbZW5hYmxlXSldKV0pCisKKworIyBfQUNfSU5JVF9QQVJTRV9FTkFCTEUyKE9QVElPTi1OQU1FLCBQT1NJVElWRS1OQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBIYW5kbGUgYW4gYC0tZW5hYmxlJyBvciBhIGAtLXdpdGgnIG9wdGlvbi4KKyMKKyMgT1BUSU9OLU5BTUUgaXMgYGVuYWJsZScsIGBkaXNhYmxlJywgYHdpdGgnLCBvciBgd2l0aG91dCcuCisjIFBPU0lUSVZFLU5BTUUgaXMgdGhlIGNvcnJlc3BvbmRpbmcgcG9zaXRpdmUgdmFyaWFudCwgaS5lLiBgZW5hYmxlJyBvciBgd2l0aCcuCisjCisjIFBvc2l0aXZlIHZhcmlhbnQgb2YgdGhlIG9wdGlvbiBpcyByZWNvZ25pemVkIGJ5IHRoZSBjb25kaXRpb24KKyMJT1BUSU9OLU5BTUUgPT0gUE9TSVRJVkUtTkFNRSAuCisjCittNF9kZWZpbmUoW19BQ19JTklUX1BBUlNFX0VOQUJMRTJdLAorWy0kMS0qIHwgLS0kMS0qKQorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSokMS1cKG00X2lmKFskMV0sIFskMl0sIFtbW149XV1dLCBbLl0pKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICJbLipbXi0rLl8kYXNfY3JfYWxudW1dXSIgPi9kZXYvbnVsbCAmJgorICAgICAgQUNfTVNHX0VSUk9SKAorCVtpbnZhbGlkIF1tNF9pZihbJDJdLCBbd2l0aF0sIFtwYWNrYWdlXSwgW2ZlYXR1cmVdKVsgbmFtZTogJGFjX3VzZXJvcHRdKQorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YEFTX0VDSE8oWyIkYWNfdXNlcm9wdCJdKSB8IHNlZCAncy9bWy0rLl1dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorIiQyXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLSQxLSRhY191c2Vyb3B0X29yaWciCisJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisgICAgZXNhYworICAgIGV2YWwgJDJfJGFjX3VzZXJvcHQ9bTRfaWYoWyQxXSwgWyQyXSwgW1wkYWNfb3B0YXJnXSwgW25vXSkgOztkbmwKK10pCisKKworIyBfQUNfSU5JVF9IRUxQCisjIC0tLS0tLS0tLS0tLS0KKyMgSGFuZGxlIHRoZSBgY29uZmlndXJlIC0taGVscCcgbWVzc2FnZS4KK200X2RlZmluZShbX0FDX0lOSVRfSEVMUF0sCitbbTRfZGl2ZXJ0X3B1c2goW0hFTFBfQkVHSU5dKWRubAorCisjCisjIFJlcG9ydCB0aGUgLS1oZWxwIG1lc3NhZ2UuCisjCitpZiB0ZXN0ICIkYWNfaW5pdF9oZWxwIiA9ICJsb25nIjsgdGhlbgorICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KKyAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgorICBjYXQgPDxfQUNFT0YKK1xgY29uZmlndXJlJyBjb25maWd1cmVzIG00X2lmc2V0KFtBQ19QQUNLQUdFX1NUUklOR10sCisJCQlbQUNfUEFDS0FHRV9TVFJJTkddLAorCQkJW3RoaXMgcGFja2FnZV0pIHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KKworVXNhZ2U6ICRbMF0gW1tPUFRJT05dXS4uLiBbW1ZBUj1WQUxVRV1dLi4uCisKK1tUbyBhc3NpZ24gZW52aXJvbm1lbnQgdmFyaWFibGVzIChlLmcuLCBDQywgQ0ZMQUdTLi4uKSwgc3BlY2lmeSB0aGVtIGFzCitWQVI9VkFMVUUuICBTZWUgYmVsb3cgZm9yIGRlc2NyaXB0aW9ucyBvZiBzb21lIG9mIHRoZSB1c2VmdWwgdmFyaWFibGVzLgorCitEZWZhdWx0cyBmb3IgdGhlIG9wdGlvbnMgYXJlIHNwZWNpZmllZCBpbiBicmFja2V0cy4KKworQ29uZmlndXJhdGlvbjoKKyAgLWgsIC0taGVscCAgICAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQKKyAgICAgIC0taGVscD1zaG9ydCAgICAgICAgZGlzcGxheSBvcHRpb25zIHNwZWNpZmljIHRvIHRoaXMgcGFja2FnZQorICAgICAgLS1oZWxwPXJlY3Vyc2l2ZSAgICBkaXNwbGF5IHRoZSBzaG9ydCBoZWxwIG9mIGFsbCB0aGUgaW5jbHVkZWQgcGFja2FnZXMKKyAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgZGlzcGxheSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisgIC1xLCAtLXF1aWV0LCAtLXNpbGVudCAgIGRvIG5vdCBwcmludCBcYGNoZWNraW5nLi4uJyBtZXNzYWdlcworICAgICAgLS1jYWNoZS1maWxlPUZJTEUgICBjYWNoZSB0ZXN0IHJlc3VsdHMgaW4gRklMRSBbZGlzYWJsZWRdCisgIC1DLCAtLWNvbmZpZy1jYWNoZSAgICAgIGFsaWFzIGZvciBcYC0tY2FjaGUtZmlsZT1jb25maWcuY2FjaGUnCisgIC1uLCAtLW5vLWNyZWF0ZSAgICAgICAgIGRvIG5vdCBjcmVhdGUgb3V0cHV0IGZpbGVzCisgICAgICAtLXNyY2Rpcj1ESVIgICAgICAgIGZpbmQgdGhlIHNvdXJjZXMgaW4gRElSIFtjb25maWd1cmUgZGlyIG9yIFxgLi4nXQorCitJbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6CitdQVNfSEVMUF9TVFJJTkcoWy0tcHJlZml4PVBSRUZJWF0sCisgIFtpbnN0YWxsIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBmaWxlcyBpbiBQUkVGSVggWyRhY19kZWZhdWx0X3ByZWZpeF1dKQorQVNfSEVMUF9TVFJJTkcoWy0tZXhlYy1wcmVmaXg9RVBSRUZJWF0sCisgIFtpbnN0YWxsIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgZmlsZXMgaW4gRVBSRUZJWCBbUFJFRklYXV0pWworCitCeSBkZWZhdWx0LCBcYG1ha2UgaW5zdGFsbCcgd2lsbCBpbnN0YWxsIGFsbCB0aGUgZmlsZXMgaW4KK1xgJGFjX2RlZmF1bHRfcHJlZml4L2JpbicsIFxgJGFjX2RlZmF1bHRfcHJlZml4L2xpYicgZXRjLiAgWW91IGNhbiBzcGVjaWZ5CithbiBpbnN0YWxsYXRpb24gcHJlZml4IG90aGVyIHRoYW4gXGAkYWNfZGVmYXVsdF9wcmVmaXgnIHVzaW5nIFxgLS1wcmVmaXgnLAorZm9yIGluc3RhbmNlIFxgLS1wcmVmaXg9XCRIT01FJy4KKworRm9yIGJldHRlciBjb250cm9sLCB1c2UgdGhlIG9wdGlvbnMgYmVsb3cuCisKK0ZpbmUgdHVuaW5nIG9mIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6CisgIC0tYmluZGlyPURJUiAgICAgICAgICAgIHVzZXIgZXhlY3V0YWJsZXMgW0VQUkVGSVgvYmluXQorICAtLXNiaW5kaXI9RElSICAgICAgICAgICBzeXN0ZW0gYWRtaW4gZXhlY3V0YWJsZXMgW0VQUkVGSVgvc2Jpbl0KKyAgLS1saWJleGVjZGlyPURJUiAgICAgICAgcHJvZ3JhbSBleGVjdXRhYmxlcyBbRVBSRUZJWC9saWJleGVjXQorICAtLXN5c2NvbmZkaXI9RElSICAgICAgICByZWFkLW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL2V0Y10KKyAgLS1zaGFyZWRzdGF0ZWRpcj1ESVIgICAgbW9kaWZpYWJsZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbUFJFRklYL2NvbV0KKyAgLS1sb2NhbHN0YXRlZGlyPURJUiAgICAgbW9kaWZpYWJsZSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvdmFyXQorICAtLWxpYmRpcj1ESVIgICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgW0VQUkVGSVgvbGliXQorICAtLWluY2x1ZGVkaXI9RElSICAgICAgICBDIGhlYWRlciBmaWxlcyBbUFJFRklYL2luY2x1ZGVdCisgIC0tb2xkaW5jbHVkZWRpcj1ESVIgICAgIEMgaGVhZGVyIGZpbGVzIGZvciBub24tZ2NjIFsvdXNyL2luY2x1ZGVdCisgIC0tZGF0YXJvb3RkaXI9RElSICAgICAgIHJlYWQtb25seSBhcmNoLi1pbmRlcGVuZGVudCBkYXRhIHJvb3QgW1BSRUZJWC9zaGFyZV0KKyAgLS1kYXRhZGlyPURJUiAgICAgICAgICAgcmVhZC1vbmx5IGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtEQVRBUk9PVERJUl0KKyAgLS1pbmZvZGlyPURJUiAgICAgICAgICAgaW5mbyBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9pbmZvXQorICAtLWxvY2FsZWRpcj1ESVIgICAgICAgICBsb2NhbGUtZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSL2xvY2FsZV0KKyAgLS1tYW5kaXI9RElSICAgICAgICAgICAgbWFuIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL21hbl0KK11BU19IRUxQX1NUUklORyhbLS1kb2NkaXI9RElSXSwKKyAgW2RvY3VtZW50YXRpb24gcm9vdCBdQDw6QERBVEFST09URElSL2RvYy9tNF9pZnNldChbQUNfUEFDS0FHRV9UQVJOQU1FXSwKKyAgICBbQUNfUEFDS0FHRV9UQVJOQU1FXSwgW1BBQ0tBR0VdKUA6PkApWworICAtLWh0bWxkaXI9RElSICAgICAgICAgICBodG1sIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1kdmlkaXI9RElSICAgICAgICAgICAgZHZpIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1wZGZkaXI9RElSICAgICAgICAgICAgcGRmIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1wc2Rpcj1ESVIgICAgICAgICAgICAgcHMgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorX0FDRU9GCisKKyAgY2F0IDw8XF9BQ0VPRl0KK200X2RpdmVydF9wb3AoW0hFTFBfQkVHSU5dKWRubAorZG5sIFRoZSBvcmRlciBvZiB0aGUgZGl2ZXJzaW9ucyBoZXJlIGlzCitkbmwgLSBIRUxQX0JFR0lOCitkbmwgICB3aGljaCBtYXkgYmUgZXh0ZW5kZWQgYnkgZXh0cmEgZ2VuZXJpYyBvcHRpb25zIHN1Y2ggYXMgd2l0aCBYIG9yCitkbmwgICBBQ19BUkdfUFJPR1JBTS4gIERpc3BsYXllZCBvbmx5IGluIGxvbmcgLS1oZWxwLgorZG5sCitkbmwgLSBIRUxQX0NBTk9OCitkbmwgICBTdXBwb3J0IGZvciBjcm9zcyBjb21waWxhdGlvbiAoLS1idWlsZCwgLS1ob3N0IGFuZCAtLXRhcmdldCkuCitkbmwgICBEaXNwbGF5IG9ubHkgaW4gbG9uZyAtLWhlbHAuCitkbmwKK2RubCAtIEhFTFBfRU5BQkxFCitkbmwgICB3aGljaCBzdGFydHMgd2l0aCB0aGUgdHJhaWxlciBvZiB0aGUgSEVMUF9CRUdJTiwgSEVMUF9DQU5PTiBzZWN0aW9uLAorZG5sICAgdGhlbiBpbXBsZW1lbnRzIHRoZSBoZWFkZXIgb2YgdGhlIG5vbiBnZW5lcmljIG9wdGlvbnMuCitkbmwKK2RubCAtIEhFTFBfV0lUSAorZG5sCitkbmwgLSBIRUxQX1ZBUgorZG5sCitkbmwgLSBIRUxQX1ZBUl9FTkQKK2RubAorZG5sIC0gSEVMUF9FTkQKK2RubCAgIGluaXRpYWxpemVkIGJlbG93LCBpbiB3aGljaCB3ZSBkdW1wIHRoZSB0cmFpbGVyIChoYW5kbGluZyBvZiB0aGUKK2RubCAgIHJlY3Vyc2lvbiBmb3IgaW5zdGFuY2UpLgorbTRfZGl2ZXJ0X3B1c2goW0hFTFBfRU5BQkxFXSlkbmwKK19BQ0VPRgorZmkKKworaWYgdGVzdCAtbiAiJGFjX2luaXRfaGVscCI7IHRoZW4KK200X2lmc2V0KFtBQ19QQUNLQUdFX1NUUklOR10sCitbICBjYXNlICRhY19pbml0X2hlbHAgaW4KKyAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIEFDX1BBQ0tBR0VfU1RSSU5HOiI7OworICAgZXNhY10pCisgIGNhdCA8PFxfQUNFT0YKK200X2RpdmVydF9wb3AoW0hFTFBfRU5BQkxFXSlkbmwKK200X2RpdmVydF9wdXNoKFtIRUxQX0VORF0pZG5sCisKK1JlcG9ydCBidWdzIHRvIG00X2lmc2V0KFtBQ19QQUNLQUdFX0JVR1JFUE9SVF0sIFs8QUNfUEFDS0FHRV9CVUdSRVBPUlQ+XSwKKyAgW3RoZSBwYWNrYWdlIHByb3ZpZGVyXSkuZG5sCittNF9pZmRlZihbQUNfUEFDS0FHRV9OQU1FXSwgW200X2lmc2V0KFtBQ19QQUNLQUdFX1VSTF0sIFsKK0FDX1BBQ0tBR0VfTkFNRSBob21lIHBhZ2U6IDxBQ19QQUNLQUdFX1VSTD4uXSlkbmwKK200X2lmKG00X2luZGV4KG00X2RlZm4oW0FDX1BBQ0tBR0VfTkFNRV0pLCBbR05VIF0pLCBbMF0sIFsKK0dlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+Ll0pXSkKK19BQ0VPRgorYWNfc3RhdHVzPSQ/CitmaQorCitpZiB0ZXN0ICIkYWNfaW5pdF9oZWxwIiA9ICJyZWN1cnNpdmUiOyB0aGVuCisgICMgSWYgdGhlcmUgYXJlIHN1YmRpcnMsIHJlcG9ydCB0aGVpciBzcGVjaWZpYyAtLWhlbHAuCisgIGZvciBhY19kaXIgaW4gOiAkYWNfc3ViZGlyc19hbGw7IGRvIHRlc3QgIngkYWNfZGlyIiA9IHg6ICYmIGNvbnRpbnVlCisgICAgdGVzdCAtZCAiJGFjX2RpciIgfHwKKyAgICAgIHsgY2QgIiRzcmNkaXIiICYmIGFjX3B3ZD1gcHdkYCAmJiBzcmNkaXI9LiAmJiB0ZXN0IC1kICIkYWNfZGlyIjsgfSB8fAorICAgICAgY29udGludWUKKyAgICBfQUNfU1JDRElSUyhbIiRhY19kaXIiXSkKKyAgICBjZCAiJGFjX2RpciIgfHwgeyBhY19zdGF0dXM9JD87IGNvbnRpbnVlOyB9CisgICAgIyBDaGVjayBmb3IgZ3Vlc3RlZCBjb25maWd1cmUuCisgICAgaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUuZ251IjsgdGhlbgorICAgICAgZWNobyAmJgorICAgICAgJFNIRUxMICIkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUiIC0taGVscD1yZWN1cnNpdmUKKyAgICBlbGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlIjsgdGhlbgorICAgICAgZWNobyAmJgorICAgICAgJFNIRUxMICIkYWNfc3JjZGlyL2NvbmZpZ3VyZSIgLS1oZWxwPXJlY3Vyc2l2ZQorICAgIGVsc2UKKyAgICAgIEFDX01TR19XQVJOKFtubyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGlzIGluICRhY19kaXJdKQorICAgIGZpIHx8IGFjX3N0YXR1cz0kPworICAgIGNkICIkYWNfcHdkIiB8fCB7IGFjX3N0YXR1cz0kPzsgYnJlYWs7IH0KKyAgZG9uZQorZmkKKwordGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAkYWNfc3RhdHVzCittNF9kaXZlcnRfcG9wKFtIRUxQX0VORF0pZG5sCitdKSMgX0FDX0lOSVRfSEVMUAorCisKKyMgX0FDX0lOSVRfVkVSU0lPTgorIyAtLS0tLS0tLS0tLS0tLS0tCisjIEhhbmRsZSB0aGUgYGNvbmZpZ3VyZSAtLXZlcnNpb24nIG1lc3NhZ2UuCittNF9kZWZpbmUoW19BQ19JTklUX1ZFUlNJT05dLAorW200X2RpdmVydF90ZXh0KFtWRVJTSU9OX0JFR0lOXSwKK1tpZiAkYWNfaW5pdF92ZXJzaW9uOyB0aGVuCisgIGNhdCA8PFxfQUNFT0YKK200X2lmc2V0KFtBQ19QQUNLQUdFX05BTUVdLCBbQUNfUEFDS0FHRV9OQU1FIF0pY29uZmlndXJlW11kbmwKK200X2lmc2V0KFtBQ19QQUNLQUdFX1ZFUlNJT05dLCBbIEFDX1BBQ0tBR0VfVkVSU0lPTl0pCitnZW5lcmF0ZWQgYnkgbTRfUEFDS0FHRV9TVFJJTkddKQorbTRfZGl2ZXJ0X3RleHQoW1ZFUlNJT05fRU5EXSwKK1tfQUNFT0YKKyAgZXhpdAorZmldKWRubAorXSkjIF9BQ19JTklUX1ZFUlNJT04KKworCisjIF9BQ19JTklUX0NPTkZJR19MT0cKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJbml0aWFsaXplIHRoZSBjb25maWcubG9nIGZpbGUgZGVzY3JpcHRvciBhbmQgd3JpdGUgaGVhZGVyIHRvIGl0LgorbTRfZGVmaW5lKFtfQUNfSU5JVF9DT05GSUdfTE9HXSwKK1ttNF9kaXZlcnRfdGV4dChbSU5JVF9QUkVQQVJFXSwKK1ttNF9kZWZpbmUoW0FTX01FU1NBR0VfTE9HX0ZEXSwgNSlkbmwKK2NhdCA+Y29uZmlnLmxvZyA8PF9BQ0VPRgorVGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hpbGUKK3J1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5nIGlmIGNvbmZpZ3VyZSBtYWtlcyBhIG1pc3Rha2UuCisKK0l0IHdhcyBjcmVhdGVkIGJ5IG00X2lmc2V0KFtBQ19QQUNLQUdFX05BTUVdLCBbQUNfUEFDS0FHRV9OQU1FIF0pZG5sCiskYXNfbWVbXW00X2lmc2V0KFtBQ19QQUNLQUdFX1ZFUlNJT05dLCBbIEFDX1BBQ0tBR0VfVkVSU0lPTl0pLCB3aGljaCB3YXMKK2dlbmVyYXRlZCBieSBtNF9QQUNLQUdFX1NUUklORy4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworCisgICQgJFswXSAkW0BdCisKK19BQ0VPRgorZXhlYyBBU19NRVNTQUdFX0xPR19GRD4+Y29uZmlnLmxvZworQVNfVU5BTUUgPiZBU19NRVNTQUdFX0xPR19GRAorCitjYXQgPiZBU19NRVNTQUdFX0xPR19GRCA8PF9BQ0VPRgorCisKK200X3RleHRfYm94KFtDb3JlIHRlc3RzLl0pCisKK19BQ0VPRgorXSldKSMgX0FDX0lOSVRfQ09ORklHX0xPRworCisKKyMgX0FDX0lOSVRfUFJFUEFSRQorIyAtLS0tLS0tLS0tLS0tLS0tCisjIENhbGxlZCBieSBBQ19JTklUIHRvIGJ1aWxkIHRoZSBwcmVhbWJsZSBvZiB0aGUgYGNvbmZpZ3VyZScgc2NyaXB0cy4KKyMgMS4gVHJhcCBhbmQgY2xlYW4gdXAgdmFyaW91cyB0bXAgZmlsZXMuCisjIDIuIFNldCB1cCB0aGUgZmQgYW5kIG91dHB1dCBmaWxlcworIyAzLiBSZW1lbWJlciB0aGUgb3B0aW9ucyBnaXZlbiB0byBgY29uZmlndXJlJyBmb3IgYGNvbmZpZy5zdGF0dXMgLS1yZWNoZWNrJy4KKyMgNC4gSW5pdGlhdGVzIGNvbmZkZWZzLmgKKyMgNS4gTG9hZHMgc2l0ZSBhbmQgY2FjaGUgZmlsZXMKK200X2RlZmluZShbX0FDX0lOSVRfUFJFUEFSRV0sCitbbTRfZGl2ZXJ0X3B1c2goW0lOSVRfUFJFUEFSRV0pZG5sCisKKyMgS2VlcCBhIHRyYWNlIG9mIHRoZSBjb21tYW5kIGxpbmUuCisjIFN0cmlwIG91dCAtLW5vLWNyZWF0ZSBhbmQgLS1uby1yZWN1cnNpb24gc28gdGhleSBkbyBub3QgcGlsZSB1cC4KKyMgU3RyaXAgb3V0IC0tc2lsZW50IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byByZWNvcmQgaXQgZm9yIGZ1dHVyZSBydW5zLgorIyBBbHNvIHF1b3RlIGFueSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YS1jaGFyYWN0ZXJzLgorIyBNYWtlIHR3byBwYXNzZXMgdG8gYWxsb3cgZm9yIHByb3BlciBkdXBsaWNhdGUtYXJndW1lbnQgc3VwcHJlc3Npb24uCithY19jb25maWd1cmVfYXJncz0KK2FjX2NvbmZpZ3VyZV9hcmdzMD0KK2FjX2NvbmZpZ3VyZV9hcmdzMT0KK2FjX211c3Rfa2VlcF9uZXh0PWZhbHNlCitmb3IgYWNfcGFzcyBpbiAxIDIKK2RvCisgIGZvciBhY19hcmcKKyAgZG8KKyAgICBjYXNlICRhY19hcmcgaW4KKyAgICAtbm8tY3JlYXRlIHwgLS1uby1jKiB8IC1uIHwgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tciopIGNvbnRpbnVlIDs7CisgICAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKKyAgICAgIGNvbnRpbnVlIDs7CisgICAgKlwnKikKKyAgICAgIGFjX2FyZz1gQVNfRUNITyhbIiRhY19hcmciXSkgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICBlc2FjCisgICAgY2FzZSAkYWNfcGFzcyBpbgorICAgIDEpIEFTX1ZBUl9BUFBFTkQoW2FjX2NvbmZpZ3VyZV9hcmdzMF0sIFsiICckYWNfYXJnJyJdKSA7OworICAgIDIpCisgICAgICBBU19WQVJfQVBQRU5EKFthY19jb25maWd1cmVfYXJnczFdLCBbIiAnJGFjX2FyZyciXSkKK2RubCBJZiB0cnlpbmcgdG8gcmVtb3ZlIGR1cGxpY2F0ZXMsIGJlIHN1cmUgdG8gKGkpIGtlZXAgdGhlICpsYXN0KgorZG5sIHZhbHVlIChlLmcuIC0tcHJlZml4PTEgLS1wcmVmaXg9MiAtLXByZWZpeD0xIG1pZ2h0IGtlZXAgMiBvbmx5KSwKK2RubCBhbmQgKGlpKSBub3QgdG8gc3RyaXAgbG9uZyBvcHRpb25zICgtLXByZWZpeCBmb28gLS1wcmVmaXggYmFyIG1pZ2h0CitkbmwgZ2l2ZSAtLXByZWZpeCBmb28gYmFyKS4KKyAgICAgIGlmIHRlc3QgJGFjX211c3Rfa2VlcF9uZXh0ID0gdHJ1ZTsgdGhlbgorCWFjX211c3Rfa2VlcF9uZXh0PWZhbHNlICMgR290IHZhbHVlLCBiYWNrIHRvIG5vcm1hbC4KKyAgICAgIGVsc2UKKwljYXNlICRhY19hcmcgaW4KK2RubCBVc2UgYnJvYWQgcGF0dGVybnMsIGFzIGFyZ3VtZW50cyB0aGF0IHdvdWxkIGhhdmUgYWxyZWFkeSBtYWRlIGNvbmZpZ3VyZQorZG5sIGV4aXQgZG9uJ3QgbWF0dGVyLgorCSAgKj0qIHwgLS1jb25maWctY2FjaGUgfCAtQyB8IC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKiBcCisJICB8IC1lbmFibGUtKiB8IC0tZW5hYmxlLSogfCAtZ2FzIHwgLS1nKiB8IC1uZnAgfCAtLW5mKiBcCisJICB8IC1xIHwgLXF1aWV0IHwgLS1xKiB8IC1zaWxlbnQgfCAtLXNpbCogfCAtdiB8IC12ZXJiKiBcCisJICB8IC13aXRoLSogfCAtLXdpdGgtKiB8IC13aXRob3V0LSogfCAtLXdpdGhvdXQtKiB8IC0teCkKKwkgICAgY2FzZSAiJGFjX2NvbmZpZ3VyZV9hcmdzMCAiIGluCisJICAgICAgIiRhY19jb25maWd1cmVfYXJnczEiKiIgJyRhY19hcmcnICIqICkgY29udGludWUgOzsKKwkgICAgZXNhYworCSAgICA7OworCSAgLSogKSBhY19tdXN0X2tlZXBfbmV4dD10cnVlIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIEFTX1ZBUl9BUFBFTkQoW2FjX2NvbmZpZ3VyZV9hcmdzXSwgWyIgJyRhY19hcmcnIl0pCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorZG9uZQorQVNfVU5TRVQoYWNfY29uZmlndXJlX2FyZ3MwKQorQVNfVU5TRVQoYWNfY29uZmlndXJlX2FyZ3MxKQorCisjIFdoZW4gaW50ZXJydXB0ZWQgb3IgZXhpdCdkLCBjbGVhbnVwIHRlbXBvcmFyeSBmaWxlcywgYW5kIGNvbXBsZXRlCisjIGNvbmZpZy5sb2cuICBXZSByZW1vdmUgY29tbWVudHMgYmVjYXVzZSBhbnl3YXkgdGhlIHF1b3RlcyBpbiB0aGVyZQorIyB3b3VsZCBjYXVzZSBwcm9ibGVtcyBvciBsb29rIHVnbHkuCisjIFdBUk5JTkc6IFVzZSAnXCcnIHRvIHJlcHJlc2VudCBhbiBhcG9zdHJvcGhlIHdpdGhpbiB0aGUgdHJhcC4KKyMgV0FSTklORzogRG8gbm90IHN0YXJ0IHRoZSB0cmFwIGNvZGUgd2l0aCBhIG5ld2xpbmUsIGR1ZSB0byBhIEZyZWVCU0QgNC4wIGJ1Zy4KK3RyYXAgJ2V4aXRfc3RhdHVzPSQ/CisgICMgU2F2ZSBpbnRvIGNvbmZpZy5sb2cgc29tZSBpbmZvcm1hdGlvbiB0aGF0IG1pZ2h0IGhlbHAgaW4gZGVidWdnaW5nLgorICB7CisgICAgZWNobworCisgICAgQVNfQk9YKFtDYWNoZSB2YXJpYWJsZXMuXSkKKyAgICBlY2hvCisgICAgbTRfYnBhdHN1YnN0cyhtNF9kZWZuKFtfQUNfQ0FDSEVfRFVNUF0pLAorCQkgIFteICpcKCMuKlwpPworXSwgICAgICAgICAgICAgICAgW10sCisJCSAgWyddLCBbJ1xcJyddKQorICAgIGVjaG8KKworICAgIEFTX0JPWChbT3V0cHV0IHZhcmlhYmxlcy5dKQorICAgIGVjaG8KKyAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF92YXJzCisgICAgZG8KKyAgICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgICAgY2FzZSAkYWNfdmFsIGluCisgICAgICAqXCdcJycqKSBhY192YWw9YEFTX0VDSE8oWyIkYWNfdmFsIl0pIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKKyAgICAgIGVzYWMKKyAgICAgIEFTX0VDSE8oWyIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyJdKQorICAgIGRvbmUgfCBzb3J0CisgICAgZWNobworCisgICAgaWYgdGVzdCAtbiAiJGFjX3N1YnN0X2ZpbGVzIjsgdGhlbgorICAgICAgQVNfQk9YKFtGaWxlIHN1YnN0aXR1dGlvbnMuXSkKKyAgICAgIGVjaG8KKyAgICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X2ZpbGVzCisgICAgICBkbworCWV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorCWNhc2UgJGFjX3ZhbCBpbgorCSpcJ1wnJyopIGFjX3ZhbD1gQVNfRUNITyhbIiRhY192YWwiXSkgfCBzZWQgInMvJ1wnJy8nXCcnXFxcXFxcXFwnXCcnJ1wnJy9nImA7OworCWVzYWMKKwlBU19FQ0hPKFsiJGFjX3Zhcj0nXCcnJGFjX3ZhbCdcJyciXSkKKyAgICAgIGRvbmUgfCBzb3J0CisgICAgICBlY2hvCisgICAgZmkKKworICAgIGlmIHRlc3QgLXMgY29uZmRlZnMuaDsgdGhlbgorICAgICAgQVNfQk9YKFtjb25mZGVmcy5oLl0pCisgICAgICBlY2hvCisgICAgICBjYXQgY29uZmRlZnMuaAorICAgICAgZWNobworICAgIGZpCisgICAgdGVzdCAiJGFjX3NpZ25hbCIgIT0gMCAmJgorICAgICAgQVNfRUNITyhbIiRhc19tZTogY2F1Z2h0IHNpZ25hbCAkYWNfc2lnbmFsIl0pCisgICAgQVNfRUNITyhbIiRhc19tZTogZXhpdCAkZXhpdF9zdGF0dXMiXSkKKyAgfSA+JkFTX01FU1NBR0VfTE9HX0ZECisgIHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiAmJgorICAgIHJtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcyogY29uZiRbJF0qICRhY19jbGVhbl9maWxlcyAmJgorICAgIGV4aXQgJGV4aXRfc3RhdHVzCisnIDAKK2ZvciBhY19zaWduYWwgaW4gMSAyIDEzIDE1OyBkbworICB0cmFwICdhY19zaWduYWw9JyRhY19zaWduYWwnOyBBU19FWElUKFsxXSknICRhY19zaWduYWwKK2RvbmUKK2FjX3NpZ25hbD0wCisKKyMgY29uZmRlZnMuaCBhdm9pZHMgT1MgY29tbWFuZCBsaW5lIGxlbmd0aCBsaW1pdHMgdGhhdCBERUZTIGNhbiBleGNlZWQuCitybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMuaAorCitkbmwgQUlYIGNwcCBsb3NlcyBvbiBhbiBlbXB0eSBmaWxlLCBOZXh0U3RlcCAzLjMgKHBhdGNoIDMpIGxvc2VzIG9uIGEgZmlsZQorZG5sIGNvbnRhaW5pbmcgbGVzcyB0aGFuIDE0IGJ5dGVzIChpbmNsdWRpbmcgdGhlIG5ld2xpbmUpLgorQVNfRUNITyhbIi8qIGNvbmZkZWZzLmggKi8iXSkgPiBjb25mZGVmcy5oCisKKyMgUHJlZGVmaW5lZCBwcmVwcm9jZXNzb3IgdmFyaWFibGVzLgorQUNfREVGSU5FX1VOUVVPVEVEKFtQQUNLQUdFX05BTUVdLCBbIiRQQUNLQUdFX05BTUUiXSwKKwkJICAgW0RlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS5dKWRubAorQUNfREVGSU5FX1VOUVVPVEVEKFtQQUNLQUdFX1RBUk5BTUVdLCBbIiRQQUNLQUdFX1RBUk5BTUUiXSwKKwkJICAgW0RlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS5dKWRubAorQUNfREVGSU5FX1VOUVVPVEVEKFtQQUNLQUdFX1ZFUlNJT05dLCBbIiRQQUNLQUdFX1ZFUlNJT04iXSwKKwkJICAgW0RlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuXSlkbmwKK0FDX0RFRklORV9VTlFVT1RFRChbUEFDS0FHRV9TVFJJTkddLCBbIiRQQUNLQUdFX1NUUklORyJdLAorCQkgICBbRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLl0pZG5sCitBQ19ERUZJTkVfVU5RVU9URUQoW1BBQ0tBR0VfQlVHUkVQT1JUXSwgWyIkUEFDS0FHRV9CVUdSRVBPUlQiXSwKKwkJICAgW0RlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlCisJCSAgICBzaG91bGQgYmUgc2VudC5dKWRubAorQUNfREVGSU5FX1VOUVVPVEVEKFtQQUNLQUdFX1VSTF0sIFsiJFBBQ0tBR0VfVVJMIl0sCisJCSAgIFtEZWZpbmUgdG8gdGhlIGhvbWUgcGFnZSBmb3IgdGhpcyBwYWNrYWdlLl0pCisKKyMgTGV0IHRoZSBzaXRlIGZpbGUgc2VsZWN0IGFuIGFsdGVybmF0ZSBjYWNoZSBmaWxlIGlmIGl0IHdhbnRzIHRvLgorQUNfU0lURV9MT0FECitBQ19DQUNIRV9MT0FECittNF9kaXZlcnRfcG9wKFtJTklUX1BSRVBBUkVdKWRubAorXSkjIF9BQ19JTklUX1BSRVBBUkUKKworCisjIEFVOjpBQ19JTklUKFtVTklRVUUtRklMRS1JTi1TT1VSQ0UtRElSXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIG1hY3JvIGlzIHVzZWQgb25seSBmb3IgQXV0b3VwZGF0ZS4KK0FVX0RFRlVOKFtBQ19JTklUXSwKK1ttNF9pZnZhbChbJDJdLCBbW0FDX0lOSVQoJEApXV0sCisJICBbbTRfaWZ2YWwoWyQxXSwKK1tbQUNfSU5JVF0KK0FDX0NPTkZJR19TUkNESVIoWyQxXSldLCBbW0FDX0lOSVRdXSldKVtdZG5sCitdKQorCisKKyMgQUNfSU5JVChbUEFDS0FHRSwgVkVSU0lPTiwgW0JVRy1SRVBPUlRdLCBbVEFSTkFNRV0sIFtVUkxdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEluY2x1ZGUgdGhlIHVzZXIgbWFjcm8gZmlsZXMsIHByZXBhcmUgdGhlIGRpdmVyc2lvbnMsIGFuZCBvdXRwdXQgdGhlCisjIHByZWFtYmxlIG9mIHRoZSBgY29uZmlndXJlJyBzY3JpcHQuCisjCisjIElmIEJVRy1SRVBPUlQgaXMgb21pdHRlZCwgZG8gd2l0aG91dCAodW5sZXNzIHRoZSB1c2VyIHByZXZpb3VzbHkKKyMgZGVmaW5lZCB0aGUgbTQgbWFjcm8gQUNfUEFDS0FHRV9CVUdSRVBPUlQpLiAgSWYgVEFSTkFNRSBpcyBvbWl0dGVkLAorIyB1c2UgUEFDS0FHRSB0byBzZWVkIGl0LiAgSWYgVVJMIGlzIG9taXR0ZWQsIHVzZQorIyBgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL1RBUk5BTUUvJyBpZiBQQUNLQUdFIGJlZ2lucyB3aXRoIGBHTlUnLAorIyBvdGhlcndpc2UsIGRvIHdpdGhvdXQuCisjCisjIE5vdGUgdGhhdCB0aGUgb3JkZXIgaXMgaW1wb3J0YW50OiBmaXJzdCBpbml0aWFsaXplLCB0aGVuIHNldCB0aGUKKyMgQUNfQ09ORklHX1NSQ0RJUi4KK200X2RlZmluZShbQUNfSU5JVF0sCitbIyBGb3JiaWRkZW4gdG9rZW5zIGFuZCBleGNlcHRpb25zLgorbTRfcGF0dGVybl9mb3JiaWQoW15fP0FbQ0hVTV1fXSkKK200X3BhdHRlcm5fZm9yYmlkKFtfQUNfXSkKK200X3BhdHRlcm5fZm9yYmlkKFteTElCT0JKUyRdLAorCQkgIFtkbyBub3QgdXNlIExJQk9CSlMgZGlyZWN0bHksIHVzZSBBQ19MSUJPQkogKHNlZSBzZWN0aW9uIGBBQ19MSUJPQkogdnMgTElCT0JKUyddKQorIyBBY3R1YWxseSByZXNlcnZlZCBieSBNNHNoLgorbTRfcGF0dGVybl9hbGxvdyhbXkFTX0ZMQUdTJF0pCitBU19JTklUW11kbmwKK0FTX1BSRVBBUkVbXWRubAorbTRfZGl2ZXJ0X3B1c2goW0tJTExdKQorbTRfaWZ2YWwoWyQyXSwgW19BQ19JTklUX1BBQ0tBR0UoJEApXSkKK19BQ19JTklUX0RFRkFVTFRTCitfQUNfSU5JVF9QQVJTRV9BUkdTCitfQUNfSU5JVF9ESVJDSEVDSworX0FDX0lOSVRfU1JDRElSCitfQUNfSU5JVF9IRUxQCitfQUNfSU5JVF9WRVJTSU9OCitfQUNfSU5JVF9DT05GSUdfTE9HCitfQUNfSU5JVF9QUkVQQVJFCitfQUNfSU5JVF9OT1RJQ0UKK19BQ19JTklUX0NPUFlSSUdIVAorbTRfZGl2ZXJ0X3RleHQoW1NIRUxMX0ZOXSwgWworbTRfdGV4dF9ib3goW0F1dG9jb25mIGluaXRpYWxpemF0aW9uLl0pXSkKK200X2RpdmVydF9wb3AKK200X2lmdmFsKFskMl0sICwgW200X2lmdmFsKFskMV0sIFtBQ19DT05GSUdfU1JDRElSKFskMV0pXSldKWRubAorZG5sCitkbmwgU3Vic3RpdHV0ZSBmb3IgcHJlZGVmaW5lZCB2YXJpYWJsZXMuCitBQ19TVUJTVChbREVGU10pZG5sCitBQ19TVUJTVChbRUNIT19DXSlkbmwKK0FDX1NVQlNUKFtFQ0hPX05dKWRubAorQUNfU1VCU1QoW0VDSE9fVF0pZG5sCitBQ19TVUJTVChbTElCU10pZG5sCitfQUNfQVJHX1ZBUl9QUkVDSU9VUyhbYnVpbGRfYWxpYXNdKUFDX1NVQlNUKFtidWlsZF9hbGlhc10pZG5sCitfQUNfQVJHX1ZBUl9QUkVDSU9VUyhbaG9zdF9hbGlhc10pQUNfU1VCU1QoW2hvc3RfYWxpYXNdKWRubAorX0FDX0FSR19WQVJfUFJFQ0lPVVMoW3RhcmdldF9hbGlhc10pQUNfU1VCU1QoW3RhcmdldF9hbGlhc10pZG5sCitkbmwKK0FDX0xBTkdfUFVTSChDKQorXSkKKworCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgU2VsZWN0aW5nIG9wdGlvbmFsIGZlYXR1cmVzLCB3b3JraW5nIHdpdGggb3B0aW9uYWwgc29mdHdhcmUuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIEFDX1BSRVNFUlZFX0hFTFBfT1JERVIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbWl0IGhlbHAgc3RyaW5ncyBpbiB0aGUgb3JkZXIgZ2l2ZW4sIHJhdGhlciB0aGFuIGdyb3VwaW5nIGFsbCAtLWVuYWJsZS1GT08KKyMgYW5kIGFsbCAtLXdpdGgtQkFSLgorQUNfREVGVU4oW0FDX1BSRVNFUlZFX0hFTFBfT1JERVJdLAorW200X2RpdmVydF9vbmNlKFtIRUxQX0VOQUJMRV0sIFtbCitPcHRpb25hbCBGZWF0dXJlcyBhbmQgUGFja2FnZXM6CisgIC0tZGlzYWJsZS1vcHRpb24tY2hlY2tpbmcgIGlnbm9yZSB1bnJlY29nbml6ZWQgLS1lbmFibGUvLS13aXRoIG9wdGlvbnMKKyAgLS1kaXNhYmxlLUZFQVRVUkUgICAgICAgZG8gbm90IGluY2x1ZGUgRkVBVFVSRSAoc2FtZSBhcyAtLWVuYWJsZS1GRUFUVVJFPW5vKQorICAtLWVuYWJsZS1GRUFUVVJFWz1BUkddICBpbmNsdWRlIEZFQVRVUkUgW0FSRz15ZXNdCisgIC0td2l0aC1QQUNLQUdFWz1BUkddICAgIHVzZSBQQUNLQUdFIFtBUkc9eWVzXQorICAtLXdpdGhvdXQtUEFDS0FHRSAgICAgICBkbyBub3QgdXNlIFBBQ0tBR0UgKHNhbWUgYXMgLS13aXRoLVBBQ0tBR0U9bm8pXV0pCittNF9kZWZpbmUoW19tNF9kaXZlcnQoSEVMUF9FTkFCTEUpXSwgICAgX200X2RpdmVydChIRUxQX1dJVEgpKQorXSkjIEFDX1BSRVNFUlZFX0hFTFBfT1JERVIKKworIyBfQUNfRU5BQkxFX0lGKE9QVElPTiwgRkVBVFVSRSwgW0FDVElPTi1JRi1UUlVFXSwgW0FDVElPTi1JRi1GQUxTRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tbW9uIGNvZGUgZm9yIEFDX0FSR19FTkFCTEUgYW5kIEFDX0FSR19XSVRILgorIyBPUFRJT04gaXMgZWl0aGVyICJlbmFibGUiIG9yICJ3aXRoIi4KKyMKK200X2RlZmluZShbX0FDX0VOQUJMRV9JRl0sCitbQCU6QCBDaGVjayB3aGV0aGVyIC0tJDEtJDIgd2FzIGdpdmVuLgorX0FDX0VOQUJMRV9JRl9BQ1RJT04oWyQxXSwgbTRfdHJhbnNsaXQoWyQyXSwgWy0uXSwgW19fXSksIFskM10sIFskNF0pCitdKQorCittNF9kZWZpbmUoW19BQ19FTkFCTEVfSUZfQUNUSU9OXSwKK1ttNF9hcHBlbmRfdW5pcShbX0FDX1VTRVJfT1BUU10sIFskMV8kMl0sIFsKK10pZG5sCitBU19JRihbdGVzdCAiJHskMV8kMitzZXR9IiA9IHNldF0sIFskMXZhbD0kJDFfJDI7ICQzXSwgWyQ0XSlkbmwKK10pCisKKyMgQUNfQVJHX0VOQUJMRShGRUFUVVJFLCBIRUxQLVNUUklORywgW0FDVElPTi1JRi1UUlVFXSwgW0FDVElPTi1JRi1GQUxTRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX0FSR19FTkFCTEVdLAorW0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUkVTRVJWRV9IRUxQX09SREVSXSwKK1tdLAorW200X2RpdmVydF9vbmNlKFtIRUxQX0VOQUJMRV0sIFtbCitPcHRpb25hbCBGZWF0dXJlczoKKyAgLS1kaXNhYmxlLW9wdGlvbi1jaGVja2luZyAgaWdub3JlIHVucmVjb2duaXplZCAtLWVuYWJsZS8tLXdpdGggb3B0aW9ucworICAtLWRpc2FibGUtRkVBVFVSRSAgICAgICBkbyBub3QgaW5jbHVkZSBGRUFUVVJFIChzYW1lIGFzIC0tZW5hYmxlLUZFQVRVUkU9bm8pCisgIC0tZW5hYmxlLUZFQVRVUkVbPUFSR10gIGluY2x1ZGUgRkVBVFVSRSBbQVJHPXllc11dXSldKWRubAorbTRfZGl2ZXJ0X29uY2UoW0hFTFBfRU5BQkxFXSwgWyQyXSlkbmwKK19BQ19FTkFCTEVfSUYoW2VuYWJsZV0sIFskMV0sIFskM10sIFskNF0pZG5sCitdKSMgQUNfQVJHX0VOQUJMRQorCisKK0FVX0RFRlVOKFtBQ19FTkFCTEVdLAorW0FDX0FSR19FTkFCTEUoWyQxXSwgWyAgLS1lbmFibGUtJDFdLCBbJDJdLCBbJDNdKV0pCisKKworIyBBQ19BUkdfV0lUSChQQUNLQUdFLCBIRUxQLVNUUklORywgQUNUSU9OLUlGLVRSVUUsIFtBQ1RJT04tSUYtRkFMU0VdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX0FSR19XSVRIXSwKK1tBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJFU0VSVkVfSEVMUF9PUkRFUl0sCitbXSwKK1ttNF9kaXZlcnRfb25jZShbSEVMUF9XSVRIXSwgW1sKK09wdGlvbmFsIFBhY2thZ2VzOgorICAtLXdpdGgtUEFDS0FHRVs9QVJHXSAgICB1c2UgUEFDS0FHRSBbQVJHPXllc10KKyAgLS13aXRob3V0LVBBQ0tBR0UgICAgICAgZG8gbm90IHVzZSBQQUNLQUdFIChzYW1lIGFzIC0td2l0aC1QQUNLQUdFPW5vKV1dKV0pCittNF9kaXZlcnRfb25jZShbSEVMUF9XSVRIXSwgWyQyXSlkbmwKK19BQ19FTkFCTEVfSUYoW3dpdGhdLCBbJDFdLCBbJDNdLCBbJDRdKWRubAorXSkjIEFDX0FSR19XSVRICisKK0FVX0RFRlVOKFtBQ19XSVRIXSwKK1tBQ19BUkdfV0lUSChbJDFdLCBbICAtLXdpdGgtJDFdLCBbJDJdLCBbJDNdKV0pCisKKyMgQUNfRElTQUJMRV9PUFRJT05fQ0hFQ0tJTkcKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19ESVNBQkxFX09QVElPTl9DSEVDS0lOR10sCitbbTRfZGl2ZXJ0X29uY2UoW0RFRkFVTFRTXSwgW2VuYWJsZV9vcHRpb25fY2hlY2tpbmc9bm9dKQorXSkjIEFDX0RJU0FCTEVfT1BUSU9OX0NIRUNLSU5HCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJlbWVtYmVyaW5nIHZhcmlhYmxlcyBmb3IgcmVjb25maWd1cmluZy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgQUNfQVJHX1ZBUihWQVJOQU1FLCBET0NVTUVOVEFUSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlZ2lzdGVyIFZBUk5BTUUgYXMgYSBwcmVjaW91cyB2YXJpYWJsZSwgYW5kIGRvY3VtZW50IGl0IGluCisjIGBjb25maWd1cmUgLS1oZWxwJyAoYnV0IG9ubHkgb25jZSkuCitBQ19ERUZVTihbQUNfQVJHX1ZBUl0sCitbbTRfZGl2ZXJ0X29uY2UoW0hFTFBfVkFSXSwgW1sKK1NvbWUgaW5mbHVlbnRpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzOl1dKWRubAorbTRfZGl2ZXJ0X29uY2UoW0hFTFBfVkFSX0VORF0sIFtbCitVc2UgdGhlc2UgdmFyaWFibGVzIHRvIG92ZXJyaWRlIHRoZSBjaG9pY2VzIG1hZGUgYnkgYGNvbmZpZ3VyZScgb3IgdG8gaGVscAoraXQgdG8gZmluZCBsaWJyYXJpZXMgYW5kIHByb2dyYW1zIHdpdGggbm9uc3RhbmRhcmQgbmFtZXMvbG9jYXRpb25zLl1dKWRubAorbTRfZXhwYW5kX29uY2UoW200X2RpdmVydF90ZXh0KFtIRUxQX1ZBUl0sCisJCQkgICAgICAgW0FTX0hFTFBfU1RSSU5HKFskMV0sIFskMl0sIFsgICAgICAgICAgICAgIF0pXSldLAorCSAgICAgICBbJDAoJDEpXSlkbmwKK0FDX1NVQlNUKFskMV0pZG5sCitfQUNfQVJHX1ZBUl9QUkVDSU9VUyhbJDFdKWRubAorXSkjIEFDX0FSR19WQVIKKworCisjIF9BQ19BUkdfVkFSX1BSRUNJT1VTKFZBUk5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlY2xhcmUgVkFSTkFNRSBpcyBwcmVjaW91cy4KK200X2RlZmluZShbX0FDX0FSR19WQVJfUFJFQ0lPVVNdLAorW200X2FwcGVuZF91bmlxKFtfQUNfUFJFQ0lPVVNfVkFSU10sIFskMV0sIFsKK10pZG5sCitdKQorCisKKyMgX0FDX0FSR19WQVJfU1RPUkUKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgV2UgdHJ5IHRvIGRpYWdub3NlIHdoZW4gcHJlY2lvdXMgdmFyaWFibGVzIGhhdmUgY2hhbmdlZC4gIFRvIGRvIHRoaXMsCisjIG1ha2UgdHdvIGVhcmx5IHNuYXBzaG90cyAoYWZ0ZXIgdGhlIG9wdGlvbiBwcm9jZXNzaW5nIHRvIHRha2UKKyMgZXhwbGljaXQgdmFyaWFibGVzIGludG8gYWNjb3VudCkgb2YgdGhvc2UgdmFyaWFibGVzOiBvbmUgKGFjX2Vudl8pCisjIHdoaWNoIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgcnVuLCBhbmQgYSBzZWNvbmQgKGFjX2N2X2Vudl8pIHdoaWNoLAorIyBhdCB0aGUgZmlyc3QgcnVuLCB3aWxsIGJlIHNhdmVkIGluIHRoZSBjYWNoZS4gIEFzIGFuIGV4Y2VwdGlvbiB0bworIyB0aGUgY2FjaGUgbWVjaGFuaXNtLCBpdHMgbG9hZGluZyB3aWxsIG92ZXJyaWRlIHRoZXNlIHZhcmlhYmxlcyAobm9uCisjIGBhY19jdl9lbnZfJyBjYWNoZSB2YWx1ZSBhcmUgb25seSBzZXQgd2hlbiB1bnNldCkuCisjCisjIEluIHN1YnNlcXVlbnQgcnVucywgYWZ0ZXIgaGF2aW5nIGxvYWRlZCB0aGUgY2FjaGUsIGNvbXBhcmUKKyMgYWNfY3ZfZW52X2ZvbyBhZ2FpbnN0IGFjX2Vudl9mb28uICBTZWUgX0FDX0FSR19WQVJfVkFMSURBVEUuCittNF9kZWZpbmUoW19BQ19BUkdfVkFSX1NUT1JFXSwKK1ttNF9kaXZlcnRfdGV4dChbUEFSU0VfQVJHU10sCitbZm9yIGFjX3ZhciBpbiAkYWNfcHJlY2lvdXNfdmFyczsgZG8KKyAgZXZhbCBhY19lbnZfJHthY192YXJ9X3NldD1cJHske2FjX3Zhcn0rc2V0fQorICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KKyAgZXZhbCBhY19jdl9lbnZfJHthY192YXJ9X3NldD1cJHske2FjX3Zhcn0rc2V0fQorICBldmFsIGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KK2RvbmVdKWRubAorXSkKKworCisjIF9BQ19BUkdfVkFSX1ZBTElEQVRFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoZSBwcmVjaW91cyB2YXJpYWJsZXMgYXJlIHNhdmVkIHR3aWNlIGF0IHRoZSBiZWdpbm5pbmcgb2YKKyMgY29uZmlndXJlLiAgRS5nLiwgUFJFQ0lPVVMgaXMgc2F2ZWQgYXMgYGFjX2Vudl9QUkVDSU9VU19zZXQnIGFuZAorIyBgYWNfZW52X1BSRUNJT1VTX3ZhbHVlJyBvbiB0aGUgb25lIGhhbmQgYW5kIGBhY19jdl9lbnZfUFJFQ0lPVVNfc2V0JworIyBhbmQgYGFjX2N2X2Vudl9QUkVDSU9VU192YWx1ZScgb24gdGhlIG90aGVyIGhhbmQuCisjCisjIE5vdyB0aGUgY2FjaGUgaGFzIGp1c3QgYmVlbiBsb2FkZWQsIHNvIGBhY19jdl9lbnZfJyByZXByZXNlbnRzIHRoZQorIyBjb250ZW50IG9mIHRoZSBjYWNoZWQgdmFsdWVzLCB3aGlsZSBgYWNfZW52XycgcmVwcmVzZW50cyB0aGF0IG9mIHRoZQorIyBjdXJyZW50IHZhbHVlcy4KKyMKKyMgU28gd2UgY2hlY2sgdGhhdCBgYWNfZW52XycgYW5kIGBhY19jdl9lbnZfJyBhcmUgY29uc2lzdGVudC4gIElmCisjIHRoZXkgYXJlbid0LCBkaWUuCittNF9kZWZpbmUoW19BQ19BUkdfVkFSX1ZBTElEQVRFXSwKK1ttNF9kaXZlcnRfdGV4dChbSU5JVF9QUkVQQVJFXSwKK1sjIENoZWNrIHRoYXQgdGhlIHByZWNpb3VzIHZhcmlhYmxlcyBzYXZlZCBpbiB0aGUgY2FjaGUgaGF2ZSBrZXB0IHRoZSBzYW1lCisjIHZhbHVlLgorYWNfY2FjaGVfY29ycnVwdGVkPWZhbHNlCitmb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbworICBldmFsIGFjX29sZF9zZXQ9XCRhY19jdl9lbnZfJHthY192YXJ9X3NldAorICBldmFsIGFjX25ld19zZXQ9XCRhY19lbnZfJHthY192YXJ9X3NldAorICBldmFsIGFjX29sZF92YWw9XCRhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlCisgIGV2YWwgYWNfbmV3X3ZhbD1cJGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWUKKyAgY2FzZSAkYWNfb2xkX3NldCwkYWNfbmV3X3NldCBpbgorICAgIHNldCwpCisgICAgICBBU19NRVNTQUdFKFtlcnJvcjogYCRhY192YXInIHdhcyBzZXQgdG8gYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuXSwgMikKKyAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CisgICAgLHNldCkKKyAgICAgIEFTX01FU1NBR0UoW2Vycm9yOiBgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1bl0sIDIpCisgICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OiA7OworICAgICwpOzsKKyAgICAqKQorICAgICAgaWYgdGVzdCAieCRhY19vbGRfdmFsIiAhPSAieCRhY19uZXdfdmFsIjsgdGhlbgorCSMgZGlmZmVyZW5jZXMgaW4gd2hpdGVzcGFjZSBkbyBub3QgbGVhZCB0byBmYWlsdXJlLgorCWFjX29sZF92YWxfdz1gZWNobyB4ICRhY19vbGRfdmFsYAorCWFjX25ld192YWxfdz1gZWNobyB4ICRhY19uZXdfdmFsYAorCWlmIHRlc3QgIiRhY19vbGRfdmFsX3ciICE9ICIkYWNfbmV3X3ZhbF93IjsgdGhlbgorCSAgQVNfTUVTU0FHRShbZXJyb3I6IGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOl0sIDIpCisJICBhY19jYWNoZV9jb3JydXB0ZWQ9OgorCWVsc2UKKwkgIEFTX01FU1NBR0UoW3dhcm5pbmc6IGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcyBpbiBgJGFjX3Zhcicgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjpdLCAyKQorCSAgZXZhbCAkYWNfdmFyPVwkYWNfb2xkX3ZhbAorCWZpCisJQVNfTUVTU0FHRShbICBmb3JtZXIgdmFsdWU6ICBgJGFjX29sZF92YWwnXSwgMikKKwlBU19NRVNTQUdFKFsgIGN1cnJlbnQgdmFsdWU6IGAkYWNfbmV3X3ZhbCddLCAyKQorICAgICAgZmk7OworICBlc2FjCisgICMgUGFzcyBwcmVjaW91cyB2YXJpYWJsZXMgdG8gY29uZmlnLnN0YXR1cy4KKyAgaWYgdGVzdCAiJGFjX25ld19zZXQiID0gc2V0OyB0aGVuCisgICAgY2FzZSAkYWNfbmV3X3ZhbCBpbgorICAgICpcJyopIGFjX2FyZz0kYWNfdmFyPWBBU19FQ0hPKFsiJGFjX25ld192YWwiXSkgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICAqKSBhY19hcmc9JGFjX3Zhcj0kYWNfbmV3X3ZhbCA7OworICAgIGVzYWMKKyAgICBjYXNlICIgJGFjX2NvbmZpZ3VyZV9hcmdzICIgaW4KKyAgICAgICoiICckYWNfYXJnJyAiKikgOzsgIyBBdm9pZCBkdXBzLiAgVXNlIG9mIHF1b3RlcyBlbnN1cmVzIGFjY3VyYWN5LgorICAgICAgKikgQVNfVkFSX0FQUEVORChbYWNfY29uZmlndXJlX2FyZ3NdLCBbIiAnJGFjX2FyZyciXSkgOzsKKyAgICBlc2FjCisgIGZpCitkb25lCitpZiAkYWNfY2FjaGVfY29ycnVwdGVkOyB0aGVuCisgIEFTX01FU1NBR0UoW2Vycm9yOiBpbiBgJGFjX3B3ZCc6XSwgMikKKyAgQVNfTUVTU0FHRShbZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZF0sIDIpCisgIEFTX0VSUk9SKFtydW4gYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgYHJtICRjYWNoZV9maWxlJyBhbmQgc3RhcnQgb3Zlcl0pCitmaV0pZG5sCitdKSMgX0FDX0FSR19WQVJfVkFMSURBVEUKKworCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBUcmFuc2Zvcm1pbmcgcHJvZ3JhbSBuYW1lcy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBBQ19BUkdfUFJPR1JBTQorIyAtLS0tLS0tLS0tLS0tLQorIyBUaGlzIG1hY3JvIGlzIGV4cGFuZGVkIG9ubHkgb25jZSwgdG8gYXZvaWQgdGhhdCBgZm9vJyBlbmRzIHVwIGJlaW5nCisjIGluc3RhbGxlZCBhcyBgZ2dmb28nLgorQUNfREVGVU5fT05DRShbQUNfQVJHX1BST0dSQU1dLAorW2RubCBEb2N1bWVudCB0aGUgb3B0aW9ucy4KK200X2RpdmVydF9wdXNoKFtIRUxQX0JFR0lOXSlkbmwKKworUHJvZ3JhbSBuYW1lczoKKyAgLS1wcm9ncmFtLXByZWZpeD1QUkVGSVggICAgICAgICAgICBwcmVwZW5kIFBSRUZJWCB0byBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworICAtLXByb2dyYW0tc3VmZml4PVNVRkZJWCAgICAgICAgICAgIGFwcGVuZCBTVUZGSVggdG8gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKKyAgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPVBST0dSQU0gICBydW4gc2VkIFBST0dSQU0gb24gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKK200X2RpdmVydF9wb3AoW0hFTFBfQkVHSU5dKWRubAordGVzdCAiJHByb2dyYW1fcHJlZml4IiAhPSBOT05FICYmCisgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9InMmXiYkcHJvZ3JhbV9wcmVmaXgmOyRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIgorIyBVc2UgYSBkb3VibGUgJCBzbyBtYWtlIGlnbm9yZXMgaXQuCit0ZXN0ICIkcHJvZ3JhbV9zdWZmaXgiICE9IE5PTkUgJiYKKyAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0icyZcJCYkcHJvZ3JhbV9zdWZmaXgmOyRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIgorIyBEb3VibGUgYW55IFwgb3IgJC4KKyMgQnkgZGVmYXVsdCB3YXMgYHMseCx4JywgcmVtb3ZlIGl0IGlmIHVzZWxlc3MuCitbYWNfc2NyaXB0PSdzL1tcXCRdLyYmL2c7cy87cyx4LHgsJC8vJ10KK3Byb2dyYW1fdHJhbnNmb3JtX25hbWU9YEFTX0VDSE8oWyIkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSJdKSB8IHNlZCAiJGFjX3NjcmlwdCJgCitdKSMgQUNfQVJHX1BST0dSQU0KKworCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBGaW5kaW5nIGF1eGlsaWFyeSBmaWxlcy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBBQ19DT05GSUdfQVVYX0RJUihESVIpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZCBpbnN0YWxsLXNoLCBjb25maWcuc3ViLCBjb25maWcuZ3Vlc3MsIGFuZCBDeWdudXMgY29uZmlndXJlCisjIGluIGRpcmVjdG9yeSBESVIuICBUaGVzZSBhcmUgYXV4aWxpYXJ5IGZpbGVzIHVzZWQgaW4gY29uZmlndXJhdGlvbi4KKyMgRElSIGNhbiBiZSBlaXRoZXIgYWJzb2x1dGUgb3IgcmVsYXRpdmUgdG8gJHNyY2Rpci4KK0FDX0RFRlVOKFtBQ19DT05GSUdfQVVYX0RJUl0sCitbQUNfQ09ORklHX0FVWF9ESVJTKCQxICIkc3JjZGlyIi8kMSldKQorCisKKyMgQUNfQ09ORklHX0FVWF9ESVJfREVGQVVMVAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoZSBkZWZhdWx0IGlzIGAkc3JjZGlyJyBvciBgJHNyY2Rpci8uLicgb3IgYCRzcmNkaXIvLi4vLi4nLgorIyBUaGVyZSdzIG5vIG5lZWQgdG8gY2FsbCB0aGlzIG1hY3JvIGV4cGxpY2l0bHk7IGp1c3QgQUNfUkVRVUlSRSBpdC4KK0FDX0RFRlVOKFtBQ19DT05GSUdfQVVYX0RJUl9ERUZBVUxUXSwKK1tBQ19DT05GSUdfQVVYX0RJUlMoIiRzcmNkaXIiICIkc3JjZGlyLy4uIiAiJHNyY2Rpci8uLi8uLiIpXSkKKworCisjIEFDX0NPTkZJR19BVVhfRElSUyhESVIgLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSW50ZXJuYWwgc3Vicm91dGluZS4KKyMgU2VhcmNoIGZvciB0aGUgY29uZmlndXJhdGlvbiBhdXhpbGlhcnkgZmlsZXMgaW4gZGlyZWN0b3J5IGxpc3QgJDEuCisjIFdlIGxvb2sgb25seSBmb3IgaW5zdGFsbC1zaCwgc28gdXNlcnMgb2YgQUNfUFJPR19JTlNUQUxMCisjIGRvIG5vdCBhdXRvbWF0aWNhbGx5IG5lZWQgdG8gZGlzdHJpYnV0ZSB0aGUgb3RoZXIgYXV4aWxpYXJ5IGZpbGVzLgorQUNfREVGVU4oW0FDX0NPTkZJR19BVVhfRElSU10sCitbYWNfYXV4X2Rpcj0KK2ZvciBhY19kaXIgaW4gJDE7IGRvCisgIGZvciBhY190IGluIGluc3RhbGwtc2ggaW5zdGFsbC5zaCBzaHRvb2w7IGRvCisgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfdCI7IHRoZW4KKyAgICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvJGFjX3QgLWMiCisgICAgICBicmVhayAyCisgICAgZmkKKyAgZG9uZQorZG9uZQoraWYgdGVzdCAteiAiJGFjX2F1eF9kaXIiOyB0aGVuCisgIEFDX01TR19FUlJPUihbY2Fubm90IGZpbmQgaW5zdGFsbC1zaCwgaW5zdGFsbC5zaCwgb3Igc2h0b29sIGluICQxXSkKK2ZpCisKKyMgVGhlc2UgdGhyZWUgdmFyaWFibGVzIGFyZSB1bmRvY3VtZW50ZWQgYW5kIHVuc3VwcG9ydGVkLAorIyBhbmQgYXJlIGludGVuZGVkIHRvIGJlIHdpdGhkcmF3biBpbiBhIGZ1dHVyZSBBdXRvY29uZiByZWxlYXNlLgorIyBUaGV5IGNhbiBjYXVzZSBzZXJpb3VzIHByb2JsZW1zIGlmIGEgYnVpbGRlcidzIHNvdXJjZSB0cmVlIGlzIGluIGEgZGlyZWN0b3J5CisjIHdob3NlIGZ1bGwgbmFtZSBjb250YWlucyB1bnVzdWFsIGNoYXJhY3RlcnMuCithY19jb25maWdfZ3Vlc3M9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCithY19jb25maWdfc3ViPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KK2FjX2NvbmZpZ3VyZT0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZ3VyZSIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KKworQUNfUFJPVklERShbQUNfQ09ORklHX0FVWF9ESVJfREVGQVVMVF0pZG5sCitdKSMgQUNfQ09ORklHX0FVWF9ESVJTCisKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRmluZGluZyBhY2xvY2FsIG1hY3Jvcy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIEFDX0NPTkZJR19NQUNST19ESVIoRElSKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVjbGFyZSBkaXJlY3RvcnkgY29udGFpbmluZyBhZGRpdGlvbmFsIG1hY3JvcyBmb3IgYWNsb2NhbC4KK0FDX0RFRlVOKFtBQ19DT05GSUdfTUFDUk9fRElSXSwgW10pCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJlcXVpcmluZyBhdXggZmlsZXMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQUNfUkVRVUlSRV9BVVhfRklMRShGSUxFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgbWFjcm8gZG9lcyBub3RoaW5nLCBpdCdzIGEgaG9vayB0byBiZSByZWFkIHdpdGggYGF1dG9jb25mIC0tdHJhY2UnLgorIyBJdCBhbm5vdW5jZXMgRklMRSBpcyByZXF1aXJlZCBpbiB0aGUgYXV4ZGlyLgorbTRfZGVmaW5lKFtBQ19SRVFVSVJFX0FVWF9GSUxFXSwKK1tBU19MSVRFUkFMX0lGKFskMV0sIFtdLAorCSAgICAgICBbbTRfZmF0YWwoWyQwOiByZXF1aXJlcyBhIGxpdGVyYWwgYXJndW1lbnRdKV0pXSkKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBHZXR0aW5nIHRoZSBjYW5vbmljYWwgc3lzdGVtIHR5cGUuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBUaGUgaW5wdXRzIGFyZToKKyMgICAgY29uZmlndXJlIC0taG9zdD1IT1NUIC0tdGFyZ2V0PVRBUkdFVCAtLWJ1aWxkPUJVSUxECisjCisjIFRoZSBydWxlcyBhcmU6CisjIDEuIEJ1aWxkIGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IHBsYXRmb3JtLCBhcyBkZXRlcm1pbmVkIGJ5IGNvbmZpZy5ndWVzcy4KKyMgMi4gSG9zdCBkZWZhdWx0cyB0byBidWlsZC4KKyMgMy4gVGFyZ2V0IGRlZmF1bHRzIHRvIGhvc3QuCisKKworIyBfQUNfQ0FOT05JQ0FMX1NQTElUKFRISU5HKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBHZW5lcmF0ZSB0aGUgdmFyaWFibGVzIFRISU5HLCBUSElOR197YWxpYXMgY3B1IHZlbmRvciBvc30uCittNF9kZWZpbmUoW19BQ19DQU5PTklDQUxfU1BMSVRdLAorW2Nhc2UgJGFjX2N2XyQxIGluCisqLSotKikgOzsKKyopIEFDX01TR19FUlJPUihbaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgJDFdKTs7Citlc2FjCitBQ19TVUJTVChbJDFdLCBbJGFjX2N2XyQxXSlkbmwKK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKK3NldCB4ICRhY19jdl8kMQorc2hpZnQKK0FDX1NVQlNUKFskMV9jcHVdLCBbJFsxXV0pZG5sCitBQ19TVUJTVChbJDFfdmVuZG9yXSwgWyRbMl1dKWRubAorc2hpZnQ7IHNoaWZ0CitbIyBSZW1lbWJlciwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBJRlMgaXMgdXNlZCB0byBjcmVhdGUgJF0qLAorIyBleGNlcHQgd2l0aCBvbGQgc2hlbGxzOgorJDFfb3M9JFsqXQorSUZTPSRhY19zYXZlX0lGUworY2FzZSAkJDFfb3MgaW4gKlwgKikgJDFfb3M9YGVjaG8gIiQkMV9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKK0FDX1NVQlNUKFskMV9vc10pZG5sCitdKSMgX0FDX0NBTk9OSUNBTF9TUExJVAorCisKKyMgQUNfQ0FOT05JQ0FMX0JVSUxECisjIC0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU5fT05DRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSwKK1tBQ19SRVFVSVJFKFtBQ19DT05GSUdfQVVYX0RJUl9ERUZBVUxUXSlkbmwKK0FDX1JFUVVJUkVfQVVYX0ZJTEUoW2NvbmZpZy5zdWJdKWRubAorQUNfUkVRVUlSRV9BVVhfRklMRShbY29uZmlnLmd1ZXNzXSlkbmwKK200X2RpdmVydF9vbmNlKFtIRUxQX0NBTk9OXSwKK1tbCitTeXN0ZW0gdHlwZXM6CisgIC0tYnVpbGQ9QlVJTEQgICAgIGNvbmZpZ3VyZSBmb3IgYnVpbGRpbmcgb24gQlVJTEQgW2d1ZXNzZWRdXV0pZG5sCisjIE1ha2Ugc3VyZSB3ZSBjYW4gcnVuIGNvbmZpZy5zdWIuCiskU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiIHN1bjQgPi9kZXYvbnVsbCAyPiYxIHx8CisgIEFDX01TR19FUlJPUihbY2Fubm90IHJ1biAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1Yl0pCisKK0FDX0NBQ0hFX0NIRUNLKFtidWlsZCBzeXN0ZW0gdHlwZV0sIFthY19jdl9idWlsZF0sCitbYWNfYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCit0ZXN0ICJ4JGFjX2J1aWxkX2FsaWFzIiA9IHggJiYKKyAgYWNfYnVpbGRfYWxpYXM9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzImAKK3Rlc3QgIngkYWNfYnVpbGRfYWxpYXMiID0geCAmJgorICBBQ19NU0dfRVJST1IoW2Nhbm5vdCBndWVzcyBidWlsZCB0eXBlOyB5b3UgbXVzdCBzcGVjaWZ5IG9uZV0pCithY19jdl9idWlsZD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkYWNfYnVpbGRfYWxpYXNgIHx8CisgIEFDX01TR19FUlJPUihbJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGFjX2J1aWxkX2FsaWFzIGZhaWxlZF0pCitdKQorX0FDX0NBTk9OSUNBTF9TUExJVChidWlsZCkKK10pIyBBQ19DQU5PTklDQUxfQlVJTEQKKworCisjIEFDX0NBTk9OSUNBTF9IT1NUCisjIC0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTl9PTkNFKFtBQ19DQU5PTklDQUxfSE9TVF0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKK200X2RpdmVydF9vbmNlKFtIRUxQX0NBTk9OXSwKK1tbICAtLWhvc3Q9SE9TVCAgICAgICBjcm9zcy1jb21waWxlIHRvIGJ1aWxkIHByb2dyYW1zIHRvIHJ1biBvbiBIT1NUIFtCVUlMRF1dXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFtob3N0IHN5c3RlbSB0eXBlXSwgW2FjX2N2X2hvc3RdLAorW2lmIHRlc3QgIngkaG9zdF9hbGlhcyIgPSB4OyB0aGVuCisgIGFjX2N2X2hvc3Q9JGFjX2N2X2J1aWxkCitlbHNlCisgIGFjX2N2X2hvc3Q9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJGhvc3RfYWxpYXNgIHx8CisgICAgQUNfTVNHX0VSUk9SKFskU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkaG9zdF9hbGlhcyBmYWlsZWRdKQorZmkKK10pCitfQUNfQ0FOT05JQ0FMX1NQTElUKFtob3N0XSkKK10pIyBBQ19DQU5PTklDQUxfSE9TVAorCisKKyMgQUNfQ0FOT05JQ0FMX1RBUkdFVAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTl9PTkNFKFtBQ19DQU5PTklDQUxfVEFSR0VUXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitBQ19CRUZPUkUoWyQwXSwgW0FDX0FSR19QUk9HUkFNXSlkbmwKK200X2RpdmVydF9vbmNlKFtIRUxQX0NBTk9OXSwKK1tbICAtLXRhcmdldD1UQVJHRVQgICBjb25maWd1cmUgZm9yIGJ1aWxkaW5nIGNvbXBpbGVycyBmb3IgVEFSR0VUIFtIT1NUXV1dKWRubAorQUNfQ0FDSEVfQ0hFQ0soW3RhcmdldCBzeXN0ZW0gdHlwZV0sIFthY19jdl90YXJnZXRdLAorW2lmIHRlc3QgIngkdGFyZ2V0X2FsaWFzIiA9IHg7IHRoZW4KKyAgYWNfY3ZfdGFyZ2V0PSRhY19jdl9ob3N0CitlbHNlCisgIGFjX2N2X3RhcmdldD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkdGFyZ2V0X2FsaWFzYCB8fAorICAgIEFDX01TR19FUlJPUihbJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJHRhcmdldF9hbGlhcyBmYWlsZWRdKQorZmkKK10pCitfQUNfQ0FOT05JQ0FMX1NQTElUKFt0YXJnZXRdKQorCisjIFRoZSBhbGlhc2VzIHNhdmUgdGhlIG5hbWVzIHRoZSB1c2VyIHN1cHBsaWVkLCB3aGlsZSAkaG9zdCBldGMuCisjIHdpbGwgZ2V0IGNhbm9uaWNhbGl6ZWQuCit0ZXN0IC1uICIkdGFyZ2V0X2FsaWFzIiAmJgorICB0ZXN0ICIkcHJvZ3JhbV9wcmVmaXgkcHJvZ3JhbV9zdWZmaXgkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIgPSBcCisgICAgTk9ORU5PTkVzLHgseCwgJiYKKyAgcHJvZ3JhbV9wcmVmaXg9JHt0YXJnZXRfYWxpYXN9LVtdZG5sCitdKSMgQUNfQ0FOT05JQ0FMX1RBUkdFVAorCisKK0FVX0FMSUFTKFtBQ19DQU5PTklDQUxfU1lTVEVNXSwgW0FDX0NBTk9OSUNBTF9UQVJHRVRdKQorCisKKyMgQVU6OkFDX1ZBTElEQVRFX0NBQ0hFRF9TWVNURU1fVFVQTEUoW0NNRF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZiB0aGUgY2FjaGUgZmlsZSBpcyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgY3VycmVudCBob3N0LAorIyB0YXJnZXQgYW5kIGJ1aWxkIHN5c3RlbSB0eXBlcywgZXhlY3V0ZSBDTUQgb3IgcHJpbnQgYSBkZWZhdWx0CisjIGVycm9yIG1lc3NhZ2UuICBOb3cgaGFuZGxlZCB2aWEgX0FDX0FSR19WQVJfUFJFQ0lPVVMuCitBVV9ERUZVTihbQUNfVkFMSURBVEVfQ0FDSEVEX1NZU1RFTV9UVVBMRV0sIFtdKQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIENhY2hpbmcgdGVzdCByZXN1bHRzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIEFDX1NJVEVfTE9BRAorIyAtLS0tLS0tLS0tLS0KKyMgTG9vayBmb3Igc2l0ZS0gb3Igc3lzdGVtLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIHNjcmlwdHMuCittNF9kZWZpbmUoW0FDX1NJVEVfTE9BRF0sCitbIyBQcmVmZXIgYW4gZXhwbGljaXRseSBzZWxlY3RlZCBmaWxlIHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgb25lcy4KK2FjX3NpdGVfZmlsZTE9Tk9ORQorYWNfc2l0ZV9maWxlMj1OT05FCitpZiB0ZXN0IC1uICIkQ09ORklHX1NJVEUiOyB0aGVuCisgIGFjX3NpdGVfZmlsZTE9JENPTkZJR19TSVRFCitlbGlmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgorICBhY19zaXRlX2ZpbGUxPSRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKyAgYWNfc2l0ZV9maWxlMj0kcHJlZml4L2V0Yy9jb25maWcuc2l0ZQorZWxzZQorICBhY19zaXRlX2ZpbGUxPSRhY19kZWZhdWx0X3ByZWZpeC9zaGFyZS9jb25maWcuc2l0ZQorICBhY19zaXRlX2ZpbGUyPSRhY19kZWZhdWx0X3ByZWZpeC9ldGMvY29uZmlnLnNpdGUKK2ZpCitmb3IgYWNfc2l0ZV9maWxlIGluICIkYWNfc2l0ZV9maWxlMSIgIiRhY19zaXRlX2ZpbGUyIgorZG8KKyAgdGVzdCAieCRhY19zaXRlX2ZpbGUiID0geE5PTkUgJiYgY29udGludWUKKyAgaWYgdGVzdCAvZGV2L251bGwgIT0gIiRhY19zaXRlX2ZpbGUiICYmIHRlc3QgLXIgIiRhY19zaXRlX2ZpbGUiOyB0aGVuCisgICAgQUNfTVNHX05PVElDRShbbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlXSkKKyAgICBzZWQgJ3MvXi98IC8nICIkYWNfc2l0ZV9maWxlIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgLiAiJGFjX3NpdGVfZmlsZSIKKyAgZmkKK2RvbmUKK10pCisKKworIyBBQ19DQUNIRV9MT0FECisjIC0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbQUNfQ0FDSEVfTE9BRF0sCitbaWYgdGVzdCAtciAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICMgU29tZSB2ZXJzaW9ucyBvZiBiYXNoIHdpbGwgZmFpbCB0byBzb3VyY2UgL2Rldi9udWxsIChzcGVjaWFsIGZpbGVzCisgICMgYWN0dWFsbHkpLCBzbyB3ZSBhdm9pZCBkb2luZyB0aGF0LiAgREpHUFAgZW11bGF0ZXMgaXQgYXMgYSByZWd1bGFyIGZpbGUuCisgIGlmIHRlc3QgL2Rldi9udWxsICE9ICIkY2FjaGVfZmlsZSIgJiYgdGVzdCAtZiAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgQUNfTVNHX05PVElDRShbbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZV0pCisgICAgY2FzZSAkY2FjaGVfZmlsZSBpbgorICAgICAgW1tcXC9dXSogfCA/OltbXFwvXV0qICkgLiAiJGNhY2hlX2ZpbGUiOzsKKyAgICAgICopICAgICAgICAgICAgICAgICAgICAgIC4gIi4vJGNhY2hlX2ZpbGUiOzsKKyAgICBlc2FjCisgIGZpCitlbHNlCisgIEFDX01TR19OT1RJQ0UoW2NyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlXSkKKyAgPiRjYWNoZV9maWxlCitmaQorXSkjIEFDX0NBQ0hFX0xPQUQKKworCisjIF9BQ19DQUNIRV9EVU1QCisjIC0tLS0tLS0tLS0tLS0tCisjIER1bXAgdGhlIGNhY2hlIHRvIHN0ZG91dC4gIEl0IGNhbiBiZSBpbiBhIHBpcGUgKHRoaXMgaXMgYSByZXF1aXJlbWVudCkuCittNF9kZWZpbmUoW19BQ19DQUNIRV9EVU1QXSwKK1sjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorIyBidXQgd2Uga25vdyBvZiBubyB3b3JrYXJvdW5kIHRoYXQgaXMgc2ltcGxlLCBwb3J0YWJsZSwgYW5kIGVmZmljaWVudC4KKyMgU28sIHdlIGtpbGwgdmFyaWFibGVzIGNvbnRhaW5pbmcgbmV3bGluZXMuCisjIFVsdHJpeCBzaCBzZXQgd3JpdGVzIHRvIHN0ZGVyciBhbmQgY2FuJ3QgYmUgcmVkaXJlY3RlZCBkaXJlY3RseSwKKyMgYW5kIHNldHMgdGhlIGhpZ2ggYml0IGluIHRoZSBjYWNoZSBmaWxlIHVubGVzcyB3ZSBhc3NpZ24gdG8gdGhlIHZhcnMuCisoCisgIGZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfCBzZWQgLW4gWydzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ11gOyBkbworICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAorICAgICoke2FzX25sfSopCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgICpfY3ZfKikgQUNfTVNHX1dBUk4oW2NhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lXSkgOzsKKyAgICAgIGVzYWMKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAorICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKKyAgICAgICopIEFTX1VOU0VUKFskYWNfdmFyXSkgOzsKKyAgICAgIGVzYWMgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAoc2V0KSAyPiYxIHwKKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9JyAnOyBzZXQpIDI+JjFgIGluICMoCisgICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQorICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXM6IGRvdWJsZS1xdW90ZQorICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXC4KKyAgICAgIHNlZCAtbiBcCisJWyJzLycvJ1xcXFwnJy9nOworCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIl0KKyAgICAgIDs7ICMoCisgICAgKikKKyAgICAgICMgYHNldCcgcXVvdGVzIGNvcnJlY3RseSBhcyByZXF1aXJlZCBieSBQT1NJWCwgc28gZG8gbm90IGFkZCBxdW90ZXMuCisgICAgICBzZWQgLW4gWyIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCJdCisgICAgICA7OworICAgIGVzYWMgfAorICAgIHNvcnQKKylkbmwKK10pIyBfQUNfQ0FDSEVfRFVNUAorCisKKyMgQUNfQ0FDSEVfU0FWRQorIyAtLS0tLS0tLS0tLS0tCisjIFNhdmUgdGhlIGNhY2hlLgorIyBBbGxvdyBhIHNpdGUgaW5pdGlhbGl6YXRpb24gc2NyaXB0IHRvIG92ZXJyaWRlIGNhY2hlIHZhbHVlcy4KK200X2RlZmluZShbQUNfQ0FDSEVfU0FWRV0sCitbY2F0ID5jb25mY2FjaGUgPDxcX0FDRU9GCisjIFRoaXMgZmlsZSBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBjb25maWd1cmUKKyMgdGVzdHMgcnVuIG9uIHRoaXMgc3lzdGVtIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGNvbmZpZ3VyZQorIyBzY3JpcHRzIGFuZCBjb25maWd1cmUgcnVucywgc2VlIGNvbmZpZ3VyZSdzIG9wdGlvbiAtLWNvbmZpZy1jYWNoZS4KKyMgSXQgaXMgbm90IHVzZWZ1bCBvbiBvdGhlciBzeXN0ZW1zLiAgSWYgaXQgY29udGFpbnMgcmVzdWx0cyB5b3UgZG9uJ3QKKyMgd2FudCB0byBrZWVwLCB5b3UgbWF5IHJlbW92ZSBvciBlZGl0IGl0LgorIworIyBjb25maWcuc3RhdHVzIG9ubHkgcGF5cyBhdHRlbnRpb24gdG8gdGhlIGNhY2hlIGZpbGUgaWYgeW91IGdpdmUgaXQKKyMgdGhlIC0tcmVjaGVjayBvcHRpb24gdG8gcmVydW4gY29uZmlndXJlLgorIworIyBgYWNfY3ZfZW52X2ZvbycgdmFyaWFibGVzIChzZXQgb3IgdW5zZXQpIHdpbGwgYmUgb3ZlcnJpZGRlbiB3aGVuCisjIGxvYWRpbmcgdGhpcyBmaWxlLCBvdGhlciAqdW5zZXQqIGBhY19jdl9mb28nIHdpbGwgYmUgYXNzaWduZWQgdGhlCisjIGZvbGxvd2luZyB2YWx1ZXMuCisKK19BQ0VPRgorCitfQUNfQ0FDSEVfRFVNUCgpIHwKKyAgc2VkIFsnCisgICAgIC9eYWNfY3ZfZW52Xy9iIGVuZAorICAgICB0IGNsZWFyCisgICAgIDpjbGVhcgorICAgICBzL15cKFtePV0qXCk9XCguKlt7fV0uKlwpJC90ZXN0ICIke1wxK3NldH0iID0gc2V0IHx8ICYvCisgICAgIHQgZW5kCisgICAgIHMvXlwoW149XSpcKT1cKC4qXCkkL1wxPSR7XDE9XDJ9LworICAgICA6ZW5kJ10gPj5jb25mY2FjaGUKK2lmIGRpZmYgIiRjYWNoZV9maWxlIiBjb25mY2FjaGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgaWYgdGVzdCAtdyAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgdGVzdCAieCRjYWNoZV9maWxlIiAhPSAieC9kZXYvbnVsbCIgJiYKKyAgICAgIEFDX01TR19OT1RJQ0UoW3VwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlXSkKKyAgICBjYXQgY29uZmNhY2hlID4kY2FjaGVfZmlsZQorICBlbHNlCisgICAgQUNfTVNHX05PVElDRShbbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGVdKQorICBmaQorZmkKK3JtIC1mIGNvbmZjYWNoZVtdZG5sCitdKSMgQUNfQ0FDSEVfU0FWRQorCisKKyMgQUNfQ0FDSEVfVkFMKENBQ0hFLUlELCBDT01NQU5EUy1UTy1TRVQtSVQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGUgbmFtZSBvZiBzaGVsbCB2YXIgQ0FDSEUtSUQgbXVzdCBjb250YWluIGBfY3ZfJyBpbiBvcmRlciB0byBnZXQgc2F2ZWQuCisjIFNob3VsZCBiZSBkbmwnZWQuICBUcnkgdG8gY2F0Y2ggY29tbW9uIG1pc3Rha2VzLgorbTRfZGVmdW4oW0FDX0NBQ0hFX1ZBTF0sCitbQVNfTElURVJBTF9JRihbJDFdLCBbbTRfaWYobTRfaW5kZXgobTRfcXVvdGUoJDEpLCBbX2N2X10pLCBbLTFdLAorCQkJICAgIFtBQ19ESUFHTk9TRShbc3ludGF4XSwKK1skMCgkMSwgLi4uKTogc3VzcGljaW91cyBjYWNoZS1pZCwgbXVzdCBjb250YWluIF9jdl8gdG8gYmUgY2FjaGVkXSldKV0pZG5sCittNF9pZihtNF9pbmRleChbJDJdLCBbQUNfREVGSU5FXSksIFstMV0sIFtdLAorICAgICAgW0FDX0RJQUdOT1NFKFtzeW50YXhdLAorWyQwKCQxLCAuLi4pOiBzdXNwaWNpb3VzIHByZXNlbmNlIG9mIGFuIEFDX0RFRklORSBpbiB0aGUgc2Vjb25kIGFyZ3VtZW50LCBdZG5sCitbd2hlcmUgbm8gYWN0aW9ucyBzaG91bGQgYmUgdGFrZW5dKV0pZG5sCittNF9pZihtNF9pbmRleChbJDJdLCBbQUNfU1VCU1RdKSwgWy0xXSwgW10sCisgICAgICBbQUNfRElBR05PU0UoW3N5bnRheF0sCitbJDAoJDEsIC4uLik6IHN1c3BpY2lvdXMgcHJlc2VuY2Ugb2YgYW4gQUNfU1VCU1QgaW4gdGhlIHNlY29uZCBhcmd1bWVudCwgXWRubAorW3doZXJlIG5vIGFjdGlvbnMgc2hvdWxkIGJlIHRha2VuXSldKWRubAorQVNfVkFSX1NFVF9JRihbJDFdLAorCSAgICAgIFtfQVNfRUNIT19OKFsoY2FjaGVkKSBdKV0sCisJICAgICAgWyQyXSkKK10pCisKKworIyBBQ19DQUNIRV9DSEVDSyhNRVNTQUdFLCBDQUNIRS1JRCwgQ09NTUFORFMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRG8gbm90IGNhbGwgdGhpcyBtYWNybyB3aXRoIGEgZG5sIHJpZ2h0IGJlaGluZC4KK200X2RlZnVuKFtBQ19DQUNIRV9DSEVDS10sCitbQUNfTVNHX0NIRUNLSU5HKFskMV0pCitBQ19DQUNIRV9WQUwoWyQyXSwgWyQzXSlkbmwKK0FTX0xJVEVSQUxfSUYoWyQyXSwKKwkgICAgICBbQUNfTVNHX1JFU1VMVChbJCQyXSldLAorCSAgICAgIFtBU19WQVJfQ09QWShbYWNfcmVzXSwgWyQyXSkKKwkgICAgICAgQUNfTVNHX1JFU1VMVChbJGFjX3Jlc10pXSlkbmwKK10pCisKKyMgX0FDX0NBQ0hFX0NIRUNLX0lOVChNRVNTQUdFLCBDQUNIRS1JRCwgRVhQUkVTU0lPTiwKKyMgICAgICAgICAgICAgICAgICAgICBbUFJPTE9HVUUgPSBERUZBVUxULUlOQ0xVREVTXSwgW0lGLUZBSUxTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19BQ19DQUNIRV9DSEVDS19JTlRdLAorW0FDX0NBQ0hFX0NIRUNLKFskMV0sIFskMl0sCisgICBbQUNfQ09NUFVURV9JTlQoWyQyXSwgWyQzXSwgWyQ0XSwgWyQ1XSldKQorXSkjIF9BQ19DQUNIRV9DSEVDS19JTlQKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIERlZmluaW5nIENQUCBzeW1ib2xzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIEFDX0RFRklORV9UUkFDRV9MSVRFUkFMKExJVEVSQUwtQ1BQLVNZTUJPTCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBVc2VkIGJ5IC0tdHJhY2UgdG8gY29sbGVjdCB0aGUgbGlzdCBvZiBBQ19ERUZJTkVkIG1hY3Jvcy4KK200X2RlZmluZShbQUNfREVGSU5FX1RSQUNFX0xJVEVSQUxdLAorW200X3BhdHRlcm5fYWxsb3coW14kMSRdKWRubAorQVNfSURFTlRJRklFUl9JRihbJDFdLCBbXSwKKyAgW200X3dhcm4oW3N5bnRheF0sIFtBQ19ERUZJTkU6IG5vdCBhbiBpZGVudGlmaWVyOiAkMV0pXSlkbmwKK10pIyBBQ19ERUZJTkVfVFJBQ0VfTElURVJBTAorCisKKyMgQUNfREVGSU5FX1RSQUNFKENQUC1TWU1CT0wpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIG1hY3JvIGlzIGEgd3JhcHBlciBhcm91bmQgQUNfREVGSU5FX1RSQUNFX0xJVEVSQUwgd2hpY2ggZmlsdGVycworIyBvdXQgbm9uIGxpdGVyYWwgc3ltYm9scy4gIENQUC1TWU1CT0wgbXVzdCBub3QgaW5jbHVkZSBhbnkgcGFyYW1ldGVycy4KK200X2RlZmluZShbQUNfREVGSU5FX1RSQUNFXSwKK1tBU19MSVRFUkFMX0lGKFskMV0sIFtBQ19ERUZJTkVfVFJBQ0VfTElURVJBTChfbTRfZXhwYW5kKFskMV0pKV0pXSkKKworCisjIEFDX0RFRklORShWQVJJQUJMRSwgW1ZBTFVFXSwgW0RFU0NSSVBUSU9OXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgVkFSSUFCTEUgdG8gVkFMVUUsIHZlcmJhdGltLCBvciAxLiAgUmVtZW1iZXIgdGhlIHZhbHVlCisjIGFuZCBpZiBWQVJJQUJMRSBpcyBhZmZlY3RlZCB0aGUgc2FtZSBWQUxVRSwgZG8gbm90aGluZywgZWxzZQorIyBkaWUuICBUaGUgdGhpcmQgYXJndW1lbnQgaXMgdXNlZCBieSBhdXRvaGVhZGVyLgorbTRfZGVmaW5lKFtBQ19ERUZJTkVdLCBbX0FDX0RFRklORV9RKFtfJDBdLCAkQCldKQorCisjIF9BQ19ERUZJTkUoU1RSSU5HKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXBwZW5kIHRoZSBwcmUtZXhwYW5kZWQgU1RSSU5HIGFuZCBhIG5ld2xpbmUgdG8gY29uZmRlZnMuaCwgYXMgaWYgYnkKKyMgYSBxdW90ZWQgaGVyZS1kb2MuCittNF9kZWZpbmUoW19BQ19ERUZJTkVdLAorW0FTX0VDSE8oWyJBU19FU0NBUEUoW1skMV1dKSJdKSA+PmNvbmZkZWZzLmhdKQorCisKKyMgQUNfREVGSU5FX1VOUVVPVEVEKFZBUklBQkxFLCBbVkFMVUVdLCBbREVTQ1JJUFRJT05dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNpbWlsYXIsIGJ1dCBwZXJmb3JtIHNoZWxsIHN1YnN0aXR1dGlvbnMgJCBgIFwgb25jZSBvbiBWQUxVRSwgYXMKKyMgaW4gYW4gdW5xdW90ZWQgaGVyZS1kb2MuCittNF9kZWZpbmUoW0FDX0RFRklORV9VTlFVT1RFRF0sIFtfQUNfREVGSU5FX1EoW18kMF0sICRAKV0pCisKKyMgX0FDX0RFRklORV9VTlFVT1RFRChTVFJJTkcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgdGhlIHByZS1leHBhbmRlZCBTVFJJTkcgYW5kIGEgbmV3bGluZSB0byBjb25mZGVmcy5oLCBhcyBpZgorIyB3aXRoIGFuIHVucXVvdGVkIGhlcmUtZG9jLCBidXQgYXZvaWRpbmcgYSBmb3JrIGluIHRoZSBjb21tb24gY2FzZSBvZgorIyBubyBiYWNrc2xhc2gsIG5vIGNvbW1hbmQgc3Vic3RpdHV0aW9uLCBubyBjb21wbGV4IHZhcmlhYmxlCisjIHN1YnN0aXR1dGlvbiwgYW5kIG5vIHF1YWRyaWdyYXBocy4KK200X2RlZmluZShbX0FDX0RFRklORV9VTlFVT1RFRF0sCitbbTRfaWYobTRfYnJlZ2V4cChbJDFdLCBbXFxcfGBcfFwkKFx8XCR7XHxAXSksIFstMV0sCisgICAgICAgW0FTX0VDSE8oWyJBU19FU0NBUEUoWyQxXSwgWyIiXSkiXSkgPj5jb25mZGVmcy5oXSwKKyAgICAgICBbY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorWyQxXQorX0FDRU9GXSldKQorCisKKyMgX0FDX0RFRklORV9RKE1BQ1JPLCBWQVJJQUJMRSwgW1ZBTFVFXSwgW0RFU0NSSVBUSU9OXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSW50ZXJuYWwgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBjb21tb24gZWxlbWVudHMgb2YgQUNfREVGSU5FeyxfVU5RVU9URUR9LgorIyBNQUNSTyBtdXN0IHRha2Ugb25lIGFyZ3VtZW50LCB3aGljaCBpcyB0aGUgZnVsbHkgZXhwYW5kZWQgc3RyaW5nIHRvCisjIGFwcGVuZCB0byBjb25mZGVmcy5oIGFzIGlmIGJ5IGEgcG9zc2libHktcXVvdGVkIGhlcmUtZG9jLgorIworIyBtNF9pbmRleCBpcyByb3VnaGx5IDUgdG8gOCB0aW1lcyBmYXN0ZXIgdGhhbiBtNF9icGF0c3Vic3QsIHNvIHdlIHVzZQorIyBtNF9mb3JtYXQgcmF0aGVyIHRoYW4gcmVnZXggdG8gZ3JhYiBwcmVmaXggdXAgdG8gZmlyc3QgKCkuICBBQ19uYW1lCisjIGlzIGRlZmluZWQgd2l0aCBvdmVyLXF1b3RhdGlvbiwgc28gdGhhdCB3ZSBjYW4gYXZvaWQgbTRfZGVmbjsgdGhpcworIyBpcyBvbmx5IHNhZmUgYmVjYXVzZSB0aGUgbmFtZSBzaG91bGQgbm90IGNvbnRhaW4gJC4KKyMKKyMgR3VhcmFudGVlIGEgbWF0Y2ggaW4gbTRfaW5kZXgsIHNvIGFzIHRvIGF2b2lkIGEgYnVnIHdpdGggcHJlY2lzaW9uCisjIC0xIGluIG00X2Zvcm1hdCBpbiBvbGRlciBtNC4KK200X2RlZmluZShbX0FDX0RFRklORV9RXSwKK1ttNF9wdXNoZGVmKFtBQ19uYW1lXSwgbTRfZm9ybWF0KFtbWyUuKnNdXV0sIG00X2luZGV4KFskMihdLCBbKF0pLCBbJDJdKSldZG5sCitbQUNfREVGSU5FX1RSQUNFKEFDX25hbWUpXWRubAorW200X2NvbmQoW200X2luZGV4KFskM10sIFsKK10pXSwgWy0xXSwgW10sCisJW0FTX0xJVEVSQUxfSUYoWyQzXSwgW200X2JyZWdleHAoW1skM11dLCBbW15cXF0KK10sIFstXSldKV0sIFtdLCBbXSwKKwlbbTRfd2Fybihbc3ludGF4XSwgW0FDX0RFRklORV1tNF9pZihbJDFdLCBbX0FDX0RFRklORV0sIFtdLAorICBbW19VTlFVT1RFRF1dKVs6IGAkMycgaXMgbm90IGEgdmFsaWQgcHJlcHJvY2Vzc29yIGRlZmluZSB2YWx1ZV0pXSldZG5sCitbbTRfaWZ2YWwoWyQ0XSwgW0FIX1RFTVBMQVRFKEFDX25hbWUsIFskNF0pCitdKV9tNF9wb3BkZWYoW0FDX25hbWVdKV1kbmwKK1skMShtNF9leHBhbmQoW1tAJTpAZGVmaW5lXSAkMiBdbTRfaWYoWyQjXSwgMiwgMSwKKyAgWyQzXSwgW10sIFsvKiovXSwgW1skM11dKSkpCitdKQorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFNldHRpbmcgb3V0cHV0IHZhcmlhYmxlcy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgQUNfU1VCU1RfVFJBQ0UoVkFSSUFCTEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIG1hY3JvIGlzIHVzZWQgd2l0aCAtLXRyYWNlIHRvIGNvbGxlY3QgdGhlIGxpc3Qgb2Ygc3Vic3RpdHV0ZWQgdmFyaWFibGVzLgorbTRfZGVmaW5lKFtBQ19TVUJTVF9UUkFDRV0pCisKKworIyBBQ19TVUJTVChWQVJJQUJMRSwgW1ZBTFVFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENyZWF0ZSBhbiBvdXRwdXQgdmFyaWFibGUgZnJvbSBhIHNoZWxsIFZBUklBQkxFLiAgSWYgVkFMVUUgaXMgZ2l2ZW4KKyMgYXNzaWduIGl0IHRvIFZBUklBQkxFLiAgVXNlIGAiIicgaWYgeW91IHdhbnQgdG8gc2V0IFZBUklBQkxFIHRvIGFuCisjIGVtcHR5IHZhbHVlLCBub3QgYW4gZW1wdHkgc2Vjb25kIGFyZ3VtZW50LgorIworbTRfZGVmaW5lKFtBQ19TVUJTVF0sCitbQVNfSURFTlRJRklFUl9JRihbJDFdLCBbXSwKKyAgW200X2ZhdGFsKFskMDogYCQxJyBpcyBub3QgYSB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lXSldKV1kbmwKK1tBQ19TVUJTVF9UUkFDRShbJDFdKV1kbmwKK1ttNF9wYXR0ZXJuX2FsbG93KFteJDEkXSldZG5sCitbbTRfaWZ2YWxuKFskMl0sIFskMT0kMl0pW11dZG5sCitbbTRfc2V0X2FkZChbX0FDX1NVQlNUX1ZBUlNdLCBbJDFdKV0pIyBBQ19TVUJTVAorCisKKyMgQUNfU1VCU1RfRklMRShWQVJJQUJMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVhZCB0aGUgY29tbWVudHMgb2YgdGhlIHByZWNlZGluZyBtYWNyby4KK200X2RlZmluZShbQUNfU1VCU1RfRklMRV0sCitbbTRfcGF0dGVybl9hbGxvdyhbXiQxJF0pZG5sCittNF9hcHBlbmRfdW5pcShbX0FDX1NVQlNUX0ZJTEVTXSwgWyQxXSwgWworXSldKQorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBQcmludGluZyBtZXNzYWdlcyBhdCBhdXRvY29uZiBydW50aW1lLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIEluIGZhY3QsIEkgdGhpbmsgd2Ugc2hvdWxkIHByb21vdGUgdGhlIHVzZSBvZiBtNF93YXJuIGFuZCBtNF9mYXRhbAorIyBkaXJlY3RseS4gIFRoaXMgd2lsbCBhbHNvIGF2b2lkIHRvIHNvbWUgcGVvcGxlIHRvIGdldCBpdCB3cm9uZworIyBiZXR3ZWVuIEFDX0ZBVEFMIGFuZCBBQ19NU0dfRVJST1IuCisKKworIyBBQ19ESUFHTk9TRShDQVRFR09SWSwgTUVTU0FHRSkKKyMgQUNfRkFUQUwoTUVTU0FHRSwgW0VYSVQtU1RBVFVTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbQUNfRElBR05PU0VdLCBbbTRfd2FybigkQCldKQorbTRfZGVmaW5lKFtBQ19GQVRBTF0sICAgIFttNF9mYXRhbCgkQCldKQorCisKKyMgQUNfV0FSTklORyhNRVNTQUdFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlcG9ydCBhIE1FU1NBR0UgdG8gdGhlIHVzZXIgb2YgYXV0b2NvbmYgaWYgYC1XJyBvciBgLVcgYWxsJyB3YXMKKyMgc3BlY2lmaWVkLgorbTRfZGVmaW5lKFtBQ19XQVJOSU5HXSwKK1tBQ19ESUFHTk9TRShbc3ludGF4XSwgWyQxXSldKQorCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBQcmludGluZyBtZXNzYWdlcyBhdCBjb25maWd1cmUgcnVudGltZS4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBBQ19NU0dfQ0hFQ0tJTkcoRkVBVFVSRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW0FDX01TR19DSEVDS0lOR10sCitbeyBfQVNfRUNIT19MT0coW2NoZWNraW5nICQxXSkKK19BU19FQ0hPX04oW2NoZWNraW5nICQxLi4uIF0pOyB9ZG5sCitdKQorCisKKyMgQUNfTVNHX1JFU1VMVChSRVNVTFQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtBQ19NU0dfUkVTVUxUXSwKK1t7IF9BU19FQ0hPX0xPRyhbcmVzdWx0OiAkMV0pCitfQVNfRUNITyhbJDFdKTsgfWRubAorXSkKKworCisjIEFDX01TR19XQVJOKFBST0JMRU0pCisjIEFDX01TR19OT1RJQ0UoU1RSSU5HKQorIyBBQ19NU0dfRVJST1IoRVJST1IsIFtFWElULVNUQVRVUyA9IDFdKQorIyBBQ19NU0dfRkFJTFVSRShFUlJPUiwgW0VYSVQtU1RBVFVTID0gMV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2NvcHkoW0FTX1dBUk5dLCAgICBbQUNfTVNHX1dBUk5dKQorbTRfY29weShbQVNfTUVTU0FHRV0sIFtBQ19NU0dfTk9USUNFXSkKK200X2NvcHkoW0FTX0VSUk9SXSwgICBbQUNfTVNHX0VSUk9SXSkKK200X2RlZmluZShbQUNfTVNHX0ZBSUxVUkVdLAorW3sgQVNfTUVTU0FHRShbZXJyb3I6IGluIGAkYWNfcHdkJzpdLCAyKQorQUNfTVNHX0VSUk9SKFskMQorU2VlIGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLl0sIFskMl0pOyB9XSkKKworCisjIF9BQ19NU0dfTE9HX0NPTkZURVNUCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19BQ19NU0dfTE9HX0NPTkZURVNUXSwKK1tBU19FQ0hPKFsiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6Il0pID4mQVNfTUVTU0FHRV9MT0dfRkQKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JkFTX01FU1NBR0VfTE9HX0ZECitdKQorCisKKyMgQVU6OkFDX0NIRUNLSU5HKEZFQVRVUkUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQVVfREVGVU4oW0FDX0NIRUNLSU5HXSwKK1tBU19NRVNTQUdFKFtjaGVja2luZyAkMS4uLl0pXSkKKworCisjIEFVOjpBQ19NU0dfUkVTVUxUX1VOUVVPVEVEKFJFU1VMVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBObyBlc2NhcGluZywgc28gaXQgcGVyZm9ybWVkIGFsc28gYmFja3RpY2sgc3Vic3RpdHV0aW9uLgorQVVfREVGVU4oW0FDX01TR19SRVNVTFRfVU5RVU9URURdLAorW19BU19FQ0hPX1VOUVVPVEVEKFskYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJDFdLCBBU19NRVNTQUdFX0xPR19GRCkKK19BU19FQ0hPX1VOUVVPVEVEKFskMV0pW11kbmwKK10pCisKKworIyBBVTo6QUNfVkVSQk9TRShTVFJJTkcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FVX0FMSUFTKFtBQ19WRVJCT1NFXSwgW0FDX01TR19SRVNVTFRdKQorCisKKworCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQ29tcGlsZXItcnVubmluZyBtZWNoYW5pY3MuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgX0FDX1JVTl9MT0coQ09NTUFORCwgTE9HLUNPTU1BTkRTKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV2YWwgQ09NTUFORCwgc2F2ZSB0aGUgZXhpdCBzdGF0dXMgaW4gYWNfc3RhdHVzLCBhbmQgbG9nIGl0LiAgVGhlIHJldHVybgorIyBjb2RlIGlzIDAgaWYgQ09NTUFORCBzdWNjZWVkZWQsIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgZGlyZWN0bHkgaW4gQVNfSUYKKyMgY29uc3RydWN0cy4KK0FDX0RFRlVOKFtfQUNfUlVOX0xPR10sCitbeyB7ICQyOyB9ID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgKCQxKSAyPiZBU19NRVNTQUdFX0xPR19GRAorICBhY19zdGF0dXM9JD8KKyAgX0FTX0VDSE9fTE9HKFtcJD8gPSAkYWNfc3RhdHVzXSkKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfV0pCisKKworIyBfQUNfUlVOX0xPR19TVERFUlIoQ09NTUFORCwgTE9HLUNPTU1BTkRTKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSdW4gQ09NTUFORCwgc2F2ZSBpdHMgc3RkZXJyIGludG8gY29uZnRlc3QuZXJyLCBzYXZlIHRoZSBleGl0IHN0YXR1cworIyBpbiBhY19zdGF0dXMsIGFuZCBsb2cgaXQuICBEb24ndCBmb3JnZXQgdG8gY2xlYW4gdXAgY29uZnRlc3QuZXJyIGFmdGVyCisjIHVzZS4KKyMgTm90ZSB0aGF0IHdoZW4gdHJhY2luZywgbW9zdCBzaGVsbHMgd2lsbCBsZWF2ZSB0aGUgdHJhY2VzIGluIHN0ZGVycgorIyBzdGFydGluZyB3aXRoICIrIjogdGhhdCdzIHdoYXQgdGhpcyBtYWNybyB0cmllcyB0byBhZGRyZXNzLgorIyBUaGUgcmV0dXJuIGNvZGUgaXMgMCBpZiBDT01NQU5EIHN1Y2NlZWRlZCwgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBkaXJlY3RseQorIyBpbiBBU19JRiBjb25zdHJ1Y3RzLgorQUNfREVGVU4oW19BQ19SVU5fTE9HX1NUREVSUl0sCitbeyB7ICQyOyB9ID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgKCQxKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiZBU19NRVNTQUdFX0xPR19GRAorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgX0FTX0VDSE9fTE9HKFtcJD8gPSAkYWNfc3RhdHVzXSkKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfV0pCisKKworIyBfQUNfUlVOX0xPR19MSU1JVChDT01NQU5ELCBMT0ctQ09NTUFORFMsIFtMSU5FU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlrZSBfQUNfUlVOX0xPRywgYnV0IG9ubHkgbG9nIExJTkVTIGxpbmVzIGZyb20gc3RkZXJyLAorIyBkZWZhdWx0aW5nIHRvIDEwIGxpbmVzLgorQUNfREVGVU4oW19BQ19SVU5fTE9HX0xJTUlUXSwKK1t7IHsgJDI7IH0gPiZBU19NRVNTQUdFX0xPR19GRAorICAoJDEpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIHNlZCAnbTRfZGVmYXVsdChbJDNdLCBbMTBdKWFcCisuLi4gcmVzdCBvZiBzdGRlcnIgb3V0cHV0IGRlbGV0ZWQgLi4uCisgICAgICAgICBtNF9kZWZhdWx0KFskM10sIFsxMF0pcScgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBfQVNfRUNIT19MT0coW1wkPyA9ICRhY19zdGF0dXNdKQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9XSkKKworCisjIF9BQ19ET19FQ0hPKENPTU1BTkQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVjaG8gQ09NTUFORC4gIFRoaXMgaXMgZGVzaWduZWQgdG8gYmUgdXNlZCBqdXN0IGJlZm9yZSBldmFsdWF0aW5nIENPTU1BTkQuCitBQ19ERUZVTihbX0FDX0RPX0VDSE9dLAorW200X2lmKFskMV0sIFskYWNfdHJ5XSwgW10sIFthY190cnk9IiQxIgorXSldZG5sCitkbmwgSWYgdGhlIHN0cmluZyBjb250YWlucyAnXCInLCAnYCcsIG9yICdcXCcsIHRoZW4ganVzdCBlY2hvIGl0IHJhdGhlcgorZG5sIHRoYW4gZXhwYW5kaW5nIGl0LiAgVGhpcyBpcyBhIGhhY2ssIGJ1dCBpdCBpcyBzYWZlciwgd2hpbGUgYWxzbworZG5sIHR5cGljYWxseSBleHBhbmRpbmcgc2ltcGxlIHN1YnN0cmluZ3MgbGlrZSAnJENDJywgd2hpY2ggaXMgd2hhdCB3ZSB3YW50LgorZG5sCitkbmwgTXVjaCBvZiB0aGlzIG1hY3JvIGJvZHkgaXMgcXVvdGVkLCB0byB3b3JrIGFyb3VuZCBtaXN1c2VzIGxpa2UKK2RubCBgQUNfQ0hFQ0tfRlVOQyhzaWdibG9jaywgLCBBQ19DSEVDS19MSUIoYnNkLCBzaWdibG9jaykpJywKK2RubCB3aGljaCB1bmRlcnF1b3RlcyB0aGUgM3JkIGFyZyBhbmQgd291bGQgbWlzYmVoYXZlIGlmIHdlIGRpZG4ndCBxdW90ZSBoZXJlLgorZG5sIFRoZSAiKCgkYWNfdHJ5IiBpbnN0ZWFkIG9mICRhY190cnkgYXZvaWRzIHByb2JsZW1zIHdpdGggZXZlbi13b3JzZQorZG5sIHVuZGVycXVvdGluZyBtaXN1c2VzLCBzdWNoIGFzCitkbmwgYEFDX0NIRUNLX0ZVTkMoZm9vLCAsIEFDX0NIRUNLX0xJQihhLCBmb28sICwgQUNfQ0hFQ0tfTElCKGIsIGZvbykpKScuCitkbmwgV2Ugbm9ybWFsbHkgd291bGRuJ3QgYm90aGVyIHdpdGggdGhpcyBraW5kIG9mIHdvcmthcm91bmQgZm9yIGludmFsaWQgY29kZQorZG5sIGJ1dCB0aGlzIGNoYW5nZSB3YXMgcHV0IGluIGp1c3QgYmVmb3JlIEF1dG9jb25mIDIuNjAgYW5kIHdlIHdhbnRlZCB0bworZG5sIG1pbmltaXplIHRoZSBpbnRlZ3JhdGlvbiBoYXNzbGUuCitbW2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiJdCitBU19FQ0hPKFsiJGFjX3RyeV9lY2hvIl0pXSkKKworIyBfQUNfRE8oQ09NTUFORCkKKyMgLS0tLS0tLS0tLS0tLS0tCisjIEV2YWwgQ09NTUFORCwgc2F2ZSB0aGUgZXhpdCBzdGF0dXMgaW4gYWNfc3RhdHVzLCBhbmQgbG9nIGl0LgorIyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCitBQ19ERUZVTihbX0FDX0RPXSwKK1tfQUNfUlVOX0xPRyhbZXZhbCAiJDEiXSwKKwkgICAgIFtfQUNfRE9fRUNITyhbJDFdKV0pXSkKKworCisjIF9BQ19ET19TVERFUlIoQ09NTUFORCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWtlIF9BQ19SVU5fTE9HX1NUREVSUiwgYnV0IGV2YWwgKGluc3RlYWQgb2YgcnVubmluZykgQ09NTUFORC4KK0FDX0RFRlVOKFtfQUNfRE9fU1RERVJSXSwKK1tfQUNfUlVOX0xPR19TVERFUlIoW2V2YWwgIiQxIl0sCisJCSAgICBbX0FDX0RPX0VDSE8oWyQxXSldKV0pCisKKworIyBfQUNfRE9fVkFSKFZBUklBQkxFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFdmFsdWF0ZSAiJFZBUklBQkxFIiwgd2hpY2ggc2hvdWxkIGJlIGEgdmFsaWQgc2hlbGwgY29tbWFuZC4KKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBtYWNybyBpcyB0byB3cml0ZSAiY29uZmlndXJlOjEyMzogY29tbWFuZCBsaW5lIgorIyBpbnRvIGNvbmZpZy5sb2cgZm9yIGV2ZXJ5IHRlc3QgcnVuLgorQUNfREVGVU4oW19BQ19ET19WQVJdLAorW19BQ19ETyhbJCQxXSldKQorCisKKyMgX0FDX0RPX1RPS0VOUyhDT01NQU5EKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpa2UgX0FDX0RPX1ZBUiwgYnV0IGV4ZWN1dGUgQ09NTUFORCBpbnN0ZWFkLCB3aGVyZSBDT01NQU5EIGlzIGEgc2VyaWVzIG9mCisjIHRva2VucyBvZiB0aGUgc2hlbGwgY29tbWFuZCBsYW5ndWFnZS4KK0FDX0RFRlVOKFtfQUNfRE9fVE9LRU5TXSwKK1t7IGFjX3RyeT0nJDEnCisgIF9BQ19ETyhbJGFjX3RyeV0pOyB9XSkKKworCisjIF9BQ19ET19MSU1JVChDT01NQU5ELCBbTElORVNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlrZSBfQUNfRE8sIGJ1dCBsaW1pdCB0aGUgYW1vdW50IG9mIHN0ZGVyciBsaW5lcyBsb2dnZWQgdG8gTElORVMuCisjIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KK0FDX0RFRlVOKFtfQUNfRE9fTElNSVRdLAorW19BQ19SVU5fTE9HX0xJTUlUKFtldmFsICIkMSJdLAorCQkgICBbX0FDX0RPX0VDSE8oWyQxXSldLCBbJDJdKV0pCisKKworIyBfQUNfRVZBTChDT01NQU5EKQorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBFdmFsIENPTU1BTkQsIHNhdmUgdGhlIGV4aXQgc3RhdHVzIGluIGFjX3N0YXR1cywgYW5kIGxvZyBpdC4KKyMgVW5saWtlIF9BQ19ETywgdGhpcyBtYWNybyBtaXNoYW5kbGVzIHF1b3RlZCBhcmd1bWVudHMgaW4gc29tZSBjYXNlcy4KKyMgSXQgaXMgcHJlc2VudCBvbmx5IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXMgQXV0b2NvbmYgdmVyc2lvbnMuCitBQ19ERUZVTihbX0FDX0VWQUxdLAorW19BQ19SVU5fTE9HKFtldmFsICQxXSwKKwkgICAgIFtldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiQxXCIiXSldKQorCisKKyMgX0FDX0VWQUxfU1RERVJSKENPTU1BTkQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWtlIF9BQ19SVU5fTE9HX1NUREVSUiwgYnV0IGV2YWwgKGluc3RlYWQgb2YgcnVubmluZykgQ09NTUFORC4KKyMgVW5saWtlIF9BQ19ET19TVERFUlIsIHRoaXMgbWFjcm8gbWlzaGFuZGxlcyBxdW90ZWQgYXJndW1lbnRzIGluIHNvbWUgY2FzZXMuCisjIEl0IGlzIHByZXNlbnQgb25seSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHByZXZpb3VzIEF1dG9jb25mIHZlcnNpb25zLgorQUNfREVGVU4oW19BQ19FVkFMX1NUREVSUl0sCitbX0FDX1JVTl9MT0dfU1RERVJSKFtldmFsICQxXSwKKwkJICAgIFtldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiQxXCIiXSldKQorCisKKyMgQUNfVFJZX0VWQUwoVkFSSUFCTEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFdmFsdWF0ZSAkVkFSSUFCTEUsIHdoaWNoIHNob3VsZCBiZSBhIHZhbGlkIHNoZWxsIGNvbW1hbmQuCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgbWFjcm8gaXMgdG8gd3JpdGUgImNvbmZpZ3VyZToxMjM6IGNvbW1hbmQgbGluZSIKKyMgaW50byBjb25maWcubG9nIGZvciBldmVyeSB0ZXN0IHJ1bi4KKyMKKyMgVGhlIEFDX1RSWV9FVkFMIGFuZCBBQ19UUllfQ09NTUFORCBtYWNyb3MgYXJlIGRhbmdlcm91cyBhbmQKKyMgdW5kb2N1bWVudGVkLCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLgorIyBUaGV5IG1heSBiZSByZW1vdmVkIG9yIHRoZWlyIEFQSSBjaGFuZ2VkIGluIGEgZnV0dXJlIHJlbGVhc2UuCisjIEF1dG9jb25mIGl0c2VsZiBubyBsb25nZXIgdXNlcyB0aGVzZSB0d28gbWFjcm9zOyB0aGV5IGFyZSBwcmVzZW50CisjIG9ubHkgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91cyB2ZXJzaW9ucyBvZiBBdXRvY29uZi4KKyMgTm90IGV2ZXJ5IHNoZWxsIGNvbW1hbmQgd2lsbCB3b3JrIGR1ZSB0byBwcm9ibGVtcyB3aXRoIGV2YWwKKyMgYW5kIHF1b3RpbmcsIGFuZCB0aGUgcnVsZXMgZm9yIGV4YWN0bHkgd2hhdCBkb2VzIHdvcmsgYXJlIHRyaWNreS4KKyMgV29yc2UsIGR1ZSB0byBkb3VibGUtZXhwYW5zaW9uIGR1cmluZyBldmFsdWF0aW9uLCBhcmJpdHJhcnkgdW5pbnRlbmRlZAorIyBzaGVsbCBjb21tYW5kcyBjb3VsZCBiZSBleGVjdXRlZCBpbiBzb21lIHNpdHVhdGlvbnMuCitBQ19ERUZVTihbQUNfVFJZX0VWQUxdLAorW19BQ19FVkFMKFskJDFdKV0pCisKKworIyBBQ19UUllfQ09NTUFORChDT01NQU5EKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWtlIEFDX1RSWV9FVkFMLCBidXQgZXhlY3V0ZSBDT01NQU5EIGluc3RlYWQsIHdoZXJlIENPTU1BTkQgaXMgYSBzZXJpZXMgb2YKKyMgdG9rZW5zIG9mIHRoZSBzaGVsbCBjb21tYW5kIGxhbmd1YWdlLgorIyBUaGlzIG1hY3JvIHNob3VsZCBub3QgYmUgdXNlZDsgc2VlIHRoZSBjb21tZW50cyB1bmRlciBBQ19UUllfRVZBTCBmb3Igd2h5LgorQUNfREVGVU4oW0FDX1RSWV9DT01NQU5EXSwKK1t7IGFjX3RyeT0nJDEnCisgIF9BQ19FVkFMKFskYWNfdHJ5XSk7IH1dKQorCisKKyMgQUNfUlVOX0xPRyhDT01NQU5EKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfUlVOX0xPR10sCitbX0FDX1JVTl9MT0coWyQxXSwKKwkgICAgIFtBU19FQ0hPKFsiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBBU19FU0NBUEUoWyQxXSkiXSldKV0pCisKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRXhhbWluaW5nIGRlY2xhcmF0aW9ucy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIF9BQ19QUkVQUk9DX0lGRUxTRV9CT0RZCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNoZWxsIGZ1bmN0aW9uIGJvZHkgZm9yIF9BQ19QUkVQUk9DX0lGRUxTRS4KK200X2RlZmluZShbX0FDX1BSRVBST0NfSUZFTFNFX0JPRFldLAorWyAgQVNfTElORU5PX1BVU0goWyRbXTFdKQorICBBU19JRihbX0FDX0RPX1NUREVSUihbJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XSkgPi9kZXYvbnVsbCAmJiB7CisJIHRlc3QgLXogIiRhY19bXV9BQ19MQU5HX0FCQlJFVltdX3ByZXByb2Nfd2Fybl9mbGFnJGFjX1tdX0FDX0xBTkdfQUJCUkVWW11fd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9XSwKKyAgICBbYWNfcmV0dmFsPTBdLAorICAgIFtfQUNfTVNHX0xPR19DT05GVEVTVAorICAgIGFjX3JldHZhbD0xXSkKKyAgQVNfTElORU5PX1BPUAorICBBU19TRVRfU1RBVFVTKFskYWNfcmV0dmFsXSkKK10pIyBfQUNfUFJFUFJPQ19JRkVMU0VfQk9EWQorCisKKyMgX0FDX1BSRVBST0NfSUZFTFNFKFBST0dSQU0sIFtBQ1RJT04tSUYtVFJVRV0sIFtBQ1RJT04tSUYtRkFMU0VdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBwcmVwcm9jZXNzIFBST0dSQU0uCisjCisjIFRoaXMgbWFjcm8gY2FuIGJlIHVzZWQgZHVyaW5nIHRoZSBzZWxlY3Rpb24gb2YgYSBwcmVwcm9jZXNzb3IuCisjIGV2YWwgaXMgbmVjZXNzYXJ5IHRvIGV4cGFuZCBhY19jcHAuCitBQ19ERUZVTihbX0FDX1BSRVBST0NfSUZFTFNFXSwKK1tBQ19SRVFVSVJFX1NIRUxMX0ZOKFthY19mbl9dX0FDX0xBTkdfQUJCUkVWW190cnlfY3BwXSwKKyAgW0FTX0ZVTkNUSU9OX0RFU0NSSUJFKFthY19mbl9dX0FDX0xBTkdfQUJCUkVWW190cnlfY3BwXSwgW0xJTkVOT10sCisgICAgW1RyeSB0byBwcmVwcm9jZXNzIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC5dKV0sCisgIFskMF9CT0RZXSldZG5sCitbbTRfaWZ2YWxuKFskMV0sIFtBQ19MQU5HX0NPTkZURVNUKFskMV0pXSldZG5sCitbQVNfSUYoW2FjX2ZuX1tdX0FDX0xBTkdfQUJCUkVWW11fdHJ5X2NwcCAiJExJTkVOTyJdLCBbJDJdLCBbJDNdKQorcm0gLWYgY29uZnRlc3QuZXJyW11tNF9pZnZhbChbJDFdLCBbIGNvbmZ0ZXN0LiRhY19leHRdKVtdZG5sCitdKSMgX0FDX1BSRVBST0NfSUZFTFNFCisKKyMgQUNfUFJFUFJPQ19JRkVMU0UoUFJPR1JBTSwgW0FDVElPTi1JRi1UUlVFXSwgW0FDVElPTi1JRi1GQUxTRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gcHJlcHJvY2VzcyBQUk9HUkFNLiAgUmVxdWlyZXMgdGhhdCB0aGUgcHJlcHJvY2Vzc29yIGZvciB0aGUKKyMgY3VycmVudCBsYW5ndWFnZSB3YXMgY2hlY2tlZCBmb3IsIGhlbmNlIGRvIG5vdCB1c2UgdGhpcyBtYWNybyBpbiBtYWNyb3MKKyMgbG9va2luZyBmb3IgYSBwcmVwcm9jZXNzb3IuCitBQ19ERUZVTihbQUNfUFJFUFJPQ19JRkVMU0VdLAorW0FDX0xBTkdfUFJFUFJPQ19SRVFVSVJFKClkbmwKK19BQ19QUkVQUk9DX0lGRUxTRSgkQCldKQorCisKKyMgQUNfVFJZX0NQUChJTkNMVURFUywgW0FDVElPTi1JRi1UUlVFXSwgW0FDVElPTi1JRi1GQUxTRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBQ19UUllfQ1BQIGlzIHVzZWQgdG8gY2hlY2sgd2hldGhlciBwYXJ0aWN1bGFyIGhlYWRlciBmaWxlcyBleGlzdC4KKyMgKEJ1dCBpdCBhY3R1YWxseSB0ZXN0cyB3aGV0aGVyIElOQ0xVREVTIHByb2R1Y2VzIG5vIENQUCBlcnJvcnMuKQorIworIyBJTkNMVURFUyBhcmUgbm90IGRlZmF1bHRlZCBhbmQgYXJlIGRvdWJsZSBxdW90ZWQuCitBVV9ERUZVTihbQUNfVFJZX0NQUF0sCitbQUNfUFJFUFJPQ19JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbJDFdXSldLCBbJDJdLCBbJDNdKV0pCisKKworIyBBQ19FR1JFUF9DUFAoUEFUVEVSTiwgUFJPR1JBTSwKKyMgICAgICAgICAgICAgIFtBQ1RJT04tSUYtRk9VTkRdLCBbQUNUSU9OLUlGLU5PVC1GT1VORF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBCZWNhdXNlIHRoaXMgbWFjcm8gaXMgdXNlZCBieSBBQ19QUk9HX0dDQ19UUkFESVRJT05BTCwgd2hpY2ggbXVzdAorIyBjb21lIGVhcmx5LCBpdCBpcyBub3QgaW5jbHVkZWQgaW4gQUNfQkVGT1JFIGNoZWNrcy4KK0FDX0RFRlVOKFtBQ19FR1JFUF9DUFBdLAorW0FDX0xBTkdfUFJFUFJPQ19SRVFVSVJFKClkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfRUdSRVBdKWRubAorQUNfTEFOR19DT05GVEVTVChbQUNfTEFOR19TT1VSQ0UoW1skMl1dKV0pCitBU19JRihbZG5sIGV2YWwgaXMgbmVjZXNzYXJ5IHRvIGV4cGFuZCBhY19jcHAuCitkbmwgVWx0cml4IGFuZCBQeXJhbWlkIHNoIHJlZnVzZSB0byByZWRpcmVjdCBvdXRwdXQgb2YgZXZhbCwgc28gdXNlIHN1YnNoZWxsLgorKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JkFTX01FU1NBR0VfTE9HX0ZEIHwKK2RubCBRdW90ZSAkMSB0byBwcmV2ZW50IG00IGZyb20gZWF0aW5nIGNoYXJhY3RlciBjbGFzc2VzCisgICRFR1JFUCAiWyQxXSIgPi9kZXYvbnVsbCAyPiYxXSwKKyAgWyQzXSwKKyAgWyQ0XSkKK3JtIC1mIGNvbmZ0ZXN0KgorXSkjIEFDX0VHUkVQX0NQUAorCisKKyMgQUNfRUdSRVBfSEVBREVSKFBBVFRFUk4sIEhFQURFUi1GSUxFLAorIyAgICAgICAgICAgICAgICAgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfRUdSRVBfSEVBREVSXSwKK1tBQ19FR1JFUF9DUFAoWyQxXSwKK1sjaW5jbHVkZSA8JDI+CitdLCBbJDNdLCBbJDRdKV0pCisKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRXhhbWluaW5nIHN5bnRheC4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBfQUNfQ09NUElMRV9JRkVMU0VfQk9EWQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTaGVsbCBmdW5jdGlvbiBib2R5IGZvciBfQUNfQ09NUElMRV9JRkVMU0UuCittNF9kZWZpbmUoW19BQ19DT01QSUxFX0lGRUxTRV9CT0RZXSwKK1sgIEFTX0xJTkVOT19QVVNIKFskW10xXSkKKyAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorICBBU19JRihbX0FDX0RPX1NUREVSUigkYWNfY29tcGlsZSkgJiYgeworCSB0ZXN0IC16ICIkYWNfW11fQUNfTEFOR19BQkJSRVZbXV93ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0XSwKKyAgICAgIFthY19yZXR2YWw9MF0sCisgICAgICBbX0FDX01TR19MT0dfQ09ORlRFU1QKKwlhY19yZXR2YWw9MV0pCisgIEFTX0xJTkVOT19QT1AKKyAgQVNfU0VUX1NUQVRVUyhbJGFjX3JldHZhbF0pCitdKSMgX0FDX0NPTVBJTEVfSUZFTFNFX0JPRFkKKworCisjIF9BQ19DT01QSUxFX0lGRUxTRShQUk9HUkFNLCBbQUNUSU9OLUlGLVRSVUVdLCBbQUNUSU9OLUlGLUZBTFNFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gY29tcGlsZSBQUk9HUkFNLgorIyBUaGlzIG1hY3JvIGNhbiBiZSB1c2VkIGR1cmluZyB0aGUgc2VsZWN0aW9uIG9mIGEgY29tcGlsZXIuCitBQ19ERUZVTihbX0FDX0NPTVBJTEVfSUZFTFNFXSwKK1tBQ19SRVFVSVJFX1NIRUxMX0ZOKFthY19mbl9dX0FDX0xBTkdfQUJCUkVWW190cnlfY29tcGlsZV0sCisgIFtBU19GVU5DVElPTl9ERVNDUklCRShbYWNfZm5fXV9BQ19MQU5HX0FCQlJFVltfdHJ5X2NvbXBpbGVdLCBbTElORU5PXSwKKyAgICBbVHJ5IHRvIGNvbXBpbGUgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLl0pXSwKKyAgWyQwX0JPRFldKV1kbmwKK1ttNF9pZnZhbG4oWyQxXSwgW0FDX0xBTkdfQ09ORlRFU1QoWyQxXSldKV1kbmwKK1tBU19JRihbYWNfZm5fW11fQUNfTEFOR19BQkJSRVZbXV90cnlfY29tcGlsZSAiJExJTkVOTyJdLCBbJDJdLCBbJDNdKQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dFtdbTRfaWZ2YWwoWyQxXSwgWyBjb25mdGVzdC4kYWNfZXh0XSlbXWRubAorXSkjIF9BQ19DT01QSUxFX0lGRUxTRQorCisKKyMgQUNfQ09NUElMRV9JRkVMU0UoUFJPR1JBTSwgW0FDVElPTi1JRi1UUlVFXSwgW0FDVElPTi1JRi1GQUxTRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gY29tcGlsZSBQUk9HUkFNLiAgUmVxdWlyZXMgdGhhdCB0aGUgY29tcGlsZXIgZm9yIHRoZSBjdXJyZW50CisjIGxhbmd1YWdlIHdhcyBjaGVja2VkIGZvciwgaGVuY2UgZG8gbm90IHVzZSB0aGlzIG1hY3JvIGluIG1hY3JvcyBsb29raW5nCisjIGZvciBhIGNvbXBpbGVyLgorQUNfREVGVU4oW0FDX0NPTVBJTEVfSUZFTFNFXSwKK1tBQ19MQU5HX0NPTVBJTEVSX1JFUVVJUkUoKWRubAorX0FDX0NPTVBJTEVfSUZFTFNFKCRAKV0pCisKKworIyBBQ19UUllfQ09NUElMRShJTkNMVURFUywgRlVOQ1RJT04tQk9EWSwKKyMgICAgICAgICAgICAgICAgW0FDVElPTi1JRi1UUlVFXSwgW0FDVElPTi1JRi1GQUxTRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQVVfREVGVU4oW0FDX1RSWV9DT01QSUxFXSwKK1tBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbJDFdXSwgW1skMl1dKV0sIFskM10sIFskNF0pXSkKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRXhhbWluaW5nIGxpYnJhcmllcy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIF9BQ19MSU5LX0lGRUxTRV9CT0RZCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNoZWxsIGZ1bmN0aW9uIGJvZHkgZm9yIF9BQ19MSU5LX0lGRUxTRS4KK200X2RlZmluZShbX0FDX0xJTktfSUZFTFNFX0JPRFldLAorWyAgQVNfTElORU5PX1BVU0goWyRbXTFdKQorICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBBU19JRihbX0FDX0RPX1NUREVSUigkYWNfbGluaykgJiYgeworCSB0ZXN0IC16ICIkYWNfW11fQUNfTEFOR19BQkJSRVZbXV93ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorCSBBU19URVNUX1goW2NvbmZ0ZXN0JGFjX2V4ZWV4dF0pCisgICAgICAgfV0sCisgICAgICBbYWNfcmV0dmFsPTBdLAorICAgICAgW19BQ19NU0dfTE9HX0NPTkZURVNUCisJYWNfcmV0dmFsPTFdKQorICAjIERlbGV0ZSB0aGUgSVBBL0lQTyAoSW50ZXIgUHJvY2VkdXJhbCBBbmFseXNpcy9PcHRpbWl6YXRpb24pIGluZm9ybWF0aW9uCisgICMgY3JlYXRlZCBieSB0aGUgUEdJIGNvbXBpbGVyIChjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vKSwgYXMgaXQgd291bGQKKyAgIyBpbnRlcmZlcmUgd2l0aCB0aGUgbmV4dCBsaW5rIGNvbW1hbmQ7IGFsc28gZGVsZXRlIGEgZGlyZWN0b3J5IHRoYXQgaXMKKyAgIyBsZWZ0IGJlaGluZCBieSBBcHBsZSdzIGNvbXBpbGVyLiAgV2UgZG8gdGhpcyBiZWZvcmUgZXhlY3V0aW5nIHRoZSBhY3Rpb25zLgorICBybSAtcmYgY29uZnRlc3QuZFNZTSBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vCisgIEFTX0xJTkVOT19QT1AKKyAgQVNfU0VUX1NUQVRVUyhbJGFjX3JldHZhbF0pCitdKSMgX0FDX0xJTktfSUZFTFNFX0JPRFkKKworCisjIF9BQ19MSU5LX0lGRUxTRShQUk9HUkFNLCBbQUNUSU9OLUlGLVRSVUVdLCBbQUNUSU9OLUlGLUZBTFNFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gbGluayBQUk9HUkFNLgorIyBUaGlzIG1hY3JvIGNhbiBiZSB1c2VkIGR1cmluZyB0aGUgc2VsZWN0aW9uIG9mIGEgY29tcGlsZXIuCisjCisjIFRlc3QgdGhhdCByZXN1bHRpbmcgZmlsZSBpcyBleGVjdXRhYmxlOyBzZWUgdGhlIHByb2JsZW0gcmVwb3J0ZWQgYnkgbXdvZWhsa2UKKyMgaW4gPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY29yZXV0aWxzLzIwMDYtMTAvbXNnMDAwNDguaHRtbD4uCisjIEJ1dCBza2lwIHRoZSB0ZXN0IHdoZW4gY3Jvc3MtY29tcGlsaW5nLCB0byBwcmV2ZW50IHByb2JsZW1zIGxpa2UgdGhlIG9uZQorIyByZXBvcnRlZCBieSBDaHJpcyBKb2hucyBpbgorIyA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2F1dG9jb25mLzIwMDctMDMvbXNnMDAwODUuaHRtbD4uCisjCitBQ19ERUZVTihbX0FDX0xJTktfSUZFTFNFXSwKK1tBQ19SRVFVSVJFX1NIRUxMX0ZOKFthY19mbl9dX0FDX0xBTkdfQUJCUkVWW190cnlfbGlua10sCisgIFtBU19GVU5DVElPTl9ERVNDUklCRShbYWNfZm5fXV9BQ19MQU5HX0FCQlJFVltfdHJ5X2xpbmtdLCBbTElORU5PXSwKKyAgICBbVHJ5IHRvIGxpbmsgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLl0pXSwKKyAgWyQwX0JPRFldKV1kbmwKK1ttNF9pZnZhbG4oWyQxXSwgW0FDX0xBTkdfQ09ORlRFU1QoWyQxXSldKV1kbmwKK1tBU19JRihbYWNfZm5fW11fQUNfTEFOR19BQkJSRVZbXV90cnlfbGluayAiJExJTkVOTyJdLCBbJDJdLCBbJDNdKQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0W11tNF9pZnZhbChbJDFdLCBbIGNvbmZ0ZXN0LiRhY19leHRdKVtdZG5sCitdKSMgX0FDX0xJTktfSUZFTFNFCisKKworIyBBQ19MSU5LX0lGRUxTRShQUk9HUkFNLCBbQUNUSU9OLUlGLVRSVUVdLCBbQUNUSU9OLUlGLUZBTFNFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBsaW5rIFBST0dSQU0uICBSZXF1aXJlcyB0aGF0IHRoZSBjb21waWxlciBmb3IgdGhlIGN1cnJlbnQKKyMgbGFuZ3VhZ2Ugd2FzIGNoZWNrZWQgZm9yLCBoZW5jZSBkbyBub3QgdXNlIHRoaXMgbWFjcm8gaW4gbWFjcm9zIGxvb2tpbmcKKyMgZm9yIGEgY29tcGlsZXIuCitBQ19ERUZVTihbQUNfTElOS19JRkVMU0VdLAorW0FDX0xBTkdfQ09NUElMRVJfUkVRVUlSRSgpZG5sCitfQUNfTElOS19JRkVMU0UoJEApXSkKKworCisjIEFDX1RSWV9MSU5LKElOQ0xVREVTLCBGVU5DVElPTi1CT0RZLAorIyAgICAgICAgICAgICBbQUNUSU9OLUlGLVRSVUVdLCBbQUNUSU9OLUlGLUZBTFNFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbnRyYXJpbHkgdG8gQUNfTElOS19JRkVMU0UsIHRoaXMgbWFjcm8gZG91YmxlIHF1b3RlIGl0cyBmaXJzdCB0d28gYXJncy4KK0FVX0RFRlVOKFtBQ19UUllfTElOS10sCitbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyQxXV0sIFtbJDJdXSldLCBbJDNdLCBbJDRdKV0pCisKKworIyBBQ19DT01QSUxFX0NIRUNLKEVDSE8tVEVYVCwgSU5DTFVERVMsIEZVTkNUSU9OLUJPRFksCisjICAgICAgICAgICAgICAgICAgQUNUSU9OLUlGLVRSVUUsIFtBQ1RJT04tSUYtRkFMU0VdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FVX0RFRlVOKFtBQ19DT01QSUxFX0NIRUNLXSwKK1ttNF9pZnZhbG4oWyQxXSwgW0FDX01TR19DSEVDS0lORyhbZm9yICQxXSldKWRubAorQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyQyXV0sIFtbJDNdXSldLCBbJDRdLCBbJDVdKV0pCisKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIENoZWNraW5nIGZvciBydW50aW1lIGZlYXR1cmVzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIF9BQ19SVU5fSUZFTFNFX0JPRFkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTaGVsbCBmdW5jdGlvbiBib2R5IGZvciBfQUNfUlVOX0lGRUxTRS4KK200X2RlZmluZShbX0FDX1JVTl9JRkVMU0VfQk9EWV0sCitbICBBU19MSU5FTk9fUFVTSChbJFtdMV0pCisgIEFTX0lGKFtfQUNfRE9fVkFSKGFjX2xpbmspICYmIF9BQ19ET19UT0tFTlMoLi9jb25mdGVzdCRhY19leGVleHQpXSwKKyAgICAgIFthY19yZXR2YWw9MF0sCisgICAgICBbQVNfRUNITyhbIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyJdKSA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgX0FDX01TR19MT0dfQ09ORlRFU1QKKyAgICAgICBhY19yZXR2YWw9JGFjX3N0YXR1c10pCisgIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KKyAgQVNfTElORU5PX1BPUAorICBBU19TRVRfU1RBVFVTKFskYWNfcmV0dmFsXSkKK10pIyBfQUNfUlVOX0lGRUxTRV9CT0RZCisKKworIyBfQUNfUlVOX0lGRUxTRShQUk9HUkFNLCBbQUNUSU9OLUlGLVRSVUVdLCBbQUNUSU9OLUlGLUZBTFNFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbXBpbGUsIGxpbmssIGFuZCBydW4uCisjIFRoaXMgbWFjcm8gY2FuIGJlIHVzZWQgZHVyaW5nIHRoZSBzZWxlY3Rpb24gb2YgYSBjb21waWxlci4KKyMgV2UgYWxzbyByZW1vdmUgY29uZnRlc3QubyBhcyBpZiB0aGUgY29tcGlsYXRpb24gZmFpbHMsIHNvbWUgY29tcGlsZXJzCisjIGRvbid0IHJlbW92ZSBpdC4gIFdlIHJlbW92ZSBnbW9uLm91dCBhbmQgYmIub3V0LCB3aGljaCBtYXkgYmUKKyMgY3JlYXRlZCBkdXJpbmcgdGhlIHJ1biBpZiB0aGUgcHJvZ3JhbSBpcyBidWlsdCB3aXRoIHByb2ZpbGluZyBzdXBwb3J0LgorQUNfREVGVU4oW19BQ19SVU5fSUZFTFNFXSwKK1tBQ19SRVFVSVJFX1NIRUxMX0ZOKFthY19mbl9dX0FDX0xBTkdfQUJCUkVWW190cnlfcnVuXSwKKyAgW0FTX0ZVTkNUSU9OX0RFU0NSSUJFKFthY19mbl9dX0FDX0xBTkdfQUJCUkVWW190cnlfcnVuXSwgW0xJTkVOT10sCisgICAgW1RyeSB0byBsaW5rIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KKyAgICAgQXNzdW1lcyB0aGF0IGV4ZWN1dGFibGVzICpjYW4qIGJlIHJ1bi5dKV0sCisgIFskMF9CT0RZXSldZG5sCitbbTRfaWZ2YWxuKFskMV0sIFtBQ19MQU5HX0NPTkZURVNUKFskMV0pXSldZG5sCitbQVNfSUYoW2FjX2ZuX1tdX0FDX0xBTkdfQUJCUkVWW11fdHJ5X3J1biAiJExJTkVOTyJdLCBbJDJdLCBbJDNdKQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW1bXW00X2lmdmFsKFskMV0sIFsgY29uZnRlc3QuJGFjX2V4dF0pW11kbmwKK10pIyBfQUNfUlVOX0lGRUxTRQorCisjIEFDX1JVTl9JRkVMU0UoUFJPR1JBTSwKKyMgICAgICAgICAgICAgICBbQUNUSU9OLUlGLVRSVUVdLCBbQUNUSU9OLUlGLUZBTFNFXSwKKyMgICAgICAgICAgICAgICBbQUNUSU9OLUlGLUNST1NTLUNPTVBJTElORyA9IFJVTlRJTUUtRVJST1JdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbXBpbGUsIGxpbmssIGFuZCBydW4uIFJlcXVpcmVzIHRoYXQgdGhlIGNvbXBpbGVyIGZvciB0aGUgY3VycmVudAorIyBsYW5ndWFnZSB3YXMgY2hlY2tlZCBmb3IsIGhlbmNlIGRvIG5vdCB1c2UgdGhpcyBtYWNybyBpbiBtYWNyb3MgbG9va2luZworIyBmb3IgYSBjb21waWxlci4KK0FDX0RFRlVOKFtBQ19SVU5fSUZFTFNFXSwKK1tBQ19MQU5HX0NPTVBJTEVSX1JFUVVJUkUoKWRubAorbTRfaWZ2YWwoWyQ0XSwgW10sCisJIFtBQ19ESUFHTk9TRShbY3Jvc3NdLAorCQkgICAgIFskMCBjYWxsZWQgd2l0aG91dCBkZWZhdWx0IHRvIGFsbG93IGNyb3NzIGNvbXBpbGluZ10pXSlkbmwKK0FTX0lGKFt0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllc10sCisgIFttNF9kZWZhdWx0KFskNF0sCisJICAgW0FDX01TR19GQUlMVVJFKFtjYW5ub3QgcnVuIHRlc3QgcHJvZ3JhbSB3aGlsZSBjcm9zcyBjb21waWxpbmddKV0pXSwKKyAgW19BQ19SVU5fSUZFTFNFKCRAKV0pCitdKQorCisKKyMgQUNfVFJZX1JVTihQUk9HUkFNLAorIyAgICAgICAgICAgIFtBQ1RJT04tSUYtVFJVRV0sIFtBQ1RJT04tSUYtRkFMU0VdLAorIyAgICAgICAgICAgIFtBQ1RJT04tSUYtQ1JPU1MtQ09NUElMSU5HID0gUlVOVElNRS1FUlJPUl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBVV9ERUZVTihbQUNfVFJZX1JVTl0sCitbQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1skMV1dKV0sIFskMl0sIFskM10sIFskNF0pXSkKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIENoZWNraW5nIGZvciB0aGUgZXhpc3RlbmNlIG9mIGZpbGVzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBBQ19DSEVDS19GSUxFKEZJTEUsIFtBQ1RJT04tSUYtRk9VTkRdLCBbQUNUSU9OLUlGLU5PVC1GT1VORF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgQ2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgRklMRS4KK0FDX0RFRlVOKFtBQ19DSEVDS19GSUxFXSwKK1tBQ19ESUFHTk9TRShbY3Jvc3NdLAorCSAgICAgW2Nhbm5vdCBjaGVjayBmb3IgZmlsZSBleGlzdGVuY2Ugd2hlbiBjcm9zcyBjb21waWxpbmddKWRubAorQVNfVkFSX1BVU0hERUYoW2FjX0ZpbGVdLCBbYWNfY3ZfZmlsZV8kMV0pZG5sCitBQ19DQUNIRV9DSEVDSyhbZm9yICQxXSwgW2FjX0ZpbGVdLAorW3Rlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzICYmCisgIEFDX01TR19FUlJPUihbY2Fubm90IGNoZWNrIGZvciBmaWxlIGV4aXN0ZW5jZSB3aGVuIGNyb3NzIGNvbXBpbGluZ10pCitpZiB0ZXN0IC1yICIkMSI7IHRoZW4KKyAgQVNfVkFSX1NFVChbYWNfRmlsZV0sIFt5ZXNdKQorZWxzZQorICBBU19WQVJfU0VUKFthY19GaWxlXSwgW25vXSkKK2ZpXSkKK0FTX1ZBUl9JRihbYWNfRmlsZV0sIFt5ZXNdLCBbJDJdLCBbJDNdKQorQVNfVkFSX1BPUERFRihbYWNfRmlsZV0pZG5sCitdKSMgQUNfQ0hFQ0tfRklMRQorCisKKyMgX0FDX0NIRUNLX0ZJTEVTKEZJTEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBIZWxwZXIgdG8gQUNfQ0hFQ0tfRklMRVMsIHdoaWNoIGdlbmVyYXRlcyB0d28gb2YgdGhlIHRocmVlIGFyZ3VtZW50cworIyB0byBBQ19DSEVDS19GSUxFIGJhc2VkIG9uIEZJTEUuCittNF9kZWZpbmUoW19BQ19DSEVDS19GSUxFU10sCitbWyQxXSwgW0FDX0RFRklORV9VTlFVT1RFRChBU19UUl9DUFAoW0hBVkVfJDFdKSwgWzFdLAorICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGZpbGUgYCQxJy5dKV1dKQorCisKKyMgQUNfQ0hFQ0tfRklMRVMoRklMRS4uLiwgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRm9yIGVhY2ggd29yZCBpbiB0aGUgd2hpdGVzcGFjZS1zZXBhcmF0ZWQgRklMRSBsaXN0LCBwZXJmb3JtIGVpdGhlcgorIyBBQ1RJT04tSUYtRk9VTkQgb3IgQUNUSU9OLUlGLU5PVC1GT1VORC4gIEZvciBmaWxlcyB0aGF0IGV4aXN0LCBhbHNvCisjIHByb3ZpZGUgdGhlIHByZXByb2Nlc3NvciB2YXJpYWJsZSBIQVZFX0ZJTEUuCitBQ19ERUZVTihbQUNfQ0hFQ0tfRklMRVNdLAorW200X21hcF9hcmdzX3coWyQxXSwgW0FDX0NIRUNLX0ZJTEUoXyQwKF0sIFspWyQyXSwgWyQzXSldKV0pCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQ2hlY2tpbmcgZm9yIGRlY2xhcmVkIHN5bWJvbHMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgX0FDX0NIRUNLX0RFQ0xfQk9EWQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNoZWxsIGZ1bmN0aW9uIGJvZHkgZm9yIEFDX0NIRUNLX0RFQ0wuCittNF9kZWZpbmUoW19BQ19DSEVDS19ERUNMX0JPRFldLAorWyAgQVNfTElORU5PX1BVU0goWyRbXTFdKQorICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciAkW10yIGlzIGRlY2xhcmVkXSwgWyRbXTNdLAorICBbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbJFtdNF0sCitbQCU6QGlmbmRlZiAkW10yCisgICh2b2lkKSAkW10yOworQCU6QGVuZGlmCitdKV0sCisJCSAgIFtBU19WQVJfU0VUKFskW10zXSwgW3llc10pXSwKKwkJICAgW0FTX1ZBUl9TRVQoWyRbXTNdLCBbbm9dKV0pXSkKKyAgQVNfTElORU5PX1BPUAorXSkjIF9BQ19DSEVDS19ERUNMX0JPRFkKKworIyBBQ19DSEVDS19ERUNMKFNZTUJPTCwKKyMgICAgICAgICAgICAgICBbQUNUSU9OLUlGLUZPVU5EXSwgW0FDVElPTi1JRi1OT1QtRk9VTkRdLAorIyAgICAgICAgICAgICAgIFtJTkNMVURFUyA9IERFRkFVTFQtSU5DTFVERVNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgU1lNQk9MIChhIGZ1bmN0aW9uLCB2YXJpYWJsZSwgb3IgY29uc3RhbnQpIGlzIGRlY2xhcmVkLgorQUNfREVGVU4oW0FDX0NIRUNLX0RFQ0xdLAorW0FDX1JFUVVJUkVfU0hFTExfRk4oW2FjX2ZuX11fQUNfTEFOR19BQkJSRVZbX2NoZWNrX2RlY2xdLAorICBbQVNfRlVOQ1RJT05fREVTQ1JJQkUoW2FjX2ZuX11fQUNfTEFOR19BQkJSRVZbX2NoZWNrX2RlY2xdLAorICAgIFtMSU5FTk8gU1lNQk9MIFZBUl0sCisgICAgW1Rlc3RzIHdoZXRoZXIgU1lNQk9MIGlzIGRlY2xhcmVkLCBzZXR0aW5nIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseS5dKV0sCisgIFtfJDBfQk9EWV0pXWRubAorW0FTX1ZBUl9QVVNIREVGKFthY19TeW1ib2xdLCBbYWNfY3ZfaGF2ZV9kZWNsXyQxXSldZG5sCitbYWNfZm5fW11fQUNfTEFOR19BQkJSRVZbXV9jaGVja19kZWNsIF1kbmwKK1siJExJTkVOTyIgIiQxIiAiYWNfU3ltYm9sIiAiQVNfRVNDQVBFKFtBQ19JTkNMVURFU19ERUZBVUxUKFskNF0pXSwgWyIiXSkiCitBU19WQVJfSUYoW2FjX1N5bWJvbF0sIFt5ZXNdLCBbJDJdLCBbJDNdKQorQVNfVkFSX1BPUERFRihbYWNfU3ltYm9sXSlkbmwKK10pIyBBQ19DSEVDS19ERUNMCisKKworIyBfQUNfQ0hFQ0tfREVDTFMoU1lNQk9MLCBBQ1RJT04tSUZfRk9VTkQsIEFDVElPTi1JRi1OT1QtRk9VTkQsCisjICAgICAgICAgICAgICAgICBJTkNMVURFUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBIZWxwZXIgdG8gQUNfQ0hFQ0tfREVDTFMsIHdoaWNoIGdlbmVyYXRlcyB0aGUgY2hlY2sgZm9yIGEgc2luZ2xlCisjIFNZTUJPTCB3aXRoIElOQ0xVREVTLCBwZXJmb3JtcyB0aGUgQUNfREVGSU5FLCB0aGVuIGV4cGFuZHMKKyMgQUNUSU9OLUlGLUZPVU5EIG9yIEFDVElPTi1JRi1OT1QtRk9VTkQuCittNF9kZWZpbmUoW19BQ19DSEVDS19ERUNMU10sCitbQUNfQ0hFQ0tfREVDTChbJDFdLCBbYWNfaGF2ZV9kZWNsPTFdLCBbYWNfaGF2ZV9kZWNsPTBdLCBbJDRdKV1kbmwKK1tBQ19ERUZJTkVfVU5RVU9URUQoQVNfVFJfQ1BQKFtIQVZFX0RFQ0xfJDFdKSwgWyRhY19oYXZlX2RlY2xdLAorICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGAkMScsCisgICBhbmQgdG8gMCBpZiB5b3UgZG9uJ3QuXSldZG5sCitbbTRfaWZ2YWxuKFskMiQzXSwgW0FTX0lGKFt0ZXN0ICRhY19oYXZlX2RlY2wgPSAxXSwgWyQyXSwgWyQzXSldKV0pCisKKyMgQUNfQ0hFQ0tfREVDTFMoU1lNQk9MUywKKyMgICAgICAgICAgICAgICAgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSwKKyMgICAgICAgICAgICAgICAgW0lOQ0xVREVTID0gREVGQVVMVC1JTkNMVURFU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZXMgSEFWRV9ERUNMX1NZTUJPTCB0byAxIGlmIGRlY2xhcmVkLCAwIG90aGVyd2lzZS4gIFNlZSB0aGUKKyMgZG9jdW1lbnRhdGlvbiBmb3IgYSBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiB0aGlzIGRpZmZlcmVuY2Ugd2l0aAorIyBvdGhlciBBQ19DSEVDS18qUyBtYWNyb3MuICBTWU1CT0xTIGlzIGFuIG00IGxpc3QuCitBQ19ERUZVTihbQUNfQ0hFQ0tfREVDTFNdLAorW200X21hcF9hcmdzX3NlcChbXyQwKF0sIFssIFskMl0sIFskM10sIFskNF0pXSwgW10sICQxKV0pCisKKworIyBfQUNfQ0hFQ0tfREVDTF9PTkNFKFNZTUJPTCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBhIHNpbmdsZSBTWU1CT0wgb25jZS4KK200X2RlZmluZShbX0FDX0NIRUNLX0RFQ0xfT05DRV0sCitbQUNfREVGVU4oW19BQ19DaGVja19EZWNsXyQxXSwgW19BQ19DSEVDS19ERUNMUyhbJDFdKV0pXWRubAorW0FDX1JFUVVJUkUoW19BQ19DaGVja19EZWNsXyQxXSldKQorCisjIEFDX0NIRUNLX0RFQ0xTX09OQ0UoU1lNQk9MUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWtlIEFDX0NIRUNLX0RFQ0xTKFNZTUJPTFMpLCBidXQgZG8gaXQgYXQgbW9zdCBvbmNlLgorQUNfREVGVU4oW0FDX0NIRUNLX0RFQ0xTX09OQ0VdLAorW200X21hcF9hcmdzX3NlcChbX0FDX0NIRUNLX0RFQ0xfT05DRShdLCBbKV0sIFtdLCAkMSldKQorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgUmVwbGFjZW1lbnQgb2YgbGlicmFyeSBmdW5jdGlvbnMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgQUNfQ09ORklHX0xJQk9CSl9ESVIoRElSTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQW5ub3VuY2UgTElCT0JKIHJlcGxhY2VtZW50IGZpbGVzIGFyZSBpbiAkdG9wX3NyY2Rpci9ESVJOQU1FLgorQUNfREVGVU5fT05DRShbQUNfQ09ORklHX0xJQk9CSl9ESVJdLAorW200X2RpdmVydF90ZXh0KFtERUZBVUxUU10sIFthY19jb25maWdfbGlib2JqX2Rpcj0kMV0pXSkKKworCisjIEFDX0xJQlNPVVJDRShGSUxFLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFubm91bmNlIHdlIG1pZ2h0IG5lZWQgdGhlIGZpbGUgYEZJTEUtTkFNRScuCittNF9kZWZpbmUoW0FDX0xJQlNPVVJDRV0sIFtdKQorCisKKyMgQUNfTElCU09VUkNFUyhbRklMRS1OQU1FMSwgLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBbm5vdW5jZSB3ZSBtaWdodCBuZWVkIHRoZXNlIGZpbGVzLgorQUNfREVGVU4oW0FDX0xJQlNPVVJDRVNdLAorW200X21hcF9hcmdzKFtBQ19MSUJTT1VSQ0VdLCAkMSldKQorCisKKyMgX0FDX0xJQk9CSihGSUxFLU5BTUUtTk9FWFQsIEFDVElPTi1JRi1JTkRJUikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgV2UgbmVlZCBgRklMRS1OQU1FLU5PRVhULm8nLCBzYXZlIHRoaXMgaW50byBgTElCT0JKUycuCittNF9kZWZpbmUoW19BQ19MSUJPQkpdLAorW0FTX0xJVEVSQUxfSUYoWyQxXSwKKwkgICAgICAgW0FDX0xJQlNPVVJDRShbJDEuY10pXSwKKwkgICAgICAgWyQyXSlkbmwKK2Nhc2UgIiAkTElCQCZ0QE9CSlMgIiBpbgorICAqIiAkMS4kYWNfb2JqZXh0ICIqICkgOzsKKyAgKikgQUNfU1VCU1QoW0xJQkAmdEBPQkpTXSwgWyIkTElCQCZ0QE9CSlMgJDEuJGFjX29iamV4dCJdKSA7OworZXNhYworXSkKKworCisjIEFDX0xJQk9CSihGSUxFLU5BTUUtTk9FWFQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgV2UgbmVlZCBgRklMRS1OQU1FLU5PRVhULm8nLCBzYXZlIHRoaXMgaW50byBgTElCT0JKUycuCitBQ19ERUZVTihbQUNfTElCT0JKXSwKK1tfQUNfTElCT0JKKFskMV0sCisJICAgIFtBQ19ESUFHTk9TRShzeW50YXgsCisJCQkgWyQwKCQxKTogeW91IHNob3VsZCB1c2UgbGl0ZXJhbHNdKV0pZG5sCitdKQorCisKKyMgX0FDX0xJQk9CSlNfTk9STUFMSVpFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDbGVhbiB1cCBMSUJPQkpTIGFuZCBMVExJQk9CSlMgc28gdGhhdCB0aGV5IHdvcmsgd2l0aCAxLiBhY19vYmpleHQsCisjIDIuIEF1dG9tYWtlJ3MgQU5TSTJLTlIsIDMuIExpYnRvb2wsIDQuIGNvbWJpbmF0aW9uIG9mIHRoZSB0aHJlZS4KKyMgVXNlZCB3aXRoIEFDX0NPTkZJR19DT01NQU5EU19QUkUuCitBQ19ERUZVTihbX0FDX0xJQk9CSlNfTk9STUFMSVpFXSwKK1thY19saWJvYmpzPQorYWNfbHRsaWJvYmpzPQorZm9yIGFjX2kgaW4gOiAkTElCQCZ0QE9CSlM7IGRvIHRlc3QgIngkYWNfaSIgPSB4OiAmJiBjb250aW51ZQorICAjIDEuIFJlbW92ZSB0aGUgZXh0ZW5zaW9uLCBhbmQgJFUgaWYgYWxyZWFkeSBpbnN0YWxsZWQuCisgIGFjX3NjcmlwdD0ncy9cJFVcLi8uLztzL1wubyQvLztzL1wub2JqJC8vJworICBhY19pPWBBU19FQ0hPKFsiJGFjX2kiXSkgfCBzZWQgIiRhY19zY3JpcHQiYAorICAjIDIuIFByZXBlbmQgTElCT0JKRElSLiAgV2hlbiB1c2VkIHdpdGggYXV0b21ha2U+PTEuMTAgTElCT0JKRElSCisgICMgICAgd2lsbCBiZSBzZXQgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSBMSUJPQkpTIG9iamVjdHMgYXJlIGJ1aWx0LgorICBBU19WQVJfQVBQRU5EKFthY19saWJvYmpzXSwgWyIgXCR7TElCT0JKRElSfSRhY19pXCRVLiRhY19vYmpleHQiXSkKKyAgQVNfVkFSX0FQUEVORChbYWNfbHRsaWJvYmpzXSwgWyIgXCR7TElCT0JKRElSfSRhY19pIickVS5sbyddKQorZG9uZQorQUNfU1VCU1QoW0xJQkAmdEBPQkpTXSwgWyRhY19saWJvYmpzXSkKK0FDX1NVQlNUKFtMVExJQk9CSlNdLCBbJGFjX2x0bGlib2Jqc10pCitdKQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBDaGVja2luZyBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIF9BQ19DT01QVVRFX0lOVF9DT01QSUxFKEVYUFJFU1NJT04sIFZBUklBQkxFLCBQUk9MT0dVRSwgW0lGLVNVQ0NFU1NdLAorIyAgICAgICAgICAgICAgICAgICAgICAgICBbSUYtRkFJTFVSRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb21wdXRlIHRoZSBpbnRlZ2VyIEVYUFJFU1NJT04gYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlIFZBUklBQkxFLgorIyBXb3JrcyBPSyBpZiBjcm9zcyBjb21waWxpbmcsIGJ1dCBhc3N1bWVzIHR3b3MtY29tcGxlbWVudCBhcml0aG1ldGljLgorbTRfZGVmaW5lKFtfQUNfQ09NUFVURV9JTlRfQ09NUElMRV0sCitbIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KK19BQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19CT09MX0NPTVBJTEVfVFJZKFskM10sIFsoJDEpID49IDBdKV0sCisgW2FjX2xvPTAgYWNfbWlkPTAKKyAgd2hpbGUgOjsgZG8KKyAgICBfQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfQk9PTF9DT01QSUxFX1RSWShbJDNdLCBbKCQxKSA8PSAkYWNfbWlkXSldLAorCQkgICAgICAgW2FjX2hpPSRhY19taWQ7IGJyZWFrXSwKKwkJICAgICAgIFtBU19WQVJfQVJJVEgoW2FjX2xvXSwgWyRhY19taWQgKyAxXSkKKwkJCWlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCisJCQkgIGFjX2xvPSBhY19oaT0KKwkJCSAgYnJlYWsKKwkJCWZpCisJCQlBU19WQVJfQVJJVEgoW2FjX21pZF0sIFsyICcqJyAkYWNfbWlkICsgMV0pXSkKKyAgZG9uZV0sCitbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfQk9PTF9DT01QSUxFX1RSWShbJDNdLCBbKCQxKSA8IDBdKV0sCisgW2FjX2hpPS0xIGFjX21pZD0tMQorICB3aGlsZSA6OyBkbworICAgIF9BQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19CT09MX0NPTVBJTEVfVFJZKFskM10sIFsoJDEpID49ICRhY19taWRdKV0sCisJCSAgICAgICBbYWNfbG89JGFjX21pZDsgYnJlYWtdLAorCQkgICAgICAgW0FTX1ZBUl9BUklUSChbYWNfaGldLCBbJygnICRhY19taWQgJyknIC0gMV0pCisJCQlpZiB0ZXN0ICRhY19taWQgLWxlICRhY19oaTsgdGhlbgorCQkJICBhY19sbz0gYWNfaGk9CisJCQkgIGJyZWFrCisJCQlmaQorCQkJQVNfVkFSX0FSSVRIKFthY19taWRdLCBbMiAnKicgJGFjX21pZF0pXSkKKyAgZG9uZV0sCisgW2FjX2xvPSBhY19oaT1dKV0pCisjIEJpbmFyeSBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgaGkgYm91bmRzLgord2hpbGUgdGVzdCAieCRhY19sbyIgIT0gIngkYWNfaGkiOyBkbworICBBU19WQVJfQVJJVEgoW2FjX21pZF0sIFsnKCcgJGFjX2hpIC0gJGFjX2xvICcpJyAvIDIgKyAkYWNfbG9dKQorICBfQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfQk9PTF9DT01QSUxFX1RSWShbJDNdLCBbKCQxKSA8PSAkYWNfbWlkXSldLAorCQkgICAgIFthY19oaT0kYWNfbWlkXSwKKwkJICAgICBbQVNfVkFSX0FSSVRIKFthY19sb10sIFsnKCcgJGFjX21pZCAnKScgKyAxXSldKQorZG9uZQorY2FzZSAkYWNfbG8gaW4gQCU6QCgoCis/KikgQVNfVkFSX1NFVChbJDJdLCBbJGFjX2xvXSk7ICQ0IDs7CisnJykgJDUgOzsKK2VzYWNbXWRubAorXSkjIF9BQ19DT01QVVRFX0lOVF9DT01QSUxFCisKKworIyBfQUNfQ09NUFVURV9JTlRfUlVOKEVYUFJFU1NJT04sIFZBUklBQkxFLCBQUk9MT0dVRSwgW0lGLVNVQ0NFU1NdLAorIyAgICAgICAgICAgICAgICAgICAgIFtJRi1GQUlMVVJFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU3RvcmUgdGhlIGV2YWx1YXRpb24gb2YgdGhlIGludGVnZXIgRVhQUkVTU0lPTiBpbiBWQVJJQUJMRS4KKyMKKyMgQUNfTEFOR19JTlRfU0FWRSBpbnRlbnRpb25hbGx5IGRvZXMgbm90IGVuZCB0aGUgZmlsZSBpbiBhIG5ld2xpbmUsIHNvCisjIHdlIG11c3QgYWRkIG9uZSB0byBtYWtlIGl0IGEgdGV4dCBmaWxlIGJlZm9yZSBwYXNzaW5nIGl0IHRvIHJlYWQuCittNF9kZWZpbmUoW19BQ19DT01QVVRFX0lOVF9SVU5dLAorW19BQ19SVU5fSUZFTFNFKFtBQ19MQU5HX0lOVF9TQVZFKFskM10sIFskMV0pXSwKKwkJW2VjaG8gPj5jb25mdGVzdC52YWw7IHJlYWQgJDIgPGNvbmZ0ZXN0LnZhbDsgJDRdLCBbJDVdKQorcm0gLWYgY29uZnRlc3QudmFsCitdKSMgX0FDX0NPTVBVVEVfSU5UX1JVTgorCisKKyMgX0FDX0NPTVBVVEVfSU5UX0JPRFkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2hlbGwgZnVuY3Rpb24gYm9keSBmb3IgQUNfQ09NUFVURV9JTlQuCittNF9kZWZpbmUoW19BQ19DT01QVVRFX0lOVF9CT0RZXSwKK1sgIEFTX0xJTkVOT19QVVNIKFskW10xXSkKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgICBfQUNfQ09NUFVURV9JTlRfQ09NUElMRShbJFtdMl0sIFskW10zXSwgWyRbXTRdLAorCQkJICAgIFthY19yZXR2YWw9MF0sIFthY19yZXR2YWw9MV0pCisgIGVsc2UKKyAgICBfQUNfQ09NUFVURV9JTlRfUlVOKFskW10yXSwgWyRbXTNdLCBbJFtdNF0sCisJCQlbYWNfcmV0dmFsPTBdLCBbYWNfcmV0dmFsPTFdKQorICBmaQorICBBU19MSU5FTk9fUE9QCisgIEFTX1NFVF9TVEFUVVMoWyRhY19yZXR2YWxdKQorXSkjIF9BQ19DT01QVVRFX0lOVF9CT0RZCisKKyMgQUNfQ09NUFVURV9JTlQoVkFSSUFCTEUsIEVYUFJFU1NJT04sIFBST0xPR1VFLCBbSUYtRkFJTFNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFN0b3JlIGludG8gdGhlIHNoZWxsIHZhcmlhYmxlIFZBUklBQkxFIHRoZSB2YWx1ZSBvZiB0aGUgaW50ZWdlciBDIGV4cHJlc3Npb24KKyMgRVhQUkVTU0lPTi4gIFRoZSB2YWx1ZSBzaG91bGQgZml0IGluIGFuIGluaXRpYWxpemVyIGluIGEgQyB2YXJpYWJsZSBvZiB0eXBlCisjIGBzaWduZWQgbG9uZycuICBJZiBubyBQUk9MT0dVRSBhcmUgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBpbmNsdWRlcyBhcmUgdXNlZC4KKyMgSUYtRkFJTFMgaXMgZXZhbHVhdGVkIGlmIHRoZSB2YWx1ZSBjYW5ub3QgYmUgZm91bmQgKHdoaWNoIGluY2x1ZGVzIHRoZQorIyBjYXNlIG9mIGNyb3NzLWNvbXBpbGF0aW9uLCBpZiBFWFBSRVNTSU9OIGlzIG5vdCBjb21wdXRhYmxlIGF0IGNvbXBpbGUtdGltZS4KK0FDX0RFRlVOKFtBQ19DT01QVVRFX0lOVF0sCitbQUNfTEFOR19DT01QSUxFUl9SRVFVSVJFKCldZG5sCitbQUNfUkVRVUlSRV9TSEVMTF9GTihbYWNfZm5fXV9BQ19MQU5HX0FCQlJFVltfY29tcHV0ZV9pbnRdLAorICBbQVNfRlVOQ1RJT05fREVTQ1JJQkUoW2FjX2ZuX11fQUNfTEFOR19BQkJSRVZbX2NvbXB1dGVfaW50XSwKKyAgICBbTElORU5PIEVYUFIgVkFSIElOQ0xVREVTXSwKKyAgICBbVHJpZXMgdG8gZmluZCB0aGUgY29tcGlsZS10aW1lIHZhbHVlIG9mIEVYUFIgaW4gYSBwcm9ncmFtIHRoYXQgaW5jbHVkZXMKKyAgICAgSU5DTFVERVMsIHNldHRpbmcgVkFSIGFjY29yZGluZ2x5LiAgUmV0dXJucyB3aGV0aGVyIHRoZSB2YWx1ZSBjb3VsZAorICAgICBiZSBjb21wdXRlZF0pXSwKKyAgICBbXyQwX0JPRFldKV1kbmwKK1tBU19JRihbYWNfZm5fW11fQUNfTEFOR19BQkJSRVZbXV9jb21wdXRlX2ludCAiJExJTkVOTyIgIiQyIiAiJDEiIF1kbmwKKyAgICAgICBbIkFTX0VTQ0FQRShbJDNdLCBbIiJdKSJdLAorICAgICAgIFtdLCBbJDRdKQorXSkjIEFDX0NPTVBVVEVfSU5UCisKKyMgX0FDX0NPTVBVVEVfSU5UKEVYUFJFU1NJT04sIFZBUklBQkxFLCBQUk9MT0dVRSwgW0lGLUZBSUxTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRklYTUU6IHRoaXMgcHJpdmF0ZSBpbnRlcmZhY2Ugd2FzIHVzZWQgYnkgc2V2ZXJhbCBwYWNrYWdlcy4KKyMgR2l2ZSB0aGVtIHRpbWUgdG8gdHJhbnNpdGlvbiB0byBBQ19DT01QVVRFX0lOVCBhbmQgdGhlbiBkZWxldGUgdGhpcyBvbmUuCitBQ19ERUZVTihbX0FDX0NPTVBVVEVfSU5UXSwKK1tBQ19DT01QVVRFX0lOVChbJDJdLCBbJDFdLCBbJDNdLCBbJDRdKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1tUaGUgbWFjcm8gYF9BQ19DT01QVVRFX0lOVCcgaXMgb2Jzb2xldGUgYW5kIHdpbGwgYmUgZGVsZXRlZCBpbiBhCitmdXR1cmUgdmVyc2lvbiBvciBBdXRvY29uZi4gIEhlbmNlLCBpdCBpcyBzdWdnZXN0ZWQgdGhhdCB5b3UgdXNlCitpbnN0ZWFkIHRoZSBwdWJsaWMgQUNfQ09NUFVURV9JTlQgbWFjcm8uICBOb3RlIHRoYXQgdGhlIGFyZ3VtZW50cyBhcmUKK3NsaWdodGx5IGRpZmZlcmVudCBiZXR3ZWVuIHRoZSB0d28uXSlkbmwKK10pIyBfQUNfQ09NUFVURV9JTlQKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9jb25mL2F1dG9jb25mL2hlYWRlcnMubTQgYi9zaGFyZS9hdXRvY29uZi9hdXRvY29uZi9oZWFkZXJzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMzVhYjUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvY29uZi9hdXRvY29uZi9oZWFkZXJzLm00CkBAIC0wLDAgKzEsOTA0IEBACisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEF1dG9jb25mLgkJCS0qLSBBdXRvY29uZiAtKi0KKyMgQ2hlY2tpbmcgZm9yIGhlYWRlcnMuCisjCisjIENvcHlyaWdodCAoQykgMTk4OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNiwgMjAwOCwKKyMgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlCisjIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorIyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorIyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uLAorIyB2ZXJzaW9uIDMuMCwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFuZCBhIGNvcHkgb2YgdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGVzIENPUFlJTkd2MyBhbmQgQ09QWUlORy5FWENFUFRJT04KKyMgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFdyaXR0ZW4gYnkgRGF2aWQgTWFjS2VuemllLCB3aXRoIGhlbHAgZnJvbQorIyBGcmFuYyxvaXMgUGluYXJkLCBLYXJsIEJlcnJ5LCBSaWNoYXJkIFBpeGxleSwgSWFuIExhbmNlIFRheWxvciwKKyMgUm9sYW5kIE1jR3JhdGgsIE5vYWggRnJpZWRtYW4sIGRhdmlkIGQgenVobiwgYW5kIG1hbnkgb3RoZXJzLgorCisKKyMgVGFibGUgb2YgY29udGVudHMKKyMKKyMgMS4gR2VuZXJpYyB0ZXN0cyBmb3IgaGVhZGVycworIyAyLiBEZWZhdWx0IGluY2x1ZGVzCisjIDMuIEhlYWRlcnMgdG8gdGVzdHMgd2l0aCBBQ19DSEVDS19IRUFERVJTCisjIDQuIFRlc3RzIGZvciBzcGVjaWZpYyBoZWFkZXJzCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAxLiBHZW5lcmljIHRlc3RzIGZvciBoZWFkZXJzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgQUNfQ0hFQ0tfSEVBREVSKEhFQURFUi1GSUxFLAorIwkJICBbQUNUSU9OLUlGLUZPVU5EXSwgW0FDVElPTi1JRi1OT1QtRk9VTkRdLAorIwkJICBbSU5DTFVERVNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgV2UgYXJlIHNsb3dseSBtb3ZpbmcgdG8gY2hlY2tpbmcgaGVhZGVycyB3aXRoIHRoZSBjb21waWxlciBpbnN0ZWFkCisjIG9mIHRoZSBwcmVwcm9jLCBzbyB0aGF0IHdlIGFjdHVhbGx5IGxlYXJuIGFib3V0IHRoZSB1c2FiaWxpdHkgb2YgYQorIyBoZWFkZXIgaW5zdGVhZCBvZiBpdHMgbWVyZSBwcmVzZW5jZS4gIEJ1dCBzaW5jZSB1c2VycyBhcmUgdXNlZCB0bworIyB0aGUgb2xkIHNlbWFudGljcywgdGhleSBjaGVjayBmb3IgaGVhZGVycyBpbiByYW5kb20gb3JkZXIgYW5kCisjIHdpdGhvdXQgcHJvdmlkaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzLiAgVGhpcyBtYWNybyBpbXBsZW1lbnRzIHRoZQorIyB0cmFuc2l0aW9uIHBoYXNlLCBhbmQgc2hvdWxkIGJlIGNsZWFuZWQgdXAgbGF0dGVyIHRvIHVzZSBjb21waWxhdGlvbgorIyBvbmx5LgorIworIyBJZiBJTkNMVURFUyBpcyBlbXB0eSwgdGhlbiBjaGVjayBib3RoIHZpYSB0aGUgY29tcGlsZXIgYW5kIHByZXByb2MuCisjIElmIHRoZSByZXN1bHRzIGFyZSBkaWZmZXJlbnQsIGlzc3VlIGEgd2FybmluZywgYnV0IGtlZXAgdGhlIHByZXByb2MKKyMgcmVzdWx0LgorIworIyBJZiBJTkNMVURFUyBpcyBgLScsIGtlZXAgb25seSB0aGUgb2xkIHNlbWFudGljcy4KKyMKKyMgSWYgSU5DTFVERVMgaXMgc3BlY2lmaWVkIGFuZCBkaWZmZXJlbnQgZnJvbSBgLScsIHRoZW4gdXNlIHRoZSBuZXcKKyMgc2VtYW50aWNzIG9ubHkuCisjCisjIFRoZSBtNF9pbmRpciBhbGxvd3MgZm9yIGZld2VyIGV4cGFuc2lvbnMgb2YgJEAuCitBQ19ERUZVTihbQUNfQ0hFQ0tfSEVBREVSXSwKK1ttNF9pbmRpcihtNF9jYXNlKFskNF0sCisJCSAgW10sICBbW19BQ19DSEVDS19IRUFERVJfTU9OR1JFTF1dLAorCQkgIFstXSwgW1tfQUNfQ0hFQ0tfSEVBREVSX1BSRVBST0NdXSwKKwkJICAgICAgIFtbX0FDX0NIRUNLX0hFQURFUl9DT01QSUxFXV0pLCAkQCkKK10pIyBBQ19DSEVDS19IRUFERVIKKworCisjIF9BQ19DSEVDS19IRUFERVJfTU9OR1JFTF9CT0RZCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNoZWxsIGZ1bmN0aW9uIGJvZHkgZm9yIF9BQ19DSEVDS19IRUFERVJfTU9OR1JFTAorbTRfZGVmaW5lKFtfQUNfQ0hFQ0tfSEVBREVSX01PTkdSRUxfQk9EWV0sCitbICBBU19MSU5FTk9fUFVTSChbJFtdMV0pCisgIEFTX1ZBUl9TRVRfSUYoWyRbXTNdLAorCQlbQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkW10yXSwgWyRbXTNdLCBbXSldLAorCQlbIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CitBQ19NU0dfQ0hFQ0tJTkcoWyRbXTIgdXNhYmlsaXR5XSkKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbJFtdNAorQCU6QGluY2x1ZGUgPCRbXTI+XSldLAorCQkgIFthY19oZWFkZXJfY29tcGlsZXI9eWVzXSwKKwkJICBbYWNfaGVhZGVyX2NvbXBpbGVyPW5vXSkKK0FDX01TR19SRVNVTFQoWyRhY19oZWFkZXJfY29tcGlsZXJdKQorCisjIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KK0FDX01TR19DSEVDS0lORyhbJFtdMiBwcmVzZW5jZV0pCitBQ19QUkVQUk9DX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW0AlOkBpbmNsdWRlIDwkW10yPl0pXSwKKwkJICBbYWNfaGVhZGVyX3ByZXByb2M9eWVzXSwKKwkJICBbYWNfaGVhZGVyX3ByZXByb2M9bm9dKQorQUNfTVNHX1JFU1VMVChbJGFjX2hlYWRlcl9wcmVwcm9jXSkKKworIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CitjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19bXV9BQ19MQU5HX0FCQlJFVltdX3ByZXByb2Nfd2Fybl9mbGFnIGluICMoKAorICB5ZXM6bm86ICkKKyAgICBBQ19NU0dfV0FSTihbJFtdMjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yIV0pCisgICAgQUNfTVNHX1dBUk4oWyRbXTI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHRdKQorICAgIDs7CisgIG5vOnllczoqICkKKyAgICBBQ19NU0dfV0FSTihbJFtdMjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkXSkKKyAgICBBQ19NU0dfV0FSTihbJFtdMjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzP10pCisgICAgQUNfTVNHX1dBUk4oWyRbXTI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbl0pCisgICAgQUNfTVNHX1dBUk4oWyRbXTI6ICAgICBzZWN0aW9uICJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWQiXSkKKyAgICBBQ19NU0dfV0FSTihbJFtdMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdF0pCittNF9pZnNldChbQUNfUEFDS0FHRV9CVUdSRVBPUlRdLAorW200X24oWyggQVNfQk9YKFtSZXBvcnQgdGhpcyB0byBdQUNfUEFDS0FHRV9CVUdSRVBPUlQpCisgICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjJdKV0pZG5sCisgICAgOzsKK2VzYWMKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkW10yXSwgWyRbXTNdLAorCQkgW0FTX1ZBUl9TRVQoWyRbXTNdLCBbJGFjX2hlYWRlcl9jb21waWxlcl0pXSldKQorICBBU19MSU5FTk9fUE9QCitdKSNfQUNfQ0hFQ0tfSEVBREVSX01PTkdSRUxfQk9EWQorCisjIF9BQ19DSEVDS19IRUFERVJfTU9OR1JFTChIRUFERVItRklMRSwKKyMJCQkgICBbQUNUSU9OLUlGLUZPVU5EXSwgW0FDVElPTi1JRi1OT1QtRk9VTkRdLAorIwkJCSAgIFtJTkNMVURFUyA9IERFRkFVTFQtSU5DTFVERVNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdXNpbmcgYm90aCB0aGUgY29tcGlsZXIgYW5kIHRoZSBwcmVwcm9jZXNzb3IuICBJZiB0aGV5IGRpc2FncmVlLAorIyB3YXJuLCBhbmQgdGhlIHByZXByb2Mgd2lucy4KKyMKKyMgVGhpcyBpcyBub3QgYmFzZWQgb24gX0FDX0NIRUNLX0hFQURFUl9DT01QSUxFIGFuZCBfQUNfQ0hFQ0tfSEVBREVSX1BSRVBST0MKKyMgYmVjYXVzZSBpdCBvYmZ1c2NhdGUgdGhlIGNvZGUgdG8gdHJ5IHRvIGZhY3RvciBldmVyeXRoaW5nLCBpbiBwYXJ0aWN1bGFyCisjIGJlY2F1c2Ugb2YgdGhlIGNhY2hlIHZhcmlhYmxlcywgYW5kIHRoZSBgY2hlY2tpbmcuLi4nIG1lc3NhZ2VzLgorQUNfREVGVU4oW19BQ19DSEVDS19IRUFERVJfTU9OR1JFTF0sCitbQUNfUkVRVUlSRV9TSEVMTF9GTihbYWNfZm5fXV9BQ19MQU5HX0FCQlJFVltfY2hlY2tfaGVhZGVyX21vbmdyZWxdLAorICBbQVNfRlVOQ1RJT05fREVTQ1JJQkUoW2FjX2ZuX11fQUNfTEFOR19BQkJSRVZbX2NoZWNrX2hlYWRlcl9tb25ncmVsXSwKKyAgICBbTElORU5PIEhFQURFUiBWQVIgSU5DTFVERVNdLAorICAgIFtUZXN0cyB3aGV0aGVyIEhFQURFUiBleGlzdHMsIGdpdmluZyBhIHdhcm5pbmcgaWYgaXQgY2Fubm90IGJlIGNvbXBpbGVkCisgICAgIHVzaW5nIHRoZSBpbmNsdWRlIGZpbGVzIGluIElOQ0xVREVTIGFuZCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIKKyAgICAgYWNjb3JkaW5nbHkuXSldLAorICBbJDBfQk9EWV0pXWRubAorW0FTX1ZBUl9QVVNIREVGKFthY19IZWFkZXJdLCBbYWNfY3ZfaGVhZGVyXyQxXSldZG5sCitbYWNfZm5fW11fQUNfTEFOR19BQkJSRVZbXV9jaGVja19oZWFkZXJfbW9uZ3JlbCBdZG5sCitbIiRMSU5FTk8iICIkMSIgImFjX0hlYWRlciIgIkFTX0VTQ0FQRShbQUNfSU5DTFVERVNfREVGQVVMVChbJDRdKV0sIFsiIl0pIgorQVNfVkFSX0lGKFthY19IZWFkZXJdLCBbeWVzXSwgWyQyXSwgWyQzXSkKK0FTX1ZBUl9QT1BERUYoW2FjX0hlYWRlcl0pXSkjIF9BQ19DSEVDS19IRUFERVJfTU9OR1JFTAorCisKKyMgX0FDX0NIRUNLX0hFQURFUl9DT01QSUxFX0JPRFkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2hlbGwgZnVuY3Rpb24gYm9keSBmb3IgX0FDX0NIRUNLX0hFQURFUl9DT01QSUxFCittNF9kZWZpbmUoW19BQ19DSEVDS19IRUFERVJfQ09NUElMRV9CT0RZXSwKK1sgIEFTX0xJTkVOT19QVVNIKFskW10xXSkKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkW10yXSwgWyRbXTNdLAorCQkgW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbJFtdNAorQCU6QGluY2x1ZGUgPCRbXTI+XSldLAorCQkJCSAgICBbQVNfVkFSX1NFVChbJFtdM10sIFt5ZXNdKV0sCisJCQkJICAgIFtBU19WQVJfU0VUKFskW10zXSwgW25vXSldKV0pCisgIEFTX0xJTkVOT19QT1AKK10pIyBfQUNfQ0hFQ0tfSEVBREVSX0NPTVBJTEVfQk9EWQorCisjIF9BQ19DSEVDS19IRUFERVJfQ09NUElMRShIRUFERVItRklMRSwKKyMJCSAgICAgICBbQUNUSU9OLUlGLUZPVU5EXSwgW0FDVElPTi1JRi1OT1QtRk9VTkRdLAorIwkJICAgICAgIFtJTkNMVURFUyA9IERFRkFVTFQtSU5DTFVERVNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0aGUgY29tcGlsZXIgYWNjZXB0cyBIRUFERVItRklMRS4gIFRoZSBJTkNMVURFUyBhcmUgZGVmYXVsdGVkLgorQUNfREVGVU4oW19BQ19DSEVDS19IRUFERVJfQ09NUElMRV0sCitbQUNfUkVRVUlSRV9TSEVMTF9GTihbYWNfZm5fXV9BQ19MQU5HX0FCQlJFVltfY2hlY2tfaGVhZGVyX2NvbXBpbGVdLAorICBbQVNfRlVOQ1RJT05fREVTQ1JJQkUoW2FjX2ZuX11fQUNfTEFOR19BQkJSRVZbX2NoZWNrX2hlYWRlcl9jb21waWxlXSwKKyAgICBbTElORU5PIEhFQURFUiBWQVIgSU5DTFVERVNdLAorICAgIFtUZXN0cyB3aGV0aGVyIEhFQURFUiBleGlzdHMgYW5kIGNhbiBiZSBjb21waWxlZCB1c2luZyB0aGUgaW5jbHVkZSBmaWxlcworICAgICBpbiBJTkNMVURFUywgc2V0dGluZyB0aGUgY2FjaGUgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5Ll0pXSwKKyAgWyQwX0JPRFldKV1kbmwKK1tBU19WQVJfUFVTSERFRihbYWNfSGVhZGVyXSwgW2FjX2N2X2hlYWRlcl8kMV0pXWRubAorW2FjX2ZuX1tdX0FDX0xBTkdfQUJCUkVWW11fY2hlY2tfaGVhZGVyX2NvbXBpbGUgXWRubAorWyIkTElORU5PIiAiJDEiICJhY19IZWFkZXIiICJBU19FU0NBUEUoW0FDX0lOQ0xVREVTX0RFRkFVTFQoWyQ0XSldLCBbIiJdKSIKK0FTX1ZBUl9JRihbYWNfSGVhZGVyXSwgW3llc10sIFskMl0sIFskM10pCitBU19WQVJfUE9QREVGKFthY19IZWFkZXJdKV0pIyBfQUNfQ0hFQ0tfSEVBREVSX0NPTVBJTEUKKworIyBfQUNfQ0hFQ0tfSEVBREVSX1BSRVBST0NfQk9EWQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTaGVsbCBmdW5jdGlvbiBib2R5IGZvciBfQUNfQ0hFQ0tfSEVBREVSX1BSRVBST0MuCittNF9kZWZpbmUoW19BQ19DSEVDS19IRUFERVJfUFJFUFJPQ19CT0RZXSwKK1sgIEFTX0xJTkVOT19QVVNIKFskW10xXSkKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkW10yXSwgWyRbXTNdLAorICBbQUNfUFJFUFJPQ19JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtAJTpAaW5jbHVkZSA8JFtdMj5dKV0sCisJCSAgICAgW0FTX1ZBUl9TRVQoWyRbXTNdLCBbeWVzXSldLAorCQkgICAgIFtBU19WQVJfU0VUKFskW10zXSwgW25vXSldKV0pCisgIEFTX0xJTkVOT19QT1AKK10pIyBfQUNfQ0hFQ0tfSEVBREVSX1BSRVBST0NfQk9EWQorCisKKworIyBfQUNfQ0hFQ0tfSEVBREVSX1BSRVBST0MoSEVBREVSLUZJTEUsCisjCQkgICAgICAgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdGhlIHByZXByb2Nlc3NvciBhY2NlcHRzIEhFQURFUi1GSUxFLgorQUNfREVGVU4oW19BQ19DSEVDS19IRUFERVJfUFJFUFJPQ10sCitbQUNfUkVRVUlSRV9TSEVMTF9GTihbYWNfZm5fXV9BQ19MQU5HX0FCQlJFVltfY2hlY2tfaGVhZGVyX3ByZXByb2NdLAorICBbQVNfRlVOQ1RJT05fREVTQ1JJQkUoW2FjX2ZuX11fQUNfTEFOR19BQkJSRVZbX2NoZWNrX2hlYWRlcl9wcmVwcm9jXSwKKyAgICBbTElORU5PIEhFQURFUiBWQVJdLAorICAgIFtUZXN0cyB3aGV0aGVyIEhFQURFUiBpcyBwcmVzZW50LCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkuXSldLAorICBbJDBfQk9EWV0pXWRubAorW0FTX1ZBUl9QVVNIREVGKFthY19IZWFkZXJdLCBbYWNfY3ZfaGVhZGVyXyQxXSldZG5sCitbYWNfZm5fW11fQUNfTEFOR19BQkJSRVZbXV9jaGVja19oZWFkZXJfcHJlcHJvYyAiJExJTkVOTyIgIiQxIiAiYWNfSGVhZGVyIgorQVNfVkFSX0lGKFthY19IZWFkZXJdLCBbeWVzXSwgWyQyXSwgWyQzXSkKK0FTX1ZBUl9QT1BERUYoW2FjX0hlYWRlcl0pZG5sCitdKSMgX0FDX0NIRUNLX0hFQURFUl9QUkVQUk9DCisKKyMgX0FDX0NIRUNLX0hFQURFUl9PTEQoSEVBREVSLUZJTEUsIFtBQ1RJT04tSUYtRk9VTkRdLAorIyAgICAgICAgICAgICAgICAgICAgICBbQUNUSU9OLUlGLU5PVC1GT1VORF0pCisjIF9BQ19DSEVDS19IRUFERVJfTkVXKEhFQURFUi1GSUxFLCBbQUNUSU9OLUlGLUZPVU5EXSwKKyMgICAgICAgICAgICAgICAgICAgICAgW0FDVElPTi1JRi1OT1QtRk9VTkRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNvbWUgcGFja2FnZXMgdXNlZCB0aGVzZSB1bmRvY3VtZW50ZWQgbWFjcm9zLiAgRXZlbiB3b3JzZSwgZ2NjCisjIHJlZGVmaW5lZCBBQ19DSEVDS19IRUFERVIgaW4gdGVybXMgb2YgX0FDX0NIRUNLX0hFQURFUl9PTEQsIHNvIHdlCisjIGNhbid0IGRvIHRoZSBzaW1wbGVyOgorIyAgIEFVX0RFRlVOKFtfQUNfQ0hFQ0tfSEVBREVSX09MRF0sCisjICAgICBbQUNfQ0hFQ0tfSEVBREVSKFskMV0sIFskMl0sIFskM10sIFstXSldKQorQUNfREVGVU4oW19BQ19DSEVDS19IRUFERVJfT0xEXSwKK1tBQ19ESUFHTk9TRShbb2Jzb2xldGVdLCBbVGhlIG1hY3JvIGAkMCcgaXMgb2Jzb2xldGUuCitZb3Ugc2hvdWxkIHVzZSBBQ19DSEVDS19IRUFERVIgd2l0aCBhIGZvdXJ0aCBhcmd1bWVudC5dKV1kbmwKK1tfQUNfQ0hFQ0tfSEVBREVSX1BSRVBST0MoJEApXSkKKworQUNfREVGVU4oW19BQ19DSEVDS19IRUFERVJfTkVXXSwKK1tBQ19ESUFHTk9TRShbb2Jzb2xldGVdLCBbVGhlIG1hY3JvIGAkMCcgaXMgb2Jzb2xldGUuCitZb3Ugc2hvdWxkIHVzZSBBQ19DSEVDS19IRUFERVIgd2l0aCBhIGZvdXJ0aCBhcmd1bWVudC5dKV1kbmwKK1tfQUNfQ0hFQ0tfSEVBREVSX0NPTVBJTEUoJEApXSkKKworCisjIF9BSF9DSEVDS19IRUFERVIoSEVBREVSLUZJTEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByZXBhcmUgdGhlIGF1dG9oZWFkZXIgc25pcHBldCBmb3IgSEVBREVSLUZJTEUuCittNF9kZWZpbmUoW19BSF9DSEVDS19IRUFERVJdLAorW0FIX1RFTVBMQVRFKEFTX1RSX0NQUChbSEFWRV8kMV0pLAorICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDwkMT4gaGVhZGVyIGZpbGUuXSldKQorCisKKyMgQUhfQ0hFQ0tfSEVBREVSUyhIRUFERVItRklMRS4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbQUhfQ0hFQ0tfSEVBREVSU10sCitbbTRfZm9yZWFjaF93KFtBQ19IZWFkZXJdLCBbJDFdLCBbX0FIX0NIRUNLX0hFQURFUihtNF9kZWZuKFtBQ19IZWFkZXJdKSldKV0pCisKKworIyBBQ19DSEVDS19IRUFERVJTKEhFQURFUi1GSUxFLi4uLAorIwkJICAgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSwKKyMJCSAgIFtJTkNMVURFU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGVhY2ggd2hpdGVzcGFjZS1zZXBhcmF0ZWQgSEVBREVSLUZJTEUgKG9taXR0aW5nIHRoZSA8PiBvcgorIyAiIiksIGFuZCBwZXJmb3JtIEFDVElPTi1JRi1GT1VORCBvciBBQ1RJT04tSUYtTk9ULUZPVU5EIGZvciBlYWNoCisjIGhlYWRlci4gIElOQ0xVREVTIGlzIGFzIGZvciBBQ19DSEVDS19IRUFERVIuICBBZGRpdGlvbmFsbHksIG1ha2UgdGhlCisjIHByZXByb2Nlc3NvciBkZWZpbml0aW9uIEhBVkVfSEVBREVSX0ZJTEUgYXZhaWxhYmxlIGZvciBlYWNoIGZvdW5kCisjIGhlYWRlci4gIEVpdGhlciBBQ1RJT04gbWF5IGluY2x1ZGUgYGJyZWFrJyB0byBzdG9wIHRoZSBzZWFyY2guCitBQ19ERUZVTihbQUNfQ0hFQ0tfSEVBREVSU10sCitbbTRfbWFwX2FyZ3NfdyhbJDFdLCBbX0FIX0NIRUNLX0hFQURFUihdLCBbKV0pXWRubAorW0FTX0ZPUihbQUNfaGVhZGVyXSwgW2FjX2hlYWRlcl0sIFskMV0sCitbQUNfQ0hFQ0tfSEVBREVSKEFDX2hlYWRlciwKKwkJIFtBQ19ERUZJTkVfVU5RVU9URUQoQVNfVFJfQ1BQKFtIQVZFX11BQ19oZWFkZXIpKSAkMl0sCisJCSBbJDNdLCBbJDRdKWRubF0pCitdKSMgQUNfQ0hFQ0tfSEVBREVSUworCisKKyMgX0FDX0NIRUNLX0hFQURFUl9PTkNFKEhFQURFUi1GSUxFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBhIHNpbmdsZSBIRUFERVItRklMRSBvbmNlLgorbTRfZGVmaW5lKFtfQUNfQ0hFQ0tfSEVBREVSX09OQ0VdLAorW19BSF9DSEVDS19IRUFERVIoWyQxXSlBQ19ERUZVTihbX0FDX0hlYWRlcl9dbTRfdHJhbnNsaXQoW1skMV1dLAorICAgIFsuLy1dLCBbX19fXSksCisgIFttNF9kaXZlcnRfdGV4dChbSU5JVF9QUkVQQVJFXSwgW0FTX1ZBUl9BUFBFTkQoW2FjX2hlYWRlcl9saXN0XSwgWyIgJDEiXSldKQorX0FDX0hFQURFUlNfRVhQQU5TSU9OXSlBQ19SRVFVSVJFKFtfQUNfSGVhZGVyX11tNF90cmFuc2xpdChbWyQxXV0sCisgICAgWy4vLV0sIFtfX19dKSldKQorCisKKyMgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKEhFQURFUi1GSUxFLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFkZCBlYWNoIHdoaXRlc3BhY2Utc2VwYXJhdGVkIG5hbWUgaW4gSEVBREVSLUZJTEUgdG8gdGhlIGxpc3Qgb2YKKyMgaGVhZGVycyB0byBjaGVjayBvbmNlLgorQUNfREVGVU4oW0FDX0NIRUNLX0hFQURFUlNfT05DRV0sCitbbTRfbWFwX2FyZ3NfdyhbJDFdLCBbX0FDX0NIRUNLX0hFQURFUl9PTkNFKF0sIFspXSldKQorCittNF9kZWZpbmUoW19BQ19IRUFERVJTX0VYUEFOU0lPTl0sCitbCisgIG00X2RpdmVydF90ZXh0KFtERUZBVUxUU10sIFthY19oZWFkZXJfbGlzdD1dKQorICBBQ19DSEVDS19IRUFERVJTKFskYWNfaGVhZGVyX2xpc3RdLCBbXSwgW10sIFtBQ19JTkNMVURFU19ERUZBVUxUXSkKKyAgbTRfZGVmaW5lKFtfQUNfSEVBREVSU19FWFBBTlNJT05dLCBbXSkKK10pCisKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgMi4gRGVmYXVsdCBpbmNsdWRlcy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBBbHdheXMgdXNlIHRoZSBzYW1lIHNldCBvZiBkZWZhdWx0IGhlYWRlcnMgZm9yIGFsbCB0aGUgZ2VuZXJpYworIyBtYWNyb3MuICBJdCBpcyBlYXNpZXIgdG8gZG9jdW1lbnQsIHRvIGV4dGVuZCwgYW5kIHRvIHVuZGVyc3RhbmQgdGhhbgorIyBoYXZpbmcgc3BlY2lmaWMgZGVmYXVsdHMgZm9yIGVhY2ggbWFjcm8uCisKKyMgX0FDX0lOQ0xVREVTX0RFRkFVTFRfUkVRVUlSRU1FTlRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZXF1aXJlZCB3aGVuIEFDX0lOQ0xVREVTX0RFRkFVTFQgdXNlcyBpdHMgZGVmYXVsdCBicmFuY2guCitBQ19ERUZVTihbX0FDX0lOQ0xVREVTX0RFRkFVTFRfUkVRVUlSRU1FTlRTXSwKK1ttNF9kaXZlcnRfdGV4dChbREVGQVVMVFNdLAorWyMgRmFjdG9yaW5nIGRlZmF1bHQgaGVhZGVycyBmb3IgbW9zdCB0ZXN0cy4KK2RubCBJZiBldmVyIHlvdSBjaGFuZ2UgdGhpcyB2YXJpYWJsZSwgcGxlYXNlIGtlZXAgYXV0b2NvbmYudGV4aSBpbiBzeW5jLgorYWNfaW5jbHVkZXNfZGVmYXVsdD0iXAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAorIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWZkZWYgU1REQ19IRUFERVJTCisjIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbHNlCisjIGlmZGVmIEhBVkVfU1RETElCX0gKKyMgIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdfSAorIyBpZiAhZGVmaW5lZCBTVERDX0hFQURFUlMgJiYgZGVmaW5lZCBIQVZFX01FTU9SWV9ICisjICBpbmNsdWRlIDxtZW1vcnkuaD4KKyMgZW5kaWYKKyMgaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NUUklOR1NfSAorIyBpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0lOVFRZUEVTX0gKKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RESU5UX0gKKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmIgorXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSlkbmwKKyMgT24gSVJJWCA1LjMsIHN5cy90eXBlcyBhbmQgaW50dHlwZXMuaCBhcmUgY29uZmxpY3RpbmcuCitBQ19DSEVDS19IRUFERVJTKFtzeXMvdHlwZXMuaCBzeXMvc3RhdC5oIHN0ZGxpYi5oIHN0cmluZy5oIG1lbW9yeS5oIHN0cmluZ3MuaCBcCisJCSAgaW50dHlwZXMuaCBzdGRpbnQuaCB1bmlzdGQuaF0sCisJCSBbXSwgW10sICRhY19pbmNsdWRlc19kZWZhdWx0KQorXSkjIF9BQ19JTkNMVURFU19ERUZBVUxUX1JFUVVJUkVNRU5UUworCisKKyMgQUNfSU5DTFVERVNfREVGQVVMVChbSU5DTFVERVNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmIElOQ0xVREVTIGlzIGVtcHR5LCBleHBhbmQgaW4gZGVmYXVsdCBpbmNsdWRlcywgb3RoZXJ3aXNlIGluCisjIElOQ0xVREVTLgorIyBJbiBtb3N0IGNhc2VzIElOQ0xVREVTIGlzIG5vdCBkb3VibGUgcXVvdGVkIGFzIGl0IHNob3VsZCwgYW5kIGlmCisjIGZvciBpbnN0YW5jZSBJTkNMVURFUyA9IGAjaW5jbHVkZSA8c3RkaW8uaD4nIHRoZW4gdW5sZXNzIHdlIGZvcmNlCisjIGEgbmV3bGluZSwgdGhlIGhhc2ggd2lsbCBzd2FsbG93IHRoZSBjbG9zaW5nIHBhcmVuIGV0Yy4gZXRjLgorIyBUaGUgdXN1YWwgZmFpbHVyZS4KKyMgVGFrZSBubyByaXNrOiBmb3IgdGhlIG5ld2xpbmUuCitBQ19ERUZVTihbQUNfSU5DTFVERVNfREVGQVVMVF0sCitbbTRfaWZ2YWwoWyQxXSwgWyQxCitdLAorCSAgW0FDX1JFUVVJUkUoW19BQ19JTkNMVURFU19ERUZBVUxUX1JFUVVJUkVNRU5UU10pZG5sCiskYWNfaW5jbHVkZXNfZGVmYXVsdF0pXSkKKworCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAzLiBIZWFkZXJzIHRvIGNoZWNrIHdpdGggQUNfQ0hFQ0tfSEVBREVSUy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgZXJybm8uaCBpcyBwb3J0YWJsZS4KKworQU5fSEVBREVSKFtPUy5oXSwgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfSEVBREVSU10pCitBTl9IRUFERVIoW2FyZ3ouaF0sICAgICAgICAgICAgIFtBQ19DSEVDS19IRUFERVJTXSkKK0FOX0hFQURFUihbYXJwYS9pbmV0LmhdLCAgICAgICAgW0FDX0NIRUNLX0hFQURFUlNdKQorQU5fSEVBREVSKFtmY250bC5oXSwgICAgICAgICAgICBbQUNfQ0hFQ0tfSEVBREVSU10pCitBTl9IRUFERVIoW2ZlbnYuaF0sICAgICAgICAgICAgIFtBQ19DSEVDS19IRUFERVJTXSkKK0FOX0hFQURFUihbZmxvYXQuaF0sICAgICAgICAgICAgW0FDX0NIRUNLX0hFQURFUlNdKQorQU5fSEVBREVSKFtmc19pbmZvLmhdLCAgICAgICAgICBbQUNfQ0hFQ0tfSEVBREVSU10pCitBTl9IRUFERVIoW2ludHR5cGVzLmhdLCAgICAgICAgIFtBQ19DSEVDS19IRUFERVJTXSkKK0FOX0hFQURFUihbbGFuZ2luZm8uaF0sICAgICAgICAgW0FDX0NIRUNLX0hFQURFUlNdKQorQU5fSEVBREVSKFtsaWJpbnRsLmhdLCAgICAgICAgICBbQUNfQ0hFQ0tfSEVBREVSU10pCitBTl9IRUFERVIoW2xpbWl0cy5oXSwgICAgICAgICAgIFtBQ19DSEVDS19IRUFERVJTXSkKK0FOX0hFQURFUihbbG9jYWxlLmhdLCAgICAgICAgICAgW0FDX0NIRUNLX0hFQURFUlNdKQorQU5fSEVBREVSKFttYWNoL21hY2guaF0sICAgICAgICBbQUNfQ0hFQ0tfSEVBREVSU10pCitBTl9IRUFERVIoW21hbGxvYy5oXSwgICAgICAgICAgIFtBQ19DSEVDS19IRUFERVJTXSkKK0FOX0hFQURFUihbbWVtb3J5LmhdLCAgICAgICAgICAgW0FDX0NIRUNLX0hFQURFUlNdKQorQU5fSEVBREVSKFttbnRlbnQuaF0sICAgICAgICAgICBbQUNfQ0hFQ0tfSEVBREVSU10pCitBTl9IRUFERVIoW21udHRhYi5oXSwgICAgICAgICAgIFtBQ19DSEVDS19IRUFERVJTXSkKK0FOX0hFQURFUihbbmV0ZGIuaF0sICAgICAgICAgICAgW0FDX0NIRUNLX0hFQURFUlNdKQorQU5fSEVBREVSKFtuZXRpbmV0L2luLmhdLCAgICAgICBbQUNfQ0hFQ0tfSEVBREVSU10pCitBTl9IRUFERVIoW25sX3R5cGVzLmhdLCAgICAgICAgIFtBQ19DSEVDS19IRUFERVJTXSkKK0FOX0hFQURFUihbbmxpc3QuaF0sICAgICAgICAgICAgW0FDX0NIRUNLX0hFQURFUlNdKQorQU5fSEVBREVSKFtwYXRocy5oXSwgICAgICAgICAgICBbQUNfQ0hFQ0tfSEVBREVSU10pCitBTl9IRUFERVIoW3NndHR5LmhdLCAgICAgICAgICAgIFtBQ19DSEVDS19IRUFERVJTXSkKK0FOX0hFQURFUihbc2hhZG93LmhdLCAgICAgICAgICAgW0FDX0NIRUNLX0hFQURFUlNdKQorQU5fSEVBREVSKFtzdGRkZWYuaF0sICAgICAgICAgICBbQUNfQ0hFQ0tfSEVBREVSU10pCitBTl9IRUFERVIoW3N0ZGludC5oXSwgICAgICAgICAgIFtBQ19DSEVDS19IRUFERVJTXSkKK0FOX0hFQURFUihbc3RkaW9fZXh0LmhdLCAgICAgICAgW0FDX0NIRUNLX0hFQURFUlNdKQorQU5fSEVBREVSKFtzdGRsaWIuaF0sICAgICAgICAgICBbQUNfQ0hFQ0tfSEVBREVSU10pCitBTl9IRUFERVIoW3N0cmluZy5oXSwgICAgICAgICAgIFtBQ19DSEVDS19IRUFERVJTXSkKK0FOX0hFQURFUihbc3RyaW5ncy5oXSwgICAgICAgICAgW0FDX0NIRUNLX0hFQURFUlNdKQorQU5fSEVBREVSKFtzeXMvYWNsLmhdLCAgICAgICAgICBbQUNfQ0hFQ0tfSEVBREVSU10pCitBTl9IRUFERVIoW3N5cy9maWxlLmhdLCAgICAgICAgIFtBQ19DSEVDS19IRUFERVJTXSkKK0FOX0hFQURFUihbc3lzL2ZpbHN5cy5oXSwgICAgICAgW0FDX0NIRUNLX0hFQURFUlNdKQorQU5fSEVBREVSKFtzeXMvZnMvczVwYXJhbS5oXSwgICBbQUNfQ0hFQ0tfSEVBREVSU10pCitBTl9IRUFERVIoW3N5cy9mc190eXBlcy5oXSwgICAgIFtBQ19DSEVDS19IRUFERVJTXSkKK0FOX0hFQURFUihbc3lzL2ZzdHlwLmhdLCAgICAgICAgW0FDX0NIRUNLX0hFQURFUlNdKQorQU5fSEVBREVSKFtzeXMvaW9jdGwuaF0sICAgICAgICBbQUNfQ0hFQ0tfSEVBREVSU10pCitBTl9IRUFERVIoW3N5cy9tbnRlbnQuaF0sICAgICAgIFtBQ19DSEVDS19IRUFERVJTXSkKK0FOX0hFQURFUihbc3lzL21vdW50LmhdLCAgICAgICAgW0FDX0NIRUNLX0hFQURFUlNdKQorQU5fSEVBREVSKFtzeXMvcGFyYW0uaF0sICAgICAgICBbQUNfQ0hFQ0tfSEVBREVSU10pCitBTl9IRUFERVIoW3N5cy9zb2NrZXQuaF0sICAgICAgIFtBQ19DSEVDS19IRUFERVJTXSkKK0FOX0hFQURFUihbc3lzL3N0YXRmcy5oXSwgICAgICAgW0FDX0NIRUNLX0hFQURFUlNdKQorQU5fSEVBREVSKFtzeXMvc3RhdHZmcy5oXSwgICAgICBbQUNfQ0hFQ0tfSEVBREVSU10pCitBTl9IRUFERVIoW3N5cy9zeXN0ZW1pbmZvLmhdLCAgIFtBQ19DSEVDS19IRUFERVJTXSkKK0FOX0hFQURFUihbc3lzL3RpbWUuaF0sICAgICAgICAgW0FDX0NIRUNLX0hFQURFUlNdKQorQU5fSEVBREVSKFtzeXMvdGltZWIuaF0sICAgICAgICBbQUNfQ0hFQ0tfSEVBREVSU10pCitBTl9IRUFERVIoW3N5cy92ZnMuaF0sICAgICAgICAgIFtBQ19DSEVDS19IRUFERVJTXSkKK0FOX0hFQURFUihbc3lzL3dpbmRvdy5oXSwgICAgICAgW0FDX0NIRUNLX0hFQURFUlNdKQorQU5fSEVBREVSKFtzeXNsb2cuaF0sICAgICAgICAgICBbQUNfQ0hFQ0tfSEVBREVSU10pCitBTl9IRUFERVIoW3Rlcm1pby5oXSwgICAgICAgICAgIFtBQ19DSEVDS19IRUFERVJTXSkKK0FOX0hFQURFUihbdGVybWlvcy5oXSwgICAgICAgICAgW0FDX0NIRUNLX0hFQURFUlNdKQorQU5fSEVBREVSKFt1bmlzdGQuaF0sICAgICAgICAgICBbQUNfQ0hFQ0tfSEVBREVSU10pCitBTl9IRUFERVIoW3V0aW1lLmhdLCAgICAgICAgICAgIFtBQ19DSEVDS19IRUFERVJTXSkKK0FOX0hFQURFUihbdXRtcC5oXSwgICAgICAgICAgICAgW0FDX0NIRUNLX0hFQURFUlNdKQorQU5fSEVBREVSKFt1dG1weC5oXSwgICAgICAgICAgICBbQUNfQ0hFQ0tfSEVBREVSU10pCitBTl9IRUFERVIoW3ZhbHVlcy5oXSwgICAgICAgICAgIFtBQ19DSEVDS19IRUFERVJTXSkKK0FOX0hFQURFUihbd2NoYXIuaF0sICAgICAgICAgICAgW0FDX0NIRUNLX0hFQURFUlNdKQorQU5fSEVBREVSKFt3Y3R5cGUuaF0sICAgICAgICAgICBbQUNfQ0hFQ0tfSEVBREVSU10pCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyA0LiBUZXN0cyBmb3Igc3BlY2lmaWMgaGVhZGVycy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQUNfSEVBREVSX0FTU0VSVAorIyAtLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgdG8gZW5hYmxlIGFzc2VydGlvbnMuCitBQ19ERUZVTl9PTkNFKFtBQ19IRUFERVJfQVNTRVJUXSwKK1sKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBhc3NlcnRpb25zXSkKKyAgQUNfQVJHX0VOQUJMRShbYXNzZXJ0XSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1hc3NlcnRdLCBbdHVybiBvZmYgYXNzZXJ0aW9uc10pXSwKKyAgICBbYWNfZW5hYmxlX2Fzc2VydD0kZW5hYmxldmFsCisgICAgIEFTX0lGKGRubAorICAgICAgW3Rlc3QgIngkZW5hYmxldmFsIiA9IHhub10sCisJW0FDX0RFRklORShbTkRFQlVHXSwgWzFdLAorCSAgW0RlZmluZSB0byAxIGlmIGFzc2VydGlvbnMgc2hvdWxkIGJlIGRpc2FibGVkLl0pXSwKKyAgICAgIFt0ZXN0ICJ4JGVuYWJsZXZhbCIgIT0geHllc10sCisJW0FDX01TR19XQVJOKFtpbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIC0tZW5hYmxlLWFzc2VydF0pCisJYWNfZW5hYmxlX2Fzc2VydD15ZXNdKV0sCisgICAgW2FjX2VuYWJsZV9hc3NlcnQ9eWVzXSkKKyAgQUNfTVNHX1JFU1VMVChbJGFjX2VuYWJsZV9hc3NlcnRdKQorXSkKKworCisjIF9BQ19DSEVDS19IRUFERVJfRElSRU5UKEhFQURFUi1GSUxFLAorIwkJCSAgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9UX0ZPVU5EXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlrZSBBQ19DSEVDS19IRUFERVIsIGV4Y2VwdCBhbHNvIG1ha2Ugc3VyZSB0aGF0IEhFQURFUi1GSUxFCisjIGRlZmluZXMgdGhlIHR5cGUgYERJUicuICBkaXJlbnQuaCBvbiBOZXh0U3RlcCAzLjIgZG9lc24ndC4KK200X2RlZmluZShbX0FDX0NIRUNLX0hFQURFUl9ESVJFTlRdLAorW0FTX1ZBUl9QVVNIREVGKFthY19IZWFkZXJdLCBbYWNfY3ZfaGVhZGVyX2RpcmVudF8kMV0pZG5sCitBQ19DQUNIRV9DSEVDSyhbZm9yICQxIHRoYXQgZGVmaW5lcyBESVJdLCBbYWNfSGVhZGVyXSwKK1tBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8JDE+CitdLAorCQkJCSAgICBbaWYgKChESVIgKikgMCkKK3JldHVybiAwO10pXSwKKwkJICAgW0FTX1ZBUl9TRVQoW2FjX0hlYWRlcl0sIFt5ZXNdKV0sCisJCSAgIFtBU19WQVJfU0VUKFthY19IZWFkZXJdLCBbbm9dKV0pXSkKK0FTX1ZBUl9JRihbYWNfSGVhZGVyXSwgW3llc10sIFskMl0sIFskM10pCitBU19WQVJfUE9QREVGKFthY19IZWFkZXJdKWRubAorXSkjIF9BQ19DSEVDS19IRUFERVJfRElSRU5UCisKKworIyBfQUhfQ0hFQ0tfSEVBREVSX0RJUkVOVChIRUFERVJTKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWtlIF9BSF9DSEVDS19IRUFERVIsIGJ1dCB0dW5lZCB0byBhIGRpcmVudCBwcm92aWRlci4KK200X2RlZmluZShbX0FIX0NIRUNLX0hFQURFUl9ESVJFTlRdLAorW0FIX1RFTVBMQVRFKEFTX1RSX0NQUChbSEFWRV8kMV0pLAorICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDwkMT4gaGVhZGVyIGZpbGUsIGFuZCBpdCBkZWZpbmVzIGBESVInLl0pXSkKKworCisjIEFDX0hFQURFUl9ESVJFTlQKKyMgLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX0hFQURFUl9ESVJFTlRdLAorW200X21hcF9hcmdzKFtfQUhfQ0hFQ0tfSEVBREVSX0RJUkVOVF0sIFtkaXJlbnQuaF0sIFtzeXMvbmRpci5oXSwKKwkgICAgIFtzeXMvZGlyLmhdLCBbbmRpci5oXSldZG5sCitbYWNfaGVhZGVyX2RpcmVudD1ubworZm9yIGFjX2hkciBpbiBkaXJlbnQuaCBzeXMvbmRpci5oIHN5cy9kaXIuaCBuZGlyLmg7IGRvCisgIF9BQ19DSEVDS19IRUFERVJfRElSRU5UKCRhY19oZHIsCisJCQkgIFtBQ19ERUZJTkVfVU5RVU9URUQoQVNfVFJfQ1BQKEhBVkVfJGFjX2hkciksIDEpCithY19oZWFkZXJfZGlyZW50PSRhY19oZHI7IGJyZWFrXSkKK2RvbmUKKyMgVHdvIHZlcnNpb25zIG9mIG9wZW5kaXIgZXQgYWwuIGFyZSBpbiAtbGRpciBhbmQgLWx4IG9uIFNDTyBYZW5peC4KK2lmIHRlc3QgJGFjX2hlYWRlcl9kaXJlbnQgPSBkaXJlbnQuaDsgdGhlbgorICBBQ19TRUFSQ0hfTElCUyhvcGVuZGlyLCBkaXIpCitlbHNlCisgIEFDX1NFQVJDSF9MSUJTKG9wZW5kaXIsIHgpCitmaQorXSkjIEFDX0hFQURFUl9ESVJFTlQKKworCisjIEFDX0hFQURFUl9NQUpPUgorIyAtLS0tLS0tLS0tLS0tLS0KK0FOX0ZVTkNUSU9OKFttYWpvcl0sICAgICBbQUNfSEVBREVSX01BSk9SXSkKK0FOX0ZVTkNUSU9OKFttYWtlZGV2XSwgICBbQUNfSEVBREVSX01BSk9SXSkKK0FOX0ZVTkNUSU9OKFttaW5vcl0sICAgICBbQUNfSEVBREVSX01BSk9SXSkKK0FOX0hFQURFUihbc3lzL21rZGV2LmhdLCBbQUNfSEVBREVSX01BSk9SXSkKK0FDX0RFRlVOKFtBQ19IRUFERVJfTUFKT1JdLAorW0FDX0NBQ0hFX0NIRUNLKHdoZXRoZXIgc3lzL3R5cGVzLmggZGVmaW5lcyBtYWtlZGV2LAorCQlhY19jdl9oZWFkZXJfc3lzX3R5cGVzX2hfbWFrZWRldiwKK1tBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbQCU6QGluY2x1ZGUgPHN5cy90eXBlcy5oPl1dLAorCQkJCSBbW3JldHVybiBtYWtlZGV2KDAsIDApO11dKV0sCisJCVthY19jdl9oZWFkZXJfc3lzX3R5cGVzX2hfbWFrZWRldj15ZXNdLAorCQlbYWNfY3ZfaGVhZGVyX3N5c190eXBlc19oX21ha2VkZXY9bm9dKQorXSkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c190eXBlc19oX21ha2VkZXYgPSBubzsgdGhlbgorQUNfQ0hFQ0tfSEVBREVSKHN5cy9ta2Rldi5oLAorCQlbQUNfREVGSU5FKE1BSk9SX0lOX01LREVWLCAxLAorCQkJICAgW0RlZmluZSB0byAxIGlmIGBtYWpvcicsIGBtaW5vcicsIGFuZCBgbWFrZWRldicgYXJlCisJCQkgICAgZGVjbGFyZWQgaW4gPG1rZGV2Lmg+Ll0pXSkKKworICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX21rZGV2X2ggPSBubzsgdGhlbgorICAgIEFDX0NIRUNLX0hFQURFUihzeXMvc3lzbWFjcm9zLmgsCisJCSAgICBbQUNfREVGSU5FKE1BSk9SX0lOX1NZU01BQ1JPUywgMSwKKwkJCSAgICAgICBbRGVmaW5lIHRvIDEgaWYgYG1ham9yJywgYG1pbm9yJywgYW5kIGBtYWtlZGV2JworCQkJCWFyZSBkZWNsYXJlZCBpbiA8c3lzbWFjcm9zLmg+Ll0pXSkKKyAgZmkKK2ZpCitdKSMgQUNfSEVBREVSX01BSk9SCisKKworIyBBQ19IRUFERVJfUkVTT0xWCisjIC0tLS0tLS0tLS0tLS0tLS0KKyMgQWNjb3JkaW5nIHRvIGh0dHA6Ly93d3cubWNzci5vbGVtaXNzLmVkdS9jZ2ktYmluL21hbi1jZ2k/cmVzb2x2ZXIrMworIyAob3IgaHR0cDovL3d3dy5jaGVtaWUuZnUtYmVybGluLmRlL2NnaS1iaW4vbWFuL3NnaV9pcml4P3Jlc29sdmVyKzMpLAorIyBzeXMvdHlwZXMuaCwgbmV0aW5ldC9pbi5oIGFuZCBhcnBhL25hbWVzZXIuaCBhcmUgcmVxdWlyZWQgb24gSVJJWC4KKyMgbmV0aW5ldC9pbi5oIGlzIG5lZWRlZCBvbiBDeWd3aW4sIHRvby4KKyMgV2l0aCBTb2xhcmlzIDksIG5ldGRiLmggaXMgcmVxdWlyZWQsIHRvIGdldCBzeW1ib2xzIGxpa2UgSE9TVF9OT1RfRk9VTkQuCisjCitBTl9IRUFERVIocmVzb2x2LmgsCVtBQ19IRUFERVJfUkVTT0xWXSkKK0FDX0RFRlVOKFtBQ19IRUFERVJfUkVTT0xWXSwKK1tBQ19DSEVDS19IRUFERVJTKHN5cy90eXBlcy5oIG5ldGluZXQvaW4uaCBhcnBhL25hbWVzZXIuaCBuZXRkYi5oIHJlc29sdi5oLAorCQkgIFtdLCBbXSwKK1tbI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyMgIGluY2x1ZGUgPG5ldGluZXQvaW4uaD4gICAvKiBpbmV0XyBmdW5jdGlvbnMgLyBzdHJ1Y3RzICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfTkFNRVNFUl9ICisjICBpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4gLyogRE5TIEhFQURFUiBzdHJ1Y3QgKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorIyAgaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZl1dKQorXSkjIEFDX0hFQURFUl9SRVNPTFYKKworCisjIEFDX0hFQURFUl9TVEFUCisjIC0tLS0tLS0tLS0tLS0tCisjIEZJWE1FOiBTaG91bGRuJ3QgdGhpcyBiZSBuYW1lZCBBQ19IRUFERVJfU1lTX1NUQVQ/CitBQ19ERUZVTihbQUNfSEVBREVSX1NUQVRdLAorW0FDX0NBQ0hFX0NIRUNLKHdoZXRoZXIgc3RhdCBmaWxlLW1vZGUgbWFjcm9zIGFyZSBicm9rZW4sCisgIGFjX2N2X2hlYWRlcl9zdGF0X2Jyb2tlbiwKK1tBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2lmIGRlZmluZWQgU19JU0JMSyAmJiBkZWZpbmVkIFNfSUZESVIKK2V4dGVybiBjaGFyIGMxW1NfSVNCTEsgKFNfSUZESVIpID8gLTEgOiAxXTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBTX0lTQkxLICYmIGRlZmluZWQgU19JRkNIUgorZXh0ZXJuIGNoYXIgYzJbU19JU0JMSyAoU19JRkNIUikgPyAtMSA6IDFdOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIFNfSVNMTksgJiYgZGVmaW5lZCBTX0lGUkVHCitleHRlcm4gY2hhciBjM1tTX0lTTE5LIChTX0lGUkVHKSA/IC0xIDogMV07CisjZW5kaWYKKworI2lmIGRlZmluZWQgU19JU1NPQ0sgJiYgZGVmaW5lZCBTX0lGUkVHCitleHRlcm4gY2hhciBjNFtTX0lTU09DSyAoU19JRlJFRykgPyAtMSA6IDFdOworI2VuZGlmCitdXSldLCBhY19jdl9oZWFkZXJfc3RhdF9icm9rZW49bm8sIGFjX2N2X2hlYWRlcl9zdGF0X2Jyb2tlbj15ZXMpXSkKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGF0X2Jyb2tlbiA9IHllczsgdGhlbgorICBBQ19ERUZJTkUoU1RBVF9NQUNST1NfQlJPS0VOLCAxLAorCSAgICBbRGVmaW5lIHRvIDEgaWYgdGhlIGBTX0lTKicgbWFjcm9zIGluIDxzeXMvc3RhdC5oPiBkbyBub3QKKwkgICAgIHdvcmsgcHJvcGVybHkuXSkKK2ZpCitdKSMgQUNfSEVBREVSX1NUQVQKKworCisjIEFDX0hFQURFUl9TVERCT09MCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBzdGRib29sLmggdGhhdCBjb25mb3JtcyB0byBDOTkuCitBTl9JREVOVElGSUVSKFtib29sXSwgW0FDX0hFQURFUl9TVERCT09MXSkKK0FOX0lERU5USUZJRVIoW3RydWVdLCBbQUNfSEVBREVSX1NUREJPT0xdKQorQU5fSURFTlRJRklFUihbZmFsc2VdLFtBQ19IRUFERVJfU1REQk9PTF0pCitBQ19ERUZVTihbQUNfSEVBREVSX1NUREJPT0xdLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3Igc3RkYm9vbC5oIHRoYXQgY29uZm9ybXMgdG8gQzk5XSwKKyAgIFthY19jdl9oZWFkZXJfc3RkYm9vbF9oXSwKKyAgIFtBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKAorICAgICAgW1sKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaWZuZGVmIGJvb2wKKyAiZXJyb3I6IGJvb2wgaXMgbm90IGRlZmluZWQiCisjZW5kaWYKKyNpZm5kZWYgZmFsc2UKKyAiZXJyb3I6IGZhbHNlIGlzIG5vdCBkZWZpbmVkIgorI2VuZGlmCisjaWYgZmFsc2UKKyAiZXJyb3I6IGZhbHNlIGlzIG5vdCAwIgorI2VuZGlmCisjaWZuZGVmIHRydWUKKyAiZXJyb3I6IHRydWUgaXMgbm90IGRlZmluZWQiCisjZW5kaWYKKyNpZiB0cnVlICE9IDEKKyAiZXJyb3I6IHRydWUgaXMgbm90IDEiCisjZW5kaWYKKyNpZm5kZWYgX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQKKyAiZXJyb3I6IF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkIGlzIG5vdCBkZWZpbmVkIgorI2VuZGlmCisKKwlzdHJ1Y3QgcyB7IF9Cb29sIHM6IDE7IF9Cb29sIHQ7IH0gczsKKworCWNoYXIgYVt0cnVlID09IDEgPyAxIDogLTFdOworCWNoYXIgYltmYWxzZSA9PSAwID8gMSA6IC0xXTsKKwljaGFyIGNbX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgPT0gMSA/IDEgOiAtMV07CisJY2hhciBkWyhib29sKSAwLjUgPT0gdHJ1ZSA/IDEgOiAtMV07CisJYm9vbCBlID0gJnM7CisJY2hhciBmWyhfQm9vbCkgMC4wID09IGZhbHNlID8gMSA6IC0xXTsKKwljaGFyIGdbdHJ1ZV07CisJY2hhciBoW3NpemVvZiAoX0Jvb2wpXTsKKwljaGFyIGlbc2l6ZW9mIHMudF07CisJZW51bSB7IGogPSBmYWxzZSwgayA9IHRydWUsIGwgPSBmYWxzZSAqIHRydWUsIG0gPSB0cnVlICogMjU2IH07CisJLyogVGhlIGZvbGxvd2luZyBmYWlscyBmb3IKKwkgICBIUCBhQysrL0FOU0kgQyBCMzkxMEIgQS4wNS41NSBbRGVjIDA0IDIwMDNdLiAqLworCV9Cb29sIG5bbV07CisJY2hhciBvW3NpemVvZiBuID09IG0gKiBzaXplb2YgblswXSA/IDEgOiAtMV07CisJY2hhciBwWy0xIC0gKF9Cb29sKSAwIDwgMCAmJiAtMSAtIChib29sKSAwIDwgMCA/IDEgOiAtMV07CisjCWlmIGRlZmluZWQgX194bGNfXyB8fCBkZWZpbmVkIF9fR05VQ19fCisJIC8qIENhdGNoIGEgYnVnIGluIElCTSBBSVggeGxjIGNvbXBpbGVyIHZlcnNpb24gNi4wLjAuMAorCSAgICByZXBvcnRlZCBieSBKYW1lcyBMZW1sZXkgb24gMjAwNS0xMC0wNTsgc2VlCisJICAgIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY29yZXV0aWxzLzIwMDUtMTAvbXNnMDAwODYuaHRtbAorCSAgICBUaGlzIHRlc3QgaXMgbm90IHF1aXRlIHJpZ2h0LCBzaW5jZSB4bGMgaXMgYWxsb3dlZCB0bworCSAgICByZWplY3QgdGhpcyBwcm9ncmFtLCBhcyB0aGUgaW5pdGlhbGl6ZXIgZm9yIHhsY2J1ZyBpcworCSAgICBub3Qgb25lIG9mIHRoZSBmb3JtcyB0aGF0IEMgcmVxdWlyZXMgc3VwcG9ydCBmb3IuCisJICAgIEhvd2V2ZXIsIGRvaW5nIHRoZSB0ZXN0IHJpZ2h0IHdvdWxkIHJlcXVpcmUgYSBydW50aW1lCisJICAgIHRlc3QsIGFuZCB0aGF0IHdvdWxkIG1ha2UgY3Jvc3MtY29tcGlsYXRpb24gaGFyZGVyLgorCSAgICBMZXQgdXMgaG9wZSB0aGF0IElCTSBmaXhlcyB0aGUgeGxjIGJ1ZywgYW5kIGFsc28gYWRkcworCSAgICBzdXBwb3J0IGZvciB0aGlzIGtpbmQgb2YgY29uc3RhbnQgZXhwcmVzc2lvbi4gIEluIHRoZQorCSAgICBtZWFudGltZSwgdGhpcyB0ZXN0IHdpbGwgcmVqZWN0IHhsYywgd2hpY2ggaXMgT0ssIHNpbmNlCisJICAgIG91ciBzdGRib29sLmggc3Vic3RpdHV0ZSBzaG91bGQgc3VmZmljZS4gIFdlIGFsc28gdGVzdAorCSAgICB0aGlzIHdpdGggR0NDLCB3aGVyZSBpdCBzaG91bGQgd29yaywgdG8gZGV0ZWN0IG1vcmUKKwkgICAgcXVpY2tseSB3aGV0aGVyIHNvbWVvbmUgbWVzc2VzIHVwIHRoZSB0ZXN0IGluIHRoZQorCSAgICBmdXR1cmUuICAqLworCSBjaGFyIGRpZ3NbXSA9ICIwMTIzNDU2Nzg5IjsKKwkgaW50IHhsY2J1ZyA9IDEgLyAoJihkaWdzICsgNSlbLTIgKyAoYm9vbCkgMV0gPT0gJmRpZ3NbNF0gPyAxIDogLTEpOworIwllbmRpZgorCS8qIENhdGNoIGEgYnVnIGluIGFuIEhQLVVYIEMgY29tcGlsZXIuICBTZWUKKwkgICBodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAwMy0xMi9tc2cwMjMwMy5odG1sCisJICAgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1jb3JldXRpbHMvMjAwNS0xMS9tc2cwMDE2MS5odG1sCisJICovCisJX0Jvb2wgcSA9IHRydWU7CisJX0Jvb2wgKnBxID0gJnE7CisgICAgICBdXSwKKyAgICAgIFtbCisJKnBxIHw9IHE7CisJKnBxIHw9ICEgcTsKKwkvKiBSZWZlciB0byBldmVyeSBkZWNsYXJlZCB2YWx1ZSwgdG8gYXZvaWQgY29tcGlsZXIgb3B0aW1pemF0aW9ucy4gICovCisJcmV0dXJuICghYSArICFiICsgIWMgKyAhZCArICFlICsgIWYgKyAhZyArICFoICsgIWkgKyAhIWogKyAhayArICEhbAorCQkrICFtICsgIW4gKyAhbyArICFwICsgIXEgKyAhcHEpOworICAgICAgXV0pXSwKKyAgICAgIFthY19jdl9oZWFkZXJfc3RkYm9vbF9oPXllc10sCisgICAgICBbYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaD1ub10pXSkKK0FDX0NIRUNLX1RZUEVTKFtfQm9vbF0pCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYm9vbF9oID0geWVzOyB0aGVuCisgIEFDX0RFRklORShIQVZFX1NUREJPT0xfSCwgMSwgW0RlZmluZSB0byAxIGlmIHN0ZGJvb2wuaCBjb25mb3JtcyB0byBDOTkuXSkKK2ZpCitdKSMgQUNfSEVBREVSX1NUREJPT0wKKworCisjIEFDX0hFQURFUl9TVERDCisjIC0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfSEVBREVSX1NURENdLAorW0FDX0NBQ0hFX0NIRUNLKGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLCBhY19jdl9oZWFkZXJfc3RkYywKK1tBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CitdXSldLAorCQkgICAgW2FjX2N2X2hlYWRlcl9zdGRjPXllc10sCisJCSAgICBbYWNfY3ZfaGVhZGVyX3N0ZGM9bm9dKQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCisgIEFDX0VHUkVQX0hFQURFUihtZW1jaHIsIHN0cmluZy5oLCAsIGFjX2N2X2hlYWRlcl9zdGRjPW5vKQorZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorICBBQ19FR1JFUF9IRUFERVIoZnJlZSwgc3RkbGliLmgsICwgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8pCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIC9iaW4vY2MgaW4gSXJpeC00LjAuNSBnZXRzIG5vbi1BTlNJIGN0eXBlIG1hY3JvcyB1bmxlc3MgdXNpbmcgLWFuc2kuCisgIEFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKAorW1sjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZiAoKCcgJyAmIDB4MEZGKSA9PSAweDAyMCkKKyMgZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKKyNlbHNlCisjIGRlZmluZSBJU0xPV0VSKGMpIFwKKwkJICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKwkJICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCisJCSAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gKChjKSB8IDB4NDApIDogKGMpKQorI2VuZGlmCisKKyNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEoZikpIHx8ICghKGUpICYmIChmKSkpCitpbnQKK21haW4gKCkKK3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICBpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpCisJfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisgICAgICByZXR1cm4gMjsKKyAgcmV0dXJuIDA7Cit9XV0pXSwgLCBhY19jdl9oZWFkZXJfc3RkYz1ubywgOikKK2ZpXSkKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgIEFDX0RFRklORShTVERDX0hFQURFUlMsIDEsCisJICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy5dKQorZmkKK10pIyBBQ19IRUFERVJfU1REQworCisKKyMgQUNfSEVBREVSX1NZU19XQUlUCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX0hFQURFUl9TWVNfV0FJVF0sCitbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzeXMvd2FpdC5oIHRoYXQgaXMgUE9TSVguMSBjb21wYXRpYmxlXSwKKyAgYWNfY3ZfaGVhZGVyX3N5c193YWl0X2gsCitbQUNfQ09NUElMRV9JRkVMU0UoCitbQUNfTEFOR19QUk9HUkFNKFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpZm5kZWYgV0VYSVRTVEFUVVMKKyMgZGVmaW5lIFdFWElUU1RBVFVTKHN0YXRfdmFsKSAoKHVuc2lnbmVkIGludCkgKHN0YXRfdmFsKSA+PiA4KQorI2VuZGlmCisjaWZuZGVmIFdJRkVYSVRFRAorIyBkZWZpbmUgV0lGRVhJVEVEKHN0YXRfdmFsKSAoKChzdGF0X3ZhbCkgJiAyNTUpID09IDApCisjZW5kaWYKK10sCitbICBpbnQgczsKKyAgd2FpdCAoJnMpOworICBzID0gV0lGRVhJVEVEIChzKSA/IFdFWElUU1RBVFVTIChzKSA6IDE7XSldLAorCQkgW2FjX2N2X2hlYWRlcl9zeXNfd2FpdF9oPXllc10sCisJCSBbYWNfY3ZfaGVhZGVyX3N5c193YWl0X2g9bm9dKV0pCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3dhaXRfaCA9IHllczsgdGhlbgorICBBQ19ERUZJTkUoSEFWRV9TWVNfV0FJVF9ILCAxLAorCSAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgPHN5cy93YWl0Lmg+IHRoYXQgaXMgUE9TSVguMSBjb21wYXRpYmxlLl0pCitmaQorXSkjIEFDX0hFQURFUl9TWVNfV0FJVAorCisKKyMgQUNfSEVBREVSX1RJTUUKKyMgLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19IRUFERVJfVElNRV0sCitbQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGltZS5oIGFuZCBzeXMvdGltZS5oIG1heSBib3RoIGJlIGluY2x1ZGVkXSwKKyAgYWNfY3ZfaGVhZGVyX3RpbWUsCitbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8dGltZS5oPgorXSwKK1tpZiAoKHN0cnVjdCB0bSAqKSAwKQorcmV0dXJuIDA7XSldLAorCQkgICBbYWNfY3ZfaGVhZGVyX3RpbWU9eWVzXSwKKwkJICAgW2FjX2N2X2hlYWRlcl90aW1lPW5vXSldKQoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3RpbWUgPSB5ZXM7IHRoZW4KKyAgQUNfREVGSU5FKFRJTUVfV0lUSF9TWVNfVElNRSwgMSwKKwkgICAgW0RlZmluZSB0byAxIGlmIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3RpbWUuaD4KKwkgICAgIGFuZCA8dGltZS5oPi5dKQorZmkKK10pIyBBQ19IRUFERVJfVElNRQorCisKKyMgX0FDX0hFQURFUl9USU9DR1dJTlNaX0lOX1RFUk1JT1NfSAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19BQ19IRUFERVJfVElPQ0dXSU5TWl9JTl9URVJNSU9TX0hdLAorW0FDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRlcm1pb3MuaCBkZWZpbmVzIFRJT0NHV0lOU1pdLAorCQlhY19jdl9zeXNfdGlvY2d3aW5zel9pbl90ZXJtaW9zX2gsCitbQUNfRUdSRVBfQ1BQKFt5ZXNdLAorCSAgICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dGVybWlvcy5oPgorI2lmZGVmIFRJT0NHV0lOU1oKKyAgeWVzCisjZW5kaWYKK10sCisJCWFjX2N2X3N5c190aW9jZ3dpbnN6X2luX3Rlcm1pb3NfaD15ZXMsCisJCWFjX2N2X3N5c190aW9jZ3dpbnN6X2luX3Rlcm1pb3NfaD1ubyldKQorXSkjIF9BQ19IRUFERVJfVElPQ0dXSU5TWl9JTl9URVJNSU9TX0gKKworCisjIF9BQ19IRUFERVJfVElPQ0dXSU5TWl9JTl9TWVNfSU9DVEwKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfQUNfSEVBREVSX1RJT0NHV0lOU1pfSU5fU1lTX0lPQ1RMXSwKK1tBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBzeXMvaW9jdGwuaCBkZWZpbmVzIFRJT0NHV0lOU1pdLAorCQlhY19jdl9zeXNfdGlvY2d3aW5zel9pbl9zeXNfaW9jdGxfaCwKK1tBQ19FR1JFUF9DUFAoW3llc10sCisJICAgICAgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpZmRlZiBUSU9DR1dJTlNaCisgIHllcworI2VuZGlmCitdLAorCQlhY19jdl9zeXNfdGlvY2d3aW5zel9pbl9zeXNfaW9jdGxfaD15ZXMsCisJCWFjX2N2X3N5c190aW9jZ3dpbnN6X2luX3N5c19pb2N0bF9oPW5vKV0pCitdKSMgX0FDX0hFQURFUl9USU9DR1dJTlNaX0lOX1NZU19JT0NUTAorCisKKyMgQUNfSEVBREVSX1RJT0NHV0lOU1oKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTG9vayBmb3IgYSBoZWFkZXIgdGhhdCBkZWZpbmVzIFRJT0NHV0lOU1ouCisjIEZJWE1FOiBJcyB0aGlzIHRoZSBwcm9wZXIgbmFtZT8gIElzIHRoaXMgdGhlIHByb3BlciBpbXBsZW1lbnRhdGlvbj8KKyMgSSBuZWVkIG1vcmUgaGVscC4KK0FDX0RFRlVOKFtBQ19IRUFERVJfVElPQ0dXSU5TWl0sCitbX0FDX0hFQURFUl9USU9DR1dJTlNaX0lOX1RFUk1JT1NfSAoraWYgdGVzdCAkYWNfY3Zfc3lzX3Rpb2Nnd2luc3pfaW5fdGVybWlvc19oICE9IHllczsgdGhlbgorICBfQUNfSEVBREVSX1RJT0NHV0lOU1pfSU5fU1lTX0lPQ1RMCisgIGlmIHRlc3QgJGFjX2N2X3N5c190aW9jZ3dpbnN6X2luX3N5c19pb2N0bF9oID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKEdXSU5TWl9JTl9TWVNfSU9DVEwsMSwKKwkgICAgICBbRGVmaW5lIHRvIDEgaWYgYFRJT0NHV0lOU1onIHJlcXVpcmVzIDxzeXMvaW9jdGwuaD4uXSkKKyAgZmkKK2ZpCitdKSMgQUNfSEVBREVSX1RJT0NHV0lOU1oKKworCisjIEFVOjpBQ19VTklTVERfSAorIyAtLS0tLS0tLS0tLS0tLS0KK0FVX0RFRlVOKFtBQ19VTklTVERfSF0sCitbQUNfQ0hFQ0tfSEVBREVSUyh1bmlzdGQuaCldKQorCisKKyMgQVU6OkFDX1VTRworIyAtLS0tLS0tLS0tCisjIERlZmluZSBgVVNHJyBpZiBzdHJpbmcgZnVuY3Rpb25zIGFyZSBpbiBzdHJpbmdzLmguCitBVV9ERUZVTihbQUNfVVNHXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBCU0Qgc3RyaW5nIGFuZCBtZW1vcnkgZnVuY3Rpb25zXSkKK0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tAJTpAaW5jbHVkZSA8c3RyaW5ncy5oPl1dLAorCQkJCVtbcmluZGV4KDAsIDApOyBiemVybygwLCAwKTtdXSldLAorCSAgICAgICBbQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKwkgICAgICAgW0FDX01TR19SRVNVTFQobm8pCisJCUFDX0RFRklORShVU0csIDEsCisJCQkgIFtEZWZpbmUgdG8gMSBpZiB5b3UgZG8gbm90IGhhdmUgPHN0cmluZ3MuaD4sIGluZGV4LAorCQkJICAgYnplcm8sIGV0Yy4uLiBUaGlzIHN5bWJvbCBpcyBvYnNvbGV0ZSwgeW91IHNob3VsZAorCQkJICAgbm90IGRlcGVuZCB1cG9uIGl0Ll0pXSkKK0FDX0NIRUNLX0hFQURFUlMoc3RyaW5nLmgpXSwKK1tSZW1vdmUgYEFDX01TR19DSEVDS0lORycsIGBBQ19MSU5LX0lGRUxTRScgYW5kIHRoaXMgd2FybmluZword2hlbiB5b3UgYWRqdXN0IHlvdXIgY29kZSB0byB1c2UgSEFWRV9TVFJJTkdfSC5dKQorCisKKyMgQVU6OkFDX01FTU9SWV9ICisjIC0tLS0tLS0tLS0tLS0tLQorIyBUbyBiZSBwcmVjaXNlIHRoaXMgbWFjcm8gdXNlZCB0byBiZToKKyMKKyMgICB8IEFDX01TR19DSEVDS0lORyh3aGV0aGVyIHN0cmluZy5oIGRlY2xhcmVzIG1lbSBmdW5jdGlvbnMpCisjICAgfCBBQ19FR1JFUF9IRUFERVIobWVtY2hyLCBzdHJpbmcuaCwgYWNfZm91bmQ9eWVzLCBhY19mb3VuZD1ubykKKyMgICB8IEFDX01TR19SRVNVTFQoJGFjX2ZvdW5kKQorIyAgIHwgaWYgdGVzdCAkYWNfZm91bmQgPSBubzsgdGhlbgorIyAgIHwJQUNfQ0hFQ0tfSEVBREVSKG1lbW9yeS5oLCBbQUNfREVGSU5FKE5FRURfTUVNT1JZX0gpXSkKKyMgICB8IGZpCisjCisjIEJ1dCBpdCBpcyBiZXR0ZXIgdG8gY2hlY2sgZm9yIGJvdGggaGVhZGVycywgYW5kIGFsaWFzIE5FRURfTUVNT1JZX0ggdG8KKyMgSEFWRV9NRU1PUllfSC4KK0FVX0RFRlVOKFtBQ19NRU1PUllfSF0sCitbQUNfQ0hFQ0tfSEVBREVSKG1lbW9yeS5oLAorCQlbQUNfREVGSU5FKFtORUVEX01FTU9SWV9IXSwgMSwKKwkJCSAgIFtTYW1lIGFzIGBIQVZFX01FTU9SWV9IJywgZG9uJ3QgZGVwZW5kIG9uIG1lLl0pXSkKK0FDX0NIRUNLX0hFQURFUlMoc3RyaW5nLmggbWVtb3J5LmgpXSwKK1tSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZAorYEFDX0NIRUNLX0hFQURFUihtZW1vcnkuaCwgQUNfREVGSU5FKC4uLikpJyB3aGVuIHlvdSBhZGp1c3QgeW91ciBjb2RlIHRvCit1c2UgSEFWRV9TVFJJTkdfSCBhbmQgSEFWRV9NRU1PUllfSCwgbm90IE5FRURfTUVNT1JZX0guXSkKKworCisjIEFVOjpBQ19ESVJfSEVBREVSCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIExpa2UgY2FsbGluZyBgQUNfSEVBREVSX0RJUkVOVCcgYW5kIGBBQ19GVU5DX0NMT1NFRElSX1ZPSUQnLCBidXQKKyMgZGVmaW5lcyBhIGRpZmZlcmVudCBzZXQgb2YgQyBwcmVwcm9jZXNzb3IgbWFjcm9zIHRvIGluZGljYXRlIHdoaWNoCisjIGhlYWRlciBmaWxlIGlzIGZvdW5kLgorQVVfREVGVU4oW0FDX0RJUl9IRUFERVJdLAorW0FDX0hFQURFUl9ESVJFTlQKK0FDX0ZVTkNfQ0xPU0VESVJfVk9JRAordGVzdCBhY19jdl9oZWFkZXJfZGlyZW50X2RpcmVudF9oICYmCisgIEFDX0RFRklORShbRElSRU5UXSwgMSwgW1NhbWUgYXMgYEhBVkVfRElSRU5UX0gnLCBkb24ndCBkZXBlbmQgb24gbWUuXSkKK3Rlc3QgYWNfY3ZfaGVhZGVyX2RpcmVudF9zeXNfbmRpcl9oICYmCisgIEFDX0RFRklORShbU1lTTkRJUl0sIDEsIFtTYW1lIGFzIGBIQVZFX1NZU19ORElSX0gnLCBkb24ndCBkZXBlbmQgb24gbWUuXSkKK3Rlc3QgYWNfY3ZfaGVhZGVyX2RpcmVudF9zeXNfZGlyX2ggJiYKKyAgQUNfREVGSU5FKFtTWVNESVJdLCAxLCBbU2FtZSBhcyBgSEFWRV9TWVNfRElSX0gnLCBkb24ndCBkZXBlbmQgb24gbWUuXSkKK3Rlc3QgYWNfY3ZfaGVhZGVyX2RpcmVudF9uZGlyX2ggJiYKKyAgQUNfREVGSU5FKFtORElSXSwgMSwgW1NhbWUgYXMgYEhBVkVfTkRJUl9IJywgZG9uJ3QgZGVwZW5kIG9uIG1lLl0pXSwKK1tSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgZm91ciBgQUNfREVGSU5FJyB3aGVuIHlvdQorYWRqdXN0IHlvdXIgY29kZSB0byB1c2UgYEFDX0hFQURFUl9ESVJFTlQnLl0pCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvY29uZi9hdXRvY29uZi9sYW5nLm00IGIvc2hhcmUvYXV0b2NvbmYvYXV0b2NvbmYvbGFuZy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmVkYTI0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b2NvbmYvYXV0b2NvbmYvbGFuZy5tNApAQCAtMCwwICsxLDcwOCBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4gICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMgUHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzIHN1cHBvcnQuCisjIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiwgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlCisjIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorIyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorIyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uLAorIyB2ZXJzaW9uIDMuMCwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFuZCBhIGNvcHkgb2YgdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGVzIENPUFlJTkd2MyBhbmQgQ09QWUlORy5FWENFUFRJT04KKyMgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFdyaXR0ZW4gYnkgRGF2aWQgTWFjS2VuemllLCB3aXRoIGhlbHAgZnJvbQorIyBGcmFuYyxvaXMgUGluYXJkLCBLYXJsIEJlcnJ5LCBSaWNoYXJkIFBpeGxleSwgSWFuIExhbmNlIFRheWxvciwKKyMgUm9sYW5kIE1jR3JhdGgsIE5vYWggRnJpZWRtYW4sIGRhdmlkIGQgenVobiwgYW5kIG1hbnkgb3RoZXJzLgorCisKKyMgVGFibGUgb2YgQ29udGVudHM6CisjCisjIDEuIExhbmd1YWdlIHNlbGVjdGlvbgorIyAgICBhbmQgcm91dGluZXMgdG8gcHJvZHVjZSBwcm9ncmFtcyBpbiBhIGdpdmVuIGxhbmd1YWdlLgorIworIyAyLiBQcm9kdWNpbmcgcHJvZ3JhbXMgaW4gYSBnaXZlbiBsYW5ndWFnZS4KKyMKKyMgMy4gTG9va2luZyBmb3IgYSBjb21waWxlcgorIyAgICBBbmQgcG9zc2libHkgdGhlIGFzc29jaWF0ZWQgcHJlcHJvY2Vzc29yLgorIworIyAgICAzYS4gQ29tcHV0aW5nIEVYRUVYVCBhbmQgT0JKRVhULgorIworIyA0LiBDb21waWxlcnMnIGNoYXJhY3RlcmlzdGljcy4KKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAxLiBMYW5ndWFnZSBzZWxlY3Rpb24uICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIEFDX0xBTkdfQ0FTRShMQU5HMSwgSUYtTEFORzEsIExBTkcyLCBJRi1MQU5HMiwgLi4uLCBERUZBVUxUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhwYW5kIGludG8gSUYtTEFORzEgaWYgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgaXMgTEFORzEgZXRjLiBlbHNlCisjIGludG8gZGVmYXVsdC4KK200X2RlZmluZShbQUNfTEFOR19DQVNFXSwKK1ttNF9jYXNlKF9BQ19MQU5HLCAkQCldKQorCisKKyMgX0FDX0xBTkdfRElTUEFUQ0goTUFDUk8sIExBTkcsIEFSR1MpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDYWxsIHRoZSBzcGVjaWFsaXphdGlvbiBvZiBNQUNSTyBmb3IgTEFORyB3aXRoIEFSR1MuICBDb21wbGFpbiBpZgorIyB1bmF2YWlsYWJsZS4KK200X2RlZmluZShbX0FDX0xBTkdfRElTUEFUQ0hdLAorW200X2lmZGVmKFskMSgkMildLAorICAgICAgIFttNF9pbmRpcihbJDEoJDIpXSwgbTRfc2hpZnQyKCRAKSldLAorICAgICAgIFttNF9mYXRhbChbJDE6IHVua25vd24gbGFuZ3VhZ2U6ICQyXSldKV0pCisKKworIyBfQUNfTEFOR19TRVQoT0xELCBORVcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0IHRoZSBzaGVsbCBjb2RlIG5lZWRlZCB0byBzd2l0Y2ggZnJvbSBPTEQgbGFuZ3VhZ2UgdG8gTkVXIGxhbmd1YWdlLgorIyBEbyBub3QgdHJ5IHRvIG9wdGltaXplIGxpa2UgdGhpczoKKyMKKyMgbTRfZGVmdW4oW19BQ19MQU5HX1NFVF0sCisjIFttNF9pZihbJDFdLCBbJDJdLCBbXSwKKyMgICAgICAgIFtfQUNfTEFOR19ESVNQQVRDSChbQUNfTEFOR10sIFskMl0pXSldKQorIworIyBhcyBpdCBjYW4gaW50cm9kdWNlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHNoLWN1cnJlbnQgbGFuZ3VhZ2UgYW5kIHRoZQorIyBtNC1jdXJyZW50LWxhbmd1YWdlIHdoZW4gbTRfcmVxdWlyZSBpcyB1c2VkLiAgU29tZXRoaW5nIG1vcmUgc3VidGxlCisjIG1pZ2h0IGJlIHBvc3NpYmxlLCBidXQgYXQgbGVhc3QgZm9yIHRoZSB0aW1lIGJlaW5nLCBwbGF5IGl0IHNhZmUuCittNF9kZWZ1bihbX0FDX0xBTkdfU0VUXSwKK1tfQUNfTEFOR19ESVNQQVRDSChbQUNfTEFOR10sIFskMl0pXSkKKworCisjIEFDX0xBTkcoTEFORykKKyMgLS0tLS0tLS0tLS0tLQorIyBTZXQgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgdG8gTEFORy4KK200X2RlZnVuKFtBQ19MQU5HXSwKK1tfQUNfTEFOR19TRVQobTRfaWZkZWYoW19BQ19MQU5HXSwgW200X2RlZm4oW19BQ19MQU5HXSldKSwKKwkgICAgICBbJDFdKWRubAorbTRfZGVmaW5lKFtfQUNfTEFOR10sIFskMV0pXSkKKworCisjIEFDX0xBTkdfUFVTSChMQU5HKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2F2ZSB0aGUgY3VycmVudCBsYW5ndWFnZSwgYW5kIHVzZSBMQU5HLgorbTRfZGVmdW4oW0FDX0xBTkdfUFVTSF0sCitbX0FDX0xBTkdfU0VUKG00X2lmZGVmKFtfQUNfTEFOR10sIFttNF9kZWZuKFtfQUNfTEFOR10pXSksCisJICAgICAgWyQxXSlkbmwKK200X3B1c2hkZWYoW19BQ19MQU5HXSwgWyQxXSldKQorCisKKyMgQUNfTEFOR19QT1AoW0xBTkddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmIGdpdmVuLCBjaGVjayB0aGF0IHRoZSBjdXJyZW50IGxhbmd1YWdlIGlzIExBTkcsIGFuZCByZXN0b3JlIHRoZQorIyBwcmV2aW91cyBsYW5ndWFnZS4KK200X2RlZnVuKFtBQ19MQU5HX1BPUF0sCitbbTRfaWZ2YWwoWyQxXSwKKyBbbTRfaWYoWyQxXSwgbTRfZGVmbihbX0FDX0xBTkddKSwgW10sCisgIFttNF9mYXRhbChbJDAoJDEpOiB1bmV4cGVjdGVkIGN1cnJlbnQgbGFuZ3VhZ2U6IF1tNF9kZWZuKFtfQUNfTEFOR10pKV0pXSlkbmwKK200X3B1c2hkZWYoWyQwIE9MRF0sIG00X2RlZm4oW19BQ19MQU5HXSkpZG5sCittNF9wb3BkZWYoW19BQ19MQU5HXSlkbmwKK19BQ19MQU5HX1NFVChtNF9kZWZuKFskMCBPTERdKSwgbTRfZGVmbihbX0FDX0xBTkddKSlkbmwKK200X3BvcGRlZihbJDAgT0xEXSlkbmwKK10pCisKKworIyBBQ19MQU5HX1NBVkUKKyMgLS0tLS0tLS0tLS0tCisjIFNhdmUgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UsIGJ1dCBkb24ndCBjaGFuZ2UgbGFuZ3VhZ2UuCitBVV9ERUZVTihbQUNfTEFOR19TQVZFXSwKK1tbQUNfTEFOR19TQVZFXV0sCitbSW5zdGVhZCBvZiB1c2luZyBgQUNfTEFORycsIGBBQ19MQU5HX1NBVkUnLCBhbmQgYEFDX0xBTkdfUkVTVE9SRScsCit5b3Ugc2hvdWxkIHVzZSBgQUNfTEFOR19QVVNIJyBhbmQgYEFDX0xBTkdfUE9QJy5dKQorQUNfREVGVU4oW0FDX0xBTkdfU0FWRV0sCitbbTRfcHVzaGRlZihbX0FDX0xBTkddLCBfQUNfTEFORylkbmwKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sIFtUaGUgbWFjcm8gYEFDX0xBTkdfU0FWRScgaXMgb2Jzb2xldGUuCitZb3Ugc2hvdWxkIHJ1biBhdXRvdXBkYXRlLl0pXSkKKworCisjIEFDX0xBTkdfUkVTVE9SRQorIyAtLS0tLS0tLS0tLS0tLS0KKyMgUmVzdG9yZSB0aGUgY3VycmVudCBsYW5ndWFnZSBmcm9tIHRoZSBzdGFjay4KK0FVX0RFRlVOKFtBQ19MQU5HX1JFU1RPUkVdLCBbQUNfTEFOR19QT1AoJEApXSkKKworCisjIF9BQ19MQU5HX0FCQlJFVgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgUmV0dXJuIGEgc2hvcnQgc2lnbmF0dXJlIG9mIF9BQ19MQU5HIHdoaWNoIGNhbiBiZSB1c2VkIGluIHNoZWxsCisjIHZhcmlhYmxlIG5hbWVzLCBvciBpbiBNNCBtYWNybyBuYW1lcy4KK200X2RlZnVuKFtfQUNfTEFOR19BQkJSRVZdLAorW19BQ19MQU5HX0RJU1BBVENIKFskMF0sIF9BQ19MQU5HLCAkQCldKQorCisKKyMgX0FDX0xBTkdfUFJFRklYCisjIC0tLS0tLS0tLS0tLS0tLQorIyBSZXR1cm4gYSBzaG9ydCAodXBwZXIgY2FzZSkgc2lnbmF0dXJlIG9mIF9BQ19MQU5HIHRoYXQgaXMgdXNlZCB0bworIyBwcmVmaXggZW52aXJvbm1lbnQgdmFyaWFibGVzIGxpa2UgRkxBR1MuCittNF9kZWZ1bihbX0FDX0xBTkdfUFJFRklYXSwKK1tfQUNfTEFOR19ESVNQQVRDSChbJDBdLCBfQUNfTEFORywgJEApXSkKKworCisjIEFDX0xBTkdfQVNTRVJUKExBTkcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEN1cnJlbnQgbGFuZ3VhZ2UgbXVzdCBiZSBMQU5HLgorbTRfZGVmdW4oW0FDX0xBTkdfQVNTRVJUXSwKK1ttNF9pZihfQUNfTEFORywgJDEsIFtdLAorICAgICAgIFttNF9mYXRhbChbJDA6IGN1cnJlbnQgbGFuZ3VhZ2UgaXMgbm90ICQxOiBdIF9BQ19MQU5HKV0pXSkKKworCisKKyMgQUNfTEFOR19ERUZJTkUoTkFNRSwgQUJCUkVWLCBQUkVGSVgsIENPTVBJTEVSLVZBUiwgQ09QWS1GUk9NLCBTSEVMTC1WQVJTKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBhIGxhbmd1YWdlIHJlZmVyZW5jZWQgYnkgQUNfTEFORyhOQU1FKSwgd2l0aCBjYWNoZSB2YXJpYWJsZSBwcmVmaXgKKyMgQUJCUkVWLCBNYWtlZmlsZSB2YXJpYWJsZSBwcmVmaXggUFJFRklYIGFuZCBjb21waWxlciB2YXJpYWJsZSBDT01QSUxFUi1WQVIuCisjIEFDX0xBTkcoTkFNRSkgaXMgZGVmaW5lZCB0byBTSEVMTC1WQVJTLCBvdGhlciBtYWNyb3MgYXJlIGNvcGllZCBmcm9tIGxhbmd1YWdlCisjIENPUFktRlJPTS4gIEV2ZW4gaWYgQ09QWS1GUk9NIGlzIGVtcHR5LCBhIGRlZmF1bHQgZGVmaW5pdGlvbiBpcyBwcm92aWRlZCBmb3IKKyMgbGFuZ3VhZ2Utc3BlY2lmaWMgbWFjcm9zIEFDX0xBTkdfU09VUkNFKE5BTUUpIGFuZCBBQ19MQU5HX0NPTkZURVNUKE5BTUUpLgorbTRfZGVmaW5lKFtBQ19MQU5HX0RFRklORV0sCitbbTRfZGVmaW5lKFtBQ19MQU5HKCQxKV0sIFskNl0pXQorW200X2RlZmluZShbX0FDX0xBTkdfQUJCUkVWKCQxKV0sIFskMl0pXQorW200X2RlZmluZShbX0FDX0xBTkdfUFJFRklYKCQxKV0sIFskM10pXQorW200X2RlZmluZShbX0FDX0NDKCQxKV0sIFskNF0pXQorW200X2NvcHkoW0FDX0xBTkdfQ09ORlRFU1QoJDUpXSwgW0FDX0xBTkdfQ09ORlRFU1QoJDEpXSldCitbbTRfY29weShbQUNfTEFOR19TT1VSQ0UoJDUpXSwgW0FDX0xBTkdfU09VUkNFKCQxKV0pXQorW200X2NvcHkoW19BQ19MQU5HX05VTExfUFJPR1JBTSgkNSldLCBbX0FDX0xBTkdfTlVMTF9QUk9HUkFNKCQxKV0pXQorW200X2lmdmFsKFskNV0sCitbbTRfY29weShbQUNfTEFOR19QUk9HUkFNKCQ1KV0sIFtBQ19MQU5HX1BST0dSQU0oJDEpXSldCitbbTRfY29weShbQUNfTEFOR19DQUxMKCQ1KV0sIFtBQ19MQU5HX0NBTEwoJDEpXSldCitbbTRfY29weShbQUNfTEFOR19GVU5DX0xJTktfVFJZKCQ1KV0sIFtBQ19MQU5HX0ZVTkNfTElOS19UUlkoJDEpXSldCitbbTRfY29weShbQUNfTEFOR19CT09MX0NPTVBJTEVfVFJZKCQ1KV0sIFtBQ19MQU5HX0JPT0xfQ09NUElMRV9UUlkoJDEpXSldCitbbTRfY29weShbQUNfTEFOR19JTlRfU0FWRSgkNSldLCBbQUNfTEFOR19JTlRfU0FWRSgkMSldKV0KK1ttNF9jb3B5KFtfQUNfTEFOR19JT19QUk9HUkFNKCQ1KV0sIFtfQUNfTEFOR19JT19QUk9HUkFNKCQxKV0pXSldKQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgMi4gUHJvZHVjaW5nIHByb2dyYW1zLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBBQ19MQU5HX0NPTkZURVNUKEJPRFkpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2F2ZSB0aGUgQk9EWSBpbiBgY29uZnRlc3QuJGFjX2V4dCcuICBBZGQgYSB0cmFpbGluZyBuZXcgbGluZS4KK0FDX0RFRlVOKFtBQ19MQU5HX0NPTkZURVNUXSwKK1tfQUNfTEFOR19ESVNQQVRDSChbJDBdLCBfQUNfTEFORywgJEApXSkKKworCisjIEFDX0xBTkdfQ09ORlRFU1QoKShCT0RZKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBBQ19MQU5HX0NPTkZURVNULgorbTRfZGVmaW5lKFtBQ19MQU5HX0NPTkZURVNUKCldLAorW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyQxCitfQUNFT0ZdKQorCisKKyMgQUNfTEFOR19TT1VSQ0UoQk9EWSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBhIHZhbGlkIHNvdXJjZSBmb3IgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UsIHdoaWNoIGluY2x1ZGVzIHRoZQorIyBCT0RZLCBhbmQgYXMgbXVjaCBhcyBwb3NzaWJsZSBgY29uZmRlZnMuaCcuCitBQ19ERUZVTihbQUNfTEFOR19TT1VSQ0VdLAorW19BQ19MQU5HX0RJU1BBVENIKFskMF0sIF9BQ19MQU5HLCAkQCldKQorCisKKyMgQUNfTEFOR19TT1VSQ0UoKShCT0RZKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgQUNfTEFOR19TT1VSQ0UuCittNF9kZWZpbmUoW0FDX0xBTkdfU09VUkNFKCldLAorWyQxXSkKKworCisjIEFDX0xBTkdfUFJPR1JBTShbUFJPTE9HVUVdLCBbQk9EWV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgYSB2YWxpZCBzb3VyY2UgZm9yIHRoZSBjdXJyZW50IGxhbmd1YWdlLiAgUHJlcGVuZCB0aGUKKyMgUFJPTE9HVUUgKHR5cGljYWxseSBDUFAgZGlyZWN0aXZlcyBhbmQvb3IgZGVjbGFyYXRpb25zKSB0byBhbgorIyBleGVjdXRpb24gdGhlIEJPRFkgKHR5cGljYWxseSBnbHVlZCBpbnNpZGUgdGhlIGBtYWluJyBmdW5jdGlvbiwgb3IKKyMgZXF1aXZhbGVudCkuCitBQ19ERUZVTihbQUNfTEFOR19QUk9HUkFNXSwKK1tBQ19MQU5HX1NPVVJDRShbX0FDX0xBTkdfRElTUEFUQ0goWyQwXSwgX0FDX0xBTkcsICRAKV0pXSkKKworCisjIF9BQ19MQU5HX05VTExfUFJPR1JBTSgpKCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIEFDX0xBTkdfTlVMTF9QUk9HUkFNCittNF9kZWZpbmUoW19BQ19MQU5HX05VTExfUFJPR1JBTSgpXSwKK1tBQ19MQU5HX1BST0dSQU0oW10sIFtdKV0pCisKKworIyBfQUNfTEFOR19OVUxMX1BST0dSQU0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9kdWNlIHZhbGlkIHNvdXJjZSBmb3IgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgdGhhdCBkb2VzCisjIG5vdGhpbmcuCitBQ19ERUZVTihbX0FDX0xBTkdfTlVMTF9QUk9HUkFNXSwKK1tBQ19MQU5HX1NPVVJDRShbX0FDX0xBTkdfRElTUEFUQ0goWyQwXSwgX0FDX0xBTkcsICRAKV0pXSkKKworCisjIF9BQ19MQU5HX0lPX1BST0dSQU0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSB2YWxpZCBzb3VyY2UgZm9yIHRoZSBjdXJyZW50IGxhbmd1YWdlIHRoYXQgY3JlYXRlcworIyBhIGZpbGUuICAoVGhpcyBpcyB1c2VkIHdoZW4gZGV0ZWN0aW5nIHdoZXRoZXIgZXhlY3V0YWJsZXMKKyMgd29yaywgZS5nLiB0byBkZXRlY3QgY3Jvc3MtY29tcGlsaW5nLikKK0FDX0RFRlVOKFtfQUNfTEFOR19JT19QUk9HUkFNXSwKK1tBQ19MQU5HX1NPVVJDRShbX0FDX0xBTkdfRElTUEFUQ0goWyQwXSwgX0FDX0xBTkcsICRAKV0pXSkKKworCisjIEFDX0xBTkdfQ0FMTChQUk9MT0dVRSwgRlVOQ1RJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENhbGwgdGhlIEZVTkNUSU9OLgorQUNfREVGVU4oW0FDX0xBTkdfQ0FMTF0sCitbbTRfaWZ2YWwoWyQyXSwgW10sIFttNF93YXJuKFtzeW50YXhdLCBbJDA6IG5vIGZ1bmN0aW9uIGdpdmVuXSldKWRubAorX0FDX0xBTkdfRElTUEFUQ0goWyQwXSwgX0FDX0xBTkcsICRAKV0pCisKKworIyBBQ19MQU5HX0ZVTkNfTElOS19UUlkoRlVOQ1RJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBhIHNvdXJjZSB3aGljaCBsaW5rcyBjb3JyZWN0bHkgaWZmIHRoZSBGVU5DVElPTiBleGlzdHMuCitBQ19ERUZVTihbQUNfTEFOR19GVU5DX0xJTktfVFJZXSwKK1ttNF9pZnZhbChbJDFdLCBbXSwgW200X3dhcm4oW3N5bnRheF0sIFskMDogbm8gZnVuY3Rpb24gZ2l2ZW5dKV0pZG5sCitfQUNfTEFOR19ESVNQQVRDSChbJDBdLCBfQUNfTEFORywgJEApXSkKKworCisjIEFDX0xBTkdfQk9PTF9DT01QSUxFX1RSWShQUk9MT0dVRSwgRVhQUkVTU0lPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9kdWNlIGEgcHJvZ3JhbSB0aGF0IGNvbXBpbGVzIHdpdGggc3VjY2VzcyBpZmYgdGhlIGJvb2xlYW4gRVhQUkVTU0lPTgorIyBldmFsdWF0ZXMgdG8gdHJ1ZSBhdCBjb21waWxlIHRpbWUuCitBQ19ERUZVTihbQUNfTEFOR19CT09MX0NPTVBJTEVfVFJZXSwKK1tfQUNfTEFOR19ESVNQQVRDSChbJDBdLCBfQUNfTEFORywgJEApXSkKKworCisjIEFDX0xBTkdfSU5UX1NBVkUoUFJPTE9HVUUsIEVYUFJFU1NJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgYSBwcm9ncmFtIHRoYXQgc2F2ZXMgdGhlIHJ1bnRpbWUgZXZhbHVhdGlvbiBvZiB0aGUgaW50ZWdlcgorIyBFWFBSRVNTSU9OIGludG8gYGNvbmZ0ZXN0LnZhbCcuCitBQ19ERUZVTihbQUNfTEFOR19JTlRfU0FWRV0sCitbX0FDX0xBTkdfRElTUEFUQ0goWyQwXSwgX0FDX0xBTkcsICRAKV0pCisKKworIyBfQUNfQ0MKKyMgLS0tLS0tCisjIFRoZSB2YXJpYWJsZSBuYW1lIG9mIHRoZSBjb21waWxlci4KK200X2RlZmluZShbX0FDX0NDXSwKK1tfQUNfTEFOR19ESVNQQVRDSChbJDBdLCBfQUNfTEFORywgJEApXSkKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgMy4gTG9va2luZyBmb3IgQ29tcGlsZXJzIGFuZCBQcmVwcm9jZXNzb3JzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBBQ19MQU5HX0NPTVBJTEVSCisjIC0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZCBhIGNvbXBpbGVyIGZvciB0aGUgY3VycmVudCBMQU5HLiAgQmUgc3VyZSB0byBiZSBydW4gYmVmb3JlCisjIEFDX0xBTkdfUFJFUFJPQy4KKyMKKyMgTm90ZSB0aGF0IGJlY2F1c2Ugd2UgbWlnaHQgQUNfUkVRVUlSRSBgQUNfTEFOR19DT01QSUxFUihDKScgZm9yCisjIGluc3RhbmNlLCB0aGUgbGF0dGVyIG11c3QgYmUgQUNfREVGVU4nZCwgbm90IGp1c3QgZGVmaW5lJ2QuCittNF9kZWZpbmUoW0FDX0xBTkdfQ09NUElMRVJdLAorW0FDX0JFRk9SRShbQUNfTEFOR19DT01QSUxFUihdX0FDX0xBTkdbKV0sCisJICAgW0FDX0xBTkdfUFJFUFJPQyhdX0FDX0xBTkdbKV0pZG5sCitfQUNfTEFOR19ESVNQQVRDSChbJDBdLCBfQUNfTEFORywgJEApXSkKKworCisjIEFDX0xBTkdfQ09NUElMRVJfUkVRVUlSRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHdlIGhhdmUgYSBjb21waWxlciBmb3IgdGhlIGN1cnJlbnQgTEFORy4KK0FDX0RFRlVOKFtBQ19MQU5HX0NPTVBJTEVSX1JFUVVJUkVdLAorW200X3JlcXVpcmUoW0FDX0xBTkdfQ09NUElMRVIoXV9BQ19MQU5HWyldLAorCSAgICBbQUNfTEFOR19DT01QSUxFUl0pXSkKKworCisKKyMgX0FDX0xBTkdfQ09NUElMRVJfR05VCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIHRoZSBjb21waWxlciBmb3IgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgaXMgR05VLgorIworIyBJdCBkb2Vzbid0IHNlZW0gbmVjZXNzYXJ5IHJpZ2h0IG5vdyB0byBoYXZlIGEgZGlmZmVyZW50IHNvdXJjZQorIyBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgbGFuZ3VhZ2UsIHNpbmNlIHRoaXMgd29ya3MgZmluZS4gIFNvbWUgZGF5CisjIGl0IG1pZ2h0IGJlIG5lZWRlZC4gIE5ldmVydGhlbGVzcywgcGF5IGF0dGVudGlvbiB0byB0aGUgZmFjdCB0aGF0CisjIHRoZSBwb3NpdGlvbiBvZiBgY2hva2UgbWUnIG9uIHRoZSBzZXZlbnRoIGNvbHVtbiBpcyBtZWFudDogb3RoZXJ3aXNlCisjIHNvbWUgRm9ydHJhbiBjb21waWxlcnMgKGUuZy4sIFNHSSkgbWlnaHQgY29uc2lkZXIgaXQncyBhCisjIGNvbnRpbnVhdGlvbiBsaW5lLCBhbmQgd2FybiBpbnN0ZWFkIG9mIHJlcG9ydGluZyBhbiBlcnJvci4KK200X2RlZmluZShbX0FDX0xBTkdfQ09NUElMRVJfR05VXSwKK1tBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBfQUNfTEFORyBjb21waWxlcl0sCisJCVthY19jdl9bXV9BQ19MQU5HX0FCQlJFVltdX2NvbXBpbGVyX2dudV0sCitbX0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sIFtbI2lmbmRlZiBfX0dOVUNfXworICAgICAgIGNob2tlIG1lCisjZW5kaWYKK11dKV0sCisJCSAgIFthY19jb21waWxlcl9nbnU9eWVzXSwKKwkJICAgW2FjX2NvbXBpbGVyX2dudT1ub10pCithY19jdl9bXV9BQ19MQU5HX0FCQlJFVltdX2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251CitdKV0pIyBfQUNfTEFOR19DT01QSUxFUl9HTlUKKworCisjIEFDX0xBTkdfUFJFUFJPQworIyAtLS0tLS0tLS0tLS0tLS0KKyMgRmluZCBhIHByZXByb2Nlc3NvciBmb3IgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UuICBOb3RlIHRoYXQgYmVjYXVzZSB3ZQorIyBtaWdodCBBQ19SRVFVSVJFIGBBQ19MQU5HX1BSRVBST0MoQyknIGZvciBpbnN0YW5jZSwgdGhlIGxhdHRlciBtdXN0CisjIGJlIEFDX0RFRlVOJ2QsIG5vdCBqdXN0IGRlZmluZSdkLiAgU2luY2UgdGhlIHByZXByb2Nlc3NvciBkZXBlbmRzCisjIHVwb24gdGhlIGNvbXBpbGVyLCBsb29rIGZvciB0aGUgY29tcGlsZXIuCittNF9kZWZpbmUoW0FDX0xBTkdfUFJFUFJPQ10sCitbQUNfTEFOR19DT01QSUxFUl9SRVFVSVJFKClkbmwKK19BQ19MQU5HX0RJU1BBVENIKFskMF0sIF9BQ19MQU5HLCAkQCldKQorCisKKyMgQUNfTEFOR19QUkVQUk9DX1JFUVVJUkUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHdlIGhhdmUgYSBwcmVwcm9jZXNzb3IgZm9yIHRoZSBjdXJyZW50IGxhbmd1YWdlLgorQUNfREVGVU4oW0FDX0xBTkdfUFJFUFJPQ19SRVFVSVJFXSwKK1ttNF9yZXF1aXJlKFtBQ19MQU5HX1BSRVBST0MoXV9BQ19MQU5HWyldLAorCSAgICBbQUNfTEFOR19QUkVQUk9DXSldKQorCisKKyMgQUNfUkVRVUlSRV9DUFAKKyMgLS0tLS0tLS0tLS0tLS0KKyMgUmVxdWlyZSB0aGUgcHJlcHJvY2Vzc29yIGZvciB0aGUgY3VycmVudCBsYW5ndWFnZS4KKyMgRklYTUU6IEFVX0FMSUFTIG9uY2UgQUNfTEFORyBpcyBvZmZpY2lhbGx5IGRvY3VtZW50ZWQgKDIuNTE/KS4KK0FDX0RFRlVOKFtBQ19SRVFVSVJFX0NQUF0sCitbQUNfTEFOR19QUkVQUk9DX1JFUVVJUkVdKQorCisKKworIyBBQ19OT19FWEVDVVRBQkxFUworIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBGSVhNRTogVGhlIEdDQyB0ZWFtIGhhcyBzcGVjaWZpYyBuZWVkcyB3aGljaCB0aGUgY3VycmVudCBBdXRvY29uZgorIyBmcmFtZXdvcmsgY2Fubm90IHNvbHZlIGVsZWdhbnRseS4gIFRoaXMgbWFjcm8gaW1wbGVtZW50cyBhIGRpcnR5CisjIGhhY2sgdW50aWwgQXV0b2NvbmYgaXMgYWJsZSB0byBwcm92aWRlIHRoZSBzZXJ2aWNlcyBpdHMgdXNlcnMKKyMgbmVlZC4KKyMKKyMgU2V2ZXJhbCBvZiB0aGUgc3VwcG9ydCBsaWJyYXJpZXMgdGhhdCBhcmUgb2Z0ZW4gYnVpbHQgd2l0aCBHQ0MgY2FuJ3QKKyMgYXNzdW1lIHRoZSB0b29sLWNoYWluIGlzIGFscmVhZHkgY2FwYWJsZSBvZiBsaW5raW5nIGEgcHJvZ3JhbTogdGhlCisjIGNvbXBpbGVyIG9mdGVuIGV4cGVjdHMgdG8gYmUgYWJsZSB0byBsaW5rIHdpdGggc29tZSBvZiBzdWNoCisjIGxpYnJhcmllcy4KKyMKKyMgSW4gc2V2ZXJhbCBvZiB0aGVzZSBsaWJyYXJpZXMsIHdvcmthcm91bmRzIGhhdmUgYmVlbiBpbnRyb2R1Y2VkIHRvCisjIGF2b2lkIHRoZSBBQ19QUk9HX0NDX1dPUktTIHRlc3QsIHRoYXQgd291bGQganVzdCBhYm9ydCB0aGVpcgorIyBjb25maWd1cmF0aW9uLiAgVGhlIGludHJvZHVjdGlvbiBvZiBBQ19FWEVFWFQsIGVuYWJsZWQgZWl0aGVyIGJ5CisjIGxpYnRvb2wgb3IgYnkgQ1ZTIGF1dG9jb25mLCBoYXZlIGp1c3QgbWFkZSBtYXR0ZXJzIHdvcnNlLgorIworIyBVbmxpa2UgYW4gZWFybGllciB2ZXJzaW9uIG9mIHRoaXMgbWFjcm8sIHVzaW5nIEFDX05PX0VYRUNVVEFCTEVTIGRvZXMKKyMgbm90IGRpc2FibGUgbGluayB0ZXN0cyBhdCBhdXRvY29uZiB0aW1lLCBidXQgYXQgY29uZmlndXJlIHRpbWUuCisjIFRoaXMgYWxsb3dzIEFDX05PX0VYRUNVVEFCTEVTIHRvIGJlIGludm9rZWQgY29uZGl0aW9uYWxseS4KK0FDX0RFRlVOX09OQ0UoW0FDX05PX0VYRUNVVEFCTEVTXSwKK1ttNF9kaXZlcnRfcHVzaChbS0lMTF0pCittNF9kaXZlcnRfdGV4dChbREVGQVVMVFNdLCBbYWNfbm9fbGluaz1ub10pCisKK0FDX0JFRk9SRShbJDBdLCBbX0FDX0NPTVBJTEVSX0VYRUVYVF0pCitBQ19CRUZPUkUoWyQwXSwgW0FDX0xJTktfSUZFTFNFXSkKKworbTRfZGVmaW5lKFtfQUNfQ09NUElMRVJfRVhFRVhUXSwKK1tBQ19MQU5HX0NPTkZURVNUKFtfQUNfTEFOR19OVUxMX1BST0dSQU1dKQoraWYgX0FDX0RPX1ZBUihhY19saW5rKTsgdGhlbgorICBhY19ub19saW5rPW5vCisgIF1tNF9kZWZuKFtfQUNfQ09NUElMRVJfRVhFRVhUXSlbCitlbHNlCisgIHJtIC1mIC1yIGEub3V0IGEuZXhlIGIub3V0IGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QubyBjb25mdGVzdC5vYmogY29uZnRlc3QuZFNZTQorICBhY19ub19saW5rPXllcworICAjIFNldHRpbmcgY3Jvc3NfY29tcGlsZSB3aWxsIGRpc2FibGUgcnVuIHRlc3RzOyBpdCB3aWxsCisgICMgYWxzbyBkaXNhYmxlIEFDX0NIRUNLX0ZJTEUgYnV0IHRoYXQncyBnZW5lcmFsbHkKKyAgIyBjb3JyZWN0IGlmIHdlIGNhbid0IGxpbmsuCisgIGNyb3NzX2NvbXBpbGluZz15ZXMKKyAgRVhFRVhUPQorICBfQUNfQ09NUElMRVJfRVhFRVhUX0NST1NTCitmaQorXSkKKworbTRfZGVmaW5lKFtBQ19MSU5LX0lGRUxTRV0sCitbaWYgdGVzdCB4JGFjX25vX2xpbmsgPSB4eWVzOyB0aGVuCisgIEFDX01TR19FUlJPUihbbGluayB0ZXN0cyBhcmUgbm90IGFsbG93ZWQgYWZ0ZXIgQUNAJnRAX05PX0VYRUNVVEFCTEVTXSkKK2ZpCitdbTRfZGVmbihbQUNfTElOS19JRkVMU0VdKSkKKworbTRfZGl2ZXJ0X3BvcCgpZG5sCitdKSMgQUNfTk9fRVhFQ1VUQUJMRVMKKworCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKyMgM2EuIENvbXB1dGluZyBFWEVFWFQgYW5kIE9CSkVYVC4gICMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKworCisjIEZpbGVzIHRvIGlnbm9yZQorIyAtLS0tLS0tLS0tLS0tLS0KKyMgSWdub3JlIC5kIGZpbGVzIHByb2R1Y2VkIGJ5IENGTEFHUz0tTUQuCisjCisjIE9uIFVXSU4gKHdoaWNoIHVzZXMgYSBjYyB3cmFwcGVyIGZvciBNU1ZDKSwgdGhlIGNvbXBpbGVyIGFsc28gZ2VuZXJhdGVzCisjIGEgLnBkYiBmaWxlCisjCisjIFdoZW4gdGhlIHczMiBmcmVlIEJvcmxhbmQgQysrIGNvbW1hbmQgbGluZSBjb21waWxlciBsaW5rcyBhIHByb2dyYW0KKyMgKGNvbmZ0ZXN0LmV4ZSksIGl0IGFsc28gcHJvZHVjZXMgYSBmaWxlIG5hbWVkIGBjb25mdGVzdC50ZHMnIGluCisjIGFkZGl0aW9uIHRvIGBjb25mdGVzdC5vYmonLgorIworIyAtICouYmIsICouYmJnCisjICAgQ3JlYXRlZCBwZXIgb2JqZWN0IGJ5IEdDQyB3aGVuIGdpdmVuIC1mdGVzdC1jb3ZlcmFnZS4KKyMKKyMgLSAqLnhTWU0KKyMgICBDcmVhdGVkIG9uIEJlT1MuICBTZWVtcyB0byBiZSBwZXIgZXhlY3V0YWJsZS4KKyMKKyMgLSAqLm1hcCwgKi5pbmYKKyMgICBDcmVhdGVkIGJ5IHRoZSBHcmVlbiBIaWxscyBjb21waWxlci4KKyMKKyMgLSAqLmRTWU0KKyMgICBEaXJlY3RvcnkgY3JlYXRlZCBvbiBNYWMgT1MgWCBMZW9wYXJkLgorCisKKyMgX0FDX0NPTVBJTEVSX09CSkVYVF9SRUpFQ1QKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2FzZS9lc2FjIHBhdHRlcm4gbWF0Y2hpbmcgdGhlIGZpbGVzIHRvIGJlIGlnbm9yZWQgd2hlbiBsb29raW5nIGZvcgorIyBjb21waWxlZCBvYmplY3QgZmlsZXMuCittNF9kZWZpbmUoW19BQ19DT01QSUxFUl9PQkpFWFRfUkVKRUNUXSwKK1sqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU1dKQorCisKKyMgX0FDX0NPTVBJTEVSX0VYRUVYVF9SRUpFQ1QKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2FzZS9lc2FjIHBhdHRlcm4gbWF0Y2hpbmcgdGhlIGZpbGVzIHRvIGJlIGlnbm9yZWQgd2hlbiBsb29raW5nIGZvcgorIyBjb21waWxlZCBleGVjdXRhYmxlcy4KK200X2RlZmluZShbX0FDX0NPTVBJTEVSX0VYRUVYVF9SRUpFQ1RdLAorW19BQ19DT01QSUxFUl9PQkpFWFRfUkVKRUNUIHwgKi5vIHwgKi5vYmpdKQorCisKKyMgV2UgbXVzdCBub3QgQVUgZGVmaW5lIHRoZW0sIGJlY2F1c2UgYXV0b3VwZGF0ZSB3b3VsZCB0aGVuIHJlbW92ZQorIyB0aGVtLCB3aGljaCBpcyByaWdodCwgYnV0IEF1dG9tYWtlIDEuNCB3b3VsZCByZW1vdmUgdGhlIHN1cHBvcnQgZm9yCisjICQoRVhFRVhUKSBldGMuCisjIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIEF1dG9tYWtlIGZpeGVkLgorQUNfREVGVU4oW0FDX0VYRUVYVF0sICAgW10pCitBQ19ERUZVTihbQUNfT0JKRVhUXSwgICBbXSkKKworCisjIF9BQ19DT01QSUxFUl9FWEVFWFRfREVGQVVMVAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIHRoZSBleHRlbnNpb24gdXNlZCBmb3IgdGhlIGRlZmF1bHQgbmFtZSBmb3IgZXhlY3V0YWJsZXMuCisjCisjIFdlIGRvIHRoaXMgaW4gb3JkZXIgdG8gZmluZCBvdXQgd2hhdCBpcyB0aGUgZXh0ZW5zaW9uIHdlIG11c3QgYWRkIGZvcgorIyBjcmVhdGluZyBleGVjdXRhYmxlcyAoc2VlIF9BQ19DT01QSUxFUl9FWEVFWFQncyBjb21tZW50cykuCisjCisjIE9uIE9wZW5WTVMgNy4xIHN5c3RlbSwgdGhlIERFQyBDIDUuNSBjb21waWxlciB3aGVuIGNhbGxlZCB0aHJvdWdoIGEKKyMgR05WIChnbnYuc291cmNlZm9yZ2UubmV0KSBjYyB3cmFwcGVyLCBwcm9kdWNlcyB0aGUgb3V0cHV0IGZpbGUgbmFtZWQKKyMgYGFfb3V0LmV4ZScuCisjIGIub3V0IGlzIGNyZWF0ZWQgYnkgaTk2MCBjb21waWxlcnMuCisjCisjIFN0YXJ0IHdpdGggdGhlIG1vc3QgbGlrZWx5IG91dHB1dCBmaWxlIG5hbWVzLCBidXQ6CisjIDEpIEJld2FyZSB0aGUgY2xldmVyIGB0ZXN0IC1mJyBvbiBDeWd3aW4sIHRyeSB0aGUgRE9TLWxpa2UgLmV4ZSBuYW1lcworIyBiZWZvcmUgdGhlIGNvdW50ZXJwYXJ0cyB3aXRob3V0IHRoZSBleHRlbnNpb24uCisjIDIpIFRoZSBhbGdvcml0aG0gaXMgbm90IHJvYnVzdCB0byBqdW5rIGluIGAuJywgaGVuY2UgZ28gdG8gd2lsZGNhcmRzCisjIChjb25mdGVzdC4qKSBvbmx5IGFzIGEgbGFzdCByZXNvcnQuCisjIEJld2FyZSBvZiBgZXhwcicgdGhhdCBtYXkgcmV0dXJuIGAwJyBvciBgJy4gIFNpbmNlIHRoaXMgbWFjcm8gaXMKKyMgdGhlIGZpcnN0IG9uZSBpbiB0b3VjaCB3aXRoIHRoZSBjb21waWxlciwgaXQgc2hvdWxkIGFsc28gY2hlY2sgdGhhdAorIyBpdCBjb21waWxlcyBwcm9wZXJseS4KKyMKKyMgVGhlIElSSVggNiBsaW5rZXIgd3JpdGVzIGludG8gZXhpc3RpbmcgZmlsZXMgd2hpY2ggbWF5IG5vdCBiZQorIyBleGVjdXRhYmxlLCByZXRhaW5pbmcgdGhlaXIgcGVybWlzc2lvbnMuICBSZW1vdmUgdGhlbSBmaXJzdCBzbyBhCisjIHN1YnNlcXVlbnQgZXhlY3V0aW9uIHRlc3Qgd29ya3MuCisjCittNF9kZWZpbmUoW19BQ19DT01QSUxFUl9FWEVFWFRfREVGQVVMVF0sCitbIyBUcnkgdG8gY3JlYXRlIGFuIGV4ZWN1dGFibGUgd2l0aG91dCAtbyBmaXJzdCwgZGlzcmVnYXJkIGEub3V0LgorIyBJdCB3aWxsIGhlbHAgdXMgZGlhZ25vc2UgYnJva2VuIGNvbXBpbGVycywgYW5kIGZpbmRpbmcgb3V0IGFuIGludHVpdGlvbgorIyBvZiBleGVleHQuCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIF9BQ19MQU5HIGNvbXBpbGVyIHdvcmtzXSkKK2FjX2xpbmtfZGVmYXVsdD1gQVNfRUNITyhbIiRhY19saW5rIl0pIHwgc2VkIFsncy8gLW8gKmNvbmZ0ZXN0W14gXSovLyddYAorCisjIFRoZSBwb3NzaWJsZSBvdXRwdXQgZmlsZXM6CithY19maWxlcz0iYS5vdXQgY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGEuZXhlIGFfb3V0LmV4ZSBiLm91dCBjb25mdGVzdC4qIgorCithY19ybWZpbGVzPQorZm9yIGFjX2ZpbGUgaW4gJGFjX2ZpbGVzCitkbworICBjYXNlICRhY19maWxlIGluCisgICAgX0FDX0NPTVBJTEVSX0VYRUVYVF9SRUpFQ1QgKSA7OworICAgICogKSBhY19ybWZpbGVzPSIkYWNfcm1maWxlcyAkYWNfZmlsZSI7OworICBlc2FjCitkb25lCitybSAtZiAkYWNfcm1maWxlcworCitBU19JRihbX0FDX0RPX1ZBUihhY19saW5rX2RlZmF1bHQpXSwKK1sjIEF1dG9jb25mLTIuMTMgY291bGQgc2V0IHRoZSBhY19jdl9leGVleHQgdmFyaWFibGUgdG8gYG5vJy4KKyMgU28gaWdub3JlIGEgdmFsdWUgb2YgYG5vJywgb3RoZXJ3aXNlIHRoaXMgd291bGQgbGVhZCB0byBgRVhFRVhUID0gbm8nCisjIGluIGEgTWFrZWZpbGUuICBXZSBzaG91bGQgbm90IG92ZXJyaWRlIGFjX2N2X2V4ZWV4dCBpZiBpdCB3YXMgY2FjaGVkLAorIyBzbyB0aGF0IHRoZSB1c2VyIGNhbiBzaG9ydC1jaXJjdWl0IHRoaXMgdGVzdCBmb3IgY29tcGlsZXJzIHVua25vd24gdG8KKyMgQXV0b2NvbmYuCitmb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMgJycKK2RvCisgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQorICBjYXNlICRhY19maWxlIGluCisgICAgX0FDX0NPTVBJTEVSX0VYRUVYVF9SRUpFQ1QgKQorCTs7CisgICAgW1thYl1dLm91dCApCisJIyBXZSBmb3VuZCB0aGUgZGVmYXVsdCBleGVjdXRhYmxlLCBidXQgZXhlZXh0PScnIGlzIG1vc3QKKwkjIGNlcnRhaW5seSByaWdodC4KKwlicmVhazs7CisgICAgKi4qICkKKwlpZiB0ZXN0ICIke2FjX2N2X2V4ZWV4dCtzZXR9IiA9IHNldCAmJiB0ZXN0ICIkYWNfY3ZfZXhlZXh0IiAhPSBubzsKKwl0aGVuIDo7IGVsc2UKKwkgICBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6IFsnW14uXSpcKFwuLipcKSddYAorCWZpCisJIyBXZSBzZXQgYWNfY3ZfZXhlZXh0IGhlcmUgYmVjYXVzZSB0aGUgbGF0ZXIgdGVzdCBmb3IgaXQgaXMgbm90CisJIyBzYWZlOiBjcm9zcyBjb21waWxlcnMgbWF5IG5vdCBhZGQgdGhlIHN1ZmZpeCBpZiBnaXZlbiBhbiBgLW8nCisJIyBhcmd1bWVudCwgc28gd2UgbWF5IG5lZWQgdG8ga25vdyBpdCBhdCB0aGF0IHBvaW50IGFscmVhZHkuCisJIyBFdmVuIGlmIHRoaXMgc2VjdGlvbiBsb29rcyBjcnVmdHk6IGl0IGhhcyB0aGUgYWR2YW50YWdlIG9mCisJIyBhY3R1YWxseSB3b3JraW5nLgorCWJyZWFrOzsKKyAgICAqICkKKwlicmVhazs7CisgIGVzYWMKK2RvbmUKK3Rlc3QgIiRhY19jdl9leGVleHQiID0gbm8gJiYgYWNfY3ZfZXhlZXh0PQorXSwKKyAgICAgIFthY19maWxlPScnXSkKK0FTX0lGKFt0ZXN0IC16ICIkYWNfZmlsZSJdLAorW0FDX01TR19SRVNVTFQoW25vXSkKK19BQ19NU0dfTE9HX0NPTkZURVNUCitBQ19NU0dfRkFJTFVSRShbX0FDX0xBTkcgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlc10sIDc3KV0sCitbQUNfTVNHX1JFU1VMVChbeWVzXSldKQorQUNfTVNHX0NIRUNLSU5HKFtmb3IgX0FDX0xBTkcgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lXSkKK0FDX01TR19SRVNVTFQoWyRhY19maWxlXSkKK2FjX2V4ZWV4dD0kYWNfY3ZfZXhlZXh0CitdKSMgX0FDX0NPTVBJTEVSX0VYRUVYVF9ERUZBVUxUCisKKworIyBfQUNfQ09NUElMRVJfRVhFRVhUX0NST1NTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRklYTUU6IFRoZXNlIGNyb3NzIGNvbXBpbGVyIGhhY2tzIHNob3VsZCBiZSByZW1vdmVkIGZvciBBdXRvY29uZiAzLjAKKyMKKyMgSXQgaXMgbm90IHN1ZmZpY2llbnQgdG8gcnVuIGEgbm8tb3AgcHJvZ3JhbSAtLSB0aGlzIHN1Y2NlZWRzIGFuZCBnaXZlcworIyBhIGZhbHNlIG5lZ2F0aXZlIHdoZW4gY3Jvc3MtY29tcGlsaW5nIGZvciB0aGUgY29tcHV0ZSBub2RlcyBvbiB0aGUKKyMgSUJNIEJsdWUgR2VuZS9MLiAgSW5zdGVhZCwgX0FDX0NPTVBJTEVSX0VYRUVYVCBjYWxscyBfQUNfTEFOR19JT19QUk9HUkFNCisjIHRvIGNyZWF0ZSBhIHByb2dyYW0gdGhhdCB3cml0ZXMgdG8gYSBmaWxlLCB3aGljaCBpcyBzdWZmaWNpZW50IHRvCisjIGRldGVjdCBjcm9zcy1jb21waWxpbmcgb24gQmx1ZSBHZW5lLiAgTm90ZSBhbHNvIHRoYXQgQUNfQ09NUFVURV9JTlQKKyMgcmVxdWlyZXMgcHJvZ3JhbXMgdGhhdCBjcmVhdGUgZmlsZXMgd2hlbiBub3QgY3Jvc3MtY29tcGlsaW5nLCBzbyBpdAorIyBpcyBzYWZlIGFuZCBub3QgYSBiYWQgaWRlYSB0byBjaGVjayBmb3IgdGhpcyBjYXBhYmlsaXR5IGluIGdlbmVyYWwuCittNF9kZWZpbmUoW19BQ19DT01QSUxFUl9FWEVFWFRfQ1JPU1NdLAorWyMgQ2hlY2sgdGhhdCB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCisjIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZ10pCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSB5ZXM7IHRoZW4KKyAgX0FDX0RPX1ZBUihhY19saW5rKQorICBpZiBfQUNfRE9fVE9LRU5TKFsuL2NvbmZ0ZXN0JGFjX2N2X2V4ZWV4dF0pOyB0aGVuCisgICAgY3Jvc3NfY29tcGlsaW5nPW5vCisgIGVsc2UKKyAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG1heWJlOyB0aGVuCisJY3Jvc3NfY29tcGlsaW5nPXllcworICAgIGVsc2UKKwlBQ19NU0dfRkFJTFVSRShbY2Fubm90IHJ1biBfQUNfTEFORyBjb21waWxlZCBwcm9ncmFtcy4KK0lmIHlvdSBtZWFudCB0byBjcm9zcyBjb21waWxlLCB1c2UgYC0taG9zdCcuXSkKKyAgICBmaQorICBmaQorZmkKK0FDX01TR19SRVNVTFQoWyRjcm9zc19jb21waWxpbmddKQorXSkjIF9BQ19DT01QSUxFUl9FWEVFWFRfQ1JPU1MKKworCisjIF9BQ19DT01QSUxFUl9FWEVFWFRfTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIHRoZSBleHRlbnNpb24gdXNlZCB3aGVuIGAtbyBmb28nLiAgVHJ5IHRvIHNlZSBpZiBhY19jdl9leGVleHQsCisjIGFzIGNvbXB1dGVkIGJ5IF9BQ19DT01QSUxFUl9FWEVFWFRfREVGQVVMVCBpcyBPSy4KK200X2RlZmluZShbX0FDX0NPTVBJTEVSX0VYRUVYVF9PXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXNdKQorQVNfSUYoW19BQ19ET19WQVIoYWNfbGluayldLAorWyMgSWYgYm90aCBgY29uZnRlc3QuZXhlJyBhbmQgYGNvbmZ0ZXN0JyBhcmUgYHByZXNlbnQnICh3ZWxsLCBvYnNlcnZhYmxlKQorIyBjYXRjaCBgY29uZnRlc3QuZXhlJy4gIEZvciBpbnN0YW5jZSB3aXRoIEN5Z3dpbiwgYGxzIGNvbmZ0ZXN0JyB3aWxsCisjIHdvcmsgcHJvcGVybHkgKGkuZS4sIHJlZmVyIHRvIGBjb25mdGVzdC5leGUnKSwgd2hpbGUgaXQgd29uJ3Qgd2l0aAorIyBgcm0nLgorZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGNvbmZ0ZXN0Lio7IGRvCisgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQorICBjYXNlICRhY19maWxlIGluCisgICAgX0FDX0NPTVBJTEVSX0VYRUVYVF9SRUpFQ1QgKSA7OworICAgICouKiApIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogWydbXi5dKlwoXC4uKlwpJ11gCisJICBicmVhazs7CisgICAgKiApIGJyZWFrOzsKKyAgZXNhYworZG9uZV0sCisJICAgICAgW0FDX01TR19GQUlMVVJFKFtjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2YgZXhlY3V0YWJsZXM6IGNhbm5vdCBjb21waWxlIGFuZCBsaW5rXSldKQorcm0gLWYgY29uZnRlc3QgY29uZnRlc3QkYWNfY3ZfZXhlZXh0CitBQ19NU0dfUkVTVUxUKFskYWNfY3ZfZXhlZXh0XSkKK10pIyBfQUNfQ09NUElMRVJfRVhFRVhUX08KKworCisjIF9BQ19DT01QSUxFUl9FWEVFWFQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBmb3IgdGhlIGV4dGVuc2lvbiB1c2VkIGZvciBleGVjdXRhYmxlcy4gIEl0IGNvbXBpbGVzIGEgdGVzdAorIyBleGVjdXRhYmxlLiAgSWYgdGhpcyBpcyBjYWxsZWQsIHRoZSBleGVjdXRhYmxlIGV4dGVuc2lvbnMgd2lsbCBiZQorIyBhdXRvbWF0aWNhbGx5IHVzZWQgYnkgbGluayBjb21tYW5kcyBydW4gYnkgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisjCisjIE5vdGUgdGhhdCBzb21lIGNvbXBpbGVycyAoY3Jvc3Mgb3Igbm90KSwgc3RyaWN0bHkgb2JleSB0byBgLW8gZm9vJyB3aGlsZQorIyB0aGUgaG9zdCByZXF1aXJlcyBgZm9vLmV4ZScsIHNvIHdlIHNob3VsZCBub3QgZGVwZW5kIHVwb24gYC1vJyB0bworIyB0ZXN0IEVYRUVYVC4gIEJ1dCB0aGVuLCBiZSBzdXJlIG5vdCB0byBkZXN0cm95IHVzZXIgZmlsZXMuCisjCisjIE11c3QgYmUgcnVuIGJlZm9yZSBfQUNfQ09NUElMRVJfT0JKRVhUIGJlY2F1c2UgX0FDX0NPTVBJTEVSX0VYRUVYVF9ERUZBVUxUCisjIGNoZWNrcyB3aGV0aGVyIHRoZSBjb21waWxlciB3b3Jrcy4KKyMKKyMgRG8gbm90IHJlbmFtZSB0aGlzIG1hY3JvOyBBdXRvbWFrZSBkZWNpZGVzIHdoZXRoZXIgRVhFRVhUIGlzIHVzZWQKKyMgYnkgY2hlY2tpbmcgd2hldGhlciBgX0FDX0NPTVBJTEVSX0VYRUVYVCcgaGFzIGJlZW4gZXhwYW5kZWQuCisjCisjIFNlZSBfQUNfQ09NUElMRVJfRVhFRVhUX0NST1NTIGZvciB3aHkgd2UgbmVlZCBfQUNfTEFOR19JT19QUk9HUkFNLgorbTRfZGVmaW5lKFtfQUNfQ09NUElMRVJfRVhFRVhUXSwKK1tBQ19MQU5HX0NPTkZURVNUKFtfQUNfTEFOR19OVUxMX1BST0dSQU1dKQorYWNfY2xlYW5fZmlsZXNfc2F2ZT0kYWNfY2xlYW5fZmlsZXMKK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgYS5vdXQgYS5vdXQuZFNZTSBhLmV4ZSBiLm91dCIKK19BQ19DT01QSUxFUl9FWEVFWFRfREVGQVVMVAorcm0gLWYgLXIgYS5vdXQgYS5vdXQuZFNZTSBhLmV4ZSBjb25mdGVzdCRhY19jdl9leGVleHQgYi5vdXQKK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCitfQUNfQ09NUElMRVJfRVhFRVhUX08KK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQKK0FDX1NVQlNUKFtFWEVFWFRdLCBbJGFjX2N2X2V4ZWV4dF0pZG5sCithY19leGVleHQ9JEVYRUVYVAorQUNfTEFOR19DT05GVEVTVChbX0FDX0xBTkdfSU9fUFJPR1JBTV0pCithY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzIGNvbmZ0ZXN0Lm91dCIKK19BQ19DT01QSUxFUl9FWEVFWFRfQ1JPU1MKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGNvbmZ0ZXN0Lm91dAorYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKK10pIyBfQUNfQ09NUElMRVJfRVhFRVhUCisKKworIyBfQUNfQ09NUElMRVJfT0JKRVhUCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdGhlIG9iamVjdCBleHRlbnNpb24gdXNlZCBieSB0aGUgY29tcGlsZXI6IHR5cGljYWxseSBgLm8nIG9yCisjIGAub2JqJy4gIElmIHRoaXMgaXMgY2FsbGVkLCBzb21lIG90aGVyIGJlaGF2aW9yIHdpbGwgY2hhbmdlLAorIyBkZXRlcm1pbmVkIGJ5IGFjX29iamV4dC4KKyMKKyMgVGhpcyBtYWNybyBpcyBjYWxsZWQgYnkgQUNfTEFOR19DT01QSUxFUiwgdGhlIGxhdHRlciBiZWluZyByZXF1aXJlZAorIyBieSB0aGUgQUNfQ09NUElMRV9JRkVMU0UgbWFjcm9zLCBzbyB1c2UgX0FDX0NPTVBJTEVfSUZFTFNFLiAgQW5kIGluIGZhY3QsCisjIGRvbid0LCBzaW5jZSBfQUNfQ09NUElMRV9JRkVMU0UgbmVlZHMgdG8ga25vdyBhY19vYmpleHQgZm9yIHRoZSBgdGVzdCAtcycKKyMgaXQgaW5jbHVkZXMuICBTbyBkbyBpdCBieSBoYW5kLgorbTRfZGVmaW5lKFtfQUNfQ09NUElMRVJfT0JKRVhUXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXNdLCBhY19jdl9vYmpleHQsCitbQUNfTEFOR19DT05GVEVTVChbX0FDX0xBTkdfTlVMTF9QUk9HUkFNXSkKK3JtIC1mIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqCitBU19JRihbX0FDX0RPX1ZBUihhY19jb21waWxlKV0sCitbZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QubyBjb25mdGVzdC5vYmogY29uZnRlc3QuKjsgZG8KKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlOworICBjYXNlICRhY19maWxlIGluCisgICAgX0FDX0NPTVBJTEVSX09CSkVYVF9SRUpFQ1QgKSA7OworICAgICopIGFjX2N2X29iamV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJy4qXC5cKC4qXCknYAorICAgICAgIGJyZWFrOzsKKyAgZXNhYworZG9uZV0sCisgICAgICBbX0FDX01TR19MT0dfQ09ORlRFU1QKK0FDX01TR19GQUlMVVJFKFtjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZV0pXSkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19jdl9vYmpleHQgY29uZnRlc3QuJGFjX2V4dF0pCitBQ19TVUJTVChbT0JKRVhUXSwgWyRhY19jdl9vYmpleHRdKWRubAorYWNfb2JqZXh0PSRPQkpFWFQKK10pIyBfQUNfQ09NUElMRVJfT0JKRVhUCisKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIDQuIENvbXBpbGVycycgY2hhcmFjdGVyaXN0aWNzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBBQ19MQU5HX1dFUlJPUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJlYXQgd2FybmluZ3MgZnJvbSB0aGUgY3VycmVudCBsYW5ndWFnZSdzIHByZXByb2Nlc3NvciwgY29tcGlsZXIsIGFuZAorIyBsaW5rZXIgYXMgZmF0YWwgZXJyb3JzLgorQUNfREVGVU4oW0FDX0xBTkdfV0VSUk9SXSwKK1ttNF9kaXZlcnRfdGV4dChbREVGQVVMVFNdLCBbYWNfW11fQUNfTEFOR19BQkJSRVZbXV93ZXJyb3JfZmxhZz1dKQorYWNfW11fQUNfTEFOR19BQkJSRVZbXV93ZXJyb3JfZmxhZz15ZXNdKSMgQUNfTEFOR19XRVJST1IKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9jb25mL2F1dG9jb25mL2xpYnMubTQgYi9zaGFyZS9hdXRvY29uZi9hdXRvY29uZi9saWJzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NjNhZjQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvY29uZi9hdXRvY29uZi9saWJzLm00CkBAIC0wLDAgKzEsNDc5IEBACisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEF1dG9jb25mLiAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyBDaGVja2luZyBmb3IgbGlicmFyaWVzLgorIyBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisjIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQXV0b2NvbmYuICBUaGlzIHByb2dyYW0gaXMgZnJlZQorIyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKyMgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKyMgcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBBdXRvY29uZiBDb25maWd1cmUgU2NyaXB0IEV4Y2VwdGlvbiwKKyMgdmVyc2lvbiAzLjAsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbmQgYSBjb3B5IG9mIHRoZSBBdXRvY29uZiBDb25maWd1cmUgU2NyaXB0IEV4Y2VwdGlvbiBhbG9uZyB3aXRoCisjIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlcyBDT1BZSU5HdjMgYW5kIENPUFlJTkcuRVhDRVBUSU9OCisjIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBXcml0dGVuIGJ5IERhdmlkIE1hY0tlbnppZSwgd2l0aCBoZWxwIGZyb20KKyMgRnJhbmMsb2lzIFBpbmFyZCwgS2FybCBCZXJyeSwgUmljaGFyZCBQaXhsZXksIElhbiBMYW5jZSBUYXlsb3IsCisjIFJvbGFuZCBNY0dyYXRoLCBOb2FoIEZyaWVkbWFuLCBkYXZpZCBkIHp1aG4sIGFuZCBtYW55IG90aGVycy4KKworIyBUYWJsZSBvZiBjb250ZW50cworIworIyAxLiBHZW5lcmljIHRlc3RzIGZvciBsaWJyYXJpZXMKKyMgMi4gVGVzdHMgZm9yIHNwZWNpZmljIGxpYnJhcmllcworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgMS4gR2VuZXJpYyB0ZXN0cyBmb3IgbGlicmFyaWVzLiMjICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisKKyMgQUNfU0VBUkNIX0xJQlMoRlVOQ1RJT04sIFNFQVJDSC1MSUJTLAorIyAgICAgICAgICAgICAgICBbQUNUSU9OLUlGLUZPVU5EXSwgW0FDVElPTi1JRi1OT1QtRk9VTkRdLAorIyAgICAgICAgICAgICAgICBbT1RIRVItTElCUkFSSUVTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VhcmNoIGZvciBhIGxpYnJhcnkgZGVmaW5pbmcgRlVOQywgaWYgaXQncyBub3QgYWxyZWFkeSBhdmFpbGFibGUuCitBQ19ERUZVTihbQUNfU0VBUkNIX0xJQlNdLAorW0FTX1ZBUl9QVVNIREVGKFthY19TZWFyY2hdLCBbYWNfY3Zfc2VhcmNoXyQxXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgbGlicmFyeSBjb250YWluaW5nICQxXSwgW2FjX1NlYXJjaF0sCitbYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCitBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX0NBTEwoW10sIFskMV0pXSkKK2ZvciBhY19saWIgaW4gJycgJDI7IGRvCisgIGlmIHRlc3QgLXogIiRhY19saWIiOyB0aGVuCisgICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIgorICBlbHNlCisgICAgYWNfcmVzPS1sJGFjX2xpYgorICAgIExJQlM9Ii1sJGFjX2xpYiAkNSAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorICBmaQorICBBQ19MSU5LX0lGRUxTRShbXSwgW0FTX1ZBUl9TRVQoW2FjX1NlYXJjaF0sIFskYWNfcmVzXSldKQorICBBU19WQVJfU0VUX0lGKFthY19TZWFyY2hdLCBbYnJlYWtdKQorZG9uZQorQVNfVkFSX1NFVF9JRihbYWNfU2VhcmNoXSwgLCBbQVNfVkFSX1NFVChbYWNfU2VhcmNoXSwgW25vXSldKQorcm0gY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTXSkKK0FTX1ZBUl9DT1BZKFthY19yZXNdLCBbYWNfU2VhcmNoXSkKK0FTX0lGKFt0ZXN0ICIkYWNfcmVzIiAhPSBub10sCisgIFt0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfcmVzICRMSUJTIgorICAkM10sCisgICAgICBbJDRdKQorQVNfVkFSX1BPUERFRihbYWNfU2VhcmNoXSlkbmwKK10pCisKKworCisjIEFDX0NIRUNLX0xJQihMSUJSQVJZLCBGVU5DVElPTiwKKyMgICAgICAgICAgICAgIFtBQ1RJT04tSUYtRk9VTkRdLCBbQUNUSU9OLUlGLU5PVC1GT1VORF0sCisjICAgICAgICAgICAgICBbT1RIRVItTElCUkFSSUVTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIFVzZSBhIGNhY2hlIHZhcmlhYmxlIG5hbWUgY29udGFpbmluZyBib3RoIHRoZSBsaWJyYXJ5IGFuZCBmdW5jdGlvbiBuYW1lLAorIyBiZWNhdXNlIHRoZSB0ZXN0IHJlYWxseSBpcyBmb3IgbGlicmFyeSAkMSBkZWZpbmluZyBmdW5jdGlvbiAkMiwgbm90CisjIGp1c3QgZm9yIGxpYnJhcnkgJDEuICBTZXBhcmF0ZSB0ZXN0cyB3aXRoIHRoZSBzYW1lICQxIGFuZCBkaWZmZXJlbnQgJDJzCisjIG1heSBoYXZlIGRpZmZlcmVudCByZXN1bHRzLgorIworIyBOb3RlIHRoYXQgdXNpbmcgZGlyZWN0bHkgQVNfVkFSX1BVU0hERUYoW2FjX0xpYl0sIFthY19jdl9saWJfJDFfJDJdKQorIyBpcyBhc2tpbmcgZm9yIHRyb3VibGVzLCBzaW5jZSBBQ19DSEVDS19MSUIoJGxpYiwgZnVuKSB3b3VsZCBnaXZlCisjIGFjX2N2X2xpYl8kbGliX2Z1biwgd2hpY2ggaXMgZGVmaW5pdGVseSBub3Qgd2hhdCB3YXMgbWVhbnQuICBIZW5jZQorIyB0aGUgQVNfTElURVJBTF9JRiBpbmRpcmVjdGlvbi4KKyMKKyMgRklYTUU6IFRoaXMgbWFjcm8gaXMgZXh0cmVtZWx5IHN1c3BpY2lvdXMuICBJdCBERUZJTkVzIHVuY29uZGl0aW9uYWxseSwKKyMgd2hhdGV2ZXIgdGhlIEZVTkNUSU9OLCBpbiBhZGRpdGlvbiB0byBub3QgYmVpbmcgYSAqUyBtYWNyby4gIE5vdGUKKyMgdGhhdCB0aGUgY2FjaGUgZG9lcyBkZXBlbmQgdXBvbiB0aGUgZnVuY3Rpb24gd2UgYXJlIGxvb2tpbmcgZm9yLgorIworIyBJdCBpcyBvbiBwdXJwb3NlIHdlIHVzZWQgYGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMnIGFuZCBub3QganVzdAorIyBgYWNfc2F2ZV9MSUJTJzogdGhlcmUgYXJlIG1hbnkgbWFjcm9zIHdoaWNoIGRvbid0IHdhbnQgdG8gc2VlIGBMSUJTJworIyBjaGFuZ2VkIGJ1dCBzdGlsbCB3YW50IHRvIHVzZSBBQ19DSEVDS19MSUIsIHNvIHRoZXkgc2F2ZSBgTElCUycuCisjIEFuZCBgYGFjX3NhdmVfTElCUycgaXMgdG9vIHRlbXB0aW5nIGEgbmFtZSwgc28gbGV0J3MgbGVhdmUgdGhlbSBzb21lCisjIGZyZWVkb20uCitBQ19ERUZVTihbQUNfQ0hFQ0tfTElCXSwKK1ttNF9pZnZhbChbJDNdLCAsIFtBSF9DSEVDS19MSUIoWyQxXSldKWRubAorQVNfTElURVJBTF9JRihbJDFdLAorCSAgICAgIFtBU19WQVJfUFVTSERFRihbYWNfTGliXSwgW2FjX2N2X2xpYl8kMV8kMl0pXSwKKwkgICAgICBbQVNfVkFSX1BVU0hERUYoW2FjX0xpYl0sIFthY19jdl9saWJfJDEnJ18kMl0pXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgJDIgaW4gLWwkMV0sIFthY19MaWJdLAorW2FjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sJDEgJDUgJExJQlMiCitBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19DQUxMKFtdLCBbJDJdKV0sCisJICAgICAgIFtBU19WQVJfU0VUKFthY19MaWJdLCBbeWVzXSldLAorCSAgICAgICBbQVNfVkFSX1NFVChbYWNfTGliXSwgW25vXSldKQorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCU10pCitBU19WQVJfSUYoW2FjX0xpYl0sIFt5ZXNdLAorICAgICAgW200X2RlZmF1bHQoWyQzXSwgW0FDX0RFRklORV9VTlFVT1RFRChBU19UUl9DUFAoSEFWRV9MSUIkMSkpCisgIExJQlM9Ii1sJDEgJExJQlMiCitdKV0sCisgICAgICBbJDRdKQorQVNfVkFSX1BPUERFRihbYWNfTGliXSlkbmwKK10pIyBBQ19DSEVDS19MSUIKKworCisjIEFIX0NIRUNLX0xJQihMSUJOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbQUhfQ0hFQ0tfTElCXSwKK1tBSF9URU1QTEFURShBU19UUl9DUFAoW0hBVkVfTElCJDFdKSwKKwkgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYCQxJyBsaWJyYXJ5ICgtbCQxKS5dKV0pCisKKworIyBBQ19IQVZFX0xJQlJBUlkoTElCUkFSWSwKKyMgICAgICAgICAgICAgICAgIFtBQ1RJT04tSUYtRk9VTkRdLCBbQUNUSU9OLUlGLU5PVC1GT1VORF0sCisjICAgICAgICAgICAgICAgICBbT1RIRVItTElCUkFSSUVTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIFRoaXMgbWFjcm8gaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIGBBQ19DSEVDS19MSUInIHdpdGggYSBGVU5DVElPTgorIyBhcmd1bWVudCBvZiBgbWFpbicuICBJbiBhZGRpdGlvbiwgTElCUkFSWSBjYW4gYmUgd3JpdHRlbiBhcyBhbnkgb2YKKyMgYGZvbycsIGAtbGZvbycsIG9yIGBsaWJmb28uYScuICBJbiBhbGwgb2YgdGhvc2UgY2FzZXMsIHRoZSBjb21waWxlcgorIyBpcyBwYXNzZWQgYC1sZm9vJy4gIEhvd2V2ZXIsIExJQlJBUlkgY2Fubm90IGJlIGEgc2hlbGwgdmFyaWFibGU7CisjIGl0IG11c3QgYmUgYSBsaXRlcmFsIG5hbWUuCitBVV9ERUZVTihbQUNfSEFWRV9MSUJSQVJZXSwKK1ttNF9wdXNoZGVmKFtBQ19MaWJfTmFtZV0sCisJICAgIG00X2JwYXRzdWJzdChtNF9icGF0c3Vic3QoW1skMV1dLAorCQkJCSAgICBbbGliXChbXlwuXSpcKVwuYV0sIFtcMV0pLAorCQkJWy1sXSwgW10pKWRubAorQUNfQ0hFQ0tfTElCKEFDX0xpYl9OYW1lLCBtYWluLCBbJDJdLCBbJDNdLCBbJDRdKWRubAorYWNfY3ZfbGliX1tdQUNfTGliX05hbWUoKT1hY19jdl9saWJfW11BQ19MaWJfTmFtZSgpX21haW4KK200X3BvcGRlZihbQUNfTGliX05hbWVdKWRubAorXSkKKworCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAyLiBUZXN0cyBmb3Igc3BlY2lmaWMgbGlicmFyaWVzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworIyBDaGVja3MgZm9yIFggd2luZG93LiAgIworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworCisKKyMgX0FDX1BBVEhfWF9YTUtNRgorIyAtLS0tLS0tLS0tLS0tLS0tCisjIEludGVybmFsIHN1YnJvdXRpbmUgb2YgX0FDX1BBVEhfWC4KKyMgU2V0IGFjX3hfaW5jbHVkZXMgYW5kL29yIGFjX3hfbGlicmFyaWVzLgorbTRfZGVmaW5lKFtfQUNfUEFUSF9YX1hNS01GXSwKK1tBQ19BUkdfVkFSKFhNS01GLCBbUGF0aCB0byB4bWttZiwgTWFrZWZpbGUgZ2VuZXJhdG9yIGZvciBYIFdpbmRvdyBTeXN0ZW1dKWRubAorcm0gLWYgLXIgY29uZnRlc3QuZGlyCitpZiBta2RpciBjb25mdGVzdC5kaXI7IHRoZW4KKyAgY2QgY29uZnRlc3QuZGlyCisgIGNhdCA+SW1ha2VmaWxlIDw8J19BQ0VPRicKK2luY3Jvb3Q6CisJQGVjaG8gaW5jcm9vdD0nJHtJTkNST09UfScKK3VzcmxpYmRpcjoKKwlAZWNobyB1c3JsaWJkaXI9JyR7VVNSTElCRElSfScKK2xpYmRpcjoKKwlAZWNobyBsaWJkaXI9JyR7TElCRElSfScKK19BQ0VPRgorICBpZiAoZXhwb3J0IENDOyAke1hNS01GLXhta21mfSkgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCAmJiB0ZXN0IC1mIE1ha2VmaWxlOyB0aGVuCisgICAgIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZy4uLiIsIHdoaWNoIHdvdWxkIGNvbmZ1c2UgdXMuCisgICAgZm9yIGFjX3ZhciBpbiBpbmNyb290IHVzcmxpYmRpciBsaWJkaXI7IGRvCisgICAgICBldmFsICJhY19pbV8kYWNfdmFyPVxgXCR7TUFLRS1tYWtlfSAkYWNfdmFyIDI+L2Rldi9udWxsIHwgc2VkIC1uICdzL14kYWNfdmFyPS8vcCdcYCIKKyAgICBkb25lCisgICAgIyBPcGVuIFdpbmRvd3MgeG1rbWYgcmVwb3J0ZWRseSBzZXRzIExJQkRJUiBpbnN0ZWFkIG9mIFVTUkxJQkRJUi4KKyAgICBmb3IgYWNfZXh0ZW5zaW9uIGluIGEgc28gc2wgZHlsaWIgbGEgZGxsOyBkbworICAgICAgaWYgdGVzdCAhIC1mICIkYWNfaW1fdXNybGliZGlyL2xpYlgxMS4kYWNfZXh0ZW5zaW9uIiAmJgorCSB0ZXN0IC1mICIkYWNfaW1fbGliZGlyL2xpYlgxMS4kYWNfZXh0ZW5zaW9uIjsgdGhlbgorCWFjX2ltX3VzcmxpYmRpcj0kYWNfaW1fbGliZGlyOyBicmVhaworICAgICAgZmkKKyAgICBkb25lCisgICAgIyBTY3JlZW4gb3V0IGJvZ3VzIHZhbHVlcyBmcm9tIHRoZSBpbWFrZSBjb25maWd1cmF0aW9uLiAgVGhleSBhcmUKKyAgICAjIGJvZ3VzIGJvdGggYmVjYXVzZSB0aGV5IGFyZSB0aGUgZGVmYXVsdCBhbnl3YXksIGFuZCBiZWNhdXNlCisgICAgIyB1c2luZyB0aGVtIHdvdWxkIGJyZWFrIGdjYyBvbiBzeXN0ZW1zIHdoZXJlIGl0IG5lZWRzIGZpeGVkIGluY2x1ZGVzLgorICAgIGNhc2UgJGFjX2ltX2luY3Jvb3QgaW4KKwkvdXNyL2luY2x1ZGUpIGFjX3hfaW5jbHVkZXM9IDs7CisJKikgdGVzdCAtZiAiJGFjX2ltX2luY3Jvb3QvWDExL1hvcy5oIiAmJiBhY194X2luY2x1ZGVzPSRhY19pbV9pbmNyb290OzsKKyAgICBlc2FjCisgICAgY2FzZSAkYWNfaW1fdXNybGliZGlyIGluCisJL3Vzci9saWIgfCAvdXNyL2xpYjY0IHwgL2xpYiB8IC9saWI2NCkgOzsKKwkqKSB0ZXN0IC1kICIkYWNfaW1fdXNybGliZGlyIiAmJiBhY194X2xpYnJhcmllcz0kYWNfaW1fdXNybGliZGlyIDs7CisgICAgZXNhYworICBmaQorICBjZCAuLgorICBybSAtZiAtciBjb25mdGVzdC5kaXIKK2ZpCitdKSMgX0FDX1BBVEhfWF9YTUtNRgorCisKKyMgX0FDX1BBVEhfWF9ESVJFQ1QKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgSW50ZXJuYWwgc3Vicm91dGluZSBvZiBfQUNfUEFUSF9YLgorIyBTZXQgYWNfeF9pbmNsdWRlcyBhbmQvb3IgYWNfeF9saWJyYXJpZXMuCittNF9kZWZpbmUoW19BQ19QQVRIX1hfRElSRUNUXSwKK1sjIFN0YW5kYXJkIHNldCBvZiBjb21tb24gZGlyZWN0b3JpZXMgZm9yIFggaGVhZGVycy4KKyMgQ2hlY2sgWDExIGJlZm9yZSBYMTFSbiBiZWNhdXNlIGl0IGlzIG9mdGVuIGEgc3ltbGluayB0byB0aGUgY3VycmVudCByZWxlYXNlLgorYWNfeF9oZWFkZXJfZGlycz0nCisvdXNyL1gxMS9pbmNsdWRlCisvdXNyL1gxMVI3L2luY2x1ZGUKKy91c3IvWDExUjYvaW5jbHVkZQorL3Vzci9YMTFSNS9pbmNsdWRlCisvdXNyL1gxMVI0L2luY2x1ZGUKKworL3Vzci9pbmNsdWRlL1gxMQorL3Vzci9pbmNsdWRlL1gxMVI3CisvdXNyL2luY2x1ZGUvWDExUjYKKy91c3IvaW5jbHVkZS9YMTFSNQorL3Vzci9pbmNsdWRlL1gxMVI0CisKKy91c3IvbG9jYWwvWDExL2luY2x1ZGUKKy91c3IvbG9jYWwvWDExUjcvaW5jbHVkZQorL3Vzci9sb2NhbC9YMTFSNi9pbmNsdWRlCisvdXNyL2xvY2FsL1gxMVI1L2luY2x1ZGUKKy91c3IvbG9jYWwvWDExUjQvaW5jbHVkZQorCisvdXNyL2xvY2FsL2luY2x1ZGUvWDExCisvdXNyL2xvY2FsL2luY2x1ZGUvWDExUjcKKy91c3IvbG9jYWwvaW5jbHVkZS9YMTFSNgorL3Vzci9sb2NhbC9pbmNsdWRlL1gxMVI1CisvdXNyL2xvY2FsL2luY2x1ZGUvWDExUjQKKworL3Vzci9YMzg2L2luY2x1ZGUKKy91c3IveDM4Ni9pbmNsdWRlCisvdXNyL1hGcmVlODYvaW5jbHVkZS9YMTEKKworL3Vzci9pbmNsdWRlCisvdXNyL2xvY2FsL2luY2x1ZGUKKy91c3IvdW5zdXBwb3J0ZWQvaW5jbHVkZQorL3Vzci9hdGhlbmEvaW5jbHVkZQorL3Vzci9sb2NhbC94MTFyNS9pbmNsdWRlCisvdXNyL2xwcC9YYW1wbGVzL2luY2x1ZGUKKworL3Vzci9vcGVud2luL2luY2x1ZGUKKy91c3Ivb3Blbndpbi9zaGFyZS9pbmNsdWRlJworCitpZiB0ZXN0ICIkYWNfeF9pbmNsdWRlcyIgPSBubzsgdGhlbgorICAjIEd1ZXNzIHdoZXJlIHRvIGZpbmQgaW5jbHVkZSBmaWxlcywgYnkgbG9va2luZyBmb3IgWGxpYi5oLgorICAjIEZpcnN0LCB0cnkgdXNpbmcgdGhhdCBmaWxlIHdpdGggbm8gc3BlY2lhbCBkaXJlY3Rvcnkgc3BlY2lmaWVkLgorICBBQ19QUkVQUk9DX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW0AlOkBpbmNsdWRlIDxYMTEvWGxpYi5oPl0pXSwKK1sjIFdlIGNhbiBjb21waWxlIHVzaW5nIFggaGVhZGVycyB3aXRoIG5vIHNwZWNpYWwgaW5jbHVkZSBkaXJlY3RvcnkuCithY194X2luY2x1ZGVzPV0sCitbZm9yIGFjX2RpciBpbiAkYWNfeF9oZWFkZXJfZGlyczsgZG8KKyAgaWYgdGVzdCAtciAiJGFjX2Rpci9YMTEvWGxpYi5oIjsgdGhlbgorICAgIGFjX3hfaW5jbHVkZXM9JGFjX2RpcgorICAgIGJyZWFrCisgIGZpCitkb25lXSkKK2ZpICMgJGFjX3hfaW5jbHVkZXMgPSBubworCitpZiB0ZXN0ICIkYWNfeF9saWJyYXJpZXMiID0gbm87IHRoZW4KKyAgIyBDaGVjayBmb3IgdGhlIGxpYnJhcmllcy4KKyAgIyBTZWUgaWYgd2UgZmluZCB0aGVtIHdpdGhvdXQgYW55IHNwZWNpYWwgb3B0aW9ucy4KKyAgIyBEb24ndCBhZGQgdG8gJExJQlMgcGVybWFuZW50bHkuCisgIGFjX3NhdmVfTElCUz0kTElCUworICBMSUJTPSItbFgxMSAkTElCUyIKKyAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbQCU6QGluY2x1ZGUgPFgxMS9YbGliLmg+XSwKKwkJCQkgIFtYcm1Jbml0aWFsaXplICgpXSldLAorCQkgW0xJQlM9JGFjX3NhdmVfTElCUworIyBXZSBjYW4gbGluayBYIHByb2dyYW1zIHdpdGggbm8gc3BlY2lhbCBsaWJyYXJ5IHBhdGguCithY194X2xpYnJhcmllcz1dLAorCQkgW0xJQlM9JGFjX3NhdmVfTElCUworZm9yIGFjX2RpciBpbiBgQVNfRUNITyhbIiRhY194X2luY2x1ZGVzICRhY194X2hlYWRlcl9kaXJzIl0pIHwgc2VkIHMvaW5jbHVkZS9saWIvZ2AKK2RvCisgICMgRG9uJ3QgZXZlbiBhdHRlbXB0IHRoZSBoYWlyIG9mIHRyeWluZyB0byBsaW5rIGFuIFggcHJvZ3JhbSEKKyAgZm9yIGFjX2V4dGVuc2lvbiBpbiBhIHNvIHNsIGR5bGliIGxhIGRsbDsgZG8KKyAgICBpZiB0ZXN0IC1yICIkYWNfZGlyL2xpYlgxMS4kYWNfZXh0ZW5zaW9uIjsgdGhlbgorICAgICAgYWNfeF9saWJyYXJpZXM9JGFjX2RpcgorICAgICAgYnJlYWsgMgorICAgIGZpCisgIGRvbmUKK2RvbmVdKQorZmkgIyAkYWNfeF9saWJyYXJpZXMgPSBubworXSkjIF9BQ19QQVRIX1hfRElSRUNUCisKKworIyBfQUNfUEFUSF9YCisjIC0tLS0tLS0tLS0KKyMgQ29tcHV0ZSBhY19jdl9oYXZlX3guCitBQ19ERUZVTihbX0FDX1BBVEhfWF0sCitbQUNfQ0FDSEVfVkFMKGFjX2N2X2hhdmVfeCwKK1sjIE9uZSBvciBib3RoIG9mIHRoZSB2YXJzIGFyZSBub3Qgc2V0LCBhbmQgdGhlcmUgaXMgbm8gY2FjaGVkIHZhbHVlLgorYWNfeF9pbmNsdWRlcz1ubyBhY194X2xpYnJhcmllcz1ubworX0FDX1BBVEhfWF9YTUtNRgorX0FDX1BBVEhfWF9ESVJFQ1QKK2Nhc2UgJGFjX3hfaW5jbHVkZXMsJGFjX3hfbGlicmFyaWVzIGluICMoCisgIG5vLCogfCAqLG5vIHwgKlwnKikKKyAgICAjIERpZG4ndCBmaW5kIFgsIG9yIGEgZGlyZWN0b3J5IGhhcyAiJyIgaW4gaXRzIG5hbWUuCisgICAgYWNfY3ZfaGF2ZV94PSJoYXZlX3g9bm8iOzsgIygKKyAgKikKKyAgICAjIFJlY29yZCB3aGVyZSB3ZSBmb3VuZCBYIGZvciB0aGUgY2FjaGUuCisgICAgYWNfY3ZfaGF2ZV94PSJoYXZlX3g9eWVzXAorCWFjX3hfaW5jbHVkZXM9JyRhY194X2luY2x1ZGVzJ1wKKwlhY194X2xpYnJhcmllcz0nJGFjX3hfbGlicmFyaWVzJyIKK2VzYWNdKWRubAorXSkKKworCisjIEFDX1BBVEhfWAorIyAtLS0tLS0tLS0KKyMgSWYgd2UgZmluZCBYLCBzZXQgc2hlbGwgdmFycyB4X2luY2x1ZGVzIGFuZCB4X2xpYnJhcmllcyB0byB0aGUKKyMgcGF0aHMsIG90aGVyd2lzZSBzZXQgbm9feD15ZXMuCisjIFVzZXMgYWNfIHZhcnMgYXMgdGVtcHMgdG8gYWxsb3cgY29tbWFuZCBsaW5lIHRvIG92ZXJyaWRlIGNhY2hlIGFuZCBjaGVja3MuCisjIC0td2l0aG91dC14IG92ZXJyaWRlcyBldmVyeXRoaW5nIGVsc2UsIGJ1dCBkb2VzIG5vdCB0b3VjaCB0aGUgY2FjaGUuCitBTl9IRUFERVIoW1gxMS9YbGliLmhdLCAgW0FDX1BBVEhfWF0pCitBQ19ERUZVTihbQUNfUEFUSF9YXSwKK1tkbmwgRG9jdW1lbnQgdGhlIFggYWJub3JtYWwgb3B0aW9ucyBpbmhlcml0ZWQgZnJvbSBoaXN0b3J5LgorbTRfZGl2ZXJ0X29uY2UoW0hFTFBfQkVHSU5dLCBbCitYIGZlYXR1cmVzOgorICAtLXgtaW5jbHVkZXM9RElSICAgIFggaW5jbHVkZSBmaWxlcyBhcmUgaW4gRElSCisgIC0teC1saWJyYXJpZXM9RElSICAgWCBsaWJyYXJ5IGZpbGVzIGFyZSBpbiBESVJdKWRubAorQUNfTVNHX0NIRUNLSU5HKFtmb3IgWF0pCisKK0FDX0FSR19XSVRIKHgsIFsgIC0td2l0aC14ICAgICAgICAgICAgICAgIHVzZSB0aGUgWCBXaW5kb3cgU3lzdGVtXSkKKyMgJGhhdmVfeCBpcyBgeWVzJywgYG5vJywgYGRpc2FibGVkJywgb3IgZW1wdHkgd2hlbiB3ZSBkbyBub3QgeWV0IGtub3cuCitpZiB0ZXN0ICJ4JHdpdGhfeCIgPSB4bm87IHRoZW4KKyAgIyBUaGUgdXNlciBleHBsaWNpdGx5IGRpc2FibGVkIFguCisgIGhhdmVfeD1kaXNhYmxlZAorZWxzZQorICBjYXNlICR4X2luY2x1ZGVzLCR4X2xpYnJhcmllcyBpbiAjKAorICAgICpcJyopIEFDX01TR19FUlJPUihbY2Fubm90IHVzZSBYIGRpcmVjdG9yeSBuYW1lcyBjb250YWluaW5nICddKTs7ICMoCisgICAgKixOT05FIHwgTk9ORSwqKSBfQUNfUEFUSF9YOzsgIygKKyAgICAqKSBoYXZlX3g9eWVzOzsKKyAgZXNhYworICBldmFsICIkYWNfY3ZfaGF2ZV94IgorZmkgIyAkd2l0aF94ICE9IG5vCisKK2lmIHRlc3QgIiRoYXZlX3giICE9IHllczsgdGhlbgorICBBQ19NU0dfUkVTVUxUKFskaGF2ZV94XSkKKyAgbm9feD15ZXMKK2Vsc2UKKyAgIyBJZiBlYWNoIG9mIHRoZSB2YWx1ZXMgd2FzIG9uIHRoZSBjb21tYW5kIGxpbmUsIGl0IG92ZXJyaWRlcyBlYWNoIGd1ZXNzLgorICB0ZXN0ICJ4JHhfaW5jbHVkZXMiID0geE5PTkUgJiYgeF9pbmNsdWRlcz0kYWNfeF9pbmNsdWRlcworICB0ZXN0ICJ4JHhfbGlicmFyaWVzIiA9IHhOT05FICYmIHhfbGlicmFyaWVzPSRhY194X2xpYnJhcmllcworICAjIFVwZGF0ZSB0aGUgY2FjaGUgdmFsdWUgdG8gcmVmbGVjdCB0aGUgY29tbWFuZCBsaW5lIHZhbHVlcy4KKyAgYWNfY3ZfaGF2ZV94PSJoYXZlX3g9eWVzXAorCWFjX3hfaW5jbHVkZXM9JyR4X2luY2x1ZGVzJ1wKKwlhY194X2xpYnJhcmllcz0nJHhfbGlicmFyaWVzJyIKKyAgQUNfTVNHX1JFU1VMVChbbGlicmFyaWVzICR4X2xpYnJhcmllcywgaGVhZGVycyAkeF9pbmNsdWRlc10pCitmaQorXSkjIEFDX1BBVEhfWAorCisKKworIyBBQ19QQVRIX1hUUkEKKyMgLS0tLS0tLS0tLS0tCisjIEZpbmQgYWRkaXRpb25hbCBYIGxpYnJhcmllcywgbWFnaWMgZmxhZ3MsIGV0Yy4KK0FDX0RFRlVOKFtBQ19QQVRIX1hUUkFdLAorW0FDX1JFUVVJUkUoW0FDX1BBVEhfWF0pZG5sCitpZiB0ZXN0ICIkbm9feCIgPSB5ZXM7IHRoZW4KKyAgIyBOb3QgYWxsIHByb2dyYW1zIG1heSB1c2UgdGhpcyBzeW1ib2wsIGJ1dCBpdCBkb2VzIG5vdCBodXJ0IHRvIGRlZmluZSBpdC4KKyAgQUNfREVGSU5FKFtYX0RJU1BMQVlfTUlTU0lOR10sIDEsCisJICAgIFtEZWZpbmUgdG8gMSBpZiB0aGUgWCBXaW5kb3cgU3lzdGVtIGlzIG1pc3Npbmcgb3Igbm90IGJlaW5nIHVzZWQuXSkKKyAgWF9DRkxBR1M9IFhfUFJFX0xJQlM9IFhfTElCUz0gWF9FWFRSQV9MSUJTPQorZWxzZQorICBpZiB0ZXN0IC1uICIkeF9pbmNsdWRlcyI7IHRoZW4KKyAgICBYX0NGTEFHUz0iJFhfQ0ZMQUdTIC1JJHhfaW5jbHVkZXMiCisgIGZpCisKKyAgIyBJdCB3b3VsZCBhbHNvIGJlIG5pY2UgdG8gZG8gdGhpcyBmb3IgYWxsIC1MIG9wdGlvbnMsIG5vdCBqdXN0IHRoaXMgb25lLgorICBpZiB0ZXN0IC1uICIkeF9saWJyYXJpZXMiOyB0aGVuCisgICAgWF9MSUJTPSIkWF9MSUJTIC1MJHhfbGlicmFyaWVzIgorICAgICMgRm9yIFNvbGFyaXM7IHNvbWUgdmVyc2lvbnMgb2YgU3VuIENDIHJlcXVpcmUgYSBzcGFjZSBhZnRlciAtUiBhbmQKKyAgICAjIG90aGVycyByZXF1aXJlIG5vIHNwYWNlLiAgV29yZHMgYXJlIG5vdCBzdWZmaWNpZW50IC4gLiAuIC4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgLVIgbXVzdCBiZSBmb2xsb3dlZCBieSBhIHNwYWNlXSkKKyAgICBhY194c2F2ZV9MSUJTPSRMSUJTOyBMSUJTPSIkTElCUyAtUiR4X2xpYnJhcmllcyIKKyAgICBhY194c2F2ZV9bXV9BQ19MQU5HX0FCQlJFVltdX3dlcnJvcl9mbGFnPSRhY19bXV9BQ19MQU5HX0FCQlJFVltdX3dlcnJvcl9mbGFnCisgICAgYWNfW11fQUNfTEFOR19BQkJSRVZbXV93ZXJyb3JfZmxhZz15ZXMKKyAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKCldLAorICAgICAgW0FDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICBYX0xJQlM9IiRYX0xJQlMgLVIkeF9saWJyYXJpZXMiXSwKKyAgICAgIFtMSUJTPSIkYWNfeHNhdmVfTElCUyAtUiAkeF9saWJyYXJpZXMiCisgICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTSgpXSwKKwkgW0FDX01TR19SRVNVTFQoW3llc10pCisJICBYX0xJQlM9IiRYX0xJQlMgLVIgJHhfbGlicmFyaWVzIl0sCisJIFtBQ19NU0dfUkVTVUxUKFtuZWl0aGVyIHdvcmtzXSldKV0pCisgICAgYWNfW11fQUNfTEFOR19BQkJSRVZbXV93ZXJyb3JfZmxhZz0kYWNfeHNhdmVfW11fQUNfTEFOR19BQkJSRVZbXV93ZXJyb3JfZmxhZworICAgIExJQlM9JGFjX3hzYXZlX0xJQlMKKyAgZmkKKworICAjIENoZWNrIGZvciBzeXN0ZW0tZGVwZW5kZW50IGxpYnJhcmllcyBYIHByb2dyYW1zIG11c3QgbGluayB3aXRoLgorICAjIERvIHRoaXMgYmVmb3JlIGNoZWNraW5nIGZvciB0aGUgc3lzdGVtLWluZGVwZW5kZW50IFI2IGxpYnJhcmllcworICAjICgtbElDRSksIHNpbmNlIHdlIG1heSBuZWVkIC1sc29ja2V0IG9yIHdoYXRldmVyIGZvciBYIGxpbmtpbmcuCisKKyAgaWYgdGVzdCAiJElTQyIgPSB5ZXM7IHRoZW4KKyAgICBYX0VYVFJBX0xJQlM9IiRYX0VYVFJBX0xJQlMgLWxuc2xfcyAtbGluZXQiCisgIGVsc2UKKyAgICAjIE1hcnR5biBKb2huc29uIHNheXMgdGhpcyBpcyBuZWVkZWQgZm9yIFVsdHJpeCwgaWYgdGhlIFgKKyAgICAjIGxpYnJhcmllcyB3ZXJlIGJ1aWx0IHdpdGggREVDbmV0IHN1cHBvcnQuICBBbmQgS2FybCBCZXJyeSBzYXlzCisgICAgIyB0aGUgQWxwaGEgbmVlZHMgZG5ldF9zdHViIChkbmV0IGRvZXMgbm90IGV4aXN0KS4KKyAgICBhY194c2F2ZV9MSUJTPSIkTElCUyI7IExJQlM9IiRMSUJTICRYX0xJQlMgLWxYMTEiCisgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfQ0FMTChbXSwgW1hPcGVuRGlzcGxheV0pXSwKKwkJICAgW10sCisgICAgW0FDX0NIRUNLX0xJQihkbmV0LCBkbmV0X250b2EsIFtYX0VYVFJBX0xJQlM9IiRYX0VYVFJBX0xJQlMgLWxkbmV0Il0pCisgICAgaWYgdGVzdCAkYWNfY3ZfbGliX2RuZXRfZG5ldF9udG9hID0gbm87IHRoZW4KKyAgICAgIEFDX0NIRUNLX0xJQihkbmV0X3N0dWIsIGRuZXRfbnRvYSwKKwlbWF9FWFRSQV9MSUJTPSIkWF9FWFRSQV9MSUJTIC1sZG5ldF9zdHViIl0pCisgICAgZmldKQorICAgIExJQlM9IiRhY194c2F2ZV9MSUJTIgorCisgICAgIyBtc2hAY2lzLnVmbC5lZHUgc2F5cyAtbG5zbCAoYW5kIC1sc29ja2V0KSBhcmUgbmVlZGVkIGZvciBoaXMgMzg2L0FULAorICAgICMgdG8gZ2V0IHRoZSBTeXNWIHRyYW5zcG9ydCBmdW5jdGlvbnMuCisgICAgIyBDaGFkIFIuIExhcnNvbiBzYXlzIHRoZSBQeXJhbWlzIE1JUy1FUyBydW5uaW5nIERDL09TeCAoU1ZSNCkKKyAgICAjIG5lZWRzIC1sbnNsLgorICAgICMgVGhlIG5zbCBsaWJyYXJ5IHByZXZlbnRzIHByb2dyYW1zIGZyb20gb3BlbmluZyB0aGUgWCBkaXNwbGF5CisgICAgIyBvbiBJcml4IDUuMiwgYWNjb3JkaW5nIHRvIFQuRS4gRGlja2V5LgorICAgICMgVGhlIGZ1bmN0aW9ucyBnZXRob3N0YnluYW1lLCBnZXRzZXJ2YnluYW1lLCBhbmQgaW5ldF9hZGRyIGFyZQorICAgICMgaW4gLWxic2Qgb24gTHlueE9TIDMuMC4xL2kzODYsIGFjY29yZGluZyB0byBMYXJzIEhlY2tpbmcuCisgICAgQUNfQ0hFQ0tfRlVOQyhnZXRob3N0YnluYW1lKQorICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZSA9IG5vOyB0aGVuCisgICAgICBBQ19DSEVDS19MSUIobnNsLCBnZXRob3N0YnluYW1lLCBYX0VYVFJBX0xJQlM9IiRYX0VYVFJBX0xJQlMgLWxuc2wiKQorICAgICAgaWYgdGVzdCAkYWNfY3ZfbGliX25zbF9nZXRob3N0YnluYW1lID0gbm87IHRoZW4KKwlBQ19DSEVDS19MSUIoYnNkLCBnZXRob3N0YnluYW1lLCBYX0VYVFJBX0xJQlM9IiRYX0VYVFJBX0xJQlMgLWxic2QiKQorICAgICAgZmkKKyAgICBmaQorCisgICAgIyBsaWVkZXJAc2t5bGVyLm1hdmQuaG9uZXl3ZWxsLmNvbSBzYXlzIHdpdGhvdXQgLWxzb2NrZXQsCisgICAgIyBzb2NrZXQvc2V0c29ja29wdCBhbmQgb3RoZXIgcm91dGluZXMgYXJlIHVuZGVmaW5lZCB1bmRlciBTQ08gT0RUCisgICAgIyAyLjAuICBCdXQgLWxzb2NrZXQgaXMgYnJva2VuIG9uIElSSVggNS4yIChhbmQgaXMgbm90IG5lY2Vzc2FyeQorICAgICMgb24gbGF0ZXIgdmVyc2lvbnMpLCBzYXlzIFNpbW9uIExlaW5lbjogaXQgY29udGFpbnMgZ2V0aG9zdGJ5KgorICAgICMgdmFyaWFudHMgdGhhdCBkb24ndCB1c2UgdGhlIG5hbWUgc2VydmVyIChvciBzb21ldGhpbmcpLiAgLWxzb2NrZXQKKyAgICAjIG11c3QgYmUgZ2l2ZW4gYmVmb3JlIC1sbnNsIGlmIGJvdGggYXJlIG5lZWRlZC4gIFdlIGFzc3VtZSB0aGF0CisgICAgIyBpZiBjb25uZWN0IG5lZWRzIC1sbnNsLCBzbyBkb2VzIGdldGhvc3RieW5hbWUuCisgICAgQUNfQ0hFQ0tfRlVOQyhjb25uZWN0KQorICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfY29ubmVjdCA9IG5vOyB0aGVuCisgICAgICBBQ19DSEVDS19MSUIoc29ja2V0LCBjb25uZWN0LCBYX0VYVFJBX0xJQlM9Ii1sc29ja2V0ICRYX0VYVFJBX0xJQlMiLCAsCisJJFhfRVhUUkFfTElCUykKKyAgICBmaQorCisgICAgIyBHdWlsbGVybW8gR29tZXogc2F5cyAtbHBvc2l4IGlzIG5lY2Vzc2FyeSBvbiBBL1VYLgorICAgIEFDX0NIRUNLX0ZVTkMocmVtb3ZlKQorICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfcmVtb3ZlID0gbm87IHRoZW4KKyAgICAgIEFDX0NIRUNLX0xJQihwb3NpeCwgcmVtb3ZlLCBYX0VYVFJBX0xJQlM9IiRYX0VYVFJBX0xJQlMgLWxwb3NpeCIpCisgICAgZmkKKworICAgICMgQlNESSBCU0QvT1MgMi4xIG5lZWRzIC1saXBjIGZvciBYT3BlbkRpc3BsYXkuCisgICAgQUNfQ0hFQ0tfRlVOQyhzaG1hdCkKKyAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX3NobWF0ID0gbm87IHRoZW4KKyAgICAgIEFDX0NIRUNLX0xJQihpcGMsIHNobWF0LCBYX0VYVFJBX0xJQlM9IiRYX0VYVFJBX0xJQlMgLWxpcGMiKQorICAgIGZpCisgIGZpCisKKyAgIyBDaGVjayBmb3IgbGlicmFyaWVzIHRoYXQgWDExUjYgWHQvWGF3IHByb2dyYW1zIG5lZWQuCisgIGFjX3NhdmVfTERGTEFHUz0kTERGTEFHUworICB0ZXN0IC1uICIkeF9saWJyYXJpZXMiICYmIExERkxBR1M9IiRMREZMQUdTIC1MJHhfbGlicmFyaWVzIgorICAjIFNNIG5lZWRzIElDRSB0byAoZHluYW1pY2FsbHkpIGxpbmsgdW5kZXIgU3VuT1MgNC54IChzbyB3ZSBoYXZlIHRvCisgICMgY2hlY2sgZm9yIElDRSBmaXJzdCksIGJ1dCB3ZSBtdXN0IGxpbmsgaW4gdGhlIG9yZGVyIC1sU00gLWxJQ0Ugb3IKKyAgIyB3ZSBnZXQgdW5kZWZpbmVkIHN5bWJvbHMuICBTbyBhc3N1bWUgd2UgaGF2ZSBTTSBpZiB3ZSBoYXZlIElDRS4KKyAgIyBUaGVzZSBoYXZlIHRvIGJlIGxpbmtlZCB3aXRoIGJlZm9yZSAtbFgxMSwgdW5saWtlIHRoZSBvdGhlcgorICAjIGxpYnJhcmllcyB3ZSBjaGVjayBmb3IgYmVsb3csIHNvIHVzZSBhIGRpZmZlcmVudCB2YXJpYWJsZS4KKyAgIyBKb2huIEludGVycmFudGUsIEthcmwgQmVycnkKKyAgQUNfQ0hFQ0tfTElCKElDRSwgSWNlQ29ubmVjdGlvbk51bWJlciwKKyAgICBbWF9QUkVfTElCUz0iJFhfUFJFX0xJQlMgLWxTTSAtbElDRSJdLCAsICRYX0VYVFJBX0xJQlMpCisgIExERkxBR1M9JGFjX3NhdmVfTERGTEFHUworCitmaQorQUNfU1VCU1QoWF9DRkxBR1MpZG5sCitBQ19TVUJTVChYX1BSRV9MSUJTKWRubAorQUNfU1VCU1QoWF9MSUJTKWRubAorQUNfU1VCU1QoWF9FWFRSQV9MSUJTKWRubAorXSkjIEFDX1BBVEhfWFRSQQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b2NvbmYvYXV0b2NvbmYvb2xkbmFtZXMubTQgYi9zaGFyZS9hdXRvY29uZi9hdXRvY29uZi9vbGRuYW1lcy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzVhYjMzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b2NvbmYvYXV0b2NvbmYvb2xkbmFtZXMubTQKQEAgLTAsMCArMSw5MiBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4gICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjIFN1cHBvcnQgb2xkIG1hY3JvcywgYW5kIHByb3ZpZGUgYXV0b21hdGVkIHVwZGF0ZXMuCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwOSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlCisjIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorIyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorIyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uLAorIyB2ZXJzaW9uIDMuMCwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFuZCBhIGNvcHkgb2YgdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGVzIENPUFlJTkd2MyBhbmQgQ09QWUlORy5FWENFUFRJT04KKyMgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBEYXZpZCBKLiBNYWNLZW56aWUuCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgR2VuZXJhbCBtYWNyb3Mgb2YgQXV0b2NvbmYuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitBVV9BTElBUyhbQUNfV0FSTl0sCQlbQUNfTVNHX1dBUk5dKQorQVVfQUxJQVMoW0FDX0VSUk9SXSwJCVtBQ19NU0dfRVJST1JdKQorQVVfQUxJQVMoW0FDX0hBVkVfSEVBREVSU10sCVtBQ19DSEVDS19IRUFERVJTXSkKK0FVX0FMSUFTKFtBQ19IRUFERVJfQ0hFQ0tdLAlbQUNfQ0hFQ0tfSEVBREVSXSkKK0FVX0FMSUFTKFtBQ19IRUFERVJfRUdSRVBdLAlbQUNfRUdSRVBfSEVBREVSXSkKK0FVX0FMSUFTKFtBQ19QUkVGSVhdLAkJW0FDX1BSRUZJWF9QUk9HUkFNXSkKK0FVX0FMSUFTKFtBQ19QUk9HUkFNU19DSEVDS10sCVtBQ19DSEVDS19QUk9HU10pCitBVV9BTElBUyhbQUNfUFJPR1JBTVNfUEFUSF0sCVtBQ19QQVRIX1BST0dTXSkKK0FVX0FMSUFTKFtBQ19QUk9HUkFNX0NIRUNLXSwJW0FDX0NIRUNLX1BST0ddKQorQVVfQUxJQVMoW0FDX1BST0dSQU1fRUdSRVBdLAlbQUNfRUdSRVBfQ1BQXSkKK0FVX0FMSUFTKFtBQ19QUk9HUkFNX1BBVEhdLAlbQUNfUEFUSF9QUk9HXSkKK0FVX0FMSUFTKFtBQ19TSVpFT0ZfVFlQRV0sCVtBQ19DSEVDS19TSVpFT0ZdKQorQVVfQUxJQVMoW0FDX1RFU1RfQ1BQXSwJCVtBQ19UUllfQ1BQXSkKK0FVX0FMSUFTKFtBQ19URVNUX1BST0dSQU1dLAlbQUNfVFJZX1JVTl0pCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgU3BlY2lmaWMgbWFjcm9zIG9mIEF1dG9jb25mLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK0FVX0FMSUFTKFtBQ19DSEFSX1VOU0lHTkVEXSwJW0FDX0NfQ0hBUl9VTlNJR05FRF0pCitBVV9BTElBUyhbQUNfQ09OU1RdLAkJW0FDX0NfQ09OU1RdKQorQVVfQUxJQVMoW0FDX0NST1NTX0NIRUNLXSwJW0FDX0NfQ1JPU1NdKQorQVVfQUxJQVMoW0FDX0ZJTkRfWF0sCQlbQUNfUEFUSF9YXSkKK0FVX0FMSUFTKFtBQ19GSU5EX1hUUkFdLAlbQUNfUEFUSF9YVFJBXSkKK0FVX0FMSUFTKFtBQ19HQ0NfVFJBRElUSU9OQUxdLAlbQUNfUFJPR19HQ0NfVFJBRElUSU9OQUxdKQorQVVfQUxJQVMoW0FDX0dFVEdST1VQU19UXSwJW0FDX1RZUEVfR0VUR1JPVVBTXSkKK0FVX0FMSUFTKFtBQ19JTkxJTkVdLAkJW0FDX0NfSU5MSU5FXSkKK0FVX0FMSUFTKFtBQ19MTl9TXSwJCVtBQ19QUk9HX0xOX1NdKQorQVVfQUxJQVMoW0FDX0xPTkdfRE9VQkxFXSwJW0FDX0NfTE9OR19ET1VCTEVdKQorQVVfQUxJQVMoW0FDX0xPTkdfRklMRV9OQU1FU10sCVtBQ19TWVNfTE9OR19GSUxFX05BTUVTXSkKK0FVX0FMSUFTKFtBQ19NQUpPUl9IRUFERVJdLAlbQUNfSEVBREVSX01BSk9SXSkKK0FVX0FMSUFTKFtBQ19NSU5VU19DX01JTlVTX09dLAlbQUNfUFJPR19DQ19DX09dKQorQVVfQUxJQVMoW0FDX01PREVfVF0sCQlbQUNfVFlQRV9NT0RFX1RdKQorQVVfQUxJQVMoW0FDX09GRl9UXSwJCVtBQ19UWVBFX09GRl9UXSkKK0FVX0FMSUFTKFtBQ19QSURfVF0sCQlbQUNfVFlQRV9QSURfVF0pCitBVV9BTElBUyhbQUNfUkVTVEFSVEFCTEVfU1lTQ0FMTFNdLAkJW0FDX1NZU19SRVNUQVJUQUJMRV9TWVNDQUxMU10pCitBVV9BTElBUyhbQUNfUkVUU0lHVFlQRV0sCVtBQ19UWVBFX1NJR05BTF0pCitBVV9BTElBUyhbQUNfU0VUX01BS0VdLAkJW0FDX1BST0dfTUFLRV9TRVRdKQorQVVfQUxJQVMoW0FDX1NJWkVfVF0sCQlbQUNfVFlQRV9TSVpFX1RdKQorQVVfQUxJQVMoW0FDX1NUQVRfTUFDUk9TX0JST0tFTl0sCQlbQUNfSEVBREVSX1NUQVRdKQorQVVfQUxJQVMoW0FDX1NURENfSEVBREVSU10sCVtBQ19IRUFERVJfU1REQ10pCitBVV9BTElBUyhbQUNfU1RfQkxLU0laRV0sCVtBQ19TVFJVQ1RfU1RfQkxLU0laRV0pCitBVV9BTElBUyhbQUNfU1RfQkxPQ0tTXSwJW0FDX1NUUlVDVF9TVF9CTE9DS1NdKQorQVVfQUxJQVMoW0FDX1NUX1JERVZdLAkJW0FDX1NUUlVDVF9TVF9SREVWXSkKK0FVX0FMSUFTKFtBQ19TWVNfU0lHTElTVF9ERUNMQVJFRF0sCQlbQUNfREVDTF9TWVNfU0lHTElTVF0pCitBVV9BTElBUyhbQUNfVElNRVpPTkVdLAkJW0FDX1NUUlVDVF9USU1FWk9ORV0pCitBVV9BTElBUyhbQUNfVElNRV9XSVRIX1NZU19USU1FXSwJCVtBQ19IRUFERVJfVElNRV0pCitBVV9BTElBUyhbQUNfVUlEX1RdLAkJW0FDX1RZUEVfVUlEX1RdKQorQVVfQUxJQVMoW0FDX1dPUkRTX0JJR0VORElBTl0sCVtBQ19DX0JJR0VORElBTl0pCitBVV9BTElBUyhbQUNfWVlURVhUX1BPSU5URVJdLAlbQUNfREVDTF9ZWVRFWFRdKQorQVVfQUxJQVMoW0FNX0NZR1dJTjMyXSwJCVtBQ19DWUdXSU4zMl0pCitBVV9BTElBUyhbQUNfQ1lHV0lOMzJdLCAgICAgICAgIFtBQ19DWUdXSU5dKQorQVVfQUxJQVMoW0FNX0VYRUVYVF0sCQlbQUNfRVhFRVhUXSkKKyMgV2UgY2Fubm90IGRvIHRoaXMsIGJlY2F1c2UgaW4gbGlidG9vbC5tNCB5ZXQgdGhleSBwcm92aWRlCisjIHRoaXMgdXBkYXRlLiAgU29tZSBzb2x1dGlvbiBpcyBuZWVkZWQuCisjIEFVX0FMSUFTKFtBTV9QUk9HX0xJQlRPT0xdLAkJW0FDX1BST0dfTElCVE9PTF0pCitBVV9BTElBUyhbQU1fTUlOR1czMl0sCQlbQUNfTUlOR1czMl0pCitBVV9BTElBUyhbQU1fUFJPR19JTlNUQUxMXSwJW0FDX1BST0dfSU5TVEFMTF0pCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvY29uZi9hdXRvY29uZi9wcm9ncmFtcy5tNCBiL3NoYXJlL2F1dG9jb25mL2F1dG9jb25mL3Byb2dyYW1zLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMjdiZjcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvY29uZi9hdXRvY29uZi9wcm9ncmFtcy5tNApAQCAtMCwwICsxLDkwMiBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4gICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMgQ2hlY2tpbmcgZm9yIHByb2dyYW1zLgorCisjIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKyMgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlCisjIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorIyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorIyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uLAorIyB2ZXJzaW9uIDMuMCwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFuZCBhIGNvcHkgb2YgdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGVzIENPUFlJTkd2MyBhbmQgQ09QWUlORy5FWENFUFRJT04KKyMgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFdyaXR0ZW4gYnkgRGF2aWQgTWFjS2VuemllLCB3aXRoIGhlbHAgZnJvbQorIyBGcmFuYyxvaXMgUGluYXJkLCBLYXJsIEJlcnJ5LCBSaWNoYXJkIFBpeGxleSwgSWFuIExhbmNlIFRheWxvciwKKyMgUm9sYW5kIE1jR3JhdGgsIE5vYWggRnJpZWRtYW4sIGRhdmlkIGQgenVobiwgYW5kIG1hbnkgb3RoZXJzLgorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBHZW5lcmljIGNoZWNrcyBmb3IgcHJvZ3JhbXMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIF9BQ19DSEVDS19QUk9HKFZBUklBQkxFLCBQUk9HLVRPLUNIRUNLLUZPUiwKKyMgICAgICAgICAgICAgICBbVkFMVUUtSUYtRk9VTkRdLCBbVkFMVUUtSUYtTk9ULUZPVU5EXSwKKyMgICAgICAgICAgICAgICBbUEFUSF0sIFtSRUpFQ1RdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19BQ19DSEVDS19QUk9HXSwKK1sjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiQyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkMjsgYWNfd29yZD0kWzJdCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkYWNfd29yZF0pCitBQ19DQUNIRV9WQUwoYWNfY3ZfcHJvZ18kMSwKK1tpZiB0ZXN0IC1uICIkJDEiOyB0aGVuCisgIGFjX2N2X3Byb2dfJDE9IiQkMSIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCittNF9pZnZhbG4oWyQ2XSwKK1sgIGFjX3Byb2dfcmVqZWN0ZWQ9bm9dKWRubAorX0FTX1BBVEhfV0FMSyhbJDVdLAorW2ZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBBU19FWEVDVVRBQkxFX1AoWyIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0Il0pOyB0aGVuCittNF9pZnZhbG4oWyQ2XSwKK1sgICAgaWYgdGVzdCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPSAiJDYiOyB0aGVuCisgICAgICAgYWNfcHJvZ19yZWplY3RlZD15ZXMKKyAgICAgICBjb250aW51ZQorICAgICBmaV0pZG5sCisgICAgYWNfY3ZfcHJvZ18kMT0iJDMiCisgICAgX0FTX0VDSE9fTE9HKFtmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0XSkKKyAgICBicmVhayAyCisgIGZpCitkb25lXSkKK200X2lmdmFsbihbJDZdLAorW2lmIHRlc3QgJGFjX3Byb2dfcmVqZWN0ZWQgPSB5ZXM7IHRoZW4KKyAgIyBXZSBmb3VuZCBhIGJvZ29uIGluIHRoZSBwYXRoLCBzbyBtYWtlIHN1cmUgd2UgbmV2ZXIgdXNlIGl0LgorICBzZXQgZHVtbXkgJGFjX2N2X3Byb2dfJDEKKyAgc2hpZnQKKyAgaWYgdGVzdCAkW0AlOkBdICE9IDA7IHRoZW4KKyAgICAjIFdlIGNob3NlIGEgZGlmZmVyZW50IGNvbXBpbGVyIGZyb20gdGhlIGJvZ3VzIG9uZS4KKyAgICAjIEhvd2V2ZXIsIGl0IGhhcyB0aGUgc2FtZSBiYXNlbmFtZSwgc28gdGhlIGJvZ29uIHdpbGwgYmUgY2hvc2VuCisgICAgIyBmaXJzdCBpZiB3ZSBzZXQgJDEgdG8ganVzdCB0aGUgYmFzZW5hbWU7IHVzZSB0aGUgZnVsbCBmaWxlIG5hbWUuCisgICAgc2hpZnQKKyAgICBhY19jdl9wcm9nXyQxPSIkYXNfZGlyLyRhY193b3JkJHsxKycgJ30kW0BdIgorbTRfaWYoWyQyXSwgWyQ0XSwKK1sgIGVsc2UKKyAgICAjIERlZmF1bHQgaXMgYSBsb3Nlci4KKyAgICBBQ19NU0dfRVJST1IoWyQxPSQ2IHVuYWNjZXB0YWJsZSwgYnV0IG5vIG90aGVyICQ0IGZvdW5kIGluIGRubAorbTRfZGVmYXVsdChbJDVdLCBbXCRQQVRIXSldKQorXSlkbmwKKyAgZmkKK2ZpXSlkbmwKK2RubCBJZiBubyA0dGggYXJnIGlzIGdpdmVuLCBsZWF2ZSB0aGUgY2FjaGUgdmFyaWFibGUgdW5zZXQsCitkbmwgc28gQUNfQ0hFQ0tfUFJPR1Mgd2lsbCBrZWVwIGxvb2tpbmcuCittNF9pZnZhbG4oWyQ0XSwKK1sgIHRlc3QgLXogIiRhY19jdl9wcm9nXyQxIiAmJiBhY19jdl9wcm9nXyQxPSIkNCJdKWRubAorZmldKWRubAorJDE9JGFjX2N2X3Byb2dfJDEKK2lmIHRlc3QgLW4gIiQkMSI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVChbJCQxXSkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChbbm9dKQorZmkKK10pIyBfQUNfQ0hFQ0tfUFJPRworCisKKyMgQUNfQ0hFQ0tfUFJPRyhWQVJJQUJMRSwgUFJPRy1UTy1DSEVDSy1GT1IsCisjICAgICAgICAgICAgICAgW1ZBTFVFLUlGLUZPVU5EXSwgW1ZBTFVFLUlGLU5PVC1GT1VORF0sCisjICAgICAgICAgICAgICAgW1BBVEhdLCBbUkVKRUNUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19DSEVDS19QUk9HXSwKK1tfQUNfQ0hFQ0tfUFJPRygkQCkKK0FDX1NVQlNUKFskMV0pZG5sCitdKQorCisKKyMgQUNfQ0hFQ0tfUFJPR1MoVkFSSUFCTEUsIFBST0dTLVRPLUNIRUNLLUZPUiwgW1ZBTFVFLUlGLU5PVC1GT1VORF0sCisjICAgICAgICAgICAgICAgIFtQQVRIXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfQ0hFQ0tfUFJPR1NdLAorW2ZvciBhY19wcm9nIGluICQyCitkbworICBBQ19DSEVDS19QUk9HKFskMV0sIFskYWNfcHJvZ10sIFskYWNfcHJvZ10sICwgWyQ0XSkKKyAgdGVzdCAtbiAiJCQxIiAmJiBicmVhaworZG9uZQorbTRfaWZ2YWxuKFskM10sIFt0ZXN0IC1uICIkJDEiIHx8ICQxPSIkMyJdKV0pCisKKworIyBfQUNfUEFUSF9QUk9HKFZBUklBQkxFLCBQUk9HLVRPLUNIRUNLLUZPUiwgW1ZBTFVFLUlGLU5PVC1GT1VORF0sIFtQQVRIXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0FDX1BBVEhfUFJPR10sCitbIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkMiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJDI7IGFjX3dvcmQ9JFsyXQorQUNfTVNHX0NIRUNLSU5HKFtmb3IgJGFjX3dvcmRdKQorQUNfQ0FDSEVfVkFMKFthY19jdl9wYXRoXyQxXSwKK1tjYXNlICQkMSBpbgorICBbW1xcL11dKiB8ID86W1tcXC9dXSopCisgIGFjX2N2X3BhdGhfJDE9IiQkMSIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIF9BU19QQVRIX1dBTEsoWyQ0XSwKK1tmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgQVNfRVhFQ1VUQUJMRV9QKFsiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCJdKTsgdGhlbgorICAgIGFjX2N2X3BhdGhfJDE9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgX0FTX0VDSE9fTE9HKFtmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0XSkKKyAgICBicmVhayAyCisgIGZpCitkb25lXSkKK2RubCBJZiBubyAzcmQgYXJnIGlzIGdpdmVuLCBsZWF2ZSB0aGUgY2FjaGUgdmFyaWFibGUgdW5zZXQsCitkbmwgc28gQUNfUEFUSF9QUk9HUyB3aWxsIGtlZXAgbG9va2luZy4KK200X2lmdmFsbihbJDNdLAorWyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfJDEiICYmIGFjX2N2X3BhdGhfJDE9IiQzIl0pZG5sCisgIDs7Citlc2FjXSlkbmwKKyQxPSRhY19jdl9wYXRoXyQxCitpZiB0ZXN0IC1uICIkJDEiOyB0aGVuCisgIEFDX01TR19SRVNVTFQoWyQkMV0pCitlbHNlCisgIEFDX01TR19SRVNVTFQoW25vXSkKK2ZpCitdKSMgX0FDX1BBVEhfUFJPRworCisKKyMgQUNfUEFUSF9QUk9HKFZBUklBQkxFLCBQUk9HLVRPLUNIRUNLLUZPUiwgW1ZBTFVFLUlGLU5PVC1GT1VORF0sIFtQQVRIXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19QQVRIX1BST0ddLAorW19BQ19QQVRIX1BST0coJEApCitBQ19TVUJTVChbJDFdKWRubAorXSkKKworCisjIEFDX1BBVEhfUFJPR1MoVkFSSUFCTEUsIFBST0dTLVRPLUNIRUNLLUZPUiwgW1ZBTFVFLUlGLU5PVC1GT1VORF0sCisjICAgICAgICAgICAgICAgW1BBVEhdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX1BBVEhfUFJPR1NdLAorW2ZvciBhY19wcm9nIGluICQyCitkbworICBBQ19QQVRIX1BST0coWyQxXSwgWyRhY19wcm9nXSwgLCBbJDRdKQorICB0ZXN0IC1uICIkJDEiICYmIGJyZWFrCitkb25lCittNF9pZnZhbG4oWyQzXSwgW3Rlc3QgLW4gIiQkMSIgfHwgJDE9IiQzIl0pZG5sCitdKQorCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgR2VuZXJpYyBjaGVja3MgZm9yIHRvb2xzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBBQ19DSEVDS19UT09MX1BSRUZJWAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorQVVfREVGVU4oW0FDX0NIRUNLX1RPT0xfUFJFRklYXSkKKworCisjIF9BQ19UT09MX1dBUk4KKyMgLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19BQ19UT09MX1dBUk5dLAorW2Nhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCitBQ19NU0dfV0FSTihbdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0XSkKK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhY10pCisKKyMgQUNfUEFUSF9UT09MKFZBUklBQkxFLCBQUk9HLVRPLUNIRUNLLUZPUiwgW1ZBTFVFLUlGLU5PVC1GT1VORF0sIFtQQVRIXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgKFVzZSBkaWZmZXJlbnQgdmFyaWFibGVzICQxIGFuZCBhY19wdF8kMSBzbyB0aGF0IGNhY2hlIHZhcnMgZG9uJ3QgY29uZmxpY3QuKQorQUNfREVGVU4oW0FDX1BBVEhfVE9PTF0sCitbaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBBQ19QQVRIX1BST0coWyQxXSwgWyR7YWNfdG9vbF9wcmVmaXh9JDJdLCAsIFskNF0pCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfJDEiOyB0aGVuCisgIGFjX3B0XyQxPSQkMQorICBfQUNfUEFUSF9QUk9HKFthY19wdF8kMV0sIFskMl0sIFtdLCBbJDRdKQorICBpZiB0ZXN0ICJ4JGFjX3B0XyQxIiA9IHg7IHRoZW4KKyAgICAkMT0iJDMiCisgIGVsc2UKKyAgICBfQUNfVE9PTF9XQVJOCisgICAgJDE9JGFjX3B0XyQxCisgIGZpCitlbHNlCisgICQxPSIkYWNfY3ZfcGF0aF8kMSIKK2ZpCitdKSMgQUNfUEFUSF9UT09MCisKKworIyBBQ19DSEVDS19UT09MKFZBUklBQkxFLCBQUk9HLVRPLUNIRUNLLUZPUiwgW1ZBTFVFLUlGLU5PVC1GT1VORF0sIFtQQVRIXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIChVc2UgZGlmZmVyZW50IHZhcmlhYmxlcyAkMSBhbmQgYWNfY3RfJDEgc28gdGhhdCBjYWNoZSB2YXJzIGRvbid0IGNvbmZsaWN0LikKK0FDX0RFRlVOKFtBQ19DSEVDS19UT09MXSwKK1tpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIEFDX0NIRUNLX1BST0coWyQxXSwgWyR7YWNfdG9vbF9wcmVmaXh9JDJdLCBbJHthY190b29sX3ByZWZpeH0kMl0sICwgWyQ0XSkKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ18kMSI7IHRoZW4KKyAgYWNfY3RfJDE9JCQxCisgIF9BQ19DSEVDS19QUk9HKFthY19jdF8kMV0sIFskMl0sIFskMl0sIFtdLCBbJDRdKQorICBpZiB0ZXN0ICJ4JGFjX2N0XyQxIiA9IHg7IHRoZW4KKyAgICAkMT0iJDMiCisgIGVsc2UKKyAgICBfQUNfVE9PTF9XQVJOCisgICAgJDE9JGFjX2N0XyQxCisgIGZpCitlbHNlCisgICQxPSIkYWNfY3ZfcHJvZ18kMSIKK2ZpCitdKSMgQUNfQ0hFQ0tfVE9PTAorCisKKyMgQUNfQ0hFQ0tfVE9PTFMoVkFSSUFCTEUsIFBST0dTLVRPLUNIRUNLLUZPUiwgW1ZBTFVFLUlGLU5PVC1GT1VORF0sCisjICAgICAgICAgICAgICAgIFtQQVRIXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBlYWNoIHRvb2wgaW4gUFJPR1MtVE8tQ0hFQ0stRk9SIHdpdGggdGhlIGNyb3NzIHByZWZpeC4gSWYKKyMgbm9uZSBjYW4gYmUgZm91bmQgd2l0aCBhIGNyb3NzIHByZWZpeCwgdGhlbiB1c2UgdGhlIGZpcnN0IG9uZSB0aGF0CisjIHdhcyBmb3VuZCB3aXRob3V0IHRoZSBjcm9zcyBwcmVmaXguCitBQ19ERUZVTihbQUNfQ0hFQ0tfVE9PTFNdLAorW2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gJDIKKyAgZG8KKyAgICBBQ19DSEVDS19QUk9HKFskMV0sCisJCSAgWyRhY190b29sX3ByZWZpeCRhY19wcm9nXSwgWyRhY190b29sX3ByZWZpeCRhY19wcm9nXSwsCisJCSAgWyQ0XSkKKyAgICB0ZXN0IC1uICIkJDEiICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkJDEiOyB0aGVuCisgIGFjX2N0XyQxPSQkMQorICBBQ19DSEVDS19QUk9HUyhbYWNfY3RfJDFdLCBbJDJdLCBbXSwgWyQ0XSkKKyAgaWYgdGVzdCAieCRhY19jdF8kMSIgPSB4OyB0aGVuCisgICAgJDE9IiQzIgorICBlbHNlCisgICAgX0FDX1RPT0xfV0FSTgorICAgICQxPSRhY19jdF8kMQorICBmaQorZmkKK10pIyBBQ19DSEVDS19UT09MUworCisKKyMgQUNfUEFUSF9UQVJHRVRfVE9PTChWQVJJQUJMRSwgUFJPRy1UTy1DSEVDSy1GT1IsIFtWQUxVRS1JRi1OT1QtRk9VTkRdLCBbUEFUSF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAoVXNlIGRpZmZlcmVudCB2YXJpYWJsZXMgJDEgYW5kIGFjX3B0XyQxIHNvIHRoYXQgY2FjaGUgdmFycyBkb24ndCBjb25mbGljdC4pCitBQ19ERUZVTihbQUNfUEFUSF9UQVJHRVRfVE9PTF0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX1RBUkdFVF0pZG5sCitBQ19QQVRIX1BST0coWyQxXSwgWyR0YXJnZXRfYWxpYXMtJDJdLCAsIFskNF0pCitpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF8kMSI7IHRoZW4KKyAgaWYgdGVzdCAiJGJ1aWxkIiA9ICIkdGFyZ2V0IjsgdGhlbgorICAgIGFjX3B0XyQxPSQkMQorICAgIF9BQ19QQVRIX1BST0coW2FjX3B0XyQxXSwgWyQyXSwgWyQzXSwgWyQ0XSkKKyAgICAkMT0kYWNfcHRfJDEKKyAgZWxzZQorICAgICQxPSIkMyIKKyAgZmkKK2Vsc2UKKyAgJDE9IiRhY19jdl9wYXRoXyQxIgorZmkKK10pIyBBQ19QQVRIX1RBUkdFVF9UT09MCisKKworIyBBQ19DSEVDS19UQVJHRVRfVE9PTChWQVJJQUJMRSwgUFJPRy1UTy1DSEVDSy1GT1IsIFtWQUxVRS1JRi1OT1QtRk9VTkRdLCBbUEFUSF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgKFVzZSBkaWZmZXJlbnQgdmFyaWFibGVzICQxIGFuZCBhY19jdF8kMSBzbyB0aGF0IGNhY2hlIHZhcnMgZG9uJ3QgY29uZmxpY3QuKQorQUNfREVGVU4oW0FDX0NIRUNLX1RBUkdFVF9UT09MXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfVEFSR0VUXSlkbmwKK0FDX0NIRUNLX1BST0coWyQxXSwgWyR0YXJnZXRfYWxpYXMtJDJdLCBbJHRhcmdldF9hbGlhcy0kMl0sICwgWyQ0XSkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nXyQxIjsgdGhlbgorICBpZiB0ZXN0ICIkYnVpbGQiID0gIiR0YXJnZXQiOyB0aGVuCisgICAgYWNfY3RfJDE9JCQxCisgICAgX0FDX0NIRUNLX1BST0coW2FjX2N0XyQxXSwgWyQyXSwgWyQyXSwgWyQzXSwgWyQ0XSkKKyAgICAkMT0kYWNfY3RfJDEKKyAgZWxzZQorICAgICQxPSIkMyIKKyAgZmkKK2Vsc2UKKyAgJDE9IiRhY19jdl9wcm9nXyQxIgorZmkKK10pIyBBQ19DSEVDS19UQVJHRVRfVE9PTAorCisKKyMgQUNfQ0hFQ0tfVEFSR0VUX1RPT0xTKFZBUklBQkxFLCBQUk9HUy1UTy1DSEVDSy1GT1IsIFtWQUxVRS1JRi1OT1QtRk9VTkRdLAorIwkgICAgICAgICAgICAgICAgW1BBVEhdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBlYWNoIHRvb2wgaW4gUFJPR1MtVE8tQ0hFQ0stRk9SIHdpdGggdGhlIGNyb3NzIHByZWZpeC4gSWYKKyMgbm9uZSBjYW4gYmUgZm91bmQgd2l0aCBhIGNyb3NzIHByZWZpeCwgdGhlbiB1c2UgdGhlIGZpcnN0IG9uZSB0aGF0CisjIHdhcyBmb3VuZCB3aXRob3V0IHRoZSBjcm9zcyBwcmVmaXguCitBQ19ERUZVTihbQUNfQ0hFQ0tfVEFSR0VUX1RPT0xTXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfVEFSR0VUXSlkbmwKK2ZvciBhY19wcm9nIGluICQyCitkbworICBBQ19DSEVDS19QUk9HKFskMV0sCisJCVskdGFyZ2V0X2FsaWFzLSRhY19wcm9nXSwgWyR0YXJnZXRfYWxpYXMtJGFjX3Byb2ddLCwKKwkJWyQ0XSkKKyAgdGVzdCAtbiAiJCQxIiAmJiBicmVhaworZG9uZQoraWYgdGVzdCAteiAiJCQxIjsgdGhlbgorICBpZiB0ZXN0ICIkYnVpbGQiID0gIiR0YXJnZXQiOyB0aGVuCisgICAgYWNfY3RfJDE9JCQxCisgICAgQUNfQ0hFQ0tfUFJPR1MoW2FjX2N0XyQxXSwgWyQyXSwgWyQzXSwgWyQ0XSkKKyAgICAkMT0kYWNfY3RfJDEKKyAgZWxzZQorICAgICQxPSIkMyIKKyAgZmkKK2ZpCitdKSMgQUNfQ0hFQ0tfVEFSR0VUX1RPT0xTCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisjIyBTcGVjaWZpYyB0ZXN0cy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgUGxlYXNlLCBrZWVwIHRoaXMgc2VjdGlvbiBzb3J0ZWQuCisjIChCdXQgb2YgY291cnNlIHdoZW4ga2VlcGluZyByZWxhdGVkIHRoaW5ncyB0b2dldGhlcikuCisKKyMgQ2hlY2sgZm9yIGdhd2sgZmlyc3Qgc2luY2UgaXQncyBnZW5lcmFsbHkgYmV0dGVyLgorQU5fTUFLRVZBUihbQVdLXSwgIFtBQ19QUk9HX0FXS10pCitBTl9QUk9HUkFNKFthd2tdLCAgW0FDX1BST0dfQVdLXSkKK0FOX1BST0dSQU0oW2dhd2tdLCBbQUNfUFJPR19BV0tdKQorQU5fUFJPR1JBTShbbWF3a10sIFtBQ19QUk9HX0FXS10pCitBTl9QUk9HUkFNKFtuYXdrXSwgW0FDX1BST0dfQVdLXSkKK0FDX0RFRlVOKFtBQ19QUk9HX0FXS10sCitbQUNfQ0hFQ0tfUFJPR1MoQVdLLCBnYXdrIG1hd2sgbmF3ayBhd2ssICldKQorCisKKyMgQUNfUFJPR19FR1JFUAorIyAtLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfUFJPR19FR1JFUF0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19HUkVQXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgZWdyZXBdLCBhY19jdl9wYXRoX0VHUkVQLAorICAgW2lmIGVjaG8gYSB8ICRHUkVQIC1FICcoYXxiKScgPi9kZXYvbnVsbCAyPiYxCisgICB0aGVuIGFjX2N2X3BhdGhfRUdSRVA9IiRHUkVQIC1FIgorICAgZWxzZQorICAgICBfQUNfUFJPR19HUkVQKEVHUkVQLCBlZ3JlcCwgWydFR1JFUCQnXSkKKyAgIGZpXSkKKyBFR1JFUD0iJGFjX2N2X3BhdGhfRUdSRVAiCisgQUNfU1VCU1QoW0VHUkVQXSkKK10pIyBBQ19QUk9HX0VHUkVQCisKKworIyBBQ19QUk9HX0ZHUkVQCisjIC0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19QUk9HX0ZHUkVQXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0dSRVBdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW2ZvciBmZ3JlcF0sIGFjX2N2X3BhdGhfRkdSRVAsCisgICBbaWYgZWNobyAnYWIqYycgfCAkR1JFUCAtRiAnYWIqYycgPi9kZXYvbnVsbCAyPiYxCisgICB0aGVuIGFjX2N2X3BhdGhfRkdSRVA9IiRHUkVQIC1GIgorICAgZWxzZQorICAgICBfQUNfUFJPR19HUkVQKEZHUkVQLCBmZ3JlcCwgW0ZHUkVQXSkKKyAgIGZpXSkKKyBGR1JFUD0iJGFjX2N2X3BhdGhfRkdSRVAiCisgQUNfU1VCU1QoW0ZHUkVQXSkKK10pIyBBQ19QUk9HX0ZHUkVQCisKKworIyBBQ19QUk9HX0dSRVAKKyMgLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBhIGZ1bGx5IGZ1bmN0aW9uYWwgZ3JlcCBwcm9ncmFtIHRoYXQgaGFuZGxlcworIyB0aGUgbG9uZ2VzdCBsaW5lcyBwb3NzaWJsZSBhbmQgd2hpY2ggcmVzcGVjdHMgbXVsdGlwbGUgLWUgb3B0aW9ucy4KKyMgUHJlZmVyIEdOVSBncmVwIGlmIGZvdW5kLgorQUNfREVGVU4oW0FDX1BST0dfR1JFUF0sCitbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZV0sIGFjX2N2X3BhdGhfR1JFUCwKKyAgIFtfJDAoR1JFUCwgW2dyZXAgZ2dyZXBdLCBbLWUgJ0dSRVAkJyAtZSAnLShjYW5ub3QgbWF0Y2gpLSddKV0pCisgR1JFUD0iJGFjX2N2X3BhdGhfR1JFUCIKKyBBQ19TVUJTVChbR1JFUF0pCitdKQorCisKKyMgX0FDX1BST0dfR1JFUChWQVJJQUJMRSwgUFJPR05BTUUtTElTVCwgUFJPRy1BUkdVTUVOVFMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTb2xhcmlzIDkgL3Vzci94cGc0L2Jpbi8qZ3JlcCBpcyBzdWl0YWJsZSwgYnV0IC91c3IvYmluLypncmVwIGxhY2tzIC1lLgorIyBBSVggc2lsZW50bHkgdHJ1bmNhdGVzIGxvbmcgbGluZXMgYmVmb3JlIG1hdGNoaW5nLgorIyBOZVhUIHVuZGVyc3RhbmRzIG9ubHkgb25lIC1lIGFuZCB0cnVuY2F0ZXMgbG9uZyBsaW5lcy4KK200X2RlZmluZShbX0FDX1BST0dfR1JFUF0sCitbX0FDX1BBVEhfUFJPR1NfRkVBVFVSRV9DSEVDSyhbJDFdLCBbJDJdLAorCVtfQUNfRkVBVFVSRV9DSEVDS19MRU5HVEgoW2FjX3BhdGhfJDFdLCBbYWNfY3ZfcGF0aF8kMV0sCisJCVsiJGFjX3BhdGhfJDEiICQzXSwgWyQxXSldLCBbXSwKKwlbJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluXSlkbmwKK10pCisKKworIyBfQUNfUEFUSF9QUk9HU19GRUFUVVJFX0NIRUNLKFZBUklBQkxFLCBQUk9HTkFNRS1MSVNULCBGRUFUVVJFLVRFU1QsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FDVElPTi1JRi1OT1QtRk9VTkRdLCBbUEFUSD0kUEFUSF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRkVBVFVSRS1URVNUIGlzIGNhbGxlZCByZXBlYXRlZGx5IHdpdGggJGFjX3BhdGhfVkFSSUFCTEUgc2V0IHRvIHRoZQorIyBuYW1lIG9mIGEgcHJvZ3JhbSBpbiBQUk9HTkFNRS1MSVNUIGZvdW5kIGluIFBBVEguICBGRUFUVVJFLVRFU1QgbXVzdCBzZXQKKyMgJGFjX2N2X3BhdGhfVkFSSUFCTEUgdG8gdGhlIHBhdGggb2YgYW4gYWNjZXB0YWJsZSBwcm9ncmFtLCBvciBlbHNlCisjIEFDVElPTi1JRi1OT1QtRk9VTkQgaXMgZXhlY3V0ZWQ7IHRoZSBkZWZhdWx0IGFjdGlvbiAoZm9yIGludGVybmFsIHVzZQorIyBvbmx5KSBpc3N1ZXMgYSBmYXRhbCBlcnJvciBtZXNzYWdlLiAgSWYgYSBzdWl0YWJsZSAkYWNfcGF0aF9WQVJJQUJMRSBpcworIyBmb3VuZCBpbiB0aGUgRkVBVFVSRS1URVNUIG1hY3JvLCBpdCBjYW4gc2V0ICRhY19wYXRoX1ZBUklBQkxFX2ZvdW5kPSc6JworIyB0byBhY2NlcHQgdGhhdCB2YWx1ZSB3aXRob3V0IGFueSBmdXJ0aGVyIGNoZWNrcy4KK200X2RlZmluZShbX0FDX1BBVEhfUFJPR1NfRkVBVFVSRV9DSEVDS10sCitbaWYgdGVzdCAteiAiJCQxIjsgdGhlbgorICBhY19wYXRoXyQxX2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIF9BU19QQVRIX1dBTEsoWyQ1XSwKKyAgW2ZvciBhY19wcm9nIGluICQyOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF8kMT0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIEFTX0VYRUNVVEFCTEVfUChbIiRhY19wYXRoXyQxIl0pIHx8IGNvbnRpbnVlCiskMworICAgICAgJGFjX3BhdGhfJDFfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZV0pZG5sCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoXyQxIjsgdGhlbgorICAgIG00X2RlZmF1bHQoWyQ0XSwKKyAgICAgIFtBQ19NU0dfRVJST1IoW25vIGFjY2VwdGFibGUgbTRfYnBhdHN1YnN0KFskMl0sIFsgLipdKSBjb3VsZCBiZSBkbmwKK2ZvdW5kIGluIG00X2RlZmF1bHQoWyQ1XSwgW1wkUEFUSF0pXSldKQorICBmaQorZWxzZQorICBhY19jdl9wYXRoXyQxPSQkMQorZmkKK10pCisKKworIyBBQ19QQVRIX1BST0dTX0ZFQVRVUkVfQ0hFQ0soVkFSSUFCTEUsIFBST0dOQU1FLUxJU1QsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRUFUVVJFLVRFU1QsIFtBQ1RJT04tSUYtTk9ULUZPVU5EPTpdLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1BBVEg9JFBBVEhdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlc2lnbmVkIHRvIGJlIHVzZWQgaW5zaWRlIEFDX0NBQ0hFX1ZBTC4gIEl0IGlzIHJlY29tbWVuZGVkLAorIyBidXQgbm90IHJlcXVpcmVkLCB0aGF0IHRoZSB1c2VyIGFsc28gdXNlIEFDX0FSR19WQVIoW1ZBUklBQkxFXSkuCisjIElmIFZBUklBQkxFIGlzIG5vdCBlbXB0eSwgc2V0IHRoZSBjYWNoZSB2YXJpYWJsZQorIyAkYWNfY3ZfcGF0aF9WQVJJQUJMRSB0byBWQVJJQUJMRSB3aXRob3V0IGFueSBmdXJ0aGVyIHRlc3RzLgorIyBPdGhlcndpc2UsIGNhbGwgRkVBVFVSRV9URVNUIHJlcGVhdGVkbHkgd2l0aCAkYWNfcGF0aF9WQVJJQUJMRQorIyBzZXQgdG8gdGhlIG5hbWUgb2YgYSBwcm9ncmFtIGluIFBST0dOQU1FLUxJU1QgZm91bmQgaW4gUEFUSC4gIElmCisjIG5vIGludm9jYXRpb24gb2YgRkVBVFVSRS1URVNUIHNldHMgJGFjX2N2X3BhdGhfVkFSSUFCTEUgdG8gdGhlCisjIHBhdGggb2YgYW4gYWNjZXB0YWJsZSBwcm9ncmFtLCBBQ1RJT04tSUYtTk9ULUZPVU5EIGlzIGV4ZWN1dGVkLgorIyBGRUFUVVJFLVRFU1QgaXMgaW52b2tlZCBldmVuIHdoZW4gJGFjX2N2X3BhdGhfVkFSSUFCTEUgaXMgc2V0LAorIyBpbiBjYXNlIGEgYmV0dGVyIGNhbmRpZGF0ZSBvY2N1cnMgbGF0ZXIgaW4gUEFUSDsgdG8gYWNjZXB0IHRoZQorIyBjdXJyZW50IHNldHRpbmcgYW5kIGJ5cGFzcyBmdXJ0aGVyIGNoZWNrcywgRkVBVFVSRS1URVNUIGNhbiBzZXQKKyMgJGFjX3BhdGhfVkFSSUFCTEVfZm91bmQ9JzonLiAgTm90ZSB0aGF0LCB1bmxpa2UgQUNfQ0hFQ0tfUFJPR1MsCisjIHRoaXMgbWFjcm8gZG9lcyBub3QgaGF2ZSBhbnkgc2lkZSBlZmZlY3Qgb24gdGhlIGN1cnJlbnQgdmFsdWUKKyMgb2YgVkFSSUFCTEUuCittNF9kZWZpbmUoW0FDX1BBVEhfUFJPR1NfRkVBVFVSRV9DSEVDS10sCitbXyQwKFskMV0sIFskMl0sIFskM10sIG00X2RlZmF1bHQoWyQ0XSwgWzpdKSwgWyQ1XSlkbmwKK10pCisKKworIyBfQUNfRkVBVFVSRV9DSEVDS19MRU5HVEgoUFJPR1BBVEgsIENBQ0hFLVZBUiwgQ0hFQ0stQ01ELCBbTUFUQ0gtU1RSSU5HXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZvciB1c2UgYXMgdGhlIEZFQVRVUkUtVEVTVCBhcmd1bWVudCB0byBfQUNfUEFUSF9QUk9HU19GRUFUVVJFX1RFU1QuCisjIE9uIGVhY2ggaXRlcmF0aW9uIHJ1biBDSEVDSy1DTUQgb24gYW4gaW5wdXQgZmlsZSwgc3RvcmluZyB0aGUgdmFsdWUKKyMgb2YgUFJPR1BBVEggaW4gQ0FDSEUtVkFSIGlmIHRoZSBDSEVDSy1DTUQgc3VjY2VlZHMuICBUaGUgaW5wdXQgZmlsZQorIyBpcyBhbHdheXMgb25lIGxpbmUsIHN0YXJ0aW5nIHdpdGggb25seSAxMCBjaGFyYWN0ZXJzLCBhbmQgZG91YmxpbmcKKyMgaW4gbGVuZ3RoIGF0IGVhY2ggaXRlcmF0aW9uIHVudGlsIGFwcHJveCAxMDAwMCBjaGFyYWN0ZXJzIG9yIHRoZQorIyBmZWF0dXJlIGNoZWNrIHN1Y2NlZWRzLiAgVGhlIGZlYXR1cmUgY2hlY2sgaXMgY2FsbGVkIGF0IGVhY2gKKyMgaXRlcmF0aW9uIGJ5IGFwcGVuZGluZyAob3B0aW9uYWxseSwgTUFUQ0gtU1RSSU5HIGFuZCkgYSBuZXdsaW5lCisjIHRvIHRoZSBmaWxlLCBhbmQgdXNpbmcgdGhlIHJlc3VsdCBhcyBpbnB1dCB0byBDSEVDSy1DTUQuCittNF9kZWZpbmUoW19BQ19GRUFUVVJFX0NIRUNLX0xFTkdUSF0sCitbIyBDaGVjayBmb3IgR05VICQxIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgIF9BQ19QQVRIX1BST0dfRkxBVk9SX0dOVShbJCQxXSwKKyAgICBbJDI9IiQkMSIgJDFfZm91bmQ9Ol0sCisgIFthY19jb3VudD0wCisgIEFTX0VDSE9fTihbMDEyMzQ1Njc4OV0pID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICBBU19FQ0hPKFsnJDQnXSkgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICQzIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgQVNfVkFSX0FSSVRIKFthY19jb3VudF0sIFskYWNfY291bnQgKyAxXSkKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHskMV9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgJDI9IiQkMSIKK2RubCAgICMgVXNpbmcgJDFfbWF4IHNvIHRoYXQgZWFjaCB0b29sIGZlYXR1cmUgY2hlY2tlZCBnZXRzIGl0cworZG5sICAgIyBvd24gdmFyaWFibGUuICBEb24ndCByZXNldCBpdCBvdGhlcndpc2UgdGhlIGltcGxpZWQgc2VhcmNoCitkbmwgICAjIGZvciBiZXN0IHBlcmZvcm1pbmcgdG9vbCBpbiBhIGxpc3QgYnJlYWtzIGRvd24uCisgICAgICAkMV9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dF0pZG5sCitdKQorCisKKyMgX0FDX1BBVEhfUFJPR19GTEFWT1JfR05VKFBST0dSQU0tUEFUSCwgSUYtU1VDQ0VTUywgW0lGLUZBSUxVUkVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19BQ19QQVRIX1BST0dfRkxBVk9SX0dOVV0sCitbIyBDaGVjayBmb3IgR05VICQxCitjYXNlIGAiJDEiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgICQyOzsKK200X2lmdmFsKFskM10sCitbKikKKyAgJDM7OworXSllc2FjCitdKSMgX0FDX1BBVEhfUFJPR19GTEFWT1JfR05VCisKKworIyBBQ19QUk9HX0lOU1RBTEwKKyMgLS0tLS0tLS0tLS0tLS0tCitBTl9NQUtFVkFSKFtJTlNUQUxMXSwgW0FDX1BST0dfSU5TVEFMTF0pCitBTl9QUk9HUkFNKFtpbnN0YWxsXSwgW0FDX1BST0dfSU5TVEFMTF0pCitBQ19ERUZVTl9PTkNFKFtBQ19QUk9HX0lOU1RBTExdLAorW0FDX1JFUVVJUkUoW0FDX0NPTkZJR19BVVhfRElSX0RFRkFVTFRdKWRubAorQUNfUkVRVUlSRV9BVVhfRklMRShbaW5zdGFsbC1zaF0pZG5sCisjIEZpbmQgYSBnb29kIGluc3RhbGwgcHJvZ3JhbS4gIFdlIHByZWZlciBhIEMgcHJvZ3JhbSAoZmFzdGVyKSwKKyMgc28gb25lIHNjcmlwdCBpcyBhcyBnb29kIGFzIGFub3RoZXIuICBCdXQgYXZvaWQgdGhlIGJyb2tlbiBvcgorIyBpbmNvbXBhdGlibGUgdmVyc2lvbnM6CisjIFN5c1YgL2V0Yy9pbnN0YWxsLCAvdXNyL3NiaW4vaW5zdGFsbAorIyBTdW5PUyAvdXNyL2V0Yy9pbnN0YWxsCisjIElSSVggL3NiaW4vaW5zdGFsbAorIyBBSVggL2Jpbi9pbnN0YWxsCisjIEFtaWdhT1MgL0MvaW5zdGFsbCwgd2hpY2ggaW5zdGFsbHMgYm9vdGJsb2NrcyBvbiBmbG9wcHkgZGlzY3MKKyMgQUlYIDQgL3Vzci9iaW4vaW5zdGFsbGJzZCwgd2hpY2ggZG9lc24ndCB3b3JrIHdpdGhvdXQgYSAtZyBmbGFnCisjIEFGUyAvdXNyL2Fmc3dzL2Jpbi9pbnN0YWxsLCB3aGljaCBtaXNoYW5kbGVzIG5vbmV4aXN0ZW50IGFyZ3MKKyMgU1ZSNCAvdXNyL3VjYi9pbnN0YWxsLCB3aGljaCB0cmllcyB0byB1c2UgdGhlIG5vbmV4aXN0ZW50IGdyb3VwICJzdGFmZiIKKyMgT1MvMidzIHN5c3RlbSBpbnN0YWxsLCB3aGljaCBoYXMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBzZW1hbnRpYworIyAuL2luc3RhbGwsIHdoaWNoIGNhbiBiZSBlcnJvbmVvdXNseSBjcmVhdGVkIGJ5IG1ha2UgZnJvbSAuL2luc3RhbGwuc2guCisjIFJlamVjdCBpbnN0YWxsIHByb2dyYW1zIHRoYXQgY2Fubm90IGluc3RhbGwgbXVsdGlwbGUgZmlsZXMuCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGxdKQoraWYgdGVzdCAteiAiJElOU1RBTEwiOyB0aGVuCitBQ19DQUNIRV9WQUwoYWNfY3ZfcGF0aF9pbnN0YWxsLAorW19BU19QQVRIX1dBTEsoWyRQQVRIXSwKK1tbIyBBY2NvdW50IGZvciBwZW9wbGUgd2hvIHB1dCB0cmFpbGluZyBzbGFzaGVzIGluIFBBVEggZWxlbWVudHMuCitjYXNlICRhc19kaXIvIGluIEAlOkAoKAorICAuLyB8IC4vLyB8IC9bY0NdLyogfCBcCisgIC9ldGMvKiB8IC91c3Ivc2Jpbi8qIHwgL3Vzci9ldGMvKiB8IC9zYmluLyogfCAvdXNyL2Fmc3dzL2Jpbi8qIHwgXAorICA/OltcXC9db3MyW1xcL11pbnN0YWxsW1xcL10qIHwgPzpbXFwvXU9TMltcXC9dSU5TVEFMTFtcXC9dKiB8IFwKKyAgL3Vzci91Y2IvKiApIDs7CisgICopXQorICAgICMgT1NGMSBhbmQgU0NPIE9EVCAzLjAgaGF2ZSB0aGVpciBvd24gbmFtZXMgZm9yIGluc3RhbGwuCisgICAgIyBEb24ndCB1c2UgaW5zdGFsbGJzZCBmcm9tIE9TRiBzaW5jZSBpdCBpbnN0YWxscyBzdHVmZiBhcyByb290CisgICAgIyBieSBkZWZhdWx0LgorICAgIGZvciBhY19wcm9nIGluIGdpbnN0YWxsIHNjb2luc3QgaW5zdGFsbDsgZG8KKyAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworCWlmIEFTX0VYRUNVVEFCTEVfUChbIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiXSk7IHRoZW4KKwkgIGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisJICAgIGdyZXAgZHNwbXNnICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgICAgIyBBSVggaW5zdGFsbC4gIEl0IGhhcyBhbiBpbmNvbXBhdGlibGUgY2FsbGluZyBjb252ZW50aW9uLgorCSAgICA6CisJICBlbGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisJICAgIGdyZXAgcHdwbHVzICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgICAgIyBwcm9ncmFtLXNwZWNpZmljIGluc3RhbGwgc2NyaXB0IHVzZWQgYnkgSFAgcHdwbHVzLS1kb24ndCB1c2UuCisJICAgIDoKKwkgIGVsc2UKKwkgICAgcm0gLXJmIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gY29uZnRlc3QuZGlyCisJICAgIGVjaG8gb25lID4gY29uZnRlc3Qub25lCisJICAgIGVjaG8gdHdvID4gY29uZnRlc3QudHdvCisJICAgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorCSAgICBpZiAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgLWMgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byAiYHB3ZGAvY29uZnRlc3QuZGlyIiAmJgorCSAgICAgIHRlc3QgLXMgY29uZnRlc3Qub25lICYmIHRlc3QgLXMgY29uZnRlc3QudHdvICYmCisJICAgICAgdGVzdCAtcyBjb25mdGVzdC5kaXIvY29uZnRlc3Qub25lICYmCisJICAgICAgdGVzdCAtcyBjb25mdGVzdC5kaXIvY29uZnRlc3QudHdvCisJICAgIHRoZW4KKwkgICAgICBhY19jdl9wYXRoX2luc3RhbGw9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQgLWMiCisJICAgICAgYnJlYWsgMworCSAgICBmaQorCSAgZmkKKwlmaQorICAgICAgZG9uZQorICAgIGRvbmUKKyAgICA7OworZXNhYworXSkKK3JtIC1yZiBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvIGNvbmZ0ZXN0LmRpcgorXSlkbmwKKyAgaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgICBJTlNUQUxMPSRhY19jdl9wYXRoX2luc3RhbGwKKyAgZWxzZQorICAgICMgQXMgYSBsYXN0IHJlc29ydCwgdXNlIHRoZSBzbG93IHNoZWxsIHNjcmlwdC4gIERvbid0IGNhY2hlIGEKKyAgICAjIHZhbHVlIGZvciBJTlNUQUxMIHdpdGhpbiBhIHNvdXJjZSBkaXJlY3RvcnksIGJlY2F1c2UgdGhhdCB3aWxsCisgICAgIyBicmVhayBvdGhlciBwYWNrYWdlcyB1c2luZyB0aGUgY2FjaGUgaWYgdGhhdCBkaXJlY3RvcnkgaXMKKyAgICAjIHJlbW92ZWQsIG9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlbGF0aXZlIG5hbWUuCisgICAgSU5TVEFMTD0kYWNfaW5zdGFsbF9zaAorICBmaQorZmkKK2RubCBEbyBzcGVjaWFsIG1hZ2ljIGZvciBJTlNUQUxMIGluc3RlYWQgb2YgQUNfU1VCU1QsIHRvIGdldAorZG5sIHJlbGF0aXZlIG5hbWVzIHJpZ2h0LgorQUNfTVNHX1JFU1VMVChbJElOU1RBTExdKQorCisjIFVzZSB0ZXN0IC16IGJlY2F1c2UgU3VuT1M0IHNoIG1pc2hhbmRsZXMgYnJhY2VzIGluICR7dmFyLXZhbH0uCisjIEl0IHRoaW5rcyB0aGUgZmlyc3QgY2xvc2UgYnJhY2UgZW5kcyB0aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9uLgordGVzdCAteiAiJElOU1RBTExfUFJPR1JBTSIgJiYgSU5TVEFMTF9QUk9HUkFNPScke0lOU1RBTEx9JworQUNfU1VCU1QoSU5TVEFMTF9QUk9HUkFNKWRubAorCit0ZXN0IC16ICIkSU5TVEFMTF9TQ1JJUFQiICYmIElOU1RBTExfU0NSSVBUPScke0lOU1RBTEx9JworQUNfU1VCU1QoSU5TVEFMTF9TQ1JJUFQpZG5sCisKK3Rlc3QgLXogIiRJTlNUQUxMX0RBVEEiICYmIElOU1RBTExfREFUQT0nJHtJTlNUQUxMfSAtbSA2NDQnCitBQ19TVUJTVChJTlNUQUxMX0RBVEEpZG5sCitdKSMgQUNfUFJPR19JTlNUQUxMCisKKworIyBBQ19QUk9HX01LRElSX1AKKyMgLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgYG1rZGlyIC1wJyBpcyBrbm93biB0byBiZSB0aHJlYWQtc2FmZSwgYW5kIGZhbGwgYmFjayB0bworIyBpbnN0YWxsLXNoIC1kIG90aGVyd2lzZS4KKyMKKyMgQXV0b21ha2UgMS44IHVzZWQgYG1rZGlyIC1tIDA3NTUgLXAgLS0nIHRvIGVuc3VyZSB0aGF0IGRpcmVjdG9yaWVzCisjIGNyZWF0ZWQgYnkgYG1ha2UgaW5zdGFsbCcgYXJlIGFsd2F5cyB3b3JsZCByZWFkYWJsZSwgZXZlbiBpZiB0aGUKKyMgaW5zdGFsbGVyIGhhcHBlbnMgdG8gaGF2ZSBhbiBvdmVybHkgcmVzdHJpY3RpdmUgdW1hc2sgKGUuZy4gMDc3KS4KKyMgVGhpcyB3YXMgYSBtaXN0YWtlLiAgVGhlcmUgYXJlIGF0IGxlYXN0IHR3byByZWFzb25zIHdoeSB3ZSBtdXN0IG5vdAorIyB1c2UgYC1tIDA3NTUnOgorIyAgIC0gaXQgY2F1c2VzIHNwZWNpYWwgYml0cyBsaWtlIFNHSUQgdG8gYmUgaWdub3JlZCwKKyMgICAtIGl0IG1heSBiZSB0b28gcmVzdHJpY3RpdmUgKHNvbWUgc2V0dXBzIGV4cGVjdCA3NzUgZGlyZWN0b3JpZXMpLgorIworIyBEbyBub3QgdXNlIC1tIDA3NTUgYW5kIGxldCBwZW9wbGUgY2hvb3NlIHdoYXRldmVyIHRoZXkgZXhwZWN0IGJ5CisjIHNldHRpbmcgdW1hc2suCisjCisjIFdlIGNhbm5vdCBhY2NlcHQgYW55IGltcGxlbWVudGF0aW9uIG9mIGBta2RpcicgdGhhdCByZWNvZ25pemVzIGAtcCcuCisjIFNvbWUgaW1wbGVtZW50YXRpb25zIChzdWNoIGFzIFNvbGFyaXMgOCdzKSBhcmUgdnVsbmVyYWJsZSB0byByYWNlIGNvbmRpdGlvbnM6CisjIGlmIGEgcGFyYWxsZWwgbWFrZSB0cmllcyB0byBydW4gYG1rZGlyIC1wIGEvYicgYW5kIGBta2RpciAtcCBhL2MnCisjIGNvbmN1cnJlbnRseSwgYm90aCB2ZXJzaW9uIGNhbiBkZXRlY3QgdGhhdCBhLyBpcyBtaXNzaW5nLCBidXQgb25seQorIyBvbmUgY2FuIGNyZWF0ZSBpdCBhbmQgdGhlIG90aGVyIHdpbGwgZXJyb3Igb3V0LiAgQ29uc2VxdWVudGx5IHdlCisjIHJlc3RyaWN0IG91cnNlbHZlcyB0byBrbm93biByYWNlLWZyZWUgaW1wbGVtZW50YXRpb25zLgorIworIyBBdXRvbWFrZSB1c2VkIHRvIGRlZmluZSBta2Rpcl9wIGFzIGBta2RpciAtcCAuJywgaW4gb3JkZXIgdG8KKyMgYWxsb3cgJChta2Rpcl9wKSB0byBiZSB1c2VkIHdpdGhvdXQgYXJndW1lbnQuICBBcyBpbgorIyAgICQobWtkaXJfcCkgJChzb21lZGlyKQorIyB3aGVyZSAkKHNvbWVkaXIpIGlzIGNvbmRpdGlvbmFsbHkgZGVmaW5lZC4gIEhvd2V2ZXIgd2UgZG9uJ3QgZG8KKyMgdGhhdCBmb3IgTUtESVJfUC4KKyMgIDEuIGJlZm9yZSB3ZSByZXN0cmljdGVkIHRoZSBjaGVjayB0byBHTlUgbWtkaXIsIGBta2RpciAtcCAuJyB3YXMKKyMgICAgIHJlcG9ydGVkIHRvIGZhaWwgaW4gcmVhZC1vbmx5IGRpcmVjdG9yaWVzLiAgVGhlIHN5c3RlbSB3aGVyZSB0aGlzCisjICAgICBoYXBwZW5lZCBoYXMgYmVlbiBmb3Jnb3R0ZW4uCisjICAyLiBpbiBwcmFjdGljZSB3ZSBjYWxsICQoTUtESVJfUCkgb24gZGlyZWN0b3JpZXMgc3VjaCBhcworIyAgICAgICAkKE1LRElSX1ApICIkKERFU1RESVIpJChzb21lZGlyKSIKKyMgICAgIGFuZCB3ZSBkb24ndCB3YW50IHRvIGNyZWF0ZSAkKERFU1RESVIpIGlmICQoc29tZWRpcikgaXMgZW1wdHkuCisjICAgICBUbyBzdXBwb3J0IHRoZSBsYXR0ZXIgY2FzZSwgd2UgaGF2ZSB0byB3cml0ZQorIyAgICAgICB0ZXN0IC16ICIkKHNvbWVkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChzb21lZGlyKSIKKyMgICAgIHNvICQoTUtESVJfUCkgYWx3YXlzIGhhcyBhbiBhcmd1bWVudC4KKyMgICAgIFdlIHdpbGwgaGF2ZSBiZXR0ZXIgY2hhbmNlcyBvZiBkZXRlY3RpbmcgYSBtaXNzaW5nIHRlc3QgaWYKKyMgICAgICQoTUtESVJfUCkgY29tcGxhaW5zIGFib3V0IG1pc3NpbmcgYXJndW1lbnRzLgorIyAgMy4gJChNS0RJUl9QKSBpcyBuYW1lZCBhZnRlciBgbWtkaXIgLXAnIGFuZCB3ZSBkb24ndCBleHBlY3QgdGhpcworIyAgICAgdG8gYWNjZXB0IG5vIGFyZ3VtZW50LgorIyAgNC4gaGF2aW5nIHNvbWV0aGluZyBsaWtlIGBta2RpciAuJyBpbiB0aGUgb3V0cHV0IGlzIHVuc2lnaHRseS4KKyMKKyMgT24gTmV4dFN0ZXAgYW5kIE9wZW5TdGVwLCB0aGUgYG1rZGlyJyBjb21tYW5kIGRvZXMgbm90CisjIHJlY29nbml6ZSBhbnkgb3B0aW9uLiAgSXQgd2lsbCBpbnRlcnByZXQgYWxsIG9wdGlvbnMgYXMKKyMgZGlyZWN0b3JpZXMgdG8gY3JlYXRlLgorQU5fTUFLRVZBUihbTUtESVJfUF0sIFtBQ19QUk9HX01LRElSX1BdKQorQUNfREVGVU5fT05DRShbQUNfUFJPR19NS0RJUl9QXSwKK1tBQ19SRVFVSVJFKFtBQ19DT05GSUdfQVVYX0RJUl9ERUZBVUxUXSlkbmwKK0FDX1JFUVVJUkVfQVVYX0ZJTEUoW2luc3RhbGwtc2hdKWRubAorQUNfTVNHX0NIRUNLSU5HKFtmb3IgYSB0aHJlYWQtc2FmZSBta2RpciAtcF0pCitpZiB0ZXN0IC16ICIkTUtESVJfUCI7IHRoZW4KKyAgQUNfQ0FDSEVfVkFMKFthY19jdl9wYXRoX21rZGlyXSwKKyAgICBbX0FTX1BBVEhfV0FMSyhbJFBBVEgkUEFUSF9TRVBBUkFUT1Ivb3B0L3Nmdy9iaW5dLAorICAgICAgW2ZvciBhY19wcm9nIGluIG1rZGlyIGdta2RpcjsgZG8KKwkgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisJICAgQVNfRVhFQ1VUQUJMRV9QKFsiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCJdKSB8fCBjb250aW51ZQorCSAgIGNhc2UgYCIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAtLXZlcnNpb24gMj4mMWAgaW4gIygKKwkgICAgICdta2RpciAoR05VIGNvcmV1dGlscykgJyogfCBcCisJICAgICAnbWtkaXIgKGNvcmV1dGlscykgJyogfCBcCisJICAgICAnbWtkaXIgKGZpbGV1dGlscykgJzQuMSopCisJICAgICAgIGFjX2N2X3BhdGhfbWtkaXI9JGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dAorCSAgICAgICBicmVhayAzOzsKKwkgICBlc2FjCisJIGRvbmUKKyAgICAgICBkb25lXSldKQorICB0ZXN0IC1kIC4vLS12ZXJzaW9uICYmIHJtZGlyIC4vLS12ZXJzaW9uCisgIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9ta2RpcitzZXR9IiA9IHNldDsgdGhlbgorICAgIE1LRElSX1A9IiRhY19jdl9wYXRoX21rZGlyIC1wIgorICBlbHNlCisgICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgRG9uJ3QgY2FjaGUgYQorICAgICMgdmFsdWUgZm9yIE1LRElSX1Agd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKyAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBjYWNoZSBpZiB0aGF0IGRpcmVjdG9yeSBpcworICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVsYXRpdmUgbmFtZS4KKyAgICBNS0RJUl9QPSIkYWNfaW5zdGFsbF9zaCAtZCIKKyAgZmkKK2ZpCitkbmwgc3RhdHVzLm00IGRvZXMgc3BlY2lhbCBtYWdpYyBmb3IgTUtESVJfUCBpbnN0ZWFkIG9mIEFDX1NVQlNULAorZG5sIHRvIGdldCByZWxhdGl2ZSBuYW1lcyByaWdodC4gIEhvd2V2ZXIsIGFsc28gQUNfU1VCU1QgaGVyZSBzbworZG5sIHRoYXQgQXV0b21ha2UgdmVyc2lvbnMgYmVmb3JlIDEuMTAgd2lsbCBwaWNrIGl0IHVwICh0aGV5IGRvIG5vdAorZG5sIHRyYWNlIEFDX1NVQlNUX1RSQUNFKS4KK2RubCBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSB3ZSBkcm9wIHN1cHBvcnQgZm9yIEF1dG9tYWtlIDwgMS4xMC4KK0FDX1NVQlNUKFtNS0RJUl9QXSlkbmwKK0FDX01TR19SRVNVTFQoWyRNS0RJUl9QXSkKK10pIyBBQ19QUk9HX01LRElSX1AKKworCisjIEFDX1BST0dfTEVYCisjIC0tLS0tLS0tLS0tCisjIExvb2sgZm9yIGZsZXggb3IgbGV4LiAgU2V0IGl0cyBhc3NvY2lhdGVkIGxpYnJhcnkgdG8gTEVYTElCLgorIyBDaGVjayBpZiBsZXggZGVjbGFyZXMgeXl0ZXh0IGFzIGEgY2hhciAqIGJ5IGRlZmF1bHQsIG5vdCBhIGNoYXJbXS4KK0FOX01BS0VWQVIoW0xFWF0sICBbQUNfUFJPR19MRVhdKQorQU5fUFJPR1JBTShbbGV4XSwgIFtBQ19QUk9HX0xFWF0pCitBTl9QUk9HUkFNKFtmbGV4XSwgW0FDX1BST0dfTEVYXSkKK0FDX0RFRlVOX09OQ0UoW0FDX1BST0dfTEVYXSwKK1tBQ19DSEVDS19QUk9HUyhMRVgsIGZsZXggbGV4LCA6KQoraWYgdGVzdCAieCRMRVgiICE9ICJ4OiI7IHRoZW4KKyAgX0FDX1BST0dfTEVYX1lZVEVYVF9ERUNMCitmaV0pCisKKworIyBfQUNfUFJPR19MRVhfWVlURVhUX0RFQ0wKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciB0aGUgTGV4IG91dHB1dCByb290LCB0aGUgTGV4IGxpYnJhcnksIGFuZCB3aGV0aGVyIExleAorIyBkZWNsYXJlcyB5eXRleHQgYXMgYSBjaGFyICogYnkgZGVmYXVsdC4KK200X2RlZmluZShbX0FDX1BST0dfTEVYX1lZVEVYVF9ERUNMXSwKK1tjYXQgPmNvbmZ0ZXN0LmwgPDxfQUNFT0ZbCislJQorYSB7IEVDSE87IH0KK2IgeyBSRUpFQ1Q7IH0KK2MgeyB5eW1vcmUgKCk7IH0KK2QgeyB5eWxlc3MgKDEpOyB9CitlIHsgeXlsZXNzIChpbnB1dCAoKSAhPSAwKTsgfQorZiB7IHVucHV0ICh5eXRleHRbMF0pOyB9CisuIHsgQkVHSU4gSU5JVElBTDsgfQorJSUKKyNpZmRlZiBZWVRFWFRfUE9JTlRFUgorZXh0ZXJuIGNoYXIgKnl5dGV4dDsKKyNlbmRpZgoraW50CittYWluICh2b2lkKQoreworICByZXR1cm4gISB5eWxleCAoKSArICEgeXl3cmFwICgpOworfQorXV9BQ0VPRgorX0FDX0RPX1ZBUihMRVggY29uZnRlc3QubCkKK0FDX0NBQ0hFX0NIRUNLKFtsZXggb3V0cHV0IGZpbGUgcm9vdF0sIFthY19jdl9wcm9nX2xleF9yb290XSwgWworaWYgdGVzdCAtZiBsZXgueXkuYzsgdGhlbgorICBhY19jdl9wcm9nX2xleF9yb290PWxleC55eQorZWxpZiB0ZXN0IC1mIGxleHl5LmM7IHRoZW4KKyAgYWNfY3ZfcHJvZ19sZXhfcm9vdD1sZXh5eQorZWxzZQorICBBQ19NU0dfRVJST1IoW2Nhbm5vdCBmaW5kIG91dHB1dCBmcm9tICRMRVg7IGdpdmluZyB1cF0pCitmaV0pCitBQ19TVUJTVChbTEVYX09VVFBVVF9ST09UXSwgWyRhY19jdl9wcm9nX2xleF9yb290XSlkbmwKKworaWYgdGVzdCAteiAiJHtMRVhMSUIrc2V0fSI7IHRoZW4KKyAgQUNfQ0FDSEVfQ0hFQ0soW2xleCBsaWJyYXJ5XSwgW2FjX2N2X2xpYl9sZXhdLCBbCisgICAgYWNfc2F2ZV9MSUJTPSRMSUJTCisgICAgYWNfY3ZfbGliX2xleD0nbm9uZSBuZWVkZWQnCisgICAgZm9yIGFjX2xpYiBpbiAnJyAtbGZsIC1sbDsgZG8KKyAgICAgIExJQlM9IiRhY19saWIgJGFjX3NhdmVfTElCUyIKKyAgICAgIEFDX0xJTktfSUZFTFNFKFtgY2F0ICRMRVhfT1VUUFVUX1JPT1QuY2BdLCBbYWNfY3ZfbGliX2xleD0kYWNfbGliXSkKKyAgICAgIHRlc3QgIiRhY19jdl9saWJfbGV4IiAhPSAnbm9uZSBuZWVkZWQnICYmIGJyZWFrCisgICAgZG9uZQorICAgIExJQlM9JGFjX3NhdmVfTElCUworICBdKQorICB0ZXN0ICIkYWNfY3ZfbGliX2xleCIgIT0gJ25vbmUgbmVlZGVkJyAmJiBMRVhMSUI9JGFjX2N2X2xpYl9sZXgKK2ZpCitBQ19TVUJTVChMRVhMSUIpCisKK0FDX0NBQ0hFX0NIRUNLKHdoZXRoZXIgeXl0ZXh0IGlzIGEgcG9pbnRlciwgYWNfY3ZfcHJvZ19sZXhfeXl0ZXh0X3BvaW50ZXIsCitbIyBQT1NJWCBzYXlzIGxleCBjYW4gZGVjbGFyZSB5eXRleHQgZWl0aGVyIGFzIGEgcG9pbnRlciBvciBhbiBhcnJheTsgdGhlCisjIGRlZmF1bHQgaXMgaW1wbGVtZW50YXRpb24tZGVwZW5kZW50LiAgRmlndXJlIG91dCB3aGljaCBpdCBpcywgc2luY2UKKyMgbm90IGFsbCBpbXBsZW1lbnRhdGlvbnMgcHJvdmlkZSB0aGUgJXBvaW50ZXIgYW5kICVhcnJheSBkZWNsYXJhdGlvbnMuCithY19jdl9wcm9nX2xleF95eXRleHRfcG9pbnRlcj1ubworYWNfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSIkTEVYTElCICRhY19zYXZlX0xJQlMiCitBQ19MSU5LX0lGRUxTRSgKKyAgWyNkZWZpbmUgWVlURVhUX1BPSU5URVIgMQorYGNhdCAkTEVYX09VVFBVVF9ST09ULmNgXSwKKyAgW2FjX2N2X3Byb2dfbGV4X3l5dGV4dF9wb2ludGVyPXllc10pCitMSUJTPSRhY19zYXZlX0xJQlMKK10pCitkbmwKK2lmIHRlc3QgJGFjX2N2X3Byb2dfbGV4X3l5dGV4dF9wb2ludGVyID0geWVzOyB0aGVuCisgIEFDX0RFRklORShZWVRFWFRfUE9JTlRFUiwgMSwKKwkgICAgW0RlZmluZSB0byAxIGlmIGBsZXgnIGRlY2xhcmVzIGB5eXRleHQnIGFzIGEgYGNoYXIgKicgYnkgZGVmYXVsdCwKKwkgICAgIG5vdCBhIGBjaGFyW10nLl0pCitmaQorcm0gLWYgY29uZnRlc3QubCAkTEVYX09VVFBVVF9ST09ULmMKK10pIyBfQUNfUFJPR19MRVhfWVlURVhUX0RFQ0wKKworCisjIFJlcXVpcmUgQUNfUFJPR19MRVggaW4gY2FzZSBzb21lIHBlb3BsZSB3ZXJlIGp1c3QgY2FsbGluZyB0aGlzIG1hY3JvLgorQVVfREVGVU4oW0FDX0RFQ0xfWVlURVhUXSwgIFtBQ19QUk9HX0xFWF0pCisKKworIyBBQ19QUk9HX0xOX1MKKyMgLS0tLS0tLS0tLS0tCitBTl9NQUtFVkFSKFtMTl0sIFtBQ19QUk9HX0xOX1NdKQorQU5fUFJPR1JBTShbbG5dLCBbQUNfUFJPR19MTl9TXSkKK0FDX0RFRlVOKFtBQ19QUk9HX0xOX1NdLAorW0FDX01TR19DSEVDS0lORyhbd2hldGhlciBsbiAtcyB3b3Jrc10pCitBQ19TVUJTVChbTE5fU10sIFskYXNfbG5fc10pZG5sCitpZiB0ZXN0ICIkTE5fUyIgPSAibG4gLXMiOyB0aGVuCisgIEFDX01TR19SRVNVTFQoW3llc10pCitlbHNlCisgIEFDX01TR19SRVNVTFQoW25vLCB1c2luZyAkTE5fU10pCitmaQorXSkjIEFDX1BST0dfTE5fUworCisKKyMgQUNfUFJPR19NQUtFX1NFVAorIyAtLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBTRVRfTUFLRSB0byBzZXQgJHtNQUtFfSBpZiBNYWtlIGRvZXMgbm90IGRvIHNvIGF1dG9tYXRpY2FsbHkuICBJZiBNYWtlCisjIGRvZXMgbm90IHJ1biB0aGUgdGVzdCBNYWtlZmlsZSwgd2UgYXNzdW1lIHRoYXQgdGhlIE1ha2UgcHJvZ3JhbSB0aGUgdXNlciB3aWxsCisjIGludm9rZSBkb2VzIHNldCAkKE1BS0UpLiAgVGhpcyBpcyB0eXBpY2FsLCBhbmQgZW1pdHRpbmcgYE1BS0U9Zm9vbWFrZScgaXMKKyMgYWx3YXlzIHdyb25nIGlmIGBmb29tYWtlJyBpcyBub3QgYXZhaWxhYmxlIG9yIGRvZXMgbm90IHdvcmsuCitBTl9NQUtFVkFSKFtNQUtFXSwgW0FDX1BST0dfTUFLRV9TRVRdKQorQU5fUFJPR1JBTShbbWFrZV0sIFtBQ19QUk9HX01BS0VfU0VUXSkKK0FDX0RFRlVOKFtBQ19QUk9HX01BS0VfU0VUXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSldKQorc2V0IHggJHtNQUtFLW1ha2V9CithY19tYWtlPWBBU19FQ0hPKFsiJFsyXSJdKSB8IHNlZCAncy8rL3AvZzsgcy9bW15hLXpBLVowLTlfXV0vXy9nJ2AKK0FDX0NBQ0hFX1ZBTChhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQsCitbY2F0ID5jb25mdGVzdC5tYWtlIDw8XF9BQ0VPRgorU0hFTEwgPSAvYmluL3NoCithbGw6CisJQGVjaG8gJ0BAQCUlJT0kKE1BS0UpPUBAQCUlJScKK19BQ0VPRgorIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZy4uLiIsIHdoaWNoIHdvdWxkIGNvbmZ1c2UgdXMuCitjYXNlIGAke01BS0UtbWFrZX0gLWYgY29uZnRlc3QubWFrZSAyPi9kZXYvbnVsbGAgaW4KKyAgKkBAQCUlJT0/Kj1AQEAlJSUqKQorICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PXllczs7CisgICopCisgICAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9bm87OworZXNhYworcm0gLWYgY29uZnRlc3QubWFrZV0pZG5sCitpZiBldmFsIHRlc3QgXCRhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQgPSB5ZXM7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgU0VUX01BS0U9CitlbHNlCisgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgU0VUX01BS0U9Ik1BS0U9JHtNQUtFLW1ha2V9IgorZmkKK0FDX1NVQlNUKFtTRVRfTUFLRV0pZG5sCitdKSMgQUNfUFJPR19NQUtFX1NFVAorCisKKyMgQUNfUFJPR19SQU5MSUIKKyMgLS0tLS0tLS0tLS0tLS0KK0FOX01BS0VWQVIoW1JBTkxJQl0sIFtBQ19QUk9HX1JBTkxJQl0pCitBTl9QUk9HUkFNKFtyYW5saWJdLCBbQUNfUFJPR19SQU5MSUJdKQorQUNfREVGVU4oW0FDX1BST0dfUkFOTElCXSwKK1tBQ19DSEVDS19UT09MKFJBTkxJQiwgcmFubGliLCA6KV0pCisKKworIyBBQ19SU0gKKyMgLS0tLS0tCisjIEkgZG9uJ3Qga25vdyB3aGF0IGl0IHVzZWQgdG8gZG8sIGJ1dCBpdCBubyBsb25nZXIgZG9lcy4KK0FVX0RFRlVOKFtBQ19SU0hdLCBbXSwKK1skMCBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiAgUmVtb3ZlIHRoaXMgd2FybmluZyB3aGVuIHlvdQorYWRqdXN0IHRoZSBjb2RlLl0pCisKKworIyBBQ19QUk9HX1NFRAorIyAtLS0tLS0tLS0tLQorIyBDaGVjayBmb3IgYSBmdWxseSBmdW5jdGlvbmFsIHNlZCBwcm9ncmFtIHRoYXQgdHJ1bmNhdGVzCisjIGFzIGZldyBjaGFyYWN0ZXJzIGFzIHBvc3NpYmxlLiAgUHJlZmVyIEdOVSBzZWQgaWYgZm91bmQuCitBQ19ERUZVTihbQUNfUFJPR19TRURdLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXRdLCBhY19jdl9wYXRoX1NFRCwKKyAgICBbZG5sIGFjX3NjcmlwdCBzaG91bGQgbm90IGNvbnRhaW4gbW9yZSB0aGFuIDk5IGNvbW1hbmRzIChmb3IgSFAtVVggc2VkKSwKKyAgICAgZG5sIGJ1dCBtb3JlIHRoYW4gYWJvdXQgNzAwMCBieXRlcywgdG8gY2F0Y2ggYSBsaW1pdCBpbiBTb2xhcmlzIDggL3Vzci91Y2Ivc2VkLgorICAgICBhY19zY3JpcHQ9cy9hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS9iYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIvCisgICAgIGZvciBhY19pIGluIDEgMiAzIDQgNSA2IDc7IGRvCisgICAgICAgYWNfc2NyaXB0PSIkYWNfc2NyaXB0JGFzX25sJGFjX3NjcmlwdCIKKyAgICAgZG9uZQorICAgICBlY2hvICIkYWNfc2NyaXB0IiAyPi9kZXYvbnVsbCB8IHNlZCA5OXEgPmNvbmZ0ZXN0LnNlZAorICAgICBBU19VTlNFVChbYWNfc2NyaXB0XSkKKyAgICAgX0FDX1BBVEhfUFJPR1NfRkVBVFVSRV9DSEVDSyhTRUQsIFtzZWQgZ3NlZF0sCisJW19BQ19GRUFUVVJFX0NIRUNLX0xFTkdUSChbYWNfcGF0aF9TRURdLCBbYWNfY3ZfcGF0aF9TRURdLAorCQlbIiRhY19wYXRoX1NFRCIgLWYgY29uZnRlc3Quc2VkXSldKV0pCisgU0VEPSIkYWNfY3ZfcGF0aF9TRUQiCisgQUNfU1VCU1QoW1NFRF0pZG5sCisgcm0gLWYgY29uZnRlc3Quc2VkCitdKSMgQUNfUFJPR19TRUQKKworCisjIEFDX1BST0dfWUFDQworIyAtLS0tLS0tLS0tLS0KK0FOX01BS0VWQVIoW0JJU09OXSwgIFtBQ19QUk9HX1lBQ0NdKQorQU5fTUFLRVZBUihbWUFDQ10sICBbQUNfUFJPR19ZQUNDXSkKK0FOX01BS0VWQVIoW1lGTEFHU10sICBbQUNfUFJPR19ZQUNDXSkKK0FOX1BST0dSQU0oW3lhY2NdLCAgW0FDX1BST0dfWUFDQ10pCitBTl9QUk9HUkFNKFtieWFjY10sIFtBQ19QUk9HX1lBQ0NdKQorQU5fUFJPR1JBTShbYmlzb25dLCBbQUNfUFJPR19ZQUNDXSkKK0FDX0RFRlVOKFtBQ19QUk9HX1lBQ0NdLAorW0FDX0NIRUNLX1BST0dTKFlBQ0MsICdiaXNvbiAteScgYnlhY2MsIHlhY2MpZG5sCitBQ19BUkdfVkFSKFlBQ0MsCitbVGhlIGBZZXQgQW5vdGhlciBDIENvbXBpbGVyJyBpbXBsZW1lbnRhdGlvbiB0byB1c2UuICBEZWZhdWx0cyB0byB0aGUgZmlyc3QKK3Byb2dyYW0gZm91bmQgb3V0IG9mOiBgYmlzb24gLXknLCBgYnlhY2MnLCBgeWFjYycuXSlkbmwKK0FDX0FSR19WQVIoWUZMQUdTLAorW1RoZSBsaXN0IG9mIGFyZ3VtZW50cyB0aGF0IHdpbGwgYmUgcGFzc2VkIGJ5IGRlZmF1bHQgdG8gJFlBQ0MuICBUaGlzIHNjcmlwdAord2lsbCBkZWZhdWx0IFlGTEFHUyB0byB0aGUgZW1wdHkgc3RyaW5nIHRvIGF2b2lkIGEgZGVmYXVsdCB2YWx1ZSBvZiBgLWQnIGdpdmVuCitieSBzb21lIG1ha2UgYXBwbGljYXRpb25zLl0pXSkKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9jb25mL2F1dG9jb25mL3NwZWNpZmljLm00IGIvc2hhcmUvYXV0b2NvbmYvYXV0b2NvbmYvc3BlY2lmaWMubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk1ZDA4MwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9jb25mL2F1dG9jb25mL3NwZWNpZmljLm00CkBAIC0wLDAgKzEsNDc3IEBACisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEF1dG9jb25mLgkJCS0qLSBBdXRvY29uZiAtKi0KKyMgTWFjcm9zIHRoYXQgdGVzdCBmb3Igc3BlY2lmaWMsIHVuY2xhc3NpZmllZCwgZmVhdHVyZXMuCisjCisjIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKyMgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlCisjIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorIyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorIyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uLAorIyB2ZXJzaW9uIDMuMCwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFuZCBhIGNvcHkgb2YgdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGVzIENPUFlJTkd2MyBhbmQgQ09QWUlORy5FWENFUFRJT04KKyMgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFdyaXR0ZW4gYnkgRGF2aWQgTWFjS2VuemllLCB3aXRoIGhlbHAgZnJvbQorIyBGcmFuYyxvaXMgUGluYXJkLCBLYXJsIEJlcnJ5LCBSaWNoYXJkIFBpeGxleSwgSWFuIExhbmNlIFRheWxvciwKKyMgUm9sYW5kIE1jR3JhdGgsIE5vYWggRnJpZWRtYW4sIGRhdmlkIGQgenVobiwgYW5kIG1hbnkgb3RoZXJzLgorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIENoZWNrcyBmb3IgZGVjbGFyYXRpb25zLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIEFDX0RFQ0xfU1lTX1NJR0xJU1QKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorQU5fSURFTlRJRklFUihbc3lzX3NpZ2xpc3RdLCAgICAgW0FDX0NIRUNLX0RFQ0xTKFtzeXNfc2lnbGlzdF0pXSkKK0FVX0RFRlVOKFtBQ19ERUNMX1NZU19TSUdMSVNUXSwKK1tBQ19DSEVDS19ERUNMUyhbc3lzX3NpZ2xpc3RdLCwsCitbI2luY2x1ZGUgPHNpZ25hbC5oPgorLyogTmV0QlNEIGRlY2xhcmVzIHN5c19zaWdsaXN0IGluIHVuaXN0ZC5oLiAgKi8KKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCitdKQorXSkjIEFDX0RFQ0xfU1lTX1NJR0xJU1QKKworCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIENoZWNrcyBmb3Igb3BlcmF0aW5nIHN5c3RlbSBzZXJ2aWNlcy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgQUNfU1lTX0lOVEVSUFJFVEVSCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX1NZU19JTlRFUlBSRVRFUl0sCitbQUNfQ0FDSEVfQ0hFQ0sod2hldGhlciBAJTpAISB3b3JrcyBpbiBzaGVsbCBzY3JpcHRzLCBhY19jdl9zeXNfaW50ZXJwcmV0ZXIsCitbZWNobyAnIyEgL2Jpbi9jYXQKK2V4aXQgNjkKKycgPmNvbmZ0ZXN0CitjaG1vZCB1K3ggY29uZnRlc3QKKyhTSEVMTD0vYmluL3NoOyBleHBvcnQgU0hFTEw7IC4vY29uZnRlc3QgPi9kZXYvbnVsbCAyPiYxKQoraWYgdGVzdCAkPyAtbmUgNjk7IHRoZW4KKyAgIGFjX2N2X3N5c19pbnRlcnByZXRlcj15ZXMKK2Vsc2UKKyAgIGFjX2N2X3N5c19pbnRlcnByZXRlcj1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0XSkKK2ludGVycHZhbD0kYWNfY3Zfc3lzX2ludGVycHJldGVyCitdKQorCisKK0FVX0RFRlVOKFtBQ19IQVZFX1BPVU5EQkFOR10sCitbQUNfU1lTX0lOVEVSUFJFVEVSXSwKK1tSZW1vdmUgdGhpcyB3YXJuaW5nIHdoZW4geW91IGFkanVzdCB5b3VyIGNvZGUgdG8gdXNlCitgQUNfU1lTX0lOVEVSUFJFVEVSJy5dKQorCisKK0FVX0RFRlVOKFtBQ19BUkdfQVJSQVldLCBbXSwKK1skMCBpcyBubyBsb25nZXIgaW1wbGVtZW50ZWQ6IGRvbid0IGRvIHVucG9ydGFibGUgdGhpbmdzCit3aXRoIGFyZ3VtZW50cy4gUmVtb3ZlIHRoaXMgd2FybmluZyB3aGVuIHlvdSBhZGp1c3QgeW91ciBjb2RlLl0pCisKKworIyBfQUNfU1lTX0xBUkdFRklMRV9URVNUX0lOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0FDX1NZU19MQVJHRUZJTEVfVEVTVF9JTkNMVURFU10sCitbQCU6QGluY2x1ZGUgPHN5cy90eXBlcy5oPgorIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKKyAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCisgICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworQCU6QGRlZmluZSBMQVJHRV9PRkZfVCAoKChvZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2MikpCisgIGludCBvZmZfdF9pc19sYXJnZVtbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKKwkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQorCQkgICAgICA/IDEgOiAtMV1dO1tdZG5sCitdKQorCisKKyMgX0FDX1NZU19MQVJHRUZJTEVfTUFDUk9fVkFMVUUoQy1NQUNSTywgVkFMVUUsCisjCQkJCUNBQ0hFLVZBUiwKKyMJCQkJREVTQ1JJUFRJT04sCisjCQkJCVBST0xPR1VFLCBbRlVOQ1RJT04tQk9EWV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0FDX1NZU19MQVJHRUZJTEVfTUFDUk9fVkFMVUVdLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3IgJDEgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlc10sIFskM10sCitbd2hpbGUgOjsgZG8KKyAgbTRfaWZ2YWwoWyQ2XSwgW0FDX0xJTktfSUZFTFNFXSwgW0FDX0NPTVBJTEVfSUZFTFNFXSkoCisgICAgW0FDX0xBTkdfUFJPR1JBTShbJDVdLCBbJDZdKV0sCisgICAgWyQzPW5vOyBicmVha10pCisgIG00X2lmdmFsKFskNl0sIFtBQ19MSU5LX0lGRUxTRV0sIFtBQ19DT01QSUxFX0lGRUxTRV0pKAorICAgIFtBQ19MQU5HX1BST0dSQU0oW0AlOkBkZWZpbmUgJDEgJDIKKyQ1XSwgWyQ2XSldLAorICAgIFskMz0kMjsgYnJlYWtdKQorICAkMz11bmtub3duCisgIGJyZWFrCitkb25lXSkKK2Nhc2UgJCQzIGluICMoCisgIG5vIHwgdW5rbm93bikgOzsKKyAgKikgQUNfREVGSU5FX1VOUVVPVEVEKFskMV0sIFskJDNdLCBbJDRdKTs7Citlc2FjCitybSAtcmYgY29uZnRlc3QqW11kbmwKK10pIyBfQUNfU1lTX0xBUkdFRklMRV9NQUNST19WQUxVRQorCisKKyMgQUNfU1lTX0xBUkdFRklMRQorIyAtLS0tLS0tLS0tLS0tLS0tCisjIEJ5IGRlZmF1bHQsIG1hbnkgaG9zdHMgd29uJ3QgbGV0IHByb2dyYW1zIGFjY2VzcyBsYXJnZSBmaWxlczsKKyMgb25lIG11c3QgdXNlIHNwZWNpYWwgY29tcGlsZXIgb3B0aW9ucyB0byBnZXQgbGFyZ2UtZmlsZSBhY2Nlc3MgdG8gd29yay4KKyMgRm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGlzIGJyYWluIGRhbWFnZSBwbGVhc2Ugc2VlOgorIyBodHRwOi8vd3d3LnVuaXgtc3lzdGVtcy5vcmcvdmVyc2lvbjIvd2hhdHNuZXcvbGZzMjBtYXIuaHRtbAorQUNfREVGVU4oW0FDX1NZU19MQVJHRUZJTEVdLAorW0FDX0FSR19FTkFCTEUobGFyZ2VmaWxlLAorCSAgICAgICBbICAtLWRpc2FibGUtbGFyZ2VmaWxlICAgICBvbWl0IHN1cHBvcnQgZm9yIGxhcmdlIGZpbGVzXSkKK2lmIHRlc3QgIiRlbmFibGVfbGFyZ2VmaWxlIiAhPSBubzsgdGhlbgorCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igc3BlY2lhbCBDIGNvbXBpbGVyIG9wdGlvbnMgbmVlZGVkIGZvciBsYXJnZSBmaWxlc10sCisgICAgYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQywKKyAgICBbYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQz1ubworICAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICAgICBhY19zYXZlX0NDPSRDQworICAgICAgIHdoaWxlIDo7IGRvCisJICMgSVJJWCA2LjIgYW5kIGxhdGVyIGRvIG5vdCBzdXBwb3J0IGxhcmdlIGZpbGVzIGJ5IGRlZmF1bHQsCisJICMgc28gdXNlIHRoZSBDIGNvbXBpbGVyJ3MgLW4zMiBvcHRpb24gaWYgdGhhdCBoZWxwcy4KKwkgQUNfTEFOR19DT05GVEVTVChbQUNfTEFOR19QUk9HUkFNKFtfQUNfU1lTX0xBUkdFRklMRV9URVNUX0lOQ0xVREVTXSldKQorCSBBQ19DT01QSUxFX0lGRUxTRShbXSwgW2JyZWFrXSkKKwkgQ0M9IiRDQyAtbjMyIgorCSBBQ19DT01QSUxFX0lGRUxTRShbXSwgW2FjX2N2X3N5c19sYXJnZWZpbGVfQ0M9JyAtbjMyJzsgYnJlYWtdKQorCSBicmVhaworICAgICAgIGRvbmUKKyAgICAgICBDQz0kYWNfc2F2ZV9DQworICAgICAgIHJtIC1mIGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaV0pCisgIGlmIHRlc3QgIiRhY19jdl9zeXNfbGFyZ2VmaWxlX0NDIiAhPSBubzsgdGhlbgorICAgIENDPSRDQyRhY19jdl9zeXNfbGFyZ2VmaWxlX0NDCisgIGZpCisKKyAgX0FDX1NZU19MQVJHRUZJTEVfTUFDUk9fVkFMVUUoX0ZJTEVfT0ZGU0VUX0JJVFMsIDY0LAorICAgIGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzLAorICAgIFtOdW1iZXIgb2YgYml0cyBpbiBhIGZpbGUgb2Zmc2V0LCBvbiBob3N0cyB3aGVyZSB0aGlzIGlzIHNldHRhYmxlLl0sCisgICAgW19BQ19TWVNfTEFSR0VGSUxFX1RFU1RfSU5DTFVERVNdKQorICBpZiB0ZXN0ICRhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cyA9IHVua25vd247IHRoZW4KKyAgICBfQUNfU1lTX0xBUkdFRklMRV9NQUNST19WQUxVRShfTEFSR0VfRklMRVMsIDEsCisgICAgICBhY19jdl9zeXNfbGFyZ2VfZmlsZXMsCisgICAgICBbRGVmaW5lIGZvciBsYXJnZSBmaWxlcywgb24gQUlYLXN0eWxlIGhvc3RzLl0sCisgICAgICBbX0FDX1NZU19MQVJHRUZJTEVfVEVTVF9JTkNMVURFU10pCisgIGZpCitmaQorXSkjIEFDX1NZU19MQVJHRUZJTEUKKworCisjIEFDX1NZU19MT05HX0ZJTEVfTkFNRVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZWN1cml0eTogdXNlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBhcyB0aGUgbW9zdCBwb3J0YWJsZSB3YXkgb2YKKyMgY3JlYXRpbmcgZmlsZXMgaW4gL3RtcCBzZWN1cmVseS4gIFJlbW92aW5nIHRoZW0gbGVhdmVzIGEgcmFjZQorIyBjb25kaXRpb24sIHNldCAtQyBpcyBub3QgcG9ydGFibHkgZ3VhcmFudGVlZCB0byB1c2UgT19FWENMLCBzbyBzdGlsbAorIyBsZWF2ZXMgYSByYWNlLCBhbmQgbm90IGFsbCBzeXN0ZW1zIGhhdmUgdGhlIGBta3RlbXAnIHV0aWxpdHkuICBXZQorIyBzdGlsbCB0ZXN0IGZvciBleGlzdGVuY2UgZmlyc3QgaW4gY2FzZSBvZiBicm9rZW4gc3lzdGVtcyB3aGVyZSB0aGUKKyMgbWtkaXIgc3VjY2VlZHMgZXZlbiB3aGVuIHRoZSBkaXJlY3RvcnkgZXhpc3RzLiAgQnJva2VuIHN5c3RlbXMgbWF5CisjIHJldGFpbiBhIHJhY2UsIGJ1dCB0aGV5IHByb2JhYmx5IGhhdmUgb3RoZXIgc2VjdXJpdHkgcHJvYmxlbXMKKyMgYW55d2F5OyB0aGlzIHNob3VsZCBiZSBzZWN1cmUgb24gd2VsbC1iZWhhdmVkIHN5c3RlbXMuICBJbiBhbnkgY2FzZSwKKyMgdXNlIG9mIGBta3RlbXAnIGlzIHByb2JhYmx5IGluYXBwcm9wcmlhdGUgaGVyZSBzaW5jZSBpdCB3b3VsZCBmYWlsIGluCisjIGF0dGVtcHRpbmcgdG8gY3JlYXRlIGRpZmZlcmVudCBmaWxlIG5hbWVzIGRpZmZlcmluZyBhZnRlciB0aGUgMTR0aAorIyBjaGFyYWN0ZXIgb24gZmlsZSBzeXN0ZW1zIHdpdGhvdXQgbG9uZyBmaWxlIG5hbWVzLgorQUNfREVGVU4oW0FDX1NZU19MT05HX0ZJTEVfTkFNRVNdLAorW0FDX0NBQ0hFX0NIRUNLKGZvciBsb25nIGZpbGUgbmFtZXMsIGFjX2N2X3N5c19sb25nX2ZpbGVfbmFtZXMsCitbYWNfY3Zfc3lzX2xvbmdfZmlsZV9uYW1lcz15ZXMKKyMgVGVzdCBmb3IgbG9uZyBmaWxlIG5hbWVzIGluIGFsbCB0aGUgcGxhY2VzIHdlIGtub3cgbWlnaHQgbWF0dGVyOgorIyAgICAgIC4JCXRoZSBjdXJyZW50IGRpcmVjdG9yeSwgd2hlcmUgYnVpbGRpbmcgd2lsbCBoYXBwZW4KKyMgICAgICAkcHJlZml4L2xpYgl3aGVyZSB3ZSB3aWxsIGJlIGluc3RhbGxpbmcgdGhpbmdzCisjICAgICAgJGV4ZWNfcHJlZml4L2xpYglsaWtld2lzZQorIyAgICAgICRUTVBESVIJCWlmIHNldCwgd2hlcmUgaXQgbWlnaHQgd2FudCB0byB3cml0ZSB0ZW1wb3JhcnkgZmlsZXMKKyMgICAgICAvdG1wCQl3aGVyZSBpdCBtaWdodCB3YW50IHRvIHdyaXRlIHRlbXBvcmFyeSBmaWxlcworIyAgICAgIC92YXIvdG1wCQlsaWtld2lzZQorIyAgICAgIC91c3IvdG1wCQlsaWtld2lzZQorZm9yIGFjX2RpciBpbiAuICIkVE1QRElSIiAvdG1wIC92YXIvdG1wIC91c3IvdG1wICIkcHJlZml4L2xpYiIgIiRleGVjX3ByZWZpeC9saWIiOyBkbworICAjIFNraXAgJFRNUERJUiBpZiBpdCBpcyBlbXB0eSBvciBib2d1cywgYW5kIHNraXAgJGV4ZWNfcHJlZml4L2xpYgorICAjIGluIHRoZSB1c3VhbCBjYXNlIHdoZXJlIGV4ZWNfcHJlZml4IGlzICcke3ByZWZpeH0nLgorICBjYXNlICRhY19kaXIgaW4gIygKKyAgICAuIHwgLyogfCA/OltbXFwvXV0qKSA7OyAjKAorICAgICopIGNvbnRpbnVlOzsKKyAgZXNhYworICB0ZXN0IC13ICIkYWNfZGlyLy4iIHx8IGNvbnRpbnVlICMgSXQgaXMgbGVzcyBjb25mdXNpbmcgdG8gbm90IGVjaG8gYW55dGhpbmcgaGVyZS4KKyAgYWNfeGRpcj0kYWNfZGlyL2NmJCQKKyAgKHVtYXNrIDA3NyAmJiBta2RpciAiJGFjX3hkaXIiIDI+L2Rldi9udWxsKSB8fCBjb250aW51ZQorICBhY190ZjE9JGFjX3hkaXIvY29uZnRlc3Q5MDEyMzQ1CisgIGFjX3RmMj0kYWNfeGRpci9jb25mdGVzdDkwMTIzNDYKKyAgdG91Y2ggIiRhY190ZjEiIDI+L2Rldi9udWxsICYmIHRlc3QgLWYgIiRhY190ZjEiICYmIHRlc3QgISAtZiAiJGFjX3RmMiIgfHwKKyAgICBhY19jdl9zeXNfbG9uZ19maWxlX25hbWVzPW5vCisgIHJtIC1mIC1yICIkYWNfeGRpciIgMj4vZGV2L251bGwKKyAgdGVzdCAkYWNfY3Zfc3lzX2xvbmdfZmlsZV9uYW1lcyA9IG5vICYmIGJyZWFrCitkb25lXSkKK2lmIHRlc3QgJGFjX2N2X3N5c19sb25nX2ZpbGVfbmFtZXMgPSB5ZXM7IHRoZW4KKyAgQUNfREVGSU5FKEhBVkVfTE9OR19GSUxFX05BTUVTLCAxLAorCSAgICBbRGVmaW5lIHRvIDEgaWYgeW91IHN1cHBvcnQgZmlsZSBuYW1lcyBsb25nZXIgdGhhbiAxNCBjaGFyYWN0ZXJzLl0pCitmaQorXSkKKworCisjIEFDX1NZU19SRVNUQVJUQUJMRV9TWVNDQUxMUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSWYgdGhlIHN5c3RlbSBhdXRvbWF0aWNhbGx5IHJlc3RhcnRzIGEgc3lzdGVtIGNhbGwgdGhhdCBpcworIyBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCwgZGVmaW5lIGBIQVZFX1JFU1RBUlRBQkxFX1NZU0NBTExTJy4KK0FDX0RFRlVOKFtBQ19TWVNfUkVTVEFSVEFCTEVfU1lTQ0FMTFNdLAorW0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IEFDX1NZU19SRVNUQVJUQUJMRV9TWVNDQUxMUyBpcyB1c2VmdWwgb25seSB3aGVuIHN1cHBvcnRpbmcgdmVyeQorb2xkIHN5c3RlbXMgdGhhdCBsYWNrIGBzaWdhY3Rpb24nIGFuZCBgU0FfUkVTVEFSVCcuICBEb24ndCBib3RoZXIgd2l0aAordGhpcyBtYWNybyB1bmxlc3MgeW91IG5lZWQgdG8gc3VwcG9ydCB2ZXJ5IG9sZCBzeXN0ZW1zIGxpa2UgNC4yQlNEIGFuZAorU1ZSMy5dKWRubAorQUNfUkVRVUlSRShbQUNfSEVBREVSX1NZU19XQUlUXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKGZvciByZXN0YXJ0YWJsZSBzeXN0ZW0gY2FsbHMsIGFjX2N2X3N5c19yZXN0YXJ0YWJsZV9zeXNjYWxscywKK1tBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRSgKK1svKiBFeGl0IDAgKHRydWUpIGlmIHdhaXQgcmV0dXJucyBzb21ldGhpbmcgb3RoZXIgdGhhbiAtMSwKKyAgIGkuZS4gdGhlIHBpZCBvZiB0aGUgY2hpbGQsIHdoaWNoIG1lYW5zIHRoYXQgd2FpdCB3YXMgcmVzdGFydGVkCisgICBhZnRlciBnZXR0aW5nIHRoZSBzaWduYWwuICAqLworCitBQ19JTkNMVURFU19ERUZBVUxUCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaWZkZWYgSEFWRV9TWVNfV0FJVF9ICisjIGluY2x1ZGUgPHN5cy93YWl0Lmg+CisjZW5kaWYKKworLyogU29tZSBwbGF0Zm9ybXMgZXhwbGljaXRseSByZXF1aXJlIGFuIGV4dGVybiAiQyIgc2lnbmFsIGhhbmRsZXIKKyAgIHdoZW4gdXNpbmcgQysrLiAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHZvaWQgdWNhdGNoIChpbnQgZHVtbXkpIHsgfQorI2Vsc2UKK3ZvaWQgdWNhdGNoIChkdW1teSkgaW50IGR1bW15OyB7IH0KKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKKyAgaW50IGkgPSBmb3JrICgpLCBzdGF0dXM7CisKKyAgaWYgKGkgPT0gMCkKKyAgICB7CisgICAgICBzbGVlcCAoMyk7CisgICAgICBraWxsIChnZXRwcGlkICgpLCBTSUdJTlQpOworICAgICAgc2xlZXAgKDMpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIHNpZ25hbCAoU0lHSU5ULCB1Y2F0Y2gpOworCisgIHN0YXR1cyA9IHdhaXQgKCZpKTsKKyAgaWYgKHN0YXR1cyA9PSAtMSkKKyAgICB3YWl0ICgmaSk7CisKKyAgcmV0dXJuIHN0YXR1cyA9PSAtMTsKK31dKV0sCisJICAgICAgIFthY19jdl9zeXNfcmVzdGFydGFibGVfc3lzY2FsbHM9eWVzXSwKKwkgICAgICAgW2FjX2N2X3N5c19yZXN0YXJ0YWJsZV9zeXNjYWxscz1ub10pXSkKK2lmIHRlc3QgJGFjX2N2X3N5c19yZXN0YXJ0YWJsZV9zeXNjYWxscyA9IHllczsgdGhlbgorICBBQ19ERUZJTkUoSEFWRV9SRVNUQVJUQUJMRV9TWVNDQUxMUywgMSwKKwkgICAgW0RlZmluZSB0byAxIGlmIHN5c3RlbSBjYWxscyBhdXRvbWF0aWNhbGx5IHJlc3RhcnQgYWZ0ZXIKKwkgICAgIGludGVycnVwdGlvbiBieSBhIHNpZ25hbC5dKQorZmkKK10pIyBBQ19TWVNfUkVTVEFSVEFCTEVfU1lTQ0FMTFMKKworCisjIEFDX1NZU19QT1NJWF9URVJNSU9TCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfU1lTX1BPU0lYX1RFUk1JT1NdLAorW0FDX0NBQ0hFX0NIRUNLKFtQT1NJWCB0ZXJtaW9zXSwgYWNfY3Zfc3lzX3Bvc2l4X3Rlcm1pb3MsCitbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CitdXSwKKwkgICAgIFsvKiBTdW5PUyA0LjAuMyBoYXMgdGVybWlvcy5oIGJ1dCBub3QgdGhlIGxpYnJhcnkgY2FsbHMuICAqLworICAgdGNnZXRhdHRyKDAsIDApO10pXSwKKwkgICAgIGFjX2N2X3N5c19wb3NpeF90ZXJtaW9zPXllcywKKwkgICAgIGFjX2N2X3N5c19wb3NpeF90ZXJtaW9zPW5vKV0pCitdKSMgQUNfU1lTX1BPU0lYX1RFUk1JT1MKKworCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBDaGVja3MgZm9yIG5vdC1xdWl0ZS1Vbml4IHZhcmlhbnRzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgQUNfR05VX1NPVVJDRQorIyAtLS0tLS0tLS0tLS0tLQorQVVfREVGVU4oW0FDX0dOVV9TT1VSQ0VdLCBbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKKworCisjIEFDX0NZR1dJTgorIyAtLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIEN5Z3dpbi4gIFRoaXMgaXMgYSB3YXkgdG8gc2V0IHRoZSByaWdodCB2YWx1ZSBmb3IKKyMgRVhFRVhULgorQVVfREVGVU4oW0FDX0NZR1dJTl0sCitbQUNfQ0FOT05JQ0FMX0hPU1QKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgKmN5Z3dpbiogKSBDWUdXSU49eWVzOzsKKwkgKiApIENZR1dJTj1ubzs7Citlc2FjCitdLCBbJDAgaXMgb2Jzb2xldGU6IHVzZSBBQ19DQU5PTklDQUxfSE9TVCBhbmQgY2hlY2sgaWYgJGhvc3Rfb3MKK21hdGNoZXMgKmN5Z3dpbipdKSMgQUNfQ1lHV0lOCisKKworIyBBQ19FTVhPUzIKKyMgLS0tLS0tLS0tCisjIENoZWNrIGZvciBFTVggb24gT1MvMi4gIFRoaXMgaXMgYW5vdGhlciB3YXkgdG8gc2V0IHRoZSByaWdodCB2YWx1ZQorIyBmb3IgRVhFRVhULgorQVVfREVGVU4oW0FDX0VNWE9TMl0sCitbQUNfQ0FOT05JQ0FMX0hPU1QKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgKmVteCogKSBFTVhPUzI9eWVzOzsKKyAgICAgICogKSBFTVhPUzI9bm87OworZXNhYworXSwgWyQwIGlzIG9ic29sZXRlOiB1c2UgQUNfQ0FOT05JQ0FMX0hPU1QgYW5kIGNoZWNrIGlmICRob3N0X29zCittYXRjaGVzICplbXgqXSkjIEFDX0VNWE9TMgorCisKKyMgQUNfTUlOR1czMgorIyAtLS0tLS0tLS0tCisjIENoZWNrIGZvciBtaW5ndzMyLiAgVGhpcyBpcyBhbm90aGVyIHdheSB0byBzZXQgdGhlIHJpZ2h0IHZhbHVlIGZvcgorIyBFWEVFWFQuCitBVV9ERUZVTihbQUNfTUlOR1czMl0sCitbQUNfQ0FOT05JQ0FMX0hPU1QKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgKm1pbmd3MzIqICkgTUlOR1czMj15ZXM7OworCSAgKiApIE1JTkdXMzI9bm87OworZXNhYworXSwgWyQwIGlzIG9ic29sZXRlOiB1c2UgQUNfQ0FOT05JQ0FMX0hPU1QgYW5kIGNoZWNrIGlmICRob3N0X29zCittYXRjaGVzICptaW5ndzMyKl0pIyBBQ19NSU5HVzMyCisKKworIyBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCisjIHR5cGljYWxseSBkdWUgdG8gc3RhbmRhcmRzLWNvbmZvcm1hbmNlIGlzc3Vlcy4KKyMKKyMgUmVtZW1iZXIgdGhhdCAjdW5kZWYgaW4gQUhfVkVSQkFUSU0gZ2V0cyByZXBsYWNlZCB3aXRoICNkZWZpbmUgYnkKKyMgQUNfREVGSU5FLiAgVGhlIGdvYWwgaGVyZSBpcyB0byBkZWZpbmUgYWxsIGtub3duIGZlYXR1cmUtZW5hYmxpbmcKKyMgbWFjcm9zLCB0aGVuLCBpZiByZXBvcnRzIG9mIGNvbmZsaWN0cyBhcmUgbWFkZSwgZGlzYWJsZSBtYWNyb3MgdGhhdAorIyBjYXVzZSBwcm9ibGVtcyBvbiBzb21lIHBsYXRmb3JtcyAoc3VjaCBhcyBfX0VYVEVOU0lPTlNfXykuCitBQ19ERUZVTl9PTkNFKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorW0FDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKWRubAorQUNfQkVGT1JFKFskMF0sIFtBQ19SVU5fSUZFTFNFXSlkbmwKKworICBBQ19DSEVDS19IRUFERVIoW21pbml4L2NvbmZpZy5oXSwgW01JTklYPXllc10sIFtNSU5JWD1dKQorICBpZiB0ZXN0ICIkTUlOSVgiID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKFtfUE9TSVhfU09VUkNFXSwgWzFdLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBuZWVkIHRvIGluIG9yZGVyIGZvciBgc3RhdCcgYW5kIG90aGVyCisgICAgICAgdGhpbmdzIHRvIHdvcmsuXSkKKyAgICBBQ19ERUZJTkUoW19QT1NJWF8xX1NPVVJDRV0sIFsyXSwKKyAgICAgIFtEZWZpbmUgdG8gMiBpZiB0aGUgc3lzdGVtIGRvZXMgbm90IHByb3ZpZGUgUE9TSVguMSBmZWF0dXJlcworICAgICAgIGV4Y2VwdCB3aXRoIHRoaXMgZGVmaW5lZC5dKQorICAgIEFDX0RFRklORShbX01JTklYXSwgWzFdLAorICAgICAgW0RlZmluZSB0byAxIGlmIG9uIE1JTklYLl0pCisgIGZpCisKK2RubCBVc2UgYSBkaWZmZXJlbnQga2V5IHRoYW4gX19FWFRFTlNJT05TX18sIGFzIHRoYXQgbmFtZSBicm9rZSBleGlzdGluZworZG5sIGNvbmZpZ3VyZS5hYyB3aGVuIHVzaW5nIGF1dG9oZWFkZXIgMi42Mi4KKyAgQUhfVkVSQkFUSU0oW1VTRV9TWVNURU1fRVhURU5TSU9OU10sCitbLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gQUlYIDMsIEludGVyaXguICAqLworI2lmbmRlZiBfQUxMX1NPVVJDRQorIyB1bmRlZiBfQUxMX1NPVVJDRQorI2VuZGlmCisvKiBFbmFibGUgR05VIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IGhhdmUgdGhlbS4gICovCisjaWZuZGVmIF9HTlVfU09VUkNFCisjIHVuZGVmIF9HTlVfU09VUkNFCisjZW5kaWYKKy8qIEVuYWJsZSB0aHJlYWRpbmcgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNpZm5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisjIHVuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworI2VuZGlmCisvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBIUCBOb25TdG9wLiAgKi8KKyNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKyMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKyNlbmRpZgorLyogRW5hYmxlIGdlbmVyYWwgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNpZm5kZWYgX19FWFRFTlNJT05TX18KKyMgdW5kZWYgX19FWFRFTlNJT05TX18KKyNlbmRpZgorXSkKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX19dLAorICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfX10sCisgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgIFtBQ19MQU5HX1BST0dSQU0oWworIwkgIGRlZmluZSBfX0VYVEVOU0lPTlNfXyAxCisJICBBQ19JTkNMVURFU19ERUZBVUxUXSldLAorICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz15ZXNdLAorICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz1ub10pXSkKKyAgdGVzdCAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18gPSB5ZXMgJiYKKyAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKKyAgQUNfREVGSU5FKFtfQUxMX1NPVVJDRV0pCisgIEFDX0RFRklORShbX0dOVV9TT1VSQ0VdKQorICBBQ19ERUZJTkUoW19QT1NJWF9QVEhSRUFEX1NFTUFOVElDU10pCisgIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorXSkjIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUworCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIENoZWNrcyBmb3IgVU5JWCB2YXJpYW50cy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgVGhlc2UgYXJlIGtsdWRnZXMgd2hpY2ggc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIFBPU0lYIGNoZWNrLgorIyBUaGV5IGFyZW4ndCBjYWNoZWQsIHRvIGRpc2NvdXJhZ2UgdGhlaXIgdXNlLgorCisjIEFDX0FJWAorIyAtLS0tLS0KK0FVX0RFRlVOKFtBQ19BSVhdLCBbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKKworCisjIEFDX01JTklYCisjIC0tLS0tLS0tCitBVV9ERUZVTihbQUNfTUlOSVhdLCBbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKKworCisjIEFDX0lTQ19QT1NJWAorIyAtLS0tLS0tLS0tLS0KK0FVX0RFRlVOKFtBQ19JU0NfUE9TSVhdLCBbQUNfU0VBUkNIX0xJQlMoW3N0cmVycm9yXSwgW2Nwb3NpeF0pXSkKKworCisjIEFDX1hFTklYX0RJUgorIyAtLS0tLS0tLS0tLS0KK0FVX0RFRlVOKFtBQ19YRU5JWF9ESVJdLAorW0FDX01TR19DSEVDS0lORyhbZm9yIFhlbml4XSkKK0FDX0VHUkVQX0NQUChbeWVzXSwKK1sjaWYgZGVmaW5lZCBNX1hFTklYICYmICEgZGVmaW5lZCBNX1VOSVgKKyAgeWVzCitAJTpAZW5kaWZdLAorCSAgICAgW0FDX01TR19SRVNVTFQoW3llc10pOyBYRU5JWD15ZXNdLAorCSAgICAgW0FDX01TR19SRVNVTFQoW25vXSk7IFhFTklYPV0pCisKK0FDX0hFQURFUl9ESVJFTlRbXWRubAorXSwKK1tZb3Ugc2hvdWxkbid0IG5lZWQgdG8gZGVwZW5kIHVwb24gWEVOSVguICBSZW1vdmUgdGhlCitgQUNfTVNHX0NIRUNLSU5HJywgYEFDX0VHUkVQX0NQUCcsIGFuZCB0aGlzIHdhcm5pbmcgaWYgdGhpcyBwYXJ0CitvZiB0aGUgdGVzdCBpcyB1c2VsZXNzLl0pCisKKworIyBBQ19EWU5JWF9TRVEKKyMgLS0tLS0tLS0tLS0tCitBVV9ERUZVTihbQUNfRFlOSVhfU0VRXSwgW0FDX0ZVTkNfR0VUTU5URU5UXSkKKworCisjIEFDX0lSSVhfU1VOCisjIC0tLS0tLS0tLS0tCitBVV9ERUZVTihbQUNfSVJJWF9TVU5dLAorW0FDX0ZVTkNfR0VUTU5URU5UCitBQ19DSEVDS19MSUIoW3N1bl0sIFtnZXRwd25hbV0pXSkKKworCisjIEFDX1NDT19JTlRMCisjIC0tLS0tLS0tLS0tCitBVV9ERUZVTihbQUNfU0NPX0lOVExdLCBbQUNfRlVOQ19TVFJGVElNRV0pCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvY29uZi9hdXRvY29uZi9zdGF0dXMubTQgYi9zaGFyZS9hdXRvY29uZi9hdXRvY29uZi9zdGF0dXMubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkyMWQ5NwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9jb25mL2F1dG9jb25mL3N0YXR1cy5tNApAQCAtMCwwICsxLDE3NjQgQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQXV0b2NvbmYuICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjIFBhcmFtZXRlcml6aW5nIGFuZCBjcmVhdGluZyBjb25maWcuc3RhdHVzLgorIyBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisjIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQXV0b2NvbmYuICBUaGlzIHByb2dyYW0gaXMgZnJlZQorIyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKyMgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKyMgcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBBdXRvY29uZiBDb25maWd1cmUgU2NyaXB0IEV4Y2VwdGlvbiwKKyMgdmVyc2lvbiAzLjAsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbmQgYSBjb3B5IG9mIHRoZSBBdXRvY29uZiBDb25maWd1cmUgU2NyaXB0IEV4Y2VwdGlvbiBhbG9uZyB3aXRoCisjIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlcyBDT1BZSU5HdjMgYW5kIENPUFlJTkcuRVhDRVBUSU9OCisjIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworCisjIFdyaXR0ZW4gYnkgRGF2aWQgTWFjS2VuemllLCB3aXRoIGhlbHAgZnJvbQorIyBGcmFuYyxvaXMgUGluYXJkLCBLYXJsIEJlcnJ5LCBSaWNoYXJkIFBpeGxleSwgSWFuIExhbmNlIFRheWxvciwKKyMgUm9sYW5kIE1jR3JhdGgsIE5vYWggRnJpZWRtYW4sIGRhdmlkIGQgenVobiwgYW5kIG1hbnkgb3RoZXJzLgorCisKKyMgVGhpcyBmaWxlIGhhbmRsZXMgYWJvdXQgYWxsIHRoZSBwcmVwYXJhdGlvbiBhc3BlY3RzIGZvcgorIyBgY29uZmlnLnN0YXR1cyc6IHJlZ2lzdGVyaW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLCB0aGUgaGVhZGVycywKKyMgdGhlIGxpbmtzLCBhbmQgdGhlIGNvbW1hbmRzIGBjb25maWcuc3RhdHVzJyB3aWxsIHJ1bi4gIFRoZXJlIGlzIGEKKyMgbGl0dGxlIG1peHR1cmUgdGhvdWdoIG9mIHRoaW5ncyBhY3R1YWxseSBoYW5kbGVkIGJ5IGBjb25maWd1cmUnLAorIyBzdWNoIGFzIHJ1bm5pbmcgdGhlIGBjb25maWd1cmUnIGluIHRoZSBzdWIgZGlyZWN0b3JpZXMuICBNaW5vcgorIyBkZXRhaWwuCisjCisjIFRoZXJlIGFyZSB0d28ga2luZHMgb2YgY29tbWFuZHM6CisjCisjIENPTU1BTkRTOgorIworIyAgIFRoZXkgYXJlIG91dHB1dCBpbnRvIGBjb25maWcuc3RhdHVzJyB2aWEgYSBxdW90ZWQgaGVyZSBkb2MuICBUaGVzZQorIyAgIGNvbW1hbmRzIGFyZSBhbHdheXMgYXNzb2NpYXRlZCB0byBhIHRhZyB3aGljaCB0aGUgdXNlciBjYW4gdXNlIHRvCisjICAgdGVsbCBgY29uZmlnLnN0YXR1cycgd2hhdCBhcmUgdGhlIGNvbW1hbmRzIHNoZSB3YW50cyB0byBydW4uCisjCisjIElOSVQtQ01EUzoKKyMKKyMgICBUaGV5IGFyZSBvdXRwdXQgdmlhIGFuICp1bnF1b3RlZCogaGVyZS1kb2MuICBBcyBhIGNvbnNlcXVlbmNlICR2YXIKKyMgICB3aWxsIGJlIG91dHB1dCBhcyB0aGUgdmFsdWUgb2YgVkFSLiAgVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBieQorIyAgIGBjb25maWd1cmUnIHRvIGdpdmUgYGNvbmZpZy5zdGF0dXMnIHNvbWUgdmFyaWFibGVzIGl0IG5lZWRzIHRvIHJ1bgorIyAgIHRoZSBDT01NQU5EUy4gIEF0IHRoZSBkaWZmZXJlbmNlIG9mIENPTU1BTkRTLCB0aGUgSU5JVC1DTURTIGFyZQorIyAgIGFsd2F5cyBydW4uCisjCisjCisjIEhvbm9yYWJsZSBtZW1iZXJzIG9mIHRoaXMgZmFtaWx5IGFyZSBBQ19DT05GSUdfRklMRVMsCisjIEFDX0NPTkZJR19IRUFERVJTLCBBQ19DT05GSUdfTElOS1MgYW5kIEFDX0NPTkZJR19DT01NQU5EUy4gIEJhZCBib3lzCisjIGFyZSBBQ19MSU5LX0ZJTEVTLCBBQ19PVVRQVVRfQ09NTUFORFMgYW5kIEFDX09VVFBVVCB3aGVuIHVzZWQgd2l0aAorIyBhcmd1bWVudHMuICBGYWxzZSBtZW1iZXJzIGFyZSBBQ19DT05GSUdfU1JDRElSLCBBQ19DT05GSUdfU1VCRElSUworIyBhbmQgQUNfQ09ORklHX0FVWF9ESVIuICBDb3VzaW5zIGFyZSBBQ19DT05GSUdfQ09NTUFORFNfUFJFIGFuZAorIyBBQ19DT05GSUdfQ09NTUFORFNfUE9TVC4KKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEF1eGlsaWFyeSBtYWNyb3MuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgX0FDX1NSQ0RJUlMoQlVJTEQtRElSLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJbnB1dHM6CisjICAgLSBCVUlMRC1ESVItTkFNRSBpcyBgdG9wLWJ1aWxkIC0+IGJ1aWxkJyBhbmQgYHRvcC1zcmMgLT4gc3JjJworIyAgIC0gYCRzcmNkaXInIGlzIGB0b3AtYnVpbGQgLT4gdG9wLXNyYycKKyMKKyMgT3V0cHV0czoKKyMgLSBgYWNfYnVpbGRkaXInIGlzIGAuJywgZm9yIHN5bW1ldHJ5IG9ubHkuCisjIC0gYGFjX3RvcF9idWlsZGRpcl9zdWInIGlzIGBidWlsZCAtPiB0b3BfYnVpbGQnLgorIyAgICAgIFRoaXMgaXMgdXNlZCBmb3IgQHRvcF9idWlsZGRpckAuCisjIC0gYGFjX3RvcF9idWlsZF9wcmVmaXgnIGlzIGBidWlsZCAtPiB0b3BfYnVpbGQnLgorIyAgICAgIElmIG5vdCBlbXB0eSwgaGFzIGEgdHJhaWxpbmcgc2xhc2guCisjIC0gYGFjX3NyY2RpcicgaXMgYGJ1aWxkIC0+IHNyYycuCisjIC0gYGFjX3RvcF9zcmNkaXInIGlzIGBidWlsZCAtPiB0b3Atc3JjJy4KKyMgYW5kIGBhY19hYnNfYnVpbGRkaXInIGV0Yy4sIHRoZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZXMuCittNF9kZWZpbmUoW19BQ19TUkNESVJTXSwKK1thY19idWlsZGRpcj0uCisKK2Nhc2UgJDEgaW4KKy4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKikKKyAgYWNfZGlyX3N1ZmZpeD0vYEFTX0VDSE8oWyQxXSkgfCBzZWQgJ3N8XlwuW1tcXC9dXXx8J2AKKyAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorICBhY190b3BfYnVpbGRkaXJfc3ViPWBBU19FQ0hPKFsiJGFjX2Rpcl9zdWZmaXgiXSkgfCBzZWQgJ3N8L1tbXlxcL11dKnwvLi58ZztzfC98fCdgCisgIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9zdWIgaW4KKyAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1Yi8gOzsKKyAgZXNhYyA7OworZXNhYworYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkCithY19hYnNfYnVpbGRkaXI9JGFjX3B3ZCRhY19kaXJfc3VmZml4CisjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorYWNfdG9wX2J1aWxkZGlyPSRhY190b3BfYnVpbGRfcHJlZml4CisKK2Nhc2UgJHNyY2RpciBpbgorICAuKSAgIyBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisgICAgYWNfc3JjZGlyPS4KKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZCA7OworICBbW1xcL11dKiB8ID86W1tcXC9dXSogKSAgIyBBYnNvbHV0ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7CisgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JHNyY2RpciA7OworICAqKSAjIFJlbGF0aXZlIG5hbWUuCisgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4CisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkLyRzcmNkaXIgOzsKK2VzYWMKK2FjX2Fic19zcmNkaXI9JGFjX2Fic190b3Bfc3JjZGlyJGFjX2Rpcl9zdWZmaXgKK10pIyBfQUNfU1JDRElSUworCisKKyMgX0FDX0hBVkVfVE9QX0JVSUxEX1BSRUZJWAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFubm91bmNlIHRvIHRoZSB3b3JsZCAodG8gTGlidG9vbCkgdGhhdCB3ZSBzdWJzdGl0dXRlIEB0b3BfYnVpbGRfcHJlZml4QC4KK0FDX0RFRlVOKFtfQUNfSEFWRV9UT1BfQlVJTERfUFJFRklYXSkKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBSZWdpc3RlcmluZyB0aGUgdGFncy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBfQUNfQ09ORklHX0NPTU1BTkRTX0lOSVQoW0lOSVQtQ09NTUFORFNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBSZWdpc3RlciBJTklULUNPTU1BTkRTIGFzIGNvbW1hbmQgcGFzdGVkICp1bnF1b3RlZCogaW4KKyMgYGNvbmZpZy5zdGF0dXMnLiAgVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCB0byBwYXNzIHZhcmlhYmxlcyBmcm9tCisjIGBjb25maWd1cmUnIHRvIGBjb25maWcuc3RhdHVzJy4gIE5vdGUgdGhhdCAkWzFdIGlzIG5vdCBvdmVyIHF1b3RlZCBhcworIyB3YXMgdGhlIGNhc2UgaW4gQUNfT1VUUFVUX0NPTU1BTkRTLgorbTRfZGVmaW5lKFtfQUNfQ09ORklHX0NPTU1BTkRTX0lOSVRdLAorW200X2lmdmFsKFskMV0sCisJICBbbTRfYXBwZW5kKFtfQUNfT1VUUFVUX0NPTU1BTkRTX0lOSVRdLAorCQkgICAgIFskMQorXSldKV0pCisKKworIyBBQ19GSUxFX0RFUEVOREVOQ1lfVFJBQ0UoREVTVCwgU09VUkNFMSwgW1NPVVJDRTIuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIG1hY3JvIGRvZXMgbm90aGluZywgaXQncyBhIGhvb2sgdG8gYmUgcmVhZCB3aXRoIGBhdXRvY29uZiAtLXRyYWNlJy4KKyMKKyMgSXQgYW5ub3VuY2VzIERFU1QgZGVwZW5kcyB1cG9uIHRoZSBTT1VSQ0UxIGV0Yy4KK200X2RlZmluZShbQUNfRklMRV9ERVBFTkRFTkNZX1RSQUNFXSwgW10pCisKKworIyBfQUNfRklMRV9ERVBFTkRFTkNZX1RSQUNFX0NPTE9OKERFU1Q6U09VUkNFMVs6U09VUkNFMi4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVjbGFyZSB0aGF0IERFU1QgZGVwZW5kcyB1cG9uIFNPVVJDRTEgZXRjLgorIworbTRfZGVmaW5lKFtfQUNfRklMRV9ERVBFTkRFTkNZX1RSQUNFX0NPTE9OXSwKK1tBQ19GSUxFX0RFUEVOREVOQ1lfVFJBQ0UobTRfdHJhbnNsaXQoWyQxXSwgWzpdLCBbLF0pKV0pCisKKworIyBfQUNfQ09ORklHX0RFUEVOREVOQ1koTU9ERSwgREVTVFs6U09VUkNFMS4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNT0RFIGlzIGBGSUxFUycsIGBIRUFERVJTJywgb3IgYExJTktTJy4KKyMKKyMgQmUgc3VyZSB0aGF0IGEgbWlzc2luZyBkZXBlbmRlbmN5IGlzIGV4cHJlc3NlZCBhcyBhIGRlcGVuZGVuY3kgdXBvbgorIyBgREVTVC5pbicgKGV4Y2VwdCB3aXRoIGNvbmZpZyBsaW5rcykuCisjCittNF9kZWZpbmUoW19BQ19DT05GSUdfREVQRU5ERU5DWV0sCitbX0FDX0ZJTEVfREVQRU5ERU5DWV9UUkFDRV9DT0xPTihbJDJdX0FDX0NPTkZJR19ERVBFTkRFTkNZX0RFRkFVTFQoJEApKWRubAorXSkKKworCisjIF9BQ19DT05GSUdfREVQRU5ERU5DWV9ERUZBVUxUKE1PREUsIERFU1RbOlNPVVJDRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhwYW5kIHRvIGA6REVTVC5pbicgaWYgYXBwcm9wcmlhdGUsIG9yIHRvIGVtcHR5IHN0cmluZyBvdGhlcndpc2UuCisjCisjIE1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb246CisjIElmIHRoZSB0YWcgY29udGFpbnMgYDonLCBleHBhbmQgdG8gbm90aGluZy4KKyMgT3RoZXJ3aXNlLCBmb3IgYSBjb25maWcgZmlsZSBvciBoZWFkZXIsIGFkZCBgOkRFU1QuaW4nLgorIyBGb3IgYSBjb25maWcgbGluaywgREVTVC5pbiBpcyBub3QgYXBwcm9wcmlhdGU6CisjICAtIGlmIHRoZSB0YWcgaXMgbGl0ZXJhbCwgY29tcGxhaW4uCisjICAtIG90aGVyd2lzZSwganVzdCBleHBhbmQgdG8gbm90aGluZyBhbmQgcHJvY2VlZCB3aXRoIGZpbmdlcnMgY3Jvc3NlZC4KKyMgICAgKFdlIGdldCB0byB0aGlzIGNhc2UgZnJvbSB0aGUgb2Jzb2xldGUgQUNfTElOS19GSUxFUywgZm9yIGV4YW1wbGUuKQorIworbTRfZGVmaW5lKFtfQUNfQ09ORklHX0RFUEVOREVOQ1lfREVGQVVMVF0sCitbbTRfaWYobTRfaW5kZXgoWyQyXSwgWzpdKSwgWy0xXSwKKwkgICBbbTRfaWYoWyQxXSwgW0xJTktTXSwKKwkJICBbQVNfTElURVJBTF9JRihbJDJdLAorCQkgICAgW200X2ZhdGFsKFtJbnZhbGlkIEFDX0NPTkZJR19MSU5LUyB0YWc6IGAkMiddKV0pXSwKKwkJICBbOiQyLmluXSldKV0pCisKKworIyBfQUNfQ09ORklHX1VOSVFVRShNT0RFLCBERVNUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNT0RFIGlzIGBGSUxFUycsIGBIRUFERVJTJywgYExJTktTJywgYENPTU1BTkRTJywgb3IgYFNVQkRJUlMnLgorIworIyBWZXJpZnkgdGhhdCB0aGVyZSBpcyBubyBkb3VibGUgZGVmaW5pdGlvbiBvZiBhbiBvdXRwdXQgZmlsZS4KKyMKK200X2RlZmluZShbX0FDX0NPTkZJR19VTklRVUVdLAorW200X2lmZGVmKFtfQUNfU0VFTl9UQUcoJDIpXSwKKyAgIFttNF9mYXRhbChbYCQyJyBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgd2l0aCBBQ19DT05GSUdfXW00X2RlZm4oCisgICAgIFtfQUNfU0VFTl9UQUcoJDIpXSkuKV0sCisgICBbbTRfZGVmaW5lKFtfQUNfU0VFTl9UQUcoJDIpXSwgWyQxXSldKWRubAorXSkKKworCisjIF9BQ19DT05GSUdfRk9PUyhNT0RFLCBUQUdTLi4uLCBbQ09NTUFORFNdLCBbSU5JVC1DTURTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNT0RFIGlzIGBGSUxFUycsIGBIRUFERVJTJywgYExJTktTJywgb3IgYENPTU1BTkRTJy4KKyMKKyMgQXNzb2NpYXRlIHRoZSBDT01NQU5EUyB0byBlYWNoIFRBRywgaS5lLiwgd2hlbiBjb25maWcuc3RhdHVzIGNyZWF0ZXMgVEFHLAorIyBydW4gQ09NTUFORFMgYWZ0ZXJ3YXJkcy4gIChUaGlzIGlzIGRvbmUgaW4gX0FDX0NPTkZJR19SRUdJU1RFUl9ERVNULikKKyMKKyMgRm9yIENPTU1BTkRTLCBkbyBub3QgbTRfbm9ybWFsaXplIFRBR1MgYmVmb3JlIGFkZGluZyBpdCB0byBhY19jb25maWdfY29tbWFuZHMuCisjIFRoaXMgaGlzdG9yaWNhbCBkaWZmZXJlbmNlIGFsbG93cyBtYWNybyBjYWxscyBpbiBUQUdTLgorIworbTRfZGVmaW5lKFtfQUNfQ09ORklHX0ZPT1NdLAorW200X21hcF9hcmdzX3coWyQyXSwgW19BQ19DT05GSUdfUkVHSVNURVIoWyQxXSxdLCBbLCBbJDNdKV0pXWRubAorW200X2RlZmluZShbX0FDX1NFRU5fQ09ORklHKEFOWSldKV1kbmwKK1ttNF9kZWZpbmUoW19BQ19TRUVOX0NPTkZJRygkMSldKV1kbmwKK1tfQUNfQ09ORklHX0NPTU1BTkRTX0lOSVQoWyQ0XSldZG5sCitbYWNfY29uZmlnX1tdbTRfdG9sb3dlcihbJDFdKT0iJGFjX2NvbmZpZ19bXW00X3RvbG93ZXIoWyQxXSkgXWRubAorW200X2lmKFskMV0sIFtDT01NQU5EU10sIFskMl0sIFttNF9ub3JtYWxpemUoWyQyXSldKSIKK10pCisKKyMgX0FDX0NPTkZJR19DT01QVVRFX0RFU1QoU1RSSU5HKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbXB1dGUgdGhlIERFU1QgZnJvbSBTVFJJTkcgYnkgc3RyaXBwaW5nIGFueSA6IGFuZCBmb2xsb3dpbmcKKyMgY2hhcmFjdGVycy4gIEd1YXJhbnRlZSBhIG1hdGNoIGluIG00X2luZGV4LCBzbyBhcyB0byBhdm9pZCBhIGJ1ZworIyB3aXRoIHByZWNpc2lvbiAtMSBpbiBtNF9mb3JtYXQgaW4gb2xkZXIgbTQuCittNF9kZWZpbmUoW19BQ19DT05GSUdfQ09NUFVURV9ERVNUXSwKK1ttNF9mb3JtYXQoW1slLipzXV0sIG00X2luZGV4KFskMTpdLCBbOl0pLCBbJDFdKV0pCisKKyMgX0FDX0NPTkZJR19SRUdJU1RFUihNT0RFLCBUQUcsIFtDT01NQU5EU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNT0RFIGlzIGBGSUxFUycsIGBIRUFERVJTJywgYExJTktTJywgb3IgYENPTU1BTkRTJy4KKyMKK200X2RlZmluZShbX0FDX0NPTkZJR19SRUdJU1RFUl0sCitbbTRfaWYoWyQxXSwgW0NPTU1BTkRTXSwKKyAgICAgICBbXSwKKyAgICAgICBbX0FDX0NPTkZJR19ERVBFTkRFTkNZKFskMV0sIFskMl0pXSldZG5sCitbX0FDX0NPTkZJR19SRUdJU1RFUl9ERVNUKFskMV0sIFskMl0sCisgIF9BQ19DT05GSUdfQ09NUFVURV9ERVNUKFskMl0pLCBbJDNdKV0pCisKKworIyBfQUNfQ09ORklHX1JFR0lTVEVSX0RFU1QoTU9ERSwgVEFHLCBERVNULCBbQ09NTUFORFNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNT0RFIGlzIGBGSUxFUycsIGBIRUFERVJTJywgYExJTktTJywgb3IgYENPTU1BTkRTJy4KKyMgVEFHIGlzIGluIHRoZSBmb3JtIERFU1RbOlNPVVJDRS4uLl0uCisjIFRodXMgcGFyYW1ldGVyICQzIGlzIHRoZSBmaXJzdCBwYXJ0IG9mICQyLgorIworIyBXaXRoIENPTkZJR19MSU5LUywgcmVqZWN0IERFU1Q9LiwgYmVjYXVzZSBpdCBpcyBtYWtlcyBpdCBoYXJkIGZvciAuL2NvbmZpZy5zdGF0dXMKKyMgdG8gZ3Vlc3MgdGhlIGxpbmtzIHRvIGVzdGFibGlzaCAoYC4vY29uZmlnLnN0YXR1cyAuJykuCisjCisjIFNhdmUgdGhlIG5hbWUgb2YgdGhlIGZpcnN0IGNvbmZpZyBoZWFkZXIgdG8gQUhfSEVBREVSLgorIworbTRfZGVmaW5lKFtfQUNfQ09ORklHX1JFR0lTVEVSX0RFU1RdLAorW19BQ19DT05GSUdfVU5JUVVFKFskMV0sIFskM10pXWRubAorW200X2lmKFskMSAkM10sIFtMSU5LUyAuXSwKKyAgICAgICBbbTRfZmF0YWwoW2ludmFsaWQgZGVzdGluYXRpb24gb2YgYSBjb25maWcgbGluazogYC4nXSldLAorICAgICAgIFskMV0sIFtIRUFERVJTXSwKKyAgICAgICBbbTRfZGVmaW5lX2RlZmF1bHQoW0FIX0hFQURFUl0sIFskM10pXSldZG5sCitkbmwKK2RubCBSZWNvZ25pemUgVEFHIGFzIGFuIGFyZ3VtZW50IHRvIGNvbmZpZy5zdGF0dXM6CitkbmwKK1ttNF9hcHBlbmQoW19BQ19MSVNUX1RBR1NdLAorWyAgICAiJDMiKSBDT05GSUdfJDE9IiRDT05GSUdfJDEgJDIiIDs7CitdKV1kbmwKK2RubAorZG5sIFJlZ2lzdGVyIHRoZSBhc3NvY2lhdGVkIGNvbW1hbmRzLCBpZiBhbnk6CitkbmwKK1ttNF9pZnZhbChbJDRdLAorW200X2FwcGVuZChbX0FDX0xJU1RfVEFHX0NPTU1BTkRTXSwKK1sgICAgIiQzIjpdbTRfZm9ybWF0KFtbJS4xc11dLCBbJDFdKVspICQ0IDs7CitdKV0pXSkjIF9BQ19DT05GSUdfUkVHSVNURVJfREVTVAorCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIENvbmZpZ3VyYXRpb24gZmlsZXMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBBQ19DT05GSUdfRklMRVMoRklMRS4uLiwgW0NPTU1BTkRTXSwgW0lOSVQtQ01EU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU3BlY2lmeSBvdXRwdXQgZmlsZXMsIGkuZS4sIGZpbGVzIHRoYXQgYXJlIGNvbmZpZ3VyZWQgd2l0aCBBQ19TVUJTVC4KKyMKK0FDX0RFRlVOKFtBQ19DT05GSUdfRklMRVNdLCBbX0FDX0NPTkZJR19GT09TKFtGSUxFU10sICRAKV0pCisKKworIyBfQUNfU0VEX0NNRF9MSU1JVAorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBFdmFsdWF0ZSB0byBhbiBtNCBudW1iZXIgZXF1YWwgdG8gdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbW1hbmRzIHRvIHB1dAorIyBpbiBhbnkgc2luZ2xlIHNlZCBwcm9ncmFtLCBub3QgY291bnRpbmcgIjoiIGNvbW1hbmRzLgorIworIyBTb21lIHNlZHMgaGF2ZSBzbWFsbCBjb21tYW5kIG51bWJlciBsaW1pdHMsIGxpa2Ugb24gRGlnaXRhbCBPU0YvMSBhbmQgSFAtVVguCittNF9kZWZpbmUoW19BQ19TRURfQ01EX0xJTUlUXSwKK2RubCBPbmUgY2Fubm90IHBvcnRhYmx5IGdvIGZ1cnRoZXIgdGhhbiA5OSBjb21tYW5kcyBiZWNhdXNlIG9mIEhQLVVYLgorWzk5XSkKKworCisjIF9BQ19BV0tfTElURVJBTF9MSU1JVAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXZhbHVhdGUgdG8gdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gcHV0IGluIGFuIGF3aworIyBzdHJpbmcgbGl0ZXJhbCwgbm90IGNvdW50aW5nIGVzY2FwZSBjaGFyYWN0ZXJzLgorIworIyBTb21lIGF3aydzIGhhdmUgc21hbGwgbGltaXRzLCBzdWNoIGFzIFNvbGFyaXMgYW5kIEFJWCBhd2suCittNF9kZWZpbmUoW19BQ19BV0tfTElURVJBTF9MSU1JVF0sCitbMTQ4XSkKKworCisjIF9BQ19PVVRQVVRfRklMRVNfUFJFUEFSRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ3JlYXRlIHRoZSBhd2sgc2NyaXB0cyBuZWVkZWQgZm9yIENPTkZJR19GSUxFUy4KKyMgU3VwcG9ydCBtdWx0aWxpbmUgc3Vic3RpdHV0aW9ucyBhbmQgbWFrZSBzdXJlIHRoYXQgdGhlIHN1YnN0aXR1dGlvbnMgYXJlCisjIG5vdCBldmFsdWF0ZWQgcmVjdXJzaXZlbHkuCisjIFRoZSBpbnRlbnRpb24gaXMgdG8gaGF2ZSByZWFkYWJsZSBjb25maWcuc3RhdHVzIGFuZCBjb25maWd1cmUsIGV2ZW4KKyMgdGhvdWdoIHRoaXMgbTQgY29kZSBtaWdodCBiZSBzY2FyeS4KKyMKKyMgVGhpcyBjb2RlIHdhcyB3cml0dGVuIGJ5IERhbiBNYW50aGV5IGFuZCByZXdyaXR0ZW4gYnkgUmFsZiBXaWxkZW5odWVzLgorIworIyBUaGlzIG1hY3JvIGlzIGV4cGFuZGVkIGluc2lkZSBhIGhlcmUgZG9jdW1lbnQuICBJZiB0aGUgaGVyZSBkb2N1bWVudCBpcworIyBjbG9zZWQsIGl0IGhhcyB0byBiZSByZW9wZW5lZCB3aXRoCisjICJjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xIi4KKyMKK200X2RlZmluZShbX0FDX09VVFBVVF9GSUxFU19QUkVQQVJFXSwKK1sjIFNldCB1cCB0aGUgc2NyaXB0cyBmb3IgQ09ORklHX0ZJTEVTIHNlY3Rpb24uCisjIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0ZJTEVTLgorIyBUaGlzIGhhcHBlbnMgZm9yIGluc3RhbmNlIHdpdGggYC4vY29uZmlnLnN0YXR1cyBjb25maWcuaCcuCitpZiB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIjsgdGhlbgorCitkbmwgRm9yIEFDX1NVQlNUX0ZJTEUsIGNoZWNrIGZvciB1c2FibGUgZ2V0bGluZSBzdXBwb3J0IGluIGF3aywKK2RubCBhdCBjb25maWcuc3RhdHVzIGV4ZWN1dGlvbiB0aW1lLgorZG5sIE90aGVyd2lzZSwgZG8gdGhlIGludGVycG9sYXRpb24gaW4gc2gsIHdoaWNoIGlzIHNsb3dlci4KK2RubCBXaXRob3V0IGFueSBBQ19TVUJTVF9GSUxFLCBvbWl0IGFsbCByZWxhdGVkIGNvZGUuCitkbmwgTm90ZSB0aGUgZXhwYW5zaW9uIGlzIGRvdWJsZS1xdW90ZWQgZm9yIHJlYWRhYmlsaXR5LgorbTRfaWZkZWYoW19BQ19TVUJTVF9GSUxFU10sCitbW2lmICRBV0sgJ0JFR0lOIHsgZ2V0bGluZSA8Ii9kZXYvbnVsbCIgfScgPC9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorICBhY19jc19hd2tfZ2V0bGluZT06CisgIGFjX2NzX2F3a19waXBlX2luaXQ9CisgIGFjX2NzX2F3a19yZWFkX2ZpbGU9JworICAgICAgd2hpbGUgKChnZXRsaW5lIGFsaW5lIDwgKEZba2V5XSkpID4gMCkKKwlwcmludChhbGluZSkKKyAgICAgIGNsb3NlKEZba2V5XSknCisgIGFjX2NzX2F3a19waXBlX2Zpbmk9CitlbHNlCisgIGFjX2NzX2F3a19nZXRsaW5lPWZhbHNlCisgIGFjX2NzX2F3a19waXBlX2luaXQ9InByaW50IFwiY2F0IDw8J3wjXyEhXyN8JyAmJlwiIgorICBhY19jc19hd2tfcmVhZF9maWxlPScKKyAgICAgIHByaW50ICJ8I18hIV8jfCIKKyAgICAgIHByaW50ICJjYXQgIiBGW2tleV0gIiAmJiIKKyAgICAgICckYWNfY3NfYXdrX3BpcGVfaW5pdAorICAjIFRoZSBmaW5hbCBgOicgZmluaXNoZXMgdGhlIEFORCBsaXN0LgorICBhY19jc19hd2tfcGlwZV9maW5pPSdFTkQgeyBwcmludCAifCNfISFfI3wiOyBwcmludCAiOiIgfScKK2ZpXV0pCithY19jcj1gZWNobyBYIHwgdHIgWCAnXDAxNSdgCisjIE9uIGN5Z3dpbiwgYmFzaCBjYW4gZWF0IFxyIGluc2lkZSBgYCBpZiB0aGUgdXNlciByZXF1ZXN0ZWQgaWduY3IuCisjIEJ1dCB3ZSBrbm93IG9mIG5vIG90aGVyIHNoZWxsIHdoZXJlIGFjX2NyIHdvdWxkIGJlIGVtcHR5IGF0IHRoaXMKKyMgcG9pbnQsIHNvIHdlIGNhbiB1c2UgYSBiYXNoaXNtIGFzIGEgZmFsbGJhY2suCitpZiB0ZXN0ICJ4JGFjX2NyIiA9IHg7IHRoZW4KKyAgZXZhbCBhY19jcj1cJFwnXFxyXCcKK2ZpCithY19jc19hd2tfY3I9YCRBV0sgJ0JFR0lOIHsgcHJpbnQgImFccmIiIH0nIDwvZGV2L251bGwgMj4vZGV2L251bGxgCitpZiB0ZXN0ICIkYWNfY3NfYXdrX2NyIiA9ICJhJHthY19jcn1iIjsgdGhlbgorICBhY19jc19hd2tfY3I9J1xyJworZWxzZQorICBhY19jc19hd2tfY3I9JGFjX2NyCitmaQorZG5sCitkbmwgRGVmaW5lIHRoZSBwaXBlIHRoYXQgZG9lcyB0aGUgc3Vic3RpdHV0aW9uLgorbTRfaWZkZWYoW19BQ19TVUJTVF9GSUxFU10sCitbbTRfZGVmaW5lKFtfQUNfU1VCU1RfQ01EU10sIFt8CitpZiAkYWNfY3NfYXdrX2dldGxpbmU7IHRoZW4KKyAgJEFXSyAtZiAiJHRtcC9zdWJzLmF3ayIKK2Vsc2UKKyAgJEFXSyAtZiAiJHRtcC9zdWJzLmF3ayIgfCAkU0hFTEwKK2ZpXSldLAorW200X2RlZmluZShbX0FDX1NVQlNUX0NNRFNdLAorW3wgJEFXSyAtZiAiJHRtcC9zdWJzLmF3ayJdKV0pZG5sCisKK2VjaG8gJ0JFR0lOIHsnID4iJHRtcC9zdWJzMS5hd2siICYmCitfQUNFT0YKKworbTRfaWZkZWYoW19BQ19TVUJTVF9GSUxFU10sCitbIyBDcmVhdGUgY29tbWFuZHMgdG8gc3Vic3RpdHV0ZSBmaWxlIG91dHB1dCB2YXJpYWJsZXMuCit7CisgIGVjaG8gImNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MSIgJiYKKyAgZWNobyAnY2F0ID4+IlwkdG1wL3N1YnMxLmF3ayIgPDxcXF9BQ0FXSyAmJicgJiYKKyAgZWNobyAiJGFjX3N1YnN0X2ZpbGVzIiB8IHNlZCAncy8uKi9GQDw6QCImIkA6PkA9IiQmIi8nICYmCisgIGVjaG8gIl9BQ0FXSyIgJiYKKyAgZWNobyAiX0FDRU9GIgorfSA+Y29uZiQkZmlsZXMuc2ggJiYKKy4gLi9jb25mJCRmaWxlcy5zaCB8fAorICBBQ19NU0dfRVJST1IoW2NvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTXSkKK3JtIC1mIGNvbmYkJGZpbGVzLnNoCitdKWRubAorCit7CisgIGVjaG8gImNhdCA+Y29uZiQkc3Vicy5hd2sgPDxfQUNFT0YiICYmCisgIGVjaG8gIiRhY19zdWJzdF92YXJzIiB8IHNlZCAncy8uKi8mISQmJGFjX2RlbGltLycgJiYKKyAgZWNobyAiX0FDRU9GIgorfSA+Y29uZiQkc3Vicy5zaCB8fAorICBBQ19NU0dfRVJST1IoW2NvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTXSkKK2FjX2RlbGltX251bT1gZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgZ3JlcCAtYyAnJCdgCithY19kZWxpbT0nJSFfISMgJworZm9yIGFjX2xhc3RfdHJ5IGluIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIDo7IGRvCisgIC4gLi9jb25mJCRzdWJzLnNoIHx8CisgICAgQUNfTVNHX0VSUk9SKFtjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVU10pCisKK2RubCBEbyBub3QgdXNlIGdyZXAgb24gY29uZiQkc3Vicy5hd2ssIHNpbmNlIEFJWCBncmVwIGhhcyBhIGxpbmUgbGVuZ3RoIGxpbWl0LgorICBhY19kZWxpbV9uPWBzZWQgLW4gInMvLiokYWNfZGVsaW1cJC9YL3AiIGNvbmYkJHN1YnMuYXdrIHwgZ3JlcCAtYyBYYAorICBpZiB0ZXN0ICRhY19kZWxpbV9uID0gJGFjX2RlbGltX251bTsgdGhlbgorICAgIGJyZWFrCisgIGVsaWYgJGFjX2xhc3RfdHJ5OyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVU10pCisgIGVsc2UKKyAgICBhY19kZWxpbT0iJGFjX2RlbGltISRhY19kZWxpbSBfJGFjX2RlbGltISEgIgorICBmaQorZG9uZQorcm0gLWYgY29uZiQkc3Vicy5zaAorCitkbmwgSW5pdGlhbGl6ZSBhbiBhd2sgYXJyYXkgb2Ygc3Vic3RpdHV0aW9ucywga2V5ZWQgYnkgdmFyaWFibGUgbmFtZS4KK2RubAorZG5sIFRoZSBpbml0aWFsIGxpbmUgY29udGFpbnMgdGhlIHZhcmlhYmxlIG5hbWUgVkFSLCB0aGVuIGEgYCEnLgorZG5sIENvbnN0cnVjdCBgU1siVkFSIl09JyBmcm9tIGl0LgorZG5sIFRoZSByZXN0IG9mIHRoZSBsaW5lLCBhbmQgcG90ZW50aWFsbHkgZnVydGhlciBsaW5lcywgY29udGFpbiB0aGUKK2RubCBzdWJzdGl0dXRlZCB2YWx1ZTsgdGhlIGxhc3Qgb2YgdGhvc2UgZW5kcyB3aXRoICRhY19kZWxpbS4gIFdlIHNwbGl0CitkbmwgdGhlIG91dHB1dCBib3RoIGFsb25nIHRob3NlIHN1YnN0aXR1dGVkIG5ld2xpbmVzIGFuZCBhdCBpbnRlcnZhbHMgb2YKK2RubCBsZW5ndGggX0FDX0FXS19MSVRFUkFMX0xJTUlULiAgVGhlIGxhdHRlciBpcyBkb25lIHRvIGNvbXBseSB3aXRoIGF3aworZG5sIHN0cmluZyBsaXRlcmFsIGxpbWl0YXRpb25zLCB0aGUgZm9ybWVyIGZvciBzaW1wbGljaXR5IGluIGRvaW5nIHNvLgorZG5sCitkbmwgV2UgZGVhbCB3aXRoIG9uZSBpbnB1dCBsaW5lIGF0IGEgdGltZSB0byBhdm9pZCBzZWQgcGF0dGVybiBzcGFjZQorZG5sIGxpbWl0YXRpb25zLiAgV2Uga2lsbCB0aGUgZGVsaW1pdGVyICRhY19kZWxpbSBiZWZvcmUgc3BsaXR0aW5nIHRoZQorZG5sIHN0cmluZyAob3RoZXJ3aXNlIHdlIHJpc2sgc3BsaXR0aW5nIHRoZSBkZWxpbWl0ZXIpLiAgQW5kIHdlIGRvIHRoZQorZG5sIHNwbGl0dGluZyBiZWZvcmUgdGhlIHF1b3Rpbmcgb2YgYXdrIHNwZWNpYWwgY2hhcmFjdGVycyAob3RoZXJ3aXNlIHdlCitkbmwgcmlzayBzcGxpdHRpbmcgYW4gZXNjYXBlIHNlcXVlbmNlKS4KK2RubAorZG5sIE91dHB1dCBhcyBzZXBhcmF0ZSBzdHJpbmcgbGl0ZXJhbHMsIGpvaW5lZCB3aXRoIGJhY2tzbGFzaC1uZXdsaW5lLgorZG5sIEVsaW1pbmF0ZSB0aGUgbmV3bGluZSBhZnRlciBgPScgaW4gYSBzZWNvbmQgc2NyaXB0LCBmb3IgcmVhZGFiaWxpdHkuCitkbmwKK2RubCBOb3RlcyB0byB0aGUgbWFpbiBwYXJ0IG9mIHRoZSBhd2sgc2NyaXB0OgorZG5sIC0gdGhlIHVudXN1YWwgRlMgdmFsdWUgaGVscHMgcHJldmVudCBydW5uaW5nIGludG8gdGhlIGxpbWl0IG9mIDk5IGZpZWxkcywKK2RubCAtIHdlIGF2b2lkIHN1Yi9nc3ViIGJlY2F1c2Ugb2YgdGhlIFwmIHF1b3RpbmcgaXNzdWVzLCBzZWUKK2RubCAgIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nYXdrL21hbnVhbC9odG1sX25vZGUvR29yeS1EZXRhaWxzLmh0bWwKK2RubCAtIFdyaXRpbmcgYCQgMCcgcHJldmVudHMgZXhwYW5zaW9uIGJ5IGJvdGggdGhlIHNoZWxsIGFuZCBtNCBoZXJlLgorZG5sCitkbmwgbTQtZG91YmxlLXF1b3RlIG1vc3Qgb2YgdGhlIHNjcmlwdGluZyBmb3IgcmVhZGFiaWxpdHkuCitbY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitjYXQgPj4iXCR0bXAvc3ViczEuYXdrIiA8PFxcX0FDQVdLICYmCitfQUNFT0YKK3NlZCAtbiAnCitoCitzL14vU1siLzsgcy8hLiovIl09LworcAorZworcy9eW14hXSohLy8KKzpyZXBsCit0IHJlcGwKK3MvJyIkYWNfZGVsaW0iJyQvLwordCBkZWxpbQorOm5sCitoCitzL1woLlx7XV9BQ19BV0tfTElURVJBTF9MSU1JVFtcfVwpLi4qL1wxLwordCBtb3JlMQorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxuIlxcLworcAorbgorYiByZXBsCis6bW9yZTEKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyJcXC8KK3AKK2cKK3MvLlx7XV9BQ19BV0tfTElURVJBTF9MSU1JVFtcfS8vCit0IG5sCis6ZGVsaW0KK2gKK3MvXCguXHtdX0FDX0FXS19MSVRFUkFMX0xJTUlUW1x9XCkuLiovXDEvCit0IG1vcmUyCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iLworcAorYgorOm1vcmUyCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iXFwvCitwCitnCitzLy5ce11fQUNfQVdLX0xJVEVSQUxfTElNSVRbXH0vLwordCBkZWxpbQorJyA8Y29uZiQkc3Vicy5hd2sgfCBzZWQgJworL15bXiIiXS97CisgIE4KKyAgcy9cbi8vCit9CisnID4+JENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCitybSAtZiBjb25mJCRzdWJzLmF3aworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitfQUNBV0sKK2NhdCA+PiJcJHRtcC9zdWJzMS5hd2siIDw8X0FDQVdLICYmCisgIGZvciAoa2V5IGluIFMpIFNfaXNfc2V0W2tleV0gPSAxCisgIEZTID0gIgciCitdbTRfaWZkZWYoW19BQ19TVUJTVF9GSUxFU10sCitbICBcJGFjX2NzX2F3a19waXBlX2luaXRdKVsKK30KK3sKKyAgbGluZSA9ICQgMAorICBuZmllbGRzID0gc3BsaXQobGluZSwgZmllbGQsICJAIikKKyAgc3Vic3RlZCA9IDAKKyAgbGVuID0gbGVuZ3RoKGZpZWxkWzFdKQorICBmb3IgKGkgPSAyOyBpIDwgbmZpZWxkczsgaSsrKSB7CisgICAga2V5ID0gZmllbGRbaV0KKyAgICBrZXlsZW4gPSBsZW5ndGgoa2V5KQorICAgIGlmIChTX2lzX3NldFtrZXldKSB7CisgICAgICB2YWx1ZSA9IFNba2V5XQorICAgICAgbGluZSA9IHN1YnN0cihsaW5lLCAxLCBsZW4pICIiIHZhbHVlICIiIHN1YnN0cihsaW5lLCBsZW4gKyBrZXlsZW4gKyAzKQorICAgICAgbGVuICs9IGxlbmd0aCh2YWx1ZSkgKyBsZW5ndGgoZmllbGRbKytpXSkKKyAgICAgIHN1YnN0ZWQgPSAxCisgICAgfSBlbHNlCisgICAgICBsZW4gKz0gMSArIGtleWxlbgorICB9CitdbTRfaWZkZWYoW19BQ19TVUJTVF9GSUxFU10sCitbWyAgaWYgKG5maWVsZHMgPT0gMyAmJiAhc3Vic3RlZCkgeworICAgIGtleSA9IGZpZWxkWzJdCisgICAgaWYgKEZba2V5XSAhPSAiIiAmJiBsaW5lIH4gL15bCSBdKkAuKkBbCSBdKiQvKSB7CisgICAgICBcJGFjX2NzX2F3a19yZWFkX2ZpbGUKKyAgICAgIG5leHQKKyAgICB9CisgIH1dXSlbCisgIHByaW50IGxpbmUKK30KK11kbmwgZW5kIG9mIGRvdWJsZS1xdW90ZWQgcGFydAorbTRfaWZkZWYoW19BQ19TVUJTVF9GSUxFU10sCitbXCRhY19jc19hd2tfcGlwZV9maW5pXSkKK19BQ0FXSworX0FDRU9GCitkbmwgU2VlIGlmIENSIGlzIHRoZSBFT0wgbWFya2VyLiAgSWYgbm90LCByZW1vdmUgYW55IEVPTC1yZWxhdGVkCitkbmwgXk0gYnl0ZXMgYW5kIGVzY2FwZSBhbnkgcmVtYWluaW5nIG9uZXMuICBJZiBzbywganVzdCB1c2UgbXYuCitkbmwgSW4gY2FzZSB5b3UncmUgd29uZGVyaW5nIGhvdyBeTSBieXRlcyBjYW4gbWFrZSBpdCBpbnRvIHN1YnMxLmF3aywKK2RubCBbZnJvbSBSYWxmIFdpbGRlbmh1ZXNdIG9uZSB3YXkgaXMgaWYgeW91IGhhdmUgZS5nLiwKK2RubCBBQ19TVUJTVChbdmFyaWFibGVfdGhhdF9jb250YWluc19jcl0sIFsiCitkbmwgIl0pCitkbmwgVGhlIG9yaWdpbmFsIGFpbSB3YXMgdGhhdCB1c2VycyBzaG91bGQgYmUgYWJsZSB0byBzdWJzdGl0dXRlIGFueQorZG5sIGNoYXJhY3RlcnMgdGhleSBsaWtlIChleGNlcHQgZm9yIFwwKS4gIEFuZCB0aGUgYWJvdmUgaXMgbm90IHNvCitkbmwgdW5saWtlbHkgaWYgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgaXRzZWxmIGhhcHBlbnMgdG8gYmUgY29udmVydGVkCitkbmwgdG8gdzMyIHRleHQgbW9kZS4KK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2lmIHNlZCAicy8kYWNfY3IvLyIgPCAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICBzZWQgInMvJGFjX2NyXCQvLzsgcy8kYWNfY3IvJGFjX2NzX2F3a19jci9nIgorZWxzZQorICBjYXQKK2ZpIDwgIiR0bXAvc3ViczEuYXdrIiA+ICIkdG1wL3N1YnMuYXdrIiBcCisgIHx8IEFDX01TR19FUlJPUihbY291bGQgbm90IHNldHVwIGNvbmZpZyBmaWxlcyBtYWNoaW5lcnldKQorX0FDRU9GCisKKyMgVlBBVEggbWF5IGNhdXNlIHRyb3VibGUgd2l0aCBzb21lIG1ha2VzLCBzbyB3ZSByZW1vdmUgJChzcmNkaXIpLAorIyAke3NyY2Rpcn0gYW5kIEBzcmNkaXJAIGZyb20gVlBBVEggaWYgc3JjZGlyIGlzICIuIiwgc3RyaXAgbGVhZGluZyBhbmQKKyMgdHJhaWxpbmcgY29sb25zIGFuZCB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgbGluZSBpZiBWUEFUSCBiZWNvbWVzIGVtcHR5CisjIChhY3R1YWxseSB3ZSBsZWF2ZSBhbiBlbXB0eSBsaW5lIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycykuCitpZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgorICBhY192cHN1Yj1bJy9eWwkgXSpWUEFUSFsJIF0qPS97CitzLzoqXCQoc3JjZGlyKToqLzovCitzLzoqXCR7c3JjZGlyfToqLzovCitzLzoqQHNyY2RpckA6Ki86Lworcy9eXChbXj1dKj1bCSBdKlwpOiovXDEvCitzLzoqJC8vCitzL15bXj1dKj1bCSBdKiQvLworfSddCitmaQorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitmaSAjIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiCisKK10pIyBfQUNfT1VUUFVUX0ZJTEVTX1BSRVBBUkUKKworIyBfQUNfT1VUUFVUX0ZJTEVfQURKVVNUX0RJUihWQVIpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgR2VuZXJhdGUgdGhlIHNlZCBzbmlwcGV0IG5lZWRlZCB0byBvdXRwdXQgVkFSIHJlbGF0aXZlIHRvIHRoZQorIyB0b3AtbGV2ZWwgZGlyZWN0b3J5LgorbTRfZGVmaW5lKFtfQUNfT1VUUFVUX0ZJTEVfQURKVVNUX0RJUl0sCitbcyZAJDFAJiRhY18kMSY7dCB0W11BQ19TVUJTVF9UUkFDRShbJDFdKV0pCisKKworIyBfQUNfT1VUUFVUX0ZJTEUKKyMgLS0tLS0tLS0tLS0tLS0tCisjIERvIHRoZSB2YXJpYWJsZSBzdWJzdGl0dXRpb25zIHRvIGNyZWF0ZSB0aGUgTWFrZWZpbGVzIG9yIHdoYXRldmVyLgorIworIyBUaGlzIG1hY3JvIGlzIGV4cGFuZGVkIGluc2lkZSBhIGhlcmUgZG9jdW1lbnQuICBJZiB0aGUgaGVyZSBkb2N1bWVudCBpcworIyBjbG9zZWQsIGl0IGhhcyB0byBiZSByZW9wZW5lZCB3aXRoCisjICJjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xIi4KKyMKK200X2RlZmluZShbX0FDX09VVFBVVF9GSUxFXSwKK1sKKyAgIworICAjIENPTkZJR19GSUxFCisgICMKKworQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfSU5TVEFMTF0sCitbICBjYXNlICRJTlNUQUxMIGluCisgIFtbXFwvJF1dKiB8ID86W1tcXC9dXSogKSBhY19JTlNUQUxMPSRJTlNUQUxMIDs7CisgICopIGFjX0lOU1RBTEw9JGFjX3RvcF9idWlsZF9wcmVmaXgkSU5TVEFMTCA7OworICBlc2FjCitdKWRubAorQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfTUtESVJfUF0sCitbICBhY19NS0RJUl9QPSRNS0RJUl9QCisgIGNhc2UgJE1LRElSX1AgaW4KKyAgW1tcXC8kXV0qIHwgPzpbW1xcL11dKiApIDs7CisgICovKikgYWNfTUtESVJfUD0kYWNfdG9wX2J1aWxkX3ByZWZpeCRNS0RJUl9QIDs7CisgIGVzYWMKK10pZG5sCitfQUNFT0YKKworbTRfaWZuZGVmKFtBQ19EQVRBUk9PVERJUl9DSEVDS0VEXSwKK1tjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIElmIHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBrbm93IGFib3V0IGRhdGFyb290ZGlyLCBleHBhbmQgaXQuCisjIEZJWE1FOiBUaGlzIGhhY2sgc2hvdWxkIGJlIHJlbW92ZWQgYSBmZXcgeWVhcnMgYWZ0ZXIgMi42MC4KK2FjX2RhdGFyb290ZGlyX2hhY2s9OyBhY19kYXRhcm9vdGRpcl9zZWVuPQorbTRfZGVmaW5lKFtfQUNfZGF0YXJvb3RkaXJfdmFyc10sCisJICBbZGF0YWRpciwgZG9jZGlyLCBpbmZvZGlyLCBsb2NhbGVkaXIsIG1hbmRpcl0pXWRubAorW200X2RlZmluZShbX0FDX2RhdGFyb290ZGlyX3N1YnN0XSwgWyAgcyZAJF1bMUAmJCRdWzEmZ10pXWRubAorW2FjX3NlZF9kYXRhcm9vdD0nCisvZGF0YXJvb3RkaXIvIHsKKyAgcAorICBxCit9CittNF9tYXBfYXJnc19zZXAoWy9AXSwgW0AvcF0sIFsKK10sIF9BQ19kYXRhcm9vdGRpcl92YXJzKScKK2Nhc2UgYGV2YWwgInNlZCAtbiBcIlwkYWNfc2VkX2RhdGFyb290XCIgJGFjX2ZpbGVfaW5wdXRzImAgaW4KKypkYXRhcm9vdGRpciopIGFjX2RhdGFyb290ZGlyX3NlZW49eWVzOzsKKypAW11tNF9qb2luKFtAKnwqQF0sIF9BQ19kYXRhcm9vdGRpcl92YXJzKUAqKQorICBBQ19NU0dfV0FSTihbJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nXSkKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGFjX2RhdGFyb290ZGlyX2hhY2s9JworbTRfbWFwX2FyZ3Nfc2VwKFtfQUNfZGF0YXJvb3RkaXJfc3Vic3QoXSwgWyldLCBbCitdLCBfQUNfZGF0YXJvb3RkaXJfdmFycykKKyAgcyZcXFwke2RhdGFyb290ZGlyfSYkZGF0YXJvb3RkaXImZycgOzsKK2VzYWMKK19BQ0VPRgorXSlkbmwKKworIyBOZXV0cmFsaXplIFZQQVRIIHdoZW4gYCRzcmNkaXInID0gYC4nLgorIyBTaGVsbCBjb2RlIGluIGNvbmZpZ3VyZS5hYyBtaWdodCBzZXQgZXh0cmFzdWIuCisjIEZJWE1FOiBkbyB3ZSByZWFsbHkgd2FudCB0byBtYWludGFpbiB0aGlzIGZlYXR1cmU/CitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2FjX3NlZF9leHRyYT0iJGFjX3Zwc3ViCiskZXh0cmFzdWIKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorOnQKK1svQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiXQorZG5sIGNvbmZpZ3VyZV9pbnB1dCBpcyBhIHNvbWV3aGF0IHNwZWNpYWwsIHNvIHdlIGRvbid0IGNhbGwgQUNfU1VCU1RfVFJBQ0UuCitkbmwgTm90ZSBpZiB5b3UgY2hhbmdlIHRoZSBzfHx8IGRlbGltaXRlciBoZXJlLCBkb24ndCBmb3JnZXQgdG8gYWRqdXN0CitkbmwgYWNfc2VkX2NvbmZfaW5wdXQgYWNjb3JkaW5nbHkuICBVc2luZyAmIGlzIGEgYmFkIGlkZWEgaWYgJiBhcHBlYXJzIGluCitkbmwgdGhlIHJlcGxhY2VtZW50IHN0cmluZy4KK3N8QGNvbmZpZ3VyZV9pbnB1dEB8JGFjX3NlZF9jb25mX2lucHV0fDt0IHQKK2RubCBEdXJpbmcgdGhlIHRyYW5zaXRpb24gcGVyaW9kLCB0aGlzIGlzIGEgc3BlY2lhbCBjYXNlOgorcyZAdG9wX2J1aWxkZGlyQCYkYWNfdG9wX2J1aWxkZGlyX3N1YiY7dCB0W11BQ19TVUJTVF9UUkFDRShbdG9wX2J1aWxkZGlyXSkKK2RubCBGb3IgdGhpcyBzdWJzdGl0dXRpb24gc2VlIHRoZSB3aXRuZXNzIG1hY3JvIF9BQ19IQVZFX1RPUF9CVUlMRF9QUkVGSVggYWJvdmUuCitzJkB0b3BfYnVpbGRfcHJlZml4QCYkYWNfdG9wX2J1aWxkX3ByZWZpeCY7dCB0W11BQ19TVUJTVF9UUkFDRShbdG9wX2J1aWxkX3ByZWZpeF0pCittNF9tYXBfYXJnc19zZXAoWyQwX0FESlVTVF9ESVIoXSwgWyldLCBbCitdLCBbc3JjZGlyXSwgW2Fic19zcmNkaXJdLCBbdG9wX3NyY2Rpcl0sIFthYnNfdG9wX3NyY2Rpcl0sCisgICBbYnVpbGRkaXJdLCBbYWJzX2J1aWxkZGlyXSwKKyAgIFthYnNfdG9wX2J1aWxkZGlyXUFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0lOU1RBTExdLAorICAgICBbLCBbSU5TVEFMTF1dKUFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX01LRElSX1BdLCBbLCBbTUtESVJfUF1dKSkKK200X2lmbmRlZihbQUNfREFUQVJPT1RESVJfQ0hFQ0tFRF0sIFskYWNfZGF0YXJvb3RkaXJfaGFjaworXSlkbmwKKyIKK2V2YWwgc2VkIFwiXCRhY19zZWRfZXh0cmFcIiAiJGFjX2ZpbGVfaW5wdXRzIiBtNF9kZWZuKFtfQUNfU1VCU1RfQ01EU10pID4kdG1wL291dCBcCisgIHx8IEFDX01TR19FUlJPUihbY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZV0pCisKK200X2lmbmRlZihbQUNfREFUQVJPT1RESVJfQ0hFQ0tFRF0sCitbdGVzdCAteiAiJGFjX2RhdGFyb290ZGlyX2hhY2skYWNfZGF0YXJvb3RkaXJfc2VlbiIgJiYKKyAgeyBhY19vdXQ9YHNlZCAtbiAnL1wke2RhdGFyb290ZGlyfS9wJyAiJHRtcC9vdXQiYDsgdGVzdCAtbiAiJGFjX291dCI7IH0gJiYKKyAgeyBhY19vdXQ9YHNlZCAtbiAnL15bWwkgXV0qZGF0YXJvb3RkaXJbWwkgXV0qOio9L3AnICIkdG1wL291dCJgOyB0ZXN0IC16ICIkYWNfb3V0IjsgfSAmJgorICBBQ19NU0dfV0FSTihbJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIGBkYXRhcm9vdGRpcicKK3doaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZC5dKQorXSlkbmwKKworICBybSAtZiAiJHRtcC9zdGRpbiIKKyAgY2FzZSAkYWNfZmlsZSBpbgorICAtKSBjYXQgIiR0bXAvb3V0IiAmJiBybSAtZiAiJHRtcC9vdXQiOzsKKyAgKikgcm0gLWYgIiRhY19maWxlIiAmJiBtdiAiJHRtcC9vdXQiICIkYWNfZmlsZSI7OworICBlc2FjIFwKKyAgfHwgQUNfTVNHX0VSUk9SKFtjb3VsZCBub3QgY3JlYXRlICRhY19maWxlXSkKK2RubCBUaGlzIHdvdWxkIGJyZWFrIE1ha2VmaWxlIGRlcGVuZGVuY2llczoKK2RubCAgaWYgZGlmZiAiJGFjX2ZpbGUiICIkdG1wL291dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCitkbmwgICAgZWNobyAiJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIgorZG5sICBlbHNlCitkbmwgICAgIHJtIC1mICIkYWNfZmlsZSI7IG12ICIkdG1wL291dCIgIiRhY19maWxlIgorZG5sICBmaQorXSkjIF9BQ19PVVRQVVRfRklMRQorCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQ29uZmlndXJhdGlvbiBoZWFkZXJzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBBQ19DT05GSUdfSEVBREVSUyhIRUFERVJTLi4uLCBbQ09NTUFORFNdLCBbSU5JVC1DTURTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNwZWNpZnkgdGhhdCB0aGUgSEVBREVSUyBhcmUgdG8gYmUgY3JlYXRlZCBieSBpbnN0YW50aWF0aW9uIG9mIHRoZQorIyBBQ19ERUZJTkVzLgorIworQUNfREVGVU4oW0FDX0NPTkZJR19IRUFERVJTXSwgW19BQ19DT05GSUdfRk9PUyhbSEVBREVSU10sICRAKV0pCisKKworIyBBQ19DT05GSUdfSEVBREVSKEhFQURFUi1UTy1DUkVBVEUgLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGSVhNRTogTWFrZSBpdCBvYnNvbGV0ZT8KK0FDX0RFRlVOKFtBQ19DT05GSUdfSEVBREVSXSwKK1tBQ19DT05GSUdfSEVBREVSUyhbJDFdKV0pCisKKworIyBfQUNfT1VUUFVUX0hFQURFUlNfUFJFUEFSRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDcmVhdGUgdGhlIGF3ayBzY3JpcHRzIG5lZWRlZCBmb3IgQ09ORklHX0hFQURFUlMuCisjIFN1cHBvcnQgbXVsdGlsaW5lICNkZWZpbmVzLgorIworIyBUaGlzIG1hY3JvIGlzIGV4cGFuZGVkIGluc2lkZSBhIGhlcmUgZG9jdW1lbnQuICBJZiB0aGUgaGVyZSBkb2N1bWVudCBpcworIyBjbG9zZWQsIGl0IGhhcyB0byBiZSByZW9wZW5lZCB3aXRoCisjICJjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xIi4KKyMKK200X2RlZmluZShbX0FDX09VVFBVVF9IRUFERVJTX1BSRVBBUkVdLAorWyMgU2V0IHVwIHRoZSBzY3JpcHRzIGZvciBDT05GSUdfSEVBREVSUyBzZWN0aW9uLgorIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZW0gaWYgdGhlcmUgYXJlIG5vIENPTkZJR19IRUFERVJTLgorIyBUaGlzIGhhcHBlbnMgZm9yIGluc3RhbmNlIHdpdGggYC4vY29uZmlnLnN0YXR1cyBNYWtlZmlsZScuCitpZiB0ZXN0IC1uICIkQ09ORklHX0hFQURFUlMiOyB0aGVuCitkbmwgVGhpcyBgfHwnIGxpc3QgaXMgZmluaXNoZWQgYXQgdGhlIGVuZCBvZiBfQUNfT1VUUFVUX0hFQURFUlNfUFJFUEFSRS4KK2NhdCA+IiR0bXAvZGVmaW5lcy5hd2siIDw8XF9BQ0FXSyB8fAorQkVHSU4geworX0FDRU9GCisKKyMgVHJhbnNmb3JtIGNvbmZkZWZzLmggaW50byBhbiBhd2sgc2NyaXB0IGBkZWZpbmVzLmF3aycsIGVtYmVkZGVkIGFzCisjIGhlcmUtZG9jdW1lbnQgaW4gY29uZmlnLnN0YXR1cywgdGhhdCBzdWJzdGl0dXRlcyB0aGUgcHJvcGVyIHZhbHVlcyBpbnRvCisjIGNvbmZpZy5oLmluIHRvIHByb2R1Y2UgY29uZmlnLmguCisKKyMgQ3JlYXRlIGEgZGVsaW1pdGVyIHN0cmluZyB0aGF0IGRvZXMgbm90IGV4aXN0IGluIGNvbmZkZWZzLmgsIHRvIGVhc2UKKyMgaGFuZGxpbmcgb2YgbG9uZyBsaW5lcy4KK2FjX2RlbGltPSclIV8hIyAnCitmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgOjsgZG8KKyAgYWNfdD1gc2VkIC1uICIvJGFjX2RlbGltL3AiIGNvbmZkZWZzLmhgCisgIGlmIHRlc3QgLXogIiRhY190IjsgdGhlbgorICAgIGJyZWFrCisgIGVsaWYgJGFjX2xhc3RfdHJ5OyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtjb3VsZCBub3QgbWFrZSAkQ09ORklHX0hFQURFUlNdKQorICBlbHNlCisgICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKKyAgZmkKK2RvbmUKKworIyBGb3IgdGhlIGF3ayBzY3JpcHQsIEQgaXMgYW4gYXJyYXkgb2YgbWFjcm8gdmFsdWVzIGtleWVkIGJ5IG5hbWUsCisjIGxpa2V3aXNlIFAgY29udGFpbnMgbWFjcm8gcGFyYW1ldGVycyBpZiBhbnkuICBQcmVzZXJ2ZSBiYWNrc2xhc2gKKyMgbmV3bGluZSBzZXF1ZW5jZXMuCitkbmwKK2RubCBTdHJ1Y3R1cmUgb2YgdGhlIHNlZCBzY3JpcHQgdGhhdCByZWFkcyBjb25mZGVmcy5oOgorZG5sIHJzZXQ6ICBtYWluIGxvb3AsIHNlYXJjaGVzIGZvciBgI2RlZmluZScgbGluZXMKK2RubCBkZWY6ICAgZGVhbCB3aXRoIGEgYCNkZWZpbmUnIGxpbmUKK2RubCBic25sOiAgZGVhbCB3aXRoIGEgYCNkZWZpbmUnIGxpbmUgdGhhdCBlbmRzIHdpdGggYmFja3NsYXNoLW5ld2xpbmUKK2RubCBjb250OiAgaGFuZGxlIGEgY29udGludWF0aW9uIGxpbmUKK2RubCBic25sYzogaGFuZGxlIGEgY29udGludWF0aW9uIGxpbmUgdGhhdCBlbmRzIHdpdGggYmFja3NsYXNoLW5ld2xpbmUKK2RubAorZG5sIEVhY2ggc3ViIHBhcnQgZXNjYXBlcyB0aGUgYXdrIHNwZWNpYWwgY2hhcmFjdGVycyBhbmQgb3V0cHV0cyBhIHN0YXRlbWVudAorZG5sIGluc2VydGluZyB0aGUgbWFjcm8gdmFsdWUgaW50byB0aGUgYXJyYXkgRCwga2V5ZWQgYnkgbmFtZS4gIElmIHRoZSBtYWNybworZG5sIHVzZXMgcGFyYW1ldGVycywgdGhleSBhcmUgYWRkZWQgaW4gdGhlIGFycmF5IFAsIGtleWVkIGJ5IG5hbWUuCitkbmwKK2RubCBMb25nIHZhbHVlcyBhcmUgc3BsaXQgaW50byBzZXZlcmFsIHN0cmluZyBsaXRlcmFscyB3aXRoIGhlbHAgb2YgYWNfZGVsaW0uCitkbmwgQXNzdW1lIG5vYm9keSB1c2VzIG1hY3JvIG5hbWVzIG9mIG5lYXJseSAxNTAgYnl0ZXMgbGVuZ3RoLgorZG5sCitkbmwgVGhlIGluaXRpYWwgcmVwbGFjZSBmb3IgYCNkZWZpbmUnIGxpbmVzIGluc2VydHMgYSBsZWFkaW5nIHNwYWNlCitkbmwgaW4gb3JkZXIgdG8gZWFzZSBsYXRlciBtYXRjaGluZzsgb3RoZXJ3aXNlLCBvdXRwdXQgbGluZXMgbWF5IGJlCitkbmwgcmVwZWF0ZWRseSBtYXRjaGVkLgorZG5sCitkbmwgbTQtZG91YmxlLXF1b3RlIG1vc3Qgb2YgdGhpcyBmb3IgWywgXSwgZGVmaW5lLCBhbmQgc3Vic3RyOgorWworYWNfd29yZF9yZT1bXyRhc19jcl9MZXR0ZXJzXVtfJGFzX2NyX2FsbnVtXSoKK3NlZCAtbiAnCitzLy5ce11fQUNfQVdLX0xJVEVSQUxfTElNSVRbXH0vJiciJGFjX2RlbGltIicvZwordCByc2V0Cis6cnNldAorcy9eWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSovIC8KK3QgZGVmCitkCis6ZGVmCitzL1xcJC8vCit0IGJzbmwKK3MvWyJcXF0vXFwmL2cKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpXCgoW14oKV0qKVwpWwkgXSpcKC4qXCkvUFsiXDEiXT0iXDIiXAorRFsiXDEiXT0iIFwzIi9wCitzL14gXCgnIiRhY193b3JkX3JlIidcKVsJIF0qXCguKlwpL0RbIlwxIl09IiBcMiIvcAorZAorOmJzbmwKK3MvWyJcXF0vXFwmL2cKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpXCgoW14oKV0qKVwpWwkgXSpcKC4qXCkvUFsiXDEiXT0iXDIiXAorRFsiXDEiXT0iIFwzXFxcXFxcbiJcXC9wCit0IGNvbnQKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpWwkgXSpcKC4qXCkvRFsiXDEiXT0iIFwyXFxcXFxcbiJcXC9wCit0IGNvbnQKK2QKKzpjb250CituCitzLy5ce11fQUNfQVdLX0xJVEVSQUxfTElNSVRbXH0vJiciJGFjX2RlbGltIicvZwordCBjbGVhcgorOmNsZWFyCitzL1xcJC8vCit0IGJzbmxjCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iL3AKK2QKKzpic25sYworcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxcXFxcbiJcXC9wCitiIGNvbnQKKycgPGNvbmZkZWZzLmggfCBzZWQgJworcy8nIiRhY19kZWxpbSInLyJcXFwKKyIvZycgPj4kQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGZvciAoa2V5IGluIEQpIERfaXNfc2V0W2tleV0gPSAxCisgIEZTID0gIgciCit9CisvXltcdCBdKiNbXHQgXSooZGVmaW5lfHVuZGVmKVtcdCBdKyRhY193b3JkX3JlKFtcdCAoXXxcJCkvIHsKKyAgbGluZSA9IFwkIDAKKyAgc3BsaXQobGluZSwgYXJnLCAiICIpCisgIGlmIChhcmdbMV0gPT0gIiMiKSB7CisgICAgZGVmdW5kZWYgPSBhcmdbMl0KKyAgICBtYWMxID0gYXJnWzNdCisgIH0gZWxzZSB7CisgICAgZGVmdW5kZWYgPSBzdWJzdHIoYXJnWzFdLCAyKQorICAgIG1hYzEgPSBhcmdbMl0KKyAgfQorICBzcGxpdChtYWMxLCBtYWMyLCAiKCIpICMpCisgIG1hY3JvID0gbWFjMlsxXQorICBwcmVmaXggPSBzdWJzdHIobGluZSwgMSwgaW5kZXgobGluZSwgZGVmdW5kZWYpIC0gMSkKKyAgaWYgKERfaXNfc2V0W21hY3JvXSkgeworICAgICMgUHJlc2VydmUgdGhlIHdoaXRlIHNwYWNlIHN1cnJvdW5kaW5nIHRoZSAiIyIuCisgICAgcHJpbnQgcHJlZml4ICJkZWZpbmUiLCBtYWNybyBQW21hY3JvXSBEW21hY3JvXQorICAgIG5leHQKKyAgfSBlbHNlIHsKKyAgICAjIFJlcGxhY2UgI3VuZGVmIHdpdGggY29tbWVudHMuICBUaGlzIGlzIG5lY2Vzc2FyeSwgZm9yIGV4YW1wbGUsCisgICAgIyBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAorICAgICMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgorICAgIGlmIChkZWZ1bmRlZiA9PSAidW5kZWYiKSB7CisgICAgICBwcmludCAiLyoiLCBwcmVmaXggZGVmdW5kZWYsIG1hY3JvLCAiKi8iCisgICAgICBuZXh0CisgICAgfQorICB9Cit9Cit7IHByaW50IH0KK11kbmwgRW5kIG9mIGRvdWJsZS1xdW90ZWQgc2VjdGlvbgorX0FDQVdLCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2RubCBmaW5pc2ggYHx8JyBsaXN0IGluZGljYXRpbmcgd3JpdGUgZXJyb3I6CisgIEFDX01TR19FUlJPUihbY291bGQgbm90IHNldHVwIGNvbmZpZyBoZWFkZXJzIG1hY2hpbmVyeV0pCitmaSAjIHRlc3QgLW4gIiRDT05GSUdfSEVBREVSUyIKKworXSkjIF9BQ19PVVRQVVRfSEVBREVSU19QUkVQQVJFCisKKworIyBfQUNfT1VUUFVUX0hFQURFUgorIyAtLS0tLS0tLS0tLS0tLS0tLQorIworIyBPdXRwdXQgdGhlIGNvZGUgd2hpY2ggaW5zdGFudGlhdGVzIHRoZSBgY29uZmlnLmgnIGZpbGVzIGZyb20gdGhlaXIKKyMgYGNvbmZpZy5oLmluJy4KKyMKKyMgVGhpcyBtYWNybyBpcyBleHBhbmRlZCBpbnNpZGUgYSBoZXJlIGRvY3VtZW50LiAgSWYgdGhlIGhlcmUgZG9jdW1lbnQgaXMKKyMgY2xvc2VkLCBpdCBoYXMgdG8gYmUgcmVvcGVuZWQgd2l0aAorIyAiY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MSIuCisjCittNF9kZWZpbmUoW19BQ19PVVRQVVRfSEVBREVSXSwKK1sKKyAgIworICAjIENPTkZJR19IRUFERVIKKyAgIworICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisgICAgeworICAgICAgQVNfRUNITyhbIi8qICRjb25maWd1cmVfaW5wdXQgICovIl0pIFwKKyAgICAgICYmIGV2YWwgJyRBV0sgLWYgIiR0bXAvZGVmaW5lcy5hd2siJyAiJGFjX2ZpbGVfaW5wdXRzIgorICAgIH0gPiIkdG1wL2NvbmZpZy5oIiBcCisgICAgICB8fCBBQ19NU0dfRVJST1IoW2NvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGVdKQorICAgIGlmIGRpZmYgIiRhY19maWxlIiAiJHRtcC9jb25maWcuaCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICBBQ19NU0dfTk9USUNFKFskYWNfZmlsZSBpcyB1bmNoYW5nZWRdKQorICAgIGVsc2UKKyAgICAgIHJtIC1mICIkYWNfZmlsZSIKKyAgICAgIG12ICIkdG1wL2NvbmZpZy5oIiAiJGFjX2ZpbGUiIFwKKwl8fCBBQ19NU0dfRVJST1IoW2NvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGVdKQorICAgIGZpCisgIGVsc2UKKyAgICBBU19FQ0hPKFsiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iXSkgXAorICAgICAgJiYgZXZhbCAnJEFXSyAtZiAiJHRtcC9kZWZpbmVzLmF3ayInICIkYWNfZmlsZV9pbnB1dHMiIFwKKyAgICAgIHx8IEFDX01TR19FUlJPUihbY291bGQgbm90IGNyZWF0ZSAtXSkKKyAgZmkKK2RubCBJZiBydW5uaW5nIGZvciBBdXRvbWFrZSwgYmUgcmVhZHkgdG8gcGVyZm9ybSBhZGRpdGlvbmFsCitkbmwgY29tbWFuZHMgdG8gc2V0IHVwIHRoZSB0aW1lc3RhbXAgZmlsZXMuCittNF9pZmRlZihbX0FDX0FNX0NPTkZJR19IRUFERVJfSE9PS10sCisJIFtfQUNfQU1fQ09ORklHX0hFQURFUl9IT09LKFsiJGFjX2ZpbGUiXSkKK10pZG5sCitdKSMgX0FDX09VVFBVVF9IRUFERVIKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQ29uZmlndXJhdGlvbiBsaW5rcy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIEFDX0NPTkZJR19MSU5LUyhERVNUOlNPVVJDRS4uLiwgW0NPTU1BTkRTXSwgW0lOSVQtQ01EU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNwZWNpZnkgdGhhdCBjb25maWcuc3RhdHVzIHNob3VsZCBlc3RhYmxpc2ggYSAoc3ltYm9saWMgaWYgcG9zc2libGUpCisjIGxpbmsgZnJvbSBUT1BfU1JDRElSL1NPVVJDRSB0byBUT1BfU1JDRElSL0RFU1QuCisjIFJlamVjdCBERVNUPS4sIGJlY2F1c2UgaXQgaXMgbWFrZXMgaXQgaGFyZCBmb3IgLi9jb25maWcuc3RhdHVzCisjIHRvIGd1ZXNzIHRoZSBsaW5rcyB0byBlc3RhYmxpc2ggKGAuL2NvbmZpZy5zdGF0dXMgLicpLgorIworQUNfREVGVU4oW0FDX0NPTkZJR19MSU5LU10sIFtfQUNfQ09ORklHX0ZPT1MoW0xJTktTXSwgJEApXSkKKworCisjIEFDX0xJTktfRklMRVMoU09VUkNFLi4uLCBERVNULi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGluayBlYWNoIG9mIHRoZSBleGlzdGluZyBmaWxlcyBTT1VSQ0UuLi4gdG8gdGhlIGNvcnJlc3BvbmRpbmcKKyMgbGluayBuYW1lIGluIERFU1QuLi4KKyMKKyMgVW5mb3J0dW5hdGVseSB3ZSBjYW4ndCBwcm92aWRlIGEgdmVyeSBnb29kIGF1dG91cGRhdGUgc2VydmljZSBoZXJlLAorIyBzaW5jZSBpbiBgQUNfTElOS19GSUxFUygkZnJvbSwgJHRvKScgaXQgaXMgcG9zc2libGUgdGhhdCBgJGZyb20nCisjIGFuZCBgJHRvJyBhcmUgYWN0dWFsbHkgbGlzdHMuICBJdCB3b3VsZCB0aGVuIGJlIGNvbXBsZXRlbHkgd3JvbmcgdG8KKyMgcmVwbGFjZSBpdCB3aXRoIGBBQ19DT05GSUdfTElOS1MoJHRvOiRmcm9tKS4gIEl0IGlzIHBvc3NpYmxlIGluIHRoZQorIyBjYXNlIG9mIGxpdGVyYWwgdmFsdWVzIHRob3VnaCwgYnV0IGJlY2F1c2UgSSBkb24ndCB0aGluayB0aGVyZSBpcyBhbnkKKyMgaW50ZXJlc3QgaW4gY3JlYXRpbmcgY29uZmlnIGxpbmtzIHdpdGggbGl0ZXJhbCB2YWx1ZXMsIG5vIHNwZWNpYWwKKyMgbWVjaGFuaXNtIGlzIGltcGxlbWVudGVkIHRvIGhhbmRsZSB0aGVtLgorIworIyBfQUNfTElOS19GSUxFU19DTlQgaXMgdXNlZCB0byBiZSByb2J1c3QgdG8gbXVsdGlwbGUgY2FsbHMuCitBVV9ERUZVTihbQUNfTElOS19GSUxFU10sCitbbTRfaWYoJCMsIDIsICwKKyAgICAgICBbbTRfZmF0YWwoWyQwOiBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50c10pXSlkbmwKK200X2RlZmluZV9kZWZhdWx0KFtfQUNfTElOS19GSUxFU19DTlRdLCAwKWRubAorbTRfZGVmaW5lKFtfQUNfTElOS19GSUxFU19DTlRdLCBtNF9pbmNyKF9BQ19MSU5LX0ZJTEVTX0NOVCkpZG5sCithY19zb3VyY2VzPSIkMSIKK2FjX2Rlc3RzPSIkMiIKK3doaWxlIHRlc3QgLW4gIiRhY19zb3VyY2VzIjsgZG8KKyAgc2V0ICRhY19kZXN0czsgYWNfZGVzdD0kWzFdOyBzaGlmdDsgYWNfZGVzdHM9JFsqXQorICBzZXQgJGFjX3NvdXJjZXM7IGFjX3NvdXJjZT0kWzFdOyBzaGlmdDsgYWNfc291cmNlcz0kWypdCisgIFthY19jb25maWdfbGlua3NfXV9BQ19MSU5LX0ZJTEVTX0NOVD0iJFthY19jb25maWdfbGlua3NfXV9BQ19MSU5LX0ZJTEVTX0NOVCAkYWNfZGVzdDokYWNfc291cmNlIgorZG9uZQorQUNfQ09ORklHX0xJTktTKCRbYWNfY29uZmlnX2xpbmtzX11fQUNfTElOS19GSUxFU19DTlQpZG5sCitdLAorW0l0IGlzIHRlY2huaWNhbGx5IGltcG9zc2libGUgdG8gYGF1dG91cGRhdGUnIGNsZWFubHkgZnJvbSBBQ19MSU5LX0ZJTEVTCit0byBBQ19DT05GSUdfTElOS1MuICBgYXV0b3VwZGF0ZScgcHJvdmlkZXMgYSBmdW5jdGlvbmFsIGJ1dCBpbmVsZWdhbnQKK3VwZGF0ZSwgeW91IHNob3VsZCBwcm9iYWJseSB0dW5lIHRoZSByZXN1bHQgeW91cnNlbGYuXSkjIEFDX0xJTktfRklMRVMKKworCisjIF9BQ19PVVRQVVRfTElOSworIyAtLS0tLS0tLS0tLS0tLS0KKyMgVGhpcyBtYWNybyBpcyBleHBhbmRlZCBpbnNpZGUgYSBoZXJlIGRvY3VtZW50LiAgSWYgdGhlIGhlcmUgZG9jdW1lbnQgaXMKKyMgY2xvc2VkLCBpdCBoYXMgdG8gYmUgcmVvcGVuZWQgd2l0aAorIyAiY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MSIuCittNF9kZWZpbmUoW19BQ19PVVRQVVRfTElOS10sCitbCisgICMKKyAgIyBDT05GSUdfTElOSworICAjCisKKyAgaWYgdGVzdCAiJGFjX3NvdXJjZSIgPSAiJGFjX2ZpbGUiICYmIHRlc3QgIiRzcmNkaXIiID0gJy4nOyB0aGVuCisgICAgOgorICBlbHNlCisgICAgIyBQcmVmZXIgdGhlIGZpbGUgZnJvbSB0aGUgc291cmNlIHRyZWUgaWYgbmFtZXMgYXJlIGlkZW50aWNhbC4KKyAgICBpZiB0ZXN0ICIkYWNfc291cmNlIiA9ICIkYWNfZmlsZSIgfHwgdGVzdCAhIC1yICIkYWNfc291cmNlIjsgdGhlbgorICAgICAgYWNfc291cmNlPSRzcmNkaXIvJGFjX3NvdXJjZQorICAgIGZpCisKKyAgICBBQ19NU0dfTk9USUNFKFtsaW5raW5nICRhY19zb3VyY2UgdG8gJGFjX2ZpbGVdKQorCisgICAgaWYgdGVzdCAhIC1yICIkYWNfc291cmNlIjsgdGhlbgorICAgICAgQUNfTVNHX0VSUk9SKFskYWNfc291cmNlOiBmaWxlIG5vdCBmb3VuZF0pCisgICAgZmkKKyAgICBybSAtZiAiJGFjX2ZpbGUiCisKKyAgICAjIFRyeSBhIHJlbGF0aXZlIHN5bWxpbmssIHRoZW4gYSBoYXJkIGxpbmssIHRoZW4gYSBjb3B5LgorICAgIGNhc2UgJHNyY2RpciBpbgorICAgIFtbXFwvJF1dKiB8ID86W1tcXC9dXSogKSBhY19yZWxfc291cmNlPSRhY19zb3VyY2UgOzsKKwkqKSBhY19yZWxfc291cmNlPSRhY190b3BfYnVpbGRfcHJlZml4JGFjX3NvdXJjZSA7OworICAgIGVzYWMKKyAgICBsbiAtcyAiJGFjX3JlbF9zb3VyY2UiICIkYWNfZmlsZSIgMj4vZGV2L251bGwgfHwKKyAgICAgIGxuICIkYWNfc291cmNlIiAiJGFjX2ZpbGUiIDI+L2Rldi9udWxsIHx8CisgICAgICBjcCAtcCAiJGFjX3NvdXJjZSIgIiRhY19maWxlIiB8fAorICAgICAgQUNfTVNHX0VSUk9SKFtjYW5ub3QgbGluayBvciBjb3B5ICRhY19zb3VyY2UgdG8gJGFjX2ZpbGVdKQorICBmaQorXSkjIF9BQ19PVVRQVVRfTElOSworCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBDb25maWd1cmF0aW9uIGNvbW1hbmRzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgQUNfQ09ORklHX0NPTU1BTkRTKE5BTUUuLi4sW0NPTU1BTkRTXSwgW0lOSVQtQ01EU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBTcGVjaWZ5IGFkZGl0aW9uYWwgY29tbWFuZHMgdG8gYmUgcnVuIGJ5IGNvbmZpZy5zdGF0dXMuICBUaGlzCisjIGNvbW1hbmRzIG11c3QgYmUgYXNzb2NpYXRlZCB3aXRoIGEgTkFNRSwgd2hpY2ggc2hvdWxkIGJlIHRob3VnaHQKKyMgYXMgdGhlIG5hbWUgb2YgYSBmaWxlIHRoZSBDT01NQU5EUyBjcmVhdGUuCisjCitBQ19ERUZVTihbQUNfQ09ORklHX0NPTU1BTkRTXSwgW19BQ19DT05GSUdfRk9PUyhbQ09NTUFORFNdLCAkQCldKQorCisKKyMgQUNfT1VUUFVUX0NPTU1BTkRTKEVYVFJBLUNNRFMsIElOSVQtQ01EUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgQWRkIGFkZGl0aW9uYWwgY29tbWFuZHMgZm9yIEFDX09VVFBVVCB0byBwdXQgaW50byBjb25maWcuc3RhdHVzLgorIworIyBUaGlzIG1hY3JvIGlzIGFuIG9ic29sZXRlIHZlcnNpb24gb2YgQUNfQ09ORklHX0NPTU1BTkRTLiAgVGhlIG9ubHkKKyMgZGlmZmljdWx0eSBpbiBtYXBwaW5nIEFDX09VVFBVVF9DT01NQU5EUyB0byBBQ19DT05GSUdfQ09NTUFORFMgaXMKKyMgdG8gZ2l2ZSBhIHVuaXF1ZSBrZXkuICBUaGUgc2NoZW1lIHdlIGhhdmUgY2hvc2VuIGlzIGBkZWZhdWx0LTEnLAorIyBgZGVmYXVsdC0yJyBldGMuIGZvciBlYWNoIGNhbGwuCisjCisjIFVuZm9ydHVuYXRlbHkgdGhpcyBzY2hlbWUgaXMgZnJhZ2lsZTogYmFkIHRoaW5ncyBtaWdodCBoYXBwZW4KKyMgaWYgeW91IHVwZGF0ZSBhbiBpbmNsdWRlZCBmaWxlIGFuZCBjb25maWd1cmUuYWM6IHlvdSBtaWdodCBoYXZlCisjIGNsYXNoZXMgOiggIE9uIHRoZSBvdGhlciBoYW5kLCBJJ2QgbGlrZSB0byBhdm9pZCB3ZWlyZCBrZXlzIChlLmcuLAorIyBkZXBlbmRpbmcgdXBvbiBfX2ZpbGVfXyBvciB0aGUgcGlkKS4KK0FVX0RFRlVOKFtBQ19PVVRQVVRfQ09NTUFORFNdLAorW200X2RlZmluZV9kZWZhdWx0KFtfQUNfT1VUUFVUX0NPTU1BTkRTX0NOVF0sIDApZG5sCittNF9kZWZpbmUoW19BQ19PVVRQVVRfQ09NTUFORFNfQ05UXSwgbTRfaW5jcihfQUNfT1VUUFVUX0NPTU1BTkRTX0NOVCkpZG5sCitkbmwgRG91YmxlIHF1b3RlZCBzaW5jZSB0aGF0IHdhcyB0aGUgY2FzZSBpbiB0aGUgb3JpZ2luYWwgbWFjcm8uCitBQ19DT05GSUdfQ09NTUFORFMoW2RlZmF1bHQtXV9BQ19PVVRQVVRfQ09NTUFORFNfQ05ULCBbWyQxXV0sIFtbJDJdXSlkbmwKK10pCisKKworIyBfQUNfT1VUUFVUX0NPTU1BTkQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgbWFjcm8gaXMgZXhwYW5kZWQgaW5zaWRlIGEgaGVyZSBkb2N1bWVudC4gIElmIHRoZSBoZXJlIGRvY3VtZW50IGlzCisjIGNsb3NlZCwgaXQgaGFzIHRvIGJlIHJlb3BlbmVkIHdpdGgKKyMgImNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEiLgorbTRfZGVmaW5lKFtfQUNfT1VUUFVUX0NPTU1BTkRdLAorWyAgQUNfTVNHX05PVElDRShbZXhlY3V0aW5nICRhY19maWxlIGNvbW1hbmRzXSkKK10pCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgUHJlLSBhbmQgcG9zdC1jb25maWcuc3RhdHVzIGNvbW1hbmRzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBBQ19DT05GSUdfQ09NTUFORFNfUFJFKENNRFMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tbWFuZHMgdG8gcnVuIHJpZ2h0IGJlZm9yZSBjb25maWcuc3RhdHVzIGlzIGNyZWF0ZWQuIEFjY3VtdWxhdGVzLgorQUNfREVGVU4oW0FDX0NPTkZJR19DT01NQU5EU19QUkVdLAorW200X2FwcGVuZChbQUNfT1VUUFVUX0NPTU1BTkRTX1BSRV0sIFskMQorXSldKQorCisKKyMgQUNfT1VUUFVUX0NPTU1BTkRTX1BSRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEEgKnZhcmlhYmxlKiBpbiB3aGljaCB3ZSBhcHBlbmQgYWxsIHRoZSBhY3Rpb25zIHRoYXQgbXVzdCBiZQorIyBwZXJmb3JtZWQgYmVmb3JlICpjcmVhdGluZyogY29uZmlnLnN0YXR1cy4gIEZvciBhIHN0YXJ0LCBjbGVhbgorIyB1cCBhbGwgdGhlIExJQk9CSiBtZXNzLgorbTRfZGVmaW5lKFtBQ19PVVRQVVRfQ09NTUFORFNfUFJFXSwKK1tfQUNfTElCT0JKU19OT1JNQUxJWkUKK10pCisKKworIyBBQ19DT05GSUdfQ09NTUFORFNfUE9TVChDTURTKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb21tYW5kcyB0byBydW4gYWZ0ZXIgY29uZmlnLnN0YXR1cyB3YXMgY3JlYXRlZC4gIEFjY3VtdWxhdGVzLgorQUNfREVGVU4oW0FDX0NPTkZJR19DT01NQU5EU19QT1NUXSwKK1ttNF9hcHBlbmQoW0FDX09VVFBVVF9DT01NQU5EU19QT1NUXSwgWyQxCitdKV0pCisKKyMgSW5pdGlhbGl6ZS4KK200X2RlZmluZShbQUNfT1VUUFVUX0NPTU1BTkRTX1BPU1RdKQorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIENvbmZpZ3VyYXRpb24gc3ViZGlycy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgQUNfQ09ORklHX1NVQkRJUlMoRElSIC4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgV2UgZGVmaW5lIHR3byB2YXJpYWJsZXM6CisjIC0gX0FDX0xJU1RfU1VCRElSUworIyAgIEEgc3RhdGljYWxseSBidWlsdCBsaXN0LCBzaG91bGQgY29udGFpbiAqYWxsKiB0aGUgYXJndW1lbnRzIG9mCisjICAgQUNfQ09ORklHX1NVQkRJUlMuICBUaGUgZmluYWwgdmFsdWUgaXMgYXNzaWduZWQgdG8gYWNfc3ViZGlyc19hbGwgaW4KKyMgICB0aGUgYGRlZmF1bHQnIHNlY3Rpb24sIGFuZCB1c2VkIGZvciAtLWhlbHA9cmVjdXJzaXZlLgorIyAgIEl0IG1ha2VzIG5vIHNlbnNlIGZvciBhcmd1bWVudHMgd2hpY2ggYXJlIHNoIHZhcmlhYmxlcy4KKyMgLSBzdWJkaXJzCisjICAgU2hlbGwgdmFyaWFibGUgYnVpbHQgYXQgcnVudGltZSwgc28gc29tZSBvZiB0aGVzZSBkaXJzIG1pZ2h0IG5vdCBiZQorIyAgIGluY2x1ZGVkLCBpZiBmb3IgaW5zdGFuY2UgdGhlIHVzZXIgcmVmdXNlZCBhIHBhcnQgb2YgdGhlIHRyZWUuCisjICAgVGhpcyBpcyB1c2VkIGluIF9BQ19PVVRQVVRfU1VCRElSUy4KK0FDX0RFRlVOKFtBQ19DT05GSUdfU1VCRElSU10sCitbQUNfUkVRVUlSRShbQUNfQ09ORklHX0FVWF9ESVJfREVGQVVMVF0pXWRubAorW0FDX1JFUVVJUkUoW0FDX0RJU0FCTEVfT1BUSU9OX0NIRUNLSU5HXSldZG5sCitbbTRfbWFwX2FyZ3NfdyhbJDFdLCBbX0FDX0NPTkZJR19VTklRVUUoW1NVQkRJUlNdLAorICBfQUNfQ09ORklHX0NPTVBVVEVfREVTVChdLCBbKSldKV1kbmwKK1ttNF9hcHBlbmQoW19BQ19MSVNUX1NVQkRJUlNdLCBbJDFdLCBbCitdKV1kbmwKK1tBU19MSVRFUkFMX0lGKFskMV0sIFtdLAorCSAgICAgICBbQUNfRElBR05PU0UoW3N5bnRheF0sIFskMDogeW91IHNob3VsZCB1c2UgbGl0ZXJhbHNdKV0pXWRubAorW0FDX1NVQlNUKFtzdWJkaXJzXSwgWyIkc3ViZGlycyBtNF9ub3JtYWxpemUoWyQxXSkiXSldKQorCisKKyMgX0FDX09VVFBVVF9TVUJESVJTCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIGlzIGEgc3Vicm91dGluZSBvZiBBQ19PVVRQVVQsIGJ1dCBpdCBkb2VzIG5vdCBnbyBpbnRvCisjIGNvbmZpZy5zdGF0dXMsIHJhdGhlciwgaXQgaXMgY2FsbGVkIGFmdGVyIHJ1bm5pbmcgY29uZmlnLnN0YXR1cy4KK200X2RlZmluZShbX0FDX09VVFBVVF9TVUJESVJTXSwKK1sKKyMKKyMgQ09ORklHX1NVQkRJUlMgc2VjdGlvbi4KKyMKK2lmIHRlc3QgIiRub19yZWN1cnNpb24iICE9IHllczsgdGhlbgorCisgICMgUmVtb3ZlIC0tY2FjaGUtZmlsZSwgLS1zcmNkaXIsIGFuZCAtLWRpc2FibGUtb3B0aW9uLWNoZWNraW5nIGFyZ3VtZW50cworICAjIHNvIHRoZXkgZG8gbm90IHBpbGUgdXAuCisgIGFjX3N1Yl9jb25maWd1cmVfYXJncz0KKyAgYWNfcHJldj0KKyAgZXZhbCAic2V0IHggJGFjX2NvbmZpZ3VyZV9hcmdzIgorICBzaGlmdAorICBmb3IgYWNfYXJnCisgIGRvCisgICAgaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCisgICAgICBhY19wcmV2PQorICAgICAgY29udGludWUKKyAgICBmaQorICAgIGNhc2UgJGFjX2FyZyBpbgorICAgIC1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWwgfCAtLWNhY2hlLWZpIFwKKyAgICB8IC0tY2FjaGUtZiB8IC0tY2FjaGUtIHwgLS1jYWNoZSB8IC0tY2FjaCB8IC0tY2FjIHwgLS1jYSB8IC0tYykKKyAgICAgIGFjX3ByZXY9Y2FjaGVfZmlsZSA7OworICAgIC1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbGU9KiB8IC0tY2FjaGUtZmlsPSogfCAtLWNhY2hlLWZpPSogXAorICAgIHwgLS1jYWNoZS1mPSogfCAtLWNhY2hlLT0qIHwgLS1jYWNoZT0qIHwgLS1jYWNoPSogfCAtLWNhYz0qIHwgLS1jYT0qIFwKKyAgICB8IC0tYz0qKQorICAgICAgOzsKKyAgICAtLWNvbmZpZy1jYWNoZSB8IC1DKQorICAgICAgOzsKKyAgICAtc3JjZGlyIHwgLS1zcmNkaXIgfCAtLXNyY2RpIHwgLS1zcmNkIHwgLS1zcmMgfCAtLXNyKQorICAgICAgYWNfcHJldj1zcmNkaXIgOzsKKyAgICAtc3JjZGlyPSogfCAtLXNyY2Rpcj0qIHwgLS1zcmNkaT0qIHwgLS1zcmNkPSogfCAtLXNyYz0qIHwgLS1zcj0qKQorICAgICAgOzsKKyAgICAtcHJlZml4IHwgLS1wcmVmaXggfCAtLXByZWZpIHwgLS1wcmVmIHwgLS1wcmUgfCAtLXByIHwgLS1wKQorICAgICAgYWNfcHJldj1wcmVmaXggOzsKKyAgICAtcHJlZml4PSogfCAtLXByZWZpeD0qIHwgLS1wcmVmaT0qIHwgLS1wcmVmPSogfCAtLXByZT0qIHwgLS1wcj0qIHwgLS1wPSopCisgICAgICA7OworICAgIC0tZGlzYWJsZS1vcHRpb24tY2hlY2tpbmcpCisgICAgICA7OworICAgICopCisgICAgICBjYXNlICRhY19hcmcgaW4KKyAgICAgICpcJyopIGFjX2FyZz1gQVNfRUNITyhbIiRhY19hcmciXSkgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICAgIGVzYWMKKyAgICAgIEFTX1ZBUl9BUFBFTkQoW2FjX3N1Yl9jb25maWd1cmVfYXJnc10sIFsiICckYWNfYXJnJyJdKSA7OworICAgIGVzYWMKKyAgZG9uZQorCisgICMgQWx3YXlzIHByZXBlbmQgLS1wcmVmaXggdG8gZW5zdXJlIHVzaW5nIHRoZSBzYW1lIHByZWZpeAorICAjIGluIHN1YmRpciBjb25maWd1cmF0aW9ucy4KKyAgYWNfYXJnPSItLXByZWZpeD0kcHJlZml4IgorICBjYXNlICRhY19hcmcgaW4KKyAgKlwnKikgYWNfYXJnPWBBU19FQ0hPKFsiJGFjX2FyZyJdKSB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICBlc2FjCisgIGFjX3N1Yl9jb25maWd1cmVfYXJncz0iJyRhY19hcmcnICRhY19zdWJfY29uZmlndXJlX2FyZ3MiCisKKyAgIyBQYXNzIC0tc2lsZW50CisgIGlmIHRlc3QgIiRzaWxlbnQiID0geWVzOyB0aGVuCisgICAgYWNfc3ViX2NvbmZpZ3VyZV9hcmdzPSItLXNpbGVudCAkYWNfc3ViX2NvbmZpZ3VyZV9hcmdzIgorICBmaQorCisgICMgQWx3YXlzIHByZXBlbmQgLS1kaXNhYmxlLW9wdGlvbi1jaGVja2luZyB0byBzaWxlbmNlIHdhcm5pbmdzLCBzaW5jZQorICAjIGRpZmZlcmVudCBzdWJkaXJzIGNhbiBoYXZlIGRpZmZlcmVudCAtLWVuYWJsZSBhbmQgLS13aXRoIG9wdGlvbnMuCisgIGFjX3N1Yl9jb25maWd1cmVfYXJncz0iLS1kaXNhYmxlLW9wdGlvbi1jaGVja2luZyAkYWNfc3ViX2NvbmZpZ3VyZV9hcmdzIgorCisgIGFjX3BvcGRpcj1gcHdkYAorICBmb3IgYWNfZGlyIGluIDogJHN1YmRpcnM7IGRvIHRlc3QgIngkYWNfZGlyIiA9IHg6ICYmIGNvbnRpbnVlCisKKyAgICAjIERvIG5vdCBjb21wbGFpbiwgc28gYSBjb25maWd1cmUgc2NyaXB0IGNhbiBjb25maWd1cmUgd2hpY2hldmVyCisgICAgIyBwYXJ0cyBvZiBhIGxhcmdlIHNvdXJjZSB0cmVlIGFyZSBwcmVzZW50LgorICAgIHRlc3QgLWQgIiRzcmNkaXIvJGFjX2RpciIgfHwgY29udGludWUKKworICAgIGFjX21zZz0iPT09IGNvbmZpZ3VyaW5nIGluICRhY19kaXIgKGBwd2RgLyRhY19kaXIpIgorICAgIF9BU19FQ0hPX0xPRyhbJGFjX21zZ10pCisgICAgX0FTX0VDSE8oWyRhY19tc2ddKQorICAgIEFTX01LRElSX1AoWyIkYWNfZGlyIl0pCisgICAgX0FDX1NSQ0RJUlMoWyIkYWNfZGlyIl0pCisKKyAgICBjZCAiJGFjX2RpciIKKworICAgICMgQ2hlY2sgZm9yIGd1ZXN0ZWQgY29uZmlndXJlOyBvdGhlcndpc2UgZ2V0IEN5Z251cyBzdHlsZSBjb25maWd1cmUuCisgICAgaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUuZ251IjsgdGhlbgorICAgICAgYWNfc3ViX2NvbmZpZ3VyZT0kYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUKKyAgICBlbGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlIjsgdGhlbgorICAgICAgYWNfc3ViX2NvbmZpZ3VyZT0kYWNfc3JjZGlyL2NvbmZpZ3VyZQorICAgIGVsaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUuaW4iOyB0aGVuCisgICAgICAjIFRoaXMgc2hvdWxkIGJlIEN5Z251cyBjb25maWd1cmUuCisgICAgICBhY19zdWJfY29uZmlndXJlPSRhY19hdXhfZGlyL2NvbmZpZ3VyZQorICAgIGVsc2UKKyAgICAgIEFDX01TR19XQVJOKFtubyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGlzIGluICRhY19kaXJdKQorICAgICAgYWNfc3ViX2NvbmZpZ3VyZT0KKyAgICBmaQorCisgICAgIyBUaGUgcmVjdXJzaW9uIGlzIGhlcmUuCisgICAgaWYgdGVzdCAtbiAiJGFjX3N1Yl9jb25maWd1cmUiOyB0aGVuCisgICAgICAjIE1ha2UgdGhlIGNhY2hlIGZpbGUgbmFtZSBjb3JyZWN0IHJlbGF0aXZlIHRvIHRoZSBzdWJkaXJlY3RvcnkuCisgICAgICBjYXNlICRjYWNoZV9maWxlIGluCisgICAgICBbW1xcL11dKiB8ID86W1tcXC9dXSogKSBhY19zdWJfY2FjaGVfZmlsZT0kY2FjaGVfZmlsZSA7OworICAgICAgKikgIyBSZWxhdGl2ZSBuYW1lLgorCWFjX3N1Yl9jYWNoZV9maWxlPSRhY190b3BfYnVpbGRfcHJlZml4JGNhY2hlX2ZpbGUgOzsKKyAgICAgIGVzYWMKKworICAgICAgQUNfTVNHX05PVElDRShbcnVubmluZyAkU0hFTEwgJGFjX3N1Yl9jb25maWd1cmUgJGFjX3N1Yl9jb25maWd1cmVfYXJncyAtLWNhY2hlLWZpbGU9JGFjX3N1Yl9jYWNoZV9maWxlIC0tc3JjZGlyPSRhY19zcmNkaXJdKQorICAgICAgIyBUaGUgZXZhbCBtYWtlcyBxdW90aW5nIGFyZ3VtZW50cyB3b3JrLgorICAgICAgZXZhbCAiXCRTSEVMTCBcIlwkYWNfc3ViX2NvbmZpZ3VyZVwiICRhY19zdWJfY29uZmlndXJlX2FyZ3MgXAorCSAgIC0tY2FjaGUtZmlsZT1cIlwkYWNfc3ViX2NhY2hlX2ZpbGVcIiAtLXNyY2Rpcj1cIlwkYWNfc3JjZGlyXCIiIHx8CisJQUNfTVNHX0VSUk9SKFskYWNfc3ViX2NvbmZpZ3VyZSBmYWlsZWQgZm9yICRhY19kaXJdKQorICAgIGZpCisKKyAgICBjZCAiJGFjX3BvcGRpciIKKyAgZG9uZQorZmkKK10pIyBfQUNfT1VUUFVUX1NVQkRJUlMKKworCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE91dHB1dHRpbmcgY29uZmlnLnN0YXR1cy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgQVU6OkFDX09VVFBVVChbQ09ORklHX0ZJTEVTLi4uXSwgW0VYVFJBLUNNRFNdLCBbSU5JVC1DTURTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgSWYgdGhlcmUgYXJlIGFyZ3VtZW50cyBnaXZlbiB0byBBQ19PVVRQVVQsIGRpc3BhdGNoIHRoZW0gdG8gdGhlCisjIHByb3BlciBtb2Rlcm4gbWFjcm9zLgorQVVfREVGVU4oW0FDX09VVFBVVF0sCitbbTRfaWZ2YWxuKFskMV0sCisJICAgW0FDX0NPTkZJR19GSUxFUyhbJDFdKV0pZG5sCittNF9pZnZhbG4oWyQyJDNdLAorCSAgW0FDX0NPTkZJR19DT01NQU5EUyhkZWZhdWx0LCBbJDJdLCBbJDNdKV0pZG5sCitbQUNfT1VUUFVUXV0pCisKKworIyBBQ19PVVRQVVQoW0NPTkZJR19GSUxFUy4uLl0sIFtFWFRSQS1DTURTXSwgW0lOSVQtQ01EU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhlIGJpZyBmaW5pc2guCisjIFByb2R1Y2UgY29uZmlnLnN0YXR1cywgY29uZmlnLmgsIGFuZCBsaW5rczsgYW5kIGNvbmZpZ3VyZSBzdWJkaXJzLgorIworbTRfZGVmaW5lKFtBQ19PVVRQVVRdLAorW2RubCBEaXNwYXRjaCB0aGUgZXh0cmEgYXJndW1lbnRzIHRvIHRoZWlyIG5hdGl2ZSBtYWNyb3MuCittNF9pZnZhbG4oWyQxXSwKKwkgIFtBQ19DT05GSUdfRklMRVMoWyQxXSldKWRubAorbTRfaWZ2YWxuKFskMiQzXSwKKwkgIFtBQ19DT05GSUdfQ09NTUFORFMoZGVmYXVsdCwgWyQyXSwgWyQzXSldKWRubAorbTRfaWZ2YWwoWyQxJDIkM10sCisJIFtBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorCQkgICAgICBbJDAgc2hvdWxkIGJlIHVzZWQgd2l0aG91dCBhcmd1bWVudHMuCitZb3Ugc2hvdWxkIHJ1biBhdXRvdXBkYXRlLl0pXSlkbmwKK0FDX0NBQ0hFX1NBVkUKKwordGVzdCAieCRwcmVmaXgiID0geE5PTkUgJiYgcHJlZml4PSRhY19kZWZhdWx0X3ByZWZpeAorIyBMZXQgbWFrZSBleHBhbmQgZXhlY19wcmVmaXguCit0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9IHhOT05FICYmIGV4ZWNfcHJlZml4PScke3ByZWZpeH0nCisKK200X2lmZGVmKFtfQUNfU0VFTl9DT05GSUcoSEVBREVSUyldLCBbREVGUz0tREhBVkVfQ09ORklHX0hdLCBbQUNfT1VUUFVUX01BS0VfREVGUygpXSkKKworZG5sIENvbW1hbmRzIHRvIHJ1biBiZWZvcmUgY3JlYXRpbmcgY29uZmlnLnN0YXR1cy4KK0FDX09VVFBVVF9DT01NQU5EU19QUkUoKWRubAorCis6ICR7Q09ORklHX1NUQVRVUz0uL2NvbmZpZy5zdGF0dXN9CithY193cml0ZV9mYWlsPTAKK2FjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCithY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzICRDT05GSUdfU1RBVFVTIgorX0FDX09VVFBVVF9DT05GSUdfU1RBVFVTKClkbmwKK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCisKK3Rlc3QgJGFjX3dyaXRlX2ZhaWwgPSAwIHx8CisgIEFDX01TR19FUlJPUihbd3JpdGUgZmFpbHVyZSBjcmVhdGluZyAkQ09ORklHX1NUQVRVU10pCisKK2RubCBDb21tYW5kcyB0byBydW4gYWZ0ZXIgY29uZmlnLnN0YXR1cyB3YXMgY3JlYXRlZAorQUNfT1VUUFVUX0NPTU1BTkRTX1BPU1QoKWRubAorCisjIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGFuZCB0aGVuIGNhbGxzIGNvbmZpZy5zdGF0dXMuCisjIGNvbmZpZy5zdGF0dXMgZG9lcyBpdHMgb3duIHJlZGlyZWN0aW9uLCBhcHBlbmRpbmcgdG8gY29uZmlnLmxvZy4KKyMgVW5mb3J0dW5hdGVseSwgb24gRE9TIHRoaXMgZmFpbHMsIGFzIGNvbmZpZy5sb2cgaXMgc3RpbGwga2VwdCBvcGVuCisjIGJ5IGNvbmZpZ3VyZSwgc28gY29uZmlnLnN0YXR1cyB3b24ndCBiZSBhYmxlIHRvIHdyaXRlIHRvIGl0OyBpdHMKKyMgb3V0cHV0IGlzIHNpbXBseSBkaXNjYXJkZWQuICBTbyB3ZSBleGVjIHRoZSBGRCB0byAvZGV2L251bGwsCisjIGVmZmVjdGl2ZWx5IGNsb3NpbmcgY29uZmlnLmxvZywgc28gaXQgY2FuIGJlIHByb3Blcmx5IChyZSlvcGVuZWQgYW5kCisjIGFwcGVuZGVkIHRvIGJ5IGNvbmZpZy5zdGF0dXMuICBXaGVuIGNvbWluZyBiYWNrIHRvIGNvbmZpZ3VyZSwgd2UKKyMgbmVlZCB0byBtYWtlIHRoZSBGRCBhdmFpbGFibGUgYWdhaW4uCitpZiB0ZXN0ICIkbm9fY3JlYXRlIiAhPSB5ZXM7IHRoZW4KKyAgYWNfY3Nfc3VjY2Vzcz06CisgIGFjX2NvbmZpZ19zdGF0dXNfYXJncz0KKyAgdGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYKKyAgICBhY19jb25maWdfc3RhdHVzX2FyZ3M9IiRhY19jb25maWdfc3RhdHVzX2FyZ3MgLS1xdWlldCIKKyAgZXhlYyBBU19NRVNTQUdFX0xPR19GRD4vZGV2L251bGwKKyAgJFNIRUxMICRDT05GSUdfU1RBVFVTICRhY19jb25maWdfc3RhdHVzX2FyZ3MgfHwgYWNfY3Nfc3VjY2Vzcz1mYWxzZQorICBleGVjIEFTX01FU1NBR0VfTE9HX0ZEPj5jb25maWcubG9nCisgICMgVXNlIHx8LCBub3QgJiYsIHRvIGF2b2lkIGV4aXRpbmcgZnJvbSB0aGUgaWYgd2l0aCAkPyA9IDEsIHdoaWNoCisgICMgd291bGQgbWFrZSBjb25maWd1cmUgZmFpbCBpZiB0aGlzIGlzIHRoZSBsYXN0IGluc3RydWN0aW9uLgorICAkYWNfY3Nfc3VjY2VzcyB8fCBBU19FWElUCitmaQorZG5sIGNvbmZpZy5zdGF0dXMgc2hvdWxkIG5vdCBkbyByZWN1cnNpb24uCitBQ19QUk9WSURFX0lGRUxTRShbQUNfQ09ORklHX1NVQkRJUlNdLCBbX0FDX09VVFBVVF9TVUJESVJTKCldKWRubAoraWYgdGVzdCAtbiAiJGFjX3VucmVjb2duaXplZF9vcHRzIiAmJiB0ZXN0ICIkZW5hYmxlX29wdGlvbl9jaGVja2luZyIgIT0gbm87IHRoZW4KKyAgQUNfTVNHX1dBUk4oW3VucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHNdKQorZmkKK10pIyBBQ19PVVRQVVQKKworCisjIF9BQ19PVVRQVVRfQ09ORklHX1NUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBjb25maWcuc3RhdHVzLiAgQ2FsbGVkIGJ5IEFDX09VVFBVVC4KKyMgUGF5IHNwZWNpYWwgYXR0ZW50aW9uIG5vdCB0byBoYXZlIHRvbyBsb25nIGhlcmUgZG9jczogc29tZSBvbGQKKyMgc2hlbGxzIGRpZS4gIFVuZm9ydHVuYXRlbHkgdGhlIGxpbWl0IGlzIG5vdCBrbm93biBwcmVjaXNlbHkuLi4KK200X2RlZmluZShbX0FDX09VVFBVVF9DT05GSUdfU1RBVFVTXSwKK1tBQ19NU0dfTk9USUNFKFtjcmVhdGluZyAkQ09ORklHX1NUQVRVU10pCitkbmwgQVNfTUVTU0FHRV9MT0dfRkQgaXMgbm90IGF2YWlsYWJsZSB5ZXQ6CittNF9wdXNoZGVmKFtBU19NRVNTQUdFX0xPR19GRF0pXWRubAorW0FTX0lOSVRfR0VORVJBVEVEKFskQ09ORklHX1NUQVRVU10sCitbIyBSdW4gdGhpcyBmaWxlIHRvIHJlY3JlYXRlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisjIENvbXBpbGVyIG91dHB1dCBwcm9kdWNlZCBieSBjb25maWd1cmUsIHVzZWZ1bCBmb3IgZGVidWdnaW5nCisjIGNvbmZpZ3VyZSwgaXMgaW4gY29uZmlnLmxvZyBpZiBpdCBleGlzdHMuCisKK2RlYnVnPWZhbHNlCithY19jc19yZWNoZWNrPWZhbHNlCithY19jc19zaWxlbnQ9ZmFsc2UKK10pIHx8IGFjX3dyaXRlX2ZhaWw9MQorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitbI10gU2F2ZSB0aGUgbG9nIG1lc3NhZ2UsIHRvIGtlZXAgJFswXSBhbmQgc28gb24gbWVhbmluZ2Z1bCwgYW5kIHRvCisjIHJlcG9ydCBhY3R1YWwgaW5wdXQgdmFsdWVzIG9mIENPTkZJR19GSUxFUyBldGMuIGluc3RlYWQgb2YgdGhlaXIKKyMgdmFsdWVzIGFmdGVyIG9wdGlvbnMgaGFuZGxpbmcuCithY19sb2c9IgorVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBtNF9pZnNldChbQUNfUEFDS0FHRV9OQU1FXSwgW0FDX1BBQ0tBR0VfTkFNRSBdKWRubAorJGFzX21lW11tNF9pZnNldChbQUNfUEFDS0FHRV9WRVJTSU9OXSwgWyBBQ19QQUNLQUdFX1ZFUlNJT05dKSwgd2hpY2ggd2FzCitnZW5lcmF0ZWQgYnkgbTRfUEFDS0FHRV9TVFJJTkcuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKworICBDT05GSUdfRklMRVMgICAgPSAkQ09ORklHX0ZJTEVTCisgIENPTkZJR19IRUFERVJTICA9ICRDT05GSUdfSEVBREVSUworICBDT05GSUdfTElOS1MgICAgPSAkQ09ORklHX0xJTktTCisgIENPTkZJR19DT01NQU5EUyA9ICRDT05GSUdfQ09NTUFORFMKKyAgJCAkWzBdICRbQF0KKworb24gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCisiCisKK19BQ0VPRgorCitkbmwgcmVtb3ZlIGFueSBuZXdsaW5lcyBmcm9tIHRoZXNlIHZhcmlhYmxlcy4KK200X2lmZGVmKFtfQUNfU0VFTl9DT05GSUcoRklMRVMpXSwKK1tjYXNlICRhY19jb25maWdfZmlsZXMgaW4gKiIKKyIqKSBzZXQgeCAkYWNfY29uZmlnX2ZpbGVzOyBzaGlmdDsgYWNfY29uZmlnX2ZpbGVzPSRbKl07OworZXNhYworXSkKK200X2lmZGVmKFtfQUNfU0VFTl9DT05GSUcoSEVBREVSUyldLAorW2Nhc2UgJGFjX2NvbmZpZ19oZWFkZXJzIGluICoiCisiKikgc2V0IHggJGFjX2NvbmZpZ19oZWFkZXJzOyBzaGlmdDsgYWNfY29uZmlnX2hlYWRlcnM9JFsqXTs7Citlc2FjCitdKQorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyMgRmlsZXMgdGhhdCBjb25maWcuc3RhdHVzIHdhcyBtYWRlIGZvci4KK200X2lmZGVmKFtfQUNfU0VFTl9DT05GSUcoRklMRVMpXSwKK1tjb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMiCitdKWRubAorbTRfaWZkZWYoW19BQ19TRUVOX0NPTkZJRyhIRUFERVJTKV0sCitbY29uZmlnX2hlYWRlcnM9IiRhY19jb25maWdfaGVhZGVycyIKK10pZG5sCittNF9pZmRlZihbX0FDX1NFRU5fQ09ORklHKExJTktTKV0sCitbY29uZmlnX2xpbmtzPSIkYWNfY29uZmlnX2xpbmtzIgorXSlkbmwKK200X2lmZGVmKFtfQUNfU0VFTl9DT05GSUcoQ09NTUFORFMpXSwKK1tjb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMiCitdKWRubAorCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorYWNfY3NfdXNhZ2U9IlwKK1xgJGFzX21lJyBpbnN0YW50aWF0ZXMgZmlsZXMgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb24gYWN0aW9ucworZnJvbSB0ZW1wbGF0ZXMgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uICBVbmxlc3MgdGhlIGZpbGVzCithbmQgYWN0aW9ucyBhcmUgc3BlY2lmaWVkIGFzIFRBR3MsIGFsbCBhcmUgaW5zdGFudGlhdGVkIGJ5IGRlZmF1bHQuCisKK1VzYWdlOiAkWzBdIFtbT1BUSU9OXV0uLi4gW1tUQUddXS4uLgorCisgIC1oLCAtLWhlbHAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLVYsIC0tdmVyc2lvbiAgICBwcmludCB2ZXJzaW9uIG51bWJlciBhbmQgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgdGhlbiBleGl0CisgICAgICAtLWNvbmZpZyAgICAgcHJpbnQgY29uZmlndXJhdGlvbiwgdGhlbiBleGl0CisgIC1xLCAtLXF1aWV0LCAtLXNpbGVudAorW10gICAgICAgICAgICAgICAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCisgIC1kLCAtLWRlYnVnICAgICAgZG9uJ3QgcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcworICAgICAgLS1yZWNoZWNrICAgIHVwZGF0ZSAkYXNfbWUgYnkgcmVjb25maWd1cmluZyBpbiB0aGUgc2FtZSBjb25kaXRpb25zCittNF9pZmRlZihbX0FDX1NFRU5fQ09ORklHKEZJTEVTKV0sCisgIFtBU19IRUxQX1NUUklORyhbWyAgICAtLWZpbGU9RklMRVs6VEVNUExBVEVdXV0sCisgICAgW2luc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRV0sIFsgICAgICAgICAgICAgICAgICAgXSkKK10pZG5sCittNF9pZmRlZihbX0FDX1NFRU5fQ09ORklHKEhFQURFUlMpXSwKKyAgW0FTX0hFTFBfU1RSSU5HKFtbICAgIC0taGVhZGVyPUZJTEVbOlRFTVBMQVRFXV1dLAorICAgIFtpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBoZWFkZXIgRklMRV0sIFsgICAgICAgICAgICAgICAgICAgXSkKK10pZG5sCisKK200X2lmZGVmKFtfQUNfU0VFTl9DT05GSUcoRklMRVMpXSwKK1tDb25maWd1cmF0aW9uIGZpbGVzOgorJGNvbmZpZ19maWxlcworCitdKWRubAorbTRfaWZkZWYoW19BQ19TRUVOX0NPTkZJRyhIRUFERVJTKV0sCitbQ29uZmlndXJhdGlvbiBoZWFkZXJzOgorJGNvbmZpZ19oZWFkZXJzCisKK10pZG5sCittNF9pZmRlZihbX0FDX1NFRU5fQ09ORklHKExJTktTKV0sCitbQ29uZmlndXJhdGlvbiBsaW5rczoKKyRjb25maWdfbGlua3MKKworXSlkbmwKK200X2lmZGVmKFtfQUNfU0VFTl9DT05GSUcoQ09NTUFORFMpXSwKK1tDb25maWd1cmF0aW9uIGNvbW1hbmRzOgorJGNvbmZpZ19jb21tYW5kcworCitdKWRubAorUmVwb3J0IGJ1Z3MgdG8gbTRfaWZzZXQoW0FDX1BBQ0tBR0VfQlVHUkVQT1JUXSwgWzxBQ19QQUNLQUdFX0JVR1JFUE9SVD5dLAorICBbdGhlIHBhY2thZ2UgcHJvdmlkZXJdKS5kbmwKK200X2lmZGVmKFtBQ19QQUNLQUdFX05BTUVdLCBbbTRfaWZzZXQoW0FDX1BBQ0tBR0VfVVJMXSwgWworQUNfUEFDS0FHRV9OQU1FIGhvbWUgcGFnZTogPEFDX1BBQ0tBR0VfVVJMPi5dKWRubAorbTRfaWYobTRfaW5kZXgobTRfZGVmbihbQUNfUEFDS0FHRV9OQU1FXSksIFtHTlUgXSksIFswXSwgWworR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uXSldKSIKKworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2FjX2NzX2NvbmZpZz0iYEFTX0VDSE8oWyIkYWNfY29uZmlndXJlX2FyZ3MiXSkgfCBzZWQgJ3MvXiAvLzsgcy9bW1xcIiJcYFwkXV0vXFxcXCYvZydgIgorYWNfY3NfdmVyc2lvbj0iXFwKK200X2lmc2V0KFtBQ19QQUNLQUdFX05BTUVdLCBbQUNfUEFDS0FHRV9OQU1FIF0pY29uZmlnLnN0YXR1c1tdZG5sCittNF9pZnNldChbQUNfUEFDS0FHRV9WRVJTSU9OXSwgWyBBQ19QQUNLQUdFX1ZFUlNJT05dKQorY29uZmlndXJlZCBieSAkWzBdLCBnZW5lcmF0ZWQgYnkgbTRfUEFDS0FHRV9TVFJJTkcsCisgIHdpdGggb3B0aW9ucyBcXCJcJGFjX2NzX2NvbmZpZ1xcIgorCitDb3B5cmlnaHQgKEMpIG00X1BBQ0tBR0VfWUVBUiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgY29uZmlnLnN0YXR1cyBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKKworYWNfcHdkPSckYWNfcHdkJworc3JjZGlyPSckc3JjZGlyJworQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfSU5TVEFMTF0sCitbSU5TVEFMTD0nJElOU1RBTEwnCitdKWRubAorQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfTUtESVJfUF0sCitbTUtESVJfUD0nJE1LRElSX1AnCitdKWRubAorQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQVdLXSwKK1tBV0s9JyRBV0snCitdKWRubAordGVzdCAtbiAiXCRBV0siIHx8IEFXSz1hd2sKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIFRoZSBkZWZhdWx0IGxpc3RzIGFwcGx5IGlmIHRoZSB1c2VyIGRvZXMgbm90IHNwZWNpZnkgYW55IGZpbGUuCithY19uZWVkX2RlZmF1bHRzPToKK3doaWxlIHRlc3QgJFsjXSAhPSAwCitkbworICBjYXNlICRbMV0gaW4KKyAgLS0qPSopCisgICAgYWNfb3B0aW9uPWBleHByICJYJFsxXSIgOiAnWFwoW1tePV1dKlwpPSdgCisgICAgYWNfb3B0YXJnPWBleHByICJYJFsxXSIgOiAnWFtbXj1dXSo9XCguKlwpJ2AKKyAgICBhY19zaGlmdD06CisgICAgOzsKKyAgKikKKyAgICBhY19vcHRpb249JFsxXQorICAgIGFjX29wdGFyZz0kWzJdCisgICAgYWNfc2hpZnQ9c2hpZnQKKyAgICA7OworICBlc2FjCisKKyAgY2FzZSAkYWNfb3B0aW9uIGluCisgICMgSGFuZGxpbmcgb2YgdGhlIG9wdGlvbnMuCisgIC1yZWNoZWNrIHwgLS1yZWNoZWNrIHwgLS1yZWNoZWMgfCAtLXJlY2hlIHwgLS1yZWNoIHwgLS1yZWMgfCAtLXJlIHwgLS1yKQorICAgIGFjX2NzX3JlY2hlY2s9OiA7OworICAtLXZlcnNpb24gfCAtLXZlcnNpbyB8IC0tdmVyc2kgfCAtLXZlcnMgfCAtLXZlciB8IC0tdmUgfCAtLXYgfCAtViApCisgICAgQVNfRUNITyhbIiRhY19jc192ZXJzaW9uIl0pOyBleGl0IDs7CisgIC0tY29uZmlnIHwgLS1jb25maSB8IC0tY29uZiB8IC0tY29uIHwgLS1jbyB8IC0tYyApCisgICAgQVNfRUNITyhbIiRhY19jc19jb25maWciXSk7IGV4aXQgOzsKKyAgLS1kZWJ1ZyB8IC0tZGVidSB8IC0tZGViIHwgLS1kZSB8IC0tZCB8IC1kICkKKyAgICBkZWJ1Zz06IDs7CittNF9pZmRlZihbX0FDX1NFRU5fQ09ORklHKEZJTEVTKV0sIFtkbmwKKyAgLS1maWxlIHwgLS1maWwgfCAtLWZpIHwgLS1mICkKKyAgICAkYWNfc2hpZnQKKyAgICBjYXNlICRhY19vcHRhcmcgaW4KKyAgICAqXCcqKSBhY19vcHRhcmc9YEFTX0VDSE8oWyIkYWNfb3B0YXJnIl0pIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgZXNhYworICAgIEFTX1ZBUl9BUFBFTkQoW0NPTkZJR19GSUxFU10sIFsiICckYWNfb3B0YXJnJyJdKQorICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworXSlkbmwKK200X2lmZGVmKFtfQUNfU0VFTl9DT05GSUcoSEVBREVSUyldLCBbZG5sCisgIC0taGVhZGVyIHwgLS1oZWFkZSB8IC0taGVhZCB8IC0taGVhICkKKyAgICAkYWNfc2hpZnQKKyAgICBjYXNlICRhY19vcHRhcmcgaW4KKyAgICAqXCcqKSBhY19vcHRhcmc9YEFTX0VDSE8oWyIkYWNfb3B0YXJnIl0pIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgZXNhYworICAgIEFTX1ZBUl9BUFBFTkQoW0NPTkZJR19IRUFERVJTXSwgWyIgJyRhY19vcHRhcmcnIl0pCisgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CisgIC0taGUgfCAtLWgpCisgICAgIyBDb25mbGljdCBiZXR3ZWVuIC0taGVscCBhbmQgLS1oZWFkZXIKKyAgICBBQ19NU0dfRVJST1IoW2FtYmlndW91cyBvcHRpb246IGAkWzFdJworVHJ5IGAkWzBdIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXSk7OworXSwgWyAgLS1oZSB8IC0taCB8XSlkbmwKKyAgLS1oZWxwIHwgLS1oZWwgfCAtaCApCisgICAgQVNfRUNITyhbIiRhY19jc191c2FnZSJdKTsgZXhpdCA7OworICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCB8IC0tc2kgfCAtLXMpCisgICAgYWNfY3Nfc2lsZW50PTogOzsKKworICAjIFRoaXMgaXMgYW4gZXJyb3IuCisgIC0qKSBBQ19NU0dfRVJST1IoW3VucmVjb2duaXplZCBvcHRpb246IGAkWzFdJworVHJ5IGAkWzBdIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXSkgOzsKKworICAqKSBBU19WQVJfQVBQRU5EKFthY19jb25maWdfdGFyZ2V0c10sIFsiICRbMV0iXSkKKyAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZSA7OworCisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworYWNfY29uZmlndXJlX2V4dHJhX2FyZ3M9CisKK2lmICRhY19jc19zaWxlbnQ7IHRoZW4KKyAgZXhlYyBBU19NRVNTQUdFX0ZEPi9kZXYvbnVsbAorICBhY19jb25maWd1cmVfZXh0cmFfYXJncz0iJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tc2lsZW50IgorZmkKKworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2RubCBDaGVjayB0aGlzIGJlZm9yZSBvcGVuaW5nIHRoZSBsb2csIHRvIGF2b2lkIGEgYnVnIG9uIE1pbkdXLAorZG5sIHdoaWNoIHByb2hpYml0cyB0aGUgcmVjdXJzaXZlIGluc3RhbmNlIGZyb20gdHJ1bmNhdGluZyBhbiBvcGVuIGxvZy4KK2lmIFwkYWNfY3NfcmVjaGVjazsgdGhlbgorICBzZXQgWCAnJFNIRUxMJyAnJFswXScgJGFjX2NvbmZpZ3VyZV9hcmdzIFwkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24KKyAgc2hpZnQKKyAgXEFTX0VDSE8oWyJydW5uaW5nIENPTkZJR19TSEVMTD0kU0hFTEwgXCRbKl0iXSkgPiZBU19NRVNTQUdFX0ZECisgIENPTkZJR19TSEVMTD0nJFNIRUxMJworICBleHBvcnQgQ09ORklHX1NIRUxMCisgIGV4ZWMgIlwkW0BdIgorZmkKKworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitkbmwgT3BlbiB0aGUgbG9nOgorbTRfcG9wZGVmKFtBU19NRVNTQUdFX0xPR19GRF0pZG5sCitleGVjIEFTX01FU1NBR0VfTE9HX0ZEPj5jb25maWcubG9nCit7CisgIGVjaG8KKyAgQVNfQk9YKFtSdW5uaW5nICRhc19tZS5dKQorICBBU19FQ0hPKFsiJGFjX2xvZyJdKQorfSA+JkFTX01FU1NBR0VfTE9HX0ZECisKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCittNF9pZmRlZihbX0FDX09VVFBVVF9DT01NQU5EU19JTklUXSwKK1sjCisjIElOSVQtQ09NTUFORFMKKyMKK19BQ19PVVRQVVRfQ09NTUFORFNfSU5JVAorXSlkbmwKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisKKyMgSGFuZGxpbmcgb2YgYXJndW1lbnRzLgorZm9yIGFjX2NvbmZpZ190YXJnZXQgaW4gJGFjX2NvbmZpZ190YXJnZXRzCitkbworICBjYXNlICRhY19jb25maWdfdGFyZ2V0IGluCittNF9pZmRlZihbX0FDX0xJU1RfVEFHU10sIFtfQUNfTElTVF9UQUdTXSkKKyAgKikgQUNfTVNHX0VSUk9SKFtpbnZhbGlkIGFyZ3VtZW50OiBgJGFjX2NvbmZpZ190YXJnZXQnXSk7OworICBlc2FjCitkb25lCisKK200X2lmZGVmKFtfQUNfU0VFTl9DT05GSUcoQU5ZKV0sIFtfQUNfT1VUUFVUX01BSU5fTE9PUF0pW11kbmwKKworQVNfRVhJVCgwKQorX0FDRU9GCitdKSMgX0FDX09VVFBVVF9DT05GSUdfU1RBVFVTCisKKyMgX0FDX09VVFBVVF9NQUlOX0xPT1AKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhlIG1haW4gbG9vcCBpbiAkQ09ORklHX1NUQVRVUy4KKyMKKyMgVGhpcyBtYWNybyBpcyBleHBhbmRlZCBpbnNpZGUgYSBoZXJlIGRvY3VtZW50LiAgSWYgdGhlIGhlcmUgZG9jdW1lbnQgaXMKKyMgY2xvc2VkLCBpdCBoYXMgdG8gYmUgcmVvcGVuZWQgd2l0aAorIyAiY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MSIuCisjCitBQ19ERUZVTihbX0FDX09VVFBVVF9NQUlOX0xPT1BdLAorWworIyBJZiB0aGUgdXNlciBkaWQgbm90IHVzZSB0aGUgYXJndW1lbnRzIHRvIHNwZWNpZnkgdGhlIGl0ZW1zIHRvIGluc3RhbnRpYXRlLAorIyB0aGVuIHRoZSBlbnZ2YXIgaW50ZXJmYWNlIGlzIHVzZWQuICBTZXQgb25seSB0aG9zZSB0aGF0IGFyZSBub3QuCisjIFdlIHVzZSB0aGUgbG9uZyBmb3JtIGZvciB0aGUgZGVmYXVsdCBhc3NpZ25tZW50IGJlY2F1c2Ugb2YgYW4gZXh0cmVtZWx5CisjIGJpemFycmUgYnVnIG9uIFN1bk9TIDQuMS4zLgoraWYgJGFjX25lZWRfZGVmYXVsdHM7IHRoZW4KK200X2lmZGVmKFtfQUNfU0VFTl9DT05GSUcoRklMRVMpXSwKK1sgIHRlc3QgIiR7Q09ORklHX0ZJTEVTK3NldH0iID0gc2V0IHx8IENPTkZJR19GSUxFUz0kY29uZmlnX2ZpbGVzCitdKWRubAorbTRfaWZkZWYoW19BQ19TRUVOX0NPTkZJRyhIRUFERVJTKV0sCitbICB0ZXN0ICIke0NPTkZJR19IRUFERVJTK3NldH0iID0gc2V0IHx8IENPTkZJR19IRUFERVJTPSRjb25maWdfaGVhZGVycworXSlkbmwKK200X2lmZGVmKFtfQUNfU0VFTl9DT05GSUcoTElOS1MpXSwKK1sgIHRlc3QgIiR7Q09ORklHX0xJTktTK3NldH0iID0gc2V0IHx8IENPTkZJR19MSU5LUz0kY29uZmlnX2xpbmtzCitdKWRubAorbTRfaWZkZWYoW19BQ19TRUVOX0NPTkZJRyhDT01NQU5EUyldLAorWyAgdGVzdCAiJHtDT05GSUdfQ09NTUFORFMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0NPTU1BTkRTPSRjb25maWdfY29tbWFuZHMKK10pZG5sCitmaQorCisjIEhhdmUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBjb252ZW5pZW5jZS4gIE1ha2UgaXQgaW4gdGhlIGJ1aWxkIHRyZWUKKyMgc2ltcGx5IGJlY2F1c2UgdGhlcmUgaXMgbm8gcmVhc29uIGFnYWluc3QgaGF2aW5nIGl0IGhlcmUsIGFuZCBpbiBhZGRpdGlvbiwKKyMgY3JlYXRpbmcgYW5kIG1vdmluZyBmaWxlcyBmcm9tIC90bXAgY2FuIHNvbWV0aW1lcyBjYXVzZSBwcm9ibGVtcy4KKyMgSG9vayBmb3IgaXRzIHJlbW92YWwgdW5sZXNzIGRlYnVnZ2luZy4KKyMgTm90ZSB0aGF0IHRoZXJlIGlzIGEgc21hbGwgd2luZG93IGluIHdoaWNoIHRoZSBkaXJlY3Rvcnkgd2lsbCBub3QgYmUgY2xlYW5lZDoKKyMgYWZ0ZXIgaXRzIGNyZWF0aW9uIGJ1dCBiZWZvcmUgaXRzIG5hbWUgaGFzIGJlZW4gYXNzaWduZWQgdG8gYCR0bXAnLgorJGRlYnVnIHx8Cit7CisgIHRtcD0KKyAgdHJhcCAnZXhpdF9zdGF0dXM9JD8KKyAgeyB0ZXN0IC16ICIkdG1wIiB8fCB0ZXN0ICEgLWQgIiR0bXAiIHx8IHJtIC1mciAiJHRtcCI7IH0gJiYgZXhpdCAkZXhpdF9zdGF0dXMKKycgMAorICB0cmFwICdBU19FWElUKFsxXSknIDEgMiAxMyAxNQorfQorZG5sIFRoZSBjb21tZW50IGFib3ZlIEFTX1RNUERJUiBzYXlzIGF0IG1vc3QgNCBjaGFycyBhcmUgYWxsb3dlZC4KK0FTX1RNUERJUihbY29uZl0sIFsuXSkKKworbTRfaWZkZWYoW19BQ19TRUVOX0NPTkZJRyhGSUxFUyldLCBbX0FDX09VVFBVVF9GSUxFU19QUkVQQVJFXSlbXWRubAorbTRfaWZkZWYoW19BQ19TRUVOX0NPTkZJRyhIRUFERVJTKV0sIFtfQUNfT1VUUFVUX0hFQURFUlNfUFJFUEFSRV0pW11kbmwKKworZXZhbCBzZXQgWCAiZG5sCisgIG00X2lmZGVmKFtfQUNfU0VFTl9DT05GSUcoRklMRVMpXSwgICAgWzpGICRDT05GSUdfRklMRVNdKVtdZG5sCisgIG00X2lmZGVmKFtfQUNfU0VFTl9DT05GSUcoSEVBREVSUyldLCAgWzpIICRDT05GSUdfSEVBREVSU10pW11kbmwKKyAgbTRfaWZkZWYoW19BQ19TRUVOX0NPTkZJRyhMSU5LUyldLCAgICBbOkwgJENPTkZJR19MSU5LU10pW11kbmwKKyAgbTRfaWZkZWYoW19BQ19TRUVOX0NPTkZJRyhDT01NQU5EUyldLCBbOkMgJENPTkZJR19DT01NQU5EU10pW11kbmwKKyIKK3NoaWZ0Citmb3IgYWNfdGFnCitkbworICBjYXNlICRhY190YWcgaW4KKyAgOltbRkhMQ11dKSBhY19tb2RlPSRhY190YWc7IGNvbnRpbnVlOzsKKyAgZXNhYworICBjYXNlICRhY19tb2RlJGFjX3RhZyBpbgorICA6W1tGSExdXSo6Kik7OworICA6TCogfCA6Qyo6KikgQUNfTVNHX0VSUk9SKFtpbnZhbGlkIHRhZyBgJGFjX3RhZyddKTs7CisgIDpbW0ZIXV0tKSBhY190YWc9LTotOzsKKyAgOltbRkhdXSopIGFjX3RhZz0kYWNfdGFnOiRhY190YWcuaW47OworICBlc2FjCisgIGFjX3NhdmVfSUZTPSRJRlMKKyAgSUZTPToKKyAgc2V0IHggJGFjX3RhZworICBJRlM9JGFjX3NhdmVfSUZTCisgIHNoaWZ0CisgIGFjX2ZpbGU9JFsxXQorICBzaGlmdAorCisgIGNhc2UgJGFjX21vZGUgaW4KKyAgOkwpIGFjX3NvdXJjZT0kWzFdOzsKKyAgOltbRkhdXSkKKyAgICBhY19maWxlX2lucHV0cz0KKyAgICBmb3IgYWNfZgorICAgIGRvCisgICAgICBjYXNlICRhY19mIGluCisgICAgICAtKSBhY19mPSIkdG1wL3N0ZGluIjs7CisgICAgICAqKSAjIExvb2sgZm9yIHRoZSBmaWxlIGZpcnN0IGluIHRoZSBidWlsZCB0cmVlLCB0aGVuIGluIHRoZSBzb3VyY2UgdHJlZQorCSAjIChpZiB0aGUgcGF0aCBpcyBub3QgYWJzb2x1dGUpLiAgVGhlIGFic29sdXRlIHBhdGggY2Fubm90IGJlIERPUy1zdHlsZSwKKwkgIyBiZWNhdXNlICRhY19mIGNhbm5vdCBjb250YWluIGA6Jy4KKwkgdGVzdCAtZiAiJGFjX2YiIHx8CisJICAgY2FzZSAkYWNfZiBpbgorCSAgIFtbXFwvJF1dKikgZmFsc2U7OworCSAgICopIHRlc3QgLWYgIiRzcmNkaXIvJGFjX2YiICYmIGFjX2Y9IiRzcmNkaXIvJGFjX2YiOzsKKwkgICBlc2FjIHx8CisJICAgQUNfTVNHX0VSUk9SKFtjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiBgJGFjX2YnXSk7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfZiBpbiAqXCcqKSBhY19mPWBBU19FQ0hPKFsiJGFjX2YiXSkgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyBlc2FjCisgICAgICBBU19WQVJfQVBQRU5EKFthY19maWxlX2lucHV0c10sIFsiICckYWNfZiciXSkKKyAgICBkb25lCisKKyAgICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAorICAgICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKKyAgICAjICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZy5zdGF0dXMuICAqLworICAgIGNvbmZpZ3VyZV9pbnB1dD0nR2VuZXJhdGVkIGZyb20gJ2AKKwkgIEFTX0VDSE8oWyIkWypdIl0pIHwgc2VkIFsnc3xeW146XSovfHw7c3w6W146XSovfCwgfGcnXQorCWAnIGJ5IGNvbmZpZ3VyZS4nCisgICAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorICAgICAgY29uZmlndXJlX2lucHV0PSIkYWNfZmlsZS4gICRjb25maWd1cmVfaW5wdXQiCisgICAgICBBQ19NU0dfTk9USUNFKFtjcmVhdGluZyAkYWNfZmlsZV0pCisgICAgZmkKKyAgICAjIE5ldXRyYWxpemUgc3BlY2lhbCBjaGFyYWN0ZXJzIGludGVycHJldGVkIGJ5IHNlZCBpbiByZXBsYWNlbWVudCBzdHJpbmdzLgorICAgIGNhc2UgJGNvbmZpZ3VyZV9pbnB1dCBpbiAjKAorICAgICpcJiogfCAqXHwqIHwgKlxcKiApCisgICAgICAgYWNfc2VkX2NvbmZfaW5wdXQ9YEFTX0VDSE8oWyIkY29uZmlndXJlX2lucHV0Il0pIHwKKyAgICAgICBzZWQgJ3MvW1tcXFxcJnxdXS9cXFxcJi9nJ2A7OyAjKAorICAgICopIGFjX3NlZF9jb25mX2lucHV0PSRjb25maWd1cmVfaW5wdXQ7OworICAgIGVzYWMKKworICAgIGNhc2UgJGFjX3RhZyBpbgorICAgICo6LToqIHwgKjotKSBjYXQgPiIkdG1wL3N0ZGluIiBcCisgICAgICB8fCBBQ19NU0dfRVJST1IoW2NvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGVdKSA7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisKKyAgYWNfZGlyPWBBU19ESVJOQU1FKFsiJGFjX2ZpbGUiXSlgCisgIEFTX01LRElSX1AoWyIkYWNfZGlyIl0pCisgIF9BQ19TUkNESVJTKFsiJGFjX2RpciJdKQorCisgIGNhc2UgJGFjX21vZGUgaW4KKyAgbTRfaWZkZWYoW19BQ19TRUVOX0NPTkZJRyhGSUxFUyldLCAgICBbOkYpX0FDX09VVFBVVF9GSUxFIDs7XSkKKyAgbTRfaWZkZWYoW19BQ19TRUVOX0NPTkZJRyhIRUFERVJTKV0sICBbOkgpX0FDX09VVFBVVF9IRUFERVIgOztdKQorICBtNF9pZmRlZihbX0FDX1NFRU5fQ09ORklHKExJTktTKV0sICAgIFs6TClfQUNfT1VUUFVUX0xJTksgOztdKQorICBtNF9pZmRlZihbX0FDX1NFRU5fQ09ORklHKENPTU1BTkRTKV0sIFs6QylfQUNfT1VUUFVUX0NPTU1BTkQgOztdKQorICBlc2FjCisKK2RubCBTb21lIHNoZWxscyBkb24ndCBsaWtlIGVtcHR5IGNhc2UvZXNhYworbTRfaWZkZWYoW19BQ19MSVNUX1RBR19DT01NQU5EU10sIFsKKyAgY2FzZSAkYWNfZmlsZSRhY19tb2RlIGluCitfQUNfTElTVF9UQUdfQ09NTUFORFMKKyAgZXNhYworXSlkbmwKK2RvbmUgIyBmb3IgYWNfdGFnCisKK10pIyBfQUNfT1VUUFVUX01BSU5fTE9PUAorCisKKyMgQUNfT1VUUFVUX01BS0VfREVGUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCB0aGUgREVGUyB2YXJpYWJsZSB0byB0aGUgLUQgb3B0aW9ucyBkZXRlcm1pbmVkIGVhcmxpZXIuCisjIFRoaXMgaXMgYSBzdWJyb3V0aW5lIG9mIEFDX09VVFBVVC4KKyMgSXQgaXMgY2FsbGVkIGluc2lkZSBjb25maWd1cmUsIG91dHNpZGUgb2YgY29uZmlnLnN0YXR1cy4KK200X2RlZmluZShbQUNfT1VUUFVUX01BS0VfREVGU10sCitbWyMgVHJhbnNmb3JtIGNvbmZkZWZzLmggaW50byBERUZTLgorIyBQcm90ZWN0IGFnYWluc3Qgc2hlbGwgZXhwYW5zaW9uIHdoaWxlIGV4ZWN1dGluZyBNYWtlZmlsZSBydWxlcy4KKyMgUHJvdGVjdCBhZ2FpbnN0IE1ha2VmaWxlIG1hY3JvIGV4cGFuc2lvbi4KKyMKKyMgSWYgdGhlIGZpcnN0IHNlZCBzdWJzdGl0dXRpb24gaXMgZXhlY3V0ZWQgKHdoaWNoIGxvb2tzIGZvciBtYWNyb3MgdGhhdAorIyB0YWtlIGFyZ3VtZW50cyksIHRoZW4gYnJhbmNoIHRvIHRoZSBxdW90ZSBzZWN0aW9uLiAgT3RoZXJ3aXNlLAorIyBsb29rIGZvciBhIG1hY3JvIHRoYXQgZG9lc24ndCB0YWtlIGFyZ3VtZW50cy4KK2FjX3NjcmlwdD0nCis6bWxpbmUKKy9cXCQveworIE4KKyBzLFxcXG4sLAorIGIgbWxpbmUKK30KK3QgY2xlYXIKKzpjbGVhcgorcy9eWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSpcKFteCSAoXVteCSAoXSooW14pXSopXClbCSBdKlwoLipcKS8tRFwxPVwyL2cKK3QgcXVvdGUKK3MvXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qXChbXgkgXVteCSBdKlwpWwkgXSpcKC4qXCkvLURcMT1cMi9nCit0IHF1b3RlCitiIGFueQorOnF1b3RlCitzL1sJIGB+IyReJiooKXt9XFx8OydcJyciPD4/XS9cXCYvZworcy9cWy9cXCYvZworcy9cXS9cXCYvZworcy9cJC8kJC9nCitICis6YW55CiskeworCWcKKwlzL15cbi8vCisJcy9cbi8gL2cKKwlwCit9CisnCitERUZTPWBzZWQgLW4gIiRhY19zY3JpcHQiIGNvbmZkZWZzLmhgCitdXSkjIEFDX09VVFBVVF9NQUtFX0RFRlMKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9jb25mL2F1dG9jb25mL3R5cGVzLm00IGIvc2hhcmUvYXV0b2NvbmYvYXV0b2NvbmYvdHlwZXMubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E3M2ZjMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9jb25mL2F1dG9jb25mL3R5cGVzLm00CkBAIC0wLDAgKzEsMTA2MSBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4JCQktKi0gQXV0b2NvbmYgLSotCisjIFR5cGUgcmVsYXRlZCBtYWNyb3M6IGV4aXN0ZW5jZSwgc2l6ZW9mLCBhbmQgc3RydWN0dXJlIG1lbWJlcnMuCisjCisjIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiwgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlCisjIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorIyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorIyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uLAorIyB2ZXJzaW9uIDMuMCwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFuZCBhIGNvcHkgb2YgdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGVzIENPUFlJTkd2MyBhbmQgQ09QWUlORy5FWENFUFRJT04KKyMgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFdyaXR0ZW4gYnkgRGF2aWQgTWFjS2VuemllLCB3aXRoIGhlbHAgZnJvbQorIyBGcmFuYyxvaXMgUGluYXJkLCBLYXJsIEJlcnJ5LCBSaWNoYXJkIFBpeGxleSwgSWFuIExhbmNlIFRheWxvciwKKyMgUm9sYW5kIE1jR3JhdGgsIE5vYWggRnJpZWRtYW4sIGRhdmlkIGQgenVobiwgYW5kIG1hbnkgb3RoZXJzLgorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFR5cGUgZXhpc3RlbmNlLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyAtLS0tLS0tLS0tLS0tLS0tICMKKyMgR2VuZXJhbCBjaGVja3MuICAjCisjIC0tLS0tLS0tLS0tLS0tLS0gIworCisjIFVwIHRvIDIuMTMgaW5jbHVkZWQsIEF1dG9jb25mIHVzZWQgdG8gcHJvdmlkZSB0aGUgbWFjcm8KKyMKKyMgICAgQUNfQ0hFQ0tfVFlQRShUWVBFLCBERUZBVUxUKQorIworIyBTaW5jZSwgaXQgcHJvdmlkZXMgYW5vdGhlciB2ZXJzaW9uIHdoaWNoIGZpdHMgYmV0dGVyIHdpdGggdGhlIG90aGVyCisjIEFDX0NIRUNLXyBmYW1pbGllczoKKyMKKyMgICAgQUNfQ0hFQ0tfVFlQRShUWVBFLAorIwkJICAgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSwKKyMJCSAgIFtJTkNMVURFUyA9IERFRkFVTFQtSU5DTFVERVNdKQorIworIyBJbiBvcmRlciB0byBwcm92aWRlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSBuZXcgc2NoZW1lIGlzCisjIGltcGxlbWVudGVkIGFzIF9BQ19DSEVDS19UWVBFX05FVywgdGhlIG9sZCBzY2hlbWUgYXMgX0FDX0NIRUNLX1RZUEVfT0xELAorIyBhbmQgQUNfQ0hFQ0tfVFlQRSBicmFuY2hlcyB0byBvbmUgb3IgdGhlIG90aGVyLCBkZXBlbmRpbmcgdXBvbiBpdHMKKyMgYXJndW1lbnRzLgorCisKKyMgX0FDX0NIRUNLX1RZUEVfTkVXX0JPRFkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2hlbGwgZnVuY3Rpb24gYm9keSBmb3IgX0FDX0NIRUNLX1RZUEVfTkVXLiAgVGhpcyBtYWNybyBpbXBsZW1lbnRzIHRoZQorIyBmb3JtZXIgdGFzayBvZiBBQ19DSEVDS19UWVBFLCB3aXRoIG9uZSBiaWcgZGlmZmVyZW5jZSB0aG91Z2g6IEFDX0NIRUNLX1RZUEUKKyMgdXNlZCB0byBncmVwIGluIHRoZSBoZWFkZXJzLCB3aGljaCwgQlRXLCBsZWQgdG8gbWFueSBwcm9ibGVtcyB1bnRpbCB0aGUKKyMgZXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9uIHdhcyBjb3JyZWN0IGFuZCBkaWQgbm90IGdpdmUgZmFsc2UgcG9zaXRpdmVzLgorIyBJdCB0dXJuZWQgb3V0IHRoZXJlIGFyZSBldmVuIHBvcnRhYmlsaXR5IGlzc3VlcyB3aXRoIGVncmVwLi4uCisjCisjIFRoZSBtb3N0IG9idmlvdXMgd2F5IHRvIGNoZWNrIGZvciBhIFRZUEUgaXMganVzdCB0byBjb21waWxlIGEgdmFyaWFibGUKKyMgZGVmaW5pdGlvbjoKKyMKKyMJICBUWVBFIG15X3ZhcjsKKyMKKyMgKFRZUEUgYmVpbmcgdGhlIHNlY29uZCBwYXJhbWV0ZXIgdG8gdGhlIHNoZWxsIGZ1bmN0aW9uLCBoZW5jZSAkW10yIGluIG00KS4KKyMgVW5mb3J0dW5hdGVseSB0aGlzIGRvZXMgbm90IHdvcmsgZm9yIGNvbnN0IHF1YWxpZmllZCB0eXBlcyBpbiBDKyssIHdoZXJlCisjIHlvdSBuZWVkIGFuIGluaXRpYWxpemVyLiAgU28geW91IHRoaW5rIG9mCisjCisjCSAgVFlQRSBteV92YXIgPSAoVFlQRSkgMDsKKyMKKyMgVW5mb3J0dW5hdGVseSwgYWdhaW4sIHRoaXMgaXMgbm90IHZhbGlkIGZvciBzb21lIEMrKyBjbGFzc2VzLgorIworIyBUaGVuIHlvdSBsb29rIGZvciBhbm90aGVyIHNjaGVtZS4gIEZvciBpbnN0YW5jZSB5b3UgdGhpbmsgb2YgZGVjbGFyaW5nCisjIGEgZnVuY3Rpb24gd2hpY2ggdXNlcyBhIHBhcmFtZXRlciBvZiB0eXBlIFRZUEU6CisjCisjCSAgaW50IGZvbyAoVFlQRSBwYXJhbSk7CisjCisjIGJ1dCBvZiBjb3Vyc2UgeW91IHNvb24gcmVhbGl6ZSB0aGlzIGRvZXMgbm90IG1ha2UgaXQgd2l0aCBLJlIKKyMgY29tcGlsZXJzLiAgQW5kIGJ5IG5vIHdheXMgeW91IHdhbnQgdG8KKyMKKyMJICBpbnQgZm9vIChwYXJhbSkKKyMJICAgIFRZUEUgcGFyYW0KKyMJICB7IDsgfQorIworIyBzaW5jZSB0aGlzIHRpbWUgaXQncyBDKysgd2hvIGlzIG5vdCBoYXBweS4KKyMKKyMgRG9uJ3QgZXZlbiB0aGluayBvZiB0aGUgcmV0dXJuIHR5cGUgb2YgYSBmdW5jdGlvbiwgc2luY2UgSyZSIGNyaWVzCisjIHRoZXJlIHRvby4gIFNvIHlvdSBzdGFydCB0aGlua2luZyBvZiBkZWNsYXJpbmcgYSAqcG9pbnRlciogdG8gdGhpcyBUWVBFOgorIworIwkgIFRZUEUgKnA7CisjCisjIGJ1dCB5b3Uga25vdyBmYWlybHkgd2VsbCB0aGF0IHRoaXMgaXMgbGVnYWwgaW4gQyBmb3IgYWdncmVnYXRlcyB3aGljaAorIyBhcmUgdW5rbm93biAoVFlQRSA9IHN0cnVjdCBkb2VzLW5vdC1leGlzdCkuCisjCisjIFRoZW4geW91IHRoaW5rIG9mIHVzaW5nIHNpemVvZiB0byBtYWtlIHN1cmUgdGhlIFRZUEUgaXMgcmVhbGx5CisjIGRlZmluZWQ6CisjCisjCSAgc2l6ZW9mIChUWVBFKTsKKyMKKyMgQnV0IHRoaXMgc3VjY2VlZHMgaWYgVFlQRSBpcyBhIHZhcmlhYmxlOiB5b3UgZ2V0IHRoZSBzaXplIG9mIHRoZQorIyB2YXJpYWJsZSdzIHR5cGUhISEKKyMKKyMgU28sIHRvIGZpbHRlciBvdXQgdGhlIGxhc3QgcG9zc2liaWxpdHksIHlvdSB0cnkgdGhpcyB0b286CisjCisjCSAgc2l6ZW9mICgoVFlQRSkpOworIworIyBUaGlzIGZhaWxzIGlmIFRZUEUgaXMgYSB0eXBlLCBidXQgc3VjY2VlZHMgaWYgVFlQRSBpcyBhY3R1YWxseSBhIHZhcmlhYmxlLgorIworIyBBbHNvIG5vdGUgdGhhdCB3ZSB1c2UKKyMKKyMJICBpZiAoc2l6ZW9mIChUWVBFKSkKKyMKKyMgdG8gYHJlYWQnIHNpemVvZiAodG8gYXZvaWQgd2FybmluZ3MpLCB3aGlsZSBub3QgZGVwZW5kaW5nIG9uIGl0cyB0eXBlCisjIChub3QgbmVjZXNzYXJpbHkgc2l6ZV90IGV0Yy4pLgorIworIyBDKysgZGlzYWxsb3dzIGRlZmluaW5nIHR5cGVzIGluc2lkZSBgc2l6ZW9mICgpJywgYnV0IHRoYXQncyBPSywKKyMgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byBjb25zaWRlciB1bm5hbWVkIHN0cnVjdHMgdG8gYmUgdHlwZXMgZm9yIEMrKywKKyMgcHJlY2lzZWx5IGJlY2F1c2UgdGhleSBkb24ndCB3b3JrIGluIGNhc2VzIGxpa2UgdGhhdC4KK200X2RlZmluZShbX0FDX0NIRUNLX1RZUEVfTkVXX0JPRFldLAorWyAgQVNfTElORU5PX1BVU0goWyRbXTFdKQorICBBQ19DQUNIRV9DSEVDSyhbZm9yICRbXTJdLCBbJFtdM10sCisgIFtBU19WQVJfU0VUKFskW10zXSwgW25vXSkKKyAgQUNfQ09NUElMRV9JRkVMU0UoCisgICAgW0FDX0xBTkdfUFJPR1JBTShbJFtdNF0sCisgICAgICAgW2lmIChzaXplb2YgKCRbXTIpKQorCSByZXR1cm4gMDtdKV0sCisgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgIFtBQ19MQU5HX1BST0dSQU0oWyRbXTRdLAorCSAgW2lmIChzaXplb2YgKCgkW10yKSkpCisJICAgIHJldHVybiAwO10pXSwKKyAgICAgICBbXSwKKyAgICAgICBbQVNfVkFSX1NFVChbJFtdM10sIFt5ZXNdKV0pXSldKQorICBBU19MSU5FTk9fUE9QCitdKWRubAorCisjIF9BQ19DSEVDS19UWVBFX05FVyhUWVBFLAorIwkJICAgICBbQUNUSU9OLUlGLUZPVU5EXSwgW0FDVElPTi1JRi1OT1QtRk9VTkRdLAorIwkJICAgICBbSU5DTFVERVMgPSBERUZBVUxULUlOQ0xVREVTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgdGhlIHR5cGUgVFlQRSBpcyBzdXBwb3J0ZWQgYnkgdGhlIHN5c3RlbSwgbWF5YmUgdmlhIHRoZQorIyB0aGUgcHJvdmlkZWQgaW5jbHVkZXMuCitBQ19ERUZVTihbX0FDX0NIRUNLX1RZUEVfTkVXXSwKK1tBQ19SRVFVSVJFX1NIRUxMX0ZOKFthY19mbl9dX0FDX0xBTkdfQUJCUkVWW19jaGVja190eXBlXSwKKyAgW0FTX0ZVTkNUSU9OX0RFU0NSSUJFKFthY19mbl9dX0FDX0xBTkdfQUJCUkVWW19jaGVja190eXBlXSwKKyAgICBbTElORU5PIFRZUEUgVkFSIElOQ0xVREVTXSwKKyAgICBbVGVzdHMgd2hldGhlciBUWVBFIGV4aXN0cyBhZnRlciBoYXZpbmcgaW5jbHVkZWQgSU5DTFVERVMsIHNldHRpbmcKKyAgICAgY2FjaGUgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5Ll0pXSwKKyAgICBbJDBfQk9EWV0pXWRubAorW0FTX1ZBUl9QVVNIREVGKFthY19UeXBlXSwgW2FjX2N2X3R5cGVfJDFdKV1kbmwKK1thY19mbl9bXV9BQ19MQU5HX0FCQlJFVltdX2NoZWNrX3R5cGUgIiRMSU5FTk8iICIkMSIgImFjX1R5cGUiIF1kbmwKK1siQVNfRVNDQVBFKFtBQ19JTkNMVURFU19ERUZBVUxUKFskNF0pXSwgWyIiXSkiCitBU19WQVJfSUYoW2FjX1R5cGVdLCBbeWVzXSwgWyQyXSwgWyQzXSkKK0FTX1ZBUl9QT1BERUYoW2FjX1R5cGVdKWRubAorXSkjIF9BQ19DSEVDS19UWVBFX05FVworCisKKyMgX0FDX0NIRUNLX1RZUEVTKFRZUEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBIZWxwZXIgdG8gQUNfQ0hFQ0tfVFlQRVMsIHdoaWNoIGdlbmVyYXRlcyB0d28gb2YgdGhlIGZvdXIgYXJndW1lbnRzCisjIHRvIF9BQ19DSEVDS19UWVBFX05FVyB0aGF0IGFyZSBiYXNlZCBvbiBUWVBFLgorbTRfZGVmaW5lKFtfQUNfQ0hFQ0tfVFlQRVNdLAorW1skMV0sIFtBQ19ERUZJTkVfVU5RVU9URUQoQVNfVFJfQ1BQKFtIQVZFXyQxXSksIFsxXSwKKyAgW0RlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGAkMScuXSldXSkKKworCisjIEFDX0NIRUNLX1RZUEVTKFRZUEVTLAorIwkJIFtBQ1RJT04tSUYtRk9VTkRdLCBbQUNUSU9OLUlGLU5PVC1GT1VORF0sCisjCQkgW0lOQ0xVREVTID0gREVGQVVMVC1JTkNMVURFU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRZUEVTIGlzIGFuIG00IGxpc3QuICBUaGVyZSBhcmUgbm8gYW1iaWd1aXRpZXMgaGVyZSwgd2UgbWVhbiB0aGUgbmV3ZXIKKyMgQUNfQ0hFQ0tfVFlQRS4KK0FDX0RFRlVOKFtBQ19DSEVDS19UWVBFU10sCitbbTRfbWFwX2FyZ3Nfc2VwKFtfQUNfQ0hFQ0tfVFlQRV9ORVcoXyQwKF0sIFspWworJDJdLCBbJDNdLCBbJDRdKV0sIFtdLCAkMSldKQorCisKKyMgX0FDX0NIRUNLX1RZUEVfT0xEKFRZUEUsIERFRkFVTFQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGSVhNRTogVGhpcyBpcyBhbiBleHRyZW1lbHkgYmFkbHkgY2hvc2VuIG5hbWUsIHNpbmNlIHRoaXMKKyMgbWFjcm8gYWN0dWFsbHkgcGVyZm9ybXMgYW4gQUNfUkVQTEFDRV9UWVBFLiAgU29tZSBkYXkgd2UKKyMgaGF2ZSB0byBjbGVhbiB0aGlzIHVwLgorbTRfZGVmaW5lKFtfQUNfQ0hFQ0tfVFlQRV9PTERdLAorW19BQ19DSEVDS19UWVBFX05FVyhbJDFdLCwKKyAgIFtBQ19ERUZJTkVfVU5RVU9URUQoWyQxXSwgWyQyXSwKKwkJICAgICAgIFtEZWZpbmUgdG8gYCQyJyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS5dKV0pZG5sCitdKSMgX0FDX0NIRUNLX1RZUEVfT0xECisKKworIyBfQUNfQ0hFQ0tfVFlQRV9SRVBMQUNFTUVOVF9UWVBFX1AoU1RSSU5HKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZXR1cm4gYDEnIGlmIFNUUklORyBzZWVtcyB0byBiZSBhIGJ1aWx0aW4gQy9DKysgdHlwZSwgaS5lLiwgaWYgaXQKKyMgc3RhcnRzIHdpdGggYF9Cb29sJywgYGJvb2wnLCBgY2hhcicsIGBkb3VibGUnLCBgZmxvYXQnLCBgaW50JywKKyMgYGxvbmcnLCBgc2hvcnQnLCBgc2lnbmVkJywgb3IgYHVuc2lnbmVkJyBmb2xsb3dlZCBieSBjaGFyYWN0ZXJzCisjIHRoYXQgYXJlIGRlZmluaW5nIHR5cGVzLgorIyBCZWNhdXNlIG1hbnkgcGVvcGxlIGhhdmUgdXNlZCBgb2ZmX3QnIGFuZCBgc2l6ZV90JyB0b28sIHRoZXkgYXJlIGFkZGVkCisjIGZvciBiZXR0ZXIgY29tbW9uLXVzZXdhcmQgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KK200X2RlZmluZShbX0FDX0NIRUNLX1RZUEVfUkVQTEFDRU1FTlRfVFlQRV9QXSwKK1ttNF9ibWF0Y2goWyQxXSwKKwkgIFteXChfQm9vbFx8Ym9vbFx8Y2hhclx8ZG91YmxlXHxmbG9hdFx8aW50XHxsb25nXHxzaG9ydFx8XCh1blwpP3NpZ25lZFx8W19hLXpBLVpdW19hLXpBLVowLTldKl90XClbXVtfYS16QS1aMC05KCkgKl0qJF0sCisJICAxLCAwKWRubAorXSkjIF9BQ19DSEVDS19UWVBFX1JFUExBQ0VNRU5UX1RZUEVfUAorCisKKyMgX0FDX0NIRUNLX1RZUEVfTUFZQkVfVFlQRV9QKFNUUklORykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmV0dXJuIGAxJyBpZiBTVFJJTkcgbG9va3MgbGlrZSBhIEMvQysrIHR5cGUuCittNF9kZWZpbmUoW19BQ19DSEVDS19UWVBFX01BWUJFX1RZUEVfUF0sCitbbTRfYm1hdGNoKFskMV0sIFteW19hLXpBLVowLTkgXStcKFtfYS16QS1aMC05KCkgKl1cfFxbXHxcXVwpKiRdLAorCSAgMSwgMClkbmwKK10pIyBfQUNfQ0hFQ0tfVFlQRV9NQVlCRV9UWVBFX1AKKworCisjIEFDX0NIRUNLX1RZUEUoVFlQRSwgREVGQVVMVCkKKyMgIG9yCisjIEFDX0NIRUNLX1RZUEUoVFlQRSwKKyMJCVtBQ1RJT04tSUYtRk9VTkRdLCBbQUNUSU9OLUlGLU5PVC1GT1VORF0sCisjCQlbSU5DTFVERVMgPSBERUZBVUxULUlOQ0xVREVTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBEaXNwYXRjaCByZXNwZWN0aXZlbHkgdG8gX0FDX0NIRUNLX1RZUEVfT0xEIG9yIF9BQ19DSEVDS19UWVBFX05FVy4KKyMgMS4gTW9yZSB0aGFuIHR3byBhcmd1bWVudHMJICAgICA9PiBORVcKKyMgMi4gJDIgc2VlbXMgdG8gYmUgcmVwbGFjZW1lbnQgdHlwZSA9PiBPTEQKKyMgICAgU2VlIF9BQ19DSEVDS19UWVBFX1JFUExBQ0VNRU5UX1RZUEVfUCBmb3IgYHJlcGxhY2VtZW50IHR5cGUnLgorIyAzLiAkMiBzZWVtcyB0byBiZSBhIHR5cGUJICAgICA9PiBORVcgcGx1cyBhIHdhcm5pbmcKKyMgNC4gZGVmYXVsdAkJCSAgICAgPT4gTkVXCitBQ19ERUZVTihbQUNfQ0hFQ0tfVFlQRV0sCitbbTRfY29uZChbJCNdLCBbM10sCisgIFtfQUNfQ0hFQ0tfVFlQRV9ORVddLAorCSBbJCNdLCBbNF0sCisgIFtfQUNfQ0hFQ0tfVFlQRV9ORVddLAorCSBbX0FDX0NIRUNLX1RZUEVfUkVQTEFDRU1FTlRfVFlQRV9QKFskMl0pXSwgWzFdLAorICBbX0FDX0NIRUNLX1RZUEVfT0xEXSwKKwkgW19BQ19DSEVDS19UWVBFX01BWUJFX1RZUEVfUChbJDJdKV0sIFsxXSwKKyAgW0FDX0RJQUdOT1NFKFtzeW50YXhdLAorCSAgICAgICBbJDA6IGFzc3VtaW5nIGAkMicgaXMgbm90IGEgdHlwZV0pX0FDX0NIRUNLX1RZUEVfTkVXXSwKKyAgW19BQ19DSEVDS19UWVBFX05FV10pKCRAKV0pIyBBQ19DSEVDS19UWVBFCisKKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworIyBUeXBlcyB0aGF0IG11c3QgYmUgY2hlY2tlZC4gICMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisKK0FOX0lERU5USUZJRVIoW3B0cmRpZmZfdF0sIFtBQ19DSEVDS19UWVBFU10pCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLSAjCisjIFNwZWNpZmljIGNoZWNrcy4gICMKKyMgLS0tLS0tLS0tLS0tLS0tLS0gIworCisjIEFDX1RZUEVfR0VUR1JPVVBTCisjIC0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfVFlQRV9HRVRHUk9VUFNdLAorW0FDX1JFUVVJUkUoW0FDX1RZUEVfVUlEX1RdKWRubAorQUNfQ0FDSEVfQ0hFQ0sodHlwZSBvZiBhcnJheSBhcmd1bWVudCB0byBnZXRncm91cHMsIGFjX2N2X3R5cGVfZ2V0Z3JvdXBzLAorW0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKAorW1svKiBUaGFua3MgdG8gTWlrZSBSZW5kZWxsIGZvciB0aGlzIHRlc3QuICAqLworXUFDX0lOQ0xVREVTX0RFRkFVTFRbCisjZGVmaW5lIE5HSUQgMjU2CisjdW5kZWYgTUFYCisjZGVmaW5lIE1BWCh4LCB5KSAoKHgpID4gKHkpID8gKHgpIDogKHkpKQorCitpbnQKK21haW4gKCkKK3sKKyAgZ2lkX3QgZ2lkc2V0W05HSURdOworICBpbnQgaSwgbjsKKyAgdW5pb24geyBnaWRfdCBndmFsOyBsb25nIGludCBsdmFsOyB9ICB2YWw7CisKKyAgdmFsLmx2YWwgPSAtMTsKKyAgZm9yIChpID0gMDsgaSA8IE5HSUQ7IGkrKykKKyAgICBnaWRzZXRbaV0gPSB2YWwuZ3ZhbDsKKyAgbiA9IGdldGdyb3VwcyAoc2l6ZW9mIChnaWRzZXQpIC8gTUFYIChzaXplb2YgKGludCksIHNpemVvZiAoZ2lkX3QpKSAtIDEsCisJCSBnaWRzZXQpOworICAvKiBFeGl0IG5vbi16ZXJvIGlmIGdldGdyb3VwcyBzZWVtcyB0byByZXF1aXJlIGFuIGFycmF5IG9mIGludHMuICBUaGlzCisgICAgIGhhcHBlbnMgd2hlbiBnaWRfdCBpcyBzaG9ydCBpbnQgYnV0IGdldGdyb3VwcyBtb2RpZmllcyBhbiBhcnJheQorICAgICBvZiBpbnRzLiAgKi8KKyAgcmV0dXJuIG4gPiAwICYmIGdpZHNldFtuXSAhPSB2YWwuZ3ZhbDsKK31dXSldLAorCSAgICAgICBbYWNfY3ZfdHlwZV9nZXRncm91cHM9Z2lkX3RdLAorCSAgICAgICBbYWNfY3ZfdHlwZV9nZXRncm91cHM9aW50XSwKKwkgICAgICAgW2FjX2N2X3R5cGVfZ2V0Z3JvdXBzPWNyb3NzXSkKK2lmIHRlc3QgJGFjX2N2X3R5cGVfZ2V0Z3JvdXBzID0gY3Jvc3M7IHRoZW4KKyAgZG5sIFdoZW4gd2UgY2FuJ3QgcnVuIHRoZSB0ZXN0IHByb2dyYW0gKHdlIGFyZSBjcm9zcyBjb21waWxpbmcpLCBwcmVzdW1lCisgIGRubCB0aGF0IDx1bmlzdGQuaD4gaGFzIGVpdGhlciBhbiBhY2N1cmF0ZSBwcm90b3R5cGUgZm9yIGdldGdyb3VwcyBvciBub25lLgorICBkbmwgT2xkIHN5c3RlbXMgd2l0aG91dCBwcm90b3R5cGVzIHByb2JhYmx5IHVzZSBpbnQuCisgIEFDX0VHUkVQX0hFQURFUihbZ2V0Z3JvdXBzLippbnQuKmdpZF90XSwgdW5pc3RkLmgsCisJCSAgYWNfY3ZfdHlwZV9nZXRncm91cHM9Z2lkX3QsIGFjX2N2X3R5cGVfZ2V0Z3JvdXBzPWludCkKK2ZpXSkKK0FDX0RFRklORV9VTlFVT1RFRChHRVRHUk9VUFNfVCwgJGFjX2N2X3R5cGVfZ2V0Z3JvdXBzLAorCQkgICBbRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheSBzZXQgYnkKKwkJICAgIGBnZXRncm91cHMnLiBVc3VhbGx5IHRoaXMgaXMgZWl0aGVyIGBpbnQnIG9yIGBnaWRfdCcuXSkKK10pIyBBQ19UWVBFX0dFVEdST1VQUworCisKKyMgQVU6OkFNX1RZUEVfUFRSRElGRl9UCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQVVfREVGVU4oW0FNX1RZUEVfUFRSRElGRl9UXSwKK1tBQ19DSEVDS19UWVBFUyhwdHJkaWZmX3QpXSkKKworCisjIEFDX1RZUEVfSU5UTUFYX1QKKyMgLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19UWVBFX0lOVE1BWF9UXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfVFlQRV9MT05HX0xPTkdfSU5UXSkKKyAgQUNfQ0hFQ0tfVFlQRShbaW50bWF4X3RdLAorICAgIFtBQ19ERUZJTkUoW0hBVkVfSU5UTUFYX1RdLCAxLAorICAgICAgIFtEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgaW50bWF4X3QnLl0pXSwKKyAgICBbdGVzdCAkYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50ID0geWVzIFwKKyAgICAgICAmJiBhY190eXBlPSdsb25nIGxvbmcgaW50JyBcCisgICAgICAgfHwgYWNfdHlwZT0nbG9uZyBpbnQnCisgICAgIEFDX0RFRklORV9VTlFVT1RFRChbaW50bWF4X3RdLCBbJGFjX3R5cGVdLAorICAgICAgIFtEZWZpbmUgdG8gdGhlIHdpZGVzdCBzaWduZWQgaW50ZWdlciB0eXBlCisJaWYgPHN0ZGludC5oPiBhbmQgPGludHR5cGVzLmg+IGRvIG5vdCBkZWZpbmUuXSldKQorXSkKKworCisjIEFDX1RZUEVfVUlOVE1BWF9UCisjIC0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfVFlQRV9VSU5UTUFYX1RdLAorWworICBBQ19SRVFVSVJFKFtBQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRdKQorICBBQ19DSEVDS19UWVBFKFt1aW50bWF4X3RdLAorICAgIFtBQ19ERUZJTkUoW0hBVkVfVUlOVE1BWF9UXSwgMSwKKyAgICAgICBbRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHVpbnRtYXhfdCcuXSldLAorICAgIFt0ZXN0ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQgPSB5ZXMgXAorICAgICAgICYmIGFjX3R5cGU9J3Vuc2lnbmVkIGxvbmcgbG9uZyBpbnQnIFwKKyAgICAgICB8fCBhY190eXBlPSd1bnNpZ25lZCBsb25nIGludCcKKyAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFt1aW50bWF4X3RdLCBbJGFjX3R5cGVdLAorICAgICAgIFtEZWZpbmUgdG8gdGhlIHdpZGVzdCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUKKwlpZiA8c3RkaW50Lmg+IGFuZCA8aW50dHlwZXMuaD4gZG8gbm90IGRlZmluZS5dKV0pCitdKQorCisKKyMgQUNfVFlQRV9JTlRQVFJfVAorIyAtLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX1RZUEVfSU5UUFRSX1RdLAorWworICBBQ19DSEVDS19UWVBFKFtpbnRwdHJfdF0sCisgICAgW0FDX0RFRklORShbSEFWRV9JTlRQVFJfVF0sIDEsCisgICAgICAgW0RlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBpbnRwdHJfdCcuXSldLAorICAgIFtmb3IgYWNfdHlwZSBpbiAnaW50JyAnbG9uZyBpbnQnICdsb25nIGxvbmcgaW50JzsgZG8KKyAgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKwkgW0FDX0xBTkdfQk9PTF9DT01QSUxFX1RSWSgKKwkgICAgW0FDX0lOQ0xVREVTX0RFRkFVTFRdLAorCSAgICBbW3NpemVvZiAodm9pZCAqKSA8PSBzaXplb2YgKCRhY190eXBlKV1dKV0sCisJIFtBQ19ERUZJTkVfVU5RVU9URUQoW2ludHB0cl90XSwgWyRhY190eXBlXSwKKwkgICAgW0RlZmluZSB0byB0aGUgdHlwZSBvZiBhIHNpZ25lZCBpbnRlZ2VyIHR5cGUgd2lkZSBlbm91Z2ggdG8KKwkgICAgIGhvbGQgYSBwb2ludGVyLCBpZiBzdWNoIGEgdHlwZSBleGlzdHMsIGFuZCBpZiB0aGUgc3lzdGVtCisJICAgICBkb2VzIG5vdCBkZWZpbmUgaXQuXSkKKwkgIGFjX3R5cGU9XSkKKyAgICAgICB0ZXN0IC16ICIkYWNfdHlwZSIgJiYgYnJlYWsKKyAgICAgZG9uZV0pCitdKQorCisKKyMgQUNfVFlQRV9VSU5UUFRSX1QKKyMgLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19UWVBFX1VJTlRQVFJfVF0sCitbCisgIEFDX0NIRUNLX1RZUEUoW3VpbnRwdHJfdF0sCisgICAgW0FDX0RFRklORShbSEFWRV9VSU5UUFRSX1RdLCAxLAorICAgICAgIFtEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdWludHB0cl90Jy5dKV0sCisgICAgW2ZvciBhY190eXBlIGluICd1bnNpZ25lZCBpbnQnICd1bnNpZ25lZCBsb25nIGludCcgXAorCSd1bnNpZ25lZCBsb25nIGxvbmcgaW50JzsgZG8KKyAgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKwkgW0FDX0xBTkdfQk9PTF9DT01QSUxFX1RSWSgKKwkgICAgW0FDX0lOQ0xVREVTX0RFRkFVTFRdLAorCSAgICBbW3NpemVvZiAodm9pZCAqKSA8PSBzaXplb2YgKCRhY190eXBlKV1dKV0sCisJIFtBQ19ERUZJTkVfVU5RVU9URUQoW3VpbnRwdHJfdF0sIFskYWNfdHlwZV0sCisJICAgIFtEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlIHdpZGUgZW5vdWdoIHRvCisJICAgICBob2xkIGEgcG9pbnRlciwgaWYgc3VjaCBhIHR5cGUgZXhpc3RzLCBhbmQgaWYgdGhlIHN5c3RlbQorCSAgICAgZG9lcyBub3QgZGVmaW5lIGl0Ll0pCisJICBhY190eXBlPV0pCisgICAgICAgdGVzdCAteiAiJGFjX3R5cGUiICYmIGJyZWFrCisgICAgIGRvbmVdKQorXSkKKworCisjIEFDX1RZUEVfTE9OR19ET1VCTEUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX1RZUEVfTE9OR19ET1VCTEVdLAorWworICBBQ19DQUNIRV9DSEVDSyhbZm9yIGxvbmcgZG91YmxlXSwgW2FjX2N2X3R5cGVfbG9uZ19kb3VibGVdLAorICAgIFtpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgIGFjX2N2X3R5cGVfbG9uZ19kb3VibGU9eWVzCisgICAgIGVsc2UKKyAgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKwkgW0FDX0xBTkdfQk9PTF9DT01QSUxFX1RSWSgKKwkgICAgW1svKiBUaGUgU3RhcmRlbnQgVmlzdHJhIGtub3dzIHNpemVvZiAobG9uZyBkb3VibGUpLCBidXQgZG9lcworCQkgbm90IHN1cHBvcnQgaXQuICAqLworCSAgICAgIGxvbmcgZG91YmxlIGZvbyA9IDAuMEw7XV0sCisJICAgIFtbLyogT24gVWx0cml4IDQuMyBjYywgbG9uZyBkb3VibGUgaXMgNCBhbmQgZG91YmxlIGlzIDguICAqLworCSAgICAgIHNpemVvZiAoZG91YmxlKSA8PSBzaXplb2YgKGxvbmcgZG91YmxlKV1dKV0sCisJIFthY19jdl90eXBlX2xvbmdfZG91YmxlPXllc10sCisJIFthY19jdl90eXBlX2xvbmdfZG91YmxlPW5vXSkKKyAgICAgZmldKQorICBpZiB0ZXN0ICRhY19jdl90eXBlX2xvbmdfZG91YmxlID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKFtIQVZFX0xPTkdfRE9VQkxFXSwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgbG9uZyBkb3VibGUnLl0pCisgIGZpCitdKQorCisKKyMgQUNfVFlQRV9MT05HX0RPVUJMRV9XSURFUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfVFlQRV9MT05HX0RPVUJMRV9XSURFUl0sCitbCisgIEFDX0NBQ0hFX0NIRUNLKAorICAgIFtmb3IgbG9uZyBkb3VibGUgd2l0aCBtb3JlIHJhbmdlIG9yIHByZWNpc2lvbiB0aGFuIGRvdWJsZV0sCisgICAgW2FjX2N2X3R5cGVfbG9uZ19kb3VibGVfd2lkZXJdLAorICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICBbQUNfTEFOR19CT09MX0NPTVBJTEVfVFJZKAorCSAgW1sjaW5jbHVkZSA8ZmxvYXQuaD4KKwkgICAgbG9uZyBkb3VibGUgY29uc3QgYVtdID0KKwkgICAgICB7CisJCSAwLjBMLCBEQkxfTUlOLCBEQkxfTUFYLCBEQkxfRVBTSUxPTiwKKwkJIExEQkxfTUlOLCBMREJMX01BWCwgTERCTF9FUFNJTE9OCisJICAgICAgfTsKKwkgICAgbG9uZyBkb3VibGUKKwkgICAgZiAobG9uZyBkb3VibGUgeCkKKwkgICAgeworCSAgICAgICByZXR1cm4gKCh4ICsgKHVuc2lnbmVkIGxvbmcgaW50KSAxMCkgKiAoLTEgLyB4KSArIGFbMF0KKwkJCSsgKHggPyBmICh4KSA6ICdjJykpOworCSAgICB9CisJICBdXSwKKwkgIFtbKDAgPCAoKERCTF9NQVhfRVhQIDwgTERCTF9NQVhfRVhQKQorCQkgICArIChEQkxfTUFOVF9ESUcgPCBMREJMX01BTlRfRElHKQorCQkgICAtIChMREJMX01BWF9FWFAgPCBEQkxfTUFYX0VYUCkKKwkJICAgLSAoTERCTF9NQU5UX0RJRyA8IERCTF9NQU5UX0RJRykpKQorCSAgICAmJiAoaW50KSBMREJMX0VQU0lMT04gPT0gMAorCSAgXV0pXSwKKyAgICAgICBhY19jdl90eXBlX2xvbmdfZG91YmxlX3dpZGVyPXllcywKKyAgICAgICBhY19jdl90eXBlX2xvbmdfZG91YmxlX3dpZGVyPW5vKV0pCisgIGlmIHRlc3QgJGFjX2N2X3R5cGVfbG9uZ19kb3VibGVfd2lkZXIgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0hBVkVfTE9OR19ET1VCTEVfV0lERVJdLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHRoZSB0eXBlIGBsb25nIGRvdWJsZScgd29ya3MgYW5kIGhhcyBtb3JlIHJhbmdlIG9yCisgICAgICAgcHJlY2lzaW9uIHRoYW4gYGRvdWJsZScuXSkKKyAgZmkKK10pIyBBQ19UWVBFX0xPTkdfRE9VQkxFX1dJREVSCisKKworIyBBQ19DX0xPTkdfRE9VQkxFCisjIC0tLS0tLS0tLS0tLS0tLS0KK0FVX0RFRlVOKFtBQ19DX0xPTkdfRE9VQkxFXSwKKyAgWworICAgIEFDX1RZUEVfTE9OR19ET1VCTEVfV0lERVIKKyAgICBhY19jdl9jX2xvbmdfZG91YmxlPSRhY19jdl90eXBlX2xvbmdfZG91YmxlX3dpZGVyCisgICAgaWYgdGVzdCAkYWNfY3ZfY19sb25nX2RvdWJsZSA9IHllczsgdGhlbgorICAgICAgQUNfREVGSU5FKFtIQVZFX0xPTkdfRE9VQkxFXSwgMSwKKwlbRGVmaW5lIHRvIDEgaWYgdGhlIHR5cGUgYGxvbmcgZG91YmxlJyB3b3JrcyBhbmQgaGFzIG1vcmUgcmFuZ2Ugb3IKKwkgcHJlY2lzaW9uIHRoYW4gYGRvdWJsZScuXSkKKyAgICBmaQorICBdLAorICBbVGhlIG1hY3JvIGBBQ19DX0xPTkdfRE9VQkxFJyBpcyBvYnNvbGV0ZS4KK1lvdSBzaG91bGQgdXNlIGBBQ19UWVBFX0xPTkdfRE9VQkxFJyBvciBgQUNfVFlQRV9MT05HX0RPVUJMRV9XSURFUicgaW5zdGVhZC5dCispCisKKworIyBfQUNfVFlQRV9MT05HX0xPTkdfU05JUFBFVAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeHBhbmRzIHRvIGEgQyBwcm9ncmFtIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdCBmb3Igc2ltdWx0YW5lb3VzIHN1cHBvcnQKKyMgb2YgJ2xvbmcgbG9uZycgYW5kICd1bnNpZ25lZCBsb25nIGxvbmcnLiBXZSBkb24ndCB3YW50IHRvIHNheSB0aGF0CisjICdsb25nIGxvbmcnIGlzIGF2YWlsYWJsZSBpZiAndW5zaWduZWQgbG9uZyBsb25nJyBpcyBub3QsIG9yIHZpY2UgdmVyc2EsCisjIGJlY2F1c2UgdG9vIG1hbnkgcHJvZ3JhbXMgcmVseSBvbiB0aGUgc3ltbWV0cnkgYmV0d2VlbiBzaWduZWQgYW5kIHVuc2lnbmVkCisjIGludGVnZXIgdHlwZXMgKGV4Y2x1ZGluZyAnYm9vbCcpLgorQUNfREVGVU4oW19BQ19UWVBFX0xPTkdfTE9OR19TTklQUEVUXSwKK1sKKyAgQUNfTEFOR19QUk9HUkFNKAorICAgIFtbLyogRm9yIG5vdywgZG8gbm90IHRlc3QgdGhlIHByZXByb2Nlc3NvcjsgYXMgb2YgMjAwNyB0aGVyZSBhcmUgdG9vIG1hbnkKKwkgaW1wbGVtZW50YXRpb25zIHdpdGggYnJva2VuIHByZXByb2Nlc3NvcnMuICBQZXJoYXBzIHRoaXMgY2FuCisJIGJlIHJldmlzaXRlZCBpbiAyMDEyLiAgSW4gdGhlIG1lYW50aW1lLCBjb2RlIHNob3VsZCBub3QgZXhwZWN0CisJICNpZiB0byB3b3JrIHdpdGggbGl0ZXJhbHMgd2lkZXIgdGhhbiAzMiBiaXRzLiAgKi8KKyAgICAgIC8qIFRlc3QgbGl0ZXJhbHMuICAqLworICAgICAgbG9uZyBsb25nIGludCBsbCA9IDkyMjMzNzIwMzY4NTQ3NzU4MDdsbDsKKyAgICAgIGxvbmcgbG9uZyBpbnQgbmxsID0gLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTDsKKyAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWxsID0gMTg0NDY3NDQwNzM3MDk1NTE2MTVVTEw7CisgICAgICAvKiBUZXN0IGNvbnN0YW50IGV4cHJlc3Npb25zLiAgICovCisgICAgICB0eXBlZGVmIGludCBhWygoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCA8IDAgJiYgMCA8IDkyMjMzNzIwMzY4NTQ3NzU4MDdsbCkKKwkJICAgICA/IDEgOiAtMSldOworICAgICAgdHlwZWRlZiBpbnQgYlsoMTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwgPD0gKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpIC0xCisJCSAgICAgPyAxIDogLTEpXTsKKyAgICAgIGludCBpID0gNjM7XV0sCisgICAgW1svKiBUZXN0IGF2YWlsYWJpbGl0eSBvZiBydW50aW1lIHJvdXRpbmVzIGZvciBzaGlmdCBhbmQgZGl2aXNpb24uICAqLworICAgICAgbG9uZyBsb25nIGludCBsbG1heCA9IDkyMjMzNzIwMzY4NTQ3NzU4MDdsbDsKKyAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWxsbWF4ID0gMTg0NDY3NDQwNzM3MDk1NTE2MTV1bGw7CisgICAgICByZXR1cm4gKChsbCA8PCA2MykgfCAobGwgPj4gNjMpIHwgKGxsIDwgaSkgfCAobGwgPiBpKQorCSAgICAgIHwgKGxsbWF4IC8gbGwpIHwgKGxsbWF4ICUgbGwpCisJICAgICAgfCAodWxsIDw8IDYzKSB8ICh1bGwgPj4gNjMpIHwgKHVsbCA8PCBpKSB8ICh1bGwgPj4gaSkKKwkgICAgICB8ICh1bGxtYXggLyB1bGwpIHwgKHVsbG1heCAlIHVsbCkpO11dKQorXSkKKworCisjIEFDX1RZUEVfTE9OR19MT05HX0lOVAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19UWVBFX0xPTkdfTE9OR19JTlRdLAorWworICBBQ19DQUNIRV9DSEVDSyhbZm9yIGxvbmcgbG9uZyBpbnRdLCBbYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50XSwKKyAgICBbQUNfTElOS19JRkVMU0UoCisgICAgICAgW19BQ19UWVBFX0xPTkdfTE9OR19TTklQUEVUXSwKKyAgICAgICBbZG5sIFRoaXMgY2F0Y2hlcyBhIGJ1ZyBpbiBUYW5kZW0gTm9uU3RvcCBLZXJuZWwgKE9TUykgY2MgLU8gY2lyY2EgMjAwNC4KKwlkbmwgSWYgY3Jvc3MgY29tcGlsaW5nLCBhc3N1bWUgdGhlIGJ1ZyBpc24ndCBpbXBvcnRhbnQsIHNpbmNlCisJZG5sIG5vYm9keSBjcm9zcyBjb21waWxlcyBmb3IgdGhpcyBwbGF0Zm9ybSBhcyBmYXIgYXMgd2Uga25vdy4KKwlBQ19SVU5fSUZFTFNFKAorCSAgW0FDX0xBTkdfUFJPR1JBTSgKKwkgICAgIFtbQCU6QGluY2x1ZGUgPGxpbWl0cy5oPgorCSAgICAgICBAJTpAaWZuZGVmIExMT05HX01BWAorCSAgICAgICBAJTpAIGRlZmluZSBIQUxGIFwKKwkJCSgxTEwgPDwgKHNpemVvZiAobG9uZyBsb25nIGludCkgKiBDSEFSX0JJVCAtIDIpKQorCSAgICAgICBAJTpAIGRlZmluZSBMTE9OR19NQVggKEhBTEYgLSAxICsgSEFMRikKKwkgICAgICAgQCU6QGVuZGlmXV0sCisJICAgICBbW2xvbmcgbG9uZyBpbnQgbiA9IDE7CisJICAgICAgIGludCBpOworCSAgICAgICBmb3IgKGkgPSAwOyA7IGkrKykKKwkJIHsKKwkJICAgbG9uZyBsb25nIGludCBtID0gbiA8PCBpOworCQkgICBpZiAobSA+PiBpICE9IG4pCisJCSAgICAgcmV0dXJuIDE7CisJCSAgIGlmIChMTE9OR19NQVggLyAyIDwgbSkKKwkJICAgICBicmVhazsKKwkJIH0KKwkgICAgICAgcmV0dXJuIDA7XV0pXSwKKwkgIFthY19jdl90eXBlX2xvbmdfbG9uZ19pbnQ9eWVzXSwKKwkgIFthY19jdl90eXBlX2xvbmdfbG9uZ19pbnQ9bm9dLAorCSAgW2FjX2N2X3R5cGVfbG9uZ19sb25nX2ludD15ZXNdKV0sCisgICAgICAgW2FjX2N2X3R5cGVfbG9uZ19sb25nX2ludD1ub10pXSkKKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50ID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKFtIQVZFX0xPTkdfTE9OR19JTlRdLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBsb25nIGxvbmcgaW50Jy5dKQorICBmaQorXSkKKworCisjIEFDX1RZUEVfVU5TSUdORURfTE9OR19MT05HX0lOVAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRdLAorWworICBBQ19DQUNIRV9DSEVDSyhbZm9yIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnRdLAorICAgIFthY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnRdLAorICAgIFtBQ19MSU5LX0lGRUxTRSgKKyAgICAgICBbX0FDX1RZUEVfTE9OR19MT05HX1NOSVBQRVRdLAorICAgICAgIFthY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQ9eWVzXSwKKyAgICAgICBbYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50PW5vXSldKQorICBpZiB0ZXN0ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0hBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVF0sIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQnLl0pCisgIGZpCitdKQorCisKKyMgQUNfVFlQRV9NQlNUQVRFX1QKKyMgLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19UWVBFX01CU1RBVEVfVF0sCisgIFtBQ19DQUNIRV9DSEVDSyhbZm9yIG1ic3RhdGVfdF0sIGFjX2N2X3R5cGVfbWJzdGF0ZV90LAorICAgICBbQUNfQ09NUElMRV9JRkVMU0UoCisJW0FDX0xBTkdfUFJPR1JBTSgKKwkgICBbQUNfSU5DTFVERVNfREVGQVVMVAorIwkgICAgaW5jbHVkZSA8d2NoYXIuaD5dLAorCSAgIFttYnN0YXRlX3QgeDsgcmV0dXJuIHNpemVvZiB4O10pXSwKKwlbYWNfY3ZfdHlwZV9tYnN0YXRlX3Q9eWVzXSwKKwlbYWNfY3ZfdHlwZV9tYnN0YXRlX3Q9bm9dKV0pCisgICBpZiB0ZXN0ICRhY19jdl90eXBlX21ic3RhdGVfdCA9IHllczsgdGhlbgorICAgICBBQ19ERUZJTkUoW0hBVkVfTUJTVEFURV9UXSwgMSwKKwkgICAgICAgW0RlZmluZSB0byAxIGlmIDx3Y2hhci5oPiBkZWNsYXJlcyBtYnN0YXRlX3QuXSkKKyAgIGVsc2UKKyAgICAgQUNfREVGSU5FKFttYnN0YXRlX3RdLCBpbnQsCisJICAgICAgIFtEZWZpbmUgdG8gYSB0eXBlIGlmIDx3Y2hhci5oPiBkb2VzIG5vdCBkZWZpbmUuXSkKKyAgIGZpXSkKKworCisjIEFDX1RZUEVfVUlEX1QKKyMgLS0tLS0tLS0tLS0tLQorIyBGSVhNRTogUmV3cml0ZSB1c2luZyBBQ19DSEVDS19UWVBFLgorQU5fSURFTlRJRklFUihbZ2lkX3RdLCBbQUNfVFlQRV9VSURfVF0pCitBTl9JREVOVElGSUVSKFt1aWRfdF0sIFtBQ19UWVBFX1VJRF9UXSkKK0FDX0RFRlVOKFtBQ19UWVBFX1VJRF9UXSwKK1tBQ19DQUNIRV9DSEVDSyhmb3IgdWlkX3QgaW4gc3lzL3R5cGVzLmgsIGFjX2N2X3R5cGVfdWlkX3QsCitbQUNfRUdSRVBfSEVBREVSKHVpZF90LCBzeXMvdHlwZXMuaCwKKyAgYWNfY3ZfdHlwZV91aWRfdD15ZXMsIGFjX2N2X3R5cGVfdWlkX3Q9bm8pXSkKK2lmIHRlc3QgJGFjX2N2X3R5cGVfdWlkX3QgPSBubzsgdGhlbgorICBBQ19ERUZJTkUodWlkX3QsIGludCwgW0RlZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXNuJ3QgZGVmaW5lLl0pCisgIEFDX0RFRklORShnaWRfdCwgaW50LCBbRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lc24ndCBkZWZpbmUuXSkKK2ZpCitdKQorCisKK0FOX0lERU5USUZJRVIoW3NpemVfdF0sIFtBQ19UWVBFX1NJWkVfVF0pCitBQ19ERUZVTihbQUNfVFlQRV9TSVpFX1RdLCBbQUNfQ0hFQ0tfVFlQRShzaXplX3QsIHVuc2lnbmVkIGludCldKQorCitBTl9JREVOVElGSUVSKFtzc2l6ZV90XSwgW0FDX1RZUEVfU1NJWkVfVF0pCitBQ19ERUZVTihbQUNfVFlQRV9TU0laRV9UXSwgW0FDX0NIRUNLX1RZUEUoc3NpemVfdCwgaW50KV0pCisKK0FOX0lERU5USUZJRVIoW3BpZF90XSwgW0FDX1RZUEVfUElEX1RdKQorQUNfREVGVU4oW0FDX1RZUEVfUElEX1RdLCAgW0FDX0NIRUNLX1RZUEUocGlkX3QsICBpbnQpXSkKKworQU5fSURFTlRJRklFUihbb2ZmX3RdLCBbQUNfVFlQRV9PRkZfVF0pCitBQ19ERUZVTihbQUNfVFlQRV9PRkZfVF0sICBbQUNfQ0hFQ0tfVFlQRShvZmZfdCwgIGxvbmcgaW50KV0pCisKK0FOX0lERU5USUZJRVIoW21vZGVfdF0sIFtBQ19UWVBFX01PREVfVF0pCitBQ19ERUZVTihbQUNfVFlQRV9NT0RFX1RdLCBbQUNfQ0hFQ0tfVFlQRShtb2RlX3QsIGludCldKQorCitBTl9JREVOVElGSUVSKFtpbnQ4X3RdLCBbQUNfVFlQRV9JTlQ4X1RdKQorQU5fSURFTlRJRklFUihbaW50MTZfdF0sIFtBQ19UWVBFX0lOVDE2X1RdKQorQU5fSURFTlRJRklFUihbaW50MzJfdF0sIFtBQ19UWVBFX0lOVDMyX1RdKQorQU5fSURFTlRJRklFUihbaW50NjRfdF0sIFtBQ19UWVBFX0lOVDY0X1RdKQorQU5fSURFTlRJRklFUihbdWludDhfdF0sIFtBQ19UWVBFX1VJTlQ4X1RdKQorQU5fSURFTlRJRklFUihbdWludDE2X3RdLCBbQUNfVFlQRV9VSU5UMTZfVF0pCitBTl9JREVOVElGSUVSKFt1aW50MzJfdF0sIFtBQ19UWVBFX1VJTlQzMl9UXSkKK0FOX0lERU5USUZJRVIoW3VpbnQ2NF90XSwgW0FDX1RZUEVfVUlOVDY0X1RdKQorQUNfREVGVU4oW0FDX1RZUEVfSU5UOF9UXSwgW19BQ19UWVBFX0lOVCg4KV0pCitBQ19ERUZVTihbQUNfVFlQRV9JTlQxNl9UXSwgW19BQ19UWVBFX0lOVCgxNildKQorQUNfREVGVU4oW0FDX1RZUEVfSU5UMzJfVF0sIFtfQUNfVFlQRV9JTlQoMzIpXSkKK0FDX0RFRlVOKFtBQ19UWVBFX0lOVDY0X1RdLCBbX0FDX1RZUEVfSU5UKDY0KV0pCitBQ19ERUZVTihbQUNfVFlQRV9VSU5UOF9UXSwgW19BQ19UWVBFX1VOU0lHTkVEX0lOVCg4KV0pCitBQ19ERUZVTihbQUNfVFlQRV9VSU5UMTZfVF0sIFtfQUNfVFlQRV9VTlNJR05FRF9JTlQoMTYpXSkKK0FDX0RFRlVOKFtBQ19UWVBFX1VJTlQzMl9UXSwgW19BQ19UWVBFX1VOU0lHTkVEX0lOVCgzMildKQorQUNfREVGVU4oW0FDX1RZUEVfVUlOVDY0X1RdLCBbX0FDX1RZUEVfVU5TSUdORURfSU5UKDY0KV0pCisKKyMgX0FDX1RZUEVfSU5UX0JPRFkKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2hlbGwgZnVuY3Rpb24gYm9keSBmb3IgX0FDX1RZUEVfSU5ULgorbTRfZGVmaW5lKFtfQUNfVFlQRV9JTlRfQk9EWV0sCitbICBBU19MSU5FTk9fUFVTSChbJFtdMV0pCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgaW50JFtdMl90XSwgWyRbXTNdLAorICAgIFtBU19WQVJfU0VUKFskW10zXSwgW25vXSkKKyAgICAgIyBPcmRlciBpcyBpbXBvcnRhbnQgLSBuZXZlciBjaGVjayBhIHR5cGUgdGhhdCBpcyBwb3RlbnRpYWxseSBzbWFsbGVyCisgICAgICMgdGhhbiBoYWxmIG9mIHRoZSBleHBlY3RlZCB0YXJnZXQgd2lkdGguCisgICAgIGZvciBhY190eXBlIGluIGludCRbXTJfdCAnaW50JyAnbG9uZyBpbnQnIFwKKwkgJ2xvbmcgbG9uZyBpbnQnICdzaG9ydCBpbnQnICdzaWduZWQgY2hhcic7IGRvCisgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoCisJIFtBQ19MQU5HX0JPT0xfQ09NUElMRV9UUlkoCisJICAgIFtBQ19JTkNMVURFU19ERUZBVUxUXSwKKwkgICAgW2VudW0geyBOID0gJFtdMiAvIDIgLSAxIH07CisJICAgICAwIDwgKCRhY190eXBlKSAoKCgoKCRhY190eXBlKSAxIDw8IE4pIDw8IE4pIC0gMSkgKiAyICsgMSldKV0sCisJIFtBQ19DT01QSUxFX0lGRUxTRSgKKwkgICAgW0FDX0xBTkdfQk9PTF9DT01QSUxFX1RSWSgKKwkgICAgICAgW0FDX0lOQ0xVREVTX0RFRkFVTFRdLAorCSAgICAgICBbZW51bSB7IE4gPSAkW10yIC8gMiAtIDEgfTsKKwkJKCRhY190eXBlKSAoKCgoKCRhY190eXBlKSAxIDw8IE4pIDw8IE4pIC0gMSkgKiAyICsgMSkKKwkJIDwgKCRhY190eXBlKSAoKCgoKCRhY190eXBlKSAxIDw8IE4pIDw8IE4pIC0gMSkgKiAyICsgMildKV0sCisJICAgIFtdLAorCSAgICBbQVNfQ0FTRShbJGFjX3R5cGVdLCBbaW50JFtdMl90XSwKKwkgICAgICAgW0FTX1ZBUl9TRVQoWyRbXTNdLCBbeWVzXSldLAorCSAgICAgICBbQVNfVkFSX1NFVChbJFtdM10sIFskYWNfdHlwZV0pXSldKV0pCisgICAgICAgQVNfVkFSX0lGKFskW10zXSwgW25vXSwgW10sIFticmVha10pCisgICAgIGRvbmVdKQorICBBU19MSU5FTk9fUE9QCitdKSMgX0FDX1RZUEVfSU5UX0JPRFkKKworIyBfQUNfVFlQRV9JTlQoTkJJVFMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IGEgdmFyaWFibGUgYWNfY3ZfY19pbnROQklUU190IHRvIGB5ZXMnIGlmIGludE5CSVRTX3QgaXMgYXZhaWxhYmxlLAorIyBgbm8nIGlmIGl0IGlzIG5vdCBhbmQgbm8gcmVwbGFjZW1lbnQgdHlwZXMgY291bGQgYmUgZm91bmQsIGFuZCBhIEMgdHlwZQorIyBpZiBpdCBpcyBub3QgYXZhaWxhYmxlIGJ1dCBhIHJlcGxhY2VtZW50IHNpZ25lZCBpbnRlZ2VyIHR5cGUgb2Ygd2lkdGgKKyMgZXhhY3RseSBOQklUUyBiaXRzIHdhcyBmb3VuZC4gIEluIHRoZSB0aGlyZCBjYXNlLCBpbnROQklUU190IGlzIEFDX0RFRklORWQKKyMgdG8gdHlwZSwgYXMgd2VsbC4KK0FDX0RFRlVOKFtfQUNfVFlQRV9JTlRdLAorW0FDX1JFUVVJUkVfU0hFTExfRk4oW2FjX2ZuX2NfZmluZF9pbnRYX3RdLAorICBbQVNfRlVOQ1RJT05fREVTQ1JJQkUoW2FjX2ZuX2NfZmluZF9pbnRYX3RdLCBbTElORU5PIEJJVFMgVkFSXSwKKyAgICBbRmluZHMgYSBzaWduZWQgaW50ZWdlciB0eXBlIHdpdGggd2lkdGggQklUUywgc2V0dGluZyBjYWNoZSB2YXJpYWJsZSBWQVIKKyAgICAgYWNjb3JkaW5nbHkuXSldLAorICAgIFskMF9CT0RZXSldZG5sCitbYWNfZm5fY19maW5kX2ludFhfdCAiJExJTkVOTyIgIiQxIiAiYWNfY3ZfY19pbnQkMV90IgorY2FzZSAkYWNfY3ZfY19pbnQkMV90IGluICMoCisgIG5vfHllcykgOzsgIygKKyAgKikKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoW2ludCQxX3RdLCBbJGFjX2N2X2NfaW50JDFfdF0sCisgICAgICBbRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGEgc2lnbmVkIGludGVnZXIgdHlwZSBvZiB3aWR0aCBleGFjdGx5ICQxIGJpdHMKKyAgICAgICBpZiBzdWNoIGEgdHlwZSBleGlzdHMgYW5kIHRoZSBzdGFuZGFyZCBpbmNsdWRlcyBkbyBub3QgZGVmaW5lIGl0Ll0pOzsKK2VzYWMKK10pIyBfQUNfVFlQRV9JTlQKKworIyBfQUNfVFlQRV9VTlNJR05FRF9JTlRfQk9EWQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTaGVsbCBmdW5jdGlvbiBib2R5IGZvciBfQUNfVFlQRV9VTlNJR05FRF9JTlQuCittNF9kZWZpbmUoW19BQ19UWVBFX1VOU0lHTkVEX0lOVF9CT0RZXSwKK1sgIEFTX0xJTkVOT19QVVNIKFskW10xXSkKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB1aW50JFtdMl90XSwgJFtdMywKKyAgICBbQVNfVkFSX1NFVChbJFtdM10sIFtub10pCisgICAgICMgT3JkZXIgaXMgaW1wb3J0YW50IC0gbmV2ZXIgY2hlY2sgYSB0eXBlIHRoYXQgaXMgcG90ZW50aWFsbHkgc21hbGxlcgorICAgICAjIHRoYW4gaGFsZiBvZiB0aGUgZXhwZWN0ZWQgdGFyZ2V0IHdpZHRoLgorICAgICBmb3IgYWNfdHlwZSBpbiB1aW50JFtdMl90ICd1bnNpZ25lZCBpbnQnICd1bnNpZ25lZCBsb25nIGludCcgXAorCSAndW5zaWduZWQgbG9uZyBsb25nIGludCcgJ3Vuc2lnbmVkIHNob3J0IGludCcgJ3Vuc2lnbmVkIGNoYXInOyBkbworICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorCSBbQUNfTEFOR19CT09MX0NPTVBJTEVfVFJZKAorCSAgICBbQUNfSU5DTFVERVNfREVGQVVMVF0sCisJICAgIFsoKCRhY190eXBlKSAtMSA+PiAoJFtdMiAvIDIgLSAxKSkgPj4gKCRbXTIgLyAyIC0gMSkgPT0gM10pXSwKKwkgW0FTX0NBU0UoWyRhY190eXBlXSwgW3VpbnQkW10yX3RdLAorCSAgICBbQVNfVkFSX1NFVChbJFtdM10sIFt5ZXNdKV0sCisJICAgIFtBU19WQVJfU0VUKFskW10zXSwgWyRhY190eXBlXSldKV0pCisgICAgICAgQVNfVkFSX0lGKFskW10zXSwgW25vXSwgW10sIFticmVha10pCisgICAgIGRvbmVdKQorICBBU19MSU5FTk9fUE9QCitdKSMgX0FDX1RZUEVfVU5TSUdORURfSU5UX0JPRFkKKworCisjIF9BQ19UWVBFX1VOU0lHTkVEX0lOVChOQklUUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgYSB2YXJpYWJsZSBhY19jdl9jX3VpbnROQklUU190IHRvIGB5ZXMnIGlmIHVpbnROQklUU190IGlzIGF2YWlsYWJsZSwKKyMgYG5vJyBpZiBpdCBpcyBub3QgYW5kIG5vIHJlcGxhY2VtZW50IHR5cGVzIGNvdWxkIGJlIGZvdW5kLCBhbmQgYSBDIHR5cGUKKyMgaWYgaXQgaXMgbm90IGF2YWlsYWJsZSBidXQgYSByZXBsYWNlbWVudCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgb2Ygd2lkdGgKKyMgZXhhY3RseSBOQklUUyBiaXRzIHdhcyBmb3VuZC4gIEluIHRoZSB0aGlyZCBjYXNlLCB1aW50TkJJVFNfdCBpcyBBQ19ERUZJTkVkCisjIHRvIHR5cGUsIGFzIHdlbGwuCitBQ19ERUZVTihbX0FDX1RZUEVfVU5TSUdORURfSU5UXSwKK1tBQ19SRVFVSVJFX1NIRUxMX0ZOKFthY19mbl9jX2ZpbmRfdWludFhfdF0sCisgIFtBU19GVU5DVElPTl9ERVNDUklCRShbYWNfZm5fY19maW5kX3VpbnRYX3RdLCBbTElORU5PIEJJVFMgVkFSXSwKKyAgICBbRmluZHMgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlIHdpdGggd2lkdGggQklUUywgc2V0dGluZyBjYWNoZSB2YXJpYWJsZSBWQVIKKyAgICAgYWNjb3JkaW5nbHkuXSldLAorICBbJDBfQk9EWV0pXWRubAorW2FjX2ZuX2NfZmluZF91aW50WF90ICIkTElORU5PIiAiJDEiICJhY19jdl9jX3VpbnQkMV90IgorY2FzZSAkYWNfY3ZfY191aW50JDFfdCBpbiAjKAorICBub3x5ZXMpIDs7ICMoCisgICopCisgICAgbTRfYm1hdGNoKFskMV0sIFteXCg4XHwzMlx8NjRcKSRdLAorICAgICAgW0FDX0RFRklORShbX1VJTlQkMV9UXSwgMSwKKwkgW0RlZmluZSBmb3IgU29sYXJpcyAyLjUuMSBzbyB0aGUgdWludCQxX3QgdHlwZWRlZiBmcm9tCisJICA8c3lzL3N5bmNoLmg+LCA8cHRocmVhZC5oPiwgb3IgPHNlbWFwaG9yZS5oPiBpcyBub3QgdXNlZC4KKwkgIElmIHRoZSB0eXBlZGVmIHdlcmUgYWxsb3dlZCwgdGhlICNkZWZpbmUgYmVsb3cgd291bGQgY2F1c2UgYQorCSAgc3ludGF4IGVycm9yLl0pXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoW3VpbnQkMV90XSwgWyRhY19jdl9jX3VpbnQkMV90XSwKKyAgICAgIFtEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlIG9mIHdpZHRoIGV4YWN0bHkgJDEgYml0cworICAgICAgIGlmIHN1Y2ggYSB0eXBlIGV4aXN0cyBhbmQgdGhlIHN0YW5kYXJkIGluY2x1ZGVzIGRvIG5vdCBkZWZpbmUgaXQuXSk7OworICBlc2FjCitdKSMgX0FDX1RZUEVfVU5TSUdORURfSU5UCisKKyMgQUNfVFlQRV9TSUdOQUwKKyMgLS0tLS0tLS0tLS0tLS0KKyMgTm90ZSB0aGF0IGlkZW50aWZpZXJzIHN0YXJ0aW5nIHdpdGggU0lHIGFyZSByZXNlcnZlZCBieSBBTlNJIEMuCisjIEM4OSByZXF1aXJlcyBzaWduYWwgaGFuZGxlcnMgdG8gcmV0dXJuIHZvaWQ7IG9ubHkgSyZSIHJldHVybmVkIGludDsKKyMgbW9kZXJuIGNvZGUgZG9lcyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCB1c2luZyB0aGlzIG1hY3JvIChub3QgdG8KKyMgbWVudGlvbiB0aGF0IHNpZ2FjdGlvbiBpcyBiZXR0ZXIgdGhhbiBzaWduYWwpLgorQVVfREVGVU4oW0FDX1RZUEVfU0lHTkFMXSwKK1tBQ19DQUNIRV9DSEVDSyhbcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzXSwgYWNfY3ZfdHlwZV9zaWduYWwsCitbQUNfQ09NUElMRV9JRkVMU0UoCitbQUNfTEFOR19QUk9HUkFNKFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CitdLAorCQkgW3JldHVybiAqKHNpZ25hbCAoMCwgMCkpICgwKSA9PSAxO10pXSwKKwkJICAgW2FjX2N2X3R5cGVfc2lnbmFsPWludF0sCisJCSAgIFthY19jdl90eXBlX3NpZ25hbD12b2lkXSldKQorQUNfREVGSU5FX1VOUVVPVEVEKFJFVFNJR1RZUEUsICRhY19jdl90eXBlX3NpZ25hbCwKKwkJICAgW0RlZmluZSBhcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzCisJCSAgICAoYGludCcgb3IgYHZvaWQnKS5dKQorXSwgW3lvdXIgY29kZSBtYXkgc2FmZWx5IGFzc3VtZSBDODkgc2VtYW50aWNzIHRoYXQgUkVUU0lHVFlQRSBpcyB2b2lkLgorUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGBBQ19DQUNIRV9DSEVDSycgd2hlbiB5b3UgYWRqdXN0IHRoZSBjb2RlLl0pCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBDaGVja2luZyBzaXplIG9mIHR5cGVzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIC0tLS0tLS0tLS0tLS0tLS0gIworIyBHZW5lcmljIGNoZWNrcy4gICMKKyMgLS0tLS0tLS0tLS0tLS0tLSAjCisKKworIyBBQ19DSEVDS19TSVpFT0YoVFlQRSwgW0lHTk9SRURdLCBbSU5DTFVERVMgPSBERUZBVUxULUlOQ0xVREVTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfQ0hFQ0tfU0laRU9GXSwKK1tBU19MSVRFUkFMX0lGKFskMV0sIFtdLAorCSAgICAgICBbbTRfZmF0YWwoWyQwOiByZXF1aXJlcyBsaXRlcmFsIGFyZ3VtZW50c10pXSldZG5sCitbIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KK19BQ19DQUNIRV9DSEVDS19JTlQoW3NpemUgb2YgJDFdLCBbQVNfVFJfU0goW2FjX2N2X3NpemVvZl8kMV0pXSwKKyAgWyhsb25nIGludCkgKHNpemVvZiAoJDEpKV0sCisgIFtBQ19JTkNMVURFU19ERUZBVUxUKFskM10pXSwKKyAgW2lmIHRlc3QgIiRBU19UUl9TSChbYWNfY3ZfdHlwZV8kMV0pIiA9IHllczsgdGhlbgorICAgICBBQ19NU0dfRkFJTFVSRShbY2Fubm90IGNvbXB1dGUgc2l6ZW9mICgkMSldLCA3NykKKyAgIGVsc2UKKyAgICAgQVNfVFJfU0goW2FjX2N2X3NpemVvZl8kMV0pPTAKKyAgIGZpXSkKKworQUNfREVGSU5FX1VOUVVPVEVEKEFTX1RSX0NQUChzaXplb2ZfJDEpLCAkQVNfVFJfU0goW2FjX2N2X3NpemVvZl8kMV0pLAorCQkgICBbVGhlIHNpemUgb2YgYCQxJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLl0pCitdKSMgQUNfQ0hFQ0tfU0laRU9GCisKKworIyBBQ19DSEVDS19BTElHTk9GKFRZUEUsIFtJTkNMVURFUyA9IERFRkFVTFQtSU5DTFVERVNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX0NIRUNLX0FMSUdOT0ZdLAorW0FTX0xJVEVSQUxfSUYoWyQxXSwgW10sCisJICAgICAgIFttNF9mYXRhbChbJDA6IHJlcXVpcmVzIGxpdGVyYWwgYXJndW1lbnRzXSldKV1kbmwKK1sjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlciwKKyMgc2VlIEFDX0NIRUNLX1NJWkVPRiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KK19BQ19DQUNIRV9DSEVDS19JTlQoW2FsaWdubWVudCBvZiAkMV0sIFtBU19UUl9TSChbYWNfY3ZfYWxpZ25vZl8kMV0pXSwKKyAgWyhsb25nIGludCkgb2Zmc2V0b2YgKGFjX190eXBlX2FsaWdub2ZfLCB5KV0sCisgIFtBQ19JTkNMVURFU19ERUZBVUxUKFskMl0pCisjaWZuZGVmIG9mZnNldG9mCisjIGRlZmluZSBvZmZzZXRvZih0eXBlLCBtZW1iZXIpICgoY2hhciAqKSAmKCh0eXBlICopIDApLT5tZW1iZXIgLSAoY2hhciAqKSAwKQorI2VuZGlmCit0eXBlZGVmIHN0cnVjdCB7IGNoYXIgeDsgJDEgeTsgfSBhY19fdHlwZV9hbGlnbm9mXztdLAorICBbaWYgdGVzdCAiJEFTX1RSX1NIKFthY19jdl90eXBlXyQxXSkiID0geWVzOyB0aGVuCisgICAgIEFDX01TR19GQUlMVVJFKFtjYW5ub3QgY29tcHV0ZSBhbGlnbm1lbnQgb2YgJDFdLCA3NykKKyAgIGVsc2UKKyAgICAgQVNfVFJfU0goW2FjX2N2X2FsaWdub2ZfJDFdKT0wCisgICBmaV0pCisKK0FDX0RFRklORV9VTlFVT1RFRChBU19UUl9DUFAoYWxpZ25vZl8kMSksICRBU19UUl9TSChbYWNfY3ZfYWxpZ25vZl8kMV0pLAorCQkgICBbVGhlIG5vcm1hbCBhbGlnbm1lbnQgb2YgYCQxJywgaW4gYnl0ZXMuXSkKK10pIyBBQ19DSEVDS19BTElHTk9GCisKKworIyBBVTo6QUNfSU5UXzE2X0JJVFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFdoYXQgYSBncmVhdCBuYW1lIDopCitBVV9ERUZVTihbQUNfSU5UXzE2X0JJVFNdLAorW0FDX0NIRUNLX1NJWkVPRihbaW50XSkKK3Rlc3QgJGFjX2N2X3NpemVvZl9pbnQgPSAyICYmCisgIEFDX0RFRklORShJTlRfMTZfQklUUywgMSwKKwkgICAgW0RlZmluZSB0byAxIGlmIGBzaXplb2YgKGludCknID0gMi4gIE9ic29sZXRlLCB1c2UgYFNJWkVPRl9JTlQnLl0pCitdLCBbeW91ciBjb2RlIHNob3VsZCBubyBsb25nZXIgZGVwZW5kIHVwb24gYElOVF8xNl9CSVRTJywgYnV0IHVwb24KK2BTSVpFT0ZfSU5UID09IDInLiAgUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGBBQ19ERUZJTkUnIHdoZW4geW91CithZGp1c3QgdGhlIGNvZGUuXSkKKworCisjIEFVOjpBQ19MT05HXzY0X0JJVFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorQVVfREVGVU4oW0FDX0xPTkdfNjRfQklUU10sCitbQUNfQ0hFQ0tfU0laRU9GKFtsb25nIGludF0pCit0ZXN0ICRhY19jdl9zaXplb2ZfbG9uZ19pbnQgPSA4ICYmCisgIEFDX0RFRklORShMT05HXzY0X0JJVFMsIDEsCisJICAgIFtEZWZpbmUgdG8gMSBpZiBgc2l6ZW9mIChsb25nIGludCknID0gOC4gIE9ic29sZXRlLCB1c2UKKwkgICAgIGBTSVpFT0ZfTE9OR19JTlQnLl0pCitdLCBbeW91ciBjb2RlIHNob3VsZCBubyBsb25nZXIgZGVwZW5kIHVwb24gYExPTkdfNjRfQklUUycsIGJ1dCB1cG9uCitgU0laRU9GX0xPTkdfSU5UID09IDgnLiAgUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGBBQ19ERUZJTkUnIHdoZW4KK3lvdSBhZGp1c3QgdGhlIGNvZGUuXSkKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBHZW5lcmljIHN0cnVjdHVyZSBjaGVja3MuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIC0tLS0tLS0tLS0tLS0tLS0gIworIyBHZW5lcmljIGNoZWNrcy4gICMKKyMgLS0tLS0tLS0tLS0tLS0tLSAjCisKKyMgX0FDX0NIRUNLX01FTUJFUl9CT0RZCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTaGVsbCBmdW5jdGlvbiBib2R5IGZvciBBQ19DSEVDS19NRU1CRVIuCittNF9kZWZpbmUoW19BQ19DSEVDS19NRU1CRVJfQk9EWV0sCitbICBBU19MSU5FTk9fUFVTSChbJFtdMV0pCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgJFtdMi4kW10zXSwgWyRbXTRdLAorICBbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbJFtdNV0sCitbc3RhdGljICRbXTIgYWNfYWdncjsKK2lmIChhY19hZ2dyLiRbXTMpCityZXR1cm4gMDtdKV0sCisJCVtBU19WQVJfU0VUKFskW100XSwgW3llc10pXSwKKyAgW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oWyRbXTVdLAorW3N0YXRpYyAkW10yIGFjX2FnZ3I7CitpZiAoc2l6ZW9mIGFjX2FnZ3IuJFtdMykKK3JldHVybiAwO10pXSwKKwkJW0FTX1ZBUl9TRVQoWyRbXTRdLCBbeWVzXSldLAorCQlbQVNfVkFSX1NFVChbJFtdNF0sIFtub10pXSldKV0pCisgIEFTX0xJTkVOT19QT1AKK10pZG5sCisKKyMgQUNfQ0hFQ0tfTUVNQkVSKEFHR1JFR0FURS5NRU1CRVIsCisjCQkgIFtBQ1RJT04tSUYtRk9VTkRdLCBbQUNUSU9OLUlGLU5PVC1GT1VORF0sCisjCQkgIFtJTkNMVURFUyA9IERFRkFVTFQtSU5DTFVERVNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQUdHUkVHQVRFLk1FTUJFUiBpcyBmb3IgaW5zdGFuY2UgYHN0cnVjdCBwYXNzd2QucHdfZ2Vjb3MnLCBzaGVsbAorIyB2YXJpYWJsZXMgYXJlIG5vdCBhIHZhbGlkIGFyZ3VtZW50LgorQUNfREVGVU4oW0FDX0NIRUNLX01FTUJFUl0sCitbQUNfUkVRVUlSRV9TSEVMTF9GTihbYWNfZm5fXV9BQ19MQU5HX0FCQlJFVltfY2hlY2tfbWVtYmVyXSwKKyAgW0FTX0ZVTkNUSU9OX0RFU0NSSUJFKFthY19mbl9dX0FDX0xBTkdfQUJCUkVWW19jaGVja19tZW1iZXJdLAorICAgIFtMSU5FTk8gQUdHUiBNRU1CRVIgVkFSIElOQ0xVREVTXSwKKyAgICBbVHJpZXMgdG8gZmluZCBpZiB0aGUgZmllbGQgTUVNQkVSIGV4aXN0cyBpbiB0eXBlIEFHR1IsIGFmdGVyIGluY2x1ZGluZworICAgICBJTkNMVURFUywgc2V0dGluZyBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkuXSldLAorICAgIFtfJDBfQk9EWV0pXWRubAorW0FTX0xJVEVSQUxfSUYoWyQxXSwgW10sIFttNF9mYXRhbChbJDA6IHJlcXVpcmVzIGxpdGVyYWwgYXJndW1lbnRzXSldKV1kbmwKK1ttNF9pZihtNF9pbmRleChbJDFdLCBbLl0pLCAtMSwgW200X2ZhdGFsKFskMDogRGlkIG5vdCBzZWUgYW55IGRvdCBpbiBgJDEnXSldKV1kbmwKK1tBU19WQVJfUFVTSERFRihbYWNfTWVtYmVyXSwgW2FjX2N2X21lbWJlcl8kMV0pXWRubAorW2FjX2ZuX1tdX0FDX0xBTkdfQUJCUkVWW11fY2hlY2tfbWVtYmVyICIkTElORU5PIiBdZG5sCitbbTRfYnBhdHN1YnN0KFskMV0sIFteXChbXi5dKlwpXC5cKC4qXCldLCBbIlwxIiAiXDIiXSkgImFjX01lbWJlciIgXWRubAorWyJBU19FU0NBUEUoW0FDX0lOQ0xVREVTX0RFRkFVTFQoWyQ0XSldLCBbIiJdKSIKK0FTX1ZBUl9JRihbYWNfTWVtYmVyXSwgW3llc10sIFskMl0sIFskM10pCitBU19WQVJfUE9QREVGKFthY19NZW1iZXJdKWRubAorXSkjIEFDX0NIRUNLX01FTUJFUgorCisKKyMgX0FDX0NIRUNLX01FTUJFUlMoQUdHUkVHQVRFLk1FTUJFUikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSGVscGVyIHRvIEFDX0NIRUNLX01FTUJFUlMsIHdoaWNoIGdlbmVyYXRlcyB0d28gb2YgdGhlIGZvdXIKKyMgYXJndW1lbnRzIHRvIEFDX0NIRUNLX01FTUJFUiB0aGF0IGFyZSBiYXNlZCBvbiBBR0dSRUdBVEUgYW5kIE1FTUJFUi4KK200X2RlZmluZShbX0FDX0NIRUNLX01FTUJFUlNdLAorW1skMV0sIFtBQ19ERUZJTkVfVU5RVU9URUQoQVNfVFJfQ1BQKFtIQVZFXyQxXSksIFsxXSwKKyAgW0RlZmluZSB0byAxIGlmIGBdbTRfYnBhdHN1YnN0KFskMV0sCisgICAgW15cKFteLl0qXClcLlwoLipcKV0sIFtbXDInIGlzIGEgbWVtYmVyIG9mIGBcMV1dKVsnLl0pXV0pCisKKyMgQUNfQ0hFQ0tfTUVNQkVSUyhbQUdHUkVHQVRFLk1FTUJFUiwgLi4uXSwKKyMJCSAgIFtBQ1RJT04tSUYtRk9VTkRdLCBbQUNUSU9OLUlGLU5PVC1GT1VORF0KKyMJCSAgIFtJTkNMVURFUyA9IERFRkFVTFQtSU5DTFVERVNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGFuIG00IGxpc3QuCitBQ19ERUZVTihbQUNfQ0hFQ0tfTUVNQkVSU10sCitbbTRfbWFwX2FyZ3Nfc2VwKFtBQ19DSEVDS19NRU1CRVIoXyQwKF0sIFspWworJDJdLCBbJDNdLCBbJDRdKV0sIFtdLCAkMSldKQorCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKyMgTWVtYmVycyB0aGF0IG91Z2h0IHRvIGJlIHRlc3RlZCB3aXRoIEFDX0NIRUNLX01FTUJFUlMuICAjCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworCitBTl9JREVOVElGSUVSKFtzdF9ibGtzaXplXSwgW0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBzdGF0LnN0X2Jsa3NpemVdKV0pCitBTl9JREVOVElGSUVSKFtzdF9yZGV2XSwgICAgW0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBzdGF0LnN0X3JkZXZdKV0pCisKKworIyBBbHBoYWJldGljIG9yZGVyLCBwbGVhc2UuCisKKyMgX0FDX1NUUlVDVF9ESVJFTlQoTUVNQkVSKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0FDX1NUUlVDVF9ESVJFTlRdLAorWworICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfRElSRU5UXSkKKyAgQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IGRpcmVudC4kMV0sIFtdLCBbXSwKKyAgICBbWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfRElSRU5UX0gKKyMgaW5jbHVkZSA8ZGlyZW50Lmg+CisjZWxzZQorIyBkZWZpbmUgZGlyZW50IGRpcmVjdAorIyBpZmRlZiBIQVZFX1NZU19ORElSX0gKKyMgIGluY2x1ZGUgPHN5cy9uZGlyLmg+CisjIGVuZGlmCisjIGlmZGVmIEhBVkVfU1lTX0RJUl9ICisjICBpbmNsdWRlIDxzeXMvZGlyLmg+CisjIGVuZGlmCisjIGlmZGVmIEhBVkVfTkRJUl9ICisjICBpbmNsdWRlIDxuZGlyLmg+CisjIGVuZGlmCisjZW5kaWYKKyAgICBdXSkKK10pCisKKyMgQUNfU1RSVUNUX0RJUkVOVF9EX0lOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX1NUUlVDVF9ESVJFTlRfRF9JTk9dLCBbX0FDX1NUUlVDVF9ESVJFTlQoW2RfaW5vXSldKQorCisjIEFDX1NUUlVDVF9ESVJFTlRfRF9UWVBFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX1NUUlVDVF9ESVJFTlRfRF9UWVBFXSwgW19BQ19TVFJVQ1RfRElSRU5UKFtkX3R5cGVdKV0pCisKKworIyBBQ19TVFJVQ1RfU1RfQkxLU0laRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorQVVfREVGVU4oW0FDX1NUUlVDVF9TVF9CTEtTSVpFXSwKK1tBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3Qgc3RhdC5zdF9ibGtzaXplXSwKKwkJIFtBQ19ERUZJTkUoSEFWRV9TVF9CTEtTSVpFLCAxLAorCQkJICAgIFtEZWZpbmUgdG8gMSBpZiB5b3VyIGBzdHJ1Y3Qgc3RhdCcgaGFzCisJCQkgICAgIGBzdF9ibGtzaXplJy4gIERlcHJlY2F0ZWQsIHVzZQorCQkJICAgICBgSEFWRV9TVFJVQ1RfU1RBVF9TVF9CTEtTSVpFJyBpbnN0ZWFkLl0pXSkKK10sIFt5b3VyIGNvZGUgc2hvdWxkIG5vIGxvbmdlciBkZXBlbmQgdXBvbiBgSEFWRV9TVF9CTEtTSVpFJywgYnV0CitgSEFWRV9TVFJVQ1RfU1RBVF9TVF9CTEtTSVpFJy4gIFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kCit0aGUgYEFDX0RFRklORScgd2hlbiB5b3UgYWRqdXN0IHRoZSBjb2RlLl0pIyBBQ19TVFJVQ1RfU1RfQkxLU0laRQorCisKKyMgQUNfU1RSVUNUX1NUX0JMT0NLUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmIGBzdHJ1Y3Qgc3RhdCcgY29udGFpbnMgYW4gYHN0X2Jsb2NrcycgbWVtYmVyLCBkZWZpbmUKKyMgSEFWRV9TVFJVQ1RfU1RBVF9TVF9CTE9DS1MuICBPdGhlcndpc2UsIGFkZCBgZmlsZWJsb2Nrcy5vJyB0byB0aGUKKyMgb3V0cHV0IHZhcmlhYmxlIExJQk9CSlMuICBXZSBzdGlsbCBkZWZpbmUgSEFWRV9TVF9CTE9DS1MgZm9yIGJhY2t3YXJkCisjIGNvbXBhdGliaWxpdHkuICBJbiB0aGUgZnV0dXJlLCB3ZSB3aWxsIGFjdGl2YXRlIHNwZWNpYWxpemF0aW9ucyBmb3IKKyMgdGhpcyBtYWNybywgc28gZG9uJ3Qgb2Jzb2xldGUgaXQgcmlnaHQgbm93LgorIworIyBBQ19PQlNPTEVURShbJDBdLCBbOyByZXBsYWNlIGl0IHdpdGgKKyMgICBBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3Qgc3RhdC5zdF9ibG9ja3NdLAorIwkJICAgICAgW0FDX0xJQk9CSihbZmlsZWJsb2Nrc10pXSkKKyMgUGxlYXNlIG5vdGUgdGhhdCBpdCB3aWxsIGRlZmluZSBgSEFWRV9TVFJVQ1RfU1RBVF9TVF9CTE9DS1MnLAorIyBhbmQgbm90IGBIQVZFX1NUX0JMT0NLUycuXSlkbmwKKyMKK0FOX0lERU5USUZJRVIoW3N0X2Jsb2Nrc10sICBbQUNfU1RSVUNUX1NUX0JMT0NLU10pCitBQ19ERUZVTihbQUNfU1RSVUNUX1NUX0JMT0NLU10sCitbQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IHN0YXQuc3RfYmxvY2tzXSwKKwkJICBbQUNfREVGSU5FKEhBVkVfU1RfQkxPQ0tTLCAxLAorCQkJICAgICBbRGVmaW5lIHRvIDEgaWYgeW91ciBgc3RydWN0IHN0YXQnIGhhcworCQkJICAgICAgYHN0X2Jsb2NrcycuICBEZXByZWNhdGVkLCB1c2UKKwkJCSAgICAgIGBIQVZFX1NUUlVDVF9TVEFUX1NUX0JMT0NLUycgaW5zdGVhZC5dKV0sCisJCSAgW0FDX0xJQk9CSihbZmlsZWJsb2Nrc10pXSkKK10pIyBBQ19TVFJVQ1RfU1RfQkxPQ0tTCisKKworIyBBQ19TVFJVQ1RfU1RfUkRFVgorIyAtLS0tLS0tLS0tLS0tLS0tLQorQVVfREVGVU4oW0FDX1NUUlVDVF9TVF9SREVWXSwKK1tBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3Qgc3RhdC5zdF9yZGV2XSwKKwkJIFtBQ19ERUZJTkUoSEFWRV9TVF9SREVWLCAxLAorCQkJICAgIFtEZWZpbmUgdG8gMSBpZiB5b3VyIGBzdHJ1Y3Qgc3RhdCcgaGFzIGBzdF9yZGV2Jy4KKwkJCSAgICAgRGVwcmVjYXRlZCwgdXNlIGBIQVZFX1NUUlVDVF9TVEFUX1NUX1JERVYnCisJCQkgICAgIGluc3RlYWQuXSldKQorXSwgW3lvdXIgY29kZSBzaG91bGQgbm8gbG9uZ2VyIGRlcGVuZCB1cG9uIGBIQVZFX1NUX1JERVYnLCBidXQKK2BIQVZFX1NUUlVDVF9TVEFUX1NUX1JERVYnLiAgUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQKK3RoZSBgQUNfREVGSU5FJyB3aGVuIHlvdSBhZGp1c3QgdGhlIGNvZGUuXSkjIEFDX1NUUlVDVF9TVF9SREVWCisKKworIyBBQ19TVFJVQ1RfVE0KKyMgLS0tLS0tLS0tLS0tCisjIEZJWE1FOiBUaGlzIG1hY3JvIGlzIGJhZGx5IG5hbWVkLCBpdCBzaG91bGQgYmUgQUNfQ0hFQ0tfVFlQRV9TVFJVQ1RfVE0uCisjIE9yIHNvbWV0aGluZyBlbHNlLCBidXQgd2hhdD8gQUNfQ0hFQ0tfVFlQRV9TVFJVQ1RfVE1fSU5fU1lTX1RJTUU/CitBQ19ERUZVTihbQUNfU1RSVUNUX1RNXSwKK1tBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBzdHJ1Y3QgdG0gaXMgaW4gc3lzL3RpbWUuaCBvciB0aW1lLmhdLAorICBhY19jdl9zdHJ1Y3RfdG0sCitbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KK10sCisJCQkJICAgIFtzdHJ1Y3QgdG0gdG07CisJCQkJICAgICBpbnQgKnAgPSAmdG0udG1fc2VjOworCQkJCSAgICAgcmV0dXJuICFwO10pXSwKKwkJICAgW2FjX2N2X3N0cnVjdF90bT10aW1lLmhdLAorCQkgICBbYWNfY3Zfc3RydWN0X3RtPXN5cy90aW1lLmhdKV0pCitpZiB0ZXN0ICRhY19jdl9zdHJ1Y3RfdG0gPSBzeXMvdGltZS5oOyB0aGVuCisgIEFDX0RFRklORShUTV9JTl9TWVNfVElNRSwgMSwKKwkgICAgW0RlZmluZSB0byAxIGlmIHlvdXIgPHN5cy90aW1lLmg+IGRlY2xhcmVzIGBzdHJ1Y3QgdG0nLl0pCitmaQorXSkjIEFDX1NUUlVDVF9UTQorCisKKyMgQUNfU1RSVUNUX1RJTUVaT05FCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaWd1cmUgb3V0IGhvdyB0byBnZXQgdGhlIGN1cnJlbnQgdGltZXpvbmUuICBJZiBgc3RydWN0IHRtJyBoYXMgYQorIyBgdG1fem9uZScgbWVtYmVyLCBkZWZpbmUgYEhBVkVfVE1fWk9ORScuICBPdGhlcndpc2UsIGlmIHRoZQorIyBleHRlcm5hbCBhcnJheSBgdHpuYW1lJyBpcyBmb3VuZCwgZGVmaW5lIGBIQVZFX1RaTkFNRScuCitBTl9JREVOVElGSUVSKFt0bV96b25lXSwgW0FDX1NUUlVDVF9USU1FWk9ORV0pCitBQ19ERUZVTihbQUNfU1RSVUNUX1RJTUVaT05FXSwKK1tBQ19SRVFVSVJFKFtBQ19TVFJVQ1RfVE1dKWRubAorQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IHRtLnRtX3pvbmVdLCwsWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDwkYWNfY3Zfc3RydWN0X3RtPgorXSkKK2lmIHRlc3QgIiRhY19jdl9tZW1iZXJfc3RydWN0X3RtX3RtX3pvbmUiID0geWVzOyB0aGVuCisgIEFDX0RFRklORShIQVZFX1RNX1pPTkUsIDEsCisJICAgIFtEZWZpbmUgdG8gMSBpZiB5b3VyIGBzdHJ1Y3QgdG0nIGhhcyBgdG1fem9uZScuIERlcHJlY2F0ZWQsIHVzZQorCSAgICAgYEhBVkVfU1RSVUNUX1RNX1RNX1pPTkUnIGluc3RlYWQuXSkKK2Vsc2UKKyAgQUNfQ0hFQ0tfREVDTFMoW3R6bmFtZV0sICwgLCBbI2luY2x1ZGUgPHRpbWUuaD5dKQorICBBQ19DQUNIRV9DSEVDSyhmb3IgdHpuYW1lLCBhY19jdl92YXJfdHpuYW1lLAorW0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oCitbWyNpbmNsdWRlIDx0aW1lLmg+CisjaWYgIUhBVkVfREVDTF9UWk5BTUUKK2V4dGVybiBjaGFyICp0em5hbWVbXTsKKyNlbmRpZgorXV0sCitbW3JldHVybiB0em5hbWVbMF1bMF07XV0pXSwKKwkJW2FjX2N2X3Zhcl90em5hbWU9eWVzXSwKKwkJW2FjX2N2X3Zhcl90em5hbWU9bm9dKV0pCisgIGlmIHRlc3QgJGFjX2N2X3Zhcl90em5hbWUgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9UWk5BTUUsIDEsCisJICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBkb24ndCBoYXZlIGB0bV96b25lJyBidXQgZG8gaGF2ZSB0aGUgZXh0ZXJuYWwKKwkgICAgICAgYXJyYXkgYHR6bmFtZScuXSkKKyAgZmkKK2ZpCitdKSMgQUNfU1RSVUNUX1RJTUVaT05FCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvY29uZi9hdXRvbTR0ZS5jZmcgYi9zaGFyZS9hdXRvY29uZi9hdXRvbTR0ZS5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhjMTgwMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9jb25mL2F1dG9tNHRlLmNmZwpAQCAtMCwwICsxLDE1NiBAQAorIyBEZWZpbml0aW9uIG9mIEF1dG9tNHRlIG9wdGlvbiBzZXRzLiAgICAgICAgICAgICAgICAgICAgIC0qLSBNYWtlZmlsZSAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5CisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEF1dG9oZWFkZXIgcHJlc2VsZWN0aW9ucy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitiZWdpbi1sYW5ndWFnZTogIkF1dG9oZWFkZXItcHJlc2VsZWN0aW9ucyIKK2FyZ3M6IC0tcHJlc2VsZWN0IEFDX0NPTkZJR19IRUFERVJTCithcmdzOiAtLXByZXNlbGVjdCBBSF9PVVRQVVQKK2FyZ3M6IC0tcHJlc2VsZWN0IEFDX0RFRklORV9UUkFDRV9MSVRFUkFMCitlbmQtbGFuZ3VhZ2U6ICJBdXRvaGVhZGVyLXByZXNlbGVjdGlvbnMiCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBBdXRvbWFrZS1wcmVzZWxlY3Rpb25zLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitiZWdpbi1sYW5ndWFnZTogIkF1dG9tYWtlLXByZXNlbGVjdGlvbnMiCithcmdzOiAtLXByZXNlbGVjdCBBQ19DQU5PTklDQUxfQlVJTEQKK2FyZ3M6IC0tcHJlc2VsZWN0IEFDX0NBTk9OSUNBTF9IT1NUCisjIEFDX0NBTk9OSUNBTF9TWVNURU0gd2FzIHRyYWNlZCBmcm9tIEF1dG9tYWtlIDEuNyB0byBBdXRvbWFrZSAxLjkuCisjIExhdGVyIHZlcnNpb25zIHRyYWNlIEFDX0NBTk9OSUNBTF9UQVJHRVQgaW5zdGVhZC4KK2FyZ3M6IC0tcHJlc2VsZWN0IEFDX0NBTk9OSUNBTF9TWVNURU0KK2FyZ3M6IC0tcHJlc2VsZWN0IEFDX0NBTk9OSUNBTF9UQVJHRVQKK2FyZ3M6IC0tcHJlc2VsZWN0IEFDX0NPTkZJR19BVVhfRElSCithcmdzOiAtLXByZXNlbGVjdCBBQ19DT05GSUdfRklMRVMKK2FyZ3M6IC0tcHJlc2VsZWN0IEFDX0NPTkZJR19IRUFERVJTCithcmdzOiAtLXByZXNlbGVjdCBBQ19DT05GSUdfTElCT0JKX0RJUgorYXJnczogLS1wcmVzZWxlY3QgQUNfQ09ORklHX0xJTktTCithcmdzOiAtLXByZXNlbGVjdCBBQ19GQ19GUkVFRk9STQorYXJnczogLS1wcmVzZWxlY3QgQUNfRkNfU1JDRVhUCithcmdzOiAtLXByZXNlbGVjdCBBQ19JTklUCithcmdzOiAtLXByZXNlbGVjdCBBQ19MSUJTT1VSQ0UKK2FyZ3M6IC0tcHJlc2VsZWN0IEFDX1JFUVVJUkVfQVVYX0ZJTEUKKyMgQXV0b21ha2UgPCAxLjEwIHRyYWNlcyBBQ19TVUJTVC4gIEF1dG9tYWtlID49IDEuMTAgdHJhY2VzIEFDX1NVQlNUX1RSQUNFLgorYXJnczogLS1wcmVzZWxlY3QgQUNfU1VCU1QKK2FyZ3M6IC0tcHJlc2VsZWN0IEFDX1NVQlNUX1RSQUNFCithcmdzOiAtLXByZXNlbGVjdCBBTV9BVVRPTUFLRV9WRVJTSU9OCithcmdzOiAtLXByZXNlbGVjdCBBTV9DT05ESVRJT05BTAorYXJnczogLS1wcmVzZWxlY3QgQU1fRU5BQkxFX01VTFRJTElCCithcmdzOiAtLXByZXNlbGVjdCBBTV9HTlVfR0VUVEVYVAorYXJnczogLS1wcmVzZWxlY3QgQU1fR05VX0dFVFRFWFRfSU5UTF9TVUJESVIKK2FyZ3M6IC0tcHJlc2VsZWN0IEFNX0lOSVRfQVVUT01BS0UKK2FyZ3M6IC0tcHJlc2VsZWN0IEFNX01BSU5UQUlORVJfTU9ERQorYXJnczogLS1wcmVzZWxlY3QgQU1fUFJPR19DQ19DX08KK2FyZ3M6IC0tcHJlc2VsZWN0IEFNX1BST0dfQ1hYX0NfTworYXJnczogLS1wcmVzZWxlY3QgQU1fUFJPR19GNzdfQ19PCithcmdzOiAtLXByZXNlbGVjdCBBTV9QUk9HX0ZDX0NfTworYXJnczogLS1wcmVzZWxlY3QgQU1fU0lMRU5UX1JVTEVTCithcmdzOiAtLXByZXNlbGVjdCBfQU1fU1VCU1RfTk9UTUFLRQorYXJnczogLS1wcmVzZWxlY3QgX0FNX0NPTkRfSUYKK2FyZ3M6IC0tcHJlc2VsZWN0IF9BTV9DT05EX0VMU0UKK2FyZ3M6IC0tcHJlc2VsZWN0IF9BTV9DT05EX0VORElGCithcmdzOiAtLXByZXNlbGVjdCBMVF9TVVBQT1JURURfVEFHCithcmdzOiAtLXByZXNlbGVjdCBfTFRfQUNfVEFHQ09ORklHCithcmdzOiAtLXByZXNlbGVjdCBtNF9pbmNsdWRlCithcmdzOiAtLXByZXNlbGVjdCBtNF9zaW5jbHVkZQorZW5kLWxhbmd1YWdlOiAiQXV0b21ha2UtcHJlc2VsZWN0aW9ucyIKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQXV0b3JlY29uZi1wcmVzZWxlY3Rpb25zLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK2JlZ2luLWxhbmd1YWdlOiAiQXV0b3JlY29uZi1wcmVzZWxlY3Rpb25zIgorYXJnczogLS1wcmVzZWxlY3QgQUNfQ09ORklHX0FVWF9ESVIKK2FyZ3M6IC0tcHJlc2VsZWN0IEFDX0NPTkZJR19IRUFERVJTCithcmdzOiAtLXByZXNlbGVjdCBBQ19DT05GSUdfU1VCRElSUworYXJnczogLS1wcmVzZWxlY3QgQUNfSU5JVAorYXJnczogLS1wcmVzZWxlY3QgQUNfUFJPR19MSUJUT09MCithcmdzOiAtLXByZXNlbGVjdCBMVF9JTklUCithcmdzOiAtLXByZXNlbGVjdCBMVF9DT05GSUdfTFRETF9ESVIKK2FyZ3M6IC0tcHJlc2VsZWN0IEFNX0dOVV9HRVRURVhUCitlbmQtbGFuZ3VhZ2U6ICJBdXRvcmVjb25mLXByZXNlbGVjdGlvbnMiCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEF1dG9jb25mIHdpdGhvdXQgYWNsb2NhbC5tNC4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIFRoaXMgaW50ZXJtZWRpYXRlIGxhbmd1YWdlIGlzIHVzZWQgYnkgYWNsb2NhbCB0byBidWlsZCBhY2xvY2FsLm00LgorCitiZWdpbi1sYW5ndWFnZTogIkF1dG9jb25mLXdpdGhvdXQtYWNsb2NhbC1tNCIKK2FyZ3M6IC0tcHJlcGVuZC1pbmNsdWRlICcvdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3Ivc2hhcmUvYXV0b2NvbmYnCithcmdzOiAtLWNhY2hlPWF1dG9tNHRlLmNhY2hlCithcmdzOiBhdXRvY29uZi9hdXRvY29uZi5tNGYKK2FyZ3M6IGFjc2l0ZS5tND8KK2FyZ3M6IC0tbW9kZSA3NzcKK2FyZ3M6IC0tbGFuZ3VhZ2UgTTRzaAorZW5kLWxhbmd1YWdlOiAiQXV0b2NvbmYtd2l0aG91dC1hY2xvY2FsLW00IgorCisKKyMjIC0tLS0tLS0tLS0gIyMKKyMjIEF1dG9jb25mLiAgIyMKKyMjIC0tLS0tLS0tLS0gIyMKKworYmVnaW4tbGFuZ3VhZ2U6ICJBdXRvY29uZiIKK2FyZ3M6IC0tbGFuZ3VhZ2UgQXV0b2hlYWRlci1wcmVzZWxlY3Rpb25zCithcmdzOiAtLWxhbmd1YWdlIEF1dG9tYWtlLXByZXNlbGVjdGlvbnMKK2FyZ3M6IC0tbGFuZ3VhZ2UgQXV0b3JlY29uZi1wcmVzZWxlY3Rpb25zCithcmdzOiAtLWxhbmd1YWdlIEF1dG9jb25mLXdpdGhvdXQtYWNsb2NhbC1tNAorYXJnczogYWNsb2NhbC5tND8KK2VuZC1sYW5ndWFnZTogIkF1dG9jb25mIgorCisKKyMjIC0tLS0tLS0tICMjCisjIyBBdXRvdGVzdCAjIworIyMgLS0tLS0tLS0gIyMKKworYmVnaW4tbGFuZ3VhZ2U6ICJBdXRvdGVzdCIKK2FyZ3M6IC0tcHJlcGVuZC1pbmNsdWRlICcvdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3Ivc2hhcmUvYXV0b2NvbmYnCithcmdzOiBhdXRvdGVzdC9hdXRvdGVzdC5tNGYKK2FyZ3M6IHBhY2thZ2UubTQ/CithcmdzOiBsb2NhbC5hdD8KK2FyZ3M6IC0tbW9kZSA3NzcKK2FyZ3M6IC0tbGFuZ3VhZ2UgTTRzaAorZW5kLWxhbmd1YWdlOiAiQXV0b3Rlc3QiCisKKworIyMgLS0tLSAjIworIyMgTTRzaCAjIworIyMgLS0tLSAjIworCitiZWdpbi1sYW5ndWFnZTogIk00c2giCithcmdzOiAtLXByZXBlbmQtaW5jbHVkZSAnL3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyL3NoYXJlL2F1dG9jb25mJworYXJnczogbTRzdWdhci9tNHNoLm00ZgorYXJnczogLS1tb2RlIDc3NworYXJnczogLS1sYW5ndWFnZSBNNHN1Z2FyCitlbmQtbGFuZ3VhZ2U6ICJNNHNoIgorCisKKyMjIC0tLS0tLS0gIyMKKyMjIE00c3VnYXIgIyMKKyMjIC0tLS0tLS0gIyMKKworYmVnaW4tbGFuZ3VhZ2U6ICJNNHN1Z2FyIgorYXJnczogLS1wcmVwZW5kLWluY2x1ZGUgJy91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9ob3N0L3Vzci9zaGFyZS9hdXRvY29uZicKK2FyZ3M6IG00c3VnYXIvbTRzdWdhci5tNGYKK2FyZ3M6IC0td2FybmluZ3Mgc3ludGF4CitlbmQtbGFuZ3VhZ2U6ICJNNHN1Z2FyIgpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b2NvbmYvYXV0b3NjYW4vYXV0b3NjYW4ubGlzdCBiL3NoYXJlL2F1dG9jb25mL2F1dG9zY2FuL2F1dG9zY2FuLmxpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ4ZTU1YQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9jb25mL2F1dG9zY2FuL2F1dG9zY2FuLmxpc3QKQEAgLTAsMCArMSwyNjggQEAKKyMgQXV0b21hdGljYWxseSBHZW5lcmF0ZWQ6IGRvIG5vdCBlZGl0IHRoaXMgZmlsZQorIyBhdXRvc2NhbidzIG1hcHBpbmcgdG8gQXV0b2NvbmYgbWFjcm9zICAgICAgLSotIE1ha2VmaWxlIC0qLQorIyBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTYsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDkKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorZnVuY3Rpb246IF9fYXJnel9jb3VudAkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBfX2FyZ3pfbmV4dAkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBfX2FyZ3pfc3RyaW5naWZ5CQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IF9fZnBlbmRpbmcJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogYWNsCQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IGFsYXJtCQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IGFsbG9jYQkJQUNfRlVOQ19BTExPQ0EKK2Z1bmN0aW9uOiBhdGV4aXQJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogYnRvd2MJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogYnplcm8JCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogY2hvd24JCUFDX0ZVTkNfQ0hPV04KK2Z1bmN0aW9uOiBjbG9ja19nZXR0aW1lCQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IGRjZ2V0dGV4dAkJQU1fR05VX0dFVFRFWFQKK2Z1bmN0aW9uOiBkb3BybnQJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogZHVwMgkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBlbmRncmVudAkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBlbmRwd2VudAkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBlcnJvcgkJQUNfRlVOQ19FUlJPUl9BVF9MSU5FCitmdW5jdGlvbjogZXJyb3JfYXRfbGluZQkJQUNfRlVOQ19FUlJPUl9BVF9MSU5FCitmdW5jdGlvbjogZXVpZGFjY2VzcwkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBmY2hkaXIJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogZmRhdGFzeW5jCQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IGZlc2V0cm91bmQJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogZmxvb3IJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogZm9yawkJQUNfRlVOQ19GT1JLCitmdW5jdGlvbjogZnNfc3RhdF9kZXYJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogZnNlZWtvCQlBQ19GVU5DX0ZTRUVLTworZnVuY3Rpb246IGZ0ZWxsbwkJQUNfRlVOQ19GU0VFS08KK2Z1bmN0aW9uOiBmdGltZQkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBmdHJ1bmNhdGUJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogZ2V0Y3dkCQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IGdldGRlbGltCQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IGdldGdyb3VwcwkJQUNfRlVOQ19HRVRHUk9VUFMKK2Z1bmN0aW9uOiBnZXRob3N0YnlhZGRyCQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IGdldGhvc3RieW5hbWUJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogZ2V0aG9zdG5hbWUJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogZ2V0aHJ0aW1lCQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IGdldG1udGVudAkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBnZXRtbnRlbnQJCUFDX0ZVTkNfR0VUTU5URU5UCitmdW5jdGlvbjogZ2V0bW50aW5mbwkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBnZXRwYWdlc2l6ZQkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBnZXRwYXNzCQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IGdldHNwbmFtCQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IGdldHRpbWVvZmRheQkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBnZXR1c2Vyc2hlbGwJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogZ2V0d2QJCXdhcm46IGdldHdkIGlzIGRlcHJlY2F0ZWQsIHVzZSBnZXRjd2QgaW5zdGVhZAorZnVuY3Rpb246IGhhc21udG9wdAkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBpbmV0X250b2EJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogaXNhc2NpaQkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBpc3dwcmludAkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBsY2hvd24JCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogbGlzdG1udGVudAkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBsb2NhbGVjb252CQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IGxvY2FsdGltZV9yCQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IGxzdGF0CQlBQ19GVU5DX0xTVEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LCitmdW5jdGlvbjogbWFqb3IJCUFDX0hFQURFUl9NQUpPUgorZnVuY3Rpb246IG1ha2VkZXYJCUFDX0hFQURFUl9NQUpPUgorZnVuY3Rpb246IG1hbGxvYwkJQUNfRlVOQ19NQUxMT0MKK2Z1bmN0aW9uOiBtYmxlbgkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBtYnJsZW4JCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogbWJydG93YwkJQUNfRlVOQ19NQlJUT1dDCitmdW5jdGlvbjogbWVtY2hyCQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IG1lbW1vdmUJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogbWVtcGNweQkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBtZW1zZXQJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogbWlub3IJCUFDX0hFQURFUl9NQUpPUgorZnVuY3Rpb246IG1rZGlyCQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IG1rZmlmbwkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBta3RpbWUJCUFDX0ZVTkNfTUtUSU1FCitmdW5jdGlvbjogbW1hcAkJQUNfRlVOQ19NTUFQCitmdW5jdGlvbjogbW9kZgkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBtdW5tYXAJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogbmV4dF9kZXYJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogbmxfbGFuZ2luZm8JCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogb2JzdGFja19pbml0CQlBQ19GVU5DX09CU1RBQ0sKK2Z1bmN0aW9uOiBwYXRoY29uZgkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBwb3cJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogcHN0YXRfZ2V0ZHluYW1pYwkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBwdXRlbnYJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogcmVfY29tcAkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiByZWFsbG9jCQlBQ19GVU5DX1JFQUxMT0MKK2Z1bmN0aW9uOiByZWFscGF0aAkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiByZWdjbXAJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogcmVnY29tcAkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiByZXNvbHZlcGF0aAkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiByaW50CQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IHJtZGlyCQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IHJwbWF0Y2gJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogc2VsZWN0CQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IHNldGVudgkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBzZXRob3N0bmFtZQkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBzZXRsb2NhbGUJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogc29ja2V0CQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IHNxcnQJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogc3RpbWUJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogc3RwY3B5CQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IHN0cmNhc2VjbXAJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogc3RyY2hyCQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IHN0cmNvbGwJCUFDX0ZVTkNfU1RSQ09MTAorZnVuY3Rpb246IHN0cmNzcG4JCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogc3RyZHVwCQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IHN0cmVycm9yCQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IHN0cmVycm9yX3IJCUFDX0ZVTkNfU1RSRVJST1JfUgorZnVuY3Rpb246IHN0cm5jYXNlY21wCQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IHN0cm5kdXAJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogc3RybmxlbgkJQUNfRlVOQ19TVFJOTEVOCitmdW5jdGlvbjogc3RycGJyawkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBzdHJyY2hyCQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IHN0cnNwbgkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBzdHJzdHIJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogc3RydG9kCQlBQ19GVU5DX1NUUlRPRAorZnVuY3Rpb246IHN0cnRvbAkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBzdHJ0b3VsCQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IHN0cnRvdWxsCQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IHN0cnRvdW1heAkJQUNfQ0hFQ0tfRlVOQ1MKK2Z1bmN0aW9uOiBzdHJ2ZXJzY21wCQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IHN5c2luZm8JCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogdHpzZXQJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogdW5hbWUJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogdXRpbWUJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogdXRtcG5hbWUJCUFDX0NIRUNLX0ZVTkNTCitmdW5jdGlvbjogdXRtcHhuYW1lCQlBQ19DSEVDS19GVU5DUworZnVuY3Rpb246IHZmb3JrCQlBQ19GVU5DX0ZPUksKK2Z1bmN0aW9uOiB3YWl0MwkJQUNfRlVOQ19XQUlUMworZnVuY3Rpb246IHdjd2lkdGgJCUFDX0NIRUNLX0ZVTkNTCitoZWFkZXI6IE9TLmgJCUFDX0NIRUNLX0hFQURFUlMKK2hlYWRlcjogWDExL1hsaWIuaAkJQUNfUEFUSF9YCitoZWFkZXI6IGFsbG9jYS5oCQlBQ19GVU5DX0FMTE9DQQoraGVhZGVyOiBhcmd6LmgJCUFDX0NIRUNLX0hFQURFUlMKK2hlYWRlcjogYXJwYS9pbmV0LmgJCUFDX0NIRUNLX0hFQURFUlMKK2hlYWRlcjogZmNudGwuaAkJQUNfQ0hFQ0tfSEVBREVSUworaGVhZGVyOiBmZW52LmgJCUFDX0NIRUNLX0hFQURFUlMKK2hlYWRlcjogZmxvYXQuaAkJQUNfQ0hFQ0tfSEVBREVSUworaGVhZGVyOiBmc19pbmZvLmgJCUFDX0NIRUNLX0hFQURFUlMKK2hlYWRlcjogaW50dHlwZXMuaAkJQUNfQ0hFQ0tfSEVBREVSUworaGVhZGVyOiBsYW5naW5mby5oCQlBQ19DSEVDS19IRUFERVJTCitoZWFkZXI6IGxpYmludGwuaAkJQUNfQ0hFQ0tfSEVBREVSUworaGVhZGVyOiBsaW1pdHMuaAkJQUNfQ0hFQ0tfSEVBREVSUworaGVhZGVyOiBsb2NhbGUuaAkJQUNfQ0hFQ0tfSEVBREVSUworaGVhZGVyOiBtYWNoL21hY2guaAkJQUNfQ0hFQ0tfSEVBREVSUworaGVhZGVyOiBtYWxsb2MuaAkJQUNfQ0hFQ0tfSEVBREVSUworaGVhZGVyOiBtZW1vcnkuaAkJQUNfQ0hFQ0tfSEVBREVSUworaGVhZGVyOiBtbnRlbnQuaAkJQUNfQ0hFQ0tfSEVBREVSUworaGVhZGVyOiBtbnR0YWIuaAkJQUNfQ0hFQ0tfSEVBREVSUworaGVhZGVyOiBuZXRkYi5oCQlBQ19DSEVDS19IRUFERVJTCitoZWFkZXI6IG5ldGluZXQvaW4uaAkJQUNfQ0hFQ0tfSEVBREVSUworaGVhZGVyOiBubF90eXBlcy5oCQlBQ19DSEVDS19IRUFERVJTCitoZWFkZXI6IG5saXN0LmgJCUFDX0NIRUNLX0hFQURFUlMKK2hlYWRlcjogcGF0aHMuaAkJQUNfQ0hFQ0tfSEVBREVSUworaGVhZGVyOiByZXNvbHYuaAkJQUNfSEVBREVSX1JFU09MVgoraGVhZGVyOiBzZ3R0eS5oCQlBQ19DSEVDS19IRUFERVJTCitoZWFkZXI6IHNoYWRvdy5oCQlBQ19DSEVDS19IRUFERVJTCitoZWFkZXI6IHN0ZGRlZi5oCQlBQ19DSEVDS19IRUFERVJTCitoZWFkZXI6IHN0ZGludC5oCQlBQ19DSEVDS19IRUFERVJTCitoZWFkZXI6IHN0ZGlvX2V4dC5oCQlBQ19DSEVDS19IRUFERVJTCitoZWFkZXI6IHN0ZGxpYi5oCQlBQ19DSEVDS19IRUFERVJTCitoZWFkZXI6IHN0cmluZy5oCQlBQ19DSEVDS19IRUFERVJTCitoZWFkZXI6IHN0cmluZ3MuaAkJQUNfQ0hFQ0tfSEVBREVSUworaGVhZGVyOiBzeXMvYWNsLmgJCUFDX0NIRUNLX0hFQURFUlMKK2hlYWRlcjogc3lzL2ZpbGUuaAkJQUNfQ0hFQ0tfSEVBREVSUworaGVhZGVyOiBzeXMvZmlsc3lzLmgJCUFDX0NIRUNLX0hFQURFUlMKK2hlYWRlcjogc3lzL2ZzL3M1cGFyYW0uaAkJQUNfQ0hFQ0tfSEVBREVSUworaGVhZGVyOiBzeXMvZnNfdHlwZXMuaAkJQUNfQ0hFQ0tfSEVBREVSUworaGVhZGVyOiBzeXMvZnN0eXAuaAkJQUNfQ0hFQ0tfSEVBREVSUworaGVhZGVyOiBzeXMvaW9jdGwuaAkJQUNfQ0hFQ0tfSEVBREVSUworaGVhZGVyOiBzeXMvbWtkZXYuaAkJQUNfSEVBREVSX01BSk9SCitoZWFkZXI6IHN5cy9tbnRlbnQuaAkJQUNfQ0hFQ0tfSEVBREVSUworaGVhZGVyOiBzeXMvbW91bnQuaAkJQUNfQ0hFQ0tfSEVBREVSUworaGVhZGVyOiBzeXMvcGFyYW0uaAkJQUNfQ0hFQ0tfSEVBREVSUworaGVhZGVyOiBzeXMvc29ja2V0LmgJCUFDX0NIRUNLX0hFQURFUlMKK2hlYWRlcjogc3lzL3N0YXRmcy5oCQlBQ19DSEVDS19IRUFERVJTCitoZWFkZXI6IHN5cy9zdGF0dmZzLmgJCUFDX0NIRUNLX0hFQURFUlMKK2hlYWRlcjogc3lzL3N5c3RlbWluZm8uaAkJQUNfQ0hFQ0tfSEVBREVSUworaGVhZGVyOiBzeXMvdGltZS5oCQlBQ19DSEVDS19IRUFERVJTCitoZWFkZXI6IHN5cy90aW1lYi5oCQlBQ19DSEVDS19IRUFERVJTCitoZWFkZXI6IHN5cy92ZnMuaAkJQUNfQ0hFQ0tfSEVBREVSUworaGVhZGVyOiBzeXMvd2luZG93LmgJCUFDX0NIRUNLX0hFQURFUlMKK2hlYWRlcjogc3lzbG9nLmgJCUFDX0NIRUNLX0hFQURFUlMKK2hlYWRlcjogdGVybWlvLmgJCUFDX0NIRUNLX0hFQURFUlMKK2hlYWRlcjogdGVybWlvcy5oCQlBQ19DSEVDS19IRUFERVJTCitoZWFkZXI6IHVuaXN0ZC5oCQlBQ19DSEVDS19IRUFERVJTCitoZWFkZXI6IHV0aW1lLmgJCUFDX0NIRUNLX0hFQURFUlMKK2hlYWRlcjogdXRtcC5oCQlBQ19DSEVDS19IRUFERVJTCitoZWFkZXI6IHV0bXB4LmgJCUFDX0NIRUNLX0hFQURFUlMKK2hlYWRlcjogdmFsdWVzLmgJCUFDX0NIRUNLX0hFQURFUlMKK2hlYWRlcjogd2NoYXIuaAkJQUNfQ0hFQ0tfSEVBREVSUworaGVhZGVyOiB3Y3R5cGUuaAkJQUNfQ0hFQ0tfSEVBREVSUworaWRlbnRpZmllcjogYm9vbAkJQUNfSEVBREVSX1NUREJPT0wKK2lkZW50aWZpZXI6IGZhbHNlCQlBQ19IRUFERVJfU1REQk9PTAoraWRlbnRpZmllcjogZ2lkX3QJCUFDX1RZUEVfVUlEX1QKK2lkZW50aWZpZXI6IGlubGluZQkJQUNfQ19JTkxJTkUKK2lkZW50aWZpZXI6IGludDE2X3QJCUFDX1RZUEVfSU5UMTZfVAoraWRlbnRpZmllcjogaW50MzJfdAkJQUNfVFlQRV9JTlQzMl9UCitpZGVudGlmaWVyOiBpbnQ2NF90CQlBQ19UWVBFX0lOVDY0X1QKK2lkZW50aWZpZXI6IGludDhfdAkJQUNfVFlQRV9JTlQ4X1QKK2lkZW50aWZpZXI6IG1vZGVfdAkJQUNfVFlQRV9NT0RFX1QKK2lkZW50aWZpZXI6IG9ic3RhY2sJCUFDX0ZVTkNfT0JTVEFDSworaWRlbnRpZmllcjogb2ZmX3QJCUFDX1RZUEVfT0ZGX1QKK2lkZW50aWZpZXI6IHBpZF90CQlBQ19UWVBFX1BJRF9UCitpZGVudGlmaWVyOiBwdHJkaWZmX3QJCUFDX0NIRUNLX1RZUEVTCitpZGVudGlmaWVyOiByZXN0cmljdAkJQUNfQ19SRVNUUklDVAoraWRlbnRpZmllcjogc2l6ZV90CQlBQ19UWVBFX1NJWkVfVAoraWRlbnRpZmllcjogc3NpemVfdAkJQUNfVFlQRV9TU0laRV9UCitpZGVudGlmaWVyOiBzdF9ibGtzaXplCQlBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3Qgc3RhdC5zdF9ibGtzaXplXSkKK2lkZW50aWZpZXI6IHN0X2Jsb2NrcwkJQUNfU1RSVUNUX1NUX0JMT0NLUworaWRlbnRpZmllcjogc3RfcmRldgkJQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IHN0YXQuc3RfcmRldl0pCitpZGVudGlmaWVyOiBzeXNfc2lnbGlzdAkJQUNfQ0hFQ0tfREVDTFMoW3N5c19zaWdsaXN0XSkKK2lkZW50aWZpZXI6IHRtX3pvbmUJCUFDX1NUUlVDVF9USU1FWk9ORQoraWRlbnRpZmllcjogdHJ1ZQkJQUNfSEVBREVSX1NUREJPT0wKK2lkZW50aWZpZXI6IHVpZF90CQlBQ19UWVBFX1VJRF9UCitpZGVudGlmaWVyOiB1aW50MTZfdAkJQUNfVFlQRV9VSU5UMTZfVAoraWRlbnRpZmllcjogdWludDMyX3QJCUFDX1RZUEVfVUlOVDMyX1QKK2lkZW50aWZpZXI6IHVpbnQ2NF90CQlBQ19UWVBFX1VJTlQ2NF9UCitpZGVudGlmaWVyOiB1aW50OF90CQlBQ19UWVBFX1VJTlQ4X1QKK21ha2V2YXI6IEFXSwkJQUNfUFJPR19BV0sKK21ha2V2YXI6IEJJU09OCQlBQ19QUk9HX1lBQ0MKK21ha2V2YXI6IENDCQlBQ19QUk9HX0NDCittYWtldmFyOiBDUFAJCUFDX1BST0dfQ1BQCittYWtldmFyOiBDWFgJCUFDX1BST0dfQ1hYCittYWtldmFyOiBJTlNUQUxMCQlBQ19QUk9HX0lOU1RBTEwKK21ha2V2YXI6IExFWAkJQUNfUFJPR19MRVgKK21ha2V2YXI6IExOCQlBQ19QUk9HX0xOX1MKK21ha2V2YXI6IE1BS0UJCUFDX1BST0dfTUFLRV9TRVQKK21ha2V2YXI6IE1LRElSX1AJCUFDX1BST0dfTUtESVJfUAorbWFrZXZhcjogT0JKQwkJQUNfUFJPR19PQkpDCittYWtldmFyOiBPQkpDWFgJCUFDX1BST0dfT0JKQ1hYCittYWtldmFyOiBSQU5MSUIJCUFDX1BST0dfUkFOTElCCittYWtldmFyOiBZQUNDCQlBQ19QUk9HX1lBQ0MKK21ha2V2YXI6IFlGTEFHUwkJQUNfUFJPR19ZQUNDCitwcm9ncmFtOiBDQwkJQUNfUFJPR19DWFgKK3Byb2dyYW06IGF3awkJQUNfUFJPR19BV0sKK3Byb2dyYW06IGJpc29uCQlBQ19QUk9HX1lBQ0MKK3Byb2dyYW06IGJ5YWNjCQlBQ19QUk9HX1lBQ0MKK3Byb2dyYW06IGMrKwkJQUNfUFJPR19DWFgKK3Byb2dyYW06IGNjCQlBQ19QUk9HX0NDCitwcm9ncmFtOiBjcHAJCUFDX1BST0dfQ1BQCitwcm9ncmFtOiBmbGV4CQlBQ19QUk9HX0xFWAorcHJvZ3JhbTogZysrCQlBQ19QUk9HX0NYWAorcHJvZ3JhbTogZ2F3awkJQUNfUFJPR19BV0sKK3Byb2dyYW06IGdjYwkJQUNfUFJPR19DQworcHJvZ3JhbTogaW5zdGFsbAkJQUNfUFJPR19JTlNUQUxMCitwcm9ncmFtOiBsZXgJCUFDX1BST0dfTEVYCitwcm9ncmFtOiBsbgkJQUNfUFJPR19MTl9TCitwcm9ncmFtOiBtYWtlCQlBQ19QUk9HX01BS0VfU0VUCitwcm9ncmFtOiBtYXdrCQlBQ19QUk9HX0FXSworcHJvZ3JhbTogbmF3awkJQUNfUFJPR19BV0sKK3Byb2dyYW06IG9iamMJCUFDX1BST0dfT0JKQworcHJvZ3JhbTogb2JqY2MJCUFDX1BST0dfT0JKQworcHJvZ3JhbTogb2JqY3h4CQlBQ19QUk9HX09CSkNYWAorcHJvZ3JhbTogcmFubGliCQlBQ19QUk9HX1JBTkxJQgorcHJvZ3JhbTogeWFjYwkJQUNfUFJPR19ZQUNDCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvY29uZi9hdXRvdGVzdC9hdXRvdGVzdC5tNCBiL3NoYXJlL2F1dG9jb25mL2F1dG90ZXN0L2F1dG90ZXN0Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmN2E4NjAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvY29uZi9hdXRvdGVzdC9hdXRvdGVzdC5tNApAQCAtMCwwICsxLDI2IEBACisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEF1dG9jb25mLgkJCS0qLSBBdXRvY29uZiAtKi0KKyMgTTQgbWFjcm9zIHVzZWQgaW4gYnVpbGRpbmcgdGVzdCBzdWl0ZXMuCisjIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlCisjIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorIyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorIyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uLAorIyB2ZXJzaW9uIDMuMCwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFuZCBhIGNvcHkgb2YgdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGVzIENPUFlJTkd2MyBhbmQgQ09QWUlORy5FWENFUFRJT04KKyMgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCittNF9pbmNsdWRlKFthdXRvdGVzdC9nZW5lcmFsLm00XSkKK200X2luY2x1ZGUoW2F1dG90ZXN0L3NwZWNpZmljLm00XSkKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9jb25mL2F1dG90ZXN0L2F1dG90ZXN0Lm00ZiBiL3NoYXJlL2F1dG9jb25mL2F1dG90ZXN0L2F1dG90ZXN0Lm00ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzBiNzQyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b2NvbmYvYXV0b3Rlc3QvYXV0b3Rlc3QubTRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9jb25mL2F1dG90ZXN0L2dlbmVyYWwubTQgYi9zaGFyZS9hdXRvY29uZi9hdXRvdGVzdC9nZW5lcmFsLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNDM4NzkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvY29uZi9hdXRvdGVzdC9nZW5lcmFsLm00CkBAIC0wLDAgKzEsMjE0MCBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4gICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMgTTQgbWFjcm9zIHVzZWQgaW4gYnVpbGRpbmcgdGVzdCBzdWl0ZXMuCittNF9kZWZpbmUoW19BVF9DT1BZUklHSFRfWUVBUlNdLCBbCitDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorXSkKKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlCisjIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorIyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorIyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uLAorIyB2ZXJzaW9uIDMuMCwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFuZCBhIGNvcHkgb2YgdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGVzIENPUFlJTkd2MyBhbmQgQ09QWUlORy5FWENFUFRJT04KKyMgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisKKyMgX200X2RpdmVydChESVZFUlNJT04tTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29udmVydCBhIGRpdmVyc2lvbiBuYW1lIGludG8gaXRzIG51bWJlci4gIE90aGVyd2lzZSwgcmV0dXJuCisjIERJVkVSU0lPTi1OQU1FIHdoaWNoIGlzIHN1cHBvc2VkIHRvIGJlIGFuIGFjdHVhbCBkaXZlcnNpb24gbnVtYmVyLgorIyBPZiBjb3Vyc2UgaXQgd291bGQgYmUgbmljZXIgdG8gdXNlIG00X2Nhc2UgaGVyZSwgaW5zdGVhZCBvZiB6aWxsaW9ucworIyBvZiBsaXR0bGUgbWFjcm9zLCBidXQgaXQgdGhlbiB0YWtlcyB0d2ljZSBsb25nZXIgdG8gcnVuIGBhdXRvY29uZichCisjCisjIEZyb20gTTRzdWdhcjoKKyMgICAgLTEuIEtJTEwKKyMgMTAwMDAuIEdST1cKKyMKKyMgRnJvbSBNNHNoOgorIyAgICAwLiBCSU5TSAorIyAgICAxLiBIRUFERVItUkVWSVNJT04KKyMgICAgMi4gSEVBREVSLUNPTU1FTlQKKyMgICAgMy4gSEVBREVSLUNPUFlSSUdIVAorIyAgICA0LiBNNFNILVNBTklUSVpFCisjICAgIDUuIE00U0gtSU5JVAorIyAxMDAwLiBCT0RZCisjCisjIERlZmluZWQgYmVsb3c6CisjICAtIERFRkFVTFRTCisjICAgIE92ZXJhbGwgaW5pdGlhbGl6YXRpb24sIHZhbHVlIG9mICRhdF9ncm91cHNfYWxsLgorIyAgLSBQQVJTRV9BUkdTX0JFR0lOCisjICAgIFNldHVwIGRlZmF1bHRzIHJlcXVpcmVkIGZvciBvcHRpb24gcHJvY2Vzc2luZy4KKyMgIC0gUEFSU0VfQVJHUworIyAgICBPcHRpb24gcHJvY2Vzc2luZy4gIEFmdGVyIEFUX0lOSVQsIHVzZXIgb3B0aW9ucyBjYW4gYmUgZW50ZXJlZCBoZXJlIGFzCisjICAgIGNhc2VzIG9mIGEgY2FzZSBzdGF0ZW1lbnQuCisjICAtIFBBUlNFX0FSR1NfRU5ECisjICAgIEZpbmlzaCB1cCB0aGUgb3B0aW9uIHByb2Nlc3NpbmcuCisjCisjICAtIEhFTFAKKyMgICAgU3RhcnQgcHJpbnRpbmcgdGhlIGhlbHAgbWVzc2FnZS4KKyMgIC0gSEVMUF9NT0RFUworIyAgICBNb2RlcyBoZWxwIHRleHQuICBBZGRpdGlvbmFsIG1vZGVzIGNhbiBiZSBhcHBlbmRlZCBhcyBzZWxmLWNvbnRhaW5lZAorIyAgICBjYXQnZCBoZXJlLWRvY3MgYXMgZ2VuZXJhdGVkIGJ5IEFTX0hFTFBfU1RSSU5HLgorIyAgLSBIRUxQX1RVTklORworIyAgICBUdW5pbmcgaGVscCB0ZXh0LiAgQWRkaXRpb25hbCB0dW5pbmcgb3B0aW9ucyBjYW4gYmUgYXBwZW5kZWQgYXMKKyMgICAgc2VsZi1jb250YWluZWQgY2F0J2QgaGVyZS1kb2NzIGFzIGdlbmVyYXRlZCBieSBBU19IRUxQX1NUUklORy4KKyMgIC0gSEVMUF9PVEhFUgorIyAgICBVc2VyIGhlbHAgY2FuIGJlIGFwcGVuZGVkIHRvIHRoaXMgYXMgc2VsZi1jb250YWluZWQgY2F0J2QgaGVyZS1kb2NzLgorIyAgLSBIRUxQX0VORAorIyAgICBGaW5pc2ggdXAgdGhlIGhlbHAgdGV4dHMuCisjCisjICAtIFZFUlNJT04KKyMgICAgSGVhZCBvZiB0aGUgaGFuZGxpbmcgb2YgLS12ZXJzaW9uLgorIyAgLSBWRVJTSU9OX05PVElDRVMKKyMgICAgQ29weXJpZ2h0IG5vdGljZXMgZm9yIC0tdmVyc2lvbi4KKyMgIC0gVkVSU0lPTl9FTkQKKyMgICAgVGFpbCBvZiB0aGUgaGFuZGxpbmcgb2YgLS12ZXJzaW9uLgorIworIyAgLSBCQU5ORVJTCisjICAgIE91dHB1dCBzaGVsbCBpbml0aWFsaXphdGlvbiBmb3IgdGhlIGFzc29jaWF0aXZlIGFycmF5IG9mIGJhbm5lciB0ZXh0LgorIyAgLSBURVNUU19CRUdJTgorIyAgICBMaWtlIERFRkFVTFRTIGJ1dCBydW4gYWZ0ZXIgYXJndW1lbnQgcHJvY2Vzc2luZyBmb3IgcHVycG9zZXMgb2YKKyMgICAgb3B0aW1pemF0aW9uLiAgRG8gYW55dGhpbmcgZWxzZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgdG8gcHJlcGFyZSBmb3IKKyMgICAgdGVzdHMuICBTZXRzIHVwIHZlcmJvc2UgYW5kIGxvZyBmaWxlIGRlc2NyaXB0b3JzLiAgU2V0cyBhbmQgbG9ncyBQQVRILgorIyAgLSBQUkVQQVJFX1RFU1RTCisjICAgIERlY2xhcmVzIGZ1bmN0aW9ucyBzaGFyZWQgYW1vbmcgdGhlIHRlc3RzLiAgUGVyZm9ybSBhbnkgdXNlcgorIyAgICBpbml0aWFsaXphdGlvbiB0byBiZSBzaGFyZWQgYW1vbmcgYWxsIHRlc3RzLgorIyAgLSBURVNUUworIyAgICBUaGUgY29yZSBvZiB0aGUgdGVzdCBzdWl0ZS4KKyMKKyMgIC0gVEVTVF9TQ1JJUFQKKyMgICAgVGhlIGNvbGxlY3RvciBmb3IgY29kZSBmb3IgZWFjaCB0ZXN0LCB0aGUgYGBub3JtYWwnJyBkaXZlcnNpb24sIGJ1dAorIyAgICB1bmRpdmVydGVkIGludG8gb3RoZXIgbG9jYXRpb25zIGJlZm9yZSBmaW5hbCBvdXRwdXQuCisjCisjICAtIFRFU1RfR1JPVVBTCisjICAgIENvbnRlbnRzIG9mIGVhY2ggdGVzdCBncm91cC4gIFRoZSB0ZXN0cyBkZWxpYmVyYXRlbHkgb2NjdXIgYWZ0ZXIgdGhlCisjICAgIGVuZCBvZiB0aGUgc2hlbGwgc2NyaXB0LCBzbyB0aGF0IHRoZSBzaGVsbCBuZWVkIG5vdCBzcGVuZCB0aW1lIHBhcnNpbmcKKyMgICAgY29tbWFuZHMgaXQgd2lsbCBub3QgZXhlY3V0ZS4KKworbTRfZGVmaW5lKFtfbTRfZGl2ZXJ0KERFRkFVTFRTKV0sICAgICAgICAgICAxMDApCittNF9kZWZpbmUoW19tNF9kaXZlcnQoUEFSU0VfQVJHU19CRUdJTildLCAgIDIwMCkKK200X2RlZmluZShbX200X2RpdmVydChQQVJTRV9BUkdTKV0sICAgICAgICAgMjAxKQorbTRfZGVmaW5lKFtfbTRfZGl2ZXJ0KFBBUlNFX0FSR1NfRU5EKV0sICAgICAyMDIpCittNF9kZWZpbmUoW19tNF9kaXZlcnQoSEVMUCldLCAgICAgICAgICAgICAgIDMwMCkKK200X2RlZmluZShbX200X2RpdmVydChIRUxQX01PREVTKV0sICAgICAgICAgMzAxKQorbTRfZGVmaW5lKFtfbTRfZGl2ZXJ0KEhFTFBfVFVOSU5HKV0sICAgICAgICAzMDIpCittNF9kZWZpbmUoW19tNF9kaXZlcnQoSEVMUF9PVEhFUildLCAgICAgICAgIDMwMykKK200X2RlZmluZShbX200X2RpdmVydChIRUxQX0VORCldLCAgICAgICAgICAgMzA0KQorbTRfZGVmaW5lKFtfbTRfZGl2ZXJ0KFZFUlNJT04pXSwgICAgICAgICAgICAzNTApCittNF9kZWZpbmUoW19tNF9kaXZlcnQoVkVSU0lPTl9OT1RJQ0VTKV0sICAgIDM1MSkKK200X2RlZmluZShbX200X2RpdmVydChWRVJTSU9OX0VORCldLCAgICAgICAgMzUyKQorbTRfZGVmaW5lKFtfbTRfZGl2ZXJ0KEJBTk5FUlMpXSwgICAgICAgICAgICA0MDApCittNF9kZWZpbmUoW19tNF9kaXZlcnQoVEVTVFNfQkVHSU4pXSwgICAgICAgIDQwMSkKK200X2RlZmluZShbX200X2RpdmVydChQUkVQQVJFX1RFU1RTKV0sICAgICAgNDAyKQorbTRfZGVmaW5lKFtfbTRfZGl2ZXJ0KFRFU1RTKV0sICAgICAgICAgICAgICA0MDMpCittNF9kZWZpbmUoW19tNF9kaXZlcnQoVEVTVF9TQ1JJUFQpXSwgICAgICAgIDQ1MCkKK200X2RlZmluZShbX200X2RpdmVydChURVNUX0dST1VQUyldLCAgICAgICAgNTAwKQorCisKKyMgQVRfTElORQorIyAtLS0tLS0tCisjIFJldHVybiB0aGUgY3VycmVudCBmaWxlIHNhbnMgZGlyZWN0b3J5LCBhIGNvbG9uLCBhbmQgdGhlIGN1cnJlbnQKKyMgbGluZS4gIEJlIHN1cmUgdG8gcmV0dXJuIGEgX3F1b3RlZF8gZmlsZSBuYW1lLCBzbyBpZiwgZm9yIGluc3RhbmNlLAorIyB0aGUgdXNlciBpcyBsdW5hdGljIGVub3VnaCB0byBoYXZlIGEgZmlsZSBuYW1lZCBgZG5sJyAoYW5kIEksIGZvcgorIyBvbmUsIGxvdmUgdG8gYmUgYnJhaW5sZXNzIGFuZCBzdHViYm9ybiBzb21ldGltZXMpLCB0aGVuIHdlIHJldHVybiBhCisjIHF1b3RlZCBuYW1lLgorIworIyBHZWUsIHdlIGNhbid0IHVzZSBzaW1wbHkKKyMKKyMgIG00X2JwYXRzdWJzdChfX2ZpbGVfXywgW14uKi9cKC4qXCldLCBbW1wxXV0pCisjCisjIHNpbmNlIHRoZW4sIHNpbmNlIGBkbmwnIGRvZXNuJ3QgbWF0Y2ggdGhlIHBhdHRlcm4sIGl0IGlzIHJldHVybmVkCisjIHdpdGggb25jZSBxdW90YXRpb24gbGV2ZWwgbGVzcywgc28geW91IGxvc2UhICBBbmQgc2luY2UgR05VIE00CisjIGlzIG9uZSBvZiB0aGUgYmlnZ2VzdCBqdW5rIGluIHRoZSB3aG9sZSB1bml2ZXJzZSB3cnQgcmVnZXhwLCBkb24ndAorIyBldmVuIHRoaW5rIGFib3V0IHVzaW5nIGA/JyBvciBgXD8nLiAgQmFoLCBgKicgd2lsbCBkby4KKyMgUGxlZWVlZWVlZWFzZSwgR2FyeSwgcHJvdmlkZSB1cyB3aXRoIGRpcm5hbWUgYW5kIEVSRSEKKyMKKyMgTTQgcmVjb21waWxlcyB0aGUgcmVndWxhciBleHByZXNzaW9uIGZvciBldmVyeSBtNF9icGF0c3Vic3QsIGJ1dCBfX2ZpbGVfXworIyByYXJlbHkgY2hhbmdlcy4gIEJlIGZhc3QgLSBvbmx5IGNvbXB1dGUgdGhlIGRpcm5hbWUgd2hlbiBuZWNlc3Nhcnk7IGZvcgorIyBhdXRvY29uZiBhbG9uZSwgdGhpcyBzaGF2ZXMgb2ZmIHNldmVyYWwgc2Vjb25kcyBpbiBidWlsZGluZyB0ZXN0c3VpdGUuCittNF9kZWZpbmUoW19BVF9MSU5FX2ZpbGVdKQorbTRfZGVmaW5lKFtfQVRfTElORV9iYXNlXSkKK200X2RlZmluZShbQVRfTElORV0sCitbbTRfaWYobTRfZGVmbihbX0FUX0xJTkVfZmlsZV0pLCBfX2ZpbGVfXywgW10sCisgICAgICAgW200X2RvKFttNF9kZWZpbmUoW19BVF9MSU5FX2ZpbGVdLCBfX2ZpbGVfXyldLAorCSAgICAgIFttNF9kZWZpbmUoW19BVF9MSU5FX2Jhc2VdLAorCQkJIG00X2JyZWdleHAoL19fZmlsZV9fLCBbL1woW14vXSpcKSRdLCBbW1wxXV0pKV0pXSlkbmwKK200X2RlZm4oW19BVF9MSU5FX2Jhc2VdKTpfX2xpbmVfX10pCisKKyMgX0FUX0xJTkVfRVNDQVBFRAorIyAtLS0tLS0tLS0tLS0tLS0tCisjIFNhbWUgYXMgQVRfTElORSwgYnV0IGFscmVhZHkgZXNjYXBlZCBmb3IgdGhlIHNoZWxsLgorbTRfZGVmaW5lKFtfQVRfTElORV9FU0NBUEVEXSwgWyJBU19FU0NBUEUobTRfZHF1b3RlKEFUX0xJTkUpKSJdKQorCisKKyMgX0FUX05PUk1BTElaRV9URVNUX0dST1VQX05VTUJFUihTSEVMTC1WQVIpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBOb3JtYWxpemUgU0hFTEwtVkFSIHNvIHRoYXQgaXRzIHZhbHVlIGhhcyB0aGUgc2FtZSBudW1iZXIgb2YgZGlnaXRzIGFzCisjIGFsbCB0aGUgb3RoZXIgdGVzdCBncm91cCBudW1iZXJzLgorbTRfZGVmaW5lKFtfQVRfTk9STUFMSVpFX1RFU1RfR1JPVVBfTlVNQkVSXSwKK1sKKyAgZXZhbCAnd2hpbGUgOjsgZG8KKyAgICBjYXNlICQkMSBpbiAjKAorICAgICciJGF0X2Zvcm1hdCInKikgYnJlYWs7OworICAgIGVzYWMKKyAgICAkMT0wJCQxCisgIGRvbmUnCitdKQorCisjIF9BVF9ERUZJTkVfSU5JVChOQU1FLCBbREVGSU5JVElPTl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBtYWNybyBOQU1FIHRvIGRpZSBpZiBpbnZva2VkIHByaW9yIHRvIEFUX0lOSVQsIGFuZCB0byBERUZJTklUSU9OCisjIGFmdGVyIEFUX0lOSVQuCittNF9kZWZpbmUoW19BVF9ERUZJTkVfSU5JVF0sCitbbTRfZGVmaW5lKCRAKW00X3B1c2hkZWYoWyQxXSwgW200X2ZhdGFsKFskMTogbWlzc2luZyBBVF9JTklUIGRldGVjdGVkXSldKWRubAorbTRfYXBwZW5kKFtfQVRfREVGSU5FX0lOSVRfTElTVF0sIFtbJDFdXSwgWyxdKV0pCisKKyMgX0FUX0RFRklORV9TRVRVUChOQU1FLCBbREVGSU5JVElPTl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBtYWNybyBOQU1FIHRvIGRpZSBpZiBpbnZva2VkIG91dHNpZGUgQVRfU0VUVVAvQVRfQ0xFQU5VUCwgYW5kCisjIHRvIERFRklOSVRJT04gb3RoZXJ3aXNlLgorbTRfZGVmaW5lKFtfQVRfREVGSU5FX1NFVFVQXSwKK1ttNF9kZWZpbmUoWyQxXSwgW200X2lmbmRlZihbQVRfaW5ncm91cF0sCisgW200X2ZhdGFsKFskMTogbWlzc2luZyBBVF9TRVRVUCBkZXRlY3RlZF0pXSkkMl0pXSkKKworCisjIEFUX0lOSVQoW1RFU1RTVUlURS1OQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBCZWdpbiB0ZXN0IHN1aXRlLgorbTRfZGVmaW5lKFtBVF9JTklUXSwKK1ttNF9wdXNoZGVmKFtBVF9JTklUXSwgW200X2ZhdGFsKFskMDogaW52b2tlZCBtdWx0aXBsZSB0aW1lc10pXSldCitbbTRfcGF0dGVybl9mb3JiaWQoW15fP0FUX10pXQorW200X3BhdHRlcm5fYWxsb3coW15fQVRFT0YkXSldCitbbTRfaWZuZGVmKFtBVF9QQUNLQUdFX0JVR1JFUE9SVF0sIFttNF9mYXRhbCgKKyAgWyQxOiBBVF9QQUNLQUdFX0JVR1JFUE9SVCBpcyBtaXNzaW5nLCBjb25zaWRlciB3cml0aW5nIHBhY2thZ2UubTRdKV0pXQorW200X2RlZmluZShbQVRfVEVTVFNVSVRFX05BTUVdLAorICBtNF9kZWZuKFtBVF9QQUNLQUdFX1NUUklOR10pWyB0ZXN0IHN1aXRlXW00X2lmdmFsKFskMV0sCisgICBbbTRfZXhwYW5kKFs6ICQxXSldKSldCitbbTRfZGVmaW5lKFtBVF9vcmRpbmFsXSwgMCldCitbbTRfZGVmaW5lKFtBVF9iYW5uZXJfb3JkaW5hbF0sIDApXQorW200X2RlZmluZShbQVRfZ3JvdXBzX2FsbF0sIFtdKV0KK1ttNF9kZWZpbmUoW0FUX2hlbHBfYWxsXSwgW10pXQorW200X21hcF9hcmdzKFtfbTRfcG9wZGVmXSwgX0FUX0RFRklORV9JTklUX0xJU1QpXQorW200X3dyYXAoW19BVF9GSU5JU0hdKV0KK1tBU19JTklUW11dZG5sCitkbmwgV2UgZG9uJ3QgdXNlIG00c2gncyBCT0RZIGRpdmVyc2lvbiwgYnV0IEFTX0lOSVQgc3RpY2tzIGEgYmFubmVyIHRoZXJlLgorZG5sIFRoaXMgdHJpY2sgcmVtb3ZlcyB0aGF0IGJhbm5lciwgc2luY2UgaXQgYWRkcyBub3RoaW5nIHRvIGF1dG90ZXN0LgorW200X2NsZWFyZGl2ZXJ0KFtCT0RZXSldZG5sCitbQVNfTUVfUFJFUEFSRVtdXWRubAorW200X2RpdmVydF9wdXNoKFtERUZBVUxUU10pXWRubAorW0FUX0NPUFlSSUdIVChtNF9kZWZuKFtfQVRfQ09QWVJJR0hUX1lFQVJTXSksIFsKK200X2NvcHlyaWdodF9jb25kZW5zZV0pXQorW0FUX0NPUFlSSUdIVCgKK1tUaGlzIHRlc3Qgc3VpdGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcwordW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0Ll0sIFttNF9lY2hvXSldCitbQVNfUFJFUEFSRQorCitTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorCisjIEhvdyB3ZXJlIHdlIHJ1bj8KK2F0X2NsaV9hcmdzPSIkW0BdIgorCittNF9kaXZlcnRfcHVzaChbQkFOTkVSU10pZG5sCisKKyMgU2hvdWxkIHdlIHByaW50IGJhbm5lcnM/ICBhdF9ncm91cHMgaXMgc3BhY2Utc2VwYXJhdGVkIGZvciBlbnRpcmUgdGVzdCwKKyMgbmV3bGluZS1zZXBhcmF0ZWQgaWYgb25seSBhIHN1YnNldCBvZiB0aGUgdGVzdHN1aXRlIGlzIHJ1bi4KK2Nhc2UgJGF0X2dyb3VwcyBpbgorICAqJyAnKicgJyogfCAqIiRhc19ubCIqIiRhc19ubCIqICkKKyAgICAgIGF0X3ByaW50X2Jhbm5lcnM9OiA7OworICAqICkgYXRfcHJpbnRfYmFubmVycz1mYWxzZSA7OworZXNhYworIyBUZXh0IGZvciBiYW5uZXIgTiwgc2V0IHRvIGVtcHR5IG9uY2UgcHJpbnRlZC4KK200X2RpdmVydF9wb3AoW0JBTk5FUlNdKWRubCBiYWNrIHRvIERFRkFVTFRTCittNF9kaXZlcnRfcHVzaChbUFJFUEFSRV9URVNUU10pZG5sCisKK200X3RleHRfYm94KFtBdXRvdGVzdCBzaGVsbCBmdW5jdGlvbnMuXSkKKworQVNfRlVOQ1RJT05fREVTQ1JJQkUoW2F0X2ZuX2Jhbm5lcl0sIFtOVU1CRVJdLAorW091dHB1dCBiYW5uZXIgTlVNQkVSLCBwcm92aWRlZCB0aGUgdGVzdHN1aXRlIGlzIHJ1bm5pbmcgbXVsdGlwbGUgZ3JvdXBzCithbmQgdGhpcyBwYXJ0aWN1bGFyIGJhbm5lciBoYXMgbm90IHlldCBiZWVuIHByaW50ZWQuXSkKK2F0X2ZuX2Jhbm5lciAoKQoreworICAkYXRfcHJpbnRfYmFubmVycyB8fCByZXR1cm4gMAorICBldmFsIGF0X2Jhbm5lcl90ZXh0PVwkYXRfYmFubmVyX3RleHRfJFsxXQorICB0ZXN0ICJ4JGF0X2Jhbm5lcl90ZXh0IiA9IHggJiYgcmV0dXJuIDAKKyAgZXZhbCBhdF9iYW5uZXJfdGV4dF8kWzFdPQorICBBU19FQ0hPKFsiJGFzX25sJGF0X2Jhbm5lcl90ZXh0JGFzX25sIl0pCit9ICMgYXRfZm5fYmFubmVyCisKK0FTX0ZVTkNUSU9OX0RFU0NSSUJFKFthdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2VdLCBbUkVBU09OIExJTkVdLAorW1BlcmZvcm0gQVRfQ0hFQ0sgcHJlcGFyYXRpb25zIGZvciB0aGUgY29tbWFuZCBhdCBMSU5FIGZvciBhbgordW50cmFjZWFibGUgY29tbWFuZDsgUkVBU09OIGlzIHRoZSByZWFzb24gZm9yIGRpc2FibGluZyB0cmFjaW5nLl0pCithdF9mbl9jaGVja19wcmVwYXJlX25vdHJhY2UgKCkKK3sKKyAgJGF0X3RyYWNlX2VjaG8gIk5vdCBlbmFibGluZyBzaGVsbCB0cmFjaW5nIChjb21tYW5kIGNvbnRhaW5zICRbMV0pIgorICBBU19FQ0hPKFsiJFsyXSJdKSA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisgIGF0X2NoZWNrX3RyYWNlPTogYXRfY2hlY2tfZmlsdGVyPToKKyAgOiA+IiRhdF9zdGRvdXQiOyA6ID4iJGF0X3N0ZGVyciIKK30KKworQVNfRlVOQ1RJT05fREVTQ1JJQkUoW2F0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2VdLCBbTElORV0sCitbUGVyZm9ybSBBVF9DSEVDSyBwcmVwYXJhdGlvbnMgZm9yIHRoZSBjb21tYW5kIGF0IExJTkUgZm9yIGEgdHJhY2VhYmxlCitjb21tYW5kLl0pCithdF9mbl9jaGVja19wcmVwYXJlX3RyYWNlICgpCit7CisgIEFTX0VDSE8oWyIkWzFdIl0pID4iJGF0X2NoZWNrX2xpbmVfZmlsZSIKKyAgYXRfY2hlY2tfdHJhY2U9JGF0X3RyYWNlb24gYXRfY2hlY2tfZmlsdGVyPSRhdF9jaGVja19maWx0ZXJfdHJhY2UKKyAgOiA+IiRhdF9zdGRvdXQiOyA6ID4iJGF0X3N0ZGVyciIKK30KKworQVNfRlVOQ1RJT05fREVTQ1JJQkUoW2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pY10sIFtDT01NQU5EIExJTkVdLAorW0RlY2lkZSBpZiBDT01NQU5EIGF0IExJTkUgaXMgdHJhY2VhYmxlIGF0IHJ1bnRpbWUsIGFuZCBjYWxsIHRoZQorYXBwcm9wcmlhdGUgcHJlcGFyYXRpb24gZnVuY3Rpb24uXSkKK2F0X2ZuX2NoZWNrX3ByZXBhcmVfZHluYW1pYyAoKQoreworICBjYXNlICRbMV0gaW4KKyAgICAqJGFzX25sKikKKyAgICAgIGF0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnYW4gZW1iZWRkZWQgbmV3bGluZScgIiRbMl0iIDs7CisgICAgKikKKyAgICAgIGF0X2ZuX2NoZWNrX3ByZXBhcmVfdHJhY2UgIiRbMl0iIDs7CisgIGVzYWMKK30KKworQVNfRlVOQ1RJT05fREVTQ1JJQkUoW2F0X2ZuX2ZpbHRlcl90cmFjZV0sIFtdLAorW1JlbW92ZSB0aGUgbGluZXMgaW4gdGhlIGZpbGUgIiRhdF9zdGRlcnIiIGdlbmVyYXRlZCBieSAic2V0IC14IiBhbmQgcHJpbnQKK3RoZW0gdG8gc3RkZXJyLl0pCithdF9mbl9maWx0ZXJfdHJhY2UgKCkKK3sKKyAgbXYgIiRhdF9zdGRlcnIiICIkYXRfc3RkZXIxIgorICBncmVwICdeICorJyAiJGF0X3N0ZGVyMSIgPiYyCisgIGdyZXAgLXYgJ14gKisnICIkYXRfc3RkZXIxIiA+IiRhdF9zdGRlcnIiCit9CisKK0FTX0ZVTkNUSU9OX0RFU0NSSUJFKFthdF9mbl9sb2dfZmFpbHVyZV0sIFtGSUxFLUxJU1RdLAorW0NvcHkgdGhlIGZpbGVzIGluIHRoZSBsaXN0IG9uIHN0ZG91dCB3aXRoIGEgIj4gIiBwcmVmaXgsIGFuZCBleGl0IHRoZSBzaGVsbAord2l0aCBhIGZhaWx1cmUgZXhpdCBjb2RlLl0pCithdF9mbl9sb2dfZmFpbHVyZSAoKQoreworICBmb3IgZmlsZQorICAgIGRvIEFTX0VDSE8oWyIkZmlsZToiXSk7IHNlZCAncy9eLz4gLycgIiRmaWxlIjsgZG9uZQorICBlY2hvIDEgPiAiJGF0X3N0YXR1c19maWxlIgorICBleGl0IDEKK30KKworQVNfRlVOQ1RJT05fREVTQ1JJQkUoW2F0X2ZuX2NoZWNrX3NraXBdLCBbRVhJVC1DT0RFIExJTkVdLAorW0NoZWNrIHdoZXRoZXIgRVhJVC1DT0RFIGlzIGEgc3BlY2lhbCBleGl0IGNvZGUgKDc3IG9yIDk5KSwgYW5kIGlmIHNvIGV4aXQKK3RoZSB0ZXN0IGdyb3VwIHN1YnNoZWxsIHdpdGggdGhhdCBzYW1lIGV4aXQgY29kZS4gIFVzZSBMSU5FIGluIGFueSByZXBvcnQKK2Fib3V0IHRlc3QgZmFpbHVyZS5dKQorYXRfZm5fY2hlY2tfc2tpcCAoKQoreworICBjYXNlICRbMV0gaW4KKyAgICA5OSkgZWNobyA5OSA+ICIkYXRfc3RhdHVzX2ZpbGUiOyBhdF9mYWlsZWQ9OgorCUFTX0VDSE8oWyIkWzJdOiBoYXJkIGZhaWx1cmUiXSk7IGV4aXQgOTk7OworICAgIDc3KSBlY2hvIDc3ID4gIiRhdF9zdGF0dXNfZmlsZSI7IGV4aXQgNzc7OworICBlc2FjCit9CisKK0FTX0ZVTkNUSU9OX0RFU0NSSUJFKFthdF9mbl9jaGVja19zdGF0dXNdLCBbRVhQRUNURUQgRVhJVC1DT0RFIExJTkVdLAorW0NoZWNrIHdoZXRoZXIgRVhJVC1DT0RFIGlzIHRoZSBFWFBFQ1RFRCBleGl0IGNvZGUsIGFuZCBpZiBzbyBkbyBub3RoaW5nLgorT3RoZXJ3aXNlLCBpZiBpdCBpcyA3NyBvciA5OSwgZXhpdCB0aGUgdGVzdCBncm91cCBzdWJzaGVsbCB3aXRoIHRoYXQgc2FtZQorZXhpdCBjb2RlOyBpZiBpdCBpcyBhbnl0aGluZyBlbHNlIHByaW50IGFuIGVycm9yIG1lc3NhZ2UgcmVmZXJyaW5nIHRvIExJTkUsCithbmQgZmFpbCB0aGUgdGVzdC5dKQorYXRfZm5fY2hlY2tfc3RhdHVzICgpCit7CitkbmwgVGhpcyBvcmRlciBlbnN1cmVzIHRoYXQgd2UgZG9uJ3QgYHNraXAnIGlmIHdlIGFyZSBwcmVjaXNlbHkgY2hlY2tpbmcKK2RubCAkPyA9IDc3IG9yICQ/ID0gOTkuCisgIGNhc2UgJFsyXSBpbgorICAgICRbMV0gKSA7OworICAgIDc3KSBlY2hvIDc3ID4gIiRhdF9zdGF0dXNfZmlsZSI7IGV4aXQgNzc7OworICAgIDk5KSBlY2hvIDk5ID4gIiRhdF9zdGF0dXNfZmlsZSI7IGF0X2ZhaWxlZD06CisJQVNfRUNITyhbIiRbM106IGhhcmQgZmFpbHVyZSJdKTsgZXhpdCA5OTs7CisgICAgKikgQVNfRUNITyhbIiRbM106IGV4aXQgY29kZSB3YXMgJFsyXSwgZXhwZWN0ZWQgJFsxXSJdKQorICAgICAgYXRfZmFpbGVkPTo7OworICBlc2FjCit9CisKK0FTX0ZVTkNUSU9OX0RFU0NSSUJFKFthdF9mbl9kaWZmX2Rldm51bGxdLCBbRklMRV0sCitbRW1pdCBhIGRpZmYgYmV0d2VlbiAvZGV2L251bGwgYW5kIEZJTEUuICBVc2VzICJ0ZXN0IC1zIiB0byBhdm9pZCB1c2VsZXNzCitkaWZmIGludm9jYXRpb25zLl0pCithdF9mbl9kaWZmX2Rldm51bGwgKCkKK3sKKyAgdGVzdCAtcyAiJFsxXSIgfHwgcmV0dXJuIDAKKyAgJGF0X2RpZmYgIiRhdF9kZXZudWxsIiAiJFsxXSIKK30KKworQVNfRlVOQ1RJT05fREVTQ1JJQkUoW2F0X2ZuX3Rlc3RdLCBbTlVNQkVSXSwKK1tQYXJzZSBvdXQgdGVzdCBOVU1CRVIgZnJvbSB0aGUgdGFpbCBvZiB0aGlzIGZpbGUuXSkKK2F0X2ZuX3Rlc3QgKCkKK3sKKyAgZXZhbCBhdF9zZWQ9XCRhdF9zZWQkWzFdCisgIHNlZCAiJGF0X3NlZCIgIiRhdF9teXNlbGYiID4gIiRhdF90ZXN0X3NvdXJjZSIKK30KKworQVNfRlVOQ1RJT05fREVTQ1JJQkUoW2F0X2ZuX2NyZWF0ZV9kZWJ1Z2dpbmdfc2NyaXB0XSwgW10sCitbQ3JlYXRlIHRoZSBkZWJ1Z2dpbmcgc2NyaXB0ICRhdF9ncm91cF9kaXIvcnVuIHdoaWNoIHdpbGwgcmVwcm9kdWNlIHRoZQorY3VycmVudCB0ZXN0IGdyb3VwLl0pCithdF9mbl9jcmVhdGVfZGVidWdnaW5nX3NjcmlwdCAoKQoreworICB7CisgICAgZWNobyAiIyEgL2Jpbi9zaCIgJiYKKyAgICBlY2hvICd0ZXN0ICIke1pTSF9WRVJTSU9OK3NldH0iID0gc2V0IGRubAorJiYgYWxpYXMgLWcgJ1wnJyR7MSsiJFtAXSJ9J1wnJz0nXCcnIiRbQF0iJ1wnJycgJiYKKyAgICBBU19FQ0hPKFsiY2QgJyRhdF9kaXInIl0pICYmCisgICAgQVNfRUNITyhbImV4ZWMgXCR7Q09ORklHX1NIRUxMLSRTSEVMTH0gXCIkYXRfbXlzZWxmXCIgLXYgLWQgXWRubAorWyRhdF9kZWJ1Z19hcmdzICRhdF9ncm91cCBcJHsxK1wiXCRbQF1cIn0iXSkgJiYKKyAgICBlY2hvICdleGl0IDEnCisgIH0gPiIkYXRfZ3JvdXBfZGlyL3J1biIgJiYKKyAgY2htb2QgK3ggIiRhdF9ncm91cF9kaXIvcnVuIgorfQorCittNF90ZXh0X2JveChbRW5kIG9mIGF1dG90ZXN0IHNoZWxsIGZ1bmN0aW9ucy5dKQorbTRfZGl2ZXJ0X3BvcChbUFJFUEFSRV9URVNUU10pZG5sIGJhY2sgdG8gREVGQVVMVFMKKworIyBOb3QgYWxsIHNoZWxscyBoYXZlIHRoZSAndGltZXMnIGJ1aWx0aW47IHRoZSBzdWJzaGVsbCBpcyBuZWVkZWQgdG8gbWFrZQorIyBzdXJlIHdlIGRpc2NhcmQgdGhlICd0aW1lczogbm90IGZvdW5kJyBtZXNzYWdlIGZyb20gdGhlIHNoZWxsLgorYXRfdGltZXNfcD1mYWxzZQorKHRpbWVzKSA+L2Rldi9udWxsIDI+JjEgJiYgYXRfdGltZXNfcD06CisKKyMgQ0xJIEFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBkZWJ1Z2dpbmcgc2NyaXB0cy4KK2F0X2RlYnVnX2FyZ3M9CisjIC1lIHNldHMgdG8gdHJ1ZQorYXRfZXJyZXhpdF9wPWZhbHNlCisjIFNoYWxsIHdlIGJlIHZlcmJvc2U/ICAnOicgbWVhbnMgbm8sIGVtcHR5IG1lYW5zIHllcy4KK2F0X3ZlcmJvc2U9OgorYXRfcXVpZXQ9CisjIFJ1bm5pbmcgc2V2ZXJhbCBqb2JzIGluIHBhcmFsbGVsLCAwIG1lYW5zIGFzIG1hbnkgYXMgdGVzdCBncm91cHMuCithdF9qb2JzPTEKK2F0X3RyYWNlb249OgorYXRfdHJhY2VfZWNobz06CithdF9jaGVja19maWx0ZXJfdHJhY2U9OgorCisjIFNoYWxsIHdlIGtlZXAgdGhlIGRlYnVnIHNjcmlwdHM/ICBNdXN0IGJlIGA6JyB3aGVuIHRoZSBzdWl0ZSBpcworIyBydW4gYnkgYSBkZWJ1ZyBzY3JpcHQsIHNvIHRoYXQgdGhlIHNjcmlwdCBkb2Vzbid0IHJlbW92ZSBpdHNlbGYuCithdF9kZWJ1Z19wPWZhbHNlCisjIERpc3BsYXkgaGVscCBtZXNzYWdlPworYXRfaGVscF9wPWZhbHNlCisjIERpc3BsYXkgdGhlIHZlcnNpb24gbWVzc2FnZT8KK2F0X3ZlcnNpb25fcD1mYWxzZQorIyBMaXN0IHRlc3QgZ3JvdXBzPworYXRfbGlzdF9wPWZhbHNlCisjIC0tY2xlYW4KK2F0X2NsZWFuPWZhbHNlCisjIFRlc3QgZ3JvdXBzIHRvIHJ1bgorYXRfZ3JvdXBzPQorIyBXaGV0aGVyIGEgd3JpdGUgZmFpbHVyZSBvY2N1cnJlZAorYXRfd3JpdGVfZmFpbD0wCisKKyMgVGhlIGRpcmVjdG9yeSB3ZSBydW4gdGhlIHN1aXRlIGluLiAgRGVmYXVsdCB0byAuIGlmIG5vIC1DIG9wdGlvbi4KK2F0X2Rpcj1gcHdkYAorIyBBbiBhYnNvbHV0ZSByZWZlcmVuY2UgdG8gdGhpcyB0ZXN0c3VpdGUgc2NyaXB0LgorZG5sIG00LWRvdWJsZSBxdW90ZSwgdG8gcHJlc2VydmUgW10KK1tjYXNlICRhc19teXNlbGYgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhdF9teXNlbGY9JGFzX215c2VsZiA7OworICAqICkgYXRfbXlzZWxmPSRhdF9kaXIvJGFzX215c2VsZiA7OworZXNhY10KKyMgV2hldGhlciAtQyBpcyBpbiBlZmZlY3QuCithdF9jaGFuZ2VfZGlyPWZhbHNlCittNF9kaXZlcnRfcG9wKFtERUZBVUxUU10pZG5sCittNF9kZWZpbmUoW19BVF9GSU5JU0hdLAorW200X2lmZGVmKFtBVF9pbmdyb3VwXSwgW200X2ZhdGFsKFttaXNzaW5nIEFUX0NMRUFOVVAgZGV0ZWN0ZWRdKV0pZG5sCittNF9kaXZlcnRfdGV4dChbREVGQVVMVFNdLAorWworIyBMaXN0IG9mIHRoZSB0ZXN0ZWQgcHJvZ3JhbXMuCithdF90ZXN0ZWQ9J200X2lmZGVmKFtBVF90ZXN0ZWRdLAorICBbbTRfdHJhbnNsaXQobTRfZHF1b3RlKG00X2RlZm4oW0FUX3Rlc3RlZF0pKSwgWyBdLCBtNF9uZXdsaW5lKV0pJworIyBMaXN0IG9mIHRoZSBhbGwgdGhlIHRlc3QgZ3JvdXBzLgorYXRfZ3JvdXBzX2FsbD0nQVRfZ3JvdXBzX2FsbCcKKyMgQXMgbWFueSBxdWVzdGlvbiBtYXJrcyBhcyB0aGVyZSBhcmUgZGlnaXRzIGluIHRoZSBsYXN0IHRlc3QgZ3JvdXAgbnVtYmVyLgorIyBVc2VkIHRvIG5vcm1hbGl6ZSB0aGUgdGVzdCBncm91cCBudW1iZXJzIHNvIHRoYXQgYGxzJyBsaXN0cyB0aGVtIGluCisjIG51bWVyaWNhbCBvcmRlci4KK2F0X2Zvcm1hdD0nbTRfYnBhdHN1YnN0KG00X2RlZm4oW0FUX29yZGluYWxdKSwgWy5dLCBbP10pJworIyBEZXNjcmlwdGlvbiBvZiBhbGwgdGhlIHRlc3QgZ3JvdXBzLgorYXRfaGVscF9hbGw9IkFTX0VTQ0FQRShtNF9kcXVvdGUobTRfZGVmbihbQVRfaGVscF9hbGxdKSkpIgorCitBU19GVU5DVElPTl9ERVNDUklCRShbYXRfZm5fdmFsaWRhdGVfcmFuZ2VzXSwgW05BTUUuLi5dLAorW1ZhbGlkYXRlIGFuZCBub3JtYWxpemUgdGhlIHRlc3QgZ3JvdXAgbnVtYmVyIGNvbnRhaW5lZCBpbiBlYWNoCit2YXJpYWJsZSBOQU1FLiAgTGVhZGluZyB6ZXJvZXMgYXJlIHRyZWF0ZWQgYXMgZGVjaW1hbC5dKQorYXRfZm5fdmFsaWRhdGVfcmFuZ2VzICgpCit7CisgIGZvciBhdF9ncnAKKyAgZG8KKyAgICBldmFsIGF0X3ZhbHVlPVwkJGF0X2dycAorICAgIGlmIHRlc3QgJGF0X3ZhbHVlIC1sdCAxIHx8IHRlc3QgJGF0X3ZhbHVlIC1ndCBBVF9vcmRpbmFsOyB0aGVuCisgICAgICBBU19FQ0hPKFsiaW52YWxpZCB0ZXN0IGdyb3VwOiAkYXRfdmFsdWUiXSkgPiYyCisgICAgICBleGl0IDEKKyAgICBmaQorICAgIGNhc2UgJGF0X3ZhbHVlIGluCisgICAgICAwKikgIyBXZSB3YW50IHRvIHRyZWF0IGxlYWRpbmcgMCBhcyBkZWNpbWFsLCBsaWtlIGV4cHIgYW5kIHRlc3QsIGJ1dAorCSAgIyBBU19WQVJfQVJJVEggdHJlYXRzIGl0IGFzIG9jdGFsIGlmIGl0IHVzZXMgJCgoICkpLgorCSAgIyBXaXRoIFhTSSBzaGVsbHMsICR7YXRfdmFsdWUjJHthdF92YWx1ZSUlWzEtOV0qfX0gYXZvaWRzIHRoZQorCSAgIyBleHByIGZvcmssIGJ1dCBpdCBpcyBub3Qgd29ydGggdGhlIGVmZm9ydCB0byBkZXRlcm1pbmUgaWYgdGhlCisJICAjIHNoZWxsIHN1cHBvcnRzIFhTSSB3aGVuIHRoZSB1c2VyIGNhbiBqdXN0IGF2b2lkIGxlYWRpbmcgMC4KKwkgIGV2YWwgJGF0X2dycD0nYGV4cHIgJGF0X3ZhbHVlICsgMGAnIDs7CisgICAgZXNhYworICBkb25lCit9XSldKWRubAorbTRfZGl2ZXJ0X3B1c2goW1BBUlNFX0FSR1NdKWRubAorCithdF9wcmV2PQorZm9yIGF0X29wdGlvbgorZG8KKyAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCisgIGlmIHRlc3QgLW4gIiRhdF9wcmV2IjsgdGhlbgorICAgIGF0X29wdGlvbj0kYXRfcHJldj0kYXRfb3B0aW9uCisgICAgYXRfcHJldj0KKyAgZmkKKworICBjYXNlICRhdF9vcHRpb24gaW4KKyAgKj0qKSBhdF9vcHRhcmc9YGV4cHIgIngkYXRfb3B0aW9uIiA6ICd4W1tePV1dKj1cKC4qXCknYCA7OworICAqKSAgIGF0X29wdGFyZz0gOzsKKyAgZXNhYworCisgICMgQWNjZXB0IHRoZSBpbXBvcnRhbnQgQ3lnbnVzIGNvbmZpZ3VyZSBvcHRpb25zLCBzbyB3ZSBjYW4gZGlhZ25vc2UgdHlwb3MuCisKKyAgY2FzZSAkYXRfb3B0aW9uIGluCisgICAgLS1oZWxwIHwgLWggKQorCWF0X2hlbHBfcD06CisJOzsKKworICAgIC0tbGlzdCB8IC1sICkKKwlhdF9saXN0X3A9OgorCTs7CisKKyAgICAtLXZlcnNpb24gfCAtViApCisJYXRfdmVyc2lvbl9wPToKKwk7OworCisgICAgLS1jbGVhbiB8IC1jICkKKwlhdF9jbGVhbj06CisJOzsKKworICAgIC0tZGVidWcgfCAtZCApCisJYXRfZGVidWdfcD06CisJOzsKKworICAgIC0tZXJyZXhpdCB8IC1lICkKKwlhdF9kZWJ1Z19wPToKKwlhdF9lcnJleGl0X3A9OgorCTs7CisKKyAgICAtLXZlcmJvc2UgfCAtdiApCisJYXRfdmVyYm9zZT07IGF0X3F1aWV0PToKKwk7OworCisgICAgLS10cmFjZSB8IC14ICkKKwlhdF90cmFjZW9uPSdzZXQgLXgnCisJYXRfdHJhY2VfZWNobz1lY2hvCisJYXRfY2hlY2tfZmlsdGVyX3RyYWNlPWF0X2ZuX2ZpbHRlcl90cmFjZQorCTs7CisKKyAgICBbWzAtOV0gfCBbMC05XVswLTldIHwgWzAtOV1bMC05XVswLTldIHwgWzAtOV1bMC05XVswLTldWzAtOV1dKQorCWF0X2ZuX3ZhbGlkYXRlX3JhbmdlcyBhdF9vcHRpb24KKwlBU19WQVJfQVBQRU5EKFthdF9ncm91cHNdLCBbIiRhdF9vcHRpb24gIl0pCisJOzsKKworICAgICMgUmFuZ2VzCisgICAgW1swLTldLSB8IFswLTldWzAtOV0tIHwgWzAtOV1bMC05XVswLTldLSB8IFswLTldWzAtOV1bMC05XVswLTldLV0pCisJYXRfcmFuZ2Vfc3RhcnQ9YGVjaG8gJGF0X29wdGlvbiB8dHIgLWQgWC1gCisJYXRfZm5fdmFsaWRhdGVfcmFuZ2VzIGF0X3JhbmdlX3N0YXJ0CisJYXRfcmFuZ2U9YEFTX0VDSE8oWyIgJGF0X2dyb3Vwc19hbGwgIl0pIHwgXAorCSAgc2VkIC1lICdzL14uKiBcKCckYXRfcmFuZ2Vfc3RhcnQnIFwpL1wxLydgCisJQVNfVkFSX0FQUEVORChbYXRfZ3JvdXBzXSwgWyIkYXRfcmFuZ2UgIl0pCisJOzsKKworICAgIFstWzAtOV0gfCAtWzAtOV1bMC05XSB8IC1bMC05XVswLTldWzAtOV0gfCAtWzAtOV1bMC05XVswLTldWzAtOV1dKQorCWF0X3JhbmdlX2VuZD1gZWNobyAkYXRfb3B0aW9uIHx0ciAtZCBYLWAKKwlhdF9mbl92YWxpZGF0ZV9yYW5nZXMgYXRfcmFuZ2VfZW5kCisJYXRfcmFuZ2U9YEFTX0VDSE8oWyIgJGF0X2dyb3Vwc19hbGwgIl0pIHwgXAorCSAgc2VkIC1lICdzL1woICckYXRfcmFuZ2VfZW5kJ1wpIC4qJC9cMS8nYAorCUFTX1ZBUl9BUFBFTkQoW2F0X2dyb3Vwc10sIFsiJGF0X3JhbmdlICJdKQorCTs7CisKKyAgICBbWzAtOV0tWzAtOV0gfCBbMC05XS1bMC05XVswLTldIHwgWzAtOV0tWzAtOV1bMC05XVswLTldXSB8IFwKKyAgICBbWzAtOV0tWzAtOV1bMC05XVswLTldWzAtOV0gfCBbMC05XVswLTldLVswLTldWzAtOV1dIHwgXAorICAgIFtbMC05XVswLTldLVswLTldWzAtOV1bMC05XSB8IFswLTldWzAtOV0tWzAtOV1bMC05XVswLTldWzAtOV1dIHwgXAorICAgIFtbMC05XVswLTldWzAtOV0tWzAtOV1bMC05XVswLTldXSB8IFwKKyAgICBbWzAtOV1bMC05XVswLTldLVswLTldWzAtOV1bMC05XVswLTldXSB8IFwKKyAgICBbWzAtOV1bMC05XVswLTldWzAtOV0tWzAtOV1bMC05XVswLTldWzAtOV1dICkKKwlhdF9yYW5nZV9zdGFydD1gZXhwciAkYXRfb3B0aW9uIDogJ1woLipcKS0nYAorCWF0X3JhbmdlX2VuZD1gZXhwciAkYXRfb3B0aW9uIDogJy4qLVwoLipcKSdgCisJaWYgdGVzdCAkYXRfcmFuZ2Vfc3RhcnQgLWd0ICRhdF9yYW5nZV9lbmQ7IHRoZW4KKwkgIGF0X3RtcD0kYXRfcmFuZ2VfZW5kCisJICBhdF9yYW5nZV9lbmQ9JGF0X3JhbmdlX3N0YXJ0CisJICBhdF9yYW5nZV9zdGFydD0kYXRfdG1wCisJZmkKKwlhdF9mbl92YWxpZGF0ZV9yYW5nZXMgYXRfcmFuZ2Vfc3RhcnQgYXRfcmFuZ2VfZW5kCisJYXRfcmFuZ2U9YEFTX0VDSE8oWyIgJGF0X2dyb3Vwc19hbGwgIl0pIHwgXAorCSAgc2VkIC1lICdzL14uKlwoICckYXRfcmFuZ2Vfc3RhcnQnIFwpL1wxLycgXAorCSAgICAgIC1lICdzL1woICckYXRfcmFuZ2VfZW5kJ1wpIC4qJC9cMS8nYAorCUFTX1ZBUl9BUFBFTkQoW2F0X2dyb3Vwc10sIFsiJGF0X3JhbmdlICJdKQorCTs7CisKKyAgICAjIERpcmVjdG9yeSBzZWxlY3Rpb24uCisgICAgLS1kaXJlY3RvcnkgfCAtQyApCisJYXRfcHJldj0tLWRpcmVjdG9yeQorCTs7CisgICAgLS1kaXJlY3Rvcnk9KiApCisJYXRfY2hhbmdlX2Rpcj06CisJYXRfZGlyPSRhdF9vcHRhcmcKKwk7OworCisgICAgIyBQYXJhbGxlbCBleGVjdXRpb24uCisgICAgLS1qb2JzIHwgLWogKQorCWF0X2pvYnM9MAorCTs7CisgICAgLS1qb2JzPSogfCAtaltbMC05XV0qICkKKwlpZiB0ZXN0IC1uICIkYXRfb3B0YXJnIjsgdGhlbgorCSAgYXRfam9icz0kYXRfb3B0YXJnCisJZWxzZQorCSAgYXRfam9icz1gZXhwciBYJGF0X29wdGlvbiA6ICdYLWpcKC4qXCknYAorCWZpCisJY2FzZSAkYXRfam9icyBpbiAqW1shMC05XV0qKQorCSAgYXRfb3B0bmFtZT1gZWNobyAiICRhdF9vcHRpb24iIHwgc2VkICdzL14gLy87IHMvW1swLTk9XV0uKi8vJ2AKKwkgIEFTX0VSUk9SKFtub24tbnVtZXJpYyBhcmd1bWVudCB0byAkYXRfb3B0bmFtZTogJGF0X2pvYnNdKSA7OworCWVzYWMKKwk7OworCisgICAgIyBLZXl3b3Jkcy4KKyAgICAtLWtleXdvcmRzIHwgLWsgKQorCWF0X3ByZXY9LS1rZXl3b3JkcworCTs7CisgICAgLS1rZXl3b3Jkcz0qICkKKwlhdF9ncm91cHNfc2VsZWN0ZWQ9JGF0X2hlbHBfYWxsCisJYXRfc2F2ZV9JRlM9JElGUworCUlGUz0sCisJc2V0IFggJGF0X29wdGFyZworCXNoaWZ0CisJSUZTPSRhdF9zYXZlX0lGUworCWZvciBhdF9rZXl3b3JkCisJZG8KKwkgIGF0X2ludmVydD0KKwkgIGNhc2UgJGF0X2tleXdvcmQgaW4KKwkgICchJyopCisJICAgIGF0X2ludmVydD0iLXYiCisJICAgIGF0X2tleXdvcmQ9YGV4cHIgIlgkYXRfa2V5d29yZCIgOiAnWCFcKC4qXCknYAorCSAgICA7OworCSAgZXNhYworCSAgIyBJdCBpcyBvbiBwdXJwb3NlIHRoYXQgd2UgbWF0Y2ggdGhlIHRlc3QgZ3JvdXAgdGl0bGVzIHRvby4KKwkgIGF0X2dyb3Vwc19zZWxlY3RlZD1gQVNfRUNITyhbIiRhdF9ncm91cHNfc2VsZWN0ZWQiXSkgfAorCSAgICAgIGdyZXAgLWkgJGF0X2ludmVydCBbIl5bMS05XVteO10qOy4qWzsgXSRhdF9rZXl3b3JkWyA7XSJdYAorCWRvbmUKKwkjIFNtYXNoIHRoZSBuZXdsaW5lcy4KKwlhdF9ncm91cHNfc2VsZWN0ZWQ9YEFTX0VDSE8oWyIkYXRfZ3JvdXBzX3NlbGVjdGVkIl0pIHwgc2VkICdzLzsuKi8vJyB8CisJICB0ciAiJGFzX25sIiAnICcKKwlgCisJQVNfVkFSX0FQUEVORChbYXRfZ3JvdXBzXSwgWyIkYXRfZ3JvdXBzX3NlbGVjdGVkICJdKQorCTs7CittNF9kaXZlcnRfcG9wKFtQQVJTRV9BUkdTXSlkbmwKK2RubCBQcm9jZXNzICo9KiBsYXN0IHRvIGFsbG93IGZvciB1c2VyIHNwZWNpZmllZCAtLW9wdGlvbj0qIHR5cGUgYXJndW1lbnRzLgorbTRfZGl2ZXJ0X3B1c2goW1BBUlNFX0FSR1NfRU5EXSlkbmwKKworICAgICo9KikKKwlhdF9lbnZ2YXI9YGV4cHIgIngkYXRfb3B0aW9uIiA6ICd4XChbW149XV0qXCk9J2AKKwkjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisJY2FzZSAkYXRfZW52dmFyIGluCisJICAnJyB8IFtbMC05XV0qIHwgKltbIV8kYXNfY3JfYWxudW1dXSogKQorCSAgICBBU19FUlJPUihbaW52YWxpZCB2YXJpYWJsZSBuYW1lOiBgJGF0X2VudnZhciddKSA7OworCWVzYWMKKwlhdF92YWx1ZT1gQVNfRUNITyhbIiRhdF9vcHRhcmciXSkgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAKKwkjIEV4cG9ydCBub3csIGJ1dCBzYXZlIGV2YWwgZm9yIGxhdGVyIGFuZCBmb3IgZGVidWcgc2NyaXB0cy4KKwlleHBvcnQgJGF0X2VudnZhcgorCUFTX1ZBUl9BUFBFTkQoW2F0X2RlYnVnX2FyZ3NdLCBbIiAkYXRfZW52dmFyPSckYXRfdmFsdWUnIl0pCisJOzsKKworICAgICAqKSBBU19FQ0hPKFsiJGFzX21lOiBpbnZhbGlkIG9wdGlvbjogJGF0X29wdGlvbiJdKSA+JjIKKwlBU19FQ0hPKFsiVHJ5IFxgJFswXSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiJdKSA+JjIKKwlleGl0IDEKKwk7OworICBlc2FjCitkb25lCisKKyMgVmVyaWZ5IG91ciBsYXN0IG9wdGlvbiBkaWRuJ3QgcmVxdWlyZSBhbiBhcmd1bWVudAorQVNfSUYoW3Rlc3QgLW4gIiRhdF9wcmV2Il0sIFtBU19FUlJPUihbYCRhdF9wcmV2JyByZXF1aXJlcyBhbiBhcmd1bWVudC5dKV0pCisKKyMgU2VsZWN0ZWQgdGVzdCBncm91cHMuCitpZiB0ZXN0IC16ICIkYXRfZ3JvdXBzIjsgdGhlbgorICBhdF9ncm91cHM9JGF0X2dyb3Vwc19hbGwKK2Vsc2UKKyAgIyBTb3J0IHRoZSB0ZXN0cywgcmVtb3ZpbmcgZHVwbGljYXRlcy4KKyAgYXRfZ3JvdXBzPWBBU19FQ0hPKFsiJGF0X2dyb3VwcyJdKSB8IHRyICcgJyAiJGFzX25sIiB8IHNvcnQgLW51YAorZmkKK200X2RpdmVydF9wb3AoW1BBUlNFX0FSR1NfRU5EXSlkbmwKK200X2RpdmVydF9wdXNoKFtIRUxQXSlkbmwKKworIyBIZWxwIG1lc3NhZ2UuCitpZiAkYXRfaGVscF9wOyB0aGVuCisgIGNhdCA8PF9BVEVPRiB8fCBhdF93cml0ZV9mYWlsPTEKK1VzYWdlOiAkWzBdIFtbT1BUSU9OXS4uLiBbVkFSSUFCTEU9VkFMVUVdLi4uIFtURVNUU11dCisKK1J1biBhbGwgdGhlIHRlc3RzLCBvciB0aGUgc2VsZWN0ZWQgVEVTVFMsIGdpdmVuIGJ5IG51bWVyaWMgcmFuZ2VzLCBhbmQKK3NhdmUgYSBkZXRhaWxlZCBsb2cgZmlsZS4gIFVwb24gZmFpbHVyZSwgY3JlYXRlIGRlYnVnZ2luZyBzY3JpcHRzLgorCitEbyBub3QgY2hhbmdlIGVudmlyb25tZW50IHZhcmlhYmxlcyBkaXJlY3RseS4gIEluc3RlYWQsIHNldCB0aGVtIHZpYQorY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4gIFNldCBcYEFVVE9URVNUX1BBVEgnIHRvIHNlbGVjdCB0aGUgZXhlY3V0YWJsZXMKK3RvIGV4ZXJjaXNlLiAgRWFjaCByZWxhdGl2ZSBkaXJlY3RvcnkgaXMgZXhwYW5kZWQgYXMgYnVpbGQgYW5kIHNvdXJjZQorZGlyZWN0b3JpZXMgcmVsYXRpdmUgdG8gdGhlIHRvcCBsZXZlbCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4KK0UuZy4sIGZyb20gd2l0aGluIHRoZSBidWlsZCBkaXJlY3RvcnkgL3RtcC9mb28tMS4wLCBpbnZva2luZyB0aGlzOgorCisgICQgJFswXSBBVVRPVEVTVF9QQVRIPWJpbgorCitpcyBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmcsIGFzc3VtaW5nIHRoZSBzb3VyY2UgZGlyZWN0b3J5IGlzIC9zcmMvZm9vLTEuMDoKKworICBQQVRIPS90bXAvZm9vLTEuMC9iaW46L3NyYy9mb28tMS4wL2JpbjpcJFBBVEggJFswXQorX0FURU9GCittNF9kaXZlcnRfcG9wKFtIRUxQXSlkbmwKK200X2RpdmVydF9wdXNoKFtIRUxQX01PREVTXSlkbmwKK2NhdCA8PF9BVEVPRiB8fCBhdF93cml0ZV9mYWlsPTEKKworT3BlcmF0aW9uIG1vZGVzOgorICAtaCwgLS1oZWxwICAgICBwcmludCB0aGUgaGVscCBtZXNzYWdlLCB0aGVuIGV4aXQKKyAgLVYsIC0tdmVyc2lvbiAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorICAtYywgLS1jbGVhbiAgICByZW1vdmUgYWxsIHRoZSBmaWxlcyB0aGlzIHRlc3Qgc3VpdGUgbWlnaHQgY3JlYXRlIGFuZCBleGl0CisgIC1sLCAtLWxpc3QgICAgIGRlc2NyaWJlcyBhbGwgdGhlIHRlc3RzLCBvciB0aGUgc2VsZWN0ZWQgVEVTVFMKK19BVEVPRgorbTRfZGl2ZXJ0X3BvcChbSEVMUF9NT0RFU10pZG5sCittNF9kaXZlcnRfcHVzaChbSEVMUF9UVU5JTkddKWRubAorY2F0IDw8X0FURU9GIHx8IGF0X3dyaXRlX2ZhaWw9MQorCitkbmwgZXh0cmEgcXVvdGluZyBwcmV2ZW50cyBlbWFjcyB3aGl0ZXNwYWNlIG1vZGUgZnJvbSBwdXR0aW5nIHRhYnMgaW4gb3V0cHV0CitFeGVjdXRpb24gdHVuaW5nOgorICAtQywgLS1kaXJlY3Rvcnk9RElSCitbICAgICAgICAgICAgICAgICBjaGFuZ2UgdG8gZGlyZWN0b3J5IERJUiBiZWZvcmUgc3RhcnRpbmddCisgIC1qLCAtLWpvYnNbWz1OXV0KK1sgICAgICAgICAgICAgICAgIEFsbG93IE4gam9icyBhdCBvbmNlOyBpbmZpbml0ZSBqb2JzIHdpdGggbm8gYXJnIChkZWZhdWx0IDEpXQorICAtaywgLS1rZXl3b3Jkcz1LRVlXT1JEUworWyAgICAgICAgICAgICAgICAgc2VsZWN0IHRoZSB0ZXN0cyBtYXRjaGluZyBhbGwgdGhlIGNvbW1hLXNlcGFyYXRlZCBLRVlXT1JEU10KK1sgICAgICAgICAgICAgICAgIG11bHRpcGxlIFxgLWsnIGFjY3VtdWxhdGU7IHByZWZpeGVkIFxgIScgbmVnYXRlcyBhIEtFWVdPUkRdCisgIC1lLCAtLWVycmV4aXQgIGFib3J0IGFzIHNvb24gYXMgYSB0ZXN0IGZhaWxzOyBpbXBsaWVzIC0tZGVidWcKKyAgLXYsIC0tdmVyYm9zZSAgZm9yY2UgbW9yZSBkZXRhaWxlZCBvdXRwdXQKK1sgICAgICAgICAgICAgICAgIGRlZmF1bHQgZm9yIGRlYnVnZ2luZyBzY3JpcHRzXQorICAtZCwgLS1kZWJ1ZyAgICBpbmhpYml0IGNsZWFuIHVwIGFuZCB0b3AtbGV2ZWwgbG9nZ2luZworWyAgICAgICAgICAgICAgICAgZGVmYXVsdCBmb3IgZGVidWdnaW5nIHNjcmlwdHNdCisgIC14LCAtLXRyYWNlICAgIGVuYWJsZSB0ZXN0cyBzaGVsbCB0cmFjaW5nCitfQVRFT0YKK200X2RpdmVydF9wb3AoW0hFTFBfVFVOSU5HXSlkbmwKK200X2RpdmVydF9wdXNoKFtIRUxQX0VORF0pZG5sCitjYXQgPDxfQVRFT0YgfHwgYXRfd3JpdGVfZmFpbD0xCisKK1JlcG9ydCBidWdzIHRvIDxBVF9QQUNLQUdFX0JVR1JFUE9SVD4uZG5sCittNF9pZmRlZihbQVRfUEFDS0FHRV9OQU1FXSwKK1ttNF9pZnNldChbQVRfUEFDS0FHRV9VUkxdLCBbCittNF9kZWZuKFtBVF9QQUNLQUdFX05BTUVdKSBob21lIHBhZ2U6IDxBVF9QQUNLQUdFX1VSTD4uXSlkbmwKK200X2lmKG00X2luZGV4KG00X2RlZm4oW0FUX1BBQ0tBR0VfTkFNRV0pLCBbR05VIF0pLCBbMF0sIFsKK0dlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+Ll0pXSkKK19BVEVPRgorICBleGl0ICRhdF93cml0ZV9mYWlsCitmaQorCisjIExpc3Qgb2YgdGVzdHMuCitpZiAkYXRfbGlzdF9wOyB0aGVuCisgIGNhdCA8PF9BVEVPRiB8fCBhdF93cml0ZV9mYWlsPTEKK0FUX1RFU1RTVUlURV9OQU1FIHRlc3QgZ3JvdXBzOgorCisgTlVNOiBGSUxFLU5BTUU6TElORSAgICAgVEVTVC1HUk9VUC1OQU1FCisgICAgICBLRVlXT1JEUworCitfQVRFT0YKKyAgIyBQYXNzaW5nIGF0X2dyb3VwcyBpcyB0cmlja3kuICBXZSBjYW5ub3QgdXNlIGl0IHRvIGZvcm0gYSBsaXRlcmFsIHN0cmluZworICAjIG9yIHJlZ2V4cCBiZWNhdXNlIG9mIHRoZSBsaW1pdGF0aW9uIG9mIEFJWCBhd2suICBBbmQgU29sYXJpcycgYXdrCisgICMgZG9lc24ndCBncm9rIG1vcmUgdGhhbiA5OSBmaWVsZHMgaW4gYSByZWNvcmQsIHNvIHdlIGhhdmUgdG8gdXNlIGBzcGxpdCcuCisgICMgYXRfZ3JvdXBzIG5lZWRzIHRvIGJlIHNwYWNlLXNlcGFyYXRlZCBmb3IgdGhpcyBzY3JpcHQgdG8gd29yay4KKyAgY2FzZSAkYXRfZ3JvdXBzIGluCisgICAgKiIkYXNfbmwiKiApCisgICAgICBhdF9ncm91cHM9YEFTX0VDSE8oWyIkYXRfZ3JvdXBzIl0pIHwgdHIgIiRhc19ubCIgJyAnYCA7OworICBlc2FjCisgIEFTX0VDSE8oWyIkYXRfZ3JvdXBzJGFzX25sJGF0X2hlbHBfYWxsIl0pIHwKKyAgICBhd2sgJ0JFR0lOIHsgRlMgPSAiOyIgfQorCSBOUiA9PSAxIHsKKwkgICBmb3IgKG4gPSBzcGxpdCAoJCAwLCBhLCAiICIpOyBuOyBuLS0pCisJICAgICBzZWxlY3RlZFtbYVtuXV1dID0gMQorCSAgIG5leHQKKwkgfQorCSBORiA+IDAgeworCSAgIGlmIChzZWxlY3RlZFtbJCAxXV0pIHsKKwkgICAgIHByaW50ZiAiICUzZDogJS0xOHMgJXNcbiIsICQgMSwgJCAyLCAkIDMKKwkgICAgIGlmICgkIDQpIHsKKwkgICAgICAgbG1heCA9IDc5CisJICAgICAgIGluZGVudCA9ICIgICAgICIKKwkgICAgICAgbGluZSA9IGluZGVudAorCSAgICAgICBsZW4gPSBsZW5ndGggKGxpbmUpCisJICAgICAgIG4gPSBzcGxpdCAoJCA0LCBhLCAiICIpCisJICAgICAgIGZvciAoaSA9IDE7IGkgPD0gbjsgaSsrKSB7CisJCSBsID0gbGVuZ3RoIChhW1tpXV0pICsgMQorCQkgaWYgKGkgPiAxICYmIGxlbiArIGwgPiBsbWF4KSB7CisJCSAgIHByaW50IGxpbmUKKwkJICAgbGluZSA9IGluZGVudCAiICIgYVtbaV1dCisJCSAgIGxlbiA9IGxlbmd0aCAobGluZSkKKwkJIH0gZWxzZSB7CisJCSAgIGxpbmUgPSBsaW5lICIgIiBhW1tpXV0KKwkJICAgbGVuICs9IGwKKwkJIH0KKwkgICAgICAgfQorCSAgICAgICBpZiAobikKKwkJIHByaW50IGxpbmUKKwkgICAgIH0KKwkgICB9CisJIH0nIHx8IGF0X3dyaXRlX2ZhaWw9MQorICBleGl0ICRhdF93cml0ZV9mYWlsCitmaQorbTRfZGl2ZXJ0X3BvcChbSEVMUF9FTkRdKWRubAorbTRfZGl2ZXJ0X3B1c2goW1ZFUlNJT05dKWRubAoraWYgJGF0X3ZlcnNpb25fcDsgdGhlbgorICBBU19FQ0hPKFsiJGFzX21lIChBVF9QQUNLQUdFX1NUUklORykiXSkgJiYKKyAgY2F0IDw8XF9BVEVPRiB8fCBhdF93cml0ZV9mYWlsPTEKK200X2RpdmVydF9wb3AoW1ZFUlNJT05dKWRubAorbTRfZGl2ZXJ0X3B1c2goW1ZFUlNJT05fRU5EXSlkbmwKK19BVEVPRgorICBleGl0ICRhdF93cml0ZV9mYWlsCitmaQorbTRfZGl2ZXJ0X3BvcChbVkVSU0lPTl9FTkRdKWRubAorbTRfZGl2ZXJ0X3B1c2goW1RFU1RTX0JFR0lOXSlkbmwKKworIyBUYWtlIGFueSAtQyBpbnRvIGFjY291bnQuCitpZiAkYXRfY2hhbmdlX2RpciA7IHRoZW4KKyAgaWYgdGVzdCB4LSA9ICJ4JGF0X2RpciIgOyB0aGVuCisgICAgYXRfZGlyPS4vLQorICBmaQorICB0ZXN0IHggIT0gIngkYXRfZGlyIiAmJiBjZCAiJGF0X2RpciIgXAorICAgIHx8IEFTX0VSUk9SKFt1bmFibGUgdG8gY2hhbmdlIGRpcmVjdG9yeV0pCisgIGF0X2Rpcj1gcHdkYAorZmkKKworIyBMb2FkIHRoZSBjb25maWcgZmlsZXMgZm9yIGFueSBkZWZhdWx0IHZhcmlhYmxlIGFzc2lnbm1lbnRzLgorZm9yIGF0X2ZpbGUgaW4gYXRjb25maWcgYXRsb2NhbAorZG8KKyAgdGVzdCAtciAkYXRfZmlsZSB8fCBjb250aW51ZQorICAuIC4vJGF0X2ZpbGUgfHwgQVNfRVJST1IoW2ludmFsaWQgY29udGVudDogJGF0X2ZpbGVdKQorZG9uZQorCisjIEF1dG9jb25mIDw9Mi41OWIgc2V0IGF0X3RvcF9idWlsZGRpciBpbnN0ZWFkIG9mIGF0X3RvcF9idWlsZF9wcmVmaXg6Cis6ICR7YXRfdG9wX2J1aWxkX3ByZWZpeD0kYXRfdG9wX2J1aWxkZGlyfQorCisjIFBlcmZvcm0gYW55IGFzc2lnbm1lbnRzIHJlcXVlc3RlZCBkdXJpbmcgYXJndW1lbnQgcGFyc2luZy4KK2V2YWwgIiRhdF9kZWJ1Z19hcmdzIgorCisjIGF0Y29uZmlnIGRlbGl2ZXJzIG5hbWVzIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3RvcnkgdGhlIHRlc3Qgc3VpdGUgaXMKKyMgaW4sIGJ1dCB0aGUgZ3JvdXBzIHRoZW1zZWx2ZXMgYXJlIHJ1biBpbiB0ZXN0c3VpdGUtZGlyL2dyb3VwLWRpci4KK2lmIHRlc3QgLW4gIiRhdF90b3Bfc3JjZGlyIjsgdGhlbgorICBidWlsZGRpcj0uLi8uLgorICBmb3IgYXRfZGlyX3ZhciBpbiBzcmNkaXIgdG9wX3NyY2RpciB0b3BfYnVpbGRfcHJlZml4CisgIGRvCisgICAgQVNfVkFSX0NPUFkoW2F0X3ZhbF0sIFthdF8kYXRfZGlyX3Zhcl0pCisgICAgY2FzZSAkYXRfdmFsIGluCisgICAgICBbW1xcLyRdXSogfCA/OltbXFwvXV0qICkgYXRfcHJlZml4PSA7OworICAgICAgKikgYXRfcHJlZml4PS4uLy4uLyA7OworICAgIGVzYWMKKyAgICBBU19WQVJfU0VUKFskYXRfZGlyX3Zhcl0sIFskYXRfcHJlZml4JGF0X3ZhbF0pCisgIGRvbmUKK2ZpCisKK200X3RleHRfYm94KFtEaXJlY3Rvcnkgc3RydWN0dXJlLl0pCisKKyMgVGhpcyBpcyB0aGUgc2V0IG9mIGRpcmVjdG9yaWVzIGFuZCBmaWxlcyB1c2VkIGJ5IHRoaXMgc2NyaXB0CisjIChub24tbGl0ZXJhbHMgYXJlIGNhcGl0YWxpemVkKToKKyMKKyMgVEVTVFNVSVRFICAgICAgICAgLSB0aGUgdGVzdHN1aXRlCisjIFRFU1RTVUlURS5sb2cgICAgIC0gc3VtbWFyaXplcyB0aGUgY29tcGxldGUgdGVzdHN1aXRlIHJ1bgorIyBURVNUU1VJVEUuZGlyLyAgICAtIGNyZWF0ZWQgZHVyaW5nIGEgcnVuLCByZW1haW5zIGFmdGVyIC1kIG9yIGZhaWxlZCB0ZXN0CisjICsgYXQtZ3JvdXBzLyAgICAgIC0gZHVyaW5nIGEgcnVuOiBzdGF0dXMgb2YgYWxsIGdyb3VwcyBpbiBydW4KKyMgfCArIE5OTi8gICAgICAgICAgLSBkdXJpbmcgYSBydW46IG1ldGEtZGF0YSBhYm91dCB0ZXN0IGdyb3VwIE5OTgorIyB8IHwgKyBjaGVjay1saW5lICAtIGxvY2F0aW9uIChzb3VyY2UgZmlsZSBhbmQgbGluZSkgb2YgY3VycmVudCBBVF9DSEVDSworIyB8IHwgKyBzdGF0dXMgICAgICAtIGV4aXQgc3RhdHVzIG9mIGN1cnJlbnQgQVRfQ0hFQ0sKKyMgfCB8ICsgc3Rkb3V0ICAgICAgLSBzdGRvdXQgb2YgY3VycmVudCBBVF9DSEVDSworIyB8IHwgKyBzdGRlcjEgICAgICAtIHN0ZGVyciwgaW5jbHVkaW5nIHRyYWNlCisjIHwgfCArIHN0ZGVyciAgICAgIC0gc3RkZXJyLCB3aXRoIHRyYWNlIGZpbHRlcmVkIG91dAorIyB8IHwgKyB0ZXN0LXNvdXJjZSAtIHBvcnRpb24gb2YgdGVzdHN1aXRlIHRoYXQgZGVmaW5lcyBncm91cAorIyB8IHwgKyB0aW1lcyAgICAgICAtIHRpbWVzdGFtcHMgZm9yIGNvbXB1dGluZyBkdXJhdGlvbgorIyB8IHwgKyBwYXNzICAgICAgICAtIGNyZWF0ZWQgaWYgZ3JvdXAgcGFzc2VkCisjIHwgfCArIHhwYXNzICAgICAgIC0gY3JlYXRlZCBpZiBncm91cCB4cGFzc2VkCisjIHwgfCArIGZhaWwgICAgICAgIC0gY3JlYXRlZCBpZiBncm91cCBmYWlsZWQKKyMgfCB8ICsgeGZhaWwgICAgICAgLSBjcmVhdGVkIGlmIGdyb3VwIHhmYWlsZWQKKyMgfCB8ICsgc2tpcCAgICAgICAgLSBjcmVhdGVkIGlmIGdyb3VwIHNraXBwZWQKKyMgKyBhdC1zdG9wICAgICAgICAgLSBkdXJpbmcgYSBydW46IGVuZCB0aGUgcnVuIGlmIHRoaXMgZmlsZSBleGlzdHMKKyMgKyBhdC1zb3VyY2UtbGluZXMgLSBkdXJpbmcgYSBydW46IGNhY2hlIG9mIFRFU1RTVUlURSBsaW5lIG51bWJlcnMgZm9yIGV4dHJhY3Rpb24KKyMgKyAwLi5OTk4vICAgICAgICAgLSBjcmVhdGVkIGZvciBlYWNoIGdyb3VwIE5OTiwgcmVtYWlucyBhZnRlciAtZCBvciBmYWlsZWQgdGVzdAorIyB8ICsgVEVTVFNVSVRFLmxvZyAtIHN1bW1hcml6ZXMgdGhlIGdyb3VwIHJlc3VsdHMKKyMgfCArIC4uLiAgICAgICAgICAgLSBmaWxlcyBjcmVhdGVkIGR1cmluZyB0aGUgZ3JvdXAKKworIyBUaGUgZGlyZWN0b3J5IHRoZSB3aG9sZSBzdWl0ZSB3b3JrcyBpbi4KKyMgU2hvdWxkIGJlIGFic29sdXRlIHRvIGxldCB0aGUgdXNlciBgY2QnIGF0IHdpbGwuCithdF9zdWl0ZV9kaXI9JGF0X2Rpci8kYXNfbWUuZGlyCisjIFRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIHN1aXRlLgorYXRfc3VpdGVfbG9nPSRhdF9kaXIvJGFzX21lLmxvZworIyBUaGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgaGVscGVyIGZpbGVzIHBlciB0ZXN0IGdyb3VwLgorYXRfaGVscGVyX2Rpcj0kYXRfc3VpdGVfZGlyL2F0LWdyb3VwcworIyBTdG9wIGZpbGU6IGlmIGl0IGV4aXN0cywgZG8gbm90IHN0YXJ0IG5ldyBqb2JzLgorYXRfc3RvcF9maWxlPSRhdF9zdWl0ZV9kaXIvYXQtc3RvcAorIyBUaGUgZmlmbyB1c2VkIGZvciB0aGUgam9iIGRpc3BhdGNoZXIuCithdF9qb2JfZmlmbz0kYXRfc3VpdGVfZGlyL2F0LWpvYi1maWZvCisKK2lmICRhdF9jbGVhbjsgdGhlbgorICB0ZXN0IC1kICIkYXRfc3VpdGVfZGlyIiAmJgorICAgIGZpbmQgIiRhdF9zdWl0ZV9kaXIiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IFx7XH0gXDsKKyAgcm0gLWYgLXIgIiRhdF9zdWl0ZV9kaXIiICIkYXRfc3VpdGVfbG9nIgorICBleGl0ICQ/CitmaQorCisjIERvbid0IHRha2Ugcmlza3M6IHVzZSBvbmx5IGFic29sdXRlIGRpcmVjdG9yaWVzIGluIFBBVEguCisjCisjIEZvciBzdGFuZC1hbG9uZSB0ZXN0IHN1aXRlcyAoaWUuIGF0Y29uZmlnIHdhcyBub3QgZm91bmQpLAorIyBBVVRPVEVTVF9QQVRIIGlzIHJlbGF0aXZlIHRvIGAuJy4KKyMKKyMgRm9yIGVtYmVkZGVkIHRlc3Qgc3VpdGVzLCBBVVRPVEVTVF9QQVRIIGlzIHJlbGF0aXZlIHRvIHRoZSB0b3AgbGV2ZWwKKyMgb2YgdGhlIHBhY2thZ2UuICBUaGVuIGV4cGFuZCBpdCBpbnRvIGJ1aWxkL3NyYyBwYXJ0cywgc2luY2UgdXNlcnMKKyMgbWF5IGNyZWF0ZSBleGVjdXRhYmxlcyBpbiBib3RoIHBsYWNlcy4KK0FVVE9URVNUX1BBVEg9YEFTX0VDSE8oWyIkQVVUT1RFU1RfUEFUSCJdKSB8IHNlZCAic3w6fCRQQVRIX1NFUEFSQVRPUnxnImAKK2F0X3BhdGg9CitfQVNfUEFUSF9XQUxLKFskQVVUT1RFU1RfUEFUSCAkUEFUSF0sCitbdGVzdCAtbiAiJGF0X3BhdGgiICYmIEFTX1ZBUl9BUFBFTkQoW2F0X3BhdGhdLCBbJFBBVEhfU0VQQVJBVE9SXSkKK2Nhc2UgJGFzX2RpciBpbgorICBbW1xcL11dKiB8ID86W1tcXC9dXSogKQorICAgIEFTX1ZBUl9BUFBFTkQoW2F0X3BhdGhdLCBbIiRhc19kaXIiXSkKKyAgICA7OworICAqICkKKyAgICBpZiB0ZXN0IC16ICIkYXRfdG9wX2J1aWxkX3ByZWZpeCI7IHRoZW4KKyAgICAgICMgU3RhbmQtYWxvbmUgdGVzdCBzdWl0ZS4KKyAgICAgIEFTX1ZBUl9BUFBFTkQoW2F0X3BhdGhdLCBbIiRhc19kaXIiXSkKKyAgICBlbHNlCisgICAgICAjIEVtYmVkZGVkIHRlc3Qgc3VpdGUuCisgICAgICBBU19WQVJfQVBQRU5EKFthdF9wYXRoXSwgWyIkYXRfdG9wX2J1aWxkX3ByZWZpeCRhc19kaXIkUEFUSF9TRVBBUkFUT1IiXSkKKyAgICAgIEFTX1ZBUl9BUFBFTkQoW2F0X3BhdGhdLCBbIiRhdF90b3Bfc3JjZGlyLyRhc19kaXIiXSkKKyAgICBmaQorICAgIDs7Citlc2FjXSkKKworIyBOb3cgYnVpbGQgYW5kIHNpbXBsaWZ5IFBBVEguCisjCisjIFRoZXJlIG1pZ2h0IGJlIGRpcmVjdG9yaWVzIHRoYXQgZG9uJ3QgZXhpc3QsIGJ1dCBkb24ndCByZWRpcmVjdAorIyBidWlsdGlucycgKGVnLiwgY2QpIHN0ZGVyciBkaXJlY3RseTogVWx0cml4J3Mgc2ggaGF0ZXMgdGhhdC4KK2F0X25ld19wYXRoPQorX0FTX1BBVEhfV0FMSyhbJGF0X3BhdGhdLAorW3Rlc3QgLWQgIiRhc19kaXIiIHx8IGNvbnRpbnVlCitjYXNlICRhc19kaXIgaW4KKyAgW1tcXC9dXSogfCA/OltbXFwvXV0qICkgOzsKKyAgKiApIGFzX2Rpcj1gKGNkICIkYXNfZGlyIiAmJiBwd2QpIDI+L2Rldi9udWxsYCA7OworZXNhYworY2FzZSAkUEFUSF9TRVBBUkFUT1IkYXRfbmV3X3BhdGgkUEFUSF9TRVBBUkFUT1IgaW4KKyAgKiRQQVRIX1NFUEFSQVRPUiRhc19kaXIkUEFUSF9TRVBBUkFUT1IqKSA7OworICAkUEFUSF9TRVBBUkFUT1IkUEFUSF9TRVBBUkFUT1IpIGF0X25ld19wYXRoPSRhc19kaXIgOzsKKyAgKikgQVNfVkFSX0FQUEVORChbYXRfbmV3X3BhdGhdLCBbIiRQQVRIX1NFUEFSQVRPUiRhc19kaXIiXSkgOzsKK2VzYWNdKQorUEFUSD0kYXRfbmV3X3BhdGgKK2V4cG9ydCBQQVRICisKKyMgU2V0dGluZyB1cCB0aGUgRkRzLgorbTRfZGVmaW5lKFtBU19NRVNTQUdFX0xPR19GRF0sIFs1XSkKK200X2RlZmluZShbQVRfSk9CX0ZJRk9fRkRdLCBbNl0pCitbI10gQVNfTUVTU0FHRV9MT0dfRkQgaXMgdGhlIGxvZyBmaWxlLiAgTm90IHRvIGJlIG92ZXJ3cml0dGVuIGlmIGAtZCcuCitpZiAkYXRfZGVidWdfcDsgdGhlbgorICBhdF9zdWl0ZV9sb2c9L2Rldi9udWxsCitlbHNlCisgIDogPiIkYXRfc3VpdGVfbG9nIgorZmkKK2V4ZWMgQVNfTUVTU0FHRV9MT0dfRkQ+PiIkYXRfc3VpdGVfbG9nIgorCisjIEJhbm5lcnMgYW5kIGxvZ3MuCitBU19CT1gobTRfZGVmbihbQVRfVEVTVFNVSVRFX05BTUVdKVsuXSkKK3sKKyAgQVNfQk9YKG00X2RlZm4oW0FUX1RFU1RTVUlURV9OQU1FXSlbLl0pCisgIGVjaG8KKworICBBU19FQ0hPKFsiJGFzX21lOiBjb21tYW5kIGxpbmUgd2FzOiJdKQorICBBU19FQ0hPKFsiICBcJCAkWzBdICRhdF9jbGlfYXJncyJdKQorICBlY2hvCisKKyAgIyBUcnkgdG8gZmluZCBhIGZldyBDaGFuZ2VMb2dzIGluIGNhc2UgaXQgbWlnaHQgaGVscCBkZXRlcm1pbmluZyB0aGUKKyAgIyBleGFjdCB2ZXJzaW9uLiAgVXNlIHRoZSByZWxhdGl2ZSBkaXI6IGlmIHRoZSB0b3AgZGlyIGlzIGEgc3ltbGluaywKKyAgIyBmaW5kIHdpbGwgbm90IGZvbGxvdyBpdCAoYW5kIG9wdGlvbnMgdG8gZm9sbG93IHRoZSBsaW5rcyBhcmUgbm90CisgICMgcG9ydGFibGUpLCB3aGljaCB3b3VsZCByZXN1bHQgaW4gbm8gb3V0cHV0IGhlcmUuICBQcnVuZSBkaXJlY3RvcmllcworICAjIG1hdGNoaW5nIHRoZSBwYWNrYWdlIHRhcm5hbWUsIHNpbmNlIHRoZXkgdGVuZCB0byBiZSBsZWZ0b3ZlcnMgZnJvbQorICAjIGBtYWtlIGRpc3QnIG9yIGBtYWtlIGRpc3RjaGVjaycgYW5kIGNvbnRhaW4gcmVkdW5kYW50IG9yIHN0YWxlIGxvZ3MuCisgIGlmIHRlc3QgLW4gIiRhdF90b3Bfc3JjZGlyIjsgdGhlbgorICAgIEFTX0JPWChbQ2hhbmdlTG9ncy5dKQorICAgIGVjaG8KKyAgICBmb3IgYXRfZmlsZSBpbiBgZmluZCAiJGF0X3RvcF9zcmNkaXIiIG00X2lmZGVmKFtBVF9QQUNLQUdFX1RBUk5BTUVdLAorWy1uYW1lICJBVF9QQUNLQUdFX1RBUk5BTUUtKiIgLXBydW5lIC1vIF0pLW5hbWUgQ2hhbmdlTG9nIC1wcmludGAKKyAgICBkbworICAgICAgQVNfRUNITyhbIiRhc19tZTogJGF0X2ZpbGU6Il0pCisgICAgICBzZWQgJ3MvXi98IC87MTBxJyAkYXRfZmlsZQorICAgICAgZWNobworICAgIGRvbmUKKworICBmaQorCisgIEFTX1VOQU1FCisgIGVjaG8KKworICAjIENvbnRlbnRzIG9mIHRoZSBjb25maWcgZmlsZXMuCisgIGZvciBhdF9maWxlIGluIGF0Y29uZmlnIGF0bG9jYWwKKyAgZG8KKyAgICB0ZXN0IC1yICRhdF9maWxlIHx8IGNvbnRpbnVlCisgICAgQVNfRUNITyhbIiRhc19tZTogJGF0X2ZpbGU6Il0pCisgICAgc2VkICdzL14vfCAvJyAkYXRfZmlsZQorICAgIGVjaG8KKyAgZG9uZQorfSA+JkFTX01FU1NBR0VfTE9HX0ZECisKK200X2RpdmVydF9wb3AoW1RFU1RTX0JFR0lOXSlkbmwKK200X2RpdmVydF9wdXNoKFtQUkVQQVJFX1RFU1RTXSlkbmwKK3sKKyAgQVNfQk9YKFtUZXN0ZWQgcHJvZ3JhbXMuXSkKKyAgZWNobworfSA+JkFTX01FU1NBR0VfTE9HX0ZECisKKyMgUmVwb3J0IHdoYXQgcHJvZ3JhbXMgYXJlIGJlaW5nIHRlc3RlZC4KK2ZvciBhdF9wcm9ncmFtIGluIDogJGF0X3Rlc3RlZAorZG8KKyAgdGVzdCAiJGF0X3Byb2dyYW0iID0gOiAmJiBjb250aW51ZQorICBjYXNlICRhdF9wcm9ncmFtIGluCisgICAgW1tcXC9dKiB8ID86W1xcL10qICkgJGF0X3Byb2dyYW1fPSRhdF9wcm9ncmFtIDs7XQorICAgICogKQorICAgIF9BU19QQVRIX1dBTEsoWyRQQVRIXSwgW3Rlc3QgLWYgIiRhc19kaXIvJGF0X3Byb2dyYW0iICYmIGJyZWFrXSkKKyAgICBhdF9wcm9ncmFtXz0kYXNfZGlyLyRhdF9wcm9ncmFtIDs7CisgIGVzYWMKKyAgaWYgdGVzdCAtZiAiJGF0X3Byb2dyYW1fIjsgdGhlbgorICAgIHsKKyAgICAgIEFTX0VDSE8oWyIkYXRfc3JjZGlyL0FUX0xJTkU6ICRhdF9wcm9ncmFtXyAtLXZlcnNpb24iXSkKKyAgICAgICIkYXRfcHJvZ3JhbV8iIC0tdmVyc2lvbiA8L2Rldi9udWxsCisgICAgICBlY2hvCisgICAgfSA+JkFTX01FU1NBR0VfTE9HX0ZEIDI+JjEKKyAgZWxzZQorICAgIEFTX0VSUk9SKFtjYW5ub3QgZmluZCAkYXRfcHJvZ3JhbV0pCisgIGZpCitkb25lCisKK3sKKyAgQVNfQk9YKFtSdW5uaW5nIHRoZSB0ZXN0cy5dKQorfSA+JkFTX01FU1NBR0VfTE9HX0ZECisKK2F0X3N0YXJ0X2RhdGU9YGRhdGVgCithdF9zdGFydF90aW1lPWBkYXRlICslcyAyPi9kZXYvbnVsbGAKK0FTX0VDSE8oWyIkYXNfbWU6IHN0YXJ0aW5nIGF0OiAkYXRfc3RhcnRfZGF0ZSJdKSA+JkFTX01FU1NBR0VfTE9HX0ZECittNF9kaXZlcnRfcG9wKFtQUkVQQVJFX1RFU1RTXSlkbmwKK200X2RpdmVydF9wdXNoKFtURVNUU10pZG5sCisKKyMgQ3JlYXRlIHRoZSBtYXN0ZXIgZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4KK0FTX01LRElSX1AoWyIkYXRfc3VpdGVfZGlyIl0pIHx8CisgIEFTX0VSUk9SKFtjYW5ub3QgY3JlYXRlIGAkYXRfc3VpdGVfZGlyJ10pCisKKyMgQ2FuIHdlIGRpZmYgd2l0aCBgL2Rldi9udWxsJz8gIERVIDUuMCByZWZ1c2VzLgoraWYgZGlmZiAvZGV2L251bGwgL2Rldi9udWxsID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhdF9kZXZudWxsPS9kZXYvbnVsbAorZWxzZQorICBhdF9kZXZudWxsPSRhdF9zdWl0ZV9kaXIvZGV2bnVsbAorICA+IiRhdF9kZXZudWxsIgorZmkKKworIyBVc2UgYGRpZmYgLXUnIHdoZW4gcG9zc2libGUuCitpZiBhdF9kaWZmPWBkaWZmIC11ICIkYXRfZGV2bnVsbCIgIiRhdF9kZXZudWxsIiAyPiYxYCAmJiB0ZXN0IC16ICIkYXRfZGlmZiIKK3RoZW4KKyAgYXRfZGlmZj0nZGlmZiAtdScKK2Vsc2UKKyAgYXRfZGlmZj1kaWZmCitmaQorCisjIEdldCB0aGUgbGFzdCBuZWVkZWQgZ3JvdXAuCitmb3IgYXRfZ3JvdXAgaW4gOiAkYXRfZ3JvdXBzOyBkbyA6OyBkb25lCisKKyMgRXh0cmFjdCB0aGUgc3RhcnQgYW5kIGVuZCBsaW5lcyBvZiBlYWNoIHRlc3QgZ3JvdXAgYXQgdGhlIHRhaWwKKyMgb2YgdGhpcyBmaWxlCithd2sgJworQkVHSU4geyBGUz0iByIgfQorL15AJTpAQVRfU1RBUlRfLyB7CisgIHN0YXJ0ID0gTlIKK30KKy9eQCU6QEFUX1NUT1BfLyB7CisgIHRlc3QgPSBzdWJzdHIgKCQgMCwgMTApCisgIHByaW50ICJhdF9zZWQiIHRlc3QgIj1cIjEsIiBzdGFydCAiZDsiIChOUi0xKSAicVwiIgorICBpZiAodGVzdCA9PSAiJyIkYXRfZ3JvdXAiJyIpIGV4aXQKK30nICIkYXRfbXlzZWxmIiA+ICIkYXRfc3VpdGVfZGlyL2F0LXNvdXJjZS1saW5lcyIgJiYKKy4gIiRhdF9zdWl0ZV9kaXIvYXQtc291cmNlLWxpbmVzIiB8fAorICBBU19FUlJPUihbY2Fubm90IGNyZWF0ZSB0ZXN0IGxpbmUgbnVtYmVyIGNhY2hlXSkKK3JtIC1mICIkYXRfc3VpdGVfZGlyL2F0LXNvdXJjZS1saW5lcyIKKworIyBTZXQgbnVtYmVyIG9mIGpvYnMgZm9yIGAtaic7IGF2b2lkIG1vcmUgam9icyB0aGFuIHRlc3QgZ3JvdXBzLgorc2V0IFggJGF0X2dyb3Vwczsgc2hpZnQ7IGF0X21heF9qb2JzPSRbQCU6QF0KK2lmIHRlc3QgJGF0X21heF9qb2JzIC1lcSAwOyB0aGVuCisgIGF0X2pvYnM9MQorZmkKK2lmIHRlc3QgJGF0X2pvYnMgLW5lIDEgJiYKKyAgIHsgdGVzdCAkYXRfam9icyAtZXEgMCB8fCB0ZXN0ICRhdF9qb2JzIC1ndCAkYXRfbWF4X2pvYnM7IH07IHRoZW4KKyAgYXRfam9icz0kYXRfbWF4X2pvYnMKK2ZpCisKKyMgSWYgcGFyYWxsZWwgbW9kZSwgZG9uJ3Qgb3V0cHV0IGJhbm5lcnMsIGRvbid0IHNwbGl0IHN1bW1hcnkgbGluZXMuCitpZiB0ZXN0ICRhdF9qb2JzIC1uZSAxOyB0aGVuCisgIGF0X3ByaW50X2Jhbm5lcnM9ZmFsc2UKKyAgYXRfcXVpZXQ9OgorZmkKKworIyBTZXQgdXAgaGVscGVyIGRpcnMuCitybSAtcmYgIiRhdF9oZWxwZXJfZGlyIiAmJgorbWtkaXIgIiRhdF9oZWxwZXJfZGlyIiAmJgorY2QgIiRhdF9oZWxwZXJfZGlyIiAmJgoreyB0ZXN0IC16ICIkYXRfZ3JvdXBzIiB8fCBta2RpciAkYXRfZ3JvdXBzOyB9IHx8CitBU19FUlJPUihbdGVzdHN1aXRlIGRpcmVjdG9yeSBzZXR1cCBmYWlsZWRdKQorCisjIEZ1bmN0aW9ucyBmb3IgcnVubmluZyBhIHRlc3QgZ3JvdXAuICBXZSBsZWF2ZSB0aGUgYWN0dWFsCisjIHRlc3QgZ3JvdXAgZXhlY3V0aW9uIG91dHNpZGUgb2YgYSBzaGVsbCBmdW5jdGlvbiBpbiBvcmRlcgorIyB0byBhdm9pZCBoaXR0aW5nIHpzaCA0LnggZXhpdCBzdGF0dXMgYnVncy4KKworQVNfRlVOQ1RJT05fREVTQ1JJQkUoW2F0X2ZuX2dyb3VwX3ByZXBhcmVdLCBbXSwKK1tQcmVwYXJlIHJ1bm5pbmcgYSB0ZXN0IGdyb3VwLl0pCithdF9mbl9ncm91cF9wcmVwYXJlICgpCit7CisgICMgVGhlIGRpcmVjdG9yeSBmb3IgYWRkaXRpb25hbCBwZXItZ3JvdXAgaGVscGVyIGZpbGVzLgorICBhdF9qb2JfZGlyPSRhdF9oZWxwZXJfZGlyLyRhdF9ncm91cAorICAjIFRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGxvY2F0aW9uIG9mIHRoZSBsYXN0IEFUX0NIRUNLLgorICBhdF9jaGVja19saW5lX2ZpbGU9JGF0X2pvYl9kaXIvY2hlY2stbGluZQorICAjIFRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGV4aXQgc3RhdHVzIG9mIHRoZSBsYXN0IGNvbW1hbmQuCisgIGF0X3N0YXR1c19maWxlPSRhdF9qb2JfZGlyL3N0YXR1cworICAjIFRoZSBmaWxlcyBjb250YWluaW5nIHRoZSBvdXRwdXQgb2YgdGhlIHRlc3RlZCBjb21tYW5kcy4KKyAgYXRfc3Rkb3V0PSRhdF9qb2JfZGlyL3N0ZG91dAorICBhdF9zdGRlcjE9JGF0X2pvYl9kaXIvc3RkZXIxCisgIGF0X3N0ZGVycj0kYXRfam9iX2Rpci9zdGRlcnIKKyAgIyBUaGUgZmlsZSBjb250YWluaW5nIHRoZSBjb2RlIGZvciBhIHRlc3QgZ3JvdXAuCisgIGF0X3Rlc3Rfc291cmNlPSRhdF9qb2JfZGlyL3Rlc3Qtc291cmNlCisgICMgVGhlIGZpbGUgY29udGFpbmluZyBkYXRlcy4KKyAgYXRfdGltZXNfZmlsZT0kYXRfam9iX2Rpci90aW1lcworCisgICMgQmUgc3VyZSB0byBjb21lIGJhY2sgdG8gdGhlIHRvcCB0ZXN0IGRpcmVjdG9yeS4KKyAgY2QgIiRhdF9zdWl0ZV9kaXIiCisKKyAgIyBDbGVhcmx5IHNlcGFyYXRlIHRoZSB0ZXN0IGdyb3VwcyB3aGVuIHZlcmJvc2UuCisgICRhdF9maXJzdCB8fCAkYXRfdmVyYm9zZSBlY2hvCisKKyAgYXRfZ3JvdXBfbm9ybWFsaXplZD0kYXRfZ3JvdXAKKyAgX0FUX05PUk1BTElaRV9URVNUX0dST1VQX05VTUJFUihhdF9ncm91cF9ub3JtYWxpemVkKQorCisgICMgQ3JlYXRlIGEgZnJlc2ggZGlyZWN0b3J5IGZvciB0aGUgbmV4dCB0ZXN0IGdyb3VwLCBhbmQgZW50ZXIuCisgICMgSWYgb25lIGFscmVhZHkgZXhpc3RzLCB0aGUgdXNlciBtYXkgaGF2ZSBpbnZva2VkIC4vcnVuIGZyb20KKyAgIyB3aXRoaW4gdGhhdCBkaXJlY3Rvcnk7IHdlIHJlbW92ZSB0aGUgY29udGVudHMsIGJ1dCBub3QgdGhlCisgICMgZGlyZWN0b3J5IGl0c2VsZiwgc28gdGhhdCB3ZSBhcmVuJ3QgcHVsbGluZyB0aGUgcnVnIG91dCBmcm9tCisgICMgdW5kZXIgdGhlIHNoZWxsJ3Mgbm90aW9uIG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKyAgYXRfZ3JvdXBfZGlyPSRhdF9zdWl0ZV9kaXIvJGF0X2dyb3VwX25vcm1hbGl6ZWQKKyAgYXRfZ3JvdXBfbG9nPSRhdF9ncm91cF9kaXIvJGFzX21lLmxvZworICBfQVNfQ0xFQU5fRElSKCIkYXRfZ3JvdXBfZGlyIikgfHwKKyAgICBBU19XQVJOKFt0ZXN0IGRpcmVjdG9yeSBmb3IgJGF0X2dyb3VwX25vcm1hbGl6ZWQgY291bGQgbm90IGJlIGNsZWFuZWQuXSkKKyAgIyBCZSB0b2xlcmFudCBpZiB0aGUgYWJvdmUgYHJtJyB3YXMgbm90IGFibGUgdG8gcmVtb3ZlIHRoZSBkaXJlY3RvcnkuCisgIEFTX01LRElSX1AoWyIkYXRfZ3JvdXBfZGlyIl0pCisKKyAgZWNobyAwID4gIiRhdF9zdGF0dXNfZmlsZSIKKworICAjIEluIHZlcmJvc2UgbW9kZSwgYXBwZW5kIHRvIHRoZSBsb2cgZmlsZSAqYW5kKiBzaG93IG9uCisgICMgdGhlIHN0YW5kYXJkIG91dHB1dDsgaW4gcXVpZXQgbW9kZSBvbmx5IHdyaXRlIHRvIHRoZSBsb2cuCisgIGlmIHRlc3QgLXogIiRhdF92ZXJib3NlIjsgdGhlbgorICAgIGF0X3RlZV9waXBlPSd0ZWUgLWEgIiRhdF9ncm91cF9sb2ciJworICBlbHNlCisgICAgYXRfdGVlX3BpcGU9J2NhdCA+PiAiJGF0X2dyb3VwX2xvZyInCisgIGZpCit9CisKK0FTX0ZVTkNUSU9OX0RFU0NSSUJFKFthdF9mbl9ncm91cF9wb3N0cHJvY2Vzc10sIFtdLAorW1BlcmZvcm0gY2xlYW51cCBhZnRlciBydW5uaW5nIGEgdGVzdCBncm91cC5dKQorYXRfZm5fZ3JvdXBfcG9zdHByb2Nlc3MgKCkKK3sKKyAgIyBCZSBzdXJlIHRvIGNvbWUgYmFjayB0byB0aGUgc3VpdGUgZGlyZWN0b3J5LCBpbiBwYXJ0aWN1bGFyCisgICMgc2luY2UgYmVsb3cgd2UgbWlnaHQgYHJtJyB0aGUgZ3JvdXAgZGlyZWN0b3J5IHdlIGFyZSBpbiBjdXJyZW50bHkuCisgIGNkICIkYXRfc3VpdGVfZGlyIgorCisgIGlmIHRlc3QgISAtZiAiJGF0X2NoZWNrX2xpbmVfZmlsZSI7IHRoZW4KKyAgICBzZWQgInMvXiAqLyRhc19tZTogV0FSTklORzogLyIgPDxfQVRFT0YKKyAgICAgIEEgZmFpbHVyZSBoYXBwZW5lZCBpbiBhIHRlc3QgZ3JvdXAgYmVmb3JlIGFueSB0ZXN0IGNvdWxkIGJlCisgICAgICBydW4uIFRoaXMgbWVhbnMgdGhhdCB0ZXN0IHN1aXRlIGlzIGltcHJvcGVybHkgZGVzaWduZWQuICBQbGVhc2UKKyAgICAgIHJlcG9ydCB0aGlzIGZhaWx1cmUgdG8gPEFUX1BBQ0tBR0VfQlVHUkVQT1JUPi4KK19BVEVPRgorICAgIEFTX0VDSE8oWyIkYXRfc2V0dXBfbGluZSJdKSA+IiRhdF9jaGVja19saW5lX2ZpbGUiCisgICAgYXRfc3RhdHVzPTk5CisgIGZpCisgICRhdF92ZXJib3NlIEFTX0VDSE9fTihbIiRhdF9ncm91cC4gJGF0X3NldHVwX2xpbmU6ICJdKQorICBBU19FQ0hPX04oWyIkYXRfZ3JvdXAuICRhdF9zZXR1cF9saW5lOiAiXSkgPj4gIiRhdF9ncm91cF9sb2ciCisgIGNhc2UgJGF0X3hmYWlsOiRhdF9zdGF0dXMgaW4KKyAgICAqOjk5KQorCWF0X21zZz0nRkFJTEVEICgnYGNhdCAiJGF0X2NoZWNrX2xpbmVfZmlsZSJgJyknCisJYXRfcmVzPWZhaWwKKwlhdF9lcnJleGl0PSRhdF9lcnJleGl0X3AKKwk7OworICAgIHllczowKQorCWF0X21zZz0iVU5FWFBFQ1RFRCBQQVNTIgorCWF0X3Jlcz14cGFzcworCWF0X2VycmV4aXQ9JGF0X2VycmV4aXRfcAorCTs7CisgICAgbm86MCkKKwlhdF9tc2c9Im9rIgorCWF0X3Jlcz1wYXNzCisJYXRfZXJyZXhpdD1mYWxzZQorCTs7CisgICAgKjo3NykKKwlhdF9tc2c9J3NraXBwZWQgKCdgY2F0ICIkYXRfY2hlY2tfbGluZV9maWxlImAnKScKKwlhdF9yZXM9c2tpcAorCWF0X2VycmV4aXQ9ZmFsc2UKKwk7OworICAgIHllczoqKQorCWF0X21zZz0nZXhwZWN0ZWQgZmFpbHVyZSAoJ2BjYXQgIiRhdF9jaGVja19saW5lX2ZpbGUiYCcpJworCWF0X3Jlcz14ZmFpbAorCWF0X2VycmV4aXQ9ZmFsc2UKKwk7OworICAgIG5vOiopCisJYXRfbXNnPSdGQUlMRUQgKCdgY2F0ICIkYXRfY2hlY2tfbGluZV9maWxlImAnKScKKwlhdF9yZXM9ZmFpbAorCWF0X2VycmV4aXQ9JGF0X2VycmV4aXRfcAorCTs7CisgIGVzYWMKKyAgZWNobyAiJGF0X3JlcyIgPiAiJGF0X2pvYl9kaXIvJGF0X3JlcyIKKyAgIyBJbiBwYXJhbGxlbCBtb2RlLCBvdXRwdXQgdGhlIHN1bW1hcnkgbGluZSBvbmx5IGFmdGVyd2FyZHMuCisgIGlmIHRlc3QgJGF0X2pvYnMgLW5lIDEgJiYgdGVzdCAtbiAiJGF0X3ZlcmJvc2UiOyB0aGVuCisgICAgQVNfRUNITyhbIiRhdF9kZXNjX2xpbmUgJGF0X21zZyJdKQorICBlbHNlCisgICAgIyBNYWtlIHN1cmUgdGhlcmUgaXMgYSBzZXBhcmF0b3IgZXZlbiB3aXRoIGxvbmcgdGl0bGVzLgorICAgIEFTX0VDSE8oWyIgJGF0X21zZyJdKQorICBmaQorICBhdF9sb2dfbXNnPSIkYXRfZ3JvdXAuICRhdF9kZXNjICgkYXRfc2V0dXBfbGluZSk6ICRhdF9tc2ciCisgIGNhc2UgJGF0X3N0YXR1cyBpbgorICAgIDB8NzcpCisgICAgICAjICRhdF90aW1lc19maWxlIGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBncm91cCBzdWNjZWVkZWQuCisgICAgICAjIFdlJ3JlIG5vdCBpbmNsdWRpbmcgdGhlIGdyb3VwIGxvZywgc28gdGhlIHN1Y2Nlc3MgbWVzc2FnZQorICAgICAgIyBpcyB3cml0dGVuIGluIHRoZSBnbG9iYWwgbG9nIHNlcGFyYXRlbHkuICBCdXQgd2UgYWxzbworICAgICAgIyB3cml0ZSB0byB0aGUgZ3JvdXAgbG9nIGluIGNhc2UgdGhleSdyZSB1c2luZyAtZC4KKyAgICAgIGlmIHRlc3QgLWYgIiRhdF90aW1lc19maWxlIjsgdGhlbgorCWF0X2xvZ19tc2c9IiRhdF9sb2dfbXNnICAgICAoImBzZWQgMWQgIiRhdF90aW1lc19maWxlImAnKScKKwlybSAtZiAiJGF0X3RpbWVzX2ZpbGUiCisgICAgICBmaQorICAgICAgQVNfRUNITyhbIiRhdF9sb2dfbXNnIl0pID4+ICIkYXRfZ3JvdXBfbG9nIgorICAgICAgQVNfRUNITyhbIiRhdF9sb2dfbXNnIl0pID4mQVNfTUVTU0FHRV9MT0dfRkQKKworICAgICAgIyBDbGVhbnVwIHRoZSBncm91cCBkaXJlY3RvcnksIHVubGVzcyB0aGUgdXNlciB3YW50cyB0aGUgZmlsZXMuCisgICAgICBpZiAkYXRfZGVidWdfcDsgdGhlbgorCWF0X2ZuX2NyZWF0ZV9kZWJ1Z2dpbmdfc2NyaXB0CisgICAgICBlbHNlCisJaWYgdGVzdCAtZCAiJGF0X2dyb3VwX2RpciI7IHRoZW4KKwkgIGZpbmQgIiRhdF9ncm91cF9kaXIiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IFx7XH0gXDsKKwkgIHJtIC1mciAiJGF0X2dyb3VwX2RpciIKKwlmaQorCXJtIC1mICIkYXRfdGVzdF9zb3VyY2UiCisgICAgICBmaQorICAgICAgOzsKKyAgICAqKQorICAgICAgIyBVcG9uIGZhaWx1cmUsIGluY2x1ZGUgdGhlIGxvZyBpbnRvIHRoZSB0ZXN0c3VpdGUncyBnbG9iYWwKKyAgICAgICMgbG9nLiAgVGhlIGZhaWx1cmUgbWVzc2FnZSBpcyB3cml0dGVuIGluIHRoZSBncm91cCBsb2cuICBJdAorICAgICAgIyBpcyBsYXRlciBpbmNsdWRlZCBpbiB0aGUgZ2xvYmFsIGxvZy4KKyAgICAgIEFTX0VDSE8oWyIkYXRfbG9nX21zZyJdKSA+PiAiJGF0X2dyb3VwX2xvZyIKKworICAgICAgIyBVcG9uIGZhaWx1cmUsIGtlZXAgdGhlIGdyb3VwIGRpcmVjdG9yeSBmb3IgYXV0b3BzeSwgYW5kIGNyZWF0ZQorICAgICAgIyB0aGUgZGVidWdnaW5nIHNjcmlwdC4gIFdpdGggLWUsIGRvIG5vdCBzdGFydCBhbnkgZnVydGhlciB0ZXN0cy4KKyAgICAgIGF0X2ZuX2NyZWF0ZV9kZWJ1Z2dpbmdfc2NyaXB0CisgICAgICBpZiAkYXRfZXJyZXhpdDsgdGhlbgorCWVjaG8gc3RvcCA+ICIkYXRfc3RvcF9maWxlIgorICAgICAgZmkKKyAgICAgIDs7CisgIGVzYWMKK30KKworCittNF90ZXh0X2JveChbRHJpdmVyIGxvb3AuXSkKKworZG5sIENhdGNoaW5nIHNpZ25hbHMgY29ycmVjdGx5OgorZG5sCitkbmwgVGhlIGZpcnN0IGlkZWEgd2FzOiB0cmFwIHRoZSBzaWduYWwsIHNlbmQgaXQgdG8gYWxsIHNwYXduZWQgam9icywKK2RubCB0aGVuIHJlc2V0IHRoZSBoYW5kbGVyIGFuZCByZXJhaXNlIHRoZSBzaWduYWwgZm9yIG91cnNlbHZlcy4KK2RubCBIb3dldmVyLCBiZWZvcmUgZXhpdGluZywga3NoIHdpbGwgdGhlbiBzZW5kIHRoZSBzaWduYWwgdG8gYWxsCitkbmwgcHJvY2VzcyBncm91cCBtZW1iZXJzLCBwb3RlbnRpYWxseSBraWxsaW5nIHRoZSBvdXRlciB0ZXN0c3VpdGUKK2RubCBhbmQvb3IgdGhlICdtYWtlJyBwcm9jZXNzIGRyaXZpbmcgdXMuCitkbmwgU28gbm93IHRoZSBzdHJhdGVneSBpczogdHJhcCB0aGUgc2lnbmFsLCBzZW5kIGl0IHRvIGFsbCBzcGF3bmVkIGpvYnMsCitkbmwgdGhlbiBleGl0IHRoZSBzY3JpcHQgd2l0aCB0aGUgcmlnaHQgc3RhdHVzLgorZG5sCitkbmwgSW4gb3JkZXIgdG8gbGV0IHRoZSBqb2JzIGtub3cgYWJvdXQgdGhlIHNpZ25hbCwgd2UgY2Fubm90IGp1c3Qgc2VuZCBpdAorZG5sIHRvIHRoZSBjdXJyZW50IHByb2Nlc3MgZ3JvdXAgKGtpbGwgJFNJRyAwKSwgZm9yIHRoZSBzYW1lIHJlYXNvbiBhcyBhYm92ZS4KK2RubCBBbHNvLCBpdCBkb2VzIG5vdCByZWxpYWJseSBzdG9wIHRoZSBzdWl0ZSB0byBzZW5kIHRoZSBzaWduYWwgdG8gdGhlCitkbmwgc3Bhd25lZCBwcm9jZXNzZXMsIGJlY2F1c2UgdGhleSBtaWdodCBub3QgdHJhbnNwb3J0IGl0IGZ1cnRoZXIKK2RubCAobWF5YmUgdGhpcyBjYW4gYmUgZml4ZWQ/KS4KK2RubAorZG5sIFNvIHdoYXQgd2UgZG8gaXMgZW5hYmxlIHNoZWxsIGpvYiBjb250cm9sIGlmIGF2YWlsYWJsZSwgd2hpY2ggY2F1c2VzIHRoZQorZG5sIHNoZWxsIHRvIHN0YXJ0IGVhY2ggcGFyYWxsZWwgdGFzayBhcyBpdHMgb3duIHNoZWxsIGpvYiwgdGh1cyBhcyBhIG5ldworZG5sIHByb2Nlc3MgZ3JvdXAgbGVhZGVyLiAgV2UgdGhlbiBzZW5kIHRoZSBzaWduYWwgdG8gYWxsIG5ldyBwcm9jZXNzIGdyb3Vwcy4KKworZG5sIERvIHdlIGhhdmUgam9iIGNvbnRyb2w/CitpZiAoc2V0IC1tICYmIHNldCArbSAmJiBzZXQgK2IpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBzZXQgK2IKKyAgYXRfam9iX2NvbnRyb2xfb249J3NldCAtbScgYXRfam9iX2NvbnRyb2xfb2ZmPSdzZXQgK20nIGF0X2pvYl9ncm91cD0tCitlbHNlCisgIGF0X2pvYl9jb250cm9sX29uPTogYXRfam9iX2NvbnRyb2xfb2ZmPTogYXRfam9iX2dyb3VwPQorZmkKKworZm9yIGF0X3NpZ25hbCBpbiAxIDIgMTU7IGRvCitkbmwgVGhpcyBzaWduYWwgaGFuZGxlciBpcyBub3Qgc3VpdGFibGUgZm9yIFBJUEU6IGl0IGNhdXNlcyB3cml0ZXMuCitkbmwgVGhlIGNvZGUgdGhhdCB3YXMgaW50ZXJydXB0ZWQgbWF5IGhhdmUgdGhlIGVycmV4aXQsIG1vbml0b3IsIG9yIHh0cmFjZQorZG5sIGZsYWdzIGVuYWJsZWQsIHNvIHNhbml0aXplLgorICB0cmFwICdzZXQgK3g7IHNldCArZQorCSRhdF9qb2JfY29udHJvbF9vZmYKKwlhdF9zaWduYWw9JyIkYXRfc2lnbmFsIicKK2RubCBTYWZldHkgYmVsdDogZXZlbiB3aXRoIHJ1bmF3YXkgcHJvY2Vzc2VzLCBwcmV2ZW50IHN0YXJ0aW5nIG5ldyBqb2JzLgorCWVjaG8gc3RvcCA+ICIkYXRfc3RvcF9maWxlIgorZG5sIERvIG5vdCBlbnRlciB0aGlzIGFyZWEgbXVsdGlwbGUgdGltZXMsIGRvIG5vdCBraWxsIHNlbGYgcHJlbWF0dXJlbHkuCisJdHJhcCAiIiAkYXRfc2lnbmFsCitkbmwgR2F0aGVyIHByb2Nlc3MgZ3JvdXAgSURzIG9mIGN1cnJlbnRseSBydW5uaW5nIGpvYnMuCisJYXRfcGdpZHM9CisJZm9yIGF0X3BnaWQgaW4gYGpvYnMgLXAgMj4vZGV2L251bGxgOyBkbworCSAgYXRfcGdpZHM9IiRhdF9wZ2lkcyAkYXRfam9iX2dyb3VwJGF0X3BnaWQiCisJZG9uZQorZG5sIElnbm9yZSBga2lsbCcgZXJyb3JzLCBhcyBzb21lIGpvYnMgbWF5IGhhdmUgZmluaXNoZWQgaW4gdGhlIG1lYW50aW1lLgorCXRlc3QgLXogIiRhdF9wZ2lkcyIgfHwga2lsbCAtJGF0X3NpZ25hbCAkYXRfcGdpZHMgMj4vZGV2L251bGwKK2RubCB3YWl0IHVudGlsIGFsbCBqb2JzIGhhdmUgZXhpdGVkLgorCXdhaXQKK2RubCBTdGF0dXMgb3V0cHV0LiAgRG8gdGhpcyBhZnRlciB3YWl0aW5nIGZvciB0aGUgam9icywgZm9yIG9yZGVyZWQgb3V0cHV0LgorZG5sIEF2b2lkIHNjcmliYmxpbmcgb250byB0aGUgZW5kIG9mIGEgcG9zc2libHkgaW5jb21wbGV0ZSBsaW5lLgorCWlmIHRlc3QgIiRhdF9qb2JzIiAtZXEgMSB8fCB0ZXN0IC16ICIkYXRfdmVyYm9zZSI7IHRoZW4KKwkgIGVjaG8gPiYyCisJZmkKKwlhdF9zaWduYW1lPWBraWxsIC1sICRhdF9zaWduYWwgMj4mMSB8fCBlY2hvICRhdF9zaWduYWxgCisJc2V0IHggJGF0X3NpZ25hbWUKKwl0ZXN0ICQjIC1ndCAyICYmIGF0X3NpZ25hbWU9JGF0X3NpZ25hbAorCUFTX1dBUk4oW2NhdWdodCBzaWduYWwgJGF0X3NpZ25hbWUsIGJhaWxpbmcgb3V0XSkKK2RubCBEbyBub3QgcmVpbnN0YWxsIHRoZSBkZWZhdWx0IGhhbmRsZXIgaGVyZSBhbmQgcmVyYWlzZSB0aGUgc2lnbmFsIHRvCitkbmwgbGV0IHRoZSBkZWZhdWx0IGhhbmRsZXIgZG8gaXRzIGpvYiwgc2VlIHRoZSBub3RlIGFib3V0IGtzaCBhYm92ZS4KK2RubAl0cmFwIC0gJGF0X3NpZ25hbAorZG5sCWtpbGwgLSRhdF9zaWduYWwgJCQKK2RubCBJbnN0ZWFkLCBleGl0IHdpdGggYXBwcm9wcmlhdGUgc3RhdHVzLgorCUFTX1ZBUl9BUklUSChbZXhpdF9zdGF0dXNdLCBbMTI4ICsgJGF0X3NpZ25hbF0pCisJQVNfRVhJVChbJGV4aXRfc3RhdHVzXSknICRhdF9zaWduYWwKK2RvbmUKKworcm0gLWYgIiRhdF9zdG9wX2ZpbGUiCithdF9maXJzdD06CisKK2lmIHRlc3QgJGF0X2pvYnMgLW5lIDEgJiYKKyAgICAgcm0gLWYgIiRhdF9qb2JfZmlmbyIgJiYKKyAgICAgdGVzdCAtbiAiJGF0X2pvYl9ncm91cCIgJiYKKyAgICAgKCBta2ZpZm8gIiRhdF9qb2JfZmlmbyIgJiYgdHJhcCAnZXhpdCAxJyBQSVBFIFNUT1AgVFNUUCApIDI+L2Rldi9udWxsCit0aGVuCisgICMgRklGTyBqb2IgZGlzcGF0Y2hlci4KKworZG5sIFNpbmNlIHdlIHVzZSBqb2IgY29udHJvbCwgd2UgbmVlZCB0byBwcm9wYWdhdGUgVFNUUC4KK2RubCBUaGlzIGhhbmRsZXIgbmVlZCBub3QgYmUgdXNlZCBmb3Igc2VyaWFsIGV4ZWN1dGlvbi4KK2RubCBBZ2Fpbiwgd2Ugc2hvdWxkIHN0b3AgYWxsIHByb2Nlc3NlcyBpbiB0aGUgam9iIGdyb3Vwcywgb3RoZXJ3aXNlCitkbmwgdGhlIHN0b3BwaW5nIHdpbGwgbm90IGJlIGVmZmVjdGl2ZSB3aGlsZSBvbmUgdGVzdCBncm91cCBpcyBydW5uaW5nLgorZG5sIEFwcGFyZW50bHkga3NoIGRvZXMgbm90IGhvbm9yIHRoZSBUU1RQIHRyYXAuCitkbmwgQXMgYSBzYWZldHkgbWVhc3VyZSwgbm90IHVzZSB0aGUgc2FtZSB2YXJpYWJsZSBuYW1lcyBhcyBpbiB0aGUKK2RubCB0ZXJtaW5hdGlvbiBoYW5kbGVycyBhYm92ZSwgb25lIG1pZ2h0IGdldCBjYWxsZWQgZHVyaW5nIGV4ZWN1dGlvbgorZG5sIG9mIHRoZSBvdGhlci4KKyAgdHJhcCAnYXRfcGlkcz0KKwlmb3IgYXRfcGlkIGluIGBqb2JzIC1wYDsgZG8KKwkgIGF0X3BpZHM9IiRhdF9waWRzICRhdF9qb2JfZ3JvdXAkYXRfcGlkIgorCWRvbmUKK2RubCBTZW5kIGl0IHRvIGFsbCBzcGF3bmVkIGpvYnMsIGlnbm9yaW5nIHRob3NlIGZpbmlzaGVkIG1lYW53aGlsZS4KKwlpZiB0ZXN0IC1uICIkYXRfcGlkcyI7IHRoZW4KK2RubCBVbmZvcnR1bmF0ZWx5LCBrc2g5MyBmb3JrLWJvbWJzIHdoZW4gd2Ugc2VuZCBUU1RQLCBzbyBzZW5kIFNUT1AKK2RubCBpZiB0aGlzIG1pZ2h0IGJlIGtzaCAoU1RPUCBwcmV2ZW50cyBwb3NzaWJsZSBUU1RQIGhhbmRsZXJzIGluc2lkZQorZG5sIEFUX0NIRUNLcyBmcm9tIHJ1bm5pbmcpLiAgVGhlbiBzdG9wIG91cnNlbHZlcy4KKwkgIGF0X3NpZz1UU1RQCisJICB0ZXN0ICIke1RNT1VUK3NldH0iID0gc2V0ICYmIGF0X3NpZz1TVE9QCisJICBraWxsIC0kYXRfc2lnICRhdF9waWRzIDI+L2Rldi9udWxsCisJZmkKKwlraWxsIC1TVE9QICQkCitkbmwgV2UgZ290IGEgQ09OVCwgc28gbGV0J3MgZ28gYWdhaW4uICBQYXNzaW5nIHRoaXMgdG8gYWxsIHByb2Nlc3NlcworZG5sIGluIHRoZSBncm91cHMgaXMgbmVjZXNzYXJ5IChiZWNhdXNlIHdlIHN0b3BwZWQgdGhlbSksIGJ1dCBpdCBtYXkKK2RubCBjYXVzZSBjaGFuZ2VkIHRlc3Qgc2VtYW50aWNzOyBlLmcuLCBhIHNsZWVwIHdpbGwgYmUgaW50ZXJydXB0ZWQuCisJdGVzdCAteiAiJGF0X3BpZHMiIHx8IGtpbGwgLUNPTlQgJGF0X3BpZHMgMj4vZGV2L251bGwnIFRTVFAKKworICBlY2hvCisgICMgVHVybiBqb2JzIGludG8gYSBsaXN0IG9mIG51bWJlcnMsIHN0YXJ0aW5nIGZyb20gMS4KKyAgYXRfam9ibGlzdD1gQVNfRUNITyhbIiAkYXRfZ3JvdXBzX2FsbCAiXSkgfCBcCisgICAgc2VkICdzL1woICckYXRfam9icydcKSAuKi9cMS8nYAorCisgIHNldCBYICRhdF9qb2JsaXN0CisgIHNoaWZ0CisgIGZvciBhdF9ncm91cCBpbiAkYXRfZ3JvdXBzOyBkbworZG5sIEVuYWJsZSBqb2IgY29udHJvbCBvbmx5IGZvciBzcGF3bmluZyB0aGUgdGVzdCBncm91cDoKK2RubCBMZXQgdGhlIGpvYnMgdG8gcnVuIGluIHNlcGFyYXRlIHByb2Nlc3MgZ3JvdXBzLCBidXQKK2RubCBhdm9pZCBhbGwgdGhlIHN0YXR1cyBvdXRwdXQgYnkgdGhlIHNoZWxsLgorICAgICRhdF9qb2JfY29udHJvbF9vbiAyPi9kZXYvbnVsbAorICAgICgKKyAgICAgICMgU3RhcnQgb25lIHRlc3QgZ3JvdXAuCisgICAgICAkYXRfam9iX2NvbnRyb2xfb2ZmCisgICAgICBleGVjIEFUX0pPQl9GSUZPX0ZEPiIkYXRfam9iX2ZpZm8iCitkbmwgV2hlbiBhIGNoaWxkIHJlY2VpdmVzIFBJUEUsIGJlIHN1cmUgdG8gd3JpdGUgYmFjayB0aGUgdG9rZW4sCitkbmwgc28gdGhlIG1hc3RlciBkb2VzIG5vdCBoYW5nIHdhaXRpbmcgZm9yIGl0LgorZG5sIGVycmV4aXQgYW5kIHh0cmFjZSBzaG91bGQgbm90IGJlIHNldCBpbiB0aGlzIHNoZWxsIGluc3RhbmNlLAorZG5sIGV4Y2VwdCBhcyBkZWJ1ZyBtZWFzdXJlcy4gIEhvd2V2ZXIsIHNoZWxscyBzdWNoIGFzIGRhc2ggbWF5Citkbmwgb3B0aW1pemUgYXdheSB0aGUgX0FUX0NIRUNLIHN1YnNoZWxsLCBzbyBub3JtYWxpemUgaGVyZS4KKyAgICAgIHRyYXAgJ3NldCAreDsgc2V0ICtlCitkbmwgSWdub3JlIFBJUEUgc2lnbmFscyB0aGF0IHN0ZW0gZnJvbSB3cml0aW5nIGJhY2sgdGhlIHRva2VuLgorCSAgICB0cmFwICIiIFBJUEUKKwkgICAgZWNobyBzdG9wID4gIiRhdF9zdG9wX2ZpbGUiCisJICAgIGVjaG8gdG9rZW4gPiZBVF9KT0JfRklGT19GRAorZG5sIERvIG5vdCByZXJhaXNlIHRoZSBkZWZhdWx0IFBJUEUgaGFuZGxlci4KK2RubCBJdCB3cmVha3MgaGF2b2Mgd2l0aCBrc2gsIHNlZSBhYm92ZS4KK2RubAkgICAgdHJhcCAtIDEzCitkbmwJICAgIGtpbGwgLTEzICQkCisJICAgIEFTX0VYSVQoWzE0MV0pJyBQSVBFCisgICAgICBhdF9mbl9ncm91cF9wcmVwYXJlCisgICAgICBpZiBjZCAiJGF0X2dyb3VwX2RpciIgJiYKKwkgYXRfZm5fdGVzdCAkYXRfZ3JvdXAgJiYKKwkgLiAiJGF0X3Rlc3Rfc291cmNlIiAjIEFUX0pPQl9GSUZPX0ZEPiYtCisgICAgICB0aGVuIDo7IGVsc2UKKwlBU19XQVJOKFt1bmFibGUgdG8gcGFyc2UgdGVzdCBncm91cDogJGF0X2dyb3VwXSkKKwlhdF9mYWlsZWQ9OgorICAgICAgZmkKKyAgICAgIGF0X2ZuX2dyb3VwX3Bvc3Rwcm9jZXNzCisgICAgICBlY2hvIHRva2VuID4mQVRfSk9CX0ZJRk9fRkQKKyAgICApICYKKyAgICAkYXRfam9iX2NvbnRyb2xfb2ZmCisgICAgaWYgJGF0X2ZpcnN0OyB0aGVuCisgICAgICBhdF9maXJzdD1mYWxzZQorICAgICAgZXhlYyBBVF9KT0JfRklGT19GRDwiJGF0X2pvYl9maWZvIgorICAgIGZpCisgICAgc2hpZnQgIyBDb25zdW1lIG9uZSB0b2tlbi4KKyAgICBpZiB0ZXN0ICRbQCU6QF0gLWd0IDA7IHRoZW4gOjsgZWxzZQorICAgICAgcmVhZCBhdF90b2tlbiA8JkFUX0pPQl9GSUZPX0ZEIHx8IGJyZWFrCisgICAgICBzZXQgeCAkWypdCisgICAgZmkKKyAgICB0ZXN0IC1mICIkYXRfc3RvcF9maWxlIiAmJiBicmVhaworICBkb25lCisgICMgUmVhZCBiYWNrIHRoZSByZW1haW5pbmcgKCRhdF9qb2JzIC0gMSkgdG9rZW5zLgorICBzZXQgWCAkYXRfam9ibGlzdAorICBzaGlmdAorICBpZiB0ZXN0ICRbQCU6QF0gLWd0IDA7IHRoZW4KKyAgICBzaGlmdAorICAgIGZvciBhdF9qb2IKKyAgICBkbworICAgICAgcmVhZCBhdF90b2tlbgorICAgIGRvbmUgPCZBVF9KT0JfRklGT19GRAorICBmaQorICBleGVjIEFUX0pPQl9GSUZPX0ZEPCYtCisgIHdhaXQKK2Vsc2UKKyAgIyBSdW4gc2VyaWFsbHksIGF2b2lkIGZvcmtzIGFuZCBvdGhlciBwb3RlbnRpYWwgc3VycHJpc2VzLgorICBmb3IgYXRfZ3JvdXAgaW4gJGF0X2dyb3VwczsgZG8KKyAgICBhdF9mbl9ncm91cF9wcmVwYXJlCisgICAgaWYgY2QgIiRhdF9ncm91cF9kaXIiICYmCisgICAgICAgYXRfZm5fdGVzdCAkYXRfZ3JvdXAgJiYKKyAgICAgICAuICIkYXRfdGVzdF9zb3VyY2UiOyB0aGVuIDo7IGVsc2UKKyAgICAgIEFTX1dBUk4oW3VuYWJsZSB0byBwYXJzZSB0ZXN0IGdyb3VwOiAkYXRfZ3JvdXBdKQorICAgICAgYXRfZmFpbGVkPToKKyAgICBmaQorICAgIGF0X2ZuX2dyb3VwX3Bvc3Rwcm9jZXNzCisgICAgdGVzdCAtZiAiJGF0X3N0b3BfZmlsZSIgJiYgYnJlYWsKKyAgICBhdF9maXJzdD1mYWxzZQorICBkb25lCitmaQorCisjIFdyYXAgdXAgdGhlIHRlc3Qgc3VpdGUgd2l0aCBzdW1tYXJ5IHN0YXRpc3RpY3MuCitjZCAiJGF0X2hlbHBlcl9kaXIiCisKKyMgVXNlID8uLj8/Pz8gd2hlbiB0aGUgbGlzdCBtdXN0IHJlbWFpbiBzb3J0ZWQsIHRoZSBmYXN0ZXIgKiBvdGhlcndpc2UuCithdF9wYXNzX2xpc3Q9YGZvciBmIGluICovcGFzczsgZG8gZWNobyAkZjsgZG9uZSB8IHNlZCAnL1wqL2Q7IHMsL3Bhc3MsLCdgCithdF9za2lwX2xpc3Q9YGZvciBmIGluICovc2tpcDsgZG8gZWNobyAkZjsgZG9uZSB8IHNlZCAnL1wqL2Q7IHMsL3NraXAsLCdgCithdF94ZmFpbF9saXN0PWBmb3IgZiBpbiAqL3hmYWlsOyBkbyBlY2hvICRmOyBkb25lIHwgc2VkICcvXCovZDsgcywveGZhaWwsLCdgCithdF94cGFzc19saXN0PWBmb3IgZiBpbiA/L3hwYXNzID8/L3hwYXNzID8/Py94cGFzcyA/Pz8/L3hwYXNzOyBkbworCQkgZWNobyAkZjsgZG9uZSB8IHNlZCAnLz8vZDsgcywveHBhc3MsLCdgCithdF9mYWlsX2xpc3Q9YGZvciBmIGluID8vZmFpbCA/Py9mYWlsID8/Py9mYWlsID8/Pz8vZmFpbDsgZG8KKwkJZWNobyAkZjsgZG9uZSB8IHNlZCAnLz8vZDsgcywvZmFpbCwsJ2AKKworc2V0IFggJGF0X3Bhc3NfbGlzdCAkYXRfeHBhc3NfbGlzdCAkYXRfeGZhaWxfbGlzdCAkYXRfZmFpbF9saXN0ICRhdF9za2lwX2xpc3QKK3NoaWZ0OyBhdF9ncm91cF9jb3VudD0kW0AlOkBdCitzZXQgWCAkYXRfeHBhc3NfbGlzdDsgc2hpZnQ7IGF0X3hwYXNzX2NvdW50PSRbQCU6QF07IGF0X3hwYXNzX2xpc3Q9JFsqXQorc2V0IFggJGF0X3hmYWlsX2xpc3Q7IHNoaWZ0OyBhdF94ZmFpbF9jb3VudD0kW0AlOkBdCitzZXQgWCAkYXRfZmFpbF9saXN0OyBzaGlmdDsgYXRfZmFpbF9jb3VudD0kW0AlOkBdOyBhdF9mYWlsX2xpc3Q9JFsqXQorc2V0IFggJGF0X3NraXBfbGlzdDsgc2hpZnQ7IGF0X3NraXBfY291bnQ9JFtAJTpAXQorCitBU19WQVJfQVJJVEgoW2F0X3J1bl9jb3VudF0sIFskYXRfZ3JvdXBfY291bnQgLSAkYXRfc2tpcF9jb3VudF0pCitBU19WQVJfQVJJVEgoW2F0X3VuZXhwZWN0ZWRfY291bnRdLCBbJGF0X3hwYXNzX2NvdW50ICsgJGF0X2ZhaWxfY291bnRdKQorQVNfVkFSX0FSSVRIKFthdF90b3RhbF9mYWlsX2NvdW50XSwgWyRhdF94ZmFpbF9jb3VudCArICRhdF9mYWlsX2NvdW50XSkKKworIyBCYWNrIHRvIHRoZSB0b3AgZGlyZWN0b3J5LgorY2QgIiRhdF9kaXIiCitybSAtcmYgIiRhdF9oZWxwZXJfZGlyIgorCisjIENvbXB1dGUgdGhlIGR1cmF0aW9uIG9mIHRoZSBzdWl0ZS4KK2F0X3N0b3BfZGF0ZT1gZGF0ZWAKK2F0X3N0b3BfdGltZT1gZGF0ZSArJXMgMj4vZGV2L251bGxgCitBU19FQ0hPKFsiJGFzX21lOiBlbmRpbmcgYXQ6ICRhdF9zdG9wX2RhdGUiXSkgPiZBU19NRVNTQUdFX0xPR19GRAorY2FzZSAkYXRfc3RhcnRfdGltZSwkYXRfc3RvcF90aW1lIGluCisgIFtbMC05XSosWzAtOV0qXSkKKyAgICBBU19WQVJfQVJJVEgoW2F0X2R1cmF0aW9uX3NdLCBbJGF0X3N0b3BfdGltZSAtICRhdF9zdGFydF90aW1lXSkKKyAgICBBU19WQVJfQVJJVEgoW2F0X2R1cmF0aW9uX21dLCBbJGF0X2R1cmF0aW9uX3MgLyA2MF0pCisgICAgQVNfVkFSX0FSSVRIKFthdF9kdXJhdGlvbl9oXSwgWyRhdF9kdXJhdGlvbl9tIC8gNjBdKQorICAgIEFTX1ZBUl9BUklUSChbYXRfZHVyYXRpb25fc10sIFskYXRfZHVyYXRpb25fcyAlIDYwXSkKKyAgICBBU19WQVJfQVJJVEgoW2F0X2R1cmF0aW9uX21dLCBbJGF0X2R1cmF0aW9uX20gJSA2MF0pCisgICAgYXRfZHVyYXRpb249IiR7YXRfZHVyYXRpb25faH1oICR7YXRfZHVyYXRpb25fbX1tICR7YXRfZHVyYXRpb25fc31zIgorICAgIEFTX0VDSE8oWyIkYXNfbWU6IHRlc3Qgc3VpdGUgZHVyYXRpb246ICRhdF9kdXJhdGlvbiJdKSA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgOzsKK2VzYWMKKworZWNobworQVNfQk9YKFtUZXN0IHJlc3VsdHMuXSkKK2VjaG8KK3sKKyAgZWNobworICBBU19CT1goW1Rlc3QgcmVzdWx0cy5dKQorICBlY2hvCit9ID4mQVNfTUVTU0FHRV9MT0dfRkQKKworZG5sCitkbmwgRklYTUU6IHRoaXMgY29kZSBpcyBhcyBmYXIgZnJvbSBpMThuLWNsZWFubmVzcyBhcyBtYW4KK2RubCBjb3VsZCBpbWFnaW5lLi4uCitkbmwKK2lmIHRlc3QgJGF0X3J1bl9jb3VudCA9IDE7IHRoZW4KKyAgYXRfcmVzdWx0PSIxIHRlc3QiCisgIGF0X3dlcmU9d2FzCitlbHNlCisgIGF0X3Jlc3VsdD0iJGF0X3J1bl9jb3VudCB0ZXN0cyIKKyAgYXRfd2VyZT13ZXJlCitmaQoraWYgJGF0X2VycmV4aXRfcCAmJiB0ZXN0ICRhdF91bmV4cGVjdGVkX2NvdW50ICE9IDA7IHRoZW4KKyAgaWYgdGVzdCAkYXRfeHBhc3NfY291bnQgPSAxOyB0aGVuCisgICAgYXRfcmVzdWx0PSIkYXRfcmVzdWx0ICRhdF93ZXJlIHJ1biwgb25lIHBhc3NlZCIKKyAgZWxzZQorICAgIGF0X3Jlc3VsdD0iJGF0X3Jlc3VsdCAkYXRfd2VyZSBydW4sIG9uZSBmYWlsZWQiCisgIGZpCisgIGF0X3Jlc3VsdD0iJGF0X3Jlc3VsdCB1bmV4cGVjdGVkbHkgYW5kIGluaGliaXRlZCBzdWJzZXF1ZW50IHRlc3RzLiIKK2Vsc2UKKyAgIyBEb24ndCB5b3UganVzdCBsb3ZlIGV4cG9uZW50aWFsIGV4cGxvc2lvbiBvZiB0aGUgbnVtYmVyIG9mIGNhc2VzPworICBjYXNlICRhdF94cGFzc19jb3VudDokYXRfZmFpbF9jb3VudDokYXRfeGZhaWxfY291bnQgaW4KKyAgICAjIFNvIGZhciwgc28gZ29vZC4KKyAgICAwOjA6MCkgYXRfcmVzdWx0PSIkYXRfcmVzdWx0ICRhdF93ZXJlIHN1Y2Nlc3NmdWwuIiA7OworICAgIDA6MDoqKSBhdF9yZXN1bHQ9IiRhdF9yZXN1bHQgYmVoYXZlZCBhcyBleHBlY3RlZC4iIDs7CisKKyAgICAjIFNvbWUgdW5leHBlY3RlZCBmYWlsdXJlcworICAgIDA6KjowKSBhdF9yZXN1bHQ9IiRhdF9yZXN1bHQgJGF0X3dlcmUgcnVuLAorJGF0X2ZhaWxfY291bnQgZmFpbGVkIHVuZXhwZWN0ZWRseS4iIDs7CisKKyAgICAjIFNvbWUgZmFpbHVyZXMsIGJvdGggZXhwZWN0ZWQgYW5kIHVuZXhwZWN0ZWQKKyAgICAwOio6MSkgYXRfcmVzdWx0PSIkYXRfcmVzdWx0ICRhdF93ZXJlIHJ1biwKKyRhdF90b3RhbF9mYWlsX2NvdW50IGZhaWxlZCAoJGF0X3hmYWlsX2NvdW50IGV4cGVjdGVkIGZhaWx1cmUpLiIgOzsKKyAgICAwOio6KikgYXRfcmVzdWx0PSIkYXRfcmVzdWx0ICRhdF93ZXJlIHJ1biwKKyRhdF90b3RhbF9mYWlsX2NvdW50IGZhaWxlZCAoJGF0X3hmYWlsX2NvdW50IGV4cGVjdGVkIGZhaWx1cmVzKS4iIDs7CisKKyAgICAjIE5vIHVuZXhwZWN0ZWQgZmFpbHVyZXMsIGJ1dCBzb21lIHhwYXNzZXMKKyAgICAqOjA6KikgYXRfcmVzdWx0PSIkYXRfcmVzdWx0ICRhdF93ZXJlIHJ1biwKKyRhdF94cGFzc19jb3VudCBwYXNzZWQgdW5leHBlY3RlZGx5LiIgOzsKKworICAgICMgTm8gZXhwZWN0ZWQgZmFpbHVyZXMsIGJ1dCBmYWlsdXJlcyBhbmQgeHBhc3NlcworICAgICo6MTowKSBhdF9yZXN1bHQ9IiRhdF9yZXN1bHQgJGF0X3dlcmUgcnVuLAorJGF0X3VuZXhwZWN0ZWRfY291bnQgZGlkIG5vdCBiZWhhdmUgYXMgZXhwZWN0ZWQgZG5sCisoJGF0X2ZhaWxfY291bnQgdW5leHBlY3RlZCBmYWlsdXJlKS4iIDs7CisgICAgKjoqOjApIGF0X3Jlc3VsdD0iJGF0X3Jlc3VsdCAkYXRfd2VyZSBydW4sCiskYXRfdW5leHBlY3RlZF9jb3VudCBkaWQgbm90IGJlaGF2ZSBhcyBleHBlY3RlZCBkbmwKKygkYXRfZmFpbF9jb3VudCB1bmV4cGVjdGVkIGZhaWx1cmVzKS4iIDs7CisKKyAgICAjIEFsbCBvZiB0aGVtLgorICAgICo6KjoxKSBhdF9yZXN1bHQ9IiRhdF9yZXN1bHQgJGF0X3dlcmUgcnVuLAorJGF0X3hwYXNzX2NvdW50IHBhc3NlZCB1bmV4cGVjdGVkbHksCiskYXRfdG90YWxfZmFpbF9jb3VudCBmYWlsZWQgKCRhdF94ZmFpbF9jb3VudCBleHBlY3RlZCBmYWlsdXJlKS4iIDs7CisgICAgKjoqOiopIGF0X3Jlc3VsdD0iJGF0X3Jlc3VsdCAkYXRfd2VyZSBydW4sCiskYXRfeHBhc3NfY291bnQgcGFzc2VkIHVuZXhwZWN0ZWRseSwKKyRhdF90b3RhbF9mYWlsX2NvdW50IGZhaWxlZCAoJGF0X3hmYWlsX2NvdW50IGV4cGVjdGVkIGZhaWx1cmVzKS4iIDs7CisgIGVzYWMKKworICBpZiB0ZXN0ICRhdF9za2lwX2NvdW50ID0gMCAmJiB0ZXN0ICRhdF9ydW5fY291bnQgLWd0IDE7IHRoZW4KKyAgICBhdF9yZXN1bHQ9IkFsbCAkYXRfcmVzdWx0IgorICBmaQorZmkKKworIyBOb3cgcHV0IHNraXBzIGluIHRoZSBtaXguCitjYXNlICRhdF9za2lwX2NvdW50IGluCisgIDApIDs7CisgIDEpIGF0X3Jlc3VsdD0iJGF0X3Jlc3VsdAorMSB0ZXN0IHdhcyBza2lwcGVkLiIgOzsKKyAgKikgYXRfcmVzdWx0PSIkYXRfcmVzdWx0CiskYXRfc2tpcF9jb3VudCB0ZXN0cyB3ZXJlIHNraXBwZWQuIiA7OworZXNhYworCitpZiB0ZXN0ICRhdF91bmV4cGVjdGVkX2NvdW50ID0gMDsgdGhlbgorICBlY2hvICIkYXRfcmVzdWx0IgorICBlY2hvICIkYXRfcmVzdWx0IiA+JkFTX01FU1NBR0VfTE9HX0ZECitlbHNlCisgIGVjaG8gIkVSUk9SOiAkYXRfcmVzdWx0IiA+JjIKKyAgZWNobyAiRVJST1I6ICRhdF9yZXN1bHQiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgeworICAgIGVjaG8KKyAgICBBU19CT1goW1N1bW1hcnkgb2YgdGhlIGZhaWx1cmVzLl0pCisKKyAgICAjIFN1bW1hcnkgb2YgZmFpbGVkIGFuZCBza2lwcGVkIHRlc3RzLgorICAgIGlmIHRlc3QgJGF0X2ZhaWxfY291bnQgIT0gMDsgdGhlbgorICAgICAgZWNobyAiRmFpbGVkIHRlc3RzOiIKKyAgICAgICRTSEVMTCAiJGF0X215c2VsZiIgJGF0X2ZhaWxfbGlzdCAtLWxpc3QKKyAgICAgIGVjaG8KKyAgICBmaQorICAgIGlmIHRlc3QgJGF0X3NraXBfY291bnQgIT0gMDsgdGhlbgorICAgICAgZWNobyAiU2tpcHBlZCB0ZXN0czoiCisgICAgICAkU0hFTEwgIiRhdF9teXNlbGYiICRhdF9za2lwX2xpc3QgLS1saXN0CisgICAgICBlY2hvCisgICAgZmkKKyAgICBpZiB0ZXN0ICRhdF94cGFzc19jb3VudCAhPSAwOyB0aGVuCisgICAgICBlY2hvICJVbmV4cGVjdGVkIHBhc3NlczoiCisgICAgICAkU0hFTEwgIiRhdF9teXNlbGYiICRhdF94cGFzc19saXN0IC0tbGlzdAorICAgICAgZWNobworICAgIGZpCisgICAgaWYgdGVzdCAkYXRfZmFpbF9jb3VudCAhPSAwOyB0aGVuCisgICAgICBBU19CT1goW0RldGFpbGVkIGZhaWxlZCB0ZXN0cy5dKQorICAgICAgZWNobworICAgICAgZm9yIGF0X2dyb3VwIGluICRhdF9mYWlsX2xpc3QKKyAgICAgIGRvCisJYXRfZ3JvdXBfbm9ybWFsaXplZD0kYXRfZ3JvdXAKKwlfQVRfTk9STUFMSVpFX1RFU1RfR1JPVVBfTlVNQkVSKGF0X2dyb3VwX25vcm1hbGl6ZWQpCisJY2F0ICIkYXRfc3VpdGVfZGlyLyRhdF9ncm91cF9ub3JtYWxpemVkLyRhc19tZS5sb2ciCisJZWNobworICAgICAgZG9uZQorICAgICAgZWNobworICAgIGZpCisgICAgaWYgdGVzdCAtbiAiJGF0X3RvcF9zcmNkaXIiOyB0aGVuCisgICAgICBBU19CT1goWyR7YXRfdG9wX2J1aWxkX3ByZWZpeH1jb25maWcubG9nXSkKKyAgICAgIHNlZCAncy9eL3wgLycgJHthdF90b3BfYnVpbGRfcHJlZml4fWNvbmZpZy5sb2cKKyAgICAgIGVjaG8KKyAgICBmaQorICB9ID4mQVNfTUVTU0FHRV9MT0dfRkQKKworICBBU19CT1goWyRhc19tZS5sb2cgd2FzIGNyZWF0ZWQuXSkKKworICBlY2hvCisgIGlmICRhdF9kZWJ1Z19wOyB0aGVuCisgICAgYXRfbXNnPSdwZXItdGVzdCBsb2cgZmlsZXMnCisgIGVsc2UKKyAgICBhdF9tc2c9IlxgJHthdF90ZXN0ZGlyKyR7YXRfdGVzdGRpcn0vfSRhc19tZS5sb2cnIgorICBmaQorICBBU19FQ0hPKFsiUGxlYXNlIHNlbmQgJGF0X21zZyBhbmQgYWxsIGluZm9ybWF0aW9uIHlvdSB0aGluayBtaWdodCBoZWxwOgorCisgICBUbzogPEFUX1BBQ0tBR0VfQlVHUkVQT1JUPgorICAgU3ViamVjdDogQDw6QEFUX1BBQ0tBR0VfU1RSSU5HQDo+QCAkYXNfbWU6IGRubAorJGF0X2ZhaWxfbGlzdCR7YXRfZmFpbF9saXN0OisgZmFpbGVkJHthdF94cGFzc19saXN0OissIH19ZG5sCiskYXRfeHBhc3NfbGlzdCR7YXRfeHBhc3NfbGlzdDorIHBhc3NlZCB1bmV4cGVjdGVkbHl9CisKK1lvdSBtYXkgaW52ZXN0aWdhdGUgYW55IHByb2JsZW0gaWYgeW91IGZlZWwgYWJsZSB0byBkbyBzbywgaW4gd2hpY2gKK2Nhc2UgdGhlIHRlc3Qgc3VpdGUgcHJvdmlkZXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiAgSXRzIG91dHB1dCBtYXkKK2JlIGZvdW5kIGJlbG93IFxgJHthdF90ZXN0ZGlyKyR7YXRfdGVzdGRpcn0vfSRhc19tZS5kaXInLgorIl0pCisgIGV4aXQgMQorZmkKKworZXhpdCAwCisKK200X3RleHRfYm94KFtBY3R1YWwgdGVzdHMuXSkKK200X2RpdmVydF9wb3AoW1RFU1RTXSlkbmwKK2RubCBFbmQgb2YgQVRfSU5JVDogZGl2ZXJ0IHRvIEtJTEwsIG9ubHkgdGVzdCBncm91cHMgYXJlIHRvIGJlCitkbmwgb3V0cHV0LCB0aGUgcmVzdCBpcyBpZ25vcmVkLiAgQ3VycmVudCBkaXZlcnNpb24gaXMgQk9EWSwgaW5oZXJpdGVkCitkbmwgZnJvbSBNNHNoLgorbTRfZGl2ZXJ0KFtLSUxMXSkKK10pIyBBVF9JTklUCisKKworIyBfQVRfQVJHX09QVElPTihPUFRJT05TLEhFTFAtVEVYVCxbQVJHU10sW0FDVElPTi1JRi1HSVZFTl0sCisjICAgICAgICAgICAgICAgIFtBQ1RJT04tSUYtTk9ULUdJVkVOXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBBVF9BUkdfT1BUSU9OICYgQVRfQVJHX09QVElPTl9BUkcKK200X2RlZnVuKFtfQVRfQVJHX09QVElPTl0sCitbbTRfZGl2ZXJ0X29uY2UoW0hFTFBfT1RIRVJdLAorW2NhdCA8PF9BVEVPRiB8fCBhdF93cml0ZV9mYWlsPTEKKworT3RoZXIgb3B0aW9uczoKK19BVEVPRgorXSlkbmwgbTRfZGl2ZXJ0X29uY2UgSEVMUF9PVEhFUgorbTRfZGl2ZXJ0X3RleHQoW0hFTFBfT1RIRVJdLAorW2NhdCA8PF9BVEVPRiB8fCBhdF93cml0ZV9mYWlsPTEKKyQyCitfQVRFT0ZdKWRubAorZG5sIFR1cm4gb3VyIG9wdGlvbnMgaW50byBvdXIgZGVzaXJlZCBzdHJpbmdzCittNF9pZmRlZihbQVRfZmlyc3Rfb3B0aW9uXSxbbTRfdW5kZWZpbmUoW0FUX2ZpcnN0X29wdGlvbl0pXSlkbmwKK200X2lmZGVmKFtBVF9jYXNlXSxbbTRfdW5kZWZpbmUoW0FUX2Nhc2VdKV0pZG5sCittNF9pZmRlZihbQVRfY2FzZV9ub10sW200X3VuZGVmaW5lKFtBVF9jYXNlX25vXSldKWRubAorbTRfaWZkZWYoW0FUX2Nhc2VfYXJnXSxbbTRfdW5kZWZpbmUoW0FUX2Nhc2VfYXJnXSldKWRubAorbTRfZm9yZWFjaChbQVRfb3B0aW9uXSwgbTRfc3BsaXQobTRfbm9ybWFsaXplKFskMV0pLFtbIFx8XStdKSwKK1ttNF9kZWZpbmVfZGVmYXVsdChbQVRfZmlyc3Rfb3B0aW9uXSxBVF9vcHRpb24pZG5sCittNF9hcHBlbmQoW0FUX2Nhc2VdLG00X2lmKG00X2xlbihBVF9vcHRpb24pLDEsW10sWy1dKVstXUFUX29wdGlvbiwgWyB8IF0pZG5sCittNF9hcHBlbmQoW0FUX2Nhc2Vfbm9dLFstLW5vXUFUX29wdGlvbiwgWyB8IF0pZG5sCittNF9hcHBlbmQoW0FUX2Nhc2VfYXJnXSwKKwkgIG00X2lmKG00X2xlbihBVF9vcHRpb24pLDEsW10sWy1dKVstXUFUX29wdGlvbls9Kl0sIFsgfCBdKWRubAorXSlkbmwgbTRfZm9yZWFjaCBBVF9vcHRpb24KK2RubCBrZWVwIHRyYWNrIHNvIHdlIG9yIHRoZSB1c2VyIG1heSBwcm9jZXNzIEFDVElPTi1JRi1OT1QtR0lWRU4KK200X2RpdmVydF9vbmNlKFtQQVJTRV9BUkdTX0JFR0lOXSwKK1sKKyMjCisjIyBTZXQgdXAgcGFja2FnZSBzcGVjaWZpYyBvcHRpb25zLgorIyMKK10pZG5sCittNF9kaXZlcnRfdGV4dChbUEFSU0VfQVJHU19CRUdJTl0sCitbZG5sIFByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlIGZvciBvcHRpb25zIHdpdGhvdXQgYXJndW1lbnRzLgorbTRfaWZ2YWxuKFskM10sLFthdF9hcmdfW11tNF9icGF0c3Vic3QoW0FUX2ZpcnN0X29wdGlvbl0sIC0sIF8pPWZhbHNlXSlkbmwKK2F0X2FyZ19naXZlbl9bXW00X2JwYXRzdWJzdChbQVRfZmlyc3Rfb3B0aW9uXSwgLSwgXyk9ZmFsc2UKK10pZG5sIG00X2RpdmVydF90ZXh0IERFRkFVTFRTCittNF9kaXZlcnRfdGV4dChbUEFSU0VfQVJHU10sCitbZG5sIFBhcnNlIHRoZSBvcHRpb25zIGFuZCBhcmdzIHdoZW4gbmVjZXNzYXJ5LgorbTRfaWZ2YWxuKFskM10sCitbICAgIEFUX2Nhc2UgKQorCWF0X3ByZXY9LS1tNF9icGF0c3Vic3QoW0FUX2ZpcnN0X29wdGlvbl0sIC0sIF8pCisJOzsKKyAgICBBVF9jYXNlX2FyZyApCisJYXRfYXJnX1tdbTRfYnBhdHN1YnN0KFtBVF9maXJzdF9vcHRpb25dLCAtLCBfKT0kYXRfb3B0YXJnCisJYXRfYXJnX2dpdmVuX1tdbTRfYnBhdHN1YnN0KFtBVF9maXJzdF9vcHRpb25dLCAtLCBfKT06CisJJDQKKwk7O10sCitbICAgIEFUX2Nhc2UgKQorCWF0X29wdGFyZz06CisJYXRfYXJnX1tdbTRfYnBhdHN1YnN0KFtBVF9maXJzdF9vcHRpb25dLCAtLCBfKT06CisJYXRfYXJnX2dpdmVuX1tdbTRfYnBhdHN1YnN0KFtBVF9maXJzdF9vcHRpb25dLCAtLCBfKT06CisJbTRfaWZ2YWwoWyQ0XSxbJDRdKWRubAorCTs7CisgICAgQVRfY2FzZV9ubyApCisJYXRfb3B0YXJnPWZhbHNlCisJYXRfYXJnX1tdbTRfYnBhdHN1YnN0KFtBVF9maXJzdF9vcHRpb25dLCAtLCBfKT1mYWxzZQorCWF0X2FyZ19naXZlbl9bXW00X2JwYXRzdWJzdChbQVRfZmlyc3Rfb3B0aW9uXSwgLSwgXyk9OgorCW00X2lmdmFsKFskNF0sWyQ0XSlkbmwKKwk7O10pZG5sIG00X2lmdmFsbiAkMworXSlkbmwgbTRfZGl2ZXJ0X3RleHQgUEFSU0VfQVJHUworbTRfaWZ2YWxuKFskNV0sCitbbTRfZGl2ZXJ0X29uY2UoW1BBUlNFX0FSR1NfRU5EXSwKK1sKKyMjCisjIyBQcm9jZXNzIHBhY2thZ2Ugc3BlY2lmaWMgb3B0aW9ucyB3aGVuIF9ub3RfIHN1cHBsaWVkLgorIyNdKWRubCBtNF9kaXZlcnRfb25jZSBQQVJTRV9BUkdTX0VORAorbTRfZGl2ZXJ0X3RleHQoW1BBUlNFX0FSR1NfRU5EXSwKK1sKK0FTX0lGKFskYXRfYXJnX2dpdmVuX1tdbTRfYnBhdHN1YnN0KFtBVF9maXJzdF9vcHRpb25dLCAtLCBfKV0sLFskNV0pZG5sCitdKWRubCBtNF9kaXZlcnRfdGV4dCBQQVJTRV9BUkdTX0VORAorXSlkbmwgbTRfaWZ2YWxuICQ1CitdKWRubCBfQVRfQVJHX09QVElPTgorCisKKyMgQVRfQVJHX09QVElPTihPUFRJT05TLEhFTFAtVEVYVCxbQUNUSU9OLUlGLUdJVkVOXSxbQUNUSU9OLUlGLU5PVC1HSVZFTl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBY2NlcHQgYSBzZXQgb2YgT1BUSU9OUyB3aXRoIGFyZ3VtZW50cy4gIEFkZCBIRUxQLVRFWFQgdG8gdGhlIEhFTFBfT1RIRVIKKyMgZGl2ZXJzaW9uLgorIworIyBQcmVjZWRpbmcgZGFzaGVzIHNob3VsZCBub3QgYmUgcGFzc2VkIGludG8gT1BUSU9OUy4gIFVzZXJzIHdpbGwgYmUgcmVxdWlyZWQKKyMgdG8gcGFzcyBgLS0nIGJlZm9yZSBsb25nIG9wdGlvbnMgYW5kIGAtJyBiZWZvcmUgc2luZ2xlIGNoYXJhY3RlciBvcHRpb25zLgorIworIyAkYXRfYXJnX09QVElPTiB3aWxsIGJlIHNldCB0byBgOicgaWYgdGhpcyBvcHRpb24gaXMgcmVjZWl2ZWQsIGBmYWxzZScgaWYKKyMgaWYgLS1ub09QVElPTiBpcyByZWNlaXZlZCwgYW5kIGBmYWxzZScgYnkgZGVmYXVsdC4KKyMKKyMgUnVuIEFDVElPTi1JRi1HSVZFTiBlYWNoIHRpbWUgYW4gb3B0aW9uIGluIE9QVElPTlMgaXMgZW5jb3VudGVyZWQgd2l0aAorIyAkYXRfb3B0YXJnIHNldCB0byBgOicgb3IgYGZhbHNlJyBhcyBhcHByb3ByaWF0ZS4gICRhdF9vcHRhcmcgaXMgYWN0dWFsbHkKKyMganVzdCBhIGNvcHkgb2YgJGF0X2FyZ19PUFRJT04uCisjCisjIEFDVElPTi1JRi1OT1QtR0lWRU4gd2lsbCBiZSBydW4gb25jZSBhZnRlciBvcHRpb24gcGFyc2luZyBpcyBjb21wbGV0ZQorIyBpZiBubyBvcHRpb24gZnJvbSBPUFRJT05TIHdhcyBmb3VuZC4KK200X2RlZnVuKFtBVF9BUkdfT1BUSU9OXSxbX0FUX0FSR19PUFRJT04oWyQxXSxbJDJdLCxbJDNdLFskNF0pXSkKKworCisjIEFUX0FSR19PUFRJT05fQVJHKE9QVElPTlMsSEVMUC1URVhULFtBQ1RJT04tSUYtR0lWRU5dLFtBQ1RJT04tSUYtTk9ULUdJVkVOXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFjY2VwdCBhIHNldCBvZiBPUFRJT05TIHdpdGggYXJndW1lbnRzLCBzZXBlcmF0ZWQgYnkgY29tbWFzLiAgQWRkIEhFTFAtVEVYVAorIyB0byB0aGUgSEVMUF9PVEhFUiBkaXZlcnNpb24uCisjCisjIFByZWNlZGluZyBkYXNoZXMgc2hvdWxkIG5vdCBiZSBwYXNzZWQgaW50byBPUFRJT05TLiAgVXNlcnMgd2lsbCBiZSByZXF1aXJlZAorIyB0byBwYXNzIGAtLScgYmVmb3JlIGxvbmcgb3B0aW9ucyBhbmQgYC0nIGJlZm9yZSBzaW5nbGUgY2hhcmFjdGVyIG9wdGlvbnMuCisjCisjIEJ5IGRlZmF1bHQsIGFueSBhcmd1bWVudCB0byB0aGVzZSBvcHRpb25zIHdpbGwgYmUgYXNzaWduZWQgdG8gdGhlIHNoZWxsCisjIHZhcmlhYmxlICRhdF9hcmdfT1BUSU9OLCB3aGVyZSBPUFRJT04gaXMgdGhlIGZpcnN0IG9wdGlvbiBpbiBPUFRJT05TIHdpdGgKKyMgYW55IGAtJyBjaGFyYWN0ZXJzIHJlcGxhY2VkIHdpdGggYF8nLgorIworIyBSdW4gQUNUSU9OLUlGLUdJVkVOIGVhY2ggdGltZSBhbiBvcHRpb24gaW4gT1BUSU9OUyBpcyBlbmNvdW50ZXJlZCB3aXRoCisjICRhdF9vcHRhcmcgc2V0LiAgJGF0X29wdGFyZyBpcyBhY3R1YWxseSBqdXN0IGEgY29weSBvZiAkYXRfYXJnX09QVElPTi4KKyMKKyMgQUNUSU9OLUlGLU5PVC1HSVZFTiB3aWxsIGJlIHJ1biBvbmNlIGFmdGVyIG9wdGlvbiBwYXJzaW5nIGlzIGNvbXBsZXRlCisjIGlmIG5vIG9wdGlvbiBmcm9tIE9QVElPTlMgd2FzIGZvdW5kLgorbTRfZGVmdW4oW0FUX0FSR19PUFRJT05fQVJHXSxbX0FUX0FSR19PUFRJT04oWyQxXSxbJDJdLDEsWyQzXSxbJDRdKV0pCisKKworIyBBVF9URVNURUQoUFJPR1JBTVMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU3BlY2lmeSB0aGUgbGlzdCBvZiBwcm9ncmFtcyBleGVyY2lzZWQgYnkgdGhlIHRlc3Qgc3VpdGUuICBUaGVpcgorIyB2ZXJzaW9ucyBhcmUgbG9nZ2VkLCBhbmQgaW4gdGhlIGNhc2Ugb2YgZW1iZWRkZWQgdGVzdCBzdWl0ZSwgdGhleQorIyBtdXN0IGNvcnJlc3BvbmQgdG8gdGhlIHZlcnNpb24gb2YgdGhlIHBhY2thZ2UuICBQQVRIIHNob3VsZCBiZQorIyBhbHJlYWR5IHByZXNldCBzbyB0aGUgcHJvcGVyIGV4ZWN1dGFibGUgd2lsbCBiZSBzZWxlY3RlZC4KK200X2RlZmluZShbQVRfVEVTVEVEXSwKK1ttNF9hcHBlbmRfdW5pcV93KFtBVF90ZXN0ZWRdLCBbJDFdKV0pCisKKworIyBBVF9DT1BZUklHSFQoVEVYVCwgW0ZJTFRFUiA9IG00X25ld2xpbmVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbWl0IFRFWFQsIGEgY29weXJpZ2h0IG5vdGljZSwgaW4gdGhlIHRvcCBvZiB0aGUgdGVzdCBzdWl0ZSBhbmQgaW4KKyMgLS12ZXJzaW9uIG91dHB1dC4gIE1hY3JvcyBpbiBURVhUIGFyZSBldmFsdWF0ZWQgb25jZS4gIFByb2Nlc3MKKyMgdGhlIC0tdmVyc2lvbiBvdXRwdXQgdGhyb3VnaCBGSUxURVIgKG00X25ld2xpbmUsIG00X2RvLCBhbmQKKyMgbTRfY29weXJpZ2h0X2NvbmRlbnNlIGFyZSBjb21tb24gZmlsdGVycykuCittNF9kZWZpbmUoW0FUX0NPUFlSSUdIVF0sCitbQVNfQ09QWVJJR0hUKFskMV0pW11dZG5sCitbbTRfZGl2ZXJ0X3RleHQoW1ZFUlNJT05fTk9USUNFU10sCitbbTRfZGVmYXVsdChbJDJdLCBbbTRfbmV3bGluZV0pKFskMV0pXSldKSMgQVRfQ09QWVJJR0hUCisKKworIyBBVF9TRVRVUChERVNDUklQVElPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFN0YXJ0IGEgZ3JvdXAgb2YgcmVsYXRlZCB0ZXN0cywgYWxsIHRvIGJlIGV4ZWN1dGVkIGluIHRoZSBzYW1lIHN1YnNoZWxsLgorIyBUaGUgZ3JvdXAgaXMgdGVzdGluZyB3aGF0IERFU0NSSVBUSU9OIHNheXMuCitfQVRfREVGSU5FX0lOSVQoW0FUX1NFVFVQXSwKK1ttNF9pZmRlZihbQVRfaW5ncm91cF0sIFttNF9mYXRhbChbJDA6IG5lc3RlZCBBVF9TRVRVUCBkZXRlY3RlZF0pXSwKKyAgW200X2RlZmluZShbQVRfaW5ncm91cF0sIFtBU19FQ0hPKFsiJGF0X3NldHVwX2xpbmUiXSkgPiIkYXRfY2hlY2tfbGluZV9maWxlIgorXSldKQorbTRfaWZkZWYoW0FUX2tleXdvcmRzXSwgW200X3VuZGVmaW5lKFtBVF9rZXl3b3Jkc10pXSkKK200X2RlZmluZShbQVRfY2FwdHVyZV9maWxlc10sIFtdKQorbTRfZGVmaW5lKFtBVF9saW5lXSwgQVRfTElORSkKK200X2RlZmluZShbQVRfeGZhaWxdLCBbYXRfeGZhaWw9bm9dKQorbTRfZGVmaW5lKFtBVF9kZXNjcmlwdGlvbl0sIG00X2V4cGFuZChbJDFdKSkKK200X2RlZmluZShbQVRfb3JkaW5hbF0sIG00X2luY3IoQVRfb3JkaW5hbCkpCittNF9hcHBlbmQoW0FUX2dyb3Vwc19hbGxdLCBbIF1tNF9kZWZuKFtBVF9vcmRpbmFsXSkpCittNF9kaXZlcnRfcHVzaChbVEVTVF9HUk9VUFNdKWRubAorWyNBVF9TVEFSVF9dQVRfb3JkaW5hbAorQCU6QCBBVF9vcmRpbmFsLiBtNF9kZWZuKFtBVF9saW5lXSk6IG00X2RlZm4oW0FUX2Rlc2NyaXB0aW9uXSkKK2F0X3NldHVwX2xpbmU9J200X2RlZm4oW0FUX2xpbmVdKScKK200X2lmKEFUX2Jhbm5lcl9vcmRpbmFsLCBbMF0sIFtdLCBbYXRfZm5fYmFubmVyIEFUX2Jhbm5lcl9vcmRpbmFsCitdKWRubAorYXRfZGVzYz0iQVNfRVNDQVBFKG00X2RxdW90ZShtNF9kZWZuKFtBVF9kZXNjcmlwdGlvbl0pKSkiCithdF9kZXNjX2xpbmU9bTRfZm9ybWF0KFsiJTNkOiAkYXRfZGVzYyUqcyJdLCBBVF9vcmRpbmFsLAorICBtNF9tYXgoMCwgbTRfZXZhbCg0NyAtIG00X3FsZW4obTRfZGVmbihbQVRfZGVzY3JpcHRpb25dKSkpKSwgW10pCiskYXRfcXVpZXQgQVNfRUNIT19OKFsiJGF0X2Rlc2NfbGluZSJdKQorbTRfZGl2ZXJ0X3B1c2goW1RFU1RfU0NSSVBUXSlkbmwKK10pCisKKworIyBBVF9GQUlMX0lGKFNIRUxMLUVYUFJFU1NJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1ha2UgdGhlIHRlc3QgZGllIHdpdGggaGFyZCBmYWlsdXJlIGlmIFNIRUxMLUVYUFJFU1NJT04gZXZhbHVhdGVzIHRvCisjIHRydWUgKGV4aXRjb2RlID0gMCkuCitfQVRfREVGSU5FX1NFVFVQKFtBVF9GQUlMX0lGXSwKK1tkbmwKK2RubCBUcnkgdG8gbGltaXQgdGhlIGFtb3VudCBvZiBjb25kaXRpb25hbHMgdGhhdCB3ZSBlbWl0LgorbTRfY2FzZShbJDFdLAorICAgICAgW10sIFtdLAorICAgICAgW2ZhbHNlXSwgW10sCisgICAgICBbOl0sIFtfQVRfQ0hFQ0tfRVhJVChbXSwgWzk5XSldLAorICAgICAgW3RydWVdLCBbX0FUX0NIRUNLX0VYSVQoW10sIFs5OV0pXSwKKyAgICAgIFtfQVRfQ0hFQ0tfRVhJVChbJDFdLCBbOTldKV0pXSkKKworCisjIEFUX1NLSVBfSUYoU0hFTEwtRVhQUkVTU0lPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2tpcCB0aGUgcmVzdCBvZiB0aGUgZ3JvdXAgaWYgU0hFTEwtRVhQUkVTU0lPTiBldmFsdWF0ZXMgdG8gdHJ1ZQorIyAoZXhpdGNvZGUgPSAwKS4KK19BVF9ERUZJTkVfU0VUVVAoW0FUX1NLSVBfSUZdLAorW2RubAorZG5sIFRyeSB0byBsaW1pdCB0aGUgYW1vdW50IG9mIGNvbmRpdGlvbmFscyB0aGF0IHdlIGVtaXQuCittNF9jYXNlKFskMV0sCisgICAgICBbXSwgW10sCisgICAgICBbZmFsc2VdLCBbXSwKKyAgICAgIFs6XSwgW19BVF9DSEVDS19FWElUKFtdLCBbNzddKV0sCisgICAgICBbdHJ1ZV0sIFtfQVRfQ0hFQ0tfRVhJVChbXSwgWzc3XSldLAorICAgICAgW19BVF9DSEVDS19FWElUKFskMV0sIFs3N10pXSldKQorCisKKyMgQVRfWEZBSUxfSUYoU0hFTEwtRVhQUkVTU0lPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IHVwIHRoZSB0ZXN0IHRvIGJlIGV4cGVjdGVkIHRvIGZhaWwgaWYgU0hFTEwtRVhQUkVTU0lPTiBldmFsdWF0ZXMgdG8KKyMgdHJ1ZSAoZXhpdGNvZGUgPSAwKS4KK19BVF9ERUZJTkVfU0VUVVAoW0FUX1hGQUlMX0lGXSwKK1tkbmwKK2RubCBUcnkgdG8gbGltaXQgdGhlIGFtb3VudCBvZiBjb25kaXRpb25hbHMgdGhhdCB3ZSBlbWl0LgorbTRfY2FzZShbJDFdLAorICAgICAgW10sIFtdLAorICAgICAgW2ZhbHNlXSwgW10sCisgICAgICBbOl0sIFttNF9kZWZpbmUoW0FUX3hmYWlsXSwgW2F0X3hmYWlsPXllc10pXSwKKyAgICAgIFt0cnVlXSwgW200X2RlZmluZShbQVRfeGZhaWxdLCBbYXRfeGZhaWw9eWVzXSldLAorICAgICAgW200X2FwcGVuZChbQVRfeGZhaWxdLCBbCisgICAgICAkMSAmJiBhdF94ZmFpbD15ZXNdKV0pXSkKKworCisjIEFUX0tFWVdPUkRTKEtFWVdPUkRTKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVjbGFyZSBhIGxpc3Qgb2Yga2V5d29yZHMgYXNzb2NpYXRlZCB0byB0aGUgY3VycmVudCB0ZXN0IGdyb3VwLgorIyBTaW5jZSB0aGUgLWsgb3B0aW9uIGlzIGNhc2UtaW5zZW5zaXRpdmUsIHRoZSBsaXN0IGlzIHN0b3JlZCBpbiBsb3dlciBjYXNlCisjIHRvIGF2b2lkIGR1cGxpY2F0ZXMgdGhhdCBkaWZmZXIgb25seSBieSBjYXNlLgorX0FUX0RFRklORV9TRVRVUChbQVRfS0VZV09SRFNdLAorW200X2FwcGVuZF91bmlxX3coW0FUX2tleXdvcmRzXSwgbTRfdG9sb3dlcihfbTRfZXhwYW5kKFskMQorXSkpKV0pCisKKworIyBBVF9DQVBUVVJFX0ZJTEUoRklMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmIHRoZSBjdXJyZW50IHRlc3QgZ3JvdXAgZG9lcyBub3QgYmVoYXZlIGFzIGV4cGVjdGVkLCBzYXZlIHRoZSBjb250ZW50cyBvZgorIyBGSUxFIGluIHRoZSB0ZXN0IHN1aXRlIGxvZy4KK19BVF9ERUZJTkVfU0VUVVAoW0FUX0NBUFRVUkVfRklMRV0sCitbbTRfYXBwZW5kX3VuaXEoW0FUX2NhcHR1cmVfZmlsZXNdLCBbIiQxIl0sIFsgXAorXSldKQorCisKKyMgQVRfQ0xFQU5VUAorIyAtLS0tLS0tLS0tCisjIENvbXBsZXRlIGEgZ3JvdXAgb2YgcmVsYXRlZCB0ZXN0cy4KK19BVF9ERUZJTkVfSU5JVChbQVRfQ0xFQU5VUF0sCitbbTRfaWZkZWYoW0FUX2luZ3JvdXBdLCBbQVRfaW5ncm91cFtdX200X3VuZGVmaW5lKFtBVF9pbmdyb3VwXSldLAorICBbbTRfZmF0YWwoWyQwOiBtaXNzaW5nIEFUX1NFVFVQIGRldGVjdGVkXSldKWRubAorbTRfYXBwZW5kKFtBVF9oZWxwX2FsbF0sCittNF9kZWZuKFtBVF9vcmRpbmFsXSk7bTRfZGVmbihbQVRfbGluZV0pO200X2RlZm4oW0FUX2Rlc2NyaXB0aW9uXSk7ZG5sCittNF9pZmRlZihbQVRfa2V5d29yZHNdLCBbbTRfZGVmbihbQVRfa2V5d29yZHNdKV0pOworKWRubAorbTRfZGl2ZXJ0X3BvcChbVEVTVF9TQ1JJUFRdKWRubCBCYWNrIHRvIFRFU1RfR1JPVVBTCitBVF94ZmFpbAorZWNobyAiIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIGNvbXBpbGF0aW9uIC0qLSIgPj4gIiRhdF9ncm91cF9sb2ciCisoCisgIEFTX0VDSE8oWyJBVF9vcmRpbmFsLiBtNF9kZWZuKFtBVF9saW5lXSk6IHRlc3RpbmcgJDEuLi4iXSkKKyAgJGF0X3RyYWNlb24KK200X3VuZGl2ZXJ0KFtURVNUX1NDUklQVF0pZG5sIEluc2VydCB0aGUgY29kZSBoZXJlCisgIHNldCAreAorICAkYXRfdGltZXNfcCAmJiB0aW1lcyA+IiRhdF90aW1lc19maWxlIgorKSBBU19NRVNTQUdFX0xPR19GRD4mMSAyPiYxIHwgZXZhbCAkYXRfdGVlX3BpcGUKK3JlYWQgYXRfc3RhdHVzIDwiJGF0X3N0YXR1c19maWxlIgorWyNBVF9TVE9QX11BVF9vcmRpbmFsCittNF9kaXZlcnRfcG9wKFtURVNUX0dST1VQU10pZG5sIEJhY2sgdG8gS0lMTC4KK10pIyBBVF9DTEVBTlVQCisKKworIyBBVF9CQU5ORVIoW1RFWFRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBTdGFydCBhIGNhdGVnb3J5IG9mIHJlbGF0ZWQgdGVzdCBncm91cHMuICBJZiBtdWx0aXBsZSBncm91cHMgYXJlIGV4ZWN1dGVkLAorIyBvdXRwdXQgVEVYVCBhcyBhIGJhbm5lciB3aXRob3V0IGFueSBzaGVsbCBleHBhbnNpb24sIHByaW9yIHRvIGFueSB0ZXN0CisjIGZyb20gdGhlIGNhdGVnb3J5LiAgSWYgVEVYVCBpcyBlbXB0eSwgbm8gYmFubmVyIGlzIHByaW50ZWQuCitfQVRfREVGSU5FX0lOSVQoW0FUX0JBTk5FUl0sCitbbTRfaWZkZWYoW0FUX2luZ3JvdXBdLCBbbTRfZmF0YWwoWyQwOiBuZXN0ZWQgQVRfU0VUVVAgZGV0ZWN0ZWRdKV0pZG5sCittNF9kZWZpbmUoW0FUX2Jhbm5lcl9vcmRpbmFsXSwgbTRfaW5jcihBVF9iYW5uZXJfb3JkaW5hbCkpCittNF9kaXZlcnRfdGV4dChbQkFOTkVSU10sCitbQCU6QCBCYW5uZXIgQVRfYmFubmVyX29yZGluYWwuIEFUX0xJTkUKK0AlOkAgQ2F0ZWdvcnkgc3RhcnRzIGF0IHRlc3QgZ3JvdXAgbTRfaW5jcihBVF9vcmRpbmFsKS4KK2F0X2Jhbm5lcl90ZXh0X1tdQVRfYmFubmVyX29yZGluYWw9IkFTX0VTQ0FQRShbJDFdKSJdKWRubAorXSkjIEFUX0JBTk5FUgorCisKKyMgQVRfREFUQShGSUxFLCBDT05URU5UUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSW5pdGlhbGl6ZSBhbiBpbnB1dCBkYXRhIEZJTEUgd2l0aCBnaXZlbiBDT05URU5UUywgd2hpY2ggc2hvdWxkIGVuZCB3aXRoCisjIGFuIGVuZCBvZiBsaW5lLgorIyBUaGlzIG1hY3JvIGlzIG5vdCByb2J1c3QgdG8gYWN0aXZlIHN5bWJvbHMgaW4gQ09OVEVOVFMgKm9uIHB1cnBvc2UqLgorIyBJZiB5b3UgZG9uJ3Qgd2FudCBDT05URU5UUyB0byBiZSBldmFsdWF0ZWQsIHF1b3RlIGl0IHR3aWNlLgorX0FUX0RFRklORV9TRVRVUChbQVRfREFUQV0sCitbY2F0ID4kMSA8PCdfQVRFT0YnCiskMltdX0FURU9GCitdKQorCisKKyMgQVRfQ0hFQ0soQ09NTUFORFMsIFtTVEFUVVMgPSAwXSwgU1RET1VULCBTVERFUlIsCisjICAgICAgICAgIFtSVU4tSUYtRkFJTF0sIFtSVU4tSUYtUEFTU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeGVjdXRlIGEgdGVzdCBieSBwZXJmb3JtaW5nIGdpdmVuIHNoZWxsIENPTU1BTkRTLiAgVGhlc2UgY29tbWFuZHMKKyMgc2hvdWxkIG5vcm1hbGx5IGV4aXQgd2l0aCBTVEFUVVMsIHdoaWxlIHByb2R1Y2luZyBleHBlY3RlZCBTVERPVVQgYW5kCisjIFNUREVSUiBjb250ZW50cy4gIFNoZWxsIG1ldGFjaGFyYWN0ZXJzIGluIFNURE9VVCBhbmQgU1RERVJSIGFyZQorIyBfbm90XyBwcm9jZXNzZWQgYnkgdGhlIHNoZWxsLCBidXQgYXJlIHRyZWF0ZWQgYXMgc3RyaW5nIGxpdGVyYWxzLgorIworIyBTVEFUVVMsIFNURE9VVCwgYW5kIFNUREVSUiBhcmUgbm90IGNoZWNrZWQgaWYgZXF1YWwgdG8gYGlnbm9yZScuCisjCisjIElmIFNURE9VVCBpcyBgZXhwb3V0JywgdGhlbiBzdGRvdXQgaXMgY29tcGFyZWQgdG8gdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUKKyMgYGV4cG91dCcuICBMaWtld2lzZSBmb3IgU1RERVJSIGFuZCBgZXhwZXJyJy4KKyMKKyMgSWYgU1RET1VUIGlzIGBzdGRvdXQnLCB0aGVuIHRoZSBzdGRvdXQgaXMgbGVmdCBpbiB0aGUgZmlsZSBgc3Rkb3V0JywKKyMgbGlrZXdpc2UgZm9yIFNUREVSUiBhbmQgYHN0ZGVycicuICBEb24ndCBkbyB0aGlzOgorIworIyAgICBBVF9DSEVDSyhbY29tbWFuZCA+b3V0XSkKKyMgICAgIyBTb21lIGNoZWNrcyBvbiBgb3V0JworIworIyBkbyB0aGlzIGluc3RlYWQ6CisjCisjICAgIEFUX0NIRUNLKFtjb21tYW5kXSwgW10sIFtzdGRvdXRdKQorIyAgICAjIFNvbWUgY2hlY2tzIG9uIGBzdGRvdXQnCisjCisjIFlvdSBtaWdodCB3b25kZXIgd2h5IHlvdSBjYW4ndCBqdXN0IHVzZSBgaWdub3JlJywgdGhlbiBkaXJlY3RseSB1c2Ugc3Rkb3V0CisjIGFuZCBzdGRlcnIgbGVmdCBieSB0aGUgdGVzdCBzdWl0ZToKKyMKKyMgICAgQVRfQ0hFQ0soW2NvbW1hbmRdLCBbXSwgW2lnbm9yZV0pCisjICAgIEFUX0NIRUNLKFtjaGVjayBzdGRvdXRdKQorIworIyBJZiB0aGUgdGVzdCBzdWl0ZSBhbHdheXMgY2FwdHVyZWQgZGF0YSBpbiB0aGUgZmlsZSBgc3Rkb3V0JywgdGhlbiB0aGUKKyMgc2Vjb25kIGNvbW1hbmQgd291bGQgYmUgdHJ5aW5nIHRvIHJlYWQgYW5kIHdyaXRlIGZyb20gdGhlIHNhbWUgZmlsZSwgd2l0aAorIyB1bmRlZmluZWQgYmVoYXZpb3IuICBUaGVyZWZvcmUsIHRoZSB0ZXN0IHN1aXRlIGFjdHVhbGx5IGNhcHR1cmVzIGRhdGEgaW4KKyMgYW4gaW50ZXJuYWwgZmlsZSBvZiBhIGRpZmZlcmVudCBuYW1lLCBhbmQgb25seSBjcmVhdGVzIGBzdGRvdXQnIHdoZW4KKyMgZXhwbGljaXRseSByZXF1ZXN0ZWQuCisjCisjIEFueSBsaW5lIG9mIHN0ZGVyciBzdGFydGluZyB3aXRoIGxlYWRpbmcgYmxhbmtzIGFuZCBhIGArJyBhcmUgZmlsdGVyZWQKKyMgb3V0LCBzaW5jZSBtb3N0IHNoZWxscyB3aGVuIHRyYWNpbmcgaW5jbHVkZSBzdWJzaGVsbCB0cmFjZXMgaW4gc3RkZXJyLgorIyBUaGlzIG1heSBjYXVzZSBzcHVyaW91cyBmYWlsdXJlcyB3aGVuIHRoZSB0ZXN0IHN1aXRlIGlzIHJ1biB3aXRoIGAteCcuCisjCitfQVRfREVGSU5FX1NFVFVQKFtBVF9DSEVDS10sCitbX0FUX0NIRUNLKG00X2V4cGFuZChbJDFdKSwgWyQyXSwgQVNfRVNDQVBFKG00X2RxdW90ZShtNF9leHBhbmQoWyQzXSkpKSwKKyAgQVNfRVNDQVBFKG00X2RxdW90ZShtNF9leHBhbmQoWyQ0XSkpKSwgWyQ1XSwgWyQ2XSldKQorCisjIEFUX0NIRUNLX1VOUVVPVEVEKENPTU1BTkRTLCBbU1RBVFVTID0gMF0sIFNURE9VVCwgU1RERVJSLAorIyAgICAgICAgICAgICAgICAgICBbUlVOLUlGLUZBSUxdLCBbUlVOLUlGLVBBU1NdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlrZSBBVF9DSEVDSywgYnV0IGRvIG5vdCBBU19FU0NBUEUgc2hlbGwgbWV0YWNoYXJhY3RlcnMgaW4gdGhlIFNURE9VVAorIyBhbmQgU1RERVJSIGFyZ3VtZW50cyBiZWZvcmUgcnVubmluZyB0aGUgY29tcGFyaXNvbi4KK19BVF9ERUZJTkVfU0VUVVAoW0FUX0NIRUNLX1VOUVVPVEVEXSwKK1tfQVRfQ0hFQ0sobTRfZXhwYW5kKFskMV0pLCBbJDJdLCBBU19FU0NBUEUobTRfZHF1b3RlKG00X2V4cGFuZChbJDNdKSksIFsiIl0pLAorICBBU19FU0NBUEUobTRfZHF1b3RlKG00X2V4cGFuZChbJDRdKSksIFsiIl0pLCBbJDVdLCBbJDZdKV0pCisKKyMgQVRfQ0hFQ0tfTk9FU0NBUEUoQ09NTUFORFMsIFtTVEFUVVMgPSAwXSwgU1RET1VULCBTVERFUlIsCisjICAgICAgICAgICAgICAgICAgIFtSVU4tSUYtRkFJTF0sIFtSVU4tSUYtUEFTU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPYnNvbGV0ZSBzcGVsbGluZyBvZiBBVF9DSEVDS19VTlFVT1RFRC4KK200X2RlZmluZShbQVRfQ0hFQ0tfTk9FU0NBUEVdLAorW200X3dhcm4oW29ic29sZXRlXSwgW2NvbnNpZGVyIHVzaW5nIEFUX0NIRUNLX1VOUVVPVEVEIGluc3RlYWQgb2YgJDBdKV1kbmwKK1tfQVRfQ0hFQ0sobTRfZXhwYW5kKFskMV0pLCBbJDJdLCBtNF9leHBhbmQoWyQzXSksCisgIG00X2V4cGFuZChbJDRdKSwgWyQ1XSwgWyQ2XSldKQorCisKKyMgX0FUX0RFQ0lERV9UUkFDRUFCTEUoQ09NTUFORFMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBXb3JrZXIgZm9yIF9BVF9DSEVDSyB0aGF0IGV4cGFuZHMgdG8gc2hlbGwgY29kZS4gIElmIENPTU1BTkRTIGFyZSBzYWZlIHRvCisjIHRyYWNlIHdpdGggYHNldCAteCcsIHRoZSBzaGVsbCBjb2RlIHdpbGwgZXZhbHVhdGUgdG8gdHJ1ZS4gIE90aGVyd2lzZSwKKyMgdGhlIHNoZWxsIGNvZGUgd2lsbCBwcmludCBhIG1lc3NhZ2Ugc3RhdGluZyBhbiBhc3BlY3Qgb2YgQ09NTUFORFMgdGhhdCBtYWtlcworIyB0cmFjaW5nIHRoZW0gdW5zYWZlLCBhbmQgZXZhbHVhdGUgdG8gZmFsc2UuCisjCisjIFRyYWNpbmcgQ09NTUFORFMgaXMgbm90IHNhZmUgaWYgdGhleSBjb250YWluIGEgY29tbWFuZCB0aGF0IHNwYW5zIG11bHRpcGxlCisjIGxpbmVzLiAgV2hlbiB0aGUgdGVzdCBzdWl0ZSB1c2VyIHBhc3NlcyBgLXgnIG9yIGAtLXRyYWNlJywgdGhlIHRlc3Qgc3VpdGUKKyMgcHJlY2VkZXMgZXZlcnkgY29tbWFuZCB3aXRoIGEgYHNldCAteCcuICBTaW5jZSBtb3N0IHRlc3RzIGV4cGVjdCBhIHNwZWNpZmljCisjIHN0ZGVyciwgaWYgb25seSB0byBjb25maXJtIHRoYXQgaXQgaXMgZW1wdHksIHRoZSB0ZXN0IHN1aXRlIGZpbHRlcnMgXisgZnJvbQorIyB0aGUgY2FwdHVyZWQgc3RkZXJyIGJlZm9yZSBjb21wYXJpbmcgd2l0aCB0aGUgZXhwZWN0ZWQgc3RkZXJyLiAgSWYgYSBjb21tYW5kCisjIHNwYW5zIG11bHRpcGxlIGxpbmVzLCBzbyB3aWxsIGl0cyB0cmFjZSwgYnV0IGEgYCsnIG9ubHkgcHJlZml4ZXMgdGhlIGZpcnN0CisjIGxpbmUgb2YgdGhhdCB0cmFjZToKKyMKKyMgJCBlY2hvICdmb28KKyMgYmFyJworIyA9PiBzdGRvdXQKKyMgZm9vCisjIGJhcgorIyA9PiBzdGRlcnIKKyMgKyBmb28KKyMgYmFyCisjCisjIEluIGEgc3Vic2V0IG9mIGNhc2VzLCBvbmUgY291bGQgZmlsdGVyIHN1Y2ggZXh0ZW5kZWQgc2hlbGwgdHJhY2VzIGZyb20KKyMgc3RkZXJyLiAgU2luY2UgdGVzdCBjb21tYW5kcyBzcGFubmluZyBzZXZlcmFsIGxpbmVzIGFyZSByYXJlLCBJIGNob3NlCisjIGluc3RlYWQgdG8gc2ltcGx5IG5vdCB0cmFjZSBDT01NQU5EUyB0aGF0IGNvdWxkIHlpZWxkIG11bHRpcGxlIHRyYWNlIGxpbmVzLgorIyBEaXN0aW5ndWlzaGluZyBzdWNoIENPTU1BTkRTIGJlY2FtZSB0aGUgdGFzayBhdCBoYW5kLgorIworIyBUaGVzZSBmZWF0dXJlcyBtYXkgY2F1c2UgYSBzaGVsbCBjb21tYW5kIHRvIHNwYW4gbXVsdGlwbGUgbGluZXM6CisjCisjIChhKSBBIHF1b3RlZCBsaXRlcmFsIG5ld2xpbmUuCisjIEV4YW1wbGU6CisjICAgZWNobyBmb28nCisjICAgJ2JhcgorIyBNNCBpcyBhIGhvc3RpbGUgbGFuZ3VhZ2UgZm9yIHRoZSBqb2Igb2YgcGFyc2luZyBDT01NQU5EUyB0byBkZXRlcm1pbmUgd2hldGhlcgorIyBlYWNoIGxpdGVyYWwgbmV3bGluZSBpcyBxdW90ZWQsIHNvIHdlIHNpbXBseSBkaXNhYmxlIHRyYWNpbmcgZm9yIGFsbCBDT01NQU5EUworIyB0aGF0IGJlYXIgbGl0ZXJhbCBuZXdsaW5lcy4KKyMKKyMgKGIpIEEgY29tbWFuZCBzdWJzdGl0dXRpb24gbm90IHN1YmplY3QgdG8gd29yZCBzcGxpdHRpbmcuCisjIEV4YW1wbGU6CisjICAgdmFyPSQocHJpbnRmICdmb29cbmJhcicpCisjIEV4YW1wbGU6CisjICAgZWNobyAiYHByaW50ZiAnZm9vXFxuYmFyYCIKKyMgT25lIGNhbm5vdCBrbm93IGluIGdlbmVyYWwgdGhlIG51bWJlciBvZiBsaW5lcyBhIGNvbW1hbmQgc3Vic3RpdHV0aW9uIHdpbGwKKyMgeWllbGQgd2l0aG91dCBleGVjdXRpbmcgdGhlIHN1YnN0aXR1dGVkIGNvbW1hbmQuICBBcyBzdWNoLCB3ZSBkaXNhYmxlIHRyYWNpbmcKKyMgZm9yIGFsbCBDT01NQU5EUyBjb250YWluaW5nIHRoZXNlIGNvbnN0cnVjdHMuCisjCisjIChjKSBBIHBhcmFtZXRlciBleHBhbnNpb24gbm90IHN1YmplY3QgdG8gd29yZCBzcGxpdHRpbmcuCisjIEV4YW1wbGU6CisjICAgdmFyPWZvbycKKyMgICAnYmFyCisjICAgZWNobyAiJHZhciIKKyMgUGFyYW1ldGVyIGV4cGFuc2lvbnMgYXBwZWFyIGluIENPTU1BTkRTIHdpdGggbXVjaCBncmVhdGVyIGZyZXF1ZW5jeSB0aGFuIGRvCisjIG5ld2xpbmVzIGFuZCBjb21tYW5kIHN1YnN0aXR1dGlvbnMsIHNvIGRpc2FibGluZyB0cmFjaW5nIGZvciBhbGwgc3VjaAorIyBDT01NQU5EUyB3b3VsZCBtdWNoIG1vcmUgc3Vic3RhbnRpYWxseSBkZXZhbHVlIGB0ZXN0c3VpdGUgLXgnLiAgVG8gZGV0ZXJtaW5lCisjIHdoaWNoIHBhcmFtZXRlciBleHBhbnNpb25zIHlpZWxkIG11bHRpcGxlIGxpbmVzLCB3ZSBlc2NhcGUgYWxsIGBgJywgYCInLAorIyBhbmQgYFwnIGluIGEgY29weSBvZiBDT01NQU5EUyBhbmQgZXhwYW5kIHRoYXQgc3RyaW5nIHdpdGhpbiBkb3VibGUgcXVvdGVzCisjIGF0IHJ1bnRpbWUuICBJZiB0aGUgcmVzdWx0IG9mIHRoYXQgZXhwYW5zaW9uIGNvbnRhaW5zIG11bHRpcGxlIGxpbmVzLCB0aGUKKyMgdGVzdCBzdWl0ZSBkaXNhYmxlcyB0cmFjaW5nIGZvciB0aGUgY29tbWFuZCBpbiBxdWVzdGlvbi4KKyMKKyMgVGhpcyBtZXRob2QgbGVhZHMgdGhlIHRlc3Qgc3VpdGUgdG8gZXhwYW5kIHNvbWUgcGFyYW1ldGVycyB0aGF0IHRoZSBzaGVsbAorIyBpdHNlbGYgd2lsbCBuZXZlciBleHBhbmQgZHVlIHRvIHNpbmdsZS1xdW90ZXMgb3IgYmFja3NsYXNoIGVzY2FwZXMuICBUaGlzIGlzCisjIG5vdCBhIHByb2JsZW0gZm9yIGAkZm9vJyBleHBhbnNpb25zLCB3aGljaCB3aWxsIHNpbXBseSB5aWVsZCB0aGUgZW1wdHkgc3RyaW5nCisjIG9yIHNvbWUgdW5yZWxhdGVkIHZhbHVlLiAgQSBgJHsuLi59JyBleHBhbnNpb24gY291bGQgYWN0dWFsbHkgZm9ybSBpbnZhbGlkCisjIHNoZWxsIGNvZGUsIGhvd2V2ZXI7IGNvbnNpZGVyIGAkez1mb299Jy4gIFRoZXJlZm9yZSwgd2UgZGlzYWJsZSB0cmFjaW5nIGZvcgorIyBhbGwgQ09NTUFORFMgY29udGFpbmluZyBgJHsuLi59Jy4gIFRoaXMgYWZmZWN0cyBmZXcgQ09NTUFORFMuCisjCisjIFRoaXMgbWFjcm8gZmFsbHMgaW4gYSB2ZXJ5IGhvdCBwYXRoOyB0aGUgQXV0b2NvbmYgdGVzdCBzdWl0ZSBleHBhbmRzIGl0IDE2NDAKKyMgdGltZXMgYXMgb2YgdGhpcyB3cml0aW5nLiAgVG8gZ2l2ZSBhIHNlbnNlIG9mIHRoZSBpbXBhY3Qgb2YgdGhlIGhldXJpc3RpY3MgSQorIyBqdXN0IGRlc2NyaWJlZCwgdGhlIHRlc3Qgc3VpdGUgcHJlZW1wdGl2ZWx5IGRpc2FibGVzIHRyYWNpbmcgZm9yIDMxIG9mIHRob3NlLAorIyBhbmQgMjY4IGNvbnRhaW4gcGFyYW1ldGVyIGV4cGFuc2lvbnMgdGhhdCByZXF1aXJlIHJ1bnRpbWUgZXZhbHVhdGlvbi4gIFRoZQorIyBiYWxhbmNlIGFyZSBhbHdheXMgc2FmZSB0byB0cmFjZS4KK200X2RlZmluZShbX0FUX0RFQ0lERV9UUkFDRUFCTEVdLAorZG5sIFV0aWxpdHkgbWFjcm8uCitkbmwKK2RubCBFeGFtaW5lIENPTU1BTkRTIGZvciBhIHJlYXNvbiB0byBuZXZlciB0cmFjZSBDT01NQU5EUy4KK1ttNF9wdXNoZGVmKFthdF9yZWFzb25dLAorbTRfY29uZChbbTRfZXZhbChtNF9pbmRleChbJDFdLCBbYF0pID49IDApXSwgWzFdLAorCQlbW2EgYC4uLmAgY29tbWFuZCBzdWJzdGl0dXRpb25dXSwKKwlbbTRfZXZhbChtNF9pbmRleChbJDFdLCBbJChdKSA+PSAwKV0sIFsxXSwKKwkJW1thICQoLi4uKSBjb21tYW5kIHN1YnN0aXR1dGlvbl1dLAorCVttNF9ldmFsKG00X2luZGV4KFskMV0sIFske10pID49IDApXSwgWzFdLAorCQlbW2EgJHsuLi59IHBhcmFtZXRlciBleHBhbnNpb25dXSwKKwlbbTRfZXZhbChtNF9pbmRleChbJDFdLCBtNF9uZXdsaW5lKSA+PSAwKV0sIFsxXSwKKwkJW1thbiBlbWJlZGRlZCBuZXdsaW5lXV0sCisJW10pKV1kbmwgTm8gcmVhc29uLgorW200X2lmKG00X2luZGV4KF9tNF9kZWZuKFthdF9yZWFzb25dKSwgW2FdKSwgWzBdLF1kbmwKK2RubCBXZSBrbm93IGF0IGJ1aWxkIHRpbWUgdGhhdCB0cmFjaW5nIENPTU1BTkRTIGlzIG5ldmVyIHNhZmUuCitbW2F0X2ZuX2NoZWNrX3ByZXBhcmVfbm90cmFjZSAnX200X2RlZm4oW2F0X3JlYXNvbl0pJ10sCisgICAgICAgbTRfaW5kZXgoWyQxXSwgWyRdKSwgWy0xXSxdZG5sCitkbmwgV2Uga25vdyBhdCBidWlsZCB0aW1lIHRoYXQgdHJhY2luZyBDT01NQU5EUyBpcyBhbHdheXMgc2FmZS4KK1tbYXRfZm5fY2hlY2tfcHJlcGFyZV90cmFjZV0sXWRubAorZG5sIENPTU1BTkRTIG1heSBjb250YWluIHBhcmFtZXRlciBleHBhbnNpb25zOyBleHBhbmQgdGhlbSBhdCBydW50aW1lLgorW1thdF9mbl9jaGVja19wcmVwYXJlX2R5bmFtaWMgIkFTX0VTQ0FQRShbWyQxXV0sIFtgXCJdKSJdKVtdXWRubAorW19tNF9wb3BkZWYoW2F0X3JlYXNvbl0pXSkKKworCisjIEFUX0RJRkZfU1RERVJSL0FUX0RJRkZfU1RET1VUCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoZXNlIGFyZSBzdWJyb3V0aW5lcyBvZiBBVF9DSEVDSy4gIFVzaW5nIGluZGlyZWN0IGRpc3BhdGNoIGlzIGEgdGFkCisjIGZhc3RlciB0aGFuIHVzaW5nIG00X2Nhc2UsIGFuZCB0aGVzZSBhcmUgY2FsbGVkIHZlcnkgZnJlcXVlbnRseS4KK200X2RlZmluZShbQVRfRElGRl9TVERFUlIoc3RkZXJyKV0sCisJICBbZWNobyBzdGRlcnI6OyB0ZWUgc3RkZXJyIDwiJGF0X3N0ZGVyciJdKQorbTRfZGVmaW5lKFtBVF9ESUZGX1NUREVSUihzdGRlcnItbm9sb2cpXSwKKwkgIFtlY2hvIHN0ZGVyciBjYXB0dXJlZDsgY3AgIiRhdF9zdGRlcnIiIHN0ZGVycl0pCittNF9kZWZpbmUoW0FUX0RJRkZfU1RERVJSKGlnbm9yZSldLAorCSAgW2VjaG8gc3RkZXJyOjsgY2F0ICIkYXRfc3RkZXJyIl0pCittNF9kZWZpbmUoW0FUX0RJRkZfU1RERVJSKGlnbm9yZS1ub2xvZyldKQorbTRfZGVmaW5lKFtBVF9ESUZGX1NUREVSUihleHBlcnIpXSwKKwkgIFskYXRfZGlmZiBleHBlcnIgIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06XSkKK200X2RlZmluZShbQVRfRElGRl9TVERFUlIoKV0sCisJICBbYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3RkZXJyIiB8fCBhdF9mYWlsZWQ9Ol0pCisKK200X2RlZmluZShbQVRfRElGRl9TVERPVVQoc3Rkb3V0KV0sCisJICBbZWNobyBzdGRvdXQ6OyB0ZWUgc3Rkb3V0IDwiJGF0X3N0ZG91dCJdKQorbTRfZGVmaW5lKFtBVF9ESUZGX1NURE9VVChzdGRvdXQtbm9sb2cpXSwKKwkgIFtlY2hvIHN0ZG91dCBjYXB0dXJlZDsgY3AgIiRhdF9zdGRvdXQiIHN0ZG91dF0pCittNF9kZWZpbmUoW0FUX0RJRkZfU1RET1VUKGlnbm9yZSldLAorCSAgW2VjaG8gc3Rkb3V0OjsgY2F0ICIkYXRfc3Rkb3V0Il0pCittNF9kZWZpbmUoW0FUX0RJRkZfU1RET1VUKGlnbm9yZS1ub2xvZyldKQorbTRfZGVmaW5lKFtBVF9ESUZGX1NURE9VVChleHBvdXQpXSwKKwkgIFskYXRfZGlmZiBleHBvdXQgIiRhdF9zdGRvdXQiIHx8IGF0X2ZhaWxlZD06XSkKK200X2RlZmluZShbQVRfRElGRl9TVERPVVQoKV0sCisJICBbYXRfZm5fZGlmZl9kZXZudWxsICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9Ol0pCisKKyMgX0FUX0NIRUNLKENPTU1BTkRTLCBbU1RBVFVTID0gMF0sIFNURE9VVCwgU1RERVJSLAorIyAgICAgICAgICAgW1JVTi1JRi1GQUlMXSwgW1JVTi1JRi1QQVNTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBXb3JrZXIgZm9yIEFUX0NIRUNLIGFuZCBBVF9DSEVDS19VTlFVT1RFRCwgd2l0aCBDT01NQU5EUywgU1RET1VULCBhbmQKKyMgU1RERVJSIHByZS1leHBhbmRlZC4KKyMKKyMgSW1wbGVtZW50YXRpb24gRGV0YWlscworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElkZWFsbHksIHdlIHdvdWxkIGxpa2UgdG8gcnVuCisjCisjICAgICggJGF0X3RyYWNlb247IENPTU1BTkRTID5hdC1zdGRvdXQgMj4gYXQtc3RkZXJyICkKKyMKKyMgYnV0IHdlIG11c3QgZ3JvdXAgQ09NTUFORFMgYXMgaXQgaXMgbm90IGxpbWl0ZWQgdG8gYSBzaW5nbGUgY29tbWFuZCwgYW5kCisjIHRoZW4gdGhlIHNoZWxscyB3aWxsIHNhdmUgdGhlIHRyYWNlcyBpbiBhdC1zdGRlcnIuIFNvIHdlIGhhdmUgdG8gZmlsdGVyCisjIHRoZW0gb3V0IHdoZW4gY2hlY2tpbmcgc3RkZXJyLCBhbmQgd2UgbXVzdCBzZW5kIHRoZW0gaW50byB0aGUgdGVzdCBzdWl0ZSdzCisjIHN0ZGVyciB0byBob25vciAteCBwcm9wZXJseS4gU2luY2Ugb25seSB0aGUgZmlyc3QgbGluZSBvZiB0aGUgdHJhY2Ugb2YgYQorIyBtdWx0aWxpbmUgY29tbWFuZCBzdGFydHMgd2l0aCBhIGArJywgYW5kIEkga25vdyBvZiBubyBzdHJhaWdodGZvcndhcmQgd2F5IHRvCisjIGZpbHRlciBvdXQgdGhlIHVuYWRvcm5lZCB0cmFjZSBsaW5lcywgd2UgZGlzYWJsZSBzaGVsbCB0cmFjaW5nIGVudGlyZWx5IGZvcgorIyBjb21tYW5kcyB0aGF0IGNvdWxkIHNwYW4gbXVsdGlwbGUgbGluZXMuCisjCisjIExpbWl0aW5nIENPTU1BTkRTIHRvIGEgc2luZ2xlIGNvbW1hbmQgaXMgbm90IGdvb2QgZWl0aGVyLCBzaW5jZSB0aGVuCisjIHRoZSB1c2VyIGhlcnNlbGYgd291bGQgdXNlIHt9IG9yICgpLCBhbmQgdGhlbiB3ZSBmYWNlIHRoZSBzYW1lIHByb2JsZW0uCisjCisjIEJ1dCB0aGVuLCB0aGVyZSBpcyBubyBwb2ludCBpbiBydW5uaW5nCisjCisjICAgKCAkYXRfdHJhY2VvbiB7ICQxIDsgfSA+YXQtc3Rkb3V0IDI+YXQtc3RkZXIxICkKKyMKKyMgaW5zdGVhZCBvZiB0aGUgc2ltcGxlcgorIworIyAgKCAkYXRfdHJhY2VvbjsgJDEgKSA+YXQtc3Rkb3V0IDI+YXQtc3RkZXIxCisjCisjIE5vdGUgdGhhdCB3ZSB0cnVuY2F0ZSBhbmQgYXBwZW5kIHRvIHRoZSBvdXRwdXQgZmlsZXMsIHRvIGF2b2lkIGxvc2luZworIyBvdXRwdXQgZnJvbSBtdWx0aXBsZSBjb25jdXJyZW50IHByb2Nlc3NlcywgZS5nLiwgYW4gaW5uZXIgdGVzdHN1aXRlCisjIHdpdGggcGFyYWxsZWwgam9icy4KK200X2RlZmluZShbX0FUX0NIRUNLXSwKK1ttNF9kZWZpbmUoW0FUX2luZ3JvdXBdKV1kbmwKK1t7IHNldCAreAorQVNfRUNITyhbIiRhdF9zcmNkaXIvQVRfTElORTogQVNfRVNDQVBFKFtbJDFdXSkiXSkKK19BVF9ERUNJREVfVFJBQ0VBQkxFKFskMV0pIF9BVF9MSU5FX0VTQ0FQRUQKKyggJGF0X2NoZWNrX3RyYWNlOyBbJDFdCispID4+IiRhdF9zdGRvdXQiIDI+PiIkYXRfc3RkZXJyIgorYXRfc3RhdHVzPSQ/IGF0X2ZhaWxlZD1mYWxzZQorJGF0X2NoZWNrX2ZpbHRlcgorbTRfaWZkZWYoW0FUX0RJRkZfU1RERVJSKCQ0KV0sIFttNF9pbmRpcihbQVRfRElGRl9TVERFUlIoJDQpXSldLAorICBbZWNobyA+PiIkYXRfc3RkZXJyIjsgQVNfRUNITyhbWyIkNCJdXSkgfCBcCisgICRhdF9kaWZmIC0gIiRhdF9zdGRlcnIiIHx8IGF0X2ZhaWxlZD06XSkKK200X2lmZGVmKFtBVF9ESUZGX1NURE9VVCgkMyldLCBbbTRfaW5kaXIoW0FUX0RJRkZfU1RET1VUKCQzKV0pXSwKKyAgW2VjaG8gPj4iJGF0X3N0ZG91dCI7IEFTX0VDSE8oW1siJDMiXV0pIHwgXAorICAkYXRfZGlmZiAtICIkYXRfc3Rkb3V0IiB8fCBhdF9mYWlsZWQ9Ol0pCittNF9pZihbJDJdLCBbaWdub3JlXSwgW2F0X2ZuX2NoZWNrX3NraXBdLAorICBbYXRfZm5fY2hlY2tfc3RhdHVzIG00X2RlZmF1bHQoWyQyXSwgWzBdKV0pICRhdF9zdGF0dXMgIiRhdF9zcmNkaXIvQVRfTElORSIKK200X2lmdmFsbihbJDUkNl0sIFtBU19JRigkYXRfZmFpbGVkLCBbJDVdLCBbJDZdKV0pXWRubAorWyRhdF9mYWlsZWQgJiYgYXRfZm5fbG9nX2ZhaWx1cmUgQVRfY2FwdHVyZV9maWxlcworJGF0X3RyYWNlb247IH0KK10pIyBfQVRfQ0hFQ0sKKworIyBfQVRfQ0hFQ0tfRVhJVChDT01NQU5EUywgW0VYSVQtU1RBVFVTLUlGLVBBU1NdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNaW5pbWFsIHZlcnNpb24gb2YgX0FUX0NIRUNLIGZvciBBVF9TS0lQX0lGIGFuZCBBVF9GQUlMX0lGLgorbTRfZGVmaW5lKFtfQVRfQ0hFQ0tfRVhJVF0sCitbbTRfZGVmaW5lKFtBVF9pbmdyb3VwXSldZG5sCitbQVNfRUNITyhfQVRfTElORV9FU0NBUEVEKSA+IiRhdF9jaGVja19saW5lX2ZpbGUiCittNF9pZnZhbChbJDFdLCBbKCQxKSBcCisgICYmIF0pYXRfZm5fY2hlY2tfc2tpcCAkMiAiJGF0X3NyY2Rpci9BVF9MSU5FIl0pIyBfQVRfQ0hFQ0tfRVhJVApkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b2NvbmYvYXV0b3Rlc3Qvc3BlY2lmaWMubTQgYi9zaGFyZS9hdXRvY29uZi9hdXRvdGVzdC9zcGVjaWZpYy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWEzMGNjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b2NvbmYvYXV0b3Rlc3Qvc3BlY2lmaWMubTQKQEAgLTAsMCArMSw3NCBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4gICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMgTTQgbWFjcm9zIHVzZWQgaW4gcnVubmluZyB0ZXN0cyB1c2luZyB0aGlyZC1wYXJ0eSB0ZXN0aW5nIHRvb2xzLgorbTRfZGVmaW5lKFtfQVRfQ09QWVJJR0hUX1lFQVJTXSwKK1tDb3B5cmlnaHQgKEMpIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXSkKKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlCisjIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorIyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorIyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uLAorIyB2ZXJzaW9uIDMuMCwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFuZCBhIGNvcHkgb2YgdGhlIEF1dG9jb25mIENvbmZpZ3VyZSBTY3JpcHQgRXhjZXB0aW9uIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGVzIENPUFlJTkd2MyBhbmQgQ09QWUlORy5FWENFUFRJT04KKyMgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRXJsYW5nIEVVbml0IHVuaXQgdGVzdHMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQVRfQ0hFQ0tfRVVOSVQoTU9EVUxFLCBTUEVDLCBbRVJMRkxBR1NdLCBbUlVOLUlGLUZBSUxdLCBbUlVOLUlGLVBBU1NdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHRoYXQgdGhlIEVVbml0IHRlc3Qgc3BlY2lmaWNhdGlvbiBTUEVDIHBhc3Nlcy4gVGhlIEVSTEZMQUdTCisjIG9wdGlvbmFsIGZsYWdzIGFyZSBwYXNzZWQgdG8gdGhlIEVybGFuZyBpbnRlcnByZXRlciBjb21tYW5kIGxpbmUgdG8KKyMgZXhlY3V0ZSB0aGUgdGVzdC4gVGhlIHRlc3QgaXMgZXhlY3V0ZWQgZnJvbSBhbiBhdXRvbWF0aWNhbGx5CisjIGdlbmVyYXRlZCBFcmxhbmcgbW9kdWxlIG5hbWVkIE1PRFVMRS4gRWFjaCBjYWxsIHRvIHRoaXMgbWFjcm8gc2hvdWxkCisjIGhhdmUgYSBkaXN0aW5jdCBNT0RVTEUgbmFtZSB3aXRoaW4gZWFjaCB0ZXN0IGdyb3VwLCB0byBlYXNlCisjIGRlYnVnZ2luZy4KKyMgQW4gRXJsYW5nL09UUCB2ZXJzaW9uIHdoaWNoIGNvbnRhaW5zIHRoZSBldW5pdCBsaWJyYXJ5IG11c3QgYmUKKyMgaW5zdGFsbGVkLCBpbiBvcmRlciB0byBleGVjdXRlIHRoaXMgbWFjcm8gaW4gYSB0ZXN0IHN1aXRlLiAgVGhlIEVSTCwKKyMgRVJMQywgYW5kIEVSTENGTEFHUyB2YXJpYWJsZXMgbXVzdCBiZSBkZWZpbmVkIGluIGF0Y29uZmlnLAorIyB0eXBpY2FsbHkgYnkgdXNpbmcgdGhlIEFDX0VSTEFOR19QQVRIX0VSTCBhbmQgQUNfRVJMQU5HX1BBVEhfRVJMQworIyBBdXRvY29uZiBtYWNyb3MuCitfQVRfREVGSU5FX1NFVFVQKFtBVF9DSEVDS19FVU5JVF0sCitbQVRfU0tJUF9JRihbdGVzdCAhIC1mICIkRVJMIiB8fCB0ZXN0ICEgLWYgIiRFUkxDIl0pCisjIyBBIHdyYXBwZXIgdG8gRVVuaXQsIHRvIGV4aXQgdGhlIEVybGFuZyBWTSB3aXRoIHRoZSByaWdodCBleGl0IGNvZGU6CitBVF9EQVRBKFskMS5lcmxdLAorW1stbW9kdWxlKCQxKS4KKy1leHBvcnQoW3Rlc3QvMCwgdGVzdC8xXSkuCit0ZXN0KCkgLT4gdGVzdChbXSkuCit0ZXN0KE9wdGlvbnMpIC0+CisgIFRlc3RTcGVjID0gJDIsCisgIFJldHVyblZhbHVlID0gY2FzZSBjb2RlOmxvYWRfZmlsZShldW5pdCkgb2YKKyAgICB7bW9kdWxlLCBffSAtPiBjYXNlIGV1bml0OnRlc3QoVGVzdFNwZWMsIE9wdGlvbnMpIG9mCisgICAgICAgIG9rIC0+ICIwXG4iOyAlJSB0ZXN0IHBhc3NlcworICAgICAgICBfICAtPiAiMVxuIiAgJSUgdGVzdCBmYWlscworICAgICAgZW5kOworICAgIF8gLT4gIjc3XG4iICUlIEVVbml0IG5vdCBmb3VuZCwgdGVzdCBza2lwcGVkCisgIGVuZCwKKyAgZmlsZTp3cml0ZV9maWxlKCIkMS5yZXN1bHQiLCBSZXR1cm5WYWx1ZSksCisgIGluaXQ6c3RvcCgpLgorXV0pCitBVF9DSEVDSyhbIiRFUkxDIiAkRVJMQ0ZMQUdTIC1iIGJlYW0gJDEuZXJsXSkKKyMjIE1ha2UgRVVuaXQgdmVyYm9zZSB3aGVuIHRlc3RzdWl0ZSBpcyB2ZXJib3NlOgoraWYgdGVzdCAteiAiJGF0X3ZlcmJvc2UiOyB0aGVuCisgIGF0X2V1bml0X29wdGlvbnM9InZlcmJvc2UiCitlbHNlCisgIGF0X2V1bml0X29wdGlvbnM9IiIKK2ZpCitBVF9DSEVDSyhbIiRFUkwiICQzIC1zICQxIHRlc3QgJGF0X2V1bml0X29wdGlvbnMgLW5vc2hlbGxdLCBbMF0sIFtpZ25vcmVdLCBbXSwKKyAgICAgICAgIFskNF0sIFskNV0pCitBVF9DQVBUVVJFX0ZJTEUoWyQxLnJlc3VsdF0pCitBVF9DSEVDSyhbdGVzdCAtZiAiJDEucmVzdWx0IiAmJiAoZXhpdCBgY2F0ICIkMS5yZXN1bHQiYCldKQorXSkKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9jb25mL200c3VnYXIvZm9yZWFjaC5tNCBiL3NoYXJlL2F1dG9jb25mL200c3VnYXIvZm9yZWFjaC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGM2ZTc5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b2NvbmYvbTRzdWdhci9mb3JlYWNoLm00CkBAIC0wLDAgKzEsMzYyIEBACisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEF1dG9jb25mLgorIyBmb3JlYWNoLWJhc2VkIHJlcGxhY2VtZW50cyBmb3IgcmVjdXJzaXZlIGZ1bmN0aW9ucy4KKyMgU3BlZWRzIHVwIEdOVSBNNCAxLjQueCBieSBhdm9pZGluZyBxdWFkcmF0aWMgJEAgcmVjdXJzaW9uLCBidXQgcGVuYWxpemVzCisjIEdOVSBNNCAxLjYgYnkgcmVxdWlyaW5nIG1vcmUgbWVtb3J5IGFuZCBtYWNybyBleHBhbnNpb25zLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQXV0b2NvbmYuICBUaGlzIHByb2dyYW0gaXMgZnJlZQorIyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKyMgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKyMgcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBBdXRvY29uZiBDb25maWd1cmUgU2NyaXB0IEV4Y2VwdGlvbiwKKyMgdmVyc2lvbiAzLjAsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbmQgYSBjb3B5IG9mIHRoZSBBdXRvY29uZiBDb25maWd1cmUgU2NyaXB0IEV4Y2VwdGlvbiBhbG9uZyB3aXRoCisjIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlcyBDT1BZSU5HdjMgYW5kIENPUFlJTkcuRVhDRVBUSU9OCisjIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBXcml0dGVuIGJ5IEVyaWMgQmxha2UuCisKKyMgSW4gTTQgMS40LngsIGV2ZXJ5IGJ5dGUgb2YgJEAgaXMgcmVzY2FubmVkLiAgVGhpcyBtZWFucyB0aGF0IGFuCisjIGFsZ29yaXRobSBvbiBuIGFyZ3VtZW50cyB0aGF0IHJlY3Vyc2VzIHdpdGggb25lIGxlc3MgYXJndW1lbnQgZWFjaAorIyBpdGVyYXRpb24gd2lsbCBzY2FuIG4gKiAobiArIDEpIC8gMiBhcmd1bWVudHMsIGZvciBPKG5eMikgdGltZS4gIEluCisjIE00IDEuNiwgdGhpcyB3YXMgZml4ZWQgc28gdGhhdCAkQCBpcyBvbmx5IHNjYW5uZWQgb25jZSwgdGhlbgorIyBiYWNrLXJlZmVyZW5jZXMgYXJlIG1hZGUgdG8gaW5mb3JtYXRpb24gc3RvcmVkIGFib3V0IHRoZSBzY2FuLgorIyBUaHVzLCBuIGl0ZXJhdGlvbnMgbmVlZCBvbmx5IHNjYW4gbiBhcmd1bWVudHMsIGZvciBPKG4pIHRpbWUuCisjIEFkZGl0aW9uYWxseSwgaW4gTTQgMS40LngsIHJlY3Vyc2l2ZSBhbGdvcml0aG1zIGRpZCBub3QgY2xlYW4gdXAKKyMgbWVtb3J5IHZlcnkgd2VsbCwgcmVxdWlyaW5nIE8obl4yKSBtZW1vcnkgcmF0aGVyIHRoYW4gTyhuKSBmb3IgbgorIyBpdGVyYXRpb25zLgorIworIyBUaGlzIGZpbGUgaXMgZGVzaWduZWQgdG8gb3ZlcmNvbWUgdGhlIHF1YWRyYXRpYyBuYXR1cmUgb2YgJEAKKyMgcmVjdXJzaW9uIGJ5IHdyaXRpbmcgYSB2YXJpYW50IG9mIG00X2ZvcmVhY2ggdGhhdCB1c2VzIG00X2ZvciByYXRoZXIKKyMgdGhhbiAkQCByZWN1cnNpb24gdG8gb3BlcmF0ZSBvbiB0aGUgbGlzdC4gIFRoaXMgaW52b2x2ZXMgbW9yZSBtYWNybworIyBleHBhbnNpb25zLCBidXQgYXZvaWRzIHRoZSBuZWVkIHRvIHJlc2NhbiBhIHF1YWRyYXRpYyBudW1iZXIgb2YKKyMgYXJndW1lbnRzLCBtYWtpbmcgdGhlc2UgcmVwbGFjZW1lbnRzIHZlcnkgYXR0cmFjdGl2ZSBmb3IgTTQgMS40LnguCisjIE9uIHRoZSBvdGhlciBoYW5kLCBpbiBhbnkgdmVyc2lvbiBvZiBNNCwgZXhwYW5kaW5nIGFkZGl0aW9uYWwgbWFjcm9zCisjIGNvc3RzIGFkZGl0aW9uYWwgdGltZTsgdGhlcmVmb3JlLCBpbiBNNCAxLjYsIHdoZXJlICRAIHJlY3Vyc2lvbiB1c2VzCisjIGZld2VyIG1hY3JvcywgdGhlc2UgcmVwbGFjZW1lbnRzIGFjdHVhbGx5IHBlc3NpbWl6ZSBwZXJmb3JtYW5jZS4KKyMgQWRkaXRpb25hbGx5LCB0aGUgdXNlIG9mICQxMCB0byBtZWFuIHRoZSB0ZW50aCBhcmd1bWVudCB2aW9sYXRlcworIyBQT1NJWDsgYWx0aG91Z2ggYWxsIHZlcnNpb25zIG9mIG00IDEuNC54IHN1cHBvcnQgdGhpcyBtZWFuaW5nLCBhCisjIGZ1dHVyZSBtNCB2ZXJzaW9uIG1heSBzd2l0Y2ggdG8gdGFrZSBpdCBhcyB0aGUgZmlyc3QgYXJndW1lbnQKKyMgY29uY2F0ZW5hdGVkIHdpdGggYSBsaXRlcmFsIDAsIHNvIHRoZSBpbXBsZW1lbnRhdGlvbnMgaW4gdGhpcyBmaWxlCisjIGFyZSBub3QgZnV0dXJlLXByb29mLiAgVGh1cywgdGhpcyBmaWxlIGlzIGNvbmRpdGlvbmFsbHkgaW5jbHVkZWQgYXMKKyMgcGFydCBvZiBtNF9pbml0KCksIG9ubHkgd2hlbiBpdCBpcyBkZXRlY3RlZCB0aGF0IE00IHByb2JhYmx5IGhhcworIyBxdWFkcmF0aWMgYmVoYXZpb3IgKGllLiBpdCBsYWNrcyB0aGUgbWFjcm8gX19tNF92ZXJzaW9uX18pLgorIworIyBQbGVhc2Uga2VlcCB0aGlzIGZpbGUgaW4gc3luYyB3aXRoIG00c3VnYXIubTQuCisKKyMgX200X2ZvcmVhY2goUFJFLCBQT1NULCBJR05PUkVELCBBUkcuLi4pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGb3JtIHRoZSBjb21tb24gYmFzaXMgb2YgdGhlIG00X2ZvcmVhY2ggYW5kIG00X21hcCBtYWNyb3MuICBGb3IgZWFjaAorIyBBUkcsIGV4cGFuZCBQUkVbQVJHXVBPU1RbXS4gIFRoZSBJR05PUkVEIGFyZ3VtZW50IG1ha2VzIHJlY3Vyc2lvbgorIyBlYXNpZXIsIGFuZCBtdXN0IGJlIHN1cHBsaWVkIHJhdGhlciB0aGFuIGltcGxpY2l0LgorIworIyBUaGlzIHZlcnNpb24gbWluaW1pemVzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCAkQCBpcyBldmFsdWF0ZWQgYnkKKyMgdXNpbmcgbTRfZm9yIHRvIGdlbmVyYXRlIGEgYm9pbGVycGxhdGUgaW50byBfbTRfZiB0aGVuIHBhc3NpbmcgJEAgdG8KKyMgdGhhdCB0ZW1wb3JhcnkgbWFjcm8uICBUaHVzLCB0aGUgcmVjdXJzaW9uIGlzIGRvbmUgaW4gbTRfZm9yIHdpdGhvdXQKKyMgcmVwYXJzaW5nIGFueSB1c2VyIGlucHV0LCBhbmQgaXMgbm90IHF1YWRyYXRpYy4gIEZvciBhbiBpZGVhIG9mIGhvdworIyB0aGlzIHdvcmtzLCBub3RlIHRoYXQgbTRfZm9yZWFjaChpLFsxLDJdLFtpXSkgY2FsbHMKKyMgICBfbTRfZm9yZWFjaChbbTRfZGVmaW5lKFtpXSxdLFspaV0sW10sWzFdLFsyXSkKKyMgd2hpY2ggZGVmaW5lcyBfbTRfZjoKKyMgICAkMVskNF0kMltdJDFbJDVdJDJbXV9tNF9wb3BkZWYoW19tNF9mXSkKKyMgdGhlbiBjYWxscyBfbTRfZihbbTRfZGVmaW5lKFtpXSxdLFspaV0sW10sWzFdLFsyXSkgZm9yIGEgbmV0IHJlc3VsdDoKKyMgICBtNF9kZWZpbmUoW2ldLFsxXSlpW11tNF9kZWZpbmUoW2ldLFsyXSlpW11fbTRfcG9wZGVmKFtfbTRfZl0pLgorbTRfZGVmaW5lKFtfbTRfZm9yZWFjaF0sCitbbTRfaWYoWyQjXSwgWzNdLCBbXSwKKyAgICAgICBbbTRfcHVzaGRlZihbX200X2ZdLCBfbTRfZm9yKFs0XSwgWyQjXSwgWzFdLAorICAgWyQwXyhbMV0sIFsyXSxdLCBbKV0pW19tNF9wb3BkZWYoW19tNF9mXSldKV9tNF9mKCRAKV0pXSkKKworbTRfZGVmaW5lKFtfbTRfZm9yZWFjaF9dLAorW1skJDFbJCQzXSQkMltdXV0pCisKKyMgbTRfY2FzZShTV0lUQ0gsIFZBTDEsIElGLVZBTDEsIFZBTDIsIElGLVZBTDIsIC4uLiwgREVGQVVMVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZCB0aGUgZmlyc3QgVkFMIHRoYXQgU1dJVENIIG1hdGNoZXMsIGFuZCBleHBhbmQgdGhlIGNvcnJlc3BvbmRpbmcKKyMgSUYtVkFMLiAgSWYgdGhlcmUgYXJlIG5vIG1hdGNoZXMsIGV4cGFuZCBERUZBVUxULgorIworIyBVc2UgbTRfZm9yIHRvIGNyZWF0ZSBhIHRlbXBvcmFyeSBtYWNybyBpbiB0ZXJtcyBvZiBhIGJvaWxlcnBsYXRlCisjIG00X2lmIHdpdGggZmluYWwgY2xlYW51cC4gIElmICQjIGlzIGV2ZW4sIHdlIGhhdmUgREVGQVVMVDsgaWYgaXQgaXMKKyMgb2RkLCB0aGVuIHJvdW5kaW5nIHRoZSBsYXN0ICQjIHVwIGluIHRoZSB0ZW1wb3JhcnkgbWFjcm8gaXMKKyMgaGFybWxlc3MuICBGb3IgZXhhbXBsZSwgYm90aCBtNF9jYXNlKDEsMiwzLDQsNSkgYW5kCisjIG00X2Nhc2UoMSwyLDMsNCw1LDYpIHJlc3VsdCBpbiB0aGUgaW50ZXJtZWRpYXRlIF9tNF9jYXNlIGJlaW5nCisjICAgbTRfaWYoWyQxXSxbJDJdLFskM10sWyQxXSxbJDRdLFskNV0sX200X3BvcGRlZihbX200X2Nhc2VdKVskNl0pCittNF9kZWZpbmUoW200X2Nhc2VdLAorW200X2lmKG00X2V2YWwoWyQjIDw9IDJdKSwgWzFdLCBbJDJdLAorW200X3B1c2hkZWYoW18kMF0sIFttNF9pZihdX200X2ZvcihbMl0sIG00X2V2YWwoWygkIyAtIDEpIC8gMiAqIDJdKSwgWzJdLAorICAgICBbXyQwXyhdLCBbKV0pW19tNF9wb3BkZWYoCisJIFtfJDBdKV1tNF9kcXVvdGUoJG00X2V2YWwoWygkIyArIDEpICYgfjFdKSlbKV0pXyQwKCRAKV0pXSkKKworbTRfZGVmaW5lKFtfbTRfY2FzZV9dLAorWyQwXyhbMV0sIFskMV0sIG00X2luY3IoWyQxXSkpXSkKKworbTRfZGVmaW5lKFtfbTRfY2FzZV9fXSwKK1tbWyQkMV0sWyQkMl0sWyQkM10sXV0pCisKKyMgbTRfYm1hdGNoKFNXSVRDSCwgUkUxLCBWQUwxLCBSRTIsIFZBTDIsIC4uLiwgREVGQVVMVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbTQgZXF1aXZhbGVudCBvZgorIworIyBpZiAoU1dJVENIID1+IFJFMSkKKyMgICBWQUwxOworIyBlbGlmIChTV0lUQ0ggPX4gUkUyKQorIyAgIFZBTDI7CisjIGVsaWYgLi4uCisjICAgLi4uCisjIGVsc2UKKyMgICBERUZBVUxUCisjCisjIFdlIGJ1aWxkIHRoZSB0ZW1wb3JhcnkgbWFjcm8gX200X2I6CisjICAgbTRfZGVmaW5lKFtfbTRfYl0sIF9tNF9kZWZuKFtfbTRfYm1hdGNoXSkpX200X2IoWyQxXSwgWyQyXSwgWyQzXSkuLi4KKyMgICBfbTRfYihbJDFdLCBbJG0tMV0sIFskbV0pX200X2IoW10sIFtdLCBbJG0rMV1fbTRfcG9wZGVmKFtfbTRfYl0pKQorIyB0aGVuIGludm9rZSBtNF91bnF1b3RlKF9tNF9iKCRAKSksIGZvciBjb25jYXRlbmF0aW9uIHdpdGggbGF0ZXIgdGV4dC4KK200X2RlZmluZShbbTRfYm1hdGNoXSwKK1ttNF9pZihbJCNdLCAwLCBbbTRfZmF0YWwoWyQwOiB0b28gZmV3IGFyZ3VtZW50czogJCNdKV0sCisgICAgICAgWyQjXSwgMSwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjOiAkMV0pXSwKKyAgICAgICBbJCNdLCAyLCBbJDJdLAorICAgICAgIFttNF9wdXNoZGVmKFtfbTRfYl0sIFttNF9kZWZpbmUoW19tNF9iXSwKKyAgX200X2RlZm4oW18kMF0pKV1fbTRfZm9yKFszXSwgbTRfZXZhbChbKCQjICsgMSkgLyAyICogMiAtIDFdKSwKKyAgWzJdLCBbXyQwXyhdLCBbKV0pW19tNF9iKFtdLCBbXSxdbTRfZHF1b3RlKFskXW00X2V2YWwoCisgIFsoJCMgKyAxKSAvIDIgKiAyXSkpW19tNF9wb3BkZWYoW19tNF9iXSkpXSltNF91bnF1b3RlKF9tNF9iKCRAKSldKV0pCisKK200X2RlZmluZShbX200X2JtYXRjaF0sCitbbTRfaWYobTRfYnJlZ2V4cChbJDFdLCBbJDJdKSwgWy0xXSwgW10sIFtbJDNdbTRfZGVmaW5lKFskMF0pXSldKQorCittNF9kZWZpbmUoW19tNF9ibWF0Y2hfXSwKK1skMF8oWzFdLCBtNF9kZWNyKFskMV0pLCBbJDFdKV0pCisKK200X2RlZmluZShbX200X2JtYXRjaF9fXSwKK1tbX200X2IoWyQkMV0sIFskJDJdLCBbJCQzXSldXSkKKworCisjIG00X2NvbmQoVEVTVDEsIFZBTDEsIElGLVZBTDEsIFRFU1QyLCBWQUwyLCBJRi1WQUwyLCAuLi4sIFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTaW1pbGFyIHRvIG00X2lmLCBleGNlcHQgdGhhdCBlYWNoIFRFU1QgaXMgZXhwYW5kZWQgd2hlbiBlbmNvdW50ZXJlZC4KKyMgSWYgdGhlIGV4cGFuc2lvbiBvZiBURVNUbiBtYXRjaGVzIHRoZSBzdHJpbmcgVkFMbiwgdGhlIHJlc3VsdCBpcyBJRi1WQUxuLgorIyBUaGUgcmVzdWx0IGlzIERFRkFVTFQgaWYgbm8gdGVzdHMgcGFzc2VkLiAgVGhpcyBtYWNybyBhbGxvd3MKKyMgc2hvcnQtY2lyY3VpdGluZyBvZiBleHBlbnNpdmUgdGVzdHMsIHdoZXJlIGl0IHBheXMgdG8gYXJyYW5nZSBxdWljaworIyBmaWx0ZXIgdGVzdHMgdG8gcnVuIGZpcnN0LgorIworIyBtNF9jb25kIGFscmVhZHkgZ3VhcmFudGVlcyBlaXRoZXIgMypuIG9yIDMqbiArIDEgYXJndW1lbnRzLCAxIDw9IG4uCisjIFdlIG9ubHkgaGF2ZSB0byBzcGVlZCB1cCBfbTRfY29uZCwgYnkgYnVpbGRpbmcgdGhlIHRlbXBvcmFyeSBfbTRfYzoKKyMgICBtNF9kZWZpbmUoW19tNF9jXSwgX200X2RlZm4oW200X3VucXVvdGVdKSlfbTRfYyhbbTRfaWYoKCQxKSwgWygkMildLAorIyAgIFtbJDNdbTRfZGVmaW5lKFtfbTRfY10pXSldKV9tNF9jKFttNF9pZigoJDQpLCBbKCQ1KV0sCisjICAgW1skNl1tNF9kZWZpbmUoW19tNF9jXSldKV0pLi4uX200X2MoW200X2lmKCgkbS0yKSwgWygkbS0xKV0sCisjICAgW1skbV1tNF9kZWZpbmUoW19tNF9jXSldKV0pX200X2MoW1skbSsxXV1fbTRfcG9wZGVmKFtfbTRfY10pKQorIyBXZSBpbnZva2UgbTRfdW5xdW90ZShfbTRfYygkQCkpLCBmb3IgY29uY2F0ZW5hdGlvbiB3aXRoIGxhdGVyIHRleHQuCittNF9kZWZpbmUoW19tNF9jb25kXSwKK1ttNF9wdXNoZGVmKFtfbTRfY10sIFttNF9kZWZpbmUoW19tNF9jXSwKKyAgX200X2RlZm4oW200X3VucXVvdGVdKSldX200X2ZvcihbMl0sIG00X2V2YWwoWyQjIC8gMyAqIDMgLSAxXSksIFszXSwKKyAgWyQwXyhdLCBbKV0pW19tNF9jKF1tNF9kcXVvdGUobTRfZHF1b3RlKAorICBbJF1tNF9ldmFsKFskIyAvIDMgKiAzICsgMV0pKSlbX200X3BvcGRlZihbX200X2NdKSldKW00X3VucXVvdGUoX200X2MoJEApKV0pCisKK200X2RlZmluZShbX200X2NvbmRfXSwKK1skMF8obTRfZGVjcihbJDFdKSwgWyQxXSwgbTRfaW5jcihbJDFdKSldKQorCittNF9kZWZpbmUoW19tNF9jb25kX19dLAorW1tfbTRfYyhbbTRfaWYoKCQkMSksIFsoJCQyKV0sIFtbJCQzXW00X2RlZmluZShbX200X2NdKV0pXSldXSkKKworIyBtNF9icGF0c3Vic3RzKFNUUklORywgUkUxLCBTVUJTVDEsIFJFMiwgU1VCU1QyLCAuLi4pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbTQgZXF1aXZhbGVudCBvZgorIworIyAgICRfID0gU1RSSU5HOworIyAgIHMvUkUxL1NVQlNUMS9nOworIyAgIHMvUkUyL1NVQlNUMi9nOworIyAgIC4uLgorIworIyBtNF9icGF0c3Vic3RzIGFscmVhZHkgdmFsaWRhdGVkIGFuIG9kZCBudW1iZXIgb2YgYXJndW1lbnRzOyB3ZSBvbmx5CisjIG5lZWQgdG8gc3BlZWQgdXAgX200X2JwYXRzdWJzdHMuICBUbyBhdm9pZCBuZXN0aW5nLCB3ZSBidWlsZCB0aGUKKyMgdGVtcG9yYXJ5IF9tNF9wOgorIyAgIG00X2RlZmluZShbX200X3BdLCBbJDFdKW00X2RlZmluZShbX200X3BdLAorIyAgIG00X2JwYXRzdWJzdChtNF9kcXVvdGUoX200X2RlZm4oW19tNF9wXSkpLCBbJDJdLCBbJDNdKSltNF9kZWZpbmUoW19tNF9wXSwKKyMgICBtNF9icGF0c3Vic3QobTRfZHF1b3RlKF9tNF9kZWZuKFtfbTRfcF0pKSwgWyQ0XSwgWyQ1XSkpbTRfZGVmaW5lKFtfbTRfcF0sLi4uCisjICAgbTRfYnBhdHN1YnN0KG00X2RxdW90ZShfbTRfZGVmbihbX200X3BdKSksIFskbS0xXSwgWyRtXSkpbTRfdW5xdW90ZSgKKyMgICBfbTRfZGVmbihbX200X3BdKV9tNF9wb3BkZWYoW19tNF9wXSkpCittNF9kZWZpbmUoW19tNF9icGF0c3Vic3RzXSwKK1ttNF9wdXNoZGVmKFtfbTRfcF0sIFttNF9kZWZpbmUoW19tNF9wXSwKKyAgXW00X2RxdW90ZShbJF0xKVspXV9tNF9mb3IoWzNdLCBbJCNdLCBbMl0sIFskMF8oXSwKKyAgWyldKVttNF91bnF1b3RlKF9tNF9kZWZuKFtfbTRfcF0pX200X3BvcGRlZihbX200X3BdKSldKV9tNF9wKCRAKV0pCisKK200X2RlZmluZShbX200X2JwYXRzdWJzdHNfXSwKK1skMF8obTRfZGVjcihbJDFdKSwgWyQxXSldKQorCittNF9kZWZpbmUoW19tNF9icGF0c3Vic3RzX19dLAorW1ttNF9kZWZpbmUoW19tNF9wXSwKK200X2JwYXRzdWJzdChtNF9kcXVvdGUoX200X2RlZm4oW19tNF9wXSkpLCBbJCQxXSwgWyQkMl0pKV1dKQorCisjIG00X3NoaWZ0bihOLCAuLi4pCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIFJldHVybnMgLi4uIHNoaWZ0ZWQgTiB0aW1lcy4gIFVzZWZ1bCBmb3IgcmVjdXJzaXZlICJ2YXJhcmdzIiBjb25zdHJ1Y3RzLgorIworIyBtNF9zaGlmdG4gYWxyZWFkeSB2YWxpZGF0ZWQgYXJndW1lbnRzOyB3ZSBvbmx5IG5lZWQgdG8gc3BlZWQgdXAKKyMgX200X3NoaWZ0bi4gIElmIE4gaXMgMywgdGhlbiB3ZSBidWlsZCB0aGUgdGVtcG9yYXJ5IF9tNF9zLCBkZWZpbmVkIGFzCisjICAgLFskNV0sWyQ2XSwuLi4sWyRtXV9tNF9wb3BkZWYoW19tNF9zXSkKKyMgYmVmb3JlIGNhbGxpbmcgbTRfc2hpZnQoX200X3MoJEApKS4KK200X2RlZmluZShbX200X3NoaWZ0bl0sCitbbTRfaWYobTRfaW5jcihbJDFdKSwgWyQjXSwgW10sIFttNF9wdXNoZGVmKFtfbTRfc10sCisgIF9tNF9mb3IobTRfZXZhbChbJDEgKyAyXSksIFskI10sIFsxXSwKKyAgW1ssXW00X2RxdW90ZSgkXSwgWyldKVtfbTRfcG9wZGVmKFtfbTRfc10pXSltNF9zaGlmdChfbTRfcygkQCkpXSldKQorCisjIG00X2RvKFNUUklORywgLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhpcyBtYWNybyBpbnZva2VzIGFsbCBpdHMgYXJndW1lbnRzIChpbiBzZXF1ZW5jZSwgb2YgY291cnNlKS4gIEl0IGlzCisjIHVzZWZ1bCBmb3IgbWFraW5nIHlvdXIgbWFjcm9zIG1vcmUgc3RydWN0dXJlZCBhbmQgcmVhZGFibGUgYnkgZHJvcHBpbmcKKyMgdW5uZWNlc3NhcnkgZG5sJ3MgYW5kIGhhdmUgdGhlIG1hY3JvcyBpbmRlbnRlZCBwcm9wZXJseS4KKyMKKyMgSGVyZSwgd2UgdXNlIHRoZSB0ZW1wb3JhcnkgbWFjcm8gX200X2RvLCBkZWZpbmVkIGFzCisjICAgJDFbXSQyW10uLi5bXSRuW11fbTRfcG9wZGVmKFtfbTRfZG9dKQorbTRfZGVmaW5lKFttNF9kb10sCitbbTRfaWYoWyQjXSwgWzBdLCBbXSwKKyAgICAgICBbbTRfcHVzaGRlZihbXyQwXSwgX200X2ZvcihbMV0sIFskI10sIFsxXSwKKwkJICAgWyRdLCBbW1tdXV0pW19tNF9wb3BkZWYoW18kMF0pXSlfJDAoJEApXSldKQorCisjIG00X2RxdW90ZV9lbHQoQVJHUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZXR1cm4gQVJHUyBhcyBhbiB1bnF1b3RlZCBsaXN0IG9mIGRvdWJsZS1xdW90ZWQgYXJndW1lbnRzLgorIworIyBfbTRfZm9yZWFjaCB0byB0aGUgcmVzY3VlLgorbTRfZGVmaW5lKFttNF9kcXVvdGVfZWx0XSwKK1ttNF9pZihbJCNdLCBbMF0sIFtdLCBbW1skMV1dX200X2ZvcmVhY2goWyxtNF9kcXVvdGUoXSwgWyldLCAkQCldKV0pCisKKyMgbTRfcmV2ZXJzZShBUkdTKQorIyAtLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCBBUkdTIGluIHJldmVyc2Ugb3JkZXIuCisjCisjIEludm9rZSBfbTRfcigkQCkgd2l0aCB0aGUgdGVtcG9yYXJ5IF9tNF9yIGJ1aWx0IGFzCisjICAgWyRtXSwgWyRtLTFdLCAuLi4sIFskMl0sIFskMV1fbTRfcG9wZGVmKFtfbTRfcl0pCittNF9kZWZpbmUoW200X3JldmVyc2VdLAorW200X2lmKFskI10sIFswXSwgW10sIFskI10sIFsxXSwgW1skMV1dLAorW200X3B1c2hkZWYoW19tNF9yXSwgW1skJCNdXV9tNF9mb3IobTRfZGVjcihbJCNdKSwgWzFdLCBbLTFdLAorICAgIFtbLCBdbTRfZHF1b3RlKCRdLCBbKV0pW19tNF9wb3BkZWYoW19tNF9yXSldKV9tNF9yKCRAKV0pXSkKKworCisjIG00X21hcF9hcmdzX3BhaXIoRVhQUkVTU0lPTiwgW0VORC1FWFBSID0gRVhQUkVTU0lPTl0sIEFSRy4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQZXJmb3JtIGEgcGFpcndpc2UgZ3JvdXBpbmcgb2YgY29uc2VjdXRpdmUgQVJHcywgYnkgZXhwYW5kaW5nCisjIEVYUFJFU1NJT04oW0FSRzFdLCBbQVJHMl0pLiAgSWYgdGhlcmUgYXJlIGFuIG9kZCBudW1iZXIgb2YgQVJHcywgdGhlCisjIGZpbmFsIGFyZ3VtZW50IGlzIGV4cGFuZGVkIHdpdGggRU5ELUVYUFIoW0FSR25dKS4KKyMKKyMgQnVpbGQgdGhlIHRlbXBvcmFyeSBtYWNybyBfbTRfbWFwX2FyZ3NfcGFpciwgd2l0aCB0aGUgJDIoWyRtKzFdKQorIyBvbmx5IG91dHB1dCBpZiAkIyBpcyBvZGQ6CisjICAgJDEoWyQzXSwgWyQ0XSlbXSQxKFskNV0sIFskNl0pW10uLi4kMShbJG0tMV0sCisjICAgWyRtXSlbXW00X2RlZmF1bHQoWyQyXSwgWyQxXSkoWyRtKzFdKVtdX200X3BvcGRlZihbX200X21hcF9hcmdzX3BhaXJdKQorbTRfZGVmaW5lKFttNF9tYXBfYXJnc19wYWlyXSwKK1ttNF9pZihbJCNdLCBbMF0sIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkI10pXSwKKyAgICAgICBbJCNdLCBbMV0sIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkIzogJDFdKV0sCisgICAgICAgWyQjXSwgWzJdLCBbXSwKKyAgICAgICBbJCNdLCBbM10sIFttNF9kZWZhdWx0KFskMl0sIFskMV0pKFskM10pW11dLAorICAgICAgIFttNF9wdXNoZGVmKFtfJDBdLCBfbTRfZm9yKFszXSwKKyAgIG00X2V2YWwoWyQjIC8gMiAqIDIgLSAxXSksIFsyXSwgW18kMF8oXSwgWyldKV8kMF9lbmQoCisgICBbMV0sIFsyXSwgWyQjXSlbX200X3BvcGRlZihbXyQwXSldKV8kMCgkQCldKV0pCisKK200X2RlZmluZShbX200X21hcF9hcmdzX3BhaXJfXSwKK1skMF8oWzFdLCBbJDFdLCBtNF9pbmNyKFskMV0pKV0pCisKK200X2RlZmluZShbX200X21hcF9hcmdzX3BhaXJfX10sCitbWyQkMShbJCQyXSwgWyQkM10pW11dXSkKKworbTRfZGVmaW5lKFtfbTRfbWFwX2FyZ3NfcGFpcl9lbmRdLAorW200X2lmKG00X2V2YWwoWyQzICYgMV0pLCBbMV0sIFtbbTRfZGVmYXVsdChbJCQyXSwgWyQkMV0pKFskJDNdKVtdXV0pXSkKKworIyBtNF9qb2luKFNFUCwgQVJHMSwgQVJHMi4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgQVJHMVNFUEFSRzIuLi5TRVBBUkduLiAgQXZvaWQgYmFjay10by1iYWNrIFNFUCB3aGVuIGEgZ2l2ZW4gQVJHCisjIGlzIHRoZSBlbXB0eSBzdHJpbmcuICBObyBleHBhbnNpb24gaXMgcGVyZm9ybWVkIG9uIFNFUCBvciBBUkdzLgorIworIyBVc2UgYSBzZWxmLW1vZGlmeWluZyBzZXBhcmF0b3IsIHNpbmNlIHdlIGRvbid0IGtub3cgaG93IG1hbnkKKyMgYXJndW1lbnRzIG1pZ2h0IGJlIHNraXBwZWQgYmVmb3JlIGEgc2VwYXJhdG9yIGlzIGZpcnN0IHByaW50ZWQsIGJ1dAorIyBiZSBjYXJlZnVsIGlmIHRoZSBzZXBhcmF0b3IgY29udGFpbnMgJC4gIF9tNF9mb3JlYWNoIHRvIHRoZSByZXNjdWUuCittNF9kZWZpbmUoW200X2pvaW5dLAorW200X3B1c2hkZWYoW19tNF9zZXBdLCBbbTRfZGVmaW5lKFtfbTRfc2VwXSwgX200X2RlZm4oW200X2VjaG9dKSldKV1kbmwKK1tfbTRfZm9yZWFjaChbXyQwKFskMV0sXSwgWyldLCAkQClfbTRfcG9wZGVmKFtfbTRfc2VwXSldKQorCittNF9kZWZpbmUoW19tNF9qb2luXSwKK1ttNF9pZihbJDJdLCBbXSwgW10sIFtfbTRfc2VwKFskMV0pWyQyXV0pXSkKKworIyBtNF9qb2luYWxsKFNFUCwgQVJHMSwgQVJHMi4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgQVJHMVNFUEFSRzIuLi5TRVBBUkduLiAgQW4gZW1wdHkgQVJHIHJlc3VsdHMgaW4gYmFjay10by1iYWNrIFNFUC4KKyMgTm8gZXhwYW5zaW9uIGlzIHBlcmZvcm1lZCBvbiBTRVAgb3IgQVJHcy4KKyMKKyMgQSBiaXQgZWFzaWVyIHRoYW4gbTRfam9pbi4gIF9tNF9mb3JlYWNoIHRvIHRoZSByZXNjdWUuCittNF9kZWZpbmUoW200X2pvaW5hbGxdLAorW1skMl1tNF9pZihtNF9ldmFsKFskIyA8PSAyXSksIFsxXSwgW10sCisJICAgW19tNF9mb3JlYWNoKFskMV0sIFtdLCBtNF9zaGlmdCgkQCkpXSldKQorCisjIG00X2xpc3RfY21wKEEsIEIpCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIENvbXBhcmUgdGhlIHR3byBsaXN0cyBvZiBpbnRlZ2VyIGV4cHJlc3Npb25zIEEgYW5kIEIuCisjCisjIG00X2xpc3RfY21wIHRha2VzIGNhcmUgb2YgYW55IHNpZGUgZWZmZWN0czsgd2Ugb25seSBvdmVycmlkZQorIyBfbTRfbGlzdF9jbXBfcmF3LCB3aGVyZSB3ZSBjYW4gc2FmZWx5IGV4cGFuZCBsaXN0cyBtdWx0aXBsZSB0aW1lcy4KKyMgRmlyc3QsIGluc2VydCBwYWRkaW5nIHNvIHRoYXQgYm90aCBsaXN0cyBhcmUgdGhlIHNhbWUgbGVuZ3RoOyB0aGUKKyMgdHJhaWxpbmcgKzAgaXMgbmVjZXNzYXJ5IHRvIGhhbmRsZSBhIG1pc3NpbmcgbGlzdC4gIE5leHQsIGNyZWF0ZSBhCisjIHRlbXBvcmFyeSBtYWNybyB0byBwZXJmb3JtIHBhaXJ3aXNlIGNvbXBhcmlzb25zIHVudGlsIGFuIGluZXF1YWxpdHkKKyMgaXMgZm91bmQuICBGb3IgZXhhbXBsZSwgbTRfbGlzdF9jbXAoWzFdLCBbMSwyXSkgY3JlYXRlcyBfbTRfY21wIGFzCisjICAgbTRfaWYobTRfZXZhbChbKCQxKSAhPSAoJDMpXSksIFsxXSwgW200X2NtcChbJDFdLCBbJDNdKV0sCisjICAgICAgICAgbTRfZXZhbChbKCQyKSAhPSAoJDQpXSksIFsxXSwgW200X2NtcChbJDJdLCBbJDRdKV0sCisjICAgICAgICAgWzBdX200X3BvcGRlZihbX200X2NtcF0pKQorIyB0aGVuIGNhbGxzIF9tNF9jbXAoWzErMF0sIFswKjJdLCBbMV0sIFsyKzBdKQorbTRfZGVmaW5lKFtfbTRfbGlzdF9jbXBfcmF3XSwKK1ttNF9pZihbJDFdLCBbJDJdLCAwLAorICAgICAgIFtfbTRfbGlzdF9jbXAoJDErMF9tNF9saXN0X3BhZChtNF9jb3VudCgkMSksIG00X2NvdW50KCQyKSksCisJCSAgICAgJDIrMF9tNF9saXN0X3BhZChtNF9jb3VudCgkMiksIG00X2NvdW50KCQxKSkpXSldKQorCittNF9kZWZpbmUoW19tNF9saXN0X3BhZF0sCitbbTRfaWYobTRfZXZhbCgkMSA8ICQyKSwgWzFdLAorICAgICAgIFtfbTRfZm9yKG00X2luY3IoWyQxXSksIFskMl0sIFsxXSwgWywwKl0pXSldKQorCittNF9kZWZpbmUoW19tNF9saXN0X2NtcF0sCitbbTRfcHVzaGRlZihbX200X2NtcF0sIFttNF9pZihdX200X2ZvcigKKyAgIFsxXSwgbTRfZXZhbChbJCMgPj4gMV0pLCBbMV0sIFskMF8oXSwgWyxdbTRfZXZhbChbJCMgPj4gMV0pWyldKVsKKyAgICAgIFswXV9tNF9wb3BkZWYoW19tNF9jbXBdKSldKV9tNF9jbXAoJEApXSkKKworbTRfZGVmaW5lKFtfbTRfbGlzdF9jbXBfXSwKK1skMF8oWyQxXSwgbTRfZXZhbChbJDEgKyAkMl0pKV0pCisKK200X2RlZmluZShbX200X2xpc3RfY21wX19dLAorW1ttNF9ldmFsKFsoJCQxKSAhPSAoJCQyKV0pLCBbMV0sIFttNF9jbXAoWyQkMV0sIFskJDJdKV0sCitdXSkKKworIyBtNF9tYXgoRVhQUiwgLi4uKQorIyBtNF9taW4oRVhQUiwgLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBSZXR1cm4gdGhlIGRlY2ltYWwgdmFsdWUgb2YgdGhlIG1heGltdW0gKG9yIG1pbmltdW0pIGluIGEgc2VyaWVzIG9mCisjIGludGVnZXIgZXhwcmVzc2lvbnMuCisjCisjIF9tNF9mb3JlYWNoIHRvIHRoZSByZXNjdWU7IHdlIG9ubHkgbmVlZCB0byByZXBsYWNlIF9tNF9taW5tYXguICBIZXJlLAorIyB3ZSBuZWVkIGEgdGVtcG9yYXJ5IG1hY3JvIHRvIHRyYWNrIHRoZSBiZXN0IGFuc3dlciBzbyBmYXIsIHNvIHRoYXQKKyMgdGhlIGZvcmVhY2ggZXhwcmVzc2lvbiBpcyB0cmFjdGFibGUuCittNF9kZWZpbmUoW19tNF9taW5tYXhdLAorW200X3B1c2hkZWYoW19tNF9iZXN0XSwgbTRfZXZhbChbJDJdKSlfbTRfZm9yZWFjaCgKKyAgW200X2RlZmluZShbX200X2Jlc3RdLCAkMShfbTRfYmVzdCxdLCBbKSldLCBtNF9zaGlmdCgkQCkpXWRubAorW19tNF9iZXN0W11fbTRfcG9wZGVmKFtfbTRfYmVzdF0pXSkKKworIyBtNF9zZXRfYWRkX2FsbChTRVQsIFZBTFVFLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBZGQgZWFjaCBWQUxVRSBpbnRvIFNFVC4gIFRoaXMgaXMgTyhuKSBpbiB0aGUgbnVtYmVyIG9mIFZBTFVFcywgYW5kCisjIGNhbiBiZSBmYXN0ZXIgdGhhbiBjYWxsaW5nIG00X3NldF9hZGQgZm9yIGVhY2ggVkFMVUUuCisjCisjIF9tNF9mb3JlYWNoIHRvIHRoZSByZXNjdWUuICBJZiBubyBkZWxldGlvbnMgaGF2ZSBvY2N1cnJlZCwgdGhlbgorIyBhdm9pZCB0aGUgc3BlZWQgcGVuYWx0eSBvZiBtNF9zZXRfYWRkLgorbTRfZGVmaW5lKFttNF9zZXRfYWRkX2FsbF0sCitbbTRfaWYoWyQjXSwgWzBdLCBbXSwgWyQjXSwgWzFdLCBbXSwKKyAgICAgICBbbTRfZGVmaW5lKFtfbTRfc2V0X3NpemUoJDEpXSwgbTRfZXZhbChtNF9zZXRfc2l6ZShbJDFdKQorCSAgKyBtNF9sZW4oX200X2ZvcmVhY2gobTRfaWZkZWYoW19tNF9zZXRfY2xlYW51cCgkMSldLAorICBbW200X3NldF9hZGRdXSwgW1tfJDBdXSlbKFskMV0sXSwgWyldLCAkQCkpKSldKV0pCisKK200X2RlZmluZShbX200X3NldF9hZGRfYWxsXSwKK1ttNF9pZmRlZihbX200X3NldChbJDFdLCQyKV0sIFtdLAorCSAgW200X2RlZmluZShbX200X3NldChbJDFdLCQyKV0sCisJCSAgICAgWzFdKW00X3B1c2hkZWYoW19tNF9zZXQoWyQxXSldLCBbJDJdKS1dKV0pCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvY29uZi9tNHN1Z2FyL200c2gubTQgYi9zaGFyZS9hdXRvY29uZi9tNHN1Z2FyL200c2gubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBkYzcxYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9jb25mL200c3VnYXIvbTRzaC5tNApAQCAtMCwwICsxLDIwNzEgQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQXV0b2NvbmYuICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjIE00IHN1Z2FyIGZvciBjb21tb24gc2hlbGwgY29uc3RydWN0cy4KKyMgUmVxdWlyZXMgR05VIE00IGFuZCBNNHN1Z2FyLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsCisjIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQXV0b2NvbmYuICBUaGlzIHByb2dyYW0gaXMgZnJlZQorIyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKyMgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKyMgcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBBdXRvY29uZiBDb25maWd1cmUgU2NyaXB0IEV4Y2VwdGlvbiwKKyMgdmVyc2lvbiAzLjAsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbmQgYSBjb3B5IG9mIHRoZSBBdXRvY29uZiBDb25maWd1cmUgU2NyaXB0IEV4Y2VwdGlvbiBhbG9uZyB3aXRoCisjIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlcyBDT1BZSU5HdjMgYW5kIENPUFlJTkcuRVhDRVBUSU9OCisjIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBXcml0dGVuIGJ5IEFraW0gRGVtYWlsbGUsIFBhdmVsIFJvc2tpbiwgQWxleGFuZHJlIE9saXZhLCBMYXJzIEouIEFhcworIyBhbmQgbWFueSBvdGhlciBwZW9wbGUuCisKKworIyBXZSBoZWF2aWx5IHVzZSBtNCdzIGRpdmVyc2lvbnMgYm90aCBmb3IgdGhlIGluaXRpYWxpemF0aW9ucyBhbmQgZm9yCisjIHJlcXVpcmVkIG1hY3JvcywgYmVjYXVzZSBpbiBib3RoIGNhc2VzIHdlIGhhdmUgdG8gaXNzdWUgc29vbiBpbgorIyBvdXRwdXQgc29tZXRoaW5nIHdoaWNoIGlzIGRpc2NvdmVyZWQgbGF0ZS4KKyMKKyMKKyMgS0lMTCBpcyBvbmx5IHVzZWQgdG8gc3VwcHJlc3Mgb3V0cHV0LgorIworIyAtIEJJTlNICisjICAgQUNfUkVRVUlSRSdkICMhIC9iaW4vc2ggbGluZQorIyAtIEhFQURFUi1SRVZJU0lPTgorIyAgIFJDUyBrZXl3b3JkcyBldGMuCisjIC0gSEVBREVSLUNPTU1FTlQKKyMgICBQdXJwb3NlIG9mIHRoZSBzY3JpcHQgZXRjLgorIyAtIEhFQURFUi1DT1BZUklHSFQKKyMgICBDb3B5cmlnaHQgbm90aWNlKHMpCisjIC0gTTRTSC1TQU5JVElaRQorIyAgIE00c2gncyBzaGVsbCBzZXR1cAorIyAtIE00U0gtSU5JVC1GTgorIyAgIE00c2ggaW5pdGlhbGl6YXRpb24gKHNoZWxsIGZ1bmN0aW9ucykKKyMgLSBNNFNILUlOSVQKKyMgICBNNHNoIGluaXRpYWxpemF0aW9uIChkZXRlY3Rpb24gY29kZSkKKyMgLSBCT0RZCisjICAgVGhlIGJvZHkgb2YgdGhlIHNjcmlwdC4KKworCisjIF9tNF9kaXZlcnQoRElWRVJTSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbnZlcnQgYSBkaXZlcnNpb24gbmFtZSBpbnRvIGl0cyBudW1iZXIuICBPdGhlcndpc2UsIHJldHVybgorIyBESVZFUlNJT04tTkFNRSB3aGljaCBpcyBzdXBwb3NlZCB0byBiZSBhbiBhY3R1YWwgZGl2ZXJzaW9uIG51bWJlci4KKyMgT2YgY291cnNlIGl0IHdvdWxkIGJlIG5pY2VyIHRvIHVzZSBtNF9jYXNlIGhlcmUsIGluc3RlYWQgb2YgemlsbGlvbnMKKyMgb2YgbGl0dGxlIG1hY3JvcywgYnV0IGl0IHRoZW4gdGFrZXMgdHdpY2UgbG9uZ2VyIHRvIHJ1biBgYXV0b2NvbmYnIQorbTRfZGVmaW5lKFtfbTRfZGl2ZXJ0KEJJTlNIKV0sICAgICAgICAgICAgIDApCittNF9kZWZpbmUoW19tNF9kaXZlcnQoSEVBREVSLVJFVklTSU9OKV0sICAgMSkKK200X2RlZmluZShbX200X2RpdmVydChIRUFERVItQ09NTUVOVCldLCAgICAyKQorbTRfZGVmaW5lKFtfbTRfZGl2ZXJ0KEhFQURFUi1DT1BZUklHSFQpXSwgIDMpCittNF9kZWZpbmUoW19tNF9kaXZlcnQoTTRTSC1TQU5JVElaRSldLCAgICAgNCkKK200X2RlZmluZShbX200X2RpdmVydChNNFNILUlOSVQtRk4pXSwgICAgICA1KQorbTRfZGVmaW5lKFtfbTRfZGl2ZXJ0KE00U0gtSU5JVCldLCAgICAgICAgIDYpCittNF9kZWZpbmUoW19tNF9kaXZlcnQoQk9EWSldLCAgICAgICAgICAgMTAwMCkKKworIyBBYWFyZy4gIFlldCBpdCBzdGFydHMgd2l0aCBjb21wYXRpYmlsaXR5IGlzc3Vlcy4uLiAgTGlidG9vbCB3YW50cyB0bworIyB1c2UgTk9USUNFIHRvIGluc2VydCBpdHMgb3duIExJQlRPT0wtSU5JVCBzdHVmZi4gIFBlb3BsZSBzaG91bGQgYXNrCisjIGJlZm9yZSBkaXZpbmcgaW50byBvdXIgaW50ZXJuYWxzIDooCittNF9jb3B5KFtfbTRfZGl2ZXJ0KE00U0gtSU5JVCldLCBbX200X2RpdmVydChOT1RJQ0UpXSkKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIDEuIFNhbml0aXppbmcgdGhlIHNoZWxsLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMgUGxlYXNlIG1haW50YWluIGxleGljb2dyYXBoaWMgc29ydGluZyBvZiB0aGlzIHNlY3Rpb24sIGlnbm9yaW5nIGxlYWRpbmcgXy4KKworIyBBU19CT1VSTkVfQ09NUEFUSUJMRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gYmUgYXMgQm91cm5lIGFuZC9vciBQT1NJWCBhcyBwb3NzaWJsZS4KKyMKKyMgVGhpcyBkb2VzIG5vdCBzZXQgQklOX1NILCBkdWUgdG8gdGhlIHByb2JsZW1zIGRlc2NyaWJlZCBpbgorIyA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2F1dG9jb25mLXBhdGNoZXMvMjAwNi0wMy9tc2cwMDA4MS5odG1sPi4KKyMgUGVvcGxlIHdobyBuZWVkIEJJTl9TSCBzaG91bGQgc2V0IGl0IGluIHRoZWlyIGVudmlyb25tZW50IGJlZm9yZSBpbnZva2luZworIyBjb25maWd1cmU7IGFwcGFyZW50bHkgdGhpcyB3b3VsZCBpbmNsdWRlIFVuaXhXYXJlLCBhcyBkZXNjcmliZWQgaW4KKyMgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYXV0b2NvbmYvMjAwNi0wNi9tc2cwMDAyNS5odG1sPi4KK200X2RlZmluZShbQVNfQk9VUk5FX0NPTVBBVElCTEVdLAorWyMgQmUgbW9yZSBCb3VybmUgY29tcGF0aWJsZQorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorXyQwCitdKQorCisjIF9BU19CT1VSTkVfQ09NUEFUSUJMRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhpcyBpcyB0aGUgcGFydCBvZiBBU19CT1VSTkVfQ09NUEFUSUJMRSB3aGljaCBoYXMgdG8gYmUgcmVwZWF0ZWQgaW5zaWRlCisjIGVhY2ggaW5zdGFuY2UuCittNF9kZWZpbmUoW19BU19CT1VSTkVfQ09NUEFUSUJMRV0sCitbQVNfSUYoW3Rlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMV0sCisgW2VtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgIFsjXSBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRbQF0ifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJyR7MSsiJFtAXSJ9Jz0nIiRbQF0iJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVF0sCisgW0FTX0NBU0UoW2Aoc2V0IC1vKSAyPi9kZXYvbnVsbGBdLCBbKnBvc2l4Kl0sIFtzZXQgLW8gcG9zaXhdKV0pCitdKQorCisKKyMgX0FTX0NMRUFOVVAKKyMgLS0tLS0tLS0tLS0KKyMgRXhwYW5kZWQgYXMgdGhlIGxhc3QgdGhpbmcgYmVmb3JlIG00c3VnYXIgY2xlYW51cCBiZWdpbnMuICBNYWNyb3MKKyMgbWF5IGFwcGVuZCBtNHNoIGNsZWFudXAgaG9va3MgdG8gdGhpcyBhcyBhcHByb3ByaWF0ZS4KK200X2RlZmluZShbX0FTX0NMRUFOVVBdLAorW200X2RpdmVydF90ZXh0KFtNNFNILVNBTklUSVpFXSwgW19BU19ERVRFQ1RfQkVUVEVSX1NIRUxMXSldKQorCisKKyMgQVNfQ09QWVJJR0hUKFRFWFQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbWl0IFRFWFQsIGEgY29weXJpZ2h0IG5vdGljZSwgYXMgYSBzaGVsbCBjb21tZW50IG5lYXIgdGhlIHRvcCBvZiB0aGUKKyMgc2NyaXB0LiAgVEVYVCBpcyBldmFsdWF0ZWQgb25jZTsgdG8gYWNjb21wbGlzaCB0aGF0LCB3ZSBkbyBub3QgcHJlcGVuZAorIyBgIyAnIGJ1dCBgQCU6QCAnLgorbTRfZGVmaW5lKFtBU19DT1BZUklHSFRdLAorW200X2RpdmVydF90ZXh0KFtIRUFERVItQ09QWVJJR0hUXSwKK1ttNF9icGF0c3Vic3QoWworJDFdLCBbXl0sIFtAJTpAIF0pXSldKQorCisKKyMgX0FTX0RFVEVDVF9FWFBBTkQoVkFSLCBTRVQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBc3NpZ24gdGhlIGNvbnRlbnRzIG9mIFZBUiBmcm9tIHRoZSBjb250ZW50cyBvZiBTRVQsIGV4cGFuZGVkIGluIHN1Y2gKKyMgYSBtYW5uZXIgdGhhdCBWQVIgY2FuIGJlIHBhc3NlZCB0byBfQVNfUlVOLiAgSW4gb3JkZXIgdG8gbWFrZQorIyBfQVNfTElORU5PX1dPUktTIG9wZXJhdGUgY29ycmVjdGx5LCB3ZSBtdXN0IHNwZWNpYWxseSBoYW5kbGUgdGhlCisjIGZpcnN0IGluc3RhbmNlIG9mICRMSU5FTk8gd2l0aGluIGFueSBsaW5lIGJlaW5nIGV4cGFuZGVkICh0aGUgZmlyc3QKKyMgaW5zdGFuY2UgaXMgaW1wb3J0YW50IHRvIHRlc3RzIHVzaW5nIHRoZSBjdXJyZW50IHNoZWxsLCBsZWF2aW5nCisjIHJlbWFpbmluZyBpbnN0YW5jZXMgZm9yIHRlc3RzIHVzaW5nIGEgY2FuZGlkYXRlIHNoZWxsKS4gIEJhc2ggbG9zZXMKKyMgdHJhY2sgb2YgbGluZSBudW1iZXJzIGlmIGEgZG91YmxlIHF1b3RlIGNvbnRhaW5zIGEgbmV3bGluZSwgaGVuY2UsCisjIHdlIG11c3QgcGllY2UtbWVhbCB0aGUgYXNzaWdubWVudCBvZiBWQVIgc3VjaCB0aGF0ICRMSU5FTk8gZXhwYW5zaW9uCisjIG9jY3VycyBpbiBhIHNpbmdsZSBsaW5lLgorbTRfZGVmaW5lKFtfQVNfREVURUNUX0VYUEFORF0sCitbJDE9Im00X2JwYXRzdWJzdChtNF9kcXVvdGUoQVNfRVNDQVBFKF9tNF9leHBhbmQobTRfc2V0X2NvbnRlbnRzKFskMl0sIFsKK10pKSkpLCBbXFxcJExJTkVOT1woLipcKSRdLCBbIjskMT0kJDEkTElORU5POyQxPSQkMSJcMV0pIl0pCisKKworIyBfQVNfREVURUNUX1JFUVVJUkVEKFRFU1QpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVmdXNlIHRvIGV4ZWN1dGUgdW5kZXIgYSBzaGVsbCB0aGF0IGRvZXMgbm90IHBhc3MgdGhlIGdpdmVuIFRFU1QuCisjIERvZXMgbm90IGRvIEFTX1JFUVVJUkUgZm9yIHRoZSBiZXR0ZXItc2hlbGwgZGV0ZWN0aW9uIGNvZGUuCisjCisjIE00c2ggc2hvdWxkIG5ldmVyIHJlcXVpcmUgc29tZXRoaW5nIG5vdCByZXF1aXJlZCBieSBQT1NJWCwgYWx0aG91Z2gKKyMgb3RoZXIgY2xpZW50cyBhcmUgZnJlZSB0byBkbyBzby4KK200X2RlZnVuKFtfQVNfREVURUNUX1JFUVVJUkVEXSwKK1ttNF9zZXRfYWRkKFtfQVNfREVURUNUX1JFUVVJUkVEX0JPRFldLCBbJDEgfHwgQVNfRVhJVF0pXSkKKworCisjIF9BU19ERVRFQ1RfU1VHR0VTVEVEKFRFU1QpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByZWZlciB0byBleGVjdXRlIHVuZGVyIGEgc2hlbGwgdGhhdCBwYXNzZXMgdGhlIGdpdmVuIFRFU1QuCisjIERvZXMgbm90IGRvIEFTX1JFUVVJUkUgZm9yIHRoZSBiZXR0ZXItc2hlbGwgZGV0ZWN0aW9uIGNvZGUuCisjCisjIE00c2ggc2hvdWxkIG5ldmVyIHN1Z2dlc3Qgc29tZXRoaW5nIG5vdCByZXF1aXJlZCBieSBQT1NJWCwgYWx0aG91Z2gKKyMgb3RoZXIgY2xpZW50cyBhcmUgZnJlZSB0byBkbyBzby4KK200X2RlZnVuKFtfQVNfREVURUNUX1NVR0dFU1RFRF0sCitbbTRfc2V0X2FkZChbX0FTX0RFVEVDVF9TVUdHRVNURURfQk9EWV0sIFskMSB8fCBBU19FWElUXSldKQorCisKKyMgX0FTX0RFVEVDVF9TVUdHRVNURURfUFJVTkUoVEVTVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSWYgVEVTVCBpcyBhbHNvIGEgcmVxdWlyZWQgdGVzdCwgcmVtb3ZlIGl0IGZyb20gdGhlIHNldCBvZiBzdWdnZXN0ZWQgdGVzdHMuCittNF9kZWZpbmUoW19BU19ERVRFQ1RfU1VHR0VTVEVEX1BSVU5FXSwKK1ttNF9zZXRfY29udGFpbnMoW19BU19ERVRFQ1RfUkVRVUlSRURfQk9EWV0sIFskMV0sCisJCSBbbTRfc2V0X3JlbW92ZShbX0FTX0RFVEVDVF9TVUdHRVNURURfQk9EWV0sIFskMV0pXSldKQorCisKKyMgX0FTX0RFVEVDVF9CRVRURVJfU0hFTEwKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhlIHJlYWwgd29ya2hvcnNlIGZvciBkZXRlY3RpbmcgYSBzaGVsbCB3aXRoIHRoZSBjb3JyZWN0CisjIGZlYXR1cmVzLgorIworIyBJbiBwcmV2aW91cyB2ZXJzaW9ucywgd2UgcHJlcGVuZGVkIC91c3IvcG9zaXgvYmluIHRvIHRoZSBwYXRoLCBidXQgdGhhdAorIyBjYXVzZWQgYSByZWdyZXNzaW9uIG9uIE9wZW5TZXJ2ZXIgNi4wLjAKKyMgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYXV0b2NvbmYvMjAwNi0wNi9tc2cwMDAxNy5odG1sPgorIyBhbmQgb24gSFAtVVggMTEuMTEsIHNlZSB0aGUgZmFpbHVyZSBvZiB0ZXN0IDEyMCBpbgorIyA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1hdXRvY29uZi8yMDA2LTEwL21zZzAwMDAzLmh0bWw+CisjCisjIEZJWE1FOiBUaGUgY29kZSBzaG91bGQgdGVzdCBmb3IgdGhlIE9TRiBidWcgZGVzY3JpYmVkIGluCisjIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYXV0b2NvbmYtcGF0Y2hlcy8yMDA2LTAzL21zZzAwMDgxLmh0bWw+LgorIworIyBUaGlzIGNvZGUgaXMgcnVuIG91dHNpZGUgYW55IHRyYXAgMCBjb250ZXh0LCBoZW5jZSB3ZSBjYW4gc2ltcGxpZnkgQVNfRVhJVC4KK200X2RlZnVuKFtfQVNfREVURUNUX0JFVFRFUl9TSEVMTF0sCitkbmwgUmVtb3ZlIGFueSB0ZXN0cyBmcm9tIHN1Z2dlc3RlZCB0aGF0IGFyZSBhbHNvIHJlcXVpcmVkCitbbTRfc2V0X21hcChbX0FTX0RFVEVDVF9TVUdHRVNURURfQk9EWV0sIFtfQVNfREVURUNUX1NVR0dFU1RFRF9QUlVORV0pXWRubAorW200X3B1c2hkZWYoW0FTX0VYSVRdLCBbZXhpdCBtNF9kZWZhdWx0KF1tNF9kcXVvdGUoWyRdWzFdKVssIDEpXSldZG5sCitbaWYgdGVzdCAieCRDT05GSUdfU0hFTEwiID0geDsgdGhlbgorICBhc19ib3VybmVfY29tcGF0aWJsZT0iQVNfRVNDQVBFKF9tNF9leHBhbmQoW19BU19CT1VSTkVfQ09NUEFUSUJMRV0pKSIKKyAgX0FTX0RFVEVDVF9FWFBBTkQoW2FzX3JlcXVpcmVkXSwgW19BU19ERVRFQ1RfUkVRVUlSRURfQk9EWV0pCisgIF9BU19ERVRFQ1RfRVhQQU5EKFthc19zdWdnZXN0ZWRdLCBbX0FTX0RFVEVDVF9TVUdHRVNURURfQk9EWV0pCisgIEFTX0lGKFtfQVNfUlVOKFsiJGFzX3JlcXVpcmVkIl0pXSwKKwlbYXNfaGF2ZV9yZXF1aXJlZD15ZXNdLAorCVthc19oYXZlX3JlcXVpcmVkPW5vXSkKKyAgQVNfSUYoW3Rlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geHllcyAmJiBfQVNfUlVOKFsiJGFzX3N1Z2dlc3RlZCJdKV0sCisgICAgW10sCisgICAgW19BU19QQVRIX1dBTEsoWy9iaW4kUEFUSF9TRVBBUkFUT1IvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIXSwKKyAgICAgIFtjYXNlICRhc19kaXIgaW4gQCU6QCgKKwkgLyopCisJICAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbworCSAgICAgIyBUcnkgb25seSBzaGVsbHMgdGhhdCBleGlzdCwgdG8gc2F2ZSBzZXZlcmFsIGZvcmtzLgorCSAgICAgYXNfc2hlbGw9JGFzX2Rpci8kYXNfYmFzZQorCSAgICAgQVNfSUYoW3sgdGVzdCAtZiAiJGFzX3NoZWxsIiB8fCB0ZXN0IC1mICIkYXNfc2hlbGwuZXhlIjsgfSAmJgorCQkgICAgX0FTX1JVTihbIiRhc19yZXF1aXJlZCJdLCBbIiRhc19zaGVsbCJdKV0sCisJCSAgIFtDT05GSUdfU0hFTEw9JGFzX3NoZWxsIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCisJCSAgIG00X3NldF9lbXB0eShbX0FTX0RFVEVDVF9TVUdHRVNURURfQk9EWV0sIFticmVhayAyXSwKKwkJICAgICBbQVNfSUYoW19BU19SVU4oWyIkYXNfc3VnZ2VzdGVkIl0sIFsiJGFzX3NoZWxsIl0pXSwKKwkJCSAgICBbYnJlYWsgMl0pXSldKQorCSAgIGRvbmU7OworICAgICAgIGVzYWNdLAorICAgICAgW0FTX0lGKFt7IHRlc3QgLWYgIiRTSEVMTCIgfHwgdGVzdCAtZiAiJFNIRUxMLmV4ZSI7IH0gJiYKKwkgICAgICBfQVNfUlVOKFsiJGFzX3JlcXVpcmVkIl0sIFsiJFNIRUxMIl0pXSwKKwkgICAgIFtDT05GSUdfU0hFTEw9JFNIRUxMIGFzX2hhdmVfcmVxdWlyZWQ9eWVzXSldKQorCisgICAgICBBU19JRihbdGVzdCAieCRDT05GSUdfU0hFTEwiICE9IHhdLAorCVsjIFdlIGNhbm5vdCB5ZXQgYXNzdW1lIGEgZGVjZW50IHNoZWxsLCBzbyB3ZSBoYXZlIHRvIHByb3ZpZGUgYQorCSMgbmV1dHJhbGl6YXRpb24gdmFsdWUgZm9yIHNoZWxscyB3aXRob3V0IHVuc2V0OyBhbmQgdGhpcyBhbHNvCisJIyB3b3JrcyBhcm91bmQgc2hlbGxzIHRoYXQgY2Fubm90IHVuc2V0IG5vbmV4aXN0ZW50IHZhcmlhYmxlcy4KKwlCQVNIX0VOVj0vZGV2L251bGwKKwlFTlY9L2Rldi9udWxsCisJKHVuc2V0IEJBU0hfRU5WKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQkFTSF9FTlYgRU5WCisJZXhwb3J0IENPTkZJR19TSEVMTAorCWV4ZWMgIiRDT05GSUdfU0hFTEwiICIkYXNfbXlzZWxmIiAkezErIiRbQF0ifV0pCisKK2RubCBVbmZvcnR1bmF0ZWx5LCAkYXNfbWUgaXNuJ3QgYXZhaWxhYmxlIGhlcmUuCisgICAgQVNfSUYoW3Rlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geG5vXSwKKyAgICAgIFtBU19FQ0hPKFsiJFtdMDogVGhpcyBzY3JpcHQgcmVxdWlyZXMgYSBzaGVsbCBtb3JlIG1vZGVybiB0aGFuIGFsbCJdKQorICBBU19FQ0hPKFsiJFtdMDogdGhlIHNoZWxscyB0aGF0IEkgZm91bmQgb24geW91ciBzeXN0ZW0uIl0pCisgIGlmIHRlc3QgeCR7WlNIX1ZFUlNJT04rc2V0fSA9IHhzZXQgOyB0aGVuCisgICAgQVNfRUNITyhbIiRbXTA6IEluIHBhcnRpY3VsYXIsIHpzaCAkWlNIX1ZFUlNJT04gaGFzIGJ1Z3MgYW5kIHNob3VsZCJdKQorICAgIEFTX0VDSE8oWyIkW10wOiBiZSB1cGdyYWRlZCB0byB6c2ggNC4zLjQgb3IgbGF0ZXIuIl0pCisgIGVsc2UKKyAgICBBU19FQ0hPKCJtNF90ZXh0X3dyYXAoW1BsZWFzZSB0ZWxsIF1fbTRfZGVmbihbbTRfUEFDS0FHRV9CVUdSRVBPUlRdKQorbTRfaWZzZXQoW0FDX1BBQ0tBR0VfQlVHUkVQT1JUXSwgW200X2lmKF9tNF9kZWZuKFttNF9QQUNLQUdFX0JVR1JFUE9SVF0pLAorX200X2RlZm4oW0FDX1BBQ0tBR0VfQlVHUkVQT1JUXSksIFtdLCBbYW5kIF9tNF9kZWZuKFtBQ19QQUNLQUdFX0JVR1JFUE9SVF0pXSldKQorW2Fib3V0IHlvdXIgc3lzdGVtLCBpbmNsdWRpbmcgYW55IGVycm9yIHBvc3NpYmx5IG91dHB1dCBiZWZvcmUgdGhpcyBtZXNzYWdlLgorVGhlbiBpbnN0YWxsIGEgbW9kZXJuIHNoZWxsLCBvciBtYW51YWxseSBydW4gdGhlIHNjcmlwdCB1bmRlciBzdWNoIGEKK3NoZWxsIGlmIHlvdSBkbyBoYXZlIG9uZS5dLCBbJFtdMDogXSwgW10sIFs2Ml0pIikKKyAgZmkKKyAgQVNfRVhJVF0pXSkKK2ZpCitTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorZXhwb3J0IFNIRUxMCisjIFVuc2V0IG1vcmUgdmFyaWFibGVzIGtub3duIHRvIGludGVyZmVyZSB3aXRoIGJlaGF2aW9yIG9mIGNvbW1vbiB0b29scy4KK0NMSUNPTE9SX0ZPUkNFPSBHUkVQX09QVElPTlM9Cit1bnNldCBDTElDT0xPUl9GT1JDRSBHUkVQX09QVElPTlMKK19tNF9wb3BkZWYoW0FTX0VYSVRdKV0pIyBfQVNfREVURUNUX0JFVFRFUl9TSEVMTAorCisKKyMgX0FTX1BSRVBBUkUKKyMgLS0tLS0tLS0tLS0KKyMgVGhpcyBtYWNybyBoYXMgYSB2ZXJ5IHNwZWNpYWwgc3RhdHVzLiAgTm9ybWFsIHVzZSBvZiBNNHNoIHJlbGllcworIyBoZWF2aWx5IG9uIEFTX1JFUVVJUkUsIHNvIHRoYXQgbmVlZGVkIGluaXRpYWxpemF0aW9ucyAoc3VjaCBhcworIyBfQVNfVEVTVF9QUkVQQVJFKSBhcmUgcGVyZm9ybWVkIG9uIG5lZWQsIG5vdCBvbiBkZW1hbmQuICBCdXQKKyMgQXV0b2NvbmYgaXMgdGhlIGZpcnN0IGNsaWVudCBvZiBNNHNoLCBhbmQgZm9yIHR3byByZWFzb25zOiBjb25maWd1cmUKKyMgYW5kIGNvbmZpZy5zdGF0dXMuICBSZWx5aW5nIG9uIEFTX1JFUVVJUkUgaXMgb2YgY291cnNlIGZpbmUgZm9yCisjIGNvbmZpZ3VyZSwgYnV0IGZhaWxzIGZvciBjb25maWcuc3RhdHVzICh3aGljaCBpcyBjcmVhdGVkIGJ5CisjIGNvbmZpZ3VyZSkuICBTbyB3ZSBuZWVkIGEgbWVhbnMgdG8gZm9yY2UgdGhlIGluY2x1c2lvbiBvZiB0aGUKKyMgdmFyaW91cyBfQVNfKl9QUkVQQVJFIG9uIHRvcCBvZiBjb25maWcuc3RhdHVzLiAgVGhhdCdzIGJhc2ljYWxseSB3aHkKKyMgdGhlcmUgYXJlIHNvIG1hbnkgX0FTXypfUFJFUEFSRSBiZWxvdywgYW5kIHRoYXQncyBhbHNvIHdoeSBpdCBpcworIyBpbXBvcnRhbnQgbm90IHRvIGZvcmdldCBzb21lOiBjb25maWcuc3RhdHVzIG5lZWRzIHRoZW0uCisjIExpc3QgYW55IHByZXBhcmF0aW9ucyB0aGF0IGNyZWF0ZSBzaGVsbCBmdW5jdGlvbnMgZmlyc3QsIHRoZW4KKyMgdG9wb2xvZ2ljYWxseSBzb3J0IHRoZSBvdGhlcnMgYnkgdGhlaXIgZGVwZW5kZW5jaWVzLgorIworIyBTcGVjaWFsIGNhc2U6IHdlIGRvIG5vdCBuZWVkIF9BU19MSU5FTk9fUFJFUEFSRSwgYmVjYXVzZSB0aGUKKyMgcGFyZW50IHdpbGwgaGF2ZSBzdWJzdGl0dXRlZCAkTElORU5PIGZvciB1cyB3aGVuIHByb2Nlc3NpbmcgaXRzCisjIG93biBpbnZvY2F0aW9uIG9mIF9BU19MSU5FTk9fUFJFUEFSRS4KKyMKKyMgU3BlY2lhbCBjYXNlOiB0aGUgZnVsbCBkZWZpbml0aW9uIG9mIF9BU19FUlJPUl9QUkVQQVJFIGlzIG5vdCBvdXRwdXQKKyMgdW5sZXNzIEFTX01FU1NBR0VfTE9HX0ZEIGlzIG5vbi1lbXB0eSwgYWx0aG91Z2ggdGhlIHZhbHVlIG9mCisjIEFTX01FU1NBR0VfTE9HX0ZEIGlzIG5vdCByZWxldmFudC4KK200X2RlZnVuKFtfQVNfUFJFUEFSRV0sCitbbTRfcHVzaGRlZihbQVNfUkVRVUlSRV0pXWRubAorW200X3B1c2hkZWYoW0FTX1JFUVVJUkVfU0hFTExfRk5dLCBfbTRfZGVmbihbX0FTX1JFUVVJUkVfU0hFTExfRk5dKQorKV1kbmwKK1ttNF9wdXNoZGVmKFtBU19NRVNTQUdFX0xPR19GRF0sIFstMV0pXWRubAorW19BU19FUlJPUl9QUkVQQVJFCitfbTRfcG9wZGVmKFtBU19NRVNTQUdFX0xPR19GRF0pXWRubAorW19BU19FWElUX1BSRVBBUkUKK19BU19VTlNFVF9QUkVQQVJFCitfQVNfVkFSX0FQUEVORF9QUkVQQVJFCitfQVNfVkFSX0FSSVRIX1BSRVBBUkUKKworX0FTX0VYUFJfUFJFUEFSRQorX0FTX0JBU0VOQU1FX1BSRVBBUkUKK19BU19ESVJOQU1FX1BSRVBBUkUKK19BU19NRV9QUkVQQVJFCitfQVNfQ1JfUFJFUEFSRQorX0FTX0VDSE9fTl9QUkVQQVJFCitfQVNfTE5fU19QUkVQQVJFCitfQVNfTUtESVJfUF9QUkVQQVJFCitfQVNfVEVTVF9QUkVQQVJFCitfQVNfVFJfQ1BQX1BSRVBBUkUKK19BU19UUl9TSF9QUkVQQVJFCitfbTRfcG9wZGVmKFtBU19SRVFVSVJFXSwgW0FTX1JFUVVJUkVfU0hFTExfRk5dKV0pCisKKyMgQVNfUFJFUEFSRQorIyAtLS0tLS0tLS0tCisjIE91dHB1dCBhbGwgdGhlIE00c2ggcG9zc2libGUgaW5pdGlhbGl6YXRpb24gaW50byB0aGUgaW5pdGlhbGl6YXRpb24KKyMgZGl2ZXJzaW9uLiAgV2UgZG8gbm90IHVzZSBfQVNfUFJFUEFSRSBzbyB0aGF0IHRoZSBtNF9wcm92aWRlIHN5bWJvbHMgZm9yCisjIEFTX1JFUVVJUkUgYW5kIEFTX1JFUVVJUkVfU0hFTExfRk4gYXJlIGRlZmluZWQgcHJvcGVybHksIGFuZCBzbyB0aGF0CisjIHNoZWxsIGZ1bmN0aW9ucyBhcmUgcGxhY2VkIGluIE00U0gtSU5JVC1GTi4KK200X2RlZnVuKFtBU19QUkVQQVJFXSwKK1ttNF9kaXZlcnRfcHVzaChbS0lMTF0pCittNF9hcHBlbmRfdW5pcShbX0FTX0NMRUFOVVBdLAorICBbbTRfZGl2ZXJ0X3RleHQoW000U0gtSU5JVC1GTl0sIFtfQVNfRVJST1JfUFJFUEFSRVtdXSldKQorQVNfUkVRVUlSRShbX0FTX0VYUFJfUFJFUEFSRV0pCitBU19SRVFVSVJFKFtfQVNfQkFTRU5BTUVfUFJFUEFSRV0pCitBU19SRVFVSVJFKFtfQVNfRElSTkFNRV9QUkVQQVJFXSkKK0FTX1JFUVVJUkUoW19BU19NRV9QUkVQQVJFXSkKK0FTX1JFUVVJUkUoW19BU19DUl9QUkVQQVJFXSkKK0FTX1JFUVVJUkUoW19BU19MSU5FTk9fUFJFUEFSRV0pCitBU19SRVFVSVJFKFtfQVNfRUNIT19OX1BSRVBBUkVdKQorQVNfUkVRVUlSRShbX0FTX0VYSVRfUFJFUEFSRV0pCitBU19SRVFVSVJFKFtfQVNfTE5fU19QUkVQQVJFXSkKK0FTX1JFUVVJUkUoW19BU19NS0RJUl9QX1BSRVBBUkVdKQorQVNfUkVRVUlSRShbX0FTX1RFU1RfUFJFUEFSRV0pCitBU19SRVFVSVJFKFtfQVNfVFJfQ1BQX1BSRVBBUkVdKQorQVNfUkVRVUlSRShbX0FTX1RSX1NIX1BSRVBBUkVdKQorQVNfUkVRVUlSRShbX0FTX1VOU0VUX1BSRVBBUkVdKQorQVNfUkVRVUlSRShbX0FTX1ZBUl9BUFBFTkRfUFJFUEFSRV0sIFtdLCBbTTRTSC1JTklULUZOXSkKK0FTX1JFUVVJUkUoW19BU19WQVJfQVJJVEhfUFJFUEFSRV0sIFtdLCBbTTRTSC1JTklULUZOXSkKK200X2RpdmVydF9wb3BbXV0pCisKKworIyBBU19SRVFVSVJFKE5BTUUtVE8tQ0hFQ0ssIFtCT0RZLVRPLUVYUEFORCA9IE5BTUUtVE8tQ0hFQ0tdLAorIyAgICAgICAgICAgIFtESVZFUlNJT04gPSBNNFNILUlOSVRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBCT0RZLVRPLUVYUEFORCBpcyBzb21lIGluaXRpYWxpemF0aW9uIHdoaWNoIG11c3QgYmUgZXhwYW5kZWQgaW4gdGhlCisjIGdpdmVuIGRpdmVyc2lvbiB3aGVuIGV4cGFuZGVkIChyZXF1aXJlZCBvciBub3QpLiAgVGhlIGV4cGFuc2lvbgorIyBnb2VzIGluIHRoZSBuYW1lZCBkaXZlcnNpb24gb3IgYW4gZWFybGllciBvbmUuCisjCisjIFNpbmNlICQyIGNhbiBiZSBxdWl0ZSBsYXJnZSwgdGhpcyBpcyBmYWN0b3JlZCBmb3IgZmFzdGVyIGV4ZWN1dGlvbiwgZ2l2aW5nCisjIGVpdGhlciBtNF9yZXF1aXJlKFskMV0sIFskMl0pIG9yIG00X2RpdmVydF9yZXF1aXJlKGRlc2lyZWQsIFskMV0sIFskMl0pLgorbTRfZGVmdW4oW0FTX1JFUVVJUkVdLAorW200X2RlZmluZShbX200X2RpdmVydF9kZXNpcmVkXSwgW200X2RlZmF1bHRfcXVvdGVkKFskM10sIFtNNFNILUlOSVRdKV0pXWRubAorW200X2lmKG00X2V2YWwoX200X2RpdmVydF9kdW1wIC0gMCA8PSBfbTRfZGl2ZXJ0KF9tNF9kaXZlcnRfZGVzaXJlZCkpLAorICAgICAgIDEsIFttNF9yZXF1aXJlKF0sCisJICBbbTRfZGl2ZXJ0X3JlcXVpcmUoX200X2RpdmVydF9kZXNpcmVkLF0pIFskMV0sIFskMl0pXSkKKworIyBfQVNfUkVRVUlSRV9TSEVMTF9GTihOQU1FLVRPLUNIRUNLLCBDT01NRU5ULCBCT0RZLVRPLUVYUEFORCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvcmUgb2YgQVNfUkVRVUlSRV9TSEVMTF9GTiwgYnV0IHdpdGhvdXQgZGl2ZXJzaW9uIHN1cHBvcnQuCittNF9kZWZpbmUoW19BU19SRVFVSVJFX1NIRUxMX0ZOXSwgWworbTRfbihbJDJdKSQxICgpCit7CiskMworfSBAJTpAICQxW11dKQorCisjIEFTX1JFUVVJUkVfU0hFTExfRk4oTkFNRS1UTy1DSEVDSywgQ09NTUVOVCwgQk9EWS1UTy1FWFBBTkQsCisjICAgICAgICAgICAgICAgICAgICAgW0RJVkVSU0lPTiA9IE00U0gtSU5JVC1GTl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEJPRFktVE8tRVhQQU5EIGlzIHRoZSBib2R5IG9mIGEgc2hlbGwgZnVuY3Rpb24gdG8gYmUgZW1pdHRlZCBpbiB0aGUKKyMgZ2l2ZW4gZGl2ZXJzaW9uIHdoZW4gZXhwYW5kZWQgKHJlcXVpcmVkIG9yIG5vdCkuICBVbmxpa2Ugb3RoZXIKKyMgeHhfUkVRVUlSRSBtYWNyb3MsIEJPRFktVE8tRVhQQU5EIGlzIG1hbmRhdG9yeS4gIElmIENPTU1FTlQgaXMKKyMgcHJvdmlkZWQgKG9mdGVuIHZpYSBBU19GVU5DVElPTl9ERVNDUklCRSksIGl0IGlzIGxpc3RlZCB3aXRoIGEKKyMgbmV3bGluZSBiZWZvcmUgdGhlIGZ1bmN0aW9uIG5hbWUuCittNF9kZWZpbmUoW0FTX1JFUVVJUkVfU0hFTExfRk5dLAorW200X3Byb3ZpZGVfaWYoW0FTX1NIRUxMX0ZOXyQxXSwgW10sCitbQVNfUkVRVUlSRShbQVNfU0hFTExfRk5fJDFdLAorW200X3Byb3ZpZGUoW0FTX1NIRUxMX0ZOXyQxXSlfJDAoJEApXSwKK200X2RlZmF1bHRfcXVvdGVkKFskNF0sIFtNNFNILUlOSVQtRk5dKSldKV0pCisKKworIyBfQVNfUlVOKFRFU1QsIFtTSEVMTF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUnVuIFRFU1QgdW5kZXIgdGhlIGN1cnJlbnQgc2hlbGwgKGlmIG9uZSBwYXJhbWV0ZXIgaXMgdXNlZCkKKyMgb3IgdW5kZXIgdGhlIGdpdmVuIFNIRUxMLCBwcm90ZWN0aW5nIGl0IGZyb20gc3ludGF4IGVycm9ycy4KKyMgU2V0IGFzX3J1biBpbiBvcmRlciB0byBhc3Npc3QgX0FTX0xJTkVOT19XT1JLUy4KK200X2RlZmluZShbX0FTX1JVTl0sCitbbTRfaWZ2YWwoWyQyXSwgW3sgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIkMSB8IGFzX3J1bj1hICQyOyB9XSwKKwkJWyhldmFsICQxKV0pIDI+L2Rldi9udWxsXSkKKworCisjIF9BU19TSEVMTF9GTl9XT1JLCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgaXMgYSBzcHkgdG8gZGV0ZWN0ICJpbiB0aGUgd2lsZCIgc2hlbGxzIHRoYXQgZG8gbm90IHN1cHBvcnQgc2hlbGwKKyMgZnVuY3Rpb25zIGNvcnJlY3RseS4gIEl0IGlzIGJhc2VkIG9uIHRoZSBtNHNoLmF0IEF1dG90ZXN0IHRlc3RjYXNlcy4KK200X2RlZmluZShbX0FTX1NIRUxMX0ZOX1dPUktdLAorW2FzX2ZuX3JldHVybiAoKSB7IChleGl0IFskXTEpOyB9Cithc19mbl9zdWNjZXNzICgpIHsgYXNfZm5fcmV0dXJuIDA7IH0KK2FzX2ZuX2ZhaWx1cmUgKCkgeyBhc19mbl9yZXR1cm4gMTsgfQorYXNfZm5fcmV0X3N1Y2Nlc3MgKCkgeyByZXR1cm4gMDsgfQorYXNfZm5fcmV0X2ZhaWx1cmUgKCkgeyByZXR1cm4gMTsgfQorCitleGl0Y29kZT0wCithc19mbl9zdWNjZXNzIHx8IHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9zdWNjZXNzIGZhaWxlZC47IH0KK2FzX2ZuX2ZhaWx1cmUgJiYgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX2ZhaWx1cmUgc3VjY2VlZGVkLjsgfQorYXNfZm5fcmV0X3N1Y2Nlc3MgfHwgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3JldF9zdWNjZXNzIGZhaWxlZC47IH0KK2FzX2ZuX3JldF9mYWlsdXJlICYmIHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9yZXRfZmFpbHVyZSBzdWNjZWVkZWQuOyB9CitBU19JRihbKCBzZXQgeDsgYXNfZm5fcmV0X3N1Y2Nlc3MgeSAmJiB0ZXN0IHggPSAiWyRdMSIgKV0sIFtdLAorICAgICAgW2V4aXRjb2RlPTE7IGVjaG8gcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgbm90IHNhdmVkLl0pCit0ZXN0IHgkZXhpdGNvZGUgPSB4MFtdXSkjIF9BU19TSEVMTF9GTl9XT1JLCisKKworIyBfQVNfU0hFTExfU0FOSVRJWkUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgaXMgdGhlIHByb2xvZyB0aGF0IGlzIGVtaXR0ZWQgYnkgQVNfSU5JVCBhbmQgQVNfSU5JVF9HRU5FUkFURUQ7CisjIGl0IGlzIGV4ZWN1dGVkIHByaW9yIHRvIHNoZWxsIGZ1bmN0aW9uIGRlZmluaXRpb25zLCBoZW5jZSB0aGUKKyMgdGVtcG9yYXJ5IHJlZGVmaW5pdGlvbiBvZiBBU19FWElULgorbTRfZGVmdW4oW19BU19TSEVMTF9TQU5JVElaRV0sCitbbTRfcHVzaGRlZihbQVNfRVhJVF0sIFtleGl0IG00X2RlZmF1bHQoXW00X2RxdW90ZShbJF1bMV0pWywgMSldKV1kbmwKK1ttNF90ZXh0X2JveChbTTRzaCBJbml0aWFsaXphdGlvbi5dKQorCitBU19CT1VSTkVfQ09NUEFUSUJMRQorX0FTX0VDSE9fUFJFUEFSRQorX0FTX1BBVEhfU0VQQVJBVE9SX1BSRVBBUkUKKworIyBJRlMKKyMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuICBRdW90aW5nIGlzCisjIHRoZXJlIHRvIHByZXZlbnQgZWRpdG9ycyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHNwYWNlLXRhYi4KKyMgKElmIF9BU19QQVRIX1dBTEsgd2VyZSBjYWxsZWQgd2l0aCBJRlMgdW5zZXQsIGl0IHdvdWxkIGRpc2FibGUgd29yZAorIyBzcGxpdHRpbmcgYnkgc2V0dGluZyBJRlMgdG8gZW1wdHkgdmFsdWUuKQorSUZTPSIgIiIJJGFzX25sIgorCisjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgorY2FzZSAkWzBdIGluIEAlOkAoKAorICAqW1tcXC9dXSogKSBhc19teXNlbGY9JFswXSA7OworICAqKSBfQVNfUEFUSF9XQUxLKFtdLAorCQkgICBbdGVzdCAtciAiJGFzX2Rpci8kWzBdIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kWzBdICYmIGJyZWFrXSkKKyAgICAgOzsKK2VzYWMKKyMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKyMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBwYXRoLgoraWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgorICBhc19teXNlbGY9JFswXQorZmkKK2lmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKyAgQVNfRUNITyhbIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIl0pID4mMgorICBBU19FWElUCitmaQorCisjIFVuc2V0IHZhcmlhYmxlcyB0aGF0IHdlIGRvIG5vdCBuZWVkIGFuZCB3aGljaCBjYXVzZSBidWdzIChlLmcuIGluCisjIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVzZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiCisjIHN1cHByZXNzZXMgYW55ICJTZWdtZW50YXRpb24gZmF1bHQiIG1lc3NhZ2UgdGhlcmUuICAnKCgnIGNvdWxkCisjIHRyaWdnZXIgYSBidWcgaW4gcGRrc2ggNS4yLjE0LgorZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBNQUlMUEFUSAorZG8gZXZhbCB0ZXN0IHhcJHskYXNfdmFyK3NldH0gPSB4c2V0IFwKKyAgJiYgKCAodW5zZXQgJGFzX3ZhcikgfHwgZXhpdCAxKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgJGFzX3ZhciB8fCA6Citkb25lCitQUzE9JyQgJworUFMyPSc+ICcKK1BTND0nKyAnCisKKyMgTkxTIG51aXNhbmNlcy4KK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCitMQU5HVUFHRT1DCitleHBvcnQgTEFOR1VBR0UKKworIyBDRFBBVEguCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICitfbTRfcG9wZGVmKFtBU19FWElUXSldKSMgX0FTX1NIRUxMX1NBTklUSVpFCisKKworIyBBU19TSEVMTF9TQU5JVElaRQorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIGlzIG9ubHkgbmVlZGVkIGZvciB0aGUgc2FrZSBvZiBMaWJ0b29sLCB3aGljaCBzY3Jld3MgdXAgcm95YWxseQorIyBpbiBpdHMgdXNhZ2Ugb2YgTTRzaCBpbnRlcm5hbHMuCittNF9kZWZpbmUoW0FTX1NIRUxMX1NBTklUSVpFXSwKK1tfQVNfU0hFTExfU0FOSVRJWkUKK200X3Byb3ZpZGVfaWYoW0FTX0lOSVRdLCBbXSwKK1ttNF9wcm92aWRlKFtBU19JTklUXSkKK19BU19ERVRFQ1RfUkVRVUlSRUQoW19BU19TSEVMTF9GTl9XT1JLXSkKK19BU19ERVRFQ1RfQkVUVEVSX1NIRUxMCitfQVNfVU5TRVRfUFJFUEFSRQorXSldKQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAyLiBXcmFwcGVycyBhcm91bmQgYnVpbHRpbnMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBUaGlzIHNlY3Rpb24gaXMgbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkLgorCisKKyMgQVNfQ0FTRShXT1JELCBbUEFUVEVSTjFdLCBbSUYtTUFUQ0hFRDFdLi4uW0RFRkFVTFRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4cGFuZCBpbnRvCisjIHwgY2FzZSBXT1JEIGluICMoCisjIHwgICBQQVRURVJOMSkgSUYtTUFUQ0hFRDEgOzsgIygKKyMgfCAgIC4uLgorIyB8ICAgKikgREVGQVVMVCA7OworIyB8IGVzYWMKKyMgVGhlIHNoZWxsIGNvbW1lbnRzIGFyZSBpbnRlbnRpb25hbCwgdG8gd29yayBhcm91bmQgcGVvcGxlIHdobyBkb24ndAorIyByZWFsaXplIHRoZSBpbXBhY3RzIG9mIHVzaW5nIGluc3VmZmljaWVudCBtNCBxdW90aW5nLiAgVGhpcyBtYWNybworIyBhbHdheXMgdXNlcyA6IGFuZCBwcm92aWRlcyBhIGRlZmF1bHQgY2FzZSwgdG8gd29yayBhcm91bmQgU29sYXJpcworIyAvYmluL3NoIGJ1Z3MgcmVnYXJkaW5nIHRoZSBleGl0IHN0YXR1cy4KK200X2RlZmluZShbX0FTX0NBU0VdLAorWyBbQCU6QChdCisgICQxWyldIDoKKyAgICAkMiA7O10pCittNF9kZWZpbmUoW19BU19DQVNFX0RFRkFVTFRdLAorWyBbQCU6QChdCisgICpbKV0gOgorICAgICQxIDs7XSkKKworbTRfZGVmdW4oW0FTX0NBU0VdLAorW2Nhc2UgJDEgaW5bXW00X21hcF9hcmdzX3BhaXIoW18kMF0sIFtfJDBfREVGQVVMVF0sCisgICBtNF9zaGlmdCgkQG00X2lmKG00X2V2YWwoWyQjICYgMV0pLCBbMV0sIFssXSkpKQorZXNhY10pIyBBU19DQVNFCisKKworIyBfQVNfRVhJVF9QUkVQQVJFCisjIC0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIEFTX0VYSVQgYW5kIEFTX1NFVF9TVEFUVVMgd2lsbCB3b3JrLgorIworIyBXZSBjYW5ub3Qgc2ltcGx5IHVzZSAiZXhpdCBOIiBiZWNhdXNlIHNvbWUgc2hlbGxzICh6c2ggYW5kIFNvbGFyaXMgc2gpCisjIHdpbGwgbm90IHNldCAkPyB0byBOIHdoaWxlIHJ1bm5pbmcgdGhlIGNvZGUgc2V0IGJ5ICJ0cmFwIDAiCisjIFNvbWUgc2hlbGxzIGZvcmsgZXZlbiBmb3IgKGV4aXQgTiksIHNvIHdlIHVzZSBhIGhlbHBlciBmdW5jdGlvbgorIyB0byBzZXQgJD8gcHJpb3IgdG8gdGhlIGV4aXQuCisjIFRoZW4gdGhlcmUgYXJlIHNoZWxscyB0aGF0IGRvbid0IGluaGVyaXQgJD8gY29ycmVjdGx5IGludG8gdGhlIHN0YXJ0IG9mCisjIGEgc2hlbGwgZnVuY3Rpb24sIHNvIHdlIG11c3QgYWx3YXlzIGJlIGdpdmVuIGFuIGFyZ3VtZW50LgorIyBPdGhlciBzaGVsbHMgZG9uJ3QgdXNlIGAkPycgYXMgZGVmYXVsdCBmb3IgYGV4aXQnLCBoZW5jZSBqdXN0IHJlcGVhdGluZworIyB0aGUgZXhpdCB2YWx1ZSBjYW4gb25seSBoZWxwIGltcHJvdmluZyBwb3J0YWJpbGl0eS4KK200X2RlZnVuKFtfQVNfRVhJVF9QUkVQQVJFXSwKK1tBU19SRVFVSVJFX1NIRUxMX0ZOKFthc19mbl9zZXRfc3RhdHVzXSwKKyAgW0FTX0ZVTkNUSU9OX0RFU0NSSUJFKFthc19mbl9zZXRfc3RhdHVzXSwgW1NUQVRVU10sCisgICAgW1NldCAkPyB0byBTVEFUVVMsIHdpdGhvdXQgZm9ya2luZy5dKV0sIFsgIHJldHVybiAkW10xXSldZG5sCitbQVNfUkVRVUlSRV9TSEVMTF9GTihbYXNfZm5fZXhpdF0sCisgIFtBU19GVU5DVElPTl9ERVNDUklCRShbYXNfZm5fZXhpdF0sIFtTVEFUVVNdLAorICAgIFtFeGl0IHRoZSBzaGVsbCB3aXRoIFNUQVRVUywgZXZlbiBpbiBhICJ0cmFwIDAiIG9yICJzZXQgLWUiIGNvbnRleHQuXSldLAorWyAgc2V0ICtlCisgIGFzX2ZuX3NldF9zdGF0dXMgJFsxXQorICBleGl0ICRbMV1dKV0pI19BU19FWElUX1BSRVBBUkUKKworCisjIEFTX0VYSVQoW0VYSVQtQ09ERSA9ICQ/XSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeGl0LCB3aXRoIHN0YXR1cyBzZXQgdG8gRVhJVC1DT0RFIGluIHRoZSB3YXkgdGhhdCBpdCdzIHNlZW4KKyMgd2l0aGluICJ0cmFwIDAiLCBhbmQgd2l0aG91dCBpbnRlcmZlcmVuY2UgZnJvbSAic2V0IC1lIi4gIElmCisjIEVYSVQtQ09ERSBpcyBvbWl0dGVkLCB0aGVuIHVzZSAkPy4KK200X2RlZnVuKFtBU19FWElUXSwKK1tBU19SRVFVSVJFKFtfQVNfRVhJVF9QUkVQQVJFXSlbXWFzX2ZuX2V4aXQgbTRfaWZ2YWwoWyQxXSwgWyQxXSwgWyRdWz9dKV0pCisKKworIyBBU19GT1IoTUFDUk8sIFNIRUxMLVZBUiwgW0xJU1QgPSAiJEAiXSwgW0JPRFkgPSA6XSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4cGFuZCB0byBhIHNoZWxsIGxvb3AgdGhhdCBhc3NpZ25zIFNIRUxMLVZBUiB0byBlYWNoIG9mIHRoZQorIyB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBlbnRyaWVzIGluIExJU1QgKG9yICIkQCIgaWYgTElTVCBpcyBlbXB0eSksCisjIHRoZW4gZXhlY3V0ZXMgQk9EWS4gIEJPRFkgbWF5IGNhbGwgYnJlYWsgdG8gYWJvcnQgdGhlIGxvb3AsIG9yCisjIGNvbnRpbnVlIHRvIHByb2NlZWQgd2l0aCB0aGUgbmV4dCBlbGVtZW50IG9mIExJU1QuICBSZXF1aXJlcyB0aGF0CisjIElGUyBiZSBzZXQgdG8gdGhlIG5vcm1hbCBzcGFjZS10YWItbmV3bGluZS4gIEFzIGFuIG9wdGltaXphdGlvbiwKKyMgQk9EWSBzaG91bGQgYWNjZXNzIE1BQ1JPIHJhdGhlciB0aGFuICRTSEVMTC1WQVIuICBOb3JtYWxseSwgTUFDUk8KKyMgZXhwYW5kcyB0byAkU0hFTEwtVkFSLCBidXQgaWYgTElTVCBjb250YWlucyBvbmx5IGEgc2luZ2xlIGVsZW1lbnQKKyMgdGhhdCBuZWVkcyBubyBhZGRpdGlvbmFsIHNoZWxsIHF1b3RpbmcsIHRoZW4gTUFDUk8gd2lsbCBleHBhbmQgdG8KKyMgdGhhdCBlbGVtZW50LCB0aHVzIHByb3ZpZGluZyBhIGRpcmVjdCB2YWx1ZSByYXRoZXIgdGhhbiBhIHNoZWxsCisjIHZhcmlhYmxlIGluZGlyZWN0aW9uLgorIworIyBPbmx5IHVzZSB0aGUgb3B0aW1pemF0aW9uIGlmIExJU1QgY2FuIGJlIHVzZWQgd2l0aG91dCBhZGRpdGlvbmFsCisjIHNoZWxsIHF1b3RpbmcgaW4gZWl0aGVyIGEgbGl0ZXJhbCBvciBkb3VibGUtcXVvdGVkIGNvbnRleHQgKHRoYXQgaXMsCisjIHdlIGdpdmUgdXAgb24gZGVmYXVsdCBJRlMgY2hhcnMsIHBhcmFtZXRlciBleHBhbnNpb24sIGNvbW1hbmQKKyMgc3Vic3RpdHV0aW9uLCBzaGVsbCBxdW90aW5nLCBnbG9icywgb3IgcXVhZHJpZ3JhcGhzKS4gIElubGluZSB0aGUKKyMgbTRfZGVmbiBmb3Igc3BlZWQuCittNF9kZWZ1bihbQVNfRk9SXSwKK1ttNF9wdXNoZGVmKFskMV0sIG00X2lmKFskM10sIFtdLCBbWyQkMl1dLCBtNF90cmFuc2xpdChbJDNdLCBdZG5sCittNF9kcXVvdGUoX200X2RlZm4oW200X2NyX3N5bWJvbHMyXSkpW1slKz06LC4vLV0pLCBbXSwgW1skM11dLCBbWyQkMl1dKSldZG5sCitbZm9yICQyW11tNF9pZnZhbChbJDNdLCBbIGluICQzXSkKK2RvIDoKKyAgJDQKK2RvbmVbXV9tNF9wb3BkZWYoWyQxXSldKQorCisKKyMgQVNfSUYoVEVTVDEsIFtJRi1UUlVFMSA9IDpdLi4uW0lGLUZBTFNFID0gOl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeHBhbmQgaW50bworIyB8IGlmIFRFU1QxOyB0aGVuCisjIHwgICBJRi1UUlVFMQorIyB8IGVsaWYgVEVTVDI7IHRoZW4KKyMgfCAgIElGLVRSVUUyCisjIFsuLi5dCisjIHwgZWxzZQorIyB8ICAgSUYtRkFMU0UKKyMgfCBmaQorIyB3aXRoIHNpbXBsaWZpY2F0aW9ucyBpZiBJRi1UUlVFMSBhbmQvb3IgSUYtRkFMU0UgaXMgZW1wdHkuCisjCittNF9kZWZpbmUoW19BU19JRl0sCitbZWxpZiAkMTsgdGhlbiA6CisgICQyCitdKQorbTRfZGVmaW5lKFtfQVNfSUZfRUxTRV0sCitbbTRfaWZuYmxhbmsoWyQxXSwKK1tlbHNlCisgICQxCitdKV0pCisKK200X2RlZnVuKFtBU19JRl0sCitbaWYgJDE7IHRoZW4gOgorICAkMgorbTRfbWFwX2FyZ3NfcGFpcihbXyQwXSwgW18kMF9FTFNFXSwgbTRfc2hpZnQyKCRAKSldZG5sCitbZmlbXV0pIyBBU19JRgorCisKKyMgQVNfU0VUX1NUQVRVUyhTVEFUVVMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgdGhlIHNoZWxsIHN0YXR1cyAoJD8pIHRvIFNUQVRVUywgd2l0aG91dCBmb3JraW5nLgorbTRfZGVmdW4oW0FTX1NFVF9TVEFUVVNdLAorW0FTX1JFUVVJUkUoW19BU19FWElUX1BSRVBBUkVdKVtdYXNfZm5fc2V0X3N0YXR1cyAkMV0pCisKKworIyBfQVNfVU5TRVRfUFJFUEFSRQorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgJGFzX3Vuc2V0IHRvIGV4ZWN1dGUgQVNfVU5TRVQsIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQorIyB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIE00c2guCittNF9kZWZ1bihbX0FTX1VOU0VUX1BSRVBBUkVdLAorW0FTX0ZVTkNUSU9OX0RFU0NSSUJFKFthc19mbl91bnNldF0sIFtWQVJdLCBbUG9ydGFibHkgdW5zZXQgVkFSLl0pCithc19mbl91bnNldCAoKQoreworICBBU19VTlNFVChbJFsxXV0pCit9Cithc191bnNldD1hc19mbl91bnNldF0pCisKKworIyBBU19VTlNFVChWQVIpCisjIC0tLS0tLS0tLS0tLS0KKyMgVW5zZXQgdGhlIGVudiBWQVIsIHdvcmtpbmcgYXJvdW5kIHNoZWxscyB0aGF0IGRvIG5vdCBhbGxvdyB1bnNldHRpbmcKKyMgYSB2YXJpYWJsZSB0aGF0IGlzIG5vdCBhbHJlYWR5IHNldC4gIFlvdSBzaG91bGQgbm90IHVuc2V0IE1BSUwgYW5kCisjIE1BSUxDSEVDSywgYXMgdGhhdCB0cmlnZ2VycyBhIGJ1ZyBpbiBCYXNoIDIuMDEuCittNF9kZWZ1bihbQVNfVU5TRVRdLAorW3sgQVNfTElURVJBTF9JRihbJDFdLCBbXSwgW2V2YWwgXSkkMT07IHVuc2V0ICQxO31dKQorCisKKworCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAzLiBFcnJvciBhbmQgd2FybmluZ3MgYXQgdGhlIHNoZWxsIGxldmVsLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgQVNfTUVTU0FHRV9GRAorIyAtLS0tLS0tLS0tLS0tCisjIE11c3QgZXhwYW5kIHRvIHRoZSBmZCB3aGVyZSBtZXNzYWdlcyB3aWxsIGJlIHNlbnQuICBEZWZhdWx0cyB0byAxLAorIyBhbHRob3VnaCBhIHNjcmlwdCBtYXkgcmVhc3NpZ24gdGhpcyB2YWx1ZSBhbmQgdXNlIGV4ZWMgdG8gZWl0aGVyCisjIGNvcHkgc3Rkb3V0IHRvIHRoZSBuZXcgZmQsIG9yIG9wZW4gdGhlIG5ldyBmZCBvbiAvZGV2L251bGwuCittNF9kZWZpbmUoW0FTX01FU1NBR0VfRkRdLCBbMV0pCisKKyMgQVNfTUVTU0FHRV9MT0dfRkQKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgTXVzdCBleHBhbmQgdG8gZWl0aGVyIHRoZSBlbXB0eSBzdHJpbmcgKHdoZW4gbm8gbG9nZ2luZyBpcworIyBwZXJmb3JtZWQpLCBvciB0byB0aGUgZmQgb2YgYSBsb2cgZmlsZS4gIERlZmF1bHRzIHRvIGVtcHR5LCBhbHRob3VnaAorIyBhIHNjcmlwdCBtYXkgcmVhc3NpZ24gdGhpcyB2YWx1ZSBhbmQgdXNlIGV4ZWMgdG8gb3BlbiBhIGxvZy4gIFdoZW4KKyMgbm90IGVtcHR5LCBtZXNzYWdlcyB0byBBU19NRVNTQUdFX0ZEIGFyZSBkdXBsaWNhdGVkIHRvIHRoZSBsb2csCisjIGFsb25nIHdpdGggYSBMSU5FTk8gcmVmZXJlbmNlLgorbTRfZGVmaW5lKFtBU19NRVNTQUdFX0xPR19GRF0pCisKKworIyBBU19PUklHSU5BTF9TVERJTl9GRAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNdXN0IGV4cGFuZCB0byB0aGUgZmQgb2YgdGhlIHNjcmlwdCdzIG9yaWdpbmFsIHN0ZGluLiAgRGVmYXVsdHMgdG8KKyMgMCwgYWx0aG91Z2ggdGhlIHNjcmlwdCBtYXkgcmVhc3NpZ24gdGhpcyB2YWx1ZSBhbmQgdXNlIGV4ZWMgdG8KKyMgc2h1ZmZsZSBmZCdzLgorbTRfZGVmaW5lKFtBU19PUklHSU5BTF9TVERJTl9GRF0sIFswXSkKKworCisjIEFTX0VTQ0FQRShTVFJJTkcsIFtDSEFSUyA9IGBcIiRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWRkIGJhY2tzbGFzaCBlc2NhcGluZyB0byB0aGUgQ0hBUlMgaW4gU1RSSU5HLiAgSW4gYW4gZWZmb3J0IHRvCisjIG9wdGltaXplIHVzZSBvZiB0aGlzIG1hY3JvIGluc2lkZSBkb3VibGUtcXVvdGVkIHNoZWxsIGNvbnN0cnVjdHMsCisjIHRoZSBiZWhhdmlvciBpcyBpbnRlbnRpb25hbGx5IHVuZGVmaW5lZCBpZiBDSEFSUyBpcyBsb25nZXIgdGhhbiA0CisjIGJ5dGVzLCBvciBjb250YWlucyBieXRlcyBvdXRzaWRlIG9mIHRoZSBzZXQgW2BcIiRdLiAgSG93ZXZlciwKKyMgcmVwZWF0ZWQgYnl0ZXMgd2l0aGluIHRoZSBzZXQgYXJlIHBlcm1pc3NpYmxlIChBU19FU0NBUEUoWyQxXSwgWyIiXSkKKyMgYmVpbmcgYSBjb21tb24gd2F5IHRvIGJlIG5pY2UgdG8gc3ludGF4IGhpZ2hsaWdodGluZykuCisjCisjIEF2b2lkIHRoZSBtNF9icGF0c3Vic3QgaWYgdGhlcmUgYXJlIG5vIGludGVyZXN0aW5nIGNoYXJhY3RlcnMgdG8gZXNjYXBlLgorIyBfQVNfRVNDQVBFIGJ5cGFzc2VzIGFyZ3VtZW50IGRlZmF1bHRpbmcuCittNF9kZWZpbmUoW0FTX0VTQ0FQRV0sCitbXyQwKFskMV0sIG00X2lmKFskMl0sIFtdLCBbW2BdLCBbXCIkXV0sIFttNF9zdWJzdHIoWyQyXSwgWzBdLCBbMV0pLCBbJDJdXSkpXSkKKworIyBfQVNfRVNDQVBFKFNUUklORywgS0VZLCBTRVQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQmFja3NsYXNoLWVzY2FwZSBhbGwgaW5zdGFuY2VzIG9mIHRoZSBzaW5nbGUgYnl0ZSBLRVkgb3IgdXAgdG8gZm91cgorIyBieXRlcyBpbiBTRVQgb2NjdXJyaW5nIGluIFNUUklORy4gIEFsdGhvdWdoIGEgY2hhcmFjdGVyIGNhbiBvY2N1cgorIyBtdWx0aXBsZSB0aW1lcywgb3B0aW11bSBlZmZpY2llbmN5IG9jY3VycyB3aGVuIEtFWSBhbmQgU0VUIGFyZQorIyBkaXN0aW5jdCwgYW5kIHdoZW4gU0VUIGRvZXMgbm90IGV4Y2VlZCB0d28gYnl0ZXMuICBUaGVzZSBwYXJ0aWN1bGFyCisjIHNlbWFudGljcyBhbGxvdyBmb3IgdGhlIGZld2VzdCBudW1iZXIgb2YgcGFyc2VzIG9mIFNUUklORywgYXMgd2VsbAorIyBhcyB0YWtpbmcgYWR2YW50YWdlIG9mIHRoZSBvcHRpbWl6YXRpb25zIGluIG00IDEuNC4xMysgd2hlbgorIyBtNF90cmFuc2xpdCBpcyBwYXNzZWQgU0VUIG9mIHNpemUgMiBvciBzbWFsbGVyLgorbTRfZGVmaW5lKFtfQVNfRVNDQVBFXSwKK1ttNF9pZihtNF9pbmRleChtNF90cmFuc2xpdChbWyQxXV0sIFskM10sIFskMiQyJDIkMl0pLCBbJDJdKSwgWy0xXSwKKyAgICAgICBbJDBfXSwgW200X2JwYXRzdWJzdF0pKFskMV0sIFtbJDIkM11dLCBbXFxcJl0pXSkKK200X2RlZmluZShbX0FTX0VTQ0FQRV9dLCBbJDFdKQorCisKKyMgX0FTX1FVT1RFKFNUUklORykKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgSWYgdGhlcmUgYXJlIHF1b3RlZCAodmlhIGJhY2tzbGFzaCkgYmFja3F1b3Rlcywgb3V0cHV0IFNUUklORworIyBsaXRlcmFsbHkgYW5kIHdhcm47IG90aGVyd2lzZSwgb3V0cHV0IFNUUklORyB3aXRoIGAgYW5kICIgcXVvdGVkLgorIworIyBDb21wYXRpYmlsaXR5IGdsdWUgYmV0d2VlbiB0aGUgb2xkIEFTX01TRyBzdWl0ZSB3aGljaCBkaWQgbm90CisjIHF1b3RlIGFueXRoaW5nLCBhbmQgdGhlIG1vZGVybiBzdWl0ZSB3aGljaCBxdW90ZXMgdGhlIHF1b3Rlcy4KKyMgSWYgU1RSSU5HIGNvbnRhaW5zIGBcXCcgb3IgYFwkJywgaXQncyBtb2Rlcm4uCisjIElmIFNUUklORyBjb250YWlucyBgXCInIG9yIGBcYCcsIGl0J3Mgb2xkLgorIyBPdGhlcndpc2UgaXQncyBtb2Rlcm4uCisjCisjIFByb2ZpbGluZyBzaG93cyB0aGF0IG00X2luZGV4IGlzIDUgdG8gOHggZmFzdGVyIHRoYW4gbTRfYnJlZ2V4cC4gIFRoZQorIyBzbG93ZXIgaW1wbGVtZW50YXRpb24gdXNlZDoKKyMgbTRfYm1hdGNoKFskMV0sCisjCSAgICBbXFxbXFwkXV0sIFskMl0sCisjCSAgICBbXFxbYCJdXSwgWyQzXSwKKyMJICAgIFskMl0pCisjIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGNhdGVycyB0byB0aGUgY29tbW9uIGNhc2Ugb2Ygbm8gYmFja3NsYXNoZXMsCisjIHRvIG1pbmltaXplIG00X2luZGV4IGV4cGFuc2lvbnMgKGhlbmNlIHRoZSBuZXN0ZWQgaWYpLgorbTRfZGVmaW5lKFtfQVNfUVVPVEVdLAorW200X2NvbmQoW200X2luZGV4KFskMV0sIFtcXSldLCBbLTFdLCBbX0FTX1FVT1RFX01PREVSTl0sCisJIFttNF9ldmFsKG00X2luZGV4KG00X3RyYW5zbGl0KFtbJDFdXSwgWyRdLCBbXF0pLCBbXFxdKSA+PSAwKV0sCitbMV0sIFtfQVNfUVVPVEVfTU9ERVJOXSwKKwkgW200X2V2YWwobTRfaW5kZXgobTRfdHJhbnNsaXQoW1skMV1dLCBbIl0sIFtgXSksIFtcYF0pID49IDApXSxkbmwiCitbMV0sIFtfQVNfUVVPVEVfT0xEXSwKKwkgW19BU19RVU9URV9NT0RFUk5dKShbJDFdKV0pCisKK200X2RlZmluZShbX0FTX1FVT1RFX01PREVSTl0sCitbX0FTX0VTQ0FQRShbJDFdLCBbYF0sIFsiIl0pXSkKKworbTRfZGVmaW5lKFtfQVNfUVVPVEVfT0xEXSwKK1ttNF93YXJuKFtvYnNvbGV0ZV0sCisgICBbYmFjayBxdW90ZXMgYW5kIGRvdWJsZSBxdW90ZXMgbXVzdCBub3QgYmUgZXNjYXBlZCBpbjogJDFdKSQxXSkKKworCisjIF9BU19FQ0hPX1VOUVVPVEVEKFNUUklORywgW0ZEID0gQVNfTUVTU0FHRV9GRF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gc2hlbGwgZXhwYW5zaW9ucyBvbiBTVFJJTkcgYW5kIGVjaG8gdGhlIHN0cmluZyB0byBGRC4KK200X2RlZmluZShbX0FTX0VDSE9fVU5RVU9URURdLAorW0FTX0VDSE8oWyIkMSJdKSA+Jm00X2RlZmF1bHQoWyQyXSwgW0FTX01FU1NBR0VfRkRdKV0pCisKKworIyBfQVNfRUNITyhTVFJJTkcsIFtGRCA9IEFTX01FU1NBR0VfRkRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm90ZWN0IFNUUklORyBmcm9tIGJhY2txdW90ZSBleHBhbnNpb24sIGVjaG8gdGhlIHJlc3VsdCB0byBGRC4KK200X2RlZmluZShbX0FTX0VDSE9dLAorW19BU19FQ0hPX1VOUVVPVEVEKFtfQVNfUVVPVEUoWyQxXSldLCBbJDJdKV0pCisKKworIyBfQVNfRUNIT19MT0coU1RSSU5HKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMb2cgdGhlIHN0cmluZyB0byBBU19NRVNTQUdFX0xPR19GRC4KK200X2RlZnVuX2luaXQoW19BU19FQ0hPX0xPR10sCitbQVNfUkVRVUlSRShbX0FTX0xJTkVOT19QUkVQQVJFXSldLAorW19BU19FQ0hPKFskYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICQxXSwgQVNfTUVTU0FHRV9MT0dfRkQpXSkKKworCisjIF9BU19FQ0hPX05fUFJFUEFSRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgd2hldGhlciB0byB1c2UgLW4sIFxjLCBvciBuZXdsaW5lLXRhYiB0byBzZXBhcmF0ZQorIyBjaGVja2luZyBtZXNzYWdlcyBmcm9tIHJlc3VsdCBtZXNzYWdlcy4KKyMgRG9uJ3QgdHJ5IHRvIGNhY2hlLCBzaW5jZSB0aGUgcmVzdWx0cyBvZiB0aGlzIG1hY3JvIGFyZSBuZWVkZWQgdG8KKyMgZGlzcGxheSB0aGUgY2hlY2tpbmcgbWVzc2FnZS4gIEluIGFkZGl0aW9uLCBjYWNoaW5nIHNvbWV0aGluZyB1c2VkIG9uY2UKKyMgaGFzIGxpdHRsZSBpbnRlcmVzdC4KKyMgSWRlYSBib3Jyb3dlZCBmcm9tIGRpc3QgMy4wLiAgVXNlIGAqYyosJywgbm90IGAqYywnIGJlY2F1c2UgaWYgYFxjJworIyBmYWlsZWQgdGhlcmUgaXMgYWxzbyBhIG5ld2xpbmUgdG8gbWF0Y2guICBVc2UgYHh5JyBiZWNhdXNlIGBcYycgZWNob2VkCisjIGluIGEgY29tbWFuZCBzdWJzdGl0dXRpb24gcHJpbnRzIG9ubHkgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgb3V0cHV0CisjIHdpdGgga3NoIHZlcnNpb24gTS0xMS8xNi84OGYgb24gQUlYIDYuMTsgaXQgbmVlZHMgdG8gYmUgcmVzZXQgYnkgYW5vdGhlcgorIyBiYWNrcXVvdGVkIGVjaG8uCittNF9kZWZ1bihbX0FTX0VDSE9fTl9QUkVQQVJFXSwKK1tFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQorY2FzZSBgZWNobyAtbiB4YCBpbiBAJTpAKCgoKCgKKy1uKikKKyAgY2FzZSBgZWNobyAneHlcYydgIGluCisgICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgorICB4eSkgIEVDSE9fQz0nXGMnOzsKKyAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBvbiBBSVggNi4xYCA+IC9kZXYvbnVsbAorICAgICAgIEVDSE9fVD0nCSc7OworICBlc2FjOzsKKyopCisgIEVDSE9fTj0nLW4nOzsKK2VzYWMKK10pIyBfQVNfRUNIT19OX1BSRVBBUkUKKworCisjIF9BU19FQ0hPX04oU1RSSU5HLCBbRkQgPSBBU19NRVNTQUdFX0ZEXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTYW1lIGFzIF9BU19FQ0hPLCBidXQgZWNobyBkb2Vzbid0IHJldHVybiB0byBhIG5ldyBsaW5lLgorbTRfZGVmaW5lKFtfQVNfRUNIT19OXSwKK1tBU19FQ0hPX04oWyJfQVNfUVVPVEUoWyQxXSkiXSkgPiZtNF9kZWZhdWx0KFskMl0sIFtBU19NRVNTQUdFX0ZEXSldKQorCisKKyMgQVNfTUVTU0FHRShTVFJJTkcsIFtGRCA9IEFTX01FU1NBR0VfRkRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCAiYGJhc2VuYW1lICQwYDogU1RSSU5HIiB0byB0aGUgb3BlbiBmaWxlIEZELCBhbmQgaWYgbG9nZ2luZworIyBpcyBlbmFibGVkLCBjb3B5IGl0IHRvIHRoZSBsb2cgd2l0aCBhIHJlZmVyZW5jZSB0byBMSU5FTk8uCittNF9kZWZ1bl9pbml0KFtBU19NRVNTQUdFXSwKK1tBU19SRVFVSVJFKFtfQVNfTUVfUFJFUEFSRV0pXSwKK1ttNF9pZnZhbChBU19NRVNTQUdFX0xPR19GRCwKKwkgIFt7IF9BU19FQ0hPX0xPRyhbJDFdKQorX0FTX0VDSE8oWyRhc19tZTogJDFdLCBbJDJdKTt9XSwKKwkgIFtfQVNfRUNITyhbJGFzX21lOiAkMV0sIFskMl0pXSlbXV0pCisKKworIyBBU19XQVJOKFBST0JMRU0pCisjIC0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0ICJgYmFzZW5hbWUgJDBgOiBXQVJOSU5HOiBQUk9CTEVNIiB0byBzdGRlcnIuCittNF9kZWZpbmUoW0FTX1dBUk5dLAorW0FTX01FU1NBR0UoW1dBUk5JTkc6ICQxXSwgWzJdKV0pIyBBU19XQVJOCisKKworIyBfQVNfRVJST1JfUFJFUEFSRQorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBPdXRwdXQgdGhlIHNoZWxsIGZ1bmN0aW9uIHVzZWQgYnkgQVNfRVJST1IuICBUaGlzIGlzIGRlc2lnbmVkIHRvIGJlCisjIGV4cGFuZGVkIGR1cmluZyB0aGUgbTRfd3JhcCBjbGVhbnVwLgorIworIyBJZiBBU19NRVNTQUdFX0xPR19GRCBpcyBub24tZW1wdHkgYXQgdGhlIGVuZCBvZiB0aGUgc2NyaXB0LCB0aGVuCisjIG1ha2UgdGhpcyBmdW5jdGlvbiB0YWtlIG9wdGlvbmFsIHBhcmFtZXRlcnMgdGhhdCB1c2UgTElORU5PIGF0IHRoZQorIyBwb2ludHMgd2hlcmUgQVNfRVJST1Igd2FzIGV4cGFuZGVkIHdpdGggbm9uLWVtcHR5IEFTX01FU1NBR0VfTE9HX0ZEOworIyBvdGhlcndpc2UsIGFzc3VtZSB0aGUgZW50aXJlIHNjcmlwdCBkb2VzIG5vdCBkbyBsb2dnaW5nLgorbTRfZGVmaW5lKFtfQVNfRVJST1JfUFJFUEFSRV0sCitbQVNfUkVRVUlSRV9TSEVMTF9GTihbYXNfZm5fZXJyb3JdLAorICBbQVNfRlVOQ1RJT05fREVTQ1JJQkUoW2FzX2ZuX2Vycm9yXSwgW0VSUk9SXW00X2lmdmFsKEFTX01FU1NBR0VfTE9HX0ZELAorICAgICAgW1sgW1tMSU5FTk8gTE9HX0ZEXV1dXSksCisgICAgW091dHB1dCAiYGJhc2VuYW1lIEBTfEAwYDogZXJyb3I6IEVSUk9SIiB0byBzdGRlcnIuXQorbTRfaWZ2YWwoQVNfTUVTU0FHRV9MT0dfRkQsCisgICAgW1tJZiBMSU5FTk8gYW5kIExPR19GRCBhcmUgcHJvdmlkZWQsIGFsc28gb3V0cHV0IHRoZSBlcnJvciB0byBMT0dfRkQsCisgICAgICByZWZlcmVuY2luZyBMSU5FTk8uXV0pCisgICAgW1RoZW4gZXhpdCB0aGUgc2NyaXB0IHdpdGggc3RhdHVzICQ/LCB1c2luZyAxIGlmIHRoYXQgd2FzIDAuXSldLAorWyAgYXNfc3RhdHVzPSQ/OyB0ZXN0ICRhc19zdGF0dXMgLWVxIDAgJiYgYXNfc3RhdHVzPTEKK200X2lmdmFsKEFTX01FU1NBR0VfTE9HX0ZELAorW200X3B1c2hkZWYoW0FTX01FU1NBR0VfTE9HX0ZEXSwgWyRbM11dKWRubAorICBpZiB0ZXN0ICIkWzNdIjsgdGhlbgorICAgIEFTX0xJTkVOT19QVVNIKFskWzJdXSkKKyAgICBfQVNfRUNIT19MT0coW2Vycm9yOiAkWzFdXSkKKyAgZmkKK200X2RlZmluZShbQVNfTUVTU0FHRV9MT0dfRkRdKV0sIFttNF9wdXNoZGVmKFtBU19NRVNTQUdFX0xPR19GRF0pXSlkbmwKKyAgQVNfTUVTU0FHRShbZXJyb3I6ICRbMV1dLCBbMl0pCitfbTRfcG9wZGVmKFtBU19NRVNTQUdFX0xPR19GRF0pZG5sCisgIEFTX0VYSVQoWyRhc19zdGF0dXNdKV0pXSkKKworIyBBU19FUlJPUihFUlJPUiwgW0VYSVQtU1RBVFVTID0gbWF4KCQ/LzEpXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCAiYGJhc2VuYW1lICQwYDogZXJyb3I6IEVSUk9SIiB0byBzdGRlcnIsIHRoZW4gZXhpdCB0aGUKKyMgc2NyaXB0IHdpdGggRVhJVC1TVEFUVVMuCittNF9kZWZ1bl9pbml0KFtBU19FUlJPUl0sCitbbTRfYXBwZW5kX3VuaXEoW19BU19DTEVBTlVQXSwKKyAgW200X2RpdmVydF90ZXh0KFtNNFNILUlOSVQtRk5dLCBbX0FTX0VSUk9SX1BSRVBBUkVbXV0pXSldLAorW200X2lmdmFsbihbJDJdLCBbeyBBU19TRVRfU1RBVFVTKFskMl0pXSldZG5sCitbYXNfZm5fZXJyb3IgIl9BU19RVU9URShbJDFdKSJtNF9pZnZhbChBU19NRVNTQUdFX0xPR19GRCwKKyAgWyAiJExJTkVOTyIgQVNfTUVTU0FHRV9MT0dfRkRdKVtdbTRfaWZ2YWwoWyQyXSwgWzsgfV0pXSkKKworCisjIEFTX0xJTkVOT19QVVNIKFtMSU5FTk9dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSWYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IGNhbGwgdG8gQVNfTElORU5PX1BVU0gsIG1ha2Ugc3VyZSB0aGF0CisjIEFTX01FU1NBR0Ugd2lsbCBwcmludCBMSU5FTk8gYXMgdGhlIGxpbmUgbnVtYmVyLgorbTRfZGVmdW4oW0FTX0xJTkVOT19QVVNIXSwKK1thc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrXSkKKworCisjIEFTX0xJTkVOT19QT1AoW0xJTkVOT10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZiB0aGlzIGlzIGNhbGwgYmFsYW5jZXMgdGhlIG91dGVybW9zdCBjYWxsIHRvIEFTX0xJTkVOT19QVVNILAorIyBBU19NRVNTQUdFIHdpbGwgcmVzdGFydCBwcmludGluZyAkTElORU5PIGFzIHRoZSBsaW5lIG51bWJlci4KK200X2RlZnVuKFtBU19MSU5FTk9fUE9QXSwKK1tldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgQVNfVU5TRVQoW2FzX2xpbmVub10pXSkKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyA0LiBQb3J0YWJsZSB2ZXJzaW9ucyBvZiBjb21tb24gdG9vbHMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBUaGlzIHNlY3Rpb24gaXMgbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkLgorCisKKyMgQVNfQkFTRU5BTUUoRklMRS1OQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNpbXVsYXRlIHRoZSBjb21tYW5kICdiYXNlbmFtZSBGSUxFLU5BTUUnLiAgTm90IGFsbCBzeXN0ZW1zIGhhdmUgYmFzZW5hbWUuCisjIEFsc28gc2VlIHRoZSBjb21tZW50cyBmb3IgQVNfRElSTkFNRS4KKworbTRfZGVmdW4oW19BU19CQVNFTkFNRV9FWFBSXSwKK1skYXNfZXhwciBYL1tdJDEgOiAnLiovXChbW14vXVteL10qXVwpLyokJyBcfCBcCisJIFhbXSQxIDogJ1hcKC8vXCkkJyBcfCBcCisJIFhbXSQxIDogJ1hcKC9cKScgXHwgLl0pCisKK200X2RlZnVuKFtfQVNfQkFTRU5BTUVfU0VEXSwKK1tBU19FQ0hPKFtYL1tdJDFdKSB8CisgICAgc2VkIFsnL14uKlwvXChbXi9dW14vXSpcKVwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXC9cKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXC9cKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ11dKQorCittNF9kZWZ1bl9pbml0KFtBU19CQVNFTkFNRV0sCitbQVNfUkVRVUlSRShbXyQwX1BSRVBBUkVdKV0sCitbJGFzX2Jhc2VuYW1lIC0tICQxIHx8CitfQVNfQkFTRU5BTUVfRVhQUihbJDFdKSAyPi9kZXYvbnVsbCB8fAorX0FTX0JBU0VOQU1FX1NFRChbJDFdKV0pCisKKworIyBfQVNfQkFTRU5BTUVfUFJFUEFSRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBdm9pZCBTb2xhcmlzIDkgL3Vzci91Y2IvYmFzZW5hbWUsIGFzIGBiYXNlbmFtZSAvJyBvdXRwdXRzIGFuIGVtcHR5IGxpbmUuCisjIEFsc28sIHRyYWRpdGlvbmFsIGJhc2VuYW1lIG1pc2hhbmRsZXMgLS0uICBSZXF1aXJlIGhlcmUgX0FTX0VYUFJfUFJFUEFSRSwKKyMgdG8gYXZvaWQgcHJvYmxlbXMgd2hlbiBfQVNfQkFTRU5BTUUgaXMgY2FsbGVkIGZyb20gdGhlIE00U0gtSU5JVCBkaXZlcnNpb24uCittNF9kZWZ1bihbX0FTX0JBU0VOQU1FX1BSRVBBUkVdLAorW0FTX1JFUVVJUkUoW19BU19FWFBSX1BSRVBBUkVdKV1kbmwKK1tpZiAoYmFzZW5hbWUgLS0gLykgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLS0gLyAyPiYxYCIgPSAiWC8iOyB0aGVuCisgIGFzX2Jhc2VuYW1lPWJhc2VuYW1lCitlbHNlCisgIGFzX2Jhc2VuYW1lPWZhbHNlCitmaQorXSkjIF9BU19CQVNFTkFNRV9QUkVQQVJFCisKKworIyBBU19ESVJOQU1FKEZJTEUtTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNpbXVsYXRlIHRoZSBjb21tYW5kICdkaXJuYW1lIEZJTEUtTkFNRScuICBOb3QgYWxsIHN5c3RlbXMgaGF2ZSBkaXJuYW1lLgorIyBUaGlzIG1hY3JvIG11c3QgYmUgdXNhYmxlIGZyb20gaW5zaWRlIGAgYC4KKyMKKyMgUHJlZmVyIGV4cHIgdG8gZWNob3xzZWQsIHNpbmNlIGV4cHIgaXMgdXN1YWxseSBmYXN0ZXIgYW5kIGl0IGhhbmRsZXMKKyMgYmFja3NsYXNoZXMgYW5kIG5ld2xpbmVzIGNvcnJlY3RseS4gIEhvd2V2ZXIsIG9sZGVyIGV4cHIKKyMgaW1wbGVtZW50YXRpb25zIChlLmcuIFN1bk9TIDQgZXhwciBhbmQgU29sYXJpcyA4IC91c3IvdWNiL2V4cHIpIGhhdmUKKyMgYSBzaWxseSBsZW5ndGggbGltaXQgdGhhdCBjYXVzZXMgZXhwciB0byBmYWlsIGlmIHRoZSBtYXRjaGVkCisjIHN1YnN0cmluZyBpcyBsb25nZXIgdGhhbiAxMjAgYnl0ZXMuICBTbyBmYWxsIGJhY2sgb24gZWNob3xzZWQgaWYKKyMgZXhwciBmYWlscy4KK200X2RlZnVuX2luaXQoW19BU19ESVJOQU1FX0VYUFJdLAorW0FTX1JFUVVJUkUoW19BU19FWFBSX1BSRVBBUkVdKV0sCitbJGFzX2V4cHIgWFtdJDEgOiAnWFwoLipbW14vXV1cKS8vKltbXi9dW14vXV0qLyokJyBcfCBcCisJIFhbXSQxIDogJ1hcKC8vXClbW14vXV0nIFx8IFwKKwkgWFtdJDEgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWFtdJDEgOiAnWFwoL1wpJyBcfCAuXSkKKworbTRfZGVmdW4oW19BU19ESVJOQU1FX1NFRF0sCitbQVNfRUNITyhbWFtdJDFdKSB8CisgICAgc2VkIFsnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSddXSkKKworbTRfZGVmdW5faW5pdChbQVNfRElSTkFNRV0sCitbQVNfUkVRVUlSRShbXyQwX1BSRVBBUkVdKV0sCitbJGFzX2Rpcm5hbWUgLS0gJDEgfHwKK19BU19ESVJOQU1FX0VYUFIoWyQxXSkgMj4vZGV2L251bGwgfHwKK19BU19ESVJOQU1FX1NFRChbJDFdKV0pCisKKworIyBfQVNfRElSTkFNRV9QUkVQQVJFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0FTX0RJUk5BTUVfUFJFUEFSRV0sCitbQVNfUkVRVUlSRShbX0FTX0VYUFJfUFJFUEFSRV0pXWRubAorW2lmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc19kaXJuYW1lPWRpcm5hbWUKK2Vsc2UKKyAgYXNfZGlybmFtZT1mYWxzZQorZmkKK10pIyBfQVNfRElSTkFNRV9QUkVQQVJFCisKKworIyBBU19FQ0hPKFdPUkQpCisjIC0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0IFdPUkQgZm9sbG93ZWQgYnkgYSBuZXdsaW5lLiAgV09SRCBtdXN0IGJlIGEgc2luZ2xlIHNoZWxsIHdvcmQKKyMgKHR5cGljYWxseSBhIHF1b3RlZCBzdHJpbmcpLiAgVGhlIGJ5dGVzIG9mIFdPUkQgYXJlIG91dHB1dCBhcy1pcywgZXZlbgorIyBpZiBpdCBzdGFydHMgd2l0aCAiLSIgb3IgY29udGFpbnMgIlwiLgorbTRfZGVmdW5faW5pdChbQVNfRUNIT10sCitbQVNfUkVRVUlSRShbXyQwX1BSRVBBUkVdKV0sCitbJGFzX2VjaG8gJDFdKQorCisKKyMgQVNfRUNIT19OKFdPUkQpCisjIC0tLS0tLS0tLS0tLS0KKyMgTGlrZSBBU19FQ0hPKFdPUkQpLCBleGNlcHQgZG8gbm90IG91dHB1dCB0aGUgdHJhaWxpbmcgbmV3bGluZS4KK200X2RlZnVuX2luaXQoW0FTX0VDSE9fTl0sCitbQVNfUkVRVUlSRShbX0FTX0VDSE9fUFJFUEFSRV0pXSwKK1skYXNfZWNob19uICQxXSkKKworCisjIF9BU19FQ0hPX1BSRVBBUkUKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXJyYW5nZSBmb3IgJGFzX2VjaG8gJ0ZPTycgdG8gZWNobyBGT08gd2l0aG91dCBlc2NhcGUtaW50ZXJwcmV0YXRpb247CisjIGFuZCBzaW1pbGFybHkgZm9yICRhc19lY2hvX24sIHdoaWNoIG9taXRzIHRoZSB0cmFpbGluZyBuZXdsaW5lLgorIyAnRk9PJyBpcyBhbiBvcHRpb25hbCBzaW5nbGUgYXJndW1lbnQ7IGEgbWlzc2luZyBGT08gaXMgdHJlYXRlZCBhcyBlbXB0eS4KK200X2RlZnVuKFtfQVNfRUNIT19QUkVQQVJFXSwKK1tbYXNfbmw9JworJworZXhwb3J0IGFzX25sCisjIFByaW50aW5nIGEgbG9uZyBzdHJpbmcgY3Jhc2hlcyBTb2xhcmlzIDcgL3Vzci9iaW4vcHJpbnRmLgorYXNfZWNobz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KKyMgUHJlZmVyIGEga3NoIHNoZWxsIGJ1aWx0aW4gb3ZlciBhbiBleHRlcm5hbCBwcmludGYgcHJvZ3JhbSBvbiBTb2xhcmlzLAorIyBidXQgd2l0aG91dCB3YXN0aW5nIGZvcmtzIGZvciBiYXNoIG9yIHpzaC4KK2lmIHRlc3QgLXogIiRCQVNIX1ZFUlNJT04kWlNIX1ZFUlNJT04iIFwKKyAgICAmJiAodGVzdCAiWGBwcmludCAtciAtLSAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50IC1yIC0tJworICBhc19lY2hvX249J3ByaW50IC1ybiAtLScKK2VsaWYgKHRlc3QgIlhgcHJpbnRmICVzICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnRmICVzXG4nCisgIGFzX2VjaG9fbj0ncHJpbnRmICVzJworZWxzZQorICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1uIC1uICRhc19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYXNfZWNobyI7IHRoZW4KKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgL3Vzci91Y2IvZWNobyAtbiAiJF1bMSRhc19ubCInCisgICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJworICBlbHNlCisgICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkXVsxIiA6ICJYXFwoLipcXCkiJworICAgIGFzX2VjaG9fbl9ib2R5PSdldmFsCisgICAgICBhcmc9JF1bMTsKKyAgICAgIGNhc2UgJGFyZyBpbiBAJTpAKAorICAgICAgKiIkYXNfbmwiKikKKwlleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpJGFzX25sIjsKKwlhcmc9YGV4cHIgIlgkYXJnIiA6ICIuKiRhc19ubFxcKC4qXFwpImA7OworICAgICAgZXNhYzsKKyAgICAgIGV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkiIHwgdHIgLWQgIiRhc19ubCIKKyAgICAnCisgICAgZXhwb3J0IGFzX2VjaG9fbl9ib2R5CisgICAgYXNfZWNob19uPSdzaCAtYyAkYXNfZWNob19uX2JvZHkgYXNfZWNobycKKyAgZmkKKyAgZXhwb3J0IGFzX2VjaG9fYm9keQorICBhc19lY2hvPSdzaCAtYyAkYXNfZWNob19ib2R5IGFzX2VjaG8nCitmaQorXV0pIyBfQVNfRUNIT19QUkVQQVJFCisKKworIyBBU19URVNUX1gKKyMgLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgYSBmaWxlIGhhcyBleGVjdXRhYmxlIG9yIHNlYXJjaCBwZXJtaXNzaW9ucy4KK200X2RlZnVuX2luaXQoW0FTX1RFU1RfWF0sCitbQVNfUkVRVUlSRShbX0FTX1RFU1RfUFJFUEFSRV0pXSwKK1skYXNfdGVzdF94ICQxW11dKSMgQVNfVEVTVF9YCisKKworIyBBU19FWEVDVVRBQkxFX1AKKyMgLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgYSBmaWxlIGlzIGEgcmVndWxhciBmaWxlIHRoYXQgaGFzIGV4ZWN1dGFibGUgcGVybWlzc2lvbnMuCittNF9kZWZ1bl9pbml0KFtBU19FWEVDVVRBQkxFX1BdLAorW0FTX1JFUVVJUkUoW19BU19URVNUX1BSRVBBUkVdKV0sCitbeyB0ZXN0IC1mICQxICYmIEFTX1RFU1RfWChbJDFdKTsgfV0pIyBBU19FWEVDVVRBQkxFX1AKKworCisjIF9BU19FWFBSX1BSRVBBUkUKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBRTlggNC4yNSBleHByIGNvbXB1dGVzIGFuZCBpc3N1ZSB0aGUgcmlnaHQgcmVzdWx0IGJ1dCBleGl0cyB3aXRoIGZhaWx1cmUuCisjIFRydTY0IGV4cHIgbWlzaGFuZGxlcyBsZWFkaW5nIHplcm9zIGluIG51bWVyaWMgc3RyaW5ncy4KKyMgRGV0ZWN0IHRoZXNlIGZsYXdzLgorbTRfZGVmdW4oW19BU19FWFBSX1BSRVBBUkVdLAorW2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorICBhc19leHByPWV4cHIKK2Vsc2UKKyAgYXNfZXhwcj1mYWxzZQorZmkKK10pIyBfQVNfRVhQUl9QUkVQQVJFCisKKworIyBfQVNfTUVfUFJFUEFSRQorIyAtLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgJGFzX21lIHRvIHRoZSBiYXNlbmFtZSBvZiB0aGUgZXhlY3V0YWJsZSBmaWxlJ3MgbmFtZS4KK200X2RlZnVuKFtBU19NRV9QUkVQQVJFXSwgW0FTX1JFUVVJUkUoW18kMF0pXSkKK200X2RlZnVuKFtfQVNfTUVfUFJFUEFSRV0sCitbQVNfUkVRVUlSRShbX0FTX0JBU0VOQU1FX1BSRVBBUkVdKV1kbmwKK1thc19tZT1gQVNfQkFTRU5BTUUoIiRbMF0iKWAKK10pCisKKyMgX0FTX0xJTkVOT19XT1JLUworIyAtLS0tLS0tLS0tLS0tLS0KKyMgU3VjY2VlZCBpZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBzaGVsbCBzdXBwb3J0cyBMSU5FTk8uCisjIFRoaXMgbWFjcm8gZG9lcyBub3QgZXhwYW5kIHRvIGEgc2luZ2xlIHNoZWxsIGNvbW1hbmQsIHNvIGJlIGNhcmVmdWwKKyMgd2hlbiB1c2luZyBpdC4gIFN1cnJvdW5kaW5nIHRoZSBib2R5IG9mIHRoaXMgbWFjcm8gd2l0aCB7fSB3b3VsZAorIyBjYXVzZSAiYmFzaCAtYyAnX0FTTElORU5PX1dPUktTJyIgdG8gZmFpbCAod2l0aCBCYXNoIDIuMDUsIGFueXdheSksCisjIGJ1dCB0aGF0IGJ1ZyBpcyBpcnJlbGV2YW50IHRvIG91ciB1c2Ugb2YgTElORU5PLiAgV2UgY2FuJ3QgdXNlCisjIEFTX1ZBUl9BUklUSCwgYXMgdGhpcyBpcyBleHBhbmRlZCBwcmlvciB0byBzaGVsbCBmdW5jdGlvbnMuCisjCisjIFRlc3RpbmcgZm9yIExJTkVOTyBzdXBwb3J0IGlzIGhhcmQ7IHdlIHVzZSBfQVNfTElORU5PX1dPUktTIGluc2lkZQorIyBfQVNfUlVOLCB3aGljaCBzb21ldGltZXMgZXZhbCdzIGl0cyBhcmd1bWVudCAocGRrc2ggZ2l2ZXMgZmFsc2UKKyMgbmVnYXRpdmVzIGlmICRMSU5FTk8gaXMgZXhwYW5kZWQgYnkgZXZhbCksIGFuZCBzb21ldGltZXMgcGFzc2VzIHRoZQorIyBhcmd1bWVudCB0byBhbm90aGVyIHNoZWxsIChpZiB0aGUgY3VycmVudCBzaGVsbCBzdXBwb3J0cyBMSU5FTk8sCisjIHRoZW4gZXhwYW5kaW5nICRMSU5FTk8gcHJpb3IgdG8gdGhlIHN0cmluZyBsZWFkcyB0byBmYWxzZQorIyBwb3NpdGl2ZXMpLiAgSGVuY2UsIHdlIHBlcmZvcm0gdHdvIHRlc3RzLCBhbmQgY29vcmRpbmF0ZSB3aXRoCisjIF9BU19ERVRFQ1RfRVhQQU5EICh3aGljaCBlbnN1cmVzIHRoYXQgb25seSB0aGUgZmlyc3Qgb2YgdHdvIExJTkVOTworIyBpcyBleHBhbmRlZCBpbiBhZHZhbmNlKSBhbmQgX0FTX1JVTiAod2hpY2ggc2V0cyAkYXNfcnVuIHRvICdhJyB3aGVuCisjIGhhbmRpbmcgdGhlIHRlc3QgdG8gYW5vdGhlciBzaGVsbCksIHNvIHRoYXQgd2Uga25vdyB3aGljaCB0ZXN0IHRvCisjIHRydXN0LgorbTRfZGVmaW5lKFtfQVNfTElORU5PX1dPUktTXSwKK1sgIGFzX2xpbmVub18xPSRMSU5FTk8gYXNfbGluZW5vXzFhPSRMSU5FTk8KKyAgYXNfbGluZW5vXzI9JExJTkVOTyBhc19saW5lbm9fMmE9JExJTkVOTworICBldmFsICd0ZXN0ICJ4JGFzX2xpbmVub18xJyRhc19ydW4nIiAhPSAieCRhc19saW5lbm9fMickYXNfcnVuJyIgJiYKKyAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSckYXNfcnVuJyArIDFgIiA9ICJ4JGFzX2xpbmVub18yJyRhc19ydW4nIiddKQorCisKKyMgX0FTX0xJTkVOT19QUkVQQVJFCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZiBMSU5FTk8gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgc2hlbGwsIHByb2R1Y2UgYSB2ZXJzaW9uIG9mIHRoaXMKKyMgc2NyaXB0IHdoZXJlIExJTkVOTyBpcyBoYXJkIGNvZGVkLgorIyBDb21wYXJpbmcgTElORU5PIGFnYWluc3QgX29saW5lXyBpcyBub3QgYSBnb29kIHNvbHV0aW9uLCBzaW5jZSBpbgorIyB0aGUgY2FzZSBvZiBlbWJlZGRlZCBleGVjdXRhYmxlcyAoc3VjaCBhcyBjb25maWcuc3RhdHVzIHdpdGhpbgorIyBjb25maWd1cmUpIHlvdSdkIGNvbXBhcmUgTElORU5PIHdydCBjb25maWcuc3RhdHVzIHZzLiBfb2xpbmVfIHdydAorIyBjb25maWd1cmUuCisjCisjIEFTX0VSUk9SIG5vcm1hbGx5IHVzZXMgTElORU5PIGlmIGxvZ2dpbmcsIGJ1dCBBU19MSU5FTk9fUFJFUEFSRSB1c2VzCisjIEFTX0VSUk9SLiAgQmVzaWRlcywgaWYgdGhlIGxvZ2dpbmcgZmQgaXMgb3Blbiwgd2UgZG9uJ3Qgd2FudCB0byB1c2UKKyMgJExJTkVOTyBpbiB0aGUgbG9nIGNvbXBsYWluaW5nIGFib3V0IGJyb2tlbiBMSU5FTk8uICBXZSBicmVhayB0aGUKKyMgY2lyY3VsYXIgcmVxdWlyZSBieSBjaGFuZ2luZyBBU19FUlJPUiBhbmQgQVNfTUVTU0FHRV9MT0dfRkQuCittNF9kZWZ1bihbQVNfTElORU5PX1BSRVBBUkVdLCBbQVNfUkVRVUlSRShbXyQwXSldKQorbTRfZGVmdW4oW19BU19MSU5FTk9fUFJFUEFSRV0sCitbQVNfUkVRVUlSRShbX0FTX0NSX1BSRVBBUkVdKV1kbmwKK1tBU19SRVFVSVJFKFtfQVNfTUVfUFJFUEFSRV0pXWRubAorW19BU19ERVRFQ1RfU1VHR0VTVEVEKFtfQVNfTElORU5PX1dPUktTXSldZG5sCitbbTRfcHVzaGRlZihbQVNfTUVTU0FHRV9MT0dfRkRdKV1kbmwKK1ttNF9wdXNoZGVmKFtBU19FUlJPUl0sCisgIFt7IEFTX01FU1NBR0UoXW00X2RxdW90ZShbZXJyb3I6ICRdWzFdKVssIFsyXSk7IEFTX0VYSVQoWzFdKTsgfV0pXWRubAorZG5sIENyZWF0ZSAkYXNfbWUubGluZW5vIGFzIGEgY29weSBvZiAkYXNfbXlzZWxmLCBidXQgd2l0aCAkTElORU5PCitkbmwgdW5pZm9ybWx5IHJlcGxhY2VkIGJ5IHRoZSBsaW5lIG51bWJlci4gIFRoZSBmaXJzdCAnc2VkJyBpbnNlcnRzIGEKK2RubCBsaW5lLW51bWJlciBsaW5lIGFmdGVyIGVhY2ggbGluZSB1c2luZyAkTElORU5POyB0aGUgc2Vjb25kICdzZWQnCitkbmwgZG9lcyB0aGUgcmVhbCB3b3JrLiAgVGhlIHNlY29uZCBzY3JpcHQgdXNlcyAnTicgdG8gcGFpciBlYWNoCitkbmwgbGluZS1udW1iZXIgbGluZSB3aXRoIHRoZSBsaW5lIGNvbnRhaW5pbmcgJExJTkVOTywgYW5kIGFwcGVuZHMKK2RubCB0cmFpbGluZyAnLScgZHVyaW5nIHN1YnN0aXR1dGlvbiBzbyB0aGF0ICRMSU5FTk8gaXMgbm90IGEgc3BlY2lhbAorZG5sIGNhc2UgYXQgbGluZSBlbmQuICAoUmFqYSBSIEhhcmluYXRoIHN1Z2dlc3RlZCBzZWQgJz0nLCBhbmQgUGF1bAorZG5sIEVnZ2VydCB3cm90ZSB0aGUgc2NyaXB0cyB3aXRoIG9wdGltaXphdGlvbiBoZWxwIGZyb20gUGFvbG8gQm9uemluaSkuCitbX0FTX0xJTkVOT19XT1JLUyB8fCB7CisgICMgQmxhbWUgTGVlIEUuIE1jTWFob24gKDE5MzEtMTk4OSkgZm9yIHNlZCdzIHN5bnRheC4gIDotKQorICBzZWQgLW4gJworICAgIHAKKyAgICAvW1skXV1MSU5FTk8vPQorICAnIDwkYXNfbXlzZWxmIHwKKyAgICBzZWQgJworICAgICAgcy9bWyRdXUxJTkVOTy4qLyYtLworICAgICAgdCBsaW5lbm8KKyAgICAgIGIKKyAgICAgIDpsaW5lbm8KKyAgICAgIE4KKyAgICAgIDpsb29wCisgICAgICBzL1tbJF1dTElORU5PXChbW14nJGFzX2NyX2FsbnVtJ19dXS4qXG5cKVwoLipcKS9cMlwxXDIvCisgICAgICB0IGxvb3AKKyAgICAgIHMvLVxuLiovLworICAgICcgPiRhc19tZS5saW5lbm8gJiYKKyAgY2htb2QgK3ggIiRhc19tZS5saW5lbm8iIHx8CisgICAgQVNfRVJST1IoW2Nhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsXSkKKworICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcworICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKKyAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpdGl2ZSB0byB0aGlzKS4KKyAgLiAiLi8kYXNfbWUubGluZW5vIgorICAjIEV4aXQgc3RhdHVzIGlzIHRoYXQgb2YgdGhlIGxhc3QgY29tbWFuZC4KKyAgZXhpdAorfQorX200X3BvcGRlZihbQVNfTUVTU0FHRV9MT0dfRkRdLCBbQVNfRVJST1JdKV0pIyBfQVNfTElORU5PX1BSRVBBUkUKKworCisjIF9BU19MTl9TX1BSRVBBUkUKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBEb24ndCB1c2UgY29uZnRlc3Quc3ltIHRvIGF2b2lkIGZpbGUgbmFtZSBpc3N1ZXMgb24gREpHUFAsIHdoZXJlIHRoaXMKKyMgd291bGQgeWllbGQgY29uZnRlc3Quc3ltLmV4ZSBmb3IgREpHUFAgPCAyLjA0LiAgQW5kIGRvbid0IHVzZSBgY29uZnRlc3QnCisjIGFzIGJhc2UgbmFtZSB0byBhdm9pZCBwcm9oaWJpdGluZyBjb25jdXJyZW5jeSAoZS5nLiwgY29uY3VycmVudAorIyBjb25maWcuc3RhdHVzZXMpLiAgT24gcmVhZC1vbmx5IG1lZGlhLCBhc3N1bWUgJ2NwIC1wJyBhbmQgaG9wZSB3ZQorIyBhcmUganVzdCBydW5uaW5nIC0taGVscCBhbnl3YXkuCittNF9kZWZ1bihbX0FTX0xOX1NfUFJFUEFSRV0sCitbcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKK2lmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorICBybSAtZiBjb25mJCQuZGlyL2NvbmYkJC5maWxlCitlbHNlCisgIHJtIC1mIGNvbmYkJC5kaXIKKyAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorZmkKK2lmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KKyAgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz0nbG4gLXMnCisgICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKyAgICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgorICAgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcCcuCisgICAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAorICAgICAgYXNfbG5fcz0nY3AgLXAnCisgIGVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz1sbgorICBlbHNlCisgICAgYXNfbG5fcz0nY3AgLXAnCisgIGZpCitlbHNlCisgIGFzX2xuX3M9J2NwIC1wJworZmkKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKK3JtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKK10pIyBfQVNfTE5fU19QUkVQQVJFCisKKworIyBBU19MTl9TKEZJTEUsIExJTkspCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRklYTUU6IFNob3VsZCB3ZSBhZGQgdGhlIGdsdWUgY29kZSB0byBoYW5kbGUgcHJvcGVybHkgcmVsYXRpdmUgc3ltbGlua3MKKyMgc2ltdWxhdGVkIHdpdGggYGxuJyBvciBgY3AnPworbTRfZGVmdW5faW5pdChbQVNfTE5fU10sCitbQVNfUkVRVUlSRShbX0FTX0xOX1NfUFJFUEFSRV0pXSwKK1skYXNfbG5fcyAkMSAkMl0pCisKKworIyBfQVNfTUtESVJfUAorIyAtLS0tLS0tLS0tLQorIyBFbWl0IGNvZGUgdGhhdCBjYW4gYmUgdXNlZCB0byBlbXVsYXRlIGBta2RpciAtcGAgd2l0aCBwbGFpbiBgbWtkaXInOworIyB0aGUgY29kZSBhc3N1bWVzIHRoYXQgIiRhc19kaXIiIGNvbnRhaW5zIHRoZSBkaXJlY3RvcnkgdG8gY3JlYXRlLgorIyAkYXNfZGlyIGlzIG5vcm1hbGl6ZWQsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gd29ycnkgYWJvdXQgdXNpbmcgLS0uCittNF9kZWZpbmUoW19BU19NS0RJUl9QXSwKK1tjYXNlICRhc19kaXIgaW4gIygKKyAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OworICBlc2FjCisgIHRlc3QgLWQgIiRhc19kaXIiIHx8IGV2YWwgJGFzX21rZGlyX3AgfHwgeworICAgIGFzX2RpcnM9CisgICAgd2hpbGUgOjsgZG8KKyAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAorICAgICAgKlwnKikgYXNfcWRpcj1gQVNfRUNITyhbIiRhc19kaXIiXSkgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjJygKKyAgICAgICopIGFzX3FkaXI9JGFzX2Rpcjs7CisgICAgICBlc2FjCisgICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgorICAgICAgYXNfZGlyPWBBU19ESVJOQU1FKCIkYXNfZGlyIilgCisgICAgICB0ZXN0IC1kICIkYXNfZGlyIiAmJiBicmVhaworICAgIGRvbmUKKyAgICB0ZXN0IC16ICIkYXNfZGlycyIgfHwgZXZhbCAibWtkaXIgJGFzX2RpcnMiCisgIH0gfHwgdGVzdCAtZCAiJGFzX2RpciIgfHwgQVNfRVJST1IoW2Nhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXJdKQorXSkKKworIyBBU19NS0RJUl9QKERJUikKKyMgLS0tLS0tLS0tLS0tLS0tCisjIEVtdWxhdGUgYG1rZGlyIC1wJyB3aXRoIHBsYWluIGBta2RpcicgaWYgbmVlZGVkLgorbTRfZGVmdW5faW5pdChbQVNfTUtESVJfUF0sCitbQVNfUkVRVUlSRShbXyQwX1BSRVBBUkVdKV0sCitbYXNfZGlyPSQxOyBhc19mbl9ta2Rpcl9wXSkjIEFTX01LRElSX1AKKworCisjIF9BU19NS0RJUl9QX1BSRVBBUkUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19BU19NS0RJUl9QX1BSRVBBUkVdLAorW0FTX1JFUVVJUkVfU0hFTExfRk4oW2FzX2ZuX21rZGlyX3BdLAorICBbQVNfRlVOQ1RJT05fREVTQ1JJQkUoW2FzX2ZuX21rZGlyX3BdLCBbXSwKKyAgICBbQ3JlYXRlICIkYXNfZGlyIiBhcyBhIGRpcmVjdG9yeSwgaW5jbHVkaW5nIHBhcmVudHMgaWYgbmVjZXNzYXJ5Ll0pXSwKK1sKKyAgX0FTX01LRElSX1AKK10pXWRubAorW2lmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfbWtkaXJfcD0nbWtkaXIgLXAgIiRhc19kaXIiJworZWxzZQorICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAorICBhc19ta2Rpcl9wPWZhbHNlCitmaQorXSkjIF9BU19NS0RJUl9QX1BSRVBBUkUKKworCisjIF9BU19QQVRIX1NFUEFSQVRPUl9QUkVQQVJFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbXB1dGUgdGhlIHBhdGggc2VwYXJhdG9yLgorbTRfZGVmdW4oW19BU19QQVRIX1NFUEFSQVRPUl9QUkVQQVJFXSwKK1sjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIFBBVEhfU0VQQVJBVE9SPToKKyAgKFBBVEg9Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgJiYgeworICAgIChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIHx8CisgICAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgfQorZmkKK10pIyBfQVNfUEFUSF9TRVBBUkFUT1JfUFJFUEFSRQorCisKKyMgX0FTX1BBVEhfV0FMSyhbUEFUSCA9ICRQQVRIXSwgQk9EWSwgW0lGLU5PVC1GT1VORF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBXYWxrIHRocm91Z2ggUEFUSCBydW5uaW5nIEJPRFkgZm9yIGVhY2ggYGFzX2RpcicuICBJZiBCT0RZIG5ldmVyIGRvZXMgYQorIyBgYnJlYWsnLCBldmFsdWF0ZSBJRi1OT1QtRk9VTkQuCisjCisjIFN0aWxsIHZlcnkgcHJpdmF0ZSBhcyBpdHMgaW50ZXJmYWNlIGxvb2tzIHF1aXRlIGJhZC4KKyMKKyMgYCRhc19kdW1teScgZm9yY2VzIHNwbGl0dGluZyBvbiBjb25zdGFudCB1c2VyLXN1cHBsaWVkIHBhdGhzLgorIyBQT1NJWC4yIGZpZWxkIHNwbGl0dGluZyBpcyBkb25lIG9ubHkgb24gdGhlIHJlc3VsdCBvZiB3b3JkCisjIGV4cGFuc2lvbnMsIG5vdCBvbiBsaXRlcmFsIHRleHQuICBUaGlzIGNsb3NlcyBhIGxvbmdzdGFuZGluZyBzaCBzZWN1cml0eQorIyBob2xlLiAgT3B0aW1pemUgaXQgYXdheSB3aGVuIG5vdCBuZWVkZWQsIGkuZS4sIGlmIHRoZXJlIGFyZSBubyBsaXRlcmFsCisjIHBhdGggc2VwYXJhdG9ycy4KK200X2RlZnVuX2luaXQoW19BU19QQVRIX1dBTEtdLAorW0FTX1JFUVVJUkUoW19BU19QQVRIX1NFUEFSQVRPUl9QUkVQQVJFXSldLAorW2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK200X2lmdmFsbihbJDNdLCBbYXNfZm91bmQ9ZmFsc2VdKWRubAorbTRfYm1hdGNoKFskMV0sIFtbOjtdXSwKK1thc19kdW1teT0iJDEiCitmb3IgYXNfZGlyIGluICRhc19kdW1teV0sCitbZm9yIGFzX2RpciBpbiBtNF9kZWZhdWx0KFskMV0sIFskUEFUSF0pXSkKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgbTRfaWZ2YWxuKFskM10sIFthc19mb3VuZD06XSlkbmwKKyAgJDIKKyAgbTRfaWZ2YWxuKFskM10sIFthc19mb3VuZD1mYWxzZV0pZG5sCitkb25lCittNF9pZnZhbG4oWyQzXSwgWyRhc19mb3VuZCB8fCB7ICQzOyB9XSlkbmwKK0lGUz0kYXNfc2F2ZV9JRlMKK10pCisKKworIyBBU19TRVRfQ0FURklMRShWQVIsIERJUi1OQU1FLCBGSUxFLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IFZBUiB0byBESVItTkFNRS9GSUxFLU5BTUUuCisjIE9wdGltaXplIHRoZSBjb21tb24gY2FzZSB3aGVyZSAkMiBvciAkMyBpcyAnLicuCittNF9kZWZpbmUoW0FTX1NFVF9DQVRGSUxFXSwKK1tjYXNlICQyIGluIEAlOkAoKAorLikgJDE9JDM7OworKikKKyAgY2FzZSAkMyBpbiBAJTpAKCgoCisgIC4pICQxPSQyOzsKKyAgW1tcXC9dXSogfCA/OltbXFwvXV0qICkgJDE9JDM7OworICAqKSAkMT0kMi8kMzs7CisgIGVzYWM7OworZXNhY1tdXSkjIEFTX1NFVF9DQVRGSUxFCisKKworIyBfQVNfVEVTVF9QUkVQQVJFCisjIC0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZCBvdXQgd2hldGhlciBgdGVzdCAteCcgd29ya3MuICBJZiBub3QsIHByZXBhcmUgYSBzdWJzdGl0dXRlCisjIHRoYXQgc2hvdWxkIHdvcmsgd2VsbCBlbm91Z2ggZm9yIG1vc3Qgc2NyaXB0cy4KKyMKKyMgSGVyZSBhcmUgc29tZSBvZiB0aGUgcHJvYmxlbXMgd2l0aCB0aGUgc3Vic3RpdHV0ZS4KKyMgVGhlICdscycgdGVzdHMgd2hldGhlciB0aGUgb3duZXIsIG5vdCB0aGUgY3VycmVudCB1c2VyLCBjYW4gZXhlY3V0ZS9zZWFyY2guCisjIFRoZSBldmFsIG1lYW5zICcqJywgJz8nLCBhbmQgJ1snIGNhdXNlIGluYWR2ZXJ0ZW50IGZpbGUgbmFtZSBnbG9iYmluZworIyBhZnRlciB0aGUgJ2V2YWwnLCBzbyBqYW0gdG9nZXRoZXIgYXMgbWFueSB0b2tlbnMgYXMgd2UgY2FuIHRvIG1pbmltaXplCisjIHRoZSBsaWtlbGlob29kIHRoYXQgdGhlIGluYWR2ZXJ0ZW50IGdsb2JiaW5nIHdpbGwgYWN0dWFsbHkgZG8gYW55dGhpbmcuCisjIEx1Y2tpbHksIHRoaXMgZ29ycCBpcyBuZWVkZWQgb25seSBvbiByZWFsbHkgYW5jaWVudCBob3N0cy4KKyMKK200X2RlZnVuKFtfQVNfVEVTVF9QUkVQQVJFXSwKK1tpZiB0ZXN0IC14IC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX3Rlc3RfeD0ndGVzdCAteCcKK2Vsc2UKKyAgaWYgbHMgLWRMIC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgYXNfbHNfTF9vcHRpb249TAorICBlbHNlCisgICAgYXNfbHNfTF9vcHRpb249CisgIGZpCisgIGFzX3Rlc3RfeD0nCisgICAgZXZhbCBzaCAtYyAnXCcnCisgICAgICBpZiB0ZXN0IC1kICIkW10xIjsgdGhlbgorCXRlc3QgLWQgIiRbXTEvLiI7CisgICAgICBlbHNlCisJY2FzZSAkW10xIGluIEAlOkAoCisJLSopc2V0ICIuLyRbXTEiOzsKKwllc2FjOworCWNhc2UgYGxzIC1sZCckYXNfbHNfTF9vcHRpb24nICIkW10xIiAyPi9kZXYvbnVsbGAgaW4gQCU6QCgoCisJPz8/W1tzeF1dKik6OzsqKWZhbHNlOztlc2FjO2ZpCisgICAgJ1wnJyBzaAorICAnCitmaQorZG5sIGFzX2V4ZWN1dGFibGVfcCBpcyBwcmVzZW50IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggTGlidG9vbAorZG5sIDEuNS4yMiwgYnV0IGl0IHNob3VsZCBnbyBhd2F5IGF0IHNvbWUgcG9pbnQuCithc19leGVjdXRhYmxlX3A9JGFzX3Rlc3RfeAorXSkjIF9BU19URVNUX1BSRVBBUkUKKworCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyA1LiBDb21tb24gaWRpb21zLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIFRoaXMgc2VjdGlvbiBpcyBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQuCisKKworIyBBU19CT1goTUVTU0FHRSwgW0ZSQU1FLUNIQVJBQ1RFUiA9IGAtJ10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0IE1FU1NBR0UsIGEgc2luZ2xlIGxpbmUgdGV4dCwgZnJhbWVkIHdpdGggRlJBTUUtQ0hBUkFDVEVSICh3aGljaAorIyBtdXN0IG5vdCBiZSBgLycpLgorbTRfZGVmaW5lKFtBU19CT1hdLAorW0FTX0xJVEVSQUxfSUYoWyQxXSwKKwkgICAgICAgW19BU19CT1hfTElURVJBTCgkQCldLAorCSAgICAgICBbX0FTX0JPWF9JTkRJUigkQCldKV0pCisKKworIyBfQVNfQk9YX0xJVEVSQUwoTUVTU0FHRSwgW0ZSQU1FLUNIQVJBQ1RFUiA9IGAtJ10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0FTX0JPWF9MSVRFUkFMXSwKK1tjYXQgPDxcX0FTQk9YCittNF90ZXh0X2JveCgkQCkKK19BU0JPWF0pCisKKworIyBfQVNfQk9YX0lORElSKE1FU1NBR0UsIFtGUkFNRS1DSEFSQUNURVIgPSBgLSddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfQVNfQk9YX0lORElSXSwKK1tzZWQgJ2g7cy8uL200X2RlZmF1bHQoWyQyXSwgWy1dKS9nO3MvXi4uLi9AJTpAQCU6QCAvO3MvLi4uJC8gQCU6QEAlOkAvO3A7eDtwO3gnIDw8X0FTQk9YCitAJTpAQCU6QCAkMSBAJTpAQCU6QAorX0FTQk9YXSkKKworCisjIF9BU19DTEVBTl9ESVIoRElSKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVtb3ZlIGFsbCBjb250ZW50cyBmcm9tIHdpdGhpbiBESVIsIGluY2x1ZGluZyBhbnkgdW53cml0YWJsZQorIyBzdWJkaXJlY3RvcmllcywgYnV0IGxlYXZlIERJUiBpdHNlbGYgdW50b3VjaGVkLgorbTRfZGVmaW5lKFtfQVNfQ0xFQU5fRElSXSwKK1tpZiB0ZXN0IC1kICQxOyB0aGVuCisgIGZpbmQgJDEgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDsKKyAgcm0gLWZyICQxLyogJDEvLltbIS5dXSAkMS8uPz8qCitmaV0pCisKKworIyBBU19GVU5DVElPTl9ERVNDUklCRShOQU1FLCBbQVJHU10sIERFU0NSSVBUSU9OLCBbV1JBUC1DT0xVTU4gPSA3OV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0IGEgc2hlbGwgY29tbWVudCBkZXNjcmliaW5nIE5BTUUgYW5kIGl0cyBhcmd1bWVudHMgQVJHUywgdGhlbgorIyBhIHNlcGFyYXRvciBsaW5lLCB0aGVuIHRoZSBERVNDUklQVElPTiB3cmFwcGVkIGF0IGEgZGVjaW1hbAorIyBXUkFQLUNPTFVNTi4gIFRoZSBvdXRwdXQgcmVzZW1ibGVzOgorIyAgIyBOQU1FIEFSR1MKKyMgICMgLS0tLS0tLS0tCisjICAjIFdyYXBwZWQgREVTQ1JJUFRJT04gdGV4dAorIyBOQU1FIGFuZCBBUkdTIGFyZSBleHBhbmRlZCwgd2hpbGUgREVTQ1JJUFRJT04gaXMgdHJlYXRlZCBhcyBhCisjIHdoaXRlc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2Ygc3RyaW5ncyB0aGF0IGFyZSBub3QgZXhwYW5kZWQuCittNF9kZWZpbmUoW0FTX0ZVTkNUSU9OX0RFU0NSSUJFXSwKK1tAJTpAICQxW11tNF9pZnZhbChbJDJdLCBbICQyXSkKK0AlOkAgbTRfdHJhbnNsaXQobTRfZm9ybWF0KFslKnNdLAorCSAgIG00X2RlY3IobTRfcWxlbihfbTRfZXhwYW5kKFskMVtdbTRfaWZ2YWwoWyQyXSwgWyAkMl0pCitdKSkpLCBbXSksIFsgXSwgWy1dKQorbTRfdGV4dF93cmFwKFskM10sIFtAJTpAIF0sIFtdLCBbJDRdKV0pCisKKworIyBBU19IRUxQX1NUUklORyhMSFMsIFJIUywgW0lOREVOVC1DT0xVTU4gPSAyNl0sIFtXUkFQLUNPTFVNTiA9IDc5XSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIEZvcm1hdCBhIGhlbHAgc3RyaW5nIHNvIHRoYXQgaXQgbG9va3MgcHJldHR5IHdoZW4gdGhlIHVzZXIgZXhlY3V0ZXMKKyMgInNjcmlwdCAtLWhlbHAiLiAgVGhpcyBtYWNybyB0YWtlcyB1cCB0byBmb3VyIGFyZ3VtZW50cywgYQorIyAibGVmdCBoYW5kIHNpZGUiIChMSFMpLCBhICJyaWdodCBoYW5kIHNpZGUiIChSSFMpLCBhIGRlY2ltYWwKKyMgSU5ERU5ULUNPTFVNTiB3aGljaCBpcyB0aGUgY29sdW1uIHdoZXJlIHdyYXBwZWQgbGluZXMgc2hvdWxkIGJlZ2luCisjICh0aGUgZGVmYXVsdCBvZiAyNiBpcyByZWNvbW1lbmRlZCksIGFuZCBhIGRlY2ltYWwgV1JBUC1DT0xVTU4gd2hpY2ggaXMKKyMgdGhlIGNvbHVtbiB3aGVyZSBsaW5lcyBzaG91bGQgd3JhcCAodGhlIGRlZmF1bHQgb2YgNzkgaXMgcmVjb21tZW5kZWQpLgorIyBMSFMgaXMgZXhwYW5kZWQsIFJIUyBpcyBub3QuCisjCisjIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBub3QgZG9jdW1lbnRlZCBpbiB0aGUgbWFudWFsLCBJTkRFTlQtQ09MVU1OCisjIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBhcyBhIHN0cmluZyBvZiB3aGl0ZSBzcGFjZXMsIHdob3NlIHdpZHRoCisjIGRldGVybWluZXMgdGhlIGluZGVudGF0aW9uIGNvbHVtbi4gIFVzaW5nIFRBQnMgaW4gSU5ERU5ULUNPTFVNTiBpcyBub3QKKyMgcmVjb21tZW5kZWQsIHNpbmNlIHNjcmVlbiB3aWR0aCBvZiBUQUIgaXMgbm90IGNvbXB1dGVkLgorIworIyBUaGUgcmVzdWx0aW5nIHN0cmluZyBpcyBzdWl0YWJsZSBmb3IgdXNlIGluIG90aGVyIG1hY3JvcyB0aGF0IHJlcXVpcmUKKyMgYSBoZWxwIHN0cmluZyAoZS5nLiBBQ19BUkdfV0lUSCkuCisjCisjIEhlcmUgaXMgdGhlIHNhbXBsZSBzdHJpbmcgZnJvbSB0aGUgQXV0b2NvbmYgbWFudWFsIChOb2RlOiBFeHRlcm5hbAorIyBTb2Z0d2FyZSkgd2hpY2ggc2hvd3MgdGhlIHByb3BlciBzcGFjaW5nIGZvciBoZWxwIHN0cmluZ3MuCisjCisjICAgIC0td2l0aC1yZWFkbGluZSAgICAgICAgIHN1cHBvcnQgZmFuY3kgY29tbWFuZCBsaW5lIGVkaXRpbmcKKyMgIF4gXiAgICAgICAgICAgICAgICAgICAgICAgXgorIyAgfCB8ICAgICAgICAgICAgICAgICAgICAgICB8CisjICB8IGNvbHVtbiAyICAgICAgICAgICAgICAgIGNvbHVtbiAyNgorIyAgfAorIyAgY29sdW1uIDAKKyMKKyMgQSBoZWxwIHN0cmluZyBpcyBtYWRlIHVwIG9mIGEgImxlZnQgaGFuZCBzaWRlIiAoTEhTKSBhbmQgYSAicmlnaHQKKyMgaGFuZCBzaWRlIiAoUkhTKS4gIEluIHRoZSBleGFtcGxlIGFib3ZlLCB0aGUgTEhTIGlzCisjICItLXdpdGgtcmVhZGxpbmUiLCB3aGlsZSB0aGUgUkhTIGlzICJzdXBwb3J0IGZhbmN5IGNvbW1hbmQgbGluZQorIyBlZGl0aW5nIi4KKyMKKyMgSWYgdGhlIExIUyBjb250YWlucyBtb3JlIHRoYW4gKElOREVOVC1DT0xVTU4gLSAzKSBjaGFyYWN0ZXJzLCB0aGVuIHRoZQorIyBMSFMgaXMgdGVybWluYXRlZCB3aXRoIGEgbmV3bGluZSBzbyB0aGF0IHRoZSBSSFMgc3RhcnRzIG9uIGEgbGluZSBvZiBpdHMKKyMgb3duIGJlZ2lubmluZyBhdCBJTkRFTlQtQ09MVU1OLiAgSW4gdGhlIGRlZmF1bHQgY2FzZSwgdGhpcyBjb3JyZXNwb25kcyB0byBhbgorIyBMSFMgd2l0aCBtb3JlIHRoYW4gMjMgY2hhcmFjdGVycy4KKyMKKyMgVGhlcmVmb3JlLCBpbiB0aGUgZXhhbXBsZSwgaWYgdGhlIExIUyB3ZXJlIGluc3RlYWQKKyMgIi0td2l0aC1yZWFkbGluZS1ibGFoLWJsYWgtYmxhaCIsIHRoZW4gdGhlIEFTX0hFTFBfU1RSSU5HIG1hY3JvIHdvdWxkCisjIGV4cGFuZCBpbnRvOgorIworIworIyAgICAtLXdpdGgtcmVhZGxpbmUtYmxhaC1ibGFoLWJsYWgKKyMgIF4gXiAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBmYW5jeSBjb21tYW5kIGxpbmUgZWRpdGluZworIyAgfCB8ICAgICAgICAgICAgICAgICAgICAgICBeCisjICB8IGNvbHVtbiAyICAgICAgICAgICAgICAgIHwKKyMgIGNvbHVtbiAwICAgICAgICAgICAgICAgICAgY29sdW1uIDI2CisjCisjCisjIG00X3RleHRfd3JhcCBoYWNrc15Xd29ya3MgYXJvdW5kIHRoZSBmYWN0IHRoYXQgbTRfZm9ybWF0IGRvZXMgbm90CisjIGtub3cgcXVhZHJpZ3JhcGhzLgorIworbTRfZGVmaW5lKFtBU19IRUxQX1NUUklOR10sCitbbTRfdGV4dF93cmFwKFskMl0sIG00X2NvbmQoW1skM11dLCBbXSwgWyAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKKwkJCSAgICBbbTRfZXZhbChbJDNdKzApXSwgWzBdLCBbWyQzXV0sCisJCQkgICAgW200X2Zvcm1hdChbWyUqc11dLCBbJDNdLCBbXSldKSwKKwkgICAgICBtNF9leHBhbmQoWyAgJDEgXSksIFskNF0pXSkjIEFTX0hFTFBfU1RSSU5HCisKKworIyBBU19JREVOVElGSUVSX0lGKEVYUFJFU1NJT04sIElGLUlERU5ULCBJRi1OT1QtSURFTlQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSWYgRVhQUkVTU0lPTiBzZXJ2ZXMgYXMgYW4gaWRlbnRpZmllciAoaWUsIGFmdGVyIHJlbW92YWwgb2YgQCZ0QCwgaXQKKyMgbWF0Y2hlcyB0aGUgcmVnZXggYF5bYS16QS1aX11bYS16QS1aXzAtOV0qJCcpLCBleGVjdXRlIElGLUlERU5ULAorIyBvdGhlcndpc2UgSUYtTk9ULUlERU5ULgorIworIyBUaGlzIGlzIGdlbmVyYWxseSBmYXN0ZXIgdGhhbiB0aGUgYWx0ZXJuYXRpdmU6CisjICAgbTRfYm1hdGNoKG00X2JwYXRzdWJzdChbWyQxXV0sIFtAJnRAXSksIF5tNF9kZWZuKFttNF9yZV93b3JkXSkkLAorIyAgICAgICAgICAgICBbJDJdLCBbJDNdKQorIworIyBSYXRoZXIgdGhhbiBleHBhbmQgbTRfZGVmbiBldmVyeSB0aW1lIEFTX0lERU5USUZJRVJfSUYgaXMgZXhwYW5kZWQsIHdlCisjIGlubGluZSBpdHMgZXhwYW5zaW9uIHVwIGZyb250LiAgT25seSB1c2UgYSByZWd1bGFyIGV4cHJlc3Npb24gaWYgd2UKKyMgZGV0ZWN0IGEgcG90ZW50aWFsIHF1YWRyaWdyYXBoLgorIworIyBGaXJzdCwgY2hlY2sgaWYgdGhlIGVudGlyZSBzdHJpbmcgbWF0Y2hlcyBtNF9jcl9zeW1ib2wyLiAgT25seSB0aGVuIGRvCisjIHdlIHdvcnJ5IGlmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWxzbyBtYXRjaGVzIG00X2NyX3N5bWJvbDEgKGllLiBkb2VzIG5vdAorIyBtYXRjaCBtNF9jcl9kaWdpdCkuCittNF9kZWZpbmUoW0FTX0lERU5USUZJRVJfSUZdLAorW200X2lmKF8kMChtNF9pZihtNF9pbmRleChbJDFdLCBbQF0pLCBbLTFdLAorICBbWyQxXV0sIFttNF9icGF0c3Vic3QoW1skMV1dLCBbQCZ0QF0pXSkpLCBbLV0sIFskMl0sIFskM10pXSkKKworbTRfZGVmaW5lKFtfQVNfSURFTlRJRklFUl9JRl0sCitbbTRfY29uZChbWyQxXV0sIFtdLCBbXSwKKwkgW200X2V2YWwobTRfbGVuKG00X3RyYW5zbGl0KFtbJDFdXSwgXV1kbmwKK200X2RxdW90ZShtNF9kcXVvdGUobTRfZGVmbihbbTRfY3Jfc3ltYm9sczJdKSkpW1spKSA+IDApXSwgWzFdLCBbXSwKKwkgW200X2xlbihtNF90cmFuc2xpdChtNF9mb3JtYXQoW1slLjFzXV0sIFskMV0pLCBdXWRubAorbTRfZHF1b3RlKG00X2RxdW90ZShtNF9kZWZuKFttNF9jcl9zeW1ib2xzMV0pKSlbWykpXSwgWzBdLCBbLV0pXSkKKworCisjIEFTX0xJVEVSQUxfSUYoRVhQUkVTU0lPTiwgSUYtTElURVJBTCwgSUYtTk9ULUxJVEVSQUwpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmIEVYUFJFU1NJT04gaGFzIHNoZWxsIGluZGlyZWN0aW9ucyAoJHZhciBvciBgZXhwcmApLCBleHBhbmQKKyMgSUYtTElURVJBTCwgZWxzZSBJRi1OT1QtTElURVJBTC4KKyMgVGhpcyBpcyBhbiAqYXBwcm94aW1hdGlvbio6IGZvciBpbnN0YW5jZSBFWFBSRVNTSU9OID0gYFwkJyBpcworIyBkZWZpbml0ZWx5IGEgbGl0ZXJhbCwgYnV0IHdpbGwgbm90IGJlIHJlY29nbml6ZWQgYXMgc3VjaC4KKyMKKyMgV2h5IGRvIHdlIHJlamVjdCBFWFBSRVNTSU9OIGV4cGFuZGluZyB3aXRoIGBbJyBvciBgXScgYXMgYSBsaXRlcmFsPworIyBCZWNhdXNlIEFTX1RSX1NIIGlzIE1VQ0ggZmFzdGVyIGlmIGl0IGNhbiB1c2UgbTRfdHJhbnNsaXQgb24gbGl0ZXJhbHMKKyMgaW5zdGVhZCBvZiBtNF9icGF0c3Vic3Q7IGJ1dCBtNF90cmFuc2xpdCBpcyBtdWNoIHRvdWdoZXIgdG8gZG8gc2FmZWx5CisjIGlmIGBbJyBpcyB0cmFuc2xhdGVkLgorIworIyBOb3RlIHRoYXQgdGhlIHF1YWRyaWdyYXBoIEBTfEAgY2FuIHJlc3VsdCBpbiBub24tbGl0ZXJhbHMsIGJ1dCBvdXRyaWdodAorIyByZWplY3RpbmcgYWxsIEAgd291bGQgbWFrZSBBQ19JTklUIGNvbXBsYWluIG9uIGl0cyBidWcgcmVwb3J0IGFkZHJlc3MuCisjCisjIFdlIHVzZWQgdG8gdXNlIG00X2JtYXRjaChtNF9xdW90ZSgkMSksIFtbYCRdXSwgWyQzXSwgWyQyXSksIGJ1dAorIyBwcm9maWxpbmcgc2hvd3MgdGhhdCBpdCBpcyBmYXN0ZXIgdG8gdXNlIG00X3RyYW5zbGl0LgorIworIyBCZWNhdXNlIHRoZSB0cmFuc2xpdCBpcyBzdHJpcHBpbmcgcXVvdGVzLCBpdCBtdXN0IGFsc28gbmV1dHJhbGl6ZSBhbnl0aGluZworIyB0aGF0IG1pZ2h0IGJlIGluIGEgbWFjcm8gbmFtZSwgYXMgd2VsbCBhcyBjb21tZW50cywgY29tbWFzLCBvciB1bmJhbGFuY2VkCisjIHBhcmVudGhlc2VzLiAgQWxsIHRoZSBwcm9ibGVtIGNoYXJhY3RlcnMgYXJlIHVuaWZpZWQgc28gdGhhdCBhIHNpbmdsZQorIyBtNF9pbmRleCBjYW4gc2NhbiB0aGUgcmVzdWx0LgorIworIyBSYXRoZXIgdGhhbiBleHBhbmQgbTRfZGVmbiBldmVyeSB0aW1lIEFTX0xJVEVSQUxfSUYgaXMgZXhwYW5kZWQsIHdlCisjIGlubGluZSBpdHMgZXhwYW5zaW9uIHVwIGZyb250LgorbTRfZGVmaW5lKFtBU19MSVRFUkFMX0lGXSwKK1tfJDAobTRfZXhwYW5kKFskMV0pLCBbJDJdLCBbJDNdKV0pCisKK200X2RlZmluZShbX0FTX0xJVEVSQUxfSUZdLAorW200X2lmKG00X2NvbmQoW200X2V2YWwobTRfaW5kZXgoWyQxXSwgW0BTfEBdKSA9PSAtMSldLCBbMF0sIFtdLAorICBbbTRfaW5kZXgobTRfdHJhbnNsaXQoWyQxXSwgW1tdYCwjKCldXV1kbmwKK200X2RxdW90ZShtNF9kcXVvdGUobTRfZGVmbihbbTRfY3Jfc3ltYm9sczJdKSkpW1ssIFskJCRdKSwgWyRdKV0sCisgIFstMV0sIFstXSksIFstXSwgWyQyXSwgWyQzXSldKQorCisKKyMgQVNfVE1QRElSKFBSRUZJWCwgW0RJUkVDVE9SWSA9ICRUTVBESVIgWz0gL3RtcF1dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENyZWF0ZSBhcyBzYWZlbHkgYXMgcG9zc2libGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluIERJUkVDVE9SWQorIyB3aGljaCBuYW1lIGlzIGluc3BpcmVkIGJ5IFBSRUZJWCAoc2hvdWxkIGJlIDItNCBjaGFycyBtYXgpLgorbTRfZGVmaW5lKFtBU19UTVBESVJdLAorWyMgQ3JlYXRlIGEgKHNlY3VyZSkgdG1wIGRpcmVjdG9yeSBmb3IgdG1wIGZpbGVzLgorbTRfaWYoWyQyXSwgW10sIFs6ICR7VE1QRElSPS90bXB9XSkKK3sKKyAgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAibTRfZGVmYXVsdChbJDJdLCBbJFRNUERJUl0pLyQxWFhYWFhYIikgMj4vZGV2L251bGxgICYmCisgIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiCit9ICB8fAoreworICB0bXA9bTRfZGVmYXVsdChbJDJdLCBbJFRNUERJUl0pLyQxJCQtJFJBTkRPTQorICAodW1hc2sgMDc3ICYmIG1rZGlyICIkdG1wIikKK30gfHwgQVNfRVJST1IoW2Nhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluIG00X2RlZmF1bHQoWyQyXSwKKwkgICAgICBbJFRNUERJUl0pXSldKSMgQVNfVE1QRElSCisKKworIyBBU19VTkFNRQorIyAtLS0tLS0tLQorIyBUcnkgdG8gZGVzY3JpYmUgdGhpcyBtYWNoaW5lLiAgTWVhbnQgZm9yIGxvZ3MuCittNF9kZWZpbmUoW0FTX1VOQU1FXSwKK1t7CitjYXQgPDxfQVNVTkFNRQorbTRfdGV4dF9ib3goW1BsYXRmb3JtLl0pCisKK2hvc3RuYW1lID0gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCit1bmFtZSAtbSA9IGAodW5hbWUgLW0pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1yID0gYCh1bmFtZSAtcikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtdiA9IGAodW5hbWUgLXYpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKworL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisvYmluL3VuYW1lIC1YICAgICA9IGAoL2Jpbi91bmFtZSAtWCkgMj4vZGV2L251bGwgICAgIHx8IGVjaG8gdW5rbm93bmAKKworL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbCAgICAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vYXJjaCAtayAgICAgICA9IGAoL3Vzci9iaW4vYXJjaCAtaykgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyA9IGAoL3Vzci9jb252ZXgvZ2V0c3lzaW5mbykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vaG9zdGluZm8gICAgICA9IGAoL3Vzci9iaW4vaG9zdGluZm8pIDI+L2Rldi9udWxsICAgICAgfHwgZWNobyB1bmtub3duYAorL2Jpbi9tYWNoaW5lICAgICAgICAgICA9IGAoL2Jpbi9tYWNoaW5lKSAyPi9kZXYvbnVsbCAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vb3NsZXZlbCAgICAgICA9IGAoL3Vzci9iaW4vb3NsZXZlbCkgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAorL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGwgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorCitfQVNVTkFNRQorCitfQVNfUEFUSF9XQUxLKFskUEFUSF0sIFtBU19FQ0hPKFsiUEFUSDogJGFzX2RpciJdKV0pCit9XSkKKworCisjIF9BU19WRVJTSU9OX0NPTVBBUkVfUFJFUEFSRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0IHZhcmlhYmxlcyBmb3IgY29tcGFyaW5nIHZlcnNpb24gbnVtYmVycy4KK200X2RlZnVuKFtfQVNfVkVSU0lPTl9DT01QQVJFX1BSRVBBUkVdLAorW1thc19hd2tfc3RydmVyc2NtcD0nCisgICMgVXNlIG9ubHkgYXdrIGZlYXR1cmVzIHRoYXQgd29yayB3aXRoIDd0aCBlZGl0aW9uIFVuaXggYXdrICgxOTc4KS4KKyAgIyBNeSwgd2hhdCBhbiBvbGQgYXdrIHlvdSBoYXZlLCBNci4gU29sYXJpcyEKKyAgRU5EIHsKKyAgICB3aGlsZSAobGVuZ3RoKHYxKSAmJiBsZW5ndGgodjIpKSB7CisgICAgICAjIFNldCBkMSB0byBiZSB0aGUgbmV4dCB0aGluZyB0byBjb21wYXJlIGZyb20gdjEsIGFuZCBsaWtld2lzZSBmb3IgZDIuCisgICAgICAjIE5vcm1hbGx5IHRoaXMgaXMgYSBzaW5nbGUgY2hhcmFjdGVyLCBidXQgaWYgdjEgYW5kIHYyIGNvbnRhaW4gZGlnaXRzLAorICAgICAgIyBjb21wYXJlIHRoZW0gYXMgaW50ZWdlcnMgYW5kIGZyYWN0aW9ucyBhcyBzdHJ2ZXJzY21wIGRvZXMuCisgICAgICBpZiAodjEgfiAvXlswLTldLyAmJiB2MiB+IC9eWzAtOV0vKSB7CisJIyBTcGxpdCB2MSBhbmQgdjIgaW50byB0aGVpciBsZWFkaW5nIGRpZ2l0IHN0cmluZyBjb21wb25lbnRzIGQxIGFuZCBkMiwKKwkjIGFuZCBhZHZhbmNlIHYxIGFuZCB2MiBwYXN0IHRoZSBsZWFkaW5nIGRpZ2l0IHN0cmluZ3MuCisJZm9yIChsZW4xID0gMTsgc3Vic3RyKHYxLCBsZW4xICsgMSkgfiAvXlswLTldLzsgbGVuMSsrKSBjb250aW51ZQorCWZvciAobGVuMiA9IDE7IHN1YnN0cih2MiwgbGVuMiArIDEpIH4gL15bMC05XS87IGxlbjIrKykgY29udGludWUKKwlkMSA9IHN1YnN0cih2MSwgMSwgbGVuMSk7IHYxID0gc3Vic3RyKHYxLCBsZW4xICsgMSkKKwlkMiA9IHN1YnN0cih2MiwgMSwgbGVuMik7IHYyID0gc3Vic3RyKHYyLCBsZW4yICsgMSkKKwlpZiAoZDEgfiAvXjAvKSB7CisJICBpZiAoZDIgfiAvXjAvKSB7CisJICAgICMgQ29tcGFyZSB0d28gZnJhY3Rpb25zLgorCSAgICB3aGlsZSAoZDEgfiAvXjAvICYmIGQyIH4gL14wLykgeworCSAgICAgIGQxID0gc3Vic3RyKGQxLCAyKTsgbGVuMS0tCisJICAgICAgZDIgPSBzdWJzdHIoZDIsIDIpOyBsZW4yLS0KKwkgICAgfQorCSAgICBpZiAobGVuMSAhPSBsZW4yICYmICEgKGxlbjEgJiYgbGVuMiAmJiBzdWJzdHIoZDEsIDEsIDEpID09IHN1YnN0cihkMiwgMSwgMSkpKSB7CisJICAgICAgIyBUaGUgdHdvIGNvbXBvbmVudHMgZGlmZmVyIGluIGxlbmd0aCwgYW5kIHRoZSBjb21tb24gcHJlZml4CisJICAgICAgIyBjb250YWlucyBvbmx5IGxlYWRpbmcgemVyb3MuICBDb25zaWRlciB0aGUgbG9uZ2VyIHRvIGJlIGxlc3MuCisJICAgICAgZDEgPSAtbGVuMQorCSAgICAgIGQyID0gLWxlbjIKKwkgICAgfSBlbHNlIHsKKwkgICAgICAjIE90aGVyd2lzZSwgY29tcGFyZSBhcyBzdHJpbmdzLgorCSAgICAgIGQxID0gIngiIGQxCisJICAgICAgZDIgPSAieCIgZDIKKwkgICAgfQorCSAgfSBlbHNlIHsKKwkgICAgIyBBIGZyYWN0aW9uIGlzIGxlc3MgdGhhbiBhbiBpbnRlZ2VyLgorCSAgICBleGl0IDEKKwkgIH0KKwl9IGVsc2UgeworCSAgaWYgKGQyIH4gL14wLykgeworCSAgICAjIEFuIGludGVnZXIgaXMgZ3JlYXRlciB0aGFuIGEgZnJhY3Rpb24uCisJICAgIGV4aXQgMgorCSAgfSBlbHNlIHsKKwkgICAgIyBDb21wYXJlIHR3byBpbnRlZ2Vycy4KKwkgICAgZDEgKz0gMAorCSAgICBkMiArPSAwCisJICB9CisJfQorICAgICAgfSBlbHNlIHsKKwkjIFRoZSBub3JtYWwgY2FzZSwgd2l0aG91dCB3b3JyeWluZyBhYm91dCBkaWdpdHMuCisJZDEgPSBzdWJzdHIodjEsIDEsIDEpOyB2MSA9IHN1YnN0cih2MSwgMikKKwlkMiA9IHN1YnN0cih2MiwgMSwgMSk7IHYyID0gc3Vic3RyKHYyLCAyKQorICAgICAgfQorICAgICAgaWYgKGQxIDwgZDIpIGV4aXQgMQorICAgICAgaWYgKGQxID4gZDIpIGV4aXQgMgorICAgIH0KKyAgICAjIEJld2FyZSBTb2xhcmlzIC91c3IveGdwNC9iaW4vYXdrIChhdCBsZWFzdCB0aHJvdWdoIFNvbGFyaXMgMTApLAorICAgICMgd2hpY2ggbWlzaGFuZGxlcyBzb21lIGNvbXBhcmlzb25zIG9mIGVtcHR5IHN0cmluZ3MgdG8gaW50ZWdlcnMuCisgICAgaWYgKGxlbmd0aCh2MikpIGV4aXQgMQorICAgIGlmIChsZW5ndGgodjEpKSBleGl0IDIKKyAgfQorJ11dKSMgX0FTX1ZFUlNJT05fQ09NUEFSRV9QUkVQQVJFCisKKworIyBBU19WRVJTSU9OX0NPTVBBUkUoVkVSU0lPTi0xLCBWRVJTSU9OLTIsCisjICAgICAgICAgICAgICAgICAgICBbQUNUSU9OLUlGLUxFU1NdLCBbQUNUSU9OLUlGLUVRVUFMXSwgW0FDVElPTi1JRi1HUkVBVEVSXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcGFyZSB0d28gc3RyaW5ncyBwb3NzaWJseSBjb250YWluaW5nIHNoZWxsIHZhcmlhYmxlcyBhcyB2ZXJzaW9uIHN0cmluZ3MuCisjCisjIFRoaXMgdXNhZ2UgaXMgcG9ydGFibGUgZXZlbiB0byBhbmNpZW50IGF3aywKKyMgc28gZG9uJ3Qgd29ycnkgYWJvdXQgZmluZGluZyBhICJuaWNlIiBhd2sgdmVyc2lvbi4KK200X2RlZnVuX2luaXQoW0FTX1ZFUlNJT05fQ09NUEFSRV0sCitbQVNfUkVRVUlSRShbXyQwX1BSRVBBUkVdKV0sCitbYXNfYXJnX3YxPSQxCithc19hcmdfdjI9JDIKK2F3ayAiJGFzX2F3a19zdHJ2ZXJzY21wIiB2MT0iJGFzX2FyZ192MSIgdjI9IiRhc19hcmdfdjIiIC9kZXYvbnVsbAorQVNfQ0FTRShbJD9dLAorCVsxXSwgWyQzXSwKKwlbMF0sIFskNF0sCisJWzJdLCBbJDVdKV0pIyBBU19WRVJTSU9OX0NPTVBBUkUKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgNi4gQ29tbW9uIG00L3NoIGNoYXJhY3RlciB0cmFuc2xhdGlvbi4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBUaGUgcG9pbnQgb2YgdGhpcyBzZWN0aW9uIGlzIHRvIHByb3ZpZGUgaGlnaCBsZXZlbCBtYWNyb3MgY29tcGFyYWJsZQorIyB0byBtNCdzIGB0cmFuc2xpdCcgcHJpbWl0aXZlLCBidXQgbTQvc2ggcG9seW1vcnBoaWMuCisjIFRyYW5zbGl0ZXJhdGlvbiBvZiBsaXRlcmFsIHN0cmluZ3Mgc2hvdWxkIGJlIGhhbmRsZWQgYnkgbTQsIHdoaWxlCisjIHNoZWxsIHZhcmlhYmxlcycgY29udGVudCB3aWxsIGJlIHRyYW5zbGF0ZWQgYXQgcnVudGltZSAodHIgb3Igc2VkKS4KKworCisjIF9BU19DUl9QUkVQQVJFCisjIC0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCB2YXJpYWJsZXMgZGVmaW5pbmcgY29tbW9uIGNoYXJhY3RlciByYW5nZXMuCisjIFNlZSBtNF9jcl9sZXR0ZXJzIGV0Yy4KK200X2RlZnVuKFtfQVNfQ1JfUFJFUEFSRV0sCitbIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLgorYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCithc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKK2FzX2NyX0xldHRlcnM9JGFzX2NyX2xldHRlcnMkYXNfY3JfTEVUVEVSUworYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JworYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCitdKQorCisKKyMgX0FTX1RSX1NIX1BSRVBBUkUKKyMgLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfQVNfVFJfU0hfUFJFUEFSRV0sCitbQVNfUkVRVUlSRShbX0FTX0NSX1BSRVBBUkVdKV1kbmwKK1sjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KK2FzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbW15fJGFzX2NyX2FsbnVtXV0lXyVnJyIKK10pCisKKworIyBBU19UUl9TSChFWFBSRVNTSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcmFuc2Zvcm0gRVhQUkVTU0lPTiBpbnRvIGEgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZS4KKyMgc2gvbTQgcG9seW1vcnBoaWMuCisjIEJlIHN1cmUgdG8gdXBkYXRlIHRoZSBkZWZpbml0aW9uIG9mIGAkYXNfdHJfc2gnIGlmIHlvdSBjaGFuZ2UgdGhpcy4KKyMKKyMgQVNfTElURVJBTF9JRiBndWFyYW50ZWVzIHRoYXQgYSBsaXRlcmFsIGRvZXMgbm90IGhhdmUgYW55IG5lc3RlZCBxdW90ZXMsCisjIG9uY2UgJDEgaXMgZXhwYW5kZWQuICBtNF90cmFuc2xpdCBzaWxlbnRseSB1c2VzIG9ubHkgdGhlIGZpcnN0IG9jY3VycmVuY2UKKyMgb2YgYSBjaGFyYWN0ZXIgdGhhdCBhcHBlYXJzIG11bHRpcGxlIHRpbWVzIGluIGFyZ3VtZW50IDIsIHNpbmNlIHdlIGtub3cKKyMgdGhhdCBtNF9jcl9ub3Rfc3ltYm9sczIgYWxzbyBjb250YWlucyBbIGFuZCBdLiAgbTRfdHJhbnNsaXQgYWxzbyBzaWxlbnRseQorIyBpZ25vcmVzIGNoYXJhY3RlcnMgaW4gYXJndW1lbnQgMyB0aGF0IGRvIG5vdCBtYXRjaCBhcmd1bWVudCAyOyB3ZSB1c2UgdGhpcworIyBmYWN0IHRvIHNraXAgd29ycnlpbmcgYWJvdXQgdGhlIGxlbmd0aCBvZiBtNF9jcl9ub3Rfc3ltYm9sczIuCisjCisjIEZvciBzcGVlZCwgd2UgaW5saW5lIHRoZSBsaXRlcmFsIGRlZmluaXRpb25zIHRoYXQgY2FuIGJlIGNvbXB1dGVkIHVwIGZyb250LgorbTRfZGVmdW5faW5pdChbQVNfVFJfU0hdLAorW0FTX1JFUVVJUkUoW18kMF9QUkVQQVJFXSldLAorW18kMChtNF9leHBhbmQoWyQxXSkpXSkKKworbTRfZGVmaW5lKFtfQVNfVFJfU0hdLAorW19BU19MSVRFUkFMX0lGKFskMV0sIFskMF9MSVRFUkFMXSwgWyQwX0lORElSXSkoWyQxXSldKQorCittNF9kZWZpbmUoW19BU19UUl9TSF9MSVRFUkFMXSwKK1ttNF90cmFuc2xpdChbWyQxXV0sCisgIFsqK1tdXV1tNF9kcXVvdGUobTRfZGVmbihbbTRfY3Jfbm90X3N5bWJvbHMyXSkpWywKKyAgW3BwW11dXW00X2RxdW90ZShtNF9mb3IoLDEsMjU1LCxbW19dXSkpWyldKQorCittNF9kZWZpbmUoW19BU19UUl9TSF9JTkRJUl0sCitbYEFTX0VDSE8oWyJfQVNfRVNDQVBFKFtbJDFdXSwgW2BdLCBbXF0pIl0pIHwgJGFzX3RyX3NoYF0pCisKKworIyBfQVNfVFJfQ1BQX1BSRVBBUkUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0FTX1RSX0NQUF9QUkVQQVJFXSwKK1tBU19SRVFVSVJFKFtfQVNfQ1JfUFJFUEFSRV0pXWRubAorWyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KK2FzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbW15fJGFzX2NyX2FsbnVtXV0lXyVnJyIKK10pCisKKworIyBBU19UUl9DUFAoRVhQUkVTU0lPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1hcCBFWFBSRVNTSU9OIHRvIGFuIHVwcGVyIGNhc2Ugc3RyaW5nIHdoaWNoIGlzIHZhbGlkIGFzIHJocyBmb3IgYQorIyBgI2RlZmluZScuICBzaC9tNCBwb2x5bW9ycGhpYy4gIEJlIHN1cmUgdG8gdXBkYXRlIHRoZSBkZWZpbml0aW9uCisjIG9mIGAkYXNfdHJfY3BwJyBpZiB5b3UgY2hhbmdlIHRoaXMuCisjCisjIFNlZSBpbXBsZW1lbnRhdGlvbiBjb21tZW50cyBpbiBBU19UUl9TSC4KK200X2RlZnVuX2luaXQoW0FTX1RSX0NQUF0sCitbQVNfUkVRVUlSRShbXyQwX1BSRVBBUkVdKV0sCitbXyQwKG00X2V4cGFuZChbJDFdKSldKQorCittNF9kZWZpbmUoW19BU19UUl9DUFBdLAorW19BU19MSVRFUkFMX0lGKFskMV0sIFskMF9MSVRFUkFMXSwgWyQwX0lORElSXSkoWyQxXSldKQorCittNF9kZWZpbmUoW19BU19UUl9DUFBfTElURVJBTF0sCitbbTRfdHJhbnNsaXQoWyQxXSwKKyAgWypbXV1dbTRfZHF1b3RlKG00X2RlZm4oW200X2NyX2xldHRlcnNdKW00X2RlZm4oW200X2NyX25vdF9zeW1ib2xzMl0pKVssCisgIFtQW11dXW00X2RxdW90ZShtNF9kZWZuKFttNF9jcl9MRVRURVJTXSltNF9mb3IoLDEsMjU1LCxbW19dXSkpWyldKQorCittNF9kZWZpbmUoW19BU19UUl9DUFBfSU5ESVJdLAorW2BBU19FQ0hPKFsiJDEiXSkgfCAkYXNfdHJfY3BwYF0pCisKKworIyBfQVNfVFJfUFJFUEFSRQorIyAtLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19BU19UUl9QUkVQQVJFXSwKK1tBU19SRVFVSVJFKFtfQVNfVFJfU0hfUFJFUEFSRV0pQVNfUkVRVUlSRShbX0FTX1RSX0NQUF9QUkVQQVJFXSldKQorCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIDcuIENvbW1vbiBtNC9zaCBoYW5kbGluZyBvZiB2YXJpYWJsZXMgKGluZGlyZWN0aW9ucykuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBUaGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gaXMgdG8gcHJvdmlkZSBhIHVuaWZvcm0gQVBJIGZvcgorIyByZWFkaW5nL3NldHRpbmcgc2ggdmFyaWFibGVzIHdpdGggb3Igd2l0aG91dCBpbmRpcmVjdGlvbi4KKyMgVHlwaWNhbGx5LCBvbmUgY2FuIHdyaXRlCisjICAgQVNfVkFSX1NFVCh2YXIsIHZhbCkKKyMgb3IKKyMgICBBU19WQVJfU0VUKGFzXyR2YXIsIHZhbCkKKyMgYW5kIGV4cGVjdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGFwcGVuLiAgSW4gdGhlIGRlc2NyaXB0aW9ucyBiZWxvdywKKyMgYSBsaXRlcmFsIG5hbWUgbWF0Y2hlcyB0aGUgcmVnZXggW2EtekEtWl9dW2EtekEtWjAtOV9dKiwgYW4KKyMgaW5kaXJlY3QgbmFtZSBpcyBhIHNoZWxsIGV4cHJlc3Npb24gdGhhdCBwcm9kdWNlcyBhIGxpdGVyYWwgbmFtZQorIyB3aGVuIHBhc3NlZCB0aHJvdWdoIGV2YWwsIGFuZCBhIHBvbHltb3JwaGljIG5hbWUgaXMgZWl0aGVyIHR5cGUuCisKKworIyBfQVNfVkFSX0FQUEVORF9QUkVQQVJFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIGFzX2ZuX2FwcGVuZCB0byB0aGUgb3B0aW11bSBkZWZpbml0aW9uIGZvciB0aGUgY3VycmVudAorIyBzaGVsbCAoYmFzaCBhbmQgenNoIHByb3ZpZGUgdGhlICs9IGFzc2lnbm1lbnQgb3BlcmF0b3IgdG8gYXZvaWQKKyMgcXVhZHJhdGljIGFwcGVuZCBncm93dGggb3ZlciByZXBlYXRlZCBhcHBlbmRzKS4KK200X2RlZnVuKFtfQVNfVkFSX0FQUEVORF9QUkVQQVJFXSwKK1tBU19GVU5DVElPTl9ERVNDUklCRShbYXNfZm5fYXBwZW5kXSwgW1ZBUiBWQUxVRV0sCitbQXBwZW5kIHRoZSB0ZXh0IGluIFZBTFVFIHRvIHRoZSBlbmQgb2YgdGhlIGRlZmluaXRpb24gY29udGFpbmVkIGluCitWQVIuICBUYWtlIGFkdmFudGFnZSBvZiBhbnkgc2hlbGwgb3B0aW1pemF0aW9ucyB0aGF0IGFsbG93IGFtb3J0aXplZAorbGluZWFyIGdyb3d0aCBvdmVyIHJlcGVhdGVkIGFwcGVuZHMsIGluc3RlYWQgb2YgdGhlIHR5cGljYWwgcXVhZHJhdGljCitncm93dGggcHJlc2VudCBpbiBuYWl2ZSBpbXBsZW1lbnRhdGlvbnMuXSkKK0FTX0lGKFtfQVNfUlVOKFsiQVNfRVNDQVBFKG00X3F1b3RlKF9BU19WQVJfQVBQRU5EX1dPUktTKSkiXSldLAorW2V2YWwgJ2FzX2ZuX2FwcGVuZCAoKQorICB7CisgICAgZXZhbCAkW10xKz1cJFtdMgorICB9J10sCitbYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICRbXTE9XCQkW10xXCRbXTIKKyAgfV0pICMgYXNfZm5fYXBwZW5kCitdKQorCisjIF9BU19WQVJfQVBQRU5EX1dPUktTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCBhIHNoZWxsIHRlc3QgdG8gZGlzY292ZXIgd2hldGhlciArPSB3b3Jrcy4KK200X2RlZmluZShbX0FTX1ZBUl9BUFBFTkRfV09SS1NdLAorW2FzX3Zhcj0xOyBhc192YXIrPTI7IHRlc3QgeCRhc192YXIgPSB4MTJdKQorCisjIEFTX1ZBUl9BUFBFTkQoVkFSLCBWQUxVRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgdGhlIHNoZWxsIGV4cGFuc2lvbiBvZiBWQUxVRSB0byB0aGUgZW5kIG9mIHRoZSBleGlzdGluZworIyBjb250ZW50cyBvZiB0aGUgcG9seW1vcnBoaWMgc2hlbGwgdmFyaWFibGUgVkFSLCB0YWtpbmcgYWR2YW50YWdlIG9mCisjIGFueSBzaGVsbCBvcHRpbWl6YXRpb25zIHRoYXQgYWxsb3cgcmVwZWF0ZWQgYXBwZW5kcyB0byByZXN1bHQgaW4KKyMgYW1vcnRpemVkIGxpbmVhciBzY2FsaW5nIHJhdGhlciB0aGFuIHF1YWRyYXRpYyBiZWhhdmlvci4gIFRoaXMgbWFjcm8KKyMgaXMgbm90IHdvcnRoIHRoZSBvdmVyaGVhZCB1bmxlc3MgdGhlIGV4cGVjdGVkIGZpbmFsIHNpemUgb2YgdGhlCisjIGNvbnRlbnRzIG9mIFZBUiBvdXR3ZWlnaCB0aGUgdHlwaWNhbCBWQUxVRSBzaXplIG9mIHJlcGVhdGVkIGFwcGVuZHMuCisjIE5vdGUgdGhhdCB1bmxpa2UgQVNfVkFSX1NFVCwgVkFMVUUgbXVzdCBiZSBwcm9wZXJseSBxdW90ZWQgdG8gYXZvaWQKKyMgZmllbGQgc3BsaXR0aW5nIGFuZCBmaWxlIG5hbWUgZXhwYW5zaW9uLgorbTRfZGVmdW5faW5pdChbQVNfVkFSX0FQUEVORF0sCitbQVNfUkVRVUlSRShbX0FTX1ZBUl9BUFBFTkRfUFJFUEFSRV0sIFtdLCBbTTRTSC1JTklULUZOXSldLAorW2FzX2ZuX2FwcGVuZCAkMSAkMl0pCisKKworIyBfQVNfVkFSX0FSSVRIX1BSRVBBUkUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBhc19mbl9hcml0aCB0byB0aGUgb3B0aW11bSBkZWZpbml0aW9uIGZvciB0aGUgY3VycmVudAorIyBzaGVsbCAodXNpbmcgUE9TSVggJCgoKSkgd2hlcmUgc3VwcG9ydGVkKS4KK200X2RlZnVuKFtfQVNfVkFSX0FSSVRIX1BSRVBBUkVdLAorW0FTX0ZVTkNUSU9OX0RFU0NSSUJFKFthc19mbl9hcml0aF0sIFtBUkcuLi5dLAorW1BlcmZvcm0gYXJpdGhtZXRpYyBldmFsdWF0aW9uIG9uIHRoZSBBUkdzLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbgordGhlIGdsb2JhbCAkYXNfdmFsLiAgVGFrZSBhZHZhbnRhZ2Ugb2Ygc2hlbGxzIHRoYXQgY2FuIGF2b2lkIGZvcmtzLgorVGhlIGFyZ3VtZW50cyBtdXN0IGJlIHBvcnRhYmxlIGFjcm9zcyAkKCgpKSBhbmQgZXhwci5dKQorQVNfSUYoW19BU19SVU4oWyJBU19FU0NBUEUobTRfcXVvdGUoX0FTX1ZBUl9BUklUSF9XT1JLUykpIl0pXSwKK1tldmFsICdhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPSQoKCAkW10qICkpCisgIH0nXSwKK1thc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPWBleHByICIkW11AIiB8fCB0ZXN0ICQ/IC1lcSAxYAorICB9XSkgIyBhc19mbl9hcml0aAorXSkKKworIyBfQVNfVkFSX0FSSVRIX1dPUktTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0IGEgc2hlbGwgdGVzdCB0byBkaXNjb3ZlciB3aGV0aGVyICQoKCkpIHdvcmtzLgorbTRfZGVmaW5lKFtfQVNfVkFSX0FSSVRIX1dPUktTXSwKK1t0ZXN0ICQoKCAxICsgMSApKSA9IDJdKQorCisjIEFTX1ZBUl9BUklUSChWQVIsIEVYUFIpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gdGhlIGFyaXRobWV0aWMgZXZhbHVhdGlvbiBvZiB0aGUgYXJndW1lbnRzIGluIEVYUFIsIGFuZCBzZXQKKyMgY29udGVudHMgb2YgdGhlIHBvbHltb3JwaGljIHNoZWxsIHZhcmlhYmxlIFZBUiB0byB0aGUgcmVzdWx0LCB0YWtpbmcKKyMgYWR2YW50YWdlIG9mIGFueSBzaGVsbCBvcHRpbWl6YXRpb25zIHRoYXQgcGVyZm9ybSBhcml0aG1ldGljIHdpdGhvdXQKKyMgZm9ya3MuICBOb3RlIHRoYXQgbnVtYmVycyBvY2N1cmluZyB3aXRoaW4gRVhQUiBtdXN0IGJlIHdyaXR0ZW4gaW4KKyMgZGVjaW1hbCwgYW5kIHdpdGhvdXQgbGVhZGluZyB6ZXJvZXM7IHZhcmlhYmxlcyBjb250YWluaW5nIG51bWJlcnMKKyMgbXVzdCBiZSBleHBhbmRlZCBwcmlvciB0byBhcml0aG1ldGljIGV2YWx1YXRpb247IHRoZSBmaXJzdCBhcmd1bWVudAorIyBtdXN0IG5vdCBiZSBhIG5lZ2F0aXZlIG51bWJlcjsgdGhlcmUgaXMgbm8gcG9ydGFibGUgZXF1YWxpdHkKKyMgb3BlcmF0b3I7IGFuZCBvcGVyYXRvcnMgbXVzdCBiZSBnaXZlbiBhcyBzZXBhcmF0ZSBhcmd1bWVudHMgYW5kCisjIHByb3Blcmx5IHF1b3RlZC4KK200X2RlZnVuX2luaXQoW0FTX1ZBUl9BUklUSF0sCitbX0FTX0RFVEVDVF9TVUdHRVNURUQoW19BU19WQVJfQVJJVEhfV09SS1NdKV1kbmwKK1tBU19SRVFVSVJFKFtfQVNfVkFSX0FSSVRIX1BSRVBBUkVdLCBbXSwgW000U0gtSU5JVC1GTl0pXSwKK1thc19mbl9hcml0aCAkMiAmJiBBU19WQVJfU0VUKFskMV0sIFskYXNfdmFsXSldKQorCisKKyMgQVNfVkFSX0NPUFkoREVTVCwgU09VUkNFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCB0aGUgcG9seW1vcnBoaWMgc2hlbGwgdmFyaWFibGUgREVTVCB0byB0aGUgY29udGVudHMgb2YgdGhlIHBvbHltb3JwaGljCisjIHNoZWxsIHZhcmlhYmxlIFNPVVJDRS4KK200X2RlZmluZShbQVNfVkFSX0NPUFldLAorW0FTX0xJVEVSQUxfSUYoWyQxW10kMl0sIFskMT0kJDJdLCBbZXZhbCAkMT1cJCQyXSldKQorCisKKyMgQVNfVkFSX0dFVChWQVJJQUJMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgR2V0IHRoZSB2YWx1ZSBvZiB0aGUgc2hlbGwgVkFSSUFCTEUuCisjIEV2YWx1YXRlcyB0byAkVkFSSUFCTEUgaWYgdGhlcmUgaXMgbm8gaW5kaXJlY3Rpb24gaW4gVkFSSUFCTEUsCisjIGVsc2UgdG8gdGhlIGFwcHJvcHJpYXRlIGBldmFsJyBzZXF1ZW5jZS4KKyMgVGhpcyBtYWNybyBpcyBkZXByZWNhdGVkIGJlY2F1c2UgaXQgc29tZXRpbWVzIG1pc2hhbmRsZXMgdHJhaWxpbmcgbmV3bGluZXM7CisjIHVzZSBBU19WQVJfQ09QWSBpbnN0ZWFkLgorbTRfZGVmaW5lKFtBU19WQVJfR0VUXSwKK1tBU19MSVRFUkFMX0lGKFskMV0sCisJICAgICAgIFskJDFdLAorICBbYGV2YWwgJ2FzX3ZhbD0keydfQVNfRVNDQVBFKFtbJDFdXSwgW2BdLCBbXF0pJ307QVNfRUNITyhbIiRhc192YWwiXSknYF0pXSkKKworCisjIEFTX1ZBUl9JRihWQVJJQUJMRSwgVkFMVUUsIElGLVRSVUUsIElGLUZBTFNFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSW1wbGVtZW50IGEgc2hlbGwgYGlmIHRlc3QgJFZBUklBQkxFID0gVkFMVUU7IHRoZW4tZWxzZScuCisjIFBvbHltb3JwaGljLCBhbmQgYXZvaWRzIHNoIGV4cGFuc2lvbiBlcnJvciB1cG9uIGludGVycnVwdCBvciB0ZXJtIHNpZ25hbC4KK200X2RlZmluZShbQVNfVkFSX0lGXSwKK1tBU19MSVRFUkFMX0lGKFskMV0sCisgIFtBU19JRihbdGVzdCAieCQkMSIgPSB4IiIkMl1dLAorICBbQVNfVkFSX0NPUFkoW2FzX3ZhbF0sIFskMV0pCisgICBBU19JRihbdGVzdCAieCRhc192YWwiID0geCIiJDJdXSksIFskM10sIFskNF0pXSkKKworCisjIEFTX1ZBUl9QVVNIREVGIGFuZCBBU19WQVJfUE9QREVGCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisKKyMgU29tZXRpbWVzIHdlIG1heSBoYXZlIHRvIGhhbmRsZSBsaXRlcmFscyAoZS5nLiBgc3RkbGliLmgnKSwgd2hpbGUgYXQKKyMgb3RoZXIgbW9tZW50cywgdGhlIHNhbWUgY29kZSBtYXkgaGF2ZSB0byBnZXQgdGhlIHZhbHVlIGZyb20gYQorIyB2YXJpYWJsZSAoZS5nLiwgYGFjX2hlYWRlcicpLiAgVG8gaGF2ZSBhIHVuaWZvcm0gaGFuZGxpbmcgb2YgYm90aAorIyBjYXNlcywgd2hlbiBhIG5ldyB2YWx1ZSBpcyBhYm91dCB0byBiZSBwcm9jZXNzZWQsIGRlY2xhcmUgYSBsb2NhbAorIyB2YXJpYWJsZSwgZS5nLjoKKyMKKyMgICBBU19WQVJfUFVTSERFRihbaGVhZGVyXSwgW2FjX2N2X2hlYWRlcl8kMV0pCisjCisjIGFuZCB0aGVuIGluIHRoZSBib2R5IG9mIHRoZSBtYWNybywgdXNlIGBoZWFkZXInIGFzIGlzLiAgSXQgaXMgb2YKKyMgZmlyc3QgaW1wb3J0YW5jZSB0byB1c2UgYEFTX1ZBUl8qJyB0byBhY2Nlc3MgdGhpcyB2YXJpYWJsZS4KKyMKKyMgSWYgdGhlIHZhbHVlIGAkMScgd2FzIGEgbGl0ZXJhbCAoZS5nLiBgc3RkbGliLmgnKSwgdGhlbiBgaGVhZGVyJyBpcworIyBpbiBmYWN0IHRoZSB2YWx1ZSBgYWNfY3ZfaGVhZGVyX3N0ZGxpYl9oJy4gIElmIGAkMScgd2FzIGluZGlyZWN0LAorIyB0aGVuIGBoZWFkZXIncyB2YWx1ZSBpbiBtNCBpcyBpbiBmYWN0IGAkYXNfaGVhZGVyJywgdGhlIHNoZWxsCisjIHZhcmlhYmxlIHRoYXQgaG9sZHMgYWxsIG9mIHRoZSBtYWdpYyB0byBnZXQgdGhlIGV4cGFuc2lvbiByaWdodC4KKyMKKyMgQXQgdGhlIGVuZCBvZiB0aGUgYmxvY2ssIGZyZWUgdGhlIHZhcmlhYmxlIHdpdGgKKyMKKyMgICBBU19WQVJfUE9QREVGKFtoZWFkZXJdKQorCisKKyMgQVNfVkFSX1BPUERFRihWQVJOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZyZWUgdGhlIHNoZWxsIHZhcmlhYmxlIGFjY2Vzc29yIFZBUk5BTUUuICBUbyBiZSBkbmwnZWQuCittNF9kZWZpbmUoW0FTX1ZBUl9QT1BERUZdLAorW200X3BvcGRlZihbJDFdKV0pCisKKworIyBBU19WQVJfUFVTSERFRihWQVJOQU1FLCBWQUxVRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSB0aGUgbTQgbWFjcm8gVkFSTkFNRSB0byBhbiBhY2Nlc3NvciB0byB0aGUgc2hlbGwgdmFyaWFibGUKKyMgbmFtZWQgVkFMVUUuICBWQUxVRSBkb2VzIG5vdCBuZWVkIHRvIGJlIGEgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZToKKyMgdGhlIHRyYW5zbGl0ZXJhdGlvbiBpcyBoYW5kbGVkIGhlcmUuICBUbyBiZSBkbmwnZWQuCisjCisjIEFTX1RSX1NIIGF0dGVtcHRzIHRvIHBsYXkgd2l0aCBkaXZlcnNpb25zIGlmIF9BU19UUl9TSF9QUkVQQVJFIGhhcworIyBub3QgYmVlbiBleHBhbmRlZC4gIEhvd2V2ZXIsIHVzZXJzIGFyZSBleHBlY3RlZCB0byBkbyBzdWJzZXF1ZW50CisjIGNhbGxzIHRoYXQgdHJpZ2dlciBBU19MSVRFUkFMX0lGKFtWQVJOQU1FXSksIGFuZCB0aGF0IG1hY3JvIHBlcmZvcm1zCisjIGV4cGFuc2lvbiBpbnNpZGUgYW4gYXJndW1lbnQgY29sbGVjdGlvbiBjb250ZXh0LCB3aGVyZSBkaXZlcnNpb25zCisjIGRvbid0IHdvcmsuICBUaGVyZWZvcmUsIHdlIG11c3QgcmVxdWlyZSB0aGUgcHJlcGFyYXRpb24gb3Vyc2VsdmVzLgorbTRfZGVmdW5faW5pdChbQVNfVkFSX1BVU0hERUZdLAorW0FTX1JFUVVJUkUoW19BU19UUl9TSF9QUkVQQVJFXSldLAorW18kMChbJDFdLCBtNF9leHBhbmQoWyQyXSkpXSkKKworbTRfZGVmaW5lKFtfQVNfVkFSX1BVU0hERUZdLAorW19BU19MSVRFUkFMX0lGKFskMl0sCisJCVttNF9wdXNoZGVmKFskMV0sIFtfQVNfVFJfU0hfTElURVJBTChbJDJdKV0pXSwKKwkJW2FzXyQxPV9BU19UUl9TSF9JTkRJUihbJDJdKQorbTRfcHVzaGRlZihbJDFdLCBbJGFzX1skMV1dKV0pXSkKKworCisjIEFTX1ZBUl9TRVQoVkFSSUFCTEUsIFZBTFVFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IHRoZSBjb250ZW50cyBvZiB0aGUgcG9seW1vcnBoaWMgc2hlbGwgVkFSSUFCTEUgdG8gdGhlIHNoZWxsCisjIGV4cGFuc2lvbiBvZiBWQUxVRS4gIFZBTFVFIGlzIGltbXVuZSB0byBmaWVsZCBzcGxpdHRpbmcgYW5kIGZpbGUKKyMgbmFtZSBleHBhbnNpb24uCittNF9kZWZpbmUoW0FTX1ZBUl9TRVRdLAorW0FTX0xJVEVSQUxfSUYoWyQxXSwKKwkgICAgICAgWyQxPSQyXSwKKwkgICAgICAgW2V2YWwgIiQxPUFTX0VTQ0FQRShbJDJdKSJdKV0pCisKKworIyBBU19WQVJfU0VUX0lGKFZBUklBQkxFLCBJRi1UUlVFLCBJRi1GQUxTRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEltcGxlbWVudCBhIHNoZWxsIGBpZi10aGVuLWVsc2UnIGRlcGVuZGluZyB3aGV0aGVyIFZBUklBQkxFIGlzIHNldAorIyBvciBub3QuICBQb2x5bW9ycGhpYy4KK200X2RlZmluZShbQVNfVkFSX1NFVF9JRl0sCitbQVNfSUYoW0FTX1ZBUl9URVNUX1NFVChbJDFdKV0sIFskMl0sIFskM10pXSkKKworCisjIEFTX1ZBUl9URVNUX1NFVChWQVJJQUJMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeHBhbmRzIGludG8gdGhlIGB0ZXN0JyBleHByZXNzaW9uIHdoaWNoIGlzIHRydWUgaWYgVkFSSUFCTEUKKyMgaXMgc2V0LiAgUG9seW1vcnBoaWMuCittNF9kZWZpbmUoW0FTX1ZBUl9URVNUX1NFVF0sCitbQVNfTElURVJBTF9JRihbJDFdLAorCSAgICAgICBbdGVzdCAiJHskMStzZXR9IiA9IHNldF0sCisJICAgICAgIFt7IGFzX3Zhcj0kMTsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfV0pXSkKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgOC4gU2V0dGluZyBNNHNoIHVwLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBBU19JTklUX0dFTkVSQVRFRChGSUxFLCBbQ09NTUVOVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgR2VuZXJhdGUgYSBjaGlsZCBzY3JpcHQgRklMRSB3aXRoIGFsbCBpbml0aWFsaXphdGlvbiBuZWNlc3NhcnkgdG8KKyMgcmV1c2UgdGhlIGVudmlyb25tZW50IGxlYXJuZWQgYnkgdGhlIHBhcmVudCBzY3JpcHQsIGFuZCBtYWtlIHRoZQorIyBmaWxlIGV4ZWN1dGFibGUuICBJZiBDT01NRU5UIGlzIHN1cHBsaWVkLCBpdCBpcyBpbnNlcnRlZCBhZnRlciB0aGUKKyMgYCMhJyBzZXF1ZW5jZSBidXQgYmVmb3JlIGluaXRpYWxpemF0aW9uIHRleHQgYmVnaW5zLiAgQWZ0ZXIgdGhpcworIyBtYWNybywgYWRkaXRpb25hbCB0ZXh0IGNhbiBiZSBhcHBlbmRlZCB0byBGSUxFIHRvIGZvcm0gdGhlIGJvZHkgb2YKKyMgdGhlIGNoaWxkIHNjcmlwdC4gIFRoZSBtYWNybyBlbmRzIHdpdGggbm9uLXplcm8gc3RhdHVzIGlmIHRoZQorIyBmaWxlIGNvdWxkIG5vdCBiZSBmdWxseSB3cml0dGVuIChzdWNoIGFzIGlmIHRoZSBkaXNrIGlzIGZ1bGwpLgorbTRfZGVmdW4oW0FTX0lOSVRfR0VORVJBVEVEXSwKK1ttNF9yZXF1aXJlKFtBU19QUkVQQVJFXSldZG5sCitbbTRfcHVzaGRlZihbQVNfTUVTU0FHRV9MT0dfRkRdKV1kbmwKK1thc193cml0ZV9mYWlsPTAKK2NhdCA+JDEgPDxfQVNFT0YgfHwgYXNfd3JpdGVfZmFpbD0xCisjISAkU0hFTEwKKyMgR2VuZXJhdGVkIGJ5ICRhc19tZS4KKyQyCitTSEVMTD1cJHtDT05GSUdfU0hFTEwtJFNIRUxMfQorZXhwb3J0IFNIRUxMCitfQVNFT0YKK2NhdCA+PiQxIDw8XF9BU0VPRiB8fCBhc193cml0ZV9mYWlsPTEKK19BU19TSEVMTF9TQU5JVElaRQorX0FTX1BSRVBBUkUKK200X2lmKEFTX01FU1NBR0VfRkQsIFsxXSwgW10sIFtleGVjIEFTX01FU1NBR0VfRkQ+JjEKK10pXWRubAorW200X3RleHRfYm94KFtNYWluIGJvZHkgb2YgJDEgc2NyaXB0Ll0pCitfQVNFT0YKK3Rlc3QgJGFzX3dyaXRlX2ZhaWwgPSAwICYmIGNobW9kICt4ICQxW11kbmwKK19tNF9wb3BkZWYoW0FTX01FU1NBR0VfTE9HX0ZEXSldKSMgQVNfSU5JVF9HRU5FUkFURUQKKworCisjIEFTX0lOSVQKKyMgLS0tLS0tLQorIyBJbml0aWFsaXplIG00c2guCittNF9kZWZpbmUoW0FTX0lOSVRdLAorWyMgV3JhcCBvdXIgY2xlYW51cCBwcmlvciB0byBtNHN1Z2FyJ3MgY2xlYW51cC4KK200X3dyYXAoW19BU19DTEVBTlVQXSkKK200X2luaXQKK200X3Byb3ZpZGUoW0FTX0lOSVRdKQorCisjIEZvcmJpZGRlbiB0b2tlbnMgYW5kIGV4Y2VwdGlvbnMuCittNF9wYXR0ZXJuX2ZvcmJpZChbXl8/QVNfXSkKKworIyBCYW5nc2hlIGFuZCBtaW5pbWFsIGluaXRpYWxpemF0aW9uLgorbTRfZGl2ZXJ0X3RleHQoW0JJTlNIXSwgW0AlOkAhIC9iaW4vc2hdKQorbTRfZGl2ZXJ0X3RleHQoW0hFQURFUi1DT01NRU5UXSwKKwkgICAgICAgW0AlOkAgR2VuZXJhdGVkIGZyb20gX19maWxlX18gYnkgbTRfUEFDS0FHRV9TVFJJTkcuXSkKK200X2RpdmVydF90ZXh0KFtNNFNILVNBTklUSVpFXSwgW19BU19TSEVMTF9TQU5JVElaRV0pCittNF9kaXZlcnRfdGV4dChbTTRTSC1JTklULUZOXSwgW200X3RleHRfYm94KFtNNHNoIFNoZWxsIEZ1bmN0aW9ucy5dKV0pCisKKyMgTGV0J3MgZ28hCittNF9kaXZlcnQoW0JPRFldKWRubAorbTRfdGV4dF9ib3goW01haW4gYm9keSBvZiBzY3JpcHQuXSkKK19BU19ERVRFQ1RfUkVRVUlSRUQoW19BU19TSEVMTF9GTl9XT1JLXSlkbmwKK0FTX1JFUVVJUkUoW19BU19VTlNFVF9QUkVQQVJFXSwgW10sIFtNNFNILUlOSVQtRk5dKWRubAorXSkKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9jb25mL200c3VnYXIvbTRzaC5tNGYgYi9zaGFyZS9hdXRvY29uZi9tNHN1Z2FyL200c2gubTRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYmQ3NjAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvY29uZi9tNHN1Z2FyL200c2gubTRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9jb25mL200c3VnYXIvbTRzdWdhci5tNCBiL3NoYXJlL2F1dG9jb25mL200c3VnYXIvbTRzdWdhci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGNhY2ZiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b2NvbmYvbTRzdWdhci9tNHN1Z2FyLm00CkBAIC0wLDAgKzEsMzI5MyBAQAorZGl2ZXJ0KC0xKSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQXV0b2NvbmYuCisjIEJhc2UgTTQgbGF5ZXIuCisjIFJlcXVpcmVzIEdOVSBNNC4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LAorIyAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEF1dG9jb25mLiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUKKyMgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisjIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisjIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgQXV0b2NvbmYgQ29uZmlndXJlIFNjcmlwdCBFeGNlcHRpb24sCisjIHZlcnNpb24gMy4wLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYW5kIGEgY29weSBvZiB0aGUgQXV0b2NvbmYgQ29uZmlndXJlIFNjcmlwdCBFeGNlcHRpb24gYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZXMgQ09QWUlOR3YzIGFuZCBDT1BZSU5HLkVYQ0VQVElPTgorIyByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgV3JpdHRlbiBieSBBa2ltIERlbWFpbGxlLgorCisjIFNldCB0aGUgcXVvdGVzLCB3aGF0ZXZlciB0aGUgY3VycmVudCBxdW90aW5nIHN5c3RlbS4KK2NoYW5nZXF1b3RlKCkKK2NoYW5nZXF1b3RlKFssIF0pCisKKyMgU29tZSBvbGQgbTQncyBkb24ndCBzdXBwb3J0IG00ZXhpdC4gIEJ1dCB0aGV5IHByb3ZpZGUKKyMgZXF1aXZhbGVudCBmdW5jdGlvbmFsaXR5IGJ5IGNvcmUgZHVtcGluZyBiZWNhdXNlIG9mIHRoZQorIyBsb25nIG1hY3JvcyB3ZSBkZWZpbmUuCitpZmRlZihbX19nbnVfX10sICwKK1tlcnJwcmludChNNHN1Z2FyIHJlcXVpcmVzIEdOVSBNNC4gSW5zdGFsbCBpdCBiZWZvcmUgaW5zdGFsbGluZyBNNHN1Z2FyIG9yCitzZXQgdGhlIE00IGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGl0cyBhYnNvbHV0ZSBmaWxlIG5hbWUuKQorbTRleGl0KDIpXSkKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAxLiBTaW11bGF0ZSAtLXByZWZpeC1idWlsdGlucy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgbTRfZGVmaW5lCisjIG00X2RlZm4KKyMgbTRfdW5kZWZpbmUKK2RlZmluZShbbTRfZGVmaW5lXSwgICBkZWZuKFtkZWZpbmVdKSkKK2RlZmluZShbbTRfZGVmbl0sICAgICBkZWZuKFtkZWZuXSkpCitkZWZpbmUoW200X3VuZGVmaW5lXSwgZGVmbihbdW5kZWZpbmVdKSkKKworbTRfdW5kZWZpbmUoW2RlZmluZV0pCittNF91bmRlZmluZShbZGVmbl0pCittNF91bmRlZmluZShbdW5kZWZpbmVdKQorCisKKyMgbTRfY29weShTUkMsIERTVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIERTVCBhcyB0aGUgZGVmaW5pdGlvbiBvZiBTUkMuCisjIFdoYXQncyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuOgorIyAxLiBtNF9jb3B5KFtmcm9tXSwgW3RvXSkKKyMgMi4gbTRfZGVmaW5lKFt0b10sIFtmcm9tKCRAKV0pCisjIFdlbGwsIG9idmlvdXNseSAxIGlzIG1vcmUgZXhwZW5zaXZlIGluIHNwYWNlLiAgTWF5YmUgMiBpcyBtb3JlIGV4cGVuc2l2ZQorIyBpbiB0aW1lLCBidXQgYmVjYXVzZSBvZiB0aGUgc3BhY2UgY29zdCBvZiAxLCBpdCdzIG5vdCB0aGF0IG9idmlvdXMuCisjIE5ldmVydGhlbGVzcywgb25lIGh1Z2UgZGlmZmVyZW5jZSBpcyB0aGUgaGFuZGxpbmcgb2YgYCQwJy4gIElmIGBmcm9tJworIyB1c2VzIGAkMCcsIHRoZW4gd2l0aCAxLCBgdG8nJ3MgYCQwJyBpcyBgdG8nLCB3aGlsZSBpdCBpcyBgZnJvbScgaW4gMi4KKyMgVGhlIHVzZXIgd291bGQgY2VydGFpbmx5IHByZWZlciB0byBzZWUgYHRvJy4KKyMKKyMgVGhpcyBkZWZpbml0aW9uIGlzIGluIGVmZmVjdCBkdXJpbmcgbTRzdWdhciBpbml0aWFsaXphdGlvbiwgd2hlbgorIyB0aGVyZSBhcmUgbm8gcHVzaGRlZiBzdGFja3M7IGxhdGVyIG9uLCB3ZSByZWRlZmluZSBpdCB0byBzb21ldGhpbmcKKyMgbW9yZSBwb3dlcmZ1bCBmb3IgYWxsIG90aGVyIGNsaWVudHMgdG8gdXNlLgorbTRfZGVmaW5lKFttNF9jb3B5XSwKK1ttNF9kZWZpbmUoWyQyXSwgbTRfZGVmbihbJDFdKSldKQorCisKKyMgbTRfcmVuYW1lKFNSQywgRFNUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlbmFtZSB0aGUgbWFjcm8gU1JDIHRvIERTVC4KK200X2RlZmluZShbbTRfcmVuYW1lXSwKK1ttNF9jb3B5KFskMV0sIFskMl0pbTRfdW5kZWZpbmUoWyQxXSldKQorCisKKyMgbTRfcmVuYW1lX200KE1BQ1JPLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZW5hbWUgTUFDUk8tTkFNRSB0byBtNF9NQUNSTy1OQU1FLgorbTRfZGVmaW5lKFttNF9yZW5hbWVfbTRdLAorW200X3JlbmFtZShbJDFdLCBbbTRfJDFdKV0pCisKKworIyBtNF9jb3B5X3VubTQobTRfTUFDUk8tTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvcHkgbTRfTUFDUk8tTkFNRSB0byBNQUNSTy1OQU1FLgorbTRfZGVmaW5lKFttNF9jb3B5X3VubTRdLAorW200X2NvcHkoWyQxXSwgbTRfYnBhdHN1YnN0KFskMV0sIFtebTRfXCguKlwpXSwgW1tcMV1dKSldKQorCisKKyMgU29tZSBtNCBpbnRlcm5hbHMgaGF2ZSBuYW1lcyBjb2xsaWRpbmcgd2l0aCB0b2tlbnMgd2UgbWlnaHQgdXNlLgorIyBSZW5hbWUgdGhlbSBhYCBsYSBgbTQgLS1wcmVmaXgtYnVpbHRpbnMnLiAgQ29uZGl0aW9uYWxzIGZpcnN0LCBzaW5jZQorIyBzb21lIHN1YnNlcXVlbnQgcmVuYW1lcyBhcmUgY29uZGl0aW9uYWwuCittNF9yZW5hbWVfbTQoW2lmZGVmXSkKK200X3JlbmFtZShbaWZlbHNlXSwgW200X2lmXSkKKworbTRfcmVuYW1lX200KFtidWlsdGluXSkKK200X3JlbmFtZV9tNChbY2hhbmdlY29tXSkKK200X3JlbmFtZV9tNChbY2hhbmdlcXVvdGVdKQorbTRfaWZkZWYoW2NoYW5nZXdvcmRdLGRubCBjb25kaXRpb25hbGx5IGF2YWlsYWJsZSBpbiAxLjQueAorW200X3VuZGVmaW5lKFtjaGFuZ2V3b3JkXSldKQorbTRfcmVuYW1lX200KFtkZWJ1Z2ZpbGVdKQorbTRfcmVuYW1lX200KFtkZWJ1Z21vZGVdKQorbTRfcmVuYW1lX200KFtkZWNyXSkKK200X3JlbmFtZV9tNChbZGl2bnVtXSkKK200X3JlbmFtZV9tNChbZHVtcGRlZl0pCittNF9yZW5hbWVfbTQoW2VycnByaW50XSkKK200X3JlbmFtZV9tNChbZXN5c2NtZF0pCittNF9yZW5hbWVfbTQoW2V2YWxdKQorbTRfcmVuYW1lX200KFtmb3JtYXRdKQorbTRfdW5kZWZpbmUoW2luY2x1ZGVdKQorbTRfcmVuYW1lX200KFtpbmNyXSkKK200X3JlbmFtZV9tNChbaW5kZXhdKQorbTRfcmVuYW1lX200KFtpbmRpcl0pCittNF9yZW5hbWVfbTQoW2xlbl0pCittNF9yZW5hbWUoW200ZXhpdF0sIFttNF9leGl0XSkKK200X3VuZGVmaW5lKFttNHdyYXBdKQorbTRfaWZkZWYoW21rc3RlbXBdLGRubCBhZGRlZCBpbiBNNCAxLjQuOAorW200X3JlbmFtZV9tNChbbWtzdGVtcF0pCittNF9jb3B5KFttNF9ta3N0ZW1wXSwgW200X21ha2V0ZW1wXSkKK200X3VuZGVmaW5lKFttYWtldGVtcF0pXSwKK1ttNF9yZW5hbWVfbTQoW21ha2V0ZW1wXSkKK200X2NvcHkoW200X21ha2V0ZW1wXSwgW200X21rc3RlbXBdKV0pCittNF9yZW5hbWUoW3BhdHN1YnN0XSwgW200X2JwYXRzdWJzdF0pCittNF9yZW5hbWVfbTQoW3BvcGRlZl0pCittNF9yZW5hbWVfbTQoW3B1c2hkZWZdKQorbTRfcmVuYW1lKFtyZWdleHBdLCBbbTRfYnJlZ2V4cF0pCittNF9yZW5hbWVfbTQoW3NoaWZ0XSkKK200X3VuZGVmaW5lKFtzaW5jbHVkZV0pCittNF9yZW5hbWVfbTQoW3N1YnN0cl0pCittNF9pZmRlZihbc3ltYm9sc10sZG5sIHByZXNlbnQgb25seSBpbiBhbHBoYS1xdWFsaXR5IDEuNG8KK1ttNF9yZW5hbWVfbTQoW3N5bWJvbHNdKV0pCittNF9yZW5hbWVfbTQoW3N5c2NtZF0pCittNF9yZW5hbWVfbTQoW3N5c3ZhbF0pCittNF9yZW5hbWVfbTQoW3RyYWNlb2ZmXSkKK200X3JlbmFtZV9tNChbdHJhY2Vvbl0pCittNF9yZW5hbWVfbTQoW3RyYW5zbGl0XSkKKworIyBfbTRfZGVmbihBUkcpCisjIC0tLS0tLS0tLS0tLS0KKyMgX200X2RlZm4gaXMgZm9yIGludGVybmFsIHVzZSBvbmx5IC0gaXQgYnlwYXNzZXMgdGhlIHdyYXBwZXIsIHNvIGl0CisjIG11c3Qgb25seSBiZSB1c2VkIG9uIG9uZSBhcmd1bWVudCBhdCBhIHRpbWUsIGFuZCBvbmx5IG9uIG1hY3JvcworIyBrbm93biB0byBiZSBkZWZpbmVkLiAgTWFrZSBzdXJlIHRoaXMgc3RpbGwgd29ya3MgaWYgdGhlIHVzZXIgcmVuYW1lcworIyBtNF9kZWZuIGJ1dCBub3QgX200X2RlZm4uCittNF9jb3B5KFttNF9kZWZuXSwgW19tNF9kZWZuXSkKKworIyBfbTRfZGl2ZXJ0X3JhdyhOVU0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgX200X2RpdmVydF9yYXcgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5LiAgVXNlIHRoaXMgaW5zdGVhZCBvZgorIyBtNF9idWlsdGluKFtkaXZlcnRdLCBOVU0pLCBzbyB0aGF0IHRyYWNpbmcgZGl2ZXJzaW9uIGZsb3cgaXMgZWFzaWVyLgorbTRfcmVuYW1lKFtkaXZlcnRdLCBbX200X2RpdmVydF9yYXddKQorCisjIF9tNF9wb3BkZWYoQVJHLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgX200X3BvcGRlZiBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkgLSBpdCBieXBhc3NlcyB0aGUgd3JhcHBlciwgc28gaXQKKyMgbXVzdCBvbmx5IGJlIHVzZWQgb24gbWFjcm9zIGtub3duIHRvIGJlIGRlZmluZWQuICBNYWtlIHN1cmUgdGhpcworIyBzdGlsbCB3b3JrcyBpZiB0aGUgdXNlciByZW5hbWVzIG00X3BvcGRlZiBidXQgbm90IF9tNF9wb3BkZWYuCittNF9jb3B5KFttNF9wb3BkZWZdLCBbX200X3BvcGRlZl0pCisKKyMgX200X3VuZGVmaW5lKEFSRy4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgX200X3VuZGVmaW5lIGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seSAtIGl0IGJ5cGFzc2VzIHRoZSB3cmFwcGVyLCBzbworIyBpdCBtdXN0IG9ubHkgYmUgdXNlZCBvbiBtYWNyb3Mga25vd24gdG8gYmUgZGVmaW5lZC4gIE1ha2Ugc3VyZSB0aGlzCisjIHN0aWxsIHdvcmtzIGlmIHRoZSB1c2VyIHJlbmFtZXMgbTRfdW5kZWZpbmUgYnV0IG5vdCBfbTRfdW5kZWZpbmUuCittNF9jb3B5KFttNF91bmRlZmluZV0sIFtfbTRfdW5kZWZpbmVdKQorCisjIF9tNF91bmRpdmVydChOVU0uLi4pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIF9tNF91bmRpdmVydCBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHksIGFuZCBzaG91bGQgYWx3YXlzIGJlIGdpdmVuCisjIGFyZ3VtZW50cy4gIFVzZSB0aGlzIGluc3RlYWQgb2YgbTRfYnVpbHRpbihbdW5kaXZlcnRdLCBOVU0uLi4pLCBzbworIyB0aGF0IHRyYWNpbmcgZGl2ZXJzaW9uIGZsb3cgaXMgZWFzaWVyLgorbTRfcmVuYW1lKFt1bmRpdmVydF0sIFtfbTRfdW5kaXZlcnRdKQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIDIuIEVycm9yIG1lc3NhZ2VzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIG00X2xvY2F0aW9uCisjIC0tLS0tLS0tLS0tCisjIE91dHB1dCB0aGUgY3VycmVudCBmaWxlLCBjb2xvbiwgYW5kIHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgorbTRfZGVmaW5lKFttNF9sb2NhdGlvbl0sCitbX19maWxlX186X19saW5lX19dKQorCisKKyMgbTRfZXJycHJpbnRuKE1TRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2FtZSBhcyBgZXJycHJpbnQnLCBidXQgd2l0aCB0aGUgbWlzc2luZyBlbmQgb2YgbGluZS4KK200X2RlZmluZShbbTRfZXJycHJpbnRuXSwKK1ttNF9lcnJwcmludChbJDEKK10pXSkKKworCisjIG00X3dhcm5pbmcoTVNHKQorIyAtLS0tLS0tLS0tLS0tLS0KKyMgV2FybiB0aGUgdXNlci4KK200X2RlZmluZShbbTRfd2FybmluZ10sCitbbTRfZXJycHJpbnRuKG00X2xvY2F0aW9uWzogd2FybmluZzogJDFdKV0pCisKKworIyBtNF9mYXRhbChNU0csIFtFWElULVNUQVRVU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmF0YWwgdGhlIHVzZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOikKK200X2RlZmluZShbbTRfZmF0YWxdLAorW200X2VycnByaW50bihtNF9sb2NhdGlvbls6IGVycm9yOiAkMV0KK200X2V4cGFuc2lvbl9zdGFjayltNF9leGl0KG00X2lmKFskMl0sLCAxLCBbJDJdKSldKQorCisKKyMgbTRfYXNzZXJ0KEVYUFJFU1NJT04sIFtFWElULVNUQVRVUyA9IDFdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgbWFjcm8gZW5zdXJlcyB0aGF0IEVYUFJFU1NJT04gZXZhbHVhdGVzIHRvIHRydWUsIGFuZCBleGl0cyBpZgorIyBFWFBSRVNTSU9OIGV2YWx1YXRlcyB0byBmYWxzZS4KK200X2RlZmluZShbbTRfYXNzZXJ0XSwKK1ttNF9pZihtNF9ldmFsKFskMV0pLCAwLAorICAgICAgIFttNF9mYXRhbChbYXNzZXJ0IGZhaWxlZDogJDFdLCBbJDJdKV0pXSkKKworCisKKyMjIC0tLS0tLS0tLS0tLS0gIyMKKyMjIDMuIFdhcm5pbmdzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0gIyMKKworCisjIF9tNF93YXJuKENBVEVHT1JZLCBNRVNTQUdFLCBTVEFDSy1UUkFDRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZXBvcnQgYSBNRVNTQUdFIHRvIHRoZSB1c2VyIGlmIHRoZSBDQVRFR09SWSBvZiB3YXJuaW5ncyBpcyBlbmFibGVkLgorIyBUaGlzIGlzIGZvciB0cmFjZXMgb25seS4KKyMgVGhlIFNUQUNLLVRSQUNFIGlzIGEgXG4tc2VwYXJhdGVkIGxpc3Qgb2YgIkxPQ0FUSU9OOiBNRVNTQUdFIi4KKyMKKyMgV2l0aGluIG00LCB0aGUgbWFjcm8gaXMgYSBuby1vcC4gIFRoaXMgbWFjcm8gcmVhbGx5IG1hdHRlcnMKKyMgd2hlbiBhdXRvbTR0ZSBwb3N0LXByb2Nlc3NlcyB0aGUgdHJhY2Ugb3V0cHV0LgorbTRfZGVmaW5lKFtfbTRfd2Fybl0sIFtdKQorCisKKyMgbTRfd2FybihDQVRFR09SWSwgTUVTU0FHRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVwb3J0IGEgTUVTU0FHRSB0byB0aGUgdXNlciBpZiB0aGUgQ0FURUdPUlkgb2Ygd2FybmluZ3MgaXMgZW5hYmxlZC4KK200X2RlZmluZShbbTRfd2Fybl0sCitbX200X3dhcm4oWyQxXSwgWyQyXSwKK200X2lmZGVmKFtfbTRfZXhwYW5zaW9uX3N0YWNrXSwgW200X2V4cGFuc2lvbl9zdGFja10pKV0pCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyA0LiBGaWxlIGluY2x1c2lvbi4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBXZSBhbHNvIHdhbnQgdG8gbmV1dHJhbGl6ZSBpbmNsdWRlIChhbmQgc2luY2x1ZGUgZm9yIHN5bW1ldHJ5KSwKKyMgYnV0IHdlIHdhbnQgdG8gZXh0ZW5kIHRoZW0gc2xpZ2h0bHk6IHdhcm4gd2hlbiBhIGZpbGUgaXMgaW5jbHVkZWQKKyMgc2V2ZXJhbCB0aW1lcy4gIFRoaXMgaXMsIGluIGdlbmVyYWwsIGEgZGFuZ2Vyb3VzIG9wZXJhdGlvbiwgYmVjYXVzZQorIyB0b28gbWFueSBwZW9wbGUgZm9yZ2V0IHRvIHF1b3RlIHRoZSBmaXJzdCBhcmd1bWVudCBvZiBtNF9kZWZpbmUuCisjCisjIEZvciBpbnN0YW5jZSBpbiB0aGUgZm9sbG93aW5nIGNhc2U6CisjICAgbTRfZGVmaW5lKGZvbywgW2Jhcl0pCisjIHRoZW4gYSBzZWNvbmQgcmVhZGluZyB3aWxsIHR1cm4gaW50bworIyAgIG00X2RlZmluZShiYXIsIFtiYXJdKQorIyB3aGljaCBpcyBjZXJ0YWlubHkgbm90IHdoYXQgd2FzIG1lYW50LgorCisjIG00X2luY2x1ZGVfdW5pcXVlKEZJTEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlY2xhcmUgdGhhdCB0aGUgRklMRSB3YXMgbG9hZGluZzsgYW5kIHdhcm4gaWYgaXQgaGFzIGFscmVhZHkKKyMgYmVlbiBpbmNsdWRlZC4KK200X2RlZmluZShbbTRfaW5jbHVkZV91bmlxdWVdLAorW200X2lmZGVmKFttNF9pbmNsdWRlKCQxKV0sCisJICBbbTRfd2Fybihbc3ludGF4XSwgW2ZpbGUgYCQxJyBpbmNsdWRlZCBzZXZlcmFsIHRpbWVzXSldKWRubAorbTRfZGVmaW5lKFttNF9pbmNsdWRlKCQxKV0pXSkKKworCisjIG00X2luY2x1ZGUoRklMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBMaWtlIHRoZSBidWlsdGluIGluY2x1ZGUsIGJ1dCB3YXJucyBhZ2FpbnN0IG11bHRpcGxlIGluY2x1c2lvbnMuCittNF9kZWZpbmUoW200X2luY2x1ZGVdLAorW200X2luY2x1ZGVfdW5pcXVlKFskMV0pZG5sCittNF9idWlsdGluKFtpbmNsdWRlXSwgWyQxXSldKQorCisKKyMgbTRfc2luY2x1ZGUoRklMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlrZSB0aGUgYnVpbHRpbiBzaW5jbHVkZSwgYnV0IHdhcm5zIGFnYWluc3QgbXVsdGlwbGUgaW5jbHVzaW9ucy4KK200X2RlZmluZShbbTRfc2luY2x1ZGVdLAorW200X2luY2x1ZGVfdW5pcXVlKFskMV0pZG5sCittNF9idWlsdGluKFtzaW5jbHVkZV0sIFskMV0pXSkKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgNS4gQWRkaXRpb25hbCBicmFuY2hpbmcgY29uc3RydWN0cy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBCb3RoIGBtNF9pZnZhbCcgYW5kIGBtNF9pZnNldCcgdGVzdHMgYWdhaW5zdCB0aGUgZW1wdHkgc3RyaW5nLiAgVGhlCisjIGRpZmZlcmVuY2UgaXMgdGhhdCBgbTRfaWZzZXQnIGlzIHNwZWNpYWxpemVkIG9uIG1hY3Jvcy4KKyMKKyMgSW4gY2FzZSBvZiBhcmd1bWVudHMgb2YgbWFjcm9zLCBlZy4gJDEsIGl0IG1ha2VzIGxpdHRsZSBkaWZmZXJlbmNlLgorIyBJbiB0aGUgY2FzZSBvZiBhIG1hY3JvIGBGT08nLCB5b3UgZG9uJ3Qgd2FudCB0byBjaGVjayBgbTRfaWZ2YWwoRk9PLAorIyBUUlVFKScsIGJlY2F1c2UgaWYgYEZPTycgZXhwYW5kcyB3aXRoIGNvbW1hcywgdGhlcmUgaXMgYSBzaGlmdGluZyBvZgorIyB0aGUgYXJndW1lbnRzLiAgU28geW91IHdhbnQgdG8gcnVuIGBtNF9pZnZhbChbRk9PXSknLCBidXQgdGhlbiB5b3UganVzdAorIyBjb21wYXJlIHRoZSAqc3RyaW5nKiBgRk9PJyBhZ2FpbnN0IGAnLCB3aGljaCwgb2YgY291cnNlIGZhaWxzLgorIworIyBTbyB5b3Ugd2FudCB0aGUgdmFyaWF0aW9uIGBtNF9pZnNldCcgdGhhdCBleHBlY3RzIGEgbWFjcm8gbmFtZSBhcyAkMS4KKyMgSWYgdGhpcyBtYWNybyBpcyBib3RoIGRlZmluZWQgYW5kIGRlZmluZWQgdG8gYSBub24gZW1wdHkgdmFsdWUsIHRoZW4KKyMgaXQgcnVucyBUUlVFLCBldGMuCisKKworIyBtNF9pZmJsYW5rKENPTkQsIFtJRi1CTEFOS10sIFtJRi1URVhUXSkKKyMgbTRfaWZuYmxhbmsoQ09ORCwgW0lGLVRFWFRdLCBbSUYtQkxBTktdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmIENPTkQgaXMgZW1wdHksIG9yIGNvbnNpc3RzIG9ubHkgb2YgYmxhbmtzIChzcGFjZSwgdGFiLCBuZXdsaW5lKSwKKyMgdGhlbiBleHBhbmQgSUYtQkxBTkssIG90aGVyd2lzZSBleHBhbmQgSUYtVEVYVC4gIFRoaXMgZGlmZmVycyBmcm9tCisjIG00X2lmdmFsIG9ubHkgaWYgQ09ORCBoYXMganVzdCB3aGl0ZXNwYWNlLCBidXQgaXQgaGVscHMgb3B0aW1pemUgaW4KKyMgc3BpdGUgb2YgdXNlcnMgd2hvIG1pc3Rha2VubHkgbGVhdmUgdHJhaWxpbmcgc3BhY2UgYWZ0ZXIgd2hhdCB0aGV5CisjIHRob3VnaHQgd2FzIGFuIGVtcHR5IGFyZ3VtZW50OgorIyAgIG1hY3JvKAorIyAgICAgICAgIFtdCisjICAgICAgICApCisjCisjIFdyaXRpbmcgb25lIG1hY3JvIGluIHRlcm1zIG9mIHRoZSBvdGhlciBjYXVzZXMgZXh0cmEgb3ZlcmhlYWQsIHNvCisjIHdlIGlubGluZSBib3RoIGRlZmluaXRpb25zLgorbTRfZGVmaW5lKFttNF9pZmJsYW5rXSwKK1ttNF9pZihtNF90cmFuc2xpdChbWyQxXV0sICBbIF1bCV1bCitdKSwgW10sIFskMl0sIFskM10pXSkKKworbTRfZGVmaW5lKFttNF9pZm5ibGFua10sCitbbTRfaWYobTRfdHJhbnNsaXQoW1skMV1dLCAgWyBdWwldWworXSksIFtdLCBbJDNdLCBbJDJdKV0pCisKKworIyBtNF9pZnZhbChDT05ELCBbSUYtVFJVRV0sIFtJRi1GQUxTRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSWYgQ09ORCBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgZXhwYW5kIElGLVRSVUUsIG90aGVyd2lzZSBJRi1GQUxTRS4KKyMgQ29tcGFyYWJsZSB0byBtNF9pZmRlZi4KK200X2RlZmluZShbbTRfaWZ2YWxdLAorW200X2lmKFskMV0sIFtdLCBbJDNdLCBbJDJdKV0pCisKKworIyBtNF9uKFRFWFQpCisjIC0tLS0tLS0tLS0KKyMgSWYgVEVYVCBpcyBub3QgZW1wdHksIHJldHVybiBURVhUIGFuZCBhIG5ldyBsaW5lLCBvdGhlcndpc2Ugbm90aGluZy4KK200X2RlZmluZShbbTRfbl0sCitbbTRfaWYoWyQxXSwKKyAgICAgICBbXSwgW10sCisJICAgWyQxCitdKV0pCisKKworIyBtNF9pZnZhbG4oQ09ORCwgW0lGLVRSVUVdLCBbSUYtRkFMU0VdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTYW1lIGFzIGBtNF9pZnZhbCcsIGJ1dCBhZGQgYW4gZXh0cmEgbmV3bGluZSB0byBJRi1UUlVFIG9yIElGLUZBTFNFCisjIHVubGVzcyB0aGF0IGFyZ3VtZW50IGlzIGVtcHR5LgorbTRfZGVmaW5lKFttNF9pZnZhbG5dLAorW200X2lmKFskMV0sCisgICAgICAgW10sICAgW200X24oWyQzXSldLAorCSAgICAgW200X24oWyQyXSldKV0pCisKKworIyBtNF9pZnNldChNQUNSTywgW0lGLVRSVUVdLCBbSUYtRkFMU0VdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZiBNQUNSTyBoYXMgbm8gZGVmaW5pdGlvbiwgb3Igb2YgaXRzIGRlZmluaXRpb24gaXMgdGhlIGVtcHR5IHN0cmluZywKKyMgZXhwYW5kIElGLUZBTFNFLCBvdGhlcndpc2UgSUYtVFJVRS4KK200X2RlZmluZShbbTRfaWZzZXRdLAorW200X2lmZGVmKFskMV0sCisJICBbbTRfaWZ2YWwoX200X2RlZm4oWyQxXSksIFskMl0sIFskM10pXSwKKwkgIFskM10pXSkKKworCisjIG00X2lmbmRlZihOQU1FLCBbSUYtTk9ULURFRklORURdLCBbSUYtREVGSU5FRF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW200X2lmbmRlZl0sCitbbTRfaWZkZWYoWyQxXSwgWyQzXSwgWyQyXSldKQorCisKKyMgbTRfY2FzZShTV0lUQ0gsIFZBTDEsIElGLVZBTDEsIFZBTDIsIElGLVZBTDIsIC4uLiwgREVGQVVMVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbTQgZXF1aXZhbGVudCBvZgorIyBzd2l0Y2ggKFNXSVRDSCkKKyMgeworIyAgIGNhc2UgVkFMMToKKyMgICAgIElGLVZBTDE7CisjICAgICBicmVhazsKKyMgICBjYXNlIFZBTDI6CisjICAgICBJRi1WQUwyOworIyAgICAgYnJlYWs7CisjICAgLi4uCisjICAgZGVmYXVsdDoKKyMgICAgIERFRkFVTFQ7CisjICAgICBicmVhazsKKyMgfS4KKyMgQWxsIHRoZSB2YWx1ZXMgYXJlIG9wdGlvbmFsLCBhbmQgdGhlIG1hY3JvIGlzIHJvYnVzdCB0byBhY3RpdmUKKyMgc3ltYm9scyBwcm9wZXJseSBxdW90ZWQuCisjCisjIFBsZWFzZSBrZWVwIGZvcmVhY2gubTQgaW4gc3luYyB3aXRoIGFueSBhZGp1c3RtZW50cyBtYWRlIGhlcmUuCittNF9kZWZpbmUoW200X2Nhc2VdLAorW200X2lmKFskI10sIDAsIFtdLAorICAgICAgIFskI10sIDEsIFtdLAorICAgICAgIFskI10sIDIsIFskMl0sCisgICAgICAgWyQxXSwgWyQyXSwgWyQzXSwKKyAgICAgICBbJDAoWyQxXSwgbTRfc2hpZnQzKCRAKSldKV0pCisKKworIyBtNF9ibWF0Y2goU1dJVENILCBSRTEsIFZBTDEsIFJFMiwgVkFMMiwgLi4uLCBERUZBVUxUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBtNCBlcXVpdmFsZW50IG9mCisjCisjIGlmIChTV0lUQ0ggPX4gUkUxKQorIyAgIFZBTDE7CisjIGVsaWYgKFNXSVRDSCA9fiBSRTIpCisjICAgVkFMMjsKKyMgZWxpZiAuLi4KKyMgICAuLi4KKyMgZWxzZQorIyAgIERFRkFVTFQKKyMKKyMgQWxsIHRoZSB2YWx1ZXMgYXJlIG9wdGlvbmFsLCBhbmQgdGhlIG1hY3JvIGlzIHJvYnVzdCB0byBhY3RpdmUgc3ltYm9scworIyBwcm9wZXJseSBxdW90ZWQuCisjCisjIFBsZWFzZSBrZWVwIGZvcmVhY2gubTQgaW4gc3luYyB3aXRoIGFueSBhZGp1c3RtZW50cyBtYWRlIGhlcmUuCittNF9kZWZpbmUoW200X2JtYXRjaF0sCitbbTRfaWYoWyQjXSwgMCwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjXSldLAorICAgICAgIFskI10sIDEsIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkIzogJDFdKV0sCisgICAgICAgWyQjXSwgMiwgWyQyXSwKKyAgICAgICBbbTRfaWYobTRfYnJlZ2V4cChbJDFdLCBbJDJdKSwgLTEsIFskMChbJDFdLCBtNF9zaGlmdDMoJEApKV0sCisJICAgICAgWyQzXSldKV0pCisKKyMgbTRfYXJnbihOLCBBUkdTLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4dHJhY3QgYXJndW1lbnQgTiAoZ3JlYXRlciB0aGFuIDApIGZyb20gQVJHUy4gIEV4YW1wbGU6CisjICAgbTRfZGVmaW5lKFtiXSwgW0JdKQorIyAgIG00X2FyZ24oWzJdLCBbYV0sIFtiXSwgW2NdKSA9PiBiCisjCisjIFJhdGhlciB0aGFuIHVzaW5nIG00X2NhcihtNF9zaGlmdG4oWyQxXSwgJEApKSwgd2UgZXhwbG9pdCB0aGUgZmFjdCB0aGF0CisjIEdOVSBtNCBjYW4gZGlyZWN0bHkgcmVmZXJlbmNlIGFueSBhcmd1bWVudCwgdGhyb3VnaCBhbiBpbmRpcmVjdCBtYWNyby4KK200X2RlZmluZShbbTRfYXJnbl0sCitbbTRfYXNzZXJ0KFswIDwgJDFdKV1kbmwKK1ttNF9wdXNoZGVmKFtfJDBdLCBbX200X3BvcGRlZihbXyQwXSldbTRfZHF1b3RlKFskXW00X2luY3IoWyQxXSkpKV8kMCgkQCldKQorCisKKyMgbTRfY2FyKEFSR1MuLi4pCisjIG00X2NkcihBUkdTLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0KKyMgTWFuaXB1bGF0ZSBtNCBsaXN0cy4gIG00X2NhciByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudC4gIG00X2NkcgorIyBidW5kbGVzIGFsbCBidXQgdGhlIGZpcnN0IGFyZ3VtZW50IGludG8gYSBxdW90ZWQgbGlzdC4gIFRoZXNlIHR3bworIyBtYWNyb3MgYXJlIGdlbmVyYWxseSB1c2VkIHdpdGggbGlzdCBhcmd1bWVudHMsIHdpdGggcXVvdGluZyByZW1vdmVkCisjIHRvIGJyZWFrIHRoZSBsaXN0IGludG8gbXVsdGlwbGUgbTQgQVJHUy4KK200X2RlZmluZShbbTRfY2FyXSwgW1skMV1dKQorbTRfZGVmaW5lKFttNF9jZHJdLAorW200X2lmKFskI10sIDAsIFttNF9mYXRhbChbJDA6IGNhbm5vdCBiZSBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHNdKV0sCisgICAgICAgWyQjXSwgMSwgW10sCisgICAgICAgW200X2RxdW90ZShtNF9zaGlmdCgkQCkpXSldKQorCisjIF9tNF9jZHIoQVJHUy4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBMaWtlIG00X2NkciwgZXhjZXB0IGluY2x1ZGUgYSBsZWFkaW5nIGNvbW1hIHVubGVzcyBvbmx5IG9uZSBhcmd1bWVudAorIyByZW1haW5zLiAgV2h5PyAgQmVjYXVzZSBjb21wYXJpbmcgYSBsYXJnZSBsaXN0IGFnYWluc3QgW10gaXMgbW9yZQorIyBleHBlbnNpdmUgaW4gZXhwYW5zaW9uIHRpbWUgdGhhbiBjb21wYXJpbmcgdGhlIG51bWJlciBvZiBhcmd1bWVudHM7IHNvCisjIF9tNF9jZHIgY2FuIGJlIHVzZWQgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHdoZW4gaXQgaXMgdGltZQorIyB0byBlbmQgcmVjdXJzaW9uLgorbTRfZGVmaW5lKFtfbTRfY2RyXSwKK1ttNF9pZihbJCNdLCAxLCBbXSwKKyAgICAgICBbLCBtNF9kcXVvdGUobTRfc2hpZnQoJEApKV0pXSkKKworCisKKyMgbTRfY29uZChURVNUMSwgVkFMMSwgSUYtVkFMMSwgVEVTVDIsIFZBTDIsIElGLVZBTDIsIC4uLiwgW0RFRkFVTFRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNpbWlsYXIgdG8gbTRfaWYsIGV4Y2VwdCB0aGF0IGVhY2ggVEVTVCBpcyBleHBhbmRlZCB3aGVuIGVuY291bnRlcmVkLgorIyBJZiB0aGUgZXhwYW5zaW9uIG9mIFRFU1RuIG1hdGNoZXMgdGhlIHN0cmluZyBWQUxuLCB0aGUgcmVzdWx0IGlzIElGLVZBTG4uCisjIFRoZSByZXN1bHQgaXMgREVGQVVMVCBpZiBubyB0ZXN0cyBwYXNzZWQuICBUaGlzIG1hY3JvIGFsbG93cworIyBzaG9ydC1jaXJjdWl0aW5nIG9mIGV4cGVuc2l2ZSB0ZXN0cywgd2hlcmUgaXQgcGF5cyB0byBhcnJhbmdlIHF1aWNrCisjIGZpbHRlciB0ZXN0cyB0byBydW4gZmlyc3QuCisjCisjIEZvciBhbiBleGFtcGxlLCBjb25zaWRlciBhIHByZXZpb3VzIGltcGxlbWVudGF0aW9uIG9mIF9BU19RVU9URV9JRkVMU0U6CisjCisjICAgIG00X2lmKG00X2luZGV4KFskMV0sIFtcXSksIFstMV0sIFskMl0sCisjICAgICAgICAgIG00X2V2YWwobTRfaW5kZXgoWyQxXSwgW1xcXSkgPj0gMCksIFsxXSwgWyQyXSwKKyMgICAgICAgICAgbTRfZXZhbChtNF9pbmRleChbJDFdLCBbXCRdKSA+PSAwKSwgWzFdLCBbJDJdLAorIyAgICAgICAgICBtNF9ldmFsKG00X2luZGV4KFskMV0sIFtcYF0pID49IDApLCBbMV0sIFskM10sCisjICAgICAgICAgIG00X2V2YWwobTRfaW5kZXgoWyQxXSwgW1wiXSkgPj0gMCksIFsxXSwgWyQzXSwKKyMgICAgICAgICAgWyQyXSkKKyMKKyMgSGVyZSwgbTRfaW5kZXggaXMgY29tcHV0ZWQgNSB0aW1lcywgYW5kIG00X2V2YWwgNCwgZXZlbiBpZiAkMSBjb250YWlucworIyBubyBiYWNrc2xhc2guICBJdCBpcyBtb3JlIGVmZmljaWVudCB0byBkbzoKKyMKKyMgICAgbTRfY29uZChbbTRfaW5kZXgoWyQxXSwgW1xdKV0sIFstMV0sIFskMl0sCisjICAgICAgICAgICAgW200X2V2YWwobTRfaW5kZXgoWyQxXSwgW1xcXSkgPj0gMCldLCBbMV0sIFskMl0sCisjICAgICAgICAgICAgW200X2V2YWwobTRfaW5kZXgoWyQxXSwgW1wkXSkgPj0gMCldLCBbMV0sIFskMl0sCisjICAgICAgICAgICAgW200X2V2YWwobTRfaW5kZXgoWyQxXSwgW1xgXSkgPj0gMCldLCBbMV0sIFskM10sCisjICAgICAgICAgICAgW200X2V2YWwobTRfaW5kZXgoWyQxXSwgW1wiXSkgPj0gMCldLCBbMV0sIFskM10sCisjICAgICAgICAgICAgWyQyXSkKKyMKKyMgSW4gdGhlIGNvbW1vbiBjYXNlIG9mICQxIHdpdGggbm8gYmFja3NsYXNoLCBvbmx5IG9uZSBtNF9pbmRleCBleHBhbnNpb24KKyMgb2NjdXJzLCBhbmQgbTRfZXZhbCBpcyBhdm9pZGVkIGFsdG9nZXRoZXIuCisjCisjIFBsZWFzZSBrZWVwIGZvcmVhY2gubTQgaW4gc3luYyB3aXRoIGFueSBhZGp1c3RtZW50cyBtYWRlIGhlcmUuCittNF9kZWZpbmUoW200X2NvbmRdLAorW200X2lmKFskI10sIFswXSwgW200X2ZhdGFsKFskMDogY2Fubm90IGJlIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50c10pXSwKKyAgICAgICBbJCNdLCBbMV0sIFskMV0sCisgICAgICAgbTRfZXZhbChbJCMgJSAzXSksIFsyXSwgW200X2ZhdGFsKFskMDogbWlzc2luZyBhbiBhcmd1bWVudF0pXSwKKyAgICAgICBbXyQwKCRAKV0pXSkKKworbTRfZGVmaW5lKFtfbTRfY29uZF0sCitbbTRfaWYoKCQxKSwgWygkMildLCBbJDNdLAorICAgICAgIFskI10sIFszXSwgW10sCisgICAgICAgWyQjXSwgWzRdLCBbJDRdLAorICAgICAgIFskMChtNF9zaGlmdDMoJEApKV0pXSkKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyA2LiBFbmhhbmNlZCB2ZXJzaW9uIG9mIHNvbWUgcHJpbWl0aXZlcy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgbTRfYnBhdHN1YnN0cyhTVFJJTkcsIFJFMSwgU1VCU1QxLCBSRTIsIFNVQlNUMiwgLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIG00IGVxdWl2YWxlbnQgb2YKKyMKKyMgICAkXyA9IFNUUklORzsKKyMgICBzL1JFMS9TVUJTVDEvZzsKKyMgICBzL1JFMi9TVUJTVDIvZzsKKyMgICAuLi4KKyMKKyMgQWxsIHRoZSB2YWx1ZXMgYXJlIG9wdGlvbmFsLCBhbmQgdGhlIG1hY3JvIGlzIHJvYnVzdCB0byBhY3RpdmUgc3ltYm9scworIyBwcm9wZXJseSBxdW90ZWQuCisjCisjIEkgd291bGQgaGF2ZSBsaWtlZCB0byBuYW1lIHRoaXMgbWFjcm8gYG00X2JwYXRzdWJzdCcsIHVuZm9ydHVuYXRlbHksCisjIGR1ZSB0byBxdW90YXRpb24gcHJvYmxlbXMsIEkgbmVlZCB0byBkb3VibGUgcXVvdGUgJDEgYmVsb3csIHRoZXJlZm9yZQorIyB0aGUgYW5jaG9ycyBhcmUgYnJva2VuIDooICBJIGNhbid0IGxldCB1c2VycyBiZSB0cmFwcGVkIGJ5IHRoYXQuCisjCisjIFJlY2FsbCB0aGF0IG00X3NoaWZ0MyBhbHdheXMgcmVzdWx0cyBpbiBhbiBhcmd1bWVudC4gIEhlbmNlLCB3ZSBuZWVkCisjIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gYSBmaW5hbCBkZWxldGlvbiB2cy4gZW5kaW5nIHJlY3Vyc2lvbi4KKyMKKyMgUGxlYXNlIGtlZXAgZm9yZWFjaC5tNCBpbiBzeW5jIHdpdGggYW55IGFkanVzdG1lbnRzIG1hZGUgaGVyZS4KK200X2RlZmluZShbbTRfYnBhdHN1YnN0c10sCitbbTRfaWYoWyQjXSwgMCwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjXSldLAorICAgICAgIFskI10sIDEsIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkIzogJDFdKV0sCisgICAgICAgWyQjXSwgMiwgW200X3VucXVvdGUobTRfYnVpbHRpbihbcGF0c3Vic3RdLCBbWyQxXV0sIFskMl0pKV0sCisgICAgICAgWyQjXSwgMywgW200X3VucXVvdGUobTRfYnVpbHRpbihbcGF0c3Vic3RdLCBbWyQxXV0sIFskMl0sIFskM10pKV0sCisgICAgICAgW18kMCgkQG00X2lmKG00X2V2YWwoJCMgJiAxKSwgMCwgWyxdKSldKV0pCittNF9kZWZpbmUoW19tNF9icGF0c3Vic3RzXSwKK1ttNF9pZihbJCNdLCAyLCBbJDFdLAorICAgICAgIFskMChtNF9idWlsdGluKFtwYXRzdWJzdF0sIFtbJDFdXSwgWyQyXSwgWyQzXSksCisJICAgbTRfc2hpZnQzKCRAKSldKV0pCisKKworIyBtNF9jb3B5KFNSQywgRFNUKQorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgdGhlIHB1c2hkZWYgc3RhY2sgRFNUIGFzIGEgY29weSBvZiB0aGUgcHVzaGRlZiBzdGFjayBTUkM7CisjIGdpdmUgYW4gZXJyb3IgaWYgRFNUIGlzIGFscmVhZHkgZGVmaW5lZC4gIFRoaXMgaXMgcGFydGljdWxhcmx5IG5pY2UKKyMgZm9yIGNvcHlpbmcgc2VsZi1tb2RpZnlpbmcgcHVzaGRlZiBzdGFja3MsIHdoZXJlIHRoZSB0b3AgZGVmaW5pdGlvbgorIyBpbmNsdWRlcyBvbmUtc2hvdCBpbml0aWFsaXphdGlvbiB0aGF0IGlzIGxhdGVyIHBvcHBlZCB0byB0aGUgbm9ybWFsCisjIGRlZmluaXRpb24uICBUaGlzIHZlcnNpb24gaW50ZW50aW9uYWxseSBkb2VzIG5vdGhpbmcgaWYgU1JDIGlzCisjIHVuZGVmaW5lZC4KKyMKKyMgU29tZSBtYWNyb3Mgc2ltcGx5IGNhbid0IGJlIHJlbmFtZWQgd2l0aCB0aGlzIG1ldGhvZDogbmFtZWx5LCBhbnl0aGluZworIyBpbnZvbHZlZCBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgbTRfc3RhY2tfZm9yZWFjaF9zZXAuCittNF9kZWZpbmUoW200X2NvcHldLAorW200X2lmZGVmKFskMl0sIFttNF9mYXRhbChbJDA6IHdvbid0IG92ZXJ3cml0ZSBkZWZpbmVkIG1hY3JvOiAkMl0pXSwKKwkgIFttNF9zdGFja19mb3JlYWNoX3NlcChbJDFdLCBbbTRfcHVzaGRlZihbJDJdLF0sIFspXSldKV1kbmwKK1ttNF9pZmRlZihbbTRfbG9jYXRpb24oJDEpXSwgW200X2RlZmluZShbbTRfbG9jYXRpb24oJDIpXSwgbTRfbG9jYXRpb24pXSldKQorCisKKyMgbTRfY29weV9mb3JjZShTUkMsIERTVCkKKyMgbTRfcmVuYW1lX2ZvcmNlKFNSQywgRFNUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpa2UgbTRfY29weS9tNF9yZW5hbWUsIGV4Y2VwdCBibGluZGx5IG92ZXJ3cml0ZSBhbnkgZXhpc3RpbmcgRFNULgorIyBOb3RlIHRoYXQgbTRfY29weV9mb3JjZSB0b2xlcmF0ZXMgdW5kZWZpbmVkIFNSQywgd2hpbGUgbTRfcmVuYW1lX2ZvcmNlCisjIGRvZXMgbm90LgorbTRfZGVmaW5lKFttNF9jb3B5X2ZvcmNlXSwKK1ttNF9pZmRlZihbJDJdLCBbX200X3VuZGVmaW5lKFskMl0pXSltNF9jb3B5KCRAKV0pCisKK200X2RlZmluZShbbTRfcmVuYW1lX2ZvcmNlXSwKK1ttNF9pZmRlZihbJDJdLCBbX200X3VuZGVmaW5lKFskMl0pXSltNF9yZW5hbWUoJEApXSkKKworCisjIG00X2RlZmluZV9kZWZhdWx0KE1BQ1JPLCBWQUxVRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZiBNQUNSTyBpcyB1bmRlZmluZWQsIHNldCBpdCB0byBWQUxVRS4KK200X2RlZmluZShbbTRfZGVmaW5lX2RlZmF1bHRdLAorW200X2lmbmRlZihbJDFdLCBbbTRfZGVmaW5lKCRAKV0pXSkKKworCisjIG00X2RlZmF1bHQoRVhQMSwgRVhQMikKKyMgbTRfZGVmYXVsdF9uYmxhbmsoRVhQMSwgRVhQMikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmV0dXJucyBFWFAxIGlmIG5vdCBlbXB0eS9ibGFuaywgb3RoZXJ3aXNlIEVYUDIuICBFeHBhbmQgdGhlIHJlc3VsdC4KKyMKKyMgbTRfZGVmYXVsdCBpcyBjYWxsZWQgb24gaG90IHBhdGhzLCBzbyBpbmxpbmUgdGhlIGNvbnRlbnRzIG9mIG00X2lmdmFsLAorIyBmb3Igb25lIGxlc3Mgcm91bmQgb2YgZXhwYW5zaW9uLgorbTRfZGVmaW5lKFttNF9kZWZhdWx0XSwKK1ttNF9pZihbJDFdLCBbXSwgWyQyXSwgWyQxXSldKQorCittNF9kZWZpbmUoW200X2RlZmF1bHRfbmJsYW5rXSwKK1ttNF9pZmJsYW5rKFskMV0sIFskMl0sIFskMV0pXSkKKworCisjIG00X2RlZmF1bHRfcXVvdGVkKEVYUDEsIEVYUDIpCisjIG00X2RlZmF1bHRfbmJsYW5rX3F1b3RlZChFWFAxLCBFWFAyKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmV0dXJucyBFWFAxIGlmIG5vbiBlbXB0eS9ibGFuaywgb3RoZXJ3aXNlIEVYUDIuICBMZWF2ZSB0aGUgcmVzdWx0IHF1b3RlZC4KKyMKKyMgRm9yIGNvbXBhcmlzb246CisjICAgbTRfZGVmaW5lKFthY3RpdmVdLCBbQUNUSVZFXSkKKyMgICBtNF9kZWZhdWx0KFthY3RpdmVdLCBbZGVmYXVsdF0pID0+IEFDVElWRQorIyAgIG00X2RlZmF1bHQoW10sIFthY3RpdmVdKSA9PiBBQ1RJVkUKKyMgICAtbTRfZGVmYXVsdChbIF0sIFthY3RpdmVdKS0gPT4gLSAtCisjICAgLW00X2RlZmF1bHRfbmJsYW5rKFsgXSwgW2FjdGl2ZV0pLSA9PiAtQUNUSVZFLQorIyAgIG00X2RlZmF1bHRfcXVvdGVkKFthY3RpdmVdLCBbZGVmYXVsdF0pID0+IGFjdGl2ZQorIyAgIG00X2RlZmF1bHRfcXVvdGVkKFtdLCBbYWN0aXZlXSkgPT4gYWN0aXZlCisjICAgLW00X2RlZmF1bHRfcXVvdGVkKFsgXSwgW2FjdGl2ZV0pLSA9PiAtIC0KKyMgICAtbTRfZGVmYXVsdF9uYmxhbmtfcXVvdGVkKFsgXSwgW2FjdGl2ZV0pLSA9PiAtYWN0aXZlLQorIworIyBtNF9kZWZhdWx0IG1hY3JvIGlzIGNhbGxlZCBvbiBob3QgcGF0aHMsIHNvIGlubGluZSB0aGUgY29udGVudHMgb2YgbTRfaWZ2YWwsCisjIGZvciBvbmUgbGVzcyByb3VuZCBvZiBleHBhbnNpb24uCittNF9kZWZpbmUoW200X2RlZmF1bHRfcXVvdGVkXSwKK1ttNF9pZihbJDFdLCBbXSwgW1skMl1dLCBbWyQxXV0pXSkKKworbTRfZGVmaW5lKFttNF9kZWZhdWx0X25ibGFua19xdW90ZWRdLAorW200X2lmYmxhbmsoWyQxXSwgW1skMl1dLCBbWyQxXV0pXSkKKworCisjIG00X2RlZm4oTkFNRSkKKyMgLS0tLS0tLS0tLS0tLQorIyBMaWtlIHRoZSBvcmlnaW5hbCwgZXhjZXB0IGd1YXJhbnRlZSBhIHdhcm5pbmcgd2hlbiB1c2luZyBzb21ldGhpbmcgd2hpY2ggaXMKKyMgdW5kZWZpbmVkICh1bmxpa2UgTTQgMS40LngpLiAgVGhpcyByZXBsYWNlbWVudCBpcyBub3QgYSBmdWxsLWZlYXR1cmVkCisjIHJlcGxhY2VtZW50OiBpZiBhbnkgb2YgdGhlIGRlZmluZWQgbWFjcm9zIGNvbnRhaW4gdW5iYWxhbmNlZCBxdW90aW5nLCBidXQKKyMgd2hlbiBwYXN0ZWQgdG9nZXRoZXIgcmVzdWx0IGluIGEgd2VsbC1xdW90ZWQgc3RyaW5nLCB0aGVuIG9ubHkgbmF0aXZlIG00CisjIHN1cHBvcnQgaXMgYWJsZSB0byBnZXQgaXQgY29ycmVjdC4gIEJ1dCB0aGF0J3Mgd2hlcmUgcXVhZHJpZ3JhcGhzIGNvbWUgaW4KKyMgaGFuZHksIGlmIHlvdSByZWFsbHkgbmVlZCB1bmJhbGFuY2VkIHF1b3RlcyBpbnNpZGUgeW91ciBtYWNyb3MuCisjCisjIFRoaXMgbWFjcm8gaXMgY2FsbGVkIGZyZXF1ZW50bHksIHNvIG1pbmltaXplIHRoZSBhbW91bnQgb2YgYWRkaXRpb25hbAorIyBleHBhbnNpb25zIGJ5IHNraXBwaW5nIG00X2lmbmRlZi4gIEJldHRlciB5ZXQsIGlmIF9fbTRfdmVyc2lvbl9fIGV4aXN0cywKKyMgKGFkZGVkIGluIE00IDEuNiksIHRoZW4gbGV0IG00IGRvIHRoZSBqb2IgZm9yIHVzIChzZWUgbTRfaW5pdCkuCittNF9kZWZpbmUoW200X2RlZm5dLAorW200X2lmKFskI10sIFswXSwgW1skMF1dLAorICAgICAgIFskI10sIFsxXSwgW200X2lmZGVmKFskMV0sIFtfbTRfZGVmbihbJDFdKV0sCisJCQkgICAgW200X2ZhdGFsKFskMDogdW5kZWZpbmVkIG1hY3JvOiAkMV0pXSldLAorICAgICAgIFttNF9tYXBfYXJncyhbJDBdLCAkQCldKV0pCisKKworIyBtNF9kdW1wZGVmKE5BTUUuLi4pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSW4gbTQgMS40LngsIGR1bXBkZWYgd3JpdGVzIHRvIHRoZSBjdXJyZW50IGRlYnVnZmlsZSwgcmF0aGVyIHRoYW4KKyMgc3RkZXJyLiAgVGhpcyBpbiB0dXJuIHJveWFsbHkgY29uZnVzZXMgYXV0b200dGU7IHNvIHdlIGZvbGxvdyB0aGUKKyMgbGVhZCBvZiBuZXdlciBtNCBhbmQgYWx3YXlzIGR1bXAgdG8gc3RkZXJyLiAgVW5saWtlIHRoZSBvcmlnaW5hbCwKKyMgdGhpcyB2ZXJzaW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50LCBzaW5jZSB0aGVyZSBpcyBubyBjb252ZW5pZW50IHdheQorIyBpbiBtNCAxLjQueCB0byBncmFiIHRoZSBuYW1lcyBvZiBhbGwgZGVmaW5lZCBtYWNyb3MuICBOZXdlciBtNAorIyBhbHdheXMgZHVtcHMgdG8gc3RkZXJyLCByZWdhcmRsZXNzIG9mIHRoZSBjdXJyZW50IGRlYnVnZmlsZTsgaXQgYWxzbworIyBwcm92aWRlcyBtNHN5bWJvbHMgYXMgYSB3YXkgdG8gZ3JhYiBhbGwgY3VycmVudCBtYWNybyBuYW1lcy4gIEJ1dAorIyBkdW1wZGVmcyBpcyBub3QgZnJlcXVlbnRseSBjYWxsZWQsIHNvIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQKKyMgY29uZGl0aW9uYWxseSB1c2luZyB0aGVzZSBuZXdlciBmZWF0dXJlcy4gIEFsc28sIHRoaXMgdmVyc2lvbgorIyBkb2Vzbid0IHNvcnQgbXVsdGlwbGUgYXJndW1lbnRzLgorIworIyBJZiB3ZSBkZXRlY3QgbTQgMS42IG9yIG5ld2VyLCB0aGVuIHByb3ZpZGUgYW4gYWx0ZXJuYXRlIGRlZmluaXRpb24sCisjIGluc3RhbGxlZCBkdXJpbmcgbTRfaW5pdCwgdGhhdCBhbGxvd3MgYnVpbHRpbnMgdGhyb3VnaC4KKyMgVW5mb3J0dW5hdGVseSwgdGhlcmUgaXMgbm8gbmljZSB3YXkgaW4gbTQgMS40LnggdG8gZHVtcCBidWlsdGlucy4KK200X2RlZmluZShbbTRfZHVtcGRlZl0sCitbbTRfaWYoWyQjXSwgWzBdLCBbbTRfZmF0YWwoWyQwOiBtaXNzaW5nIGFyZ3VtZW50XSldLAorICAgICAgIFskI10sIFsxXSwgW200X2lmZGVmKFskMV0sIFttNF9lcnJwcmludG4oCisgIFskMToJXW00X2RxdW90ZShfbTRfZGVmbihbJDFdKSkpXSwgW200X2ZhdGFsKFskMDogdW5kZWZpbmVkIG1hY3JvOiAkMV0pXSldLAorICAgICAgIFttNF9tYXBfYXJncyhbJDBdLCAkQCldKV0pCisKK200X2RlZmluZShbX200X2R1bXBkZWZdLAorW200X2lmKFskI10sIFswXSwgW200X2ZhdGFsKFskMDogbWlzc2luZyBhcmd1bWVudF0pXSwKKyAgICAgICBbJCNdLCBbMV0sIFttNF9idWlsdGluKFtkdW1wZGVmXSwgWyQxXSldLAorICAgICAgIFttNF9tYXBfYXJnc19zZXAoW200X2J1aWx0aW4oW2R1bXBkZWZdLF0sIFspXSwgW10sICRAKV0pXSkKKworCisjIG00X2R1bXBkZWZzKE5BTUUuLi4pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNpbWlsYXIgdG8gYG00X2R1bXBkZWYoTkFNRSknLCBidXQgaWYgTkFNRSB3YXMgbTRfcHVzaGRlZidlZCwgZGlzcGxheSBpdHMKKyMgdmFsdWUgc3RhY2sgKG1vc3QgcmVjZW50IGRpc3BsYXllZCBmaXJzdCkuICBBbHNvLCB0aGlzIHZlcnNpb24gc2lsZW50bHkKKyMgaWdub3JlcyB1bmRlZmluZWQgbWFjcm9zLCByYXRoZXIgdGhhbiBlcnJvcmluZyBvdXQuCisjCisjIFRoaXMgbWFjcm8gY2hlYXRzLCBiZWNhdXNlIGl0IHJlbGllcyBvbiB0aGUgY3VycmVudCBkZWZpbml0aW9uIG9mIE5BTUUKKyMgd2hpbGUgdGhlIHNlY29uZCBhcmd1bWVudCBvZiBtNF9zdGFja19mb3JlYWNoX2xpZm8gaXMgZXZhbHVhdGVkICh3aGljaAorIyB3b3VsZCBiZSB1bmRlZmluZWQgYWNjb3JkaW5nIHRvIHRoZSBBUEkpLgorbTRfZGVmaW5lKFttNF9kdW1wZGVmc10sCitbbTRfaWYoWyQjXSwgWzBdLCBbbTRfZmF0YWwoWyQwOiBtaXNzaW5nIGFyZ3VtZW50XSldLAorICAgICAgIFskI10sIFsxXSwgW200X3N0YWNrX2ZvcmVhY2hfbGlmbyhbJDFdLCBbbTRfZHVtcGRlZihbJDFdKW00X2lnbm9yZV0pXSwKKyAgICAgICBbbTRfbWFwX2FyZ3MoWyQwXSwgJEApXSldKQorCisjIG00X2VzeXNjbWRfcyhDT01NQU5EKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlrZSBtNF9lc3lzY21kLCBleGNlcHQgc3RyaXAgYW55IHRyYWlsaW5nIG5ld2xpbmVzLCB0aHVzIGJlaGF2aW5nCisjIG1vcmUgbGlrZSBzaGVsbCBjb21tYW5kIHN1YnN0aXR1dGlvbi4KK200X2RlZmluZShbbTRfZXN5c2NtZF9zXSwKK1ttNF9jaG9tcF9hbGwobTRfZXN5c2NtZChbJDFdKSldKQorCisKKyMgbTRfcG9wZGVmKE5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLQorIyBMaWtlIHRoZSBvcmlnaW5hbCwgZXhjZXB0IGd1YXJhbnRlZSBhIHdhcm5pbmcgd2hlbiB1c2luZyBzb21ldGhpbmcgd2hpY2ggaXMKKyMgdW5kZWZpbmVkICh1bmxpa2UgTTQgMS40LngpLgorIworIyBUaGlzIG1hY3JvIGlzIGNhbGxlZCBmcmVxdWVudGx5LCBzbyBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIGFkZGl0aW9uYWwKKyMgZXhwYW5zaW9ucyBieSBza2lwcGluZyBtNF9pZm5kZWYuICBCZXR0ZXIgeWV0LCBpZiBfX200X3ZlcnNpb25fXyBleGlzdHMsCisjIChhZGRlZCBpbiBNNCAxLjYpLCB0aGVuIGxldCBtNCBkbyB0aGUgam9iIGZvciB1cyAoc2VlIG00X2luaXQpLgorbTRfZGVmaW5lKFttNF9wb3BkZWZdLAorW200X2lmKFskI10sIFswXSwgW1skMF1dLAorICAgICAgIFskI10sIFsxXSwgW200X2lmZGVmKFskMV0sIFtfbTRfcG9wZGVmKFskMV0pXSwKKwkJCSAgICBbbTRfZmF0YWwoWyQwOiB1bmRlZmluZWQgbWFjcm86ICQxXSldKV0sCisgICAgICAgW200X21hcF9hcmdzKFskMF0sICRAKV0pXSkKKworCisjIG00X3NoaWZ0bihOLCAuLi4pCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIFJldHVybnMgLi4uIHNoaWZ0ZWQgTiB0aW1lcy4gIFVzZWZ1bCBmb3IgcmVjdXJzaXZlICJ2YXJhcmdzIiBjb25zdHJ1Y3RzLgorIworIyBBdXRvY29uZiBkb2VzIG5vdCB1c2UgdGhpcyBtYWNybywgYmVjYXVzZSBpdCBpcyBpbmhlcmVudGx5IHNsb3dlciB0aGFuCisjIGNhbGxpbmcgdGhlIGNvbW1vbiBjYXNlcyBvZiBtNF9zaGlmdDIgb3IgbTRfc2hpZnQzIGRpcmVjdGx5LiAgQnV0IGl0CisjIG1pZ2h0IGFzIHdlbGwgYmUgZmFzdCBmb3Igb3RoZXIgY2xpZW50cywgc3VjaCBhcyBMaWJ0b29sLiAgT25lIHdheSB0bworIyBkbyB0aGlzIGlzIHRvIGV4cGFuZCAkQCBvbmx5IG9uY2UgaW4gX200X3NoaWZ0biAob3RoZXJ3aXNlLCBmb3IgbG9uZworIyBsaXN0cywgdGhlIGV4cGFuc2lvbiBvZiBtNF9pZiB0YWtlcyB0d2ljZSBhcyBtdWNoIG1lbW9yeSBhcyB3aGF0IHRoZQorIyBsaXN0IGl0c2VsZiBvY2N1cGllcywgb25seSB0byB0aHJvdyBhd2F5IHRoZSB1bnVzZWQgYnJhbmNoKS4gIFRoZSBlbmQKKyMgcmVzdWx0IGlzIHN0cmljdGx5IGVxdWl2YWxlbnQgdG8KKyMgICBtNF9pZihbJDFdLCAxLCBbbTRfc2hpZnQoLG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpXSwKKyMgICAgICAgICBbX200X3NoaWZ0bihtNF9kZWNyKFskMV0pLCBtNF9zaGlmdChtNF9zaGlmdCgkQCkpKV0pCisjIGJ1dCB3aXRoIHRoZSBmaW5hbCBgbTRfc2hpZnQobTRfc2hpZnQoJEApKSknIHNoYXJlZCBiZXR3ZWVuIHRoZSB0d28KKyMgcGF0aHMuICBUaGUgZmlyc3QgbGVnIHVzZXMgYSBuby1vcCBtNF9zaGlmdCgsJEApIHRvIGJhbGFuY2Ugb3V0IHRoZSAoKS4KKyMKKyMgUGxlYXNlIGtlZXAgZm9yZWFjaC5tNCBpbiBzeW5jIHdpdGggYW55IGFkanVzdG1lbnRzIG1hZGUgaGVyZS4KK200X2RlZmluZShbbTRfc2hpZnRuXSwKK1ttNF9hc3NlcnQoMCA8ICQxICYmICQxIDwgJCMpXyQwKCRAKV0pCisKK200X2RlZmluZShbX200X3NoaWZ0bl0sCitbbTRfaWYoWyQxXSwgMSwgW200X3NoaWZ0KF0sCisgICAgICAgWyQwKG00X2RlY3IoWyQxXSldKSwgbTRfc2hpZnQobTRfc2hpZnQoJEApKSldKQorCisjIG00X3NoaWZ0MiguLi4pCisjIG00X3NoaWZ0MyguLi4pCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIFJldHVybnMgLi4uIHNoaWZ0ZWQgdHdpY2UsIGFuZCB0aHJlZSB0aW1lcy4gIEZhc3RlciB0aGFuIG00X3NoaWZ0bi4KK200X2RlZmluZShbbTRfc2hpZnQyXSwgW200X3NoaWZ0KG00X3NoaWZ0KCRAKSldKQorbTRfZGVmaW5lKFttNF9zaGlmdDNdLCBbbTRfc2hpZnQobTRfc2hpZnQobTRfc2hpZnQoJEApKSldKQorCisjIF9tNF9zaGlmdDIoLi4uKQorIyBfbTRfc2hpZnQzKC4uLikKKyMgLS0tLS0tLS0tLS0tLS0tCisjIExpa2UgbTRfc2hpZnQyIG9yIG00X3NoaWZ0MywgZXhjZXB0IGluY2x1ZGUgYSBsZWFkaW5nIGNvbW1hIHVubGVzcyBzaGlmdGluZworIyBjb25zdW1lcyBhbGwgYXJndW1lbnRzLiAgV2h5PyAgQmVjYXVzZSBpbiByZWN1cnNpb24sIGl0IGlzIG5pY2UgdG8KKyMgZGlzdGluZ3Vpc2ggYmV0d2VlbiAxIGVsZW1lbnQgbGVmdCBhbmQgMCBlbGVtZW50cyBsZWZ0LCBiYXNlZCBvbiBob3cgbWFueQorIyBhcmd1bWVudHMgdGhpcyBzaGlmdCBleHBhbmRzIHRvLgorbTRfZGVmaW5lKFtfbTRfc2hpZnQyXSwKK1ttNF9pZihbJCNdLCBbMl0sIFtdLAorICAgICAgIFssIG00X3NoaWZ0KG00X3NoaWZ0KCRAKSldKV0pCittNF9kZWZpbmUoW19tNF9zaGlmdDNdLAorW200X2lmKFskI10sIFszXSwgW10sCisgICAgICAgWywgbTRfc2hpZnQobTRfc2hpZnQobTRfc2hpZnQoJEApKSldKV0pCisKKworIyBtNF91bmRlZmluZShOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBMaWtlIHRoZSBvcmlnaW5hbCwgZXhjZXB0IGd1YXJhbnRlZSBhIHdhcm5pbmcgd2hlbiB1c2luZyBzb21ldGhpbmcgd2hpY2ggaXMKKyMgdW5kZWZpbmVkICh1bmxpa2UgTTQgMS40LngpLgorIworIyBUaGlzIG1hY3JvIGlzIGNhbGxlZCBmcmVxdWVudGx5LCBzbyBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIGFkZGl0aW9uYWwKKyMgZXhwYW5zaW9ucyBieSBza2lwcGluZyBtNF9pZm5kZWYuICBCZXR0ZXIgeWV0LCBpZiBfX200X3ZlcnNpb25fXyBleGlzdHMsCisjIChhZGRlZCBpbiBNNCAxLjYpLCB0aGVuIGxldCBtNCBkbyB0aGUgam9iIGZvciB1cyAoc2VlIG00X2luaXQpLgorbTRfZGVmaW5lKFttNF91bmRlZmluZV0sCitbbTRfaWYoWyQjXSwgWzBdLCBbWyQwXV0sCisgICAgICAgWyQjXSwgWzFdLCBbbTRfaWZkZWYoWyQxXSwgW19tNF91bmRlZmluZShbJDFdKV0sCisJCQkgICAgW200X2ZhdGFsKFskMDogdW5kZWZpbmVkIG1hY3JvOiAkMV0pXSldLAorICAgICAgIFttNF9tYXBfYXJncyhbJDBdLCAkQCldKV0pCisKKyMgX200X3dyYXAoUFJFLCBQT1NUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIEhlbHBlciBtYWNybyBmb3IgbTRfd3JhcCBhbmQgbTRfd3JhcF9saWZvLiAgQWxsb3dzIG5lc3RlZCBjYWxscyB0bworIyBtNF93cmFwIHdpdGhpbiB3cmFwcGVkIHRleHQuICBVc2UgX200X2RlZm4gYW5kIF9tNF9wb3BkZWYgZm9yIHNwZWVkLgorbTRfZGVmaW5lKFtfbTRfd3JhcF0sCitbbTRfaWZkZWYoWyQwX3RleHRdLAorCSAgW200X2RlZmluZShbJDBfdGV4dF0sIFskMV1fbTRfZGVmbihbJDBfdGV4dF0pWyQyXSldLAorCSAgW200X2J1aWx0aW4oW200d3JhcF0sIFttNF91bnF1b3RlKAorICBfbTRfZGVmbihbJDBfdGV4dF0pX200X3BvcGRlZihbJDBfdGV4dF0pKV0pbTRfZGVmaW5lKFskMF90ZXh0XSwgWyQxJDJdKV0pXSkKKworIyBtNF93cmFwKFRFWFQpCisjIC0tLS0tLS0tLS0tLS0KKyMgQXBwZW5kIFRFWFQgdG8gdGhlIGxpc3Qgb2YgaG9va3MgdG8gYmUgZXhlY3V0ZWQgYXQgdGhlIGVuZCBvZiBpbnB1dC4KKyMgV2hlcmVhcyB0aGUgb3JkZXIgb2YgdGhlIG9yaWdpbmFsIG1heSBiZSBMSUZPIGluIHRoZSB1bmRlcmx5aW5nIG00LAorIyB0aGlzIHZlcnNpb24gaXMgYWx3YXlzIEZJRk8uCittNF9kZWZpbmUoW200X3dyYXBdLAorW19tNF93cmFwKFtdLCBbJDFbXV0pXSkKKworIyBtNF93cmFwX2xpZm8oVEVYVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByZXBlbmQgVEVYVCB0byB0aGUgbGlzdCBvZiBob29rcyB0byBiZSBleGVjdXRlZCBhdCB0aGUgZW5kIG9mIGlucHV0LgorIyBXaGVyZWFzIHRoZSBvcmRlciBvZiBtNF93cmFwIG1heSBiZSBGSUZPIGluIHRoZSB1bmRlcmx5aW5nIG00LCB0aGlzCisjIHZlcnNpb24gaXMgYWx3YXlzIExJRk8uCittNF9kZWZpbmUoW200X3dyYXBfbGlmb10sCitbX200X3dyYXAoWyQxW11dKV0pCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIDcuIFF1b3RpbmcgbWFuaXB1bGF0aW9uLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIG00X2FwcGx5KE1BQ1JPLCBMSVNUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSW52b2tlIE1BQ1JPLCB3aXRoIGFyZ3VtZW50cyBwcm92aWRlZCBmcm9tIHRoZSBxdW90ZWQgbGlzdCBvZgorIyBjb21tYS1zZXBhcmF0ZWQgcXVvdGVkIGFyZ3VtZW50cy4gIElmIExJU1QgaXMgZW1wdHksIGludm9rZSBNQUNSTworIyB3aXRob3V0IGFyZ3VtZW50cy4gIFRoZSBleHBhbnNpb24gd2lsbCBub3QgYmUgY29uY2F0ZW5hdGVkIHdpdGgKKyMgc3Vic2VxdWVudCB0ZXh0LgorbTRfZGVmaW5lKFttNF9hcHBseV0sCitbbTRfaWYoWyQyXSwgW10sIFskMV0sIFskMSgkMildKVtdXSkKKworIyBfbTRfYXBwbHkoTUFDUk8sIExJU1QpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlrZSBtNF9hcHBseSwgZXhjZXB0IGRvIG5vdGhpbmcgaWYgTElTVCBpcyBlbXB0eS4KK200X2RlZmluZShbX200X2FwcGx5XSwKK1ttNF9pZihbJDJdLCBbXSwgW10sIFskMSgkMilbXV0pXSkKKworCisjIG00X2NvdW50KEFSR1MpCisjIC0tLS0tLS0tLS0tLS0tCisjIFJldHVybiBhIGNvdW50IG9mIGhvdyBtYW55IEFSR1MgYXJlIHByZXNlbnQuCittNF9kZWZpbmUoW200X2NvdW50XSwgWyQjXSkKKworCisjIG00X2N1cnJ5KE1BQ1JPLCBBUkcuLi4pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gYXJndW1lbnQgY3VycnlpbmcuICBUaGUgZXhwYW5zaW9uIG9mIHRoaXMgbWFjcm8gaXMgYW5vdGhlcgorIyBtYWNybyB0aGF0IHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBhcHBlbmRzIGl0IHRvIHRoZSBlbmQgb2YgdGhlCisjIG9yaWdpbmFsIEFSRyBsaXN0LCB0aGVuIGludm9rZXMgTUFDUk8uICBGb3IgZXhhbXBsZToKKyMgICBtNF9jdXJyeShbbTRfY3VycnldLCBbbTRfcmV2ZXJzZV0sIFsxXSkoWzJdKShbM10pID0+IDMsIDIsIDEKKyMgTm90IHF1aXRlIGFzIHByYWN0aWNhbCBhcyBtNF9pbmNyLCBidXQgeW91IGNvdWxkIGFsc28gZG86CisjICAgbTRfZGVmaW5lKFthZGRdLCBbbTRfZXZhbCgoWyQxXSkgKyAoWyQyXSkpXSkKKyMgICBtNF9kZWZpbmUoW2FkZF9vbmVdLCBbbTRfY3VycnkoW2FkZF0sIFsxXSldKQorIyAgIGFkZF9vbmUoKShbMl0pID0+IDMKK200X2RlZmluZShbbTRfY3VycnldLCBbJDEobTRfc2hpZnQoJEAsKV8kMF0pCittNF9kZWZpbmUoW19tNF9jdXJyeV0sICAgICAgICAgICAgICAgW1skMV0pXSkKKworCisjIG00X2RvKFNUUklORywgLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhpcyBtYWNybyBpbnZva2VzIGFsbCBpdHMgYXJndW1lbnRzIChpbiBzZXF1ZW5jZSwgb2YgY291cnNlKS4gIEl0IGlzCisjIHVzZWZ1bCBmb3IgbWFraW5nIHlvdXIgbWFjcm9zIG1vcmUgc3RydWN0dXJlZCBhbmQgcmVhZGFibGUgYnkgZHJvcHBpbmcKKyMgdW5uZWNlc3NhcnkgZG5sJ3MgYW5kIGhhdmUgdGhlIG1hY3JvcyBpbmRlbnRlZCBwcm9wZXJseS4gIE5vIGNvbmNhdGVuYXRpb24KKyMgb2NjdXJzIGFmdGVyIGEgU1RSSU5HOyB1c2UgbTRfdW5xdW90ZShtNF9qb2luKCxTVFJJTkcpKSBmb3IgdGhhdC4KKyMKKyMgUGxlYXNlIGtlZXAgZm9yZWFjaC5tNCBpbiBzeW5jIHdpdGggYW55IGFkanVzdG1lbnRzIG1hZGUgaGVyZS4KK200X2RlZmluZShbbTRfZG9dLAorW200X2lmKFskI10sIDAsIFtdLAorICAgICAgIFskI10sIDEsIFskMVtdXSwKKyAgICAgICBbJDFbXSQwKG00X3NoaWZ0KCRAKSldKV0pCisKKworIyBtNF9kcXVvdGUoQVJHUykKKyMgLS0tLS0tLS0tLS0tLS0tCisjIFJldHVybiBBUkdTIGFzIGEgcXVvdGVkIGxpc3Qgb2YgcXVvdGVkIGFyZ3VtZW50cy4KK200X2RlZmluZShbbTRfZHF1b3RlXSwgIFtbJEBdXSkKKworCisjIG00X2RxdW90ZV9lbHQoQVJHUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZXR1cm4gQVJHUyBhcyBhbiB1bnF1b3RlZCBsaXN0IG9mIGRvdWJsZS1xdW90ZWQgYXJndW1lbnRzLgorIworIyBQbGVhc2Uga2VlcCBmb3JlYWNoLm00IGluIHN5bmMgd2l0aCBhbnkgYWRqdXN0bWVudHMgbWFkZSBoZXJlLgorbTRfZGVmaW5lKFttNF9kcXVvdGVfZWx0XSwKK1ttNF9pZihbJCNdLCBbMF0sIFtdLAorICAgICAgIFskI10sIFsxXSwgW1tbJDFdXV0sCisgICAgICAgW1tbJDFdXSwkMChtNF9zaGlmdCgkQCkpXSldKQorCisKKyMgbTRfZWNobyhBUkdTKQorIyAtLS0tLS0tLS0tLS0tCisjIFJldHVybiB0aGUgQVJHUywgd2l0aCB0aGUgc2FtZSBsZXZlbCBvZiBxdW90aW5nLiAgV2hpdGVzcGFjZSBhZnRlcgorIyB1bnF1b3RlZCBjb21tYXMgYXJlIGNvbnN1bWVkLgorbTRfZGVmaW5lKFttNF9lY2hvXSwgWyRAXSkKKworCisjIG00X2V4cGFuZChBUkcpCisjIF9tNF9leHBhbmQoQVJHKQorIyAtLS0tLS0tLS0tLS0tLS0KKyMgUmV0dXJuIHRoZSBleHBhbnNpb24gb2YgQVJHIGFzIGEgc2luZ2xlIHN0cmluZy4gIFVubGlrZQorIyBtNF9xdW90ZSgkMSksIHRoaXMgcHJlc2VydmVzIHdoaXRlc3BhY2UgZm9sbG93aW5nIHNpbmdsZS1xdW90ZWQKKyMgY29tbWFzIHRoYXQgYXBwZWFyIHdpdGhpbiBBUkcuICBJdCBhbHNvIGRlYWxzIHdpdGggc2hlbGwgY2FzZQorIyBzdGF0ZW1lbnRzLgorIworIyAgIG00X2RlZmluZShbYWN0aXZlXSwgW0FDVCwgSVZFXSkKKyMgICBtNF9kZWZpbmUoW2FjdGl2ZTJdLCBbW0FDVCwgSVZFXV0pCisjICAgbTRfcXVvdGUoYWN0aXZlLCBhY3RpdmUyKQorIyAgID0+IEFDVCxJVkUsQUNULCBJVkUKKyMgICBtNF9leHBhbmQoW2FjdGl2ZSwgYWN0aXZlMl0pCisjICAgPT4gQUNULCBJVkUsIEFDVCwgSVZFCisjCisjIFVuZm9ydHVuYXRlbHksIGR1ZSB0byBsaW1pdGF0aW9ucyBpbiBtNCwgQVJHIG11c3QgZXhwYW5kIHRvCisjIHNvbWV0aGluZyB3aXRoIGJhbGFuY2VkIHF1b3RlcyAodXNlIHF1YWRyaWdyYXBocyB0byBnZXQgYXJvdW5kCisjIHRoaXMpLCBhbmQgc2hvdWxkIG5vdCBjb250YWluIHRoZSB1bmxpa2VseSBkZWxpbWl0ZXJzIC09PHsoIG9yCisjICl9Pj0tLiAgSXQgaXMgcG9zc2libGUgdG8gaGF2ZSB1bmJhbGFuY2VkIHF1b3RlZCBgKCcgb3IgYCknLCBhcyB3ZWxsCisjIGFzIHVuYmFsYW5jZWQgdW5xdW90ZWQgYCknLiAgbTRfZXhwYW5kIGNhbiBoYW5kbGUgdW50ZXJtaW5hdGVkCisjIGNvbW1lbnRzIG9yIGRubCBvbiB0aGUgZmluYWwgbGluZSwgYXQgdGhlIGV4cGVuc2Ugb2Ygc3BlZWQ7IGl0IGFsc28KKyMgYWlkcyBpbiBkZXRlY3RpbmcgYXR0ZW1wdHMgdG8gaW5jb3JyZWN0bHkgY2hhbmdlIHRoZSBjdXJyZW50CisjIGRpdmVyc2lvbiBpbnNpZGUgQVJHLiAgTWVhbndoaWxlLCBfbTRfZXhwYW5kIGlzIGZhc3RlciBidXQgbXVzdCBiZQorIyBnaXZlbiBhIHRlcm1pbmF0ZWQgZXhwYW5zaW9uLCBhbmQgaGFzIG5vIHNhZmV0eSBjaGVja3MgZm9yCisjIG1pcy1kaXZlcnRlZCB0ZXh0LgorIworIyBFeHBsb2l0IHRoYXQgZXh0cmEgdW5xdW90ZWQgKCkgd2lsbCBncm91cCB1bnF1b3RlZCBjb21tYXMgYW5kIHRoZQorIyBmb2xsb3dpbmcgd2hpdGVzcGFjZS4gIG00X2JwYXRzdWJzdCBjYW4ndCBoYW5kbGUgbmV3bGluZXMgaW5zaWRlICQxLAorIyBhbmQgbTRfc3Vic3RyIHN0cmlwcyBxdW90aW5nLiAgU28gd2UgKGFiKXVzZSBtNF9jaGFuZ2VxdW90ZSwgdXNpbmcKKyMgdGVtcG9yYXJ5IHF1b3RlcyB0byByZW1vdmUgdGhlIGRlbGltaXRlcnMgdGhhdCBjb252ZW5pZW50bHkgaW5jbHVkZWQKKyMgdGhlIHVucXVvdGVkICgpIHRoYXQgd2VyZSBhZGRlZCBwcmlvciB0byB0aGUgY2hhbmdlcXVvdGUuCisjCisjIFRoYW5rcyB0byBzaGVsbCBjYXNlIHN0YXRlbWVudHMsIHRvbyBtYW55IHBlb3BsZSBhcmUgcHJvbmUgdG8gcGFzcworIyB1bmRlcnF1b3RlZCBgKScsIHNvIHdlIHRyeSB0byBkZXRlY3QgdGhhdCBieSBwYXNzaW5nIGEgbWFya2VyIGFzIGEKKyMgZm91cnRoIGFyZ3VtZW50OyBpZiB0aGUgbWFya2VyIGlzIG5vdCBwcmVzZW50LCB0aGVuIHdlIGFzc3VtZSB0aGF0CisjIHdlIGVuY291bnRlcmVkIGFuIGVhcmx5IGApJywgYW5kIHJlLWV4cGFuZCB0aGUgZmlyc3QgYXJndW1lbnQsIGJ1dAorIyB0aGlzIHRpbWUgd2l0aCBvbmUgbW9yZSBgKCcgaW4gdGhlIHNlY29uZCBhcmd1bWVudCBhbmQgaW4gdGhlCisjIG9wZW4tcXVvdGUgZGVsaW1pdGVyLiAgV2UgbXVzdCBhbHNvIGlnbm9yZSB0aGUgc2xvcCBmcm9tIHRoZQorIyBwcmV2aW91cyB0cnkuICBUaGUgZmluYWwgbWFjcm8gaXMgdGh1cyBoYWxmIGxpbmUtbm9pc2UsIGhhbGYgYXJ0LgorbTRfZGVmaW5lKFttNF9leHBhbmRdLAorW200X3B1c2hkZWYoW200X2RpdmVydF0sIF9tNF9kZWZuKFtfbTRfZGl2ZXJ0X3Vuc2FmZV0pKV1kbmwKK1ttNF9wdXNoZGVmKFttNF9kaXZlcnRfcHVzaF0sIF9tNF9kZWZuKFtfbTRfZGl2ZXJ0X3Vuc2FmZV0pKV1kbmwKK1ttNF9jaG9tcChfJDAoWyQxCitdKSlfbTRfcG9wZGVmKFttNF9kaXZlcnRdLCBbbTRfZGl2ZXJ0X3B1c2hdKV0pCisKK200X2RlZmluZShbX200X2V4cGFuZF0sIFskMF8oWyQxXSwgWyhdLCAtPTx7KCQxKX0+PS0sIFt9Pj0tXSldKQorCittNF9kZWZpbmUoW19tNF9leHBhbmRfXSwKK1ttNF9pZihbJDRdLCBbfT49LV0sCisgICAgICAgW200X2NoYW5nZXF1b3RlKFstPTx7JDJdLCBbKX0+PS1dKSQzbTRfY2hhbmdlcXVvdGUoWywgXSldLAorICAgICAgIFskMChbJDFdLCBbKCQyXSwgLT08eygkMiQxKX0+PS0sIFt9Pj0tXSltNF9pZ25vcmUkMl0pXSkKKworCisjIG00X2lnbm9yZShBUkdTKQorIyAtLS0tLS0tLS0tLS0tLS0KKyMgRXhwYW5kcyB0byBub3RoaW5nLiAgVXNlZnVsIGZvciBjb25kaXRpb25hbGx5IGlnbm9yaW5nIGFuIGFyYml0cmFyeQorIyBudW1iZXIgb2YgYXJndW1lbnRzIChzZWUgX200X2xpc3RfY21wIGZvciBhbiBleGFtcGxlKS4KK200X2RlZmluZShbbTRfaWdub3JlXSkKKworCisjIG00X21ha2VfbGlzdChBUkdTKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2ltaWxhciB0byBtNF9kcXVvdGUsIHRoaXMgY3JlYXRlcyBhIHF1b3RlZCBsaXN0IG9mIHF1b3RlZCBBUkdTLiAgVGhpcworIyB2ZXJzaW9uIGlzIGxlc3MgZWZmaWNpZW50IHRoYW4gbTRfZHF1b3RlLCBidXQgc2VwYXJhdGVzIGVhY2ggYXJndW1lbnQKKyMgd2l0aCBhIGNvbW1hIGFuZCBuZXdsaW5lLCByYXRoZXIgdGhhbiBqdXN0IGNvbW1hLCBmb3IgcmVhZGFiaWxpdHkuCisjIFdoZW4gZGV2ZWxvcGluZyBhbiBtNHN1Z2FyIGFsZ29yaXRobSwgeW91IGNvdWxkIHRlbXBvcmFyaWx5IHVzZQorIyAgIG00X3B1c2hkZWYoW200X2RxdW90ZV0sbTRfZGVmbihbbTRfbWFrZV9saXN0XSkpCisjIGFyb3VuZCB5b3VyIGNvZGUgdG8gbWFrZSBkZWJ1Z2dpbmcgZWFzaWVyLgorbTRfZGVmaW5lKFttNF9tYWtlX2xpc3RdLCBbbTRfam9pbihbLAorXSwgbTRfZHF1b3RlX2VsdCgkQCkpXSkKKworCisjIG00X25vcXVvdGUoU1RSSU5HKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmV0dXJuIHRoZSByZXN1bHQgb2YgaWdub3JpbmcgYWxsIHF1b3RlcyBpbiBTVFJJTkcgYW5kIGludm9raW5nIHRoZQorIyBtYWNyb3MgaXQgY29udGFpbnMuICBBbW9uZ3N0IG90aGVyIHRoaW5ncywgdGhpcyBpcyB1c2VmdWwgZm9yIGVuYWJsaW5nCisjIG1hY3JvIGludm9jYXRpb25zIGluc2lkZSBzdHJpbmdzIHdpdGggW10gYmxvY2tzIChmb3IgaW5zdGFuY2UgcmVnZXhwcworIyBhbmQgaGVscC1zdHJpbmdzKS4gIE9uIHRoZSBvdGhlciBoYW5kLCBzaW5jZSBhbGwgcXVvdGVzIGFyZSBkaXNhYmxlZCwKKyMgYW55IG1hY3JvIGV4cGFuZGVkIGR1cmluZyB0aGlzIHRpbWUgdGhhdCByZWxpZXMgb24gbmVzdGVkIFtdIHF1b3RpbmcKKyMgd2lsbCBsaWtlbHkgY3Jhc2ggYW5kIGJ1cm4uICBUaGlzIG1hY3JvIGlzIHNlbGRvbSB1c2VmdWw7IGNvbnNpZGVyCisjIG00X3VucXVvdGUgb3IgbTRfZXhwYW5kIGluc3RlYWQuCittNF9kZWZpbmUoW200X25vcXVvdGVdLAorW200X2NoYW5nZXF1b3RlKFstPTx7KF0sWyl9Pj0tXSkkMS09PHsoKX0+PS1tNF9jaGFuZ2VxdW90ZShbLF0pXSkKKworCisjIG00X3F1b3RlKEFSR1MpCisjIC0tLS0tLS0tLS0tLS0tCisjIFJldHVybiBBUkdTIGFzIGEgc2luZ2xlIGFyZ3VtZW50LiAgQW55IHdoaXRlc3BhY2UgYWZ0ZXIgdW5xdW90ZWQgY29tbWFzCisjIGlzIHN0cmlwcGVkLiAgVGhlcmUgaXMgYWx3YXlzIG91dHB1dCwgZXZlbiB3aGVuIHRoZXJlIHdlcmUgbm8gYXJndW1lbnRzLgorIworIyBJdCBpcyBpbXBvcnRhbnQgdG8gcmVhbGl6ZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGBtNF9xdW90ZShleHApJyBhbmQKKyMgYFtleHBdJzogaW4gdGhlIGZpcnN0IGNhc2UgeW91IG9idGFpbiB0aGUgcXVvdGVkICpyZXN1bHQqIG9mIHRoZQorIyBleHBhbnNpb24gb2YgRVhQLCB3aGlsZSBpbiB0aGUgbGF0dGVyIHlvdSBqdXN0IG9idGFpbiB0aGUgc3RyaW5nCisjIGBleHAnLgorbTRfZGVmaW5lKFttNF9xdW90ZV0sICBbWyQqXV0pCisKKworIyBfbTRfcXVvdGUoQVJHUykKKyMgLS0tLS0tLS0tLS0tLS0tCisjIExpa2UgbTRfcXVvdGUsIGV4Y2VwdCB0aGF0IHdoZW4gdGhlcmUgYXJlIG5vIGFyZ3VtZW50cywgdGhlcmUgaXMgbm8KKyMgb3V0cHV0LiAgRm9yIGNvbmRpdGlvbmFsIHNjZW5hcmlvcyAoc3VjaCBhcyBwYXNzaW5nIF9tNF9xdW90ZSBhcyB0aGUKKyMgbWFjcm8gbmFtZSBpbiBtNF9tYXBhbGwpLCB0aGlzIGZlYXR1cmUgY2FuIGJlIHVzZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbgorIyBvbmUgYXJndW1lbnQgb2YgdGhlIGVtcHR5IHN0cmluZyB2cy4gbm8gYXJndW1lbnRzLiAgSG93ZXZlciwgaW4gdGhlCisjIG5vcm1hbCBjYXNlIHdpdGggYXJndW1lbnRzIHByZXNlbnQsIHRoaXMgaXMgbGVzcyBlZmZpY2llbnQgdGhhbiBtNF9xdW90ZS4KK200X2RlZmluZShbX200X3F1b3RlXSwKK1ttNF9pZihbJCNdLCBbMF0sIFtdLCBbWyQqXV0pXSkKKworCisjIG00X3JldmVyc2UoQVJHUykKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBPdXRwdXQgQVJHUyBpbiByZXZlcnNlIG9yZGVyLgorIworIyBQbGVhc2Uga2VlcCBmb3JlYWNoLm00IGluIHN5bmMgd2l0aCBhbnkgYWRqdXN0bWVudHMgbWFkZSBoZXJlLgorbTRfZGVmaW5lKFttNF9yZXZlcnNlXSwKK1ttNF9pZihbJCNdLCBbMF0sIFtdLCBbJCNdLCBbMV0sIFtbJDFdXSwKKyAgICAgICBbJDAobTRfc2hpZnQoJEApKSwgWyQxXV0pXSkKKworCisjIG00X3VucXVvdGUoQVJHUykKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBSZW1vdmUgb25lIGxheWVyIG9mIHF1b3RlcyBmcm9tIGVhY2ggQVJHLCBwZXJmb3JtaW5nIG9uZSBsZXZlbCBvZgorIyBleHBhbnNpb24uICBGb3Igb25lIGFyZ3VtZW50LCBtNF91bnF1b3RlKFthcmddKSBpcyBtb3JlIGVmZmljaWVudCB0aGFuCisjIG00X2RvKFthcmddKSwgYnV0IGZvciBtdWx0aXBsZSBhcmd1bWVudHMsIHRoZSBkaWZmZXJlbmNlIGlzIHRoYXQKKyMgbTRfdW5xdW90ZSBzZXBhcmF0ZXMgYXJndW1lbnRzIHdpdGggY29tbWFzIHdoaWxlIG00X2RvIGNvbmNhdGVuYXRlcy4KKyMgRm9sbG93IHRoaXMgbWFjcm8gd2l0aCBbXSBpZiBjb25jYXRlbmF0aW9uIHdpdGggc3Vic2VxdWVudCB0ZXh0IGlzCisjIHVuZGVzaXJlZC4KK200X2RlZmluZShbbTRfdW5xdW90ZV0sIFskKl0pCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIDguIEltcGxlbWVudGluZyBtNCBsb29wcy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgbTRfZm9yKFZBUklBQkxFLCBGSVJTVCwgTEFTVCwgW1NURVAgPSArLy0xXSwgRVhQUkVTU0lPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhwYW5kIEVYUFJFU1NJT04gZGVmaW5pbmcgVkFSSUFCTEUgdG8gRlJPTSwgRlJPTSArIDEsIC4uLiwgVE8gd2l0aAorIyBpbmNyZW1lbnRzIG9mIFNURVAuICBCb3RoIGxpbWl0cyBhcmUgaW5jbHVkZWQsIGFuZCBib3VuZHMgYXJlCisjIGNoZWNrZWQgZm9yIGNvbnNpc3RlbmN5LiAgVGhlIGFsZ29yaXRobSBpcyByb2J1c3QgdG8gaW5kaXJlY3QKKyMgVkFSSUFCTEUgbmFtZXMuICBDaGFuZ2luZyBWQVJJQUJMRSBpbnNpZGUgRVhQUkVTU0lPTiB3aWxsIG5vdCBpbXBhY3QKKyMgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zLgorIworIyBVc2VzIF9tNF9kZWZuIGZvciBzcGVlZCwgYW5kIGF2b2lkIGRubCBpbiB0aGUgbWFjcm8gYm9keS4gIEZhY3RvcgorIyB0aGUgX200X2ZvciBjYWxsIHNvIHRoYXQgRVhQUkVTU0lPTiBpcyBvbmx5IHBhcnNlZCBvbmNlLgorbTRfZGVmaW5lKFttNF9mb3JdLAorW200X3B1c2hkZWYoWyQxXSwgbTRfZXZhbChbJDJdKSldZG5sCitbbTRfY29uZChbbTRfZXZhbCgoWyQzXSkgPiAoWyQyXSkpXSwgMSwKKwkgICBbbTRfcHVzaGRlZihbX200X3N0ZXBdLCBtNF9ldmFsKG00X2RlZmF1bHRfcXVvdGVkKFskNF0sCisJICAgICAgMSkpKW00X2Fzc2VydChfbTRfc3RlcCA+IDApXyQwKF9tNF9kZWZuKFskMV0pLAorICBtNF9ldmFsKCgoWyQzXSkgLSAoWyQyXSkpIC8gX200X3N0ZXAgKiBfbTRfc3RlcCArIChbJDJdKSksIF9tNF9zdGVwLF0sCisJIFttNF9ldmFsKChbJDNdKSA8IChbJDJdKSldLCAxLAorCSAgIFttNF9wdXNoZGVmKFtfbTRfc3RlcF0sIG00X2V2YWwobTRfZGVmYXVsdF9xdW90ZWQoWyQ0XSwKKwkgICAgICAtMSkpKW00X2Fzc2VydChfbTRfc3RlcCA8IDApXyQwKF9tNF9kZWZuKFskMV0pLAorICBtNF9ldmFsKCgoWyQyXSkgLSAoWyQzXSkpIC8gLShfbTRfc3RlcCkgKiBfbTRfc3RlcCArIChbJDJdKSksIF9tNF9zdGVwLF0sCisJIFttNF9wdXNoZGVmKFtfbTRfc3RlcF0pXyQwKF9tNF9kZWZuKFskMV0pLCBfbTRfZGVmbihbJDFdKSwgMCxdKV1kbmwKK1tbbTRfZGVmaW5lKFskMV0sXSwgWykkNV0pbTRfcG9wZGVmKFtfbTRfc3RlcF0sIFskMV0pXSkKKworIyBfbTRfZm9yKENPVU5ULCBMQVNULCBTVEVQLCBQUkUsIFBPU1QpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29yZSBvZiB0aGUgbG9vcCwgbm8gY29uc2lzdGVuY3kgY2hlY2tzLCBhbGwgYXJndW1lbnRzIGFyZSBwbGFpbgorIyBudW1iZXJzLiAgRXhwYW5kIFBSRVtDT1VOVF1QT1NULCB0aGVuIGFsdGVyIENPVU5UIGJ5IFNURVAgYW5kCisjIGl0ZXJhdGUgaWYgQ09VTlQgaXMgbm90IExBU1QuCittNF9kZWZpbmUoW19tNF9mb3JdLAorWyQ0WyQxXSQ1W11tNF9pZihbJDFdLCBbJDJdLCBbXSwKKwkJIFskMChtNF9ldmFsKFskMSArICQzXSksIFskMl0sIFskM10sIFskNF0sIFskNV0pXSldKQorCisKKyMgSW1wbGVtZW50aW5nIGBmb3JlYWNoJyBsb29wcyBpbiBtNCBpcyBtdWNoIG1vcmUgdHJpY2t5IHRoYW4gaXQgbWF5CisjIHNlZW0uICBGb3IgZXhhbXBsZSwgdGhlIG9sZCBNNCAxLjQuNCBtYW51YWwgaGFkIGFuIGluY29ycmVjdCBleGFtcGxlLAorIyB3aGljaCBsb29rZWQgbGlrZSB0aGlzICh3aGVuIHRyYW5zbGF0ZWQgdG8gbTRzdWdhcik6CisjCisjIHwgIyBmb3JlYWNoKFZBUiwgKExJU1QpLCBTVE1UKQorIyB8IG00X2RlZmluZShbZm9yZWFjaF0sCisjIHwgICBbbTRfcHVzaGRlZihbJDFdKV9mb3JlYWNoKFskMV0sIFskMl0sIFskM10pbTRfcG9wZGVmKFskMV0pXSkKKyMgfCBtNF9kZWZpbmUoW19hcmcxXSwgWyQxXSkKKyMgfCBtNF9kZWZpbmUoW19mb3JlYWNoXSwKKyMgfCAgIFttNF9pZihbJDJdLCBbKCldLCAsCisjIHwgICAgIFttNF9kZWZpbmUoWyQxXSwgX2FyZzEkMikkM1tdX2ZvcmVhY2goWyQxXSwgKG00X3NoaWZ0JDIpLCBbJDNdKV0pXSkKKyMKKyMgQnV0IHRoZW4gaWYgeW91IHJ1bgorIworIyB8IG00X2RlZmluZShhLCAxKQorIyB8IG00X2RlZmluZShiLCAyKQorIyB8IG00X2RlZmluZShjLCAzKQorIyB8IGZvcmVhY2goW2ZdLCBbKFthXSwgWyhiXSwgW2MpXSldLCBbZWNobyBmCisjIHwgXSkKKyMKKyMgaXQgZ2l2ZXMKKyMKKyMgID0+IGVjaG8gMQorIyAgPT4gZWNobyAoMiwzKQorIworIyB3aGljaCBpcyBub3Qgd2hhdCBpcyBleHBlY3RlZC4KKyMKKyMgT2YgY291cnNlIHRoZSBwcm9ibGVtIGlzIHRoYXQgbWFueSBxdW90ZXMgYXJlIG1pc3NpbmcuICBTbyB5b3UgYWRkCisjIHBsZW50eSBvZiBxdW90ZXMgYXQgcmFuZG9tIHBsYWNlcywgdW50aWwgeW91IHJlYWNoIHRoZSBleHBlY3RlZAorIyByZXN1bHQuICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgYXJlIGEgcXVvdGluZyB3aXphcmQsIHlvdSBkaXJlY3RseQorIyByZWFjaCB0aGUgZm9sbG93aW5nIGltcGxlbWVudGF0aW9uIChidXQgaWYgeW91IHJlYWxseSBkaWQsIHRoZW4KKyMgYXBwbHkgdG8gdGhlIG1haW50ZW5hbmNlIG9mIG00c3VnYXIhKS4KKyMKKyMgfCAjIGZvcmVhY2goVkFSLCAoTElTVCksIFNUTVQpCisjIHwgbTRfZGVmaW5lKFtmb3JlYWNoXSwgW200X3B1c2hkZWYoWyQxXSlfZm9yZWFjaCgkQCltNF9wb3BkZWYoWyQxXSldKQorIyB8IG00X2RlZmluZShbX2FyZzFdLCBbWyQxXV0pCisjIHwgbTRfZGVmaW5lKFtfZm9yZWFjaF0sCisjIHwgIFttNF9pZigkMiwgWygpXSwgLAorIyB8ICAgIFttNF9kZWZpbmUoWyQxXSwgW19hcmcxJDJdKSQzW11fZm9yZWFjaChbJDFdLCBbKG00X3NoaWZ0JDIpXSwgWyQzXSldKV0pCisjCisjIHdoaWNoIHRoaXMgdGltZSBhbnN3ZXJzCisjCisjICA9PiBlY2hvIGEKKyMgID0+IGVjaG8gKGIKKyMgID0+IGVjaG8gYykKKyMKKyMgQmluZ28hCisjCisjIFdlbGwsIG5vdCBxdWl0ZS4KKyMKKyMgV2l0aCBhIGJldHRlciBsb29rLCB5b3UgcmVhbGl6ZSB0aGF0IHRoZSBwYXJlbnMgYXJlIG1vcmUgYSBwYWluIHRoYW4KKyMgYSBoZWxwOiBzaW5jZSBhbnl3YXkgeW91IG5lZWQgdG8gcXVvdGUgcHJvcGVybHkgdGhlIGxpc3QsIHlvdSBlbmQgdXAKKyMgd2l0aCBhbHdheXMgdXNpbmcgYW4gb3V0ZXJtb3N0IHBhaXIgb2YgcGFyZW5zIGFuZCBhbiBvdXRlcm1vc3QgcGFpcgorIyBvZiBxdW90ZXMuICBSZWplY3RpbmcgdGhlIHBhcmVucyBib3RoIGVhc2VzIHRoZSBpbXBsZW1lbnRhdGlvbiwgYW5kCisjIHNpbXBsaWZpZXMgdGhlIHVzZToKKyMKKyMgfCAjIGZvcmVhY2goVkFSLCAoTElTVCksIFNUTVQpCisjIHwgbTRfZGVmaW5lKFtmb3JlYWNoXSwgW200X3B1c2hkZWYoWyQxXSlfZm9yZWFjaCgkQCltNF9wb3BkZWYoWyQxXSldKQorIyB8IG00X2RlZmluZShbX2FyZzFdLCBbJDFdKQorIyB8IG00X2RlZmluZShbX2ZvcmVhY2hdLAorIyB8ICBbbTRfaWYoJDIsIFtdLCAsCisjIHwgICAgW200X2RlZmluZShbJDFdLCBbX2FyZzEoJDIpXSkkM1tdX2ZvcmVhY2goWyQxXSwgW200X3NoaWZ0KCQyKV0sIFskM10pXSldKQorIworIworIyBOb3csIGp1c3QgcmVwbGFjZSB0aGUgYCQyJyB3aXRoIGBtNF9xdW90ZSgkMiknIGluIHRoZSBvdXRlciBgbTRfaWYnCisjIHRvIGltcHJvdmUgcm9idXN0bmVzcywgYW5kIHlvdSBjb21lIHVwIHdpdGggYSBuaWNlIGltcGxlbWVudGF0aW9uCisjIHRoYXQgZG9lc24ndCByZXF1aXJlIGV4dHJhIHBhcmVudGhlc2VzIGluIHRoZSB1c2VyJ3MgTElTVC4KKyMKKyMgQnV0IHdhaXQgLSAgbm93IHRoZSBhbGdvcml0aG0gaXMgcXVhZHJhdGljLCBiZWNhdXNlIGV2ZXJ5IHJlY3Vyc2lvbiBvZgorIyB0aGUgYWxnb3JpdGhtIGtlZXBzIHRoZSBlbnRpcmUgTElTVCBhbmQgbWVyZWx5IGFkZHMgYW5vdGhlciBtNF9zaGlmdCB0bworIyB0aGUgcXVvdGVkIHRleHQuICBJZiB0aGUgdXNlciBoYXMgYSBsb3Qgb2YgZWxlbWVudHMgaW4gTElTVCwgeW91IGNhbgorIyBicmluZyB0aGUgc3lzdGVtIHRvIGl0cyBrbmVlcyB3aXRoIHRoZSBtZW1vcnkgbTQgdGhlbiByZXF1aXJlcywgb3IgdHJpcAorIyB0aGUgbTQgLS1uZXN0aW5nLWxpbWl0IHJlY3Vyc2lvbiBmYWN0b3IuICBUaGUgb25seSB3YXkgdG8gYXZvaWQKKyMgcXVhZHJhdGljIGdyb3d0aCBpcyBlbnN1cmUgbTRfc2hpZnQgaXMgZXhwYW5kZWQgcHJpb3IgdG8gdGhlIHJlY3Vyc2lvbi4KKyMgSGVuY2UgdGhlIGRlc2lnbiBiZWxvdy4KKyMKKyMgVGhlIE00IG1hbnVhbCBub3cgaW5jbHVkZXMgYSBjaGFwdGVyIGRldm90ZWQgdG8gdGhpcyBpc3N1ZSwgd2l0aAorIyB0aGUgbGVzc29ucyBsZWFybmVkIGZyb20gbTRzdWdhci4gIEFuZCBzdGlsbCwgdGhpcyBkZXNpZ24gaXMgb25seQorIyBvcHRpbWFsIGZvciBNNCAxLjY7IHNlZSBmb3JlYWNoLm00IGZvciB5ZXQgbW9yZSBjb21tZW50cyBvbiB3aHkKKyMgTTQgMS40LnggdXNlcyB5ZXQgYW5vdGhlciBpbXBsZW1lbnRhdGlvbi4KKworCisjIG00X2ZvcmVhY2goVkFSSUFCTEUsIExJU1QsIEVYUFJFU1NJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIEV4cGFuZCBFWFBSRVNTSU9OIGFzc2lnbmluZyBlYWNoIHZhbHVlIG9mIHRoZSBMSVNUIHRvIFZBUklBQkxFLgorIyBMSVNUIHNob3VsZCBoYXZlIHRoZSBmb3JtIGBpdGVtXzEsIGl0ZW1fMiwgLi4uLCBpdGVtX24nLCBpLmUuIHRoZQorIyB3aG9sZSBsaXN0IG11c3QgKnF1b3RlZCouICBRdW90ZSBtZW1iZXJzIHRvbyBpZiB5b3UgZG9uJ3Qgd2FudCB0aGVtCisjIHRvIGJlIGV4cGFuZGVkLgorIworIyBUaGlzIG1hY3JvIGlzIHJvYnVzdCB0byBhY3RpdmUgc3ltYm9sczoKKyMgICAgICB8IG00X2RlZmluZShhY3RpdmUsIFtBQ1QsIElWRV0pCisjICAgICAgfCBtNF9mb3JlYWNoKFZhciwgW2FjdGl2ZSwgYWN0aXZlXSwgWy1WYXItXSkKKyMgICAgID0+IC1BQ1QtLUlWRS0tQUNULS1JVkUtCisjCisjICAgICAgfCBtNF9mb3JlYWNoKFZhciwgW1thY3RpdmVdLCBbYWN0aXZlXV0sIFstVmFyLV0pCisjICAgICA9PiAtQUNULCBJVkUtLUFDVCwgSVZFLQorIworIyAgICAgIHwgbTRfZm9yZWFjaChWYXIsIFtbW2FjdGl2ZV1dLCBbW2FjdGl2ZV1dXSwgWy1WYXItXSkKKyMgICAgID0+IC1hY3RpdmUtLWFjdGl2ZS0KKyMKKyMgVGhpcyBtYWNybyBpcyBjYWxsZWQgZnJlcXVlbnRseSwgc28gYXZvaWQgZXh0cmEgZXhwYW5zaW9ucyBzdWNoIGFzCisjIG00X2lmdmFsIGFuZCBkbmwuICBBbHNvLCBzaW5jZSAkMiBtaWdodCBiZSBxdWl0ZSBsYXJnZSwgdHJ5IHRvIHVzZSBpdAorIyBhcyBsaXR0bGUgYXMgcG9zc2libGUgaW4gX200X2ZvcmVhY2g7IGVhY2ggZXh0cmEgdXNlIHJlcXVpcmVzIHRoYXQgbXVjaAorIyBtb3JlIG1lbW9yeSBmb3IgZXhwYW5zaW9uLiAgU28sIHJhdGhlciB0aGFuIGRpcmVjdGx5IGNvbXBhcmUgJDIgYWdhaW5zdAorIyBbXSBhbmQgdXNlIG00X2Nhci9tNF9jZHIgZm9yIHJlY3Vyc2lvbiwgd2UgaW5zdGVhZCB1bmJveCB0aGUgbGlzdCAod2hpY2gKKyMgcmVxdWlyZXMgc3dhcHBpbmcgdGhlIGFyZ3VtZW50IG9yZGVyIGluIHRoZSBoZWxwZXIpLCBpbnNlcnQgYW4gaWdub3JlZAorIyB0aGlyZCBhcmd1bWVudCwgYW5kIHVzZSBtNF9zaGlmdDMgdG8gZGV0ZWN0IHdoZW4gcmVjdXJzaW9uIGlzIGNvbXBsZXRlLAorIyBhdCB3aGljaCBwb2ludCB0aGlzIGxvb2tzIHZlcnkgbXVjaCBsaWtlIG00X21hcF9hcmdzLgorbTRfZGVmaW5lKFttNF9mb3JlYWNoXSwKK1ttNF9pZihbJDJdLCBbXSwgW10sCisgICAgICAgW200X3B1c2hkZWYoWyQxXSlfJDAoW200X2RlZmluZShbJDFdLF0sIFspJDNdLCBbXSwKKyAgJDIpbTRfcG9wZGVmKFskMV0pXSldKQorCisjIF9tNF9mb3JlYWNoKFBSRSwgUE9TVCwgSUdOT1JFRCwgQVJHLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRm9ybSB0aGUgY29tbW9uIGJhc2lzIG9mIHRoZSBtNF9mb3JlYWNoIGFuZCBtNF9tYXAgbWFjcm9zLiAgRm9yIGVhY2gKKyMgQVJHLCBleHBhbmQgUFJFW0FSR11QT1NUW10uICBUaGUgSUdOT1JFRCBhcmd1bWVudCBtYWtlcyByZWN1cnNpb24KKyMgZWFzaWVyLCBhbmQgbXVzdCBiZSBzdXBwbGllZCByYXRoZXIgdGhhbiBpbXBsaWNpdC4KKyMKKyMgUGxlYXNlIGtlZXAgZm9yZWFjaC5tNCBpbiBzeW5jIHdpdGggYW55IGFkanVzdG1lbnRzIG1hZGUgaGVyZS4KK200X2RlZmluZShbX200X2ZvcmVhY2hdLAorW200X2lmKFskI10sIFszXSwgW10sCisgICAgICAgWyQxWyQ0XSQyW10kMChbJDFdLCBbJDJdLCBtNF9zaGlmdDMoJEApKV0pXSkKKworCisjIG00X2ZvcmVhY2hfdyhWQVJJQUJMRSwgTElTVCwgRVhQUkVTU0lPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWtlIG00X2ZvcmVhY2gsIGJ1dCB0aGUgbGlzdCBpcyB3aGl0ZXNwYWNlIHNlcGFyYXRlZC4gIERlcGVuZGluZyBvbgorIyBFWFBSRVNTSU9OLCBpdCBtYXkgYmUgbW9yZSBlZmZpY2llbnQgdG8gdXNlIG00X21hcF9hcmdzX3cuCisjCisjIFRoaXMgbWFjcm8gaXMgcm9idXN0IHRvIGFjdGl2ZSBzeW1ib2xzOgorIyAgICBtNF9mb3JlYWNoX3coW1Zhcl0sIFsgYWN0aXZlCisjICAgIGIJYWN0XAorIyAgICBpdmUgIF0sIFstVmFyLV0pZW5kCisjICAgID0+IC1hY3RpdmUtLWItLWFjdGl2ZS1lbmQKKyMKKyMgVGhpcyB1c2VkIHRvIHVzZSBhIHNsb3dlciBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBtNF9mb3JlYWNoOgorIyAgIG00X2ZvcmVhY2goWyQxXSwgbTRfc3BsaXQobTRfbm9ybWFsaXplKFskMl0pLCBbIF0pLCBbJDNdKQorbTRfZGVmaW5lKFttNF9mb3JlYWNoX3ddLAorW200X3B1c2hkZWYoWyQxXSltNF9tYXBfYXJnc193KFskMl0sCisgIFttNF9kZWZpbmUoWyQxXSxdLCBbKSQzXSltNF9wb3BkZWYoWyQxXSldKQorCisKKyMgbTRfbWFwKE1BQ1JPLCBMSVNUKQorIyBtNF9tYXBhbGwoTUFDUk8sIExJU1QpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSW52b2tlIE1BQ1JPKCQxKSwgTUFDUk8oJDIpIGV0Yy4gd2hlcmUgJDEsICQyLi4uIGFyZSB0aGUgZWxlbWVudHMgb2YKKyMgTElTVC4gICQxLCAkMi4uLiBtdXN0IGluIHR1cm4gYmUgbGlzdHMsIGFwcHJvcHJpYXRlIGZvciBtNF9hcHBseS4KKyMgSWYgTElTVCBjb250YWlucyBhbiBlbXB0eSBzdWJsaXN0LCBtNF9tYXAgc2tpcHMgdGhlIGV4cGFuc2lvbiBvZgorIyBNQUNSTywgd2hpbGUgbTRfbWFwYWxsIGV4cGFuZHMgTUFDUk8gd2l0aCBubyBhcmd1bWVudHMuCisjCisjIFNpbmNlIExJU1QgbWF5IGJlIHF1aXRlIGxhcmdlLCB3ZSB3YW50IHRvIG1pbmltaXplIGhvdyBvZnRlbiBpdAorIyBhcHBlYXJzIGluIHRoZSBleHBhbnNpb24uICBSYXRoZXIgdGhhbiB1c2UgbTRfY2FyL200X2NkciBpdGVyYXRpb24sCisjIHdlIHVuYm94IHRoZSBsaXN0LCBhbmQgdXNlIF9tNF9mb3JlYWNoIGZvciBpdGVyYXRpb24uICBGb3IgbTRfbWFwLAorIyBhbiBlbXB0eSBsaXN0IGJlaGF2ZXMgbGlrZSBhbiBlbXB0eSBzdWJsaXN0IGFuZCBnZXRzIGlnbm9yZWQ7IGZvcgorIyBtNF9tYXBhbGwsIHdlIG11c3Qgc3BlY2lhbC1jYXNlIHRoZSBlbXB0eSBsaXN0LgorbTRfZGVmaW5lKFttNF9tYXBdLAorW19tNF9mb3JlYWNoKFtfbTRfYXBwbHkoWyQxXSxdLCBbKV0sIFtdLCAkMildKQorCittNF9kZWZpbmUoW200X21hcGFsbF0sCitbbTRfaWYoWyQyXSwgW10sIFtdLAorICAgICAgIFtfbTRfZm9yZWFjaChbbTRfYXBwbHkoWyQxXSxdLCBbKV0sIFtdLCAkMildKV0pCisKKworIyBtNF9tYXBfc2VwKE1BQ1JPLCBbU0VQQVJBVE9SXSwgTElTVCkKKyMgbTRfbWFwYWxsX3NlcChNQUNSTywgW1NFUEFSQVRPUl0sIExJU1QpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJbnZva2UgTUFDUk8oJDEpLCBTRVBBUkFUT1IsIE1BQ1JPKCQyKSwgLi4uLCBNQUNSTygkTikgd2hlcmUgJDEsCisjICQyLi4uICROIGFyZSB0aGUgZWxlbWVudHMgb2YgTElTVCwgYW5kIGFyZSBpbiB0dXJuIGxpc3RzIGFwcHJvcHJpYXRlCisjIGZvciBtNF9hcHBseS4gIFNFUEFSQVRPUiBpcyBleHBhbmRlZCwgaW4gb3JkZXIgdG8gYWxsb3cgdGhlIGNyZWF0aW9uCisjIG9mIGEgbGlzdCBvZiBhcmd1bWVudHMgYnkgdXNpbmcgYSBzaW5nbGUtcXVvdGVkIGNvbW1hIGFzIHRoZQorIyBzZXBhcmF0b3IuICBGb3IgZWFjaCBlbXB0eSBzdWJsaXN0LCBtNF9tYXBfc2VwIHNraXBzIHRoZSBleHBhbnNpb24KKyMgb2YgTUFDUk8gYW5kIFNFUEFSQVRPUiwgd2hpbGUgbTRfbWFwYWxsX3NlcCBleHBhbmRzIE1BQ1JPIHdpdGggbm8KKyMgYXJndW1lbnRzLgorIworIyBGb3IgbTRfbWFwYWxsX3NlcCwgbWVyZWx5IGV4cGFuZCB0aGUgZmlyc3QgaXRlcmF0aW9uIHdpdGhvdXQgdGhlCisjIHNlcGFyYXRvciwgdGhlbiBpbmNsdWRlIHNlcGFyYXRvciBhcyBwYXJ0IG9mIHN1YnNlcXVlbnQgcmVjdXJzaW9uOworIyBidXQgYXZvaWQgZXh0cmEgZXhwYW5zaW9uIG9mIExJU1QncyBzaWRlLWVmZmVjdHMgdmlhIGEgaGVscGVyIG1hY3JvLgorIyBGb3IgbTRfbWFwX3NlcCwgdGhpbmdzIGFyZSB0cmlja2llciAtIHdlIGRvbid0IGtub3cgaWYgdGhlIGZpcnN0CisjIGxpc3QgZWxlbWVudCBpcyBhbiBlbXB0eSBzdWJsaXN0LCBzbyB3ZSBtdXN0IGRlZmluZSBhIHNlbGYtbW9kaWZ5aW5nCisjIGhlbHBlciBtYWNybyBhbmQgdXNlIHRoYXQgYXMgdGhlIHNlcGFyYXRvciBpbnN0ZWFkLgorbTRfZGVmaW5lKFttNF9tYXBfc2VwXSwKK1ttNF9wdXNoZGVmKFttNF9TZXBdLCBbbTRfZGVmaW5lKFttNF9TZXBdLCBfbTRfZGVmbihbbTRfdW5xdW90ZV0pKV0pXWRubAorW19tNF9mb3JlYWNoKFtfbTRfYXBwbHkoW200X1NlcChbJDJdKVtdJDFdLF0sIFspXSwgW10sICQzKW00X3BvcGRlZihbbTRfU2VwXSldKQorCittNF9kZWZpbmUoW200X21hcGFsbF9zZXBdLAorW200X2lmKFskM10sIFtdLCBbXSwgW18kMChbJDFdLCBbJDJdLCAkMyldKV0pCisKK200X2RlZmluZShbX200X21hcGFsbF9zZXBdLAorW200X2FwcGx5KFskMV0sIFskM10pX200X2ZvcmVhY2goW200X2FwcGx5KFskMltdJDFdLF0sIFspXSwgbTRfc2hpZnQyKCRAKSldKQorCisjIG00X21hcF9hcmdzKEVYUFJFU1NJT04sIEFSRy4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeHBhbmQgRVhQUkVTU0lPTihbQVJHXSkgZm9yIGVhY2ggYXJndW1lbnQuICBNb3JlIGVmZmljaWVudCB0aGFuCisjICAgbTRfZm9yZWFjaChbdmFyXSwgW0FSRy4uLl0sIFtFWFBSRVNTSU9OKG00X2RlZm4oW3Zhcl0pKV0pCisjIFNob3J0aGFuZCBmb3IgbTRfbWFwX2FyZ3Nfc2VwKFtFWFBSRVNTSU9OKF0sIFspXSwgW10sIEFSRy4uLikuCittNF9kZWZpbmUoW200X21hcF9hcmdzXSwKK1ttNF9pZihbJCNdLCBbMF0sIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkI10pXSwKKyAgICAgICBbJCNdLCBbMV0sIFtdLAorICAgICAgIFskI10sIFsyXSwgWyQxKFskMl0pW11dLAorICAgICAgIFtfbTRfZm9yZWFjaChbJDEoXSwgWyldLCAkQCldKV0pCisKKworIyBtNF9tYXBfYXJnc19wYWlyKEVYUFJFU1NJT04sIFtFTkQtRVhQUiA9IEVYUFJFU1NJT05dLCBBUkcuLi4pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGVyZm9ybSBhIHBhaXJ3aXNlIGdyb3VwaW5nIG9mIGNvbnNlY3V0aXZlIEFSR3MsIGJ5IGV4cGFuZGluZworIyBFWFBSRVNTSU9OKFtBUkcxXSwgW0FSRzJdKS4gIElmIHRoZXJlIGFyZSBhbiBvZGQgbnVtYmVyIG9mIEFSR3MsIHRoZQorIyBmaW5hbCBhcmd1bWVudCBpcyBleHBhbmRlZCB3aXRoIEVORC1FWFBSKFtBUkduXSkuCisjCisjIEZvciBleGFtcGxlOgorIyAgIG00X2RlZmluZShbc2hvd10sIFsoJCopbTRfbmV3bGluZV0pZG5sCisjICAgbTRfbWFwX2FyZ3NfcGFpcihbc2hvd10sIFtdLCBbYV0sIFtiXSwgW2NdLCBbZF0sIFtlXSlkbmwKKyMgICA9PiAoYSxiKQorIyAgID0+IChjLGQpCisjICAgPT4gKGUpCisjCisjIFBsZWFzZSBrZWVwIGZvcmVhY2gubTQgaW4gc3luYyB3aXRoIGFueSBhZGp1c3RtZW50cyBtYWRlIGhlcmUuCittNF9kZWZpbmUoW200X21hcF9hcmdzX3BhaXJdLAorW200X2lmKFskI10sIFswXSwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjXSldLAorICAgICAgIFskI10sIFsxXSwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjOiAkMV0pXSwKKyAgICAgICBbJCNdLCBbMl0sIFtdLAorICAgICAgIFskI10sIFszXSwgW200X2RlZmF1bHQoWyQyXSwgWyQxXSkoWyQzXSlbXV0sCisgICAgICAgWyQjXSwgWzRdLCBbJDEoWyQzXSwgWyQ0XSlbXV0sCisgICAgICAgWyQxKFskM10sIFskNF0pW10kMChbJDFdLCBbJDJdLCBtNF9zaGlmdChtNF9zaGlmdDMoJEApKSldKV0pCisKKworIyBtNF9tYXBfYXJnc19zZXAoW1BSRV0sIFtQT1NUXSwgW1NFUF0sIEFSRy4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4cGFuZCBQUkVbQVJHXVBPU1QgZm9yIGVhY2ggYXJndW1lbnQsIHdpdGggU0VQIGJldHdlZW4gYXJndW1lbnRzLgorbTRfZGVmaW5lKFttNF9tYXBfYXJnc19zZXBdLAorW200X2lmKFskI10sIFswXSwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjXSldLAorICAgICAgIFskI10sIFsxXSwgW10sCisgICAgICAgWyQjXSwgWzJdLCBbXSwKKyAgICAgICBbJCNdLCBbM10sIFtdLAorICAgICAgIFskI10sIFs0XSwgWyQxWyQ0XSQyW11dLAorICAgICAgIFskMVskNF0kMltdX200X2ZvcmVhY2goWyQzW10kMV0sIFskMl0sIG00X3NoaWZ0MygkQCkpXSldKQorCisKKyMgbTRfbWFwX2FyZ3NfdyhTVFJJTkcsIFtQUkVdLCBbUE9TVF0sIFtTRVBdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gdGhlIGV4cGFuc2lvbiBvZiBQUkVbd29yZF1QT1NUW10gZm9yIGVhY2ggd29yZCBpbiBTVFJJTkcKKyMgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuICBNb3JlIGVmZmljaWVudCB0aGFuOgorIyAgIG00X2ZvcmVhY2hfdyhbdmFyXSwgW1NUUklOR10sIFtQUkVbXW00X2RlZm4oW3Zhcl0pUE9TVF0pCisjIEFkZGl0aW9uYWxseSwgZXhwYW5kIFNFUCBiZXR3ZWVuIHdvcmRzLgorIworIyBBcyBsb25nIGFzIHdlIGhhdmUgdG8gdXNlIG00X2JwYXRzdWJzdCB0byBzcGxpdCB0aGUgc3RyaW5nLCB3ZSBtaWdodAorIyBhcyB3ZWxsIG1ha2UgaXQgYWxzbyBhcHBseSBQUkUgYW5kIFBPU1Q7IHRoaXMgYXZvaWRzIGl0ZXJhdGlvbgorIyBhbHRvZ2V0aGVyLiAgQnV0IHdlIG11c3QgYmUgY2FyZWZ1bCBvZiBhbnkgXCBpbiBQUkUgb3IgUE9TVC4KKyMgX200X3N0cmlwIHJldHVybnMgYSBxdW90ZWQgc3RyaW5nLCBidXQgdGhhdCdzIG9rYXksIHNpbmNlIGl0IGFsc28KKyMgc3VwcGxpZXMgYW4gZW1wdHkgbGVhZGluZyBhbmQgdHJhaWxpbmcgYXJndW1lbnQgZHVlIHRvIG91cgorIyBpbnRlbnRpb25hbCB3aGl0ZXNwYWNlIGFyb3VuZCBTVFJJTkcuICBXZSB1c2UgbTRfc3Vic3RyIHRvIHN0cmlwIHRoZQorIyBlbXB0eSBlbGVtZW50cyBhbmQgcmVtb3ZlIHRoZSBleHRyYSBsYXllciBvZiBxdW90aW5nLgorbTRfZGVmaW5lKFttNF9tYXBfYXJnc193XSwKK1tfJDAoX200X3NwbGl0KFsgXW00X2ZsYXR0ZW4oWyQxXSlbIF0sIFtbCSBdK10sCisJICAgICAgIG00X2lmKG00X2luZGV4KFskMiQzJDRdLCBbXF0pLCBbLTFdLCBbWyQzW10kNFtdJDJdXSwKKwkJICAgICBbbTRfYnBhdHN1YnN0KFtbJDNbXSQ0W10kMl1dLCBbXFxdLCBbXFxcXF0pXSkpLAorICAgICBtNF9sZW4oW1tdJDNbXSQ0XSksIG00X2xlbihbJDRbXSQyW11dKSldKQorCittNF9kZWZpbmUoW19tNF9tYXBfYXJnc193XSwKK1ttNF9zdWJzdHIoWyQxXSwgWyQyXSwgbTRfZXZhbChtNF9sZW4oWyQxXSkgLSBbJDJdIC0gWyQzXSkpXSkKKworCisjIG00X3N0YWNrX2ZvcmVhY2goTUFDUk8sIEZVTkMpCisjIG00X3N0YWNrX2ZvcmVhY2hfbGlmbyhNQUNSTywgRlVOQykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQYXNzIGVhY2ggc3RhY2tlZCBkZWZpbml0aW9uIG9mIE1BQ1JPIHRvIHRoZSBvbmUtYXJndW1lbnQgbWFjcm8gRlVOQy4KKyMgbTRfc3RhY2tfZm9yZWFjaCBwcm9jZWVkcyBpbiBGSUZPIG9yZGVyLCB3aGlsZSBtNF9zdGFja19mb3JlYWNoX2xpZm8KKyMgcHJvY2Vzc2VzIHRoZSB0b3Btb3N0IGRlZmluaXRpb25zIGZpcnN0LiAgSW4gYWRkaXRpb24sIEZVTkMgc2hvdWxkCisjIG5vdCBwdXNoIG9yIHBvcCBkZWZpbml0aW9ucyBvZiBNQUNSTywgYW5kIHNob3VsZCBub3QgZXhwZWN0IGFueXRoaW5nIGFib3V0CisjIHRoZSBhY3RpdmUgZGVmaW5pdGlvbiBvZiBNQUNSTyAoaXQgd2lsbCBub3QgYmUgdGhlIHRvcG1vc3QsIGFuZCBtYXkgbm90CisjIGJlIHRoZSBvbmUgcGFzc2VkIHRvIEZVTkMgZWl0aGVyKS4KKyMKKyMgU29tZSBtYWNyb3Mgc2ltcGx5IGNhbid0IGJlIGV4YW1pbmVkIHdpdGggdGhpcyBtZXRob2Q6IG5hbWVseSwKKyMgYW55dGhpbmcgaW52b2x2ZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIF9tNF9zdGFja19yZXZlcnNlLgorbTRfZGVmaW5lKFttNF9zdGFja19mb3JlYWNoXSwKK1tfbTRfc3RhY2tfcmV2ZXJzZShbJDFdLCBbbTRfdG1wLSQxXSldZG5sCitbX200X3N0YWNrX3JldmVyc2UoW200X3RtcC0kMV0sIFskMV0sIFskMihfbTRfZGVmbihbbTRfdG1wLSQxXSkpXSldKQorCittNF9kZWZpbmUoW200X3N0YWNrX2ZvcmVhY2hfbGlmb10sCitbX200X3N0YWNrX3JldmVyc2UoWyQxXSwgW200X3RtcC0kMV0sIFskMihfbTRfZGVmbihbbTRfdG1wLSQxXSkpXSldZG5sCitbX200X3N0YWNrX3JldmVyc2UoW200X3RtcC0kMV0sIFskMV0pXSkKKworIyBtNF9zdGFja19mb3JlYWNoX3NlcChNQUNSTywgW1BSRV0sIFtQT1NUXSwgW1NFUF0pCisjIG00X3N0YWNrX2ZvcmVhY2hfc2VwX2xpZm8oTUFDUk8sIFtQUkVdLCBbUE9TVF0sIFtTRVBdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2ltaWxhciB0byBtNF9zdGFja19mb3JlYWNoIGFuZCBtNF9zdGFja19mb3JlYWNoX2xpZm8sIGluIHRoYXQgZXZlcnkKKyMgZGVmaW5pdGlvbiBvZiBhIHB1c2hkZWYgc3RhY2sgd2lsbCBiZSB2aXNpdGVkLiAgQnV0IHJhdGhlciB0aGFuCisjIHBhc3NpbmcgdGhlIGRlZmluaXRpb24gYXMgYSBzaW5nbGUgYXJndW1lbnQgdG8gYSBtYWNybywgdGhpcyB2YXJpYW50CisjIGV4cGFuZHMgdGhlIGNvbmNhdGVuYXRpb24gb2YgUFJFW11kZWZpbml0aW9uW11QT1NULCBhbmQgZXhwYW5kcyBTRVAKKyMgYmV0d2VlbiBjb25zZWN1dGl2ZSBleHBhbnNpb25zLiAgTm90ZSB0aGF0IG00X3N0YWNrX2ZvcmVhY2goW2FdLCBbYl0pCisjIGlzIGVxdWl2YWxlbnQgdG8gbTRfc3RhY2tfZm9yZWFjaF9zZXAoW2FdLCBbYihdLCBbKV0pLgorbTRfZGVmaW5lKFttNF9zdGFja19mb3JlYWNoX3NlcF0sCitbX200X3N0YWNrX3JldmVyc2UoWyQxXSwgW200X3RtcC0kMV0pXWRubAorW19tNF9zdGFja19yZXZlcnNlKFttNF90bXAtJDFdLCBbJDFdLCBbJDJbXV9tNF9kZWZuKFttNF90bXAtJDFdKSQzXSwgWyQ0W11dKV0pCisKK200X2RlZmluZShbbTRfc3RhY2tfZm9yZWFjaF9zZXBfbGlmb10sCitbX200X3N0YWNrX3JldmVyc2UoWyQxXSwgW200X3RtcC0kMV0sIFskMltdX200X2RlZm4oW200X3RtcC0kMV0pJDNdLCBbJDRbXV0pXWRubAorW19tNF9zdGFja19yZXZlcnNlKFttNF90bXAtJDFdLCBbJDFdKV0pCisKKworIyBfbTRfc3RhY2tfcmV2ZXJzZShPTEQsIE5FVywgW0FDVElPTl0sIFtTRVBdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBIHJlY3Vyc2l2ZSB3b3JrZXIgZm9yIHB1c2hkZWYgc3RhY2sgbWFuaXB1bGF0aW9uLiAgRGVzdHJ1Y3RpdmVseQorIyBjb3B5IHRoZSBPTEQgc3RhY2sgaW50byB0aGUgTkVXLCBhbmQgZXhwYW5kaW5nIEFDVElPTiBmb3IgZWFjaAorIyBpdGVyYXRpb24uICBBZnRlciB0aGUgZmlyc3QgaXRlcmF0aW9uLCBTRVAgaXMgcHJvbW90ZWQgdG8gdGhlIGZyb250CisjIG9mIEFDVElPTiAobm90ZSB0aGF0IFNFUCBzaG91bGQgaW5jbHVkZSBhIHRyYWlsaW5nIFtdIGlmIGl0IGlzIHRvCisjIGF2b2lkIGludGVyZmVyaW5nIHdpdGggQUNUSU9OKS4gIFRoZSBjdXJyZW50IGRlZmluaXRpb24gaXMgZXhhbWluZWQKKyMgYWZ0ZXIgdGhlIE5FVyBoYXMgYmVlbiBwdXNoZWQgYnV0IGJlZm9yZSBPTEQgaGFzIGJlZW4gcG9wcGVkOyB0aGlzCisjIG9yZGVyIGlzIGltcG9ydGFudCwgYXMgQUNUSU9OIGlzIHBlcm1pdHRlZCB0byBvcGVyYXRlIG9uIGVpdGhlcgorIyBfbTRfZGVmbihbT0xEXSkgb3IgX200X2RlZm4oW05FV10pLiAgU2luY2UgdGhlIG9wZXJhdGlvbiBpcworIyBkZXN0cnVjdGl2ZSwgdGhpcyBtYWNybyBpcyBnZW5lcmFsbHkgdXNlZCB0d2ljZSwgd2l0aCBhIHRlbXBvcmFyeQorIyBtYWNybyBuYW1lIGhvbGRpbmcgdGhlIHN3YXBwZWQgY29weS4KK200X2RlZmluZShbX200X3N0YWNrX3JldmVyc2VdLAorW200X2lmZGVmKFskMV0sIFttNF9wdXNoZGVmKFskMl0sCisgIF9tNF9kZWZuKFskMV0pKSQzW11fbTRfcG9wZGVmKFskMV0pJDAoWyQxXSwgWyQyXSwgWyQ0JDNdKV0pXSkKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgOS4gTW9yZSBkaXZlcnNpb24gc3VwcG9ydC4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIG00X2NsZWFyZGl2ZXJ0KERJVkVSU0lPTi1OQU1FLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGlzY2FyZCBhbnkgdGV4dCBpbiBESVZFUlNJT04tTkFNRS4KKyMKKyMgVGhpcyB3b3JrcyBldmVuIGluc2lkZSBtNF9leHBhbmQuCittNF9kZWZpbmUoW200X2NsZWFyZGl2ZXJ0XSwKK1ttNF9pZihbJCNdLCBbMF0sIFttNF9mYXRhbChbJDA6IG1pc3NpbmcgYXJndW1lbnRdKV0sCisgICAgICAgW19tNF9kaXZlcnRfcmF3KFstMV0pbTRfdW5kaXZlcnQoJEApX200X2RpdmVydF9yYXcoCisJIF9tNF9kaXZlcnQoX200X2RlZm4oW19tNF9kaXZlcnRfZGl2ZXJzaW9uXSkpKV0pXSkKKworCisjIF9tNF9kaXZlcnQoRElWRVJTSU9OLU5BTUUgb3IgTlVNQkVSKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSWYgRElWRVJTSU9OLU5BTUUgaXMgdGhlIG5hbWUgb2YgYSBkaXZlcnNpb24sIHJldHVybiBpdHMgbnVtYmVyLAorIyBvdGhlcndpc2UgaWYgaXQgaXMgYSBOVU1CRVIgcmV0dXJuIGl0LgorbTRfZGVmaW5lKFtfbTRfZGl2ZXJ0XSwKK1ttNF9pZmRlZihbX200X2RpdmVydCgkMSldLAorCSAgW200X2luZGlyKFtfbTRfZGl2ZXJ0KCQxKV0pXSwKKwkgIFskMV0pXSkKKworIyBLSUxMIGlzIG9ubHkgdXNlZCB0byBzdXBwcmVzcyBvdXRwdXQuCittNF9kZWZpbmUoW19tNF9kaXZlcnQoS0lMTCldLCAgICAgICAgICAgLTEpCisKKyMgVGhlIGVtcHR5IGRpdmVyc2lvbiBuYW1lIGlzIGEgc3lub255bSBmb3IgMC4KK200X2RlZmluZShbX200X2RpdmVydCgpXSwgICAgICAgICAgICAgICAgMCkKKworCisjIG00X2RpdmVydF9zdGFjaworIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJpbnQgdGhlIGRpdmVyc2lvbiBzdGFjaywgaWYgaXQncyBub25lbXB0eS4gIFRoZSBjYWxsZXIgaXMKKyMgcmVzcG9uc2libGUgZm9yIGFueSBsZWFkaW5nIG9yIHRyYWlsaW5nIG5ld2xpbmUuCittNF9kZWZpbmUoW200X2RpdmVydF9zdGFja10sCitbbTRfc3RhY2tfZm9yZWFjaF9zZXBfbGlmbyhbX200X2RpdmVydF9zdGFja10sIFtdLCBbXSwgWworXSldKQorCisKKyMgbTRfZGl2ZXJ0X3N0YWNrX3B1c2goTUFDUk8tTkFNRSwgRElWRVJTSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGb3JtIGFuIGVudHJ5IG9mIHRoZSBkaXZlcnNpb24gc3RhY2sgZnJvbSBjYWxsZXIgTUFDUk8tTkFNRSBhbmQKKyMgZW50ZXJpbmcgRElWRVJTSU9OLU5BTUUgYW5kIHB1c2ggaXQuCittNF9kZWZpbmUoW200X2RpdmVydF9zdGFja19wdXNoXSwKK1ttNF9wdXNoZGVmKFtfbTRfZGl2ZXJ0X3N0YWNrXSwgbTRfbG9jYXRpb25bOiAkMTogJDJdKV0pCisKKworIyBtNF9kaXZlcnQoRElWRVJTSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hhbmdlIHRoZSBkaXZlcnNpb24gc3RyZWFtIHRvIERJVkVSU0lPTi1OQU1FLgorbTRfZGVmaW5lKFttNF9kaXZlcnRdLAorW200X3BvcGRlZihbX200X2RpdmVydF9zdGFja10pXWRubAorW200X2RlZmluZShbX200X2RpdmVydF9kaXZlcnNpb25dLCBbJDFdKV1kbmwKK1ttNF9kaXZlcnRfc3RhY2tfcHVzaChbJDBdLCBbJDFdKV1kbmwKK1tfbTRfZGl2ZXJ0X3JhdyhfbTRfZGl2ZXJ0KFskMV0pKV0pCisKKworIyBtNF9kaXZlcnRfcHVzaChESVZFUlNJT04tTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoYW5nZSB0aGUgZGl2ZXJzaW9uIHN0cmVhbSB0byBESVZFUlNJT04tTkFNRSwgd2hpbGUgc3RhY2tpbmcgb2xkIHZhbHVlcy4KK200X2RlZmluZShbbTRfZGl2ZXJ0X3B1c2hdLAorW200X2RpdmVydF9zdGFja19wdXNoKFskMF0sIFskMV0pXWRubAorW200X3B1c2hkZWYoW19tNF9kaXZlcnRfZGl2ZXJzaW9uXSwgWyQxXSldZG5sCitbX200X2RpdmVydF9yYXcoX200X2RpdmVydChbJDFdKSldKQorCisKKyMgbTRfZGl2ZXJ0X3BvcChbRElWRVJTSU9OLU5BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoYW5nZSB0aGUgZGl2ZXJzaW9uIHN0cmVhbSB0byBpdHMgcHJldmlvdXMgdmFsdWUsIHVuc3RhY2tpbmcgaXQuCisjIElmIHNwZWNpZmllZCwgdmVyaWZ5IHdlIGxlZnQgRElWRVJTSU9OLU5BTUUuCisjIFdoZW4gd2UgcG9wIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlIHN0YWNrLCB3ZSBkaXZlcnQgdG8gLTEuCittNF9kZWZpbmUoW200X2RpdmVydF9wb3BdLAorW200X2lmKFskMV0sIFtdLCBbXSwKKyAgICAgICBbJDFdLCBfbTRfZGVmbihbX200X2RpdmVydF9kaXZlcnNpb25dKSwgW10sCisgICAgICAgW200X2ZhdGFsKFskMCgkMSk6IGRpdmVyc2lvbiBtaXNtYXRjaDoKK11tNF9kaXZlcnRfc3RhY2spXSldZG5sCitbX200X3BvcGRlZihbX200X2RpdmVydF9zdGFja10sIFtfbTRfZGl2ZXJ0X2RpdmVyc2lvbl0pXWRubAorW200X2lmZGVmKFtfbTRfZGl2ZXJ0X2RpdmVyc2lvbl0sIFtdLAorCSAgIFttNF9mYXRhbChbdG9vIG1hbnkgbTRfZGl2ZXJ0X3BvcF0pXSldZG5sCitbX200X2RpdmVydF9yYXcoX200X2RpdmVydChfbTRfZGVmbihbX200X2RpdmVydF9kaXZlcnNpb25dKSkpXSkKKworCisjIG00X2RpdmVydF90ZXh0KERJVkVSU0lPTi1OQU1FLCBDT05URU5UKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0IENPTlRFTlQgaW50byBESVZFUlNJT04tTkFNRSAod2hpY2ggbWF5IGJlIGEgbnVtYmVyIGFjdHVhbGx5KS4KKyMgQW4gZW5kIG9mIGxpbmUgaXMgYXBwZW5kZWQgZm9yIGZyZWUgdG8gQ09OVEVOVC4KK200X2RlZmluZShbbTRfZGl2ZXJ0X3RleHRdLAorW200X2RpdmVydF9wdXNoKFskMV0pJDIKK200X2RpdmVydF9wb3AoWyQxXSldKQorCisKKyMgbTRfZGl2ZXJ0X29uY2UoRElWRVJTSU9OLU5BTUUsIENPTlRFTlQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPdXRwdXQgQ09OVEVOVCBpbnRvIERJVkVSU0lPTi1OQU1FIG9uY2UsIGlmIG5vdCBhbHJlYWR5IHRoZXJlLgorIyBBbiBlbmQgb2YgbGluZSBpcyBhcHBlbmRlZCBmb3IgZnJlZSB0byBDT05URU5ULgorbTRfZGVmaW5lKFttNF9kaXZlcnRfb25jZV0sCitbbTRfZXhwYW5kX29uY2UoW200X2RpdmVydF90ZXh0KFskMV0sIFskMl0pXSldKQorCisKKyMgX200X2RpdmVydF91bnNhZmUoRElWRVJTSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJc3N1ZSBhIHdhcm5pbmcgdGhhdCB0aGUgYXR0ZW1wdCB0byBjaGFuZ2UgdGhlIGN1cnJlbnQgZGl2ZXJzaW9uIHRvCisjIERJVkVSU0lPTi1OQU1FIGlzIHVuc2FmZSwgYmVjYXVzZSB0aGlzIG1hY3JvIGlzIGJlaW5nIGV4cGFuZGVkCisjIGR1cmluZyBhcmd1bWVudCBjb2xsZWN0aW9uIG9mIG00X2V4cGFuZC4KK200X2RlZmluZShbX200X2RpdmVydF91bnNhZmVdLAorW200X2ZhdGFsKFskMDogY2Fubm90IGNoYW5nZSBkaXZlcnNpb24gdG8gYCQxJyBpbnNpZGUgbTRfZXhwYW5kXSldKQorCisKKyMgbTRfdW5kaXZlcnQoRElWRVJTSU9OLU5BTUUuLi4pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBVbmRpdmVydCBESVZFUlNJT04tTkFNRS4gIFVubGlrZSB0aGUgTTQgdmVyc2lvbiwgdGhpcyByZXF1aXJlcyBhdAorIyBsZWFzdCBvbmUgRElWRVJTSU9OLU5BTUU7IGFsc28sIGR1ZSB0byBzdXBwb3J0IGZvciBuYW1lZCBkaXZlcnNpb25zLAorIyB0aGlzIHNob3VsZCBub3QgYmUgdXNlZCB0byB1bmRpdmVydCBmaWxlcy4KK200X2RlZmluZShbbTRfdW5kaXZlcnRdLAorW200X2lmKFskI10sIFswXSwgW200X2ZhdGFsKFskMDogbWlzc2luZyBhcmd1bWVudF0pXSwKKyAgICAgICBbJCNdLCBbMV0sIFtfbTRfdW5kaXZlcnQoX200X2RpdmVydChbJDFdKSldLAorICAgICAgIFttNF9tYXBfYXJncyhbJDBdLCAkQCldKV0pCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAxMC4gRGVmaW5pbmcgbWFjcm9zIHdpdGggYmVsbHMgYW5kIHdoaXN0bGVzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIGBtNF9kZWZ1bicgaXMgYmFzaWNhbGx5IGBtNF9kZWZpbmUnIGJ1dCBpdCBlcXVpcHMgdGhlIG1hY3JvIHdpdGggdGhlCisjIG5lZWRlZCBtYWNoaW5lcnkgZm9yIGBtNF9yZXF1aXJlJy4gIEEgbWFjcm8gbXVzdCBiZSBtNF9kZWZ1bidkIGlmCisjIGVpdGhlciBpdCBpcyBtNF9yZXF1aXJlJ2QsIG9yIGl0IG00X3JlcXVpcmUncy4KKyMKKyMgVHdvIHRoaW5ncyBkZXNlcnZlIGF0dGVudGlvbiBhbmQgYXJlIGRldGFpbGVkIGJlbG93OgorIyAgMS4gSW1wbGVtZW50YXRpb24gb2YgbTRfcmVxdWlyZQorIyAgMi4gS2VlcGluZyB0cmFjayBvZiB0aGUgZXhwYW5zaW9uIHN0YWNrCisjCisjIDEuIEltcGxlbWVudGF0aW9uIG9mIG00X3JlcXVpcmUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBPZiBjb3Vyc2UgbTRfZGVmdW4gY2FsbHMgbTRfcHJvdmlkZSwgc28gdGhhdCBhIG1hY3JvIHdoaWNoIGhhcworIyBiZWVuIGV4cGFuZGVkIGlzIG5vdCBleHBhbmRlZCBhZ2FpbiB3aGVuIG00X3JlcXVpcmUnZCwgYnV0IHRoZQorIyBkaWZmaWN1bHQgcGFydCBpcyB0aGUgcHJvcGVyIGV4cGFuc2lvbiBvZiBtYWNyb3Mgd2hlbiB0aGV5IGFyZQorIyBtNF9yZXF1aXJlJ2QuCisjCisjIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiB0aHJlZSBpZGVhcywgKGkpIHVzaW5nIGRpdmVyc2lvbnMgdG8KKyMgcHJlcGFyZSB0aGUgZXhwYW5zaW9uIG9mIHRoZSBtYWNybyBhbmQgaXRzIGRlcGVuZGVuY2llcyAoYnkgRnJhbmMsb2lzCisjIFBpbmFyZCksIChpaSkgZXhwYW5kIHRoZSBtb3N0IHJlY2VudGx5IG00X3JlcXVpcmUnZCBtYWNyb3MgX2FmdGVyXworIyB0aGUgcHJldmlvdXMgbWFjcm9zIChieSBBeGVsIFRoaW1tKSwgYW5kIChpaWkpIHRyYWNrIGluc3RhbmNlcyBvZgorIyBwcm92aWRlIGJlZm9yZSByZXF1aXJlIChieSBFcmljIEJsYWtlKS4KKyMKKyMKKyMgVGhlIGZpcnN0IGlkZWE6IHdoeSB1c2UgZGl2ZXJzaW9ucz8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgV2hlbiBhIG1hY3JvIHJlcXVpcmVzIGFub3RoZXIsIHRoZSBvdGhlciBtYWNybyBpcyBleHBhbmRlZCBpbiBuZXcKKyMgZGl2ZXJzaW9uLCBHUk9XLiAgV2hlbiB0aGUgb3V0ZXIgbWFjcm8gaXMgZnVsbHkgZXhwYW5kZWQsIHdlIGZpcnN0CisjIHVuZGl2ZXJ0IHRoZSBtb3N0IG5lc3RlZCBkaXZlcnNpb25zIChHUk9XIC0gMS4uLiksIGFuZCBmaW5hbGx5CisjIHVuZGl2ZXJ0IEdST1cuICBUbyB1bmRlcnN0YW5kIHdoeSB3ZSBuZWVkIHNldmVyYWwgZGl2ZXJzaW9ucywKKyMgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlOgorIworIyB8IG00X2RlZnVuKFtURVNUMV0sIFtUZXN0Li4ubTRfcmVxdWlyZShbVEVTVDJdKTFdKQorIyB8IG00X2RlZnVuKFtURVNUMl0sIFtUZXN0Li4ubTRfcmVxdWlyZShbVEVTVDNdKTJdKQorIyB8IG00X2RlZnVuKFtURVNUM10sIFtUZXN0Li4uM10pCisjCisjIEJlY2F1c2UgbTRfcmVxdWlyZSBpcyBub3QgcmVxdWlyZWQgdG8gYmUgZmlyc3QgaW4gdGhlIG91dGVyIG1hY3Jvcywgd2UKKyMgbXVzdCBrZWVwIHRoZSBleHBhbnNpb25zIG9mIHRoZSB2YXJpb3VzIGxldmVscyBvZiBtNF9yZXF1aXJlIHNlcGFyYXRlZC4KKyMgUmlnaHQgYmVmb3JlIGV4ZWN1dGluZyB0aGUgZXBpbG9ndWUgb2YgVEVTVDEsIHdlIGhhdmU6CisjCisjCSAgIEdST1cgLSAyOiBUZXN0Li4uMworIwkgICBHUk9XIC0gMTogVGVzdC4uLjIKKyMJICAgR1JPVzogICAgIFRlc3QuLi4xCisjCSAgIEJPRFk6CisjCisjIEZpbmFsbHkgdGhlIGVwaWxvZ3VlIG9mIFRFU1QxIHVuZGl2ZXJ0cyBHUk9XIC0gMiwgR1JPVyAtIDEsIGFuZAorIyBHUk9XIGludG8gdGhlIHJlZ3VsYXIgZmxvdywgQk9EWS4KKyMKKyMJICAgR1JPVyAtIDI6CisjCSAgIEdST1cgLSAxOgorIwkgICBHUk9XOgorIwkgICBCT0RZOiAgICAgICAgVGVzdC4uLjM7IFRlc3QuLi4yOyBUZXN0Li4uMQorIworIyAoVGhlIHNlbWljb2xvbnMgYXJlIGhlcmUgZm9yIGNsYXJpZmljYXRpb24sIGJ1dCBvZiBjb3Vyc2UgYXJlIG5vdAorIyBlbWl0dGVkLikgIFRoaXMgaXMgd2hhdCBBdXRvY29uZiAyLjAgKEkgdGhpbmspIHRvIDIuMTMgKEknbSBzdXJlKQorIyBpbXBsZW1lbnQuCisjCisjCisjIFRoZSBzZWNvbmQgaWRlYTogZmlyc3QgcmVxdWlyZWQgZmlyc3Qgb3V0CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIFRoZSBuYXR1cmFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBpZGVhIGFib3ZlIGlzIGJ1Z2d5IGFuZCBwcm9kdWNlcworIyB2ZXJ5IHN1cnByaXNpbmcgcmVzdWx0cyBpbiBzb21lIHNpdHVhdGlvbnMuICBMZXQncyBjb25zaWRlciB0aGUKKyMgZm9sbG93aW5nIGV4YW1wbGUgdG8gZXhwbGFpbiB0aGUgYnVnOgorIworIyB8IG00X2RlZnVuKFtURVNUMV0sICBbbTRfcmVxdWlyZShbVEVTVDJhXSltNF9yZXF1aXJlKFtURVNUMmJdKV0pCisjIHwgbTRfZGVmdW4oW1RFU1QyYV0sIFtdKQorIyB8IG00X2RlZnVuKFtURVNUMmJdLCBbbTRfcmVxdWlyZShbVEVTVDNdKV0pCisjIHwgbTRfZGVmdW4oW1RFU1QzXSwgIFttNF9yZXF1aXJlKFtURVNUMmFdKV0pCisjIHwKKyMgfCBBQ19JTklUCisjIHwgVEVTVDEKKyMKKyMgVGhlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZSBtYWNyb3MgYXJlOgorIworIwkJIDMgLS0tIDJiCisjCQkvICAgICAgICBcICAgICAgICAgICAgICBpcyBtNF9yZXF1aXJlJ2QgYnkKKyMJICAgICAgIC8gICAgICAgICAgXCAgICAgICBsZWZ0IC0tLS0tLS0tLS0tLS0tLS0tLS0tIHJpZ2h0CisjCSAgICAyYSAtLS0tLS0tLS0tLS0gMQorIworIyBJZiB5b3Ugc3RyaWN0bHkgYXBwbHkgdGhlIHJ1bGVzIGdpdmVuIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uIHlvdSBnZXQ6CisjCisjCSAgIEdST1cgLSAyOiBURVNUMworIwkgICBHUk9XIC0gMTogVEVTVDJhOyBURVNUMmIKKyMJICAgR1JPVzogICAgIFRFU1QxCisjCSAgIEJPRFk6CisjCisjIChURVNUMmEsIGFsdGhvdWdoIHJlcXVpcmVkIGJ5IFRFU1QzIGlzIG5vdCBleHBhbmRlZCBpbiBHUk9XIC0gMworIyBiZWNhdXNlIGlzIGhhcyBhbHJlYWR5IGJlZW4gZXhwYW5kZWQgYmVmb3JlIGluIEdST1cgLSAxLCBzbyBpdCBoYXMKKyMgYmVlbiBBQ19QUk9WSURFJ2QsIHNvIGl0IGlzIG5vdCBleHBhbmRlZCBhZ2Fpbikgc28gd2hlbiB5b3UgdW5kaXZlcnQKKyMgdGhlIHN0YWNrIG9mIGRpdmVyc2lvbnMsIHlvdSBnZXQ6CisjCisjCSAgIEdST1cgLSAyOgorIwkgICBHUk9XIC0gMToKKyMJICAgR1JPVzoKKyMJICAgQk9EWTogICAgICAgIFRFU1QzOyBURVNUMmE7IFRFU1QyYjsgVEVTVDEKKyMKKyMgaS5lLiwgVEVTVDJhIGlzIGV4cGFuZGVkIGFmdGVyIFRFU1QzIGFsdGhvdWdoIHRoZSBsYXR0ZXIgcmVxdWlyZWQgdGhlCisjIGZvcm1lci4KKyMKKyMgU3RhcnRpbmcgZnJvbSAyLjUwLCB3ZSB1c2UgYW4gaW1wbGVtZW50YXRpb24gcHJvdmlkZWQgYnkgQXhlbCBUaGltbS4KKyMgVGhlIGlkZWEgaXMgc2ltcGxlOiB0aGUgb3JkZXIgaW4gd2hpY2ggbWFjcm9zIGFyZSBlbWl0dGVkIG11c3QgYmUgdGhlCisjIHNhbWUgYXMgdGhlIG9uZSBpbiB3aGljaCBtYWNyb3MgYXJlIGV4cGFuZGVkLiAgKFRoZSBidWcgYWJvdmUgY2FuCisjIGluZGVlZCBiZSBkZXNjcmliZWQgYXM6IGEgbWFjcm8gaGFzIGJlZW4gbTRfcHJvdmlkZSdkIGJlZm9yZSBpdHMKKyMgZGVwZW5kZW50LCBidXQgaXQgaXMgZW1pdHRlZCBhZnRlcjogdGhlIGxhY2sgb2YgY29ycmVsYXRpb24gYmV0d2VlbgorIyBlbWlzc2lvbiBhbmQgZXhwYW5zaW9uIG9yZGVyIGlzIGd1aWx0eSkuCisjCisjIEhvdyB0byBkbyB0aGF0PyAgWW91IGtlZXAgdGhlIHN0YWNrIG9mIGRpdmVyc2lvbnMgdG8gZWxhYm9yYXRlIHRoZQorIyBtYWNyb3MsIGJ1dCBlYWNoIHRpbWUgYSBtYWNybyBpcyBmdWxseSBleHBhbmRlZCwgZW1pdCBpdCBpbW1lZGlhdGVseS4KKyMKKyMgSW4gdGhlIGV4YW1wbGUgYWJvdmUsIHdoZW4gVEVTVDJhIGlzIGV4cGFuZGVkLCBidXQgaXQncyBlcGlsb2d1ZSBpcworIyBub3QgcnVuIHlldCwgeW91IGhhdmU6CisjCisjCSAgIEdST1cgLSAyOgorIwkgICBHUk9XIC0gMTogVEVTVDJhCisjCSAgIEdST1c6ICAgICBFbGFib3JhdGlvbiBvZiBURVNUMQorIwkgICBCT0RZOgorIworIyBUaGUgZXBpbG9ndWUgb2YgVEVTVDJhIGVtaXRzIGl0IGltbWVkaWF0ZWx5OgorIworIwkgICBHUk9XIC0gMjoKKyMJICAgR1JPVyAtIDE6CisjCSAgIEdST1c6ICAgICBFbGFib3JhdGlvbiBvZiBURVNUMQorIwkgICBCT0RZOiAgICAgVEVTVDJhCisjCisjIFRFU1QyYiB0aGVuIHJlcXVpcmVzIFRFU1QzLCBzbyByaWdodCBiZWZvcmUgdGhlIGVwaWxvZ3VlIG9mIFRFU1QzLCB5b3UKKyMgaGF2ZToKKyMKKyMJICAgR1JPVyAtIDI6IFRFU1QzCisjCSAgIEdST1cgLSAxOiBFbGFib3JhdGlvbiBvZiBURVNUMmIKKyMJICAgR1JPVzogICAgIEVsYWJvcmF0aW9uIG9mIFRFU1QxCisjCSAgIEJPRFk6ICAgICAgVEVTVDJhCisjCisjIFRoZSBlcGlsb2d1ZSBvZiBURVNUMyBlbWl0cyBpdDoKKyMKKyMJICAgR1JPVyAtIDI6CisjCSAgIEdST1cgLSAxOiBFbGFib3JhdGlvbiBvZiBURVNUMmIKKyMJICAgR1JPVzogICAgIEVsYWJvcmF0aW9uIG9mIFRFU1QxCisjCSAgIEJPRFk6ICAgICBURVNUMmE7IFRFU1QzCisjCisjIFRFU1QyYiBpcyBub3cgY29tcGxldGVseSBleHBhbmRlZCwgYW5kIGVtaXR0ZWQ6CisjCisjCSAgIEdST1cgLSAyOgorIwkgICBHUk9XIC0gMToKKyMJICAgR1JPVzogICAgIEVsYWJvcmF0aW9uIG9mIFRFU1QxCisjCSAgIEJPRFk6ICAgICBURVNUMmE7IFRFU1QzOyBURVNUMmIKKyMKKyMgYW5kIGZpbmFsbHksIFRFU1QxIGlzIGZpbmlzaGVkIGFuZCBlbWl0dGVkOgorIworIwkgICBHUk9XIC0gMjoKKyMJICAgR1JPVyAtIDE6CisjCSAgIEdST1c6CisjCSAgIEJPRFk6ICAgICBURVNUMmE7IFRFU1QzOyBURVNUMmI6IFRFU1QxCisjCisjIFRoZSBpZGVhIGlzIHNpbXBsZSwgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBhIGJpdCBpbnZvbHZlZC4gIElmCisjIHlvdSBhcmUgbGlrZSBtZSwgeW91IHdpbGwgd2FudCB0byBzZWUgdGhlIGFjdHVhbCBmdW5jdGlvbmluZyBvZiB0aGlzCisjIGltcGxlbWVudGF0aW9uIHRvIGJlIGNvbnZpbmNlZC4gIFRoZSBuZXh0IHNlY3Rpb24gZ2l2ZXMgdGhlIGZ1bGwKKyMgZGV0YWlscy4KKyMKKyMKKyMgVGhlIEF4ZWwgVGhpbW0gaW1wbGVtZW50YXRpb24gYXQgd29yaworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIFdlIGNvbnNpZGVyIHRoZSBtYWNyb3MgYWJvdmUsIGFuZCB0aGlzIGNvbmZpZ3VyZS5hYzoKKyMKKyMJICAgIEFDX0lOSVQKKyMJICAgIFRFU1QxCisjCisjIFlvdSBzaG91bGQga2VlcCB0aGUgZGVmaW5pdGlvbnMgb2YgX200X2RlZnVuX3BybywgX200X2RlZnVuX2VwaSwgYW5kCisjIG00X3JlcXVpcmUgYXQgaGFuZCB0byBmb2xsb3cgdGhlIHN0ZXBzLgorIworIyBUaGlzIGltcGxlbWVudGF0aW9uIHRyaWVzIG5vdCB0byBhc3N1bWUgdGhhdCB0aGUgY3VycmVudCBkaXZlcnNpb24gaXMKKyMgQk9EWSwgc28gYXMgc29vbiBhcyBhIG1hY3JvIChtNF9kZWZ1bidkKSBpcyBleHBhbmRlZCwgd2UgZmlyc3QKKyMgcmVjb3JkIHRoZSBjdXJyZW50IGRpdmVyc2lvbiB1bmRlciB0aGUgbmFtZSBfbTRfZGl2ZXJ0X2R1bXAgKGRlbm90ZWQKKyMgRFVNUCBiZWxvdyBmb3Igc2hvcnQpLiAgVGhpcyBpbnRyb2R1Y2VzIGFuIGltcG9ydGFudCBkaWZmZXJlbmNlIHdpdGgKKyMgdGhlIHByZXZpb3VzIHZlcnNpb25zIG9mIEF1dG9jb25mOiB5b3UgY2Fubm90IHVzZSBtNF9yZXF1aXJlIGlmIHlvdQorIyBhcmUgbm90IGluc2lkZSBhbiBtNF9kZWZ1bidkIG1hY3JvLCBhbmQgZXNwZWNpYWxseSwgeW91IGNhbm5vdAorIyBtNF9yZXF1aXJlIGRpcmVjdGx5IGZyb20gdGhlIHRvcCBsZXZlbC4KKyMKKyMgV2UgaGF2ZSBub3QgdHJpZWQgdG8gc2ltdWxhdGUgdGhlIG9sZCBiZWhhdmlvciAoYmV0dGVyIHlldCwgd2UKKyMgZGlhZ25vc2UgaXQpLCBiZWNhdXNlIGl0IGlzIHRvbyBkYW5nZXJvdXM6IGEgbWFjcm8gbTRfcmVxdWlyZSdkIGZyb20KKyMgdGhlIHRvcCBsZXZlbCBpcyBleHBhbmRlZCBiZWZvcmUgdGhlIGJvZHkgb2YgYGNvbmZpZ3VyZScsIGkuZS4sIGJlZm9yZQorIyBhbnkgb3RoZXIgdGVzdCB3YXMgcnVuLiAgSSBsZXQgeW91IGltYWdpbmUgdGhlIHJlc3VsdCBvZiByZXF1aXJpbmcKKyMgQUNfU1REQ19IRUFERVJTIGZvciBpbnN0YW5jZSwgYmVmb3JlIEFDX1BST0dfQ0Mgd2FzIGFjdHVhbGx5IHJ1bi4uLi4KKyMKKyMgQWZ0ZXIgQUNfSU5JVCB3YXMgcnVuLCB0aGUgY3VycmVudCBkaXZlcnNpb24gaXMgQk9EWS4KKyMgKiBBQ19JTklUIHdhcyBydW4KKyMgICBEVU1QOiAgICAgICAgICAgICAgICB1bmRlZmluZWQKKyMgICBkaXZlcnNpb24gc3RhY2s6ICAgICBCT0RZIHwtCisjCisjICogVEVTVDEgaXMgZXhwYW5kZWQKKyMgVGhlIHByb2xvZ3VlIG9mIFRFU1QxIHNldHMgX200X2RpdmVydF9kdW1wLCB3aGljaCBpcyB0aGUgZGl2ZXJzaW9uCisjIHdoZXJlIHRoZSBjdXJyZW50IGVsYWJvcmF0aW9uIHdpbGwgYmUgZHVtcGVkLCB0byB0aGUgY3VycmVudAorIyBkaXZlcnNpb24uICBJdCBhbHNvIG00X2RpdmVydF9wdXNoIHRvIEdST1csIHdoZXJlIHRoZSBmdWxsCisjIGV4cGFuc2lvbiBvZiBURVNUMSBhbmQgaXRzIGRlcGVuZGVuY2llcyB3aWxsIGJlIGVsYWJvcmF0ZWQuCisjICAgRFVNUDogICAgICAgIEJPRFkKKyMgICBCT0RZOiAgICAgICAgZW1wdHkKKyMgICBkaXZlcnNpb25zOiAgR1JPVywgQk9EWSB8LQorIworIyAqIFRFU1QxIHJlcXVpcmVzIFRFU1QyYQorIyBfbTRfcmVxdWlyZV9jYWxsIG00X2RpdmVydF9wdXNoZXMgYW5vdGhlciB0ZW1wb3JhcnkgZGl2ZXJzaW9uLAorIyBHUk9XIC0gMSwgYW5kIGV4cGFuZHMgVEVTVDJhIGluIHRoZXJlLgorIyAgIERVTVA6ICAgICAgICBCT0RZCisjICAgQk9EWTogICAgICAgIGVtcHR5CisjICAgR1JPVyAtIDE6ICAgIFRFU1QyYQorIyAgIGRpdmVyc2lvbnM6ICBHUk9XIC0gMSwgR1JPVywgQk9EWSB8LQorIyBUaGVuIHRoZSBjb250ZW50IG9mIHRoZSB0ZW1wb3JhcnkgZGl2ZXJzaW9uIGlzIG1vdmVkIHRvIERVTVAgYW5kIHRoZQorIyB0ZW1wb3JhcnkgZGl2ZXJzaW9uIGlzIHBvcHBlZC4KKyMgICBEVU1QOiAgICAgICAgQk9EWQorIyAgIEJPRFk6ICAgICAgICBURVNUMmEKKyMgICBkaXZlcnNpb25zOiAgR1JPVywgQk9EWSB8LQorIworIyAqIFRFU1QxIHJlcXVpcmVzIFRFU1QyYgorIyBBZ2FpbiwgX200X3JlcXVpcmVfY2FsbCBwdXNoZXMgR1JPVyAtIDEgYW5kIGhlYWRzIHRvIGV4cGFuZCBURVNUMmIuCisjICAgRFVNUDogICAgICAgIEJPRFkKKyMgICBCT0RZOiAgICAgICAgVEVTVDJhCisjICAgZGl2ZXJzaW9uczogIEdST1cgLSAxLCBHUk9XLCBCT0RZIHwtCisjCisjICogVEVTVDJiIHJlcXVpcmVzIFRFU1QzCisjIF9tNF9yZXF1aXJlX2NhbGwgcHVzaGVzIEdST1cgLSAyIGFuZCBleHBhbmRzIFRFU1QzIGhlcmUuCisjIChURVNUMyByZXF1aXJlcyBURVNUMmEsIGJ1dCBURVNUMmEgaGFzIGFscmVhZHkgYmVlbiBtNF9wcm92aWRlJ2QsIHNvCisjIG5vdGhpbmcgaGFwcGVucy4pCisjICAgRFVNUDogICAgICAgIEJPRFkKKyMgICBCT0RZOiAgICAgICAgVEVTVDJhCisjICAgR1JPVyAtIDI6ICAgIFRFU1QzCisjICAgZGl2ZXJzaW9uczogIEdST1cgLSAyLCBHUk9XIC0gMSwgR1JPVywgQk9EWSB8LQorIyBUaGVuIHRoZSBkaXZlcnNpb24gaXMgYXBwZW5kZWQgdG8gRFVNUCwgYW5kIHBvcHBlZC4KKyMgICBEVU1QOiAgICAgICAgQk9EWQorIyAgIEJPRFk6ICAgICAgICBURVNUMmE7IFRFU1QzCisjICAgZGl2ZXJzaW9uczogIEdST1cgLSAxLCBHUk9XLCBCT0RZIHwtCisjCisjICogVEVTVDEgcmVxdWlyZXMgVEVTVDJiIChjb250ZC4pCisjIFRoZSBjb250ZW50IG9mIFRFU1QyYiBpcyBleHBhbmRlZC4uLgorIyAgIERVTVA6ICAgICAgICBCT0RZCisjICAgQk9EWTogICAgICAgIFRFU1QyYTsgVEVTVDMKKyMgICBHUk9XIC0gMTogICAgVEVTVDJiLAorIyAgIGRpdmVyc2lvbnM6ICBHUk9XIC0gMSwgR1JPVywgQk9EWSB8LQorIyAuLi4gYW5kIG1vdmVkIHRvIERVTVAuCisjICAgRFVNUDogICAgICAgIEJPRFkKKyMgICBCT0RZOiAgICAgICAgVEVTVDJhOyBURVNUMzsgVEVTVDJiCisjICAgZGl2ZXJzaW9uczogIEdST1csIEJPRFkgfC0KKyMKKyMgKiBURVNUMSBpcyBleHBhbmRlZDogZXBpbG9ndWUKKyMgVEVTVDEncyBvd24gY29udGVudCBpcyBpbiBHUk9XLi4uCisjICAgRFVNUDogICAgICAgIEJPRFkKKyMgICBCT0RZOiAgICAgICAgVEVTVDJhOyBURVNUMzsgVEVTVDJiCisjICAgR1JPVzogICAgICAgIFRFU1QxCisjICAgZGl2ZXJzaW9uczogIEJPRFkgfC0KKyMgLi4uIGFuZCBpdCdzIGVwaWxvZ3VlIG1vdmVzIGl0IHRvIERVTVAgYW5kIHRoZW4gdW5kZWZpbmVzIERVTVAuCisjICAgRFVNUDogICAgICAgdW5kZWZpbmVkCisjICAgQk9EWTogICAgICAgVEVTVDJhOyBURVNUMzsgVEVTVDJiOyBURVNUMQorIyAgIGRpdmVyc2lvbnM6IEJPRFkgfC0KKyMKKyMKKyMgVGhlIHRoaXJkIGlkZWE6IHRyYWNrIG1hY3JvcyBwcm92aWRlZCBiZWZvcmUgdGhleSB3ZXJlIHJlcXVpcmVkCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBVc2luZyBqdXN0IHRoZSBmaXJzdCB0d28gaWRlYXMsIEF1dG9jb25mIDIuNTAgdGhyb3VnaCAyLjYzIHN0aWxsIGhhZAorIyBhIHN1YnRsZSBidWcgZm9yIG1vcmUgdGhhbiBzZXZlbiB5ZWFycy4gIExldCdzIGNvbnNpZGVyIHRoZQorIyBmb2xsb3dpbmcgZXhhbXBsZSB0byBleHBsYWluIHRoZSBidWc6CisjCisjIHwgbTRfZGVmdW4oW1RFU1QxXSwgWzFdKQorIyB8IG00X2RlZnVuKFtURVNUMl0sIFsyW11tNF9yZXF1aXJlKFtURVNUMV0pXSkKKyMgfCBtNF9kZWZ1bihbVEVTVDNdLCBbMyBURVNUMSBtNF9yZXF1aXJlKFtURVNUMl0pXSkKKyMgfCBURVNUMworIworIyBBZnRlciB0aGUgcHJvbG9ndWUgb2YgVEVTVDMsIHdlIGFyZSBjb2xsZWN0aW5nIHRleHQgaW4gR1JPVyB3aXRoIHRoZQorIyBpbnRlbnQgb2YgZHVtcGluZyBpdCBpbiBCT0RZIGR1cmluZyB0aGUgZXBpbG9ndWUuICBOZXh0LCB3ZQorIyBlbmNvdW50ZXIgdGhlIGRpcmVjdCBpbnZvY2F0aW9uIG9mIFRFU1QxLCB3aGljaCBwcm92aWRlcyB0aGUgbWFjcm8KKyMgaW4gcGxhY2UgaW4gR1JPVy4gIEZyb20gdGhlcmUsIHdlIGVuY291bnRlciBhIHJlcXVpcmVtZW50IGZvciBURVNUMiwKKyMgd2hpY2ggbXVzdCBiZSBjb2xsZWN0ZWQgaW4gYSBuZXcgZGl2ZXJzaW9uLiAgV2hpbGUgZXhwYW5kaW5nIFRFU1QyLAorIyB3ZSBlbmNvdW50ZXIgYSByZXF1aXJlbWVudCBmb3IgVEVTVDEsIGJ1dCBzaW5jZSBpdCBoYXMgYWxyZWFkeSBiZWVuCisjIGV4cGFuZGVkLCB0aGUgQXhlbCBUaGltbSBhbGdvcml0aG0gc3RhdGVzIHRoYXQgd2UgY2FuIHRyZWF0IGl0IGFzIGEKKyMgbm8tb3AuICBCdXQgdGhhdCB3b3VsZCBsZWFkIHRvIGFuIGVuZCByZXN1bHQgb2YgYDIgMyAxJywgbWVhbmluZworIyB0aGF0IHdlIGhhdmUgb25jZSBhZ2FpbiBvdXRwdXQgYSBtYWNybyAoVEVTVDIpIHByaW9yIHRvIGl0cworIyByZXF1aXJlbWVudHMgKFRFU1QxKS4KKyMKKyMgVGhlIHByb2JsZW0gY2FuIG9ubHkgb2NjdXIgaWYgYSBzaW5nbGUgZGVmdW4nZCBtYWNybyBmaXJzdCBwcm92aWRlcywKKyMgdGhlbiBsYXRlciBpbmRpcmVjdGx5IHJlcXVpcmVzLCB0aGUgc2FtZSBtYWNyby4gIE5vdGUgdGhhdCBkaXJlY3RseQorIyBleHBhbmRpbmcgdGhlbiByZXF1aXJpbmcgYSBtYWNybyBpcyBva2F5OiBiZWNhdXNlIHRoZSBkZXBlbmRlbmN5IHdhcworIyBtZXQsIHRoZSByZXF1aXJlIHBoYXNlIGNhbiBiZSBhIG5vLW9wLiAgRm9yIHRoYXQgbWF0dGVyLCB0aGUgb3V0ZXIKKyMgbWFjcm8gY2FuIGV2ZW4gcmVxdWlyZSB0d28gaGVscGVycywgd2hlcmUgdGhlIGZpcnN0IGhlbHBlciBleHBhbmRzCisjIHRoZSBtYWNybywgYW5kIHRoZSBzZWNvbmQgaGVscGVyIGluZGlyZWN0bHkgcmVxdWlyZXMgdGhlIG1hY3JvLgorIyBPdXQtb2Ytb3JkZXIgZXhwYW5zaW9uIGlzIG9ubHkgcHJlc2VudCBpZiB0aGUgaW5uZXIgbWFjcm8gaXMKKyMgcmVxdWlyZWQgYnkgc29tZXRoaW5nIHRoYXQgd2lsbCBiZSBob2lzdGVkIGluIGZyb250IG9mIHdoZXJlIHRoZQorIyBkaXJlY3QgZXhwYW5zaW9uIG9jY3VycmVkLiAgSW4gb3RoZXIgd29yZHMsIHdlIG11c3QgYmUgY2FyZWZ1bCBub3QKKyMgdG8gd2FybiBvbjoKKyMKKyMgfCBtNF9kZWZ1bihbVEVTVDRdLCBbNF0pCisjIHwgbTRfZGVmdW4oW1RFU1Q1XSwgWzUgVEVTVDQgbTRfcmVxdWlyZShbVEVTVDRdKV0pCisjIHwgVEVTVDUgPT4gNSA0CisjCisjIG9yIGV2ZW4gdGhlIG1vcmUgY29tcGxleDoKKyMKKyMgfCBtNF9kZWZ1bihbVEVTVDZdLCBbNl0pCisjIHwgbTRfZGVmdW4oW1RFU1Q3XSwgWzcgVEVTVDZdKQorIyB8IG00X2RlZnVuKFtURVNUOF0sIFs4IG00X3JlcXVpcmUoW1RFU1Q2XSldKQorIyB8IG00X2RlZnVuKFtURVNUOV0sIFs5IG00X3JlcXVpcmUoW1RFU1Q4XSldKQorIyB8IG00X2RlZnVuKFtURVNUMTBdLCBbMTAgbTRfcmVxdWlyZShbVEVTVDddKSBtNF9yZXF1aXJlKFtURVNUOV0pXSkKKyMgfCBURVNUMTAgPT4gNyA2IDggOSAxMAorIworIyBTbywgdG8gZGV0ZWN0IHdoZXRoZXIgYSByZXF1aXJlIHdhcyBkaXJlY3Qgb3IgaW5kaXJlY3QsIG00X2RlZnVuIGFuZAorIyBtNF9yZXF1aXJlIHRyYWNrIHRoZSBuYW1lIG9mIHRoZSBtYWNybyB0aGF0IGNhdXNlZCBhIGRpdmVyc2lvbiB0byBiZQorIyBjcmVhdGVkICh1c2luZyB0aGUgc3RhY2sgX200X2RpdmVydGluZywgY291cGxlZCB3aXRoIGFuIE8oMSkgbG9va3VwCisjIF9tNF9kaXZlcnRpbmcoW05BTUVdKSksIGFuZCBtNF9wcm92aWRlIHN0b3JlcyB0aGUgbmFtZSBhc3NvY2lhdGVkCisjIHdpdGggdGhlIGRpdmVyc2lvbiBhdCB3aGljaCBhIG1hY3JvIHdhcyBwcm92aWRlZC4gIEEgcmVxdWlyZSBjYWxsIGlzCisjIGRpcmVjdCBpZiBpdCBvY2N1cnMgd2l0aGluIHRoZSBzYW1lIGRpdmVyc2lvbiB3aGVyZSB0aGUgbWFjcm8gd2FzCisjIHByb3ZpZGVkLCBvciBpZiB0aGUgZGl2ZXJzaW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvdmlkaW5nIGNvbnRleHQKKyMgaGFzIGJlZW4gY29sbGVjdGVkLgorIworIyBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHdhcm5pbmcgaW52b2x2ZXMgdHJhY2tpbmcgdGhlIHNldCBvZgorIyBtYWNyb3Mgd2hpY2ggaGF2ZSBiZWVuIHByb3ZpZGVkIHNpbmNlIHRoZSBzdGFydCBvZiB0aGUgb3V0ZXJtb3N0CisjIGRlZnVuJ2QgbWFjcm8gKHRoZSBzZXQgaXMgbmFtZWQgX200X3Byb3ZpZGUpLiAgV2hlbiBzdGFydGluZyBhbgorIyBvdXRlcm1vc3QgbWFjcm8sIHRoZSBzZXQgaXMgZW1wdGllZDsgd2hlbiBhIG1hY3JvIGlzIHByb3ZpZGVkLCBpdCBpcworIyBhZGRlZCB0byB0aGUgc2V0OyB3aGVuIHJlcXVpcmUgZXhwYW5kcyB0aGUgYm9keSBvZiBhIG1hY3JvLCBpdCBpcworIyByZW1vdmVkIGZyb20gdGhlIHNldDsgYW5kIHdoZW4gYSBtYWNybyBpcyBpbmRpcmVjdGx5IHJlcXVpcmVkLCB0aGUKKyMgc2V0IGlzIGNoZWNrZWQuICBJZiBhIG1hY3JvIGlzIGluIHRoZSBzZXQsIHRoZW4gaXQgaGFzIGJlZW4gcHJvdmlkZWQKKyMgYmVmb3JlIGl0IHdhcyByZXF1aXJlZCwgYW5kIHdlIHNhdGlzZnkgZGVwZW5kZW5jaWVzIGJ5IGV4cGFuZGluZyB0aGUKKyMgbWFjcm8gYXMgaWYgaXQgaGFkIG5ldmVyIGJlZW4gcHJvdmlkZWQ7IGluIHRoZSBleGFtcGxlIGdpdmVuIGFib3ZlLAorIyB0aGlzIG1lYW5zIHdlIG5vdyBvdXRwdXQgYDEgMiAzIDEnLiAgTWVhbndoaWxlLCBhIHdhcm5pbmcgaXMgaXNzdWVkCisjIHRvIGluZm9ybSB0aGUgdXNlciB0aGF0IGhlciBtYWNyb3MgdHJpZ2dlciB0aGUgYnVnIGluIG9sZGVyIGF1dG9jb25mCisjIHZlcnNpb25zLCBhbmQgdGhhdCBoZXIgb3V0cHV0IGZpbGUgbm93IGNvbnRhaW5zIHJlZHVuZGFudCBjb250ZW50cworIyAoYW5kIHBvc3NpYmx5IG5ldyBwcm9ibGVtcywgaWYgdGhlIHJlcGVhdGVkIG1hY3JvIHdhcyBub3QKKyMgaWRlbXBvdGVudCkuICBNZWFud2hpbGUsIG1hY3JvcyBkZWZpbmVkIGJ5IG00X2RlZnVuX29uY2UgaW5zdGVhZCBvZgorIyBtNF9kZWZ1biBhcmUgaWRlbXBvdGVudCwgYXZvaWRpbmcgYW55IHdhcm5pbmcgb3IgZHVwbGljYXRlIG91dHB1dC4KKyMKKyMKKyMgMi4gS2VlcGluZyB0cmFjayBvZiB0aGUgZXhwYW5zaW9uIHN0YWNrCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBXaGVuIE00IGV4cGFuc2lvbiBnb2VzIHdyb25nIGl0IGlzIG9mdGVuIGV4dHJlbWVseSBoYXJkIHRvIGZpbmQgdGhlCisjIHBhdGggYW1vbmdzdCBtYWNyb3MgdGhhdCBkcm92ZSB0byB0aGUgZmFpbHVyZS4gIFdoYXQgaXMgbmVlZGVkIGlzCisjIHRoZSBzdGFjayBvZiBtYWNybyBgY2FsbHMnLiBPbmUgY291bGQgaW1hZ2luZSB0aGF0IEdOVSBNNCB3b3VsZAorIyBtYWludGFpbiBhIHN0YWNrIG9mIG1hY3JvIGV4cGFuc2lvbnMsIHVuZm9ydHVuYXRlbHkgaXQgZG9lc24ndCwgc28KKyMgd2UgZG8gaXQgYnkgaGFuZC4gIFRoaXMgaXMgb2YgY291cnNlIGV4dHJlbWVseSBjb3N0bHksIGJ1dCB0aGUgaGVscAorIyB0aGlzIHN0YWNrIHByb3ZpZGVzIGlzIHdvcnRoIGl0LiAgTmV2ZXJ0aGVsZXNzIHRvIGxpbWl0IHRoZQorIyBwZXJmb3JtYW5jZSBwZW5hbHR5IHRoaXMgaXMgaW1wbGVtZW50ZWQgb25seSBmb3IgbTRfZGVmdW4nZCBtYWNyb3MsCisjIG5vdCBmb3IgZGVmaW5lJ2QgbWFjcm9zLgorIworIyBFYWNoIHRpbWUgd2UgZW50ZXIgYW4gbTRfZGVmdW4nZCBtYWNyb3MsIHdlIGFkZCBhIGRlZmluaXRpb24gaW4KKyMgX200X2V4cGFuc2lvbl9zdGFjaywgYW5kIHdoZW4gd2UgZXhpdCB0aGUgbWFjcm8sIHdlIHJlbW92ZSBpdCAodGhhbmtzCisjIHRvIHB1c2hkZWYvcG9wZGVmKS4gIG00X3N0YWNrX2ZvcmVhY2ggaXMgdXNlZCB0byBwcmludCB0aGUgZXhwYW5zaW9uCisjIHN0YWNrIGluIHRoZSByYXJlIGNhc2VzIHdoZW4gaXQncyBuZWVkZWQuCisjCisjIEluIGFkZGl0aW9uLCB3ZSB3YW50IHRvIGRldGVjdCBjaXJjdWxhciBtNF9yZXF1aXJlIGRlcGVuZGVuY2llcy4KKyMgRWFjaCB0aW1lIHdlIGV4cGFuZCBhIG1hY3JvIEZPTyB3ZSBkZWZpbmUgX200X2V4cGFuZGluZyhGT08pOyBhbmQKKyMgbTRfcmVxdWlyZShCQVIpIHNpbXBseSBjaGVja3Mgd2hldGhlciBfbTRfZXhwYW5kaW5nKEJBUikgaXMgZGVmaW5lZC4KKworCisjIG00X2V4cGFuc2lvbl9zdGFjaworIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhwYW5kcyB0byB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBleHBhbnNpb24gc3RhY2suICBUaGUgY2FsbGVyCisjIG11c3Qgc3VwcGx5IGEgdHJhaWxpbmcgbmV3bGluZS4gIFRoaXMgbWFjcm8gYWx3YXlzIHByaW50cyBhCisjIGxvY2F0aW9uOyBjaGVjayB3aGV0aGVyIF9tNF9leHBhbnNpb25fc3RhY2sgaXMgZGVmaW5lZCB0byBmaWx0ZXIgb3V0CisjIHRoZSBjYXNlIHdoZW4gbm8gZGVmdW4nZCBtYWNybyBpcyBpbiBmb3JjZS4KK200X2RlZmluZShbbTRfZXhwYW5zaW9uX3N0YWNrXSwKK1ttNF9zdGFja19mb3JlYWNoX3NlcF9saWZvKFtfJDBdLCBbXyQwX2VudHJ5KF0sIFspCitdKW00X2xvY2F0aW9uWzogdGhlIHRvcCBsZXZlbF1dKQorCisjIF9tNF9leHBhbnNpb25fc3RhY2tfZW50cnkoTUFDUk8pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZvcm1hdCBhbiBlbnRyeSBmb3IgTUFDUk8gZm91bmQgb24gdGhlIGV4cGFuc2lvbiBzdGFjay4KK200X2RlZmluZShbX200X2V4cGFuc2lvbl9zdGFja19lbnRyeV0sCitbX200X2RlZm4oW200X2xvY2F0aW9uKCQxKV0pWzogJDEgaXMgZXhwYW5kZWQgZnJvbS4uLl1dKQorCisjIG00X2V4cGFuc2lvbl9zdGFja19wdXNoKE1BQ1JPKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRm9ybSBhbiBlbnRyeSBvZiB0aGUgZXhwYW5zaW9uIHN0YWNrIG9uIGVudHJ5IHRvIE1BQ1JPIGFuZCBwdXNoIGl0LgorbTRfZGVmaW5lKFttNF9leHBhbnNpb25fc3RhY2tfcHVzaF0sCitbbTRfcHVzaGRlZihbX200X2V4cGFuc2lvbl9zdGFja10sIFskMV0pXSkKKworCisjIF9tNF9kaXZlcnQoR1JPVykKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIGRpdmVyc2lvbiBpcyB1c2VkIGJ5IHRoZSBtNF9kZWZ1bi9tNF9yZXF1aXJlIG1hY2hpbmVyeS4gIEl0IGlzCisjIGltcG9ydGFudCB0byBrZWVwIHJvb20gYmVmb3JlIEdST1cgYmVjYXVzZSBmb3IgZWFjaCBuZXN0ZWQKKyMgQUNfUkVRVUlSRSB3ZSB1c2UgYW4gYWRkaXRpb25hbCBkaXZlcnNpb24gKGkuZS4sIHR3byBtNF9yZXF1aXJlJ3MKKyMgd2lsbCB1c2UgR1JPVyAtIDIuICBNb3JlIHRoYW4gMyBsZXZlbHMgaGFzIG5ldmVyIHNlZW1lZCB0byBiZQorIyBuZWVkZWQuKQorIworIyAuLi4KKyMgLSBHUk9XIC0gMgorIyAgIG00X3JlcXVpcmUnZCBjb2RlLCAyIGxldmVsIGRlZXAKKyMgLSBHUk9XIC0gMQorIyAgIG00X3JlcXVpcmUnZCBjb2RlLCAxIGxldmVsIGRlZXAKKyMgLSBHUk9XCisjICAgbTRfZGVmdW4nZCBtYWNyb3MgYXJlIGVsYWJvcmF0ZWQgaGVyZS4KKworbTRfZGVmaW5lKFtfbTRfZGl2ZXJ0KEdST1cpXSwgICAgICAgMTAwMDApCisKKworIyBfbTRfZGVmdW5fcHJvKE1BQ1JPLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhlIHByb2xvZ3VlIGZvciBBdXRvY29uZiBtYWNyb3MuCisjCisjIFRoaXMgaXMgY2FsbGVkIGZyZXF1ZW50bHksIHNvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgbWFjcm8gaW52b2NhdGlvbnMKKyMgYnkgYXZvaWRpbmcgZG5sIGFuZCBtNF9kZWZuIG92ZXJoZWFkLgorbTRfZGVmaW5lKFtfbTRfZGVmdW5fcHJvXSwKK1ttNF9pZmRlZihbX200X2V4cGFuc2lvbl9zdGFja10sIFtdLCBbX200X2RlZnVuX3Byb19vdXRlcihbJDFdKV0pXWRubAorW200X2V4cGFuc2lvbl9zdGFja19wdXNoKFskMV0pbTRfcHVzaGRlZihbX200X2V4cGFuZGluZygkMSldKV0pCisKK200X2RlZmluZShbX200X2RlZnVuX3Byb19vdXRlcl0sCitbbTRfc2V0X2RlbGV0ZShbX200X3Byb3ZpZGVdKV1kbmwKK1ttNF9wdXNoZGVmKFtfbTRfZGl2ZXJ0aW5nKFskMV0pXSltNF9wdXNoZGVmKFtfbTRfZGl2ZXJ0aW5nXSwgWyQxXSldZG5sCitbbTRfcHVzaGRlZihbX200X2RpdmVydF9kdW1wXSwgbTRfZGl2bnVtKW00X2RpdmVydF9wdXNoKFtHUk9XXSldKQorCisjIF9tNF9kZWZ1bl9lcGkoTUFDUk8tTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGUgRXBpbG9ndWUgZm9yIEF1dG9jb25mIG1hY3Jvcy4gIE1BQ1JPLU5BTUUgb25seSBoZWxwcyB0cmFjaW5nCisjIHRoZSBQUk8vRVBJIHBhaXJzLgorIworIyBUaGlzIGlzIGNhbGxlZCBmcmVxdWVudGx5LCBzbyBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIG1hY3JvIGludm9jYXRpb25zCisjIGJ5IGF2b2lkaW5nIGRubCBhbmQgbTRfcG9wZGVmIG92ZXJoZWFkLgorbTRfZGVmaW5lKFtfbTRfZGVmdW5fZXBpXSwKK1tfbTRfcG9wZGVmKFtfbTRfZXhwYW5kaW5nKCQxKV0sIFtfbTRfZXhwYW5zaW9uX3N0YWNrXSldZG5sCitbbTRfaWZkZWYoW19tNF9leHBhbnNpb25fc3RhY2tdLCBbXSwgW19tNF9kZWZ1bl9lcGlfb3V0ZXIoWyQxXSldKV1kbmwKK1ttNF9wcm92aWRlKFskMV0pXSkKKworbTRfZGVmaW5lKFtfbTRfZGVmdW5fZXBpX291dGVyXSwKK1tfbTRfcG9wZGVmKFtfbTRfZGl2ZXJ0X2R1bXBdLCBbX200X2RpdmVydGluZyhbJDFdKV0sIFtfbTRfZGl2ZXJ0aW5nXSldZG5sCitbbTRfZGl2ZXJ0X3BvcChbR1JPV10pbTRfdW5kaXZlcnQoW0dST1ddKV0pCisKKworIyBfbTRfZGl2ZXJ0X2R1bXAKKyMgLS0tLS0tLS0tLS0tLS0tCisjIElmIGJsYW5rLCB3ZSBhcmUgb3V0c2lkZSBvZiBhbnkgZGVmdW4nZCBtYWNyby4gIE90aGVyd2lzZSwgZXhwYW5kcworIyB0byB0aGUgZGl2ZXJzaW9uIG51bWJlciAobm90IG5hbWUpIHdoZXJlIHJlcXVpcmUnZCBtYWNyb3Mgc2hvdWxkIGJlCisjIG1vdmVkIG9uY2UgY29tcGxldGVkLgorbTRfZGVmaW5lKFtfbTRfZGl2ZXJ0X2R1bXBdKQorCisKKyMgbTRfZGl2ZXJ0X3JlcXVpcmUoRElWRVJTSU9OLCBOQU1FLVRPLUNIRUNLLCBbQk9EWS1UTy1FWFBBTkRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTYW1lIGFzIG00X3JlcXVpcmUsIGJ1dCBCT0RZLVRPLUVYUEFORCBnb2VzIGludG8gdGhlIG5hbWVkIERJVkVSU0lPTjsKKyMgcmVxdWlyZW1lbnRzIHN0aWxsIGdvIGluIHRoZSBjdXJyZW50IGRpdmVyc2lvbiB0aG91Z2guCisjCittNF9kZWZpbmUoW200X2RpdmVydF9yZXF1aXJlXSwKK1ttNF9pZmRlZihbX200X2V4cGFuZGluZygkMildLAorICBbbTRfZmF0YWwoWyQwOiBjaXJjdWxhciBkZXBlbmRlbmN5IG9mICQyXSldKV1kbmwKK1ttNF9pZihfbTRfZGl2ZXJ0X2R1bXAsIFtdLAorICBbbTRfZmF0YWwoWyQwKCQyKTogY2Fubm90IGJlIHVzZWQgb3V0c2lkZSBvZiBhbiBtNF9kZWZ1bidkIG1hY3JvXSldKV1kbmwKK1ttNF9wcm92aWRlX2lmKFskMl0sIFtdLAorICBbX200X3JlcXVpcmVfY2FsbChbJDJdLCBbJDNdLCBfbTRfZGl2ZXJ0KFskMV0pKV0pXSkKKworCisjIG00X2RlZnVuKE5BTUUsIEVYUEFOU0lPTiwgW01BQ1JPID0gbTRfZGVmaW5lXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgYSBtYWNybyBOQU1FIHdoaWNoIGF1dG9tYXRpY2FsbHkgcHJvdmlkZXMgaXRzZWxmLiAgQWRkCisjIG1hY2hpbmVyeSBzbyB0aGUgbWFjcm8gYXV0b21hdGljYWxseSBzd2l0Y2hlcyBleHBhbnNpb24gdG8gdGhlCisjIGRpdmVyc2lvbiBzdGFjayBpZiBpdCBpcyBub3QgYWxyZWFkeSB1c2luZyBpdCwgcHJpb3IgdG8gRVhQQU5TSU9OLgorIyBJbiB0aGlzIGNhc2UsIG9uY2UgZmluaXNoZWQsIGl0IHdpbGwgYnJpbmcgYmFjayBhbGwgdGhlIGNvZGUKKyMgYWNjdW11bGF0ZWQgaW4gdGhlIGRpdmVyc2lvbiBzdGFjay4gIFRoaXMsIGNvbWJpbmVkIHdpdGggbTRfcmVxdWlyZSwKKyMgYWNoaWV2ZXMgdGhlIHRvcG9sb2dpY2FsIG9yZGVyaW5nIG9mIG1hY3Jvcy4gIFdlIGRvbid0IHVzZSB0aGlzCisjIG1hY3JvIHRvIGRlZmluZSBzb21lIGZyZXF1ZW50bHkgY2FsbGVkIG1hY3JvcyB0aGF0IGFyZSBub3QgaW52b2x2ZWQKKyMgaW4gb3JkZXJpbmcgY29uc3RyYWludHMsIHRvIHNhdmUgbTQgcHJvY2Vzc2luZy4KKyMKKyMgTUFDUk8gaXMgYW4gdW5kb2N1bWVudGVkIGFyZ3VtZW50OyB3aGVuIHNldCB0byBtNF9wdXNoZGVmLCBhbmQgTkFNRQorIyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZSBuZXcgZGVmaW5pdGlvbiBpcyBhZGRlZCB0byB0aGUgcHVzaGRlZgorIyBzdGFjaywgcmF0aGVyIHRoYW4gb3ZlcndyaXRpbmcgdGhlIGN1cnJlbnQgZGVmaW5pdGlvbi4gIEl0IGNhbiB0aHVzCisjIGJlIHVzZWQgdG8gd3JpdGUgc2VsZi1tb2RpZnlpbmcgbWFjcm9zLCB3aGljaCBwb3AgdGhlbXNlbHZlcyB0byBhCisjIHByZXZpb3VzbHkgbTRfZGVmaW5lJ2QgZGVmaW5pdGlvbiBzbyB0aGF0IHN1YnNlcXVlbnQgdXNlIG9mIHRoZQorIyBtYWNybyBpcyBmYXN0ZXIuCittNF9kZWZpbmUoW200X2RlZnVuXSwKK1ttNF9kZWZpbmUoW200X2xvY2F0aW9uKCQxKV0sIG00X2xvY2F0aW9uKV1kbmwKK1ttNF9kZWZhdWx0KFskM10sIFttNF9kZWZpbmVdKShbJDFdLAorICBbX200X2RlZnVuX3BybyhdbTRfZHF1b3RlKCRbMF0pWykkMltdX200X2RlZnVuX2VwaShdbTRfZHF1b3RlKCRbMF0pWyldKV0pCisKKworIyBtNF9kZWZ1bl9pbml0KE5BTUUsIElOSVQsIENPTU1PTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpa2UgbTRfZGVmdW4sIGJ1dCBzcGxpdCBFWFBBTlNJT04gaW50byB0d28gcG9ydGlvbnM6IElOSVQgd2hpY2ggaXMKKyMgZG9uZSBvbmx5IHRoZSBmaXJzdCB0aW1lIE5BTUUgaXMgaW52b2tlZCwgYW5kIENPTU1PTiB3aGljaCBpcworIyBleHBhbmRlZCBldmVyeSB0aW1lLgorIworIyBGb3Igbm93LCB0aGUgQ09NTU9OIGRlZmluaXRpb24gaXMgYWx3YXlzIG00X2RlZmluZSdkLCBnaXZpbmcgYW4gZXZlbgorIyBsaWdodGVyLXdlaWdodCBkZWZpbml0aW9uLiAgbTRfZGVmdW4gYWxsb3dzIHNlbGYtcHJvdmlkaW5nLCBidXQgb25jZQorIyBhIG1hY3JvIGlzIHByb3ZpZGVkLCBtNF9yZXF1aXJlIG5vIGxvbmdlciBjYXJlcyBpZiBpdCBpcyBtNF9kZWZpbmUnZAorIyBvciBtNF9kZWZ1bidkLiAgbTRfZGVmdW4gYWxzbyBwcm92aWRlcyBsb2NhdGlvbiB0cmFja2luZyB0byBpZGVudGlmeQorIyBkZXBlbmRlbmN5IGJ1Z3MsIGJ1dCBvbmNlIHRoZSBJTklUIGhhcyBiZWVuIGV4cGFuZGVkLCB3ZSBrbm93IHRoZXJlCisjIGFyZSBubyBkZXBlbmRlbmN5IGJ1Z3MuICBIb3dldmVyLCBpZiBhIGZ1dHVyZSB1c2UgbmVlZHMgQ09NTU9OIHRvIGJlCisjIG00X2RlZnVuJ2QsIHdlIGNhbiBhZGQgYSBwYXJhbWV0ZXIsIHNpbWlsYXIgdG8gdGhlIHRoaXJkIHBhcmFtZXRlcgorIyB0byBtNF9kZWZ1bi4KK200X2RlZmluZShbbTRfZGVmdW5faW5pdF0sCitbbTRfZGVmaW5lKFskMV0sIFskM10pbTRfZGVmdW4oWyQxXSwKKyAgIFskMltdX200X3BvcGRlZihdbTRfZHF1b3RlKCRbMF0pWyltNF9pbmRpcihdbTRfZHF1b3RlKCRbMF0pZG5sCitbbTRfaWYoXW00X2RxdW90ZSgkWyNdKVssIFswXSwgW10sIF1tNF9kcXVvdGUoWywkXUApWykpXSwgW200X3B1c2hkZWZdKV0pCisKKworIyBtNF9kZWZ1bl9vbmNlKE5BTUUsIEVYUEFOU0lPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpa2UgbTRfZGVmdW4sIGJ1dCBndWFyYW50ZWUgdGhhdCBFWFBBTlNJT04gb25seSBoYXBwZW5zIG9uY2UKKyMgKHRoZXJlYWZ0ZXIsIHVzaW5nIE5BTUUgaXMgYSBuby1vcCkuCisjCisjIElmIF9tNF9kaXZlcnRfZHVtcCBpcyBlbXB0eSwgd2UgYXJlIGNhbGxlZCBhdCB0aGUgdG9wIGxldmVsOworIyBvdGhlcndpc2UsIHdlIG11c3QgZW5zdXJlIHRoYXQgd2UgYXJlIHJlcXVpcmVkIGluIGZyb250IG9mIHRoZQorIyBjdXJyZW50IGRlZnVuJ2QgbWFjcm8uICBVc2UgYSBoZWxwZXIgbWFjcm8gc28gdGhhdCBFWFBBTlNJT04gbmVlZAorIyBvbmx5IG9jY3VyIG9uY2UgaW4gdGhlIGRlZmluaXRpb24gb2YgTkFNRSwgc2luY2UgaXQgbWlnaHQgYmUgbGFyZ2UuCittNF9kZWZpbmUoW200X2RlZnVuX29uY2VdLAorW200X2RlZmluZShbbTRfbG9jYXRpb24oJDEpXSwgbTRfbG9jYXRpb24pXWRubAorW200X2RlZmluZShbJDFdLCBbX200X2RlZnVuX29uY2UoWyQxXSwgWyQyXSwgbTRfaWYoX200X2RpdmVydF9kdW1wLCBbXSwKKyAgW1tfbTRfZGVmdW5fcHJvKFskMV0pbTRfdW5xdW90ZShdLCBbKV9tNF9kZWZ1bl9lcGkoWyQxXSldXSwKK200X2lmZGVmKFtfbTRfZGl2ZXJ0aW5nKFskMV0pXSwgWy1dKSwgWy1dLCBbW200X3VucXVvdGUoXSwgWyldXSwKKyAgW1tfbTRfcmVxdWlyZV9jYWxsKFskMV0sXSwgWywgX200X2RpdmVydF9kdW1wKV1dKSldKV0pCisKK200X2RlZmluZShbX200X2RlZnVuX29uY2VdLAorW200X3B1c2hkZWYoWyQxXSkkM1skMltdbTRfcHJvdmlkZShbJDFdKV0kNF0pCisKKworIyBtNF9wYXR0ZXJuX2ZvcmJpZChFUkUsIFtXSFldKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWNsYXJlIHRoYXQgbm8gdG9rZW4gbWF0Y2hpbmcgdGhlIGZvcmJpZGRlbiBleHRlbmRlZCByZWd1bGFyCisjIGV4cHJlc3Npb24gRVJFIHNob3VsZCBiZSBzZWVuIGluIHRoZSBvdXRwdXQgdW5sZXNzLi4uCittNF9kZWZpbmUoW200X3BhdHRlcm5fZm9yYmlkXSwgW10pCisKKworIyBtNF9wYXR0ZXJuX2FsbG93KEVSRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIC4uLiB0aGF0IHRva2VuIGFsc28gbWF0Y2hlcyB0aGUgYWxsb3dlZCBleHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24gRVJFLgorIyBCb3RoIHVzZWQgdmlhIHRyYWNlcy4KK200X2RlZmluZShbbTRfcGF0dGVybl9hbGxvd10sIFtdKQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgMTEuIERlcGVuZGVuY2llcyBiZXR3ZWVuIG1hY3Jvcy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIG00X2JlZm9yZShUSElTLU1BQ1JPLU5BTUUsIENBTExFRC1NQUNSTy1OQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSXNzdWUgYSB3YXJuaW5nIGlmIENBTExFRC1NQUNSTy1OQU1FIHdhcyBjYWxsZWQgYmVmb3JlIFRISVMtTUFDUk8tTkFNRS4KK200X2RlZmluZShbbTRfYmVmb3JlXSwKK1ttNF9wcm92aWRlX2lmKFskMl0sCisJICAgICAgIFttNF93YXJuKFtzeW50YXhdLCBbJDIgd2FzIGNhbGxlZCBiZWZvcmUgJDFdKV0pXSkKKworCisjIG00X3JlcXVpcmUoTkFNRS1UTy1DSEVDSywgW0JPRFktVE8tRVhQQU5EID0gTkFNRS1UTy1DSEVDS10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmIE5BTUUtVE8tQ0hFQ0sgaGFzIG5ldmVyIGJlZW4gZXhwYW5kZWQgKGFjdHVhbGx5LCBpZiBpdCBpcyBub3QKKyMgbTRfcHJvdmlkZSdkKSwgZXhwYW5kIEJPRFktVE8tRVhQQU5EICpiZWZvcmUqIHRoZSBjdXJyZW50IG1hY3JvCisjIGV4cGFuc2lvbjsgZm9sbG93IHRoZSBleHBhbnNpb24gd2l0aCBhIG5ld2xpbmUuICBPbmNlIGV4cGFuZGVkLCBlbWl0CisjIGl0IGluIF9tNF9kaXZlcnRfZHVtcC4gIEtlZXAgdHJhY2sgb2YgdGhlIG00X3JlcXVpcmUgY2hhaW4gaW4KKyMgX200X2V4cGFuc2lvbl9zdGFjay4KKyMKKyMgVGhlIG5vcm1hbCBjYXNlcyBhcmU6CisjCisjIC0gTkFNRS1UTy1DSEVDSyA9PSBCT0RZLVRPLUVYUEFORAorIyAgIFdoaWNoIHlvdSBjYW4gdXNlIGZvciByZWd1bGFyIG1hY3JvcyB3aXRoIG9yIHdpdGhvdXQgYXJndW1lbnRzLCBlLmcuLAorIyAgICAgbTRfcmVxdWlyZShbQUNfUFJPR19DQ10sIFtBQ19QUk9HX0NDXSkKKyMgICAgIG00X3JlcXVpcmUoW0FDX0NIRUNLX0hFQURFUlMobGltaXRzLmgpXSwgW0FDX0NIRUNLX0hFQURFUlMobGltaXRzLmgpXSkKKyMgICB3aGljaCBpcyBqdXN0IHRoZSBzYW1lIGFzCisjICAgICBtNF9yZXF1aXJlKFtBQ19QUk9HX0NDXSkKKyMgICAgIG00X3JlcXVpcmUoW0FDX0NIRUNLX0hFQURFUlMobGltaXRzLmgpXSkKKyMKKyMgLSBCT0RZLVRPLUVYUEFORCA9PSBtNF9pbmRpcihbTkFNRS1UTy1DSEVDS10pCisjICAgSW4gdGhlIGNhc2Ugb2YgbWFjcm9zIHdpdGggaXJyZWd1bGFyIG5hbWVzLiAgRm9yIGluc3RhbmNlOgorIyAgICAgbTRfcmVxdWlyZShbQUNfTEFOR19DT01QSUxFUihDKV0sIFtpbmRpcihbQUNfTEFOR19DT01QSUxFUihDKV0pXSkKKyMgICB3aGljaCBtZWFucyBgaWYgdGhlIG1hY3JvIG5hbWVkIGBBQ19MQU5HX0NPTVBJTEVSKEMpJyAodGhlIHBhcmVucyBhcmUKKyMgICBwYXJ0IG9mIHRoZSBuYW1lLCBpdCBpcyBub3QgYW4gYXJndW1lbnQpIGhhcyBub3QgYmVlbiBydW4sIHRoZW4KKyMgICBjYWxsIGl0LicKKyMgICBIYWQgeW91IHVzZWQKKyMgICAgIG00X3JlcXVpcmUoW0FDX0xBTkdfQ09NUElMRVIoQyldLCBbQUNfTEFOR19DT01QSUxFUihDKV0pCisjICAgdGhlbiBtNF9yZXF1aXJlIHdvdWxkIGhhdmUgdHJpZWQgdG8gZXhwYW5kIGBBQ19MQU5HX0NPTVBJTEVSKEMpJywgaS5lLiwKKyMgICBjYWxsIHRoZSBtYWNybyBgQUNfTEFOR19DT01QSUxFUicgd2l0aCBgQycgYXMgYXJndW1lbnQuCisjCisjICAgWW91IGNvdWxkIGFyZ3VlIHRoYXQgYEFDX0xBTkdfQ09NUElMRVInLCB3aGVuIGl0IHJlY2VpdmVzIGFuIGFyZ3VtZW50CisjICAgc3VjaCBhcyBgQycgc2hvdWxkIGRpc3BhdGNoIHRoZSBjYWxsIHRvIGBBQ19MQU5HX0NPTVBJTEVSKEMpJy4gIEJ1dCB0aGlzCisjICAgYGV4dGVuc2lvbicgcHJldmVudHMgYEFDX0xBTkdfQ09NUElMRVInIGZyb20gaGF2aW5nIGFjdHVhbCBhcmd1bWVudHMgdGhhdAorIyAgIGl0IHBhc3NlcyB0byBgQUNfTEFOR19DT01QSUxFUihDKScuCisjCisjIFRoaXMgaXMgY2FsbGVkIGZyZXF1ZW50bHksIHNvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgbWFjcm8gaW52b2NhdGlvbnMKKyMgYnkgYXZvaWRpbmcgZG5sIGFuZCBvdGhlciBvdmVyaGVhZCBvbiB0aGUgY29tbW9uIHBhdGguCittNF9kZWZpbmUoW200X3JlcXVpcmVdLAorW200X2lmZGVmKFtfbTRfZXhwYW5kaW5nKCQxKV0sCisgIFttNF9mYXRhbChbJDA6IGNpcmN1bGFyIGRlcGVuZGVuY3kgb2YgJDFdKV0pXWRubAorW200X2lmKF9tNF9kaXZlcnRfZHVtcCwgW10sCisgIFttNF9mYXRhbChbJDAoJDEpOiBjYW5ub3QgYmUgdXNlZCBvdXRzaWRlIG9mIGFuIF1kbmwKK200X2lmKFskMF0sIFttNF9yZXF1aXJlXSwgW1ttNF9kZWZ1bl1dLCBbW0FDX0RFRlVOXV0pWydkIG1hY3JvXSldKV1kbmwKK1ttNF9wcm92aWRlX2lmKFskMV0sIFttNF9zZXRfY29udGFpbnMoW19tNF9wcm92aWRlXSwgWyQxXSwKKyAgICBbX200X3JlcXVpcmVfY2hlY2soWyQxXSwgX200X2RlZm4oW200X3Byb3ZpZGUoJDEpXSksIFskMF0pXSwgW200X2lnbm9yZV0pXSwKKyAgW19tNF9yZXF1aXJlX2NhbGxdKShbJDFdLCBbJDJdLCBfbTRfZGl2ZXJ0X2R1bXApXSkKKworCisjIF9tNF9yZXF1aXJlX2NhbGwoTkFNRS1UTy1DSEVDSywgW0JPRFktVE8tRVhQQU5EID0gTkFNRS1UTy1DSEVDS10sCisjICAgICAgICAgICAgICAgICAgRElWRVJTSU9OLU5VTUJFUikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSWYgbTRfcmVxdWlyZSBkZWNpZGVzIHRvIGV4cGFuZCB0aGUgYm9keSwgaXQgY2FsbHMgdGhpcyBtYWNyby4gIFRoZQorIyBleHBhbnNpb24gaXMgcGxhY2VkIGluIERJVkVSU0lPTi1OVU1CRVIuCisjCisjIFRoaXMgaXMgY2FsbGVkIGZyZXF1ZW50bHksIHNvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgbWFjcm8gaW52b2NhdGlvbnMKKyMgYnkgYXZvaWRpbmcgZG5sIGFuZCBvdGhlciBvdmVyaGVhZCBvbiB0aGUgY29tbW9uIHBhdGguCittNF9kZWZpbmUoW19tNF9yZXF1aXJlX2NhbGxdLAorW200X3B1c2hkZWYoW19tNF9kaXZlcnRfZ3Jvd10sIG00X2RlY3IoX200X2RpdmVydF9ncm93KSldZG5sCitbbTRfcHVzaGRlZihbX200X2RpdmVydGluZyhbJDFdKV0pbTRfcHVzaGRlZihbX200X2RpdmVydGluZ10sIFskMV0pXWRubAorW200X2RpdmVydF9wdXNoKF9tNF9kaXZlcnRfZ3JvdyldZG5sCitbbTRfaWYoWyQyXSwgW10sIFskMV0sIFskMl0pCittNF9wcm92aWRlX2lmKFskMV0sIFttNF9zZXRfcmVtb3ZlKFtfbTRfcHJvdmlkZV0sIFskMV0pXSwKKyAgW200X3dhcm4oW3N5bnRheF0sIFskMSBpcyBtNF9yZXF1aXJlJ2QgYnV0IG5vdCBtNF9kZWZ1bidkXSldKV1kbmwKK1tfbTRfZGl2ZXJ0X3JhdygkMylfbTRfdW5kaXZlcnQoX200X2RpdmVydF9ncm93KV1kbmwKK1ttNF9kaXZlcnRfcG9wKF9tNF9kaXZlcnRfZ3JvdylfbTRfcG9wZGVmKFtfbTRfZGl2ZXJ0X2dyb3ddLAorW19tNF9kaXZlcnRpbmcoWyQxXSldLCBbX200X2RpdmVydGluZ10pXSkKKworCisjIF9tNF9yZXF1aXJlX2NoZWNrKE5BTUUtVE8tQ0hFQ0ssIE9XTkVSLCBDQUxMRVIpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE5BTUUtVE8tQ0hFQ0sgaGFzIGJlZW4gaWRlbnRpZmllZCBhcyBwcmV2aW91c2x5IGV4cGFuZGVkIGluIHRoZQorIyBkaXZlcnNpb24gb3duZWQgYnkgT1dORVIuICBJZiB0aGlzIGlzIGEgcHJvYmxlbSwgd2FybiBvbiBiZWhhbGYgb2YKKyMgQ0FMTEVSIGFuZCByZXR1cm4gX200X3JlcXVpcmVfY2FsbDsgb3RoZXJ3aXNlIHJldHVybiBtNF9pZ25vcmUuCittNF9kZWZpbmUoW19tNF9yZXF1aXJlX2NoZWNrXSwKK1ttNF9pZihfbTRfZGVmbihbX200X2RpdmVydGluZ10pLCBbJDJdLCBbbTRfaWdub3JlXSwKKyAgICAgICBtNF9pZmRlZihbX200X2RpdmVydGluZyhbJDJdKV0sIFstXSksIFstXSwgW200X3dhcm4oW3N5bnRheF0sCisgICBbJDM6IGAkMScgd2FzIGV4cGFuZGVkIGJlZm9yZSBpdCB3YXMgcmVxdWlyZWRdKV9tNF9yZXF1aXJlX2NhbGxdLAorICAgICAgIFttNF9pZ25vcmVdKV0pCisKKworIyBfbTRfZGl2ZXJ0X2dyb3cKKyMgLS0tLS0tLS0tLS0tLS0tCisjIFRoZSBjb3VudGVyIGZvciBfbTRfcmVxdWlyZV9jYWxsLgorbTRfZGVmaW5lKFtfbTRfZGl2ZXJ0X2dyb3ddLCBfbTRfZGl2ZXJ0KFtHUk9XXSkpCisKKworIyBtNF9leHBhbmRfb25jZShURVhULCBbV0lUTkVTUyA9IFRFWFRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZiBURVhUIGhhcyBuZXZlciBiZWVuIGV4cGFuZGVkLCBleHBhbmQgaXQgKmhlcmUqLiAgVXNlIFdJVE5FU1MgYXMKKyMgYXMgYSBtZW1vcnkgdGhhdCBURVhUIGhhcyBhbHJlYWR5IGJlZW4gZXhwYW5kZWQuCittNF9kZWZpbmUoW200X2V4cGFuZF9vbmNlXSwKK1ttNF9wcm92aWRlX2lmKG00X2RlZmF1bHRfcXVvdGVkKFskMl0sIFskMV0pLAorCSAgICAgICBbXSwKKwkgICAgICAgW200X3Byb3ZpZGUobTRfZGVmYXVsdF9xdW90ZWQoWyQyXSwgWyQxXSkpW10kMV0pXSkKKworCisjIG00X3Byb3ZpZGUoTUFDUk8tTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFttNF9wcm92aWRlXSwKK1ttNF9pZmRlZihbbTRfcHJvdmlkZSgkMSldLCBbXSwKK1ttNF9zZXRfYWRkKFtfbTRfcHJvdmlkZV0sIFskMV0sIFttNF9kZWZpbmUoW200X3Byb3ZpZGUoJDEpXSwKKyAgbTRfaWZkZWYoW19tNF9kaXZlcnRpbmddLCBbX200X2RlZm4oW19tNF9kaXZlcnRpbmddKV0pKV0pXSldKQorCisKKyMgbTRfcHJvdmlkZV9pZihNQUNSTy1OQU1FLCBJRi1QUk9WSURFRCwgSUYtTk9ULVBST1ZJREVEKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmIE1BQ1JPLU5BTUUgaXMgcHJvdmlkZWQgZG8gSUYtUFJPVklERUQsIGVsc2UgSUYtTk9ULVBST1ZJREVELgorIyBUaGUgcHVycG9zZSBvZiB0aGlzIG1hY3JvIGlzIHRvIHByb3ZpZGUgdGhlIHVzZXIgd2l0aCBhIG1lYW5zIHRvCisjIGNoZWNrIG1hY3JvcyB3aGljaCBhcmUgcHJvdmlkZWQgd2l0aG91dCBsZXR0aW5nIGhlciBrbm93IGhvdyB0aGUKKyMgaW5mb3JtYXRpb24gaXMgY29kZWQuCittNF9kZWZpbmUoW200X3Byb3ZpZGVfaWZdLAorW200X2lmZGVmKFttNF9wcm92aWRlKCQxKV0sCisJICBbJDJdLCBbJDNdKV0pCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAxMi4gVGV4dCBwcm9jZXNzaW5nLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgbTRfY3JfbGV0dGVycworIyBtNF9jcl9MRVRURVJTCisjIG00X2NyX0xldHRlcnMKKyMgLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFttNF9jcl9sZXR0ZXJzXSwgW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XSkKK200X2RlZmluZShbbTRfY3JfTEVUVEVSU10sIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl0pCittNF9kZWZpbmUoW200X2NyX0xldHRlcnNdLAorbTRfZGVmbihbbTRfY3JfbGV0dGVyc10pZG5sCittNF9kZWZuKFttNF9jcl9MRVRURVJTXSlkbmwKKykKKworCisjIG00X2NyX2RpZ2l0cworIyAtLS0tLS0tLS0tLS0KK200X2RlZmluZShbbTRfY3JfZGlnaXRzXSwgWzAxMjM0NTY3ODldKQorCisKKyMgbTRfY3JfYWxudW0KKyMgLS0tLS0tLS0tLS0KK200X2RlZmluZShbbTRfY3JfYWxudW1dLAorbTRfZGVmbihbbTRfY3JfTGV0dGVyc10pZG5sCittNF9kZWZuKFttNF9jcl9kaWdpdHNdKWRubAorKQorCisKKyMgbTRfY3Jfc3ltYm9sczEKKyMgbTRfY3Jfc3ltYm9sczIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFttNF9jcl9zeW1ib2xzMV0sCittNF9kZWZuKFttNF9jcl9MZXR0ZXJzXSlkbmwKK18pCisKK200X2RlZmluZShbbTRfY3Jfc3ltYm9sczJdLAorbTRfZGVmbihbbTRfY3Jfc3ltYm9sczFdKWRubAorbTRfZGVmbihbbTRfY3JfZGlnaXRzXSlkbmwKKykKKworIyBtNF9jcl9hbGwKKyMgLS0tLS0tLS0tCisjIFRoZSBjaGFyYWN0ZXIgcmFuZ2UgcmVwcmVzZW50aW5nIGV2ZXJ5dGhpbmcsIHdpdGggYC0nIGFzIHRoZSBsYXN0CisjIGNoYXJhY3Rlciwgc2luY2UgaXQgaXMgc3BlY2lhbCB0byBtNF90cmFuc2xpdC4gIFVzZSB3aXRoIGNhcmUsIGJlY2F1c2UKKyMgaXQgY29udGFpbnMgY2hhcmFjdGVycyBzcGVjaWFsIHRvIE00IChmb3J0dW5hdGVseSwgYm90aCBBU0NJSSBhbmQgRUJDRElDCisjIGhhdmUgW10gaW4gb3JkZXIsIHNvIG00X2RlZm4oW200X2NyX2FsbF0pIHJlbWFpbnMgYSB2YWxpZCBzdHJpbmcpLiAgSXQKKyMgYWxzbyBjb250YWlucyBjaGFyYWN0ZXJzIHNwZWNpYWwgdG8gdGVybWluYWxzLCBzbyBpdCBzaG91bGQgbmV2ZXIgYmUKKyMgZGlzcGxheWVkIGluIGFuIGVycm9yIG1lc3NhZ2UuICBBbHNvLCBhdHRlbXB0cyB0byBtYXAgWyBhbmQgXSB0byBvdGhlcgorIyBjaGFyYWN0ZXJzIHZpYSBtNF90cmFuc2xpdCBtdXN0IGRlYWwgd2l0aCB0aGUgZmFjdCB0aGF0IG00X3RyYW5zbGl0IGRvZXMKKyMgbm90IGFkZCBxdW90ZXMgdG8gdGhlIG91dHB1dC4KKyMKKyMgSXQgaXMgbWFpbmx5IHVzZWZ1bCBpbiBnZW5lcmF0aW5nIGludmVydGVkIGNoYXJhY3RlciByYW5nZSBtYXBzLCBmb3IgdXNlCisjIGluIHBsYWNlcyB3aGVyZSBtNF90cmFuc2xpdCBpcyBmYXN0ZXIgdGhhbiBhbiBlcXVpdmFsZW50IG00X2JwYXRzdWJzdDsKKyMgdGhlIHJlZ2V4IGBbXmEtel0nIGlzIGVxdWl2YWxlbnQgdG86CisjICBtNF90cmFuc2xpdChtNF9kcXVvdGUobTRfZGVmbihbbTRfY3JfYWxsXSkpLCBbYS16XSkKK200X2RlZmluZShbbTRfY3JfYWxsXSwKK200X3RyYW5zbGl0KG00X2RxdW90ZShtNF9mb3JtYXQobTRfZHF1b3RlKG00X2ZvcigKKyAgLDEsMjU1LCxbWyVjXV0pKW00X2ZvcihbaV0sMSwyNTUsLFssaV0pKSksIFstXSktKQorCisKKyMgX200X2RlZmluZV9jcl9ub3QoQ0FURUdPUlkpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgbTRfY3Jfbm90X0NBVEVHT1JZIGFzIHRoZSBpbnZlcnNlIG9mIG00X2NyX0NBVEVHT1JZLgorbTRfZGVmaW5lKFtfbTRfZGVmaW5lX2NyX25vdF0sCitbbTRfZGVmaW5lKFttNF9jcl9ub3RfJDFdLAorCSAgIG00X3RyYW5zbGl0KG00X2RxdW90ZShtNF9kZWZuKFttNF9jcl9hbGxdKSksCisJCSAgICAgICBtNF9kZWZuKFttNF9jcl8kMV0pKSldKQorCisKKyMgbTRfY3Jfbm90X2xldHRlcnMKKyMgbTRfY3Jfbm90X0xFVFRFUlMKKyMgbTRfY3Jfbm90X0xldHRlcnMKKyMgbTRfY3Jfbm90X2RpZ2l0cworIyBtNF9jcl9ub3RfYWxudW0KKyMgbTRfY3Jfbm90X3N5bWJvbHMxCisjIG00X2NyX25vdF9zeW1ib2xzMgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgSW52ZXJzZSBjaGFyYWN0ZXIgc2V0cworX200X2RlZmluZV9jcl9ub3QoW2xldHRlcnNdKQorX200X2RlZmluZV9jcl9ub3QoW0xFVFRFUlNdKQorX200X2RlZmluZV9jcl9ub3QoW0xldHRlcnNdKQorX200X2RlZmluZV9jcl9ub3QoW2RpZ2l0c10pCitfbTRfZGVmaW5lX2NyX25vdChbYWxudW1dKQorX200X2RlZmluZV9jcl9ub3QoW3N5bWJvbHMxXSkKK19tNF9kZWZpbmVfY3Jfbm90KFtzeW1ib2xzMl0pCisKKworIyBtNF9uZXdsaW5lKFtTVFJJTkddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeHBhbmRzIHRvIGEgbmV3bGluZSwgcG9zc2libHkgZm9sbG93ZWQgYnkgU1RSSU5HLiAgRXhpc3RzIG1vc3RseSBmb3IKKyMgZm9ybWF0dGluZyByZWFzb25zLgorbTRfZGVmaW5lKFttNF9uZXdsaW5lXSwgWworJDFdKQorCisKKyMgbTRfcmVfZXNjYXBlKFNUUklORykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXNjYXBlIFJFIGFjdGl2ZSBjaGFyYWN0ZXJzIGluIFNUUklORy4KK200X2RlZmluZShbbTRfcmVfZXNjYXBlXSwKK1ttNF9icGF0c3Vic3QoWyQxXSwKKwkgICAgICBbW11bKisuP1xeJF1dLCBbXFxcJl0pXSkKKworCisjIG00X3JlX3N0cmluZworIyAtLS0tLS0tLS0tLS0KKyMgUmVnZXhwIGZvciBgW2EtekEtWl8wLTldKicKKyMgbTRfZHF1b3RlIHByb3ZpZGVzIGxpdGVyYWwgW10gZm9yIHRoZSBjaGFyYWN0ZXIgY2xhc3MuCittNF9kZWZpbmUoW200X3JlX3N0cmluZ10sCittNF9kcXVvdGUobTRfZGVmbihbbTRfY3Jfc3ltYm9sczJdKSlkbmwKK1sqXWRubAorKQorCisKKyMgbTRfcmVfd29yZAorIyAtLS0tLS0tLS0tCisjIFJlZ2V4cCBmb3IgYFthLXpBLVpfXVthLXpBLVpfMC05XSonCittNF9kZWZpbmUoW200X3JlX3dvcmRdLAorbTRfZHF1b3RlKG00X2RlZm4oW200X2NyX3N5bWJvbHMxXSkpZG5sCittNF9kZWZuKFttNF9yZV9zdHJpbmddKWRubAorKQorCisKKyMgbTRfdG9sb3dlcihTVFJJTkcpCisjIG00X3RvdXBwZXIoU1RSSU5HKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhlc2UgbWFjcm9zIGNvbnZlcnQgU1RSSU5HIHRvIGxvd2VyY2FzZSBvciB1cHBlcmNhc2UuCisjCisjIFJhdGhlciB0aGFuIGV4cGFuZCB0aGUgbTRfZGVmbiBlYWNoIHRpbWUsIHdlIGlubGluZSB0aGVtIHVwIGZyb250LgorbTRfZGVmaW5lKFttNF90b2xvd2VyXSwKK1ttNF90cmFuc2xpdChbWyQxXV0sIF1tNF9kcXVvdGUobTRfZGVmbihbbTRfY3JfTEVUVEVSU10pKVssCisJCSAgICAgXW00X2RxdW90ZShtNF9kZWZuKFttNF9jcl9sZXR0ZXJzXSkpWyldKQorbTRfZGVmaW5lKFttNF90b3VwcGVyXSwKK1ttNF90cmFuc2xpdChbWyQxXV0sIF1tNF9kcXVvdGUobTRfZGVmbihbbTRfY3JfbGV0dGVyc10pKVssCisJCSAgICAgXW00X2RxdW90ZShtNF9kZWZuKFttNF9jcl9MRVRURVJTXSkpWyldKQorCisKKyMgbTRfc3BsaXQoU1RSSU5HLCBbUkVHRVhQXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU3BsaXQgU1RSSU5HIGludG8gYW4gbTQgbGlzdCBvZiBxdW90ZWQgZWxlbWVudHMuICBUaGUgZWxlbWVudHMgYXJlCisjIHF1b3RlZCB3aXRoIFsgYW5kIF0uICBCZWdpbm5pbmcgc3BhY2VzIGFuZCBlbmQgc3BhY2VzICphcmUga2VwdCouCisjIFVzZSBtNF9zdHJpcCB0byByZW1vdmUgdGhlbS4KKyMKKyMgUkVHRVhQIHNwZWNpZmllcyB3aGVyZSB0byBzcGxpdC4gIERlZmF1bHQgaXMgW1x0IF0rLgorIworIyBJZiBTVFJJTkcgaXMgZW1wdHksIHRoZSByZXN1bHQgaXMgYW4gZW1wdHkgbGlzdC4KKyMKKyMgUGF5IGF0dGVudGlvbiB0byB0aGUgbTRfY2hhbmdlcXVvdGVzLiAgV2hlbiBtNCByZWFkcyB0aGUgZGVmaW5pdGlvbiBvZgorIyBtNF9zcGxpdCwgaXQgc3RpbGwgaGFzIHF1b3RlcyBzZXQgdG8gWyBhbmQgXS4gIEx1Y2tpbHksIHRoZXNlIGFyZSBtYXRjaGVkCisjIGluIHRoZSBtYWNybyBib2R5LCBzbyB0aGUgZGVmaW5pdGlvbiBpcyBzdG9yZWQgY29ycmVjdGx5LiAgVXNlIHRoZSBzYW1lCisjIGFsdGVybmF0ZSBxdW90ZXMgYXMgbTRfbm9xdW90ZTsgaXQgbXVzdCBiZSB1bmxpa2VseSB0byBhcHBlYXIgaW4gJDEuCisjCisjIEFsc28sIG5vdGljZSB0aGF0ICQxIGlzIHF1b3RlZCB0d2ljZSwgc2luY2Ugd2Ugd2FudCB0aGUgcmVzdWx0IHRvCisjIGJlIHF1b3RlZC4gIFRoZW4geW91IHNob3VsZCB1bmRlcnN0YW5kIHRoYXQgdGhlIGFyZ3VtZW50IG9mCisjIHBhdHN1YnN0IGlzIC09PHsoU1RSSU5HKX0+PS0gKGkuZS4sIHdpdGggYWRkaXRpb25hbCAtPTx7KCBhbmQgKX0+PS0pLgorIworIyBUaGlzIG1hY3JvIGlzIHNhZmUgb24gYWN0aXZlIHN5bWJvbHMsIGkuZS46CisjICAgbTRfZGVmaW5lKGFjdGl2ZSwgQUNUSVZFKQorIyAgIG00X3NwbGl0KFthY3RpdmUgYWN0aXZlIF0pZW5kCisjICAgPT4gW2FjdGl2ZV0sIFthY3RpdmVdLCBbXWVuZAorIworIyBPcHRpbWl6ZSBvbiByZWdleCBvZiBgICcgKHNwYWNlKSwgc2luY2UgbTRfZm9yZWFjaF93IGFscmVhZHkgZ3VhcmFudGVlcworIyB0aGF0IHRoZSBsaXN0IGNvbnRhaW5zIHNpbmdsZSBzcGFjZSBzZXBhcmF0b3JzLCBhbmQgYSBjb21tb24gY2FzZSBpcworIyBzcGxpdHRpbmcgYSBzaW5nbGUtZWxlbWVudCBsaXN0LiAgVGhpcyBtYWNybyBpcyBjYWxsZWQgZnJlcXVlbnRseSwKKyMgc28gYXZvaWQgdW5uZWNlc3NhcnkgZG5sIGluc2lkZSB0aGUgZGVmaW5pdGlvbi4KK200X2RlZmluZShbbTRfc3BsaXRdLAorW200X2lmKFskMV0sIFtdLCBbXSwKKyAgICAgICBbJDJdLCBbIF0sIFttNF9pZihtNF9pbmRleChbJDFdLCBbIF0pLCBbLTFdLCBbW1skMV1dXSwKKwkJCSBbXyQwKFskMV0sIFskMl0sIFssIF0pXSldLAorICAgICAgIFskMl0sIFtdLCBbXyQwKFskMV0sIFtbCSBdK10sIFssIF0pXSwKKyAgICAgICBbXyQwKFskMV0sIFskMl0sIFssIF0pXSldKQorCittNF9kZWZpbmUoW19tNF9zcGxpdF0sCitbbTRfY2hhbmdlcXVvdGUoWy09PHsoXSxbKX0+PS1dKV1kbmwKK1tbbTRfYnBhdHN1YnN0KC09PHsoLT08eygkMSl9Pj0tKX0+PS0sIC09PHsoJDIpfT49LSwKKwkgICAgICAgLT08eyhdJDNbKX0+PS0pXW00X2NoYW5nZXF1b3RlKFssIF0pXSkKKworCisjIG00X2Nob21wKFNUUklORykKKyMgbTRfY2hvbXBfYWxsKFNUUklORykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmV0dXJuIFNUUklORyBxdW90ZWQsIGJ1dCB3aXRob3V0IGEgdHJhaWxpbmcgbmV3bGluZS4gIG00X2Nob21wCisjIHJlbW92ZXMgYXQgbW9zdCBvbmUgbmV3bGluZSwgd2hpbGUgbTRfY2hvbXBfYWxsIHJlbW92ZXMgYWxsCisjIGNvbnNlY3V0aXZlIHRyYWlsaW5nIG5ld2xpbmVzLiAgRW1iZWRkZWQgbmV3bGluZXMgYXJlIG5vdCB0b3VjaGVkLAorIyBhbmQgYSB0cmFpbGluZyBiYWNrc2xhc2gtbmV3bGluZSBsZWF2ZXMganVzdCBhIHRyYWlsaW5nIGJhY2tzbGFzaC4KKyMKKyMgbTRfYnJlZ2V4cCBpcyBzbG93ZXIgdGhhbiBtNF9pbmRleCwgYW5kIHdlIGRvbid0IGFsd2F5cyB3YW50IHRvCisjIHJlbW92ZSBhbGwgbmV3bGluZXM7IGhlbmNlIHRoZSB0d28gdmFyaWFudHMuICBXZSBtYXNzYWdlIGNoYXJhY3RlcnMKKyMgdG8gZ2l2ZSBhIG5pY2VyIHBhdHRlcm4gdG8gbWF0Y2gsIHBhcnRpY3VsYXJseSBzaW5jZSBtNF9icmVnZXhwIGlzCisjIGxpbmUtb3JpZW50ZWQuICBCb3RoIHZlcnNpb25zIG11c3QgZ3VhcmFudGVlIGEgbWF0Y2gsIHRvIGF2b2lkIGJ1Z3MKKyMgd2l0aCBwcmVjaXNpb24gLTEgaW4gbTRfZm9ybWF0IGluIG9sZGVyIG00LgorbTRfZGVmaW5lKFttNF9jaG9tcF0sCitbbTRfZm9ybWF0KFtbJS4qc11dLCBtNF9pbmRleChtNF90cmFuc2xpdChbWyQxXV0sIFsKKy8uXSwgWy8gIF0pWy4vLl0sIFsvLl0pLCBbJDFdKV0pCisKK200X2RlZmluZShbbTRfY2hvbXBfYWxsXSwKK1ttNF9mb3JtYXQoW1slLipzXV0sIG00X2JyZWdleHAobTRfdHJhbnNsaXQoW1skMV1dLCBbCisvXSwgWy8gXSksIFsvKiRdKSwgWyQxXSldKQorCisKKyMgbTRfZmxhdHRlbihTVFJJTkcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZiBTVFJJTkcgY29udGFpbnMgZW5kIG9mIGxpbmVzLCByZXBsYWNlIHRoZW0gd2l0aCBzcGFjZXMuICBJZiB0aGVyZQorIyBhcmUgYmFja3NsYXNoZWQgZW5kIG9mIGxpbmVzLCByZW1vdmUgdGhlbS4gIFRoaXMgbWFjcm8gaXMgc2FmZSB3aXRoCisjIGFjdGl2ZSBzeW1ib2xzLgorIyAgICBtNF9kZWZpbmUoYWN0aXZlLCBBQ1RJVkUpCisjICAgIG00X2ZsYXR0ZW4oW2FjdGl2ZQorIyAgICBhY3RcCisjICAgIGl2ZV0pZW5kCisjICAgID0+IGFjdGl2ZSBhY3RpdmVlbmQKKyMKKyMgSW4gbTQsIG00X2JwYXRzdWJzdCBpcyBleHBlbnNpdmUsIHNvIGZpcnN0IGNoZWNrIGZvciBhIG5ld2xpbmUuCittNF9kZWZpbmUoW200X2ZsYXR0ZW5dLAorW200X2lmKG00X2luZGV4KFskMV0sIFsKK10pLCBbLTFdLCBbWyQxXV0sCisgICAgICAgW200X3RyYW5zbGl0KG00X2JwYXRzdWJzdChbW1skMV1dXSwgW1xcCitdKSwgWworXSwgWyBdKV0pXSkKKworCisjIG00X3N0cmlwKFNUUklORykKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBFeHBhbmRzIGludG8gU1RSSU5HIHdpdGggdGFicyBhbmQgc3BhY2VzIHNpbmdsZWQgb3V0IGludG8gYSBzaW5nbGUKKyMgc3BhY2UsIGFuZCByZW1vdmluZyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMuCisjCisjIFRoaXMgbWFjcm8gaXMgcm9idXN0IHRvIGFjdGl2ZSBzeW1ib2xzLgorIyAgICBtNF9kZWZpbmUoYWN0aXZlLCBBQ1RJVkUpCisjICAgIG00X3N0cmlwKFsgIGFjdGl2ZSA8dGFiPiA8dGFiPmFjdGl2ZSBdKWVuZAorIyAgICA9PiBhY3RpdmUgYWN0aXZlZW5kCisjCisjIEZpcnN0LCBub3RpY2UgdGhhdCB3ZSBndWFyYW50ZWUgdHJhaWxpbmcgc3BhY2UuICBXaHk/ICBCZWNhdXNlIHJlZ3VsYXIKKyMgZXhwcmVzc2lvbnMgYXJlIGdyZWVkeSwgYW5kIGAuKiA/JyB3b3VsZCBhbHdheXMgZ3JvdXAgdGhlIHNwYWNlIGludG8gdGhlCisjIC4qIHBvcnRpb24uICBUaGUgYWxnb3JpdGhtIGlzIHNpbXBsZXIgYnkgYXZvaWRpbmcgYD8nIGF0IHRoZSBlbmQuICBUaGUKKyMgYWxnb3JpdGhtIGNvcnJlY3RseSBzdHJpcHMgZXZlcnl0aGluZyBpZiBTVFJJTkcgaXMganVzdCBgICcuCisjCisjIFRoZW4gbm90aWNlIHRoZSBzZWNvbmQgcGF0dGVybjogaXQgaXMgaW4gY2hhcmdlIG9mIHJlbW92aW5nIHRoZQorIyBsZWFkaW5nL3RyYWlsaW5nIHNwYWNlcy4gIFdoeSBub3QganVzdCBgW14gXSc/ICBCZWNhdXNlIHRoZXkgYXJlCisjIGFwcGxpZWQgdG8gb3Zlci1xdW90ZWQgc3RyaW5ncywgaS5lLiBtb3JlIG9yIGxlc3MgW1NUUklOR10sIGR1ZQorIyB0byB0aGUgbGltaXRhdGlvbnMgb2YgbTRfYnBhdHN1YnN0cy4gIFNvIHRoZSBsZWFkaW5nIHNwYWNlIGluIFNUUklORworIyBpcyB0aGUgKnNlY29uZCogY2hhcmFjdGVyOyBlcXVhbGx5IGZvciB0aGUgdHJhaWxpbmcgc3BhY2UuCittNF9kZWZpbmUoW200X3N0cmlwXSwKK1ttNF9icGF0c3Vic3RzKFskMSBdLAorCSAgICAgICBbWwkgXStdLCBbIF0sCisJICAgICAgIFteLiA/XCguKlwpIC4kXSwgW1tbXDFdXV0pXSkKKworCisjIG00X25vcm1hbGl6ZShTVFJJTkcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFwcGx5IG00X2ZsYXR0ZW4gYW5kIG00X3N0cmlwIHRvIFNUUklORy4KKyMKKyMgVGhlIGFyZ3VtZW50IGlzIHF1b3RlZCwgc28gdGhhdCB0aGUgbWFjcm8gaXMgcm9idXN0IHRvIGFjdGl2ZSBzeW1ib2xzOgorIworIyAgICBtNF9kZWZpbmUoYWN0aXZlLCBBQ1RJVkUpCisjICAgIG00X25vcm1hbGl6ZShbICBhY3RcCisjICAgIGl2ZQorIyAgICBhY3RpdmUgXSllbmQKKyMgICAgPT4gYWN0aXZlIGFjdGl2ZWVuZAorCittNF9kZWZpbmUoW200X25vcm1hbGl6ZV0sCitbbTRfc3RyaXAobTRfZmxhdHRlbihbJDFdKSldKQorCisKKworIyBtNF9qb2luKFNFUCwgQVJHMSwgQVJHMi4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgQVJHMVNFUEFSRzIuLi5TRVBBUkduLiAgQXZvaWQgYmFjay10by1iYWNrIFNFUCB3aGVuIGEgZ2l2ZW4gQVJHCisjIGlzIHRoZSBlbXB0eSBzdHJpbmcuICBObyBleHBhbnNpb24gaXMgcGVyZm9ybWVkIG9uIFNFUCBvciBBUkdzLgorIworIyBTaW5jZSB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBqb2luIGNhbiBiZSBhcmJpdHJhcmlseSBsb25nLCB3ZQorIyB3YW50IHRvIGF2b2lkIGhhdmluZyBtb3JlIHRoYW4gb25lICRAIGluIHRoZSBtYWNybyBkZWZpbml0aW9uOworIyBvdGhlcndpc2UsIHRoZSBleHBhbnNpb24gd291bGQgcmVxdWlyZSB0d2ljZSB0aGUgbWVtb3J5IG9mIHRoZSBhbHJlYWR5CisjIGxvbmcgbGlzdC4gIEhlbmNlLCBtNF9qb2luIG1lcmVseSBsb29rcyBmb3IgdGhlIGZpcnN0IG5vbi1lbXB0eSBlbGVtZW50LAorIyBhbmQgb3V0cHV0cyBqdXN0IHRoYXQgZWxlbWVudDsgd2hpbGUgX200X2pvaW4gbG9va3MgZm9yIGFsbCBub24tZW1wdHkKKyMgZWxlbWVudHMsIGFuZCBvdXRwdXRzIHRoZW0gZm9sbG93aW5nIGEgc2VwYXJhdG9yLiAgVGhlIGZpbmFsIHRyaWNrIHRvCisjIG5vdGUgaXMgdGhhdCB3ZSBkZWNpZGUgYmV0d2VlbiByZWN1cnNpbmcgd2l0aCAkMCBvciBfJDAgYmFzZWQgb24gdGhlCisjIG5lc3RlZCBtNF9pZiBlbmRpbmcgd2l0aCBgXycuCisjCisjIFBsZWFzZSBrZWVwIGZvcmVhY2gubTQgaW4gc3luYyB3aXRoIGFueSBhZGp1c3RtZW50cyBtYWRlIGhlcmUuCittNF9kZWZpbmUoW200X2pvaW5dLAorW200X2lmKFskI10sIFsxXSwgW10sCisgICAgICAgWyQjXSwgWzJdLCBbWyQyXV0sCisgICAgICAgW200X2lmKFskMl0sIFtdLCBbXSwgW1skMl1fXSkkMChbJDFdLCBtNF9zaGlmdDIoJEApKV0pXSkKK200X2RlZmluZShbX200X2pvaW5dLAorW200X2lmKFskIyQyXSwgWzJdLCBbXSwKKyAgICAgICBbbTRfaWYoWyQyXSwgW10sIFtdLCBbWyQxJDJdXSkkMChbJDFdLCBtNF9zaGlmdDIoJEApKV0pXSkKKworIyBtNF9qb2luYWxsKFNFUCwgQVJHMSwgQVJHMi4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgQVJHMVNFUEFSRzIuLi5TRVBBUkduLiAgQW4gZW1wdHkgQVJHIHJlc3VsdHMgaW4gYmFjay10by1iYWNrIFNFUC4KKyMgTm8gZXhwYW5zaW9uIGlzIHBlcmZvcm1lZCBvbiBTRVAgb3IgQVJHcy4KKyMKKyMgUGxlYXNlIGtlZXAgZm9yZWFjaC5tNCBpbiBzeW5jIHdpdGggYW55IGFkanVzdG1lbnRzIG1hZGUgaGVyZS4KK200X2RlZmluZShbbTRfam9pbmFsbF0sIFtbJDJdXyQwKFskMV0sIG00X3NoaWZ0KCRAKSldKQorbTRfZGVmaW5lKFtfbTRfam9pbmFsbF0sCitbbTRfaWYoWyQjXSwgWzJdLCBbXSwgW1skMSQzXSQwKFskMV0sIG00X3NoaWZ0MigkQCkpXSldKQorCisjIG00X2NvbWJpbmUoW1NFUEFSQVRPUl0sIFBSRUZJWC1MSVNULCBbSU5GSVhdLCBTVUZGSVguLi4pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgdGhlIHBhaXJ3aXNlIGNvbWJpbmF0aW9uIG9mIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIHF1b3RlZCwKKyMgY29tbWEtc2VwYXJhdGVkIFBSRUZJWC1MSVNUIHdpdGggZXZlcnkgZWxlbWVudCBmcm9tIHRoZSBTVUZGSVggYXJndW1lbnRzLgorIyBFYWNoIHBhaXIgaXMgam9pbmVkIHdpdGggSU5GSVgsIGFuZCBwYWlycyBhcmUgc2VwYXJhdGVkIGJ5IFNFUEFSQVRPUi4KKyMgTm8gZXhwYW5zaW9uIG9jY3VycyBvbiBTRVBBUkFUT1IsIElORklYLCBvciBlbGVtZW50cyBvZiBlaXRoZXIgbGlzdC4KKyMKKyMgRm9yIGV4YW1wbGU6CisjICAgbTRfY29tYmluZShbLCBdLCBbW2FdLCBbYl0sIFtjXV0sIFstXSwgWzFdLCBbMl0sIFszXSkKKyMgICA9PiBhLTEsIGEtMiwgYS0zLCBiLTEsIGItMiwgYi0zLCBjLTEsIGMtMiwgYy0zCisjCisjIFRoaXMgZGVmaW5pdGlvbiBpcyBhIGJpdCBoYWlyeTsgdGhlIHRoaW5nIHRvIHJlYWxpemUgaXMgdGhhdCB3ZSB3YW50CisjIHRvIGNvbnN0cnVjdCBtNF9tYXBfYXJnc19zZXAoW1twcmVmaXgkM11dLCBbXSwgW1skMV1dLCBtNF9zaGlmdDMoJEApKQorIyBhcyB0aGUgaW5uZXIgbG9vcCwgdXNpbmcgZWFjaCBwcmVmaXggZ2VuZXJhdGVkIGJ5IHRoZSBvdXRlciBsb29wLAorIyBhbmQgd2l0aG91dCByZWNhbGN1bGF0aW5nIG00X3NoaWZ0MyBldmVyeSBvdXRlciBpdGVyYXRpb24uCittNF9kZWZpbmUoW200X2NvbWJpbmVdLAorW200X2lmKFskMl0sIFtdLCBbXSwgbTRfZXZhbChbJCMgPiAzXSksIFsxXSwKK1ttNF9tYXBfYXJnc19zZXAoW200X21hcF9hcmdzX3NlcChtNF9kcXVvdGUoXSwgWylbWyQzXV0sIFtdLCBbWyQxXV0sXV1dZG5sCitbbTRfZHF1b3RlKG00X2RxdW90ZShtNF9zaGlmdDMoJEApKSlbWyldLCBbWyQxXV0sICQyKV0pXSkKKworCisjIG00X2FwcGVuZChNQUNSTy1OQU1FLCBTVFJJTkcsIFtTRVBBUkFUT1JdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVkZWZpbmUgTUFDUk8tTkFNRSB0byBob2xkIGl0cyBmb3JtZXIgY29udGVudCBwbHVzIGBTRVBBUkFUT1JgJ1NUUklORycKKyMgYXQgdGhlIGVuZC4gIEl0IGlzIHZhbGlkIHRvIHVzZSB0aGlzIG1hY3JvIHdpdGggTUFDUk8tTkFNRSB1bmRlZmluZWQsCisjIGluIHdoaWNoIGNhc2Ugbm8gU0VQQVJBVE9SIGlzIGFkZGVkLiAgQmUgYXdhcmUgdGhhdCB0aGUgY3JpdGVyaW9uIGlzCisjIGBub3QgYmVpbmcgZGVmaW5lZCcsIGFuZCBub3QgYG5vdCBiZWluZyBlbXB0eScuCisjCisjIE5vdGUgdGhhdCBuZWl0aGVyIFNUUklORyBub3IgU0VQQVJBVE9SIGFyZSBleHBhbmRlZCBoZXJlOyByYXRoZXIsIHdoZW4KKyMgeW91IGV4cGFuZCBNQUNSTy1OQU1FLCB0aGV5IHdpbGwgYmUgZXhwYW5kZWQgYXQgdGhhdCBwb2ludCBpbiB0aW1lLgorIworIyBUaGlzIG1hY3JvIGlzIHJvYnVzdCB0byBhY3RpdmUgc3ltYm9scy4gIEl0IGNhbiBiZSB1c2VkIHRvIGdyb3cKKyMgc3RyaW5ncy4KKyMKKyMgICAgfCBtNF9kZWZpbmUoYWN0aXZlLCBBQ1RJVkUpZG5sCisjICAgIHwgbTRfYXBwZW5kKFtzZW50ZW5jZV0sIFtUaGlzIGlzIGFuXSlkbmwKKyMgICAgfCBtNF9hcHBlbmQoW3NlbnRlbmNlXSwgWyBhY3RpdmUgXSlkbmwKKyMgICAgfCBtNF9hcHBlbmQoW3NlbnRlbmNlXSwgW3N5bWJvbC5dKWRubAorIyAgICB8IHNlbnRlbmNlCisjICAgIHwgbTRfdW5kZWZpbmUoW2FjdGl2ZV0pZG5sCisjICAgIHwgc2VudGVuY2UKKyMgICAgPT4gVGhpcyBpcyBhbiBBQ1RJVkUgc3ltYm9sLgorIyAgICA9PiBUaGlzIGlzIGFuIGFjdGl2ZSBzeW1ib2wuCisjCisjIEl0IGNhbiBiZSB1c2VkIHRvIGRlZmluZSBob29rcy4KKyMKKyMgICAgfCBtNF9kZWZpbmUoYWN0aXZlLCBBQ1RJVkUpZG5sCisjICAgIHwgbTRfYXBwZW5kKFtob29rc10sIFttNF9kZWZpbmUoW2FjdDFdLCBbYWN0Ml0pXSlkbmwKKyMgICAgfCBtNF9hcHBlbmQoW2hvb2tzXSwgW200X2RlZmluZShbYWN0Ml0sIFthY3RpdmVdKV0pZG5sCisjICAgIHwgbTRfdW5kZWZpbmUoW2FjdGl2ZV0pZG5sCisjICAgIHwgYWN0MQorIyAgICB8IGhvb2tzCisjICAgIHwgYWN0MQorIyAgICA9PiBhY3QxCisjICAgID0+CisjICAgID0+IGFjdGl2ZQorIworIyBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIGNyZWF0ZSBsaXN0cywgYWx0aG91Z2ggdGhpcyBwYXJ0aWN1bGFyIHVzYWdlIHdhcworIyBicm9rZW4gcHJpb3IgdG8gYXV0b2NvbmYgMi42Mi4KKyMgICAgfCBtNF9hcHBlbmQoW2xpc3RdLCBbb25lXSwgWywgXSlkbmwKKyMgICAgfCBtNF9hcHBlbmQoW2xpc3RdLCBbdHdvXSwgWywgXSlkbmwKKyMgICAgfCBtNF9hcHBlbmQoW2xpc3RdLCBbdGhyZWVdLCBbLCBdKWRubAorIyAgICB8IGxpc3QKKyMgICAgfCBtNF9kcXVvdGUobGlzdCkKKyMgICAgPT4gb25lLCB0d28sIHRocmVlCisjICAgID0+IFtvbmVdLFt0d29dLFt0aHJlZV0KKyMKKyMgTm90ZSB0aGF0IG00X2FwcGVuZCBjYW4gYmVuZWZpdCBmcm9tIGFtb3J0aXplZCBPKG4pIG00IGJlaGF2aW9yLCBpZgorIyB0aGUgdW5kZXJseWluZyBtNCBpbXBsZW1lbnRhdGlvbiBpcyBzbWFydCBlbm91Z2ggdG8gYXZvaWQgY29weWluZyBleGlzdGluZworIyBjb250ZW50cyB3aGVuIGVubGFyZ2luZyBhIG1hY3JvJ3MgZGVmaW5pdGlvbiBpbnRvIGFueSBwcmUtYWxsb2NhdGVkIHN0b3JhZ2UKKyMgKG00IDEuNC54IHVuZm9ydHVuYXRlbHkgZG9lcyBub3QgaW1wbGVtZW50IHRoaXMgb3B0aW1pemF0aW9uKS4gIFdlIGRvCisjIG5vdCBpbXBsZW1lbnQgbTRfcHJlcGVuZCwgc2luY2UgaXQgaXMgaW5oZXJlbnRseSBPKG5eMikgKHByZS1hbGxvY2F0ZWQKKyMgc3RvcmFnZSBvbmx5IG9jY3VycyBhdCB0aGUgZW5kIG9mIGEgbWFjcm8sIHNvIHRoZSBleGlzdGluZyBjb250ZW50cyBtdXN0CisjIGFsd2F5cyBiZSBtb3ZlZCkuCisjCisjIFVzZSBfbTRfZGVmbiBmb3Igc3BlZWQuCittNF9kZWZpbmUoW200X2FwcGVuZF0sCitbbTRfZGVmaW5lKFskMV0sIG00X2lmZGVmKFskMV0sIFtfbTRfZGVmbihbJDFdKVskM11dKVskMl0pXSkKKworCisjIG00X2FwcGVuZF91bmlxKE1BQ1JPLU5BTUUsIFNUUklORywgW1NFUEFSQVRPUl0sIFtJRi1VTklRXSwgW0lGLURVUF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpa2UgYG00X2FwcGVuZCcsIGJ1dCBhcHBlbmQgb25seSBpZiBub3QgeWV0IHByZXNlbnQuICBBZGRpdGlvbmFsbHksCisjIGV4cGFuZCBJRi1VTklRIGlmIFNUUklORyB3YXMgYXBwZW5kZWQsIG9yIElGLURVUCBpZiBTVFJJTkcgd2FzIGFscmVhZHkKKyMgcHJlc2VudC4gIEFsc28sIHdhcm4gaWYgU0VQQVJBVE9SIGlzIG5vdCBlbXB0eSBhbmQgb2NjdXJzIHdpdGhpbiBTVFJJTkcsCisjIGFzIHRoZSBhbGdvcml0aG0gbm8gbG9uZ2VyIGd1YXJhbnRlZXMgdW5pcXVlbmVzcy4KKyMKKyMgTm90ZSB0aGF0IHdoaWxlIG00X2FwcGVuZCBjYW4gYmUgTyhuKSAoZGVwZW5kaW5nIG9uIHRoZSBxdWFsaXR5IG9mIHRoZQorIyB1bmRlcmx5aW5nIE00IGltcGxlbWVudGF0aW9uKSwgbTRfYXBwZW5kX3VuaXEgaXMgaW5oZXJlbnRseSBPKG5eMikKKyMgYmVjYXVzZSBlYWNoIGFwcGVuZCBvcGVyYXRpb24gc2VhcmNoZXMgdGhlIGVudGlyZSBzdHJpbmcuCittNF9kZWZpbmUoW200X2FwcGVuZF91bmlxXSwKK1ttNF9pZnZhbChbJDNdLCBbbTRfaWYobTRfaW5kZXgoWyQyXSwgWyQzXSksIFstMV0sIFtdLAorCQkgICAgICAgW200X3dhcm4oW3N5bnRheF0sCisJCQkJWyQwOiBgJDInIGNvbnRhaW5zIGAkMyddKV0pXSlfJDAoJEApXSkKK200X2RlZmluZShbX200X2FwcGVuZF91bmlxXSwKK1ttNF9pZmRlZihbJDFdLAorCSAgW200X2lmKG00X2luZGV4KFskM11fbTRfZGVmbihbJDFdKVskM10sIFskMyQyJDNdKSwgWy0xXSwKKwkJIFttNF9hcHBlbmQoWyQxXSwgWyQyXSwgWyQzXSkkNF0sIFskNV0pXSwKKwkgIFttNF9kZWZpbmUoWyQxXSwgWyQyXSkkNF0pXSkKKworIyBtNF9hcHBlbmRfdW5pcV93KE1BQ1JPLU5BTUUsIFNUUklOR1MpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRm9yIGVhY2ggb2YgdGhlIHdvcmRzIGluIHRoZSB3aGl0ZXNwYWNlIHNlcGFyYXRlZCBsaXN0IFNUUklOR1MsIGFwcGVuZAorIyBvbmx5IHRoZSB1bmlxdWUgc3RyaW5ncyB0byB0aGUgZGVmaW5pdGlvbiBvZiBNQUNSTy1OQU1FLgorIworIyBVc2UgX200X2RlZm4gZm9yIHNwZWVkLgorbTRfZGVmaW5lKFttNF9hcHBlbmRfdW5pcV93XSwKK1ttNF9tYXBfYXJnc193KFskMl0sIFtfbTRfYXBwZW5kX3VuaXEoWyQxXSxdLCBbLCBbIF0pXSldKQorCisKKyMgbTRfZXNjYXBlKFNUUklORykKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0IHF1b3RlZCBTVFJJTkcsIGJ1dCB3aXRoIGVtYmVkZGVkICMsICQsIFsgYW5kIF0gdHVybmVkIGludG8KKyMgcXVhZHJpZ3JhcGhzLgorIworIyBJdCBpcyBmYXN0ZXIgdG8gY2hlY2sgaWYgU1RSSU5HIGlzIGFscmVhZHkgZ29vZCB1c2luZyBtNF90cmFuc2xpdAorIyB0aGFuIHRvIGJsaW5kbHkgcGVyZm9ybSBmb3VyIG00X2JwYXRzdWJzdC4KKyMKKyMgQmVjYXVzZSB0aGUgdHJhbnNsaXQgaXMgc3RyaXBwaW5nIHF1b3RlcywgaXQgbXVzdCBhbHNvIG5ldXRyYWxpemUKKyMgYW55dGhpbmcgdGhhdCBtaWdodCBiZSBpbiBhIG1hY3JvIG5hbWUsIGFzIHdlbGwgYXMgY29tbWVudHMsIGNvbW1hcywKKyMgYW5kIHBhcmVudGhlc2VzLiAgQWxsIHRoZSBwcm9ibGVtIGNoYXJhY3RlcnMgYXJlIHVuaWZpZWQgc28gdGhhdCBhCisjIHNpbmdsZSBtNF9pbmRleCBjYW4gc2NhbiB0aGUgcmVzdWx0LgorIworIyBSYXRoZXIgdGhhbiBleHBhbmQgbTRfZGVmbiBldmVyeSB0aW1lIG00X2VzY2FwZSBpcyBleHBhbmRlZCwgd2UKKyMgaW5saW5lIGl0cyBleHBhbnNpb24gdXAgZnJvbnQuCittNF9kZWZpbmUoW200X2VzY2FwZV0sCitbbTRfaWYobTRfaW5kZXgobTRfdHJhbnNsaXQoWyQxXSwKKyAgIFtbXSMsKCldXW00X2RxdW90ZShtNF9kZWZuKFttNF9jcl9zeW1ib2xzMl0pKVssIFskJCRdKSwgWyRdKSwKKyAgWy0xXSwgW200X2VjaG9dLCBbXyQwXSkoWyQxXSldKQorCittNF9kZWZpbmUoW19tNF9lc2NhcGVdLAorW200X2NoYW5nZXF1b3RlKFstPTx7KF0sWyl9Pj0tXSldZG5sCitbbTRfYnBhdHN1YnN0KG00X2JwYXRzdWJzdChtNF9icGF0c3Vic3QobTRfYnBhdHN1YnN0KAorCSAgLT08eygtPTx7KC09PHsoLT08eygtPTx7KCQxKX0+PS0pfT49LSl9Pj0tKX0+PS0pfT49LSwKKwktPTx7KCMpfT49LSwgLT08eyhAJTpAKX0+PS0pLAorICAgICAgLT08eyhcWyl9Pj0tLCAtPTx7KEA8OkApfT49LSksCisgICAgLT08eyhcXSl9Pj0tLCAtPTx7KEA6PkApfT49LSksCisgIC09PHsoXCQpfT49LSwgLT08eyhAU3xAKX0+PS0pbTRfY2hhbmdlcXVvdGUoWyxdKV0pCisKKworIyBtNF90ZXh0X3dyYXAoU1RSSU5HLCBbUFJFRklYXSwgW0ZJUlNULVBSRUZJWF0sIFtXSURUSF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhwYW5kcyBpbnRvIFNUUklORyB3cmFwcGVkIHRvIGhvbGQgaW4gV0lEVEggY29sdW1ucyAoZGVmYXVsdCA9IDc5KS4KKyMgSWYgUFJFRklYIGlzIGdpdmVuLCBlYWNoIGxpbmUgaXMgcHJlZml4ZWQgd2l0aCBpdC4gIElmIEZJUlNULVBSRUZJWCBpcworIyBzcGVjaWZpZWQsIHRoZW4gdGhlIGZpcnN0IGxpbmUgaXMgcHJlZml4ZWQgd2l0aCBpdC4gIEFzIGEgc3BlY2lhbCBjYXNlLAorIyBpZiB0aGUgbGVuZ3RoIG9mIEZJUlNULVBSRUZJWCBpcyBncmVhdGVyIHRoYW4gdGhhdCBvZiBQUkVGSVgsIHRoZW4KKyMgRklSU1QtUFJFRklYIHdpbGwgYmUgbGVmdCBhbG9uZSBvbiB0aGUgZmlyc3QgbGluZS4KKyMKKyMgTm8gZXhwYW5zaW9uIG9jY3VycyBvbiB0aGUgY29udGVudHMgU1RSSU5HLCBQUkVGSVgsIG9yIEZJUlNULVBSRUZJWCwKKyMgYWx0aG91Z2ggcXVhZHJpZ3JhcGhzIGFyZSBjb3JyZWN0bHkgcmVjb2duaXplZC4gIE1vcmUgcHJlY2lzZWx5LAorIyB5b3UgbWF5IHJlZGVmaW5lIG00X3FsZW4gdG8gcmVjb2duaXplIHdoYXRldmVyIGVzY2FwZSBzZXF1ZW5jZXMgdGhhdAorIyB5b3Ugd2lsbCBwb3N0LXByb2Nlc3MuCisjCisjIFR5cGljYWwgb3V0cHV0cyBhcmU6CisjCisjIG00X3RleHRfd3JhcChbU2hvcnQgc3RyaW5nICovXSwgWyAgIF0sIFsvKiBdLCAyMCkKKyMgID0+IC8qIFNob3J0IHN0cmluZyAqLworIworIyBtNF90ZXh0X3dyYXAoW011Y2ggbG9uZ2VyIHN0cmluZyAqL10sIFsgICBdLCBbLyogXSwgMjApCisjICA9PiAvKiBNdWNoIGxvbmdlcgorIyAgPT4gICAgc3RyaW5nICovCisjCisjIG00X3RleHRfd3JhcChbU2hvcnQgZG9jLl0sIFsgICAgICAgICAgXSwgWyAgLS1zaG9ydCBdLCAzMCkKKyMgID0+ICAgLS1zaG9ydCBTaG9ydCBkb2MuCisjCisjIG00X3RleHRfd3JhcChbU2hvcnQgZG9jLl0sIFsgICAgICAgICAgXSwgWyAgLS10b28td2lkZSBdLCAzMCkKKyMgID0+ICAgLS10b28td2lkZQorIyAgPT4gICAgICAgICAgIFNob3J0IGRvYy4KKyMKKyMgbTRfdGV4dF93cmFwKFtTdXBlciBsb25nIGRvY3VtZW50YXRpb24uXSwgWyAgICAgICAgICBdLCBbICAtLXRvby13aWRlIF0sIDMwKQorIyAgPT4gICAtLXRvby13aWRlCisjICA9PiAgICAgIFN1cGVyIGxvbmcKKyMgID0+ICAgICAgZG9jdW1lbnRhdGlvbi4KKyMKKyMgRklYTUU6IHRoZXJlIGlzIG5vIGNoZWNraW5nIG9mIGEgbG9uZ2VyIFBSRUZJWCB0aGFuIFdJRFRILCBidXQgZG8KKyMgd2UgcmVhbGx5IHdhbnQgdG8gYm90aGVyIHdpdGggcGVvcGxlIHRyeWluZyBlYWNoIHNpbmdsZSBjb3JuZXIKKyMgb2YgYSBzb2Z0d2FyZT8KKyMKKyMgVGhpcyBtYWNybyBkb2VzIG5vdCBsZWF2ZSBhIHRyYWlsaW5nIHNwYWNlIGJlaGluZCB0aGUgbGFzdCB3b3JkIG9mIGEgbGluZSwKKyMgd2hpY2ggY29tcGxpY2F0ZXMgaXQgYSBiaXQuICBUaGUgYWxnb3JpdGhtIGlzIG90aGVyd2lzZSBzdHVwaWQgYW5kIHNpbXBsZToKKyMgYWxsIHRoZSB3b3JkcyBhcmUgcHJlY2VkZWQgYnkgbTRfU2VwYXJhdG9yIHdoaWNoIGlzIGRlZmluZWQgdG8gZW1wdHkgZm9yCisjIHRoZSBmaXJzdCB3b3JkLCBhbmQgdGhlbiBgICcgKHNpbmdsZSBzcGFjZSkgZm9yIGFsbCB0aGUgb3RoZXJzLgorIworIyBUaGUgYWxnb3JpdGhtIHVzZXMgYSBoZWxwZXIgdGhhdCB1c2VzICQyIHRocm91Z2ggJDQgZGlyZWN0bHksIHJhdGhlciB0aGFuCisjIHVzaW5nIGxvY2FsIHZhcmlhYmxlcywgdG8gYXZvaWQgbTRfZGVmbiBvdmVyaGVhZCwgb3IgZXhwYW5zaW9uIHN3YWxsb3dpbmcKKyMgYW55ICQuICBJdCBhbHNvIGJ5cGFzc2VzIG00X3BvcGRlZiBvdmVyaGVhZCB3aXRoIF9tNF9wb3BkZWYgc2luY2Ugbm8gdXNlcgorIyBtYWNybyBleHBhbnNpb24gb2NjdXJzIGluIHRoZSBtZWFudGltZS4gIEFsc28sIHRoZSBkZWZpbml0aW9uIGlzIHdyaXR0ZW4KKyMgd2l0aCBtNF9kbywgdG8gYXZvaWQgdGltZSB3YXN0ZWQgb24gZG5sIGR1cmluZyBleHBhbnNpb24gKHNpbmNlIHRoaXMgaXMKKyMgYWxyZWFkeSBhIHRpbWUtY29uc3VtaW5nIG1hY3JvKS4KK200X2RlZmluZShbbTRfdGV4dF93cmFwXSwKK1tfJDAobTRfZXNjYXBlKFskMV0pLCBbJDJdLCBtNF9kZWZhdWx0X3F1b3RlZChbJDNdLCBbJDJdKSwKKyAgICAgbTRfZGVmYXVsdF9xdW90ZWQoWyQ0XSwgWzc5XSkpXSkKKworbTRfZGVmaW5lKFtfbTRfdGV4dF93cmFwXSwKK200X2RvKGRubCBzZXQgdXAgbG9jYWwgdmFyaWFibGVzLCB0byBhdm9pZCByZXBlYXRlZCBjYWxjdWxhdGlvbnMKK1tbbTRfcHVzaGRlZihbbTRfSW5kZW50XSwgbTRfcWxlbihbJDJdKSldXSwKK1tbbTRfcHVzaGRlZihbbTRfQ3Vyc29yXSwgbTRfcWxlbihbJDNdKSldXSwKK1tbbTRfcHVzaGRlZihbbTRfU2VwYXJhdG9yXSwgW200X2RlZmluZShbbTRfU2VwYXJhdG9yXSwgWyBdKV0pXV0sCitkbmwgZXhwYW5kIHRoZSBmaXJzdCBwcmVmaXgsIHRoZW4gY2hlY2sgaXRzIGxlbmd0aCB2cy4gcmVndWxhciBwcmVmaXgKK2RubCBzYW1lIGxlbmd0aDogbm90aGluZyBzcGVjaWFsCitkbmwgcHJlZml4MSBsb25nZXI6IG91dHB1dCBvbiBsaW5lIGJ5IGl0c2VsZiwgYW5kIHJlc2V0IGN1cnNvcgorZG5sIHByZWZpeDEgc2hvcnRlcjogcGFkIHRvIGxlbmd0aCBvZiBwcmVmaXgsIGFuZCByZXNldCBjdXJzb3IKK1tbWyQzXW00X2NvbmQoW200X0N1cnNvcl0sIG00X0luZGVudCwgW10sCisJICAgICAgW200X2V2YWwobTRfQ3Vyc29yID4gbTRfSW5kZW50KV0sIFsxXSwgWworWyQyXW00X2RlZmluZShbbTRfQ3Vyc29yXSwgbTRfSW5kZW50KV0sCisJICAgICAgW200X2Zvcm1hdChbJSpzXSwgbTRfbWF4KFswXSwKKyAgbTRfZXZhbChtNF9JbmRlbnQgLSBtNF9DdXJzb3IpKSwgW10pbTRfZGVmaW5lKFttNF9DdXJzb3JdLCBtNF9JbmRlbnQpXSldXSwKK2RubCBub3csIGZvciBlYWNoIHdvcmQsIGNvbXB1dGUgdGhlIGN1cnNlciBhZnRlciB0aGUgd29yZCBpcyBvdXRwdXQsIHRoZW4KK2RubCBjaGVjayBpZiB0aGUgY3Vyc29yIHdvdWxkIGV4Y2VlZCB0aGUgd3JhcCBjb2x1bW4KK2RubCBpZiBzbywgcmVzZXQgY3Vyc29yLCBhbmQgaW5zZXJ0IG5ld2xpbmUgYW5kIHByZWZpeAorZG5sIGlmIG5vdCwgaW5zZXJ0IHRoZSBzZXBhcmF0b3IgKHVzdWFsbHkgYSBzcGFjZSkKK2RubCBlaXRoZXIgd2F5LCBpbnNlcnQgdGhlIHdvcmQKK1tbbTRfbWFwX2FyZ3NfdyhbJDFdLCBbJDBfd29yZChdLCBbLCBbJDJdLCBbJDRdKV0pXV0sCitkbmwgZmluYWxseSwgY2xlYW4gdXAgdGhlIGxvY2FsIHZhcmlhYmxlcworW1tfbTRfcG9wZGVmKFttNF9TZXBhcmF0b3JdLCBbbTRfQ3Vyc29yXSwgW200X0luZGVudF0pXV0pKQorCittNF9kZWZpbmUoW19tNF90ZXh0X3dyYXBfd29yZF0sCitbbTRfZGVmaW5lKFttNF9DdXJzb3JdLCBtNF9ldmFsKG00X0N1cnNvciArIG00X3FsZW4oWyQxXSkgKyAxKSldZG5sCitbbTRfaWYobTRfZXZhbChtNF9DdXJzb3IgPiAoWyQzXSkpLAorICAgICAgWzFdLCBbbTRfZGVmaW5lKFttNF9DdXJzb3JdLCBtNF9ldmFsKG00X0luZGVudCArIG00X3FsZW4oWyQxXSkgKyAxKSkKK1skMl1dLAorICAgICAgW200X1NlcGFyYXRvcltdXSlbJDFdXSkKKworIyBtNF90ZXh0X2JveChNRVNTQUdFLCBbRlJBTUUtQ0hBUkFDVEVSID0gYC0nXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFR1cm4gTUVTU0FHRSBpbnRvOgorIyAgIyMgLS0tLS0tLSAjIworIyAgIyMgTUVTU0FHRSAjIworIyAgIyMgLS0tLS0tLSAjIworIyB1c2luZyBGUkFNRS1DSEFSQUNURVIgaW4gdGhlIGJvcmRlci4KKyMKKyMgUXVhZHJpZ3JhcGhzIGFyZSBjb3JyZWN0bHkgcmVjb2duaXplZC4gIE1vcmUgcHJlY2lzZWx5LCB5b3UgbWF5CisjIHJlZGVmaW5lIG00X3FsZW4gdG8gcmVjb2duaXplIHdoYXRldmVyIGVzY2FwZSBzZXF1ZW5jZXMgdGhhdCB5b3UKKyMgd2lsbCBwb3N0LXByb2Nlc3MuCittNF9kZWZpbmUoW200X3RleHRfYm94XSwKK1ttNF9wdXNoZGVmKFttNF9Cb3JkZXJdLAorCSAgICBtNF90cmFuc2xpdChtNF9mb3JtYXQoWyUqc10sIG00X2RlY3IobTRfcWxlbihfbTRfZXhwYW5kKFskMQorXSkpKSwgW10pLCBbIF0sIG00X2RlZmF1bHRfcXVvdGVkKFskMl0sIFstXSkpKV1kbmwKK1tbIyNdIG00X0JvcmRlciBbIyNdCitbIyNdICQxIFsjI10KK1sjI10gbTRfQm9yZGVyIFsjI11fbTRfcG9wZGVmKFttNF9Cb3JkZXJdKV0pCisKKworIyBtNF9xbGVuKFNUUklORykKKyMgLS0tLS0tLS0tLS0tLS0tCisjIEV4cGFuZHMgdG8gdGhlIGxlbmd0aCBvZiBTVFJJTkcgYWZ0ZXIgYXV0b200dGUgY29udmVydHMgYWxsIHF1YWRyaWdyYXBocy4KKyMKKyMgSWYgeW91IHVzZSBzb21lIG90aGVyIG1lYW5zIG9mIHBvc3QtcHJvY2Vzc2luZyBtNCBvdXRwdXQgcmF0aGVyIHRoYW4KKyMgYXV0b200dGUsIHRoZW4geW91IG1heSByZWRlZmluZSB0aGlzIG1hY3JvIHRvIHJlY29nbml6ZSB3aGF0ZXZlcgorIyBlc2NhcGUgc2VxdWVuY2VzIHlvdXIgcG9zdC1wcm9jZXNzb3Igd2lsbCBoYW5kbGUuICBGb3IgdGhhdCBtYXR0ZXIsCisjIG00X2RlZmluZShbbTRfcWxlbl0sIG00X2RlZm4oW200X2xlbl0pKSBpcyBzdWZmaWNpZW50IGlmIHlvdSBkb24ndAorIyBkbyBhbnkgcG9zdC1wcm9jZXNzaW5nLgorIworIyBBdm9pZCBicGF0c3Vic3RzIGZvciB0aGUgY29tbW9uIGNhc2Ugb2Ygbm8gcXVhZHJpZ3JhcGhzLiAgQ2FjaGUKKyMgcmVzdWx0cywgYXMgY29uZmlndXJlIHNjcmlwdHMgdGVuZCB0byBhc2sgYWJvdXQgbGVuZ3RocyBvZiBjb21tb24KKyMgc3RyaW5ncyBsaWtlIGAvKicgYW5kIGAqLycgcmF0aGVyIGZyZXF1ZW50bHkuICBNaW5pbWl6ZSB0aGUgbnVtYmVyCisjIG9mIHRpbWVzIHRoYXQgJDEgb2NjdXJzIGluIG00X3FsZW4sIHNvIHRoZXJlIGlzIGxlc3MgdGV4dCB0byBwYXJzZQorIyBvbiBhIGNhY2hlIGhpdC4KK200X2RlZmluZShbbTRfcWxlbl0sCitbbTRfaWZkZWYoWyQwLSQxXSwgW19tNF9kZWZuKFskMC1dXSwgW18kMChdKVskMV0pXSkKK200X2RlZmluZShbX200X3FsZW5dLAorW200X2RlZmluZShbbTRfcWxlbi0kMV0sCittNF9pZihtNF9pbmRleChbJDFdLCBbQF0pLCBbLTFdLCBbbTRfbGVuKFskMV0pXSwKKyAgICAgIFttNF9sZW4obTRfYnBhdHN1YnN0KFtbJDFdXSwKKwkJCSAgIFtAXChcKDw6XHw6Plx8U3xcfCU6XHxcezpcfDpcfVwpXChAXClcfCZ0QFwpXSwKKwkJCSAgIFtcM10pKV0pKV9tNF9kZWZuKFttNF9xbGVuLSQxXSldKQorCisjIG00X2NvcHlyaWdodF9jb25kZW5zZShURVhUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZGVuc2UgdGhlIGNvcHlyaWdodCBub3RpY2UgaW4gVEVYVCB0byBvbmx5IGRpc3BsYXkgdGhlIGZpbmFsCisjIHllYXIsIHdyYXBwaW5nIHRoZSByZXN1bHRzIHRvIGZpdCBpbiA4MCBjb2x1bW5zLgorbTRfZGVmaW5lKFttNF9jb3B5cmlnaHRfY29uZGVuc2VdLAorW200X3RleHRfd3JhcChtNF9icGF0c3Vic3QobTRfZmxhdHRlbihbWyQxXV0pLAorWyhDKVstCSAsMC05XSpcKFsxLTldWzAtOV1bMC05XVswLTldXCldLCBbKEMpIFwxXSkpXSkKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIDEzLiBOdW1iZXIgcHJvY2Vzc2luZy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIG00X2NtcChBLCBCKQorIyAtLS0tLS0tLS0tLS0KKyMgQ29tcGFyZSB0d28gaW50ZWdlciBleHByZXNzaW9ucy4KKyMgQSA8IEIgLT4gLTEKKyMgQSA9IEIgLT4gIDAKKyMgQSA+IEIgLT4gIDEKK200X2RlZmluZShbbTRfY21wXSwKK1ttNF9ldmFsKCgoWyQxXSkgPiAoWyQyXSkpIC0gKChbJDFdKSA8IChbJDJdKSkpXSkKKworCisjIG00X2xpc3RfY21wKEEsIEIpCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjCisjIENvbXBhcmUgdGhlIHR3byBsaXN0cyBvZiBpbnRlZ2VyIGV4cHJlc3Npb25zIEEgYW5kIEIuICBGb3IgaW5zdGFuY2U6CisjICAgbTRfbGlzdF9jbXAoWzEsIDBdLCAgICAgWzFdKSAgICAtPiAgMAorIyAgIG00X2xpc3RfY21wKFsxLCAwXSwgICAgIFsxLCAwXSkgLT4gIDAKKyMgICBtNF9saXN0X2NtcChbMSwgMl0sICAgICBbMSwgMF0pIC0+ICAxCisjICAgbTRfbGlzdF9jbXAoWzEsIDIsIDNdLCAgWzEsIDJdKSAtPiAgMQorIyAgIG00X2xpc3RfY21wKFsxLCAyLCAtM10sIFsxLCAyXSkgLT4gLTEKKyMgICBtNF9saXN0X2NtcChbMSwgMF0sICAgICBbMSwgMl0pIC0+IC0xCisjICAgbTRfbGlzdF9jbXAoWzFdLCAgICAgICAgWzEsIDJdKSAtPiAtMQorIyAgIG00X2RlZmluZShbeGFdLCBbb29wc10pZG5sCisjICAgbTRfbGlzdF9jbXAoW1sweGFdXSwgICAgWzUrNV0pICAtPiAwCisjCisjIFJhdGhlciB0aGFuIGZhY2UgdGhlIG92ZXJoZWFkIG9mIG00X2Nhc2UsIHdlIHVzZSBhIGhlbHBlciBmdW5jdGlvbiB3aG9zZQorIyBleHBhbnNpb24gaW5jbHVkZXMgdGhlIG5hbWUgb2YgdGhlIG1hY3JvIHRvIGludm9rZSBvbiB0aGUgdGFpbCwgZWl0aGVyCisjIG00X2lnbm9yZSBvciBtNF91bnF1b3RlLiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIHdoZW4gY29tcGFyaW5nCisjIGxvbmcgbGlzdHMsIHNpbmNlIGxlc3MgdGV4dCBpcyBiZWluZyBleHBhbmRlZCBmb3IgZGVjaWRpbmcgd2hlbiB0byBlbmQKKyMgcmVjdXJzaW9uLiAgVGhlIHJlY3Vyc2lvbiBpcyBiZXR3ZWVuIGEgcGFpciBvZiBtYWNyb3MgdGhhdCBhbHRlcm5hdGUKKyMgd2hpY2ggbGlzdCBpcyB0cmltbWVkIGJ5IG9uZSBlbGVtZW50OyB0aGlzIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4KKyMgY2FsbGluZyBtNF9jZHIgb24gYm90aCBsaXN0cyBmcm9tIGEgc2luZ2xlIG1hY3JvLiAgR3VhcmFudGVlIGV4YWN0bHkKKyMgb25lIGV4cGFuc2lvbiBvZiBib3RoIGxpc3RzJyBzaWRlIGVmZmVjdHMuCisjCisjIFBsZWFzZSBrZWVwIGZvcmVhY2gubTQgaW4gc3luYyB3aXRoIGFueSBhZGp1c3RtZW50cyBtYWRlIGhlcmUuCittNF9kZWZpbmUoW200X2xpc3RfY21wXSwKK1tfJDBfcmF3KG00X2RxdW90ZSgkMSksIG00X2RxdW90ZSgkMikpXSkKKworbTRfZGVmaW5lKFtfbTRfbGlzdF9jbXBfcmF3XSwKK1ttNF9pZihbJDFdLCBbJDJdLCBbMF0sIFtfbTRfbGlzdF9jbXBfMShbJDFdLCAkMildKV0pCisKK200X2RlZmluZShbX200X2xpc3RfY21wXSwKK1ttNF9pZihbJDFdLCBbXSwgWzBtNF9pZ25vcmVdLCBbJDJdLCBbMF0sIFttNF91bnF1b3RlXSwgWyQybTRfaWdub3JlXSldKQorCittNF9kZWZpbmUoW19tNF9saXN0X2NtcF8xXSwKK1tfbTRfbGlzdF9jbXBfMihbJDJdLCBbbTRfc2hpZnQyKCRAKV0sICQxKV0pCisKK200X2RlZmluZShbX200X2xpc3RfY21wXzJdLAorW19tNF9saXN0X2NtcChbJDEkM10sIG00X2NtcChbJDMrMF0sIFskMSswXSkpKAorICBbX200X2xpc3RfY21wXzEobTRfZHF1b3RlKG00X3NoaWZ0MygkQCkpLCAkMildKV0pCisKKyMgbTRfbWF4KEVYUFIsIC4uLikKKyMgbTRfbWluKEVYUFIsIC4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmV0dXJuIHRoZSBkZWNpbWFsIHZhbHVlIG9mIHRoZSBtYXhpbXVtIChvciBtaW5pbXVtKSBpbiBhIHNlcmllcyBvZgorIyBpbnRlZ2VyIGV4cHJlc3Npb25zLgorIworIyBNNCAxLjQueCBkb2Vzbid0IHByb3ZpZGUgPzouICBIZW5jZSB0aGlzIGh1Z2UgbTRfZXZhbC4gIEF2b2lkIG00X2V2YWwKKyMgaWYgYm90aCBhcmd1bWVudHMgYXJlIGlkZW50aWNhbCwgYnV0IGJlIGF3YXJlIG9mIG00X21heCgweGEsIDEwKSAoaGVuY2UKKyMgdGhlIHVzZSBvZiA8PSwgbm90IGp1c3QgPCwgaW4gdGhlIHNlY29uZCBtdWx0aXBseSkuCisjCisjIFBsZWFzZSBrZWVwIGZvcmVhY2gubTQgaW4gc3luYyB3aXRoIGFueSBhZGp1c3RtZW50cyBtYWRlIGhlcmUuCittNF9kZWZpbmUoW200X21heF0sCitbbTRfaWYoWyQjXSwgWzBdLCBbbTRfZmF0YWwoW3RvbyBmZXcgYXJndW1lbnRzIHRvICQwXSldLAorICAgICAgIFskI10sIFsxXSwgW200X2V2YWwoWyQxXSldLAorICAgICAgIFskIyQxXSwgWzIkMl0sIFttNF9ldmFsKFskMV0pXSwKKyAgICAgICBbJCNdLCBbMl0sIFtfJDAoJEApXSwKKyAgICAgICBbX200X21pbm1heChbXyQwXSwgJEApXSldKQorCittNF9kZWZpbmUoW19tNF9tYXhdLAorW200X2V2YWwoKChbJDFdKSA+IChbJDJdKSkgKiAoWyQxXSkgKyAoKFskMV0pIDw9IChbJDJdKSkgKiAoWyQyXSkpXSkKKworbTRfZGVmaW5lKFttNF9taW5dLAorW200X2lmKFskI10sIFswXSwgW200X2ZhdGFsKFt0b28gZmV3IGFyZ3VtZW50cyB0byAkMF0pXSwKKyAgICAgICBbJCNdLCBbMV0sIFttNF9ldmFsKFskMV0pXSwKKyAgICAgICBbJCMkMV0sIFsyJDJdLCBbbTRfZXZhbChbJDFdKV0sCisgICAgICAgWyQjXSwgWzJdLCBbXyQwKCRAKV0sCisgICAgICAgW19tNF9taW5tYXgoW18kMF0sICRAKV0pXSkKKworbTRfZGVmaW5lKFtfbTRfbWluXSwKK1ttNF9ldmFsKCgoWyQxXSkgPCAoWyQyXSkpICogKFskMV0pICsgKChbJDFdKSA+PSAoWyQyXSkpICogKFskMl0pKV0pCisKKyMgX200X21pbm1heChNRVRIT0QsIEFSRzEsIEFSRzIuLi4pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb21tb24gcmVjdXJzaW9uIGNvZGUgZm9yIG00X21heCBhbmQgbTRfbWluLiAgTUVUSE9EIG11c3QgYmUgX200X21heAorIyBvciBfbTRfbWluLCBhbmQgdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCB0d28gYXJndW1lbnRzIHRvIGNvbWJpbmUuCisjCisjIFBsZWFzZSBrZWVwIGZvcmVhY2gubTQgaW4gc3luYyB3aXRoIGFueSBhZGp1c3RtZW50cyBtYWRlIGhlcmUuCittNF9kZWZpbmUoW19tNF9taW5tYXhdLAorW200X2lmKFskI10sIFszXSwgWyQxKFskMl0sIFskM10pXSwKKyAgICAgICBbJDAoWyQxXSwgJDEoWyQyXSwgWyQzXSksIG00X3NoaWZ0MygkQCkpXSldKQorCisKKyMgbTRfc2lnbihBKQorIyAtLS0tLS0tLS0tCisjIFRoZSBzaWduIG9mIHRoZSBpbnRlZ2VyIGV4cHJlc3Npb24gQS4KK200X2RlZmluZShbbTRfc2lnbl0sCitbbTRfZXZhbCgoKFskMV0pID4gMCkgLSAoKFskMV0pIDwgMCkpXSkKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgMTQuIFZlcnNpb24gcHJvY2Vzc2luZy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIG00X3ZlcnNpb25fdW5sZXR0ZXIoVkVSU0lPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBOb3JtYWxpemUgYmV0YSB2ZXJzaW9uIG51bWJlcnMgd2l0aCBsZXR0ZXJzIHRvIG51bWVyaWMgZXhwcmVzc2lvbnMsIHdoaWNoCisjIGNhbiB0aGVuIGJlIGhhbmRlZCB0byBtNF9ldmFsIGZvciB0aGUgcHVycG9zZSBvZiBjb21wYXJpc29uLgorIworIyAgIE5sIC0+IChOKzEpLi0xLihsIykKKyMKKyMgZm9yIGV4YW1wbGU6CisjICAgWzIuMTRhXSAtPiBbMCwyLDE0KzEsLTEsWzByMzY6YV1dIC0+IDIuMTUuLTEuMTAKKyMgICBbMi4xNGJdIC0+IFswLDIsMTUrMSwtMSxbMHIzNjpiXV0gLT4gMi4xNS4tMS4xMQorIyAgIFsyLjYxYWEuYl0gLT4gWzAsMi42MSwxLC0xLFswcjM2OmFhXSwrMSwtMSxbMHIzNjpiXV0gLT4gMi42Mi4tMS4zNzAuMS4tMS4xMQorIyAgIFswOF0gLT4gWzAsWzByMTA6MF04XSAtPiA4CisjCisjIFRoaXMgbWFjcm8gZXhwZWN0cyByZWFzb25hYmxlIHZlcnNpb24gbnVtYmVycywgYnV0IGNhbiBoYW5kbGUgZG91YmxlCisjIGxldHRlcnMgYW5kIGRvZXMgbm90IGV4cGFuZCBhbnkgbWFjcm9zLiAgT3JpZ2luYWwgdmVyc2lvbiBzdHJpbmdzIGNhbgorIyB1c2UgYm90aCBgLicgYW5kIGAtJyBzZXBhcmF0b3JzLgorIworIyBJbmxpbmUgY29uc3RhbnQgZXhwYW5zaW9ucywgdG8gYXZvaWQgbTRfZGVmbiBvdmVyaGVhZC4KKyMgX200X3ZlcnNpb25fdW5sZXR0ZXIgaXMgdGhlIHJlYWwgd29ya2hvcnNlIHVzZWQgYnkgbTRfdmVyc2lvbl9jb21wYXJlLAorIyBidXQgc2luY2UgWzByMzY6YV0gYW5kIGNvbW1hcyBhcmUgbGVzcyByZWFkYWJsZSB0aGFuIDEwIGFuZCBkb3RzLCB3ZQorIyBwcm92aWRlIGEgd3JhcHBlciBmb3IgaHVtYW4gdXNlLgorbTRfZGVmaW5lKFttNF92ZXJzaW9uX3VubGV0dGVyXSwKK1ttNF9zdWJzdHIobTRfbWFwX2FyZ3MoWy5tNF9ldmFsXSwgbTRfdW5xdW90ZShfJDAoWyQxXSkpKSwgWzNdKV0pCittNF9kZWZpbmUoW19tNF92ZXJzaW9uX3VubGV0dGVyXSwKK1ttNF9icGF0c3Vic3QobTRfYnBhdHN1YnN0KG00X3RyYW5zbGl0KFtbW1swLCQxXV1dXSwgWy4tXSwgWywsXSksXWRubAorbTRfZHF1b3RlKG00X2RxdW90ZShtNF9kZWZuKFttNF9jcl9MZXR0ZXJzXSkpKVtbK10sCisJICAgICAgWysxLC0xLFswcjM2OlwmXV0pLCBbLDBdLCBbLFswcjEwOjBdXSldKQorCisKKyMgbTRfdmVyc2lvbl9jb21wYXJlKFZFUlNJT04tMSwgVkVSU0lPTi0yKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbXBhcmUgdGhlIHR3byB2ZXJzaW9uIG51bWJlcnMgYW5kIGV4cGFuZCBpbnRvCisjICAtMSBpZiBWRVJTSU9OLTEgPCBWRVJTSU9OLTIKKyMgICAwIGlmICAgICAgICAgICA9CisjICAgMSBpZiAgICAgICAgICAgPgorIworIyBTaW5jZSBfbTRfdmVyc2lvbl91bmxldHRlciBkb2VzIG5vdCBvdXRwdXQgc2lkZSBlZmZlY3RzLCB3ZSBjYW4KKyMgc2FmZWx5IGJ5cGFzcyB0aGUgb3ZlcmhlYWQgb2YgbTRfdmVyc2lvbl9jbXAuCittNF9kZWZpbmUoW200X3ZlcnNpb25fY29tcGFyZV0sCitbX200X2xpc3RfY21wX3JhdyhfbTRfdmVyc2lvbl91bmxldHRlcihbJDFdKSwgX200X3ZlcnNpb25fdW5sZXR0ZXIoWyQyXSkpXSkKKworCisjIG00X1BBQ0tBR0VfTkFNRQorIyBtNF9QQUNLQUdFX1RBUk5BTUUKKyMgbTRfUEFDS0FHRV9WRVJTSU9OCisjIG00X1BBQ0tBR0VfU1RSSU5HCisjIG00X1BBQ0tBR0VfQlVHUkVQT1JUCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmIG00c3VnYXIvdmVyc2lvbi5tNCBpcyBwcmVzZW50LCB0aGVuIGRlZmluZSB2ZXJzaW9uIHN0cmluZ3MuICBUaGlzCisjIGZpbGUgaXMgb3B0aW9uYWwsIHByb3ZpZGVkIGJ5IEF1dG9jb25mIGJ1dCBhYnNlbnQgaW4gQmlzb24uCittNF9zaW5jbHVkZShbbTRzdWdhci92ZXJzaW9uLm00XSkKKworCisjIG00X3ZlcnNpb25fcHJlcmVxKFZFUlNJT04sIFtJRi1PS10sIFtJRi1OT1QgPSBGQUlMXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0aGlzIEF1dG9jb25mIHZlcnNpb24gYWdhaW5zdCBWRVJTSU9OLgorbTRfZGVmaW5lKFttNF92ZXJzaW9uX3ByZXJlcV0sCittNF9pZmRlZihbbTRfUEFDS0FHRV9WRVJTSU9OXSwKK1tbbTRfaWYobTRfdmVyc2lvbl9jb21wYXJlKF1tNF9kcXVvdGUobTRfZGVmbihbbTRfUEFDS0FHRV9WRVJTSU9OXSkpWywgWyQxXSksCisJWy0xXSwKKwlbbTRfZGVmYXVsdChbJDNdLAorCQkgICAgW200X2ZhdGFsKFtBdXRvY29uZiB2ZXJzaW9uICQxIG9yIGhpZ2hlciBpcyByZXF1aXJlZF0sCisJCQkgICAgICBbNjNdKV0pXSwKKwlbJDJdKV1dLAorW1ttNF9mYXRhbChbbTRzdWdhci92ZXJzaW9uLm00IG5vdCBmb3VuZF0pXV0pKQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgMTUuIFNldCBoYW5kbGluZy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBBdXRvY29uZiBsaWtlcyB0byBjcmVhdGUgYXJiaXRyYXJpbHkgbGFyZ2Ugc2V0czsgZm9yIGV4YW1wbGUsIGFzIG9mCisjIHRoaXMgd3JpdGluZywgdGhlIGNvbmZpZ3VyZS5hYyBmb3IgY29yZXV0aWxzIHRyYWNrcyBhIHNldCBvZiBtb3JlCisjIHRoYW4gNDAwIEFDX1NVQlNULiAgSG93IGRvIHdlIHRyYWNrIGFsbCBvZiB0aGVzZSBzZXQgbWVtYmVycywKKyMgd2l0aG91dCBpbnRyb2R1Y2luZyBkdXBsaWNhdGVzPyAgV2UgY291bGQgdXNlIG00X2FwcGVuZF91bmlxLCB3aXRoCisjIHRoZSBzZXQgTkFNRSByZXNpZGluZyBpbiB0aGUgY29udGVudHMgb2YgdGhlIG1hY3JvIE5BTUUuCisjIFVuZm9ydHVuYXRlbHksIG00X2FwcGVuZF91bmlxIGlzIHF1YWRyYXRpYyBmb3Igc2V0IGNyZWF0aW9uLCBiZWNhdXNlCisjIGl0IGNvc3RzIE8obikgdG8gc2VhcmNoIHRoZSBzdHJpbmcgZm9yIGVhY2ggb2YgTyhuKSBpbnNlcnRpb25zOyBub3QKKyMgdG8gbWVudGlvbiB0aGF0IHdpdGggbTQgMS40LngsIGV2ZW4gdXNpbmcgbTRfYXBwZW5kIGlzIHNsb3csIGNvc3RpbmcKKyMgTyhuKSByYXRoZXIgdGhhbiBPKDEpIHBlciBpbnNlcnRpb24uICBPdGhlciBzZXQgb3BlcmF0aW9ucywgbm90IHVzZWQKKyMgYnkgQXV0b2NvbmYgYnV0IHN0aWxsIHBvc3NpYmxlIGJ5IG1hbmlwdWxhdGlvbiBvZiB0aGUgZGVmaW5pdGlvbgorIyB0cmFja2VkIGluIG1hY3JvIE5BTUUsIGluY2x1ZGUgTyhuKSBkZWxldGlvbiBvZiBvbmUgZWxlbWVudCBhbmQgTyhuKQorIyBjb21wdXRhdGlvbiBvZiBzZXQgc2l6ZS4gIEJlY2F1c2UgdGhlIHNldCBpcyBleHBvc2VkIHRvIHRoZSB1c2VyIHZpYQorIyB0aGUgZGVmaW5pdGlvbiBvZiBhIHNpbmdsZSBtYWNybywgd2UgY2Fubm90IGNhY2hlIGFueSBkYXRhIGFib3V0IHRoZQorIyBzZXQgd2l0aG91dCByaXNraW5nIHRoZSBjYWNoZSBiZWluZyBpbnZhbGlkYXRlZCBieSB0aGUgdXNlcgorIyByZWRlZmluaW5nIE5BTUUuCisjCisjIENhbiB3ZSBkbyBiZXR0ZXI/ICBZZXMsIGJlY2F1c2UgbTQgZ2l2ZXMgdXMgYW4gTygxKSBzZWFyY2ggZnVuY3Rpb24KKyMgZm9yIGZyZWU6IGlmZGVmLiAgQWRkaXRpb25hbGx5LCBldmVuIG00IDEuNC54IGdpdmVzIHVzIGFuIE8oMSkKKyMgaW5zZXJ0IG9wZXJhdGlvbiBmb3IgZnJlZTogcHVzaGRlZi4gIEJ1dCB0byB1c2UgdGhlc2UsIHdlIG11c3QKKyMgcmVwcmVzZW50IHRoZSBzZXQgdmlhIGEgZ3JvdXAgb2YgbWFjcm9zOyB0byBrZWVwIHRoZSBzZXQgY29uc2lzdGVudCwKKyMgd2UgbXVzdCBoaWRlIHRoZSBzZXQgc28gdGhhdCB0aGUgdXNlciBjYW4gb25seSBtYW5pcHVsYXRlIGl0IHRocm91Z2gKKyMgYWNjZXNzb3IgbWFjcm9zLiAgVGhlIGNvbnRlbnRzIG9mIHRoZSBzZXQgYXJlIG1haW50YWluZWQgdGhyb3VnaCB0d28KKyMgYWNjZXNzIHBvaW50czsgX200X3NldChbbmFtZV0pIGlzIGEgcHVzaGRlZiBzdGFjayBvZiB2YWx1ZXMgaW4gdGhlCisjIHNldCwgdXNlZnVsIGZvciBPKG4pIHRyYXZlcnNhbCBvZiB0aGUgc2V0IGNvbnRlbnRzOyB3aGlsZSB0aGUKKyMgZXhpc3RlbmNlIG9mIF9tNF9zZXQoW25hbWVdLHZhbHVlKSB3aXRoIG5vIHBhcnRpY3VsYXIgdmFsdWUgaXMKKyMgdXNlZnVsIGZvciBPKDEpIHF1ZXJ5aW5nIG9mIHNldCBtZW1iZXJzaGlwLiAgQW5kIHNpbmNlIHRoZSB1c2VyCisjIGNhbm5vdCBleHRlcm5hbGx5IG1hbmlwdWxhdGUgdGhlIHNldCwgd2UgYXJlIGZyZWUgdG8gYWRkIGFkZGl0aW9uYWwKKyMgY2FjaGluZyBtYWNyb3MgZm9yIG90aGVyIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cy4gIERlbGV0aW9uIGNhbiBiZQorIyBPKDEpIHBlciBlbGVtZW50IHJhdGhlciB0aGFuIE8obiksIGJ5IHJld29ya2luZyB0aGUgZGVmaW5pdGlvbiBvZgorIyBfbTRfc2V0KFtuYW1lXSx2YWx1ZSkgdG8gYmUgMCBvciAxIGJhc2VkIG9uIGN1cnJlbnQgbWVtYmVyc2hpcCwgYW5kCisjIGFkZGluZyBfbTRfc2V0X2NsZWFudXAobmFtZSkgdG8gZGVmZXIgdGhlIE8obikgY2xlYW51cCBvZgorIyBfbTRfc2V0KFtuYW1lXSkgdW50aWwgd2UgaGF2ZSBhbm90aGVyIHJlYXNvbiB0byBkbyBhbiBPKG4pCisjIHRyYXZlcnNhbC4gIFRoZSBleGlzdGVuY2Ugb2YgX200X3NldF9jbGVhbnVwKG5hbWUpIGNhbiB0aGVuIGJlIHVzZWQKKyMgZWxzZXdoZXJlIHRvIGRldGVybWluZSBpZiB3ZSBtdXN0IGRlcmVmZXJlbmNlIF9tNF9zZXQoW25hbWVdLHZhbHVlKSwKKyMgb3IgYXNzdW1lIHRoYXQgZGVmaW5pdGlvbiBpbXBsaWVzIHNldCBtZW1iZXJzaGlwLiAgRmluYWxseSwgc2l6ZSBjYW4KKyMgYmUgdHJhY2tlZCBpbiBhbiBPKDEpIGZhc2hpb24gd2l0aCBfbTRfc2V0X3NpemUobmFtZSkuCisjCisjIFRoZSBxdW90aW5nIGluIF9tNF9zZXQoW25hbWVdLHZhbHVlKSBpcyBjaG9zZW4gc28gdGhhdCB0aGVyZSBpcyBubworIyBhbWJpZ3VpdHkgd2l0aCBhIHNldCB3aG9zZSBuYW1lIGNvbnRhaW5zIGEgY29tbWEsIGFuZCBzbyB0aGF0IHdlIGNhbgorIyBzdXBwbHkgdGhlIHZhbHVlIHZpYSBfbTRfZGVmbihbX200X3NldChbbmFtZV0pXSkgd2l0aG91dCBuZWVkaW5nIGFueQorIyBxdW90ZSBtYW5pcHVsYXRpb24uCisKKyMgbTRfc2V0X2FkZChTRVQsIFZBTFVFLCBbSUYtVU5JUV0sIFtJRi1EVVBdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFkZCBWQUxVRSBhcyBhbiBlbGVtZW50IG9mIFNFVC4gIEV4cGFuZCBJRi1VTklRIG9uIHRoZSBmaXJzdAorIyBhZGRpdGlvbiwgYW5kIElGLURVUCBpZiBpdCBpcyBhbHJlYWR5IGluIHRoZSBzZXQuICBBZGRpdGlvbiBvZiBvbmUKKyMgZWxlbWVudCBpcyBPKDEpLCBzdWNoIHRoYXQgb3ZlcmFsbCBzZXQgY3JlYXRpb24gaXMgTyhuKS4KKyMKKyMgV2UgZG8gbm90IHdhbnQgdG8gYWRkIGEgZHVwbGljYXRlIGZvciBhIHByZXZpb3VzbHkgZGVsZXRlZCBidXQKKyMgdW5wcnVuZWQgZWxlbWVudCwgYnV0IGl0IGlzIGp1c3QgYXMgZWFzeSB0byBjaGVjayBleGlzdGVuY2UgZGlyZWN0bHkKKyMgYXMgaXQgaXMgdG8gcXVlcnkgX200X3NldF9jbGVhbnVwKCQxKS4KK200X2RlZmluZShbbTRfc2V0X2FkZF0sCitbbTRfaWZkZWYoW19tNF9zZXQoWyQxXSwkMildLAorCSAgW200X2lmKG00X2luZGlyKFtfbTRfc2V0KFskMV0sJDIpXSksIFswXSwKKwkJIFttNF9kZWZpbmUoW19tNF9zZXQoWyQxXSwkMildLAorCQkJICAgIFsxXSlfbTRfc2V0X3NpemUoWyQxXSwgW200X2luY3JdKSQzXSwgWyQ0XSldLAorCSAgW200X2RlZmluZShbX200X3NldChbJDFdLCQyKV0sCisJCSAgICAgWzFdKW00X3B1c2hkZWYoW19tNF9zZXQoWyQxXSldLAorCQkJCSAgICBbJDJdKV9tNF9zZXRfc2l6ZShbJDFdLCBbbTRfaW5jcl0pJDNdKV0pCisKKyMgbTRfc2V0X2FkZF9hbGwoU0VULCBWQUxVRS4uLikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWRkIGVhY2ggVkFMVUUgaW50byBTRVQuICBUaGlzIGlzIE8obikgaW4gdGhlIG51bWJlciBvZiBWQUxVRXMsIGFuZAorIyBjYW4gYmUgZmFzdGVyIHRoYW4gY2FsbGluZyBtNF9zZXRfYWRkIGZvciBlYWNoIFZBTFVFLgorIworIyBJbXBsZW1lbnQgdHdvIHJlY3Vyc2lvbiBoZWxwZXJzOyB0aGUgY2hlY2sgdmFyaWFudCBpcyBzbG93ZXIgYnV0CisjIGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgYW4gZWxlbWVudCBoYXMgcHJldmlvdXNseSBiZWVuIHJlbW92ZWQgYnV0CisjIG5vdCBwcnVuZWQuICBUaGUgcmVjdXJzaW9uIGhlbHBlcnMgaWdub3JlIHRoZWlyIHNlY29uZCBhcmd1bWVudCwgc28KKyMgdGhhdCB3ZSBjYW4gdXNlIHRoZSBmYXN0ZXIgbTRfc2hpZnQyIGFuZCAyIGFyZ3VtZW50cywgcmF0aGVyIHRoYW4KKyMgX200X3NoaWZ0MiBhbmQgb25lIGFyZ3VtZW50LCBhcyB0aGUgc2lnbmFsIHRvIGVuZCByZWN1cnNpb24uCisjCisjIFBsZWFzZSBrZWVwIGZvcmVhY2gubTQgaW4gc3luYyB3aXRoIGFueSBhZGp1c3RtZW50cyBtYWRlIGhlcmUuCittNF9kZWZpbmUoW200X3NldF9hZGRfYWxsXSwKK1ttNF9kZWZpbmUoW19tNF9zZXRfc2l6ZSgkMSldLCBtNF9ldmFsKG00X3NldF9zaXplKFskMV0pCisgICsgbTRfbGVuKG00X2lmZGVmKFtfbTRfc2V0X2NsZWFudXAoJDEpXSwgW18kMF9jaGVja10sIFtfJDBdKShbJDFdLCAkQCkpKSldKQorCittNF9kZWZpbmUoW19tNF9zZXRfYWRkX2FsbF0sCitbbTRfaWYoWyQjXSwgWzJdLCBbXSwKKyAgICAgICBbbTRfaWZkZWYoW19tNF9zZXQoWyQxXSwkMyldLCBbXSwKKwkJIFttNF9kZWZpbmUoW19tNF9zZXQoWyQxXSwkMyldLCBbMV0pbTRfcHVzaGRlZihbX200X3NldChbJDFdKV0sCisJICAgWyQzXSktXSkkMChbJDFdLCBtNF9zaGlmdDIoJEApKV0pXSkKKworbTRfZGVmaW5lKFtfbTRfc2V0X2FkZF9hbGxfY2hlY2tdLAorW200X2lmKFskI10sIFsyXSwgW10sCisgICAgICAgW200X3NldF9hZGQoWyQxXSwgWyQzXSkkMChbJDFdLCBtNF9zaGlmdDIoJEApKV0pXSkKKworIyBtNF9zZXRfY29udGFpbnMoU0VULCBWQUxVRSwgW0lGLVBSRVNFTlRdLCBbSUYtQUJTRU5UXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4cGFuZCBJRi1QUkVTRU5UIGlmIFNFVCBjb250YWlucyBWQUxVRSwgb3RoZXJ3aXNlIGV4cGFuZCBJRi1BQlNFTlQuCisjIFRoaXMgaXMgYWx3YXlzIE8oMSkuCittNF9kZWZpbmUoW200X3NldF9jb250YWluc10sCitbbTRfaWZkZWYoW19tNF9zZXRfY2xlYW51cCgkMSldLAorCSAgW200X2lmKG00X2lmZGVmKFtfbTRfc2V0KFskMV0sJDIpXSwKKwkJICAgIFttNF9pbmRpcihbX200X3NldChbJDFdLCQyKV0pXSwgWzBdKSwgWzFdLCBbJDNdLCBbJDRdKV0sCisJICBbbTRfaWZkZWYoW19tNF9zZXQoWyQxXSwkMildLCBbJDNdLCBbJDRdKV0pXSkKKworIyBtNF9zZXRfY29udGVudHMoU0VULCBbU0VQXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4cGFuZCB0byBhIHNpbmdsZSBzdHJpbmcgY29udGFpbmluZyBhbGwgdGhlIGVsZW1lbnRzIGluIFNFVCwKKyMgc2VwYXJhdGVkIGJ5IFNFUCwgd2l0aG91dCBtb2RpZnlpbmcgU0VULiAgTm8gcHJvdmlzaW9uIGlzIG1hZGUgZm9yCisjIGRpc2FtYmlndWF0aW5nIHNldCBlbGVtZW50cyB0aGF0IGNvbnRhaW4gbm9uLWVtcHR5IFNFUCBhcyBhCisjIHN1Yi1zdHJpbmcsIG9yIGZvciByZWNvZ25pemluZyBhIHNldCB0aGF0IGNvbnRhaW5zIG9ubHkgdGhlIGVtcHR5CisjIHN0cmluZy4gIE9yZGVyIG9mIHRoZSBvdXRwdXQgaXMgbm90IGd1YXJhbnRlZWQuICBJZiBhbnkgZWxlbWVudHMKKyMgaGF2ZSBiZWVuIHByZXZpb3VzbHkgcmVtb3ZlZCBmcm9tIHRoZSBzZXQsIHRoaXMgYWN0aW9uIHdpbGwgcHJ1bmUKKyMgdGhlIHVudXNlZCBtZW1vcnkuICBUaGlzIGlzIE8obikgaW4gdGhlIHNpemUgb2YgdGhlIHNldCBiZWZvcmUKKyMgcHJ1bmluZy4KKyMKKyMgVXNlIF9tNF9wb3BkZWYgZm9yIHNwZWVkLiAgVGhlIGV4aXN0ZW5jZSBvZiBfbTRfc2V0X2NsZWFudXAoJDEpCisjIGRldGVybWluZXMgd2hpY2ggdmVyc2lvbiBvZiBfMSBoZWxwZXIgd2UgdXNlLgorbTRfZGVmaW5lKFttNF9zZXRfY29udGVudHNdLAorW200X3NldF9tYXBfc2VwKFskMV0sIFtdLCBbXSwgW1skMl1dKV0pCisKKyMgX200X3NldF9jb250ZW50c18xKFNFVCkKKyMgX200X3NldF9jb250ZW50c18xYyhTRVQpCisjIF9tNF9zZXRfY29udGVudHNfMihTRVQsIFtQUkVdLCBbUE9TVF0sIFtTRVBdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhwYW5kIHRvIGEgbGlzdCBvZiBxdW90ZWQgZWxlbWVudHMgY3VycmVudGx5IGluIHRoZSBzZXQsIGVhY2gKKyMgc3Vycm91bmRlZCBieSBQUkUgYW5kIFBPU1QsIGFuZCBtb3ZpbmcgU0VQIGluIGZyb250IG9mIFBSRSBvbgorIyByZWN1cnNpb24uICBUbyBhdm9pZCBuZXN0aW5nIGxpbWl0IHJlc3RyaWN0aW9ucywgdGhlIGFsZ29yaXRobSBtdXN0CisjIGJlIGJyb2tlbiBpbnRvIHR3byBwYXJ0czsgXzEgZGVzdHJ1Y3RpdmVseSBjb3BpZXMgdGhlIHN0YWNrIGluCisjIHJldmVyc2UgaW50byBfbTRfc2V0XygkMSksIHByb2R1Y2luZyBubyBvdXRwdXQ7IHRoZW4gXzIKKyMgZGVzdHJ1Y3RpdmVseSBjb3BpZXMgX200X3NldF8oJDEpIGJhY2sgaW50byB0aGUgc3RhY2sgaW4gcmV2ZXJzZS4KKyMgSWYgbm8gZWxlbWVudHMgd2VyZSBkZWxldGVkLCB0aGVuIHRoaXMgdmlzaXRzIHRoZSBzZXQgaW4gdGhlIG9yZGVyCisjIHRoYXQgZWxlbWVudHMgd2VyZSBpbnNlcnRlZC4gIEJlaGF2aW9yIGlzIHVuZGVmaW5lZCBpZiBQUkUvUE9TVC9TRVAKKyMgdHJpZXMgdG8gcmVjdXJzaXZlbHkgbGlzdCBvciBtb2RpZnkgU0VUIGluIGFueSB3YXkgb3RoZXIgdGhhbgorIyBjYWxsaW5nIG00X3NldF9yZW1vdmUgb24gdGhlIGN1cnJlbnQgZWxlbWVudC4gIFVzZSBfMSBpZiBhbGwgZW50cmllcworIyBpbiB0aGUgc3RhY2sgYXJlIGd1YXJhbnRlZWQgdG8gYmUgaW4gdGhlIHNldCwgYW5kIF8xYyB0byBwcnVuZQorIyByZW1vdmVkIGVudHJpZXMuICBVc2VzIF9tNF9kZWZuIGFuZCBfbTRfcG9wZGVmIGZvciBzcGVlZC4KK200X2RlZmluZShbX200X3NldF9jb250ZW50c18xXSwKK1tfbTRfc3RhY2tfcmV2ZXJzZShbX200X3NldChbJDFdKV0sIFtfbTRfc2V0XygkMSldKV0pCisKK200X2RlZmluZShbX200X3NldF9jb250ZW50c18xY10sCitbbTRfaWZkZWYoW19tNF9zZXQoWyQxXSldLAorCSAgW200X3NldF9jb250YWlucyhbJDFdLCBfbTRfZGVmbihbX200X3NldChbJDFdKV0pLAorCQkgICBbbTRfcHVzaGRlZihbX200X3NldF8oJDEpXSwgX200X2RlZm4oW19tNF9zZXQoWyQxXSldKSldLAorCQkgICBbX200X3BvcGRlZihbX200X3NldChbJDFdLF1fbTRfZGVmbigKKyAgICAgIFtfbTRfc2V0KFskMV0pXSlbKV0pXSlfbTRfcG9wZGVmKFtfbTRfc2V0KFskMV0pXSkkMChbJDFdKV0sCisJICBbX200X3BvcGRlZihbX200X3NldF9jbGVhbnVwKCQxKV0pXSldKQorCittNF9kZWZpbmUoW19tNF9zZXRfY29udGVudHNfMl0sCitbX200X3N0YWNrX3JldmVyc2UoW19tNF9zZXRfKCQxKV0sIFtfbTRfc2V0KFskMV0pXSwKKyAgWyQyW11fbTRfZGVmbihbX200X3NldF8oJDEpXSkkM10sIFskNFtdXSldKQorCisjIG00X3NldF9kZWxldGUoU0VUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVsZXRlIGFsbCBlbGVtZW50cyBpbiBTRVQsIGFuZCByZWNsYWltIGFueSBtZW1vcnkgb2NjdXBpZWQgYnkgdGhlCisjIHNldC4gIFRoaXMgaXMgTyhuKSBpbiB0aGUgc2V0IHNpemUuCisjCisjIFVzZSBfbTRfZGVmbiBhbmQgX200X3BvcGRlZiBmb3Igc3BlZWQuCittNF9kZWZpbmUoW200X3NldF9kZWxldGVdLAorW200X2lmZGVmKFtfbTRfc2V0KFskMV0pXSwKKwkgIFtfbTRfcG9wZGVmKFtfbTRfc2V0KFskMV0sXV9tNF9kZWZuKFtfbTRfc2V0KFskMV0pXSlbKV0sCisJCSAgICAgIFtfbTRfc2V0KFskMV0pXSkkMChbJDFdKV0sCisJICBbbTRfaWZkZWYoW19tNF9zZXRfY2xlYW51cCgkMSldLAorCQkgICAgW19tNF9wb3BkZWYoW19tNF9zZXRfY2xlYW51cCgkMSldKV0pbTRfaWZkZWYoCisJCSAgICBbX200X3NldF9zaXplKCQxKV0sCisJCSAgICBbX200X3BvcGRlZihbX200X3NldF9zaXplKCQxKV0pXSldKV0pCisKKyMgbTRfc2V0X2RpZmZlcmVuY2UoU0VUMSwgU0VUMikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBhIExJU1Qgb2YgcXVvdGVkIGVsZW1lbnRzIHRoYXQgb2NjdXIgaW4gU0VUMSBidXQgbm90IFNFVDIuCisjIE91dHB1dCBhIGNvbW1hIHByaW9yIHRvIGFueSBlbGVtZW50cywgdG8gZGlzdGluZ3Vpc2ggdGhlIGVtcHR5CisjIHN0cmluZyBmcm9tIG5vIGVsZW1lbnRzLiAgVGhpcyBjYW4gYmUgZGlyZWN0bHkgdXNlZCBhcyBhIHNlcmllcyBvZgorIyBhcmd1bWVudHMsIHN1Y2ggYXMgZm9yIG00X2pvaW4sIG9yIHdyYXBwZWQgaW5zaWRlIHF1b3RlcyBmb3IgdXNlIGluCisjIG00X2ZvcmVhY2guICBPcmRlciBvZiB0aGUgb3V0cHV0IGlzIG5vdCBndWFyYW50ZWVkLgorIworIyBTaG9ydC1jaXJjdWl0IHRoZSBpZGVtcG90ZW5jZSByZWxhdGlvbi4KK200X2RlZmluZShbbTRfc2V0X2RpZmZlcmVuY2VdLAorW200X2lmKFskMV0sIFskMl0sIFtdLCBbbTRfc2V0X21hcF9zZXAoWyQxXSwgW18kMChbJDJdLF0sIFspXSldKV0pCisKK200X2RlZmluZShbX200X3NldF9kaWZmZXJlbmNlXSwKK1ttNF9zZXRfY29udGFpbnMoWyQxXSwgWyQyXSwgW10sIFssWyQyXV0pXSkKKworIyBtNF9zZXRfZHVtcChTRVQsIFtTRVBdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeHBhbmQgdG8gYSBzaW5nbGUgc3RyaW5nIGNvbnRhaW5pbmcgYWxsIHRoZSBlbGVtZW50cyBpbiBTRVQsCisjIHNlcGFyYXRlZCBieSBTRVAsIHRoZW4gZGVsZXRlIFNFVC4gIEluIGdlbmVyYWwsIGlmIHlvdSBvbmx5IG5lZWQgdG8KKyMgbGlzdCB0aGUgY29udGVudHMgb25jZSwgdGhpcyBpcyBmYXN0ZXIgdGhhbiBtNF9zZXRfY29udGVudHMuICBObworIyBwcm92aXNpb24gaXMgbWFkZSBmb3IgZGlzYW1iaWd1YXRpbmcgc2V0IGVsZW1lbnRzIHRoYXQgY29udGFpbgorIyBub24tZW1wdHkgU0VQIGFzIGEgc3ViLXN0cmluZy4gIE9yZGVyIG9mIHRoZSBvdXRwdXQgaXMgbm90CisjIGd1YXJhbnRlZWQuICBUaGlzIGlzIE8obikgaW4gdGhlIHNpemUgb2YgdGhlIHNldCBiZWZvcmUgcHJ1bmluZy4KKyMKKyMgVXNlIF9tNF9wb3BkZWYgZm9yIHNwZWVkLiAgVXNlIGV4aXN0ZW5jZSBvZiBfbTRfc2V0X2NsZWFudXAoJDEpIHRvCisjIGRlY2lkZSBpZiBtb3JlIGV4cGVuc2l2ZSByZWN1cnNpb24gaXMgbmVlZGVkLgorbTRfZGVmaW5lKFttNF9zZXRfZHVtcF0sCitbbTRfaWZkZWYoW19tNF9zZXRfc2l6ZSgkMSldLAorCSAgW19tNF9wb3BkZWYoW19tNF9zZXRfc2l6ZSgkMSldKV0pbTRfaWZkZWYoW19tNF9zZXRfY2xlYW51cCgkMSldLAorICAgIFtfJDBfY2hlY2tdLCBbXyQwXSkoWyQxXSwgW10sIFskMl0pXSkKKworIyBfbTRfc2V0X2R1bXAoU0VULCBbU0VQXSwgW1BSRVBdKQorIyBfbTRfc2V0X2R1bXBfY2hlY2soU0VULCBbU0VQXSwgW1BSRVBdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcmludCBTRVAgYW5kIHRoZSBjdXJyZW50IGVsZW1lbnQsIHRoZW4gZGVsZXRlIHRoZSBlbGVtZW50IGFuZAorIyByZWN1cnNlIHdpdGggZW1wdHkgU0VQIGNoYW5nZWQgdG8gUFJFUC4gIFRoZSBjaGVjayB2YXJpYW50IGNoZWNrcworIyB3aGV0aGVyIHRoZSBlbGVtZW50IGhhcyBiZWVuIHByZXZpb3VzbHkgcmVtb3ZlZC4gIFVzZSBfbTRfZGVmbiBhbmQKKyMgX200X3BvcGRlZiBmb3Igc3BlZWQuCittNF9kZWZpbmUoW19tNF9zZXRfZHVtcF0sCitbbTRfaWZkZWYoW19tNF9zZXQoWyQxXSldLAorCSAgW1skMl1fbTRfZGVmbihbX200X3NldChbJDFdKV0pX200X3BvcGRlZihbX200X3NldChbJDFdLF1fbTRfZGVmbigKKwkJW19tNF9zZXQoWyQxXSldKVspXSwgW19tNF9zZXQoWyQxXSldKSQwKFskMV0sIFskMiQzXSldKV0pCisKK200X2RlZmluZShbX200X3NldF9kdW1wX2NoZWNrXSwKK1ttNF9pZmRlZihbX200X3NldChbJDFdKV0sCisJICBbbTRfc2V0X2NvbnRhaW5zKFskMV0sIF9tNF9kZWZuKFtfbTRfc2V0KFskMV0pXSksCisJCQkgICBbWyQyXV9tNF9kZWZuKFtfbTRfc2V0KFskMV0pXSldKV9tNF9wb3BkZWYoCisgICAgW19tNF9zZXQoWyQxXSxdX200X2RlZm4oW19tNF9zZXQoWyQxXSldKVspXSwKKyAgICBbX200X3NldChbJDFdKV0pJDAoWyQxXSwgWyQyJDNdKV0sCisJICBbX200X3BvcGRlZihbX200X3NldF9jbGVhbnVwKCQxKV0pXSldKQorCisjIG00X3NldF9lbXB0eShTRVQsIFtJRi1FTVBUWV0sIFtJRi1FTEVNRU5UU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4cGFuZCBJRi1FTVBUWSBpZiBTRVQgaGFzIG5vIGVsZW1lbnRzLCBvdGhlcndpc2UgSUYtRUxFTUVOVFMuCittNF9kZWZpbmUoW200X3NldF9lbXB0eV0sCitbbTRfaWZkZWYoW19tNF9zZXRfc2l6ZSgkMSldLAorCSAgW200X2lmKG00X2luZGlyKFtfbTRfc2V0X3NpemUoJDEpXSksIFswXSwgWyQyXSwgWyQzXSldLCBbJDJdKV0pCisKKyMgbTRfc2V0X2ZvcmVhY2goU0VULCBWQVIsIEFDVElPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRm9yIGVhY2ggZWxlbWVudCBvZiBTRVQsIGRlZmluZSBWQVIgdG8gdGhlIGVsZW1lbnQgYW5kIGV4cGFuZAorIyBBQ1RJT04uICBBQ1RJT04gc2hvdWxkIG5vdCByZWN1cnNpdmVseSBsaXN0IFNFVCdzIGNvbnRlbnRzLCBhZGQKKyMgZWxlbWVudHMgdG8gU0VULCBub3IgZGVsZXRlIGFueSBlbGVtZW50IGZyb20gU0VUIGV4Y2VwdCB0aGUgb25lCisjIGN1cnJlbnRseSBpbiBWQVIuICBUaGUgb3JkZXIgdGhhdCB0aGUgZWxlbWVudHMgYXJlIHZpc2l0ZWQgaW4gaXMgbm90CisjIGd1YXJhbnRlZWQuICBUaGlzIGlzIGZhc3RlciB0aGFuIHRoZSBjb3JyZXNwb25kaW5nIG00X2ZvcmVhY2goW1ZBUl0sCisjICAgbTRfaW5kaXIoW200X2RxdW90ZV1tNF9zZXRfbGlzdGMoW1NFVF0pKSwgW0FDVElPTl0pCittNF9kZWZpbmUoW200X3NldF9mb3JlYWNoXSwKK1ttNF9wdXNoZGVmKFskMl0pbTRfc2V0X21hcF9zZXAoWyQxXSwgW200X2RlZmluZShbJDJdLF0sIFspJDNdKV0pCisKKyMgbTRfc2V0X2ludGVyc2VjdGlvbihTRVQxLCBTRVQyKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgYSBMSVNUIG9mIHF1b3RlZCBlbGVtZW50cyB0aGF0IG9jY3VyIGluIGJvdGggU0VUMSBvciBTRVQyLgorIyBPdXRwdXQgYSBjb21tYSBwcmlvciB0byBhbnkgZWxlbWVudHMsIHRvIGRpc3Rpbmd1aXNoIHRoZSBlbXB0eQorIyBzdHJpbmcgZnJvbSBubyBlbGVtZW50cy4gIFRoaXMgY2FuIGJlIGRpcmVjdGx5IHVzZWQgYXMgYSBzZXJpZXMgb2YKKyMgYXJndW1lbnRzLCBzdWNoIGFzIGZvciBtNF9qb2luLCBvciB3cmFwcGVkIGluc2lkZSBxdW90ZXMgZm9yIHVzZSBpbgorIyBtNF9mb3JlYWNoLiAgT3JkZXIgb2YgdGhlIG91dHB1dCBpcyBub3QgZ3VhcmFudGVlZC4KKyMKKyMgSXRlcmF0ZSBvdmVyIHRoZSBzbWFsbGVyIHNldCwgYW5kIHNob3J0LWNpcmN1aXQgdGhlIGlkZW1wb3RlbmNlCisjIHJlbGF0aW9uLgorbTRfZGVmaW5lKFttNF9zZXRfaW50ZXJzZWN0aW9uXSwKK1ttNF9pZihbJDFdLCBbJDJdLCBbbTRfc2V0X2xpc3RjKFskMV0pXSwKKyAgICAgICBtNF9ldmFsKG00X3NldF9zaXplKFskMl0pIDwgbTRfc2V0X3NpemUoWyQxXSkpLCBbMV0sIFskMChbJDJdLCBbJDFdKV0sCisgICAgICAgW200X3NldF9tYXBfc2VwKFskMV0sIFtfJDAoWyQyXSxdLCBbKV0pXSldKQorCittNF9kZWZpbmUoW19tNF9zZXRfaW50ZXJzZWN0aW9uXSwKK1ttNF9zZXRfY29udGFpbnMoWyQxXSwgWyQyXSwgWyxbJDJdXSldKQorCisjIG00X3NldF9saXN0KFNFVCkKKyMgbTRfc2V0X2xpc3RjKFNFVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBhIExJU1Qgb2YgcXVvdGVkIGVsZW1lbnRzIG9mIFNFVC4gIFRoaXMgY2FuIGJlIGRpcmVjdGx5IHVzZWQKKyMgYXMgYSBzZXJpZXMgb2YgYXJndW1lbnRzLCBzdWNoIGFzIGZvciBtNF9qb2luIG9yIG00X3NldF9hZGRfYWxsLCBvcgorIyB3cmFwcGVkIGluc2lkZSBxdW90ZXMgZm9yIHVzZSBpbiBtNF9mb3JlYWNoIG9yIG00X21hcC4gIFdpdGgKKyMgbTRfc2V0X2xpc3QsIHRoZXJlIGlzIG5vIHdheSB0byBkaXN0aW5ndWlzaCBhbiBlbXB0eSBzZXQgZnJvbSBhIHNldAorIyBjb250YWluaW5nIG9ubHkgdGhlIGVtcHR5IHN0cmluZzsgd2l0aCBtNF9zZXRfbGlzdGMsIGEgbGVhZGluZyBjb21tYQorIyBpcyBvdXRwdXQgaWYgdGhlcmUgYXJlIGFueSBlbGVtZW50cy4KK200X2RlZmluZShbbTRfc2V0X2xpc3RdLAorW200X3NldF9tYXBfc2VwKFskMV0sIFtdLCBbXSwgWyxdKV0pCisKK200X2RlZmluZShbbTRfc2V0X2xpc3RjXSwKK1ttNF9zZXRfbWFwX3NlcChbJDFdLCBbLF0pXSkKKworIyBtNF9zZXRfbWFwKFNFVCwgQUNUSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGb3IgZWFjaCBlbGVtZW50IG9mIFNFVCwgZXhwYW5kIEFDVElPTiB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50IG9mIHRoZQorIyBjdXJyZW50IGVsZW1lbnQuICBBQ1RJT04gc2hvdWxkIG5vdCByZWN1cnNpdmVseSBsaXN0IFNFVCdzIGNvbnRlbnRzLAorIyBhZGQgZWxlbWVudHMgdG8gU0VULCBub3IgZGVsZXRlIGFueSBlbGVtZW50IGZyb20gU0VUIGV4Y2VwdCB0aGUgb25lCisjIHBhc3NlZCBhcyBhbiBhcmd1bWVudC4gIFRoZSBvcmRlciB0aGF0IHRoZSBlbGVtZW50cyBhcmUgdmlzaXRlZCBpbgorIyBpcyBub3QgZ3VhcmFudGVlZC4gIFRoaXMgaXMgZmFzdGVyIHRoYW4gZWl0aGVyIG9mIHRoZSBjb3JyZXNwb25kaW5nCisjICAgbTRfbWFwX2FyZ3MoW0FDVElPTl1tNF9zZXRfbGlzdGMoW1NFVF0pKQorIyAgIG00X3NldF9mb3JlYWNoKFtTRVRdLCBbVkFSXSwgW0FDVElPTihtNF9kZWZuKFtWQVJdKSldKQorbTRfZGVmaW5lKFttNF9zZXRfbWFwXSwKK1ttNF9zZXRfbWFwX3NlcChbJDFdLCBbJDIoXSwgWyldKV0pCisKKyMgbTRfc2V0X21hcF9zZXAoU0VULCBbUFJFXSwgW1BPU1RdLCBbU0VQXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRm9yIGVhY2ggZWxlbWVudCBvZiBTRVQsIGV4cGFuZCBQUkVbdmFsdWVdUE9TVFtdLCBhbmQgZXhwYW5kIFNFUAorIyBiZXR3ZWVuIGVsZW1lbnRzLgorbTRfZGVmaW5lKFttNF9zZXRfbWFwX3NlcF0sCitbbTRfaWZkZWYoW19tNF9zZXRfY2xlYW51cCgkMSldLCBbX200X3NldF9jb250ZW50c18xY10sCisJICBbX200X3NldF9jb250ZW50c18xXSkoWyQxXSlfbTRfc2V0X2NvbnRlbnRzXzIoJEApXSkKKworIyBtNF9zZXRfcmVtb3ZlKFNFVCwgVkFMVUUsIFtJRi1QUkVTRU5UXSwgW0lGLUFCU0VOVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSWYgVkFMVUUgaXMgYW4gZWxlbWVudCBvZiBTRVQsIGRlbGV0ZSBpdCBhbmQgZXhwYW5kIElGLVBSRVNFTlQuCisjIE90aGVyd2lzZSBleHBhbmQgSUYtQUJTRU5ULiAgRGVsZXRpbmcgYSBzaW5nbGUgdmFsdWUgaXMgTygxKSwKKyMgYWx0aG91Z2ggaXQgbGVhdmVzIG1lbW9yeSBvY2N1cGllZCB1bnRpbCB0aGUgbmV4dCBPKG4pIHRyYXZlcnNhbCBvZgorIyB0aGUgc2V0IHdoaWNoIHdpbGwgY29tcGFjdCB0aGUgc2V0LgorIworIyBPcHRpbWl6ZSBpZiB0aGUgZWxlbWVudCBiZWluZyByZW1vdmVkIGlzIHRoZSBtb3N0IHJlY2VudGx5IGFkZGVkLAorIyBzaW5jZSBkZWZpbmluZyBfbTRfc2V0X2NsZWFudXAoJDEpIHNsb3dzIGRvd24gc28gbWFueSBvdGhlciBtYWNyb3MuCisjIEluIHBhcnRpY3VsYXIsIHRoaXMgcGxheXMgd2VsbCB3aXRoIG00X3NldF9mb3JlYWNoIGFuZCBtNF9zZXRfbWFwLgorbTRfZGVmaW5lKFttNF9zZXRfcmVtb3ZlXSwKK1ttNF9zZXRfY29udGFpbnMoWyQxXSwgWyQyXSwgW19tNF9zZXRfc2l6ZShbJDFdLAorICAgIFttNF9kZWNyXSltNF9pZihfbTRfZGVmbihbX200X3NldChbJDFdKV0pLCBbJDJdLAorCQkgICAgW19tNF9wb3BkZWYoW19tNF9zZXQoWyQxXSwkMildLCBbX200X3NldChbJDFdKV0pXSwKKwkJICAgIFttNF9kZWZpbmUoW19tNF9zZXRfY2xlYW51cCgkMSldKW00X2RlZmluZSgKKwkJICAgICAgW19tNF9zZXQoWyQxXSwkMildLCBbMF0pXSkkM10sIFskNF0pXSkKKworIyBtNF9zZXRfc2l6ZShTRVQpCisjIC0tLS0tLS0tLS0tLS0tLS0KKyMgRXhwYW5kIHRvIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgY3VycmVudGx5IGluIFNFVC4gIFRoaXMgb3BlcmF0aW9uCisjIGlzIE8oMSksIGFuZCB0aHVzIG1vcmUgZWZmaWNpZW50IHRoYW4gbTRfY291bnQobTRfc2V0X2xpc3QoW1NFVF0pKS4KK200X2RlZmluZShbbTRfc2V0X3NpemVdLAorW200X2lmZGVmKFtfbTRfc2V0X3NpemUoJDEpXSwgW200X2luZGlyKFtfbTRfc2V0X3NpemUoJDEpXSldLCBbMF0pXSkKKworIyBfbTRfc2V0X3NpemUoU0VULCBBQ1RJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQUNUSU9OIG11c3QgYmUgZWl0aGVyIG00X2luY3Igb3IgbTRfZGVjciwgYW5kIHRoZSBzaXplIG9mIFNFVCBpcworIyBjaGFuZ2VkIGFjY29yZGluZ2x5LiAgSWYgdGhlIHNldCBpcyBlbXB0eSwgQUNUSU9OIG11c3Qgbm90IGJlCisjIG00X2RlY3IuCittNF9kZWZpbmUoW19tNF9zZXRfc2l6ZV0sCitbbTRfZGVmaW5lKFtfbTRfc2V0X3NpemUoJDEpXSwKKwkgICBtNF9pZmRlZihbX200X3NldF9zaXplKCQxKV0sIFskMihtNF9pbmRpcihbX200X3NldF9zaXplKCQxKV0pKV0sCisJCSAgICBbMV0pKV0pCisKKyMgbTRfc2V0X3VuaW9uKFNFVDEsIFNFVDIpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9kdWNlIGEgTElTVCBvZiBkb3VibGUgcXVvdGVkIGVsZW1lbnRzIHRoYXQgb2NjdXIgaW4gZWl0aGVyIFNFVDEKKyMgb3IgU0VUMiwgd2l0aG91dCBkdXBsaWNhdGVzLiAgT3V0cHV0IGEgY29tbWEgcHJpb3IgdG8gYW55IGVsZW1lbnRzLAorIyB0byBkaXN0aW5ndWlzaCB0aGUgZW1wdHkgc3RyaW5nIGZyb20gbm8gZWxlbWVudHMuICBUaGlzIGNhbiBiZQorIyBkaXJlY3RseSB1c2VkIGFzIGEgc2VyaWVzIG9mIGFyZ3VtZW50cywgc3VjaCBhcyBmb3IgbTRfam9pbiwgb3IKKyMgd3JhcHBlZCBpbnNpZGUgcXVvdGVzIGZvciB1c2UgaW4gbTRfZm9yZWFjaC4gIE9yZGVyIG9mIHRoZSBvdXRwdXQgaXMKKyMgbm90IGd1YXJhbnRlZWQuCisjCisjIFdlIGNhbiByZWx5IG9uIHRoZSBmYWN0IHRoYXQgbTRfc2V0X2xpc3RjIHBydW5lcyBTRVQxLCBzbyB3ZSBkb24ndAorIyBuZWVkIHRvIGNoZWNrIF9tNF9zZXQoWyQxXSxlbGVtZW50KSBmb3IgMC4gIFNob3J0LWNpcmN1aXQgdGhlCisjIGlkZW1wb3RlbmNlIHJlbGF0aW9uLgorbTRfZGVmaW5lKFttNF9zZXRfdW5pb25dLAorW200X3NldF9saXN0YyhbJDFdKW00X2lmKFskMV0sIFskMl0sIFtdLAorICBbbTRfc2V0X21hcF9zZXAoWyQyXSwgW18kMChbJDFdLF0sIFspXSldKV0pCisKK200X2RlZmluZShbX200X3NldF91bmlvbl0sCitbbTRfaWZkZWYoW19tNF9zZXQoWyQxXSwkMildLCBbXSwgWyxbJDJdXSldKQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIDE2LiBGaWxlIGhhbmRsaW5nLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIEl0IGlzIGEgcmVhbCBwaXR5IHRoYXQgTTQgY29tZXMgd2l0aCBubyBtYWNyb3MgdG8gYmluZCBhIGRpdmVyc2lvbgorIyB0byBhIGZpbGUuICBTbyB3ZSBoYXZlIHRvIGRlYWwgd2l0aG91dCwgd2hpY2ggbWFrZXMgdXMgYSBsb3QgbW9yZQorIyBmcmFnaWxlIHRoYW4gd2Ugc2hvdWxkLgorCisKKyMgbTRfZmlsZV9hcHBlbmQoRklMRS1OQU1FLCBDT05URU5UKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW200X2ZpbGVfYXBwZW5kXSwKK1ttNF9zeXNjbWQoW2NhdCA+PiQxIDw8X200ZW9mCiskMgorX200ZW9mCitdKQorbTRfaWYobTRfc3lzdmFsLCBbMF0sIFtdLAorICAgICAgW200X2ZhdGFsKFskMDogY2Fubm90IHdyaXRlOiAkMV0pXSldKQorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyAxNy4gU2V0dGluZyBNNHN1Z2FyIHVwLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIF9tNF9kaXZlcnRfZGl2ZXJzaW9uIHNob3VsZCBiZSBkZWZpbmVkLgorbTRfZGl2ZXJ0X3B1c2goW0tJTExdKQorCisjIG00X2luaXQKKyMgLS0tLS0tLQorIyBJbml0aWFsaXplIHRoZSBtNHN1Z2FyIGxhbmd1YWdlLgorbTRfZGVmaW5lKFttNF9pbml0XSwKK1sjIEFsbCB0aGUgTTRzdWdhciBtYWNyb3Mgc3RhcnQgd2l0aCBgbTRfJywgZXhjZXB0IGBkbmwnIGtlcHQgYXMgaXMKKyMgZm9yIHNha2Ugb2Ygc2ltcGxpY2l0eS4KK200X3BhdHRlcm5fZm9yYmlkKFteXz9tNF9dKQorbTRfcGF0dGVybl9mb3JiaWQoW15kbmwkXSkKKworIyBJZiBfX200X3ZlcnNpb25fXyBpcyBkZWZpbmVkLCB3ZSBhc3N1bWUgdGhhdCB3ZSBhcmUgYmVpbmcgcnVuIGJ5IE00CisjIDEuNiBvciBuZXdlciwgdGh1cyAkQCByZWN1cnNpb24gaXMgbGluZWFyLCBhbmQgZGVidWdtb2RlKCtkbykKKyMgaXMgYXZhaWxhYmxlIGZvciBmYXN0ZXIgY2hlY2tzIG9mIGRlcmVmZXJlbmNpbmcgdW5kZWZpbmVkIG1hY3JvcworIyBhbmQgZm9yY2luZyBkdW1wZGVmIHRvIHByaW50IHRvIHN0ZGVyciByZWdhcmRsZXNzIG9mIGRlYnVnZmlsZS4KKyMgQnV0IGlmIGl0IGlzIG1pc3NpbmcsIHdlIGFzc3VtZSB3ZSBhcmUgYmVpbmcgcnVuIGJ5IE00IDEuNC54LCB0aGF0CisjICRAIHJlY3Vyc2lvbiBpcyBxdWFkcmF0aWMsIGFuZCB0aGF0IHdlIG5lZWQgZm9yZWFjaC1iYXNlZAorIyByZXBsYWNlbWVudCBtYWNyb3MuICBBbHNvLCBtNCBwcmlvciB0byAxLjQuOCBsb3NlcyB0cmFjayBvZiBsb2NhdGlvbgorIyBkdXJpbmcgbTR3cmFwIHRleHQ7IF9fbGluZV9fIHNob3VsZCBuZXZlciBiZSAwLgorIworIyBVc2UgdGhlIHJhdyBidWlsdGluIHRvIGF2b2lkIHRyaXBwaW5nIHVwIGluY2x1ZGUgdHJhY2luZy4KKyMgTWVhbndoaWxlLCBhdm9pZCBtNF9jb3B5LCBzaW5jZSBpdCB0ZW1wb3JhcmlseSB1bmRlZmluZXMgbTRfZGVmbi4KK200X2lmZGVmKFtfX200X3ZlcnNpb25fX10sCitbbTRfZGVidWdtb2RlKFsrZG9dKQorbTRfZGVmaW5lKFttNF9kZWZuXSwgX200X2RlZm4oW19tNF9kZWZuXSkpCittNF9kZWZpbmUoW200X2R1bXBkZWZdLCBfbTRfZGVmbihbX200X2R1bXBkZWZdKSkKK200X2RlZmluZShbbTRfcG9wZGVmXSwgX200X2RlZm4oW19tNF9wb3BkZWZdKSkKK200X2RlZmluZShbbTRfdW5kZWZpbmVdLCBfbTRfZGVmbihbX200X3VuZGVmaW5lXSkpXSwKK1ttNF9idWlsdGluKFtpbmNsdWRlXSwgW200c3VnYXIvZm9yZWFjaC5tNF0pCittNF93cmFwX2xpZm8oW200X2lmKF9fbGluZV9fLCBbMF0sIFttNF9wdXNoZGVmKFttNF9sb2NhdGlvbl0sCitdXW00X2RxdW90ZShtNF9kcXVvdGUobTRfZHF1b3RlKF9fZmlsZV9fOl9fbGluZV9fKSkpW1spXSldKV0pCisKKyMgUmV3cml0ZSB0aGUgZmlyc3QgZW50cnkgb2YgdGhlIGRpdmVyc2lvbiBzdGFjay4KK200X2RpdmVydChbS0lMTF0pCisKKyMgQ2hlY2sgdGhlIGRpdmVydCBwdXNoL3BvcCBwZXJmZWN0IGJhbGFuY2UuCisjIFNvbWUgdXNlcnMgYXJlIHByb25lIHRvIGFsc28gdXNlIG00X3dyYXAgdG8gcmVnaXN0ZXIgbGFzdC1taW51dGUKKyMgbTRfZGl2ZXJ0X3RleHQ7IHNvIGFmdGVyIG91ciBkaXZlcnNpb24gY2xlYW51cHMsIHdlIHJlc3RvcmUKKyMgS0lMTCBhcyB0aGUgYm90dG9tIG9mIHRoZSBkaXZlcnNpb24gc3RhY2suCittNF93cmFwKFttNF9wb3BkZWYoW19tNF9kaXZlcnRfZGl2ZXJzaW9uXSltNF9pZmRlZigKKyAgW19tNF9kaXZlcnRfZGl2ZXJzaW9uXSwgW200X2ZhdGFsKFskMDogdW5iYWxhbmNlZCBtNF9kaXZlcnRfcHVzaDoKK11tNF9kaXZlcnRfc3RhY2spXSlfbTRfcG9wZGVmKFtfbTRfZGl2ZXJ0X3N0YWNrXSltNF9kaXZlcnRfcHVzaChbS0lMTF0pXSkKK10pCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvY29uZi9tNHN1Z2FyL200c3VnYXIubTRmIGIvc2hhcmUvYXV0b2NvbmYvbTRzdWdhci9tNHN1Z2FyLm00ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTMxMjk5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b2NvbmYvbTRzdWdhci9tNHN1Z2FyLm00ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvY29uZi9tNHN1Z2FyL3ZlcnNpb24ubTQgYi9zaGFyZS9hdXRvY29uZi9tNHN1Z2FyL3ZlcnNpb24ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk5M2JmZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9jb25mL200c3VnYXIvdmVyc2lvbi5tNApAQCAtMCwwICsxLDEyIEBACisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIC0qLSBBdXRvY29uZiAtKi0uCisjIFZlcnNpb24gb2YgQXV0b2NvbmYuCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworbTRfZGVmaW5lKFttNF9QQUNLQUdFX05BTUVdLCAgICAgIFtHTlUgQXV0b2NvbmZdKQorbTRfZGVmaW5lKFttNF9QQUNLQUdFX1RBUk5BTUVdLCAgIFthdXRvY29uZl0pCittNF9kZWZpbmUoW200X1BBQ0tBR0VfVkVSU0lPTl0sICAgWzIuNjVdKQorbTRfZGVmaW5lKFttNF9QQUNLQUdFX1NUUklOR10sICAgIFtHTlUgQXV0b2NvbmYgMi42NV0pCittNF9kZWZpbmUoW200X1BBQ0tBR0VfQlVHUkVQT1JUXSwgW2J1Zy1hdXRvY29uZkBnbnUub3JnXSkKK200X2RlZmluZShbbTRfUEFDS0FHRV9VUkxdLCAgICAgICBbaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9jb25mL10pCittNF9kZWZpbmUoW200X1BBQ0tBR0VfWUVBUl0sICAgICAgWzIwMDldKQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9BdXRvbWFrZS9DaGFubmVsRGVmcy5wbSBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvQXV0b21ha2UvQ2hhbm5lbERlZnMucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc0MDYwMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvQXV0b21ha2UvQ2hhbm5lbERlZnMucG0KQEAgLTAsMCArMSwzOTggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA2LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworcGFja2FnZSBBdXRvbWFrZTo6Q2hhbm5lbERlZnM7CisKK3VzZSBBdXRvbWFrZTo6Q29uZmlnOworQkVHSU4KK3sKKyAgaWYgKCRwZXJsX3RocmVhZHMpCisgICAgeworICAgICAgcmVxdWlyZSB0aHJlYWRzOworICAgICAgaW1wb3J0IHRocmVhZHM7CisgICAgfQorfQordXNlIEF1dG9tYWtlOjpDaGFubmVsczsKKworPWhlYWQxIE5BTUUKKworQXV0b21ha2U6OkNoYW5uZWxEZWZzIC0gY2hhbm5lbCBkZWZpbml0aW9ucyBmb3IgQXV0b21ha2UgYW5kIGhlbHBlciBmdW5jdGlvbnMKKworPWhlYWQxIFNZTk9QU0lTCisKKyAgdXNlIEF1dG9tYWtlOjpDaGFubmVsRGVmczsKKworICBBdXRvbWFrZTo6Q2hhbm5lbERlZnM6OnVzYWdlICgpOworICBwcm9nX2Vycm9yICgkTUVTU0FHRSwgWyVPUFRJT05TXSk7CisgIGVycm9yICgkV0hFUkUsICRNRVNTQUdFLCBbJU9QVElPTlNdKTsKKyAgZXJyb3IgKCRNRVNTQUdFKTsKKyAgZmF0YWwgKCRXSEVSRSwgJE1FU1NBR0UsIFslT1BUSU9OU10pOworICBmYXRhbCAoJE1FU1NBR0UpOworICB2ZXJiICgkTUVTU0FHRSwgWyVPUFRJT05TXSk7CisgIHN3aXRjaF93YXJuaW5nICgkQ0FURUdPUlkpOworICBwYXJzZV9XQVJOSU5HUyAoKTsKKyAgcGFyc2Vfd2FybmluZyAoJE9QVElPTiwgJEFSR1VNRU5UKTsKKyAgQXV0b21ha2U6OkNoYW5uZWxEZWZzOjpzZXRfc3RyaWN0bmVzcyAoJFNUUklDVE5FU1NfTkFNRSk7CisKKz1oZWFkMSBERVNDUklQVElPTgorCitUaGlzIHBhY2thZ2VzIGRlZmluZXMgY2hhbm5lbHMgdGhhdCBjYW4gYmUgdXNlZCBpbiBBdXRvbWFrZSB0bworb3V0cHV0IGRpYWdub3N0aWNzIGFuZCBvdGhlciBtZXNzYWdlcyAodmlhIEM8bXNnKCk+KS4gIEl0IGFsc28gZGVmaW5lcworc29tZSBoZWxwZXIgZnVuY3Rpb24gdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlc2UgY2hhbm5lbHMsIGFuZCBzb21lCitzaG9ydGhhbmQgZnVuY3Rpb24gdG8gb3V0cHV0IG9uIHNwZWNpZmljIGNoYW5uZWxzLgorCis9Y3V0CisKK3VzZSA1LjAwNTsKK3VzZSBzdHJpY3Q7Cit1c2UgRXhwb3J0ZXI7CisKK3VzZSB2YXJzIHF3IChASVNBIEBFWFBPUlQpOworCitASVNBID0gcXcgKEV4cG9ydGVyKTsKK0BFWFBPUlQgPSBxdyAoJnByb2dfZXJyb3IgJmVycm9yICZmYXRhbCAmdmVyYgorCSAgICAgICZzd2l0Y2hfd2FybmluZyAmcGFyc2VfV0FSTklOR1MgJnBhcnNlX3dhcm5pbmdzKTsKKworPWhlYWQyIENIQU5ORUxTCisKK1RoZSBmb2xsb3dpbmcgY2hhbm5lbHMgY2FuIGJlIHVzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IG9mCitDPEF1dG9tYWtlOjpDaGFubmVsOjptc2c+LiAgRm9yIHNvbWUgb2YgdGhlbSB3ZSBsaXN0IGEgc2hvcnRoYW5kCitmdW5jdGlvbiB0aGF0IG1ha2VzIHRoZSBjb2RlIG1vcmUgcmVhZGFibGUuCisKKz1vdmVyIDQKKworPWl0ZW0gQzxmYXRhbD4KKworRmF0YWwgZXJyb3JzLiAgVXNlIEM8JmZhdGFsPiB0byBzZW5kIG1lc3NhZ2VzIG92ZXIgdGhpcyBjaGFubmVsLgorCis9aXRlbSBDPGVycm9yPgorCitDb21tb24gZXJyb3JzLiAgIFVzZSBDPCZlcnJvcj4gdG8gc2VuZCBtZXNzYWdlcyBvdmVyIHRoaXMgY2hhbm5lbC4KKworPWl0ZW0gQzxlcnJvci1nbnU+CisKK0Vycm9ycyByZWxhdGVkIHRvIEdOVSBTdGFuZGFyZHMuCisKKz1pdGVtIEM8ZXJyb3ItZ251L3dhcm4+CisKK0Vycm9ycyByZWxhdGVkIHRvIEdOVSBTdGFuZGFyZHMgdGhhdCBzaG91bGQgYmUgd2FybmluZ3MgaW4gYGZvcmVpZ24nIG1vZGUuCisKKz1pdGVtIEM8ZXJyb3ItZ25pdHM+CisKK0Vycm9ycyByZWxhdGVkIHRvIEdOSVRTIFN0YW5kYXJkcyAoc2lsZW50IGJ5IGRlZmF1bHQpLgorCis9aXRlbSBDPGF1dG9tYWtlPgorCitJbnRlcm5hbCBlcnJvcnMuICBVc2UgQzwmcHJvZ19lcnJvcj4gdG8gc2VuZCBtZXNzYWdlcyBvdmVyIHRoaXMgY2hhbm5lbC4KKworPWl0ZW0gQzxnbnU+CisKK1dhcm5pbmdzIHJlbGF0ZWQgdG8gR05VIENvZGluZyBTdGFuZGFyZHMuCisKKz1pdGVtIEM8b2Jzb2xldGU+CisKK1dhcm5pbmdzIGFib3V0IG9ic29sZXRlIGZlYXR1cmVzIChzaWxlbnQgYnkgZGVmYXVsdCkuCisKKz1pdGVtIEM8b3ZlcnJpZGU+CisKK1dhcm5pbmdzIGFib3V0IHVzZXIgcmVkZWZpbml0aW9ucyBvZiBBdXRvbWFrZSBydWxlcyBvcgordmFyaWFibGVzIChzaWxlbnQgYnkgZGVmYXVsdCkuCisKKz1pdGVtIEM8cG9ydGFiaWxpdHk+CisKK1dhcm5pbmdzIGFib3V0IG5vbi1wb3J0YWJsZSBjb25zdHJ1Y3RzLgorCis9aXRlbSBDPHN5bnRheD4KKworV2FybmluZ3MgYWJvdXQgd2VpcmQgc3ludGF4LCB1bnVzZWQgdmFyaWFibGVzLCB0eXBvcy4uLgorCis9aXRlbSBDPHVuc3VwcG9ydGVkPgorCitXYXJuaW5ncyBhYm91dCB1bnN1cHBvcnRlZCAob3IgbWlzLXN1cHBvcnRlZCkgZmVhdHVyZXMuCisKKz1pdGVtIEM8dmVyYj4KKworTWVzc2FnZXMgb3V0cHV0IGluIEM8LS12ZXJib3NlPiBtb2RlLiAgVXNlIEM8JnZlcmI+IHRvIHNlbmQgc3VjaCBtZXNzYWdlcy4KKworPWl0ZW0gQzxub3RlPgorCitJbmZvcm1hdGl2ZSBtZXNzYWdlcy4KKworPWJhY2sKKworPWN1dAorCisjIEluaXRpYWxpemUgb3VyIGxpc3Qgb2YgZXJyb3Ivd2FybmluZyBjaGFubmVscy4KKyMgRG8gbm90IGZvcmdldCB0byB1cGRhdGUgJnVzYWdlIGFuZCB0aGUgbWFudWFsCisjIGlmIHlvdSBhZGQgb3IgY2hhbmdlIGEgd2FybmluZyBjaGFubmVsLgorCityZWdpc3Rlcl9jaGFubmVsICdmYXRhbCcsIHR5cGUgPT4gJ2ZhdGFsJywgdW5pcV9wYXJ0ID0+IFVQX05PTkUsIG9yZGVyZWQgPT4gMDsKK3JlZ2lzdGVyX2NoYW5uZWwgJ2Vycm9yJywgdHlwZSA9PiAnZXJyb3InOworcmVnaXN0ZXJfY2hhbm5lbCAnZXJyb3ItZ251JywgdHlwZSA9PiAnZXJyb3InOworcmVnaXN0ZXJfY2hhbm5lbCAnZXJyb3ItZ251L3dhcm4nLCB0eXBlID0+ICdlcnJvcic7CityZWdpc3Rlcl9jaGFubmVsICdlcnJvci1nbml0cycsIHR5cGUgPT4gJ2Vycm9yJywgc2lsZW50ID0+IDE7CityZWdpc3Rlcl9jaGFubmVsICdhdXRvbWFrZScsIHR5cGUgPT4gJ2ZhdGFsJywgYmFja3RyYWNlID0+IDEsCisgIGhlYWRlciA9PiAoIiMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iIC4KKwkgICAgICIjIyBJbnRlcm5hbCBFcnJvciAjI1xuIiAuCisJICAgICAiIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIpLAorICBmb290ZXIgPT4gIlxuUGxlYXNlIGNvbnRhY3QgPGJ1Zy1hdXRvbWFrZVxAZ251Lm9yZz4uIiwKKyAgdW5pcV9wYXJ0ID0+IFVQX05PTkUsIG9yZGVyZWQgPT4gMDsKKworcmVnaXN0ZXJfY2hhbm5lbCAnZ251JywgdHlwZSA9PiAnd2FybmluZyc7CityZWdpc3Rlcl9jaGFubmVsICdvYnNvbGV0ZScsIHR5cGUgPT4gJ3dhcm5pbmcnLCBzaWxlbnQgPT4gMTsKK3JlZ2lzdGVyX2NoYW5uZWwgJ292ZXJyaWRlJywgdHlwZSA9PiAnd2FybmluZycsIHNpbGVudCA9PiAxOworcmVnaXN0ZXJfY2hhbm5lbCAncG9ydGFiaWxpdHknLCB0eXBlID0+ICd3YXJuaW5nJywgc2lsZW50ID0+IDE7CityZWdpc3Rlcl9jaGFubmVsICdwb3J0YWJpbGl0eS1yZWN1cnNpdmUnLCB0eXBlID0+ICd3YXJuaW5nJywgc2lsZW50ID0+IDE7CityZWdpc3Rlcl9jaGFubmVsICdzeW50YXgnLCB0eXBlID0+ICd3YXJuaW5nJzsKK3JlZ2lzdGVyX2NoYW5uZWwgJ3Vuc3VwcG9ydGVkJywgdHlwZSA9PiAnd2FybmluZyc7CisKK3JlZ2lzdGVyX2NoYW5uZWwgJ3ZlcmInLCB0eXBlID0+ICdkZWJ1ZycsIHNpbGVudCA9PiAxLCB1bmlxX3BhcnQgPT4gVVBfTk9ORSwKKyAgb3JkZXJlZCA9PiAwOworcmVnaXN0ZXJfY2hhbm5lbCAnbm90ZScsIHR5cGUgPT4gJ2RlYnVnJywgc2lsZW50ID0+IDA7CisKKz1oZWFkMiBGVU5DVElPTlMKKworPW92ZXIgNAorCis9aXRlbSBDPHVzYWdlICgpPgorCitEaXNwbGF5IHdhcm5pbmcgY2F0ZWdvcmllcy4KKworPWN1dAorCitzdWIgdXNhZ2UgKCkKK3sKKyAgcHJpbnQgIldhcm5pbmcgY2F0ZWdvcmllcyBpbmNsdWRlOgorICBgZ251JyAgICAgICAgICAgR05VIGNvZGluZyBzdGFuZGFyZHMgKGRlZmF1bHQgaW4gZ251IGFuZCBnbml0cyBtb2RlcykKKyAgYG9ic29sZXRlJyAgICAgIG9ic29sZXRlIGZlYXR1cmVzIG9yIGNvbnN0cnVjdGlvbnMKKyAgYG92ZXJyaWRlJyAgICAgIHVzZXIgcmVkZWZpbml0aW9ucyBvZiBBdXRvbWFrZSBydWxlcyBvciB2YXJpYWJsZXMKKyAgYHBvcnRhYmlsaXR5JyAgIHBvcnRhYmlsaXR5IGlzc3VlcyAoZGVmYXVsdCBpbiBnbnUgYW5kIGduaXRzIG1vZGVzKQorICBgc3ludGF4JyAgICAgICAgZHViaW91cyBzeW50YWN0aWMgY29uc3RydWN0cyAoZGVmYXVsdCkKKyAgYHVuc3VwcG9ydGVkJyAgIHVuc3VwcG9ydGVkIG9yIGluY29tcGxldGUgZmVhdHVyZXMgKGRlZmF1bHQpCisgIGBhbGwnICAgICAgICAgICBhbGwgdGhlIHdhcm5pbmdzCisgIGBuby1DQVRFR09SWScgICB0dXJuIG9mZiB3YXJuaW5ncyBpbiBDQVRFR09SWQorICBgbm9uZScgICAgICAgICAgdHVybiBvZmYgYWxsIHRoZSB3YXJuaW5ncworICBgZXJyb3InICAgICAgICAgdHJlYXQgd2FybmluZ3MgYXMgZXJyb3JzCisiOworfQorCis9aXRlbSBDPHByb2dfZXJyb3IgKCRNRVNTQUdFLCBbJU9QVElPTlNdKT4KKworU2lnbmFsIGEgcHJvZ3JhbW1pbmcgZXJyb3IgKG9uIGNoYW5uZWwgQzxhdXRvbWFrZT4pLAorZGlzcGxheSBDPCRNRVNTQUdFPiwgYW5kIGV4aXQgMS4KKworPWN1dAorCitzdWIgcHJvZ19lcnJvciAoJDslKQoreworICBteSAoJG1zZywgJW9wdHMpID0gQF87CisgIG1zZyAnYXV0b21ha2UnLCAnJywgJG1zZywgJW9wdHM7Cit9CisKKz1pdGVtIEM8ZXJyb3IgKCRXSEVSRSwgJE1FU1NBR0UsIFslT1BUSU9OU10pPgorCis9aXRlbSBDPGVycm9yICgkTUVTU0FHRSk+CisKK1VuY2F0ZWdvcml6ZWQgZXJyb3JzLgorCis9Y3V0CisKK3N1YiBlcnJvciAoJDskJSkKK3sKKyAgbXkgKCR3aGVyZSwgJG1zZywgJW9wdHMpID0gQF87CisgIG1zZyAoJ2Vycm9yJywgJHdoZXJlLCAkbXNnLCAlb3B0cyk7Cit9CisKKz1pdGVtIEM8ZmF0YWwgKCRXSEVSRSwgJE1FU1NBR0UsIFslT1BUSU9OU10pPgorCis9aXRlbSBDPGZhdGFsICgkTUVTU0FHRSk+CisKK0ZhdGFsIGVycm9ycy4KKworPWN1dAorCitzdWIgZmF0YWwgKCQ7JCUpCit7CisgIG15ICgkd2hlcmUsICRtc2csICVvcHRzKSA9IEBfOworICBtc2cgKCdmYXRhbCcsICR3aGVyZSwgJG1zZywgJW9wdHMpOworfQorCis9aXRlbSBDPHZlcmIgKCRNRVNTQUdFLCBbJU9QVElPTlNdKT4KKworQzwtLXZlcmJvc2U+IG1lc3NhZ2VzLgorCis9Y3V0CisKK3N1YiB2ZXJiICgkOyUpCit7CisgIG15ICgkbXNnLCAlb3B0cykgPSBAXzsKKyAgJG1zZyA9ICJ0aHJlYWQgIiAuIHRocmVhZHMtPnRpZCAuICI6ICIgLiAkbXNnCisgICAgaWYgJHBlcmxfdGhyZWFkczsKKyAgbXNnICd2ZXJiJywgJycsICRtc2csICVvcHRzOworfQorCis9aXRlbSBDPHN3aXRjaF93YXJuaW5nICgkQ0FURUdPUlkpPgorCitJZiBDPCRDQVRFR09SWT4gaXMgQzxtdW1ibGU+LCB0dXJuIG9uIGNoYW5uZWwgQzxtdW1ibGU+LgorSWYgaXQncyBDPG5vLW11bWJsZT4sIHR1cm4gQzxtdW1ibGU+IG9mZi4KK0Vsc2UgaGFuZGxlIEM8YWxsPiBhbmQgQzxub25lPiBmb3IgY29tcGxldGVuZXNzLgorCis9Y3V0CisKK3N1YiBzd2l0Y2hfd2FybmluZyAoJCkKK3sKKyAgbXkgKCRjYXQpID0gQF87CisgIG15ICRoYXNfbm8gPSAwOworCisgIGlmICgkY2F0ID1+IC9ebm8tKC4qKSQvKQorICAgIHsKKyAgICAgICRjYXQgPSAkMTsKKyAgICAgICRoYXNfbm8gPSAxOworICAgIH0KKworICBpZiAoJGNhdCBlcSAnYWxsJykKKyAgICB7CisgICAgICBzZXR1cF9jaGFubmVsX3R5cGUgJ3dhcm5pbmcnLCBzaWxlbnQgPT4gJGhhc19ubzsKKyAgICB9CisgIGVsc2lmICgkY2F0IGVxICdub25lJykKKyAgICB7CisgICAgICBzZXR1cF9jaGFubmVsX3R5cGUgJ3dhcm5pbmcnLCBzaWxlbnQgPT4gISAkaGFzX25vOworICAgIH0KKyAgZWxzaWYgKCRjYXQgZXEgJ2Vycm9yJykKKyAgICB7CisgICAgICAkd2FybmluZ3NfYXJlX2Vycm9ycyA9ICEgJGhhc19ubzsKKyAgICAgICMgU2V0IGV4aXQgY29kZSBpZiBQZXJsIHdhcm5zIGFib3V0IHNvbWV0aGluZworICAgICAgIyAobGlrZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcykuCisgICAgICAkU0lHeyJfX1dBUk5fXyJ9ID0KKwkkaGFzX25vID8gJ0RFRkFVTFQnIDogc3ViIHsgcHJpbnQgU1RERVJSIEBfOyAkZXhpdF9jb2RlID0gMTsgfTsKKyAgICB9CisgIGVsc2lmIChjaGFubmVsX3R5cGUgKCRjYXQpIGVxICd3YXJuaW5nJykKKyAgICB7CisgICAgICBzZXR1cF9jaGFubmVsICRjYXQsIHNpbGVudCA9PiAkaGFzX25vOworICAgICAgc2V0dXBfY2hhbm5lbCAncG9ydGFiaWxpdHktcmVjdXJzaXZlJywgc2lsZW50ID0+ICRoYXNfbm8KKyAgICAgICAgaWYgJGNhdCBlcSAncG9ydGFiaWxpdHknOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKKz1pdGVtIEM8cGFyc2VfV0FSTklOR1MgKCk+CisKK1BhcnNlIHRoZSBXQVJOSU5HUyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworPWN1dAorCitzdWIgcGFyc2VfV0FSTklOR1MgKCkKK3sKKyAgaWYgKGV4aXN0cyAkRU5WeydXQVJOSU5HUyd9KQorICAgIHsKKyAgICAgICMgSWdub3JlIHVua25vd24gY2F0ZWdvcmllcy4gIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBXQVJOSU5HUworICAgICAgIyBzaG91bGQgYmUgaG9ub3JlZCBieSBtYW55IHRvb2xzLgorICAgICAgc3dpdGNoX3dhcm5pbmcgJF8gZm9yZWFjaCAoc3BsaXQgKCcsJywgJEVOVnsnV0FSTklOR1MnfSkpOworICAgIH0KK30KKworPWl0ZW0gQzxwYXJzZV93YXJuaW5nICgkT1BUSU9OLCAkQVJHVU1FTlQpPgorCitQYXJzZSB0aGUgYXJndW1lbnQgb2YgQzwtLXdhcm5pbmc9Q0FURUdPUlk+IG9yIEM8LVdDQVRFR09SWT4uCisKK0M8JE9QVElPTlM+IGlzIEM8Ii0td2FybmluZyI+IG9yIEM8Ii1XIj4sIEM8JEFSR1VNRU5UPiBpcyBDPENBVEVHT1JZPi4KKworVGhpcyBpcyBtZWFudCB0byBiZSB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIEM8R2V0b3B0Pi4KKworPWN1dAorCitzdWIgcGFyc2Vfd2FybmluZ3MgKCQkKQoreworICBteSAoJG9wdCwgJGNhdGVnb3JpZXMpID0gQF87CisKKyAgZm9yZWFjaCBteSAkY2F0IChzcGxpdCAoJywnLCAkY2F0ZWdvcmllcykpCisgICAgeworICAgICAgbXNnICd1bnN1cHBvcnRlZCcsICJ1bmtub3duIHdhcm5pbmcgY2F0ZWdvcnkgYCRjYXQnIgorCWlmIHN3aXRjaF93YXJuaW5nICRjYXQ7CisgICAgfQorfQorCis9aXRlbSBDPHNldF9zdHJpY3RuZXNzICgkU1RSSUNUTkVTU19OQU1FKT4KKworQ29uZmlndXJlIGNoYW5uZWxzIGZvciBzdHJpY3RuZXNzIEM8JFNUUklDVE5FU1NfTkFNRT4uCisKKz1jdXQKKworc3ViIHNldF9zdHJpY3RuZXNzICgkKQoreworICBteSAoJG5hbWUpID0gQF87CisKKyAgaWYgKCRuYW1lIGVxICdnbnUnKQorICAgIHsKKyAgICAgIHNldHVwX2NoYW5uZWwgJ2Vycm9yLWdudScsIHNpbGVudCA9PiAwOworICAgICAgc2V0dXBfY2hhbm5lbCAnZXJyb3ItZ251L3dhcm4nLCBzaWxlbnQgPT4gMCwgdHlwZSA9PiAnZXJyb3InOworICAgICAgc2V0dXBfY2hhbm5lbCAnZXJyb3ItZ25pdHMnLCBzaWxlbnQgPT4gMTsKKyAgICAgIHNldHVwX2NoYW5uZWwgJ3BvcnRhYmlsaXR5Jywgc2lsZW50ID0+IDA7CisgICAgICBzZXR1cF9jaGFubmVsICdnbnUnLCBzaWxlbnQgPT4gMDsKKyAgICB9CisgIGVsc2lmICgkbmFtZSBlcSAnZ25pdHMnKQorICAgIHsKKyAgICAgIHNldHVwX2NoYW5uZWwgJ2Vycm9yLWdudScsIHNpbGVudCA9PiAwOworICAgICAgc2V0dXBfY2hhbm5lbCAnZXJyb3ItZ251L3dhcm4nLCBzaWxlbnQgPT4gMCwgdHlwZSA9PiAnZXJyb3InOworICAgICAgc2V0dXBfY2hhbm5lbCAnZXJyb3ItZ25pdHMnLCBzaWxlbnQgPT4gMDsKKyAgICAgIHNldHVwX2NoYW5uZWwgJ3BvcnRhYmlsaXR5Jywgc2lsZW50ID0+IDA7CisgICAgICBzZXR1cF9jaGFubmVsICdnbnUnLCBzaWxlbnQgPT4gMDsKKyAgICB9CisgIGVsc2lmICgkbmFtZSBlcSAnZm9yZWlnbicpCisgICAgeworICAgICAgc2V0dXBfY2hhbm5lbCAnZXJyb3ItZ251Jywgc2lsZW50ID0+IDE7CisgICAgICBzZXR1cF9jaGFubmVsICdlcnJvci1nbnUvd2FybicsIHNpbGVudCA9PiAwLCB0eXBlID0+ICd3YXJuaW5nJzsKKyAgICAgIHNldHVwX2NoYW5uZWwgJ2Vycm9yLWduaXRzJywgc2lsZW50ID0+IDE7CisgICAgICBzZXR1cF9jaGFubmVsICdwb3J0YWJpbGl0eScsIHNpbGVudCA9PiAxOworICAgICAgc2V0dXBfY2hhbm5lbCAnZ251Jywgc2lsZW50ID0+IDE7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcHJvZ19lcnJvciAibGV2ZWwgYCRuYW1lJyBub3QgcmVjb2duaXplZFxuIjsKKyAgICB9Cit9CisKKz1iYWNrCisKKz1oZWFkMSBTRUUgQUxTTworCitMPEF1dG9tYWtlOjpDaGFubmVscz4KKworPWhlYWQxIEhJU1RPUlkKKworV3JpdHRlbiBieSBBbGV4YW5kcmUgRHVyZXQtTHV0eiBFPGx0PkY8YWRsQGdudS5vcmc+RTxndD4uCisKKz1jdXQKKworIyMjIFNldHVwICJHTlUiIHN0eWxlIGZvciBwZXJsLW1vZGUgYW5kIGNwZXJsLW1vZGUuCisjIyBMb2NhbCBWYXJpYWJsZXM6CisjIyBwZXJsLWluZGVudC1sZXZlbDogMgorIyMgcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1pbWFnaW5hcnktb2Zmc2V0OiAwCisjIyBwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWluZGVudC1sZXZlbDogMgorIyMgY3BlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1leHRyYS1uZXdsaW5lLWJlZm9yZS1icmFjZTogdAorIyMgY3BlcmwtbWVyZ2UtdHJhaWxpbmctZWxzZTogbmlsCisjIyBjcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgRW5kOgpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9BdXRvbWFrZS9DaGFubmVscy5wbSBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvQXV0b21ha2UvQ2hhbm5lbHMucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk0ODE5ZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvQXV0b21ha2UvQ2hhbm5lbHMucG0KQEAgLTAsMCArMSw4MjcgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LCAyMDA2LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoZSBtYWluIGNvcHkgb2YgdGhpcyBmaWxlIGlzIGluIEF1dG9tYWtlJ3MgQ1ZTIHJlcG9zaXRvcnkuICMKKyMgVXBkYXRlcyBzaG91bGQgYmUgc2VudCB0byBhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmcuICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3BhY2thZ2UgQXV0b21ha2U6OkNoYW5uZWxzOworCis9aGVhZDEgTkFNRQorCitBdXRvbWFrZTo6Q2hhbm5lbHMgLSBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgZXJyb3IgYW5kIHdhcm5pbmcgbWFuYWdlbWVudAorCis9aGVhZDEgU1lOT1BTSVMKKworICB1c2UgQXV0b21ha2U6OkNoYW5uZWxzOworCisgICMgUmVnaXN0ZXIgYSBjaGFubmVsIHRvIG91dHB1dCB3YXJuaW5ncyBhYm91dCB1bnVzZWQgdmFyaWFibGVzLgorICByZWdpc3Rlcl9jaGFubmVsICd1bnVzZWQnLCB0eXBlID0+ICd3YXJuaW5nJzsKKworICAjIFJlZ2lzdGVyIGEgY2hhbm5lbCBmb3Igc3lzdGVtIGVycm9ycy4KKyAgcmVnaXN0ZXJfY2hhbm5lbCAnc3lzdGVtJywgdHlwZSA9PiAnZXJyb3InLCBleGl0X2NvZGUgPT4gNDsKKworICAjIE91dHB1dCBhIG1lc3NhZ2Ugb24gY2hhbm5lbCAndW51c2VkJy4KKyAgbXNnICd1bnVzZWQnLCAiJGZpbGU6JGxpbmUiLCAidW51c2VkIHZhcmlhYmxlIGAkdmFyJyI7CisKKyAgIyBNYWtlIHRoZSAndW51c2VkJyBjaGFubmVsIHNpbGVudC4KKyAgc2V0dXBfY2hhbm5lbCAndW51c2VkJywgc2lsZW50ID0+IDE7CisKKyAgIyBUdXJuIG9uIGFsbCBjaGFubmVscyBvZiB0eXBlICd3YXJuaW5nJy4KKyAgc2V0dXBfY2hhbm5lbF90eXBlICd3YXJuaW5nJywgc2lsZW50ID0+IDA7CisKKyAgIyBSZWRpcmVjdCBhbGwgY2hhbm5lbHMgdG8gcHVzaCBtZXNzYWdlcyBvbiBhIFRocmVhZDo6UXVldWUgdXNpbmcKKyAgIyB0aGUgc3BlY2lmaWVkIHNlcmlhbGl6YXRpb24ga2V5LgorICBzZXR1cF9jaGFubmVsX3F1ZXVlICRxdWV1ZSwgJGtleTsKKworICAjIE91dHB1dCBhIG1lc3NhZ2UgcGVuZGluZyBpbiBhIFRocmVhZDo6UXVldWUuCisgIHBvcF9jaGFubmVsX3F1ZXVlICRxdWV1ZTsKKworICAjIFRyZWF0IGFsbCB3YXJuaW5ncyBhcyBlcnJvcnMuCisgICR3YXJuaW5nc19hcmVfZXJyb3JzID0gMTsKKworICAjIEV4aXQgd2l0aCB0aGUgZ3JlYXRlc3QgZXhpdCBjb2RlIGVuY291bnRlcmVkIHNvIGZhci4KKyAgZXhpdCAkZXhpdF9jb2RlOworCis9aGVhZDEgREVTQ1JJUFRJT04KKworVGhpcyBwZXJsIG1vZHVsZSBwcm92aWRlcyBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgZGlhZ25vc3RpYworY2hhbm5lbHMgaW4gcHJvZ3JhbXMuICBDaGFubmVscyBjYW4gYmUgcmVnaXN0ZXJlZCB0byBjb252ZXkgZmF0YWwsCitlcnJvciwgd2FybmluZywgb3IgZGVidWcgbWVzc2FnZXMuICBFYWNoIGNoYW5uZWwgaGFzIHZhcmlvdXMgb3B0aW9ucworKGUuZy4gaXMgdGhlIGNoYW5uZWwgc2lsZW50LCBzaG91bGQgZHVwbGljYXRlIG1lc3NhZ2VzIGJlIHJlbW92ZWQsCitldGMuKSB0aGF0IGNhbiBhbHNvIGJlIG92ZXJyaWRkZW4gb24gYSBwZXItbWVzc2FnZSBiYXNpcy4KKworPWN1dAorCit1c2UgNS4wMDU7Cit1c2Ugc3RyaWN0OwordXNlIEV4cG9ydGVyOwordXNlIENhcnA7Cit1c2UgRmlsZTo6QmFzZW5hbWU7CisKK3VzZSB2YXJzIHF3IChASVNBIEBFWFBPUlQgJWNoYW5uZWxzICRtZSk7CisKK0BJU0EgPSBxdyAoRXhwb3J0ZXIpOworQEVYUE9SVCA9IHF3ICgkZXhpdF9jb2RlICR3YXJuaW5nc19hcmVfZXJyb3JzCisJICAgICAgJnJlc2V0X2xvY2FsX2R1cGxpY2F0ZXMgJnJlc2V0X2dsb2JhbF9kdXBsaWNhdGVzCisJICAgICAgJnJlZ2lzdGVyX2NoYW5uZWwgJm1zZyAmZXhpc3RzX2NoYW5uZWwgJmNoYW5uZWxfdHlwZQorCSAgICAgICZzZXR1cF9jaGFubmVsICZzZXR1cF9jaGFubmVsX3R5cGUKKwkgICAgICAmZHVwX2NoYW5uZWxfc2V0dXAgJmRyb3BfY2hhbm5lbF9zZXR1cAorCSAgICAgICZidWZmZXJfbWVzc2FnZXMgJmZsdXNoX21lc3NhZ2VzCisJICAgICAgJnNldHVwX2NoYW5uZWxfcXVldWUgJnBvcF9jaGFubmVsX3F1ZXVlCisJICAgICAgVVNfR0xPQkFMIFVTX0xPQ0FMCisJICAgICAgVVBfTk9ORSBVUF9URVhUIFVQX0xPQ19URVhUKTsKKworJG1lID0gYmFzZW5hbWUgJDA7CisKKz1oZWFkMiBHbG9iYWwgVmFyaWFibGVzCisKKz1vdmVyIDQKKworPWl0ZW0gQzwkZXhpdF9jb2RlPgorCitUaGUgZ3JlYXRlc3QgZXhpdCBjb2RlIHNlZW4gc28gZmFyLiBDPCRleGl0X2NvZGU+IGlzIHVwZGF0ZWQgZnJvbQordGhlIEM8ZXhpdF9jb2RlPiBvcHRpb25zIG9mIEM8ZmF0YWw+IGFuZCBDPGVycm9yPiBjaGFubmVscy4KKworPWN1dAorCit1c2UgdmFycyBxdyAoJGV4aXRfY29kZSk7CiskZXhpdF9jb2RlID0gMDsKKworPWl0ZW0gQzwkd2FybmluZ3NfYXJlX2Vycm9ycz4KKworU2V0IHRoaXMgdmFyaWFibGUgdG8gMSBpZiB3YXJuaW5nIG1lc3NhZ2VzIHNob3VsZCBiZSB0cmVhdGVkIGFzCitlcnJvcnMgKGkuZS4gaWYgdGhleSBzaG91bGQgdXBkYXRlIEM8JGV4aXRfY29kZT4pLgorCis9Y3V0CisKK3VzZSB2YXJzIHF3ICgkd2FybmluZ3NfYXJlX2Vycm9ycyk7Ciskd2FybmluZ3NfYXJlX2Vycm9ycyA9IDA7CisKKz1iYWNrCisKKz1oZWFkMiBDb25zdGFudHMKKworPW92ZXIgNAorCis9aXRlbSBDPFVQX05PTkU+LCBDPFVQX1RFWFQ+LCBDPFVQX0xPQ19URVhUPgorCitQb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSBDPHVuaXFfcGFydD4gb3B0aW9ucy4gIFRoaXMgc2VsZWN0cyB0aGUgcGFydAorb2YgdGhlIG1lc3NhZ2UgdGhhdCBzaG91bGQgYmUgY29uc2lkZXJlZCB3aGVuIGZpbHRlcmluZyBvdXQgZHVwbGljYXRlcy4KK0lmIEM8VVBfTE9DX1RFWFQ+IGlzIHVzZWQsIHRoZSBsb2NhdGlvbiBhbmQgdGhlIGV4cGxhbmF0aW9uIG1lc3NhZ2UKK2FyZSB1c2VkIGZvciBmaWx0ZXJpbmcuICBJZiBDPFVQX1RFWFQ+IGlzIHVzZWQsIG9ubHkgdGhlIGV4cGxhbmF0aW9uCittZXNzYWdlIGlzIHVzZWQgKHNvIHRoZSBzYW1lIG1lc3NhZ2Ugd2lsbCBiZSBmaWx0ZXJlZCBvdXQgaWYgaXQgYXBwZWFycworYXQgZGlmZmVyZW50IGxvY2F0aW9ucykuICBDPFVQX05PTkU+IG1lYW5zIHRoYXQgZHVwbGljYXRlIG1lc3NhZ2VzCitzaG91bGQgYmUgb3V0cHV0LgorCis9Y3V0CisKK3VzZSBjb25zdGFudCBVUF9OT05FID0+IDA7Cit1c2UgY29uc3RhbnQgVVBfVEVYVCA9PiAxOwordXNlIGNvbnN0YW50IFVQX0xPQ19URVhUID0+IDI7CisKKz1pdGVtIEM8VVNfTE9DQUw+LCBDPFVTX0dMT0JBTD4KKworUG9zc2libGUgdmFsdWVzIGZvciB0aGUgQzx1bmlxX3Njb3BlPiBvcHRpb25zLgorVXNlIEM8VVNfR0xPQkFMPiBmb3IgZXJyb3IgbWVzc2FnZXMgdGhhdCBzaG91bGQgYmUgcHJpbnRlZCBvbmx5CitvbmNlIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtLCBDPFVTX0xPQ0FMPiBmb3IgbWVzc2FnZSB0aGF0CitzaG91bGQgYmUgcHJpbnRlZCBvbmx5IG9uY2UgcGVyIGZpbGUuICAoQWN0dWFsbHksIEM8Q2hhbm5lbHM+IGRvZXMgbm90CitkbyB0aGlzIG5vdyB3aGVuIGZpbGVzIGFyZSBjaGFuZ2VkLCBpdCByZWxpZXMgb24geW91IGNhbGxpbmcKK0M8cmVzZXRfbG9jYWxfZHVwbGljYXRlcz4gd2hlbiB0aGlzIGhhcHBlbnMuKQorCis9Y3V0CisKKyMgcG9zc2libGUgdmFsdWVzIGZvciB1bmlxX3Njb3BlCit1c2UgY29uc3RhbnQgVVNfTE9DQUwgPT4gMDsKK3VzZSBjb25zdGFudCBVU19HTE9CQUwgPT4gMTsKKworPWJhY2sKKworPWhlYWQyIE9wdGlvbnMKKworQ2hhbm5lbHMgYWNjZXB0IHRoZSBvcHRpb25zIGRlc2NyaWJlZCBiZWxvdy4gIFRoZXNlIG9wdGlvbnMgY2FuIGJlCitwYXNzZWQgYXMgYSBoYXNoIHRvIHRoZSBDPHJlZ2lzdGVyX2NoYW5uZWw+LCBDPHNldHVwX2NoYW5uZWw+LCBhbmQgQzxtc2c+CitmdW5jdGlvbnMuICBUaGUgcG9zc2libGUga2V5cywgd2l0aCB0aGVpciBkZWZhdWx0IHZhbHVlIGFyZToKKworPW92ZXIKKworPWl0ZW0gQzx0eXBlID1FPGd0PiAnd2FybmluZyc+CisKK1RoZSB0eXBlIG9mIHRoZSBjaGFubmVsLiAgT25lIG9mIEM8J2RlYnVnJz4sIEM8J3dhcm5pbmcnPiwgQzwnZXJyb3InPiwgb3IKK0M8J2ZhdGFsJz4uICBGYXRhbCBtZXNzYWdlcyBhYm9ydCB0aGUgcHJvZ3JhbSB3aGVuIHRoZXkgYXJlIG91dHB1dC4KK0Vycm9yIG1lc3NhZ2VzIHVwZGF0ZSB0aGUgZXhpdCBzdGF0dXMuICBEZWJ1ZyBhbmQgd2FybmluZyBtZXNzYWdlcyBhcmUKK2hhcm1sZXNzLCBleGNlcHQgdGhhdCB3YXJuaW5ncyBjYW4gYmUgdHJlYXRlZCBhcyBlcnJvcnMgb2YKK0M8JHdhcm5pbmdzX2FyZV9lcnJvcnM+IGlzIHNldC4KKworPWl0ZW0gQzxleGl0X2NvZGUgPUU8Z3Q+IDE+CisKK1RoZSB2YWx1ZSB0byB1cGRhdGUgQzwkZXhpdF9jb2RlPiB3aXRoIHdoZW4gYSBmYXRhbCBvciBlcnJvciBtZXNzYWdlCitpcyBlbWl0dGVkLiAgQzwkZXhpdF9jb2RlPiBpcyBhbHNvIHVwZGF0ZWQgZm9yIHdhcm5pbmdzIG91dHB1dAord2hlbiBAPCR3YXJuaW5nc19hcmVfZXJyb3JzPiBpcyBzZXQuCisKKz1pdGVtIEM8ZmlsZSA9RTxndD4gXCpTVERFUlI+CisKK1RoZSBmaWxlIHdoZXJlIHRoZSBlcnJvciBzaG91bGQgYmUgb3V0cHV0LgorCis9aXRlbSBDPHNpbGVudCA9RTxndD4gMD4KKworV2hldGhlciB0aGUgY2hhbm5lbCBzaG91bGQgYmUgc2lsZW50LiAgVXNlIHRoaXMgZG8gZGlzYWJsZSBhCitjYXRlZ29yeSBvZiB3YXJuaW5nLCBmb3IgaW5zdGFuY2UuCisKKz1pdGVtIEM8b3JkZXJlZCA9RTxndD4gMT4KKworV2hldGhlciwgd2l0aCBtdWx0aS10aHJlYWRlZCBleGVjdXRpb24sIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBxdWV1ZWQKK2ZvciBvcmRlcmVkIG91dHB1dC4KKworPWl0ZW0gQzx1bmlxX3BhcnQgPUU8Z3Q+IFVQX0xPQ19URVhUPgorCitUaGUgcGFydCBvZiB0aGUgbWVzc2FnZSBzdWJqZWN0IHRvIGR1cGxpY2F0ZSBmaWx0ZXJpbmcuICBTZWUgdGhlCitkb2N1bWVudGF0aW9uIGZvciB0aGUgQzxVUF9OT05FPiwgQzxVUF9URVhUPiwgYW5kIEM8VVBfTE9DX1RFWFQ+Citjb25zdGFudHMgYWJvdmUuCisKK0M8dW5pcV9wYXJ0PiBjYW4gYWxzbyBiZSBzZXQgdG8gYW4gYXJiaXRyYXJ5IHN0cmluZyB0aGF0IHdpbGwgYmUgdXNlZAoraW5zdGVhZCBvZiB0aGUgbWVzc2FnZSB3aGVuIGNvbnNpZGVyaW5nIGR1cGxpY2F0ZXMuCisKKz1pdGVtIEM8dW5pcV9zY29wZSA9RTxndD4gVVNfTE9DQUw+CisKK1RoZSBzY29wZSBvZiBkdXBsaWNhdGUgZmlsdGVyaW5nLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUKK0M8VVNfTE9DQUw+LCBhbmQgQzxVU19HTE9CQUw+IGNvbnN0YW50cyBhYm92ZS4KKworPWl0ZW0gQzxoZWFkZXIgPUU8Z3Q+ICcnPgorCitBIHN0cmluZyB0byBwcmVwZW5kIHRvIGVhY2ggbWVzc2FnZSBlbWl0dGVkIHRocm91Z2ggdGhpcyBjaGFubmVsLgorCis9aXRlbSBDPGZvb3RlciA9RTxndD4gJyc+CisKK0Egc3RyaW5nIHRvIGFwcGVuZCB0byBlYWNoIG1lc3NhZ2UgZW1pdHRlZCB0aHJvdWdoIHRoaXMgY2hhbm5lbC4KKworPWl0ZW0gQzxiYWNrdHJhY2UgPUU8Z3Q+IDA+CisKK0RpZSB3aXRoIGEgc3RhY2sgYmFja3RyYWNlIGFmdGVyIGRpc3BsYXlpbmcgdGhlIG1lc3NhZ2UuCisKKz1pdGVtIEM8cGFydGlhbCA9RTxndD4gMD4KKworV2hlbiBzZXQsIGluZGljYXRlcyBhIHBhcnRpYWwgbWVzc2FnZSB0aGF0IHNob3VsZAorYmUgb3V0cHV0IGFsb25nIHdpdGggdGhlIG5leHQgbWVzc2FnZSB3aXRoIEM8cGFydGlhbD4gdW5zZXQuCitTZXZlcmFsIHBhcnRpYWwgbWVzc2FnZXMgY2FuIGJlIHN0YWNrZWQgdGhpcyB3YXkuCisKK0R1cGxpY2F0ZSBmaWx0ZXJpbmcgd2lsbCBhcHBseSB0byB0aGUgSTxnbG9iYWw+IG1lc3NhZ2UgcmVzdWx0aW5nIGZyb20KK2FsbCBJPHBhcnRpYWw+IG1lc3NhZ2VzLCB1c2luZyB0aGUgb3B0aW9ucyBmcm9tIHRoZSBsYXN0IChub24tcGFydGlhbCkKK21lc3NhZ2UuICBMaW5raW5nIGFzc29jaWF0ZWQgbWVzc2FnZXMgaXMgdGhlIG1haW4gcmVhc29uIHRvIHVzZSB0aGlzCitvcHRpb24uCisKK0ZvciBpbnN0YW5jZSB0aGUgZm9sbG93aW5nIG1lc3NhZ2VzCisKKyAgbXNnICdjaGFubmVsJywgJ2ZvbzoyJywgJ3JlZGVmaW5pdGlvbiBvZiBBIC4uLic7CisgIG1zZyAnY2hhbm5lbCcsICdmb286MScsICcuLi4gQSBwcmV2aW91c2x5IGRlZmluZWQgaGVyZSc7CisgIG1zZyAnY2hhbm5lbCcsICdmb286MycsICdyZWRlZmluaXRpb24gb2YgQSAuLi4nOworICBtc2cgJ2NoYW5uZWwnLCAnZm9vOjEnLCAnLi4uIEEgcHJldmlvdXNseSBkZWZpbmVkIGhlcmUnOworCit3aWxsIHJlc3VsdCBpbgorCisgZm9vOjI6IHJlZGVmaW5pdGlvbiBvZiBBIC4uLgorIGZvbzoxOiAuLi4gQSBwcmV2aW91c2x5IGRlZmluZWQgaGVyZQorIGZvbzozOiByZWRlZmluaXRpb24gb2YgQSAuLi4KKword2hlcmUgdGhlIGR1cGxpY2F0ZSAiSTwuLi4gQSBwcmV2aW91c2x5IGRlZmluZWQgaGVyZT4iIGhhcyBiZWVuCitmaWx0ZXJlZCBvdXQuCisKK0xpbmtpbmcgdGhlc2UgbWVzc2FnZXMgdXNpbmcgQzxwYXJ0aWFsPiBhcyBmb2xsb3dzIHdpbGwgcHJldmVudCB0aGUKK2ZvdXJ0aCBtZXNzYWdlIHRvIGRpc2FwcGVhci4KKworICBtc2cgJ2NoYW5uZWwnLCAnZm9vOjInLCAncmVkZWZpbml0aW9uIG9mIEEgLi4uJywgcGFydGlhbCA9PiAxOworICBtc2cgJ2NoYW5uZWwnLCAnZm9vOjEnLCAnLi4uIEEgcHJldmlvdXNseSBkZWZpbmVkIGhlcmUnOworICBtc2cgJ2NoYW5uZWwnLCAnZm9vOjMnLCAncmVkZWZpbml0aW9uIG9mIEEgLi4uJywgcGFydGlhbCA9PiAxOworICBtc2cgJ2NoYW5uZWwnLCAnZm9vOjEnLCAnLi4uIEEgcHJldmlvdXNseSBkZWZpbmVkIGhlcmUnOworCitOb3RlIHRoYXQgYmVjYXVzZSB0aGUgc3RhY2sgb2YgQzxwYXJ0aWFsPiBtZXNzYWdlcyBpcyBwcmludGVkIHdpdGggdGhlCitmaXJzdCBub24tQzxwYXJ0aWFsPiBtZXNzYWdlLCBtb3N0IG9wdGlvbnMgb2YgQzxwYXJ0aWFsPiBtZXNzYWdlcyB3aWxsCitiZSBpZ25vcmVkLgorCis9YmFjaworCis9Y3V0CisKK3VzZSB2YXJzIHF3ICglX2RlZmF1bHRfb3B0aW9ucyAlX2dsb2JhbF9kdXBsaWNhdGVfbWVzc2FnZXMKKwkgICAgICVfbG9jYWxfZHVwbGljYXRlX21lc3NhZ2VzKTsKKworIyBEZWZhdWx0IG9wdGlvbnMgZm9yIGEgY2hhbm5lbC4KKyVfZGVmYXVsdF9vcHRpb25zID0KKyAgKAorICAgdHlwZSA9PiAnd2FybmluZycsCisgICBleGl0X2NvZGUgPT4gMSwKKyAgIGZpbGUgPT4gXCpTVERFUlIsCisgICBzaWxlbnQgPT4gMCwKKyAgIG9yZGVyZWQgPT4gMSwKKyAgIHF1ZXVlID0+IDAsCisgICBxdWV1ZV9rZXkgPT4gdW5kZWYsCisgICB1bmlxX3Njb3BlID0+IFVTX0xPQ0FMLAorICAgdW5pcV9wYXJ0ID0+IFVQX0xPQ19URVhULAorICAgaGVhZGVyID0+ICcnLAorICAgZm9vdGVyID0+ICcnLAorICAgYmFja3RyYWNlID0+IDAsCisgICBwYXJ0aWFsID0+IDAsCisgICApOworCisjIEZpbGxlZCB3aXRoIG91dHB1dCBtZXNzYWdlcyBhcyBrZXlzLCB0byBkZXRlY3QgZHVwbGljYXRlcy4KKyMgVGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGtleSBpcyB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzCisjIGZpbHRlcmVkIG91dC4KKyVfbG9jYWxfZHVwbGljYXRlX21lc3NhZ2VzID0gKCk7CislX2dsb2JhbF9kdXBsaWNhdGVfbWVzc2FnZXMgPSAoKTsKKworc3ViIF9yZXNldF9kdXBsaWNhdGVzIChcJSkKK3sKKyAgbXkgKCRyZWYpID0gQF87CisgIG15ICRkdXAgPSAwOworICBmb3JlYWNoIG15ICRrIChrZXlzICUkcmVmKQorICAgIHsKKyAgICAgICRkdXAgKz0gJHJlZi0+eyRrfTsKKyAgICB9CisgICUkcmVmID0gKCk7CisgIHJldHVybiAkZHVwOworfQorCisKKz1oZWFkMiBGdW5jdGlvbnMKKworPW92ZXIgNAorCis9aXRlbSBDPHJlc2V0X2xvY2FsX2R1cGxpY2F0ZXMgKCk+CisKK1Jlc2V0IGxvY2FsIGR1cGxpY2F0ZSBtZXNzYWdlcyAoc2VlIEM8VVNfTE9DQUw+KSwgYW5kCityZXR1cm4gdGhlIG51bWJlciBvZiBtZXNzYWdlcyB0aGF0IGhhdmUgYmVlbiBmaWx0ZXJlZCBvdXQuCisKKz1jdXQKKworc3ViIHJlc2V0X2xvY2FsX2R1cGxpY2F0ZXMgKCkKK3sKKyAgcmV0dXJuIF9yZXNldF9kdXBsaWNhdGVzICVfbG9jYWxfZHVwbGljYXRlX21lc3NhZ2VzOworfQorCis9aXRlbSBDPHJlc2V0X2dsb2JhbF9kdXBsaWNhdGVzICgpPgorCitSZXNldCBsb2NhbCBkdXBsaWNhdGUgbWVzc2FnZXMgKHNlZSBDPFVTX0dMT0JBTD4pLCBhbmQKK3JldHVybiB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHRoYXQgaGF2ZSBiZWVuIGZpbHRlcmVkIG91dC4KKworPWN1dAorCitzdWIgcmVzZXRfZ2xvYmFsX2R1cGxpY2F0ZXMgKCkKK3sKKyAgcmV0dXJuIF9yZXNldF9kdXBsaWNhdGVzICVfZ2xvYmFsX2R1cGxpY2F0ZV9tZXNzYWdlczsKK30KKworc3ViIF9tZXJnZV9vcHRpb25zIChcJSUpCit7CisgIG15ICgkaGFzaCwgJW9wdGlvbnMpID0gQF87CisgIGxvY2FsICRfOworCisgIGZvcmVhY2ggKGtleXMgJW9wdGlvbnMpCisgICAgeworICAgICAgaWYgKGV4aXN0cyAkaGFzaC0+eyRffSkKKwl7CisJICAkaGFzaC0+eyRffSA9ICRvcHRpb25zeyRffQorCX0KKyAgICAgIGVsc2UKKwl7CisJICBjb25mZXNzICJ1bmtub3duIG9wdGlvbiBgJF8nIjsKKwl9CisgICAgfQorICBpZiAoJGhhc2gtPnsnb3JkZXJlZCd9KQorICAgIHsKKyAgICAgIGNvbmZlc3MgImZhdGFsIG1lc3NhZ2VzIGNhbm5vdCBiZSBvcmRlcmVkIgorCWlmICRoYXNoLT57J3R5cGUnfSBlcSAnZmF0YWwnOworICAgICAgY29uZmVzcyAiYmFja3RyYWNlIGNhbm5vdCBiZSBvdXRwdXQgb24gb3JkZXJlZCBtZXNzYWdlcyIKKwlpZiAkaGFzaC0+eydiYWNrdHJhY2UnfTsKKyAgICB9Cit9CisKKz1pdGVtIEM8cmVnaXN0ZXJfY2hhbm5lbCAoJG5hbWUsIFslb3B0aW9uc10pPgorCitEZWNsYXJlIGNoYW5uZWwgQzwkbmFtZT4sIGFuZCBvdmVycmlkZSB0aGUgZGVmYXVsdCBvcHRpb25zCit3aXRoIHRob3NlIGxpc3RlZCBpbiBDPCVvcHRpb25zPi4KKworPWN1dAorCitzdWIgcmVnaXN0ZXJfY2hhbm5lbCAoJDslKQoreworICBteSAoJG5hbWUsICVvcHRpb25zKSA9IEBfOworICBteSAlY2hhbm5lbF9vcHRzID0gJV9kZWZhdWx0X29wdGlvbnM7CisgIF9tZXJnZV9vcHRpb25zICVjaGFubmVsX29wdHMsICVvcHRpb25zOworICAkY2hhbm5lbHN7JG5hbWV9ID0gXCVjaGFubmVsX29wdHM7Cit9CisKKz1pdGVtIEM8ZXhpc3RzX2NoYW5uZWwgKCRuYW1lKT4KKworUmV0dXJucyB0cnVlIGlmZiBjaGFubmVsIEM8JG5hbWU+IGhhcyBiZWVuIHJlZ2lzdGVyZWQuCisKKz1jdXQKKworc3ViIGV4aXN0c19jaGFubmVsICgkKQoreworICBteSAoJG5hbWUpID0gQF87CisgIHJldHVybiBleGlzdHMgJGNoYW5uZWxzeyRuYW1lfTsKK30KKworPWl0ZW0gQzxjaGFubmVsX3R5cGUgKCRuYW1lKT4KKworUmV0dXJucyB0aGUgdHlwZSBvZiBjaGFubmVsIEM8JG5hbWU+IGlmIGl0IGhhcyBiZWVuIHJlZ2lzdGVyZWQuCitSZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcgb3RoZXJ3aXNlLgorCis9Y3V0CisKK3N1YiBjaGFubmVsX3R5cGUgKCQpCit7CisgIG15ICgkbmFtZSkgPSBAXzsKKyAgcmV0dXJuICRjaGFubmVsc3skbmFtZX17J3R5cGUnfSBpZiBleGlzdHNfY2hhbm5lbCAkbmFtZTsKKyAgcmV0dXJuICcnOworfQorCisjIF9mb3JtYXRfc3ViX21lc3NhZ2UgKCRMRUFERVIsICRNRVNTQUdFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU3BsaXQgJE1FU1NBR0UgYXQgbmV3IGxpbmVzIGFuZCBhZGQgJExFQURFUiB0byBlYWNoIGxpbmUuCitzdWIgX2Zvcm1hdF9zdWJfbWVzc2FnZSAoJCQpCit7CisgIG15ICgkbGVhZGVyLCAkbWVzc2FnZSkgPSBAXzsKKyAgcmV0dXJuICRsZWFkZXIgLiBqb2luICgiXG4iIC4gJGxlYWRlciwgc3BsaXQgKCJcbiIsICRtZXNzYWdlKSkgLiAiXG4iOworfQorCisjIF9mb3JtYXRfbWVzc2FnZSAoJExPQ0FUSU9OLCAkTUVTU0FHRSwgJU9QVElPTlMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZvcm1hdCB0aGUgbWVzc2FnZS4gIFJldHVybiBhIHN0cmluZyByZWFkeSB0byBwcmludC4KK3N1YiBfZm9ybWF0X21lc3NhZ2UgKCQkJSkKK3sKKyAgbXkgKCRsb2NhdGlvbiwgJG1lc3NhZ2UsICVvcHRzKSA9IEBfOworICBteSAkbXNnID0gJyc7CisgIGlmIChyZWYgJGxvY2F0aW9uKQorICAgIHsKKyAgICAgICMgSWYgJExPQ0FUSU9OIGlzIGEgcmVmZXJlbmNlLCBhc3N1bWUgaXQncyBhbiBpbnN0YW5jZSBvZiB0aGUKKyAgICAgICMgQXV0b21ha2U6OkxvY2F0aW9uIGNsYXNzIGFuZCBkaXNwbGF5IGNvbnRleHRzLgorICAgICAgbXkgJGxvYyA9ICRsb2NhdGlvbi0+Z2V0IHx8ICRtZTsKKyAgICAgICRtc2cgPSBfZm9ybWF0X3N1Yl9tZXNzYWdlICgiJGxvYzogIiwgJG9wdHN7J2hlYWRlcid9CisJCQkJICAuICRtZXNzYWdlIC4gJG9wdHN7J2Zvb3Rlcid9KTsKKyAgICAgIGZvciBteSAkcGFpciAoJGxvY2F0aW9uLT5nZXRfY29udGV4dHMpCisJeworCSAgJG1zZyAuPSBfZm9ybWF0X3N1Yl9tZXNzYWdlICgkcGFpci0+WzBdIC4gIjogICAiLCAkcGFpci0+WzFdKTsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgJGxvY2F0aW9uIHx8PSAkbWU7CisgICAgICAkbXNnID0gX2Zvcm1hdF9zdWJfbWVzc2FnZSAoIiRsb2NhdGlvbjogIiwgJG9wdHN7J2hlYWRlcid9CisJCQkJICAuICRtZXNzYWdlIC4gJG9wdHN7J2Zvb3Rlcid9KTsKKyAgICB9CisgIHJldHVybiAkbXNnOworfQorCisjIF9lbnF1ZXVlICgkUVVFVUUsICRLRVksICRVTklRX1NDT1BFLCAkVE9fRklMVEVSLCAkTVNHLCAkRklMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFB1c2ggbWVzc2FnZSBvbiBhIHF1ZXVlLCB0byBiZSBwcm9jZXNzZWQgYnkgYW5vdGhlciB0aHJlYWQuCitzdWIgX2VucXVldWUgKCQkJCQkJCkKK3sKKyAgbXkgKCRxdWV1ZSwgJGtleSwgJHVuaXFfc2NvcGUsICR0b19maWx0ZXIsICRtc2csICRmaWxlKSA9IEBfOworICAkcXVldWUtPmVucXVldWUgKCRrZXksICRtc2csICR0b19maWx0ZXIsICR1bmlxX3Njb3BlKTsKKyAgY29uZmVzcyAibWVzc2FnZSBxdWV1aW5nIHdvcmtzIG9ubHkgZm9yIFNUREVSUiIKKyAgICBpZiAkZmlsZSBuZSBcKlNUREVSUjsKK30KKworIyBfZGVxdWV1ZSAoJFFVRVVFKQorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBQb3AgYSBtZXNzYWdlIGZyb20gYSBxdWV1ZSwgYW5kIHByaW50LCBzaW1pbGFybHkgdG8gaG93CisjIF9wcmludF9tZXNzYWdlIHdvdWxkIGRvIGl0LiAgUmV0dXJuIDAgaWYgdGhlIHF1ZXVlIGlzCisjIGVtcHR5LiAgTm90ZSB0aGF0IHRoZSBrZXkgaGFzIGFscmVhZHkgYmVlbiBkZXF1ZXVlZC4KK3N1YiBfZGVxdWV1ZSAoJCkKK3sKKyAgbXkgKCRxdWV1ZSkgPSBAXzsKKyAgbXkgJG1zZyA9ICRxdWV1ZS0+ZGVxdWV1ZSB8fCByZXR1cm4gMDsKKyAgbXkgJHRvX2ZpbHRlciA9ICRxdWV1ZS0+ZGVxdWV1ZTsKKyAgbXkgJHVuaXFfc2NvcGUgPSAkcXVldWUtPmRlcXVldWU7CisgIG15ICRmaWxlID0gXCpTVERFUlI7CisKKyAgaWYgKCR0b19maWx0ZXIgbmUgJycpCisgICAgeworICAgICAgIyBEbyB3ZSB3YW50IGxvY2FsIG9yIGdsb2JhbCB1bmlxdWVuZXNzPworICAgICAgbXkgJGR1cHM7CisgICAgICBpZiAoJHVuaXFfc2NvcGUgPT0gVVNfTE9DQUwpCisJeworCSAgJGR1cHMgPSBcJV9sb2NhbF9kdXBsaWNhdGVfbWVzc2FnZXM7CisJfQorICAgICAgZWxzaWYgKCR1bmlxX3Njb3BlID09IFVTX0dMT0JBTCkKKwl7CisJICAkZHVwcyA9IFwlX2dsb2JhbF9kdXBsaWNhdGVfbWVzc2FnZXM7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGNvbmZlc3MgInVua25vd24gdmFsdWUgZm9yIHVuaXFfc2NvcGU6ICIgLiAkdW5pcV9zY29wZTsKKwl9CisKKyAgICAgICMgVXBkYXRlIHRoZSBoYXNoIG9mIG1lc3NhZ2VzLgorICAgICAgaWYgKGV4aXN0cyAkZHVwcy0+eyR0b19maWx0ZXJ9KQorCXsKKwkgICsrJGR1cHMtPnskdG9fZmlsdGVyfTsKKwkgIHJldHVybiAxOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAkZHVwcy0+eyR0b19maWx0ZXJ9ID0gMDsKKwl9CisgICAgfQorICBwcmludCAkZmlsZSAkbXNnOworICByZXR1cm4gMTsKK30KKworCisjIFN0b3JlIHBhcnRpYWwgbWVzc2FnZXMgaGVyZS4gKFNlZSB0aGUgJ3BhcnRpYWwnIG9wdGlvbi4pCit1c2UgdmFycyBxdyAoJHBhcnRpYWwpOworJHBhcnRpYWwgPSAnJzsKKworIyBfcHJpbnRfbWVzc2FnZSAoJExPQ0FUSU9OLCAkTUVTU0FHRSwgJU9QVElPTlMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRm9ybWF0IHRoZSBtZXNzYWdlLCBjaGVjayBkdXBsaWNhdGVzLCBhbmQgcHJpbnQgaXQuCitzdWIgX3ByaW50X21lc3NhZ2UgKCQkJSkKK3sKKyAgbXkgKCRsb2NhdGlvbiwgJG1lc3NhZ2UsICVvcHRzKSA9IEBfOworCisgIHJldHVybiAwIGlmICgkb3B0c3snc2lsZW50J30pOworCisgIG15ICRtc2cgPSBfZm9ybWF0X21lc3NhZ2UgKCRsb2NhdGlvbiwgJG1lc3NhZ2UsICVvcHRzKTsKKyAgaWYgKCRvcHRzeydwYXJ0aWFsJ30pCisgICAgeworICAgICAgIyBJbmNvbXBsZXRlIG1lc3NhZ2UuICAgU3RvcmUsIGRvbid0IHByaW50LgorICAgICAgJHBhcnRpYWwgLj0gJG1zZzsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAjIFByZWZpeCB3aXRoIGFueSBwYXJ0aWFsIG1lc3NhZ2Ugc2VuZCBzbyBmYXIuCisgICAgICAkbXNnID0gJHBhcnRpYWwgLiAkbXNnOworICAgICAgJHBhcnRpYWwgPSAnJzsKKyAgICB9CisKKyAgIyBDaGVjayBmb3IgZHVwbGljYXRlIG1lc3NhZ2UgaWYgcmVxdWVzdGVkLgorICBteSAkdG9fZmlsdGVyOworICBpZiAoJG9wdHN7J3VuaXFfcGFydCd9IG5lIFVQX05PTkUpCisgICAgeworICAgICAgIyBXaGljaCBwYXJ0IG9mIHRoZSBlcnJvciBzaG91bGQgd2UgbWF0Y2g/CisgICAgICBpZiAoJG9wdHN7J3VuaXFfcGFydCd9IGVxIFVQX1RFWFQpCisJeworCSAgJHRvX2ZpbHRlciA9ICRtZXNzYWdlOworCX0KKyAgICAgIGVsc2lmICgkb3B0c3sndW5pcV9wYXJ0J30gZXEgVVBfTE9DX1RFWFQpCisJeworCSAgJHRvX2ZpbHRlciA9ICRtc2c7CisJfQorICAgICAgZWxzZQorCXsKKwkgICR0b19maWx0ZXIgPSAkb3B0c3sndW5pcV9wYXJ0J307CisJfQorCisgICAgICAjIERvIHdlIHdhbnQgbG9jYWwgb3IgZ2xvYmFsIHVuaXF1ZW5lc3M/CisgICAgICBteSAkZHVwczsKKyAgICAgIGlmICgkb3B0c3sndW5pcV9zY29wZSd9ID09IFVTX0xPQ0FMKQorCXsKKwkgICRkdXBzID0gXCVfbG9jYWxfZHVwbGljYXRlX21lc3NhZ2VzOworCX0KKyAgICAgIGVsc2lmICgkb3B0c3sndW5pcV9zY29wZSd9ID09IFVTX0dMT0JBTCkKKwl7CisJICAkZHVwcyA9IFwlX2dsb2JhbF9kdXBsaWNhdGVfbWVzc2FnZXM7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGNvbmZlc3MgInVua25vd24gdmFsdWUgZm9yIHVuaXFfc2NvcGU6ICIgLiAkb3B0c3sndW5pcV9zY29wZSd9OworCX0KKworICAgICAgIyBVcGRhdGUgdGhlIGhhc2ggb2YgbWVzc2FnZXMuCisgICAgICBpZiAoZXhpc3RzICRkdXBzLT57JHRvX2ZpbHRlcn0pCisJeworCSAgKyskZHVwcy0+eyR0b19maWx0ZXJ9OworCSAgcmV0dXJuIDA7CisJfQorICAgICAgZWxzZQorCXsKKwkgICRkdXBzLT57JHRvX2ZpbHRlcn0gPSAwOworCX0KKyAgICB9CisgIG15ICRmaWxlID0gJG9wdHN7J2ZpbGUnfTsKKyAgaWYgKCRvcHRzeydvcmRlcmVkJ30gJiYgJG9wdHN7J3F1ZXVlJ30pCisgICAgeworICAgICAgX2VucXVldWUgKCRvcHRzeydxdWV1ZSd9LCAkb3B0c3sncXVldWVfa2V5J30sICRvcHRzeyd1bmlxX3Njb3BlJ30sCisJCSR0b19maWx0ZXIsICRtc2csICRmaWxlKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBwcmludCAkZmlsZSAkbXNnOworICAgIH0KKyAgcmV0dXJuIDE7Cit9CisKKz1pdGVtIEM8bXNnICgkY2hhbm5lbCwgJGxvY2F0aW9uLCAkbWVzc2FnZSwgWyVvcHRpb25zXSk+CisKK0VtaXQgYSBtZXNzYWdlIG9uIEM8JGNoYW5uZWw+LCBvdmVycmlkaW5nIHNvbWUgb3B0aW9ucyBvZiB0aGUgY2hhbm5lbCB3aXRoCit0aG9zZSBzcGVjaWZpZWQgaW4gQzwlb3B0aW9ucz4uICBPYnZpb3VzbHkgQzwkY2hhbm5lbD4gbXVzdCBoYXZlIGJlZW4KK3JlZ2lzdGVyZWQgd2l0aCBDPHJlZ2lzdGVyX2NoYW5uZWw+LgorCitDPCRtZXNzYWdlPiBpcyB0aGUgdGV4dCBvZiB0aGUgbWVzc2FnZSwgYW5kIEM8JGxvY2F0aW9uPiBpcyBhIGxvY2F0aW9uCithc3NvY2lhdGVkIHRvIHRoZSBtZXNzYWdlLgorCitGb3IgaW5zdGFuY2UgdG8gY29tcGxhaW4gYWJvdXQgc29tZSB1bnVzZWQgdmFyaWFibGUgQzxtdW1ibGU+CitkZWNsYXJlZCBhdCBsaW5lIDEwIGluIEY8Zm9vLmM+LCBvbmUgY291bGQgZG86CisKKyAgbXNnICd1bnVzZWQnLCAnZm9vLmM6MTAnLCAidW51c2VkIHZhcmlhYmxlIGBtdW1ibGUnIjsKKworSWYgY2hhbm5lbCBDPHVudXNlZD4gaXMgbm90IHNpbGVudCAoYW5kIGlmIHRoaXMgbWVzc2FnZSBpcyBub3QgYSBkdXBsaWNhdGUpLAordGhlIGZvbGxvd2luZyB3b3VsZCBiZSBvdXRwdXQ6CisKKyAgZm9vLmM6MTA6IHVudXNlZCB2YXJpYWJsZSBgbXVtYmxlJworCitDPCRsb2NhdGlvbj4gY2FuIGFsc28gYmUgYW4gaW5zdGFuY2Ugb2YgQzxBdXRvbWFrZTo6TG9jYXRpb24+LiAgSW4gdGhpcworY2FzZSwgdGhlIHN0YWNrIG9mIGNvbnRleHRzIHdpbGwgYmUgZGlzcGxheWVkIGluIGFkZGl0aW9uLgorCitJZiBDPCRtZXNzYWdlPiBjb250YWlucyBuZXdsaW5lIGNoYXJhY3RlcnMsIEM8JGxvY2F0aW9uPiBpcyBwcmVwZW5kZWQKK3RvIGVhY2ggbGluZS4gIEZvciBpbnN0YW5jZSwKKworICBtc2cgJ2Vycm9yJywgJ3NvbWV3aGVyZScsICIxc3QgbGluZVxuMm5kIGxpbmUiOworCitiZWNvbWVzCisKKyAgc29tZXdoZXJlOiAxc3QgbGluZQorICBzb21ld2hlcmU6IDJuZCBsaW5lCisKK0lmIEM8JGxvY2F0aW9uPiBpcyBhbiBlbXB0eSBzdHJpbmcsIGl0IGlzIHJlcGxhY2VkIGJ5IHRoZSBuYW1lIG9mIHRoZQorcHJvZ3JhbS4gIEFjdHVhbGx5LCBpZiB5b3UgZG9uJ3QgdXNlIEM8JW9wdGlvbnM+LCB5b3UgY2FuIGV2ZW4KK2VsaWRlIHRoZSBlbXB0eSBDPCRsb2NhdGlvbj4uICBUaHVzCisKKyAgbXNnICdmYXRhbCcsICcnLCAnZmF0YWwgZXJyb3InOworICBtc2cgJ2ZhdGFsJywgJ2ZhdGFsIGVycm9yJzsKKworYm90aCBwcmludAorCisgIHByb2duYW1lOiBmYXRhbCBlcnJvcgorCis9Y3V0CisKKwordXNlIHZhcnMgcXcgKEBiYWNrbG9nICVidWZmZXJpbmcpOworCisjIFNlZSBidWZmZXJfbWVzc2FnZXMoKSBhbmQgZmx1c2hfbWVzc2FnZXMoKSBiZWxvdy4KKyVidWZmZXJpbmcgPSAoKTsJIyBUaGUgbWFwIG9mIGNoYW5uZWwgdHlwZXMgdG8gYnVmZmVyLgorQGJhY2tsb2cgPSAoKTsJCSMgVGhlIGJ1ZmZlciBvZiBtZXNzYWdlcy4KKworc3ViIG1zZyAoJCQ7JCUpCit7CisgIG15ICgkY2hhbm5lbCwgJGxvY2F0aW9uLCAkbWVzc2FnZSwgJW9wdGlvbnMpID0gQF87CisKKyAgaWYgKCEgZGVmaW5lZCAkbWVzc2FnZSkKKyAgICB7CisgICAgICAkbWVzc2FnZSA9ICRsb2NhdGlvbjsKKyAgICAgICRsb2NhdGlvbiA9ICcnOworICAgIH0KKworICBjb25mZXNzICJ1bmtub3duIGNoYW5uZWwgJGNoYW5uZWwiIHVubGVzcyBleGlzdHMgJGNoYW5uZWxzeyRjaGFubmVsfTsKKworICBteSAlb3B0cyA9ICV7JGNoYW5uZWxzeyRjaGFubmVsfX07CisgIF9tZXJnZV9vcHRpb25zICglb3B0cywgJW9wdGlvbnMpOworCisgIGlmIChleGlzdHMgJGJ1ZmZlcmluZ3skb3B0c3sndHlwZSd9fSkKKyAgICB7CisgICAgICBwdXNoIEBiYWNrbG9nLCBbJGNoYW5uZWwsICRsb2NhdGlvbi0+Y2xvbmUsICRtZXNzYWdlLCAlb3B0aW9uc107CisgICAgICByZXR1cm47CisgICAgfQorCisgICMgUHJpbnQgdGhlIG1lc3NhZ2UgaWYgbmVlZGVkLgorICBpZiAoX3ByaW50X21lc3NhZ2UgKCRsb2NhdGlvbiwgJG1lc3NhZ2UsICVvcHRzKSkKKyAgICB7CisgICAgICAjIEFkanVzdCBleGl0IHN0YXR1cy4KKyAgICAgIGlmICgkb3B0c3sndHlwZSd9IGVxICdlcnJvcicKKwkgIHx8ICRvcHRzeyd0eXBlJ30gZXEgJ2ZhdGFsJworCSAgfHwgKCRvcHRzeyd0eXBlJ30gZXEgJ3dhcm5pbmcnICYmICR3YXJuaW5nc19hcmVfZXJyb3JzKSkKKwl7CisJICBteSAkZXMgPSAkb3B0c3snZXhpdF9jb2RlJ307CisJICAkZXhpdF9jb2RlID0gJGVzIGlmICRlcyA+ICRleGl0X2NvZGU7CisJfQorCisgICAgICAjIERpZSBvbiBmYXRhbCBtZXNzYWdlcy4KKyAgICAgIGNvbmZlc3MgaWYgJG9wdHN7J2JhY2t0cmFjZSd9OworICAgICAgaWYgKCRvcHRzeyd0eXBlJ30gZXEgJ2ZhdGFsJykKKyAgICAgICAgeworCSAgIyBmbHVzaCBtZXNzYWdlcyBleHBsaWNpdGx5IGhlcmUsIG5lZWRlZCBpbiB3b3JrZXIgdGhyZWFkcy4KKwkgIFNUREVSUi0+Zmx1c2g7CisJICBleGl0ICRleGl0X2NvZGU7CisJfQorICAgIH0KK30KKworCis9aXRlbSBDPHNldHVwX2NoYW5uZWwgKCRjaGFubmVsLCAlb3B0aW9ucyk+CisKK092ZXJyaWRlIHRoZSBvcHRpb25zIG9mIEM8JGNoYW5uZWw+IHdpdGggdGhvc2Ugc3BlY2lmaWVkIGJ5IEM8JW9wdGlvbnM+LgorCis9Y3V0CisKK3N1YiBzZXR1cF9jaGFubmVsICgkJSkKK3sKKyAgbXkgKCRuYW1lLCAlb3B0cykgPSBAXzsKKyAgY29uZmVzcyAiY2hhbm5lbCAkbmFtZSBkb2Vzbid0IGV4aXN0IiB1bmxlc3MgZXhpc3RzICRjaGFubmVsc3skbmFtZX07CisgIF9tZXJnZV9vcHRpb25zICV7JGNoYW5uZWxzeyRuYW1lfX0sICVvcHRzOworfQorCis9aXRlbSBDPHNldHVwX2NoYW5uZWxfdHlwZSAoJHR5cGUsICVvcHRpb25zKT4KKworT3ZlcnJpZGUgdGhlIG9wdGlvbnMgb2YgYW55IGNoYW5uZWwgb2YgdHlwZSBDPCR0eXBlPgord2l0aCB0aG9zZSBzcGVjaWZpZWQgYnkgQzwlb3B0aW9ucz4uCisKKz1jdXQKKworc3ViIHNldHVwX2NoYW5uZWxfdHlwZSAoJCUpCit7CisgIG15ICgkdHlwZSwgJW9wdHMpID0gQF87CisgIGZvcmVhY2ggbXkgJGNoYW5uZWwgKGtleXMgJWNoYW5uZWxzKQorICAgIHsKKyAgICAgIHNldHVwX2NoYW5uZWwgJGNoYW5uZWwsICVvcHRzCisJaWYgJGNoYW5uZWxzeyRjaGFubmVsfXsndHlwZSd9IGVxICR0eXBlOworICAgIH0KK30KKworPWl0ZW0gQzxkdXBfY2hhbm5lbF9zZXR1cCAoKT4sIEM8ZHJvcF9jaGFubmVsX3NldHVwICgpPgorCitTb21ldGltZXMgaXQgaXMgbmVjZXNzYXJ5IHRvIG1ha2UgdGVtcG9yYXJ5IG1vZGlmaWNhdGlvbnMgdG8gY2hhbm5lbHMuCitGb3IgaW5zdGFuY2Ugb25lIG1heSB3YW50IHRvIGRpc2FibGUgYSB3YXJuaW5nIHdoaWxlIHByb2Nlc3NpbmcgYQorcGFydGljdWxhciBmaWxlLCBhbmQgdGhlbiByZXN0b3JlIHRoZSBpbml0aWFsIHNldHVwLiAgVGhlc2UgdHdvCitmdW5jdGlvbnMgbWFrZSBpdCBlYXN5OiBDPGR1cF9jaGFubmVsX3NldHVwICgpPiBzYXZlcyBhIGNvcHkgb2YgdGhlCitjdXJyZW50IGNvbmZpZ3VyYXRpb24gZm9yIGxhdGVyIHJlc3RvcmF0aW9uIGJ5CitDPGRyb3BfY2hhbm5lbF9zZXR1cCAoKT4uCisKK1lvdSBjYW4gdGhpbmsgb2YgdGhpcyBhcyBhIHN0YWNrIG9mIGNvbmZpZ3VyYXRpb25zIHdob3NlIGZpcnN0IGVudHJ5CitpcyB0aGUgYWN0aXZlIG9uZS4gIEM8ZHVwX2NoYW5uZWxfc2V0dXAgKCk+IGR1cGxpY2F0ZXMgdGhlIGZpcnN0CitlbnRyeSwgd2hpbGUgQzxkcm9wX2NoYW5uZWxfc2V0dXAgKCk+IGp1c3QgZGVsZXRlcyBpdC4KKworPWN1dAorCit1c2UgdmFycyBxdyAoQF9zYXZlZF9jaGFubmVscyk7CitAX3NhdmVkX2NoYW5uZWxzID0gKCk7CisKK3N1YiBkdXBfY2hhbm5lbF9zZXR1cCAoKQoreworICBteSAlY2hhbm5lbHNfY29weTsKKyAgZm9yZWFjaCBteSAkazEgKGtleXMgJWNoYW5uZWxzKQorICAgIHsKKyAgICAgICRjaGFubmVsc19jb3B5eyRrMX0gPSB7JXskY2hhbm5lbHN7JGsxfX19OworICAgIH0KKyAgcHVzaCBAX3NhdmVkX2NoYW5uZWxzLCBcJWNoYW5uZWxzX2NvcHk7Cit9CisKK3N1YiBkcm9wX2NoYW5uZWxfc2V0dXAgKCkKK3sKKyAgbXkgJHNhdmVkID0gcG9wIEBfc2F2ZWRfY2hhbm5lbHM7CisgICVjaGFubmVscyA9ICUkc2F2ZWQ7Cit9CisKKz1pdGVtIEM8YnVmZmVyX21lc3NhZ2VzIChAdHlwZXMpPiwgQzxmbHVzaF9tZXNzYWdlcyAoKT4KKworQnkgZGVmYXVsdCwgd2hlbiBDPG1zZz4gaXMgY2FsbGVkLCBtZXNzYWdlcyBhcmUgcHJvY2Vzc2VkIGltbWVkaWF0ZWx5LgorCitTb21ldGltZXMgaXQgaXMgbmVjZXNzYXJ5IHRvIGRlbGF5IHRoZSBvdXRwdXQgb2YgbWVzc2FnZXMuCitGb3IgaW5zdGFuY2UgeW91IG1pZ2h0IHdhbnQgdG8gbWFrZSBkaWFnbm9zdGljcyBiZWZvcmUKK2NoYW5uZWxzIGhhdmUgYmVlbiBjb21wbGV0ZWx5IGNvbmZpZ3VyZWQuCisKK0FmdGVyIEM8YnVmZmVyX21lc3NhZ2VzKEB0eXBlcyk+IGhhcyBiZWVuIGNhbGxlZCwgbWVzc2FnZXMgc2VudCB3aXRoCitDPG1zZz4gdG8gYSBjaGFubmVsIHdob3NlIHR5cGUgaXMgbGlzdGVkIGluIEM8QHR5cGVzPiB3aWxsIGJlIHN0b3JlZCBpbiBhCitsaXN0IGZvciBsYXRlciBwcm9jZXNzaW5nLgorCitUaGlzIGJhY2tsb2cgb2YgbWVzc2FnZXMgaXMgcHJvY2Vzc2VkIHdoZW4gQzxmbHVzaF9tZXNzYWdlcz4gaXMKK2NhbGxlZCwgd2l0aCB0aGUgY3VycmVudCBjaGFubmVsIG9wdGlvbnMgKG5vdCB0aGUgb3B0aW9ucyBpbiBlZmZlY3QsCithdCB0aGUgdGltZSBvZiBDPG1zZz4pLiAgU28gZm9yIGluc3RhbmNlLCBpZiBzb21lIGNoYW5uZWwgd2FzIHNpbGVuY2VkCitpbiB0aGUgbWVhbnRpbWUsIG1lc3NhZ2VzIHRvIHRoaXMgY2hhbm5lbCB3aWxsIG5vdCBiZSBwcmludGVkLgorCitDPGZsdXNoX21lc3NhZ2VzPiBjYW5jZWxzIHRoZSBlZmZlY3Qgb2YgQzxidWZmZXJfbWVzc2FnZXM+LiAgRm9sbG93aW5nCitjYWxscyB0byBDPG1zZz4gYXJlIHByb2Nlc3NlZCBpbW1lZGlhdGVseSBhcyB1c3VhbC4KKworPWN1dAorCitzdWIgYnVmZmVyX21lc3NhZ2VzIChAKQoreworICBmb3JlYWNoIG15ICR0eXBlIChAXykKKyAgICB7CisgICAgICAkYnVmZmVyaW5neyR0eXBlfSA9IDE7CisgICAgfQorfQorCitzdWIgZmx1c2hfbWVzc2FnZXMgKCkKK3sKKyAgJWJ1ZmZlcmluZyA9ICgpOworICBmb3JlYWNoIG15ICRhcmdzIChAYmFja2xvZykKKyAgICB7CisgICAgICAmbXNnIChAJGFyZ3MpOworICAgIH0KKyAgQGJhY2tsb2cgPSAoKTsKK30KKworPWl0ZW0gQzxzZXR1cF9jaGFubmVsX3F1ZXVlICgkcXVldWUsICRrZXkpPgorCitTZXQgdGhlIHF1ZXVlIHRvIGZpbGwgZm9yIGVhY2ggY2hhbm5lbCB0aGF0IGlzIG9yZGVyZWQsCithbmQgdGhlIGtleSB0byB1c2UgZm9yIHNlcmlhbGl6YXRpb24uCisKKz1jdXQKK3N1YiBzZXR1cF9jaGFubmVsX3F1ZXVlICgkJCkKK3sKKyAgbXkgKCRxdWV1ZSwgJGtleSkgPSBAXzsKKyAgZm9yZWFjaCBteSAkY2hhbm5lbCAoa2V5cyAlY2hhbm5lbHMpCisgICAgeworICAgICAgc2V0dXBfY2hhbm5lbCAkY2hhbm5lbCwgcXVldWUgPT4gJHF1ZXVlLCBxdWV1ZV9rZXkgPT4gJGtleQorICAgICAgICBpZiAkY2hhbm5lbHN7JGNoYW5uZWx9eydvcmRlcmVkJ307CisgICAgfQorfQorCis9aXRlbSBDPHBvcF9jaGFubmVsX3F1ZXVlICgkcXVldWUpPgorCitwb3AgYSBtZXNzYWdlIG9mZiB0aGUgJHF1ZXVlOyB0aGUga2V5IGhhcyBhbHJlYWR5IGJlZW4gcG9wcGVkLgorCis9Y3V0CitzdWIgcG9wX2NoYW5uZWxfcXVldWUgKCQpCit7CisgIG15ICgkcXVldWUpID0gQF87CisgIHJldHVybiBfZGVxdWV1ZSAoJHF1ZXVlKTsKK30KKworPWJhY2sKKworPWhlYWQxIFNFRSBBTFNPCisKK0w8QXV0b21ha2U6OkxvY2F0aW9uPgorCis9aGVhZDEgSElTVE9SWQorCitXcml0dGVuIGJ5IEFsZXhhbmRyZSBEdXJldC1MdXR6IEU8bHQ+RjxhZGxAZ251Lm9yZz5FPGd0Pi4KKworPWN1dAorCisxOworCisjIyMgU2V0dXAgIkdOVSIgc3R5bGUgZm9yIHBlcmwtbW9kZSBhbmQgY3BlcmwtbW9kZS4KKyMjIExvY2FsIFZhcmlhYmxlczoKKyMjIHBlcmwtaW5kZW50LWxldmVsOiAyCisjIyBwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLWltYWdpbmFyeS1vZmZzZXQ6IDAKKyMjIHBlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtaW5kZW50LWxldmVsOiAyCisjIyBjcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWV4dHJhLW5ld2xpbmUtYmVmb3JlLWJyYWNlOiB0CisjIyBjcGVybC1tZXJnZS10cmFpbGluZy1lbHNlOiBuaWwKKyMjIGNwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBFbmQ6CmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL0F1dG9tYWtlL0NvbmRpdGlvbi5wbSBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvQXV0b21ha2UvQ29uZGl0aW9uLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNjQ5ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL0F1dG9tYWtlL0NvbmRpdGlvbi5wbQpAQCAtMCwwICsxLDY0OSBAQAorIyBDb3B5cmlnaHQgKEMpIDE5OTcsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDYsIDIwMDggIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworcGFja2FnZSBBdXRvbWFrZTo6Q29uZGl0aW9uOwordXNlIHN0cmljdDsKK3VzZSBDYXJwOworCityZXF1aXJlIEV4cG9ydGVyOwordXNlIHZhcnMgJ0BJU0EnLCAnQEVYUE9SVF9PSyc7CitASVNBID0gcXcvRXhwb3J0ZXIvOworQEVYUE9SVF9PSyA9IHF3L1RSVUUgRkFMU0UgcmVkdWNlX2FuZCByZWR1Y2Vfb3IvOworCis9aGVhZDEgTkFNRQorCitBdXRvbWFrZTo6Q29uZGl0aW9uIC0gcmVjb3JkIGEgY29uanVuY3Rpb24gb2YgY29uZGl0aW9uYWxzCisKKz1oZWFkMSBTWU5PUFNJUworCisgIHVzZSBBdXRvbWFrZTo6Q29uZGl0aW9uOworCisgICMgQ3JlYXRlIGEgY29uZGl0aW9uIHRvIHJlcHJlc2VudCAiQ09ORDEgYW5kIG5vdCBDT05EMiIuCisgIG15ICRjb25kID0gbmV3IEF1dG9tYWtlOjpDb25kaXRpb24gIkNPTkQxX1RSVUUiLCAiQ09ORDJfRkFMU0UiOworICAjIENyZWF0ZSBhIGNvbmRpdGlvbiB0byByZXByZXNlbnQgIm5vdCBDT05EMyIuCisgIG15ICRvdGhlciA9IG5ldyBBdXRvbWFrZTo6Q29uZGl0aW9uICJDT05EM19GQUxTRSI7CisKKyAgIyBDcmVhdGUgYSBjb25kaXRpb24gdG8gcmVwcmVzZW50CisgICMgICAiQ09ORDEgYW5kIG5vdCBDT05EMiBhbmQgbm90IENPTkQzIi4KKyAgbXkgJGJvdGggPSAkY29uZC0+bWVyZ2UgKCRvdGhlcik7CisKKyAgIyBMaWtld2lzZSwgYnV0IHVzaW5nIGEgbGlzdCBvZiBjb25kaXRpb25hbCBzdHJpbmdzCisgIG15ICRib3RoMiA9ICRjb25kLT5tZXJnZV9jb25kcyAoIkNPTkQzX0ZBTFNFIik7CisKKyAgIyBTdHJpcCBmcm9tICRib3RoIGFueSBzdWJjb25kaXRpb25zIHdoaWNoIGFyZSBpbiAkb3RoZXIuCisgICMgVGhpcyBpcyB0aGUgb3Bwb3NpdGUgb2YgbWVyZ2UuCisgICRjb25kID0gJGJvdGgtPnN0cmlwICgkb3RoZXIpOworCisgICMgUmV0dXJuIHRoZSBsaXN0IG9mIGNvbmRpdGlvbnMgKCJDT05EMV9UUlVFIiwgIkNPTkQyX0ZBTFNFIik6CisgIG15IEBjb25kcyA9ICRjb25kLT5jb25kczsKKworICAjIElzICRjb25kIGFsd2F5cyB0cnVlPyAgKE5vdCBpbiB0aGlzIGV4YW1wbGUpCisgIGlmICgkY29uZC0+dHJ1ZSkgeyAuLi4gfQorCisgICMgSXMgJGNvbmQgYWx3YXlzIGZhbHNlPyAoTm90IGluIHRoaXMgZXhhbXBsZSkKKyAgaWYgKCRjb25kLT5mYWxzZSkgeyAuLi4gfQorCisgICMgUmV0dXJuIHRoZSBsaXN0IG9mIGNvbmRpdGlvbmFscyBhcyBhIHN0cmluZzoKKyAgIyAgIkNPTkQxX1RSVUUgQ09ORDJfRkFMU0UiCisgIG15ICRzdHIgPSAkY29uZC0+c3RyaW5nOworCisgICMgUmV0dXJuIHRoZSBsaXN0IG9mIGNvbmRpdGlvbmFscyBhcyBhIGh1bWFuIHJlYWRhYmxlIHN0cmluZzoKKyAgIyAgIkNPTkQxIGFuZCAhQ09ORDIiCisgIG15ICRzdHIgPSAkY29uZC0+aHVtYW47CisKKyAgIyBSZXR1cm4gdGhlIGxpc3Qgb2YgY29uZGl0aW9uYWxzIGFzIGEgQUNfU1VCU1Qtc3R5bGUgc3RyaW5nOgorICAjICAiQENPTkQxX1RSVUVAQENPTkQyX0ZBTFNFQCIKKyAgbXkgJHN1YnN0ID0gJGNvbmQtPnN1YnN0X3N0cmluZzsKKworICAjIElzICRjb25kIHRydWUgd2hlbiAkYm90aCBpcyB0cnVlPyAgKFllcyBpbiB0aGlzIGV4YW1wbGUpCisgIGlmICgkY29uZC0+dHJ1ZV93aGVuICgkYm90aCkpIHsgLi4uIH0KKworICAjIElzICRjb25kIHJlZHVuZGFudCB3LnIudC4geyRvdGhlciwgJGJvdGh9PworICAjIChZZXMgaW4gdGhpcyBleGFtcGxlKQorICBpZiAoJGNvbmQtPnJlZHVuZGFudF93cnQgKCRvdGhlciwgJGJvdGgpKSB7IC4uLiB9CisKKyAgIyBEb2VzICRjb25kIGltcGx5IGFueSBvZiB7JG90aGVyLCAkYm90aH0/CisgICMgKE5vdCBpbiB0aGlzIGV4YW1wbGUpCisgIGlmICgkY29uZC0+aW1wbGllc19hbnkgKCRvdGhlciwgJGJvdGgpKSB7IC4uLiB9CisKKyAgIyBSZW1vdmUgc3VwZXJmbHVvdXMgY29uZGl0aW9uYWxzIGFzc3VtaW5nIHRoZXkgd2lsbCBldmVudHVhbGx5CisgICMgYmUgbXVsdGlwbGllZCB0b2dldGhlci4KKyAgIyAoUmV0dXJucyBAY29uZHMgPSAoJGJvdGgpIGluIHRoaXMgZXhhbXBsZSwgYmVjYXVzZQorICAjICRvdGhlciBhbmQgJGNvbmQgYXJlIGltcGxpZWQgYnkgJGJvdGguKQorICBAY29uZHMgPSBBdXRvbWFrZTo6Q29uZGl0aW9uOjpyZWR1Y2VfYW5kICgkb3RoZXIsICRib3RoLCAkY29uZCk7CisKKyAgIyBSZW1vdmUgc3VwZXJmbHVvdXMgY29uZGl0aW9uYWxzIGFzc3VtaW5nIHRoZXkgd2lsbCBldmVudHVhbGx5CisgICMgYmUgc3VtbWVkIHRvZ2V0aGVyLgorICAjIChSZXR1cm5zIEBjb25kcyA9ICgkY29uZCwgJG90aGVyKSBpbiB0aGlzIGV4YW1wbGUsIGJlY2F1c2UKKyAgIyAkYm90aCBpcyBhIHN1YnNldCBjb25kaXRpb24gb2YgJGNvbmQ6ICRjb25kIGlzIHRydWUgd2hlbmV2ZXIgJGJvdGgKKyAgIyBpcyB0cnVlLikKKyAgQGNvbmRzID0gQXV0b21ha2U6OkNvbmRpdGlvbjo6cmVkdWNlX29yICgkb3RoZXIsICRib3RoLCAkY29uZCk7CisKKyAgIyBJbnZlcnQgYSBDb25kaXRpb24uICBUaGlzIHJldHVybnMgYSBsaXN0IG9mIENvbmRpdGlvbnMuCisgIEBjb25kcyA9ICRib3RoLT5ub3Q7CisKKz1oZWFkMSBERVNDUklQVElPTgorCitBIEM8Q29uZGl0aW9uPiBpcyBhIGNvbmp1bmN0aW9uIG9mIGNvbmRpdGlvbmFscyAoaS5lLiwgYXRvbWljIGNvbmRpdGlvbnMKK2RlZmluZWQgaW4gRjxjb25maWd1cmUuYWM+IGJ5IEM8QU1fQ09ORElUSU9OQUw+LiAgSW4gQXV0b21ha2UgdGhleQorYXJlIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBjb25kaXRpb25zIGludG8gd2hpY2ggRjxNYWtlZmlsZT4gdmFyaWFibGVzIGFuZAorRjxNYWtlZmlsZT4gcnVsZXMgYXJlIGRlZmluZWQuCisKK0lmIHRoZSB2YXJpYWJsZSBDPFZBUj4gaXMgZGVmaW5lZCBhcworCisgIGlmIENPTkQxCisgICAgaWYgQ09ORDIKKyAgICAgIFZBUiA9IHZhbHVlCisgICAgZW5kaWYKKyAgZW5kaWYKKwordGhlbiBpdCB3aWxsIGJlIGFzc29jaWF0ZWQgYSBDPENvbmRpdGlvbj4gY3JlYXRlZCB3aXRoCit0aGUgZm9sbG93aW5nIHN0YXRlbWVudC4KKworICBuZXcgQXV0b21ha2U6OkNvbmRpdGlvbiAiQ09ORDFfVFJVRSIsICJDT05EMl9UUlVFIjsKKworUmVtZW1iZXIgdGhhdCBhIEM8Q29uZGl0aW9uPiBpcyBhIEk8Y29uanVuY3Rpb24+IG9mIGNvbmRpdGlvbmFscywgc28KK3RoZSBhYm92ZSBDPENvbmRpdGlvbj4gbWVhbnMgQzxWQVI+IGlzIGRlZmluZWQgd2hlbiBDPENPTkQxPgorQjxhbmQ+IEM8Q09ORDI+IGFyZSB0cnVlLiBUaGVyZSBpcyBubyB3YXkgdG8gZXhwcmVzcyBkaXNqdW5jdGlvbnMKKyhpLmUuLCBJPG9yPnMpIHdpdGggdGhpcyBjbGFzcyAoYnV0IHNlZSBMPERpc2pDb25kaXRpb25zPikuCisKK0Fub3RoZXIgcG9pbnQgd29ydGggdG8gbWVudGlvbiBpcyB0aGF0IGVhY2ggQzxDb25kaXRpb24+IG9iamVjdCBpcwordW5pcXVlIHdpdGggcmVzcGVjdCB0byBpdHMgY29uZGl0aW9uYWxzLiAgVHdvIEM8Q29uZGl0aW9uPiBvYmplY3RzCitjcmVhdGVkIGZvciB0aGUgc2FtZSBzZXQgb2YgY29uZGl0aW9uYWxzIHdpbGwgaGF2ZSB0aGUgc2FtZSBhZGRyZXNzLgorVGhpcyBtYWtlcyBpdCBlYXN5IHRvIGNvbXBhcmUgQzxDb25kaXRpb24+czoganVzdCBjb21wYXJlIHRoZQorcmVmZXJlbmNlcy4KKworICBteSAkYzEgPSBuZXcgQXV0b21ha2U6OkNvbmRpdGlvbiAiQ09ORDFfVFJVRSIsICJDT05EMl9UUlVFIjsKKyAgbXkgJGMyID0gbmV3IEF1dG9tYWtlOjpDb25kaXRpb24gIkNPTkQxX1RSVUUiLCAiQ09ORDJfVFJVRSI7CisgICRjMSA9PSAkYzI7ICAjIFRydWUhCisKKz1oZWFkMiBNZXRob2RzCisKKz1vdmVyIDQKKworPWl0ZW0gQzwkY29uZCA9IG5ldyBBdXRvbWFrZTo6Q29uZGl0aW9uIFtAY29uZHNdPgorCitSZXR1cm4gYSBDPENvbmRpdGlvbj4gb2JqZWN0cyBmb3IgdGhlIGNvbmp1bmN0aW9ucyBvZiBjb25kaXRpb25hbHMKK2xpc3RlZCBpbiBDPEBjb25kcz4gYXMgc3RyaW5ncy4KKworQW4gaXRlbSBpbiBDPEBjb25kcz4gc2hvdWxkIGJlIGVpdGhlciBDPCJGQUxTRSI+LCBDPCJUUlVFIj4sIG9yIGhhdmUKK3RoZSBmb3JtIEM8Ik5BTUVfRkFMU0UiPiBvciBDPCJOQU1FX1RSVUUiPiB3aGVyZSBDPE5BTUU+IGNhbiBiZQorYW55dGhpbmcgKGluIHByYWN0aWNlIEM8TkFNRT4gc2hvdWxkIGJlIHRoZSBuYW1lIG9mIGEgY29uZGl0aW9uYWwKK2RlY2xhcmVkIGluIEY8Y29uZmlndXJlLmFjPiB3aXRoIEM8QU1fQ09ORElUSU9OQUw+LCBidXQgaXQncyBub3QKK0M8QXV0b21ha2U6OkNvbmRpdGlvbj4ncyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhpcykuCisKK0FuIGVtcHR5IEM8QGNvbmRzPiBtZWFucyBDPCJUUlVFIj4uCisKK0FzIGV4cGxhaW5lZCBwcmV2aW91c2x5LCB0aGUgcmVmZXJlbmNlIChvYmplY3QpIHJldHVybmVkIGlzIHVuaXF1ZQord2l0aCByZXNwZWN0IHRvIEM8QGNvbmRzPi4gIEZvciB0aGlzIHB1cnBvc2UsIGR1cGxpY2F0ZSBlbGVtZW50cyBhcmUKK2lnbm9yZWQsIGFuZCBDPEBjb25kcz4gaXMgcmV3cml0dGVuIGFzIEM8KCJGQUxTRSIpPiBpZiBpdCBjb250YWlucworQzwiRkFMU0UiPiBvciB0d28gY29udHJhZGljdG9yeSBjb25kaXRpb25hbHMgKHN1Y2ggYXMgQzwiTkFNRV9GQUxTRSI+CithbmQgQzwiTkFNRV9UUlVFIj4uKQorCitUaGVyZWZvcmUgdGhlIGZvbGxvd2luZyB0d28gc3RhdGVtZW50cyBjcmVhdGUgdGhlIHNhbWUgb2JqZWN0ICh0aGV5Citib3RoIGNyZWF0ZSB0aGUgQzwiRkFMU0UiPiBjb25kaXRpb24pLgorCisgIG15ICRjMyA9IG5ldyBBdXRvbWFrZTo6Q29uZGl0aW9uICJDT05EMV9UUlVFIiwgIkNPTkQxX0ZBTFNFIjsKKyAgbXkgJGM0ID0gbmV3IEF1dG9tYWtlOjpDb25kaXRpb24gIkNPTkQyX1RSVUUiLCAiRkFMU0UiOworICAkYzMgPT0gJGM0OyAgICMgVHJ1ZSEKKyAgJGMzID09IEZBTFNFOyAjIFRydWUhCisKKz1jdXQKKworIyBLZXlzIGluIHRoaXMgaGFzaCBhcmUgY29uZGl0aW9uYWwgc3RyaW5ncy4gVmFsdWVzIGFyZSB0aGUKKyMgYXNzb2NpYXRlZCBvYmplY3QgY29uZGl0aW9ucy4gIFRoaXMgaXMgdXNlZCBieSBgbmV3JyB0byByZXVzZQorIyBDb25kaXRpb24gb2JqZWN0cyB3aXRoIGlkZW50aWNhbCBjb25kaXRpb25hbHMuCit1c2UgdmFycyAnJV9jb25kaXRpb25fc2luZ2xldG9ucyc7CisjIERvIE5PVCByZXNldCB0aGlzIGhhc2ggaGVyZS4gIEl0J3MgYWxyZWFkeSBlbXB0eSBieSBkZWZhdWx0LAorIyBhbmQgYW55IHNldHRpbmcgd291bGQgb3RoZXJ3aXNlIG9jY3VyIEFGVEVSIHRoZSBgVFJVRScgYW5kIGBGQUxTRScKKyMgY29uc3RhbnRzIGRlZmluaXRpb25zLgorIyAgICVfY29uZGl0aW9uX3NpbmdsZXRvbnMgPSAoKTsKKworc3ViIG5ldyAoJDtAKQoreworICBteSAoJGNsYXNzLCBAY29uZHMpID0gQF87CisgIG15ICRzZWxmID0geworICAgIGhhc2ggPT4ge30sCisgIH07CisgIGJsZXNzICRzZWxmLCAkY2xhc3M7CisKKyAgIyBBY2NlcHQgc3RyaW5ncyBsaWtlICJGT08gQkFSIiBhcyBzaG9ydGhhbmQgZm9yICgiRk9PIiwgIkJBUiIpLgorICBAY29uZHMgPSBtYXAgeyBzcGxpdCAoJyAnLCAkXykgfSBAY29uZHM7CisKKyAgZm9yIG15ICRjb25kIChAY29uZHMpCisgICAgeworICAgICAgbmV4dCBpZiAkY29uZCBlcSAnVFJVRSc7CisKKyAgICAgICMgQ2F0Y2ggc29tZSBjb21tb24gcHJvZ3JhbW1pbmcgZXJyb3JzOgorICAgICAgIyAtIEEgQ29uZGl0aW9uIHBhc3NlZCB0byBuZXcKKyAgICAgIGNvbmZlc3MgImAkY29uZCcgaXMgYSByZWZlcmVuY2UsIGV4cGVjdGVkIGEgc3RyaW5nIiBpZiByZWYgJGNvbmQ7CisgICAgICAjIC0gQSBDb25kaXRpb24gcGFzc2VkIGFzIGEgc3RyaW5nIHRvIG5ldworICAgICAgY29uZmVzcyAiYCRjb25kJyBkb2VzIG5vdCBsb29rIGxpa2UgYSBjb25kaXRpb24iIGlmICRjb25kID1+IC86Oi87CisKKyAgICAgICMgRGV0ZWN0IGNhc2VzIHdoZW4gQGNvbmRzIGNhbiBiZSBzaW1wbGlmaWVkIHRvIEZBTFNFLgorICAgICAgaWYgKCgkY29uZCBlcSAnRkFMU0UnICYmICQjY29uZHMgPiAwKQorCSAgfHwgKCRjb25kID1+IC9eKC4qKV9UUlVFJC8gJiYgZXhpc3RzICRzZWxmLT57J2hhc2gnfXsiJHsxfV9GQUxTRSJ9KQorCSAgfHwgKCRjb25kID1+IC9eKC4qKV9GQUxTRSQvICYmIGV4aXN0cyAkc2VsZi0+eydoYXNoJ317IiR7MX1fVFJVRSJ9KSkKKwl7CisJICByZXR1cm4gJkZBTFNFOworCX0KKworICAgICAgJHNlbGYtPnsnaGFzaCd9eyRjb25kfSA9IDE7CisgICAgfQorCisgIG15ICRrZXkgPSAkc2VsZi0+c3RyaW5nOworICBpZiAoZXhpc3RzICRfY29uZGl0aW9uX3NpbmdsZXRvbnN7JGtleX0pCisgICAgeworICAgICAgcmV0dXJuICRfY29uZGl0aW9uX3NpbmdsZXRvbnN7JGtleX07CisgICAgfQorICAkX2NvbmRpdGlvbl9zaW5nbGV0b25zeyRrZXl9ID0gJHNlbGY7CisgIHJldHVybiAkc2VsZjsKK30KKworPWl0ZW0gQzwkbmV3Y29uZCA9ICRjb25kLUU8Z3Q+bWVyZ2UgKEBvdGhlcmNvbmRzKT4KKworUmV0dXJuIGEgbmV3IGNvbmRpdGlvbiB3aGljaCBpcyB0aGUgY29uanVuY3Rpb24gb2YKK0M8JGNvbmQ+IGFuZCBDPEBvdGhlcmNvbmRzPi4KKworPWN1dAorCitzdWIgbWVyZ2UgKCRAKQoreworICBteSAoJHNlbGYsIEBvdGhlcmNvbmRzKSA9IEBfOworICBuZXcgQXV0b21ha2U6OkNvbmRpdGlvbiAobWFwIHsgJF8tPmNvbmRzIH0gKCRzZWxmLCBAb3RoZXJjb25kcykpOworfQorCis9aXRlbSBDPCRuZXdjb25kID0gJGNvbmQtRTxndD5tZXJnZV9jb25kcyAoQGNvbmRzKT4KKworUmV0dXJuIGEgbmV3IGNvbmRpdGlvbiB3aGljaCBpcyB0aGUgY29uanVuY3Rpb24gb2YgQzwkY29uZD4gYW5kCitDPEBjb25kcz4sIHdoZXJlIEM8QGNvbmRzPiBpcyBhIGxpc3Qgb2YgY29uZGl0aW9uYWwgc3RyaW5ncywgYXMKK3Bhc3NlZCB0byBDPG5ldz4uCisKKz1jdXQKKworc3ViIG1lcmdlX2NvbmRzICgkQCkKK3sKKyAgbXkgKCRzZWxmLCBAY29uZHMpID0gQF87CisgIG5ldyBBdXRvbWFrZTo6Q29uZGl0aW9uICRzZWxmLT5jb25kcywgQGNvbmRzOworfQorCis9aXRlbSBDPCRuZXdjb25kID0gJGNvbmQtRTxndD5zdHJpcCAoJG1pbnVzY29uZCk+CisKK1JldHVybiBhIG5ldyBjb25kaXRpb24gd2hpY2ggaGFzIGFsbCB0aGUgY29uZGl0aW9uYWxzIG9mIEM8JGNvbmQ+CitleGNlcHQgdGhvc2Ugb2YgQzwkbWludXNjb25kPi4gIFRoaXMgaXMgdGhlIG9wcG9zaXRlIG9mIEM8bWVyZ2U+LgorCis9Y3V0CisKK3N1YiBzdHJpcCAoJCQpCit7CisgIG15ICgkc2VsZiwgJG1pbnVzKSA9IEBfOworICBteSBAcmVzID0gZ3JlcCB7IG5vdCAkbWludXMtPmhhcyAoJF8pIH0gJHNlbGYtPmNvbmRzOworICByZXR1cm4gbmV3IEF1dG9tYWtlOjpDb25kaXRpb24gQHJlczsKK30KKworPWl0ZW0gQzxAbGlzdCA9ICRjb25kLUU8Z3Q+Y29uZHM+CisKK1JldHVybiB0aGUgc2V0IG9mIGNvbmRpdGlvbmFscyBkZWZpbmluZyBDPCRjb25kPiwgYXMgc3RyaW5ncy4gIE5vdGUgdGhhdAordGhpcyBtaWdodCBub3QgYmUgZXhhY3RseSB0aGUgbGlzdCBwYXNzZWQgdG8gQzxuZXc+IChvciBhCitjb25jYXRlbmF0aW9uIG9mIHN1Y2ggbGlzdHMgaWYgQzxtZXJnZT4gd2FzIHVzZWQpLCBiZWNhdXNlIG9mIHRoZQorY2xlYW51cCBtZW50aW9uZWQgaW4gQzxuZXc+J3MgZGVzY3JpcHRpb24uCisKK0ZvciBpbnN0YW5jZSBDPCRjMy1FPGd0PmNvbmRzPiB3aWxsIHNpbXBseSByZXR1cm4gQzwoIkZBTFNFIik+LgorCis9Y3V0CisKK3N1YiBjb25kcyAoJCApCit7CisgIG15ICgkc2VsZikgPSBAXzsKKyAgbXkgQGNvbmRzID0ga2V5cyAleyRzZWxmLT57J2hhc2gnfX07CisgIHJldHVybiAoIlRSVUUiKSB1bmxlc3MgQGNvbmRzOworICByZXR1cm4gc29ydCBAY29uZHM7Cit9CisKKyMgVW5kb2N1bWVudGVkLCBzaG91bGRuJ3QgYmUgbmVlZGVkIG91dHNpZGUgb2YgdGhpcyBjbGFzcy4KK3N1YiBoYXMgKCQkKQoreworICBteSAoJHNlbGYsICRjb25kKSA9IEBfOworICByZXR1cm4gZXhpc3RzICRzZWxmLT57J2hhc2gnfXskY29uZH07Cit9CisKKz1pdGVtIEM8JGNvbmQtRTxndD5mYWxzZT4KKworUmV0dXJuIDEgaWZmIHRoaXMgY29uZGl0aW9uIGlzIGFsd2F5cyBmYWxzZS4KKworPWN1dAorCitzdWIgZmFsc2UgKCQgKQoreworICBteSAoJHNlbGYpID0gQF87CisgIHJldHVybiAkc2VsZi0+aGFzICgnRkFMU0UnKTsKK30KKworPWl0ZW0gQzwkY29uZC1FPGd0PnRydWU+CisKK1JldHVybiAxIGlmZiB0aGlzIGNvbmRpdGlvbiBpcyBhbHdheXMgdHJ1ZS4KKworPWN1dAorCitzdWIgdHJ1ZSAoJCApCit7CisgIG15ICgkc2VsZikgPSBAXzsKKyAgcmV0dXJuIDAgPT0ga2V5cyAleyRzZWxmLT57J2hhc2gnfX07Cit9CisKKz1pdGVtIEM8JGNvbmQtRTxndD5zdHJpbmc+CisKK0J1aWxkIGEgc3RyaW5nIHdoaWNoIGRlbm90ZXMgdGhlIGNvbmRpdGlvbi4KKworRm9yIGluc3RhbmNlIHVzaW5nIHRoZSBDPCRjb25kPiBkZWZpbml0aW9uIGZyb20gTDxTWU5PUFNZUz4sCitDPCRjb25kLUU8Z3Q+c3RyaW5nPiB3aWxsIHJldHVybiBDPCJDT05EMV9UUlVFIENPTkQyX0ZBTFNFIj4uCisKKz1jdXQKKworc3ViIHN0cmluZyAoJCApCit7CisgIG15ICgkc2VsZikgPSBAXzsKKworICByZXR1cm4gJHNlbGYtPnsnc3RyaW5nJ30gaWYgZGVmaW5lZCAkc2VsZi0+eydzdHJpbmcnfTsKKworICBteSAkcmVzID0gJyc7CisgIGlmICgkc2VsZi0+ZmFsc2UpCisgICAgeworICAgICAgJHJlcyA9ICdGQUxTRSc7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgJHJlcyA9IGpvaW4gKCcgJywgJHNlbGYtPmNvbmRzKTsKKyAgICB9CisgICRzZWxmLT57J3N0cmluZyd9ID0gJHJlczsKKyAgcmV0dXJuICRyZXM7Cit9CisKKz1pdGVtIEM8JGNvbmQtRTxndD5odW1hbj4KKworQnVpbGQgYSBodW1hbiByZWFkYWJsZSBzdHJpbmcgd2hpY2ggZGVub3RlcyB0aGUgY29uZGl0aW9uLgorCitGb3IgaW5zdGFuY2UgdXNpbmcgdGhlIEM8JGNvbmQ+IGRlZmluaXRpb24gZnJvbSBMPFNZTk9QU1lTPiwKK0M8JGNvbmQtRTxndD5zdHJpbmc+IHdpbGwgcmV0dXJuIEM8IkNPTkQxIGFuZCAhQ09ORDIiPi4KKworPWN1dAorCitzdWIgX3RvX2h1bWFuICgkICkKK3sKKyAgbXkgKCRzKSA9IEBfOworICBpZiAoJHMgPX4gL14oLiopXyhUUlVFfEZBTFNFKSQvKQorICAgIHsKKyAgICAgIHJldHVybiAoKCQyIGVxICdGQUxTRScpID8gJyEnIDogJycpIC4gJDE7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcmV0dXJuICRzOworICAgIH0KK30KKworc3ViIGh1bWFuICgkICkKK3sKKyAgbXkgKCRzZWxmKSA9IEBfOworCisgIHJldHVybiAkc2VsZi0+eydodW1hbid9IGlmIGRlZmluZWQgJHNlbGYtPnsnaHVtYW4nfTsKKworICBteSAkcmVzID0gJyc7CisgIGlmICgkc2VsZi0+ZmFsc2UpCisgICAgeworICAgICAgJHJlcyA9ICdGQUxTRSc7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgJHJlcyA9IGpvaW4gKCcgYW5kICcsIG1hcCB7IF90b19odW1hbiAkXyB9ICRzZWxmLT5jb25kcyk7CisgICAgfQorICAkc2VsZi0+eydodW1hbid9ID0gJHJlczsKKyAgcmV0dXJuICRyZXM7Cit9CisKKz1pdGVtIEM8JGNvbmQtRTxndD5zdWJzdF9zdHJpbmc+CisKK0J1aWxkIGEgQzxBQ19TVUJTVD4tc3R5bGUgc3RyaW5nIGZvciBvdXRwdXQgaW4gRjxNYWtlZmlsZS5pbj4uCisKK0ZvciBpbnN0YW5jZSB1c2luZyB0aGUgQzwkY29uZD4gZGVmaW5pdGlvbiBmcm9tIEw8U1lOT1BTWVM+LAorQzwkY29uZC1FPGd0PnN1YnN0X3N0cmluZz4gd2lsbCByZXR1cm4gQzwiQENPTkQxX1RSVUVAQENPTkQyX0ZBTFNFQCI+LgorCis9Y3V0CisKK3N1YiBzdWJzdF9zdHJpbmcgKCQgKQoreworICBteSAoJHNlbGYpID0gQF87CisKKyAgcmV0dXJuICRzZWxmLT57J3N1YnN0X3N0cmluZyd9IGlmIGRlZmluZWQgJHNlbGYtPnsnc3Vic3Rfc3RyaW5nJ307CisKKyAgbXkgJHJlcyA9ICcnOworICBpZiAoJHNlbGYtPmZhbHNlKQorICAgIHsKKyAgICAgICRyZXMgPSAnIyc7CisgICAgfQorICBlbHNpZiAoISAkc2VsZi0+dHJ1ZSkKKyAgICB7CisgICAgICAkcmVzID0gJ0AnIC4gam9pbiAoJ0BAJywgc29ydCAkc2VsZi0+Y29uZHMpIC4gJ0AnOworICAgIH0KKyAgJHNlbGYtPnsnc3Vic3Rfc3RyaW5nJ30gPSAkcmVzOworICByZXR1cm4gJHJlczsKK30KKworPWl0ZW0gQzwkY29uZC1FPGd0PnRydWVfd2hlbiAoJHdoZW4pPgorCitSZXR1cm4gMSBpZmYgQzwkY29uZD4gaXMgdHJ1ZSB3aGVuIEM8JHdoZW4+IGlzIHRydWUuCitSZXR1cm4gMCBvdGhlcndpc2UuCisKK1VzaW5nIHRoZSBkZWZpbml0aW9ucyBmcm9tIEw8U1lOT1BTWVM+LCBDPCRjb25kPiBpcyB0cnVlCit3aGVuIEM8JGJvdGg+IGlzIHRydWUsIGJ1dCB0aGUgY29udmVyc2UgaXMgd3JvbmcuCisKKz1jdXQKKworc3ViIHRydWVfd2hlbiAoJCQpCit7CisgIG15ICgkc2VsZiwgJHdoZW4pID0gQF87CisKKyAgIyBOb3RoaW5nIGlzIHRydWUgd2hlbiBGQUxTRSAobm90IGV2ZW4gRkFMU0UgaXRzZWxmLCBidXQgaXQKKyAgIyBzaG91bGRuJ3QgaHVydCBpZiB5b3UgZGVjaWRlIHRvIGNoYW5nZSB0aGF0KS4KKyAgcmV0dXJuIDAgaWYgJHNlbGYtPmZhbHNlIHx8ICR3aGVuLT5mYWxzZTsKKworICAjIElmIHdlIGFyZSB0cnVlLCB3ZSBzdGF5IHRydWUgd2hlbiAkd2hlbiBpcyB0cnVlIDopCisgIHJldHVybiAxIGlmICRzZWxmLT50cnVlOworCisgICMgJFNFTEYgaXMgdHJ1ZSB1bmRlciAkV0hFTiBpZiBlYWNoIGNvbmRpdGlvbmFsIGNvbXBvbmVudCBvZiAkU0VMRgorICAjIGV4aXN0cyBpbiAkV0hFTi4KKyAgZm9yZWFjaCBteSAkY29uZCAoJHNlbGYtPmNvbmRzKQorICAgIHsKKyAgICAgIHJldHVybiAwIHVubGVzcyAkd2hlbi0+aGFzICgkY29uZCk7CisgICAgfQorICByZXR1cm4gMTsKK30KKworPWl0ZW0gQzwkY29uZC1FPGd0PnJlZHVuZGFudF93cnQgKEBjb25kcyk+CisKK1JldHVybiAxIGlmZiBDPCRjb25kPiBpcyB0cnVlIGZvciBhbnkgY29uZGl0aW9uIGluIEM8QGNvbmRzPi4KK0lmIEBjb25kcyBpcyBlbXB0eSwgcmV0dXJuIDEgaWZmIEM8JGNvbmQ+IGlzIEM8RkFMU0U+LgorUmV0dXJuIDAgb3RoZXJ3aXNlLgorCis9Y3V0CisKK3N1YiByZWR1bmRhbnRfd3J0ICgkQCkKK3sKKyAgbXkgKCRzZWxmLCBAY29uZHMpID0gQF87CisKKyAgZm9yZWFjaCBteSAkY29uZCAoQGNvbmRzKQorICAgIHsKKyAgICAgIHJldHVybiAxIGlmICRzZWxmLT50cnVlX3doZW4gKCRjb25kKTsKKyAgICB9CisgIHJldHVybiAkc2VsZi0+ZmFsc2U7Cit9CisKKz1pdGVtIEM8JGNvbmQtRTxndD5pbXBsaWVzX2FueSAoQGNvbmRzKT4KKworUmV0dXJuIDEgaWZmIEM8JGNvbmQ+IGltcGxpZXMgYW55IG9mIHRoZSBjb25kaXRpb25zIGluIEM8QGNvbmRzPi4KK1JldHVybiAwIG90aGVyd2lzZS4KKworPWN1dAorCitzdWIgaW1wbGllc19hbnkgKCRAKQoreworICBteSAoJHNlbGYsIEBjb25kcykgPSBAXzsKKworICBmb3JlYWNoIG15ICRjb25kIChAY29uZHMpCisgICAgeworICAgICAgcmV0dXJuIDEgaWYgJGNvbmQtPnRydWVfd2hlbiAoJHNlbGYpOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKKz1pdGVtIEM8JGNvbmQtRTxndD5ub3Q+CisKK1JldHVybiBhIG5lZ2F0aW9uIG9mIEM8JGNvbmQ+IGFzIGEgbGlzdCBvZiBDPENvbmRpdGlvbj5zLgorVGhpcyBsaXN0IHNob3VsZCBiZSB1c2VkIHRvIGNvbnN0cnVjdCBhIEM8RGlzakNvbmRpdGlvbnM+Cisod2UgY2Fubm90IHJldHVybiBhIEM8RGlzakNvbmRpdGlvbnM+IGZyb20gQzxBdXRvbWFrZTo6Q29uZGl0aW9uPiwKK2JlY2F1c2UgdGhhdCB3b3VsZCBtYWtlIHRoZXNlIHR3byBwYWNrYWdlcyBpbnRlcmRlcGVuZGVudCkuCisKKz1jdXQKKworc3ViIG5vdCAoJCApCit7CisgIG15ICgkc2VsZikgPSBAXzsKKyAgcmV0dXJuIEB7JHNlbGYtPnsnbm90J319IGlmIGRlZmluZWQgJHNlbGYtPnsnbm90J307CisgIG15IEByZXMgPQorICAgIG1hcCB7IG5ldyBBdXRvbWFrZTo6Q29uZGl0aW9uICZjb25kaXRpb25hbF9uZWdhdGUgKCRfKSB9ICRzZWxmLT5jb25kczsKKyAgJHNlbGYtPnsnbm90J30gPSBbQHJlc107CisgIHJldHVybiBAcmVzOworfQorCis9aXRlbSBDPCRjb25kLUU8Z3Q+bXVsdGlwbHkgKEBjb25kcyk+CisKK0Fzc3VtcHRpb246IEM8QGNvbmRzPiByZXByZXNlbnQgYSBkaXNqdW5jdGlvbiBvZiBjb25kaXRpb25zLgorCitSZXR1cm4gdGhlIHJlc3VsdCBvZiBtdWx0aXBseWluZyBDPCRjb25kPiB3aXRoIHRoYXQgZGlzanVuY3Rpb24uCitUaGUgcmVzdWx0IHdpbGwgYmUgYSBsaXN0IG9mIGNvbmRpdGlvbnMgc3VpdGFibGUgdG8gY29uc3RydWN0IGEKK0M8RGlzakNvbmRpdGlvbnM+LgorCis9Y3V0CisKK3N1YiBtdWx0aXBseSAoJEApCit7CisgIG15ICgkc2VsZiwgQHNldCkgPSBAXzsKKyAgbXkgJXJlcyA9ICgpOworICBmb3IgbXkgJGNvbmQgKEBzZXQpCisgICAgeworICAgICAgbXkgJGFucyA9ICRzZWxmLT5tZXJnZSAoJGNvbmQpOworICAgICAgJHJlc3skYW5zfSA9ICRhbnM7CisgICAgfQorCisgICMgRkFMU0UgY2FuIGFsd2F5cyBiZSByZW1vdmVkIGZyb20gYSBkaXNqdW5jdGlvbi4KKyAgZGVsZXRlICRyZXN7RkFMU0V9OworCisgICMgTm93LCAkc2VsZiBpcyBhIGNvbW1vbiBmYWN0b3Igb2YgdGhlIHJlbWFpbmluZyBjb25kaXRpb25zLgorICAjIElmIG9uZSBvZiB0aGUgY29uZGl0aW9ucyBpcyAkc2VsZiwgd2UgY2FuIGRpc2NhcmQgdGhlIHJlc3QuCisgIHJldHVybiAoJHNlbGYsICgpKQorICAgIGlmIGV4aXN0cyAkcmVzeyRzZWxmfTsKKworICByZXR1cm4gKHZhbHVlcyAlcmVzKTsKK30KKworPWhlYWQyIE90aGVyIGhlbHBlciBmdW5jdGlvbnMKKworPW92ZXIgNAorCis9aXRlbSBDPFRSVUU+CisKK1RoZSBDPCJUUlVFIj4gY29uZGl0aW9uYWwuCisKKz1pdGVtIEM8RkFMU0U+CisKK1RoZSBDPCJGQUxTRSI+IGNvbmRpdGlvbmFsLgorCis9Y3V0CisKK3VzZSBjb25zdGFudCBUUlVFID0+IG5ldyBBdXRvbWFrZTo6Q29uZGl0aW9uICJUUlVFIjsKK3VzZSBjb25zdGFudCBGQUxTRSA9PiBuZXcgQXV0b21ha2U6OkNvbmRpdGlvbiAiRkFMU0UiOworCis9aXRlbSBDPHJlZHVjZV9hbmQgKEBjb25kcyk+CisKK1JldHVybiBhIHN1YnNldCBvZiBAY29uZHMgd2l0aCB0aGUgcHJvcGVydHkgdGhhdCB0aGUgY29uanVuY3Rpb24gb2YKK3RoZSBzdWJzZXQgaXMgdGhlIHNhbWUgYXMgdGhlIGNvbmp1bmN0aW9uIG9mIEBjb25kcy4gIEZvciBleGFtcGxlLCBpZgorYm90aCBDPENPTkQxX1RSVUUgQ09ORDJfVFJVRT4gYW5kIEM8Q09ORDFfVFJVRT4gYXJlIGluIHRoZSBsaXN0LAorZGlzY2FyZCB0aGUgbGF0dGVyLiAgSWYgdGhlIGlucHV0IGxpc3QgaXMgZW1wdHksIHJldHVybiBDPChUUlVFKT4uCisKKz1jdXQKKworc3ViIHJlZHVjZV9hbmQgKEApCit7CisgIG15IChAY29uZHMpID0gQF87CisgIG15IEByZXQgPSAoKTsKKyAgbXkgJGNvbmQ7CisgIHdoaWxlIChAY29uZHMgPiAwKQorICAgIHsKKyAgICAgICRjb25kID0gc2hpZnQgQGNvbmRzOworCisgICAgICAjIEZBTFNFIGlzIGFic29yYmVudC4KKyAgICAgIHJldHVybiBGQUxTRQorCWlmICRjb25kID09IEZBTFNFOworCisgICAgICBpZiAoISAkY29uZC0+cmVkdW5kYW50X3dydCAoQHJldCwgQGNvbmRzKSkKKwl7CisJICBwdXNoIChAcmV0LCAkY29uZCk7CisJfQorICAgIH0KKworICByZXR1cm4gVFJVRSBpZiBAcmV0ID09IDA7CisgIHJldHVybiBAcmV0OworfQorCis9aXRlbSBDPHJlZHVjZV9vciAoQGNvbmRzKT4KKworUmV0dXJuIGEgc3Vic2V0IG9mIEBjb25kcyB3aXRoIHRoZSBwcm9wZXJ0eSB0aGF0IHRoZSBkaXNqdW5jdGlvbiBvZgordGhlIHN1YnNldCBpcyBlcXVpdmFsZW50IHRvIHRoZSBkaXNqdW5jdGlvbiBvZiBAY29uZHMuICBGb3IgZXhhbXBsZSwKK2lmIGJvdGggQzxDT05EMV9UUlVFIENPTkQyX1RSVUU+IGFuZCBDPENPTkQxX1RSVUU+IGFyZSBpbiB0aGUgbGlzdCwKK2Rpc2NhcmQgdGhlIGZvcm1lci4gIElmIHRoZSBpbnB1dCBsaXN0IGlzIGVtcHR5LCByZXR1cm4gQzwoRkFMU0UpPi4KKworPWN1dAorCitzdWIgcmVkdWNlX29yIChAKQoreworICBteSAoQGNvbmRzKSA9IEBfOworICBteSBAcmV0ID0gKCk7CisgIG15ICRjb25kOworICB3aGlsZSAoQGNvbmRzID4gMCkKKyAgICB7CisgICAgICAkY29uZCA9IHNoaWZ0IEBjb25kczsKKworICAgICAgbmV4dAorICAgICAgIGlmICRjb25kID09IEZBTFNFOworICAgICAgcmV0dXJuIFRSVUUKKyAgICAgICBpZiAkY29uZCA9PSBUUlVFOworCisgICAgICBwdXNoIChAcmV0LCAkY29uZCkKKyAgICAgICB1bmxlc3MgJGNvbmQtPmltcGxpZXNfYW55IChAcmV0LCBAY29uZHMpOworICAgIH0KKworICByZXR1cm4gRkFMU0UgaWYgQHJldCA9PSAwOworICByZXR1cm4gQHJldDsKK30KKworPWl0ZW0gQzxjb25kaXRpb25hbF9uZWdhdGUgKCRjb25kc3RyKT4KKworTmVnYXRlIGEgY29uZGl0aW9uYWwgc3RyaW5nLgorCis9Y3V0CisKK3N1YiBjb25kaXRpb25hbF9uZWdhdGUgKCQpCit7CisgIG15ICgkY29uZCkgPSBAXzsKKworICAkY29uZCA9fiBzL1RSVUUkL1RSVUVPLzsKKyAgJGNvbmQgPX4gcy9GQUxTRSQvVFJVRS87CisgICRjb25kID1+IHMvVFJVRU8kL0ZBTFNFLzsKKworICByZXR1cm4gJGNvbmQ7Cit9CisKKz1oZWFkMSBTRUUgQUxTTworCitMPEF1dG9tYWtlOjpEaXNqQ29uZGl0aW9ucz4uCisKKz1oZWFkMSBISVNUT1JZCisKK0M8QU1fQ09ORElUSU9OQUw+cyBhbmQgc3VwcG9ydGluZyBjb2RlIHdlcmUgYWRkZWQgdG8gQXV0b21ha2UgMS4xbyBieQorSWFuIExhbmNlIFRheWxvciA8aWFuQGN5Z251cy5vcmc+IGluIDE5OTcuICBTaW5jZSB0aGVuIGl0IGhhcyBiZWVuCitpbXByb3ZlZCBieSBUb20gVHJvbWV5IDx0cm9tZXlAcmVkaGF0LmNvbT4sIFJpY2hhcmQgQm91bHRvbgorPHJpY2hhcmRAdGFydGFydXMub3JnPiwgUmFqYSBSIEhhcmluYXRoIDxoYXJpbmF0aEBjcy51bW4uZWR1PiwKK0FraW0gRGVtYWlsbGUgPGFraW1AZXBpdGEuZnI+LCBhbmQgIEFsZXhhbmRyZSBEdXJldC1MdXR6IDxhZGxAZ251Lm9yZz4uCisKKz1jdXQKKworMTsKKworIyMjIFNldHVwICJHTlUiIHN0eWxlIGZvciBwZXJsLW1vZGUgYW5kIGNwZXJsLW1vZGUuCisjIyBMb2NhbCBWYXJpYWJsZXM6CisjIyBwZXJsLWluZGVudC1sZXZlbDogMgorIyMgcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1pbWFnaW5hcnktb2Zmc2V0OiAwCisjIyBwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWluZGVudC1sZXZlbDogMgorIyMgY3BlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1leHRyYS1uZXdsaW5lLWJlZm9yZS1icmFjZTogdAorIyMgY3BlcmwtbWVyZ2UtdHJhaWxpbmctZWxzZTogbmlsCisjIyBjcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgRW5kOgpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9BdXRvbWFrZS9Db25maWcucG0gYi9zaGFyZS9hdXRvbWFrZS0xLjExL0F1dG9tYWtlL0NvbmZpZy5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2NlZTIzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9BdXRvbWFrZS9Db25maWcucG0KQEAgLTAsMCArMSw1MSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgLSotIFBlcmwgLSotCisjIEdlbmVyYXRlZCBmcm9tIENvbmZpZy5pbjsgZG8gbm90IGVkaXQgYnkgaGFuZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK3BhY2thZ2UgQXV0b21ha2U6OkNvbmZpZzsKK3VzZSBzdHJpY3Q7CisKK3VzZSA1LjAwNjsKK3JlcXVpcmUgRXhwb3J0ZXI7CisKK291ciBASVNBID0gcXcgKEV4cG9ydGVyKTsKK291ciBARVhQT1JUID0gcXcgKCRBUElWRVJTSU9OICRQQUNLQUdFICRWRVJTSU9OICRsaWJkaXIgJHBlcmxfdGhyZWFkcyk7CisKKyMgUGFyYW1ldGVycyBzZXQgYnkgY29uZmlndXJlLiAgTm90IHRvIGJlIGNoYW5nZWQuICBOT1RFOiBhc3NpZ24KKyMgVkVSU0lPTiBhcyBzdHJpbmcgc28gdGhhdCBlLmcuIHZlcnNpb24gMC4zMCB3aWxsIHByaW50IGNvcnJlY3RseS4KK291ciAkQVBJVkVSU0lPTiA9ICcxLjExJzsKK291ciAkUEFDS0FHRSA9ICdhdXRvbWFrZSc7CitvdXIgJFZFUlNJT04gPSAnMS4xMS4xJzsKK291ciAkbGliZGlyID0gJy91c3IvbG9jYWwvZ29vZ2xlL2FwZW53YXJyL2F0aGVuYS9vdXQubXN0Yy9ob3N0L3Vzci9zaGFyZS9hdXRvbWFrZS0xLjExJzsKK291ciAkcGVybF90aHJlYWRzID0gMTsKKworMTs7CisKKyMjIyBTZXR1cCAiR05VIiBzdHlsZSBmb3IgcGVybC1tb2RlIGFuZCBjcGVybC1tb2RlLgorIyMgTG9jYWwgVmFyaWFibGVzOgorIyMgcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIHBlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIHBlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2UtaW1hZ2luYXJ5LW9mZnNldDogMAorIyMgcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIGNwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtZXh0cmEtbmV3bGluZS1iZWZvcmUtYnJhY2U6IHQKKyMjIGNwZXJsLW1lcmdlLXRyYWlsaW5nLWVsc2U6IG5pbAorIyMgY3BlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIEVuZDoKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9tYWtlLTEuMTEvQXV0b21ha2UvQ29uZmlndXJlX2FjLnBtIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9BdXRvbWFrZS9Db25maWd1cmVfYWMucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ2ZmFkMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvQXV0b21ha2UvQ29uZmlndXJlX2FjLnBtCkBAIC0wLDAgKzEsMTA2IEBACisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSwgMjAwNiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGhlIG1haW4gY29weSBvZiB0aGlzIGZpbGUgaXMgaW4gQXV0b21ha2UncyBDVlMgcmVwb3NpdG9yeS4gIworIyBVcGRhdGVzIHNob3VsZCBiZSBzZW50IHRvIGF1dG9tYWtlLXBhdGNoZXNAZ251Lm9yZy4gICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworcGFja2FnZSBBdXRvbWFrZTo6Q29uZmlndXJlX2FjOworCit1c2Ugc3RyaWN0OwordXNlIEV4cG9ydGVyOwordXNlIEF1dG9tYWtlOjpDaGFubmVsczsKK3VzZSBBdXRvbWFrZTo6Q2hhbm5lbERlZnM7CisKK3VzZSB2YXJzIHF3IChASVNBIEBFWFBPUlQpOworCitASVNBID0gcXcgKEV4cG9ydGVyKTsKK0BFWFBPUlQgPSBxdyAoJmZpbmRfY29uZmlndXJlX2FjICZyZXF1aXJlX2NvbmZpZ3VyZV9hYyk7CisKKz1oZWFkMSBOQU1FCisKK0F1dG9tYWtlOjpDb25maWd1cmVfYWMgLSBMb2NhdGUgY29uZmlndXJlLmFjIG9yIGNvbmZpZ3VyZS5pbi4KKworPWhlYWQxIFNZTk9QU0lTCisKKyAgdXNlIEF1dG9tYWtlOjpDb25maWd1cmVfYWM7CisKKyAgIyBUcnkgdG8gbG9jYXRlIGNvbmZpZ3VyZS5pbiBvciBjb25maWd1cmUuYWMgaW4gdGhlIGN1cnJlbnQKKyAgIyBkaXJlY3RvcnkuICBJdCBtYXkgYmUgYWJzZW50LiAgQ29tcGxhaW4gaWYgYm90aCBmaWxlcyBleGlzdC4KKyAgbXkgJGZpbGVfbmFtZSA9IGZpbmRfY29uZmlndXJlX2FjOworCisgICMgTGlrZXdpc2UsIGJ1dCBib21iIG91dCBpZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdC4KKyAgbXkgJGZpbGVfbmFtZSA9IHJlcXVpcmVfY29uZmlndXJlX2FjOworCisgICMgTGlrZXdpc2UsIGJ1dCBpbiAkZGlyLgorICBteSAkZmlsZV9uYW1lID0gZmluZF9jb25maWd1cmVfYWMgKCRkaXIpOworICBteSAkZmlsZV9uYW1lID0gcmVxdWlyZV9jb25maWd1cmVfYWMgKCRkaXIpOworCis9Y3V0CisKK3N1YiBmaW5kX2NvbmZpZ3VyZV9hYyAoO0ApCit7CisgIG15ICgkZGlyZWN0b3J5KSA9IEBfOworICAkZGlyZWN0b3J5IHx8PSAnLic7CisgIG15ICRjb25maWd1cmVfYWMgPQorICAgIEZpbGU6OlNwZWMtPmNhbm9ucGF0aCAoRmlsZTo6U3BlYy0+Y2F0ZmlsZSAoJGRpcmVjdG9yeSwgJ2NvbmZpZ3VyZS5hYycpKTsKKyAgbXkgJGNvbmZpZ3VyZV9pbiA9CisgICAgRmlsZTo6U3BlYy0+Y2Fub25wYXRoIChGaWxlOjpTcGVjLT5jYXRmaWxlICgkZGlyZWN0b3J5LCAnY29uZmlndXJlLmluJykpOworCisgIGlmICgtZiAkY29uZmlndXJlX2FjKQorICAgIHsKKyAgICAgIGlmICgtZiAkY29uZmlndXJlX2luKQorCXsKKwkgIG1zZyAoJ3Vuc3VwcG9ydGVkJywKKwkgICAgICAgImAkY29uZmlndXJlX2FjJyBhbmQgYCRjb25maWd1cmVfaW4nIGJvdGggcHJlc2VudC5cbiIKKwkgICAgICAgLiAicHJvY2VlZGluZyB3aXRoIGAkY29uZmlndXJlX2FjJy4iKTsKKwl9CisgICAgICByZXR1cm4gJGNvbmZpZ3VyZV9hYworICAgIH0KKyAgZWxzaWYgKC1mICRjb25maWd1cmVfaW4pCisgICAgeworICAgICAgcmV0dXJuICRjb25maWd1cmVfaW47CisgICAgfQorICByZXR1cm4gJGNvbmZpZ3VyZV9hYzsKK30KKworCitzdWIgcmVxdWlyZV9jb25maWd1cmVfYWMgKDskKQoreworICBteSAkcmVzID0gZmluZF9jb25maWd1cmVfYWMgKEBfKTsKKyAgZmF0YWwgImBjb25maWd1cmUuYWMnIG9yIGBjb25maWd1cmUuaW4nIGlzIHJlcXVpcmVkIgorICAgIHVubGVzcyAtZiAkcmVzOworICByZXR1cm4gJHJlcworfQorCisxOworCisjIyMgU2V0dXAgIkdOVSIgc3R5bGUgZm9yIHBlcmwtbW9kZSBhbmQgY3BlcmwtbW9kZS4KKyMjIExvY2FsIFZhcmlhYmxlczoKKyMjIHBlcmwtaW5kZW50LWxldmVsOiAyCisjIyBwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLWltYWdpbmFyeS1vZmZzZXQ6IDAKKyMjIHBlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtaW5kZW50LWxldmVsOiAyCisjIyBjcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWV4dHJhLW5ld2xpbmUtYmVmb3JlLWJyYWNlOiB0CisjIyBjcGVybC1tZXJnZS10cmFpbGluZy1lbHNlOiBuaWwKKyMjIGNwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBFbmQ6CmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL0F1dG9tYWtlL0Rpc2pDb25kaXRpb25zLnBtIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9BdXRvbWFrZS9EaXNqQ29uZGl0aW9ucy5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTNhYmI2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9BdXRvbWFrZS9EaXNqQ29uZGl0aW9ucy5wbQpAQCAtMCwwICsxLDU1NiBAQAorIyBDb3B5cmlnaHQgKEMpIDE5OTcsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworcGFja2FnZSBBdXRvbWFrZTo6RGlzakNvbmRpdGlvbnM7CisKK3VzZSBDYXJwOwordXNlIHN0cmljdDsKK3VzZSBBdXRvbWFrZTo6Q29uZGl0aW9uIHF3L1RSVUUgRkFMU0UvOworCis9aGVhZDEgTkFNRQorCitBdXRvbWFrZTo6RGlzakNvbmRpdGlvbnMgLSByZWNvcmQgYSBkaXNqdW5jdGlvbiBvZiBDb25kaXRpb25zCisKKz1oZWFkMSBTWU5PUFNJUworCisgIHVzZSBBdXRvbWFrZTo6Q29uZGl0aW9uOworICB1c2UgQXV0b21ha2U6OkRpc2pDb25kaXRpb25zOworCisgICMgQ3JlYXRlIGEgQ29uZGl0aW9uIHRvIHJlcHJlc2VudCAiQ09ORDEgYW5kIG5vdCBDT05EMiIuCisgIG15ICRjb25kID0gbmV3IEF1dG9tYWtlOjpDb25kaXRpb24gIkNPTkQxX1RSVUUiLCAiQ09ORDJfRkFMU0UiOworICAjIENyZWF0ZSBhIENvbmRpdGlvbiB0byByZXByZXNlbnQgIm5vdCBDT05EMyIuCisgIG15ICRvdGhlciA9IG5ldyBBdXRvbWFrZTo6Q29uZGl0aW9uICJDT05EM19GQUxTRSI7CisKKyAgIyBDcmVhdGUgYSBEaXNqQ29uZGl0aW9ucyB0byByZXByZXNlbnQKKyAgIyAgICIoQ09ORDEgYW5kIG5vdCBDT05EMikgb3IgKG5vdCBDT05EMykiCisgIG15ICRzZXQgPSBuZXcgQXV0b21ha2U6OkRpc2pDb25kaXRpb25zICRjb25kLCAkb3RoZXI7CisKKyAgIyBSZXR1cm4gdGhlIGxpc3Qgb2YgQ29uZGl0aW9ucyBpbnZvbHZlZCBpbiAkc2V0LgorICBteSBAY29uZHMgPSAkc2V0LT5jb25kczsKKworICAjIFJldHVybiBvbmUgb2YgdGhlIENvbmRpdGlvbiBpbnZvbHZlZCBpbiAkc2V0LgorICBteSAkY29uZCA9ICRzZXQtPm9uZV9jb25kOworCisgICMgUmV0dXJuIHRydWUgaWZmICRzZXQgaXMgYWx3YXlzIHRydWUgKGkuZS4gaXRzIHN1YmNvbmRpdGlvbnMKKyAgIyBjb3ZlciBhbGwgY2FzZXMpLgorICBpZiAoJHNldC0+dHJ1ZSkgeyAuLi4gfQorCisgICMgUmV0dXJuIGZhbHNlIGlmZiAkc2V0IGlzIGFsd2F5cyBmYWxzZSAoaS5lLiBpcyBlbXB0eSwgb3IgY29udGFpbnMKKyAgIyBvbmx5IGZhbHNlIGNvbmRpdGlvbnMpLgorICBpZiAoJHNldC0+ZmFsc2UpIHsgLi4uIH0KKworICAjIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIERpc2pDb25kaXRpb25zLgorICAjICAgIkNPTkQxX1RSVUUgQ09ORDJfRkFMU0UgfCBDT05EM19GQUxTRSIKKyAgbXkgJHN0ciA9ICRzZXQtPnN0cmluZzsKKworICAjIFJldHVybiBhIGh1bWFuIHJlYWRhYmxlIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIERpc2pDb25kaXRpb25zLgorICAjICAgIihDT05EMSBhbmQgIUNPTkQyKSBvciAoIUNPTkQzKSIKKyAgbXkgJHN0ciA9ICRzZXQtPmh1bWFuOworCisgICMgTWVyZ2UgKE9SKSBzZXZlcmFsIERpc2pDb25kaXRpb25zLgorICBteSAkYWxsID0gJHNldC0+bWVyZ2UoJHNldDIsICRzZXQzLCAuLi4pCisKKyAgIyBJbnZlcnQgYSBEaXNqQ29uZGl0aW9ucywgaS5lLiwgY3JlYXRlIGEgbmV3IERpc2pDb25kaXRpb25zCisgICMgdGhhdCBjb21wbGVtZW50cyAkc2V0LgorICBteSAkaW52ID0gJHNldC0+aW52ZXJ0OworCisgICMgTXVsdGlwbHkgdHdvIERpc2pDb25kaXRpb25zLgorICBteSAkcHJvZCA9ICRzZXQxLT5tdWx0aXBseSAoJHNldDIpOworCisgICMgUmV0dXJuIHRoZSBzdWJjb25kaXRpb25zIG9mIGEgRGlzakNvbmRpdGlvbnMgd2l0aCByZXNwZWN0IHRvCisgICMgYSBDb25kaXRpb24uICBTZWUgdGhlIGRlc2NyaXB0aW9uIGZvciBhIHJlYWwgZXhhbXBsZS4KKyAgbXkgJHN1YmNvbmRzID0gJHNldC0+c3ViX2NvbmRpdGlvbnMgKCRjb25kKTsKKworICAjIENoZWNrIHdoZXRoZXIgYSBuZXcgZGVmaW5pdGlvbiBpbiBjb25kaXRpb24gJGNvbmQgd291bGQgYmUKKyAgIyBhbWJpZ3VvdXMgdy5yLnQuIGV4aXN0aW5nIGRlZmluaXRpb25zIGluICRzZXQuCisgICgkbXNnLCAkYW1iaWdfY29uZCkgPSAkc2V0LT5hbWJpZ3VvdXNfcCAoJHdoYXQsICRjb25kKTsKKworPWhlYWQxIERFU0NSSVBUSU9OCisKK0EgQzxEaXNqQ29uZGl0aW9ucz4gaXMgYSBkaXNqdW5jdGlvbiBvZiBDPENvbmRpdGlvbj5zLiAgSW4gQXV0b21ha2UKK3RoZXkgYXJlIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBjb25kaXRpb25zIGludG8gd2hpY2ggTWFrZWZpbGUKK3ZhcmlhYmxlcyBhbmQgTWFrZWZpbGUgcnVsZXMgYXJlIGRlZmluZWQuCisKK0lmIHRoZSB2YXJpYWJsZSBDPFZBUj4gaXMgZGVmaW5lZCBhcworCisgIGlmIENPTkQxCisgICAgaWYgQ09ORDIKKyAgICAgIFZBUiA9IHZhbHVlMQorICAgIGVuZGlmCisgIGVuZGlmCisgIGlmICFDT05EMworICAgIGlmIENPTkQ0CisgICAgICBWQVIgPSB2YWx1ZTIKKyAgICBlbmRpZgorICBlbmRpZgorCit0aGVuIGl0IHdpbGwgYmUgYXNzb2NpYXRlZCBhIEM8RGlzakNvbmRpdGlvbnM+IGNyZWF0ZWQgd2l0aAordGhlIGZvbGxvd2luZyBzdGF0ZW1lbnQuCisKKyAgbmV3IEF1dG9tYWtlOjpEaXNqQ29uZGl0aW9ucworICAgIChuZXcgQXV0b21ha2U6OkNvbmRpdGlvbiAoIkNPTkQxX1RSVUUiLCAiQ09ORDJfVFJVRSIpLAorICAgICBuZXcgQXV0b21ha2U6OkNvbmRpdGlvbiAoIkNPTkQzX0ZBTFNFIiwgIkNPTkQ0X1RSVUUiKSk7CisKK0FzIHlvdSBjYW4gc2VlLCBhIEM8RGlzakNvbmRpdGlvbnM+IGlzIG1hZGUgZnJvbSBhIGxpc3Qgb2YKK0M8Q29uZGl0aW9uPnMuICBTaW5jZSBDPERpc2pDb25kaXRpb25zPiBpcyBhIGRpc2p1bmN0aW9uLCBhbmQKK0M8Q29uZGl0aW9uPiBpcyBhIGNvbmp1bmN0aW9uLCB0aGUgYWJvdmUgY2FuIGJlIHJlYWQgYXMKK2ZvbGxvd3MuCisKKyAgKENPTkQxIGFuZCBDT05EMikgb3IgKChub3QgQ09ORDMpIGFuZCBDT05ENCkKKworVGhhdCdzIGluZGVlZCB0aGUgY29uZGl0aW9uIGluIHdoaWNoIEM8VkFSPiBoYXMgYSB2YWx1ZS4KKworTGlrZSBDPENvbmRpdGlvbj4gb2JqZWN0cywgYSBDPERpc2pDb25kaXRpb25zPiBvYmplY3QgaXMgdW5pcXVlCit3aXRoIHJlc3BlY3QgdG8gaXRzIGNvbmRpdGlvbnMuICBUd28gQzxEaXNqQ29uZGl0aW9ucz4gb2JqZWN0cyBjcmVhdGVkCitmb3IgdGhlIHNhbWUgc2V0IG9mIGNvbmRpdGlvbnMgd2lsbCBoYXZlIHRoZSBzYW1lIGFkZHJlc3MuICBUaGlzIG1ha2VzCitpdCBlYXN5IHRvIGNvbXBhcmUgQzxEaXNqQ29uZGl0aW9ucz5zOiBqdXN0IGNvbXBhcmUgdGhlIHJlZmVyZW5jZXMuCisKKz1oZWFkMiBNZXRob2RzCisKKz1vdmVyIDQKKworPWl0ZW0gQzwkc2V0ID0gbmV3IEF1dG9tYWtlOjpEaXNqQ29uZGl0aW9ucyBbQGNvbmRzXT4KKworQ3JlYXRlIGEgQzxEaXNqQ29uZGl0aW9ucz4gb2JqZWN0IGZyb20gdGhlIGxpc3Qgb2YgQzxDb25kaXRpb24+CitvYmplY3RzIHBhc3NlZCBpbiBhcmd1bWVudHMuCisKK0lmIHRoZSBDPEBjb25kcz4gbGlzdCBpcyBlbXB0eSwgdGhlIEM8RGlzakNvbmRpdGlvbnM+IGlzIGFzc3VtZWQgdG8gYmUKK2ZhbHNlLgorCitBcyBleHBsYWluZWQgcHJldmlvdXNseSwgdGhlIHJlZmVyZW5jZSAob2JqZWN0KSByZXR1cm5lZCBpcyB1bmlxdWUKK3dpdGggcmVzcGVjdCB0byBDPEBjb25kcz4uICBGb3IgdGhpcyBwdXJwb3NlLCBkdXBsaWNhdGUgZWxlbWVudHMgYXJlCitpZ25vcmVkLgorCis9Y3V0CisKKyMgS2V5cyBpbiB0aGlzIGhhc2ggYXJlIERpc2pDb25kaXRpb25zIHN0cmluZ3MuIFZhbHVlcyBhcmUgdGhlCisjIGFzc29jaWF0ZWQgb2JqZWN0IERpc2pDb25kaXRpb25zLiAgVGhpcyBpcyB1c2VkIGJ5IGBuZXcnIHRvIHJldXNlCisjIERpc2pDb25kaXRpb25zIG9iamVjdHMgd2l0aCBpZGVudGljYWwgY29uZGl0aW9ucy4KK3VzZSB2YXJzICclX2Rpc2pjb25kaXRpb25fc2luZ2xldG9ucyc7CisKK3N1YiBuZXcgKCQ7QCkKK3sKKyAgbXkgKCRjbGFzcywgQGNvbmRzKSA9IEBfOworICBteSBAZmlsdGVyZWRfY29uZHMgPSAoKTsKKyAgZm9yIG15ICRjb25kIChAY29uZHMpCisgICAgeworICAgICAgY29uZmVzcyAiYCRjb25kJyBpc24ndCBhIHJlZmVyZW5jZSIgdW5sZXNzIHJlZiAkY29uZDsKKyAgICAgIGNvbmZlc3MgImAkY29uZCcgaXNuJ3QgYW4gQXV0b21ha2U6OkNvbmRpdGlvbiIKKwl1bmxlc3MgJGNvbmQtPmlzYSAoIkF1dG9tYWtlOjpDb25kaXRpb24iKTsKKworICAgICAgIyBUaGlzIGlzIGEgZGlzanVuY3Rpb24gb2YgY29uZGl0aW9ucywgc28gd2UgZHJvcAorICAgICAgIyBmYWxzZSBjb25kaXRpb25zLiAgV2UnbGwgYWx3YXlzIHRyZWF0IGFuICJlbXB0eSIKKyAgICAgICMgRGlzakNvbmRpdGlvbnMgYXMgZmFsc2UgZm9yIHRoaXMgcmVhc29uLgorICAgICAgbmV4dCBpZiAkY29uZC0+ZmFsc2U7CisKKyAgICAgIHB1c2ggQGZpbHRlcmVkX2NvbmRzLCAkY29uZDsKKyAgICB9CisKKyAgbXkgJHN0cmluZzsKKyAgaWYgKEBmaWx0ZXJlZF9jb25kcykKKyAgICB7CisgICAgICBAZmlsdGVyZWRfY29uZHMgPSBzb3J0IHsgJGEtPnN0cmluZyBjbXAgJGItPnN0cmluZyB9IEBmaWx0ZXJlZF9jb25kczsKKyAgICAgICRzdHJpbmcgPSBqb2luICgnIHwgJywgbWFwIHsgJF8tPnN0cmluZyB9IEBmaWx0ZXJlZF9jb25kcyk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgJHN0cmluZyA9ICdGQUxTRSc7CisgICAgfQorCisgICMgUmV0dXJuIGFueSBleGlzdGluZyBpZGVudGljYWwgRGlzakNvbmRpdGlvbnMuCisgIG15ICRtZSA9ICRfZGlzamNvbmRpdGlvbl9zaW5nbGV0b25zeyRzdHJpbmd9OworICByZXR1cm4gJG1lIGlmICRtZTsKKworICAjIEVsc2UsIGNyZWF0ZSBhIG5ldyBEaXNqQ29uZGl0aW9ucy4KKworICAjIFN0b3JlIGNvbmRpdGlvbnMgYXMga2V5cyBBTkQgYXMgdmFsdWVzLCBiZWNhdXNlIGJsZXNzZWQKKyAgIyBvYmplY3RzIGFyZSBjb252ZXJ0ZWQgdG8gc3RyaW5ncyB3aGVuIHVzZWQgYXMga2V5cyAoc28KKyAgIyBhdCBsZWFzdCB3ZSBzdGlsbCBoYXZlIHRoZSB2YWx1ZSB3aGVuIHdlIG5lZWQgdG8gY2FsbAorICAjIGEgbWV0aG9kKS4KKyAgbXkgJWggPSBtYXAgeyRfID0+ICRffSBAZmlsdGVyZWRfY29uZHM7CisKKyAgbXkgJHNlbGYgPSB7CisgICAgaGFzaCA9PiBcJWgsCisgICAgc3RyaW5nID0+ICRzdHJpbmcsCisgICAgY29uZHMgPT4gXEBmaWx0ZXJlZF9jb25kcywKKyAgfTsKKyAgYmxlc3MgJHNlbGYsICRjbGFzczsKKworICAkX2Rpc2pjb25kaXRpb25fc2luZ2xldG9uc3skc3RyaW5nfSA9ICRzZWxmOworICByZXR1cm4gJHNlbGY7Cit9CisKKworPWl0ZW0gQzxDTE9ORT4KKworSW50ZXJuYWwgc3BlY2lhbCBzdWJyb3V0aW5lIHRvIGZpeCB1cCB0aGUgc2VsZiBoYXNoZXMgaW4KK0M8JV9kaXNqY29uZGl0aW9uX3NpbmdsZXRvbnM+IHVwb24gdGhyZWFkIGNyZWF0aW9uLiAgQzxDTE9ORT4gaXMgaW52b2tlZAorYXV0b21hdGljYWxseSB3aXRoIGl0aHJlYWRzIGZyb20gUGVybCA1LjcuMiBvciBsYXRlciwgc28gaWYgeW91IHVzZSB0aGlzCittb2R1bGUgd2l0aCBlYXJsaWVyIHZlcnNpb25zIG9mIFBlcmwsIGl0IGlzIG5vdCB0aHJlYWQtc2FmZS4KKworPWN1dAorCitzdWIgQ0xPTkUKK3sKKyAgZm9yZWFjaCBteSAkc2VsZiAodmFsdWVzICVfZGlzamNvbmRpdGlvbl9zaW5nbGV0b25zKQorICAgIHsKKyAgICAgIG15ICVoID0gbWFwIHsgJF8gPT4gJF8gfSBAeyRzZWxmLT57J2NvbmRzJ319OworICAgICAgJHNlbGYtPnsnaGFzaCd9ID0gXCVoOworICAgIH0KK30KKworCis9aXRlbSBDPEBjb25kcyA9ICRzZXQtRTxndD5jb25kcz4KKworUmV0dXJuIHRoZSBsaXN0IG9mIEM8Q29uZGl0aW9uPiBvYmplY3RzIGludm9sdmVkIGluIEM8JHNldD4uCisKKz1jdXQKKworc3ViIGNvbmRzICgkICkKK3sKKyAgbXkgKCRzZWxmKSA9IEBfOworICByZXR1cm4gQHskc2VsZi0+eydjb25kcyd9fTsKK30KKworPWl0ZW0gQzwkY29uZCA9ICRzZXQtRTxndD5vbmVfY29uZD4KKworUmV0dXJuIG9uZSBDPENvbmRpdGlvbj4gb2JqZWN0IGludm9sdmVkIGluIEM8JHNldD4uCisKKz1jdXQKKworc3ViIG9uZV9jb25kICgkKQoreworICBteSAoJHNlbGYpID0gQF87CisgIHJldHVybiAoJXskc2VsZi0+eydoYXNoJ319LClbMV07Cit9CisKKz1pdGVtIEM8JGV0ID0gJHNldC1FPGd0PmZhbHNlPgorCitSZXR1cm4gMSBpZmYgdGhlIEM8RGlzakNvbmRpdGlvbnM+IG9iamVjdCBpcyBhbHdheXMgZmFsc2UgKGkuZS4sIGlmIGl0CitpcyBlbXB0eSwgb3IgaWYgaXQgY29udGFpbnMgb25seSBmYWxzZSBDPENvbmRpdGlvbj5zKS4gUmV0dXJuIDAKK290aGVyd2lzZS4KKworPWN1dAorCitzdWIgZmFsc2UgKCQgKQoreworICBteSAoJHNlbGYpID0gQF87CisgIHJldHVybiAwID09IGtleXMgJXskc2VsZi0+eydoYXNoJ319OworfQorCis9aXRlbSBDPCRldCA9ICRzZXQtRTxndD50cnVlPgorCitSZXR1cm4gMSBpZmYgdGhlIEM8RGlzakNvbmRpdGlvbnM+IG9iamVjdCBpcyBhbHdheXMgdHJ1ZSAoaS5lLiBjb3ZlcnMgYWxsCitjb25kaXRpb25zKS4gUmV0dXJuIDAgb3RoZXJ3aXNlLgorCis9Y3V0CisKK3N1YiB0cnVlICgkICkKK3sKKyAgbXkgKCRzZWxmKSA9IEBfOworICByZXR1cm4gJHNlbGYtPmludmVydC0+ZmFsc2U7Cit9CisKKz1pdGVtIEM8JHN0ciA9ICRzZXQtRTxndD5zdHJpbmc+CisKK0J1aWxkIGEgc3RyaW5nIHdoaWNoIGRlbm90ZXMgdGhlIEM8RGlzakNvbmRpdGlvbnM+LgorCis9Y3V0CisKK3N1YiBzdHJpbmcgKCQgKQoreworICBteSAoJHNlbGYpID0gQF87CisgIHJldHVybiAkc2VsZi0+eydzdHJpbmcnfTsKK30KKworPWl0ZW0gQzwkY29uZC1FPGd0Pmh1bWFuPgorCitCdWlsZCBhIGh1bWFuIHJlYWRhYmxlIHN0cmluZyB3aGljaCBkZW5vdGVzIHRoZSBDPERpc2pDb25kaXRpb25zPi4KKworPWN1dAorCitzdWIgaHVtYW4gKCQgKQoreworICBteSAoJHNlbGYpID0gQF87CisKKyAgcmV0dXJuICRzZWxmLT57J2h1bWFuJ30gaWYgZGVmaW5lZCAkc2VsZi0+eydodW1hbid9OworCisgIG15ICRyZXMgPSAnJzsKKyAgaWYgKCRzZWxmLT5mYWxzZSkKKyAgICB7CisgICAgICAkcmVzID0gJ0ZBTFNFJzsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBteSBAYyA9ICRzZWxmLT5jb25kczsKKyAgICAgIGlmICgxID09IEBjKQorCXsKKwkgICRyZXMgPSAkY1swXS0+aHVtYW47CisJfQorICAgICAgZWxzZQorCXsKKwkgICRyZXMgPSAnKCcgLiBqb2luICgnKSBvciAoJywgbWFwIHsgJF8tPmh1bWFuIH0gJHNlbGYtPmNvbmRzKSAuICcpJzsKKwl9CisgICAgfQorICAkc2VsZi0+eydodW1hbid9ID0gJHJlczsKKyAgcmV0dXJuICRyZXM7Cit9CisKKworPWl0ZW0gQzwkbmV3Y29uZCA9ICRjb25kLUU8Z3Q+bWVyZ2UgKEBvdGhlcmNvbmRzKT4KKworUmV0dXJuIGEgbmV3IEM8RGlzakNvbmRpdGlvbnM+IHdoaWNoIGlzIHRoZSBkaXNqdW5jdGlvbiBvZgorQzwkY29uZD4gYW5kIEM8QG90aGVyY29uZHM+LiAgSXRlbXMgaW4gQzxAb3RoZXJjb25kcz4gY2FuIGJlCitAQzxDb25kaXRpb24+cyBvciBDPERpc2pDb25kaXRpb25zPi4KKworPWN1dAorCitzdWIgbWVyZ2UgKCRAKQoreworICBteSAoJHNlbGYsIEBvdGhlcmNvbmRzKSA9IEBfOworICBuZXcgQXV0b21ha2U6OkRpc2pDb25kaXRpb25zICgKKyAgICBtYXAgeyAkXy0+aXNhICgiQXV0b21ha2U6OkRpc2pDb25kaXRpb25zIikgPyAkXy0+Y29uZHMgOiAkXyB9CisgICAgICAgICgkc2VsZiwgQG90aGVyY29uZHMpKTsKK30KKworCis9aXRlbSBDPCRwcm9kID0gJHNldDEtRTxndD5tdWx0aXBseSAoJHNldDIpPgorCitNdWx0aXBseSB0d28gY29uZGl0aW9uYWwgc2V0cy4KKworICBteSAkc2V0MSA9IG5ldyBBdXRvbWFrZTo6RGlzakNvbmRpdGlvbnMKKyAgICAobmV3IEF1dG9tYWtlOjpDb25kaXRpb24gKCJBX1RSVUUiKSwKKyAgICAgbmV3IEF1dG9tYWtlOjpDb25kaXRpb24gKCJCX1RSVUUiKSk7CisgIG15ICRzZXQyID0gbmV3IEF1dG9tYWtlOjpEaXNqQ29uZGl0aW9ucworICAgIChuZXcgQXV0b21ha2U6OkNvbmRpdGlvbiAoIkNfRkFMU0UiKSwKKyAgICAgbmV3IEF1dG9tYWtlOjpDb25kaXRpb24gKCJEX0ZBTFNFIikpOworCitDPCRzZXQxLUU8Z3Q+bXVsdGlwbHkgKCRzZXQyKT4gd2lsbCByZXR1cm4KKworICBuZXcgQXV0b21ha2U6OkRpc2pDb25kaXRpb25zCisgICAgKG5ldyBBdXRvbWFrZTo6Q29uZGl0aW9uICgiQV9UUlVFIiwgIkNfRkFMU0UiKSwKKyAgICAgbmV3IEF1dG9tYWtlOjpDb25kaXRpb24gKCJCX1RSVUUiLCAiQ19GQUxTRSIpLDsKKyAgICAgbmV3IEF1dG9tYWtlOjpDb25kaXRpb24gKCJBX1RSVUUiLCAiRF9GQUxTRSIpLAorICAgICBuZXcgQXV0b21ha2U6OkNvbmRpdGlvbiAoIkJfVFJVRSIsICJEX0ZBTFNFIikpOworCitUaGUgYXJndW1lbnQgY2FuIGFsc28gYmUgYSBDPENvbmRpdGlvbj4uCisKKz1jdXQKKworIyBTYW1lIGFzIG11bHRpcGx5KCkgYnV0IHRha2UgYSBsaXN0IG9mIENvbmRpdGlvbmFscyBhcyBzZWNvbmQgYXJndW1lbnQuCisjIFdlIHVzZSB0aGlzIGluIGludmVydCgpLgorc3ViIF9tdWx0aXBseSAoJEApCit7CisgIG15ICgkc2VsZiwgQHNldCkgPSBAXzsKKyAgbXkgQHJlcyA9IG1hcCB7ICRfLT5tdWx0aXBseSAoQHNldCkgfSAkc2VsZi0+Y29uZHM7CisgIHJldHVybiBuZXcgQXV0b21ha2U6OkRpc2pDb25kaXRpb25zIChBdXRvbWFrZTo6Q29uZGl0aW9uOjpyZWR1Y2Vfb3IgQHJlcyk7Cit9CisKK3N1YiBtdWx0aXBseSAoJCQpCit7CisgIG15ICgkc2VsZiwgJHNldCkgPSBAXzsKKyAgcmV0dXJuICRzZWxmLT5fbXVsdGlwbHkgKCRzZXQpIGlmICRzZXQtPmlzYSgnQXV0b21ha2U6OkNvbmRpdGlvbicpOworICByZXR1cm4gJHNlbGYtPl9tdWx0aXBseSAoJHNldC0+Y29uZHMpOworfQorCis9aXRlbSBDPCRpbnYgPSAkc2V0LUU8Z3Q+aW52ZXJ0PgorCitJbnZlcnQgYSBDPERpc2pDb25kaXRpb25zPi4gIFJldHVybiBhIEM8RGlzakNvbmRpdGlvbnM+IHdoaWNoIGlzIHRydWUKK3doZW4gQzwkc2V0PiBpcyBmYWxzZSwgYW5kIHZpY2UtdmVyc2EuCisKKyAgbXkgJHNldCA9IG5ldyBBdXRvbWFrZTo6RGlzakNvbmRpdGlvbnMKKyAgICAobmV3IEF1dG9tYWtlOjpDb25kaXRpb24gKCJBX1RSVUUiLCAiQl9UUlVFIiksCisgICAgIG5ldyBBdXRvbWFrZTo6Q29uZGl0aW9uICgiQV9GQUxTRSIsICJCX0ZBTFNFIikpOworCitDYWxsaW5nIEM8JHNldC1FPGd0PmludmVydD4gd2lsbCByZXR1cm4gdGhlIGZvbGxvd2luZyBDPERpc2pDb25kaXRpb25zPi4KKworICBuZXcgQXV0b21ha2U6OkRpc2pDb25kaXRpb25zCisgICAgKG5ldyBBdXRvbWFrZTo6Q29uZGl0aW9uICgiQV9UUlVFIiwgIkJfRkFMU0UiKSwKKyAgICAgbmV3IEF1dG9tYWtlOjpDb25kaXRpb24gKCJBX0ZBTFNFIiwgIkJfVFJVRSIpKTsKKworV2UgaW1wbGVtZW50IHRoZSBpbnZlcnNpb24gYnkgYSBwcm9kdWN0LW9mLXN1bXMgdG8gc3VtLW9mLXByb2R1Y3RzCitjb252ZXJzaW9uIHVzaW5nIHJlcGVhdGVkIG11bHRpcGxpY2F0aW9ucy4gIEJlY2F1c2Ugb2YgdGhlIHdheSB3ZQoraW1wbGVtZW50IG11bHRpcGxpY2F0aW9uLCB0aGUgcmVzdWx0IG9mIGludmVyc2lvbiBpcyBpbiBjYW5vbmljYWwKK3ByaW1lIGltcGxpY2FudCBmb3JtLgorCis9Y3V0CisKK3N1YiBpbnZlcnQoJCApCit7CisgIG15ICgkc2VsZikgPSBAXzsKKworICByZXR1cm4gJHNlbGYtPnsnaW52ZXJ0J30gaWYgZGVmaW5lZCAkc2VsZi0+eydpbnZlcnQnfTsKKworICAjIFRoZSBpbnZlcnQgb2YgYW4gZW1wdHkgRGlzakNvbmRpdGlvbnMgaXMgVFJVRS4KKyAgbXkgJHJlcyA9IG5ldyBBdXRvbWFrZTo6RGlzakNvbmRpdGlvbnMgVFJVRTsKKworICAjICAgISgoYS5iKSsoYy5kKSsoZS5mKSkKKyAgIyA9ICghYSshYikuKCFjKyFkKS4oIWUrIWYpCisgICMgV2UgZGV2ZWxvcCB0aGlzIGludG8gYSBzdW0gb2YgcHJvZHVjdCBpdGVyYXRpdmVseSwgc3RhcnRpbmcgZnJvbSBUUlVFOgorICAjIDEpIFRSVUUKKyAgIyAyKSBUUlVFLiFhICsgVFJVRS4hYgorICAjIDMpIFRSVUUuIWEuIWMgKyBUUlVFLiFiLiFjICsgVFJVRS4hYS4hZCArIFRSVUUuIWIuIWQKKyAgIyA0KSBUUlVFLiFhLiFjLiFlICsgVFJVRS4hYi4hYy4hZSArIFRSVUUuIWEuIWQuIWUgKyBUUlVFLiFiLiFkLiFlCisgICMgICAgKyBUUlVFLiFhLiFjLiFmICsgVFJVRS4hYi4hYy4hZiArIFRSVUUuIWEuIWQuIWYgKyBUUlVFLiFiLiFkLiFmCisgIGZvcmVhY2ggbXkgJGNvbmQgKCRzZWxmLT5jb25kcykKKyAgICB7CisgICAgICAkcmVzID0gJHJlcy0+X211bHRpcGx5ICgkY29uZC0+bm90KTsKKyAgICB9CisKKyAgIyBDYWNoZSByZXN1bHQuCisgICRzZWxmLT57J2ludmVydCd9ID0gJHJlczsKKyAgIyBJdCdzIHRlbXB0aW5nIHRvIGFsc28gc2V0ICRyZXMtPnsnaW52ZXJ0J30gdG8gJHNlbGYsIGJ1dCB0aGF0CisgICMgaXMgYSBiYWQgaWRlYSBhcyAkc2VsZiBoYXNuJ3QgYmVlbiBub3JtYWxpemVkIGluIGFueSB3YXkuCisgICMgKERpZmZlcmVudCBpbnB1dHMgY2FuIHByb2R1Y2UgdGhlIHNhbWUgaW52ZXJ0ZWQgc2V0LikKKyAgcmV0dXJuICRyZXM7Cit9CisKKz1pdGVtIEM8JHNlbGYtRTxndD5zaW1wbGlmeT4KKworUmV0dXJuIGEgQzxEaXNqdW5jdGlvbj4gd2hpY2ggaXMgYSBzaW1wbGlmaWVkIGNhbm9uaWNhbCBmb3JtIG9mIEM8JHNlbGY+LgorVGhpcyBjYW5vbmljYWwgZm9ybSBjb250YWlucyBvbmx5IHByaW1lIGltcGxpY2FudHMsIGJ1dCBpdCBjYW4gY29udGFpbgorbm9uLWVzc2VudGlhbCBwcmltZSBpbXBsaWNhbnRzLgorCis9Y3V0CisKK3N1YiBzaW1wbGlmeSAoJCkKK3sKKyAgbXkgKCRzZWxmKSA9IEBfOworICByZXR1cm4gJHNlbGYtPmludmVydC0+aW52ZXJ0OworfQorCis9aXRlbSBDPCRzZWxmLUU8Z3Q+c3ViX2NvbmRpdGlvbnMgKCRjb25kKT4KKworUmV0dXJuIHRoZSBzdWJjb25kaXRpb25zIG9mIEM8JHNlbGY+IHRoYXQgY29udGFpbnMgQzwkY29uZD4sIHdpdGgKK0M8JGNvbmQ+IHN0cmlwcGVkLiAgTW9yZSBmb3JtYWxseSwgcmV0dXJuIEM8JHJlcz4gc3VjaCB0aGF0CitDPCRyZXMtRTxndD5tdWx0aXBseSAoJGNvbmQpID09ICRzZWxmLUU8Z3Q+bXVsdGlwbHkgKCRjb25kKT4gYW5kCitDPCRyZXM+IGRvZXMgbm90IG1lbnRpb24gYW55IG9mIHRoZSB2YXJpYWJsZXMgaW4gQzwkY29uZD4uCisKK0ZvciBpbnN0YW5jZSwgY29uc2lkZXI6CisKKyAgbXkgJGEgPSBuZXcgQXV0b21ha2U6OkRpc2pDb25kaXRpb25zCisgICAgKG5ldyBBdXRvbWFrZTo6Q29uZGl0aW9uICgiQV9UUlVFIiwgIkJfVFJVRSIpLAorICAgICBuZXcgQXV0b21ha2U6OkNvbmRpdGlvbiAoIkFfVFJVRSIsICJDX0ZBTFNFIiksCisgICAgIG5ldyBBdXRvbWFrZTo6Q29uZGl0aW9uICgiQV9UUlVFIiwgIkJfRkFMU0UiLCAiQ19UUlVFIiksCisgICAgIG5ldyBBdXRvbWFrZTo6Q29uZGl0aW9uICgiQV9GQUxTRSIpKTsKKyAgbXkgJGIgPSBuZXcgQXV0b21ha2U6OkRpc2pDb25kaXRpb25zCisgICAgKG5ldyBBdXRvbWFrZTo6Q29uZGl0aW9uICgiQV9UUlVFIiwgIkJfRkFMU0UiKSk7CisKK0NhbGxpbmcgQzwkYS1FPGd0PnN1Yl9jb25kaXRpb25zICgkYik+IHdpbGwgcmV0dXJuIHRoZSBmb2xsb3dpbmcKK0M8RGlzakNvbmRpdGlvbnM+LgorCisgIG5ldyBBdXRvbWFrZTo6RGlzakNvbmRpdGlvbnMKKyAgICAobmV3IEF1dG9tYWtlOjpDb25kaXRpb24gKCJDX0ZBTFNFIiksICMgRnJvbSBBX1RSVUUgQ19GQUxTRQorICAgICBuZXcgQXV0b21ha2U6OkNvbmRpdGlvbiAoIkNfVFJVRSIpKTsgIyBGcm9tIEFfVFJVRSBCX0ZBTFNFIENfVFJVRSIKKworPWN1dAorCitzdWIgc3ViX2NvbmRpdGlvbnMgKCQkKQoreworICBteSAoJHNlbGYsICRzdWJjb25kKSA9IEBfOworCisgICMgTWFrZSAkc3ViY29uZCBibGluZGluZ2x5IGFwcGFyZW50IGluIHRoZSBEaXNqQ29uZGl0aW9ucy4KKyAgIyBGb3IgaW5zdGFuY2UgYCRiLT5tdWx0aXBseSgkYS0+Y29uZHMpJyAoZnJvbSB0aGUgUE9EIGV4YW1wbGUpIGlzOgorICAjIAkobmV3IEF1dG9tYWtlOjpDb25kaXRpb24gKCJGQUxTRSIpLAorICAjIAkgbmV3IEF1dG9tYWtlOjpDb25kaXRpb24gKCJBX1RSVUUiLCAiQl9GQUxTRSIsICJDX0ZBTFNFIiksCisgICMgCSBuZXcgQXV0b21ha2U6OkNvbmRpdGlvbiAoIkFfVFJVRSIsICJCX0ZBTFNFIiwgIkNfVFJVRSIpLAorICAjIAkgbmV3IEF1dG9tYWtlOjpDb25kaXRpb24gKCJGQUxTRSIpKQorICBteSBAcHJvZGNvbmRzID0gJHN1YmNvbmQtPm11bHRpcGx5ICgkc2VsZi0+Y29uZHMpOworCisgICMgTm93LCBzdHJpcCAkc3ViY29uZCBmcm9tIHRoZSByZW1haW5pbmcgKGkuZS4sIG5vbi1mYWxzZSkgQ29uZGl0aW9ucy4KKyAgbXkgQHJlcyA9IG1hcCB7ICRfLT5mYWxzZSA/ICgpIDogJF8tPnN0cmlwICgkc3ViY29uZCkgfSBAcHJvZGNvbmRzOworCisgIHJldHVybiBuZXcgQXV0b21ha2U6OkRpc2pDb25kaXRpb25zIEByZXM7Cit9CisKKz1pdGVtIEM8KCRzdHJpbmcsICRhbWJpZ19jb25kKSA9ICRjb25kc2V0LUU8Z3Q+YW1iaWd1b3VzX3AgKCR3aGF0LCAkY29uZCk+CisKK0NoZWNrIGZvciBhbiBhbWJpZ3VvdXMgY29uZGl0aW9uLiAgUmV0dXJuIGFuIGVycm9yIG1lc3NhZ2UgYW5kIHRoZQorb3RoZXIgY29uZGl0aW9uIGludm9sdmVkIGlmIHdlIGhhdmUgYW4gYW1iaWd1aXR5LiAgUmV0dXJuIGFuIGVtcHR5CitzdHJpbmcgYW5kIEZBTFNFIG90aGVyd2lzZS4KKworQzwkd2hhdD4gaXMgdGhlIG5hbWUgb2YgdGhlIHRoaW5nIGJlaW5nIGRlZmluZWQsIHRvIHVzZSBpbiB0aGUgZXJyb3IKK21lc3NhZ2UuICBDPCRjb25kPiBpcyB0aGUgQzxDb25kaXRpb24+IHVuZGVyIHdoaWNoIGl0IGlzIGJlaW5nCitkZWZpbmVkLiAgQzwkY29uZHNldD4gaXMgdGhlIEM8RGlzakNvbmRpdGlvbnM+IHVuZGVyIHdoaWNoIGl0IGhhZAorYWxyZWFkeSBiZWVuIGRlZmluZWQuCisKKz1jdXQKKworc3ViIGFtYmlndW91c19wICgkJCQpCit7CisgIG15ICgkc2VsZiwgJHZhciwgJGNvbmQpID0gQF87CisKKyAgIyBOb3RlIHRoYXQgdGhlc2UgcnVsZXMgZG9uJ3QgY29uc2lkZXIgdGhlIGZvbGxvd2luZworICAjIGV4YW1wbGUgYXMgYW1iaWd1b3VzLgorICAjCisgICMgICBpZiBDT05EMQorICAjICAgICBGT08gPSBmb28KKyAgIyAgIGVuZGlmCisgICMgICBpZiBDT05EMgorICAjICAgICBGT08gPSBiYXIKKyAgIyAgIGVuZGlmCisgICMKKyAgIyBJdCdzIHVwIHRvIHRoZSB1c2VyIHRvIG5vdCBkZWZpbmUgQ09ORDEgYW5kIENPTkQyCisgICMgc2ltdWx0YW5lb3VzbHkuCisKKyAgcmV0dXJuICgiJHZhciBtdWx0aXBseSBkZWZpbmVkIGluIGNvbmRpdGlvbiAiIC4gJGNvbmQtPmh1bWFuLCAkY29uZCkKKyAgICBpZiBleGlzdHMgJHNlbGYtPnsnaGFzaCd9eyRjb25kfTsKKworICBmb3JlYWNoIG15ICR2Y29uZCAoJHNlbGYtPmNvbmRzKQorICAgIHsKKyAgICAgIHJldHVybiAoIiR2YXIgd2FzIGFscmVhZHkgZGVmaW5lZCBpbiBjb25kaXRpb24gIiAuICR2Y29uZC0+aHVtYW4KKwkgICAgICAuICIsIHdoaWNoIGluY2x1ZGVzIGNvbmRpdGlvbiAiLiAkY29uZC0+aHVtYW4sICR2Y29uZCkKKwlpZiAkdmNvbmQtPnRydWVfd2hlbiAoJGNvbmQpOworCisgICAgICByZXR1cm4gKCIkdmFyIHdhcyBhbHJlYWR5IGRlZmluZWQgaW4gY29uZGl0aW9uICIgLiAkdmNvbmQtPmh1bWFuCisJICAgICAgLiAiLCB3aGljaCBpcyBpbmNsdWRlZCBpbiBjb25kaXRpb24gIiAuICRjb25kLT5odW1hbiwgJHZjb25kKQorCWlmICRjb25kLT50cnVlX3doZW4gKCR2Y29uZCk7CisgICAgfQorICByZXR1cm4gKCcnLCBGQUxTRSk7Cit9CisKKz1oZWFkMSBTRUUgQUxTTworCitMPEF1dG9tYWtlOjpDb25kaXRpb24+LgorCis9aGVhZDEgSElTVE9SWQorCitDPEFNX0NPTkRJVElPTkFMPnMgYW5kIHN1cHBvcnRpbmcgY29kZSB3ZXJlIGFkZGVkIHRvIEF1dG9tYWtlIDEuMW8gYnkKK0lhbiBMYW5jZSBUYXlsb3IgPGlhbkBjeWdudXMub3JnPiBpbiAxOTk3LiAgU2luY2UgdGhlbiBpdCBoYXMgYmVlbgoraW1wcm92ZWQgYnkgVG9tIFRyb21leSA8dHJvbWV5QHJlZGhhdC5jb20+LCBSaWNoYXJkIEJvdWx0b24KKzxyaWNoYXJkQHRhcnRhcnVzLm9yZz4sIFJhamEgUiBIYXJpbmF0aCA8aGFyaW5hdGhAY3MudW1uLmVkdT4sIEFraW0KK0RlbWFpbGxlIDxha2ltQGVwaXRhLmZyPiwgUGF2ZWwgUm9za2luIDxwcm9za2lAZ251Lm9yZz4sIGFuZAorQWxleGFuZHJlIER1cmV0LUx1dHogPGFkbEBnbnUub3JnPi4KKworPWN1dAorCisxOworCisjIyMgU2V0dXAgIkdOVSIgc3R5bGUgZm9yIHBlcmwtbW9kZSBhbmQgY3BlcmwtbW9kZS4KKyMjIExvY2FsIFZhcmlhYmxlczoKKyMjIHBlcmwtaW5kZW50LWxldmVsOiAyCisjIyBwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLWltYWdpbmFyeS1vZmZzZXQ6IDAKKyMjIHBlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtaW5kZW50LWxldmVsOiAyCisjIyBjcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWV4dHJhLW5ld2xpbmUtYmVmb3JlLWJyYWNlOiB0CisjIyBjcGVybC1tZXJnZS10cmFpbGluZy1lbHNlOiBuaWwKKyMjIGNwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBFbmQ6CmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL0F1dG9tYWtlL0ZpbGVVdGlscy5wbSBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvQXV0b21ha2UvRmlsZVV0aWxzLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwM2M3ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL0F1dG9tYWtlL0ZpbGVVdGlscy5wbQpAQCAtMCwwICsxLDQ1MSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoZSBtYWluIGNvcHkgb2YgdGhpcyBmaWxlIGlzIGluIEF1dG9tYWtlJ3MgQ1ZTIHJlcG9zaXRvcnkuICMKKyMgVXBkYXRlcyBzaG91bGQgYmUgc2VudCB0byBhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmcuICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3BhY2thZ2UgQXV0b21ha2U6OkZpbGVVdGlsczsKKworPWhlYWQxIE5BTUUKKworQXV0b21ha2U6OkZpbGVVdGlscyAtIGhhbmRsaW5nIGZpbGVzCisKKz1oZWFkMSBTWU5PUFNJUworCisgIHVzZSBBdXRvbWFrZTo6RmlsZVV0aWxzCisKKz1oZWFkMSBERVNDUklQVElPTgorCitUaGlzIHBlcmwgbW9kdWxlIHByb3ZpZGVzIHZhcmlvdXMgZ2VuZXJhbCBwdXJwb3NlIGZpbGUgaGFuZGxpbmcgZnVuY3Rpb25zLgorCis9Y3V0CisKK3VzZSBzdHJpY3Q7Cit1c2UgRXhwb3J0ZXI7Cit1c2UgRmlsZTo6c3RhdDsKK3VzZSBJTzo6RmlsZTsKK3VzZSBBdXRvbWFrZTo6Q2hhbm5lbHM7Cit1c2UgQXV0b21ha2U6OkNoYW5uZWxEZWZzOworCit1c2UgdmFycyBxdyAoQElTQSBARVhQT1JUKTsKKworQElTQSA9IHF3IChFeHBvcnRlcik7CitARVhQT1JUID0gcXcgKCZvcGVuX3F1b3RlICZjb250ZW50cworCSAgICAgICZmaW5kX2ZpbGUgJm10aW1lCisJICAgICAgJnVwZGF0ZV9maWxlICZ1cF90b19kYXRlX3AKKwkgICAgICAmeHN5c3RlbSAmeHN5c3RlbV9oaW50ICZ4cXgKKwkgICAgICAmZGlyX2hhc19jYXNlX21hdGNoaW5nX2ZpbGUgJnJlc2V0X2Rpcl9jYWNoZQorCSAgICAgICZzZXRfZGlyX2NhY2hlX2ZpbGUpOworCisKKz1pdGVtIEM8b3Blbl9xdW90ZSAoJGZpbGVfbmFtZSk+CisKK1F1b3RlIEM8JGZpbGVfbmFtZT4gZm9yIG9wZW4uCisKKz1jdXQKKworIyAkRklMRV9OQU1FCisjIG9wZW5fcXVvdGUgKCRGSUxFX05BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmIHRoZSBzdHJpbmcgJFMgaXMgYSB3ZWxsLWJlaGF2ZWQgZmlsZSBuYW1lLCBzaW1wbHkgcmV0dXJuIGl0LgorIyBJZiBpdCBzdGFydHMgd2l0aCB3aGl0ZSBzcGFjZSwgcHJlcGVuZCBgLi8nLCBpZiBpdCBlbmRzIHdpdGgKKyMgd2hpdGUgc3BhY2UsIGFkZCBgXDAnLiAgUmV0dXJuIHRoZSBuZXcgc3RyaW5nLgorc3ViIG9wZW5fcXVvdGUoJCkKK3sKKyAgbXkgKCRzKSA9IEBfOworICBpZiAoJHMgPX4gbS9eXHMvKQorICAgIHsKKyAgICAgICRzID0gIi4vJHMiOworICAgIH0KKyAgaWYgKCRzID1+IG0vXHMkLykKKyAgICB7CisgICAgICAkcyA9ICIkc1wwIjsKKyAgICB9CisgIHJldHVybiAkczsKK30KKworPWl0ZW0gQzxmaW5kX2ZpbGUgKCRmaWxlX25hbWUsIEBpbmNsdWRlKT4KKworUmV0dXJuIHRoZSBmaXJzdCBwYXRoIGZvciBhIEM8JGZpbGVfbmFtZT4gaW4gdGhlIEM8aW5jbHVkZT5zLgorCitXZSBtYXRjaCBleGFjdGx5IHRoZSBiZWhhdmlvciBvZiBHTlUgTTQ6IGZpcnN0IGxvb2sgaW4gdGhlIGN1cnJlbnQKK2RpcmVjdG9yeSAod2hpY2ggaW5jbHVkZXMgdGhlIGNhc2Ugb2YgYWJzb2x1dGUgZmlsZSBuYW1lcyksIGFuZCB0aGVuLAoraWYgdGhlIGZpbGUgbmFtZSBpcyBub3QgYWJzb2x1dGUsIGxvb2sgaW4gQzxAaW5jbHVkZT4uCisKK0lmIHRoZSBmaWxlIGlzIGZsYWdnZWQgYXMgb3B0aW9uYWwgKGVuZHMgd2l0aCBDPD8+KSwgdGhlbiByZXR1cm4gdW5kZWYKK2lmIGFic2VudCwgb3RoZXJ3aXNlIGV4aXQgd2l0aCBlcnJvci4KKworPWN1dAorCisjICRGSUxFX05BTUUKKyMgZmluZF9maWxlICgkRklMRV9OQU1FLCBASU5DTFVERSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3ViIGZpbmRfZmlsZSAoJEApCit7CisgIHVzZSBGaWxlOjpTcGVjOworCisgIG15ICgkZmlsZV9uYW1lLCBAaW5jbHVkZSkgPSBAXzsKKyAgbXkgJG9wdGlvbmFsID0gMDsKKworICAkb3B0aW9uYWwgPSAxCisgICAgaWYgJGZpbGVfbmFtZSA9fiBzL1w/JC8vOworCisgIHJldHVybiBGaWxlOjpTcGVjLT5jYW5vbnBhdGggKCRmaWxlX25hbWUpCisgICAgaWYgLWUgJGZpbGVfbmFtZTsKKworICBpZiAoIUZpbGU6OlNwZWMtPmZpbGVfbmFtZV9pc19hYnNvbHV0ZSAoJGZpbGVfbmFtZSkpCisgICAgeworICAgICAgZm9yZWFjaCBteSAkcGF0aCAoQGluY2x1ZGUpCisJeworCSAgcmV0dXJuIEZpbGU6OlNwZWMtPmNhbm9ucGF0aCAoRmlsZTo6U3BlYy0+Y2F0ZmlsZSAoJHBhdGgsICRmaWxlX25hbWUpKQorCSAgICBpZiAtZSBGaWxlOjpTcGVjLT5jYXRmaWxlICgkcGF0aCwgJGZpbGVfbmFtZSkKKwl9CisgICAgfQorCisgIGZhdGFsICIkZmlsZV9uYW1lOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IgorICAgIHVubGVzcyAkb3B0aW9uYWw7CisgIHJldHVybiB1bmRlZjsKK30KKworPWl0ZW0gQzxtdGltZSAoJGZpbGUpPgorCitSZXR1cm4gdGhlIG10aW1lIG9mIEM8JGZpbGU+LiAgTWlzc2luZyBmaWxlcywgb3IgQzwtPiBzdGFuZGluZyBmb3IKK0M8U1RESU4+IG9yIEM8U1RET1VUPiBhcmUgYGBvYnNvbGV0ZScnLCBpLmUuLCBhcyBvbGQgYXMgcG9zc2libGUuCisKKz1jdXQKKworIyAkTVRJTUUKKyMgTVRJTUUgKCRGSUxFKQorIyAtLS0tLS0tLS0tLS0tCitzdWIgbXRpbWUgKCQpCit7CisgIG15ICgkZmlsZSkgPSBAXzsKKworICByZXR1cm4gMAorICAgIGlmICRmaWxlIGVxICctJyB8fCAhIC1mICRmaWxlOworCisgIG15ICRzdGF0ID0gc3RhdCAoJGZpbGUpCisgICAgb3IgZmF0YWwgImNhbm5vdCBzdGF0ICRmaWxlOiAkISI7CisKKyAgcmV0dXJuICRzdGF0LT5tdGltZTsKK30KKworCis9aXRlbSBDPHVwZGF0ZV9maWxlICgkZnJvbSwgJHRvLCBbJGZvcmNlXSk+CisKK1JlbmFtZSBDPCRmcm9tPiBhcyBDPCR0bz4sIHByZXNlcnZpbmcgQzwkdG8+IHRpbWVzdGFtcCBpZiBpdCBoYXMgbm90CitjaGFuZ2VkLCB1bmxlc3MgQzwkZm9yY2U+IGlzIHRydWUgKGRlZmF1bHRzIHRvIGZhbHNlKS4gIFJlY29nbml6ZQorQzwkdG8+ID0gQzwtPiBzdGFuZGluZyBmb3IgQzxTVERJTj4uICBDPCRmcm9tPiBpcyBhbHdheXMKK3JlbW92ZWQvcmVuYW1lZC4KKworPWN1dAorCisjICZ1cGRhdGVfZmlsZSAoJEZST00sICRUTzsgJEZPUkNFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N1YiB1cGRhdGVfZmlsZSAoJCQ7JCkKK3sKKyAgbXkgKCRmcm9tLCAkdG8sICRmb3JjZSkgPSBAXzsKKyAgJGZvcmNlID0gMAorICAgIHVubGVzcyBkZWZpbmVkICRmb3JjZTsKKyAgbXkgJFNJTVBMRV9CQUNLVVBfU1VGRklYID0gJEVOVnsnU0lNUExFX0JBQ0tVUF9TVUZGSVgnfSB8fCAnfic7CisgIHVzZSBGaWxlOjpDb21wYXJlOworICB1c2UgRmlsZTo6Q29weTsKKworICBpZiAoJHRvIGVxICctJykKKyAgICB7CisgICAgICBteSAkaW4gPSBuZXcgSU86OkZpbGUgKCI8ICIgLiBvcGVuX3F1b3RlICgkZnJvbSkpOworICAgICAgbXkgJG91dCA9IG5ldyBJTzo6RmlsZSAoIj4tIik7CisgICAgICB3aGlsZSAoJF8gPSAkaW4tPmdldGxpbmUpCisJeworCSAgcHJpbnQgJG91dCAkXzsKKwl9CisgICAgICAkaW4tPmNsb3NlOworICAgICAgdW5saW5rICgkZnJvbSkgfHwgZmF0YWwgImNhbm5vdCByZW1vdmUgJGZyb206ICQhIjsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKCEkZm9yY2UgJiYgLWYgIiR0byIgJiYgY29tcGFyZSAoIiRmcm9tIiwgIiR0byIpID09IDApCisgICAgeworICAgICAgIyBGaWxlIGRpZG4ndCBjaGFuZ2UsIHNvIGRvbid0IHVwZGF0ZSBpdHMgbW9kIHRpbWUuCisgICAgICBtc2cgJ25vdGUnLCAiYCR0bycgaXMgdW5jaGFuZ2VkIjsKKyAgICAgIHVubGluayAoJGZyb20pCisgICAgICAgIG9yIGZhdGFsICJjYW5ub3QgcmVtb3ZlICRmcm9tOiAkISI7CisgICAgICByZXR1cm4KKyAgICB9CisKKyAgaWYgKC1mICIkdG8iKQorICAgIHsKKyAgICAgICMgQmFjayB1cCBhbmQgaW5zdGFsbCB0aGUgbmV3IG9uZS4KKyAgICAgIG1vdmUgKCIkdG8iLCAgIiR0byRTSU1QTEVfQkFDS1VQX1NVRkZJWCIpCisJb3IgZmF0YWwgImNhbm5vdCBiYWNrdXAgJHRvOiAkISI7CisgICAgICBtb3ZlICgiJGZyb20iLCAiJHRvIikKKwlvciBmYXRhbCAiY2Fubm90IHJlbmFtZSAkZnJvbSBhcyAkdG86ICQhIjsKKyAgICAgIG1zZyAnbm90ZScsICJgJHRvJyBpcyB1cGRhdGVkIjsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBtb3ZlICgiJGZyb20iLCAiJHRvIikKKwlvciBmYXRhbCAiY2Fubm90IHJlbmFtZSAkZnJvbSBhcyAkdG86ICQhIjsKKyAgICAgIG1zZyAnbm90ZScsICJgJHRvJyBpcyBjcmVhdGVkIjsKKyAgICB9Cit9CisKKworPWl0ZW0gQzx1cF90b19kYXRlX3AgKCRmaWxlLCBAZGVwKT4KKworSXMgQzwkZmlsZT4gbW9yZSByZWNlbnQgdGhhbiBDPEBkZXA+PworCis9Y3V0CisKKyMgJEJPT0xFQU4KKyMgJnVwX3RvX2RhdGVfcCAoJEZJTEUsIEBERVApCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3ViIHVwX3RvX2RhdGVfcCAoJEApCit7CisgIG15ICgkZmlsZSwgQGRlcCkgPSBAXzsKKyAgbXkgJG10aW1lID0gbXRpbWUgKCRmaWxlKTsKKworICBmb3JlYWNoIG15ICRkZXAgKEBkZXApCisgICAgeworICAgICAgaWYgKCRtdGltZSA8IG10aW1lICgkZGVwKSkKKwl7CisJICB2ZXJiICJ1cF90b19kYXRlICgkZmlsZSk6IG91dGRhdGVkOiAkZGVwIjsKKwkgIHJldHVybiAwOworCX0KKyAgICB9CisKKyAgdmVyYiAidXBfdG9fZGF0ZSAoJGZpbGUpOiB1cCB0byBkYXRlIjsKKyAgcmV0dXJuIDE7Cit9CisKKworPWl0ZW0gQzxoYW5kbGVfZXhlY19lcnJvcnMgKCRjb21tYW5kLCBbJGV4cGVjdGVkX2V4aXRfY29kZSA9IDBdLCBbJGhpbnRdKT4KKworRGlzcGxheSBhbiBlcnJvciBtZXNzYWdlIGZvciBDPCRjb21tYW5kPiwgYmFzZWQgb24gdGhlIGNvbnRlbnQgb2YKK0M8JD8+IGFuZCBDPCQhPi4gIEJlIHF1aWV0IGlmIHRoZSBjb21tYW5kIGV4aXRlZCBub3JtYWxseQord2l0aCBDPCRleHBlY3RlZF9leGl0X2NvZGU+LiAgSWYgQzwkaGludD4gaXMgZ2l2ZW4sIGRpc3BsYXkgdGhhdCBhcyB3ZWxsCitpZiB0aGUgY29tbWFuZCBmYWlsZWQgdG8gcnVuIGF0IGFsbC4KKworPWN1dAorCitzdWIgaGFuZGxlX2V4ZWNfZXJyb3JzICgkOyQkKQoreworICBteSAoJGNvbW1hbmQsICRleHBlY3RlZCwgJGhpbnQpID0gQF87CisgICRleHBlY3RlZCA9IDAgdW5sZXNzIGRlZmluZWQgJGV4cGVjdGVkOworICBpZiAoZGVmaW5lZCAkaGludCkKKyAgICB7CisgICAgICAkaGludCA9ICJcbiIgLiAkaGludDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAkaGludCA9ICcnOworICAgIH0KKworICAkY29tbWFuZCA9IChzcGxpdCAoJyAnLCAkY29tbWFuZCkpWzBdOworICBpZiAoJCEpCisgICAgeworICAgICAgZmF0YWwgImZhaWxlZCB0byBydW4gJGNvbW1hbmQ6ICQhIiAuICRoaW50OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHVzZSBQT1NJWCBxdyAoV0lGRVhJVEVEIFdFWElUU1RBVFVTIFdJRlNJR05BTEVEIFdURVJNU0lHKTsKKworICAgICAgaWYgKFdJRkVYSVRFRCAoJD8pKQorCXsKKwkgIG15ICRzdGF0dXMgPSBXRVhJVFNUQVRVUyAoJD8pOworCSAgIyBQcm9wYWdhdGUgZXhpdCBjb2Rlcy4KKwkgIGZhdGFsICgnJywKKwkJICIkY29tbWFuZCBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogJHN0YXR1cyIsCisJCSBleGl0X2NvZGUgPT4gJHN0YXR1cykKKwkgICAgdW5sZXNzICRzdGF0dXMgPT0gJGV4cGVjdGVkOworCX0KKyAgICAgIGVsc2lmIChXSUZTSUdOQUxFRCAoJD8pKQorCXsKKwkgIG15ICRzaWduYWwgPSBXVEVSTVNJRyAoJD8pOworCSAgZmF0YWwgIiRjb21tYW5kIHRlcm1pbmF0ZWQgYnkgc2lnbmFsOiAkc2lnbmFsIjsKKwl9CisgICAgICBlbHNlCisJeworCSAgZmF0YWwgIiRjb21tYW5kIGV4aXRlZCBhYm5vcm1hbGx5IjsKKwl9CisgICAgfQorfQorCis9aXRlbSBDPHhxeCAoJGNvbW1hbmQpPgorCitTYW1lIGFzIEM8cXg+IChidXQgaW4gc2NhbGFyIGNvbnRleHQpLCBidXQgZmFpbHMgb24gZXJyb3JzLgorCis9Y3V0CisKKyMgeHF4ICgkQ09NTUFORCkKKyMgLS0tLS0tLS0tLS0tLS0KK3N1YiB4cXggKCQpCit7CisgIG15ICgkY29tbWFuZCkgPSBAXzsKKworICB2ZXJiICJydW5uaW5nOiAkY29tbWFuZCI7CisKKyAgJCEgPSAwOworICBteSAkcmVzID0gYCRjb21tYW5kYDsKKyAgaGFuZGxlX2V4ZWNfZXJyb3JzICRjb21tYW5kCisgICAgaWYgJD87CisKKyAgcmV0dXJuICRyZXM7Cit9CisKKworPWl0ZW0gQzx4c3lzdGVtIChAYXJndik+CisKK1NhbWUgYXMgQzxzeXN0ZW0+LCBidXQgZmFpbHMgb24gZXJyb3JzLCBhbmQgcmVwb3J0cyB0aGUgQzxAYXJndj4KK2luIHZlcmJvc2UgbW9kZS4KKworPWN1dAorCitzdWIgeHN5c3RlbSAoQCkKK3sKKyAgbXkgKEBjb21tYW5kKSA9IEBfOworCisgIHZlcmIgInJ1bm5pbmc6IEBjb21tYW5kIjsKKworICAkISA9IDA7CisgIGhhbmRsZV9leGVjX2Vycm9ycyAiQGNvbW1hbmQiCisgICAgaWYgc3lzdGVtIEBjb21tYW5kOworfQorCisKKz1pdGVtIEM8eHN5c3RlbV9oaW50ICgkbXNnLCBAYXJndik+CisKK1NhbWUgYXMgQzx4c3lzdGVtPiwgYnV0IGFsbG93cyB0byBwYXNzIGEgaGludCB0aGF0IHdpbGwgYmUgZGlzcGxheWVkCitpbiBjYXNlIHRoZSBjb21tYW5kIGZhaWxlZCB0byBydW4gYXQgYWxsLgorCis9Y3V0CisKK3N1YiB4c3lzdGVtX2hpbnQgKEApCit7CisgIG15ICgkaGludCwgQGNvbW1hbmQpID0gQF87CisKKyAgdmVyYiAicnVubmluZzogQGNvbW1hbmQiOworCisgICQhID0gMDsKKyAgaGFuZGxlX2V4ZWNfZXJyb3JzICJAY29tbWFuZCIsIDAsICRoaW50CisgICAgaWYgc3lzdGVtIEBjb21tYW5kOworfQorCisKKz1pdGVtIEM8Y29udGVudHMgKCRmaWxlX25hbWUpPgorCitSZXR1cm4gdGhlIGNvbnRlbnRzIG9mIEM8JGZpbGVfbmFtZT4uCisKKz1jdXQKKworIyBjb250ZW50cyAoJEZJTEVfTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdWIgY29udGVudHMgKCQpCit7CisgIG15ICgkZmlsZSkgPSBAXzsKKyAgdmVyYiAicmVhZGluZyAkZmlsZSI7CisgIGxvY2FsICQvOwkJCSMgVHVybiBvbiBzbHVycC1tb2RlLgorICBteSAkZiA9IG5ldyBBdXRvbWFrZTo6WEZpbGUgIjwgIiAuIG9wZW5fcXVvdGUgKCRmaWxlKTsKKyAgbXkgJGNvbnRlbnRzID0gJGYtPmdldGxpbmU7CisgICRmLT5jbG9zZTsKKyAgcmV0dXJuICRjb250ZW50czsKK30KKworCis9aXRlbSBDPGRpcl9oYXNfY2FzZV9tYXRjaGluZ19maWxlICgkRElSTkFNRSwgJEZJTEVfTkFNRSk+CisKK1JldHVybiB0cnVlIGlmZiAkRElSIGNvbnRhaW5zIGEgZmlsZSBuYW1lIHRoYXQgbWF0Y2hlcyAkRklMRV9OQU1FIGNhc2UKK2luc2Vuc2l0aXZlbHkuCisKK1dlIG5lZWQgdG8gYmUgY2F1dGlvdXMgb24gY2FzZS1pbnNlbnNpdGl2ZSBjYXNlLXByZXNlcnZpbmcgZmlsZQorc3lzdGVtcyAoZS5nLiBNYWMgT1MgWCdzIEhGUyspLiAgT24gc3VjaCBzeXN0ZW1zIEM8LWYgJ0Zvbyc+IGFuZCBDPC1mCisnZm9PJz4gYW5zd2VyIHRoZSBzYW1lIHRoaW5nLiAgSGVuY2UgaWYgYSBwYWNrYWdlIGRpc3RyaWJ1dGVzIGl0cyBvd24KK0Y8Q0hBTkdFTE9HPiBmaWxlLCBidXQgaGFzIG5vIEY8Q2hhbmdlTG9nPiBmaWxlLCBhdXRvbWFrZSB3b3VsZCBzdGlsbAordHJ5IHRvIGRpc3RyaWJ1dGUgRjxDaGFuZ2VMb2c+IChiZWNhdXNlIGl0IHRoaW5rcyBpdCBleGlzdHMpIGluCithZGRpdGlvbiB0byBGPENIQU5HRUxPRz4sIGFsdGhvdWdoIGl0IGlzIGltcG9zc2libGUgZm9yIHRoZXNlIHR3bworZmlsZXMgdG8gYmUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5ICh0aGUgdHdvIGZpbGUgbmFtZXMgZGVzaWduYXRlIHRoZQorc2FtZSBmaWxlKS4KKworPWN1dAorCit1c2UgdmFycyAnJV9kaXJlY3RvcnlfY2FjaGUnOworc3ViIGRpcl9oYXNfY2FzZV9tYXRjaGluZ19maWxlICgkJCkKK3sKKyAgIyBOb3RlIHRoYXQgcHJpbnQgRmlsZTo6U3BlYy0+Y2FzZV90b2xlcmFudCByZXR1cm5zIDAgZXZlbiBvbiBNYWNPUworICAjIFggKHdpdGggUGVybCB2NS44LjEtUkMzIGF0IGxlYXN0KSwgc28gZG8gbm90IHRyeSB0byBzaG9ydGN1dCB0aGlzCisgICMgZnVuY3Rpb24gdXNpbmcgdGhhdC4KKworICBteSAoJGRpcm5hbWUsICRmaWxlX25hbWUpID0gQF87CisgIHJldHVybiAwIHVubGVzcyAtZiAiJGRpcm5hbWUvJGZpbGVfbmFtZSI7CisKKyAgIyBUaGUgZmlsZSBhcHBlYXJzIHRvIGV4aXN0LCBob3dldmVyIGl0IG1pZ2h0IGJlIGEgbWlyYWdlIGlmIHRoZQorICAjIHN5c3RlbSBpcyBjYXNlIGluc2Vuc2l0aXZlLiAgTGV0J3MgYnJvd3NlIHRoZSBkaXJlY3RvcnkgYW5kIGNoZWNrCisgICMgd2hldGhlciB0aGUgZmlsZSBpcyByZWFsbHkgaW4uICBXZSBtYWludGFpbiBhIGNhY2hlIG9mIGRpcmVjdG9yaWVzCisgICMgc28gQXV0b21ha2UgZG9lc24ndCBzcGVuZCBhbGwgaXRzIHRpbWUgcmVhZGluZyB0aGUgc2FtZSBkaXJlY3RvcnkKKyAgIyBhZ2FpbiBhbmQgYWdhaW4uCisgIGlmICghZXhpc3RzICRfZGlyZWN0b3J5X2NhY2hleyRkaXJuYW1lfSkKKyAgICB7CisgICAgICBlcnJvciAiZmFpbGVkIHRvIG9wZW4gZGlyZWN0b3J5IGAkZGlybmFtZSciCisJdW5sZXNzIG9wZW5kaXIgKERJUiwgJGRpcm5hbWUpOworICAgICAgJF9kaXJlY3RvcnlfY2FjaGV7JGRpcm5hbWV9ID0geyBtYXAgeyAkXyA9PiAxIH0gcmVhZGRpciAoRElSKSB9OworICAgICAgY2xvc2VkaXIgKERJUik7CisgICAgfQorICByZXR1cm4gZXhpc3RzICRfZGlyZWN0b3J5X2NhY2hleyRkaXJuYW1lfXskZmlsZV9uYW1lfTsKK30KKworPWl0ZW0gQzxyZXNldF9kaXJfY2FjaGUgKCRkaXJuYW1lKT4KKworQ2xlYXIgQzxkaXJfaGFzX2Nhc2VfbWF0Y2hpbmdfZmlsZT4ncyBjYWNoZSBmb3IgQzwkZGlybmFtZT4uCisKKz1jdXQKKworc3ViIHJlc2V0X2Rpcl9jYWNoZSAoJCkKK3sKKyAgZGVsZXRlICRfZGlyZWN0b3J5X2NhY2hleyRfWzBdfTsKK30KKworPWl0ZW0gQzxzZXRfZGlyX2NhY2hlX2ZpbGUgKCRkaXJuYW1lLCAkZmlsZV9uYW1lKT4KKworU3RhdGUgdGhhdCBDPCRkaXJuYW1lPiBjb250YWlucyBDPCRmaWxlX25hbWU+IG5vdy4KKworPWN1dAorCitzdWIgc2V0X2Rpcl9jYWNoZV9maWxlICgkJCkKK3sKKyAgbXkgKCRkaXJuYW1lLCAkZmlsZV9uYW1lKSA9IEBfOworICAkX2RpcmVjdG9yeV9jYWNoZXskZGlybmFtZX17JGZpbGVfbmFtZX0gPSAxCisgICAgaWYgZXhpc3RzICRfZGlyZWN0b3J5X2NhY2hleyRkaXJuYW1lfTsKK30KKworMTsgIyBmb3IgcmVxdWlyZQorCisjIyMgU2V0dXAgIkdOVSIgc3R5bGUgZm9yIHBlcmwtbW9kZSBhbmQgY3BlcmwtbW9kZS4KKyMjIExvY2FsIFZhcmlhYmxlczoKKyMjIHBlcmwtaW5kZW50LWxldmVsOiAyCisjIyBwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLWltYWdpbmFyeS1vZmZzZXQ6IDAKKyMjIHBlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtaW5kZW50LWxldmVsOiAyCisjIyBjcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWV4dHJhLW5ld2xpbmUtYmVmb3JlLWJyYWNlOiB0CisjIyBjcGVybC1tZXJnZS10cmFpbGluZy1lbHNlOiBuaWwKKyMjIGNwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBFbmQ6CmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL0F1dG9tYWtlL0dlbmVyYWwucG0gYi9zaGFyZS9hdXRvbWFrZS0xLjExL0F1dG9tYWtlL0dlbmVyYWwucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTljMGJlNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvQXV0b21ha2UvR2VuZXJhbC5wbQpAQCAtMCwwICsxLDg3IEBACisjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMyAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitwYWNrYWdlIEF1dG9tYWtlOjpHZW5lcmFsOworCit1c2UgNS4wMDU7Cit1c2Ugc3RyaWN0OwordXNlIEV4cG9ydGVyOwordXNlIEZpbGU6OkJhc2VuYW1lOworCit1c2UgdmFycyBxdyAoQElTQSBARVhQT1JUKTsKKworQElTQSA9IHF3IChFeHBvcnRlcik7CitARVhQT1JUID0gcXcgKCZ1bmlxICRtZSk7CisKKyMgVmFyaWFibGUgd2Ugc2hhcmUgd2l0aCB0aGUgbWFpbiBwYWNrYWdlLiAgQmUgc3VyZSB0byBoYXZlIGEgc2luZ2xlCisjIGNvcHkgb2YgdGhlbTogdXNpbmcgYG15JyB0b2dldGhlciB3aXRoIG11bHRpcGxlIGluY2x1c2lvbiBvZiB0aGlzCisjIHBhY2thZ2Ugd291bGQgaW50cm9kdWNlIHNldmVyYWwgY29waWVzLgordXNlIHZhcnMgcXcgKCRtZSk7CiskbWUgPSBiYXNlbmFtZSAoJDApOworCisjIEVORAorIyAtLS0KKyMgRXhpdCBub256ZXJvIHdoZW5ldmVyIGNsb3NpbmcgU1RET1VUIGZhaWxzLgorc3ViIEVORAoreworICAjIFRoaXMgaXMgcmVxdWlyZWQgaWYgdGhlIGNvZGUgbWlnaHQgc2VuZCBhbnkgb3V0cHV0IHRvIHN0ZG91dAorICAjIEUuZy4sIGV2ZW4gLS12ZXJzaW9uIG9yIC0taGVscC4gIFNvIGl0J3MgYmVzdCB0byBkbyBpdCB1bmNvbmRpdGlvbmFsbHkuCisgIGlmICghIGNsb3NlIFNURE9VVCkKKyAgICB7CisgICAgICBwcmludCBTVERFUlIgIiRtZTogY2xvc2luZyBzdGFuZGFyZCBvdXRwdXQ6ICQhXG4iOworICAgICAgJD8gPSA3NDsgIyBFWF9JT0VSUgorICAgICAgcmV0dXJuOworICAgIH0KK30KKworCisjIEBSRVMKKyMgdW5pcSAoQExJU1QpCisjIC0tLS0tLS0tLS0tLQorIyBSZXR1cm4gTElTVCB3aXRoIG5vIGR1cGxpY2F0ZXMuCitzdWIgdW5pcSAoQCkKK3sKKyAgIG15IEByZXMgPSAoKTsKKyAgIG15ICVzZWVuID0gKCk7CisgICBmb3JlYWNoIG15ICRpdGVtIChAXykKKyAgICAgeworICAgICAgIGlmICghIGV4aXN0cyAkc2VlbnskaXRlbX0pCisJIHsKKwkgICAkc2VlbnskaXRlbX0gPSAxOworCSAgIHB1c2ggKEByZXMsICRpdGVtKTsKKwkgfQorICAgICB9CisgICByZXR1cm4gd2FudGFycmF5ID8gQHJlcyA6ICJAcmVzIjsKK30KKworCisxOyAjIGZvciByZXF1aXJlCisKKyMjIyBTZXR1cCAiR05VIiBzdHlsZSBmb3IgcGVybC1tb2RlIGFuZCBjcGVybC1tb2RlLgorIyMgTG9jYWwgVmFyaWFibGVzOgorIyMgcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIHBlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIHBlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2UtaW1hZ2luYXJ5LW9mZnNldDogMAorIyMgcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIGNwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtZXh0cmEtbmV3bGluZS1iZWZvcmUtYnJhY2U6IHQKKyMjIGNwZXJsLW1lcmdlLXRyYWlsaW5nLWVsc2U6IG5pbAorIyMgY3BlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIEVuZDoKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9tYWtlLTEuMTEvQXV0b21ha2UvSXRlbS5wbSBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvQXV0b21ha2UvSXRlbS5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODdiOTg3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9BdXRvbWFrZS9JdGVtLnBtCkBAIC0wLDAgKzEsMjA1IEBACisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitwYWNrYWdlIEF1dG9tYWtlOjpJdGVtOwordXNlIHN0cmljdDsKK3VzZSBDYXJwOworCit1c2UgQXV0b21ha2U6OkNoYW5uZWxEZWZzOwordXNlIEF1dG9tYWtlOjpEaXNqQ29uZGl0aW9uczsKKworPWhlYWQxIE5BTUUKKworQXV0b21ha2U6Okl0ZW0gLSBiYXNlIGNsYXNzIGZvciBBdXRvbWFrZTo6VmFyaWFibGUgYW5kIEF1dG9tYWtlOjpSdWxlCisKKz1oZWFkMSBERVNDUklQVElPTgorCis9aGVhZDIgTWV0aG9kcworCis9b3ZlciA0CisKKz1pdGVtIEM8bmV3IEF1dG9tYWtlOjpJdGVtICRuYW1lPgorCitDcmVhdGUgYW5kIHJldHVybiBhbiBlbXB0eSBJdGVtIGNhbGxlZCBDPCRuYW1lPi4KKworPWN1dAorCitzdWIgbmV3ICgkJCkKK3sKKyAgbXkgKCRjbGFzcywgJG5hbWUpID0gQF87CisgIG15ICRzZWxmID0geworICAgIG5hbWUgPT4gJG5hbWUsCisgICAgZGVmcyA9PiB7fSwKKyAgICBjb25kcyA9PiB7fSwKKyAgfTsKKyAgYmxlc3MgJHNlbGYsICRjbGFzczsKKyAgcmV0dXJuICRzZWxmOworfQorCis9aXRlbSBDPCRpdGVtLUU8Z3Q+bmFtZT4KKworUmV0dXJuIHRoZSBuYW1lIG9mIEM8JGl0ZW0+LgorCis9Y3V0CisKK3N1YiBuYW1lICgkKQoreworICBteSAoJHNlbGYpID0gQF87CisgIHJldHVybiAkc2VsZi0+eyduYW1lJ307Cit9CisKKz1pdGVtIEM8JGl0ZW0tRTxndD5kZWYgKCRjb25kKT4KKworUmV0dXJuIHRoZSBkZWZpbml0aW9uIGZvciB0aGlzIGl0ZW0gaW4gY29uZGl0aW9uIEM8JGNvbmQ+LCBpZiBpdAorZXhpc3RzLiAgUmV0dXJuIDAgb3RoZXJ3aXNlLgorCis9Y3V0CisKK3N1YiBkZWYgKCQkKQoreworICAjIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB2ZXJ5IG9mdGVuLCBzbyBrZWVwIGl0IHNtYWxsIGFuZCBmYXN0LiAgV2UKKyAgIyBkb24ndCBtaW5kIHRoZSBleHRyYSB1bmRlZmluZWQgaXRlbXMgaW50cm9kdWNlZCBieSBsb29rdXAgZmFpbHVyZTsKKyAgIyBhdm9pZGluZyB0aGlzIHdpdGggYGV4aXN0cycgbWVhbnMgZG9pbmcgdHdvIGhhc2ggbG9va3VwIG9uCisgICMgc3VjY2VzcywgYW5kIHByb3ZlZCB3b3JzZSBvbiBiZW5jaG1hcmsuCisgIG15ICRkZWYgPSAkX1swXS0+eydkZWZzJ317JF9bMV19OworICByZXR1cm4gZGVmaW5lZCAkZGVmICYmICRkZWY7Cit9CisKKz1pdGVtIEM8JGl0ZW0tRTxndD5yZGVmICgkY29uZCk+CisKK1JldHVybiB0aGUgZGVmaW5pdGlvbiBmb3IgdGhpcyBpdGVtIGluIGNvbmRpdGlvbiBDPCRjb25kPi4gIEFib3J0IHdpdGgKK2FuIGludGVybmFsIGVycm9yIGlmIHRoZSBpdGVtIHdhcyBub3QgZGVmaW5lZCB1bmRlciB0aGlzIGNvbmRpdGlvbi4KKworVGhlIEk8cj4gaW4gZnJvbnQgb2YgQzxkZWY+IHN0YW5kcyBmb3IgSTxyZXF1aXJlZD4uICBPbmUKK3Nob3VsZCBjYWxsIEM8cmRlZj4gdG8gYXNzZXJ0IHRoZSBjb25kaXRpb25hbCBkZWZpbml0aW9uJ3MgZXhpc3RlbmNlLgorCis9Y3V0CisKK3N1YiByZGVmICgkJCkKK3sKKyAgbXkgKCRzZWxmLCAkY29uZCkgPSBAXzsKKyAgbXkgJGQgPSAkc2VsZi0+ZGVmICgkY29uZCk7CisgIHByb2dfZXJyb3IgKCJ1bmRlZmluZWQgY29uZGl0aW9uIGAiIC4gJGNvbmQtPmh1bWFuIC4gIicgZm9yIGAiCisJICAgICAgLiAkc2VsZi0+bmFtZSAuICInXG4iIC4gJHNlbGYtPmR1bXApCisgICAgdW5sZXNzICRkOworICByZXR1cm4gJGQ7Cit9CisKKz1pdGVtIEM8JGl0ZW0tRTxndD5zZXQgKCRjb25kLCAkZGVmKT4KKworQWRkIGEgbmV3IGRlZmluaXRpb24gdG8gYW4gZXhpc3RpbmcgaXRlbS4KKworPWN1dAorCitzdWIgc2V0ICgkJCQpCit7CisgIG15ICgkc2VsZiwgJGNvbmQsICRkZWYpID0gQF87CisgICRzZWxmLT57J2RlZnMnfXskY29uZH0gPSAkZGVmOworICAkc2VsZi0+eydjb25kcyd9eyRjb25kfSA9ICRjb25kOworfQorCis9aXRlbSBDPCR2YXItRTxndD5jb25kaXRpb25zPgorCitSZXR1cm4gYW4gTDxBdXRvbWFrZTo6RGlzakNvbmRpdGlvbnM+IGRlc2NyaWJpbmcgdGhlIGNvbmRpdGlvbnMgdGhhdAordGhhdCBhbiBpdGVtIGlzIGRlZmluZWQgaW4uCisKK1RoZXNlIGFyZSBhbGwgdGhlIGNvbmRpdGlvbnMgZm9yIHdoaWNoIGlzIHdvdWxkIGJlIHNhZmUgdG8gY2FsbAorQzxyZGVmPi4KKworPWN1dAorCitzdWIgY29uZGl0aW9ucyAoJCkKK3sKKyAgbXkgKCRzZWxmKSA9IEBfOworICBwcm9nX2Vycm9yICgic2VsZiBpcyBub3QgYSByZWZlcmVuY2UiKQorICAgIHVubGVzcyByZWYgJHNlbGY7CisgIHJldHVybiBuZXcgQXV0b21ha2U6OkRpc2pDb25kaXRpb25zICh2YWx1ZXMgJXskc2VsZi0+eydjb25kcyd9fSk7Cit9CisKKz1pdGVtIEM8QG1pc3NpbmdfY29uZHMgPSAkdmFyLUU8Z3Q+bm90X2Fsd2F5c19kZWZpbmVkX2luX2NvbmQgKCRjb25kKT4KKworQ2hlY2sgd2hldGhlciBDPCR2YXI+IGlzIGFsd2F5cyBkZWZpbmVkIGZvciBjb25kaXRpb24gQzwkY29uZD4uCitSZXR1cm4gYSBsaXN0IG9mIGNvbmRpdGlvbnMgd2hlcmUgdGhlIGRlZmluaXRpb24gaXMgbWlzc2luZy4KKworRm9yIGluc3RhbmNlLCBnaXZlbgorCisgIGlmIENPTkQxCisgICAgaWYgQ09ORDIKKyAgICAgIEEgPSBmb28KKyAgICAgIEQgPSBkMQorICAgIGVsc2UKKyAgICAgIEEgPSBiYXIKKyAgICAgIEQgPSBkMgorICAgIGVuZGlmCisgIGVsc2UKKyAgICBEID0gZDMKKyAgZW5kaWYKKyAgaWYgQ09ORDMKKyAgICBBID0gYmF6CisgICAgQiA9IG11bWJsZQorICBlbmRpZgorICBDID0gbXVtYmxlCisKK3dlIHNob3VsZCBoYXZlICh3ZSBkaXNwbGF5IHJlc3VsdCBhcyBjb25kaXRpb25hbCBzdHJpbmdzIGluIHRoaXMKK2lsbHVzdHJhdGlvbiwgYnV0IHdlIHJlYWxseSByZXR1cm4gRGlzakNvbmRpdGlvbnMgb2JqZWN0cyk6CisKKyAgdmFyICgnQScpLT5ub3RfYWx3YXlzX2RlZmluZWRfaW5fY29uZCAoJ0NPTkQxX1RSVUUgQ09ORDJfVFJVRScpCisgICAgPT4gKCkKKyAgdmFyICgnQScpLT5ub3RfYWx3YXlzX2RlZmluZWRfaW5fY29uZCAoJ0NPTkQxX1RSVUUnKQorICAgID0+ICgpCisgIHZhciAoJ0EnKS0+bm90X2Fsd2F5c19kZWZpbmVkX2luX2NvbmQgKCdUUlVFJykKKyAgICA9PiAoIkNPTkQxX0ZBTFNFIENPTkQzX0ZBTFNFIikKKyAgdmFyICgnQicpLT5ub3RfYWx3YXlzX2RlZmluZWRfaW5fY29uZCAoJ0NPTkQxX1RSVUUnKQorICAgID0+ICgiQ09ORDFfVFJVRSBDT05EM19GQUxTRSIpCisgIHZhciAoJ0MnKS0+bm90X2Fsd2F5c19kZWZpbmVkX2luX2NvbmQgKCdDT05EMV9UUlVFJykKKyAgICA9PiAoKQorICB2YXIgKCdEJyktPm5vdF9hbHdheXNfZGVmaW5lZF9pbl9jb25kICgnVFJVRScpCisgICAgPT4gKCkKKyAgdmFyICgnWicpLT5ub3RfYWx3YXlzX2RlZmluZWRfaW5fY29uZCAoJ1RSVUUnKQorICAgID0+ICgiVFJVRSIpCisKKz1jdXQKKworc3ViIG5vdF9hbHdheXNfZGVmaW5lZF9pbl9jb25kICgkJCkKK3sKKyAgbXkgKCRzZWxmLCAkY29uZCkgPSBAXzsKKworICAjIENvbXB1dGUgdGhlIHN1YmNvbmRpdGlvbnMgd2hlcmUgJHZhciBpc24ndCBkZWZpbmVkLgorICByZXR1cm4KKyAgICAkc2VsZi0+Y29uZGl0aW9ucworICAgICAgLT5zdWJfY29uZGl0aW9ucyAoJGNvbmQpCisJLT5pbnZlcnQKKwkgIC0+bXVsdGlwbHkgKCRjb25kKTsKK30KKworCisxOworCisjIyMgU2V0dXAgIkdOVSIgc3R5bGUgZm9yIHBlcmwtbW9kZSBhbmQgY3BlcmwtbW9kZS4KKyMjIExvY2FsIFZhcmlhYmxlczoKKyMjIHBlcmwtaW5kZW50LWxldmVsOiAyCisjIyBwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLWltYWdpbmFyeS1vZmZzZXQ6IDAKKyMjIHBlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtaW5kZW50LWxldmVsOiAyCisjIyBjcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWV4dHJhLW5ld2xpbmUtYmVmb3JlLWJyYWNlOiB0CisjIyBjcGVybC1tZXJnZS10cmFpbGluZy1lbHNlOiBuaWwKKyMjIGNwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBFbmQ6CmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL0F1dG9tYWtlL0l0ZW1EZWYucG0gYi9zaGFyZS9hdXRvbWFrZS0xLjExL0F1dG9tYWtlL0l0ZW1EZWYucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5NGFmYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvQXV0b21ha2UvSXRlbURlZi5wbQpAQCAtMCwwICsxLDExMSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworcGFja2FnZSBBdXRvbWFrZTo6SXRlbURlZjsKK3VzZSBzdHJpY3Q7Cit1c2UgQ2FycDsKKworPWhlYWQxIE5BTUUKKworQXV0b21ha2U6Okl0ZW1EZWYgLSBiYXNlIGNsYXNzIGZvciBBdXRvbWFrZTo6VmFyRGVmIGFuZCBBdXRvbWFrZTo6UnVsZURlZgorCis9aGVhZDEgREVTQ1JJUFRJT04KKworPWhlYWQyIE1ldGhvZHMKKworPW92ZXIgNAorCis9aXRlbSBDPG15ICRkZWYgPSBBdXRvbWFrZTo6bmV3ICgkY29tbWVudCwgJGxvY2F0aW9uLCAkb3duZXIpPgorCitDcmVhdGUgYSBuZXcgTWFrZWZpbGUtaXRlbSBkZWZpbml0aW9uLgorCitDPCRjb21tZW50PiBpcyBhbnkgY29tbWVudCBwcmVjZWRpbmcgdGhlIGRlZmluaXRpb24uICAoQmVjYXVzZQorQXV0b21ha2UgcmVvcmRlcnMgaXRlbXMgaW4gdGhlIG91dHB1dCwgaXQgYWxzbyB0cmllcyB0byBjYXJyeSBjb21tZW50cworYXJvdW5kLikKKworQzwkbG9jYXRpb24+IGlzIHRoZSBwbGFjZSB3aGVyZSB0aGUgZGVmaW5pdGlvbiBvY2N1cnJlZCwgaXQgc2hvdWxkIGJlCithbiBpbnN0YW5jZSBvZiBMPEF1dG9tYWtlOjpMb2NhdGlvbj4uCisKK0M8JG93bmVyPiBzcGVjaWZpZXMgd2hvIG93bnMgdGhlIHJ1bGUuCisKKz1jdXQKKworc3ViIG5ldyAoJCQkJCkKK3sKKyAgbXkgKCRjbGFzcywgJGNvbW1lbnQsICRsb2NhdGlvbiwgJG93bmVyKSA9IEBfOworCisgIG15ICRzZWxmID0geworICAgIGNvbW1lbnQgPT4gJGNvbW1lbnQsCisgICAgbG9jYXRpb24gPT4gJGxvY2F0aW9uLAorICAgIG93bmVyID0+ICRvd25lciwKKyAgfTsKKyAgYmxlc3MgJHNlbGYsICRjbGFzczsKKworICByZXR1cm4gJHNlbGY7Cit9CisKKz1pdGVtIEM8JGRlZi1FPGd0PmNvbW1lbnQ+CisKKz1pdGVtIEM8JGRlZi1FPGd0PmxvY2F0aW9uPgorCis9aXRlbSBDPCRkZWYtRTxndD5vd25lcj4KKworQWNjZXNzb3JzIHRvIHRoZSB2YXJpb3VzIGNvbnN0aXR1ZW50cyBvZiBhbiBDPEl0ZW1EZWY+LiAgU2VlIHRoZQorZG9jdW1lbnRhdGlvbiBvZiBDPG5ldz4ncyBhcmd1bWVudHMgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlc2UuCisKKz1jdXQKKworc3ViIGNvbW1lbnQgKCQpCit7CisgIG15ICgkc2VsZikgPSBAXzsKKyAgcmV0dXJuICRzZWxmLT57J2NvbW1lbnQnfTsKK30KKworc3ViIGxvY2F0aW9uICgkKQoreworICBteSAoJHNlbGYpID0gQF87CisgIHJldHVybiAkc2VsZi0+eydsb2NhdGlvbid9OworfQorCitzdWIgb3duZXIgKCQpCit7CisgIG15ICgkc2VsZikgPSBAXzsKKyAgcmV0dXJuICRzZWxmLT57J293bmVyJ307Cit9CisKKz1oZWFkMSBTRUUgQUxTTworCitMPEF1dG9tYWtlOjpWYXJEZWY+LCBhbmQgTDxBdXRvbWFrZTo6UnVsZURlZj4uCisKKz1jdXQKKworMTsKKworIyMjIFNldHVwICJHTlUiIHN0eWxlIGZvciBwZXJsLW1vZGUgYW5kIGNwZXJsLW1vZGUuCisjIyBMb2NhbCBWYXJpYWJsZXM6CisjIyBwZXJsLWluZGVudC1sZXZlbDogMgorIyMgcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1pbWFnaW5hcnktb2Zmc2V0OiAwCisjIyBwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWluZGVudC1sZXZlbDogMgorIyMgY3BlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1leHRyYS1uZXdsaW5lLWJlZm9yZS1icmFjZTogdAorIyMgY3BlcmwtbWVyZ2UtdHJhaWxpbmctZWxzZTogbmlsCisjIyBjcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgRW5kOgpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9BdXRvbWFrZS9Mb2NhdGlvbi5wbSBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvQXV0b21ha2UvTG9jYXRpb24ucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEzZGM4MAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvQXV0b21ha2UvTG9jYXRpb24ucG0KQEAgLTAsMCArMSwyMDkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK3BhY2thZ2UgQXV0b21ha2U6OkxvY2F0aW9uOworCis9aGVhZDEgTkFNRQorCitBdXRvbWFrZTo6TG9jYXRpb24gLSBhIGNsYXNzIGZvciBsb2NhdGlvbiB0cmFja2luZywgd2l0aCBhIHN0YWNrIG9mIGNvbnRleHRzCisKKz1oZWFkMSBTWU5PUFNJUworCisgIHVzZSBBdXRvbWFrZTo6TG9jYXRpb247CisKKyAgIyBDcmVhdGUgYSBuZXcgTG9jYXRpb24gb2JqZWN0CisgIG15ICR3aGVyZSA9IG5ldyBBdXRvbWFrZTo6TG9jYXRpb24gImZvby5jOjEzIjsKKworICAjIENoYW5nZSB0aGUgbG9jYXRpb24KKyAgJHdoZXJlLT5zZXQgKCJmb28uYzoxNCIpOworCisgICMgR2V0IHRoZSBsb2NhdGlvbiAod2l0aG91dCBjb250ZXh0KS4KKyAgIyBIZXJlIHRoaXMgc2hvdWxkIHByaW50ICJmb28uYzoxNCIKKyAgcHJpbnQgJHdoZXJlLT5nZXQsICJcbiI7CisKKyAgIyBQdXNoIGEgY29udGV4dCwgYW5kIGNoYW5nZSB0aGUgbG9jYXRpb24KKyAgJHdoZXJlLT5wdXNoX2NvbnRleHQgKCJpbmNsdWRlZCBmcm9tIGhlcmUiKTsKKyAgJHdoZXJlLT5zZXQgKCJiYXIuaDoxIik7CisKKyAgIyBQcmludCB0aGUgbG9jYXRpb24gYW5kIHRoZSBzdGFjayBvZiBjb250ZXh0IChmb3IgZGVidWdnaW5nKQorICBwcmludCAkd2hlcmUtPmR1bXA7CisgICMgVGhpcyBzaG91bGQgZGlzcGxheQorICAjICAgYmFyLmg6MToKKyAgIyAgIGZvby5jOjE0OiAgIGluY2x1ZGVkIGZyb20gaGVyZQorCisgICMgR2V0IHRoZSBjb250ZXh0cyAobGlzdCBvZiBbJGxvY2F0aW9uX3N0cmluZywgJGRlc2NyaXB0aW9uXSkKKyAgZm9yIG15ICRwYWlyIChyZXZlcnNlICR3aGVyZS0+Y29udGV4dHMpCisgICAgeworICAgICAgbXkgKCRsb2MsICRkZXNjcikgPSBAeyRwYWlyfTsKKyAgICAgIC4uLgorICAgIH0KKworICAjIFBvcCBhIGNvbnRleHQsIGFuZCByZXNldCB0aGUgbG9jYXRpb24gZnJvbSB0aGUgcHJldmlvdXMgY29udGV4dC4KKyAgJHdoZXJlLT5wb3BfY29udGV4dDsKKworICAjIENsb25lIGEgTG9jYXRpb24uICBVc2UgdGhpcyB3aGVuIHN0b3JpbmcgdGhlIHN0YXRlIG9mIGEgbG9jYXRpb24KKyAgIyB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZSBtb2RpZmllZC4KKyAgbXkgJHdoZXJlX2NvcHkgPSAkd2hlcmUtPmNsb25lOworCisgICMgU2VyaWFsaXplIGEgTG9jYXRpb24gb2JqZWN0IChmb3IgcGFzc2luZyB0aHJvdWdoIGEgdGhyZWFkIHF1ZXVlLAorICAjIGZvciBleGFtcGxlKQorICBteSBAYXJyYXkgPSAkd2hlcmUtPnNlcmlhbGl6ZSAoKTsKKworICAjIERlLXNlcmlhbGl6ZTogcmVjcmVhdGUgYSBMb2NhdGlvbiBvYmplY3QgZnJvbSBhIHF1ZXVlLgorICBteSAkd2hlcmUgPSBuZXcgQXV0b21ha2U6OkxvY2F0aW9uOjpkZXNlcmlhbGl6ZSAoJHF1ZXVlKTsKKworPWhlYWQxIERFU0NSSVBUSU9OCisKK0M8TG9jYXRpb24+IG9iamVjdHMgYXJlIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBsb2NhdGlvbnMgaW4gQXV0b21ha2UsCithbmQgdXNlZCB0byBwcm9kdWNlIGRpYWdub3N0aWNzLgorCitBIEM8TG9jYXRpb24+IG9iamVjdCBpcyBtYWRlIG9mIHR3byBwYXJ0czogYSBsb2NhdGlvbiBzdHJpbmcsIGFuZAorYSBzdGFjayBvZiBjb250ZXh0cy4KKworRm9yIGluc3RhbmNlIGlmIEM8VkFSPiBpcyBkZWZpbmVkIGF0IGxpbmUgMSBpbiBGPGJhci5oPiB3aGljaCB3YXMKK2luY2x1ZGVkIGF0IGxpbmUgMTQgaW4gRjxmb28uYz4sIHRoZW4gdGhlIGxvY2F0aW9uIHN0cmluZyBzaG91bGQgYmUKK0M8ImJhci5oOjEwIj4gYW5kIHRoZSBjb250ZXh0IHNob3VsZCBiZSB0aGUgcGFpciAoQzwiZm9vLmM6MTQiPiwKK0M8ImluY2x1ZGVkIGZyb20gaGVyZSI+KS4KKworU2VjdGlvbiBJPFNZTk9QU0lTPiBzaG93cyBob3cgdG8gc2V0dXAgc3VjaCBhIEM8TG9jYXRpb24+LCBhbmQgYWNjZXNzCit0aGUgbG9jYXRpb24gc3RyaW5nIG9yIHRoZSBzdGFjayBvZiBjb250ZXh0cy4KKworWW91IGNhbiBwYXNzIGEgQzxMb2NhdGlvbj4gdG8gQzxBdXRvbWFrZTo6Q2hhbm5lbHM6Om1zZz4uCisKKz1jdXQKKworc3ViIG5ldyAoJDskKQoreworICBteSAoJGNsYXNzLCAkcG9zaXRpb24pID0gQF87CisgIG15ICRzZWxmID0geworICAgIHBvc2l0aW9uID0+ICRwb3NpdGlvbiwKKyAgICBjb250ZXh0cyA9PiBbXSwKKyAgfTsKKyAgYmxlc3MgJHNlbGYsICRjbGFzczsKKyAgcmV0dXJuICRzZWxmOworfQorCitzdWIgc2V0ICgkJCkKK3sKKyAgbXkgKCRzZWxmLCAkcG9zaXRpb24pID0gQF87CisgICRzZWxmLT57J3Bvc2l0aW9uJ30gPSAkcG9zaXRpb247Cit9CisKK3N1YiBnZXQgKCQpCit7CisgIG15ICgkc2VsZikgPSBAXzsKKyAgcmV0dXJuICRzZWxmLT57J3Bvc2l0aW9uJ307Cit9CisKK3N1YiBwdXNoX2NvbnRleHQgKCQkKQoreworICBteSAoJHNlbGYsICRjb250ZXh0KSA9IEBfOworICBwdXNoIEB7JHNlbGYtPnsnY29udGV4dHMnfX0sIFskc2VsZi0+Z2V0LCAkY29udGV4dF07CisgICRzZWxmLT5zZXQgKHVuZGVmKTsKK30KKworc3ViIHBvcF9jb250ZXh0ICgkKQoreworICBteSAoJHNlbGYpID0gQF87CisgIG15ICRwYWlyID0gcG9wIEB7JHNlbGYtPnsnY29udGV4dHMnfX07CisgICRzZWxmLT5zZXQgKCRwYWlyLT5bMF0pOworICByZXR1cm4gQHskcGFpcn07Cit9CisKK3N1YiBnZXRfY29udGV4dHMgKCQpCit7CisgIG15ICgkc2VsZikgPSBAXzsKKyAgcmV0dXJuIEB7JHNlbGYtPnsnY29udGV4dHMnfX07Cit9CisKK3N1YiBjbG9uZSAoJCkKK3sKKyAgbXkgKCRzZWxmKSA9IEBfOworICBteSAkb3RoZXIgPSBuZXcgQXV0b21ha2U6OkxvY2F0aW9uICgkc2VsZi0+Z2V0KTsKKyAgbXkgQGNvbnRleHRzID0gJHNlbGYtPmdldF9jb250ZXh0czsKKyAgZm9yIG15ICRwYWlyIChAY29udGV4dHMpCisgICAgeworICAgICAgcHVzaCBAeyRvdGhlci0+eydjb250ZXh0cyd9fSwgW0B7JHBhaXJ9XTsKKyAgICB9CisgIHJldHVybiAkb3RoZXI7Cit9CisKK3N1YiBkdW1wICgkKQoreworICBteSAoJHNlbGYpID0gQF87CisgIG15ICRyZXMgPSAoJHNlbGYtPmdldCB8fCAnSU5URVJOQUwnKSAuICI6XG4iOworICBmb3IgbXkgJHBhaXIgKHJldmVyc2UgJHNlbGYtPmdldF9jb250ZXh0cykKKyAgICB7CisgICAgICAkcmVzIC49ICRwYWlyLT5bMF0gfHwgJ0lOVEVSTkFMJzsKKyAgICAgICRyZXMgLj0gIjogJHBhaXItPlsxXVxuIjsKKyAgICB9CisgIHJldHVybiAkcmVzOworfQorCitzdWIgc2VyaWFsaXplICgkKQoreworICBteSAoJHNlbGYpID0gQF87CisgIG15IEBzZXJpYWwgPSAoKTsKKyAgcHVzaCBAc2VyaWFsLCAkc2VsZi0+Z2V0OworICBteSBAY29udGV4dHMgPSAkc2VsZi0+Z2V0X2NvbnRleHRzOworICBmb3IgbXkgJHBhaXIgKEBjb250ZXh0cykKKyAgICB7CisgICAgICBwdXNoIEBzZXJpYWwsIEB7JHBhaXJ9OworICAgIH0KKyAgcHVzaCBAc2VyaWFsLCB1bmRlZjsKKyAgcmV0dXJuIEBzZXJpYWw7Cit9CisKK3N1YiBkZXNlcmlhbGl6ZSAoJCkKK3sKKyAgbXkgKCRxdWV1ZSkgPSBAXzsKKyAgbXkgJHBvc2l0aW9uID0gJHF1ZXVlLT5kZXF1ZXVlICgpOworICBteSAkc2VsZiA9IG5ldyBBdXRvbWFrZTo6TG9jYXRpb24gJHBvc2l0aW9uOworICB3aGlsZSAobXkgJHBvc2l0aW9uID0gJHF1ZXVlLT5kZXF1ZXVlICgpKQorICAgIHsKKyAgICAgIG15ICRjb250ZXh0ID0gJHF1ZXVlLT5kZXF1ZXVlICgpOworICAgICAgcHVzaCBAeyRzZWxmLT57J2NvbnRleHRzJ319LCBbJHBvc2l0aW9uLCAkY29udGV4dF07CisgICAgfQorICByZXR1cm4gJHNlbGY7Cit9CisKKz1oZWFkMSBTRUUgQUxTTworCitMPEF1dG9tYWtlOjpDaGFubmVscz4KKworPWhlYWQxIEhJU1RPUlkKKworV3JpdHRlbiBieSBBbGV4YW5kcmUgRHVyZXQtTHV0eiBFPGx0PkY8YWRsQGdudS5vcmc+RTxndD4uCisKKz1jdXQKKworMTsKKworIyMjIFNldHVwICJHTlUiIHN0eWxlIGZvciBwZXJsLW1vZGUgYW5kIGNwZXJsLW1vZGUuCisjIyBMb2NhbCBWYXJpYWJsZXM6CisjIyBwZXJsLWluZGVudC1sZXZlbDogMgorIyMgcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1pbWFnaW5hcnktb2Zmc2V0OiAwCisjIyBwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWluZGVudC1sZXZlbDogMgorIyMgY3BlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1leHRyYS1uZXdsaW5lLWJlZm9yZS1icmFjZTogdAorIyMgY3BlcmwtbWVyZ2UtdHJhaWxpbmctZWxzZTogbmlsCisjIyBjcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgRW5kOgpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9BdXRvbWFrZS9PcHRpb25zLnBtIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9BdXRvbWFrZS9PcHRpb25zLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhY2M3ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL0F1dG9tYWtlL09wdGlvbnMucG0KQEAgLTAsMCArMSwzOTIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK3BhY2thZ2UgQXV0b21ha2U6Ok9wdGlvbnM7CisKK3VzZSBzdHJpY3Q7Cit1c2UgRXhwb3J0ZXI7Cit1c2UgQXV0b21ha2U6OkNvbmZpZzsKK3VzZSBBdXRvbWFrZTo6Q2hhbm5lbERlZnM7Cit1c2UgQXV0b21ha2U6OkNoYW5uZWxzOwordXNlIEF1dG9tYWtlOjpWZXJzaW9uOworCit1c2UgdmFycyBxdyAoQElTQSBARVhQT1JUKTsKKworQElTQSA9IHF3IChFeHBvcnRlcik7CitARVhQT1JUID0gcXcgKG9wdGlvbiBnbG9iYWxfb3B0aW9uCisJICAgICAgc2V0X29wdGlvbiBzZXRfZ2xvYmFsX29wdGlvbgorCSAgICAgIHVuc2V0X29wdGlvbiB1bnNldF9nbG9iYWxfb3B0aW9uCisJICAgICAgcHJvY2Vzc19vcHRpb25fbGlzdCBwcm9jZXNzX2dsb2JhbF9vcHRpb25fbGlzdAorCSAgICAgIHNldF9zdHJpY3RuZXNzICRzdHJpY3RuZXNzICRzdHJpY3RuZXNzX25hbWUKKwkgICAgICAmRk9SRUlHTiAmR05VICZHTklUUyk7CisKKz1oZWFkMSBOQU1FCisKK0F1dG9tYWtlOjpPcHRpb25zIC0ga2VlcCB0cmFjayBvZiBBdXRvbWFrZSBvcHRpb25zCisKKz1oZWFkMSBTWU5PUFNJUworCisgIHVzZSBBdXRvbWFrZTo6T3B0aW9uczsKKworICAjIE9wdGlvbiBsb29rdXAgYW5kIHNldHRpbmcuCisgICRvcHQgPSBvcHRpb24gJ25hbWUnOworICAkb3B0ID0gZ2xvYmFsX29wdGlvbiAnbmFtZSc7CisgIHNldF9vcHRpb24gJ25hbWUnLCAndmFsdWUnOworICBzZXRfZ2xvYmFsX29wdGlvbiAnbmFtZScsICd2YWx1ZSc7CisgIHVuc2V0X29wdGlvbiAnbmFtZSc7CisgIHVuc2V0X2dsb2JhbF9vcHRpb24gJ25hbWUnOworCisgICMgQmF0Y2ggb3B0aW9uIHNldHRpbmcuCisgIHByb2Nlc3Nfb3B0aW9uX2xpc3QgJGxvY2F0aW9uLCBAbmFtZXM7CisgIHByb2Nlc3NfZ2xvYmFsX29wdGlvbl9saXN0ICRsb2NhdGlvbiwgQG5hbWVzOworCisgICMgU3RyaWN0bmVzcyBsb29rdXAgYW5kIHNldHRpbmcuCisgIHNldF9zdHJpY3RuZXNzICdmb3JlaWduJzsKKyAgc2V0X3N0cmljdG5lc3MgJ2dudSc7CisgIHNldF9zdHJpY3RuZXNzICdnbml0cyc7CisgIGlmICgkc3RyaWN0bmVzcyA+PSBHTlUpIHsgLi4uIH0KKyAgcHJpbnQgIiRzdHJpY3RuZXNzX25hbWVcbiI7CisKKz1oZWFkMSBERVNDUklQVElPTgorCitUaGlzIHBhY2thZ2VzIG1hbmFnZXMgQXV0b21ha2UncyBvcHRpb25zIGFuZCBzdHJpY3RuZXNzIHNldHRpbmdzLgorT3B0aW9ucyBjYW4gYmUgZWl0aGVyIGxvY2FsIG9yIGdsb2JhbC4gIExvY2FsIG9wdGlvbnMgYXJlIHNldCB1c2luZyBhbgorQzxBVVRPTUFLRV9PUFRJT05TPiB2YXJpYWJsZSBpbiBhIEY8TWFrZWZpbGUuYW0+IGFuZCBhcHBseSBvbmx5IHRvCit0aGlzIEY8TWFrZWZpbGUuYW0+LiAgR2xvYmFsIG9wdGlvbnMgYXJlIHNldCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgb3IKK3Bhc3NlZCBhcyBhbiBhcmd1bWVudCB0byBDPEFNX0lOSVRfQVVUT01BS0U+LCB0aGV5IGFwcGx5IHRvIGFsbAorRjxNYWtlZmlsZS5hbT5zLgorCis9Y3V0CisKKyMgVmFsdWVzIGFyZSB0aGUgQXV0b21ha2U6OkxvY2F0aW9uIG9mIHRoZSBkZWZpbml0aW9uLCBleGNlcHQKKyMgZm9yICdhbnNpMmtucicgd2hvc2UgdmFsdWUgaXMgYSBwYWlyIFtmaWxlbmFtZSwgTG9jYXRpb25dLgordXNlIHZhcnMgJyVfb3B0aW9ucyc7CQkjIEZyb20gQVVUT01BS0VfT1BUSU9OUwordXNlIHZhcnMgJyVfZ2xvYmFsX29wdGlvbnMnOwkjIGZyb20gQU1fSU5JVF9BVVRPTUFLRSBvciB0aGUgY29tbWFuZCBsaW5lLgorCis9aGVhZDIgQ29uc3RhbnRzCisKKz1vdmVyIDQKKworPWl0ZW0gRk9SRUlHTgorCis9aXRlbSBHTlUKKworPWl0ZW0gR05JVFMKKworU3RyaWN0bmVzcyBjb25zdGFudHMgdXNlZCBhcyB2YWx1ZXMgZm9yIEM8JHN0cmljdG5lc3M+LgorCis9YmFjaworCis9Y3V0CisKKyMgQ29uc3RhbnRzIHRvIGRlZmluZSB0aGUgInN0cmljdG5lc3MiIGxldmVsLgordXNlIGNvbnN0YW50IEZPUkVJR04gPT4gMDsKK3VzZSBjb25zdGFudCBHTlUgICAgID0+IDE7Cit1c2UgY29uc3RhbnQgR05JVFMgICA9PiAyOworCis9aGVhZDIgVmFyaWFibGVzCisKKz1vdmVyIDQKKworPWl0ZW0gQzwkc3RyaWN0bmVzcz4KKworVGhlIGN1cnJlbnQgc3RyaWN0bmVzcy4gIE9uZSBvZiBDPEZPUkVJR04+LCBDPEdOVT4sIG9yIEM8R05JVFM+LgorCis9aXRlbSBDPCRzdHJpY3RuZXNzX25hbWU+CisKK1RoZSBjdXJyZW50IHN0cmljdG5lc3MgbmFtZS4gIE9uZSBvZiBDPCdmb3JlaWduJz4sIEM8J2dudSc+LCBvciBDPCdnbml0cyc+LgorCis9YmFjaworCis9Y3V0CisKKyMgU3RyaWN0bmVzcyBsZXZlbHMuCit1c2UgdmFycyBxdyAoJHN0cmljdG5lc3MgJHN0cmljdG5lc3NfbmFtZSk7CisKKyMgU3RyaWN0bmVzcyBsZXZlbCBhcyBzZXQgb24gY29tbWFuZCBsaW5lLgordXNlIHZhcnMgcXcgKCRfZGVmYXVsdF9zdHJpY3RuZXNzICRfZGVmYXVsdF9zdHJpY3RuZXNzX25hbWUpOworCisKKz1oZWFkMiBGdW5jdGlvbnMKKworPW92ZXIgNAorCis9aXRlbSBDPEF1dG9tYWtlOjpPcHRpb25zOjpyZXNldD4KKworUmVzZXQgdGhlIG9wdGlvbnMgdmFyaWFibGVzIGZvciB0aGUgbmV4dCBGPE1ha2VmaWxlLmFtPi4KKworSW4gb3RoZXIgd29yZHMsIHRoaXMgZ2V0cyByaWQgb2YgYWxsIGxvY2FsIG9wdGlvbnMgaW4gdXNlIGJ5IHRoZQorcHJldmlvdXMgRjxNYWtlZmlsZS5hbT4uCisKKz1jdXQKKworc3ViIHJlc2V0ICgpCit7CisgICVfb3B0aW9ucyA9ICVfZ2xvYmFsX29wdGlvbnM7CisgICMgVGhlIGZpcnN0IHRpbWUgd2UgYXJlIHJ1biwKKyAgIyByZW1lbWJlciB0aGUgY3VycmVudCBzZXR0aW5nIGFzIHRoZSBkZWZhdWx0LgorICBpZiAoZGVmaW5lZCAkX2RlZmF1bHRfc3RyaWN0bmVzcykKKyAgICB7CisgICAgICAkc3RyaWN0bmVzcyA9ICRfZGVmYXVsdF9zdHJpY3RuZXNzOworICAgICAgJHN0cmljdG5lc3NfbmFtZSA9ICRfZGVmYXVsdF9zdHJpY3RuZXNzX25hbWU7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgJF9kZWZhdWx0X3N0cmljdG5lc3MgPSAkc3RyaWN0bmVzczsKKyAgICAgICRfZGVmYXVsdF9zdHJpY3RuZXNzX25hbWUgPSAkc3RyaWN0bmVzc19uYW1lOworICAgIH0KK30KKworPWl0ZW0gQzwkdmFsdWUgPSBvcHRpb24gKCRuYW1lKT4KKworPWl0ZW0gQzwkdmFsdWUgPSBnbG9iYWxfb3B0aW9uICgkbmFtZSk+CisKK1F1ZXJ5IHRoZSBzdGF0ZSBvZiBhbiBvcHRpb24uICBJZiB0aGUgb3B0aW9uIGlzIHVuc2V0LCB0aGlzCityZXR1cm5zIHRoZSBlbXB0eSBsaXN0LiAgT3RoZXJ3aXNlIGl0IHJldHVybnMgdGhlIG9wdGlvbidzIHZhbHVlLAorYXMgc2V0IGJ5IEM8c2V0X29wdGlvbj4gb3IgQzxzZXRfZ2xvYmFsX29wdGlvbj4uCisKK05vdGUgdGhhdCBDPGdsb2JhbF9vcHRpb24+IHNob3VsZCBiZSB1c2VkIG9ubHkgd2hlbiBpdCBpcworaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSBhbiBvcHRpb24gaGFzbid0IGJlZW4gc2V0IGxvY2FsbHkuCitPdGhlcndpc2UgQzxvcHRpb24+IHNob3VsZCBiZSB0aGUgc3RhbmRhcmQgZnVuY3Rpb24gdG8KK2NoZWNrIGZvciBvcHRpb25zIChiZSB0aGV5IGdsb2JhbCBvciBsb2NhbCkuCisKKz1jdXQKKworc3ViIG9wdGlvbiAoJCkKK3sKKyAgbXkgKCRuYW1lKSA9IEBfOworICByZXR1cm4gKCkgdW5sZXNzIGRlZmluZWQgJF9vcHRpb25zeyRuYW1lfTsKKyAgcmV0dXJuICRfb3B0aW9uc3skbmFtZX07Cit9CisKK3N1YiBnbG9iYWxfb3B0aW9uICgkKQoreworICBteSAoJG5hbWUpID0gQF87CisgIHJldHVybiAoKSB1bmxlc3MgZGVmaW5lZCAkX2dsb2JhbF9vcHRpb25zeyRuYW1lfTsKKyAgcmV0dXJuICRfZ2xvYmFsX29wdGlvbnN7JG5hbWV9OworfQorCis9aXRlbSBDPHNldF9vcHRpb24gKCRuYW1lLCAkdmFsdWUpPgorCis9aXRlbSBDPHNldF9nbG9iYWxfb3B0aW9uICgkbmFtZSwgJHZhbHVlKT4KKworU2V0IGFuIG9wdGlvbi4gIEJ5IGNvbnZlbnRpb24sIEM8JHZhbHVlPiBpcyB1c3VhbGx5IHRoZSBsb2NhdGlvbgorb2YgdGhlIG9wdGlvbiBkZWZpbml0aW9uLgorCis9Y3V0CisKK3N1YiBzZXRfb3B0aW9uICgkJCkKK3sKKyAgbXkgKCRuYW1lLCAkdmFsdWUpID0gQF87CisgICRfb3B0aW9uc3skbmFtZX0gPSAkdmFsdWU7Cit9CisKK3N1YiBzZXRfZ2xvYmFsX29wdGlvbiAoJCQpCit7CisgIG15ICgkbmFtZSwgJHZhbHVlKSA9IEBfOworICAkX2dsb2JhbF9vcHRpb25zeyRuYW1lfSA9ICR2YWx1ZTsKK30KKworCis9aXRlbSBDPHVuc2V0X29wdGlvbiAoJG5hbWUpPgorCis9aXRlbSBDPHVuc2V0X2dsb2JhbF9vcHRpb24gKCRuYW1lKT4KKworVW5zZXQgYW4gb3B0aW9uLgorCis9Y3V0CisKK3N1YiB1bnNldF9vcHRpb24gKCQpCit7CisgIG15ICgkbmFtZSkgPSBAXzsKKyAgZGVsZXRlICRfb3B0aW9uc3skbmFtZX07Cit9CisKK3N1YiB1bnNldF9nbG9iYWxfb3B0aW9uICgkKQoreworICBteSAoJG5hbWUpID0gQF87CisgIGRlbGV0ZSAkX2dsb2JhbF9vcHRpb25zeyRuYW1lfTsKK30KKworCis9aXRlbSBDPHByb2Nlc3Nfb3B0aW9uX2xpc3QgKCR3aGVyZSwgQG9wdGlvbnMpPgorCis9aXRlbSBDPHByb2Nlc3NfZ2xvYmFsX29wdGlvbl9saXN0ICgkd2hlcmUsIEBvcHRpb25zKT4KKworUHJvY2VzcyBBdXRvbWFrZSdzIG9wdGlvbiBsaXN0cy4gIEM8QG9wdGlvbnM+IHNob3VsZCBiZSBhIGxpc3Qgb2YKK3dvcmRzLCBhcyB0aGV5IG9jY3VyIGluIEM8QVVUT01BS0VfT1BUSU9OUz4gb3IgQzxBTV9JTklUX0FVVE9NQUtFPi4KKworUmV0dXJuIDEgb24gZXJyb3IsIDAgb3RoZXJ3aXNlLgorCis9Y3V0CisKKyMgJEJPT0wKKyMgX3Byb2Nlc3Nfb3B0aW9uX2xpc3QgKFwlT1BUSU9OUywgJFdIRVJFLCBAT1BUSU9OUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9jZXNzIGEgbGlzdCBvZiBvcHRpb25zLiAgUmV0dXJuIDEgb24gZXJyb3IsIDAgb3RoZXJ3aXNlLgorIyBcJU9QVElPTlMgaXMgdGhlIGhhc2ggdG8gZmlsbCB3aXRoIG9wdGlvbnMgZGF0YSwgJFdIRVJFIGlzCisjIHRoZSBsb2NhdGlvbiB3aGVyZSBAT1BUSU9OUyBvY2N1cnJlZC4KK3N1YiBfcHJvY2Vzc19vcHRpb25fbGlzdCAoXCUkQCkKK3sKKyAgbXkgKCRvcHRpb25zLCAkd2hlcmUsIEBsaXN0KSA9IEBfOworCisgIGZvcmVhY2ggKEBsaXN0KQorICAgIHsKKyAgICAgICRvcHRpb25zLT57JF99ID0gJHdoZXJlOworICAgICAgaWYgKCRfIGVxICdnbml0cycgfHwgJF8gZXEgJ2dudScgfHwgJF8gZXEgJ2ZvcmVpZ24nKQorCXsKKwkgIHNldF9zdHJpY3RuZXNzICgkXyk7CisJfQorICAgICAgZWxzaWYgKC9eKC4qXC8pP2Fuc2kya25yJC8pCisJeworCSAgIyBBbiBvcHRpb24gbGlrZSAiLi4vbGliL2Fuc2kya25yIiBpcyBhbGxvd2VkLiAgV2l0aCBubworCSAgIyBwYXRoIHByZWZpeCwgd2UgYXNzdW1lIHRoZSByZXF1aXJlZCBwcm9ncmFtcyBhcmUgaW4gdGhpcworCSAgIyBkaXJlY3RvcnkuICBXZSBzYXZlIHRoZSBhY3R1YWwgb3B0aW9uIGZvciBsYXRlci4KKwkgICRvcHRpb25zLT57J2Fuc2kya25yJ30gPSBbJF8sICR3aGVyZV07CisJfQorICAgICAgZWxzaWYgKCRfIGVxICduby1pbnN0YWxsbWFuJyB8fCAkXyBlcSAnbm8taW5zdGFsbGluZm8nCisJICAgICB8fCAkXyBlcSAnZGlzdC1zaGFyJyB8fCAkXyBlcSAnZGlzdC16aXAnCisJICAgICB8fCAkXyBlcSAnZGlzdC10YXJaJyB8fCAkXyBlcSAnZGlzdC1iemlwMicKKwkgICAgIHx8ICRfIGVxICdkaXN0LWx6bWEnIHx8ICRfIGVxICdkaXN0LXh6JworCSAgICAgfHwgJF8gZXEgJ25vLWRpc3QtZ3ppcCcgfHwgJF8gZXEgJ25vLWRpc3QnCisJICAgICB8fCAkXyBlcSAnZGVqYWdudScgfHwgJF8gZXEgJ25vLXRleGluZm8udGV4JworCSAgICAgfHwgJF8gZXEgJ3JlYWRtZS1hbHBoYScgfHwgJF8gZXEgJ2NoZWNrLW5ld3MnCisJICAgICB8fCAkXyBlcSAnc3ViZGlyLW9iamVjdHMnIHx8ICRfIGVxICdub3N0ZGluYycKKwkgICAgIHx8ICRfIGVxICduby1leGVleHQnIHx8ICRfIGVxICduby1kZWZpbmUnCisJICAgICB8fCAkXyBlcSAnc3RkLW9wdGlvbnMnCisJICAgICB8fCAkXyBlcSAnY29sb3ItdGVzdHMnIHx8ICRfIGVxICdwYXJhbGxlbC10ZXN0cycKKwkgICAgIHx8ICRfIGVxICdjeWdudXMnIHx8ICRfIGVxICduby1kZXBlbmRlbmNpZXMnKQorCXsKKwkgICMgRXhwbGljaXRseSByZWNvZ25pemUgdGhlc2UuCisJfQorICAgICAgZWxzaWYgKCRfID1+IC9eZmlsZW5hbWUtbGVuZ3RoLW1heD0oXGQrKSQvKQorCXsKKwkgIGRlbGV0ZSAkb3B0aW9ucy0+eyRffTsKKwkgICRvcHRpb25zLT57J2ZpbGVuYW1lLWxlbmd0aC1tYXgnfSA9IFskXywgJDFdOworCX0KKyAgICAgIGVsc2lmICgkXyBlcSAgJ3NpbGVudC1ydWxlcycpCisgICAgICAgIHsKKwkgIGVycm9yICgkd2hlcmUsCisJCSAib3B0aW9uIGAkXycgY2FuIG9ubHkgYmUgdXNlZCBhcyBhcmd1bWVudCB0byBBTV9JTklUX0FVVE9NQUtFXG4iCisJCSAuICJidXQgbm90IGluIEFVVE9NQUtFX09QVElPTlMgbWFrZWZpbGUgc3RhdGVtZW50cyIpCisJICAgIGlmICR3aGVyZS0+Z2V0ICF+IC9eY29uZmlndXJlXC4vOworCX0KKyAgICAgIGVsc2lmICgkXyBlcSAndGFyLXY3JyB8fCAkXyBlcSAndGFyLXVzdGFyJyB8fCAkXyBlcSAndGFyLXBheCcpCisJeworCSAgZXJyb3IgKCR3aGVyZSwKKwkJICJvcHRpb24gYCRfJyBjYW4gb25seSBiZSB1c2VkIGFzIGFyZ3VtZW50IHRvIEFNX0lOSVRfQVVUT01BS0VcbiIKKwkJIC4gImJ1dCBub3QgaW4gQVVUT01BS0VfT1BUSU9OUyBtYWtlZmlsZSBzdGF0ZW1lbnRzIikKKwkgICAgaWYgJHdoZXJlLT5nZXQgIX4gL15jb25maWd1cmVcLi87CisJICBmb3IgbXkgJG9wdCAoJ3Rhci12NycsICd0YXItdXN0YXInLCAndGFyLXBheCcpCisJICAgIHsKKwkgICAgICBuZXh0IGlmICRvcHQgZXEgJF87CisJICAgICAgaWYgKGV4aXN0cyAkb3B0aW9ucy0+eyRvcHR9KQorCQl7CisJCSAgZXJyb3IgKCR3aGVyZSwKKwkJCSAib3B0aW9ucyBgJF8nIGFuZCBgJG9wdCcgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIpOworCQkgIGxhc3Q7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIGVsc2lmICgvXlxkK1wuXGQrKD86XC5cZCspP1thLXpdPyg/Oi1bQS1aYS16MC05XSspPyQvKQorCXsKKwkgICMgR290IGEgdmVyc2lvbiBudW1iZXIuCisJICBpZiAoQXV0b21ha2U6OlZlcnNpb246OmNoZWNrICgkVkVSU0lPTiwgJCYpKQorCSAgICB7CisJICAgICAgZXJyb3IgKCR3aGVyZSwgInJlcXVpcmUgQXV0b21ha2UgJF8sIGJ1dCBoYXZlICRWRVJTSU9OIiwKKwkJICAgICB1bmlxX3Njb3BlID0+IFVTX0dMT0JBTCk7CisJICAgICAgcmV0dXJuIDE7CisJICAgIH0KKwl9CisgICAgICBlbHNpZiAoL14oPzotLXdhcm5pbmdzPXwtVykoLiopJC8pCisJeworCSAgZm9yZWFjaCBteSAkY2F0IChzcGxpdCAoJywnLCAkMSkpCisJICAgIHsKKwkgICAgICBtc2cgJ3Vuc3VwcG9ydGVkJywgJHdoZXJlLCAidW5rbm93biB3YXJuaW5nIGNhdGVnb3J5IGAkY2F0JyIKKwkJaWYgc3dpdGNoX3dhcm5pbmcgJGNhdDsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICBlcnJvciAoJHdoZXJlLCAib3B0aW9uIGAkXycgbm90IHJlY29nbml6ZWQiLAorCQkgdW5pcV9zY29wZSA9PiBVU19HTE9CQUwpOworCSAgcmV0dXJuIDE7CisJfQorICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N1YiBwcm9jZXNzX29wdGlvbl9saXN0ICgkQCkKK3sKKyAgbXkgKCR3aGVyZSwgQGxpc3QpID0gQF87CisgIHJldHVybiBfcHJvY2Vzc19vcHRpb25fbGlzdCAoJV9vcHRpb25zLCAkd2hlcmUsIEBsaXN0KTsKK30KKworc3ViIHByb2Nlc3NfZ2xvYmFsX29wdGlvbl9saXN0ICgkQCkKK3sKKyAgbXkgKCR3aGVyZSwgQGxpc3QpID0gQF87CisgIHJldHVybiBfcHJvY2Vzc19vcHRpb25fbGlzdCAoJV9nbG9iYWxfb3B0aW9ucywgJHdoZXJlLCBAbGlzdCk7Cit9CisKKz1pdGVtIEM8c2V0X3N0cmljdG5lc3MgKCRuYW1lKT4KKworU2V0IHRoZSBjdXJyZW50IHN0cmljdG5lc3MgbGV2ZWwuCitDPCRuYW1lPiBzaG91bGQgYmUgb25lIG9mIEM8J2ZvcmVpZ24nPiwgQzwnZ251Jz4sIG9yIEM8J2duaXRzJz4uCisKKz1jdXQKKworIyBTZXQgc3RyaWN0bmVzcy4KK3N1YiBzZXRfc3RyaWN0bmVzcyAoJCkKK3sKKyAgJHN0cmljdG5lc3NfbmFtZSA9ICRfWzBdOworCisgIEF1dG9tYWtlOjpDaGFubmVsRGVmczo6c2V0X3N0cmljdG5lc3MgKCRzdHJpY3RuZXNzX25hbWUpOworCisgIGlmICgkc3RyaWN0bmVzc19uYW1lIGVxICdnbnUnKQorICAgIHsKKyAgICAgICRzdHJpY3RuZXNzID0gR05VOworICAgIH0KKyAgZWxzaWYgKCRzdHJpY3RuZXNzX25hbWUgZXEgJ2duaXRzJykKKyAgICB7CisgICAgICAkc3RyaWN0bmVzcyA9IEdOSVRTOworICAgIH0KKyAgZWxzaWYgKCRzdHJpY3RuZXNzX25hbWUgZXEgJ2ZvcmVpZ24nKQorICAgIHsKKyAgICAgICRzdHJpY3RuZXNzID0gRk9SRUlHTjsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBwcm9nX2Vycm9yICJsZXZlbCBgJHN0cmljdG5lc3NfbmFtZScgbm90IHJlY29nbml6ZWRcbiI7CisgICAgfQorfQorCisxOworCisjIyMgU2V0dXAgIkdOVSIgc3R5bGUgZm9yIHBlcmwtbW9kZSBhbmQgY3BlcmwtbW9kZS4KKyMjIExvY2FsIFZhcmlhYmxlczoKKyMjIHBlcmwtaW5kZW50LWxldmVsOiAyCisjIyBwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLWltYWdpbmFyeS1vZmZzZXQ6IDAKKyMjIHBlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtaW5kZW50LWxldmVsOiAyCisjIyBjcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWV4dHJhLW5ld2xpbmUtYmVmb3JlLWJyYWNlOiB0CisjIyBjcGVybC1tZXJnZS10cmFpbGluZy1lbHNlOiBuaWwKKyMjIGNwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBFbmQ6CmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL0F1dG9tYWtlL1J1bGUucG0gYi9zaGFyZS9hdXRvbWFrZS0xLjExL0F1dG9tYWtlL1J1bGUucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhiM2VhNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvQXV0b21ha2UvUnVsZS5wbQpAQCAtMCwwICsxLDg2NiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDYsIDIwMDcgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworcGFja2FnZSBBdXRvbWFrZTo6UnVsZTsKK3VzZSBzdHJpY3Q7Cit1c2UgQ2FycDsKKwordXNlIEF1dG9tYWtlOjpJdGVtOwordXNlIEF1dG9tYWtlOjpSdWxlRGVmOwordXNlIEF1dG9tYWtlOjpDaGFubmVsRGVmczsKK3VzZSBBdXRvbWFrZTo6Q2hhbm5lbHM7Cit1c2UgQXV0b21ha2U6Ok9wdGlvbnM7Cit1c2UgQXV0b21ha2U6OkNvbmRpdGlvbiBxdyAoVFJVRSBGQUxTRSk7Cit1c2UgQXV0b21ha2U6OkRpc2pDb25kaXRpb25zOworcmVxdWlyZSBFeHBvcnRlcjsKK3VzZSB2YXJzICdASVNBJywgJ0BFWFBPUlQnLCAnQEVYUE9SVF9PSyc7CitASVNBID0gcXcvQXV0b21ha2U6Okl0ZW0gRXhwb3J0ZXIvOworQEVYUE9SVCA9IHF3IChyZXNldCByZWdpc3Rlcl9zdWZmaXhfcnVsZSBzdWZmaXhfcnVsZXNfY291bnQKKwkgICAgICBzdWZmaXhlcyBydWxlcyAkc3VmZml4X3J1bGVzICRLTk9XTl9FWFRFTlNJT05TX1BBVFRFUk4KKwkgICAgICBkZXBlbmQgJWRlcGVuZGVuY2llcyAlYWN0aW9ucyByZWdpc3Rlcl9hY3Rpb24KKwkgICAgICBhY2NlcHRfZXh0ZW5zaW9ucworCSAgICAgIHJlamVjdF9ydWxlIG1zZ19ydWxlIG1zZ19jb25kX3J1bGUgZXJyX3J1bGUgZXJyX2NvbmRfcnVsZQorCSAgICAgIHJ1bGUgcnJ1bGUgcnVsZWRlZiBycnVsZWRlZik7CisKKz1oZWFkMSBOQU1FCisKK0F1dG9tYWtlOjpSdWxlIC0gc3VwcG9ydCBmb3IgcnVsZXMgZGVmaW5pdGlvbnMKKworPWhlYWQxIFNZTk9QU0lTCisKKyAgdXNlIEF1dG9tYWtlOjpSdWxlOworICB1c2UgQXV0b21ha2U6OlJ1bGVEZWY7CisKKworPWhlYWQxIERFU0NSSVBUSU9OCisKK1RoaXMgcGFja2FnZSBwcm92aWRlcyBzdXBwb3J0IGZvciBNYWtlZmlsZSBydWxlIGRlZmluaXRpb25zLgorCitBbiBDPEF1dG9tYWtlOjpSdWxlPiBpcyBhIHJ1bGUgbmFtZSBhc3NvY2lhdGVkIHRvIHBvc3NpYmx5CittYW55IGNvbmRpdGlvbmFsIGRlZmluaXRpb25zLiAgVGhlc2UgZGVmaW5pdGlvbnMgYXJlIGluc3RhbmNlcworb2YgQzxBdXRvbWFrZTo6UnVsZURlZj4uCisKK1RoZXJlZm9yZSBvYnRhaW5pbmcgdGhlIHZhbHVlIG9mIGEgcnVsZSB1bmRlciBhIGdpdmVuCitjb25kaXRpb24gaW52b2x2ZXMgdHdvIGxvb2t1cHMuICBPbmUgdG8gbG9vayB1cCB0aGUgcnVsZSwKK2FuZCBvbmUgdG8gbG9vayB1cCB0aGUgY29uZGl0aW9uYWwgZGVmaW5pdGlvbjoKKworICBteSAkcnVsZSA9IHJ1bGUgJG5hbWU7CisgIGlmICgkcnVsZSkKKyAgICB7CisgICAgICBteSAkZGVmID0gJHJ1bGUtPmRlZiAoJGNvbmQpOworICAgICAgaWYgKCRkZWYpCisJeworCSAgcmV0dXJuICRkZWYtPmxvY2F0aW9uOworCX0KKyAgICAgIC4uLgorICAgIH0KKyAgLi4uCisKK3doZW4gaXQgaXMga25vd24gdGhhdCB0aGUgcnVsZSBhbmQgdGhlIGRlZmluaXRpb24KK2JlaW5nIGxvb2tlZCB1cCBleGlzdCwgdGhlIGFib3ZlIGNhbiBiZSBzaW1wbGlmaWVkIHRvCisKKyAgcmV0dXJuIHJ1bGUgKCRuYW1lKS0+ZGVmICgkY29uZCktPmxvY2F0aW9uOyAjIGRvIG5vdCB3cml0ZSB0aGlzLgorCitidXQgaXMgYmV0dGVyIHdyaXR0ZW4KKworICByZXR1cm4gcnJ1bGUgKCRuYW1lKS0+cmRlZiAoJGNvbmQpLT5sb2NhdGlvbjsKKworb3IgZXZlbgorCisgIHJldHVybiBycnVsZWRlZiAoJG5hbWUsICRjb25kKS0+bG9jYXRpb247CisKK1RoZSBJPHI+IHZhcmlhbnRzIG9mIHRoZSBDPHJ1bGU+LCBDPGRlZj4sIGFuZCBDPHJ1bGVkZWY+IG1ldGhvZHMgYWRkCithbiBleHRyYSB0ZXN0IHRvIGVuc3VyZSB0aGF0IHRoZSBsb29rdXAgc3VjY2VlZGVkLCBhbmQgd2lsbCBkaWFnbm9zZQorZmFpbHVyZXMgYXMgaW50ZXJuYWwgZXJyb3JzICh3aXRoIGEgbWVzc2FnZSB3aGljaCBpcyBtdWNoIG1vcmUKK2luZm9ybWF0aXZlIHRoYW4gUGVybCdzIHdhcm5pbmcgYWJvdXQgY2FsbGluZyBhIG1ldGhvZCBvbiBhCitub24tb2JqZWN0KS4KKworPWhlYWQyIEdsb2JhbCB2YXJpYWJsZXMKKworPW92ZXIgNAorCis9Y3V0CisKK215ICRfU1VGRklYX1JVTEVfUEFUVEVSTiA9CisgICdeKFwuW2EtekEtWjAtOV8oKXt9JCtAXC1dKykoXC5bYS16QS1aMC05Xygpe30kK0BcLV0rKScgLiAiXCQiOworCisjIFN1ZmZpeGVzIGZvdW5kIGR1cmluZyBhIHJ1bi4KK3VzZSB2YXJzICdAX3N1ZmZpeGVzJzsKKworIyBTYW1lIGFzICRzdWZmaXhfcnVsZXMgKGRlY2xhcmVkIGJlbG93KSwgYnV0IHJlY29yZHMgb25seSB0aGUKKyMgZGVmYXVsdCBydWxlcyBzdXBwbGllZCBieSB0aGUgbGFuZ3VhZ2VzIEF1dG9tYWtlIHN1cHBvcnRzLgordXNlIHZhcnMgJyRfc3VmZml4X3J1bGVzX2RlZmF1bHQnOworCis9aXRlbSBDPCVkZXBlbmRlbmNpZXM+CisKK0hvbGRzIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGFyZ2V0cyB3aGljaCBkZXBlbmRlbmNpZXMgYXJlIGZhY3RvcmVkLgorVHlwaWNhbGx5LCBDPC5QSE9OWT4gd2lsbCBhcHBlYXIgaW4gcGxlbnR5IG9mIEY8Ki5hbT4gZmlsZXMsIGJ1dCBtdXN0CitiZSBvdXRwdXQgb25jZS4gIEFyZ3VhYmx5IGFsbCBwdXJlIGRlcGVuZGVuY2llcyBjb3VsZCBiZSBzdWJqZWN0IHRvCit0aGlzIGZhY3RvcmluZywgYnV0IGl0IGlzIG5vdCB1bnBsZWFzYW50IHRvIGhhdmUgcGFyYWdyYXBocyBpbgorTWFrZWZpbGU6IGtlZXBpbmcgcmVsYXRlZCBzdHVmZiBhbHRvZ2V0aGVyLgorCis9Y3V0CisKK3VzZSB2YXJzICclZGVwZW5kZW5jaWVzJzsKKworPWl0ZW0gPCVhY3Rpb25zPgorCitIb2xkcyB0aGUgZmFjdG9yZWQgYWN0aW9ucy4gIFRpZWQgdG8gQzwlZGVwZW5kZW5jaWVzPiwgaS5lLiwgZmlsbGVkCitvbmx5IHdoZW4ga2V5cyBleGlzdHMgaW4gQzwlZGVwZW5kZW5jaWVzPi4KKworPWN1dAorCit1c2UgdmFycyAnJWFjdGlvbnMnOworCis9aXRlbSA8JHN1ZmZpeF9ydWxlcz4KKworVGhpcyBtYXBzIHRoZSBzb3VyY2UgZXh0ZW5zaW9uIGZvciBhbGwgc3VmZml4IHJ1bGUgc2VlbiB0bworYSBDPGhhc2g+IHdob3NlIGtleXMgYXJlIHRoZSBwb3NzaWJsZSBvdXRwdXQgZXh0ZW5zaW9ucy4KKworTm90ZSB0aGF0IHRoaXMgaXMgdHJhbnNpdGl2ZWx5IGNsb3NlZCBieSBjb25zdHJ1Y3Rpb246CitpZiB3ZSBoYXZlCisgICAgICBleGlzdHMgJHN1ZmZpeF9ydWxlc3skZXh0MX17JGV4dDJ9CisgICAmJiBleGlzdHMgJHN1ZmZpeF9ydWxlc3skZXh0Mn17JGV4dDN9Cit0aGVuIHdlIGFsc28gaGF2ZQorICAgICAgZXhpc3RzICRzdWZmaXhfcnVsZXN7JGV4dDF9eyRleHQzfQorCitTbyBpdCdzIGVhc3kgdG8gY2hlY2sgd2hldGhlciBDPC5mb28+IGNhbiBiZSB0cmFuc2Zvcm1lZCB0bworQzwuJChPQkpFWFQpPiBieSBjaGVja2luZyB3aGV0aGVyCitDPCRzdWZmaXhfcnVsZXN7Jy5mb28nfXsnLiQoT0JKRVhUKSd9PiBleGlzdHMuICBUaGlzIHdpbGwgd29yayBldmVuIGlmCit0cmFuc2Zvcm1pbmcgQzwuZm9vPiB0byBDPC4kKE9CSkVYVCk+IGludm9sdmVzIGEgY2hhaW4gb2Ygc2V2ZXJhbAorc3VmZml4IHJ1bGVzLgorCitUaGUgdmFsdWUgb2YgQzwkc3VmZml4X3J1bGVzeyRleHQxfXskZXh0Mn0+IGlzIGEgcGFpcgorQzxbICRuZXh0X3NmeCwgJGRpc3QgXT4gd2hlcmUgQzwkbmV4dF9zZng+IGlzIHRhcmdldCBzdWZmaXgKK2ZvciB0aGUgbmV4dCBydWxlIHRvIHVzZSB0byByZWFjaCBDPCRleHQyPiwgYW5kIEM8JGRpc3Q+IHRoZQorZGlzdGFuY2UgdG8gQzwkZXh0Mic+LgorCitUaGUgY29udGVudCBvZiB0aGlzIHZhcmlhYmxlIHNob3VsZCBiZSB1cGRhdGVkIHZpYSB0aGUKK0M8cmVnaXN0ZXJfc3VmZml4X3J1bGU+IGZ1bmN0aW9uLgorCis9Y3V0CisKK3VzZSB2YXJzICckc3VmZml4X3J1bGVzJzsKKworPWl0ZW0gQzwkS05PV05fRVhURU5TSU9OU19QQVRURVJOPgorCitQYXR0ZXJuIHRoYXQgbWF0Y2hlcyBhbGwga25vdyBpbnB1dCBleHRlbnNpb25zIChpLmUuIGV4dGVuc2lvbnMgdXNlZAorYnkgdGhlIGxhbmd1YWdlcyBzdXBwb3J0ZWQgYnkgQXV0b21ha2UpLiAgVXNpbmcgdGhpcyBwYXR0ZXJuIChpbnN0ZWFkCitvZiBgXC4uKiQnKSB0byBtYXRjaCBleHRlbnNpb25zIGFsbG93cyBBdXRvbWFrZSB0byBzdXBwb3J0IGRvdC1sZXNzCitleHRlbnNpb25zLgorCitOZXcgZXh0ZW5zaW9ucyBzaG91bGQgYmUgcmVnaXN0ZXJlZCB3aXRoIEM8YWNjZXB0X2V4dGVuc2lvbnM+LgorCis9Y3V0CisKK3VzZSB2YXJzIHF3ICgkS05PV05fRVhURU5TSU9OU19QQVRURVJOIEBfa25vd25fZXh0ZW5zaW9uc19saXN0KTsKKyRLTk9XTl9FWFRFTlNJT05TX1BBVFRFUk4gPSAiIjsKK0Bfa25vd25fZXh0ZW5zaW9uc19saXN0ID0gKCk7CisKKz1iYWNrCisKKz1oZWFkMiBFcnJvciByZXBvcnRpbmcgZnVuY3Rpb25zCisKK0luIHRoZXNlIGZ1bmN0aW9ucywgQzwkcnVsZT4gY2FuIGJlIGVpdGhlciBhIHJ1bGUgbmFtZSwgb3IKK2FuIGluc3RhbmNlIG9mIEM8QXV0b21ha2U6OlJ1bGU+LgorCis9b3ZlciA0CisKKz1pdGVtIEM8ZXJyX3J1bGUgKCRydWxlLCAkbWVzc2FnZSwgWyVvcHRpb25zXSk+CisKK1VuY2F0ZWdvcml6ZWQgZXJyb3JzIGFib3V0IHJ1bGVzLgorCis9Y3V0CisKK3N1YiBlcnJfcnVsZSAoJCQ7JSkKK3sKKyAgbXNnX3J1bGUgKCdlcnJvcicsIEBfKTsKK30KKworPWl0ZW0gQzxlcnJfY29uZF9ydWxlICgkY29uZCwgJHJ1bGUsICRtZXNzYWdlLCBbJW9wdGlvbnNdKT4KKworVW5jYXRlZ29yaXplZCBlcnJvcnMgYWJvdXQgY29uZGl0aW9uYWwgcnVsZXMuCisKKz1jdXQKKworc3ViIGVycl9jb25kX3J1bGUgKCQkJDslKQoreworICBtc2dfY29uZF9ydWxlICgnZXJyb3InLCBAXyk7Cit9CisKKz1pdGVtIEM8bXNnX2NvbmRfcnVsZSAoJGNoYW5uZWwsICRjb25kLCAkcnVsZSwgJG1lc3NhZ2UsIFslb3B0aW9uc10pPgorCitNZXNzYWdlcyBhYm91dCBjb25kaXRpb25hbCBydWxlcy4KKworPWN1dAorCitzdWIgbXNnX2NvbmRfcnVsZSAoJCQkJDslKQoreworICBteSAoJGNoYW5uZWwsICRjb25kLCAkcnVsZSwgJG1zZywgJW9wdHMpID0gQF87CisgIG15ICRyID0gcmVmICgkcnVsZSkgPyAkcnVsZSA6IHJydWxlICgkcnVsZSk7CisgIG1zZyAkY2hhbm5lbCwgJHItPnJkZWYgKCRjb25kKS0+bG9jYXRpb24sICRtc2csICVvcHRzOworfQorCis9aXRlbSBDPG1zZ19ydWxlICgkY2hhbm5lbCwgJHRhcmdldG5hbWUsICRtZXNzYWdlLCBbJW9wdGlvbnNdKT4KKworTWVzc2FnZXMgYWJvdXQgcnVsZXMuCisKKz1jdXQKKworc3ViIG1zZ19ydWxlICgkJCQ7JSkKK3sKKyAgbXkgKCRjaGFubmVsLCAkcnVsZSwgJG1zZywgJW9wdHMpID0gQF87CisgIG15ICRyID0gcmVmICgkcnVsZSkgPyAkcnVsZSA6IHJydWxlICgkcnVsZSk7CisgICMgRG9uJ3Qga25vdyB3aGljaCBjb25kaXRpb24gaXMgY29uY2VybmVkLiAgUGljayBhbnkuCisgIG15ICRjb25kID0gJHItPmNvbmRpdGlvbnMtPm9uZV9jb25kOworICBtc2dfY29uZF9ydWxlICgkY2hhbm5lbCwgJGNvbmQsICRyLCAkbXNnLCAlb3B0cyk7Cit9CisKKworPWl0ZW0gQzwkYm9vbCA9IHJlamVjdF9ydWxlICgkcnVsZSwgJGVycm9yX21zZyk+CisKK0JhaWwgb3V0IHdpdGggQzwkZXJyb3JfbXNnPiBpZiBhIHJ1bGUgd2l0aCBuYW1lIEM8JHJ1bGU+IGhhcyBiZWVuCitkZWZpbmVkLgorCitSZXR1cm4gdHJ1ZSBpZmYgQzwkcnVsZT4gaXMgZGVmaW5lZC4KKworPWN1dAorCitzdWIgcmVqZWN0X3J1bGUgKCQkKQoreworICBteSAoJHJ1bGUsICRtc2cpID0gQF87CisgIGlmIChydWxlICgkcnVsZSkpCisgICAgeworICAgICAgZXJyX3J1bGUgJHJ1bGUsICRtc2c7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIHJldHVybiAwOworfQorCis9YmFjaworCis9aGVhZDIgQWRtaW5pc3RyYXRpdmUgZnVuY3Rpb25zCisKKz1vdmVyIDQKKworPWl0ZW0gQzxhY2NlcHRfZXh0ZW5zaW9ucyAoQGV4dHMpPgorCitVcGRhdGUgQzwkS05PV05fRVhURU5TSU9OU19QQVRURVJOPiB0byByZWNvZ25pemUgdGhlIGV4dGVuc2lvbnMKK2xpc3RlZCBDPEBleHRzPi4gIEV4dGVuc2lvbnMgc2hvdWxkIGNvbnRhaW4gYSBkb3QgaWYgbmVlZGVkLgorCis9Y3V0CisKK3N1YiBhY2NlcHRfZXh0ZW5zaW9ucyAoQCkKK3sKKyAgICBwdXNoIEBfa25vd25fZXh0ZW5zaW9uc19saXN0LCBAXzsKKyAgICAkS05PV05fRVhURU5TSU9OU19QQVRURVJOID0KKwknKD86JyAuIGpvaW4gKCd8JywgbWFwIChxdW90ZW1ldGEsIEBfa25vd25fZXh0ZW5zaW9uc19saXN0KSkgLiAnKSc7Cit9CisKKz1pdGVtIEM8cnVsZXM+CisKK1JldHVybiB0aGUgbGlzdCBvZiBhbGwgTDxBdXRvbWFrZTo6UnVsZT4gaW5zdGFuY2VzLiAgKEkuZS4sIGFsbAorcnVsZXMgZGVmaW5lZCBzbyBmYXIuKQorCis9Y3V0CisKK3VzZSB2YXJzICclX3J1bGVfZGljdCc7CitzdWIgcnVsZXMgKCkKK3sKKyAgcmV0dXJuIHZhbHVlcyAlX3J1bGVfZGljdDsKK30KKworCis9aXRlbSBDPHJlZ2lzdGVyX2FjdGlvbigkdGFyZ2V0LCAkYWN0aW9uKT4KKworQXBwZW5kIHRoZSBDPCRhY3Rpb24+IHRvIEM8JGFjdGlvbnN7JHRhcmdldH0+IHRha2luZyBjYXJlIG9mIHNwZWNpYWwKK2Nhc2VzLgorCis9Y3V0CisKK3N1YiByZWdpc3Rlcl9hY3Rpb24gKCQkKQoreworICBteSAoJHRhcmdldCwgJGFjdGlvbikgPSBAXzsKKyAgaWYgKCRhY3Rpb25zeyR0YXJnZXR9KQorICAgIHsKKyAgICAgICRhY3Rpb25zeyR0YXJnZXR9IC49ICJcbiRhY3Rpb24iIGlmICRhY3Rpb247CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgJGFjdGlvbnN7JHRhcmdldH0gPSAkYWN0aW9uOworICAgIH0KK30KKworCis9aXRlbSBDPEF1dG9tYWtlOjpSdWxlOjpyZXNldD4KKworVGhlIEk8Zm9yZ2V0IGFsbD4gZnVuY3Rpb24uICBDbGVhcnMgYWxsIGtub3cgcnVsZXMgYW5kIHJlc2V0IHNvbWUKK290aGVyIGludGVybmFsIGRhdGEuCisKKz1jdXQKKworc3ViIHJlc2V0KCkKK3sKKyAgJV9ydWxlX2RpY3QgPSAoKTsKKyAgQF9zdWZmaXhlcyA9ICgpOworICAjIFRoZSBmaXJzdCB0aW1lIHdlIGluaXRpYWxpemUgdGhlIHZhcmlhYmxlcywKKyAgIyB3ZSBzYXZlIHRoZSB2YWx1ZSBvZiAkc3VmZml4X3J1bGVzLgorICBpZiAoZGVmaW5lZCAkX3N1ZmZpeF9ydWxlc19kZWZhdWx0KQorICAgIHsKKyAgICAgICRzdWZmaXhfcnVsZXMgPSAkX3N1ZmZpeF9ydWxlc19kZWZhdWx0OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgICRfc3VmZml4X3J1bGVzX2RlZmF1bHQgPSAkc3VmZml4X3J1bGVzOworICAgIH0KKworICAlZGVwZW5kZW5jaWVzID0KKyAgICAoCisgICAgICMgVGV4aW5mb2luZy4KKyAgICAgJ2R2aScgICAgICA9PiBbXSwKKyAgICAgJ2R2aS1hbScgICA9PiBbXSwKKyAgICAgJ3BkZicgICAgICA9PiBbXSwKKyAgICAgJ3BkZi1hbScgICA9PiBbXSwKKyAgICAgJ3BzJyAgICAgICA9PiBbXSwKKyAgICAgJ3BzLWFtJyAgICA9PiBbXSwKKyAgICAgJ2luZm8nICAgICA9PiBbXSwKKyAgICAgJ2luZm8tYW0nICA9PiBbXSwKKyAgICAgJ2h0bWwnICAgICA9PiBbXSwKKyAgICAgJ2h0bWwtYW0nICA9PiBbXSwKKworICAgICAjIEluc3RhbGxpbmcvdW5pbnN0YWxsaW5nLgorICAgICAnaW5zdGFsbC1kYXRhLWFtJyAgICAgID0+IFtdLAorICAgICAnaW5zdGFsbC1leGVjLWFtJyAgICAgID0+IFtdLAorICAgICAndW5pbnN0YWxsLWFtJyAgICAgICAgID0+IFtdLAorCisgICAgICdpbnN0YWxsLW1hbicJICAgID0+IFtdLAorICAgICAndW5pbnN0YWxsLW1hbicJICAgID0+IFtdLAorCisgICAgICdpbnN0YWxsLWR2aScgICAgICAgICAgPT4gW10sCisgICAgICdpbnN0YWxsLWR2aS1hbScgICAgICAgPT4gW10sCisgICAgICdpbnN0YWxsLWh0bWwnICAgICAgICAgPT4gW10sCisgICAgICdpbnN0YWxsLWh0bWwtYW0nICAgICAgPT4gW10sCisgICAgICdpbnN0YWxsLWluZm8nICAgICAgICAgPT4gW10sCisgICAgICdpbnN0YWxsLWluZm8tYW0nICAgICAgPT4gW10sCisgICAgICdpbnN0YWxsLXBkZicgICAgICAgICAgPT4gW10sCisgICAgICdpbnN0YWxsLXBkZi1hbScgICAgICAgPT4gW10sCisgICAgICdpbnN0YWxsLXBzJyAgICAgICAgICAgPT4gW10sCisgICAgICdpbnN0YWxsLXBzLWFtJyAgICAgICAgPT4gW10sCisKKyAgICAgJ2luc3RhbGxjaGVjay1hbScgICAgICA9PiBbXSwKKworICAgICAjIENsZWFuaW5nLgorICAgICAnY2xlYW4tYW0nICAgICAgICAgICAgID0+IFtdLAorICAgICAnbW9zdGx5Y2xlYW4tYW0nICAgICAgID0+IFtdLAorICAgICAnbWFpbnRhaW5lci1jbGVhbi1hbScgID0+IFtdLAorICAgICAnZGlzdGNsZWFuLWFtJyAgICAgICAgID0+IFtdLAorICAgICAnY2xlYW4nICAgICAgICAgICAgICAgID0+IFtdLAorICAgICAnbW9zdGx5Y2xlYW4nICAgICAgICAgID0+IFtdLAorICAgICAnbWFpbnRhaW5lci1jbGVhbicgICAgID0+IFtdLAorICAgICAnZGlzdGNsZWFuJyAgICAgICAgICAgID0+IFtdLAorCisgICAgICMgVGFyYmFsbGluZy4KKyAgICAgJ2Rpc3QtYWxsJyAgICAgICAgICAgICA9PiBbXSwKKworICAgICAjIFBob25pbmcuCisgICAgICcuUEhPTlknICAgICAgICAgICAgICAgPT4gW10sCisgICAgICMgUmVjdXJzaXZlIGluc3RhbGwgdGFyZ2V0cyAoc28gYG1ha2UgLW4gaW5zdGFsbCcgd29ya3MgZm9yIEJTRCBNYWtlKS4KKyAgICAgJy5NQUtFJwkJICAgID0+IFtdLAorICAgICApOworICAlYWN0aW9ucyA9ICgpOworfQorCis9aXRlbSBDPHJlZ2lzdGVyX3N1ZmZpeF9ydWxlICgkd2hlcmUsICRzcmMsICRkZXN0KT4KKworUmVnaXN0ZXIgYSBzdWZmaXggcnVsZXMgZGVmaW5lZCBvbiBDPCR3aGVyZT4gdGhhdCB0cmFuc2Zvcm0KK2ZpbGVzIGVuZGluZyBpbiBDPCRzcmM+IGludG8gZmlsZXMgZW5kaW5nIGluIEM8JGRlc3Q+LgorCitUaGlzIHVwZ3JhZGVzIHRoZSBDPCRzdWZmaXhfcnVsZXM+IHZhcmlhYmxlcy4KKworPWN1dAorCitzdWIgcmVnaXN0ZXJfc3VmZml4X3J1bGUgKCQkJCkKK3sKKyAgbXkgKCR3aGVyZSwgJHNyYywgJGRlc3QpID0gQF87CisKKyAgdmVyYiAiU291cmNlcyBlbmRpbmcgaW4gJHNyYyBiZWNvbWUgJGRlc3QiOworICBwdXNoIEBfc3VmZml4ZXMsICRzcmMsICRkZXN0OworCisgICMgV2hlbiB0cmFuc2Zvcm1pbmcgc291cmNlcyB0byBvYmplY3RzLCBBdXRvbWFrZSB1c2VzIHRoZQorICAjICVzdWZmaXhfcnVsZXMgdG8gbW92ZSBmcm9tIGVhY2ggc291cmNlIGV4dGVuc2lvbiB0bworICAjIGAuJChPQkpFWFQpJywgbm90IHRvIGAubycgb3IgYC5vYmonLiAgSG93ZXZlciBzb21lIHBlb3BsZQorICAjIGRlZmluZSBzdWZmaXggcnVsZXMgZm9yIGAubycgb3IgYC5vYmonLCBzbyBpbnRlcm5hbGx5IHdlIHdpbGwKKyAgIyBjb25zaWRlciB0aGVzZSBleHRlbnNpb25zIGVxdWl2YWxlbnQgdG8gYC4kKE9CSkVYVCknLiAgV2UKKyAgIyBDQU5OT1QgcmV3cml0ZSB0aGUgdGFyZ2V0IChpLmUuLCBhdXRvbWFnaWNhbGx5IHJlcGxhY2UgYC5vJworICAjIGFuZCBgLm9iaicgYnkgYC4kKE9CSkVYVCknIGluIHRoZSBvdXRwdXQpLCBvciB3YXJuIHRoZSB1c2VyCisgICMgdGhhdCAocyloZSdkIGJldHRlciB1c2UgYC4kKE9CSkVYVCknLCBiZWNhdXNlIEF1dG9tYWtlIGl0c2VsZgorICAjIG91dHB1dCBzdWZmaXggcnVsZXMgZm9yIGAubycgb3IgYC5vYmonLi4uCisgICRkZXN0ID0gJy4kKE9CSkVYVCknIGlmICgkZGVzdCBlcSAnLm8nIHx8ICRkZXN0IGVxICcub2JqJyk7CisKKyAgIyBSZWFkaW5nIHRoZSBjb21tZW50cyBuZWFyIHRoZSBkZWNsYXJhdGlvbiBvZiAkc3VmZml4X3J1bGVzIG1pZ2h0CisgICMgaGVscCB0byB1bmRlcnN0YW5kIHRoZSB1cGRhdGUgb2YgJHN1ZmZpeF9ydWxlcyB0aGF0IGZvbGxvd3MuLi4KKworICAjIFJlZ2lzdGVyICRkZXN0IGFzIGEgcG9zc2libGUgZGVzdGluYXRpb24gZnJvbSAkc3JjLgorICAjIFdlIG1pZ2h0IGhhdmUgdGhlIGNyZWF0ZSB0aGUgXGhhc2guCisgIGlmIChleGlzdHMgJHN1ZmZpeF9ydWxlcy0+eyRzcmN9KQorICAgIHsKKyAgICAgICRzdWZmaXhfcnVsZXMtPnskc3JjfXskZGVzdH0gPSBbICRkZXN0LCAxIF07CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgJHN1ZmZpeF9ydWxlcy0+eyRzcmN9ID0geyAkZGVzdCA9PiBbICRkZXN0LCAxIF0gfTsKKyAgICB9CisKKyAgIyBJZiB3ZSBrbm93IGhvdyB0byB0cmFuc2Zvcm0gJGRlc3QgaW4gc29tZXRoaW5nIGVsc2UsIHRoZW4KKyAgIyB3ZSBrbm93IGhvdyB0byB0cmFuc2Zvcm0gJHNyYyBpbiB0aGF0ICJzb21ldGhpbmcgZWxzZSIuCisgIGlmIChleGlzdHMgJHN1ZmZpeF9ydWxlcy0+eyRkZXN0fSkKKyAgICB7CisgICAgICBmb3IgbXkgJGRlc3QyIChrZXlzICV7JHN1ZmZpeF9ydWxlcy0+eyRkZXN0fX0pCisJeworCSAgbXkgJGRpc3QgPSAkc3VmZml4X3J1bGVzLT57JGRlc3R9eyRkZXN0Mn1bMV0gKyAxOworCSAgIyBPdmVyd3JpdGUgYW4gZXhpc3RpbmcgJHNyYy0+JGRlc3QyIHBhdGggb25seSBpZgorCSAgIyB0aGUgcGF0aCB2aWEgJGRlc3Qgd2hpY2ggaXMgc2hvcnRlci4KKwkgIGlmICghIGV4aXN0cyAkc3VmZml4X3J1bGVzLT57JHNyY317JGRlc3QyfQorCSAgICAgIHx8ICRzdWZmaXhfcnVsZXMtPnskc3JjfXskZGVzdDJ9WzFdID4gJGRpc3QpCisJICAgIHsKKwkgICAgICAkc3VmZml4X3J1bGVzLT57JHNyY317JGRlc3QyfSA9IFsgJGRlc3QsICRkaXN0IF07CisJICAgIH0KKwl9CisgICAgfQorCisgICMgU2ltaWxhcmx5LCBhbnkgZXh0ZW5zaW9uIHRoYXQgY2FuIGJlIGRlcml2ZWQgaW50byAkc3JjCisgICMgY2FuIGJlIGRlcml2ZWQgaW50byB0aGUgc2FtZSBleHRlbnNpb25zIGFzICRzcmMgY2FuLgorICBteSBAZGVzdDIgPSBrZXlzICV7JHN1ZmZpeF9ydWxlcy0+eyRzcmN9fTsKKyAgZm9yIG15ICRzcmMyIChrZXlzICUkc3VmZml4X3J1bGVzKQorICAgIHsKKyAgICAgIGlmIChleGlzdHMgJHN1ZmZpeF9ydWxlcy0+eyRzcmMyfXskc3JjfSkKKwl7CisJICBmb3IgbXkgJGRlc3QyIChAZGVzdDIpCisJICAgIHsKKwkgICAgICBteSAkZGlzdCA9ICRzdWZmaXhfcnVsZXMtPnskc3JjfXskZGVzdDJ9ICsgMTsKKwkgICAgICAjIE92ZXJ3cml0ZSBhbiBleGlzdGluZyAkc3JjMi0+JGRlc3QyIHBhdGggb25seSBpZgorCSAgICAgICMgdGhlIHBhdGggdmlhICRzcmMgaXMgc2hvcnRlci4KKwkgICAgICBpZiAoISBleGlzdHMgJHN1ZmZpeF9ydWxlcy0+eyRzcmMyfXskZGVzdDJ9CisJCSAgfHwgJHN1ZmZpeF9ydWxlcy0+eyRzcmMyfXskZGVzdDJ9WzFdID4gJGRpc3QpCisJCXsKKwkJICAkc3VmZml4X3J1bGVzLT57JHNyYzJ9eyRkZXN0Mn0gPSBbICRzcmMsICRkaXN0IF07CisJCX0KKwkgICAgfQorCX0KKyAgICB9Cit9CisKKz1pdGVtIEM8JGNvdW50ID0gc3VmZml4X3J1bGVzX2NvdW50PgorCitSZXR1cm4gdGhlIG51bWJlciBvZiBzdWZmaXggcnVsZXMgYWRkZWQgd2hpbGUgcHJvY2Vzc2luZyB0aGUgY3VycmVudAorRjxNYWtlZmlsZT4gKGV4Y2x1ZGluZyBwcmVkZWZpbmVkIHN1ZmZpeCBydWxlcykuCisKKz1jdXQKKworc3ViIHN1ZmZpeF9ydWxlc19jb3VudCAoKQoreworICByZXR1cm4gKHNjYWxhciBrZXlzICUkc3VmZml4X3J1bGVzKSAtIChzY2FsYXIga2V5cyAlJF9zdWZmaXhfcnVsZXNfZGVmYXVsdCk7Cit9CisKKz1pdGVtIEM8QGxpc3QgPSBzdWZmaXhlcz4KKworUmV0dXJuIHRoZSBsaXN0IG9mIGtub3duIHN1ZmZpeGVzLgorCis9Y3V0CisKK3N1YiBzdWZmaXhlcyAoKQoreworICByZXR1cm4gQF9zdWZmaXhlczsKK30KKworPWl0ZW0gQzxydWxlICgkcnVsZW5hbWUpPgorCitSZXR1cm4gdGhlIEM8QXV0b21ha2U6OlJ1bGU+IG9iamVjdCBmb3IgdGhlIHJ1bGUKK25hbWVkIEM8JHJ1bGVuYW1lPiBpZiBkZWZpbmVkLiAgIFJldHVybiAwIG90aGVyd2lzZS4KKworPWN1dAorCitzdWIgcnVsZSAoJCkKK3sKKyAgbXkgKCRuYW1lKSA9IEBfOworICAjIFN0cmlwICQoRVhFRVhUKSBmcm9tICRuYW1lLCBzbyB3ZSBjYW4gZGlhZ25vc2UKKyAgIyBhIGNsYXNoIGlmIGBjdGFncyQoRVhFRVhUKTonIGlzIHJlZGVmaW5lZCBhZnRlciBgY3RhZ3M6Jy4KKyAgJG5hbWUgPX4gcyxcJFwoRVhFRVhUXCkkLCw7CisgIHJldHVybiAkX3J1bGVfZGljdHskbmFtZX0gfHwgMDsKK30KKworPWl0ZW0gQzxydWxlZGVmICgkcnVsZW5hbWUsICRjb25kKT4KKworUmV0dXJuIHRoZSBDPEF1dG9tYWtlOjpSdWxlRGVmPiBvYmplY3QgZm9yIHRoZSBydWxlIG5hbWVkCitDPCRydWxlbmFtZT4gaWYgZGVmaW5lZCBpbiBjb25kaXRpb24gQzwkY29uZD4uICBSZXR1cm4gZmFsc2UKK2lmIHRoZSBjb25kaXRpb24gb3IgdGhlIHJ1bGUgZG9lcyBub3QgZXhpc3QuCisKKz1jdXQKKworc3ViIHJ1bGVkZWYgKCQkKQoreworICBteSAoJG5hbWUsICRjb25kKSA9IEBfOworICBteSAkcnVsZSA9IHJ1bGUgJG5hbWU7CisgIHJldHVybiAkcnVsZSAmJiAkcnVsZS0+ZGVmICgkY29uZCk7Cit9CisKKz1pdGVtIEM8cnJ1bGUgKCRydWxlbmFtZSkKKworUmV0dXJuIHRoZSBDPEF1dG9tYWtlOjpSdWxlPiBvYmplY3QgZm9yIHRoZSB2YXJpYWJsZSBuYW1lZAorQzwkcnVsZW5hbWU+LiAgQWJvcnQgd2l0aCBhbiBpbnRlcm5hbCBlcnJvciBpZiB0aGUgdmFyaWFibGUgd2FzIG5vdAorZGVmaW5lZC4KKworVGhlIEk8cj4gaW4gZnJvbnQgb2YgQzx2YXI+IHN0YW5kcyBmb3IgSTxyZXF1aXJlZD4uICBPbmUKK3Nob3VsZCBjYWxsIEM8cnZhcj4gdG8gYXNzZXJ0IHRoZSBydWxlJ3MgZXhpc3RlbmNlLgorCis9Y3V0CisKK3N1YiBycnVsZSAoJCkKK3sKKyAgbXkgKCRuYW1lKSA9IEBfOworICBteSAkciA9IHJ1bGUgJG5hbWU7CisgIHByb2dfZXJyb3IgKCJ1bmRlZmluZWQgcnVsZSAkbmFtZVxuIiAuICZydWxlc19kdW1wKQorICAgIHVubGVzcyAkcjsKKyAgcmV0dXJuICRyOworfQorCis9aXRlbSBDPHJydWxlZGVmICgkdmFybmFtZSwgJGNvbmQpPgorCitSZXR1cm4gdGhlIEM8QXV0b21ha2U6OlJ1bGVEZWY+IG9iamVjdCBmb3IgdGhlIHJ1bGUgbmFtZWQKK0M8JHJ1bGVuYW1lPiBpZiBkZWZpbmVkIGluIGNvbmRpdGlvbiBDPCRjb25kPi4gIEFib3J0IHdpdGggYW4gaW50ZXJuYWwKK2Vycm9yIGlmIHRoZSBjb25kaXRpb24gb3IgdGhlIHJ1bGUgZG9lcyBub3QgZXhpc3QuCisKKz1jdXQKKworc3ViIHJydWxlZGVmICgkJCkKK3sKKyAgbXkgKCRuYW1lLCAkY29uZCkgPSBAXzsKKyAgcmV0dXJuIHJydWxlICgkbmFtZSktPnJkZWYgKCRjb25kKTsKK30KKworIyBDcmVhdGUgdGhlIHZhcmlhYmxlIGlmIGl0IGRvZXMgbm90IGV4aXN0LgorIyBUaGlzIGlzIHVzZWQgb25seSBieSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBwYWNrYWdlLgorc3ViIF9jcnVsZSAoJCkKK3sKKyAgbXkgKCRuYW1lKSA9IEBfOworICBteSAkciA9IHJ1bGUgJG5hbWU7CisgIHJldHVybiAkciBpZiAkcjsKKyAgcmV0dXJuIF9uZXcgQXV0b21ha2U6OlJ1bGUgJG5hbWU7Cit9CisKK3N1YiBfbmV3ICgkJCkKK3sKKyAgbXkgKCRjbGFzcywgJG5hbWUpID0gQF87CisKKyAgIyBTdHJpcCAkKEVYRUVYVCkgZnJvbSAkbmFtZSwgc28gd2UgY2FuIGRpYWdub3NlCisgICMgYSBjbGFzaCBpZiBgY3RhZ3MkKEVYRUVYVCk6JyBpcyByZWRlZmluZWQgYWZ0ZXIgYGN0YWdzOicuCisgIChteSAka2V5bmFtZSA9ICRuYW1lKSA9fiBzLFwkXChFWEVFWFRcKSQsLDsKKworICBteSAkc2VsZiA9IEF1dG9tYWtlOjpJdGVtOjpuZXcgKCRjbGFzcywgJG5hbWUpOworICAkX3J1bGVfZGljdHska2V5bmFtZX0gPSAkc2VsZjsKKyAgcmV0dXJuICRzZWxmOworfQorCisKKz1pdGVtIEM8QGNvbmRzID0gZGVmaW5lICgkcnVsZW5hbWUsICRzb3VyY2UsICRvd25lciwgJGNvbmQsICR3aGVyZSk+CisKK0RlZmluZSBhIG5ldyBydWxlLiAgQzwkcnVsZW5hbWU+IGlzIHRoZSBsaXN0IG9mIHRhcmdldHMuICBDPCRzb3VyY2U+CitpcyB0aGUgZmlsZW5hbWUgdGhlIHJ1bGUgY29tZXMgZnJvbS4gIEM8JG93bmVyPiBpcyB0aGUgb3duZXIgb2YgdGhlCitydWxlIChDPFJVTEVfQVVUT01BS0U+IG9yIEM8UlVMRV9VU0VSPikuICBDPCRjb25kPiBpcyB0aGUKK0M8QXV0b21ha2U6OkNvbmRpdGlvbj4gdW5kZXIgd2hpY2ggdGhlIHJ1bGUgaXMgZGVmaW5lZC4gIEM8JHdoZXJlPiBpcwordGhlIEM8QXV0b21ha2U6OkxvY2F0aW9uPiB3aGVyZSB0aGUgcnVsZSBpcyBkZWZpbmVkLgorCitSZXR1cm5zIGEgKHBvc3NpYmx5IGVtcHR5KSBsaXN0IG9mIEM8QXV0b21ha2U6OkNvbmRpdGlvbj5zIHdoZXJlIHRoZQorcnVsZSdzIGRlZmluaXRpb24gc2hvdWxkIGJlIG91dHB1dC4KKworPWN1dAorCitzdWIgZGVmaW5lICgkJCQkJCkKK3sKKyAgbXkgKCR0YXJnZXQsICRzb3VyY2UsICRvd25lciwgJGNvbmQsICR3aGVyZSkgPSBAXzsKKworICBwcm9nX2Vycm9yICIkd2hlcmUgaXMgbm90IGEgcmVmZXJlbmNlIgorICAgIHVubGVzcyByZWYgJHdoZXJlOworICBwcm9nX2Vycm9yICIkY29uZCBpcyBub3QgYSByZWZlcmVuY2UiCisgICAgdW5sZXNzIHJlZiAkY29uZDsKKworICAjIERvbid0IGV2ZW4gdGhpbmsgYWJvdXQgZGVmaW5pbmcgYSBydWxlIGluIGNvbmRpdGlvbiBGQUxTRS4KKyAgcmV0dXJuICgpIGlmICRjb25kID09IEZBTFNFOworCisgICMgRm9yIG5vdyBgZm9vOicgd2lsbCBvdmVycmlkZSBgZm9vJChFWEVFWFQpOicuICBUaGlzIGlzIHRlbXBvcmFyeSwKKyAgIyB0aG91Z2gsIHNvIHdlIGVtaXQgYSB3YXJuaW5nLgorICAobXkgJG5vZXhlID0gJHRhcmdldCkgPX4gcyxcJFwoRVhFRVhUXCkkLCw7CisgIG15ICRub2V4ZXJ1bGUgPSBydWxlICRub2V4ZTsKKyAgbXkgJHRkZWYgPSAkbm9leGVydWxlID8gJG5vZXhlcnVsZS0+ZGVmICgkY29uZCkgOiB1bmRlZjsKKworICBpZiAoJG5vZXhlIG5lICR0YXJnZXQKKyAgICAgICYmICR0ZGVmCisgICAgICAmJiAkbm9leGVydWxlLT5uYW1lIG5lICR0YXJnZXQpCisgICAgeworICAgICAgIyBUaGUgbm8tZXhlZXh0IG9wdGlvbiBlbmFibGVzIHRoaXMgZmVhdHVyZS4KKyAgICAgIGlmICghIG9wdGlvbiAnbm8tZXhlZXh0JykKKwl7CisJICBtc2cgKCdvYnNvbGV0ZScsICR0ZGVmLT5sb2NhdGlvbiwKKwkgICAgICAgImRlcHJlY2F0ZWQgZmVhdHVyZTogdGFyZ2V0IGAkbm9leGUnIG92ZXJyaWRlcyAiCisJICAgICAgIC4gImAkbm9leGVcJChFWEVFWFQpJ1xuIgorCSAgICAgICAuICJjaGFuZ2UgeW91ciB0YXJnZXQgdG8gcmVhZCBgJG5vZXhlXCQoRVhFRVhUKSciKTsKKwkgIG1zZyAoJ29ic29sZXRlJywgJHdoZXJlLCAidGFyZ2V0IGAkdGFyZ2V0JyB3YXMgZGVmaW5lZCBoZXJlIik7CisJfQorICAgICAgIyBEb24ndCBgcmV0dXJuICgpJyBub3csIGFzIHRoaXMgbWlnaHQgaGlkZSB0YXJnZXQgY2xhc2hlcworICAgICAgIyBkZXRlY3RlZCBiZWxvdy4KKyAgICB9CisKKworICAjIEEgR05VIG1ha2Utc3R5bGUgcGF0dGVybiBydWxlIGhhcyBhIHNpbmdsZSAiJSIgaW4gdGhlIHRhcmdldCBuYW1lLgorICBtc2cgKCdwb3J0YWJpbGl0eScsICR3aGVyZSwKKyAgICAgICAiYCUnLXN0eWxlIHBhdHRlcm4gcnVsZXMgYXJlIGEgR05VIG1ha2UgZXh0ZW5zaW9uIikKKyAgICBpZiAkdGFyZ2V0ID1+IC9eW14lXSolW14lXSokLzsKKworICAjIERpYWdub3NlIHRhcmdldCByZWRlZmluaXRpb25zLgorICBpZiAoJHRkZWYpCisgICAgeworICAgICAgbXkgJG9sZG93bmVyICA9ICR0ZGVmLT5vd25lcjsKKyAgICAgICMgT2ssIGl0J3MgdGhlIG5hbWUgdGFyZ2V0LCBidXQgdGhlIG5hbWUgbWF5YmUgZGlmZmVyZW50IGJlY2F1c2UKKyAgICAgICMgYGZvbyQoRVhFRVhUKScgYW5kIGBmb28nIGhhdmUgdGhlIHNhbWUga2V5IGluIG91ciB0YWJsZS4KKyAgICAgIG15ICRvbGRuYW1lID0gJHRkZWYtPm5hbWU7CisKKyAgICAgICMgRG9uJ3QgbWVudGlvbiB0cnVlIGNvbmRpdGlvbnMgaW4gZGlhZ25vc3RpY3MuCisgICAgICBteSAkY29uZG1zZyA9CisJJGNvbmQgPT0gVFJVRSA/ICcnIDogIiBpbiBjb25kaXRpb24gYCIgLiAkY29uZC0+aHVtYW4gLiAiJyI7CisKKyAgICAgIGlmICgkb3duZXIgPT0gUlVMRV9VU0VSKQorCXsKKwkgIGlmICgkb2xkb3duZXIgPT0gUlVMRV9VU0VSKQorCSAgICB7CisJICAgICAgIyBJZ25vcmUgYCUnLXN0eWxlIHBhdHRlcm4gcnVsZXMuICBXZSdkIG5lZWQgdGhlCisJICAgICAgIyBkZXBlbmRlbmNpZXMgdG8gZGV0ZWN0IGR1cGxpY2F0ZXMsIGFuZCB0aGV5IGFyZQorCSAgICAgICMgYWxyZWFkeSBkaWFnbm9zZWQgYXMgdW5wb3J0YWJsZSBieSAtV3BvcnRhYmlsaXR5LgorCSAgICAgIGlmICgkdGFyZ2V0ICF+IC9eW14lXSolW14lXSokLykKKwkJeworCQkgICMjIEZJWE1FOiBQcmVzZW50bHkgd2UgY2FuJ3QgZGlhZ25vc2UgZHVwbGljYXRlIHVzZXIgcnVsZXMKKwkJICAjIyBiZWNhdXNlIHdlIGRvbid0IGRpc3Rpbmd1aXNoIHJ1bGVzIHdpdGggY29tbWFuZHMKKwkJICAjIyBmcm9tIHJ1bGVzIHRoYXQgb25seSBhZGQgZGVwZW5kZW5jaWVzLiAgRS5nLiwKKwkJICAjIyAgIC5QSE9OWTogZm9vCisJCSAgIyMgICAuUEhPTlk6IGJhcgorCQkgICMjIGlzIGxlZ2l0aW1hdGUuIChUaGlzIGlzIHBob255LnRlc3QuKQorCisJCSAgIyBtc2cgKCdzeW50YXgnLCAkd2hlcmUsCisJCSAgIyAgICAgICJyZWRlZmluaXRpb24gb2YgYCR0YXJnZXQnJGNvbmRtc2cuLi4iLCBwYXJ0aWFsID0+IDEpOworCQkgICMgbXNnX2NvbmRfcnVsZSAoJ3N5bnRheCcsICRjb25kLCAkdGFyZ2V0LAorCQkgICMJCSAgICIuLi4gYCR0YXJnZXQnIHByZXZpb3VzbHkgZGVmaW5lZCBoZXJlIik7CisJCX0KKwkgICAgICAjIFJldHVybiBzbyB3ZSBkb24ndCByZWRlZmluZSB0aGUgcnVsZSBpbiBvdXIgdGFibGVzLAorCSAgICAgICMgZG9uJ3QgY2hlY2sgZm9yIGFtYmlndW91cyBjb25kaXRpb24sIGV0Yy4gIFRoZSBydWxlCisJICAgICAgIyB3aWxsIGJlIG91dHB1dCBhbnl3YXkgYmVjYXVzZSAmcmVhZF9hbV9maWxlIGlnbm9yZSB0aGUKKwkgICAgICAjIHJldHVybiBjb2RlLgorCSAgICAgIHJldHVybiAoKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgIyBTaW5jZSB3ZSBwYXJzZSB0aGUgdXNlciBNYWtlZmlsZS5hbSBiZWZvcmUgcmVhZGluZworCSAgICAgICMgdGhlIEF1dG9tYWtlIGZyYWdtZW50cywgdGhpcyBjb25kaXRpb24gc2hvdWxkIG5ldmVyIGhhcHBlbi4KKwkgICAgICBwcm9nX2Vycm9yICgidXNlciB0YXJnZXQgYCR0YXJnZXQnJGNvbmRtc2cgc2VlbiBhZnRlciBBdXRvbWFrZSdzIgorCQkJICAuICIgZGVmaW5pdGlvblxuZnJvbSAiIC4gJHRkZWYtPnNvdXJjZSk7CisJICAgIH0KKwl9CisgICAgICBlbHNlICMgJG93bmVyID09IFJVTEVfQVVUT01BS0UKKwl7CisJICBpZiAoJG9sZG93bmVyID09IFJVTEVfVVNFUikKKwkgICAgeworCSAgICAgICMgLWFtIHRhcmdldHMgbGlzdGVkIGluICVkZXBlbmRlbmNpZXMgc3VwcG9ydCBhIC1sb2NhbAorCSAgICAgICMgdmFyaWFudC4gIElmIHRoZSB1c2VyIHRyaWVzIHRvIG92ZXJyaWRlIFRBUkdFVCBvcgorCSAgICAgICMgVEFSR0VULWFtIGZvciB3aGljaCB0aGVyZSBleGlzdHMgYSAtbG9jYWwgdmFyaWFudCwKKwkgICAgICAjIGp1c3QgdGVsbCB0aGUgdXNlciB0byB1c2UgaXQuCisJICAgICAgbXkgJGhpbnQgPSAwOworCSAgICAgIG15ICRub2FtID0gJHRhcmdldDsKKwkgICAgICAkbm9hbSA9fiBzLy1hbSQvLzsKKwkgICAgICBpZiAoZXhpc3RzICRkZXBlbmRlbmNpZXN7IiRub2FtLWFtIn0pCisJCXsKKwkJICAkaGludCA9ICJjb25zaWRlciB1c2luZyAkbm9hbS1sb2NhbCBpbnN0ZWFkIG9mICR0YXJnZXQiOworCQl9CisKKwkgICAgICBtc2dfY29uZF9ydWxlICgnb3ZlcnJpZGUnLCAkY29uZCwgJHRhcmdldCwKKwkJCSAgICAgInVzZXIgdGFyZ2V0IGAkdGFyZ2V0JyBkZWZpbmVkIGhlcmUiCisJCQkgICAgIC4gIiRjb25kbXNnLi4uIiwgcGFydGlhbCA9PiAxKTsKKwkgICAgICBtc2cgKCdvdmVycmlkZScsICR3aGVyZSwKKwkJICAgIi4uLiBvdmVycmlkZXMgQXV0b21ha2UgdGFyZ2V0IGAkb2xkbmFtZScgZGVmaW5lZCBoZXJlIiwKKwkJICAgcGFydGlhbCA9PiAkaGludCk7CisJICAgICAgbXNnX2NvbmRfcnVsZSAoJ292ZXJyaWRlJywgJGNvbmQsICR0YXJnZXQsICRoaW50KQorCQlpZiAkaGludDsKKworCSAgICAgICMgRG9uJ3Qgb3ZlcndyaXRlIHRoZSB1c2VyIGRlZmluaXRpb24gb2YgVEFSR0VULgorCSAgICAgIHJldHVybiAoKTsKKwkgICAgfQorCSAgZWxzZSAjICRvbGRvd25lciA9PSBSVUxFX0FVVE9NQUtFCisJICAgIHsKKwkgICAgICAjIEF1dG9tYWtlIHNob3VsZCBpZ25vcmUgcmVkZWZpbml0aW9ucyBvZiBpdHMgb3duCisJICAgICAgIyBydWxlcyBpZiB0aGV5IGNhbWUgZnJvbSB0aGUgc2FtZSBmaWxlLiAgVGhpcyBtYWtlcworCSAgICAgICMgaXQgZWFzaWVyIHRvIHByb2Nlc3MgYSBNYWtlZmlsZSBmcmFnbWVudCBzZXZlcmFsIHRpbWVzLgorCSAgICAgICMgSG93ZXZlciBpdCdzIGFuIGVycm9yIGlmIHRoZSB0YXJnZXQgaXMgZGVmaW5lZCBpbiBtYW55CisJICAgICAgIyBmaWxlcy4gIEUuZy4sIHRoZSB1c2VyIG1pZ2h0IGJlIHVzaW5nIGJpbl9QUk9HUkFNUyA9IGN0YWdzCisJICAgICAgIyB3aGljaCBjbGFzaGVzIHdpdGggb3VyIGBjdGFncycgcnVsZS4KKwkgICAgICAjIChJdCB3b3VsZCBiZSBtb3JlIGFjY3VyYXRlIGlmIHdlIGhhZCBhIHdheSB0byBjb21wYXJlCisJICAgICAgIyB0aGUgKmNvbnRlbnQqIG9mIGJvdGggcnVsZXMuICBUaGVuICR0YXJnZXRzX3NvdXJjZSB3b3VsZAorCSAgICAgICMgYmUgdXNlbGVzcy4pCisJICAgICAgbXkgJG9sZHNvdXJjZSA9ICR0ZGVmLT5zb3VyY2U7CisJICAgICAgcmV0dXJuICgpIGlmICRzb3VyY2UgZXEgJG9sZHNvdXJjZSAmJiAkdGFyZ2V0IGVxICRvbGRuYW1lOworCisJICAgICAgbXNnICgnc3ludGF4JywgJHdoZXJlLCAicmVkZWZpbml0aW9uIG9mIGAkdGFyZ2V0JyRjb25kbXNnLi4uIiwKKwkJICAgcGFydGlhbCA9PiAxKTsKKwkgICAgICBtc2dfY29uZF9ydWxlICgnc3ludGF4JywgJGNvbmQsICR0YXJnZXQsCisJCQkgICAgICIuLi4gYCRvbGRuYW1lJyBwcmV2aW91c2x5IGRlZmluZWQgaGVyZSIpOworCSAgICAgIHJldHVybiAoKTsKKwkgICAgfQorCX0KKyAgICAgICMgTmV2ZXIgcmVhY2hlZC4KKyAgICAgIHByb2dfZXJyb3IgKCJVbnJlYWNoYWJsZSBwbGFjZSByZWFjaGVkLiIpOworICAgIH0KKworICAjIENvbmRpdGlvbnMgZm9yIHdoaWNoIHRoZSBydWxlIHNob3VsZCBiZSBkZWZpbmVkLgorICBteSBAY29uZHMgPSAkY29uZDsKKworICAjIENoZWNrIGFtYmlndW91cyBjb25kaXRpb25hbCBkZWZpbml0aW9ucy4KKyAgbXkgJHJ1bGUgPSBfY3J1bGUgJHRhcmdldDsKKyAgbXkgKCRtZXNzYWdlLCAkYW1iaWdfY29uZCkgPSAkcnVsZS0+Y29uZGl0aW9ucy0+YW1iaWd1b3VzX3AgKCR0YXJnZXQsICRjb25kKTsKKyAgaWYgKCRtZXNzYWdlKQkJCSMgV2UgaGF2ZSBhbiBhbWJpZ3VpdHkuCisgICAgeworICAgICAgaWYgKCRvd25lciA9PSBSVUxFX1VTRVIpCisJeworCSAgIyBGb3IgdXNlciBydWxlcywganVzdCBkaWFnbm9zZSB0aGUgYW1iaWd1aXR5LgorCSAgbXNnICdzeW50YXgnLCAkd2hlcmUsICIkbWVzc2FnZSAuLi4iLCBwYXJ0aWFsID0+IDE7CisJICBtc2dfY29uZF9ydWxlICgnc3ludGF4JywgJGFtYmlnX2NvbmQsICR0YXJnZXQsCisJCQkgIi4uLiBgJHRhcmdldCcgcHJldmlvdXNseSBkZWZpbmVkIGhlcmUiKTsKKwkgIHJldHVybiAoKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgIyBGSVhNRTogZm9yIEF1dG9tYWtlIHJ1bGVzLCB3ZSBjYW4ndCBkaWFnbm9zZSBhbWJpZ3VpdGllcyB5ZXQuCisJICAjIFRoZSBwb2ludCBpcyB0aGF0IEF1dG9tYWtlIGRvZXNuJ3QgcHJvcGFnYXRlIGNvbmRpdGlvbnMKKwkgICMgZXZlcnl3aGVyZS4gIEZvciBpbnN0YW5jZSAmaGFuZGxlX1BST0dSQU1TIGRvZXNuJ3QgY2FyZSBpZgorCSAgIyBiaW5fUFJPR1JBTVMgd2FzIGRlZmluZWQgY29uZGl0aW9uYWxseSBvciBub3QuCisJICAjIE9uIHRoZSBmb2xsb3dpbmcgaW5wdXQKKwkgICMgICBpZiBDT05EMQorCSAgIyAgIGZvbzoKKwkgICMgICAgICAgICAgIC4uLgorCSAgIyAgIGVsc2UKKwkgICMgICBiaW5fUFJPR1JBTVMgPSBmb28KKwkgICMgICBlbmRpZgorCSAgIyAmaGFuZGxlX1BST0dSQU1TIHdpbGwgYXR0ZW1wdCB0byBkZWZpbmUgYSBgZm9vOicgcnVsZQorCSAgIyBpbiBjb25kaXRpb24gVFJVRSAod2hpY2ggY29uZmxpY3RzIHdpdGggQ09ORDEpLiAgRml4aW5nCisJICAjIHRoaXMgaW4gJmhhbmRsZV9QUk9HUkFNUyBhbmQgc2libGluZ3Mgc2VlbXMgaGFyZDogeW91J2QKKwkgICMgaGF2ZSB0byBleHBsYWluICZmaWxlX2NvbnRlbnRzIHdoYXQgdG8gZG8gd2l0aCBhCisJICAjIGNvbmRpdGlvbi4gIFNvIGZvciBub3cgd2UgZG8gb3VyIGJlc3QgKmhlcmUqLiAgSWYgYGZvbzonCisJICAjIHdhcyBhbHJlYWR5IGRlZmluZWQgaW4gY29uZGl0aW9uIENPTkQxIGFuZCB3ZSB3YW50IHRvIGRlZmluZQorCSAgIyBpdCBpbiBjb25kaXRpb24gVFJVRSwgdGhlbiBkZWZpbmUgaXQgb25seSBpbiBjb25kaXRpb24gIUNPTkQxLgorCSAgIyAoU2VlIGNvbmQxNC50ZXN0IGFuZCBjb25kMTUudGVzdCBmb3Igc29tZSB0ZXN0IGNhc2VzLikKKwkgIEBjb25kcyA9ICRydWxlLT5ub3RfYWx3YXlzX2RlZmluZWRfaW5fY29uZCAoJGNvbmQpLT5jb25kczsKKworCSAgIyBObyBjb25kaXRpb25zIGxlZnQgdG8gZGVmaW5lIHRoZSBydWxlLgorCSAgIyBXYXJuLCBiZWNhdXNlIG91ciB3b3JrYXJvdW5kIGlzIG1lYW5pbmdsZXNzIGluIHRoaXMgY2FzZS4KKwkgIGlmIChzY2FsYXIgQGNvbmRzID09IDApCisJICAgIHsKKwkgICAgICBtc2cgJ3N5bnRheCcsICR3aGVyZSwgIiRtZXNzYWdlIC4uLiIsIHBhcnRpYWwgPT4gMTsKKwkgICAgICBtc2dfY29uZF9ydWxlICgnc3ludGF4JywgJGFtYmlnX2NvbmQsICR0YXJnZXQsCisJCQkgICAgICIuLi4gYCR0YXJnZXQnIHByZXZpb3VzbHkgZGVmaW5lZCBoZXJlIik7CisJICAgICAgcmV0dXJuICgpOworCSAgICB9CisJfQorICAgIH0KKworICAjIEZpbmFsbHkgZGVmaW5lIHRoaXMgcnVsZS4KKyAgZm9yIG15ICRjIChAY29uZHMpCisgICAgeworICAgICAgbXkgJGRlZiA9IG5ldyBBdXRvbWFrZTo6UnVsZURlZiAoJHRhcmdldCwgJycsICR3aGVyZS0+Y2xvbmUsCisJCQkJICAgICAgICRvd25lciwgJHNvdXJjZSk7CisgICAgICAkcnVsZS0+c2V0ICgkYywgJGRlZik7CisgICAgfQorCisgICMgV2UgaG9ub3IgaW5mZXJlbmNlIHJ1bGVzIHdpdGggbXVsdGlwbGUgdGFyZ2V0cyBiZWNhdXNlIG1hbnkKKyAgIyBtYWtlIHN1cHBvcnQgdGhpcyBhbmQgcGVvcGxlIHVzZSBpdC4gIEhvd2V2ZXIgdGhpcyBpcyBkaXNhbGxvd2VkCisgICMgYnkgUE9TSVguICBXZSdsbCBwcmludCBhIHdhcm5pbmcgbGF0ZXIuCisgIG15ICR0YXJnZXRfY291bnQgPSAwOworICBteSAkaW5mZXJlbmNlX3J1bGVfY291bnQgPSAwOworCisgIGZvciBteSAkdCAoc3BsaXQgKCcgJywgJHRhcmdldCkpCisgICAgeworICAgICAgKyskdGFyZ2V0X2NvdW50OworICAgICAgIyBDaGVjayBpZiB0aGUgcnVsZSBpcyBhIHN1ZmZpeCBydWxlOiBlaXRoZXIgaXQncyBhIHJ1bGUgZm9yCisgICAgICAjIHR3byBrbm93biBleHRlbnNpb25zLi4uCisgICAgICBpZiAoJHQgPX4gL14oJEtOT1dOX0VYVEVOU0lPTlNfUEFUVEVSTikoJEtOT1dOX0VYVEVOU0lPTlNfUEFUVEVSTikkLworCSAgIyAuLi5vciBpdCdzIGEgcnVsZSB3aXRoIHVua25vd24gZXh0ZW5zaW9ucyAoaS5lLiwgdGhlIHJ1bGUKKwkgICMgbG9va3MgbGlrZSBgLmZvby5iYXI6JyBidXQgYC5mb28nIG9yIGAuYmFyJyBhcmUgbm90CisJICAjIGRlY2xhcmVkIGluIFNVRkZJWEVTIGFuZCBhcmUgbm90IGtub3duIGxhbmd1YWdlCisJICAjIGV4dGVuc2lvbnMpLiAgQXV0b21ha2Ugd2lsbCBjb21wbGV0ZSBTVUZGSVhFUyBmcm9tCisJICAjIEBzdWZmaXhlcyBhdXRvbWF0aWNhbGx5IChzZWUgaGFuZGxlX2Zvb3RlcikuCisKKworCSAgfHwgKCR0ID1+IC8kX1NVRkZJWF9SVUxFX1BBVFRFUk4vbyAmJiBhY2NlcHRfZXh0ZW5zaW9ucygkMSkpKQorCXsKKwkgICsrJGluZmVyZW5jZV9ydWxlX2NvdW50OworCSAgcmVnaXN0ZXJfc3VmZml4X3J1bGUgKCR3aGVyZSwgJDEsICQyKTsKKwl9CisgICAgfQorCisgICMgUE9TSVggYWxsb3dzIG11bHRpcGxlIHRhcmdldHMgYmVmb3JlIHRoZSBjb2xvbiwgYnV0IGRpc2FsbG93cworICAjIGRlZmluaXRpb25zIG9mIG11bHRpcGxlIGluZmVyZW5jZSBydWxlcy4gIEl0J3MgYWxzbworICAjIGRpc2FsbG93ZWQgdG8gbWl4IHBsYWluIHRhcmdldHMgd2l0aCBpbmZlcmVuY2UgcnVsZXMuCisgIG1zZyAoJ3BvcnRhYmlsaXR5JywgJHdoZXJlLAorICAgICAgICJJbmZlcmVuY2UgcnVsZXMgY2FuIGhhdmUgb25seSBvbmUgdGFyZ2V0IGJlZm9yZSB0aGUgY29sb24gKFBPU0lYKS4iKQorICAgIGlmICRpbmZlcmVuY2VfcnVsZV9jb3VudCA+IDAgJiYgJHRhcmdldF9jb3VudCA+IDE7CisKKyAgcmV0dXJuIEBjb25kczsKK30KKworPWl0ZW0gQzxkZXBlbmQgKCR0YXJnZXQsIEBkZXBzKT4KKworQWRkcyBDPEBkZXBzPiB0byB0aGUgZGVwZW5kZW5jaWVzIG9mIHRhcmdldCBDPCR0YXJnZXQ+LiAgVGhpcyBzaG91bGQKK2JlIHVzZWQgb25seSB3aXRoIGZhY3RvcmVkIHRhcmdldHMgKHRob3NlIGFwcGVhcmluZyBpbgorQzwlZGVwZW5kZWVzPikuCisKKz1jdXQKKworc3ViIGRlcGVuZCAoJEApCit7CisgIG15ICgkY2F0ZWdvcnksIEBkZXBlbmRlZXMpID0gQF87CisgIHB1c2ggKEB7JGRlcGVuZGVuY2llc3skY2F0ZWdvcnl9fSwgQGRlcGVuZGVlcyk7Cit9CisKKz1iYWNrCisKKz1oZWFkMSBTRUUgQUxTTworCitMPEF1dG9tYWtlOjpSdWxlRGVmPiwgTDxBdXRvbWFrZTo6Q29uZGl0aW9uPiwKK0w8QXV0b21ha2U6OkRpc2pDb25kaXRpb25zPiwgTDxBdXRvbWFrZTo6TG9jYXRpb24+LgorCis9Y3V0CisKKzE7CisKKyMjIyBTZXR1cCAiR05VIiBzdHlsZSBmb3IgcGVybC1tb2RlIGFuZCBjcGVybC1tb2RlLgorIyMgTG9jYWwgVmFyaWFibGVzOgorIyMgcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIHBlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIHBlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2UtaW1hZ2luYXJ5LW9mZnNldDogMAorIyMgcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIGNwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtZXh0cmEtbmV3bGluZS1iZWZvcmUtYnJhY2U6IHQKKyMjIGNwZXJsLW1lcmdlLXRyYWlsaW5nLWVsc2U6IG5pbAorIyMgY3BlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIEVuZDoKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9tYWtlLTEuMTEvQXV0b21ha2UvUnVsZURlZi5wbSBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvQXV0b21ha2UvUnVsZURlZi5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGJjMTA2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9BdXRvbWFrZS9SdWxlRGVmLnBtCkBAIC0wLDAgKzEsMTAwIEBACisjIENvcHlyaWdodCAoQykgMjAwMyAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitwYWNrYWdlIEF1dG9tYWtlOjpSdWxlRGVmOwordXNlIHN0cmljdDsKK3VzZSBDYXJwOwordXNlIEF1dG9tYWtlOjpDaGFubmVsRGVmczsKK3VzZSBBdXRvbWFrZTo6SXRlbURlZjsKKworcmVxdWlyZSBFeHBvcnRlcjsKK3VzZSB2YXJzICdASVNBJywgJ0BFWFBPUlQnOworQElTQSA9IHF3L0F1dG9tYWtlOjpJdGVtRGVmIEV4cG9ydGVyLzsKK0BFWFBPUlQgPSBxdyAoJlJVTEVfQVVUT01BS0UgJlJVTEVfVVNFUik7CisKKz1oZWFkMSBOQU1FCisKK0F1dG9tYWtlOjpSdWxlRGVmIC0gYSBjbGFzcyBmb3IgcnVsZSBkZWZpbml0aW9ucworCis9aGVhZDEgU1lOT1BTSVMKKworICB1c2UgQXV0b21ha2U6OlJ1bGVEZWY7CisgIHVzZSBBdXRvbWFrZTo6TG9jYXRpb247CisKKz1oZWFkMSBERVNDUklQVElPTgorCitUaGlzIGNsYXNzIGdhdGhlcnMgZGF0YSByZWxhdGVkIHRvIG9uZSBNYWtlZmlsZS1ydWxlIGRlZmluaXRpb24uCisKKz1oZWFkMiBDb25zdGFudHMKKworPW92ZXIgNAorCis9aXRlbSBDPFJVTEVfQVVUT01BS0U+LCBDPFJVTEVfVVNFUj4KKworUG9zc2libGUgb3duZXJzIGZvciBydWxlcy4KKworPWN1dAorCit1c2UgY29uc3RhbnQgUlVMRV9BVVRPTUFLRSA9PiAwOyAjIFJ1bGUgZGVmaW5lZCBieSBBdXRvbWFrZS4KK3VzZSBjb25zdGFudCBSVUxFX1VTRVIgPT4gMTsgICAgICMgUnVsZSBkZWZpbmVkIGluIHRoZSB1c2VyJ3MgTWFrZWZpbGUuYW0uCisKK3N1YiBuZXcgKCQkJCQkKQoreworICBteSAoJGNsYXNzLCAkbmFtZSwgJGNvbW1lbnQsICRsb2NhdGlvbiwgJG93bmVyLCAkc291cmNlKSA9IEBfOworCisgIG15ICRzZWxmID0gQXV0b21ha2U6Okl0ZW1EZWY6Om5ldyAoJGNsYXNzLCAkY29tbWVudCwgJGxvY2F0aW9uLCAkb3duZXIpOworICAkc2VsZi0+eydzb3VyY2UnfSA9ICRzb3VyY2U7CisgICRzZWxmLT57J25hbWUnfSA9ICRuYW1lOworICByZXR1cm4gJHNlbGY7Cit9CisKK3N1YiBzb3VyY2UgKCQpCit7CisgIG15ICgkc2VsZikgPSBAXzsKKyAgcmV0dXJuICRzZWxmLT57J3NvdXJjZSd9OworfQorCitzdWIgbmFtZSAoJCkKK3sKKyAgbXkgKCRzZWxmKSA9IEBfOworICByZXR1cm4gJHNlbGYtPnsnbmFtZSd9OworfQorCis9YmFjaworCis9aGVhZDEgU0VFIEFMU08KKworTDxBdXRvbWFrZTo6UnVsZT4sIEw8QXV0b21ha2U6Okl0ZW1EZWY+LgorCis9Y3V0CisKKzE7CisKKyMjIyBTZXR1cCAiR05VIiBzdHlsZSBmb3IgcGVybC1tb2RlIGFuZCBjcGVybC1tb2RlLgorIyMgTG9jYWwgVmFyaWFibGVzOgorIyMgcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIHBlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIHBlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2UtaW1hZ2luYXJ5LW9mZnNldDogMAorIyMgcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIGNwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtZXh0cmEtbmV3bGluZS1iZWZvcmUtYnJhY2U6IHQKKyMjIGNwZXJsLW1lcmdlLXRyYWlsaW5nLWVsc2U6IG5pbAorIyMgY3BlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIEVuZDoKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9tYWtlLTEuMTEvQXV0b21ha2UvU3RydWN0LnBtIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9BdXRvbWFrZS9TdHJ1Y3QucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc0NTc3OQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvQXV0b21ha2UvU3RydWN0LnBtCkBAIC0wLDAgKzEsNjI4IEBACisjIGF1dG9jb25mIC0tIGNyZWF0ZSBgY29uZmlndXJlJyB1c2luZyBtNCBtYWNyb3MKKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBUaGlzIGZpbGUgaXMgYmFzaWNhbGx5IFBlcmwgNS42J3MgQ2xhc3M6OlN0cnVjdCwgYnV0IG1hZGUgY29tcGF0aWJsZQorIyB3aXRoIFBlcmwgNS41LiAgSWYgc29tZWRheSB0aGlzIGhhcyB0byBiZSB1cGRhdGVkLCBiZSBzdXJlIHRvIHJlbmFtZQorIyBhbGwgdGhlIG9jY3VycmVuY2VzIG9mIENsYXNzOjpTdHJ1Y3QgaW50byBBdXRvbWFrZTo6U3RydWN0LCBvdGhlcndpc2UKKyMgaWYgd2UgYHVzZScgYSBQZXJsIG1vZHVsZSAoZS5nLiwgRmlsZTo6c3RhdCkgdGhhdCB1c2VzIENsYXNzOjpTdHJ1Y3QsCisjIHdlIHdvdWxkIGhhdmUgdHdvIHBhY2thZ2VzIGRlZmluaW5nIHRoZSBzYW1lIHN5bWJvbHMuICBCb29tLgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGhlIG1haW4gY29weSBvZiB0aGlzIGZpbGUgaXMgaW4gQXV0b21ha2UncyBDVlMgcmVwb3NpdG9yeS4gIworIyBVcGRhdGVzIHNob3VsZCBiZSBzZW50IHRvIGF1dG9tYWtlLXBhdGNoZXNAZ251Lm9yZy4gICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworcGFja2FnZSBBdXRvbWFrZTo6U3RydWN0OworCisjIyBTZWUgUE9EIGFmdGVyIF9fRU5EX18KKwordXNlIDUuMDA1XzAzOworCit1c2Ugc3RyaWN0OwordXNlIHZhcnMgcXcoQElTQSBARVhQT1JUICRWRVJTSU9OKTsKKwordXNlIENhcnA7CisKK3JlcXVpcmUgRXhwb3J0ZXI7CitASVNBID0gcXcoRXhwb3J0ZXIpOworQEVYUE9SVCA9IHF3KHN0cnVjdCk7CisKKyRWRVJTSU9OID0gJzAuNTgnOworCisjIyBUZXN0ZWQgb24gNS4wMDIgYW5kIDUuMDAzIHdpdGhvdXQgY2xhc3MgbWVtYmVyc2hpcCB0ZXN0czoKK215ICRDSEVDS19DTEFTU19NRU1CRVJTSElQID0gKCRdID49IDUuMDAzXzk1KTsKKworbXkgJHByaW50ID0gMDsKK3N1YiBwcmludGVtIHsKKyAgICBpZiAoQF8pIHsgJHByaW50ID0gc2hpZnQgfQorICAgIGVsc2UgICAgeyAkcHJpbnQrKyB9Cit9CisKK3sKKyAgICBwYWNrYWdlIEF1dG9tYWtlOjpTdHJ1Y3Q6OlRpZV9JU0E7CisKKyAgICBzdWIgVElFQVJSQVkgeworICAgICAgICBteSAkY2xhc3MgPSBzaGlmdDsKKyAgICAgICAgcmV0dXJuIGJsZXNzIFtdLCAkY2xhc3M7CisgICAgfQorCisgICAgc3ViIFNUT1JFIHsKKyAgICAgICAgbXkgKCRzZWxmLCAkaW5kZXgsICR2YWx1ZSkgPSBAXzsKKyAgICAgICAgQXV0b21ha2U6OlN0cnVjdDo6X3N1YmNsYXNzX2Vycm9yKCk7CisgICAgfQorCisgICAgc3ViIEZFVENIIHsKKyAgICAgICAgbXkgKCRzZWxmLCAkaW5kZXgpID0gQF87CisgICAgICAgICRzZWxmLT5bJGluZGV4XTsKKyAgICB9CisKKyAgICBzdWIgRkVUQ0hTSVpFIHsKKyAgICAgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICAgICAgcmV0dXJuIHNjYWxhcihAJHNlbGYpOworICAgIH0KKworICAgIHN1YiBERVNUUk9ZIHsgfQorfQorCitzdWIgc3RydWN0IHsKKworICAgICMgRGV0ZXJtaW5lIHBhcmFtZXRlciBsaXN0IHN0cnVjdHVyZSwgb25lIG9mOgorICAgICMgICBzdHJ1Y3QoIGNsYXNzID0+IFsgZWxlbWVudC1saXN0IF0pCisgICAgIyAgIHN0cnVjdCggY2xhc3MgPT4geyBlbGVtZW50LWxpc3QgfSkKKyAgICAjICAgc3RydWN0KCBlbGVtZW50LWxpc3QgKQorICAgICMgTGF0dGVyIGZvcm0gYXNzdW1lcyBjdXJyZW50IHBhY2thZ2UgbmFtZSBhcyBzdHJ1Y3QgbmFtZS4KKworICAgIG15ICgkY2xhc3MsIEBkZWNscyk7CisgICAgbXkgJGJhc2VfdHlwZSA9IHJlZiAkX1sxXTsKKyAgICBpZiAoICRiYXNlX3R5cGUgZXEgJ0hBU0gnICkgeworICAgICAgICAkY2xhc3MgPSBzaGlmdDsKKyAgICAgICAgQGRlY2xzID0gJXtzaGlmdCgpfTsKKyAgICAgICAgX3VzYWdlX2Vycm9yKCkgaWYgQF87CisgICAgfQorICAgIGVsc2lmICggJGJhc2VfdHlwZSBlcSAnQVJSQVknICkgeworICAgICAgICAkY2xhc3MgPSBzaGlmdDsKKyAgICAgICAgQGRlY2xzID0gQHtzaGlmdCgpfTsKKyAgICAgICAgX3VzYWdlX2Vycm9yKCkgaWYgQF87CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAkYmFzZV90eXBlID0gJ0FSUkFZJzsKKyAgICAgICAgJGNsYXNzID0gKGNhbGxlcigpKVswXTsKKyAgICAgICAgQGRlY2xzID0gQF87CisgICAgfQorICAgIF91c2FnZV9lcnJvcigpIGlmIEBkZWNscyAlIDIgPT0gMTsKKworICAgICMgRW5zdXJlIHdlIGFyZSBub3QsIGFuZCB3aWxsIG5vdCBiZSwgYSBzdWJjbGFzcy4KKworICAgIG15ICRpc2EgPSBkbyB7CisgICAgICAgIG5vIHN0cmljdCAncmVmcyc7CisgICAgICAgIFxAeyRjbGFzcyAuICc6OklTQSd9OworICAgIH07CisgICAgX3N1YmNsYXNzX2Vycm9yKCkgaWYgQCRpc2E7CisgICAgdGllIEAkaXNhLCAnQXV0b21ha2U6OlN0cnVjdDo6VGllX0lTQSc7CisKKyAgICAjIENyZWF0ZSBjb25zdHJ1Y3Rvci4KKworICAgIGNyb2FrICJmdW5jdGlvbiAnbmV3JyBhbHJlYWR5IGRlZmluZWQgaW4gcGFja2FnZSAkY2xhc3MiCisgICAgICAgIGlmIGRvIHsgbm8gc3RyaWN0ICdyZWZzJzsgZGVmaW5lZCAmeyRjbGFzcyAuICI6Om5ldyJ9IH07CisKKyAgICBteSBAbWV0aG9kcyA9ICgpOworICAgIG15ICVyZWZzID0gKCk7CisgICAgbXkgJWFycmF5cyA9ICgpOworICAgIG15ICVoYXNoZXMgPSAoKTsKKyAgICBteSAlY2xhc3NlcyA9ICgpOworICAgIG15ICRnb3RfY2xhc3MgPSAwOworICAgIG15ICRvdXQgPSAnJzsKKworICAgICRvdXQgPSAie1xuICBwYWNrYWdlICRjbGFzcztcbiAgdXNlIENhcnA7XG4gIHN1YiBuZXcge1xuIjsKKyAgICAkb3V0IC49ICIgICAgbXkgKFwkY2xhc3MsIFwlaW5pdCkgPSBcQF87XG4iOworICAgICRvdXQgLj0gIiAgICBcJGNsYXNzID0gX19QQUNLQUdFX18gdW5sZXNzIFxAXztcbiI7CisKKyAgICBteSAkY250ID0gMDsKKyAgICBteSAkaWR4ID0gMDsKKyAgICBteSggJGNtdCwgJG5hbWUsICR0eXBlLCAkZWxlbSApOworCisgICAgaWYoICRiYXNlX3R5cGUgZXEgJ0hBU0gnICl7CisgICAgICAgICRvdXQgLj0gIiAgICBteShcJHIpID0ge307XG4iOworICAgICAgICAkY210ID0gJyc7CisgICAgfQorICAgIGVsc2lmKCAkYmFzZV90eXBlIGVxICdBUlJBWScgKXsKKyAgICAgICAgJG91dCAuPSAiICAgIG15KFwkcikgPSBbXTtcbiI7CisgICAgfQorICAgIHdoaWxlKCAkaWR4IDwgQGRlY2xzICl7CisgICAgICAgICRuYW1lID0gJGRlY2xzWyRpZHhdOworICAgICAgICAkdHlwZSA9ICRkZWNsc1skaWR4KzFdOworICAgICAgICBwdXNoKCBAbWV0aG9kcywgJG5hbWUgKTsKKyAgICAgICAgaWYoICRiYXNlX3R5cGUgZXEgJ0hBU0gnICl7CisgICAgICAgICAgICAkZWxlbSA9ICJ7JyR7Y2xhc3N9OjokbmFtZSd9IjsKKyAgICAgICAgfQorICAgICAgICBlbHNpZiggJGJhc2VfdHlwZSBlcSAnQVJSQVknICl7CisgICAgICAgICAgICAkZWxlbSA9ICJbJGNudF0iOworICAgICAgICAgICAgKyskY250OworICAgICAgICAgICAgJGNtdCA9ICIgIyAkbmFtZSI7CisgICAgICAgIH0KKyAgICAgICAgaWYoICR0eXBlID1+IC9eXCooLikvICl7CisgICAgICAgICAgICAkcmVmc3skbmFtZX0rKzsKKyAgICAgICAgICAgICR0eXBlID0gJDE7CisgICAgICAgIH0KKyAgICAgICAgbXkgJGluaXQgPSAiZGVmaW5lZChcJGluaXR7JyRuYW1lJ30pID8gXCRpbml0eyckbmFtZSd9IDoiOworICAgICAgICBpZiggJHR5cGUgZXEgJ0AnICl7CisgICAgICAgICAgICAkb3V0IC49ICIgICAgY3JvYWsgJ0luaXRpYWxpemVyIGZvciAkbmFtZSBtdXN0IGJlIGFycmF5IHJlZmVyZW5jZSdcbiI7CisgICAgICAgICAgICAkb3V0IC49ICIgICAgICAgIGlmIGRlZmluZWQoXCRpbml0eyckbmFtZSd9KSAmJiByZWYoXCRpbml0eyckbmFtZSd9KSBuZSAnQVJSQVknO1xuIjsKKyAgICAgICAgICAgICRvdXQgLj0gIiAgICBcJHItPiRlbGVtID0gJGluaXQgW107JGNtdFxuIjsKKyAgICAgICAgICAgICRhcnJheXN7JG5hbWV9Kys7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoICR0eXBlIGVxICclJyApeworICAgICAgICAgICAgJG91dCAuPSAiICAgIGNyb2FrICdJbml0aWFsaXplciBmb3IgJG5hbWUgbXVzdCBiZSBoYXNoIHJlZmVyZW5jZSdcbiI7CisgICAgICAgICAgICAkb3V0IC49ICIgICAgICAgIGlmIGRlZmluZWQoXCRpbml0eyckbmFtZSd9KSAmJiByZWYoXCRpbml0eyckbmFtZSd9KSBuZSAnSEFTSCc7XG4iOworICAgICAgICAgICAgJG91dCAuPSAiICAgIFwkci0+JGVsZW0gPSAkaW5pdCB7fTskY210XG4iOworICAgICAgICAgICAgJGhhc2hlc3skbmFtZX0rKzsKKyAgICAgICAgfQorICAgICAgICBlbHNpZiAoICR0eXBlIGVxICckJykgeworICAgICAgICAgICAgJG91dCAuPSAiICAgIFwkci0+JGVsZW0gPSAkaW5pdCB1bmRlZjskY210XG4iOworICAgICAgICB9CisgICAgICAgIGVsc2lmKCAkdHlwZSA9fiAvXlx3Kyg/Ojo6XHcrKSokLyApeworICAgICAgICAgICAgJGluaXQgPSAiZGVmaW5lZChcJGluaXR7JyRuYW1lJ30pID8gXCV7XCRpbml0eyckbmFtZSd9fSA6ICgpIjsKKyAgICAgICAgICAgICRvdXQgLj0gIiAgICBjcm9hayAnSW5pdGlhbGl6ZXIgZm9yICRuYW1lIG11c3QgYmUgaGFzaCByZWZlcmVuY2UnXG4iOworICAgICAgICAgICAgJG91dCAuPSAiICAgICAgICBpZiBkZWZpbmVkKFwkaW5pdHsnJG5hbWUnfSkgJiYgcmVmKFwkaW5pdHsnJG5hbWUnfSkgbmUgJ0hBU0gnO1xuIjsKKyAgICAgICAgICAgICRvdXQgLj0gIiAgICBcJHItPiRlbGVtID0gJyR7dHlwZX0nLT5uZXcoJGluaXQpOyRjbXRcbiI7CisgICAgICAgICAgICAkY2xhc3Nlc3skbmFtZX0gPSAkdHlwZTsKKyAgICAgICAgICAgICRnb3RfY2xhc3MgPSAxOworICAgICAgICB9CisgICAgICAgIGVsc2V7CisgICAgICAgICAgICBjcm9hayAiJyR0eXBlJyBpcyBub3QgYSB2YWxpZCBzdHJ1Y3QgZWxlbWVudCB0eXBlIjsKKyAgICAgICAgfQorICAgICAgICAkaWR4ICs9IDI7CisgICAgfQorICAgICRvdXQgLj0gIiAgICBibGVzcyBcJHIsIFwkY2xhc3M7XG4gIH1cbiI7CisKKyAgICAjIENyZWF0ZSBhY2Nlc3NvciBtZXRob2RzLgorCisgICAgbXkoICRwcmUsICRwc3QsICRzZWwgKTsKKyAgICAkY250ID0gMDsKKyAgICBmb3JlYWNoICRuYW1lIChAbWV0aG9kcyl7CisgICAgICAgIGlmICggZG8geyBubyBzdHJpY3QgJ3JlZnMnOyBkZWZpbmVkICZ7JGNsYXNzIC4gIjo6JG5hbWUifSB9ICkgeworICAgICAgICAgICAgY2FycCAiZnVuY3Rpb24gJyRuYW1lJyBhbHJlYWR5IGRlZmluZWQsIG92ZXJyaWRlcyBzdHJ1Y3QgYWNjZXNzb3IgbWV0aG9kIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICRwcmUgPSAkcHN0ID0gJGNtdCA9ICRzZWwgPSAnJzsKKyAgICAgICAgICAgIGlmKCBkZWZpbmVkICRyZWZzeyRuYW1lfSApeworICAgICAgICAgICAgICAgICRwcmUgPSAiXFwoIjsKKyAgICAgICAgICAgICAgICAkcHN0ID0gIikiOworICAgICAgICAgICAgICAgICRjbXQgPSAiICMgcmV0dXJucyByZWYiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgJG91dCAuPSAiICBzdWIgJG5hbWUgeyRjbXRcbiAgICBteSBcJHIgPSBzaGlmdDtcbiI7CisgICAgICAgICAgICBpZiggJGJhc2VfdHlwZSBlcSAnQVJSQVknICl7CisgICAgICAgICAgICAgICAgJGVsZW0gPSAiWyRjbnRdIjsKKyAgICAgICAgICAgICAgICArKyRjbnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNpZiggJGJhc2VfdHlwZSBlcSAnSEFTSCcgKXsKKyAgICAgICAgICAgICAgICAkZWxlbSA9ICJ7JyR7Y2xhc3N9OjokbmFtZSd9IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCBkZWZpbmVkICRhcnJheXN7JG5hbWV9ICl7CisgICAgICAgICAgICAgICAgJG91dCAuPSAiICAgIG15IFwkaTtcbiI7CisgICAgICAgICAgICAgICAgJG91dCAuPSAiICAgIFxAXyA/IChcJGkgPSBzaGlmdCkgOiByZXR1cm4gXCRyLT4kZWxlbTtcbiI7CisgICAgICAgICAgICAgICAgJHNlbCA9ICItPltcJGldIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2lmKCBkZWZpbmVkICRoYXNoZXN7JG5hbWV9ICl7CisgICAgICAgICAgICAgICAgJG91dCAuPSAiICAgIG15IFwkaTtcbiI7CisgICAgICAgICAgICAgICAgJG91dCAuPSAiICAgIFxAXyA/IChcJGkgPSBzaGlmdCkgOiByZXR1cm4gXCRyLT4kZWxlbTtcbiI7CisgICAgICAgICAgICAgICAgJHNlbCA9ICItPntcJGl9IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2lmKCBkZWZpbmVkICRjbGFzc2VzeyRuYW1lfSApeworICAgICAgICAgICAgICAgIGlmICggJENIRUNLX0NMQVNTX01FTUJFUlNISVAgKSB7CisgICAgICAgICAgICAgICAgICAgICRvdXQgLj0gIiAgICBjcm9hayAnJG5hbWUgYXJndW1lbnQgaXMgd3JvbmcgY2xhc3MnIGlmIFxAXyAmJiAhIFVOSVZFUlNBTDo6aXNhKFwkX1swXSwgJyRjbGFzc2VzeyRuYW1lfScpO1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAkb3V0IC49ICIgICAgY3JvYWsgJ1RvbyBtYW55IGFyZ3MgdG8gJG5hbWUnIGlmIFxAXyA+IDE7XG4iOworICAgICAgICAgICAgJG91dCAuPSAiICAgIFxAXyA/ICgkcHJlXCRyLT4kZWxlbSRzZWwgPSBzaGlmdCRwc3QpIDogJHByZVwkci0+JGVsZW0kc2VsJHBzdDtcbiI7CisgICAgICAgICAgICAkb3V0IC49ICIgIH1cbiI7CisgICAgICAgIH0KKyAgICB9CisgICAgJG91dCAuPSAifVxuMTtcbiI7CisKKyAgICBwcmludCAkb3V0IGlmICRwcmludDsKKyAgICBteSAkcmVzdWx0ID0gZXZhbCAkb3V0OworICAgIGNhcnAgJEAgaWYgJEA7Cit9CisKK3N1YiBfdXNhZ2VfZXJyb3IgeworICAgIGNvbmZlc3MgInN0cnVjdCB1c2FnZSBlcnJvciI7Cit9CisKK3N1YiBfc3ViY2xhc3NfZXJyb3IgeworICAgIGNyb2FrICdzdHJ1Y3QgY2xhc3MgY2Fubm90IGJlIGEgc3ViY2xhc3MgKEBJU0Egbm90IGFsbG93ZWQpJzsKK30KKworMTsgIyBmb3IgcmVxdWlyZQorCisKK19fRU5EX18KKworPWhlYWQxIE5BTUUKKworQXV0b21ha2U6OlN0cnVjdCAtIGRlY2xhcmUgc3RydWN0LWxpa2UgZGF0YXR5cGVzIGFzIFBlcmwgY2xhc3NlcworCis9aGVhZDEgU1lOT1BTSVMKKworICAgIHVzZSBBdXRvbWFrZTo6U3RydWN0OworICAgICAgICAgICAgIyBkZWNsYXJlIHN0cnVjdCwgYmFzZWQgb24gYXJyYXk6CisgICAgc3RydWN0KCBDTEFTU19OQU1FID0+IFsgRUxFTUVOVF9OQU1FID0+IEVMRU1FTlRfVFlQRSwgLi4uIF0pOworICAgICAgICAgICAgIyBkZWNsYXJlIHN0cnVjdCwgYmFzZWQgb24gaGFzaDoKKyAgICBzdHJ1Y3QoIENMQVNTX05BTUUgPT4geyBFTEVNRU5UX05BTUUgPT4gRUxFTUVOVF9UWVBFLCAuLi4gfSk7CisKKyAgICBwYWNrYWdlIENMQVNTX05BTUU7CisgICAgdXNlIEF1dG9tYWtlOjpTdHJ1Y3Q7CisgICAgICAgICAgICAjIGRlY2xhcmUgc3RydWN0LCBiYXNlZCBvbiBhcnJheSwgaW1wbGljaXQgY2xhc3MgbmFtZToKKyAgICBzdHJ1Y3QoIEVMRU1FTlRfTkFNRSA9PiBFTEVNRU5UX1RZUEUsIC4uLiApOworCisKKyAgICBwYWNrYWdlIE15b2JqOworICAgIHVzZSBBdXRvbWFrZTo6U3RydWN0OworICAgICAgICAgICAgIyBkZWNsYXJlIHN0cnVjdCB3aXRoIGZvdXIgdHlwZXMgb2YgZWxlbWVudHM6CisgICAgc3RydWN0KCBzID0+ICckJywgYSA9PiAnQCcsIGggPT4gJyUnLCBjID0+ICdNeV9PdGhlcl9DbGFzcycgKTsKKworICAgICRvYmogPSBuZXcgTXlvYmo7ICAgICAgICAgICAgICAgIyBjb25zdHJ1Y3RvcgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNjYWxhciB0eXBlIGFjY2Vzc29yOgorICAgICRlbGVtZW50X3ZhbHVlID0gJG9iai0+czsgICAgICAgICAgICMgZWxlbWVudCB2YWx1ZQorICAgICRvYmotPnMoJ25ldyB2YWx1ZScpOyAgICAgICAgICAgICAgICMgYXNzaWduIHRvIGVsZW1lbnQKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhcnJheSB0eXBlIGFjY2Vzc29yOgorICAgICRhcnlfcmVmID0gJG9iai0+YTsgICAgICAgICAgICAgICAgICMgcmVmZXJlbmNlIHRvIHdob2xlIGFycmF5CisgICAgJGFyeV9lbGVtZW50X3ZhbHVlID0gJG9iai0+YSgyKTsgICAgIyBhcnJheSBlbGVtZW50IHZhbHVlCisgICAgJG9iai0+YSgyLCAnbmV3IHZhbHVlJyk7ICAgICAgICAgICAgIyBhc3NpZ24gdG8gYXJyYXkgZWxlbWVudAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGhhc2ggdHlwZSBhY2Nlc3NvcjoKKyAgICAkaGFzaF9yZWYgPSAkb2JqLT5oOyAgICAgICAgICAgICAgICAjIHJlZmVyZW5jZSB0byB3aG9sZSBoYXNoCisgICAgJGhhc2hfZWxlbWVudF92YWx1ZSA9ICRvYmotPmgoJ3gnKTsgIyBoYXNoIGVsZW1lbnQgdmFsdWUKKyAgICAkb2JqLT5oKCd4JywgJ25ldyB2YWx1ZScpOyAgICAgICAgIyBhc3NpZ24gdG8gaGFzaCBlbGVtZW50CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2xhc3MgdHlwZSBhY2Nlc3NvcjoKKyAgICAkZWxlbWVudF92YWx1ZSA9ICRvYmotPmM7ICAgICAgICAgICAjIG9iamVjdCByZWZlcmVuY2UKKyAgICAkb2JqLT5jLT5tZXRob2QoLi4uKTsgICAgICAgICAgICAgICAjIGNhbGwgbWV0aG9kIG9mIG9iamVjdAorICAgICRvYmotPmMobmV3IE15X090aGVyX0NsYXNzKTsgICAgICAgICMgYXNzaWduIGEgbmV3IG9iamVjdAorCisKKz1oZWFkMSBERVNDUklQVElPTgorCitDPEF1dG9tYWtlOjpTdHJ1Y3Q+IGV4cG9ydHMgYSBzaW5nbGUgZnVuY3Rpb24sIEM8c3RydWN0Pi4KK0dpdmVuIGEgbGlzdCBvZiBlbGVtZW50IG5hbWVzIGFuZCB0eXBlcywgYW5kIG9wdGlvbmFsbHkKK2EgY2xhc3MgbmFtZSwgQzxzdHJ1Y3Q+IGNyZWF0ZXMgYSBQZXJsIDUgY2xhc3MgdGhhdCBpbXBsZW1lbnRzCithICJzdHJ1Y3QtbGlrZSIgZGF0YSBzdHJ1Y3R1cmUuCisKK1RoZSBuZXcgY2xhc3MgaXMgZ2l2ZW4gYSBjb25zdHJ1Y3RvciBtZXRob2QsIEM8bmV3PiwgZm9yIGNyZWF0aW5nCitzdHJ1Y3Qgb2JqZWN0cy4KKworRWFjaCBlbGVtZW50IGluIHRoZSBzdHJ1Y3QgZGF0YSBoYXMgYW4gYWNjZXNzb3IgbWV0aG9kLCB3aGljaCBpcwordXNlZCB0byBhc3NpZ24gdG8gdGhlIGVsZW1lbnQgYW5kIHRvIGZldGNoIGl0cyB2YWx1ZS4gIFRoZQorZGVmYXVsdCBhY2Nlc3NvciBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWNsYXJpbmcgYSBDPHN1Yj4gb2YgdGhlCitzYW1lIG5hbWUgaW4gdGhlIHBhY2thZ2UuICAoU2VlIEV4YW1wbGUgMi4pCisKK0VhY2ggZWxlbWVudCdzIHR5cGUgY2FuIGJlIHNjYWxhciwgYXJyYXksIGhhc2gsIG9yIGNsYXNzLgorCisKKz1oZWFkMiBUaGUgQzxzdHJ1Y3QoKT4gZnVuY3Rpb24KKworVGhlIEM8c3RydWN0PiBmdW5jdGlvbiBoYXMgdGhyZWUgZm9ybXMgb2YgcGFyYW1ldGVyLWxpc3QuCisKKyAgICBzdHJ1Y3QoIENMQVNTX05BTUUgPT4gWyBFTEVNRU5UX0xJU1QgXSk7CisgICAgc3RydWN0KCBDTEFTU19OQU1FID0+IHsgRUxFTUVOVF9MSVNUIH0pOworICAgIHN0cnVjdCggRUxFTUVOVF9MSVNUICk7CisKK1RoZSBmaXJzdCBhbmQgc2Vjb25kIGZvcm1zIGV4cGxpY2l0bHkgaWRlbnRpZnkgdGhlIG5hbWUgb2YgdGhlCitjbGFzcyBiZWluZyBjcmVhdGVkLiAgVGhlIHRoaXJkIGZvcm0gYXNzdW1lcyB0aGUgY3VycmVudCBwYWNrYWdlCituYW1lIGFzIHRoZSBjbGFzcyBuYW1lLgorCitBbiBvYmplY3Qgb2YgYSBjbGFzcyBjcmVhdGVkIGJ5IHRoZSBmaXJzdCBhbmQgdGhpcmQgZm9ybXMgaXMKK2Jhc2VkIG9uIGFuIGFycmF5LCB3aGVyZWFzIGFuIG9iamVjdCBvZiBhIGNsYXNzIGNyZWF0ZWQgYnkgdGhlCitzZWNvbmQgZm9ybSBpcyBiYXNlZCBvbiBhIGhhc2guIFRoZSBhcnJheS1iYXNlZCBmb3JtcyB3aWxsIGJlCitzb21ld2hhdCBmYXN0ZXIgYW5kIHNtYWxsZXI7IHRoZSBoYXNoLWJhc2VkIGZvcm1zIGFyZSBtb3JlCitmbGV4aWJsZS4KKworVGhlIGNsYXNzIGNyZWF0ZWQgYnkgQzxzdHJ1Y3Q+IG11c3Qgbm90IGJlIGEgc3ViY2xhc3Mgb2YgYW5vdGhlcgorY2xhc3Mgb3RoZXIgdGhhbiBDPFVOSVZFUlNBTD4uCisKK0l0IGNhbiwgaG93ZXZlciwgYmUgdXNlZCBhcyBhIHN1cGVyY2xhc3MgZm9yIG90aGVyIGNsYXNzZXMuIFRvIGZhY2lsaXRhdGUKK3RoaXMsIHRoZSBnZW5lcmF0ZWQgY29uc3RydWN0b3IgbWV0aG9kIHVzZXMgYSB0d28tYXJndW1lbnQgYmxlc3NpbmcuCitGdXJ0aGVybW9yZSwgaWYgdGhlIGNsYXNzIGlzIGhhc2gtYmFzZWQsIHRoZSBrZXkgb2YgZWFjaCBlbGVtZW50IGlzCitwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIChzZWUgSTxQZXJsIENvb2tib29rPiwgUmVjaXBlIDEzLjEyKS4KKworQSBmdW5jdGlvbiBuYW1lZCBDPG5ldz4gbXVzdCBub3QgYmUgZXhwbGljaXRseSBkZWZpbmVkIGluIGEgY2xhc3MKK2NyZWF0ZWQgYnkgQzxzdHJ1Y3Q+LgorCitUaGUgSTxFTEVNRU5UX0xJU1Q+IGhhcyB0aGUgZm9ybQorCisgICAgTkFNRSA9PiBUWVBFLCAuLi4KKworRWFjaCBuYW1lLXR5cGUgcGFpciBkZWNsYXJlcyBvbmUgZWxlbWVudCBvZiB0aGUgc3RydWN0LiBFYWNoCitlbGVtZW50IG5hbWUgd2lsbCBiZSBkZWZpbmVkIGFzIGFuIGFjY2Vzc29yIG1ldGhvZCB1bmxlc3MgYQorbWV0aG9kIGJ5IHRoYXQgbmFtZSBpcyBleHBsaWNpdGx5IGRlZmluZWQ7IGluIHRoZSBsYXR0ZXIgY2FzZSwgYQord2FybmluZyBpcyBpc3N1ZWQgaWYgdGhlIHdhcm5pbmcgZmxhZyAoQjwtdz4pIGlzIHNldC4KKworCis9aGVhZDIgRWxlbWVudCBUeXBlcyBhbmQgQWNjZXNzb3IgTWV0aG9kcworCitUaGUgZm91ciBlbGVtZW50IHR5cGVzIC0tIHNjYWxhciwgYXJyYXksIGhhc2gsIGFuZCBjbGFzcyAtLSBhcmUKK3JlcHJlc2VudGVkIGJ5IHN0cmluZ3MgLS0gQzwnJCc+LCBDPCdAJz4sIEM8JyUnPiwgYW5kIGEgY2xhc3MgbmFtZSAtLQorb3B0aW9uYWxseSBwcmVjZWRlZCBieSBhIEM8JyonPi4KKworVGhlIGFjY2Vzc29yIG1ldGhvZCBwcm92aWRlZCBieSBDPHN0cnVjdD4gZm9yIGFuIGVsZW1lbnQgZGVwZW5kcworb24gdGhlIGRlY2xhcmVkIHR5cGUgb2YgdGhlIGVsZW1lbnQuCisKKz1vdmVyCisKKz1pdGVtIFNjYWxhciAoQzwnJCc+IG9yIEM8JyokJz4pCisKK1RoZSBlbGVtZW50IGlzIGEgc2NhbGFyLCBhbmQgYnkgZGVmYXVsdCBpcyBpbml0aWFsaXplZCB0byBDPHVuZGVmPgorKGJ1dCBzZWUgTDxJbml0aWFsaXppbmcgd2l0aCBuZXc+KS4KKworVGhlIGFjY2Vzc29yJ3MgYXJndW1lbnQsIGlmIGFueSwgaXMgYXNzaWduZWQgdG8gdGhlIGVsZW1lbnQuCisKK0lmIHRoZSBlbGVtZW50IHR5cGUgaXMgQzwnJCc+LCB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQgKGFmdGVyCithc3NpZ25tZW50KSBpcyByZXR1cm5lZC4gSWYgdGhlIGVsZW1lbnQgdHlwZSBpcyBDPCcqJCc+LCBhIHJlZmVyZW5jZQordG8gdGhlIGVsZW1lbnQgaXMgcmV0dXJuZWQuCisKKz1pdGVtIEFycmF5IChDPCdAJz4gb3IgQzwnKkAnPikKKworVGhlIGVsZW1lbnQgaXMgYW4gYXJyYXksIGluaXRpYWxpemVkIGJ5IGRlZmF1bHQgdG8gQzwoKT4uCisKK1dpdGggbm8gYXJndW1lbnQsIHRoZSBhY2Nlc3NvciByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZQorZWxlbWVudCdzIHdob2xlIGFycmF5ICh3aGV0aGVyIG9yIG5vdCB0aGUgZWxlbWVudCB3YXMKK3NwZWNpZmllZCBhcyBDPCdAJz4gb3IgQzwnKkAnPikuCisKK1dpdGggb25lIG9yIHR3byBhcmd1bWVudHMsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBhbiBpbmRleAorc3BlY2lmeWluZyBvbmUgZWxlbWVudCBvZiB0aGUgYXJyYXk7IHRoZSBzZWNvbmQgYXJndW1lbnQsIGlmCitwcmVzZW50LCBpcyBhc3NpZ25lZCB0byB0aGUgYXJyYXkgZWxlbWVudC4gIElmIHRoZSBlbGVtZW50IHR5cGUKK2lzIEM8J0AnPiwgdGhlIGFjY2Vzc29yIHJldHVybnMgdGhlIGFycmF5IGVsZW1lbnQgdmFsdWUuICBJZiB0aGUKK2VsZW1lbnQgdHlwZSBpcyBDPCcqQCc+LCBhIHJlZmVyZW5jZSB0byB0aGUgYXJyYXkgZWxlbWVudCBpcworcmV0dXJuZWQuCisKKz1pdGVtIEhhc2ggKEM8JyUnPiBvciBDPCcqJSc+KQorCitUaGUgZWxlbWVudCBpcyBhIGhhc2gsIGluaXRpYWxpemVkIGJ5IGRlZmF1bHQgdG8gQzwoKT4uCisKK1dpdGggbm8gYXJndW1lbnQsIHRoZSBhY2Nlc3NvciByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZQorZWxlbWVudCdzIHdob2xlIGhhc2ggKHdoZXRoZXIgb3Igbm90IHRoZSBlbGVtZW50IHdhcworc3BlY2lmaWVkIGFzIEM8JyUnPiBvciBDPCcqJSc+KS4KKworV2l0aCBvbmUgb3IgdHdvIGFyZ3VtZW50cywgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEga2V5IHNwZWNpZnlpbmcKK29uZSBlbGVtZW50IG9mIHRoZSBoYXNoOyB0aGUgc2Vjb25kIGFyZ3VtZW50LCBpZiBwcmVzZW50LCBpcworYXNzaWduZWQgdG8gdGhlIGhhc2ggZWxlbWVudC4gIElmIHRoZSBlbGVtZW50IHR5cGUgaXMgQzwnJSc+LCB0aGUKK2FjY2Vzc29yIHJldHVybnMgdGhlIGhhc2ggZWxlbWVudCB2YWx1ZS4gIElmIHRoZSBlbGVtZW50IHR5cGUgaXMKK0M8JyolJz4sIGEgcmVmZXJlbmNlIHRvIHRoZSBoYXNoIGVsZW1lbnQgaXMgcmV0dXJuZWQuCisKKz1pdGVtIENsYXNzIChDPCdDbGFzc19OYW1lJz4gb3IgQzwnKkNsYXNzX05hbWUnPikKKworVGhlIGVsZW1lbnQncyB2YWx1ZSBtdXN0IGJlIGEgcmVmZXJlbmNlIGJsZXNzZWQgdG8gdGhlIG5hbWVkCitjbGFzcyBvciB0byBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuIFRoZSBlbGVtZW50IGlzIGluaXRpYWxpemVkIHRvCit0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIEM8bmV3PiBjb25zdHJ1Y3RvciBvZiB0aGUgbmFtZWQgY2xhc3MuCisKK1RoZSBhY2Nlc3NvcidzIGFyZ3VtZW50LCBpZiBhbnksIGlzIGFzc2lnbmVkIHRvIHRoZSBlbGVtZW50LiBUaGUKK2FjY2Vzc29yIHdpbGwgQzxjcm9haz4gaWYgdGhpcyBpcyBub3QgYW4gYXBwcm9wcmlhdGUgb2JqZWN0CityZWZlcmVuY2UuCisKK0lmIHRoZSBlbGVtZW50IHR5cGUgZG9lcyBub3Qgc3RhcnQgd2l0aCBhIEM8JyonPiwgdGhlIGFjY2Vzc29yCityZXR1cm5zIHRoZSBlbGVtZW50IHZhbHVlIChhZnRlciBhc3NpZ25tZW50KS4gSWYgdGhlIGVsZW1lbnQgdHlwZQorc3RhcnRzIHdpdGggYSBDPCcqJz4sIGEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGl0c2VsZiBpcyByZXR1cm5lZC4KKworPWJhY2sKKworPWhlYWQyIEluaXRpYWxpemluZyB3aXRoIEM8bmV3PgorCitDPHN0cnVjdD4gYWx3YXlzIGNyZWF0ZXMgYSBjb25zdHJ1Y3RvciBjYWxsZWQgQzxuZXc+LiBUaGF0IGNvbnN0cnVjdG9yCittYXkgdGFrZSBhIGxpc3Qgb2YgaW5pdGlhbGl6ZXJzIGZvciB0aGUgdmFyaW91cyBlbGVtZW50cyBvZiB0aGUgbmV3CitzdHJ1Y3QuCisKK0VhY2ggaW5pdGlhbGl6ZXIgaXMgYSBwYWlyIG9mIHZhbHVlczogSTxlbGVtZW50IG5hbWU+QzwgPUU8Z3Q+ID5JPHZhbHVlPi4KK1RoZSBpbml0aWFsaXplciB2YWx1ZSBmb3IgYSBzY2FsYXIgZWxlbWVudCBpcyBqdXN0IGEgc2NhbGFyIHZhbHVlLiBUaGUKK2luaXRpYWxpemVyIGZvciBhbiBhcnJheSBlbGVtZW50IGlzIGFuIGFycmF5IHJlZmVyZW5jZS4gVGhlIGluaXRpYWxpemVyCitmb3IgYSBoYXNoIGlzIGEgaGFzaCByZWZlcmVuY2UuCisKK1RoZSBpbml0aWFsaXplciBmb3IgYSBjbGFzcyBlbGVtZW50IGlzIGFsc28gYSBoYXNoIHJlZmVyZW5jZSwgYW5kIHRoZQorY29udGVudHMgb2YgdGhhdCBoYXNoIGFyZSBwYXNzZWQgdG8gdGhlIGVsZW1lbnQncyBvd24gY29uc3RydWN0b3IuCisKK1NlZSBFeGFtcGxlIDMgYmVsb3cgZm9yIGFuIGV4YW1wbGUgb2YgaW5pdGlhbGl6YXRpb24uCisKKworPWhlYWQxIEVYQU1QTEVTCisKKz1vdmVyCisKKz1pdGVtIEV4YW1wbGUgMQorCitHaXZpbmcgYSBzdHJ1Y3QgZWxlbWVudCBhIGNsYXNzIHR5cGUgdGhhdCBpcyBhbHNvIGEgc3RydWN0IGlzIGhvdworc3RydWN0cyBhcmUgbmVzdGVkLiAgSGVyZSwgQzx0aW1ldmFsPiByZXByZXNlbnRzIGEgdGltZSAoc2Vjb25kcyBhbmQKK21pY3Jvc2Vjb25kcyksIGFuZCBDPHJ1c2FnZT4gaGFzIHR3byBlbGVtZW50cywgZWFjaCBvZiB3aGljaCBpcyBvZgordHlwZSBDPHRpbWV2YWw+LgorCisgICAgdXNlIEF1dG9tYWtlOjpTdHJ1Y3Q7CisKKyAgICBzdHJ1Y3QoIHJ1c2FnZSA9PiB7CisgICAgICAgIHJ1X3V0aW1lID0+IHRpbWV2YWwsICAjIHNlY29uZHMKKyAgICAgICAgcnVfc3RpbWUgPT4gdGltZXZhbCwgICMgbWljcm9zZWNvbmRzCisgICAgfSk7CisKKyAgICBzdHJ1Y3QoIHRpbWV2YWwgPT4gWworICAgICAgICB0dl9zZWNzICA9PiAnJCcsCisgICAgICAgIHR2X3VzZWNzID0+ICckJywKKyAgICBdKTsKKworICAgICAgICAjIGNyZWF0ZSBhbiBvYmplY3Q6CisgICAgbXkgJHQgPSBuZXcgcnVzYWdlOworCisgICAgICAgICMgJHQtPnJ1X3V0aW1lIGFuZCAkdC0+cnVfc3RpbWUgYXJlIG9iamVjdHMgb2YgdHlwZSB0aW1ldmFsLgorICAgICAgICAjIHNldCAkdC0+cnVfdXRpbWUgdG8gMTAwLjAgc2VjIGFuZCAkdC0+cnVfc3RpbWUgdG8gNS4wIHNlYy4KKyAgICAkdC0+cnVfdXRpbWUtPnR2X3NlY3MoMTAwKTsKKyAgICAkdC0+cnVfdXRpbWUtPnR2X3VzZWNzKDApOworICAgICR0LT5ydV9zdGltZS0+dHZfc2Vjcyg1KTsKKyAgICAkdC0+cnVfc3RpbWUtPnR2X3VzZWNzKDApOworCisKKz1pdGVtIEV4YW1wbGUgMgorCitBbiBhY2Nlc3NvciBmdW5jdGlvbiBjYW4gYmUgcmVkZWZpbmVkIGluIG9yZGVyIHRvIHByb3ZpZGUKK2FkZGl0aW9uYWwgY2hlY2tpbmcgb2YgdmFsdWVzLCBldGMuICBIZXJlLCB3ZSB3YW50IHRoZSBDPGNvdW50PgorZWxlbWVudCBhbHdheXMgdG8gYmUgbm9ubmVnYXRpdmUsIHNvIHdlIHJlZGVmaW5lIHRoZSBDPGNvdW50PgorYWNjZXNzb3IgYWNjb3JkaW5nbHkuCisKKyAgICBwYWNrYWdlIE15T2JqOworICAgIHVzZSBBdXRvbWFrZTo6U3RydWN0OworCisgICAgIyBkZWNsYXJlIHRoZSBzdHJ1Y3QKKyAgICBzdHJ1Y3QgKCAnTXlPYmonLCB7IGNvdW50ID0+ICckJywgc3R1ZmYgPT4gJyUnIH0gKTsKKworICAgICMgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYWNjZXNzb3IgbWV0aG9kIGZvciAnY291bnQnCisgICAgc3ViIGNvdW50IHsKKyAgICAgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICAgICAgaWYgKCBAXyApIHsKKyAgICAgICAgICAgIGRpZSAnY291bnQgbXVzdCBiZSBub25uZWdhdGl2ZScgaWYgJF9bMF0gPCAwOworICAgICAgICAgICAgJHNlbGYtPnsnY291bnQnfSA9IHNoaWZ0OworICAgICAgICAgICAgd2FybiAiVG9vIG1hbnkgYXJncyB0byBjb3VudCIgaWYgQF87CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICRzZWxmLT57J2NvdW50J307CisgICAgfQorCisgICAgcGFja2FnZSBtYWluOworICAgICR4ID0gbmV3IE15T2JqOworICAgIHByaW50ICJcJHgtPmNvdW50KDUpID0gIiwgJHgtPmNvdW50KDUpLCAiXG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcHJpbnRzICckeC0+Y291bnQoNSkgPSA1JworCisgICAgcHJpbnQgIlwkeC0+Y291bnQgPSAiLCAkeC0+Y291bnQsICJcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwcmludHMgJyR4LT5jb3VudCA9IDUnCisKKyAgICBwcmludCAiXCR4LT5jb3VudCgtNSkgPSAiLCAkeC0+Y291bnQoLTUpLCAiXG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGllcyBkdWUgdG8gbmVnYXRpdmUgYXJndW1lbnQhCisKKz1pdGVtIEV4YW1wbGUgMworCitUaGUgY29uc3RydWN0b3Igb2YgYSBnZW5lcmF0ZWQgY2xhc3MgY2FuIGJlIHBhc3NlZCBhIGxpc3QKK29mIEk8ZWxlbWVudD49Pkk8dmFsdWU+IHBhaXJzLCB3aXRoIHdoaWNoIHRvIGluaXRpYWxpemUgdGhlIHN0cnVjdC4KK0lmIG5vIGluaXRpYWxpemVyIGlzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIGVsZW1lbnQsIGl0cyBkZWZhdWx0Citpbml0aWFsaXphdGlvbiBpcyBwZXJmb3JtZWQgaW5zdGVhZC4gSW5pdGlhbGl6ZXJzIGZvciBub24tZXhpc3RlbnQKK2VsZW1lbnRzIGFyZSBzaWxlbnRseSBpZ25vcmVkLgorCitOb3RlIHRoYXQgdGhlIGluaXRpYWxpemVyIGZvciBhIG5lc3RlZCBzdHJ1Y3QgaXMgc3BlY2lmaWVkCithcyBhbiBhbm9ueW1vdXMgaGFzaCBvZiBpbml0aWFsaXplcnMsIHdoaWNoIGlzIHBhc3NlZCBvbiB0byB0aGUgbmVzdGVkCitzdHJ1Y3QncyBjb25zdHJ1Y3Rvci4KKworCisgICAgdXNlIEF1dG9tYWtlOjpTdHJ1Y3Q7CisKKyAgICBzdHJ1Y3QgQnJlZWQgPT4KKyAgICB7CisgICAgICAgIG5hbWUgID0+ICckJywKKyAgICAgICAgY3Jvc3MgPT4gJyQnLAorICAgIH07CisKKyAgICBzdHJ1Y3QgQ2F0ID0+CisgICAgWworICAgICAgICBuYW1lICAgICA9PiAnJCcsCisgICAgICAgIGtpdHRlbnMgID0+ICdAJywKKyAgICAgICAgbWFya2luZ3MgPT4gJyUnLAorICAgICAgICBicmVlZCAgICA9PiAnQnJlZWQnLAorICAgIF07CisKKworICAgIG15ICRjYXQgPSBDYXQtPm5ldyggbmFtZSAgICAgPT4gJ1NvY2tzJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGtpdHRlbnMgID0+IFsnTW9uaWNhJywgJ0tlbm5ldGgnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtpbmdzID0+IHsgc29ja3M9PjEsIGJsYXplPT4id2hpdGUiIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBicmVlZCAgICA9PiB7IG5hbWU9PidzaG9ydC1oYWlyJywgY3Jvc3M9PjEgfSwKKyAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgcHJpbnQgIk9uY2UgYSBjYXQgY2FsbGVkICIsICRjYXQtPm5hbWUsICJcbiI7CisgICAgcHJpbnQgIih3aGljaCB3YXMgYSAiLCAkY2F0LT5icmVlZC0+bmFtZSwgIilcbiI7CisgICAgcHJpbnQgImhhZCB0d28ga2l0dGVuczogIiwgam9pbignIGFuZCAnLCBAeyRjYXQtPmtpdHRlbnN9KSwgIlxuIjsKKworPWJhY2sKKworPWhlYWQxIEF1dGhvciBhbmQgTW9kaWZpY2F0aW9uIEhpc3RvcnkKKworTW9kaWZpZWQgYnkgQWtpbSBEZW1haWxsZSwgMjAwMS0wOC0wMworCisgICAgUmVuYW1lIGFzIEF1dG9tYWtlOjpTdHJ1Y3QgdG8gYXZvaWQgbmFtZSBjbGFzaGVzIHdpdGgKKyAgICBDbGFzczo6U3RydWN0LgorCisgICAgTWFrZSBpdCBjb21wYXRpYmxlIHdpdGggUGVybCA1LjUuCisKK01vZGlmaWVkIGJ5IERhbWlhbiBDb253YXksIDE5OTktMDMtMDUsIHYwLjU4LgorCisgICAgQWRkZWQgaGFuZGxpbmcgb2YgaGFzaC1saWtlIGFyZyBsaXN0IHRvIGNsYXNzIGN0b3IuCisKKyAgICBDaGFuZ2VkIHRvIHR3by1hcmd1bWVudCBibGVzc2luZyBpbiBjdG9yIHRvIHN1cHBvcnQKKyAgICBkZXJpdmF0aW9uIGZyb20gY3JlYXRlZCBjbGFzc2VzLgorCisgICAgQWRkZWQgY2xhc3NuYW1lIHByZWZpeGVzIHRvIGtleXMgaW4gaGFzaC1iYXNlZCBjbGFzc2VzCisgICAgKHJlZmVyIHRvICJQZXJsIENvb2tib29rIiwgUmVjaXBlIDEzLjEyIGZvciByYXRpb25hbGUpLgorCisgICAgQ29ycmVjdGVkIGJlaGF2aW9yIG9mIGFjY2Vzc29ycyBmb3IgJypAJyBhbmQgJyolJyBzdHJ1Y3QKKyAgICBlbGVtZW50cy4gIFBhY2thZ2Ugbm93IGltcGxlbWVudHMgZG9jdW1lbnRlZCBiZWhhdmlvciB3aGVuCisgICAgcmV0dXJuaW5nIGEgcmVmZXJlbmNlIHRvIGFuIGVudGlyZSBoYXNoIG9yIGFycmF5IGVsZW1lbnQuCisgICAgUHJldmlvdXNseSB0aGVzZSB3ZXJlIHJldHVybmVkIGFzIGEgcmVmZXJlbmNlIHRvIGEgcmVmZXJlbmNlCisgICAgdG8gdGhlIGVsZW1lbnQuCisKKworUmVuYW1lZCB0byBDPENsYXNzOjpTdHJ1Y3Q+IGFuZCBtb2RpZmllZCBieSBKaW0gTWluZXIsIDE5OTctMDQtMDIuCisKKyAgICBtZW1iZXJzKCkgZnVuY3Rpb24gcmVtb3ZlZC4KKyAgICBEb2N1bWVudGF0aW9uIGNvcnJlY3RlZCBhbmQgZXh0ZW5kZWQuCisgICAgVXNlIG9mIHN0cnVjdCgpIGluIGEgc3ViY2xhc3MgcHJvaGliaXRlZC4KKyAgICBVc2VyIGRlZmluaXRpb24gb2YgYWNjZXNzb3IgYWxsb3dlZC4KKyAgICBUcmVhdG1lbnQgb2YgJyonIGluIGVsZW1lbnQgdHlwZXMgY29ycmVjdGVkLgorICAgIFRyZWF0bWVudCBvZiBjbGFzc2VzIGFzIGVsZW1lbnQgdHlwZXMgY29ycmVjdGVkLgorICAgIENsYXNzIG5hbWUgdG8gc3RydWN0KCkgbWFkZSBvcHRpb25hbC4KKyAgICBEaWFnbm9zdGljIGNoZWNrcyBhZGRlZC4KKworCitPcmlnaW5hbGx5IEM8Q2xhc3M6OlRlbXBsYXRlPiBieSBEZWFuIFJvZWhyaWNoLgorCisgICAgIyBUZW1wbGF0ZS5wbSAgIC0tLSBzdHJ1Y3QvbWVtYmVyIHRlbXBsYXRlIGJ1aWxkZXIKKyAgICAjICAgMTJtYXI5NQorICAgICMgICBEZWFuIFJvZWhyaWNoCisgICAgIworICAgICMgY2hhbmdlcy9idWdzIGZpeGVkIHNpbmNlIDI4bm92OTQgdmVyc2lvbjoKKyAgICAjICAtIHBvZGlmaWVkCisgICAgIyBjaGFuZ2VzL2J1Z3MgZml4ZWQgc2luY2UgMjFub3Y5NCB2ZXJzaW9uOgorICAgICMgIC0gRml4ZWQgZXhhbXBsZXMuCisgICAgIyBjaGFuZ2VzL2J1Z3MgZml4ZWQgc2luY2UgMDJzZXA5NCB2ZXJzaW9uOgorICAgICMgIC0gTW92ZWQgdG8gQ2xhc3M6OlRlbXBsYXRlLgorICAgICMgY2hhbmdlcy9idWdzIGZpeGVkIHNpbmNlIDIwZmViOTQgdmVyc2lvbjoKKyAgICAjICAtIFVwZGF0ZWQgdG8gYmUgYSBtb3JlIHByb3BlciBtb2R1bGUuCisgICAgIyAgLSBBZGRlZCAidXNlIHN0cmljdCIuCisgICAgIyAgLSBCdWcgaW4gYnVpbGRfbWV0aG9kcywgd2FzIHVzaW5nIEB2YXIgd2hlbiBAJHZhciBuZWVkZWQuCisgICAgIyAgLSBOb3cgdXNpbmcgbXkoKSByYXRoZXIgdGhhbiBsb2NhbCgpLgorICAgICMKKyAgICAjIFVzZXMgcGVybDUgY2xhc3NlcyB0byBjcmVhdGUgbmVzdGVkIGRhdGEgdHlwZXMuCisgICAgIyBUaGlzIGlzIG9mZmVyZWQgYXMgb25lIGltcGxlbWVudGF0aW9uIG9mIFRvbSBDaHJpc3RpYW5zZW4ncyAic3RydWN0cy5wbCIKKyAgICAjIGlkZWEuCisKKz1jdXQKKworIyMjIFNldHVwICJHTlUiIHN0eWxlIGZvciBwZXJsLW1vZGUgYW5kIGNwZXJsLW1vZGUuCisjIyBMb2NhbCBWYXJpYWJsZXM6CisjIyBwZXJsLWluZGVudC1sZXZlbDogMgorIyMgcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1pbWFnaW5hcnktb2Zmc2V0OiAwCisjIyBwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWluZGVudC1sZXZlbDogMgorIyMgY3BlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1leHRyYS1uZXdsaW5lLWJlZm9yZS1icmFjZTogdAorIyMgY3BlcmwtbWVyZ2UtdHJhaWxpbmctZWxzZTogbmlsCisjIyBjcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgRW5kOgpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9BdXRvbWFrZS9WYXJEZWYucG0gYi9zaGFyZS9hdXRvbWFrZS0xLjExL0F1dG9tYWtlL1ZhckRlZi5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2JhMTU1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9BdXRvbWFrZS9WYXJEZWYucG0KQEAgLTAsMCArMSwzNTQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK3BhY2thZ2UgQXV0b21ha2U6OlZhckRlZjsKK3VzZSBzdHJpY3Q7Cit1c2UgQ2FycDsKK3VzZSBBdXRvbWFrZTo6Q2hhbm5lbERlZnM7Cit1c2UgQXV0b21ha2U6Okl0ZW1EZWY7CisKK3JlcXVpcmUgRXhwb3J0ZXI7Cit1c2UgdmFycyAnQElTQScsICdARVhQT1JUJzsKK0BJU0EgPSBxdy9BdXRvbWFrZTo6SXRlbURlZiBFeHBvcnRlci87CitARVhQT1JUID0gcXcgKCZWQVJfQVVUT01BS0UgJlZBUl9DT05GSUdVUkUgJlZBUl9NQUtFRklMRQorCSAgICAgICZWQVJfQVNJUyAmVkFSX1BSRVRUWSAmVkFSX1NJTEVOVCAmVkFSX1NPUlRFRCk7CisKKz1oZWFkMSBOQU1FCisKK0F1dG9tYWtlOjpWYXJEZWYgLSBhIGNsYXNzIGZvciB2YXJpYWJsZSBkZWZpbml0aW9ucworCis9aGVhZDEgU1lOT1BTSVMKKworICB1c2UgQXV0b21ha2U6OlZhckRlZjsKKyAgdXNlIEF1dG9tYWtlOjpMb2NhdGlvbjsKKworICAjIENyZWF0ZSBhIFZhckRlZiBmb3IgYSBkZWZpbml0aW9uIHN1Y2ggYXMKKyAgIyB8ICMgYW55IGNvbW1lbnQKKyAgIyB8IGZvbyA9IGJhciAjIG1vcmUgY29tbWVudAorICAjIGluIE1ha2VmaWxlLmFtCisgIG15ICRsb2MgPSBuZXcgQXV0b21ha2U6OkxvY2F0aW9uICdNYWtlZmlsZS5hbToyJzsKKyAgbXkgJGRlZiA9IG5ldyBBdXRvbWFrZTo6VmFyRGVmICgnZm9vJywgJ2JhciAjIG1vcmUgY29tbWVudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgYW55IGNvbW1lbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsb2MsICcnLCBWQVJfTUFLRUZJTEUsIFZBUl9BU0lTKTsKKworICAjIEFwcGVuZGluZyB0byBhIGRlZmluaXRpb24uCisgICRkZWYtPmFwcGVuZCAoJ3ZhbHVlIHRvIGFwcGVuZCcsICdjb21tZW50IHRvIGFwcGVuZCcpOworCisgICMgQWNjZXNzb3JzLgorICBteSAkdmFsdWUgICAgPSAkZGVmLT52YWx1ZTsgICMgd2l0aCB0cmFpbGluZyBgIycgY29tbWVudHMgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjb250aW51YXRpb24gKCJcXFxuIikgb21pdHRlZC4KKyAgbXkgJHZhbHVlICAgID0gJGRlZi0+cmF3X3ZhbHVlOyAjIHRoZSByZWFsIHZhbHVlLCBhcyBwYXNzZWQgdG8gbmV3KCkuCisgIG15ICRjb21tZW50ICA9ICRkZWYtPmNvbW1lbnQ7CisgIG15ICRsb2NhdGlvbiA9ICRkZWYtPmxvY2F0aW9uOworICBteSAkdHlwZSAgICAgPSAkZGVmLT50eXBlOworICBteSAkb3duZXIgICAgPSAkZGVmLT5vd25lcjsKKyAgbXkgJHByZXR0eSAgID0gJGRlZi0+cHJldHR5OworCisgICMgQ2hhbmdpbmcgb3duZXIuCisgICRkZWYtPnNldF9vd25lciAoVkFSX0NPTkZJR1VSRSwKKyAgICAgICAgICAgICAgICAgICBuZXcgQXV0b21ha2U6OkxvY2F0aW9uICdjb25maWd1cmUuYWM6MTUnKTsKKworICAjIE1hcmtpbmcgZXhhbWluZWQgZGVmaW5pdGlvbnMuCisgICRkZWYtPnNldF9zZWVuOworICBteSAkc2Vlbl9wID0gJGRlZi0+c2VlbjsKKworICAjIFByaW50aW5nIGEgdmFyaWFibGUgZm9yIGRlYnVnZ2luZy4KKyAgcHJpbnQgU1RERVJSICRkZWYtPmR1bXA7CisKKz1oZWFkMSBERVNDUklQVElPTgorCitUaGlzIGNsYXNzIGdhdGhlcnMgZGF0YSByZWxhdGVkIHRvIG9uZSBNYWtlZmlsZS12YXJpYWJsZSBkZWZpbml0aW9uLgorCis9aGVhZDIgQ29uc3RhbnRzCisKKz1vdmVyIDQKKworPWl0ZW0gQzxWQVJfQVVUT01BS0U+LCBDPFZBUl9DT05GSUdVUkU+LCBDPFZBUl9NQUtFRklMRT4KKworUG9zc2libGUgb3duZXJzIGZvciB2YXJpYWJsZXMuICBBIHZhcmlhYmxlIGNhbiBiZSBkZWZpbmVkCitieSBBdXRvbWFrZSwgaW4gRjxjb25maWd1cmUuYWM+ICh1c2luZyBDPEFDX1NVQlNUPiksIG9yIGluCit0aGUgdXNlcidzIEY8TWFrZWZpbGUuYW0+LgorCis9Y3V0CisKKyMgRGVmaW5lZCBzbyB0aGF0IHRoZSBvd25lciBvZiBhIHZhcmlhYmxlIGNhbiBvbmx5IGJlIGluY3JlYXNlZCAoZS5nCisjIEF1dG9tYWtlIHNob3VsZCBub3Qgb3ZlcnJpZGUgYSBjb25maWd1cmUgb3IgTWFrZWZpbGUgdmFyaWFibGUpLgordXNlIGNvbnN0YW50IFZBUl9BVVRPTUFLRSA9PiAwOyAjIFZhcmlhYmxlIGRlZmluZWQgYnkgQXV0b21ha2UuCit1c2UgY29uc3RhbnQgVkFSX0NPTkZJR1VSRSA9PiAxOyMgVmFyaWFibGUgZGVmaW5lZCBpbiBjb25maWd1cmUuYWMuCit1c2UgY29uc3RhbnQgVkFSX01BS0VGSUxFID0+IDI7ICMgVmFyaWFibGUgZGVmaW5lZCBpbiBNYWtlZmlsZS5hbS4KKworPWl0ZW0gQzxWQVJfQVNJUz4sIEM8VkFSX1BSRVRUWT4sIEM8VkFSX1NJTEVOVD4sIEM8VkFSX1NPUlRFRD4KKworUG9zc2libGUgcHJpbnQgc3R5bGVzLiAgQzxWQVJfQVNJUz4gdmFyaWFibGVzIHNob3VsZCBiZSBvdXRwdXQgYXMtaXMuCitDPFZBUl9QUkVUVFk+IHZhcmlhYmxlcyBhcmUgd3JhcHBlZCBvbiBtdWx0aXBsZSBsaW5lcyBpZiB0aGV5IGNhbm5vdAorZml0IG9uIG9uZS4gIEM8VkFSX1NJTEVOVD4gdmFyaWFibGVzIGFyZSBub3Qgb3V0cHV0IGF0IGFsbC4gIEZpbmFsbHksCitDPFZBUl9TT1JURUQ+IHZhcmlhYmxlcyBzaG91bGQgYmUgc29ydGVkIGFuZCB0aGVuIGhhbmRsZWQgYXMKK0M8VkFSX1BSRVRUWT4gdmFyaWFibGVzLgorCitDPFZBUl9TSUxFTlQ+IHZhcmlhYmxlcyBjYW4gYWxzbyBiZSBvdmVycmlkZGVuIHNpbGVudGx5ICh1bmxpa2UgdGhlCitvdGhlciBraW5kcyBvZiB2YXJpYWJsZXMgd2hvc2Ugb3ZlcnJpZGluZyBtYXkgc29tZXRpbWVzIHByb2R1Y2UKK3dhcm5pbmdzKS4KKworPWN1dAorCisjIFBvc3NpYmxlIHZhbHVlcyBmb3IgcHJldHR5LgordXNlIGNvbnN0YW50IFZBUl9BU0lTID0+IDA7CSMgT3V0cHV0IGFzLWlzLgordXNlIGNvbnN0YW50IFZBUl9QUkVUVFkgPT4gMTsJIyBQcmV0dHkgcHJpbnRlZCBvbiBvdXRwdXQuCit1c2UgY29uc3RhbnQgVkFSX1NJTEVOVCA9PiAyOwkjIE5vdCBvdXRwdXQuICAoQ2FuIGFsc28gYmUKKwkJCQkjIG92ZXJyaWRkZW4gc2lsZW50bHkuKQordXNlIGNvbnN0YW50IFZBUl9TT1JURUQgPT4gMzsJIyBTb3J0ZWQgYW5kIHByZXR0eS1wcmludGVkLgorCis9YmFjaworCis9aGVhZDIgTWV0aG9kcworCitDPFZhckRlZj4gZGVmaW5lcyB0aGUgZm9sbG93aW5nIG1ldGhvZHMgaW4gYWRkaXRpb24gdG8gdGhvc2UgaW5oZXJpdGVkCitmcm9tIEw8QXV0b21ha2U6Okl0ZW1EZWY+LgorCis9b3ZlciA0CisKKz1pdGVtIEM8bXkgJGRlZiA9IG5ldyBBdXRvbWFrZTo6VmFyRGVmICgkdmFybmFtZSwgJHZhbHVlLCAkY29tbWVudCwgJGxvY2F0aW9uLCAkdHlwZSwgJG93bmVyLCAkcHJldHR5KT4KKworQ3JlYXRlIGEgbmV3IE1ha2VmaWxlLXZhcmlhYmxlIGRlZmluaXRpb24uICBDPCR2YXJuYW1lPiBpcyB0aGUgbmFtZSBvZgordGhlIHZhcmlhYmxlIGJlaW5nIGRlZmluZWQgYW5kIEM8JHZhbHVlPiBpdHMgdmFsdWUuCisKK0M8JGNvbW1lbnQ+IGlzIGFueSBjb21tZW50IHByZWNlZGluZyB0aGUgZGVmaW5pdGlvbi4gIChCZWNhdXNlCitBdXRvbWFrZSByZW9yZGVycyB2YXJpYWJsZSBkZWZpbml0aW9ucyBpbiB0aGUgb3V0cHV0LCBpdCBhbHNvIHRyaWVzIHRvCitjYXJyeSBjb21tZW50cyBhcm91bmQuKQorCitDPCRsb2NhdGlvbj4gaXMgdGhlIHBsYWNlIHdoZXJlIHRoZSBkZWZpbml0aW9uIG9jY3VycmVkLCBpdCBzaG91bGQgYmUKK2FuIGluc3RhbmNlIG9mIEw8QXV0b21ha2U6OkxvY2F0aW9uPi4KKworQzwkdHlwZT4gc2hvdWxkIGJlIEM8Jyc+IGZvciBkZWZpbml0aW9ucyBtYWRlIHdpdGggQzw9PiwgYW5kIEM8JzonPgorZm9yIHRob3NlIG1hZGUgd2l0aCBDPDo9Pi4KKworQzwkb3duZXI+IHNwZWNpZmllcyB3aG8gb3ducyB0aGUgdmFyaWFibGVzLCBpdCBjYW4gYmUgb25lIG9mCitDPFZBUl9BVVRPTUFLRT4sIEM8VkFSX0NPTkZJR1VSRT4sIG9yIEM8VkFSX01BS0VGSUxFPiAoc2VlIHRoZXNlCitkZWZpbml0aW9ucykuCisKK0ZpbmFsbHksIEM8JHByZXR0eT4gdGVsbHMgaG93IHRoZSB2YXJpYWJsZSBzaG91bGQgYmUgb3V0cHV0LCBhbmQgY2FuCitiZSBvbmUgb2YgQzxWQVJfQVNJUz4sIEM8VkFSX1BSRVRUWT4sIG9yIEM8VkFSX1NJTEVOVD4sIG9yCitDPFZBUl9TT1JURUQ+IChzZWUgdGhlc2UgZGVmaW5pdGlvbnMpLgorCis9Y3V0CisKK3N1YiBuZXcgKCQkJCQkJCQkKQoreworICBteSAoJGNsYXNzLCAkdmFyLCAkdmFsdWUsICRjb21tZW50LCAkbG9jYXRpb24sICR0eXBlLCAkb3duZXIsICRwcmV0dHkpID0gQF87CisKKyAgIyBBIHVzZXIgdmFyaWFibGUgbXVzdCBiZSBzZXQgYnkgZWl0aGVyIGA9JyBvciBgOj0nLCBhbmQgbGF0ZXIKKyAgIyBwcm9tb3RlZCB0byBgKz0nLgorICBpZiAoJG93bmVyICE9IFZBUl9BVVRPTUFLRSAmJiAkdHlwZSBlcSAnKycpCisgICAgeworICAgICAgZXJyb3IgJGxvY2F0aW9uLCAiJHZhciBtdXN0IGJlIHNldCB3aXRoIGA9JyBiZWZvcmUgdXNpbmcgYCs9JyI7CisgICAgfQorCisgIG15ICRzZWxmID0gQXV0b21ha2U6Okl0ZW1EZWY6Om5ldyAoJGNsYXNzLCAkY29tbWVudCwgJGxvY2F0aW9uLCAkb3duZXIpOworICAkc2VsZi0+eyd2YWx1ZSd9ID0gJHZhbHVlOworICAkc2VsZi0+eyd0eXBlJ30gPSAkdHlwZTsKKyAgJHNlbGYtPnsncHJldHR5J30gPSAkcHJldHR5OworICAkc2VsZi0+eydzZWVuJ30gPSAwOworICByZXR1cm4gJHNlbGY7Cit9CisKKz1pdGVtIEM8JGRlZi1FPGd0PmFwcGVuZCAoJHZhbHVlLCAkY29tbWVudCk+CisKK0FwcGVuZCBDPCR2YWx1ZT4gYW5kIDwkY29tbWVudD4gdG8gdGhlIGV4aXN0aW5nIHZhbHVlIGFuZCBjb21tZW50IG9mCitDPCRkZWY+LiAgVGhpcyBpcyBub3JtYWxseSBjYWxsZWQgb24gQzwrPT4gZGVmaW5pdGlvbnMuCisKKz1jdXQKKworc3ViIGFwcGVuZCAoJCQkKQoreworICBteSAoJHNlbGYsICR2YWx1ZSwgJGNvbW1lbnQpID0gQF87CisgICRzZWxmLT57J2NvbW1lbnQnfSAuPSAkY29tbWVudDsKKworICBteSAkdmFsID0gJHNlbGYtPnsndmFsdWUnfTsKKworICAjIFN0cmlwIGNvbW1lbnRzIGZyb20gYXVnbWVudGVkIHZhcmlhYmxlcy4gIFRoaXMgaXMgc28gdGhhdAorICAjICAgVkFSID0gZm9vICMgY29tCisgICMgICBWQVIgKz0gYmFyCisgICMgZG9lcyBub3QgYmVjb21lCisgICMgICBWQVIgPSBmb28gIyBjb20gYmFyCisgICMgRnVydGhlcm1vcmUga2VlcGluZyBgIycgd291bGQgbm90IGJlIHBvcnRhYmxlIGlmIHRoZSB2YXJpYWJsZSBpcworICAjIG91dHB1dCBvbiBtdWx0aXBsZSBsaW5lcy4KKyAgJHZhbCA9fiBzLyA/Iy4qLy87CisKKyAgaWYgKGNob21wICR2YWwpCisgICAgeworICAgICAgIyBJbnNlcnQgYSBiYWNrc2xhc2ggYmVmb3JlIGEgdHJhaWxpbmcgbmV3bGluZS4KKyAgICAgICR2YWwgLj0gIlxcXG4iOworICAgIH0KKyAgZWxzaWYgKCR2YWwpCisgICAgeworICAgICAgIyBJbnNlcnQgYSBzZXBhcmF0b3IuCisgICAgICAkdmFsIC49ICcgJzsKKyAgICB9CisgICRzZWxmLT57J3ZhbHVlJ30gPSAkdmFsIC4gJHZhbHVlOworICAjIFR1cm4gQVNJUyBhcHBlbmRlZCB2YXJpYWJsZXMgaW50byBQUkVUVFkgdmFyaWFibGVzLiAgVGhpcyBpcyB0bworICAjIGNvcGUgd2l0aCBgbWFrZScgaW1wbGVtZW50YXRpb24gdGhhdCBjYW5ub3QgcmVhZCB2ZXJ5IGxvbmcgbGluZXMuCisgICRzZWxmLT57J3ByZXR0eSd9ID0gVkFSX1BSRVRUWSBpZiAkc2VsZi0+eydwcmV0dHknfSA9PSBWQVJfQVNJUzsKK30KKworPWl0ZW0gQzwkZGVmLUU8Z3Q+dmFsdWU+CisKKz1pdGVtIEM8JGRlZi1FPGd0PnR5cGU+CisKKz1pdGVtIEM8JGRlZi1FPGd0PnByZXR0eT4KKworQWNjZXNzb3JzIHRvIHRoZSB2YXJpb3VzIGNvbnN0aXR1ZW50cyBvZiBhIEM8VmFyRGVmPi4gIFNlZSB0aGUKK2RvY3VtZW50YXRpb24gb2YgQzxuZXc+J3MgYXJndW1lbnRzIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZXNlLgorCis9Y3V0CisKK3N1YiB2YWx1ZSAoJCkKK3sKKyAgbXkgKCRzZWxmKSA9IEBfOworICBteSAkdmFsID0gJHNlbGYtPnJhd192YWx1ZTsKKyAgIyBTdHJpcCBhbnl0aGluZyBwYXN0IGAjJy4gIGAjJyBjaGFyYWN0ZXJzIGNhbm5vdCBiZSBlc2NhcGVkCisgICMgaW4gTWFrZWZpbGVzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGJlIHNtYXJ0LgorICAkdmFsID1+IHMvIy4qJC8vczsKKyAgIyBTdHJpcCBiYWNrc2xhc2hlcy4KKyAgJHZhbCA9fiBzL1xcJC8gL21nOworICByZXR1cm4gJHZhbDsKK30KKworc3ViIHJhd192YWx1ZSAoJCkKK3sKKyAgbXkgKCRzZWxmKSA9IEBfOworICByZXR1cm4gJHNlbGYtPnsndmFsdWUnfTsKK30KKworc3ViIHR5cGUgKCQpCit7CisgIG15ICgkc2VsZikgPSBAXzsKKyAgcmV0dXJuICRzZWxmLT57J3R5cGUnfTsKK30KKworc3ViIHByZXR0eSAoJCkKK3sKKyAgbXkgKCRzZWxmKSA9IEBfOworICByZXR1cm4gJHNlbGYtPnsncHJldHR5J307Cit9CisKKz1pdGVtIEM8JGRlZi1FPGd0PnNldF9vd25lciAoJG93bmVyLCAkbG9jYXRpb24pPgorCitDaGFuZ2UgdGhlIG93bmVyIG9mIGEgZGVmaW5pdGlvbi4gIFRoaXMgdXN1YWxseSBoYXBwZW5zIGJlY2F1c2UKK3RoZSB1c2VyIHVzZWQgQzwrPT4gb24gYW4gQXV0b21ha2UgdmFyaWFibGUsIHNvIChzKWhlIG5vdyBvd25zCit0aGUgY29udGVudC4gIEM8JGxvY2F0aW9uPiBzaG91bGQgYmUgYW4gaW5zdGFuY2Ugb2YgTDxBdXRvbWFrZTo6TG9jYXRpb24+CitpbmRpY2F0aW5nIHdoZXJlIHRoZSBjaGFuZ2UgdG9vayBwbGFjZS4KKworPWN1dAorCitzdWIgc2V0X293bmVyICgkJCQpCit7CisgIG15ICgkc2VsZiwgJG93bmVyLCAkbG9jYXRpb24pID0gQF87CisgICMgV2UgYWx3YXlzIGFkanVzdCB0aGUgbG9jYXRpb24gd2hlbiB0aGUgb3duZXIgY2hhbmdlcyAoZXZlbiBmb3IKKyAgIyBgKz0nIHN0YXRlbWVudHMpLiAgVGhlIHJpc2sgb3RoZXJ3aXNlIGlzIHRvIHdhcm4gYWJvdXQKKyAgIyBhIFZBUl9NQUtFRklMRSB2YXJpYWJsZSBhbmQgbG9jYXRlIGl0IGluIGNvbmZpZ3VyZS5hYy4uLgorICAkc2VsZi0+eydvd25lcid9ID0gJG93bmVyOworICAkc2VsZi0+eydsb2NhdGlvbid9ID0gJGxvY2F0aW9uOworfQorCis9aXRlbSBDPCRkZWYtRTxndD5zZXRfc2Vlbj4KKworPWl0ZW0gQzwkYm9vbCA9ICRkZWYtRTxndD5zZWVuPgorCitUaGVzZSBmdW5jdGlvbiBhbGxvd3MgQXV0b21ha2UgdG8gbWFyayAoQzxzZXRfc2Vlbj4pIHZhcmlhYmxlIHRoYXQKK2l0IGhhcyBleGFtaW5lZCBpbiBzb21lIHdheSwgYW5kIGxhdHRlciBjaGVjayAodXNpbmcgQzxzZWVuPikgZm9yCit1bnVzZWQgdmFyaWFibGVzLiAgVW51c2VkIHZhcmlhYmxlcyB1c3VhbGx5IGluZGljYXRlIHR5cG9zLgorCis9Y3V0CisKK3N1YiBzZXRfc2VlbiAoJCkKK3sKKyAgbXkgKCRzZWxmKSA9IEBfOworICAkc2VsZi0+eydzZWVuJ30gPSAxOworfQorCitzdWIgc2VlbiAoJCkKK3sKKyAgbXkgKCRzZWxmKSA9IEBfOworICByZXR1cm4gJHNlbGYtPnsnc2Vlbid9OworfQorCis9aXRlbSBDPCRzdHIgPSAkZGVmLUU8Z3Q+ZHVtcD4KKworRm9ybWF0IHRoZSBjb250ZW50cyBvZiBDPCRkZWY+IGFzIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nLAorZm9yIGRlYnVnZ2luZy4KKworPWN1dAorCitzdWIgZHVtcCAoJCkKK3sKKyAgbXkgKCRzZWxmKSA9IEBfOworICBteSAkb3duZXIgPSAkc2VsZi0+b3duZXI7CisKKyAgaWYgKCRvd25lciA9PSBWQVJfQVVUT01BS0UpCisgICAgeworICAgICAgJG93bmVyID0gJ0F1dG9tYWtlJzsKKyAgICB9CisgIGVsc2lmICgkb3duZXIgPT0gVkFSX0NPTkZJR1VSRSkKKyAgICB7CisgICAgICAkb3duZXIgPSAnQ29uZmlndXJlJzsKKyAgICB9CisgIGVsc2lmICgkb3duZXIgPT0gVkFSX01BS0VGSUxFKQorICAgIHsKKyAgICAgICRvd25lciA9ICdNYWtlZmlsZSc7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcHJvZ19lcnJvciAoInVuZXhwZWN0ZWQgb3duZXIiKTsKKyAgICB9CisKKyAgbXkgJHdoZXJlID0gJHNlbGYtPmxvY2F0aW9uLT5kdW1wOworICBteSAkY29tbWVudCA9ICRzZWxmLT5jb21tZW50OworICBteSAkdmFsdWUgPSAkc2VsZi0+cmF3X3ZhbHVlOworICBteSAkdHlwZSA9ICRzZWxmLT50eXBlOworCisgIHJldHVybiAieworICAgICAgdHlwZTogJHR5cGU9CisgICAgICB3aGVyZTogJHdoZXJlICAgICAgY29tbWVudDogJGNvbW1lbnQKKyAgICAgIHZhbHVlOiAkdmFsdWUKKyAgICAgIG93bmVyOiAkb3duZXIKKyAgICB9XG4iOworfQorCis9YmFjaworCis9aGVhZDEgU0VFIEFMU08KKworTDxBdXRvbWFrZTo6VmFyaWFibGU+LCBMPEF1dG9tYWtlOjpJdGVtRGVmPi4KKworPWN1dAorCisxOworCisjIyMgU2V0dXAgIkdOVSIgc3R5bGUgZm9yIHBlcmwtbW9kZSBhbmQgY3BlcmwtbW9kZS4KKyMjIExvY2FsIFZhcmlhYmxlczoKKyMjIHBlcmwtaW5kZW50LWxldmVsOiAyCisjIyBwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLWltYWdpbmFyeS1vZmZzZXQ6IDAKKyMjIHBlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtaW5kZW50LWxldmVsOiAyCisjIyBjcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWV4dHJhLW5ld2xpbmUtYmVmb3JlLWJyYWNlOiB0CisjIyBjcGVybC1tZXJnZS10cmFpbGluZy1lbHNlOiBuaWwKKyMjIGNwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBFbmQ6CmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL0F1dG9tYWtlL1ZhcmlhYmxlLnBtIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9BdXRvbWFrZS9WYXJpYWJsZS5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGM4NjdmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9BdXRvbWFrZS9WYXJpYWJsZS5wbQpAQCAtMCwwICsxLDE2ODggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK3BhY2thZ2UgQXV0b21ha2U6OlZhcmlhYmxlOwordXNlIHN0cmljdDsKK3VzZSBDYXJwOworCit1c2UgQXV0b21ha2U6OkNoYW5uZWxzOwordXNlIEF1dG9tYWtlOjpDaGFubmVsRGVmczsKK3VzZSBBdXRvbWFrZTo6Q29uZmlndXJlX2FjOwordXNlIEF1dG9tYWtlOjpJdGVtOwordXNlIEF1dG9tYWtlOjpWYXJEZWY7Cit1c2UgQXV0b21ha2U6OkNvbmRpdGlvbiBxdyAoVFJVRSBGQUxTRSk7Cit1c2UgQXV0b21ha2U6OkRpc2pDb25kaXRpb25zOwordXNlIEF1dG9tYWtlOjpHZW5lcmFsICd1bmlxJzsKK3VzZSBBdXRvbWFrZTo6V3JhcCAnbWFrZWZpbGVfd3JhcCc7CisKK3JlcXVpcmUgRXhwb3J0ZXI7Cit1c2UgdmFycyAnQElTQScsICdARVhQT1JUJywgJ0BFWFBPUlRfT0snOworQElTQSA9IHF3L0F1dG9tYWtlOjpJdGVtIEV4cG9ydGVyLzsKK0BFWFBPUlQgPSBxdyAoZXJyX3ZhciBtc2dfdmFyIG1zZ19jb25kX3ZhciByZWplY3RfdmFyCisJICAgICAgdmFyIHJ2YXIgdmFyZGVmIHJ2YXJkZWYKKwkgICAgICB2YXJpYWJsZXMKKwkgICAgICBzY2FuX3ZhcmlhYmxlX2V4cGFuc2lvbnMgY2hlY2tfdmFyaWFibGVfZXhwYW5zaW9ucworCSAgICAgIHZhcmlhYmxlX2RlbGV0ZQorCSAgICAgIHZhcmlhYmxlc19kdW1wCisJICAgICAgc2V0X3NlZW4KKwkgICAgICByZXF1aXJlX3ZhcmlhYmxlcworCSAgICAgIHZhcmlhYmxlX3ZhbHVlCisJICAgICAgb3V0cHV0X3ZhcmlhYmxlcworCSAgICAgIHRyYW5zZm9ybV92YXJpYWJsZV9yZWN1cnNpdmVseSk7CisKKz1oZWFkMSBOQU1FCisKK0F1dG9tYWtlOjpWYXJpYWJsZSAtIHN1cHBvcnQgZm9yIHZhcmlhYmxlIGRlZmluaXRpb25zCisKKz1oZWFkMSBTWU5PUFNJUworCisgIHVzZSBBdXRvbWFrZTo6VmFyaWFibGU7CisgIHVzZSBBdXRvbWFrZTo6VmFyRGVmOworCisgICMgRGVmaW5pbmcgYSB2YXJpYWJsZS4KKyAgQXV0b21ha2U6OlZhcmlhYmxlOjpkZWZpbmUoJHZhcm5hbWUsICRvd25lciwgJHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb25kLCAkdmFsdWUsICRjb21tZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkd2hlcmUsICRwcmV0dHkpCisKKyAgIyBMb29raW5nIHVwIGEgdmFyaWFibGUuCisgIG15ICR2YXIgPSB2YXIgJHZhcm5hbWU7CisgIGlmICgkdmFyKQorICAgIHsKKyAgICAgIC4uLgorICAgIH0KKworICAjIExvb2tpbmcgdXAgYSB2YXJpYWJsZSB0aGF0IGlzIGFzc3VtZWQgdG8gZXhpc3QuCisgIG15ICR2YXIgPSBydmFyICR2YXJuYW1lOworCisgICMgVGhlIGxpc3Qgb2YgY29uZGl0aW9ucyB3aGVyZSAkdmFyIGhhcyBiZWVuIGRlZmluZWQuCisgICMgKCR2YXItPmNvbmRpdGlvbnMgaXMgYW4gQXV0b21ha2U6OkRpc2pDb25kaXRpb25zLAorICAjICR2YXItPmNvbmRpdGlvbnMtPmNvbmRzIGlzIGEgbGlzdCBvZiBBdXRvbWFrZTo6Q29uZGl0aW9uLikKKyAgbXkgQGNvbmRzID0gJHZhci0+Y29uZGl0aW9ucy0+Y29uZHMKKworICAjIEFjY2VzcyB0byB0aGUgZGVmaW5pdGlvbiBpbiBDb25kaXRpb24gJGNvbmQuCisgICMgJGRlZiBpcyBhbiBBdXRvbWFrZTo6VmFyRGVmLgorICBteSAkZGVmID0gJHZhci0+ZGVmICgkY29uZCk7CisgIGlmICgkZGVmKQorICAgIHsKKyAgICAgIC4uLgorICAgIH0KKworICAjIFdoZW4gdGhlIGNvbmRpdGlvbmFsIGRlZmluaXRpb24gaXMgYXNzdW1lZCB0byBleGlzdCwgdXNlCisgIG15ICRkZWYgPSAkdmFyLT5yZGVmICgkY29uZCk7CisKKworPWhlYWQxIERFU0NSSVBUSU9OCisKK1RoaXMgcGFja2FnZSBwcm92aWRlcyBzdXBwb3J0IGZvciBNYWtlZmlsZSB2YXJpYWJsZSBkZWZpbml0aW9ucy4KKworQW4gQzxBdXRvbWFrZTo6VmFyaWFibGU+IGlzIGEgdmFyaWFibGUgbmFtZSBhc3NvY2lhdGVkIHRvIHBvc3NpYmx5CittYW55IGNvbmRpdGlvbmFsIGRlZmluaXRpb25zLiAgVGhlc2UgZGVmaW5pdGlvbnMgYXJlIGluc3RhbmNlcworb2YgQzxBdXRvbWFrZTo6VmFyRGVmPi4KKworVGhlcmVmb3JlIG9idGFpbmluZyB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZSB1bmRlciBhIGdpdmVuCitjb25kaXRpb24gaW52b2x2ZXMgdHdvIGxvb2t1cHMuICBPbmUgdG8gbG9vayB1cCB0aGUgdmFyaWFibGUsCithbmQgb25lIHRvIGxvb2sgdXAgdGhlIGNvbmRpdGlvbmFsIGRlZmluaXRpb246CisKKyAgbXkgJHZhciA9IHZhciAkbmFtZTsKKyAgaWYgKCR2YXIpCisgICAgeworICAgICAgbXkgJGRlZiA9ICR2YXItPmRlZiAoJGNvbmQpOworICAgICAgaWYgKCRkZWYpCisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gJGRlZi0+dmFsdWU7CisgICAgICAgIH0KKyAgICAgIC4uLgorICAgIH0KKyAgLi4uCisKK1doZW4gaXQgaXMga25vd24gdGhhdCB0aGUgdmFyaWFibGUgYW5kIHRoZSBkZWZpbml0aW9uCitiZWluZyBsb29rZWQgdXAgZXhpc3QsIHRoZSBhYm92ZSBjYW4gYmUgc2ltcGxpZmllZCB0bworCisgIHJldHVybiB2YXIgKCRuYW1lKS0+ZGVmICgkY29uZCktPnZhbHVlOyAjIERvIG5vdCB3cml0ZSB0aGlzLgorCitidXQgaXMgYmV0dGVyIHdyaXR0ZW4KKworICByZXR1cm4gcnZhciAoJG5hbWUpLT5yZGVmICgkY29uZCktPnZhbHVlOworCitvciBldmVuCisKKyAgcmV0dXJuIHJ2YXJkZWYgKCRuYW1lLCAkY29uZCktPnZhbHVlOworCitUaGUgSTxyPiB2YXJpYW50cyBvZiB0aGUgQzx2YXI+LCBDPGRlZj4sIGFuZCBDPHZhcmRlZj4gbWV0aG9kcyBhZGQgYW4KK2V4dHJhIHRlc3QgdG8gZW5zdXJlIHRoYXQgdGhlIGxvb2t1cCBzdWNjZWVkZWQsIGFuZCB3aWxsIGRpYWdub3NlCitmYWlsdXJlcyBhcyBpbnRlcm5hbCBlcnJvcnMgKHdpdGggYSBtZXNzYWdlIHdoaWNoIGlzIG11Y2ggbW9yZQoraW5mb3JtYXRpdmUgdGhhbiBQZXJsJ3Mgd2FybmluZyBhYm91dCBjYWxsaW5nIGEgbWV0aG9kIG9uIGEKK25vbi1vYmplY3QpLgorCis9Y3V0CisKK215ICRfVkFSSUFCTEVfQ0hBUkFDVEVSUyA9ICdbLkEtWmEtejAtOV9AXSsnOworbXkgJF9WQVJJQUJMRV9QQVRURVJOID0gJ14nIC4gJF9WQVJJQUJMRV9DSEFSQUNURVJTIC4gIlwkIjsKK215ICRfVkFSSUFCTEVfUkVDVVJTSVZFX1BBVFRFUk4gPQorICAgICdeKFsuQS1aYS16MC05X0BdfFwkWyh7XScgLiAkX1ZBUklBQkxFX0NIQVJBQ1RFUlMgLiAnW30pXT8pKycgLiAiXCQiOworCisjIFRoZSBvcmRlciBpbiB3aGljaCB2YXJpYWJsZXMgc2hvdWxkIGJlIG91dHB1dC4gIChNYXkgY29udGFpbgorIyBkdXBsaWNhdGVzIC0tIG9ubHkgdGhlIGZpcnN0IG9jY3VycmVuY2UgbWF0dGVycy4pCitteSBAX3Zhcl9vcmRlcjsKKworIyBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB2YXJpYWJsZXMgZGVmaW5lZCBieSAmX2dlbl92YXJuYW1lLgorIyAkX2dlbl92YXJuYW1leyRiYXNlfSBpcyBhIGhhc2ggZm9yIGFsbCB2YXJpYWJsZXMgZGVmaW5lZCB3aXRoCisjIHByZWZpeCBgJGJhc2UnLiAgVmFsdWVzIHN0b3JlZCBpbiB0aGlzIGhhc2ggYXJlIHRoZSB2YXJpYWJsZSBuYW1lcy4KKyMgS2V5cyBoYXZlIHRoZSBmb3JtICIoQ09ORDEpVkFMMShDT05EMilWQUwyLi4uIiB3aGVyZSBWQUwxIGFuZCBWQUwyCisjIGFyZSB0aGUgdmFsdWVzIG9mIHRoZSB2YXJpYWJsZSBmb3IgY29uZGl0aW9uIENPTkQxIGFuZCBDT05EMi4KK215ICVfZ2VuX3Zhcm5hbWUgPSAoKTsKKyMgJF9nZW5fdmFybmFtZV9ueyRiYXNlfSBpcyB0aGUgbnVtYmVyIG9mIHZhcmlhYmxlcyBnZW5lcmF0ZWQgYnkKKyMgX2dlbl92YXJuYW1lKCkgZm9yICRiYXNlLiAgVGhpcyBpcyBub3QgdGhlIHNhbWUgYXMga2V5cworIyAleyRfZ2VuX3Zhcm5hbWV7JGJhc2V9fSBiZWNhdXNlICVfZ2VuX3Zhcm5hbWUgbWF5IGFsc28gY29udGFpbgorIyB2YXJpYWJsZXMgbm90IGdlbmVyYXRlZCBieSBfZ2VuX3Zhcm5hbWUuCitteSAlX2dlbl92YXJuYW1lX24gPSAoKTsKKworIyBEZWNsYXJlIHRoZSBtYWNyb3MgdGhhdCBkZWZpbmUga25vd24gdmFyaWFibGVzLCBzbyB3ZSBjYW4KKyMgaGludCB0aGUgdXNlciBpZiBzaGUgdHJ5IHRvIHVzZSBvbmUgb2YgdGhlc2UgdmFyaWFibGVzLgorCisjIE1hY3JvcyBhY2Nlc3NpYmxlIHZpYSBhY2xvY2FsLgorbXkgJV9hbV9tYWNyb19mb3JfdmFyID0KKyAgKAorICAgQU5TSTJLTlIgPT4gJ0FNX0NfUFJPVE9UWVBFUycsCisgICBDQ0FTID0+ICdBTV9QUk9HX0FTJywKKyAgIENDQVNGTEFHUyA9PiAnQU1fUFJPR19BUycsCisgICBFTUFDUyA9PiAnQU1fUEFUSF9MSVNQRElSJywKKyAgIEdDSiA9PiAnQU1fUFJPR19HQ0onLAorICAgTEVYID0+ICdBTV9QUk9HX0xFWCcsCisgICBMSUJUT09MID0+ICdBQ19QUk9HX0xJQlRPT0wnLAorICAgbGlzcGRpciA9PiAnQU1fUEFUSF9MSVNQRElSJywKKyAgIHBrZ3B5ZXhlY2RpciA9PiAnQU1fUEFUSF9QWVRIT04nLAorICAgcGtncHl0aG9uZGlyID0+ICdBTV9QQVRIX1BZVEhPTicsCisgICBweWV4ZWNkaXIgPT4gJ0FNX1BBVEhfUFlUSE9OJywKKyAgIFBZVEhPTiA9PiAnQU1fUEFUSF9QWVRIT04nLAorICAgcHl0aG9uZGlyID0+ICdBTV9QQVRIX1BZVEhPTicsCisgICBVID0+ICdBTV9DX1BST1RPVFlQRVMnLAorICAgKTsKKworIyBNYWNyb3Mgc2hpcHBlZCB3aXRoIEF1dG9jb25mLgorbXkgJV9hY19tYWNyb19mb3JfdmFyID0KKyAgKAorICAgQUxMT0NBID0+ICdBQ19GVU5DX0FMTE9DQScsCisgICBDQyA9PiAnQUNfUFJPR19DQycsCisgICBDRkxBR1MgPT4gJ0FDX1BST0dfQ0MnLAorICAgQ1hYID0+ICdBQ19QUk9HX0NYWCcsCisgICBDWFhGTEFHUyA9PiAnQUNfUFJPR19DWFgnLAorICAgRjc3ID0+ICdBQ19QUk9HX0Y3NycsCisgICBGNzdGTEFHUyA9PiAnQUNfUFJPR19GNzcnLAorICAgRkMgPT4gJ0FDX1BST0dfRkMnLAorICAgRkNGTEFHUyA9PiAnQUNfUFJPR19GQycsCisgICBPQkpDID0+ICdBQ19QUk9HX09CSkMnLAorICAgT0JKQ0ZMQUdTID0+ICdBQ19QUk9HX09CSkMnLAorICAgUkFOTElCID0+ICdBQ19QUk9HX1JBTkxJQicsCisgICBVUEMgPT4gJ0FNX1BST0dfVVBDJywKKyAgIFVQQ0ZMQUdTID0+ICdBTV9QUk9HX1VQQycsCisgICBZQUNDID0+ICdBQ19QUk9HX1lBQ0MnLAorICAgKTsKKworIyBUaGUgbmFtZSBvZiB0aGUgY29uZmlndXJlLmFjIGZpbGUuCitteSAkY29uZmlndXJlX2FjID0gZmluZF9jb25maWd1cmVfYWM7CisKKyMgVmFyaWFibGVzIHRoYXQgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aG91dCBjb21wbGFpbnQgZnJvbSAtV292ZXJyaWRlCitteSAlX3NpbGVudF92YXJpYWJsZV9vdmVycmlkZSA9CisgIChBTV9NQUtFSU5GT0hUTUxGTEFHUyA9PiAxLAorICAgQVIgPT4gMSwKKyAgIEFSRkxBR1MgPT4gMSwKKyAgIERFSkFUT09MID0+IDEsCisgICBKQVZBQyA9PiAxLAorICAgSkFWQVJPT1QgPT4gMSk7CisKKyMgQ291bnQgb2YgaGVscGVyIHZhcmlhYmxlcyB1c2VkIHRvIGltcGxlbWVudCBjb25kaXRpb25hbCAnKz0nLgorbXkgJF9hcHBlbmR2YXI7CisKKyMgRWFjaCBjYWxsIHRvIEM8QXV0b21ha2U6OlZhcmlhYmxlOjp0cmF2ZXJzZV9yZWN1cnNpdmVseT4gZ2V0cyBhbgorIyB1bmlxdWUgbGFiZWwuIFRoaXMgaXMgdXNlZCB0byBkZXRlY3QgcmVjdXJzaXZlbHkgZGVmaW5lZCB2YXJpYWJsZXMuCitteSAkX3RyYXZlcnNhbCA9IDA7CisKKworPWhlYWQyIEVycm9yIHJlcG9ydGluZyBmdW5jdGlvbnMKKworSW4gdGhlc2UgZnVuY3Rpb25zLCBDPCR2YXI+IGNhbiBiZSBlaXRoZXIgYSB2YXJpYWJsZSBuYW1lLCBvcgorYW4gaW5zdGFuY2Ugb2YgQzxBdXRvbWFrZTo6VmFyaWFibGU+LgorCis9b3ZlciA0CisKKz1pdGVtIEM8ZXJyX3ZhciAoJHZhciwgJG1lc3NhZ2UsIFslb3B0aW9uc10pPgorCitVbmNhdGVnb3JpemVkIGVycm9ycyBhYm91dCB2YXJpYWJsZXMuCisKKz1jdXQKKworc3ViIGVycl92YXIgKCQkOyUpCit7CisgIG1zZ192YXIgKCdlcnJvcicsIEBfKTsKK30KKworPWl0ZW0gQzxtc2dfY29uZF92YXIgKCRjaGFubmVsLCAkY29uZCwgJHZhciwgJG1lc3NhZ2UsIFslb3B0aW9uc10pPgorCitNZXNzYWdlcyBhYm91dCBjb25kaXRpb25hbCB2YXJpYWJsZS4KKworPWN1dAorCitzdWIgbXNnX2NvbmRfdmFyICgkJCQkOyUpCit7CisgIG15ICgkY2hhbm5lbCwgJGNvbmQsICR2YXIsICRtc2csICVvcHRzKSA9IEBfOworICBteSAkdiA9IHJlZiAoJHZhcikgPyAkdmFyIDogcnZhciAoJHZhcik7CisgIG1zZyAkY2hhbm5lbCwgJHYtPnJkZWYgKCRjb25kKS0+bG9jYXRpb24sICRtc2csICVvcHRzOworfQorCis9aXRlbSBDPG1zZ192YXIgKCRjaGFubmVsLCAkdmFyLCAkbWVzc2FnZSwgWyVvcHRpb25zXSk+CisKK01lc3NhZ2VzIGFib3V0IHZhcmlhYmxlcy4KKworPWN1dAorCitzdWIgbXNnX3ZhciAoJCQkOyUpCit7CisgIG15ICgkY2hhbm5lbCwgJHZhciwgJG1zZywgJW9wdHMpID0gQF87CisgIG15ICR2ID0gcmVmICgkdmFyKSA/ICR2YXIgOiBydmFyICgkdmFyKTsKKyAgIyBEb24ndCBrbm93IHdoaWNoIGNvbmRpdGlvbiBpcyBjb25jZXJuZWQuICBQaWNrIGFueS4KKyAgbXkgJGNvbmQgPSAkdi0+Y29uZGl0aW9ucy0+b25lX2NvbmQ7CisgIG1zZ19jb25kX3ZhciAkY2hhbm5lbCwgJGNvbmQsICR2LCAkbXNnLCAlb3B0czsKK30KKworPWl0ZW0gQzwkYm9vbCA9IHJlamVjdF92YXIgKCR2YXJuYW1lLCAkZXJyb3JfbXNnKT4KKworQmFpbCBvdXQgd2l0aCBDPCRlcnJvcl9tc2c+IGlmIGEgdmFyaWFibGUgd2l0aCBuYW1lIEM8JHZhcm5hbWU+IGhhcworYmVlbiBkZWZpbmVkLgorCitSZXR1cm4gdHJ1ZSBpZmYgQzwkdmFybmFtZT4gaXMgZGVmaW5lZC4KKworPWN1dAorCitzdWIgcmVqZWN0X3ZhciAoJCQpCit7CisgIG15ICgkdmFyLCAkbXNnKSA9IEBfOworICBteSAkdiA9IHZhciAoJHZhcik7CisgIGlmICgkdikKKyAgICB7CisgICAgICBlcnJfdmFyICR2LCAkbXNnOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICByZXR1cm4gMDsKK30KKworPWJhY2sKKworPWhlYWQyIEFkbWluaXN0cmF0aXZlIGZ1bmN0aW9ucworCis9b3ZlciA0CisKKz1pdGVtIEM8QXV0b21ha2U6OlZhcmlhYmxlOjpob29rICgkdmFybmFtZSwgJGZ1bik+CisKK0RlY2xhcmUgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbmV2ZXIgYSB2YXJpYWJsZQorbmFtZWQgQzwkdmFybmFtZT4gaXMgZGVmaW5lZCBvciByZWRlZmluZWQuCisKK0M8JGZ1bj4gc2hvdWxkIHRha2UgdHdvIGFyZ3VtZW50czogQzwkdHlwZT4gYW5kIEM8JHZhbHVlPi4KK1doZW4gdHlwZSBpcyBDPCcnPiBvciA8JzonPiwgQzwkdmFsdWU+IGlzIHRoZSB2YWx1ZSBiZWluZworYXNzaWduZWQgdG8gQzwkdmFybmFtZT4uICBXaGVuIEM8JHR5cGU+IGlzIEM8JysnPiwgQzwkdmFsdWU+CitpcyB0aGUgdmFsdWUgYmVpbmcgYXBwZW5kZWQgdG8gIEM8JHZhcm5hbWU+LgorCis9Y3V0CisKK3VzZSB2YXJzICclX2hvb2tzJzsKK3N1YiBob29rICgkJCkKK3sKKyAgbXkgKCR2YXIsICRmdW4pID0gQF87CisgICRfaG9va3N7JHZhcn0gPSAkZnVuOworfQorCis9aXRlbSBDPHZhcmlhYmxlcyAoWyRzdWZmaXhdKT4KKworUmV0dXJucyB0aGUgbGlzdCBvZiBhbGwgTDxBdXRvbWFrZTo6VmFyaWFibGU+IGluc3RhbmNlcy4gIChJLmUuLCBhbGwKK3ZhcmlhYmxlcyBkZWZpbmVkIHNvIGZhci4pICBJZiBDPCRzdWZmaXg+IGlzIHN1cHBsaWVkLCByZXR1cm4gb25seQordGhlIEw8QXV0b21ha2U6OlZhcmlhYmxlPiBpbnN0YW5jZXMgdGhhdCBlbmRzIHdpdGggQzxfJHN1ZmZpeD4uCisKKz1jdXQKKwordXNlIHZhcnMgJyVfdmFyaWFibGVfZGljdCcsICclX3ByaW1hcnlfZGljdCc7CitzdWIgdmFyaWFibGVzICg7JCkKK3sKKyAgbXkgKCRzdWZmaXgpID0gQF87CisgIGlmICgkc3VmZml4KQorICAgIHsKKyAgICAgIGlmIChleGlzdHMgJF9wcmltYXJ5X2RpY3R7JHN1ZmZpeH0pCisJeworCSAgcmV0dXJuIHZhbHVlcyAleyRfcHJpbWFyeV9kaWN0eyRzdWZmaXh9fTsKKwl9CisgICAgICBlbHNlCisJeworCSAgcmV0dXJuICgpOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICByZXR1cm4gdmFsdWVzICVfdmFyaWFibGVfZGljdDsKKyAgICB9Cit9CisKKz1pdGVtIEM8QXV0b21ha2U6OlZhcmlhYmxlOjpyZXNldD4KKworVGhlIEk8Zm9yZ2V0IGFsbD4gZnVuY3Rpb24uICBDbGVhcnMgYWxsIGtub3cgdmFyaWFibGVzIGFuZCByZXNldCBzb21lCitvdGhlciBpbnRlcm5hbCBkYXRhLgorCis9Y3V0CisKK3N1YiByZXNldCAoKQoreworICAlX3ZhcmlhYmxlX2RpY3QgPSAoKTsKKyAgJV9wcmltYXJ5X2RpY3QgPSAoKTsKKyAgJF9hcHBlbmR2YXIgPSAwOworICBAX3Zhcl9vcmRlciA9ICgpOworICAlX2dlbl92YXJuYW1lID0gKCk7CisgICVfZ2VuX3Zhcm5hbWVfbiA9ICgpOworICAkX3RyYXZlcnNhbCA9IDA7Cit9CisKKz1pdGVtIEM8dmFyICgkdmFybmFtZSk+CisKK1JldHVybiB0aGUgQzxBdXRvbWFrZTo6VmFyaWFibGU+IG9iamVjdCBmb3IgdGhlIHZhcmlhYmxlCituYW1lZCBDPCR2YXJuYW1lPiBpZiBkZWZpbmVkLiAgIFJldHVybiAwIG90aGVyd2lzZS4KKworPWN1dAorCitzdWIgdmFyICgkKQoreworICBteSAoJG5hbWUpID0gQF87CisgIHJldHVybiAkX3ZhcmlhYmxlX2RpY3R7JG5hbWV9IGlmIGV4aXN0cyAkX3ZhcmlhYmxlX2RpY3R7JG5hbWV9OworICByZXR1cm4gMDsKK30KKworPWl0ZW0gQzx2YXJkZWYgKCR2YXJuYW1lLCAkY29uZCk+CisKK1JldHVybiB0aGUgQzxBdXRvbWFrZTo6VmFyRGVmPiBvYmplY3QgZm9yIHRoZSB2YXJpYWJsZSBuYW1lZAorQzwkdmFybmFtZT4gaWYgZGVmaW5lZCBpbiBjb25kaXRpb24gQzwkY29uZD4uICBSZXR1cm4gZmFsc2UKK2lmIHRoZSBjb25kaXRpb24gb3IgdGhlIHZhcmlhYmxlIGRvZXMgbm90IGV4aXN0LgorCis9Y3V0CisKK3N1YiB2YXJkZWYgKCQkKQoreworICBteSAoJG5hbWUsICRjb25kKSA9IEBfOworICBteSAkdmFyID0gdmFyICRuYW1lOworICByZXR1cm4gJHZhciAmJiAkdmFyLT5kZWYgKCRjb25kKTsKK30KKworIyBDcmVhdGUgdGhlIHZhcmlhYmxlIGlmIGl0IGRvZXMgbm90IGV4aXN0LgorIyBUaGlzIGlzIHVzZWQgb25seSBieSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBwYWNrYWdlLgorc3ViIF9jdmFyICgkKQoreworICBteSAoJG5hbWUpID0gQF87CisgIG15ICR2ID0gdmFyICRuYW1lOworICByZXR1cm4gJHYgaWYgJHY7CisgIHJldHVybiBfbmV3IEF1dG9tYWtlOjpWYXJpYWJsZSAkbmFtZTsKK30KKworPWl0ZW0gQzxydmFyICgkdmFybmFtZSk+CisKK1JldHVybiB0aGUgQzxBdXRvbWFrZTo6VmFyaWFibGU+IG9iamVjdCBmb3IgdGhlIHZhcmlhYmxlIG5hbWVkCitDPCR2YXJuYW1lPi4gIEFib3J0IHdpdGggYW4gaW50ZXJuYWwgZXJyb3IgaWYgdGhlIHZhcmlhYmxlIHdhcyBub3QKK2RlZmluZWQuCisKK1RoZSBJPHI+IGluIGZyb250IG9mIEM8dmFyPiBzdGFuZHMgZm9yIEk8cmVxdWlyZWQ+LiAgT25lCitzaG91bGQgY2FsbCBDPHJ2YXI+IHRvIGFzc2VydCB0aGUgdmFyaWFibGUncyBleGlzdGVuY2UuCisKKz1jdXQKKworc3ViIHJ2YXIgKCQpCit7CisgIG15ICgkbmFtZSkgPSBAXzsKKyAgbXkgJHYgPSB2YXIgJG5hbWU7CisgIHByb2dfZXJyb3IgKCJ1bmRlZmluZWQgdmFyaWFibGUgJG5hbWVcbiIgLiAmdmFyaWFibGVzX2R1bXApCisgICAgdW5sZXNzICR2OworICByZXR1cm4gJHY7Cit9CisKKz1pdGVtIEM8cnZhcmRlZiAoJHZhcm5hbWUsICRjb25kKT4KKworUmV0dXJuIHRoZSBDPEF1dG9tYWtlOjpWYXJEZWY+IG9iamVjdCBmb3IgdGhlIHZhcmlhYmxlIG5hbWVkCitDPCR2YXJuYW1lPiBpZiBkZWZpbmVkIGluIGNvbmRpdGlvbiBDPCRjb25kPi4gIEFib3J0IHdpdGggYW4gaW50ZXJuYWwKK2Vycm9yIGlmIHRoZSBjb25kaXRpb24gb3IgdGhlIHZhcmlhYmxlIGRvZXMgbm90IGV4aXN0LgorCis9Y3V0CisKK3N1YiBydmFyZGVmICgkJCkKK3sKKyAgbXkgKCRuYW1lLCAkY29uZCkgPSBAXzsKKyAgcmV0dXJuIHJ2YXIgKCRuYW1lKS0+cmRlZiAoJGNvbmQpOworfQorCis9YmFjaworCis9aGVhZDIgTWV0aG9kcworCitDPEF1dG9tYWtlOjpWYXJpYWJsZT4gaXMgYSBzdWJjbGFzcyBvZiBDPEF1dG9tYWtlOjpJdGVtPi4gIFNlZQordGhhdCBwYWNrYWdlIGZvciBpbmhlcml0ZWQgbWV0aG9kcy4KKworSGVyZSBhcmUgdGhlIG1ldGhvZHMgc3BlY2lmaWMgdG8gdGhlIEM8QXV0b21ha2U6OlZhcmlhYmxlPiBpbnN0YW5jZXMuCitVc2UgdGhlIEM8ZGVmaW5lPiBmdW5jdGlvbiwgZGVzY3JpYmVkIGxhdHRlciwgdG8gY3JlYXRlIHN1Y2ggb2JqZWN0cy4KKworPW92ZXIgNAorCis9Y3V0CisKKyMgQ3JlYXRlIEF1dG9tYWtlOjpWYXJpYWJsZSBvYmplY3RzLiAgVGhpcyBpcyB1c2VkCisjIG9ubHkgaW4gdGhpcyBmaWxlLiAgT3RoZXIgdXNlcnMgc2hvdWxkIHVzZQorIyB0aGUgImRlZmluZSIgZnVuY3Rpb24uCitzdWIgX25ldyAoJCQpCit7CisgIG15ICgkY2xhc3MsICRuYW1lKSA9IEBfOworICBteSAkc2VsZiA9IEF1dG9tYWtlOjpJdGVtOjpuZXcgKCRjbGFzcywgJG5hbWUpOworICAkc2VsZi0+eydzY2FubmVkJ30gPSAwOworICAkc2VsZi0+eydsYXN0LWFwcGVuZCd9ID0gW107ICMgaGVscGVyIHZhcmlhYmxlIGZvciBsYXN0IGNvbmRpdGlvbmFsIGFwcGVuZC4KKyAgJF92YXJpYWJsZV9kaWN0eyRuYW1lfSA9ICRzZWxmOworICBpZiAoJG5hbWUgPX4gL18oW1s6YWxudW06XV0rKSQvKQorICAgIHsKKyAgICAgICRfcHJpbWFyeV9kaWN0eyQxfXskbmFtZX0gPSAkc2VsZjsKKyAgICB9CisgIHJldHVybiAkc2VsZjsKK30KKworIyBfY2hlY2tfYW1iaWd1b3VzX2NvbmRpdGlvbiAoJFNFTEYsICRDT05ELCAkV0hFUkUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGFuIGFtYmlndW91cyBjb25kaXRpb25hbC4gIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB2YXJpYWJsZQorIyBpcyBiZWluZyBkZWZpbmVkIGNvbmRpdGlvbmFsbHkuICBJZiB3ZSBhbHJlYWR5IGtub3cgYWJvdXQgYQorIyBkZWZpbml0aW9uIHRoYXQgaXMgdHJ1ZSB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zLCB0aGVuIHdlIGhhdmUgYW4KKyMgYW1iaWd1aXR5Lgorc3ViIF9jaGVja19hbWJpZ3VvdXNfY29uZGl0aW9uICgkJCQpCit7CisgIG15ICgkc2VsZiwgJGNvbmQsICR3aGVyZSkgPSBAXzsKKyAgbXkgJHZhciA9ICRzZWxmLT5uYW1lOworICBteSAoJG1lc3NhZ2UsICRhbWJpZ19jb25kKSA9ICRzZWxmLT5jb25kaXRpb25zLT5hbWJpZ3VvdXNfcCAoJHZhciwgJGNvbmQpOworCisgICMgV2UgYWxsb3cgc2lsZW50IHZhcmlhYmxlcyB0byBiZSBvdmVycmlkZGVuIHNpbGVudGx5LAorICAjIGJ5IGVpdGhlciBzaWxlbnQgb3Igbm9uLXNpbGVudCB2YXJpYWJsZXMuCisgIG15ICRkZWYgPSAkc2VsZi0+ZGVmICgkYW1iaWdfY29uZCk7CisgIGlmICgkbWVzc2FnZSAmJiAhKCRkZWYgJiYgJGRlZi0+cHJldHR5ID09IFZBUl9TSUxFTlQpKQorICAgIHsKKyAgICAgIG1zZyAnc3ludGF4JywgJHdoZXJlLCAiJG1lc3NhZ2UgLi4uIiwgcGFydGlhbCA9PiAxOworICAgICAgbXNnX3ZhciAoJ3N5bnRheCcsICR2YXIsICIuLi4gYCR2YXInIHByZXZpb3VzbHkgZGVmaW5lZCBoZXJlIik7CisgICAgICB2ZXJiICgkc2VsZi0+ZHVtcCk7CisgICAgfQorfQorCis9aXRlbSBDPCRib29sID0gJHZhci1FPGd0PmNoZWNrX2RlZmluZWRfdW5jb25kaXRpb25hbGx5IChbJHBhcmVudCwgJHBhcmVudF9jb25kXSk+CisKK1dhcm4gaWYgdGhlIHZhcmlhYmxlIGlzIGNvbmRpdGlvbmFsbHkgZGVmaW5lZC4gIEM8JHBhcmVudD4gaXMgdGhlIG5hbWUKK29mIHRoZSBwYXJlbnQgdmFyaWFibGUsIGFuZCBDPCRwYXJlbnRfY29uZD4gdGhlIGNvbmRpdGlvbiBvZiB0aGUgcGFyZW50CitkZWZpbml0aW9uLiAgVGhlc2UgdHdvIHZhcmlhYmxlcyBhcmUgdXNlZCB0byBkaXNwbGF5IGRpYWdub3N0aWNzLgorCis9Y3V0CisKK3N1YiBjaGVja19kZWZpbmVkX3VuY29uZGl0aW9uYWxseSAoJDskJCkKK3sKKyAgbXkgKCRzZWxmLCAkcGFyZW50LCAkcGFyZW50X2NvbmQpID0gQF87CisKKyAgaWYgKCEkc2VsZi0+Y29uZGl0aW9ucy0+dHJ1ZSkKKyAgICB7CisgICAgICBpZiAoJHBhcmVudCkKKwl7CisJICBtc2dfY29uZF92YXIgKCd1bnN1cHBvcnRlZCcsICRwYXJlbnRfY29uZCwgJHBhcmVudCwKKwkJCSJhdXRvbWFrZSBkb2VzIG5vdCBzdXBwb3J0IGNvbmRpdGlvbmFsIGRlZmluaXRpb24gb2YgIgorCQkJLiAkc2VsZi0+bmFtZSAuICIgaW4gJHBhcmVudCIpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBtc2dfdmFyICgndW5zdXBwb3J0ZWQnLCAkc2VsZiwKKwkJICAgImF1dG9tYWtlIGRvZXMgbm90IHN1cHBvcnQgIiAuICRzZWxmLT5uYW1lCisJCSAgIC4gIiBiZWluZyBkZWZpbmVkIGNvbmRpdGlvbmFsbHkiKTsKKwl9CisgICAgfQorfQorCis9aXRlbSBDPCRzdHIgPSAkdmFyLUU8Z3Q+b3V0cHV0IChbQGNvbmRzXSk+CisKK0Zvcm1hdCBhbGwgdGhlIGRlZmluaXRpb25zIG9mIEM8JHZhcj4gaWYgQzxAY29uZD4gaXMgbm90IHNwZWNpZmllZCwKK2Vsc2Ugb25seSB0aGF0IGNvcnJlc3BvbmRpbmcgdG8gQzxAY29uZD4uCisKKz1jdXQKKworc3ViIG91dHB1dCAoJEApCit7CisgIG15ICgkc2VsZiwgQGNvbmRzKSA9IEBfOworCisgIEBjb25kcyA9ICRzZWxmLT5jb25kaXRpb25zLT5jb25kcworICAgIHVubGVzcyBAY29uZHM7CisKKyAgbXkgJHJlcyA9ICcnOworICBteSAkbmFtZSA9ICRzZWxmLT5uYW1lOworCisgIGZvcmVhY2ggbXkgJGNvbmQgKEBjb25kcykKKyAgICB7CisgICAgICBteSAkZGVmID0gJHNlbGYtPmRlZiAoJGNvbmQpOworICAgICAgcHJvZ19lcnJvciAoInVua25vd24gY29uZGl0aW9uIGAiIC4gJGNvbmQtPmh1bWFuIC4gIicgZm9yIGAiCisJCSAgLiAkc2VsZi0+bmFtZSAuICInIikKKwl1bmxlc3MgJGRlZjsKKworICAgICAgbmV4dAorCWlmICRkZWYtPnByZXR0eSA9PSBWQVJfU0lMRU5UOworCisgICAgICAkcmVzIC49ICRkZWYtPmNvbW1lbnQ7CisKKyAgICAgIG15ICR2YWwgPSAkZGVmLT5yYXdfdmFsdWU7CisgICAgICBteSAkZXF1YWxzID0gJGRlZi0+dHlwZSBlcSAnOicgPyAnOj0nIDogJz0nOworICAgICAgbXkgJHN0ciA9ICRjb25kLT5zdWJzdF9zdHJpbmc7CisKKworICAgICAgaWYgKCRkZWYtPnByZXR0eSA9PSBWQVJfQVNJUykKKwl7CisJICBteSAkb3V0cHV0X3ZhciA9ICIkbmFtZSAkZXF1YWxzICR2YWwiOworCSAgJG91dHB1dF92YXIgPX4gcy9eLyRzdHIvbWVnOworCSAgJHJlcyAuPSAiJG91dHB1dF92YXJcbiI7CisJfQorICAgICAgZWxzaWYgKCRkZWYtPnByZXR0eSA9PSBWQVJfUFJFVFRZKQorCXsKKwkgICMgU3VwcHJlc3MgZXNjYXBlZCBuZXcgbGluZXMuICAmbWFrZWZpbGVfd3JhcCB3aWxsCisJICAjIGFkZCB0aGVtIGJhY2ssIG1heWJlIGF0IG90aGVyIHBsYWNlcy4KKwkgICR2YWwgPX4gcy9cXCQvL21nOworCSAgbXkgJHdyYXAgPSBtYWtlZmlsZV93cmFwICgiJHN0ciRuYW1lICRlcXVhbHMiLCAiJHN0clx0IiwKKwkJCQkgICAgc3BsaXQgKCcgJywgJHZhbCkpOworCisJICAjIElmIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGRlZmluaXRpb24gaXMgbWFkZSBvbmx5IG9mCisJICAjIEBzdWJzdGl0dXRpb25zQCwgYXBwZW5kIGFuIGVtcHR5IHZhcmlhYmxlIHRvIG1ha2Ugc3VyZSBpdAorCSAgIyBjYW5ub3QgYmUgc3Vic3RpdHV0ZWQgYXMgYSBibGFuayBsaW5lICh0aGF0IHdvdWxkIGNvbmZ1c2UKKwkgICMgSFAtVVggTWFrZSkuCisJICAkd3JhcCA9IG1ha2VmaWxlX3dyYXAgKCIkc3RyJG5hbWUgJGVxdWFscyIsICIkc3RyXHQiLAorCQkJCSBzcGxpdCAoJyAnLCAkdmFsKSwgJyQoYW1fX2VtcHR5KScpCisJICAgIGlmICR3cmFwID1+IC9cbihccypAXHcrQCkrXHMqJC87CisKKwkgICRyZXMgLj0gJHdyYXA7CisJfQorICAgICAgZWxzZSAjICgkZGVmLT5wcmV0dHkgPT0gVkFSX1NPUlRFRCkKKwl7CisJICAjIFN1cHByZXNzIGVzY2FwZWQgbmV3IGxpbmVzLiAgJm1ha2VmaWxlX3dyYXAgd2lsbAorCSAgIyBhZGQgdGhlbSBiYWNrLCBtYXliZSBhdCBvdGhlciBwbGFjZXMuCisJICAkdmFsID1+IHMvXFwkLy9tZzsKKwkgICRyZXMgLj0gbWFrZWZpbGVfd3JhcCAoIiRzdHIkbmFtZSAkZXF1YWxzIiwgIiRzdHJcdCIsCisJCQkJIHNvcnQgKHNwbGl0ICgnICcgLCAkdmFsKSkpOworCX0KKyAgICB9CisgIHJldHVybiAkcmVzOworfQorCis9aXRlbSBDPEB2YWx1ZXMgPSAkdmFyLUU8Z3Q+dmFsdWVfYXNfbGlzdCAoJGNvbmQsIFskcGFyZW50LCAkcGFyZW50X2NvbmRdKT4KKworR2V0IHRoZSB2YWx1ZSBvZiBDPCR2YXI+IGFzIGEgbGlzdCwgZ2l2ZW4gYSBzcGVjaWZpZWQgY29uZGl0aW9uLAord2l0aG91dCByZWN1cnNpbmcgdGhyb3VnaCBhbnkgc3VidmFyaWFibGVzLgorCitDPCRjb25kPiBpcyB0aGUgY29uZGl0aW9uIG9mIGludGVyZXN0LiAgQzwkdmFyPiBkb2VzIG5vdCBuZWVkCit0byBiZSBkZWZpbmVkIGZvciBjb25kaXRpb24gQzwkY29uZD4gZXhhY3RseSwgYnV0IGl0IG5lZWRzCit0byBiZSBkZWZpbmVkIGZvciBhdCBtb3N0IG9uZSBjb25kaXRpb24gaW1wbGllZCBieSBDPCRjb25kPi4KKworQzwkcGFyZW50PiBhbmQgQzwkcGFyZW50X2NvbmQ+IGRlc2lnbmF0ZSB0aGUgbmFtZSBhbmQgdGhlIGNvbmRpdGlvbgorb2YgdGhlIHBhcmVudCB2YXJpYWJsZSwgaS5lLiwgdGhlIHZhcmlhYmxlIGluIHdoaWNoIEM8JHZhcj4gaXMKK2JlaW5nIGV4cGFuZGVkLiAgVGhlc2UgYXJlIHVzZWQgaW4gZGlhZ25vc3RpY3MuCisKK0ZvciBleGFtcGxlLCBpZiBDPEE+IGlzIGRlZmluZWQgYXMgIkM8Zm9vICQoQikgYmFyPiIgaW4gY29uZGl0aW9uCitDPFRSVUU+LCBjYWxsaW5nIEM8cnZhciAoJ0EnKS0+dmFsdWVfYXNfbGlzdCAoVFJVRSk+IHdpbGwgcmV0dXJuCitDPCgiZm9vIiwgIiQoQikiLCAiYmFyIik+LgorCis9Y3V0CisKK3N1YiB2YWx1ZV9hc19saXN0ICgkJDskJCkKK3sKKyAgbXkgKCRzZWxmLCAkY29uZCwgJHBhcmVudCwgJHBhcmVudF9jb25kKSA9IEBfOworICBteSBAcmVzdWx0OworCisgICMgR2V0IHZhbHVlIGZvciBnaXZlbiBjb25kaXRpb24KKyAgbXkgJG9uY2VmbGFnOworICBmb3JlYWNoIG15ICR2Y29uZCAoJHNlbGYtPmNvbmRpdGlvbnMtPmNvbmRzKQorICAgIHsKKyAgICAgIGlmICgkdmNvbmQtPnRydWVfd2hlbiAoJGNvbmQpKQorCXsKKwkgICMgSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBkZWZpbml0aW9ucyBvZiAkdmFyIG1hdGNoaW5nCisJICAjICRjb25kIHRoZW4gd2UgYXJlIGluIHRyb3VibGU6IHRlbGwgdGhlIHVzZXIgd2UgbmVlZCBhCisJICAjIHBhZGRsZS4gIENvbnRpbnVlIGJ5IG1lcmdpbmcgcmVzdWx0cyBmcm9tIGFsbCBjb25kaXRpb25zLAorCSAgIyBhbHRob3VnaCBpdCBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZS4KKwkgICRzZWxmLT5jaGVja19kZWZpbmVkX3VuY29uZGl0aW9uYWxseSAoJHBhcmVudCwgJHBhcmVudF9jb25kKQorCSAgICBpZiAkb25jZWZsYWc7CisJICAkb25jZWZsYWcgPSAxOworCisJICBteSAkdmFsID0gJHNlbGYtPnJkZWYgKCR2Y29uZCktPnZhbHVlOworCSAgcHVzaCBAcmVzdWx0LCBzcGxpdCAoJyAnLCAkdmFsKTsKKwl9CisgICAgfQorICByZXR1cm4gQHJlc3VsdDsKK30KKworPWl0ZW0gQzxAdmFsdWVzID0gJHZhci1FPGd0PnZhbHVlX2FzX2xpc3RfcmVjdXJzaXZlIChbJW9wdGlvbnNdKT4KKworUmV0dXJuIHRoZSBjb250ZW50cyBvZiBDPCR2YXI+IGFzIGEgbGlzdCwgc3BsaXQgb24gd2hpdGVzcGFjZS4gIFRoaXMKK3dpbGwgcmVjdXJzaXZlbHkgZm9sbG93IEM8JCguLi4pPiBhbmQgQzwkey4uLn0+IGluY2x1c2lvbnMuICBJdAorcHJlc2VydmVzIEM8QC4uLkA+IHN1YnN0aXR1dGlvbnMuCisKK0M8JW9wdGlvbnM+IGlzIGEgbGlzdCBvZiBvcHRpb24gZm9yIEM8VmFyaWFibGU6OnRyYXZlcnNlX3JlY3Vyc2l2ZWx5PgorKHNlZSB0aGlzIG1ldGhvZCkuICBUaGUgbW9zdCB1c2VmdWwgaXMgQzxjb25kX2ZpbHRlcj46CisKKyAgJHZhci0+dmFsdWVfYXNfbGlzdF9yZWN1cnNpdmUgKGNvbmRfZmlsdGVyID0+ICRjb25kKQorCit3aWxsIHJldHVybiB0aGUgY29udGVudHMgb2YgQzwkdmFyPiBhbmQgYW55IHN1YnZhcmlhYmxlIGluIGFsbAorY29uZGl0aW9ucyBpbXBsaWVkIGJ5IEM8JGNvbmQ+LgorCitDPCVvcHRpb25zPiBjYW4gYWxzbyBjYXJyeSBvcHRpb25zIHNwZWNpZmljIHRvIEM8dmFsdWVfYXNfbGlzdF9yZWN1cnNpdmU+LgorUHJlc2VudGx5LCB0aGUgb25seSBzdWNoIG9wdGlvbiBpcyBDPGxvY2F0aW9uID1FPGd0PiAxPiB3aGljaCBpbnN0cnVjdHMKK0M8dmFsdWVfYXNfbGlzdF9yZWN1cnNpdmU+IHRvIHJldHVybiBhIGxpc3Qgb2YgQzxbJGxvY2F0aW9uLCBAdmFsdWVzXT4gcGFpcnMuCisKKz1jdXQKKworc3ViIHZhbHVlX2FzX2xpc3RfcmVjdXJzaXZlICgkOyUpCit7CisgIG15ICgkdmFyLCAlb3B0aW9ucykgPSBAXzsKKworICByZXR1cm4gJHZhci0+dHJhdmVyc2VfcmVjdXJzaXZlbHkKKyAgICAoIyBDb25zdHJ1Y3QgWyRsb2NhdGlvbiwgJHZhbHVlXSBwYWlycyBpZiByZXF1ZXN0ZWQuCisgICAgIHN1YiB7CisgICAgICAgbXkgKCR2YXIsICR2YWwsICRjb25kLCAkZnVsbF9jb25kKSA9IEBfOworICAgICAgIHJldHVybiBbJHZhci0+cmRlZiAoJGNvbmQpLT5sb2NhdGlvbiwgJHZhbF0gaWYgJG9wdGlvbnN7J2xvY2F0aW9uJ307CisgICAgICAgcmV0dXJuICR2YWw7CisgICAgIH0sCisgICAgICMgQ29sbGVjdCByZXN1bHRzLgorICAgICBzdWIgeworICAgICAgIG15ICgkdmFyLCAkcGFyZW50X2NvbmQsIEBhbGxyZXN1bHRzKSA9IEBfOworICAgICAgIHJldHVybiBtYXAgeyBteSAoJGNvbmQsIEB2YWxzKSA9IEAkXzsgQHZhbHMgfSBAYWxscmVzdWx0czsKKyAgICAgfSwKKyAgICAgJW9wdGlvbnMpOworfQorCisKKz1pdGVtIEM8JGJvb2wgPSAkdmFyLUU8Z3Q+aGFzX2NvbmRpdGlvbmFsX2NvbnRlbnRzPgorCitSZXR1cm4gMSBpZiBDPCR2YXI+IG9yIG9uZSBvZiBpdHMgc3VidmFyaWFibGUgd2FzIGNvbmRpdGlvbmFsbHkKK2RlZmluZWQuICBSZXR1cm4gMCBvdGhlcndpc2UuCisKKz1jdXQKKworc3ViIGhhc19jb25kaXRpb25hbF9jb250ZW50cyAoJCkKK3sKKyAgbXkgKCRzZWxmKSA9IEBfOworCisgICMgVHJhdmVyc2UgdGhlIHZhcmlhYmxlIHJlY3Vyc2l2ZWx5IHVudGlsIHdlCisgICMgZmluZCBhIHZhcmlhYmxlIGRlZmluZWQgY29uZGl0aW9uYWxseS4KKyAgIyBVc2UgYGRpZScgdG8gYWJvcnQgdGhlIHRyYXZlcnNhbCwgYW5kIHBhc3MgaXQgYCRmdWxsX2NvbmQnCisgICMgdG8gd2UgY2FuIGZpbmQgZWFzaWx5IHdoZXRoZXIgdGhlIGBldmFsJyBibG9jayBhYm9ydGVkCisgICMgYmVjYXVzZSB3ZSBmb3VuZCBhIGNvbmRpdGlvbiwgb3IgZm9yIHNvbWUgb3RoZXIgZXJyb3IuCisgIGV2YWwKKyAgICB7CisgICAgICAkc2VsZi0+dHJhdmVyc2VfcmVjdXJzaXZlbHkKKwkoc3ViCisJIHsKKwkgICBteSAoJHN1YnZhciwgJHZhbCwgJGNvbmQsICRmdWxsX2NvbmQpID0gQF87CisJICAgZGllICRmdWxsX2NvbmQgaWYgISAkZnVsbF9jb25kLT50cnVlOworCSAgIHJldHVybiAoKTsKKwkgfSwKKwkgc3ViIHsgcmV0dXJuICgpOyB9KTsKKyAgICB9OworICBpZiAoJEApCisgICAgeworICAgICAgcmV0dXJuIDEgaWYgcmVmICgkQCkgJiYgJEAtPmlzYSAoIkF1dG9tYWtlOjpDb25kaXRpb24iKTsKKyAgICAgICMgUHJvcGFnYXRlIG90aGVyIGVycm9ycy4KKyAgICAgIGRpZTsKKyAgICB9CisgIHJldHVybiAwOworfQorCisKKz1pdGVtIEM8JHN0cmluZyA9ICR2YXItRTxndD5kdW1wPgorCitSZXR1cm4gYSBzdHJpbmcgZGVzY3JpYmluZyBhbGwgd2Uga25vdyBhYm91dCBDPCR2YXI+LgorRm9yIGRlYnVnZ2luZy4KKworPWN1dAorCitzdWIgZHVtcCAoJCkKK3sKKyAgbXkgKCRzZWxmKSA9IEBfOworCisgIG15ICR0ZXh0ID0gJHNlbGYtPm5hbWUgLiAiOiBcbiAge1xuIjsKKyAgZm9yZWFjaCBteSAkdmNvbmQgKCRzZWxmLT5jb25kaXRpb25zLT5jb25kcykKKyAgICB7CisgICAgICAkdGV4dCAuPSAiICAgICIgLiAkdmNvbmQtPmh1bWFuIC4gIiA9PiAiIC4gJHNlbGYtPnJkZWYgKCR2Y29uZCktPmR1bXA7CisgICAgfQorICAkdGV4dCAuPSAiICB9XG4iOworICByZXR1cm4gJHRleHQ7Cit9CisKKworPWJhY2sKKworPWhlYWQyIFV0aWxpdHkgZnVuY3Rpb25zCisKKz1vdmVyIDQKKworPWl0ZW0gQzxAbGlzdCA9IHNjYW5fdmFyaWFibGVfZXhwYW5zaW9ucyAoJHRleHQpPgorCitSZXR1cm4gdGhlIGxpc3Qgb2YgdmFyaWFibGUgbmFtZXMgZXhwYW5kZWQgaW4gQzwkdGV4dD4uICBOb3RlIHRoYXQKK3VubGlrZSBzb21lIG90aGVyIGZ1bmN0aW9ucywgQzwkdGV4dD4gaXMgbm90IHNwbGl0IG9uIHNwYWNlcyBiZWZvcmUgd2UKK2NoZWNrIGZvciBzdWJ2YXJpYWJsZXMuCisKKz1jdXQKKworc3ViIHNjYW5fdmFyaWFibGVfZXhwYW5zaW9ucyAoJCkKK3sKKyAgbXkgKCR0ZXh0KSA9IEBfOworICBteSBAcmVzdWx0ID0gKCk7CisKKyAgIyBTdHJpcCBjb21tZW50cy4KKyAgJHRleHQgPX4gcy8jLiokLy87CisKKyAgIyBSZWNvcmQgZWFjaCB1c2Ugb2YgJHtzdHVmZn0gb3IgJChzdHVmZikgdGhhdCBkb2VzIG5vdCBmb2xsb3cgYSAkLgorICB3aGlsZSAoJHRleHQgPX4gLyg/PCFcJClcJCg/Olx7KFteXH1dKilcfXxcKChbXlwpXSopXCkpL2cpCisgICAgeworICAgICAgbXkgJHZhciA9ICQxIHx8ICQyOworICAgICAgIyBUaGUgb2NjdXJyZW5jZSBtYXkgbG9vayBsaWtlICQoc3RyaW5nMVs6c3Vic3QxPVtzdWJzdDJdXSkgYnV0CisgICAgICAjIHdlIHdhbnQgb25seSBgc3RyaW5nMScuCisgICAgICAkdmFyID1+IHMvOlteOj1dKj1bXj1dKiQvLzsKKyAgICAgIHB1c2ggQHJlc3VsdCwgJHZhcjsKKyAgICB9CisKKyAgcmV0dXJuIEByZXN1bHQ7Cit9CisKKz1pdGVtIEM8Y2hlY2tfdmFyaWFibGVfZXhwYW5zaW9ucyAoJHRleHQsICR3aGVyZSk+CisKK0NoZWNrIHZhcmlhYmxlIGV4cGFuc2lvbnMgaW4gQzwkdGV4dD4gYW5kIHdhcm4gYWJvdXQgYW55IG5hbWUgdGhhdAorZG9lcyBub3QgY29uZm9ybSB0byBQT1NJWC4gIEM8JHdoZXJlPiBpcyB0aGUgbG9jYXRpb24gb2YgQzwkdGV4dD4KK2ZvciB0aGUgZXJyb3IgbWVzc2FnZS4KKworPWN1dAorCitzdWIgY2hlY2tfdmFyaWFibGVfZXhwYW5zaW9ucyAoJCQpCit7CisgIG15ICgkdGV4dCwgJHdoZXJlKSA9IEBfOworICAjIENhdGNoIGV4cGFuc2lvbiBvZiB2YXJpYWJsZXMgd2hvc2UgbmFtZSBkb2VzIG5vdCBjb25mb3JtIHRvIFBPU0lYLgorICBmb3JlYWNoIG15ICR2YXIgKHNjYW5fdmFyaWFibGVfZXhwYW5zaW9ucyAoJHRleHQpKQorICAgIHsKKyAgICAgIGlmICgkdmFyICF+IC8kX1ZBUklBQkxFX1BBVFRFUk4vbykKKwl7CisJICAjIElmIHRoZSB2YXJpYWJsZSBuYW1lIGNvbnRhaW5zIGEgc3BhY2UsIGl0J3MgbGlrZWx5CisJICAjIHRvIGJlIGEgR05VIG1ha2UgZXh0ZW5zaW9uIChzdWNoIGFzICQoYWRkc3VmZml4IC4uLikpLgorCSAgIyBNZW50aW9uIHRoaXMgaW4gdGhlIGRpYWdub3N0aWMuCisJICBteSAkZ251ZXh0ID0gIiI7CisJICAkZ251ZXh0ID0gIlxuKHByb2JhYmx5IGEgR05VIG1ha2UgZXh0ZW5zaW9uKSIgaWYgJHZhciA9fiAvIC87CisJICAjIEFjY2VwdCByZWN1cnNpdmUgdmFyaWFibGUgZXhwYW5zaW9ucyBpZiBzbyBkZXNpcmVkCisJICAjICh3ZSBob3BlIHRoZXkgYXJlIHJhdGhlciBwb3J0YWJsZSBpbiBwcmFjdGljZSkuCisJICBpZiAoJHZhciA9fiAvJF9WQVJJQUJMRV9SRUNVUlNJVkVfUEFUVEVSTi9vKQorCSAgICB7CisJICAgICAgbXNnICgncG9ydGFiaWxpdHktcmVjdXJzaXZlJywgJHdoZXJlLAorCQkgICAiJHZhcjogbm9uLVBPU0lYIHJlY3Vyc2l2ZSB2YXJpYWJsZSBleHBhbnNpb24kZ251ZXh0Iik7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIG1zZyAoJ3BvcnRhYmlsaXR5JywgJHdoZXJlLCAiJHZhcjogbm9uLVBPU0lYIHZhcmlhYmxlIG5hbWUkZ251ZXh0Iik7CisJICAgIH0KKwl9CisgICAgfQorfQorCisKKworPWl0ZW0gQzxBdXRvbWFrZTo6VmFyaWFibGU6OmRlZmluZSgkdmFybmFtZSwgJG93bmVyLCAkdHlwZSwgJGNvbmQsICR2YWx1ZSwgJGNvbW1lbnQsICR3aGVyZSwgJHByZXR0eSk+CisKK0RlZmluZSBvciBhcHBlbmQgdG8gYSBuZXcgdmFyaWFibGUuCisKK0M8JHZhcm5hbWU+OiB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgYmVpbmcgZGVmaW5lZC4KKworQzwkb3duZXI+OiBvd25lciBvZiB0aGUgdmFyaWFibGUgKG9uZSBvZiBDPFZBUl9NQUtFRklMRT4sCitDPFZBUl9DT05GSUdVUkU+LCBvciBDPFZBUl9BVVRPTUFLRT4sIGRlZmluZWQgYnkgTDxBdXRvbWFrZTo6VmFyRGVmPikuCitWYXJpYWJsZXMgY2FuIGJlIG92ZXJyaWRkZW4sIHByb3ZpZGVkIHRoZSBuZXcgb3duZXIgaXMgbm90IHdlYWtlcgorKEM8VkFSX0FVVE9NQUtFPiA8IEM8VkFSX0NPTkZJR1VSRT4gPCBDPFZBUl9NQUtFRklMRT4pLgorCitDPCR0eXBlPjogdGhlIHR5cGUgb2YgdGhlIGFzc2lnbm1lbnQgKEM8Jyc+IGZvciBDPEZPTyA9IGJhcj4sCitDPCc6Jz4gZm9yIEM8Rk9PIDo9IGJhcj4sIGFuZCBDPCcrJz4gZm9yIEM8J0ZPTyArPSBiYXInPikuCisKK0M8JGNvbmQ+OiB0aGUgQzxDb25kaXRpb24+IGluIHdoaWNoIEM8JHZhcj4gaXMgYmVpbmcgZGVmaW5lZC4KKworQzwkdmFsdWU+OiB0aGUgdmFsdWUgYXNzaWduZWQgdG8gQzwkdmFyPiBpbiBjb25kaXRpb24gQzwkY29uZD4uCisKK0M8JGNvbW1lbnQ+OiBhbnkgY29tbWVudCAoQzwnIyBibGEuJz4pIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXNzaWdubWVudC4KK0NvbW1lbnRzIGZyb20gQzwrPT4gYXNzaWdubWVudHMgc3RhY2sgd2l0aCBjb21tZW50cyBmcm9tIHRoZSBsYXN0IEM8PT4KK2Fzc2lnbm1lbnQuCisKK0M8JHdoZXJlPjogdGhlIEM8TG9jYXRpb24+IG9mIHRoZSBhc3NpZ25tZW50LgorCitDPCRwcmV0dHk+OiB3aGV0aGVyIEM8JHZhbHVlPiBzaG91bGQgYmUgcHJldHR5IHByaW50ZWQgKG9uZSBvZgorQzxWQVJfQVNJUz4sIEM8VkFSX1BSRVRUWT4sIEM8VkFSX1NJTEVOVD4sIG9yIEM8VkFSX1NPUlRFRD4sIGRlZmluZWQKK2J5IGJ5IEw8QXV0b21ha2U6OlZhckRlZj4pLiAgQzwkcHJldHR5PiBhcHBsaWVzIG9ubHkgdG8gcmVhbAorYXNzaWdubWVudHMuICBJLmUuLCBpdCBkb2VzIG5vdCBhcHBseSB0byBhIEM8Kz0+IGFzc2lnbm1lbnQgKGV4Y2VwdAord2hlbiBwYXJ0IG9mIGl0IGlzIGJlaW5nIGRvbmUgYXMgYSBjb25kaXRpb25hbCBDPD0+IGFzc2lnbm1lbnQpLgorCitUaGlzIGZ1bmN0aW9uIHdpbGwgYWxsIHJ1biBhbnkgaG9vayByZWdpc3RlcmVkIHdpdGggdGhlIEM8aG9vaz4KK2Z1bmN0aW9uLgorCis9Y3V0CisKK3N1YiBkZWZpbmUgKCQkJCQkJCQkKQoreworICBteSAoJHZhciwgJG93bmVyLCAkdHlwZSwgJGNvbmQsICR2YWx1ZSwgJGNvbW1lbnQsICR3aGVyZSwgJHByZXR0eSkgPSBAXzsKKworICBwcm9nX2Vycm9yICIkY29uZCBpcyBub3QgYSByZWZlcmVuY2UiCisgICAgdW5sZXNzIHJlZiAkY29uZDsKKworICBwcm9nX2Vycm9yICIkd2hlcmUgaXMgbm90IGEgcmVmZXJlbmNlIgorICAgIHVubGVzcyByZWYgJHdoZXJlOworCisgIHByb2dfZXJyb3IgInByZXR0eSBhcmd1bWVudCBtaXNzaW5nIgorICAgIHVubGVzcyBkZWZpbmVkICRwcmV0dHkgJiYgKCRwcmV0dHkgPT0gVkFSX0FTSVMKKwkJCSAgICAgICB8fCAkcHJldHR5ID09IFZBUl9QUkVUVFkKKwkJCSAgICAgICB8fCAkcHJldHR5ID09IFZBUl9TSUxFTlQKKwkJCSAgICAgICB8fCAkcHJldHR5ID09IFZBUl9TT1JURUQpOworCisgIGVycm9yICR3aGVyZSwgImJhZCBjaGFyYWN0ZXJzIGluIHZhcmlhYmxlIG5hbWUgYCR2YXInIgorICAgIGlmICR2YXIgIX4gLyRfVkFSSUFCTEVfUEFUVEVSTi9vOworCisgICMgYDo9Jy1zdHlsZSBhc3NpZ25tZW50cyBhcmUgbm90IGFja25vd2xlZGdlZCBieSBQT1NJWC4gIE1vcmVvdmVyIGl0CisgICMgaGFzIG11bHRpcGxlIG1lYW5pbmdzLiAgSW4gR05VIG1ha2Ugb3IgQlNEIG1ha2UgaXQgbWVhbnMgImFzc2lnbgorICAjIHdpdGggaW1tZWRpYXRlIGV4cGFuc2lvbiIsIHdoaWxlIGluIE9TRiBtYWtlIGl0IGlzIHVzZWQgZm9yCisgICMgY29uZGl0aW9uYWwgYXNzaWdubWVudHMuCisgIG1zZyAoJ3BvcnRhYmlsaXR5JywgJHdoZXJlLCAiYDo9Jy1zdHlsZSBhc3NpZ25tZW50cyBhcmUgbm90IHBvcnRhYmxlIikKKyAgICBpZiAkdHlwZSBlcSAnOic7CisKKyAgY2hlY2tfdmFyaWFibGVfZXhwYW5zaW9ucyAoJHZhbHVlLCAkd2hlcmUpOworCisgICMgSWYgdGhlcmUncyBhIGNvbW1lbnQsIG1ha2Ugc3VyZSBpdCBpcyBcbi10ZXJtaW5hdGVkLgorICBpZiAoJGNvbW1lbnQpCisgICAgeworICAgICAgY2hvbXAgJGNvbW1lbnQ7CisgICAgICAkY29tbWVudCAuPSAiXG4iOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgICRjb21tZW50ID0gJyc7CisgICAgfQorCisgIG15ICRzZWxmID0gX2N2YXIgJHZhcjsKKworICBteSAkZGVmID0gJHNlbGYtPmRlZiAoJGNvbmQpOworICBteSAkbmV3X3ZhciA9ICRkZWYgPyAwIDogMTsKKworICAjIEFkZGl0aW9uYWwgY2hlY2tzIGZvciBBdXRvbWFrZSBkZWZpbml0aW9ucy4KKyAgaWYgKCRvd25lciA9PSBWQVJfQVVUT01BS0UgJiYgISAkbmV3X3ZhcikKKyAgICB7CisgICAgICAjIEFuIEF1dG9tYWtlIHZhcmlhYmxlIG11c3QgYmUgY29uc2lzdGVudGx5IGRlZmluZWQgd2l0aCB0aGUgc2FtZQorICAgICAgIyBzaWduIGJ5IEF1dG9tYWtlLgorICAgICAgaWYgKCRkZWYtPnR5cGUgbmUgJHR5cGUgJiYgJGRlZi0+b3duZXIgPT0gVkFSX0FVVE9NQUtFKQorCXsKKwkgIGVycm9yICgkZGVmLT5sb2NhdGlvbiwKKwkJICJBdXRvbWFrZSB2YXJpYWJsZSBgJHZhcicgd2FzIHNldCB3aXRoIGAiCisJCSAuICRkZWYtPnR5cGUgLiAiPScgaGVyZS4uLiIsIHBhcnRpYWwgPT4gMSk7CisJICBlcnJvciAoJHdoZXJlLCAiLi4uIGFuZCBpcyBub3cgc2V0IHdpdGggYCR0eXBlPScgaGVyZS4iKTsKKwkgIHByb2dfZXJyb3IgKCJBdXRvbWFrZSB2YXJpYWJsZSBhc3NpZ25tZW50cyBzaG91bGQgYmUgY29uc2lzdGVudGx5XG4iCisJCSAgICAgIC4gImRlZmluZWQgd2l0aCB0aGUgc2FtZSBzaWduLiIpOworCX0KKworICAgICAgIyBJZiBBdXRvbWFrZSB0cmllcyB0byBvdmVycmlkZSBhIHZhbHVlIHNwZWNpZmllZCBieSB0aGUgdXNlciwKKyAgICAgICMganVzdCBkb24ndCBsZXQgaXQgZG8uCisgICAgICBpZiAoJGRlZi0+b3duZXIgIT0gVkFSX0FVVE9NQUtFKQorCXsKKwkgIGlmICghIGV4aXN0cyAkX3NpbGVudF92YXJpYWJsZV9vdmVycmlkZXskdmFyfSkKKwkgICAgeworCSAgICAgIG15ICRjb25kbXNnID0gKCRjb25kID09IFRSVUUKKwkJCSAgICAgPyAnJyA6ICgiIGluIGNvbmRpdGlvbiBgIiAuICRjb25kLT5odW1hbiAuICInIikpOworCSAgICAgIG1zZ19jb25kX3ZhciAoJ292ZXJyaWRlJywgJGNvbmQsICR2YXIsCisJCQkgICAgInVzZXIgdmFyaWFibGUgYCR2YXInIGRlZmluZWQgaGVyZSRjb25kbXNnLi4uIiwKKwkJCSAgICBwYXJ0aWFsID0+IDEpOworCSAgICAgIG1zZyAoJ292ZXJyaWRlJywgJHdoZXJlLAorCQkgICAiLi4uIG92ZXJyaWRlcyBBdXRvbWFrZSB2YXJpYWJsZSBgJHZhcicgZGVmaW5lZCBoZXJlIik7CisJICAgIH0KKwkgIHZlcmIgKCJyZWZ1c2luZyB0byBvdmVycmlkZSB0aGUgdXNlciBkZWZpbml0aW9uIG9mOlxuIgorCQkuICRzZWxmLT5kdW1wIC4id2l0aCBgIiAuICRjb25kLT5odW1hbiAuICInID0+IGAkdmFsdWUnIik7CisJICByZXR1cm47CisJfQorICAgIH0KKworICAjIERpZmZlcmVudGlhdGUgYXNzaWdubWVudCB0eXBlcy4KKworICAjIDEuIGFwcGVuZCAoKz0pIHRvIGEgdmFyaWFibGUgZGVmaW5lZCBmb3IgY3VycmVudCBjb25kaXRpb24KKyAgaWYgKCR0eXBlIGVxICcrJyAmJiAhICRuZXdfdmFyKQorICAgIHsKKyAgICAgICRkZWYtPmFwcGVuZCAoJHZhbHVlLCAkY29tbWVudCk7CisgICAgICAkc2VsZi0+eydsYXN0LWFwcGVuZCd9ID0gW107CisKKyAgICAgICMgT25seSBpbmNyZWFzZSBvd25lcnMuICBBIFZBUl9DT05GSUdVUkUgdmFyaWFibGUgYXVnbWVudGVkIGluIGEKKyAgICAgICMgTWFrZWZpbGUuYW0gYmVjb21lcyBhIFZBUl9NQUtFRklMRSB2YXJpYWJsZS4KKyAgICAgICRkZWYtPnNldF9vd25lciAoJG93bmVyLCAkd2hlcmUtPmNsb25lKQorCWlmICRvd25lciA+ICRkZWYtPm93bmVyOworICAgIH0KKyAgIyAyLiBhcHBlbmQgKCs9KSB0byBhIHZhcmlhYmxlIGRlZmluZWQgZm9yICphbm90aGVyKiBjb25kaXRpb24KKyAgZWxzaWYgKCR0eXBlIGVxICcrJyAmJiAhICRzZWxmLT5jb25kaXRpb25zLT5mYWxzZSkKKyAgICB7CisgICAgICAjICogR2VuZXJhbGx5LCAkY29uZCBpcyBub3QgVFJVRS4gIEZvciBpbnN0YW5jZToKKyAgICAgICMgICAgIEZPTyA9IGZvbworICAgICAgIyAgICAgaWYgQ09ORAorICAgICAgIyAgICAgICBGT08gKz0gYmFyCisgICAgICAjICAgICBlbmRpZgorICAgICAgIyAgIEluIHRoaXMgY2FzZSwgd2UgZGVjbGFyZSBhbiBoZWxwZXIgdmFyaWFibGUgY29uZGl0aW9uYWxseSwKKyAgICAgICMgICBhbmQgYXBwZW5kIGl0IHRvIEZPTzoKKyAgICAgICMgICAgIEZPTyA9IGZvbyAkKGFtX19hcHBlbmRfMSkKKyAgICAgICMgICAgIEBDT05EX1RSVUVAYW1fX2FwcGVuZF8xID0gYmFyCisgICAgICAjICAgT2YgY291cnNlIGlmIEZPTyBpcyBkZWZpbmVkIHVuZGVyIHNldmVyYWwgY29uZGl0aW9ucywgd2UgYWRkCisgICAgICAjICAgJChhbV9fYXBwZW5kXzEpIHRvIGVhY2ggZGVmaW5pdGlvbnMuCisgICAgICAjCisgICAgICAjICogSWYgJGNvbmQgaXMgVFJVRSwgd2UgZG9uJ3QgbmVlZCB0aGUgaGVscGVyIHZhcmlhYmxlLiAgRS5nLiwgaW4KKyAgICAgICMgICAgIGlmIENPTkQxCisgICAgICAjICAgICAgIEZPTyA9IGZvbzEKKyAgICAgICMgICAgIGVsc2UKKyAgICAgICMgICAgICAgRk9PID0gZm9vMgorICAgICAgIyAgICAgZW5kaWYKKyAgICAgICMgICAgIEZPTyArPSBiYXIKKyAgICAgICMgICB3ZSBjYW4gYWRkIGJhciBkaXJlY3RseSB0byBhbGwgZGVmaW5pdGlvbiBvZiBGT08sIGFuZCBvdXRwdXQKKyAgICAgICMgICAgIEBDT05EX1RSVUVARk9PID0gZm9vMSBiYXIKKyAgICAgICMgICAgIEBDT05EX0ZBTFNFQEZPTyA9IGZvbzIgYmFyCisKKyAgICAgIG15ICRsYXN0YXBwZW5kID0gW107CisgICAgICAjIERvIHdlIG5lZWQgYW4gaGVscGVyIHZhcmlhYmxlPworICAgICAgaWYgKCRjb25kICE9IFRSVUUpCisgICAgICAgIHsKKwkgICMgQ2FuIHdlIHJldXNlIHRoZSBoZWxwZXIgdmFyaWFibGUgY3JlYXRlZCBmb3IgdGhlIHByZXZpb3VzCisJICAjIGFwcGVuZD8gIChXZSBjYW5ub3QgcmV1c2Ugb2xkZXIgaGVscGVyIHZhcmlhYmxlcyBiZWNhdXNlCisJICAjIHdlIG11c3QgcHJlc2VydmUgdGhlIG9yZGVyIG9mIGl0ZW1zIGFwcGVuZGVkIHRvIHRoZQorCSAgIyB2YXJpYWJsZS4pCisJICBteSAkY29uZHN0ciA9ICRjb25kLT5zdHJpbmc7CisJICBteSAka2V5ID0gIiR2YXI6JGNvbmRzdHIiOworCSAgbXkgKCRhcHBlbmR2YXIsICRhcHBlbmR2YXJjb25kKSA9IEB7JHNlbGYtPnsnbGFzdC1hcHBlbmQnfX07CisJICBpZiAoJGFwcGVuZHZhciAmJiAkY29uZHN0ciBlcSAkYXBwZW5kdmFyY29uZCkKKwkgICAgeworCSAgICAgICMgWWVzLCBsZXQncyBzaW1wbHkgYXBwZW5kIHRvIGl0LgorCSAgICAgICR2YXIgPSAkYXBwZW5kdmFyOworCSAgICAgICRvd25lciA9IFZBUl9BVVRPTUFLRTsKKwkgICAgICAkc2VsZiA9IHZhciAoJHZhcik7CisJICAgICAgJGRlZiA9ICRzZWxmLT5yZGVmICgkY29uZCk7CisJICAgICAgJG5ld192YXIgPSAwOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAjIE5vLCBjcmVhdGUgaXQuCisJICAgICAgbXkgJG51bSA9ICsrJF9hcHBlbmR2YXI7CisJICAgICAgbXkgJGh2YXIgPSAiYW1fX2FwcGVuZF8kbnVtIjsKKwkgICAgICAkbGFzdGFwcGVuZCA9IFskaHZhciwgJGNvbmRzdHJdOworCSAgICAgICZkZWZpbmUgKCRodmFyLCBWQVJfQVVUT01BS0UsICcrJywKKwkJICAgICAgICRjb25kLCAkdmFsdWUsICRjb21tZW50LCAkd2hlcmUsICRwcmV0dHkpOworCisJICAgICAgIyBOb3cgSFZBUiBpcyB0byBiZSBhZGRlZCB0byBWQVIuCisJICAgICAgJGNvbW1lbnQgPSAnJzsKKwkgICAgICAkdmFsdWUgPSAiXCQoJGh2YXIpIjsKKwkgICAgfQorCX0KKworICAgICAgIyBBZGQgVkFMVUUgdG8gYWxsIGRlZmluaXRpb25zIG9mIFNFTEYuCisgICAgICBmb3JlYWNoIG15ICR2Y29uZCAoJHNlbGYtPmNvbmRpdGlvbnMtPmNvbmRzKQorICAgICAgICB7CisJICAjIFdlIGhhdmUgYSBiaXQgb2YgZXJyb3IgZGV0ZWN0aW9uIHRvIGRvIGhlcmUuCisJICAjIFRoaXM6CisJICAjICAgaWYgQ09ORDEKKwkgICMgICAgIFggPSBZCisJICAjICAgZW5kaWYKKwkgICMgICBYICs9IFoKKwkgICMgc2hvdWxkIGJlIHJlamVjdGVkIGJlY2F1c2UgWCBpcyBub3QgZGVmaW5lZCBmb3IgYWxsIGNvbmRpdGlvbnMKKwkgICMgd2hlcmUgYCs9JyBhcHBsaWVzLgorCSAgbXkgJHVuZGVmX2NvbmQgPSAkc2VsZi0+bm90X2Fsd2F5c19kZWZpbmVkX2luX2NvbmQgKCRjb25kKTsKKwkgIGlmICghICR1bmRlZl9jb25kLT5mYWxzZSkKKwkgICAgeworCSAgICAgIGVycm9yICgkd2hlcmUsCisJCSAgICAgIkNhbm5vdCBhcHBseSBgKz0nIGJlY2F1c2UgYCR2YXInIGlzIG5vdCBkZWZpbmVkICIKKwkJICAgICAuICJpblxudGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICAiCisJCSAgICAgLiBqb2luICgiXG4gICIsIG1hcCB7ICRfLT5odW1hbiB9ICR1bmRlZl9jb25kLT5jb25kcykKKwkJICAgICAuICJcbkVpdGhlciBkZWZpbmUgYCR2YXInIGluIHRoZXNlIGNvbmRpdGlvbnMsIgorCQkgICAgIC4gIiBvciB1c2VcbmArPScgaW4gdGhlIHNhbWUgY29uZGl0aW9ucyBhcyIKKwkJICAgICAuICIgdGhlIGRlZmluaXRpb25zLiIpOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAmZGVmaW5lICgkdmFyLCAkb3duZXIsICcrJywgJHZjb25kLCAkdmFsdWUsICRjb21tZW50LAorCQkgICAgICAgJHdoZXJlLCAkcHJldHR5KTsKKwkgICAgfQorCX0KKyAgICAgICRzZWxmLT57J2xhc3QtYXBwZW5kJ30gPSAkbGFzdGFwcGVuZDsKKyAgICB9CisgICMgMy4gZmlyc3QgYXNzaWdubWVudCAoPSwgOj0sIG9yICs9KQorICBlbHNlCisgICAgeworICAgICAgIyBUaGVyZSBtdXN0IGJlIG5vIHByZXZpb3VzIHZhbHVlIHVubGVzcyB0aGUgdXNlciBpcyByZWRlZmluaW5nCisgICAgICAjIGFuIEF1dG9tYWtlIHZhcmlhYmxlIG9yIGFuIEFDX1NVQlNUIHZhcmlhYmxlIGZvciBhbiBleGlzdGluZworICAgICAgIyBjb25kaXRpb24uCisgICAgICBfY2hlY2tfYW1iaWd1b3VzX2NvbmRpdGlvbiAoJHNlbGYsICRjb25kLCAkd2hlcmUpCisJdW5sZXNzICghJG5ld192YXIKKwkJJiYgKCgkZGVmLT5vd25lciA9PSBWQVJfQVVUT01BS0UgJiYgJG93bmVyICE9IFZBUl9BVVRPTUFLRSkKKwkJICAgIHx8ICRkZWYtPm93bmVyID09IFZBUl9DT05GSUdVUkUpKTsKKworICAgICAgIyBOZXZlciBkZWNyZWFzZSBhbiBvd25lci4KKyAgICAgICRvd25lciA9ICRkZWYtPm93bmVyCisJaWYgISAkbmV3X3ZhciAmJiAkb3duZXIgPCAkZGVmLT5vd25lcjsKKworICAgICAgIyBBc3NpZ25tZW50cyB0byBhIG1hY3JvIHNldCBpdHMgbG9jYXRpb24uICBXZSBkb24ndCBhZGp1c3QKKyAgICAgICMgbG9jYXRpb25zIGZvciBgKz0nLiAgSWRlYWxseSBJIHN1cHBvc2Ugd2Ugd291bGQgYXNzb2NpYXRlCisgICAgICAjIGxpbmUgbnVtYmVycyB3aXRoIHJhbmRvbSBiaXRzIG9mIHRleHQuCisgICAgICAkZGVmID0gbmV3IEF1dG9tYWtlOjpWYXJEZWYgKCR2YXIsICR2YWx1ZSwgJGNvbW1lbnQsICR3aGVyZS0+Y2xvbmUsCisJCQkJICAgJHR5cGUsICRvd25lciwgJHByZXR0eSk7CisgICAgICAkc2VsZi0+c2V0ICgkY29uZCwgJGRlZik7CisgICAgICBwdXNoIEBfdmFyX29yZGVyLCAkdmFyOworICAgIH0KKworICAjIENhbGwgYW55IGRlZmluZWQgaG9vay4gIFRoaXMgaGVscHMgdG8gdXBkYXRlIHNvbWUgaW50ZXJuYWwgc3RhdGUKKyAgIyAqd2hpbGUqIHBhcnNpbmcgdGhlIGZpbGUuICBGb3IgaW5zdGFuY2UgdGhlIGhhbmRsaW5nIG9mIFNVRkZJWEVTCisgICMgcmVxdWlyZXMgdGhpcyAoc2VlIHZhcl9TVUZGSVhFU190cmlnZ2VyKS4KKyAgJnskX2hvb2tzeyR2YXJ9fSgkdHlwZSwgJHZhbHVlKSBpZiBleGlzdHMgJF9ob29rc3skdmFyfTsKK30KKworPWl0ZW0gQzx2YXJpYWJsZV9kZWxldGUgKCR2YXJuYW1lLCBbQGNvbmRzXSk+CisKK0ZvcmdldCBhYm91dCBDPCR2YXJuYW1lPiB1bmRlciB0aGUgY29uZGl0aW9ucyBDPEBjb25kcz4sIG9yIGNvbXBsZXRlbHkKK2lmIEM8QGNvbmRzPiBpcyBlbXB0eS4KKworPWN1dAorCitzdWIgdmFyaWFibGVfZGVsZXRlICgkQCkKK3sKKyAgbXkgKCR2YXIsIEBjb25kcykgPSBAXzsKKworICBpZiAoIUBjb25kcykKKyAgICB7CisgICAgICBkZWxldGUgJF92YXJpYWJsZV9kaWN0eyR2YXJ9OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGZvciBteSAkY29uZCAoQGNvbmRzKQorCXsKKwkgIGRlbGV0ZSAkX3ZhcmlhYmxlX2RpY3R7JHZhcn17J2RlZnMnfXskY29uZH07CisJfQorICAgIH0KKyAgaWYgKCR2YXIgPX4gL18oW1s6YWxudW06XV0rKSQvKQorICAgIHsKKyAgICAgIGRlbGV0ZSAkX3ByaW1hcnlfZGljdHskMX17JHZhcn07CisgICAgfQorfQorCis9aXRlbSBDPCRzdHIgPSB2YXJpYWJsZXNfZHVtcD4KKworUmV0dXJuIGEgc3RyaW5nIGRlc2NyaWJpbmcgYWxsIHdlIGtub3cgYWJvdXQgYWxsIHZhcmlhYmxlcy4KK0ZvciBkZWJ1Z2dpbmcuCisKKz1jdXQKKworc3ViIHZhcmlhYmxlc19kdW1wICgpCit7CisgIG15ICR0ZXh0ID0gIkFsbCB2YXJpYWJsZXM6XG57XG4iOworICBmb3JlYWNoIG15ICR2YXIgKHNvcnQgeyAkYS0+bmFtZSBjbXAgJGItPm5hbWUgfSB2YXJpYWJsZXMpCisgICAgeworICAgICAgJHRleHQgLj0gJHZhci0+ZHVtcDsKKyAgICB9CisgICR0ZXh0IC49ICJ9XG4iOworICByZXR1cm4gJHRleHQ7Cit9CisKKworPWl0ZW0gQzwkdmFyID0gc2V0X3NlZW4gKCR2YXJuYW1lKT4KKworPWl0ZW0gQzwkdmFyID0gJHZhci1FPGd0PnNldF9zZWVuPgorCitNYXJrIGFsbCBkZWZpbml0aW9ucyBvZiB0aGlzIHZhcmlhYmxlIGFzIGV4YW1pbmVkLCBpZiB0aGUgdmFyaWFibGUKK2V4aXN0cy4gIFNlZSBMPEF1dG9tYWtlOjpWYXJEZWY6OnNldF9zZWVuPi4KKworUmV0dXJuIHRoZSBDPFZhcmlhYmxlPiBvYmplY3QgaWYgdGhlIHZhcmlhYmxlIGV4aXN0cywgb3IgMAorb3RoZXJ3aXNlIChpLmUuLCBhcyB0aGUgQzx2YXI+IGZ1bmN0aW9uKS4KKworPWN1dAorCitzdWIgc2V0X3NlZW4gKCQpCit7CisgIG15ICgkc2VsZikgPSBAXzsKKyAgJHNlbGYgPSByZWYgJHNlbGYgPyAkc2VsZiA6IHZhciAkc2VsZjsKKworICByZXR1cm4gMCB1bmxlc3MgJHNlbGY7CisKKyAgZm9yIG15ICRjICgkc2VsZi0+Y29uZGl0aW9ucy0+Y29uZHMpCisgICAgeworICAgICAgJHNlbGYtPnJkZWYgKCRjKS0+c2V0X3NlZW47CisgICAgfQorCisgIHJldHVybiAkc2VsZjsKK30KKworCis9aXRlbSBDPCRjb3VudCA9IHJlcXVpcmVfdmFyaWFibGVzICgkd2hlcmUsICRyZWFzb24sICRjb25kLCBAdmFyaWFibGVzKT4KKworTWFrZSBzdXJlIHRoYXQgZWFjaCBzdXBwbGllZCB2YXJpYWJsZSBpcyBkZWZpbmVkIGluIEM8JGNvbmQ+LgorT3RoZXJ3aXNlLCBpc3N1ZSBhIHdhcm5pbmcgc2hvd2luZyBDPCRyZWFzb24+IChDPCRyZWFzb24+IHNob3VsZCBiZQordGhlIHJlYXNvbiB3aHkgdGhlc2UgdmFyaWFibGVzIGFyZSByZXF1aXJlZCwgZm9yIGluc3RhbmNlIEM8J29wdGlvbiBmb28KK3VzZWQnPikuICBJZiB3ZSBrbm93IHdoaWNoIG1hY3JvIGNhbiBkZWZpbmUgdGhpcyB2YXJpYWJsZSwgaGludCB0aGUKK3VzZXIuICBSZXR1cm4gdGhlIG51bWJlciBvZiB1bmRlZmluZWQgdmFyaWFibGVzLgorCis9Y3V0CisKK3N1YiByZXF1aXJlX3ZhcmlhYmxlcyAoJCQkQCkKK3sKKyAgbXkgKCR3aGVyZSwgJHJlYXNvbiwgJGNvbmQsIEB2YXJzKSA9IEBfOworICBteSAkcmVzID0gMDsKKyAgJHJlYXNvbiAuPSAnIGJ1dCAnIHVubGVzcyAkcmVhc29uIGVxICcnOworCisgVkFSSUFCTEU6CisgIGZvcmVhY2ggbXkgJHZhciAoQHZhcnMpCisgICAgeworICAgICAgIyBOb3RoaW5nIHRvIGRvIGlmIHRoZSB2YXJpYWJsZSBleGlzdHMuCisgICAgICBuZXh0IFZBUklBQkxFCisJaWYgdmFyZGVmICgkdmFyLCAkY29uZCk7CisKKyAgICAgIG15ICR0ZXh0ID0gIiRyZWFzb25gJHZhcicgaXMgdW5kZWZpbmVkXG4iOworICAgICAgbXkgJHYgPSB2YXIgJHZhcjsKKyAgICAgIGlmICgkdikKKwl7CisJICBteSAkdW5kZWZfY29uZCA9ICR2LT5ub3RfYWx3YXlzX2RlZmluZWRfaW5fY29uZCAoJGNvbmQpOworCSAgbmV4dCBWQVJJQUJMRQorCSAgICBpZiAkdW5kZWZfY29uZC0+ZmFsc2U7CisJICAkdGV4dCAuPSAoImluIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAgIgorCQkgICAgLiBqb2luICgiXG4gICIsIG1hcCB7ICRfLT5odW1hbiB9ICR1bmRlZl9jb25kLT5jb25kcykKKwkJICAgIC4gIlxuIik7CisJfQorCisgICAgICArKyRyZXM7CisKKyAgICAgIGlmIChleGlzdHMgJF9hbV9tYWNyb19mb3JfdmFyeyR2YXJ9KQorCXsKKwkgIG15ICRtYWMgPSAkX2FtX21hY3JvX2Zvcl92YXJ7JHZhcn07CisJICAkdGV4dCAuPSAiICBUaGUgdXN1YWwgd2F5IHRvIGRlZmluZSBgJHZhcicgaXMgdG8gYWRkICIKKwkgICAgLiAiYCRtYWMnXG4gIHRvIGAkY29uZmlndXJlX2FjJyBhbmQgcnVuIGBhY2xvY2FsJyBhbmQgIgorCSAgICAuICJgYXV0b2NvbmYnIGFnYWluLiI7CisJICAjIGFjbG9jYWwgd2lsbCBub3Qgd2FybiBhYm91dCB1bmRlZmluZWQgbWFjcm9zIHVubGVzcyBpdAorCSAgIyBzdGFydHMgd2l0aCBBTV8uCisJICAkdGV4dCAuPSAiXG4gIElmIGAkbWFjJyBpcyBpbiBgJGNvbmZpZ3VyZV9hYycsIG1ha2Ugc3VyZVxuIgorCSAgICAuICIgIGl0cyBkZWZpbml0aW9uIGlzIGluIGFjbG9jYWwncyBzZWFyY2ggcGF0aC4iCisJICAgIHVubGVzcyAkbWFjID1+IC9eQU1fLzsKKwl9CisgICAgICBlbHNpZiAoZXhpc3RzICRfYWNfbWFjcm9fZm9yX3ZhcnskdmFyfSkKKwl7CisJICAkdGV4dCAuPSAiICBUaGUgdXN1YWwgd2F5IHRvIGRlZmluZSBgJHZhcicgaXMgdG8gYWRkICIKKwkgICAgLiAiYCRfYWNfbWFjcm9fZm9yX3ZhcnskdmFyfSdcbiAgdG8gYCRjb25maWd1cmVfYWMnIGFuZCAiCisJICAgIC4gInJ1biBgYXV0b2NvbmYnIGFnYWluLiI7CisJfQorCisgICAgICBlcnJvciAkd2hlcmUsICR0ZXh0LCB1bmlxX3Njb3BlID0+IFVTX0dMT0JBTDsKKyAgICB9CisgIHJldHVybiAkcmVzOworfQorCis9aXRlbSBDPCRjb3VudCA9ICR2YXItPnJlcXVpcmVzX3ZhcmlhYmxlcyAoJHJlYXNvbiwgQHZhcmlhYmxlcyk+CisKK1NhbWUgYXMgQzxyZXF1aXJlX3ZhcmlhYmxlcz4sIGJ1dCBhIG1ldGhvZCBvZiBBdXRvbWFrZTo6VmFyaWFibGUuCitDPEB2YXJpYWJsZXM+IHNob3VsZCBiZSBkZWZpbmVkIGluIHRoZSBzYW1lIGNvbmRpdGlvbnMgYXMgQzwkdmFyPiBpcworZGVmaW5lZC4KKworPWN1dAorCitzdWIgcmVxdWlyZXNfdmFyaWFibGVzICgkJEApCit7CisgIG15ICgkdmFyLCAkcmVhc29uLCBAYXJncykgPSBAXzsKKyAgbXkgJHJlcyA9IDA7CisgIGZvciBteSAkY29uZCAoJHZhci0+Y29uZGl0aW9ucy0+Y29uZHMpCisgICAgeworICAgICAgJHJlcyArPSByZXF1aXJlX3ZhcmlhYmxlcyAoJHZhci0+cmRlZiAoJGNvbmQpLT5sb2NhdGlvbiwgJHJlYXNvbiwKKwkJCQkgJGNvbmQsIEBhcmdzKTsKKyAgICB9CisgIHJldHVybiAkcmVzOworfQorCisKKz1pdGVtIEM8dmFyaWFibGVfdmFsdWUgKCR2YXIpPgorCitHZXQgdGhlIEM8VFJVRT4gdmFsdWUgb2YgYSB2YXJpYWJsZSwgd2FybiBpZiB0aGUgdmFyaWFibGUgaXMKK2NvbmRpdGlvbmFsbHkgZGVmaW5lZC4gIEM8JHZhcj4gY2FuIGJlIGVpdGhlciBhIHZhcmlhYmxlIG5hbWUKK29yIGEgQzxBdXRvbWFrZTo6VmFyaWFibGU+IGluc3RhbmNlICh0aGlzIGFsbG93cyBjYWxscyBzdWNoCithcyBDPCR2YXItRTxndD52YXJpYWJsZV92YWx1ZT4pLgorCis9Y3V0CisKK3N1YiB2YXJpYWJsZV92YWx1ZSAoJCkKK3sKKyAgICBteSAoJHZhcikgPSBAXzsKKyAgICBteSAkdiA9IHJlZiAoJHZhcikgPyAkdmFyIDogdmFyICgkdmFyKTsKKyAgICByZXR1cm4gKCkgdW5sZXNzICR2OworICAgICR2LT5jaGVja19kZWZpbmVkX3VuY29uZGl0aW9uYWxseTsKKyAgICBteSAkZCA9ICR2LT5kZWYgKFRSVUUpOworICAgIHJldHVybiAkZCA/ICRkLT52YWx1ZSA6ICIiOworfQorCis9aXRlbSBDPCRzdHIgPSBvdXRwdXRfdmFyaWFibGVzPgorCitGb3JtYXQgZGVmaW5pdGlvbnMgZm9yIGFsbCB2YXJpYWJsZXMuCisKKz1jdXQKKworc3ViIG91dHB1dF92YXJpYWJsZXMgKCkKK3sKKyAgbXkgJHJlcyA9ICcnOworICAjIFdlIG91dHB1dCB2YXJpYWJsZXMgaXQgaW4gdGhlIHNhbWUgb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlCisgICMgZGVmaW5lZCAoc2tpcHBpbmcgZHVwbGljYXRlcykuCisgIG15IEB2YXJzID0gdW5pcSBAX3Zhcl9vcmRlcjsKKworICAjIE91dHB1dCBhbGwgdGhlIEF1dG9tYWtlIHZhcmlhYmxlcy4gIElmIHRoZSB1c2VyIGNoYW5nZWQgb25lLAorICAjIHRoZW4gaXQgaXMgbm93IG1hcmtlZCBhcyBWQVJfQ09ORklHVVJFIG9yIFZBUl9NQUtFRklMRS4KKyAgZm9yZWFjaCBteSAkdmFyIChAdmFycykKKyAgICB7CisgICAgICBteSAkdiA9IHJ2YXIgJHZhcjsKKyAgICAgIGZvcmVhY2ggbXkgJGNvbmQgKCR2LT5jb25kaXRpb25zLT5jb25kcykKKwl7CisJICAkcmVzIC49ICR2LT5vdXRwdXQgKCRjb25kKQorCSAgICBpZiAkdi0+cmRlZiAoJGNvbmQpLT5vd25lciA9PSBWQVJfQVVUT01BS0U7CisJfQorICAgIH0KKworICAjIE5vdyBkdW1wIHRoZSB1c2VyIHZhcmlhYmxlcyB0aGF0IHdlcmUgZGVmaW5lZC4KKyAgZm9yZWFjaCBteSAkdmFyIChAdmFycykKKyAgICB7CisgICAgICBteSAkdiA9IHJ2YXIgJHZhcjsKKyAgICAgIGZvcmVhY2ggbXkgJGNvbmQgKCR2LT5jb25kaXRpb25zLT5jb25kcykKKwl7CisJICAkcmVzIC49ICR2LT5vdXRwdXQgKCRjb25kKQorCSAgICBpZiAkdi0+cmRlZiAoJGNvbmQpLT5vd25lciAhPSBWQVJfQVVUT01BS0U7CisJfQorICAgIH0KKyAgcmV0dXJuICRyZXM7Cit9CisKKz1pdGVtIEM8JHZhci1FPGd0PnRyYXZlcnNlX3JlY3Vyc2l2ZWx5ICgmZnVuX2l0ZW0sICZmdW5fY29sbGVjdCwgW2NvbmRfZmlsdGVyID1FPGd0PiAkY29uZF9maWx0ZXJdLCBbaW5uZXJfZXhwYW5kID1FPGd0PiAxXSwgW3NraXBfYWNfc3Vic3QgPUU8Z3Q+IDFdKT4KKworU3BsaXQgdGhlIHZhbHVlIG9mIHRoZSBBdXRvbWFrZTo6VmFyaWFibGUgQzwkdmFyPiBvbiBzcGFjZSwgYW5kCit0cmF2ZXJzZSBpdHMgY29tcG9uZW50cyByZWN1cnNpdmVseS4KKworSWYgQzwkY29uZF9maWx0ZXI+IGlzIGFuIEM8QXV0b21ha2U6OkNvbmRpdGlvbj4sIHByb2Nlc3MgYW55Citjb25kaXRpb25zIHdoaWNoIGFyZSB0cnVlIHdoZW4gQzwkY29uZF9maWx0ZXI+IGlzIHRydWUuICBPdGhlcndpc2UsCitwcm9jZXNzIGFsbCBjb25kaXRpb25zLgorCitXZSBkaXN0aW5ndWlzaCB0d28ga2luZHMgb2YgaXRlbXMgaW4gdGhlIGNvbnRlbnQgb2YgQzwkdmFyPi4KK1Rlcm1zIHRoYXQgbG9vayBsaWtlIEM8JChmb28pPiBvciBDPCR7Zm9vfT4gYXJlIHN1YnZhcmlhYmxlcworYW5kIGNhdXNlIHJlY3Vyc2lvbi4gIE90aGVyIHRlcm1zIGFyZSBhc3N1bWVkIHRvIGJlIGZpbGVuYW1lcy4KKworRWFjaCB0aW1lIGEgZmlsZW5hbWUgaXMgZW5jb3VudGVyZWQsIEM8JmZ1bl9pdGVtPiBpcyBjYWxsZWQgd2l0aCB0aGUKK2ZvbGxvd2luZyBhcmd1bWVudHM6CisKKyAgKCR2YXIsICAgICAgICAtLSB0aGUgQXV0b21ha2U6OlZhcmlhYmxlIHdlIGFyZSBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICB0cmF2ZXJzaW5nCisgICAkdmFsLCAgICAgICAgLS0gdGhlIGl0ZW0gKGkuZS4sIGZpbGVuYW1lKSB0byBwcm9jZXNzCisgICAkY29uZCwgICAgICAgLS0gdGhlIENvbmRpdGlvbiBmb3IgdGhlICR2YXIgZGVmaW5pdGlvbiB3ZSBhcmUKKyAgICAgICAgICAgICAgICAgICBleGFtaW5pbmcgKGlnbm9yaW5nIHRoZSByZWN1cnNpb24gY29udGV4dCkKKyAgICRmdWxsX2NvbmQpICAtLSB0aGUgZnVsbCBDb25kaXRpb24sIHRha2luZyBpbnRvIGFjY291bnQKKyAgICAgICAgICAgICAgICAgICBjb25kaXRpb25zIGluaGVyaXRlZCBmcm9tIHBhcmVudCB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICBkdXJpbmcgcmVjdXJzaW9uCisKK0lmIEM8aW5uZXJfZXhwYW5kPiBpcyBzZXQsIHZhcmlhYmxlIHJlZmVyZW5jZXMgb2NjdXJyaW5nIGluIGZpbGVuYW1lCisoYXMgaW4gQzwkKEJBU0UpLmV4dD4pIGFyZSBleHBhbmRlZCBiZWZvcmUgdGhlIGZpbGVuYW1lIGlzIHBhc3NlZCB0bworQzwmZnVuX2l0ZW0+LgorCitJZiBDPHNraXBfYWNfc3Vic3Q+IGlzIHNldCwgQXV0b2NvbmYgQHN1YnN0aXR1dGlvbnNAIHdpbGwgYmUgc2tpcHBlZCwKK2kuZS4sIEM8JmZ1bl9pdGVtPiB3aWxsIG5ldmVyIGJlIGNhbGxlZCBmb3IgdGhlbS4KKworQzwmZnVuX2l0ZW0+IG1heSByZXR1cm4gYSBsaXN0IG9mIGl0ZW1zLCB0aGV5IHdpbGwgYmUgcGFzc2VkIHRvCitDPCZmdW5fc3RvcmU+IGxhdGVyIG9uLiAgRGVmaW5lIEM8JmZ1bl9pdGVtPiBvciBAPCZmdW5fc3RvcmU+IGFzCitDPHVuZGVmPiB3aGVuIHRoZXkgc2VydmUgbm8gcHVycG9zZS4KKworT25jZSBhbGwgaXRlbXMgb2YgYSB2YXJpYWJsZSBoYXZlIGJlZW4gcHJvY2Vzc2VkLCB0aGUgcmVzdWx0IChvZiB0aGUKK2NhbGxzIHRvIEM8JmZ1bl9pdGVtcz4sIG9yIG9mIHJlY3Vyc2l2ZSB0cmF2ZXJzYWxzIG9mIHN1YnZhcmlhYmxlcykKK2FyZSBwYXNzZWQgdG8gQzwmZnVuX2NvbGxlY3Q+LiAgQzwmZnVuX2NvbGxlY3Q+IHJlY2VpdmVzIHRocmVlCithcmd1bWVudHM6CisKKyAgKCR2YXIsICAgICAgICAgLS0gdGhlIHZhcmlhYmxlIGJlaW5nIHRyYXZlcnNlZAorICAgJHBhcmVudF9jb25kLCAtLSB0aGUgQ29uZGl0aW9uIGluaGVyaXRlZCBmcm9tIHBhcmVudAorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgZHVyaW5nIHJlY3Vyc2lvbgorICAgQGNvbmRsaXN0KSAgICAtLSBhIGxpc3Qgb2YgWyRjb25kLCBAcmVzdWx0c10gcGFpcnMKKyAgICAgICAgICAgICAgICAgICAgd2hlcmUgZWFjaCAkY29uZCBhcHBlYXIgb25seSBvbmNlLCBhbmQgQHJlc3VsdAorICAgICAgICAgICAgICAgICAgICBhcmUgYWxsIHRoZSByZXN1bHRzIGZvciB0aGlzIGNvbmRpdGlvbi4KKworVHlwaWNhbGx5IHlvdSBzaG91bGQgZG8gQzwkY29uZC0+bWVyZ2UgKCRwYXJlbnRfY29uZCk+IHRvIHJlY29tcHV0ZQordGhlIEM8JGZ1bGxfY29uZD4gYXNzb2NpYXRlZCB0byBDPEByZXN1bHQ+LiAgQzwmZnVuX2NvbGxlY3Q+IG1heQorcmV0dXJuIGEgbGlzdCBvZiBpdGVtcywgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIHJlc3VsdCBvZgorQzxBdXRvbWFrZTo6VmFyaWFibGU6OnRyYXZlcnNlX3JlY3Vyc2l2ZWx5PiAodGhlIHRvcC1sZXZlbCwgb3IgaXRzCityZWN1cnNpdmUgY2FsbHMpLgorCis9Y3V0CisKKyMgQ29udGFpbnMgYSBzdGFjayBvZiBgZnJvbScgYW5kIGB0bycgcGFydHMgb2YgdmFyaWFibGUKKyMgc3Vic3RpdHV0aW9ucyBjdXJyZW50bHkgaW4gZm9yY2UuCitteSBAX3N1YnN0ZnJvbXM7CitteSBAX3N1YnN0dG9zOworc3ViIHRyYXZlcnNlX3JlY3Vyc2l2ZWx5ICgkJiY7JSkKK3sKKyAgKyskX3RyYXZlcnNhbDsKKyAgQF9zdWJzdGZyb21zID0gKCk7CisgIEBfc3Vic3R0b3MgPSAoKTsKKyAgbXkgKCR2YXIsICRmdW5faXRlbSwgJGZ1bl9jb2xsZWN0LCAlb3B0aW9ucykgPSBAXzsKKyAgbXkgJGNvbmRfZmlsdGVyID0gJG9wdGlvbnN7J2NvbmRfZmlsdGVyJ307CisgIG15ICRpbm5lcl9leHBhbmQgPSAkb3B0aW9uc3snaW5uZXJfZXhwYW5kJ307CisgIG15ICRza2lwX2FjX3N1YnN0ID0gJG9wdGlvbnN7J3NraXBfYWNfc3Vic3QnfTsKKyAgcmV0dXJuICR2YXItPl9kb19yZWN1cnNpdmVfdHJhdmVyc2FsICgkdmFyLAorCQkJCQkkZnVuX2l0ZW0sICRmdW5fY29sbGVjdCwKKwkJCQkJJGNvbmRfZmlsdGVyLCBUUlVFLCAkaW5uZXJfZXhwYW5kLAorCQkJCQkkc2tpcF9hY19zdWJzdCkKK30KKworIyBUaGUgZ3V0cyBvZiBBdXRvbWFrZTo6VmFyaWFibGU6OnRyYXZlcnNlX3JlY3Vyc2l2ZWx5Lgorc3ViIF9kb19yZWN1cnNpdmVfdHJhdmVyc2FsICgkJCYmJCQkJCkKK3sKKyAgbXkgKCR2YXIsICRwYXJlbnQsICRmdW5faXRlbSwgJGZ1bl9jb2xsZWN0LCAkY29uZF9maWx0ZXIsICRwYXJlbnRfY29uZCwKKyAgICAgICRpbm5lcl9leHBhbmQsICRza2lwX2FjX3N1YnN0KSA9IEBfOworCisgICR2YXItPnNldF9zZWVuOworCisgIGlmICgkdmFyLT57J3NjYW5uZWQnfSA9PSAkX3RyYXZlcnNhbCkKKyAgICB7CisgICAgICBlcnJfdmFyICR2YXIsICJ2YXJpYWJsZSBgIiAuICR2YXItPm5hbWUoKSAuICInIHJlY3Vyc2l2ZWx5IGRlZmluZWQiOworICAgICAgcmV0dXJuICgpOworICAgIH0KKyAgJHZhci0+eydzY2FubmVkJ30gPSAkX3RyYXZlcnNhbDsKKworICBteSBAYWxscmVzdWx0cyA9ICgpOworICBteSAkY29uZF9vbmNlID0gMDsKKyAgZm9yZWFjaCBteSAkY29uZCAoJHZhci0+Y29uZGl0aW9ucy0+Y29uZHMpCisgICAgeworICAgICAgaWYgKHJlZiAkY29uZF9maWx0ZXIpCisJeworCSAgIyBJZ25vcmUgY29uZGl0aW9ucyB0aGF0IGRvbid0IG1hdGNoICRjb25kX2ZpbHRlci4KKwkgIG5leHQgaWYgISAkY29uZC0+dHJ1ZV93aGVuICgkY29uZF9maWx0ZXIpOworCSAgIyBJZiB3ZSBmb3VuZCBvdXQgc2V2ZXJhbCBkZWZpbml0aW9ucyBvZiAkdmFyCisJICAjIG1hdGNoICRjb25kX2ZpbHRlciB0aGVuIHdlIGFyZSBpbiB0cm91YmxlLgorCSAgIyBUZWxsIHRoZSB1c2VyIHdlIGRvbid0IHN1cHBvcnQgdGhpcy4KKwkgICR2YXItPmNoZWNrX2RlZmluZWRfdW5jb25kaXRpb25hbGx5ICgkcGFyZW50LCAkcGFyZW50X2NvbmQpCisJICAgIGlmICRjb25kX29uY2U7CisJICAkY29uZF9vbmNlID0gMTsKKwl9CisgICAgICBteSBAcmVzdWx0ID0gKCk7CisgICAgICBteSAkZnVsbF9jb25kID0gJGNvbmQtPm1lcmdlICgkcGFyZW50X2NvbmQpOworCisgICAgICBteSBAdG9fcHJvY2VzcyA9ICR2YXItPnZhbHVlX2FzX2xpc3QgKCRjb25kLCAkcGFyZW50LCAkcGFyZW50X2NvbmQpOworICAgICAgd2hpbGUgKEB0b19wcm9jZXNzKQorCXsKKwkgIG15ICR2YWwgPSBzaGlmdCBAdG9fcHJvY2VzczsKKwkgICMgSWYgJHZhbCBpcyBhIHZhcmlhYmxlIChpLmUuICR7Zm9vfSBvciAkKGJhciksIG5vdCBhIGZpbGVuYW1lKSwKKwkgICMgaGFuZGxlIHRoZSBzdWIgdmFyaWFibGUgcmVjdXJzaXZlbHkuCisJICAjIChCYWNrc2xhc2hlcyBiZWZvcmUgYH0nIGFuZCBgKScgd2l0aGluIGJyYWNrZXRzIGFyZSBoZXJlIHRvCisJICAjIHBsZWFzZSBFbWFjcydzIGluZGVudGF0aW9uLikKKwkgIGlmICgkdmFsID1+IC9eXCRceyhbXlx9XSopXH0kLyB8fCAkdmFsID1+IC9eXCRcKChbXlwpXSopXCkkLykKKwkgICAgeworCSAgICAgIG15ICRzdWJ2YXJuYW1lID0gJDE7CisKKwkgICAgICAjIElmIHRoZSB1c2VyIHVzZXMgYSBsb3NpbmcgdmFyaWFibGUgbmFtZSwganVzdCBpZ25vcmUgaXQuCisJICAgICAgIyBUaGlzIGlzbid0IGlkZWFsLCBidXQgcGVvcGxlIGhhdmUgcmVxdWVzdGVkIGl0LgorCSAgICAgIG5leHQgaWYgKCRzdWJ2YXJuYW1lID1+IC9cQC4qXEAvKTsKKworCSAgICAgICMgU2VlIGlmIHRoZSB2YXJpYWJsZSBpcyBhY3R1YWxseSBhIHN1YnN0aXR1dGlvbiByZWZlcmVuY2UKKwkgICAgICBteSAoJGZyb20sICR0byk7CisgICAgICAgICAgICAgICMgVGhpcyBoYW5kbGVzIHN1YnN0aXR1dGlvbiByZWZlcmVuY2VzIGxpa2UgJHtmb286LmE9LmJ9LgorCSAgICAgIGlmICgkc3VidmFybmFtZSA9fiAvXihbXjpdKik6KFtePV0qKT0oLiopJC9vKQorCQl7CisJCSAgJHN1YnZhcm5hbWUgPSAkMTsKKwkJICAkdG8gPSAkMzsKKwkJICAkZnJvbSA9IHF1b3RlbWV0YSAkMjsKKwkJfQorCisJICAgICAgbXkgJHN1YnZhciA9IHZhciAoJHN1YnZhcm5hbWUpOworCSAgICAgICMgRG9uJ3QgcmVjdXJzZSBpbnRvIHVuZGVmaW5lZCB2YXJpYWJsZXMuCisJICAgICAgbmV4dCB1bmxlc3MgJHN1YnZhcjsKKworCSAgICAgIHB1c2ggQF9zdWJzdGZyb21zLCAkZnJvbTsKKwkgICAgICBwdXNoIEBfc3Vic3R0b3MsICR0bzsKKworCSAgICAgIG15IEByZXMgPSAkc3VidmFyLT5fZG9fcmVjdXJzaXZlX3RyYXZlcnNhbCAoJHBhcmVudCwKKwkJCQkJCQkgICRmdW5faXRlbSwKKwkJCQkJCQkgICRmdW5fY29sbGVjdCwKKwkJCQkJCQkgICRjb25kX2ZpbHRlciwKKwkJCQkJCQkgICRmdWxsX2NvbmQsCisJCQkJCQkJICAkaW5uZXJfZXhwYW5kLAorCQkJCQkJCSAgJHNraXBfYWNfc3Vic3QpOworCSAgICAgIHB1c2ggKEByZXN1bHQsIEByZXMpOworCisJICAgICAgcG9wIEBfc3Vic3Rmcm9tczsKKwkgICAgICBwb3AgQF9zdWJzdHRvczsKKworCSAgICAgIG5leHQ7CisJICAgIH0KKwkgICMgVHJ5IHRvIGV4cGFuZCB2YXJpYWJsZSByZWZlcmVuY2VzIGluc2lkZSBmaWxlbmFtZXMgc3VjaCBhcworCSAgIyBgJChOQU1FKS50eHQnLiAgV2UgZG8gbm90IGhhbmRsZSBgOi5mb289LmJhcicKKwkgICMgc3Vic3RpdHV0aW9ucywgYnV0IGl0IHdvdWxkIG1ha2UgbGl0dGxlIHNlbnNlIHRvIHVzZSB0aGlzCisJICAjIGhlcmUgYW55d2F5LgorCSAgZWxzaWYgKCRpbm5lcl9leHBhbmQKKwkJICYmICgkdmFsID1+IC9cJFx7KFteXH1dKilcfS8gfHwgJHZhbCA9fiAvXCRcKChbXlwpXSopXCkvKSkKKwkgICAgeworCSAgICAgIG15ICRzdWJ2YXJuYW1lID0gJDE7CisJICAgICAgbXkgJHN1YnZhciA9IHZhciAkc3VidmFybmFtZTsKKwkgICAgICBpZiAoJHN1YnZhcikKKwkJeworCQkgICMgUmVwbGFjZSB0aGUgcmVmZXJlbmNlIGJ5IGl0cyB2YWx1ZSwgYW5kIHJlc2NoZWR1bGUKKwkJICAjIGZvciBleHBhbnNpb24uCisJCSAgZm9yZWFjaCBteSAkYyAoJHN1YnZhci0+Y29uZGl0aW9ucy0+Y29uZHMpCisJCSAgICB7CisJCSAgICAgIGlmIChyZWYgJGNvbmRfZmlsdGVyKQorCQkJeworCQkJICAjIElnbm9yZSBjb25kaXRpb25zIHRoYXQgZG9uJ3QgbWF0Y2ggJGNvbmRfZmlsdGVyLgorCQkJICBuZXh0IGlmICEgJGMtPnRydWVfd2hlbiAoJGNvbmRfZmlsdGVyKTsKKwkJCSAgIyBJZiB3ZSBmb3VuZCBvdXQgc2V2ZXJhbCBkZWZpbml0aW9ucyBvZiAkdmFyCisJCQkgICMgbWF0Y2ggJGNvbmRfZmlsdGVyIHRoZW4gd2UgYXJlIGluIHRyb3VibGUuCisJCQkgICMgVGVsbCB0aGUgdXNlciB3ZSBkb24ndCBzdXBwb3J0IHRoaXMuCisJCQkgICRzdWJ2YXItPmNoZWNrX2RlZmluZWRfdW5jb25kaXRpb25hbGx5ICgkdmFyLAorCQkJCQkJCQkgICRmdWxsX2NvbmQpCisJCQkgICAgaWYgJGNvbmRfb25jZTsKKwkJCSAgJGNvbmRfb25jZSA9IDE7CisJCQl9CisJCSAgICAgIG15ICRzdWJ2YWwgPSAkc3VidmFyLT5yZGVmICgkYyktPnZhbHVlOworCQkgICAgICAkdmFsID1+IHMvXCRceyRzdWJ2YXJuYW1lXH0vJHN1YnZhbC9nOworCQkgICAgICAkdmFsID1+IHMvXCRcKCRzdWJ2YXJuYW1lXCkvJHN1YnZhbC9nOworCQkgICAgICB1bnNoaWZ0IEB0b19wcm9jZXNzLCBzcGxpdCAoJyAnLCAkdmFsKTsKKwkJICAgIH0KKwkJICBuZXh0OworCQl9CisJICAgICAgIyBXZSBkbyBub3Qga25vdyBhbnkgdmFyaWFibGUgd2l0aCB0aGlzIG5hbWUuICBGYWxsIHRocm91Z2gKKwkgICAgICAjIHRvIGZpbGVuYW1lIHByb2Nlc3NpbmcuCisJICAgIH0KKwkgIGVsc2lmICgkc2tpcF9hY19zdWJzdCAmJiAkdmFsID1+IC9eXEAuK1xAJC8pCisJICAgIHsKKwkgICAgICBuZXh0OworCSAgICB9CisKKwkgIGlmICgkZnVuX2l0ZW0pICMgJHZhciBpcyBhIGZpbGVuYW1lIHdlIG11c3QgcHJvY2VzcworCSAgICB7CisJICAgICAgbXkgJHN1YnN0bnVtPSQjX3N1YnN0ZnJvbXM7CisJICAgICAgd2hpbGUgKCRzdWJzdG51bSA+PSAwKQorCQl7CisJCSAgJHZhbCA9fiBzLyRfc3Vic3Rmcm9tc1skc3Vic3RudW1dJC8kX3N1YnN0dG9zWyRzdWJzdG51bV0vCisJCSAgICBpZiBkZWZpbmVkICRfc3Vic3Rmcm9tc1skc3Vic3RudW1dOworCQkgICRzdWJzdG51bSAtPSAxOworCQl9CisKKwkgICAgICAjIE1ha2Ugc3VyZSB5b3UgdXBkYXRlIHRoZSBkb2Mgb2YKKwkgICAgICAjIEF1dG9tYWtlOjpWYXJpYWJsZTo6dHJhdmVyc2VfcmVjdXJzaXZlbHkKKwkgICAgICAjIGlmIHlvdSBjaGFuZ2UgdGhlIHByb3RvdHlwZSBvZiAmZnVuX2l0ZW0uCisJICAgICAgbXkgQHRyYW5zZm9ybWVkID0gJiRmdW5faXRlbSAoJHZhciwgJHZhbCwgJGNvbmQsICRmdWxsX2NvbmQpOworCSAgICAgIHB1c2ggKEByZXN1bHQsIEB0cmFuc2Zvcm1lZCk7CisJICAgIH0KKwl9CisgICAgICBwdXNoIChAYWxscmVzdWx0cywgWyRjb25kLCBAcmVzdWx0XSkgaWYgQHJlc3VsdDsKKyAgICB9CisKKyAgIyBXZSBvbmx5IGNhcmUgYWJvdXQgX3JlY3Vyc2l2ZV8gdmFyaWFibGUgZGVmaW5pdGlvbnMuICBUaGUgdXNlcgorICAjIGlzIGZyZWUgdG8gdXNlIHRoZSBzYW1lIHZhcmlhYmxlIHNldmVyYWwgdGltZXMgaW4gdGhlIHNhbWUgZGVmaW5pdGlvbi4KKyAgJHZhci0+eydzY2FubmVkJ30gPSAtMTsKKworICByZXR1cm4gKCkKKyAgICB1bmxlc3MgJGZ1bl9jb2xsZWN0OworICAjIE1ha2Ugc3VyZSB5b3UgdXBkYXRlIHRoZSBkb2Mgb2YgQXV0b21ha2U6OlZhcmlhYmxlOjp0cmF2ZXJzZV9yZWN1cnNpdmVseQorICAjIGlmIHlvdSBjaGFuZ2UgdGhlIHByb3RvdHlwZSBvZiAmZnVuX2NvbGxlY3QuCisgIHJldHVybiAmJGZ1bl9jb2xsZWN0ICgkdmFyLCAkcGFyZW50X2NvbmQsIEBhbGxyZXN1bHRzKTsKK30KKworIyBfaGFzaF92YXJuYW1lICgkVkFSKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb21wdXRlIHRoZSBrZXkgYXNzb2NpYXRlZCAkVkFSIGluICVfZ2VuX3Zhcm5hbWUuCisjIFNlZSBfZ2VuX3Zhcm5hbWUoKSBiZWxvdy4KK3N1YiBfaGFzaF92YXJuYW1lICgkKQoreworICBteSAoJHZhcikgPSBAXzsKKyAgbXkgJGtleSA9ICcnOworICBmb3JlYWNoIG15ICRjb25kICgkdmFyLT5jb25kaXRpb25zLT5jb25kcykKKyAgICB7CisgICAgICBteSBAdmFsdWVzID0gJHZhci0+dmFsdWVfYXNfbGlzdCAoJGNvbmQpOworICAgICAgJGtleSAuPSAiKCRjb25kKUB2YWx1ZXMiOworICAgIH0KKyAgcmV0dXJuICRrZXk7Cit9CisKKyMgX2hhc2hfdmFsdWVzIChAVkFMVUVTKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEhhc2ggQFZBTFVFUyBmb3IgJV9nZW5fdmFybmFtZS4gIEBWQUxVRVMgc2hvdWxkIGJlIGEgbGlzdAorIyBvZiBwYWlyczogKFskY29uZCwgQHZhbHVlc10sIFskY29uZCwgQHZhbHVlc10sIC4uLikuCisjIFNlZSBfZ2VuX3Zhcm5hbWUoKSBiZWxvdy4KK3N1YiBfaGFzaF92YWx1ZXMgKEApCit7CisgIG15ICRrZXkgPSAnJzsKKyAgZm9yZWFjaCBteSAkcGFpciAoQF8pCisgICAgeworICAgICAgbXkgKCRjb25kLCBAdmFsdWVzKSA9IEAkcGFpcjsKKyAgICAgICRrZXkgLj0gIigkY29uZClAdmFsdWVzIjsKKyAgICB9CisgIHJldHVybiAka2V5OworfQorIyAoJFZBUk5BTUUsICRHRU5FUkFURUQpCisjIF9nZW5fdmFybmFtZSAoJEJBU0UsIEBERUZJTklUSU9OUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJldHVybiBhIHZhcmlhYmxlIG5hbWUgc3RhcnRpbmcgd2l0aCAkQkFTRSwgdGhhdCB3aWxsIGJlCisjIHVzZWQgdG8gc3RvcmUgZGVmaW5pdGlvbnMgQERFRklOSVRJT05TLgorIyBAREVGSU5JVElPTlMgaXMgYSBsaXN0IG9mIHBhaXIgWyRDT05ELCBAT0JKRUNUU10uCisjCisjIElmIHdlIGFscmVhZHkgaGF2ZSBhICRCQVNFLXZhcmlhYmxlIGNvbnRhaW5pbmcgQERFRklOSVRJT05TLCByZXVzZQorIyBpdCBhbmQgc2V0ICRHRU5FUkFURUQgdG8gMC4gIE90aGVyd2lzZSBjb25zdHJ1Y3QgYSBuZXcgbmFtZSBhbmQgc2V0CisjICRHRU5FUkFURUQgdG8gMS4KKyMKKyMgVGhpcyB3YXksIHdlIGF2b2lkIGNvbWJpbmF0b3JpYWwgZXhwbG9zaW9uIG9mIHRoZSBnZW5lcmF0ZWQKKyMgdmFyaWFibGVzLiAgRXNwZWNpYWxseSwgaW4gYSBNYWtlZmlsZSBzdWNoIGFzOgorIworIyB8IGlmIEZPTzEKKyMgfCBBMT0xCisjIHwgZW5kaWYKKyMgfAorIyB8IGlmIEZPTzIKKyMgfCBBMj0yCisjIHwgZW5kaWYKKyMgfAorIyB8IC4uLgorIyB8CisjIHwgaWYgRk9PTgorIyB8IEFOPU4KKyMgfCBlbmRpZgorIyB8CisjIHwgQj0kKEExKSAkKEEyKSAuLi4gJChBTikKKyMgfAorIyB8IGNfU09VUkNFUz0kKEIpCisjIHwgZF9TT1VSQ0VTPSQoQikKKyMKKyMgVGhlIGdlbmVyYXRlZCBjX09CSkVDVFMgYW5kIGRfT0JKRUNUUyB3aWxsIHNoYXJlIHRoZSBzYW1lIHZhcmlhYmxlCisjIGRlZmluaXRpb25zLgorIworIyBUaGlzIHNldHVwIGNhbiBiZSB0aGUgY2FzZSBvZiBhIHRlc3RzdWl0ZSBjb250YWluaW5nIGxvdHMgKD4xMDApIG9mCisjIHNtYWxsIEMgcHJvZ3JhbXMsIGFsbCB0ZXN0aW5nIHRoZSBzYW1lIHNldCBvZiBzb3VyY2UgZmlsZXMuCitzdWIgX2dlbl92YXJuYW1lICgkQCkKK3sKKyAgbXkgJGJhc2UgPSBzaGlmdDsKKyAgbXkgJGtleSA9IF9oYXNoX3ZhbHVlcyBAXzsKKworICByZXR1cm4gKCRfZ2VuX3Zhcm5hbWV7JGJhc2V9eyRrZXl9LCAwKQorICAgIGlmIGV4aXN0cyAkX2dlbl92YXJuYW1leyRiYXNlfXska2V5fTsKKworICBteSAkbnVtID0gMSArICgkX2dlbl92YXJuYW1lX257JGJhc2V9IHx8IDApOworICAkX2dlbl92YXJuYW1lX257JGJhc2V9ID0gJG51bTsKKyAgbXkgJG5hbWUgPSAiJHtiYXNlfV8ke251bX0iOworICAkX2dlbl92YXJuYW1leyRiYXNlfXska2V5fSA9ICRuYW1lOworCisgIHJldHVybiAoJG5hbWUsIDEpOworfQorCis9aXRlbSBDPCRyZXN2YXIgPSB0cmFuc2Zvcm1fdmFyaWFibGVfcmVjdXJzaXZlbHkgKCR2YXIsICRyZXN2YXIsICRiYXNlLCAkbm9kZWZpbmUsICR3aGVyZSwgJmZ1bl9pdGVtLCBbJW9wdGlvbnNdKT4KKworPWl0ZW0gQzwkcmVzdmFyID0gJHZhci1FPGd0PnRyYW5zZm9ybV92YXJpYWJsZV9yZWN1cnNpdmVseSAoJHJlc3ZhciwgJGJhc2UsICRub2RlZmluZSwgJHdoZXJlLCAmZnVuX2l0ZW0sIFslb3B0aW9uc10pPgorCitUcmF2ZXJzZSBDPCR2YXI+IHJlY3Vyc2l2ZWx5LCBhbmQgY3JlYXRlIGEgQzwkcmVzdmFyPiB2YXJpYWJsZSBpbgord2hpY2ggZWFjaCBmaWxlbmFtZSBpbiBDPCR2YXI+IGhhdmUgYmVlbiB0cmFuc2Zvcm1lZCB1c2luZworQzwmZnVuX2l0ZW0+LiAgKEM8JHZhcj4gbWF5IGJlIGEgdmFyaWFibGUgbmFtZSBpbiB0aGUgZmlyc3Qgc3ludGF4LgorSXQgbXVzdCBiZSBhbiBDPEF1dG9tYWtlOjpWYXJpYWJsZT4gb3RoZXJ3aXNlLikKKworSGVscGVyIHZhcmlhYmxlcyAoY29ycmVzcG9uZGluZyB0byBzdWItdmFyaWFibGVzIG9mIEM8JHZhcj4pIGFyZQorY3JlYXRlZCBhcyBuZWVkZWQsIHVzaW5nIEM8JGJhc2U+IGFzIHByZWZpeC4KKworQXJndW1lbnRzIGFyZToKKyAgJHZhciAgICAgICBzb3VyY2UgdmFyaWFibGUgdG8gdHJhdmVyc2UKKyAgJHJlc3ZhciAgICByZXN1bHRpbmcgdmFyaWFibGUgdG8gZGVmaW5lCisgICRiYXNlICAgICAgcHJlZml4IHRvIHVzZSB3aGVuIG5hbWluZyBzdWJ2YXJpYWJsZXMgb2YgJHJlc3ZhcgorICAkbm9kZWZpbmUgIGlmIHRydWUsIHRyYXZlcnNlICR2YXIgYnV0IGRvIG5vdCBkZWZpbmUgYW55IHZhcmlhYmxlCisgICAgICAgICAgICAgKHRoaXMgYXNzdW1lcyAmZnVuX2l0ZW0gaGFzIHNvbWUgdXNlZnVsIHNpZGUtZWZmZWN0KQorICAkd2hlcmUgICAgIGNvbnRleHQgaW50byB3aGljaCB2YXJpYWJsZSBkZWZpbml0aW9ucyBhcmUgZG9uZQorICAmZnVuX2l0ZW0gIGEgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb24gLS0gc2VlIHRoZSBkb2N1bWVudGF0aW9uCisgICAgICAgICAgICAgb2YgJmZ1bl9pdGVtIGluIEF1dG9tYWtlOjpWYXJpYWJsZTo6dHJhdmVyc2VfcmVjdXJzaXZlbHkuCisKK1RoaXMgcmV0dXJucyB0aGUgc3RyaW5nIEM8IlwkKCRSRVNWQVIpIj4uCisKK0M8JW9wdGlvbnM+IGlzIGEgbGlzdCBvZiBvcHRpb25zIHRvIHBhc3MgdG8KK0M8VmFyaWFibGU6OnRyYXZlcnNlX3JlY3Vyc2l2ZWx5PiAoc2VlIHRoaXMgbWV0aG9kKS4KKworPWN1dAorCitzdWIgdHJhbnNmb3JtX3ZhcmlhYmxlX3JlY3Vyc2l2ZWx5ICgkJCQkJCY7JSkKK3sKKyAgbXkgKCR2YXIsICRyZXN2YXIsICRiYXNlLCAkbm9kZWZpbmUsICR3aGVyZSwgJGZ1bl9pdGVtLCAlb3B0aW9ucykgPSBAXzsKKworICAkdmFyID0gcmVmICR2YXIgPyAkdmFyIDogcnZhciAkdmFyOworCisgIG15ICRyZXMgPSAkdmFyLT50cmF2ZXJzZV9yZWN1cnNpdmVseQorICAgICgkZnVuX2l0ZW0sCisgICAgICMgVGhlIGNvZGUgdGhhdCBkZWZpbmVzIHRoZSB2YXJpYWJsZSBob2xkaW5nIHRoZSByZXN1bHQKKyAgICAgIyBvZiB0aGUgcmVjdXJzaXZlIHRyYW5zZm9ybWF0aW9uIG9mIGEgc3VidmFyaWFibGUuCisgICAgIHN1YiB7CisgICAgICAgbXkgKCRzdWJ2YXIsICRwYXJlbnRfY29uZCwgQGFsbHJlc3VsdHMpID0gQF87CisgICAgICAgIyBJZiBubyBkZWZpbml0aW9uIGlzIHJlcXVpcmVkLCByZXR1cm4gYW55dGhpbmc6IHRoZSByZXN1bHQgaXMKKyAgICAgICAjIG5vdCBleHBlY3RlZCB0byBiZSB1c2VkLCBvbmx5IHRoZSBzaWRlIGVmZmVjdCBvZiAkZnVuX2l0ZW0KKyAgICAgICAjIHNob3VsZCBtYXR0ZXIuCisgICAgICAgcmV0dXJuICdyZXBvcnQtbWUnIGlmICRub2RlZmluZTsKKyAgICAgICAjIENhY2hlICRzdWJ2YXIsIHNvIHRoYXQgd2UgcmV1c2UgaXQgaWYgQGFsbHJlc3VsdHMgaXMgdGhlIHNhbWUuCisgICAgICAgbXkgJGtleSA9IF9oYXNoX3Zhcm5hbWUgJHN1YnZhcjsKKyAgICAgICAkX2dlbl92YXJuYW1leyRiYXNlfXska2V5fSA9ICRzdWJ2YXItPm5hbWU7CisKKyAgICAgICAjIEZpbmQgYSBuYW1lIGZvciB0aGUgdmFyaWFibGUsIHVubGVzcyB0aGlzIGlzIHRoZSB0b3AtdmFyaWFibGUKKyAgICAgICAjIGZvciB3aGljaCB3ZSB3YW50IHRvIHVzZSAkcmVzdmFyLgorICAgICAgIG15ICgkdmFybmFtZSwgJGdlbmVyYXRlZCkgPQorCSAoJHZhciAhPSAkc3VidmFyKSA/IF9nZW5fdmFybmFtZSAoJGJhc2UsIEBhbGxyZXN1bHRzKSA6ICgkcmVzdmFyLCAxKTsKKworICAgICAgICMgRGVmaW5lIHRoZSB2YXJpYWJsZSBpZiB3ZSBhcmUgbm90IHJldXNpbmcgYSBwcmV2aW91c2x5CisgICAgICAgIyBkZWZpbmVkIHZhcmlhYmxlLiAgQXQgdGhlIHRvcC1sZXZlbCwgd2UgY2FuIGFsc28gYXZvaWQgcmVkZWZpbmluZworICAgICAgICMgdGhlIHZhcmlhYmxlIGlmIGl0IGFscmVhZHkgY29udGFpbnMgdGhlIHNhbWUgdmFsdWVzLgorICAgICAgIGlmICgkZ2VuZXJhdGVkCisJICAgJiYgISgkdmFybmFtZSBlcSAkdmFyLT5uYW1lICYmICRrZXkgZXEgX2hhc2hfdmFsdWVzIEBhbGxyZXN1bHRzKSkKKwkgeworCSAgICMgSWYgdGhlIG5ldyB2YXJpYWJsZSBpcyB0aGUgc291cmNlIHZhcmlhYmxlLCB3ZSBhc3N1bWUKKwkgICAjIHdlIGFyZSB0cnlpbmcgdG8gb3ZlcnJpZGUgYSB1c2VyIHZhcmlhYmxlLiAgRGVsZXRlCisJICAgIyB0aGUgb2xkIHZhcmlhYmxlIGZpcnN0LgorCSAgIHZhcmlhYmxlX2RlbGV0ZSAoJHZhcm5hbWUpIGlmICR2YXJuYW1lIGVxICR2YXItPm5hbWU7CisJICAgIyBEZWZpbmUgYW4gZW1wdHkgdmFyaWFibGUgaW4gY29uZGl0aW9uIFRSVUUgaWYgdGhlcmUgaXMgbm8KKwkgICAjIHJlc3VsdC4KKwkgICBAYWxscmVzdWx0cyA9IChbVFJVRSwgJyddKSB1bmxlc3MgQGFsbHJlc3VsdHM7CisJICAgIyBEZWZpbmUgdGhlIHJld3JpdHRlbiB2YXJpYWJsZSBpbiBhbGwgY29uZGl0aW9ucyBub3QKKwkgICAjIGFscmVhZHkgY292ZXJlZCBieSB1c2VyIGRlZmluaXRpb25zLgorCSAgIGZvcmVhY2ggbXkgJHBhaXIgKEBhbGxyZXN1bHRzKQorCSAgICAgeworCSAgICAgICBteSAoJGNvbmQsIEByZXN1bHQpID0gQCRwYWlyOworCSAgICAgICBteSAkdmFyID0gdmFyICR2YXJuYW1lOworCSAgICAgICBteSBAY29uZHMgPSAoJHZhcgorCQkJICAgID8gJHZhci0+bm90X2Fsd2F5c19kZWZpbmVkX2luX2NvbmQgKCRjb25kKS0+Y29uZHMKKwkJCSAgICA6ICRjb25kKTsKKworCSAgICAgICBmb3JlYWNoIChAY29uZHMpCisJCSB7CisJCSAgIGRlZmluZSAoJHZhcm5hbWUsIFZBUl9BVVRPTUFLRSwgJycsICRfLCAiQHJlc3VsdCIsCisJCQkgICAnJywgJHdoZXJlLCBWQVJfUFJFVFRZKTsKKwkJIH0KKwkgICAgIH0KKwkgfQorICAgICAgIHNldF9zZWVuICR2YXJuYW1lOworICAgICAgIHJldHVybiAiXCQoJHZhcm5hbWUpIjsKKyAgICAgfSwKKyAgICAgJW9wdGlvbnMpOworICByZXR1cm4gJHJlczsKK30KKworCis9YmFjaworCis9aGVhZDEgU0VFIEFMU08KKworTDxBdXRvbWFrZTo6VmFyRGVmPiwgTDxBdXRvbWFrZTo6Q29uZGl0aW9uPiwKK0w8QXV0b21ha2U6OkRpc2pDb25kaXRpb25zPiwgTDxBdXRvbWFrZTo6TG9jYXRpb24+LgorCis9Y3V0CisKKzE7CisKKyMjIyBTZXR1cCAiR05VIiBzdHlsZSBmb3IgcGVybC1tb2RlIGFuZCBjcGVybC1tb2RlLgorIyMgTG9jYWwgVmFyaWFibGVzOgorIyMgcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIHBlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIHBlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2UtaW1hZ2luYXJ5LW9mZnNldDogMAorIyMgcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIGNwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtZXh0cmEtbmV3bGluZS1iZWZvcmUtYnJhY2U6IHQKKyMjIGNwZXJsLW1lcmdlLXRyYWlsaW5nLWVsc2U6IG5pbAorIyMgY3BlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIEVuZDoKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9tYWtlLTEuMTEvQXV0b21ha2UvVmVyc2lvbi5wbSBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvQXV0b21ha2UvVmVyc2lvbi5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjJhN2JjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9BdXRvbWFrZS9WZXJzaW9uLnBtCkBAIC0wLDAgKzEsMTU3IEBACisjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMyAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitwYWNrYWdlIEF1dG9tYWtlOjpWZXJzaW9uOwordXNlIHN0cmljdDsKK3VzZSBBdXRvbWFrZTo6Q2hhbm5lbERlZnM7CisKKz1oZWFkMSBOQU1FCisKK0F1dG9tYWtlOjpWZXJzaW9uIC0gdmVyc2lvbiBjb21wYXJpc29uCisKKz1oZWFkMSBTWU5PUFNJUworCisgIHVzZSBBdXRvbWFrZTo6VmVyc2lvbjsKKworICBwcmludCAiVmVyc2lvbiAkdmVyc2lvbiBpcyBvbGRlciB0aGFuIHJlcXVpcmVkIHZlcnNpb24gJHJlcXVpcmVkXG4iCisgICAgaWYgQXV0b21ha2U6OlZlcnNpb246OmNoZWNrICgkdmVyc2lvbiwgJHJlcXVpcmVkKTsKKworPWhlYWQxIERFU0NSSVBUSU9OCisKK1RoaXMgbW9kdWxlIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGNvbXBhcmluZyB2ZXJzaW9ucyBzdHJpbmcKK2FzIHRoZXkgYXJlIHVzZWQgaW4gQXV0b21ha2UuCisKK0EgdmVyc2lvbiBpcyBhIHN0cmluZyB0aGF0IGxvb2tzIGxpa2UKK0M8TUFKT1IuTUlOT1JbLk1JQ1JPXVtBTFBIQV1bLUZPUktdPiB3aGVyZSBDPE1BSk9SPiwgQzxNSU5PUj4sIGFuZAorQzxNSUNSTz4gYXJlIGRpZ2l0cywgQzxBTFBIQT4gaXMgYSBjaGFyYWN0ZXIsIGFuZCBDPEZPUks+IGFueQorYWxwaGFudW1lcmljIHdvcmQuCisKK1VzdWFsbHksIEM8QUxQSEE+IGlzIHVzZWQgdG8gbGFiZWwgYWxwaGEgcmVsZWFzZXMgb3IgaW50ZXJtZWRpYXRlCitzbmFwc2hvdHMsIEM8Rk9SSz4gaXMgdXNlZCBmb3IgQ1ZTIGJyYW5jaGVzIG9yIHBhdGNoZWQgcmVsZWFzZXMsIGFuZAorQzxNSUNSTz4gaXMgdXNlZCBmb3IgYnVnIGZpeGVzIHJlbGVhc2VzIG9uIHRoZSBDPE1BSk9SLk1JTk9SPiBicmFuY2guCisKK0ZvciB0aGUgcHVycG9zZSBvZiBvcmRlcmluZywgQzwxLjQ+IGlzIHRoZSBzYW1lIGFzIEM8MS40LjA+LCBidXQKK0M8MS40Zz4gaXMgdGhlIHNhbWUgYXMgQzwxLjQuOTlnPi4gIFRoZSBDPEZPUks+IGlkZW50aWZpZXIgaXMgaWdub3JlZAoraW4gdGhlIG9yZGVyaW5nLCBleGNlcHQgd2hlbiBpdCBsb29rcyBsaWtlIEM8LXBNSU5PUltBTFBIQV0+OiBzb21lCit2ZXJzaW9ucyB3ZXJlIGxhYmVsZWQgbGlrZSBDPDEuNC1wM2E+LCB0aGlzIGlzIHRoZSBzYW1lIGFzIGFuIGFscGhhCityZWxlYXNlIGxhYmVsZWQgQzwxLjQuM2E+LiAgWWVzLCBpdCdzIGhvcnJpYmxlLCBidXQgQXV0b21ha2UgZGlkIG5vdAorc3VwcG9ydCB0d28tZG90IHZlcnNpb25zIGluIHRoZSBwYXN0LgorCis9aGVhZDIgRlVOQ1RJT05TCisKKz1vdmVyIDQKKworPWl0ZW0gQzxzcGxpdCAoJHZlcnNpb24pPgorCitTcGxpdCB0aGUgc3RyaW5nIEM8JHZlcnNpb24+IGludG8gdGhlIGNvcnJlc3BvbmRpbmcgQzwoTUFKT1IsIE1JTk9SLAorTUlDUk8sIEFMUEhBLCBGT1JLKT4gdHVwbGUuICBGb3IgaW5zdGFuY2UgQzwnMS40Zyc+IHdvdWxkIGJlIHNwbGl0CitpbnRvIEM8KDEsIDQsIDk5LCAnZycsICcnKT4uICBSZXR1cm4gQzwoKT4gb24gZXJyb3IuCisKKz1jdXQKKworc3ViIHNwbGl0ICgkKQoreworICBteSAoJHZlcikgPSBAXzsKKworICAjIFNwZWNpYWwgY2FzZSBmb3IgdmVyc2lvbnMgbGlrZSAxLjQtcDJhLgorICBpZiAoJHZlciA9fiAvXihcZCspXC4oXGQrKSg/Oi1wKFxkKykoW2Etel0rKT8pJC8pCisgIHsKKyAgICByZXR1cm4gKCQxLCAkMiwgJDMsICQ0IHx8ICcnLCAnJyk7CisgIH0KKyAgIyBDb21tb24gY2FzZS4KKyAgZWxzaWYgKCR2ZXIgPX4gL14oXGQrKVwuKFxkKykoPzpcLihcZCspKT8oW2Etel0pPyg/Oi0oW0EtWmEtejAtOV0rKSk/JC8pCisgIHsKKyAgICByZXR1cm4gKCQxLCAkMiwgJDMgfHwgKGRlZmluZWQgJDQgPyA5OSA6IDApLCAkNCB8fCAnJywgJDUgfHwgJycpOworICB9CisgIHJldHVybiAoKTsKK30KKworPWl0ZW0gQzxjb21wYXJlIChcQExWRVJTSU9OLCBcQFJWRVJTSU9OKT4KKworQ29tcGFyZSB0d28gdmVyc2lvbiB0dXBsZXMsIGFzIHJldHVybmVkIGJ5IEM8c3BsaXQ+LgorCitSZXR1cm4gMSwgMCwgb3IgLTEsIGlmIEM8TFZFUlNJT04+IGlzIGZvdW5kIHRvIGJlIHJlc3BlY3RpdmVseQorZ3JlYXRlciB0aGFuLCBlcXVhbCB0bywgb3IgbGVzcyB0aGFuIEM8UlZFUlNJT04+LgorCis9Y3V0CisKK3N1YiBjb21wYXJlIChcQFxAKQoreworICBteSBAbCA9IEB7JF9bMF19OworICBteSBAciA9IEB7JF9bMV19OworCisgIGZvciBteSAkaSAoMCwgMSwgMikKKyAgeworICAgIHJldHVybiAxICBpZiAoJGxbJGldID4gJHJbJGldKTsKKyAgICByZXR1cm4gLTEgaWYgKCRsWyRpXSA8ICRyWyRpXSk7CisgIH0KKyAgZm9yIG15ICRpICgzLCA0KQorICB7CisgICAgcmV0dXJuIDEgIGlmICgkbFskaV0gZ3QgJHJbJGldKTsKKyAgICByZXR1cm4gLTEgaWYgKCRsWyRpXSBsdCAkclskaV0pOworICB9CisgIHJldHVybiAwOworfQorCis9aXRlbSBDPGNoZWNrKCRWRVJTSU9OLCAkUkVRVUlSRUQpPgorCitIYW5kbGVzIHRoZSBsb2dpYyBvZiByZXF1aXJpbmcgYSB2ZXJzaW9uIG51bWJlciBpbiBBdXRvbWFrZS4KK0M8JFZFUlNJT04+IHNob3VsZCBiZSBBdXRvbWFrZSdzIHZlcnNpb24sIHdoaWxlIEM8JFJFUVVJUkVEPgoraXMgdGhlIHZlcnNpb24gcmVxdWlyZWQgYnkgdGhlIHVzZXIgaW5wdXQuCisKK1JldHVybiAwIGlmIHRoZSByZXF1aXJlZCB2ZXJzaW9uIGlzIHNhdGlzZmllZCwgMSBvdGhlcndpc2UuCisKKz1jdXQKKworc3ViIGNoZWNrICgkJCkKK3sKKyAgbXkgKCR2ZXJzaW9uLCAkcmVxdWlyZWQpID0gQF87CisgIG15IEB2ZXJzaW9uID0gQXV0b21ha2U6OlZlcnNpb246OnNwbGl0ICgkdmVyc2lvbik7CisgIG15IEByZXF1aXJlZCA9IEF1dG9tYWtlOjpWZXJzaW9uOjpzcGxpdCAoJHJlcXVpcmVkKTsKKworICBwcm9nX2Vycm9yICJ2ZXJzaW9uIGlzIGluY29ycmVjdDogJHZlcnNpb24iCisgICAgaWYgJCN2ZXJzaW9uID09IC0xOworCisgICMgVGhpcyBzaG91bGQgbm90IGhhcHBlbiwgYmVjYXVzZSBwcm9jZXNzX29wdGlvbl9saXN0IGFuZCBzcGxpdF92ZXJzaW9uCisgICMgdXNlIHNpbWlsYXIgcmVnZXhlcy4KKyAgcHJvZ19lcnJvciAicmVxdWlyZWQgdmVyc2lvbiBpcyBpbmNvcnJlY3Q6ICRyZXF1aXJlZCIKKyAgICBpZiAkI3JlcXVpcmVkID09IC0xOworCisgICMgSWYgd2UgcmVxdWlyZSAzLjRuLWZvbyB0aGVuIHdlIHJlcXVpcmUgc29tZXRoaW5nCisgICMgPj0gMy40biwgd2l0aCB0aGUgYGZvbycgZm9yayBpZGVudGlmaWVyLgorICByZXR1cm4gMQorICAgIGlmICgkcmVxdWlyZWRbNF0gbmUgJycgJiYgJHJlcXVpcmVkWzRdIG5lICR2ZXJzaW9uWzRdKTsKKworICByZXR1cm4gMCA+IGNvbXBhcmUgKEB2ZXJzaW9uLCBAcmVxdWlyZWQpOworfQorCisxOworCisjIyMgU2V0dXAgIkdOVSIgc3R5bGUgZm9yIHBlcmwtbW9kZSBhbmQgY3BlcmwtbW9kZS4KKyMjIExvY2FsIFZhcmlhYmxlczoKKyMjIHBlcmwtaW5kZW50LWxldmVsOiAyCisjIyBwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLWltYWdpbmFyeS1vZmZzZXQ6IDAKKyMjIHBlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtaW5kZW50LWxldmVsOiAyCisjIyBjcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWV4dHJhLW5ld2xpbmUtYmVmb3JlLWJyYWNlOiB0CisjIyBjcGVybC1tZXJnZS10cmFpbGluZy1lbHNlOiBuaWwKKyMjIGNwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBFbmQ6CmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL0F1dG9tYWtlL1dyYXAucG0gYi9zaGFyZS9hdXRvbWFrZS0xLjExL0F1dG9tYWtlL1dyYXAucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYyMTNkMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvQXV0b21ha2UvV3JhcC5wbQpAQCAtMCwwICsxLDE2NSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworcGFja2FnZSBBdXRvbWFrZTo6V3JhcDsKKwordXNlIHN0cmljdDsKKworcmVxdWlyZSBFeHBvcnRlcjsKK3VzZSB2YXJzICdASVNBJywgJ0BFWFBPUlRfT0snOworQElTQSA9IHF3L0V4cG9ydGVyLzsKK0BFWFBPUlRfT0sgPSBxdy93cmFwIG1ha2VmaWxlX3dyYXAvOworCis9aGVhZDEgTkFNRQorCitBdXRvbWFrZTo6V3JhcCAtIGEgcGFyYWdyYXBoIGZvcm1hdHRlcgorCis9aGVhZDEgU1lOT1BTSVMKKworICB1c2UgQXV0b21ha2U6OldyYXAgJ3dyYXAnLCAnbWFrZWZpbGVfd3JhcCc7CisKKyAgcHJpbnQgd3JhcCAoJGZpcnN0X2lkZW50LCAkbmV4dF9pZGVudCwgJGVuZF9vZl9saW5lLCAkbWF4X2xlbmd0aCwKKyAgICAgICAgICAgICAgQHZhbHVlcyk7CisKKyAgcHJpbnQgbWFrZWZpbGVfd3JhcCAoIlZBUklBQkxFID0gIiwgIiAgICAiLCBAdmFsdWVzKTsKKworPWhlYWQxIERFU0NSSVBUSU9OCisKK1RoaXMgbW9kdWxlcyBwcm92aWRlIGZhY2lsaXR5IHRvIGZvcm1hdCBsaXN0IG9mIHN0cmluZ3MuICBJdCBpcworY29tcGFyYWJsZSB0byBQZXJsJ3MgTDxUZXh0OjpXcmFwPiwgaG93ZXZlciB3ZSBjYW4ndCB1c2UgTDxUZXh0OjpXcmFwPgorYmVjYXVzZSBzb21lIHZlcnNpb25zIHdpbGwgYWJvcnQgd2hlbiBzb21lIHdvcmQgdG8gcHJpbnQgZXhjZWVkcyB0aGUKK21heGltdW0gbGVuZ3RoIGFsbG93ZWQuICAoVGlja2V0ICMxNzE0MSwgZml4ZWQgaW4gUGVybCA1LjguMC4pCisKKz1oZWFkMiBGdW5jdGlvbnMKKworPW92ZXIgNAorCis9Y3V0CisKKyMgdGFiX2xlbmd0aCAoJFRYVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcHV0ZSB0aGUgbGVuZ3RoIG9mIFRYVCwgY291bnRpbmcgdGFiIGNoYXJhY3RlcnMgYXMgOCBjaGFyYWN0ZXJzLgorc3ViIHRhYl9sZW5ndGgoJCkKK3sKKyAgbXkgKCR0eHQpID0gQF87CisgIG15ICRsZW4gPSBsZW5ndGggKCR0eHQpOworICAkbGVuICs9IDcgKiAoJHR4dCA9fiB0ci9cdC9cdC8pOworICByZXR1cm4gJGxlbjsKK30KKworPWl0ZW0gQzx3cmFwICgkaGVhZCwgJGZpbGwsICRlb2wsICRtYXhfbGVuLCBAdmFsdWVzKT4KKworRm9ybWF0IEM8QHZhbHVlcz4gYXMgYSBibG9jayBvZiB0ZXh0IHRoYXQgc3RhcnRzIHdpdGggQzwkaGVhZD4sCitmb2xsb3dlZCBieSB0aGUgc3RyaW5ncyBpbiBDPEB2YWx1ZXM+IHNlcGFyYXRlZCBieSBzcGFjZXMgb3IgYnkKK0M8IiRlb2xcbiRmaWxsIj4gc28gdGhhdCB0aGUgbGVuZ3RoIG9mIGVhY2ggbGluZSBuZXZlciBleGNlZWRzCitDPCRtYXhfbGVuPi4KKworVGhlIEM8JG1heF9sZW4+IGNvbnN0cmFpbnQgaXMgaWdub3JlZCBmb3IgQzxAdmFsdWVzPiBpdGVtcyB3aGljaAorYXJlIHRvbyBiaWcgdG8gZml0IGFsb25lIG9uZSBhIGxpbmUuCisKK1RoZSBjb25zdHJ1Y3RlZCBwYXJhZ3JhcGggaXMgQzwiXG4iPi10ZXJtaW5hdGVkLgorCis9Y3V0CisKK3N1YiB3cmFwKCQkJCRAKQoreworICBteSAoJGhlYWQsICRmaWxsLCAkZW9sLCAkbWF4X2xlbiwgQHZhbHVlcykgPSBAXzsKKworICBteSAkcmVzdWx0ID0gJGhlYWQ7CisgIG15ICRjb2x1bW4gPSB0YWJfbGVuZ3RoICgkaGVhZCk7CisKKyAgbXkgJGZpbGxfbGVuID0gdGFiX2xlbmd0aCAoJGZpbGwpOworICBteSAkZW9sX2xlbiA9IHRhYl9sZW5ndGggKCRlb2wpOworCisgIG15ICRub3RfZmlyc3Rfd29yZCA9IDA7CisKKyAgZm9yZWFjaCAoQHZhbHVlcykKKyAgICB7CisgICAgICBteSAkbGVuID0gdGFiX2xlbmd0aCAoJF8pOworCisgICAgICAjIFNlZSBpZiB0aGUgbmV3IHZhcmlhYmxlIGZpdHMgb24gdGhpcyBsaW5lLgorICAgICAgIyAoVGhlICsgMSBpcyBmb3IgdGhlIHNwYWNlIHdlIGFkZCBpbiBmcm9udCBvZiB0aGUgdmFsdWUuKS4KKyAgICAgIGlmICgkY29sdW1uICsgJGxlbiArICRlb2xfbGVuICsgMSA+ICRtYXhfbGVuCisJICAjIERvIG5vdCBicmVhayBiZWZvcmUgdGhlIGZpcnN0IHdvcmQgaWYgaXQgZG9lcyBub3QgZml0IG9uCisJICAjIHRoZSBuZXh0IGxpbmUgYW55d2F5LgorCSAgJiYgKCRub3RfZmlyc3Rfd29yZCB8fCAkZmlsbF9sZW4gKyAkbGVuICsgJGVvbF9sZW4gKyAxIDw9ICRtYXhfbGVuKSkKKwl7CisJICAjIFN0YXJ0IGEgbmV3IGxpbmUuCisJICAkcmVzdWx0IC49ICIkZW9sXG4iIC4gJGZpbGw7CisJICAkY29sdW1uID0gJGZpbGxfbGVuOworCX0KKyAgICAgIGVsc2lmICgkbm90X2ZpcnN0X3dvcmQpCisJeworCSAgIyBBZGQgYSBzcGFjZSBvbmx5IGlmIHJlc3VsdCBkb2VzIG5vdCBhbHJlYWR5IGVuZAorCSAgIyB3aXRoIGEgc3BhY2UuCisJICAkXyA9ICIgJF8iIGlmICRyZXN1bHQgPX4gL1xTXHovOworCSAgKyskbGVuOworCX0KKyAgICAgICRyZXN1bHQgLj0gJF87CisgICAgICAkY29sdW1uICs9ICRsZW47CisgICAgICAkbm90X2ZpcnN0X3dvcmQgPSAxOworICAgIH0KKworICAkcmVzdWx0IC49ICJcbiI7CisgIHJldHVybiAkcmVzdWx0OworfQorCisKKz1pdGVtIEM8bWFrZWZpbGVfd3JhcCAoJGhlYWQsICRmaWxsLCBAdmFsdWVzKT4KKworRm9ybWF0IEM8QHZhbHVlcz4gaW4gYSB3YXkgd2hpY2ggaXMgc3VpdGFibGUgZm9yIEY8TWFrZWZpbGU+cy4KK1RoaXMgaXMgY29tcGFyYWJsZSB0byBDPHdyYXA+LCBleGNlcHQgQzwkZW9sPiBpcyBrbm93biB0bworYmUgQzwiIFxcIj4sIGFuZCB0aGUgbWF4aW11bSBsZW5ndGggaGFzIGJlZW4gaGFyZGNvZGVkIHRvIEM8NzI+LgorCitBIHNwYWNlIGlzIGFwcGVuZGVkIHRvIEM8JGhlYWQ+IHdoZW4gdGhpcyBpcyBub3QgYWxyZWFkeQordGhlIGNhc2UuCisKK1RoaXMgY2FuIGJlIHVzZWQgdG8gZm9ybWF0IHZhcmlhYmxlIGRlZmluaXRpb25zIG9yIGRlcGVuZGVuY3kgbGluZXMuCisKKyAgbWFrZWZpbGVfd3JhcCAoJ1ZBUklBQkxFID0nLCAiXHQiLCBAdmFsdWVzKTsKKyAgbWFrZWZpbGVfd3JhcCAoJ3J1bGU6JywgIlx0IiwgQGRlcGVuZGVuY2llcyk7CisKKz1jdXQKKworc3ViIG1ha2VmaWxlX3dyYXAgKCQkQCkKK3sKKyAgbXkgKCRoZWFkLCAkZmlsbCwgQHZhbHVlcykgPSBAXzsKKyAgaWYgKEB2YWx1ZXMpCisgICAgeworICAgICAgJGhlYWQgLj0gJyAnIGlmICRoZWFkID1+IC9cU1x6LzsKKyAgICAgIHJldHVybiB3cmFwICRoZWFkLCAkZmlsbCwgIiBcXCIsIDcyLCBAdmFsdWVzOworICAgIH0KKyAgcmV0dXJuICIkaGVhZFxuIjsKK30KKworCisxOworCisjIyMgU2V0dXAgIkdOVSIgc3R5bGUgZm9yIHBlcmwtbW9kZSBhbmQgY3BlcmwtbW9kZS4KKyMjIExvY2FsIFZhcmlhYmxlczoKKyMjIHBlcmwtaW5kZW50LWxldmVsOiAyCisjIyBwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLWltYWdpbmFyeS1vZmZzZXQ6IDAKKyMjIHBlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtaW5kZW50LWxldmVsOiAyCisjIyBjcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWV4dHJhLW5ld2xpbmUtYmVmb3JlLWJyYWNlOiB0CisjIyBjcGVybC1tZXJnZS10cmFpbGluZy1lbHNlOiBuaWwKKyMjIGNwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBFbmQ6CmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL0F1dG9tYWtlL1hGaWxlLnBtIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9BdXRvbWFrZS9YRmlsZS5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTlhMDBhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9BdXRvbWFrZS9YRmlsZS5wbQpAQCAtMCwwICsxLDI5MiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDYsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFdyaXR0ZW4gYnkgQWtpbSBEZW1haWxsZSA8YWtpbUBmcmVlZnJpZW5kcy5vcmc+LgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGhlIG1haW4gY29weSBvZiB0aGlzIGZpbGUgaXMgaW4gQXV0b21ha2UncyBDVlMgcmVwb3NpdG9yeS4gIworIyBVcGRhdGVzIHNob3VsZCBiZSBzZW50IHRvIGF1dG9tYWtlLXBhdGNoZXNAZ251Lm9yZy4gICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworcGFja2FnZSBBdXRvbWFrZTo6WEZpbGU7CisKKz1oZWFkMSBOQU1FCisKK0F1dG9tYWtlOjpYRmlsZSAtIHN1cHBseSBvYmplY3QgbWV0aG9kcyBmb3IgZmlsZWhhbmRsZXMgd2l0aCBlcnJvciBoYW5kbGluZworCis9aGVhZDEgU1lOT1BTSVMKKworICAgIHVzZSBBdXRvbWFrZTo6WEZpbGU7CisKKyAgICAkZmggPSBuZXcgQXV0b21ha2U6OlhGaWxlOworICAgICRmaC0+b3BlbiAoIjwgZmlsZSIpOworICAgICMgTm8gbmVlZCB0byBjaGVjayAkRkg6IHdlIGRpZWQgaWYgb3BlbiBmYWlsZWQuCisgICAgcHJpbnQgPCRmaD47CisgICAgJGZoLT5jbG9zZTsKKyAgICAjIE5vIG5lZWQgdG8gY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBvZiBjbG9zZTogd2UgZGllZCBpZiBpdCBmYWlsZWQuCisKKyAgICAkZmggPSBuZXcgQXV0b21ha2U6OlhGaWxlICI+IGZpbGUiOworICAgICMgTm8gbmVlZCB0byBjaGVjayAkRkg6IHdlIGRpZWQgaWYgbmV3IGZhaWxlZC4KKyAgICBwcmludCAkZmggImJhclxuIjsKKyAgICAkZmgtPmNsb3NlOworCisgICAgJGZoID0gbmV3IEF1dG9tYWtlOjpYRmlsZSAiZmlsZSIsICJyIjsKKyAgICAjIE5vIG5lZWQgdG8gY2hlY2sgJEZIOiB3ZSBkaWVkIGlmIG5ldyBmYWlsZWQuCisgICAgZGVmaW5lZCAkZmgKKyAgICBwcmludCA8JGZoPjsKKyAgICB1bmRlZiAkZmg7ICAgIyBhdXRvbWF0aWNhbGx5IGNsb3NlcyB0aGUgZmlsZSBhbmQgY2hlY2tzIGZvciBlcnJvcnMuCisKKyAgICAkZmggPSBuZXcgQXV0b21ha2U6OlhGaWxlICJmaWxlIiwgT19XUk9OTFkgfCBPX0FQUEVORDsKKyAgICAjIE5vIG5lZWQgdG8gY2hlY2sgJEZIOiB3ZSBkaWVkIGlmIG5ldyBmYWlsZWQuCisgICAgcHJpbnQgJGZoICJjb3JnZVxuIjsKKworICAgICRwb3MgPSAkZmgtPmdldHBvczsKKyAgICAkZmgtPnNldHBvcyAoJHBvcyk7CisKKyAgICB1bmRlZiAkZmg7ICAgIyBhdXRvbWF0aWNhbGx5IGNsb3NlcyB0aGUgZmlsZSBhbmQgY2hlY2tzIGZvciBlcnJvcnMuCisKKyAgICBhdXRvZmx1c2ggU1RET1VUIDE7CisKKz1oZWFkMSBERVNDUklQVElPTgorCitDPEF1dG9tYWtlOjpYRmlsZT4gaW5oZXJpdHMgZnJvbSBDPElPOjpGaWxlPi4gIEl0IHByb3ZpZGVzIHRoZSBtZXRob2QKK0M8bmFtZT4gcmV0dXJuaW5nIHRoZSBmaWxlIG5hbWUuICBJdCBwcm92aWRlcyBkeWluZyB2ZXJzaW9ucyBvZiB0aGUKK21ldGhvZHMgQzxjbG9zZT4sIEM8bG9jaz4gKGNvcnJlc3BvbmRpbmcgdG8gQzxmbG9jaz4pLCBDPG5ldz4sCitDPG9wZW4+LCBDPHNlZWs+LCBhbmQgQzx0cnVuY2F0ZT4uICBJdCBhbHNvIG92ZXJyaWRlcyB0aGUgQzxnZXRsaW5lPgorYW5kIEM8Z2V0bGluZXM+IG1ldGhvZHMgdG8gdHJhbnNsYXRlIEM8XHJcbj4gdG8gQzxcbj4uCisKKz1oZWFkMSBTRUUgQUxTTworCitMPHBlcmxmdW5jPiwKK0w8cGVybG9wLyJJL08gT3BlcmF0b3JzIj4sCitMPElPOjpGaWxlPgorTDxJTzo6SGFuZGxlPgorTDxJTzo6U2Vla2FibGU+CisKKz1oZWFkMSBISVNUT1JZCisKK0Rlcml2ZWQgZnJvbSBJTzo6RmlsZS5wbSBieSBBa2ltIERlbWFpbGxlIEU8bHQ+Rjxha2ltQGZyZWVmcmllbmRzLm9yZz5FPGd0Pi4KKworPWN1dAorCityZXF1aXJlIDUuMDAwOwordXNlIHN0cmljdDsKK3VzZSB2YXJzIHF3KCRWRVJTSU9OIEBFWFBPUlQgQEVYUE9SVF9PSyAkQVVUT0xPQUQgQElTQSk7Cit1c2UgQ2FycDsKK3VzZSBFcnJubzsKK3VzZSBJTzo6RmlsZTsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKK3VzZSBBdXRvbWFrZTo6Q2hhbm5lbERlZnM7Cit1c2UgQXV0b21ha2U6OkNoYW5uZWxzIHF3KG1zZyk7Cit1c2UgQXV0b21ha2U6OkZpbGVVdGlsczsKKworcmVxdWlyZSBFeHBvcnRlcjsKK3JlcXVpcmUgRHluYUxvYWRlcjsKKworQElTQSA9IHF3KElPOjpGaWxlIEV4cG9ydGVyIER5bmFMb2FkZXIpOworCiskVkVSU0lPTiA9ICIxLjIiOworCitARVhQT1JUID0gQElPOjpGaWxlOjpFWFBPUlQ7CisKK2V2YWwgeworICAjIE1ha2UgYWxsIEZjbnRsIE9fWFhYIGFuZCBMT0NLX1hYWCBjb25zdGFudHMgYXZhaWxhYmxlIGZvciBpbXBvcnRpbmcKKyAgcmVxdWlyZSBGY250bDsKKyAgbXkgQE8gPSBncmVwIC9eKExPQ0t8TylfLywgQEZjbnRsOjpFWFBPUlQsIEBGY250bDo6RVhQT1JUX09LOworICBGY250bC0+aW1wb3J0IChATyk7ICAjIGZpcnN0IHdlIGltcG9ydCB3aGF0IHdlIHdhbnQgdG8gZXhwb3J0CisgIHB1c2ggKEBFWFBPUlQsIEBPKTsKK307CisKKyMgVXNlZCBpbiBjcm9hayBlcnJvciBtZXNzYWdlcy4KK215ICRtZSA9IGJhc2VuYW1lICgkMCk7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMgQ29uc3RydWN0b3IKKyMjCisKK3N1YiBuZXcKK3sKKyAgbXkgJHR5cGUgPSBzaGlmdDsKKyAgbXkgJGNsYXNzID0gcmVmICR0eXBlIHx8ICR0eXBlIHx8ICJBdXRvbWFrZTo6WEZpbGUiOworICBteSAkZmggPSAkY2xhc3MtPlNVUEVSOjpuZXcgKCk7CisgIGlmIChAXykKKyAgICB7CisgICAgICAkZmgtPm9wZW4gKEBfKTsKKyAgICB9CisgICRmaDsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyBPcGVuCisjIworCitzdWIgb3BlbgoreworICBteSAkZmggPSBzaGlmdDsKKyAgbXkgKCRmaWxlKSA9IEBfOworCisgICMgV0FSTklORzogR3Jvc3MgaGFjazogJEZIIGlzIGEgdHlwZWdsb2I6IHVzZSBpdHMgaGFzaCBzbG90IHRvIHN0b3JlCisgICMgdGhlIGBuYW1lJyBvZiB0aGUgZmlsZSB3ZSBhcmUgb3BlbmluZy4gIFNlZSB0aGUgZXhhbXBsZSB3aXRoCisgICMgaW9fc29ja2V0X3RpbWVvdXQgaW4gSU86OlNvY2tldCBmb3IgbW9yZSwgYW5kIHJlYWQgR3JhaGFtJ3MKKyAgIyBjb21tZW50IGluIElPOjpIYW5kbGUuCisgICR7KiRmaH17J2F1dG9tNHRlX3hmaWxlX2ZpbGUnfSA9ICIkZmlsZSI7CisKKyAgaWYgKCEkZmgtPlNVUEVSOjpvcGVuIChAXykpCisgICAgeworICAgICAgZmF0YWwgImNhbm5vdCBvcGVuICRmaWxlOiAkISI7CisgICAgfQorCisgICMgSW4gY2FzZSB3ZSdyZSBydW5uaW5nIHVuZGVyIE1TV2luZG93cywgZG9uJ3Qgd3JpdGUgd2l0aCBDUkxGLgorICAjIChUaGlzIGNpcmN1bXZlbnRzIGEgYnVnIGluIGF0IGxlYXN0IEN5Z3dpbiBiYXNoIHdoZXJlIHRoZSBzaGVsbAorICAjIHBhcnNpbmcgZmFpbHMgb24gbGluZXMgZW5kaW5nIHdpdGggdGhlIGNvbnRpbnVhdGlvbiBjaGFyYWN0ZXIgJ1wnCisgICMgYW5kIENSTEYpLgorICBiaW5tb2RlICRmaCBpZiAkZmlsZSA9fiAvXlxzKj4vOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIENsb3NlCisjIworCitzdWIgY2xvc2UKK3sKKyAgbXkgJGZoID0gc2hpZnQ7CisgIGlmICghJGZoLT5TVVBFUjo6Y2xvc2UgKEBfKSkKKyAgICB7CisgICAgICBteSAkZmlsZSA9ICRmaC0+bmFtZTsKKyAgICAgIEF1dG9tYWtlOjpGaWxlVXRpbHM6OmhhbmRsZV9leGVjX2Vycm9ycyAkZmlsZQorCXVubGVzcyAkITsKKyAgICAgIGZhdGFsICJjYW5ub3QgY2xvc2UgJGZpbGU6ICQhIjsKKyAgICB9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMgR2V0bGluZQorIyMKKworIyBTb21lIFdpbjMyL3BlcmwgaW5zdGFsbGF0aW9ucyBmYWlsIHRvIHRyYW5zbGF0ZSBcclxuIHRvIFxuIG9uIGlucHV0CisjIHNvIHdlIGRvIHRoYXQgaGVyZS4KK3N1YiBnZXRsaW5lCit7CisgIGxvY2FsICRfID0gJF9bMF0tPlNVUEVSOjpnZXRsaW5lOworICAjIFBlcmZvcm0gYSBfZ2xvYmFsXyByZXBsYWNlbWVudDogJF8gbWF5IGNhbiBjb250YWlucyBtYW55IGxpbmVzCisgICMgaW4gc2x1cnAgbW9kZSAoJC8gPSB1bmRlZikuCisgIHMvXDAxNVwwMTIvXG4vZ3MgaWYgZGVmaW5lZCAkXzsKKyAgcmV0dXJuICRfOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIEdldGxpbmVzCisjIworCitzdWIgZ2V0bGluZXMKK3sKKyAgbXkgQHJlcyA9ICgpOworICBteSAkbGluZTsKKyAgcHVzaCBAcmVzLCAkbGluZSB3aGlsZSAkbGluZSA9ICRfWzBdLT5nZXRsaW5lOworICByZXR1cm4gQHJlczsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyBOYW1lCisjIworCitzdWIgbmFtZQoreworICBteSAkZmggPSBzaGlmdDsKKyAgcmV0dXJuICR7KiRmaH17J2F1dG9tNHRlX3hmaWxlX2ZpbGUnfTsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyBMb2NrCisjIworCitzdWIgbG9jaworeworICBteSAoJGZoLCAkbW9kZSkgPSBAXzsKKyAgIyBDYW5ub3QgdXNlIEBfIGhlcmUuCisKKyAgIyBVbmxlc3MgZXhwbGljaXRseSBjb25maWd1cmVkIG90aGVyd2lzZSwgUGVybCBpbXBsZW1lbnRzIGl0cyBgZmxvY2snIHdpdGggdGhlCisgICMgZmlyc3Qgb2YgZmxvY2soMiksIGZjbnRsKDIpLCBvciBsb2NrZigzKSB0aGF0IHdvcmtzLiAgVGhlc2UgY2FuIGZhaWwgb24KKyAgIyBORlMtYmFja2VkIGZpbGVzLCB3aXRoIEVOT0xDSyAoR05VL0xpbnV4KSBvciBFT1BOT1RTVVBQIChGcmVlQlNEKTsgd2UKKyAgIyB1c3VhbGx5IGlnbm9yZSB0aGVzZSBlcnJvcnMuICBJZiAkRU5We01BS0VGTEFHU30gc3VnZ2VzdHMgdGhhdCBhIHBhcmFsbGVsCisgICMgaW52b2NhdGlvbiBvZiBgbWFrZScgaGFzIGludm9rZWQgdGhlIHRvb2wgd2Ugc2VydmUsIHJlcG9ydCBhbGwgbG9ja2luZworICAjIGZhaWx1cmVzIGFuZCBhYm9ydC4KKyAgIworICAjIE9uIFVuaWNvcywgZmxvY2soMikgYW5kIGZjbnRsKDIpIG92ZXIgTkZTIGhhbmcgaW5kZWZpbml0ZWx5IHdoZW4gYGxvY2tkJyBpcworICAjIG5vdCBydW5uaW5nLiAgTmV0QlNEIE5GUyBjbGllbnRzIHNpbGVudGx5IGdyYW50IGFsbCBsb2Nrcy4gIFdlIGRvIG5vdAorICAjIGF0dGVtcHQgdG8gZGVmZW5kIGFnYWluc3QgdGhlc2UgZGFuZ2Vycy4KKyAgIworICAjIC1qIGlzIGZvciBwYXJhbGxlbCBCU0QgbWFrZSwgLVAgaXMgZm9yIHBhcmFsbGVsIEhQLVVYIG1ha2UuCisgIGlmICghZmxvY2sgKCRmaCwgJG1vZGUpKQorICAgIHsKKyAgICAgIG15ICRtYWtlX2ogPSAoZXhpc3RzICRFTlZ7J01BS0VGTEFHUyd9CisJCSAgICAmJiAiIC0kRU5WeydNQUtFRkxBR1MnfSIgPX4gLyAoLVtCZGVpa3JSc1N3XSpbalBdfC0tW2pQXXwtLS0/am9icykvKTsKKyAgICAgIG15ICRub3RlID0gIlxuZm9yZ28gYG1ha2UgLWonIG9yIHVzZSBhIGZpbGUgc3lzdGVtIHRoYXQgc3VwcG9ydHMgbG9ja3MiOworICAgICAgbXkgJGZpbGUgPSAkZmgtPm5hbWU7CisKKyAgICAgIG1zZyAoJG1ha2VfaiA/ICdmYXRhbCcgOiAndW5zdXBwb3J0ZWQnLAorCSAgICJjYW5ub3QgbG9jayAkZmlsZSB3aXRoIG1vZGUgJG1vZGU6ICQhIiAuICgkbWFrZV9qID8gJG5vdGUgOiAiIikpCisJaWYgJG1ha2VfaiB8fCAhKCQhe0VOT0xDS30gfHwgJCF7RU9QTk9UU1VQUH0pOworICAgIH0KK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyBTZWVrCisjIworCitzdWIgc2VlaworeworICBteSAkZmggPSBzaGlmdDsKKyAgIyBDYW5ub3QgdXNlIEBfIGhlcmUuCisgIGlmICghc2VlayAoJGZoLCAkX1swXSwgJF9bMV0pKQorICAgIHsKKyAgICAgIG15ICRmaWxlID0gJGZoLT5uYW1lOworICAgICAgZmF0YWwgIiRtZTogY2Fubm90IHJld2luZCAkZmlsZSB3aXRoIEBfOiAkISI7CisgICAgfQorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIFRydW5jYXRlCisjIworCitzdWIgdHJ1bmNhdGUKK3sKKyAgbXkgKCRmaCwgJGxlbikgPSBAXzsKKyAgaWYgKCF0cnVuY2F0ZSAoJGZoLCAkbGVuKSkKKyAgICB7CisgICAgICBteSAkZmlsZSA9ICRmaC0+bmFtZTsKKyAgICAgIGZhdGFsICJjYW5ub3QgdHJ1bmNhdGUgJGZpbGUgYXQgJGxlbjogJCEiOworICAgIH0KK30KKworMTsKKworIyMjIFNldHVwICJHTlUiIHN0eWxlIGZvciBwZXJsLW1vZGUgYW5kIGNwZXJsLW1vZGUuCisjIyBMb2NhbCBWYXJpYWJsZXM6CisjIyBwZXJsLWluZGVudC1sZXZlbDogMgorIyMgcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1pbWFnaW5hcnktb2Zmc2V0OiAwCisjIyBwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWluZGVudC1sZXZlbDogMgorIyMgY3BlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1leHRyYS1uZXdsaW5lLWJlZm9yZS1icmFjZTogdAorIyMgY3BlcmwtbWVyZ2UtdHJhaWxpbmctZWxzZTogbmlsCisjIyBjcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgRW5kOgpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9DT1BZSU5HIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YTllZDAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL0NPUFlJTkcKQEAgLTAsMCArMSw2NzQgQEAKKyAgICAgICAgICAgICAgICAgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLCAyOSBKdW5lIDIwMDcKKworIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gPGh0dHA6Ly9mc2Yub3JnLz4KKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWFtYmxlCisKKyAgVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGEgZnJlZSwgY29weWxlZnQgbGljZW5zZSBmb3IKK3NvZnR3YXJlIGFuZCBvdGhlciBraW5kcyBvZiB3b3Jrcy4KKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYW5kIG90aGVyIHByYWN0aWNhbCB3b3JrcyBhcmUgZGVzaWduZWQKK3RvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSB0aGUgd29ya3MuICBCeSBjb250cmFzdCwKK3RoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvCitzaGFyZSBhbmQgY2hhbmdlIGFsbCB2ZXJzaW9ucyBvZiBhIHByb2dyYW0tLXRvIG1ha2Ugc3VyZSBpdCByZW1haW5zIGZyZWUKK3NvZnR3YXJlIGZvciBhbGwgaXRzIHVzZXJzLiAgV2UsIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHVzZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvCithbnkgb3RoZXIgd29yayByZWxlYXNlZCB0aGlzIHdheSBieSBpdHMgYXV0aG9ycy4gIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGVtIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdQord2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcKK2ZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gcHJldmVudCBvdGhlcnMgZnJvbSBkZW55aW5nIHlvdQordGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuICBUaGVyZWZvcmUsIHlvdSBoYXZlCitjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYKK3lvdSBtb2RpZnkgaXQ6IHJlc3BvbnNpYmlsaXRpZXMgdG8gcmVzcGVjdCB0aGUgZnJlZWRvbSBvZiBvdGhlcnMuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgcGFzcyBvbiB0byB0aGUgcmVjaXBpZW50cyB0aGUgc2FtZQorZnJlZWRvbXMgdGhhdCB5b3UgcmVjZWl2ZWQuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUKK29yIGNhbiBnZXQgdGhlIHNvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5Citrbm93IHRoZWlyIHJpZ2h0cy4KKworICBEZXZlbG9wZXJzIHRoYXQgdXNlIHRoZSBHTlUgR1BMIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6CisoMSkgYXNzZXJ0IGNvcHlyaWdodCBvbiB0aGUgc29mdHdhcmUsIGFuZCAoMikgb2ZmZXIgeW91IHRoaXMgTGljZW5zZQorZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4KKworICBGb3IgdGhlIGRldmVsb3BlcnMnIGFuZCBhdXRob3JzJyBwcm90ZWN0aW9uLCB0aGUgR1BMIGNsZWFybHkgZXhwbGFpbnMKK3RoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZvciBib3RoIHVzZXJzJyBhbmQKK2F1dGhvcnMnIHNha2UsIHRoZSBHUEwgcmVxdWlyZXMgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBiZSBtYXJrZWQgYXMKK2NoYW5nZWQsIHNvIHRoYXQgdGhlaXIgcHJvYmxlbXMgd2lsbCBub3QgYmUgYXR0cmlidXRlZCBlcnJvbmVvdXNseSB0bworYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4KKworICBTb21lIGRldmljZXMgYXJlIGRlc2lnbmVkIHRvIGRlbnkgdXNlcnMgYWNjZXNzIHRvIGluc3RhbGwgb3IgcnVuCittb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXIKK2NhbiBkbyBzby4gIFRoaXMgaXMgZnVuZGFtZW50YWxseSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgYWltIG9mCitwcm90ZWN0aW5nIHVzZXJzJyBmcmVlZG9tIHRvIGNoYW5nZSB0aGUgc29mdHdhcmUuICBUaGUgc3lzdGVtYXRpYworcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBpbiB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8KK3VzZSwgd2hpY2ggaXMgcHJlY2lzZWx5IHdoZXJlIGl0IGlzIG1vc3QgdW5hY2NlcHRhYmxlLiAgVGhlcmVmb3JlLCB3ZQoraGF2ZSBkZXNpZ25lZCB0aGlzIHZlcnNpb24gb2YgdGhlIEdQTCB0byBwcm9oaWJpdCB0aGUgcHJhY3RpY2UgZm9yIHRob3NlCitwcm9kdWN0cy4gIElmIHN1Y2ggcHJvYmxlbXMgYXJpc2Ugc3Vic3RhbnRpYWxseSBpbiBvdGhlciBkb21haW5zLCB3ZQorc3RhbmQgcmVhZHkgdG8gZXh0ZW5kIHRoaXMgcHJvdmlzaW9uIHRvIHRob3NlIGRvbWFpbnMgaW4gZnV0dXJlIHZlcnNpb25zCitvZiB0aGUgR1BMLCBhcyBuZWVkZWQgdG8gcHJvdGVjdCB0aGUgZnJlZWRvbSBvZiB1c2Vycy4KKworICBGaW5hbGx5LCBldmVyeSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZSBwYXRlbnRzLgorU3RhdGVzIHNob3VsZCBub3QgYWxsb3cgcGF0ZW50cyB0byByZXN0cmljdCBkZXZlbG9wbWVudCBhbmQgdXNlIG9mCitzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0bworYXZvaWQgdGhlIHNwZWNpYWwgZGFuZ2VyIHRoYXQgcGF0ZW50cyBhcHBsaWVkIHRvIGEgZnJlZSBwcm9ncmFtIGNvdWxkCittYWtlIGl0IGVmZmVjdGl2ZWx5IHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB0aGUgR1BMIGFzc3VyZXMgdGhhdAorcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisKKyAgICAgICAgICAgICAgICAgICAgICAgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAwLiBEZWZpbml0aW9ucy4KKworICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICAiQ29weXJpZ2h0IiBhbHNvIG1lYW5zIGNvcHlyaWdodC1saWtlIGxhd3MgdGhhdCBhcHBseSB0byBvdGhlciBraW5kcyBvZgord29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4KKworICAiVGhlIFByb2dyYW0iIHJlZmVycyB0byBhbnkgY29weXJpZ2h0YWJsZSB3b3JrIGxpY2Vuc2VkIHVuZGVyIHRoaXMKK0xpY2Vuc2UuICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gICJMaWNlbnNlZXMiIGFuZAorInJlY2lwaWVudHMiIG1heSBiZSBpbmRpdmlkdWFscyBvciBvcmdhbml6YXRpb25zLgorCisgIFRvICJtb2RpZnkiIGEgd29yayBtZWFucyB0byBjb3B5IGZyb20gb3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlIHdvcmsKK2luIGEgZmFzaGlvbiByZXF1aXJpbmcgY29weXJpZ2h0IHBlcm1pc3Npb24sIG90aGVyIHRoYW4gdGhlIG1ha2luZyBvZiBhbgorZXhhY3QgY29weS4gIFRoZSByZXN1bHRpbmcgd29yayBpcyBjYWxsZWQgYSAibW9kaWZpZWQgdmVyc2lvbiIgb2YgdGhlCitlYXJsaWVyIHdvcmsgb3IgYSB3b3JrICJiYXNlZCBvbiIgdGhlIGVhcmxpZXIgd29yay4KKworICBBICJjb3ZlcmVkIHdvcmsiIG1lYW5zIGVpdGhlciB0aGUgdW5tb2RpZmllZCBQcm9ncmFtIG9yIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0uCisKKyAgVG8gInByb3BhZ2F0ZSIgYSB3b3JrIG1lYW5zIHRvIGRvIGFueXRoaW5nIHdpdGggaXQgdGhhdCwgd2l0aG91dAorcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcgoraW5mcmluZ2VtZW50IHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdywgZXhjZXB0IGV4ZWN1dGluZyBpdCBvbiBhCitjb21wdXRlciBvciBtb2RpZnlpbmcgYSBwcml2YXRlIGNvcHkuICBQcm9wYWdhdGlvbiBpbmNsdWRlcyBjb3B5aW5nLAorZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUKK3B1YmxpYywgYW5kIGluIHNvbWUgY291bnRyaWVzIG90aGVyIGFjdGl2aXRpZXMgYXMgd2VsbC4KKworICBUbyAiY29udmV5IiBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyCitwYXJ0aWVzIHRvIG1ha2Ugb3IgcmVjZWl2ZSBjb3BpZXMuICBNZXJlIGludGVyYWN0aW9uIHdpdGggYSB1c2VyIHRocm91Z2gKK2EgY29tcHV0ZXIgbmV0d29yaywgd2l0aCBubyB0cmFuc2ZlciBvZiBhIGNvcHksIGlzIG5vdCBjb252ZXlpbmcuCisKKyAgQW4gaW50ZXJhY3RpdmUgdXNlciBpbnRlcmZhY2UgZGlzcGxheXMgIkFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMiCit0byB0aGUgZXh0ZW50IHRoYXQgaXQgaW5jbHVkZXMgYSBjb252ZW5pZW50IGFuZCBwcm9taW5lbnRseSB2aXNpYmxlCitmZWF0dXJlIHRoYXQgKDEpIGRpc3BsYXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikKK3RlbGxzIHRoZSB1c2VyIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSB3b3JrIChleGNlcHQgdG8gdGhlCitleHRlbnQgdGhhdCB3YXJyYW50aWVzIGFyZSBwcm92aWRlZCksIHRoYXQgbGljZW5zZWVzIG1heSBjb252ZXkgdGhlCit3b3JrIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZgordGhlIGludGVyZmFjZSBwcmVzZW50cyBhIGxpc3Qgb2YgdXNlciBjb21tYW5kcyBvciBvcHRpb25zLCBzdWNoIGFzIGEKK21lbnUsIGEgcHJvbWluZW50IGl0ZW0gaW4gdGhlIGxpc3QgbWVldHMgdGhpcyBjcml0ZXJpb24uCisKKyAgMS4gU291cmNlIENvZGUuCisKKyAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsKK2ZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gICJPYmplY3QgY29kZSIgbWVhbnMgYW55IG5vbi1zb3VyY2UKK2Zvcm0gb2YgYSB3b3JrLgorCisgIEEgIlN0YW5kYXJkIEludGVyZmFjZSIgbWVhbnMgYW4gaW50ZXJmYWNlIHRoYXQgZWl0aGVyIGlzIGFuIG9mZmljaWFsCitzdGFuZGFyZCBkZWZpbmVkIGJ5IGEgcmVjb2duaXplZCBzdGFuZGFyZHMgYm9keSwgb3IsIGluIHRoZSBjYXNlIG9mCitpbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdAoraXMgd2lkZWx5IHVzZWQgYW1vbmcgZGV2ZWxvcGVycyB3b3JraW5nIGluIHRoYXQgbGFuZ3VhZ2UuCisKKyAgVGhlICJTeXN0ZW0gTGlicmFyaWVzIiBvZiBhbiBleGVjdXRhYmxlIHdvcmsgaW5jbHVkZSBhbnl0aGluZywgb3RoZXIKK3RoYW4gdGhlIHdvcmsgYXMgYSB3aG9sZSwgdGhhdCAoYSkgaXMgaW5jbHVkZWQgaW4gdGhlIG5vcm1hbCBmb3JtIG9mCitwYWNrYWdpbmcgYSBNYWpvciBDb21wb25lbnQsIGJ1dCB3aGljaCBpcyBub3QgcGFydCBvZiB0aGF0IE1ham9yCitDb21wb25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3aXRoIHRoYXQKK01ham9yIENvbXBvbmVudCwgb3IgdG8gaW1wbGVtZW50IGEgU3RhbmRhcmQgSW50ZXJmYWNlIGZvciB3aGljaCBhbgoraW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgaW4gc291cmNlIGNvZGUgZm9ybS4gIEEKKyJNYWpvciBDb21wb25lbnQiLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudAorKGtlcm5lbCwgd2luZG93IHN5c3RlbSwgYW5kIHNvIG9uKSBvZiB0aGUgc3BlY2lmaWMgb3BlcmF0aW5nIHN5c3RlbQorKGlmIGFueSkgb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgd29yayBydW5zLCBvciBhIGNvbXBpbGVyIHVzZWQgdG8KK3Byb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LgorCisgIFRoZSAiQ29ycmVzcG9uZGluZyBTb3VyY2UiIGZvciBhIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSBtZWFucyBhbGwKK3RoZSBzb3VyY2UgY29kZSBuZWVkZWQgdG8gZ2VuZXJhdGUsIGluc3RhbGwsIGFuZCAoZm9yIGFuIGV4ZWN1dGFibGUKK3dvcmspIHJ1biB0aGUgb2JqZWN0IGNvZGUgYW5kIHRvIG1vZGlmeSB0aGUgd29yaywgaW5jbHVkaW5nIHNjcmlwdHMgdG8KK2NvbnRyb2wgdGhvc2UgYWN0aXZpdGllcy4gIEhvd2V2ZXIsIGl0IGRvZXMgbm90IGluY2x1ZGUgdGhlIHdvcmsncworU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZQorcHJvZ3JhbXMgd2hpY2ggYXJlIHVzZWQgdW5tb2RpZmllZCBpbiBwZXJmb3JtaW5nIHRob3NlIGFjdGl2aXRpZXMgYnV0Cit3aGljaCBhcmUgbm90IHBhcnQgb2YgdGhlIHdvcmsuICBGb3IgZXhhbXBsZSwgQ29ycmVzcG9uZGluZyBTb3VyY2UKK2luY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yCit0aGUgd29yaywgYW5kIHRoZSBzb3VyY2UgY29kZSBmb3Igc2hhcmVkIGxpYnJhcmllcyBhbmQgZHluYW1pY2FsbHkKK2xpbmtlZCBzdWJwcm9ncmFtcyB0aGF0IHRoZSB3b3JrIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byByZXF1aXJlLAorc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2UKK3N1YnByb2dyYW1zIGFuZCBvdGhlciBwYXJ0cyBvZiB0aGUgd29yay4KKworICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzCitjYW4gcmVnZW5lcmF0ZSBhdXRvbWF0aWNhbGx5IGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIENvcnJlc3BvbmRpbmcKK1NvdXJjZS4KKworICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGEgd29yayBpbiBzb3VyY2UgY29kZSBmb3JtIGlzIHRoYXQKK3NhbWUgd29yay4KKworICAyLiBCYXNpYyBQZXJtaXNzaW9ucy4KKworICBBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZgorY29weXJpZ2h0IG9uIHRoZSBQcm9ncmFtLCBhbmQgYXJlIGlycmV2b2NhYmxlIHByb3ZpZGVkIHRoZSBzdGF0ZWQKK2NvbmRpdGlvbnMgYXJlIG1ldC4gIFRoaXMgTGljZW5zZSBleHBsaWNpdGx5IGFmZmlybXMgeW91ciB1bmxpbWl0ZWQKK3Blcm1pc3Npb24gdG8gcnVuIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uICBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhCitjb3ZlcmVkIHdvcmsgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2Ugb25seSBpZiB0aGUgb3V0cHV0LCBnaXZlbiBpdHMKK2NvbnRlbnQsIGNvbnN0aXR1dGVzIGEgY292ZXJlZCB3b3JrLiAgVGhpcyBMaWNlbnNlIGFja25vd2xlZGdlcyB5b3VyCityaWdodHMgb2YgZmFpciB1c2Ugb3Igb3RoZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4KKworICBZb3UgbWF5IG1ha2UsIHJ1biBhbmQgcHJvcGFnYXRlIGNvdmVyZWQgd29ya3MgdGhhdCB5b3UgZG8gbm90Citjb252ZXksIHdpdGhvdXQgY29uZGl0aW9ucyBzbyBsb25nIGFzIHlvdXIgbGljZW5zZSBvdGhlcndpc2UgcmVtYWlucworaW4gZm9yY2UuICBZb3UgbWF5IGNvbnZleSBjb3ZlcmVkIHdvcmtzIHRvIG90aGVycyBmb3IgdGhlIHNvbGUgcHVycG9zZQorb2YgaGF2aW5nIHRoZW0gbWFrZSBtb2RpZmljYXRpb25zIGV4Y2x1c2l2ZWx5IGZvciB5b3UsIG9yIHByb3ZpZGUgeW91Cit3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoCit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluIGNvbnZleWluZyBhbGwgbWF0ZXJpYWwgZm9yIHdoaWNoIHlvdSBkbworbm90IGNvbnRyb2wgY29weXJpZ2h0LiAgVGhvc2UgdGh1cyBtYWtpbmcgb3IgcnVubmluZyB0aGUgY292ZXJlZCB3b3JrcworZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVjdGlvbgorYW5kIGNvbnRyb2wsIG9uIHRlcm1zIHRoYXQgcHJvaGliaXQgdGhlbSBmcm9tIG1ha2luZyBhbnkgY29waWVzIG9mCit5b3VyIGNvcHlyaWdodGVkIG1hdGVyaWFsIG91dHNpZGUgdGhlaXIgcmVsYXRpb25zaGlwIHdpdGggeW91LgorCisgIENvbnZleWluZyB1bmRlciBhbnkgb3RoZXIgY2lyY3Vtc3RhbmNlcyBpcyBwZXJtaXR0ZWQgc29sZWx5IHVuZGVyCit0aGUgY29uZGl0aW9ucyBzdGF0ZWQgYmVsb3cuICBTdWJsaWNlbnNpbmcgaXMgbm90IGFsbG93ZWQ7IHNlY3Rpb24gMTAKK21ha2VzIGl0IHVubmVjZXNzYXJ5LgorCisgIDMuIFByb3RlY3RpbmcgVXNlcnMnIExlZ2FsIFJpZ2h0cyBGcm9tIEFudGktQ2lyY3VtdmVudGlvbiBMYXcuCisKKyAgTm8gY292ZXJlZCB3b3JrIHNoYWxsIGJlIGRlZW1lZCBwYXJ0IG9mIGFuIGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsCittZWFzdXJlIHVuZGVyIGFueSBhcHBsaWNhYmxlIGxhdyBmdWxmaWxsaW5nIG9ibGlnYXRpb25zIHVuZGVyIGFydGljbGUKKzExIG9mIHRoZSBXSVBPIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvcgorc2ltaWxhciBsYXdzIHByb2hpYml0aW5nIG9yIHJlc3RyaWN0aW5nIGNpcmN1bXZlbnRpb24gb2Ygc3VjaAorbWVhc3VyZXMuCisKKyAgV2hlbiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB5b3Ugd2FpdmUgYW55IGxlZ2FsIHBvd2VyIHRvIGZvcmJpZAorY2lyY3VtdmVudGlvbiBvZiB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRvIHRoZSBleHRlbnQgc3VjaCBjaXJjdW12ZW50aW9uCitpcyBlZmZlY3RlZCBieSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvCit0aGUgY292ZXJlZCB3b3JrLCBhbmQgeW91IGRpc2NsYWltIGFueSBpbnRlbnRpb24gdG8gbGltaXQgb3BlcmF0aW9uIG9yCittb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgYXMgYSBtZWFucyBvZiBlbmZvcmNpbmcsIGFnYWluc3QgdGhlIHdvcmsncwordXNlcnMsIHlvdXIgb3IgdGhpcmQgcGFydGllcycgbGVnYWwgcmlnaHRzIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mCit0ZWNobm9sb2dpY2FsIG1lYXN1cmVzLgorCisgIDQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCisKKyAgWW91IG1heSBjb252ZXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3Mgc291cmNlIGNvZGUgYXMgeW91CityZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAorYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlOwora2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgc3RhdGluZyB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYW55Citub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7CitrZWVwIGludGFjdCBhbGwgbm90aWNlcyBvZiB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFsbAorcmVjaXBpZW50cyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFByb2dyYW0uCisKKyAgWW91IG1heSBjaGFyZ2UgYW55IHByaWNlIG9yIG5vIHByaWNlIGZvciBlYWNoIGNvcHkgdGhhdCB5b3UgY29udmV5LAorYW5kIHlvdSBtYXkgb2ZmZXIgc3VwcG9ydCBvciB3YXJyYW50eSBwcm90ZWN0aW9uIGZvciBhIGZlZS4KKworICA1LiBDb252ZXlpbmcgTW9kaWZpZWQgU291cmNlIFZlcnNpb25zLgorCisgIFlvdSBtYXkgY29udmV5IGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgdGhlIG1vZGlmaWNhdGlvbnMgdG8KK3Byb2R1Y2UgaXQgZnJvbSB0aGUgUHJvZ3JhbSwgaW4gdGhlIGZvcm0gb2Ygc291cmNlIGNvZGUgdW5kZXIgdGhlCit0ZXJtcyBvZiBzZWN0aW9uIDQsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFRoZSB3b3JrIG11c3QgY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBtb2RpZmllZAorICAgIGl0LCBhbmQgZ2l2aW5nIGEgcmVsZXZhbnQgZGF0ZS4KKworICAgIGIpIFRoZSB3b3JrIG11c3QgY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IGl0IGlzCisgICAgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgY29uZGl0aW9ucyBhZGRlZCB1bmRlciBzZWN0aW9uCisgICAgNy4gIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0bworICAgICJrZWVwIGludGFjdCBhbGwgbm90aWNlcyIuCisKKyAgICBjKSBZb3UgbXVzdCBsaWNlbnNlIHRoZSBlbnRpcmUgd29yaywgYXMgYSB3aG9sZSwgdW5kZXIgdGhpcworICAgIExpY2Vuc2UgdG8gYW55b25lIHdobyBjb21lcyBpbnRvIHBvc3Nlc3Npb24gb2YgYSBjb3B5LiAgVGhpcworICAgIExpY2Vuc2Ugd2lsbCB0aGVyZWZvcmUgYXBwbHksIGFsb25nIHdpdGggYW55IGFwcGxpY2FibGUgc2VjdGlvbiA3CisgICAgYWRkaXRpb25hbCB0ZXJtcywgdG8gdGhlIHdob2xlIG9mIHRoZSB3b3JrLCBhbmQgYWxsIGl0cyBwYXJ0cywKKyAgICByZWdhcmRsZXNzIG9mIGhvdyB0aGV5IGFyZSBwYWNrYWdlZC4gIFRoaXMgTGljZW5zZSBnaXZlcyBubworICAgIHBlcm1pc3Npb24gdG8gbGljZW5zZSB0aGUgd29yayBpbiBhbnkgb3RoZXIgd2F5LCBidXQgaXQgZG9lcyBub3QKKyAgICBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0LgorCisgICAgZCkgSWYgdGhlIHdvcmsgaGFzIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlcywgZWFjaCBtdXN0IGRpc3BsYXkKKyAgICBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUKKyAgICBpbnRlcmZhY2VzIHRoYXQgZG8gbm90IGRpc3BsYXkgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcywgeW91cgorICAgIHdvcmsgbmVlZCBub3QgbWFrZSB0aGVtIGRvIHNvLgorCisgIEEgY29tcGlsYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsgd2l0aCBvdGhlciBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQKK3dvcmtzLCB3aGljaCBhcmUgbm90IGJ5IHRoZWlyIG5hdHVyZSBleHRlbnNpb25zIG9mIHRoZSBjb3ZlcmVkIHdvcmssCithbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLAoraW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0sIGlzIGNhbGxlZCBhbgorImFnZ3JlZ2F0ZSIgaWYgdGhlIGNvbXBpbGF0aW9uIGFuZCBpdHMgcmVzdWx0aW5nIGNvcHlyaWdodCBhcmUgbm90Cit1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzCitiZXlvbmQgd2hhdCB0aGUgaW5kaXZpZHVhbCB3b3JrcyBwZXJtaXQuICBJbmNsdXNpb24gb2YgYSBjb3ZlcmVkIHdvcmsKK2luIGFuIGFnZ3JlZ2F0ZSBkb2VzIG5vdCBjYXVzZSB0aGlzIExpY2Vuc2UgdG8gYXBwbHkgdG8gdGhlIG90aGVyCitwYXJ0cyBvZiB0aGUgYWdncmVnYXRlLgorCisgIDYuIENvbnZleWluZyBOb24tU291cmNlIEZvcm1zLgorCisgIFlvdSBtYXkgY29udmV5IGEgY292ZXJlZCB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zCitvZiBzZWN0aW9ucyA0IGFuZCA1LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGNvbnZleSB0aGUKK21hY2hpbmUtcmVhZGFibGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKK2luIG9uZSBvZiB0aGVzZSB3YXlzOgorCisgICAgYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAorICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgZml4ZWQgb24gYSBkdXJhYmxlIHBoeXNpY2FsIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCisgICAgYikgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAorICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYQorICAgIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycyBhbmQgdmFsaWQgZm9yIGFzCisgICAgbG9uZyBhcyB5b3Ugb2ZmZXIgc3BhcmUgcGFydHMgb3IgY3VzdG9tZXIgc3VwcG9ydCBmb3IgdGhhdCBwcm9kdWN0CisgICAgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYQorICAgIGNvcHkgb2YgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhbGwgdGhlIHNvZnR3YXJlIGluIHRoZQorICAgIHByb2R1Y3QgdGhhdCBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgb24gYSBkdXJhYmxlIHBoeXNpY2FsCisgICAgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubworICAgIG1vcmUgdGhhbiB5b3VyIHJlYXNvbmFibGUgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgdGhpcworICAgIGNvbnZleWluZyBvZiBzb3VyY2UsIG9yICgyKSBhY2Nlc3MgdG8gY29weSB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLgorCisgICAgYykgQ29udmV5IGluZGl2aWR1YWwgY29waWVzIG9mIHRoZSBvYmplY3QgY29kZSB3aXRoIGEgY29weSBvZiB0aGUKKyAgICB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhpcworICAgIGFsdGVybmF0aXZlIGlzIGFsbG93ZWQgb25seSBvY2Nhc2lvbmFsbHkgYW5kIG5vbmNvbW1lcmNpYWxseSwgYW5kCisgICAgb25seSBpZiB5b3UgcmVjZWl2ZWQgdGhlIG9iamVjdCBjb2RlIHdpdGggc3VjaCBhbiBvZmZlciwgaW4gYWNjb3JkCisgICAgd2l0aCBzdWJzZWN0aW9uIDZiLgorCisgICAgZCkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBieSBvZmZlcmluZyBhY2Nlc3MgZnJvbSBhIGRlc2lnbmF0ZWQKKyAgICBwbGFjZSAoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBpbiB0aGUgc2FtZSB3YXkgdGhyb3VnaCB0aGUgc2FtZSBwbGFjZSBhdCBubworICAgIGZ1cnRoZXIgY2hhcmdlLiAgWW91IG5lZWQgbm90IHJlcXVpcmUgcmVjaXBpZW50cyB0byBjb3B5IHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiAgSWYgdGhlIHBsYWNlIHRvCisgICAgY29weSB0aGUgb2JqZWN0IGNvZGUgaXMgYSBuZXR3b3JrIHNlcnZlciwgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlCisgICAgbWF5IGJlIG9uIGEgZGlmZmVyZW50IHNlcnZlciAob3BlcmF0ZWQgYnkgeW91IG9yIGEgdGhpcmQgcGFydHkpCisgICAgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluCisgICAgY2xlYXIgZGlyZWN0aW9ucyBuZXh0IHRvIHRoZSBvYmplY3QgY29kZSBzYXlpbmcgd2hlcmUgdG8gZmluZCB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFJlZ2FyZGxlc3Mgb2Ygd2hhdCBzZXJ2ZXIgaG9zdHMgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4gb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzCisgICAgYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIG5lZWRlZCB0byBzYXRpc2Z5IHRoZXNlIHJlcXVpcmVtZW50cy4KKworICAgIGUpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwgcHJvdmlkZWQKKyAgICB5b3UgaW5mb3JtIG90aGVyIHBlZXJzIHdoZXJlIHRoZSBvYmplY3QgY29kZSBhbmQgQ29ycmVzcG9uZGluZworICAgIFNvdXJjZSBvZiB0aGUgd29yayBhcmUgYmVpbmcgb2ZmZXJlZCB0byB0aGUgZ2VuZXJhbCBwdWJsaWMgYXQgbm8KKyAgICBjaGFyZ2UgdW5kZXIgc3Vic2VjdGlvbiA2ZC4KKworICBBIHNlcGFyYWJsZSBwb3J0aW9uIG9mIHRoZSBvYmplY3QgY29kZSwgd2hvc2Ugc291cmNlIGNvZGUgaXMgZXhjbHVkZWQKK2Zyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlCitpbmNsdWRlZCBpbiBjb252ZXlpbmcgdGhlIG9iamVjdCBjb2RlIHdvcmsuCisKKyAgQSAiVXNlciBQcm9kdWN0IiBpcyBlaXRoZXIgKDEpIGEgImNvbnN1bWVyIHByb2R1Y3QiLCB3aGljaCBtZWFucyBhbnkKK3RhbmdpYmxlIHBlcnNvbmFsIHByb3BlcnR5IHdoaWNoIGlzIG5vcm1hbGx5IHVzZWQgZm9yIHBlcnNvbmFsLCBmYW1pbHksCitvciBob3VzZWhvbGQgcHVycG9zZXMsIG9yICgyKSBhbnl0aGluZyBkZXNpZ25lZCBvciBzb2xkIGZvciBpbmNvcnBvcmF0aW9uCitpbnRvIGEgZHdlbGxpbmcuICBJbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QsCitkb3VidGZ1bCBjYXNlcyBzaGFsbCBiZSByZXNvbHZlZCBpbiBmYXZvciBvZiBjb3ZlcmFnZS4gIEZvciBhIHBhcnRpY3VsYXIKK3Byb2R1Y3QgcmVjZWl2ZWQgYnkgYSBwYXJ0aWN1bGFyIHVzZXIsICJub3JtYWxseSB1c2VkIiByZWZlcnMgdG8gYQordHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzCitvZiB0aGUgcGFydGljdWxhciB1c2VyIG9yIG9mIHRoZSB3YXkgaW4gd2hpY2ggdGhlIHBhcnRpY3VsYXIgdXNlcgorYWN0dWFsbHkgdXNlcywgb3IgZXhwZWN0cyBvciBpcyBleHBlY3RlZCB0byB1c2UsIHRoZSBwcm9kdWN0LiAgQSBwcm9kdWN0CitpcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbAorY29tbWVyY2lhbCwgaW5kdXN0cmlhbCBvciBub24tY29uc3VtZXIgdXNlcywgdW5sZXNzIHN1Y2ggdXNlcyByZXByZXNlbnQKK3RoZSBvbmx5IHNpZ25pZmljYW50IG1vZGUgb2YgdXNlIG9mIHRoZSBwcm9kdWN0LgorCisgICJJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24iIGZvciBhIFVzZXIgUHJvZHVjdCBtZWFucyBhbnkgbWV0aG9kcywKK3Byb2NlZHVyZXMsIGF1dGhvcml6YXRpb24ga2V5cywgb3Igb3RoZXIgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gaW5zdGFsbAorYW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyIFByb2R1Y3QgZnJvbQorYSBtb2RpZmllZCB2ZXJzaW9uIG9mIGl0cyBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFRoZSBpbmZvcm1hdGlvbiBtdXN0CitzdWZmaWNlIHRvIGVuc3VyZSB0aGF0IHRoZSBjb250aW51ZWQgZnVuY3Rpb25pbmcgb2YgdGhlIG1vZGlmaWVkIG9iamVjdAorY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UKK21vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlLgorCisgIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yCitzcGVjaWZpY2FsbHkgZm9yIHVzZSBpbiwgYSBVc2VyIFByb2R1Y3QsIGFuZCB0aGUgY29udmV5aW5nIG9jY3VycyBhcworcGFydCBvZiBhIHRyYW5zYWN0aW9uIGluIHdoaWNoIHRoZSByaWdodCBvZiBwb3NzZXNzaW9uIGFuZCB1c2Ugb2YgdGhlCitVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJwZXR1aXR5IG9yIGZvciBhCitmaXhlZCB0ZXJtIChyZWdhcmRsZXNzIG9mIGhvdyB0aGUgdHJhbnNhY3Rpb24gaXMgY2hhcmFjdGVyaXplZCksIHRoZQorQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQgdW5kZXIgdGhpcyBzZWN0aW9uIG11c3QgYmUgYWNjb21wYW5pZWQKK2J5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uICBCdXQgdGhpcyByZXF1aXJlbWVudCBkb2VzIG5vdCBhcHBseQoraWYgbmVpdGhlciB5b3Ugbm9yIGFueSB0aGlyZCBwYXJ0eSByZXRhaW5zIHRoZSBhYmlsaXR5IHRvIGluc3RhbGwKK21vZGlmaWVkIG9iamVjdCBjb2RlIG9uIHRoZSBVc2VyIFByb2R1Y3QgKGZvciBleGFtcGxlLCB0aGUgd29yayBoYXMKK2JlZW4gaW5zdGFsbGVkIGluIFJPTSkuCisKKyAgVGhlIHJlcXVpcmVtZW50IHRvIHByb3ZpZGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIGRvZXMgbm90IGluY2x1ZGUgYQorcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvciB1cGRhdGVzCitmb3IgYSB3b3JrIHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkIGJ5IHRoZSByZWNpcGllbnQsIG9yIGZvcgordGhlIFVzZXIgUHJvZHVjdCBpbiB3aGljaCBpdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQuICBBY2Nlc3MgdG8gYQorbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4gdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgbWF0ZXJpYWxseSBhbmQKK2FkdmVyc2VseSBhZmZlY3RzIHRoZSBvcGVyYXRpb24gb2YgdGhlIG5ldHdvcmsgb3IgdmlvbGF0ZXMgdGhlIHJ1bGVzIGFuZAorcHJvdG9jb2xzIGZvciBjb21tdW5pY2F0aW9uIGFjcm9zcyB0aGUgbmV0d29yay4KKworICBDb3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXllZCwgYW5kIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBwcm92aWRlZCwKK2luIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGluIGEgZm9ybWF0IHRoYXQgaXMgcHVibGljbHkKK2RvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluCitzb3VyY2UgY29kZSBmb3JtKSwgYW5kIG11c3QgcmVxdWlyZSBubyBzcGVjaWFsIHBhc3N3b3JkIG9yIGtleSBmb3IKK3VucGFja2luZywgcmVhZGluZyBvciBjb3B5aW5nLgorCisgIDcuIEFkZGl0aW9uYWwgVGVybXMuCisKKyAgIkFkZGl0aW9uYWwgcGVybWlzc2lvbnMiIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2UgYnkgbWFraW5nIGV4Y2VwdGlvbnMgZnJvbSBvbmUgb3IgbW9yZSBvZiBpdHMgY29uZGl0aW9ucy4KK0FkZGl0aW9uYWwgcGVybWlzc2lvbnMgdGhhdCBhcmUgYXBwbGljYWJsZSB0byB0aGUgZW50aXJlIFByb2dyYW0gc2hhbGwKK2JlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQKK3RoYXQgdGhleSBhcmUgdmFsaWQgdW5kZXIgYXBwbGljYWJsZSBsYXcuICBJZiBhZGRpdGlvbmFsIHBlcm1pc3Npb25zCithcHBseSBvbmx5IHRvIHBhcnQgb2YgdGhlIFByb2dyYW0sIHRoYXQgcGFydCBtYXkgYmUgdXNlZCBzZXBhcmF0ZWx5Cit1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5Cit0aGlzIExpY2Vuc2Ugd2l0aG91dCByZWdhcmQgdG8gdGhlIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMuCisKKyAgV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbgorcmVtb3ZlIGFueSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIGZyb20gdGhhdCBjb3B5LCBvciBmcm9tIGFueSBwYXJ0IG9mCitpdC4gIChBZGRpdGlvbmFsIHBlcm1pc3Npb25zIG1heSBiZSB3cml0dGVuIHRvIHJlcXVpcmUgdGhlaXIgb3duCityZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgIFlvdSBtYXkgcGxhY2UKK2FkZGl0aW9uYWwgcGVybWlzc2lvbnMgb24gbWF0ZXJpYWwsIGFkZGVkIGJ5IHlvdSB0byBhIGNvdmVyZWQgd29yaywKK2ZvciB3aGljaCB5b3UgaGF2ZSBvciBjYW4gZ2l2ZSBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgcGVybWlzc2lvbi4KKworICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIGZvciBtYXRlcmlhbCB5b3UKK2FkZCB0byBhIGNvdmVyZWQgd29yaywgeW91IG1heSAoaWYgYXV0aG9yaXplZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgb2YKK3RoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOgorCisgICAgYSkgRGlzY2xhaW1pbmcgd2FycmFudHkgb3IgbGltaXRpbmcgbGlhYmlsaXR5IGRpZmZlcmVudGx5IGZyb20gdGhlCisgICAgdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3IKKworICAgIGIpIFJlcXVpcmluZyBwcmVzZXJ2YXRpb24gb2Ygc3BlY2lmaWVkIHJlYXNvbmFibGUgbGVnYWwgbm90aWNlcyBvcgorICAgIGF1dGhvciBhdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUgQXBwcm9wcmlhdGUgTGVnYWwKKyAgICBOb3RpY2VzIGRpc3BsYXllZCBieSB3b3JrcyBjb250YWluaW5nIGl0OyBvcgorCisgICAgYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvcgorICAgIHJlcXVpcmluZyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIG9mIHN1Y2ggbWF0ZXJpYWwgYmUgbWFya2VkIGluCisgICAgcmVhc29uYWJsZSB3YXlzIGFzIGRpZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbCB2ZXJzaW9uOyBvcgorCisgICAgZCkgTGltaXRpbmcgdGhlIHVzZSBmb3IgcHVibGljaXR5IHB1cnBvc2VzIG9mIG5hbWVzIG9mIGxpY2Vuc29ycyBvcgorICAgIGF1dGhvcnMgb2YgdGhlIG1hdGVyaWFsOyBvcgorCisgICAgZSkgRGVjbGluaW5nIHRvIGdyYW50IHJpZ2h0cyB1bmRlciB0cmFkZW1hcmsgbGF3IGZvciB1c2Ugb2Ygc29tZQorICAgIHRyYWRlIG5hbWVzLCB0cmFkZW1hcmtzLCBvciBzZXJ2aWNlIG1hcmtzOyBvcgorCisgICAgZikgUmVxdWlyaW5nIGluZGVtbmlmaWNhdGlvbiBvZiBsaWNlbnNvcnMgYW5kIGF1dGhvcnMgb2YgdGhhdAorICAgIG1hdGVyaWFsIGJ5IGFueW9uZSB3aG8gY29udmV5cyB0aGUgbWF0ZXJpYWwgKG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mCisgICAgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvcgorICAgIGFueSBsaWFiaWxpdHkgdGhhdCB0aGVzZSBjb250cmFjdHVhbCBhc3N1bXB0aW9ucyBkaXJlY3RseSBpbXBvc2Ugb24KKyAgICB0aG9zZSBsaWNlbnNvcnMgYW5kIGF1dGhvcnMuCisKKyAgQWxsIG90aGVyIG5vbi1wZXJtaXNzaXZlIGFkZGl0aW9uYWwgdGVybXMgYXJlIGNvbnNpZGVyZWQgImZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyIgd2l0aGluIHRoZSBtZWFuaW5nIG9mIHNlY3Rpb24gMTAuICBJZiB0aGUgUHJvZ3JhbSBhcyB5b3UKK3JlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzCitnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCBhIHRlcm0gdGhhdCBpcyBhIGZ1cnRoZXIKK3Jlc3RyaWN0aW9uLCB5b3UgbWF5IHJlbW92ZSB0aGF0IHRlcm0uICBJZiBhIGxpY2Vuc2UgZG9jdW1lbnQgY29udGFpbnMKK2EgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcworTGljZW5zZSwgeW91IG1heSBhZGQgdG8gYSBjb3ZlcmVkIHdvcmsgbWF0ZXJpYWwgZ292ZXJuZWQgYnkgdGhlIHRlcm1zCitvZiB0aGF0IGxpY2Vuc2UgZG9jdW1lbnQsIHByb3ZpZGVkIHRoYXQgdGhlIGZ1cnRoZXIgcmVzdHJpY3Rpb24gZG9lcworbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuCisKKyAgSWYgeW91IGFkZCB0ZXJtcyB0byBhIGNvdmVyZWQgd29yayBpbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24sIHlvdQorbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlCithZGRpdGlvbmFsIHRlcm1zIHRoYXQgYXBwbHkgdG8gdGhvc2UgZmlsZXMsIG9yIGEgbm90aWNlIGluZGljYXRpbmcKK3doZXJlIHRvIGZpbmQgdGhlIGFwcGxpY2FibGUgdGVybXMuCisKKyAgQWRkaXRpb25hbCB0ZXJtcywgcGVybWlzc2l2ZSBvciBub24tcGVybWlzc2l2ZSwgbWF5IGJlIHN0YXRlZCBpbiB0aGUKK2Zvcm0gb2YgYSBzZXBhcmF0ZWx5IHdyaXR0ZW4gbGljZW5zZSwgb3Igc3RhdGVkIGFzIGV4Y2VwdGlvbnM7Cit0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuCisKKyAgOC4gVGVybWluYXRpb24uCisKKyAgWW91IG1heSBub3QgcHJvcGFnYXRlIG9yIG1vZGlmeSBhIGNvdmVyZWQgd29yayBleGNlcHQgYXMgZXhwcmVzc2x5Citwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gcHJvcGFnYXRlIG9yCittb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIKK3RoaXMgTGljZW5zZSAoaW5jbHVkaW5nIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCB1bmRlciB0aGUgdGhpcmQKK3BhcmFncmFwaCBvZiBzZWN0aW9uIDExKS4KKworICBIb3dldmVyLCBpZiB5b3UgY2Vhc2UgYWxsIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHRoZW4geW91cgorbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzIHJlaW5zdGF0ZWQgKGEpCitwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kCitmaW5hbGx5IHRlcm1pbmF0ZXMgeW91ciBsaWNlbnNlLCBhbmQgKGIpIHBlcm1hbmVudGx5LCBpZiB0aGUgY29weXJpZ2h0Citob2xkZXIgZmFpbHMgdG8gbm90aWZ5IHlvdSBvZiB0aGUgdmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucworcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgorCisgIE1vcmVvdmVyLCB5b3VyIGxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcworcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCit2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zLCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBoYXZlCityZWNlaXZlZCBub3RpY2Ugb2YgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSAoZm9yIGFueSB3b3JrKSBmcm9tIHRoYXQKK2NvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKK3lvdXIgcmVjZWlwdCBvZiB0aGUgbm90aWNlLgorCisgIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCitsaWNlbnNlcyBvZiBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcyBvciByaWdodHMgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZS4gIElmIHlvdXIgcmlnaHRzIGhhdmUgYmVlbiB0ZXJtaW5hdGVkIGFuZCBub3QgcGVybWFuZW50bHkKK3JlaW5zdGF0ZWQsIHlvdSBkbyBub3QgcXVhbGlmeSB0byByZWNlaXZlIG5ldyBsaWNlbnNlcyBmb3IgdGhlIHNhbWUKK21hdGVyaWFsIHVuZGVyIHNlY3Rpb24gMTAuCisKKyAgOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuCisKKyAgWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSBpbiBvcmRlciB0byByZWNlaXZlIG9yCitydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiAgQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrCitvY2N1cnJpbmcgc29sZWx5IGFzIGEgY29uc2VxdWVuY2Ugb2YgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbgordG8gcmVjZWl2ZSBhIGNvcHkgbGlrZXdpc2UgZG9lcyBub3QgcmVxdWlyZSBhY2NlcHRhbmNlLiAgSG93ZXZlciwKK25vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvcgorbW9kaWZ5IGFueSBjb3ZlcmVkIHdvcmsuICBUaGVzZSBhY3Rpb25zIGluZnJpbmdlIGNvcHlyaWdodCBpZiB5b3UgZG8KK25vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgcHJvcGFnYXRpbmcgYQorY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4KKworICAxMC4gQXV0b21hdGljIExpY2Vuc2luZyBvZiBEb3duc3RyZWFtIFJlY2lwaWVudHMuCisKKyAgRWFjaCB0aW1lIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseQorcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlIG9yaWdpbmFsIGxpY2Vuc29ycywgdG8gcnVuLCBtb2RpZnkgYW5kCitwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlCitmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoIHRoaXMgTGljZW5zZS4KKworICBBbiAiZW50aXR5IHRyYW5zYWN0aW9uIiBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuCitvcmdhbml6YXRpb24sIG9yIHN1YnN0YW50aWFsbHkgYWxsIGFzc2V0cyBvZiBvbmUsIG9yIHN1YmRpdmlkaW5nIGFuCitvcmdhbml6YXRpb24sIG9yIG1lcmdpbmcgb3JnYW5pemF0aW9ucy4gIElmIHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZAord29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQKK3RyYW5zYWN0aW9uIHdobyByZWNlaXZlcyBhIGNvcHkgb2YgdGhlIHdvcmsgYWxzbyByZWNlaXZlcyB3aGF0ZXZlcgorbGljZW5zZXMgdG8gdGhlIHdvcmsgdGhlIHBhcnR5J3MgcHJlZGVjZXNzb3IgaW4gaW50ZXJlc3QgaGFkIG9yIGNvdWxkCitnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZQorQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgZnJvbSB0aGUgcHJlZGVjZXNzb3IgaW4gaW50ZXJlc3QsIGlmCit0aGUgcHJlZGVjZXNzb3IgaGFzIGl0IG9yIGNhbiBnZXQgaXQgd2l0aCByZWFzb25hYmxlIGVmZm9ydHMuCisKKyAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgZXhlcmNpc2Ugb2YgdGhlCityaWdodHMgZ3JhbnRlZCBvciBhZmZpcm1lZCB1bmRlciB0aGlzIExpY2Vuc2UuICBGb3IgZXhhbXBsZSwgeW91IG1heQorbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mCityaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB5b3UgbWF5IG5vdCBpbml0aWF0ZSBsaXRpZ2F0aW9uCisoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdAorYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yCitzYWxlLCBvciBpbXBvcnRpbmcgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24gb2YgaXQuCisKKyAgMTEuIFBhdGVudHMuCisKKyAgQSAiY29udHJpYnV0b3IiIGlzIGEgY29weXJpZ2h0IGhvbGRlciB3aG8gYXV0aG9yaXplcyB1c2UgdW5kZXIgdGhpcworTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuICBUaGUKK3dvcmsgdGh1cyBsaWNlbnNlZCBpcyBjYWxsZWQgdGhlIGNvbnRyaWJ1dG9yJ3MgImNvbnRyaWJ1dG9yIHZlcnNpb24iLgorCisgIEEgY29udHJpYnV0b3IncyAiZXNzZW50aWFsIHBhdGVudCBjbGFpbXMiIGFyZSBhbGwgcGF0ZW50IGNsYWltcworb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgY29udHJpYnV0b3IsIHdoZXRoZXIgYWxyZWFkeSBhY3F1aXJlZCBvcgoraGVyZWFmdGVyIGFjcXVpcmVkLCB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBieSBzb21lIG1hbm5lciwgcGVybWl0dGVkCitieSB0aGlzIExpY2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24sCitidXQgZG8gbm90IGluY2x1ZGUgY2xhaW1zIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIG9ubHkgYXMgYQorY29uc2VxdWVuY2Ugb2YgZnVydGhlciBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRyaWJ1dG9yIHZlcnNpb24uICBGb3IKK3B1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudAorcGF0ZW50IHN1YmxpY2Vuc2VzIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mCit0aGlzIExpY2Vuc2UuCisKKyAgRWFjaCBjb250cmlidXRvciBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIHRoZSBjb250cmlidXRvcidzIGVzc2VudGlhbCBwYXRlbnQgY2xhaW1zLCB0bworbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kCitwcm9wYWdhdGUgdGhlIGNvbnRlbnRzIG9mIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLgorCisgIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSAicGF0ZW50IGxpY2Vuc2UiIGlzIGFueSBleHByZXNzCithZ3JlZW1lbnQgb3IgY29tbWl0bWVudCwgaG93ZXZlciBkZW5vbWluYXRlZCwgbm90IHRvIGVuZm9yY2UgYSBwYXRlbnQKKyhzdWNoIGFzIGFuIGV4cHJlc3MgcGVybWlzc2lvbiB0byBwcmFjdGljZSBhIHBhdGVudCBvciBjb3ZlbmFudCBub3QgdG8KK3N1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuICBUbyAiZ3JhbnQiIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhCitwYXJ0eSBtZWFucyB0byBtYWtlIHN1Y2ggYW4gYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQgbm90IHRvIGVuZm9yY2UgYQorcGF0ZW50IGFnYWluc3QgdGhlIHBhcnR5LgorCisgIElmIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIGtub3dpbmdseSByZWx5aW5nIG9uIGEgcGF0ZW50IGxpY2Vuc2UsCithbmQgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGlzIG5vdCBhdmFpbGFibGUgZm9yIGFueW9uZQordG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYQorcHVibGljbHkgYXZhaWxhYmxlIG5ldHdvcmsgc2VydmVyIG9yIG90aGVyIHJlYWRpbHkgYWNjZXNzaWJsZSBtZWFucywKK3RoZW4geW91IG11c3QgZWl0aGVyICgxKSBjYXVzZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdG8gYmUgc28KK2F2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUKK3BhdGVudCBsaWNlbnNlIGZvciB0aGlzIHBhcnRpY3VsYXIgd29yaywgb3IgKDMpIGFycmFuZ2UsIGluIGEgbWFubmVyCitjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UsIHRvIGV4dGVuZCB0aGUgcGF0ZW50CitsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gICJLbm93aW5nbHkgcmVseWluZyIgbWVhbnMgeW91IGhhdmUKK2FjdHVhbCBrbm93bGVkZ2UgdGhhdCwgYnV0IGZvciB0aGUgcGF0ZW50IGxpY2Vuc2UsIHlvdXIgY29udmV5aW5nIHRoZQorY292ZXJlZCB3b3JrIGluIGEgY291bnRyeSwgb3IgeW91ciByZWNpcGllbnQncyB1c2Ugb2YgdGhlIGNvdmVyZWQgd29yaworaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0Citjb3VudHJ5IHRoYXQgeW91IGhhdmUgcmVhc29uIHRvIGJlbGlldmUgYXJlIHZhbGlkLgorCisgIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IKK2FycmFuZ2VtZW50LCB5b3UgY29udmV5LCBvciBwcm9wYWdhdGUgYnkgcHJvY3VyaW5nIGNvbnZleWFuY2Ugb2YsIGEKK2NvdmVyZWQgd29yaywgYW5kIGdyYW50IGEgcGF0ZW50IGxpY2Vuc2UgdG8gc29tZSBvZiB0aGUgcGFydGllcworcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5CitvciBjb252ZXkgYSBzcGVjaWZpYyBjb3B5IG9mIHRoZSBjb3ZlcmVkIHdvcmssIHRoZW4gdGhlIHBhdGVudCBsaWNlbnNlCit5b3UgZ3JhbnQgaXMgYXV0b21hdGljYWxseSBleHRlbmRlZCB0byBhbGwgcmVjaXBpZW50cyBvZiB0aGUgY292ZXJlZAord29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCisKKyAgQSBwYXRlbnQgbGljZW5zZSBpcyAiZGlzY3JpbWluYXRvcnkiIGlmIGl0IGRvZXMgbm90IGluY2x1ZGUgd2l0aGluCit0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcworY29uZGl0aW9uZWQgb24gdGhlIG5vbi1leGVyY2lzZSBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgcmlnaHRzIHRoYXQgYXJlCitzcGVjaWZpY2FsbHkgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBZb3UgbWF5IG5vdCBjb252ZXkgYSBjb3ZlcmVkCit3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcworaW4gdGhlIGJ1c2luZXNzIG9mIGRpc3RyaWJ1dGluZyBzb2Z0d2FyZSwgdW5kZXIgd2hpY2ggeW91IG1ha2UgcGF5bWVudAordG8gdGhlIHRoaXJkIHBhcnR5IGJhc2VkIG9uIHRoZSBleHRlbnQgb2YgeW91ciBhY3Rpdml0eSBvZiBjb252ZXlpbmcKK3RoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQorcGFydGllcyB3aG8gd291bGQgcmVjZWl2ZSB0aGUgY292ZXJlZCB3b3JrIGZyb20geW91LCBhIGRpc2NyaW1pbmF0b3J5CitwYXRlbnQgbGljZW5zZSAoYSkgaW4gY29ubmVjdGlvbiB3aXRoIGNvcGllcyBvZiB0aGUgY292ZXJlZCB3b3JrCitjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseQorZm9yIGFuZCBpbiBjb25uZWN0aW9uIHdpdGggc3BlY2lmaWMgcHJvZHVjdHMgb3IgY29tcGlsYXRpb25zIHRoYXQKK2NvbnRhaW4gdGhlIGNvdmVyZWQgd29yaywgdW5sZXNzIHlvdSBlbnRlcmVkIGludG8gdGhhdCBhcnJhbmdlbWVudCwKK29yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCisKKyAgTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgY29uc3RydWVkIGFzIGV4Y2x1ZGluZyBvciBsaW1pdGluZworYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkKK290aGVyd2lzZSBiZSBhdmFpbGFibGUgdG8geW91IHVuZGVyIGFwcGxpY2FibGUgcGF0ZW50IGxhdy4KKworICAxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KKworICBJZiBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdCBjb252ZXkgYQorY292ZXJlZCB3b3JrIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heQorbm90IGNvbnZleSBpdCBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgeW91IGFncmVlIHRvIHRlcm1zIHRoYXQgb2JsaWdhdGUgeW91Cit0byBjb2xsZWN0IGEgcm95YWx0eSBmb3IgZnVydGhlciBjb252ZXlpbmcgZnJvbSB0aG9zZSB0byB3aG9tIHlvdSBjb252ZXkKK3RoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcworTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gY29udmV5aW5nIHRoZSBQcm9ncmFtLgorCisgIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCisgIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgeW91IGhhdmUKK3Blcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKK3VuZGVyIHZlcnNpb24gMyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGludG8gYSBzaW5nbGUKK2NvbWJpbmVkIHdvcmssIGFuZCB0byBjb252ZXkgdGhlIHJlc3VsdGluZyB3b3JrLiAgVGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLAorYnV0IHRoZSBzcGVjaWFsIHJlcXVpcmVtZW50cyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorc2VjdGlvbiAxMywgY29uY2VybmluZyBpbnRlcmFjdGlvbiB0aHJvdWdoIGEgbmV0d29yayB3aWxsIGFwcGx5IHRvIHRoZQorY29tYmluYXRpb24gYXMgc3VjaC4KKworICAxNC4gUmV2aXNlZCBWZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YKK3RoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKKyAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUKK1Byb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBjZXJ0YWluIG51bWJlcmVkIHZlcnNpb24gb2YgdGhlIEdOVSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSAib3IgYW55IGxhdGVyIHZlcnNpb24iIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZQorb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQKK3ZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCitieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKK3ZlcnNpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBjYW4gYmUgdXNlZCwgdGhhdCBwcm94eSdzCitwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYSB2ZXJzaW9uIHBlcm1hbmVudGx5IGF1dGhvcml6ZXMgeW91Cit0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KKworICBMYXRlciBsaWNlbnNlIHZlcnNpb25zIG1heSBnaXZlIHlvdSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudAorcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQorYXV0aG9yIG9yIGNvcHlyaWdodCBob2xkZXIgYXMgYSByZXN1bHQgb2YgeW91ciBjaG9vc2luZyB0byBmb2xsb3cgYQorbGF0ZXIgdmVyc2lvbi4KKworICAxNS4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4KKworICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCitBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUCitIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZCitPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1RIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNCitJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YKK0FMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCisKKyAgSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTCitUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkKK0dFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRQorVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRgorREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQKK1BBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpLAorRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0VTLgorCisgIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCisKKyAgSWYgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHByb3ZpZGVkCithYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKK3Jldmlld2luZyBjb3VydHMgc2hhbGwgYXBwbHkgbG9jYWwgbGF3IHRoYXQgbW9zdCBjbG9zZWx5IGFwcHJveGltYXRlcworYW4gYWJzb2x1dGUgd2FpdmVyIG9mIGFsbCBjaXZpbCBsaWFiaWxpdHkgaW4gY29ubmVjdGlvbiB3aXRoIHRoZQorUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQorY29weSBvZiB0aGUgUHJvZ3JhbSBpbiByZXR1cm4gZm9yIGEgZmVlLgorCisgICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgICAgICAgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK3N0YXRlIHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworICBJZiB0aGUgcHJvZ3JhbSBkb2VzIHRlcm1pbmFsIGludGVyYWN0aW9uLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0Citub3RpY2UgbGlrZSB0aGlzIHdoZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICA8cHJvZ3JhbT4gIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisgICAgVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB5b3VyIHByb2dyYW0ncyBjb21tYW5kcworbWlnaHQgYmUgZGlmZmVyZW50OyBmb3IgYSBHVUkgaW50ZXJmYWNlLCB5b3Ugd291bGQgdXNlIGFuICJhYm91dCBib3giLgorCisgIFlvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciBzY2hvb2wsCitpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYgbmVjZXNzYXJ5LgorRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtCitpbnRvIHByb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UKK21heSBjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aAordGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4gIEJ1dCBmaXJzdCwgcGxlYXNlIHJlYWQKKzxodHRwOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS93aHktbm90LWxncGwuaHRtbD4uCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL0lOU1RBTEwgYi9zaGFyZS9hdXRvbWFrZS0xLjExL0lOU1RBTEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QxYzMyMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvSU5TVEFMTApAQCAtMCwwICsxLDM2NSBAQAorSW5zdGFsbGF0aW9uIEluc3RydWN0aW9ucworKioqKioqKioqKioqKioqKioqKioqKioqKgorCitDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDQsIDIwMDUsCisyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorYXJlIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0Citub3RpY2UgYW5kIHRoaXMgbm90aWNlIGFyZSBwcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgb2ZmZXJlZCBhcy1pcywKK3dpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQuCisKK0Jhc2ljIEluc3RhbGxhdGlvbgorPT09PT09PT09PT09PT09PT09CisKKyAgIEJyaWVmbHksIHRoZSBzaGVsbCBjb21tYW5kcyBgLi9jb25maWd1cmU7IG1ha2U7IG1ha2UgaW5zdGFsbCcgc2hvdWxkCitjb25maWd1cmUsIGJ1aWxkLCBhbmQgaW5zdGFsbCB0aGlzIHBhY2thZ2UuICBUaGUgZm9sbG93aW5nCittb3JlLWRldGFpbGVkIGluc3RydWN0aW9ucyBhcmUgZ2VuZXJpYzsgc2VlIHRoZSBgUkVBRE1FJyBmaWxlIGZvcgoraW5zdHJ1Y3Rpb25zIHNwZWNpZmljIHRvIHRoaXMgcGFja2FnZS4gIFNvbWUgcGFja2FnZXMgcHJvdmlkZSB0aGlzCitgSU5TVEFMTCcgZmlsZSBidXQgZG8gbm90IGltcGxlbWVudCBhbGwgb2YgdGhlIGZlYXR1cmVzIGRvY3VtZW50ZWQKK2JlbG93LiAgVGhlIGxhY2sgb2YgYW4gb3B0aW9uYWwgZmVhdHVyZSBpbiBhIGdpdmVuIHBhY2thZ2UgaXMgbm90CituZWNlc3NhcmlseSBhIGJ1Zy4gIE1vcmUgcmVjb21tZW5kYXRpb25zIGZvciBHTlUgcGFja2FnZXMgY2FuIGJlIGZvdW5kCitpbiAqbm90ZSBNYWtlZmlsZSBDb252ZW50aW9uczogKHN0YW5kYXJkcylNYWtlZmlsZSBDb252ZW50aW9ucy4KKworICAgVGhlIGBjb25maWd1cmUnIHNoZWxsIHNjcmlwdCBhdHRlbXB0cyB0byBndWVzcyBjb3JyZWN0IHZhbHVlcyBmb3IKK3ZhcmlvdXMgc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgdXNlZCBkdXJpbmcgY29tcGlsYXRpb24uICBJdCB1c2VzCit0aG9zZSB2YWx1ZXMgdG8gY3JlYXRlIGEgYE1ha2VmaWxlJyBpbiBlYWNoIGRpcmVjdG9yeSBvZiB0aGUgcGFja2FnZS4KK0l0IG1heSBhbHNvIGNyZWF0ZSBvbmUgb3IgbW9yZSBgLmgnIGZpbGVzIGNvbnRhaW5pbmcgc3lzdGVtLWRlcGVuZGVudAorZGVmaW5pdGlvbnMuICBGaW5hbGx5LCBpdCBjcmVhdGVzIGEgc2hlbGwgc2NyaXB0IGBjb25maWcuc3RhdHVzJyB0aGF0Cit5b3UgY2FuIHJ1biBpbiB0aGUgZnV0dXJlIHRvIHJlY3JlYXRlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIGFuZCBhCitmaWxlIGBjb25maWcubG9nJyBjb250YWluaW5nIGNvbXBpbGVyIG91dHB1dCAodXNlZnVsIG1haW5seSBmb3IKK2RlYnVnZ2luZyBgY29uZmlndXJlJykuCisKKyAgIEl0IGNhbiBhbHNvIHVzZSBhbiBvcHRpb25hbCBmaWxlICh0eXBpY2FsbHkgY2FsbGVkIGBjb25maWcuY2FjaGUnCithbmQgZW5hYmxlZCB3aXRoIGAtLWNhY2hlLWZpbGU9Y29uZmlnLmNhY2hlJyBvciBzaW1wbHkgYC1DJykgdGhhdCBzYXZlcwordGhlIHJlc3VsdHMgb2YgaXRzIHRlc3RzIHRvIHNwZWVkIHVwIHJlY29uZmlndXJpbmcuICBDYWNoaW5nIGlzCitkaXNhYmxlZCBieSBkZWZhdWx0IHRvIHByZXZlbnQgcHJvYmxlbXMgd2l0aCBhY2NpZGVudGFsIHVzZSBvZiBzdGFsZQorY2FjaGUgZmlsZXMuCisKKyAgIElmIHlvdSBuZWVkIHRvIGRvIHVudXN1YWwgdGhpbmdzIHRvIGNvbXBpbGUgdGhlIHBhY2thZ2UsIHBsZWFzZSB0cnkKK3RvIGZpZ3VyZSBvdXQgaG93IGBjb25maWd1cmUnIGNvdWxkIGNoZWNrIHdoZXRoZXIgdG8gZG8gdGhlbSwgYW5kIG1haWwKK2RpZmZzIG9yIGluc3RydWN0aW9ucyB0byB0aGUgYWRkcmVzcyBnaXZlbiBpbiB0aGUgYFJFQURNRScgc28gdGhleSBjYW4KK2JlIGNvbnNpZGVyZWQgZm9yIHRoZSBuZXh0IHJlbGVhc2UuICBJZiB5b3UgYXJlIHVzaW5nIHRoZSBjYWNoZSwgYW5kIGF0Citzb21lIHBvaW50IGBjb25maWcuY2FjaGUnIGNvbnRhaW5zIHJlc3VsdHMgeW91IGRvbid0IHdhbnQgdG8ga2VlcCwgeW91CittYXkgcmVtb3ZlIG9yIGVkaXQgaXQuCisKKyAgIFRoZSBmaWxlIGBjb25maWd1cmUuYWMnIChvciBgY29uZmlndXJlLmluJykgaXMgdXNlZCB0byBjcmVhdGUKK2Bjb25maWd1cmUnIGJ5IGEgcHJvZ3JhbSBjYWxsZWQgYGF1dG9jb25mJy4gIFlvdSBuZWVkIGBjb25maWd1cmUuYWMnIGlmCit5b3Ugd2FudCB0byBjaGFuZ2UgaXQgb3IgcmVnZW5lcmF0ZSBgY29uZmlndXJlJyB1c2luZyBhIG5ld2VyIHZlcnNpb24KK29mIGBhdXRvY29uZicuCisKKyAgIFRoZSBzaW1wbGVzdCB3YXkgdG8gY29tcGlsZSB0aGlzIHBhY2thZ2UgaXM6CisKKyAgMS4gYGNkJyB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHBhY2thZ2UncyBzb3VyY2UgY29kZSBhbmQgdHlwZQorICAgICBgLi9jb25maWd1cmUnIHRvIGNvbmZpZ3VyZSB0aGUgcGFja2FnZSBmb3IgeW91ciBzeXN0ZW0uCisKKyAgICAgUnVubmluZyBgY29uZmlndXJlJyBtaWdodCB0YWtlIGEgd2hpbGUuICBXaGlsZSBydW5uaW5nLCBpdCBwcmludHMKKyAgICAgc29tZSBtZXNzYWdlcyB0ZWxsaW5nIHdoaWNoIGZlYXR1cmVzIGl0IGlzIGNoZWNraW5nIGZvci4KKworICAyLiBUeXBlIGBtYWtlJyB0byBjb21waWxlIHRoZSBwYWNrYWdlLgorCisgIDMuIE9wdGlvbmFsbHksIHR5cGUgYG1ha2UgY2hlY2snIHRvIHJ1biBhbnkgc2VsZi10ZXN0cyB0aGF0IGNvbWUgd2l0aAorICAgICB0aGUgcGFja2FnZSwgZ2VuZXJhbGx5IHVzaW5nIHRoZSBqdXN0LWJ1aWx0IHVuaW5zdGFsbGVkIGJpbmFyaWVzLgorCisgIDQuIFR5cGUgYG1ha2UgaW5zdGFsbCcgdG8gaW5zdGFsbCB0aGUgcHJvZ3JhbXMgYW5kIGFueSBkYXRhIGZpbGVzIGFuZAorICAgICBkb2N1bWVudGF0aW9uLiAgV2hlbiBpbnN0YWxsaW5nIGludG8gYSBwcmVmaXggb3duZWQgYnkgcm9vdCwgaXQgaXMKKyAgICAgcmVjb21tZW5kZWQgdGhhdCB0aGUgcGFja2FnZSBiZSBjb25maWd1cmVkIGFuZCBidWlsdCBhcyBhIHJlZ3VsYXIKKyAgICAgdXNlciwgYW5kIG9ubHkgdGhlIGBtYWtlIGluc3RhbGwnIHBoYXNlIGV4ZWN1dGVkIHdpdGggcm9vdAorICAgICBwcml2aWxlZ2VzLgorCisgIDUuIE9wdGlvbmFsbHksIHR5cGUgYG1ha2UgaW5zdGFsbGNoZWNrJyB0byByZXBlYXQgYW55IHNlbGYtdGVzdHMsIGJ1dAorICAgICB0aGlzIHRpbWUgdXNpbmcgdGhlIGJpbmFyaWVzIGluIHRoZWlyIGZpbmFsIGluc3RhbGxlZCBsb2NhdGlvbi4KKyAgICAgVGhpcyB0YXJnZXQgZG9lcyBub3QgaW5zdGFsbCBhbnl0aGluZy4gIFJ1bm5pbmcgdGhpcyB0YXJnZXQgYXMgYQorICAgICByZWd1bGFyIHVzZXIsIHBhcnRpY3VsYXJseSBpZiB0aGUgcHJpb3IgYG1ha2UgaW5zdGFsbCcgcmVxdWlyZWQKKyAgICAgcm9vdCBwcml2aWxlZ2VzLCB2ZXJpZmllcyB0aGF0IHRoZSBpbnN0YWxsYXRpb24gY29tcGxldGVkCisgICAgIGNvcnJlY3RseS4KKworICA2LiBZb3UgY2FuIHJlbW92ZSB0aGUgcHJvZ3JhbSBiaW5hcmllcyBhbmQgb2JqZWN0IGZpbGVzIGZyb20gdGhlCisgICAgIHNvdXJjZSBjb2RlIGRpcmVjdG9yeSBieSB0eXBpbmcgYG1ha2UgY2xlYW4nLiAgVG8gYWxzbyByZW1vdmUgdGhlCisgICAgIGZpbGVzIHRoYXQgYGNvbmZpZ3VyZScgY3JlYXRlZCAoc28geW91IGNhbiBjb21waWxlIHRoZSBwYWNrYWdlIGZvcgorICAgICBhIGRpZmZlcmVudCBraW5kIG9mIGNvbXB1dGVyKSwgdHlwZSBgbWFrZSBkaXN0Y2xlYW4nLiAgVGhlcmUgaXMKKyAgICAgYWxzbyBhIGBtYWtlIG1haW50YWluZXItY2xlYW4nIHRhcmdldCwgYnV0IHRoYXQgaXMgaW50ZW5kZWQgbWFpbmx5CisgICAgIGZvciB0aGUgcGFja2FnZSdzIGRldmVsb3BlcnMuICBJZiB5b3UgdXNlIGl0LCB5b3UgbWF5IGhhdmUgdG8gZ2V0CisgICAgIGFsbCBzb3J0cyBvZiBvdGhlciBwcm9ncmFtcyBpbiBvcmRlciB0byByZWdlbmVyYXRlIGZpbGVzIHRoYXQgY2FtZQorICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgNy4gT2Z0ZW4sIHlvdSBjYW4gYWxzbyB0eXBlIGBtYWtlIHVuaW5zdGFsbCcgdG8gcmVtb3ZlIHRoZSBpbnN0YWxsZWQKKyAgICAgZmlsZXMgYWdhaW4uICBJbiBwcmFjdGljZSwgbm90IGFsbCBwYWNrYWdlcyBoYXZlIHRlc3RlZCB0aGF0CisgICAgIHVuaW5zdGFsbGF0aW9uIHdvcmtzIGNvcnJlY3RseSwgZXZlbiB0aG91Z2ggaXQgaXMgcmVxdWlyZWQgYnkgdGhlCisgICAgIEdOVSBDb2RpbmcgU3RhbmRhcmRzLgorCisgIDguIFNvbWUgcGFja2FnZXMsIHBhcnRpY3VsYXJseSB0aG9zZSB0aGF0IHVzZSBBdXRvbWFrZSwgcHJvdmlkZSBgbWFrZQorICAgICBkaXN0Y2hlY2snLCB3aGljaCBjYW4gYnkgdXNlZCBieSBkZXZlbG9wZXJzIHRvIHRlc3QgdGhhdCBhbGwgb3RoZXIKKyAgICAgdGFyZ2V0cyBsaWtlIGBtYWtlIGluc3RhbGwnIGFuZCBgbWFrZSB1bmluc3RhbGwnIHdvcmsgY29ycmVjdGx5LgorICAgICBUaGlzIHRhcmdldCBpcyBnZW5lcmFsbHkgbm90IHJ1biBieSBlbmQgdXNlcnMuCisKK0NvbXBpbGVycyBhbmQgT3B0aW9ucworPT09PT09PT09PT09PT09PT09PT09CisKKyAgIFNvbWUgc3lzdGVtcyByZXF1aXJlIHVudXN1YWwgb3B0aW9ucyBmb3IgY29tcGlsYXRpb24gb3IgbGlua2luZyB0aGF0Cit0aGUgYGNvbmZpZ3VyZScgc2NyaXB0IGRvZXMgbm90IGtub3cgYWJvdXQuICBSdW4gYC4vY29uZmlndXJlIC0taGVscCcKK2ZvciBkZXRhaWxzIG9uIHNvbWUgb2YgdGhlIHBlcnRpbmVudCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisKKyAgIFlvdSBjYW4gZ2l2ZSBgY29uZmlndXJlJyBpbml0aWFsIHZhbHVlcyBmb3IgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCitieSBzZXR0aW5nIHZhcmlhYmxlcyBpbiB0aGUgY29tbWFuZCBsaW5lIG9yIGluIHRoZSBlbnZpcm9ubWVudC4gIEhlcmUKK2lzIGFuIGV4YW1wbGU6CisKKyAgICAgLi9jb25maWd1cmUgQ0M9Yzk5IENGTEFHUz0tZyBMSUJTPS1scG9zaXgKKworICAgKk5vdGUgRGVmaW5pbmcgVmFyaWFibGVzOjosIGZvciBtb3JlIGRldGFpbHMuCisKK0NvbXBpbGluZyBGb3IgTXVsdGlwbGUgQXJjaGl0ZWN0dXJlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgIFlvdSBjYW4gY29tcGlsZSB0aGUgcGFja2FnZSBmb3IgbW9yZSB0aGFuIG9uZSBraW5kIG9mIGNvbXB1dGVyIGF0IHRoZQorc2FtZSB0aW1lLCBieSBwbGFjaW5nIHRoZSBvYmplY3QgZmlsZXMgZm9yIGVhY2ggYXJjaGl0ZWN0dXJlIGluIHRoZWlyCitvd24gZGlyZWN0b3J5LiAgVG8gZG8gdGhpcywgeW91IGNhbiB1c2UgR05VIGBtYWtlJy4gIGBjZCcgdG8gdGhlCitkaXJlY3Rvcnkgd2hlcmUgeW91IHdhbnQgdGhlIG9iamVjdCBmaWxlcyBhbmQgZXhlY3V0YWJsZXMgdG8gZ28gYW5kIHJ1bgordGhlIGBjb25maWd1cmUnIHNjcmlwdC4gIGBjb25maWd1cmUnIGF1dG9tYXRpY2FsbHkgY2hlY2tzIGZvciB0aGUKK3NvdXJjZSBjb2RlIGluIHRoZSBkaXJlY3RvcnkgdGhhdCBgY29uZmlndXJlJyBpcyBpbiBhbmQgaW4gYC4uJy4gIFRoaXMKK2lzIGtub3duIGFzIGEgIlZQQVRIIiBidWlsZC4KKworICAgV2l0aCBhIG5vbi1HTlUgYG1ha2UnLCBpdCBpcyBzYWZlciB0byBjb21waWxlIHRoZSBwYWNrYWdlIGZvciBvbmUKK2FyY2hpdGVjdHVyZSBhdCBhIHRpbWUgaW4gdGhlIHNvdXJjZSBjb2RlIGRpcmVjdG9yeS4gIEFmdGVyIHlvdSBoYXZlCitpbnN0YWxsZWQgdGhlIHBhY2thZ2UgZm9yIG9uZSBhcmNoaXRlY3R1cmUsIHVzZSBgbWFrZSBkaXN0Y2xlYW4nIGJlZm9yZQorcmVjb25maWd1cmluZyBmb3IgYW5vdGhlciBhcmNoaXRlY3R1cmUuCisKKyAgIE9uIE1hY09TIFggMTAuNSBhbmQgbGF0ZXIgc3lzdGVtcywgeW91IGNhbiBjcmVhdGUgbGlicmFyaWVzIGFuZAorZXhlY3V0YWJsZXMgdGhhdCB3b3JrIG9uIG11bHRpcGxlIHN5c3RlbSB0eXBlcy0ta25vd24gYXMgImZhdCIgb3IKKyJ1bml2ZXJzYWwiIGJpbmFyaWVzLS1ieSBzcGVjaWZ5aW5nIG11bHRpcGxlIGAtYXJjaCcgb3B0aW9ucyB0byB0aGUKK2NvbXBpbGVyIGJ1dCBvbmx5IGEgc2luZ2xlIGAtYXJjaCcgb3B0aW9uIHRvIHRoZSBwcmVwcm9jZXNzb3IuICBMaWtlCit0aGlzOgorCisgICAgIC4vY29uZmlndXJlIENDPSJnY2MgLWFyY2ggaTM4NiAtYXJjaCB4ODZfNjQgLWFyY2ggcHBjIC1hcmNoIHBwYzY0IiBcCisgICAgICAgICAgICAgICAgIENYWD0iZysrIC1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IC1hcmNoIHBwYyAtYXJjaCBwcGM2NCIgXAorICAgICAgICAgICAgICAgICBDUFA9ImdjYyAtRSIgQ1hYQ1BQPSJnKysgLUUiCisKKyAgIFRoaXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gcHJvZHVjZSB3b3JraW5nIG91dHB1dCBpbiBhbGwgY2FzZXMsIHlvdQorbWF5IGhhdmUgdG8gYnVpbGQgb25lIGFyY2hpdGVjdHVyZSBhdCBhIHRpbWUgYW5kIGNvbWJpbmUgdGhlIHJlc3VsdHMKK3VzaW5nIHRoZSBgbGlwbycgdG9vbCBpZiB5b3UgaGF2ZSBwcm9ibGVtcy4KKworSW5zdGFsbGF0aW9uIE5hbWVzCis9PT09PT09PT09PT09PT09PT0KKworICAgQnkgZGVmYXVsdCwgYG1ha2UgaW5zdGFsbCcgaW5zdGFsbHMgdGhlIHBhY2thZ2UncyBjb21tYW5kcyB1bmRlcgorYC91c3IvbG9jYWwvYmluJywgaW5jbHVkZSBmaWxlcyB1bmRlciBgL3Vzci9sb2NhbC9pbmNsdWRlJywgZXRjLiAgWW91CitjYW4gc3BlY2lmeSBhbiBpbnN0YWxsYXRpb24gcHJlZml4IG90aGVyIHRoYW4gYC91c3IvbG9jYWwnIGJ5IGdpdmluZworYGNvbmZpZ3VyZScgdGhlIG9wdGlvbiBgLS1wcmVmaXg9UFJFRklYJywgd2hlcmUgUFJFRklYIG11c3QgYmUgYW4KK2Fic29sdXRlIGZpbGUgbmFtZS4KKworICAgWW91IGNhbiBzcGVjaWZ5IHNlcGFyYXRlIGluc3RhbGxhdGlvbiBwcmVmaXhlcyBmb3IKK2FyY2hpdGVjdHVyZS1zcGVjaWZpYyBmaWxlcyBhbmQgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzLiAgSWYgeW91CitwYXNzIHRoZSBvcHRpb24gYC0tZXhlYy1wcmVmaXg9UFJFRklYJyB0byBgY29uZmlndXJlJywgdGhlIHBhY2thZ2UgdXNlcworUFJFRklYIGFzIHRoZSBwcmVmaXggZm9yIGluc3RhbGxpbmcgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcy4KK0RvY3VtZW50YXRpb24gYW5kIG90aGVyIGRhdGEgZmlsZXMgc3RpbGwgdXNlIHRoZSByZWd1bGFyIHByZWZpeC4KKworICAgSW4gYWRkaXRpb24sIGlmIHlvdSB1c2UgYW4gdW51c3VhbCBkaXJlY3RvcnkgbGF5b3V0IHlvdSBjYW4gZ2l2ZQorb3B0aW9ucyBsaWtlIGAtLWJpbmRpcj1ESVInIHRvIHNwZWNpZnkgZGlmZmVyZW50IHZhbHVlcyBmb3IgcGFydGljdWxhcgora2luZHMgb2YgZmlsZXMuICBSdW4gYGNvbmZpZ3VyZSAtLWhlbHAnIGZvciBhIGxpc3Qgb2YgdGhlIGRpcmVjdG9yaWVzCit5b3UgY2FuIHNldCBhbmQgd2hhdCBraW5kcyBvZiBmaWxlcyBnbyBpbiB0aGVtLiAgSW4gZ2VuZXJhbCwgdGhlCitkZWZhdWx0IGZvciB0aGVzZSBvcHRpb25zIGlzIGV4cHJlc3NlZCBpbiB0ZXJtcyBvZiBgJHtwcmVmaXh9Jywgc28gdGhhdAorc3BlY2lmeWluZyBqdXN0IGAtLXByZWZpeCcgd2lsbCBhZmZlY3QgYWxsIG9mIHRoZSBvdGhlciBkaXJlY3RvcnkKK3NwZWNpZmljYXRpb25zIHRoYXQgd2VyZSBub3QgZXhwbGljaXRseSBwcm92aWRlZC4KKworICAgVGhlIG1vc3QgcG9ydGFibGUgd2F5IHRvIGFmZmVjdCBpbnN0YWxsYXRpb24gbG9jYXRpb25zIGlzIHRvIHBhc3MgdGhlCitjb3JyZWN0IGxvY2F0aW9ucyB0byBgY29uZmlndXJlJzsgaG93ZXZlciwgbWFueSBwYWNrYWdlcyBwcm92aWRlIG9uZSBvcgorYm90aCBvZiB0aGUgZm9sbG93aW5nIHNob3J0Y3V0cyBvZiBwYXNzaW5nIHZhcmlhYmxlIGFzc2lnbm1lbnRzIHRvIHRoZQorYG1ha2UgaW5zdGFsbCcgY29tbWFuZCBsaW5lIHRvIGNoYW5nZSBpbnN0YWxsYXRpb24gbG9jYXRpb25zIHdpdGhvdXQKK2hhdmluZyB0byByZWNvbmZpZ3VyZSBvciByZWNvbXBpbGUuCisKKyAgIFRoZSBmaXJzdCBtZXRob2QgaW52b2x2ZXMgcHJvdmlkaW5nIGFuIG92ZXJyaWRlIHZhcmlhYmxlIGZvciBlYWNoCithZmZlY3RlZCBkaXJlY3RvcnkuICBGb3IgZXhhbXBsZSwgYG1ha2UgaW5zdGFsbAorcHJlZml4PS9hbHRlcm5hdGUvZGlyZWN0b3J5JyB3aWxsIGNob29zZSBhbiBhbHRlcm5hdGUgbG9jYXRpb24gZm9yIGFsbAorZGlyZWN0b3J5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHRoYXQgd2VyZSBleHByZXNzZWQgaW4gdGVybXMgb2YKK2Ake3ByZWZpeH0nLiAgQW55IGRpcmVjdG9yaWVzIHRoYXQgd2VyZSBzcGVjaWZpZWQgZHVyaW5nIGBjb25maWd1cmUnLAorYnV0IG5vdCBpbiB0ZXJtcyBvZiBgJHtwcmVmaXh9JywgbXVzdCBlYWNoIGJlIG92ZXJyaWRkZW4gYXQgaW5zdGFsbAordGltZSBmb3IgdGhlIGVudGlyZSBpbnN0YWxsYXRpb24gdG8gYmUgcmVsb2NhdGVkLiAgVGhlIGFwcHJvYWNoIG9mCittYWtlZmlsZSB2YXJpYWJsZSBvdmVycmlkZXMgZm9yIGVhY2ggZGlyZWN0b3J5IHZhcmlhYmxlIGlzIHJlcXVpcmVkIGJ5Cit0aGUgR05VIENvZGluZyBTdGFuZGFyZHMsIGFuZCBpZGVhbGx5IGNhdXNlcyBubyByZWNvbXBpbGF0aW9uLgorSG93ZXZlciwgc29tZSBwbGF0Zm9ybXMgaGF2ZSBrbm93biBsaW1pdGF0aW9ucyB3aXRoIHRoZSBzZW1hbnRpY3Mgb2YKK3NoYXJlZCBsaWJyYXJpZXMgdGhhdCBlbmQgdXAgcmVxdWlyaW5nIHJlY29tcGlsYXRpb24gd2hlbiB1c2luZyB0aGlzCittZXRob2QsIHBhcnRpY3VsYXJseSBub3RpY2VhYmxlIGluIHBhY2thZ2VzIHRoYXQgdXNlIEdOVSBMaWJ0b29sLgorCisgICBUaGUgc2Vjb25kIG1ldGhvZCBpbnZvbHZlcyBwcm92aWRpbmcgdGhlIGBERVNURElSJyB2YXJpYWJsZS4gIEZvcgorZXhhbXBsZSwgYG1ha2UgaW5zdGFsbCBERVNURElSPS9hbHRlcm5hdGUvZGlyZWN0b3J5JyB3aWxsIHByZXBlbmQKK2AvYWx0ZXJuYXRlL2RpcmVjdG9yeScgYmVmb3JlIGFsbCBpbnN0YWxsYXRpb24gbmFtZXMuICBUaGUgYXBwcm9hY2ggb2YKK2BERVNURElSJyBvdmVycmlkZXMgaXMgbm90IHJlcXVpcmVkIGJ5IHRoZSBHTlUgQ29kaW5nIFN0YW5kYXJkcywgYW5kCitkb2VzIG5vdCB3b3JrIG9uIHBsYXRmb3JtcyB0aGF0IGhhdmUgZHJpdmUgbGV0dGVycy4gIE9uIHRoZSBvdGhlciBoYW5kLAoraXQgZG9lcyBiZXR0ZXIgYXQgYXZvaWRpbmcgcmVjb21waWxhdGlvbiBpc3N1ZXMsIGFuZCB3b3JrcyB3ZWxsIGV2ZW4KK3doZW4gc29tZSBkaXJlY3Rvcnkgb3B0aW9ucyB3ZXJlIG5vdCBzcGVjaWZpZWQgaW4gdGVybXMgb2YgYCR7cHJlZml4fScKK2F0IGBjb25maWd1cmUnIHRpbWUuCisKK09wdGlvbmFsIEZlYXR1cmVzCis9PT09PT09PT09PT09PT09PQorCisgICBJZiB0aGUgcGFja2FnZSBzdXBwb3J0cyBpdCwgeW91IGNhbiBjYXVzZSBwcm9ncmFtcyB0byBiZSBpbnN0YWxsZWQKK3dpdGggYW4gZXh0cmEgcHJlZml4IG9yIHN1ZmZpeCBvbiB0aGVpciBuYW1lcyBieSBnaXZpbmcgYGNvbmZpZ3VyZScgdGhlCitvcHRpb24gYC0tcHJvZ3JhbS1wcmVmaXg9UFJFRklYJyBvciBgLS1wcm9ncmFtLXN1ZmZpeD1TVUZGSVgnLgorCisgICBTb21lIHBhY2thZ2VzIHBheSBhdHRlbnRpb24gdG8gYC0tZW5hYmxlLUZFQVRVUkUnIG9wdGlvbnMgdG8KK2Bjb25maWd1cmUnLCB3aGVyZSBGRUFUVVJFIGluZGljYXRlcyBhbiBvcHRpb25hbCBwYXJ0IG9mIHRoZSBwYWNrYWdlLgorVGhleSBtYXkgYWxzbyBwYXkgYXR0ZW50aW9uIHRvIGAtLXdpdGgtUEFDS0FHRScgb3B0aW9ucywgd2hlcmUgUEFDS0FHRQoraXMgc29tZXRoaW5nIGxpa2UgYGdudS1hcycgb3IgYHgnIChmb3IgdGhlIFggV2luZG93IFN5c3RlbSkuICBUaGUKK2BSRUFETUUnIHNob3VsZCBtZW50aW9uIGFueSBgLS1lbmFibGUtJyBhbmQgYC0td2l0aC0nIG9wdGlvbnMgdGhhdCB0aGUKK3BhY2thZ2UgcmVjb2duaXplcy4KKworICAgRm9yIHBhY2thZ2VzIHRoYXQgdXNlIHRoZSBYIFdpbmRvdyBTeXN0ZW0sIGBjb25maWd1cmUnIGNhbiB1c3VhbGx5CitmaW5kIHRoZSBYIGluY2x1ZGUgYW5kIGxpYnJhcnkgZmlsZXMgYXV0b21hdGljYWxseSwgYnV0IGlmIGl0IGRvZXNuJ3QsCit5b3UgY2FuIHVzZSB0aGUgYGNvbmZpZ3VyZScgb3B0aW9ucyBgLS14LWluY2x1ZGVzPURJUicgYW5kCitgLS14LWxpYnJhcmllcz1ESVInIHRvIHNwZWNpZnkgdGhlaXIgbG9jYXRpb25zLgorCisgICBTb21lIHBhY2thZ2VzIG9mZmVyIHRoZSBhYmlsaXR5IHRvIGNvbmZpZ3VyZSBob3cgdmVyYm9zZSB0aGUKK2V4ZWN1dGlvbiBvZiBgbWFrZScgd2lsbCBiZS4gIEZvciB0aGVzZSBwYWNrYWdlcywgcnVubmluZyBgLi9jb25maWd1cmUKKy0tZW5hYmxlLXNpbGVudC1ydWxlcycgc2V0cyB0aGUgZGVmYXVsdCB0byBtaW5pbWFsIG91dHB1dCwgd2hpY2ggY2FuIGJlCitvdmVycmlkZGVuIHdpdGggYG1ha2UgVj0xJzsgd2hpbGUgcnVubmluZyBgLi9jb25maWd1cmUKKy0tZGlzYWJsZS1zaWxlbnQtcnVsZXMnIHNldHMgdGhlIGRlZmF1bHQgdG8gdmVyYm9zZSwgd2hpY2ggY2FuIGJlCitvdmVycmlkZGVuIHdpdGggYG1ha2UgVj0wJy4KKworUGFydGljdWxhciBzeXN0ZW1zCis9PT09PT09PT09PT09PT09PT0KKworICAgT24gSFAtVVgsIHRoZSBkZWZhdWx0IEMgY29tcGlsZXIgaXMgbm90IEFOU0kgQyBjb21wYXRpYmxlLiAgSWYgR05VCitDQyBpcyBub3QgaW5zdGFsbGVkLCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGZvbGxvd2luZyBvcHRpb25zIGluCitvcmRlciB0byB1c2UgYW4gQU5TSSBDIGNvbXBpbGVyOgorCisgICAgIC4vY29uZmlndXJlIENDPSJjYyAtQWUgLURfWE9QRU5fU09VUkNFPTUwMCIKKworYW5kIGlmIHRoYXQgZG9lc24ndCB3b3JrLCBpbnN0YWxsIHByZS1idWlsdCBiaW5hcmllcyBvZiBHQ0MgZm9yIEhQLVVYLgorCisgICBPbiBPU0YvMSBhLmsuYS4gVHJ1NjQsIHNvbWUgdmVyc2lvbnMgb2YgdGhlIGRlZmF1bHQgQyBjb21waWxlciBjYW5ub3QKK3BhcnNlIGl0cyBgPHdjaGFyLmg+JyBoZWFkZXIgZmlsZS4gIFRoZSBvcHRpb24gYC1ub2R0aycgY2FuIGJlIHVzZWQgYXMKK2Egd29ya2Fyb3VuZC4gIElmIEdOVSBDQyBpcyBub3QgaW5zdGFsbGVkLCBpdCBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQKK3RvIHRyeQorCisgICAgIC4vY29uZmlndXJlIENDPSJjYyIKKworYW5kIGlmIHRoYXQgZG9lc24ndCB3b3JrLCB0cnkKKworICAgICAuL2NvbmZpZ3VyZSBDQz0iY2MgLW5vZHRrIgorCisgICBPbiBTb2xhcmlzLCBkb24ndCBwdXQgYC91c3IvdWNiJyBlYXJseSBpbiB5b3VyIGBQQVRIJy4gIFRoaXMKK2RpcmVjdG9yeSBjb250YWlucyBzZXZlcmFsIGR5c2Z1bmN0aW9uYWwgcHJvZ3JhbXM7IHdvcmtpbmcgdmFyaWFudHMgb2YKK3RoZXNlIHByb2dyYW1zIGFyZSBhdmFpbGFibGUgaW4gYC91c3IvYmluJy4gIFNvLCBpZiB5b3UgbmVlZCBgL3Vzci91Y2InCitpbiB5b3VyIGBQQVRIJywgcHV0IGl0IF9hZnRlcl8gYC91c3IvYmluJy4KKworICAgT24gSGFpa3UsIHNvZnR3YXJlIGluc3RhbGxlZCBmb3IgYWxsIHVzZXJzIGdvZXMgaW4gYC9ib290L2NvbW1vbicsCitub3QgYC91c3IvbG9jYWwnLiAgSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKworICAgICAuL2NvbmZpZ3VyZSAtLXByZWZpeD0vYm9vdC9jb21tb24KKworU3BlY2lmeWluZyB0aGUgU3lzdGVtIFR5cGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgIFRoZXJlIG1heSBiZSBzb21lIGZlYXR1cmVzIGBjb25maWd1cmUnIGNhbm5vdCBmaWd1cmUgb3V0CithdXRvbWF0aWNhbGx5LCBidXQgbmVlZHMgdG8gZGV0ZXJtaW5lIGJ5IHRoZSB0eXBlIG9mIG1hY2hpbmUgdGhlIHBhY2thZ2UKK3dpbGwgcnVuIG9uLiAgVXN1YWxseSwgYXNzdW1pbmcgdGhlIHBhY2thZ2UgaXMgYnVpbHQgdG8gYmUgcnVuIG9uIHRoZQorX3NhbWVfIGFyY2hpdGVjdHVyZXMsIGBjb25maWd1cmUnIGNhbiBmaWd1cmUgdGhhdCBvdXQsIGJ1dCBpZiBpdCBwcmludHMKK2EgbWVzc2FnZSBzYXlpbmcgaXQgY2Fubm90IGd1ZXNzIHRoZSBtYWNoaW5lIHR5cGUsIGdpdmUgaXQgdGhlCitgLS1idWlsZD1UWVBFJyBvcHRpb24uICBUWVBFIGNhbiBlaXRoZXIgYmUgYSBzaG9ydCBuYW1lIGZvciB0aGUgc3lzdGVtCit0eXBlLCBzdWNoIGFzIGBzdW40Jywgb3IgYSBjYW5vbmljYWwgbmFtZSB3aGljaCBoYXMgdGhlIGZvcm06CisKKyAgICAgQ1BVLUNPTVBBTlktU1lTVEVNCisKK3doZXJlIFNZU1RFTSBjYW4gaGF2ZSBvbmUgb2YgdGhlc2UgZm9ybXM6CisKKyAgICAgT1MKKyAgICAgS0VSTkVMLU9TCisKKyAgIFNlZSB0aGUgZmlsZSBgY29uZmlnLnN1YicgZm9yIHRoZSBwb3NzaWJsZSB2YWx1ZXMgb2YgZWFjaCBmaWVsZC4gIElmCitgY29uZmlnLnN1YicgaXNuJ3QgaW5jbHVkZWQgaW4gdGhpcyBwYWNrYWdlLCB0aGVuIHRoaXMgcGFja2FnZSBkb2Vzbid0CituZWVkIHRvIGtub3cgdGhlIG1hY2hpbmUgdHlwZS4KKworICAgSWYgeW91IGFyZSBfYnVpbGRpbmdfIGNvbXBpbGVyIHRvb2xzIGZvciBjcm9zcy1jb21waWxpbmcsIHlvdSBzaG91bGQKK3VzZSB0aGUgb3B0aW9uIGAtLXRhcmdldD1UWVBFJyB0byBzZWxlY3QgdGhlIHR5cGUgb2Ygc3lzdGVtIHRoZXkgd2lsbAorcHJvZHVjZSBjb2RlIGZvci4KKworICAgSWYgeW91IHdhbnQgdG8gX3VzZV8gYSBjcm9zcyBjb21waWxlciwgdGhhdCBnZW5lcmF0ZXMgY29kZSBmb3IgYQorcGxhdGZvcm0gZGlmZmVyZW50IGZyb20gdGhlIGJ1aWxkIHBsYXRmb3JtLCB5b3Ugc2hvdWxkIHNwZWNpZnkgdGhlCisiaG9zdCIgcGxhdGZvcm0gKGkuZS4sIHRoYXQgb24gd2hpY2ggdGhlIGdlbmVyYXRlZCBwcm9ncmFtcyB3aWxsCitldmVudHVhbGx5IGJlIHJ1bikgd2l0aCBgLS1ob3N0PVRZUEUnLgorCitTaGFyaW5nIERlZmF1bHRzCis9PT09PT09PT09PT09PT09CisKKyAgIElmIHlvdSB3YW50IHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgYGNvbmZpZ3VyZScgc2NyaXB0cyB0byBzaGFyZSwKK3lvdSBjYW4gY3JlYXRlIGEgc2l0ZSBzaGVsbCBzY3JpcHQgY2FsbGVkIGBjb25maWcuc2l0ZScgdGhhdCBnaXZlcworZGVmYXVsdCB2YWx1ZXMgZm9yIHZhcmlhYmxlcyBsaWtlIGBDQycsIGBjYWNoZV9maWxlJywgYW5kIGBwcmVmaXgnLgorYGNvbmZpZ3VyZScgbG9va3MgZm9yIGBQUkVGSVgvc2hhcmUvY29uZmlnLnNpdGUnIGlmIGl0IGV4aXN0cywgdGhlbgorYFBSRUZJWC9ldGMvY29uZmlnLnNpdGUnIGlmIGl0IGV4aXN0cy4gIE9yLCB5b3UgY2FuIHNldCB0aGUKK2BDT05GSUdfU0lURScgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBzaXRlIHNjcmlwdC4KK0Egd2FybmluZzogbm90IGFsbCBgY29uZmlndXJlJyBzY3JpcHRzIGxvb2sgZm9yIGEgc2l0ZSBzY3JpcHQuCisKK0RlZmluaW5nIFZhcmlhYmxlcworPT09PT09PT09PT09PT09PT09CisKKyAgIFZhcmlhYmxlcyBub3QgZGVmaW5lZCBpbiBhIHNpdGUgc2hlbGwgc2NyaXB0IGNhbiBiZSBzZXQgaW4gdGhlCitlbnZpcm9ubWVudCBwYXNzZWQgdG8gYGNvbmZpZ3VyZScuICBIb3dldmVyLCBzb21lIHBhY2thZ2VzIG1heSBydW4KK2NvbmZpZ3VyZSBhZ2FpbiBkdXJpbmcgdGhlIGJ1aWxkLCBhbmQgdGhlIGN1c3RvbWl6ZWQgdmFsdWVzIG9mIHRoZXNlCit2YXJpYWJsZXMgbWF5IGJlIGxvc3QuICBJbiBvcmRlciB0byBhdm9pZCB0aGlzIHByb2JsZW0sIHlvdSBzaG91bGQgc2V0Cit0aGVtIGluIHRoZSBgY29uZmlndXJlJyBjb21tYW5kIGxpbmUsIHVzaW5nIGBWQVI9dmFsdWUnLiAgRm9yIGV4YW1wbGU6CisKKyAgICAgLi9jb25maWd1cmUgQ0M9L3Vzci9sb2NhbDIvYmluL2djYworCitjYXVzZXMgdGhlIHNwZWNpZmllZCBgZ2NjJyB0byBiZSB1c2VkIGFzIHRoZSBDIGNvbXBpbGVyICh1bmxlc3MgaXQgaXMKK292ZXJyaWRkZW4gaW4gdGhlIHNpdGUgc2hlbGwgc2NyaXB0KS4KKworVW5mb3J0dW5hdGVseSwgdGhpcyB0ZWNobmlxdWUgZG9lcyBub3Qgd29yayBmb3IgYENPTkZJR19TSEVMTCcgZHVlIHRvCithbiBBdXRvY29uZiBidWcuICBVbnRpbCB0aGUgYnVnIGlzIGZpeGVkIHlvdSBjYW4gdXNlIHRoaXMgd29ya2Fyb3VuZDoKKworICAgICBDT05GSUdfU0hFTEw9L2Jpbi9iYXNoIC9iaW4vYmFzaCAuL2NvbmZpZ3VyZSBDT05GSUdfU0hFTEw9L2Jpbi9iYXNoCisKK2Bjb25maWd1cmUnIEludm9jYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT0KKworICAgYGNvbmZpZ3VyZScgcmVjb2duaXplcyB0aGUgZm9sbG93aW5nIG9wdGlvbnMgdG8gY29udHJvbCBob3cgaXQKK29wZXJhdGVzLgorCitgLS1oZWxwJworYC1oJworICAgICBQcmludCBhIHN1bW1hcnkgb2YgYWxsIG9mIHRoZSBvcHRpb25zIHRvIGBjb25maWd1cmUnLCBhbmQgZXhpdC4KKworYC0taGVscD1zaG9ydCcKK2AtLWhlbHA9cmVjdXJzaXZlJworICAgICBQcmludCBhIHN1bW1hcnkgb2YgdGhlIG9wdGlvbnMgdW5pcXVlIHRvIHRoaXMgcGFja2FnZSdzCisgICAgIGBjb25maWd1cmUnLCBhbmQgZXhpdC4gIFRoZSBgc2hvcnQnIHZhcmlhbnQgbGlzdHMgb3B0aW9ucyB1c2VkCisgICAgIG9ubHkgaW4gdGhlIHRvcCBsZXZlbCwgd2hpbGUgdGhlIGByZWN1cnNpdmUnIHZhcmlhbnQgbGlzdHMgb3B0aW9ucworICAgICBhbHNvIHByZXNlbnQgaW4gYW55IG5lc3RlZCBwYWNrYWdlcy4KKworYC0tdmVyc2lvbicKK2AtVicKKyAgICAgUHJpbnQgdGhlIHZlcnNpb24gb2YgQXV0b2NvbmYgdXNlZCB0byBnZW5lcmF0ZSB0aGUgYGNvbmZpZ3VyZScKKyAgICAgc2NyaXB0LCBhbmQgZXhpdC4KKworYC0tY2FjaGUtZmlsZT1GSUxFJworICAgICBFbmFibGUgdGhlIGNhY2hlOiB1c2UgYW5kIHNhdmUgdGhlIHJlc3VsdHMgb2YgdGhlIHRlc3RzIGluIEZJTEUsCisgICAgIHRyYWRpdGlvbmFsbHkgYGNvbmZpZy5jYWNoZScuICBGSUxFIGRlZmF1bHRzIHRvIGAvZGV2L251bGwnIHRvCisgICAgIGRpc2FibGUgY2FjaGluZy4KKworYC0tY29uZmlnLWNhY2hlJworYC1DJworICAgICBBbGlhcyBmb3IgYC0tY2FjaGUtZmlsZT1jb25maWcuY2FjaGUnLgorCitgLS1xdWlldCcKK2AtLXNpbGVudCcKK2AtcScKKyAgICAgRG8gbm90IHByaW50IG1lc3NhZ2VzIHNheWluZyB3aGljaCBjaGVja3MgYXJlIGJlaW5nIG1hZGUuICBUbworICAgICBzdXBwcmVzcyBhbGwgbm9ybWFsIG91dHB1dCwgcmVkaXJlY3QgaXQgdG8gYC9kZXYvbnVsbCcgKGFueSBlcnJvcgorICAgICBtZXNzYWdlcyB3aWxsIHN0aWxsIGJlIHNob3duKS4KKworYC0tc3JjZGlyPURJUicKKyAgICAgTG9vayBmb3IgdGhlIHBhY2thZ2UncyBzb3VyY2UgY29kZSBpbiBkaXJlY3RvcnkgRElSLiAgVXN1YWxseQorICAgICBgY29uZmlndXJlJyBjYW4gZGV0ZXJtaW5lIHRoYXQgZGlyZWN0b3J5IGF1dG9tYXRpY2FsbHkuCisKK2AtLXByZWZpeD1ESVInCisgICAgIFVzZSBESVIgYXMgdGhlIGluc3RhbGxhdGlvbiBwcmVmaXguICAqbm90ZSBJbnN0YWxsYXRpb24gTmFtZXM6OgorICAgICBmb3IgbW9yZSBkZXRhaWxzLCBpbmNsdWRpbmcgb3RoZXIgb3B0aW9ucyBhdmFpbGFibGUgZm9yIGZpbmUtdHVuaW5nCisgICAgIHRoZSBpbnN0YWxsYXRpb24gbG9jYXRpb25zLgorCitgLS1uby1jcmVhdGUnCitgLW4nCisgICAgIFJ1biB0aGUgY29uZmlndXJlIGNoZWNrcywgYnV0IHN0b3AgYmVmb3JlIGNyZWF0aW5nIGFueSBvdXRwdXQKKyAgICAgZmlsZXMuCisKK2Bjb25maWd1cmUnIGFsc28gYWNjZXB0cyBzb21lIG90aGVyLCBub3Qgd2lkZWx5IHVzZWZ1bCwgb3B0aW9ucy4gIFJ1bgorYGNvbmZpZ3VyZSAtLWhlbHAnIGZvciBtb3JlIGRldGFpbHMuCisKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9tYWtlLTEuMTEvYWNpbnN0YWxsIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hY2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmJkMGJhZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYWNpbnN0YWxsCkBAIC0wLDAgKzEsNTAgQEAKKyMhIC9iaW4vc2gKKworIyBJbnN0YWxsIGFuIGFjbG9jYWwtc3R5bGUgTTQgZmlsZS4gIEEgc2NyaXB0IGlzIG5lZWRlZCB0byBkbyB0aGlzCisjIGJlY2F1c2Ugd2Ugd2FudCB0byBkbyBzZXJpYWwtbnVtYmVyIGNoZWNraW5nOyBuZXdlciB2ZXJzaW9ucyBvZgorIyBtYWNybyBmaWxlcyBzaG91bGQgYWx3YXlzIGJlIHByZWZlcnJlZC4KKworIyBVc2FnZToKKyMgIGFjaW5zdGFsbCBmaWxlIGRpcmVjdG9yeSBpbnN0YWxscHJvZ3JhbSBbaW5zdGFsbC1hcmdzXS4uLgorCisjIENvcHlyaWdodCAxOTk2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworZmlsZT0iJDEiCitkaXI9IiQyIgorc2hpZnQKK3NoaWZ0CisKK2xvY2Fsc2VyaWFsPWBncmVwICdeIyBzZXJpYWwgJyAkZmlsZSB8IHNlZCAtZSAncy9eIyBzZXJpYWwgXChbMC05XVswLTldKlwpLiokL1wxLzsgcSdgCitpZiB0ZXN0IC16ICIkbG9jYWxzZXJpYWwiOyB0aGVuCisgICBlY2hvICJhY2luc3RhbGw6IG5vIHNlcmlhbCBudW1iZXIgaW4gJGZpbGUiIDE+JjIKKyAgIGV4aXQgMQorZmkKKworIyBNYXliZSBpZiB0aGUgaW5zdGFsbGVkIGZpbGUgaGFzIG5vIHNlcmlhbCBudW1iZXIgd2Ugc2hvdWxkIGp1c3QKKyMgYXNzdW1lIGl0IGlzIGFuY2llbnQuCitpbnN0c2VyaWFsPWBncmVwICdeIyBzZXJpYWwgJyAkZGlyLyRmaWxlIHwgc2VkIC1lICdzL14jIHNlcmlhbCBcKFswLTldWzAtOV0qXCkuKiQvXDEvOyBxJ2AKK2lmIHRlc3QgLXogIiRpbnN0c2VyaWFsIjsgdGhlbgorICAgZWNobyAiYWNpbnN0YWxsOiBubyBzZXJpYWwgbnVtYmVyIGluICRkaXIvJGZpbGUiIDE+JjIKKyAgIGV4aXQgMQorZmkKKworaWYgdGVzdCAkbG9jYWxzZXJpYWwgLWx0ICRpbnN0c2VyaWFsOyB0aGVuCisgICAjIEluc3RhbGxlZCBmaWxlIGlzIG5ld2VyLgorICAgZXhpdCAwCitmaQorCisjIEluc3RhbGwgdGhlIGZpbGUuCiskKiAkZmlsZSAkZGlyLyRmaWxlCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2Fuc2kya25yLmFtIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9hbnNpMmtuci5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGUxOTkwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9hbnNpMmtuci5hbQpAQCAtMCwwICsxLDc3IEBACisjIyBhdXRvbWFrZSAtIGNyZWF0ZSBNYWtlZmlsZS5pbiBmcm9tIE1ha2VmaWxlLmFtCisjIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDIwMDEsIDIwMDMsIDIwMDgsIDIwMDkKKyMjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMjICVBTlNJMktOUi1ESVIlIGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgYW5zaTJrbnIgaXMsIGAnIGlmCisjIyBpcyB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisKKworIyMgLS0tLS0tLS0tLSAjIworIyMgYW5zaTJrbnIuICAjIworIyMgLS0tLS0tLS0tLSAjIworCitpZiAlP0FOU0kyS05SLURJUiUKKworQU5TSTJLTlIgPSAlQU5TSTJLTlItRElSJS9hbnNpMmtucgorJUFOU0kyS05SLURJUiUvYW5zaTJrbnI6CisJJChhbV9fY2QpICVBTlNJMktOUi1ESVIlICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIC4vYW5zaTJrbnIKKy5NQUtFOiAlQU5TSTJLTlItRElSJS9hbnNpMmtucgorCitlbHNlICElP0FOU0kyS05SLURJUiUKKworIyMgU3Vic3RpdHV0aW9uIGZyb20gQU1fQ19QUk9UT1RZUEVTLiAgVGhpcyBtYWtlcyBpdCBiZSBidWlsdCBvbmx5IHdoZW4KKyMjIG5lY2Vzc2FyeS4KK0FOU0kyS05SID0gQEFOU0kyS05SQAorLi9hbnNpMmtucjogYW5zaTJrbnIuJChPQkpFWFQpCisJJChMSU5LKSBhbnNpMmtuci4kKE9CSkVYVCkgJChMSUJTKQorYW5zaTJrbnIuJChPQkpFWFQpOiAkKENPTkZJR19IRUFERVIpCisKK2VuZGlmICElP0FOU0kyS05SLURJUiUKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBDbGVhbmluZyBhbnNpMmtuci4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworaWYgISU/QU5TSTJLTlItRElSJQorLlBIT05ZOiBjbGVhbi1rcmV4dHJhCisKK2NsZWFuLWFtOiBjbGVhbi1rcmV4dHJhCitjbGVhbi1rcmV4dHJhOgorIyMgV2h5IGBjbGVhbicgYW5kIG5vdCBzb21ld2hlcmUgZWxzZT8gIE5vdCBgbW9zdGx5Y2xlYW4nIGJlY2F1c2UKKyMjIHBlb3BsZSB1c3VhbGx5IGRvbid0IHdhbnQgdG8gcmVjb21waWxlIHRoaXMgZmlsZS4gIEFuZCBub3QKKyMjIGBkaXN0Y2xlYW4nIGJlY2F1c2Ugb2Ygb3VyIGluZm9ybWFsIHJ1bGU6IGlmIGBtYWtlJyBidWlsdCBpdCwgdGhlbgorIyMgYGNsZWFuJyBzaG91bGQgZGVsZXRlIGl0OyBpZiBgY29uZmlndXJlJyBidWlsdCBpdCwgdGhlbiBgZGlzdGNsZWFuJworIyMgc2hvdWxkIHJlbW92ZSBpdCAoYW5kIGlmIHRoZSBtYWludGFpbmVyIGJ1aWx0IGl0LCB0aGVuCisjIyBtYWludGFpbmVyLWNsZWFuIHNob3VsZCByZW1vdmUgaXQpLgorCS1ybSAtZiBhbnNpMmtucgorZW5kaWYgISU/QU5TSTJLTlItRElSJQorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBDbGVhbmluZyB0aGUgb3V0cHV0IG9mIGFuc2kya25yLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisuUEhPTlk6IG1vc3RseWNsZWFuLWtyCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1rcgorbW9zdGx5Y2xlYW4ta3I6CisjIyBPbmx5IGRlbGV0ZSAqXy5jIHdoZW4gYW5zaTJrbnIgaXMgYWN0dWFsbHkgaW4gdXNlLCBzbyBhcyB0byBhdm9pZAorIyMgZGVsZXRpbmcgc291cmNlcyB0aGF0IGhhcHBlbiB0byBlbmQgaW4gIl8iIGFmdGVyIGJlaW5nIHRydW5jYXRlZCBvbiBhIERPUworIyMgOC4zIGZpbGVzeXN0ZW0gd2l0aCBzcmNkaXI9PWJ1aWxkZGlyLgorCS10ZXN0ICIkVSIgPSAiIiB8fCBybSAtZiAqXy5jCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2NoZWNrLmFtIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9jaGVjay5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWQxYWFkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9jaGVjay5hbQpAQCAtMCwwICsxLDQwMyBAQAorIyMgYXV0b21ha2UgLSBjcmVhdGUgTWFrZWZpbGUuaW4gZnJvbSBNYWtlZmlsZS5hbQorIyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUKKyMjIEZvdW5kYXRpb24sIEluYy4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitpZiAlP0NPTE9SJQorIyBJZiBzdGRvdXQgaXMgYSBub24tZHVtYiB0dHksIHVzZSBjb2xvcnMuICBJZiB0ZXN0IC10IGlzIG5vdCBzdXBwb3J0ZWQsCisjIHRoZW4gdGhpcyBmYWlsczsgYSBjb25zZXJ2YXRpdmUgYXBwcm9hY2guICBPZiBjb3Vyc2UgZG8gbm90IHJlZGlyZWN0CisjIHN0ZG91dCBoZXJlLCBqdXN0IHN0ZGVyci4KK2FtX190dHlfY29sb3JzID0gXAorcmVkPTsgZ3JuPTsgbGduPTsgYmx1PTsgc3RkPTsgXAordGVzdCAiWCQoQU1fQ09MT1JfVEVTVFMpIiAhPSBYbm8gXAorJiYgdGVzdCAiWCQkVEVSTSIgIT0gWGR1bWIgXAorJiYgeyB0ZXN0ICJYJChBTV9DT0xPUl9URVNUUykiID0gWGFsd2F5cyB8fCB0ZXN0IC10IDEgMj4vZGV2L251bGw7IH0gXAorJiYgeyBcCisgIHJlZD0nG1swOzMxbSc7IFwKKyAgZ3JuPScbWzA7MzJtJzsgXAorICBsZ249JxtbMTszMm0nOyBcCisgIGJsdT0nG1sxOzM0bSc7IFwKKyAgc3RkPScbW20nOyBcCit9CitlbHNlICElP0NPTE9SJQorYW1fX3R0eV9jb2xvcnMgPSBcCityZWQ9OyBncm49OyBsZ249OyBibHU9OyBzdGQ9CitlbmRpZiAhJT9DT0xPUiUKKworLlBIT05ZOiBjaGVjay1URVNUUworCitpZiAlP1BBUkFMTEVMX1RFU1RTJQorCitpbmNsdWRlIGluc3QtdmFycy5hbQorCisjIyBOZXcgcGFyYWxsZWwgdGVzdCBkcml2ZXIuCisjIworIyMgVGhpcyBjb2RlIGlzIGFkYXB0ZWQgZnJvbSBjaGVjay5tayB3aGljaCB3YXMgb3JpZ2luYWxseQorIyMgd3JpdHRlbiBhdCBFUElUQS9MUkRFLCBmdXJ0aGVyIGRldmVsb3BlZCBhdCBHb3N0YWksIHRoZW4gbWFkZQorIyMgaXRzIHdheSBmcm9tIEdOVSBjb3JldXRpbHMgdG8gZW5kIHVwLCBsYXJnZWx5IHJld3JpdHRlbiwgaW4KKyMjIEF1dG9tYWtlLgorIyMKKyMjIEl0IHByb3ZpZGVzIHNwZWNpYWwgc3VwcG9ydCBmb3IgInVuaXQgdGVzdHMiLCB0aGF0IGlzIHRvIHNheSwKKyMjIHRlc3RzIHRoYXQgKG9uY2UgcnVuKSBubyBsb25nZXIgbmVlZCB0byBiZSByZS1jb21waWxlZCBhbmQKKyMjIHJlLXJ1biBhdCBlYWNoICJtYWtlIGNoZWNrIiwgdW5sZXNzIHRoZWlyIHNvdXJjZXMgY2hhbmdlZC4gIFRvCisjIyBlbmFibGUgdW5pdC10ZXN0IHN1cHBvcnRzLCBzZXQgUkVDSEVDS19MT0dTIHRvIGVtcHR5LiAgSW4gc3VjaCBhCisjIyBzZXR0aW5nLCB0aGF0IGhlYXZpbHkgcmVsaWVzIG9uIGNvcnJlY3QgZGVwZW5kZW5jaWVzLCBpdHMgdXNlcnMgbWF5CisjIyBwcmVmZXIgdG8gZGVmaW5lIEVYVFJBX1BST0dSQU1TIGluc3RlYWQgb2YgY2hlY2tfUFJPR1JBTVMsIGJlY2F1c2UKKyMjIGl0IGFsbG93cyBpbnRlcnR3aW5lZCBjb21waWxhdGlvbiBhbmQgZXhlY3V0aW9uIG9mIHRoZSB0ZXN0cy4KKyMjIFNvbWV0aW1lcyB0aGlzIGhlbHBzIGNhdGNoaW5nIGVycm9ycyBlYXJsaWVyICh5b3UgZG9uJ3QgaGF2ZSB0bworIyMgd2FpdCBmb3IgYWxsIHRoZSB0ZXN0cyB0byBiZSBjb21waWxlZCkuCisjIworIyMgRGVmaW5lIFRFU1RfU1VJVEVfTE9HIHRvIGJlIHRoZSBuYW1lIG9mIHRoZSBnbG9iYWwgbG9nIHRvIGNyZWF0ZS4KKyMjIERlZmluZSBURVNUX0xPR1MgdG8gdGhlIHNldCBvZiBsb2dzIHRvIGluY2x1ZGUgaW4gaXQuICBJdCBkZWZhdWx0cworIyMgdG8gJChURVNUUyksIHdpdGggYC50ZXN0JyBhbmQgYEBFWEVFWFRAJyByZW1vdmVkLCBhbmQgYCcubG9nJworIyMgYXBwZW5kZWQuCisjIworIyMgSW4gYWRkaXRpb24gdG8gdGhlIG1hZ2ljICJleGl0IDc3IG1lYW5zIFNLSVAiIGZlYXR1cmUgKHdoaWNoIHdhcworIyMgaW1wb3J0ZWQgZnJvbSBhdXRvbWFrZSksIHRoZXJlIGlzIGEgbWFnaWMgImV4aXQgOTkgbWVhbnMgRkFJTCIgZmVhdHVyZQorIyMgd2hpY2ggaXMgdXNlZnVsIGlmIHlvdSBuZWVkIHRvIGlzc3VlIGEgaGFyZCBlcnJvciBubyBtYXR0ZXIgd2hldGhlciB0aGUKKyMjIHRlc3QgaXMgWEZBSUwgb3Igbm90LiAgWW91IGNhbiBkaXNhYmxlIHRoaXMgZmVhdHVyZSBieSBzZXR0aW5nIHRoZQorIyMgdmFyaWFibGUgRElTQUJMRV9IQVJEX0VSUk9SUyB0byBhIG5vbmVtcHR5IHZhbHVlLgorCisjIFJlc3RydWN0dXJlZCBUZXh0IHRpdGxlIGFuZCBzZWN0aW9uLgorYW1fX3JzdF90aXRsZSAgID0gc2VkICdzLy4qLyAgICYgICAvO2g7cy8uLz0vZztwO3g7cDtnO3A7cy8uKi8vJworYW1fX3JzdF9zZWN0aW9uID0gc2VkICdwO3MvLi89L2c7cDtnJworCisjIFB1dCBzdGRpbiAocG9zc2libHkgc2V2ZXJhbCBsaW5lcyBzZXBhcmF0ZWQgYnkgIi4gICIpIGluIGEgYm94LgorYW1fX3RleHRfYm94ID0gJChBV0spICd7CQkJCVwKKyAgbiA9IHNwbGl0KCQkMCwgbGluZXMsICJcXC4gICIpOyBtYXggPSAwOwkJXAorICBmb3IgKGkgPSAxOyBpIDw9IG47ICsraSkJCQkJXAorICAgIGlmIChtYXggPCBsZW5ndGgobGluZXNbaV0pKQkJCQlcCisgICAgICBtYXggPSBsZW5ndGgobGluZXNbaV0pOwkJCQlcCisgIGZvciAoaSA9IDA7IGkgPCBtYXg7ICsraSkgbGluZSA9IGxpbmUgIj0iOwkJXAorICBwcmludCBsaW5lOwkJCQkJCVwKKyAgZm9yIChpID0gMTsgaSA8PSBuOyArK2kpIGlmIChsaW5lc1tpXSkgcHJpbnQgbGluZXNbaV07XAorICBwcmludCBsaW5lOwkJCQkJCVwKK30nCisKKyMgU29sYXJpcyAxMCAnbWFrZScsIGFuZCBzZXZlcmFsIG90aGVyIHRyYWRpdGlvbmFsICdtYWtlJyBpbXBsZW1lbnRhdGlvbnMsCisjIHBhc3MgIi1lIiB0byAkKFNIRUxMKS4gIFRoaXMgY29udHJhZGljdHMgUE9TSVguICBXb3JrIGFyb3VuZCB0aGUgcHJvYmxlbQorIyBieSBkaXNhYmxpbmcgLWUgKHVzaW5nIHRoZSBYU0kgZXh0ZW5zaW9uICJzZXQgK2UiKSBpZiBpdCdzIHNldC4KK2FtX19zaF9lX3NldHVwID0gY2FzZSAkJC0gaW4gKmUqKSBzZXQgK2U7OyBlc2FjCisKKyMgVG8gYmUgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBjb21tYW5kIHJ1bm5pbmcgdGhlIHRlc3QuICBDcmVhdGVzIHRoZQorIyBkaXJlY3RvcnkgZm9yIHRoZSBsb2cgaWYgbmVlZGVkLiAgU3RvcmVzIGluICRkaXIgdGhlIGRpcmVjdG9yeQorIyBjb250YWluaW5nICRmLCBpbiAkdHN0IHRoZSB0ZXN0LCBpbiAkbG9nIHRoZSBsb2csIGFuZCBwYXNzZXMKKyMgVEVTVFNfRU5WSVJPTk1FTlQuICBTYXZlIGFuZCByZXN0b3JlIFRFUk0gYXJvdW5kIHVzZSBvZgorIyBURVNUU19FTlZJUk9OTUVOVCwgaW4gY2FzZSB0aGF0IHVuc2V0cyBpdC4KK2FtX19jaGVja19wcmUgPQkJCQkJCVwKKyQoYW1fX3NoX2Vfc2V0dXApOwkJCQkJXAorJChhbV9fdnBhdGhfYWRqX3NldHVwKSAkKGFtX192cGF0aF9hZGopCQkJXAorc3JjZGlyPSQoc3JjZGlyKTsgZXhwb3J0IHNyY2RpcjsJCQlcCitybSAtZiAkQC10OwkJCQkJCVwKK3RyYXAgJ3N0PSQkPzsgcm0gLWYgJ1wnJyQoYWJzX2J1aWxkZGlyKS8kQC10J1wnJzsgKGV4aXQgJCRzdCk7IGV4aXQgJCRzdCcgXAorICAxIDIgMTMgMTU7CQkJCQkJXAorYW1fX29kaXI9YGVjaG8gIi4vJEAiIHwgc2VkICdzfC9bXi9dKiQkfHwnYDsJCVwKK3Rlc3QgIngkJGFtX19vZGlyIiA9IHguIHx8ICQoTUtESVJfUCkgIiQkYW1fX29kaXIiIHx8IGV4aXQgJCQ/OwlcCitpZiB0ZXN0IC1mICIuLyQkZiI7IHRoZW4gZGlyPS4vOwkJCVwKK2VsaWYgdGVzdCAtZiAiJCRmIjsgdGhlbiBkaXI9OwkJCQlcCitlbHNlIGRpcj0iJChzcmNkaXIpLyI7IGZpOwkJCQlcCit0c3Q9JCRkaXIkJGY7IGxvZz0nJEAnOyBfX1NBVkVEX1RFUk09JCRURVJNOwkJXAorJChURVNUU19FTlZJUk9OTUVOVCkKKworIyBUbyBiZSBhcHBlbmRlZCB0byB0aGUgY29tbWFuZCBydW5uaW5nIHRoZSB0ZXN0LiAgSGFuZGxlIHRoZSBzdGRvdXQKKyMgYW5kIHN0ZGVyciByZWRpcmVjdGlvbiwgYW5kIGNhdGNoIHRoZSBleGl0IHN0YXR1cy4KK2FtX19jaGVja19wb3N0ID0JCQkJCVwKKz4kQC10IDI+JjE7CQkJCQkJXAorZXN0YXR1cz0kJD87CQkJCQkJXAoraWYgdGVzdCAtbiAnJChESVNBQkxFX0hBUkRfRVJST1JTKScJCQlcCisgICAmJiB0ZXN0ICQkZXN0YXR1cyAtZXEgOTk7IHRoZW4JCQlcCisgIGVzdGF0dXM9MTsJCQkJCQlcCitmaTsJCQkJCQkJXAorVEVSTT0kJF9fU0FWRURfVEVSTTsgZXhwb3J0IFRFUk07CQkJXAorJChhbV9fdHR5X2NvbG9ycyk7CQkJCQlcCit4ZmFpbGVkPVBBU1M7CQkJCQkJXAorY2FzZSAiICQoWEZBSUxfVEVTVFMpICIgaW4JCQkJXAorICAqW1wgXAldJCRmW1wgXAldKiB8ICpbXCBcCV0kJGRpciQkZltcIFwJXSopIFwKKyAgICB4ZmFpbGVkPVhGQUlMOzsJCQkJCVwKK2VzYWM7CQkJCQkJCVwKK2Nhc2UgJCRlc3RhdHVzOiQkeGZhaWxlZCBpbgkJCQlcCisgICAgMDpYRkFJTCkgY29sPSQkcmVkOyByZXM9WFBBU1M7OwkJCVwKKyAgICAwOiopICAgICBjb2w9JCRncm47IHJlcz1QQVNTIDs7CQkJXAorICAgIDc3OiopICAgIGNvbD0kJGJsdTsgcmVzPVNLSVAgOzsJCQlcCisgICAgOTk6KikgICAgY29sPSQkcmVkOyByZXM9RkFJTCA7OwkJCVwKKyAgICAqOlhGQUlMKSBjb2w9JCRsZ247IHJlcz1YRkFJTDs7CQkJXAorICAgICo6KikgICAgIGNvbD0kJHJlZDsgcmVzPUZBSUwgOzsJCQlcCitlc2FjOwkJCQkJCQlcCitlY2hvICIkJHtjb2x9JCRyZXMkJHtzdGR9OiAkJGYiOwkJCVwKK2VjaG8gIiQkcmVzOiAkJGYgKGV4aXQ6ICQkZXN0YXR1cykiIHwJCQlcCisgICQoYW1fX3JzdF9zZWN0aW9uKSA+JEA7CQkJCVwKK2NhdCAkQC10ID4+JEA7CQkJCQkJXAorcm0gLWYgJEAtdAorCiskKFRFU1RfU1VJVEVfTE9HKTogJChURVNUX0xPR1MpCisJQCQoYW1fX3NoX2Vfc2V0dXApOwkJCQkJCVwKKwlsaXN0PSckKFRFU1RfTE9HUyknOwkJCQkJCVwKKwlyZXN1bHRzPWBmb3IgZiBpbiAkJGxpc3Q7IGRvCQkJCQlcCisJCSAgIHJlYWQgbGluZSA8ICQkZiAmJiBlY2hvICIkJGxpbmUiIHx8IGVjaG8gRkFJTDsJXAorCQkgZG9uZWA7CQkJCQkJCVwKKwlhbGw9YGVjaG8gIiQkcmVzdWx0cyIgfCBzZWQgJy9eJCQvZCcgfCB3YyAtbCB8IHNlZCAtZSAncy9eWwkgXSovLydgOyBcCisJZmFpbD1gZWNobyAiJCRyZXN1bHRzIiB8IGdyZXAgLWMgJ15GQUlMJ2A7CQkJXAorCXBhc3M9YGVjaG8gIiQkcmVzdWx0cyIgfCBncmVwIC1jICdeUEFTUydgOwkJCVwKKwlza2lwPWBlY2hvICIkJHJlc3VsdHMiIHwgZ3JlcCAtYyAnXlNLSVAnYDsJCQlcCisJeGZhaWw9YGVjaG8gIiQkcmVzdWx0cyIgfCBncmVwIC1jICdeWEZBSUwnYDsJCQlcCisJeHBhc3M9YGVjaG8gIiQkcmVzdWx0cyIgfCBncmVwIC1jICdeWFBBU1MnYDsJCQlcCisJZmFpbHVyZXM9YGV4cHIgJCRmYWlsICsgJCR4cGFzc2A7CQkJCVwKKwlhbGw9YGV4cHIgJCRhbGwgLSAkJHNraXBgOwkJCQkJXAorCWlmIHRlc3QgIiQkYWxsIiAtZXEgMTsgdGhlbiB0ZXN0cz10ZXN0OyBBbGw9OwkJCVwKKwllbHNlIHRlc3RzPXRlc3RzOyBBbGw9IkFsbCAiOyBmaTsJCQkJXAorCWNhc2UgZmFpbD0kJGZhaWw6eHBhc3M9JCR4cGFzczp4ZmFpbD0kJHhmYWlsIGluCQkJXAorCSAgZmFpbD0wOnhwYXNzPTA6eGZhaWw9MCkJCQkJCVwKKwkgICAgbXNnPSIkJEFsbCQkYWxsICQkdGVzdHMgcGFzc2VkLiAgIjsJCQkJXAorCSAgICBleGl0PXRydWU7OwkJCQkJCQlcCisJICBmYWlsPTA6eHBhc3M9MDp4ZmFpbD0qKQkJCQkJXAorCSAgICBtc2c9IiQkQWxsJCRhbGwgJCR0ZXN0cyBiZWhhdmVkIGFzIGV4cGVjdGVkIjsJCVwKKwkgICAgaWYgdGVzdCAiJCR4ZmFpbCIgLWVxIDE7IHRoZW4geGZhaWx1cmVzPWZhaWx1cmU7CQlcCisJICAgIGVsc2UgeGZhaWx1cmVzPWZhaWx1cmVzOyBmaTsJCQkJXAorCSAgICBtc2c9IiQkbXNnICgkJHhmYWlsIGV4cGVjdGVkICQkeGZhaWx1cmVzKS4gICI7CQlcCisJICAgIGV4aXQ9dHJ1ZTs7CQkJCQkJCVwKKwkgIGZhaWw9Kjp4cGFzcz0wOnhmYWlsPSopCQkJCQlcCisJICAgIG1zZz0iJCRmYWlsIG9mICQkYWxsICQkdGVzdHMgZmFpbGVkLiAgIjsJCQlcCisJICAgIGV4aXQ9ZmFsc2U7OwkJCQkJCVwKKwkgIGZhaWw9Kjp4cGFzcz0qOnhmYWlsPSopCQkJCQlcCisJICAgIG1zZz0iJCRmYWlsdXJlcyBvZiAkJGFsbCAkJHRlc3RzIGRpZCBub3QgYmVoYXZlIGFzIGV4cGVjdGVkIjsgXAorCSAgICBpZiB0ZXN0ICIkJHhwYXNzIiAtZXEgMTsgdGhlbiB4cGFzc2VzPXBhc3M7CQkJXAorCSAgICBlbHNlIHhwYXNzZXM9cGFzc2VzOyBmaTsJCQkJCVwKKwkgICAgbXNnPSIkJG1zZyAoJCR4cGFzcyB1bmV4cGVjdGVkICQkeHBhc3NlcykuICAiOwkJXAorCSAgICBleGl0PWZhbHNlOzsJCQkJCQlcCisJICAqKQkJCQkJCQkJXAorCSAgICBlY2hvID4mMiAiaW5jb3JyZWN0IGNhc2UiOyBleGl0IDQ7OwkJCQlcCisJZXNhYzsJCQkJCQkJCVwKKwlpZiB0ZXN0ICIkJHNraXAiIC1uZSAwOyB0aGVuCQkJCQlcCisJICBpZiB0ZXN0ICIkJHNraXAiIC1lcSAxOyB0aGVuCQkJCQlcCisJICAgIG1zZz0iJCRtc2coJCRza2lwIHRlc3Qgd2FzIG5vdCBydW4pLiAgIjsJCQlcCisJICBlbHNlCQkJCQkJCQlcCisJICAgIG1zZz0iJCRtc2coJCRza2lwIHRlc3RzIHdlcmUgbm90IHJ1bikuICAiOwkJCVwKKwkgIGZpOwkJCQkJCQkJXAorCWZpOwkJCQkJCQkJXAorCXsJCQkJCQkJCVwKKwkgIGVjaG8gIiQoUEFDS0FHRV9TVFJJTkcpOiAkKHN1YmRpcikvJChURVNUX1NVSVRFX0xPRykiIHwJXAorCSAgICAkKGFtX19yc3RfdGl0bGUpOwkJCQkJCVwKKwkgIGVjaG8gIiQkbXNnIjsJCQkJCQkJXAorCSAgZWNobzsJCQkJCQkJCVwKKwkgIGVjaG8gIi4uIGNvbnRlbnRzOjogOmRlcHRoOiAyIjsJCQkJXAorCSAgZWNobzsJCQkJCQkJCVwKKwkgIGZvciBmIGluICQkbGlzdDsgZG8JCQkJCQlcCisJICAgIHJlYWQgbGluZSA8ICQkZjsJCQkJCQlcCisJICAgIGNhc2UgJCRsaW5lIGluCQkJCQkJXAorCSAgICAgIFBBU1M6KnxYRkFJTDoqKTs7CQkJCQkJXAorCSAgICAgICopIGVjaG87IGNhdCAkJGY7OwkJCQkJXAorCSAgICBlc2FjOwkJCQkJCQlcCisJICBkb25lOwkJCQkJCQkJXAorCX0gPiQoVEVTVF9TVUlURV9MT0cpLnRtcDsJCQkJCVwKKwltdiAkKFRFU1RfU1VJVEVfTE9HKS50bXAgJChURVNUX1NVSVRFX0xPRyk7CQkJXAorCWlmIHRlc3QgIiQkZmFpbHVyZXMiIC1uZSAwOyB0aGVuCQkJCVwKKwkgIG1zZz0iJCR7bXNnfVNlZSAkKHN1YmRpcikvJChURVNUX1NVSVRFX0xPRykuICAiOwkJXAorCSAgaWYgdGVzdCAtbiAiJChQQUNLQUdFX0JVR1JFUE9SVCkiOyB0aGVuCQkJXAorCSAgICBtc2c9IiQke21zZ31QbGVhc2UgcmVwb3J0IHRvICQoUEFDS0FHRV9CVUdSRVBPUlQpLiAgIjsJXAorCSAgZmk7CQkJCQkJCQlcCisJZmk7CQkJCQkJCQlcCisJdGVzdCB4IiQkVkVSQk9TRSIgPSB4IHx8ICQkZXhpdCB8fCBjYXQgJChURVNUX1NVSVRFX0xPRyk7CVwKKwkkKGFtX190dHlfY29sb3JzKTsJCQkJCQlcCisJaWYgJCRleGl0OyB0aGVuCQkJCQkJCVwKKwkgIGVjaG8gJChFQ0hPX04pICIkJGdybiQoRUNIT19DKSI7CQkJCVwKKwkgZWxzZQkJCQkJCQkJXAorCSAgZWNobyAkKEVDSE9fTikgIiQkcmVkJChFQ0hPX0MpIjsJCQkJXAorCWZpOwkJCQkJCQkJXAorCWVjaG8gIiQkbXNnIiB8ICQoYW1fX3RleHRfYm94KTsJCQkJCVwKKwllY2hvICQoRUNIT19OKSAiJCRzdGQkKEVDSE9fQykiOwkJCQlcCisJJCRleGl0CisKK1JFQ0hFQ0tfTE9HUyA9ICQoVEVTVF9MT0dTKQorCisjIFJ1biBhbGwgdGhlIHRlc3RzLgorY2hlY2stVEVTVFM6CisjIyBFeHBhbmQgJChSRUNIRUNLX0xPR1MpIG9ubHkgb25jZSwgdG8gYXZvaWQgZXhjZWVkaW5nIGxpbmUgbGVuZ3RoIGxpbWl0cy4KKwlAbGlzdD0nJChSRUNIRUNLX0xPR1MpJzsgdGVzdCAteiAiJCRsaXN0IiB8fCBybSAtZiAkJGxpc3QKKyMjIFdlIGFsd2F5cyBoYXZlIHRvIHJlbW92ZSBURVNUX1NVSVRFX0xPRywgdG8gZW5zdXJlIGl0cyBydWxlIGlzIHJ1bgorIyMgaW4gYW55IGNhc2UgZXZlbiBpbiBsYXp5IG1vZGU6IG90aGVyd2lzZSwgaWYgbm8gdGVzdCBuZWVkcyByZXJ1bm5pbmcsCisjIyBvciBhIHByaW9yIHJ1biBwbHVzIHJlcnVucyBhbGwgaGFwcGVuIHdpdGhpbiB0aGUgc2FtZSB0aW1lc3RhbXAKKyMjIChjYW4gaGFwcGVuIHdpdGggYSBwcmlvciBgbWFrZSBURVNUUz08c3Vic2V0PicpLAorIyMgdGhlbiB3ZSBnZXQgbm8gbG9nIG91dHB1dC4KKyMjIE9UT0gsIHRoaXMgbWVhbnMgdGhhdCwgaW4gdGhlIHJ1bGUgZm9yIGAkKFRFU1RfU1VJVEVfTE9HKScsIHdlCisjIyBjYW5ub3QgdXNlIGAkPycgdG8gY29tcHV0ZSB0aGUgc2V0IG9mIGxhemlseSByZXJ1biB0ZXN0cywgbGVzdAorIyMgd2UgcmVseSBvbiAuUEhPTlkgdG8gd29yayBwb3J0YWJseS4KKwlAdGVzdCAteiAiJChURVNUX1NVSVRFX0xPRykiIHx8IHJtIC1mICQoVEVTVF9TVUlURV9MT0cpCisJQGxpc3Q9JyQoVEVTVF9MT0dTKSc7CQkJCQkJXAorCWxpc3Q9YGZvciBmIGluICQkbGlzdDsgZG8JCQkJCVwKKwkgIHRlc3QgLmxvZyA9ICQkZiB8fCBlY2hvICQkZjsJCQkJCVwKKwlkb25lIHwgdHIgJ1wwMTJcMDE1JyAnICAnYDsJCQkJCVwKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkKFRFU1RfU1VJVEVfTE9HKSBURVNUX0xPR1M9IiQkbGlzdCIKKworQU1fUkVDVVJTSVZFX1RBUkdFVFMgKz0gY2hlY2sKKworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFByb2R1Y2UgSFRNTC4gICMjCisjIyAtLS0tLS0tLS0tLS0tLSAjIworCisubG9nLmh0bWw6CisJQGxpc3Q9JyQoUlNUMkhUTUwpICQkUlNUMkhUTUwgcnN0Mmh0bWwgcnN0Mmh0bWwucHknOwkJXAorCWZvciByMmggaW4gJCRsaXN0OyBkbwkJCQkJCVwKKwkgIGlmICgkJHIyaCAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbgkJCVwKKwkgICAgUjJIPSQkcjJoOwkJCQkJCQlcCisJICBmaTsJCQkJCQkJCVwKKwlkb25lOwkJCQkJCQkJXAorCWlmIHRlc3QgLXogIiQkUjJIIjsgdGhlbgkJCQkJXAorCSAgZWNobyA+JjIgImNhbm5vdCBmaW5kIHJzdDJodG1sLCBjYW5ub3QgY3JlYXRlICRAIjsJCVwKKwkgIGV4aXQgMjsJCQkJCQkJXAorCWZpOwkJCQkJCQkJXAorCSQkUjJIICQ8ID4kQC50bXAKKwlAbXYgJEAudG1wICRACisKKyMgQmUgc3VyZSB0byBydW4gY2hlY2sgZmlyc3QsIGFuZCB0aGVuIHRvIGNvbnZlcnQgdGhlIHJlc3VsdC4KKyMgQmV3YXJlIG9mIGNvbmN1cnJlbnQgZXhlY3V0aW9ucy4gIFJ1biAiY2hlY2siIG5vdCAiY2hlY2stVEVTVFMiLCBhcworIyBjaGVjay1TQ1JJUFRTIGFuZCBvdGhlciBkZXBlbmRlbmNpZXMgYXJlIHJlYnVpbHQgYnkgdGhlIGZvcm1lciBvbmx5LgorIyBBbmQgZXhwZWN0IGNoZWNrIHRvIGZhaWwuCitjaGVjay1odG1sOgorCUBpZiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjaGVjazsgdGhlbgkJCVwKKwkgIHJ2PTA7IGVsc2UgcnY9JCQ/OwkJCQkJXAorCWZpOwkJCQkJCQlcCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJChURVNUX1NVSVRFX0hUTUwpIHx8IGV4aXQgNDsJXAorCWV4aXQgJCRydgorCisuUEhPTlk6IGNoZWNrLWh0bWwKKy5NQUtFOiBjaGVjay1odG1sCisKK0FNX1JFQ1VSU0lWRV9UQVJHRVRTICs9IGNoZWNrLWh0bWwKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJlY2hlY2tpbmcgZmFpbHVyZXMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIyBSZXJ1biBhbGwgRkFJTGVkIG9yIFhQQVNTZWQgdGVzdHMuCityZWNoZWNrIHJlY2hlY2staHRtbDoKKwlAdGFyZ2V0PWBlY2hvICRAIHwgc2VkICdzLF5yZSwsJ2A7CQkJCVwKKwlsaXN0PSckKFRFU1RfTE9HUyknOwkJCQkJCVwKKwlsaXN0PWBmb3IgZiBpbiAkJGxpc3Q7IGRvCQkJCQlcCisJICAgICAgICB0ZXN0IC1mICQkZiB8fCBjb250aW51ZTsJCQkJXAorCSAgICAgICAgaWYgcmVhZCBsaW5lIDwgJCRmOyB0aGVuCQkJCVwKKwkgICAgICAgICAgY2FzZSAkJGxpbmUgaW4gRkFJTCp8WFBBU1MqKSBlY2hvICQkZjs7IGVzYWM7CQlcCisJICAgICAgICBlbHNlIGVjaG8gJCRmOyBmaTsJCQkJCVwKKwkgICAgICBkb25lIHwgdHIgJ1wwMTJcMDE1JyAnICAnYDsJCQkJXAorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkdGFyZ2V0IEFNX01BS0VGTEFHUz0nJChBTV9NQUtFRkxBR1MpIFRFU1RfTE9HUz0iJyIkJGxpc3QiJyInCisKKy5QSE9OWTogcmVjaGVjayByZWNoZWNrLWh0bWwKKy5NQUtFOiByZWNoZWNrIHJlY2hlY2staHRtbAorCitBTV9SRUNVUlNJVkVfVEFSR0VUUyArPSByZWNoZWNrIHJlY2hlY2staHRtbAorCitlbHNlICElP1BBUkFMTEVMX1RFU1RTJQorCitjaGVjay1URVNUUzogJChURVNUUykKKwlAZmFpbGVkPTA7IGFsbD0wOyB4ZmFpbD0wOyB4cGFzcz0wOyBza2lwPTA7IFwKKwlzcmNkaXI9JChzcmNkaXIpOyBleHBvcnQgc3JjZGlyOyBcCisjIyBNYWtlIHN1cmUgU29sYXJpcyBWUEFUSC1leHBhbmRzIGFsbCBtZW1iZXJzIG9mIHRoaXMgbGlzdCwgZXZlbgorIyMgdGhlIGZpcnN0IGFuZCB0aGUgbGFzdCBvbmU7IHRodXMgdGhlIHNwYWNlcyBhcm91bmQgJChURVNUUykKKwlsaXN0PScgJChURVNUUykgJzsgXAorCSQoYW1fX3R0eV9jb2xvcnMpOyBcCisJaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCisJICBmb3IgdHN0IGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mIC4vJCR0c3Q7IHRoZW4gZGlyPS4vOyBcCisjIyBOb3RlOiBTb2xhcmlzIDIuNyBzZWVtcyB0byBleHBhbmQgVEVTVFMgdXNpbmcgVlBBVEguICBUaGF0J3MKKyMjIHdoeSB3ZSBhbHNvIHRyeSBgZGlyPScKKwkgICAgZWxpZiB0ZXN0IC1mICQkdHN0OyB0aGVuIGRpcj07IFwKKwkgICAgZWxzZSBkaXI9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgICBpZiAkKFRFU1RTX0VOVklST05NRU5UKSAkJHtkaXJ9JCR0c3Q7IHRoZW4gXAorIyMgU3VjY2VzcworCSAgICAgIGFsbD1gZXhwciAkJGFsbCArIDFgOyBcCisJICAgICAgY2FzZSAiICQoWEZBSUxfVEVTVFMpICIgaW4gXAorCSAgICAgICpbXCBcCV0kJHRzdFtcIFwJXSopIFwKKwkJeHBhc3M9YGV4cHIgJCR4cGFzcyArIDFgOyBcCisJCWZhaWxlZD1gZXhwciAkJGZhaWxlZCArIDFgOyBcCisJCWNvbD0kJHJlZDsgcmVzPVhQQVNTOyBcCisJICAgICAgOzsgXAorCSAgICAgICopIFwKKwkJY29sPSQkZ3JuOyByZXM9UEFTUzsgXAorCSAgICAgIDs7IFwKKwkgICAgICBlc2FjOyBcCisJICAgIGVsaWYgdGVzdCAkJD8gLW5lIDc3OyB0aGVuIFwKKyMjIEZhaWx1cmUKKwkgICAgICBhbGw9YGV4cHIgJCRhbGwgKyAxYDsgXAorCSAgICAgIGNhc2UgIiAkKFhGQUlMX1RFU1RTKSAiIGluIFwKKwkgICAgICAqW1wgXAldJCR0c3RbXCBcCV0qKSBcCisJCXhmYWlsPWBleHByICQkeGZhaWwgKyAxYDsgXAorCQljb2w9JCRsZ247IHJlcz1YRkFJTDsgXAorCSAgICAgIDs7IFwKKwkgICAgICAqKSBcCisJCWZhaWxlZD1gZXhwciAkJGZhaWxlZCArIDFgOyBcCisJCWNvbD0kJHJlZDsgcmVzPUZBSUw7IFwKKwkgICAgICA7OyBcCisJICAgICAgZXNhYzsgXAorCSAgICBlbHNlIFwKKyMjIFNraXBwZWQKKwkgICAgICBza2lwPWBleHByICQkc2tpcCArIDFgOyBcCisJICAgICAgY29sPSQkYmx1OyByZXM9U0tJUDsgXAorCSAgICBmaTsgXAorCSAgICBlY2hvICIkJHtjb2x9JCRyZXMkJHtzdGR9OiAkJHRzdCI7IFwKKwkgIGRvbmU7IFwKKyMjIFByZXBhcmUgdGhlIGJhbm5lcgorCSAgaWYgdGVzdCAiJCRhbGwiIC1lcSAxOyB0aGVuIFwKKwkgICAgdGVzdHM9InRlc3QiOyBcCisJICAgIEFsbD0iIjsgXAorCSAgZWxzZSBcCisJICAgIHRlc3RzPSJ0ZXN0cyI7IFwKKwkgICAgQWxsPSJBbGwgIjsgXAorCSAgZmk7IFwKKwkgIGlmIHRlc3QgIiQkZmFpbGVkIiAtZXEgMDsgdGhlbiBcCisJICAgIGlmIHRlc3QgIiQkeGZhaWwiIC1lcSAwOyB0aGVuIFwKKwkgICAgICBiYW5uZXI9IiQkQWxsJCRhbGwgJCR0ZXN0cyBwYXNzZWQiOyBcCisJICAgIGVsc2UgXAorCSAgICAgIGlmIHRlc3QgIiQkeGZhaWwiIC1lcSAxOyB0aGVuIGZhaWx1cmVzPWZhaWx1cmU7IGVsc2UgZmFpbHVyZXM9ZmFpbHVyZXM7IGZpOyBcCisJICAgICAgYmFubmVyPSIkJEFsbCQkYWxsICQkdGVzdHMgYmVoYXZlZCBhcyBleHBlY3RlZCAoJCR4ZmFpbCBleHBlY3RlZCAkJGZhaWx1cmVzKSI7IFwKKwkgICAgZmk7IFwKKwkgIGVsc2UgXAorCSAgICBpZiB0ZXN0ICIkJHhwYXNzIiAtZXEgMDsgdGhlbiBcCisJICAgICAgYmFubmVyPSIkJGZhaWxlZCBvZiAkJGFsbCAkJHRlc3RzIGZhaWxlZCI7IFwKKwkgICAgZWxzZSBcCisJICAgICAgaWYgdGVzdCAiJCR4cGFzcyIgLWVxIDE7IHRoZW4gcGFzc2VzPXBhc3M7IGVsc2UgcGFzc2VzPXBhc3NlczsgZmk7IFwKKwkgICAgICBiYW5uZXI9IiQkZmFpbGVkIG9mICQkYWxsICQkdGVzdHMgZGlkIG5vdCBiZWhhdmUgYXMgZXhwZWN0ZWQgKCQkeHBhc3MgdW5leHBlY3RlZCAkJHBhc3NlcykiOyBcCisJICAgIGZpOyBcCisJICBmaTsgXAorIyMgREFTSEVTIHNob3VsZCBjb250YWluIHRoZSBsYXJnZXN0IGxpbmUgb2YgdGhlIGJhbm5lci4KKwkgIGRhc2hlcz0iJCRiYW5uZXIiOyBcCisJICBza2lwcGVkPSIiOyBcCisJICBpZiB0ZXN0ICIkJHNraXAiIC1uZSAwOyB0aGVuIFwKKwkgICAgaWYgdGVzdCAiJCRza2lwIiAtZXEgMTsgdGhlbiBcCisJICAgICAgc2tpcHBlZD0iKCQkc2tpcCB0ZXN0IHdhcyBub3QgcnVuKSI7IFwKKwkgICAgZWxzZSBcCisJICAgICAgc2tpcHBlZD0iKCQkc2tpcCB0ZXN0cyB3ZXJlIG5vdCBydW4pIjsgXAorCSAgICBmaTsgXAorCSAgICB0ZXN0IGBlY2hvICIkJHNraXBwZWQiIHwgd2MgLWNgIC1sZSBgZWNobyAiJCRiYW5uZXIiIHwgd2MgLWNgIHx8IFwKKwkgICAgICBkYXNoZXM9IiQkc2tpcHBlZCI7IFwKKwkgIGZpOyBcCisJICByZXBvcnQ9IiI7IFwKKwkgIGlmIHRlc3QgIiQkZmFpbGVkIiAtbmUgMCAmJiB0ZXN0IC1uICIkKFBBQ0tBR0VfQlVHUkVQT1JUKSI7IHRoZW4gXAorCSAgICByZXBvcnQ9IlBsZWFzZSByZXBvcnQgdG8gJChQQUNLQUdFX0JVR1JFUE9SVCkiOyBcCisJICAgIHRlc3QgYGVjaG8gIiQkcmVwb3J0IiB8IHdjIC1jYCAtbGUgYGVjaG8gIiQkYmFubmVyIiB8IHdjIC1jYCB8fCBcCisJICAgICAgZGFzaGVzPSIkJHJlcG9ydCI7IFwKKwkgIGZpOyBcCisJICBkYXNoZXM9YGVjaG8gIiQkZGFzaGVzIiB8IHNlZCBzLy4vPS9nYDsgXAorCSAgaWYgdGVzdCAiJCRmYWlsZWQiIC1lcSAwOyB0aGVuIFwKKwkgICAgZWNobyAiJCRncm4kJGRhc2hlcyI7IFwKKwkgIGVsc2UgXAorCSAgICBlY2hvICIkJHJlZCQkZGFzaGVzIjsgXAorCSAgZmk7IFwKKwkgIGVjaG8gIiQkYmFubmVyIjsgXAorCSAgdGVzdCAteiAiJCRza2lwcGVkIiB8fCBlY2hvICIkJHNraXBwZWQiOyBcCisJICB0ZXN0IC16ICIkJHJlcG9ydCIgfHwgZWNobyAiJCRyZXBvcnQiOyBcCisJICBlY2hvICIkJGRhc2hlcyQkc3RkIjsgXAorCSAgdGVzdCAiJCRmYWlsZWQiIC1lcSAwOyBcCisJZWxzZSA6OyBmaQorCitlbmRpZiAhJT9QQVJBTExFTF9URVNUUyUKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vY2hlY2syLmFtIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9jaGVjazIuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU0YzYyZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vY2hlY2syLmFtCkBAIC0wLDAgKzEsMjkgQEAKKyMjIGF1dG9tYWtlIC0gY3JlYXRlIE1ha2VmaWxlLmluIGZyb20gTWFrZWZpbGUuYW0KKyMjIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIyBGcm9tIGEgdGVzdCBmaWxlIHRvIGEgbG9nIGZpbGUuCis/R0VORVJJQz8lRVhUJS5sb2c6Cis/IUdFTkVSSUM/JU9CSiU6ICVTT1VSQ0UlCisJQHA9JyVTT1VSQ0UlJzsgJChhbV9fY2hlY2tfcHJlKSAlQ09NUElMRSUgIiQkdHN0IiAkKGFtX19jaGVja19wb3N0KQorCisjIyBJZiBubyBwcm9ncmFtcyBhcmUgYnVpbHQgaW4gdGhpcyBwYWNrYWdlLCB0aGVuIHRoaXMgcnVsZSBpcyByZW1vdmVkCisjIyBhdCBhdXRvbWFrZSB0aW1lLiAgT3RoZXJ3aXNlLCAlYW1fX0VYRUVYVCUgZXhwYW5kcyB0byBhIGNvbmZpZ3VyZSB0aW1lCisjIyBjb25kaXRpb25hbCwgdHJ1ZSBpZiAkKEVYRUVYVCkgaXMgbm9uZW1wdHksIHRodXMgdGhpcyBydWxlIGRvZXMgbm90CisjIyBjb25mbGljdCB3aXRoIHRoZSBwcmV2aW91cyBvbmUuCitpZiAlYW1fX0VYRUVYVCUKKz9HRU5FUklDPyVFWFQlJChFWEVFWFQpLmxvZzoKKwlAcD0nJVNPVVJDRSUnOyAkKGFtX19jaGVja19wcmUpICVDT01QSUxFJSAiJCR0c3QiICQoYW1fX2NoZWNrX3Bvc3QpCitlbmRpZiAlYW1fX0VYRUVYVCUKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vY2xlYW4taGRyLmFtIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9jbGVhbi1oZHIuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkYmNlMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vY2xlYW4taGRyLmFtCkBAIC0wLDAgKzEsMjEgQEAKKyMjIGF1dG9tYWtlIC0gY3JlYXRlIE1ha2VmaWxlLmluIGZyb20gTWFrZWZpbGUuYW0KKyMjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMjAwMSwgMjAwMworIyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLlBIT05ZOiBkaXN0Y2xlYW4taGRyCitkaXN0Y2xlYW4tYW06IGRpc3RjbGVhbi1oZHIKK2Rpc3RjbGVhbi1oZHI6CisJLXJtIC1mICVGSUxFUyUKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vY2xlYW4uYW0gYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2NsZWFuLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NWZlYjEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2NsZWFuLmFtCkBAIC0wLDAgKzEsNjMgQEAKKyMjIGF1dG9tYWtlIC0gY3JlYXRlIE1ha2VmaWxlLmluIGZyb20gTWFrZWZpbGUuYW0KKyMjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMSwgMjAwMywgMjAwNCwgMjAwOAorIyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyMgV2UgbXVzdCB0ZXN0IGVhY2ggbWFjcm8gYmVjYXVzZSBpdCBtaWdodCBiZSBlbXB0eSwgYW5kIGFuIGVtcHR5ICJybQorIyMgLXJmIiBjb21tYW5kIGxvb2tzIGRpc3R1cmJpbmcuICBBbHNvLCB0aGUgU29sYXJpcyAyLjQgInJtIiB3aWxsCisjIyByZXR1cm4gYW4gZXJyb3IgaWYgdGhlcmUgYXJlIG5vIGFyZ3VtZW50cyBvdGhlciB0aGFuICItZiIuCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYworbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKyVNT1NUTFlDTEVBTl9STVMlCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWFtCitjbGVhbi1nZW5lcmljOgorJUNMRUFOX1JNUyUKKworZGlzdGNsZWFuLWFtOiBkaXN0Y2xlYW4tZ2VuZXJpYyBjbGVhbi1hbQorZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCislRElTVENMRUFOX1JNUyUKKworIyMgTWFrZWZpbGVzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgY2Fubm90IGJlIGNsZWFuZWQgYnkKKyMjIGFuIC1hbSBkZXBlbmRlbmN5LCBiZWNhdXNlIHRoYXQgd291bGQgcHJldmVudCBvdGhlciBkaXN0Y2xlYW4KKyMjIGRlcGVuZGVuY2llcyBmcm9tIGNhbGxpbmcgbWFrZSByZWN1cnNpdmVseS4gIChUaGUgbXVsdGlsaWIKKyMjIGNsZWFuaW5nIHJ1bGVzIGRvIHRoaXMuKQorIyMKKyMjIElmIHlvdSBjaGFuZ2UgZGlzdGNsZWFuIGhlcmUsIHlvdSBwcm9iYWJseSBhbHNvIHdhbnQgdG8gY2hhbmdlCisjIyBtYWludGFpbmVyLWNsZWFuIGJlbG93LgorZGlzdGNsZWFuOgorCS1ybSAtZiAlTUFLRUZJTEUlCisKK21haW50YWluZXItY2xlYW4tYW06IG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tYW0KK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKyMjIEZJWE1FOiBzaG91bGRuJ3Qgd2UgcmVhbGx5IHByaW50IHRoZXNlIG1lc3NhZ2VzIGJlZm9yZSBydW5uaW5nCisjIyB0aGUgZGVwZW5kZW5jaWVzPworCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCislTUFJTlRBSU5FUl9DTEVBTl9STVMlCisKKyMjIFNlZSBjb21tZW50IGZvciBkaXN0Y2xlYW4uCittYWludGFpbmVyLWNsZWFuOgorCS1ybSAtZiAlTUFLRUZJTEUlCisKKy5QSE9OWTogY2xlYW4gbW9zdGx5Y2xlYW4gZGlzdGNsZWFuIG1haW50YWluZXItY2xlYW4gXAorY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1nZW5lcmljIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCis/IVNVQkRJUlM/Y2xlYW46IGNsZWFuLWFtCis/IVNVQkRJUlM/ZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKz8hU1VCRElSUz9tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKz8hU1VCRElSUz9tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2NvbXBpbGUuYW0gYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2NvbXBpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThlODJlNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vY29tcGlsZS5hbQpAQCAtMCwwICsxLDMwIEBACisjIyBhdXRvbWFrZSAtIGNyZWF0ZSBNYWtlZmlsZS5pbiBmcm9tIE1ha2VmaWxlLmFtCisjIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDEsIDIwMDMKKyMjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK0RFRkFVTFRfSU5DTFVERVMgPSAlREVGQVVMVF9JTkNMVURFUyUKKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCis/TU9TVExZUk1TPyVNT1NUTFlSTVMlCisKK2Rpc3RjbGVhbi1hbTogZGlzdGNsZWFuLWNvbXBpbGUKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCis/RElTVFJNUz8lRElTVFJNUyUKKworLlBIT05ZOiBtb3N0bHljbGVhbi1jb21waWxlIGRpc3RjbGVhbi1jb21waWxlCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2NvbmZpZ3VyZS5hbSBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vY29uZmlndXJlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5Mjk5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2NvbmZpZ3VyZS5hbQpAQCAtMCwwICsxLDE1OSBAQAorIyMgYXV0b21ha2UgLSBjcmVhdGUgTWFrZWZpbGUuaW4gZnJvbSBNYWtlZmlsZS5hbQorIyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlCisjIyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworCisjIyBUaGlzIGR1bW15IHJ1bGUgaXMgY2FsbGVkIGZyb20gc3ViZGlyZWN0b3JpZXMgd2hlbmV2ZXIgb25lIG9mIHRoZQorIyMgdG9wLWxldmVsIE1ha2VmaWxlJ3MgZGVwZW5kZW5jaWVzIG11c3QgYmUgdXBkYXRlZC4gIEl0IGRvZXMgbm90CisjIyBuZWVkIHRvIGRlcGVuZCBvbiAlTUFLRUZJTEUlIGJlY2F1c2UgR05VIG1ha2Ugd2lsbCBhbHdheXMgbWFrZSBzdXJlCisjIyAlTUFLRUZJTEUlIGlzIHVwZGF0ZWQgYmVmb3JlIGNvbnNpZGVyaW5nIHRoZSBhbS0tcmVmcmVzaCB0YXJnZXQuCitpZiAlP1RPUERJUl9QJQorLlBIT05ZOiBhbS0tcmVmcmVzaAorYW0tLXJlZnJlc2g6CisJQDoKK2VuZGlmICU/VE9QRElSX1AlCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQnVpbGRpbmcgTWFrZWZpbGUuKi4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyMgVGhpcyBydWxlIHJlbWFrZXMgdGhlIE1ha2VmaWxlLmluLgorJU1BS0VGSUxFLUlOJTogJU1BSU5UQUlORVItTU9ERSUgJU1BS0VGSUxFLUFNJSAlTUFLRUZJTEUtSU4tREVQUyUgJChhbV9fY29uZmlndXJlX2RlcHMpCisjIyBJZiBjb25maWd1cmUuYWMgb3Igb25lIG9mIGNvbmZpZ3VyZSdzIGRlcGVuZGVuY2llcyBoYXMgY2hhbmdlZCwgYWxsCisjIyBNYWtlZmlsZS5pbiBhcmUgdG8gYmUgdXBkYXRlZDsgaXQgaXMgdGhlbiBtb3JlIGVmZmljaWVudCB0byBydW4KKyMjIGF1dG9tYWtlIG9uIGFsbCB0aGUgTWFrZWZpbGVzIGF0IG9uY2UuICBJdCBhbHNvIGFsbG93IEF1dG9tYWtlIHRvIGJlCisjIyBydW4gZm9yIG5ld2x5IGFkZGVkIGRpcmVjdG9yaWVzLgorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorP1RPUERJUl9QPwkgICAgICBlY2hvICcgY2QgJChzcmNkaXIpICYmICQoQVVUT01BS0UpICVBVVRPTUFLRS1PUFRJT05TJSc7IFwKKz9UT1BESVJfUD8JICAgICAgJChhbV9fY2QpICQoc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAlQVVUT01BS0UtT1BUSU9OUyUgXAorP1RPUERJUl9QPwkJJiYgZXhpdCAwOyBcCis/IVRPUERJUl9QPwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKyMjIElmIG9uIHRoZSBvdGhlciBoYW5kLCBzdWJkaXIvTWFrZWZpbGUuaW4gaGFzIGJlZW4gcmVtb3ZlZCwgdGhlbiB0b3BsZXZlbAorIyMgYW0tLXJlZnJlc2ggd2lsbCBub3QgYmUgYXdhcmUgb2YgYW55IG5lZWQgdG8gcnVuLiAgV2Ugc3RpbGwgaW52b2tlIGl0CisjIyBkdWUgdG8gJD8gbGlzdGluZyBhbGwgcHJlcmVxdWlzaXRlcy4gIEZpeCB1cCBmb3IgaXQgYnkgcnVubmluZyB0aGUgcmVidWlsZAorIyMgcnVsZSBmb3IgdGhpcyBmaWxlIG9ubHksIGJlbG93LgorPyFUT1BESVJfUD8JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisjIyBPdGhlcndpc2UsIHJlYnVpbGQgb25seSB0aGlzIGZpbGUuCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgJUFVVE9NQUtFLU9QVElPTlMlICVNQUtFRklMRS1BTS1TT1VSQ0VTJSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAlQVVUT01BS0UtT1BUSU9OUyUgJU1BS0VGSUxFLUFNLVNPVVJDRVMlCisKKyMjIEVuc3VyZSB0aGF0IEdOVSBtYWtlIGRvZXNuJ3QgcmVtb3ZlIE1ha2VmaWxlIGlmIC4vY29uZmlnLnN0YXR1cyAoYmVsb3cpCisjIyBpcyBpbnRlcnJ1cHRlZC4gIE90aGVyd2lzZSwgdGhlIHVzZXIgd291bGQgbmVlZCB0byBrbm93IHRvIHJlcnVuCisjIyAuL2NvbmZpZy5zdGF0dXMgdG8gcmVjcmVhdGUgdGhlIGxvc3QgTWFrZWZpbGUuCisuUFJFQ0lPVVM6ICVNQUtFRklMRSUKKyMjIFRoaXMgcnVsZSByZW1ha2VzIHRoZSBNYWtlZmlsZS4KKyVNQUtFRklMRSU6ICVNQUtFRklMRS1ERVBTJSAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworIyMgSWYgTWFrZWZpbGUgaXMgdG8gYmUgdXBkYXRlZCBiZWNhdXNlIG9mIGNvbmZpZy5zdGF0dXMsIHRoZW4gcnVuCisjIyBjb25maWcuc3RhdHVzIHdpdGhvdXQgYXJndW1lbnQgaW4gb3JkZXIgdG8gKGkpIHJlcnVuIGFsbCB0aGUKKyMjIEFDX0NPTkZJR19DT01NQU5EUyBpbmNsdWRpbmcgdGhvc2UgdGhhdCBhcmUgbm90IHZpc2libGUgdG8KKyMjIEF1dG9tYWtlLCBhbmQgKGlpKSB0byBzYXZlIHRpbWUgYnkgcnVubmluZyBjb25maWcuc3RhdHVzIGFsbCB3aXRoCisjIyBhbGwgdGhlIGZpbGVzLCBpbnN0ZWFkIG9mIG9uY2UgcGVyIGZpbGUgKGlpaSkgZ2VuZXJhdGUgTWFrZWZpbGVzCisjIyBpbiBuZXdseSBhZGRlZCBkaXJlY3Rvcmllcy4KKwlAY2FzZSAnJD8nIGluIFwKKyMjIERvbid0IHByZWZpeCAkKHRvcF9idWlsZGRpciksIGJlY2F1c2UgR05VIG1ha2Ugd2lsbCBzdHJpcCBpdCBvdXQKKyMjIHdoZW4gaXQncyBgLicuCisJICAqY29uZmlnLnN0YXR1cyopIFwKKz9UT1BESVJfUD8JICAgIGVjaG8gJyAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMnOyBcCis/VE9QRElSX1A/CSAgICAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXM7OyBcCis/IVRPUERJUl9QPwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorIyMgRklYTUU6ICQoYW1fX2RlcGZpbGVzX21heWJlKSBsZXRzIHVzIHJlLXJ1biB0aGUgcnVsZSB0byBjcmVhdGUgdGhlCisjIyAuUCBmaWxlcy4gIElkZWFsbHkgd2Ugd291bGRuJ3QgaGF2ZSB0byBkbyB0aGlzIGJ5IGhhbmQuCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICVDT05GSUctTUFLRUZJTEUlICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAlQ09ORklHLU1BS0VGSUxFJSAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworRElTVF9DT01NT04gKz0gJU1BS0VGSUxFLUFNJQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgY29uZmlnLnN0YXR1cyAmIGNvbmZpZ3VyZS4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworaWYgJT9UT1BESVJfUCUKKyMjIEFsd2F5cyByZXF1aXJlIGNvbmZpZ3VyZS5hYyBhbmQgY29uZmlndXJlIGF0IHRvcCBsZXZlbCwgZXZlbiBpZiB0aGV5CisjIyBkb24ndCBleGlzdC4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yIGNvbmZpZ3VyZSwgc2luY2UgaXQKKyMjIHdvbid0IGJlIGNyZWF0ZWQgdW50aWwgYXV0b2NvbmYgaXMgcnVuIC0tIHdoaWNoIG1pZ2h0IGJlIGFmdGVyCisjIyBhdXRvbWFrZSBpcyBydW4uCitESVNUX0NPTU1PTiArPSAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKGFtX19jb25maWd1cmVfZGVwcykKK2VuZGlmICU/VE9QRElSX1AlCisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorP1RPUERJUl9QPwkkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgLS1yZWNoZWNrCis/IVRPUERJUl9QPwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICVNQUlOVEFJTkVSLU1PREUlICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorP1RPUERJUl9QPwkkKGFtX19jZCkgJChzcmNkaXIpICYmICQoQVVUT0NPTkYpCis/IVRPUERJUl9QPwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworCisjIyAtLS0tLS0tLS0tLS0gIyMKKyMjIGFjbG9jYWwubTQuICAjIworIyMgLS0tLS0tLS0tLS0tICMjCisKKyMjIGFjbG9jYWwubTQgbXVzdCBiZSBidWlsdCBieSB0aGUgdG9wLWxldmVsIE1ha2VmaWxlLCBiZWNhdXNlIHRoaXMgaXMKKyMjIHdoZXJlIHRoZSB1c2VyIGlzIGV4cGVjdGVkIHRvIGRlZmluZSAkKEFDTE9DQUxfQU1GTEFHUykuCisjIworIyMgV2hlbmV2ZXIgYSBjb25maWd1cmUgZGVwZW5kZW5jeSBjaGFuZ2VzIHdlIG5lZWQgdG8gcmVidWlsZAorIyMgYWNsb2NhbC5tNCB0b28uICBDaGFuZ2luZyBjb25maWd1cmUuYWMsIG9yIGFueSBmaWxlIGluY2x1ZGVkIGJ5CisjIyBhY2xvY2FsLm00IG1pZ2h0IHJlcXVpcmUgYWRkaW5nIG1vcmUgZmlsZXMgdG8gYWNsb2NhbC5tNC4gIEhlbmNlCisjIyB0aGUgJChhbV9fY29uZmlndXJlX2RlcHMpIGRlcGVuZGVuY3kuCitpZiAlP1JFR0VOLUFDTE9DQUwtTTQlCiskKEFDTE9DQUxfTTQpOiAlTUFJTlRBSU5FUi1NT0RFJSAkKGFtX19hY2xvY2FsX200X2RlcHMpCis/VE9QRElSX1A/CSQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBQ0xPQ0FMKSAkKEFDTE9DQUxfQU1GTEFHUykKKz8hVE9QRElSX1A/CWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCisjIyBBdm9pZCB0aGUgImRlbGV0ZWQgaGVhZGVyIGZpbGUiIHByb2JsZW0gZm9yIHRoZSBkZXBlbmRlbmNpZXMuCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorZW5kaWYgJT9SRUdFTi1BQ0xPQ0FMLU00JQorCisKKyMjIC0tLS0tLS0tLSAjIworIyMgY2xlYW51cC4gICMjCisjIyAtLS0tLS0tLS0gIyMKKworIyMgV2Ugc3BlY2lhbC1jYXNlIGNvbmZpZy5zdGF0dXMgaGVyZS4gIElmIHdlIGRvIGl0IGFzIHBhcnQgb2YgdGhlCisjIyBub3JtYWwgY2xlYW4gcHJvY2Vzc2luZyBmb3IgdGhpcyBkaXJlY3RvcnksIHRoZW4gaXQgbWlnaHQgYmUKKyMjIHJlbW92ZWQgYmVmb3JlIHNvbWUgc3ViZGlyIGlzIGNsZWFuZWQuICBIb3dldmVyLCB0aGF0IHN1YmRpcidzCisjIyBNYWtlZmlsZSBkZXBlbmRzIG9uIGNvbmZpZy5zdGF0dXMuCisKK2lmICU/VE9QRElSX1AlCithbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUyA9IGNvbmZpZy5zdGF0dXMgY29uZmlnLmNhY2hlIGNvbmZpZy5sb2cgXAorIGNvbmZpZ3VyZS5saW5lbm8gY29uZmlnLnN0YXR1cy5saW5lbm8KK2Rpc3RjbGVhbjoKKwktcm0gLWYgJChhbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUykKKworIyMgTm90ZTogeW91IG1pZ2h0IHRoaW5rIHdlIHNob3VsZCByZW1vdmUgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgb3IKKyMjIGFjbG9jYWwubTQgaGVyZSBpbiBhIG1haW50YWluZXItY2xlYW4gcnVsZS4gIEhvd2V2ZXIsIHRoZSBHTlUKKyMjIENvZGluZyBTdGFuZGFyZHMgZXhwbGljaXRseSBwcm9oaWJpdCB0aGlzLgorCittYWludGFpbmVyLWNsZWFuOgorCS1ybSAtZiAkKGFtX19DT05GSUdfRElTVENMRUFOX0ZJTEVTKQorIyMgYXV0b200dGUuY2FjaGUgaXMgY3JlYXRlZCBieSBBdXRvY29uZjsgdGhlIG9ubHkgdmFsaWQgdGFyZ2V0IHRvCisjIyByZW1vdmUgaXQgaXMgbWFpbnRhaW5lci1jbGVhbiwgbm90IGRpc3RjbGVhbi4KKyMjIElmIHlvdSBoYXZlIGFuIGF1dG9tNHRlLmNhY2hlIHRoYXQgY2F1c2UgZGlzdGNoZWNrIHRvIGZhaWwsIHRoZW4KKyMjIGl0IGlzIGdvb2QgbmV3czogeW91IGZpbmFsbHkgZGlzY292ZXJlZCB0aGF0IGF1dG9jb25mIGFuZC9vcgorIyMgYXV0b2hlYWRlciBpcyBuZWVkZWQgdG8gdXNlIHlvdXIgdGFyYmFsbCwgd2hpY2ggaXMgd3JvbmcuCisJLXJtIC1yZiAkKHRvcF9zcmNkaXIpL2F1dG9tNHRlLmNhY2hlCisKKworZW5kaWYgJT9UT1BESVJfUCUKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vZGF0YS5hbSBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vZGF0YS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmFmNzE3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9kYXRhLmFtCkBAIC0wLDAgKzEsOTUgQEAKKyMjIGF1dG9tYWtlIC0gY3JlYXRlIE1ha2VmaWxlLmluIGZyb20gTWFrZWZpbGUuYW0KKyMjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNiwKKyMjIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK2lmICU/SU5TVEFMTCUKK2luY2x1ZGUgaW5zdC12YXJzLmFtCitlbmRpZiAlP0lOU1RBTEwlCisKKyMjIC0tLS0tLS0tLS0tLSAjIworIyMgSW5zdGFsbGluZy4gICMjCisjIyAtLS0tLS0tLS0tLS0gIyMKKworaWYgJT9JTlNUQUxMJQorYW1fX2luc3RhbGxkaXJzICs9ICIkKERFU1RESVIpJCglTkRJUiVkaXIpIgorLlBIT05ZIGluc3RhbGwtJUVYRUM/ZXhlYzpkYXRhJS1hbTogaW5zdGFsbC0lRElSJSVQUklNQVJZJQoraW5zdGFsbC0lRElSJSVQUklNQVJZJTogJCglRElSJV8lUFJJTUFSWSUpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJCglTkRJUiVkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJCglTkRJUiVkaXIpIgoraWYgJT9CQVNFJQorIyMgRnVubnkgaW52b2NhdGlvbiBiZWNhdXNlIE1ha2VmaWxlIHZhcmlhYmxlIGNhbiBiZSBlbXB0eSwgbGVhZGluZyB0bworIyMgYSBzeW50YXggZXJyb3IgaW4gc2guCisJQGxpc3Q9JyQoJURJUiVfJVBSSU1BUlklKSc7IHRlc3QgLW4gIiQoJU5ESVIlZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKyMjIEEgZmlsZSBjYW4gYmUgaW4gdGhlIHNvdXJjZSBkaXJlY3Rvcnkgb3IgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisjIyBJZiB0aGUgXyVQUklNQVJZJSB2YXJpYWJsZSBoYXMgYW4gZW50cnkgbGlrZSBmb28vYmFyLCBpbnN0YWxsIGl0IGFzCisjIyAkKGRlc3RkaXIpL2Jhciwgbm90ICQoZGVzdGRpcikvZm9vL2Jhci4gIFRoZSB1c2VyIGNhbiBtYWtlIGEKKyMjIG5ldyBkaXIgdmFyaWFibGUgb3IgdXNlIGEgbm9iYXNlXyB0YXJnZXQgZm9yIHRoZSBsYXR0ZXIgY2FzZS4KKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMXyVPTkVfUFJJTUFSWSUpICQkZmlsZXMgJyQoREVTVERJUikkKCVORElSJWRpciknIjsgXAorCSAgJChJTlNUQUxMXyVPTkVfUFJJTUFSWSUpICQkZmlsZXMgIiQoREVTVERJUikkKCVORElSJWRpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZQorZWxzZSAhJT9CQVNFJQorCUBsaXN0PSckKCVESVIlXyVQUklNQVJZJSknOyB0ZXN0IC1uICIkKCVORElSJWRpcikiIHx8IGxpc3Q9OyBcCisJJChhbV9fbm9iYXNlX2xpc3QpIHwgd2hpbGUgcmVhZCBkaXIgZmlsZXM7IGRvIFwKKwkgIHhmaWxlcz07IGZvciBmaWxlIGluICQkZmlsZXM7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRmaWxlIjsgdGhlbiB4ZmlsZXM9IiQkeGZpbGVzICQkZmlsZSI7IFwKKwkgICAgZWxzZSB4ZmlsZXM9IiQkeGZpbGVzICQoc3JjZGlyKS8kJGZpbGUiOyBmaTsgZG9uZTsgXAorCSAgdGVzdCAteiAiJCR4ZmlsZXMiIHx8IHsgXAorCSAgICB0ZXN0ICJ4JCRkaXIiID0geC4gfHwgeyBcCisJICAgICAgZWNobyAiJChNS0RJUl9QKSAnJChERVNURElSKSQoJU5ESVIlZGlyKS8kJGRpciciOyBcCisJICAgICAgJChNS0RJUl9QKSAiJChERVNURElSKSQoJU5ESVIlZGlyKS8kJGRpciI7IH07IFwKKwkgICAgZWNobyAiICQoSU5TVEFMTF8lT05FX1BSSU1BUlklKSAkJHhmaWxlcyAnJChERVNURElSKSQoJU5ESVIlZGlyKS8kJGRpciciOyBcCisJICAgICQoSU5TVEFMTF8lT05FX1BSSU1BUlklKSAkJHhmaWxlcyAiJChERVNURElSKSQoJU5ESVIlZGlyKS8kJGRpciIgfHwgZXhpdCAkJD87IH07IFwKKwlkb25lCitlbmRpZiAhJT9CQVNFJQorZW5kaWYgJT9JTlNUQUxMJQorCisKKyMjIC0tLS0tLS0tLS0tLS0tICMjCisjIyBVbmluc3RhbGxpbmcuICAjIworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKworaWYgJT9JTlNUQUxMJQorLlBIT05ZIHVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLSVESVIlJVBSSU1BUlklCit1bmluc3RhbGwtJURJUiUlUFJJTUFSWSU6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJCglRElSJV8lUFJJTUFSWSUpJzsgdGVzdCAtbiAiJCglTkRJUiVkaXIpIiB8fCBsaXN0PTsgXAorP0JBU0U/CWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCis/IUJBU0U/CSQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IGZpbGVzPWAkKGFtX19ub2Jhc2Vfc3RyaXApYDsgXAorCXRlc3QgLW4gIiQkZmlsZXMiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiAoIGNkICckKERFU1RESVIpJCglTkRJUiVkaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQoJU5ESVIlZGlyKSIgJiYgcm0gLWYgJCRmaWxlcworZW5kaWYgJT9JTlNUQUxMJQorCisKKyMjIC0tLS0tLS0tLS0gIyMKKyMjIENsZWFuaW5nLiAgIyMKKyMjIC0tLS0tLS0tLS0gIyMKKworIyMgTm90aGluZy4KKworCisjIyAtLS0tLS0tLS0tLS0tLSAjIworIyMgRGlzdHJpYnV0aW5nLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tICMjCisKK2lmICU/RElTVCUKK0RJU1RfQ09NTU9OICs9ICVESVNUVkFSJQorZW5kaWYgJT9ESVNUJQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9kZWphZ251LmFtIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9kZWphZ251LmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZGU0NWMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2RlamFnbnUuYW0KQEAgLTAsMCArMSwxMDkgQEAKKyMjIGF1dG9tYWtlIC0gY3JlYXRlIE1ha2VmaWxlLmluIGZyb20gTWFrZWZpbGUuYW0KKyMjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMjAwMCwgMjAwMSwgMjAwMywgMjAwNgorIyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyMgTmFtZSBvZiB0b29sIHRvIHVzZS4gIERlZmF1bHQgaXMgdGhlIHNhbWUgYXMgdGhlIHBhY2thZ2UuCitERUpBVE9PTCA9ICQoUEFDS0FHRSkKKworIyMgRGVmYXVsdCBmbGFncyB0byBwYXNzIHRvIGRlamFnbnUuICBUaGUgdXNlciBjYW4gb3ZlcnJpZGUgdGhpcy4KK1JVTlRFU1RERUZBVUxURkxBR1MgPSAtLXRvb2wgJCR0b29sIC0tc3JjZGlyICQkc3JjZGlyCisKKyMjIEluIEN5Z251cyBtb2RlLCB0aGVzZSBhcmUgZm91bmQgaW4gdGhlIGJ1aWxkIHRyZWUuCisjIyBPdGhlcndpc2UgdGhleSBhcmUgbG9va2VkIGZvciBpbiAkUEFUSC4KK2lmICU/Q1lHTlVTJQorRVhQRUNUID0gYGlmIHRlc3QgLWYgJCh0b3BfYnVpbGRkaXIpLy4uL2V4cGVjdC9leHBlY3Q7IHRoZW4gXAorCSAgICBlY2hvICQodG9wX2J1aWxkZGlyKS8uLi9leHBlY3QvZXhwZWN0OyBcCisJICBlbHNlIFwKKwkgICAgZWNobyBleHBlY3Q7IFwKKwkgIGZpYAorCitSVU5URVNUID0gYGlmIHRlc3QgLWYgJCh0b3Bfc3JjZGlyKS8uLi9kZWphZ251L3J1bnRlc3Q7IHRoZW4gXAorCSAgICAgZWNobyAkKHRvcF9zcmNkaXIpLy4uL2RlamFnbnUvcnVudGVzdDsgXAorCSAgIGVsc2UgXAorCSAgICAgZWNobyBydW50ZXN0OyBcCisJICAgZmlgCitlbHNlICEgJT9DWUdOVVMlCitFWFBFQ1QgPSBleHBlY3QKK1JVTlRFU1QgPSBydW50ZXN0CitlbmRpZiAhICU/Q1lHTlVTJQorCisKKy5QSE9OWTogY2hlY2stREVKQUdOVQorY2hlY2stREVKQUdOVTogc2l0ZS5leHAKKyMjIExpZmUgaXMgZWFzaWVzdCB3aXRoIGFuIGFic29sdXRlIHNyY2Rpciwgc28gZG8gdGhhdC4KKwlzcmNkaXI9YCQoYW1fX2NkKSAkKHNyY2RpcikgJiYgcHdkYDsgZXhwb3J0IHNyY2RpcjsgXAorCUVYUEVDVD0kKEVYUEVDVCk7IGV4cG9ydCBFWFBFQ1Q7IFwKKyMjIEFsbG93IHRoaXMgdG8gd29yayB3aGVuIGV4cGVjdCBhbmQgRGVqYUdudSBhcmUgaW4gdHJlZS4KKyMjIE9ubHkgcmVxdWlyZWQgd2hlbiAtLWN5Z251cyBpbiBmb3JjZS4KKz9DWUdOVVM/CWlmIFsgLWYgJCh0b3BfYnVpbGRkaXIpLy4uL2V4cGVjdC9leHBlY3QgXTsgdGhlbiBcCis/Q1lHTlVTPwkgIFRDTF9MSUJSQVJZPWAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKS8uLi90Y2wvbGlicmFyeSAmJiBwd2RgOyBcCis/Q1lHTlVTPwkgIGV4cG9ydCBUQ0xfTElCUkFSWTsgXAorP0NZR05VUz8JZmk7IFwKKwlydW50ZXN0PSQoUlVOVEVTVCk7IFwKKyMjIElmIHJ1bnRlc3QgY2FuJ3QgYmUgZm91bmQsIHByaW50IGEgd2FybmluZyBidXQgZG9uJ3QgZGllLiAgSXQgaXMKKyMjIHBvaW50bGVzcyB0byBjYXVzZSBhIGZhaWx1cmUgaWYgdGhlIHRlc3RzIGNhbm5vdCBiZSBydW4gYXQgYWxsLgorCWlmICQoU0hFTEwpIC1jICIkJHJ1bnRlc3QgLS12ZXJzaW9uIiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGV4aXRfc3RhdHVzPTA7IGw9JyQoREVKQVRPT0wpJzsgZm9yIHRvb2wgaW4gJCRsOyBkbyBcCisJICAgIGlmICQkcnVudGVzdCAkKEFNX1JVTlRFU1RGTEFHUykgJChSVU5URVNUREVGQVVMVEZMQUdTKSAkKFJVTlRFU1RGTEFHUyk7IFwKKwkgICAgdGhlbiA6OyBlbHNlIGV4aXRfc3RhdHVzPTE7IGZpOyBcCisJICBkb25lOyBcCisJZWxzZSBlY2hvICJXQVJOSU5HOiBjb3VsZCBub3QgZmluZCBcYHJ1bnRlc3QnIiAxPiYyOyA6O1wKKwlmaTsgXAorCWV4aXQgJCRleGl0X3N0YXR1cworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEJ1aWxkaW5nIHNpdGUuZXhwLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyMgTm90ZSB0aGF0IGluIHRoZSBydWxlIHdlIGRvbid0IGRpcmVjdGx5IGdlbmVyYXRlIHNpdGUuZXhwIHRvIGF2b2lkCisjIyB0aGUgcG9zc2liaWxpdHkgb2YgYSBjb3JydXB0ZWQgc2l0ZS5leHAgaWYgbWFrZSBpcyBpbnRlcnJ1cHRlZC4KKyMjIEppbSBNZXllcmluZyBoYXMgc29tZSB1c2VmdWwgdGV4dCBvbiB0aGlzIHRvcGljLgorc2l0ZS5leHA6IE1ha2VmaWxlCisJQGVjaG8gJ01ha2luZyBhIG5ldyBzaXRlLmV4cCBmaWxlLi4uJworCUBlY2hvICcjIyB0aGVzZSB2YXJpYWJsZXMgYXJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IG1ha2UgIyMnID5zaXRlLnRtcAorCUBlY2hvICcjIERvIG5vdCBlZGl0IGhlcmUuICBJZiB5b3Ugd2lzaCB0byBvdmVycmlkZSB0aGVzZSB2YWx1ZXMnID4+c2l0ZS50bXAKKwlAZWNobyAnIyBlZGl0IHRoZSBsYXN0IHNlY3Rpb24nID4+c2l0ZS50bXAKKwlAZWNobyAnc2V0IHNyY2RpciAkKHNyY2RpciknID4+c2l0ZS50bXAKKwlAZWNobyAic2V0IG9iamRpciBgcHdkYCIgPj5zaXRlLnRtcAorIyMgUXVvdGUgdGhlICpfYWxpYXMgdmFyaWFibGVzIGJlY2F1c2UgdGhleSBtaWdodCBiZSBlbXB0eS4KKz9CVUlMRD8JQGVjaG8gJ3NldCBidWlsZF9hbGlhcyAiJChidWlsZF9hbGlhcykiJyA+PnNpdGUudG1wCis/QlVJTEQ/CUBlY2hvICdzZXQgYnVpbGRfdHJpcGxldCAkKGJ1aWxkX3RyaXBsZXQpJyA+PnNpdGUudG1wCis/SE9TVD8JQGVjaG8gJ3NldCBob3N0X2FsaWFzICIkKGhvc3RfYWxpYXMpIicgPj5zaXRlLnRtcAorP0hPU1Q/CUBlY2hvICdzZXQgaG9zdF90cmlwbGV0ICQoaG9zdF90cmlwbGV0KScgPj5zaXRlLnRtcAorP1RBUkdFVD8JQGVjaG8gJ3NldCB0YXJnZXRfYWxpYXMgIiQodGFyZ2V0X2FsaWFzKSInID4+c2l0ZS50bXAKKz9UQVJHRVQ/CUBlY2hvICdzZXQgdGFyZ2V0X3RyaXBsZXQgJCh0YXJnZXRfdHJpcGxldCknID4+c2l0ZS50bXAKKwlAZWNobyAnIyMgQWxsIHZhcmlhYmxlcyBhYm92ZSBhcmUgZ2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gRG8gTm90IEVkaXQgIyMnID4+c2l0ZS50bXAKKwlAdGVzdCAhIC1mIHNpdGUuZXhwIHx8IFwKKwkgIHNlZCAnMSwvXiMjIEFsbCB2YXJpYWJsZXMgYWJvdmUgYXJlLiojIy8gZCcgc2l0ZS5leHAgPj4gc2l0ZS50bXAKKwlALXJtIC1mIHNpdGUuYmFrCisJQHRlc3QgISAtZiBzaXRlLmV4cCB8fCBtdiBzaXRlLmV4cCBzaXRlLmJhaworCUBtdiBzaXRlLnRtcCBzaXRlLmV4cAorCisjIyAtLS0tLS0tLS0tICMjCisjIyBDbGVhbmluZy4gICMjCisjIyAtLS0tLS0tLS0tICMjCisKKy5QSE9OWSBkaXN0Y2xlYW4tYW06IGRpc3RjbGVhbi1ERUpBR05VCisKK2Rpc3RjbGVhbi1ERUpBR05VOgorIyMgQW55IG90aGVyIGNsZWFuaW5nIG11c3QgYmUgZG9uZSBieSB0aGUgdXNlciBvciBieSB0aGUgdGVzdCBzdWl0ZQorIyMgaXRzZWxmLiAgV2UgY2FuJ3QgcHJlZGljdCB3aGF0IGRlamFnbnUgb3IgdGhlIHRlc3Qgc3VpdGUgbWlnaHQKKyMjIGdlbmVyYXRlLgorCS1ybSAtZiBzaXRlLmV4cCBzaXRlLmJhaworCS1sPSckKERFSkFUT09MKSc7IGZvciB0b29sIGluICQkbDsgZG8gXAorCSAgcm0gLWYgJCR0b29sLnN1bSAkJHRvb2wubG9nOyBcCisJZG9uZQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9kZXBlbmQuYW0gYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2RlcGVuZC5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzY1ZDcxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9kZXBlbmQuYW0KQEAgLTAsMCArMSwyOCBAQAorIyMgYXV0b21ha2UgLSBjcmVhdGUgTWFrZWZpbGUuaW4gZnJvbSBNYWtlZmlsZS5hbQorIyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAxLCAyMDAzLCAyMDA4CisjIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCithbV9fbXYgPSBtdiAtZgorCisjIyBUaGlzIE1ha2VmaWxlIGRlcGVuZHMgb24gRGVwZGlycycgZmlsZXMsIHNvIHdlIHNob3VsZCBuZXZlcgorIyMgZXJhc2UgdGhlbSBpbiAtYW0gb3IgLXJlY3Vyc2l2ZSBydWxlczsgdGhhdCB3b3VsZCBwcmV2ZW50IGFueSBvdGhlcgorIyMgcnVsZXMgZnJvbSBiZWluZyByZWN1cnNpdmUgKGZvciBpbnN0YW5jZSBtdWx0aWxpYiBjbGVhbiBydWxlcyBhcmUKKyMjIHJlY3Vyc2l2ZSkuCitkaXN0Y2xlYW46CisJLXJtIC1yZiAlREVQRElSUyUKKworbWFpbnRhaW5lci1jbGVhbjoKKwktcm0gLXJmICVERVBESVJTJQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9kZXBlbmQyLmFtIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9kZXBlbmQyLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NzRmZWUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2RlcGVuZDIuYW0KQEAgLTAsMCArMSwxNDIgQEAKKyMjIGF1dG9tYWtlIC0gY3JlYXRlIE1ha2VmaWxlLmluIGZyb20gTWFrZWZpbGUuYW0KKyMjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMjIDIwMDMsIDIwMDQsIDIwMDYsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMjIFRoaXMgZmlsZSBpcyByZWFkIHNldmVyYWwgdGltZXM6CisjIyAtIG9uY2UgcGVyICpleHRlbnNpb24qIChub3QgcGVyIGxhbmd1YWdlKSBmb3IgZ2VuZXJpYyBjb21waWxhdGlvbiBydWxlcworIyMgLSBvbmNlIGZvciBlYWNoIGZpbGUgd2hpY2ggcmVxdWlyZXMgc3BlY2lmaWMgZmxhZ3MuCisKKyMjIE5vdGUgaXQgaXMgb24gcHVycG9zZSB3ZSB3cm90ZSBgaWYgJUFNREVQJScsIHNpbmNlOgorIyMKKyMjIC0gaWYgZGVwcyBhcmUgdHVybmVkIG9mZiwgJUFNREVQJSBpcyBtYXBwZWQgb250byBGQUxTRSwgYW5kIHRoZXJlZm9yZQorIyMgICB0aGUgYGlmIEZBTFNFJyBjaHVuayBpcyByZW1vdmVkIChhdXRvbWFrZS10aW1lIGNvbmRpdGlvbmFscykuCisjIworIyMgLSBpZiBkZXBzIGFyZSBvbiwgJUFNREVQJSBpcyBtYXBwZWQgb250byBBTURFUCwgIGFuZCB0aGVyZWZvcmUKKyMjICAgdGhlIGBpZiBBTURFUCcgY2h1bmsgaXMgcHJlZml4IHdpdGggQEFNREVQX1RSVUVAIGp1c3QgbGlrZSBmb3IgYW55CisjIyAgIG90aGVyIGNvbmZpZ3VyZS10aW1lIGNvbmRpdGlvbmFsLgorIyMKKyMjIFdlIGRvIGxpa2V3aXNlIGZvciAlRkFTVERFUCU7IHRoaXMgZXhwYW5kcyB0byBhbiBvcmRpbmFyeQorIyMgY29uZmlndXJlLXRpbWUgY29uZGl0aW9uYWwuICAlRkFTVERFUCUgaXMgdXNlZCB0byBzcGVlZCB1cCB0aGUKKyMjIGNvbW1vbiBjYXNlIG9mIGJ1aWxkaW5nIGEgcGFja2FnZSB3aXRoIGdjYyAzLnguICBJbiB0aGlzIGNhc2Ugd2UKKyMjIGNhbiBza2lwIHRoZSB1c2Ugb2YgZGVwY29tcCBhbmQgZWFzaWx5IGlubGluZSB0aGUgZGVwZW5kZW5jeQorIyMgdHJhY2tpbmcuCisKKyMjIFZlcmJvc2l0eSBvZiBGQVNUREVQIHJ1bGVzCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyMgKDEpIFNvbWUgcGVvcGxlIHdhbnQgdG8gc2VlIHdoYXQgaGFwcGVucyBkdXJpbmcgbWFrZS4gIFRoZXkgdGhpbmsKKyMjICAgICBALWNvbW1hbmRzIGFyZSBldmlsIGJlY2F1c2UgaGlkaW5nIHRoaW5ncyBoaW5kZXJzIGRlYnVnZ2luZy4KKyMjICgyKSBPdGhlciBwZW9wbGUgd2FudCB0byBzZWUgb25seSB0aGUgaW1wb3J0YW50IGNvbW1hbmRzLS10aG9zZSB0aGF0CisjIyAgICAgbWF5IHByb2R1Y2UgZGlhZ25vc3RpY3MsIHN1Y2ggYXMgY29tcGlsZXIgaW52b2NhdGlvbnMuICBUaGV5CisjIyAgICAgZG8gbm90IGNhcmUgYWJvdXQgYnVpbGQgZGV0YWlscyBzdWNoIGFzIGRlcGVuZGVuY3kgZ2VuZXJhdGlvbgorIyMgICAgICh0aGUgaWYvdGhlbi9lbHNlIG1hY2hpbmVyeSBpbiBGQVNUREVQIHJ1bGVzKS4gIFRoZWlyIHBvaW50IGlzCisjIyAgICAgdGhhdCBpdCBpcyBoYXJkIHRvIHNwb3QgZGlhZ25vc3RpY3MgaW4gYSB2ZXJib3NlIG91dHB1dC4KKyMjICgzKSBPdGhlciBwZW9wbGUgd2FudCBgbWFrZSAtcycgdG8gd29yayBhcyBleHBlY3RlZDogc2lsZW50bHkuCisjIyAgICAgVGhpcyB3YXkgdGhleSBjYW4gc3BvdCBhbnkgZGlhZ25vc3RpYyByZWFsbHkgZWFzaWx5LgorIyMKKyMjIFRoZSBzZWNvbmQgcG9pbnQgc3VnZ2VzdHMgd2UgaGlkZSBydWxlcyB3aXRoIEAgYW5kIHRoYXQgd2UgYGVjaG8nCisjIyBvbmx5IHRoZSByZWxldmFudCBwYXJ0cy4gIEhvd2V2ZXIgdGhpcyBnb2VzIGFnYWluc3QgdGhlIHR3byBvdGhlcnMuCisjIyBUaGVyZSBhcmUgcmVndWxhciBjb21wbGFpbnRzIGFib3V0IHRoaXMgb24gdGhlIG1haWxpbmcgbGlzdCwgYnV0CisjIyBpdCdzIGhhcmQgdG8gcGxlYXNlIGV2ZXJ5Ym9keS4gIE9uIEFwcmlsIDIwMDMsIFdpbGxpYW0gRnVsdG9uIChmcm9tCisjIyBjbGFuICgzKSkgYW5kIEthcmwgQmVycnkgKGZyb20gY2xhbiAoMikpIGFncmVlZCB0aGF0IGZvbGRpbmcgdGhlCisjIyBjb21waWxlIHJ1bGVzIHNvIHRoYXQgdGhleSBhcmUgb3V0cHV0IG9uIGEgc2luZ2xlIGxpbmUgKGluc3RlYWQgb2YgNSkKKyMjIHdvdWxkIGJlIGEgZ29vZCBjb21wcm9taXNlLiAgQWN0dWFsbHkgd2UgdXNlIHR3byBsaW5lcyByYXRoZXIgdGhhbiBvbmUsCisjIyBiZWNhdXNlIHRoaXMgd2F5ICVTT1VSQ0UlIGlzIGFsd2F5cyBsb2NhdGVkIGF0IHRoZSBlbmQgb2YgdGhlIGZpcnN0CisjIyBsaW5lIGFuZCBpcyB0aGVyZWZvcmUgZWFzaWVyIHRvIHNwb3QuICAoV2UgbmVlZCBhbiBleHRyYSBsaW5lIHdoZW4KKyMjIGRlcGJhc2UgaXMgdXNlZC4pCisKK2lmICU/Tk9OTElCVE9PTCUKKz9HRU5FUklDPyVFWFQlLm86Cis/IUdFTkVSSUM/JU9CSiU6ICVTT1VSQ0UlCitpZiAlRkFTVERFUCUKKyMjIEluIGZhc3QtZGVwIG1vZGUsIHdlIGNhbiBhbHdheXMgdXNlIC1vLgorIyMgRm9yIG5vbi1zdWZmaXggcnVsZXMsIHdlIG11c3QgZW11bGF0ZSBhIFZQQVRIIHNlYXJjaCBvbiAlU09VUkNFJS4KKz8hR0VORVJJQz8JJVZFUkJPU0UlJUNPTVBJTEUlIC1NVCAlT0JKJSAtTUQgLU1QIC1NRiAlREVQQkFTRSUuVHBvICUtYyUgLW8gJU9CSiUgJVNPVVJDRUZMQUclYHRlc3QgLWYgJyVTT1VSQ0UlJyB8fCBlY2hvICckKHNyY2RpcikvJ2AlU09VUkNFJQorPyFHRU5FUklDPwklU0lMRU5UJSQoYW1fX212KSAlREVQQkFTRSUuVHBvICVERVBCQVNFJS5QbworP0dFTkVSSUM/PyFTVUJESVJPQko/CSVWRVJCT1NFJSVDT01QSUxFJSAtTVQgJU9CSiUgLU1EIC1NUCAtTUYgJURFUEJBU0UlLlRwbyAlLWMlIC1vICVPQkolICVTT1VSQ0VGTEFHJSVTT1VSQ0UlCis/R0VORVJJQz8/IVNVQkRJUk9CSj8JJVNJTEVOVCUkKGFtX19tdikgJURFUEJBU0UlLlRwbyAlREVQQkFTRSUuUG8KKz9HRU5FUklDPz9TVUJESVJPQko/CSVWRVJCT1NFJWRlcGJhc2U9YGVjaG8gJU9CSiUgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAorP0dFTkVSSUM/P1NVQkRJUk9CSj8JJUNPTVBJTEUlIC1NVCAlT0JKJSAtTUQgLU1QIC1NRiAlREVQQkFTRSUuVHBvICUtYyUgLW8gJU9CSiUgJVNPVVJDRUZMQUclJVNPVVJDRSUgJiZcCis/R0VORVJJQz8/U1VCRElST0JKPwkkKGFtX19tdikgJURFUEJBU0UlLlRwbyAlREVQQkFTRSUuUG8KK2Vsc2UgISVGQVNUREVQJQorP1ZFUkJPU0U/CSVWRVJCT1NFJSBAQU1fQkFDS1NMQVNIQAoraWYgJUFNREVQJQorCXNvdXJjZT0nJVNPVVJDRSUnIG9iamVjdD0nJU9CSiUnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorCURFUERJUj0kKERFUERJUikgJCglRlBGWCVERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK2VuZGlmICVBTURFUCUKK2lmICU/R0VORVJJQyUKKz8tbz8JJUNPTVBJTEUlICUtYyUgJS1vJSAlT0JKJSAlU09VUkNFRkxBRyUlU09VUkNFJQorPyEtbz8JJUNPTVBJTEUlICUtYyUgJVNPVVJDRUZMQUclJVNPVVJDRSUKK2Vsc2UgISU/R0VORVJJQyUKKyMjIEZvciBub24tc3VmZml4IHJ1bGVzLCB3ZSBtdXN0IGVtdWxhdGUgYSBWUEFUSCBzZWFyY2ggb24gJVNPVVJDRSUuCis/LW8/CSVDT01QSUxFJSAlLWMlICUtbyUgJU9CSiUgJVNPVVJDRUZMQUclYHRlc3QgLWYgJyVTT1VSQ0UlJyB8fCBlY2hvICckKHNyY2RpcikvJ2AlU09VUkNFJQorPyEtbz8JJUNPTVBJTEUlICUtYyUgJVNPVVJDRUZMQUclYHRlc3QgLWYgJyVTT1VSQ0UlJyB8fCBlY2hvICckKHNyY2RpcikvJ2AlU09VUkNFJQorZW5kaWYgISU/R0VORVJJQyUKK2VuZGlmICElRkFTVERFUCUKKworP0dFTkVSSUM/JUVYVCUub2JqOgorPyFHRU5FUklDPyVPQkpPQkolOiAlU09VUkNFJQoraWYgJUZBU1RERVAlCisjIyBJbiBmYXN0LWRlcCBtb2RlLCB3ZSBjYW4gYWx3YXlzIHVzZSAtby4KKyMjIEZvciBub24tc3VmZml4IHJ1bGVzLCB3ZSBtdXN0IGVtdWxhdGUgYSBWUEFUSCBzZWFyY2ggb24gJVNPVVJDRSUuCis/IUdFTkVSSUM/CSVWRVJCT1NFJSVDT01QSUxFJSAtTVQgJU9CSk9CSiUgLU1EIC1NUCAtTUYgJURFUEJBU0UlLlRwbyAlLWMlIC1vICVPQkpPQkolICVTT1VSQ0VGTEFHJWBpZiB0ZXN0IC1mICclU09VUkNFJSc7IHRoZW4gJChDWUdQQVRIX1cpICclU09VUkNFJSc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJVNPVVJDRSUnOyBmaWAKKz8hR0VORVJJQz8JJVNJTEVOVCUkKGFtX19tdikgJURFUEJBU0UlLlRwbyAlREVQQkFTRSUuUG8KKz9HRU5FUklDPz8hU1VCRElST0JKPwklVkVSQk9TRSUlQ09NUElMRSUgLU1UICVPQkpPQkolIC1NRCAtTVAgLU1GICVERVBCQVNFJS5UcG8gJS1jJSAtbyAlT0JKT0JKJSAlU09VUkNFRkxBRyVgJChDWUdQQVRIX1cpICclU09VUkNFJSdgCis/R0VORVJJQz8/IVNVQkRJUk9CSj8JJVNJTEVOVCUkKGFtX19tdikgJURFUEJBU0UlLlRwbyAlREVQQkFTRSUuUG8KKz9HRU5FUklDPz9TVUJESVJPQko/CSVWRVJCT1NFJWRlcGJhc2U9YGVjaG8gJU9CSiUgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCis/R0VORVJJQz8/U1VCRElST0JKPwklQ09NUElMRSUgLU1UICVPQkpPQkolIC1NRCAtTVAgLU1GICVERVBCQVNFJS5UcG8gJS1jJSAtbyAlT0JKT0JKJSAlU09VUkNFRkxBRyVgJChDWUdQQVRIX1cpICclU09VUkNFJSdgICYmXAorP0dFTkVSSUM/P1NVQkRJUk9CSj8JJChhbV9fbXYpICVERVBCQVNFJS5UcG8gJURFUEJBU0UlLlBvCitlbHNlICElRkFTVERFUCUKKz9WRVJCT1NFPwklVkVSQk9TRSUgQEFNX0JBQ0tTTEFTSEAKK2lmICVBTURFUCUKKwlzb3VyY2U9JyVTT1VSQ0UlJyBvYmplY3Q9JyVPQkpPQkolJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKwlERVBESVI9JChERVBESVIpICQoJUZQRlglREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitlbmRpZiAlQU1ERVAlCitpZiAlP0dFTkVSSUMlCis/LW8/CSVDT01QSUxFJSAlLWMlICUtbyUgJU9CSk9CSiUgJVNPVVJDRUZMQUclYCQoQ1lHUEFUSF9XKSAnJVNPVVJDRSUnYAorPyEtbz8JJUNPTVBJTEUlICUtYyUgYCQoQ1lHUEFUSF9XKSAlU09VUkNFRkxBRyUnJVNPVVJDRSUnYAorZWxzZSAhJT9HRU5FUklDJQorIyMgRm9yIG5vbi1zdWZmaXggcnVsZXMsIHdlIG11c3QgZW11bGF0ZSBhIFZQQVRIIHNlYXJjaCBvbiAlU09VUkNFJS4KKz8tbz8JJUNPTVBJTEUlICUtYyUgJS1vJSAlT0JKT0JKJSAlU09VUkNFRkxBRyVgaWYgdGVzdCAtZiAnJVNPVVJDRSUnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJVNPVVJDRSUnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyVTT1VSQ0UlJzsgZmlgCis/IS1vPwklQ09NUElMRSUgJS1jJSAlU09VUkNFRkxBRyVgaWYgdGVzdCAtZiAnJVNPVVJDRSUnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJVNPVVJDRSUnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyVTT1VSQ0UlJzsgZmlgCitlbmRpZiAhJT9HRU5FUklDJQorZW5kaWYgISVGQVNUREVQJQorZW5kaWYgJT9OT05MSUJUT09MJQorCitpZiAlP0xJQlRPT0wlCis/R0VORVJJQz8lRVhUJS5sbzoKKz8hR0VORVJJQz8lTFRPQkolOiAlU09VUkNFJQoraWYgJUZBU1RERVAlCisjIyBJbiBmYXN0LWRlcCBtb2RlLCB3ZSBjYW4gYWx3YXlzIHVzZSAtby4KKyMjIEZvciBub24tc3VmZml4IHJ1bGVzLCB3ZSBtdXN0IGVtdWxhdGUgYSBWUEFUSCBzZWFyY2ggb24gJVNPVVJDRSUuCis/IUdFTkVSSUM/CSVWRVJCT1NFJSVMVENPTVBJTEUlIC1NVCAlTFRPQkolIC1NRCAtTVAgLU1GICVERVBCQVNFJS5UcG8gJS1jJSAtbyAlTFRPQkolICVTT1VSQ0VGTEFHJWB0ZXN0IC1mICclU09VUkNFJScgfHwgZWNobyAnJChzcmNkaXIpLydgJVNPVVJDRSUKKz8hR0VORVJJQz8JJVNJTEVOVCUkKGFtX19tdikgJURFUEJBU0UlLlRwbyAlREVQQkFTRSUuUGxvCis/R0VORVJJQz8/IVNVQkRJUk9CSj8JJVZFUkJPU0UlJUxUQ09NUElMRSUgLU1UICVMVE9CSiUgLU1EIC1NUCAtTUYgJURFUEJBU0UlLlRwbyAlLWMlIC1vICVMVE9CSiUgJVNPVVJDRUZMQUclJVNPVVJDRSUKKz9HRU5FUklDPz8hU1VCRElST0JKPwklU0lMRU5UJSQoYW1fX212KSAlREVQQkFTRSUuVHBvICVERVBCQVNFJS5QbG8KKz9HRU5FUklDPz9TVUJESVJPQko/CSVWRVJCT1NFJWRlcGJhc2U9YGVjaG8gJU9CSiUgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKKz9HRU5FUklDPz9TVUJESVJPQko/CSVMVENPTVBJTEUlIC1NVCAlTFRPQkolIC1NRCAtTVAgLU1GICVERVBCQVNFJS5UcG8gJS1jJSAtbyAlTFRPQkolICVTT1VSQ0VGTEFHJSVTT1VSQ0UlICYmXAorP0dFTkVSSUM/P1NVQkRJUk9CSj8JJChhbV9fbXYpICVERVBCQVNFJS5UcG8gJURFUEJBU0UlLlBsbworZWxzZSAhJUZBU1RERVAlCis/VkVSQk9TRT8JJVZFUkJPU0UlIEBBTV9CQUNLU0xBU0hACitpZiAlQU1ERVAlCisJc291cmNlPSclU09VUkNFJScgb2JqZWN0PSclTFRPQkolJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisJREVQRElSPSQoREVQRElSKSAkKCVGUEZYJURFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorZW5kaWYgJUFNREVQJQorIyMgV2UgY2FuIGFsd2F5cyB1c2UgYC1vJyB3aXRoIExpYnRvb2wuCis/R0VORVJJQz8JJUxUQ09NUElMRSUgJS1jJSAtbyAlTFRPQkolICVTT1VSQ0VGTEFHJSVTT1VSQ0UlCisjIyBGb3Igbm9uLXN1ZmZpeCBydWxlcywgd2UgbXVzdCBlbXVsYXRlIGEgVlBBVEggc2VhcmNoIG9uICVTT1VSQ0UlLgorPyFHRU5FUklDPwklTFRDT01QSUxFJSAlLWMlIC1vICVMVE9CSiUgJVNPVVJDRUZMQUclYHRlc3QgLWYgJyVTT1VSQ0UlJyB8fCBlY2hvICckKHNyY2RpcikvJ2AlU09VUkNFJQorZW5kaWYgISVGQVNUREVQJQorZW5kaWYgJT9MSUJUT09MJQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9kaXN0ZGlyLmFtIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9kaXN0ZGlyLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNGQ1ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2Rpc3RkaXIuYW0KQEAgLTAsMCArMSw1NDIgQEAKKyMjIGF1dG9tYWtlIC0gY3JlYXRlIE1ha2VmaWxlLmluIGZyb20gTWFrZWZpbGUuYW0KKyMjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOQorIyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyMgRElTVF9DT01NT04gY29tZXMgZmlyc3Qgc28gdGhhdCBSRUFETUUgY2FuIGJlIHRoZSB2ZXJ5IGZpcnN0IGZpbGUuCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorCitpZiAlP1RPUERJUl9QJQorZGlzdGRpciA9ICQoUEFDS0FHRSktJChWRVJTSU9OKQordG9wX2Rpc3RkaXIgPSAkKGRpc3RkaXIpCisKK2FtX19yZW1vdmVfZGlzdGRpciA9IFwKKyAgeyB0ZXN0ICEgLWQgIiQoZGlzdGRpcikiIFwKKyAgICB8fCB7IGZpbmQgIiQoZGlzdGRpcikiIC10eXBlIGQgISAtcGVybSAtMjAwIC1leGVjIGNobW9kIHUrdyB7fSAnOycgXAorICAgICAgICAgJiYgcm0gLWZyICIkKGRpc3RkaXIpIjsgfTsgfQorCitlbmRpZiAlP1RPUERJUl9QJQorCitpZiAlP1NVQkRJUlMlCisjIyBjb21wdXRlcyBhIHJlbGF0aXZlIHBhdGhuYW1lIFJFTERJUiBzdWNoIHRoYXQgRElSMS9SRUxESVIgPSBESVIyLgorIyMgSW5wdXQ6CisjIyAtIERJUjEgICAgICAgICAgICByZWxhdGl2ZSBwYXRobmFtZSwgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5CisjIyAtIERJUjIgICAgICAgICAgICByZWxhdGl2ZSBwYXRobmFtZSwgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5CisjIyBPdXRwdXQ6CisjIyAtIHJlbGRpciAgICAgICAgICByZWxhdGl2ZSBwYXRobmFtZSBvZiBESVIyLCByZWxhdGl2ZSB0byBESVIxCithbV9fcmVsYXRpdml6ZSA9IFwKKyAgZGlyMD1gcHdkYDsgXAorICBzZWRfZmlyc3Q9J3MsXlwoW14vXSpcKS8uKiQkLFwxLCc7IFwKKyAgc2VkX3Jlc3Q9J3MsXlteL10qLyosLCc7IFwKKyAgc2VkX2xhc3Q9J3MsXi4qL1woW14vXSpcKSQkLFwxLCc7IFwKKyAgc2VkX2J1dGxhc3Q9J3MsLypbXi9dKiQkLCwnOyBcCisgIHdoaWxlIHRlc3QgLW4gIiQkZGlyMSI7IGRvIFwKKyAgICBmaXJzdD1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAorICAgIGlmIHRlc3QgIiQkZmlyc3QiICE9ICIuIjsgdGhlbiBcCisgICAgICBpZiB0ZXN0ICIkJGZpcnN0IiA9ICIuLiI7IHRoZW4gXAorICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9sYXN0ImAvIiQkZGlyMiI7IFwKKyAgICAgICAgZGlyMD1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfYnV0bGFzdCJgOyBcCisgICAgICBlbHNlIFwKKyAgICAgICAgZmlyc3QyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCisgICAgICAgIGlmIHRlc3QgIiQkZmlyc3QyIiA9ICIkJGZpcnN0IjsgdGhlbiBcCisgICAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCisgICAgICAgIGVsc2UgXAorICAgICAgICAgIGRpcjI9Ii4uLyQkZGlyMiI7IFwKKyAgICAgICAgZmk7IFwKKyAgICAgICAgZGlyMD0iJCRkaXIwIi8iJCRmaXJzdCI7IFwKKyAgICAgIGZpOyBcCisgICAgZmk7IFwKKyAgICBkaXIxPWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKKyAgZG9uZTsgXAorICByZWxkaXI9IiQkZGlyMiIKK2VuZGlmICU/U1VCRElSUyUKKworLlBIT05ZOiBkaXN0ZGlyCitpZiAlP1NVQkRJUlMlCitBTV9SRUNVUlNJVkVfVEFSR0VUUyArPSBkaXN0ZGlyCitlbmRpZiAlP1NVQkRJUlMlCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorIyMKKyMjIEZvciBHbml0cyB1c2VycywgdGhpcyBpcyBwcmV0dHkgaGFuZHkuICBMb29rIGF0IDE1IGxpbmVzCisjIyBpbiBjYXNlIHNvbWUgZXhwbGFuYXRvcnkgdGV4dCBpcyBkZXNpcmFibGUuCisjIworaWYgJT9UT1BESVJfUCUKK2lmICAlP0NLLU5FV1MlCisJQGNhc2UgYHNlZCAxNXEgJChzcmNkaXIpL05FV1NgIGluIFwKKwkqIiQoVkVSU0lPTikiKikgOiA7OyBcCisJKikgXAorCSAgZWNobyAiTkVXUyBub3QgdXBkYXRlZDsgbm90IHJlbGVhc2luZyIgMT4mMjsgXAorCSAgZXhpdCAxOzsgXAorCWVzYWMKK2VuZGlmICAlP0NLLU5FV1MlCitlbmRpZiAlP1RPUERJUl9QJQorIyMKKyMjIGBtaXNzaW5nIGhlbHAybWFuJyBtYXkgaGF2ZSBjcmVhdGVkIHNvbWUgYm9ndXMgbWFuIHBhZ2VzLiAgRW5zdXJlIHRoZXkKKyMjIGFyZSBub3QgZGlzdHJpYnV0ZWQuCisjIworaWYgJT9JTlNUQUxMLU1BTiUKK2lmICU/SEFWRS1NQU5TJQorCUBsaXN0PSckKE1BTlMpJzsgaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCisJICBsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisjIyBOb3RlIHRoYXQgd2UgY2hlY2sgZXhpc3RpbmcgbWFuIHBhZ2VzIGhlcmUgb25seS4gIElmIHRoZXJlIGFyZSBtYW4gcGFnZXMKKyMjIHdoaWNoIGFyZSBub3QgZGlzdHJpYnV0ZWQsIGFuZCBtYXkgYmUgZ2VuZXJhdGVkIG9ubHkgY29uZGl0aW9uYWxseSwgdGhlbgorIyMgd2Ugc2hvdWxkIG5vdCBlcnJvciBvdXQgYmVjYXVzZSBvZiB0aGVtLiAgVGhpcyBjb3VsZCBiZSByZWZpbmVkIHRvIHRha2UKKyMjIGludG8gYWNjb3VudCBvbmx5IGRpc3RfKl9NQU5TLCBidXQgdGhlbiB3ZSdkIGJlIG1pc3Npbmcgb3V0IG9uIHRob3NlCisjIyB0aGUgdXNlciBkaXN0cmlidXRlcyB3aXRoIEVYVFJBX0RJU1QuCisJICAgIGlmIHRlc3QgLWYgIiQkZCQkcCI7IHRoZW4gZWNobyAiJCRkJCRwIjsgZWxzZSA6OyBmaTsgZG9uZWA7IFwKKwkgIGlmIHRlc3QgLW4gIiQkbGlzdCIgJiYgXAorCSAgICBncmVwICdhYiBoZWxwMm1hbiBpcyByZXF1aXJlZCB0byBnZW5lcmF0ZSB0aGlzIHBhZ2UnICQkbGlzdCA+L2Rldi9udWxsOyB0aGVuIFwKKwkgICAgZWNobyAiZXJyb3I6IGZvdW5kIG1hbiBwYWdlcyBjb250YWluaW5nIHRoZSBcYG1pc3NpbmcgaGVscDJtYW4nIHJlcGxhY2VtZW50IHRleHQ6IiA+JjI7IFwKKwkgICAgZ3JlcCAtbCAnYWIgaGVscDJtYW4gaXMgcmVxdWlyZWQgdG8gZ2VuZXJhdGUgdGhpcyBwYWdlJyAkJGxpc3QgfCBzZWQgJ3MvXi8gICAgICAgICAvJyA+JjI7IFwKKwkgICAgZWNobyAiICAgICAgIHRvIGZpeCB0aGVtLCBpbnN0YWxsIGhlbHAybWFuLCByZW1vdmUgYW5kIHJlZ2VuZXJhdGUgdGhlIG1hbiBwYWdlczsiID4mMjsgXAorCSAgICBlY2hvICIgICAgICAgdHlwaWNhbGx5IFxgbWFrZSBtYWludGFpbmVyLWNsZWFuJyB3aWxsIHJlbW92ZSB0aGVtIiA+JjI7IFwKKwkgICAgZXhpdCAxOyBcCisJICBlbHNlIDo7IGZpOyBcCisJZWxzZSA6OyBmaQorZW5kaWYgJT9IQVZFLU1BTlMlCitlbmRpZiAlP0lOU1RBTEwtTUFOJQorIyMKKyMjIE9ubHkgZm9yIHRoZSB0b3AgZGlyLgorIyMKK2lmICU/VE9QRElSX1AlCisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisJdGVzdCAtZCAiJChkaXN0ZGlyKSIgfHwgbWtkaXIgIiQoZGlzdGRpcikiCitlbmRpZiAlP1RPUERJUl9QJQorIyMKKyMjCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKyMjCisjIyBZZXQgYW5vdGhlciBoYWNrIHRvIHN1cHBvcnQgU1VOIG1ha2UuCisjIworIyMgTGV0J3MgYXNzdW1lIGBmb28nIGFwcGVhcnMgaW4gRElTVEZJTEVTIGFuZCBpcyBub3QgYSBidWlsdCBmaWxlLgorIyMgV2hlbiBidWlsZGluZyB3aXRoIFZQQVRIPSQoc3JjZGlyKSwgU1VOIG1ha2UgYW5kIE9TRjEvVHJ1NjQgd2lsbAorIyMgcmV3cml0ZSBgZm9vJyBhcyBgJChzcmNkaXIpL2ZvbycuICBBbiBhdHRlbXB0IHRvIGluc3RhbGwgdGhlIGZpbGUKKyMjIHdpdGgKKyMjICAgIGNwICRmaWxlICQoZGlzdGRpcikvJGZpbGUKKyMjIHdpbGwgdGh1cyBpbnN0YWxsICQoc3JjZGlyKS9mb28gYXMgJChkaXN0ZGlyKS8kKHNyY2RpcikvZm9vCisjIyBpbnN0ZWFkIG9mICQoZGlzdGRpcikvZm9vLgorIyMKKyMjIFNvIGxldCdzIHN0cmlwIHRoaXMgbGVhZGluZyAkKHNyY2RpcikvIHdoZW4gaXQgZXhpc3RzLiAgKEFzIGZhciB3ZQorIyMga25vdywgb25seSBTVU4gbWFrZSBhbmQgT1NGMS9UcnU2NCBtYWtlIGFkZCBpdC4pICBTZWFyY2hpbmcgd2hldGhlcgorIyMgdGhlIGZpbGUgaXMgdG8gYmUgZm91bmQgaW4gdGhlIHNvdXJjZSBvciBidWlsZCBkaXJlY3Rvcnkgd2lsbCBiZQorIyMgZG9uZSBsYXRlci4KKyMjCisjIyBJbiBjYXNlIHdlIGFyZSBfbm90XyB1c2luZyBTVU4gb3IgT1NGMS9UcnU2NCBtYWtlLCBob3cgY2FuIHdlIGJlIHN1cmUKKyMjIHdlIGFyZSBub3Qgc3RyaXBwaW5nIGEgbGVnaXRpbWF0ZSBmaWxlbmFtZSB0aGF0IHN0YXJ0cyB3aXRoIHRoZQorIyMgc2FtZSBwYXR0ZXJuIGFzICQoc3JjZGlyKT8KKyMjIFdlbGwsIGl0IGNhbid0IGhhcHBlbiB3aXRob3V0IHRoZSBNYWtlZmlsZSBhdXRob3IgZGlzdHJpYnV0aW5nCisjIyBzb21ldGhpbmcgb3V0IG9mIHRoZSBkaXN0cmlidXRpb24gKHdoaWNoIGlzIGJhZCkuICAgQXMgYW4gZXhhbXBsZSwKKyMjIGNvbnNpZGVyIGBFWFRSQV9ESVNUID0gLi4vYmFyJy4gIFRoaXMgaXMgYW4gaXNzdWUgaWYgJHNyY2RpciBpcyBgLi4nLAorIyMgaG93ZXZlciBnZXR0aW5nIHRoaXMgdmFsdWUgZm9yIHNyY2RpciBpcyBpbXBvc3NpYmxlOiBgRVhUUkFfRElTVCA9IC4uL2JhcicKKyMjIGltcGxpZXMgd2UgYXJlIGluIGEgc3ViZGlyZWN0b3J5IChzbyBgLi4vYmFyJyBpcyB3aXRoaW4gdGhlIHBhY2thZ2UpLAorIyMgaGVuY2UgYCRzcmNkaXInIGlzIHNvbWV0aGluZyBsaWtlIGAuLi8uLi9zdWJkaXInLgorIyMKKyMjIFRoZXJlIGlzIG1vcmUgdG8gc2F5IGFib3V0IGZpbGVzIHdoaWNoIGFyZSBhYm92ZSB0aGUgY3VycmVudCBkaXJlY3RvcnksCisjIyBsaWtlIGAuLi9iYXInIGluIHRoZSBwcmV2aW91cyBleGFtcGxlLiAgVGhlIE9TRjEvVHJ1NjQgbWFrZQorIyMgaW1wbGVtZW50YXRpb24gY2FuIHNpbXBsaWZ5IGZpbGVuYW1lcyByZXN1bHRpbmcgZnJvbSBhIFZQQVRIIGxvb2t1cC4KKyMjIEZvciBpbnN0YW5jZSBpZiBgVlBBVEggPSAuLi8uLi9zdWJkaXInIGFuZCBgLi4vYmFyJyBpcyBmb3VuZCBpbiB0aGF0CisjIyBWUEFUSCBkaXJlY3RvcnksIHRoZW4gb2NjdXJyZW5jZXMgb2YgYC4uL2Jhcicgd2lsbCBiZSByZXBsYWNlZCBieQorIyMgYC4uLy4uL2JhcicgKGluc3RlYWQgb2YgYC4uLy4uL3N1YmRpci8uLi9iYXInKS4gIFRoaXMgb2J2aW91c2x5IGRlZmVhdHMKKyMjIGFueSBhdHRlbXB0IHRvIHN0cmlwIGEgbGVhZGluZyAkc3JjZGlyLiAgUHJlc2VudGx5IHdlIGhhdmUgbm8gd29ya2Fyb3VuZAorIyMgZm9yIHRoaXMuICBXZSBhdm9pZCB0aGlzIGlzc3VlIGJ5IHdyaXRpbmcgYEVYVFJBX0RJU1QgPSAkKHNyY2RpcikvLi4vYmFyJworIyMgaW5zdGVhZCBvZiBgRVhUUkFfRElTVCA9IC4uL2JhcicuICBUaGlzIHByZWZpeGluZyBpcyBuZWVkZWQgb25seSBmb3IgZmlsZXMKKyMjIGFib3ZlIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIEZvcnR1bmF0ZWx5LCBhcGFydCBmcm9tIGF1eGRpciBmaWxlcyB3aGljaAorIyMgY2FuIGJlIGxvY2F0ZWQgaW4gLi4gb3IgLi4vLi4sIHRoaXMgc2l0dWF0aW9uIGhhcmRseSBvY2N1cnMgaW4gcHJhY3RpY2UuCisjIworIyMgQWxzbyByZXdyaXRlICQodG9wX3NyY2RpcikgKHdoaWNoIHNvbWV0aW1lcyBhcHBlYXJzIGluIERJU1RGSUxFUywgYW5kIGNhbgorIyMgYmUgYWJzb2x1dGUpIGJ5ICQodG9wX2J1aWxkZGlyKSAod2hpY2ggaXMgYWx3YXlzIHJlbGF0aXZlKS4gICQoc3JjZGlyKSB3aWxsCisjIyBiZSBwcmVwZW5kZWQgbGF0ZXIuCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorIyMgKFRoZSBzZWNvbmQgYHQnIGNvbW1hbmQgY2xlYXJzIHRoZSBmbGFnIGZvciB0aGUgbmV4dCByb3VuZC4pCisjIworIyMgTWFrZSB0aGUgc3ViZGlyZWN0b3JpZXMgZm9yIHRoZSBmaWxlcy4KKyMjCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKyMjCisjIworCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorIyMKKyMjIEFsd2F5cyBsb29rIGZvciB0aGUgZmlsZSBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5IGZpcnN0LiAgVGhhdCB3YXkKKyMjIGZvciBzb21ldGhpbmcgbGlrZSB5YWNjIG91dHB1dCB3ZSB3aWxsIGNvcnJlY3RseSBwaWNrIHVwIHRoZSBsYXRlc3QKKyMjIHZlcnNpb24uICBBbHNvIGNoZWNrIGZvciBkaXJlY3RvcmllcyBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5IGZpcnN0LAorIyMgc28gb25lIGNhbiBzaGlwIGdlbmVyYXRlZCBkaXJlY3Rvcmllcy4KKyMjCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisjIworIyMgVXNlIGNwLCBub3QgbG4uICBUaGVyZSBhcmUgc2l0dWF0aW9ucyBpbiB3aGljaCAibG4iIGNhbiBmYWlsLiAgRm9yCisjIyBpbnN0YW5jZSBhIGZpbGUgdG8gZGlzdHJpYnV0ZSBjb3VsZCBhY3R1YWxseSBiZSBhIGNyb3NzLWZpbGVzeXN0ZW0KKyMjIHN5bWxpbmsgLS0gdGhpcyBjYW4gZWFzaWx5IGhhcHBlbiBpZiAiZ2V0dGV4dGl6ZSIgd2FzIHJ1biBvbiB0aGUKKyMjIGRpc3RyaWJ1dGlvbi4KKyMjCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorIyMgRG9uJ3QgbWVudGlvbiAkJGZpbGUgaW4gdGhlIGRlc3RpbmF0aW9uIGFyZ3VtZW50LCBzaW5jZSB0aGlzIGZhaWxzIGlmCisjIyB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzLiAgQWxzbywgdXNlIGAtUicgYW5kIG5vdCBgLXInLgorIyMgYC1yJyBpcyBhbG1vc3QgYWx3YXlzIGluY29ycmVjdC4KKyMjCisjIyBJZiBhIGRpcmVjdG9yeSBleGlzdHMgYm90aCBpbiBgLicgYW5kICQoc3JjZGlyKSwgdGhlbgorIyMgV2UgY29weSB0aGUgZmlsZXMgZnJvbSAkKHNyY2RpcikgZmlyc3QgYW5kIHRoZW4gaW5zdGFsbCB0aG9zZSBmcm9tCisjIyBgLicuICBUaGlzIGNhbiBoZWxwIHBlb3BsZSB3aG8gZGlzdHJpYnV0ZSBkaXJlY3RvcmllcyBtYWRlIG9mCisjIyBzb3VyY2UgZmlsZXMgX2FuZF8gZ2VuZXJhdGVkIGZpbGVzLiAgSXQgaXMgYWxzbyBpbXBvcnRhbnQgd2hlbiB0aGUKKyMjIGRpcmVjdG9yeSBleGlzdHMgb25seSBpbiAkKHNyY2RpciksIGJlY2F1c2Ugc29tZSB2ZW5kb3IgTWFrZSAoc3VjaAorIyMgYXMgVHJ1NjQpIHdpbGwgbWFnaWNhbGx5IGNyZWF0ZSBhbiBlbXB0eSBkaXJlY3RvcnkgaW4gYC4nCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisjIyBJZiB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzLCBpdCBtYXkgY29udGFpbiByZWFkLW9ubHkKKyMjIGZpbGVzLCBlLmcuLCBkdXJpbmcgYG1ha2UgZGlzdGNoZWNrJy4KKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKyMjIFRlc3QgZm9yIGZpbGUgZXhpc3RlbmNlIGJlY2F1c2Ugc29tZXRpbWVzIGEgZmlsZSBnZXRzIGluY2x1ZGVkIGluCisjIyBESVNURklMRVMgdHdpY2UuICBGb3IgZXhhbXBsZSB0aGlzIGhhcHBlbnMgd2hlbiBhIHNpbmdsZSBzb3VyY2UKKyMjIGZpbGUgaXMgdXNlZCBpbiBidWlsZGluZyBtb3JlIHRoYW4gb25lIHByb2dyYW0uCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisjIworIyMgVGVzdCBmb3IgZGlyZWN0b3J5IGV4aXN0ZW5jZSBoZXJlIGJlY2F1c2UgcHJldmlvdXMgYXV0b21ha2UKKyMjIGludm9jYXRpb24gbWlnaHQgaGF2ZSBjcmVhdGVkIHNvbWUgZGlyZWN0b3JpZXMuICBOb3RlIHRoYXQgd2UKKyMjIGV4cGxpY2l0bHkgc2V0IGRpc3RkaXIgZm9yIHRoZSBzdWJkaXIgbWFrZTsgdGhhdCBsZXRzIHVzIG1peC1uLW1hdGNoCisjIyBtYW55IGF1dG9tYWtlLXVzaW5nIHBhY2thZ2VzIGludG8gb25lIGxhcmdlIHBhY2thZ2UsIGFuZCBoYXZlICJkaXN0IgorIyMgYXQgdGhlIHRvcCBsZXZlbCBkbyB0aGUgcmlnaHQgdGhpbmcuICBJZiB3ZSdyZSBpbiB0aGUgdG9wbW9zdAorIyMgZGlyZWN0b3J5LCB0aGVuIHdlIHVzZSBgZGlzdGRpcicgaW5zdGVhZCBvZiBgdG9wX2Rpc3RkaXInOyB0aGlzIGxldHMKKyMjIHVzIHdvcmsgY29ycmVjdGx5IHdpdGggYW4gZW5jbG9zaW5nIHBhY2thZ2UuCisjIworIyMgU3BsaXQgdGhlIGxvb3AgZm9yIHRoZSBkaXJlY3RvcnkgY3JlYXRpb24gYW5kIHRoZSBvbmUgZm9yIHJlY3Vyc2lvbiwKKyMjIHNvIHRoYXQgd2l0aCBHTlUgbWFrZSAtbiwgb25seSB0aGUgbGF0dGVyIGlzIGV4ZWN1dGVkLgoraWYgJT9TVUJESVJTJQorCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCAkKE1LRElSX1ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJQGxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKGRpc3RkaXIpLyQkc3ViZGlyIjsgXAorCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorCSAgICBuZXdfZGlzdGRpcj0kJHJlbGRpcjsgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKHRvcF9kaXN0ZGlyKSI7IFwKKwkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKKwkgICAgbmV3X3RvcF9kaXN0ZGlyPSQkcmVsZGlyOyBcCisJICAgIGVjaG8gIiAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcXCI7IFwKKwkgICAgZWNobyAiICAgICBhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBhbV9fc2tpcF9tb2RlX2ZpeD06IGRpc3RkaXIpIjsgXAorCSAgICAoJChhbV9fY2QpICQkc3ViZGlyICYmIFwKKwkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICAgICAgICB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIFwKKwkgICAgICAgIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFwKKyMjIERpc2FibGUgYW1fX3JlbW92ZV9kaXN0ZGlyIHNvIHRoYXQgc3ViLXBhY2thZ2VzIGRvIG5vdCBjbGVhciBhCisjIyBkaXJlY3Rvcnkgd2UgaGF2ZSBhbHJlYWR5IGNsZWFyZWQgYW5kIG1pZ2h0IGV2ZW4gaGF2ZSBwb3B1bGF0ZWQKKyMjIChlLmcuIHNoYXJlZCBBVVggZGlyIGluIHRoZSBzdWItcGFja2FnZSkuCisJCWFtX19yZW1vdmVfZGlzdGRpcj06IFwKKyMjIERpc2FibGUgZmlsZW5hbWUgbGVuZ3RoIGNoZWNrOgorCQlhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBcCisjIyBObyBuZWVkIHRvIGZpeCBtb2RlcyBtb3JlIHRoYW4gb25jZToKKwkJYW1fX3NraXBfbW9kZV9maXg9OiBcCisJICAgICAgICBkaXN0ZGlyKSBcCisJICAgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2VuZGlmICU/U1VCRElSUyUKKyMjCisjIyBXZSBtaWdodCBoYXZlIHRvIHBlcmZvcm0gc29tZSBsYXN0IHNlY29uZCB1cGRhdGVzLCBzdWNoIGFzIHVwZGF0aW5nCisjIyBpbmZvIGZpbGVzLgorIyMgV2UgbXVzdCBleHBsaWNpdGx5IHNldCBkaXN0ZGlyIGFuZCB0b3BfZGlzdGRpciBmb3IgdGhlc2Ugc3ViLW1ha2VzLgorIyMKK2lmICU/RElTVC1UQVJHRVRTJQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgIHRvcF9kaXN0ZGlyPSIkKHRvcF9kaXN0ZGlyKSIgZGlzdGRpcj0iJChkaXN0ZGlyKSIgXAorCSAgJURJU1QtVEFSR0VUUyUKK2VuZGlmICU/RElTVC1UQVJHRVRTJQorIyMKKyMjIFRoaXMgY29tcGxleCBmaW5kIGNvbW1hbmQgd2lsbCB0cnkgdG8gYXZvaWQgY2hhbmdpbmcgdGhlIG1vZGVzIG9mCisjIyBsaW5rcyBpbnRvIHRoZSBzb3VyY2UgdHJlZSwgaW4gY2FzZSB0aGV5J3JlIGhhcmQtbGlua2VkLgorIyMKKyMjIElnbm9yZSByZXR1cm4gcmVzdWx0IGZyb20gY2htb2QsIGJlY2F1c2UgaXQgbWlnaHQgZ2l2ZSBhbiBlcnJvcgorIyMgaWYgd2UgY2htb2QgYSBzeW1saW5rLgorIyMKKyMjIEFub3RoZXIgbmFzdGluZXNzOiBpZiB0aGUgZmlsZSBpcyB1bnJlYWRhYmxlIGJ5IHVzLCB3ZSBtYWtlIGl0CisjIyByZWFkYWJsZSByZWdhcmRsZXNzIG9mIHRoZSBudW1iZXIgb2YgbGlua3MgdG8gaXQuICBUaGlzIG9ubHkKKyMjIGhhcHBlbnMgaW4gcGVydmVyc2UgY2FzZXMuCisjIworIyMgV2UgdXNlICQoaW5zdGFsbF9zaCkgYmVjYXVzZSB0aGF0IGlzIGEga25vd24tcG9ydGFibGUgd2F5IHRvIG1vZGlmeQorIyMgdGhlIGZpbGUgaW4gcGxhY2UgaW4gdGhlIHNvdXJjZSB0cmVlLgorIyMKKyMjIElmIHdlIGFyZSBiZWluZyBpbnZva2VkIHJlY3Vyc2l2ZWx5LCB0aGVuIHRoZXJlIGlzIG5vIG5lZWQgdG8gd2FsaworIyMgdGhlIHdob2xlIHN1YnRyZWUgYWdhaW4uICBUaGlzIGlzIGEgY29tcGxleGl0eSByZWR1Y3Rpb24gZm9yIGEgZGVlcAorIyMgaGllcmFyY2h5IG9mIHN1YnBhY2thZ2VzLgorIyMKK2lmICU/VE9QRElSX1AlCisJLXRlc3QgLW4gIiQoYW1fX3NraXBfbW9kZV9maXgpIiBcCisJfHwgZmluZCAiJChkaXN0ZGlyKSIgLXR5cGUgZCAhIC1wZXJtIC03NTUgXAorCQktZXhlYyBjaG1vZCB1K3J3eCxnbytyeCB7fSBcOyAtbyBcCisJICAhIC10eXBlIGQgISAtcGVybSAtNDQ0IC1saW5rcyAxIC1leGVjIGNobW9kIGErciB7fSBcOyAtbyBcCisJICAhIC10eXBlIGQgISAtcGVybSAtNDAwIC1leGVjIGNobW9kIGErciB7fSBcOyAtbyBcCisJICAhIC10eXBlIGQgISAtcGVybSAtNDQ0IC1leGVjICQoaW5zdGFsbF9zaCkgLWMgLW0gYStyIHt9IHt9IFw7IFwKKwl8fCBjaG1vZCAtUiBhK3IgIiQoZGlzdGRpcikiCitpZiAlP0ZJTEVOQU1FX0ZJTFRFUiUKKwlAaWYgdGVzdCAteiAiJChhbV9fc2tpcF9sZW5ndGhfY2hlY2spIiAmJiBmaW5kICIkKGRpc3RkaXIpIiAtdHlwZSBmIC1wcmludCB8IFwKKwkgIGdyZXAgJ14lRklMRU5BTUVfRklMVEVSJScgMT4mMjsgdGhlbiBcCisJICBlY2hvICdlcnJvcjogdGhlIGFib3ZlIGZpbGVuYW1lcyBhcmUgdG9vIGxvbmcnIDE+JjI7IFwKKwkgIGV4aXQgMTsgXAorCWVsc2UgOjsgZmkKK2VuZGlmICU/RklMRU5BTUVfRklMVEVSJQorZW5kaWYgJT9UT1BESVJfUCUKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQnVpbGRpbmcgdmFyaW91cyBkaXN0cmlidXRpb24gZmxhdm9ycy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyMgTm90ZSB0aGF0IHdlIGRvbid0IHVzZSBHTlUgdGFyJ3MgYC16JyBvcHRpb24uICBPbmUgcmVhc29uIChidXQgbm90CisjIyB0aGUgb25seSByZWFzb24pIGlzIHRoYXQgc29tZSB2ZXJzaW9ucyBvZiB0YXIgKGUuZy4sIE9TRjEpCisjIyBpbnRlcnByZXQgYC16JyBkaWZmZXJlbnRseS4KKyMjCisjIyBUaGUgLW8gb3B0aW9uIG9mIEdOVSB0YXIgdXNlZCB0byBleGNsdWRlIGVtcHR5IGRpcmVjdG9yaWVzLiAgVGhpcworIyMgYmVoYXZpb3Igd2FzIGZpeGVkIGluIHRhciAxLjEyIChyZWxlYXNlZCBvbiAxOTk3LTA0LTI1KS4gIEJ1dCBvbGRlcgorIyMgdmVyc2lvbnMgb2YgdGFyIGFyZSBzdGlsbCB1c2VkIChmb3IgaW5zdGFuY2UgTmV0QlNEIDEuNi4xIHNoaXBzCisjIyB3aXRoIHRhciAxLjExLjIpLiAgV2UgZG8gbm90IGRvIGFueXRoaW5nIHNwZWNpZmljIHcuci50LiB0aGlzCisjIyBpbmNvbXBhdGliaWxpdHkgc2luY2UgcGFja2FnZXMgd2hlcmUgZW1wdHkgZGlyZWN0b3JpZXMgbmVlZCB0byBiZQorIyMgcHJlc2VudCBpbiB0aGUgYXJjaGl2ZSBhcmUgcmVhbGx5IHVudXN1YWwuCisKK2lmICU/VE9QRElSX1AlCisKKz9HWklQP0RJU1RfQVJDSElWRVMgKz0gJChkaXN0ZGlyKS50YXIuZ3oKK0daSVBfRU5WID0gLS1iZXN0CisuUEhPTlk6IGRpc3QtZ3ppcAorZGlzdC1nemlwOiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IEdaSVA9JChHWklQX0VOVikgZ3ppcCAtYyA+JChkaXN0ZGlyKS50YXIuZ3oKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworP0JaSVAyP0RJU1RfQVJDSElWRVMgKz0gJChkaXN0ZGlyKS50YXIuYnoyCisuUEhPTlk6IGRpc3QtYnppcDIKK2Rpc3QtYnppcDI6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgYnppcDIgLTkgLWMgPiQoZGlzdGRpcikudGFyLmJ6MgorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCis/TFpNQT9ESVNUX0FSQ0hJVkVTICs9ICQoZGlzdGRpcikudGFyLmx6bWEKKy5QSE9OWTogZGlzdC1sem1hCitkaXN0LWx6bWE6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgbHptYSAtOSAtYyA+JChkaXN0ZGlyKS50YXIubHptYQorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCis/WFo/RElTVF9BUkNISVZFUyArPSAkKGRpc3RkaXIpLnRhci54egorLlBIT05ZOiBkaXN0LXh6CitkaXN0LXh6OiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IHh6IC1jID4kKGRpc3RkaXIpLnRhci54egorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCis/Q09NUFJFU1M/RElTVF9BUkNISVZFUyArPSAkKGRpc3RkaXIpLnRhci5aCisuUEhPTlk6IGRpc3QtdGFyWgorZGlzdC10YXJaOiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGNvbXByZXNzIC1jID4kKGRpc3RkaXIpLnRhci5aCisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisKKz9TSEFSP0RJU1RfQVJDSElWRVMgKz0gJChkaXN0ZGlyKS5zaGFyLmd6CisuUEhPTlk6IGRpc3Qtc2hhcgorZGlzdC1zaGFyOiBkaXN0ZGlyCisJc2hhciAkKGRpc3RkaXIpIHwgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1jID4kKGRpc3RkaXIpLnNoYXIuZ3oKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworP1pJUD9ESVNUX0FSQ0hJVkVTICs9ICQoZGlzdGRpcikuemlwCisuUEhPTlk6IGRpc3QtemlwCitkaXN0LXppcDogZGlzdGRpcgorCS1ybSAtZiAkKGRpc3RkaXIpLnppcAorCXppcCAtcnEgJChkaXN0ZGlyKS56aXAgJChkaXN0ZGlyKQorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCitlbmRpZiAlP1RPUERJUl9QJQorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQnVpbGRpbmcgYWxsIHRoZSByZXF1ZXN0ZWQgZGlzdHJpYnV0aW9uIGZsYXZvcnMuICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIyBDdXJyZW50bHkgd2UgY2Fubm90IHVzZSBpZi9lbmRpZiBpbnNpZGUgYSBydWxlLiAgVGhlIGZpbGVfY29udGVudHMKKyMjIHBhcnNlciBuZWVkcyB3b3JrLgorCitpZiAlP1RPUERJUl9QJQorCisuUEhPTlk6IGRpc3QgZGlzdC1hbGwKK2lmICU/U1VCRElSUyUKK0FNX1JFQ1VSU0lWRV9UQVJHRVRTICs9IGRpc3QgZGlzdC1hbGwKK2VuZGlmICU/U1VCRElSUyUKKworZGlzdCBkaXN0LWFsbDogZGlzdGRpcgorP0daSVA/CXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiQoZGlzdGRpcikudGFyLmd6Cis/QlpJUDI/CXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBiemlwMiAtOSAtYyA+JChkaXN0ZGlyKS50YXIuYnoyCis/TFpNQT8JdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGx6bWEgLTkgLWMgPiQoZGlzdGRpcikudGFyLmx6bWEKKz9YWj8JdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IHh6IC1jID4kKGRpc3RkaXIpLnRhci54egorP0NPTVBSRVNTPwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgY29tcHJlc3MgLWMgPiQoZGlzdGRpcikudGFyLloKKz9TSEFSPwlzaGFyICQoZGlzdGRpcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiQoZGlzdGRpcikuc2hhci5negorP1pJUD8JLXJtIC1mICQoZGlzdGRpcikuemlwCis/WklQPwl6aXAgLXJxICQoZGlzdGRpcikuemlwICQoZGlzdGRpcikKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZW5kaWYgJT9UT1BESVJfUCUKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBDaGVja2luZyBhIGRpc3RyaWJ1dGlvbi4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworaWYgJT9UT1BESVJfUCUKK2lmICU/U1VCRElSUyUKK0FNX1JFQ1VSU0lWRV9UQVJHRVRTICs9IGRpc3RjaGVjaworZW5kaWYgJT9TVUJESVJTJQorCisjIFRoaXMgdGFyZ2V0IHVudGFycyB0aGUgZGlzdCBmaWxlIGFuZCB0cmllcyBhIFZQQVRIIGNvbmZpZ3VyYXRpb24uICBUaGVuCisjIGl0IGd1YXJhbnRlZXMgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGlzIHNlbGYtY29udGFpbmVkIGJ5IG1ha2luZyBhbm90aGVyCisjIHRhcmZpbGUuCisuUEhPTlk6IGRpc3RjaGVjaworZGlzdGNoZWNrOiBkaXN0CisJY2FzZSAnJChESVNUX0FSQ0hJVkVTKScgaW4gXAorCSoudGFyLmd6KikgXAorCSAgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1kYyAkKGRpc3RkaXIpLnRhci5neiB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnRhci5iejIqKSBcCisJICBiemlwMiAtZGMgJChkaXN0ZGlyKS50YXIuYnoyIHwgJChhbV9fdW50YXIpIDs7XAorCSoudGFyLmx6bWEqKSBcCisJICBsem1hIC1kYyAkKGRpc3RkaXIpLnRhci5sem1hIHwgJChhbV9fdW50YXIpIDs7XAorCSoudGFyLnh6KikgXAorCSAgeHogLWRjICQoZGlzdGRpcikudGFyLnh6IHwgJChhbV9fdW50YXIpIDs7XAorCSoudGFyLloqKSBcCisJICB1bmNvbXByZXNzIC1jICQoZGlzdGRpcikudGFyLlogfCAkKGFtX191bnRhcikgOztcCisJKi5zaGFyLmd6KikgXAorCSAgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1kYyAkKGRpc3RkaXIpLnNoYXIuZ3ogfCB1bnNoYXIgOztcCisJKi56aXAqKSBcCisJICB1bnppcCAkKGRpc3RkaXIpLnppcCA7O1wKKwllc2FjCisjIyBNYWtlIHRoZSBuZXcgc291cmNlIHRyZWUgcmVhZC1vbmx5LiAgRGlzdHJpYnV0aW9ucyBvdWdodCB0byB3b3JrIGluCisjIyB0aGlzIGNhc2UuICBIb3dldmVyLCBtYWtlIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IHdyaXRhYmxlIHNvIHdlCisjIyBjYW4gbWFrZSBvdXIgbmV3IHN1YmRpcnMuCisJY2htb2QgLVIgYS13ICQoZGlzdGRpcik7IGNobW9kIGErdyAkKGRpc3RkaXIpCisJbWtkaXIgJChkaXN0ZGlyKS9fYnVpbGQKKwlta2RpciAkKGRpc3RkaXIpL19pbnN0CisjIyBVbmRvIHRoZSB3cml0ZSBhY2Nlc3MuCisJY2htb2QgYS13ICQoZGlzdGRpcikKKyMjIFdpdGggR05VIG1ha2UsIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB3aWxsIGJlIGV4ZWN1dGVkIGV2ZW4gd2l0aCBgbWFrZSAtbicsCisjIyBkdWUgdG8gdGhlIHByZXNlbmNlIG9mIGAkKE1BS0UpJy4gIFRoYXQgaXMgbm9ybWFsbHkgYWxsIHdlbGwgKGFuZCBgJChNQUtFKScKKyMjIGlzIG5lY2Vzc2FyeSBmb3IgdGhpbmdzIGxpa2UgcGFyYWxsZWwgZGlzdGNoZWNrKSwgYnV0IGhlcmUgd2UgZG9uJ3Qgd2FudAorIyMgZXhlY3V0aW9uLiAgVG8gYXZvaWQgTUFLRUZMQUdTIHBhcnNpbmcgaGFzc2xlcywgdXNlIGEgd2l0bmVzcyBmaWxlIHRoYXQgYQorIyMgbm9uLWAtbicgcnVuIHdvdWxkIGhhdmUganVzdCBjcmVhdGVkLgorCXRlc3QgLWQgJChkaXN0ZGlyKS9fYnVpbGQgfHwgZXhpdCAwOyBcCisjIyBDb21wdXRlIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIGBfaW5zdCcuICBTdHJpcCBhbnkgbGVhZGluZyBET1MgZHJpdmUKKyMjIHRvIGFsbG93IERFU1RESVIgaW5zdGFsbGF0aW9ucy4gIE90aGVyd2lzZSAiJChERVNURElSKSQocHJlZml4KSIgd291bGQKKyMjIGV4cGFuZCB0byAiYzovdGVtcC9hbS1kYy01NjY4L2M6L3NyYy9wYWNrYWdlL3BhY2thZ2UtMS4wL19pbnN0Ii4KKwlkY19pbnN0YWxsX2Jhc2U9YCQoYW1fX2NkKSAkKGRpc3RkaXIpL19pbnN0ICYmIHB3ZCB8IHNlZCAtZSAncyxeW146XFwvXTpbXFwvXSwvLCdgIFwKKyMjIFdlIHdpbGwgYXR0ZW1wdCBhIERFU1RESVIgaW5zdGFsbCBpbiAkZGNfZGVzdGRpci4gIFdlIGRvbid0CisjIyBjcmVhdGUgdGhpcyBkaXJlY3RvcnkgdW5kZXIgJGRjX2luc3RhbGxfYmFzZSwgYmVjYXVzZSBpdCB3b3VsZAorIyMgY3JlYXRlIHZlcnkgbG9uZyBkaXJlY3RvcnkgbmFtZXMuCisJICAmJiBkY19kZXN0ZGlyPSIkJHtUTVBESVItL3RtcH0vYW0tZGMtJCQkJC8iIFwKKz9ESVNUQ0hFQ0stSE9PSz8JICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0Y2hlY2staG9vayBcCisjIyBQYXJhbGxlbCBCU0QgbWFrZSBtYXkgbm90IHN0YXJ0IGEgbmV3IHNoZWxsIGZvciBlYWNoIGNvbW1hbmQgaW4gYSByZWNpcGUsCisjIyBzbyBiZSBzdXJlIHRvIGBjZCcgYmFjayB0byB0aGUgb3JpZ2luYWwgZGlyZWN0b3J5IGFmdGVyIHRoaXMuCisJICAmJiBhbV9fY3dkPWBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKGRpc3RkaXIpL19idWlsZCBcCisJICAmJiAuLi9jb25maWd1cmUgLS1zcmNkaXI9Li4gLS1wcmVmaXg9IiQkZGNfaW5zdGFsbF9iYXNlIiBcCis/R0VUVEVYVD8JICAgIC0td2l0aC1pbmNsdWRlZC1nZXR0ZXh0IFwKKyMjIEFkZGl0aW9uYWwgZmxhZ3MgZm9yIGNvbmZpZ3VyZS4gIEtlZXAgdGhpcyBsYXN0IGluIHRoZSBjb25maWd1cmUKKyMjIGludm9jYXRpb24gc28gdGhlIHVzZXIgY2FuIG92ZXJyaWRlIHByZXZpb3VzIG9wdGlvbnMuCisJICAgICQoRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUykgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZHZpIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbGNoZWNrIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHVuaW5zdGFsbCBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0dW5pbnN0YWxsY2hlY2tfZGlyPSIkJGRjX2luc3RhbGxfYmFzZSIgXAorCSAgICAgICAgZGlzdHVuaW5zdGFsbGNoZWNrIFwKKyMjIE1ha2Ugc3VyZSB0aGUgcGFja2FnZSBoYXMgcHJvcGVyIERFU1RESVIgc3VwcG9ydCAod2UgY291bGQgbm90IHRlc3QgdGhpcworIyMgaW4gdGhlIHByZXZpb3VzIGluc3RhbGwvaW5zdGFsbGNoZWNrL3VuaW5zdGFsbCB0ZXN0LCBiZWNhdXNlIGl0J3MgcmVhc29uYWJsZQorIyMgZm9yIGluc3RhbGxjaGVjayB0byBmYWlsIGluIGEgREVTVERJUiBpbnN0YWxsKS4KKyMjIFdlIG1ha2UgdGhlIGAkZGNfaW5zdGFsbF9iYXNlJyByZWFkLW9ubHkgYmVjYXVzZSB0aGlzIGlzIHdoZXJlIGZpbGVzCisjIyB3aXRoIG1pc3NpbmcgREVTVERJUiBzdXBwb3J0IGFyZSBsaWtlbHkgdG8gYmUgaW5zdGFsbGVkLgorCSAgJiYgY2htb2QgLVIgYS13ICIkJGRjX2luc3RhbGxfYmFzZSIgXAorIyMgVGhlIGxvZ2ljIGhlcmUgaXMgcXVpdGUgY29udm9sdXRlZCBiZWNhdXNlIHdlIG11c3QgY2xlYW4gJGRjX2Rlc3RkaXIKKyMjIHdoYXRldmVyIGhhcHBlbnMgKGl0IHdvbid0IGJlIGVyYXNlZCBieSB0aGUgbmV4dCBydW4gb2YgZGlzdGNoZWNrIGxpa2UKKyMjICQoZGlzdGRpcikgaXMpLgorCSAgJiYgKHsgXAorIyMgQnVpbGQgdGhlIGRpcmVjdG9yeSwgc28gd2UgY2FuIGNkIGludG8gaXQgZXZlbiBpZiBgbWFrZSBpbnN0YWxsJworIyMgZGlkbid0IGNyZWF0ZSBpdC4gIFVzZSBta2Rpciwgbm90ICQoTUtESVJfUCkgYmVjYXVzZSB3ZSB3YW50IHRvCisjIyBmYWlsIGlmIHRoZSBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMgKFBSLzQxMykuCisJICAgICAgIChjZCAuLi8uLiAmJiB1bWFzayAwNzcgJiYgbWtkaXIgIiQkZGNfZGVzdGRpciIpIFwKKwkgICAgICAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgREVTVERJUj0iJCRkY19kZXN0ZGlyIiBpbnN0YWxsIFwKKwkgICAgICAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgREVTVERJUj0iJCRkY19kZXN0ZGlyIiB1bmluc3RhbGwgXAorCSAgICAgICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBERVNURElSPSIkJGRjX2Rlc3RkaXIiIFwKKwkgICAgICAgICAgICBkaXN0dW5pbnN0YWxsY2hlY2tfZGlyPSIkJGRjX2Rlc3RkaXIiIGRpc3R1bmluc3RhbGxjaGVjazsgXAorCSAgICAgIH0gfHwgeyBybSAtcmYgIiQkZGNfZGVzdGRpciI7IGV4aXQgMTsgfSkgXAorCSAgJiYgcm0gLXJmICIkJGRjX2Rlc3RkaXIiIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3QgXAorIyMgTWFrZSBzdXJlIHRvIHJlbW92ZSB0aGUgZGlzdHMgd2UgY3JlYXRlZCBpbiB0aGUgdGVzdCBidWlsZCBkaXJlY3RvcnkuCisJICAmJiBybSAtcmYgJChESVNUX0FSQ0hJVkVTKSBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0Y2xlYW5jaGVjayBcCisjIyBDYXRlciB0byBwYXJhbGxlbCBCU0QgbWFrZSAoc2VlIGFib3ZlKS4KKwkgICYmIGNkICIkJGFtX19jd2QiIFwKKwkgIHx8IGV4aXQgMQorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCUAoZWNobyAiJChkaXN0ZGlyKSBhcmNoaXZlcyByZWFkeSBmb3IgZGlzdHJpYnV0aW9uOiAiOyBcCisJICBsaXN0PSckKERJU1RfQVJDSElWRVMpJzsgZm9yIGkgaW4gJCRsaXN0OyBkbyBlY2hvICQkaTsgZG9uZSkgfCBcCisJICBzZWQgLWUgMWggLWUgMXMvLi89L2cgLWUgMXAgLWUgMXggLWUgJyQkcCcgLWUgJyQkeCcKKworIyMgRGVmaW5lIGRpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMgYW5kIGRpc3R1bmluc3RhbGxjaGVjayBzZXBhcmF0ZWx5CisjIyBmcm9tIGRpc3RjaGVjaywgc28gdGhhdCB0aGV5IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSB1c2VyLgorLlBIT05ZOiBkaXN0dW5pbnN0YWxsY2hlY2sKK2Rpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMgPSBmaW5kIC4gLXR5cGUgZiAtcHJpbnQKK2Rpc3R1bmluc3RhbGxjaGVjazoKKyMjIFdlIHVzZSAtbGUgMSBiZWNhdXNlIHRoZSBgZGlyJyBmaWxlIChjcmVhdGVkIGJ5IGluc3RhbGwtaW5mbykKKyMjIG1pZ2h0IHN0aWxsIGV4aXN0IGFmdGVyIHVuaW5zdGFsbC4KKwlAJChhbV9fY2QpICckKGRpc3R1bmluc3RhbGxjaGVja19kaXIpJyBcCisJJiYgdGVzdCBgJChkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzKSB8IHdjIC1sYCAtbGUgMSBcCisJICAgfHwgeyBlY2hvICJFUlJPUjogZmlsZXMgbGVmdCBhZnRlciB1bmluc3RhbGw6IiA7IFwKKwkgICAgICAgIGlmIHRlc3QgLW4gIiQoREVTVERJUikiOyB0aGVuIFwKKwkgICAgICAgICAgZWNobyAiICAoY2hlY2sgREVTVERJUiBzdXBwb3J0KSI7IFwKKwkgICAgICAgIGZpIDsgXAorCSAgICAgICAgJChkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzKSA7IFwKKwkgICAgICAgIGV4aXQgMTsgfSA+JjIKKworIyMgRGVmaW5lIGRpc3RjbGVhbmNoZWNrX2xpc3RmaWxlcyBhbmQgZGlzdGNsZWFuY2hlY2sgc2VwYXJhdGVseQorIyMgZnJvbSBkaXN0Y2hlY2ssIHNvIHRoYXQgdGhleSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgdXNlci4KKy5QSE9OWTogZGlzdGNsZWFuY2hlY2sKK2Rpc3RjbGVhbmNoZWNrX2xpc3RmaWxlcyA9IGZpbmQgLiAtdHlwZSBmIC1wcmludAorZGlzdGNsZWFuY2hlY2s6IGRpc3RjbGVhbgorCUBpZiB0ZXN0ICckKHNyY2RpciknID0gLiA7IHRoZW4gXAorCSAgZWNobyAiRVJST1I6IGRpc3RjbGVhbmNoZWNrIGNhbiBvbmx5IHJ1biBmcm9tIGEgVlBBVEggYnVpbGQiIDsgXAorCSAgZXhpdCAxIDsgXAorCWZpCisJQHRlc3QgYCQoZGlzdGNsZWFuY2hlY2tfbGlzdGZpbGVzKSB8IHdjIC1sYCAtZXEgMCBcCisJICB8fCB7IGVjaG8gIkVSUk9SOiBmaWxlcyBsZWZ0IGluIGJ1aWxkIGRpcmVjdG9yeSBhZnRlciBkaXN0Y2xlYW46IiA7IFwKKwkgICAgICAgJChkaXN0Y2xlYW5jaGVja19saXN0ZmlsZXMpIDsgXAorCSAgICAgICBleGl0IDE7IH0gPiYyCitlbmRpZiAlP1RPUERJUl9QJQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9mb290ZXIuYW0gYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2Zvb3Rlci5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzk4MDkzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9mb290ZXIuYW0KQEAgLTAsMCArMSwxOSBAQAorIyMgYXV0b21ha2UgLSBjcmVhdGUgTWFrZWZpbGUuaW4gZnJvbSBNYWtlZmlsZS5hbQorIyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vaGVhZGVyLXZhcnMuYW0gYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2hlYWRlci12YXJzLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxY2Q3NmUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2hlYWRlci12YXJzLmFtCkBAIC0wLDAgKzEsNTUgQEAKKyMjIGF1dG9tYWtlIC0gY3JlYXRlIE1ha2VmaWxlLmluIGZyb20gTWFrZWZpbGUuYW0KKyMjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMywgMjAwNSwKKyMjIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworVlBBVEggPSBAc3JjZGlyQAorCitAU0VUX01BS0VACisKKyMjIFdlIHVzZWQgdG8gZGVmaW5lIHRoaXMuICBIb3dldmVyLCB3ZSBkb24ndCBiZWNhdXNlIHZlbmRvciBtYWtlcworIyMgKGUuZy4sIFNvbGFyaXMsIElyaXgpIHdvbid0IGNvcnJlY3RseSBwcm9wYWdhdGUgdmFyaWFibGVzIHRoYXQgYXJlCisjIyBkZWZpbmVkIGluIE1ha2VmaWxlLiAgVGhpcyBwYXJ0aWN1bGFyIHZhcmlhYmxlIGNhbid0IGJlIGNvcnJlY3RseQorIyMgZGVmaW5lZCBieSBjb25maWd1cmUgKGF0IGxlYXN0LCBub3QgdGhlIGN1cnJlbnQgY29uZmlndXJlKSwgc28gd2UKKyMjIHNpbXBseSBhdm9pZCBkZWZpbmluZyBpdCB0byBhbGxvdyB0aGUgdXNlciB0byB1c2UgdGhpcyBmZWF0dXJlIHdpdGgKKyMjIGEgdmVuZG9yIG1ha2UuCisjIyBERVNURElSID0KKworIyMgU29tZSBkZXJpdmVkIHZhcmlhYmxlcyB0aGF0IGhhdmUgYmVlbiBmb3VuZCB0byBiZSB1c2VmdWwuCitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACisKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCisKKyMjIFRoZXNlIGFyZSBkZWZpbmVkIGJlY2F1c2Ugb3RoZXJ3aXNlIG1ha2Ugb24gTmV0QlNEIFYxLjEgd2lsbCBwcmludAorIyMgKGVnKTogJChOT1JNQUxfSU5TVEFMTCkgZXhwYW5kcyB0byBlbXB0eSBzdHJpbmcuCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKKworIyMgZGVqYWdudS5hbSB1c2VzIHRoZXNlIHZhcmlhYmxlcy4gIFNvbWUgdXNlcnMgbWlnaHQgcmVseSBvbiB0aGVtIHRvby4KKz9CVUlMRD9idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAorP0hPU1Q/aG9zdF90cmlwbGV0ID0gQGhvc3RACis/VEFSR0VUP3RhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vaGVhZGVyLmFtIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9oZWFkZXIuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc3YTJjOQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vaGVhZGVyLmFtCkBAIC0wLDAgKzEsMTkgQEAKKyMjIGF1dG9tYWtlIC0gY3JlYXRlIE1ha2VmaWxlLmluIGZyb20gTWFrZWZpbGUuYW0KKyMjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMSwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisKKyMjIEV4YWN0bHkgdGhlIHNhbWUgYXMgZGF0YS5hbS4KK2luY2x1ZGUgZGF0YS5hbQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9pbnN0LXZhcnMuYW0gYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2luc3QtdmFycy5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDljZmU5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9pbnN0LXZhcnMuYW0KQEAgLTAsMCArMSw1NSBAQAorIyMgYXV0b21ha2UgLSBjcmVhdGUgTWFrZWZpbGUuaW4gZnJvbSBNYWtlZmlsZS5hbQorIyMgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA3LCAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitpZiAlP0ZJUlNUJQorIyMgVGhlc2UgdmFyaWFibGVzIGhlbHAgc3RyaXBwaW5nIGFueSAkKFZQQVRIKSB0aGF0IHNvbWUKKyMjIE1ha2UgaW1wbGVtZW50YXRpb25zIHByZXBlbmQgYmVmb3JlIFZQQVRILWZvdW5kIGZpbGVzLgorIyMgVGhlIGlzc3VlIGlzIGRpc2N1c3NlZCBhdCBsZW5ndGggaW4gZGlzdGRpci5hbS4KK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworIyMgU3RyaXAgYWxsIGRpcmVjdG9yaWVzLgorYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworIyMgTnVtYmVyIG9mIGZpbGVzIHRvIGluc3RhbGwgY29uY3VycmVudGx5LgorYW1fX2luc3RhbGxfbWF4ID0gNDAKKyMjIFRha2UgYSAkbGlzdCBvZiBub2Jhc2UgZmlsZXMsIHN0cmlwICQoc3JjZGlyKSBmcm9tIHRoZW0uCisjIyBTcGxpdCBhcGFydCBpbiBzZXR1cCB2YXJpYWJsZSBhbmQgYW4gYWN0aW9uIHRoYXQgY2FuIGJlIHVzZWQKKyMjIGluIGJhY2t0aWNrcyBvciBpbiBhIHBpcGUuCithbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAorICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCithbV9fbm9iYXNlX3N0cmlwID0gXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKKyMjIFRha2UgYSAkbGlzdCBvZiBub2Jhc2UgZmlsZXMsIGNvbGxlY3QgdGhlbSwgaW5kZXhlZCBieSB0aGVpcgorIyMgc3JjZGlyLXN0cmlwcGVkIGRpcm5hbWVzLiAgRm9yIHVwIHRvIGFtX19pbnN0YWxsX21heCBmaWxlcywgb3V0cHV0CisjIyBhIGxpbmUgY29udGFpbmluZyB0aGUgZGlybmFtZSBhbmQgdGhlIGZpbGVzLCBzcGFjZS1zZXBhcmF0ZWQuCisjIyBUaGUgYXJiaXRyYXJ5IGxpbWl0IGhlbHBzIGF2b2lkIHRoZSBxdWFkcmF0aWMgc2NhbGluZyBleGhpYml0ZWQgYnkKKyMjIHN0cmluZyBjb25jYXRlbmF0aW9uIGluIG1vc3Qgc2hlbGxzLCBhbmQgc2hvdWxkIGF2b2lkIGxpbmUgbGVuZ3RoCisjIyBsaW1pdGF0aW9ucywgd2hpbGUgc3RpbGwgb2ZmZXJpbmcgb25seSBuZWdsaWdpYmxlIHBlcmZvcm1hbmNlIGltcGFjdAorIyMgdGhyb3VnaCBzcGF3bmluZyBtb3JlIGluc3RhbGwgY29tbWFuZHMgdGhhbiBhYnNvbHV0ZWx5IG5lZWRlZC4KK2FtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKKyAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKKyAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAorICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKKyAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKKyAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCisjIyBDb2xsZWN0IHVwIHRvIDQwIGZpbGVzIHBlciBsaW5lIGZyb20gc3RkaW4uCithbV9fYmFzZV9saXN0ID0gXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCitlbmRpZiAlP0ZJUlNUJQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9pbnN0YWxsLmFtIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9pbnN0YWxsLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNjEwNzAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2luc3RhbGwuYW0KQEAgLTAsMCArMSw5OCBAQAorIyMgYXV0b21ha2UgLSBjcmVhdGUgTWFrZWZpbGUuaW4gZnJvbSBNYWtlZmlsZS5hbQorIyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA2LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlCisjIyBGb3VuZGF0aW9uLCBJbmMuCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIGluc3RhbGxkaXJzIC0tIENyZWF0aW5nIHRoZSBpbnN0YWxsZGlycy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIyBUaGUgcmVhc29uIHdlIGxvb3Agb3ZlciAlYW1fX2luc3RhbGxkaXJzJSAoaW5zdGVhZCBvZiBzaW1wbHkgcnVubmluZworIyMgYCQoTUtESVJfUCkgJWFtX19pbnN0YWxsZGlycyUnKSBpcyB0aGF0IGRpcmVjdG9yaWVzIHZhcmlhYmxlIHN1Y2ggYXMKKyMjIGAiJChERVNURElSKSQobXlkaXIpIicgY2FuIHBvdGVudGlhbGx5IGV4cGFuZCB0byBgIiInIGlmIGAkKG15ZGlyKScKKyMjIGlzIGNvbmRpdGlvbmFsbHkgZGVmaW5lZC4gIEJUVywgdGhvc2UgZGlyZWN0b3JpZXMgYXJlIHF1b3RlZCBpbgorIyMgb3JkZXIgdG8gc3VwcG9ydCBpbnN0YWxsYXRpb24gcGF0aHMgd2l0aCBzcGFjZXMuCisKK2lmICU/U1VCRElSUyUKKy5QSE9OWTogaW5zdGFsbGRpcnMgaW5zdGFsbGRpcnMtYW0KK1JFQ1VSU0lWRV9UQVJHRVRTICs9IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQoraW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQoraW5zdGFsbGRpcnMtYW06JWluc3RhbGxkaXJzLWxvY2FsJQorP2FtX19pbnN0YWxsZGlycz8JZm9yIGRpciBpbiAlYW1fX2luc3RhbGxkaXJzJTsgZG8gXAorP2FtX19pbnN0YWxsZGlycz8JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCis/YW1fX2luc3RhbGxkaXJzPwlkb25lCitlbHNlICElP1NVQkRJUlMlCisuUEhPTlk6IGluc3RhbGxkaXJzCitpbnN0YWxsZGlyczolaW5zdGFsbGRpcnMtbG9jYWwlCis/YW1fX2luc3RhbGxkaXJzPwlmb3IgZGlyIGluICVhbV9faW5zdGFsbGRpcnMlOyBkbyBcCis/YW1fX2luc3RhbGxkaXJzPwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKKz9hbV9faW5zdGFsbGRpcnM/CWRvbmUKK2VuZGlmICElP1NVQkRJUlMlCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEluc3RhbGwgdGFyZ2V0cy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworCisuUEhPTlk6IGluc3RhbGwgaW5zdGFsbC1leGVjIGluc3RhbGwtZGF0YSB1bmluc3RhbGwKKy5QSE9OWTogaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbSB1bmluc3RhbGwtYW0KKworaWYgJT9TVUJESVJTJQorUkVDVVJTSVZFX1RBUkdFVFMgKz0gaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIFwKKwkJICAgICBpbnN0YWxsLXJlY3Vyc2l2ZSB1bmluc3RhbGwtcmVjdXJzaXZlCitpbnN0YWxsOiVtYXliZV9CVUlMVF9TT1VSQ0VTJSBpbnN0YWxsLXJlY3Vyc2l2ZQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKK3VuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQorZWxzZSAhJT9TVUJESVJTJQoraW5zdGFsbDolbWF5YmVfQlVJTFRfU09VUkNFUyUgaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorZW5kaWYgISU/U1VCRElSUyUKKworaWYgJT9tYXliZV9CVUlMVF9TT1VSQ0VTJQorLk1BS0U6IGluc3RhbGwKK2VuZGlmICU/bWF5YmVfQlVJTFRfU09VUkNFUyUKKworLk1BS0UgLlBIT05ZOiBpbnN0YWxsLWFtCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCisKKy5QSE9OWTogaW5zdGFsbGNoZWNrCis/U1VCRElSUz9pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKKz8hU1VCRElSUz9pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQorPyFTVUJESVJTPy5QSE9OWTogaW5zdGFsbGNoZWNrLWFtCis/IVNVQkRJUlM/aW5zdGFsbGNoZWNrLWFtOgorCisjIyBJZiB5b3UgZXZlciBtb2RpZnkgdGhpcywga2VlcCBpbiBtaW5kIHRoYXQgSU5TVEFMTF9QUk9HUkFNIGlzIHVzZWQKKyMjIGluIHN1YmRpcmVjdG9yaWVzLCBzbyBuZXZlciBzZXQgaXQgdG8gYSB2YWx1ZSByZWxhdGl2ZSB0byB0aGUgdG9wCisjIyBkaXJlY3RvcnkuCisuTUFLRSAuUEhPTlk6IGluc3RhbGwtc3RyaXAKK2luc3RhbGwtc3RyaXA6CisjIyBCZXdhcmUgdGhhdCB0aGVyZSBhcmUgdHdvIHZhcmlhYmxlcyB1c2VkIHRvIGluc3RhbGwgcHJvZ3JhbXM6CisjIyAgIElOU1RBTExfUFJPR1JBTSBpcyB1c2VkIGZvciBvcmRpbmFyeSAqX1BST0dSQU1TCisjIyAgIGluc3RhbGxfc2hfUFJPR1JBTSBpcyB1c2VkIGZvciBub2Jhc2VfKl9QUk9HUkFNUyAoYmVjYXVzZSBpbnN0YWxsLXNoCisjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlcyBkaXJlY3RvcmllcykKKyMjIEl0J3MgT0sgdG8gb3ZlcnJpZGUgYm90aCB3aXRoIElOU1RBTExfU1RSSVBfUFJPR1JBTSwgYmVjYXVzZQorIyMgSU5TVEFMTF9TVFJJUF9QUk9HUkFNIHVzZXMgaW5zdGFsbC1zaCAoc2VlIG00L3N0cmlwLm00IGZvciBhIHJhdGlvbmFsZSkuCisjIworIyMgVXNlIGRvdWJsZSBxdW90ZXMgaGVyZSBiZWNhdXNlIHdlIG1pZ2h0IG5lZWQgdG8gaW50ZXJwb2xhdGUgc29tZQorIyMgYmFja3F1b3RlcyBhdCBydW50aW1lLgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbApkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9qYXZhLmFtIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9qYXZhLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZWI0NTUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2phdmEuYW0KQEAgLTAsMCArMSw5MCBAQAorIyMgYXV0b21ha2UgLSBjcmVhdGUgTWFrZWZpbGUuaW4gZnJvbSBNYWtlZmlsZS5hbQorIyMgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA2LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUKKyMjIEZvdW5kYXRpb24sIEluYy4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisKKyMjIC0tLS0tLS0tLS0gIyMKKyMjIEJ1aWxkaW5nLiAgIyMKKyMjIC0tLS0tLS0tLS0gIyMKKworSkFWQUMgPSBqYXZhYworQ0xBU1NQQVRIX0VOViA9IENMQVNTUEFUSD0kKEpBVkFST09UKTokKHNyY2RpcikvJChKQVZBUk9PVCk6JCRDTEFTU1BBVEgKK0pBVkFST09UID0gJCh0b3BfYnVpbGRkaXIpCisKK2NsYXNzJURJUiUuc3RhbXA6ICQoJURJUiVfSkFWQSkKKwlAbGlzdDE9JyQ/JzsgbGlzdDI9OyBpZiB0ZXN0IC1uICIkJGxpc3QxIjsgdGhlbiBcCisJICBmb3IgcCBpbiAkJGxpc3QxOyBkbyBcCisJICAgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgICBsaXN0Mj0iJCRsaXN0MiAkJGQkJHAiOyBcCisJICBkb25lOyBcCisJICBlY2hvICckKENMQVNTUEFUSF9FTlYpICQoSkFWQUMpIC1kICQoSkFWQVJPT1QpICQoQU1fSkFWQUNGTEFHUykgJChKQVZBQ0ZMQUdTKSAnIiQkbGlzdDIiOyBcCisJICAkKENMQVNTUEFUSF9FTlYpICQoSkFWQUMpIC1kICQoSkFWQVJPT1QpICQoQU1fSkFWQUNGTEFHUykgJChKQVZBQ0ZMQUdTKSAkJGxpc3QyOyBcCisJZWxzZSA6OyBmaQorCWVjaG8gdGltZXN0YW1wID4gY2xhc3MlRElSJS5zdGFtcAorCisKKyMjIC0tLS0tLS0tLS0tLSAjIworIyMgSW5zdGFsbGluZy4gICMjCisjIyAtLS0tLS0tLS0tLS0gIyMKKworaWYgJT9JTlNUQUxMJQorYW1fX2luc3RhbGxkaXJzICs9ICIkKERFU1RESVIpJCglTkRJUiVkaXIpIgorP0VYRUM/LlBIT05ZIGluc3RhbGwtZXhlYy1hbTogaW5zdGFsbC0lRElSJUpBVkEKKz8hRVhFQz8uUEhPTlkgaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLSVESVIlSkFWQQoraW5zdGFsbC0lRElSJUpBVkE6IGNsYXNzJURJUiUuc3RhbXAKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKCVORElSJWRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKCVORElSJWRpcikiCisjIyBBIHNpbmdsZSAuamF2YSBmaWxlIGNhbiBiZSBjb21waWxlZCBpbnRvIG11bHRpcGxlIC5jbGFzcyBmaWxlcy4gIFNvCisjIyB3ZSBqdXN0IGluc3RhbGwgYWxsIHRoZSAuY2xhc3MgZmlsZXMgdGhhdCBnb3QgYnVpbHQgaW50byB0aGlzCisjIyBkaXJlY3RvcnkuICBUaGlzIGlzIG5vdCBvcHRpbWFsLCBidXQgd2lsbCBoYXZlIHRvIGRvIGZvciBub3cuCisJQHRlc3QgLW4gIiQoJURJUiVfSkFWQSkiICYmIHRlc3QgLW4gIiQoJU5ESVIlZGlyKSIgfHwgZXhpdCAwOyBcCisJc2V0IHggKi5jbGFzczsgc2hpZnQ7IHRlc3QgIiQkMSIgIT0gIiouY2xhc3MiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiAkKElOU1RBTExfREFUQSkiICIkJEAiICInJChERVNURElSKSQoJU5ESVIlZGlyKS8kJHAnIjsgXAorCSQoSU5TVEFMTF9EQVRBKSAiJCRAIiAiJChERVNURElSKSQoJU5ESVIlZGlyKSIKK2VuZGlmICU/SU5TVEFMTCUKKworCisjIyAtLS0tLS0tLS0tLS0tLSAjIworIyMgVW5pbnN0YWxsaW5nLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tICMjCisKK2lmICU/SU5TVEFMTCUKKy5QSE9OWSB1bmluc3RhbGwtYW06IHVuaW5zdGFsbC0lRElSJUpBVkEKK3VuaW5zdGFsbC0lRElSJUpBVkE6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAdGVzdCAtbiAiJCglRElSJV9KQVZBKSIgJiYgdGVzdCAtbiAiJCglTkRJUiVkaXIpIiB8fCBleGl0IDA7IFwKKwlzZXQgeCAqLmNsYXNzOyBzaGlmdDsgdGVzdCAiJCQxIiAhPSAiKi5jbGFzcyIgfHwgZXhpdCAwOyBcCisJZWNobyAiICggY2QgJyQoREVTVERJUikkKCVORElSJWRpciknICYmIHJtIC1mIiAiJCRAIiAiKSI7IFwKKwljZCAiJChERVNURElSKSQoJU5ESVIlZGlyKSIgJiYgcm0gLWYgIiQkQCIKK2VuZGlmICU/SU5TVEFMTCUKKworCisjIyAtLS0tLS0tLS0tICMjCisjIyBDbGVhbmluZy4gICMjCisjIyAtLS0tLS0tLS0tICMjCisKKy5QSE9OWSBjbGVhbi1hbTogY2xlYW4tJURJUiVKQVZBCitjbGVhbi0lRElSJUpBVkE6CisJLXJtIC1mICouY2xhc3MgY2xhc3MlRElSJS5zdGFtcAorCisKKyMjIC0tLS0tLS0tLS0tLS0tICMjCisjIyBEaXN0cmlidXRpbmcuICAjIworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKworaWYgJT9ESVNUJQorRElTVF9DT01NT04gKz0gJURJU1RWQVIlCitlbmRpZiAlP0RJU1QlCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2xhbmctY29tcGlsZS5hbSBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vbGFuZy1jb21waWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YWRhYTEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2xhbmctY29tcGlsZS5hbQpAQCAtMCwwICsxLDM5IEBACisjIyBhdXRvbWFrZSAtIGNyZWF0ZSBNYWtlZmlsZS5pbiBmcm9tIE1ha2VmaWxlLmFtCisjIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyMgVGhpcyBmaWxlIGlzIHJlYWQgb25jZSBwZXIgKmxhbmd1YWdlKiwgbm90IHBlciBleHRlbnNpb24uCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFByZXByb2Nlc3NlZCBGb3J0cmFuIDc3LiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyMgV2UgYWxzbyBoYW5kbGUgdGhlIGNhc2Ugb2YgcHJlcHJvY2Vzc2luZyBgLkYnIGZpbGVzIGludG8gYC5mJyBmaWxlcy4KK2lmICU/UFBGNzclCisuRi5mOgorCSQoRjc3Q09NUElMRSkgLUYgJDwKK2VuZGlmICU/UFBGNzclCisKKworCisjIyAtLS0tLS0tLSAjIworIyMgUmF0Zm9yLiAgIyMKKyMjIC0tLS0tLS0tICMjCisKKyMjIFdlIGFsc28gaGFuZGxlIHRoZSBjYXNlIG9mIHByZXByb2Nlc3NpbmcgYC5yJyBmaWxlcyBpbnRvIGAuZicgZmlsZXMuCitpZiAlP1JBVEZPUiUKKy5yLmY6CisJJChSQ09NUElMRSkgLUYgJDwKK2VuZGlmICU/UkFURk9SJQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9sZXguYW0gYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2xleC5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjQwNzdkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9sZXguYW0KQEAgLTAsMCArMSwzMSBAQAorIyMgYXV0b21ha2UgLSBjcmVhdGUgTWFrZWZpbGUuaW4gZnJvbSBNYWtlZmlsZS5hbQorIyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA2LCAyMDA5ICBGcmVlIFNvZnR3YXJlCisjIyBGb3VuZGF0aW9uLCBJbmMuCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyMgU2VlIHRoZSBjb21tZW50IGFib3V0IGFtX19za2lweWFjYyBpbiB5YWNjLmFtLgoraWYgJT9NQUlOVEFJTkVSLU1PREUlCitpZiAlP0ZJUlNUJQorQE1BSU5UQUlORVJfTU9ERV9GQUxTRUBhbV9fc2tpcGxleCA9IHRlc3QgLWYgJEAgfHwKK2VuZGlmICU/RklSU1QlCitlbmRpZiAlP01BSU5UQUlORVItTU9ERSUKKworP0dFTkVSSUM/JUVYVCUlREVSSVZFRC1FWFQlOgorPyFHRU5FUklDPyVPQkolOiAlU09VUkNFJQorP0dFTkVSSUM/CSVWRVJCT1NFJSQoYW1fX3NraXBsZXgpICQoU0hFTEwpICQoWUxXUkFQKSAlU09VUkNFJSAkKExFWF9PVVRQVVRfUk9PVCkuYyAlT0JKJSAtLSAlQ09NUElMRSUKKz8hR0VORVJJQz8JJVZFUkJPU0UlIFwKKz8hR0VORVJJQz8/RElTVF9TT1VSQ0U/CSQoYW1fX3NraXBsZXgpIFwKKyMjIEZvciBub24tc3VmZml4IHJ1bGVzLCB3ZSBtdXN0IGVtdWxhdGUgYSBWUEFUSCBzZWFyY2ggb24gJVNPVVJDRSUuCis/IUdFTkVSSUM/CSQoU0hFTEwpICQoWUxXUkFQKSBgdGVzdCAtZiAnJVNPVVJDRSUnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCVTT1VSQ0UlICQoTEVYX09VVFBVVF9ST09UKS5jICVPQkolIC0tICVDT01QSUxFJQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9saWJyYXJ5LmFtIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9saWJyYXJ5LmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlOTRlNWUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2xpYnJhcnkuYW0KQEAgLTAsMCArMSwyMCBAQAorIyMgYXV0b21ha2UgLSBjcmVhdGUgTWFrZWZpbGUuaW4gZnJvbSBNYWtlZmlsZS5hbQorIyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk5LCAyMDAzLCAyMDA5IEZyZWUgU29mdHdhcmUKKyMjIEZvdW5kYXRpb24sIEluYy4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorJUxJQlJBUlklOiAkKCVYTElCUkFSWSVfT0JKRUNUUykgJCglWExJQlJBUlklX0RFUEVOREVOQ0lFUykgJURJUlNUQU1QJQorCSVTSUxFTlQlLXJtIC1mICVMSUJSQVJZJQorCSVWRVJCT1NFJSQoJVhMSUJSQVJZJV9BUikgJUxJQlJBUlklICQoJVhMSUJSQVJZJV9PQkpFQ1RTKSAkKCVYTElCUkFSWSVfTElCQUREKQorCSVTSUxFTlQlJChSQU5MSUIpICVMSUJSQVJZJQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9saWJzLmFtIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9saWJzLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYzYyYTEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2xpYnMuYW0KQEAgLTAsMCArMSwxMDIgQEAKKyMjIGF1dG9tYWtlIC0gY3JlYXRlIE1ha2VmaWxlLmluIGZyb20gTWFrZWZpbGUuYW0KKyMjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNiwKKyMjIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK2lmICU/SU5TVEFMTCUKK2luY2x1ZGUgaW5zdC12YXJzLmFtCitlbmRpZiAlP0lOU1RBTEwlCisKKyMjIC0tLS0tLS0tLS0tLSAjIworIyMgSW5zdGFsbGluZy4gICMjCisjIyAtLS0tLS0tLS0tLS0gIyMKKworaWYgJT9JTlNUQUxMJQorYW1fX2luc3RhbGxkaXJzICs9ICIkKERFU1RESVIpJCglTkRJUiVkaXIpIgorLlBIT05ZIGluc3RhbGwtJUVYRUM/ZXhlYzpkYXRhJS1hbTogaW5zdGFsbC0lRElSJUxJQlJBUklFUworaW5zdGFsbC0lRElSJUxJQlJBUklFUzogJCglRElSJV9MSUJSQVJJRVMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJCglTkRJUiVkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJCglTkRJUiVkaXIpIgoraWYgJT9CQVNFJQorIyMgRnVubnkgaW52b2NhdGlvbiBiZWNhdXNlIE1ha2VmaWxlIHZhcmlhYmxlIGNhbiBiZSBlbXB0eSwgbGVhZGluZyB0bworIyMgYSBzeW50YXggZXJyb3IgaW4gc2guCisJQGxpc3Q9JyQoJURJUiVfTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQoJU5ESVIlZGlyKSIgfHwgbGlzdD07IFwKKwlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAorCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCisJICBlbHNlIDo7IGZpOyBcCisJZG9uZTsgXAorCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGxpc3QyICckKERFU1RESVIpJCglTkRJUiVkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGxpc3QyICIkKERFU1RESVIpJCglTkRJUiVkaXIpIiB8fCBleGl0ICQkPzsgfQorZWxzZSAhJT9CQVNFJQorIyMgRnVubnkgaW52b2NhdGlvbiBiZWNhdXNlIE1ha2VmaWxlIHZhcmlhYmxlIGNhbiBiZSBlbXB0eSwgbGVhZGluZyB0bworIyMgYSBzeW50YXggZXJyb3IgaW4gc2guCisJQGxpc3Q9JyQoJURJUiVfTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQoJU5ESVIlZGlyKSIgfHwgbGlzdD07IFwKKwkkKGFtX19ub2Jhc2VfbGlzdCkgfCB3aGlsZSByZWFkIGRpciBmaWxlczsgZG8gXAorCSAgeGZpbGVzPTsgZm9yIHAgaW4gJCRmaWxlczsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIHhmaWxlcz0iJCR4ZmlsZXMgJCRwIjsgZWxzZSA6OyBmaTsgZG9uZTsgXAorCSAgdGVzdCAteiAiJCR4ZmlsZXMiIHx8IHsgXAorCSAgICB0ZXN0ICJ4JCRkaXIiID0geC4gfHwgeyBcCisJICAgICAgZWNobyAiJChNS0RJUl9QKSAnJChERVNURElSKSQoJU5ESVIlZGlyKS8kJGRpciciOyBcCisJICAgICAgJChNS0RJUl9QKSAiJChERVNURElSKSQoJU5ESVIlZGlyKS8kJGRpciI7IH07IFwKKwkgICAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJHhmaWxlcyAnJChERVNURElSKSQoJU5ESVIlZGlyKS8kJGRpciciOyBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAkJHhmaWxlcyAiJChERVNURElSKSQoJU5ESVIlZGlyKS8kJGRpciIgfHwgZXhpdCAkJD87IH07IFwKKwlkb25lCitlbmRpZiAhJT9CQVNFJQorIyMgV2UgZG8gdHdvIGxvb3BzIGhlcmUgc28gdGhhdCAkKFBPU1RfSU5TVEFMTCkgY2FuIGJlIGVtcHR5LiAgSWYgd2UKKyMjIG1lcmdlIHRoZSB0d28gbG9vcHMsIHdlIGdldCBhIHN5bnRheCBlcnJvciBmcm9tIHNoLiAgQW55d2F5LCBoYXZpbmcKKyMjICQoUE9TVF9JTlNUQUxMKSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBsb29wIGVzc2VudGlhbGx5IHJlbmRlcnMgaXQKKyMjIHVzZWxlc3M7IHNoIG5ldmVyIGFjdHVhbGx5IGV4ZWN1dGVzIHRoaXMgY29tbWFuZC4gIFJlYWQgdGhlIEdOVQorIyMgU3RhbmRhcmRzIGZvciBhIGxpdHRsZSBlbmxpZ2h0ZW5tZW50IG9uIHRoaXMuCisJQCQoUE9TVF9JTlNUQUxMKQorCUBsaXN0PSckKCVESVIlX0xJQlJBUklFUyknOyB0ZXN0IC1uICIkKCVORElSJWRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCisJICAgICVCQVNFPyQoYW1fX3N0cmlwX2Rpcik6Zj0kJHA7JSBcCisjIyBNdXN0IHJhbmxpYiBhZnRlciBpbnN0YWxsaW5nIGJlY2F1c2UgbW9kIHRpbWUgY2hhbmdlcy4KKyMjIGNkIHRvIHRhcmdldCBkaXJlY3RvcnkgYmVjYXVzZSBBSVggcmFubGliIG1lc3NlcyB1cCB3aXRoIHdoaXRlc3BhY2UKKyMjIGluIHRoZSBhcmd1bWVudC4KKwkgICAgZWNobyAiICggY2QgJyQoREVTVERJUikkKCVORElSJWRpciknICYmICQoUkFOTElCKSAkJGYgKSI7IFwKKwkgICAgKCBjZCAiJChERVNURElSKSQoJU5ESVIlZGlyKSIgJiYgJChSQU5MSUIpICQkZiApIHx8IGV4aXQgJCQ/OyBcCisJICBlbHNlIDo7IGZpOyBcCisJZG9uZQorZW5kaWYgJT9JTlNUQUxMJQorCisKKyMjIC0tLS0tLS0tLS0tLS0tICMjCisjIyBVbmluc3RhbGxpbmcuICAjIworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKworaWYgJT9JTlNUQUxMJQorLlBIT05ZIHVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLSVESVIlTElCUkFSSUVTCit1bmluc3RhbGwtJURJUiVMSUJSQVJJRVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJCglRElSJV9MSUJSQVJJRVMpJzsgdGVzdCAtbiAiJCglTkRJUiVkaXIpIiB8fCBsaXN0PTsgXAorP0JBU0U/CWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCis/IUJBU0U/CSQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IGZpbGVzPWAkKGFtX19ub2Jhc2Vfc3RyaXApYDsgXAorCXRlc3QgLW4gIiQkZmlsZXMiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiAoIGNkICckKERFU1RESVIpJCglTkRJUiVkaXIpJyAmJiBybSAtZiAiJCRmaWxlcyIgKSI7IFwKKwljZCAiJChERVNURElSKSQoJU5ESVIlZGlyKSIgJiYgcm0gLWYgJCRmaWxlcworZW5kaWYgJT9JTlNUQUxMJQorCisKKyMjIC0tLS0tLS0tLS0gIyMKKyMjIENsZWFuaW5nLiAgIyMKKyMjIC0tLS0tLS0tLS0gIyMKKworLlBIT05ZIGNsZWFuLWFtOiBjbGVhbi0lRElSJUxJQlJBUklFUworY2xlYW4tJURJUiVMSUJSQVJJRVM6CisJLXRlc3QgLXogIiQoJURJUiVfTElCUkFSSUVTKSIgfHwgcm0gLWYgJCglRElSJV9MSUJSQVJJRVMpCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2xpYnRvb2wuYW0gYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2xpYnRvb2wuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMyZTE5OQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vbGlidG9vbC5hbQpAQCAtMCwwICsxLDI5IEBACisjIyBhdXRvbWFrZSAtIGNyZWF0ZSBNYWtlZmlsZS5pbiBmcm9tIE1ha2VmaWxlLmFtCisjIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDEsIDIwMDMsIDIwMDUsCisjIyAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisuUEhPTlk6IG1vc3RseWNsZWFuLWxpYnRvb2wgY2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tbGlidG9vbAorbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWxpYnRvb2wKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tYW06IGNsZWFuLWxpYnRvb2wKK2NsZWFuLWxpYnRvb2w6Cis/TFRSTVM/JUxUUk1TJQorCis/VE9QRElSX1A/ZGlzdGNsZWFuLWFtOiBkaXN0Y2xlYW4tbGlidG9vbAorP1RPUERJUl9QP2Rpc3RjbGVhbi1saWJ0b29sOgorP1RPUERJUl9QPwktcm0gLWYgbGlidG9vbCBjb25maWcubHQKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vbGlzcC5hbSBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vbGlzcC5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDQ5ZDE4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9saXNwLmFtCkBAIC0wLDAgKzEsMTQ2IEBACisjIyBhdXRvbWFrZSAtIGNyZWF0ZSBNYWtlZmlsZS5pbiBmcm9tIE1ha2VmaWxlLmFtCisjIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsCisjIyAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK2lmICU/SU5TVEFMTCUKK2luY2x1ZGUgaW5zdC12YXJzLmFtCitlbmRpZiAlP0lOU1RBTEwlCisKKyMjIC0tLS0tLS0tLS0gIyMKKyMjIEJ1aWxkaW5nLiAgIyMKKyMjIC0tLS0tLS0tLS0gIyMKKworZWxjLXN0YW1wOiAkKExJU1ApCisJQGVjaG8gJ1dBUk5JTkc6IFdhcm5pbmdzIGNhbiBiZSBpZ25vcmVkLiA6LSknCisJQHJtIC1mIGVsYy10ZW1wICYmIHRvdWNoIGVsYy10ZW1wCisJaWYgdGVzdCAiJChFTUFDUykiICE9IG5vOyB0aGVuIFwKKyMjIE1ha2Ugc3VyZSAiJEAiIGlzbid0IGVtcHR5IGluaXRpYWxseS4KKwkgIHNldCB4OyBcCisjIyBQb3B1bGF0ZSAiJEAiIHdpdGggZWxpc3AgZmlsZXMgKGZvdW5kIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeQorIyMgb3IgaW4gJHNyY2RpcikuCisJICBsaXN0PSckKExJU1ApJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICAgIHNldCB4ICIkJEAiICIkJGQkJHAiOyBzaGlmdDsgXAorCSAgZG9uZTsgXAorIyMgRmluYWxseSBjYWxsIGVsaXNwLWNvbXAgZm9yIGFsbCBmaWxlcy4KKwkgIHNoaWZ0OyBcCisJICBFTUFDUz0iJChFTUFDUykiICQoU0hFTEwpICQoZWxpc3BfY29tcCkgIiQkQCIgfHwgZXhpdCAxOyBcCisJZWxzZSA6IDsgZmkKKwlAbXYgLWYgZWxjLXRlbXAgJEAKKworIyMgRG8gbm90IHVzZSAkKEVMQ0ZJTEVTKSBhcyB0YXJnZXQsIGJlY2F1c2UgaXQgbWF5IGhhdmUgYmVlbiBlbXB0aWVkCisjIyBieSB0aGUgdXNlciAodG8gZGlzYWJsZSBieXRlLWNvbXBpbGF0aW9uKSwgYW5kIFBPU0lYIGRvZXMgbm90IGFsbG93CisjIyBhbiBlbXB0eSB0YXJnZXQuCiskKGFtX19FTENGSUxFUyk6IGVsYy1zdGFtcAorIyMgUmVjb3ZlciBmcm9tIHRoZSByZW1vdmFsIG9mICRALgorIyMKKyMjIERvIG5vdCBjYWxsIGBtYWtlIGVsYy1zdGFtcCcgaWYgZW1hY3MgaXMgbm90IGF2YWlsYWJsZSwgYmVjYXVzZSBpdCB3b3VsZAorIyMgYmUgdXNlbGVzcy4KKwlAaWYgdGVzdCAiJChFTUFDUykiICE9IG5vICYmIHRlc3QgISAtZiAkQDsgdGhlbiBcCisjIyBJZiBgbWFrZSAtaicgaXMgdXNlZCBhbmQgbW9yZSB0aGFuIG9uZSBmaWxlIGhhcyBiZWVuIGVyYXNlZCwgc2V2ZXJhbAorIyMgcHJvY2Vzc2VzIGNhbiBleGVjdXRlIHRoaXMgYmxvY2suICBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IG9ubHkKKyMjIHRoZSBmaXJzdCBvbmUgd2lsbCBydW4gYCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGVsYy1zdGFtcCcsIGFuZCB0aGUKKyMjIG90aGVyIG9uZXMgd2lsbCB3YWl0LgorIyMKKyMjIFRoZXJlIGlzIGEgcmFjZSBoZXJlIGlmIG9ubHkgb25lIGNoaWxkIG9mIG1ha2UgcmVjZWl2ZSBhIHNpZ25hbC4KKyMjIEluIHRoYXQgY2FzZSB0aGUgYnVpbGQgbWF5IGZhaWwuICBXZSByZW1vdmUgZWxjLXN0YW1wIHdoZW4gd2UgcmVjZWl2ZQorIyMgYSBzaWduYWwgc28gd2UgYXJlIHN1cmUgdGhlIGJ1aWxkIHdpbGwgc3VjY2VlZCB0aGUgbmV4dCB0aW1lLgorCSAgdHJhcCAncm0gLXJmIGVsYy1sb2NrIGVsYy1zdGFtcCcgMSAyIDEzIDE1OyBcCisJICBpZiBta2RpciBlbGMtbG9jayAyPi9kZXYvbnVsbDsgdGhlbiBcCisjIyBUaGlzIGNvZGUgaXMgYmVpbmcgZXhlY3V0ZWQgYnkgdGhlIGZpcnN0IHByb2Nlc3MuCisJICAgIHJtIC1mIGVsYy1zdGFtcDsgXAorCSAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBlbGMtc3RhbXA7IFwKKwkgICAgcm1kaXIgZWxjLWxvY2s7IFwKKwkgIGVsc2UgXAorIyMgVGhpcyBjb2RlIGlzIGJlaW5nIGV4ZWN1dGVkIGJ5IHRoZSBmb2xsb3dlciBwcm9jZXNzZXMuCisjIyBXYWl0IHVudGlsIHRoZSBmaXJzdCBwcm9jZXNzIGlzIGRvbmUuCisJICAgIHdoaWxlIHRlc3QgLWQgZWxjLWxvY2s7IGRvIHNsZWVwIDE7IGRvbmU7IFwKKyMjIFN1Y2NlZWQgaWYgYW5kIG9ubHkgaWYgdGhlIGZpcnN0IHByb2Nlc3Mgc3VjY2VlZGVkLgorCSAgICB0ZXN0IC1mIGVsYy1zdGFtcDsgZXhpdCAkJD87IFwKKwkgIGZpOyBcCisJZWxzZSA6IDsgZmkKKworCisjIyAtLS0tLS0tLS0tLS0gIyMKKyMjIEluc3RhbGxpbmcuICAjIworIyMgLS0tLS0tLS0tLS0tICMjCisKK2lmICU/SU5TVEFMTCUKK2FtX19pbnN0YWxsZGlycyArPSAiJChERVNURElSKSQoJU5ESVIlZGlyKSIKKyVESVIlTElTUF9JTlNUQUxMID0gJUJBU0U/JChJTlNUQUxMX0RBVEEpOiQoaW5zdGFsbF9zaF9EQVRBKSUKKy5QSE9OWSBpbnN0YWxsLSVFWEVDP2V4ZWM6ZGF0YSUtYW06IGluc3RhbGwtJURJUiVMSVNQCitpbnN0YWxsLSVESVIlTElTUDogJCglRElSJV9MSVNQKSAkKEVMQ0ZJTEVTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorIyMgRG8gbm90IGluc3RhbGwgYW55dGhpbmcgaWYgRU1BQ1Mgd2FzIG5vdCBmb3VuZC4KKwlAaWYgdGVzdCAiJChFTUFDUykiICE9IG5vICYmIHRlc3QgLW4gIiQoJU5ESVIlZGlyKSI7IHRoZW4gXAorCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQoJU5ESVIlZGlyKSI7IFwKKz8hQkFTRT8JICAkKGFtX192cGF0aF9hZGpfc2V0dXApIFwKKyMjIEZ1bm55IGludm9jYXRpb24gYmVjYXVzZSBNYWtlZmlsZSB2YXJpYWJsZSBjYW4gYmUgZW1wdHksIGxlYWRpbmcgdG8KKyMjIGEgc3ludGF4IGVycm9yIGluIHNoLgorCSAgbGlzdD0nJCglRElSJV9MSVNQKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorIyMgQSBsaXNwIGZpbGUgY2FuIGJlIGluIHRoZSBzb3VyY2UgZGlyZWN0b3J5IG9yIHRoZSBidWlsZCBkaXJlY3RvcnkuCisJICAgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICAgICVCQVNFPyQoYW1fX3N0cmlwX2Rpcik6JChhbV9fdnBhdGhfYWRqKSUgXAorCSAgICBlY2hvICIgJCglRElSJUxJU1BfSU5TVEFMTCkgJyQkZCQkcCcgJyQoREVTVERJUikkKCVORElSJWRpcikvJCRmJyI7IFwKKwkgICAgJCglRElSJUxJU1BfSU5TVEFMTCkgIiQkZCQkcCIgIiQoREVTVERJUikkKCVORElSJWRpcikvJCRmIiB8fCBleGl0ICQkPzsgXAorIyMgT25seSBpbnN0YWxsIC5lbGMgZmlsZSBpZiBpdCBleGlzdHMuCisJICAgIGlmIHRlc3QgLWYgJCR7cH1jOyB0aGVuIFwKKwkgICAgICBlY2hvICIgJCglRElSJUxJU1BfSU5TVEFMTCkgJyQke3B9YycgJyQoREVTVERJUikkKCVORElSJWRpcikvJCR7Zn1jJyI7IFwKKwkgICAgICAkKCVESVIlTElTUF9JTlNUQUxMKSAiJCR7cH1jIiAiJChERVNURElSKSQoJU5ESVIlZGlyKS8kJHtmfWMiIHx8IGV4aXQgJCQ/OyBcCisJICAgIGVsc2UgOiA7IGZpOyBcCisJICBkb25lOyBcCisJZWxzZSA6IDsgZmkKK2VuZGlmICU/SU5TVEFMTCUKKworCisjIyAtLS0tLS0tLS0tLS0tLSAjIworIyMgVW5pbnN0YWxsaW5nLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tICMjCisKK2lmICU/SU5TVEFMTCUKKy5QSE9OWSB1bmluc3RhbGwtYW06IHVuaW5zdGFsbC0lRElSJUxJU1AKK3VuaW5zdGFsbC0lRElSJUxJU1A6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKyMjIERvIG5vdCB1bmluc3RhbGwgYW55dGhpbmcgaWYgRU1BQ1Mgd2FzIG5vdCBmb3VuZC4KKwlAdGVzdCAiJChFTUFDUykiICE9IG5vICYmIHRlc3QgLW4gIiQoJU5ESVIlZGlyKSIgfHwgZXhpdCAwOyBcCisJbGlzdD0nJCglRElSJV9MSVNQKSc7IFwKKz9CQVNFPwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorPyFCQVNFPwkkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBmaWxlcz1gJChhbV9fbm9iYXNlX3N0cmlwKWA7IFwKKwl0ZXN0IC1uICIkJGZpbGVzIiB8fCBleGl0IDA7IFwKKwlmaWxlc2M9YGVjaG8gIiQkZmlsZXMiIHwgc2VkICdzfCQkfGN8J2A7IFwKKwllY2hvICIgKCBjZCAnJChERVNURElSKSQoJU5ESVIlZGlyKScgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisJY2QgIiQoREVTVERJUikkKCVORElSJWRpcikiICYmIHJtIC1mICQkZmlsZXMgfHwgZXhpdCAkJD87IFwKKwllY2hvICIgKCBjZCAnJChERVNURElSKSQoJU5ESVIlZGlyKScgJiYgcm0gLWYiICQkZmlsZXNjICIpIjsgXAorCWNkICIkKERFU1RESVIpJCglTkRJUiVkaXIpIiAmJiBybSAtZiAkJGZpbGVzYworZW5kaWYgJT9JTlNUQUxMJQorCisKKyMjIC0tLS0tLS0tLS0gIyMKKyMjIENsZWFuaW5nLiAgIyMKKyMjIC0tLS0tLS0tLS0gIyMKKworLlBIT05ZIGNsZWFuLWFtOiBjbGVhbi1saXNwCitjbGVhbi1saXNwOgorCS1ybSAtZiBlbGMtc3RhbXAgJChFTENGSUxFUykKKworCisjIyAtLS0tLS0tLS0tLS0tLSAjIworIyMgRGlzdHJpYnV0aW5nLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tICMjCisKK2lmICU/RElTVCUKK0RJU1RfQ09NTU9OICs9ICVESVNUVkFSJQorZW5kaWYgJT9ESVNUJQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9sdGxpYi5hbSBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vbHRsaWIuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlhYTAwYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vbHRsaWIuYW0KQEAgLTAsMCArMSwxMTIgQEAKKyMjIGF1dG9tYWtlIC0gY3JlYXRlIE1ha2VmaWxlLmluIGZyb20gTWFrZWZpbGUuYW0KKyMjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMSwgMjAwMywgMjAwNCwKKyMjIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworaWYgJT9JTlNUQUxMJQoraW5jbHVkZSBpbnN0LXZhcnMuYW0KK2VuZGlmICU/SU5TVEFMTCUKKworIyMgLS0tLS0tLS0tLS0tICMjCisjIyBJbnN0YWxsaW5nLiAgIyMKKyMjIC0tLS0tLS0tLS0tLSAjIworCitpZiAlP0lOU1RBTEwlCithbV9faW5zdGFsbGRpcnMgKz0gIiQoREVTVERJUikkKCVORElSJWRpcikiCisuUEhPTlkgaW5zdGFsbC0lRVhFQz9leGVjOmRhdGElLWFtOiBpbnN0YWxsLSVESVIlTFRMSUJSQVJJRVMKK2luc3RhbGwtJURJUiVMVExJQlJBUklFUzogJCglRElSJV9MVExJQlJBUklFUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKCVORElSJWRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKCVORElSJWRpcikiCitpZiAlP0JBU0UlCisjIyBGdW5ueSBpbnZvY2F0aW9uIGJlY2F1c2UgTWFrZWZpbGUgdmFyaWFibGUgY2FuIGJlIGVtcHR5LCBsZWFkaW5nIHRvCisjIyBhIHN5bnRheCBlcnJvciBpbiBzaC4KKwlAbGlzdD0nJCglRElSJV9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKCVORElSJWRpcikiIHx8IGxpc3Q9OyBcCisJbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKKwkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAorCSAgZWxzZSA6OyBmaTsgXAorCWRvbmU7IFwKKwl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKKyMjIE5vdGUgdGhhdCB3ZSBleHBsaWNpdGx5IHNldCB0aGUgbGlidG9vbCBtb2RlLiAgVGhpcyBhdm9pZHMgYW55IGxvc3NhZ2UKKyMjIGlmIHRoZSBwcm9ncmFtIGRvZXNuJ3QgaGF2ZSBhIG5hbWUgdGhhdCBsaWJ0b29sIGV4cGVjdHMuCisjIyBVc2UgSU5TVEFMTCBhbmQgbm90IElOU1RBTExfREFUQSBiZWNhdXNlIGxpYnRvb2wga25vd3MgdGhlIHJpZ2h0CisjIyBwZXJtaXNzaW9ucyB0byB1c2UuCis/TElCVE9PTD8JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKCVORElSJWRpciknIjsgXAorP0xJQlRPT0w/CSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKCVORElSJWRpcikiOyBcCis/IUxJQlRPT0w/CSAgZWNobyAiICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdCAnJChERVNURElSKSQoJU5ESVIlZGlyKSciOyBcCis/IUxJQlRPT0w/CSAgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0ICIkKERFU1RESVIpJCglTkRJUiVkaXIpIjsgXAorCX0KK2Vsc2UgISU/QkFTRSUKKwlAbGlzdD0nJCglRElSJV9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKCVORElSJWRpcikiICB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBlY2hvICIkJHAgJCRwIjsgZWxzZSA6OyBmaTsgZG9uZSB8IFwKKwlzZWQgJy8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorCSQoQVdLKSAnQkVHSU4geyBjdXIgPSAiLiIgfSBcCisJICB7IGlmICgkJDIgPT0gY3VyKSB7IGZpbGVzID0gZmlsZXMgIiAiICQkMSB9IFwKKwkgICAgZWxzZSB7IHByaW50IGN1ciwgZmlsZXM7IGZpbGVzID0gJCQxOyBjdXIgPSAkJDIgfSB9IFwKKwkgIEVORCB7IHByaW50IGN1ciwgZmlsZXMgfScgfCBcCisJd2hpbGUgcmVhZCBkaXIgZmlsZXM7IGRvIFwKKwkgIHRlc3QgLXogIiQkZmlsZXMiIHx8IHsgXAorCSAgICB0ZXN0ICJ4JCRkaXIiID0geC4gfHwgeyBcCisJICAgICAgZWNobyAiJChNS0RJUl9QKSAnJChERVNURElSKSQoJU5ESVIlZGlyKS8kJGRpciciOyBcCisJICAgICAgJChNS0RJUl9QKSAiJChERVNURElSKSQoJU5ESVIlZGlyKS8kJGRpciI7IH07IFwKKyMjIE5vdGUgdGhhdCB3ZSBleHBsaWNpdGx5IHNldCB0aGUgbGlidG9vbCBtb2RlLiAgVGhpcyBhdm9pZHMgYW55IGxvc3NhZ2UKKyMjIGlmIHRoZSBwcm9ncmFtIGRvZXNuJ3QgaGF2ZSBhIG5hbWUgdGhhdCBsaWJ0b29sIGV4cGVjdHMuCisjIyBVc2UgSU5TVEFMTCBhbmQgbm90IElOU1RBTExfREFUQSBiZWNhdXNlIGxpYnRvb2wga25vd3MgdGhlIHJpZ2h0CisjIyBwZXJtaXNzaW9ucyB0byB1c2UuCis/TElCVE9PTD8JICAgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRmaWxlcyAnJChERVNURElSKSQoJU5ESVIlZGlyKS8kJGRpciciOyBcCis/TElCVE9PTD8JICAgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGZpbGVzICIkKERFU1RESVIpJCglTkRJUiVkaXIpLyQkZGlyIiB8fCBleGl0ICQkPzsgXAorPyFMSUJUT09MPwkgICAgZWNobyAiICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkZmlsZXMgJyQoREVTVERJUikkKCVORElSJWRpcikvJCRkaXInIjsgXAorPyFMSUJUT09MPwkgICAgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRmaWxlcyAiJChERVNURElSKSQoJU5ESVIlZGlyKS8kJGRpciIgfHwgZXhpdCAkJD87IFwKKwkgIH07IFwKKwlkb25lCitlbmRpZiAhJT9CQVNFJQorZW5kaWYgJT9JTlNUQUxMJQorCisKKyMjIC0tLS0tLS0tLS0tLS0tICMjCisjIyBVbmluc3RhbGxpbmcuICAjIworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKworaWYgJT9JTlNUQUxMJQorLlBIT05ZIHVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLSVESVIlTFRMSUJSQVJJRVMKK3VuaW5zdGFsbC0lRElSJUxUTElCUkFSSUVTOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoJURJUiVfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJCglTkRJUiVkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJUJBU0U/JChhbV9fc3RyaXBfZGlyKTpmPSQkcDslIFwKKz9MSUJUT09MPwkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQoJU5ESVIlZGlyKS8kJGYnIjsgXAorP0xJQlRPT0w/CSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKCVORElSJWRpcikvJCRmIjsgXAorPyFMSUJUT09MPwkgIGVjaG8gIiBybSAtZiAnJChERVNURElSKSQoJU5ESVIlZGlyKS8kJGYnIjsgXAorPyFMSUJUT09MPwkgIHJtIC1mICIkKERFU1RESVIpJCglTkRJUiVkaXIpLyQkZiI7IFwKKwlkb25lCitlbmRpZiAlP0lOU1RBTEwlCisKKworIyMgLS0tLS0tLS0tLSAjIworIyMgQ2xlYW5pbmcuICAjIworIyMgLS0tLS0tLS0tLSAjIworCisuUEhPTlkgY2xlYW4tYW06IGNsZWFuLSVESVIlTFRMSUJSQVJJRVMKK2NsZWFuLSVESVIlTFRMSUJSQVJJRVM6CisJLXRlc3QgLXogIiQoJURJUiVfTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKCVESVIlX0xUTElCUkFSSUVTKQorIyMgYHNvX2xvY2F0aW9ucycgZmlsZXMgYXJlIGNyZWF0ZWQgYnkgc29tZSBsaW5rZXJzIChJUklYLCBPU0YpIHdoZW4KKyMjIGJ1aWxkaW5nIGEgc2hhcmVkIG9iamVjdC4gIExpYnRvb2wgcGxhY2VzIHRoZXNlIGZpbGVzIGluIHRoZQorIyMgZGlyZWN0b3J5IHdoZXJlIHRoZSBzaGFyZWQgb2JqZWN0IGlzIGNyZWF0ZWQuCisJQGxpc3Q9JyQoJURJUiVfTFRMSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBkaXI9ImBlY2hvICQkcCB8IHNlZCAtZSAnc3wvW14vXSokJHx8J2AiOyBcCisJICB0ZXN0ICIkJGRpciIgIT0gIiQkcCIgfHwgZGlyPS47IFwKKwkgIGVjaG8gInJtIC1mIFwiJCR7ZGlyfS9zb19sb2NhdGlvbnNcIiI7IFwKKwkgIHJtIC1mICIkJHtkaXJ9L3NvX2xvY2F0aW9ucyI7IFwKKwlkb25lCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2x0bGlicmFyeS5hbSBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vbHRsaWJyYXJ5LmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NTUyMzQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL2x0bGlicmFyeS5hbQpAQCAtMCwwICsxLDE4IEBACisjIyBhdXRvbWFrZSAtIGNyZWF0ZSBNYWtlZmlsZS5pbiBmcm9tIE1ha2VmaWxlLmFtCisjIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDIwMDMsIDIwMDUsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZQorIyMgRm91bmRhdGlvbiwgSW5jLgorCisjIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCislTFRMSUJSQVJZJTogJCglWExUTElCUkFSWSVfT0JKRUNUUykgJCglWExUTElCUkFSWSVfREVQRU5ERU5DSUVTKSAlRElSU1RBTVAlCisJJVZFUkJPU0UlJCglWExJTkslKSAlUlBBVEglICQoJVhMVExJQlJBUlklX09CSkVDVFMpICQoJVhMVExJQlJBUlklX0xJQkFERCkgJChMSUJTKQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9tYW5zLXZhcnMuYW0gYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL21hbnMtdmFycy5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTlkZTg4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9tYW5zLXZhcnMuYW0KQEAgLTAsMCArMSwyMCBAQAorIyMgYXV0b21ha2UgLSBjcmVhdGUgTWFrZWZpbGUuaW4gZnJvbSBNYWtlZmlsZS5hbQorIyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAyMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK05ST0ZGID0gbnJvZmYKKyMjIFdlIGRvbid0IHJlYWxseSBuZWVkIHRoaXMsIGJ1dCB3ZSB1c2UgaXQgaW4gY2FzZSB3ZSBldmVyIHdhbnQgdG8KKyMjIHN1cHBvcnQgbm9pbnN0X01BTlMuCitNQU5TID0gJU1BTlMlCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL21hbnMuYW0gYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL21hbnMuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhNmM3ZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vbWFucy5hbQpAQCAtMCwwICsxLDE0MiBAQAorIyMgYXV0b21ha2UgLSBjcmVhdGUgTWFrZWZpbGUuaW4gZnJvbSBNYWtlZmlsZS5hbQorIyMgQ29weXJpZ2h0IChDKSAxOTk4LCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA2LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUKKyMjIEZvdW5kYXRpb24sIEluYy4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitpbmNsdWRlIGluc3QtdmFycy5hbQorbWFuJVNFQ1RJT04lZGlyID0gJChtYW5kaXIpL21hbiVTRUNUSU9OJQorCisjIyAtLS0tLS0tLS0tLS0gIyMKKyMjIEluc3RhbGxpbmcuICAjIworIyMgLS0tLS0tLS0tLS0tICMjCisKKyMjIE1BTlMgcHJpbWFyeSBhcmUgYWx3YXlzIGluc3RhbGxlZCBpbiBtYW5kaXIsIGhlbmNlIGluc3RhbGwtZGF0YQorIyMgaXMgaGFyZCBjb2RlZC4KKworLlBIT05ZOiBpbnN0YWxsLW1hbgorP0lOU1RBTEwtTUFOP2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1tYW4KKz9JTlNUQUxMLU1BTj9hbV9faW5zdGFsbGRpcnMgKz0gIiQoREVTVERJUikkKG1hbiVTRUNUSU9OJWRpcikiCisuUEhPTlkgaW5zdGFsbC1tYW46IGluc3RhbGwtbWFuJVNFQ1RJT04lCitpbnN0YWxsLW1hbiVTRUNUSU9OJTogJURFUFMlCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChtYW4lU0VDVElPTiVkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChtYW4lU0VDVElPTiVkaXIpIgoraWYgJT9OT1RSQU5TX01BTlMlCisjIyBIYW5kbGUgTUFOUyB3aXRoIG5vdHJhbnNfIHByZWZpeAorCUBsaXN0PSclTk9UUkFOU19TRUNUX0xJU1QlJzsgdGVzdCAtbiAiJChtYW4lU0VDVElPTiVkaXIpIiB8fCBleGl0IDA7IFwKKwl7IGZvciBpIGluICQkbGlzdDsgZG8gZWNobyAiJCRpIjsgZG9uZTsgIFwKKyMjIEV4dHJhY3QgYWxsIGl0ZW1zIGZyb20gbm90cmFuc19tYW5fTUFOUyB0aGF0IHNob3VsZCBnbyBpbiB0aGlzIHNlY3Rpb24uCisjIyBUaGlzIG11c3QgYmUgZG9uZSBkeW5hbWljYWxseSB0byBzdXBwb3J0IGNvbmRpdGlvbmFscy4KKz9IQVZFX05PVFJBTlM/CWwyPSclTk9UUkFOU19MSVNUJSc7IGZvciBpIGluICQkbDI7IGRvIGVjaG8gIiQkaSI7IGRvbmUgfCBcCisjIyBBY2NlcHQgZm9yIGBtYW4xJyBmaWxlcyBsaWtlIGBmb28uMWMnIGJ1dCBub3QgYHN1Yi4xL2Zvby4yJyBvciBgZm9vLTIuMS40Jy4KKz9IQVZFX05PVFJBTlM/CSAgc2VkIC1uICcvXC4lU0VDVElPTiVbYS16XSokJC9wJzsgXAorIyMgRXh0cmFjdCBiYXNlbmFtZSBvZiBtYW5wYWdlLCBjaGFuZ2UgdGhlIGV4dGVuc2lvbiBpZiBuZWVkZWQuCisJfSB8IHdoaWxlIHJlYWQgcDsgZG8gXAorIyMgRmluZCB0aGUgZmlsZS4KKwkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgZWNobyAiJCRwIjsgXAorCWRvbmUgfCBcCisjIyBFeHRyYWN0IHRoZSBiYXNlbmFtZSBvZiB0aGUgbWFuIHBhZ2UgYW5kIGNoYW5nZSB0aGUgZXh0ZW5zaW9uIGlmIG5lZWRlZC4KKwlzZWQgJ247cywuKi8sLDtwO3MsXC5bXiVTRUNUSU9OJV1bMC05YS16XSokJCwuJVNFQ1RJT04lLCcgfCBcCisJc2VkICdOO047cyxcbiwgLGcnIHwgeyBcCisjIyBXZSBub3cgaGF2ZSBhIGxpc3QgInNvdXJjZWZpbGUgYmFzZW5hbWUgaW5zdGFsbGVkLW5hbWUiLgorCWxpc3Q9OyB3aGlsZSByZWFkIGZpbGUgYmFzZSBpbnN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJGJhc2UiID0gIiQkaW5zdCI7IHRoZW4gbGlzdD0iJCRsaXN0ICQkZmlsZSI7IGVsc2UgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICckJGZpbGUnICckKERFU1RESVIpJChtYW4lU0VDVElPTiVkaXIpLyQkaW5zdCciOyBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAiJCRmaWxlIiAiJChERVNURElSKSQobWFuJVNFQ1RJT04lZGlyKS8kJGluc3QiIHx8IGV4aXQgJCQ/OyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkaSI7IGRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIHRlc3QgLXogIiQkZmlsZXMiIHx8IHsgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKG1hbiVTRUNUSU9OJWRpciknIjsgXAorCSAgICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQobWFuJVNFQ1RJT04lZGlyKSIgfHwgZXhpdCAkJD87IH07IFwKKwlkb25lOyB9CitlbmRpZiAlP05PVFJBTlNfTUFOUyUKK2lmICU/VFJBTlNfTUFOUyUKKyMjIEhhbmRsZSBNQU5TIHdpdGhvdXQgbm90cmFuc18gcHJlZml4CisJQGxpc3Q9JyVUUkFOU19TRUNUX0xJU1QlJzsgdGVzdCAtbiAiJChtYW4lU0VDVElPTiVkaXIpIiB8fCBleGl0IDA7IFwKKwl7IGZvciBpIGluICQkbGlzdDsgZG8gZWNobyAiJCRpIjsgZG9uZTsgXAorIyMgRXh0cmFjdCBhbGwgaXRlbXMgZnJvbSBub3RyYW5zX21hbl9NQU5TIHRoYXQgc2hvdWxkIGdvIGluIHRoaXMgc2VjdGlvbi4KKyMjIFRoaXMgbXVzdCBiZSBkb25lIGR5bmFtaWNhbGx5IHRvIHN1cHBvcnQgY29uZGl0aW9uYWxzLgorP0hBVkVfVFJBTlM/CWwyPSclVFJBTlNfTElTVCUnOyBmb3IgaSBpbiAkJGwyOyBkbyBlY2hvICIkJGkiOyBkb25lIHwgXAorIyMgQWNjZXB0IGZvciBgbWFuMScgZmlsZXMgbGlrZSBgZm9vLjFjJyBidXQgbm90IGBzdWIuMS9mb28uMicgb3IgYGZvby0yLjEuNCcuCis/SEFWRV9UUkFOUz8JICBzZWQgLW4gJy9cLiVTRUNUSU9OJVthLXpdKiQkL3AnOyBcCisjIyBFeHRyYWN0IGJhc2VuYW1lIG9mIG1hbnBhZ2UsIGNoYW5nZSB0aGUgZXh0ZW5zaW9uIGlmIG5lZWRlZC4KKwl9IHwgd2hpbGUgcmVhZCBwOyBkbyBcCisjIyBGaW5kIHRoZSBmaWxlLgorCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBlY2hvICIkJHAiOyBcCisJZG9uZSB8IFwKKyMjIEV4dHJhY3QgdGhlIGJhc2VuYW1lIG9mIHRoZSBtYW4gcGFnZSBhbmQgY2hhbmdlIHRoZSBleHRlbnNpb24gaWYgbmVlZGVkLgorCXNlZCAtZSAnbjtzLC4qLywsO3A7aDtzLC4qXC4sLDtzLF5bXiVTRUNUSU9OJV1bMC05YS16XSokJCwlU0VDVElPTiUsO3gnIFwKKwkgICAgICAtZSAncyxcLlswLTlhLXpdKiQkLCw7JCh0cmFuc2Zvcm0pO0c7cyxcbiwuLCcgfCBcCisJc2VkICdOO047cyxcbiwgLGcnIHwgeyBcCisjIyBXZSBub3cgaGF2ZSBhIGxpc3QgInNvdXJjZWZpbGUgYmFzZW5hbWUgaW5zdGFsbGVkLW5hbWUiLgorCWxpc3Q9OyB3aGlsZSByZWFkIGZpbGUgYmFzZSBpbnN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJGJhc2UiID0gIiQkaW5zdCI7IHRoZW4gbGlzdD0iJCRsaXN0ICQkZmlsZSI7IGVsc2UgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICckJGZpbGUnICckKERFU1RESVIpJChtYW4lU0VDVElPTiVkaXIpLyQkaW5zdCciOyBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAiJCRmaWxlIiAiJChERVNURElSKSQobWFuJVNFQ1RJT04lZGlyKS8kJGluc3QiIHx8IGV4aXQgJCQ/OyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkaSI7IGRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIHRlc3QgLXogIiQkZmlsZXMiIHx8IHsgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKG1hbiVTRUNUSU9OJWRpciknIjsgXAorCSAgICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQobWFuJVNFQ1RJT04lZGlyKSIgfHwgZXhpdCAkJD87IH07IFwKKwlkb25lOyB9CitlbmRpZiAlP1RSQU5TX01BTlMlCisKKworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFVuaW5zdGFsbGluZy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLSAjIworCisuUEhPTlk6IHVuaW5zdGFsbC1tYW4KKz9JTlNUQUxMLU1BTj91bmluc3RhbGwtYW06IHVuaW5zdGFsbC1tYW4KKy5QSE9OWSB1bmluc3RhbGwtbWFuOiB1bmluc3RhbGwtbWFuJVNFQ1RJT04lCit1bmluc3RhbGwtbWFuJVNFQ1RJT04lOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCitpZiAlP05PVFJBTlNfTUFOUyUKKyMjIEhhbmRsZSBNQU5TIHdpdGggbm90cmFuc18gcHJlZml4CisJQGxpc3Q9JyVOT1RSQU5TX1NFQ1RfTElTVCUnOyB0ZXN0IC1uICIkKG1hbiVTRUNUSU9OJWRpcikiIHx8IGV4aXQgMDsgXAorCWZpbGVzPWB7IGZvciBpIGluICQkbGlzdDsgZG8gZWNobyAiJCRpIjsgZG9uZTsgXAorIyMgRXh0cmFjdCBhbGwgaXRlbXMgZnJvbSBub3RyYW5zX21hbl9NQU5TIHRoYXQgc2hvdWxkIGdvIGluIHRoaXMgc2VjdGlvbi4KKyMjIFRoaXMgbXVzdCBiZSBkb25lIGR5bmFtaWNhbGx5IHRvIHN1cHBvcnQgY29uZGl0aW9uYWxzLgorP0hBVkVfTk9UUkFOUz8JbDI9JyVOT1RSQU5TX0xJU1QlJzsgZm9yIGkgaW4gJCRsMjsgZG8gZWNobyAiJCRpIjsgZG9uZSB8IFwKKyMjIEFjY2VwdCBmb3IgYG1hbjEnIGZpbGVzIGxpa2UgYGZvby4xYycgYnV0IG5vdCBgc3ViLjEvZm9vLjInIG9yIGBmb28tMi4xLjQnLgorP0hBVkVfTk9UUkFOUz8JICBzZWQgLW4gJy9cLiVTRUNUSU9OJVthLXpdKiQkL3AnOyBcCisjIyBFeHRyYWN0IGJhc2VuYW1lIG9mIG1hbnBhZ2UsIGNoYW5nZSB0aGUgZXh0ZW5zaW9uIGlmIG5lZWRlZC4KKwl9IHwgc2VkICdzLC4qLywsO3MsXC5bXiVTRUNUSU9OJV1bMC05YS16XSokJCwuJVNFQ1RJT04lLCdgOyBcCisJdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCisJICBlY2hvICIgKCBjZCAnJChERVNURElSKSQobWFuJVNFQ1RJT04lZGlyKScgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisJICBjZCAiJChERVNURElSKSQobWFuJVNFQ1RJT04lZGlyKSIgJiYgcm0gLWYgJCRmaWxlczsgfQorZW5kaWYgJT9OT1RSQU5TX01BTlMlCitpZiAlP1RSQU5TX01BTlMlCisjIyBIYW5kbGUgTUFOUyB3aXRob3V0IG5vdHJhbnNfIHByZWZpeAorCUBsaXN0PSclVFJBTlNfU0VDVF9MSVNUJSc7IHRlc3QgLW4gIiQobWFuJVNFQ1RJT04lZGlyKSIgfHwgZXhpdCAwOyBcCisJZmlsZXM9YHsgZm9yIGkgaW4gJCRsaXN0OyBkbyBlY2hvICIkJGkiOyBkb25lOyBcCisjIyBFeHRyYWN0IGFsbCBpdGVtcyBmcm9tIG1hbl9NQU5TIHRoYXQgc2hvdWxkIGdvIGluIHRoaXMgc2VjdGlvbi4KKyMjIFRoaXMgbXVzdCBiZSBkb25lIGR5bmFtaWNhbGx5IHRvIHN1cHBvcnQgY29uZGl0aW9uYWxzLgorP0hBVkVfVFJBTlM/CWwyPSclVFJBTlNfTElTVCUnOyBmb3IgaSBpbiAkJGwyOyBkbyBlY2hvICIkJGkiOyBkb25lIHwgXAorIyMgQWNjZXB0IGZvciBgbWFuMScgZmlsZXMgbGlrZSBgZm9vLjFjJyBidXQgbm90IGBzdWIuMS9mb28uMicgb3IgYGZvby0yLjEuNCcuCis/SEFWRV9UUkFOUz8JICBzZWQgLW4gJy9cLiVTRUNUSU9OJVthLXpdKiQkL3AnOyBcCisjIyBFeHRyYWN0IGJhc2VuYW1lIG9mIG1hbnBhZ2UsIHJ1biBpdCB0aHJvdWdoIHRoZSBwcm9ncmFtIHJlbmFtZQorIyMgdHJhbnNmb3JtLCBhbmQgY2hhbmdlIHRoZSBleHRlbnNpb24gaWYgbmVlZGVkLgorCX0gfCBzZWQgLWUgJ3MsLiovLCw7aDtzLC4qXC4sLDtzLF5bXiVTRUNUSU9OJV1bMC05YS16XSokJCwlU0VDVElPTiUsO3gnIFwKKwkgICAgICAtZSAncyxcLlswLTlhLXpdKiQkLCw7JCh0cmFuc2Zvcm0pO0c7cyxcbiwuLCdgOyBcCisJdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCisJICBlY2hvICIgKCBjZCAnJChERVNURElSKSQobWFuJVNFQ1RJT04lZGlyKScgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisJICBjZCAiJChERVNURElSKSQobWFuJVNFQ1RJT04lZGlyKSIgJiYgcm0gLWYgJCRmaWxlczsgfQorZW5kaWYgJT9UUkFOU19NQU5TJQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9tdWx0aWxpYi5hbSBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vbXVsdGlsaWIuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg5N2I1ZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vbXVsdGlsaWIuYW0KQEAgLTAsMCArMSw2MCBAQAorIyMgYXV0b21ha2UgLSBjcmVhdGUgTWFrZWZpbGUuaW4gZnJvbSBNYWtlZmlsZS5hbQorIyMgQ29weXJpZ2h0IChDKSAxOTk4LCAyMDAxLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisjIyBNdWx0aWxpYiBzdXBwb3J0IHZhcmlhYmxlcy4KK01VTFRJU1JDVE9QID0KK01VTFRJQlVJTERUT1AgPQorTVVMVElESVJTID0KK01VTFRJU1VCRElSID0KK01VTFRJRE8gPSB0cnVlCitNVUxUSUNMRUFOID0gdHJ1ZQorCisjIEdOVSBNYWtlIG5lZWRzIHRvIHNlZSBhbiBleHBsaWNpdCAkKE1BS0UpIHZhcmlhYmxlIGluIHRoZSBjb21tYW5kIGl0CisjIHJ1bnMgdG8gZW5hYmxlIGl0cyBqb2Igc2VydmVyIGR1cmluZyBwYXJhbGxlbCBidWlsZHMuICBIZW5jZSB0aGUKKyMgY29tbWVudHMgYmVsb3cuCisKK2FsbC1tdWx0aToKKwkkKE1VTFRJRE8pICQoQU1fTUFLRUZMQUdTKSBETz1hbGwgbXVsdGktZG8gIyAkKE1BS0UpCitpbnN0YWxsLW11bHRpOgorCSQoTVVMVElETykgJChBTV9NQUtFRkxBR1MpIERPPWluc3RhbGwgbXVsdGktZG8gIyAkKE1BS0UpCisKKy5NQUtFIC5QSE9OWTogYWxsLW11bHRpIGluc3RhbGwtbXVsdGkKKworCittb3N0bHljbGVhbi1tdWx0aToKKwkkKE1VTFRJQ0xFQU4pICQoQU1fTUFLRUZMQUdTKSBETz1tb3N0bHljbGVhbiBtdWx0aS1jbGVhbiAjICQoTUFLRSkKK2NsZWFuLW11bHRpOgorCSQoTVVMVElDTEVBTikgJChBTV9NQUtFRkxBR1MpIERPPWNsZWFuIG11bHRpLWNsZWFuICMgJChNQUtFKQorZGlzdGNsZWFuLW11bHRpOgorCSQoTVVMVElDTEVBTikgJChBTV9NQUtFRkxBR1MpIERPPWRpc3RjbGVhbiBtdWx0aS1jbGVhbiAjICQoTUFLRSkKK21haW50YWluZXItY2xlYW4tbXVsdGk6CisJJChNVUxUSUNMRUFOKSAkKEFNX01BS0VGTEFHUykgRE89bWFpbnRhaW5lci1jbGVhbiBtdWx0aS1jbGVhbiAjICQoTUFLRSkKKworLk1BS0UgLlBIT05ZOiBtb3N0bHljbGVhbi1tdWx0aSBjbGVhbi1tdWx0aSBkaXN0Y2xlYW4tbXVsdGkgbWFpbnRhaW5lci1jbGVhbi1tdWx0aQorCitpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtbXVsdGkKKyMjIE5vIHVuaW5zdGFsbCBydWxlPworCisKKyMjIFRoZXNlIGNsZWFuaW5nIHJ1bGVzIGFyZSByZWN1cnNpdmUuICBUaGV5IHNob3VsZCBub3QgYmUKKyMjIHJlZ2lzdGVyZWQgYXMgZGVwZW5kZW5jaWVzIG9mICotYW0gcnVsZXMuICBGb3IgaW5zdGFuY2UKKyMjIG90aGVyd2lzZSBydW5uaW5nIGBtYWtlIGNsZWFuJyB3b3VsZCBjYXVzZSBib3RoCisjIyBjbGVhbi1tdWx0aSBhbmQgbW9zdGx5Y2xlYW4tbXVsdGkgdG8gYmUgcnVuLCB3aGlsZSBvbmx5CisjIyBjbGVhbi1tdWx0aSBpcyByZWFsbHkgZXhwZWN0ZWQgKHNpbmNlIGNsZWFuLW11bHRpIHJlY3Vyc2l2ZWx5CisjIyBjYWxsIGNsZWFuLCBpdCBhbHJlYWR5IGRvIHRoZSBqb2Igb2YgbW9zdGx5Y2xlYW4pLgorbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLW11bHRpCitjbGVhbjogY2xlYW4tbXVsdGkKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLW11bHRpCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLW11bHRpCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL3Byb2dyYW0uYW0gYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL3Byb2dyYW0uYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U1NjhlNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vcHJvZ3JhbS5hbQpAQCAtMCwwICsxLDI0IEBACisjIyBhdXRvbWFrZSAtIGNyZWF0ZSBNYWtlZmlsZS5pbiBmcm9tIE1ha2VmaWxlLmFtCisjIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDIwMDEsIDIwMDMsIDIwMDUsIDIwMDkKKyMjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCislUFJPR1JBTSUlRVhFRVhUJTogJCglWFBST0dSQU0lX09CSkVDVFMpICQoJVhQUk9HUkFNJV9ERVBFTkRFTkNJRVMpICVESVJTVEFNUCUKKyMjIFJlbW92ZSBwcm9ncmFtIGJlZm9yZSBsaW5raW5nLiAgT3RoZXJ3aXNlIHRoZSBsaW5rIHdpbGwgZmFpbCBpZiB0aGUKKyMjIHByb2dyYW0gaXMgcnVubmluZyBzb21ld2hlcmUuICBGSVhNRTogdGhpcyBjb3VsZCBiZSBhIGxvc3MgaWYKKyMjIHlvdSdyZSB1c2luZyBhbiBpbmNyZW1lbnRhbCBsaW5rZXIuICBNYXliZSB3ZSBzaG91bGQgdGhpbmsgdHdpY2U/CisjIyBPciBtYXliZSBub3QuLi4gc2FkbHksIGluY3JlbWVudGFsIGxpbmtlcnMgYXJlIHJhcmVyIHRoYW4gbG9zaW5nCisjIyBzeXN0ZW1zLgorCUBybSAtZiAlUFJPR1JBTSUlRVhFRVhUJQorCSVWRVJCT1NFJSQoJVhMSU5LJSkgJCglWFBST0dSQU0lX09CSkVDVFMpICQoJVhQUk9HUkFNJV9MREFERCkgJChMSUJTKQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9wcm9ncy5hbSBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vcHJvZ3MuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM5YjIzZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vcHJvZ3MuYW0KQEAgLTAsMCArMSwxNDQgQEAKKyMjIGF1dG9tYWtlIC0gY3JlYXRlIE1ha2VmaWxlLmluIGZyb20gTWFrZWZpbGUuYW0KKyMjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMSwgMjAwMywgMjAwNCwKKyMjIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyMgLS0tLS0tLS0tLS0tICMjCisjIyBJbnN0YWxsaW5nLiAgIyMKKyMjIC0tLS0tLS0tLS0tLSAjIworCitpZiAlP0lOU1RBTEwlCithbV9faW5zdGFsbGRpcnMgKz0gIiQoREVTVERJUikkKCVORElSJWRpcikiCisuUEhPTlkgaW5zdGFsbC0lRVhFQz9leGVjOmRhdGElLWFtOiBpbnN0YWxsLSVESVIlUFJPR1JBTVMKK2luc3RhbGwtJURJUiVQUk9HUkFNUzogJCglRElSJV9QUk9HUkFNUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKCVORElSJWRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKCVORElSJWRpcikiCisjIyBGdW5ueSBpbnZvY2F0aW9uIGJlY2F1c2UgTWFrZWZpbGUgdmFyaWFibGUgY2FuIGJlIGVtcHR5LCBsZWFkaW5nIHRvCisjIyBhIHN5bnRheCBlcnJvciBpbiBzaC4KKwlAbGlzdD0nJCglRElSJV9QUk9HUkFNUyknOyB0ZXN0IC1uICIkKCVORElSJWRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKKyMjIE9uIEN5Z3dpbiB3aXRoIGxpYnRvb2wgdGVzdCB3b24ndCBzZWUgYGZvby5leGUnIGJ1dCBpbnN0ZWFkIGBmb28nLgorIyMgU28gd2UgY2hlY2sgZm9yIGJvdGguCisJc2VkICdzLyQoRVhFRVhUKSQkLy8nIHwgXAorCXdoaWxlIHJlYWQgcCBwMTsgZG8gaWYgdGVzdCAtZiAkJHAlTElCVE9PTD8gfHwgdGVzdCAtZiAkJHAxJTsgXAorCSAgdGhlbiBlY2hvICIkJHAiOyBlY2hvICIkJHAiOyBlbHNlIDo7IGZpOyBcCisJZG9uZSB8IFwKKyMjIFdlIG5vdyBoYXZlIGEgbGlzdCBvZiBzb3VyY2VmaWxlIHBhaXJzLCBzZXBhcmF0ZWQgYnkgbmV3bGluZS4KKyMjIFR1cm4gdGhhdCBpbnRvICJzb3VyY2VmaWxlIHNvdXJjZV9iYXNlIHRhcmdldF9kaXIgeGZvcm1lZF90YXJnZXRfYmFzZSIsCisjIyB3aXRoIG5ld2xpbmVzIGJlaW5nIHR1cm5lZCBpbnRvIHNwYWNlcyBpbiBhIHNlY29uZCBzdGVwLgorCXNlZCAtZSAncDtzLC4qLywsO247aCcgLWUgJyVCQVNFP3N8Lip8Lnw6c3xbXi9dKiQkfHw7IHN8XiQkfC58JScgXAorCSAgICAtZSAncDt4O3MsLiovLCw7cy8kKEVYRUVYVCkkJC8vOyQodHJhbnNmb3JtKTtzLyQkLyQoRVhFRVhUKS8nIHwgXAorCXNlZCAnTjtOO047cyxcbiwgLGcnIHwgXAorIyMgVGhlIGZvbGxvd2luZyBhd2sgc2NyaXB0IHR1cm5zIHRoYXQgaW50byBvbmUgbGluZSBjb250YWluaW5nIGRpcmVjdG9yaWVzCisjIyBhbmQgdGhlbiBsaW5lcyBvZiAndHlwZSB0YXJnZXRfbmFtZV9vcl9kaXJlY3Rvcnkgc291cmNlcy4uLicsIHdpdGggdHlwZQorIyMgJ2QnIGRlc2lnbmF0aW5nIGRpcmVjdG9yaWVzLCBhbmQgJ2YnIGZpbGVzLgorCSQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiI7IGRpcnNbIi4iXSA9IDEgfSBcCisJICB7IGQ9JCQzOyBpZiAoZGlyc1tkXSAhPSAxKSB7IHByaW50ICJkIiwgZDsgZGlyc1tkXSA9IDEgfSBcCisJICAgIGlmICgkJDIgPT0gJCQ0KSBmaWxlc1tkXSA9IGZpbGVzW2RdICIgIiAkJDE7IFwKKwkgICAgZWxzZSB7IHByaW50ICJmIiwgJCQzICIvIiAkJDQsICQkMTsgfSB9IFwKKwkgIEVORCB7IGZvciAoZCBpbiBmaWxlcykgcHJpbnQgImYiLCBkLCBmaWxlc1tkXSB9JyB8IFwKKwl3aGlsZSByZWFkIHR5cGUgZGlyIGZpbGVzOyBkbyBcCis/IUJBU0U/CSAgY2FzZSAkJHR5cGUgaW4gXAorPyFCQVNFPwkgIGQpIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJCglTkRJUiVkaXIpLyQkZGlyJyI7IFwKKz8hQkFTRT8JICAgICAkKE1LRElSX1ApICIkKERFU1RESVIpJCglTkRJUiVkaXIpLyQkZGlyIiB8fCBleGl0ICQkPzs7IFwKKz8hQkFTRT8JICBmKSBcCisJICAgIGlmIHRlc3QgIiQkZGlyIiA9IC47IHRoZW4gZGlyPTsgZWxzZSBkaXI9LyQkZGlyOyBmaTsgXAorCSAgICB0ZXN0IC16ICIkJGZpbGVzIiB8fCB7IFwKKz8hTElCVE9PTD8JICAgICAgZWNobyAiICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZXMgJyQoREVTVERJUikkKCVORElSJWRpcikkJGRpciciOyBcCis/IUxJQlRPT0w/CSAgICAgICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZXMgIiQoREVTVERJUikkKCVORElSJWRpcikkJGRpciIgfHwgZXhpdCAkJD87IFwKKyMjIE5vdGUgdGhhdCB3ZSBleHBsaWNpdGx5IHNldCB0aGUgbGlidG9vbCBtb2RlLiAgVGhpcyBhdm9pZHMgYW55CisjIyBsb3NzYWdlIGlmIHRoZSBpbnN0YWxsIHByb2dyYW0gZG9lc24ndCBoYXZlIGEgbmFtZSB0aGF0IGxpYnRvb2wKKyMjIGV4cGVjdHMuCis/TElCVE9PTD8JICAgIGVjaG8gIiAkKElOU1RBTExfUFJPR1JBTV9FTlYpICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTExfUFJPR1JBTSkgJCRmaWxlcyAnJChERVNURElSKSQoJU5ESVIlZGlyKSQkZGlyJyI7IFwKKz9MSUJUT09MPwkgICAgJChJTlNUQUxMX1BST0dSQU1fRU5WKSAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZXMgIiQoREVTVERJUikkKCVORElSJWRpcikkJGRpciIgfHwgZXhpdCAkJD87IFwKKwkgICAgfSBcCis/IUJBU0U/CSAgOzsgZXNhYyBcCisJOyBkb25lCisKK2VuZGlmICU/SU5TVEFMTCUKKworCisjIyAtLS0tLS0tLS0tLS0tLSAjIworIyMgVW5pbnN0YWxsaW5nLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tICMjCisKK2lmICU/SU5TVEFMTCUKKy5QSE9OWSB1bmluc3RhbGwtYW06IHVuaW5zdGFsbC0lRElSJVBST0dSQU1TCit1bmluc3RhbGwtJURJUiVQUk9HUkFNUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKCVESVIlX1BST0dSQU1TKSc7IHRlc3QgLW4gIiQoJU5ESVIlZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgXAorIyMgUmVtb3ZlIGFueSBsZWFkaW5nIGRpcmVjdG9yeSBiZWZvcmUgYXBwbHlpbmcgJCh0cmFuc2Zvcm0pLAorIyMgYnV0IGtlZXAgdGhlIGRpcmVjdG9yeSBwYXJ0IGluIHRoZSBob2xkIGJ1ZmZlciwgaW4gb3JkZXIgdG8KKyMjIHJlYXBwbHkgaXQgYWdhaW4gYWZ0ZXJ3YXJkcyBpbiB0aGUgbm9iYXNlIGNhc2UuICBBcHBlbmQgJChFWEVFWFQpLgorCSAgc2VkIC1lICdoO3MsXi4qLywsO3MvJChFWEVFWFQpJCQvLzskKHRyYW5zZm9ybSknIFwKKwkgICAgICAtZSAncy8kJC8kKEVYRUVYVCkvJyVCQVNFPyA6IC1lICd4O3MsW14vXSokJCwsO0c7cyxcbiwsJyVgOyBcCisJdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKKwllY2hvICIgKCBjZCAnJChERVNURElSKSQoJU5ESVIlZGlyKScgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisJY2QgIiQoREVTVERJUikkKCVORElSJWRpcikiICYmIHJtIC1mICQkZmlsZXMKK2VuZGlmICU/SU5TVEFMTCUKKworCisjIyAtLS0tLS0tLS0tICMjCisjIyBDbGVhbmluZy4gICMjCisjIyAtLS0tLS0tLS0tICMjCisKKy5QSE9OWSBjbGVhbi1hbTogY2xlYW4tJURJUiVQUk9HUkFNUworY2xlYW4tJURJUiVQUk9HUkFNUzoKKz8hTElCVE9PTD8JLXRlc3QgLXogIiQoJURJUiVfUFJPR1JBTVMpIiB8fCBybSAtZiAkKCVESVIlX1BST0dSQU1TKQorIyMgVW5kZXIgQ3lnd2luLCB3ZSBidWlsZCBgcHJvZ3JhbSQoRVhFRVhUKScuICBIb3dldmVyLCBpZiB0aGlzCisjIyBwcm9ncmFtIHVzZXMgYSBMaWJ0b29sIGxpYnJhcnksIExpYnRvb2wgd2lsbCBtb3ZlIGl0IGluCisjIyBgX2xpYnMvcHJvZ3JhbSQoRVhFRVhUKScgYW5kIGNyZWF0ZSBhIGBwcm9ncmFtJyB3cmFwcGVyICh3aXRob3V0CisjIyBgJChFWEVFWFQpJykuICBUaGVyZWZvcmUsIGlmIExpYnRvb2wgaXMgdXNlZCwgd2UgbXVzdCB0cnkgdG8gZXJhc2UKKyMjIGJvdGggYHByb2dyYW0kKEVYRUVYVCknIGFuZCBgcHJvZ3JhbScuCisjIyBDbGVhbmluZyB0aGUgYF9saWJzLycgb3IgYC5saWJzLycgZGlyZWN0b3J5IGlzIGRvbmUgZnJvbSBjbGVhbi1saWJ0b29sLgorIyMgRklYTUU6IEluIHRoZSBmdXR1cmUgKGkuZS4sIHdoZW4gaXQgd29ya3MpIGl0IHdvdWxkIGJlIG5pY2UgdG8gZGVsZWdhdGUKKyMjIHRoaXMgdGFzayB0byBgbGlidG9vbCAtLW1vZGU9Y2xlYW4nLgorP0xJQlRPT0w/CUBsaXN0PSckKCVESVIlX1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCis/TElCVE9PTD8JZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKz9MSUJUT09MPwlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKKz9MSUJUT09MPwl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAorP0xJQlRPT0w/CWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKz9MSUJUT09MPwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorP0xJQlRPT0w/CXJtIC1mICQkbGlzdAorCisKKyMjIC0tLS0tLS0tLS0gIyMKKyMjIENoZWNraW5nLiAgIyMKKyMjIC0tLS0tLS0tLS0gIyMKKworaWYgJT9DSy1PUFRTJQorLlBIT05ZIGluc3RhbGxjaGVjay1hbTogaW5zdGFsbGNoZWNrLSVESVIlUFJPR1JBTVMKK2luc3RhbGxjaGVjay0lRElSJVBST0dSQU1TOiAkKCVESVIlX1BST0dSQU1TKQorCWJhZD0wOyBwaWQ9JCQkJDsgbGlzdD0iJCglRElSJV9QUk9HUkFNUykiOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGNhc2UgJyAkKEFNX0lOU1RBTExDSEVDS19TVERfT1BUSU9OU19FWEVNUFQpICcgaW4gXAorIyMgTWF0Y2ggJChzcmNkaXIpLyQkcCBpbiBhZGRpdGlvbiB0byAkJHAgYmVjYXVzZSBTdW4gbWFrZSBtaWdodCByZXdyaXRlCisjIyBmaWxlbmFtZXMgaW4gQU1fSU5TVEFMTENIRUNLX1NURF9PUFRJT05TX0VYRU1QVCBkdXJpbmcgVlBBVEggYnVpbGRzLgorCSAgICoiICQkcCAiKiB8ICoiICQoc3JjZGlyKS8kJHAgIiopIGNvbnRpbnVlOzsgXAorCSAgZXNhYzsgXAorIyMgU3RyaXAgdGhlIGRpcmVjdG9yeSBhbmQgJChFWEVFWFQpIGJlZm9yZSBhcHBseWluZyAkKHRyYW5zZm9ybSkuCisJICBmPWBlY2hvICIkJHAiIHwgXAorCSAgICAgc2VkICdzLF4uKi8sLDtzLyQoRVhFRVhUKSQkLy87JCh0cmFuc2Zvcm0pO3MvJCQvJChFWEVFWFQpLydgOyBcCisjIyBJbnNlcnQgdGhlIGRpcmVjdG9yeSBiYWNrIGlmIG5vYmFzZV8gaXMgdXNlZC4KKz8hQkFTRT8JICBmPWBlY2hvICIkJHAiIHwgc2VkICdzfFteL10qJCR8fCdgIiQkZiI7IFwKKwkgIGZvciBvcHQgaW4gLS1oZWxwIC0tdmVyc2lvbjsgZG8gXAorCSAgICBpZiAiJChERVNURElSKSQoJU5ESVIlZGlyKS8kJGYiICQkb3B0ID5jJCR7cGlkfV8ub3V0IFwKKwkgICAgICAgICAyPmMkJHtwaWR9Xy5lcnIgPC9kZXYvbnVsbCBcCisJCSAmJiB0ZXN0IC1uICJgY2F0IGMkJHtwaWR9Xy5vdXRgIiBcCisJCSAmJiB0ZXN0IC16ICJgY2F0IGMkJHtwaWR9Xy5lcnJgIjsgdGhlbiA6OyBcCisJICAgIGVsc2UgZWNobyAiJCRmIGRvZXMgbm90IHN1cHBvcnQgJCRvcHQiIDE+JjI7IGJhZD0xOyBmaTsgXAorCSAgZG9uZTsgXAorCWRvbmU7IHJtIC1mIGMkJHtwaWR9Xy4/Pz87IGV4aXQgJCRiYWQKK2VuZGlmICU/Q0stT1BUUyUKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vcHl0aG9uLmFtIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9weXRob24uYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQyNGExOQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vcHl0aG9uLmFtCkBAIC0wLDAgKzEsMTI4IEBACisjIyBhdXRvbWFrZSAtIGNyZWF0ZSBNYWtlZmlsZS5pbiBmcm9tIE1ha2VmaWxlLmFtCisjIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUKKyMjIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitpZiAlP0lOU1RBTEwlCitpbmNsdWRlIGluc3QtdmFycy5hbQorZW5kaWYgJT9JTlNUQUxMJQorCisjIyAtLS0tLS0tLS0tLS0gIyMKKyMjIEluc3RhbGxpbmcuICAjIworIyMgLS0tLS0tLS0tLS0tICMjCisKK2lmICU/SU5TVEFMTCUKK2FtX19pbnN0YWxsZGlycyArPSAiJChERVNURElSKSQoJU5ESVIlZGlyKSIKKy5QSE9OWSBpbnN0YWxsLSVFWEVDP2V4ZWM6ZGF0YSUtYW06IGluc3RhbGwtJURJUiVQWVRIT04KK2luc3RhbGwtJURJUiVQWVRIT046ICQoJURJUiVfUFlUSE9OKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoJU5ESVIlZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoJU5ESVIlZGlyKSIKK2lmICU/QkFTRSUKKwlAbGlzdD0nJCglRElSJV9QWVRIT04pJzsgZGxpc3Q9OyBsaXN0Mj07IHRlc3QgLW4gIiQoJU5ESVIlZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKyMjIEEgZmlsZSBjYW4gYmUgaW4gdGhlIHNvdXJjZSBkaXJlY3Rvcnkgb3IgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gYj07IGVsc2UgYj0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBpZiB0ZXN0IC1mICQkYiQkcDsgdGhlbiBcCisjIyBDb21wdXRlIGJhc2VuYW1lIG9mIHNvdXJjZSBmaWxlLiAgVW5sZXNzIHRoaXMgaXMgYSBub2Jhc2VfIHRhcmdldCwgd2UKKyMjIHdhbnQgdG8gaW5zdGFsbCAncHl0aG9uL2Zvby5weScgYXMgJyQoREVTVERJUikkKCVORElSJWRpcikvZm9vLnB5JywKKyMjIG5vdCAnJChERVNURElSKSQoJU5ESVIlZGlyKS9weXRob24vZm9vLnB5Jy4KKwkgICAgJChhbV9fc3RyaXBfZGlyKSBcCisJICAgIGRsaXN0PSIkJGRsaXN0ICQkZiI7IFwKKwkgICAgbGlzdDI9IiQkbGlzdDIgJCRiJCRwIjsgXAorCSAgZWxzZSA6OyBmaTsgXAorCWRvbmU7IFwKKwlmb3IgZmlsZSBpbiAkJGxpc3QyOyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorIyMgRG9uJ3QgcGVyZm9ybSB0cmFuc2xhdGlvbiwgc2luY2Ugc2NyaXB0IG5hbWUgaXMgaW1wb3J0YW50LgorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJCglTkRJUiVkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJCglTkRJUiVkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmUgfHwgZXhpdCAkJD87IFwKKyMjIEJ5dGUtY29tcGlsZSBtdXN0IGJlIGRvbmUgYXQgaW5zdGFsbCB0aW1lLCBzaW5jZSBmaWxlIHRpbWVzIGFyZQorIyMgZW5jb2RlZCBpbiB0aGUgYWN0dWFsIGZpbGVzLgorCWlmIHRlc3QgLW4gIiQkZGxpc3QiOyB0aGVuIFwKKwkgIGlmIHRlc3QgLXogIiQoREVTVERJUikiOyB0aGVuIFwKKwkgICAgUFlUSE9OPSQoUFlUSE9OKSAkKHB5X2NvbXBpbGUpIC0tYmFzZWRpciAiJCglTkRJUiVkaXIpIiAkJGRsaXN0OyBcCisJICBlbHNlIFwKKwkgICAgUFlUSE9OPSQoUFlUSE9OKSAkKHB5X2NvbXBpbGUpIC0tZGVzdGRpciAiJChERVNURElSKSIgLS1iYXNlZGlyICIkKCVORElSJWRpcikiICQkZGxpc3Q7IFwKKwkgIGZpOyBcCisJZWxzZSA6OyBmaQorZWxzZSAhJT9CQVNFJQorCUBsaXN0PSckKCVESVIlX1BZVEhPTiknOyB0ZXN0IC1uICIkKCVORElSJWRpcikiIHx8IGxpc3Q9OyBcCisJJChhbV9fbm9iYXNlX2xpc3QpIHwgd2hpbGUgcmVhZCBkaXIgZmlsZXM7IGRvIFwKKwkgIHhmaWxlcz07IGZvciBwIGluICQkZmlsZXM7IGRvIFwKKyMjIEEgZmlsZSBjYW4gYmUgaW4gdGhlIHNvdXJjZSBkaXJlY3Rvcnkgb3IgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKwkgICAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBiPTsgZWxzZSBiPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgICAgaWYgdGVzdCAtZiAiJCRiJCRwIjsgdGhlbiB4ZmlsZXM9IiQkeGZpbGVzICQkYiQkcCI7IGRsaXN0PSIkJGRsaXN0ICQkcCI7IFwKKwkgICAgZWxzZSA6OyBmaTsgZG9uZTsgXAorCSAgdGVzdCAteiAiJCR4ZmlsZXMiIHx8IHsgXAorCSAgICB0ZXN0ICJ4JCRkaXIiID0geC4gfHwgeyBcCisJICAgICAgZWNobyAiJChNS0RJUl9QKSAnJChERVNURElSKSQoJU5ESVIlZGlyKS8kJGRpciciOyBcCisJICAgICAgJChNS0RJUl9QKSAiJChERVNURElSKSQoJU5ESVIlZGlyKS8kJGRpciI7IH07IFwKKyMjIERvbid0IHBlcmZvcm0gdHJhbnNsYXRpb24sIHNpbmNlIHNjcmlwdCBuYW1lIGlzIGltcG9ydGFudC4KKwkgICAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJHhmaWxlcyAnJChERVNURElSKSQoJU5ESVIlZGlyKS8kJGRpciciOyBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAkJHhmaWxlcyAiJChERVNURElSKSQoJU5ESVIlZGlyKS8kJGRpciIgfHwgZXhpdCAkJD87IH07IFwKKyMjIEJ5dGUtY29tcGlsZSBtdXN0IGJlIGRvbmUgYXQgaW5zdGFsbCB0aW1lLCBzaW5jZSBmaWxlIHRpbWVzIGFyZQorIyMgZW5jb2RlZCBpbiB0aGUgYWN0dWFsIGZpbGVzLgorCSAgaWYgdGVzdCAtbiAiJCRkbGlzdCI7IHRoZW4gXAorCSAgICBpZiB0ZXN0IC16ICIkKERFU1RESVIpIjsgdGhlbiBcCisJICAgICAgUFlUSE9OPSQoUFlUSE9OKSAkKHB5X2NvbXBpbGUpIC0tYmFzZWRpciAiJCglTkRJUiVkaXIpIiAkJGRsaXN0OyBcCisJICAgIGVsc2UgXAorCSAgICAgIFBZVEhPTj0kKFBZVEhPTikgJChweV9jb21waWxlKSAtLWRlc3RkaXIgIiQoREVTVERJUikiIC0tYmFzZWRpciAiJCglTkRJUiVkaXIpIiAkJGRsaXN0OyBcCisJICAgIGZpOyBcCisJICBlbHNlIDo7IGZpIFwKKwlkb25lCitlbmRpZiAhJT9CQVNFJQorZW5kaWYgJT9JTlNUQUxMJQorCisKKyMjIC0tLS0tLS0tLS0tLS0tICMjCisjIyBVbmluc3RhbGxpbmcuICAjIworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKworaWYgJT9JTlNUQUxMJQorLlBIT05ZIHVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLSVESVIlUFlUSE9OCit1bmluc3RhbGwtJURJUiVQWVRIT046CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJCglRElSJV9QWVRIT04pJzsgdGVzdCAtbiAiJCglTkRJUiVkaXIpIiB8fCBsaXN0PTsgXAorP0JBU0U/CWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCis/IUJBU0U/CSQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IGZpbGVzPWAkKGFtX19ub2Jhc2Vfc3RyaXApYDsgXAorCXRlc3QgLW4gIiQkZmlsZXMiIHx8IGV4aXQgMDsgXAorCWZpbGVzYz1gZWNobyAiJCRmaWxlcyIgfCBzZWQgJ3N8JCR8Y3wnYDsgXAorCWZpbGVzbz1gZWNobyAiJCRmaWxlcyIgfCBzZWQgJ3N8JCR8b3wnYDsgXAorCWVjaG8gIiAoIGNkICckKERFU1RESVIpJCglTkRJUiVkaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQoJU5ESVIlZGlyKSIgJiYgcm0gLWYgJCRmaWxlcyB8fCBleGl0ICQkPzsgXAorIyMgVGhpcyBpcyB0byByZW1vdmUgdGhlIC5weWMgYW5kIC5weW8gYnl0ZSBjb21waWxlZCB2ZXJzaW9ucyAoYSBiaXQKKyMjIG9mIGEgaGFjaykuCisJZWNobyAiICggY2QgJyQoREVTVERJUikkKCVORElSJWRpciknICYmIHJtIC1mIiAkJGZpbGVzYyAiKSI7IFwKKwljZCAiJChERVNURElSKSQoJU5ESVIlZGlyKSIgJiYgcm0gLWYgJCRmaWxlc2MgfHwgZXhpdCAkJD87IFwKKwllY2hvICIgKCBjZCAnJChERVNURElSKSQoJU5ESVIlZGlyKScgJiYgcm0gLWYiICQkZmlsZXNvICIpIjsgXAorCWNkICIkKERFU1RESVIpJCglTkRJUiVkaXIpIiAmJiBybSAtZiAkJGZpbGVzbworZW5kaWYgJT9JTlNUQUxMJQorCisKKyMjIC0tLS0tLS0tLS0gIyMKKyMjIENsZWFuaW5nLiAgIyMKKyMjIC0tLS0tLS0tLS0gIyMKKworIyMgVGhlcmUgaXMgbm90aGluZyB0byBjbGVhbiBoZXJlIHNpbmNlIGZpbGVzIGFyZQorIyMgYnl0ZS1jb21waWxlZCB3aGVuIChhbmQgd2hlcmUpIHRoZXkgYXJlIGluc3RhbGxlZC4KKworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKyMjIERpc3RyaWJ1dGluZy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLSAjIworCitpZiAlP0RJU1QlCitESVNUX0NPTU1PTiArPSAlRElTVFZBUiUKK2VuZGlmICU/RElTVCUKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vcmVtYWtlLWhkci5hbSBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vcmVtYWtlLWhkci5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDc3YmUyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9yZW1ha2UtaGRyLmFtCkBAIC0wLDAgKzEsNzcgQEAKKyMjIGF1dG9tYWtlIC0gY3JlYXRlIE1ha2VmaWxlLmluIGZyb20gTWFrZWZpbGUuYW0KKyMjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKyMjIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyMgRXhwbGljaXRseSBsb29rIGluIHNyY2RpciBmb3IgYmVuZWZpdCBvZiBub24tR05VIG1ha2VzLgorCisKKyVDT05GSUdfSCU6ICVTVEFNUCUKKyMjIFJlY292ZXIgZnJvbSByZW1vdmFsIG9mIENPTkZJR19IRUFERVIKKwlAaWYgdGVzdCAhIC1mICRAOyB0aGVuIFwKKwkgIHJtIC1mICVTVEFNUCU7IFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICVTVEFNUCU7IFwKKwllbHNlIDo7IGZpCisKKworJVNUQU1QJTogJUNPTkZJR19IX0RFUFMlICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQHJtIC1mICVTVEFNUCUKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICVDT05GSUdfSF9QQVRIJQorCisKKyMjIE9ubHkgdGhlIGZpcnN0IGZpbGUgb2YgQUNfQ09ORklHX0hFQURFUlMgaXMgYXNzdW1lZCB0byBiZSBnZW5lcmF0ZWQKKyMjIGJ5IGF1dG9oZWFkZXIuCitpZiAlP0ZJUlNUJQorJUNPTkZJR19ISU4lOiAlTUFJTlRBSU5FUi1NT0RFJSAkKGFtX19jb25maWd1cmVfZGVwcykgJUZJTEVTJQorIyMgQ2F0ZXIgdG8gcGFyYWxsZWwgQlNEIG1ha2UuCisJKCQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmICQoQVVUT0hFQURFUikpCisjIyBXaGVuZXZlciAkKEFVVE9IRUFERVIpIGhhcyBydW4sIHdlIG11c3QgbWFrZSBzdXJlIHRoYXQKKyMjIC4vY29uZmlnLnN0YXR1cyB3aWxsIHJlYnVpbGQgY29uZmlnLmguICBUaGUgZGVwZW5kZW5jeSBmcm9tICVTVEFNUCUKKyMjIG9uICVDT05GSUdfSF9ERVBTJSAod2hpY2ggY29udGFpbnMgY29uZmlnLmhpbikgaXMgbm90IGVub3VnaCB0bworIyMgZXhwcmVzcyB0aGlzLgorIyMKKyMjIFRoZXJlIGFyZSBzb21lIHRyaWNreSBjYXNlcyB3aGVyZSB0aGlzIHJ1bGUgd2lsbCBidWlsZCBhCisjIyBjb25maWcuaGluIHdoaWNoIGhhcyB0aGUgc2FtZSB0aW1lc3RhbXAgYXMgJVNUQU1QJSwgaW4gd2hpY2ggY2FzZQorIyMgLi9jb25maWcuc3RhdHVzIHdpbGwgbm90IGJlIHJlcnVuIChtZWFuaW5nIHRoYXQgdXNlcnMgd2lsbCB1c2UgYW4KKyMjIG91dC1vZi1kYXRlIGNvbmZpZy5oIHdpdGhvdXQga25vd2luZyBpdCkuICBPbmUgc2l0dWF0aW9uIHdoZXJlIHRoaXMKKyMjIGNhbiBvY2N1ciBpcyB0aGUgZm9sbG93aW5nOgorIyMgMS4gdGhlIHVzZXIgdXBkYXRlcyBzb21lIGNvbmZpZ3VyZSBkZXBlbmRlbmN5IChsZXQncyBzYXkgZm9vLm00KQorIyMgICAgYW5kIHJ1bnMgYG1ha2UnCisjIyAyLiB0aGUgcmVidWlsZCBydWxlcyBkZXRlY3QgdGhhdCBhIGZvby5tNCBoYXMgY2hhbmdlZCwKKyMjICAgIHJ1biBhY2xvY2FsLCBhdXRvY29uZiwgYXV0b21ha2UsIGFuZCB0aGVuIHJ1biAuL2NvbmZpZy5zdGF0dXMuCisjIyAgICAoTm90ZSB0aGF0IGF1dG9oZWFkZXIgaGFzbid0IGJlZW4gY2FsbGVkIHlldCwgc28gLi9jb25maWcuc3RhdHVzCisjIyAgICBvdXRwdXRzIGEgY29uZmlnLmggZnJvbSBhbiBvYnNvbGV0ZSBjb25maWcuaGluLikKKyMjIDMuIE9uY2UgTWFrZWZpbGUgaGFzIGJlZW4gcmVnZW5lcmF0ZWQsIG1ha2UgY29udGludWVzLCBhbmQKKyMjICAgIGRpc2NvdmVycyB0aGF0IGNvbmZpZy5oIGlzIGEgZGVwZW5kZW5jeSBvZiB0aGUgYGFsbCcgcnVsZS4KKyMjICAgIEJlY2F1c2UgY29uZmlnLmggZGVwZW5kcyBvbiBzdGFtcC1oMSwgc3RhbXAtaDEgZGVwZW5kcyBvbgorIyMgICAgY29uZmlnLmhpbiwgYW5kIGNvbmZpZy5oaW4gZGVwZW5kcyBvbiBhY2xvY2FsLm00LCBtYWtlIHJ1bnMKKyMjICAgIGF1dG9oZWFkZXIgdG8gcmVidWlsZCBjb25maWcuaGluLgorIyMgTm93IG1ha2Ugb3VnaHQgdG8gY2FsbCAuL2NvbmZpZy5zdGF0dXMgb25jZSBhZ2FpbiB0byByZWJ1aWxkCisjIyBjb25maWcuaCBmcm9tIHRoZSBuZXcgY29uZmlnLmhpbiwgYnV0IGlmIHlvdSBoYXZlIGEgc3VmZmljaWVudGx5CisjIyBmYXN0IGJveCwgc3RlcHMgMiBhbmQgMyB3aWxsIG9jY3VyIHdpdGhpbiB0aGUgc2FtZSBzZWNvbmQ6IHRoZQorIyMgY29uZmlnLmgvc3RhbXAtaDEgZ2VuZXJhdGVkIGZyb20gdGhlIG91dGRhdGVkIGNvbmZpZy5oaW4gd2lsbCBoYXZlCisjIyB0aGUgc2FtZSBtdGltZSBhcyB0aGUgbmV3IGNvbmZpZy5oaW4uICBIZW5jZSBtYWtlIHdpbGwgdGhpbmsgdGhhdAorIyMgY29uZmlnLmggaXMgdXAgdG8gZGF0ZS4KKyMjCisjIyBBIHNvbHV0aW9uIGlzIHRvIGVyYXNlICVTVEFNUCUgaGVyZSBzbyB0aGF0IHRoZSAlU1RBTVAlIHJ1bGUKKyMjIGlzIGFsd2F5cyB0cmlnZ2VyZWQgYWZ0ZXIgdGhlIHRoaXMgb25lLgorCXJtIC1mICVTVEFNUCUKKyMjIEF1dG9oZWFkZXIgaGFzIHRoZSBiYWQgaGFiaXQgb2Ygbm90IGNoYW5naW5nIHRoZSB0aW1lc3RhbXAgaWYKKyMjIGNvbmZpZy5oaW4gaXMgdW5jaGFuZ2VkLCB3aGljaCBicmVha3MgTWFrZSB0YXJnZXRzLiAgU2luY2Ugd2hhdAorIyMgbXVzdCBub3QgY2hhbmdlZCBncmF0dWl0b3VzbHkgaXMgY29uZmlnLmgsIHdoaWNoIGlzIGFscmVhZHkgaGFuZGxlZAorIyMgYnkgY29uZmlnLnN0YXR1cywgdGhlcmUgaXMgbm8gcmVhc29uIHRvIG1ha2UgdGhpbmdzIGNvbXBsZXggZm9yCisjIyBjb25maWcuaGluLgorCXRvdWNoICRACitlbmRpZiAlP0ZJUlNUJQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9zY3JpcHRzLmFtIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9zY3JpcHRzLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MGNiNjQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL3NjcmlwdHMuYW0KQEAgLTAsMCArMSwxMjYgQEAKKyMjIGF1dG9tYWtlIC0gY3JlYXRlIE1ha2VmaWxlLmluIGZyb20gTWFrZWZpbGUuYW0KKyMjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNiwgMjAwNywKKyMjIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworaWYgJT9JTlNUQUxMJQoraW5jbHVkZSBpbnN0LXZhcnMuYW0KK2VuZGlmICU/SU5TVEFMTCUKKworIyMgLS0tLS0tLS0tLS0tICMjCisjIyBJbnN0YWxsaW5nLiAgIyMKKyMjIC0tLS0tLS0tLS0tLSAjIworCitpZiAlP0lOU1RBTEwlCisjIyBpZiBkb2Vzbid0IHdvcmsgcHJvcGVybHkgZm9yIEF1dG9tYWtlIHZhcmlhYmxlcyB5ZXQuCithbV9faW5zdGFsbGRpcnMgKz0gIiQoREVTVERJUikkKCVORElSJWRpcikiCisuUEhPTlkgaW5zdGFsbC0lRVhFQz9leGVjOmRhdGElLWFtOiBpbnN0YWxsLSVESVIlU0NSSVBUUworaW5zdGFsbC0lRElSJVNDUklQVFM6ICQoJURJUiVfU0NSSVBUUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKCVORElSJWRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKCVORElSJWRpcikiCisjIyBGdW5ueSBpbnZvY2F0aW9uIGJlY2F1c2UgTWFrZWZpbGUgdmFyaWFibGUgY2FuIGJlIGVtcHR5LCBsZWFkaW5nIHRvCisjIyBhIHN5bnRheCBlcnJvciBpbiBzaC4KKwlAbGlzdD0nJCglRElSJV9TQ1JJUFRTKSc7IHRlc3QgLW4gIiQoJU5ESVIlZGlyKSIgfHwgbGlzdD07IFwKKz8hQkFTRT8JJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorIyMgQSBmaWxlIGNhbiBiZSBpbiB0aGUgc291cmNlIGRpcmVjdG9yeSBvciB0aGUgYnVpbGQgZGlyZWN0b3J5LgorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKyMjIEEgc2NyaXB0IG1heSBvciBtYXkgbm90IGV4aXN0LgorCSAgaWYgdGVzdCAtZiAiJCRkJCRwIjsgdGhlbiBlY2hvICIkJGQkJHAiOyBlY2hvICIkJHAiOyBlbHNlIDo7IGZpOyBcCisJZG9uZSB8IFwKKyMjIFdlIG5vdyBoYXZlIGEgbGlzdCBvZiAic291cmNlZmlsZSBuZXdsaW5lIChub2Jhc2UtKXRhcmdldCIgcGFpcnMuCisjIyBUdXJuIHRoYXQgaW50byAic291cmNlZmlsZSBzb3VyY2VfYmFzZSB0YXJnZXRfZGlyIHhmb3JtZWRfdGFyZ2V0X2Jhc2UiLAorIyMgd2l0aCBuZXdsaW5lcyBiZWluZyB0dXJuZWQgaW50byBzcGFjZXMgaW4gYSBzZWNvbmQgc3RlcC4KKwlzZWQgLWUgJ3A7cywuKi8sLDtuJyBcCis/QkFTRT8JICAgIC1lICdoO3N8Lip8LnwnIFwKKz8hQkFTRT8JICAgIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiIC1lICdoO3N8W14vXSokJHx8OyBzfF4kJHwufCcgXAorCSAgICAtZSAncDt4O3MsLiovLCw7JCh0cmFuc2Zvcm0pJyB8IHNlZCAnTjtOO047cyxcbiwgLGcnIHwgXAorCSQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiI7IGRpcnNbIi4iXSA9IDE7IH0gXAorCSAgeyBkPSQkMzsgaWYgKGRpcnNbZF0gIT0gMSkgeyBwcmludCAiZCIsIGQ7IGRpcnNbZF0gPSAxIH0gXAorCSAgICBpZiAoJCQyID09ICQkNCkgeyBmaWxlc1tkXSA9IGZpbGVzW2RdICIgIiAkJDE7IFwKKwkgICAgICBpZiAoKytuW2RdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgeyBcCisJCXByaW50ICJmIiwgZCwgZmlsZXNbZF07IG5bZF0gPSAwOyBmaWxlc1tkXSA9ICIiIH0gfSBcCisJICAgIGVsc2UgeyBwcmludCAiZiIsIGQgIi8iICQkNCwgJCQxIH0gfSBcCisJICBFTkQgeyBmb3IgKGQgaW4gZmlsZXMpIHByaW50ICJmIiwgZCwgZmlsZXNbZF0gfScgfCBcCisJd2hpbGUgcmVhZCB0eXBlIGRpciBmaWxlczsgZG8gXAorPyFCQVNFPwkgIGNhc2UgJCR0eXBlIGluIFwKKz8hQkFTRT8JICBkKSBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQoJU5ESVIlZGlyKS8kJGRpciciOyBcCis/IUJBU0U/CSAgICAgJChNS0RJUl9QKSAiJChERVNURElSKSQoJU5ESVIlZGlyKS8kJGRpciIgfHwgZXhpdCAkJD87OyBcCis/IUJBU0U/CSAgZikgXAorCSAgICAgaWYgdGVzdCAiJCRkaXIiID0gLjsgdGhlbiBkaXI9OyBlbHNlIGRpcj0vJCRkaXI7IGZpOyBcCisJICAgICB0ZXN0IC16ICIkJGZpbGVzIiB8fCB7IFwKKwkgICAgICAgZWNobyAiICQoSU5TVEFMTF9TQ1JJUFQpICQkZmlsZXMgJyQoREVTVERJUikkKCVORElSJWRpcikkJGRpciciOyBcCisJICAgICAgICQoSU5TVEFMTF9TQ1JJUFQpICQkZmlsZXMgIiQoREVTVERJUikkKCVORElSJWRpcikkJGRpciIgfHwgZXhpdCAkJD87IFwKKwkgICAgIH0gXAorPyFCQVNFPwkgIDs7IGVzYWMgXAorCTsgZG9uZQorZW5kaWYgJT9JTlNUQUxMJQorCisKKyMjIC0tLS0tLS0tLS0tLS0tICMjCisjIyBVbmluc3RhbGxpbmcuICAjIworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKworaWYgJT9JTlNUQUxMJQorLlBIT05ZIHVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLSVESVIlU0NSSVBUUwordW5pbnN0YWxsLSVESVIlU0NSSVBUUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKCVESVIlX1NDUklQVFMpJzsgdGVzdCAtbiAiJCglTkRJUiVkaXIpIiB8fCBleGl0IDA7IFwKKz9CQVNFPwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgXAorP0JBU0U/CSAgICAgICBzZWQgLWUgJ3MsLiovLCw7JCh0cmFuc2Zvcm0pJ2A7IFwKKz8hQkFTRT8JJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorPyFCQVNFPwlmaWxlcz1gJChhbV9fbm9iYXNlX3N0cmlwKSBcCis/IUJBU0U/CSAgICAgICAtZSAnaDtzLC4qLywsOyQodHJhbnNmb3JtKTt4O3N8W14vXSokJHx8O0c7cyxcbiwsJ2A7IFwKKwl0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiAoIGNkICckKERFU1RESVIpJCglTkRJUiVkaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQoJU5ESVIlZGlyKSIgJiYgcm0gLWYgJCRmaWxlcworZW5kaWYgJT9JTlNUQUxMJQorCisKKyMjIC0tLS0tLS0tLS0tLS0tICMjCisjIyBEaXN0cmlidXRpbmcuICAjIworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKworaWYgJT9ESVNUJQorRElTVF9DT01NT04gKz0gJURJU1RWQVIlCitlbmRpZiAlP0RJU1QlCisKKworIyMgLS0tLS0tLS0tLSAjIworIyMgQ2hlY2tpbmcuICAjIworIyMgLS0tLS0tLS0tLSAjIworCitpZiAlP0NLLU9QVFMlCisuUEhPTlkgaW5zdGFsbGNoZWNrLWFtOiBpbnN0YWxsY2hlY2stJURJUiVTQ1JJUFRTCitpbnN0YWxsY2hlY2stJURJUiVTQ1JJUFRTOiAkKCVESVIlX1NDUklQVFMpCisJYmFkPTA7IHBpZD0kJCQkOyBsaXN0PSIkKCVESVIlX1NDUklQVFMpIjsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBjYXNlICcgJChBTV9JTlNUQUxMQ0hFQ0tfU1REX09QVElPTlNfRVhFTVBUKSAnIGluIFwKKyMjIE1hdGNoICQoc3JjZGlyKS8kJHAgaW4gYWRkaXRpb24gdG8gJCRwIGJlY2F1c2UgU3VuIG1ha2UgbWlnaHQgcmV3cml0ZQorIyMgZmlsZW5hbWVzIGluIEFNX0lOU1RBTExDSEVDS19TVERfT1BUSU9OU19FWEVNUFQgZHVyaW5nIFZQQVRIIGJ1aWxkcy4KKwkgICAqIiAkJHAgIiogfCAqIiAkKHNyY2RpcikvJCRwICIqKSBjb250aW51ZTs7IFwKKwkgIGVzYWM7IFwKKyMjIFN0cmlwIGFueSBsZWFkaW5nIGRpcmVjdG9yeSBiZWZvcmUgYXBwbHlpbmcgJCh0cmFuc2Zvcm0pLgorCSAgZj1gZWNobyAiJCRwIiB8IHNlZCAncyxeLiovLCw7JCh0cmFuc2Zvcm0pJ2A7IFwKKyMjIEluc2VydCB0aGUgZGlyZWN0b3J5IGJhY2sgaWYgbm9iYXNlXyBpcyB1c2VkLgorPyFCQVNFPwkgIGY9YGVjaG8gIiQkcCIgfCBzZWQgJ3N8W14vXSokJHx8J2AiJCRmIjsgXAorCSAgZm9yIG9wdCBpbiAtLWhlbHAgLS12ZXJzaW9uOyBkbyBcCisJICAgIGlmICIkKERFU1RESVIpJCglTkRJUiVkaXIpLyQkZiIgJCRvcHQgPmMkJHtwaWR9Xy5vdXQgXAorCSAgICAgICAgIDI+YyQke3BpZH1fLmVyciA8L2Rldi9udWxsIFwKKwkJICYmIHRlc3QgLW4gImBjYXQgYyQke3BpZH1fLm91dGAiIFwKKwkJICYmIHRlc3QgLXogImBjYXQgYyQke3BpZH1fLmVycmAiOyB0aGVuIDo7IFwKKwkgICAgZWxzZSBlY2hvICIkJGYgZG9lcyBub3Qgc3VwcG9ydCAkJG9wdCIgMT4mMjsgYmFkPTE7IGZpOyBcCisJICBkb25lOyBcCisJZG9uZTsgcm0gLWYgYyQke3BpZH1fLj8/PzsgZXhpdCAkJGJhZAorZW5kaWYgJT9DSy1PUFRTJQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9zdWJkaXJzLmFtIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS9zdWJkaXJzLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMDFhOGMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL3N1YmRpcnMuYW0KQEAgLTAsMCArMSwxMTEgQEAKKyMjIGF1dG9tYWtlIC0gY3JlYXRlIE1ha2VmaWxlLmluIGZyb20gTWFrZWZpbGUuYW0KKyMjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywKKyMjIDIwMDQsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworUkVDVVJTSVZFX1RBUkdFVFMgKz0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQorUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMgPSBtb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlCVwKKyAgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorIyMgQWxsIGRvY3VtZW50ZWQgdGFyZ2V0cyB3aGljaCBpbnZva2UgYG1ha2UnIHJlY3Vyc2l2ZWx5LCBvciBkZXBlbmQKKyMjIG9uIHRhcmdldHMgdGhhdCBkbyBzby4KK0FNX1JFQ1VSU0lWRV9UQVJHRVRTICs9ICQoUkVDVVJTSVZFX1RBUkdFVFM6LXJlY3Vyc2l2ZT0pIFwKKyAgJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUzotcmVjdXJzaXZlPSkKKworLlBIT05ZOiAkKFJFQ1VSU0lWRV9UQVJHRVRTKSAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKQorLk1BS0U6ICQoUkVDVVJTSVZFX1RBUkdFVFMpICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpCisKKyMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCisjIGludG8gdGhlbSBhbmQgcnVuIGBtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KKyMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgYG1ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKKyMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gYGNvbmZpZy5zdGF0dXMnLCBlZGl0IGBjb25maWcuc3RhdHVzJworIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gYG1ha2UnKTsKKyMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlIGBtYWtlJyBjb21tYW5kIGxpbmUuCisKKyQoUkVDVVJTSVZFX1RBUkdFVFMpOgorIyMgVXNpbmcgJGZhaWxjb20gYWxsb3dzICItayIgdG8ga2VlcCBpdHMgbmF0dXJhbCBtZWFuaW5nIHdoZW4gcnVubmluZyBhCisjIyByZWN1cnNpdmUgcnVsZS4KKwlAZmFpbD0gZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGRvdF9zZWVuPXllczsgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKKwlkb25lOyBcCisJaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCisJZmk7IHRlc3QgLXogIiQkZmFpbCIKKworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCitjbGVhbjogY2xlYW4tcmVjdXJzaXZlCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCisKKyMjIFdlIHJ1biBhbGwgYGNsZWFuJyB0YXJnZXRzIGluIHJldmVyc2Ugb3JkZXIuICBXaHk/ICBJdCdzIGFuIGF0dGVtcHQKKyMjIHRvIGFsbGV2aWF0ZSBhIHByb2JsZW0gdGhhdCBjYW4gaGFwcGVuIHdoZW4gZGVwZW5kZW5jaWVzIGFyZQorIyMgZW5hYmxlZC4gIEluIHRoaXMgY2FzZSwgdGhlIC5QIGZpbGUgaW4gb25lIGRpcmVjdG9yeSBjYW4gZGVwZW5kIG9uCisjIyBzb21lIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGhlYWRlciBpbiBhbiBlYXJsaWVyIGRpcmVjdG9yeS4gIFNpbmNlCisjIyB0aGUgZGVwZW5kZW5jaWVzIGFyZSByZXF1aXJlZCBiZWZvcmUgYW55IHRhcmdldCBpcyBleGFtaW5lZCwgbWFrZQorIyMgYm9tYnMuCiskKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKToKKyMjIFVzaW5nICRmYWlsY29tIGFsbG93cyAiLWsiIHRvIGtlZXAgaXRzIG5hdHVyYWwgbWVhbmluZyB3aGVuIHJ1bm5pbmcgYQorIyMgcmVjdXJzaXZlIHJ1bGUuCisJQGZhaWw9IGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKyMjIEZvciBkaXN0Y2xlYW4gYW5kIG1haW50YWluZXItY2xlYW4gd2UgbWFrZSBzdXJlIHRvIHVzZSB0aGUgZnVsbAorIyMgbGlzdCBvZiBzdWJkaXJlY3Rvcmllcy4gIFdlIGRvIHRoaXMgc28gdGhhdCBgY29uZmlndXJlOyBtYWtlCisjIyBkaXN0Y2xlYW4nIHJlYWxseSBpcyBhIG5vLW9wLCBldmVuIGlmIFNVQkRJUlMgaXMgY29uZGl0aW9uYWwuICBGb3IKKyMjIG90aGVyIGNsZWFuIHRhcmdldHMgdGhpcyBkb2Vzbid0IG1hdHRlci4KKwljYXNlICIkQCIgaW4gXAorCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAorCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAorCWVzYWM7IFwKKwlyZXY9Jyc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gOjsgZWxzZSBcCisJICAgIHJldj0iJCRzdWJkaXIgJCRyZXYiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKyMjIEFsd2F5cyBkbyBgLicgbGFzdC4KKwlyZXY9IiQkcmV2IC4iOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWZvciBzdWJkaXIgaW4gJCRyZXY7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS90YWdzLmFtIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS90YWdzLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NjNlMmYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL3RhZ3MuYW0KQEAgLTAsMCArMSwxNDQgQEAKKyMjIGF1dG9tYWtlIC0gY3JlYXRlIE1ha2VmaWxlLmluIGZyb20gTWFrZWZpbGUuYW0KKyMjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywKKyMjIDIwMDQsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMjIC0tLS0gIyMKKyMjIElELiAgIyMKKyMjIC0tLS0gIyMKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKyMjIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4KKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisjIyBIYW5kbGUgVlBBVEggY29ycmVjdGx5LgorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCisKKworIyMgLS0tLS0tICMjCisjIyBUQUdTLiAgIyMKKyMjIC0tLS0tLSAjIworCitFVEFHUyA9IGV0YWdzCisuUEhPTlk6IHRhZ3MKK2lmICU/U1VCRElSUyUKK0FNX1JFQ1VSU0lWRV9UQVJHRVRTICs9IHRhZ3MgVEFHUworZW5kaWYgJT9TVUJESVJTJQordGFnczogVEFHUworCitUQUdTOiAlVEFHU0RJUlMlICQoSEVBREVSUykgJChTT1VSQ0VTKSAlQ09ORklHJSAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorIyMgV2UgdXNlIHRoZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgdG8gYnVpbGQgdGhlIHN1YmRpciBsaXN0IHdpdGgKKyMjIGFic29sdXRlIG5hbWVzLCB3aXRob3V0IHRoZSBuZWVkIHRvIHdvcnJ5IGFib3V0IHdoaXRlIHNwYWNlIGluIGBwd2RgLgorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorIyMgSXQgaXMgdGVtcHRpbmcgdG8gdXNlIGlmL2VuZGlmIGhlcmUsIGJ1dCBkb24ndDogdGhlIHByZXZpb3VzCisjIyBiYWNrc2xhc2ggd2lsbCBjYXVzZSBiYWQgcmVzdWx0cyAoYXV0b21ha2UgZG9lc24ndCBgc2VlJyB0aGUgYGlmJykuCisjIyBFeHViZXJhbnQgQ3RhZ3Mgd2FudHMgLS1ldGFncy1pbmNsdWRlLAorIyMgR05VIEV0YWdzICAgICAgICAgICAgIC0taW5jbHVkZQorIyMgRnVydGhlcm1vcmUgRXh1YmVyYW50IEN0YWdzIDUuNS40IGZhaWxzIHRvIGNyZWF0ZSBUQUdTIGZpbGVzCisjIyB3aGVuIG5vIGZpbGVzIGFyZSBzdXBwbGllZCwgZGVzcGl0ZSBhbnkgLS1ldGFncy1pbmNsdWRlIG9wdGlvbi4KKyMjIEEgd29ya2Fyb3VuZCBpcyB0byBwYXNzIGAuJyBhcyBhIGZpbGUuICBUaGlzIGlzIHdoYXQgJGVtcHR5X2ZpeCBpcyBmb3IuCis/U1VCRElSUz8JaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCis/U1VCRElSUz8JICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKKz9TVUJESVJTPwkgIGVtcHR5X2ZpeD0uOyBcCis/U1VCRElSUz8JZWxzZSBcCis/U1VCRElSUz8JICBpbmNsdWRlX29wdGlvbj0tLWluY2x1ZGU7IFwKKz9TVUJESVJTPwkgIGVtcHR5X2ZpeD07IFwKKz9TVUJESVJTPwlmaTsgXAorP1NVQkRJUlM/CWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorIyMgRG8gbm90aGluZyBpZiB3ZSdyZSB0cnlpbmcgdG8gbG9vayBpbiBgLicuCis/U1VCRElSUz8JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorP1NVQkRJUlM/CSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCisjIyBOb3RlIHRoYXQgdGhlID0gaXMgbWFuZGF0b3J5IGZvciAtLWV0YWdzLWluY2x1ZGUuCis/U1VCRElSUz8JICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAorP1NVQkRJUlM/CSAgZmk7IFwKKz9TVUJESVJTPwlkb25lOyBcCisjIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICVDT05GSUclICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorIyMgSGFuZGxlIFZQQVRIIGNvcnJlY3RseS4KKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorIyMgUmVtb3ZlIHRoZSBgeCcgd2UgYWRkZWQgZmlyc3Q6CisJc2hpZnQ7IFwKKyMjIE1ha2Ugc3VyZSB3ZSBoYXZlIHNvbWV0aGluZyB0byBydW4gZXRhZ3Mgb24uCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCisKKworIyMgLS0tLS0tLS0tLS0tLSAjIworIyMgdmktc3R5bGUgdGFncyAjIworIyMgLS0tLS0tLS0tLS0tLSAjIworCitDVEFHUyA9IGN0YWdzCisuUEhPTlk6IENUQUdTIGN0YWdzCitpZiAlP1NVQkRJUlMlCitBTV9SRUNVUlNJVkVfVEFSR0VUUyArPSBjdGFncyBDVEFHUworZW5kaWYgJT9TVUJESVJTJQorY3RhZ3M6IENUQUdTCisKKyMjIFdlIGhhdmUgYSBkdW1teSBuYW1lIGhlcmUgYmVjYXVzZSBgdGFncycgaGFzIGFscmVhZHkgYmVlbiBpbiB1c2UKKyMjIGZvciBhIGxvbmcgdGltZSB0byBtZWFuIEVtYWNzLXN0eWxlIHRhZ3MuICBPb3BzLiAgVGhpcyBtZWFucyB0aGUKKyMjIGRlcGVuZGVuY2llcyBoZXJlIGFyZSB1c2VsZXNzLgorQ1RBR1M6ICVDVEFHU0RJUlMlICQoSEVBREVSUykgJChTT1VSQ0VTKSAlQ09ORklHJSAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorIyMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLgorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAlQ09ORklHJSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKyMjIEhhbmRsZSBWUEFUSCBjb3JyZWN0bHkuCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKyMjIE1ha2Ugc3VyZSB3ZSBoYXZlIHNvbWV0aGluZyB0byBydW4gY3RhZ3Mgb24uCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLSAjIworIyMgYEdsb2JhbCcgdGFncy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0gIyMKKworLlBIT05ZOiBHVEFHUworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworCisjIyAtLS0tLS0tLS0tICMjCisjIyBDbGVhbmluZy4gICMjCisjIyAtLS0tLS0tLS0tICMjCisKKy5QSE9OWSBkaXN0Y2xlYW4tYW06IGRpc3RjbGVhbi10YWdzCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL3RleGktdmVycy5hbSBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vdGV4aS12ZXJzLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MDYzMGIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL3RleGktdmVycy5hbQpAQCAtMCwwICsxLDU5IEBACisjIyBhdXRvbWFrZSAtIGNyZWF0ZSBNYWtlZmlsZS5pbiBmcm9tIE1ha2VmaWxlLmFtCisjIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsCisjIyAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitESVNUX0NPTU1PTiArPSAlVlRFWEklICVTVEFNUFZUSSUKKworIyMgRG9uJ3QgZ2l2ZSB0aGlzIHJ1bGUgYSBjb21tYW5kIChldmVuIGBAOicpLgorIyMgJVNUQU1QVlRJJSBpcyBhbHdheXMgbmV3ZXIgdGhhbiAlVlRFWEklLCBzbyB0aGlzIHJ1bGUgaXMgYWx3YXlzCisjIyB0cmlnZ2VyZWQuICBJZiB5b3UgZXF1aXAgdGhpcyBydWxlIHdpdGggYSBjb21tYW5kLCBHTlUgbWFrZSB3aWxsCisjIyBhc3N1bWUgJVZURVhJJSBoYXMgYmVlbiByZWJ1aWxkIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQKKyMjIGRpc2NhcmQgYW55ICVWVEVYSSUgZmlsZSBmb3VuZCBpbiBhIFZQQVRIIHNlYXJjaC4KKyVWVEVYSSU6ICVNQUlOVEFJTkVSLU1PREUlICVTVEFNUFZUSSUKKworIyMgRGVwZW5kIG9uIGNvbmZpZ3VyZSBzbyB0aGF0IHZlcnNpb24gbnVtYmVyIHVwZGF0ZXMgY2F1c2UgYSByZWJ1aWxkLgorIyMgKE5vdCBjb25maWd1cmUuYWMsIGJlY2F1c2Ugbm90IGFsbCBzZXR1cHMgZGVmaW5lIHRoZSB2ZXJzaW9uIG51bWJlcgorIyMgaW4gdGhpcyBmaWxlLikKKyVTVEFNUFZUSSU6ICVURVhJJSAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZQorIyMgSXQgaXMgd3JvbmcgdG8gaGF2ZSAlU1RBTVBWVEklIGRlcGVuZGVudCBvbiAlRElSU1RBTVAlLCBiZWNhdXNlCisjIyAlU1RBTVBWVEklIGlzIGRpc3RyaWJ1dGVkIGFuZCAlRElSU1RBTVAlIGlzbid0OiBhIGRpc3RyaWJ1dGVkIGZpbGUKKyMjIHNob3VsZCBuZXZlciBiZSBkZXBlbmRlbnQgdXBvbiBhIG5vbi1kaXN0cmlidXRlZCBidWlsdCBmaWxlLgorIyMgVGhlcmVmb3JlIHdlIGVuc3VyZSB0aGF0ICVESVJTVEFNUCUgZXhpc3RzIGluIHRoZSBydWxlLgorP0RJUlNUQU1QPwl0ZXN0IC1mICVESVJTVEFNUCUgfHwgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJURJUlNUQU1QJQorCUAoZGlyPS47IHRlc3QgLWYgLi8lVEVYSSUgfHwgZGlyPSQoc3JjZGlyKTsgXAorCXNldCBgJChTSEVMTCkgJU1ERElSJW1kYXRlLXNoICQkZGlyLyVURVhJJWA7IFwKKwllY2hvICJAc2V0IFVQREFURUQgJCQxICQkMiAkJDMiOyBcCisJZWNobyAiQHNldCBVUERBVEVELU1PTlRIICQkMiAkJDMiOyBcCisJZWNobyAiQHNldCBFRElUSU9OICQoVkVSU0lPTikiOyBcCisJZWNobyAiQHNldCBWRVJTSU9OICQoVkVSU0lPTikiKSA+ICVWVEklLnRtcAorIyMgVXNlIGNwIGFuZCBybSBoZXJlIGJlY2F1c2Ugc29tZSBvbGRlciAibXYicyBjYW4ndCBtb3ZlIGFjcm9zcworIyMgZmlsZXN5c3RlbXMuICBGdXJ0aGVybW9yZSwgR05VICJtdiIgaW4gdGhlIEFtaWdhRE9TIGVudmlyb25tZW50CisjIyBjYW4ndCBoYW5kbGUgdGhpcy4KKwlAY21wIC1zICVWVEklLnRtcCAlVlRFWEklIFwKKwkgIHx8IChlY2hvICJVcGRhdGluZyAlVlRFWEklIjsgXAorCSAgICAgIGNwICVWVEklLnRtcCAlVlRFWEklKQorCS1Acm0gLWYgJVZUSSUudG1wCisJQGNwICVWVEVYSSUgJEAKKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLSVWVEklCittb3N0bHljbGVhbi0lVlRJJToKKwktcm0gLWYgJVZUSSUudG1wCisKK21haW50YWluZXItY2xlYW4tYW06IG1haW50YWluZXItY2xlYW4tJVZUSSUKK21haW50YWluZXItY2xlYW4tJVZUSSU6CislTUFJTlRBSU5FUi1NT0RFJQktcm0gLWYgJVNUQU1QVlRJJSAlVlRFWEklCisKKy5QSE9OWTogbW9zdGx5Y2xlYW4tJVZUSSUgbWFpbnRhaW5lci1jbGVhbi0lVlRJJQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS90ZXhpYnVpbGQuYW0gYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL3RleGlidWlsZC5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2E5Y2UxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS90ZXhpYnVpbGQuYW0KQEAgLTAsMCArMSwxMTcgQEAKKyMjIGF1dG9tYWtlIC0gY3JlYXRlIE1ha2VmaWxlLmluIGZyb20gTWFrZWZpbGUuYW0KKyMjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMjICAgMjAwMywgMjAwNCwgMjAwNSwgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworCis/R0VORVJJQ19JTkZPPyVTT1VSQ0VfU1VGRklYJSVERVNUX1NVRkZJWCU6Cis/IUdFTkVSSUNfSU5GTz8lREVTVF9JTkZPX1BSRUZJWCUlREVTVF9TVUZGSVglOiAlU09VUkNFX0lORk8lICVERVBTJQorIyMgSXQgaXMgd3JvbmcgdG8gaGF2ZSBgaW5mbycgZmlsZXMgZGVwZW5kZW50IG9uICVESVJTVEFNUCUsIGJlY2F1c2UKKyMjIGBpbmZvJyBmaWxlcyBhcmUgZGlzdHJpYnV0ZWQgYW5kICVESVJTVEFNUCUgaXNuJ3Q6IGEgZGlzdHJpYnV0ZWQgZmlsZQorIyMgc2hvdWxkIG5ldmVyIGJlIGRlcGVuZGVudCB1cG9uIGEgbm9uLWRpc3RyaWJ1dGVkIGJ1aWx0IGZpbGUuCisjIyBUaGVyZWZvcmUgd2UgZW5zdXJlIHRoYXQgJURJUlNUQU1QJSBleGlzdHMgaW4gdGhlIHJ1bGUuCis/IUlOU1JDPz9ESVJTVEFNUD8JQHRlc3QgLWYgJURJUlNUQU1QJSB8fCAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAlRElSU1RBTVAlCisjIyBCYWNrIHVwIHRoZSBpbmZvIGZpbGVzIGJlZm9yZSBydW5uaW5nIG1ha2VpbmZvLiBUaGlzIGlzIHRoZSBjaGVhcGVzdAorIyMgd2F5IHRvIGVuc3VyZSB0aGF0CisjIyAxKSBJZiB0aGUgdGV4aW5mbyBmaWxlIHNocmlua3MgKG9yIGlmIHlvdSBzdGFydCB1c2luZyAtLW5vLXNwbGl0KSwKKyMjICAgIHlvdSdsbCBub3QgYmUgbGVmdCB3aXRoIHNvbWUgZGVhZCBpbmZvIGZpbGVzIGx5aW5nIGFyb3VuZCAtLSBkZWFkCisjIyAgICBmaWxlcyB3aGljaCB3b3VsZCBlbmQgdXAgaW4gdGhlIGRpc3RyaWJ1dGlvbi4KKyMjIDIpIElmIHRoZSB0ZXhpbmZvIGZpbGUgaGFzIHNvbWUgbWlub3IgbWlzdGFrZXMgd2hpY2ggY2F1c2UgbWFrZWluZm8KKyMjICAgIHRvIGZhaWwsIHRoZSBpbmZvIGZpbGVzIGFyZSBub3QgcmVtb3ZlZC4gIChUaGV5IGFyZSBuZWVkZWQgYnkgdGhlCisjIyAgICBkZXZlbG9wZXIgd2hpbGUgaGUgd3JpdGVzIGRvY3VtZW50YXRpb24uKQorIyMgKi5pTk4gZmlsZXMgYXJlIHVzZWQgb24gREpHUFAuICBTZWUgdGhlIGNvbW1lbnRzIGluIGluc3RhbGwtaW5mby1hbQorCXJlc3RvcmU9OiAmJiBiYWNrdXBkaXI9IiQoYW1fX2xlYWRpbmdfZG90KWFtJCQkJCIgJiYgXAorP0lOU1JDPwlhbV9fY3dkPWBwd2RgICYmICQoYW1fX2NkKSAkKHNyY2RpcikgJiYgXAorCXJtIC1yZiAkJGJhY2t1cGRpciAmJiBta2RpciAkJGJhY2t1cGRpciAmJiBcCisjIyBJZiBtYWtlaW5mbyBpcyBub3QgaW5zdGFsbGVkIHdlIG11c3Qgbm90IGJhY2t1cCB0aGUgZmlsZXMgc28KKyMjYG1pc3NpbmcnIGNhbiBkbyBpdHMgam9iIGFuZCB0b3VjaCAkQCBpZiBpdCBleGlzdHMuCisJaWYgKCQoTUFLRUlORk8pIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGZvciBmIGluICRAICRALVswLTldICRALVswLTldWzAtOV0gJChAOi5pbmZvPSkuaVswLTldICQoQDouaW5mbz0pLmlbMC05XVswLTldOyBkbyBcCisJICAgIGlmIHRlc3QgLWYgJCRmOyB0aGVuIG12ICQkZiAkJGJhY2t1cGRpcjsgcmVzdG9yZT1tdjsgZWxzZSA6OyBmaTsgXAorCSAgZG9uZTsgXAorCWVsc2UgOjsgZmkgJiYgXAorP0lOU1JDPwljZCAiJCRhbV9fY3dkIjsgXAorCWlmICQoTUFLRUlORk8pICQoQU1fTUFLRUlORk9GTEFHUykgJChNQUtFSU5GT0ZMQUdTKSAlTUFLRUlORk9GTEFHUyUgXAorPyFJTlNSQz8JIC1vICRAIGB0ZXN0IC1mICclU09VUkNFX0lORk8lJyB8fCBlY2hvICckKHNyY2RpcikvJ2AlU09VUkNFX0lORk8lOyBcCis/SU5TUkM/PyFHRU5FUklDX0lORk8/CSAtbyAkQCAkKHNyY2RpcikvJVNPVVJDRV9JTkZPJTsgXAorP0lOU1JDPz9HRU5FUklDX0lORk8/CSAtbyAkQCAkPDsgXAorCXRoZW4gXAorCSAgcmM9MDsgXAorP0lOU1JDPwkgICQoYW1fX2NkKSAkKHNyY2Rpcik7IFwKKwllbHNlIFwKKwkgIHJjPSQkPzsgXAorIyMgQmV3YXJlIHRoYXQgYmFja3VwIGluZm8gZmlsZXMgbWlnaHQgY29tZSBmcm9tIGEgc3ViZGlyZWN0b3J5LgorP0lOU1JDPwkgICQoYW1fX2NkKSAkKHNyY2RpcikgJiYgXAorCSAgJCRyZXN0b3JlICQkYmFja3VwZGlyLyogYGVjaG8gIi4vJEAiIHwgc2VkICdzfFteL10qJCR8fCdgOyBcCisJZmk7IFwKKwlybSAtcmYgJCRiYWNrdXBkaXI7IGV4aXQgJCRyYworCitJTkZPX0RFUFMgKz0gJURFU1RfSU5GT19QUkVGSVglJURFU1RfU1VGRklYJQorCis/R0VORVJJQz8lU09VUkNFX1NVRkZJWCUuZHZpOgorPyFHRU5FUklDPyVERVNUX1BSRUZJWCUuZHZpOiAlU09VUkNFJSAlREVQUyUgJURJUlNUQU1QJQorCVRFWElOUFVUUz0iJChhbV9fVEVYSU5GT19URVhfRElSKSQoUEFUSF9TRVBBUkFUT1IpJCRURVhJTlBVVFMiIFwKKyMjIE11c3Qgc2V0IE1BS0VJTkZPIGxpa2UgdGhpcyBzbyB0aGF0IHZlcnNpb24udGV4aSB3aWxsIGJlIGZvdW5kIGV2ZW4KKyMjIGlmIGl0IGlzIGluIHNyY2RpciAoLUkgJChzcmNkaXIpIGlzIHNldCBpbiAlTUFLRUlORk9GTEFHUyUpLgorCU1BS0VJTkZPPSckKE1BS0VJTkZPKSAkKEFNX01BS0VJTkZPRkxBR1MpICQoTUFLRUlORk9GTEFHUykgJU1BS0VJTkZPRkxBR1MlJyBcCisjIyBEbyBub3QgdXNlIGAtbycgdW5sZXNzIG5lY2Vzc2FyeTogaXQgaXMgb25seSBzdXBwb3J0ZWQgc2luY2UgVGV4aW5mbyA0LjEuCis/R0VORVJJQz8JJChURVhJMkRWSSkgJVNPVVJDRSUKKz8hR0VORVJJQz8JJChURVhJMkRWSSkgLW8gJEAgYHRlc3QgLWYgJyVTT1VSQ0UlJyB8fCBlY2hvICckKHNyY2RpcikvJ2AlU09VUkNFJQorCis/R0VORVJJQz8lU09VUkNFX1NVRkZJWCUucGRmOgorPyFHRU5FUklDPyVERVNUX1BSRUZJWCUucGRmOiAlU09VUkNFJSAlREVQUyUgJURJUlNUQU1QJQorCVRFWElOUFVUUz0iJChhbV9fVEVYSU5GT19URVhfRElSKSQoUEFUSF9TRVBBUkFUT1IpJCRURVhJTlBVVFMiIFwKKyMjIE11c3Qgc2V0IE1BS0VJTkZPIGxpa2UgdGhpcyBzbyB0aGF0IHZlcnNpb24udGV4aSB3aWxsIGJlIGZvdW5kIGV2ZW4KKyMjIGlmIGl0IGlzIGluIHNyY2RpciAoLUkgJChzcmNkaXIpIGlzIHNldCBpbiAlTUFLRUlORk9GTEFHUyUpLgorCU1BS0VJTkZPPSckKE1BS0VJTkZPKSAkKEFNX01BS0VJTkZPRkxBR1MpICQoTUFLRUlORk9GTEFHUykgJU1BS0VJTkZPRkxBR1MlJyBcCisjIyBEbyBub3QgdXNlIGAtbycgdW5sZXNzIG5lY2Vzc2FyeTogaXQgaXMgb25seSBzdXBwb3J0ZWQgc2luY2UgVGV4aW5mbyA0LjEuCis/R0VORVJJQz8JJChURVhJMlBERikgJVNPVVJDRSUKKz8hR0VORVJJQz8JJChURVhJMlBERikgLW8gJEAgYHRlc3QgLWYgJyVTT1VSQ0UlJyB8fCBlY2hvICckKHNyY2RpcikvJ2AlU09VUkNFJQorCis/R0VORVJJQz8lU09VUkNFX1NVRkZJWCUuaHRtbDoKKz8hR0VORVJJQz8lREVTVF9QUkVGSVglLmh0bWw6ICVTT1VSQ0UlICVERVBTJSAlRElSU1RBTVAlCisjIyBXaGVuIC0tc3BsaXQgKHRoZSBkZWZhdWx0KSBpcyB1c2VkLCBtYWtlaW5mbyB3aWxsIG91dHB1dCBhCisjIyBkaXJlY3RvcnkuICBIb3dldmVyIGl0IHdpbGwgbm90IHVwZGF0ZSB0aGUgdGltZSBzdGFtcCBvZiBhCisjIyBwcmV2aW91c2x5IGV4aXN0aW5nIGRpcmVjdG9yeSwgYW5kIHdoZW4gdGhlIG5hbWVzIG9mIHRoZSBub2RlcworIyMgaW4gdGhlIG1hbnVhbCBjaGFuZ2UsIGl0IG1heSBsZWF2ZSB1bnVzZWQgcGFnZXMuICBPdXIgZml4CisjIyBpcyB0byBidWlsZCB1bmRlciBhIHRlbXBvcmFyeSBuYW1lLCBhbmQgcmVwbGFjZSB0aGUgdGFyZ2V0IG9uCisjIyBzdWNjZXNzLgorCXJtIC1yZiAkKEA6Lmh0bWw9Lmh0cCkKKwlpZiAkKE1BS0VJTkZPSFRNTCkgJChBTV9NQUtFSU5GT0hUTUxGTEFHUykgJChNQUtFSU5GT0ZMQUdTKSAlTUFLRUlORk9GTEFHUyUgXAorP0dFTkVSSUM/CSAtbyAkKEA6Lmh0bWw9Lmh0cCkgJVNPVVJDRSU7IFwKKz8hR0VORVJJQz8JIC1vICQoQDouaHRtbD0uaHRwKSBgdGVzdCAtZiAnJVNPVVJDRSUnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCVTT1VSQ0UlOyBcCisJdGhlbiBcCisJICBybSAtcmYgJEA7IFwKKyMjIFdvcmsgYXJvdW5kIGEgYnVnIGluIFRleGluZm8gNC4xICgtbyBmb28uaHRtbCBvdXRwdXRzIGZpbGVzIGluIGZvby8KKyMjIGluc3RlYWQgb2YgZm9vLmh0bWwvKS4KKwkgIGlmIHRlc3QgISAtZCAkKEA6Lmh0bWw9Lmh0cCkgJiYgdGVzdCAtZCAkKEA6Lmh0bWw9KTsgdGhlbiBcCisJICAgIG12ICQoQDouaHRtbD0pICRAOyBlbHNlIG12ICQoQDouaHRtbD0uaHRwKSAkQDsgZmk7IFwKKwllbHNlIFwKKwkgIGlmIHRlc3QgISAtZCAkKEA6Lmh0bWw9Lmh0cCkgJiYgdGVzdCAtZCAkKEA6Lmh0bWw9KTsgdGhlbiBcCisJICAgIHJtIC1yZiAkKEA6Lmh0bWw9KTsgZWxzZSBybSAtUmYgJChAOi5odG1sPS5odHApICRAOyBmaTsgXAorCSAgZXhpdCAxOyBcCisJZmkKKworIyMgSWYgd2UgYXJlIHVzaW5nIHRoZSBnZW5lcmljIHJ1bGVzLCB3ZSBuZWVkIHNlcGFyYXRlIGRlcGVuZGVuY2llcy4KKyMjIChEb24ndCB3b25kZXIgYWJvdXQgJURJUlNUQU1QJSBoZXJlLCB0aGlzIGlzIHVzZWQgb25seSBieSBub24tZ2VuZXJpYworIyMgcnVsZXMuKQoraWYgJT9HRU5FUklDX0lORk8lCislREVTVF9JTkZPX1BSRUZJWCUlREVTVF9TVUZGSVglOiAlU09VUkNFX1JFQUwlICVERVBTJQorZW5kaWYgJT9HRU5FUklDX0lORk8lCitpZiAlP0dFTkVSSUMlCislREVTVF9QUkVGSVglLmR2aTogJVNPVVJDRV9SRUFMJSAlREVQUyUKKyVERVNUX1BSRUZJWCUucGRmOiAlU09VUkNFX1JFQUwlICVERVBTJQorJURFU1RfUFJFRklYJS5odG1sOiAlU09VUkNFX1JFQUwlICVERVBTJQorZW5kaWYgJT9HRU5FUklDJQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS90ZXhpbmZvcy5hbSBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vdGV4aW5mb3MuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlkY2Q5ZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0vdGV4aW5mb3MuYW0KQEAgLTAsMCArMSw0MTQgQEAKKyMjIGF1dG9tYWtlIC0gY3JlYXRlIE1ha2VmaWxlLmluIGZyb20gTWFrZWZpbGUuYW0KKworIyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyMgLS0tLS0tLS0tLS0gIyMKKyMjIFZhcmlhYmxlcy4gICMjCisjIyAtLS0tLS0tLS0tLSAjIworCitpZiAlP0xPQ0FMLVRFWElTJQoraWYgISAlP0NZR05VUyUKK1RFWEkyRFZJID0gdGV4aTJkdmkKKworZWxzZSAlP0NZR05VUyUKKworIyMgRmluZCB0aGVzZSBwcm9ncmFtcyB3aGVyZXZlciB0aGV5IG1heSBsaWUuICBZZXMsIHRoaXMgaGFzCisjIyBpbnRpbWF0ZSBrbm93bGVkZ2Ugb2YgdGhlIHN0cnVjdHVyZSBvZiB0aGUgdGV4aW5mbyBkaXN0cmlidXRpb24uCitNQUtFSU5GTyA9IGBpZiB0ZXN0IC1mICQodG9wX2J1aWxkZGlyKS8uLi90ZXhpbmZvL21ha2VpbmZvL21ha2VpbmZvOyB0aGVuIFwKKyAgICAgICAgICAgIGVjaG8gJCh0b3BfYnVpbGRkaXIpLy4uL3RleGluZm8vbWFrZWluZm8vbWFrZWluZm87IFwKKyAgICAgICAgICBlbHNlIFwKKyAgICAgICAgICAgIGVjaG8gbWFrZWluZm87IFwKKyAgICAgICAgICBmaWAKKworVEVYSTJEVkkgPSBgaWYgdGVzdCAtZiAkKHRvcF9zcmNkaXIpLy4uL3RleGluZm8vdXRpbC90ZXhpMmR2aTsgdGhlbiBcCisgICAgICAgICAgICAgZWNobyAkKHRvcF9zcmNkaXIpLy4uL3RleGluZm8vdXRpbC90ZXhpMmR2aTsgXAorICAgICAgICAgICBlbHNlIFwKKyAgICAgICAgICAgICBlY2hvIHRleGkyZHZpOyBcCisgICAgICAgICAgIGZpYAorZW5kaWYgJT9DWUdOVVMlCisKK1RFWEkyUERGID0gJChURVhJMkRWSSkgLS1wZGYgLS1iYXRjaAorTUFLRUlORk9IVE1MID0gJChNQUtFSU5GTykgLS1odG1sCitBTV9NQUtFSU5GT0hUTUxGTEFHUyA9ICQoQU1fTUFLRUlORk9GTEFHUykKK2VuZGlmICU/TE9DQUwtVEVYSVMlCisKKworIyMgLS0tLS0tLS0tLSAjIworIyMgQnVpbGRpbmcuICAjIworIyMgLS0tLS0tLS0tLSAjIworCisjIyBUaGUgd2F5IHRvIG1ha2UgUG9zdFNjcmlwdCwgZm9yIHRob3NlIHdobyB3YW50IGl0LgoraWYgJT9MT0NBTC1URVhJUyUKK0RWSVBTID0gZHZpcHMKKy5kdmkucHM6CisJVEVYSU5QVVRTPSIkKGFtX19URVhJTkZPX1RFWF9ESVIpJChQQVRIX1NFUEFSQVRPUikkJFRFWElOUFVUUyIgXAorCSQoRFZJUFMpIC1vICRAICQ8CitlbmRpZiAlP0xPQ0FMLVRFWElTJQorCisuUEhPTlk6IGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBwZGYgcGRmLWFtIHBzIHBzLWFtCitpZiAlP1NVQkRJUlMlCitSRUNVUlNJVkVfVEFSR0VUUyArPSBkdmktcmVjdXJzaXZlIGh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlCitSRUNVUlNJVkVfVEFSR0VUUyArPSBwZGYtcmVjdXJzaXZlIHBzLXJlY3Vyc2l2ZQorZHZpOiBkdmktcmVjdXJzaXZlCitodG1sOiBodG1sLXJlY3Vyc2l2ZQoraW5mbzogaW5mby1yZWN1cnNpdmUKK3BkZjogcGRmLXJlY3Vyc2l2ZQorcHM6IHBzLXJlY3Vyc2l2ZQorZWxzZSAhJT9TVUJESVJTJQorZHZpOiBkdmktYW0KK2h0bWw6IGh0bWwtYW0KK2luZm86IGluZm8tYW0KK3BkZjogcGRmLWFtCitwczogcHMtYW0KK2VuZGlmICElP1NVQkRJUlMlCisKK2lmICU/TE9DQUwtVEVYSVMlCitkdmktYW06ICQoRFZJUykKK2h0bWwtYW06ICQoSFRNTFMpCitpbmZvLWFtOiAkKElORk9fREVQUykKK3BkZi1hbTogJChQREZTKQorcHMtYW06ICQoUFNTKQorZWxzZSAhICU/TE9DQUwtVEVYSVMlCitkdmktYW06CitodG1sLWFtOgoraW5mby1hbToKK3BkZi1hbToKK3BzLWFtOgorZW5kaWYgISAlP0xPQ0FMLVRFWElTJQorCisKKyMjIC0tLS0tLS0tLS0tLSAjIworIyMgSW5zdGFsbGluZy4gICMjCisjIyAtLS0tLS0tLS0tLS0gIyMKKworIyMgTG9vayBpbiBib3RoIC4gYW5kIHNyY2RpciBiZWNhdXNlIHRoZSBpbmZvIHBhZ2VzIG1pZ2h0IGhhdmUgYmVlbgorIyMgcmVidWlsdCBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5LiAgQ2FuJ3QgY2QgdG8gc3JjZGlyOyB0aGF0IG1pZ2h0CisjIyBicmVhayBhIHBvc3NpYmxlIGluc3RhbGwtc2ggcmVmZXJlbmNlLgorIyMKKyMjIEZ1bm55IG5hbWUgZHVlIHRvIC0tY3lnbnVzIGluZmx1ZW5jZTsgd2Ugd2FudCB0byByZXNlcnZlCisjIyBgaW5zdGFsbC1pbmZvJyBmb3IgdGhlIHVzZXIuCisjIworIyMgVEVYSU5GT1MgcHJpbWFyeSBhcmUgYWx3YXlzIGluc3RhbGxlZCBpbiBpbmZvZGlyLCBoZW5jZSBpbnN0YWxsLWRhdGEKKyMjIGlzIGhhcmQgY29kZWQuCitpZiAlP0lOU1RBTEwtSU5GTyUKK2lmICU/TE9DQUwtVEVYSVMlCithbV9faW5zdGFsbGRpcnMgKz0gIiQoREVTVERJUikkKGluZm9kaXIpIgoraW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWluZm8tYW0KK2VuZGlmICU/TE9DQUwtVEVYSVMlCitlbmRpZiAlP0lOU1RBTEwtSU5GTyUKKy5QSE9OWTogXAorICBpbnN0YWxsLWR2aSAgaW5zdGFsbC1kdmktYW0gXAorICBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKKyAgaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBcCisgIGluc3RhbGwtcGRmICBpbnN0YWxsLXBkZi1hbSBcCisgIGluc3RhbGwtcHMgICBpbnN0YWxsLXBzLWFtCisKK2lmICU/U1VCRElSUyUKK1JFQ1VSU0lWRV9UQVJHRVRTICs9IFwKKyAgaW5zdGFsbC1kdmktcmVjdXJzaXZlIFwKKyAgaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZSBcCisgIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAorICBpbnN0YWxsLXBkZi1yZWN1cnNpdmUgXAorICBpbnN0YWxsLXBzLXJlY3Vyc2l2ZQoraW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLXJlY3Vyc2l2ZQoraW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1yZWN1cnNpdmUKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtcmVjdXJzaXZlCitlbHNlICElP1NVQkRJUlMlCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQoraW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCitlbmRpZiAhJT9TVUJESVJTJQorCitpZiAlP0xPQ0FMLVRFWElTJQorCitpbmNsdWRlIGluc3QtdmFycy5hbQorCitpbnN0YWxsLWR2aS1hbTogJChEVklTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoZHZpZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoZHZpZGlyKSIKKwlAbGlzdD0nJChEVklTKSc7IHRlc3QgLW4gIiQoZHZpZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChkdmlkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChkdmlkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmUKKworaW5zdGFsbC1odG1sLWFtOiAkKEhUTUxTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoaHRtbGRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGh0bWxkaXIpIgorCUBsaXN0PSckKEhUTUxTKSc7IGxpc3QyPTsgdGVzdCAtbiAiJChodG1sZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCIgfHwgdGVzdCAtZCAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgICQoYW1fX3N0cmlwX2RpcikgXAorCSAgaWYgdGVzdCAtZCAiJCRkJCRwIjsgdGhlbiBcCisJICAgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChodG1sZGlyKS8kJGYnIjsgXAorCSAgICAkKE1LRElSX1ApICIkKERFU1RESVIpJChodG1sZGlyKS8kJGYiIHx8IGV4aXQgMTsgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICckJGQkJHAnLyogJyQoREVTVERJUikkKGh0bWxkaXIpLyQkZiciOyBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAiJCRkJCRwIi8qICIkKERFU1RESVIpJChodG1sZGlyKS8kJGYiIHx8IGV4aXQgJCQ/OyBcCisJICBlbHNlIFwKKwkgICAgbGlzdDI9IiQkbGlzdDIgJCRkJCRwIjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBlY2hvICIkJGxpc3QyIiB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChodG1sZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQoaHRtbGRpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZTsgfQorCitpbnN0YWxsLWluZm8tYW06ICQoSU5GT19ERVBTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoaW5mb2RpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGluZm9kaXIpIgorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCisJbGlzdD0nJChJTkZPX0RFUFMpJzsgdGVzdCAtbiAiJChpbmZvZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKKyMjIFN0cmlwIHBvc3NpYmxlICQoc3JjZGlyKSBwcmVmaXguCisJICBjYXNlICQkZmlsZSBpbiBcCisJICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisJICBlc2FjOyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisjIyA4KzMgZmlsZXN5c3RlbXMgY2Fubm90IGRlYWwgd2l0aCBmb28uaW5mby1OIGZpbGVuYW1lczogdGhleSBhbGwKKyMjIGNvbmZsaWN0LiAgREpHUFAgY29tZXMgd2l0aCBhIHRvb2wsIERKVEFSLCB0aGF0IHdpbGwgcmVuYW1lIHRoZXNlCisjIyBmaWxlcyB0byBmb28uaU5OIHdoaWxlIGV4dHJhY3RpbmcgdGhlIGFyY2hpdmUuICBESkdQUCdzIG1ha2VpbmZvCisjIyBpcyBwYXRjaGVkIHRvIGdyb2sgdGhlc2UgZmlsZW5hbWVzLiAgSG93ZXZlciB3ZSBoYXZlIHRvIGFjY291bnQKKyMjIGZvciB0aGUgcmVuYW1pbmcgd2hlbiBpbnN0YWxsaW5nIHRoZSBpbmZvIGZpbGVzLgorIyMKKyMjIElmICRmaWxlID09IGZvby5pbmZvLCB0aGVuICRmaWxlX2kgPT0gZm9vLmkuICBUaGUgcmVhc29uIHdlIHVzZSB0d28KKyMjIHNoZWxsIGNvbW1hbmRzIGluc3RlYWQgb2Ygb25lICgnc3xcLmluZm8kJHwuaXwnKSBpcyBzbyB0aGF0IGEgc3VmZml4LWxlc3MKKyMjIGBmb28nIGJlY29tZXMgYGZvby5pJyB0b28uCisJICBmaWxlX2k9YGVjaG8gIiQkZmlsZSIgfCBzZWQgJ3N8XC5pbmZvJCR8fDtzfCQkfC5pfCdgOyBcCisJICBmb3IgaWZpbGUgaW4gJCRkLyQkZmlsZSAkJGQvJCRmaWxlLVswLTldICQkZC8kJGZpbGUtWzAtOV1bMC05XSBcCisJICAgICAgICAgICAgICAgJCRkLyQkZmlsZV9pWzAtOV0gJCRkLyQkZmlsZV9pWzAtOV1bMC05XSA7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAkJGlmaWxlOyB0aGVuIFwKKwkgICAgICBlY2hvICIkJGlmaWxlIjsgXAorCSAgICBlbHNlIDogOyBmaTsgXAorCSAgZG9uZTsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQoaW5mb2RpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKGluZm9kaXIpIiB8fCBleGl0ICQkPzsgZG9uZQorCUAkKFBPU1RfSU5TVEFMTCkKKyMjIE9ubHkgcnVuIHRoaXMgY29kZSBpZiBpbnN0YWxsLWluZm8gYWN0dWFsbHkgZXhpc3RzLCBhbmQgaXQgaXMgbm90CisjIyB0aGUgRGViaWFuIGluc3RhbGwtaW5mby4gIEZJWE1FOiBvbmNlIERlYmlhbiBpbnN0YWxsLWluZm8gZ29lcworIyMgYXdheSwgd2UgY2FuIHJlbW92ZSB0aGlzIGhhY2suICBTb21lIHZlcnNpb25zIG9mIERlYmlhbiBpbnN0YWxsLWluZm8KKyMjIHByaW50IHRoZWlyIHZlcnNpb24gb24gc3RkZXJyIChlLmcuIDEuOC4zKSwgb3RoZXIgZG8gaXQgaW4KKyMjIG9uIHN0ZG91dCAoZS5nLiAxLjEwLjE1KS4KKyMjCisjIyBEbyBub3QgdXNlCisjIyAgICBpbnN0YWxsLWluZm8gLS12ZXJzaW9uIDI+JjEgfCBzZWQgMXEgfCBncmVwIC12IC1pIGRlYmlhbgorIyMgYXMgaWYgaW5zdGFsbC1pbmZvIGRvZXMgbm90IGV4aXN0LCBncmVwIC12IHdpbGwgYmUgaGFwcHksIGFuZAorIyMgdGhlcmVmb3JlIHRoZSBjb2RlIHdpbGwgYmUgdHJpZ2dlcmVkIGFsdGhvdWdoIGluc3RhbGwtaW5mbyBpcyBtaXNzaW5nLgorCUBpZiAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbiAmJiBcCisJICAgICBpbnN0YWxsLWluZm8gLS12ZXJzaW9uIDI+JjEgfCBzZWQgMXEgfCBncmVwIC1pIC12IGRlYmlhbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGxpc3Q9JyQoSU5GT19ERVBTKSc7IHRlc3QgLW4gIiQoaW5mb2RpcikiIHx8IGxpc3Q9OyBcCisJICBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKKyMjIFN0cmlwIGRpcmVjdG9yeQorCSAgICByZWxmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICdzfF4uKi98fCdgOyBcCisjIyBSdW4gYDonIGFmdGVyIGluc3RhbGwtaW5mbyBpbiBjYXNlIGluc3RhbGwtaW5mbyBmYWlscy4gIFdlIHJlYWxseQorIyMgZG9uJ3QgY2FyZSBhYm91dCBmYWlsdXJlcyBoZXJlLCBiZWNhdXNlIHRoZXkgY2FuIGJlIHNwdXJpb3VzLiAgRm9yCisjIyBpbnN0YW5jZSBpZiB5b3UgZG9uJ3QgaGF2ZSBhIGRpciBmaWxlLCBpbnN0YWxsLWluZm8gd2lsbCBmYWlsLiAgSQorIyMgdGhpbmsgaW5zdGVhZCBpdCBzaG91bGQgY3JlYXRlIGEgbmV3IGRpciBmaWxlIGZvciB5b3UuICBUaGlzIGJ1ZworIyMgY2F1c2VzIHRoZSBgbWFrZSBkaXN0Y2hlY2snIHRhcmdldCB0byBmYWlsIHJlbGlhYmx5LgorCSAgICBlY2hvICIgaW5zdGFsbC1pbmZvIC0taW5mby1kaXI9JyQoREVTVERJUikkKGluZm9kaXIpJyAnJChERVNURElSKSQoaW5mb2RpcikvJCRyZWxmaWxlJyI7XAorIyMgVXNlIGB8fCA6JyBoZXJlIGJlY2F1c2UgU3VuIG1ha2UgcGFzc2VzIC1lIHRvIHNoOyBpZiBpbnN0YWxsLWluZm8KKyMjIGZhaWxzIHRoZW4gd2UnZCBmYWlsIGlmIHdlIHVzZWQgYDsnLgorCSAgICBpbnN0YWxsLWluZm8gLS1pbmZvLWRpcj0iJChERVNURElSKSQoaW5mb2RpcikiICIkKERFU1RESVIpJChpbmZvZGlyKS8kJHJlbGZpbGUiIHx8IDo7XAorCSAgZG9uZTsgXAorCWVsc2UgOiA7IGZpCisKK2luc3RhbGwtcGRmLWFtOiAkKFBERlMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChwZGZkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChwZGZkaXIpIgorCUBsaXN0PSckKFBERlMpJzsgdGVzdCAtbiAiJChwZGZkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKHBkZmRpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKHBkZmRpcikiIHx8IGV4aXQgJCQ/OyBkb25lCisKK2luc3RhbGwtcHMtYW06ICQoUFNTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQocHNkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChwc2RpcikiCisJQGxpc3Q9JyQoUFNTKSc7IHRlc3QgLW4gIiQocHNkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKHBzZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQocHNkaXIpIiB8fCBleGl0ICQkPzsgZG9uZQorCitlbHNlICEgJT9MT0NBTC1URVhJUyUKK2luc3RhbGwtZHZpLWFtOgoraW5zdGFsbC1odG1sLWFtOgoraW5zdGFsbC1pbmZvLWFtOgoraW5zdGFsbC1wZGYtYW06CitpbnN0YWxsLXBzLWFtOgorZW5kaWYgISAlP0xPQ0FMLVRFWElTJQorCisKKyMjIC0tLS0tLS0tLS0tLS0tICMjCisjIyBVbmluc3RhbGxpbmcuICAjIworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKworaWYgJT9MT0NBTC1URVhJUyUKKy5QSE9OWSB1bmluc3RhbGwtYW06IFwKKyAgdW5pbnN0YWxsLWR2aS1hbSBcCisgIHVuaW5zdGFsbC1odG1sLWFtIFwKKyAgdW5pbnN0YWxsLWluZm8tYW0gXAorICB1bmluc3RhbGwtcHMtYW0gXAorICB1bmluc3RhbGwtcGRmLWFtCisKK3VuaW5zdGFsbC1kdmktYW06CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChEVklTKSc7IHRlc3QgLW4gIiQoZHZpZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgICQoYW1fX3N0cmlwX2RpcikgXAorCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChkdmlkaXIpLyQkZiciOyBcCisJICBybSAtZiAiJChERVNURElSKSQoZHZpZGlyKS8kJGYiOyBcCisJZG9uZQorCit1bmluc3RhbGwtaHRtbC1hbToKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKEhUTUxTKSc7IHRlc3QgLW4gIiQoaHRtbGRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICAkKGFtX19zdHJpcF9kaXIpIFwKKyMjICRmIGNhbiBiZSBhIGRpcmVjdG9yeSwgaGVuY2UgdGhlIC1yLgorCSAgZWNobyAiIHJtIC1yZiAnJChERVNURElSKSQoaHRtbGRpcikvJCRmJyI7IFwKKwkgIHJtIC1yZiAiJChERVNURElSKSQoaHRtbGRpcikvJCRmIjsgXAorCWRvbmUKKwordW5pbnN0YWxsLWluZm8tYW06CisJQCQoUFJFX1VOSU5TVEFMTCkKKyMjIFJ1biB0d28gbG9vcHMgaGVyZSBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgUFJFX1VOSU5TVEFMTCBhbmQKKyMjIE5PUk1BTF9VTklOU1RBTEwgY29ycmVjdGx5LgorCUBpZiB0ZXN0IC1kICckKERFU1RESVIpJChpbmZvZGlyKScgJiYgXAorCSAgICAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbiAmJiBcCisJICAgICBpbnN0YWxsLWluZm8gLS12ZXJzaW9uIDI+JjEgfCBzZWQgMXEgfCBncmVwIC1pIC12IGRlYmlhbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGxpc3Q9JyQoSU5GT19ERVBTKSc7IFwKKwkgIGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAorCSAgICByZWxmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICdzfF4uKi98fCdgOyBcCisjIyBpbnN0YWxsLWluZm8gbmVlZHMgdGhlIGFjdHVhbCBpbmZvIGZpbGUuICBXZSB1c2UgdGhlIGluc3RhbGxlZCBvbmUsCisjIyByYXRoZXIgdGhhbiByZWx5aW5nIG9uIG9uZSBzdGlsbCBiZWluZyBpbiBzcmNkaXIgb3IgYnVpbGRkaXIuCisjIyBIb3dldmVyLCBgbWFrZSB1bmluc3RhbGwgJiYgbWFrZSB1bmluc3RhbGwnIHNob3VsZCBub3QgZmFpbCwKKyMjIHNvIHdlIGlnbm9yZSBmYWlsdXJlIGlmIHRoZSBmaWxlIGRpZCBub3QgZXhpc3QuCisJICAgIGVjaG8gIiBpbnN0YWxsLWluZm8gLS1pbmZvLWRpcj0nJChERVNURElSKSQoaW5mb2RpciknIC0tcmVtb3ZlICckKERFU1RESVIpJChpbmZvZGlyKS8kJHJlbGZpbGUnIjsgXAorCSAgICBpZiBpbnN0YWxsLWluZm8gLS1pbmZvLWRpcj0iJChERVNURElSKSQoaW5mb2RpcikiIC0tcmVtb3ZlICIkKERFU1RESVIpJChpbmZvZGlyKS8kJHJlbGZpbGUiOyBcCisJICAgIHRoZW4gOjsgZWxzZSB0ZXN0ICEgLWYgIiQoREVTVERJUikkKGluZm9kaXIpLyQkcmVsZmlsZSIgfHwgZXhpdCAxOyBmaTsgXAorCSAgZG9uZTsgXAorCWVsc2UgOjsgZmkKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKElORk9fREVQUyknOyBcCisJZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCisJICByZWxmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICdzfF4uKi98fCdgOyBcCisjIyBESkdQUC1zdHlsZSBpbmZvIGZpbGVzLiAgU2VlIGNvbW1lbnQgaW4gaW5zdGFsbC1pbmZvLWFtLgorCSAgcmVsZmlsZV9pPWBlY2hvICIkJHJlbGZpbGUiIHwgc2VkICdzfFwuaW5mbyQkfHw7c3wkJHwuaXwnYDsgXAorCSAgKGlmIHRlc3QgLWQgIiQoREVTVERJUikkKGluZm9kaXIpIiAmJiBjZCAiJChERVNURElSKSQoaW5mb2RpcikiOyB0aGVuIFwKKwkgICAgIGVjaG8gIiBjZCAnJChERVNURElSKSQoaW5mb2RpciknICYmIHJtIC1mICQkcmVsZmlsZSAkJHJlbGZpbGUtWzAtOV0gJCRyZWxmaWxlLVswLTldWzAtOV0gJCRyZWxmaWxlX2lbMC05XSAkJHJlbGZpbGVfaVswLTldWzAtOV0iOyBcCisJICAgICBybSAtZiAkJHJlbGZpbGUgJCRyZWxmaWxlLVswLTldICQkcmVsZmlsZS1bMC05XVswLTldICQkcmVsZmlsZV9pWzAtOV0gJCRyZWxmaWxlX2lbMC05XVswLTldOyBcCisJICAgZWxzZSA6OyBmaSk7IFwKKwlkb25lCisKK3VuaW5zdGFsbC1wZGYtYW06CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChQREZTKSc7IHRlc3QgLW4gIiQocGRmZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgICQoYW1fX3N0cmlwX2RpcikgXAorCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChwZGZkaXIpLyQkZiciOyBcCisJICBybSAtZiAiJChERVNURElSKSQocGRmZGlyKS8kJGYiOyBcCisJZG9uZQorCit1bmluc3RhbGwtcHMtYW06CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChQU1MpJzsgdGVzdCAtbiAiJChwc2RpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICAkKGFtX19zdHJpcF9kaXIpIFwKKwkgIGVjaG8gIiBybSAtZiAnJChERVNURElSKSQocHNkaXIpLyQkZiciOyBcCisJICBybSAtZiAiJChERVNURElSKSQocHNkaXIpLyQkZiI7IFwKKwlkb25lCitlbmRpZiAlP0xPQ0FMLVRFWElTJQorCitpZiAlP0xPQ0FMLVRFWElTJQorLlBIT05ZOiBkaXN0LWluZm8KK2Rpc3QtaW5mbzogJChJTkZPX0RFUFMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwlsaXN0PSckKElORk9fREVQUyknOyBcCisJZm9yIGJhc2UgaW4gJCRsaXN0OyBkbyBcCisjIyBTdHJpcCBwb3NzaWJsZSAkKHNyY2RpcikgcHJlZml4LgorCSAgY2FzZSAkJGJhc2UgaW4gXAorCSAgICAkKHNyY2RpcikvKikgYmFzZT1gZWNobyAiJCRiYXNlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorCSAgZXNhYzsgXAorCSAgaWYgdGVzdCAtZiAkJGJhc2U7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgYmFzZV9pPWBlY2hvICIkJGJhc2UiIHwgc2VkICdzfFwuaW5mbyQkfHw7c3wkJHwuaXwnYDsgXAorCSAgZm9yIGZpbGUgaW4gJCRkLyQkYmFzZSAkJGQvJCRiYXNlLVswLTldICQkZC8kJGJhc2UtWzAtOV1bMC05XSAkJGQvJCRiYXNlX2lbMC05XSAkJGQvJCRiYXNlX2lbMC05XVswLTldOyBkbyBcCisJICAgIGlmIHRlc3QgLWYgJCRmaWxlOyB0aGVuIFwKKyMjIFN0cmlwIGxlYWRpbmcgJyQkZC8nLgorCSAgICAgIHJlbGZpbGU9YGV4cHIgIiQkZmlsZSIgOiAiJCRkL1woLipcKSJgOyBcCisJICAgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJHJlbGZpbGUiIHx8IFwKKwkJY3AgLXAgJCRmaWxlICIkKGRpc3RkaXIpLyQkcmVsZmlsZSI7IFwKKwkgICAgZWxzZSA6OyBmaTsgXAorCSAgZG9uZTsgXAorCWRvbmUKK2VuZGlmICU/TE9DQUwtVEVYSVMlCisKKworIyMgLS0tLS0tLS0tLSAjIworIyMgQ2xlYW5pbmcuICAjIworIyMgLS0tLS0tLS0tLSAjIworCisjIyBUaGUgZnVubnkgbmFtZSBpcyBkdWUgdG8gLS1jeWdudXMgaW5mbHVlbmNlOyBpbiBDeWdudXMgbW9kZSwKKyMjIGBjbGVhbi1pbmZvJyBpcyBhIHRhcmdldCB0aGF0IHVzZXJzIGNhbiB1c2UuCisKK2lmICU/TE9DQUwtVEVYSVMlCisuUEhPTlkgbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWFtaW5mbworLlBIT05ZOiBtb3N0bHljbGVhbi1hbWluZm8KK21vc3RseWNsZWFuLWFtaW5mbzoKKyMjIFVzZSBgLXJmJywgbm90IGp1c3QgYC1mJywgYmVjYXVzZSB0aGUgJSpDTEVBTiUgc3Vic3RpdHV0aW9ucyBjYW4gYWxzbworIyMgY29udGFpbiBhbnkgZGlyZWN0b3J5IGNyZWF0ZWQgYnkgYG1ha2VpbmZvIC0taHRtbCcuCisJLXJtIC1yZiAlTU9TVExZQ0xFQU4lCisKKy5QSE9OWSBjbGVhbi1hbTogY2xlYW4tYW1pbmZvCitjbGVhbi1hbWluZm86CisjIyBVc2UgYC1yZicsIG5vdCBqdXN0IGAtZicsIGJlY2F1c2UgdGhlICUqQ0xFQU4lIHN1YnN0aXR1dGlvbnMgY2FuIGFsc28KKyMjIGNvbnRhaW4gYW55IGRpcmVjdG9yeSBjcmVhdGVkIGJ5IGBtYWtlaW5mbyAtLWh0bWwnLgorP1RFWElDTEVBTj8JLXRlc3QgLXogIiVURVhJQ0xFQU4lIiBcCis/VEVYSUNMRUFOPwl8fCBybSAtcmYgJVRFWElDTEVBTiUKKworLlBIT05ZIG1haW50YWluZXItY2xlYW4tYW06IG1haW50YWluZXItY2xlYW4tYW1pbmZvCittYWludGFpbmVyLWNsZWFuLWFtaW5mbzoKKwlAbGlzdD0nJChJTkZPX0RFUFMpJzsgZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisjIyAuaU5OIGZpbGVzIGFyZSBESkdQUC1zdHlsZSBpbmZvIGZpbGVzLgorCSAgaV9pPWBlY2hvICIkJGkiIHwgc2VkICdzfFwuaW5mbyQkfHw7c3wkJHwuaXwnYDsgXAorCSAgZWNobyAiIHJtIC1mICQkaSAkJGktWzAtOV0gJCRpLVswLTldWzAtOV0gJCRpX2lbMC05XSAkJGlfaVswLTldWzAtOV0iOyBcCisJICBybSAtZiAkJGkgJCRpLVswLTldICQkaS1bMC05XVswLTldICQkaV9pWzAtOV0gJCRpX2lbMC05XVswLTldOyBcCisJZG9uZQorIyMgVXNlIGAtcmYnLCBub3QganVzdCBgLWYnLCBiZWNhdXNlIHRoZSAlKkNMRUFOJSBzdWJzdGl0dXRpb25zIGNhbiBhbHNvCisjIyBjb250YWluIGFueSBkaXJlY3RvcnkgY3JlYXRlZCBieSBgbWFrZWluZm8gLS1odG1sJy4KKz9NQUlOVENMRUFOPwktdGVzdCAteiAiJU1BSU5UQ0xFQU4lIiBcCis/TUFJTlRDTEVBTj8JfHwgcm0gLXJmICVNQUlOVENMRUFOJQorCis/Q1lHTlVTPy5QSE9OWTogY2xlYW4taW5mbworP0NZR05VUz9jbGVhbi1pbmZvOiBtb3N0bHljbGVhbi1hbWluZm8gY2xlYW4tYW1pbmZvCitlbmRpZiAlP0xPQ0FMLVRFWElTJQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS92YWxhLmFtIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS92YWxhLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYWEyOTkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL2FtL3ZhbGEuYW0KQEAgLTAsMCArMSwxNyBAQAorIyMgYXV0b21ha2UgLSBjcmVhdGUgTWFrZWZpbGUuaW4gZnJvbSBNYWtlZmlsZS5hbQorIyMgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIyBUaGVyZSBpcyBubyBydWxlIGhlcmUuICA6LSkKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0veWFjYy5hbSBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW0veWFjYy5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDM1Y2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbS95YWNjLmFtCkBAIC0wLDAgKzEsNDggQEAKKyMjIGF1dG9tYWtlIC0gY3JlYXRlIE1ha2VmaWxlLmluIGZyb20gTWFrZWZpbGUuYW0KKyMjIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNiwgMjAwOQorIyMgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIyBXZSB3YW50IHRvIGRpc2FibGUgdGhlIFlhY2MgcmVidWlsZCBydWxlIHdoZW4KKyMjICAgMS4gQU1fTUFJTlRBSU5FUl9NT0RFIGlzIHVzZWQsIGFuZAorIyMgICAyLiAtLWVuYWJsZS1tYWludGFpbmVyLW1vZGUgaXMgbm90IHNwZWNpZmllZCwgYW5kCisjIyAgIDMuIHBhcnNlci5jIGFscmVhZHkgZXhpc3QsIGFuZAorIyMgICA0LiBwYXJzZXIueSBhbmQgcGFyc2VyLmMgYXJlIGRpc3RyaWJ1dGVkLgorIyMgUG9pbnQgIzMgaXMgYmVjYXVzZSBgbWFrZSBtYWludGFpbmVyLWNsZWFuJyBlcmFzZXMgcGFyc2VyLmMsIHlldAorIyMgdGhlIEdOVSBDb2RpbmcgU3RhbmRhcmRzIHJlcXVpcmUgdGhhdCAuL2NvbmZpZ3VyZTsgbWFrZSB3b3JrcyBldmVuCisjIyBhZnRlciB0aGF0LgorIyMgUG9pbnQgIzQgaXMgYmVjYXVzZSBwYXJzZXJzIGxpc3RlZCBpbiBub2Rpc3RfKl9TT1VSQ0VTIGFyZSBhbHdheXMKKyMjIGJ1aWx0IG9uIHRoZSB1c2VyJ3Mgc2lkZSwgc28gaXQgbWFrZXMgbm8gc2Vuc2UgdG8gZGlzYWJsZSB0aGVtLgorIyMKKyMjIFBvaW50cyAjMSwgIzIsICMzIGFyZSBzb2x2ZWQgYnkgdW5jb25kaXRpb25hbGx5IHByZWZpeGluZyB0aGUgcnVsZQorIyMgd2l0aCAkKGFtX19za2lweWFjYykgZGVmaW5lZCBiZWxvdyBvbmx5IHdoZW4gbmVlZGVkLgorIyMKKyMjIFBvaW50ICM0IHJlcXVpcmVzIGEgY29uZGl0aW9uIG9uIHdoZXRoZXIgcGFyc2VyLnkvcGFyc2VyLmMgYXJlCisjIyBkaXN0cmlidXRlZCBvciBub3QuICBXZSBjYW5ub3QgaGF2ZSBhIGdlbmVyaWMgcnVsZSB0aGF0IHdvcmtzIGluCisjIyBib3RoIGNhc2VzLCBzbyB3ZSBlbnN1cmUgaW4gYXV0b21ha2UgdGhhdCBub2Rpc3RfIHBhcnNlcnMgYWx3YXlzCisjIyB1c2Ugbm9uLWdlbmVyaWMgcnVsZXMuCitpZiAlP01BSU5UQUlORVItTU9ERSUKK2lmICU/RklSU1QlCitATUFJTlRBSU5FUl9NT0RFX0ZBTFNFQGFtX19za2lweWFjYyA9IHRlc3QgLWYgJEAgfHwKK2VuZGlmICU/RklSU1QlCitlbmRpZiAlP01BSU5UQUlORVItTU9ERSUKKworP0dFTkVSSUM/JUVYVCUlREVSSVZFRC1FWFQlOgorPyFHRU5FUklDPyVPQkolOiAlU09VUkNFJQorP0dFTkVSSUM/CSVWRVJCT1NFJSQoYW1fX3NraXB5YWNjKSAkKFNIRUxMKSAkKFlMV1JBUCkgJVNPVVJDRSUgeS50YWIuYyAlT0JKJSB5LnRhYi5oICVCQVNFJS5oIHkub3V0cHV0ICVCQVNFJS5vdXRwdXQgLS0gJUNPTVBJTEUlCis/IUdFTkVSSUM/CSVWRVJCT1NFJSBcCis/IUdFTkVSSUM/P0RJU1RfU09VUkNFPwkkKGFtX19za2lweWFjYykgXAorIyMgRm9yIG5vbi1zdWZmaXggcnVsZXMsIHdlIG11c3QgZW11bGF0ZSBhIFZQQVRIIHNlYXJjaCBvbiAlU09VUkNFJS4KKz8hR0VORVJJQz8JJChTSEVMTCkgJChZTFdSQVApIGB0ZXN0IC1mICclU09VUkNFJScgfHwgZWNobyAnJChzcmNkaXIpLydgJVNPVVJDRSUgeS50YWIuYyAlT0JKJSB5LnRhYi5oICVCQVNFJS5oIHkub3V0cHV0ICVCQVNFJS5vdXRwdXQgLS0gJUNPTVBJTEUlCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL2Fuc2kya25yLjEgYi9zaGFyZS9hdXRvbWFrZS0xLjExL2Fuc2kya25yLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllZTVhNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW5zaTJrbnIuMQpAQCAtMCwwICsxLDM2IEBACisuVEggQU5TSTJLTlIgMSAiMTkgSmFuIDE5OTYiCisuU0ggTkFNRQorYW5zaTJrbnIgXC0gY29udmVydCBBTlNJIEMgdG8gS2VybmlnaGFuICYgUml0Y2hpZSBDCisuU0ggU1lOT1BTSVMKKy5JIGFuc2kya25yCitbLS12YXJhcmdzXSBpbnB1dF9maWxlIFtvdXRwdXRfZmlsZV0KKy5TSCBERVNDUklQVElPTgorSWYgbm8gb3V0cHV0X2ZpbGUgaXMgc3VwcGxpZWQsIG91dHB1dCBnb2VzIHRvIHN0ZG91dC4KKy5icgorVGhlcmUgYXJlIG5vIGVycm9yIG1lc3NhZ2VzLgorLnNwCisuSSBhbnNpMmtucgorcmVjb2duaXplcyBmdW5jdGlvbiBkZWZpbml0aW9ucyBieSBzZWVpbmcgYSBub24ta2V5d29yZCBpZGVudGlmaWVyIGF0IHRoZSBsZWZ0CittYXJnaW4sIGZvbGxvd2VkIGJ5IGEgbGVmdCBwYXJlbnRoZXNpcywgd2l0aCBhIHJpZ2h0IHBhcmVudGhlc2lzIGFzIHRoZSBsYXN0CitjaGFyYWN0ZXIgb24gdGhlIGxpbmUsIGFuZCB3aXRoIGEgbGVmdCBicmFjZSBhcyB0aGUgZmlyc3QgdG9rZW4gb24gdGhlCitmb2xsb3dpbmcgbGluZSAoaWdub3JpbmcgcG9zc2libGUgaW50ZXJ2ZW5pbmcgY29tbWVudHMpLiAgSXQgd2lsbCByZWNvZ25pemUgYQorbXVsdGktbGluZSBoZWFkZXIgcHJvdmlkZWQgdGhhdCBubyBpbnRlcnZlbmluZyBsaW5lIGVuZHMgd2l0aCBhIGxlZnQgb3IgcmlnaHQKK2JyYWNlIG9yIGEgc2VtaWNvbG9uLiAgVGhlc2UgYWxnb3JpdGhtcyBpZ25vcmUgd2hpdGVzcGFjZSBhbmQgY29tbWVudHMsIGV4Y2VwdAordGhhdCB0aGUgZnVuY3Rpb24gbmFtZSBtdXN0IGJlIHRoZSBmaXJzdCB0aGluZyBvbiB0aGUgbGluZS4KKy5zcAorVGhlIGZvbGxvd2luZyBjb25zdHJ1Y3RzIHdpbGwgY29uZnVzZSBpdDoKKy5icgorICAgICAtIEFueSBvdGhlciBjb25zdHJ1Y3QgdGhhdCBzdGFydHMgYXQgdGhlIGxlZnQgbWFyZ2luIGFuZCBmb2xsb3dzIHRoZQorYWJvdmUgc3ludGF4IChzdWNoIGFzIGEgbWFjcm8gb3IgZnVuY3Rpb24gY2FsbCkuCisuYnIKKyAgICAgLSBTb21lIG1hY3JvcyB0aGF0IHRpbmtlciB3aXRoIHRoZSBzeW50YXggb2YgdGhlIGZ1bmN0aW9uIGhlYWRlci4KKy5zcAorVGhlIC0tdmFyYXJncyBzd2l0Y2ggaXMgb2Jzb2xldGUsIGFuZCBpcyByZWNvZ25pemVkIG9ubHkgZm9yCitiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gIFRoZSBwcmVzZW50IHZlcnNpb24gb2YKKy5JIGFuc2kya25yCit3aWxsIGFsd2F5cyBhdHRlbXB0IHRvIGNvbnZlcnQgYSAuLi4gYXJndW1lbnQgdG8gdmFfYWxpc3QgYW5kIHZhX2RjbC4KKy5TSCBBVVRIT1IKK0wuIFBldGVyIERldXRzY2ggPGdob3N0QGFsYWRkaW4uY29tPiB3cm90ZSB0aGUgb3JpZ2luYWwgYW5zaTJrbnIgYW5kCitjb250aW51ZXMgdG8gbWFpbnRhaW4gdGhlIGN1cnJlbnQgdmVyc2lvbjsgbW9zdCBvZiB0aGUgY29kZSBpbiB0aGUgY3VycmVudAordmVyc2lvbiBpcyBoaXMgd29yay4gIGFuc2kya25yIGFsc28gaW5jbHVkZXMgY29udHJpYnV0aW9ucyBieSBGcmFuY29pcworUGluYXJkIDxwaW5hcmRAaXJvLnVtb250cmVhbC5jYT4gYW5kIEppbSBBdmVyYSA8amltYUBuZXRjb20uY29tPi4KZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW5zaTJrbnIuYyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvYW5zaTJrbnIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODRjMjEwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9hbnNpMmtuci5jCkBAIC0wLDAgKzEsNzM5IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5ODksIDIwMDAgQWxhZGRpbiBFbnRlcnByaXNlcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovCisKKy8qJElkOiBhbnNpMmtuci5jLHYgMS4xNCAyMDAzLzA5LzA2IDA1OjM2OjU2IGVnZ2VydCBFeHAgJCovCisvKiBDb252ZXJ0IEFOU0kgQyBmdW5jdGlvbiBkZWZpbml0aW9ucyB0byBLJlIgKCJ0cmFkaXRpb25hbCBDIikgc3ludGF4ICovCisKKy8qCithbnNpMmtuciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZLiAgTm8gYXV0aG9yIG9yIGRpc3RyaWJ1dG9yIGFjY2VwdHMgcmVzcG9uc2liaWxpdHkgdG8gYW55b25lIGZvciB0aGUKK2NvbnNlcXVlbmNlcyBvZiB1c2luZyBpdCBvciBmb3Igd2hldGhlciBpdCBzZXJ2ZXMgYW55IHBhcnRpY3VsYXIgcHVycG9zZSBvcgord29ya3MgYXQgYWxsLCB1bmxlc3MgaGUgc2F5cyBzbyBpbiB3cml0aW5nLiAgUmVmZXIgdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSAodGhlICJHUEwiKSBmb3IgZnVsbCBkZXRhaWxzLgorCitFdmVyeW9uZSBpcyBncmFudGVkIHBlcm1pc3Npb24gdG8gY29weSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgYW5zaTJrbnIsCitidXQgb25seSB1bmRlciB0aGUgY29uZGl0aW9ucyBkZXNjcmliZWQgaW4gdGhlIEdQTC4gIEEgY29weSBvZiB0aGlzIGxpY2Vuc2UKK2lzIHN1cHBvc2VkIHRvIGhhdmUgYmVlbiBnaXZlbiB0byB5b3UgYWxvbmcgd2l0aCBhbnNpMmtuciBzbyB5b3UgY2FuIGtub3cKK3lvdXIgcmlnaHRzIGFuZCByZXNwb25zaWJpbGl0aWVzLiAgSXQgc2hvdWxkIGJlIGluIGEgZmlsZSBuYW1lZCBDT1BZTEVGVCwKK29yLCBpZiB0aGVyZSBpcyBubyBmaWxlIG5hbWVkIENPUFlMRUZULCBhIGZpbGUgbmFtZWQgQ09QWUlORy4gIEFtb25nIG90aGVyCit0aGluZ3MsIHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIG5vdGljZSBtdXN0IGJlIHByZXNlcnZlZCBvbiBhbGwKK2NvcGllcy4KKworV2UgZXhwbGljaXRseSBzdGF0ZSBoZXJlIHdoYXQgd2UgYmVsaWV2ZSBpcyBhbHJlYWR5IGltcGxpZWQgYnkgdGhlIEdQTDogaWYKK3RoZSBhbnNpMmtuciBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGFzIGEgc2VwYXJhdGUgc2V0IG9mIHNvdXJjZXMgYW5kIGEKK3NlcGFyYXRlIGV4ZWN1dGFibGUgZmlsZSB3aGljaCBhcmUgYWdncmVnYXRlZCBvbiBhIHN0b3JhZ2UgbWVkaXVtIHRvZ2V0aGVyCit3aXRoIGFub3RoZXIgcHJvZ3JhbSwgdGhpcyBpbiBpdHNlbGYgZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHByb2dyYW0gdW5kZXIKK3RoZSBHUEwsIG5vciBkb2VzIHRoZSBtZXJlIGZhY3QgdGhhdCBzdWNoIGEgcHJvZ3JhbSBvciB0aGUgcHJvY2VkdXJlcyBmb3IKK2NvbnN0cnVjdGluZyBpdCBpbnZva2UgdGhlIGFuc2kya25yIGV4ZWN1dGFibGUgYnJpbmcgYW55IG90aGVyIHBhcnQgb2YgdGhlCitwcm9ncmFtIHVuZGVyIHRoZSBHUEwuCisqLworCisvKgorICogVXNhZ2U6CisJYW5zaTJrbnIgWy0tZmlsZW5hbWUgRklMRU5BTUVdIFtJTlBVVF9GSUxFIFtPVVRQVVRfRklMRV1dCisgKiAtLWZpbGVuYW1lIHByb3ZpZGVzIHRoZSBmaWxlIG5hbWUgZm9yIHRoZSAjbGluZSBkaXJlY3RpdmUgaW4gdGhlIG91dHB1dCwKKyAqIG92ZXJyaWRpbmcgaW5wdXRfZmlsZSAoaWYgcHJlc2VudCkuCisgKiBJZiBubyBpbnB1dF9maWxlIGlzIHN1cHBsaWVkLCBpbnB1dCBpcyByZWFkIGZyb20gc3RkaW4uCisgKiBJZiBubyBvdXRwdXRfZmlsZSBpcyBzdXBwbGllZCwgb3V0cHV0IGdvZXMgdG8gc3Rkb3V0LgorICogVGhlcmUgYXJlIG5vIGVycm9yIG1lc3NhZ2VzLgorICoKKyAqIGFuc2kya25yIHJlY29nbml6ZXMgZnVuY3Rpb24gZGVmaW5pdGlvbnMgYnkgc2VlaW5nIGEgbm9uLWtleXdvcmQKKyAqIGlkZW50aWZpZXIgYXQgdGhlIGxlZnQgbWFyZ2luLCBmb2xsb3dlZCBieSBhIGxlZnQgcGFyZW50aGVzaXMsIHdpdGggYQorICogcmlnaHQgcGFyZW50aGVzaXMgYXMgdGhlIGxhc3QgY2hhcmFjdGVyIG9uIHRoZSBsaW5lLCBhbmQgd2l0aCBhIGxlZnQKKyAqIGJyYWNlIGFzIHRoZSBmaXJzdCB0b2tlbiBvbiB0aGUgZm9sbG93aW5nIGxpbmUgKGlnbm9yaW5nIHBvc3NpYmxlCisgKiBpbnRlcnZlbmluZyBjb21tZW50cyBhbmQvb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMpLCBleGNlcHQgdGhhdCBhIGxpbmUKKyAqIGNvbnNpc3Rpbmcgb2Ygb25seQorICoJaWRlbnRpZmllcjEoaWRlbnRpZmllcjIpCisgKiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiB1bmxlc3MgaWRlbnRpZmllcjIgaXMKKyAqIHRoZSB3b3JkICJ2b2lkIiwgYW5kIGEgbGluZSBjb25zaXN0aW5nIG9mCisgKglpZGVudGlmaWVyMShpZGVudGlmaWVyMiwgPDxhcmJpdHJhcnk+PikKKyAqIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBmdW5jdGlvbiBkZWZpbml0aW9uLgorICogYW5zaTJrbnIgd2lsbCByZWNvZ25pemUgYSBtdWx0aS1saW5lIGhlYWRlciBwcm92aWRlZCB0aGF0IG5vIGludGVydmVuaW5nCisgKiBsaW5lIGVuZHMgd2l0aCBhIGxlZnQgb3IgcmlnaHQgYnJhY2Ugb3IgYSBzZW1pY29sb24uICBUaGVzZSBhbGdvcml0aG1zCisgKiBpZ25vcmUgd2hpdGVzcGFjZSwgY29tbWVudHMsIGFuZCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcywgZXhjZXB0IHRoYXQKKyAqIHRoZSBmdW5jdGlvbiBuYW1lIG11c3QgYmUgdGhlIGZpcnN0IHRoaW5nIG9uIHRoZSBsaW5lLiAgVGhlIGZvbGxvd2luZworICogY29uc3RydWN0cyB3aWxsIGNvbmZ1c2UgaXQ6CisgKgktIEFueSBvdGhlciBjb25zdHJ1Y3QgdGhhdCBzdGFydHMgYXQgdGhlIGxlZnQgbWFyZ2luIGFuZAorICoJICAgIGZvbGxvd3MgdGhlIGFib3ZlIHN5bnRheCAoc3VjaCBhcyBhIG1hY3JvIG9yIGZ1bmN0aW9uIGNhbGwpLgorICoJLSBTb21lIG1hY3JvcyB0aGF0IHRpbmtlciB3aXRoIHRoZSBzeW50YXggb2YgZnVuY3Rpb24gaGVhZGVycy4KKyAqLworCisvKgorICogVGhlIG9yaWdpbmFsIGFuZCBwcmluY2lwYWwgYXV0aG9yIG9mIGFuc2kya25yIGlzIEwuIFBldGVyIERldXRzY2gKKyAqIDxnaG9zdEBhbGFkZGluLmNvbT4uICBPdGhlciBhdXRob3JzIGFyZSBub3RlZCBpbiB0aGUgY2hhbmdlIGhpc3RvcnkKKyAqIHRoYXQgZm9sbG93cyAoaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyKToKKworCWxwZCAyMDAwLTA0LTEyIGJhY2tzIG91dCBFZ2dlcnQncyBjaGFuZ2VzIGJlY2F1c2Ugb2YgYnVnczoKKwktIGNvbmNhdGxpdHMgZGlkbid0IGRlY2xhcmUgdGhlIHR5cGUgb2YgaXRzIGJ1ZmVuZCBhcmd1bWVudDsKKwktIGNvbmNhdGxpdHMgZGlkbid0IHJlY29nbml6ZSB3aGVuIGl0IHdhcyBpbnNpZGUgYSBjb21tZW50OworCS0gc2NhbnN0cmluZyBjb3VsZCBzY2FuIGJhY2t3YXJkIHBhc3QgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nOyB3aGVuCisJLSB0aGUgY2hlY2sgZm9yIFwgKyBuZXdsaW5lIGluIHNjYW5zdHJpbmcgd2FzIHVubmVjZXNzYXJ5LgorCisJMjAwMC0wMy0wNSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CisKKwlBZGQgc3VwcG9ydCBmb3IgY29uY2F0ZW5hdGVkIHN0cmluZyBsaXRlcmFscy4KKwkqIGFuc2kya25yLmMgKGNvbmNhdGxpdHMpOiBOZXcgZGVjbC4KKwkobWFpbik6IEludm9rZSBjb25jYXRsaXRzIHRvIGNvbmNhdGVuYXRlIHN0cmluZyBsaXRlcmFscy4KKwkoc2NhbnN0cmluZyk6IEhhbmRsZSBiYWNrc2xhc2gtbmV3bGluZSBjb3JyZWN0bHkuICBXb3JrIHdpdGgKKwljaGFyYWN0ZXIgY29uc3RhbnRzLiAgRml4IGJ1ZyB3aGVuIHNjYW5uaW5nIGJhY2t3YXJkcyB0aHJvdWdoCisJYmFja3NsYXNoLXF1b3RlLiAgQ2hlY2sgZm9yIHVudGVybWluYXRlZCBzdHJpbmdzLgorCShjb252ZXJ0MSk6IFBhcnNlIGNoYXJhY3RlciBjb25zdGFudHMsIHRvby4KKwkoYXBwZW5kbGluZSwgY29uY2F0bGl0cyk6IE5ldyBmdW5jdGlvbnMuCisJKiBhbnNpMmtuci4xOiBEb2N1bWVudCB0aGlzLgorCisJbHBkIDE5OTktMDgtMTcgYWRkZWQgY29kZSB0byBhbGxvdyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcworCQl3aGVyZXZlciBjb21tZW50cyBhcmUgYWxsb3dlZAorCWxwZCAxOTk5LTA0LTEyIGFkZGVkIG1pbm9yIGZpeGVzIGZyb20gUGF2ZWwgUm9za2luCisJCTxwYXZlbF9yb3NraW5AZ2VvY2l0aWVzLmNvbT4gZm9yIGNsZWFuIGNvbXBpbGF0aW9uIHdpdGgKKwkJZ2NjIC1XIC1XYWxsCisJbHBkIDE5OTktMDMtMjIgYWRkZWQgaGFjayB0byByZWNvZ25pemUgbGluZXMgY29uc2lzdGluZyBvZgorCQlpZGVudGlmaWVyMShpZGVudGlmaWVyMiwgeHh4KSBhcyAqbm90KiBiZWluZyBwcm9jZWR1cmVzCisJbHBkIDE5OTktMDItMDMgbWFkZSBpbmRlbnRhdGlvbiBvZiBwcmVwcm9jZXNzb3IgY29tbWFuZHMgY29uc2lzdGVudAorCWxwZCAxOTk5LTAxLTI4IGZpeGVkIHR3byBidWdzOiBhICcvJyBpbiBhbiBhcmd1bWVudCBsaXN0IGNhdXNlZCBhbgorCQllbmRsZXNzIGxvb3A7IHF1b3RlZCBzdHJpbmdzIHdpdGhpbiBhbiBhcmd1bWVudCBsaXN0CisJCWNvbmZ1c2VkIHRoZSBwYXJzZXIKKwlscGQgMTk5OS0wMS0yNCBhZGRlZCBhIGNoZWNrIGZvciB3cml0ZSBlcnJvcnMgb24gdGhlIG91dHB1dCwKKwkJc3VnZ2VzdGVkIGJ5IEppbSBNZXllcmluZyA8bWV5ZXJpbmdAYXNjZW5kLmNvbT4KKwlscGQgMTk5OC0xMS0wOSBhZGRlZCBmdXJ0aGVyIGhhY2sgdG8gcmVjb2duaXplIGlkZW50aWZpZXIodm9pZCkKKwkJYXMgYmVpbmcgYSBwcm9jZWR1cmUKKwlscGQgMTk5OC0xMC0yMyBhZGRlZCBoYWNrIHRvIHJlY29nbml6ZSBsaW5lcyBjb25zaXN0aW5nIG9mCisJCWlkZW50aWZpZXIxKGlkZW50aWZpZXIyKSBhcyAqbm90KiBiZWluZyBwcm9jZWR1cmVzCisJbHBkIDE5OTctMTItMDggbWFkZSBpbnB1dF9maWxlIG9wdGlvbmFsOyBvbmx5IGNsb3NlcyBpbnB1dCBhbmQvb3IKKwkJb3V0cHV0IGZpbGUgaWYgbm90IHN0ZGluIG9yIHN0ZG91dCByZXNwZWN0aXZlbHk7IHByaW50cworCQl1c2FnZSBtZXNzYWdlIG9uIHN0ZGVyciByYXRoZXIgdGhhbiBzdGRvdXQ7IGFkZHMKKwkJLS1maWxlbmFtZSBzd2l0Y2ggKGNoYW5nZXMgc3VnZ2VzdGVkIGJ5CisJCTxjZWRlckBseXNhdG9yLmxpdS5zZT4pCisJbHBkIDE5OTYtMDEtMjEgYWRkZWQgY29kZSB0byBjb3BlIHdpdGggbm90IEhBVkVfQ09ORklHX0ggYW5kIHdpdGgKKwkJY29tcGlsZXJzIHRoYXQgZG9uJ3QgdW5kZXJzdGFuZCB2b2lkLCBhcyBzdWdnZXN0ZWQgYnkKKwkJVG9tIExhbmUKKwlscGQgMTk5Ni0wMS0xNSBjaGFuZ2VkIHRvIHJlcXVpcmUgdGhhdCB0aGUgZmlyc3Qgbm9uLWNvbW1lbnQgdG9rZW4KKwkJb24gdGhlIGxpbmUgZm9sbG93aW5nIGEgZnVuY3Rpb24gaGVhZGVyIGJlIGEgbGVmdCBicmFjZSwKKwkJdG8gcmVkdWNlIHNlbnNpdGl2aXR5IHRvIG1hY3JvcywgYXMgc3VnZ2VzdGVkIGJ5IFRvbSBMYW5lCisJCTx0Z2xAc3NzLnBnaC5wYS51cz4KKwlscGQgMTk5NS0wNi0yMiByZW1vdmVkICNpZm5kZWZzIHdob3NlIHNvbGUgcHVycG9zZSB3YXMgdG8gZGVmaW5lCisJCXVuZGVmaW5lZCBwcmVwcm9jZXNzb3Igc3ltYm9scyBhcyAwOyBjaGFuZ2VkIGFsbCAjaWZkZWZzCisJCWZvciBjb25maWd1cmF0aW9uIHN5bWJvbHMgdG8gI2lmcworCWxwZCAxOTk1LTA0LTA1IGNoYW5nZWQgY29weXJpZ2h0IG5vdGljZSB0byBtYWtlIGl0IGNsZWFyIHRoYXQKKwkJaW5jbHVkaW5nIGFuc2kya25yIGluIGEgcHJvZ3JhbSBkb2VzIG5vdCBicmluZyB0aGUgZW50aXJlCisJCXByb2dyYW0gdW5kZXIgdGhlIEdQTAorCWxwZCAxOTk0LTEyLTE4IGFkZGVkIGNvbmRpdGlvbmFscyBmb3Igc3lzdGVtcyB3aGVyZSBjdHlwZSBtYWNyb3MKKwkJZG9uJ3QgaGFuZGxlIDgtYml0IGNoYXJhY3RlcnMgcHJvcGVybHksIHN1Z2dlc3RlZCBieQorCQlGcmFuY29pcyBQaW5hcmQgPHBpbmFyZEBpcm8udW1vbnRyZWFsLmNhPjsKKwkJcmVtb3ZlZCAtLXZhcmFyZ3Mgc3dpdGNoICh0aGlzIGlzIG5vdyB0aGUgZGVmYXVsdCkKKwlscGQgMTk5NC0xMC0xMCByZW1vdmVkIENPTkZJR19CUk9LRVRTIGNvbmRpdGlvbmFsCisJbHBkIDE5OTQtMDctMTYgYWRkZWQgc29tZSBjb25kaXRpb25hbHMgdG8gaGVscCBHTlUgYGNvbmZpZ3VyZScsCisJCXN1Z2dlc3RlZCBieSBGcmFuY29pcyBQaW5hcmQgPHBpbmFyZEBpcm8udW1vbnRyZWFsLmNhPjsKKwkJcHJvcGVybHkgZXJhc2UgcHJvdG90eXBlIGFyZ3MgaW4gZnVuY3Rpb24gcGFyYW1ldGVycywKKwkJY29udHJpYnV0ZWQgYnkgSmltIEF2ZXJhIDxqaW1hQG5ldGNvbS5jb20+OworCQljb3JyZWN0IGVycm9yIGluIHdyaXRlYmxhbmtzIChpdCBzaG91bGRuJ3QgZXJhc2UgRU9McykKKwlscGQgMTk4OS14eC14eCBvcmlnaW5hbCB2ZXJzaW9uCisgKi8KKworLyogTW9zdCBvZiB0aGUgY29uZGl0aW9uYWxzIGhlcmUgYXJlIHRvIG1ha2UgYW5zaTJrbnIgd29yayB3aXRoICovCisvKiBvciB3aXRob3V0IHRoZSBHTlUgY29uZmlndXJlIG1hY2hpbmVyeS4gKi8KKworI2lmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2lmIEhBVkVfQ09ORklHX0gKKworLyoKKyAgIEZvciBwcm9wZXJseSBhdXRvY29uZmlndXJpbmcgYW5zaTJrbnIsIHVzZSBBQ19DT05GSUdfSEVBREVSKGNvbmZpZy5oKS4KKyAgIFRoaXMgd2lsbCBkZWZpbmUgSEFWRV9DT05GSUdfSCBhbmQgc28sIGFjdGl2YXRlIHRoZSBmb2xsb3dpbmcgbGluZXMuCisgKi8KKworIyBpZiBTVERDX0hFQURFUlMgfHwgSEFWRV9TVFJJTkdfSAorIyAgaW5jbHVkZSA8c3RyaW5nLmg+CisjIGVsc2UKKyMgIGluY2x1ZGUgPHN0cmluZ3MuaD4KKyMgZW5kaWYKKworI2Vsc2UgLyogbm90IEhBVkVfQ09ORklHX0ggKi8KKworLyogT3RoZXJ3aXNlIGRvIGl0IHRoZSBoYXJkIHdheSAqLworCisjIGlmZGVmIEJTRAorIyAgaW5jbHVkZSA8c3RyaW5ncy5oPgorIyBlbHNlCisjICBpZmRlZiBWTVMKKyAgICBleHRlcm4gaW50IHN0cmxlbigpLCBzdHJuY21wKCk7CisjICBlbHNlCisjICAgaW5jbHVkZSA8c3RyaW5nLmg+CisjICBlbmRpZgorIyBlbmRpZgorCisjZW5kaWYgLyogbm90IEhBVkVfQ09ORklHX0ggKi8KKworI2lmIFNURENfSEVBREVSUworIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbHNlCisvKgorICAgbWFsbG9jIGFuZCBmcmVlIHNob3VsZCBiZSBkZWNsYXJlZCBpbiBzdGRsaWIuaCwKKyAgIGJ1dCBpZiB5b3UndmUgZ290IGEgSyZSIGNvbXBpbGVyLCB0aGV5IHByb2JhYmx5IGFyZW4ndC4KKyAqLworIyBpZmRlZiBNU0RPUworIyAgaW5jbHVkZSA8bWFsbG9jLmg+CisjIGVsc2UKKyMgIGlmZGVmIFZNUworICAgICBleHRlcm4gY2hhciAqbWFsbG9jKCk7CisgICAgIGV4dGVybiB2b2lkIGZyZWUoKTsKKyMgIGVsc2UKKyAgICAgZXh0ZXJuIGNoYXIgKm1hbGxvYygpOworICAgICBleHRlcm4gaW50IGZyZWUoKTsKKyMgIGVuZGlmCisjIGVuZGlmCisKKyNlbmRpZgorCisvKiBEZWZpbmUgTlVMTCAoZm9yICp2ZXJ5KiBvbGQgY29tcGlsZXJzKS4gKi8KKyNpZm5kZWYgTlVMTAorIyBkZWZpbmUgTlVMTCAoMCkKKyNlbmRpZgorCisvKgorICogVGhlIGN0eXBlIG1hY3JvcyBkb24ndCBhbHdheXMgaGFuZGxlIDgtYml0IGNoYXJhY3RlcnMgY29ycmVjdGx5LgorICogQ29tcGVuc2F0ZSBmb3IgdGhpcyBoZXJlLgorICovCisjaWZkZWYgaXNhc2NpaQorIyB1bmRlZiBIQVZFX0lTQVNDSUkJCS8qIGp1c3QgaW4gY2FzZSAqLworIyBkZWZpbmUgSEFWRV9JU0FTQ0lJIDEKKyNlbHNlCisjZW5kaWYKKyNpZiBTVERDX0hFQURFUlMgfHwgIUhBVkVfSVNBU0NJSQorIyBkZWZpbmUgaXNfYXNjaWkoYykgMQorI2Vsc2UKKyMgZGVmaW5lIGlzX2FzY2lpKGMpIGlzYXNjaWkoYykKKyNlbmRpZgorCisjZGVmaW5lIGlzX3NwYWNlKGMpIChpc19hc2NpaShjKSAmJiBpc3NwYWNlKGMpKQorI2RlZmluZSBpc19hbHBoYShjKSAoaXNfYXNjaWkoYykgJiYgaXNhbHBoYShjKSkKKyNkZWZpbmUgaXNfYWxudW0oYykgKGlzX2FzY2lpKGMpICYmIGlzYWxudW0oYykpCisKKy8qIFNjYW5uaW5nIG1hY3JvcyAqLworI2RlZmluZSBpc2lkY2hhcihjaCkgKGlzX2FsbnVtKGNoKSB8fCAoY2gpID09ICdfJykKKyNkZWZpbmUgaXNpZGZpcnN0Y2hhcihjaCkgKGlzX2FscGhhKGNoKSB8fCAoY2gpID09ICdfJykKKworLyogRm9yd2FyZCByZWZlcmVuY2VzICovCitjaGFyICpwcGRpcmZvcndhcmQoKTsKK2NoYXIgKnBwZGlyYmFja3dhcmQoKTsKK2NoYXIgKnNraXBzcGFjZSgpOworY2hhciAqc2NhbnN0cmluZygpOworaW50IHdyaXRlYmxhbmtzKCk7CitpbnQgdGVzdDEoKTsKK2ludCBjb252ZXJ0MSgpOworCisvKiBUaGUgbWFpbiBwcm9ncmFtICovCitpbnQKK21haW4oYXJnYywgYXJndikKKyAgICBpbnQgYXJnYzsKKyAgICBjaGFyICphcmd2W107Cit7CUZJTEUgKmluID0gc3RkaW47CisJRklMRSAqb3V0ID0gc3Rkb3V0OworCWNoYXIgKmZpbGVuYW1lID0gMDsKKwljaGFyICpwcm9ncmFtX25hbWUgPSBhcmd2WzBdOworCWNoYXIgKm91dHB1dF9uYW1lID0gMDsKKyNkZWZpbmUgYnVmc2l6ZSA1MDAwCQkJLyogYXJiaXRyYXJ5IHNpemUgKi8KKwljaGFyICpidWY7CisJY2hhciAqbGluZTsKKwljaGFyICptb3JlOworCWNoYXIgKnVzYWdlID0KKwkgICJVc2FnZTogYW5zaTJrbnIgWy0tZmlsZW5hbWUgRklMRU5BTUVdIFtJTlBVVF9GSUxFIFtPVVRQVVRfRklMRV1dXG4iOworCS8qCisJICogSW4gcHJldmlvdXMgdmVyc2lvbnMsIGFuc2kya25yIHJlY29nbml6ZWQgYSAtLXZhcmFyZ3Mgc3dpdGNoLgorCSAqIElmIHRoaXMgc3dpdGNoIHdhcyBzdXBwbGllZCwgYW5zaTJrbnIgd291bGQgYXR0ZW1wdCB0byBjb252ZXJ0CisJICogYSAuLi4gYXJndW1lbnQgdG8gdmFfYWxpc3QgYW5kIHZhX2RjbDsgaWYgdGhpcyBzd2l0Y2ggd2FzIG5vdAorCSAqIHN1cHBsaWVkLCBhbnNpMmtuciB3b3VsZCBzaW1wbHkgZHJvcCBhbnkgc3VjaCBhcmd1bWVudHMuCisJICogTm93LCBhbnNpMmtuciBhbHdheXMgZG9lcyB0aGlzIGNvbnZlcnNpb24sIGFuZCB3ZSBvbmx5CisJICogY2hlY2sgZm9yIHRoaXMgc3dpdGNoIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorCSAqLworCWludCBjb252ZXJ0X3ZhcmFyZ3MgPSAxOworCWludCBvdXRwdXRfZXJyb3I7CisKKwl3aGlsZSAoIGFyZ2MgPiAxICYmIGFyZ3ZbMV1bMF0gPT0gJy0nICkgeworCSAgaWYgKCAhc3RyY21wKGFyZ3ZbMV0sICItLXZhcmFyZ3MiKSApIHsKKwkgICAgY29udmVydF92YXJhcmdzID0gMTsKKwkgICAgYXJnYy0tOworCSAgICBhcmd2Kys7CisJICAgIGNvbnRpbnVlOworCSAgfQorCSAgaWYgKCAhc3RyY21wKGFyZ3ZbMV0sICItLWZpbGVuYW1lIikgJiYgYXJnYyA+IDIgKSB7CisJICAgIGZpbGVuYW1lID0gYXJndlsyXTsKKwkgICAgYXJnYyAtPSAyOworCSAgICBhcmd2ICs9IDI7CisJICAgIGNvbnRpbnVlOworCSAgfQorCSAgZnByaW50ZihzdGRlcnIsICIlczogVW5yZWNvZ25pemVkIHN3aXRjaDogJXNcbiIsIHByb2dyYW1fbmFtZSwKKwkJICBhcmd2WzFdKTsKKwkgIGZwcmludGYoc3RkZXJyLCB1c2FnZSk7CisJICBleGl0KDEpOworCX0KKwlzd2l0Y2ggKCBhcmdjICkKKwkgICB7CisJZGVmYXVsdDoKKwkJZnByaW50ZihzdGRlcnIsIHVzYWdlKTsKKwkJZXhpdCgwKTsKKwljYXNlIDM6CisJCW91dHB1dF9uYW1lID0gYXJndlsyXTsKKwkJb3V0ID0gZm9wZW4ob3V0cHV0X25hbWUsICJ3Iik7CisJCWlmICggb3V0ID09IE5VTEwgKSB7CisJCSAgZnByaW50ZihzdGRlcnIsICIlczogQ2Fubm90IG9wZW4gb3V0cHV0IGZpbGUgJXNcbiIsCisJCQkgIHByb2dyYW1fbmFtZSwgb3V0cHV0X25hbWUpOworCQkgIGV4aXQoMSk7CisJCX0KKwkJLyogZmFsbHMgdGhyb3VnaCAqLworCWNhc2UgMjoKKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOworCQlpZiAoIGluID09IE5VTEwgKSB7CisJCSAgZnByaW50ZihzdGRlcnIsICIlczogQ2Fubm90IG9wZW4gaW5wdXQgZmlsZSAlc1xuIiwKKwkJCSAgcHJvZ3JhbV9uYW1lLCBhcmd2WzFdKTsKKwkJICBleGl0KDEpOworCQl9CisJCWlmICggZmlsZW5hbWUgPT0gMCApCisJCSAgZmlsZW5hbWUgPSBhcmd2WzFdOworCQkvKiBmYWxscyB0aHJvdWdoICovCisJY2FzZSAxOgorCQlicmVhazsKKwkgICB9CisJaWYgKCBmaWxlbmFtZSApCisJICBmcHJpbnRmKG91dCwgIiNsaW5lIDEgXCIlc1wiXG4iLCBmaWxlbmFtZSk7CisJYnVmID0gbWFsbG9jKGJ1ZnNpemUpOworCWlmICggYnVmID09IE5VTEwgKQorCSAgIHsKKwkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gYWxsb2NhdGUgcmVhZCBidWZmZXIhXG4iKTsKKwkJZXhpdCgxKTsKKwkgICB9CisJbGluZSA9IGJ1ZjsKKwl3aGlsZSAoIGZnZXRzKGxpbmUsICh1bnNpZ25lZCkoYnVmICsgYnVmc2l6ZSAtIGxpbmUpLCBpbikgIT0gTlVMTCApCisJICAgewordGVzdDoJCWxpbmUgKz0gc3RybGVuKGxpbmUpOworCQlzd2l0Y2ggKCB0ZXN0MShidWYpICkKKwkJICAgeworCQljYXNlIDI6CQkJLyogYSBmdW5jdGlvbiBoZWFkZXIgKi8KKwkJCWNvbnZlcnQxKGJ1Ziwgb3V0LCAxLCBjb252ZXJ0X3ZhcmFyZ3MpOworCQkJYnJlYWs7CisJCWNhc2UgMToJCQkvKiBhIGZ1bmN0aW9uICovCisJCQkvKiBDaGVjayBmb3IgYSB7IGF0IHRoZSBzdGFydCBvZiB0aGUgbmV4dCBsaW5lLiAqLworCQkJbW9yZSA9ICsrbGluZTsKK2Y6CQkJaWYgKCBsaW5lID49IGJ1ZiArIChidWZzaXplIC0gMSkgKSAvKiBvdmVyZmxvdyBjaGVjayAqLworCQkJICBnb3RvIHdsOworCQkJaWYgKCBmZ2V0cyhsaW5lLCAodW5zaWduZWQpKGJ1ZiArIGJ1ZnNpemUgLSBsaW5lKSwgaW4pID09IE5VTEwgKQorCQkJICBnb3RvIHdsOworCQkJc3dpdGNoICggKnNraXBzcGFjZShwcGRpcmZvcndhcmQobW9yZSksIDEpICkKKwkJCSAgeworCQkJICBjYXNlICd7JzoKKwkJCSAgICAvKiBEZWZpbml0ZWx5IGEgZnVuY3Rpb24gaGVhZGVyLiAqLworCQkJICAgIGNvbnZlcnQxKGJ1Ziwgb3V0LCAwLCBjb252ZXJ0X3ZhcmFyZ3MpOworCQkJICAgIGZwdXRzKG1vcmUsIG91dCk7CisJCQkgICAgYnJlYWs7CisJCQkgIGNhc2UgMDoKKwkJCSAgICAvKiBUaGUgbmV4dCBsaW5lIHdhcyBibGFuayBvciBhIGNvbW1lbnQ6ICovCisJCQkgICAgLyoga2VlcCBzY2FubmluZyBmb3IgYSBub24tY29tbWVudC4gKi8KKwkJCSAgICBsaW5lICs9IHN0cmxlbihsaW5lKTsKKwkJCSAgICBnb3RvIGY7CisJCQkgIGRlZmF1bHQ6CisJCQkgICAgLyogYnVmIGlzbid0IGEgZnVuY3Rpb24gaGVhZGVyLCBidXQgKi8KKwkJCSAgICAvKiBtb3JlIG1pZ2h0IGJlLiAqLworCQkJICAgIGZwdXRzKGJ1Ziwgb3V0KTsKKwkJCSAgICBzdHJjcHkoYnVmLCBtb3JlKTsKKwkJCSAgICBsaW5lID0gYnVmOworCQkJICAgIGdvdG8gdGVzdDsKKwkJCSAgfQorCQkJYnJlYWs7CisJCWNhc2UgLTE6CQkvKiBtYXliZSB0aGUgc3RhcnQgb2YgYSBmdW5jdGlvbiAqLworCQkJaWYgKCBsaW5lICE9IGJ1ZiArIChidWZzaXplIC0gMSkgKSAvKiBvdmVyZmxvdyBjaGVjayAqLworCQkJICBjb250aW51ZTsKKwkJCS8qIGZhbGxzIHRocm91Z2ggKi8KKwkJZGVmYXVsdDoJCS8qIG5vdCBhIGZ1bmN0aW9uICovCit3bDoJCQlmcHV0cyhidWYsIG91dCk7CisJCQlicmVhazsKKwkJICAgfQorCQlsaW5lID0gYnVmOworCSAgIH0KKwlpZiAoIGxpbmUgIT0gYnVmICkKKwkgIGZwdXRzKGJ1Ziwgb3V0KTsKKwlmcmVlKGJ1Zik7CisJaWYgKCBvdXRwdXRfbmFtZSApIHsKKwkgIG91dHB1dF9lcnJvciA9IGZlcnJvcihvdXQpOworCSAgb3V0cHV0X2Vycm9yIHw9IGZjbG9zZShvdXQpOworCX0gZWxzZSB7CQkvKiBvdXQgPT0gc3Rkb3V0ICovCisJICBmZmx1c2gob3V0KTsKKwkgIG91dHB1dF9lcnJvciA9IGZlcnJvcihvdXQpOworCX0KKwlpZiAoIG91dHB1dF9lcnJvciApIHsKKwkgIGZwcmludGYoc3RkZXJyLCAiJXM6IGVycm9yIHdyaXRpbmcgdG8gJXNcbiIsIHByb2dyYW1fbmFtZSwKKwkJICAob3V0cHV0X25hbWUgPyBvdXRwdXRfbmFtZSA6ICJzdGRvdXQiKSk7CisJICBleGl0KDEpOworCX0KKwlpZiAoIGluICE9IHN0ZGluICkKKwkgIGZjbG9zZShpbik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTa2lwIGZvcndhcmQgb3IgYmFja3dhcmQgb3ZlciBvbmUgb3IgbW9yZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4KKyAqLworY2hhciAqCitwcGRpcmZvcndhcmQocCkKKyAgICBjaGFyICpwOworeworICAgIGZvciAoOyAqcCA9PSAnIyc7ICsrcCkgeworCWZvciAoOyAqcCAhPSAnXHInICYmICpwICE9ICdcbic7ICsrcCkKKwkgICAgaWYgKCpwID09IDApCisJCXJldHVybiBwOworCWlmICgqcCA9PSAnXHInICYmIHBbMV0gPT0gJ1xuJykKKwkgICAgKytwOworICAgIH0KKyAgICByZXR1cm4gcDsKK30KK2NoYXIgKgorcHBkaXJiYWNrd2FyZChwLCBsaW1pdCkKKyAgICBjaGFyICpwOworICAgIGNoYXIgKmxpbWl0OworeworICAgIGNoYXIgKm5wID0gcDsKKworICAgIGZvciAoOzsgcCA9IC0tbnApIHsKKwlpZiAoKm5wID09ICdcbicgJiYgbnBbLTFdID09ICdccicpCisJICAgIC0tbnA7CisJZm9yICg7IG5wID4gbGltaXQgJiYgbnBbLTFdICE9ICdccicgJiYgbnBbLTFdICE9ICdcbic7IC0tbnApCisJICAgIGlmIChucFstMV0gPT0gMCkKKwkJcmV0dXJuIG5wOworCWlmICgqbnAgIT0gJyMnKQorCSAgICByZXR1cm4gcDsKKyAgICB9Cit9CisKKy8qCisgKiBTa2lwIG92ZXIgd2hpdGVzcGFjZSwgY29tbWVudHMsIGFuZCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcywKKyAqIGluIGVpdGhlciBkaXJlY3Rpb24uCisgKi8KK2NoYXIgKgorc2tpcHNwYWNlKHAsIGRpcikKKyAgICBjaGFyICpwOworICAgIGludCBkaXI7CQkJLyogMSBmb3IgZm9yd2FyZCwgLTEgZm9yIGJhY2t3YXJkICovCit7CisgICAgZm9yICggOyA7ICkgeworCXdoaWxlICggaXNfc3BhY2UoKnApICkKKwkgICAgcCArPSBkaXI7CisJaWYgKCAhKCpwID09ICcvJyAmJiBwW2Rpcl0gPT0gJyonKSApCisJICAgIGJyZWFrOworCXAgKz0gZGlyOyAgcCArPSBkaXI7CisJd2hpbGUgKCAhKCpwID09ICcqJyAmJiBwW2Rpcl0gPT0gJy8nKSApIHsKKwkgICAgaWYgKCAqcCA9PSAwICkKKwkJcmV0dXJuIHA7CS8qIG11bHRpLWxpbmUgY29tbWVudD8/ICovCisJICAgIHAgKz0gZGlyOworCX0KKwlwICs9IGRpcjsgIHAgKz0gZGlyOworICAgIH0KKyAgICByZXR1cm4gcDsKK30KKworLyogU2NhbiBvdmVyIGEgcXVvdGVkIHN0cmluZywgaW4gZWl0aGVyIGRpcmVjdGlvbi4gKi8KK2NoYXIgKgorc2NhbnN0cmluZyhwLCBkaXIpCisgICAgY2hhciAqcDsKKyAgICBpbnQgZGlyOworeworICAgIGZvciAocCArPSBkaXI7IDsgcCArPSBkaXIpCisJaWYgKCpwID09ICciJyAmJiBwWy1kaXJdICE9ICdcXCcpCisJICAgIHJldHVybiBwICsgZGlyOworfQorCisvKgorICogV3JpdGUgYmxhbmtzIG92ZXIgcGFydCBvZiBhIHN0cmluZy4KKyAqIERvbid0IG92ZXJ3cml0ZSBlbmQtb2YtbGluZSBjaGFyYWN0ZXJzLgorICovCitpbnQKK3dyaXRlYmxhbmtzKHN0YXJ0LCBlbmQpCisgICAgY2hhciAqc3RhcnQ7CisgICAgY2hhciAqZW5kOworewljaGFyICpwOworCWZvciAoIHAgPSBzdGFydDsgcCA8IGVuZDsgcCsrICkKKwkgIGlmICggKnAgIT0gJ1xyJyAmJiAqcCAhPSAnXG4nICkKKwkgICAgKnAgPSAnICc7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUZXN0IHdoZXRoZXIgdGhlIHN0cmluZyBpbiBidWYgaXMgYSBmdW5jdGlvbiBkZWZpbml0aW9uLgorICogVGhlIHN0cmluZyBtYXkgY29udGFpbiBhbmQvb3IgZW5kIHdpdGggYSBuZXdsaW5lLgorICogUmV0dXJuIGFzIGZvbGxvd3M6CisgKgkwIC0gZGVmaW5pdGVseSBub3QgYSBmdW5jdGlvbiBkZWZpbml0aW9uOworICoJMSAtIGRlZmluaXRlbHkgYSBmdW5jdGlvbiBkZWZpbml0aW9uOworICoJMiAtIGRlZmluaXRlbHkgYSBmdW5jdGlvbiBwcm90b3R5cGUgKE5PVCBVU0VEKTsKKyAqCS0xIC0gbWF5IGJlIHRoZSBiZWdpbm5pbmcgb2YgYSBmdW5jdGlvbiBkZWZpbml0aW9uLAorICoJCWFwcGVuZCBhbm90aGVyIGxpbmUgYW5kIGxvb2sgYWdhaW4uCisgKiBUaGUgcmVhc29uIHdlIGRvbid0IGF0dGVtcHQgdG8gY29udmVydCBmdW5jdGlvbiBwcm90b3R5cGVzIGlzIHRoYXQKKyAqIEdob3N0c2NyaXB0J3MgZGVjbGFyYXRpb24tZ2VuZXJhdGluZyBtYWNyb3MgbG9vayB0b28gbXVjaCBsaWtlCisgKiBwcm90b3R5cGVzLCBhbmQgY29uZnVzZSB0aGUgYWxnb3JpdGhtcy4KKyAqLworaW50Cit0ZXN0MShidWYpCisgICAgY2hhciAqYnVmOworewljaGFyICpwID0gYnVmOworCWNoYXIgKmJlbmQ7CisJY2hhciAqZW5kZm47CisJaW50IGNvbnRpbjsKKworCWlmICggIWlzaWRmaXJzdGNoYXIoKnApICkKKwkgIHJldHVybiAwOwkJLyogbm8gbmFtZSBhdCBsZWZ0IG1hcmdpbiAqLworCWJlbmQgPSBza2lwc3BhY2UocHBkaXJiYWNrd2FyZChidWYgKyBzdHJsZW4oYnVmKSAtIDEsIGJ1ZiksIC0xKTsKKwlzd2l0Y2ggKCAqYmVuZCApCisJICAgeworCSAgIGNhc2UgJzsnOiBjb250aW4gPSAwIC8qMiovOyBicmVhazsKKwkgICBjYXNlICcpJzogY29udGluID0gMTsgYnJlYWs7CisJICAgY2FzZSAneyc6IHJldHVybiAwOwkJLyogbm90IGEgZnVuY3Rpb24gKi8KKwkgICBjYXNlICd9JzogcmV0dXJuIDA7CQkvKiBub3QgYSBmdW5jdGlvbiAqLworCSAgIGRlZmF1bHQ6IGNvbnRpbiA9IC0xOworCSAgIH0KKwl3aGlsZSAoIGlzaWRjaGFyKCpwKSApCisJICBwKys7CisJZW5kZm4gPSBwOworCXAgPSBza2lwc3BhY2UocCwgMSk7CisJaWYgKCAqcCsrICE9ICcoJyApCisJICByZXR1cm4gMDsJCS8qIG5vdCBhIGZ1bmN0aW9uICovCisJcCA9IHNraXBzcGFjZShwLCAxKTsKKwlpZiAoICpwID09ICcpJyApCisJICByZXR1cm4gMDsJCS8qIG5vIHBhcmFtZXRlcnMgKi8KKwkvKiBDaGVjayB0aGF0IHRoZSBhcHBhcmVudCBmdW5jdGlvbiBuYW1lIGlzbid0IGEga2V5d29yZC4gKi8KKwkvKiBXZSBvbmx5IG5lZWQgdG8gY2hlY2sgZm9yIGtleXdvcmRzIHRoYXQgY291bGQgYmUgZm9sbG93ZWQgKi8KKwkvKiBieSBhIGxlZnQgcGFyZW50aGVzaXMgKHdoaWNoLCB1bmZvcnR1bmF0ZWx5LCBpcyBtb3N0IG9mIHRoZW0pLiAqLworCSAgIHsJc3RhdGljIGNoYXIgKndvcmRzW10gPQorCQkgICB7CSJhc20iLCAiYXV0byIsICJjYXNlIiwgImNoYXIiLCAiY29uc3QiLCAiZG91YmxlIiwKKwkJCSJleHRlcm4iLCAiZmxvYXQiLCAiZm9yIiwgImlmIiwgImludCIsICJsb25nIiwKKwkJCSJyZWdpc3RlciIsICJyZXR1cm4iLCAic2hvcnQiLCAic2lnbmVkIiwgInNpemVvZiIsCisJCQkic3RhdGljIiwgInN3aXRjaCIsICJ0eXBlZGVmIiwgInVuc2lnbmVkIiwKKwkJCSJ2b2lkIiwgInZvbGF0aWxlIiwgIndoaWxlIiwgMAorCQkgICB9OworCQljaGFyICoqa2V5ID0gd29yZHM7CisJCWNoYXIgKmtwOworCQl1bnNpZ25lZCBsZW4gPSBlbmRmbiAtIGJ1ZjsKKworCQl3aGlsZSAoIChrcCA9ICprZXkpICE9IDAgKQorCQkgICB7CWlmICggc3RybGVuKGtwKSA9PSBsZW4gJiYgIXN0cm5jbXAoa3AsIGJ1ZiwgbGVuKSApCisJCQkgIHJldHVybiAwOwkvKiBuYW1lIGlzIGEga2V5d29yZCAqLworCQkJa2V5Kys7CisJCSAgIH0KKwkgICB9CisJICAgeworCSAgICAgICBjaGFyICppZCA9IHA7CisJICAgICAgIGludCBsZW47CisJICAgICAgIC8qCisJCSogQ2hlY2sgZm9yIGlkZW50aWZpZXIxKGlkZW50aWZpZXIyKSBhbmQgbm90CisJCSogaWRlbnRpZmllcjEodm9pZCksIG9yIGlkZW50aWZpZXIxKGlkZW50aWZpZXIyLCB4eHh4KS4KKwkJKi8KKworCSAgICAgICB3aGlsZSAoIGlzaWRjaGFyKCpwKSApCisJCSAgIHArKzsKKwkgICAgICAgbGVuID0gcCAtIGlkOworCSAgICAgICBwID0gc2tpcHNwYWNlKHAsIDEpOworCSAgICAgICBpZiAoKnAgPT0gJywnIHx8CisJCSAgICgqcCA9PSAnKScgJiYgKGxlbiAhPSA0IHx8IHN0cm5jbXAoaWQsICJ2b2lkIiwgNCkpKQorCQkgICApCisJCSAgIHJldHVybiAwOwkvKiBub3QgYSBmdW5jdGlvbiAqLworCSAgIH0KKwkvKgorCSAqIElmIHRoZSBsYXN0IHNpZ25pZmljYW50IGNoYXJhY3RlciB3YXMgYSApLCB3ZSBuZWVkIHRvIGNvdW50CisJICogcGFyZW50aGVzZXMsIGJlY2F1c2UgaXQgbWlnaHQgYmUgcGFydCBvZiBhIGZvcm1hbCBwYXJhbWV0ZXIKKwkgKiB0aGF0IGlzIGEgcHJvY2VkdXJlLgorCSAqLworCWlmIChjb250aW4gPiAwKSB7CisJICAgIGludCBsZXZlbCA9IDA7CisKKwkgICAgZm9yIChwID0gc2tpcHNwYWNlKGJ1ZiwgMSk7ICpwOyBwID0gc2tpcHNwYWNlKHAgKyAxLCAxKSkKKwkJbGV2ZWwgKz0gKCpwID09ICcoJyA/IDEgOiAqcCA9PSAnKScgPyAtMSA6IDApOworCSAgICBpZiAobGV2ZWwgPiAwKQorCQljb250aW4gPSAtMTsKKwl9CisJcmV0dXJuIGNvbnRpbjsKK30KKworLyogQ29udmVydCBhIHJlY29nbml6ZWQgZnVuY3Rpb24gZGVmaW5pdGlvbiBvciBoZWFkZXIgdG8gSyZSIHN5bnRheC4gKi8KK2ludAorY29udmVydDEoYnVmLCBvdXQsIGhlYWRlciwgY29udmVydF92YXJhcmdzKQorICAgIGNoYXIgKmJ1ZjsKKyAgICBGSUxFICpvdXQ7CisgICAgaW50IGhlYWRlcjsJCQkvKiBCb29sZWFuICovCisgICAgaW50IGNvbnZlcnRfdmFyYXJnczsJLyogQm9vbGVhbiAqLworewljaGFyICplbmRmbjsKKwljaGFyICpwOworCS8qCisJICogVGhlIGJyZWFrcyB0YWJsZSBjb250YWlucyBwb2ludGVycyB0byB0aGUgYmVnaW5uaW5nIGFuZCBlbmQKKwkgKiBvZiBlYWNoIGFyZ3VtZW50LgorCSAqLworCWNoYXIgKipicmVha3M7CisJdW5zaWduZWQgbnVtX2JyZWFrcyA9IDI7CS8qIGZvciB0ZXN0aW5nICovCisJY2hhciAqKmJ0b3A7CisJY2hhciAqKmJwOworCWNoYXIgKiphcDsKKwljaGFyICp2YXJhcmcgPSAwOworCisJLyogUHJlLUFOU0kgaW1wbGVtZW50YXRpb25zIGRvbid0IGFncmVlIG9uIHdoZXRoZXIgc3RyY2hyICovCisJLyogaXMgY2FsbGVkIHN0cmNociBvciBpbmRleCwgc28gd2Ugb3Blbi1jb2RlIGl0IGhlcmUuICovCisJZm9yICggZW5kZm4gPSBidWY7ICooZW5kZm4rKykgIT0gJygnOyApCisJICA7Cit0b3A6CXAgPSBlbmRmbjsKKwlicmVha3MgPSAoY2hhciAqKiltYWxsb2Moc2l6ZW9mKGNoYXIgKikgKiBudW1fYnJlYWtzICogMik7CisJaWYgKCBicmVha3MgPT0gTlVMTCApCisJICAgewkvKiBDb3VsZG4ndCBhbGxvY2F0ZSBicmVhayB0YWJsZSwgZ2l2ZSB1cCAqLworCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBhbGxvY2F0ZSBicmVhayB0YWJsZSFcbiIpOworCQlmcHV0cyhidWYsIG91dCk7CisJCXJldHVybiAtMTsKKwkgICB9CisJYnRvcCA9IGJyZWFrcyArIG51bV9icmVha3MgKiAyIC0gMjsKKwlicCA9IGJyZWFrczsKKwkvKiBQYXJzZSB0aGUgYXJndW1lbnQgbGlzdCAqLworCWRvCisJICAgewlpbnQgbGV2ZWwgPSAwOworCQljaGFyICpscCA9IE5VTEw7CisJCWNoYXIgKnJwID0gTlVMTDsKKwkJY2hhciAqZW5kID0gTlVMTDsKKworCQlpZiAoIGJwID49IGJ0b3AgKQorCQkgICB7CS8qIEZpbGxlZCB1cCBicmVhayB0YWJsZS4gKi8KKwkJCS8qIEFsbG9jYXRlIGEgYmlnZ2VyIG9uZSBhbmQgc3RhcnQgb3Zlci4gKi8KKwkJCWZyZWUoKGNoYXIgKilicmVha3MpOworCQkJbnVtX2JyZWFrcyA8PD0gMTsKKwkJCWdvdG8gdG9wOworCQkgICB9CisJCSpicCsrID0gcDsKKwkJLyogRmluZCB0aGUgZW5kIG9mIHRoZSBhcmd1bWVudCAqLworCQlmb3IgKCA7IGVuZCA9PSBOVUxMOyBwKysgKQorCQkgICB7CXN3aXRjaCgqcCkKKwkJCSAgIHsKKwkJCSAgIGNhc2UgJywnOgorCQkJCWlmICggIWxldmVsICkgZW5kID0gcDsKKwkJCQlicmVhazsKKwkJCSAgIGNhc2UgJygnOgorCQkJCWlmICggIWxldmVsICkgbHAgPSBwOworCQkJCWxldmVsKys7CisJCQkJYnJlYWs7CisJCQkgICBjYXNlICcpJzoKKwkJCQlpZiAoIC0tbGV2ZWwgPCAwICkgZW5kID0gcDsKKwkJCQllbHNlIHJwID0gcDsKKwkJCQlicmVhazsKKwkJCSAgIGNhc2UgJy8nOgorCQkJCWlmIChwWzFdID09ICcqJykKKwkJCQkgICAgcCA9IHNraXBzcGFjZShwLCAxKSAtIDE7CisJCQkJYnJlYWs7CisJCQkgICBjYXNlICciJzoKKwkJCSAgICAgICBwID0gc2NhbnN0cmluZyhwLCAxKSAtIDE7CisJCQkgICAgICAgYnJlYWs7CisJCQkgICBkZWZhdWx0OgorCQkJCTsKKwkJCSAgIH0KKwkJICAgfQorCQkvKiBFcmFzZSBhbnkgZW1iZWRkZWQgcHJvdG90eXBlIHBhcmFtZXRlcnMuICovCisJCWlmICggbHAgJiYgcnAgKQorCQkgIHdyaXRlYmxhbmtzKGxwICsgMSwgcnApOworCQlwLS07CQkJLyogYmFjayB1cCBvdmVyIHRlcm1pbmF0b3IgKi8KKwkJLyogRmluZCB0aGUgbmFtZSBiZWluZyBkZWNsYXJlZC4gKi8KKwkJLyogVGhpcyBpcyBjb21wbGljYXRlZCBiZWNhdXNlIG9mIHByb2NlZHVyZSBhbmQgKi8KKwkJLyogYXJyYXkgbW9kaWZpZXJzLiAqLworCQlmb3IgKCA7IDsgKQorCQkgICB7CXAgPSBza2lwc3BhY2UocCAtIDEsIC0xKTsKKwkJCXN3aXRjaCAoICpwICkKKwkJCSAgIHsKKwkJCSAgIGNhc2UgJ10nOgkvKiBza2lwIGFycmF5IGRpbWVuc2lvbihzKSAqLworCQkJICAgY2FzZSAnKSc6CS8qIHNraXAgcHJvY2VkdXJlIGFyZ3MgT1IgbmFtZSAqLworCQkJICAgewlpbnQgbGV2ZWwgPSAxOworCQkJCXdoaWxlICggbGV2ZWwgKQorCQkJCSBzd2l0Y2ggKCAqLS1wICkKKwkJCQkgICB7CisJCQkJICAgY2FzZSAnXSc6IGNhc2UgJyknOgorCQkJCSAgICAgICBsZXZlbCsrOworCQkJCSAgICAgICBicmVhazsKKwkJCQkgICBjYXNlICdbJzogY2FzZSAnKCc6CisJCQkJICAgICAgIGxldmVsLS07CisJCQkJICAgICAgIGJyZWFrOworCQkJCSAgIGNhc2UgJy8nOgorCQkJCSAgICAgICBpZiAocCA+IGJ1ZiAmJiBwWy0xXSA9PSAnKicpCisJCQkJCSAgIHAgPSBza2lwc3BhY2UocCwgLTEpICsgMTsKKwkJCQkgICAgICAgYnJlYWs7CisJCQkJICAgY2FzZSAnIic6CisJCQkJICAgICAgIHAgPSBzY2Fuc3RyaW5nKHAsIC0xKSArIDE7CisJCQkJICAgICAgIGJyZWFrOworCQkJCSAgIGRlZmF1bHQ6IDsKKwkJCQkgICB9CisJCQkgICB9CisJCQkJaWYgKCAqcCA9PSAnKCcgJiYgKnNraXBzcGFjZShwICsgMSwgMSkgPT0gJyonICkKKwkJCQkgICB7CS8qIFdlIGZvdW5kIHRoZSBuYW1lIGJlaW5nIGRlY2xhcmVkICovCisJCQkJCXdoaWxlICggIWlzaWRmaXJzdGNoYXIoKnApICkKKwkJCQkJICBwID0gc2tpcHNwYWNlKHAsIDEpICsgMTsKKwkJCQkJZ290byBmb3VuZDsKKwkJCQkgICB9CisJCQkJYnJlYWs7CisJCQkgICBkZWZhdWx0OgorCQkJCWdvdG8gZm91bmQ7CisJCQkgICB9CisJCSAgIH0KK2ZvdW5kOgkJaWYgKCAqcCA9PSAnLicgJiYgcFstMV0gPT0gJy4nICYmIHBbLTJdID09ICcuJyApCisJCSAgewlpZiAoIGNvbnZlcnRfdmFyYXJncyApCisJCQkgIHsJKmJwKysgPSAidmFfYWxpc3QiOworCQkJCXZhcmFyZyA9IHAtMjsKKwkJCSAgfQorCQkJZWxzZQorCQkJICB7CXArKzsKKwkJCQlpZiAoIGJwID09IGJyZWFrcyArIDEgKQkvKiBzb2xlIGFyZ3VtZW50ICovCisJCQkJICB3cml0ZWJsYW5rcyhicmVha3NbMF0sIHApOworCQkJCWVsc2UKKwkJCQkgIHdyaXRlYmxhbmtzKGJwWy0xXSAtIDEsIHApOworCQkJCWJwLS07CisJCQkgIH0KKwkJICAgfQorCQllbHNlCisJCSAgIHsJd2hpbGUgKCBpc2lkY2hhcigqcCkgKSBwLS07CisJCQkqYnArKyA9IHArMTsKKwkJICAgfQorCQlwID0gZW5kOworCSAgIH0KKwl3aGlsZSAoICpwKysgPT0gJywnICk7CisJKmJwID0gcDsKKwkvKiBNYWtlIGEgc3BlY2lhbCBjaGVjayBmb3IgJ3ZvaWQnIGFyZ2xpc3QgKi8KKwlpZiAoIGJwID09IGJyZWFrcysyICkKKwkgICB7CXAgPSBza2lwc3BhY2UoYnJlYWtzWzBdLCAxKTsKKwkJaWYgKCAhc3RybmNtcChwLCAidm9pZCIsIDQpICkKKwkJICAgewlwID0gc2tpcHNwYWNlKHArNCwgMSk7CisJCQlpZiAoIHAgPT0gYnJlYWtzWzJdIC0gMSApCisJCQkgICB7CWJwID0gYnJlYWtzOwkvKiB5dXAsIHByZXRlbmQgYXJnbGlzdCBpcyBlbXB0eSAqLworCQkJCXdyaXRlYmxhbmtzKGJyZWFrc1swXSwgcCArIDEpOworCQkJICAgfQorCQkgICB9CisJICAgfQorCS8qIFB1dCBvdXQgdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIGxlZnQgcGFyZW50aGVzaXMuICovCisJcCA9IGJ1ZjsKKwl3aGlsZSAoIHAgIT0gZW5kZm4gKSBwdXRjKCpwLCBvdXQpLCBwKys7CisJLyogUHV0IG91dCB0aGUgZGVjbGFyYXRpb24uICovCisJaWYgKCBoZWFkZXIgKQorCSAgewlmcHV0cygiKTsiLCBvdXQpOworCQlmb3IgKCBwID0gYnJlYWtzWzBdOyAqcDsgcCsrICkKKwkJICBpZiAoICpwID09ICdccicgfHwgKnAgPT0gJ1xuJyApCisJCSAgICBwdXRjKCpwLCBvdXQpOworCSAgfQorCWVsc2UKKwkgIHsJZm9yICggYXAgPSBicmVha3MrMTsgYXAgPCBicDsgYXAgKz0gMiApCisJCSAgewlwID0gKmFwOworCQkJd2hpbGUgKCBpc2lkY2hhcigqcCkgKQorCQkJICBwdXRjKCpwLCBvdXQpLCBwKys7CisJCQlpZiAoIGFwIDwgYnAgLSAxICkKKwkJCSAgZnB1dHMoIiwgIiwgb3V0KTsKKwkJICB9CisJCWZwdXRzKCIpICAiLCBvdXQpOworCQkvKiBQdXQgb3V0IHRoZSBhcmd1bWVudCBkZWNsYXJhdGlvbnMgKi8KKwkJZm9yICggYXAgPSBicmVha3MrMjsgYXAgPD0gYnA7IGFwICs9IDIgKQorCQkgICgqYXApWy0xXSA9ICc7JzsKKwkJaWYgKCB2YXJhcmcgIT0gMCApCisJCSAgewkqdmFyYXJnID0gMDsKKwkJCWZwdXRzKGJyZWFrc1swXSwgb3V0KTsJCS8qIGFueSBwcmlvciBhcmdzICovCisJCQlmcHV0cygidmFfZGNsIiwgb3V0KTsJCS8qIHRoZSBmaW5hbCBhcmcgKi8KKwkJCWZwdXRzKGJwWzBdLCBvdXQpOworCQkgIH0KKwkJZWxzZQorCQkgIGZwdXRzKGJyZWFrc1swXSwgb3V0KTsKKwkgIH0KKwlmcmVlKChjaGFyICopYnJlYWtzKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9tYWtlLTEuMTEvY29tcGlsZSBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvY29tcGlsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMDA5NmE3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9jb21waWxlCkBAIC0wLDAgKzEsMTQzIEBACisjISAvYmluL3NoCisjIFdyYXBwZXIgZm9yIGNvbXBpbGVycyB3aGljaCBkbyBub3QgdW5kZXJzdGFuZCBgLWMgLW8nLgorCitzY3JpcHR2ZXJzaW9uPTIwMDktMTAtMDYuMjA7ICMgVVRDCisKKyMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA5ICBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgV3JpdHRlbiBieSBUb20gVHJvbWV5IDx0cm9tZXlAY3lnbnVzLmNvbT4uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBUaGlzIGZpbGUgaXMgbWFpbnRhaW5lZCBpbiBBdXRvbWFrZSwgcGxlYXNlIHJlcG9ydAorIyBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4gb3Igc2VuZCBwYXRjaGVzIHRvCisjIDxhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmc+LgorCitjYXNlICQxIGluCisgICcnKQorICAgICBlY2hvICIkMDogTm8gY29tbWFuZC4gIFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCisgICAgIGV4aXQgMTsKKyAgICAgOzsKKyAgLWggfCAtLWgqKQorICAgIGNhdCA8PFxFT0YKK1VzYWdlOiBjb21waWxlIFstLWhlbHBdIFstLXZlcnNpb25dIFBST0dSQU0gW0FSR1NdCisKK1dyYXBwZXIgZm9yIGNvbXBpbGVycyB3aGljaCBkbyBub3QgdW5kZXJzdGFuZCBgLWMgLW8nLgorUmVtb3ZlIGAtbyBkZXN0Lm8nIGZyb20gQVJHUywgcnVuIFBST0dSQU0gd2l0aCB0aGUgcmVtYWluaW5nCithcmd1bWVudHMsIGFuZCByZW5hbWUgdGhlIG91dHB1dCBhcyBleHBlY3RlZC4KKworSWYgeW91IGFyZSB0cnlpbmcgdG8gYnVpbGQgYSB3aG9sZSBwYWNrYWdlIHRoaXMgaXMgbm90IHRoZQorcmlnaHQgc2NyaXB0IHRvIHJ1bjogcGxlYXNlIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGZpbGUgYElOU1RBTEwnLgorCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LgorRU9GCisgICAgZXhpdCAkPworICAgIDs7CisgIC12IHwgLS12KikKKyAgICBlY2hvICJjb21waWxlICRzY3JpcHR2ZXJzaW9uIgorICAgIGV4aXQgJD8KKyAgICA7OworZXNhYworCitvZmlsZT0KK2NmaWxlPQorZWF0PQorCitmb3IgYXJnCitkbworICBpZiB0ZXN0IC1uICIkZWF0IjsgdGhlbgorICAgIGVhdD0KKyAgZWxzZQorICAgIGNhc2UgJDEgaW4KKyAgICAgIC1vKQorCSMgY29uZmlndXJlIG1pZ2h0IGNob29zZSB0byBydW4gY29tcGlsZSBhcyBgY29tcGlsZSBjYyAtbyBmb28gZm9vLmMnLgorCSMgU28gd2Ugc3RyaXAgYC1vIGFyZycgb25seSBpZiBhcmcgaXMgYW4gb2JqZWN0LgorCWVhdD0xCisJY2FzZSAkMiBpbgorCSAgKi5vIHwgKi5vYmopCisJICAgIG9maWxlPSQyCisJICAgIDs7CisJICAqKQorCSAgICBzZXQgeCAiJEAiIC1vICIkMiIKKwkgICAgc2hpZnQKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgICouYykKKwljZmlsZT0kMQorCXNldCB4ICIkQCIgIiQxIgorCXNoaWZ0CisJOzsKKyAgICAgICopCisJc2V0IHggIiRAIiAiJDEiCisJc2hpZnQKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgc2hpZnQKK2RvbmUKKworaWYgdGVzdCAteiAiJG9maWxlIiB8fCB0ZXN0IC16ICIkY2ZpbGUiOyB0aGVuCisgICMgSWYgbm8gYC1vJyBvcHRpb24gd2FzIHNlZW4gdGhlbiB3ZSBtaWdodCBoYXZlIGJlZW4gaW52b2tlZCBmcm9tIGEKKyAgIyBwYXR0ZXJuIHJ1bGUgd2hlcmUgd2UgZG9uJ3QgbmVlZCBvbmUuICBUaGF0IGlzIG9rIC0tIHRoaXMgaXMgYQorICAjIG5vcm1hbCBjb21waWxhdGlvbiB0aGF0IHRoZSBsb3NpbmcgY29tcGlsZXIgY2FuIGhhbmRsZS4gIElmIG5vCisgICMgYC5jJyBmaWxlIHdhcyBzZWVuIHRoZW4gd2UgYXJlIHByb2JhYmx5IGxpbmtpbmcuICBUaGF0IGlzIGFsc28KKyAgIyBvay4KKyAgZXhlYyAiJEAiCitmaQorCisjIE5hbWUgb2YgZmlsZSB3ZSBleHBlY3QgY29tcGlsZXIgdG8gY3JlYXRlLgorY29maWxlPWBlY2hvICIkY2ZpbGUiIHwgc2VkICdzfF4uKltcXC9dfHw7IHN8XlthLXpBLVpdOnx8OyBzL1wuYyQvLm8vJ2AKKworIyBDcmVhdGUgdGhlIGxvY2sgZGlyZWN0b3J5LgorIyBOb3RlOiB1c2UgYFsvXFw6Li1dJyBoZXJlIHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0IHVzZSB0aGUgc2FtZSBuYW1lCisjIHRoYXQgd2UgYXJlIHVzaW5nIGZvciB0aGUgLm8gZmlsZS4gIEFsc28sIGJhc2UgdGhlIG5hbWUgb24gdGhlIGV4cGVjdGVkCisjIG9iamVjdCBmaWxlIG5hbWUsIHNpbmNlIHRoYXQgaXMgd2hhdCBtYXR0ZXJzIHdpdGggYSBwYXJhbGxlbCBidWlsZC4KK2xvY2tkaXI9YGVjaG8gIiRjb2ZpbGUiIHwgc2VkIC1lICdzfFsvXFw6Li1dfF98ZydgLmQKK3doaWxlIHRydWU7IGRvCisgIGlmIG1rZGlyICIkbG9ja2RpciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgYnJlYWsKKyAgZmkKKyAgc2xlZXAgMQorZG9uZQorIyBGSVhNRTogcmFjZSBjb25kaXRpb24gaGVyZSBpZiB1c2VyIGtpbGxzIGJldHdlZW4gbWtkaXIgYW5kIHRyYXAuCit0cmFwICJybWRpciAnJGxvY2tkaXInOyBleGl0IDEiIDEgMiAxNQorCisjIFJ1biB0aGUgY29tcGlsZS4KKyIkQCIKK3JldD0kPworCitpZiB0ZXN0IC1mICIkY29maWxlIjsgdGhlbgorICB0ZXN0ICIkY29maWxlIiA9ICIkb2ZpbGUiIHx8IG12ICIkY29maWxlIiAiJG9maWxlIgorZWxpZiB0ZXN0IC1mICIke2NvZmlsZX1iaiI7IHRoZW4KKyAgdGVzdCAiJHtjb2ZpbGV9YmoiID0gIiRvZmlsZSIgfHwgbXYgIiR7Y29maWxlfWJqIiAiJG9maWxlIgorZmkKKworcm1kaXIgIiRsb2NrZGlyIgorZXhpdCAkcmV0CisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL2NvbmZpZy1tbC5pbiBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvY29uZmlnLW1sLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNDk3YWQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL2NvbmZpZy1tbC5pbgpAQCAtMCwwICsxLDg3NiBAQAorIyBDb25maWd1cmUgZnJhZ21lbnQgaW52b2tlZCBpbiB0aGUgcG9zdC10YXJnZXQgc2VjdGlvbiBmb3Igc3ViZGlycworIyB3YW50aW5nIG11bHRpbGliIHN1cHBvcnQuCisjCisjIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwKKyMgMjAwNSwgMjAwNiwgMjAwNyAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisjIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjCisjIFBsZWFzZSByZXBvcnQgYnVncyB0byA8Z2NjLWJ1Z3NAZ251Lm9yZz4KKyMgYW5kIHNlbmQgcGF0Y2hlcyB0byA8Z2NjLXBhdGNoZXNAZ251Lm9yZz4uCisKKyMgSXQgaXMgYWR2aXNhYmxlIHRvIHN1cHBvcnQgYSBmZXcgLS1lbmFibGUvLS1kaXNhYmxlIG9wdGlvbnMgdG8gbGV0IHRoZQorIyB1c2VyIHNlbGVjdCB3aGljaCBsaWJyYXJpZXMgcy9oZSByZWFsbHkgd2FudHMuCisjCisjIFN1YmRpcmVjdG9yaWVzIHdpc2hpbmcgdG8gdXNlIG11bHRpbGliIHNob3VsZCBwdXQgdGhlIGZvbGxvd2luZyBsaW5lcworIyBpbiB0aGUgInBvc3QtdGFyZ2V0IiBzZWN0aW9uIG9mIGNvbmZpZ3VyZS5pbi4KKyMKKyMgaWYgWyAiJHtzcmNkaXJ9IiA9ICIuIiBdIDsgdGhlbgorIyAgIGlmIFsgIiR7d2l0aF90YXJnZXRfc3ViZGlyfSIgIT0gIi4iIF0gOyB0aGVuCisjICAgICAuICR7d2l0aF9tdWx0aXNyY3RvcH0uLi8uLi9jb25maWctbWwuaW4KKyMgICBlbHNlCisjICAgICAuICR7d2l0aF9tdWx0aXNyY3RvcH0uLi9jb25maWctbWwuaW4KKyMgICBmaQorIyBlbHNlCisjICAgLiAke3NyY2Rpcn0vLi4vY29uZmlnLW1sLmluCisjIGZpCisjCisjCisjIFRoaW5ncyBhcmUgY29tcGxpY2F0ZWQgYmVjYXVzZSA2IHNlcGFyYXRlIGNhc2VzIG11c3QgYmUgaGFuZGxlZDoKKyMgMiAobmF0aXZlLCBjcm9zcykgeCAzIChhYnNvbHV0ZS1wYXRoLCByZWxhdGl2ZS1ub3QtZG90LCBkb3QpID0gNi4KKyMKKyMgc3JjZGlyPS4gaXMgc3BlY2lhbC4gIEl0IG11c3QgaGFuZGxlIG1ha2UgcHJvZ3JhbXMgdGhhdCBkb24ndCBoYW5kbGUgVlBBVEguCisjIFRvIGltcGxlbWVudCB0aGlzLCBhIHN5bWxpbmsgdHJlZSBpcyBidWlsdCBmb3IgZWFjaCBsaWJyYXJ5IGFuZCBmb3IgZWFjaAorIyBtdWx0aWxpYiBzdWJkaXIuCisjCisjIFRoZSBidWlsZCB0cmVlIGlzIGxheWVkIG91dCBhcworIworIyAuLworIyAgIG5ld2xpYgorIyAgIG02ODAyMC8KKyMgICAgICAgICAgbmV3bGliCisjICAgICAgICAgIG02ODg4MS8KKyMgICAgICAgICAgICAgICAgIG5ld2xpYgorIworIyBUaGUgbmljZSBmZWF0dXJlIGFib3V0IHRoaXMgYXJyYW5nZW1lbnQgaXMgdGhhdCBpbnRlci1saWJyYXJ5IHJlZmVyZW5jZXMKKyMgaW4gdGhlIGJ1aWxkIHRyZWUgd29yayB3aXRob3V0IGhhdmluZyB0byBjYXJlIHdoZXJlIHlvdSBhcmUuICBOb3RlIHRoYXQKKyMgaW50ZXItbGlicmFyeSByZWZlcmVuY2VzIGFsc28gd29yayBpbiB0aGUgc291cmNlIHRyZWUgYmVjYXVzZSBzeW1saW5rIHRyZWVzCisjIGFyZSBidWlsdCB3aGVuIHNyY2Rpcj0uCisjCisjIFVuZm9ydHVuYXRlbHksIHRyeWluZyB0byBhY2Nlc3MgdGhlIGxpYnJhcmllcyBpbiB0aGUgYnVpbGQgdHJlZSByZXF1aXJlcworIyB0aGUgdXNlciB0byBtYW51YWxseSBjaG9vc2Ugd2hpY2ggbGlicmFyeSB0byB1c2UgYXMgR0NDIHdvbid0IGJlIGFibGUgdG8KKyMgZmluZCB0aGUgcmlnaHQgb25lLiAgVGhpcyBpcyB2aWV3ZWQgYXMgdGhlIGxlc3NlciBvZiB0d28gZXZpbHMuCisjCisjIENvbmZpZ3VyZSB2YXJpYWJsZXM6CisjICR7d2l0aF90YXJnZXRfc3ViZGlyfSA9ICIuIiBmb3IgbmF0aXZlLCBvciAke3RhcmdldF9hbGlhc30gZm9yIGNyb3NzLgorIyBTZXQgYnkgdG9wIGxldmVsIE1ha2VmaWxlLgorIyAke3dpdGhfbXVsdGlzcmN0b3B9ID0gaG93IG1hbnkgbGV2ZWxzIG9mIG11bHRpbGlicyB0aGVyZSBhcmUgaW4gdGhlIHNvdXJjZQorIyB0cmVlLiAgSXQgZXhpc3RzIHRvIGhhbmRsZSB0aGUgY2FzZSBvZiBjb25maWd1cmluZyBpbiB0aGUgc291cmNlIHRyZWU6CisjICR7c3JjZGlyfSBpcyBub3QgY29uc3RhbnQuCisjICR7d2l0aF9tdWx0aXN1YmRpcn0gPSBuYW1lIG9mIG11bHRpbGliIHN1YmRpcmVjdG9yeSAoZWc6IG02ODAyMC9tNjg4ODEpLgorIworIyBNYWtlZmlsZSB2YXJpYWJsZXM6CisjIE1VTFRJU1JDVE9QID0gbnVtYmVyIG9mIG11bHRpbGliIGxldmVscyBpbiBzb3VyY2UgdHJlZSAoKzEgaWYgY3Jvc3MpCisjIChGSVhNRTogbm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IHRoYW4gJHt3aXRoX211bHRpc3JjdG9wfS4gIENoZWNrIG91dC4pLgorIyBNVUxUSUJVSUxEVE9QID0gbnVtYmVyIG9mIG11bHRpbGliIGxldmVscyBpbiBidWlsZCB0cmVlCisjIE1VTFRJRElSUyA9IGxpc3Qgb2YgbXVsdGlsaWIgc3ViZGlycyAoZWc6IG02ODAwMCBtNjgwMjAgLi4uKQorIyAob25seSBkZWZpbmVkIGluIGVhY2ggbGlicmFyeSdzIG1haW4gTWFrZWZpbGUpLgorIyBNVUxUSVNVQkRJUiA9IGluc3RhbGxlZCBzdWJkaXJlY3RvcnkgbmFtZSB3aXRoIGxlYWRpbmcgJy8nIChlZzogL202ODAwMCkKKyMgKG9ubHkgZGVmaW5lZCBpbiBlYWNoIG11bHRpbGliIHN1YmRpcikuCisKKyMgRklYTUU6IE11bHRpbGliIGlzIGN1cnJlbnRseSBkaXNhYmxlZCBieSBkZWZhdWx0IGZvciBldmVyeXRoaW5nIG90aGVyIHRoYW4KKyMgbmV3bGliLiAgSXQgaXMgdXAgdG8gZWFjaCB0YXJnZXQgdG8gdHVybiBvbiBtdWx0aWxpYiBzdXBwb3J0IGZvciB0aGUgb3RoZXIKKyMgbGlicmFyaWVzIGFzIGRlc2lyZWQuCisKKyMgQXV0b2NvbmYgaW5jb21pbmcgdmFyaWFibGVzOgorIyBzcmNkaXIsIGhvc3QsIGFjX2NvbmZpZ3VyZV9hcmdzCisjCisjIFdlICpjb3VsZCogZmlndXJlIHNyY2RpciBhbmQgaG9zdCBvdXQsIGJ1dCB3ZSdkIGhhdmUgdG8gZG8gd29yayB0aGF0CisjIG91ciBjYWxsZXIgaGFzIGFscmVhZHkgZG9uZSB0byBmaWd1cmUgdGhlbSBvdXQgYW5kIHJlcXVpcmluZyB0aGVzZSB0d28KKyMgc2VlbXMgcmVhc29uYWJsZS4KKyMgTm90ZSB0aGF0IGBob3N0JyBpbiB0aGlzIGNhc2UgaXMgR0NDJ3MgYHRhcmdldCcuICBUYXJnZXQgbGlicmFyaWVzIGFyZQorIyBjb25maWd1cmVkIGZvciBhIHBhcnRpY3VsYXIgaG9zdC4KKworTWFrZWZpbGU9JHthY19maWxlLU1ha2VmaWxlfQorbWxfY29uZmlnX3NoZWxsPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CittbF9yZWFsc3JjZGlyPSR7c3JjZGlyfQorCisjIFNjYW4gYWxsIHRoZSBhcmd1bWVudHMgYW5kIHNldCBhbGwgdGhlIG9uZXMgd2UgbmVlZC4KKworbWxfdmVyYm9zZT0tLXZlcmJvc2UKK2ZvciBvcHRpb24gaW4gJHthY19jb25maWd1cmVfYXJnc30KK2RvCisgICMgc3RyaXAgc2luZ2xlIHF1b3RlcyBzdXJyb3VuZGluZyBpbmRpdmlkdWFsIG9wdGlvbnMKKyAgY2FzZSAkb3B0aW9uIGluCisgIFwnKlwnKSBldmFsIG9wdGlvbj0kb3B0aW9uIDs7CisgIGVzYWMKKworICBjYXNlICRvcHRpb24gaW4KKyAgLS0qKSA7OworICAtKikgb3B0aW9uPS0kb3B0aW9uIDs7CisgIGVzYWMKKworICBjYXNlICRvcHRpb24gaW4KKyAgLS0qPSopCisJb3B0YXJnPWBlY2hvICRvcHRpb24gfCBzZWQgLWUgJ3MvXltePV0qPS8vJ2AKKwk7OworICBlc2FjCisKKyAgY2FzZSAkb3B0aW9uIGluCisgIC0tZGlzYWJsZS0qKQorCWVuYWJsZW9wdD1gZWNobyAke29wdGlvbn0gfCBzZWQgJ3M6Xi0tZGlzYWJsZS06ZW5hYmxlXzo7czotOl86ZydgCisJZXZhbCAkZW5hYmxlb3B0PW5vCisJOzsKKyAgLS1lbmFibGUtKikKKwljYXNlICIkb3B0aW9uIiBpbgorCSo9KikJOzsKKwkqKQlvcHRhcmc9eWVzIDs7CisJZXNhYworCWVuYWJsZW9wdD1gZWNobyAke29wdGlvbn0gfCBzZWQgJ3M6Xi0tOjo7czo9LiokOjo7czotOl86ZydgCisJIyBlbmFibGVfc2hhcmVkIGFuZCBlbmFibGVfc3RhdGljIGFyZSBoYW5kbGVkIGJ5IGNvbmZpZ3VyZS4KKwkjIERvbid0IHVuZG8gaXRzIHdvcmsuCisJY2FzZSAkZW5hYmxlb3B0IGluCisJZW5hYmxlX3NoYXJlZCB8IGVuYWJsZV9zdGF0aWMpIDs7CisJKikgZXZhbCAkZW5hYmxlb3B0PSIkb3B0YXJnIiA7OworCWVzYWMKKwk7OworICAtLW5vcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpb24pCisJbWxfbm9yZWN1cnNpb249eWVzCisJOzsKKyAgLS1zaWxlbnQgfCAtLXNpbCogfCAtLXF1aWV0IHwgLS1xKikKKwltbF92ZXJib3NlPS0tc2lsZW50CisJOzsKKyAgLS12ZXJib3NlIHwgLS12IHwgLS12ZXJiKikKKwltbF92ZXJib3NlPS0tdmVyYm9zZQorCTs7CisgIC0td2l0aC0qKQorCWNhc2UgIiRvcHRpb24iIGluCisJKj0qKQk7OworCSopCW9wdGFyZz15ZXMgOzsKKwllc2FjCisJd2l0aG9wdD1gZWNobyAke29wdGlvbn0gfCBzZWQgJ3M6Xi0tOjo7czo9LiokOjo7czotOl86ZydgCisJZXZhbCAkd2l0aG9wdD0iJG9wdGFyZyIKKwk7OworICAtLXdpdGhvdXQtKikKKwl3aXRob3B0PWBlY2hvICR7b3B0aW9ufSB8IHNlZCAnczpeLS06OjtzOm91dDo6O3M6LTpfOmcnYAorCWV2YWwgJHdpdGhvcHQ9bm8KKwk7OworICBlc2FjCitkb25lCisKKyMgT25seSBkbyB0aGlzIGlmIC0tZW5hYmxlLW11bHRpbGliLgoraWYgWyAiJHtlbmFibGVfbXVsdGlsaWJ9IiA9IHllcyBdOyB0aGVuCisKKyMgQ29tcHV0ZSB3aGV0aGVyIHRoaXMgaXMgdGhlIGxpYnJhcnkncyB0b3AgbGV2ZWwgZGlyZWN0b3J5CisjIChpZTogbm90IGEgbXVsdGlsaWIgc3ViZGlyZWN0b3J5LCBhbmQgbm90IGEgc3ViZGlyZWN0b3J5IGxpa2UgbmV3bGliL3NyYykuCisjICR7d2l0aF9tdWx0aXN1YmRpcn0gdGVsbHMgdXMgd2UncmUgaW4gdGhlIHJpZ2h0IGJyYW5jaCwgYnV0IHdlIGNvdWxkIGJlCisjIGluIGEgc3ViZGlyIG9mIHRoYXQuCisjID8/PyBUaGUgcHJldmlvdXMgdmVyc2lvbiBjb3VsZCB2b2lkIHRoaXMgdGVzdCBieSBzZXBhcmF0aW5nIHRoZSBwcm9jZXNzIGludG8KKyMgdHdvIGZpbGVzOiBvbmUgdGhhdCBvbmx5IHRoZSBsaWJyYXJ5J3MgdG9wbGV2ZWwgY29uZmlndXJlLmluIHJhbiAodG8KKyMgY29uZmlndXJlIHRoZSBtdWx0aWxpYiBzdWJkaXJzKSwgYW5kIGFub3RoZXIgdGhhdCBhbGwgY29uZmlndXJlLmluJ3MgcmFuIHRvCisjIHVwZGF0ZSB0aGUgTWFrZWZpbGUuICBJdCBzZWVtZWQgcmVhc29uYWJsZSB0byBjb2xsYXBzZSBhbGwgbXVsdGlsaWIgc3VwcG9ydAorIyBpbnRvIG9uZSBmaWxlLCBidXQgaXQgZG9lcyBsZWF2ZSB1cyB3aXRoIGhhdmluZyB0byBwZXJmb3JtIHRoaXMgdGVzdC4KK21sX3RvcGxldmVsX3A9bm8KK2lmIFsgLXogIiR7d2l0aF9tdWx0aXN1YmRpcn0iIF07IHRoZW4KKyAgaWYgWyAiJHtzcmNkaXJ9IiA9ICIuIiBdOyB0aGVuCisgICAgIyBVc2UgJHttbF9yZWFsc3JjZGlyfSBpbnN0ZWFkIG9mICR7c3JjZGlyfSBoZXJlIHRvIGFjY291bnQgZm9yICR7c3ViZGlyfS4KKyAgICAjICR7d2l0aF90YXJnZXRfc3ViZGlyfSA9ICIuIiBmb3IgbmF0aXZlLCBvdGhlcndpc2UgdGFyZ2V0IGFsaWFzLgorICAgIGlmIFsgIiR7d2l0aF90YXJnZXRfc3ViZGlyfSIgPSAiLiIgXTsgdGhlbgorICAgICAgaWYgWyAtZiAke21sX3JlYWxzcmNkaXJ9Ly4uL2NvbmZpZy1tbC5pbiBdOyB0aGVuCisJbWxfdG9wbGV2ZWxfcD15ZXMKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgaWYgWyAtZiAke21sX3JlYWxzcmNkaXJ9Ly4uLy4uL2NvbmZpZy1tbC5pbiBdOyB0aGVuCisJbWxfdG9wbGV2ZWxfcD15ZXMKKyAgICAgIGZpCisgICAgZmkKKyAgZWxzZQorICAgICMgVXNlICR7bWxfcmVhbHNyY2Rpcn0gaW5zdGVhZCBvZiAke3NyY2Rpcn0gaGVyZSB0byBhY2NvdW50IGZvciAke3N1YmRpcn0uCisgICAgaWYgWyAtZiAke21sX3JlYWxzcmNkaXJ9Ly4uL2NvbmZpZy1tbC5pbiBdOyB0aGVuCisgICAgICBtbF90b3BsZXZlbF9wPXllcworICAgIGZpCisgIGZpCitmaQorCisjIElmIHRoaXMgaXMgdGhlIGxpYnJhcnkncyB0b3AgbGV2ZWwgZGlyZWN0b3J5LCBzZXQgbXVsdGlkaXJzIHRvIHRoZQorIyBtdWx0aWxpYiBzdWJkaXJzIHRvIHN1cHBvcnQuICBUaGlzIGxpdmVzIGF0IHRoZSB0b3AgYmVjYXVzZSB3ZSBuZWVkCisjIGBtdWx0aWRpcnMnIHNldCByaWdodCBhd2F5LgorCitpZiBbICIke21sX3RvcGxldmVsX3B9IiA9IHllcyBdOyB0aGVuCisKK211bHRpZGlycz0KK2ZvciBpIGluIGAke0NDLWdjY30gLS1wcmludC1tdWx0aS1saWIgMj4vZGV2L251bGxgOyBkbworICBkaXI9YGVjaG8gJGkgfCBzZWQgLWUgJ3MvOy4qJC8vJ2AKKyAgaWYgWyAiJHtkaXJ9IiA9ICIuIiBdOyB0aGVuCisgICAgdHJ1ZQorICBlbHNlCisgICAgaWYgWyAteiAiJHttdWx0aWRpcnN9IiBdOyB0aGVuCisgICAgICBtdWx0aWRpcnM9IiR7ZGlyfSIKKyAgICBlbHNlCisgICAgICBtdWx0aWRpcnM9IiR7bXVsdGlkaXJzfSAke2Rpcn0iCisgICAgZmkKKyAgZmkKK2RvbmUKKworIyBUYXJnZXQgbGlicmFyaWVzIGFyZSBjb25maWd1cmVkIGZvciB0aGUgaG9zdCB0aGV5IHJ1biBvbiwgc28gd2UgY2hlY2sKKyMgJGhvc3QgaGVyZSwgbm90ICR0YXJnZXQuCisKK2Nhc2UgIiR7aG9zdH0iIGluCithcmMtKi1lbGYqKQorCWlmIFsgeCRlbmFibGVfYmllbmRpYW4gIT0geHllcyBdCisJdGhlbgorCSAgb2xkX211bHRpZGlycz0ke211bHRpZGlyc30KKwkgIG11bHRpZGlycz0iIgorCSAgZm9yIHggaW4gJHtvbGRfbXVsdGlkaXJzfTsgZG8KKwkgICAgY2FzZSAiJHt4fSIgaW4KKwkgICAgICAqYmUqKSA6IDs7CisJICAgICAgKikgbXVsdGlkaXJzPSIke211bHRpZGlyc30gJHt4fSIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWZpCisJOzsKK2FybS0qLSopCisJaWYgWyB4IiRlbmFibGVfZnB1IiA9IHhubyBdCisJdGhlbgorCSAgb2xkX211bHRpZGlycz0ke211bHRpZGlyc30KKwkgIG11bHRpZGlycz0iIgorCSAgZm9yIHggaW4gJHtvbGRfbXVsdGlkaXJzfTsgZG8KKwkgICAgY2FzZSAiJHt4fSIgaW4KKwkgICAgICAqZnB1KikgOiA7OworCSAgICAgICopIG11bHRpZGlycz0iJHttdWx0aWRpcnN9ICR7eH0iIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwlmaQorCWlmIFsgeCIkZW5hYmxlXzI2Yml0IiA9IHhubyBdCisJdGhlbgorCSAgb2xkX211bHRpZGlycz0ke211bHRpZGlyc30KKwkgIG11bHRpZGlycz0iIgorCSAgZm9yIHggaW4gJHtvbGRfbXVsdGlkaXJzfTsgZG8KKwkgICAgY2FzZSAiJHt4fSIgaW4KKwkgICAgICAqMjZiaXQqKSA6IDs7CisJICAgICAgKikgbXVsdGlkaXJzPSIke211bHRpZGlyc30gJHt4fSIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWZpCisJaWYgWyB4IiRlbmFibGVfdW5kZXJzY29yZSIgPSB4bm8gXQorCXRoZW4KKwkgIG9sZF9tdWx0aWRpcnM9JHttdWx0aWRpcnN9CisJICBtdWx0aWRpcnM9IiIKKwkgIGZvciB4IGluICR7b2xkX211bHRpZGlyc307IGRvCisJICAgIGNhc2UgIiR7eH0iIGluCisJICAgICAgKnVuZGVyKikgOiA7OworCSAgICAgICopIG11bHRpZGlycz0iJHttdWx0aWRpcnN9ICR7eH0iIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwlmaQorCWlmIFsgeCIkZW5hYmxlX2ludGVyd29yayIgPSB4bm8gXQorCXRoZW4KKwkgIG9sZF9tdWx0aWRpcnM9JHttdWx0aWRpcnN9CisJICBtdWx0aWRpcnM9IiIKKwkgIGZvciB4IGluICR7b2xkX211bHRpZGlyc307IGRvCisJICAgIGNhc2UgIiR7eH0iIGluCisJICAgICAgKmludGVyd29yayopIDogOzsKKwkgICAgICAqKSBtdWx0aWRpcnM9IiR7bXVsdGlkaXJzfSAke3h9IiA7OworCSAgICBlc2FjCisJICBkb25lCisJZmkKKwlpZiBbIHgkZW5hYmxlX2JpZW5kaWFuID0geG5vIF0KKwl0aGVuCisJICBvbGRfbXVsdGlkaXJzPSIke211bHRpZGlyc30iCisJICBtdWx0aWRpcnM9IiIKKwkgIGZvciB4IGluICR7b2xkX211bHRpZGlyc307IGRvCisJICAgIGNhc2UgIiR4IiBpbgorCSAgICAgICpsZSogKSA6IDs7CisJICAgICAgKmJlKiApIDogOzsKKwkgICAgICAqKSBtdWx0aWRpcnM9IiR7bXVsdGlkaXJzfSAke3h9IiA7OworCSAgICBlc2FjCisJICBkb25lCisJZmkKKwlpZiBbIHgiJGVuYWJsZV9ub2ZtdWx0IiA9IHhubyBdCisJdGhlbgorCSAgb2xkX211bHRpZGlycz0iJHttdWx0aWRpcnN9IgorCSAgbXVsdGlkaXJzPSIiCisJICBmb3IgeCBpbiAke29sZF9tdWx0aWRpcnN9OyBkbworCSAgICBjYXNlICIkeCIgaW4KKwkgICAgICAqbm9mbXVsdCogKSA6IDs7CisJICAgICAgKikgbXVsdGlkaXJzPSIke211bHRpZGlyc30gJHt4fSIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWZpCisJOzsKK202OCotKi0qKQorCWlmIFsgeCRlbmFibGVfc29mdGZsb2F0ID0geG5vIF0KKwl0aGVuCisJICBvbGRfbXVsdGlkaXJzPSIke211bHRpZGlyc30iCisJICBtdWx0aWRpcnM9IiIKKwkgIGZvciB4IGluICR7b2xkX211bHRpZGlyc307IGRvCisJICAgIGNhc2UgIiR4IiBpbgorCSAgICAgICpzb2Z0LWZsb2F0KiApIDogOzsKKwkgICAgICAqKSBtdWx0aWRpcnM9IiR7bXVsdGlkaXJzfSAke3h9IiA7OworCSAgICBlc2FjCisJICBkb25lCisJZmkKKwlpZiBbIHgkZW5hYmxlX202ODg4MSA9IHhubyBdCisJdGhlbgorCSAgb2xkX211bHRpZGlycz0iJHttdWx0aWRpcnN9IgorCSAgbXVsdGlkaXJzPSIiCisJICBmb3IgeCBpbiAke29sZF9tdWx0aWRpcnN9OyBkbworCSAgICBjYXNlICIkeCIgaW4KKwkgICAgICAqbTY4ODgxKiApIDogOzsKKwkgICAgICAqKSBtdWx0aWRpcnM9IiR7bXVsdGlkaXJzfSAke3h9IiA7OworCSAgICBlc2FjCisJICBkb25lCisJZmkKKwlpZiBbIHgkZW5hYmxlX202ODAwMCA9IHhubyBdCisJdGhlbgorCSAgb2xkX211bHRpZGlycz0iJHttdWx0aWRpcnN9IgorCSAgbXVsdGlkaXJzPSIiCisJICBmb3IgeCBpbiAke29sZF9tdWx0aWRpcnN9OyBkbworCSAgICBjYXNlICIkeCIgaW4KKwkgICAgICAqbTY4MDAwKiApIDogOzsKKwkgICAgICAqKSBtdWx0aWRpcnM9IiR7bXVsdGlkaXJzfSAke3h9IiA7OworCSAgICBlc2FjCisJICBkb25lCisJZmkKKwlpZiBbIHgkZW5hYmxlX202ODAyMCA9IHhubyBdCisJdGhlbgorCSAgb2xkX211bHRpZGlycz0iJHttdWx0aWRpcnN9IgorCSAgbXVsdGlkaXJzPSIiCisJICBmb3IgeCBpbiAke29sZF9tdWx0aWRpcnN9OyBkbworCSAgICBjYXNlICIkeCIgaW4KKwkgICAgICAqbTY4MDIwKiApIDogOzsKKwkgICAgICAqKSBtdWx0aWRpcnM9IiR7bXVsdGlkaXJzfSAke3h9IiA7OworCSAgICBlc2FjCisJICBkb25lCisJZmkKKwk7OworbWlwcyotKi0qKQorCWlmIFsgeCRlbmFibGVfc2luZ2xlX2Zsb2F0ID0geG5vIF0KKwl0aGVuCisJICBvbGRfbXVsdGlkaXJzPSIke211bHRpZGlyc30iCisJICBtdWx0aWRpcnM9IiIKKwkgIGZvciB4IGluICR7b2xkX211bHRpZGlyc307IGRvCisJICAgIGNhc2UgIiR4IiBpbgorCSAgICAgICpzaW5nbGUqICkgOiA7OworCSAgICAgICopIG11bHRpZGlycz0iJHttdWx0aWRpcnN9ICR7eH0iIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwlmaQorCWlmIFsgeCRlbmFibGVfYmllbmRpYW4gPSB4bm8gXQorCXRoZW4KKwkgIG9sZF9tdWx0aWRpcnM9IiR7bXVsdGlkaXJzfSIKKwkgIG11bHRpZGlycz0iIgorCSAgZm9yIHggaW4gJHtvbGRfbXVsdGlkaXJzfTsgZG8KKwkgICAgY2FzZSAiJHgiIGluCisJICAgICAgKmVsKiApIDogOzsKKwkgICAgICAqZWIqICkgOiA7OworCSAgICAgICopIG11bHRpZGlycz0iJHttdWx0aWRpcnN9ICR7eH0iIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwlmaQorCWlmIFsgeCRlbmFibGVfc29mdGZsb2F0ID0geG5vIF0KKwl0aGVuCisJICBvbGRfbXVsdGlkaXJzPSIke211bHRpZGlyc30iCisJICBtdWx0aWRpcnM9IiIKKwkgIGZvciB4IGluICR7b2xkX211bHRpZGlyc307IGRvCisJICAgIGNhc2UgIiR4IiBpbgorCSAgICAgICpzb2Z0LWZsb2F0KiApIDogOzsKKwkgICAgICAqKSBtdWx0aWRpcnM9IiR7bXVsdGlkaXJzfSAke3h9IiA7OworCSAgICBlc2FjCisJICBkb25lCisJZmkKKwk7OworcG93ZXJwYyotKi0qIHwgcnM2MDAwKi0qLSopCisJaWYgWyB4JGVuYWJsZV9haXg2NCA9IHhubyBdCisJdGhlbgorCSAgb2xkX211bHRpZGlycz0iJHttdWx0aWRpcnN9IgorCSAgbXVsdGlkaXJzPSIiCisJICBmb3IgeCBpbiAke29sZF9tdWx0aWRpcnN9OyBkbworCSAgICBjYXNlICIkeCIgaW4KKwkgICAgICAqcHBjNjQqICkgOiA7OworCSAgICAgICopIG11bHRpZGlycz0iJHttdWx0aWRpcnN9ICR7eH0iIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwlmaQorCWlmIFsgeCRlbmFibGVfcHRocmVhZCA9IHhubyBdCisJdGhlbgorCSAgb2xkX211bHRpZGlycz0iJHttdWx0aWRpcnN9IgorCSAgbXVsdGlkaXJzPSIiCisJICBmb3IgeCBpbiAke29sZF9tdWx0aWRpcnN9OyBkbworCSAgICBjYXNlICIkeCIgaW4KKwkgICAgICAqcHRocmVhZCogKSA6IDs7CisJICAgICAgKikgbXVsdGlkaXJzPSIke211bHRpZGlyc30gJHt4fSIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWZpCisJaWYgWyB4JGVuYWJsZV9zb2Z0ZmxvYXQgPSB4bm8gXQorCXRoZW4KKwkgIG9sZF9tdWx0aWRpcnM9IiR7bXVsdGlkaXJzfSIKKwkgIG11bHRpZGlycz0iIgorCSAgZm9yIHggaW4gJHtvbGRfbXVsdGlkaXJzfTsgZG8KKwkgICAgY2FzZSAiJHgiIGluCisJICAgICAgKnNvZnQtZmxvYXQqICkgOiA7OworCSAgICAgICopIG11bHRpZGlycz0iJHttdWx0aWRpcnN9ICR7eH0iIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwlmaQorCWlmIFsgeCRlbmFibGVfcG93ZXJjcHUgPSB4bm8gXQorCXRoZW4KKwkgIG9sZF9tdWx0aWRpcnM9IiR7bXVsdGlkaXJzfSIKKwkgIG11bHRpZGlycz0iIgorCSAgZm9yIHggaW4gJHtvbGRfbXVsdGlkaXJzfTsgZG8KKwkgICAgY2FzZSAiJHgiIGluCisJICAgICAgcG93ZXIgfCAqL3Bvd2VyIHwgKi9wb3dlci8qICkgOiA7OworCSAgICAgICopIG11bHRpZGlycz0iJHttdWx0aWRpcnN9ICR7eH0iIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwlmaQorCWlmIFsgeCRlbmFibGVfcG93ZXJwY2NwdSA9IHhubyBdCisJdGhlbgorCSAgb2xkX211bHRpZGlycz0iJHttdWx0aWRpcnN9IgorCSAgbXVsdGlkaXJzPSIiCisJICBmb3IgeCBpbiAke29sZF9tdWx0aWRpcnN9OyBkbworCSAgICBjYXNlICIkeCIgaW4KKwkgICAgICAqcG93ZXJwYyogKSA6IDs7CisJICAgICAgKikgbXVsdGlkaXJzPSIke211bHRpZGlyc30gJHt4fSIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWZpCisJaWYgWyB4JGVuYWJsZV9wb3dlcnBjb3MgPSB4bm8gXQorCXRoZW4KKwkgIG9sZF9tdWx0aWRpcnM9IiR7bXVsdGlkaXJzfSIKKwkgIG11bHRpZGlycz0iIgorCSAgZm9yIHggaW4gJHtvbGRfbXVsdGlkaXJzfTsgZG8KKwkgICAgY2FzZSAiJHgiIGluCisJICAgICAgKm1jYWxsLWxpbnV4KiB8ICptY2FsbC1zb2xhcmlzKiApIDogOzsKKwkgICAgICAqKSBtdWx0aWRpcnM9IiR7bXVsdGlkaXJzfSAke3h9IiA7OworCSAgICBlc2FjCisJICBkb25lCisJZmkKKwlpZiBbIHgkZW5hYmxlX2JpZW5kaWFuID0geG5vIF0KKwl0aGVuCisJICBvbGRfbXVsdGlkaXJzPSIke211bHRpZGlyc30iCisJICBtdWx0aWRpcnM9IiIKKwkgIGZvciB4IGluICR7b2xkX211bHRpZGlyc307IGRvCisJICAgIGNhc2UgIiR4IiBpbgorCSAgICAgICptbGl0dGxlKiB8ICptYmlnKiApIDogOzsKKwkgICAgICAqKSBtdWx0aWRpcnM9IiR7bXVsdGlkaXJzfSAke3h9IiA7OworCSAgICBlc2FjCisJICBkb25lCisJZmkKKwlpZiBbIHgkZW5hYmxlX3N5c3YgPSB4bm8gXQorCXRoZW4KKwkgIG9sZF9tdWx0aWRpcnM9IiR7bXVsdGlkaXJzfSIKKwkgIG11bHRpZGlycz0iIgorCSAgZm9yIHggaW4gJHtvbGRfbXVsdGlkaXJzfTsgZG8KKwkgICAgY2FzZSAiJHgiIGluCisJICAgICAgKm1jYWxsLXN5c3YqICkgOiA7OworCSAgICAgICopIG11bHRpZGlycz0iJHttdWx0aWRpcnN9ICR7eH0iIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwlmaQorCTs7Citlc2FjCisKKyMgUmVtb3ZlIGV4dHJhbmVvdXMgYmxhbmtzIGZyb20gbXVsdGlkaXJzLgorIyBUZXN0cyBsaWtlIGBpZiBbIC1uICIkbXVsdGlkaXJzIiBdJyByZXF1aXJlIGl0LgorbXVsdGlkaXJzPWBlY2hvICIkbXVsdGlkaXJzIiB8IHNlZCAtZSAncy9eWyBdWyBdKi8vJyAtZSAncy9bIF1bIF0qJC8vJyAtZSAncy9bIF1bIF0qLyAvZydgCisKKyMgQWRkIGNvZGUgdG8gbGlicmFyeSdzIHRvcCBsZXZlbCBtYWtlZmlsZSB0byBoYW5kbGUgYnVpbGRpbmcgdGhlIG11bHRpbGliCisjIHN1YmRpcnMuCisKK2NhdCA+IE11bHRpLnRlbSA8PFxFT0YKKworUFdEX0NPTU1BTkQ9JCR7UFdEQ01ELXB3ZH0KKworIyBGSVhNRTogVGhlcmUgc2hvdWxkIGJlIGFuIEAtc2lnbiBpbiBmcm9udCBvZiB0aGUgYGlmJy4KKyMgTGVhdmUgb3V0IHVudGlsIHRoaXMgaXMgdGVzdGVkIGEgYml0IG1vcmUuCittdWx0aS1kbzoKKwlpZiBbIC16ICIkKE1VTFRJRElSUykiIF07IHRoZW4gXAorCSAgdHJ1ZTsgXAorCWVsc2UgXAorCSAgcm9vdHByZT1gJHtQV0RfQ09NTUFORH1gLzsgZXhwb3J0IHJvb3RwcmU7IFwKKwkgIHNyY3Jvb3RwcmU9YGNkICQoc3JjZGlyKTsgJHtQV0RfQ09NTUFORH1gLzsgZXhwb3J0IHNyY3Jvb3RwcmU7IFwKKwkgIGxpYj1gZWNobyAiJCR7cm9vdHByZX0iIHwgc2VkIC1lICdzLF4uKi9cKFteL11bXi9dKlwpLyQkLFwxLCdgOyBcCisJICBjb21waWxlcj0iJChDQykiOyBcCisJICBmb3IgaSBpbiBgJCR7Y29tcGlsZXJ9IC0tcHJpbnQtbXVsdGktbGliIDI+L2Rldi9udWxsYDsgZG8gXAorCSAgICBkaXI9YGVjaG8gJCRpIHwgc2VkIC1lICdzLzsuKiQkLy8nYDsgXAorCSAgICBpZiBbICIkJHtkaXJ9IiA9ICIuIiBdOyB0aGVuIFwKKwkgICAgICB0cnVlOyBcCisJICAgIGVsc2UgXAorCSAgICAgIGlmIFsgLWQgLi4vJCR7ZGlyfS8kJHtsaWJ9IF07IHRoZW4gXAorCQlmbGFncz1gZWNobyAkJGkgfCBzZWQgLWUgJ3MvXlteO10qOy8vJyAtZSAncy9ALyAtL2cnYDsgXAorCQlpZiAoY2QgLi4vJCR7ZGlyfS8kJHtsaWJ9OyAkKE1BS0UpICQoRkxBR1NfVE9fUEFTUykgXAorCQkJCUNGTEFHUz0iJChDRkxBR1MpICQke2ZsYWdzfSIgXAorCQkJCUNDQVNGTEFHUz0iJChDQ0FTRkxBR1MpICQke2ZsYWdzfSIgXAorCQkJCUZDRkxBR1M9IiQoRkNGTEFHUykgJCR7ZmxhZ3N9IiBcCisJCQkJRkZMQUdTPSIkKEZGTEFHUykgJCR7ZmxhZ3N9IiBcCisJCQkJQURBRkxBR1M9IiQoQURBRkxBR1MpICQke2ZsYWdzfSIgXAorCQkJCXByZWZpeD0iJChwcmVmaXgpIiBcCisJCQkJZXhlY19wcmVmaXg9IiQoZXhlY19wcmVmaXgpIiBcCisJCQkJR0NKRkxBR1M9IiQoR0NKRkxBR1MpICQke2ZsYWdzfSIgXAorCQkJCUNYWEZMQUdTPSIkKENYWEZMQUdTKSAkJHtmbGFnc30iIFwKKwkJCQlMSUJDRkxBR1M9IiQoTElCQ0ZMQUdTKSAkJHtmbGFnc30iIFwKKwkJCQlMSUJDWFhGTEFHUz0iJChMSUJDWFhGTEFHUykgJCR7ZmxhZ3N9IiBcCisJCQkJTERGTEFHUz0iJChMREZMQUdTKSAkJHtmbGFnc30iIFwKKwkJCQlNVUxUSUZMQUdTPSIkJHtmbGFnc30iIFwKKwkJCQlERVNURElSPSIkKERFU1RESVIpIiBcCisJCQkJSU5TVEFMTD0iJChJTlNUQUxMKSIgXAorCQkJCUlOU1RBTExfREFUQT0iJChJTlNUQUxMX0RBVEEpIiBcCisJCQkJSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfUFJPR1JBTSkiIFwKKwkJCQlJTlNUQUxMX1NDUklQVD0iJChJTlNUQUxMX1NDUklQVCkiIFwKKwkJCQkkKERPKSk7IHRoZW4gXAorCQkgIHRydWU7IFwKKwkJZWxzZSBcCisJCSAgZXhpdCAxOyBcCisJCWZpOyBcCisJICAgICAgZWxzZSB0cnVlOyBcCisJICAgICAgZmk7IFwKKwkgICAgZmk7IFwKKwkgIGRvbmU7IFwKKwlmaQorCisjIEZJWE1FOiBUaGVyZSBzaG91bGQgYmUgYW4gQC1zaWduIGluIGZyb250IG9mIHRoZSBgaWYnLgorIyBMZWF2ZSBvdXQgdW50aWwgdGhpcyBpcyB0ZXN0ZWQgYSBiaXQgbW9yZS4KK211bHRpLWNsZWFuOgorCWlmIFsgLXogIiQoTVVMVElESVJTKSIgXTsgdGhlbiBcCisJICB0cnVlOyBcCisJZWxzZSBcCisJICBsaWI9YCR7UFdEX0NPTU1BTkR9IHwgc2VkIC1lICdzLF4uKi9cKFteL11bXi9dKlwpJCQsXDEsJ2A7IFwKKwkgIGZvciBkaXIgaW4gOiAkKE1VTFRJRElSUyk7IGRvIFwKKwkgICAgdGVzdCAkJGRpciAhPSA6IHx8IGNvbnRpbnVlOyBcCitFT0YKK2NhdCA+Pk11bHRpLnRlbSA8PEVPRgorCSAgICBpZiBbIC1mIC4uL1wkXCR7ZGlyfS9cJFwke2xpYn0vJHtNYWtlZmlsZX0gXTsgdGhlbiBcXAorRU9GCitjYXQgPj5NdWx0aS50ZW0gPDxcRU9GCisJICAgICAgaWYgKGNkIC4uLyQke2Rpcn0vJCR7bGlifTsgJChNQUtFKSAkKEZMQUdTX1RPX1BBU1MpICQoRE8pKTsgXAorCSAgICAgIHRoZW4gdHJ1ZTsgXAorCSAgICAgIGVsc2UgZXhpdCAxOyBcCisJICAgICAgZmk7IFwKKwkgICAgZWxzZSB0cnVlOyBcCisJICAgIGZpOyBcCisJICBkb25lOyBcCisJZmkKK0VPRgorCitjYXQgJHtNYWtlZmlsZX0gTXVsdGkudGVtID4gTWFrZWZpbGUudGVtCitybSAtZiAke01ha2VmaWxlfSBNdWx0aS50ZW0KK212IE1ha2VmaWxlLnRlbSAke01ha2VmaWxlfQorCitmaSAjICR7bWxfdG9wbGV2ZWxfcH0gPSB5ZXMKKworaWYgWyAiJHttbF92ZXJib3NlfSIgPSAtLXZlcmJvc2UgXTsgdGhlbgorICBlY2hvICJBZGRpbmcgbXVsdGlsaWIgc3VwcG9ydCB0byAke01ha2VmaWxlfSBpbiAke21sX3JlYWxzcmNkaXJ9IgorICBpZiBbICIke21sX3RvcGxldmVsX3B9IiA9IHllcyBdOyB0aGVuCisgICAgZWNobyAibXVsdGlkaXJzPSR7bXVsdGlkaXJzfSIKKyAgZmkKKyAgZWNobyAid2l0aF9tdWx0aXN1YmRpcj0ke3dpdGhfbXVsdGlzdWJkaXJ9IgorZmkKKworaWYgWyAiJHtzcmNkaXJ9IiA9ICIuIiBdOyB0aGVuCisgIGlmIFsgIiR7d2l0aF90YXJnZXRfc3ViZGlyfSIgIT0gIi4iIF07IHRoZW4KKyAgICBtbF9zcmNkb3Rkb3Q9Ii4uLyIKKyAgZWxzZQorICAgIG1sX3NyY2RvdGRvdD0iIgorICBmaQorZWxzZQorICBtbF9zcmNkb3Rkb3Q9IiIKK2ZpCisKK2lmIFsgLXogIiR7d2l0aF9tdWx0aXN1YmRpcn0iIF07IHRoZW4KKyAgbWxfc3ViZGlyPQorICBtbF9idWlsZGRvdGRvdD0KKyAgOiAjIG1sX3NyY2RvdGRvdD0gIyBhbHJlYWR5IHNldAorZWxzZQorICBtbF9zdWJkaXI9Ii8ke3dpdGhfbXVsdGlzdWJkaXJ9IgorICAjIFRoZSAnW14vXVteL10qJyBhcHBlYXJzIHRoYXQgd2F5IHRvIHdvcmsgYXJvdW5kIGEgU3VuT1Mgc2VkIGJ1Zy4KKyAgbWxfYnVpbGRkb3Rkb3Q9YGVjaG8gJHt3aXRoX211bHRpc3ViZGlyfSB8IHNlZCAtZSAnczpbXi9dW14vXSo6Li46ZydgLworICBpZiBbICIkc3JjZGlyIiA9ICIuIiBdOyB0aGVuCisgICAgbWxfc3JjZG90ZG90PSR7bWxfc3JjZG90ZG90fSR7bWxfYnVpbGRkb3Rkb3R9CisgIGVsc2UKKyAgICA6ICMgbWxfc3JjZG90ZG90PSAjIGFscmVhZHkgc2V0CisgIGZpCitmaQorCitpZiBbICIke21sX3RvcGxldmVsX3B9IiA9IHllcyBdOyB0aGVuCisgIG1sX2RvPSckKE1BS0UpJworICBtbF9jbGVhbj0nJChNQUtFKScKK2Vsc2UKKyAgbWxfZG89dHJ1ZQorICBtbF9jbGVhbj10cnVlCitmaQorCisjIFRPUCBpcyB1c2VkIGJ5IG5ld2xpYiBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGVsc2V3aGVyZSBmb3IgdGhpcyBwdXJwb3NlLgorIyBNVUxUSXtTUkMsQlVJTER9VE9QIGFyZSB0aGUgcHJvcGVyIG9uZXMgdG8gdXNlLiAgTVVMVElTUkNUT1AgaXMgZW1wdHkKKyMgd2hlbiBzcmNkaXIgIT0gYnVpbGRkaXIuICBNVUxUSUJVSUxEVE9QIGlzIGFsd2F5cyBzb21lIG51bWJlciBvZiAuLi8ncy4KKyMgRklYTUU6IG5ld2xpYiBuZWVkcyB0byBiZSB1cGRhdGVkIHRvIHVzZSBNVUxUSXtTUkMsQlVJTER9VE9QIHNvIHdlIGNhbgorIyBkZWxldGUgVE9QLiAgTmV3bGliIG1heSB3aXNoIHRvIGNvbnRpbnVlIHRvIHVzZSBUT1AgZm9yIGl0cyBvd24gcHVycG9zZXMKKyMgb2YgY291cnNlLgorIyBNVUxUSURJUlMgaXMgbm9uLWVtcHR5IGZvciB0aGUgY3B1IHRvcCBsZXZlbCBNYWtlZmlsZSAoZWc6IG5ld2xpYi9NYWtlZmlsZSkKKyMgYW5kIGxpc3RzIHRoZSBzdWJkaXJlY3RvcmllcyB0byByZWN1cnNlIGludG8uCisjIE1VTFRJU1VCRElSIGlzIG5vbi1lbXB0eSBpbiBlYWNoIGNwdSBzdWJkaXJlY3RvcnkncyBNYWtlZmlsZQorIyAoZWc6IG5ld2xpYi9oODMwMGgvTWFrZWZpbGUpIGFuZCBpcyB0aGUgaW5zdGFsbGVkIHN1YmRpcmVjdG9yeSBuYW1lIHdpdGgKKyMgYSBsZWFkaW5nICcvJy4KKyMgTVVMVElETyBpcyB1c2VkIGZvciB0YXJnZXRzIGxpa2UgYWxsLCBpbnN0YWxsLCBhbmQgY2hlY2sgd2hlcmUKKyMgJChGTEFHU19UT19QQVNTKSBhdWdtZW50ZWQgd2l0aCB0aGUgc3ViZGlyJ3MgY29tcGlsZXIgb3B0aW9uIGlzIG5lZWRlZC4KKyMgTVVMVElDTEVBTiBpcyB1c2VkIGZvciB0aGUgKmNsZWFuIHRhcmdldHMuCisjCisjID8/PyBJdCBpcyBwb3NzaWJsZSB0byBtZXJnZSBNVUxUSURPIGFuZCBNVUxUSUNMRUFOIGludG8gb25lLiAgVGhleSBhcmUKKyMgY3VycmVudGx5IGtlcHQgc2VwYXJhdGUgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZSAqY2xlYW4gdGFyZ2V0cyB0byByZXF1aXJlCisjIHRoZSBleGlzdGVuY2Ugb2YgdGhlIGNvbXBpbGVyICh3aGljaCBNVUxUSURPIGN1cnJlbnRseSByZXF1aXJlcykgYW5kCisjIHRoZXJlZm9yZSB3ZSdkIGhhdmUgdG8gcmVjb3JkIHRoZSBkaXJlY3Rvcnkgb3B0aW9ucyBhcyB3ZWxsIGFzIG5hbWVzCisjIChjdXJyZW50bHkgd2UganVzdCByZWNvcmQgdGhlIG5hbWVzIGFuZCB1c2UgLS1wcmludC1tdWx0aS1saWIgdG8gZ2V0IHRoZQorIyBvcHRpb25zKS4KKworc2VkIC1lICJzOl5UT1BbIAldKj1bIAldKlwoWy4vXSpcKVsgCV0qJDpUT1AgPSAke21sX2J1aWxkZG90ZG90fVwxOiIgXAorICAgIC1lICJzOl5NVUxUSVNSQ1RPUFsgCV0qPS4qJDpNVUxUSVNSQ1RPUCA9ICR7bWxfc3JjZG90ZG90fToiIFwKKyAgICAtZSAiczpeTVVMVElCVUlMRFRPUFsgCV0qPS4qJDpNVUxUSUJVSUxEVE9QID0gJHttbF9idWlsZGRvdGRvdH06IiBcCisgICAgLWUgInM6Xk1VTFRJRElSU1sgCV0qPS4qJDpNVUxUSURJUlMgPSAke211bHRpZGlyc306IiBcCisgICAgLWUgInM6Xk1VTFRJU1VCRElSWyAJXSo9LiokOk1VTFRJU1VCRElSID0gJHttbF9zdWJkaXJ9OiIgXAorICAgIC1lICJzOl5NVUxUSURPWyAJXSo9LiokOk1VTFRJRE8gPSAkbWxfZG86IiBcCisgICAgLWUgInM6Xk1VTFRJQ0xFQU5bIAldKj0uKiQ6TVVMVElDTEVBTiA9ICRtbF9jbGVhbjoiIFwKKwkke01ha2VmaWxlfSA+IE1ha2VmaWxlLnRlbQorcm0gLWYgJHtNYWtlZmlsZX0KK212IE1ha2VmaWxlLnRlbSAke01ha2VmaWxlfQorCisjIElmIHRoaXMgaXMgdGhlIGxpYnJhcnkncyB0b3AgbGV2ZWwsIGNvbmZpZ3VyZSBlYWNoIG11bHRpbGliIHN1YmRpci4KKyMgVGhpcyBpcyBkb25lIGF0IHRoZSBlbmQgYmVjYXVzZSB0aGlzIGlzIHRoZSBsb29wIHRoYXQgcnVucyBjb25maWd1cmUKKyMgaW4gZWFjaCBtdWx0aWxpYiBzdWJkaXIgYW5kIGl0IHNlZW1lZCByZWFzb25hYmxlIHRvIGZpbmlzaCB1cGRhdGluZyB0aGUKKyMgTWFrZWZpbGUgYmVmb3JlIGdvaW5nIG9uIHRvIGNvbmZpZ3VyZSB0aGUgc3ViZGlycy4KKworaWYgWyAiJHttbF90b3BsZXZlbF9wfSIgPSB5ZXMgXTsgdGhlbgorCisjIFdlIG11c3QgZnJlc2hseSBjb25maWd1cmUgZWFjaCBzdWJkaXJlY3RvcnkuICBUaGlzIGJpdCBvZiBjb2RlIGlzCisjIGFjdHVhbGx5IHBhcnRpYWxseSBzdG9sZW4gZnJvbSB0aGUgbWFpbiBjb25maWd1cmUgc2NyaXB0LiAgRklYTUUuCisKK2lmIFsgLW4gIiR7bXVsdGlkaXJzfSIgXSAmJiBbIC16ICIke21sX25vcmVjdXJzaW9ufSIgXTsgdGhlbgorCisgIGlmIFsgIiR7bWxfdmVyYm9zZX0iID0gLS12ZXJib3NlIF07IHRoZW4KKyAgICBlY2hvICJSdW5uaW5nIGNvbmZpZ3VyZSBpbiBtdWx0aWxpYiBzdWJkaXJzICR7bXVsdGlkaXJzfSIKKyAgICBlY2hvICJwd2Q6IGAke1BXRENNRC1wd2R9YCIKKyAgZmkKKworICBtbF9vcmlnZGlyPWAke1BXRENNRC1wd2R9YAorICBtbF9saWJkaXI9YGVjaG8gIiRtbF9vcmlnZGlyIiB8IHNlZCAtZSAncyxeLiovLCwnYAorICAjIGNkIHRvIHRvcC1sZXZlbC1idWlsZC1kaXIvJHt3aXRoX3RhcmdldF9zdWJkaXJ9CisgIGNkIC4uCisKKyAgZm9yIG1sX2RpciBpbiAke211bHRpZGlyc307IGRvCisKKyAgICBpZiBbICIke21sX3ZlcmJvc2V9IiA9IC0tdmVyYm9zZSBdOyB0aGVuCisgICAgICBlY2hvICJSdW5uaW5nIGNvbmZpZ3VyZSBpbiBtdWx0aWxpYiBzdWJkaXIgJHttbF9kaXJ9IgorICAgICAgZWNobyAicHdkOiBgJHtQV0RDTUQtcHdkfWAiCisgICAgZmkKKworICAgIGlmIFsgLWQgJHttbF9kaXJ9IF07IHRoZW4gdHJ1ZTsgZWxzZQorICAgICAgIyBgYG1rZGlyIC1wICR7bWxfZGlyfScnIFNlZSBhbHNvIG1raW5zdGFsbGRpcnMuCisgICAgICBwYXRoY29tcD0iIgorICAgICAgZm9yIGQgaW4gYGVjaG8gIjoke21sX2Rpcn0iIHwgc2VkIC1uZSAncy9eOlwvLyMvO3MvXjovLztzL1wvLyAvZztzL14jL1wvLztwJ2A7IGRvCisgICAgICAgIHBhdGhjb21wPSIkcGF0aGNvbXAkZCIKKyAgICAgICAgY2FzZSAiJHBhdGhjb21wIiBpbgorICAgICAgICAgIC0qICkgcGF0aGNvbXA9Li8kcGF0aGNvbXAgOzsKKyAgICAgICAgZXNhYworICAgICAgICBpZiB0ZXN0ICEgLWQgIiRwYXRoY29tcCI7IHRoZW4KKyAgICAgICAgICAgZWNobyAibWtkaXIgJHBhdGhjb21wIiAxPiYyCisgICAgICAgICAgIG1rZGlyICIkcGF0aGNvbXAiID4gL2Rldi9udWxsIDI+JjEgfHwgbGFzdGVycj0kPworICAgICAgICBmaQorICAgICAgICBpZiB0ZXN0ICEgLWQgIiRwYXRoY29tcCI7IHRoZW4KKwkgICBleGl0ICRsYXN0ZXJyCisgICAgICAgIGZpCisgICAgICAgIHBhdGhjb21wPSIkcGF0aGNvbXAvIgorICAgICAgZG9uZQorICAgIGZpCisgICAgaWYgWyAtZCAke21sX2Rpcn0vJHttbF9saWJkaXJ9IF07IHRoZW4gdHJ1ZTsgZWxzZSBta2RpciAke21sX2Rpcn0vJHttbF9saWJkaXJ9OyBmaQorCisgICAgIyBFZzogaWYgJHttbF9kaXJ9ID0gbTY4MDAwL202ODg4MSwgZG90ZG90ID0gLi4vLi4vCisgICAgZG90ZG90PS4uL2BlY2hvICR7bWxfZGlyfSB8IHNlZCAtZSAnc3xbXi9dfHxnJyAtZSAnc3wvfC4uL3xnJ2AKKworICAgIGNhc2UgJHtzcmNkaXJ9IGluCisgICAgIi4iKQorICAgICAgZWNobyAiQnVpbGRpbmcgc3ltbGluayB0cmVlIGluIGAke1BXRENNRC1wd2R9YC8ke21sX2Rpcn0vJHttbF9saWJkaXJ9IgorICAgICAgaWYgWyAiJHt3aXRoX3RhcmdldF9zdWJkaXJ9IiAhPSAiLiIgXTsgdGhlbgorCW1sX3Vuc3ViZGlyPSIuLi8iCisgICAgICBlbHNlCisJbWxfdW5zdWJkaXI9IiIKKyAgICAgIGZpCisgICAgICAoY2QgJHttbF9kaXJ9LyR7bWxfbGliZGlyfTsKKyAgICAgICAuLi8ke2RvdGRvdH0ke21sX3Vuc3ViZGlyfXN5bWxpbmstdHJlZSAuLi8ke2RvdGRvdH0ke21sX3Vuc3ViZGlyfSR7bWxfbGliZGlyfSAiIikKKyAgICAgIGlmIFsgLWYgJHttbF9kaXJ9LyR7bWxfbGliZGlyfS8ke01ha2VmaWxlfSBdOyB0aGVuCisJaWYgWyB4IiR7TUFLRX0iID0geCBdOyB0aGVuCisJICAoY2QgJHttbF9kaXJ9LyR7bWxfbGliZGlyfTsgbWFrZSBkaXN0Y2xlYW4pCisJZWxzZQorCSAgKGNkICR7bWxfZGlyfS8ke21sX2xpYmRpcn07ICR7TUFLRX0gZGlzdGNsZWFuKQorCWZpCisgICAgICBmaQorICAgICAgbWxfbmV3c3JjZGlyPSIuIgorICAgICAgbWxfc3JjZGlyb3B0aW9uPQorICAgICAgbXVsdGlzcmN0b3A9JHtkb3Rkb3R9CisgICAgICA7OworICAgICopCisgICAgICBjYXNlICIke3NyY2Rpcn0iIGluCisgICAgICAvKiB8IFtBLVphLXpdOltcXC9dKiApICMgYWJzb2x1dGUgcGF0aAorICAgICAgICBtbF9uZXdzcmNkaXI9JHtzcmNkaXJ9CisgICAgICAgIDs7CisgICAgICAqKSAjIG90aGVyd2lzZSByZWxhdGl2ZQorICAgICAgICBtbF9uZXdzcmNkaXI9JHtkb3Rkb3R9JHtzcmNkaXJ9CisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICBtbF9zcmNkaXJvcHRpb249Ii1zcmNkaXI9JHttbF9uZXdzcmNkaXJ9IgorICAgICAgbXVsdGlzcmN0b3A9CisgICAgICA7OworICAgIGVzYWMKKworICAgIGNhc2UgIiR7cHJvZ25hbWV9IiBpbgorICAgIC8qIHwgW0EtWmEtel06W1xcL10qICkgICAgIG1sX3JlY3Byb2c9JHtwcm9nbmFtZX0gOzsKKyAgICAqKSAgICAgIG1sX3JlY3Byb2c9JHtkb3Rkb3R9JHtwcm9nbmFtZX0gOzsKKyAgICBlc2FjCisKKyAgICAjIEZJWE1FOiBQT1BESVI9JHtQV0Q9YHB3ZGB9IGRvZXNuJ3Qgd29yayBoZXJlLgorICAgIE1MX1BPUERJUj1gJHtQV0RDTUQtcHdkfWAKKyAgICBjZCAke21sX2Rpcn0vJHttbF9saWJkaXJ9CisKKyAgICBpZiBbIC1mICR7bWxfbmV3c3JjZGlyfS9jb25maWd1cmUgXTsgdGhlbgorICAgICAgbWxfcmVjcHJvZz0iJHttbF9uZXdzcmNkaXJ9L2NvbmZpZ3VyZSIKKyAgICBmaQorCisgICAgIyBmaW5kIGNvbXBpbGVyIGZsYWcgY29ycmVzcG9uZGluZyB0byAke21sX2Rpcn0KKyAgICBmb3IgaSBpbiBgJHtDQy1nY2N9IC0tcHJpbnQtbXVsdGktbGliIDI+L2Rldi9udWxsYDsgZG8KKyAgICAgIGRpcj1gZWNobyAkaSB8IHNlZCAtZSAncy87LiokLy8nYAorICAgICAgaWYgWyAiJHtkaXJ9IiA9ICIke21sX2Rpcn0iIF07IHRoZW4KKyAgICAgICAgZmxhZ3M9YGVjaG8gJGkgfCBzZWQgLWUgJ3MvXlteO10qOy8vJyAtZSAncy9ALyAtL2cnYAorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBkb25lCisgICAgbWxfY29uZmlnX2Vudj0nQ0M9IiR7Q0NffSRmbGFncyIgQ1hYPSIke0NYWF99JGZsYWdzIiBGNzc9IiR7Rjc3X30kZmxhZ3MiIEdDSj0iJHtHQ0pffSRmbGFncyIgR0ZPUlRSQU49IiR7R0ZPUlRSQU5ffSRmbGFncyInCisKKyAgICBpZiBbICIke3dpdGhfdGFyZ2V0X3N1YmRpcn0iID0gIi4iIF07IHRoZW4KKwlDQ189JENDJyAnCisJQ1hYXz0kQ1hYJyAnCisJRjc3Xz0kRjc3JyAnCisJR0NKXz0kR0NKJyAnCisJR0ZPUlRSQU5fPSRHRk9SVFJBTicgJworICAgIGVsc2UKKwkjIENyZWF0ZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG1hdGNoZXMgYW55IHN0cmluZyBhcyBsb25nCisJIyBhcyBNTF9QT1BESVIuCisJcG9wZGlyX3J4PWBlY2hvICIke01MX1BPUERJUn0iIHwgc2VkICdzLC4sLixnJ2AKKwlDQ189CisJZm9yIGFyZyBpbiAke0NDfTsgZG8KKwkgIGNhc2UgJGFyZyBpbgorCSAgLVtCSUxdIiR7TUxfUE9QRElSfSIvKikKKwkgICAgQ0NfPSIke0NDX30iYGVjaG8gIlgke2FyZ30iIHwgc2VkIC1uICJzL1hcXCgtW0JJTF0ke3BvcGRpcl9yeH1cXCkuKi9cXDEvcCJgLyR7bWxfZGlyfWBlY2hvICJYJHthcmd9IiB8IHNlZCAtbiAicy9YLVtCSUxdJHtwb3BkaXJfcnh9XFwoLipcXCkvXDEvcCJgJyAnIDs7CisJICAiJHtNTF9QT1BESVJ9Ii8qKQorCSAgICBDQ189IiR7Q0NffSJgZWNobyAiWCR7YXJnfSIgfCBzZWQgLW4gInMvWFxcKCR7cG9wZGlyX3J4fVxcKS4qL1xcMS9wImAvJHttbF9kaXJ9YGVjaG8gIlgke2FyZ30iIHwgc2VkIC1uICJzL1gke3BvcGRpcl9yeH1cXCguKlxcKS9cXDEvcCJgJyAnIDs7CisJICAqKQorCSAgICBDQ189IiR7Q0NffSR7YXJnfSAiIDs7CisJICBlc2FjCisJZG9uZQorCisJQ1hYXz0KKwlmb3IgYXJnIGluICR7Q1hYfTsgZG8KKwkgIGNhc2UgJGFyZyBpbgorCSAgLVtCSUxdIiR7TUxfUE9QRElSfSIvKikKKwkgICAgQ1hYXz0iJHtDWFhffSJgZWNobyAiWCR7YXJnfSIgfCBzZWQgLW4gInMvWFxcKC1bQklMXSR7cG9wZGlyX3J4fVxcKS4qL1xcMS9wImAvJHttbF9kaXJ9YGVjaG8gIlgke2FyZ30iIHwgc2VkIC1uICJzL1gtW0JJTF0ke3BvcGRpcl9yeH1cXCguKlxcKS9cXDEvcCJgJyAnIDs7CisJICAiJHtNTF9QT1BESVJ9Ii8qKQorCSAgICBDWFhfPSIke0NYWF99ImBlY2hvICJYJHthcmd9IiB8IHNlZCAtbiAicy9YXFwoJHtwb3BkaXJfcnh9XFwpLiovXFwxL3AiYC8ke21sX2Rpcn1gZWNobyAiWCR7YXJnfSIgfCBzZWQgLW4gInMvWCR7cG9wZGlyX3J4fVxcKC4qXFwpL1xcMS9wImAnICcgOzsKKwkgICopCisJICAgIENYWF89IiR7Q1hYX30ke2FyZ30gIiA7OworCSAgZXNhYworCWRvbmUKKworCUY3N189CisJZm9yIGFyZyBpbiAke0Y3N307IGRvCisJICBjYXNlICRhcmcgaW4KKwkgIC1bQklMXSIke01MX1BPUERJUn0iLyopCisJICAgIEY3N189IiR7Rjc3X30iYGVjaG8gIlgke2FyZ30iIHwgc2VkIC1uICJzL1hcXCgtW0JJTF0ke3BvcGRpcl9yeH1cXCkuKi9cXDEvcCJgLyR7bWxfZGlyfWBlY2hvICJYJHthcmd9IiB8IHNlZCAtbiAicy9YLVtCSUxdJHtwb3BkaXJfcnh9XFwoLipcXCkvXFwxL3AiYCcgJyA7OworCSAgIiR7TUxfUE9QRElSfSIvKikKKwkgICAgRjc3Xz0iJHtGNzdffSJgZWNobyAiWCR7YXJnfSIgfCBzZWQgLW4gInMvWFxcKCR7cG9wZGlyX3J4fVxcKS4qL1xcMS9wImAvJHttbF9kaXJ9YGVjaG8gIlgke2FyZ30iIHwgc2VkIC1uICJzL1gke3BvcGRpcl9yeH1cXCguKlxcKS9cXDEvcCJgJyAnIDs7CisJICAqKQorCSAgICBGNzdfPSIke0Y3N199JHthcmd9ICIgOzsKKwkgIGVzYWMKKwlkb25lCisKKwlHQ0pfPQorCWZvciBhcmcgaW4gJHtHQ0p9OyBkbworCSAgY2FzZSAkYXJnIGluCisJICAtW0JJTF0iJHtNTF9QT1BESVJ9Ii8qKQorCSAgICBHQ0pfPSIke0dDSl99ImBlY2hvICJYJHthcmd9IiB8IHNlZCAtbiAicy9YXFwoLVtCSUxdJHtwb3BkaXJfcnh9XFwpLiovXFwxL3AiYC8ke21sX2Rpcn1gZWNobyAiWCR7YXJnfSIgfCBzZWQgLW4gInMvWC1bQklMXSR7cG9wZGlyX3J4fVxcKC4qXFwpL1xcMS9wImAnICcgOzsKKwkgICIke01MX1BPUERJUn0iLyopCisJICAgIEdDSl89IiR7R0NKX30iYGVjaG8gIlgke2FyZ30iIHwgc2VkIC1uICJzL1hcXCgke3BvcGRpcl9yeH1cXCkuKi9cXDEvcCJgLyR7bWxfZGlyfWBlY2hvICJYJHthcmd9IiB8IHNlZCAtbiAicy9YJHtwb3BkaXJfcnh9XFwoLipcXCkvXFwxL3AiYCcgJyA7OworCSAgKikKKwkgICAgR0NKXz0iJHtHQ0pffSR7YXJnfSAiIDs7CisJICBlc2FjCisJZG9uZQorCisJR0ZPUlRSQU5fPQorCWZvciBhcmcgaW4gJHtHRk9SVFJBTn07IGRvCisJICBjYXNlICRhcmcgaW4KKwkgIC1bQklMXSIke01MX1BPUERJUn0iLyopCisJICAgIEdGT1JUUkFOXz0iJHtHRk9SVFJBTl99ImBlY2hvICJYJHthcmd9IiB8IHNlZCAtbiAicy9YXFwoLVtCSUxdJHtwb3BkaXJfcnh9XFwpLiovXFwxL3AiYC8ke21sX2Rpcn1gZWNobyAiWCR7YXJnfSIgfCBzZWQgLW4gInMvWC1bQklMXSR7cG9wZGlyX3J4fVxcKC4qXFwpL1xcMS9wImAnICcgOzsKKwkgICIke01MX1BPUERJUn0iLyopCisJICAgIEdGT1JUUkFOXz0iJHtHRk9SVFJBTl99ImBlY2hvICJYJHthcmd9IiB8IHNlZCAtbiAicy9YXFwoJHtwb3BkaXJfcnh9XFwpLiovXFwxL3AiYC8ke21sX2Rpcn1gZWNobyAiWCR7YXJnfSIgfCBzZWQgLW4gInMvWCR7cG9wZGlyX3J4fVxcKC4qXFwpL1xcMS9wImAnICcgOzsKKwkgICopCisJICAgIEdGT1JUUkFOXz0iJHtHRk9SVFJBTl99JHthcmd9ICIgOzsKKwkgIGVzYWMKKwlkb25lCisKKwlpZiB0ZXN0ICJ4JHtMRF9MSUJSQVJZX1BBVEgrc2V0fSIgPSB4c2V0OyB0aGVuCisJICBMRF9MSUJSQVJZX1BBVEhfPQorCSAgZm9yIGFyZyBpbiBgZWNobyAiJExEX0xJQlJBUllfUEFUSCIgfCB0ciAnOicgJyAnYDsgZG8KKwkgICAgY2FzZSAiJGFyZyIgaW4KKwkgICAgIiR7TUxfUE9QRElSfSIvKikKKwkgICAgICBhcmc9YGVjaG8gIlgke2FyZ30iIHwgc2VkIC1uICJzL1hcXCgke3BvcGRpcl9yeH1cXCkuKi9cXDEvcCJgLyR7bWxfZGlyfWBlY2hvICJYJHthcmd9IiB8IHNlZCAtbiAicy9YJHtwb3BkaXJfcnh9XFwoLipcXCkvXFwxL3AiYAorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgaWYgdGVzdCAieCRMRF9MSUJSQVJZX1BBVEhfIiAhPSB4OyB0aGVuCisJICAgICAgTERfTElCUkFSWV9QQVRIXz0kTERfTElCUkFSWV9QQVRIXzokYXJnCisJICAgIGVsc2UKKwkgICAgICBMRF9MSUJSQVJZX1BBVEhfPSRhcmcKKwkgICAgZmkKKyAgICAgICAgICBkb25lCisJICBtbF9jb25maWdfZW52PSIkbWxfY29uZmlnX2VudiBMRF9MSUJSQVJZX1BBVEg9JExEX0xJQlJBUllfUEFUSF8iCisJZmkKKworCWlmIHRlc3QgIngke1NITElCX1BBVEgrc2V0fSIgPSB4c2V0OyB0aGVuCisJICBTSExJQl9QQVRIXz0KKwkgIGZvciBhcmcgaW4gYGVjaG8gIiRTSExJQl9QQVRIIiB8IHRyICc6JyAnICdgOyBkbworCSAgICBjYXNlICIkYXJnIiBpbgorCSAgICAiJHtNTF9QT1BESVJ9Ii8qKQorCSAgICAgIGFyZz1gZWNobyAiWCR7YXJnfSIgfCBzZWQgLW4gInMvWFxcKCR7cG9wZGlyX3J4fVxcKS4qL1xcMS9wImAvJHttbF9kaXJ9YGVjaG8gIlgke2FyZ30iIHwgc2VkIC1uICJzL1gke3BvcGRpcl9yeH1cXCguKlxcKS9cXDEvcCJgCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICBpZiB0ZXN0ICJ4JFNITElCX1BBVEhfIiAhPSB4OyB0aGVuCisJICAgICAgU0hMSUJfUEFUSF89JFNITElCX1BBVEhfOiRhcmcKKwkgICAgZWxzZQorCSAgICAgIFNITElCX1BBVEhfPSRhcmcKKwkgICAgZmkKKyAgICAgICAgICBkb25lCisJICBtbF9jb25maWdfZW52PSIkbWxfY29uZmlnX2VudiBTSExJQl9QQVRIPSRTSExJQl9QQVRIXyIKKwlmaQorICAgIGZpCisKKyAgICBpZiBldmFsICR7bWxfY29uZmlnX2Vudn0gJHttbF9jb25maWdfc2hlbGx9ICR7bWxfcmVjcHJvZ30gXAorCS0td2l0aC1tdWx0aXN1YmRpcj0ke21sX2Rpcn0gLS13aXRoLW11bHRpc3JjdG9wPSR7bXVsdGlzcmN0b3B9IFwKKwkke2FjX2NvbmZpZ3VyZV9hcmdzfSAke21sX2NvbmZpZ19lbnZ9ICR7bWxfc3JjZGlyb3B0aW9ufSA7IHRoZW4KKyAgICAgIHRydWUKKyAgICBlbHNlCisgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgY2QgIiR7TUxfUE9QRElSfSIKKworICBkb25lCisKKyAgY2QgIiR7bWxfb3JpZ2Rpcn0iCitmaQorCitmaSAjICR7bWxfdG9wbGV2ZWxfcH0gPSB5ZXMKK2ZpICMgJHtlbmFibGVfbXVsdGlsaWJ9ID0geWVzCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL2NvbmZpZy5ndWVzcyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvY29uZmlnLmd1ZXNzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQwY2YwYWYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL2NvbmZpZy5ndWVzcwpAQCAtMCwwICsxLDE1MjcgQEAKKyMhIC9iaW4vc2gKKyMgQXR0ZW1wdCB0byBndWVzcyBhIGNhbm9uaWNhbCBzeXN0ZW0gbmFtZS4KKyMgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisjICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwKKyMgICAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCit0aW1lc3RhbXA9JzIwMTEtMDItMDInCisKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyMgMDIxMTAtMTMwMSwgVVNBLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKworIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuICBQbGVhc2Ugc2VuZCBwYXRjaGVzIChjb250ZXh0CisjIGRpZmYgZm9ybWF0KSB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4gYW5kIGluY2x1ZGUgYSBDaGFuZ2VMb2cKKyMgZW50cnkuCisjCisjIFRoaXMgc2NyaXB0IGF0dGVtcHRzIHRvIGd1ZXNzIGEgY2Fub25pY2FsIHN5c3RlbSBuYW1lIHNpbWlsYXIgdG8KKyMgY29uZmlnLnN1Yi4gIElmIGl0IHN1Y2NlZWRzLCBpdCBwcmludHMgdGhlIHN5c3RlbSBuYW1lIG9uIHN0ZG91dCwgYW5kCisjIGV4aXRzIHdpdGggMC4gIE90aGVyd2lzZSwgaXQgZXhpdHMgd2l0aCAxLgorIworIyBZb3UgY2FuIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBzY3JpcHQgZnJvbToKKyMgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcztoYj1IRUFECisKK21lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dCisKK091dHB1dCB0aGUgY29uZmlndXJhdGlvbiBuYW1lIG9mIHRoZSBzeXN0ZW0gXGAkbWUnIGlzIHJ1biBvbi4KKworT3BlcmF0aW9uIG1vZGVzOgorICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAorICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorCitSZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgorCit2ZXJzaW9uPSJcCitHTlUgY29uZmlnLmd1ZXNzICgkdGltZXN0YW1wKQorCitPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuCitDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KK3dhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKKworaGVscD0iCitUcnkgXGAkbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisKKyMgUGFyc2UgY29tbWFuZCBsaW5lCit3aGlsZSB0ZXN0ICQjIC1ndCAwIDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC0tdGltZS1zdGFtcCB8IC0tdGltZSogfCAtdCApCisgICAgICAgZWNobyAiJHRpbWVzdGFtcCIgOyBleGl0IDs7CisgICAgLS12ZXJzaW9uIHwgLXYgKQorICAgICAgIGVjaG8gIiR2ZXJzaW9uIiA7IGV4aXQgOzsKKyAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQorICAgICAgIGVjaG8gIiR1c2FnZSI7IGV4aXQgOzsKKyAgICAtLSApICAgICAjIFN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKKyAgICAgICBzaGlmdDsgYnJlYWsgOzsKKyAgICAtICkJIyBVc2Ugc3RkaW4gYXMgaW5wdXQuCisgICAgICAgYnJlYWsgOzsKKyAgICAtKiApCisgICAgICAgZWNobyAiJG1lOiBpbnZhbGlkIG9wdGlvbiAkMSRoZWxwIiA+JjIKKyAgICAgICBleGl0IDEgOzsKKyAgICAqICkKKyAgICAgICBicmVhayA7OworICBlc2FjCitkb25lCisKK2lmIHRlc3QgJCMgIT0gMDsgdGhlbgorICBlY2hvICIkbWU6IHRvbyBtYW55IGFyZ3VtZW50cyRoZWxwIiA+JjIKKyAgZXhpdCAxCitmaQorCit0cmFwICdleGl0IDEnIDEgMiAxNQorCisjIENDX0ZPUl9CVUlMRCAtLSBjb21waWxlciB1c2VkIGJ5IHRoaXMgc2NyaXB0LiBOb3RlIHRoYXQgdGhlIHVzZSBvZiBhCisjIGNvbXBpbGVyIHRvIGFpZCBpbiBzeXN0ZW0gZGV0ZWN0aW9uIGlzIGRpc2NvdXJhZ2VkIGFzIGl0IHJlcXVpcmVzCisjIHRlbXBvcmFyeSBmaWxlcyB0byBiZSBjcmVhdGVkIGFuZCwgYXMgeW91IGNhbiBzZWUgYmVsb3csIGl0IGlzIGEKKyMgaGVhZGFjaGUgdG8gZGVhbCB3aXRoIGluIGEgcG9ydGFibGUgZmFzaGlvbi4KKworIyBIaXN0b3JpY2FsbHksIGBDQ19GT1JfQlVJTEQnIHVzZWQgdG8gYmUgbmFtZWQgYEhPU1RfQ0MnLiBXZSBzdGlsbAorIyB1c2UgYEhPU1RfQ0MnIGlmIGRlZmluZWQsIGJ1dCBpdCBpcyBkZXByZWNhdGVkLgorCisjIFBvcnRhYmxlIHRtcCBkaXJlY3RvcnkgY3JlYXRpb24gaW5zcGlyZWQgYnkgdGhlIEF1dG9jb25mIHRlYW0uCisKK3NldF9jY19mb3JfYnVpbGQ9JwordHJhcCAiZXhpdGNvZGU9XCQ/OyAocm0gLWYgXCR0bXBmaWxlcyAyPi9kZXYvbnVsbDsgcm1kaXIgXCR0bXAgMj4vZGV2L251bGwpICYmIGV4aXQgXCRleGl0Y29kZSIgMCA7Cit0cmFwICJybSAtZiBcJHRtcGZpbGVzIDI+L2Rldi9udWxsOyBybWRpciBcJHRtcCAyPi9kZXYvbnVsbDsgZXhpdCAxIiAxIDIgMTMgMTUgOworOiAke1RNUERJUj0vdG1wfSA7CisgeyB0bXA9YCh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kICIkVE1QRElSL2NnWFhYWFhYIikgMj4vZGV2L251bGxgICYmIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiIDsgfSB8fAorIHsgdGVzdCAtbiAiJFJBTkRPTSIgJiYgdG1wPSRUTVBESVIvY2ckJC0kUkFORE9NICYmICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCkgOyB9IHx8CisgeyB0bXA9JFRNUERJUi9jZy0kJCAmJiAodW1hc2sgMDc3ICYmIG1rZGlyICR0bXApICYmIGVjaG8gIldhcm5pbmc6IGNyZWF0aW5nIGluc2VjdXJlIHRlbXAgZGlyZWN0b3J5IiA+JjIgOyB9IHx8CisgeyBlY2hvICIkbWU6IGNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluICRUTVBESVIiID4mMiA7IGV4aXQgMSA7IH0gOworZHVtbXk9JHRtcC9kdW1teSA7Cit0bXBmaWxlcz0iJGR1bW15LmMgJGR1bW15Lm8gJGR1bW15LnJlbCAkZHVtbXkiIDsKK2Nhc2UgJENDX0ZPUl9CVUlMRCwkSE9TVF9DQywkQ0MgaW4KKyAsLCkgICAgZWNobyAiaW50IHg7IiA+ICRkdW1teS5jIDsKKwlmb3IgYyBpbiBjYyBnY2MgYzg5IGM5OSA7IGRvCisJICBpZiAoJGMgLWMgLW8gJGR1bW15Lm8gJGR1bW15LmMpID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKwkgICAgIENDX0ZPUl9CVUlMRD0iJGMiOyBicmVhayA7CisJICBmaSA7CisJZG9uZSA7CisJaWYgdGVzdCB4IiRDQ19GT1JfQlVJTEQiID0geCA7IHRoZW4KKwkgIENDX0ZPUl9CVUlMRD1ub19jb21waWxlcl9mb3VuZCA7CisJZmkKKwk7OworICwsKikgICBDQ19GT1JfQlVJTEQ9JENDIDs7CisgLCosKikgIENDX0ZPUl9CVUlMRD0kSE9TVF9DQyA7OworZXNhYyA7IHNldF9jY19mb3JfYnVpbGQ9IDsnCisKKyMgVGhpcyBpcyBuZWVkZWQgdG8gZmluZCB1bmFtZSBvbiBhIFB5cmFtaWQgT1N4IHdoZW4gcnVuIGluIHRoZSBCU0QgdW5pdmVyc2UuCisjIChnaGF6aUBub2MucnV0Z2Vycy5lZHUgMTk5NC0wOC0yNCkKK2lmICh0ZXN0IC1mIC8uYXR0YmluL3VuYW1lKSA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJUEFUSD0kUEFUSDovLmF0dGJpbiA7IGV4cG9ydCBQQVRICitmaQorCitVTkFNRV9NQUNISU5FPWAodW5hbWUgLW0pIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9NQUNISU5FPXVua25vd24KK1VOQU1FX1JFTEVBU0U9YCh1bmFtZSAtcikgMj4vZGV2L251bGxgIHx8IFVOQU1FX1JFTEVBU0U9dW5rbm93bgorVU5BTUVfU1lTVEVNPWAodW5hbWUgLXMpIDI+L2Rldi9udWxsYCAgfHwgVU5BTUVfU1lTVEVNPXVua25vd24KK1VOQU1FX1ZFUlNJT049YCh1bmFtZSAtdikgMj4vZGV2L251bGxgIHx8IFVOQU1FX1ZFUlNJT049dW5rbm93bgorCitpZiBbICIke1VOQU1FX1NZU1RFTX0iID0gIkxpbnV4IiBdIDsgdGhlbgorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwljYXQgPDwgRU9GID4gJGR1bW15LmMKKwkjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKwkjaWZkZWYgX19VQ0xJQkNfXworCSMgaWZkZWYgX19VQ0xJQkNfQ09ORklHX1ZFUlNJT05fXworCUxJQkM9dWNsaWJjIF9fVUNMSUJDX0NPTkZJR19WRVJTSU9OX18KKwkjIGVsc2UKKwlMSUJDPXVjbGliYworCSMgZW5kaWYKKwkjZWxzZQorCUxJQkM9Z251CisJI2VuZGlmCitFT0YKKwlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCBMSUJDPSB8IHNlZCAtZSAnczogOjpnJ2AKK2ZpCisKKyMgTm90ZTogb3JkZXIgaXMgc2lnbmlmaWNhbnQgLSB0aGUgY2FzZSBicmFuY2hlcyBhcmUgbm90IGV4Y2x1c2l2ZS4KKworY2FzZSAiJHtVTkFNRV9NQUNISU5FfToke1VOQU1FX1NZU1RFTX06JHtVTkFNRV9SRUxFQVNFfToke1VOQU1FX1ZFUlNJT059IiBpbgorICAgICo6TmV0QlNEOio6KikKKwkjIE5ldEJTRCAobmJzZCkgdGFyZ2V0cyBzaG91bGQgKHdoZXJlIGFwcGxpY2FibGUpIG1hdGNoIG9uZSBvcgorCSMgbW9yZSBvZiB0aGUgdHVwcGxlczogKi0qLW5ldGJzZGVsZiosICotKi1uZXRic2Rhb3V0KiwKKwkjICotKi1uZXRic2RlY29mZiogYW5kICotKi1uZXRic2QqLiAgRm9yIHRhcmdldHMgdGhhdCByZWNlbnRseQorCSMgc3dpdGNoZWQgdG8gRUxGLCAqLSotbmV0YnNkKiB3b3VsZCBzZWxlY3QgdGhlIG9sZAorCSMgb2JqZWN0IGZpbGUgZm9ybWF0LiAgVGhpcyBwcm92aWRlcyBib3RoIGZvcndhcmQKKwkjIGNvbXBhdGliaWxpdHkgYW5kIGEgY29uc2lzdGVudCBtZWNoYW5pc20gZm9yIHNlbGVjdGluZyB0aGUKKwkjIG9iamVjdCBmaWxlIGZvcm1hdC4KKwkjCisJIyBOb3RlOiBOZXRCU0QgZG9lc24ndCBwYXJ0aWN1bGFybHkgY2FyZSBhYm91dCB0aGUgdmVuZG9yCisJIyBwb3J0aW9uIG9mIHRoZSBuYW1lLiAgV2UgYWx3YXlzIHNldCBpdCB0byAidW5rbm93biIuCisJc3lzY3RsPSJzeXNjdGwgLW4gaHcubWFjaGluZV9hcmNoIgorCVVOQU1FX01BQ0hJTkVfQVJDSD1gKC9zYmluLyRzeXNjdGwgMj4vZGV2L251bGwgfHwgXAorCSAgICAvdXNyL3NiaW4vJHN5c2N0bCAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd24pYAorCWNhc2UgIiR7VU5BTUVfTUFDSElORV9BUkNIfSIgaW4KKwkgICAgYXJtZWIpIG1hY2hpbmU9YXJtZWItdW5rbm93biA7OworCSAgICBhcm0qKSBtYWNoaW5lPWFybS11bmtub3duIDs7CisJICAgIHNoM2VsKSBtYWNoaW5lPXNobC11bmtub3duIDs7CisJICAgIHNoM2ViKSBtYWNoaW5lPXNoLXVua25vd24gOzsKKwkgICAgc2g1ZWwpIG1hY2hpbmU9c2g1bGUtdW5rbm93biA7OworCSAgICAqKSBtYWNoaW5lPSR7VU5BTUVfTUFDSElORV9BUkNIfS11bmtub3duIDs7CisJZXNhYworCSMgVGhlIE9wZXJhdGluZyBTeXN0ZW0gaW5jbHVkaW5nIG9iamVjdCBmb3JtYXQsIGlmIGl0IGhhcyBzd2l0Y2hlZAorCSMgdG8gRUxGIHJlY2VudGx5LCBvciB3aWxsIGluIHRoZSBmdXR1cmUuCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FX0FSQ0h9IiBpbgorCSAgICBhcm0qfGkzODZ8bTY4a3xuczMya3xzaDMqfHNwYXJjfHZheCkKKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQlpZiBlY2hvIF9fRUxGX18gfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAorCQkJfCBncmVwIC1xIF9fRUxGX18KKwkJdGhlbgorCQkgICAgIyBPbmNlIGFsbCB1dGlsaXRpZXMgY2FuIGJlIEVDT0ZGIChuZXRic2RlY29mZikgb3IgYS5vdXQgKG5ldGJzZGFvdXQpLgorCQkgICAgIyBSZXR1cm4gbmV0YnNkIGZvciBlaXRoZXIuICBGSVg/CisJCSAgICBvcz1uZXRic2QKKwkJZWxzZQorCQkgICAgb3M9bmV0YnNkZWxmCisJCWZpCisJCTs7CisJICAgICopCisJCW9zPW5ldGJzZAorCQk7OworCWVzYWMKKwkjIFRoZSBPUyByZWxlYXNlCisJIyBEZWJpYW4gR05VL05ldEJTRCBtYWNoaW5lcyBoYXZlIGEgZGlmZmVyZW50IHVzZXJsYW5kLCBhbmQKKwkjIHRodXMsIG5lZWQgYSBkaXN0aW5jdCB0cmlwbGV0LiBIb3dldmVyLCB0aGV5IGRvIG5vdCBuZWVkCisJIyBrZXJuZWwgdmVyc2lvbiBpbmZvcm1hdGlvbiwgc28gaXQgY2FuIGJlIHJlcGxhY2VkIHdpdGggYQorCSMgc3VpdGFibGUgdGFnLCBpbiB0aGUgc3R5bGUgb2YgbGludXgtZ251LgorCWNhc2UgIiR7VU5BTUVfVkVSU0lPTn0iIGluCisJICAgIERlYmlhbiopCisJCXJlbGVhc2U9Jy1nbnUnCisJCTs7CisJICAgICopCisJCXJlbGVhc2U9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy1fXS4qL1wuLydgCisJCTs7CisJZXNhYworCSMgU2luY2UgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNOgorCSMgY29udGFpbnMgcmVkdW5kYW50IGluZm9ybWF0aW9uLCB0aGUgc2hvcnRlciBmb3JtOgorCSMgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0gaXMgdXNlZC4KKwllY2hvICIke21hY2hpbmV9LSR7b3N9JHtyZWxlYXNlfSIKKwlleGl0IDs7CisgICAgKjpPcGVuQlNEOio6KikKKwlVTkFNRV9NQUNISU5FX0FSQ0g9YGFyY2ggfCBzZWQgJ3MvT3BlbkJTRC4vLydgCisJZWNobyAke1VOQU1FX01BQ0hJTkVfQVJDSH0tdW5rbm93bi1vcGVuYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOmVra29CU0Q6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWVra29ic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6U29saWRCU0Q6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXNvbGlkYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtYWNwcGM6TWlyQlNEOio6KikKKwllY2hvIHBvd2VycGMtdW5rbm93bi1taXJic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6TWlyQlNEOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1taXJic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGFscGhhOk9TRjE6KjoqKQorCWNhc2UgJFVOQU1FX1JFTEVBU0UgaW4KKwkqNC4wKQorCQlVTkFNRV9SRUxFQVNFPWAvdXNyL3NiaW4vc2l6ZXIgLXYgfCBhd2sgJ3twcmludCAkM30nYAorCQk7OworCSo1LiopCisJCVVOQU1FX1JFTEVBU0U9YC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQ0fSdgCisJCTs7CisJZXNhYworCSMgQWNjb3JkaW5nIHRvIENvbXBhcSwgL3Vzci9zYmluL3BzcmluZm8gaGFzIGJlZW4gYXZhaWxhYmxlIG9uCisJIyBPU0YvMSBhbmQgVHJ1NjQgc3lzdGVtcyBwcm9kdWNlZCBzaW5jZSAxOTk1LiAgSSBob3BlIHRoYXQKKwkjIGNvdmVycyBtb3N0IHN5c3RlbXMgcnVubmluZyB0b2RheS4gIFRoaXMgY29kZSBwaXBlcyB0aGUgQ1BVCisJIyB0eXBlcyB0aHJvdWdoIGhlYWQgLW4gMSwgc28gd2Ugb25seSBkZXRlY3QgdGhlIHR5cGUgb2YgQ1BVIDAuCisJQUxQSEFfQ1BVX1RZUEU9YC91c3Ivc2Jpbi9wc3JpbmZvIC12IHwgc2VkIC1uIC1lICdzL14gIFRoZSBhbHBoYSBcKC4qXCkgcHJvY2Vzc29yLiokL1wxL3AnIHwgaGVhZCAtbiAxYAorCWNhc2UgIiRBTFBIQV9DUFVfVFlQRSIgaW4KKwkgICAgIkVWNCAoMjEwNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGEiIDs7CisJICAgICJFVjQuNSAoMjEwNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGEiIDs7CisJICAgICJMQ0E0ICgyMTA2Ni8yMTA2OCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkVWNSAoMjExNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjUiIDs7CisJICAgICJFVjUuNiAoMjExNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY1NiIgOzsKKwkgICAgIkVWNS42ICgyMTE2NFBDKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhcGNhNTYiIDs7CisJICAgICJFVjUuNyAoMjExNjRQQykiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYXBjYTU3IiA7OworCSAgICAiRVY2ICgyMTI2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NiIgOzsKKwkgICAgIkVWNi43ICgyMTI2NEEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY3IiA7OworCSAgICAiRVY2LjhDQiAoMjEyNjRDKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OCIgOzsKKwkgICAgIkVWNi44QUwgKDIxMjY0QikiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiIDs7CisJICAgICJFVjYuOENYICgyMTI2NEQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY4IiA7OworCSAgICAiRVY2LjlBICgyMTI2NC9FVjY5QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjkiIDs7CisJICAgICJFVjcgKDIxMzY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY3IiA7OworCSAgICAiRVY3LjkgKDIxMzY0QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NzkiIDs7CisJZXNhYworCSMgQSBQbi5uIHZlcnNpb24gaXMgYSBwYXRjaGVkIHZlcnNpb24uCisJIyBBIFZuLm4gdmVyc2lvbiBpcyBhIHJlbGVhc2VkIHZlcnNpb24uCisJIyBBIFRuLm4gdmVyc2lvbiBpcyBhIHJlbGVhc2VkIGZpZWxkIHRlc3QgdmVyc2lvbi4KKwkjIEEgWG4ubiB2ZXJzaW9uIGlzIGFuIHVucmVsZWFzZWQgZXhwZXJpbWVudGFsIGJhc2VsZXZlbC4KKwkjIDEuMiB1c2VzICIxLjIiIGZvciB1bmFtZSAtci4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLW9zZmBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXltQVlRYXS8vJyB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2AKKwkjIFJlc2V0IEVYSVQgdHJhcCBiZWZvcmUgZXhpdGluZyB0byBhdm9pZCBzcHVyaW91cyBub24temVybyBleGl0IGNvZGUuCisJZXhpdGNvZGU9JD8KKwl0cmFwICcnIDAKKwlleGl0ICRleGl0Y29kZSA7OworICAgIEFscGhhXCAqOldpbmRvd3NfTlQqOiopCisJIyBIb3cgZG8gd2Uga25vdyBpdCdzIEludGVyaXggcmF0aGVyIHRoYW4gdGhlIGdlbmVyaWMgUE9TSVggc3Vic3lzdGVtPworCSMgU2hvdWxkIHdlIGNoYW5nZSBVTkFNRV9NQUNISU5FIGJhc2VkIG9uIHRoZSBvdXRwdXQgb2YgdW5hbWUgaW5zdGVhZAorCSMgb2YgdGhlIHNwZWNpZmljIEFscGhhIG1vZGVsPworCWVjaG8gYWxwaGEtcGMtaW50ZXJpeAorCWV4aXQgOzsKKyAgICAyMTA2NDpXaW5kb3dzX05UOjUwOjMpCisJZWNobyBhbHBoYS1kZWMtd2lubnQzLjUKKwlleGl0IDs7CisgICAgQW1pZ2EqOlVOSVhfU3lzdGVtX1Y6NC4wOiopCisJZWNobyBtNjhrLXVua25vd24tc3lzdjQKKwlleGl0IDs7CisgICAgKjpbQWFdbWlnYVtPb11bU3NdOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1hbWlnYW9zCisJZXhpdCA7OworICAgICo6W01tXW9ycGhbT29dW1NzXToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbW9ycGhvcworCWV4aXQgOzsKKyAgICAqOk9TLzM5MDoqOiopCisJZWNobyBpMzcwLWlibS1vcGVuZWRpdGlvbgorCWV4aXQgOzsKKyAgICAqOnovVk06KjoqKQorCWVjaG8gczM5MC1pYm0tenZtb2UKKwlleGl0IDs7CisgICAgKjpPUzQwMDoqOiopCisJZWNobyBwb3dlcnBjLWlibS1vczQwMAorCWV4aXQgOzsKKyAgICBhcm06UklTQyo6MS5bMDEyXSo6Knxhcm06cmlzY2l4OjEuWzAxMl0qOiopCisJZWNobyBhcm0tYWNvcm4tcmlzY2l4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBhcm06cmlzY29zOio6Knxhcm06UklTQ09TOio6KikKKwllY2hvIGFybS11bmtub3duLXJpc2NvcworCWV4aXQgOzsKKyAgICBTUjI/MDE6SEktVVgvTVBQOio6KiB8IFNSODAwMDpISS1VWC9NUFA6KjoqKQorCWVjaG8gaHBwYTEuMS1oaXRhY2hpLWhpdXhtcHAKKwlleGl0IDs7CisgICAgUHlyYW1pZCo6T1N4KjoqOiogfCBNSVMqOk9TeCo6KjoqIHwgTUlTKjpTTVBfREMtT1N4KjoqOiopCisJIyBha2VlQHdwZGlzMDMud3BhZmIuYWYubWlsIChFYXJsZSBGLiBBa2UpIGNvbnRyaWJ1dGVkIE1JUyBhbmQgTklMRS4KKwlpZiB0ZXN0ICJgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsYCIgPSBhdHQgOyB0aGVuCisJCWVjaG8gcHlyYW1pZC1weXJhbWlkLXN5c3YzCisJZWxzZQorCQllY2hvIHB5cmFtaWQtcHlyYW1pZC1ic2QKKwlmaQorCWV4aXQgOzsKKyAgICBOSUxFKjoqOio6ZGNvc3gpCisJZWNobyBweXJhbWlkLXB5cmFtaWQtc3ZyNAorCWV4aXQgOzsKKyAgICBEUlM/NjAwMDp1bml4OjQuMDo2KikKKwllY2hvIHNwYXJjLWljbC1ueDYKKwlleGl0IDs7CisgICAgRFJTPzYwMDA6VU5JWF9TVjo0LjIqOjcqIHwgRFJTPzYwMDA6aXNpczo0LjIqOjcqKQorCWNhc2UgYC91c3IvYmluL3VuYW1lIC1wYCBpbgorCSAgICBzcGFyYykgZWNobyBzcGFyYy1pY2wtbng3OyBleGl0IDs7CisJZXNhYyA7OworICAgIHMzOTB4OlN1bk9TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIHN1bjRIOlN1bk9TOjUuKjoqKQorCWVjaG8gc3BhcmMtaGFsLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIHN1bjQqOlN1bk9TOjUuKjoqIHwgdGFkcG9sZSo6U3VuT1M6NS4qOiopCisJZWNobyBzcGFyYy1zdW4tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgaTg2cGM6QXVyb3JhVVg6NS4qOiogfCBpODZ4ZW46QXVyb3JhVVg6NS4qOiopCisJZWNobyBpMzg2LXBjLWF1cm9yYXV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBpODZwYzpTdW5PUzo1Lio6KiB8IGk4NnhlbjpTdW5PUzo1Lio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJU1VOX0FSQ0g9ImkzODYiCisJIyBJZiB0aGVyZSBpcyBhIGNvbXBpbGVyLCBzZWUgaWYgaXQgaXMgY29uZmlndXJlZCBmb3IgNjQtYml0IG9iamVjdHMuCisJIyBOb3RlIHRoYXQgdGhlIFN1biBjYyBkb2VzIG5vdCB0dXJuIF9fTFA2NF9fIGludG8gMSBsaWtlIGdjYyBkb2VzLgorCSMgVGhpcyB0ZXN0IHdvcmtzIGZvciBib3RoIGNvbXBpbGVycy4KKwlpZiBbICIkQ0NfRk9SX0JVSUxEIiAhPSAnbm9fY29tcGlsZXJfZm91bmQnIF07IHRoZW4KKwkgICAgaWYgKGVjaG8gJyNpZmRlZiBfX2FtZDY0JzsgZWNobyBJU182NEJJVF9BUkNIOyBlY2hvICcjZW5kaWYnKSB8IFwKKwkJKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKKwkJZ3JlcCBJU182NEJJVF9BUkNIID4vZGV2L251bGwKKwkgICAgdGhlbgorCQlTVU5fQVJDSD0ieDg2XzY0IgorCSAgICBmaQorCWZpCisJZWNobyAke1NVTl9BUkNIfS1wYy1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzo2KjoqKQorCSMgQWNjb3JkaW5nIHRvIGNvbmZpZy5zdWIsIHRoaXMgaXMgdGhlIHByb3BlciB3YXkgdG8gY2Fub25pY2FsaXplCisJIyBTdW5PUzYuICBIYXJkIHRvIGd1ZXNzIGV4YWN0bHkgd2hhdCBTdW5PUzYgd2lsbCBiZSBsaWtlLCBidXQKKwkjIGl0J3MgbGlrZWx5IHRvIGJlIG1vcmUgbGlrZSBTb2xhcmlzIHRoYW4gU3VuT1M0LgorCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMzYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIHN1bjQqOlN1bk9TOio6KikKKwljYXNlICJgL3Vzci9iaW4vYXJjaCAta2AiIGluCisJICAgIFNlcmllcyp8UzQqKQorCQlVTkFNRV9SRUxFQVNFPWB1bmFtZSAtdmAKKwkJOzsKKwllc2FjCisJIyBKYXBhbmVzZSBMYW5ndWFnZSB2ZXJzaW9ucyBoYXZlIGEgdmVyc2lvbiBudW1iZXIgbGlrZSBgNC4xLjMtSkwnLgorCWVjaG8gc3BhcmMtc3VuLXN1bm9zYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvLS9fLydgCisJZXhpdCA7OworICAgIHN1bjMqOlN1bk9TOio6KikKKwllY2hvIG02OGstc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBzdW4qOio6NC4yQlNEOiopCisJVU5BTUVfUkVMRUFTRT1gKHNlZCAxcSAvZXRjL21vdGQgfCBhd2sgJ3twcmludCBzdWJzdHIoJDUsMSwzKX0nKSAyPi9kZXYvbnVsbGAKKwl0ZXN0ICJ4JHtVTkFNRV9SRUxFQVNFfSIgPSAieCIgJiYgVU5BTUVfUkVMRUFTRT0zCisJY2FzZSAiYC9iaW4vYXJjaGAiIGluCisJICAgIHN1bjMpCisJCWVjaG8gbTY4ay1zdW4tc3Vub3Mke1VOQU1FX1JFTEVBU0V9CisJCTs7CisJICAgIHN1bjQpCisJCWVjaG8gc3BhcmMtc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCQk7OworCWVzYWMKKwlleGl0IDs7CisgICAgYXVzaHA6U3VuT1M6KjoqKQorCWVjaG8gc3BhcmMtYXVzcGV4LXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAjIFRoZSBzaXR1YXRpb24gZm9yIE1pTlQgaXMgYSBsaXR0bGUgY29uZnVzaW5nLiAgVGhlIG1hY2hpbmUgbmFtZQorICAgICMgY2FuIGJlIHZpcnR1YWxseSBldmVyeXRoaW5nIChldmVyeXRoaW5nIHdoaWNoIGlzIG5vdAorICAgICMgImF0YXJpc3QiIG9yICJhdGFyaXN0ZSIgYXQgbGVhc3Qgc2hvdWxkIGhhdmUgYSBwcm9jZXNzb3IKKyAgICAjID4gbTY4MDAwKS4gIFRoZSBzeXN0ZW0gbmFtZSByYW5nZXMgZnJvbSAiTWlOVCIgb3ZlciAiRnJlZU1pTlQiCisgICAgIyB0byB0aGUgbG93ZXJjYXNlIHZlcnNpb24gIm1pbnQiIChvciAiZnJlZW1pbnQiKS4gIEZpbmFsbHkKKyAgICAjIHRoZSBzeXN0ZW0gbmFtZSAiVE9TIiBkZW5vdGVzIGEgc3lzdGVtIHdoaWNoIGlzIGFjdHVhbGx5IG5vdAorICAgICMgTWlOVC4gIEJ1dCBNaU5UIGlzIGRvd253YXJkIGNvbXBhdGlibGUgdG8gVE9TLCBzbyB0aGlzIHNob3VsZAorICAgICMgYmUgbm8gcHJvYmxlbS4KKyAgICBhdGFyaXN0W2VdOipNaU5UOio6KiB8IGF0YXJpc3RbZV06Km1pbnQ6KjoqIHwgYXRhcmlzdFtlXToqVE9TOio6KikKKwllY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgYXRhcmkqOipNaU5UOio6KiB8IGF0YXJpKjoqbWludDoqOiogfCBhdGFyaXN0W2VdOipUT1M6KjoqKQorCWVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqZmFsY29uKjoqTWlOVDoqOiogfCAqZmFsY29uKjoqbWludDoqOiogfCAqZmFsY29uKjoqVE9TOio6KikKKwllY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWlsYW4qOipNaU5UOio6KiB8IG1pbGFuKjoqbWludDoqOiogfCAqbWlsYW4qOipUT1M6KjoqKQorCWVjaG8gbTY4ay1taWxhbi1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBoYWRlcyo6Kk1pTlQ6KjoqIHwgaGFkZXMqOiptaW50Oio6KiB8ICpoYWRlcyo6KlRPUzoqOiopCisJZWNobyBtNjhrLWhhZGVzLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6Kk1pTlQ6KjoqIHwgKjoqbWludDoqOiogfCAqOipUT1M6KjoqKQorCWVjaG8gbTY4ay11bmtub3duLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG02OGs6bWFjaHRlbjoqOiopCisJZWNobyBtNjhrLWFwcGxlLW1hY2h0ZW4ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHBvd2VycGM6bWFjaHRlbjoqOiopCisJZWNobyBwb3dlcnBjLWFwcGxlLW1hY2h0ZW4ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFJJU0MqOk1hY2g6KjoqKQorCWVjaG8gbWlwcy1kZWMtbWFjaF9ic2Q0LjMKKwlleGl0IDs7CisgICAgUklTQyo6VUxUUklYOio6KikKKwllY2hvIG1pcHMtZGVjLXVsdHJpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgVkFYKjpVTFRSSVgqOio6KikKKwllY2hvIHZheC1kZWMtdWx0cml4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAyMDIwOkNMSVg6KjoqIHwgMjQzMDpDTElYOio6KikKKwllY2hvIGNsaXBwZXItaW50ZXJncmFwaC1jbGl4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtaXBzOio6KjpVTUlQUyB8IG1pcHM6KjoqOlJJU0NvcykKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKyNpZmRlZiBfX2NwbHVzcGx1cworI2luY2x1ZGUgPHN0ZGlvLmg+ICAvKiBmb3IgcHJpbnRmKCkgcHJvdG90eXBlICovCisJaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyNlbHNlCisJaW50IG1haW4gKGFyZ2MsIGFyZ3YpIGludCBhcmdjOyBjaGFyICphcmd2W107IHsKKyNlbmRpZgorCSNpZiBkZWZpbmVkIChob3N0X21pcHMpICYmIGRlZmluZWQgKE1JUFNFQikKKwkjaWYgZGVmaW5lZCAoU1lTVFlQRV9TWVNWKQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzc3lzdlxuIiwgYXJndlsxXSk7IGV4aXQgKDApOworCSNlbmRpZgorCSNpZiBkZWZpbmVkIChTWVNUWVBFX1NWUjQpCisJICBwcmludGYgKCJtaXBzLW1pcHMtcmlzY29zJXNzdnI0XG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7CisJI2VuZGlmCisJI2lmIGRlZmluZWQgKFNZU1RZUEVfQlNENDMpIHx8IGRlZmluZWQoU1lTVFlQRV9CU0QpCisJICBwcmludGYgKCJtaXBzLW1pcHMtcmlzY29zJXNic2RcbiIsIGFyZ3ZbMV0pOyBleGl0ICgwKTsKKwkjZW5kaWYKKwkjZW5kaWYKKwkgIGV4aXQgKC0xKTsKKwl9CitFT0YKKwkkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJgorCSAgZHVtbXlhcmc9YGVjaG8gIiR7VU5BTUVfUkVMRUFTRX0iIHwgc2VkIC1uICdzL1woWzAtOV0qXCkuKi9cMS9wJ2AgJiYKKwkgIFNZU1RFTV9OQU1FPWAkZHVtbXkgJGR1bW15YXJnYCAmJgorCSAgICB7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KKwllY2hvIG1pcHMtbWlwcy1yaXNjb3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIE1vdG9yb2xhOlBvd2VyTUFYX09TOio6KikKKwllY2hvIHBvd2VycGMtbW90b3JvbGEtcG93ZXJtYXgKKwlleGl0IDs7CisgICAgTW90b3JvbGE6Kjo0LjM6UEw4LSopCisJZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcm1heAorCWV4aXQgOzsKKyAgICBOaWdodF9IYXdrOio6KjpQb3dlck1BWF9PUyB8IFN5bmVyZ3k6UG93ZXJNQVhfT1M6KjoqKQorCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJtYXgKKwlleGl0IDs7CisgICAgTmlnaHRfSGF3azpQb3dlcl9VTklYOio6KikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VydW5peAorCWV4aXQgOzsKKyAgICBtODhrOkNYL1VYOjcqOiopCisJZWNobyBtODhrLWhhcnJpcy1jeHV4NworCWV4aXQgOzsKKyAgICBtODhrOio6NCo6UjQqKQorCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2NAorCWV4aXQgOzsKKyAgICBtODhrOio6Myo6UjMqKQorCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2MworCWV4aXQgOzsKKyAgICBBVmlpT046ZGd1eDoqOiopCisJIyBERy9VWCByZXR1cm5zIEFWaWlPTiBmb3IgYWxsIGFyY2hpdGVjdHVyZXMKKwlVTkFNRV9QUk9DRVNTT1I9YC91c3IvYmluL3VuYW1lIC1wYAorCWlmIFsgJFVOQU1FX1BST0NFU1NPUiA9IG1jODgxMDAgXSB8fCBbICRVTkFNRV9QUk9DRVNTT1IgPSBtYzg4MTEwIF0KKwl0aGVuCisJICAgIGlmIFsgJHtUQVJHRVRfQklOQVJZX0lOVEVSRkFDRX14ID0gbTg4a2RndXhlbGZ4IF0gfHwgXAorCSAgICAgICBbICR7VEFSR0VUX0JJTkFSWV9JTlRFUkZBQ0V9eCA9IHggXQorCSAgICB0aGVuCisJCWVjaG8gbTg4ay1kZy1kZ3V4JHtVTkFNRV9SRUxFQVNFfQorCSAgICBlbHNlCisJCWVjaG8gbTg4ay1kZy1kZ3V4YmNzJHtVTkFNRV9SRUxFQVNFfQorCSAgICBmaQorCWVsc2UKKwkgICAgZWNobyBpNTg2LWRnLWRndXgke1VOQU1FX1JFTEVBU0V9CisJZmkKKwlleGl0IDs7CisgICAgTTg4KjpEb2xwaGluT1M6KjoqKQkjIERvbHBoaW5PUyAoU1ZSMykKKwllY2hvIG04OGstZG9scGhpbi1zeXN2MworCWV4aXQgOzsKKyAgICBNODgqOio6UjMqOiopCisJIyBEZWx0YSA4OGsgc3lzdGVtIHJ1bm5pbmcgU1ZSMworCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2MworCWV4aXQgOzsKKyAgICBYRDg4KjoqOio6KikgIyBUZWt0cm9uaXggWEQ4OCBzeXN0ZW0gcnVubmluZyBVVGVrViAoU1ZSMykKKwllY2hvIG04OGstdGVrdHJvbml4LXN5c3YzCisJZXhpdCA7OworICAgIFRlazQzWzAtOV1bMC05XTpVVGVrOio6KikgIyBUZWt0cm9uaXggNDMwMCBzeXN0ZW0gcnVubmluZyBVVGVrIChCU0QpCisJZWNobyBtNjhrLXRla3Ryb25peC1ic2QKKwlleGl0IDs7CisgICAgKjpJUklYKjoqOiopCisJZWNobyBtaXBzLXNnaS1pcml4YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvLS9fL2cnYAorCWV4aXQgOzsKKyAgICA/Pz8/Pz8/PzpBSVg/OlsxMl0uMToyKSAgICMgQUlYIDIuMi4xIG9yIEFJWCAyLjEuMSBpcyBSVC9QQyBBSVguCisJZWNobyByb21wLWlibS1haXggICAgICMgdW5hbWUgLW0gZ2l2ZXMgYW4gOCBoZXgtY29kZSBDUFUgaWQKKwlleGl0IDs7ICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQ6IGVjaG8gIidgdW5hbWUgLXNgJyIgZ2l2ZXMgJ0FJWCAnCisgICAgaSo4NjpBSVg6KjoqKQorCWVjaG8gaTM4Ni1pYm0tYWl4CisJZXhpdCA7OworICAgIGlhNjQ6QUlYOio6KikKKwlpZiBbIC14IC91c3IvYmluL29zbGV2ZWwgXSA7IHRoZW4KKwkJSUJNX1JFVj1gL3Vzci9iaW4vb3NsZXZlbGAKKwllbHNlCisJCUlCTV9SRVY9JHtVTkFNRV9WRVJTSU9OfS4ke1VOQU1FX1JFTEVBU0V9CisJZmkKKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLWFpeCR7SUJNX1JFVn0KKwlleGl0IDs7CisgICAgKjpBSVg6MjozKQorCWlmIGdyZXAgYm9zMzI1IC91c3IvaW5jbHVkZS9zdGRpby5oID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCXNlZCAncy9eCQkvLycgPDwgRU9GID4kZHVtbXkuYworCQkjaW5jbHVkZSA8c3lzL3N5c3RlbWNmZy5oPgorCisJCW1haW4oKQorCQkJeworCQkJaWYgKCFfX3Bvd2VyX3BjKCkpCisJCQkJZXhpdCgxKTsKKwkJCXB1dHMoInBvd2VycGMtaWJtLWFpeDMuMi41Iik7CisJCQlleGl0KDApOworCQkJfQorRU9GCisJCWlmICRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgCisJCXRoZW4KKwkJCWVjaG8gIiRTWVNURU1fTkFNRSIKKwkJZWxzZQorCQkJZWNobyByczYwMDAtaWJtLWFpeDMuMi41CisJCWZpCisJZWxpZiBncmVwIGJvczMyNCAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJZWNobyByczYwMDAtaWJtLWFpeDMuMi40CisJZWxzZQorCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yCisJZmkKKwlleGl0IDs7CisgICAgKjpBSVg6KjpbNDU2N10pCisJSUJNX0NQVV9JRD1gL3Vzci9zYmluL2xzZGV2IC1DIC1jIHByb2Nlc3NvciAtUyBhdmFpbGFibGUgfCBzZWQgMXEgfCBhd2sgJ3sgcHJpbnQgJDEgfSdgCisJaWYgL3Vzci9zYmluL2xzYXR0ciAtRWwgJHtJQk1fQ1BVX0lEfSB8IGdyZXAgJyBQT1dFUicgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCUlCTV9BUkNIPXJzNjAwMAorCWVsc2UKKwkJSUJNX0FSQ0g9cG93ZXJwYworCWZpCisJaWYgWyAteCAvdXNyL2Jpbi9vc2xldmVsIF0gOyB0aGVuCisJCUlCTV9SRVY9YC91c3IvYmluL29zbGV2ZWxgCisJZWxzZQorCQlJQk1fUkVWPSR7VU5BTUVfVkVSU0lPTn0uJHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZWNobyAke0lCTV9BUkNIfS1pYm0tYWl4JHtJQk1fUkVWfQorCWV4aXQgOzsKKyAgICAqOkFJWDoqOiopCisJZWNobyByczYwMDAtaWJtLWFpeAorCWV4aXQgOzsKKyAgICBpYm1ydDo0LjRCU0Q6Knxyb21wLWlibTpCU0Q6KikKKwllY2hvIHJvbXAtaWJtLWJzZDQuNAorCWV4aXQgOzsKKyAgICBpYm1ydDoqQlNEOip8cm9tcC1pYm06QlNEOiopICAgICAgICAgICAgIyBjb3ZlcnMgUlQvUEMgQlNEIGFuZAorCWVjaG8gcm9tcC1pYm0tYnNkJHtVTkFNRV9SRUxFQVNFfSAgICMgNC4zIHdpdGggdW5hbWUgYWRkZWQgdG8KKwlleGl0IDs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJlcG9ydDogcm9tcC1pYm0gQlNEIDQuMworICAgICo6Qk9TWDoqOiopCisJZWNobyByczYwMDAtYnVsbC1ib3N4CisJZXhpdCA7OworICAgIERQWC8yPzAwOkIuTy5TLjoqOiopCisJZWNobyBtNjhrLWJ1bGwtc3lzdjMKKwlleGl0IDs7CisgICAgOTAwMC9bMzRdPz86NC4zYnNkOjEuKjoqKQorCWVjaG8gbTY4ay1ocC1ic2QKKwlleGl0IDs7CisgICAgaHAzMDA6NC40QlNEOio6KiB8IDkwMDAvWzM0XT8/OjQuM2JzZDoyLio6KikKKwllY2hvIG02OGstaHAtYnNkNC40CisJZXhpdCA7OworICAgIDkwMDAvWzM0Njc4XT8/OkhQLVVYOio6KikKKwlIUFVYX1JFVj1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi5bMEJdKi8vJ2AKKwljYXNlICIke1VOQU1FX01BQ0hJTkV9IiBpbgorCSAgICA5MDAwLzMxPyApICAgICAgICAgICAgSFBfQVJDSD1tNjgwMDAgOzsKKwkgICAgOTAwMC9bMzRdPz8gKSAgICAgICAgIEhQX0FSQ0g9bTY4ayA7OworCSAgICA5MDAwL1s2NzhdWzAtOV1bMC05XSkKKwkJaWYgWyAteCAvdXNyL2Jpbi9nZXRjb25mIF07IHRoZW4KKwkJICAgIHNjX2NwdV92ZXJzaW9uPWAvdXNyL2Jpbi9nZXRjb25mIFNDX0NQVV9WRVJTSU9OIDI+L2Rldi9udWxsYAorCQkgICAgc2Nfa2VybmVsX2JpdHM9YC91c3IvYmluL2dldGNvbmYgU0NfS0VSTkVMX0JJVFMgMj4vZGV2L251bGxgCisJCSAgICBjYXNlICIke3NjX2NwdV92ZXJzaW9ufSIgaW4KKwkJICAgICAgNTIzKSBIUF9BUkNIPSJocHBhMS4wIiA7OyAjIENQVV9QQV9SSVNDMV8wCisJCSAgICAgIDUyOCkgSFBfQVJDSD0iaHBwYTEuMSIgOzsgIyBDUFVfUEFfUklTQzFfMQorCQkgICAgICA1MzIpICAgICAgICAgICAgICAgICAgICAgICMgQ1BVX1BBX1JJU0MyXzAKKwkJCWNhc2UgIiR7c2Nfa2VybmVsX2JpdHN9IiBpbgorCQkJICAzMikgSFBfQVJDSD0iaHBwYTIuMG4iIDs7CisJCQkgIDY0KSBIUF9BUkNIPSJocHBhMi4wdyIgOzsKKwkJCSAgJycpIEhQX0FSQ0g9ImhwcGEyLjAiIDs7ICAgIyBIUC1VWCAxMC4yMAorCQkJZXNhYyA7OworCQkgICAgZXNhYworCQlmaQorCQlpZiBbICIke0hQX0FSQ0h9IiA9ICIiIF07IHRoZW4KKwkJICAgIGV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJICAgIHNlZCAncy9eCQkvLycgPDwgRU9GID4kZHVtbXkuYworCisJCSNkZWZpbmUgX0hQVVhfU09VUkNFCisJCSNpbmNsdWRlIDxzdGRsaWIuaD4KKwkJI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisJCWludCBtYWluICgpCisJCXsKKwkJI2lmIGRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKQorCQkgICAgbG9uZyBiaXRzID0gc3lzY29uZihfU0NfS0VSTkVMX0JJVFMpOworCQkjZW5kaWYKKwkJICAgIGxvbmcgY3B1ICA9IHN5c2NvbmYgKF9TQ19DUFVfVkVSU0lPTik7CisKKwkJICAgIHN3aXRjaCAoY3B1KQorCQkJeworCQkJY2FzZSBDUFVfUEFfUklTQzFfMDogcHV0cyAoImhwcGExLjAiKTsgYnJlYWs7CisJCQljYXNlIENQVV9QQV9SSVNDMV8xOiBwdXRzICgiaHBwYTEuMSIpOyBicmVhazsKKwkJCWNhc2UgQ1BVX1BBX1JJU0MyXzA6CisJCSNpZiBkZWZpbmVkKF9TQ19LRVJORUxfQklUUykKKwkJCSAgICBzd2l0Y2ggKGJpdHMpCisJCQkJeworCQkJCWNhc2UgNjQ6IHB1dHMgKCJocHBhMi4wdyIpOyBicmVhazsKKwkJCQljYXNlIDMyOiBwdXRzICgiaHBwYTIuMG4iKTsgYnJlYWs7CisJCQkJZGVmYXVsdDogcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7CisJCQkJfSBicmVhazsKKwkJI2Vsc2UgIC8qICFkZWZpbmVkKF9TQ19LRVJORUxfQklUUykgKi8KKwkJCSAgICBwdXRzICgiaHBwYTIuMCIpOyBicmVhazsKKwkJI2VuZGlmCisJCQlkZWZhdWx0OiBwdXRzICgiaHBwYTEuMCIpOyBicmVhazsKKwkJCX0KKwkJICAgIGV4aXQgKDApOworCQl9CitFT0YKKwkJICAgIChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jIDI+L2Rldi9udWxsKSAmJiBIUF9BUkNIPWAkZHVtbXlgCisJCSAgICB0ZXN0IC16ICIkSFBfQVJDSCIgJiYgSFBfQVJDSD1ocHBhCisJCWZpIDs7CisJZXNhYworCWlmIFsgJHtIUF9BUkNIfSA9ICJocHBhMi4wdyIgXQorCXRoZW4KKwkgICAgZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCisJICAgICMgaHBwYTIuMHctaHAtaHB1eCogaGFzIGEgNjQtYml0IGtlcm5lbCBhbmQgYSBjb21waWxlciBnZW5lcmF0aW5nCisJICAgICMgMzItYml0IGNvZGUuICBocHBhNjQtaHAtaHB1eCogaGFzIHRoZSBzYW1lIGtlcm5lbCBhbmQgYSBjb21waWxlcgorCSAgICAjIGdlbmVyYXRpbmcgNjQtYml0IGNvZGUuICBHTlUgYW5kIEhQIHVzZSBkaWZmZXJlbnQgbm9tZW5jbGF0dXJlOgorCSAgICAjCisJICAgICMgJCBDQ19GT1JfQlVJTEQ9Y2MgLi9jb25maWcuZ3Vlc3MKKwkgICAgIyA9PiBocHBhMi4wdy1ocC1ocHV4MTEuMjMKKwkgICAgIyAkIENDX0ZPUl9CVUlMRD0iY2MgK0RBMi4wdyIgLi9jb25maWcuZ3Vlc3MKKwkgICAgIyA9PiBocHBhNjQtaHAtaHB1eDExLjIzCisKKwkgICAgaWYgZWNobyBfX0xQNjRfXyB8IChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfAorCQlncmVwIC1xIF9fTFA2NF9fCisJICAgIHRoZW4KKwkJSFBfQVJDSD0iaHBwYTIuMHciCisJICAgIGVsc2UKKwkJSFBfQVJDSD0iaHBwYTY0IgorCSAgICBmaQorCWZpCisJZWNobyAke0hQX0FSQ0h9LWhwLWhwdXgke0hQVVhfUkVWfQorCWV4aXQgOzsKKyAgICBpYTY0OkhQLVVYOio6KikKKwlIUFVYX1JFVj1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi5bMEJdKi8vJ2AKKwllY2hvIGlhNjQtaHAtaHB1eCR7SFBVWF9SRVZ9CisJZXhpdCA7OworICAgIDMwNTAqOkhJLVVYOio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkjaW5jbHVkZSA8dW5pc3RkLmg+CisJaW50CisJbWFpbiAoKQorCXsKKwkgIGxvbmcgY3B1ID0gc3lzY29uZiAoX1NDX0NQVV9WRVJTSU9OKTsKKwkgIC8qIFRoZSBvcmRlciBtYXR0ZXJzLCBiZWNhdXNlIENQVV9JU19IUF9NQzY4SyBlcnJvbmVvdXNseSByZXR1cm5zCisJICAgICB0cnVlIGZvciBDUFVfUEFfUklTQzFfMC4gIENQVV9JU19QQV9SSVNDIHJldHVybnMgY29ycmVjdAorCSAgICAgcmVzdWx0cywgaG93ZXZlci4gICovCisJICBpZiAoQ1BVX0lTX1BBX1JJU0MgKGNwdSkpCisJICAgIHsKKwkgICAgICBzd2l0Y2ggKGNwdSkKKwkJeworCQkgIGNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJICBjYXNlIENQVV9QQV9SSVNDMV8xOiBwdXRzICgiaHBwYTEuMS1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCSAgY2FzZSBDUFVfUEFfUklTQzJfMDogcHV0cyAoImhwcGEyLjAtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQkgIGRlZmF1bHQ6IHB1dHMgKCJocHBhLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJfQorCSAgICB9CisJICBlbHNlIGlmIChDUFVfSVNfSFBfTUM2OEsgKGNwdSkpCisJICAgIHB1dHMgKCJtNjhrLWhpdGFjaGktaGl1eHdlMiIpOworCSAgZWxzZSBwdXRzICgidW5rbm93bi1oaXRhY2hpLWhpdXh3ZTIiKTsKKwkgIGV4aXQgKDApOworCX0KK0VPRgorCSRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgICYmCisJCXsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQorCWVjaG8gdW5rbm93bi1oaXRhY2hpLWhpdXh3ZTIKKwlleGl0IDs7CisgICAgOTAwMC83Pz86NC4zYnNkOio6KiB8IDkwMDAvOD9bNzldOjQuM2JzZDoqOiogKQorCWVjaG8gaHBwYTEuMS1ocC1ic2QKKwlleGl0IDs7CisgICAgOTAwMC84Pz86NC4zYnNkOio6KikKKwllY2hvIGhwcGExLjAtaHAtYnNkCisJZXhpdCA7OworICAgICo5Pz8qOk1QRS9pWDoqOiogfCAqMzAwMCo6TVBFL2lYOio6KikKKwllY2hvIGhwcGExLjAtaHAtbXBlaXgKKwlleGl0IDs7CisgICAgaHA3Pz86T1NGMToqOiogfCBocDg/Wzc5XTpPU0YxOio6KiApCisJZWNobyBocHBhMS4xLWhwLW9zZgorCWV4aXQgOzsKKyAgICBocDg/PzpPU0YxOio6KikKKwllY2hvIGhwcGExLjAtaHAtb3NmCisJZXhpdCA7OworICAgIGkqODY6T1NGMToqOiopCisJaWYgWyAteCAvdXNyL3NiaW4vc3lzdmVyc2lvbiBdIDsgdGhlbgorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1vc2YxbWsKKwllbHNlCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW9zZjEKKwlmaQorCWV4aXQgOzsKKyAgICBwYXJpc2MqOkxpdGVzKjoqOiopCisJZWNobyBocHBhMS4xLWhwLWxpdGVzCisJZXhpdCA7OworICAgIEMxKjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzEqOiopCisJZWNobyBjMS1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIEMyKjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzIqOiopCisJaWYgZ2V0c3lzaW5mbyAtZiBzY2FsYXJfYWNjCisJdGhlbiBlY2hvIGMzMi1jb252ZXgtYnNkCisJZWxzZSBlY2hvIGMyLWNvbnZleC1ic2QKKwlmaQorCWV4aXQgOzsKKyAgICBDMzQqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMzQqOiopCisJZWNobyBjMzQtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBDMzgqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMzgqOiopCisJZWNobyBjMzgtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBDNCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkM0KjoqKQorCWVjaG8gYzQtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBDUkFZKlktTVA6KjoqOiopCisJZWNobyB5bXAtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpbQS1aXTkwOio6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gXAorCXwgc2VkIC1lICdzL0NSQVkuKlwoW0EtWl05MFwpL1wxLycgXAorCSAgICAgIC1lIHkvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovIFwKKwkgICAgICAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqVFM6KjoqOiopCisJZWNobyB0OTAtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpUM0U6KjoqOiopCisJZWNobyBhbHBoYWV2NS1jcmF5LXVuaWNvc21rJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqU1YxOio6KjoqKQorCWVjaG8gc3YxLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgICo6VU5JQ09TL21wOio6KikKKwllY2hvIGNyYXludi1jcmF5LXVuaWNvc21wJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIEYzMFswMV06VU5JWF9TeXN0ZW1fVjoqOiogfCBGNzAwOlVOSVhfU3lzdGVtX1Y6KjoqKQorCUZVSklUU1VfUFJPQz1gdW5hbWUgLW0gfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidgCisJRlVKSVRTVV9TWVM9YHVuYW1lIC1wIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzL1wvLy8nYAorCUZVSklUU1VfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvIC9fLydgCisJZWNobyAiJHtGVUpJVFNVX1BST0N9LWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKKwlleGl0IDs7CisgICAgNTAwMDpVTklYX1N5c3RlbV9WOjQuKjoqKQorCUZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy9cLy8vJ2AKKwlGVUpJVFNVX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzLyAvXy8nYAorCWVjaG8gInNwYXJjLWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKKwlleGl0IDs7CisgICAgaSo4NjpCU0QvMzg2Oio6KiB8IGkqODY6QlNEL09TOio6KiB8ICo6QXNjZW5kXCBFbWJlZGRlZC9PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWJzZGkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHNwYXJjKjpCU0QvT1M6KjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1ic2RpJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkJTRC9PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYnNkaSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpGcmVlQlNEOio6KikKKwljYXNlICR7VU5BTUVfTUFDSElORX0gaW4KKwkgICAgcGM5OCkKKwkJZWNobyBpMzg2LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKKwkgICAgYW1kNjQpCisJCWVjaG8geDg2XzY0LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKKwkgICAgKikKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKKwllc2FjCisJZXhpdCA7OworICAgIGkqOkNZR1dJTio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtY3lnd2luCisJZXhpdCA7OworICAgICo6TUlOR1cqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbmd3MzIKKwlleGl0IDs7CisgICAgaSo6d2luZG93czMyKjoqKQorCSMgdW5hbWUgLW0gaW5jbHVkZXMgIi1wYyIgb24gdGhpcyBzeXN0ZW0uCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LW1pbmd3MzIKKwlleGl0IDs7CisgICAgaSo6UFcqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXB3MzIKKwlleGl0IDs7CisgICAgKjpJbnRlcml4KjoqKQorCWNhc2UgJHtVTkFNRV9NQUNISU5FfSBpbgorCSAgICB4ODYpCisJCWVjaG8gaTU4Ni1wYy1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorCQlleGl0IDs7CisJICAgIGF1dGhlbnRpY2FtZCB8IGdlbnVpbmVpbnRlbCB8IEVNNjRUKQorCQllY2hvIHg4Nl82NC11bmtub3duLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CisJCWV4aXQgOzsKKwkgICAgSUE2NCkKKwkJZWNobyBpYTY0LXVua25vd24taW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KKwkJZXhpdCA7OworCWVzYWMgOzsKKyAgICBbMzQ1XTg2OldpbmRvd3NfOTU6KiB8IFszNDVdODY6V2luZG93c185ODoqIHwgWzM0NV04NjpXaW5kb3dzX05UOiopCisJZWNobyBpJHtVTkFNRV9NQUNISU5FfS1wYy1ta3MKKwlleGl0IDs7CisgICAgODY2NDpXaW5kb3dzX05UOiopCisJZWNobyB4ODZfNjQtcGMtbWtzCisJZXhpdCA7OworICAgIGkqOldpbmRvd3NfTlQqOiogfCBQZW50aXVtKjpXaW5kb3dzX05UKjoqKQorCSMgSG93IGRvIHdlIGtub3cgaXQncyBJbnRlcml4IHJhdGhlciB0aGFuIHRoZSBnZW5lcmljIFBPU0lYIHN1YnN5c3RlbT8KKwkjIEl0IGFsc28gY29uZmxpY3RzIHdpdGggcHJlLTIuMCB2ZXJzaW9ucyBvZiBBVCZUIFVXSU4uIFNob3VsZCB3ZQorCSMgVU5BTUVfTUFDSElORSBiYXNlZCBvbiB0aGUgb3V0cHV0IG9mIHVuYW1lIGluc3RlYWQgb2YgaTM4Nj8KKwllY2hvIGk1ODYtcGMtaW50ZXJpeAorCWV4aXQgOzsKKyAgICBpKjpVV0lOKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy11d2luCisJZXhpdCA7OworICAgIGFtZDY0OkNZR1dJTio6KjoqIHwgeDg2XzY0OkNZR1dJTio6KjoqKQorCWVjaG8geDg2XzY0LXVua25vd24tY3lnd2luCisJZXhpdCA7OworICAgIHAqOkNZR1dJTio6KikKKwllY2hvIHBvd2VycGNsZS11bmtub3duLWN5Z3dpbgorCWV4aXQgOzsKKyAgICBwcmVwKjpTdW5PUzo1Lio6KikKKwllY2hvIHBvd2VycGNsZS11bmtub3duLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgICo6R05VOio6KikKKwkjIHRoZSBHTlUgc3lzdGVtCisJZWNobyBgZWNobyAke1VOQU1FX01BQ0hJTkV9fHNlZCAtZSAncyxbLS9dLiokLCwnYC11bmtub3duLWdudWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLC8uKiQsLCdgCisJZXhpdCA7OworICAgICo6R05VLyo6KjoqKQorCSMgb3RoZXIgc3lzdGVtcyB3aXRoIEdOVSBsaWJjIGFuZCB1c2VybGFuZAorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWBlY2hvICR7VU5BTUVfU1lTVEVNfSB8IHNlZCAncyxeW14vXSovLCwnIHwgdHIgJ1tBLVpdJyAnW2Etel0nYGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AtZ251CisJZXhpdCA7OworICAgIGkqODY6TWluaXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5peAorCWV4aXQgOzsKKyAgICBhbHBoYTpMaW51eDoqOiopCisJY2FzZSBgc2VkIC1uICcvXmNwdSBtb2RlbC9zL14uKjogXCguKlwpL1wxL3AnIDwgL3Byb2MvY3B1aW5mb2AgaW4KKwkgIEVWNSkgICBVTkFNRV9NQUNISU5FPWFscGhhZXY1IDs7CisJICBFVjU2KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NTYgOzsKKwkgIFBDQTU2KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKKwkgIFBDQTU3KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKKwkgIEVWNikgICBVTkFNRV9NQUNISU5FPWFscGhhZXY2IDs7CisJICBFVjY3KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NjcgOzsKKwkgIEVWNjgqKSBVTkFNRV9NQUNISU5FPWFscGhhZXY2OCA7OworCWVzYWMKKwlvYmpkdW1wIC0tcHJpdmF0ZS1oZWFkZXJzIC9iaW4vc2ggfCBncmVwIC1xIGxkLnNvLjEKKwlpZiB0ZXN0ICIkPyIgPSAwIDsgdGhlbiBMSUJDPSJnbnVsaWJjMSIgOyBmaQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgYXJtKjpMaW51eDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCWlmIGVjaG8gX19BUk1fRUFCSV9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKKwkgICAgfCBncmVwIC1xIF9fQVJNX0VBQklfXworCXRoZW4KKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWVsc2UKKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251ZWFiaQorCWZpCisJZXhpdCA7OworICAgIGF2cjMyKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBjcmlzOkxpbnV4Oio6KikKKwllY2hvIGNyaXMtYXhpcy1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGNyaXN2MzI6TGludXg6KjoqKQorCWVjaG8gY3Jpc3YzMi1heGlzLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgZnJ2OkxpbnV4Oio6KikKKwllY2hvIGZydi11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgaSo4NjpMaW51eDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI2lmZGVmIF9fZGlldGxpYmNfXworCUxJQkM9ZGlldGxpYmMKKwkjZW5kaWYKK0VPRgorCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeTElCQydgCisJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC0ke0xJQkN9IgorCWV4aXQgOzsKKyAgICBpYTY0OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIG0zMnIqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIG02OCo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgbWlwczpMaW51eDoqOiogfCBtaXBzNjQ6TGludXg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSN1bmRlZiBDUFUKKwkjdW5kZWYgJHtVTkFNRV9NQUNISU5FfQorCSN1bmRlZiAke1VOQU1FX01BQ0hJTkV9ZWwKKwkjaWYgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBkZWZpbmVkKF9fTUlQU0VMKSB8fCBkZWZpbmVkKF9NSVBTRUwpIHx8IGRlZmluZWQoTUlQU0VMKQorCUNQVT0ke1VOQU1FX01BQ0hJTkV9ZWwKKwkjZWxzZQorCSNpZiBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX19NSVBTRUIpIHx8IGRlZmluZWQoX01JUFNFQikgfHwgZGVmaW5lZChNSVBTRUIpCisJQ1BVPSR7VU5BTUVfTUFDSElORX0KKwkjZWxzZQorCUNQVT0KKwkjZW5kaWYKKwkjZW5kaWYKK0VPRgorCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeQ1BVJ2AKKwl0ZXN0IHgiJHtDUFV9IiAhPSB4ICYmIHsgZWNobyAiJHtDUFV9LXVua25vd24tbGludXgtJHtMSUJDfSI7IGV4aXQ7IH0KKwk7OworICAgIG9yMzI6TGludXg6KjoqKQorCWVjaG8gb3IzMi11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgcGFkcmU6TGludXg6KjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgcGFyaXNjNjQ6TGludXg6KjoqIHwgaHBwYTY0OkxpbnV4Oio6KikKKwllY2hvIGhwcGE2NC11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBwYXJpc2M6TGludXg6KjoqIHwgaHBwYTpMaW51eDoqOiopCisJIyBMb29rIGZvciBDUFUgbGV2ZWwKKwljYXNlIGBncmVwICdeY3B1W15hLXpdKjonIC9wcm9jL2NwdWluZm8gMj4vZGV2L251bGwgfCBjdXQgLWQnICcgLWYyYCBpbgorCSAgUEE3KikgZWNobyBocHBhMS4xLXVua25vd24tbGludXgtJHtMSUJDfSA7OworCSAgUEE4KikgZWNobyBocHBhMi4wLXVua25vd24tbGludXgtJHtMSUJDfSA7OworCSAgKikgICAgZWNobyBocHBhLXVua25vd24tbGludXgtJHtMSUJDfSA7OworCWVzYWMKKwlleGl0IDs7CisgICAgcHBjNjQ6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYzY0LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBwcGM6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgczM5MDpMaW51eDoqOiogfCBzMzkweDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1saW51eAorCWV4aXQgOzsKKyAgICBzaDY0KjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBzaCo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgc3BhcmM6TGludXg6KjoqIHwgc3BhcmM2NDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICB0aWxlKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXRpbGVyYS1saW51eC1nbnUKKwlleGl0IDs7CisgICAgdmF4OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgeDg2XzY0OkxpbnV4Oio6KikKKwllY2hvIHg4Nl82NC11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgeHRlbnNhKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBpKjg2OkRZTklYL3B0eDo0KjoqKQorCSMgcHR4IDQuMCBkb2VzIHVuYW1lIC1zIGNvcnJlY3RseSwgd2l0aCBEWU5JWC9wdHggaW4gdGhlcmUuCisJIyBlYXJsaWVyIHZlcnNpb25zIGFyZSBtZXNzZWQgdXAgYW5kIHB1dCB0aGUgbm9kZW5hbWUgaW4gYm90aAorCSMgc3lzbmFtZSBhbmQgbm9kZW5hbWUuCisJZWNobyBpMzg2LXNlcXVlbnQtc3lzdjQKKwlleGl0IDs7CisgICAgaSo4NjpVTklYX1NWOjQuMk1QOjIuKikKKwkjIFVuaXh3YXJlIGlzIGFuIG9mZnNob290IG9mIFNWUjQsIGJ1dCBpdCBoYXMgaXRzIG93biB2ZXJzaW9uCisJIyBudW1iZXIgc2VyaWVzIHN0YXJ0aW5nIHdpdGggMi4uLgorCSMgSSBhbSBub3QgcG9zaXRpdmUgdGhhdCBvdGhlciBTVlI0IHN5c3RlbXMgd29uJ3QgbWF0Y2ggdGhpcywKKwkjIEkganVzdCBoYXZlIHRvIGhvcGUuICAtLSBybXMuCisJIyBVc2Ugc3lzdjQuMnV3Li4uIHNvIHRoYXQgc3lzdjQqIG1hdGNoZXMgaXQuCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3Y0LjJ1dyR7VU5BTUVfVkVSU0lPTn0KKwlleGl0IDs7CisgICAgaSo4NjpPUy8yOio6KikKKwkjIElmIHdlIHdlcmUgYWJsZSB0byBmaW5kIGB1bmFtZScsIHRoZW4gRU1YIFVuaXggY29tcGF0aWJpbGl0eQorCSMgaXMgcHJvYmFibHkgaW5zdGFsbGVkLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1vczItZW14CisJZXhpdCA7OworICAgIGkqODY6WFRTLTMwMDoqOlNUT1ApCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc3RvcAorCWV4aXQgOzsKKyAgICBpKjg2OmF0aGVvczoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYXRoZW9zCisJZXhpdCA7OworICAgIGkqODY6c3lsbGFibGU6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeWxsYWJsZQorCWV4aXQgOzsKKyAgICBpKjg2Okx5bnhPUzoyLio6KiB8IGkqODY6THlueE9TOjMuWzAxXSo6KiB8IGkqODY6THlueE9TOjQuWzAyXSo6KikKKwllY2hvIGkzODYtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGkqODY6KkRPUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1zZG9zZGpncHAKKwlleGl0IDs7CisgICAgaSo4NjoqOjQuKjoqIHwgaSo4NjpTWVNURU1fVjo0Lio6KikKKwlVTkFNRV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAncy9cL01QJC8vJ2AKKwlpZiBncmVwIE5vdmVsbCAvdXNyL2luY2x1ZGUvbGluay5oID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVuaXZlbC1zeXN2JHtVTkFNRV9SRUx9CisJZWxzZQorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdiR7VU5BTUVfUkVMfQorCWZpCisJZXhpdCA7OworICAgIGkqODY6Kjo1Ols2NzhdKikKKwkjIFVuaXhXYXJlIDcueCwgT3BlblVOSVggYW5kIE9wZW5TZXJ2ZXIgNi4KKwljYXNlIGAvYmluL3VuYW1lIC1YIHwgZ3JlcCAiXk1hY2hpbmUiYCBpbgorCSAgICAqNDg2KikJICAgICBVTkFNRV9NQUNISU5FPWk0ODYgOzsKKwkgICAgKlBlbnRpdW0pCSAgICAgVU5BTUVfTUFDSElORT1pNTg2IDs7CisJICAgICpQZW50KnwqQ2VsZXJvbikgVU5BTUVfTUFDSElORT1pNjg2IDs7CisJZXNhYworCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9JHtVTkFNRV9TWVNURU19JHtVTkFNRV9WRVJTSU9OfQorCWV4aXQgOzsKKyAgICBpKjg2Oio6My4yOiopCisJaWYgdGVzdCAtZiAvdXNyL29wdGlvbnMvY2IubmFtZTsgdGhlbgorCQlVTkFNRV9SRUw9YHNlZCAtbiAncy8uKlZlcnNpb24gLy9wJyA8L3Vzci9vcHRpb25zL2NiLm5hbWVgCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1pc2MkVU5BTUVfUkVMCisJZWxpZiAvYmluL3VuYW1lIC1YIDI+L2Rldi9udWxsID4vZGV2L251bGwgOyB0aGVuCisJCVVOQU1FX1JFTD1gKC9iaW4vdW5hbWUgLVh8Z3JlcCBSZWxlYXNlfHNlZCAtZSAncy8uKj0gLy8nKWAKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCBpODA0ODYgPi9kZXYvbnVsbCkgJiYgVU5BTUVfTUFDSElORT1pNDg2CisJCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50aXVtJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk1ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnQgKklJJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk2ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0gUHJvJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk2ODYKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXNjbyRVTkFNRV9SRUwKKwllbHNlCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2MzIKKwlmaQorCWV4aXQgOzsKKyAgICBwYzoqOio6KikKKwkjIExlZnQgaGVyZSBmb3IgY29tcGF0aWJpbGl0eToKKwkjIHVuYW1lIC1tIHByaW50cyBmb3IgREpHUFAgYWx3YXlzICdwYycsIGJ1dCBpdCBwcmludHMgbm90aGluZyBhYm91dAorCSMgdGhlIHByb2Nlc3Nvciwgc28gd2UgcGxheSBzYWZlIGJ5IGFzc3VtaW5nIGk1ODYuCisJIyBOb3RlOiB3aGF0ZXZlciB0aGlzIGlzLCBpdCBNVVNUIGJlIHRoZSBzYW1lIGFzIHdoYXQgY29uZmlnLnN1YgorCSMgcHJpbnRzIGZvciB0aGUgImRqZ3BwIiBob3N0LCBvciBlbHNlIEdEQiBjb25maWd1cnkgd2lsbCBkZWNpZGUgdGhhdAorCSMgdGhpcyBpcyBhIGNyb3NzLWJ1aWxkLgorCWVjaG8gaTU4Ni1wYy1tc2Rvc2RqZ3BwCisJZXhpdCA7OworICAgIEludGVsOk1hY2g6Myo6KikKKwllY2hvIGkzODYtcGMtbWFjaDMKKwlleGl0IDs7CisgICAgcGFyYWdvbjoqOio6KikKKwllY2hvIGk4NjAtaW50ZWwtb3NmMQorCWV4aXQgOzsKKyAgICBpODYwOio6NC4qOiopICMgaTg2MC1TVlI0CisJaWYgZ3JlcCBTdGFyZGVudCAvdXNyL2luY2x1ZGUvc3lzL3VhZG1pbi5oID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKwkgIGVjaG8gaTg2MC1zdGFyZGVudC1zeXN2JHtVTkFNRV9SRUxFQVNFfSAjIFN0YXJkZW50IFZpc3RyYSBpODYwLVNWUjQKKwllbHNlICMgQWRkIG90aGVyIGk4NjAtU1ZSNCB2ZW5kb3JzIGJlbG93IGFzIHRoZXkgYXJlIGRpc2NvdmVyZWQuCisJICBlY2hvIGk4NjAtdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfSAgIyBVbmtub3duIGk4NjAtU1ZSNAorCWZpCisJZXhpdCA7OworICAgIG1pbmkqOkNUSVg6U1lTKjU6KikKKwkjICJtaW5pZnJhbWUiCisJZWNobyBtNjgwMTAtY29udmVyZ2VudC1zeXN2CisJZXhpdCA7OworICAgIG1jNjhrOlVOSVg6U1lTVEVNNTozLjUxbSkKKwllY2hvIG02OGstY29udmVyZ2VudC1zeXN2CisJZXhpdCA7OworICAgIE02ODA/MDpELU5JWDo1LjM6KikKKwllY2hvIG02OGstZGlhYi1kbml4CisJZXhpdCA7OworICAgIE02OCo6KjpSM1ZbNTY3OF0qOiopCisJdGVzdCAtciAvc3lzVjY4ICYmIHsgZWNobyAnbTY4ay1tb3Rvcm9sYS1zeXN2JzsgZXhpdDsgfSA7OworICAgIDNbMzQ1XT8/Oio6NC4wOjMuMCB8IDNbMzRdPz9BOio6NC4wOjMuMCB8IDNbMzRdPz8sKjoqOjQuMDozLjAgfCAzWzM0XT8/Lyo6Kjo0LjA6My4wIHwgNDQwMDoqOjQuMDozLjAgfCA0ODUwOio6NC4wOjMuMCB8IFNLQTQwOio6NC4wOjMuMCB8IFNEUzI6Kjo0LjA6My4wIHwgU0hHMjoqOjQuMDozLjAgfCBTNzUwMSo6Kjo0LjA6My4wKQorCU9TX1JFTD0nJworCXRlc3QgLXIgL2V0Yy8ucmVsaWQgXAorCSYmIE9TX1JFTD0uYHNlZCAtbiAncy9bXiBdKiBbXiBdKiBcKFswLTldWzAtOV1cKS4qL1wxL3AnIDwgL2V0Yy8ucmVsaWRgCisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCisJICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgZW50aXVtID4vZGV2L251bGwgXAorCSAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0gOzsKKyAgICAzWzM0XT8/Oio6NC4wOiogfCAzWzM0XT8/LCo6Kjo0LjA6KikKKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKwkgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NDsgZXhpdDsgfSA7OworICAgIE5DUio6Kjo0LjI6KiB8IE1QUkFTKjoqOjQuMjoqKQorCU9TX1JFTD0nLjMnCisJdGVzdCAtciAvZXRjLy5yZWxpZCBcCisJICAgICYmIE9TX1JFTD0uYHNlZCAtbiAncy9bXiBdKiBbXiBdKiBcKFswLTldWzAtOV1cKS4qL1wxL3AnIDwgL2V0Yy8ucmVsaWRgCisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBlbnRpdW0gPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBwdGVyb24gPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9IDs7CisgICAgbTY4KjpMeW54T1M6Mi4qOiogfCBtNjgqOkx5bnhPUzozLjAqOiopCisJZWNobyBtNjhrLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtYzY4MDMwOlVOSVhfU3lzdGVtX1Y6NC4qOiopCisJZWNobyBtNjhrLWF0YXJpLXN5c3Y0CisJZXhpdCA7OworICAgIFRTVU5BTUk6THlueE9TOjIuKjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHJzNjAwMDpMeW54T1M6Mi4qOiopCisJZWNobyByczYwMDAtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFBvd2VyUEM6THlueE9TOjIuKjoqIHwgUG93ZXJQQzpMeW54T1M6My5bMDFdKjoqIHwgUG93ZXJQQzpMeW54T1M6NC5bMDJdKjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU01bQkVdUzpVTklYX1NWOio6KikKKwllY2hvIG1pcHMtZGRlLXN5c3Yke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFJNKjpSZWxpYW50VU5JWC0qOio6KikKKwllY2hvIG1pcHMtc25pLXN5c3Y0CisJZXhpdCA7OworICAgIFJNKjpTSU5JWC0qOio6KikKKwllY2hvIG1pcHMtc25pLXN5c3Y0CisJZXhpdCA7OworICAgICo6U0lOSVgtKjoqOiopCisJaWYgdW5hbWUgLXAgMj4vZGV2L251bGwgPi9kZXYvbnVsbCA7IHRoZW4KKwkJVU5BTUVfTUFDSElORT1gKHVuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXNuaS1zeXN2NAorCWVsc2UKKwkJZWNobyBuczMyay1zbmktc3lzdgorCWZpCisJZXhpdCA7OworICAgIFBFTlRJVU06Kjo0LjAqOiopCSMgVW5pc3lzIGBDbGVhclBhdGggSE1QIElYIDQwMDAnIFNWUjQvTVAgZWZmb3J0CisJCQkjIHNheXMgPFJpY2hhcmQuTS5CYXJ0ZWxAY2NNYWlsLkNlbnN1cy5HT1Y+CisJZWNobyBpNTg2LXVuaXN5cy1zeXN2NAorCWV4aXQgOzsKKyAgICAqOlVOSVhfU3lzdGVtX1Y6NCo6RlRYKikKKwkjIEZyb20gR2VyYWxkIEhld2VzIDxoZXdlc0BvcGVubWFya2V0LmNvbT4uCisJIyBIb3cgYWJvdXQgZGlmZmVyZW50aWF0aW5nIGJldHdlZW4gc3RyYXR1cyBhcmNoaXRlY3R1cmVzPyAtZGptCisJZWNobyBocHBhMS4xLXN0cmF0dXMtc3lzdjQKKwlleGl0IDs7CisgICAgKjoqOio6RlRYKikKKwkjIEZyb20gc2VhbmZAc3dkYy5zdHJhdHVzLmNvbS4KKwllY2hvIGk4NjAtc3RyYXR1cy1zeXN2NAorCWV4aXQgOzsKKyAgICBpKjg2OlZPUzoqOiopCisJIyBGcm9tIFBhdWwuR3JlZW5Ac3RyYXR1cy5jb20uCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXN0cmF0dXMtdm9zCisJZXhpdCA7OworICAgICo6Vk9TOio6KikKKwkjIEZyb20gUGF1bC5HcmVlbkBzdHJhdHVzLmNvbS4KKwllY2hvIGhwcGExLjEtc3RyYXR1cy12b3MKKwlleGl0IDs7CisgICAgbWM2OCo6QS9VWDoqOiopCisJZWNobyBtNjhrLWFwcGxlLWF1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbmV3cyo6TkVXUy1PUzo2KjoqKQorCWVjaG8gbWlwcy1zb255LW5ld3NvczYKKwlleGl0IDs7CisgICAgUlszNF0wMDA6KlN5c3RlbV9WKjoqOiogfCBSNDAwMDpVTklYX1NZU1Y6KjoqIHwgUiowMDA6VU5JWF9TVjoqOiopCisJaWYgWyAtZCAvdXNyL25lYyBdOyB0aGVuCisJCWVjaG8gbWlwcy1uZWMtc3lzdiR7VU5BTUVfUkVMRUFTRX0KKwllbHNlCisJCWVjaG8gbWlwcy11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9CisJZmkKKwlleGl0IDs7CisgICAgQmVCb3g6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIGhhcmR3YXJlIG1hZGUgYnkgQmUsIFBQQyBvbmx5LgorCWVjaG8gcG93ZXJwYy1iZS1iZW9zCisJZXhpdCA7OworICAgIEJlTWFjOkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBNYWMgb3IgTWFjIGNsb25lLCBQUEMgb25seS4KKwllY2hvIHBvd2VycGMtYXBwbGUtYmVvcworCWV4aXQgOzsKKyAgICBCZVBDOkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBJbnRlbCBQQyBjb21wYXRpYmxlLgorCWVjaG8gaTU4Ni1wYy1iZW9zCisJZXhpdCA7OworICAgIEJlUEM6SGFpa3U6KjoqKQkjIEhhaWt1IHJ1bm5pbmcgb24gSW50ZWwgUEMgY29tcGF0aWJsZS4KKwllY2hvIGk1ODYtcGMtaGFpa3UKKwlleGl0IDs7CisgICAgU1gtNDpTVVBFUi1VWDoqOiopCisJZWNobyBzeDQtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTU6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g1LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC02OlNVUEVSLVVYOio6KikKKwllY2hvIHN4Ni1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtNzpTVVBFUi1VWDoqOiopCisJZWNobyBzeDctbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTg6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g4LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC04UjpTVVBFUi1VWDoqOiopCisJZWNobyBzeDhyLW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBQb3dlcio6UmhhcHNvZHk6KjoqKQorCWVjaG8gcG93ZXJwYy1hcHBsZS1yaGFwc29keSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpSaGFwc29keToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWFwcGxlLXJoYXBzb2R5JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkRhcndpbjoqOiopCisJVU5BTUVfUFJPQ0VTU09SPWB1bmFtZSAtcGAgfHwgVU5BTUVfUFJPQ0VTU09SPXVua25vd24KKwljYXNlICRVTkFNRV9QUk9DRVNTT1IgaW4KKwkgICAgaTM4NikKKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQlpZiBbICIkQ0NfRk9SX0JVSUxEIiAhPSAnbm9fY29tcGlsZXJfZm91bmQnIF07IHRoZW4KKwkJICBpZiAoZWNobyAnI2lmZGVmIF9fTFA2NF9fJzsgZWNobyBJU182NEJJVF9BUkNIOyBlY2hvICcjZW5kaWYnKSB8IFwKKwkJICAgICAgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKKwkJICAgICAgZ3JlcCBJU182NEJJVF9BUkNIID4vZGV2L251bGwKKwkJICB0aGVuCisJCSAgICAgIFVOQU1FX1BST0NFU1NPUj0ieDg2XzY0IgorCQkgIGZpCisJCWZpIDs7CisJICAgIHVua25vd24pIFVOQU1FX1BST0NFU1NPUj1wb3dlcnBjIDs7CisJZXNhYworCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LWFwcGxlLWRhcndpbiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpwcm9jbnRvKjoqOiogfCAqOlFOWDpbMDEyMzQ1Njc4OV0qOiopCisJVU5BTUVfUFJPQ0VTU09SPWB1bmFtZSAtcGAKKwlpZiB0ZXN0ICIkVU5BTUVfUFJPQ0VTU09SIiA9ICJ4ODYiOyB0aGVuCisJCVVOQU1FX1BST0NFU1NPUj1pMzg2CisJCVVOQU1FX01BQ0hJTkU9cGMKKwlmaQorCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LSR7VU5BTUVfTUFDSElORX0tbnRvLXFueCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpRTlg6Kjo0KikKKwllY2hvIGkzODYtcGMtcW54CisJZXhpdCA7OworICAgIE5FTy0/Ok5PTlNUT1BfS0VSTkVMOio6KikKKwllY2hvIG5lby10YW5kZW0tbnNrJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBOU0UtPzpOT05TVE9QX0tFUk5FTDoqOiopCisJZWNobyBuc2UtdGFuZGVtLW5zayR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgTlNSLT86Tk9OU1RPUF9LRVJORUw6KjoqKQorCWVjaG8gbnNyLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6Tm9uU3RvcC1VWDoqOiopCisJZWNobyBtaXBzLWNvbXBhcS1ub25zdG9wdXgKKwlleGl0IDs7CisgICAgQlMyMDAwOlBPU0lYKjoqOiopCisJZWNobyBiczIwMDAtc2llbWVucy1zeXN2CisJZXhpdCA7OworICAgIERTLyo6VU5JWF9TeXN0ZW1fVjoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LSR7VU5BTUVfU1lTVEVNfS0ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UGxhbjk6KjoqKQorCSMgInVuYW1lIC1tIiBpcyBub3QgY29uc2lzdGVudCwgc28gdXNlICRjcHV0eXBlIGluc3RlYWQuIDM4NgorCSMgaXMgY29udmVydGVkIHRvIGkzODYgZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgeDg2CisJIyBvcGVyYXRpbmcgc3lzdGVtcy4KKwlpZiB0ZXN0ICIkY3B1dHlwZSIgPSAiMzg2IjsgdGhlbgorCSAgICBVTkFNRV9NQUNISU5FPWkzODYKKwllbHNlCisJICAgIFVOQU1FX01BQ0hJTkU9IiRjcHV0eXBlIgorCWZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tcGxhbjkKKwlleGl0IDs7CisgICAgKjpUT1BTLTEwOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdG9wczEwCisJZXhpdCA7OworICAgICo6VEVORVg6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi10ZW5leAorCWV4aXQgOzsKKyAgICBLUzEwOlRPUFMtMjA6KjoqIHwgS0wxMDpUT1BTLTIwOio6KiB8IFRZUEU0OlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAtZGVjLXRvcHMyMAorCWV4aXQgOzsKKyAgICBYS0wtMTpUT1BTLTIwOio6KiB8IFRZUEU1OlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAteGtsLXRvcHMyMAorCWV4aXQgOzsKKyAgICAqOlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi10b3BzMjAKKwlleGl0IDs7CisgICAgKjpJVFM6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi1pdHMKKwlleGl0IDs7CisgICAgU0VJOio6KjpTRUlVWCkKKwllY2hvIG1pcHMtc2VpLXNlaXV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkRyYWdvbkZseToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZHJhZ29uZmx5YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYAorCWV4aXQgOzsKKyAgICAqOipWTVM6KjoqKQorCVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FfSIgaW4KKwkgICAgQSopIGVjaG8gYWxwaGEtZGVjLXZtcyA7IGV4aXQgOzsKKwkgICAgSSopIGVjaG8gaWE2NC1kZWMtdm1zIDsgZXhpdCA7OworCSAgICBWKikgZWNobyB2YXgtZGVjLXZtcyA7IGV4aXQgOzsKKwllc2FjIDs7CisgICAgKjpYRU5JWDoqOlN5c1YpCisJZWNobyBpMzg2LXBjLXhlbml4CisJZXhpdCA7OworICAgIGkqODY6c2t5b3M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1za3lvc2BlY2hvICR7VU5BTUVfUkVMRUFTRX1gIHwgc2VkIC1lICdzLyAuKiQvLycKKwlleGl0IDs7CisgICAgaSo4NjpyZG9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtcmRvcworCWV4aXQgOzsKKyAgICBpKjg2OkFST1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1hcm9zCisJZXhpdCA7OworZXNhYworCisjZWNobyAnKE5vIHVuYW1lIGNvbW1hbmQgb3IgdW5hbWUgb3V0cHV0IG5vdCByZWNvZ25pemVkLiknIDE+JjIKKyNlY2hvICIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9OiR7VU5BTUVfVkVSU0lPTn0iIDE+JjIKKworZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorY2F0ID4kZHVtbXkuYyA8PEVPRgorI2lmZGVmIF9TRVFVRU5UXworIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyMgaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNlbmRpZgorbWFpbiAoKQoreworI2lmIGRlZmluZWQgKHNvbnkpCisjaWYgZGVmaW5lZCAoTUlQU0VCKQorICAvKiBCRkQgd2FudHMgImJzZCIgaW5zdGVhZCBvZiAibmV3c29zIi4gIFBlcmhhcHMgQkZEIHNob3VsZCBiZSBjaGFuZ2VkLAorICAgICBJIGRvbid0IGtub3cuLi4uICAqLworICBwcmludGYgKCJtaXBzLXNvbnktYnNkXG4iKTsgZXhpdCAoMCk7CisjZWxzZQorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICBwcmludGYgKCJtNjhrLXNvbnktbmV3c29zJXNcbiIsCisjaWZkZWYgTkVXU09TNAorCSI0IgorI2Vsc2UKKwkiIgorI2VuZGlmCisJKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX19hcm0pICYmIGRlZmluZWQgKF9fYWNvcm4pICYmIGRlZmluZWQgKF9fdW5peCkKKyAgcHJpbnRmICgiYXJtLWFjb3JuLXJpc2NpeFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChocDMwMCkgJiYgIWRlZmluZWQgKGhwdXgpCisgIHByaW50ZiAoIm02OGstaHAtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKE5lWFQpCisjaWYgIWRlZmluZWQgKF9fQVJDSElURUNUVVJFX18pCisjZGVmaW5lIF9fQVJDSElURUNUVVJFX18gIm02OGsiCisjZW5kaWYKKyAgaW50IHZlcnNpb247CisgIHZlcnNpb249YChob3N0aW5mbyB8IHNlZCAtbiAncy8uKk5lWFQgTWFjaCBcKFswLTldKlwpLiovXDEvcCcpIDI+L2Rldi9udWxsYDsKKyAgaWYgKHZlcnNpb24gPCA0KQorICAgIHByaW50ZiAoIiVzLW5leHQtbmV4dHN0ZXAlZFxuIiwgX19BUkNISVRFQ1RVUkVfXywgdmVyc2lvbik7CisgIGVsc2UKKyAgICBwcmludGYgKCIlcy1uZXh0LW9wZW5zdGVwJWRcbiIsIF9fQVJDSElURUNUVVJFX18sIHZlcnNpb24pOworICBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoTVVMVElNQVgpIHx8IGRlZmluZWQgKG4xNikKKyNpZiBkZWZpbmVkIChVTUFYVikKKyAgcHJpbnRmICgibnMzMmstZW5jb3JlLXN5c3ZcbiIpOyBleGl0ICgwKTsKKyNlbHNlCisjaWYgZGVmaW5lZCAoQ01VKQorICBwcmludGYgKCJuczMyay1lbmNvcmUtbWFjaFxuIik7IGV4aXQgKDApOworI2Vsc2UKKyAgcHJpbnRmICgibnMzMmstZW5jb3JlLWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX18zODZCU0RfXykKKyAgcHJpbnRmICgiaTM4Ni1wYy1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoc2VxdWVudCkKKyNpZiBkZWZpbmVkIChpMzg2KQorICBwcmludGYgKCJpMzg2LXNlcXVlbnQtZHluaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2lmIGRlZmluZWQgKG5zMzIwMDApCisgIHByaW50ZiAoIm5zMzJrLXNlcXVlbnQtZHluaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfU0VRVUVOVF8pCisgICAgc3RydWN0IHV0c25hbWUgdW47CisKKyAgICB1bmFtZSgmdW4pOworCisgICAgaWYgKHN0cm5jbXAodW4udmVyc2lvbiwgIlYyIiwgMikgPT0gMCkgeworCXByaW50ZiAoImkzODYtc2VxdWVudC1wdHgyXG4iKTsgZXhpdCAoMCk7CisgICAgfQorICAgIGlmIChzdHJuY21wKHVuLnZlcnNpb24sICJWMSIsIDIpID09IDApIHsgLyogWFhYIGlzIFYxIGNvcnJlY3Q/ICovCisJcHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0eDFcbiIpOyBleGl0ICgwKTsKKyAgICB9CisgICAgcHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0eFxuIik7IGV4aXQgKDApOworCisjZW5kaWYKKworI2lmIGRlZmluZWQgKHZheCkKKyMgaWYgIWRlZmluZWQgKHVsdHJpeCkKKyMgIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorIyAgaWYgZGVmaW5lZCAoQlNEKQorIyAgIGlmIEJTRCA9PSA0MworICAgICAgcHJpbnRmICgidmF4LWRlYy1ic2Q0LjNcbiIpOyBleGl0ICgwKTsKKyMgICBlbHNlCisjICAgIGlmIEJTRCA9PSAxOTkwMDYKKyAgICAgIHByaW50ZiAoInZheC1kZWMtYnNkNC4zcmVub1xuIik7IGV4aXQgKDApOworIyAgICBlbHNlCisgICAgICBwcmludGYgKCJ2YXgtZGVjLWJzZFxuIik7IGV4aXQgKDApOworIyAgICBlbmRpZgorIyAgIGVuZGlmCisjICBlbHNlCisgICAgcHJpbnRmICgidmF4LWRlYy1ic2RcbiIpOyBleGl0ICgwKTsKKyMgIGVuZGlmCisjIGVsc2UKKyAgICBwcmludGYgKCJ2YXgtZGVjLXVsdHJpeFxuIik7IGV4aXQgKDApOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChhbGxpYW50KSAmJiBkZWZpbmVkIChpODYwKQorICBwcmludGYgKCJpODYwLWFsbGlhbnQtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworICBleGl0ICgxKTsKK30KK0VPRgorCiskQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAyPi9kZXYvbnVsbCAmJiBTWVNURU1fTkFNRT1gJGR1bW15YCAmJgorCXsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQorCisjIEFwb2xsb3MgcHV0IHRoZSBzeXN0ZW0gdHlwZSBpbiB0aGUgZW52aXJvbm1lbnQuCisKK3Rlc3QgLWQgL3Vzci9hcG9sbG8gJiYgeyBlY2hvICR7SVNQfS1hcG9sbG8tJHtTWVNUWVBFfTsgZXhpdDsgfQorCisjIENvbnZleCB2ZXJzaW9ucyB0aGF0IHByZWRhdGUgdW5hbWUgY2FuIHVzZSBnZXRzeXNpbmZvKDEpCisKK2lmIFsgLXggL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyBdCit0aGVuCisgICAgY2FzZSBgZ2V0c3lzaW5mbyAtZiBjcHVfdHlwZWAgaW4KKyAgICBjMSopCisJZWNobyBjMS1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIGMyKikKKwlpZiBnZXRzeXNpbmZvIC1mIHNjYWxhcl9hY2MKKwl0aGVuIGVjaG8gYzMyLWNvbnZleC1ic2QKKwllbHNlIGVjaG8gYzItY29udmV4LWJzZAorCWZpCisJZXhpdCA7OworICAgIGMzNCopCisJZWNobyBjMzQtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBjMzgqKQorCWVjaG8gYzM4LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgYzQqKQorCWVjaG8gYzQtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBlc2FjCitmaQorCitjYXQgPiYyIDw8RU9GCiskMDogdW5hYmxlIHRvIGd1ZXNzIHN5c3RlbSB0eXBlCisKK1RoaXMgc2NyaXB0LCBsYXN0IG1vZGlmaWVkICR0aW1lc3RhbXAsIGhhcyBmYWlsZWQgdG8gcmVjb2duaXplCit0aGUgb3BlcmF0aW5nIHN5c3RlbSB5b3UgYXJlIHVzaW5nLiBJdCBpcyBhZHZpc2VkIHRoYXQgeW91Citkb3dubG9hZCB0aGUgbW9zdCB1cCB0byBkYXRlIHZlcnNpb24gb2YgdGhlIGNvbmZpZyBzY3JpcHRzIGZyb20KKworICBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLmd1ZXNzO2hiPUhFQUQKK2FuZAorICBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLnN1YjtoYj1IRUFECisKK0lmIHRoZSB2ZXJzaW9uIHlvdSBydW4gKCQwKSBpcyBhbHJlYWR5IHVwIHRvIGRhdGUsIHBsZWFzZQorc2VuZCB0aGUgZm9sbG93aW5nIGRhdGEgYW5kIGFueSBpbmZvcm1hdGlvbiB5b3UgdGhpbmsgbWlnaHQgYmUKK3BlcnRpbmVudCB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4gaW4gb3JkZXIgdG8gcHJvdmlkZSB0aGUgbmVlZGVkCitpbmZvcm1hdGlvbiB0byBoYW5kbGUgeW91ciBzeXN0ZW0uCisKK2NvbmZpZy5ndWVzcyB0aW1lc3RhbXAgPSAkdGltZXN0YW1wCisKK3VuYW1lIC1tID0gYCh1bmFtZSAtbSkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXIgPSBgKHVuYW1lIC1yKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtcyA9IGAodW5hbWUgLXMpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC12ID0gYCh1bmFtZSAtdikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorCisvdXNyL2Jpbi91bmFtZSAtcCA9IGAoL3Vzci9iaW4vdW5hbWUgLXApIDI+L2Rldi9udWxsYAorL2Jpbi91bmFtZSAtWCAgICAgPSBgKC9iaW4vdW5hbWUgLVgpIDI+L2Rldi9udWxsYAorCitob3N0aW5mbyAgICAgICAgICAgICAgID0gYChob3N0aW5mbykgMj4vZGV2L251bGxgCisvYmluL3VuaXZlcnNlICAgICAgICAgID0gYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbGAKKy91c3IvYmluL2FyY2ggLWsgICAgICAgPSBgKC91c3IvYmluL2FyY2ggLWspIDI+L2Rldi9udWxsYAorL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbGAKKy91c3IvYmluL29zbGV2ZWwgICAgICAgPSBgKC91c3IvYmluL29zbGV2ZWwpIDI+L2Rldi9udWxsYAorL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyA9IGAoL3Vzci9jb252ZXgvZ2V0c3lzaW5mbykgMj4vZGV2L251bGxgCisKK1VOQU1FX01BQ0hJTkUgPSAke1VOQU1FX01BQ0hJTkV9CitVTkFNRV9SRUxFQVNFID0gJHtVTkFNRV9SRUxFQVNFfQorVU5BTUVfU1lTVEVNICA9ICR7VU5BTUVfU1lTVEVNfQorVU5BTUVfVkVSU0lPTiA9ICR7VU5BTUVfVkVSU0lPTn0KK0VPRgorCitleGl0IDEKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInRpbWVzdGFtcD0nIgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQiCisjIHRpbWUtc3RhbXAtZW5kOiAiJyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9jb25maWcuc3ViIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9jb25maWcuc3ViCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhhZDE2N2MKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL2NvbmZpZy5zdWIKQEAgLTAsMCArMSwxNzU3IEBACisjISAvYmluL3NoCisjIENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBzdWJyb3V0aW5lIHNjcmlwdC4KKyMgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisjICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwKKyMgICAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCit0aW1lc3RhbXA9JzIwMTEtMDItMjQnCisKKyMgVGhpcyBmaWxlIGlzIChpbiBwcmluY2lwbGUpIGNvbW1vbiB0byBBTEwgR05VIHNvZnR3YXJlLgorIyBUaGUgcHJlc2VuY2Ugb2YgYSBtYWNoaW5lIGluIHRoaXMgZmlsZSBzdWdnZXN0cyB0aGF0IFNPTUUgR05VIHNvZnR3YXJlCisjIGNhbiBoYW5kbGUgdGhhdCBtYWNoaW5lLiAgSXQgZG9lcyBub3QgaW1wbHkgQUxMIEdOVSBzb2Z0d2FyZSBjYW4uCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisjIDAyMTEwLTEzMDEsIFVTQS4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisKKyMgUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uICBTdWJtaXQgYSBjb250ZXh0CisjIGRpZmYgYW5kIGEgcHJvcGVybHkgZm9ybWF0dGVkIEdOVSBDaGFuZ2VMb2cgZW50cnkuCisjCisjIENvbmZpZ3VyYXRpb24gc3Vicm91dGluZSB0byB2YWxpZGF0ZSBhbmQgY2Fub25pY2FsaXplIGEgY29uZmlndXJhdGlvbiB0eXBlLgorIyBTdXBwbHkgdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIHR5cGUgYXMgYW4gYXJndW1lbnQuCisjIElmIGl0IGlzIGludmFsaWQsIHdlIHByaW50IGFuIGVycm9yIG1lc3NhZ2Ugb24gc3RkZXJyIGFuZCBleGl0IHdpdGggY29kZSAxLgorIyBPdGhlcndpc2UsIHdlIHByaW50IHRoZSBjYW5vbmljYWwgY29uZmlnIHR5cGUgb24gc3Rkb3V0IGFuZCBzdWNjZWVkLgorCisjIFlvdSBjYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIHNjcmlwdCBmcm9tOgorIyBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLnN1YjtoYj1IRUFECisKKyMgVGhpcyBmaWxlIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBzYW1lIGZvciBhbGwgR05VIHBhY2thZ2VzCisjIGFuZCByZWNvZ25pemUgYWxsIHRoZSBDUFUgdHlwZXMsIHN5c3RlbSB0eXBlcyBhbmQgYWxpYXNlcworIyB0aGF0IGFyZSBtZWFuaW5nZnVsIHdpdGggKmFueSogR05VIHNvZnR3YXJlLgorIyBFYWNoIHBhY2thZ2UgaXMgcmVzcG9uc2libGUgZm9yIHJlcG9ydGluZyB3aGljaCB2YWxpZCBjb25maWd1cmF0aW9ucworIyBpdCBkb2VzIG5vdCBzdXBwb3J0LiAgVGhlIHVzZXIgc2hvdWxkIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2gKKyMgYSBmYWlsdXJlIHRvIHN1cHBvcnQgYSB2YWxpZCBjb25maWd1cmF0aW9uIGZyb20gYSBtZWFuaW5nbGVzcworIyBjb25maWd1cmF0aW9uLgorCisjIFRoZSBnb2FsIG9mIHRoaXMgZmlsZSBpcyB0byBtYXAgYWxsIHRoZSB2YXJpb3VzIHZhcmlhdGlvbnMgb2YgYSBnaXZlbgorIyBtYWNoaW5lIHNwZWNpZmljYXRpb24gaW50byBhIHNpbmdsZSBzcGVjaWZpY2F0aW9uIGluIHRoZSBmb3JtOgorIwlDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTQorIyBvciBpbiBzb21lIGNhc2VzLCB0aGUgbmV3ZXIgZm91ci1wYXJ0IGZvcm06CisjCUNQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTQorIyBJdCBpcyB3cm9uZyB0byBlY2hvIGFueSBvdGhlciB0eXBlIG9mIHNwZWNpZmljYXRpb24uCisKK21lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dIENQVS1NRlItT1BTWVMKKyAgICAgICAkMCBbT1BUSU9OXSBBTElBUworCitDYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIG5hbWUuCisKK09wZXJhdGlvbiBtb2RlczoKKyAgLWgsIC0taGVscCAgICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC10LCAtLXRpbWUtc3RhbXAgICBwcmludCBkYXRlIG9mIGxhc3QgbW9kaWZpY2F0aW9uLCB0aGVuIGV4aXQKKyAgLXYsIC0tdmVyc2lvbiAgICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKworUmVwb3J0IGJ1Z3MgYW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiIKKwordmVyc2lvbj0iXAorR05VIGNvbmZpZy5zdWIgKCR0aW1lc3RhbXApCisKK0NvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTword2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgorCitoZWxwPSIKK1RyeSBcYCRtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKworIyBQYXJzZSBjb21tYW5kIGxpbmUKK3doaWxlIHRlc3QgJCMgLWd0IDAgOyBkbworICBjYXNlICQxIGluCisgICAgLS10aW1lLXN0YW1wIHwgLS10aW1lKiB8IC10ICkKKyAgICAgICBlY2hvICIkdGltZXN0YW1wIiA7IGV4aXQgOzsKKyAgICAtLXZlcnNpb24gfCAtdiApCisgICAgICAgZWNobyAiJHZlcnNpb24iIDsgZXhpdCA7OworICAgIC0taGVscCB8IC0taCogfCAtaCApCisgICAgICAgZWNobyAiJHVzYWdlIjsgZXhpdCA7OworICAgIC0tICkgICAgICMgU3RvcCBvcHRpb24gcHJvY2Vzc2luZworICAgICAgIHNoaWZ0OyBicmVhayA7OworICAgIC0gKQkjIFVzZSBzdGRpbiBhcyBpbnB1dC4KKyAgICAgICBicmVhayA7OworICAgIC0qICkKKyAgICAgICBlY2hvICIkbWU6IGludmFsaWQgb3B0aW9uICQxJGhlbHAiCisgICAgICAgZXhpdCAxIDs7CisKKyAgICAqbG9jYWwqKQorICAgICAgICMgRmlyc3QgcGFzcyB0aHJvdWdoIGFueSBsb2NhbCBtYWNoaW5lIHR5cGVzLgorICAgICAgIGVjaG8gJDEKKyAgICAgICBleGl0IDs7CisKKyAgICAqICkKKyAgICAgICBicmVhayA7OworICBlc2FjCitkb25lCisKK2Nhc2UgJCMgaW4KKyAwKSBlY2hvICIkbWU6IG1pc3NpbmcgYXJndW1lbnQkaGVscCIgPiYyCisgICAgZXhpdCAxOzsKKyAxKSA7OworICopIGVjaG8gIiRtZTogdG9vIG1hbnkgYXJndW1lbnRzJGhlbHAiID4mMgorICAgIGV4aXQgMTs7Citlc2FjCisKKyMgU2VwYXJhdGUgd2hhdCB0aGUgdXNlciBnYXZlIGludG8gQ1BVLUNPTVBBTlkgYW5kIE9TIG9yIEtFUk5FTC1PUyAoaWYgYW55KS4KKyMgSGVyZSB3ZSBtdXN0IHJlY29nbml6ZSBhbGwgdGhlIHZhbGlkIEtFUk5FTC1PUyBjb21iaW5hdGlvbnMuCittYXliZV9vcz1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDIvJ2AKK2Nhc2UgJG1heWJlX29zIGluCisgIG50by1xbngqIHwgbGludXgtZ251KiB8IGxpbnV4LWFuZHJvaWQqIHwgbGludXgtZGlldGxpYmMgfCBsaW51eC1uZXdsaWIqIHwgXAorICBsaW51eC11Y2xpYmMqIHwgdWNsaW51eC11Y2xpYmMqIHwgdWNsaW51eC1nbnUqIHwga2ZyZWVic2QqLWdudSogfCBcCisgIGtuZXRic2QqLWdudSogfCBuZXRic2QqLWdudSogfCBcCisgIGtvcGVuc29sYXJpcyotZ251KiB8IFwKKyAgc3Rvcm0tY2hhb3MqIHwgb3MyLWVteCogfCBydG1rLW5vdmEqKQorICAgIG9zPS0kbWF5YmVfb3MKKyAgICBiYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMS8nYAorICAgIDs7CisgICopCisgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy8tW14tXSokLy8nYAorICAgIGlmIFsgJGJhc2ljX21hY2hpbmUgIT0gJDEgXQorICAgIHRoZW4gb3M9YGVjaG8gJDEgfCBzZWQgJ3MvLiotLy0vJ2AKKyAgICBlbHNlIG9zPTsgZmkKKyAgICA7OworZXNhYworCisjIyMgTGV0J3MgcmVjb2duaXplIGNvbW1vbiBtYWNoaW5lcyBhcyBub3QgYmVpbmcgb3BlcmF0aW5nIHN5c3RlbXMgc28KKyMjIyB0aGF0IHRoaW5ncyBsaWtlIGNvbmZpZy5zdWIgZGVjc3RhdGlvbi0zMTAwIHdvcmsuICBXZSBhbHNvCisjIyMgcmVjb2duaXplIHNvbWUgbWFudWZhY3R1cmVycyBhcyBub3QgYmVpbmcgb3BlcmF0aW5nIHN5c3RlbXMsIHNvIHdlCisjIyMgY2FuIHByb3ZpZGUgZGVmYXVsdCBvcGVyYXRpbmcgc3lzdGVtcyBiZWxvdy4KK2Nhc2UgJG9zIGluCisJLXN1bipvcyopCisJCSMgUHJldmVudCBmb2xsb3dpbmcgY2xhdXNlIGZyb20gaGFuZGxpbmcgdGhpcyBpbnZhbGlkIGlucHV0LgorCQk7OworCS1kZWMqIHwgLW1pcHMqIHwgLXNlcXVlbnQqIHwgLWVuY29yZSogfCAtcGM1MzIqIHwgLXNnaSogfCAtc29ueSogfCBcCisJLWF0dCogfCAtNzMwMCogfCAtMzMwMCogfCAtZGVsdGEqIHwgLW1vdG9yb2xhKiB8IC1zdW5bMjM0XSogfCBcCisJLXVuaWNvbSogfCAtaWJtKiB8IC1uZXh0IHwgLWhwIHwgLWlzaSogfCAtYXBvbGxvIHwgLWFsdG9zKiB8IFwKKwktY29udmVyZ2VudCogfCAtbmNyKiB8IC1uZXdzIHwgLTMyKiB8IC0zNjAwKiB8IC0zMTAwKiB8IC1oaXRhY2hpKiB8XAorCS1jWzEyM10qIHwgLWNvbnZleCogfCAtc3VuIHwgLWNyZHMgfCAtb21yb24qIHwgLWRnIHwgLXVsdHJhIHwgLXR0aSogfCBcCisJLWhhcnJpcyB8IC1kb2xwaGluIHwgLWhpZ2hsZXZlbCB8IC1nb3VsZCB8IC1jYm0gfCAtbnMgfCAtbWFzc2NvbXAgfCBcCisJLWFwcGxlIHwgLWF4aXMgfCAta251dGggfCAtY3JheSB8IC1taWNyb2JsYXplKQorCQlvcz0KKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1ibHVlZ2VuZSopCisJCW9zPS1jbmsKKwkJOzsKKwktc2ltIHwgLWNpc2NvIHwgLW9raSB8IC13ZWMgfCAtd2luYm9uZCkKKwkJb3M9CisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktc2NvdXQpCisJCTs7CisJLXdycykKKwkJb3M9LXZ4d29ya3MKKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1jaG9ydXNvcyopCisJCW9zPS1jaG9ydXNvcworCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLWNob3J1c3JkYikKKwkJb3M9LWNob3J1c3JkYgorCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLWhpdXgqKQorCQlvcz0taGl1eHdlMgorCQk7OworCS1zY282KQorCQlvcz0tc2NvNXY2CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNSkKKwkJb3M9LXNjbzMuMnY1CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNCkKKwkJb3M9LXNjbzMuMnY0CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvMy4yLls0LTldKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzL3NjbzMuMi4vc2NvMy4ydi8nYAorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzMuMnZbNC05XSopCisJCSMgRG9uJ3QgZm9yZ2V0IHZlcnNpb24gaWYgaXQgaXMgMy4ydjQgb3IgbmV3ZXIuCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNXY2KikKKwkJIyBEb24ndCBmb3JnZXQgdmVyc2lvbiBpZiBpdCBpcyAzLjJ2NCBvciBuZXdlci4KKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY28qKQorCQlvcz0tc2NvMy4ydjIKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS11ZGsqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWlzYykKKwkJb3M9LWlzYzIuMgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWNsaXgqKQorCQliYXNpY19tYWNoaW5lPWNsaXBwZXItaW50ZXJncmFwaAorCQk7OworCS1pc2MqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWx5bngqKQorCQlvcz0tbHlueG9zCisJCTs7CisJLXB0eCopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtc2VxdWVudC8nYAorCQk7OworCS13aW5kb3dzbnQqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3Mvd2luZG93c250L3dpbm50LydgCisJCTs7CisJLXBzb3MqKQorCQlvcz0tcHNvcworCQk7OworCS1taW50IHwgLW1pbnRbMC05XSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hdGFyaQorCQlvcz0tbWludAorCQk7OworZXNhYworCisjIERlY29kZSBhbGlhc2VzIGZvciBjZXJ0YWluIENQVS1DT01QQU5ZIGNvbWJpbmF0aW9ucy4KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGhvdXQgY29tcGFueSBuYW1lLgorCSMgU29tZSBhcmUgb21pdHRlZCBoZXJlIGJlY2F1c2UgdGhleSBoYXZlIHNwZWNpYWwgbWVhbmluZ3MgYmVsb3cuCisJMTc1MGEgfCA1ODAgXAorCXwgYTI5ayBcCisJfCBhbHBoYSB8IGFscGhhZXZbNC04XSB8IGFscGhhZXY1NiB8IGFscGhhZXY2Wzc4XSB8IGFscGhhcGNhNVs2N10gXAorCXwgYWxwaGE2NCB8IGFscGhhNjRldls0LThdIHwgYWxwaGE2NGV2NTYgfCBhbHBoYTY0ZXY2Wzc4XSB8IGFscGhhNjRwY2E1WzY3XSBcCisJfCBhbTMzXzIuMCBcCisJfCBhcmMgfCBhcm0gfCBhcm1bYmxdZSB8IGFybWVbbGJdIHwgYXJtdlsyMzQ1XSB8IGFybXZbMzQ1XVtsYl0gfCBhdnIgfCBhdnIzMiBcCisJfCBiZmluIFwKKwl8IGM0eCB8IGNsaXBwZXIgXAorCXwgZDEwdiB8IGQzMHYgfCBkbHggfCBkc3AxNnh4IHwgZHZwIFwKKwl8IGZpZG8gfCBmcjMwIHwgZnJ2IFwKKwl8IGg4MzAwIHwgaDg1MDAgfCBocHBhIHwgaHBwYTEuWzAxXSB8IGhwcGEyLjAgfCBocHBhMi4wW253XSB8IGhwcGE2NCBcCisJfCBpMzcwIHwgaTg2MCB8IGk5NjAgfCBpYTY0IFwKKwl8IGlwMmsgfCBpcTIwMDAgXAorCXwgbG0zMiBcCisJfCBtMzJjIHwgbTMyciB8IG0zMnJsZSB8IG02ODAwMCB8IG02OGsgfCBtODhrIFwKKwl8IG1heHEgfCBtYiB8IG1pY3JvYmxhemUgfCBtY29yZSB8IG1lcCB8IG1ldGFnIFwKKwl8IG1pcHMgfCBtaXBzYmUgfCBtaXBzZWIgfCBtaXBzZWwgfCBtaXBzbGUgXAorCXwgbWlwczE2IFwKKwl8IG1pcHM2NCB8IG1pcHM2NGVsIFwKKwl8IG1pcHM2NG9jdGVvbiB8IG1pcHM2NG9jdGVvbmVsIFwKKwl8IG1pcHM2NG9yaW9uIHwgbWlwczY0b3Jpb25lbCBcCisJfCBtaXBzNjRyNTkwMCB8IG1pcHM2NHI1OTAwZWwgXAorCXwgbWlwczY0dnIgfCBtaXBzNjR2cmVsIFwKKwl8IG1pcHM2NHZyNDEwMCB8IG1pcHM2NHZyNDEwMGVsIFwKKwl8IG1pcHM2NHZyNDMwMCB8IG1pcHM2NHZyNDMwMGVsIFwKKwl8IG1pcHM2NHZyNTAwMCB8IG1pcHM2NHZyNTAwMGVsIFwKKwl8IG1pcHM2NHZyNTkwMCB8IG1pcHM2NHZyNTkwMGVsIFwKKwl8IG1pcHNpc2EzMiB8IG1pcHNpc2EzMmVsIFwKKwl8IG1pcHNpc2EzMnIyIHwgbWlwc2lzYTMycjJlbCBcCisJfCBtaXBzaXNhNjQgfCBtaXBzaXNhNjRlbCBcCisJfCBtaXBzaXNhNjRyMiB8IG1pcHNpc2E2NHIyZWwgXAorCXwgbWlwc2lzYTY0c2IxIHwgbWlwc2lzYTY0c2IxZWwgXAorCXwgbWlwc2lzYTY0c3I3MWsgfCBtaXBzaXNhNjRzcjcxa2VsIFwKKwl8IG1pcHN0eDM5IHwgbWlwc3R4MzllbCBcCisJfCBtbjEwMjAwIHwgbW4xMDMwMCBcCisJfCBtb3hpZSBcCisJfCBtdCBcCisJfCBtc3A0MzAgXAorCXwgbmRzMzIgfCBuZHMzMmxlIHwgbmRzMzJiZSBcCisJfCBuaW9zIHwgbmlvczIgXAorCXwgbnMxNmsgfCBuczMyayBcCisJfCBvcjMyIFwKKwl8IHBkcDEwIHwgcGRwMTEgfCBwaiB8IHBqbCBcCisJfCBwb3dlcnBjIHwgcG93ZXJwYzY0IHwgcG93ZXJwYzY0bGUgfCBwb3dlcnBjbGUgfCBwcGNiZSBcCisJfCBweXJhbWlkIFwKKwl8IHJ4IFwKKwl8IHNjb3JlIFwKKwl8IHNoIHwgc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMjRdYWViIHwgc2hbMjNdZSB8IHNoWzM0XWViIHwgc2hlYiB8IHNoYmUgfCBzaGxlIHwgc2hbMTIzNF1sZSB8IHNoM2VsZSBcCisJfCBzaDY0IHwgc2g2NGxlIFwKKwl8IHNwYXJjIHwgc3BhcmM2NCB8IHNwYXJjNjRiIHwgc3BhcmM2NHYgfCBzcGFyYzg2eCB8IHNwYXJjbGV0IHwgc3BhcmNsaXRlIFwKKwl8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgfCBzcGFyY3Y5diBcCisJfCBzcHUgfCBzdHJvbmdhcm0gXAorCXwgdGFob2UgfCB0aHVtYiB8IHRpYzR4IHwgdGljNTR4IHwgdGljNTV4IHwgdGljNnggfCB0aWM4MCB8IHRyb24gXAorCXwgdWJpY29tMzIgXAorCXwgdjg1MCB8IHY4NTBlIFwKKwl8IHdlMzJrIFwKKwl8IHg4NiB8IHhjMTZ4IHwgeHNjYWxlIHwgeHNjYWxlZVtibF0gfCB4c3Rvcm15MTYgfCB4dGVuc2EgXAorCXwgejhrIHwgejgwKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJOzsKKwljNTR4KQorCQliYXNpY19tYWNoaW5lPXRpYzU0eC11bmtub3duCisJCTs7CisJYzU1eCkKKwkJYmFzaWNfbWFjaGluZT10aWM1NXgtdW5rbm93bgorCQk7OworCWM2eCkKKwkJYmFzaWNfbWFjaGluZT10aWM2eC11bmtub3duCisJCTs7CisJbTY4MTEgfCBtNjhoYzExIHwgbTY4MTIgfCBtNjhoYzEyIHwgcGljb2NoaXApCisJCSMgTW90b3JvbGEgNjhIQzExLzEyLgorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJb3M9LW5vbmUKKwkJOzsKKwltODgxMTAgfCBtNjgwWzEyMzQ2XTAgfCBtNjgzPzIgfCBtNjgzNjAgfCBtNTIwMCB8IHY3MCB8IHc2NSB8IHo4aykKKwkJOzsKKwltczEpCisJCWJhc2ljX21hY2hpbmU9bXQtdW5rbm93bgorCQk7OworCisJIyBXZSB1c2UgYHBjJyByYXRoZXIgdGhhbiBgdW5rbm93bicKKwkjIGJlY2F1c2UgKDEpIHRoYXQncyB3aGF0IHRoZXkgbm9ybWFsbHkgYXJlLCBhbmQKKwkjICgyKSB0aGUgd29yZCAidW5rbm93biIgdGVuZHMgdG8gY29uZnVzZSBiZWdpbm5pbmcgdXNlcnMuCisJaSo4NiB8IHg4Nl82NCkKKwkgIGJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtcGMKKwkgIDs7CisJIyBPYmplY3QgaWYgbW9yZSB0aGFuIG9uZSBjb21wYW55IG5hbWUgd29yZC4KKwkqLSotKikKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBtYWNoaW5lIFxgJGJhc2ljX21hY2hpbmVcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aCBjb21wYW55IG5hbWUuCisJNTgwLSogXAorCXwgYTI5ay0qIFwKKwl8IGFscGhhLSogfCBhbHBoYWV2WzQtOF0tKiB8IGFscGhhZXY1Ni0qIHwgYWxwaGFldjZbNzhdLSogXAorCXwgYWxwaGE2NC0qIHwgYWxwaGE2NGV2WzQtOF0tKiB8IGFscGhhNjRldjU2LSogfCBhbHBoYTY0ZXY2Wzc4XS0qIFwKKwl8IGFscGhhcGNhNVs2N10tKiB8IGFscGhhNjRwY2E1WzY3XS0qIHwgYXJjLSogXAorCXwgYXJtLSogIHwgYXJtYmUtKiB8IGFybWxlLSogfCBhcm1lYi0qIHwgYXJtdiotKiBcCisJfCBhdnItKiB8IGF2cjMyLSogXAorCXwgYmZpbi0qIHwgYnMyMDAwLSogXAorCXwgY1sxMjNdKiB8IGMzMC0qIHwgW2NqdF05MC0qIHwgYzR4LSogXAorCXwgY2xpcHBlci0qIHwgY3JheW52LSogfCBjeWRyYS0qIFwKKwl8IGQxMHYtKiB8IGQzMHYtKiB8IGRseC0qIFwKKwl8IGVseHNpLSogXAorCXwgZjMwWzAxXS0qIHwgZjcwMC0qIHwgZmlkby0qIHwgZnIzMC0qIHwgZnJ2LSogfCBmeDgwLSogXAorCXwgaDgzMDAtKiB8IGg4NTAwLSogXAorCXwgaHBwYS0qIHwgaHBwYTEuWzAxXS0qIHwgaHBwYTIuMC0qIHwgaHBwYTIuMFtud10tKiB8IGhwcGE2NC0qIFwKKwl8IGkqODYtKiB8IGk4NjAtKiB8IGk5NjAtKiB8IGlhNjQtKiBcCisJfCBpcDJrLSogfCBpcTIwMDAtKiBcCisJfCBsbTMyLSogXAorCXwgbTMyYy0qIHwgbTMyci0qIHwgbTMycmxlLSogXAorCXwgbTY4MDAwLSogfCBtNjgwWzAxMjM0Nl0wLSogfCBtNjgzNjAtKiB8IG02ODM/Mi0qIHwgbTY4ay0qIFwKKwl8IG04ODExMC0qIHwgbTg4ay0qIHwgbWF4cS0qIHwgbWNvcmUtKiB8IG1ldGFnLSogfCBtaWNyb2JsYXplLSogXAorCXwgbWlwcy0qIHwgbWlwc2JlLSogfCBtaXBzZWItKiB8IG1pcHNlbC0qIHwgbWlwc2xlLSogXAorCXwgbWlwczE2LSogXAorCXwgbWlwczY0LSogfCBtaXBzNjRlbC0qIFwKKwl8IG1pcHM2NG9jdGVvbi0qIHwgbWlwczY0b2N0ZW9uZWwtKiBcCisJfCBtaXBzNjRvcmlvbi0qIHwgbWlwczY0b3Jpb25lbC0qIFwKKwl8IG1pcHM2NHI1OTAwLSogfCBtaXBzNjRyNTkwMGVsLSogXAorCXwgbWlwczY0dnItKiB8IG1pcHM2NHZyZWwtKiBcCisJfCBtaXBzNjR2cjQxMDAtKiB8IG1pcHM2NHZyNDEwMGVsLSogXAorCXwgbWlwczY0dnI0MzAwLSogfCBtaXBzNjR2cjQzMDBlbC0qIFwKKwl8IG1pcHM2NHZyNTAwMC0qIHwgbWlwczY0dnI1MDAwZWwtKiBcCisJfCBtaXBzNjR2cjU5MDAtKiB8IG1pcHM2NHZyNTkwMGVsLSogXAorCXwgbWlwc2lzYTMyLSogfCBtaXBzaXNhMzJlbC0qIFwKKwl8IG1pcHNpc2EzMnIyLSogfCBtaXBzaXNhMzJyMmVsLSogXAorCXwgbWlwc2lzYTY0LSogfCBtaXBzaXNhNjRlbC0qIFwKKwl8IG1pcHNpc2E2NHIyLSogfCBtaXBzaXNhNjRyMmVsLSogXAorCXwgbWlwc2lzYTY0c2IxLSogfCBtaXBzaXNhNjRzYjFlbC0qIFwKKwl8IG1pcHNpc2E2NHNyNzFrLSogfCBtaXBzaXNhNjRzcjcxa2VsLSogXAorCXwgbWlwc3R4MzktKiB8IG1pcHN0eDM5ZWwtKiBcCisJfCBtbWl4LSogXAorCXwgbXQtKiBcCisJfCBtc3A0MzAtKiBcCisJfCBuZHMzMi0qIHwgbmRzMzJsZS0qIHwgbmRzMzJiZS0qIFwKKwl8IG5pb3MtKiB8IG5pb3MyLSogXAorCXwgbm9uZS0qIHwgbnAxLSogfCBuczE2ay0qIHwgbnMzMmstKiBcCisJfCBvcmlvbi0qIFwKKwl8IHBkcDEwLSogfCBwZHAxMS0qIHwgcGotKiB8IHBqbC0qIHwgcG4tKiB8IHBvd2VyLSogXAorCXwgcG93ZXJwYy0qIHwgcG93ZXJwYzY0LSogfCBwb3dlcnBjNjRsZS0qIHwgcG93ZXJwY2xlLSogfCBwcGNiZS0qIFwKKwl8IHB5cmFtaWQtKiBcCisJfCByb21wLSogfCByczYwMDAtKiB8IHJ4LSogXAorCXwgc2gtKiB8IHNoWzEyMzRdLSogfCBzaFsyNF1hLSogfCBzaFsyNF1hZWItKiB8IHNoWzIzXWUtKiB8IHNoWzM0XWViLSogfCBzaGViLSogfCBzaGJlLSogXAorCXwgc2hsZS0qIHwgc2hbMTIzNF1sZS0qIHwgc2gzZWxlLSogfCBzaDY0LSogfCBzaDY0bGUtKiBcCisJfCBzcGFyYy0qIHwgc3BhcmM2NC0qIHwgc3BhcmM2NGItKiB8IHNwYXJjNjR2LSogfCBzcGFyYzg2eC0qIHwgc3BhcmNsZXQtKiBcCisJfCBzcGFyY2xpdGUtKiBcCisJfCBzcGFyY3Y4LSogfCBzcGFyY3Y5LSogfCBzcGFyY3Y5Yi0qIHwgc3BhcmN2OXYtKiB8IHN0cm9uZ2FybS0qIHwgc3YxLSogfCBzeD8tKiBcCisJfCB0YWhvZS0qIHwgdGh1bWItKiBcCisJfCB0aWMzMC0qIHwgdGljNHgtKiB8IHRpYzU0eC0qIHwgdGljNTV4LSogfCB0aWM2eC0qIHwgdGljODAtKiBcCisJfCB0aWxlLSogfCB0aWxlZ3gtKiBcCisJfCB0cm9uLSogXAorCXwgdWJpY29tMzItKiBcCisJfCB2ODUwLSogfCB2ODUwZS0qIHwgdmF4LSogXAorCXwgd2UzMmstKiBcCisJfCB4ODYtKiB8IHg4Nl82NC0qIHwgeGMxNngtKiB8IHhwczEwMC0qIHwgeHNjYWxlLSogfCB4c2NhbGVlW2JsXS0qIFwKKwl8IHhzdG9ybXkxNi0qIHwgeHRlbnNhKi0qIFwKKwl8IHltcC0qIFwKKwl8IHo4ay0qIHwgejgwLSopCisJCTs7CisJIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRob3V0IGNvbXBhbnkgbmFtZSwgd2l0aCBnbG9iIG1hdGNoLgorCXh0ZW5zYSopCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQk7OworCSMgUmVjb2duaXplIHRoZSB2YXJpb3VzIG1hY2hpbmUgbmFtZXMgYW5kIGFsaWFzZXMgd2hpY2ggc3RhbmQKKwkjIGZvciBhIENQVSB0eXBlIGFuZCBhIGNvbXBhbnkgYW5kIHNvbWV0aW1lcyBldmVuIGFuIE9TLgorCTM4NmJzZCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LWJzZAorCQk7OworCTNiMSB8IDczMDAgfCA3MzAwLWF0dCB8IGF0dC03MzAwIHwgcGM3MzAwIHwgc2FmYXJpIHwgdW5peHBjKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1hdHQKKwkJOzsKKwkzYiopCisJCWJhc2ljX21hY2hpbmU9d2UzMmstYXR0CisJCTs7CisJYTI5a2hpZikKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tdWRpCisJCTs7CisJYWJhY3VzKQorCQliYXNpY19tYWNoaW5lPWFiYWN1cy11bmtub3duCisJCTs7CisJYWRvYmU2OGspCisJCWJhc2ljX21hY2hpbmU9bTY4MDEwLWFkb2JlCisJCW9zPS1zY291dAorCQk7OworCWFsbGlhbnQgfCBmeDgwKQorCQliYXNpY19tYWNoaW5lPWZ4ODAtYWxsaWFudAorCQk7OworCWFsdG9zIHwgYWx0b3MzMDY4KQorCQliYXNpY19tYWNoaW5lPW02OGstYWx0b3MKKwkJOzsKKwlhbTI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLW5vbmUKKwkJb3M9LWJzZAorCQk7OworCWFtZDY0KQorCQliYXNpY19tYWNoaW5lPXg4Nl82NC1wYworCQk7OworCWFtZDY0LSopCisJCWJhc2ljX21hY2hpbmU9eDg2XzY0LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJYW1kYWhsKQorCQliYXNpY19tYWNoaW5lPTU4MC1hbWRhaGwKKwkJb3M9LXN5c3YKKwkJOzsKKwlhbWlnYSB8IGFtaWdhLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCTs7CisJYW1pZ2FvcyB8IGFtaWdhZG9zKQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQlvcz0tYW1pZ2FvcworCQk7OworCWFtaWdhdW5peCB8IGFtaXgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1zeXN2NAorCQk7OworCWFwb2xsbzY4KQorCQliYXNpY19tYWNoaW5lPW02OGstYXBvbGxvCisJCW9zPS1zeXN2CisJCTs7CisJYXBvbGxvNjhic2QpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcG9sbG8KKwkJb3M9LWJzZAorCQk7OworCWFyb3MpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tYXJvcworCQk7OworCWF1eCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwcGxlCisJCW9zPS1hdXgKKwkJOzsKKwliYWxhbmNlKQorCQliYXNpY19tYWNoaW5lPW5zMzJrLXNlcXVlbnQKKwkJb3M9LWR5bml4CisJCTs7CisJYmxhY2tmaW4pCisJCWJhc2ljX21hY2hpbmU9YmZpbi11bmtub3duCisJCW9zPS1saW51eAorCQk7OworCWJsYWNrZmluLSopCisJCWJhc2ljX21hY2hpbmU9YmZpbi1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQlvcz0tbGludXgKKwkJOzsKKwlibHVlZ2VuZSopCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1pYm0KKwkJb3M9LWNuaworCQk7OworCWM1NHgtKikKKwkJYmFzaWNfbWFjaGluZT10aWM1NHgtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwljNTV4LSopCisJCWJhc2ljX21hY2hpbmU9dGljNTV4LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJYzZ4LSopCisJCWJhc2ljX21hY2hpbmU9dGljNngtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwljOTApCisJCWJhc2ljX21hY2hpbmU9YzkwLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCWNlZ2NjKQorCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCisJCW9zPS1jZWdjYworCQk7OworCWNvbnZleC1jMSkKKwkJYmFzaWNfbWFjaGluZT1jMS1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMikKKwkJYmFzaWNfbWFjaGluZT1jMi1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMzIpCisJCWJhc2ljX21hY2hpbmU9YzMyLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMzNCkKKwkJYmFzaWNfbWFjaGluZT1jMzQtY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzM4KQorCQliYXNpY19tYWNoaW5lPWMzOC1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNyYXkgfCBqOTApCisJCWJhc2ljX21hY2hpbmU9ajkwLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCWNyYXludikKKwkJYmFzaWNfbWFjaGluZT1jcmF5bnYtY3JheQorCQlvcz0tdW5pY29zbXAKKwkJOzsKKwljcjE2IHwgY3IxNi0qKQorCQliYXNpY19tYWNoaW5lPWNyMTYtdW5rbm93bgorCQlvcz0tZWxmCisJCTs7CisJY3JkcyB8IHVub3MpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1jcmRzCisJCTs7CisJY3Jpc3YzMiB8IGNyaXN2MzItKiB8IGV0cmF4ZnMqKQorCQliYXNpY19tYWNoaW5lPWNyaXN2MzItYXhpcworCQk7OworCWNyaXMgfCBjcmlzLSogfCBldHJheCopCisJCWJhc2ljX21hY2hpbmU9Y3Jpcy1heGlzCisJCTs7CisJY3J4KQorCQliYXNpY19tYWNoaW5lPWNyeC11bmtub3duCisJCW9zPS1lbGYKKwkJOzsKKwlkYTMwIHwgZGEzMC0qKQorCQliYXNpY19tYWNoaW5lPW02OGstZGEzMAorCQk7OworCWRlY3N0YXRpb24gfCBkZWNzdGF0aW9uLTMxMDAgfCBwbWF4IHwgcG1heC0qIHwgcG1pbiB8IGRlYzMxMDAgfCBkZWNzdGF0bikKKwkJYmFzaWNfbWFjaGluZT1taXBzLWRlYworCQk7OworCWRlY3N5c3RlbTEwKiB8IGRlYzEwKikKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC1kZWMKKwkJb3M9LXRvcHMxMAorCQk7OworCWRlY3N5c3RlbTIwKiB8IGRlYzIwKikKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC1kZWMKKwkJb3M9LXRvcHMyMAorCQk7OworCWRlbHRhIHwgMzMwMCB8IG1vdG9yb2xhLTMzMDAgfCBtb3Rvcm9sYS1kZWx0YSBcCisJICAgICAgfCAzMzAwLW1vdG9yb2xhIHwgZGVsdGEtbW90b3JvbGEpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1tb3Rvcm9sYQorCQk7OworCWRlbHRhODgpCisJCWJhc2ljX21hY2hpbmU9bTg4ay1tb3Rvcm9sYQorCQlvcz0tc3lzdjMKKwkJOzsKKwlkaWNvcykKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCW9zPS1kaWNvcworCQk7OworCWRqZ3BwKQorCQliYXNpY19tYWNoaW5lPWk1ODYtcGMKKwkJb3M9LW1zZG9zZGpncHAKKwkJOzsKKwlkcHgyMCB8IGRweDIwLSopCisJCWJhc2ljX21hY2hpbmU9cnM2MDAwLWJ1bGwKKwkJb3M9LWJvc3gKKwkJOzsKKwlkcHgyKiB8IGRweDIqLWJ1bGwpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1idWxsCisJCW9zPS1zeXN2MworCQk7OworCWVibW9uMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS1lYm1vbgorCQk7OworCWVseHNpKQorCQliYXNpY19tYWNoaW5lPWVseHNpLWVseHNpCisJCW9zPS1ic2QKKwkJOzsKKwllbmNvcmUgfCB1bWF4IHwgbW1heCkKKwkJYmFzaWNfbWFjaGluZT1uczMyay1lbmNvcmUKKwkJOzsKKwllczE4MDAgfCBPU0U2OGsgfCBvc2U2OGsgfCBvc2UgfCBPU0UpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1lcmljc3NvbgorCQlvcz0tb3NlCisJCTs7CisJZngyODAwKQorCQliYXNpY19tYWNoaW5lPWk4NjAtYWxsaWFudAorCQk7OworCWdlbml4KQorCQliYXNpY19tYWNoaW5lPW5zMzJrLW5zCisJCTs7CisJZ21pY3JvKQorCQliYXNpY19tYWNoaW5lPXRyb24tZ21pY3JvCisJCW9zPS1zeXN2CisJCTs7CisJZ28zMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1nbzMyCisJCTs7CisJaDMwNTByKiB8IGhpdXgqKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaGl0YWNoaQorCQlvcz0taGl1eHdlMgorCQk7OworCWg4MzAwaG1zKQorCQliYXNpY19tYWNoaW5lPWg4MzAwLWhpdGFjaGkKKwkJb3M9LWhtcworCQk7OworCWg4MzAweHJheSkKKwkJYmFzaWNfbWFjaGluZT1oODMwMC1oaXRhY2hpCisJCW9zPS14cmF5CisJCTs7CisJaDg1MDBobXMpCisJCWJhc2ljX21hY2hpbmU9aDg1MDAtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJaGFycmlzKQorCQliYXNpY19tYWNoaW5lPW04OGstaGFycmlzCisJCW9zPS1zeXN2MworCQk7OworCWhwMzAwLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQk7OworCWhwMzAwYnNkKQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJb3M9LWJzZAorCQk7OworCWhwMzAwaHB1eCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCW9zPS1ocHV4CisJCTs7CisJaHAzazlbMC05XVswLTldIHwgaHA5WzAtOV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4wLWhwCisJCTs7CisJaHA5azJbMC05XVswLTldIHwgaHA5azMxWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWhwCisJCTs7CisJaHA5azNbMi05XVswLTldKQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJOzsKKwlocDlrNlswLTldWzAtOV0gfCBocDZbMC05XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJOzsKKwlocDlrN1swLTc5XVswLTldIHwgaHA3WzAtNzldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs3OFswLTldIHwgaHA3OFswLTldKQorCQkjIEZJWE1FOiByZWFsbHkgaHBwYTIuMC1ocAorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrOFs2N10xIHwgaHA4WzY3XTEgfCBocDlrODBbMjRdIHwgaHA4MFsyNF0gfCBocDlrOFs3OF05IHwgaHA4Wzc4XTkgfCBocDlrODkzIHwgaHA4OTMpCisJCSMgRklYTUU6IHJlYWxseSBocHBhMi4wLWhwCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzAtOV1bMTM2NzldIHwgaHA4WzAtOV1bMTM2NzldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrOFswLTldWzAtOV0gfCBocDhbMC05XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJOzsKKwlocHBhLW5leHQpCisJCW9zPS1uZXh0c3RlcDMKKwkJOzsKKwlocHBhb3NmKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJb3M9LW9zZgorCQk7OworCWhwcHJvKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJb3M9LXByb2VsZgorCQk7OworCWkzNzAtaWJtKiB8IGlibSopCisJCWJhc2ljX21hY2hpbmU9aTM3MC1pYm0KKwkJOzsKKyMgSSdtIG5vdCBzdXJlIHdoYXQgIlN5c3YzMiIgbWVhbnMuICBTaG91bGQgdGhpcyBiZSBzeXN2My4yPworCWkqODZ2MzIpCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc3lzdjMyCisJCTs7CisJaSo4NnY0KikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zeXN2NAorCQk7OworCWkqODZ2KQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXN5c3YKKwkJOzsKKwlpKjg2c29sMikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zb2xhcmlzMgorCQk7OworCWkzODZtYWNoKQorCQliYXNpY19tYWNoaW5lPWkzODYtbWFjaAorCQlvcz0tbWFjaAorCQk7OworCWkzODYtdnN0YSB8IHZzdGEpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCisJCW9zPS12c3RhCisJCTs7CisJaXJpcyB8IGlyaXM0ZCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLXNnaQorCQljYXNlICRvcyBpbgorCQkgICAgLWlyaXgqKQorCQkJOzsKKwkJICAgICopCisJCQlvcz0taXJpeDQKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwlpc2k2OCB8IGlzaSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWlzaQorCQlvcz0tc3lzdgorCQk7OworCW02OGtub21tdSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJb3M9LWxpbnV4CisJCTs7CisJbTY4a25vbW11LSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQlvcz0tbGludXgKKwkJOzsKKwltODhrLW9tcm9uKikKKwkJYmFzaWNfbWFjaGluZT1tODhrLW9tcm9uCisJCTs7CisJbWFnbnVtIHwgbTMyMzApCisJCWJhc2ljX21hY2hpbmU9bWlwcy1taXBzCisJCW9zPS1zeXN2CisJCTs7CisJbWVybGluKQorCQliYXNpY19tYWNoaW5lPW5zMzJrLXV0ZWsKKwkJb3M9LXN5c3YKKwkJOzsKKwltaWNyb2JsYXplKQorCQliYXNpY19tYWNoaW5lPW1pY3JvYmxhemUteGlsaW54CisJCTs7CisJbWluZ3czMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1taW5ndzMyCisJCTs7CisJbWluZ3czMmNlKQorCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCisJCW9zPS1taW5ndzMyY2UKKwkJOzsKKwltaW5pZnJhbWUpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWNvbnZlcmdlbnQKKwkJOzsKKwkqbWludCB8IC1taW50WzAtOV0qIHwgKk1pTlQgfCAqTWlOVFswLTldKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWF0YXJpCisJCW9zPS1taW50CisJCTs7CisJbWlwc0VFKiB8IGVlIHwgcHMyKQorCQliYXNpY19tYWNoaW5lPW1pcHM2NHI1OTAwZWwtc2NlaQorCQljYXNlICRvcyBpbgorCQkgICAgLWxpbnV4KikKKwkJCTs7CisJCSAgICAqKQorCQkJb3M9LWVsZgorCQkJOzsKKwkJZXNhYworCQk7OworCWlvcCkKKwkJYmFzaWNfbWFjaGluZT1taXBzZWwtc2NlaQorCQlvcz0taXJ4CisJCTs7CisJZHZwKQorCQliYXNpY19tYWNoaW5lPWR2cC1zY2VpCisJCW9zPS1lbGYKKwkJOzsKKwltaXBzMyotKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9taXBzMy9taXBzNjQvJ2AKKwkJOzsKKwltaXBzMyopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgLWUgJ3MvbWlwczMvbWlwczY0LydgLXVua25vd24KKwkJOzsKKwltb25pdG9yKQorCQliYXNpY19tYWNoaW5lPW02OGstcm9tNjhrCisJCW9zPS1jb2ZmCisJCTs7CisJbW9ycGhvcykKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLXVua25vd24KKwkJb3M9LW1vcnBob3MKKwkJOzsKKwltc2RvcykKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1tc2RvcworCQk7OworCW1zMS0qKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21zMS0vbXQtLydgCisJCTs7CisJbXZzKQorCQliYXNpY19tYWNoaW5lPWkzNzAtaWJtCisJCW9zPS1tdnMKKwkJOzsKKwluY3IzMDAwKQorCQliYXNpY19tYWNoaW5lPWk0ODYtbmNyCisJCW9zPS1zeXN2NAorCQk7OworCW5ldGJzZDM4NikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LW5ldGJzZAorCQk7OworCW5ldHdpbmRlcikKKwkJYmFzaWNfbWFjaGluZT1hcm12NGwtcmViZWwKKwkJb3M9LWxpbnV4CisJCTs7CisJbmV3cyB8IG5ld3M3MDAgfCBuZXdzODAwIHwgbmV3czkwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXNvbnkKKwkJb3M9LW5ld3NvcworCQk7OworCW5ld3MxMDAwKQorCQliYXNpY19tYWNoaW5lPW02ODAzMC1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZXdzLTM2MDAgfCByaXNjLW5ld3MpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZWN2NzApCisJCWJhc2ljX21hY2hpbmU9djcwLW5lYworCQlvcz0tc3lzdgorCQk7OworCW5leHQgfCBtKi1uZXh0ICkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5leHQKKwkJY2FzZSAkb3MgaW4KKwkJICAgIC1uZXh0c3RlcCogKQorCQkJOzsKKwkJICAgIC1uczIqKQorCQkgICAgICBvcz0tbmV4dHN0ZXAyCisJCQk7OworCQkgICAgKikKKwkJICAgICAgb3M9LW5leHRzdGVwMworCQkJOzsKKwkJZXNhYworCQk7OworCW5oMzAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhhcnJpcworCQlvcz0tY3h1eAorCQk7OworCW5oWzQ1XTAwMCkKKwkJYmFzaWNfbWFjaGluZT1tODhrLWhhcnJpcworCQlvcz0tY3h1eAorCQk7OworCW5pbmR5OTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKKwkJb3M9LW5pbmR5CisJCTs7CisJbW9uOTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKKwkJb3M9LW1vbjk2MAorCQk7OworCW5vbnN0b3B1eCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLWNvbXBhcQorCQlvcz0tbm9uc3RvcHV4CisJCTs7CisJbnAxKQorCQliYXNpY19tYWNoaW5lPW5wMS1nb3VsZAorCQk7OworCW5lby10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bmVvLXRhbmRlbQorCQk7OworCW5zZS10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bnNlLXRhbmRlbQorCQk7OworCW5zci10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bnNyLXRhbmRlbQorCQk7OworCW9wNTBuLSogfCBvcDYwYy0qKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwlvcGVucmlzYyB8IG9wZW5yaXNjLSopCisJCWJhc2ljX21hY2hpbmU9b3IzMi11bmtub3duCisJCTs7CisJb3M0MDApCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1pYm0KKwkJb3M9LW9zNDAwCisJCTs7CisJT1NFNjgwMDAgfCBvc2U2ODAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtZXJpY3Nzb24KKwkJb3M9LW9zZQorCQk7OworCW9zNjhrKQorCQliYXNpY19tYWNoaW5lPW02OGstbm9uZQorCQlvcz0tb3M2OGsKKwkJOzsKKwlwYS1oaXRhY2hpKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaGl0YWNoaQorCQlvcz0taGl1eHdlMgorCQk7OworCXBhcmFnb24pCisJCWJhc2ljX21hY2hpbmU9aTg2MC1pbnRlbAorCQlvcz0tb3NmCisJCTs7CisJcGFyaXNjKQorCQliYXNpY19tYWNoaW5lPWhwcGEtdW5rbm93bgorCQlvcz0tbGludXgKKwkJOzsKKwlwYXJpc2MtKikKKwkJYmFzaWNfbWFjaGluZT1ocHBhLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCW9zPS1saW51eAorCQk7OworCXBiZCkKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy10dGkKKwkJOzsKKwlwYmIpCisJCWJhc2ljX21hY2hpbmU9bTY4ay10dGkKKwkJOzsKKwlwYzUzMiB8IHBjNTMyLSopCisJCWJhc2ljX21hY2hpbmU9bnMzMmstcGM1MzIKKwkJOzsKKwlwYzk4KQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJOzsKKwlwYzk4LSopCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBlbnRpdW0gfCBwNSB8IGs1IHwgazYgfCBuZXhnZW4gfCB2aWFjMykKKwkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCisJCTs7CisJcGVudGl1bXBybyB8IHA2IHwgNng4NiB8IGF0aGxvbiB8IGF0aGxvbl8qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJOzsKKwlwZW50aXVtaWkgfCBwZW50aXVtMiB8IHBlbnRpdW1paWkgfCBwZW50aXVtMykKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCTs7CisJcGVudGl1bTQpCisJCWJhc2ljX21hY2hpbmU9aTc4Ni1wYworCQk7OworCXBlbnRpdW0tKiB8IHA1LSogfCBrNS0qIHwgazYtKiB8IG5leGdlbi0qIHwgdmlhYzMtKikKKwkJYmFzaWNfbWFjaGluZT1pNTg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bXByby0qIHwgcDYtKiB8IDZ4ODYtKiB8IGF0aGxvbi0qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtaWktKiB8IHBlbnRpdW0yLSogfCBwZW50aXVtaWlpLSogfCBwZW50aXVtMy0qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtNC0qKQorCQliYXNpY19tYWNoaW5lPWk3ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwbikKKwkJYmFzaWNfbWFjaGluZT1wbi1nb3VsZAorCQk7OworCXBvd2VyKQliYXNpY19tYWNoaW5lPXBvd2VyLWlibQorCQk7OworCXBwYykJYmFzaWNfbWFjaGluZT1wb3dlcnBjLXVua25vd24KKwkJOzsKKwlwcGMtKikJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcHBjbGUgfCBwb3dlcnBjbGl0dGxlIHwgcHBjLWxlIHwgcG93ZXJwYy1saXR0bGUpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwY2xlLXVua25vd24KKwkJOzsKKwlwcGNsZS0qIHwgcG93ZXJwY2xpdHRsZS0qKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBwYzY0KQliYXNpY19tYWNoaW5lPXBvd2VycGM2NC11bmtub3duCisJCTs7CisJcHBjNjQtKikgYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwcGM2NGxlIHwgcG93ZXJwYzY0bGl0dGxlIHwgcHBjNjQtbGUgfCBwb3dlcnBjNjQtbGl0dGxlKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGM2NGxlLXVua25vd24KKwkJOzsKKwlwcGM2NGxlLSogfCBwb3dlcnBjNjRsaXR0bGUtKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjRsZS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBzMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LWlibQorCQk7OworCXB3MzIpCisJCWJhc2ljX21hY2hpbmU9aTU4Ni11bmtub3duCisJCW9zPS1wdzMyCisJCTs7CisJcmRvcykKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1yZG9zCisJCTs7CisJcm9tNjhrKQorCQliYXNpY19tYWNoaW5lPW02OGstcm9tNjhrCisJCW9zPS1jb2ZmCisJCTs7CisJcm1bNDZdMDApCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zaWVtZW5zCisJCTs7CisJcnRwYyB8IHJ0cGMtKikKKwkJYmFzaWNfbWFjaGluZT1yb21wLWlibQorCQk7OworCXMzOTAgfCBzMzkwLSopCisJCWJhc2ljX21hY2hpbmU9czM5MC1pYm0KKwkJOzsKKwlzMzkweCB8IHMzOTB4LSopCisJCWJhc2ljX21hY2hpbmU9czM5MHgtaWJtCisJCTs7CisJc2EyOTIwMCkKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tdWRpCisJCTs7CisJc2IxKQorCQliYXNpY19tYWNoaW5lPW1pcHNpc2E2NHNiMS11bmtub3duCisJCTs7CisJc2IxZWwpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTY0c2IxZWwtdW5rbm93bgorCQk7OworCXNkZSkKKwkJYmFzaWNfbWFjaGluZT1taXBzaXNhMzItc2RlCisJCW9zPS1lbGYKKwkJOzsKKwlzZWkpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zZWkKKwkJb3M9LXNlaXV4CisJCTs7CisJc2VxdWVudCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXNlcXVlbnQKKwkJOzsKKwlzaCkKKwkJYmFzaWNfbWFjaGluZT1zaC1oaXRhY2hpCisJCW9zPS1obXMKKwkJOzsKKwlzaDVlbCkKKwkJYmFzaWNfbWFjaGluZT1zaDVsZS11bmtub3duCisJCTs7CisJc2g2NCkKKwkJYmFzaWNfbWFjaGluZT1zaDY0LXVua25vd24KKwkJOzsKKwlzcGFyY2xpdGUtd3JzIHwgc2ltc28td3JzKQorCQliYXNpY19tYWNoaW5lPXNwYXJjbGl0ZS13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwlzcHM3KQorCQliYXNpY19tYWNoaW5lPW02OGstYnVsbAorCQlvcz0tc3lzdjIKKwkJOzsKKwlzcHVyKQorCQliYXNpY19tYWNoaW5lPXNwdXItdW5rbm93bgorCQk7OworCXN0MjAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXRhbmRlbQorCQk7OworCXN0cmF0dXMpCisJCWJhc2ljX21hY2hpbmU9aTg2MC1zdHJhdHVzCisJCW9zPS1zeXN2NAorCQk7OworCXN1bjIpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgorCQk7OworCXN1bjJvczMpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgorCQlvcz0tc3Vub3MzCisJCTs7CisJc3VuMm9zNCkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCisJCW9zPS1zdW5vczQKKwkJOzsKKwlzdW4zb3MzKQorCQliYXNpY19tYWNoaW5lPW02OGstc3VuCisJCW9zPS1zdW5vczMKKwkJOzsKKwlzdW4zb3M0KQorCQliYXNpY19tYWNoaW5lPW02OGstc3VuCisJCW9zPS1zdW5vczQKKwkJOzsKKwlzdW40b3MzKQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQlvcz0tc3Vub3MzCisJCTs7CisJc3VuNG9zNCkKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJb3M9LXN1bm9zNAorCQk7OworCXN1bjRzb2wyKQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQlvcz0tc29sYXJpczIKKwkJOzsKKwlzdW4zIHwgc3VuMy0qKQorCQliYXNpY19tYWNoaW5lPW02OGstc3VuCisJCTs7CisJc3VuNCkKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJOzsKKwlzdW4zODYgfCBzdW4zODZpIHwgcm9hZHJ1bm5lcikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXN1bgorCQk7OworCXN2MSkKKwkJYmFzaWNfbWFjaGluZT1zdjEtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJc3ltbWV0cnkpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50CisJCW9zPS1keW5peAorCQk7OworCXQzZSkKKwkJYmFzaWNfbWFjaGluZT1hbHBoYWV2NS1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwl0OTApCisJCWJhc2ljX21hY2hpbmU9dDkwLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCSMgVGhpcyBtdXN0IGJlIG1hdGNoZWQgYmVmb3JlIHRpbGUqLgorCXRpbGVneCopCisJCWJhc2ljX21hY2hpbmU9dGlsZWd4LXVua25vd24KKwkJb3M9LWxpbnV4LWdudQorCQk7OworCXRpbGUqKQorCQliYXNpY19tYWNoaW5lPXRpbGUtdW5rbm93bgorCQlvcz0tbGludXgtZ251CisJCTs7CisJdHgzOSkKKwkJYmFzaWNfbWFjaGluZT1taXBzdHgzOS11bmtub3duCisJCTs7CisJdHgzOWVsKQorCQliYXNpY19tYWNoaW5lPW1pcHN0eDM5ZWwtdW5rbm93bgorCQk7OworCXRvYWQxKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLXhrbAorCQlvcz0tdG9wczIwCisJCTs7CisJdG93ZXIgfCB0b3dlci0zMikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5jcgorCQk7OworCXRwZikKKwkJYmFzaWNfbWFjaGluZT1zMzkweC1pYm0KKwkJb3M9LXRwZgorCQk7OworCXVkaTI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tdWRpCisJCTs7CisJdWx0cmEzKQorCQliYXNpY19tYWNoaW5lPWEyOWstbnl1CisJCW9zPS1zeW0xCisJCTs7CisJdjgxMCB8IG5lY3Y4MTApCisJCWJhc2ljX21hY2hpbmU9djgxMC1uZWMKKwkJb3M9LW5vbmUKKwkJOzsKKwl2YXh2KQorCQliYXNpY19tYWNoaW5lPXZheC1kZWMKKwkJb3M9LXN5c3YKKwkJOzsKKwl2bXMpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQlvcz0tdm1zCisJCTs7CisJdnBwKnx2eHx2eC0qKQorCQliYXNpY19tYWNoaW5lPWYzMDEtZnVqaXRzdQorCQk7OworCXZ4d29ya3M5NjApCisJCWJhc2ljX21hY2hpbmU9aTk2MC13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl2eHdvcmtzNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl2eHdvcmtzMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJdzY1KikKKwkJYmFzaWNfbWFjaGluZT13NjUtd2RjCisJCW9zPS1ub25lCisJCTs7CisJdzg5ay0qKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAorCQlvcz0tcHJvZWxmCisJCTs7CisJeGJveCkKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCW9zPS1taW5ndzMyCisJCTs7CisJeHBzIHwgeHBzMTAwKQorCQliYXNpY19tYWNoaW5lPXhwczEwMC1ob25leXdlbGwKKwkJOzsKKwl5bXApCisJCWJhc2ljX21hY2hpbmU9eW1wLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXo4ay0qLWNvZmYpCisJCWJhc2ljX21hY2hpbmU9ejhrLXVua25vd24KKwkJb3M9LXNpbQorCQk7OworCXo4MC0qLWNvZmYpCisJCWJhc2ljX21hY2hpbmU9ejgwLXVua25vd24KKwkJb3M9LXNpbQorCQk7OworCW5vbmUpCisJCWJhc2ljX21hY2hpbmU9bm9uZS1ub25lCisJCW9zPS1ub25lCisJCTs7CisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgbWFudWZhY3R1cmVyIG9mIGNlcnRhaW4gQ1BVIHR5cGVzLiAgSXQgaXMgaW4KKyMgc29tZSBjYXNlcyB0aGUgb25seSBtYW51ZmFjdHVyZXIsIGluIG90aGVycywgaXQgaXMgdGhlIG1vc3QgcG9wdWxhci4KKwl3ODlrKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAorCQk7OworCW9wNTBuKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCTs7CisJb3A2MGMpCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKKwkJOzsKKwlyb21wKQorCQliYXNpY19tYWNoaW5lPXJvbXAtaWJtCisJCTs7CisJbW1peCkKKwkJYmFzaWNfbWFjaGluZT1tbWl4LWtudXRoCisJCTs7CisJcnM2MDAwKQorCQliYXNpY19tYWNoaW5lPXJzNjAwMC1pYm0KKwkJOzsKKwl2YXgpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQk7OworCXBkcDEwKQorCQkjIHRoZXJlIGFyZSBtYW55IGNsb25lcywgc28gREVDIGlzIG5vdCBhIHNhZmUgYmV0CisJCWJhc2ljX21hY2hpbmU9cGRwMTAtdW5rbm93bgorCQk7OworCXBkcDExKQorCQliYXNpY19tYWNoaW5lPXBkcDExLWRlYworCQk7OworCXdlMzJrKQorCQliYXNpY19tYWNoaW5lPXdlMzJrLWF0dAorCQk7OworCXNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzI0XWFlYiB8IHNoWzM0XWViIHwgc2hbMTIzNF1sZSB8IHNoWzIzXWVsZSkKKwkJYmFzaWNfbWFjaGluZT1zaC11bmtub3duCisJCTs7CisJc3BhcmMgfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCTs7CisJY3lkcmEpCisJCWJhc2ljX21hY2hpbmU9Y3lkcmEtY3lkcm9tZQorCQk7OworCW9yaW9uKQorCQliYXNpY19tYWNoaW5lPW9yaW9uLWhpZ2hsZXZlbAorCQk7OworCW9yaW9uMTA1KQorCQliYXNpY19tYWNoaW5lPWNsaXBwZXItaGlnaGxldmVsCisJCTs7CisJbWFjIHwgbXB3IHwgbWFjLW1wdykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwcGxlCisJCTs7CisJcG1hYyB8IHBtYWMtbXB3KQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtYXBwbGUKKwkJOzsKKwkqLXVua25vd24pCisJCSMgTWFrZSBzdXJlIHRvIG1hdGNoIGFuIGFscmVhZHktY2Fub25pY2FsaXplZCBtYWNoaW5lIG5hbWUuCisJCTs7CisJKikKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBtYWNoaW5lIFxgJGJhc2ljX21hY2hpbmVcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworZXNhYworCisjIEhlcmUgd2UgY2Fub25pY2FsaXplIGNlcnRhaW4gYWxpYXNlcyBmb3IgbWFudWZhY3R1cmVycy4KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkqLWRpZ2l0YWwqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL2RpZ2l0YWwuKi9kZWMvJ2AKKwkJOzsKKwkqLWNvbW1vZG9yZSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvY29tbW9kb3JlLiovY2JtLydgCisJCTs7CisJKikKKwkJOzsKK2VzYWMKKworIyBEZWNvZGUgbWFudWZhY3R1cmVyLXNwZWNpZmljIGFsaWFzZXMgZm9yIGNlcnRhaW4gb3BlcmF0aW5nIHN5c3RlbXMuCisKK2lmIFsgeCIkb3MiICE9IHgiIiBdCit0aGVuCitjYXNlICRvcyBpbgorCSMgRmlyc3QgbWF0Y2ggc29tZSBzeXN0ZW0gdHlwZSBhbGlhc2VzCisJIyB0aGF0IG1pZ2h0IGdldCBjb25mdXNlZCB3aXRoIHZhbGlkIHN5c3RlbSB0eXBlcy4KKwkjIC1zb2xhcmlzKiBpcyBhIGJhc2ljIHN5c3RlbSB0eXBlLCB3aXRoIHRoaXMgb25lIGV4Y2VwdGlvbi4KKwktYXVyb3JhdXgpCisJCW9zPS1hdXJvcmF1eAorCQk7OworCS1zb2xhcmlzMSB8IC1zb2xhcmlzMS4qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c29sYXJpczF8c3Vub3M0fCdgCisJCTs7CisJLXNvbGFyaXMpCisJCW9zPS1zb2xhcmlzMgorCQk7OworCS1zdnI0KikKKwkJb3M9LXN5c3Y0CisJCTs7CisJLXVuaXh3YXJlKikKKwkJb3M9LXN5c3Y0LjJ1dworCQk7OworCS1nbnUvbGludXgqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8Z251L2xpbnV4fGxpbnV4LWdudXwnYAorCQk7OworCSMgRmlyc3QgYWNjZXB0IHRoZSBiYXNpYyBzeXN0ZW0gdHlwZXMuCisJIyBUaGUgcG9ydGFibGUgc3lzdGVtcyBjb21lcyBmaXJzdC4KKwkjIEVhY2ggYWx0ZXJuYXRpdmUgTVVTVCBFTkQgSU4gQSAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgorCSMgLXN5c3YqIGlzIG5vdCBoZXJlIGJlY2F1c2UgaXQgY29tZXMgbGF0ZXIsIGFmdGVyIHN5c3ZyNC4KKwktZ251KiB8IC1ic2QqIHwgLW1hY2gqIHwgLW1pbml4KiB8IC1nZW5peCogfCAtdWx0cml4KiB8IC1pcml4KiBcCisJICAgICAgfCAtKnZtcyogfCAtc2NvKiB8IC1lc2l4KiB8IC1pc2MqIHwgLWFpeCogfCAtY25rKiB8IC1zdW5vcyB8IC1zdW5vc1szNF0qXAorCSAgICAgIHwgLWhwdXgqIHwgLXVub3MqIHwgLW9zZiogfCAtbHVuYSogfCAtZGd1eCogfCAtYXVyb3JhdXgqIHwgLXNvbGFyaXMqIFwKKwkgICAgICB8IC1zeW0qIHwgLWtvcGVuc29sYXJpcyogXAorCSAgICAgIHwgLWFtaWdhb3MqIHwgLWFtaWdhZG9zKiB8IC1tc2RvcyogfCAtbmV3c29zKiB8IC11bmljb3MqIHwgLWFvZiogXAorCSAgICAgIHwgLWFvcyogfCAtYXJvcyogXAorCSAgICAgIHwgLW5pbmR5KiB8IC12eHNpbSogfCAtdnh3b3JrcyogfCAtZWJtb24qIHwgLWhtcyogfCAtbXZzKiBcCisJICAgICAgfCAtY2xpeCogfCAtcmlzY29zKiB8IC11bmlwbHVzKiB8IC1pcmlzKiB8IC1ydHUqIHwgLXhlbml4KiBcCisJICAgICAgfCAtaGl1eCogfCAtMzg2YnNkKiB8IC1rbmV0YnNkKiB8IC1taXJic2QqIHwgLW5ldGJzZCogXAorCSAgICAgIHwgLW9wZW5ic2QqIHwgLXNvbGlkYnNkKiBcCisJICAgICAgfCAtZWtrb2JzZCogfCAta2ZyZWVic2QqIHwgLWZyZWVic2QqIHwgLXJpc2NpeCogfCAtbHlueG9zKiBcCisJICAgICAgfCAtYm9zeCogfCAtbmV4dHN0ZXAqIHwgLWN4dXgqIHwgLWFvdXQqIHwgLWVsZiogfCAtb2FiaSogXAorCSAgICAgIHwgLXB0eCogfCAtY29mZiogfCAtZWNvZmYqIHwgLXdpbm50KiB8IC1kb21haW4qIHwgLXZzdGEqIFwKKwkgICAgICB8IC11ZGkqIHwgLWVhYmkqIHwgLWxpdGVzKiB8IC1pZWVlKiB8IC1nbzMyKiB8IC1hdXgqIFwKKwkgICAgICB8IC1jaG9ydXNvcyogfCAtY2hvcnVzcmRiKiB8IC1jZWdjYyogXAorCSAgICAgIHwgLWN5Z3dpbiogfCAtcGUqIHwgLXBzb3MqIHwgLW1vc3MqIHwgLXByb2VsZiogfCAtcnRlbXMqIFwKKwkgICAgICB8IC1taW5ndzMyKiB8IC1saW51eC1nbnUqIHwgLWxpbnV4LWFuZHJvaWQqIFwKKwkgICAgICB8IC1saW51eC1uZXdsaWIqIHwgLWxpbnV4LXVjbGliYyogXAorCSAgICAgIHwgLXV4cHYqIHwgLWJlb3MqIHwgLW1wZWl4KiB8IC11ZGsqIFwKKwkgICAgICB8IC1pbnRlcml4KiB8IC11d2luKiB8IC1ta3MqIHwgLXJoYXBzb2R5KiB8IC1kYXJ3aW4qIHwgLW9wZW5lZCogXAorCSAgICAgIHwgLW9wZW5zdGVwKiB8IC1vc2tpdCogfCAtY29uaXgqIHwgLXB3MzIqIHwgLW5vbnN0b3B1eCogXAorCSAgICAgIHwgLXN0b3JtLWNoYW9zKiB8IC10b3BzMTAqIHwgLXRlbmV4KiB8IC10b3BzMjAqIHwgLWl0cyogXAorCSAgICAgIHwgLW9zMiogfCAtdm9zKiB8IC1wYWxtb3MqIHwgLXVjbGludXgqIHwgLW51Y2xldXMqIFwKKwkgICAgICB8IC1tb3JwaG9zKiB8IC1zdXBlcnV4KiB8IC1ydG1rKiB8IC1ydG1rLW5vdmEqIHwgLXdpbmRpc3MqIFwKKwkgICAgICB8IC1wb3dlcm1heCogfCAtZG5peCogfCAtbng2IHwgLW54NyB8IC1zZWkqIHwgLWRyYWdvbmZseSogXAorCSAgICAgIHwgLXNreW9zKiB8IC1oYWlrdSogfCAtcmRvcyogfCAtdG9wcGVycyogfCAtZHJvcHMqIHwgLWVzKiB8IC1pcngqKQorCSMgUmVtZW1iZXIsIGVhY2ggYWx0ZXJuYXRpdmUgTVVTVCBFTkQgSU4gKiwgdG8gbWF0Y2ggYSB2ZXJzaW9uIG51bWJlci4KKwkJOzsKKwktcW54KikKKwkJY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCQkgICAgeDg2LSogfCBpKjg2LSopCisJCQk7OworCQkgICAgKikKKwkJCW9zPS1udG8kb3MKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwktbnRvLXFueCopCisJCTs7CisJLW50byopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xudG98bnRvLXFueHwnYAorCQk7OworCS1zaW0gfCAtZXMxODAwKiB8IC1obXMqIHwgLXhyYXkgfCAtb3M2OGsqIHwgLW5vbmUqIHwgLXY4OHIqIFwKKwkgICAgICB8IC13aW5kb3dzKiB8IC1vc3ggfCAtYWJ1ZyB8IC1uZXR3YXJlKiB8IC1vczkqIHwgLWJlb3MqIHwgLWhhaWt1KiBcCisJICAgICAgfCAtbWFjb3MqIHwgLW1wdyogfCAtbWFnaWMqIHwgLW1taXh3YXJlKiB8IC1tb245NjAqIHwgLWxuZXdzKikKKwkJOzsKKwktbWFjKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfG1hY3xtYWNvc3wnYAorCQk7OworCS1saW51eC1kaWV0bGliYykKKwkJb3M9LWxpbnV4LWRpZXRsaWJjCisJCTs7CisJLWxpbnV4KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfGxpbnV4fGxpbnV4LWdudXwnYAorCQk7OworCS1zdW5vczUqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c3Vub3M1fHNvbGFyaXMyfCdgCisJCTs7CisJLXN1bm9zNiopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzdW5vczZ8c29sYXJpczN8J2AKKwkJOzsKKwktb3BlbmVkKikKKwkJb3M9LW9wZW5lZGl0aW9uCisJCTs7CisJLW9zNDAwKikKKwkJb3M9LW9zNDAwCisJCTs7CisJLXdpbmNlKikKKwkJb3M9LXdpbmNlCisJCTs7CisJLW9zZnJvc2UqKQorCQlvcz0tb3Nmcm9zZQorCQk7OworCS1vc2YqKQorCQlvcz0tb3NmCisJCTs7CisJLXV0ZWsqKQorCQlvcz0tYnNkCisJCTs7CisJLWR5bml4KikKKwkJb3M9LWJzZAorCQk7OworCS1hY2lzKikKKwkJb3M9LWFvcworCQk7OworCS1hdGhlb3MqKQorCQlvcz0tYXRoZW9zCisJCTs7CisJLXN5bGxhYmxlKikKKwkJb3M9LXN5bGxhYmxlCisJCTs7CisJLTM4NmJzZCkKKwkJb3M9LWJzZAorCQk7OworCS1jdGl4KiB8IC11dHMqKQorCQlvcz0tc3lzdgorCQk7OworCS1ub3ZhKikKKwkJb3M9LXJ0bWstbm92YQorCQk7OworCS1uczIgKQorCQlvcz0tbmV4dHN0ZXAyCisJCTs7CisJLW5zayopCisJCW9zPS1uc2sKKwkJOzsKKwkjIFByZXNlcnZlIHRoZSB2ZXJzaW9uIG51bWJlciBvZiBzaW5peDUuCisJLXNpbml4NS4qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c2luaXh8c3lzdnwnYAorCQk7OworCS1zaW5peCopCisJCW9zPS1zeXN2NAorCQk7OworCS10cGYqKQorCQlvcz0tdHBmCisJCTs7CisJLXRyaXRvbiopCisJCW9zPS1zeXN2MworCQk7OworCS1vc3MqKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktc3ZyNCkKKwkJb3M9LXN5c3Y0CisJCTs7CisJLXN2cjMpCisJCW9zPS1zeXN2MworCQk7OworCS1zeXN2cjQpCisJCW9zPS1zeXN2NAorCQk7OworCSMgVGhpcyBtdXN0IGNvbWUgYWZ0ZXIgLXN5c3ZyNC4KKwktc3lzdiopCisJCTs7CisJLW9zZSopCisJCW9zPS1vc2UKKwkJOzsKKwktZXMxODAwKikKKwkJb3M9LW9zZQorCQk7OworCS14ZW5peCkKKwkJb3M9LXhlbml4CisJCTs7CisJLSptaW50IHwgLW1pbnRbMC05XSogfCAtKk1pTlQgfCAtTWlOVFswLTldKikKKwkJb3M9LW1pbnQKKwkJOzsKKwktYXJvcyopCisJCW9zPS1hcm9zCisJCTs7CisJLWthb3MqKQorCQlvcz0ta2FvcworCQk7OworCS16dm1vZSkKKwkJb3M9LXp2bW9lCisJCTs7CisJLWRpY29zKikKKwkJb3M9LWRpY29zCisJCTs7CisJLW5hY2wqKQorCQk7OworCS1ub25lKQorCQk7OworCSopCisJCSMgR2V0IHJpZCBvZiB0aGUgYC0nIGF0IHRoZSBiZWdpbm5pbmcgb2YgJG9zLgorCQlvcz1gZWNobyAkb3MgfCBzZWQgJ3MvW14tXSotLy8nYAorCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxXCc6IHN5c3RlbSBcYCRvc1wnIG5vdCByZWNvZ25pemVkIDE+JjIKKwkJZXhpdCAxCisJCTs7Citlc2FjCitlbHNlCisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgb3BlcmF0aW5nIHN5c3RlbXMgdGhhdCBjb21lIHdpdGggdmFyaW91cyBtYWNoaW5lcy4KKyMgVGhlIHZhbHVlIHNob3VsZCBiZSB3aGF0IHRoZSB2ZW5kb3IgY3VycmVudGx5IHNoaXBzIG91dCB0aGUgZG9vciB3aXRoIHRoZWlyCisjIG1hY2hpbmUgb3IgcHV0IGFub3RoZXIgd2F5LCB0aGUgbW9zdCBwb3B1bGFyIG9zIHByb3ZpZGVkIHdpdGggdGhlIG1hY2hpbmUuCisKKyMgTm90ZSB0aGF0IGlmIHlvdSdyZSBnb2luZyB0byB0cnkgdG8gbWF0Y2ggIi1NQU5VRkFDVFVSRVIiIGhlcmUgKHNheSwKKyMgIi1zdW4iKSwgdGhlbiB5b3UgaGF2ZSB0byB0ZWxsIHRoZSBjYXNlIHN0YXRlbWVudCB1cCB0b3dhcmRzIHRoZSB0b3AKKyMgdGhhdCBNQU5VRkFDVFVSRVIgaXNuJ3QgYW4gb3BlcmF0aW5nIHN5c3RlbS4gIE90aGVyd2lzZSwgY29kZSBhYm92ZQorIyB3aWxsIHNpZ25hbCBhbiBlcnJvciBzYXlpbmcgdGhhdCBNQU5VRkFDVFVSRVIgaXNuJ3QgYW4gb3BlcmF0aW5nCisjIHN5c3RlbSwgYW5kIHdlJ2xsIG5ldmVyIGdldCB0byB0aGlzIHBvaW50LgorCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisJc2NvcmUtKikKKwkJb3M9LWVsZgorCQk7OworCXNwdS0qKQorCQlvcz0tZWxmCisJCTs7CisJKi1hY29ybikKKwkJb3M9LXJpc2NpeDEuMgorCQk7OworCWFybSotcmViZWwpCisJCW9zPS1saW51eAorCQk7OworCWFybSotc2VtaSkKKwkJb3M9LWFvdXQKKwkJOzsKKwljNHgtKiB8IHRpYzR4LSopCisJCW9zPS1jb2ZmCisJCTs7CisJdGljNTR4LSopCisJCW9zPS1jb2ZmCisJCTs7CisJdGljNTV4LSopCisJCW9zPS1jb2ZmCisJCTs7CisJdGljNngtKikKKwkJb3M9LWNvZmYKKwkJOzsKKwkjIFRoaXMgbXVzdCBjb21lIGJlZm9yZSB0aGUgKi1kZWMgZW50cnkuCisJcGRwMTAtKikKKwkJb3M9LXRvcHMyMAorCQk7OworCXBkcDExLSopCisJCW9zPS1ub25lCisJCTs7CisJKi1kZWMgfCB2YXgtKikKKwkJb3M9LXVsdHJpeDQuMgorCQk7OworCW02OCotYXBvbGxvKQorCQlvcz0tZG9tYWluCisJCTs7CisJaTM4Ni1zdW4pCisJCW9zPS1zdW5vczQuMC4yCisJCTs7CisJbTY4MDAwLXN1bikKKwkJb3M9LXN1bm9zMworCQkjIFRoaXMgYWxzbyBleGlzdHMgaW4gdGhlIGNvbmZpZ3VyZSBwcm9ncmFtLCBidXQgd2FzIG5vdCB0aGUKKwkJIyBkZWZhdWx0LgorCQkjIG9zPS1zdW5vczQKKwkJOzsKKwltNjgqLWNpc2NvKQorCQlvcz0tYW91dAorCQk7OworCW1lcC0qKQorCQlvcz0tZWxmCisJCTs7CisJbWlwcyotY2lzY28pCisJCW9zPS1lbGYKKwkJOzsKKwltaXBzKi0qKQorCQlvcz0tZWxmCisJCTs7CisJb3IzMi0qKQorCQlvcz0tY29mZgorCQk7OworCSotdHRpKQkjIG11c3QgYmUgYmVmb3JlIHNwYXJjIGVudHJ5IG9yIHdlIGdldCB0aGUgd3Jvbmcgb3MuCisJCW9zPS1zeXN2MworCQk7OworCXNwYXJjLSogfCAqLXN1bikKKwkJb3M9LXN1bm9zNC4xLjEKKwkJOzsKKwkqLWJlKQorCQlvcz0tYmVvcworCQk7OworCSotaGFpa3UpCisJCW9zPS1oYWlrdQorCQk7OworCSotaWJtKQorCQlvcz0tYWl4CisJCTs7CisJKi1rbnV0aCkKKwkJb3M9LW1taXh3YXJlCisJCTs7CisJKi13ZWMpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLXdpbmJvbmQpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLW9raSkKKwkJb3M9LXByb2VsZgorCQk7OworCSotaHApCisJCW9zPS1ocHV4CisJCTs7CisJKi1oaXRhY2hpKQorCQlvcz0taGl1eAorCQk7OworCWk4NjAtKiB8ICotYXR0IHwgKi1uY3IgfCAqLWFsdG9zIHwgKi1tb3Rvcm9sYSB8ICotY29udmVyZ2VudCkKKwkJb3M9LXN5c3YKKwkJOzsKKwkqLWNibSkKKwkJb3M9LWFtaWdhb3MKKwkJOzsKKwkqLWRnKQorCQlvcz0tZGd1eAorCQk7OworCSotZG9scGhpbikKKwkJb3M9LXN5c3YzCisJCTs7CisJbTY4ay1jY3VyKQorCQlvcz0tcnR1CisJCTs7CisJbTg4ay1vbXJvbiopCisJCW9zPS1sdW5hCisJCTs7CisJKi1uZXh0ICkKKwkJb3M9LW5leHRzdGVwCisJCTs7CisJKi1zZXF1ZW50KQorCQlvcz0tcHR4CisJCTs7CisJKi1jcmRzKQorCQlvcz0tdW5vcworCQk7OworCSotbnMpCisJCW9zPS1nZW5peAorCQk7OworCWkzNzAtKikKKwkJb3M9LW12cworCQk7OworCSotbmV4dCkKKwkJb3M9LW5leHRzdGVwMworCQk7OworCSotZ291bGQpCisJCW9zPS1zeXN2CisJCTs7CisJKi1oaWdobGV2ZWwpCisJCW9zPS1ic2QKKwkJOzsKKwkqLWVuY29yZSkKKwkJb3M9LWJzZAorCQk7OworCSotc2dpKQorCQlvcz0taXJpeAorCQk7OworCSotc2llbWVucykKKwkJb3M9LXN5c3Y0CisJCTs7CisJKi1tYXNzY29tcCkKKwkJb3M9LXJ0dQorCQk7OworCWYzMFswMV0tZnVqaXRzdSB8IGY3MDAtZnVqaXRzdSkKKwkJb3M9LXV4cHYKKwkJOzsKKwkqLXJvbTY4aykKKwkJb3M9LWNvZmYKKwkJOzsKKwkqLSpidWcpCisJCW9zPS1jb2ZmCisJCTs7CisJKi1hcHBsZSkKKwkJb3M9LW1hY29zCisJCTs7CisJKi1hdGFyaSopCisJCW9zPS1taW50CisJCTs7CisJKikKKwkJb3M9LW5vbmUKKwkJOzsKK2VzYWMKK2ZpCisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2Uga25vdyB0aGUgb3MsIGFuZCB0aGUgQ1BVIHR5cGUsIGJ1dCBub3QgdGhlCisjIG1hbnVmYWN0dXJlci4gIFdlIHBpY2sgdGhlIGxvZ2ljYWwgbWFudWZhY3R1cmVyLgordmVuZG9yPXVua25vd24KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkqLXVua25vd24pCisJCWNhc2UgJG9zIGluCisJCQktcmlzY2l4KikKKwkJCQl2ZW5kb3I9YWNvcm4KKwkJCQk7OworCQkJLXN1bm9zKikKKwkJCQl2ZW5kb3I9c3VuCisJCQkJOzsKKwkJCS1jbmsqfC1haXgqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLWJlb3MqKQorCQkJCXZlbmRvcj1iZQorCQkJCTs7CisJCQktaHB1eCopCisJCQkJdmVuZG9yPWhwCisJCQkJOzsKKwkJCS1tcGVpeCopCisJCQkJdmVuZG9yPWhwCisJCQkJOzsKKwkJCS1oaXV4KikKKwkJCQl2ZW5kb3I9aGl0YWNoaQorCQkJCTs7CisJCQktdW5vcyopCisJCQkJdmVuZG9yPWNyZHMKKwkJCQk7OworCQkJLWRndXgqKQorCQkJCXZlbmRvcj1kZworCQkJCTs7CisJCQktbHVuYSopCisJCQkJdmVuZG9yPW9tcm9uCisJCQkJOzsKKwkJCS1nZW5peCopCisJCQkJdmVuZG9yPW5zCisJCQkJOzsKKwkJCS1tdnMqIHwgLW9wZW5lZCopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktb3M0MDAqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLXB0eCopCisJCQkJdmVuZG9yPXNlcXVlbnQKKwkJCQk7OworCQkJLXRwZiopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktdnhzaW0qIHwgLXZ4d29ya3MqIHwgLXdpbmRpc3MqKQorCQkJCXZlbmRvcj13cnMKKwkJCQk7OworCQkJLWF1eCopCisJCQkJdmVuZG9yPWFwcGxlCisJCQkJOzsKKwkJCS1obXMqKQorCQkJCXZlbmRvcj1oaXRhY2hpCisJCQkJOzsKKwkJCS1tcHcqIHwgLW1hY29zKikKKwkJCQl2ZW5kb3I9YXBwbGUKKwkJCQk7OworCQkJLSptaW50IHwgLW1pbnRbMC05XSogfCAtKk1pTlQgfCAtTWlOVFswLTldKikKKwkJCQl2ZW5kb3I9YXRhcmkKKwkJCQk7OworCQkJLXZvcyopCisJCQkJdmVuZG9yPXN0cmF0dXMKKwkJCQk7OworCQllc2FjCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgInMvdW5rbm93bi8kdmVuZG9yLyJgCisJCTs7Citlc2FjCisKK2VjaG8gJGJhc2ljX21hY2hpbmUkb3MKK2V4aXQKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInRpbWVzdGFtcD0nIgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQiCisjIHRpbWUtc3RhbXAtZW5kOiAiJyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS9kZXBjb21wIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9kZXBjb21wCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRmOGVlYTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL2RlcGNvbXAKQEAgLTAsMCArMSw2MzAgQEAKKyMhIC9iaW4vc2gKKyMgZGVwY29tcCAtIGNvbXBpbGUgYSBwcm9ncmFtIGdlbmVyYXRpbmcgZGVwZW5kZW5jaWVzIGFzIHNpZGUtZWZmZWN0cworCitzY3JpcHR2ZXJzaW9uPTIwMDktMDQtMjguMjE7ICMgVVRDCisKKyMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5IEZyZWUKKyMgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IEFsZXhhbmRyZSBPbGl2YSA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+LgorCitjYXNlICQxIGluCisgICcnKQorICAgICBlY2hvICIkMDogTm8gY29tbWFuZC4gIFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCisgICAgIGV4aXQgMTsKKyAgICAgOzsKKyAgLWggfCAtLWgqKQorICAgIGNhdCA8PFxFT0YKK1VzYWdlOiBkZXBjb21wIFstLWhlbHBdIFstLXZlcnNpb25dIFBST0dSQU0gW0FSR1NdCisKK1J1biBQUk9HUkFNUyBBUkdTIHRvIGNvbXBpbGUgYSBmaWxlLCBnZW5lcmF0aW5nIGRlcGVuZGVuY2llcworYXMgc2lkZS1lZmZlY3RzLgorCitFbnZpcm9ubWVudCB2YXJpYWJsZXM6CisgIGRlcG1vZGUgICAgIERlcGVuZGVuY3kgdHJhY2tpbmcgbW9kZS4KKyAgc291cmNlICAgICAgU291cmNlIGZpbGUgcmVhZCBieSBgUFJPR1JBTVMgQVJHUycuCisgIG9iamVjdCAgICAgIE9iamVjdCBmaWxlIG91dHB1dCBieSBgUFJPR1JBTVMgQVJHUycuCisgIERFUERJUiAgICAgIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSBkZXBlbmRlbmNpZXMuCisgIGRlcGZpbGUgICAgIERlcGVuZGVuY3kgZmlsZSB0byBvdXRwdXQuCisgIHRtcGRlcGZpbGUgIFRlbXBvcmFyeSBmaWxlIHRvIHVzZSB3aGVuIG91dHB1dGluZyBkZXBlbmRlbmNpZXMuCisgIGxpYnRvb2wgICAgIFdoZXRoZXIgbGlidG9vbCBpcyB1c2VkICh5ZXMvbm8pLgorCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LgorRU9GCisgICAgZXhpdCAkPworICAgIDs7CisgIC12IHwgLS12KikKKyAgICBlY2hvICJkZXBjb21wICRzY3JpcHR2ZXJzaW9uIgorICAgIGV4aXQgJD8KKyAgICA7OworZXNhYworCitpZiB0ZXN0IC16ICIkZGVwbW9kZSIgfHwgdGVzdCAteiAiJHNvdXJjZSIgfHwgdGVzdCAteiAiJG9iamVjdCI7IHRoZW4KKyAgZWNobyAiZGVwY29tcDogVmFyaWFibGVzIHNvdXJjZSwgb2JqZWN0IGFuZCBkZXBtb2RlIG11c3QgYmUgc2V0IiAxPiYyCisgIGV4aXQgMQorZmkKKworIyBEZXBlbmRlbmNpZXMgZm9yIHN1Yi9iYXIubyBvciBzdWIvYmFyLm9iaiBnbyBpbnRvIHN1Yi8uZGVwcy9iYXIuUG8uCitkZXBmaWxlPSR7ZGVwZmlsZS1gZWNobyAiJG9iamVjdCIgfAorICBzZWQgJ3N8W15cXC9dKiR8JyR7REVQRElSLS5kZXBzfScvJnw7c3xcLlwoW14uXSpcKSR8LlBcMXw7c3xQb2JqJHxQb3wnYH0KK3RtcGRlcGZpbGU9JHt0bXBkZXBmaWxlLWBlY2hvICIkZGVwZmlsZSIgfCBzZWQgJ3MvXC5cKFteLl0qXCkkLy5UXDEvJ2B9CisKK3JtIC1mICIkdG1wZGVwZmlsZSIKKworIyBTb21lIG1vZGVzIHdvcmsganVzdCBsaWtlIG90aGVyIG1vZGVzLCBidXQgdXNlIGRpZmZlcmVudCBmbGFncy4gIFdlCisjIHBhcmFtZXRlcml6ZSBoZXJlLCBidXQgc3RpbGwgbGlzdCB0aGUgbW9kZXMgaW4gdGhlIGJpZyBjYXNlIGJlbG93LAorIyB0byBtYWtlIGRlcGVuZC5tNCBlYXNpZXIgdG8gd3JpdGUuICBOb3RlIHRoYXQgd2UgKmNhbm5vdCogdXNlIGEgY2FzZQorIyBoZXJlLCBiZWNhdXNlIHRoaXMgZmlsZSBjYW4gb25seSBjb250YWluIG9uZSBjYXNlIHN0YXRlbWVudC4KK2lmIHRlc3QgIiRkZXBtb2RlIiA9IGhwOyB0aGVuCisgICMgSFAgY29tcGlsZXIgdXNlcyAtTSBhbmQgbm8gZXh0cmEgYXJnLgorICBnY2NmbGFnPS1NCisgIGRlcG1vZGU9Z2NjCitmaQorCitpZiB0ZXN0ICIkZGVwbW9kZSIgPSBkYXNoWG1zdGRvdXQ7IHRoZW4KKyAgICMgVGhpcyBpcyBqdXN0IGxpa2UgZGFzaG1zdGRvdXQgd2l0aCBhIGRpZmZlcmVudCBhcmd1bWVudC4KKyAgIGRhc2htZmxhZz0teE0KKyAgIGRlcG1vZGU9ZGFzaG1zdGRvdXQKK2ZpCisKK2N5Z3BhdGhfdT0iY3lncGF0aCAtdSAtZiAtIgoraWYgdGVzdCAiJGRlcG1vZGUiID0gbXN2Y21zeXM7IHRoZW4KKyAgICMgVGhpcyBpcyBqdXN0IGxpa2UgbXN2aXN1YWxjcHAgYnV0IHcvbyBjeWdwYXRoIHRyYW5zbGF0aW9uLgorICAgIyBKdXN0IGNvbnZlcnQgdGhlIGJhY2tzbGFzaC1lc2NhcGVkIGJhY2tzbGFzaGVzIHRvIHNpbmdsZSBmb3J3YXJkCisgICAjIHNsYXNoZXMgdG8gc2F0aXNmeSBkZXBlbmQubTQKKyAgIGN5Z3BhdGhfdT0ic2VkIHMsXFxcXFxcXFwsLyxnIgorICAgZGVwbW9kZT1tc3Zpc3VhbGNwcAorZmkKKworY2FzZSAiJGRlcG1vZGUiIGluCitnY2MzKQorIyMgZ2NjIDMgaW1wbGVtZW50cyBkZXBlbmRlbmN5IHRyYWNraW5nIHRoYXQgZG9lcyBleGFjdGx5IHdoYXQKKyMjIHdlIHdhbnQuICBZYXkhICBOb3RlOiBmb3Igc29tZSByZWFzb24gbGlidG9vbCAxLjQgZG9lc24ndCBsaWtlCisjIyBpdCBpZiAtTUQgLU1QIGNvbWVzIGFmdGVyIHRoZSAtTUYgc3R1ZmYuICBIbW0uCisjIyBVbmZvcnR1bmF0ZWx5LCBGcmVlQlNEIGM4OSBhY2NlcHRhbmNlIG9mIGZsYWdzIGRlcGVuZHMgdXBvbgorIyMgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudCBvcmRlcjsgc28gYWRkIHRoZSBmbGFncyB3aGVyZSB0aGV5CisjIyBhcHBlYXIgaW4gZGVwZW5kMi5hbS4gIE5vdGUgdGhhdCB0aGUgc2xvd2Rvd24gaW5jdXJyZWQgaGVyZQorIyMgYWZmZWN0cyBvbmx5IGNvbmZpZ3VyZTogaW4gbWFrZWZpbGVzLCAlRkFTVERFUCUgc2hvcnRjdXRzIHRoaXMuCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICRhcmcgaW4KKyAgICAtYykgc2V0IGZub3JkICIkQCIgLU1UICIkb2JqZWN0IiAtTUQgLU1QIC1NRiAiJHRtcGRlcGZpbGUiICIkYXJnIiA7OworICAgICopICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIgOzsKKyAgICBlc2FjCisgICAgc2hpZnQgIyBmbm9yZAorICAgIHNoaWZ0ICMgJGFyZworICBkb25lCisgICIkQCIKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIG12ICIkdG1wZGVwZmlsZSIgIiRkZXBmaWxlIgorICA7OworCitnY2MpCisjIyBUaGVyZSBhcmUgdmFyaW91cyB3YXlzIHRvIGdldCBkZXBlbmRlbmN5IG91dHB1dCBmcm9tIGdjYy4gIEhlcmUncworIyMgd2h5IHdlIHBpY2sgdGhpcyByYXRoZXIgb2JzY3VyZSBtZXRob2Q6CisjIyAtIERvbid0IHdhbnQgdG8gdXNlIC1NRCBiZWNhdXNlIHdlJ2QgbGlrZSB0aGUgZGVwZW5kZW5jaWVzIHRvIGVuZAorIyMgICB1cCBpbiBhIHN1YmRpci4gIEhhdmluZyB0byByZW5hbWUgYnkgaGFuZCBpcyB1Z2x5LgorIyMgICAoV2UgbWlnaHQgZW5kIHVwIGRvaW5nIHRoaXMgYW55d2F5IHRvIHN1cHBvcnQgb3RoZXIgY29tcGlsZXJzLikKKyMjIC0gVGhlIERFUEVOREVOQ0lFU19PVVRQVVQgZW52aXJvbm1lbnQgdmFyaWFibGUgbWFrZXMgZ2NjIGFjdCBsaWtlCisjIyAgIC1NTSwgbm90IC1NIChkZXNwaXRlIHdoYXQgdGhlIGRvY3Mgc2F5KS4KKyMjIC0gVXNpbmcgLU0gZGlyZWN0bHkgbWVhbnMgcnVubmluZyB0aGUgY29tcGlsZXIgdHdpY2UgKGV2ZW4gd29yc2UKKyMjICAgdGhhbiByZW5hbWluZykuCisgIGlmIHRlc3QgLXogIiRnY2NmbGFnIjsgdGhlbgorICAgIGdjY2ZsYWc9LU1ELAorICBmaQorICAiJEAiIC1XcCwiJGdjY2ZsYWckdG1wZGVwZmlsZSIKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKyAgYWxwaGE9QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorIyMgVGhlIHNlY29uZCAtZSBleHByZXNzaW9uIGhhbmRsZXMgRE9TLXN0eWxlIGZpbGUgbmFtZXMgd2l0aCBkcml2ZSBsZXR0ZXJzLgorICBzZWQgLWUgJ3MvXlteOl0qOiAvIC8nIFwKKyAgICAgIC1lICdzL15bJyRhbHBoYSddOlwvW146XSo6IC8gLycgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyMjIFRoaXMgbmV4dCBwaWVjZSBvZiBtYWdpYyBhdm9pZHMgdGhlIGBkZWxldGVkIGhlYWRlciBmaWxlJyBwcm9ibGVtLgorIyMgVGhlIHByb2JsZW0gaXMgdGhhdCB3aGVuIGEgaGVhZGVyIGZpbGUgd2hpY2ggYXBwZWFycyBpbiBhIC5QIGZpbGUKKyMjIGlzIGRlbGV0ZWQsIHRoZSBkZXBlbmRlbmN5IGNhdXNlcyBtYWtlIHRvIGRpZSAoYmVjYXVzZSB0aGVyZSBpcworIyMgdHlwaWNhbGx5IG5vIHdheSB0byByZWJ1aWxkIHRoZSBoZWFkZXIpLiAgV2UgYXZvaWQgdGhpcyBieSBhZGRpbmcKKyMjIGR1bW15IGRlcGVuZGVuY2llcyBmb3IgZWFjaCBoZWFkZXIgZmlsZS4gIFRvbyBiYWQgZ2NjIGRvZXNuJ3QgZG8KKyMjIHRoaXMgZm9yIHVzIGRpcmVjdGx5LgorICB0ciAnICcgJworJyA8ICIkdG1wZGVwZmlsZSIgfAorIyMgU29tZSB2ZXJzaW9ucyBvZiBnY2MgcHV0IGEgc3BhY2UgYmVmb3JlIHRoZSBgOicuICBPbiB0aGUgdGhlb3J5CisjIyB0aGF0IHRoZSBzcGFjZSBtZWFucyBzb21ldGhpbmcsIHdlIGFkZCBhIHNwYWNlIHRvIHRoZSBvdXRwdXQgYXMKKyMjIHdlbGwuCisjIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgorIyMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKyAgICBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICcvOiQvZCcgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCitocCkKKyAgIyBUaGlzIGNhc2UgZXhpc3RzIG9ubHkgdG8gbGV0IGRlcGVuZC5tNCBkbyBpdHMgd29yay4gIEl0IHdvcmtzIGJ5CisgICMgbG9va2luZyBhdCB0aGUgdGV4dCBvZiB0aGlzIHNjcmlwdC4gIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHJ1biwKKyAgIyBzaW5jZSBpdCBpcyBjaGVja2VkIGZvciBhYm92ZS4KKyAgZXhpdCAxCisgIDs7CisKK3NnaSkKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgIiRAIiAiLVdwLC1NRHVwZGF0ZSwkdG1wZGVwZmlsZSIKKyAgZWxzZQorICAgICIkQCIgLU1EdXBkYXRlICIkdG1wZGVwZmlsZSIKKyAgZmkKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIHJtIC1mICIkZGVwZmlsZSIKKworICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4gICMgeWVzLCB0aGUgc291cmNlZmlsZSBkZXBlbmQgb24gb3RoZXIgZmlsZXMKKyAgICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgorCisgICAgIyBDbGlwIG9mZiB0aGUgaW5pdGlhbCBlbGVtZW50ICh0aGUgZGVwZW5kZW50KS4gIERvbid0IHRyeSB0byBiZQorICAgICMgY2xldmVyIGFuZCByZXBsYWNlIHRoaXMgd2l0aCBzZWQgY29kZSwgYXMgSVJJWCBzZWQgd29uJ3QgaGFuZGxlCisgICAgIyBsaW5lcyB3aXRoIG1vcmUgdGhhbiBhIGZpeGVkIG51bWJlciBvZiBjaGFyYWN0ZXJzICg0MDk2IGluCisgICAgIyBJUklYIDYuMiBzZWQsIDgxOTIgaW4gSVJJWCA2LjUpLiAgV2UgYWxzbyByZW1vdmUgY29tbWVudCBsaW5lczsKKyAgICAjIHRoZSBJUklYIGNjIGFkZHMgY29tbWVudHMgbGlrZSBgIzpmZWMnIHRvIHRoZSBlbmQgb2YgdGhlCisgICAgIyBkZXBlbmRlbmN5IGxpbmUuCisgICAgdHIgJyAnICcKKycgPCAiJHRtcGRlcGZpbGUiIFwKKyAgICB8IHNlZCAtZSAncy9eLipcLm86Ly8nIC1lICdzLyMuKiQvLycgLWUgJy9eJC8gZCcgfCBcCisgICAgdHIgJworJyAnICcgPj4gIiRkZXBmaWxlIgorICAgIGVjaG8gPj4gIiRkZXBmaWxlIgorCisgICAgIyBUaGUgc2Vjb25kIHBhc3MgZ2VuZXJhdGVzIGEgZHVtbXkgZW50cnkgZm9yIGVhY2ggaGVhZGVyIGZpbGUuCisgICAgdHIgJyAnICcKKycgPCAiJHRtcGRlcGZpbGUiIFwKKyAgIHwgc2VkIC1lICdzL14uKlwubzovLycgLWUgJ3MvIy4qJC8vJyAtZSAnL14kLyBkJyAtZSAncy8kLzovJyBcCisgICA+PiAiJGRlcGZpbGUiCisgIGVsc2UKKyAgICAjIFRoZSBzb3VyY2VmaWxlIGRvZXMgbm90IGNvbnRhaW4gYW55IGRlcGVuZGVuY2llcywgc28ganVzdAorICAgICMgc3RvcmUgYSBkdW1teSBjb21tZW50IGxpbmUsIHRvIGF2b2lkIGVycm9ycyB3aXRoIHRoZSBNYWtlZmlsZQorICAgICMgImluY2x1ZGUgYmFzZW5hbWUuUGxvIiBzY2hlbWUuCisgICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKKyAgZmkKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCithaXgpCisgICMgVGhlIEMgZm9yIEFJWCBDb21waWxlciB1c2VzIC1NIGFuZCBvdXRwdXRzIHRoZSBkZXBlbmRlbmNpZXMKKyAgIyBpbiBhIC51IGZpbGUuICBJbiBvbGRlciB2ZXJzaW9ucywgdGhpcyBmaWxlIGFsd2F5cyBsaXZlcyBpbiB0aGUKKyAgIyBjdXJyZW50IGRpcmVjdG9yeS4gIEFsc28sIHRoZSBBSVggY29tcGlsZXIgcHV0cyBgJG9iamVjdDonIGF0IHRoZQorICAjIHN0YXJ0IG9mIGVhY2ggbGluZTsgJG9iamVjdCBkb2Vzbid0IGhhdmUgZGlyZWN0b3J5IGluZm9ybWF0aW9uLgorICAjIFZlcnNpb24gNiB1c2VzIHRoZSBkaXJlY3RvcnkgaW4gYm90aCBjYXNlcy4KKyAgZGlyPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3wvW14vXSokfC98J2AKKyAgdGVzdCAieCRkaXIiID0gIngkb2JqZWN0IiAmJiBkaXI9CisgIGJhc2U9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfF4uKi98fCcgLWUgJ3MvXC5vJC8vJyAtZSAncy9cLmxvJC8vJ2AKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLnUKKyAgICB0bXBkZXBmaWxlMj0kYmFzZS51CisgICAgdG1wZGVwZmlsZTM9JGRpci5saWJzLyRiYXNlLnUKKyAgICAiJEAiIC1XYywtTQorICBlbHNlCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLnUKKyAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2UudQorICAgIHRtcGRlcGZpbGUzPSRkaXIkYmFzZS51CisgICAgIiRAIiAtTQorICBmaQorICBzdGF0PSQ/CisKKyAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgIGVsc2UKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKworICBmb3IgdG1wZGVwZmlsZSBpbiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIgorICBkbworICAgIHRlc3QgLWYgIiR0bXBkZXBmaWxlIiAmJiBicmVhaworICBkb25lCisgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgorICAgICMgRWFjaCBsaW5lIGlzIG9mIHRoZSBmb3JtIGBmb28ubzogZGVwZW5kZW50LmgnLgorICAgICMgRG8gdHdvIHBhc3Nlcywgb25lIHRvIGp1c3QgY2hhbmdlIHRoZXNlIHRvCisgICAgIyBgJG9iamVjdDogZGVwZW5kZW50LmgnIGFuZCBvbmUgdG8gc2ltcGx5IGBkZXBlbmRlbnQuaDonLgorICAgIHNlZCAtZSAicyxeLipcLlthLXpdKjosJG9iamVjdDosIiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICAgIyBUaGF0J3MgYSB0YWIgYW5kIGEgc3BhY2UgaW4gdGhlIFtdLgorICAgIHNlZCAtZSAncyxeLipcLlthLXpdKjpbCSBdKiwsJyAtZSAncywkLDosJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICBlbHNlCisgICAgIyBUaGUgc291cmNlZmlsZSBkb2VzIG5vdCBjb250YWluIGFueSBkZXBlbmRlbmNpZXMsIHNvIGp1c3QKKyAgICAjIHN0b3JlIGEgZHVtbXkgY29tbWVudCBsaW5lLCB0byBhdm9pZCBlcnJvcnMgd2l0aCB0aGUgTWFrZWZpbGUKKyAgICAjICJpbmNsdWRlIGJhc2VuYW1lLlBsbyIgc2NoZW1lLgorICAgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCisgIGZpCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworaWNjKQorICAjIEludGVsJ3MgQyBjb21waWxlciB1bmRlcnN0YW5kcyBgLU1EIC1NRiBmaWxlJy4gIEhvd2V2ZXIgb24KKyAgIyAgICBpY2MgLU1EIC1NRiBmb28uZCAtYyAtbyBzdWIvZm9vLm8gc3ViL2Zvby5jCisgICMgSUNDIDcuMCB3aWxsIGZpbGwgZm9vLmQgd2l0aCBzb21ldGhpbmcgbGlrZQorICAjICAgIGZvby5vOiBzdWIvZm9vLmMKKyAgIyAgICBmb28ubzogc3ViL2Zvby5oCisgICMgd2hpY2ggaXMgd3JvbmcuICBXZSB3YW50OgorICAjICAgIHN1Yi9mb28ubzogc3ViL2Zvby5jCisgICMgICAgc3ViL2Zvby5vOiBzdWIvZm9vLmgKKyAgIyAgICBzdWIvZm9vLmM6CisgICMgICAgc3ViL2Zvby5oOgorICAjIElDQyA3LjEgd2lsbCBvdXRwdXQKKyAgIyAgICBmb28ubzogc3ViL2Zvby5jIHN1Yi9mb28uaAorICAjIGFuZCB3aWxsIHdyYXAgbG9uZyBsaW5lcyB1c2luZyBcIDoKKyAgIyAgICBmb28ubzogc3ViL2Zvby5jIC4uLiBcCisgICMgICAgIHN1Yi9mb28uaCAuLi4gXAorICAjICAgICAuLi4KKworICAiJEAiIC1NRCAtTUYgIiR0bXBkZXBmaWxlIgorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgcm0gLWYgIiRkZXBmaWxlIgorICAjIEVhY2ggbGluZSBpcyBvZiB0aGUgZm9ybSBgZm9vLm86IGRlcGVuZGVudC5oJywKKyAgIyBvciBgZm9vLm86IGRlcDEuaCBkZXAyLmggXCcsIG9yIGAgZGVwMy5oIGRlcDQuaCBcJy4KKyAgIyBEbyB0d28gcGFzc2VzLCBvbmUgdG8ganVzdCBjaGFuZ2UgdGhlc2UgdG8KKyAgIyBgJG9iamVjdDogZGVwZW5kZW50LmgnIGFuZCBvbmUgdG8gc2ltcGx5IGBkZXBlbmRlbnQuaDonLgorICBzZWQgInMsXlteOl0qOiwkb2JqZWN0IDosIiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KKyAgIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICBzZWQgJ3MsXlteOl0qOiBcKC4qXCkkLFwxLDtzL15cXCQvLzsvXiQvZDsvOiQvZCcgPCAiJHRtcGRlcGZpbGUiIHwKKyAgICBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCitocDIpCisgICMgVGhlICJocCIgc3RhbnphIGFib3ZlIGRvZXMgbm90IHdvcmsgd2l0aCBhQ0MgKEMrKykgYW5kIEhQJ3MgaWE2NAorICAjIGNvbXBpbGVycywgd2hpY2ggaGF2ZSBpbnRlZ3JhdGVkIHByZXByb2Nlc3NvcnMuICBUaGUgY29ycmVjdCBvcHRpb24KKyAgIyB0byB1c2Ugd2l0aCB0aGVzZSBpcyArTWFrZWQ7IGl0IHdyaXRlcyBkZXBlbmRlbmNpZXMgdG8gYSBmaWxlIG5hbWVkCisgICMgJ2Zvby5kJywgd2hpY2ggbGFuZHMgbmV4dCB0byB0aGUgb2JqZWN0IGZpbGUsIHdoZXJldmVyIHRoYXQKKyAgIyBoYXBwZW5zIHRvIGJlLgorICAjIE11Y2ggb2YgdGhpcyBpcyBzaW1pbGFyIHRvIHRoZSB0cnU2NCBjYXNlOyBzZWUgY29tbWVudHMgdGhlcmUuCisgIGRpcj1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8L1teL10qJHwvfCdgCisgIHRlc3QgIngkZGlyIiA9ICJ4JG9iamVjdCIgJiYgZGlyPQorICBiYXNlPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wubyQvLycgLWUgJ3MvXC5sbyQvLydgCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5kCisgICAgdG1wZGVwZmlsZTI9JGRpci5saWJzLyRiYXNlLmQKKyAgICAiJEAiIC1XYywrTWFrZWQKKyAgZWxzZQorICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5kCisgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLmQKKyAgICAiJEAiICtNYWtlZAorICBmaQorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgIHJtIC1mICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiCisgICAgIGV4aXQgJHN0YXQKKyAgZmkKKworICBmb3IgdG1wZGVwZmlsZSBpbiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIgorICBkbworICAgIHRlc3QgLWYgIiR0bXBkZXBmaWxlIiAmJiBicmVhaworICBkb25lCisgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgorICAgIHNlZCAtZSAicyxeLipcLlthLXpdKjosJG9iamVjdDosIiAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAgICMgQWRkIGBkZXBlbmRlbnQuaDonIGxpbmVzLgorICAgIHNlZCAtbmUgJzIsJHsKKwkgICAgICAgcy9eICovLworCSAgICAgICBzLyBcXCokLy8KKwkgICAgICAgcy8kLzovCisJICAgICAgIHAKKwkgICAgIH0nICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICBlbHNlCisgICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKKyAgZmkKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIiAiJHRtcGRlcGZpbGUyIgorICA7OworCit0cnU2NCkKKyAgICMgVGhlIFRydTY0IGNvbXBpbGVyIHVzZXMgLU1EIHRvIGdlbmVyYXRlIGRlcGVuZGVuY2llcyBhcyBhIHNpZGUKKyAgICMgZWZmZWN0LiAgYGNjIC1NRCAtbyBmb28ubyAuLi4nIHB1dHMgdGhlIGRlcGVuZGVuY2llcyBpbnRvIGBmb28uby5kJy4KKyAgICMgQXQgbGVhc3Qgb24gQWxwaGEvUmVkaGF0IDYuMSwgQ29tcGFxIENDQyBWNi4yLTUwNCBzZWVtcyB0byBwdXQKKyAgICMgZGVwZW5kZW5jaWVzIGluIGBmb28uZCcgaW5zdGVhZCwgc28gd2UgY2hlY2sgZm9yIHRoYXQgdG9vLgorICAgIyBTdWJkaXJlY3RvcmllcyBhcmUgcmVzcGVjdGVkLgorICAgZGlyPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3wvW14vXSokfC98J2AKKyAgIHRlc3QgIngkZGlyIiA9ICJ4JG9iamVjdCIgJiYgZGlyPQorICAgYmFzZT1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8Xi4qL3x8JyAtZSAncy9cLm8kLy8nIC1lICdzL1wubG8kLy8nYAorCisgICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICAgICMgV2l0aCBUcnU2NCBjYywgc2hhcmVkIG9iamVjdHMgY2FuIGFsc28gYmUgdXNlZCB0byBtYWtlIGEKKyAgICAgICMgc3RhdGljIGxpYnJhcnkuICBUaGlzIG1lY2hhbmlzbSBpcyB1c2VkIGluIGxpYnRvb2wgMS40IHNlcmllcyB0bworICAgICAgIyBoYW5kbGUgYm90aCBzaGFyZWQgYW5kIHN0YXRpYyBsaWJyYXJpZXMgaW4gYSBzaW5nbGUgY29tcGlsYXRpb24uCisgICAgICAjIFdpdGggbGlidG9vbCAxLjQsIGRlcGVuZGVuY2llcyB3ZXJlIG91dHB1dCBpbiAkZGlyLmxpYnMvJGJhc2UubG8uZC4KKyAgICAgICMKKyAgICAgICMgV2l0aCBsaWJ0b29sIDEuNSB0aGlzIGV4Y2VwdGlvbiB3YXMgcmVtb3ZlZCwgYW5kIGxpYnRvb2wgbm93CisgICAgICAjIGdlbmVyYXRlcyAyIHNlcGFyYXRlIG9iamVjdHMgZm9yIHRoZSAyIGxpYnJhcmllcy4gIFRoZXNlIHR3bworICAgICAgIyBjb21waWxhdGlvbnMgb3V0cHV0IGRlcGVuZGVuY2llcyBpbiAkZGlyLmxpYnMvJGJhc2Uuby5kIGFuZAorICAgICAgIyBpbiAkZGlyJGJhc2Uuby5kLiAgV2UgaGF2ZSB0byBjaGVjayBmb3IgYm90aCBmaWxlcywgYmVjYXVzZQorICAgICAgIyBvbmUgb2YgdGhlIHR3byBjb21waWxhdGlvbnMgY2FuIGJlIGRpc2FibGVkLiAgV2Ugc2hvdWxkIHByZWZlcgorICAgICAgIyAkZGlyJGJhc2Uuby5kIG92ZXIgJGRpci5saWJzLyRiYXNlLm8uZCBiZWNhdXNlIHRoZSBsYXR0ZXIgaXMKKyAgICAgICMgYXV0b21hdGljYWxseSBjbGVhbmVkIHdoZW4gLmxpYnMvIGlzIGRlbGV0ZWQsIHdoaWxlIGlnbm9yaW5nCisgICAgICAjIHRoZSBmb3JtZXIgd291bGQgY2F1c2UgYSBkaXN0Y2xlYW5jaGVjayBwYW5pYy4KKyAgICAgIHRtcGRlcGZpbGUxPSRkaXIubGlicy8kYmFzZS5sby5kICAgIyBsaWJ0b29sIDEuNAorICAgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLm8uZCAgICAgICAgICAjIGxpYnRvb2wgMS41CisgICAgICB0bXBkZXBmaWxlMz0kZGlyLmxpYnMvJGJhc2Uuby5kICAgICMgbGlidG9vbCAxLjUKKyAgICAgIHRtcGRlcGZpbGU0PSRkaXIubGlicy8kYmFzZS5kICAgICAgIyBDb21wYXEgQ0NDIFY2LjItNTA0CisgICAgICAiJEAiIC1XYywtTUQKKyAgIGVsc2UKKyAgICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5vLmQKKyAgICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS5kCisgICAgICB0bXBkZXBmaWxlMz0kZGlyJGJhc2UuZAorICAgICAgdG1wZGVwZmlsZTQ9JGRpciRiYXNlLmQKKyAgICAgICIkQCIgLU1ECisgICBmaQorCisgICBzdGF0PSQ/CisgICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgIGVsc2UKKyAgICAgIHJtIC1mICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiICIkdG1wZGVwZmlsZTQiCisgICAgICBleGl0ICRzdGF0CisgICBmaQorCisgICBmb3IgdG1wZGVwZmlsZSBpbiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIiAiJHRtcGRlcGZpbGU0IgorICAgZG8KKyAgICAgdGVzdCAtZiAiJHRtcGRlcGZpbGUiICYmIGJyZWFrCisgICBkb25lCisgICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KKyAgICAgIHNlZCAtZSAicyxeLipcLlthLXpdKjosJG9iamVjdDosIiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICAgICAjIFRoYXQncyBhIHRhYiBhbmQgYSBzcGFjZSBpbiB0aGUgW10uCisgICAgICBzZWQgLWUgJ3MsXi4qXC5bYS16XSo6WwkgXSosLCcgLWUgJ3MsJCw6LCcgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyAgIGVsc2UKKyAgICAgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCisgICBmaQorICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgOzsKKworI25vc2lkZWVmZmVjdCkKKyAgIyBUaGlzIGNvbW1lbnQgYWJvdmUgaXMgdXNlZCBieSBhdXRvbWFrZSB0byB0ZWxsIHNpZGUtZWZmZWN0CisgICMgZGVwZW5kZW5jeSB0cmFja2luZyBtZWNoYW5pc21zIGZyb20gc2xvd2VyIG9uZXMuCisKK2Rhc2htc3Rkb3V0KQorICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKKyAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dCwgcmVnYXJkbGVzcyBvZiAtby4KKyAgIiRAIiB8fCBleGl0ICQ/CisKKyAgIyBSZW1vdmUgdGhlIGNhbGwgdG8gTGlidG9vbC4KKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgd2hpbGUgdGVzdCAiWCQxIiAhPSAnWC0tbW9kZT1jb21waWxlJzsgZG8KKyAgICAgIHNoaWZ0CisgICAgZG9uZQorICAgIHNoaWZ0CisgIGZpCisKKyAgIyBSZW1vdmUgYC1vICRvYmplY3QnLgorICBJRlM9IiAiCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICRhcmcgaW4KKyAgICAtbykKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICRvYmplY3QpCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciCisgICAgICBzaGlmdCAjIGZub3JkCisgICAgICBzaGlmdCAjICRhcmcKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgdGVzdCAteiAiJGRhc2htZmxhZyIgJiYgZGFzaG1mbGFnPS1NCisgICMgUmVxdWlyZSBhdCBsZWFzdCB0d28gY2hhcmFjdGVycyBiZWZvcmUgc2VhcmNoaW5nIGZvciBgOicKKyAgIyBpbiB0aGUgdGFyZ2V0IG5hbWUuICBUaGlzIGlzIHRvIGNvcGUgd2l0aCBET1Mtc3R5bGUgZmlsZW5hbWVzOgorICAjIGEgZGVwZW5kZW5jeSBzdWNoIGFzIGBjOi9mb28vYmFyJyBjb3VsZCBiZSBzZWVuIGFzIHRhcmdldCBgYycgb3RoZXJ3aXNlLgorICAiJEAiICRkYXNobWZsYWcgfAorICAgIHNlZCAnczpeWyAgXSpbXjogXVteOl1bXjpdKlw6WyAgICBdKjonIiRvYmplY3QiJ1w6IDonID4gIiR0bXBkZXBmaWxlIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGNhdCA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgIHRyICcgJyAnCisnIDwgIiR0bXBkZXBmaWxlIiB8IFwKKyMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCisjIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICAgIHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2Rhc2hYbXN0ZG91dCkKKyAgIyBUaGlzIGNhc2Ugb25seSBleGlzdHMgdG8gc2F0aXNmeSBkZXBlbmQubTQuICBJdCBpcyBuZXZlciBhY3R1YWxseQorICAjIHJ1biwgYXMgdGhpcyBtb2RlIGlzIHNwZWNpYWxseSByZWNvZ25pemVkIGluIHRoZSBwcmVhbWJsZS4KKyAgZXhpdCAxCisgIDs7CisKK21ha2VkZXBlbmQpCisgICIkQCIgfHwgZXhpdCAkPworICAjIFJlbW92ZSBhbnkgTGlidG9vbCBjYWxsCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHdoaWxlIHRlc3QgIlgkMSIgIT0gJ1gtLW1vZGU9Y29tcGlsZSc7IGRvCisgICAgICBzaGlmdAorICAgIGRvbmUKKyAgICBzaGlmdAorICBmaQorICAjIFggbWFrZWRlcGVuZAorICBzaGlmdAorICBjbGVhcmVkPW5vIGVhdD1ubworICBmb3IgYXJnCisgIGRvCisgICAgY2FzZSAkY2xlYXJlZCBpbgorICAgIG5vKQorICAgICAgc2V0ICIiOyBzaGlmdAorICAgICAgY2xlYXJlZD15ZXMgOzsKKyAgICBlc2FjCisgICAgaWYgdGVzdCAkZWF0ID0geWVzOyB0aGVuCisgICAgICBlYXQ9bm8KKyAgICAgIGNvbnRpbnVlCisgICAgZmkKKyAgICBjYXNlICIkYXJnIiBpbgorICAgIC1EKnwtSSopCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyI7IHNoaWZ0IDs7CisgICAgIyBTdHJpcCBhbnkgb3B0aW9uIHRoYXQgbWFrZWRlcGVuZCBtYXkgbm90IHVuZGVyc3RhbmQuICBSZW1vdmUKKyAgICAjIHRoZSBvYmplY3QgdG9vLCBvdGhlcndpc2UgbWFrZWRlcGVuZCB3aWxsIHBhcnNlIGl0IGFzIGEgc291cmNlIGZpbGUuCisgICAgLWFyY2gpCisgICAgICBlYXQ9eWVzIDs7CisgICAgLSp8JG9iamVjdCkKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIjsgc2hpZnQgOzsKKyAgICBlc2FjCisgIGRvbmUKKyAgb2JqX3N1ZmZpeD1gZWNobyAiJG9iamVjdCIgfCBzZWQgJ3MvXi4qXC4vLi8nYAorICB0b3VjaCAiJHRtcGRlcGZpbGUiCisgICR7TUFLRURFUEVORC1tYWtlZGVwZW5kfSAtbyIkb2JqX3N1ZmZpeCIgLWYiJHRtcGRlcGZpbGUiICIkQCIKKyAgcm0gLWYgIiRkZXBmaWxlIgorICBjYXQgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICBzZWQgJzEsMmQnICIkdG1wZGVwZmlsZSIgfCB0ciAnICcgJworJyB8IFwKKyMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCisjIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICAgIHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiICIkdG1wZGVwZmlsZSIuYmFrCisgIDs7CisKK2NwcCkKKyAgIyBJbXBvcnRhbnQgbm90ZTogaW4gb3JkZXIgdG8gc3VwcG9ydCB0aGlzIG1vZGUsIGEgY29tcGlsZXIgKm11c3QqCisgICMgYWx3YXlzIHdyaXRlIHRoZSBwcmVwcm9jZXNzZWQgZmlsZSB0byBzdGRvdXQuCisgICIkQCIgfHwgZXhpdCAkPworCisgICMgUmVtb3ZlIHRoZSBjYWxsIHRvIExpYnRvb2wuCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHdoaWxlIHRlc3QgIlgkMSIgIT0gJ1gtLW1vZGU9Y29tcGlsZSc7IGRvCisgICAgICBzaGlmdAorICAgIGRvbmUKKyAgICBzaGlmdAorICBmaQorCisgICMgUmVtb3ZlIGAtbyAkb2JqZWN0Jy4KKyAgSUZTPSIgIgorICBmb3IgYXJnCisgIGRvCisgICAgY2FzZSAkYXJnIGluCisgICAgLW8pCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAkb2JqZWN0KQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIgorICAgICAgc2hpZnQgIyBmbm9yZAorICAgICAgc2hpZnQgIyAkYXJnCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgICIkQCIgLUUgfAorICAgIHNlZCAtbiAtZSAnL14jIFswLTldWzAtOV0qICJcKFteIl0qXCkiLiovIHM6OiBcMSBcXDpwJyBcCisgICAgICAgLWUgJy9eI2xpbmUgWzAtOV1bMC05XSogIlwoW14iXSpcKSIuKi8gczo6IFwxIFxcOnAnIHwKKyAgICBzZWQgJyQgczogXFwkOjonID4gIiR0bXBkZXBmaWxlIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisgIGNhdCA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICBzZWQgPCAiJHRtcGRlcGZpbGUiICcvXiQvZDtzL14gLy87cy8gXFwkLy87cy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK21zdmlzdWFsY3BwKQorICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKKyAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dC4KKyAgIiRAIiB8fCBleGl0ICQ/CisKKyAgIyBSZW1vdmUgdGhlIGNhbGwgdG8gTGlidG9vbC4KKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgd2hpbGUgdGVzdCAiWCQxIiAhPSAnWC0tbW9kZT1jb21waWxlJzsgZG8KKyAgICAgIHNoaWZ0CisgICAgZG9uZQorICAgIHNoaWZ0CisgIGZpCisKKyAgSUZTPSIgIgorICBmb3IgYXJnCisgIGRvCisgICAgY2FzZSAiJGFyZyIgaW4KKyAgICAtbykKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICRvYmplY3QpCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAiLUdtInwiL0dtInwiLUdpInwiL0dpInwiLVpJInwiL1pJIikKKwlzZXQgZm5vcmQgIiRAIgorCXNoaWZ0CisJc2hpZnQKKwk7OworICAgICopCisJc2V0IGZub3JkICIkQCIgIiRhcmciCisJc2hpZnQKKwlzaGlmdAorCTs7CisgICAgZXNhYworICBkb25lCisgICIkQCIgLUUgMj4vZGV2L251bGwgfAorICBzZWQgLW4gJy9eI2xpbmUgWzAtOV1bMC05XSogIlwoW14iXSpcKSIvIHM6OlwxOnAnIHwgJGN5Z3BhdGhfdSB8IHNvcnQgLXUgPiAiJHRtcGRlcGZpbGUiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKyAgc2VkIDwgIiR0bXBkZXBmaWxlIiAtbiAtZSAncyUgJVxcICVnJyAtZSAnL15cKC4qXCkkLyBzOjoJXDEgXFw6cCcgPj4gIiRkZXBmaWxlIgorICBlY2hvICIJIiA+PiAiJGRlcGZpbGUiCisgIHNlZCA8ICIkdG1wZGVwZmlsZSIgLW4gLWUgJ3MlICVcXCAlZycgLWUgJy9eXCguKlwpJC8gczo6XDFcOjpwJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworbXN2Y21zeXMpCisgICMgVGhpcyBjYXNlIGV4aXN0cyBvbmx5IHRvIGxldCBkZXBlbmQubTQgZG8gaXRzIHdvcmsuICBJdCB3b3JrcyBieQorICAjIGxvb2tpbmcgYXQgdGhlIHRleHQgb2YgdGhpcyBzY3JpcHQuICBUaGlzIGNhc2Ugd2lsbCBuZXZlciBiZSBydW4sCisgICMgc2luY2UgaXQgaXMgY2hlY2tlZCBmb3IgYWJvdmUuCisgIGV4aXQgMQorICA7OworCitub25lKQorICBleGVjICIkQCIKKyAgOzsKKworKikKKyAgZWNobyAiVW5rbm93biBkZXBtb2RlICRkZXBtb2RlIiAxPiYyCisgIGV4aXQgMQorICA7OworZXNhYworCitleGl0IDAKKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6IHNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjogMgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9tYWtlLTEuMTEvZWxpc3AtY29tcCBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvZWxpc3AtY29tcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZThjODJjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9lbGlzcC1jb21wCkBAIC0wLDAgKzEsOTAgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKEMpIDE5OTUsIDIwMDAsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDkgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisKK3NjcmlwdHZlcnNpb249MjAwOS0wNC0yOC4yMTsgIyBVVEMKKworIyBGcmFuYyxvaXMgUGluYXJkIDxwaW5hcmRAaXJvLnVtb250cmVhbC5jYT4sIDE5OTUuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBUaGlzIGZpbGUgaXMgbWFpbnRhaW5lZCBpbiBBdXRvbWFrZSwgcGxlYXNlIHJlcG9ydAorIyBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4gb3Igc2VuZCBwYXRjaGVzIHRvCisjIDxhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmc+LgorCitjYXNlICQxIGluCisgICcnKQorICAgICBlY2hvICIkMDogTm8gZmlsZXMuICBUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgorICAgICBleGl0IDE7CisgICAgIDs7CisgIC1oIHwgLS1oKikKKyAgICBjYXQgPDxcRU9GCitVc2FnZTogZWxpc3AtY29tcCBbLS1oZWxwXSBbLS12ZXJzaW9uXSBGSUxFUy4uLgorCitUaGlzIHNjcmlwdCBieXRlLWNvbXBpbGVzIGFsbCBgLmVsJyBmaWxlcyBsaXN0ZWQgYXMgRklMRVMgdXNpbmcgR05VCitFbWFjcywgYW5kIHB1dCB0aGUgcmVzdWx0aW5nIGAuZWxjJyBmaWxlcyBpbnRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwKK3NvIGRpc3JlZ2FyZGluZyB0aGUgb3JpZ2luYWwgZGlyZWN0b3JpZXMgdXNlZCBpbiBgLmVsJyBhcmd1bWVudHMuCisKK1RoaXMgc2NyaXB0IG1hbmFnZXMgaW4gc3VjaCBhIHdheSB0aGF0IGFsbCBFbWFjcyBMSVNQIGZpbGVzIHRvCitiZSBjb21waWxlZCBhcmUgbWFkZSB2aXNpYmxlIGJldHdlZW4gdGhlbXNlbHZlcywgaW4gdGhlIGV2ZW50Cit0aGV5IHJlcXVpcmUgb3IgbG9hZC1saWJyYXJ5IG9uZSBhbm90aGVyLgorCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LgorRU9GCisgICAgZXhpdCAkPworICAgIDs7CisgIC12IHwgLS12KikKKyAgICBlY2hvICJlbGlzcC1jb21wICRzY3JpcHR2ZXJzaW9uIgorICAgIGV4aXQgJD8KKyAgICA7OworZXNhYworCitpZiB0ZXN0IC16ICIkRU1BQ1MiIHx8IHRlc3QgIiRFTUFDUyIgPSAidCI7IHRoZW4KKyAgIyBWYWx1ZSBvZiAidCIgbWVhbnMgd2UgYXJlIHJ1bm5pbmcgaW4gYSBzaGVsbCB1bmRlciBFbWFjcy4KKyAgIyBKdXN0IGFzc3VtZSBFbWFjcyBpcyBjYWxsZWQgImVtYWNzIi4KKyAgRU1BQ1M9ZW1hY3MKK2ZpCisKK3RlbXBkaXI9ZWxjLiQkCisKKyMgQ2xlYW51cCB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBvbiBleGl0LgordHJhcCAncmV0PSQ/OyBybSAtcmYgIiR0ZW1wZGlyIiAmJiBleGl0ICRyZXQnIDAKK3RyYXAgJyhleGl0ICQ/KTsgZXhpdCcgMSAyIDEzIDE1CisKK21rZGlyICR0ZW1wZGlyCitjcCAiJEAiICR0ZW1wZGlyCisKKygKKyAgY2QgJHRlbXBkaXIKKyAgZWNobyAiKHNldHEgbG9hZC1wYXRoIChjb25zIG5pbCBsb2FkLXBhdGgpKSIgPiBzY3JpcHQKKyAgJEVNQUNTIC1iYXRjaCAtcSAtbCBzY3JpcHQgLWYgYmF0Y2gtYnl0ZS1jb21waWxlICouZWwgfHwgZXhpdCAkPworICBtdiAqLmVsYyAuLgorKSB8fCBleGl0ICQ/CisKKyhleGl0IDApOyBleGl0IDAKKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6IHNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjogMgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9tYWtlLTEuMTEvaW5zdGFsbC1zaCBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvaW5zdGFsbC1zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NzgxYjk4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9pbnN0YWxsLXNoCkBAIC0wLDAgKzEsNTIwIEBACisjIS9iaW4vc2gKKyMgaW5zdGFsbCAtIGluc3RhbGwgYSBwcm9ncmFtLCBzY3JpcHQsIG9yIGRhdGFmaWxlCisKK3NjcmlwdHZlcnNpb249MjAwOS0wNC0yOC4yMTsgIyBVVEMKKworIyBUaGlzIG9yaWdpbmF0ZXMgZnJvbSBYMTFSNSAobWl0L3V0aWwvc2NyaXB0cy9pbnN0YWxsLnNoKSwgd2hpY2ggd2FzCisjIGxhdGVyIHJlbGVhc2VkIGluIFgxMVI2ICh4Yy9jb25maWcvdXRpbC9pbnN0YWxsLnNoKSB3aXRoIHRoZQorIyBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZCBsaWNlbnNlLgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTQgWCBDb25zb3J0aXVtCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCisjIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCisjIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorIyBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyMgWCBDT05TT1JUSVVNIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUMtCisjIFRJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIHRoZSBYIENvbnNvcnRpdW0gc2hhbGwgbm90CisjIGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsLQorIyBpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gZnJvbSB0aGUgWCBDb25zb3ItCisjIHRpdW0uCisjCisjCisjIEZTRiBjaGFuZ2VzIHRvIHRoaXMgZmlsZSBhcmUgaW4gdGhlIHB1YmxpYyBkb21haW4uCisjCisjIENhbGxpbmcgdGhpcyBzY3JpcHQgaW5zdGFsbC1zaCBpcyBwcmVmZXJyZWQgb3ZlciBpbnN0YWxsLnNoLCB0byBwcmV2ZW50CisjIGBtYWtlJyBpbXBsaWNpdCBydWxlcyBmcm9tIGNyZWF0aW5nIGEgZmlsZSBjYWxsZWQgaW5zdGFsbCBmcm9tIGl0CisjIHdoZW4gdGhlcmUgaXMgbm8gTWFrZWZpbGUuCisjCisjIFRoaXMgc2NyaXB0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgQlNEIGluc3RhbGwgc2NyaXB0LCBidXQgd2FzIHdyaXR0ZW4KKyMgZnJvbSBzY3JhdGNoLgorCitubD0nCisnCitJRlM9IiAiIgkkbmwiCisKKyMgc2V0IERPSVRQUk9HIHRvIGVjaG8gdG8gdGVzdCB0aGlzIHNjcmlwdAorCisjIERvbid0IHVzZSA6LSBzaW5jZSA0LjNCU0QgYW5kIGVhcmxpZXIgc2hlbGxzIGRvbid0IGxpa2UgaXQuCitkb2l0PSR7RE9JVFBST0ctfQoraWYgdGVzdCAteiAiJGRvaXQiOyB0aGVuCisgIGRvaXRfZXhlYz1leGVjCitlbHNlCisgIGRvaXRfZXhlYz0kZG9pdAorZmkKKworIyBQdXQgaW4gYWJzb2x1dGUgZmlsZSBuYW1lcyBpZiB5b3UgZG9uJ3QgaGF2ZSB0aGVtIGluIHlvdXIgcGF0aDsKKyMgb3IgdXNlIGVudmlyb25tZW50IHZhcnMuCisKK2NoZ3JwcHJvZz0ke0NIR1JQUFJPRy1jaGdycH0KK2NobW9kcHJvZz0ke0NITU9EUFJPRy1jaG1vZH0KK2Nob3ducHJvZz0ke0NIT1dOUFJPRy1jaG93bn0KK2NtcHByb2c9JHtDTVBQUk9HLWNtcH0KK2NwcHJvZz0ke0NQUFJPRy1jcH0KK21rZGlycHJvZz0ke01LRElSUFJPRy1ta2Rpcn0KK212cHJvZz0ke01WUFJPRy1tdn0KK3JtcHJvZz0ke1JNUFJPRy1ybX0KK3N0cmlwcHJvZz0ke1NUUklQUFJPRy1zdHJpcH0KKworcG9zaXhfZ2xvYj0nPycKK2luaXRpYWxpemVfcG9zaXhfZ2xvYj0nCisgIHRlc3QgIiRwb3NpeF9nbG9iIiAhPSAiPyIgfHwgeworICAgIGlmIChzZXQgLWYpIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICBwb3NpeF9nbG9iPQorICAgIGVsc2UKKyAgICAgIHBvc2l4X2dsb2I9OgorICAgIGZpCisgIH0KKycKKworcG9zaXhfbWtkaXI9CisKKyMgRGVzaXJlZCBtb2RlIG9mIGluc3RhbGxlZCBmaWxlLgorbW9kZT0wNzU1CisKK2NoZ3JwY21kPQorY2htb2RjbWQ9JGNobW9kcHJvZworY2hvd25jbWQ9CittdmNtZD0kbXZwcm9nCitybWNtZD0iJHJtcHJvZyAtZiIKK3N0cmlwY21kPQorCitzcmM9Citkc3Q9CitkaXJfYXJnPQorZHN0X2FyZz0KKworY29weV9vbl9jaGFuZ2U9ZmFsc2UKK25vX3RhcmdldF9kaXJlY3Rvcnk9CisKK3VzYWdlPSJcCitVc2FnZTogJDAgW09QVElPTl0uLi4gWy1UXSBTUkNGSUxFIERTVEZJTEUKKyAgIG9yOiAkMCBbT1BUSU9OXS4uLiBTUkNGSUxFUy4uLiBESVJFQ1RPUlkKKyAgIG9yOiAkMCBbT1BUSU9OXS4uLiAtdCBESVJFQ1RPUlkgU1JDRklMRVMuLi4KKyAgIG9yOiAkMCBbT1BUSU9OXS4uLiAtZCBESVJFQ1RPUklFUy4uLgorCitJbiB0aGUgMXN0IGZvcm0sIGNvcHkgU1JDRklMRSB0byBEU1RGSUxFLgorSW4gdGhlIDJuZCBhbmQgM3JkLCBjb3B5IGFsbCBTUkNGSUxFUyB0byBESVJFQ1RPUlkuCitJbiB0aGUgNHRoLCBjcmVhdGUgRElSRUNUT1JJRVMuCisKK09wdGlvbnM6CisgICAgIC0taGVscCAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQuCisgICAgIC0tdmVyc2lvbiAgZGlzcGxheSB2ZXJzaW9uIGluZm8gYW5kIGV4aXQuCisKKyAgLWMgICAgICAgICAgICAoaWdub3JlZCkKKyAgLUMgICAgICAgICAgICBpbnN0YWxsIG9ubHkgaWYgZGlmZmVyZW50IChwcmVzZXJ2ZSB0aGUgbGFzdCBkYXRhIG1vZGlmaWNhdGlvbiB0aW1lKQorICAtZCAgICAgICAgICAgIGNyZWF0ZSBkaXJlY3RvcmllcyBpbnN0ZWFkIG9mIGluc3RhbGxpbmcgZmlsZXMuCisgIC1nIEdST1VQICAgICAgJGNoZ3JwcHJvZyBpbnN0YWxsZWQgZmlsZXMgdG8gR1JPVVAuCisgIC1tIE1PREUgICAgICAgJGNobW9kcHJvZyBpbnN0YWxsZWQgZmlsZXMgdG8gTU9ERS4KKyAgLW8gVVNFUiAgICAgICAkY2hvd25wcm9nIGluc3RhbGxlZCBmaWxlcyB0byBVU0VSLgorICAtcyAgICAgICAgICAgICRzdHJpcHByb2cgaW5zdGFsbGVkIGZpbGVzLgorICAtdCBESVJFQ1RPUlkgIGluc3RhbGwgaW50byBESVJFQ1RPUlkuCisgIC1UICAgICAgICAgICAgcmVwb3J0IGFuIGVycm9yIGlmIERTVEZJTEUgaXMgYSBkaXJlY3RvcnkuCisKK0Vudmlyb25tZW50IHZhcmlhYmxlcyBvdmVycmlkZSB0aGUgZGVmYXVsdCBjb21tYW5kczoKKyAgQ0hHUlBQUk9HIENITU9EUFJPRyBDSE9XTlBST0cgQ01QUFJPRyBDUFBST0cgTUtESVJQUk9HIE1WUFJPRworICBSTVBST0cgU1RSSVBQUk9HCisiCisKK3doaWxlIHRlc3QgJCMgLW5lIDA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtYykgOzsKKworICAgIC1DKSBjb3B5X29uX2NoYW5nZT10cnVlOzsKKworICAgIC1kKSBkaXJfYXJnPXRydWU7OworCisgICAgLWcpIGNoZ3JwY21kPSIkY2hncnBwcm9nICQyIgorCXNoaWZ0OzsKKworICAgIC0taGVscCkgZWNobyAiJHVzYWdlIjsgZXhpdCAkPzs7CisKKyAgICAtbSkgbW9kZT0kMgorCWNhc2UgJG1vZGUgaW4KKwkgIConICcqIHwgKicJJyogfCAqJworJyoJICB8IConKicqIHwgKic/JyogfCAqJ1snKikKKwkgICAgZWNobyAiJDA6IGludmFsaWQgbW9kZTogJG1vZGUiID4mMgorCSAgICBleGl0IDE7OworCWVzYWMKKwlzaGlmdDs7CisKKyAgICAtbykgY2hvd25jbWQ9IiRjaG93bnByb2cgJDIiCisJc2hpZnQ7OworCisgICAgLXMpIHN0cmlwY21kPSRzdHJpcHByb2c7OworCisgICAgLXQpIGRzdF9hcmc9JDIKKwlzaGlmdDs7CisKKyAgICAtVCkgbm9fdGFyZ2V0X2RpcmVjdG9yeT10cnVlOzsKKworICAgIC0tdmVyc2lvbikgZWNobyAiJDAgJHNjcmlwdHZlcnNpb24iOyBleGl0ICQ/OzsKKworICAgIC0tKQlzaGlmdAorCWJyZWFrOzsKKworICAgIC0qKQllY2hvICIkMDogaW52YWxpZCBvcHRpb246ICQxIiA+JjIKKwlleGl0IDE7OworCisgICAgKikgIGJyZWFrOzsKKyAgZXNhYworICBzaGlmdAorZG9uZQorCitpZiB0ZXN0ICQjIC1uZSAwICYmIHRlc3QgLXogIiRkaXJfYXJnJGRzdF9hcmciOyB0aGVuCisgICMgV2hlbiAtZCBpcyB1c2VkLCBhbGwgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgZGlyZWN0b3JpZXMgdG8gY3JlYXRlLgorICAjIFdoZW4gLXQgaXMgdXNlZCwgdGhlIGRlc3RpbmF0aW9uIGlzIGFscmVhZHkgc3BlY2lmaWVkLgorICAjIE90aGVyd2lzZSwgdGhlIGxhc3QgYXJndW1lbnQgaXMgdGhlIGRlc3RpbmF0aW9uLiAgUmVtb3ZlIGl0IGZyb20gJEAuCisgIGZvciBhcmcKKyAgZG8KKyAgICBpZiB0ZXN0IC1uICIkZHN0X2FyZyI7IHRoZW4KKyAgICAgICMgJEAgaXMgbm90IGVtcHR5OiBpdCBjb250YWlucyBhdCBsZWFzdCAkYXJnLgorICAgICAgc2V0IGZub3JkICIkQCIgIiRkc3RfYXJnIgorICAgICAgc2hpZnQgIyBmbm9yZAorICAgIGZpCisgICAgc2hpZnQgIyBhcmcKKyAgICBkc3RfYXJnPSRhcmcKKyAgZG9uZQorZmkKKworaWYgdGVzdCAkIyAtZXEgMDsgdGhlbgorICBpZiB0ZXN0IC16ICIkZGlyX2FyZyI7IHRoZW4KKyAgICBlY2hvICIkMDogbm8gaW5wdXQgZmlsZSBzcGVjaWZpZWQuIiA+JjIKKyAgICBleGl0IDEKKyAgZmkKKyAgIyBJdCdzIE9LIHRvIGNhbGwgYGluc3RhbGwtc2ggLWQnIHdpdGhvdXQgYXJndW1lbnQuCisgICMgVGhpcyBjYW4gaGFwcGVuIHdoZW4gY3JlYXRpbmcgY29uZGl0aW9uYWwgZGlyZWN0b3JpZXMuCisgIGV4aXQgMAorZmkKKworaWYgdGVzdCAteiAiJGRpcl9hcmciOyB0aGVuCisgIHRyYXAgJyhleGl0ICQ/KTsgZXhpdCcgMSAyIDEzIDE1CisKKyAgIyBTZXQgdW1hc2sgc28gYXMgbm90IHRvIGNyZWF0ZSB0ZW1wcyB3aXRoIHRvby1nZW5lcm91cyBtb2Rlcy4KKyAgIyBIb3dldmVyLCAnc3RyaXAnIHJlcXVpcmVzIGJvdGggcmVhZCBhbmQgd3JpdGUgYWNjZXNzIHRvIHRlbXBzLgorICBjYXNlICRtb2RlIGluCisgICAgIyBPcHRpbWl6ZSBjb21tb24gY2FzZXMuCisgICAgKjY0NCkgY3BfdW1hc2s9MTMzOzsKKyAgICAqNzU1KSBjcF91bWFzaz0yMjs7CisKKyAgICAqWzAtN10pCisgICAgICBpZiB0ZXN0IC16ICIkc3RyaXBjbWQiOyB0aGVuCisJdV9wbHVzX3J3PQorICAgICAgZWxzZQorCXVfcGx1c19ydz0nJSAyMDAnCisgICAgICBmaQorICAgICAgY3BfdW1hc2s9YGV4cHIgJygnIDc3NyAtICRtb2RlICUgMTAwMCAnKScgJHVfcGx1c19yd2A7OworICAgICopCisgICAgICBpZiB0ZXN0IC16ICIkc3RyaXBjbWQiOyB0aGVuCisJdV9wbHVzX3J3PQorICAgICAgZWxzZQorCXVfcGx1c19ydz0sdStydworICAgICAgZmkKKyAgICAgIGNwX3VtYXNrPSRtb2RlJHVfcGx1c19ydzs7CisgIGVzYWMKK2ZpCisKK2ZvciBzcmMKK2RvCisgICMgUHJvdGVjdCBuYW1lcyBzdGFydGluZyB3aXRoIGAtJy4KKyAgY2FzZSAkc3JjIGluCisgICAgLSopIHNyYz0uLyRzcmM7OworICBlc2FjCisKKyAgaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCisgICAgZHN0PSRzcmMKKyAgICBkc3RkaXI9JGRzdAorICAgIHRlc3QgLWQgIiRkc3RkaXIiCisgICAgZHN0ZGlyX3N0YXR1cz0kPworICBlbHNlCisKKyAgICAjIFdhaXRpbmcgZm9yIHRoaXMgdG8gYmUgZGV0ZWN0ZWQgYnkgdGhlICIkY3Bwcm9nICRzcmMgJGRzdHRtcCIgY29tbWFuZAorICAgICMgbWlnaHQgY2F1c2UgZGlyZWN0b3JpZXMgdG8gYmUgY3JlYXRlZCwgd2hpY2ggd291bGQgYmUgZXNwZWNpYWxseSBiYWQKKyAgICAjIGlmICRzcmMgKGFuZCB0aHVzICRkc3R0bXApIGNvbnRhaW5zICcqJy4KKyAgICBpZiB0ZXN0ICEgLWYgIiRzcmMiICYmIHRlc3QgISAtZCAiJHNyYyI7IHRoZW4KKyAgICAgIGVjaG8gIiQwOiAkc3JjIGRvZXMgbm90IGV4aXN0LiIgPiYyCisgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgaWYgdGVzdCAteiAiJGRzdF9hcmciOyB0aGVuCisgICAgICBlY2hvICIkMDogbm8gZGVzdGluYXRpb24gc3BlY2lmaWVkLiIgPiYyCisgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgZHN0PSRkc3RfYXJnCisgICAgIyBQcm90ZWN0IG5hbWVzIHN0YXJ0aW5nIHdpdGggYC0nLgorICAgIGNhc2UgJGRzdCBpbgorICAgICAgLSopIGRzdD0uLyRkc3Q7OworICAgIGVzYWMKKworICAgICMgSWYgZGVzdGluYXRpb24gaXMgYSBkaXJlY3RvcnksIGFwcGVuZCB0aGUgaW5wdXQgZmlsZW5hbWU7IHdvbid0IHdvcmsKKyAgICAjIGlmIGRvdWJsZSBzbGFzaGVzIGFyZW4ndCBpZ25vcmVkLgorICAgIGlmIHRlc3QgLWQgIiRkc3QiOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkbm9fdGFyZ2V0X2RpcmVjdG9yeSI7IHRoZW4KKwllY2hvICIkMDogJGRzdF9hcmc6IElzIGEgZGlyZWN0b3J5IiA+JjIKKwlleGl0IDEKKyAgICAgIGZpCisgICAgICBkc3RkaXI9JGRzdAorICAgICAgZHN0PSRkc3RkaXIvYGJhc2VuYW1lICIkc3JjImAKKyAgICAgIGRzdGRpcl9zdGF0dXM9MAorICAgIGVsc2UKKyAgICAgICMgUHJlZmVyIGRpcm5hbWUsIGJ1dCBmYWxsIGJhY2sgb24gYSBzdWJzdGl0dXRlIGlmIGRpcm5hbWUgZmFpbHMuCisgICAgICBkc3RkaXI9YAorCShkaXJuYW1lICIkZHN0IikgMj4vZGV2L251bGwgfHwKKwlleHByIFgiJGRzdCIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgICAgIFgiJGRzdCIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgICAgIFgiJGRzdCIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgICAgIFgiJGRzdCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CisJZWNobyBYIiRkc3QiIHwKKwkgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkJICAgcy8vXDEvCisJCSAgIHEKKwkJIH0KKwkJIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkJICAgcy8vXDEvCisJCSAgIHEKKwkJIH0KKwkJIC9eWFwoXC9cL1wpJC97CisJCSAgIHMvL1wxLworCQkgICBxCisJCSB9CisJCSAvXlhcKFwvXCkuKi97CisJCSAgIHMvL1wxLworCQkgICBxCisJCSB9CisJCSBzLy4qLy4vOyBxJworICAgICAgYAorCisgICAgICB0ZXN0IC1kICIkZHN0ZGlyIgorICAgICAgZHN0ZGlyX3N0YXR1cz0kPworICAgIGZpCisgIGZpCisKKyAgb2Jzb2xldGVfbWtkaXJfdXNlZD1mYWxzZQorCisgIGlmIHRlc3QgJGRzdGRpcl9zdGF0dXMgIT0gMDsgdGhlbgorICAgIGNhc2UgJHBvc2l4X21rZGlyIGluCisgICAgICAnJykKKwkjIENyZWF0ZSBpbnRlcm1lZGlhdGUgZGlycyB1c2luZyBtb2RlIDc1NSBhcyBtb2RpZmllZCBieSB0aGUgdW1hc2suCisJIyBUaGlzIGlzIGxpa2UgRnJlZUJTRCAnaW5zdGFsbCcgYXMgb2YgMTk5Ny0xMC0yOC4KKwl1bWFzaz1gdW1hc2tgCisJY2FzZSAkc3RyaXBjbWQuJHVtYXNrIGluCisJICAjIE9wdGltaXplIGNvbW1vbiBjYXNlcy4KKwkgICpbMjM2N11bMjM2N10pIG1rZGlyX3VtYXNrPSR1bWFzazs7CisJICAuKjBbMDJdWzAyXSB8IC5bMDJdWzAyXSB8IC5bMDJdKSBta2Rpcl91bWFzaz0yMjs7CisKKwkgICpbMC03XSkKKwkgICAgbWtkaXJfdW1hc2s9YGV4cHIgJHVtYXNrICsgMjIgXAorCSAgICAgIC0gJHVtYXNrICUgMTAwICUgNDAgKyAkdW1hc2sgJSAyMCBcCisJICAgICAgLSAkdW1hc2sgJSAxMCAlIDQgKyAkdW1hc2sgJSAyCisJICAgIGA7OworCSAgKikgbWtkaXJfdW1hc2s9JHVtYXNrLGdvLXc7OworCWVzYWMKKworCSMgV2l0aCAtZCwgY3JlYXRlIHRoZSBuZXcgZGlyZWN0b3J5IHdpdGggdGhlIHVzZXItc3BlY2lmaWVkIG1vZGUuCisJIyBPdGhlcndpc2UsIHJlbHkgb24gJG1rZGlyX3VtYXNrLgorCWlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgorCSAgbWtkaXJfbW9kZT0tbSRtb2RlCisJZWxzZQorCSAgbWtkaXJfbW9kZT0KKwlmaQorCisJcG9zaXhfbWtkaXI9ZmFsc2UKKwljYXNlICR1bWFzayBpbgorCSAgKlsxMjM1NjddWzAtN11bMC03XSkKKwkgICAgIyBQT1NJWCBta2RpciAtcCBzZXRzIHUrd3ggYml0cyByZWdhcmRsZXNzIG9mIHVtYXNrLCB3aGljaAorCSAgICAjIGlzIGluY29tcGF0aWJsZSB3aXRoIEZyZWVCU0QgJ2luc3RhbGwnIHdoZW4gKHVtYXNrICYgMzAwKSAhPSAwLgorCSAgICA7OworCSAgKikKKwkgICAgdG1wZGlyPSR7VE1QRElSLS90bXB9L2lucyRSQU5ET00tJCQKKwkgICAgdHJhcCAncmV0PSQ/OyBybWRpciAiJHRtcGRpci9kIiAiJHRtcGRpciIgMj4vZGV2L251bGw7IGV4aXQgJHJldCcgMAorCisJICAgIGlmICh1bWFzayAkbWtkaXJfdW1hc2sgJiYKKwkJZXhlYyAkbWtkaXJwcm9nICRta2Rpcl9tb2RlIC1wIC0tICIkdG1wZGlyL2QiKSA+L2Rldi9udWxsIDI+JjEKKwkgICAgdGhlbgorCSAgICAgIGlmIHRlc3QgLXogIiRkaXJfYXJnIiB8fCB7CisJCSAgICMgQ2hlY2sgZm9yIFBPU0lYIGluY29tcGF0aWJpbGl0aWVzIHdpdGggLW0uCisJCSAgICMgSFAtVVggMTEuMjMgYW5kIElSSVggNi41IG1rZGlyIC1tIC1wIHNldHMgZ3JvdXAtIG9yCisJCSAgICMgb3RoZXItd3JpdGVhYmxlIGJpdCBvZiBwYXJlbnQgZGlyZWN0b3J5IHdoZW4gaXQgc2hvdWxkbid0LgorCQkgICAjIEZyZWVCU0QgNi4xIG1rZGlyIC1tIC1wIHNldHMgbW9kZSBvZiBleGlzdGluZyBkaXJlY3RvcnkuCisJCSAgIGxzX2xkX3RtcGRpcj1gbHMgLWxkICIkdG1wZGlyImAKKwkJICAgY2FzZSAkbHNfbGRfdG1wZGlyIGluCisJCSAgICAgZD8/Pz8tP3ItKikgZGlmZmVyZW50X21vZGU9NzAwOzsKKwkJICAgICBkPz8/Py0/LS0qKSBkaWZmZXJlbnRfbW9kZT03NTU7OworCQkgICAgICopIGZhbHNlOzsKKwkJICAgZXNhYyAmJgorCQkgICAkbWtkaXJwcm9nIC1tJGRpZmZlcmVudF9tb2RlIC1wIC0tICIkdG1wZGlyIiAmJiB7CisJCSAgICAgbHNfbGRfdG1wZGlyXzE9YGxzIC1sZCAiJHRtcGRpciJgCisJCSAgICAgdGVzdCAiJGxzX2xkX3RtcGRpciIgPSAiJGxzX2xkX3RtcGRpcl8xIgorCQkgICB9CisJCSB9CisJICAgICAgdGhlbiBwb3NpeF9ta2Rpcj06CisJICAgICAgZmkKKwkgICAgICBybWRpciAiJHRtcGRpci9kIiAiJHRtcGRpciIKKwkgICAgZWxzZQorCSAgICAgICMgUmVtb3ZlIGFueSBkaXJzIGxlZnQgYmVoaW5kIGJ5IGFuY2llbnQgbWtkaXIgaW1wbGVtZW50YXRpb25zLgorCSAgICAgIHJtZGlyIC4vJG1rZGlyX21vZGUgLi8tcCAuLy0tIDI+L2Rldi9udWxsCisJICAgIGZpCisJICAgIHRyYXAgJycgMDs7CisJZXNhYzs7CisgICAgZXNhYworCisgICAgaWYKKyAgICAgICRwb3NpeF9ta2RpciAmJiAoCisJdW1hc2sgJG1rZGlyX3VtYXNrICYmCisJJGRvaXRfZXhlYyAkbWtkaXJwcm9nICRta2Rpcl9tb2RlIC1wIC0tICIkZHN0ZGlyIgorICAgICAgKQorICAgIHRoZW4gOgorICAgIGVsc2UKKworICAgICAgIyBUaGUgdW1hc2sgaXMgcmlkaWN1bG91cywgb3IgbWtkaXIgZG9lcyBub3QgY29uZm9ybSB0byBQT1NJWCwKKyAgICAgICMgb3IgaXQgZmFpbGVkIHBvc3NpYmx5IGR1ZSB0byBhIHJhY2UgY29uZGl0aW9uLiAgQ3JlYXRlIHRoZQorICAgICAgIyBkaXJlY3RvcnkgdGhlIHNsb3cgd2F5LCBzdGVwIGJ5IHN0ZXAsIGNoZWNraW5nIGZvciByYWNlcyBhcyB3ZSBnby4KKworICAgICAgY2FzZSAkZHN0ZGlyIGluCisJLyopIHByZWZpeD0nLyc7OworCS0qKSBwcmVmaXg9Jy4vJzs7CisJKikgIHByZWZpeD0nJzs7CisgICAgICBlc2FjCisKKyAgICAgIGV2YWwgIiRpbml0aWFsaXplX3Bvc2l4X2dsb2IiCisKKyAgICAgIG9JRlM9JElGUworICAgICAgSUZTPS8KKyAgICAgICRwb3NpeF9nbG9iIHNldCAtZgorICAgICAgc2V0IGZub3JkICRkc3RkaXIKKyAgICAgIHNoaWZ0CisgICAgICAkcG9zaXhfZ2xvYiBzZXQgK2YKKyAgICAgIElGUz0kb0lGUworCisgICAgICBwcmVmaXhlcz0KKworICAgICAgZm9yIGQKKyAgICAgIGRvCisJdGVzdCAteiAiJGQiICYmIGNvbnRpbnVlCisKKwlwcmVmaXg9JHByZWZpeCRkCisJaWYgdGVzdCAtZCAiJHByZWZpeCI7IHRoZW4KKwkgIHByZWZpeGVzPQorCWVsc2UKKwkgIGlmICRwb3NpeF9ta2RpcjsgdGhlbgorCSAgICAodW1hc2s9JG1rZGlyX3VtYXNrICYmCisJICAgICAkZG9pdF9leGVjICRta2RpcnByb2cgJG1rZGlyX21vZGUgLXAgLS0gIiRkc3RkaXIiKSAmJiBicmVhaworCSAgICAjIERvbid0IGZhaWwgaWYgdHdvIGluc3RhbmNlcyBhcmUgcnVubmluZyBjb25jdXJyZW50bHkuCisJICAgIHRlc3QgLWQgIiRwcmVmaXgiIHx8IGV4aXQgMQorCSAgZWxzZQorCSAgICBjYXNlICRwcmVmaXggaW4KKwkgICAgICAqXCcqKSBxcHJlZml4PWBlY2hvICIkcHJlZml4IiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7CisJICAgICAgKikgcXByZWZpeD0kcHJlZml4OzsKKwkgICAgZXNhYworCSAgICBwcmVmaXhlcz0iJHByZWZpeGVzICckcXByZWZpeCciCisJICBmaQorCWZpCisJcHJlZml4PSRwcmVmaXgvCisgICAgICBkb25lCisKKyAgICAgIGlmIHRlc3QgLW4gIiRwcmVmaXhlcyI7IHRoZW4KKwkjIERvbid0IGZhaWwgaWYgdHdvIGluc3RhbmNlcyBhcmUgcnVubmluZyBjb25jdXJyZW50bHkuCisJKHVtYXNrICRta2Rpcl91bWFzayAmJgorCSBldmFsICJcJGRvaXRfZXhlYyBcJG1rZGlycHJvZyAkcHJlZml4ZXMiKSB8fAorCSAgdGVzdCAtZCAiJGRzdGRpciIgfHwgZXhpdCAxCisJb2Jzb2xldGVfbWtkaXJfdXNlZD10cnVlCisgICAgICBmaQorICAgIGZpCisgIGZpCisKKyAgaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCisgICAgeyB0ZXN0IC16ICIkY2hvd25jbWQiIHx8ICRkb2l0ICRjaG93bmNtZCAiJGRzdCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRjaGdycGNtZCIgfHwgJGRvaXQgJGNoZ3JwY21kICIkZHN0IjsgfSAmJgorICAgIHsgdGVzdCAiJG9ic29sZXRlX21rZGlyX3VzZWQkY2hvd25jbWQkY2hncnBjbWQiID0gZmFsc2UgfHwKKyAgICAgIHRlc3QgLXogIiRjaG1vZGNtZCIgfHwgJGRvaXQgJGNobW9kY21kICRtb2RlICIkZHN0IjsgfSB8fCBleGl0IDEKKyAgZWxzZQorCisgICAgIyBNYWtlIGEgY291cGxlIG9mIHRlbXAgZmlsZSBuYW1lcyBpbiB0aGUgcHJvcGVyIGRpcmVjdG9yeS4KKyAgICBkc3R0bXA9JGRzdGRpci9faW5zdC4kJF8KKyAgICBybXRtcD0kZHN0ZGlyL19ybS4kJF8KKworICAgICMgVHJhcCB0byBjbGVhbiB1cCB0aG9zZSB0ZW1wIGZpbGVzIGF0IGV4aXQuCisgICAgdHJhcCAncmV0PSQ/OyBybSAtZiAiJGRzdHRtcCIgIiRybXRtcCIgJiYgZXhpdCAkcmV0JyAwCisKKyAgICAjIENvcHkgdGhlIGZpbGUgbmFtZSB0byB0aGUgdGVtcCBuYW1lLgorICAgICh1bWFzayAkY3BfdW1hc2sgJiYgJGRvaXRfZXhlYyAkY3Bwcm9nICIkc3JjIiAiJGRzdHRtcCIpICYmCisKKyAgICAjIGFuZCBzZXQgYW55IG9wdGlvbnM7IGRvIGNobW9kIGxhc3QgdG8gcHJlc2VydmUgc2V0dWlkIGJpdHMuCisgICAgIworICAgICMgSWYgYW55IG9mIHRoZXNlIGZhaWwsIHdlIGFib3J0IHRoZSB3aG9sZSB0aGluZy4gIElmIHdlIHdhbnQgdG8KKyAgICAjIGlnbm9yZSBlcnJvcnMgZnJvbSBhbnkgb2YgdGhlc2UsIGp1c3QgbWFrZSBzdXJlIG5vdCB0byBpZ25vcmUKKyAgICAjIGVycm9ycyBmcm9tIHRoZSBhYm92ZSAiJGRvaXQgJGNwcHJvZyAkc3JjICRkc3R0bXAiIGNvbW1hbmQuCisgICAgIworICAgIHsgdGVzdCAteiAiJGNob3duY21kIiB8fCAkZG9pdCAkY2hvd25jbWQgIiRkc3R0bXAiOyB9ICYmCisgICAgeyB0ZXN0IC16ICIkY2hncnBjbWQiIHx8ICRkb2l0ICRjaGdycGNtZCAiJGRzdHRtcCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRzdHJpcGNtZCIgfHwgJGRvaXQgJHN0cmlwY21kICIkZHN0dG1wIjsgfSAmJgorICAgIHsgdGVzdCAteiAiJGNobW9kY21kIiB8fCAkZG9pdCAkY2htb2RjbWQgJG1vZGUgIiRkc3R0bXAiOyB9ICYmCisKKyAgICAjIElmIC1DLCBkb24ndCBib3RoZXIgdG8gY29weSBpZiBpdCB3b3VsZG4ndCBjaGFuZ2UgdGhlIGZpbGUuCisgICAgaWYgJGNvcHlfb25fY2hhbmdlICYmCisgICAgICAgb2xkPWBMQ19BTEw9QyBscyAtZGxMICIkZHN0IgkyPi9kZXYvbnVsbGAgJiYKKyAgICAgICBuZXc9YExDX0FMTD1DIGxzIC1kbEwgIiRkc3R0bXAiCTI+L2Rldi9udWxsYCAmJgorCisgICAgICAgZXZhbCAiJGluaXRpYWxpemVfcG9zaXhfZ2xvYiIgJiYKKyAgICAgICAkcG9zaXhfZ2xvYiBzZXQgLWYgJiYKKyAgICAgICBzZXQgWCAkb2xkICYmIG9sZD06JDI6JDQ6JDU6JDYgJiYKKyAgICAgICBzZXQgWCAkbmV3ICYmIG5ldz06JDI6JDQ6JDU6JDYgJiYKKyAgICAgICAkcG9zaXhfZ2xvYiBzZXQgK2YgJiYKKworICAgICAgIHRlc3QgIiRvbGQiID0gIiRuZXciICYmCisgICAgICAgJGNtcHByb2cgIiRkc3QiICIkZHN0dG1wIiA+L2Rldi9udWxsIDI+JjEKKyAgICB0aGVuCisgICAgICBybSAtZiAiJGRzdHRtcCIKKyAgICBlbHNlCisgICAgICAjIFJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KKyAgICAgICRkb2l0ICRtdmNtZCAtZiAiJGRzdHRtcCIgIiRkc3QiIDI+L2Rldi9udWxsIHx8CisKKyAgICAgICMgVGhlIHJlbmFtZSBmYWlsZWQsIHBlcmhhcHMgYmVjYXVzZSBtdiBjYW4ndCByZW5hbWUgc29tZXRoaW5nIGVsc2UKKyAgICAgICMgdG8gaXRzZWxmLCBvciBwZXJoYXBzIGJlY2F1c2UgbXYgaXMgc28gYW5jaWVudCB0aGF0IGl0IGRvZXMgbm90CisgICAgICAjIHN1cHBvcnQgLWYuCisgICAgICB7CisJIyBOb3cgcmVtb3ZlIG9yIG1vdmUgYXNpZGUgYW55IG9sZCBmaWxlIGF0IGRlc3RpbmF0aW9uIGxvY2F0aW9uLgorCSMgV2UgdHJ5IHRoaXMgdHdvIHdheXMgc2luY2Ugcm0gY2FuJ3QgdW5saW5rIGl0c2VsZiBvbiBzb21lCisJIyBzeXN0ZW1zIGFuZCB0aGUgZGVzdGluYXRpb24gZmlsZSBtaWdodCBiZSBidXN5IGZvciBvdGhlcgorCSMgcmVhc29ucy4gIEluIHRoaXMgY2FzZSwgdGhlIGZpbmFsIGNsZWFudXAgbWlnaHQgZmFpbCBidXQgdGhlIG5ldworCSMgZmlsZSBzaG91bGQgc3RpbGwgaW5zdGFsbCBzdWNjZXNzZnVsbHkuCisJeworCSAgdGVzdCAhIC1mICIkZHN0IiB8fAorCSAgJGRvaXQgJHJtY21kIC1mICIkZHN0IiAyPi9kZXYvbnVsbCB8fAorCSAgeyAkZG9pdCAkbXZjbWQgLWYgIiRkc3QiICIkcm10bXAiIDI+L2Rldi9udWxsICYmCisJICAgIHsgJGRvaXQgJHJtY21kIC1mICIkcm10bXAiIDI+L2Rldi9udWxsOyA6OyB9CisJICB9IHx8CisJICB7IGVjaG8gIiQwOiBjYW5ub3QgdW5saW5rIG9yIHJlbmFtZSAkZHN0IiA+JjIKKwkgICAgKGV4aXQgMSk7IGV4aXQgMQorCSAgfQorCX0gJiYKKworCSMgTm93IHJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KKwkkZG9pdCAkbXZjbWQgIiRkc3R0bXAiICIkZHN0IgorICAgICAgfQorICAgIGZpIHx8IGV4aXQgMQorCisgICAgdHJhcCAnJyAwCisgIGZpCitkb25lCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9tYWtlLTEuMTEvbWRhdGUtc2ggYi9zaGFyZS9hdXRvbWFrZS0xLjExL21kYXRlLXNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU2MzFiMjIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL21kYXRlLXNoCkBAIC0wLDAgKzEsMjA1IEBACisjIS9iaW4vc2gKKyMgR2V0IG1vZGlmaWNhdGlvbiB0aW1lIG9mIGEgZmlsZSBvciBkaXJlY3RvcnkgYW5kIHByZXR0eS1wcmludCBpdC4KKworc2NyaXB0dmVyc2lvbj0yMDA5LTA0LTI4LjIxOyAjIFVUQworCisjIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NywgMjAwMywgMjAwNCwgMjAwNSwgMjAwNywgMjAwOSBGcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgd3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4sIEp1bmUgMTk5NQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgVGhpcyBmaWxlIGlzIG1haW50YWluZWQgaW4gQXV0b21ha2UsIHBsZWFzZSByZXBvcnQKKyMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bworIyA8YXV0b21ha2UtcGF0Y2hlc0BnbnUub3JnPi4KKworY2FzZSAkMSBpbgorICAnJykKKyAgICAgZWNobyAiJDA6IE5vIGZpbGUuICBUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgorICAgICBleGl0IDE7CisgICAgIDs7CisgIC1oIHwgLS1oKikKKyAgICBjYXQgPDxcRU9GCitVc2FnZTogbWRhdGUtc2ggWy0taGVscF0gWy0tdmVyc2lvbl0gRklMRQorCitQcmV0dHktcHJpbnQgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIG9mIEZJTEUuCisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uCitFT0YKKyAgICBleGl0ICQ/CisgICAgOzsKKyAgLXYgfCAtLXYqKQorICAgIGVjaG8gIm1kYXRlLXNoICRzY3JpcHR2ZXJzaW9uIgorICAgIGV4aXQgJD8KKyAgICA7OworZXNhYworCisjIFByZXZlbnQgZGF0ZSBnaXZpbmcgcmVzcG9uc2UgaW4gYW5vdGhlciBsYW5ndWFnZS4KK0xBTkc9QworZXhwb3J0IExBTkcKK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCitMQ19USU1FPUMKK2V4cG9ydCBMQ19USU1FCisKKyMgR05VIGxzIGNoYW5nZXMgaXRzIHRpbWUgZm9ybWF0IGluIHJlc3BvbnNlIHRvIHRoZSBUSU1FX1NUWUxFCisjIHZhcmlhYmxlLiAgU2luY2Ugd2UgY2Fubm90IGFzc3VtZSBgdW5zZXQnIHdvcmtzLCByZXZlcnQgdGhpcworIyB2YXJpYWJsZSB0byBpdHMgZG9jdW1lbnRlZCBkZWZhdWx0LgoraWYgdGVzdCAiJHtUSU1FX1NUWUxFK3NldH0iID0gc2V0OyB0aGVuCisgIFRJTUVfU1RZTEU9cG9zaXgtbG9uZy1pc28KKyAgZXhwb3J0IFRJTUVfU1RZTEUKK2ZpCisKK3NhdmVfYXJnMT0kMQorCisjIEZpbmQgb3V0IGhvdyB0byBnZXQgdGhlIGV4dGVuZGVkIGxzIG91dHB1dCBvZiBhIGZpbGUgb3IgZGlyZWN0b3J5LgoraWYgbHMgLUwgL2Rldi9udWxsIDE+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgbHNfY29tbWFuZD0nbHMgLUwgLWwgLWQnCitlbHNlCisgIGxzX2NvbW1hbmQ9J2xzIC1sIC1kJworZmkKKyMgQXZvaWQgdXNlci9ncm91cCBuYW1lcyB0aGF0IG1pZ2h0IGhhdmUgc3BhY2VzLCB3aGVuIHBvc3NpYmxlLgoraWYgbHMgLW4gL2Rldi9udWxsIDE+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgbHNfY29tbWFuZD0iJGxzX2NvbW1hbmQgLW4iCitmaQorCisjIEEgYGxzIC1sJyBsaW5lIGxvb2tzIGFzIGZvbGxvd3Mgb24gT1MvMi4KKyMgIGRyd3hyd3gtLS0gICAgICAgIDAgQXVnIDExICAyMDAxIGZvbworIyBUaGlzIGRpZmZlcnMgZnJvbSBVbml4LCB3aGljaCBhZGRzIG93bmVyc2hpcCBpbmZvcm1hdGlvbi4KKyMgIGRyd3hyd3gtLS0gICAyIHJvb3QgIHJvb3QgICAgICA0MDk2IEF1ZyAxMSAgMjAwMSBmb28KKyMKKyMgVG8gZmluZCB0aGUgZGF0ZSwgd2Ugc3BsaXQgdGhlIGxpbmUgb24gc3BhY2VzIGFuZCBpdGVyYXRlIG9uIHdvcmRzCisjIHVudGlsIHdlIGZpbmQgYSBtb250aC4gIFRoaXMgY2Fubm90IHdvcmsgd2l0aCBmaWxlcyB3aG9zZSBvd25lciBpcyBhCisjIHVzZXIgbmFtZWQgYEphbicsIG9yIGBGZWInLCBldGMuICBIb3dldmVyLCBpdCdzIHVubGlrZWx5IHRoYXQgYC8nCisjIHdpbGwgYmUgb3duZWQgYnkgYSB1c2VyIHdob3NlIG5hbWUgaXMgYSBtb250aC4gIFNvIHdlIGZpcnN0IGxvb2sgYXQKKyMgdGhlIGV4dGVuZGVkIGxzIG91dHB1dCBvZiB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gZGVjaWRlIGhvdyBtYW55CisjIHdvcmRzIHNob3VsZCBiZSBza2lwcGVkIHRvIGdldCB0aGUgZGF0ZS4KKworIyBPbiBIUFVYIC9iaW4vc2gsICJzZXQiIGludGVycHJldHMgIi1ydy1yLS1yLS0iIGFzIG9wdGlvbnMsIHNvIHRoZSAieCIgYmVsb3cuCitzZXQgeGAkbHNfY29tbWFuZCAvYAorCisjIEZpbmQgd2hpY2ggYXJndW1lbnQgaXMgdGhlIG1vbnRoLgorbW9udGg9Citjb21tYW5kPQordW50aWwgdGVzdCAkbW9udGgKK2RvCisgIHNoaWZ0CisgICMgQWRkIGFub3RoZXIgc2hpZnQgdG8gdGhlIGNvbW1hbmQuCisgIGNvbW1hbmQ9IiRjb21tYW5kIHNoaWZ0OyIKKyAgY2FzZSAkMSBpbgorICAgIEphbikgbW9udGg9SmFudWFyeTsgbnVtbW9udGg9MTs7CisgICAgRmViKSBtb250aD1GZWJydWFyeTsgbnVtbW9udGg9Mjs7CisgICAgTWFyKSBtb250aD1NYXJjaDsgbnVtbW9udGg9Mzs7CisgICAgQXByKSBtb250aD1BcHJpbDsgbnVtbW9udGg9NDs7CisgICAgTWF5KSBtb250aD1NYXk7IG51bW1vbnRoPTU7OworICAgIEp1bikgbW9udGg9SnVuZTsgbnVtbW9udGg9Njs7CisgICAgSnVsKSBtb250aD1KdWx5OyBudW1tb250aD03OzsKKyAgICBBdWcpIG1vbnRoPUF1Z3VzdDsgbnVtbW9udGg9ODs7CisgICAgU2VwKSBtb250aD1TZXB0ZW1iZXI7IG51bW1vbnRoPTk7OworICAgIE9jdCkgbW9udGg9T2N0b2JlcjsgbnVtbW9udGg9MTA7OworICAgIE5vdikgbW9udGg9Tm92ZW1iZXI7IG51bW1vbnRoPTExOzsKKyAgICBEZWMpIG1vbnRoPURlY2VtYmVyOyBudW1tb250aD0xMjs7CisgIGVzYWMKK2RvbmUKKworIyBHZXQgdGhlIGV4dGVuZGVkIGxzIG91dHB1dCBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkuCitzZXQgZHVtbXkgeGBldmFsICIkbHNfY29tbWFuZCBcIlwkc2F2ZV9hcmcxXCIiYAorCisjIFJlbW92ZSBhbGwgcHJlY2VkaW5nIGFyZ3VtZW50cworZXZhbCAkY29tbWFuZAorCisjIEJlY2F1c2Ugb2YgdGhlIGR1bW15IGFyZ3VtZW50IGFib3ZlLCBtb250aCBpcyBpbiAkMi4KKyMKKyMgT24gYSBQT1NJWCBzeXN0ZW0sIHdlIHNob3VsZCBoYXZlCisjCisjICQjID0gNQorIyAkMSA9IGZpbGUgc2l6ZQorIyAkMiA9IG1vbnRoCisjICQzID0gZGF5CisjICQ0ID0geWVhciBvciB0aW1lCisjICQ1ID0gZmlsZW5hbWUKKyMKKyMgT24gRGFyd2luIDcuNy4wIGFuZCA3LjYuMCwgd2UgaGF2ZQorIworIyAkIyA9IDQKKyMgJDEgPSBkYXkKKyMgJDIgPSBtb250aAorIyAkMyA9IHllYXIgb3IgdGltZQorIyAkNCA9IGZpbGVuYW1lCisKKyMgR2V0IHRoZSBtb250aC4KK2Nhc2UgJDIgaW4KKyAgSmFuKSBtb250aD1KYW51YXJ5OyBudW1tb250aD0xOzsKKyAgRmViKSBtb250aD1GZWJydWFyeTsgbnVtbW9udGg9Mjs7CisgIE1hcikgbW9udGg9TWFyY2g7IG51bW1vbnRoPTM7OworICBBcHIpIG1vbnRoPUFwcmlsOyBudW1tb250aD00OzsKKyAgTWF5KSBtb250aD1NYXk7IG51bW1vbnRoPTU7OworICBKdW4pIG1vbnRoPUp1bmU7IG51bW1vbnRoPTY7OworICBKdWwpIG1vbnRoPUp1bHk7IG51bW1vbnRoPTc7OworICBBdWcpIG1vbnRoPUF1Z3VzdDsgbnVtbW9udGg9ODs7CisgIFNlcCkgbW9udGg9U2VwdGVtYmVyOyBudW1tb250aD05OzsKKyAgT2N0KSBtb250aD1PY3RvYmVyOyBudW1tb250aD0xMDs7CisgIE5vdikgbW9udGg9Tm92ZW1iZXI7IG51bW1vbnRoPTExOzsKKyAgRGVjKSBtb250aD1EZWNlbWJlcjsgbnVtbW9udGg9MTI7OworZXNhYworCitjYXNlICQzIGluCisgID8/PyopIGRheT0kMTs7CisgICopIGRheT0kMzsgc2hpZnQ7OworZXNhYworCisjIEhlcmUgd2UgaGF2ZSB0byBkZWFsIHdpdGggdGhlIHByb2JsZW0gdGhhdCB0aGUgbHMgb3V0cHV0IGdpdmVzIGVpdGhlcgorIyB0aGUgdGltZSBvZiBkYXkgb3IgdGhlIHllYXIuCitjYXNlICQzIGluCisgICo6Kikgc2V0IGBkYXRlYDsgZXZhbCB5ZWFyPVwkJCMKKyAgICAgICBjYXNlICQyIGluCisJIEphbikgbnVtbW9udGh0b2Q9MTs7CisJIEZlYikgbnVtbW9udGh0b2Q9Mjs7CisJIE1hcikgbnVtbW9udGh0b2Q9Mzs7CisJIEFwcikgbnVtbW9udGh0b2Q9NDs7CisJIE1heSkgbnVtbW9udGh0b2Q9NTs7CisJIEp1bikgbnVtbW9udGh0b2Q9Njs7CisJIEp1bCkgbnVtbW9udGh0b2Q9Nzs7CisJIEF1ZykgbnVtbW9udGh0b2Q9ODs7CisJIFNlcCkgbnVtbW9udGh0b2Q9OTs7CisJIE9jdCkgbnVtbW9udGh0b2Q9MTA7OworCSBOb3YpIG51bW1vbnRodG9kPTExOzsKKwkgRGVjKSBudW1tb250aHRvZD0xMjs7CisgICAgICAgZXNhYworICAgICAgICMgRm9yIHRoZSBmaXJzdCBzaXggbW9udGggb2YgdGhlIHllYXIgdGhlIHRpbWUgbm90YXRpb24gY2FuIGFsc28KKyAgICAgICAjIGJlIHVzZWQgZm9yIGZpbGVzIG1vZGlmaWVkIGluIHRoZSBsYXN0IHllYXIuCisgICAgICAgaWYgKGV4cHIgJG51bW1vbnRoIFw+ICRudW1tb250aHRvZCkgPiAvZGV2L251bGw7CisgICAgICAgdGhlbgorCSB5ZWFyPWBleHByICR5ZWFyIC0gMWAKKyAgICAgICBmaTs7CisgICopIHllYXI9JDM7OworZXNhYworCisjIFRoZSByZXN1bHQuCitlY2hvICRkYXkgJG1vbnRoICR5ZWFyCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL21pc3NpbmcgYi9zaGFyZS9hdXRvbWFrZS0xLjExL21pc3NpbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjgwNTVkMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvbWlzc2luZwpAQCAtMCwwICsxLDM3NiBAQAorIyEgL2Jpbi9zaAorIyBDb21tb24gc3R1YiBmb3IgYSBmZXcgbWlzc2luZyBHTlUgcHJvZ3JhbXMgd2hpbGUgaW5zdGFsbGluZy4KKworc2NyaXB0dmVyc2lvbj0yMDA5LTA0LTI4LjIxOyAjIFVUQworCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OSwgMjAwMCwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwKKyMgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgT3JpZ2luYWxseSBieSBGcmFuLGNvaXMgUGluYXJkIDxwaW5hcmRAaXJvLnVtb250cmVhbC5jYT4sIDE5OTYuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworaWYgdGVzdCAkIyAtZXEgMDsgdGhlbgorICBlY2hvIDE+JjIgIlRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCisgIGV4aXQgMQorZmkKKworcnVuPToKK3NlZF9vdXRwdXQ9J3MvLiogLS1vdXRwdXRbID1dXChbXiBdKlwpLiovXDEvcCcKK3NlZF9taW51c289J3MvLiogLW8gXChbXiBdKlwpLiovXDEvcCcKKworIyBJbiB0aGUgY2FzZXMgd2hlcmUgdGhpcyBtYXR0ZXJzLCBgbWlzc2luZycgaXMgYmVpbmcgcnVuIGluIHRoZQorIyBzcmNkaXIgYWxyZWFkeS4KK2lmIHRlc3QgLWYgY29uZmlndXJlLmFjOyB0aGVuCisgIGNvbmZpZ3VyZV9hYz1jb25maWd1cmUuYWMKK2Vsc2UKKyAgY29uZmlndXJlX2FjPWNvbmZpZ3VyZS5pbgorZmkKKworbXNnPSJtaXNzaW5nIG9uIHlvdXIgc3lzdGVtIgorCitjYXNlICQxIGluCistLXJ1bikKKyAgIyBUcnkgdG8gcnVuIHJlcXVlc3RlZCBwcm9ncmFtLCBhbmQganVzdCBleGl0IGlmIGl0IHN1Y2NlZWRzLgorICBydW49CisgIHNoaWZ0CisgICIkQCIgJiYgZXhpdCAwCisgICMgRXhpdCBjb2RlIDYzIG1lYW5zIHZlcnNpb24gbWlzbWF0Y2guICBUaGlzIG9mdGVuIGhhcHBlbnMKKyAgIyB3aGVuIHRoZSB1c2VyIHRyeSB0byB1c2UgYW4gYW5jaWVudCB2ZXJzaW9uIG9mIGEgdG9vbCBvbgorICAjIGEgZmlsZSB0aGF0IHJlcXVpcmVzIGEgbWluaW11bSB2ZXJzaW9uLiAgSW4gdGhpcyBjYXNlIHdlCisgICMgd2Ugc2hvdWxkIHByb2NlZWQgaGFzIGlmIHRoZSBwcm9ncmFtIGhhZCBiZWVuIGFic2VudCwgb3IKKyAgIyBpZiAtLXJ1biBoYWRuJ3QgYmVlbiBwYXNzZWQuCisgIGlmIHRlc3QgJD8gPSA2MzsgdGhlbgorICAgIHJ1bj06CisgICAgbXNnPSJwcm9iYWJseSB0b28gb2xkIgorICBmaQorICA7OworCisgIC1ofC0taHwtLWhlfC0taGVsfC0taGVscCkKKyAgICBlY2hvICJcCiskMCBbT1BUSU9OXS4uLiBQUk9HUkFNIFtBUkdVTUVOVF0uLi4KKworSGFuZGxlIFxgUFJPR1JBTSBbQVJHVU1FTlRdLi4uJyBmb3Igd2hlbiBQUk9HUkFNIGlzIG1pc3NpbmcsIG9yIHJldHVybiBhbgorZXJyb3Igc3RhdHVzIGlmIHRoZXJlIGlzIG5vIGtub3duIGhhbmRsaW5nIGZvciBQUk9HUkFNLgorCitPcHRpb25zOgorICAtaCwgLS1oZWxwICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQKKyAgLXYsIC0tdmVyc2lvbiAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisgIC0tcnVuICAgICAgICAgICB0cnkgdG8gcnVuIHRoZSBnaXZlbiBjb21tYW5kLCBhbmQgZW11bGF0ZSBpdCBpZiBpdCBmYWlscworCitTdXBwb3J0ZWQgUFJPR1JBTSB2YWx1ZXM6CisgIGFjbG9jYWwgICAgICB0b3VjaCBmaWxlIFxgYWNsb2NhbC5tNCcKKyAgYXV0b2NvbmYgICAgIHRvdWNoIGZpbGUgXGBjb25maWd1cmUnCisgIGF1dG9oZWFkZXIgICB0b3VjaCBmaWxlIFxgY29uZmlnLmguaW4nCisgIGF1dG9tNHRlICAgICB0b3VjaCB0aGUgb3V0cHV0IGZpbGUsIG9yIGNyZWF0ZSBhIHN0dWIgb25lCisgIGF1dG9tYWtlICAgICB0b3VjaCBhbGwgXGBNYWtlZmlsZS5pbicgZmlsZXMKKyAgYmlzb24gICAgICAgIGNyZWF0ZSBcYHkudGFiLltjaF0nLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuW2NoXQorICBmbGV4ICAgICAgICAgY3JlYXRlIFxgbGV4Lnl5LmMnLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuYworICBoZWxwMm1hbiAgICAgdG91Y2ggdGhlIG91dHB1dCBmaWxlCisgIGxleCAgICAgICAgICBjcmVhdGUgXGBsZXgueXkuYycsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5jCisgIG1ha2VpbmZvICAgICB0b3VjaCB0aGUgb3V0cHV0IGZpbGUKKyAgdGFyICAgICAgICAgIHRyeSB0YXIsIGdudXRhciwgZ3RhciwgdGhlbiB0YXIgd2l0aG91dCBub24tcG9ydGFibGUgZmxhZ3MKKyAgeWFjYyAgICAgICAgIGNyZWF0ZSBcYHkudGFiLltjaF0nLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuW2NoXQorCitWZXJzaW9uIHN1ZmZpeGVzIHRvIFBST0dSQU0gYXMgd2VsbCBhcyB0aGUgcHJlZml4ZXMgXGBnbnUtJywgXGBnbnUnLCBhbmQKK1xgZycgYXJlIGlnbm9yZWQgd2hlbiBjaGVja2luZyB0aGUgbmFtZS4KKworU2VuZCBidWcgcmVwb3J0cyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LiIKKyAgICBleGl0ICQ/CisgICAgOzsKKworICAtdnwtLXZ8LS12ZXwtLXZlcnwtLXZlcnN8LS12ZXJzaXwtLXZlcnNpb3wtLXZlcnNpb24pCisgICAgZWNobyAibWlzc2luZyAkc2NyaXB0dmVyc2lvbiAoR05VIEF1dG9tYWtlKSIKKyAgICBleGl0ICQ/CisgICAgOzsKKworICAtKikKKyAgICBlY2hvIDE+JjIgIiQwOiBVbmtub3duIFxgJDEnIG9wdGlvbiIKKyAgICBlY2hvIDE+JjIgIlRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCisgICAgZXhpdCAxCisgICAgOzsKKworZXNhYworCisjIG5vcm1hbGl6ZSBwcm9ncmFtIG5hbWUgdG8gY2hlY2sgZm9yLgorcHJvZ3JhbT1gZWNobyAiJDEiIHwgc2VkICcKKyAgcy9eZ251LS8vOyB0CisgIHMvXmdudS8vOyB0CisgIHMvXmcvLzsgdCdgCisKKyMgTm93IGV4aXQgaWYgd2UgaGF2ZSBpdCwgYnV0IGl0IGZhaWxlZC4gIEFsc28gZXhpdCBub3cgaWYgd2UKKyMgZG9uJ3QgaGF2ZSBpdCBhbmQgLS12ZXJzaW9uIHdhcyBwYXNzZWQgKG1vc3QgbGlrZWx5IHRvIGRldGVjdAorIyB0aGUgcHJvZ3JhbSkuICBUaGlzIGlzIGFib3V0IG5vbi1HTlUgcHJvZ3JhbXMsIHNvIHVzZSAkMSBub3QKKyMgJHByb2dyYW0uCitjYXNlICQxIGluCisgIGxleCp8eWFjYyopCisgICAgIyBOb3QgR05VIHByb2dyYW1zLCB0aGV5IGRvbid0IGhhdmUgLS12ZXJzaW9uLgorICAgIDs7CisKKyAgdGFyKikKKyAgICBpZiB0ZXN0IC1uICIkcnVuIjsgdGhlbgorICAgICAgIGVjaG8gMT4mMiAiRVJST1I6IFxgdGFyJyByZXF1aXJlcyAtLXJ1biIKKyAgICAgICBleGl0IDEKKyAgICBlbGlmIHRlc3QgIngkMiIgPSAieC0tdmVyc2lvbiIgfHwgdGVzdCAieCQyIiA9ICJ4LS1oZWxwIjsgdGhlbgorICAgICAgIGV4aXQgMQorICAgIGZpCisgICAgOzsKKworICAqKQorICAgIGlmIHRlc3QgLXogIiRydW4iICYmICgkMSAtLXZlcnNpb24pID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAjIFdlIGhhdmUgaXQsIGJ1dCBpdCBmYWlsZWQuCisgICAgICAgZXhpdCAxCisgICAgZWxpZiB0ZXN0ICJ4JDIiID0gIngtLXZlcnNpb24iIHx8IHRlc3QgIngkMiIgPSAieC0taGVscCI7IHRoZW4KKyAgICAgICAjIENvdWxkIG5vdCBydW4gLS12ZXJzaW9uIG9yIC0taGVscC4gIFRoaXMgaXMgcHJvYmFibHkgc29tZW9uZQorICAgICAgICMgcnVubmluZyBgJFRPT0wgLS12ZXJzaW9uJyBvciBgJFRPT0wgLS1oZWxwJyB0byBjaGVjayB3aGV0aGVyCisgICAgICAgIyAkVE9PTCBleGlzdHMgYW5kIG5vdCBrbm93aW5nICRUT09MIHVzZXMgbWlzc2luZy4KKyAgICAgICBleGl0IDEKKyAgICBmaQorICAgIDs7Citlc2FjCisKKyMgSWYgaXQgZG9lcyBub3QgZXhpc3QsIG9yIGZhaWxzIHRvIHJ1biAocG9zc2libHkgYW4gb3V0ZGF0ZWQgdmVyc2lvbiksCisjIHRyeSB0byBlbXVsYXRlIGl0LgorY2FzZSAkcHJvZ3JhbSBpbgorICBhY2xvY2FsKikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIFxgYWNpbmNsdWRlLm00JyBvciBcYCR7Y29uZmlndXJlX2FjfScuICBZb3UgbWlnaHQgd2FudAorICAgICAgICAgdG8gaW5zdGFsbCB0aGUgXGBBdXRvbWFrZScgYW5kIFxgUGVybCcgcGFja2FnZXMuICBHcmFiIHRoZW0gZnJvbQorICAgICAgICAgYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorICAgIHRvdWNoIGFjbG9jYWwubTQKKyAgICA7OworCisgIGF1dG9jb25mKikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIFxgJHtjb25maWd1cmVfYWN9Jy4gIFlvdSBtaWdodCB3YW50IHRvIGluc3RhbGwgdGhlCisgICAgICAgICBcYEF1dG9jb25mJyBhbmQgXGBHTlUgbTQnIHBhY2thZ2VzLiAgR3JhYiB0aGVtIGZyb20gYW55IEdOVQorICAgICAgICAgYXJjaGl2ZSBzaXRlLiIKKyAgICB0b3VjaCBjb25maWd1cmUKKyAgICA7OworCisgIGF1dG9oZWFkZXIqKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgXGBhY2NvbmZpZy5oJyBvciBcYCR7Y29uZmlndXJlX2FjfScuICBZb3UgbWlnaHQgd2FudAorICAgICAgICAgdG8gaW5zdGFsbCB0aGUgXGBBdXRvY29uZicgYW5kIFxgR05VIG00JyBwYWNrYWdlcy4gIEdyYWIgdGhlbQorICAgICAgICAgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgZmlsZXM9YHNlZCAtbiAncy9eWyBdKkFbQ01dX0NPTkZJR19IRUFERVIoXChbXildKlwpKS4qL1wxL3AnICR7Y29uZmlndXJlX2FjfWAKKyAgICB0ZXN0IC16ICIkZmlsZXMiICYmIGZpbGVzPSJjb25maWcuaCIKKyAgICB0b3VjaF9maWxlcz0KKyAgICBmb3IgZiBpbiAkZmlsZXM7IGRvCisgICAgICBjYXNlICRmIGluCisgICAgICAqOiopIHRvdWNoX2ZpbGVzPSIkdG91Y2hfZmlsZXMgImBlY2hvICIkZiIgfAorCQkJCSAgICAgICBzZWQgLWUgJ3MvXlteOl0qOi8vJyAtZSAncy86LiovLydgOzsKKyAgICAgICopIHRvdWNoX2ZpbGVzPSIkdG91Y2hfZmlsZXMgJGYuaW4iOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisgICAgdG91Y2ggJHRvdWNoX2ZpbGVzCisgICAgOzsKKworICBhdXRvbWFrZSopCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKKyAgICAgICAgIHlvdSBtb2RpZmllZCBcYE1ha2VmaWxlLmFtJywgXGBhY2luY2x1ZGUubTQnIG9yIFxgJHtjb25maWd1cmVfYWN9Jy4KKyAgICAgICAgIFlvdSBtaWdodCB3YW50IHRvIGluc3RhbGwgdGhlIFxgQXV0b21ha2UnIGFuZCBcYFBlcmwnIHBhY2thZ2VzLgorICAgICAgICAgR3JhYiB0aGVtIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorICAgIGZpbmQgLiAtdHlwZSBmIC1uYW1lIE1ha2VmaWxlLmFtIC1wcmludCB8CisJICAgc2VkICdzL1wuYW0kLy5pbi8nIHwKKwkgICB3aGlsZSByZWFkIGY7IGRvIHRvdWNoICIkZiI7IGRvbmUKKyAgICA7OworCisgIGF1dG9tNHRlKikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzIG5lZWRlZCwgYnV0IGlzICRtc2cuCisgICAgICAgICBZb3UgbWlnaHQgaGF2ZSBtb2RpZmllZCBzb21lIGZpbGVzIHdpdGhvdXQgaGF2aW5nIHRoZQorICAgICAgICAgcHJvcGVyIHRvb2xzIGZvciBmdXJ0aGVyIGhhbmRsaW5nIHRoZW0uCisgICAgICAgICBZb3UgY2FuIGdldCBcYCQxJyBhcyBwYXJ0IG9mIFxgQXV0b2NvbmYnIGZyb20gYW55IEdOVQorICAgICAgICAgYXJjaGl2ZSBzaXRlLiIKKworICAgIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9vdXRwdXQiYAorICAgIHRlc3QgLXogIiRmaWxlIiAmJiBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gIiRzZWRfbWludXNvImAKKyAgICBpZiB0ZXN0IC1mICIkZmlsZSI7IHRoZW4KKwl0b3VjaCAkZmlsZQorICAgIGVsc2UKKwl0ZXN0IC16ICIkZmlsZSIgfHwgZXhlYyA+JGZpbGUKKwllY2hvICIjISAvYmluL3NoIgorCWVjaG8gIiMgQ3JlYXRlZCBieSBHTlUgQXV0b21ha2UgbWlzc2luZyBhcyBhIHJlcGxhY2VtZW50IG9mIgorCWVjaG8gIiMgICQgJEAiCisJZWNobyAiZXhpdCAwIgorCWNobW9kICt4ICRmaWxlCisJZXhpdCAxCisgICAgZmkKKyAgICA7OworCisgIGJpc29uKnx5YWNjKikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIGEgXGAueScgZmlsZS4gIFlvdSBtYXkgbmVlZCB0aGUgXGBCaXNvbicgcGFja2FnZQorICAgICAgICAgaW4gb3JkZXIgZm9yIHRob3NlIG1vZGlmaWNhdGlvbnMgdG8gdGFrZSBlZmZlY3QuICBZb3UgY2FuIGdldAorICAgICAgICAgXGBCaXNvbicgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgcm0gLWYgeS50YWIuYyB5LnRhYi5oCisgICAgaWYgdGVzdCAkIyAtbmUgMTsgdGhlbgorICAgICAgICBldmFsIExBU1RBUkc9IlwkeyQjfSIKKwljYXNlICRMQVNUQVJHIGluCisJKi55KQorCSAgICBTUkNGSUxFPWBlY2hvICIkTEFTVEFSRyIgfCBzZWQgJ3MveSQvYy8nYAorCSAgICBpZiB0ZXN0IC1mICIkU1JDRklMRSI7IHRoZW4KKwkgICAgICAgICBjcCAiJFNSQ0ZJTEUiIHkudGFiLmMKKwkgICAgZmkKKwkgICAgU1JDRklMRT1gZWNobyAiJExBU1RBUkciIHwgc2VkICdzL3kkL2gvJ2AKKwkgICAgaWYgdGVzdCAtZiAiJFNSQ0ZJTEUiOyB0aGVuCisJICAgICAgICAgY3AgIiRTUkNGSUxFIiB5LnRhYi5oCisJICAgIGZpCisJICA7OworCWVzYWMKKyAgICBmaQorICAgIGlmIHRlc3QgISAtZiB5LnRhYi5oOyB0aGVuCisJZWNobyA+eS50YWIuaAorICAgIGZpCisgICAgaWYgdGVzdCAhIC1mIHkudGFiLmM7IHRoZW4KKwllY2hvICdtYWluKCkgeyByZXR1cm4gMDsgfScgPnkudGFiLmMKKyAgICBmaQorICAgIDs7CisKKyAgbGV4KnxmbGV4KikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIGEgXGAubCcgZmlsZS4gIFlvdSBtYXkgbmVlZCB0aGUgXGBGbGV4JyBwYWNrYWdlCisgICAgICAgICBpbiBvcmRlciBmb3IgdGhvc2UgbW9kaWZpY2F0aW9ucyB0byB0YWtlIGVmZmVjdC4gIFlvdSBjYW4gZ2V0CisgICAgICAgICBcYEZsZXgnIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorICAgIHJtIC1mIGxleC55eS5jCisgICAgaWYgdGVzdCAkIyAtbmUgMTsgdGhlbgorICAgICAgICBldmFsIExBU1RBUkc9IlwkeyQjfSIKKwljYXNlICRMQVNUQVJHIGluCisJKi5sKQorCSAgICBTUkNGSUxFPWBlY2hvICIkTEFTVEFSRyIgfCBzZWQgJ3MvbCQvYy8nYAorCSAgICBpZiB0ZXN0IC1mICIkU1JDRklMRSI7IHRoZW4KKwkgICAgICAgICBjcCAiJFNSQ0ZJTEUiIGxleC55eS5jCisJICAgIGZpCisJICA7OworCWVzYWMKKyAgICBmaQorICAgIGlmIHRlc3QgISAtZiBsZXgueXkuYzsgdGhlbgorCWVjaG8gJ21haW4oKSB7IHJldHVybiAwOyB9JyA+bGV4Lnl5LmMKKyAgICBmaQorICAgIDs7CisKKyAgaGVscDJtYW4qKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisJIHlvdSBtb2RpZmllZCBhIGRlcGVuZGVuY3kgb2YgYSBtYW51YWwgcGFnZS4gIFlvdSBtYXkgbmVlZCB0aGUKKwkgXGBIZWxwMm1hbicgcGFja2FnZSBpbiBvcmRlciBmb3IgdGhvc2UgbW9kaWZpY2F0aW9ucyB0byB0YWtlCisJIGVmZmVjdC4gIFlvdSBjYW4gZ2V0IFxgSGVscDJtYW4nIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorCisgICAgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX291dHB1dCJgCisgICAgdGVzdCAteiAiJGZpbGUiICYmIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9taW51c28iYAorICAgIGlmIHRlc3QgLWYgIiRmaWxlIjsgdGhlbgorCXRvdWNoICRmaWxlCisgICAgZWxzZQorCXRlc3QgLXogIiRmaWxlIiB8fCBleGVjID4kZmlsZQorCWVjaG8gIi5hYiBoZWxwMm1hbiBpcyByZXF1aXJlZCB0byBnZW5lcmF0ZSB0aGlzIHBhZ2UiCisJZXhpdCAkPworICAgIGZpCisgICAgOzsKKworICBtYWtlaW5mbyopCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKKyAgICAgICAgIHlvdSBtb2RpZmllZCBhIFxgLnRleGknIG9yIFxgLnRleGluZm8nIGZpbGUsIG9yIGFueSBvdGhlciBmaWxlCisgICAgICAgICBpbmRpcmVjdGx5IGFmZmVjdGluZyB0aGUgYXNwZWN0IG9mIHRoZSBtYW51YWwuICBUaGUgc3B1cmlvdXMKKyAgICAgICAgIGNhbGwgbWlnaHQgYWxzbyBiZSB0aGUgY29uc2VxdWVuY2Ugb2YgdXNpbmcgYSBidWdneSBcYG1ha2UnIChBSVgsCisgICAgICAgICBEVSwgSVJJWCkuICBZb3UgbWlnaHQgd2FudCB0byBpbnN0YWxsIHRoZSBcYFRleGluZm8nIHBhY2thZ2Ugb3IKKyAgICAgICAgIHRoZSBcYEdOVSBtYWtlJyBwYWNrYWdlLiAgR3JhYiBlaXRoZXIgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgIyBUaGUgZmlsZSB0byB0b3VjaCBpcyB0aGF0IHNwZWNpZmllZCB3aXRoIC1vIC4uLgorICAgIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9vdXRwdXQiYAorICAgIHRlc3QgLXogIiRmaWxlIiAmJiBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gIiRzZWRfbWludXNvImAKKyAgICBpZiB0ZXN0IC16ICIkZmlsZSI7IHRoZW4KKyAgICAgICMgLi4uIG9yIGl0IGlzIHRoZSBvbmUgc3BlY2lmaWVkIHdpdGggQHNldGZpbGVuYW1lIC4uLgorICAgICAgaW5maWxlPWBlY2hvICIkKiIgfCBzZWQgJ3MvLiogXChbXiBdKlwpICokL1wxLydgCisgICAgICBmaWxlPWBzZWQgLW4gJworCS9eQHNldGZpbGVuYW1lL3sKKwkgIHMvLiogXChbXiBdKlwpICokL1wxLworCSAgcAorCSAgcQorCX0nICRpbmZpbGVgCisgICAgICAjIC4uLiBvciBpdCBpcyBkZXJpdmVkIGZyb20gdGhlIHNvdXJjZSBuYW1lIChkaXIvZi50ZXhpIGJlY29tZXMgZi5pbmZvKQorICAgICAgdGVzdCAteiAiJGZpbGUiICYmIGZpbGU9YGVjaG8gIiRpbmZpbGUiIHwgc2VkICdzLC4qLywsO3MsLlteLl0qJCwsJ2AuaW5mbworICAgIGZpCisgICAgIyBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgdGhlIHVzZXIgcmVhbGx5IG5lZWRzIG1ha2VpbmZvOworICAgICMgbGV0J3MgZmFpbCB3aXRob3V0IHRvdWNoaW5nIGFueXRoaW5nLgorICAgIHRlc3QgLWYgJGZpbGUgfHwgZXhpdCAxCisgICAgdG91Y2ggJGZpbGUKKyAgICA7OworCisgIHRhciopCisgICAgc2hpZnQKKworICAgICMgV2UgaGF2ZSBhbHJlYWR5IHRyaWVkIHRhciBpbiB0aGUgZ2VuZXJpYyBwYXJ0LgorICAgICMgTG9vayBmb3IgZ251dGFyL2d0YXIgYmVmb3JlIGludm9jYXRpb24gdG8gYXZvaWQgdWdseSBlcnJvcgorICAgICMgbWVzc2FnZXMuCisgICAgaWYgKGdudXRhciAtLXZlcnNpb24gPiAvZGV2L251bGwgMj4mMSk7IHRoZW4KKyAgICAgICBnbnV0YXIgIiRAIiAmJiBleGl0IDAKKyAgICBmaQorICAgIGlmIChndGFyIC0tdmVyc2lvbiA+IC9kZXYvbnVsbCAyPiYxKTsgdGhlbgorICAgICAgIGd0YXIgIiRAIiAmJiBleGl0IDAKKyAgICBmaQorICAgIGZpcnN0YXJnPSIkMSIKKyAgICBpZiBzaGlmdDsgdGhlbgorCWNhc2UgJGZpcnN0YXJnIGluCisJKm8qKQorCSAgICBmaXJzdGFyZz1gZWNobyAiJGZpcnN0YXJnIiB8IHNlZCBzL28vL2AKKwkgICAgdGFyICIkZmlyc3RhcmciICIkQCIgJiYgZXhpdCAwCisJICAgIDs7CisJZXNhYworCWNhc2UgJGZpcnN0YXJnIGluCisJKmgqKQorCSAgICBmaXJzdGFyZz1gZWNobyAiJGZpcnN0YXJnIiB8IHNlZCBzL2gvL2AKKwkgICAgdGFyICIkZmlyc3RhcmciICIkQCIgJiYgZXhpdCAwCisJICAgIDs7CisJZXNhYworICAgIGZpCisKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IEkgY2FuJ3Qgc2VlbSB0byBiZSBhYmxlIHRvIHJ1biBcYHRhcicgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLgorICAgICAgICAgWW91IG1heSB3YW50IHRvIGluc3RhbGwgR05VIHRhciBvciBGcmVlIHBheHV0aWxzLCBvciBjaGVjayB0aGUKKyAgICAgICAgIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuIgorICAgIGV4aXQgMQorICAgIDs7CisKKyAgKikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzIG5lZWRlZCwgYW5kIGlzICRtc2cuCisgICAgICAgICBZb3UgbWlnaHQgaGF2ZSBtb2RpZmllZCBzb21lIGZpbGVzIHdpdGhvdXQgaGF2aW5nIHRoZQorICAgICAgICAgcHJvcGVyIHRvb2xzIGZvciBmdXJ0aGVyIGhhbmRsaW5nIHRoZW0uICBDaGVjayB0aGUgXGBSRUFETUUnIGZpbGUsCisgICAgICAgICBpdCBvZnRlbiB0ZWxscyB5b3UgYWJvdXQgdGhlIG5lZWRlZCBwcmVyZXF1aXNpdGVzIGZvciBpbnN0YWxsaW5nCisgICAgICAgICB0aGlzIHBhY2thZ2UuICBZb3UgbWF5IGFsc28gcGVlayBhdCBhbnkgR05VIGFyY2hpdmUgc2l0ZSwgaW4gY2FzZQorICAgICAgICAgc29tZSBvdGhlciBwYWNrYWdlIHdvdWxkIGNvbnRhaW4gdGhpcyBtaXNzaW5nIFxgJDEnIHByb2dyYW0uIgorICAgIGV4aXQgMQorICAgIDs7Citlc2FjCisKK2V4aXQgMAorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL21raW5zdGFsbGRpcnMgYi9zaGFyZS9hdXRvbWFrZS0xLjExL21raW5zdGFsbGRpcnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDE5MWE0NQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvbWtpbnN0YWxsZGlycwpAQCAtMCwwICsxLDE2MiBAQAorIyEgL2Jpbi9zaAorIyBta2luc3RhbGxkaXJzIC0tLSBtYWtlIGRpcmVjdG9yeSBoaWVyYXJjaHkKKworc2NyaXB0dmVyc2lvbj0yMDA5LTA0LTI4LjIxOyAjIFVUQworCisjIE9yaWdpbmFsIGF1dGhvcjogTm9haCBGcmllZG1hbiA8ZnJpZWRtYW5AcHJlcC5haS5taXQuZWR1PgorIyBDcmVhdGVkOiAxOTkzLTA1LTE2CisjIFB1YmxpYyBkb21haW4uCisjCisjIFRoaXMgZmlsZSBpcyBtYWludGFpbmVkIGluIEF1dG9tYWtlLCBwbGVhc2UgcmVwb3J0CisjIGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPiBvciBzZW5kIHBhdGNoZXMgdG8KKyMgPGF1dG9tYWtlLXBhdGNoZXNAZ251Lm9yZz4uCisKK25sPScKKycKK0lGUz0iICIiCSRubCIKK2VycnN0YXR1cz0wCitkaXJtb2RlPQorCit1c2FnZT0iXAorVXNhZ2U6IG1raW5zdGFsbGRpcnMgWy1oXSBbLS1oZWxwXSBbLS12ZXJzaW9uXSBbLW0gTU9ERV0gRElSIC4uLgorCitDcmVhdGUgZWFjaCBkaXJlY3RvcnkgRElSICh3aXRoIG1vZGUgTU9ERSwgaWYgc3BlY2lmaWVkKSwgaW5jbHVkaW5nIGFsbAorbGVhZGluZyBmaWxlIG5hbWUgY29tcG9uZW50cy4KKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4iCisKKyMgcHJvY2VzcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzCit3aGlsZSB0ZXN0ICQjIC1ndCAwIDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC1oIHwgLS1oZWxwIHwgLS1oKikgICAgICAgICAjIC1oIGZvciBoZWxwCisgICAgICBlY2hvICIkdXNhZ2UiCisgICAgICBleGl0ICQ/CisgICAgICA7OworICAgIC1tKSAgICAgICAgICAgICAgICAgICAgICAgICAjIC1tIFBFUk0gYXJnCisgICAgICBzaGlmdAorICAgICAgdGVzdCAkIyAtZXEgMCAmJiB7IGVjaG8gIiR1c2FnZSIgMT4mMjsgZXhpdCAxOyB9CisgICAgICBkaXJtb2RlPSQxCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAtLXZlcnNpb24pCisgICAgICBlY2hvICIkMCAkc2NyaXB0dmVyc2lvbiIKKyAgICAgIGV4aXQgJD8KKyAgICAgIDs7CisgICAgLS0pICAgICAgICAgICAgICAgICAgICAgICAgICMgc3RvcCBvcHRpb24gcHJvY2Vzc2luZworICAgICAgc2hpZnQKKyAgICAgIGJyZWFrCisgICAgICA7OworICAgIC0qKSAgICAgICAgICAgICAgICAgICAgICAgICAjIHVua25vd24gb3B0aW9uCisgICAgICBlY2hvICIkdXNhZ2UiIDE+JjIKKyAgICAgIGV4aXQgMQorICAgICAgOzsKKyAgICAqKSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmaXJzdCBub24tb3B0IGFyZworICAgICAgYnJlYWsKKyAgICAgIDs7CisgIGVzYWMKK2RvbmUKKworZm9yIGZpbGUKK2RvCisgIGlmIHRlc3QgLWQgIiRmaWxlIjsgdGhlbgorICAgIHNoaWZ0CisgIGVsc2UKKyAgICBicmVhaworICBmaQorZG9uZQorCitjYXNlICQjIGluCisgIDApIGV4aXQgMCA7OworZXNhYworCisjIFNvbGFyaXMgOCdzIG1rZGlyIC1wIGlzbid0IHRocmVhZC1zYWZlLiAgSWYgeW91IG1rZGlyIC1wIGEvYiBhbmQKKyMgbWtkaXIgLXAgYS9jIGF0IHRoZSBzYW1lIHRpbWUsIGJvdGggd2lsbCBkZXRlY3QgdGhhdCBhIGlzIG1pc3NpbmcsCisjIG9uZSB3aWxsIGNyZWF0ZSBhLCB0aGVuIHRoZSBvdGhlciB3aWxsIHRyeSB0byBjcmVhdGUgYSBhbmQgZGllIHdpdGgKKyMgYSAiRmlsZSBleGlzdHMiIGVycm9yLiAgVGhpcyBpcyBhIHByb2JsZW0gd2hlbiBjYWxsaW5nIG1raW5zdGFsbGRpcnMKKyMgZnJvbSBhIHBhcmFsbGVsIG1ha2UuICBXZSB1c2UgLS12ZXJzaW9uIGluIHRoZSBwcm9iZSB0byByZXN0cmljdAorIyBvdXJzZWx2ZXMgdG8gR05VIG1rZGlyLCB3aGljaCBpcyB0aHJlYWQtc2FmZS4KK2Nhc2UgJGRpcm1vZGUgaW4KKyAgJycpCisgICAgaWYgbWtkaXIgLXAgLS12ZXJzaW9uIC4gPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgISAtZCAuLy0tdmVyc2lvbjsgdGhlbgorICAgICAgZWNobyAibWtkaXIgLXAgLS0gJCoiCisgICAgICBleGVjIG1rZGlyIC1wIC0tICIkQCIKKyAgICBlbHNlCisgICAgICAjIE9uIE5leHRTdGVwIGFuZCBPcGVuU3RlcCwgdGhlIGBta2RpcicgY29tbWFuZCBkb2VzIG5vdAorICAgICAgIyByZWNvZ25pemUgYW55IG9wdGlvbi4gIEl0IHdpbGwgaW50ZXJwcmV0IGFsbCBvcHRpb25zIGFzCisgICAgICAjIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZSwgYW5kIHRoZW4gYWJvcnQgYmVjYXVzZSBgLicgYWxyZWFkeQorICAgICAgIyBleGlzdHMuCisgICAgICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAorICAgICAgdGVzdCAtZCAuLy0tdmVyc2lvbiAmJiBybWRpciAuLy0tdmVyc2lvbgorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICBpZiBta2RpciAtbSAiJGRpcm1vZGUiIC1wIC0tdmVyc2lvbiAuID4vZGV2L251bGwgMj4mMSAmJgorICAgICAgIHRlc3QgISAtZCAuLy0tdmVyc2lvbjsgdGhlbgorICAgICAgZWNobyAibWtkaXIgLW0gJGRpcm1vZGUgLXAgLS0gJCoiCisgICAgICBleGVjIG1rZGlyIC1tICIkZGlybW9kZSIgLXAgLS0gIiRAIgorICAgIGVsc2UKKyAgICAgICMgQ2xlYW4gdXAgYWZ0ZXIgTmV4dFN0ZXAgYW5kIE9wZW5TdGVwIG1rZGlyLgorICAgICAgZm9yIGQgaW4gLi8tbSAuLy1wIC4vLS12ZXJzaW9uICIuLyRkaXJtb2RlIjsKKyAgICAgIGRvCisgICAgICAgIHRlc3QgLWQgJGQgJiYgcm1kaXIgJGQKKyAgICAgIGRvbmUKKyAgICBmaQorICAgIDs7Citlc2FjCisKK2ZvciBmaWxlCitkbworICBjYXNlICRmaWxlIGluCisgICAgLyopIHBhdGhjb21wPS8gOzsKKyAgICAqKSAgcGF0aGNvbXA9IDs7CisgIGVzYWMKKyAgb0lGUz0kSUZTCisgIElGUz0vCisgIHNldCBmbm9yZCAkZmlsZQorICBzaGlmdAorICBJRlM9JG9JRlMKKworICBmb3IgZAorICBkbworICAgIHRlc3QgIngkZCIgPSB4ICYmIGNvbnRpbnVlCisKKyAgICBwYXRoY29tcD0kcGF0aGNvbXAkZAorICAgIGNhc2UgJHBhdGhjb21wIGluCisgICAgICAtKikgcGF0aGNvbXA9Li8kcGF0aGNvbXAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0ICEgLWQgIiRwYXRoY29tcCI7IHRoZW4KKyAgICAgIGVjaG8gIm1rZGlyICRwYXRoY29tcCIKKworICAgICAgbWtkaXIgIiRwYXRoY29tcCIgfHwgbGFzdGVycj0kPworCisgICAgICBpZiB0ZXN0ICEgLWQgIiRwYXRoY29tcCI7IHRoZW4KKwllcnJzdGF0dXM9JGxhc3RlcnIKKyAgICAgIGVsc2UKKwlpZiB0ZXN0ICEgLXogIiRkaXJtb2RlIjsgdGhlbgorCSAgZWNobyAiY2htb2QgJGRpcm1vZGUgJHBhdGhjb21wIgorCSAgbGFzdGVycj0KKwkgIGNobW9kICIkZGlybW9kZSIgIiRwYXRoY29tcCIgfHwgbGFzdGVycj0kPworCisJICBpZiB0ZXN0ICEgLXogIiRsYXN0ZXJyIjsgdGhlbgorCSAgICBlcnJzdGF0dXM9JGxhc3RlcnIKKwkgIGZpCisJZmkKKyAgICAgIGZpCisgICAgZmkKKworICAgIHBhdGhjb21wPSRwYXRoY29tcC8KKyAgZG9uZQorZG9uZQorCitleGl0ICRlcnJzdGF0dXMKKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6IHNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjogMgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL3NoYXJlL2F1dG9tYWtlLTEuMTEvcHktY29tcGlsZSBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvcHktY29tcGlsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZjlkMDViCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS9weS1jb21waWxlCkBAIC0wLDAgKzEsMTQ2IEBACisjIS9iaW4vc2gKKyMgcHktY29tcGlsZSAtIENvbXBpbGUgYSBQeXRob24gcHJvZ3JhbQorCitzY3JpcHR2ZXJzaW9uPTIwMDktMDQtMjguMjE7ICMgVVRDCisKKyMgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgVGhpcyBmaWxlIGlzIG1haW50YWluZWQgaW4gQXV0b21ha2UsIHBsZWFzZSByZXBvcnQKKyMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bworIyA8YXV0b21ha2UtcGF0Y2hlc0BnbnUub3JnPi4KKworaWYgWyAteiAiJFBZVEhPTiIgXTsgdGhlbgorICBQWVRIT049cHl0aG9uCitmaQorCitiYXNlZGlyPQorZGVzdGRpcj0KK2ZpbGVzPQord2hpbGUgdGVzdCAkIyAtbmUgMDsgZG8KKyAgY2FzZSAiJDEiIGluCisgICAgLS1iYXNlZGlyKQorICAgICAgYmFzZWRpcj0kMgorICAgICAgaWYgdGVzdCAteiAiJGJhc2VkaXIiOyB0aGVuCisgICAgICAgIGVjaG8gIiQwOiBNaXNzaW5nIGFyZ3VtZW50IHRvIC0tYmFzZWRpci4iIDE+JjIKKyAgICAgICAgZXhpdCAxCisgICAgICBmaQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgLS1kZXN0ZGlyKQorICAgICAgZGVzdGRpcj0kMgorICAgICAgaWYgdGVzdCAteiAiJGRlc3RkaXIiOyB0aGVuCisgICAgICAgIGVjaG8gIiQwOiBNaXNzaW5nIGFyZ3VtZW50IHRvIC0tZGVzdGRpci4iIDE+JjIKKyAgICAgICAgZXhpdCAxCisgICAgICBmaQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgLWh8LS1oKikKKyAgICAgIGNhdCA8PFxFT0YKK1VzYWdlOiBweS1jb21waWxlIFstLWhlbHBdIFstLXZlcnNpb25dIFstLWJhc2VkaXIgRElSXSBbLS1kZXN0ZGlyIERJUl0gRklMRVMuLi4iCisKK0J5dGUgY29tcGlsZSBzb21lIHB5dGhvbiBzY3JpcHRzIEZJTEVTLiAgVXNlIC0tZGVzdGRpciB0byBzcGVjaWZ5IGFueQorbGVhZGluZyBkaXJlY3RvcnkgcGF0aCB0byB0aGUgRklMRVMgdGhhdCB5b3UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIGluIHRoZQorYnl0ZSBjb21waWxlZCBmaWxlLiAgU3BlY2lmeSAtLWJhc2VkaXIgZm9yIGFueSBhZGRpdGlvbmFsIHBhdGggaW5mb3JtYXRpb24geW91CitkbyB3YW50IHRvIGJlIHNob3duIGluIHRoZSBieXRlIGNvbXBpbGVkIGZpbGUuCisKK0V4YW1wbGU6CisgIHB5LWNvbXBpbGUgLS1kZXN0ZGlyIC90bXAvcGtnLXJvb3QgLS1iYXNlZGlyIC91c3Ivc2hhcmUvdGVzdCB0ZXN0LnB5IHRlc3QyLnB5CisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uCitFT0YKKyAgICAgIGV4aXQgJD8KKyAgICAgIDs7CisgICAgLXZ8LS12KikKKyAgICAgIGVjaG8gInB5LWNvbXBpbGUgJHNjcmlwdHZlcnNpb24iCisgICAgICBleGl0ICQ/CisgICAgICA7OworICAgICopCisgICAgICBmaWxlcz0iJGZpbGVzICQxIgorICAgICAgOzsKKyAgZXNhYworICBzaGlmdAorZG9uZQorCitpZiB0ZXN0IC16ICIkZmlsZXMiOyB0aGVuCisgICAgZWNobyAiJDA6IE5vIGZpbGVzIGdpdmVuLiAgVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKKyAgICBleGl0IDEKK2ZpCisKKyMgaWYgYmFzZWRpciB3YXMgZ2l2ZW4sIHRoZW4gaXQgc2hvdWxkIGJlIHByZXBlbmRlZCB0byBmaWxlbmFtZXMgYmVmb3JlCisjIGJ5dGUgY29tcGlsYXRpb24uCitpZiBbIC16ICIkYmFzZWRpciIgXTsgdGhlbgorICAgIHBhdGh0cmFucz0icGF0aCA9IGZpbGUiCitlbHNlCisgICAgcGF0aHRyYW5zPSJwYXRoID0gb3MucGF0aC5qb2luKCckYmFzZWRpcicsIGZpbGUpIgorZmkKKworIyBpZiBkZXN0ZGlyIHdhcyBnaXZlbiwgdGhlbiBpdCBuZWVkcyB0byBiZSBwcmVwZW5kZWQgdG8gdGhlIGZpbGVuYW1lIHRvCisjIGJ5dGUgY29tcGlsZSBidXQgbm90IGdvIGludG8gdGhlIGNvbXBpbGVkIGZpbGUuCitpZiBbIC16ICIkZGVzdGRpciIgXTsgdGhlbgorICAgIGZpbGV0cmFucz0iZmlsZXBhdGggPSBwYXRoIgorZWxzZQorICAgIGZpbGV0cmFucz0iZmlsZXBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKCckZGVzdGRpcicgKyBvcy5zZXAgKyBwYXRoKSIKK2ZpCisKKyRQWVRIT04gLWMgIgoraW1wb3J0IHN5cywgb3MsIHB5X2NvbXBpbGUKKworZmlsZXMgPSAnJyckZmlsZXMnJycKKworc3lzLnN0ZG91dC53cml0ZSgnQnl0ZS1jb21waWxpbmcgcHl0aG9uIG1vZHVsZXMuLi5cbicpCitmb3IgZmlsZSBpbiBmaWxlcy5zcGxpdCgpOgorICAgICRwYXRodHJhbnMKKyAgICAkZmlsZXRyYW5zCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVwYXRoKSBvciBub3QgKGxlbihmaWxlcGF0aCkgPj0gMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZmlsZXBhdGhbLTM6XSA9PSAnLnB5Jyk6CisJICAgIGNvbnRpbnVlCisgICAgc3lzLnN0ZG91dC53cml0ZShmaWxlKQorICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgIHB5X2NvbXBpbGUuY29tcGlsZShmaWxlcGF0aCwgZmlsZXBhdGggKyAnYycsIHBhdGgpCitzeXMuc3Rkb3V0LndyaXRlKCdcbicpIiB8fCBleGl0ICQ/CisKKyMgdGhpcyB3aWxsIGZhaWwgZm9yIHB5dGhvbiA8IDEuNSwgYnV0IHRoYXQgZG9lc24ndCBtYXR0ZXIgLi4uCiskUFlUSE9OIC1PIC1jICIKK2ltcG9ydCBzeXMsIG9zLCBweV9jb21waWxlCisKK2ZpbGVzID0gJycnJGZpbGVzJycnCitzeXMuc3Rkb3V0LndyaXRlKCdCeXRlLWNvbXBpbGluZyBweXRob24gbW9kdWxlcyAob3B0aW1pemVkIHZlcnNpb25zKSAuLi5cbicpCitmb3IgZmlsZSBpbiBmaWxlcy5zcGxpdCgpOgorICAgICRwYXRodHJhbnMKKyAgICAkZmlsZXRyYW5zCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVwYXRoKSBvciBub3QgKGxlbihmaWxlcGF0aCkgPj0gMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZmlsZXBhdGhbLTM6XSA9PSAnLnB5Jyk6CisJICAgIGNvbnRpbnVlCisgICAgc3lzLnN0ZG91dC53cml0ZShmaWxlKQorICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgIHB5X2NvbXBpbGUuY29tcGlsZShmaWxlcGF0aCwgZmlsZXBhdGggKyAnbycsIHBhdGgpCitzeXMuc3Rkb3V0LndyaXRlKCdcbicpIiAyPi9kZXYvbnVsbCB8fCA6CisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL3N5bWxpbmstdHJlZSBiL3NoYXJlL2F1dG9tYWtlLTEuMTEvc3ltbGluay10cmVlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE5ZDUwODMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hdXRvbWFrZS0xLjExL3N5bWxpbmstdHJlZQpAQCAtMCwwICsxLDc4IEBACisjIS9iaW4vc2gKKyMgQ3JlYXRlIGEgc3ltbGluayB0cmVlLgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUsIDIwMDAsIDIwMDMgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIworIyBQbGVhc2UgcmVwb3J0IGJ1Z3MgdG8gPGdjYy1idWdzQGdudS5vcmc+CisjIGFuZCBzZW5kIHBhdGNoZXMgdG8gPGdjYy1wYXRjaGVzQGdudS5vcmc+LgorCisjIFN5bnRheDogc3ltbGluay10cmVlIHNyY2RpciAiaWdub3JlMSBpZ25vcmUyIC4uLiIKKyMKKyMgd2hlcmUgc3JjZGlyIGlzIHRoZSBkaXJlY3RvcnkgdG8gY3JlYXRlIGEgc3ltbGluayB0cmVlIHRvLAorIyBhbmQgImlnbm9yZU4iIGlzIGEgbGlzdCBvZiBmaWxlcy9kaXJlY3RvcmllcyB0byBpZ25vcmUuCisKK3Byb2c9JDAKK3NyY2Rpcj0kMQoraWdub3JlPSIkMiIKKworaWYgdGVzdCAkIyAtbHQgMTsgdGhlbgorICBlY2hvICJzeW1saW5rLXRyZWUgZXJyb3I6ICBVc2FnZTogc3ltbGluay10cmVlIHNyY2RpciBcImlnbm9yZTEgaWdub3JlMiAuLi5cIiIKKyAgZXhpdCAxCitmaQorCitpZ25vcmVfYWRkaXRpb25hbD0iLiAuLiBDVlMiCisKKyMgSWYgd2Ugd2VyZSBpbnZva2VkIHdpdGggYSByZWxhdGl2ZSBwYXRoIG5hbWUsIGFkanVzdCAke3Byb2d9IHRvIHdvcmsKKyMgaW4gc3ViZGlycy4KK2Nhc2UgJHtwcm9nfSBpbgorLyogfCBbQS1aYS16XTpbXFwvXSopIDs7CisqKSBwcm9nPS4uLyR7cHJvZ30gOzsKK2VzYWMKKworIyBTZXQgbmV3c3JjZGlyIHRvIHNvbWV0aGluZyBzdWJkaXJlY3RvcmllcyBjYW4gdXNlLgorY2FzZSAke3NyY2Rpcn0gaW4KKy8qIHwgW0EtWmEtel06W1xcL10qKSBuZXdzcmNkaXI9JHtzcmNkaXJ9IDs7CisqKSBuZXdzcmNkaXI9Li4vJHtzcmNkaXJ9IDs7Citlc2FjCisKK2ZvciBmIGluIGBscyAtYSAke3NyY2Rpcn1gOyBkbworICBpZiBbIC1kICR7c3JjZGlyfS8kZiBdOyB0aGVuCisgICAgZm91bmQ9CisgICAgZm9yIGkgaW4gJHtpZ25vcmV9ICR7aWdub3JlX2FkZGl0aW9uYWx9OyBkbworICAgICAgaWYgWyAiJGYiID0gIiRpIiBdOyB0aGVuCisJZm91bmQ9eWVzCisgICAgICBmaQorICAgIGRvbmUKKyAgICBpZiBbIC16ICIke2ZvdW5kfSIgXTsgdGhlbgorICAgICAgZWNobyAiJGYJCS4ud29ya2luZyBpbiIKKyAgICAgIGlmIFsgLWQgJGYgXTsgdGhlbiB0cnVlOyBlbHNlIG1rZGlyICRmOyBmaQorICAgICAgKGNkICRmOyAke3Byb2d9ICR7bmV3c3JjZGlyfS8kZiAiJHtpZ25vcmV9IikKKyAgICBmaQorICBlbHNlCisgICAgZWNobyAiJGYJCS4ubGlua2VkIgorICAgIHJtIC1mICRmCisgICAgbG4gLXMgJHtzcmNkaXJ9LyRmIC4KKyAgZmkKK2RvbmUKKworZXhpdCAwCmRpZmYgLS1naXQgYS9zaGFyZS9hdXRvbWFrZS0xLjExL3RleGluZm8udGV4IGIvc2hhcmUvYXV0b21ha2UtMS4xMS90ZXhpbmZvLnRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTQwODI2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS90ZXhpbmZvLnRleApAQCAtMCwwICsxLDkyOTEgQEAKKyUgdGV4aW5mby50ZXggLS0gVGVYIG1hY3JvcyB0byBoYW5kbGUgVGV4aW5mbyBmaWxlcy4KKyUgCislIExvYWQgcGxhaW4gaWYgbmVjZXNzYXJ5LCBpLmUuLCBpZiBydW5uaW5nIHVuZGVyIGluaXRleC4KK1xleHBhbmRhZnRlclxpZnhcY3NuYW1lIGZtdG5hbWVcZW5kY3NuYW1lXHJlbGF4XGlucHV0IHBsYWluXGZpCislCitcZGVmXHRleGluZm92ZXJzaW9uezIwMDktMDgtMTQuMTV9CislCislIENvcHlyaWdodCAxOTg1LCAxOTg2LCAxOTg4LCAxOTkwLCAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LAorJSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LAorJSAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorJQorJSBUaGlzIHRleGluZm8udGV4IGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCislIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCislIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZQorJSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorJQorJSBUaGlzIHRleGluZm8udGV4IGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCislIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKyUgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorJQorJSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorJSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyUKKyUgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hlbiB0aGlzIGZpbGUgaXMgcmVhZCBieSBUZVggd2hlbiBwcm9jZXNzaW5nCislIGEgVGV4aW5mbyBzb3VyY2UgZG9jdW1lbnQsIHlvdSBtYXkgdXNlIHRoZSByZXN1bHQgd2l0aG91dAorJSByZXN0cmljdGlvbi4gIChUaGlzIGhhcyBiZWVuIG91ciBpbnRlbnQgc2luY2UgVGV4aW5mbyB3YXMgaW52ZW50ZWQuKQorJQorJSBQbGVhc2UgdHJ5IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0ZXhpbmZvLnRleCBiZWZvcmUgc3VibWl0dGluZyBidWcKKyUgcmVwb3J0czsgeW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb206CislICAgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vICh0aGUgVGV4aW5mbyBob21lIHBhZ2UpLCBvcgorJSAgIGZ0cDovL3R1Zy5vcmcvdGV4L3RleGluZm8udGV4CislICAgICAoYW5kIGFsbCBDVEFOIG1pcnJvcnMsIHNlZSBodHRwOi8vd3d3LmN0YW4ub3JnKS4KKyUgVGhlIHRleGluZm8udGV4IGluIGFueSBnaXZlbiBkaXN0cmlidXRpb24gY291bGQgd2VsbCBiZSBvdXQKKyUgb2YgZGF0ZSwgc28gaWYgdGhhdCdzIHdoYXQgeW91J3JlIHVzaW5nLCBwbGVhc2UgY2hlY2suCislCislIFNlbmQgYnVnIHJlcG9ydHMgdG8gYnVnLXRleGluZm9AZ251Lm9yZy4gIFBsZWFzZSBpbmNsdWRlIGluY2x1ZGluZyBhCislIGNvbXBsZXRlIGRvY3VtZW50IGluIGVhY2ggYnVnIHJlcG9ydCB3aXRoIHdoaWNoIHdlIGNhbiByZXByb2R1Y2UgdGhlCislIHByb2JsZW0uICBQYXRjaGVzIGFyZSwgb2YgY291cnNlLCBncmVhdGx5IGFwcHJlY2lhdGVkLgorJQorJSBUbyBwcm9jZXNzIGEgVGV4aW5mbyBtYW51YWwgd2l0aCBUZVgsIGl0J3MgbW9zdCByZWxpYWJsZSB0byB1c2UgdGhlCislIHRleGkyZHZpIHNoZWxsIHNjcmlwdCB0aGF0IGNvbWVzIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gIEZvciBhIHNpbXBsZQorJSBtYW51YWwgZm9vLnRleGksIGhvd2V2ZXIsIHlvdSBjYW4gZ2V0IGF3YXkgd2l0aCB0aGlzOgorJSAgIHRleCBmb28udGV4aQorJSAgIHRleGluZGV4IGZvby4/PworJSAgIHRleCBmb28udGV4aQorJSAgIHRleCBmb28udGV4aQorJSAgIGR2aXBzIGZvby5kdmkgLW8gICMgb3Igd2hhdGV2ZXI7IHRoaXMgbWFrZXMgZm9vLnBzLgorJSBUaGUgZXh0cmEgVGVYIHJ1bnMgZ2V0IHRoZSBjcm9zcy1yZWZlcmVuY2UgaW5mb3JtYXRpb24gY29ycmVjdC4KKyUgU29tZXRpbWVzIG9uZSBydW4gYWZ0ZXIgdGV4aW5kZXggc3VmZmljZXMsIGFuZCBzb21ldGltZXMgeW91IG5lZWQgbW9yZQorJSB0aGFuIHR3bzsgdGV4aTJkdmkgZG9lcyBpdCBhcyBtYW55IHRpbWVzIGFzIG5lY2Vzc2FyeS4KKyUKKyUgSXQgaXMgcG9zc2libGUgdG8gYWRhcHQgdGV4aW5mby50ZXggZm9yIG90aGVyIGxhbmd1YWdlcywgdG8gc29tZQorJSBleHRlbnQuICBZb3UgY2FuIGdldCB0aGUgZXhpc3RpbmcgbGFuZ3VhZ2Utc3BlY2lmaWMgZmlsZXMgZnJvbSB0aGUKKyUgZnVsbCBUZXhpbmZvIGRpc3RyaWJ1dGlvbi4KKyUKKyUgVGhlIEdOVSBUZXhpbmZvIGhvbWUgcGFnZSBpcyBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby4KKworCitcbWVzc2FnZXtMb2FkaW5nIHRleGluZm8gW3ZlcnNpb24gXHRleGluZm92ZXJzaW9uXTp9CisKKyUgSWYgaW4gYSAuZm10IGZpbGUsIHByaW50IHRoZSB2ZXJzaW9uIG51bWJlcgorJSBhbmQgdHVybiBvbiBhY3RpdmUgY2hhcmFjdGVycyB0aGF0IHdlIGNvdWxkbid0IGRvIGVhcmxpZXIgYmVjYXVzZQorJSB0aGV5IG1pZ2h0IGhhdmUgYXBwZWFyZWQgaW4gdGhlIGlucHV0IGZpbGUgbmFtZS4KK1xldmVyeWpvYntcbWVzc2FnZXtbVGV4aW5mbyB2ZXJzaW9uIFx0ZXhpbmZvdmVyc2lvbl19JQorICBcY2F0Y29kZWArPVxhY3RpdmUgXGNhdGNvZGVgXF89XGFjdGl2ZX0KKworCitcY2hhcmRlZlxvdGhlcj0xMgorCislIFdlIG5ldmVyIHdhbnQgcGxhaW4ncyBcb3V0ZXIgZGVmaW5pdGlvbiBvZiBcKyBpbiBUZXhpbmZvLgorJSBGb3IgQHRleCwgd2UgY2FuIHVzZSBcdGFiYWxpZ24uCitcbGV0XCsgPSBccmVsYXgKKworJSBTYXZlIHNvbWUgcGxhaW4gdGV4IG1hY3JvcyB3aG9zZSBuYW1lcyB3ZSB3aWxsIHJlZGVmaW5lLgorXGxldFxwdGV4Yj1cYgorXGxldFxwdGV4YnVsbGV0PVxidWxsZXQKK1xsZXRccHRleGM9XGMKK1xsZXRccHRleGNvbW1hPVwsCitcbGV0XHB0ZXhkb3Q9XC4KK1xsZXRccHRleGRvdHM9XGRvdHMKK1xsZXRccHRleGVuZD1cZW5kCitcbGV0XHB0ZXhlcXVpdj1cZXF1aXYKK1xsZXRccHRleGV4Y2xhbT1cIQorXGxldFxwdGV4Zm9vdG5vdGU9XGZvb3Rub3RlCitcbGV0XHB0ZXhndHI9PgorXGxldFxwdGV4aGF0PV4KK1xsZXRccHRleGk9XGkKK1xsZXRccHRleGluZGVudD1caW5kZW50CitcbGV0XHB0ZXhpbnNlcnQ9XGluc2VydAorXGxldFxwdGV4bGJyYWNlPVx7CitcbGV0XHB0ZXhsZXNzPTwKK1xsZXRccHRleG5ld3dyaXRlXG5ld3dyaXRlCitcbGV0XHB0ZXhub2luZGVudD1cbm9pbmRlbnQKK1xsZXRccHRleHBsdXM9KworXGxldFxwdGV4cmJyYWNlPVx9CitcbGV0XHB0ZXhzbGFzaD1cLworXGxldFxwdGV4c3Rhcj1cKgorXGxldFxwdGV4dD1cdAorXGxldFxwdGV4dG9wPVx0b3AKK3tcY2F0Y29kZWBcJz1cYWN0aXZlCitcZ2xvYmFsXGxldFxwdGV4cXVvdGVyaWdodCd9JSBNYXRoLW1vZGUgZGVmIGZyb20gcGxhaW4udGV4LgorXGxldFxwdGV4cmFnZ2VkcmlnaHQ9XHJhZ2dlZHJpZ2h0CisKKyUgSWYgdGhpcyBjaGFyYWN0ZXIgYXBwZWFycyBpbiBhbiBlcnJvciBtZXNzYWdlIG9yIGhlbHAgc3RyaW5nLCBpdAorJSBzdGFydHMgYSBuZXcgbGluZSBpbiB0aGUgb3V0cHV0LgorXG5ld2xpbmVjaGFyID0gYF5eSgorCislIFVzZSBUZVggMy4wJ3MgXGlucHV0bGluZW5vIHRvIGdldCB0aGUgbGluZSBudW1iZXIsIGZvciBiZXR0ZXIgZXJyb3IKKyUgbWVzc2FnZXMsIGJ1dCBpZiB3ZSdyZSB1c2luZyBhbiBvbGQgdmVyc2lvbiBvZiBUZVgsIGRvbid0IGRvIGFueXRoaW5nLgorJQorXGlmeFxpbnB1dGxpbmVub1x0aGlzaXN1bmRlZmluZWQKKyAgXGxldFxsaW5lbnVtYmVyID0gXGVtcHR5ICUgUHJlLTMuMC4KK1xlbHNlCisgIFxkZWZcbGluZW51bWJlcntsLlx0aGVcaW5wdXRsaW5lbm86XHNwYWNlfQorXGZpCisKKyUgU2V0IHVwIGZpeGVkIHdvcmRzIGZvciBFbmdsaXNoIGlmIG5vdCBhbHJlYWR5IHNldC4KK1xpZnhccHV0d29yZEFwcGVuZGl4XHVuZGVmaW5lZCAgXGdkZWZccHV0d29yZEFwcGVuZGl4e0FwcGVuZGl4fVxmaQorXGlmeFxwdXR3b3JkQ2hhcHRlclx1bmRlZmluZWQgICBcZ2RlZlxwdXR3b3JkQ2hhcHRlcntDaGFwdGVyfVxmaQorXGlmeFxwdXR3b3JkZmlsZVx1bmRlZmluZWQgICAgICBcZ2RlZlxwdXR3b3JkZmlsZXtmaWxlfVxmaQorXGlmeFxwdXR3b3JkaW5cdW5kZWZpbmVkICAgICAgICBcZ2RlZlxwdXR3b3JkaW57aW59XGZpCitcaWZ4XHB1dHdvcmRJbmRleElzRW1wdHlcdW5kZWZpbmVkICAgICBcZ2RlZlxwdXR3b3JkSW5kZXhJc0VtcHR5eyhJbmRleCBpcyBlbXB0eSl9XGZpCitcaWZ4XHB1dHdvcmRJbmRleE5vbmV4aXN0ZW50XHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkSW5kZXhOb25leGlzdGVudHsoSW5kZXggaXMgbm9uZXhpc3RlbnQpfVxmaQorXGlmeFxwdXR3b3JkSW5mb1x1bmRlZmluZWQgICAgICBcZ2RlZlxwdXR3b3JkSW5mb3tJbmZvfVxmaQorXGlmeFxwdXR3b3JkSW5zdGFuY2VWYXJpYWJsZW9mXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkSW5zdGFuY2VWYXJpYWJsZW9me0luc3RhbmNlIFZhcmlhYmxlIG9mfVxmaQorXGlmeFxwdXR3b3JkTWV0aG9kb25cdW5kZWZpbmVkICBcZ2RlZlxwdXR3b3JkTWV0aG9kb257TWV0aG9kIG9ufVxmaQorXGlmeFxwdXR3b3JkTm9UaXRsZVx1bmRlZmluZWQgICBcZ2RlZlxwdXR3b3JkTm9UaXRsZXtObyBUaXRsZX1cZmkKK1xpZnhccHV0d29yZG9mXHVuZGVmaW5lZCAgICAgICAgXGdkZWZccHV0d29yZG9me29mfVxmaQorXGlmeFxwdXR3b3Jkb25cdW5kZWZpbmVkICAgICAgICBcZ2RlZlxwdXR3b3Jkb257b259XGZpCitcaWZ4XHB1dHdvcmRwYWdlXHVuZGVmaW5lZCAgICAgIFxnZGVmXHB1dHdvcmRwYWdle3BhZ2V9XGZpCitcaWZ4XHB1dHdvcmRzZWN0aW9uXHVuZGVmaW5lZCAgIFxnZGVmXHB1dHdvcmRzZWN0aW9ue3NlY3Rpb259XGZpCitcaWZ4XHB1dHdvcmRTZWN0aW9uXHVuZGVmaW5lZCAgIFxnZGVmXHB1dHdvcmRTZWN0aW9ue1NlY3Rpb259XGZpCitcaWZ4XHB1dHdvcmRzZWVcdW5kZWZpbmVkICAgICAgIFxnZGVmXHB1dHdvcmRzZWV7c2VlfVxmaQorXGlmeFxwdXR3b3JkU2VlXHVuZGVmaW5lZCAgICAgICBcZ2RlZlxwdXR3b3JkU2Vle1NlZX1cZmkKK1xpZnhccHV0d29yZFNob3J0VE9DXHVuZGVmaW5lZCAgXGdkZWZccHV0d29yZFNob3J0VE9De1Nob3J0IENvbnRlbnRzfVxmaQorXGlmeFxwdXR3b3JkVE9DXHVuZGVmaW5lZCAgICAgICBcZ2RlZlxwdXR3b3JkVE9De1RhYmxlIG9mIENvbnRlbnRzfVxmaQorJQorXGlmeFxwdXR3b3JkTUphblx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1KYW57SmFudWFyeX1cZmkKK1xpZnhccHV0d29yZE1GZWJcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNRmVie0ZlYnJ1YXJ5fVxmaQorXGlmeFxwdXR3b3JkTU1hclx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1NYXJ7TWFyY2h9XGZpCitcaWZ4XHB1dHdvcmRNQXByXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTUFwcntBcHJpbH1cZmkKK1xpZnhccHV0d29yZE1NYXlcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNTWF5e01heX1cZmkKK1xpZnhccHV0d29yZE1KdW5cdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNSnVue0p1bmV9XGZpCitcaWZ4XHB1dHdvcmRNSnVsXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTUp1bHtKdWx5fVxmaQorXGlmeFxwdXR3b3JkTUF1Z1x1bmRlZmluZWQgXGdkZWZccHV0d29yZE1BdWd7QXVndXN0fVxmaQorXGlmeFxwdXR3b3JkTVNlcFx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1TZXB7U2VwdGVtYmVyfVxmaQorXGlmeFxwdXR3b3JkTU9jdFx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1PY3R7T2N0b2Jlcn1cZmkKK1xpZnhccHV0d29yZE1Ob3ZcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNTm92e05vdmVtYmVyfVxmaQorXGlmeFxwdXR3b3JkTURlY1x1bmRlZmluZWQgXGdkZWZccHV0d29yZE1EZWN7RGVjZW1iZXJ9XGZpCislCitcaWZ4XHB1dHdvcmREZWZtYWNcdW5kZWZpbmVkICAgIFxnZGVmXHB1dHdvcmREZWZtYWN7TWFjcm99XGZpCitcaWZ4XHB1dHdvcmREZWZzcGVjXHVuZGVmaW5lZCAgIFxnZGVmXHB1dHdvcmREZWZzcGVje1NwZWNpYWwgRm9ybX1cZmkKK1xpZnhccHV0d29yZERlZnZhclx1bmRlZmluZWQgICAgXGdkZWZccHV0d29yZERlZnZhcntWYXJpYWJsZX1cZmkKK1xpZnhccHV0d29yZERlZm9wdFx1bmRlZmluZWQgICAgXGdkZWZccHV0d29yZERlZm9wdHtVc2VyIE9wdGlvbn1cZmkKK1xpZnhccHV0d29yZERlZmZ1bmNcdW5kZWZpbmVkICAgXGdkZWZccHV0d29yZERlZmZ1bmN7RnVuY3Rpb259XGZpCisKKyUgU2luY2UgdGhlIGNhdGVnb3J5IG9mIHNwYWNlIGlzIG5vdCBrbm93biwgd2UgaGF2ZSB0byBiZSBjYXJlZnVsLgorXGNoYXJkZWZcc3BhY2VjYXQgPSAxMAorXGRlZlxzcGFjZWlzc3BhY2V7XGNhdGNvZGVgXCA9XHNwYWNlY2F0fQorCislIHNvbWV0aW1lcyBjaGFyYWN0ZXJzIGFyZSBhY3RpdmUsIHNvIHdlIG5lZWQgY29udHJvbCBzZXF1ZW5jZXMuCitcY2hhcmRlZlxjb2xvbkNoYXIgPSBgXDoKK1xjaGFyZGVmXGNvbW1hQ2hhciA9IGBcLAorXGNoYXJkZWZcZGFzaENoYXIgID0gYFwtCitcY2hhcmRlZlxkb3RDaGFyICAgPSBgXC4KK1xjaGFyZGVmXGV4Y2xhbUNoYXI9IGBcIQorXGNoYXJkZWZcbHF1b3RlQ2hhcj0gYFxgCitcY2hhcmRlZlxxdWVzdENoYXIgPSBgXD8KK1xjaGFyZGVmXHJxdW90ZUNoYXI9IGBcJworXGNoYXJkZWZcc2VtaUNoYXIgID0gYFw7CitcY2hhcmRlZlx1bmRlckNoYXIgPSBgXF8KKworJSBJZ25vcmUgYSB0b2tlbi4KKyUKK1xkZWZcZ29iYmxlIzF7fQorCislIFRoZSBmb2xsb3dpbmcgaXMgdXNlZCBpbnNpZGUgc2V2ZXJhbCBcZWRlZidzLgorXGRlZlxtYWtlY3NuYW1lIzF7XGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZSMxXGVuZGNzbmFtZX0KKworJSBIeXBoZW5hdGlvbiBmaXhlcy4KK1xoeXBoZW5hdGlvbnsKKyAgRmxvci1pLWRhIEdob3N0LXNjcmlwdCBHaG9zdC12aWV3IE1hYy1PUyBQb3N0LVNjcmlwdAorICBhcC1wZW4tZGl4IGJpdC1tYXAgYml0LW1hcHMKKyAgZGF0YS1iYXNlIGRhdGEtYmFzZXMgZXNoZWxsIGZhbGwtaW5nIGhhbGYtd2F5IGxvbmctZXN0IG1hbi11LXNjcmlwdAorICBtYW4tdS1zY3JpcHRzIG1pbmktYnVmLWZlciBtaW5pLWJ1Zi1mZXJzIG92ZXItdmlldyBwYXItYS1kaWdtCisgIHBhci1hLWRpZ21zIHJhdGgtZXIgcmVjLXRhbi1ndS1sYXIgcm8tYm90LWljcyBzZS12ZXJlLWx5IHNldC11cCBzcGEtY2VzCisgIHNwZWxsLWluZyBzcGVsbC1pbmdzCisgIHN0YW5kLWFsb25lIHN0cm9uZy1lc3QgdGltZS1zdGFtcCB0aW1lLXN0YW1wcyB3aGljaC1ldmVyIHdoaXRlLXNwYWNlCisgIHdpZGUtc3ByZWFkIHdyYXAtYXJvdW5kCit9CisKKyUgTWFyZ2luIHRvIGFkZCB0byByaWdodCBvZiBldmVuIHBhZ2VzLCB0byBsZWZ0IG9mIG9kZCBwYWdlcy4KK1xuZXdkaW1lblxiaW5kaW5nb2Zmc2V0CitcbmV3ZGltZW5cbm9ybWFsb2Zmc2V0CitcbmV3ZGltZW5ccGFnZXdpZHRoIFxuZXdkaW1lblxwYWdlaGVpZ2h0CisKKyUgRm9yIGEgZmluYWwgY29weSwgdGFrZSBvdXQgdGhlIHJlY3RhbmdsZXMKKyUgdGhhdCBtYXJrIG92ZXJmdWxsIGJveGVzIChpbiBjYXNlIHlvdSBoYXZlIGRlY2lkZWQKKyUgdGhhdCB0aGUgdGV4dCBsb29rcyBvayBldmVuIHRob3VnaCBpdCBwYXNzZXMgdGhlIG1hcmdpbikuCislCitcZGVmXGZpbmFsb3V0e1xvdmVyZnVsbHJ1bGU9MHB0fQorCislIEB8IGluc2VydHMgYSBjaGFuZ2ViYXIgdG8gdGhlIGxlZnQgb2YgdGhlIGN1cnJlbnQgbGluZS4gIEl0IHNob3VsZAorJSBzdXJyb3VuZCBhbnkgY2hhbmdlZCB0ZXh0LiAgVGhpcyBhcHByb2FjaCBkb2VzICpub3QqIHdvcmsgaWYgdGhlCislIGNoYW5nZSBzcGFucyBtb3JlIHRoYW4gdHdvIGxpbmVzIG9mIG91dHB1dC4gIFRvIGhhbmRsZSB0aGF0LCB3ZSB3b3VsZAorJSBoYXZlIGFkb3B0IGEgbXVjaCBtb3JlIGRpZmZpY3VsdCBhcHByb2FjaCAocHV0dGluZyBtYXJrcyBpbnRvIHRoZSBtYWluCislIHZlcnRpY2FsIGxpc3QgZm9yIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBlYWNoIGNoYW5nZSkuCislCitcZGVmXHx7JQorICAlIFx2YWRqdXN0IGNhbiBvbmx5IGJlIHVzZWQgaW4gaG9yaXpvbnRhbCBtb2RlLgorICBcbGVhdmV2bW9kZQorICAlCisgICUgQXBwZW5kIHRoaXMgdmVydGljYWwgbW9kZSBtYXRlcmlhbCBhZnRlciB0aGUgY3VycmVudCBsaW5lIGluIHRoZSBvdXRwdXQuCisgIFx2YWRqdXN0eyUKKyAgICAlIFdlIHdhbnQgdG8gaW5zZXJ0IGEgcnVsZSB3aXRoIHRoZSBoZWlnaHQgYW5kIGRlcHRoIG9mIHRoZSBjdXJyZW50CisgICAgJSBsZWFkaW5nOyB0aGF0IGlzIGV4YWN0bHkgd2hhdCBcc3RydXRib3ggaXMgc3VwcG9zZWQgdG8gcmVjb3JkLgorICAgIFx2c2tpcC1cYmFzZWxpbmVza2lwCisgICAgJQorICAgICUgXHZhZGp1c3QtaXRlbXMgYXJlIGluc2VydGVkIGF0IHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIHR5cGUuICBTbworICAgICUgdGhlIFxsbGFwIGhlcmUgbW92ZXMgb3V0IGludG8gdGhlIGxlZnQtaGFuZCBtYXJnaW4uCisgICAgXGxsYXB7JQorICAgICAgJQorICAgICAgJSBGb3IgYSB0aGlja2VyIG9yIHRoaW5uZXIgYmFyLCBjaGFuZ2UgdGhlIGAxcHQnLgorICAgICAgXHZydWxlIGhlaWdodFxiYXNlbGluZXNraXAgd2lkdGgxcHQKKyAgICAgICUKKyAgICAgICUgVGhpcyBpcyB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgYmFyIGFuZCB0aGUgdGV4dC4KKyAgICAgIFxoc2tpcCAxMnB0CisgICAgfSUKKyAgfSUKK30KKworJSBTb21ldGltZXMgaXQgaXMgY29udmVuaWVudCB0byBoYXZlIGV2ZXJ5dGhpbmcgaW4gdGhlIHRyYW5zY3JpcHQgZmlsZQorJSBhbmQgbm90aGluZyBvbiB0aGUgdGVybWluYWwuICBXZSBkb24ndCBqdXN0IGNhbGwgXHRyYWNpbmdhbGwgaGVyZSwKKyUgc2luY2UgdGhhdCBwcm9kdWNlcyBzb21lIHVzZWxlc3Mgb3V0cHV0IG9uIHRoZSB0ZXJtaW5hbC4gIFdlIGFsc28gbWFrZQorJSBzb21lIGVmZm9ydCB0byBvcmRlciB0aGUgdHJhY2luZyBjb21tYW5kcyB0byByZWR1Y2Ugb3V0cHV0IGluIHRoZSBsb2cKKyUgZmlsZTsgY2YuIHRyYWNlLnN0eSBpbiBMYVRlWC4KKyUKK1xkZWZcZ2xvZ2dpbmdhbGx7XGJlZ2luZ3JvdXAgXGdsb2JhbGRlZnMgPSAxIFxsb2dnaW5nYWxsIFxlbmRncm91cH0lCitcZGVmXGxvZ2dpbmdhbGx7JQorICBcdHJhY2luZ3N0YXRzMgorICBcdHJhY2luZ3BhZ2VzMQorICBcdHJhY2luZ2xvc3RjaGFyczIgICUgMiBnaXZlcyB1cyBtb3JlIGluIGV0ZXgKKyAgXHRyYWNpbmdwYXJhZ3JhcGhzMQorICBcdHJhY2luZ291dHB1dDEKKyAgXHRyYWNpbmdtYWNyb3MyCisgIFx0cmFjaW5ncmVzdG9yZXMxCisgIFxzaG93Ym94YnJlYWR0aFxtYXhkaW1lbiBcc2hvd2JveGRlcHRoXG1heGRpbWVuCisgIFxpZnhcZVRlWHZlcnNpb25cdW5kZWZpbmVkXGVsc2UgJSBldGV4IGdpdmVzIHVzIG1vcmUgbG9nZ2luZworICAgIFx0cmFjaW5nc2NhbnRva2VuczEKKyAgICBcdHJhY2luZ2lmczEKKyAgICBcdHJhY2luZ2dyb3VwczEKKyAgICBcdHJhY2luZ25lc3RpbmcyCisgICAgXHRyYWNpbmdhc3NpZ25zMQorICBcZmkKKyAgXHRyYWNpbmdjb21tYW5kczMgICUgMyBnaXZlcyB1cyBtb3JlIGluIGV0ZXgKKyAgXGVycm9yY29udGV4dGxpbmVzMTYKK30lCisKKyUgYWRkIGNoZWNrIGZvciBcbGFzdHBlbmFsdHkgdG8gcGxhaW4ncyBkZWZpbml0aW9ucy4gIElmIHRoZSBsYXN0IHRoaW5nCislIHdlIGRpZCB3YXMgYSBcbm9icmVhaywgd2UgZG9uJ3Qgd2FudCB0byBpbnNlcnQgbW9yZSBzcGFjZS4KKyUKK1xkZWZcc21hbGxicmVha3tcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDBccGFyXGlmZGltXGxhc3Rza2lwPFxzbWFsbHNraXBhbW91bnQKKyAgXHJlbW92ZWxhc3Rza2lwXHBlbmFsdHktNTBcc21hbGxza2lwXGZpXGZpfQorXGRlZlxtZWRicmVha3tcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDBccGFyXGlmZGltXGxhc3Rza2lwPFxtZWRza2lwYW1vdW50CisgIFxyZW1vdmVsYXN0c2tpcFxwZW5hbHR5LTEwMFxtZWRza2lwXGZpXGZpfQorXGRlZlxiaWdicmVha3tcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDBccGFyXGlmZGltXGxhc3Rza2lwPFxiaWdza2lwYW1vdW50CisgIFxyZW1vdmVsYXN0c2tpcFxwZW5hbHR5LTIwMFxiaWdza2lwXGZpXGZpfQorCislIEZvciBAY3JvcG1hcmtzIGNvbW1hbmQuCislIERvIEBjcm9wbWFya3MgdG8gZ2V0IGNyb3AgbWFya3MuCislCitcbmV3aWZcaWZjcm9wbWFya3MKK1xsZXRcY3JvcG1hcmtzID0gXGNyb3BtYXJrc3RydWUKKyUKKyUgRGltZW5zaW9ucyB0byBhZGQgY3JvcG1hcmtzIGF0IGNvcm5lcnMuCislIEFkZGVkIGJ5IFAuIEEuIE1hY0theSwgMTIgTm92LiAxOTg2CislCitcbmV3ZGltZW5cb3V0ZXJoc2l6ZSBcbmV3ZGltZW5cb3V0ZXJ2c2l6ZSAlIHNldCBieSB0aGUgcGFwZXIgc2l6ZSByb3V0aW5lcworXG5ld2RpbWVuXGNvcm5lcmxvbmcgIFxjb3JuZXJsb25nPTFwYworXG5ld2RpbWVuXGNvcm5lcnRoaWNrIFxjb3JuZXJ0aGljaz0uM3B0CitcbmV3ZGltZW5cdG9wYW5kYm90dG9tbWFyZ2luIFx0b3BhbmRib3R0b21tYXJnaW49Ljc1aW4KKworJSBPdXRwdXQgYSBtYXJrIHdoaWNoIHNldHMgXHRoaXNjaGFwdGVyLCBcdGhpc3NlY3Rpb24gYW5kIFx0aGlzY29sb3IuCislIFdlIGR1bXAgZXZlcnl0aGluZyB0b2dldGhlciBiZWNhdXNlIHdlIG9ubHkgaGF2ZSBvbmUga2luZCBvZiBtYXJrLgorJSBUaGlzIHdvcmtzIGJlY2F1c2Ugd2Ugb25seSB1c2UgXGJvdG1hcmsgLyBcdG9wbWFyaywgbm90IFxmaXJzdG1hcmsuCislCislIEEgbWFyayBjb250YWlucyBhIHN1YmV4cHJlc3Npb24gb2YgdGhlIFxpZmNhc2UgLi4uIFxmaSBjb25zdHJ1Y3QuCislIFxnZXQqbWFya3MgbWFjcm9zIGJlbG93IGV4dHJhY3QgdGhlIG5lZWRlZCBwYXJ0IHVzaW5nIFxpZmNhc2UuCislCislIEFub3RoZXIgY29tcGxpY2F0aW9uIGlzIHRvIGxldCB0aGUgdXNlciBjaG9vc2Ugd2hldGhlciBcdGhpc2NoYXB0ZXIKKyUgKFx0aGlzc2VjdGlvbikgcmVmZXJzIHRvIHRoZSBjaGFwdGVyIChzZWN0aW9uKSBpbiBlZmZlY3QgYXQgdGhlIHRvcAorJSBvZiBhIHBhZ2UsIG9yIHRoYXQgYXQgdGhlIGJvdHRvbSBvZiBhIHBhZ2UuICBUaGUgc29sdXRpb24gaXMKKyUgZGVzY3JpYmVkIG9uIHBhZ2UgMjYwIG9mIFRoZSBUZVhib29rLiAgSXQgaW52b2x2ZXMgb3V0cHV0dGluZyB0d28KKyUgbWFya3MgZm9yIHRoZSBzZWN0aW9uaW5nIG1hY3Jvcywgb25lIGJlZm9yZSB0aGUgc2VjdGlvbiBicmVhaywgYW5kCislIG9uZSBhZnRlci4gIEkgd29uJ3QgcHJldGVuZCBJIGNhbiBkZXNjcmliZSB0aGlzIGJldHRlciB0aGFuIERFSy4uLgorXGRlZlxkb21hcmt7JQorICBcdG9rczA9XGV4cGFuZGFmdGVye1xsYXN0Y2hhcHRlcmRlZnN9JQorICBcdG9rczI9XGV4cGFuZGFmdGVye1xsYXN0c2VjdGlvbmRlZnN9JQorICBcdG9rczQ9XGV4cGFuZGFmdGVye1xwcmV2Y2hhcHRlcmRlZnN9JQorICBcdG9rczY9XGV4cGFuZGFmdGVye1xwcmV2c2VjdGlvbmRlZnN9JQorICBcdG9rczg9XGV4cGFuZGFmdGVye1xsYXN0Y29sb3JkZWZzfSUKKyAgXG1hcmt7JQorICAgICAgICAgICAgICAgICAgIFx0aGVcdG9rczAgXHRoZVx0b2tzMgorICAgICAgXG5vZXhwYW5kXG9yIFx0aGVcdG9rczQgXHRoZVx0b2tzNgorICAgIFxub2V4cGFuZFxlbHNlIFx0aGVcdG9rczgKKyAgfSUKK30KKyUgXHRvcG1hcmsgZG9lc24ndCB3b3JrIGZvciB0aGUgdmVyeSBmaXJzdCBjaGFwdGVyIChhZnRlciB0aGUgdGl0bGUKKyUgcGFnZSBvciB0aGUgY29udGVudHMpLCBzbyB3ZSB1c2UgXGZpcnN0bWFyayB0aGVyZSAtLSB0aGlzIGdldHMgdXMKKyUgdGhlIG1hcmsgd2l0aCB0aGUgY2hhcHRlciBkZWZzLCB1bmxlc3MgdGhlIHVzZXIgc25lYWtzIGluLCBlLmcuLAorJSBAc2V0Y29sb3IgKG9yIEB1cmwsIG9yIEBsaW5rLCBldGMuKSBiZXR3ZWVuIEBjb250ZW50cyBhbmQgdGhlIHZlcnkKKyUgZmlyc3QgQGNoYXB0ZXIuCitcZGVmXGdldHRvcGhlYWRpbmdtYXJrc3slCisgIFxpZmNhc2UwXHRvcG1hcmtcZmkKKyAgXGlmeFx0aGlzY2hhcHRlclxlbXB0eSBcaWZjYXNlMFxmaXJzdG1hcmtcZmkgXGZpCit9CitcZGVmXGdldGJvdHRvbWhlYWRpbmdtYXJrc3tcaWZjYXNlMVxib3RtYXJrXGZpfQorXGRlZlxnZXRjb2xvcm1hcmtze1xpZmNhc2UyXHRvcG1hcmtcZml9CisKKyUgQXZvaWQgInVuZGVmaW5lZCBjb250cm9sIHNlcXVlbmNlIiBlcnJvcnMuCitcZGVmXGxhc3RjaGFwdGVyZGVmc3t9CitcZGVmXGxhc3RzZWN0aW9uZGVmc3t9CitcZGVmXHByZXZjaGFwdGVyZGVmc3t9CitcZGVmXHByZXZzZWN0aW9uZGVmc3t9CitcZGVmXGxhc3Rjb2xvcmRlZnN7fQorCislIE1haW4gb3V0cHV0IHJvdXRpbmUuCitcY2hhcmRlZlxQQUdFID0gMjU1Citcb3V0cHV0ID0ge1xvbmVwYWdlb3V0e1xwYWdlY29udGVudHNcUEFHRX19CisKK1xuZXdib3hcaGVhZGxpbmVib3gKK1xuZXdib3hcZm9vdGxpbmVib3gKKworJSBcb25lcGFnZW91dCB0YWtlcyBhIHZib3ggYXMgYW4gYXJndW1lbnQuICBOb3RlIHRoYXQgXHBhZ2Vjb250ZW50cworJSBkb2VzIGluc2VydGlvbnMsIGJ1dCB5b3UgaGF2ZSB0byBjYWxsIGl0IHlvdXJzZWxmLgorXGRlZlxvbmVwYWdlb3V0IzF7JQorICBcaWZjcm9wbWFya3MgXGhvZmZzZXQ9MHB0IFxlbHNlIFxob2Zmc2V0PVxub3JtYWxvZmZzZXQgXGZpCisgICUKKyAgXGlmb2RkXHBhZ2VubyAgXGFkdmFuY2VcaG9mZnNldCBieSBcYmluZGluZ29mZnNldAorICBcZWxzZSBcYWR2YW5jZVxob2Zmc2V0IGJ5IC1cYmluZGluZ29mZnNldFxmaQorICAlCisgICUgRG8gdGhpcyBvdXRzaWRlIG9mIHRoZSBcc2hpcG91dCBzbyBAY29kZSBldGMuIHdpbGwgYmUgZXhwYW5kZWQgaW4KKyAgJSB0aGUgaGVhZGxpbmUgYXMgdGhleSBzaG91bGQgYmUsIG5vdCB0YWtlbiBsaXRlcmFsbHkgKG91dHB1dHRpbmcgJydjb2RlKS4KKyAgXGlmb2RkXHBhZ2VubyBcZ2V0b2RkaGVhZGluZ21hcmtzIFxlbHNlIFxnZXRldmVuaGVhZGluZ21hcmtzIFxmaQorICBcc2V0Ym94XGhlYWRsaW5lYm94ID0gXHZib3h7XGxldFxoc2l6ZT1ccGFnZXdpZHRoIFxtYWtlaGVhZGxpbmV9JQorICBcaWZvZGRccGFnZW5vIFxnZXRvZGRmb290aW5nbWFya3MgXGVsc2UgXGdldGV2ZW5mb290aW5nbWFya3MgXGZpCisgIFxzZXRib3hcZm9vdGxpbmVib3ggPSBcdmJveHtcbGV0XGhzaXplPVxwYWdld2lkdGggXG1ha2Vmb290bGluZX0lCisgICUKKyAgeyUKKyAgICAlIEhhdmUgdG8gZG8gdGhpcyBzdHVmZiBvdXRzaWRlIHRoZSBcc2hpcG91dCBiZWNhdXNlIHdlIHdhbnQgaXQgdG8KKyAgICAlIHRha2UgZWZmZWN0IGluIFx3cml0ZSdzLCB5ZXQgdGhlIGdyb3VwIGRlZmluZWQgYnkgdGhlIFx2Ym94IGVuZHMKKyAgICAlIGJlZm9yZSB0aGUgXHNoaXBvdXQgcnVucy4KKyAgICAlCisgICAgXGluZGV4ZHVtbWllcyAgICAgICAgICUgZG9uJ3QgZXhwYW5kIGNvbW1hbmRzIGluIHRoZSBvdXRwdXQuCisgICAgXG5vcm1hbHR1cm5vZmZhY3RpdmUgICUgXCBpbiBpbmRleCBlbnRyaWVzIG11c3Qgbm90IHN0YXkgXCwgZS5nLiwgaWYKKyAgICAgICAgICAgICAgICUgdGhlIHBhZ2UgYnJlYWsgaGFwcGVucyB0byBiZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGV4YW1wbGUuCisgICAgICAgICAgICAgICAlIFdlIGRvbid0IHdhbnQgLnZyIChvciB3aGF0ZXZlcikgZW50cmllcyBsaWtlIHRoaXM6CisgICAgICAgICAgICAgICAlIFxlbnRyeXt7XHR0IFxpbmRleGJhY2tzbGFzaCB9YWNyb255bX17MzJ9e1xjb2RlIHtcYWNyb255bX19CisgICAgICAgICAgICAgICAlICJcYWNyb255bSIgd29uJ3Qgd29yayB3aGVuIGl0J3MgcmVhZCBiYWNrIGluOworICAgICAgICAgICAgICAgJSBpdCBuZWVkcyB0byBiZQorICAgICAgICAgICAgICAgJSB7XGNvZGUge3tcdHQgXGJhY2tzbGFzaGN1cmZvbnQgfWFjcm9ueW19CisgICAgXHNoaXBvdXRcdmJveHslCisgICAgICAlIERvIHRoaXMgZWFybHkgc28gcGRmIHJlZmVyZW5jZXMgZ28gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFnZS4KKyAgICAgIFxpZnBkZm1ha2VwYWdlZGVzdCBccGRmZGVzdCBuYW1le1x0aGVccGFnZW5vfSB4eXpcZmkKKyAgICAgICUKKyAgICAgIFxpZmNyb3BtYXJrcyBcdmJveCB0byBcb3V0ZXJ2c2l6ZVxiZ3JvdXAKKyAgICAgICAgXGhzaXplID0gXG91dGVyaHNpemUKKyAgICAgICAgXHZza2lwLVx0b3BhbmRib3R0b21tYXJnaW4KKyAgICAgICAgXHZ0b3AgdG8wcHR7JQorICAgICAgICAgIFxsaW5le1xld3RvcFxoZmlsXGV3dG9wfSUKKyAgICAgICAgICBcbm9pbnRlcmxpbmVza2lwCisgICAgICAgICAgXGxpbmV7JQorICAgICAgICAgICAgXHZib3h7XG1vdmVsZWZ0XGNvcm5lcnRoaWNrXG5zdG9wfSUKKyAgICAgICAgICAgIFxoZmlsbAorICAgICAgICAgICAgXHZib3h7XG1vdmVyaWdodFxjb3JuZXJ0aGlja1xuc3RvcH0lCisgICAgICAgICAgfSUKKyAgICAgICAgICBcdnNzfSUKKyAgICAgICAgXHZza2lwXHRvcGFuZGJvdHRvbW1hcmdpbgorICAgICAgICBcbGluZVxiZ3JvdXAKKyAgICAgICAgICBcaGZpbCAlIGNlbnRlciB0aGUgcGFnZSB3aXRoaW4gdGhlIG91dGVyIChwYWdlKSBoc2l6ZS4KKyAgICAgICAgICBcaWZvZGRccGFnZW5vXGhza2lwXGJpbmRpbmdvZmZzZXRcZmkKKyAgICAgICAgICBcdmJveFxiZ3JvdXAKKyAgICAgIFxmaQorICAgICAgJQorICAgICAgXHVudmJveFxoZWFkbGluZWJveAorICAgICAgXHBhZ2Vib2R5eyMxfSUKKyAgICAgIFxpZmRpbVxodFxmb290bGluZWJveCA+IDBwdAorICAgICAgICAlIE9ubHkgbGVhdmUgdGhpcyBzcGFjZSBpZiB0aGUgZm9vdGxpbmUgaXMgbm9uZW1wdHkuCisgICAgICAgICUgKFdlIGxlc3NlbmVkIFx2c2l6ZSBmb3IgaXQgaW4gXG9kZGZvb3Rpbmd5eXkuKQorICAgICAgICAlIFRoZSBcYmFzZWxpbmVza2lwPTI0cHQgaW4gcGxhaW4ncyBcbWFrZWZvb3RsaW5lIGhhcyBubyBlZmZlY3QuCisgICAgICAgIFx2c2tpcCAyNHB0CisgICAgICAgIFx1bnZib3hcZm9vdGxpbmVib3gKKyAgICAgIFxmaQorICAgICAgJQorICAgICAgXGlmY3JvcG1hcmtzCisgICAgICAgICAgXGVncm91cCAlIGVuZCBvZiBcdmJveFxiZ3JvdXAKKyAgICAgICAgXGhmaWxcZWdyb3VwICUgZW5kIG9mIChjZW50ZXJpbmcpIFxsaW5lXGJncm91cAorICAgICAgICBcdnNraXBcdG9wYW5kYm90dG9tbWFyZ2luIHBsdXMxZmlsbCBtaW51czFmaWxsCisgICAgICAgIFxib3htYXhkZXB0aCA9IFxjb3JuZXJ0aGljaworICAgICAgICBcdmJveCB0bzBwdHtcdnNzCisgICAgICAgICAgXGxpbmV7JQorICAgICAgICAgICAgXHZib3h7XG1vdmVsZWZ0XGNvcm5lcnRoaWNrXG5zYm90fSUKKyAgICAgICAgICAgIFxoZmlsbAorICAgICAgICAgICAgXHZib3h7XG1vdmVyaWdodFxjb3JuZXJ0aGlja1xuc2JvdH0lCisgICAgICAgICAgfSUKKyAgICAgICAgICBcbm9pbnRlcmxpbmVza2lwCisgICAgICAgICAgXGxpbmV7XGV3Ym90XGhmaWxcZXdib3R9JQorICAgICAgICB9JQorICAgICAgXGVncm91cCAlIFx2Ym94IGZyb20gZmlyc3QgY3JvcG1hcmtzIGNsYXVzZQorICAgICAgXGZpCisgICAgfSUgZW5kIG9mIFxzaGlwb3V0XHZib3gKKyAgfSUgZW5kIG9mIGdyb3VwIHdpdGggXGluZGV4ZHVtbWllcworICBcYWR2YW5jZXBhZ2VubworICBcaWZudW1cb3V0cHV0cGVuYWx0eT4tMjAwMDAgXGVsc2VcZG9zdXBlcmVqZWN0XGZpCit9CisKK1xuZXdpbnNlcnRcbWFyZ2luIFxkaW1lblxtYXJnaW49XG1heGRpbWVuCisKK1xkZWZccGFnZWJvZHkjMXtcdmJveCB0b1xwYWdlaGVpZ2h0e1xib3htYXhkZXB0aD1cbWF4ZGVwdGggIzF9fQore1xjYXRjb2RlYFxAID0xMQorXGdkZWZccGFnZWNvbnRlbnRzIzF7XGlmdm9pZFx0b3BpbnNcZWxzZVx1bnZib3hcdG9waW5zXGZpCislIG1hcmdpbmFsIGhhY2tzLCBqdWhhQHZpaXNhLnV1Y3AgKEp1aGEgVGFrYWxhKQorXGlmdm9pZFxtYXJnaW5cZWxzZSAlIG1hcmdpbmFsIGluZm8gaXMgcHJlc2VudAorICBccmxhcHtca2Vyblxoc2l6ZVx2Ym94IHRvXHpAe1xrZXJuMXB0XGJveFxtYXJnaW4gXHZzc319XGZpCitcZGltZW5APVxkcCMxXHJlbGF4IFx1bnZib3gjMVxyZWxheAorXGlmdm9pZFxmb290aW5zXGVsc2VcdnNraXBcc2tpcFxmb290aW5zXGZvb3Rub3RlcnVsZSBcdW52Ym94XGZvb3RpbnNcZmkKK1xpZnJAZ2dlZGJvdHRvbSBca2Vybi1cZGltZW5AIFx2ZmlsIFxmaX0KK30KKworJSBIZXJlIGFyZSB0aGUgcnVsZXMgZm9yIHRoZSBjcm9wbWFya3MuICBOb3RlIHRoYXQgdGhleSBhcmUKKyUgb2Zmc2V0IHNvIHRoYXQgdGhlIHNwYWNlIGJldHdlZW4gdGhlbSBpcyB0cnVseSBcb3V0ZXJoc2l6ZSBvciBcb3V0ZXJ2c2l6ZQorJSAoUC4gQS4gTWFjS2F5LCAxMiBOb3ZlbWJlciwgMTk4NikKKyUKK1xkZWZcZXd0b3B7XHZydWxlIGhlaWdodFxjb3JuZXJ0aGljayBkZXB0aDBwdCB3aWR0aFxjb3JuZXJsb25nfQorXGRlZlxuc3RvcHtcdmJveAorICB7XGhydWxlIGhlaWdodFxjb3JuZXJ0aGljayBkZXB0aFxjb3JuZXJsb25nIHdpZHRoXGNvcm5lcnRoaWNrfX0KK1xkZWZcZXdib3R7XHZydWxlIGhlaWdodDBwdCBkZXB0aFxjb3JuZXJ0aGljayB3aWR0aFxjb3JuZXJsb25nfQorXGRlZlxuc2JvdHtcdmJveAorICB7XGhydWxlIGhlaWdodFxjb3JuZXJsb25nIGRlcHRoXGNvcm5lcnRoaWNrIHdpZHRoXGNvcm5lcnRoaWNrfX0KKworJSBQYXJzZSBhbiBhcmd1bWVudCwgdGhlbiBwYXNzIGl0IHRvICMxLiAgVGhlIGFyZ3VtZW50IGlzIHRoZSByZXN0IG9mCislIHRoZSBpbnB1dCBsaW5lIChleGNlcHQgd2UgcmVtb3ZlIGEgdHJhaWxpbmcgY29tbWVudCkuICAjMSBzaG91bGQgYmUgYQorJSBtYWNybyB3aGljaCBleHBlY3RzIGFuIG9yZGluYXJ5IHVuZGVsaW1pdGVkIFRlWCBhcmd1bWVudC4KKyUKK1xkZWZccGFyc2Vhcmd7XHBhcnNlYXJndXNpbmd7fX0KK1xkZWZccGFyc2Vhcmd1c2luZyMxIzJ7JQorICBcZGVmXGFyZ3RvcnVueyMyfSUKKyAgXGJlZ2luZ3JvdXAKKyAgICBcb2JleWxpbmVzCisgICAgXHNwYWNlaXNzcGFjZQorICAgICMxJQorICAgIFxwYXJzZWFyZ2xpbmVcZW1wdHklIEluc2VydCB0aGUgXGVtcHR5IHRva2VuLCBzZWUgXGZpbmlzaHBhcnNlYXJnIGJlbG93LgorfQorCit7XG9iZXlsaW5lcyAlCisgIFxnZGVmXHBhcnNlYXJnbGluZSMxXl5NeyUKKyAgICBcZW5kZ3JvdXAgJSBFbmQgb2YgdGhlIGdyb3VwIHN0YXJ0ZWQgaW4gXHBhcnNlYXJnLgorICAgIFxhcmdyZW1vdmVjb21tZW50ICMxXGNvbW1lbnRcQXJnVGVybSUKKyAgfSUKK30KKworJSBGaXJzdCByZW1vdmUgYW55IEBjb21tZW50LCB0aGVuIGFueSBAYyBjb21tZW50LgorXGRlZlxhcmdyZW1vdmVjb21tZW50IzFcY29tbWVudCMyXEFyZ1Rlcm17XGFyZ3JlbW92ZWMgIzFcY1xBcmdUZXJtfQorXGRlZlxhcmdyZW1vdmVjIzFcYyMyXEFyZ1Rlcm17XGFyZ2NoZWNrc3BhY2VzIzFcXl5NXEFyZ1Rlcm19CisKKyUgRWFjaCBvY2N1cnJlbmNlIG9mIGBcXl5NJyBvciBgPHNwYWNlPlxeXk0nIGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLgorJQorJSBcYXJncmVtb3ZlYyBtaWdodCBsZWF2ZSB1cyB3aXRoIHRyYWlsaW5nIHNwYWNlLCBlLmcuLAorJSAgICBAZW5kIGl0ZW1pemUgIEBjIGZvbworJSBUaGlzIHNwYWNlIHRva2VuIHVuZGVyZ29lcyB0aGUgc2FtZSBwcm9jZWR1cmUgYW5kIGlzIGV2ZW50dWFsbHkgcmVtb3ZlZAorJSBieSBcZmluaXNocGFyc2VhcmcuCislCitcZGVmXGFyZ2NoZWNrc3BhY2VzIzFcXl5Ne1xhcmdjaGVja3NwYWNlc1gjMVxeXk0gXF5eTX0KK1xkZWZcYXJnY2hlY2tzcGFjZXNYIzEgXF5eTXtcYXJnY2hlY2tzcGFjZXNZIzFcXl5NfQorXGRlZlxhcmdjaGVja3NwYWNlc1kjMVxeXk0jMlxeXk0jM1xBcmdUZXJteyUKKyAgXGRlZlx0ZW1weyMzfSUKKyAgXGlmeFx0ZW1wXGVtcHR5CisgICAgJSBEbyBub3QgdXNlIFxuZXh0LCBwZXJoYXBzIHRoZSBjYWxsZXIgb2YgXHBhcnNlYXJnIHVzZXMgaXQ7IHJldXNlIFx0ZW1wOgorICAgIFxsZXRcdGVtcFxmaW5pc2hwYXJzZWFyZworICBcZWxzZQorICAgIFxsZXRcdGVtcFxhcmdjaGVja3NwYWNlcworICBcZmkKKyAgJSBQdXQgdGhlIHNwYWNlIHRva2VuIGluOgorICBcdGVtcCMxICMzXEFyZ1Rlcm0KK30KKworJSBJZiBhIF9kZWxpbWl0ZWRfIGFyZ3VtZW50IGlzIGVuY2xvc2VkIGluIGJyYWNlcywgdGhleSBnZXQgc3RyaXBwZWQ7IHNvCislIHRvIGdldCBfZXhhY3RseV8gdGhlIHJlc3Qgb2YgdGhlIGxpbmUsIHdlIGhhZCB0byBwcmV2ZW50IHN1Y2ggc2l0dWF0aW9uLgorJSBXZSBwcmVwZW5kZWQgYW4gXGVtcHR5IHRva2VuIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBhbmQgd2UgZXhwYW5kIGl0IG5vdywKKyUganVzdCBiZWZvcmUgcGFzc2luZyB0aGUgY29udHJvbCB0byBcYXJndG9ydW4uCislIChTaW1pbGFybHksIHdlIGhhdmUgdG8gdGhpbmsgYWJvdXQgIzMgb2YgXGFyZ2NoZWNrc3BhY2VzWSBhYm92ZTogaXQgaXMKKyUgZWl0aGVyIHRoZSBudWxsIHN0cmluZywgb3IgaXQgZW5kcyB3aXRoIFxeXk0tLS10aHVzIHRoZXJlIGlzIG5vIGRhbmdlcgorJSB0aGF0IGEgcGFpciBvZiBicmFjZXMgd291bGQgYmUgc3RyaXBwZWQuCislCislIEJ1dCBmaXJzdCwgd2UgaGF2ZSB0byByZW1vdmUgdGhlIHRyYWlsaW5nIHNwYWNlIHRva2VuLgorJQorXGRlZlxmaW5pc2hwYXJzZWFyZyMxIFxBcmdUZXJte1xleHBhbmRhZnRlclxhcmd0b3J1blxleHBhbmRhZnRlcnsjMX19CisKKyUgXHBhcnNlYXJnZGVmXGZvb3suLi59CislCWlzIHJvdWdobHkgZXF1aXZhbGVudCB0bworJSBcZGVmXGZvb3tccGFyc2VhcmdcWGZvb30KKyUgXGRlZlxYZm9vIzF7Li4ufQorJQorJSBBY3R1YWxseSwgSSB1c2UgXGNzbmFtZVxzdHJpbmdcZm9vXGVuZGNzbmFtZSwgaWUuIFxcZm9vLCBhcyBpdCBpcyBteQorJSBmYXZvdXJpdGUgVGVYIHRyaWNrLiAgLS1rYXNhbCwgMTZub3YwMworCitcZGVmXHBhcnNlYXJnZGVmIzF7JQorICBcZXhwYW5kYWZ0ZXIgXGRvcGFyc2VhcmdkZWYgXGNzbmFtZVxzdHJpbmcjMVxlbmRjc25hbWUgIzElCit9CitcZGVmXGRvcGFyc2VhcmdkZWYjMSMyeyUKKyAgXGRlZiMye1xwYXJzZWFyZyMxfSUKKyAgXGRlZiMxIyMxJQorfQorCislIFNldmVyYWwgdXRpbGl0eSBkZWZpbml0aW9ucyB3aXRoIGFjdGl2ZSBzcGFjZToKK3sKKyAgXG9iZXlzcGFjZXMKKyAgXGdkZWZcb2JleWVkc3BhY2V7IH0KKworICAlIE1ha2UgZWFjaCBzcGFjZSBjaGFyYWN0ZXIgaW4gdGhlIGlucHV0IHByb2R1Y2UgYSBub3JtYWwgaW50ZXJ3b3JkCisgICUgc3BhY2UgaW4gdGhlIG91dHB1dC4gIERvbid0IGFsbG93IGEgbGluZSBicmVhayBhdCB0aGlzIHNwYWNlLCBhcyB0aGlzCisgICUgaXMgdXNlZCBvbmx5IGluIGVudmlyb25tZW50cyBsaWtlIEBleGFtcGxlLCB3aGVyZSBlYWNoIGxpbmUgb2YgaW5wdXQKKyAgJSBzaG91bGQgcHJvZHVjZSBhIGxpbmUgb2Ygb3V0cHV0IGFueXdheS4KKyAgJQorICBcZ2RlZlxzZXBzcGFjZXN7XG9iZXlzcGFjZXNcbGV0ID1cdGllfQorCisgICUgSWYgYW4gaW5kZXggY29tbWFuZCBpcyB1c2VkIGluIGFuIEBleGFtcGxlIGVudmlyb25tZW50LCBhbnkgc3BhY2VzCisgICUgdGhlcmVpbiBzaG91bGQgYmVjb21lIHJlZ3VsYXIgc3BhY2VzIGluIHRoZSByYXcgaW5kZXggZmlsZSwgbm90IHRoZQorICAlIGV4cGFuc2lvbiBvZiBcdGllIChcbGVhdmV2bW9kZSBccGVuYWx0eSBcQE0gXCApLgorICBcZ2RlZlx1bnNlcHNwYWNlc3tcbGV0ID1cc3BhY2V9Cit9CisKKworXGRlZlxmbHVzaGNye1xpZnhccGFyXGxpc3BwYXIgXGRlZlxuZXh0IyMxe31cZWxzZSBcbGV0XG5leHQ9XHJlbGF4IFxmaSBcbmV4dH0KKworJSBEZWZpbmUgdGhlIGZyYW1ld29yayBmb3IgZW52aXJvbm1lbnRzIGluIHRleGluZm8udGV4LiAgSXQncyB1c2VkIGxpa2UgdGhpczoKKyUKKyUgICBcZW52ZGVmXGZvb3suLi59CislICAgXGRlZlxFZm9vey4uLn0KKyUKKyUgSXQncyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgXGVudmRlZiB0byBpbnNlcnQgXGJlZ2luZ3JvdXAgYmVmb3JlIHRoZQorJSBhY3R1YWwgYm9keTsgQGVuZCBjbG9zZXMgdGhlIGdyb3VwIGFmdGVyIGNhbGxpbmcgXEVmb28uICBcZW52ZGVmIGFsc28KKyUgZGVmaW5lcyBcdGhpc2Vudiwgc28gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMga25vd247IEBlbmQgY2hlY2tzCislIHdoZXRoZXIgdGhlIGVudmlyb25tZW50IG5hbWUgbWF0Y2hlcy4gIFRoZSBcY2hlY2tlbnYgbWFjcm8gY2FuIGFsc28gYmUKKyUgdXNlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGlzIHRoZSBvbmUgZXhwZWN0ZWQuCislCislIE5vbi1mYWxzZSBjb25kaXRpb25hbHMgKEBpZnRleCwgQGlmc2V0KSBkb24ndCBmaXQgaW50byB0aGlzLCBzbyB0aGV5CislIGFyZSBub3QgdHJlYXRlZCBhcyBlbnZpcm9ubWVudHM7IHRoZXkgZG9uJ3Qgb3BlbiBhIGdyb3VwLiAgKFRoZQorJSBpbXBsZW1lbnRhdGlvbiBvZiBAZW5kIHRha2VzIGNhcmUgbm90IHRvIGNhbGwgXGVuZGdyb3VwIGluIHRoaXMKKyUgc3BlY2lhbCBjYXNlLikKKworCislIEF0IHJ1bi10aW1lLCBlbnZpcm9ubWVudHMgc3RhcnQgd2l0aCB0aGlzOgorXGRlZlxzdGFydGVudmlyb25tZW50IzF7XGJlZ2luZ3JvdXBcZGVmXHRoaXNlbnZ7IzF9fQorJSBpbml0aWFsaXplCitcbGV0XHRoaXNlbnZcZW1wdHkKKworJSAuLi4gYnV0IHRoZXkgZ2V0IGRlZmluZWQgdmlhIGBgXGVudmRlZlxmb297Li4ufScnOgorXGxvbmdcZGVmXGVudmRlZiMxIzJ7XGRlZiMxe1xzdGFydGVudmlyb25tZW50IzEjMn19CitcZGVmXGVudnBhcnNlYXJnZGVmIzEjMntccGFyc2VhcmdkZWYjMXtcc3RhcnRlbnZpcm9ubWVudCMxIzJ9fQorCislIENoZWNrIHdoZXRoZXIgd2UncmUgaW4gdGhlIHJpZ2h0IGVudmlyb25tZW50OgorXGRlZlxjaGVja2VudiMxeyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0aGlzZW52XHRlbXAKKyAgXGVsc2UKKyAgICBcYmFkZW52ZXJyCisgIFxmaQorfQorCislIEVudmlyb25tZW50IG1pc21hdGNoLCAjMSBleHBlY3RlZDoKK1xkZWZcYmFkZW52ZXJyeyUKKyAgXGVycmhlbHAgPSBcRU1zaW1wbGUKKyAgXGVycm1lc3NhZ2V7VGhpcyBjb21tYW5kIGNhbiBhcHBlYXIgb25seSBcaW5lbnZpcm9ubWVudFx0ZW1wLAorICAgIG5vdCBcaW5lbnZpcm9ubWVudFx0aGlzZW52fSUKK30KK1xkZWZcaW5lbnZpcm9ubWVudCMxeyUKKyAgXGlmeCMxXGVtcHR5CisgICAgb3V0IG9mIGFueSBlbnZpcm9ubWVudCUKKyAgXGVsc2UKKyAgICBpbiBlbnZpcm9ubWVudCBcZXhwYW5kYWZ0ZXJcc3RyaW5nIzElCisgIFxmaQorfQorCislIEBlbmQgZm9vIGV4ZWN1dGVzIHRoZSBkZWZpbml0aW9uIG9mIFxFZm9vLgorJSBCdXQgZmlyc3QsIGl0IGV4ZWN1dGVzIGEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBcY2hlY2tlbnYKKyUKK1xwYXJzZWFyZ2RlZlxlbmR7JQorICBcaWYgMVxjc25hbWUgaXNjb25kLiMxXGVuZGNzbmFtZQorICBcZWxzZQorICAgICUgVGhlIGdlbmVyYWwgd29yZGluZyBvZiBcYmFkZW52ZXJyIG1heSBub3QgYmUgaWRlYWwsIGJ1dC4uLiAtLWthc2FsLCAwNm5vdjAzCisgICAgXGV4cGFuZGFmdGVyXGNoZWNrZW52XGNzbmFtZSMxXGVuZGNzbmFtZQorICAgIFxjc25hbWUgRSMxXGVuZGNzbmFtZQorICAgIFxlbmRncm91cAorICBcZmkKK30KKworXG5ld2hlbHBcRU1zaW1wbGV7UHJlc3MgUkVUVVJOIHRvIGNvbnRpbnVlLn0KKworCislJSBTaW1wbGUgc2luZ2xlLWNoYXJhY3RlciBAIGNvbW1hbmRzCisKKyUgQEAgcHJpbnRzIGFuIEAKKyUgS2x1ZGdlIHRoaXMgdW50aWwgdGhlIGZvbnRzIGFyZSByaWdodCAoZ3JyKS4KK1xkZWZcQHt7XHR0XGNoYXI2NH19CisKKyUgVGhpcyBpcyB0dXJuZWQgb2ZmIGJlY2F1c2UgaXQgd2FzIG5ldmVyIGRvY3VtZW50ZWQKKyUgYW5kIHlvdSBjYW4gdXNlIEB3ey4uLn0gYXJvdW5kIGEgcXVvdGUgdG8gc3VwcHJlc3MgbGlnYXR1cmVzLgorJSUgRGVmaW5lIEBgIGFuZCBAJyB0byBiZSB0aGUgc2FtZSBhcyBgIGFuZCAnCislJSBidXQgc3VwcHJlc3NpbmcgbGlnYXR1cmVzLgorJVxkZWZcYHt7YH19CislXGRlZlwne3snfX0KKworJSBVc2VkIHRvIGdlbmVyYXRlIHF1b3RlZCBicmFjZXMuCitcZGVmXG15bGJyYWNlIHt7XHR0XGNoYXIxMjN9fQorXGRlZlxteXJicmFjZSB7e1x0dFxjaGFyMTI1fX0KK1xsZXRcez1cbXlsYnJhY2UKK1xsZXRcfT1cbXlyYnJhY2UKK1xiZWdpbmdyb3VwCisgICUgRGVmaW5pdGlvbnMgdG8gcHJvZHVjZSBceyBhbmQgXH0gY29tbWFuZHMgZm9yIGluZGljZXMsCisgICUgYW5kIEB7IGFuZCBAfSBmb3IgdGhlIGF1eC90b2MgZmlsZXMuCisgIFxjYXRjb2RlYFx7ID0gXG90aGVyIFxjYXRjb2RlYFx9ID0gXG90aGVyCisgIFxjYXRjb2RlYFxbID0gMSBcY2F0Y29kZWBcXSA9IDIKKyAgXGNhdGNvZGVgXCEgPSAwIFxjYXRjb2RlYFxcID0gXG90aGVyCisgICFnZGVmIWxicmFjZWNtZFtce10lCisgICFnZGVmIXJicmFjZWNtZFtcfV0lCisgICFnZGVmIWxicmFjZWF0Y21kW0B7XSUKKyAgIWdkZWYhcmJyYWNlYXRjbWRbQH1dJQorIWVuZGdyb3VwCisKKyUgQGNvbW1he30gdG8gYXZvaWQgLCBwYXJzaW5nIHByb2JsZW1zLgorXGxldFxjb21tYSA9ICwKKworJSBBY2NlbnRzOiBALCBAZG90YWNjZW50IEByaW5nYWNjZW50IEB1YmFyYWNjZW50IEB1ZG90YWNjZW50CislIE90aGVycyBhcmUgZGVmaW5lZCBieSBwbGFpbiBUZVg6IEBgIEAnIEAiIEBeIEB+IEA9IEB1IEB2IEBILgorXGxldFwsID0gXGMKK1xsZXRcZG90YWNjZW50ID0gXC4KK1xkZWZccmluZ2FjY2VudCMxe3tcYWNjZW50MjMgIzF9fQorXGxldFx0aWVhY2NlbnQgPSBcdAorXGxldFx1YmFyYWNjZW50ID0gXGIKK1xsZXRcdWRvdGFjY2VudCA9IFxkCisKKyUgT3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzOiBAcXVlc3Rpb25kb3duIEBleGNsYW1kb3duIEBvcmRmIEBvcmRtCislIFBsYWluIFRlWCBkZWZpbmVzOiBAQUEgQEFFIEBPIEBPRSBATCAocGx1cyBsb3dlcmNhc2UgdmVyc2lvbnMpIEBzcy4KK1xkZWZccXVlc3Rpb25kb3duez9gfQorXGRlZlxleGNsYW1kb3dueyFgfQorXGRlZlxvcmRme1xsZWF2ZXZtb2RlXHJhaXNlMWV4XGhib3h7XHNlbGVjdGZvbnRzXGxsbHNpemUgXHVuZGVyYmFye2F9fX0KK1xkZWZcb3JkbXtcbGVhdmV2bW9kZVxyYWlzZTFleFxoYm94e1xzZWxlY3Rmb250c1xsbGxzaXplIFx1bmRlcmJhcntvfX19CisKKyUgRG90bGVzcyBpIGFuZCBkb3RsZXNzIGosIHVzZWQgZm9yIGFjY2VudHMuCitcZGVmXGltYWNyb3tpfQorXGRlZlxqbWFjcm97an0KK1xkZWZcZG90bGVzcyMxeyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXGltYWNybyBcaWZtbW9kZVxpbWF0aCBcZWxzZVxwdGV4aSBcZmkKKyAgXGVsc2VcaWZ4XHRlbXBcam1hY3JvIFxpZm1tb2RlXGptYXRoIFxlbHNlXGogXGZpCisgIFxlbHNlIFxlcnJtZXNzYWdle0Bkb3RsZXNzIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCBpIG9yIGp9JQorICBcZmlcZmkKK30KKworJSBUaGUgXFRlWHt9IGxvZ28sIGFzIGluIHBsYWluLCBidXQgcmVzZXR0aW5nIHRoZSBzcGFjaW5nIHNvIHRoYXQgYQorJSBwZXJpb2QgZm9sbG93aW5nIGNvdW50cyBhcyBlbmRpbmcgYSBzZW50ZW5jZS4gIChJZGVhIGZvdW5kIGluIGxhdGV4LikKKyUKK1xlZGVmXFRlWHtcVGVYIFxzcGFjZWZhY3Rvcj0xMDAwIH0KKworJSBATGFUZVh7fSBsb2dvLiAgTm90IHF1aXRlIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIGRlZmluaXRpb24gaW4KKyUgbGF0ZXgubHR4LCBzaW5jZSB3ZSB1c2UgYSBkaWZmZXJlbnQgZm9udCBmb3IgdGhlIHJhaXNlZCBBOyBpdCdzIG1vc3QKKyUgY29udmVuaWVudCBmb3IgdXMgdG8gdXNlIGFuIGV4cGxpY2l0bHkgc21hbGxlciBmb250LCByYXRoZXIgdGhhbiB1c2luZworJSB0aGUgXHNjcmlwdHN0eWxlIGZvbnQgKHNpbmNlIHdlIGRvbid0IHJlc2V0IFxzY3JpcHRzdHlsZSBhbmQKKyUgXHNjcmlwdHNjcmlwdHN0eWxlKS4KKyUKK1xkZWZcTGFUZVh7JQorICBMXGtlcm4tLjM2ZW0KKyAge1xzZXRib3gwPVxoYm94e1R9JQorICAgXHZib3ggdG8gXGh0MHtcaGJveHtcc2VsZWN0Zm9udHNcbGxsc2l6ZSBBfVx2c3N9fSUKKyAgXGtlcm4tLjE1ZW0KKyAgXFRlWAorfQorCislIEJlIHN1cmUgd2UncmUgaW4gaG9yaXpvbnRhbCBtb2RlIHdoZW4gZG9pbmcgYSB0aWUsIHNpbmNlIHdlIG1ha2Ugc3BhY2UKKyUgZXF1aXZhbGVudCB0byB0aGlzIGluIEBleGFtcGxlLWxpa2UgZW52aXJvbm1lbnRzLiBPdGhlcndpc2UsIGEgc3BhY2UKKyUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgd2lsbCBzdGFydCB3aXRoIFxwZW5hbHR5IC0tIGFuZAorJSBzaW5jZSBccGVuYWx0eSBpcyB2YWxpZCBpbiB2ZXJ0aWNhbCBtb2RlLCB3ZSdkIGVuZCB1cCBwdXR0aW5nIHRoZQorJSBwZW5hbHR5IG9uIHRoZSB2ZXJ0aWNhbCBsaXN0IGluc3RlYWQgb2YgaW4gdGhlIG5ldyBwYXJhZ3JhcGguCit7XGNhdGNvZGVgQCA9IDExCisgJSBBdm9pZCB1c2luZyBcQE0gZGlyZWN0bHksIGJlY2F1c2UgdGhhdCBjYXVzZXMgdHJvdWJsZQorICUgaWYgdGhlIGRlZmluaXRpb24gaXMgd3JpdHRlbiBpbnRvIGFuIGluZGV4IGZpbGUuCisgXGdsb2JhbFxsZXRcdGllcGVuYWx0eSA9IFxATQorIFxnZGVmXHRpZXtcbGVhdmV2bW9kZVxwZW5hbHR5XHRpZXBlbmFsdHlcIH0KK30KKworJSBAOiBmb3JjZXMgbm9ybWFsIHNpemUgd2hpdGVzcGFjZSBmb2xsb3dpbmcuCitcZGVmXDp7XHNwYWNlZmFjdG9yPTEwMDAgfQorCislIEAqIGZvcmNlcyBhIGxpbmUgYnJlYWsuCitcZGVmXCp7XGhmaWxcYnJlYWtcaGJveHt9XGlnbm9yZXNwYWNlc30KKworJSBALyBhbGxvd3MgYSBsaW5lIGJyZWFrLgorXGxldFwvPVxhbGxvd2JyZWFrCisKKyUgQC4gaXMgYW4gZW5kLW9mLXNlbnRlbmNlIHBlcmlvZC4KK1xkZWZcLnsuXHNwYWNlZmFjdG9yPVxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3Jcc3BhY2V9CisKKyUgQCEgaXMgYW4gZW5kLW9mLXNlbnRlbmNlIGJhbmcuCitcZGVmXCF7IVxzcGFjZWZhY3Rvcj1cZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yXHNwYWNlfQorCislIEA/IGlzIGFuIGVuZC1vZi1zZW50ZW5jZSBxdWVyeS4KK1xkZWZcP3s/XHNwYWNlZmFjdG9yPVxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3Jcc3BhY2V9CisKKyUgQGZyZW5jaHNwYWNpbmcgb258b2ZmICBzYXlzIHdoZXRoZXIgdG8gcHV0IGV4dHJhIHNwYWNlIGFmdGVyIHB1bmN0dWF0aW9uLgorJQorXGRlZlxvbndvcmR7b259CitcZGVmXG9mZndvcmR7b2ZmfQorJQorXHBhcnNlYXJnZGVmXGZyZW5jaHNwYWNpbmd7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcb253b3JkIFxwbGFpbmZyZW5jaHNwYWNpbmcKKyAgXGVsc2VcaWZ4XHRlbXBcb2Zmd29yZCBccGxhaW5ub25mcmVuY2hzcGFjaW5nCisgIFxlbHNlCisgICAgXGVycmhlbHAgPSBcRU1zaW1wbGUKKyAgICBcZXJybWVzc2FnZXtVbmtub3duIEBmcmVuY2hzcGFjaW5nIG9wdGlvbiBgXHRlbXAnLCBtdXN0IGJlIG9uL29mZn0lCisgIFxmaVxmaQorfQorCislIEB3IHByZXZlbnRzIGEgd29yZCBicmVhay4gIFdpdGhvdXQgdGhlIFxsZWF2ZXZtb2RlLCBAdyBhdCB0aGUKKyUgYmVnaW5uaW5nIG9mIGEgcGFyYWdyYXBoLCB3aGVuIFRlWCBpcyBzdGlsbCBpbiB2ZXJ0aWNhbCBtb2RlLCB3b3VsZAorJSBwcm9kdWNlIGEgd2hvbGUgbGluZSBvZiBvdXRwdXQgaW5zdGVhZCBvZiBzdGFydGluZyB0aGUgcGFyYWdyYXBoLgorXGRlZlx3IzF7XGxlYXZldm1vZGVcaGJveHsjMX19CisKKyUgQGdyb3VwIC4uLiBAZW5kIGdyb3VwIGZvcmNlcyAuLi4gdG8gYmUgYWxsIG9uIG9uZSBwYWdlLCBieSBlbmNsb3NpbmcKKyUgaXQgaW4gYSBUZVggdmJveC4gIFdlIHVzZSBcdnRvcCBpbnN0ZWFkIG9mIFx2Ym94IHRvIGNvbnN0cnVjdCB0aGUgYm94CislIHRvIGtlZXAgaXRzIGhlaWdodCB0aGF0IG9mIGEgbm9ybWFsIGxpbmUuICBBY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvcgorJSBcdG9wc2tpcCAocC4xMTQgb2YgdGhlIFRlWGJvb2spLCB0aGUgZ2x1ZSBpbnNlcnRlZCBpcworJSBtYXggKFx0b3Bza2lwIC0gXGh0IChmaXJzdCBpdGVtKSwgMCkuICBJZiB0aGF0IGhlaWdodCBpcyBsYXJnZSwKKyUgdGhlcmVmb3JlLCBubyBnbHVlIGlzIGluc2VydGVkLCBhbmQgdGhlIHNwYWNlIGJldHdlZW4gdGhlIGhlYWRsaW5lIGFuZAorJSB0aGUgdGV4dCBpcyBzbWFsbCwgd2hpY2ggbG9va3MgYmFkLgorJQorJSBBbm90aGVyIGNvbXBsaWNhdGlvbiBpcyB0aGF0IHRoZSBncm91cCBtaWdodCBiZSB2ZXJ5IGxhcmdlLiAgVGhpcyBjYW4KKyUgY2F1c2UgdGhlIGdsdWUgb24gdGhlIHByZXZpb3VzIHBhZ2UgdG8gYmUgdW5kdWx5IHN0cmV0Y2hlZCwgYmVjYXVzZSBpdAorJSBkb2VzIG5vdCBoYXZlIG11Y2ggbWF0ZXJpYWwuICBJbiB0aGlzIGNhc2UsIGl0J3MgYmV0dGVyIHRvIGFkZCBhbgorJSBleHBsaWNpdCBcdmZpbGwgc28gdGhhdCB0aGUgZXh0cmEgc3BhY2UgaXMgYXQgdGhlIGJvdHRvbS4gIFRoZQorJSB0aHJlc2hvbGQgZm9yIGRvaW5nIHRoaXMgaXMgaWYgdGhlIGdyb3VwIGlzIG1vcmUgdGhhbiBcdmZpbGxsaW1pdAorJSBwZXJjZW50IG9mIGEgcGFnZSAoXHZmaWxsbGltaXQgY2FuIGJlIGNoYW5nZWQgaW5zaWRlIG9mIEB0ZXgpLgorJQorXG5ld2JveFxncm91cGJveAorXGRlZlx2ZmlsbGxpbWl0ezAuN30KKyUKK1xlbnZkZWZcZ3JvdXB7JQorICBcaWZudW1cY2F0Y29kZWBcXl5NPVxhY3RpdmUgXGVsc2UKKyAgICBcZXJyaGVscCA9IFxncm91cGludmFsaWRoZWxwCisgICAgXGVycm1lc3NhZ2V7QGdyb3VwIGludmFsaWQgaW4gY29udGV4dCB3aGVyZSBmaWxsaW5nIGlzIGVuYWJsZWR9JQorICBcZmkKKyAgXHN0YXJ0c2F2aW5naW5zZXJ0cworICAlCisgIFxzZXRib3hcZ3JvdXBib3ggPSBcdnRvcFxiZ3JvdXAKKyAgICAlIERvIEBjb21tZW50IHNpbmNlIHdlIGFyZSBjYWxsZWQgaW5zaWRlIGFuIGVudmlyb25tZW50IHN1Y2ggYXMKKyAgICAlIEBleGFtcGxlLCB3aGVyZSBlYWNoIGVuZC1vZi1saW5lIGluIHRoZSBpbnB1dCBjYXVzZXMgYW4KKyAgICAlIGVuZC1vZi1saW5lIGluIHRoZSBvdXRwdXQuICBXZSBkb24ndCB3YW50IHRoZSBlbmQtb2YtbGluZSBhZnRlcgorICAgICUgdGhlIGBAZ3JvdXAnIHRvIHB1dCBleHRyYSBzcGFjZSBpbiB0aGUgb3V0cHV0LiAgU2luY2UgQGdyb3VwCisgICAgJSBzaG91bGQgYXBwZWFyIG9uIGEgbGluZSBieSBpdHNlbGYgKGFjY29yZGluZyB0byB0aGUgVGV4aW5mbworICAgICUgbWFudWFsKSwgd2UgZG9uJ3Qgd29ycnkgYWJvdXQgZWF0aW5nIGFueSB1c2VyIHRleHQuCisgICAgXGNvbW1lbnQKK30KKyUKKyUgVGhlIFx2dG9wIHByb2R1Y2VzIGEgYm94IHdpdGggbm9ybWFsIGhlaWdodCBhbmQgbGFyZ2UgZGVwdGg7IHRodXMsIFRlWCBwdXRzCislIFxiYXNlbGluZXNraXAgZ2x1ZSBiZWZvcmUgaXQsIGFuZCAod2hlbiB0aGUgbmV4dCBsaW5lIG9mIHRleHQgaXMgZG9uZSkKKyUgXGxpbmVza2lwIGdsdWUgYWZ0ZXIgaXQuICBUaHVzLCBzcGFjZSBiZWxvdyBpcyBub3QgcXVpdGUgZXF1YWwgdG8gc3BhY2UKKyUgYWJvdmUuICBCdXQgaXQncyBwcmV0dHkgY2xvc2UuCitcZGVmXEVncm91cHslCisgICAgJSBUbyBnZXQgY29ycmVjdCBpbnRlcmxpbmUgc3BhY2UgYmV0d2VlbiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBncm91cAorICAgICUgYW5kIHRoZSBmaXJzdCBsaW5lIGFmdGVyd2FyZHMsIHdlIGhhdmUgdG8gcHJvcGFnYXRlIFxwcmV2ZGVwdGguCisgICAgXGVuZGdyYWYgJSBOb3QgXHBhciwgYXMgaXQgbWF5IGhhdmUgYmVlbiBzZXQgdG8gXGxpc3BwYXIuCisgICAgXGdsb2JhbFxkaW1lbjEgPSBccHJldmRlcHRoCisgIFxlZ3JvdXAgICAgICAgICAgICUgRW5kIHRoZSBcdnRvcC4KKyAgJSBcZGltZW4wIGlzIHRoZSB2ZXJ0aWNhbCBzaXplIG9mIHRoZSBncm91cCdzIGJveC4KKyAgXGRpbWVuMCA9IFxodFxncm91cGJveCAgXGFkdmFuY2VcZGltZW4wIGJ5IFxkcFxncm91cGJveAorICAlIFxkaW1lbjIgaXMgaG93IG11Y2ggc3BhY2UgaXMgbGVmdCBvbiB0aGUgcGFnZSAobW9yZSBvciBsZXNzKS4KKyAgXGRpbWVuMiA9IFxwYWdlaGVpZ2h0ICAgXGFkdmFuY2VcZGltZW4yIGJ5IC1ccGFnZXRvdGFsCisgICUgaWYgdGhlIGdyb3VwIGRvZXNuJ3QgZml0IG9uIHRoZSBjdXJyZW50IHBhZ2UsIGFuZCBpdCdzIGEgYmlnIGJpZworICAlIGdyb3VwLCBmb3JjZSBhIHBhZ2UgYnJlYWsuCisgIFxpZmRpbSBcZGltZW4wID4gXGRpbWVuMgorICAgIFxpZmRpbSBccGFnZXRvdGFsIDwgXHZmaWxsbGltaXRccGFnZWhlaWdodAorICAgICAgXHBhZ2UKKyAgICBcZmkKKyAgXGZpCisgIFxib3hcZ3JvdXBib3gKKyAgXHByZXZkZXB0aCA9IFxkaW1lbjEKKyAgXGNoZWNraW5zZXJ0cworfQorJQorJSBUZVggcHV0cyBpbiBhbiBcZXNjYXBlY2hhciAoaS5lLiwgYEAnKSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBoZWxwCislIG1lc3NhZ2UsIHNvIHRoaXMgZW5kcyB1cCBwcmludGluZyBgQGdyb3VwIGNhbiBvbmx5IC4uLicuCislCitcbmV3aGVscFxncm91cGludmFsaWRoZWxweyUKK2dyb3VwIGNhbiBvbmx5IGJlIHVzZWQgaW4gZW52aXJvbm1lbnRzIHN1Y2ggYXMgQGV4YW1wbGUsXl5KJQord2hlcmUgZWFjaCBsaW5lIG9mIGlucHV0IHByb2R1Y2VzIGEgbGluZSBvZiBvdXRwdXQufQorCislIEBuZWVkIHNwYWNlLWluLW1pbHMKKyUgZm9yY2VzIGEgcGFnZSBicmVhayBpZiB0aGVyZSBpcyBub3Qgc3BhY2UtaW4tbWlscyByZW1haW5pbmcuCisKK1xuZXdkaW1lblxtaWwgIFxtaWw9MC4wMDFpbgorCislIE9sZCBkZWZpbml0aW9uLS1kaWRuJ3Qgd29yay4KKyVccGFyc2VhcmdkZWZcbmVlZHtccGFyICUKKyUlIFRoaXMgbWV0aG9kIHRyaWVzIHRvIG1ha2UgVGVYIGJyZWFrIHRoZSBwYWdlIG5hdHVyYWxseQorJSUgaWYgdGhlIGRlcHRoIG9mIHRoZSBib3ggZG9lcyBub3QgZml0LgorJXtcYmFzZWxpbmVza2lwPTBwdCUKKyVcdnRvcCB0byAjMVxtaWx7XHZmaWx9XGtlcm4gLSMxXG1pbFxub2JyZWFrCislXHByZXZkZXB0aD0tMTAwMHB0CislfX0KKworXHBhcnNlYXJnZGVmXG5lZWR7JQorICAlIEVuc3VyZSB2ZXJ0aWNhbCBtb2RlLCBzbyB3ZSBkb24ndCBtYWtlIGEgYmlnIGJveCBpbiB0aGUgbWlkZGxlIG9mIGEKKyAgJSBwYXJhZ3JhcGguCisgIFxwYXIKKyAgJQorICAlIElmIHRoZSBAbmVlZCB2YWx1ZSBpcyBsZXNzIHRoYW4gb25lIGxpbmUgc3BhY2UsIGl0J3MgdXNlbGVzcy4KKyAgXGRpbWVuMCA9ICMxXG1pbAorICBcZGltZW4yID0gXGh0XHN0cnV0Ym94CisgIFxhZHZhbmNlXGRpbWVuMiBieSBcZHBcc3RydXRib3gKKyAgXGlmZGltXGRpbWVuMCA+IFxkaW1lbjIKKyAgICAlCisgICAgJSBEbyBhIFxzdHJ1dCBqdXN0IHRvIG1ha2UgdGhlIGhlaWdodCBvZiB0aGlzIGJveCBiZSBub3JtYWwsIHNvIHRoZQorICAgICUgbm9ybWFsIGxlYWRpbmcgaXMgaW5zZXJ0ZWQgcmVsYXRpdmUgdG8gdGhlIHByZWNlZGluZyBsaW5lLgorICAgICUgQW5kIGEgcGFnZSBicmVhayBoZXJlIGlzIGZpbmUuCisgICAgXHZ0b3AgdG8gIzFcbWlse1xzdHJ1dFx2ZmlsfSUKKyAgICAlCisgICAgJSBUZVggZG9lcyBub3QgZXZlbiBjb25zaWRlciBwYWdlIGJyZWFrcyBpZiBhIHBlbmFsdHkgYWRkZWQgdG8gdGhlCisgICAgJSBtYWluIHZlcnRpY2FsIGxpc3QgaXMgMTAwMDAgb3IgbW9yZS4gIEJ1dCBpbiBvcmRlciB0byBzZWUgaWYgdGhlCisgICAgJSBlbXB0eSBib3ggd2UganVzdCBhZGRlZCBmaXRzIG9uIHRoZSBwYWdlLCB3ZSBtdXN0IG1ha2UgaXQgY29uc2lkZXIKKyAgICAlIHBhZ2UgYnJlYWtzLiAgT24gdGhlIG90aGVyIGhhbmQsIHdlIGRvbid0IHdhbnQgdG8gYWN0dWFsbHkgYnJlYWsgdGhlCisgICAgJSBwYWdlIGFmdGVyIHRoZSBlbXB0eSBib3guICBTbyB3ZSB1c2UgYSBwZW5hbHR5IG9mIDk5OTkuCisgICAgJQorICAgICUgVGhlcmUgaXMgYW4gZXh0cmVtZWx5IHNtYWxsIGNoYW5jZSB0aGF0IFRlWCB3aWxsIGFjdHVhbGx5IGJyZWFrIHRoZQorICAgICUgcGFnZSBhdCB0aGlzIFxwZW5hbHR5LCBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgZmVhc2libGUgYnJlYWtwb2ludHMgaW4KKyAgICAlIHNpZ2h0LiAgKElmIHRoZSB1c2VyIGlzIHVzaW5nIGxvdHMgb2YgYmlnIEBncm91cCBjb21tYW5kcywgd2hpY2gKKyAgICAlIGFsbW9zdC1idXQtbm90LXF1aXRlIGZpbGwgdXAgYSBwYWdlLCBUZVggd2lsbCBoYXZlIGEgaGFyZCB0aW1lIGRvaW5nCisgICAgJSBnb29kIHBhZ2UgYnJlYWtpbmcsIGZvciBleGFtcGxlLikgIEhvd2V2ZXIsIEkgY291bGQgbm90IGNvbnN0cnVjdCBhbgorICAgICUgZXhhbXBsZSB3aGVyZSBhIHBhZ2UgYnJva2UgYXQgdGhpcyBccGVuYWx0eTsgaWYgaXQgaGFwcGVucyBpbiBhIHJlYWwKKyAgICAlIGRvY3VtZW50LCB0aGVuIHdlIGNhbiByZWNvbnNpZGVyIG91ciBzdHJhdGVneS4KKyAgICBccGVuYWx0eTk5OTkKKyAgICAlCisgICAgJSBCYWNrIHVwIGJ5IHRoZSBzaXplIG9mIHRoZSBib3gsIHdoZXRoZXIgd2UgZGlkIGEgcGFnZSBicmVhayBvciBub3QuCisgICAgXGtlcm4gLSMxXG1pbAorICAgICUKKyAgICAlIERvIG5vdCBhbGxvdyBhIHBhZ2UgYnJlYWsgcmlnaHQgYWZ0ZXIgdGhpcyBrZXJuLgorICAgIFxub2JyZWFrCisgIFxmaQorfQorCislIEBiciAgIGZvcmNlcyBwYXJhZ3JhcGggYnJlYWsgKGFuZCBpcyB1bmRvY3VtZW50ZWQpLgorCitcbGV0XGJyID0gXHBhcgorCislIEBwYWdlIGZvcmNlcyB0aGUgc3RhcnQgb2YgYSBuZXcgcGFnZS4KKyUKK1xkZWZccGFnZXtccGFyXHZmaWxsXHN1cGVyZWplY3R9CisKKyUgQGV4ZGVudCB0ZXh0Li4uLgorJSBvdXRwdXRzIHRleHQgb24gc2VwYXJhdGUgbGluZSBpbiByb21hbiBmb250LCBzdGFydGluZyBhdCBzdGFuZGFyZCBwYWdlIG1hcmdpbgorCislIFRoaXMgcmVjb3JkcyB0aGUgYW1vdW50IG9mIGluZGVudCBpbiB0aGUgaW5uZXJtb3N0IGVudmlyb25tZW50LgorJSBUaGF0J3MgaG93IG11Y2ggXGV4ZGVudCBzaG91bGQgdGFrZSBvdXQuCitcbmV3c2tpcFxleGRlbnRhbW91bnQKKworJSBUaGlzIGRlZm4gaXMgdXNlZCBpbnNpZGUgZmlsbCBlbnZpcm9ubWVudHMgc3VjaCBhcyBAZGVmdW4uCitccGFyc2VhcmdkZWZcZXhkZW50e1xoZmlsXGJyZWFrXGhib3h7XGtlcm4gLVxleGRlbnRhbW91bnR7XHJtIzF9fVxoZmlsXGJyZWFrfQorCislIFRoaXMgZGVmbiBpcyB1c2VkIGluc2lkZSBub2ZpbGwgZW52aXJvbm1lbnRzIHN1Y2ggYXMgQGV4YW1wbGUuCitccGFyc2VhcmdkZWZcbm9maWxsZXhkZW50e3tcYWR2YW5jZSBcbGVmdHNraXAgYnkgLVxleGRlbnRhbW91bnQKKyAgXGxlZnRsaW5le1xoc2tpcFxsZWZ0c2tpcHtccm0jMX19fX0KKworJSBAaW5tYXJnaW57V0hJQ0h9e1RFWFR9IHB1dHMgVEVYVCBpbiB0aGUgV0hJQ0ggbWFyZ2luIG5leHQgdG8gdGhlIGN1cnJlbnQKKyUgcGFyYWdyYXBoLiAgRm9yIG1vcmUgZ2VuZXJhbCBwdXJwb3NlcywgdXNlIHRoZSBcbWFyZ2luIGluc2VydGlvbgorJSBjbGFzcy4gIFdISUNIIGlzIGBsJyBvciBgcicuCislCitcbmV3c2tpcFxpbm1hcmdpbnNwYWNpbmcgXGlubWFyZ2luc3BhY2luZz0xY20KK1xkZWZcc3RydXRkZXB0aHtcZHBcc3RydXRib3h9CislCitcZGVmXGRvaW5tYXJnaW4jMSMye1xzdHJ1dFx2YWRqdXN0eyUKKyAgXG5vYnJlYWsKKyAgXGtlcm4tXHN0cnV0ZGVwdGgKKyAgXHZ0b3AgdG8gXHN0cnV0ZGVwdGh7JQorICAgIFxiYXNlbGluZXNraXA9XHN0cnV0ZGVwdGgKKyAgICBcdnNzCisgICAgJSBpZiB5b3UgaGF2ZSBtdWx0aXBsZSBsaW5lcyBvZiBzdHVmZiB0byBwdXQgaGVyZSwgeW91J2xsIG5lZWQgdG8KKyAgICAlIG1ha2UgdGhlIHZib3ggeW91cnNlbGYgb2YgdGhlIGFwcHJvcHJpYXRlIHNpemUuCisgICAgXGlmeCMxbCUKKyAgICAgIFxsbGFwe1xpZ25vcmVzcGFjZXMgIzJcaHNraXBcaW5tYXJnaW5zcGFjaW5nfSUKKyAgICBcZWxzZQorICAgICAgXHJsYXB7XGhza2lwXGhzaXplIFxoc2tpcFxpbm1hcmdpbnNwYWNpbmcgXGlnbm9yZXNwYWNlcyAjMn0lCisgICAgXGZpCisgICAgXG51bGwKKyAgfSUKK319CitcZGVmXGlubGVmdG1hcmdpbntcZG9pbm1hcmdpbiBsfQorXGRlZlxpbnJpZ2h0bWFyZ2lue1xkb2lubWFyZ2luIHJ9CislCislIEBpbm1hcmdpbntURVhUIFssIFJJR0hULVRFWFRdfQorJSAoaWYgUklHSFQtVEVYVCBpcyBnaXZlbiwgdXNlIFRFWFQgZm9yIGxlZnQgcGFnZSwgUklHSFQtVEVYVCBmb3IgcmlnaHQ7CislIGVsc2UgdXNlIFRFWFQgZm9yIGJvdGgpLgorJQorXGRlZlxpbm1hcmdpbiMxe1xwYXJzZWlubWFyZ2luICMxLCxcZmluaXNofQorXGRlZlxwYXJzZWlubWFyZ2luIzEsIzIsIzNcZmluaXNoeyUgbm90IHBlcmZlY3QsIGJ1dCBiZXR0ZXIgdGhhbiBub3RoaW5nLgorICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzJ9JQorICBcaWZkaW1cd2QwID4gMHB0CisgICAgXGRlZlxsZWZ0dGV4dHsjMX0lICBoYXZlIGJvdGggdGV4dHMKKyAgICBcZGVmXHJpZ2h0dGV4dHsjMn0lCisgIFxlbHNlCisgICAgXGRlZlxsZWZ0dGV4dHsjMX0lICBoYXZlIG9ubHkgb25lIHRleHQKKyAgICBcZGVmXHJpZ2h0dGV4dHsjMX0lCisgIFxmaQorICAlCisgIFxpZm9kZFxwYWdlbm8KKyAgICBcZGVmXHRlbXB7XGlucmlnaHRtYXJnaW5ccmlnaHR0ZXh0fSUgb2RkIHBhZ2UgLT4gb3V0c2lkZSBpcyByaWdodCBtYXJnaW4KKyAgXGVsc2UKKyAgICBcZGVmXHRlbXB7XGlubGVmdG1hcmdpblxsZWZ0dGV4dH0lCisgIFxmaQorICBcdGVtcAorfQorCislIEBpbmNsdWRlIEZJTEUgLS0gXGlucHV0IHRleHQgb2YgRklMRS4KKyUKK1xkZWZcaW5jbHVkZXtccGFyc2Vhcmd1c2luZ1xmaWxlbmFtZWNhdGNvZGVzXGluY2x1ZGV6enp9CitcZGVmXGluY2x1ZGV6enojMXslCisgIFxwdXNodGhpc2ZpbGVzdGFjaworICBcZGVmXHRoaXNmaWxleyMxfSUKKyAgeyUKKyAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZSAgJSB3ZSB3YW50IHRvIGV4cGFuZCBhbnkgQHZhbHVlIGluIEZJTEUuCisgICAgXHR1cm5vZmZhY3RpdmUgICAgICAgICUgYW5kIGFsbG93IHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgZXhwYW5zaW9uCisgICAgXGluZGV4bm9mb250cyAgICAgICAgICUgQWxsb3cgYEBAJyBhbmQgb3RoZXIgd2VpcmQgdGhpbmdzIGluIGZpbGUgbmFtZXMuCisgICAgXGVkZWZcdGVtcHtcbm9leHBhbmRcaW5wdXQgIzEgfSUKKyAgICAlCisgICAgJSBUaGlzIHRyaWNrZXJ5IGlzIHRvIHJlYWQgRklMRSBvdXRzaWRlIG9mIGEgZ3JvdXAsIGluIGNhc2UgaXQgbWFrZXMKKyAgICAlIGRlZmluaXRpb25zLCBldGMuCisgICAgXGV4cGFuZGFmdGVyCisgIH1cdGVtcAorICBccG9wdGhpc2ZpbGVzdGFjaworfQorXGRlZlxmaWxlbmFtZWNhdGNvZGVzeyUKKyAgXGNhdGNvZGVgXFw9XG90aGVyCisgIFxjYXRjb2RlYH49XG90aGVyCisgIFxjYXRjb2RlYF49XG90aGVyCisgIFxjYXRjb2RlYF89XG90aGVyCisgIFxjYXRjb2RlYHw9XG90aGVyCisgIFxjYXRjb2RlYDw9XG90aGVyCisgIFxjYXRjb2RlYD49XG90aGVyCisgIFxjYXRjb2RlYCs9XG90aGVyCisgIFxjYXRjb2RlYC09XG90aGVyCisgIFxjYXRjb2RlYFxgPVxvdGhlcgorICBcY2F0Y29kZWBcJz1cb3RoZXIKK30KKworXGRlZlxwdXNodGhpc2ZpbGVzdGFja3slCisgIFxleHBhbmRhZnRlclxwdXNodGhpc2ZpbGVzdGFja1hccG9wdGhpc2ZpbGVzdGFja1xTdGFja1Rlcm0KK30KK1xkZWZccHVzaHRoaXNmaWxlc3RhY2tYeyUKKyAgXGV4cGFuZGFmdGVyXHB1c2h0aGlzZmlsZXN0YWNrWVx0aGlzZmlsZVxTdGFja1Rlcm0KK30KK1xkZWZccHVzaHRoaXNmaWxlc3RhY2tZICMxXFN0YWNrVGVybSAjMlxTdGFja1Rlcm0geyUKKyAgXGdkZWZccG9wdGhpc2ZpbGVzdGFja3tcZ2RlZlx0aGlzZmlsZXsjMX1cZ2RlZlxwb3B0aGlzZmlsZXN0YWNreyMyfX0lCit9CisKK1xkZWZccG9wdGhpc2ZpbGVzdGFja3tcZXJydGhpc2ZpbGVzdGFja2VtcHR5fQorXGRlZlxlcnJ0aGlzZmlsZXN0YWNrZW1wdHl7XGVycm1lc3NhZ2V7SW50ZXJuYWwgZXJyb3I6CisgIHRoZSBzdGFjayBvZiBmaWxlbmFtZXMgaXMgZW1wdHkufX0KKworXGRlZlx0aGlzZmlsZXt9CisKKyUgQGNlbnRlciBsaW5lCislIG91dHB1dHMgdGhhdCBsaW5lLCBjZW50ZXJlZC4KKyUKK1xwYXJzZWFyZ2RlZlxjZW50ZXJ7JQorICBcaWZobW9kZQorICAgIFxsZXRcbmV4dFxjZW50ZXJICisgIFxlbHNlCisgICAgXGxldFxuZXh0XGNlbnRlclYKKyAgXGZpCisgIFxuZXh0e1xoZmlsIFxpZ25vcmVzcGFjZXMjMVx1bnNraXAgXGhmaWx9JQorfQorXGRlZlxjZW50ZXJIIzF7JQorICB7JQorICAgIFxoZmlsXGJyZWFrCisgICAgXGFkdmFuY2VcaHNpemUgYnkgLVxsZWZ0c2tpcAorICAgIFxhZHZhbmNlXGhzaXplIGJ5IC1ccmlnaHRza2lwCisgICAgXGxpbmV7IzF9JQorICAgIFxicmVhaworICB9JQorfQorXGRlZlxjZW50ZXJWIzF7XGxpbmV7XGtlcm5cbGVmdHNraXAgIzFca2VyblxyaWdodHNraXB9fQorCislIEBzcCBuICAgb3V0cHV0cyBuIGxpbmVzIG9mIHZlcnRpY2FsIHNwYWNlCisKK1xwYXJzZWFyZ2RlZlxzcHtcdnNraXAgIzFcYmFzZWxpbmVza2lwfQorCislIEBjb21tZW50IC4uLmxpbmUgd2hpY2ggaXMgaWdub3JlZC4uLgorJSBAYyBpcyB0aGUgc2FtZSBhcyBAY29tbWVudAorJSBAaWdub3JlIC4uLiBAZW5kIGlnbm9yZSAgaXMgYW5vdGhlciB3YXkgdG8gd3JpdGUgYSBjb21tZW50CisKK1xkZWZcY29tbWVudHtcYmVnaW5ncm91cCBcY2F0Y29kZWBcXl5NPVxvdGhlciUKK1xjYXRjb2RlYFxAPVxvdGhlciBcY2F0Y29kZWBcez1cb3RoZXIgXGNhdGNvZGVgXH09XG90aGVyJQorXGNvbW1lbnR4eHh9Cit7XGNhdGNvZGVgXF5eTT1cb3RoZXIgXGdkZWZcY29tbWVudHh4eCMxXl5Ne1xlbmRncm91cH19CisKK1xsZXRcYz1cY29tbWVudAorCislIEBwYXJhZ3JhcGhpbmRlbnQgTkNIQVJTCislIFdlJ2xsIHVzZSBlbXMgZm9yIE5DSEFSUywgY2xvc2UgZW5vdWdoLgorJSBOQ0hBUlMgY2FuIGFsc28gYmUgdGhlIHdvcmQgYGFzaXMnIG9yIGBub25lJy4KKyUgV2UgY2Fubm90IGZlYXNpYmx5IGltcGxlbWVudCBAcGFyYWdyYXBoaW5kZW50IGFzaXMsIHRob3VnaC4KKyUKK1xkZWZcYXNpc3dvcmR7YXNpc30gJSBubyB0cmFuc2xhdGlvbiwgdGhlc2UgYXJlIGtleXdvcmRzCitcZGVmXG5vbmV3b3Jke25vbmV9CislCitccGFyc2VhcmdkZWZccGFyYWdyYXBoaW5kZW50eyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXGFzaXN3b3JkCisgIFxlbHNlCisgICAgXGlmeFx0ZW1wXG5vbmV3b3JkCisgICAgICBcZGVmYXVsdHBhcmluZGVudCA9IDBwdAorICAgIFxlbHNlCisgICAgICBcZGVmYXVsdHBhcmluZGVudCA9ICMxZW0KKyAgICBcZmkKKyAgXGZpCisgIFxwYXJpbmRlbnQgPSBcZGVmYXVsdHBhcmluZGVudAorfQorCislIEBleGFtcGxlaW5kZW50IE5DSEFSUworJSBXZSdsbCB1c2UgZW1zIGZvciBOQ0hBUlMgbGlrZSBAcGFyYWdyYXBoaW5kZW50LgorJSBJdCBzZWVtcyBAZXhhbXBsZWluZGVudCBhc2lzIGlzbid0IG5lY2Vzc2FyeSwgYnV0CislIEkgcHJlc2VydmUgaXQgdG8gbWFrZSBpdCBzaW1pbGFyIHRvIEBwYXJhZ3JhcGhpbmRlbnQuCitccGFyc2VhcmdkZWZcZXhhbXBsZWluZGVudHslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxhc2lzd29yZAorICBcZWxzZQorICAgIFxpZnhcdGVtcFxub25ld29yZAorICAgICAgXGxpc3BuYXJyb3dpbmcgPSAwcHQKKyAgICBcZWxzZQorICAgICAgXGxpc3BuYXJyb3dpbmcgPSAjMWVtCisgICAgXGZpCisgIFxmaQorfQorCislIEBmaXJzdHBhcmFncmFwaGluZGVudCBXT1JECislIElmIFdPUkQgaXMgYG5vbmUnLCB0aGVuIHN1cHByZXNzIGluZGVudGF0aW9uIG9mIHRoZSBmaXJzdCBwYXJhZ3JhcGgKKyUgYWZ0ZXIgYSBzZWN0aW9uIGhlYWRpbmcuICBJZiBXT1JEIGlzIGBpbnNlcnQnLCB0aGVuIGRvIGluZGVudCBhdCBzdWNoCislIHBhcmFncmFwaHMuCislCislIFRoZSBwYXJhZ3JhcGggaW5kZW50YXRpb24gaXMgc3VwcHJlc3NlZCBvciBub3QgYnkgY2FsbGluZworJSBcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudCwgd2hpY2ggdGhlIHNlY3Rpb25pbmcgY29tbWFuZHMgZG8uCislIFdlIHN3aXRjaCB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIGJhY2sgYW5kIGZvcnRoIGFjY29yZGluZyB0byBXT1JELgorJSBCeSBkZWZhdWx0LCB3ZSBzdXBwcmVzcyBpbmRlbnRhdGlvbi4KKyUKK1xkZWZcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudHtcZG9zdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50fQorXGRlZlxpbnNlcnR3b3Jke2luc2VydH0KKyUKK1xwYXJzZWFyZ2RlZlxmaXJzdHBhcmFncmFwaGluZGVudHslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxub25ld29yZAorICAgIFxsZXRcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudCA9IFxkb3N1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnQKKyAgXGVsc2VcaWZ4XHRlbXBcaW5zZXJ0d29yZAorICAgIFxsZXRcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudCA9IFxyZWxheAorICBcZWxzZQorICAgIFxlcnJoZWxwID0gXEVNc2ltcGxlCisgICAgXGVycm1lc3NhZ2V7VW5rbm93biBAZmlyc3RwYXJhZ3JhcGhpbmRlbnQgb3B0aW9uIGBcdGVtcCd9JQorICBcZmlcZmkKK30KKworJSBIZXJlIGlzIGhvdyB3ZSBhY3R1YWxseSBzdXBwcmVzcyBpbmRlbnRhdGlvbi4gIFJlZGVmaW5lIFxldmVyeXBhciB0bworJSBca2VybiBiYWNrd2FyZHMgYnkgXHBhcmluZGVudCwgYW5kIHRoZW4gcmVzZXQgaXRzZWxmIHRvIGVtcHR5LgorJQorJSBXZSBhbHNvIG1ha2UgXGluZGVudCBpdHNlbGYgbm90IGFjdHVhbGx5IGRvIGFueXRoaW5nIHVudGlsIHRoZSBuZXh0CislIHBhcmFncmFwaC4KKyUKK1xnZGVmXGRvc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudHslCisgIFxnZGVmXGluZGVudHslCisgICAgXHJlc3RvcmVmaXJzdHBhcmFncmFwaGluZGVudAorICAgIFxpbmRlbnQKKyAgfSUKKyAgXGdkZWZcbm9pbmRlbnR7JQorICAgIFxyZXN0b3JlZmlyc3RwYXJhZ3JhcGhpbmRlbnQKKyAgICBcbm9pbmRlbnQKKyAgfSUKKyAgXGdsb2JhbFxldmVyeXBhciA9IHslCisgICAgXGtlcm4gLVxwYXJpbmRlbnQKKyAgICBccmVzdG9yZWZpcnN0cGFyYWdyYXBoaW5kZW50CisgIH0lCit9CisKK1xnZGVmXHJlc3RvcmVmaXJzdHBhcmFncmFwaGluZGVudHslCisgIFxnbG9iYWwgXGxldCBcaW5kZW50ID0gXHB0ZXhpbmRlbnQKKyAgXGdsb2JhbCBcbGV0IFxub2luZGVudCA9IFxwdGV4bm9pbmRlbnQKKyAgXGdsb2JhbCBcZXZlcnlwYXIgPSB7fSUKK30KKworCislIEBhc2lzIGp1c3QgeWllbGRzIGl0cyBhcmd1bWVudC4gIFVzZWQgd2l0aCBAdGFibGUsIGZvciBleGFtcGxlLgorJQorXGRlZlxhc2lzIzF7IzF9CisKKyUgQG1hdGggb3V0cHV0cyBpdHMgYXJndW1lbnQgaW4gbWF0aCBtb2RlLgorJQorJSBPbmUgY29tcGxpY2F0aW9uOiBfIHVzdWFsbHkgbWVhbnMgc3Vic2NyaXB0cywgYnV0IGl0IGNvdWxkIGFsc28gbWVhbgorJSBhbiBhY3R1YWwgXyBjaGFyYWN0ZXIsIGFzIGluIEBtYXRoe0B2YXJ7c29tZV92YXJpYWJsZX0gKyAxfS4gIFNvIG1ha2UKKyUgXyBhY3RpdmUsIGFuZCBkaXN0aW5ndWlzaCBieSBzZWVpbmcgaWYgdGhlIGN1cnJlbnQgZmFtaWx5IGlzIFxzbGZhbSwKKyUgd2hpY2ggaXMgd2hhdCBAdmFyIHVzZXMuCit7CisgIFxjYXRjb2RlYFxfID0gXGFjdGl2ZQorICBcZ2RlZlxtYXRodW5kZXJzY29yZXslCisgICAgXGNhdGNvZGVgXF89XGFjdGl2ZQorICAgIFxkZWZfe1xpZm51bVxmYW09XHNsZmFtIFxfXGVsc2Vcc2JcZml9JQorICB9Cit9CislIEFub3RoZXIgY29tcGxpY2F0aW9uOiB3ZSB3YW50IFxcIChhbmQgQFwpIHRvIG91dHB1dCBhIFwgY2hhcmFjdGVyLgorJSBGWUksIHBsYWluLnRleCB1c2VzIFxcIGFzIGEgdGVtcG9yYXJ5IGNvbnRyb2wgc2VxdWVuY2UgKHdoeT8pLCBidXQKKyUgdGhpcyBpcyBub3QgYWR2ZXJ0aXNlZCBhbmQgd2UgZG9uJ3QgY2FyZS4gIFRleGluZm8gZG9lcyBub3QKKyUgb3RoZXJ3aXNlIGRlZmluZSBAXC4KKyUKKyUgVGhlIFxtYXRoY2hhciBpcyBjbGFzcz0wPW9yZGluYXJ5LCBmYW1pbHk9Nz10dGZhbSwgcG9zaXRpb249NUM9XC4KK1xkZWZcbWF0aGJhY2tzbGFzaHtcaWZudW1cZmFtPVx0dGZhbSBcbWF0aGNoYXIiMDc1QyBcZWxzZVxiYWNrc2xhc2ggXGZpfQorJQorXGRlZlxtYXRoeyUKKyAgXHRleAorICBcbWF0aHVuZGVyc2NvcmUKKyAgXGxldFxcID0gXG1hdGhiYWNrc2xhc2gKKyAgXG1hdGhhY3RpdmUKKyAgJSBtYWtlIHRoZSB0ZXhpbmZvIGFjY2VudCBjb21tYW5kcyB3b3JrIGluIG1hdGggbW9kZQorICBcbGV0XCI9XGRkb3QKKyAgXGxldFwnPVxhY3V0ZQorICBcbGV0XD09XGJhcgorICBcbGV0XF49XGhhdAorICBcbGV0XGA9XGdyYXZlCisgIFxsZXRcdT1cYnJldmUKKyAgXGxldFx2PVxjaGVjaworICBcbGV0XH49XHRpbGRlCisgIFxsZXRcZG90YWNjZW50PVxkb3QKKyAgJFxmaW5pc2htYXRoCit9CitcZGVmXGZpbmlzaG1hdGgjMXsjMSRcZW5kZ3JvdXB9ICAlIENsb3NlIHRoZSBncm91cCBvcGVuZWQgYnkgXHRleC4KKworJSBTb21lIGFjdGl2ZSBjaGFyYWN0ZXJzIChzdWNoIGFzIDwpIGFyZSBzcGFjZWQgZGlmZmVyZW50bHkgaW4gbWF0aC4KKyUgV2UgaGF2ZSB0byByZXNldCB0aGVpciBkZWZpbml0aW9ucyBpbiBjYXNlIHRoZSBAbWF0aCB3YXMgYW4gYXJndW1lbnQKKyUgdG8gYSBjb21tYW5kIHdoaWNoIHNldHMgdGhlIGNhdGNvZGVzIChzdWNoIGFzIEBpdGVtIG9yIEBzZWN0aW9uKS4KKyUKK3sKKyAgXGNhdGNvZGVgXiA9IFxhY3RpdmUKKyAgXGNhdGNvZGVgPCA9IFxhY3RpdmUKKyAgXGNhdGNvZGVgPiA9IFxhY3RpdmUKKyAgXGNhdGNvZGVgKyA9IFxhY3RpdmUKKyAgXGNhdGNvZGVgJyA9IFxhY3RpdmUKKyAgXGdkZWZcbWF0aGFjdGl2ZXslCisgICAgXGxldF4gPSBccHRleGhhdAorICAgIFxsZXQ8ID0gXHB0ZXhsZXNzCisgICAgXGxldD4gPSBccHRleGd0cgorICAgIFxsZXQrID0gXHB0ZXhwbHVzCisgICAgXGxldCcgPSBccHRleHF1b3RlcmlnaHQKKyAgfQorfQorCislIFNvbWUgbWF0aCBtb2RlIHN5bWJvbHMuCitcZGVmXGJ1bGxldHskXHB0ZXhidWxsZXQkfQorXGRlZlxnZXF7XGlmbW1vZGUgXGdlXGVsc2UgJFxnZSRcZml9CitcZGVmXGxlcXtcaWZtbW9kZSBcbGVcZWxzZSAkXGxlJFxmaX0KK1xkZWZcbWludXN7XGlmbW1vZGUgLVxlbHNlICQtJFxmaX0KKworJSBAZG90c3t9IG91dHB1dHMgYW4gZWxsaXBzaXMgdXNpbmcgdGhlIGN1cnJlbnQgZm9udC4KKyUgV2UgZG8gLjVlbSBwZXIgcGVyaW9kIHNvIHRoYXQgaXQgaGFzIHRoZSBzYW1lIHNwYWNpbmcgaW4gdGhlIGNtCislIHR5cGV3cml0ZXIgZm9udHMgYXMgdGhyZWUgYWN0dWFsIHBlcmlvZCBjaGFyYWN0ZXJzOyBvbiB0aGUgb3RoZXIgaGFuZCwKKyUgaW4gb3RoZXIgdHlwZXdyaXRlciBmb250cyB0aHJlZSBwZXJpb2RzIGFyZSB3aWRlciB0aGFuIDEuNWVtLiAgU28gZG8KKyUgd2hpY2hldmVyIGlzIGxhcmdlci4KKyUKK1xkZWZcZG90c3slCisgIFxsZWF2ZXZtb2RlCisgIFxzZXRib3gwPVxoYm94ey4uLn0lIGdldCB3aWR0aCBvZiB0aHJlZSBwZXJpb2RzCisgIFxpZmRpbVx3ZDAgPiAxLjVlbQorICAgIFxkaW1lbjAgPSBcd2QwCisgIFxlbHNlCisgICAgXGRpbWVuMCA9IDEuNWVtCisgIFxmaQorICBcaGJveCB0byBcZGltZW4weyUKKyAgICBcaHNraXAgMHB0IHBsdXMuMjVmaWwKKyAgICAuXGhza2lwIDBwdCBwbHVzMWZpbAorICAgIC5caHNraXAgMHB0IHBsdXMxZmlsCisgICAgLlxoc2tpcCAwcHQgcGx1cy41ZmlsCisgIH0lCit9CisKKyUgQGVuZGRvdHN7fSBpcyBhbiBlbmQtb2Ytc2VudGVuY2UgZWxsaXBzaXMuCislCitcZGVmXGVuZGRvdHN7JQorICBcZG90cworICBcc3BhY2VmYWN0b3I9XGVuZG9mc2VudGVuY2VzcGFjZWZhY3RvcgorfQorCislIEBjb21tYXt9IGlzIHNvIGNvbW1hcyBjYW4gYmUgaW5zZXJ0ZWQgaW50byB0ZXh0IHdpdGhvdXQgbWVzc2luZyB1cAorJSBUZXhpbmZvJ3MgcGFyc2luZy4KKyUKK1xsZXRcY29tbWEgPSAsCisKKyUgQHJlZmlsbCBpcyBhIG5vLW9wLgorXGxldFxyZWZpbGw9XHJlbGF4CisKKyUgSWYgd29ya2luZyBvbiBhIGxhcmdlIGRvY3VtZW50IGluIGNoYXB0ZXJzLCBpdCBpcyBjb252ZW5pZW50IHRvCislIGJlIGFibGUgdG8gZGlzYWJsZSBpbmRleGluZywgY3Jvc3MtcmVmZXJlbmNpbmcsIGFuZCBjb250ZW50cywgZm9yIHRlc3QgcnVucy4KKyUgVGhpcyBpcyBkb25lIHdpdGggQG5vdmFsaWRhdGUgKGJlZm9yZSBAc2V0ZmlsZW5hbWUpLgorJQorXG5ld2lmXGlmbGlua3MgXGxpbmtzdHJ1ZSAlIGJ5IGRlZmF1bHQgd2Ugd2FudCB0aGUgYXV4IGZpbGVzLgorXGxldFxub3ZhbGlkYXRlID0gXGxpbmtzZmFsc2UKKworJSBAc2V0ZmlsZW5hbWUgaXMgZG9uZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGV2ZXJ5IHRleGluZm8gZmlsZS4KKyUgU28gb3BlbiBoZXJlIHRoZSBmaWxlcyB3ZSBuZWVkIHRvIGhhdmUgb3BlbiB3aGlsZSByZWFkaW5nIHRoZSBpbnB1dC4KKyUgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBtYWtlIGEgLmZtdCBmaWxlIGZvciB0ZXhpbmZvLgorXGRlZlxzZXRmaWxlbmFtZXslCisgICBcZml4YmFja3NsYXNoICAlIFR1cm4gb2ZmIGhhY2sgdG8gc3dhbGxvdyBgXGlucHV0IHRleGluZm8nLgorICAgXGlmbGlua3MKKyAgICAgXHRyeWF1eGZpbGUKKyAgICAgJSBPcGVuIHRoZSBuZXcgYXV4IGZpbGUuICBUZVggd2lsbCBjbG9zZSBpdCBhdXRvbWF0aWNhbGx5IGF0IGV4aXQuCisgICAgIFxpbW1lZGlhdGVcb3Blbm91dFxhdXhmaWxlPVxqb2JuYW1lLmF1eAorICAgXGZpICUgXG9wZW5pbmRpY2VzIG5lZWRzIHRvIGRvIHNvbWUgd29yayBpbiBhbnkgY2FzZS4KKyAgIFxvcGVuaW5kaWNlcworICAgXGxldFxzZXRmaWxlbmFtZT1cY29tbWVudCAlIElnbm9yZSBleHRyYSBAc2V0ZmlsZW5hbWUgY21kcy4KKyAgICUKKyAgICUgSWYgdGV4aW5mby5jbmYgaXMgcHJlc2VudCBvbiB0aGUgc3lzdGVtLCByZWFkIGl0LgorICAgJSBVc2VmdWwgZm9yIHNpdGUtd2lkZSBAYWZvdXJwYXBlciwgZXRjLgorICAgXG9wZW5pbiAxIHRleGluZm8uY25mCisgICBcaWZlb2YgMSBcZWxzZSBcaW5wdXQgdGV4aW5mby5jbmYgXGZpCisgICBcY2xvc2VpbiAxCisgICAlCisgICBcY29tbWVudCAlIElnbm9yZSB0aGUgYWN0dWFsIGZpbGVuYW1lLgorfQorCislIENhbGxlZCBmcm9tIFxzZXRmaWxlbmFtZS4KKyUKK1xkZWZcb3BlbmluZGljZXN7JQorICBcbmV3aW5kZXh7Y3B9JQorICBcbmV3Y29kZWluZGV4e2ZufSUKKyAgXG5ld2NvZGVpbmRleHt2cn0lCisgIFxuZXdjb2RlaW5kZXh7dHB9JQorICBcbmV3Y29kZWluZGV4e2t5fSUKKyAgXG5ld2NvZGVpbmRleHtwZ30lCit9CisKKyUgQGJ5ZS4KK1xvdXRlclxkZWZcYnlle1xwYWdlYWxpZ25tYWNyb1x0cmFjaW5nc3RhdHM9MVxwdGV4ZW5kfQorCisKK1xtZXNzYWdle3BkZix9CislIGFkb2JlIGBwb3J0YWJsZScgZG9jdW1lbnQgZm9ybWF0CitcbmV3Y291bnRcdGVtcG51bQorXG5ld2NvdW50XGxua2NvdW50CitcbmV3dG9rc1xmaWxlbmFtZQorXG5ld2NvdW50XGZpbGVuYW1lbGVuZ3RoCitcbmV3Y291bnRccGduCitcbmV3dG9rc1x0b2tzQQorXG5ld3Rva3NcdG9rc0IKK1xuZXd0b2tzXHRva3NDCitcbmV3dG9rc1x0b2tzRAorXG5ld2JveFxib3hBCitcbmV3Y291bnRcY291bnRBCitcbmV3aWZcaWZwZGYKK1xuZXdpZlxpZnBkZm1ha2VwYWdlZGVzdAorCislIHdoZW4gcGRmdGV4IGlzIHJ1biBpbiBkdmkgbW9kZSwgXHBkZm91dHB1dCBpcyBkZWZpbmVkIChzbyBccGRmb3V0cHV0PTEKKyUgY2FuIGJlIHNldCkuICBTbyB3ZSB0ZXN0IGZvciBccmVsYXggYW5kIDAgYXMgd2VsbCBhcyBcdW5kZWZpbmVkLAorJSBib3Jyb3dlZCBmcm9tIGlmcGRmLnN0eS4KK1xpZnhccGRmb3V0cHV0XHVuZGVmaW5lZAorXGVsc2UKKyAgXGlmeFxwZGZvdXRwdXRccmVsYXgKKyAgXGVsc2UKKyAgICBcaWZjYXNlXHBkZm91dHB1dAorICAgIFxlbHNlCisgICAgICBccGRmdHJ1ZQorICAgIFxmaQorICBcZmkKK1xmaQorCislIFBERiB1c2VzIFBvc3RTY3JpcHQgc3RyaW5nIGNvbnN0YW50cyBmb3IgdGhlIG5hbWVzIG9mIHhyZWYgdGFyZ2V0cywKKyUgZm9yIGRpc3BsYXkgaW4gdGhlIG91dGxpbmVzLCBhbmQgaW4gb3RoZXIgcGxhY2VzLiAgVGh1cywgd2UgaGF2ZSB0bworJSBkb3VibGUgYW55IGJhY2tzbGFzaGVzLiAgT3RoZXJ3aXNlLCBhIG5hbWUgbGlrZSAiXG5vZGUiIHdpbGwgYmUKKyUgaW50ZXJwcmV0ZWQgYXMgYSBuZXdsaW5lIChcbiksIGZvbGxvd2VkIGJ5IG8sIGQsIGUuICBOb3QgZ29vZC4KKyUgaHR0cDovL3d3dy5udGcubmwvcGlwZXJtYWlsL250Zy1wZGZ0ZXgvMjAwNC1KdWx5LzAwMDY1NC5odG1sCislIChhbmQgcmVsYXRlZCBtZXNzYWdlcywgdGhlIGZpbmFsIG91dGNvbWUgaXMgdGhhdCBpdCBpcyB1cCB0byB0aGUgVGVYCislIHVzZXIgdG8gZG91YmxlIHRoZSBiYWNrc2xhc2hlcyBhbmQgb3RoZXJ3aXNlIG1ha2UgdGhlIHN0cmluZyB2YWxpZCwgc28KKyUgdGhhdCdzIHdoYXQgd2UgZG8pLgorCislIGRvdWJsZSBhY3RpdmUgYmFja3NsYXNoZXMuCislCit7XGNhdGNvZGVgXEA9MCBcY2F0Y29kZWBcXD1cYWN0aXZlCisgQGdkZWZAYWN0aXZlYmFja3NsYXNoZG91YmxleyUKKyAgIEBjYXRjb2RlYEBcPUBhY3RpdmUKKyAgIEBsZXRcPUBkb3VibGViYWNrc2xhc2h9Cit9CisKKyUgVG8gaGFuZGxlIHBhcmVucywgd2UgbXVzdCBhZG9wdCBhIGRpZmZlcmVudCBhcHByb2FjaCwgc2luY2UgcGFyZW5zIGFyZQorJSBub3QgYWN0aXZlIGNoYXJhY3RlcnMuICBoeXBlcnJlZi5kdHggKHdoaWNoIGhhcyB0aGUgc2FtZSBwcm9ibGVtIGFzCislIHVzKSBoYW5kbGVzIGl0IHdpdGggdGhpcyBhbWF6aW5nIG1hY3JvIHRvIHJlcGxhY2UgdG9rZW5zLCB3aXRoIG1pbm9yCislIGNoYW5nZXMgZm9yIFRleGluZm8uICBJdCBpcyBpbmNsdWRlZCBoZXJlIHVuZGVyIHRoZSBHUEwgYnkgcGVybWlzc2lvbgorJSBmcm9tIHRoZSBhdXRob3IsIEhlaWtvIE9iZXJkaWVrLgorJQorJSAjMSBpcyB0aGUgdG9rZW5zIHRvIHJlcGxhY2UuCislICMyIGlzIHRoZSByZXBsYWNlbWVudC4KKyUgIzMgaXMgdGhlIGNvbnRyb2wgc2VxdWVuY2Ugd2l0aCB0aGUgc3RyaW5nLgorJQorXGRlZlxIeVBzZFN1YnN0IzEjMiMzeyUKKyAgXGRlZlxIeVBzZFJlcGxhY2UjIzEjMSMjMlxFTkR7JQorICAgICMjMSUKKyAgICBcaWZ4XFwjIzJcXCUKKyAgICBcZWxzZQorICAgICAgIzIlCisgICAgICBcSHlSZXR1cm5BZnRlckZpeyUKKyAgICAgICAgXEh5UHNkUmVwbGFjZSMjMlxFTkQKKyAgICAgIH0lCisgICAgXGZpCisgIH0lCisgIFx4ZGVmIzN7XGV4cGFuZGFmdGVyXEh5UHNkUmVwbGFjZSMzIzFcRU5EfSUKK30KK1xsb25nXGRlZlxIeVJldHVybkFmdGVyRmkjMVxmaXtcZmkjMX0KKworJSAjMSBpcyBhIGNvbnRyb2wgc2VxdWVuY2UgaW4gd2hpY2ggdG8gZG8gdGhlIHJlcGxhY2VtZW50cy4KK1xkZWZcYmFja3NsYXNocGFyZW5zIzF7JQorICBceGRlZiMxeyMxfSUgcmVkZWZpbmUgaXQgYXMgaXRzIGV4cGFuc2lvbjsgdGhlIGRlZmluaXRpb24gaXMgc2ltcGx5CisgICAgICAgICAgICAgJSBcbGFzdG5vZGUgd2hlbiBjYWxsZWQgZnJvbSBcc2V0cmVmIC0+IFxwZGZta2Rlc3QuCisgIFxIeVBzZFN1YnN0eyh9e1xyZWFsYmFja3NsYXNoKH17IzF9JQorICBcSHlQc2RTdWJzdHspfXtccmVhbGJhY2tzbGFzaCl9eyMxfSUKK30KKworXG5ld2hlbHBcbm9wZGZpbWFnZWhlbHB7VGV4aW5mbyBzdXBwb3J0cyAucG5nLCAuanBnLCAuanBlZywgYW5kIC5wZGYgaW1hZ2VzCit3aXRoIFBERiBvdXRwdXQsIGFuZCBub25lIG9mIHRob3NlIGZvcm1hdHMgY291bGQgYmUgZm91bmQuICAoLmVwcyBjYW5ub3QKK2JlIHN1cHBvcnRlZCBkdWUgdG8gdGhlIGRlc2lnbiBvZiB0aGUgUERGIGZvcm1hdDsgdXNlIHJlZ3VsYXIgVGVYIChEVkkKK291dHB1dCkgZm9yIHRoYXQuKX0KKworXGlmcGRmCisgICUKKyAgJSBDb2xvciBtYW5pcHVsYXRpb24gbWFjcm9zIGJhc2VkIG9uIHBkZmNvbG9yLnRleCwKKyAgJSBleGNlcHQgdXNpbmcgcmdiIGluc3RlYWQgb2YgY215azsgdGhlIGxhdHRlciBpcyBzYWlkIHRvIHJlbmRlciBhcyBhCisgICUgdmVyeSBkYXJrIGdyYXkgb24tc2NyZWVuIGFuZCBhIHZlcnkgZGFyayBoYWxmdG9uZSBpbiBwcmludCwgaW5zdGVhZAorICAlIG9mIGFjdHVhbCBibGFjay4KKyAgXGRlZlxyZ2JEYXJrUmVkezAuNTAgMC4wOSAwLjEyfQorICBcZGVmXHJnYkJsYWNrezAgMCAwfQorICAlCisgICUgayBzZXRzIHRoZSBjb2xvciBmb3IgZmlsbGluZyAodXN1YWwgdGV4dCwgZXRjLik7CisgICUgSyBzZXRzIHRoZSBjb2xvciBmb3Igc3Ryb2tpbmcgKHRoaW4gcnVsZXMsIGUuZy4sIG5vcm1hbCBfJ3MpLgorICBcZGVmXHBkZnNldGNvbG9yIzF7XHBkZmxpdGVyYWx7IzEgcmcgICMxIFJHfX0KKyAgJQorICAlIFNldCBjb2xvciwgYW5kIGNyZWF0ZSBhIG1hcmsgd2hpY2ggZGVmaW5lcyBcdGhpc2NvbG9yIGFjY29yZGluZ2x5LAorICAlIHNvIHRoYXQgXG1ha2VoZWFkbGluZSBrbm93cyB3aGljaCBjb2xvciB0byByZXN0b3JlLgorICBcZGVmXHNldGNvbG9yIzF7JQorICAgIFx4ZGVmXGxhc3Rjb2xvcmRlZnN7XGdkZWZcbm9leHBhbmRcdGhpc2NvbG9yeyMxfX0lCisgICAgXGRvbWFyaworICAgIFxwZGZzZXRjb2xvcnsjMX0lCisgIH0KKyAgJQorICBcZGVmXG1haW5jb2xvcntccmdiQmxhY2t9CisgIFxwZGZzZXRjb2xvcntcbWFpbmNvbG9yfQorICBcZWRlZlx0aGlzY29sb3J7XG1haW5jb2xvcn0KKyAgXGRlZlxsYXN0Y29sb3JkZWZze30KKyAgJQorICBcZGVmXG1ha2Vmb290bGluZXslCisgICAgXGJhc2VsaW5lc2tpcDI0cHQKKyAgICBcbGluZXtccGRmc2V0Y29sb3J7XG1haW5jb2xvcn1cdGhlXGZvb3RsaW5lfSUKKyAgfQorICAlCisgIFxkZWZcbWFrZWhlYWRsaW5leyUKKyAgICBcdmJveCB0byAwcHR7JQorICAgICAgXHZza2lwLTIyLjVwdAorICAgICAgXGxpbmV7JQorICAgICAgICBcdmJveCB0bzguNXB0e30lCisgICAgICAgICUgRXh0cmFjdCBcdGhpc2NvbG9yIGRlZmluaXRpb24gZnJvbSB0aGUgbWFya3MuCisgICAgICAgIFxnZXRjb2xvcm1hcmtzCisgICAgICAgICUgVHlwZXNldCB0aGUgaGVhZGxpbmUgd2l0aCBcbWFpbmNvbG9yLCB0aGVuIHJlc3RvcmUgdGhlIGNvbG9yLgorICAgICAgICBccGRmc2V0Y29sb3J7XG1haW5jb2xvcn1cdGhlXGhlYWRsaW5lXHBkZnNldGNvbG9ye1x0aGlzY29sb3J9JQorICAgICAgfSUKKyAgICAgIFx2c3MKKyAgICB9JQorICAgIFxub2ludGVybGluZXNraXAKKyAgfQorICAlCisgICUKKyAgXHBkZmNhdGFsb2d7L1BhZ2VNb2RlIC9Vc2VPdXRsaW5lc30KKyAgJQorICAlICMxIGlzIGltYWdlIG5hbWUsICMyIHdpZHRoIChtaWdodCBiZSBlbXB0eS93aGl0ZXNwYWNlKSwgIzMgaGVpZ2h0IChkaXR0bykuCisgIFxkZWZcZG9wZGZpbWFnZSMxIzIjM3slCisgICAgXGRlZlxpbWFnZXdpZHRoeyMyfVxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjMn0lCisgICAgXGRlZlxpbWFnZWhlaWdodHsjM31cc2V0Ym94MiA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzN9JQorICAgICUKKyAgICAlIHBkZnRleCAoYW5kIHRoZSBQREYgZm9ybWF0KSBzdXBwb3J0IC5wbmcsIC5qcGcsIC5wZGYgKGFtb25nCisgICAgJSBvdGhlcnMpLiAgTGV0J3MgdHJ5IGluIHRoYXQgb3JkZXIuCisgICAgXGxldFxwZGZpbWdleHQ9XGVtcHR5CisgICAgXGJlZ2luZ3JvdXAKKyAgICAgIFxvcGVuaW4gMSAjMS5wbmcgXGlmZW9mIDEKKyAgICAgICAgXG9wZW5pbiAxICMxLmpwZyBcaWZlb2YgMQorICAgICAgICAgIFxvcGVuaW4gMSAjMS5qcGVnIFxpZmVvZiAxCisgICAgICAgICAgICBcb3BlbmluIDEgIzEuSlBHIFxpZmVvZiAxCisgICAgICAgICAgICAgIFxvcGVuaW4gMSAjMS5wZGYgXGlmZW9mIDEKKyAgICAgICAgICAgICAgICBcb3BlbmluIDEgIzEuUERGIFxpZmVvZiAxCisgICAgICAgICAgICAgICAgICBcZXJyaGVscCA9IFxub3BkZmltYWdlaGVscAorICAgICAgICAgICAgICAgICAgXGVycm1lc3NhZ2V7Q291bGQgbm90IGZpbmQgaW1hZ2UgZmlsZSAjMSBmb3IgcGRmfSUKKyAgICAgICAgICAgICAgICBcZWxzZSBcZ2RlZlxwZGZpbWdleHR7UERGfSUKKyAgICAgICAgICAgICAgICBcZmkKKyAgICAgICAgICAgICAgXGVsc2UgXGdkZWZccGRmaW1nZXh0e3BkZn0lCisgICAgICAgICAgICAgIFxmaQorICAgICAgICAgICAgXGVsc2UgXGdkZWZccGRmaW1nZXh0e0pQR30lCisgICAgICAgICAgICBcZmkKKyAgICAgICAgICBcZWxzZSBcZ2RlZlxwZGZpbWdleHR7anBlZ30lCisgICAgICAgICAgXGZpCisgICAgICAgIFxlbHNlIFxnZGVmXHBkZmltZ2V4dHtqcGd9JQorICAgICAgICBcZmkKKyAgICAgIFxlbHNlIFxnZGVmXHBkZmltZ2V4dHtwbmd9JQorICAgICAgXGZpCisgICAgICBcY2xvc2VpbiAxCisgICAgXGVuZGdyb3VwCisgICAgJQorICAgICUgd2l0aG91dCBcaW1tZWRpYXRlLCBhbmNpZW50IHBkZnRleCBzZWcgZmF1bHRzIHdoZW4gdGhlIHNhbWUgaW1hZ2UgaXMKKyAgICAlIGluY2x1ZGVkIHR3aWNlLiAgKFZlcnNpb24gMy4xNDE1OS1wcmUtMS4wLXVub2ZmaWNpYWwtMjAwMTA3MDQuKQorICAgIFxpZm51bVxwZGZ0ZXh2ZXJzaW9uIDwgMTQKKyAgICAgIFxpbW1lZGlhdGVccGRmaW1hZ2UKKyAgICBcZWxzZQorICAgICAgXGltbWVkaWF0ZVxwZGZ4aW1hZ2UKKyAgICBcZmkKKyAgICAgIFxpZmRpbSBcd2QwID4wcHQgd2lkdGggXGltYWdld2lkdGggXGZpCisgICAgICBcaWZkaW0gXHdkMiA+MHB0IGhlaWdodCBcaW1hZ2VoZWlnaHQgXGZpCisgICAgICBcaWZudW1ccGRmdGV4dmVyc2lvbjwxMworICAgICAgICAgIzEuXHBkZmltZ2V4dAorICAgICAgIFxlbHNlCisgICAgICAgICB7IzEuXHBkZmltZ2V4dH0lCisgICAgICAgXGZpCisgICAgXGlmbnVtXHBkZnRleHZlcnNpb24gPCAxNCBcZWxzZQorICAgICAgXHBkZnJlZnhpbWFnZSBccGRmbGFzdHhpbWFnZQorICAgIFxmaX0KKyAgJQorICBcZGVmXHBkZm1rZGVzdCMxe3slCisgICAgJSBXZSBoYXZlIHRvIHNldCBkdW1taWVzIHNvIGNvbW1hbmRzIHN1Y2ggYXMgQGNvZGUsIGFuZCBjaGFyYWN0ZXJzCisgICAgJSBzdWNoIGFzIFwsIGFyZW4ndCBleHBhbmRlZCB3aGVuIHByZXNlbnQgaW4gYSBzZWN0aW9uIHRpdGxlLgorICAgIFxpbmRleG5vZm9udHMKKyAgICBcdHVybm9mZmFjdGl2ZQorICAgIFxhY3RpdmViYWNrc2xhc2hkb3VibGUKKyAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgIFxkZWZccGRmZGVzdG5hbWV7IzF9JQorICAgIFxiYWNrc2xhc2hwYXJlbnNccGRmZGVzdG5hbWUKKyAgICBcc2FmZXdoYXRzaXR7XHBkZmRlc3QgbmFtZXtccGRmZGVzdG5hbWV9IHh5en0lCisgIH19CisgICUKKyAgJSB1c2VkIHRvIG1hcmsgdGFyZ2V0IG5hbWVzOyBtdXN0IGJlIGV4cGFuZGFibGUuCisgIFxkZWZccGRmbWtwZ24jMXsjMX0KKyAgJQorICAlIGJ5IGRlZmF1bHQsIHVzZSBhIGNvbG9yIHRoYXQgaXMgZGFyayBlbm91Z2ggdG8gcHJpbnQgb24gcGFwZXIgYXMKKyAgJSBuZWFybHkgYmxhY2ssIGJ1dCBzdGlsbCBkaXN0aW5ndWlzaGFibGUgZm9yIG9ubGluZSB2aWV3aW5nLgorICBcZGVmXHVybGNvbG9ye1xyZ2JEYXJrUmVkfQorICBcZGVmXGxpbmtjb2xvcntccmdiRGFya1JlZH0KKyAgXGRlZlxlbmRsaW5re1xzZXRjb2xvcntcbWFpbmNvbG9yfVxwZGZlbmRsaW5rfQorICAlCisgICUgQWRkaW5nIG91dGxpbmVzIHRvIFBERjsgbWFjcm9zIGZvciBjYWxjdWxhdGluZyBzdHJ1Y3R1cmUgb2Ygb3V0bGluZXMKKyAgJSBjb21lIGZyb20gUGV0ciBPbHNhaworICBcZGVmXGV4cG51bWJlciMxe1xleHBhbmRhZnRlclxpZnhcY3NuYW1lIzFcZW5kY3NuYW1lXHJlbGF4IDAlCisgICAgXGVsc2UgXGNzbmFtZSMxXGVuZGNzbmFtZSBcZml9CisgIFxkZWZcYWR2YW5jZW51bWJlciMxe1x0ZW1wbnVtPVxleHBudW1iZXJ7IzF9XHJlbGF4CisgICAgXGFkdmFuY2VcdGVtcG51bSBieSAxCisgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lIzFcZW5kY3NuYW1le1x0aGVcdGVtcG51bX19CisgICUKKyAgJSAjMSBpcyB0aGUgc2VjdGlvbiB0ZXh0LCB3aGljaCBpcyB3aGF0IHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZQorICAlIG91dGxpbmUgYnkgdGhlIHBkZiB2aWV3ZXIuICAjMiBpcyB0aGUgcGRmIGV4cHJlc3Npb24gZm9yIHRoZSBudW1iZXIKKyAgJSBvZiBzdWJlbnRyaWVzIChvciBlbXB0eSwgZm9yIHN1YnN1YnNlY3Rpb25zKS4gICMzIGlzIHRoZSBub2RlIHRleHQsCisgICUgd2hpY2ggbWlnaHQgYmUgZW1wdHkgaWYgdGhpcyB0b2MgZW50cnkgaGFkIG5vIGNvcnJlc3BvbmRpbmcgbm9kZS4KKyAgJSAjNCBpcyB0aGUgcGFnZSBudW1iZXIKKyAgJQorICBcZGVmXGRvcGRmb3V0bGluZSMxIzIjMyM0eyUKKyAgICAlIEdlbmVyYXRlIGEgbGluayB0byB0aGUgbm9kZSB0ZXh0IGlmIHRoYXQgZXhpc3RzOyBlbHNlLCB1c2UgdGhlCisgICAgJSBwYWdlIG51bWJlci4gIFdlIGNvdWxkIGdlbmVyYXRlIGEgZGVzdGluYXRpb24gZm9yIHRoZSBzZWN0aW9uCisgICAgJSB0ZXh0IGluIHRoZSBjYXNlIHdoZXJlIGEgc2VjdGlvbiBoYXMgbm8gbm9kZSwgYnV0IGl0IGRvZXNuJ3QKKyAgICAlIHNlZW0gd29ydGggdGhlIHRyb3VibGUsIHNpbmNlIG1vc3QgZG9jdW1lbnRzIGFyZSBub3JtYWxseSBzdHJ1Y3R1cmVkLgorICAgIFxkZWZccGRmb3V0bGluZWRlc3R7IzN9JQorICAgIFxpZnhccGRmb3V0bGluZWRlc3RcZW1wdHkKKyAgICAgIFxkZWZccGRmb3V0bGluZWRlc3R7IzR9JQorICAgIFxlbHNlCisgICAgICAlIERvdWJsZWQgYmFja3NsYXNoZXMgaW4gdGhlIG5hbWUuCisgICAgICB7XGFjdGl2ZWJhY2tzbGFzaGRvdWJsZSBceGRlZlxwZGZvdXRsaW5lZGVzdHsjM30lCisgICAgICAgXGJhY2tzbGFzaHBhcmVuc1xwZGZvdXRsaW5lZGVzdH0lCisgICAgXGZpCisgICAgJQorICAgICUgQWxzbyBkb3VibGUgdGhlIGJhY2tzbGFzaGVzIGluIHRoZSBkaXNwbGF5IHN0cmluZy4KKyAgICB7XGFjdGl2ZWJhY2tzbGFzaGRvdWJsZSBceGRlZlxwZGZvdXRsaW5ldGV4dHsjMX0lCisgICAgIFxiYWNrc2xhc2hwYXJlbnNccGRmb3V0bGluZXRleHR9JQorICAgICUKKyAgICBccGRmb3V0bGluZSBnb3RvIG5hbWV7XHBkZm1rcGdue1xwZGZvdXRsaW5lZGVzdH19IzJ7XHBkZm91dGxpbmV0ZXh0fSUKKyAgfQorICAlCisgIFxkZWZccGRmbWFrZW91dGxpbmVzeyUKKyAgICBcYmVnaW5ncm91cAorICAgICAgJSBUaGFuaCdzIGhhY2sgLyBwcm9wZXIgYnJhY2VzIGluIGJvb2ttYXJrcworICAgICAgXGVkZWZcbXlsYnJhY2V7XGlmdHJ1ZSBcc3RyaW5ne1xlbHNlfVxmaX1cbGV0XHs9XG15bGJyYWNlCisgICAgICBcZWRlZlxteXJicmFjZXtcaWZmYWxzZXtcZWxzZVxzdHJpbmd9XGZpfVxsZXRcfT1cbXlyYnJhY2UKKyAgICAgICUKKyAgICAgICUgUmVhZCB0b2Mgc2lsZW50bHksIHRvIGdldCBjb3VudHMgb2Ygc3ViZW50cmllcyBmb3IgXHBkZm91dGxpbmUuCisgICAgICBcZGVmXG51bWNoYXBlbnRyeSMjMSMjMiMjMyMjNHslCisJXGRlZlx0aGlzY2hhcG51bXsjIzJ9JQorCVxkZWZcdGhpc3NlY251bXswfSUKKwlcZGVmXHRoaXNzdWJzZWNudW17MH0lCisgICAgICB9JQorICAgICAgXGRlZlxudW1zZWNlbnRyeSMjMSMjMiMjMyMjNHslCisJXGFkdmFuY2VudW1iZXJ7Y2hhcFx0aGlzY2hhcG51bX0lCisJXGRlZlx0aGlzc2VjbnVteyMjMn0lCisJXGRlZlx0aGlzc3Vic2VjbnVtezB9JQorICAgICAgfSUKKyAgICAgIFxkZWZcbnVtc3Vic2VjZW50cnkjIzEjIzIjIzMjIzR7JQorCVxhZHZhbmNlbnVtYmVye3NlY1x0aGlzc2VjbnVtfSUKKwlcZGVmXHRoaXNzdWJzZWNudW17IyMyfSUKKyAgICAgIH0lCisgICAgICBcZGVmXG51bXN1YnN1YnNlY2VudHJ5IyMxIyMyIyMzIyM0eyUKKwlcYWR2YW5jZW51bWJlcntzdWJzZWNcdGhpc3N1YnNlY251bX0lCisgICAgICB9JQorICAgICAgXGRlZlx0aGlzY2hhcG51bXswfSUKKyAgICAgIFxkZWZcdGhpc3NlY251bXswfSUKKyAgICAgIFxkZWZcdGhpc3N1YnNlY251bXswfSUKKyAgICAgICUKKyAgICAgICUgdXNlIFxkZWYgcmF0aGVyIHRoYW4gXGxldCBoZXJlIGJlY2F1c2Ugd2UgcmVkZWZpbmUgXGNoYXBlbnRyeSBldAorICAgICAgJSBhbC4gYSBzZWNvbmQgdGltZSwgYmVsb3cuCisgICAgICBcZGVmXGFwcGVudHJ5e1xudW1jaGFwZW50cnl9JQorICAgICAgXGRlZlxhcHBzZWNlbnRyeXtcbnVtc2VjZW50cnl9JQorICAgICAgXGRlZlxhcHBzdWJzZWNlbnRyeXtcbnVtc3Vic2VjZW50cnl9JQorICAgICAgXGRlZlxhcHBzdWJzdWJzZWNlbnRyeXtcbnVtc3Vic3Vic2VjZW50cnl9JQorICAgICAgXGRlZlx1bm5jaGFwZW50cnl7XG51bWNoYXBlbnRyeX0lCisgICAgICBcZGVmXHVubnNlY2VudHJ5e1xudW1zZWNlbnRyeX0lCisgICAgICBcZGVmXHVubnN1YnNlY2VudHJ5e1xudW1zdWJzZWNlbnRyeX0lCisgICAgICBcZGVmXHVubnN1YnN1YnNlY2VudHJ5e1xudW1zdWJzdWJzZWNlbnRyeX0lCisgICAgICBccmVhZGRhdGFmaWxle3RvY30lCisgICAgICAlCisgICAgICAlIFJlYWQgdG9jIHNlY29uZCB0aW1lLCB0aGlzIHRpbWUgYWN0dWFsbHkgcHJvZHVjaW5nIHRoZSBvdXRsaW5lcy4KKyAgICAgICUgVGhlIGAtJyBtZWFucyB0YWtlIHRoZSBcZXhwbnVtYmVyIGFzIHRoZSBhYnNvbHV0ZSBudW1iZXIgb2YKKyAgICAgICUgc3ViZW50cmllcywgd2hpY2ggd2UgY2FsY3VsYXRlZCBvbiBvdXIgZmlyc3QgcmVhZCBvZiB0aGUgLnRvYyBhYm92ZS4KKyAgICAgICUKKyAgICAgICUgV2UgdXNlIHRoZSBub2RlIG5hbWVzIGFzIHRoZSBkZXN0aW5hdGlvbnMuCisgICAgICBcZGVmXG51bWNoYXBlbnRyeSMjMSMjMiMjMyMjNHslCisgICAgICAgIFxkb3BkZm91dGxpbmV7IyMxfXtjb3VudC1cZXhwbnVtYmVye2NoYXAjIzJ9fXsjIzN9eyMjNH19JQorICAgICAgXGRlZlxudW1zZWNlbnRyeSMjMSMjMiMjMyMjNHslCisgICAgICAgIFxkb3BkZm91dGxpbmV7IyMxfXtjb3VudC1cZXhwbnVtYmVye3NlYyMjMn19eyMjM317IyM0fX0lCisgICAgICBcZGVmXG51bXN1YnNlY2VudHJ5IyMxIyMyIyMzIyM0eyUKKyAgICAgICAgXGRvcGRmb3V0bGluZXsjIzF9e2NvdW50LVxleHBudW1iZXJ7c3Vic2VjIyMyfX17IyMzfXsjIzR9fSUKKyAgICAgIFxkZWZcbnVtc3Vic3Vic2VjZW50cnkjIzEjIzIjIzMjIzR7JSBjb3VudCBpcyBhbHdheXMgemVybworICAgICAgICBcZG9wZGZvdXRsaW5leyMjMX17fXsjIzN9eyMjNH19JQorICAgICAgJQorICAgICAgJSBQREYgb3V0bGluZXMgYXJlIGRpc3BsYXllZCB1c2luZyBzeXN0ZW0gZm9udHMsIGluc3RlYWQgb2YKKyAgICAgICUgZG9jdW1lbnQgZm9udHMuICBUaGVyZWZvcmUgd2UgY2Fubm90IHVzZSBzcGVjaWFsIGNoYXJhY3RlcnMsCisgICAgICAlIHNpbmNlIHRoZSBlbmNvZGluZyBpcyB1bmtub3duLiAgRm9yIGV4YW1wbGUsIHRoZSBlb2dvbmVrIGZyb20KKyAgICAgICUgTGF0aW4gMiAoMHhlYSkgZ2V0cyB0cmFuc2xhdGVkIHRvIGEgfCBjaGFyYWN0ZXIuICBJbmZvIGZyb20KKyAgICAgICUgU3Rhc3playBXYXdyeWtpZXdpY3osIDE5IEphbiAyMDA0IDA0OjA5OjI0ICswMTAwLgorICAgICAgJQorICAgICAgJSB4eCB0byBkbyB0aGlzIHJpZ2h0LCB3ZSBoYXZlIHRvIHRyYW5zbGF0ZSA4LWJpdCBjaGFyYWN0ZXJzIHRvCisgICAgICAlIHRoZWlyICJiZXN0IiBlcXVpdmFsZW50LCBiYXNlZCBvbiB0aGUgQGRvY3VtZW50ZW5jb2RpbmcuICBSaWdodAorICAgICAgJSBub3csIEkgZ3Vlc3Mgd2UnbGwganVzdCBsZXQgdGhlIHBkZiByZWFkZXIgaGF2ZSBpdHMgd2F5LgorICAgICAgXGluZGV4bm9mb250cworICAgICAgXHNldHVwZGF0YWZpbGUKKyAgICAgIFxjYXRjb2RlYFxcPVxhY3RpdmUgXG90aGVyYmFja3NsYXNoCisgICAgICBcaW5wdXQgXHRvY3JlYWRmaWxlbmFtZQorICAgIFxlbmRncm91cAorICB9CisgICUKKyAgXGRlZlxza2lwc3BhY2VzIzF7XGRlZlxQUHsjMX1cZGVmXER7fH0lCisgICAgXGlmeFxQUFxEXGxldFxuZXh0c3BccmVsYXgKKyAgICBcZWxzZVxsZXRcbmV4dHNwXHNraXBzcGFjZXMKKyAgICAgIFxpZnhccFxzcGFjZVxlbHNlXGFkZHRva2Vuc3tcZmlsZW5hbWV9e1xQUH0lCisgICAgICAgIFxhZHZhbmNlXGZpbGVuYW1lbGVuZ3RoIGJ5IDEKKyAgICAgIFxmaQorICAgIFxmaQorICAgIFxuZXh0c3B9CisgIFxkZWZcZ2V0ZmlsZW5hbWUjMXtcZmlsZW5hbWVsZW5ndGg9MFxleHBhbmRhZnRlclxza2lwc3BhY2VzIzF8XHJlbGF4fQorICBcaWZudW1ccGRmdGV4dmVyc2lvbiA8IDE0CisgICAgXGxldCBcc3RhcnRsaW5rIFxwZGZhbm5vdGxpbmsKKyAgXGVsc2UKKyAgICBcbGV0IFxzdGFydGxpbmsgXHBkZnN0YXJ0bGluaworICBcZmkKKyAgJSBtYWtlIGEgbGl2ZSB1cmwgaW4gcGRmIG91dHB1dC4KKyAgXGRlZlxwZGZ1cmwjMXslCisgICAgXGJlZ2luZ3JvdXAKKyAgICAgICUgaXQgc2VlbXMgd2UgcmVhbGx5IG5lZWQgeWV0IGFub3RoZXIgc2V0IG9mIGR1bW1pZXM7IGhhdmUgbm90CisgICAgICAlIHRyaWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBlYWNoIGNvbW1hbmQgc2hvdWxkIGRvIGluIHRoZSBjb250ZXh0CisgICAgICAlIG9mIEB1cmwuICBmb3Igbm93LCBqdXN0IG1ha2UgQC8gYSBuby1vcCwgdGhhdCdzIHRoZSBvbmx5IG9uZQorICAgICAgJSBwZW9wbGUgaGF2ZSBhY3R1YWxseSByZXBvcnRlZCBhIHByb2JsZW0gd2l0aC4KKyAgICAgICUKKyAgICAgIFxub3JtYWx0dXJub2ZmYWN0aXZlCisgICAgICBcZGVmXEB7QH0lCisgICAgICBcbGV0XC89XGVtcHR5CisgICAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgICAgJSBkbyB3ZSB3YW50IHRvIGdvIHNvIGZhciBhcyB0byB1c2UgXGluZGV4bm9mb250cyBpbnN0ZWFkIG9mIGp1c3QKKyAgICAgICUgc3BlY2lhbC1jYXNpbmcgXHZhciBoZXJlPworICAgICAgXGRlZlx2YXIjIzF7IyMxfSUKKyAgICAgICUKKyAgICAgIFxsZWF2ZXZtb2RlXHNldGNvbG9ye1x1cmxjb2xvcn0lCisgICAgICBcc3RhcnRsaW5rIGF0dHJ7L0JvcmRlciBbMCAwIDBdfSUKKyAgICAgICAgdXNlcnsvU3VidHlwZSAvTGluayAvQSA8PCAvUyAvVVJJIC9VUkkgKCMxKSA+Pn0lCisgICAgXGVuZGdyb3VwfQorICBcZGVmXHBkZmdldHRva3MjMS57XHNldGJveFxib3hBPVxoYm94e1x0b2tzQT17IzEufVx0b2tzQj17fVxtYWtldG9rc319CisgIFxkZWZcYWRkdG9rZW5zIzEjMntcZWRlZlxhZGR0b2tze1xub2V4cGFuZCMxPXtcdGhlIzEjMn19XGFkZHRva3N9CisgIFxkZWZcYWRuIzF7XGFkZHRva2Vuc3tcdG9rc0N9eyMxfVxnbG9iYWxcY291bnRBPTFcbGV0XG5leHQ9XG1ha2V0b2tzfQorICBcZGVmXHBvcHRva3MjMSMyfEVORFRPS1N8e1xsZXRcZmlyc3Q9IzFcdG9rc0Q9eyMxfVx0b2tzQT17IzJ9fQorICBcZGVmXG1ha2V0b2tzeyUKKyAgICBcZXhwYW5kYWZ0ZXJccG9wdG9rc1x0aGVcdG9rc0F8RU5EVE9LU3xccmVsYXgKKyAgICBcaWZ4XGZpcnN0MFxhZG4wCisgICAgXGVsc2VcaWZ4XGZpcnN0MVxhZG4xIFxlbHNlXGlmeFxmaXJzdDJcYWRuMiBcZWxzZVxpZnhcZmlyc3QzXGFkbjMKKyAgICBcZWxzZVxpZnhcZmlyc3Q0XGFkbjQgXGVsc2VcaWZ4XGZpcnN0NVxhZG41IFxlbHNlXGlmeFxmaXJzdDZcYWRuNgorICAgIFxlbHNlXGlmeFxmaXJzdDdcYWRuNyBcZWxzZVxpZnhcZmlyc3Q4XGFkbjggXGVsc2VcaWZ4XGZpcnN0OVxhZG45CisgICAgXGVsc2UKKyAgICAgIFxpZm51bTA9XGNvdW50QVxlbHNlXG1ha2VsaW5rXGZpCisgICAgICBcaWZ4XGZpcnN0LlxsZXRcbmV4dD1cZG9uZVxlbHNlCisgICAgICAgIFxsZXRcbmV4dD1cbWFrZXRva3MKKyAgICAgICAgXGFkZHRva2Vuc3tcdG9rc0J9e1x0aGVcdG9rc0R9CisgICAgICAgIFxpZnhcZmlyc3QsXGFkZHRva2Vuc3tcdG9rc0J9e1xzcGFjZX1cZmkKKyAgICAgIFxmaQorICAgIFxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaQorICAgIFxuZXh0fQorICBcZGVmXG1ha2VsaW5re1xhZGR0b2tlbnN7XHRva3NCfSUKKyAgICB7XG5vZXhwYW5kXHBkZmxpbmt7XHRoZVx0b2tzQ319XHRva3NDPXt9XGdsb2JhbFxjb3VudEE9MH0KKyAgXGRlZlxwZGZsaW5rIzF7JQorICAgIFxzdGFydGxpbmsgYXR0cnsvQm9yZGVyIFswIDAgMF19IGdvdG8gbmFtZXtccGRmbWtwZ257IzF9fQorICAgIFxzZXRjb2xvcntcbGlua2NvbG9yfSMxXGVuZGxpbmt9CisgIFxkZWZcZG9uZXtcZWRlZlxzdHtcZ2xvYmFsXG5vZXhwYW5kXHRva3NBPXtcdGhlXHRva3NCfX1cc3R9CitcZWxzZQorICAlIG5vbi1wZGYgbW9kZQorICBcbGV0XHBkZm1rZGVzdCA9IFxnb2JibGUKKyAgXGxldFxwZGZ1cmwgPSBcZ29iYmxlCisgIFxsZXRcZW5kbGluayA9IFxyZWxheAorICBcbGV0XHNldGNvbG9yID0gXGdvYmJsZQorICBcbGV0XHBkZnNldGNvbG9yID0gXGdvYmJsZQorICBcbGV0XHBkZm1ha2VvdXRsaW5lcyA9IFxyZWxheAorXGZpICAlIFxpZnhccGRmb3V0cHV0CisKKworXG1lc3NhZ2V7Zm9udHMsfQorCislIENoYW5nZSB0aGUgY3VycmVudCBmb250IHN0eWxlIHRvICMxLCByZW1lbWJlcmluZyBpdCBpbiBcY3VyZm9udHN0eWxlLgorJSBGb3Igbm93LCB3ZSBkbyBub3QgYWNjdW11bGF0ZSBmb250IHN0eWxlczogQGJ7QGl7Zm9vfX0gcHJpbnRzIGZvbyBpbgorJSBpdGFsaWNzLCBub3QgYm9sZCBpdGFsaWNzLgorJQorXGRlZlxzZXRmb250c3R5bGUjMXslCisgIFxkZWZcY3VyZm9udHN0eWxleyMxfSUgbm90IGFzIGEgY29udHJvbCBzZXF1ZW5jZSwgYmVjYXVzZSB3ZSBhcmUgXGVkZWYnZC4KKyAgXGNzbmFtZSB0ZW4jMVxlbmRjc25hbWUgICUgY2hhbmdlIHRoZSBjdXJyZW50IGZvbnQKK30KKworJSBTZWxlY3QgIzEgZm9udHMgd2l0aCB0aGUgY3VycmVudCBzdHlsZS4KKyUKK1xkZWZcc2VsZWN0Zm9udHMjMXtcY3NuYW1lICMxZm9udHNcZW5kY3NuYW1lIFxjc25hbWVcY3VyZm9udHN0eWxlXGVuZGNzbmFtZX0KKworXGRlZlxybXtcZmFtPTAgXHNldGZvbnRzdHlsZXtybX19CitcZGVmXGl0e1xmYW09XGl0ZmFtIFxzZXRmb250c3R5bGV7aXR9fQorXGRlZlxzbHtcZmFtPVxzbGZhbSBcc2V0Zm9udHN0eWxle3NsfX0KK1xkZWZcYmZ7XGZhbT1cYmZmYW0gXHNldGZvbnRzdHlsZXtiZn19XGRlZlxiZnN0eWxlbmFtZXtiZn0KK1xkZWZcdHR7XGZhbT1cdHRmYW0gXHNldGZvbnRzdHlsZXt0dH19CisKKyUgVW5mb3J0dW5hdGVseSwgd2UgaGF2ZSB0byBvdmVycmlkZSB0aGlzIGZvciB0aXRsZXMgYW5kIHRoZSBsaWtlLCBzaW5jZQorJSBpbiB0aG9zZSBjYXNlcyAicm0iIGlzIGJvbGQuICBTaWdoLgorXGRlZlxybWlzYm9sZHtccm1cZGVmXGN1cmZvbnRzdHlsZXtiZn19CisKKyUgVGV4aW5mbyBzb3J0IG9mIHN1cHBvcnRzIHRoZSBzYW5zIHNlcmlmIGZvbnQgc3R5bGUsIHdoaWNoIHBsYWluIFRlWCBkb2VzIG5vdC4KKyUgU28gd2Ugc2V0IHVwIGEgXHNmLgorXG5ld2ZhbVxzZmZhbQorXGRlZlxzZntcZmFtPVxzZmZhbSBcc2V0Zm9udHN0eWxle3NmfX0KK1xsZXRcbGkgPSBcc2YgJSBTb21ldGltZXMgd2UgY2FsbCBpdCBcbGksIG5vdCBcc2YuCisKKyUgV2UgZG9uJ3QgbmVlZCBtYXRoIGZvciB0aGlzIGZvbnQgc3R5bGUuCitcZGVmXHR0c2x7XHNldGZvbnRzdHlsZXt0dHNsfX0KKworCislIERlZmF1bHQgbGVhZGluZy4KK1xuZXdkaW1lblx0ZXh0bGVhZGluZyAgXHRleHRsZWFkaW5nID0gMTMuMnB0CisKKyUgU2V0IHRoZSBiYXNlbGluZXNraXAgdG8gIzEsIGFuZCB0aGUgbGluZXNraXAgYW5kIHN0cnV0IHNpemUKKyUgY29ycmVzcG9uZGluZ2x5LiAgVGhlcmUgaXMgbm8gZGVlcCBtZWFuaW5nIGJlaGluZCB0aGVzZSBtYWdpYyBudW1iZXJzCislIHVzZWQgYXMgZmFjdG9yczsgdGhleSBqdXN0IG1hdGNoIChjbG9zZWx5IGVub3VnaCkgd2hhdCBLbnV0aCBkZWZpbmVkLgorJQorXGRlZlxsaW5lc2tpcGZhY3RvcnsuMDgzMzN9CitcZGVmXHN0cnV0aGVpZ2h0cGVyY2VudHsuNzA4MzN9CitcZGVmXHN0cnV0ZGVwdGhwZXJjZW50IHsuMjkxNjd9CislCislIGNhbiBnZXQgYSBzb3J0IG9mIHBvb3IgbWFuJ3MgZG91YmxlIHNwYWNpbmcgYnkgcmVkZWZpbmluZyB0aGlzLgorXGRlZlxiYXNlbGluZWZhY3RvcnsxfQorJQorXGRlZlxzZXRsZWFkaW5nIzF7JQorICBcZGltZW4wID0gIzFccmVsYXgKKyAgXG5vcm1hbGJhc2VsaW5lc2tpcCA9IFxiYXNlbGluZWZhY3RvclxkaW1lbjAKKyAgXG5vcm1hbGxpbmVza2lwID0gXGxpbmVza2lwZmFjdG9yXG5vcm1hbGJhc2VsaW5lc2tpcAorICBcbm9ybWFsYmFzZWxpbmVzCisgIFxzZXRib3hcc3RydXRib3ggPVxoYm94eyUKKyAgICBcdnJ1bGUgd2lkdGgwcHQgaGVpZ2h0XHN0cnV0aGVpZ2h0cGVyY2VudFxiYXNlbGluZXNraXAKKyAgICAgICAgICAgICAgICAgICAgZGVwdGggXHN0cnV0ZGVwdGhwZXJjZW50IFxiYXNlbGluZXNraXAKKyAgfSUKK30KKworJSBQREYgQ01hcHMuICBTZWUgYWxzbyBMYVRlWCdzIHQxLmNtYXAuCislCislIGRvIG5vdGhpbmcgd2l0aCB0aGlzIGJ5IGRlZmF1bHQuCitcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBjbWFwT1QxXGVuZGNzbmFtZVxnb2JibGUKK1xleHBhbmRhZnRlclxsZXRcY3NuYW1lIGNtYXBPVDFJVFxlbmRjc25hbWVcZ29iYmxlCitcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBjbWFwT1QxVFRcZW5kY3NuYW1lXGdvYmJsZQorCislIGlmIHdlIGFyZSBwcm9kdWNpbmcgcGRmLCBhbmQgd2UgaGF2ZSBccGRmZm9udGF0dHIsIHRoZW4gZGVmaW5lIGNtYXBzLgorJSAoXHBkZmZvbnRhdHRyIHdhcyBpbnRyb2R1Y2VkIG1hbnkgeWVhcnMgYWdvLCBidXQgcGVvcGxlIHN0aWxsIHJ1bgorJSBvbGRlciBwZGZ0ZXgnczsgaXQncyBlYXN5IHRvIGNvbmRpdGlvbmFsaXplLCBzbyB3ZSBkby4pCitcaWZwZGYgXGlmeFxwZGZmb250YXR0clx1bmRlZmluZWQgXGVsc2UKKyAgXGJlZ2luZ3JvdXAKKyAgICBcY2F0Y29kZWBcXl5NPVxhY3RpdmUgXGRlZl5eTXteXkp9JSBPdXRwdXQgbGluZSBlbmRpbmdzIGFzIHRoZSBeXkogY2hhci4KKyAgICBcY2F0Y29kZWBcJT0xMiBcaW1tZWRpYXRlXHBkZm9iaiBzdHJlYW0geyUhUFMtQWRvYmUtMy4wIFJlc291cmNlLUNNYXAKKyUlRG9jdW1lbnROZWVkZWRSZXNvdXJjZXM6IFByb2NTZXQgKENJREluaXQpCislJUluY2x1ZGVSZXNvdXJjZTogUHJvY1NldCAoQ0lESW5pdCkKKyUlQmVnaW5SZXNvdXJjZTogQ01hcCAoVGVYLU9UMS0wKQorJSVUaXRsZTogKFRlWC1PVDEtMCBUZVggT1QxIDApCislJVZlcnNpb246IDEuMDAwCislJUVuZENvbW1lbnRzCisvQ0lESW5pdCAvUHJvY1NldCBmaW5kcmVzb3VyY2UgYmVnaW4KKzEyIGRpY3QgYmVnaW4KK2JlZ2luY21hcAorL0NJRFN5c3RlbUluZm8KKzw8IC9SZWdpc3RyeSAoVGVYKQorL09yZGVyaW5nIChPVDEpCisvU3VwcGxlbWVudCAwCis+PiBkZWYKKy9DTWFwTmFtZSAvVGVYLU9UMS0wIGRlZgorL0NNYXBUeXBlIDIgZGVmCisxIGJlZ2luY29kZXNwYWNlcmFuZ2UKKzwwMD4gPDdGPgorZW5kY29kZXNwYWNlcmFuZ2UKKzggYmVnaW5iZnJhbmdlCis8MDA+IDwwMT4gPDAzOTM+Cis8MDk+IDwwQT4gPDAzQTg+Cis8MjM+IDwyNj4gPDAwMjM+Cis8Mjg+IDwzQj4gPDAwMjg+Cis8M0Y+IDw1Qj4gPDAwM0Y+Cis8NUQ+IDw1RT4gPDAwNUQ+Cis8NjE+IDw3QT4gPDAwNjE+Cis8N0I+IDw3Qz4gPDIwMTM+CitlbmRiZnJhbmdlCis0MCBiZWdpbmJmY2hhcgorPDAyPiA8MDM5OD4KKzwwMz4gPDAzOUI+Cis8MDQ+IDwwMzlFPgorPDA1PiA8MDNBMD4KKzwwNj4gPDAzQTM+Cis8MDc+IDwwM0QyPgorPDA4PiA8MDNBNj4KKzwwQj4gPDAwNjYwMDY2PgorPDBDPiA8MDA2NjAwNjk+Cis8MEQ+IDwwMDY2MDA2Qz4KKzwwRT4gPDAwNjYwMDY2MDA2OT4KKzwwRj4gPDAwNjYwMDY2MDA2Qz4KKzwxMD4gPDAxMzE+Cis8MTE+IDwwMjM3PgorPDEyPiA8MDA2MD4KKzwxMz4gPDAwQjQ+Cis8MTQ+IDwwMkM3PgorPDE1PiA8MDJEOD4KKzwxNj4gPDAwQUY+Cis8MTc+IDwwMkRBPgorPDE4PiA8MDBCOD4KKzwxOT4gPDAwREY+Cis8MUE+IDwwMEU2PgorPDFCPiA8MDE1Mz4KKzwxQz4gPDAwRjg+Cis8MUQ+IDwwMEM2PgorPDFFPiA8MDE1Mj4KKzwxRj4gPDAwRDg+Cis8MjE+IDwwMDIxPgorPDIyPiA8MjAxRD4KKzwyNz4gPDIwMTk+Cis8M0M+IDwwMEExPgorPDNEPiA8MDAzRD4KKzwzRT4gPDAwQkY+Cis8NUM+IDwyMDFDPgorPDVGPiA8MDJEOT4KKzw2MD4gPDIwMTg+Cis8N0Q+IDwwMkREPgorPDdFPiA8MDA3RT4KKzw3Rj4gPDAwQTg+CitlbmRiZmNoYXIKK2VuZGNtYXAKK0NNYXBOYW1lIGN1cnJlbnRkaWN0IC9DTWFwIGRlZmluZXJlc291cmNlIHBvcAorZW5kCitlbmQKKyUlRW5kUmVzb3VyY2UKKyUlRU9GCisgICAgfVxlbmRncm91cAorICBcZXhwYW5kYWZ0ZXJcZWRlZlxjc25hbWUgY21hcE9UMVxlbmRjc25hbWUjMXslCisgICAgXHBkZmZvbnRhdHRyIzF7L1RvVW5pY29kZSBcdGhlXHBkZmxhc3RvYmpcc3BhY2UgMCBSfSUKKyAgfSUKKyUKKyUgXGNtYXBPVDFJVAorICBcYmVnaW5ncm91cAorICAgIFxjYXRjb2RlYFxeXk09XGFjdGl2ZSBcZGVmXl5Ne15eSn0lIE91dHB1dCBsaW5lIGVuZGluZ3MgYXMgdGhlIF5eSiBjaGFyLgorICAgIFxjYXRjb2RlYFwlPTEyIFxpbW1lZGlhdGVccGRmb2JqIHN0cmVhbSB7JSFQUy1BZG9iZS0zLjAgUmVzb3VyY2UtQ01hcAorJSVEb2N1bWVudE5lZWRlZFJlc291cmNlczogUHJvY1NldCAoQ0lESW5pdCkKKyUlSW5jbHVkZVJlc291cmNlOiBQcm9jU2V0IChDSURJbml0KQorJSVCZWdpblJlc291cmNlOiBDTWFwIChUZVgtT1QxSVQtMCkKKyUlVGl0bGU6IChUZVgtT1QxSVQtMCBUZVggT1QxSVQgMCkKKyUlVmVyc2lvbjogMS4wMDAKKyUlRW5kQ29tbWVudHMKKy9DSURJbml0IC9Qcm9jU2V0IGZpbmRyZXNvdXJjZSBiZWdpbgorMTIgZGljdCBiZWdpbgorYmVnaW5jbWFwCisvQ0lEU3lzdGVtSW5mbworPDwgL1JlZ2lzdHJ5IChUZVgpCisvT3JkZXJpbmcgKE9UMUlUKQorL1N1cHBsZW1lbnQgMAorPj4gZGVmCisvQ01hcE5hbWUgL1RlWC1PVDFJVC0wIGRlZgorL0NNYXBUeXBlIDIgZGVmCisxIGJlZ2luY29kZXNwYWNlcmFuZ2UKKzwwMD4gPDdGPgorZW5kY29kZXNwYWNlcmFuZ2UKKzggYmVnaW5iZnJhbmdlCis8MDA+IDwwMT4gPDAzOTM+Cis8MDk+IDwwQT4gPDAzQTg+Cis8MjU+IDwyNj4gPDAwMjU+Cis8Mjg+IDwzQj4gPDAwMjg+Cis8M0Y+IDw1Qj4gPDAwM0Y+Cis8NUQ+IDw1RT4gPDAwNUQ+Cis8NjE+IDw3QT4gPDAwNjE+Cis8N0I+IDw3Qz4gPDIwMTM+CitlbmRiZnJhbmdlCis0MiBiZWdpbmJmY2hhcgorPDAyPiA8MDM5OD4KKzwwMz4gPDAzOUI+Cis8MDQ+IDwwMzlFPgorPDA1PiA8MDNBMD4KKzwwNj4gPDAzQTM+Cis8MDc+IDwwM0QyPgorPDA4PiA8MDNBNj4KKzwwQj4gPDAwNjYwMDY2PgorPDBDPiA8MDA2NjAwNjk+Cis8MEQ+IDwwMDY2MDA2Qz4KKzwwRT4gPDAwNjYwMDY2MDA2OT4KKzwwRj4gPDAwNjYwMDY2MDA2Qz4KKzwxMD4gPDAxMzE+Cis8MTE+IDwwMjM3PgorPDEyPiA8MDA2MD4KKzwxMz4gPDAwQjQ+Cis8MTQ+IDwwMkM3PgorPDE1PiA8MDJEOD4KKzwxNj4gPDAwQUY+Cis8MTc+IDwwMkRBPgorPDE4PiA8MDBCOD4KKzwxOT4gPDAwREY+Cis8MUE+IDwwMEU2PgorPDFCPiA8MDE1Mz4KKzwxQz4gPDAwRjg+Cis8MUQ+IDwwMEM2PgorPDFFPiA8MDE1Mj4KKzwxRj4gPDAwRDg+Cis8MjE+IDwwMDIxPgorPDIyPiA8MjAxRD4KKzwyMz4gPDAwMjM+Cis8MjQ+IDwwMEEzPgorPDI3PiA8MjAxOT4KKzwzQz4gPDAwQTE+Cis8M0Q+IDwwMDNEPgorPDNFPiA8MDBCRj4KKzw1Qz4gPDIwMUM+Cis8NUY+IDwwMkQ5PgorPDYwPiA8MjAxOD4KKzw3RD4gPDAyREQ+Cis8N0U+IDwwMDdFPgorPDdGPiA8MDBBOD4KK2VuZGJmY2hhcgorZW5kY21hcAorQ01hcE5hbWUgY3VycmVudGRpY3QgL0NNYXAgZGVmaW5lcmVzb3VyY2UgcG9wCitlbmQKK2VuZAorJSVFbmRSZXNvdXJjZQorJSVFT0YKKyAgICB9XGVuZGdyb3VwCisgIFxleHBhbmRhZnRlclxlZGVmXGNzbmFtZSBjbWFwT1QxSVRcZW5kY3NuYW1lIzF7JQorICAgIFxwZGZmb250YXR0ciMxey9Ub1VuaWNvZGUgXHRoZVxwZGZsYXN0b2JqXHNwYWNlIDAgUn0lCisgIH0lCislCislIFxjbWFwT1QxVFQKKyAgXGJlZ2luZ3JvdXAKKyAgICBcY2F0Y29kZWBcXl5NPVxhY3RpdmUgXGRlZl5eTXteXkp9JSBPdXRwdXQgbGluZSBlbmRpbmdzIGFzIHRoZSBeXkogY2hhci4KKyAgICBcY2F0Y29kZWBcJT0xMiBcaW1tZWRpYXRlXHBkZm9iaiBzdHJlYW0geyUhUFMtQWRvYmUtMy4wIFJlc291cmNlLUNNYXAKKyUlRG9jdW1lbnROZWVkZWRSZXNvdXJjZXM6IFByb2NTZXQgKENJREluaXQpCislJUluY2x1ZGVSZXNvdXJjZTogUHJvY1NldCAoQ0lESW5pdCkKKyUlQmVnaW5SZXNvdXJjZTogQ01hcCAoVGVYLU9UMVRULTApCislJVRpdGxlOiAoVGVYLU9UMVRULTAgVGVYIE9UMVRUIDApCislJVZlcnNpb246IDEuMDAwCislJUVuZENvbW1lbnRzCisvQ0lESW5pdCAvUHJvY1NldCBmaW5kcmVzb3VyY2UgYmVnaW4KKzEyIGRpY3QgYmVnaW4KK2JlZ2luY21hcAorL0NJRFN5c3RlbUluZm8KKzw8IC9SZWdpc3RyeSAoVGVYKQorL09yZGVyaW5nIChPVDFUVCkKKy9TdXBwbGVtZW50IDAKKz4+IGRlZgorL0NNYXBOYW1lIC9UZVgtT1QxVFQtMCBkZWYKKy9DTWFwVHlwZSAyIGRlZgorMSBiZWdpbmNvZGVzcGFjZXJhbmdlCis8MDA+IDw3Rj4KK2VuZGNvZGVzcGFjZXJhbmdlCis1IGJlZ2luYmZyYW5nZQorPDAwPiA8MDE+IDwwMzkzPgorPDA5PiA8MEE+IDwwM0E4PgorPDIxPiA8MjY+IDwwMDIxPgorPDI4PiA8NUY+IDwwMDI4PgorPDYxPiA8N0U+IDwwMDYxPgorZW5kYmZyYW5nZQorMzIgYmVnaW5iZmNoYXIKKzwwMj4gPDAzOTg+Cis8MDM+IDwwMzlCPgorPDA0PiA8MDM5RT4KKzwwNT4gPDAzQTA+Cis8MDY+IDwwM0EzPgorPDA3PiA8MDNEMj4KKzwwOD4gPDAzQTY+Cis8MEI+IDwyMTkxPgorPDBDPiA8MjE5Mz4KKzwwRD4gPDAwMjc+Cis8MEU+IDwwMEExPgorPDBGPiA8MDBCRj4KKzwxMD4gPDAxMzE+Cis8MTE+IDwwMjM3PgorPDEyPiA8MDA2MD4KKzwxMz4gPDAwQjQ+Cis8MTQ+IDwwMkM3PgorPDE1PiA8MDJEOD4KKzwxNj4gPDAwQUY+Cis8MTc+IDwwMkRBPgorPDE4PiA8MDBCOD4KKzwxOT4gPDAwREY+Cis8MUE+IDwwMEU2PgorPDFCPiA8MDE1Mz4KKzwxQz4gPDAwRjg+Cis8MUQ+IDwwMEM2PgorPDFFPiA8MDE1Mj4KKzwxRj4gPDAwRDg+Cis8MjA+IDwyNDIzPgorPDI3PiA8MjAxOT4KKzw2MD4gPDIwMTg+Cis8N0Y+IDwwMEE4PgorZW5kYmZjaGFyCitlbmRjbWFwCitDTWFwTmFtZSBjdXJyZW50ZGljdCAvQ01hcCBkZWZpbmVyZXNvdXJjZSBwb3AKK2VuZAorZW5kCislJUVuZFJlc291cmNlCislJUVPRgorICAgIH1cZW5kZ3JvdXAKKyAgXGV4cGFuZGFmdGVyXGVkZWZcY3NuYW1lIGNtYXBPVDFUVFxlbmRjc25hbWUjMXslCisgICAgXHBkZmZvbnRhdHRyIzF7L1RvVW5pY29kZSBcdGhlXHBkZmxhc3RvYmpcc3BhY2UgMCBSfSUKKyAgfSUKK1xmaVxmaQorCisKKyUgU2V0IHRoZSBmb250IG1hY3JvICMxIHRvIHRoZSBmb250IG5hbWVkICMyLCBhZGRpbmcgb24gdGhlCislIHNwZWNpZmllZCBmb250IHByZWZpeCAobm9ybWFsbHkgYGNtJykuCislICMzIGlzIHRoZSBmb250J3MgZGVzaWduIHNpemUsICM0IGlzIGEgc2NhbGUgZmFjdG9yLCAjNSBpcyB0aGUgQ01hcAorJSBlbmNvZGluZyAoY3VycmVudGx5IG9ubHkgT1QxLCBPVDFJVCBhbmQgT1QxVFQgYXJlIGFsbG93ZWQsIHBhc3MKKyUgZW1wdHkgdG8gb21pdCkuCitcZGVmXHNldGZvbnQjMSMyIzMjNCM1eyUKKyAgXGZvbnQjMT1cZm9udHByZWZpeCMyIzMgc2NhbGVkICM0CisgIFxjc25hbWUgY21hcCM1XGVuZGNzbmFtZSMxJQorfQorJSBUaGlzIGlzIHdoYXQgZ2V0cyBjYWxsZWQgd2hlbiAjNSBvZiBcc2V0Zm9udCBpcyBlbXB0eS4KK1xsZXRcY21hcFxnb2JibGUKKyUgZW1hY3MtcGFnZSBlbmQgb2YgY21hcHMKKworJSBVc2UgY20gYXMgdGhlIGRlZmF1bHQgZm9udCBwcmVmaXguCislIFRvIHNwZWNpZnkgdGhlIGZvbnQgcHJlZml4LCB5b3UgbXVzdCBkZWZpbmUgXGZvbnRwcmVmaXgKKyUgYmVmb3JlIHlvdSByZWFkIGluIHRleGluZm8udGV4LgorXGlmeFxmb250cHJlZml4XHVuZGVmaW5lZAorXGRlZlxmb250cHJlZml4e2NtfQorXGZpCislIFN1cHBvcnQgZm9udCBmYW1pbGllcyB0aGF0IGRvbid0IHVzZSB0aGUgc2FtZSBuYW1pbmcgc2NoZW1lIGFzIENNLgorXGRlZlxybXNoYXBle3J9CitcZGVmXHJtYnNoYXBle2J4fSAgICAgICAgICAgICAgICV3aGVyZSB0aGUgbm9ybWFsIGZhY2UgaXMgYm9sZAorXGRlZlxiZnNoYXBle2J9CitcZGVmXGJ4c2hhcGV7Ynh9CitcZGVmXHR0c2hhcGV7dHR9CitcZGVmXHR0YnNoYXBle3R0fQorXGRlZlx0dHNsc2hhcGV7c2x0dH0KK1xkZWZcaXRzaGFwZXt0aX0KK1xkZWZcaXRic2hhcGV7Ynh0aX0KK1xkZWZcc2xzaGFwZXtzbH0KK1xkZWZcc2xic2hhcGV7YnhzbH0KK1xkZWZcc2ZzaGFwZXtzc30KK1xkZWZcc2Zic2hhcGV7c3N9CitcZGVmXHNjc2hhcGV7Y3NjfQorXGRlZlxzY2JzaGFwZXtjc2N9CisKKyUgRGVmaW5pdGlvbnMgZm9yIGEgbWFpbiB0ZXh0IHNpemUgb2YgMTFwdC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgaW4KKyUgVGV4aW5mby4KKyUKK1xkZWZcZGVmaW5ldGV4dGZvbnRzaXpleGl7JQorJSBUZXh0IGZvbnRzICgxMS4ycHQsIG1hZ3N0ZXAxKS4KK1xkZWZcdGV4dG5vbWluYWxzaXplezExcHR9CitcZWRlZlxtYWlubWFnc3RlcHtcbWFnc3RlcGhhbGZ9Citcc2V0Zm9udFx0ZXh0cm1ccm1zaGFwZXsxMH17XG1haW5tYWdzdGVwfXtPVDF9Citcc2V0Zm9udFx0ZXh0dHRcdHRzaGFwZXsxMH17XG1haW5tYWdzdGVwfXtPVDFUVH0KK1xzZXRmb250XHRleHRiZlxiZnNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9e09UMX0KK1xzZXRmb250XHRleHRpdFxpdHNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9e09UMUlUfQorXHNldGZvbnRcdGV4dHNsXHNsc2hhcGV7MTB9e1xtYWlubWFnc3RlcH17T1QxfQorXHNldGZvbnRcdGV4dHNmXHNmc2hhcGV7MTB9e1xtYWlubWFnc3RlcH17T1QxfQorXHNldGZvbnRcdGV4dHNjXHNjc2hhcGV7MTB9e1xtYWlubWFnc3RlcH17T1QxfQorXHNldGZvbnRcdGV4dHR0c2xcdHRzbHNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9e09UMVRUfQorXGZvbnRcdGV4dGk9Y21taTEwIHNjYWxlZCBcbWFpbm1hZ3N0ZXAKK1xmb250XHRleHRzeT1jbXN5MTAgc2NhbGVkIFxtYWlubWFnc3RlcAorXGRlZlx0ZXh0ZWNzaXplezEwOTV9CisKKyUgQSBmZXcgZm9udHMgZm9yIEBkZWZ1biBuYW1lcyBhbmQgYXJncy4KK1xzZXRmb250XGRlZmJmXGJmc2hhcGV7MTB9e1xtYWdzdGVwMX17T1QxfQorXHNldGZvbnRcZGVmdHRcdHRzaGFwZXsxMH17XG1hZ3N0ZXAxfXtPVDFUVH0KK1xzZXRmb250XGRlZnR0c2xcdHRzbHNoYXBlezEwfXtcbWFnc3RlcDF9e09UMVRUfQorXGRlZlxkZntcbGV0XHRlbnR0PVxkZWZ0dCBcbGV0XHRlbmJmID0gXGRlZmJmIFxsZXRcdGVudHRzbD1cZGVmdHRzbCBcYmZ9CisKKyUgRm9udHMgZm9yIGluZGljZXMsIGZvb3Rub3Rlcywgc21hbGwgZXhhbXBsZXMgKDlwdCkuCitcZGVmXHNtYWxsbm9taW5hbHNpemV7OXB0fQorXHNldGZvbnRcc21hbGxybVxybXNoYXBlezl9ezEwMDB9e09UMX0KK1xzZXRmb250XHNtYWxsdHRcdHRzaGFwZXs5fXsxMDAwfXtPVDFUVH0KK1xzZXRmb250XHNtYWxsYmZcYmZzaGFwZXsxMH17OTAwfXtPVDF9Citcc2V0Zm9udFxzbWFsbGl0XGl0c2hhcGV7OX17MTAwMH17T1QxSVR9Citcc2V0Zm9udFxzbWFsbHNsXHNsc2hhcGV7OX17MTAwMH17T1QxfQorXHNldGZvbnRcc21hbGxzZlxzZnNoYXBlezl9ezEwMDB9e09UMX0KK1xzZXRmb250XHNtYWxsc2Ncc2NzaGFwZXsxMH17OTAwfXtPVDF9Citcc2V0Zm9udFxzbWFsbHR0c2xcdHRzbHNoYXBlezEwfXs5MDB9e09UMVRUfQorXGZvbnRcc21hbGxpPWNtbWk5CitcZm9udFxzbWFsbHN5PWNtc3k5CitcZGVmXHNtYWxsZWNzaXplezA5MDB9CisKKyUgRm9udHMgZm9yIHNtYWxsIGV4YW1wbGVzICg4cHQpLgorXGRlZlxzbWFsbGVybm9taW5hbHNpemV7OHB0fQorXHNldGZvbnRcc21hbGxlcnJtXHJtc2hhcGV7OH17MTAwMH17T1QxfQorXHNldGZvbnRcc21hbGxlcnR0XHR0c2hhcGV7OH17MTAwMH17T1QxVFR9Citcc2V0Zm9udFxzbWFsbGVyYmZcYmZzaGFwZXsxMH17ODAwfXtPVDF9Citcc2V0Zm9udFxzbWFsbGVyaXRcaXRzaGFwZXs4fXsxMDAwfXtPVDFJVH0KK1xzZXRmb250XHNtYWxsZXJzbFxzbHNoYXBlezh9ezEwMDB9e09UMX0KK1xzZXRmb250XHNtYWxsZXJzZlxzZnNoYXBlezh9ezEwMDB9e09UMX0KK1xzZXRmb250XHNtYWxsZXJzY1xzY3NoYXBlezEwfXs4MDB9e09UMX0KK1xzZXRmb250XHNtYWxsZXJ0dHNsXHR0c2xzaGFwZXsxMH17ODAwfXtPVDFUVH0KK1xmb250XHNtYWxsZXJpPWNtbWk4CitcZm9udFxzbWFsbGVyc3k9Y21zeTgKK1xkZWZcc21hbGxlcmVjc2l6ZXswODAwfQorCislIEZvbnRzIGZvciB0aXRsZSBwYWdlICgyMC40cHQpOgorXGRlZlx0aXRsZW5vbWluYWxzaXplezIwcHR9Citcc2V0Zm9udFx0aXRsZXJtXHJtYnNoYXBlezEyfXtcbWFnc3RlcDN9e09UMX0KK1xzZXRmb250XHRpdGxlaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwNH17T1QxSVR9Citcc2V0Zm9udFx0aXRsZXNsXHNsYnNoYXBlezEwfXtcbWFnc3RlcDR9e09UMX0KK1xzZXRmb250XHRpdGxldHRcdHRic2hhcGV7MTJ9e1xtYWdzdGVwM317T1QxVFR9Citcc2V0Zm9udFx0aXRsZXR0c2xcdHRzbHNoYXBlezEwfXtcbWFnc3RlcDR9e09UMVRUfQorXHNldGZvbnRcdGl0bGVzZlxzZmJzaGFwZXsxN317XG1hZ3N0ZXAxfXtPVDF9CitcbGV0XHRpdGxlYmY9XHRpdGxlcm0KK1xzZXRmb250XHRpdGxlc2Ncc2Nic2hhcGV7MTB9e1xtYWdzdGVwNH17T1QxfQorXGZvbnRcdGl0bGVpPWNtbWkxMiBzY2FsZWQgXG1hZ3N0ZXAzCitcZm9udFx0aXRsZXN5PWNtc3kxMCBzY2FsZWQgXG1hZ3N0ZXA0CitcZGVmXHRpdGxlZWNzaXplezIwNzR9CisKKyUgQ2hhcHRlciAoYW5kIHVubnVtYmVyZWQpIGZvbnRzICgxNy4yOHB0KS4KK1xkZWZcY2hhcG5vbWluYWxzaXplezE3cHR9Citcc2V0Zm9udFxjaGFwcm1ccm1ic2hhcGV7MTJ9e1xtYWdzdGVwMn17T1QxfQorXHNldGZvbnRcY2hhcGl0XGl0YnNoYXBlezEwfXtcbWFnc3RlcDN9e09UMUlUfQorXHNldGZvbnRcY2hhcHNsXHNsYnNoYXBlezEwfXtcbWFnc3RlcDN9e09UMX0KK1xzZXRmb250XGNoYXB0dFx0dGJzaGFwZXsxMn17XG1hZ3N0ZXAyfXtPVDFUVH0KK1xzZXRmb250XGNoYXB0dHNsXHR0c2xzaGFwZXsxMH17XG1hZ3N0ZXAzfXtPVDFUVH0KK1xzZXRmb250XGNoYXBzZlxzZmJzaGFwZXsxN317MTAwMH17T1QxfQorXGxldFxjaGFwYmY9XGNoYXBybQorXHNldGZvbnRcY2hhcHNjXHNjYnNoYXBlezEwfXtcbWFnc3RlcDN9e09UMX0KK1xmb250XGNoYXBpPWNtbWkxMiBzY2FsZWQgXG1hZ3N0ZXAyCitcZm9udFxjaGFwc3k9Y21zeTEwIHNjYWxlZCBcbWFnc3RlcDMKK1xkZWZcY2hhcGVjc2l6ZXsxNzI4fQorCislIFNlY3Rpb24gZm9udHMgKDE0LjRwdCkuCitcZGVmXHNlY25vbWluYWxzaXplezE0cHR9Citcc2V0Zm9udFxzZWNybVxybWJzaGFwZXsxMn17XG1hZ3N0ZXAxfXtPVDF9Citcc2V0Zm9udFxzZWNpdFxpdGJzaGFwZXsxMH17XG1hZ3N0ZXAyfXtPVDFJVH0KK1xzZXRmb250XHNlY3NsXHNsYnNoYXBlezEwfXtcbWFnc3RlcDJ9e09UMX0KK1xzZXRmb250XHNlY3R0XHR0YnNoYXBlezEyfXtcbWFnc3RlcDF9e09UMVRUfQorXHNldGZvbnRcc2VjdHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwMn17T1QxVFR9Citcc2V0Zm9udFxzZWNzZlxzZmJzaGFwZXsxMn17XG1hZ3N0ZXAxfXtPVDF9CitcbGV0XHNlY2JmXHNlY3JtCitcc2V0Zm9udFxzZWNzY1xzY2JzaGFwZXsxMH17XG1hZ3N0ZXAyfXtPVDF9CitcZm9udFxzZWNpPWNtbWkxMiBzY2FsZWQgXG1hZ3N0ZXAxCitcZm9udFxzZWNzeT1jbXN5MTAgc2NhbGVkIFxtYWdzdGVwMgorXGRlZlxzZWNlY3NpemV7MTQ0MH0KKworJSBTdWJzZWN0aW9uIGZvbnRzICgxMy4xNXB0KS4KK1xkZWZcc3NlY25vbWluYWxzaXplezEzcHR9Citcc2V0Zm9udFxzc2Vjcm1ccm1ic2hhcGV7MTJ9e1xtYWdzdGVwaGFsZn17T1QxfQorXHNldGZvbnRcc3NlY2l0XGl0YnNoYXBlezEwfXsxMzE1fXtPVDFJVH0KK1xzZXRmb250XHNzZWNzbFxzbGJzaGFwZXsxMH17MTMxNX17T1QxfQorXHNldGZvbnRcc3NlY3R0XHR0YnNoYXBlezEyfXtcbWFnc3RlcGhhbGZ9e09UMVRUfQorXHNldGZvbnRcc3NlY3R0c2xcdHRzbHNoYXBlezEwfXsxMzE1fXtPVDFUVH0KK1xzZXRmb250XHNzZWNzZlxzZmJzaGFwZXsxMn17XG1hZ3N0ZXBoYWxmfXtPVDF9CitcbGV0XHNzZWNiZlxzc2Vjcm0KK1xzZXRmb250XHNzZWNzY1xzY2JzaGFwZXsxMH17MTMxNX17T1QxfQorXGZvbnRcc3NlY2k9Y21taTEyIHNjYWxlZCBcbWFnc3RlcGhhbGYKK1xmb250XHNzZWNzeT1jbXN5MTAgc2NhbGVkIDEzMTUKK1xkZWZcc3NlY2Vjc2l6ZXsxMjAwfQorCislIFJlZHVjZWQgZm9udHMgZm9yIEBhY3JvIGluIHRleHQgKDEwcHQpLgorXGRlZlxyZWR1Y2Vkbm9taW5hbHNpemV7MTBwdH0KK1xzZXRmb250XHJlZHVjZWRybVxybXNoYXBlezEwfXsxMDAwfXtPVDF9Citcc2V0Zm9udFxyZWR1Y2VkdHRcdHRzaGFwZXsxMH17MTAwMH17T1QxVFR9Citcc2V0Zm9udFxyZWR1Y2VkYmZcYmZzaGFwZXsxMH17MTAwMH17T1QxfQorXHNldGZvbnRccmVkdWNlZGl0XGl0c2hhcGV7MTB9ezEwMDB9e09UMUlUfQorXHNldGZvbnRccmVkdWNlZHNsXHNsc2hhcGV7MTB9ezEwMDB9e09UMX0KK1xzZXRmb250XHJlZHVjZWRzZlxzZnNoYXBlezEwfXsxMDAwfXtPVDF9Citcc2V0Zm9udFxyZWR1Y2Vkc2Ncc2NzaGFwZXsxMH17MTAwMH17T1QxfQorXHNldGZvbnRccmVkdWNlZHR0c2xcdHRzbHNoYXBlezEwfXsxMDAwfXtPVDFUVH0KK1xmb250XHJlZHVjZWRpPWNtbWkxMAorXGZvbnRccmVkdWNlZHN5PWNtc3kxMAorXGRlZlxyZWR1Y2VkZWNzaXplezEwMDB9CisKKyUgcmVzZXQgdGhlIGN1cnJlbnQgZm9udHMKK1x0ZXh0Zm9udHMKK1xybQorfSAlIGVuZCBvZiAxMXB0IHRleHQgZm9udCBzaXplIGRlZmluaXRpb25zCisKKworJSBEZWZpbml0aW9ucyB0byBtYWtlIHRoZSBtYWluIHRleHQgYmUgMTBwdCBDb21wdXRlciBNb2Rlcm4sIHdpdGgKKyUgc2VjdGlvbiwgY2hhcHRlciwgZXRjLiwgc2l6ZXMgZm9sbG93aW5nIHN1aXQuICBUaGlzIGlzIGZvciB0aGUgR05VCislIFByZXNzIHByaW50aW5nIG9mIHRoZSBFbWFjcyAyMiBtYW51YWwuICBNYXliZSBvdGhlciBtYW51YWxzIGluIHRoZQorJSBmdXR1cmUuICBVc2VkIHdpdGggQHNtYWxsYm9vaywgd2hpY2ggc2V0cyB0aGUgbGVhZGluZyB0byAxMnB0LgorJQorXGRlZlxkZWZpbmV0ZXh0Zm9udHNpemV4eyUKKyUgVGV4dCBmb250cyAoMTBwdCkuCitcZGVmXHRleHRub21pbmFsc2l6ZXsxMHB0fQorXGVkZWZcbWFpbm1hZ3N0ZXB7MTAwMH0KK1xzZXRmb250XHRleHRybVxybXNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9e09UMX0KK1xzZXRmb250XHRleHR0dFx0dHNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9e09UMVRUfQorXHNldGZvbnRcdGV4dGJmXGJmc2hhcGV7MTB9e1xtYWlubWFnc3RlcH17T1QxfQorXHNldGZvbnRcdGV4dGl0XGl0c2hhcGV7MTB9e1xtYWlubWFnc3RlcH17T1QxSVR9Citcc2V0Zm9udFx0ZXh0c2xcc2xzaGFwZXsxMH17XG1haW5tYWdzdGVwfXtPVDF9Citcc2V0Zm9udFx0ZXh0c2Zcc2ZzaGFwZXsxMH17XG1haW5tYWdzdGVwfXtPVDF9Citcc2V0Zm9udFx0ZXh0c2Ncc2NzaGFwZXsxMH17XG1haW5tYWdzdGVwfXtPVDF9Citcc2V0Zm9udFx0ZXh0dHRzbFx0dHNsc2hhcGV7MTB9e1xtYWlubWFnc3RlcH17T1QxVFR9CitcZm9udFx0ZXh0aT1jbW1pMTAgc2NhbGVkIFxtYWlubWFnc3RlcAorXGZvbnRcdGV4dHN5PWNtc3kxMCBzY2FsZWQgXG1haW5tYWdzdGVwCitcZGVmXHRleHRlY3NpemV7MTAwMH0KKworJSBBIGZldyBmb250cyBmb3IgQGRlZnVuIG5hbWVzIGFuZCBhcmdzLgorXHNldGZvbnRcZGVmYmZcYmZzaGFwZXsxMH17XG1hZ3N0ZXBoYWxmfXtPVDF9Citcc2V0Zm9udFxkZWZ0dFx0dHNoYXBlezEwfXtcbWFnc3RlcGhhbGZ9e09UMVRUfQorXHNldGZvbnRcZGVmdHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwaGFsZn17T1QxVFR9CitcZGVmXGRme1xsZXRcdGVudHQ9XGRlZnR0IFxsZXRcdGVuYmYgPSBcZGVmYmYgXGxldFx0ZW50dHNsPVxkZWZ0dHNsIFxiZn0KKworJSBGb250cyBmb3IgaW5kaWNlcywgZm9vdG5vdGVzLCBzbWFsbCBleGFtcGxlcyAoOXB0KS4KK1xkZWZcc21hbGxub21pbmFsc2l6ZXs5cHR9Citcc2V0Zm9udFxzbWFsbHJtXHJtc2hhcGV7OX17MTAwMH17T1QxfQorXHNldGZvbnRcc21hbGx0dFx0dHNoYXBlezl9ezEwMDB9e09UMVRUfQorXHNldGZvbnRcc21hbGxiZlxiZnNoYXBlezEwfXs5MDB9e09UMX0KK1xzZXRmb250XHNtYWxsaXRcaXRzaGFwZXs5fXsxMDAwfXtPVDFJVH0KK1xzZXRmb250XHNtYWxsc2xcc2xzaGFwZXs5fXsxMDAwfXtPVDF9Citcc2V0Zm9udFxzbWFsbHNmXHNmc2hhcGV7OX17MTAwMH17T1QxfQorXHNldGZvbnRcc21hbGxzY1xzY3NoYXBlezEwfXs5MDB9e09UMX0KK1xzZXRmb250XHNtYWxsdHRzbFx0dHNsc2hhcGV7MTB9ezkwMH17T1QxVFR9CitcZm9udFxzbWFsbGk9Y21taTkKK1xmb250XHNtYWxsc3k9Y21zeTkKK1xkZWZcc21hbGxlY3NpemV7MDkwMH0KKworJSBGb250cyBmb3Igc21hbGwgZXhhbXBsZXMgKDhwdCkuCitcZGVmXHNtYWxsZXJub21pbmFsc2l6ZXs4cHR9Citcc2V0Zm9udFxzbWFsbGVycm1ccm1zaGFwZXs4fXsxMDAwfXtPVDF9Citcc2V0Zm9udFxzbWFsbGVydHRcdHRzaGFwZXs4fXsxMDAwfXtPVDFUVH0KK1xzZXRmb250XHNtYWxsZXJiZlxiZnNoYXBlezEwfXs4MDB9e09UMX0KK1xzZXRmb250XHNtYWxsZXJpdFxpdHNoYXBlezh9ezEwMDB9e09UMUlUfQorXHNldGZvbnRcc21hbGxlcnNsXHNsc2hhcGV7OH17MTAwMH17T1QxfQorXHNldGZvbnRcc21hbGxlcnNmXHNmc2hhcGV7OH17MTAwMH17T1QxfQorXHNldGZvbnRcc21hbGxlcnNjXHNjc2hhcGV7MTB9ezgwMH17T1QxfQorXHNldGZvbnRcc21hbGxlcnR0c2xcdHRzbHNoYXBlezEwfXs4MDB9e09UMVRUfQorXGZvbnRcc21hbGxlcmk9Y21taTgKK1xmb250XHNtYWxsZXJzeT1jbXN5OAorXGRlZlxzbWFsbGVyZWNzaXplezA4MDB9CisKKyUgRm9udHMgZm9yIHRpdGxlIHBhZ2UgKDIwLjRwdCk6CitcZGVmXHRpdGxlbm9taW5hbHNpemV7MjBwdH0KK1xzZXRmb250XHRpdGxlcm1ccm1ic2hhcGV7MTJ9e1xtYWdzdGVwM317T1QxfQorXHNldGZvbnRcdGl0bGVpdFxpdGJzaGFwZXsxMH17XG1hZ3N0ZXA0fXtPVDFJVH0KK1xzZXRmb250XHRpdGxlc2xcc2xic2hhcGV7MTB9e1xtYWdzdGVwNH17T1QxfQorXHNldGZvbnRcdGl0bGV0dFx0dGJzaGFwZXsxMn17XG1hZ3N0ZXAzfXtPVDFUVH0KK1xzZXRmb250XHRpdGxldHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwNH17T1QxVFR9Citcc2V0Zm9udFx0aXRsZXNmXHNmYnNoYXBlezE3fXtcbWFnc3RlcDF9e09UMX0KK1xsZXRcdGl0bGViZj1cdGl0bGVybQorXHNldGZvbnRcdGl0bGVzY1xzY2JzaGFwZXsxMH17XG1hZ3N0ZXA0fXtPVDF9CitcZm9udFx0aXRsZWk9Y21taTEyIHNjYWxlZCBcbWFnc3RlcDMKK1xmb250XHRpdGxlc3k9Y21zeTEwIHNjYWxlZCBcbWFnc3RlcDQKK1xkZWZcdGl0bGVlY3NpemV7MjA3NH0KKworJSBDaGFwdGVyIGZvbnRzICgxNC40cHQpLgorXGRlZlxjaGFwbm9taW5hbHNpemV7MTRwdH0KK1xzZXRmb250XGNoYXBybVxybWJzaGFwZXsxMn17XG1hZ3N0ZXAxfXtPVDF9Citcc2V0Zm9udFxjaGFwaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwMn17T1QxSVR9Citcc2V0Zm9udFxjaGFwc2xcc2xic2hhcGV7MTB9e1xtYWdzdGVwMn17T1QxfQorXHNldGZvbnRcY2hhcHR0XHR0YnNoYXBlezEyfXtcbWFnc3RlcDF9e09UMVRUfQorXHNldGZvbnRcY2hhcHR0c2xcdHRzbHNoYXBlezEwfXtcbWFnc3RlcDJ9e09UMVRUfQorXHNldGZvbnRcY2hhcHNmXHNmYnNoYXBlezEyfXtcbWFnc3RlcDF9e09UMX0KK1xsZXRcY2hhcGJmXGNoYXBybQorXHNldGZvbnRcY2hhcHNjXHNjYnNoYXBlezEwfXtcbWFnc3RlcDJ9e09UMX0KK1xmb250XGNoYXBpPWNtbWkxMiBzY2FsZWQgXG1hZ3N0ZXAxCitcZm9udFxjaGFwc3k9Y21zeTEwIHNjYWxlZCBcbWFnc3RlcDIKK1xkZWZcY2hhcGVjc2l6ZXsxNDQwfQorCislIFNlY3Rpb24gZm9udHMgKDEycHQpLgorXGRlZlxzZWNub21pbmFsc2l6ZXsxMnB0fQorXHNldGZvbnRcc2Vjcm1ccm1ic2hhcGV7MTJ9ezEwMDB9e09UMX0KK1xzZXRmb250XHNlY2l0XGl0YnNoYXBlezEwfXtcbWFnc3RlcDF9e09UMUlUfQorXHNldGZvbnRcc2Vjc2xcc2xic2hhcGV7MTB9e1xtYWdzdGVwMX17T1QxfQorXHNldGZvbnRcc2VjdHRcdHRic2hhcGV7MTJ9ezEwMDB9e09UMVRUfQorXHNldGZvbnRcc2VjdHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwMX17T1QxVFR9Citcc2V0Zm9udFxzZWNzZlxzZmJzaGFwZXsxMn17MTAwMH17T1QxfQorXGxldFxzZWNiZlxzZWNybQorXHNldGZvbnRcc2Vjc2Ncc2Nic2hhcGV7MTB9e1xtYWdzdGVwMX17T1QxfQorXGZvbnRcc2VjaT1jbW1pMTIKK1xmb250XHNlY3N5PWNtc3kxMCBzY2FsZWQgXG1hZ3N0ZXAxCitcZGVmXHNlY2Vjc2l6ZXsxMjAwfQorCislIFN1YnNlY3Rpb24gZm9udHMgKDEwcHQpLgorXGRlZlxzc2Vjbm9taW5hbHNpemV7MTBwdH0KK1xzZXRmb250XHNzZWNybVxybWJzaGFwZXsxMH17MTAwMH17T1QxfQorXHNldGZvbnRcc3NlY2l0XGl0YnNoYXBlezEwfXsxMDAwfXtPVDFJVH0KK1xzZXRmb250XHNzZWNzbFxzbGJzaGFwZXsxMH17MTAwMH17T1QxfQorXHNldGZvbnRcc3NlY3R0XHR0YnNoYXBlezEwfXsxMDAwfXtPVDFUVH0KK1xzZXRmb250XHNzZWN0dHNsXHR0c2xzaGFwZXsxMH17MTAwMH17T1QxVFR9Citcc2V0Zm9udFxzc2Vjc2Zcc2Zic2hhcGV7MTB9ezEwMDB9e09UMX0KK1xsZXRcc3NlY2JmXHNzZWNybQorXHNldGZvbnRcc3NlY3NjXHNjYnNoYXBlezEwfXsxMDAwfXtPVDF9CitcZm9udFxzc2VjaT1jbW1pMTAKK1xmb250XHNzZWNzeT1jbXN5MTAKK1xkZWZcc3NlY2Vjc2l6ZXsxMDAwfQorCislIFJlZHVjZWQgZm9udHMgZm9yIEBhY3JvIGluIHRleHQgKDlwdCkuCitcZGVmXHJlZHVjZWRub21pbmFsc2l6ZXs5cHR9Citcc2V0Zm9udFxyZWR1Y2Vkcm1ccm1zaGFwZXs5fXsxMDAwfXtPVDF9Citcc2V0Zm9udFxyZWR1Y2VkdHRcdHRzaGFwZXs5fXsxMDAwfXtPVDFUVH0KK1xzZXRmb250XHJlZHVjZWRiZlxiZnNoYXBlezEwfXs5MDB9e09UMX0KK1xzZXRmb250XHJlZHVjZWRpdFxpdHNoYXBlezl9ezEwMDB9e09UMUlUfQorXHNldGZvbnRccmVkdWNlZHNsXHNsc2hhcGV7OX17MTAwMH17T1QxfQorXHNldGZvbnRccmVkdWNlZHNmXHNmc2hhcGV7OX17MTAwMH17T1QxfQorXHNldGZvbnRccmVkdWNlZHNjXHNjc2hhcGV7MTB9ezkwMH17T1QxfQorXHNldGZvbnRccmVkdWNlZHR0c2xcdHRzbHNoYXBlezEwfXs5MDB9e09UMVRUfQorXGZvbnRccmVkdWNlZGk9Y21taTkKK1xmb250XHJlZHVjZWRzeT1jbXN5OQorXGRlZlxyZWR1Y2VkZWNzaXplezA5MDB9CisKKyUgcmVkdWNlIHNwYWNlIGJldHdlZW4gcGFyYWdyYXBocworXGRpdmlkZVxwYXJza2lwIGJ5IDIKKworJSByZXNldCB0aGUgY3VycmVudCBmb250cworXHRleHRmb250cworXHJtCit9ICUgZW5kIG9mIDEwcHQgdGV4dCBmb250IHNpemUgZGVmaW5pdGlvbnMKKworCislIFdlIHByb3ZpZGUgdGhlIHVzZXItbGV2ZWwgY29tbWFuZAorJSAgIEBmb250dGV4dHNpemUgMTAKKyUgKG9yIDExKSB0byByZWRlZmluZSB0aGUgdGV4dCBmb250IHNpemUuICBwdCBpcyBhc3N1bWVkLgorJQorXGRlZlx4d29yZHsxMH0KK1xkZWZceGl3b3JkezExfQorJQorXHBhcnNlYXJnZGVmXGZvbnR0ZXh0c2l6ZXslCisgIFxkZWZcdGV4dHNpemVhcmd7IzF9JQorICBcd2xvZ3tkb2luZyBAZm9udHRleHRzaXplIFx0ZXh0c2l6ZWFyZ30lCisgICUKKyAgJSBTZXQgXGdsb2JhbGRlZnMgc28gdGhhdCBkb2N1bWVudHMgY2FuIHVzZSB0aGlzIGluc2lkZSBAdGV4LCBzaW5jZQorICAlIG1ha2VpbmZvIDQuOCBkb2VzIG5vdCBzdXBwb3J0IGl0LCBidXQgd2UgbmVlZCBpdCBub25ldGhlbGVzcy4KKyAgJQorIFxiZWdpbmdyb3VwIFxnbG9iYWxkZWZzPTEKKyAgXGlmeFx0ZXh0c2l6ZWFyZ1x4d29yZCBcZGVmaW5ldGV4dGZvbnRzaXpleAorICBcZWxzZSBcaWZ4XHRleHRzaXplYXJnXHhpd29yZCBcZGVmaW5ldGV4dGZvbnRzaXpleGkKKyAgXGVsc2UKKyAgICBcZXJyaGVscD1cRU1zaW1wbGUKKyAgICBcZXJybWVzc2FnZXtAZm9udHRleHRzaXplIG9ubHkgc3VwcG9ydHMgYDEwJyBvciBgMTEnLCBub3QgYFx0ZXh0c2l6ZWFyZyd9CisgIFxmaVxmaQorIFxlbmRncm91cAorfQorCisKKyUgSW4gb3JkZXIgZm9yIHRoZSBmb250IGNoYW5nZXMgdG8gYWZmZWN0IG1vc3QgbWF0aCBzeW1ib2xzIGFuZCBsZXR0ZXJzLAorJSB3ZSBoYXZlIHRvIGRlZmluZSB0aGUgXHRleHRmb250IG9mIHRoZSBzdGFuZGFyZCBmYW1pbGllcy4gIFNpbmNlCislIHRleGluZm8gZG9lc24ndCBhbGxvdyBmb3IgcHJvZHVjaW5nIHN1YnNjcmlwdHMgYW5kIHN1cGVyc2NyaXB0cyBleGNlcHQKKyUgaW4gdGhlIG1haW4gdGV4dCwgd2UgZG9uJ3QgYm90aGVyIHRvIHJlc2V0IFxzY3JpcHRmb250IGFuZAorJSBcc2NyaXB0c2NyaXB0Zm9udCAod2hpY2ggd291bGQgYWxzbyByZXF1aXJlIGxvYWRpbmcgYSBsb3QgbW9yZSBmb250cykuCislCitcZGVmXHJlc2V0bWF0aGZvbnRzeyUKKyAgXHRleHRmb250MD1cdGVucm0gXHRleHRmb250MT1cdGVuaSBcdGV4dGZvbnQyPVx0ZW5zeQorICBcdGV4dGZvbnRcaXRmYW09XHRlbml0IFx0ZXh0Zm9udFxzbGZhbT1cdGVuc2wgXHRleHRmb250XGJmZmFtPVx0ZW5iZgorICBcdGV4dGZvbnRcdHRmYW09XHRlbnR0IFx0ZXh0Zm9udFxzZmZhbT1cdGVuc2YKK30KKworJSBUaGUgZm9udC1jaGFuZ2luZyBjb21tYW5kcyByZWRlZmluZSB0aGUgbWVhbmluZ3Mgb2YgXHRlblNUWUxFLCBpbnN0ZWFkCislIG9mIGp1c3QgXFNUWUxFLiAgV2UgZG8gdGhpcyBiZWNhdXNlIFxTVFlMRSBuZWVkcyB0byBhbHNvIHNldCB0aGUKKyUgY3VycmVudCBcZmFtIGZvciBtYXRoIG1vZGUuICBPdXIgXFNUWUxFIChlLmcuLCBccm0pIGNvbW1hbmRzIGhhcmR3aXJlCislIFx0ZW5TVFlMRSB0byBzZXQgdGhlIGN1cnJlbnQgZm9udC4KKyUKKyUgRWFjaCBmb250LWNoYW5naW5nIGNvbW1hbmQgYWxzbyBzZXRzIHRoZSBuYW1lcyBcbHNpemUgKG9uZSBzaXplIGxvd2VyKQorJSBhbmQgXGxsbHNpemUgKHRocmVlIHNpemVzIGxvd2VyKS4gIFRoZXNlIHJlbGF0aXZlIGNvbW1hbmRzIGFyZSB1c2VkIGluCislIHRoZSBMYVRlWCBsb2dvIGFuZCBhY3Jvbnltcy4KKyUKKyUgVGhpcyBhbGwgbmVlZHMgZ2VuZXJhbGl6aW5nLCBiYWRseS4KKyUKK1xkZWZcdGV4dGZvbnRzeyUKKyAgXGxldFx0ZW5ybT1cdGV4dHJtIFxsZXRcdGVuaXQ9XHRleHRpdCBcbGV0XHRlbnNsPVx0ZXh0c2wKKyAgXGxldFx0ZW5iZj1cdGV4dGJmIFxsZXRcdGVudHQ9XHRleHR0dCBcbGV0XHNtYWxsY2Fwcz1cdGV4dHNjCisgIFxsZXRcdGVuc2Y9XHRleHRzZiBcbGV0XHRlbmk9XHRleHRpIFxsZXRcdGVuc3k9XHRleHRzeQorICBcbGV0XHRlbnR0c2w9XHRleHR0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7dGV4dH0lCisgIFxkZWZcbHNpemV7cmVkdWNlZH1cZGVmXGxsbHNpemV7c21hbGxlcn0lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3tcdGV4dGxlYWRpbmd9fQorXGRlZlx0aXRsZWZvbnRzeyUKKyAgXGxldFx0ZW5ybT1cdGl0bGVybSBcbGV0XHRlbml0PVx0aXRsZWl0IFxsZXRcdGVuc2w9XHRpdGxlc2wKKyAgXGxldFx0ZW5iZj1cdGl0bGViZiBcbGV0XHRlbnR0PVx0aXRsZXR0IFxsZXRcc21hbGxjYXBzPVx0aXRsZXNjCisgIFxsZXRcdGVuc2Y9XHRpdGxlc2YgXGxldFx0ZW5pPVx0aXRsZWkgXGxldFx0ZW5zeT1cdGl0bGVzeQorICBcbGV0XHRlbnR0c2w9XHRpdGxldHRzbAorICBcZGVmXGN1cmZvbnRzaXple3RpdGxlfSUKKyAgXGRlZlxsc2l6ZXtjaGFwfVxkZWZcbGxsc2l6ZXtzdWJzZWN9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7MjVwdH19CitcZGVmXHRpdGxlZm9udCMxe3tcdGl0bGVmb250c1xybWlzYm9sZCAjMX19CitcZGVmXGNoYXBmb250c3slCisgIFxsZXRcdGVucm09XGNoYXBybSBcbGV0XHRlbml0PVxjaGFwaXQgXGxldFx0ZW5zbD1cY2hhcHNsCisgIFxsZXRcdGVuYmY9XGNoYXBiZiBcbGV0XHRlbnR0PVxjaGFwdHQgXGxldFxzbWFsbGNhcHM9XGNoYXBzYworICBcbGV0XHRlbnNmPVxjaGFwc2YgXGxldFx0ZW5pPVxjaGFwaSBcbGV0XHRlbnN5PVxjaGFwc3kKKyAgXGxldFx0ZW50dHNsPVxjaGFwdHRzbAorICBcZGVmXGN1cmZvbnRzaXple2NoYXB9JQorICBcZGVmXGxzaXple3NlY31cZGVmXGxsbHNpemV7dGV4dH0lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3sxOXB0fX0KK1xkZWZcc2VjZm9udHN7JQorICBcbGV0XHRlbnJtPVxzZWNybSBcbGV0XHRlbml0PVxzZWNpdCBcbGV0XHRlbnNsPVxzZWNzbAorICBcbGV0XHRlbmJmPVxzZWNiZiBcbGV0XHRlbnR0PVxzZWN0dCBcbGV0XHNtYWxsY2Fwcz1cc2Vjc2MKKyAgXGxldFx0ZW5zZj1cc2Vjc2YgXGxldFx0ZW5pPVxzZWNpIFxsZXRcdGVuc3k9XHNlY3N5CisgIFxsZXRcdGVudHRzbD1cc2VjdHRzbAorICBcZGVmXGN1cmZvbnRzaXple3NlY30lCisgIFxkZWZcbHNpemV7c3Vic2VjfVxkZWZcbGxsc2l6ZXtyZWR1Y2VkfSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5nezE2cHR9fQorXGRlZlxzdWJzZWNmb250c3slCisgIFxsZXRcdGVucm09XHNzZWNybSBcbGV0XHRlbml0PVxzc2VjaXQgXGxldFx0ZW5zbD1cc3NlY3NsCisgIFxsZXRcdGVuYmY9XHNzZWNiZiBcbGV0XHRlbnR0PVxzc2VjdHQgXGxldFxzbWFsbGNhcHM9XHNzZWNzYworICBcbGV0XHRlbnNmPVxzc2Vjc2YgXGxldFx0ZW5pPVxzc2VjaSBcbGV0XHRlbnN5PVxzc2Vjc3kKKyAgXGxldFx0ZW50dHNsPVxzc2VjdHRzbAorICBcZGVmXGN1cmZvbnRzaXple3NzZWN9JQorICBcZGVmXGxzaXple3RleHR9XGRlZlxsbGxzaXple3NtYWxsfSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5nezE1cHR9fQorXGxldFxzdWJzdWJzZWNmb250cyA9IFxzdWJzZWNmb250cworXGRlZlxyZWR1Y2VkZm9udHN7JQorICBcbGV0XHRlbnJtPVxyZWR1Y2Vkcm0gXGxldFx0ZW5pdD1ccmVkdWNlZGl0IFxsZXRcdGVuc2w9XHJlZHVjZWRzbAorICBcbGV0XHRlbmJmPVxyZWR1Y2VkYmYgXGxldFx0ZW50dD1ccmVkdWNlZHR0IFxsZXRccmVkdWNlZGNhcHM9XHJlZHVjZWRzYworICBcbGV0XHRlbnNmPVxyZWR1Y2Vkc2YgXGxldFx0ZW5pPVxyZWR1Y2VkaSBcbGV0XHRlbnN5PVxyZWR1Y2Vkc3kKKyAgXGxldFx0ZW50dHNsPVxyZWR1Y2VkdHRzbAorICBcZGVmXGN1cmZvbnRzaXple3JlZHVjZWR9JQorICBcZGVmXGxzaXple3NtYWxsfVxkZWZcbGxsc2l6ZXtzbWFsbGVyfSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5nezEwLjVwdH19CitcZGVmXHNtYWxsZm9udHN7JQorICBcbGV0XHRlbnJtPVxzbWFsbHJtIFxsZXRcdGVuaXQ9XHNtYWxsaXQgXGxldFx0ZW5zbD1cc21hbGxzbAorICBcbGV0XHRlbmJmPVxzbWFsbGJmIFxsZXRcdGVudHQ9XHNtYWxsdHQgXGxldFxzbWFsbGNhcHM9XHNtYWxsc2MKKyAgXGxldFx0ZW5zZj1cc21hbGxzZiBcbGV0XHRlbmk9XHNtYWxsaSBcbGV0XHRlbnN5PVxzbWFsbHN5CisgIFxsZXRcdGVudHRzbD1cc21hbGx0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7c21hbGx9JQorICBcZGVmXGxzaXple3NtYWxsZXJ9XGRlZlxsbGxzaXple3NtYWxsZXJ9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7MTAuNXB0fX0KK1xkZWZcc21hbGxlcmZvbnRzeyUKKyAgXGxldFx0ZW5ybT1cc21hbGxlcnJtIFxsZXRcdGVuaXQ9XHNtYWxsZXJpdCBcbGV0XHRlbnNsPVxzbWFsbGVyc2wKKyAgXGxldFx0ZW5iZj1cc21hbGxlcmJmIFxsZXRcdGVudHQ9XHNtYWxsZXJ0dCBcbGV0XHNtYWxsY2Fwcz1cc21hbGxlcnNjCisgIFxsZXRcdGVuc2Y9XHNtYWxsZXJzZiBcbGV0XHRlbmk9XHNtYWxsZXJpIFxsZXRcdGVuc3k9XHNtYWxsZXJzeQorICBcbGV0XHRlbnR0c2w9XHNtYWxsZXJ0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7c21hbGxlcn0lCisgIFxkZWZcbHNpemV7c21hbGxlcn1cZGVmXGxsbHNpemV7c21hbGxlcn0lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3s5LjVwdH19CisKKyUgRm9udHMgZm9yIHNob3J0IHRhYmxlIG9mIGNvbnRlbnRzLgorXHNldGZvbnRcc2hvcnRjb250cm1ccm1zaGFwZXsxMn17MTAwMH17T1QxfQorXHNldGZvbnRcc2hvcnRjb250YmZcYmZzaGFwZXsxMH17XG1hZ3N0ZXAxfXtPVDF9ICAlIG5vIGNtYjEyCitcc2V0Zm9udFxzaG9ydGNvbnRzbFxzbHNoYXBlezEyfXsxMDAwfXtPVDF9Citcc2V0Zm9udFxzaG9ydGNvbnR0dFx0dHNoYXBlezEyfXsxMDAwfXtPVDFUVH0KKworJSBEZWZpbmUgdGhlc2UganVzdCBzbyB0aGV5IGNhbiBiZSBlYXNpbHkgY2hhbmdlZCBmb3Igb3RoZXIgZm9udHMuCitcZGVmXGFuZ2xlbGVmdHskXGxhbmdsZSR9CitcZGVmXGFuZ2xlcmlnaHR7JFxyYW5nbGUkfQorCislIFNldCB0aGUgZm9udHMgdG8gdXNlIHdpdGggdGhlIEBzbWFsbC4uLiBlbnZpcm9ubWVudHMuCitcbGV0XHNtYWxsZXhhbXBsZWZvbnRzID0gXHNtYWxsZm9udHMKKworJSBBYm91dCBcc21hbGxleGFtcGxlZm9udHMuICBJZiB3ZSB1c2UgXHNtYWxsZm9udHMgKDlwdCksIEBzbWFsbGV4YW1wbGUKKyUgY2FuIGZpdCB0aGlzIG1hbnkgY2hhcmFjdGVyczoKKyUgICA4LjV4MTE9ODYgICBzbWFsbGJvb2s9NzIgIGE0PTkwICBhNT02OQorJSBJZiB3ZSB1c2UgXHNjcmlwdGZvbnRzICg4cHQpLCB0aGVuIHdlIGNhbiBmaXQgdGhpcyBtYW55IGNoYXJhY3RlcnM6CislICAgOC41eDExPTkwKyAgc21hbGxib29rPTgwICBhND05MCsgIGE1PTc3CislIEZvciBtZSwgc3ViamVjdGl2ZWx5LCB0aGUgZmV3IGV4dHJhIGNoYXJhY3RlcnMgdGhhdCBmaXQgYXJlbid0IHdvcnRoCislIHRoZSBhZGRpdGlvbmFsIHNtYWxsbmVzcyBvZiA4cHQuICBTbyBJJ20gbWFraW5nIHRoZSBkZWZhdWx0IDlwdC4KKyUKKyUgQnkgdGhlIHdheSwgZm9yIGNvbXBhcmlzb24sIGhlcmUncyB3aGF0IGZpdHMgd2l0aCBAZXhhbXBsZSAoMTBwdCk6CislICAgOC41eDExPTcxICBzbWFsbGJvb2s9NjAgIGE0PTc1ICBhNT01OAorJSAtLWthcmwsIDI0amFuMDMuCisKKyUgU2V0IHVwIHRoZSBkZWZhdWx0IGZvbnRzLCBzbyB3ZSBjYW4gdXNlIHRoZW0gZm9yIGNyZWF0aW5nIGJveGVzLgorJQorXGRlZmluZXRleHRmb250c2l6ZXhpCisKKworXG1lc3NhZ2V7bWFya3VwLH0KKworJSBDaGVjayBpZiB3ZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgdHlwZXdyaXRlciBmb250LiAgU2luY2UgYWxsIHRoZQorJSBDb21wdXRlciBNb2Rlcm4gdHlwZXdyaXRlciBmb250cyBoYXZlIHplcm8gaW50ZXJ3b3JkIHN0cmV0Y2ggKGFuZAorJSBzaHJpbmspLCBhbmQgaXQgaXMgcmVhc29uYWJsZSB0byBleHBlY3QgYWxsIHR5cGV3cml0ZXIgZm9udHMgdG8gaGF2ZQorJSB0aGlzIHByb3BlcnR5LCB3ZSBjYW4gY2hlY2sgdGhhdCBmb250IHBhcmFtZXRlci4KKyUKK1xkZWZcaWZtb25vc3BhY2V7XGlmZGltXGZvbnRkaW1lbjNcZm9udD0wcHQgfQorCislIE1hcmt1cCBzdHlsZSBpbmZyYXN0cnVjdHVyZS4gIFxkZWZtYXJrdXBzdHlsZXNldHVwXElOSVRNQUNSTyB3aWxsCislIGRlZmluZSBhbmQgcmVnaXN0ZXIgXElOSVRNQUNSTyB0byBiZSBjYWxsZWQgb24gbWFya3VwIHN0eWxlIGNoYW5nZXMuCislIFxJTklUTUFDUk8gY2FuIGNoZWNrIFxjdXJyZW50bWFya3Vwc3R5bGUgZm9yIHRoZSBpbm5lcm1vc3QKKyUgc3R5bGUgYW5kIHRoZSBzZXQgb2YgXGlmbWFya3VwU1RZTEUgc3dpdGNoZXMgZm9yIGFsbCBzdHlsZXMKKyUgY3VycmVudGx5IGluIGVmZmVjdC4KK1xuZXdpZlxpZm1hcmt1cHZhcgorXG5ld2lmXGlmbWFya3Vwc2FtcAorXG5ld2lmXGlmbWFya3Vwa2V5CislXG5ld2lmXGlmbWFya3VwZmlsZSAlIEBmaWxlID09IEBzYW1wLgorJVxuZXdpZlxpZm1hcmt1cG9wdGlvbiAlIEBvcHRpb24gPT0gQHNhbXAuCitcbmV3aWZcaWZtYXJrdXBjb2RlCitcbmV3aWZcaWZtYXJrdXBrYmQKKyVcbmV3aWZcaWZtYXJrdXBlbnYgJSBAZW52ID09IEBjb2RlLgorJVxuZXdpZlxpZm1hcmt1cGNvbW1hbmQgJSBAY29tbWFuZCA9PSBAY29kZS4KK1xuZXdpZlxpZm1hcmt1cHRleCAlIEB0ZXggKGFuZCBwYXJ0IG9mIEBtYXRoLCBmb3Igbm93KS4KK1xuZXdpZlxpZm1hcmt1cGV4YW1wbGUKK1xuZXdpZlxpZm1hcmt1cHZlcmIKK1xuZXdpZlxpZm1hcmt1cHZlcmJhdGltCisKK1xsZXRcY3VycmVudG1hcmt1cHN0eWxlXGVtcHR5CisKK1xkZWZcc2V0dXBtYXJrdXBzdHlsZSMxeyUKKyAgXGNzbmFtZSBtYXJrdXAjMXRydWVcZW5kY3NuYW1lCisgIFxkZWZcY3VycmVudG1hcmt1cHN0eWxleyMxfSUKKyAgXG1hcmt1cHN0eWxlc2V0dXAKK30KKworXGxldFxtYXJrdXBzdHlsZXNldHVwXGVtcHR5CisKK1xkZWZcZGVmbWFya3Vwc3R5bGVzZXR1cCMxeyUKKyAgXGV4cGFuZGFmdGVyXGRlZlxleHBhbmRhZnRlclxtYXJrdXBzdHlsZXNldHVwCisgICAgXGV4cGFuZGFmdGVye1xtYXJrdXBzdHlsZXNldHVwICMxfSUKKyAgXGRlZiMxJQorfQorCislIE1hcmt1cCBzdHlsZSBzZXR1cCBmb3IgbGVmdCBhbmQgcmlnaHQgcXVvdGVzLgorXGRlZm1hcmt1cHN0eWxlc2V0dXBcbWFya3Vwc2V0dXBscXslCisgIFxleHBhbmRhZnRlclxsZXRcZXhwYW5kYWZ0ZXIgXHRlbXAgXGNzbmFtZSBtYXJrdXBzZXR1cGxxXGN1cnJlbnRtYXJrdXBzdHlsZVxlbmRjc25hbWUKKyAgXGlmeFx0ZW1wXHJlbGF4IFxtYXJrdXBzZXR1cGxxZGVmYXVsdCBcZWxzZSBcdGVtcCBcZmkKK30KKworXGRlZm1hcmt1cHN0eWxlc2V0dXBcbWFya3Vwc2V0dXBycXslCisgIFxleHBhbmRhZnRlclxsZXRcZXhwYW5kYWZ0ZXIgXHRlbXAgXGNzbmFtZSBtYXJrdXBzZXR1cHJxXGN1cnJlbnRtYXJrdXBzdHlsZVxlbmRjc25hbWUKKyAgXGlmeFx0ZW1wXHJlbGF4IFxtYXJrdXBzZXR1cHJxZGVmYXVsdCBcZWxzZSBcdGVtcCBcZmkKK30KKworeworXGNhdGNvZGVgXCc9XGFjdGl2ZQorXGNhdGNvZGVgXGA9XGFjdGl2ZQorCitcZ2RlZlxtYXJrdXBzZXR1cGxxZGVmYXVsdHtcbGV0YFxscX0KK1xnZGVmXG1hcmt1cHNldHVwcnFkZWZhdWx0e1xsZXQnXHJxfQorCitcZ2RlZlxtYXJrdXBzZXRjb2RlcXVvdGVsZWZ0e1xsZXRgXGNvZGVxdW90ZWxlZnR9CitcZ2RlZlxtYXJrdXBzZXRjb2RlcXVvdGVyaWdodHtcbGV0J1xjb2RlcXVvdGVyaWdodH0KKworXGdkZWZcbWFya3Vwc2V0bm9saWdhdHVyZXNxdW90ZWxlZnR7XGxldGBcbm9saWdhdHVyZXNxdW90ZWxlZnR9Cit9CisKK1xsZXRcbWFya3Vwc2V0dXBscWNvZGUgXG1hcmt1cHNldGNvZGVxdW90ZWxlZnQKK1xsZXRcbWFya3Vwc2V0dXBycWNvZGUgXG1hcmt1cHNldGNvZGVxdW90ZXJpZ2h0CitcbGV0XG1hcmt1cHNldHVwbHFleGFtcGxlIFxtYXJrdXBzZXRjb2RlcXVvdGVsZWZ0CitcbGV0XG1hcmt1cHNldHVwcnFleGFtcGxlIFxtYXJrdXBzZXRjb2RlcXVvdGVyaWdodAorXGxldFxtYXJrdXBzZXR1cGxxdmVyYiBcbWFya3Vwc2V0Y29kZXF1b3RlbGVmdAorXGxldFxtYXJrdXBzZXR1cHJxdmVyYiBcbWFya3Vwc2V0Y29kZXF1b3RlcmlnaHQKK1xsZXRcbWFya3Vwc2V0dXBscXZlcmJhdGltIFxtYXJrdXBzZXRjb2RlcXVvdGVsZWZ0CitcbGV0XG1hcmt1cHNldHVwcnF2ZXJiYXRpbSBcbWFya3Vwc2V0Y29kZXF1b3RlcmlnaHQKKworXGxldFxtYXJrdXBzZXR1cGxxc2FtcCBcbWFya3Vwc2V0bm9saWdhdHVyZXNxdW90ZWxlZnQKK1xsZXRcbWFya3Vwc2V0dXBscWtiZCBcbWFya3Vwc2V0bm9saWdhdHVyZXNxdW90ZWxlZnQKKworJSBBbGxvdyBhbiBvcHRpb24gdG8gbm90IHJlcGxhY2UgcXVvdGVzIHdpdGggYSByZWd1bGFyIGRpcmVjdGVkIHJpZ2h0CislIHF1b3RlL2Fwb3N0cm9waGUgKGNoYXIgMHgyNyksIGJ1dCBpbnN0ZWFkIHVzZSB0aGUgdW5kaXJlY3RlZCBxdW90ZQorJSBmcm9tIGNtdHQgKGNoYXIgMHgwZCkuICBUaGUgdW5kaXJlY3RlZCBxdW90ZSBpcyB1Z2x5LCBzbyBkb24ndCBtYWtlIGl0CislIHRoZSBkZWZhdWx0LCBidXQgaXQgd29ya3MgZm9yIHBhc3Rpbmcgd2l0aCBtb3JlIHBkZiB2aWV3ZXJzIChhdCBsZWFzdAorJSBldmluY2UpLCB0aGUgbGlseXBvbmQgZGV2ZWxvcGVycyByZXBvcnQuICB4cGRmIGRvZXMgd29yayB3aXRoIHRoZQorJSByZWd1bGFyIDB4MjcuCislCitcZGVmXGNvZGVxdW90ZXJpZ2h0eyUKKyAgXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgU0VUdHhpY29kZXF1b3RldW5kaXJlY3RlZFxlbmRjc25hbWVccmVsYXgKKyAgICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBTRVRjb2RlcXVvdGV1bmRpcmVjdGVkXGVuZGNzbmFtZVxyZWxheAorICAgICAgJyUKKyAgICBcZWxzZSBcY2hhcicxNSBcZmkKKyAgXGVsc2UgXGNoYXInMTUgXGZpCit9CislCislIGFuZCBhIHNpbWlsYXIgb3B0aW9uIGZvciB0aGUgbGVmdCBxdW90ZSBjaGFyIHZzLiBhIGdyYXZlIGFjY2VudC4KKyUgTW9kZXJuIGZvbnRzIGRpc3BsYXkgQVNDSUkgMHg2MCBhcyBhIGdyYXZlIGFjY2VudCwgc28gc29tZSBwZW9wbGUgbGlrZQorJSB0aGUgY29kZSBlbnZpcm9ubWVudHMgdG8gZG8gbGlrZXdpc2UuCislCitcZGVmXGNvZGVxdW90ZWxlZnR7JQorICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBTRVR0eGljb2RlcXVvdGViYWNrdGlja1xlbmRjc25hbWVccmVsYXgKKyAgICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBTRVRjb2RlcXVvdGViYWNrdGlja1xlbmRjc25hbWVccmVsYXgKKyAgICAgICUgW0tudXRoXSBwcC4gMzgwLDM4MSwzOTEKKyAgICAgICUgXHJlbGF4IGRpc2FibGVzIFNwYW5pc2ggbGlnYXR1cmVzID9gIGFuZCAhYCBvZiBcdHQgZm9udC4KKyAgICAgIFxyZWxheGAlCisgICAgXGVsc2UgXGNoYXInMjIgXGZpCisgIFxlbHNlIFxjaGFyJzIyIFxmaQorfQorCislIFtLbnV0aF0gcHAuIDM4MCwzODEsMzkxLCBkaXNhYmxlIFNwYW5pc2ggbGlnYXR1cmVzID9gIGFuZCAhYCBvZiBcdHQgZm9udC4KK1xkZWZcbm9saWdhdHVyZXNxdW90ZWxlZnR7XHJlbGF4XGxxfQorCislIENvdW50IGRlcHRoIGluIGZvbnQtY2hhbmdlcywgZm9yIGVycm9yIGNoZWNrcworXG5ld2NvdW50XGZvbnRkZXB0aCBcZm9udGRlcHRoPTAKKworJSUgQWRkIHNjcmliZS1saWtlIGZvbnQgZW52aXJvbm1lbnRzLCBwbHVzIEBsIGZvciBpbmxpbmUgbGlzcCAodXN1YWxseSBzYW5zCislJSBzZXJpZikgYW5kIEBpaSBmb3IgVGVYIGl0YWxpYworCislIFxzbWFydGl0YWxpY3tBUkd9IG91dHB1dHMgYXJnIGluIGl0YWxpY3MsIGZvbGxvd2VkIGJ5IGFuIGl0YWxpYyBjb3JyZWN0aW9uCislIHVubGVzcyB0aGUgZm9sbG93aW5nIGNoYXJhY3RlciBpcyBzdWNoIGFzIG5vdCB0byBuZWVkIG9uZS4KK1xkZWZcc21hcnRpdGFsaWN4e1xpZnhcbmV4dCxcZWxzZVxpZnhcbmV4dC1cZWxzZVxpZnhcbmV4dC5cZWxzZQorICAgICAgICAgICAgICAgICAgICBccHRleHNsYXNoXGZpXGZpXGZpfQorXGRlZlxzbWFydHNsYW50ZWQjMXt7XGlmdXNpbmd0dFx0dHNsXHNsICMxfVxmdXR1cmVsZXRcbmV4dFxzbWFydGl0YWxpY3h9CitcZGVmXHNtYXJ0aXRhbGljIzF7e1xpZnVzaW5ndHRcdHRzbFxpdCAjMX1cZnV0dXJlbGV0XG5leHRcc21hcnRpdGFsaWN4fQorCislIGxpa2UgXHNtYXJ0c2xhbnRlZCBleGNlcHQgdW5jb25kaXRpb25hbGx5IHVzZXMgXHR0c2wuCislIEB2YXIgaXMgc2V0IHRvIHRoaXMgZm9yIGRlZnVuIGFyZ3VtZW50cy4KK1xkZWZcdHRzbGFudGVkIzF7e1x0dHNsICMxfVxmdXR1cmVsZXRcbmV4dFxzbWFydGl0YWxpY3h9CisKKyUgQGNpdGUgaXMgbGlrZSBcc21hcnRzbGFudGVkIGV4Y2VwdCB1bmNvbmRpdGlvbmFsbHkgdXNlIFxzbC4gIFdlIG5ldmVyIHdhbnQKKyUgdHRzbCBmb3IgYm9vayB0aXRsZXMsIGRvIHdlPworXGRlZlxjaXRlIzF7e1xzbCAjMX1cZnV0dXJlbGV0XG5leHRcc21hcnRpdGFsaWN4fQorCitcbGV0XGk9XHNtYXJ0aXRhbGljCitcbGV0XHNsYW50ZWQ9XHNtYXJ0c2xhbnRlZAorXGRlZlx2YXIjMXt7XHNldHVwbWFya3Vwc3R5bGV7dmFyfVxzbWFydHNsYW50ZWR7IzF9fX0KK1xsZXRcZGZuPVxzbWFydHNsYW50ZWQKK1xsZXRcZW1waD1cc21hcnRpdGFsaWMKKworJSBFeHBsaWNpdCBmb250IGNoYW5nZXM6IEByLCBAc2MsIHVuZG9jdW1lbnRlZCBAaWkuCitcZGVmXHIjMXt7XHJtICMxfX0gICAgICAgICAgICAgICUgcm9tYW4gZm9udAorXGRlZlxzYyMxe3tcc21hbGxjYXBzIzF9fSAgICAgICAlIHNtYWxsY2FwcyBmb250CitcZGVmXGlpIzF7e1xpdCAjMX19ICAgICAgICAgICAgICUgaXRhbGljIGZvbnQKKworJSBAYiwgZXhwbGljaXQgYm9sZC4gIEFsc28gQHN0cm9uZy4KK1xkZWZcYiMxe3tcYmYgIzF9fQorXGxldFxzdHJvbmc9XGIKKworJSBAc2Fuc3NlcmlmLCBleHBsaWNpdCBzYW5zLgorXGRlZlxzYW5zc2VyaWYjMXt7XHNmICMxfX0KKworJSBXZSBjYW4ndCBqdXN0IHVzZSBcZXhoeXBoZW5wZW5hbHR5LCBiZWNhdXNlIHRoYXQgb25seSBoYXMgZWZmZWN0IGF0CislIHRoZSBlbmQgb2YgYSBwYXJhZ3JhcGguICBSZXN0b3JlIG5vcm1hbCBoeXBoZW5hdGlvbiBhdCB0aGUgZW5kIG9mIHRoZQorJSBncm91cCB3aXRoaW4gd2hpY2ggXG5vaHlwaGVuYXRpb24gaXMgcHJlc3VtYWJseSBjYWxsZWQuCislCitcZGVmXG5vaHlwaGVuYXRpb257XGh5cGhlbmNoYXJcZm9udCA9IC0xICBcYWZ0ZXJncm91cFxyZXN0b3JlaHlwaGVuYXRpb259CitcZGVmXHJlc3RvcmVoeXBoZW5hdGlvbntcaHlwaGVuY2hhclxmb250ID0gYC0gfQorCislIFNldCBzZmNvZGUgdG8gbm9ybWFsIGZvciB0aGUgY2hhcnMgdGhhdCB1c3VhbGx5IGhhdmUgYW5vdGhlciB2YWx1ZS4KKyUgQ2FuJ3QgdXNlIHBsYWluJ3MgXGZyZW5jaHNwYWNpbmcgYmVjYXVzZSBpdCB1c2VzIHRoZSBgXHggbm90YXRpb24sIGFuZAorJSBzb21ldGltZXMgXHggaGFzIGFuIGFjdGl2ZSBkZWZpbml0aW9uIHRoYXQgbWVzc2VzIHRoaW5ncyB1cC4KKyUKK1xjYXRjb2RlYEA9MTEKKyAgXGRlZlxwbGFpbmZyZW5jaHNwYWNpbmd7JQorICAgIFxzZmNvZGVcZG90Q2hhciAgPVxAbSBcc2Zjb2RlXHF1ZXN0Q2hhcj1cQG0gXHNmY29kZVxleGNsYW1DaGFyPVxAbQorICAgIFxzZmNvZGVcY29sb25DaGFyPVxAbSBcc2Zjb2RlXHNlbWlDaGFyID1cQG0gXHNmY29kZVxjb21tYUNoYXIgPVxAbQorICAgIFxkZWZcZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yezEwMDB9JSBmb3IgQC4gYW5kIGZyaWVuZHMKKyAgfQorICBcZGVmXHBsYWlubm9uZnJlbmNoc3BhY2luZ3slCisgICAgXHNmY29kZWBcLjMwMDBcc2Zjb2RlYFw/MzAwMFxzZmNvZGVgXCEzMDAwCisgICAgXHNmY29kZWBcOjIwMDBcc2Zjb2RlYFw7MTUwMFxzZmNvZGVgXCwxMjUwCisgICAgXGRlZlxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3J7MzAwMH0lIGZvciBALiBhbmQgZnJpZW5kcworICB9CitcY2F0Y29kZWBAPVxvdGhlcgorXGRlZlxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3J7MzAwMH0lIGRlZmF1bHQKKworJSBAdCwgZXhwbGljaXQgdHlwZXdyaXRlci4KK1xkZWZcdCMxeyUKKyAge1x0dCBccmF3YmFja3NsYXNoIFxwbGFpbmZyZW5jaHNwYWNpbmcgIzF9JQorICBcbnVsbAorfQorCislIEBzYW1wLgorXGRlZlxzYW1wIzF7e1xzZXR1cG1hcmt1cHN0eWxle3NhbXB9XGxxXHRjbG9zZXsjMX1ccnFcbnVsbH19CisKKyUgZGVmaW5pdGlvbiBvZiBAa2V5IHRoYXQgcHJvZHVjZXMgYSBsb3plbmdlLiAgRG9lc24ndCBhZGp1c3QgdG8gdGV4dCBzaXplLgorJVxzZXRmb250XGtleXJtXHJtc2hhcGV7OH17MTAwMH17T1QxfQorJVxmb250XGtleXN5PWNtc3k5CislXGRlZlxrZXkjMXt7XGtleXJtXHRleHRmb250Mj1ca2V5c3kgXGxlYXZldm1vZGVcaGJveHslCislICBccmFpc2UwLjRwdFxoYm94e1xhbmdsZWxlZnR9XGtlcm4tLjA4ZW1cdnRvcHslCislICAgIFx2Ym94e1xocnVsZVxrZXJuLTAuNHB0CislICAgICBcaGJveHtccmFpc2UwLjRwdFxoYm94e1x2cGhhbnRvbXtcYW5nbGVsZWZ0fX0jMX19JQorJSAgICBca2Vybi0wLjRwdFxocnVsZX0lCislICBca2Vybi0uMDZlbVxyYWlzZTAuNHB0XGhib3h7XGFuZ2xlcmlnaHR9fX19CisKKyUgZGVmaW5pdGlvbiBvZiBAa2V5IHdpdGggbm8gbG96ZW5nZS4gIElmIHRoZSBjdXJyZW50IGZvbnQgaXMgYWxyZWFkeQorJSBtb25vc3BhY2UsIGRvbid0IGNoYW5nZSBpdDsgdGhhdCB3YXksIHdlIHJlc3BlY3QgQGtiZGlucHV0c3R5bGUuICBCdXQKKyUgaWYgaXQgaXNuJ3QgbW9ub3NwYWNlLCB0aGVuIHVzZSBcdHQuCislCitcZGVmXGtleSMxe3tcc2V0dXBtYXJrdXBzdHlsZXtrZXl9JQorICBcbm9oeXBoZW5hdGlvbgorICBcaWZtb25vc3BhY2VcZWxzZVx0dFxmaQorICAjMX1cbnVsbH0KKworJSBjdHJsIGlzIG5vIGxvbmdlciBhIFRleGluZm8gY29tbWFuZC4KK1xkZWZcY3RybCAjMXt7XHR0IFxyYXdiYWNrc2xhc2ggXGhhdH0jMX0KKworJSBAZmlsZSwgQG9wdGlvbiBhcmUgdGhlIHNhbWUgYXMgQHNhbXAuCitcbGV0XGZpbGU9XHNhbXAKK1xsZXRcb3B0aW9uPVxzYW1wCisKKyUgQGNvZGUgaXMgYSBtb2RpZmljYXRpb24gb2YgQHQsCislIHdoaWNoIG1ha2VzIHNwYWNlcyB0aGUgc2FtZSBzaXplIGFzIG5vcm1hbCBpbiB0aGUgc3Vycm91bmRpbmcgdGV4dC4KK1xkZWZcdGNsb3NlIzF7JQorICB7JQorICAgICUgQ2hhbmdlIG5vcm1hbCBpbnRlcndvcmQgc3BhY2UgdG8gYmUgc2FtZSBhcyBmb3IgdGhlIGN1cnJlbnQgZm9udC4KKyAgICBcc3BhY2Vza2lwID0gXGZvbnRkaW1lbjJcZm9udAorICAgICUKKyAgICAlIFN3aXRjaCB0byB0eXBld3JpdGVyLgorICAgIFx0dAorICAgICUKKyAgICAlIEJ1dCBgXCAnIHByb2R1Y2VzIHRoZSBsYXJnZSB0eXBld3JpdGVyIGludGVyd29yZCBzcGFjZS4KKyAgICBcZGVmXCB7e1xzcGFjZXNraXAgPSAwcHR7fSB9fSUKKyAgICAlCisgICAgJSBUdXJuIG9mZiBoeXBoZW5hdGlvbi4KKyAgICBcbm9oeXBoZW5hdGlvbgorICAgICUKKyAgICBccmF3YmFja3NsYXNoCisgICAgXHBsYWluZnJlbmNoc3BhY2luZworICAgICMxJQorICB9JQorICBcbnVsbAorfQorCislIFdlICptdXN0KiB0dXJuIG9uIGh5cGhlbmF0aW9uIGF0IGAtJyBhbmQgYF8nIGluIEBjb2RlLgorJSBPdGhlcndpc2UsIGl0IGlzIHRvbyBoYXJkIHRvIGF2b2lkIG92ZXJmdWxsIGhib3hlcworJSBpbiB0aGUgRW1hY3MgbWFudWFsLCB0aGUgTGlicmFyeSBtYW51YWwsIGV0Yy4KKworJSBVbmZvcnR1bmF0ZWx5LCBUZVggdXNlcyBvbmUgcGFyYW1ldGVyIChcaHlwaGVuY2hhcikgdG8gY29udHJvbAorJSBib3RoIGh5cGhlbmF0aW9uIGF0IC0gYW5kIGh5cGhlbmF0aW9uIHdpdGhpbiB3b3Jkcy4KKyUgV2UgbXVzdCB0aGVyZWZvcmUgdHVybiB0aGVtIGJvdGggb2ZmIChcdGNsb3NlIGRvZXMgdGhhdCkKKyUgYW5kIGFycmFuZ2UgZXhwbGljaXRseSB0byBoeXBoZW5hdGUgYXQgYSBkYXNoLgorJSAgLS0gcm1zLgoreworICBcY2F0Y29kZWBcLT1cYWN0aXZlIFxjYXRjb2RlYFxfPVxhY3RpdmUKKyAgXGNhdGNvZGVgXCc9XGFjdGl2ZSBcY2F0Y29kZWBcYD1cYWN0aXZlCisgIFxnbG9iYWxcbGV0Jz1ccnEgXGdsb2JhbFxsZXRgPVxscSAgJSBkZWZhdWx0IGRlZmluaXRpb25zCisgICUKKyAgXGdsb2JhbFxkZWZcY29kZXtcYmVnaW5ncm91cAorICAgIFxzZXR1cG1hcmt1cHN0eWxle2NvZGV9JQorICAgICUgVGhlIGZvbGxvd2luZyBzaG91bGQgcmVhbGx5IGJlIG1vdmVkIGludG8gXHNldHVwbWFya3Vwc3R5bGUgaGFuZGxlcnMuCisgICAgXGNhdGNvZGVcZGFzaENoYXI9XGFjdGl2ZSAgXGNhdGNvZGVcdW5kZXJDaGFyPVxhY3RpdmUKKyAgICBcaWZhbGxvd2NvZGVicmVha3MKKyAgICAgXGxldC1cY29kZWRhc2gKKyAgICAgXGxldF9cY29kZXVuZGVyCisgICAgXGVsc2UKKyAgICAgXGxldC1ccmVhbGRhc2gKKyAgICAgXGxldF9ccmVhbHVuZGVyCisgICAgXGZpCisgICAgXGNvZGV4CisgIH0KK30KKworXGRlZlxyZWFsZGFzaHstfQorXGRlZlxjb2RlZGFzaHstXGRpc2NyZXRpb25hcnl7fXt9e319CitcZGVmXGNvZGV1bmRlcnslCisgICUgdGhpcyBpcyBhbGwgc28gQG1hdGh7QGNvZGV7dmFyX25hbWV9KzF9IGNhbiB3b3JrLiAgSW4gbWF0aCBtb2RlLCBfCisgICUgaXMgImFjdGl2ZSIgKG1hdGhjb2RlIjgwMDApIGFuZCBcbm9ybWFsdW5kZXJzY29yZSAob3IgXGNoYXI5NSwgZXRjLikKKyAgJSB3aWxsIHRoZXJlZm9yZSBleHBhbmQgdGhlIGFjdGl2ZSBkZWZpbml0aW9uIG9mIF8sIHdoaWNoIGlzIHVzCisgICUgKGluc2lkZSBAY29kZSB0aGF0IGlzKSwgdGhlcmVmb3JlIGFuIGVuZGxlc3MgbG9vcC4KKyAgXGlmdXNpbmd0dHtcaWZtbW9kZQorICAgICAgICAgICAgICAgXG1hdGhjaGFyIjA3NUYgJSBjbGFzcyAwPW9yZGluYXJ5LCBmYW1pbHkgNz10dGZhbSwgcG9zIDB4NUY9Xy4KKyAgICAgICAgICAgICBcZWxzZVxub3JtYWx1bmRlcnNjb3JlIFxmaQorICAgICAgICAgICAgIFxkaXNjcmV0aW9uYXJ5e317fXt9fSUKKyAgICAgICAgICAgIHtcX30lCit9CitcZGVmXGNvZGV4ICMxe1x0Y2xvc2V7IzF9XGVuZGdyb3VwfQorCislIEFuIGFkZGl0aW9uYWwgY29tcGxpY2F0aW9uOiB0aGUgYWJvdmUgd2lsbCBhbGxvdyBicmVha3MgYWZ0ZXIsIGUuZy4sCislIGVhY2ggb2YgdGhlIGZvdXIgdW5kZXJzY29yZXMgaW4gX190eXBlb2ZfXy4gIFRoaXMgaXMgdW5kZXNpcmFibGUgaW4KKyUgc29tZSBtYW51YWxzLCBlc3BlY2lhbGx5IGlmIHRoZXkgZG9uJ3QgaGF2ZSBsb25nIGlkZW50aWZpZXJzIGluCislIGdlbmVyYWwuICBAYWxsb3djb2RlYnJlYWtzIHByb3ZpZGVzIGEgd2F5IHRvIGNvbnRyb2wgdGhpcy4KKyUKK1xuZXdpZlxpZmFsbG93Y29kZWJyZWFrcyAgXGFsbG93Y29kZWJyZWFrc3RydWUKKworXGRlZlxrZXl3b3JkdHJ1ZXt0cnVlfQorXGRlZlxrZXl3b3JkZmFsc2V7ZmFsc2V9CisKK1xwYXJzZWFyZ2RlZlxhbGxvd2NvZGVicmVha3N7JQorICBcZGVmXHR4aWFyZ3sjMX0lCisgIFxpZnhcdHhpYXJnXGtleXdvcmR0cnVlCisgICAgXGFsbG93Y29kZWJyZWFrc3RydWUKKyAgXGVsc2VcaWZ4XHR4aWFyZ1xrZXl3b3JkZmFsc2UKKyAgICBcYWxsb3djb2RlYnJlYWtzZmFsc2UKKyAgXGVsc2UKKyAgICBcZXJyaGVscCA9IFxFTXNpbXBsZQorICAgIFxlcnJtZXNzYWdle1Vua25vd24gQGFsbG93Y29kZWJyZWFrcyBvcHRpb24gYFx0eGlhcmcnfSUKKyAgXGZpXGZpCit9CisKKyUgQGtiZCBpcyBsaWtlIEBjb2RlLCBleGNlcHQgdGhhdCBpZiB0aGUgYXJndW1lbnQgaXMganVzdCBvbmUgQGtleSBjb21tYW5kLAorJSB0aGVuIEBrYmQgaGFzIG5vIGVmZmVjdC4KK1xkZWZca2JkIzF7e1xzZXR1cG1hcmt1cHN0eWxle2tiZH1cZGVmXGxvb2t7IzF9XGV4cGFuZGFmdGVyXGtiZGZvb1xsb29rPz9ccGFyfX0KKworJSBAa2JkaW5wdXRzdHlsZSAtLSBhcmcgaXMgYGRpc3RpbmN0JyAoQGtiZCB1c2VzIHNsYW50ZWQgdHR5IGZvbnQgYWx3YXlzKSwKKyUgICBgZXhhbXBsZScgKEBrYmQgdXNlcyB0dHNsIG9ubHkgaW5zaWRlIG9mIEBleGFtcGxlIGFuZCBmcmllbmRzKSwKKyUgICBvciBgY29kZScgKEBrYmQgdXNlcyBub3JtYWwgdHR5IGZvbnQgYWx3YXlzKS4KK1xwYXJzZWFyZ2RlZlxrYmRpbnB1dHN0eWxleyUKKyAgXGRlZlx0eGlhcmd7IzF9JQorICBcaWZ4XHR4aWFyZ1x3b3JkZGlzdGluY3QKKyAgICBcZ2RlZlxrYmRleGFtcGxlZm9udHtcdHRzbH1cZ2RlZlxrYmRmb250e1x0dHNsfSUKKyAgXGVsc2VcaWZ4XHR4aWFyZ1x3b3JkZXhhbXBsZQorICAgIFxnZGVmXGtiZGV4YW1wbGVmb250e1x0dHNsfVxnZGVmXGtiZGZvbnR7XHR0fSUKKyAgXGVsc2VcaWZ4XHR4aWFyZ1x3b3JkY29kZQorICAgIFxnZGVmXGtiZGV4YW1wbGVmb250e1x0dH1cZ2RlZlxrYmRmb250e1x0dH0lCisgIFxlbHNlCisgICAgXGVycmhlbHAgPSBcRU1zaW1wbGUKKyAgICBcZXJybWVzc2FnZXtVbmtub3duIEBrYmRpbnB1dHN0eWxlIG9wdGlvbiBgXHR4aWFyZyd9JQorICBcZmlcZmlcZmkKK30KK1xkZWZcd29yZGRpc3RpbmN0e2Rpc3RpbmN0fQorXGRlZlx3b3JkZXhhbXBsZXtleGFtcGxlfQorXGRlZlx3b3JkY29kZXtjb2RlfQorCislIERlZmF1bHQgaXMgYGRpc3RpbmN0Jy4KK1xrYmRpbnB1dHN0eWxlIGRpc3RpbmN0CisKK1xkZWZceGtleXtca2V5fQorXGRlZlxrYmRmb28jMSMyIzNccGFye1xkZWZcb25leyMxfVxkZWZcdGhyZWV7IzN9XGRlZlx0aHJlZXh7Pz99JQorXGlmeFxvbmVceGtleVxpZnhcdGhyZWV4XHRocmVlIFxrZXl7IzJ9JQorXGVsc2V7XHRjbG9zZXtca2JkZm9udFxzZXR1cG1hcmt1cHN0eWxle2tiZH1cbG9va319XGZpCitcZWxzZXtcdGNsb3Nle1xrYmRmb250XHNldHVwbWFya3Vwc3R5bGV7a2JkfVxsb29rfX1cZml9CisKKyUgRm9yIEBpbmRpY2F0ZXVybCwgQGVudiwgQGNvbW1hbmQgcXVvdGVzIHNlZW0gdW5uZWNlc3NhcnksIHNvIHVzZSBcY29kZS4KK1xsZXRcaW5kaWNhdGV1cmw9XGNvZGUKK1xsZXRcZW52PVxjb2RlCitcbGV0XGNvbW1hbmQ9XGNvZGUKKworJSBAY2xpY2tzZXF1ZW5jZXtGaWxlIEBjbGlja3t9IE9wZW4gLi4ufQorXGRlZlxjbGlja3NlcXVlbmNlIzF7XGJlZ2luZ3JvdXAgIzFcZW5kZ3JvdXB9CisKKyUgQGNsaWNrc3R5bGUgQGFycm93ICAgKGJ5IGRlZmF1bHQpCitccGFyc2VhcmdkZWZcY2xpY2tzdHlsZXtcZGVmXGNsaWNreyMxfX0KK1xkZWZcY2xpY2t7XGFycm93fQorCislIEB1cmVmIChhYmJyZXZpYXRpb24gZm9yIGB1cmxyZWYnKSB0YWtlcyBhbiBvcHRpb25hbCAoY29tbWEtc2VwYXJhdGVkKQorJSBzZWNvbmQgYXJndW1lbnQgc3BlY2lmeWluZyB0aGUgdGV4dCB0byBkaXNwbGF5IGFuZCBhbiBvcHRpb25hbCB0aGlyZAorJSBhcmcgYXMgdGV4dCB0byBkaXNwbGF5IGluc3RlYWQgb2YgKHJhdGhlciB0aGFuIGluIGFkZGl0aW9uIHRvKSB0aGUgdXJsCislIGl0c2VsZi4gIEZpcnN0IChtYW5kYXRvcnkpIGFyZyBpcyB0aGUgdXJsLiAgUGVyaGFwcyBldmVudHVhbGx5IHB1dCBpbgorJSBhIGh5cGVydGV4IFxzcGVjaWFsIGhlcmUuCislCitcZGVmXHVyZWYjMXtcZG91cmVmICMxLCwsXGZpbmlzaH0KK1xkZWZcZG91cmVmIzEsIzIsIzMsIzRcZmluaXNoe1xiZWdpbmdyb3VwCisgIFx1bnNlcHNwYWNlcworICBccGRmdXJseyMxfSUKKyAgXHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMzfSUKKyAgXGlmZGltXHdkMCA+IDBwdAorICAgIFx1bmhib3gwICUgdGhpcmQgYXJnIGdpdmVuLCBzaG93IG9ubHkgdGhhdAorICBcZWxzZQorICAgIFxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjMn0lCisgICAgXGlmZGltXHdkMCA+IDBwdAorICAgICAgXGlmcGRmCisgICAgICAgIFx1bmhib3gwICAgICAgICAgICAgICUgUERGOiAybmQgYXJnIGdpdmVuLCBzaG93IG9ubHkgaXQKKyAgICAgIFxlbHNlCisgICAgICAgIFx1bmhib3gwXCAoXGNvZGV7IzF9KSUgRFZJOiAybmQgYXJnIGdpdmVuLCBzaG93IGJvdGggaXQgYW5kIHVybAorICAgICAgXGZpCisgICAgXGVsc2UKKyAgICAgIFxjb2RleyMxfSUgb25seSB1cmwgZ2l2ZW4sIHNvIHNob3cgaXQKKyAgICBcZmkKKyAgXGZpCisgIFxlbmRsaW5rCitcZW5kZ3JvdXB9CisKKyUgQHVybCBzeW5vbnltIGZvciBAdXJlZiwgc2luY2UgdGhhdCdzIGhvdyBldmVyeW9uZSB1c2VzIGl0LgorJQorXGxldFx1cmw9XHVyZWYKKworJSBybXMgZG9lcyBub3QgbGlrZSBhbmdsZSBicmFja2V0cyAtLWthcmwsIDE3bWF5OTcuCislIFNvIG5vdyBAZW1haWwgaXMganVzdCBsaWtlIEB1cmVmLCB1bmxlc3Mgd2UgYXJlIHBkZi4KKyUKKyVcZGVmXGVtYWlsIzF7XGFuZ2xlbGVmdHtcdHQgIzF9XGFuZ2xlcmlnaHR9CitcaWZwZGYKKyAgXGRlZlxlbWFpbCMxe1xkb2VtYWlsIzEsLFxmaW5pc2h9CisgIFxkZWZcZG9lbWFpbCMxLCMyLCMzXGZpbmlzaHtcYmVnaW5ncm91cAorICAgIFx1bnNlcHNwYWNlcworICAgIFxwZGZ1cmx7bWFpbHRvOiMxfSUKKyAgICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzJ9JQorICAgIFxpZmRpbVx3ZDA+MHB0XHVuaGJveDBcZWxzZVxjb2RleyMxfVxmaQorICAgIFxlbmRsaW5rCisgIFxlbmRncm91cH0KK1xlbHNlCisgIFxsZXRcZW1haWw9XHVyZWYKK1xmaQorCislIFR5cGVzZXQgYSBkaW1lbnNpb24sIGUuZy4sIGBpbicgb3IgYHB0Jy4gIFRoZSBvbmx5IHJlYXNvbiBmb3IgdGhlCislIGFyZ3VtZW50IGlzIHRvIG1ha2UgdGhlIGlucHV0IGxvb2sgcmlnaHQ6IEBkbW57cHR9IGluc3RlYWQgb2YgQGRtbnt9cHQuCislCitcZGVmXGRtbiMxe1x0aGluc3BhY2UgIzF9CisKKyUgQGwgd2FzIG5ldmVyIGRvY3VtZW50ZWQgdG8gbWVhbiBgYHN3aXRjaCB0byB0aGUgTGlzcCBmb250JycsCislIGFuZCBpdCBpcyBub3QgdXNlZCBhcyBzdWNoIGluIGFueSBtYW51YWwgSSBjYW4gZmluZC4gIFdlIG5lZWQgaXQgZm9yCislIFBvbGlzaCBzdXBwcmVzc2VkLWwuICAtLWthcmwsIDIyc2VwOTYuCislXGRlZlxsIzF7e1xsaSAjMX1cbnVsbH0KKworJSBAYWNyb255bSBmb3IgIkZCSSIsICJOQVRPIiwgYW5kIHRoZSBsaWtlLgorJSBXZSBwcmludCB0aGlzIG9uZSBwb2ludCBzaXplIHNtYWxsZXIsIHNpbmNlIGl0J3MgaW50ZW5kZWQgZm9yCislIGFsbC11cHBlcmNhc2UuCislCitcZGVmXGFjcm9ueW0jMXtcZG9hY3JvbnltICMxLCxcZmluaXNofQorXGRlZlxkb2Fjcm9ueW0jMSwjMiwjM1xmaW5pc2h7JQorICB7XHNlbGVjdGZvbnRzXGxzaXplICMxfSUKKyAgXGRlZlx0ZW1weyMyfSUKKyAgXGlmeFx0ZW1wXGVtcHR5IFxlbHNlCisgICAgXHNwYWNlICh7XHVuc2Vwc3BhY2VzIFxpZ25vcmVzcGFjZXMgXHRlbXAgXHVuc2tpcH0pJQorICBcZmkKK30KKworJSBAYWJiciBmb3IgIkNvbXB1dC4gSi4iIGFuZCB0aGUgbGlrZS4KKyUgTm8gZm9udCBjaGFuZ2UsIGJ1dCBkb24ndCBkbyBlbmQtb2Ytc2VudGVuY2Ugc3BhY2luZy4KKyUKK1xkZWZcYWJiciMxe1xkb2FiYnIgIzEsLFxmaW5pc2h9CitcZGVmXGRvYWJiciMxLCMyLCMzXGZpbmlzaHslCisgIHtccGxhaW5mcmVuY2hzcGFjaW5nICMxfSUKKyAgXGRlZlx0ZW1weyMyfSUKKyAgXGlmeFx0ZW1wXGVtcHR5IFxlbHNlCisgICAgXHNwYWNlICh7XHVuc2Vwc3BhY2VzIFxpZ25vcmVzcGFjZXMgXHRlbXAgXHVuc2tpcH0pJQorICBcZmkKK30KKworCitcbWVzc2FnZXtnbHlwaHMsfQorCislIEBwb2ludHt9LCBAcmVzdWx0e30sIEBleHBhbnNpb257fSwgQHByaW50e30sIEBlcXVpdnt9LgorJQorJSBTaW5jZSB0aGVzZSBjaGFyYWN0ZXJzIGFyZSB1c2VkIGluIGV4YW1wbGVzLCB0aGV5IHNob3VsZCBiZSBhbiBldmVuIG51bWJlciBvZgorJSBcdHQgd2lkdGhzLiBFYWNoIFx0dCBjaGFyYWN0ZXIgaXMgMWVuLCBzbyB0d28gbWFrZXMgaXQgMWVtLgorJQorXGRlZlxwb2ludHskXHN0YXIkfQorXGRlZlxhcnJvd3tcbGVhdmV2bW9kZVxyYWlzZS4wNWV4XGhib3ggdG8gMWVte1xoZmlsJFxyaWdodGFycm93JFxoZmlsfX0KK1xkZWZccmVzdWx0e1xsZWF2ZXZtb2RlXHJhaXNlLjA1ZXhcaGJveCB0byAxZW17XGhmaWwkXFJpZ2h0YXJyb3ckXGhmaWx9fQorXGRlZlxleHBhbnNpb257XGxlYXZldm1vZGVcaGJveCB0byAxZW17XGhmaWwkXG1hcHN0byRcaGZpbH19CitcZGVmXHByaW50e1xsZWF2ZXZtb2RlXGxvd2VyLjFleFxoYm94IHRvIDFlbXtcaGZpbCRcZGFzaHYkXGhmaWx9fQorXGRlZlxlcXVpdntcbGVhdmV2bW9kZVxoYm94IHRvIDFlbXtcaGZpbCRccHRleGVxdWl2JFxoZmlsfX0KKworJSBUaGUgQGVycm9ye30gY29tbWFuZC4KKyUgQWRhcHRlZCBmcm9tIHRoZSBUZVhib29rJ3MgXGJveGl0LgorJQorXG5ld2JveFxlcnJvcmJveAorJQore1x0ZW50dCBcZ2xvYmFsXGRpbWVuMCA9IDNlbX0lIFdpZHRoIG9mIHRoZSBib3guCitcZGltZW4yID0gLjU1cHQgJSBUaGlja25lc3Mgb2YgcnVsZXMKKyUgVGhlIHRleHQuIChgcicgaXMgb3BlbiBvbiB0aGUgcmlnaHQsIGBlJyBzb21ld2hhdCBsZXNzIHNvIG9uIHRoZSBsZWZ0LikKK1xzZXRib3gwID0gXGhib3h7XGtlcm4tLjc1cHQgXHJlZHVjZWRzZiBlcnJvclxrZXJuLTEuNXB0fQorJQorXHNldGJveFxlcnJvcmJveD1caGJveCB0byBcZGltZW4we1xoZmlsCisgICBcaHNpemUgPSBcZGltZW4wIFxhZHZhbmNlXGhzaXplIGJ5IC01LjhwdCAlIFNwYWNlIHRvIGxlZnQrcmlnaHQuCisgICBcYWR2YW5jZVxoc2l6ZSBieSAtMlxkaW1lbjIgJSBSdWxlcy4KKyAgIFx2Ym94eyUKKyAgICAgIFxocnVsZSBoZWlnaHRcZGltZW4yCisgICAgICBcaGJveHtcdnJ1bGUgd2lkdGhcZGltZW4yIFxrZXJuM3B0ICAgICAgICAgICUgU3BhY2UgdG8gbGVmdCBvZiB0ZXh0LgorICAgICAgICAgXHZ0b3B7XGtlcm4yLjRwdCBcYm94MCBca2VybjIuNHB0fSUgU3BhY2UgYWJvdmUvYmVsb3cuCisgICAgICAgICBca2VybjNwdFx2cnVsZSB3aWR0aFxkaW1lbjJ9JSBTcGFjZSB0byByaWdodC4KKyAgICAgIFxocnVsZSBoZWlnaHRcZGltZW4yfQorICAgIFxoZmlsfQorJQorXGRlZlxlcnJvcntcbGVhdmV2bW9kZVxsb3dlci43ZXhcY29weVxlcnJvcmJveH0KKworJSBAcG91bmRze30gaXMgYSBzdGVybGluZyBzaWduLCB3aGljaCBLbnV0aCBwdXQgaW4gdGhlIENNIGl0YWxpYyBmb250LgorJQorXGRlZlxwb3VuZHN7e1xpdFwkfX0KKworJSBAZXVyb3t9IGNvbWVzIGZyb20gYSBzZXBhcmF0ZSBmb250LCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgc3R5bGUuCislIFdlIHVzZSB0aGUgZnJlZSBmZXltKiBmb250cyBmcm9tIHRoZSBldXJvc3ltIHBhY2thZ2UgYnkgSGVucmlrCislIFRoZWlsaW5nLCB3aGljaCBzdXBwb3J0IHJlZ3VsYXIsIHNsYW50ZWQsIGJvbGQgYW5kIGJvbGQgc2xhbnRlZCAoYW5kCislICJvdXRsaW5lZCIgKGJsYWNrYm9hcmQgYm9hcmQsIHNvcnQgb2YpIHZlcnNpb25zLCB3aGljaCB3ZSBkb24ndCBuZWVkKS4KKyUgSXQgaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5jdGFuLm9yZy90ZXgtYXJjaGl2ZS9mb250cy9ldXJvc3ltLgorJQorJSBBbHRob3VnaCBvbmx5IHJlZ3VsYXIgaXMgdGhlIHRydWx5IG9mZmljaWFsIEV1cm8gc3ltYm9sLCB3ZSBpZ25vcmUKKyUgdGhhdC4gIFRoZSBFdXJvIGlzIGRlc2lnbmVkIHRvIGJlIHNsaWdodGx5IHRhbGxlciB0aGFuIHRoZSByZWd1bGFyCislIGZvbnQgaGVpZ2h0LgorJQorJSBmZXltciAtIHJlZ3VsYXIKKyUgZmV5bW8gLSBzbGFudGVkCislIGZleWJyIC0gYm9sZAorJSBmZXlibyAtIGJvbGQgc2xhbnRlZAorJQorJSBUaGVyZSBpcyBubyBnb29kIChmcmVlKSB0eXBld3JpdGVyIHZlcnNpb24sIHRvIG15IGtub3dsZWRnZS4KKyUgQSBmZXltcjEwIGV1cm8gaXMgfjcuM3B0IHdpZGUsIHdoaWxlIGEgbm9ybWFsIGNtdHQxMCBjaGFyIGlzIH41LjI1cHQgd2lkZS4KKyUgSG1tLgorJQorJSBBbHNvIGRvZXNuJ3Qgd29yayBpbiBtYXRoLiAgRG8gd2UgbmVlZCB0byBkbyBtYXRoIHdpdGggZXVybyBzeW1ib2xzPworJSBIb3BlIG5vdC4KKyUKKyUKK1xkZWZcZXVyb3t7XGV1cm9mb250IGV9fQorXGRlZlxldXJvZm9udHslCisgICUgV2Ugc2V0IHRoZSBmb250IGF0IGVhY2ggY29tbWFuZCwgcmF0aGVyIHRoYW4gcHJlZGVmaW5pbmcgaXQgaW4KKyAgJSBcdGV4dGZvbnRzIGFuZCB0aGUgb3RoZXIgZm9udC1zd2l0Y2hpbmcgY29tbWFuZHMsIHNvIHRoYXQKKyAgJSBpbnN0YWxsYXRpb25zIHdoaWNoIG5ldmVyIG5lZWQgdGhlIHN5bWJvbCBkb24ndCBoYXZlIHRvIGhhdmUgdGhlCisgICUgZm9udCBpbnN0YWxsZWQuCisgICUKKyAgJSBUaGVyZSBpcyBvbmx5IG9uZSBkZXNpZ25lZCBzaXplIChub21pbmFsIDEwcHQpLCBzbyB3ZSBhbHdheXMgc2NhbGUKKyAgJSB0aGF0IHRvIHRoZSBjdXJyZW50IG5vbWluYWwgc2l6ZS4KKyAgJQorICAlIEJ5IHRoZSB3YXksIHNpbXBseSB1c2luZyAiYXQgMWVtIiB3b3JrcyBmb3IgY21yMTAgYW5kIHRoZSBsaWtlLCBidXQKKyAgJSBkb2VzIG5vdCB3b3JrIGZvciBjbWJ4MTAgYW5kIG90aGVyIGV4dGVuZGVkL3NocnVua2VuIGZvbnRzLgorICAlCisgIFxkZWZcZXVyb3NpemV7XGNzbmFtZVxjdXJmb250c2l6ZSBub21pbmFsc2l6ZVxlbmRjc25hbWV9JQorICAlCisgIFxpZnhcY3VyZm9udHN0eWxlXGJmc3R5bGVuYW1lCisgICAgJSBib2xkOgorICAgIFxmb250XHRoaXNldXJvZm9udCA9IFxpZnVzaW5naXR7ZmV5Ym8xMH17ZmV5YnIxMH0gYXQgXGV1cm9zaXplCisgIFxlbHNlCisgICAgJSByZWd1bGFyOgorICAgIFxmb250XHRoaXNldXJvZm9udCA9IFxpZnVzaW5naXR7ZmV5bW8xMH17ZmV5bXIxMH0gYXQgXGV1cm9zaXplCisgIFxmaQorICBcdGhpc2V1cm9mb250Cit9CisKKyUgR2x5cGhzIGZyb20gdGhlIEVDIGZvbnRzLiAgV2UgZG9uJ3QgdXNlIFxsZXQgZm9yIHRoZSBhbGlhc2VzLCBiZWNhdXNlCislIHNvbWV0aW1lcyB3ZSByZWRlZmluZSB0aGUgb3JpZ2luYWwgbWFjcm8sIGFuZCB0aGUgYWxpYXMgc2hvdWxkIHJlZmxlY3QKKyUgdGhlIHJlZGVmaW5pdGlvbi4KKyUKKyUgVXNlIExhVGVYIG5hbWVzIGZvciB0aGUgSWNlbGFuZGljIGxldHRlcnMuCitcZGVmXERIe3tcZWNmb250IFxjaGFyIkQwfX0gJSBFdGgKK1xkZWZcZGh7e1xlY2ZvbnQgXGNoYXIiRjB9fSAlIGV0aAorXGRlZlxUSHt7XGVjZm9udCBcY2hhciJERX19ICUgVGhvcm4KK1xkZWZcdGh7e1xlY2ZvbnQgXGNoYXIiRkV9fSAlIHRob3JuCislCitcZGVmXGd1aWxsZW1ldGxlZnR7e1xlY2ZvbnQgXGNoYXIiMTN9fQorXGRlZlxndWlsbGVtb3RsZWZ0e1xndWlsbGVtZXRsZWZ0fQorXGRlZlxndWlsbGVtZXRyaWdodHt7XGVjZm9udCBcY2hhciIxNH19CitcZGVmXGd1aWxsZW1vdHJpZ2h0e1xndWlsbGVtZXRyaWdodH0KK1xkZWZcZ3VpbHNpbmdsbGVmdHt7XGVjZm9udCBcY2hhciIwRX19CitcZGVmXGd1aWxzaW5nbHJpZ2h0e3tcZWNmb250IFxjaGFyIjBGfX0KK1xkZWZccXVvdGVkYmxiYXNle3tcZWNmb250IFxjaGFyIjEyfX0KK1xkZWZccXVvdGVzaW5nbGJhc2V7e1xlY2ZvbnQgXGNoYXIiMER9fQorJQorJSBUaGlzIHBvc2l0aW9uaW5nIGlzIG5vdCBwZXJmZWN0IChzZWUgdGhlIG9nb25layBMYVRlWCBwYWNrYWdlKSwgYnV0CislIHdlIGhhdmUgdGhlIHByZWNvbXBvc2VkIGdseXBocyBmb3IgdGhlIG1vc3QgY29tbW9uIGNhc2VzLiAgV2UgcHV0IHRoZQorJSB0ZXN0cyB0byB1c2UgdGhvc2UgZ2x5cGhzIGluIHRoZSBzaW5nbGUgXG9nb25layBtYWNybyBzbyB3ZSBoYXZlIGZld2VyCislIGR1bW15IGRlZmluaXRpb25zIHRvIHdvcnJ5IGFib3V0IGZvciBpbmRleCBlbnRyaWVzLCBldGMuCislCislIG9nb25layBpcyBhbHNvIHVzZWQgd2l0aCBvdGhlciBsZXR0ZXJzIGluIExpdGh1YW5pYW4gKElPVSksIGJ1dCB1c2luZworJSB0aGUgcHJlY29tcG9zZWQgZ2x5cGhzIGZvciB0aG9zZSBpcyBub3Qgc28gZWFzeSBzaW5jZSB0aGV5IGFyZW4ndCBpbgorJSB0aGUgc2FtZSBFQyBmb250LgorXGRlZlxvZ29uZWsjMXt7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcbWFjcm9jaGFyQVxBb2dvbmVrCisgIFxlbHNlXGlmeFx0ZW1wXG1hY3JvY2hhcmFcYW9nb25laworICBcZWxzZVxpZnhcdGVtcFxtYWNyb2NoYXJFXEVvZ29uZWsKKyAgXGVsc2VcaWZ4XHRlbXBcbWFjcm9jaGFyZVxlb2dvbmVrCisgIFxlbHNlCisgICAgXGVjZm9udCBcc2V0Ym94MD1caGJveHsjMX0lCisgICAgXGlmZGltXGh0MD0xZXhcYWNjZW50IjBDICMxJQorICAgIFxlbHNlXG9vYWxpZ257XHVuaGJveDBcY3JjclxoaWRld2lkdGhcY2hhciIwQyBcaGlkZXdpZHRofSUKKyAgICBcZmkKKyAgXGZpXGZpXGZpXGZpCisgIH0lCit9CitcZGVmXEFvZ29uZWt7e1xlY2ZvbnQgXGNoYXIiODF9fVxkZWZcbWFjcm9jaGFyQXtBfQorXGRlZlxhb2dvbmVre3tcZWNmb250IFxjaGFyIkExfX1cZGVmXG1hY3JvY2hhcmF7YX0KK1xkZWZcRW9nb25la3t7XGVjZm9udCBcY2hhciI4Nn19XGRlZlxtYWNyb2NoYXJFe0V9CitcZGVmXGVvZ29uZWt7e1xlY2ZvbnQgXGNoYXIiQTZ9fVxkZWZcbWFjcm9jaGFyZXtlfQorJQorJSBVc2UgdGhlIGVjKiBmb250cyAoY20tc3VwZXIgaW4gb3V0bGluZSBmb3JtYXQpIGZvciBub24tQ00gZ2x5cGhzLgorXGRlZlxlY2ZvbnR7JQorICAlIFdlIGNhbid0IGRpc3Rpbmd1aXNoIHNlcmlmL3NhbnMgYW5kIGl0YWxpYy9zbGFudGVkLCBidXQgdGhpcworICAlIGlzIHVzZWQgZm9yIGNydWRlIGhhY2tzIGFueXdheSAobGlrZSBhZGRpbmcgRnJlbmNoIGFuZCBHZXJtYW4KKyAgJSBxdW90ZXMgdG8gZG9jdW1lbnRzIHR5cGVzZXQgd2l0aCBDTSwgd2hlcmUgd2UgbG9zZSBrZXJuaW5nKSwgc28KKyAgJSBob3BlZnVsbHkgbm9ib2R5IHdpbGwgbm90aWNlL2NhcmUuCisgIFxlZGVmXGVjc2l6ZXtcY3NuYW1lXGN1cmZvbnRzaXplIGVjc2l6ZVxlbmRjc25hbWV9JQorICBcZWRlZlxub21pbmFsc2l6ZXtcY3NuYW1lXGN1cmZvbnRzaXplIG5vbWluYWxzaXplXGVuZGNzbmFtZX0lCisgIFxpZnhcY3VyZm9udHN0eWxlXGJmc3R5bGVuYW1lCisgICAgJSBib2xkOgorICAgIFxmb250XHRoaXNlY2ZvbnQgPSBlY2JcaWZ1c2luZ2l0e2l9e3h9XGVjc2l6ZSBcc3BhY2UgYXQgXG5vbWluYWxzaXplCisgIFxlbHNlCisgICAgJSByZWd1bGFyOgorICAgIFxmb250XHRoaXNlY2ZvbnQgPSBlY1xpZnVzaW5naXR7dGl9e3JtfVxlY3NpemUgXHNwYWNlIGF0IFxub21pbmFsc2l6ZQorICBcZmkKKyAgXHRoaXNlY2ZvbnQKK30KKworJSBAcmVnaXN0ZXJlZHN5bWJvbCAtIFIgaW4gYSBjaXJjbGUuICBUaGUgZm9udCBmb3IgdGhlIFIgc2hvdWxkIHJlYWxseQorJSBiZSBzbWFsbGVyIHlldCwgYnV0IGxsbHNpemUgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvIGZvciBub3cuCislIEFkYXB0ZWQgZnJvbSB0aGUgcGxhaW4udGV4IGRlZmluaXRpb24gb2YgXGNvcHlyaWdodC4KKyUKK1xkZWZccmVnaXN0ZXJlZHN5bWJvbHslCisgICRee3tcb29hbGlnbntcaGZpbFxyYWlzZS4wN2V4XGhib3h7XHNlbGVjdGZvbnRzXGxsbHNpemUgUn0lCisgICAgICAgICAgICAgICBcaGZpbFxjcmNyXE9yYn19JQorICAgIH0kJQorfQorCislIEB0ZXh0ZGVncmVlIC0gdGhlIG5vcm1hbCBkZWdyZWVzIHNpZ24uCislCitcZGVmXHRleHRkZWdyZWV7JF5cY2lyYyR9CisKKyUgTGF1cmVudCBTaWViZW5tYW5uIHJlcG9ydHMgXE9yYiB1bmRlZmluZWQgd2l0aDoKKyUgIFRleHR1cmVzIDEuNy43IChwcmVsb2FkZWQgZm9ybWF0PXBsYWluIDkzLjEwLjE0KSAgKDY4SykgIDE2IEFQUiAyMDA0IDAyOjM4CislIHNvIHdlJ2xsIGRlZmluZSBpdCBpZiBuZWNlc3NhcnkuCislCitcaWZ4XE9yYlx1bmRlZmluZWQKK1xkZWZcT3Jie1xtYXRoaGV4Ym94MjBEfQorXGZpCisKKyUgUXVvdGVzLgorXGNoYXJkZWZccXVvdGVkYmxsZWZ0PSI1QworXGNoYXJkZWZccXVvdGVkYmxyaWdodD1gXCIKK1xjaGFyZGVmXHF1b3RlbGVmdD1gXGAKK1xjaGFyZGVmXHF1b3RlcmlnaHQ9YFwnCisKKworXG1lc3NhZ2V7cGFnZSBoZWFkaW5ncyx9CisKK1xuZXdza2lwXHRpdGxlcGFnZXRvcGdsdWUgXHRpdGxlcGFnZXRvcGdsdWUgPSAxLjVpbgorXG5ld3NraXBcdGl0bGVwYWdlYm90dG9tZ2x1ZSBcdGl0bGVwYWdlYm90dG9tZ2x1ZSA9IDJwYworCislIEZpcnN0IHRoZSB0aXRsZSBwYWdlLiAgTXVzdCBkbyBAc2V0dGl0bGUgYmVmb3JlIEB0aXRsZXBhZ2UuCitcbmV3aWZcaWZzZWVuYXV0aG9yCitcbmV3aWZcaWZmaW5pc2hlZHRpdGxlcGFnZQorCislIERvIGFuIGltcGxpY2l0IEBjb250ZW50cyBvciBAc2hvcnRjb250ZW50cyBhZnRlciBAZW5kIHRpdGxlcGFnZSBpZiB0aGUKKyUgdXNlciBzYXlzIEBzZXRjb250ZW50c2FmdGVydGl0bGVwYWdlIG9yIEBzZXRzaG9ydGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UuCislCitcbmV3aWZcaWZzZXRjb250ZW50c2FmdGVydGl0bGVwYWdlCisgXGxldFxzZXRjb250ZW50c2FmdGVydGl0bGVwYWdlID0gXHNldGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2V0cnVlCitcbmV3aWZcaWZzZXRzaG9ydGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UKKyBcbGV0XHNldHNob3J0Y29udGVudHNhZnRlcnRpdGxlcGFnZSA9IFxzZXRzaG9ydGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2V0cnVlCisKK1xwYXJzZWFyZ2RlZlxzaG9ydHRpdGxlcGFnZXtcYmVnaW5ncm91cFxoYm94e31cdnNraXAgMS41aW4gXGNoYXBybSBcY2VudGVybGluZXsjMX0lCisgICAgICAgIFxlbmRncm91cFxwYWdlXGhib3h7fVxwYWdlfQorCitcZW52ZGVmXHRpdGxlcGFnZXslCisgICUgT3BlbiBvbmUgZXh0cmEgZ3JvdXAsIGFzIHdlIHdhbnQgdG8gY2xvc2UgaXQgaW4gdGhlIG1pZGRsZSBvZiBcRXRpdGxlcGFnZS4KKyAgXGJlZ2luZ3JvdXAKKyAgICBccGFyaW5kZW50PTBwdCBcdGV4dGZvbnRzCisgICAgJSBMZWF2ZSBzb21lIHNwYWNlIGF0IHRoZSB2ZXJ5IHRvcCBvZiB0aGUgcGFnZS4KKyAgICBcdmdsdWVcdGl0bGVwYWdldG9wZ2x1ZQorICAgICUgTm8gcnVsZSBhdCBwYWdlIGJvdHRvbSB1bmxlc3Mgd2UgcHJpbnQgb25lIGF0IHRoZSB0b3Agd2l0aCBAdGl0bGUuCisgICAgXGZpbmlzaGVkdGl0bGVwYWdldHJ1ZQorICAgICUKKyAgICAlIE1vc3QgdGl0bGUgYGBwYWdlcycnIGFyZSBhY3R1YWxseSB0d28gcGFnZXMgbG9uZywgd2l0aCBzcGFjZQorICAgICUgYXQgdGhlIHRvcCBvZiB0aGUgc2Vjb25kLiAgV2UgZG9uJ3Qgd2FudCB0aGUgcmFnZ2VkIGxlZnQgb24gdGhlIHNlY29uZC4KKyAgICBcbGV0XG9sZHBhZ2UgPSBccGFnZQorICAgIFxkZWZccGFnZXslCisgICAgICBcaWZmaW5pc2hlZHRpdGxlcGFnZVxlbHNlCisJIFxmaW5pc2h0aXRsZXBhZ2UKKyAgICAgIFxmaQorICAgICAgXGxldFxwYWdlID0gXG9sZHBhZ2UKKyAgICAgIFxwYWdlCisgICAgICBcbnVsbAorICAgIH0lCit9CisKK1xkZWZcRXRpdGxlcGFnZXslCisgICAgXGlmZmluaXNoZWR0aXRsZXBhZ2VcZWxzZQorCVxmaW5pc2h0aXRsZXBhZ2UKKyAgICBcZmkKKyAgICAlIEl0IGlzIGltcG9ydGFudCB0byBkbyB0aGUgcGFnZSBicmVhayBiZWZvcmUgZW5kaW5nIHRoZSBncm91cCwKKyAgICAlIGJlY2F1c2UgdGhlIGhlYWRsaW5lIGFuZCBmb290bGluZSBhcmUgb25seSBlbXB0eSBpbnNpZGUgdGhlIGdyb3VwLgorICAgICUgSWYgd2UgdXNlIHRoZSBuZXcgZGVmaW5pdGlvbiBvZiBccGFnZSwgd2UgYWx3YXlzIGdldCBhIGJsYW5rIHBhZ2UKKyAgICAlIGFmdGVyIHRoZSB0aXRsZSBwYWdlLCB3aGljaCB3ZSBjZXJ0YWlubHkgZG9uJ3Qgd2FudC4KKyAgICBcb2xkcGFnZQorICBcZW5kZ3JvdXAKKyAgJQorICAlIE5lZWQgdGhpcyBiZWZvcmUgdGhlIFwuLi5hZnRlcnRpdGxlcGFnZSBjaGVja3Mgc28gdGhhdCBpZiB0aGV5IGFyZQorICAlIGluIGVmZmVjdCB0aGUgdG9jIHBhZ2VzIHdpbGwgY29tZSBvdXQgd2l0aCBwYWdlIG51bWJlcnMuCisgIFxIRUFESU5HU29uCisgICUKKyAgJSBJZiB0aGV5IHdhbnQgc2hvcnQsIHRoZXkgY2VydGFpbmx5IHdhbnQgbG9uZyB0b28uCisgIFxpZnNldHNob3J0Y29udGVudHNhZnRlcnRpdGxlcGFnZQorICAgIFxzaG9ydGNvbnRlbnRzCisgICAgXGNvbnRlbnRzCisgICAgXGdsb2JhbFxsZXRcc2hvcnRjb250ZW50cyA9IFxyZWxheAorICAgIFxnbG9iYWxcbGV0XGNvbnRlbnRzID0gXHJlbGF4CisgIFxmaQorICAlCisgIFxpZnNldGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UKKyAgICBcY29udGVudHMKKyAgICBcZ2xvYmFsXGxldFxjb250ZW50cyA9IFxyZWxheAorICAgIFxnbG9iYWxcbGV0XHNob3J0Y29udGVudHMgPSBccmVsYXgKKyAgXGZpCit9CisKK1xkZWZcZmluaXNodGl0bGVwYWdleyUKKyAgXHZza2lwNHB0IFxocnVsZSBoZWlnaHQgMnB0IHdpZHRoIFxoc2l6ZQorICBcdnNraXBcdGl0bGVwYWdlYm90dG9tZ2x1ZQorICBcZmluaXNoZWR0aXRsZXBhZ2V0cnVlCit9CisKKyUlJSBNYWNyb3MgdG8gYmUgdXNlZCB3aXRoaW4gQHRpdGxlcGFnZToKKworXGxldFxzdWJ0aXRsZXJtPVx0ZW5ybQorXGRlZlxzdWJ0aXRsZWZvbnR7XHN1YnRpdGxlcm0gXG5vcm1hbGJhc2VsaW5lc2tpcCA9IDEzcHQgXG5vcm1hbGJhc2VsaW5lc30KKworXHBhcnNlYXJnZGVmXHRpdGxleyUKKyAgXGNoZWNrZW52XHRpdGxlcGFnZQorICBcbGVmdGxpbmV7XHRpdGxlZm9udHNccm1pc2JvbGQgIzF9CisgICUgcHJpbnQgYSBydWxlIGF0IHRoZSBwYWdlIGJvdHRvbSBhbHNvLgorICBcZmluaXNoZWR0aXRsZXBhZ2VmYWxzZQorICBcdnNraXA0cHQgXGhydWxlIGhlaWdodCA0cHQgd2lkdGggXGhzaXplIFx2c2tpcDRwdAorfQorCitccGFyc2VhcmdkZWZcc3VidGl0bGV7JQorICBcY2hlY2tlbnZcdGl0bGVwYWdlCisgIHtcc3VidGl0bGVmb250IFxyaWdodGxpbmV7IzF9fSUKK30KKworJSBAYXV0aG9yIHNob3VsZCBjb21lIGxhc3QsIGJ1dCBtYXkgY29tZSBtYW55IHRpbWVzLgorJSBJdCBjYW4gYWxzbyBiZSB1c2VkIGluc2lkZSBAcXVvdGF0aW9uLgorJQorXHBhcnNlYXJnZGVmXGF1dGhvcnslCisgIFxkZWZcdGVtcHtccXVvdGF0aW9ufSUKKyAgXGlmeFx0aGlzZW52XHRlbXAKKyAgICBcZGVmXHF1b3RhdGlvbmF1dGhvcnsjMX0lIHByaW50ZWQgaW4gXEVxdW90YXRpb24uCisgIFxlbHNlCisgICAgXGNoZWNrZW52XHRpdGxlcGFnZQorICAgIFxpZnNlZW5hdXRob3JcZWxzZSBcdnNraXAgMHB0IHBsdXMgMWZpbGxsIFxzZWVuYXV0aG9ydHJ1ZSBcZmkKKyAgICB7XHNlY2ZvbnRzXHJtaXNib2xkIFxsZWZ0bGluZXsjMX19JQorICBcZmkKK30KKworCislJSUgU2V0IHVwIHBhZ2UgaGVhZGluZ3MgYW5kIGZvb3RpbmdzLgorCitcbGV0XHRoaXNwYWdlPVxmb2xpbworCitcbmV3dG9rc1xldmVuaGVhZGxpbmUgICAgJSBoZWFkbGluZSBvbiBldmVuIHBhZ2VzCitcbmV3dG9rc1xvZGRoZWFkbGluZSAgICAgJSBoZWFkbGluZSBvbiBvZGQgcGFnZXMKK1xuZXd0b2tzXGV2ZW5mb290bGluZSAgICAlIGZvb3RsaW5lIG9uIGV2ZW4gcGFnZXMKK1xuZXd0b2tzXG9kZGZvb3RsaW5lICAgICAlIGZvb3RsaW5lIG9uIG9kZCBwYWdlcworCislIE5vdyBtYWtlIFRlWCB1c2UgdGhvc2UgdmFyaWFibGVzCitcaGVhZGxpbmU9e3tcdGV4dGZvbnRzXHJtIFxpZm9kZFxwYWdlbm8gXHRoZVxvZGRoZWFkbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxlbHNlIFx0aGVcZXZlbmhlYWRsaW5lIFxmaX19CitcZm9vdGxpbmU9e3tcdGV4dGZvbnRzXHJtIFxpZm9kZFxwYWdlbm8gXHRoZVxvZGRmb290bGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxlbHNlIFx0aGVcZXZlbmZvb3RsaW5lIFxmaX1cSEVBRElOR1Nob29rfQorXGxldFxIRUFESU5HU2hvb2s9XHJlbGF4CisKKyUgQ29tbWFuZHMgdG8gc2V0IHRob3NlIHZhcmlhYmxlcy4KKyUgRm9yIGV4YW1wbGUsIHRoaXMgaXMgd2hhdCAgQGhlYWRpbmdzIG9uICBkb2VzCislIEBldmVuaGVhZGluZyBAdGhpc3RpdGxlfEB0aGlzcGFnZXxAdGhpc2NoYXB0ZXIKKyUgQG9kZGhlYWRpbmcgQHRoaXNjaGFwdGVyfEB0aGlzcGFnZXxAdGhpc3RpdGxlCislIEBldmVuZm9vdGluZyBAdGhpc2ZpbGV8fAorJSBAb2RkZm9vdGluZyB8fEB0aGlzZmlsZQorCisKK1xkZWZcZXZlbmhlYWRpbmd7XHBhcnNlYXJnXGV2ZW5oZWFkaW5neHh4fQorXGRlZlxldmVuaGVhZGluZ3h4eCAjMXtcZXZlbmhlYWRpbmd5eXkgIzFcfFx8XHxcfFxmaW5pc2h9CitcZGVmXGV2ZW5oZWFkaW5neXl5ICMxXHwjMlx8IzNcfCM0XGZpbmlzaHslCitcZ2xvYmFsXGV2ZW5oZWFkbGluZT17XHJsYXB7XGNlbnRlcmxpbmV7IzJ9fVxsaW5leyMxXGhmaWwjM319fQorCitcZGVmXG9kZGhlYWRpbmd7XHBhcnNlYXJnXG9kZGhlYWRpbmd4eHh9CitcZGVmXG9kZGhlYWRpbmd4eHggIzF7XG9kZGhlYWRpbmd5eXkgIzFcfFx8XHxcfFxmaW5pc2h9CitcZGVmXG9kZGhlYWRpbmd5eXkgIzFcfCMyXHwjM1x8IzRcZmluaXNoeyUKK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xybGFwe1xjZW50ZXJsaW5leyMyfX1cbGluZXsjMVxoZmlsIzN9fX0KKworXHBhcnNlYXJnZGVmXGV2ZXJ5aGVhZGluZ3tcb2RkaGVhZGluZ3h4eHsjMX1cZXZlbmhlYWRpbmd4eHh7IzF9fSUKKworXGRlZlxldmVuZm9vdGluZ3tccGFyc2VhcmdcZXZlbmZvb3Rpbmd4eHh9CitcZGVmXGV2ZW5mb290aW5neHh4ICMxe1xldmVuZm9vdGluZ3l5eSAjMVx8XHxcfFx8XGZpbmlzaH0KK1xkZWZcZXZlbmZvb3Rpbmd5eXkgIzFcfCMyXHwjM1x8IzRcZmluaXNoeyUKK1xnbG9iYWxcZXZlbmZvb3RsaW5lPXtccmxhcHtcY2VudGVybGluZXsjMn19XGxpbmV7IzFcaGZpbCMzfX19CisKK1xkZWZcb2RkZm9vdGluZ3tccGFyc2Vhcmdcb2RkZm9vdGluZ3h4eH0KK1xkZWZcb2RkZm9vdGluZ3h4eCAjMXtcb2RkZm9vdGluZ3l5eSAjMVx8XHxcfFx8XGZpbmlzaH0KK1xkZWZcb2RkZm9vdGluZ3l5eSAjMVx8IzJcfCMzXHwjNFxmaW5pc2h7JQorICBcZ2xvYmFsXG9kZGZvb3RsaW5lID0ge1xybGFwe1xjZW50ZXJsaW5leyMyfX1cbGluZXsjMVxoZmlsIzN9fSUKKyAgJQorICAlIExlYXZlIHNvbWUgc3BhY2UgZm9yIHRoZSBmb290bGluZS4gIEhvcGVmdWxseSBvayB0byBhc3N1bWUKKyAgJSBAZXZlbmZvb3Rpbmcgd2lsbCBub3QgYmUgdXNlZCBieSBpdHNlbGYuCisgIFxnbG9iYWxcYWR2YW5jZVxwYWdlaGVpZ2h0IGJ5IC0xMnB0CisgIFxnbG9iYWxcYWR2YW5jZVx2c2l6ZSBieSAtMTJwdAorfQorCitccGFyc2VhcmdkZWZcZXZlcnlmb290aW5ne1xvZGRmb290aW5neHh4eyMxfVxldmVuZm9vdGluZ3h4eHsjMX19CisKKyUgQGV2ZW5oZWFkaW5nbWFya3MgdG9wICAgICBcdGhpc2NoYXB0ZXIgPC0gY2hhcHRlciBhdCB0aGUgdG9wIG9mIGEgcGFnZQorJSBAZXZlbmhlYWRpbmdtYXJrcyBib3R0b20gIFx0aGlzY2hhcHRlciA8LSBjaGFwdGVyIGF0IHRoZSBib3R0b20gb2YgYSBwYWdlCislCislIFRoZSBzYW1lIHNldCBvZiBhcmd1bWVudHMgZm9yOgorJQorJSBAb2RkaGVhZGluZ21hcmtzCislIEBldmVuZm9vdGluZ21hcmtzCislIEBvZGRmb290aW5nbWFya3MKKyUgQGV2ZXJ5aGVhZGluZ21hcmtzCislIEBldmVyeWZvb3RpbmdtYXJrcworCitcZGVmXGV2ZW5oZWFkaW5nbWFya3N7XGhlYWRpbmdtYXJrc3tldmVufXtoZWFkaW5nfX0KK1xkZWZcb2RkaGVhZGluZ21hcmtze1xoZWFkaW5nbWFya3N7b2RkfXtoZWFkaW5nfX0KK1xkZWZcZXZlbmZvb3RpbmdtYXJrc3tcaGVhZGluZ21hcmtze2V2ZW59e2Zvb3Rpbmd9fQorXGRlZlxvZGRmb290aW5nbWFya3N7XGhlYWRpbmdtYXJrc3tvZGR9e2Zvb3Rpbmd9fQorXGRlZlxldmVyeWhlYWRpbmdtYXJrcyMxIHtcaGVhZGluZ21hcmtze2V2ZW59e2hlYWRpbmd9eyMxfQorICAgICAgICAgICAgICAgICAgICAgICAgICBcaGVhZGluZ21hcmtze29kZH17aGVhZGluZ317IzF9IH0KK1xkZWZcZXZlcnlmb290aW5nbWFya3MjMSB7XGhlYWRpbmdtYXJrc3tldmVufXtmb290aW5nfXsjMX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgXGhlYWRpbmdtYXJrc3tvZGR9e2Zvb3Rpbmd9eyMxfSB9CislICMxID0gZXZlbi9vZGQsICMyID0gaGVhZGluZy9mb290aW5nLCAjMyA9IHRvcC9ib3R0b20uCitcZGVmXGhlYWRpbmdtYXJrcyMxIzIjMyB7JQorICBcZXhwYW5kYWZ0ZXJcbGV0XGV4cGFuZGFmdGVyXHRlbXAgXGNzbmFtZSBnZXQjM2hlYWRpbmdtYXJrc1xlbmRjc25hbWUKKyAgXGdsb2JhbFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIGdldCMxIzJtYXJrc1xlbmRjc25hbWUgXHRlbXAKK30KKworXGV2ZXJ5aGVhZGluZ21hcmtzIGJvdHRvbQorXGV2ZXJ5Zm9vdGluZ21hcmtzIGJvdHRvbQorCislIEBoZWFkaW5ncyBkb3VibGUgICAgICB0dXJucyBoZWFkaW5ncyBvbiBmb3IgZG91YmxlLXNpZGVkIHByaW50aW5nLgorJSBAaGVhZGluZ3Mgc2luZ2xlICAgICAgdHVybnMgaGVhZGluZ3Mgb24gZm9yIHNpbmdsZS1zaWRlZCBwcmludGluZy4KKyUgQGhlYWRpbmdzIG9mZiAgICAgICAgIHR1cm5zIHRoZW0gb2ZmLgorJSBAaGVhZGluZ3Mgb24gICAgICAgICAgc2FtZSBhcyBAaGVhZGluZ3MgZG91YmxlLCByZXRhaW5lZCBmb3IgY29tcGF0aWJpbGl0eS4KKyUgQGhlYWRpbmdzIGFmdGVyICAgICAgIHR1cm5zIG9uIGRvdWJsZS1zaWRlZCBoZWFkaW5ncyBhZnRlciB0aGlzIHBhZ2UuCislIEBoZWFkaW5ncyBkb3VibGVhZnRlciB0dXJucyBvbiBkb3VibGUtc2lkZWQgaGVhZGluZ3MgYWZ0ZXIgdGhpcyBwYWdlLgorJSBAaGVhZGluZ3Mgc2luZ2xlYWZ0ZXIgdHVybnMgb24gc2luZ2xlLXNpZGVkIGhlYWRpbmdzIGFmdGVyIHRoaXMgcGFnZS4KKyUgQnkgZGVmYXVsdCwgdGhleSBhcmUgb2ZmIGF0IHRoZSBzdGFydCBvZiBhIGRvY3VtZW50LAorJSBhbmQgdHVybmVkIGBvbicgYWZ0ZXIgQGVuZCB0aXRsZXBhZ2UuCisKK1xkZWZcaGVhZGluZ3MgIzEge1xjc25hbWUgSEVBRElOR1MjMVxlbmRjc25hbWV9CisKK1xkZWZcSEVBRElOR1NvZmZ7JQorXGdsb2JhbFxldmVuaGVhZGxpbmU9e1xoZmlsfSBcZ2xvYmFsXGV2ZW5mb290bGluZT17XGhmaWx9CitcZ2xvYmFsXG9kZGhlYWRsaW5lPXtcaGZpbH0gXGdsb2JhbFxvZGRmb290bGluZT17XGhmaWx9fQorXEhFQURJTkdTb2ZmCislIFdoZW4gd2UgdHVybiBoZWFkaW5ncyBvbiwgc2V0IHRoZSBwYWdlIG51bWJlciB0byAxLgorJSBGb3IgZG91YmxlLXNpZGVkIHByaW50aW5nLCBwdXQgY3VycmVudCBmaWxlIG5hbWUgaW4gbG93ZXIgbGVmdCBjb3JuZXIsCislIGNoYXB0ZXIgbmFtZSBvbiBpbnNpZGUgdG9wIG9mIHJpZ2h0IGhhbmQgcGFnZXMsIGRvY3VtZW50CislIHRpdGxlIG9uIGluc2lkZSB0b3Agb2YgbGVmdCBoYW5kIHBhZ2VzLCBhbmQgcGFnZSBudW1iZXJzIG9uIG91dHNpZGUgdG9wCislIGVkZ2Ugb2YgYWxsIHBhZ2VzLgorXGRlZlxIRUFESU5HU2RvdWJsZXslCitcZ2xvYmFsXHBhZ2Vubz0xCitcZ2xvYmFsXGV2ZW5mb290bGluZT17XGhmaWx9CitcZ2xvYmFsXG9kZGZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcZXZlbmhlYWRsaW5lPXtcbGluZXtcZm9saW9caGZpbFx0aGlzdGl0bGV9fQorXGdsb2JhbFxvZGRoZWFkbGluZT17XGxpbmV7XHRoaXNjaGFwdGVyXGhmaWxcZm9saW99fQorXGdsb2JhbFxsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBvZGRwYWdlCit9CitcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwcGFnZXIKKworJSBGb3Igc2luZ2xlLXNpZGVkIHByaW50aW5nLCBjaGFwdGVyIHRpdGxlIGdvZXMgYWNyb3NzIHRvcCBsZWZ0IG9mIHBhZ2UsCislIHBhZ2UgbnVtYmVyIG9uIHRvcCByaWdodC4KK1xkZWZcSEVBRElOR1NzaW5nbGV7JQorXGdsb2JhbFxwYWdlbm89MQorXGdsb2JhbFxldmVuZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxvZGRmb290bGluZT17XGhmaWx9CitcZ2xvYmFsXGV2ZW5oZWFkbGluZT17XGxpbmV7XHRoaXNjaGFwdGVyXGhmaWxcZm9saW99fQorXGdsb2JhbFxvZGRoZWFkbGluZT17XGxpbmV7XHRoaXNjaGFwdGVyXGhmaWxcZm9saW99fQorXGdsb2JhbFxsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBwYWdlcgorfQorXGRlZlxIRUFESU5HU29ue1xIRUFESU5HU2RvdWJsZX0KKworXGRlZlxIRUFESU5HU2FmdGVye1xsZXRcSEVBRElOR1Nob29rPVxIRUFESU5HU2RvdWJsZXh9CitcbGV0XEhFQURJTkdTZG91YmxlYWZ0ZXI9XEhFQURJTkdTYWZ0ZXIKK1xkZWZcSEVBRElOR1Nkb3VibGV4eyUKK1xnbG9iYWxcZXZlbmZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcb2RkZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxldmVuaGVhZGxpbmU9e1xsaW5le1xmb2xpb1xoZmlsXHRoaXN0aXRsZX19CitcZ2xvYmFsXG9kZGhlYWRsaW5lPXtcbGluZXtcdGhpc2NoYXB0ZXJcaGZpbFxmb2xpb319CitcZ2xvYmFsXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcG9kZHBhZ2UKK30KKworXGRlZlxIRUFESU5HU3NpbmdsZWFmdGVye1xsZXRcSEVBRElOR1Nob29rPVxIRUFESU5HU3NpbmdsZXh9CitcZGVmXEhFQURJTkdTc2luZ2xleHslCitcZ2xvYmFsXGV2ZW5mb290bGluZT17XGhmaWx9CitcZ2xvYmFsXG9kZGZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcZXZlbmhlYWRsaW5lPXtcbGluZXtcdGhpc2NoYXB0ZXJcaGZpbFxmb2xpb319CitcZ2xvYmFsXG9kZGhlYWRsaW5lPXtcbGluZXtcdGhpc2NoYXB0ZXJcaGZpbFxmb2xpb319CitcZ2xvYmFsXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcHBhZ2VyCit9CisKKyUgU3Vicm91dGluZXMgdXNlZCBpbiBnZW5lcmF0aW5nIGhlYWRpbmdzCislIFRoaXMgcHJvZHVjZXMgRGF5IE1vbnRoIFllYXIgc3R5bGUgb2Ygb3V0cHV0LgorJSBPbmx5IGRlZmluZSBpZiBub3QgYWxyZWFkeSBkZWZpbmVkLCBpbiBjYXNlIGEgdHhpLT8/LnRleCBmaWxlIGhhcyBzZXQKKyUgdXAgYSBkaWZmZXJlbnQgZm9ybWF0IChlLmcuLCB0eGktY3MudGV4IGRvZXMgdGhpcykuCitcaWZ4XHRvZGF5XHVuZGVmaW5lZAorXGRlZlx0b2RheXslCisgIFxudW1iZXJcZGF5XHNwYWNlCisgIFxpZmNhc2VcbW9udGgKKyAgXG9yXHB1dHdvcmRNSmFuXG9yXHB1dHdvcmRNRmViXG9yXHB1dHdvcmRNTWFyXG9yXHB1dHdvcmRNQXByCisgIFxvclxwdXR3b3JkTU1heVxvclxwdXR3b3JkTUp1blxvclxwdXR3b3JkTUp1bFxvclxwdXR3b3JkTUF1ZworICBcb3JccHV0d29yZE1TZXBcb3JccHV0d29yZE1PY3Rcb3JccHV0d29yZE1Ob3Zcb3JccHV0d29yZE1EZWMKKyAgXGZpCisgIFxzcGFjZVxudW1iZXJceWVhcn0KK1xmaQorCislIEBzZXR0aXRsZSBsaW5lLi4uICBzcGVjaWZpZXMgdGhlIHRpdGxlIG9mIHRoZSBkb2N1bWVudCwgZm9yIGhlYWRpbmdzLgorJSBJdCBnZW5lcmF0ZXMgbm8gb3V0cHV0IG9mIGl0cyBvd24uCitcZGVmXHRoaXN0aXRsZXtccHV0d29yZE5vVGl0bGV9CitcZGVmXHNldHRpdGxle1xwYXJzZWFyZ3tcZ2RlZlx0aGlzdGl0bGV9fQorCisKK1xtZXNzYWdle3RhYmxlcyx9CislIFRhYmxlcyAtLSBAdGFibGUsIEBmdGFibGUsIEB2dGFibGUsIEBpdGVtKHgpLgorCislIGRlZmF1bHQgaW5kZW50YXRpb24gb2YgdGFibGUgdGV4dAorXG5ld2RpbWVuXHRhYmxlaW5kZW50IFx0YWJsZWluZGVudD0uOGluCislIGRlZmF1bHQgaW5kZW50YXRpb24gb2YgQGl0ZW1pemUgYW5kIEBlbnVtZXJhdGUgdGV4dAorXG5ld2RpbWVuXGl0ZW1pbmRlbnQgIFxpdGVtaW5kZW50PS4zaW4KKyUgbWFyZ2luIGJldHdlZW4gZW5kIG9mIHRhYmxlIGl0ZW0gYW5kIHN0YXJ0IG9mIHRhYmxlIHRleHQuCitcbmV3ZGltZW5caXRlbW1hcmdpbiAgXGl0ZW1tYXJnaW49LjFpbgorCislIHVzZWQgaW50ZXJuYWxseSBmb3IgXGl0ZW1pbmRlbnQgbWludXMgXGl0ZW1tYXJnaW4KK1xuZXdkaW1lblxpdGVtbWF4CisKKyUgTm90ZSBAdGFibGUsIEBmdGFibGUsIGFuZCBAdnRhYmxlIGRlZmluZSBAaXRlbSwgQGl0ZW14LCBldGMuLCB3aXRoCislIHRoZXNlIGRlZnMuCislIFRoZXkgYWxzbyBkZWZpbmUgXGl0ZW1pbmRleAorJSB0byBpbmRleCB0aGUgaXRlbSBuYW1lIGluIHdoYXRldmVyIG1hbm5lciBpcyBkZXNpcmVkIChwZXJoYXBzIG5vbmUpLgorCitcbmV3aWZcaWZpdGVteG5lZWRzbmVnYXRpdmV2c2tpcAorCitcZGVmXGl0ZW14cGFye1xwYXJcaWZpdGVteG5lZWRzbmVnYXRpdmV2c2tpcFxub2JyZWFrXHZza2lwLVxwYXJza2lwXG5vYnJlYWtcZml9CisKK1xkZWZcaW50ZXJuYWxCaXRlbXtcc21hbGxicmVhayBccGFyc2VhcmdcaXRlbXp6en0KK1xkZWZcaW50ZXJuYWxCaXRlbXh7XGl0ZW14cGFyIFxwYXJzZWFyZ1xpdGVtenp6fQorCitcZGVmXGl0ZW16enogIzF7XGJlZ2luZ3JvdXAgJQorICBcYWR2YW5jZVxoc2l6ZSBieSAtXHJpZ2h0c2tpcAorICBcYWR2YW5jZVxoc2l6ZSBieSAtXHRhYmxlaW5kZW50CisgIFxzZXRib3gwPVxoYm94e1xpdGVtaW5kaWNhdGV7IzF9fSUKKyAgXGl0ZW1pbmRleHsjMX0lCisgIFxub2JyZWFrICUgVGhpcyBwcmV2ZW50cyBhIGJyZWFrIGJlZm9yZSBAaXRlbXguCisgICUKKyAgJSBJZiB0aGUgaXRlbSB0ZXh0IGRvZXMgbm90IGZpdCBpbiB0aGUgc3BhY2Ugd2UgaGF2ZSwgcHV0IGl0IG9uIGEgbGluZQorICAlIGJ5IGl0c2VsZiwgYW5kIGRvIG5vdCBhbGxvdyBhIHBhZ2UgYnJlYWsgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGF0CisgICUgbGluZS4gIFdlIGRvIG5vdCBzdGFydCBhIHBhcmFncmFwaCBoZXJlIGJlY2F1c2UgdGhlbiBpZiB0aGUgbmV4dAorICAlIGNvbW1hbmQgaXMsIGUuZy4sIEBraW5kZXgsIHRoZSB3aGF0c2l0IHdvdWxkIGdldCBwdXQgaW50byB0aGUKKyAgJSBob3Jpem9udGFsIGxpc3Qgb24gYSBsaW5lIGJ5IGl0c2VsZiwgcmVzdWx0aW5nIGluIGV4dHJhIGJsYW5rIHNwYWNlLgorICBcaWZkaW0gXHdkMD5caXRlbW1heAorICAgICUKKyAgICAlIE1ha2UgdGhpcyBhIHBhcmFncmFwaCBzbyB3ZSBnZXQgdGhlIFxwYXJza2lwIGdsdWUgYW5kIHdyYXBwaW5nLAorICAgICUgYnV0IGxlYXZlIGl0IHJhZ2dlZC1yaWdodC4KKyAgICBcYmVnaW5ncm91cAorICAgICAgXGFkdmFuY2VcbGVmdHNraXAgYnktXHRhYmxlaW5kZW50CisgICAgICBcYWR2YW5jZVxoc2l6ZSBieVx0YWJsZWluZGVudAorICAgICAgXGFkdmFuY2VccmlnaHRza2lwIGJ5MHB0IHBsdXMxZmlsCisgICAgICBcbGVhdmV2bW9kZVx1bmhib3gwXHBhcgorICAgIFxlbmRncm91cAorICAgICUKKyAgICAlIFdlJ3JlIGdvaW5nIHRvIGJlIHN0YXJ0aW5nIGEgcGFyYWdyYXBoLCBidXQgd2UgZG9uJ3Qgd2FudCB0aGUKKyAgICAlIFxwYXJza2lwIGdsdWUgLS0gbG9naWNhbGx5IGl0J3MgcGFydCBvZiB0aGUgQGl0ZW0gd2UganVzdCBzdGFydGVkLgorICAgIFxub2JyZWFrIFx2c2tpcC1ccGFyc2tpcAorICAgICUKKyAgICAlIFN0b3AgYSBwYWdlIGJyZWFrIGF0IHRoZSBccGFyc2tpcCBnbHVlIGNvbWluZyB1cC4gIEhvd2V2ZXIsIGlmCisgICAgJSB3aGF0IGZvbGxvd3MgaXMgYW4gZW52aXJvbm1lbnQgc3VjaCBhcyBAZXhhbXBsZSwgdGhlcmUgd2lsbCBiZSBubworICAgICUgXHBhcnNraXAgZ2x1ZTsgdGhlbiB0aGUgbmVnYXRpdmUgdnNraXAgd2UganVzdCBpbnNlcnRlZCB3b3VsZAorICAgICUgY2F1c2UgdGhlIGV4YW1wbGUgYW5kIHRoZSBpdGVtIHRvIGNyYXNoIHRvZ2V0aGVyLiAgU28gd2UgdXNlIHRoaXMKKyAgICAlIGJpemFycmUgdmFsdWUgb2YgMTAwMDEgYXMgYSBzaWduYWwgdG8gXGFib3ZlZW52YnJlYWsgdG8gaW5zZXJ0CisgICAgJSBccGFyc2tpcCBnbHVlIGFmdGVyIGFsbC4gIFNlY3Rpb24gdGl0bGVzIGFyZSBoYW5kbGVkIHRoaXMgd2F5IGFsc28uCisgICAgJQorICAgIFxwZW5hbHR5IDEwMDAxCisgICAgXGVuZGdyb3VwCisgICAgXGl0ZW14bmVlZHNuZWdhdGl2ZXZza2lwZmFsc2UKKyAgXGVsc2UKKyAgICAlIFRoZSBpdGVtIHRleHQgZml0cyBpbnRvIHRoZSBzcGFjZS4gIFN0YXJ0IGEgcGFyYWdyYXBoLCBzbyB0aGF0IHRoZQorICAgICUgZm9sbG93aW5nIHRleHQgKGlmIGFueSkgd2lsbCBlbmQgdXAgb24gdGhlIHNhbWUgbGluZS4KKyAgICBcbm9pbmRlbnQKKyAgICAlIERvIHRoaXMgd2l0aCBrZXJucyBhbmQgXHVuaGJveCBzbyB0aGF0IGlmIHRoZXJlIGlzIGEgZm9vdG5vdGUgaW4KKyAgICAlIHRoZSBpdGVtIHRleHQsIGl0IGNhbiBtaWdyYXRlIHRvIHRoZSBtYWluIHZlcnRpY2FsIGxpc3QgYW5kCisgICAgJSBldmVudHVhbGx5IGJlIHByaW50ZWQuCisgICAgXG5vYnJlYWtca2Vybi1cdGFibGVpbmRlbnQKKyAgICBcZGltZW4wID0gXGl0ZW1tYXggIFxhZHZhbmNlXGRpbWVuMCBieSBcaXRlbW1hcmdpbiBcYWR2YW5jZVxkaW1lbjAgYnkgLVx3ZDAKKyAgICBcdW5oYm94MAorICAgIFxub2JyZWFrXGtlcm5cZGltZW4wCisgICAgXGVuZGdyb3VwCisgICAgXGl0ZW14bmVlZHNuZWdhdGl2ZXZza2lwdHJ1ZQorICBcZmkKK30KKworXGRlZlxpdGVte1xlcnJtZXNzYWdle0BpdGVtIHdoaWxlIG5vdCBpbiBhIGxpc3QgZW52aXJvbm1lbnR9fQorXGRlZlxpdGVteHtcZXJybWVzc2FnZXtAaXRlbXggd2hpbGUgbm90IGluIGEgbGlzdCBlbnZpcm9ubWVudH19CisKKyUgQHRhYmxlLCBAZnRhYmxlLCBAdnRhYmxlLgorXGVudmRlZlx0YWJsZXslCisgIFxsZXRcaXRlbWluZGV4XGdvYmJsZQorICBcdGFibGVjaGVja3t0YWJsZX0lCit9CitcZW52ZGVmXGZ0YWJsZXslCisgIFxkZWZcaXRlbWluZGV4ICMjMXtcZG9pbmQge2ZufXtcY29kZXsjIzF9fX0lCisgIFx0YWJsZWNoZWNre2Z0YWJsZX0lCit9CitcZW52ZGVmXHZ0YWJsZXslCisgIFxkZWZcaXRlbWluZGV4ICMjMXtcZG9pbmQge3ZyfXtcY29kZXsjIzF9fX0lCisgIFx0YWJsZWNoZWNre3Z0YWJsZX0lCit9CitcZGVmXHRhYmxlY2hlY2sjMXslCisgIFxpZm51bSBcdGhlXGNhdGNvZGVgXF5eTT1cYWN0aXZlCisgICAgXGVuZGdyb3VwCisgICAgXGVycm1lc3NhZ2V7VGhpcyBjb21tYW5kIHdvbid0IHdvcmsgaW4gdGhpcyBjb250ZXh0OyBwZXJoYXBzIHRoZSBwcm9ibGVtIGlzCisgICAgICB0aGF0IHdlIGFyZSBcaW5lbnZpcm9ubWVudFx0aGlzZW52fSUKKyAgICBcZGVmXG5leHR7XGRvaWdub3JleyMxfX0lCisgIFxlbHNlCisgICAgXGxldFxuZXh0XHRhYmxleAorICBcZmkKKyAgXG5leHQKK30KK1xkZWZcdGFibGV4IzF7JQorICBcZGVmXGl0ZW1pbmRpY2F0ZXsjMX0lCisgIFxwYXJzZWFyZ1x0YWJsZXkKK30KK1xkZWZcdGFibGV5IzF7JQorICB7JQorICAgIFxtYWtldmFsdWVleHBhbmRhYmxlCisgICAgXGVkZWZcdGVtcHtcbm9leHBhbmRcdGFibGV6ICMxXHNwYWNlXHNwYWNlXHNwYWNlfSUKKyAgICBcZXhwYW5kYWZ0ZXIKKyAgfVx0ZW1wIFxlbmR0YWJsZXoKK30KK1xkZWZcdGFibGV6ICMxICMyICMzICM0XGVuZHRhYmxlenslCisgIFxhYm92ZWVudmJyZWFrCisgIFxpZm51bSAwIzE+MCBcYWR2YW5jZSBcbGVmdHNraXAgYnkgIzFcbWlsIFxmaQorICBcaWZudW0gMCMyPjAgXHRhYmxlaW5kZW50PSMyXG1pbCBcZmkKKyAgXGlmbnVtIDAjMz4wIFxhZHZhbmNlIFxyaWdodHNraXAgYnkgIzNcbWlsIFxmaQorICBcaXRlbW1heD1cdGFibGVpbmRlbnQKKyAgXGFkdmFuY2UgXGl0ZW1tYXggYnkgLVxpdGVtbWFyZ2luCisgIFxhZHZhbmNlIFxsZWZ0c2tpcCBieSBcdGFibGVpbmRlbnQKKyAgXGV4ZGVudGFtb3VudD1cdGFibGVpbmRlbnQKKyAgXHBhcmluZGVudCA9IDBwdAorICBccGFyc2tpcCA9IFxzbWFsbHNraXBhbW91bnQKKyAgXGlmZGltIFxwYXJza2lwPTBwdCBccGFyc2tpcD0ycHQgXGZpCisgIFxsZXRcaXRlbSA9IFxpbnRlcm5hbEJpdGVtCisgIFxsZXRcaXRlbXggPSBcaW50ZXJuYWxCaXRlbXgKK30KK1xkZWZcRXRhYmxle1xlbmRncmFmXGFmdGVyZW52YnJlYWt9CitcbGV0XEVmdGFibGVcRXRhYmxlCitcbGV0XEV2dGFibGVcRXRhYmxlCitcbGV0XEVpdGVtaXplXEV0YWJsZQorXGxldFxFZW51bWVyYXRlXEV0YWJsZQorCislIFRoaXMgaXMgdGhlIGNvdW50ZXIgdXNlZCBieSBAZW51bWVyYXRlLCB3aGljaCBpcyByZWFsbHkgQGl0ZW1pemUKKworXG5ld2NvdW50IFxpdGVtbm8KKworXGVudmRlZlxpdGVtaXple1xwYXJzZWFyZ1xkb2l0ZW1pemV9CisKK1xkZWZcZG9pdGVtaXplIzF7JQorICBcYWJvdmVlbnZicmVhaworICBcaXRlbW1heD1caXRlbWluZGVudAorICBcYWR2YW5jZVxpdGVtbWF4IGJ5IC1caXRlbW1hcmdpbgorICBcYWR2YW5jZVxsZWZ0c2tpcCBieSBcaXRlbWluZGVudAorICBcZXhkZW50YW1vdW50PVxpdGVtaW5kZW50CisgIFxwYXJpbmRlbnQ9MHB0CisgIFxwYXJza2lwPVxzbWFsbHNraXBhbW91bnQKKyAgXGlmZGltXHBhcnNraXA9MHB0IFxwYXJza2lwPTJwdCBcZmkKKyAgJQorICAlIFRyeSB0eXBlc2V0dGluZyB0aGUgaXRlbSBtYXJrIHRoYXQgaWYgdGhlIGRvY3VtZW50IGVycm9uZW91c2x5IHNheXMKKyAgJSBzb21ldGhpbmcgbGlrZSBAaXRlbWl6ZSBAc2FtcCAoaW50ZW5kaW5nIEB0YWJsZSksIHRoZXJlJ3MgYW4gZXJyb3IKKyAgJSByaWdodCBhd2F5IGF0IHRoZSBAaXRlbWl6ZS4gIEl0J3Mgbm90IHRoZSBiZXN0IGVycm9yIG1lc3NhZ2UgaW4gdGhlCisgICUgd29ybGQsIGJ1dCBpdCdzIGJldHRlciB0aGFuIGxlYXZpbmcgaXQgdG8gdGhlIEBpdGVtLiAgVGhpcyBtZWFucyBpZgorICAlIHRoZSB1c2VyIHdhbnRzIGFuIGVtcHR5IG1hcmssIHRoZXkgaGF2ZSB0byBzYXkgQHd7fSBub3QganVzdCBAdy4KKyAgXGRlZlxpdGVtY29udGVudHN7IzF9JQorICBcc2V0Ym94MCA9IFxoYm94e1xpdGVtY29udGVudHN9JQorICAlCisgICUgQGl0ZW1pemUgd2l0aCBubyBhcmcgaXMgZXF1aXZhbGVudCB0byBAaXRlbWl6ZSBAYnVsbGV0LgorICBcaWZ4XGl0ZW1jb250ZW50c1xlbXB0eVxkZWZcaXRlbWNvbnRlbnRze1xidWxsZXR9XGZpCisgICUKKyAgXGxldFxpdGVtPVxpdGVtaXplaXRlbQorfQorCislIERlZmluaXRpb24gb2YgQGl0ZW0gd2hpbGUgaW5zaWRlIEBpdGVtaXplIGFuZCBAZW51bWVyYXRlLgorJQorXGRlZlxpdGVtaXplaXRlbXslCisgIFxhZHZhbmNlXGl0ZW1ubyBieSAxICAlIGZvciBlbnVtZXJhdGlvbnMKKyAge1xsZXRccGFyPVxlbmRncmFmIFxzbWFsbGJyZWFrfSUgcmVhc29uYWJsZSBwbGFjZSB0byBicmVhaworICB7JQorICAgJSBJZiB0aGUgZG9jdW1lbnQgaGFzIGFuIEBpdGVtaXplIGRpcmVjdGx5IGFmdGVyIGEgc2VjdGlvbiB0aXRsZSwgYQorICAgJSBcbm9icmVhayB3aWxsIGJlIGxhc3Qgb24gdGhlIGxpc3QsIGFuZCBcc2VjdGlvbmhlYWRpbmcgd2lsbCBoYXZlCisgICAlIGRvbmUgYSBcdnNraXAtXHBhcnNraXAuICBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gemVybworICAgJSBwYXJza2lwLCBvciB0aGUgaXRlbSB0ZXh0IHdpbGwgY3Jhc2ggd2l0aCB0aGUgaGVhZGluZy4gIE9uIHRoZQorICAgJSBvdGhlciBoYW5kLCB3aGVuIHRoZXJlIGlzIG5vcm1hbCB0ZXh0IHByZWNlZGluZyB0aGUgaXRlbSAoYXMgdGhlcmUKKyAgICUgdXN1YWxseSBpcyksIHdlIGRvIHdhbnQgdG8gemVybyBwYXJza2lwLCBvciB0aGVyZSB3b3VsZCBiZSB0b28gbXVjaAorICAgJSBzcGFjZS4gIEluIHRoYXQgY2FzZSwgd2Ugd29uJ3QgaGF2ZSBhIFxub2JyZWFrIGJlZm9yZS4gIEF0IGxlYXN0CisgICAlIHRoYXQncyB0aGUgdGhlb3J5LgorICAgXGlmbnVtXGxhc3RwZW5hbHR5PDEwMDAwIFxwYXJza2lwPTBpbiBcZmkKKyAgIFxub2luZGVudAorICAgXGhib3ggdG8gMHB0e1xoc3MgXGl0ZW1jb250ZW50cyBca2VyblxpdGVtbWFyZ2lufSUKKyAgICUKKyAgIFx2YWRqdXN0e1xwZW5hbHR5IDEyMDB9fSUgbm90IGdvb2QgdG8gYnJlYWsgYWZ0ZXIgZmlyc3QgbGluZSBvZiBpdGVtLgorICBcZmx1c2hjcgorfQorCislIFxzcGxpdG9mZiBUT0tFTlNcZW5kbWFyayBkZWZpbmVzIFxmaXJzdCB0byBiZSB0aGUgZmlyc3QgdG9rZW4gaW4KKyUgVE9LRU5TLCBhbmQgXHJlc3QgdG8gYmUgdGhlIHJlbWFpbmRlci4KKyUKK1xkZWZcc3BsaXRvZmYjMSMyXGVuZG1hcmt7XGRlZlxmaXJzdHsjMX1cZGVmXHJlc3R7IzJ9fSUKKworJSBBbGxvdyBhbiBvcHRpb25hbCBhcmd1bWVudCBvZiBhbiB1cHBlcmNhc2UgbGV0dGVyLCBsb3dlcmNhc2UgbGV0dGVyLAorJSBvciBudW1iZXIsIHRvIHNwZWNpZnkgdGhlIGZpcnN0IGxhYmVsIGluIHRoZSBlbnVtZXJhdGVkIGxpc3QuICBObworJSBhcmd1bWVudCBpcyB0aGUgc2FtZSBhcyBgMScuCislCitcZW52cGFyc2VhcmdkZWZcZW51bWVyYXRle1xlbnVtZXJhdGV5ICMxICBcZW5kZW51bWVyYXRleX0KK1xkZWZcZW51bWVyYXRleSAjMSAjMlxlbmRlbnVtZXJhdGV5eyUKKyAgJSBJZiB3ZSB3ZXJlIGdpdmVuIG5vIGFyZ3VtZW50LCBwcmV0ZW5kIHdlIHdlcmUgZ2l2ZW4gYDEnLgorICBcZGVmXHRoZWFyZ3sjMX0lCisgIFxpZnhcdGhlYXJnXGVtcHR5IFxkZWZcdGhlYXJnezF9XGZpCisgICUKKyAgJSBEZXRlY3QgaWYgdGhlIGFyZ3VtZW50IGlzIGEgc2luZ2xlIHRva2VuLiAgSWYgc28sIGl0IG1pZ2h0IGJlIGEKKyAgJSBsZXR0ZXIuICBPdGhlcndpc2UsIHRoZSBvbmx5IHZhbGlkIHRoaW5nIGl0IGNhbiBiZSBpcyBhIG51bWJlci4KKyAgJSAoV2Ugd2lsbCBhbHdheXMgaGF2ZSBvbmUgdG9rZW4sIGJlY2F1c2Ugb2YgdGhlIHRlc3Qgd2UganVzdCBtYWRlLgorICAlIFRoaXMgaXMgYSBnb29kIHRoaW5nLCBzaW5jZSBcc3BsaXRvZmYgZG9lc24ndCB3b3JrIGdpdmVuIG5vdGhpbmcgYXQKKyAgJSBhbGwgLS0gdGhlIGZpcnN0IHBhcmFtZXRlciBpcyB1bmRlbGltaXRlZC4pCisgIFxleHBhbmRhZnRlclxzcGxpdG9mZlx0aGVhcmdcZW5kbWFyaworICBcaWZ4XHJlc3RcZW1wdHkKKyAgICAlIE9ubHkgb25lIHRva2VuIGluIHRoZSBhcmd1bWVudC4gIEl0IGNvdWxkIHN0aWxsIGJlIGFueXRoaW5nLgorICAgICUgQSBgYGxvd2VyY2FzZSBsZXR0ZXInJyBpcyBvbmUgd2hvc2UgXGxjY29kZSBpcyBub256ZXJvLgorICAgICUgQW4gYGB1cHBlcmNhc2UgbGV0dGVyJycgaXMgb25lIHdob3NlIFxsY2NvZGUgaXMgYm90aCBub256ZXJvLCBhbmQKKyAgICAlICAgbm90IGVxdWFsIHRvIGl0c2VsZi4KKyAgICAlIE90aGVyd2lzZSwgd2UgYXNzdW1lIGl0J3MgYSBudW1iZXIuCisgICAgJQorICAgICUgV2UgbmVlZCB0aGUgXHJlbGF4IGF0IHRoZSBlbmQgb2YgdGhlIFxpZm51bSBsaW5lcyB0byBzdG9wIFRlWCBmcm9tCisgICAgJSBjb250aW51aW5nIHRvIGxvb2sgZm9yIGEgPG51bWJlcj4uCisgICAgJQorICAgIFxpZm51bVxsY2NvZGVcZXhwYW5kYWZ0ZXJgXHRoZWFyZz0wXHJlbGF4CisgICAgICBcbnVtZXJpY2VudW1lcmF0ZSAlIGEgbnVtYmVyICh3ZSBob3BlKQorICAgIFxlbHNlCisgICAgICAlIEl0J3MgYSBsZXR0ZXIuCisgICAgICBcaWZudW1cbGNjb2RlXGV4cGFuZGFmdGVyYFx0aGVhcmc9XGV4cGFuZGFmdGVyYFx0aGVhcmdccmVsYXgKKyAgICAgICAgXGxvd2VyY2FzZWVudW1lcmF0ZSAlIGxvd2VyY2FzZSBsZXR0ZXIKKyAgICAgIFxlbHNlCisgICAgICAgIFx1cHBlcmNhc2VlbnVtZXJhdGUgJSB1cHBlcmNhc2UgbGV0dGVyCisgICAgICBcZmkKKyAgICBcZmkKKyAgXGVsc2UKKyAgICAlIE11bHRpcGxlIHRva2VucyBpbiB0aGUgYXJndW1lbnQuICBXZSBob3BlIGl0J3MgYSBudW1iZXIuCisgICAgXG51bWVyaWNlbnVtZXJhdGUKKyAgXGZpCit9CisKKyUgQW4gQGVudW1lcmF0ZSB3aG9zZSBsYWJlbHMgYXJlIGludGVnZXJzLiAgVGhlIHN0YXJ0aW5nIGludGVnZXIgaXMKKyUgZ2l2ZW4gaW4gXHRoZWFyZy4KKyUKK1xkZWZcbnVtZXJpY2VudW1lcmF0ZXslCisgIFxpdGVtbm8gPSBcdGhlYXJnCisgIFxzdGFydGVudW1lcmF0aW9ue1x0aGVcaXRlbW5vfSUKK30KKworJSBUaGUgc3RhcnRpbmcgKGxvd2VyY2FzZSkgbGV0dGVyIGlzIGluIFx0aGVhcmcuCitcZGVmXGxvd2VyY2FzZWVudW1lcmF0ZXslCisgIFxpdGVtbm8gPSBcZXhwYW5kYWZ0ZXJgXHRoZWFyZworICBcc3RhcnRlbnVtZXJhdGlvbnslCisgICAgJSBCZSBzdXJlIHdlJ3JlIG5vdCBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgYWxwaGFiZXQuCisgICAgXGlmbnVtXGl0ZW1ubz0wCisgICAgICBcZXJybWVzc2FnZXtObyBtb3JlIGxvd2VyY2FzZSBsZXR0ZXJzIGluIEBlbnVtZXJhdGU7IGdldCBhIGJpZ2dlcgorICAgICAgICAgICAgICAgICAgYWxwaGFiZXR9JQorICAgIFxmaQorICAgIFxjaGFyXGxjY29kZVxpdGVtbm8KKyAgfSUKK30KKworJSBUaGUgc3RhcnRpbmcgKHVwcGVyY2FzZSkgbGV0dGVyIGlzIGluIFx0aGVhcmcuCitcZGVmXHVwcGVyY2FzZWVudW1lcmF0ZXslCisgIFxpdGVtbm8gPSBcZXhwYW5kYWZ0ZXJgXHRoZWFyZworICBcc3RhcnRlbnVtZXJhdGlvbnslCisgICAgJSBCZSBzdXJlIHdlJ3JlIG5vdCBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgYWxwaGFiZXQuCisgICAgXGlmbnVtXGl0ZW1ubz0wCisgICAgICBcZXJybWVzc2FnZXtObyBtb3JlIHVwcGVyY2FzZSBsZXR0ZXJzIGluIEBlbnVtZXJhdGU7IGdldCBhIGJpZ2dlcgorICAgICAgICAgICAgICAgICAgYWxwaGFiZXR9CisgICAgXGZpCisgICAgXGNoYXJcdWNjb2RlXGl0ZW1ubworICB9JQorfQorCislIENhbGwgXGRvaXRlbWl6ZSwgYWRkaW5nIGEgcGVyaW9kIHRvIHRoZSBmaXJzdCBhcmd1bWVudCBhbmQgc3VwcGx5aW5nIHRoZQorJSBjb21tb24gbGFzdCB0d28gYXJndW1lbnRzLiAgQWxzbyBzdWJ0cmFjdCBvbmUgZnJvbSB0aGUgaW5pdGlhbCB2YWx1ZSBpbgorJSBcaXRlbW5vLCBzaW5jZSBAaXRlbSBpbmNyZW1lbnRzIFxpdGVtbm8uCislCitcZGVmXHN0YXJ0ZW51bWVyYXRpb24jMXslCisgIFxhZHZhbmNlXGl0ZW1ubyBieSAtMQorICBcZG9pdGVtaXpleyMxLn1cZmx1c2hjcgorfQorCislIEBhbHBoYWVudW1lcmF0ZSBhbmQgQGNhcHNlbnVtZXJhdGUgYXJlIGFiYnJldmlhdGlvbnMgZm9yIGdpdmluZyBhbiBhcmcKKyUgdG8gQGVudW1lcmF0ZS4KKyUKK1xkZWZcYWxwaGFlbnVtZXJhdGV7XGVudW1lcmF0ZXthfX0KK1xkZWZcY2Fwc2VudW1lcmF0ZXtcZW51bWVyYXRle0F9fQorXGRlZlxFYWxwaGFlbnVtZXJhdGV7XEVlbnVtZXJhdGV9CitcZGVmXEVjYXBzZW51bWVyYXRle1xFZW51bWVyYXRlfQorCisKKyUgQG11bHRpdGFibGUgbWFjcm9zCislIEFteSBIZW5kcmlja3NvbiwgOC8xOC85NCwgMy82Lzk2CislCislIEBtdWx0aXRhYmxlIC4uLiBAZW5kIG11bHRpdGFibGUgd2lsbCBtYWtlIGFzIG1hbnkgY29sdW1ucyBhcyBkZXNpcmVkLgorJSBDb250ZW50cyBvZiBlYWNoIGNvbHVtbiB3aWxsIHdyYXAgYXQgd2lkdGggZ2l2ZW4gaW4gcHJlYW1ibGUuICBXaWR0aAorJSBjYW4gYmUgc3BlY2lmaWVkIGVpdGhlciB3aXRoIHNhbXBsZSB0ZXh0IGdpdmVuIGluIGEgdGVtcGxhdGUgbGluZSwKKyUgb3IgaW4gcGVyY2VudCBvZiBcaHNpemUsIHRoZSBjdXJyZW50IHdpZHRoIG9mIHRleHQgb24gcGFnZS4KKworJSBUYWJsZSBjYW4gY29udGludWUgb3ZlciBwYWdlcyBidXQgd2lsbCBvbmx5IGJyZWFrIGJldHdlZW4gbGluZXMuCisKKyUgVG8gbWFrZSBwcmVhbWJsZToKKyUKKyUgRWl0aGVyIGRlZmluZSB3aWR0aHMgb2YgY29sdW1ucyBpbiB0ZXJtcyBvZiBwZXJjZW50IG9mIFxoc2l6ZToKKyUgICBAbXVsdGl0YWJsZSBAY29sdW1uZnJhY3Rpb25zIC4yNSAuMyAuNDUKKyUgICBAaXRlbSAuLi4KKyUKKyUgICBOdW1iZXJzIGZvbGxvd2luZyBAY29sdW1uZnJhY3Rpb25zIGFyZSB0aGUgcGVyY2VudCBvZiB0aGUgdG90YWwKKyUgICBjdXJyZW50IGhzaXplIHRvIGJlIHVzZWQgZm9yIGVhY2ggY29sdW1uLiBZb3UgbWF5IHVzZSBhcyBtYW55CislICAgY29sdW1ucyBhcyBkZXNpcmVkLgorCisKKyUgT3IgdXNlIGEgdGVtcGxhdGU6CislICAgQG11bHRpdGFibGUge0NvbHVtbiAxIHRlbXBsYXRlfSB7Q29sdW1uIDIgdGVtcGxhdGV9IHtDb2x1bW4gMyB0ZW1wbGF0ZX0KKyUgICBAaXRlbSAuLi4KKyUgICB1c2luZyB0aGUgd2lkZXN0IHRlcm0gZGVzaXJlZCBpbiBlYWNoIGNvbHVtbi4KKworJSBFYWNoIG5ldyB0YWJsZSBsaW5lIHN0YXJ0cyB3aXRoIEBpdGVtLCBlYWNoIHN1YnNlcXVlbnQgbmV3IGNvbHVtbgorJSBzdGFydHMgd2l0aCBAdGFiLiBFbXB0eSBjb2x1bW5zIG1heSBiZSBwcm9kdWNlZCBieSBzdXBwbHlpbmcgQHRhYidzCislIHdpdGggbm90aGluZyBiZXR3ZWVuIHRoZW0gZm9yIGFzIG1hbnkgdGltZXMgYXMgZW1wdHkgY29sdW1ucyBhcmUgbmVlZGVkLAorJSBpZSwgQHRhYkB0YWJAdGFiIHdpbGwgcHJvZHVjZSB0d28gZW1wdHkgY29sdW1ucy4KKworJSBAaXRlbSwgQHRhYiBkbyBub3QgbmVlZCB0byBiZSBvbiB0aGVpciBvd24gbGluZXMsIGJ1dCBpdCB3aWxsIG5vdCBodXJ0CislIGlmIHRoZXkgYXJlLgorCislIFNhbXBsZSBtdWx0aXRhYmxlOgorCislICAgQG11bHRpdGFibGUge0NvbHVtbiAxIHRlbXBsYXRlfSB7Q29sdW1uIDIgdGVtcGxhdGV9IHtDb2x1bW4gMyB0ZW1wbGF0ZX0KKyUgICBAaXRlbSBmaXJzdCBjb2wgc3R1ZmYgQHRhYiBzZWNvbmQgY29sIHN0dWZmIEB0YWIgdGhpcmQgY29sCislICAgQGl0ZW0KKyUgICBmaXJzdCBjb2wgc3R1ZmYKKyUgICBAdGFiCislICAgc2Vjb25kIGNvbCBzdHVmZgorJSAgIEB0YWIKKyUgICB0aGlyZCBjb2wKKyUgICBAaXRlbSBmaXJzdCBjb2wgc3R1ZmYgQHRhYiBzZWNvbmQgY29sIHN0dWZmCislICAgQHRhYiBNYW55IHBhcmFncmFwaHMgb2YgdGV4dCBtYXkgYmUgdXNlZCBpbiBhbnkgY29sdW1uLgorJQorJSAgICAgICAgIFRoZXkgd2lsbCB3cmFwIGF0IHRoZSB3aWR0aCBkZXRlcm1pbmVkIGJ5IHRoZSB0ZW1wbGF0ZS4KKyUgICBAaXRlbUB0YWJAdGFiIFRoaXMgd2lsbCBiZSBpbiB0aGlyZCBjb2x1bW4uCislICAgQGVuZCBtdWx0aXRhYmxlCisKKyUgRGVmYXVsdCBkaW1lbnNpb25zIG1heSBiZSByZXNldCBieSB1c2VyLgorJSBAbXVsdGl0YWJsZXBhcnNraXAgaXMgdmVydGljYWwgc3BhY2UgYmV0d2VlbiBwYXJhZ3JhcGhzIGluIHRhYmxlLgorJSBAbXVsdGl0YWJsZXBhcmluZGVudCBpcyBwYXJhZ3JhcGggaW5kZW50IGluIHRhYmxlLgorJSBAbXVsdGl0YWJsZWNvbG1hcmdpbiBpcyBob3Jpem9udGFsIHNwYWNlIHRvIGJlIGxlZnQgYmV0d2VlbiBjb2x1bW5zLgorJSBAbXVsdGl0YWJsZWxpbmVzcGFjZSBpcyBzcGFjZSB0byBsZWF2ZSBiZXR3ZWVuIHRhYmxlIGl0ZW1zLCBiYXNlbGluZQorJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJhc2VsaW5lLgorJSAgIDBwdCBtZWFucyBpdCBkZXBlbmRzIG9uIGN1cnJlbnQgbm9ybWFsIGxpbmUgc3BhY2luZy4KKyUKK1xuZXdza2lwXG11bHRpdGFibGVwYXJza2lwCitcbmV3c2tpcFxtdWx0aXRhYmxlcGFyaW5kZW50CitcbmV3ZGltZW5cbXVsdGl0YWJsZWNvbHNwYWNlCitcbmV3c2tpcFxtdWx0aXRhYmxlbGluZXNwYWNlCitcbXVsdGl0YWJsZXBhcnNraXA9MHB0CitcbXVsdGl0YWJsZXBhcmluZGVudD02cHQKK1xtdWx0aXRhYmxlY29sc3BhY2U9MTJwdAorXG11bHRpdGFibGVsaW5lc3BhY2U9MHB0CisKKyUgTWFjcm9zIHVzZWQgdG8gc2V0IHVwIGhhbGlnbiBwcmVhbWJsZToKKyUKK1xsZXRcZW5kc2V0dXB0YWJsZVxyZWxheAorXGRlZlx4ZW5kc2V0dXB0YWJsZXtcZW5kc2V0dXB0YWJsZX0KK1xsZXRcY29sdW1uZnJhY3Rpb25zXHJlbGF4CitcZGVmXHhjb2x1bW5mcmFjdGlvbnN7XGNvbHVtbmZyYWN0aW9uc30KK1xuZXdpZlxpZnNldHBlcmNlbnQKKworJSAjMSBpcyB0aGUgQGNvbHVtbmZyYWN0aW9uLCB1c3VhbGx5IGEgZGVjaW1hbCBudW1iZXIgbGlrZSAuNSwgYnV0IG1pZ2h0CislIGJlIGp1c3QgMS4gIFdlIGp1c3QgdXNlIGl0LCB3aGF0ZXZlciBpdCBpcy4KKyUKK1xkZWZccGlja3Vwd2hvbGVmcmFjdGlvbiMxIHslCisgIFxnbG9iYWxcYWR2YW5jZVxjb2xjb3VudCBieSAxCisgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZSBjb2xcdGhlXGNvbGNvdW50XGVuZGNzbmFtZXsjMVxoc2l6ZX0lCisgIFxzZXR1cHRhYmxlCit9CisKK1xuZXdjb3VudFxjb2xjb3VudAorXGRlZlxzZXR1cHRhYmxlIzF7JQorICBcZGVmXGZpcnN0YXJneyMxfSUKKyAgXGlmeFxmaXJzdGFyZ1x4ZW5kc2V0dXB0YWJsZQorICAgIFxsZXRcZ28gPSBccmVsYXgKKyAgXGVsc2UKKyAgICBcaWZ4XGZpcnN0YXJnXHhjb2x1bW5mcmFjdGlvbnMKKyAgICAgIFxnbG9iYWxcc2V0cGVyY2VudHRydWUKKyAgICBcZWxzZQorICAgICAgXGlmc2V0cGVyY2VudAorICAgICAgICAgXGxldFxnb1xwaWNrdXB3aG9sZWZyYWN0aW9uCisgICAgICBcZWxzZQorICAgICAgICAgXGdsb2JhbFxhZHZhbmNlXGNvbGNvdW50IGJ5IDEKKyAgICAgICAgIFxzZXRib3gwPVxoYm94eyMxXHVuc2tpcFxzcGFjZX0lIEFkZCBhIG5vcm1hbCB3b3JkIHNwYWNlIGFzIGEKKyAgICAgICAgICAgICAgICAgICAlIHNlcGFyYXRvcjsgdHlwaWNhbGx5IHRoYXQgaXMgYWx3YXlzIGluIHRoZSBpbnB1dCwgYW55d2F5LgorICAgICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lIGNvbFx0aGVcY29sY291bnRcZW5kY3NuYW1le1x0aGVcd2QwfSUKKyAgICAgIFxmaQorICAgIFxmaQorICAgIFxpZnhcZ29ccGlja3Vwd2hvbGVmcmFjdGlvbgorICAgICAgJSBQdXQgdGhlIGFyZ3VtZW50IGJhY2sgZm9yIHRoZSBccGlja3Vwd2hvbGVmcmFjdGlvbiBjYWxsLCBzbworICAgICAgJSB3ZSdsbCBhbHdheXMgaGF2ZSBhIHBlcmlvZCB0aGVyZSB0byBiZSBwYXJzZWQuCisgICAgICBcZGVmXGdve1xwaWNrdXB3aG9sZWZyYWN0aW9uIzF9JQorICAgIFxlbHNlCisgICAgICBcbGV0XGdvID0gXHNldHVwdGFibGUKKyAgICBcZmklCisgIFxmaQorICBcZ28KK30KKworJSBtdWx0aXRhYmxlLW9ubHkgY29tbWFuZHMuCislCislIEBoZWFkaXRlbSBzdGFydHMgYSBoZWFkaW5nIHJvdywgd2hpY2ggd2UgdHlwZXNldCBpbiBib2xkLgorJSBBc3NpZ25tZW50cyBoYXZlIHRvIGJlIGdsb2JhbCBzaW5jZSB3ZSBhcmUgaW5zaWRlIHRoZSBpbXBsaWNpdCBncm91cAorJSBvZiBhbiBhbGlnbm1lbnQgZW50cnkuICBcZXZlcnljciByZXNldHMgXGV2ZXJ5dGFiIHNvIHdlIGRvbid0IGhhdmUgdG8KKyUgdW5kbyBpdCBvdXJzZWx2ZXMuCitcZGVmXGhlYWRpdGVtZm9udHtcYn0lIGZvciBwZW9wbGUgdG8gdXNlIGluIHRoZSB0ZW1wbGF0ZSByb3c7IG5vdCBjaGFuZ2VhYmxlCitcZGVmXGhlYWRpdGVteyUKKyAgXGNoZWNrZW52XG11bHRpdGFibGUKKyAgXGNyY3IKKyAgXGdsb2JhbFxldmVyeXRhYj17XGJmfSUgY2FuJ3QgdXNlIFxoZWFkaXRlbWZvbnQgc2luY2UgdGhlIHBhcnNpbmcgZGlmZmVycworICBcdGhlXGV2ZXJ5dGFiICUgZm9yIHRoZSBmaXJzdCBpdGVtCit9JQorJQorJSBBIFx0YWIgdXNlZCB0byBpbmNsdWRlIFxoc2tpcDFzcC4gIEJ1dCB0aGVuIHRoZSBzcGFjZSBpbiBhIHRlbXBsYXRlCislIGxpbmUgaXMgbm90IGVub3VnaC4gIFRoYXQgaXMgYmFkLiAgU28gbGV0J3MgZ28gYmFjayB0byBqdXN0IGAmJyB1bnRpbAorJSB3ZSBhZ2FpbiBlbmNvdW50ZXIgdGhlIHByb2JsZW0gdGhlIDFzcCB3YXMgaW50ZW5kZWQgdG8gc29sdmUuCislCQkJCQktLWthcmwsIG5hdGhhbkBhY20ub3JnLCAyMGFwcjk5LgorXGRlZlx0YWJ7XGNoZWNrZW52XG11bHRpdGFibGUgJlx0aGVcZXZlcnl0YWJ9JQorCislIEBtdWx0aXRhYmxlIC4uLiBAZW5kIG11bHRpdGFibGUgZGVmaW5pdGlvbnM6CislCitcbmV3dG9rc1xldmVyeXRhYiAgJSBpbnNlcnQgYWZ0ZXIgZXZlcnkgdGFiLgorJQorXGVudmRlZlxtdWx0aXRhYmxleyUKKyAgXHZza2lwXHBhcnNraXAKKyAgXHN0YXJ0c2F2aW5naW5zZXJ0cworICAlCisgICUgQGl0ZW0gd2l0aGluIGEgbXVsdGl0YWJsZSBzdGFydHMgYSBub3JtYWwgcm93LgorICAlIFdlIHVzZSBcZGVmIGluc3RlYWQgb2YgXGxldCBzbyB0aGF0IGlmIG9uZSBvZiB0aGUgbXVsdGl0YWJsZSBlbnRyaWVzCisgICUgY29udGFpbnMgYW4gQGl0ZW1pemUsIHdlIGRvbid0IGNob2tlIG9uIHRoZSBcaXRlbSAoc2VlbiBhcyBcY3JjciBha2EKKyAgJSBcZW5kdGVtcGxhdGUpIGV4cGFuZGluZyBcZG9pdGVtaXplLgorICBcZGVmXGl0ZW17XGNyY3J9JQorICAlCisgIFx0b2xlcmFuY2U9OTUwMAorICBcaGJhZG5lc3M9OTUwMAorICBcc2V0bXVsdGl0YWJsZXNwYWNpbmcKKyAgXHBhcnNraXA9XG11bHRpdGFibGVwYXJza2lwCisgIFxwYXJpbmRlbnQ9XG11bHRpdGFibGVwYXJpbmRlbnQKKyAgXG92ZXJmdWxscnVsZT0wcHQKKyAgXGdsb2JhbFxjb2xjb3VudD0wCisgICUKKyAgXGV2ZXJ5Y3IgPSB7JQorICAgIFxub2FsaWdueyUKKyAgICAgIFxnbG9iYWxcZXZlcnl0YWI9e30lCisgICAgICBcZ2xvYmFsXGNvbGNvdW50PTAgJSBSZXNldCB0aGUgY29sdW1uIGNvdW50ZXIuCisgICAgICAlIENoZWNrIGZvciBzYXZlZCBmb290bm90ZXMsIGV0Yy4KKyAgICAgIFxjaGVja2luc2VydHMKKyAgICAgICUgS2VlcHMgdW5kZXJmdWxsIGJveCBtZXNzYWdlcyBvZmYgd2hlbiB0YWJsZSBicmVha3Mgb3ZlciBwYWdlcy4KKyAgICAgICVcZmlsYnJlYWsKKwklIE1heWJlIHNvLCBidXQgaXQgYWxzbyBjcmVhdGVzIHJlYWxseSB3ZWlyZCBwYWdlIGJyZWFrcyB3aGVuIHRoZQorCSUgdGFibGUgYnJlYWtzIG92ZXIgcGFnZXMuIFdvdWxkbid0IFx2ZmlsIGJlIGJldHRlcj8gIFdhaXQgdW50aWwgdGhlCisJJSBwcm9ibGVtIG1hbmlmZXN0cyBpdHNlbGYsIHNvIGl0IGNhbiBiZSBmaXhlZCBmb3IgcmVhbCAtLWthcmwuCisgICAgfSUKKyAgfSUKKyAgJQorICBccGFyc2VhcmdcZG9tdWx0aXRhYmxlCit9CitcZGVmXGRvbXVsdGl0YWJsZSMxeyUKKyAgJSBUbyBwYXJzZSBldmVyeXRoaW5nIGJldHdlZW4gQG11bHRpdGFibGUgYW5kIEBpdGVtOgorICBcc2V0dXB0YWJsZSMxIFxlbmRzZXR1cHRhYmxlCisgICUKKyAgJSBUaGlzIHByZWFtYmxlIHNldHMgdXAgYSBnZW5lcmljIGNvbHVtbiBkZWZpbml0aW9uLCB3aGljaCB3aWxsCisgICUgYmUgdXNlZCBhcyBtYW55IHRpbWVzIGFzIHVzZXIgY2FsbHMgZm9yIGNvbHVtbnMuCisgICUgXHZ0b3Agd2lsbCBzZXQgYSBzaW5nbGUgbGluZSBhbmQgd2lsbCBhbHNvIGxldCB0ZXh0IHdyYXAgYW5kCisgICUgY29udGludWUgZm9yIG1hbnkgcGFyYWdyYXBocyBpZiBkZXNpcmVkLgorICBcaGFsaWduXGJncm91cCAmJQorICAgIFxnbG9iYWxcYWR2YW5jZVxjb2xjb3VudCBieSAxCisgICAgXG11bHRpc3RydXQKKyAgICBcdnRvcHslCisgICAgICAlIFVzZSB0aGUgY3VycmVudCBcY29sY291bnQgdG8gZmluZCB0aGUgY29ycmVjdCBjb2x1bW4gd2lkdGg6CisgICAgICBcaHNpemU9XGV4cGFuZGFmdGVyXGNzbmFtZSBjb2xcdGhlXGNvbGNvdW50XGVuZGNzbmFtZQorICAgICAgJQorICAgICAgJSBJbiBvcmRlciB0byBrZWVwIGVudHJpZXMgZnJvbSBidW1waW5nIGludG8gZWFjaCBvdGhlcgorICAgICAgJSB3ZSB3aWxsIGFkZCBhIFxsZWZ0c2tpcCBvZiBcbXVsdGl0YWJsZWNvbHNwYWNlIHRvIGFsbCBjb2x1bW5zIGFmdGVyCisgICAgICAlIHRoZSBmaXJzdCBvbmUuCisgICAgICAlCisgICAgICAlIElmIGEgdGVtcGxhdGUgaGFzIGJlZW4gdXNlZCwgd2Ugd2lsbCBhZGQgXG11bHRpdGFibGVjb2xzcGFjZQorICAgICAgJSB0byB0aGUgd2lkdGggb2YgZWFjaCB0ZW1wbGF0ZSBlbnRyeS4KKyAgICAgICUKKyAgICAgICUgSWYgdGhlIHVzZXIgaGFzIHNldCBwcmVhbWJsZSBpbiB0ZXJtcyBvZiBwZXJjZW50IG9mIFxoc2l6ZSB3ZSB3aWxsCisgICAgICAlIHVzZSB0aGF0IGRpbWVuc2lvbiBhcyB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbiwgYW5kIHRoZSBcbGVmdHNraXAKKyAgICAgICUgd2lsbCBrZWVwIGVudHJpZXMgZnJvbSBidW1waW5nIGludG8gZWFjaCBvdGhlci4gIFRhYmxlIHdpbGwgc3RhcnQgYXQKKyAgICAgICUgbGVmdCBtYXJnaW4gYW5kIGZpbmFsIGNvbHVtbiB3aWxsIGp1c3RpZnkgYXQgcmlnaHQgbWFyZ2luLgorICAgICAgJQorICAgICAgJSBNYWtlIHN1cmUgd2UgZG9uJ3QgaW5oZXJpdCBccmlnaHRza2lwIGZyb20gdGhlIG91dGVyIGVudmlyb25tZW50LgorICAgICAgXHJpZ2h0c2tpcD0wcHQKKyAgICAgIFxpZm51bVxjb2xjb3VudD0xCisJJSBUaGUgZmlyc3QgY29sdW1uIHdpbGwgYmUgaW5kZW50ZWQgd2l0aCB0aGUgc3Vycm91bmRpbmcgdGV4dC4KKwlcYWR2YW5jZVxoc2l6ZSBieVxsZWZ0c2tpcAorICAgICAgXGVsc2UKKwlcaWZzZXRwZXJjZW50IFxlbHNlCisJICAlIElmIHVzZXIgaGFzIG5vdCBzZXQgcHJlYW1ibGUgaW4gdGVybXMgb2YgcGVyY2VudCBvZiBcaHNpemUKKwkgICUgd2Ugd2lsbCBhZHZhbmNlIFxoc2l6ZSBieSBcbXVsdGl0YWJsZWNvbHNwYWNlLgorCSAgXGFkdmFuY2VcaHNpemUgYnkgXG11bHRpdGFibGVjb2xzcGFjZQorCVxmaQorICAgICAgICUgSW4gZWl0aGVyIGNhc2Ugd2Ugd2lsbCBtYWtlIFxsZWZ0c2tpcD1cbXVsdGl0YWJsZWNvbHNwYWNlOgorICAgICAgXGxlZnRza2lwPVxtdWx0aXRhYmxlY29sc3BhY2UKKyAgICAgIFxmaQorICAgICAgJSBJZ25vcmluZyBzcGFjZSBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgYXZvaWRzIGFuIG9jY2FzaW9uYWwgc3B1cmlvdXMKKyAgICAgICUgYmxhbmsgbGluZSwgd2hlbiBUZVggZGVjaWRlcyB0byBicmVhayB0aGUgbGluZSBhdCB0aGUgc3BhY2UgYmVmb3JlIHRoZQorICAgICAgJSBib3ggZnJvbSB0aGUgbXVsdGlzdHJ1dCwgc28gdGhlIHN0cnV0IGVuZHMgdXAgb24gYSBsaW5lIGJ5IGl0c2VsZi4KKyAgICAgICUgRm9yIGV4YW1wbGU6CisgICAgICAlIEBtdWx0aXRhYmxlIEBjb2x1bW5mcmFjdGlvbnMgLjExIC44OQorICAgICAgJSBAaXRlbSBAY29kZXsjfQorICAgICAgJSBAdGFiIExlZ2FsIGhvbGlkYXkgd2hpY2ggaXMgdmFsaWQgaW4gbWFqb3IgcGFydHMgb2YgdGhlIHdob2xlIGNvdW50cnkuCisgICAgICAlIElzIGF1dG9tYXRpY2FsbHkgcHJvdmlkZWQgd2l0aCBoaWdobGlnaHRpbmcgc2VxdWVuY2VzIHJlc3BlY3RpdmVseQorICAgICAgJSBtYXJraW5nIGNoYXJhY3RlcnMuCisgICAgICBcbm9pbmRlbnRcaWdub3Jlc3BhY2VzIyNcdW5za2lwXG11bHRpc3RydXQKKyAgICB9XGNyCit9CitcZGVmXEVtdWx0aXRhYmxleyUKKyAgXGNyY3IKKyAgXGVncm91cCAlIGVuZCB0aGUgXGhhbGlnbgorICBcZ2xvYmFsXHNldHBlcmNlbnRmYWxzZQorfQorCitcZGVmXHNldG11bHRpdGFibGVzcGFjaW5neyUKKyAgXGRlZlxtdWx0aXN0cnV0e1xzdHJ1dH0lIGp1c3QgdXNlIHRoZSBzdGFuZGFyZCBsaW5lIHNwYWNpbmcKKyAgJQorICAlIENvbXB1dGUgXG11bHRpdGFibGVsaW5lc3BhY2UgKGlmIG5vdCBkZWZpbmVkIGJ5IHVzZXIpIGZvciB1c2UgaW4KKyAgJSBcbXVsdGl0YWJsZXBhcnNraXAgY2FsY3VsYXRpb24uICBXZSB1c2VkIGRlZmluZSBcbXVsdGlzdHJ1dCBiYXNlZCBvbgorICAlIHRoaXMsIGJ1dCAoaXJvbmljYWxseSkgdGhhdCBjYXVzZWQgdGhlIHNwYWNpbmcgdG8gYmUgb2ZmLgorICAlIFNlZSBidWctdGV4aW5mbyByZXBvcnQgZnJvbSBXZXJuZXIgTGVtYmVyZywgMzEgT2N0IDIwMDQgMTI6NTI6MjAgKzAxMDAuCitcaWZkaW1cbXVsdGl0YWJsZWxpbmVzcGFjZT0wcHQKK1xzZXRib3gwPVx2Ym94e1h9XGdsb2JhbFxtdWx0aXRhYmxlbGluZXNwYWNlPVx0aGVcYmFzZWxpbmVza2lwCitcZ2xvYmFsXGFkdmFuY2VcbXVsdGl0YWJsZWxpbmVzcGFjZSBieS1caHQwCitcZmkKKyUlIFRlc3QgdG8gc2VlIGlmIHBhcnNraXAgaXMgbGFyZ2VyIHRoYW4gc3BhY2UgYmV0d2VlbiBsaW5lcyBvZgorJSUgdGFibGUuIElmIG5vdCwgZG8gbm90aGluZy4KKyUlICAgICAgICBJZiBzbywgc2V0IHRvIHNhbWUgZGltZW5zaW9uIGFzIG11bHRpdGFibGVsaW5lc3BhY2UuCitcaWZkaW1cbXVsdGl0YWJsZXBhcnNraXA+XG11bHRpdGFibGVsaW5lc3BhY2UKK1xnbG9iYWxcbXVsdGl0YWJsZXBhcnNraXA9XG11bHRpdGFibGVsaW5lc3BhY2UKK1xnbG9iYWxcYWR2YW5jZVxtdWx0aXRhYmxlcGFyc2tpcC03cHQgJSUgdG8ga2VlcCBwYXJza2lwIHNvbWV3aGF0IHNtYWxsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSUgdGhhbiBza2lwIGJldHdlZW4gbGluZXMgaW4gdGhlIHRhYmxlLgorXGZpJQorXGlmZGltXG11bHRpdGFibGVwYXJza2lwPTBwdAorXGdsb2JhbFxtdWx0aXRhYmxlcGFyc2tpcD1cbXVsdGl0YWJsZWxpbmVzcGFjZQorXGdsb2JhbFxhZHZhbmNlXG11bHRpdGFibGVwYXJza2lwLTdwdCAlJSB0byBrZWVwIHBhcnNraXAgc29tZXdoYXQgc21hbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlJSB0aGFuIHNraXAgYmV0d2VlbiBsaW5lcyBpbiB0aGUgdGFibGUuCitcZml9CisKKworXG1lc3NhZ2V7Y29uZGl0aW9uYWxzLH0KKworJSBAaWZ0ZXgsIEBpZm5vdGRvY2Jvb2ssIEBpZm5vdGh0bWwsIEBpZm5vdGluZm8sIEBpZm5vdHBsYWludGV4dCwKKyUgQGlmbm90eG1sIGFsd2F5cyBzdWNjZWVkLiAgVGhleSBjdXJyZW50bHkgZG8gbm90aGluZzsgd2UgZG9uJ3QKKyUgYXR0ZW1wdCB0byBjaGVjayB3aGV0aGVyIHRoZSBjb25kaXRpb25hbHMgYXJlIHByb3Blcmx5IG5lc3RlZC4gIEJ1dCB3ZQorJSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgdGhleSBhcmUgY29uZGl0aW9uYWxzLCBzbyB0aGF0IEBlbmQgZG9lc24ndAorJSBhdHRlbXB0IHRvIGNsb3NlIGFuIGVudmlyb25tZW50IGdyb3VwLgorJQorXGRlZlxtYWtlY29uZCMxeyUKKyAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgIzFcZW5kY3NuYW1lID0gXHJlbGF4CisgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIGlzY29uZC4jMVxlbmRjc25hbWUgPSAxCit9CitcbWFrZWNvbmR7aWZ0ZXh9CitcbWFrZWNvbmR7aWZub3Rkb2Nib29rfQorXG1ha2Vjb25ke2lmbm90aHRtbH0KK1xtYWtlY29uZHtpZm5vdGluZm99CitcbWFrZWNvbmR7aWZub3RwbGFpbnRleHR9CitcbWFrZWNvbmR7aWZub3R4bWx9CisKKyUgSWdub3JlIEBpZ25vcmUsIEBpZmh0bWwsIEBpZmluZm8sIGFuZCB0aGUgbGlrZS4KKyUKK1xkZWZcZGlyZW50cnl7XGRvaWdub3Jle2RpcmVudHJ5fX0KK1xkZWZcZG9jdW1lbnRkZXNjcmlwdGlvbntcZG9pZ25vcmV7ZG9jdW1lbnRkZXNjcmlwdGlvbn19CitcZGVmXGRvY2Jvb2t7XGRvaWdub3Jle2RvY2Jvb2t9fQorXGRlZlxodG1se1xkb2lnbm9yZXtodG1sfX0KK1xkZWZcaWZkb2Nib29re1xkb2lnbm9yZXtpZmRvY2Jvb2t9fQorXGRlZlxpZmh0bWx7XGRvaWdub3Jle2lmaHRtbH19CitcZGVmXGlmaW5mb3tcZG9pZ25vcmV7aWZpbmZvfX0KK1xkZWZcaWZub3R0ZXh7XGRvaWdub3Jle2lmbm90dGV4fX0KK1xkZWZcaWZwbGFpbnRleHR7XGRvaWdub3Jle2lmcGxhaW50ZXh0fX0KK1xkZWZcaWZ4bWx7XGRvaWdub3Jle2lmeG1sfX0KK1xkZWZcaWdub3Jle1xkb2lnbm9yZXtpZ25vcmV9fQorXGRlZlxtZW51e1xkb2lnbm9yZXttZW51fX0KK1xkZWZceG1se1xkb2lnbm9yZXt4bWx9fQorCislIElnbm9yZSB0ZXh0IHVudGlsIGEgbGluZSBgQGVuZCAjMScsIGtlZXBpbmcgdHJhY2sgb2YgbmVzdGVkIGNvbmRpdGlvbmFscy4KKyUKKyUgQSBjb3VudCB0byByZW1lbWJlciB0aGUgZGVwdGggb2YgbmVzdGluZy4KK1xuZXdjb3VudFxkb2lnbm9yZWNvdW50CisKK1xkZWZcZG9pZ25vcmUjMXtcYmVnaW5ncm91cAorICAlIFNjYW4gaW4gYGB2ZXJiYXRpbScnIG1vZGU6CisgIFxvYmV5bGluZXMKKyAgXGNhdGNvZGVgXEAgPSBcb3RoZXIKKyAgXGNhdGNvZGVgXHsgPSBcb3RoZXIKKyAgXGNhdGNvZGVgXH0gPSBcb3RoZXIKKyAgJQorICAlIE1ha2Ugc3VyZSB0aGF0IHNwYWNlcyB0dXJuIGludG8gdG9rZW5zIHRoYXQgbWF0Y2ggd2hhdCBcZG9pZ25vcmV0ZXh0IHdhbnRzLgorICBcc3BhY2Vpc3NwYWNlCisgICUKKyAgJSBDb3VudCBudW1iZXIgb2YgIzEncyB0aGF0IHdlJ3ZlIHNlZW4uCisgIFxkb2lnbm9yZWNvdW50ID0gMAorICAlCisgICUgU3dhbGxvdyB0ZXh0IHVudGlsIHdlIHJlYWNoIHRoZSBtYXRjaGluZyBgQGVuZCAjMScuCisgIFxkb2RvaWdub3JleyMxfSUKK30KKworeyBcY2F0Y29kZWBfPTExICUgV2Ugd2FudCB0byB1c2UgXF9TVE9QXyB3aGljaCBjYW5ub3QgYXBwZWFyIGluIHRleGluZm8gc291cmNlLgorICBcb2JleWxpbmVzICUKKyAgJQorICBcZ2RlZlxkb2RvaWdub3JlIzF7JQorICAgICUgIzEgY29udGFpbnMgdGhlIGNvbW1hbmQgbmFtZSBhcyBhIHN0cmluZywgZS5nLiwgYGlmaW5mbycuCisgICAgJQorICAgICUgRGVmaW5lIGEgY29tbWFuZCB0byBmaW5kIHRoZSBuZXh0IGBAZW5kICMxJy4KKyAgICBcbG9uZ1xkZWZcZG9pZ25vcmV0ZXh0IyMxXl5NQGVuZCAjMXslCisgICAgICBcZG9pZ25vcmV0ZXh0eXl5IyMxXl5NQCMxXF9TVE9QX30lCisgICAgJQorICAgICUgQW5kIHRoaXMgY29tbWFuZCB0byBmaW5kIGFub3RoZXIgIzEgY29tbWFuZCwgYXQgdGhlIGJlZ2lubmluZyBvZiBhCisgICAgJSBsaW5lLiAgKE90aGVyd2lzZSwgd2Ugd291bGQgY29uc2lkZXIgYSBsaW5lIGBAYyBAaWZzZXQnLCBmb3IKKyAgICAlIGV4YW1wbGUsIHRvIGNvdW50IGFzIGFuIEBpZnNldCBmb3IgbmVzdGluZy4pCisgICAgXGxvbmdcZGVmXGRvaWdub3JldGV4dHl5eSMjMV5eTUAjMSMjMlxfU1RPUF97XGRvaWdub3JleXl5eyMjMn1cX1NUT1BffSUKKyAgICAlCisgICAgJSBBbmQgbm93IGV4cGFuZCB0aGF0IGNvbW1hbmQuCisgICAgXGRvaWdub3JldGV4dCBeXk0lCisgIH0lCit9CisKK1xkZWZcZG9pZ25vcmV5eXkjMXslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxlbXB0eQkJCSUgTm90aGluZyBmb3VuZC4KKyAgICBcbGV0XG5leHRcZG9pZ25vcmV0ZXh0enp6CisgIFxlbHNlCQkJCQklIEZvdW5kIGEgbmVzdGVkIGNvbmRpdGlvbiwgLi4uCisgICAgXGFkdmFuY2VcZG9pZ25vcmVjb3VudCBieSAxCisgICAgXGxldFxuZXh0XGRvaWdub3JldGV4dHl5eQkJJSAuLi4sIGxvb2sgZm9yIGFub3RoZXIuCisgICAgJSBJZiB3ZSdyZSBoZXJlLCAjMSBlbmRzIHdpdGggXl5NXGlmaW5mbyAoZm9yIGV4YW1wbGUpLgorICBcZmkKKyAgXG5leHQgIzElIHRoZSB0b2tlbiBcX1NUT1BfIGlzIHByZXNlbnQganVzdCBhZnRlciB0aGlzIG1hY3JvLgorfQorCislIFdlIGhhdmUgdG8gc3dhbGxvdyB0aGUgcmVtYWluaW5nICJcX1NUT1BfIi4KKyUKK1xkZWZcZG9pZ25vcmV0ZXh0enp6IzF7JQorICBcaWZudW1cZG9pZ25vcmVjb3VudCA9IDAJJSBXZSBoYXZlIGp1c3QgZm91bmQgdGhlIG91dGVybW9zdCBAZW5kLgorICAgIFxsZXRcbmV4dFxlbmRkb2lnbm9yZQorICBcZWxzZQkJCQklIFN0aWxsIGluc2lkZSBhIG5lc3RlZCBjb25kaXRpb24uCisgICAgXGFkdmFuY2VcZG9pZ25vcmVjb3VudCBieSAtMQorICAgIFxsZXRcbmV4dFxkb2lnbm9yZXRleHQgICAgICAlIExvb2sgZm9yIHRoZSBuZXh0IEBlbmQuCisgIFxmaQorICBcbmV4dAorfQorCislIEZpbmlzaCBvZmYgaWdub3JlZCB0ZXh0LgoreyBcb2JleWxpbmVzJQorICAlIElnbm9yZSBhbnl0aGluZyBhZnRlciB0aGUgbGFzdCBgQGVuZCAjMSc7IHRoaXMgbWF0dGVycyBpbiB2ZXJiYXRpbQorICAlIGVudmlyb25tZW50cywgd2hlcmUgb3RoZXJ3aXNlIHRoZSBuZXdsaW5lIGFmdGVyIGFuIGlnbm9yZWQgY29uZGl0aW9uYWwKKyAgJSB3b3VsZCByZXN1bHQgaW4gYSBibGFuayBsaW5lIGluIHRoZSBvdXRwdXQuCisgIFxnZGVmXGVuZGRvaWdub3JlIzFeXk17XGVuZGdyb3VwXGlnbm9yZXNwYWNlc30lCit9CisKKworJSBAc2V0IFZBUiBzZXRzIHRoZSB2YXJpYWJsZSBWQVIgdG8gYW4gZW1wdHkgdmFsdWUuCislIEBzZXQgVkFSIFJFU1QtT0YtTElORSBzZXRzIFZBUiB0byB0aGUgdmFsdWUgUkVTVC1PRi1MSU5FLgorJQorJSBTaW5jZSB3ZSB3YW50IHRvIHNlcGFyYXRlIFZBUiBmcm9tIFJFU1QtT0YtTElORSAod2hpY2ggbWlnaHQgYmUKKyUgZW1wdHkpLCB3ZSBjYW4ndCBqdXN0IHVzZSBccGFyc2Vhcmc7IHdlIGhhdmUgdG8gaW5zZXJ0IGEgc3BhY2Ugb2Ygb3VyCislIG93biB0byBkZWxpbWl0IHRoZSByZXN0IG9mIHRoZSBsaW5lLCBhbmQgdGhlbiB0YWtlIGl0IG91dCBhZ2FpbiBpZiB3ZQorJSBkaWRuJ3QgbmVlZCBpdC4KKyUgV2UgcmVseSBvbiB0aGUgZmFjdCB0aGF0IFxwYXJzZWFyZyBzZXRzIFxjYXRjb2RlYFwgPTEwLgorJQorXHBhcnNlYXJnZGVmXHNldHtcc2V0eXl5IzEgXGVuZHNldHl5eX0KK1xkZWZcc2V0eXl5IzEgIzJcZW5kc2V0eXl5eyUKKyAgeyUKKyAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgIFxkZWZcdGVtcHsjMn0lCisgICAgXGVkZWZcbmV4dHtcZ2RlZlxtYWtlY3NuYW1le1NFVCMxfX0lCisgICAgXGlmeFx0ZW1wXGVtcHR5CisgICAgICBcbmV4dHt9JQorICAgIFxlbHNlCisgICAgICBcc2V0enp6IzJcZW5kc2V0enp6CisgICAgXGZpCisgIH0lCit9CislIFJlbW92ZSB0aGUgdHJhaWxpbmcgc3BhY2UgXHNldHh4eCBpbnNlcnRlZC4KK1xkZWZcc2V0enp6IzEgXGVuZHNldHp6entcbmV4dHsjMX19CisKKyUgQGNsZWFyIFZBUiBjbGVhcnMgKGkuZS4sIHVuc2V0cykgdGhlIHZhcmlhYmxlIFZBUi4KKyUKK1xwYXJzZWFyZ2RlZlxjbGVhcnslCisgIHslCisgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICBcZ2xvYmFsXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgU0VUIzFcZW5kY3NuYW1lPVxyZWxheAorICB9JQorfQorCislIEB2YWx1ZXtmb299IGdldHMgdGhlIHRleHQgc2F2ZWQgaW4gdmFyaWFibGUgZm9vLgorXGRlZlx2YWx1ZXtcYmVnaW5ncm91cFxtYWtldmFsdWVleHBhbmRhYmxlXHZhbHVleHh4fQorXGRlZlx2YWx1ZXh4eCMxe1xleHBhbmRhYmxldmFsdWV7IzF9XGVuZGdyb3VwfQoreworICBcY2F0Y29kZWBcLSA9IFxhY3RpdmUgXGNhdGNvZGVgXF8gPSBcYWN0aXZlCisgICUKKyAgXGdkZWZcbWFrZXZhbHVlZXhwYW5kYWJsZXslCisgICAgXGxldFx2YWx1ZSA9IFxleHBhbmRhYmxldmFsdWUKKyAgICAlIFdlIGRvbid0IHdhbnQgdGhlc2UgY2hhcmFjdGVycyBhY3RpdmUsIC4uLgorICAgIFxjYXRjb2RlYFwtPVxvdGhlciBcY2F0Y29kZWBcXz1cb3RoZXIKKyAgICAlIC4uLiwgYnV0IHdlIG1pZ2h0IGVuZCB1cCB3aXRoIGFjdGl2ZSBvbmVzIGluIHRoZSBhcmd1bWVudCBpZgorICAgICUgd2UncmUgY2FsbGVkIGZyb20gQGNvZGUsIGFzIEBjb2Rle0B2YWx1ZXtmb28tYmFyX319LCB0aG91Z2guCisgICAgJSBTbyBcbGV0IHRoZW0gdG8gdGhlaXIgbm9ybWFsIGVxdWl2YWxlbnRzLgorICAgIFxsZXQtXHJlYWxkYXNoIFxsZXRfXG5vcm1hbHVuZGVyc2NvcmUKKyAgfQorfQorCislIFdlIGhhdmUgdGhpcyBzdWJyb3V0aW5lIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBhdCBsZWFzdCBzb21lIEB2YWx1ZSdzCislIHByb3Blcmx5IGluIGluZGV4ZXMgKHdlIGNhbGwgXG1ha2V2YWx1ZWV4cGFuZGFibGUgaW4gXGluZGV4ZHVtbWllcykuCislIFRoZSBjb21tYW5kIGhhcyB0byBiZSBmdWxseSBleHBhbmRhYmxlIChpZiB0aGUgdmFyaWFibGUgaXMgc2V0KSwgc2luY2UKKyUgdGhlIHJlc3VsdCB3aW5kcyB1cCBpbiB0aGUgaW5kZXggZmlsZS4gIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUKKyUgdmFyaWFibGUncyB2YWx1ZSBjb250YWlucyBvdGhlciBUZXhpbmZvIGNvbW1hbmRzLCBpdCdzIGFsbW9zdCBjZXJ0YWluCislIGl0IHdpbGwgZmFpbCAoYWx0aG91Z2ggcGVyaGFwcyB3ZSBjb3VsZCBmaXggdGhhdCB3aXRoIHN1ZmZpY2llbnQgd29yaworJSB0byBkbyBhIG9uZS1sZXZlbCBleHBhbnNpb24gb24gdGhlIHJlc3VsdCwgaW5zdGVhZCBvZiBjb21wbGV0ZSkuCislCitcZGVmXGV4cGFuZGFibGV2YWx1ZSMxeyUKKyAgXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgU0VUIzFcZW5kY3NuYW1lXHJlbGF4CisgICAge1tObyB2YWx1ZSBmb3IgYGAjMScnXX0lCisgICAgXG1lc3NhZ2V7VmFyaWFibGUgYCMxJywgdXNlZCBpbiBAdmFsdWUsIGlzIG5vdCBzZXQufSUKKyAgXGVsc2UKKyAgICBcY3NuYW1lIFNFVCMxXGVuZGNzbmFtZQorICBcZmkKK30KKworJSBAaWZzZXQgVkFSIC4uLiBAZW5kIGlmc2V0IHJlYWRzIHRoZSBgLi4uJyBpZmYgVkFSIGhhcyBiZWVuIGRlZmluZWQKKyUgd2l0aCBAc2V0LgorJQorJSBUbyBnZXQgc3BlY2lhbCB0cmVhdG1lbnQgb2YgYEBlbmQgaWZzZXQsJyBjYWxsIFxtYWtlb25kIGFuZCB0aGUgcmVkZWZpbmUuCislCitcbWFrZWNvbmR7aWZzZXR9CitcZGVmXGlmc2V0e1xwYXJzZWFyZ3tcZG9pZnNldHtcbGV0XG5leHQ9XGlmc2V0ZmFpbH19fQorXGRlZlxkb2lmc2V0IzEjMnslCisgIHslCisgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICBcbGV0XG5leHQ9XGVtcHR5CisgICAgXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgU0VUIzJcZW5kY3NuYW1lXHJlbGF4CisgICAgICAjMSUgSWYgbm90IHNldCwgcmVkZWZpbmUgXG5leHQuCisgICAgXGZpCisgICAgXGV4cGFuZGFmdGVyCisgIH1cbmV4dAorfQorXGRlZlxpZnNldGZhaWx7XGRvaWdub3Jle2lmc2V0fX0KKworJSBAaWZjbGVhciBWQVIgLi4uIEBlbmQgaWZjbGVhciByZWFkcyB0aGUgYC4uLicgaWZmIFZBUiBoYXMgbmV2ZXIgYmVlbgorJSBkZWZpbmVkIHdpdGggQHNldCwgb3IgaGFzIGJlZW4gdW5kZWZpbmVkIHdpdGggQGNsZWFyLgorJQorJSBUaGUgYFxlbHNlJyBpbnNpZGUgdGhlIGBcZG9pZnNldCcgcGFyYW1ldGVyIGlzIGEgdHJpY2sgdG8gcmV1c2UgdGhlCislIGFib3ZlIGNvZGU6IGlmIHRoZSB2YXJpYWJsZSBpcyBub3Qgc2V0LCBkbyBub3RoaW5nLCBpZiBpdCBpcyBzZXQsCislIHRoZW4gcmVkZWZpbmUgXG5leHQgdG8gXGlmY2xlYXJmYWlsLgorJQorXG1ha2Vjb25ke2lmY2xlYXJ9CitcZGVmXGlmY2xlYXJ7XHBhcnNlYXJne1xkb2lmc2V0e1xlbHNlIFxsZXRcbmV4dD1caWZjbGVhcmZhaWx9fX0KK1xkZWZcaWZjbGVhcmZhaWx7XGRvaWdub3Jle2lmY2xlYXJ9fQorCislIEBkaXJjYXRlZ29yeSBDQVRFR09SWSAgLS0gc3BlY2lmeSBhIGNhdGVnb3J5IG9mIHRoZSBkaXIgZmlsZQorJSB3aGljaCB0aGlzIGZpbGUgc2hvdWxkIGJlbG9uZyB0by4gIElnbm9yZSB0aGlzIGluIFRlWC4KK1xsZXRcZGlyY2F0ZWdvcnk9XGNvbW1lbnQKKworJSBAZGVmaW5pbmZvZW5jbG9zZS4KK1xsZXRcZGVmaW5mb2VuY2xvc2U9XGNvbW1lbnQKKworCitcbWVzc2FnZXtpbmRleGluZyx9CislIEluZGV4IGdlbmVyYXRpb24gZmFjaWxpdGllcworCislIERlZmluZSBcbmV3d3JpdGUgdG8gYmUgaWRlbnRpY2FsIHRvIHBsYWluIHRleCdzIFxuZXd3cml0ZQorJSBleGNlcHQgbm90IFxvdXRlciwgc28gaXQgY2FuIGJlIHVzZWQgd2l0aGluIG1hY3JvcyBhbmQgXGlmJ3MuCitcZWRlZlxuZXd3cml0ZXtcbWFrZWNzbmFtZXtwdGV4bmV3d3JpdGV9fQorCislIFxuZXdpbmRleCB7Zm9vfSBkZWZpbmVzIGFuIGluZGV4IG5hbWVkIGZvby4KKyUgSXQgYXV0b21hdGljYWxseSBkZWZpbmVzIFxmb29pbmRleCBzdWNoIHRoYXQKKyUgXGZvb2luZGV4IC4uLnJlc3Qgb2YgbGluZS4uLiBwdXRzIGFuIGVudHJ5IGluIHRoZSBpbmRleCBmb28uCislIEl0IGFsc28gZGVmaW5lcyBcZm9vaW5kZmlsZSB0byBiZSB0aGUgbnVtYmVyIG9mIHRoZSBvdXRwdXQgY2hhbm5lbCBmb3IKKyUgdGhlIGZpbGUgdGhhdCBhY2N1bXVsYXRlcyB0aGlzIGluZGV4LiAgVGhlIGZpbGUncyBleHRlbnNpb24gaXMgZm9vLgorJSBUaGUgbmFtZSBvZiBhbiBpbmRleCBzaG91bGQgYmUgbm8gbW9yZSB0aGFuIDIgY2hhcmFjdGVycyBsb25nCislIGZvciB0aGUgc2FrZSBvZiB2bXMuCislCitcZGVmXG5ld2luZGV4IzF7JQorICBcaWZsaW5rcworICAgIFxleHBhbmRhZnRlclxuZXd3cml0ZSBcY3NuYW1lIzFpbmRmaWxlXGVuZGNzbmFtZQorICAgIFxvcGVub3V0IFxjc25hbWUjMWluZGZpbGVcZW5kY3NuYW1lIFxqb2JuYW1lLiMxICUgT3BlbiB0aGUgZmlsZQorICBcZmkKKyAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lIzFpbmRleFxlbmRjc25hbWV7JSAgICAgJSBEZWZpbmUgQCMxaW5kZXgKKyAgICBcbm9leHBhbmRcZG9pbmRleHsjMX19Cit9CisKKyUgQGRlZmluZGV4IGZvbyAgPT0gIFxuZXdpbmRleHtmb299CislCitcZGVmXGRlZmluZGV4e1xwYXJzZWFyZ1xuZXdpbmRleH0KKworJSBEZWZpbmUgQGRlZmNvZGVpbmRleCwgbGlrZSBAZGVmaW5kZXggZXhjZXB0IHB1dCBhbGwgZW50cmllcyBpbiBAY29kZS4KKyUKK1xkZWZcZGVmY29kZWluZGV4e1xwYXJzZWFyZ1xuZXdjb2RlaW5kZXh9CislCitcZGVmXG5ld2NvZGVpbmRleCMxeyUKKyAgXGlmbGlua3MKKyAgICBcZXhwYW5kYWZ0ZXJcbmV3d3JpdGUgXGNzbmFtZSMxaW5kZmlsZVxlbmRjc25hbWUKKyAgICBcb3Blbm91dCBcY3NuYW1lIzFpbmRmaWxlXGVuZGNzbmFtZSBcam9ibmFtZS4jMQorICBcZmkKKyAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lIzFpbmRleFxlbmRjc25hbWV7JQorICAgIFxub2V4cGFuZFxkb2NvZGVpbmRleHsjMX19JQorfQorCisKKyUgQHN5bmluZGV4IGZvbyBiYXIgICAgbWFrZXMgaW5kZXggZm9vIGZlZWQgaW50byBpbmRleCBiYXIuCislIERvIHRoaXMgaW5zdGVhZCBvZiBAZGVmaW5kZXggZm9vIGlmIHlvdSBkb24ndCB3YW50IGl0IGFzIGEgc2VwYXJhdGUgaW5kZXguCislCislIEBzeW5jb2RlaW5kZXggZm9vIGJhciAgIHNpbWlsYXIsIGJ1dCBwdXQgYWxsIGVudHJpZXMgbWFkZSBmb3IgaW5kZXggZm9vCislIGluc2lkZSBAY29kZS4KKyUKK1xkZWZcc3luaW5kZXgjMSAjMiB7XGRvc3luaW5kZXhcZG9pbmRleHsjMX17IzJ9fQorXGRlZlxzeW5jb2RlaW5kZXgjMSAjMiB7XGRvc3luaW5kZXhcZG9jb2RlaW5kZXh7IzF9eyMyfX0KKworJSAjMSBpcyBcZG9pbmRleCBvciBcZG9jb2RlaW5kZXgsICMyIHRoZSBpbmRleCBnZXR0aW5nIHJlZGVmaW5lZCAoZm9vKSwKKyUgIzMgdGhlIHRhcmdldCBpbmRleCAoYmFyKS4KK1xkZWZcZG9zeW5pbmRleCMxIzIjM3slCisgICUgT25seSBkbyBcY2xvc2VvdXQgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5IGRvbmUgaXQsIGVsc2Ugd2UnbGwgZW5kIHVwCisgICUgY2xvc2luZyB0aGUgdGFyZ2V0IGluZGV4LgorICBcZXhwYW5kYWZ0ZXIgXGlmeFxjc25hbWUgZG9uZXN5bmluZGV4IzJcZW5kY3NuYW1lIFxyZWxheAorICAgICUgVGhlIFxjbG9zZW91dCBoZWxwcyByZWR1Y2UgdW5uZWNlc3Nhcnkgb3BlbiBmaWxlczsgdGhlIGxpbWl0IG9uIHRoZQorICAgICUgQWNvcm4gUklTQyBPUyBpcyBhIG1lcmUgMTYgZmlsZXMuCisgICAgXGV4cGFuZGFmdGVyXGNsb3Nlb3V0XGNzbmFtZSMyaW5kZmlsZVxlbmRjc25hbWUKKyAgICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBkb25lc3luaW5kZXgjMlxlbmRjc25hbWUgPSAxCisgIFxmaQorICAlIHJlZGVmaW5lIFxmb29pbmRmaWxlOgorICBcZXhwYW5kYWZ0ZXJcbGV0XGV4cGFuZGFmdGVyXHRlbXBcZXhwYW5kYWZ0ZXI9XGNzbmFtZSMzaW5kZmlsZVxlbmRjc25hbWUKKyAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUjMmluZGZpbGVcZW5kY3NuYW1lPVx0ZW1wCisgICUgcmVkZWZpbmUgXGZvb2luZGV4OgorICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUjMmluZGV4XGVuZGNzbmFtZXtcbm9leHBhbmQjMXsjM319JQorfQorCislIERlZmluZSBcZG9pbmRleCwgdGhlIGRyaXZlciBmb3IgYWxsIFxmb29pbmRleCBtYWNyb3MuCislIEFyZ3VtZW50ICMxIGlzIGdlbmVyYXRlZCBieSB0aGUgY2FsbGluZyBcZm9vaW5kZXggbWFjcm8sCislICBhbmQgaXQgaXMgImZvbyIsIHRoZSBuYW1lIG9mIHRoZSBpbmRleC4KKworJSBcZG9pbmRleCBqdXN0IHVzZXMgXHBhcnNlYXJnOyBpdCBjYWxscyBcZG9pbmQgZm9yIHRoZSBhY3R1YWwgd29yay4KKyUgVGhpcyBpcyBiZWNhdXNlIFxkb2luZCBpcyBtb3JlIHVzZWZ1bCB0byBjYWxsIGZyb20gb3RoZXIgbWFjcm9zLgorCislIFRoZXJlIGlzIGFsc28gXGRvc3ViaW5kIHtpbmRleH17dG9waWN9e3N1YnRvcGljfQorJSB3aGljaCBtYWtlcyBhbiBlbnRyeSBpbiBhIHR3by1sZXZlbCBpbmRleCBzdWNoIGFzIHRoZSBvcGVyYXRpb24gaW5kZXguCisKK1xkZWZcZG9pbmRleCMxe1xlZGVmXGluZGV4bmFtZXsjMX1ccGFyc2Vhcmdcc2luZ2xlaW5kZXhlcn0KK1xkZWZcc2luZ2xlaW5kZXhlciAjMXtcZG9pbmR7XGluZGV4bmFtZX17IzF9fQorCislIGxpa2UgdGhlIHByZXZpb3VzIHR3bywgYnV0IHRoZXkgcHV0IEBjb2RlIGFyb3VuZCB0aGUgYXJndW1lbnQuCitcZGVmXGRvY29kZWluZGV4IzF7XGVkZWZcaW5kZXhuYW1leyMxfVxwYXJzZWFyZ1xzaW5nbGVjb2RlaW5kZXhlcn0KK1xkZWZcc2luZ2xlY29kZWluZGV4ZXIgIzF7XGRvaW5ke1xpbmRleG5hbWV9e1xjb2RleyMxfX19CisKKyUgVGFrZSBjYXJlIG9mIFRleGluZm8gY29tbWFuZHMgdGhhdCBjYW4gYXBwZWFyIGluIGFuIGluZGV4IGVudHJ5LgorJSBTaW5jZSB0aGVyZSBhcmUgc29tZSBjb21tYW5kcyB3ZSB3YW50IHRvIGV4cGFuZCwgYW5kIG90aGVycyB3ZSBkb24ndCwKKyUgd2UgaGF2ZSB0byBsYWJvcmlvdXNseSBwcmV2ZW50IGV4cGFuc2lvbiBmb3IgdGhvc2UgdGhhdCB3ZSBkb24ndC4KKyUKK1xkZWZcaW5kZXhkdW1taWVzeyUKKyAgXGVzY2FwZWNoYXIgPSBgXFwgICAgICUgdXNlIGJhY2tzbGFzaCBpbiBvdXRwdXQgZmlsZXMuCisgIFxkZWZcQHtAfSUgY2hhbmdlIHRvIEBAIHdoZW4gd2Ugc3dpdGNoIHRvIEAgYXMgZXNjYXBlIGNoYXIgaW4gaW5kZXggZmlsZXMuCisgIFxkZWZcIHtccmVhbGJhY2tzbGFzaFxzcGFjZSB9JQorICAlCisgICUgTmVlZCB0aGVzZSBpbiBjYXNlIFx0ZXggaXMgaW4gZWZmZWN0IGFuZCBceyBpcyBhIFxkZWxpbWl0ZXIgYWdhaW4uCisgICUgQnV0IGNhbid0IHVzZSBcbGJyYWNlY21kIGFuZCBccmJyYWNlY21kIGJlY2F1c2UgdGV4aW5kZXggYXNzdW1lcworICAlIGJyYWNlcyBhbmQgYmFja3NsYXNoZXMgYXJlIHVzZWQgb25seSBhcyBkZWxpbWl0ZXJzLgorICBcbGV0XHsgPSBcbXlsYnJhY2UKKyAgXGxldFx9ID0gXG15cmJyYWNlCisgICUKKyAgJSBJIGRvbid0IGVudGlyZWx5IHVuZGVyc3RhbmQgdGhpcywgYnV0IHdoZW4gYW4gaW5kZXggZW50cnkgaXMKKyAgJSBnZW5lcmF0ZWQgZnJvbSBhIG1hY3JvIGNhbGwsIHRoZSBcZW5kaW5wdXQgd2hpY2ggXHNjYW5tYWNybyBpbnNlcnRzCisgICUgY2F1c2VzIHByb2Nlc3NpbmcgdG8gYmUgcHJlbWF0dXJlbHkgdGVybWluYXRlZC4gIFRoaXMgaXMsCisgICUgYXBwYXJlbnRseSwgYmVjYXVzZSBcaW5kZXhzb3J0dG1wIGlzIGZ1bGx5IGV4cGFuZGVkLCBhbmQgXGVuZGlucHV0CisgICUgaXMgYW4gZXhwYW5kYWJsZSBjb21tYW5kLiAgVGhlIHJlZGVmaW5pdGlvbiBiZWxvdyBtYWtlcyBcZW5kaW5wdXQKKyAgJSBkaXNhcHBlYXIgYWx0b2dldGhlciBmb3IgdGhhdCBwdXJwb3NlIC0tIGFsdGhvdWdoIGxvZ2dpbmcgc2hvd3MgdGhhdAorICAlIHByb2Nlc3NpbmcgY29udGludWVzIHRvIHNvbWUgZnVydGhlciBwb2ludC4gIE9uIHRoZSBvdGhlciBoYW5kLCBpdAorICAlIHNlZW1zIFxlbmRpbnB1dCBkb2VzIG5vdCBodXJ0IGluIHRoZSBwcmludGVkIGluZGV4IGFyZywgc2luY2UgdGhhdAorICAlIGlzIHN0aWxsIGdldHRpbmcgd3JpdHRlbiB3aXRob3V0IGFwcGFyZW50IGhhcm0uCisgICUKKyAgJSBTYW1wbGUgc291cmNlIChtYWMtaWR4My50ZXgsIHJlcG9ydGVkIGJ5IEdyYWhhbSBQZXJjaXZhbCB0bworICAlIGhlbHAtdGV4aW5mbywgMjJtYXkwNik6CisgICUgQG1hY3JvIGZ1bmluZGV4IHtXT1JEfQorICAlIEBmaW5kZXggeHl6CisgICUgQGVuZCBtYWNybworICAlIC4uLgorICAlIEBmdW5pbmRleCBjb21tdGVzdAorICAlCisgICUgVGhlIGFib3ZlIGlzIG5vdCBlbm91Z2ggdG8gcmVwcm9kdWNlIHRoZSBidWcsIGJ1dCBpdCBnaXZlcyB0aGUgZmxhdm9yLgorICAlCisgICUgU2FtcGxlIHdoYXRzaXQgcmVzdWx0aW5nOgorICAlIC5Ad3JpdGUze1xlbnRyeXt4eXp9e0Bmb2xpbyB9e0Bjb2RlIHt4eXpAZW5kaW5wdXQgfX19CisgICUKKyAgJSBTbzoKKyAgXGxldFxlbmRpbnB1dCA9IFxlbXB0eQorICAlCisgICUgRG8gdGhlIHJlZGVmaW5pdGlvbnMuCisgIFxjb21tb25kdW1taWVzCit9CisKKyUgRm9yIHRoZSBhdXggYW5kIHRvYyBmaWxlcywgQCBpcyB0aGUgZXNjYXBlIGNoYXJhY3Rlci4gIFNvIHdlIHdhbnQgdG8KKyUgcmVkZWZpbmUgZXZlcnl0aGluZyB1c2luZyBAIGFzIHRoZSBlc2NhcGUgY2hhcmFjdGVyIChpbnN0ZWFkIG9mCislIFxyZWFsYmFja3NsYXNoLCBzdGlsbCB1c2VkIGZvciBpbmRleCBmaWxlcykuICBXaGVuIGV2ZXJ5dGhpbmcgdXNlcyBALAorJSB0aGlzIHdpbGwgYmUgc2ltcGxlci4KKyUKK1xkZWZcYXRkdW1taWVzeyUKKyAgXGRlZlxAe0BAfSUKKyAgXGRlZlwge0AgfSUKKyAgXGxldFx7ID0gXGxicmFjZWF0Y21kCisgIFxsZXRcfSA9IFxyYnJhY2VhdGNtZAorICAlCisgICUgRG8gdGhlIHJlZGVmaW5pdGlvbnMuCisgIFxjb21tb25kdW1taWVzCisgIFxvdGhlcmJhY2tzbGFzaAorfQorCislIENhbGxlZCBmcm9tIFxpbmRleGR1bW1pZXMgYW5kIFxhdGR1bW1pZXMuCislCitcZGVmXGNvbW1vbmR1bW1pZXN7JQorICAlCisgICUgXGRlZmluZWR1bW15d29yZCBkZWZpbmVzIFwjMSBhcyBcc3RyaW5nXCMxXHNwYWNlLCB0aHVzIGVmZmVjdGl2ZWx5CisgICUgcHJldmVudGluZyBpdHMgZXhwYW5zaW9uLiAgVGhpcyBpcyB1c2VkIG9ubHkgZm9yIGNvbnRyb2wlIHdvcmRzLAorICAlIG5vdCBjb250cm9sIGxldHRlcnMsIGJlY2F1c2UgdGhlIFxzcGFjZSB3b3VsZCBiZSBpbmNvcnJlY3QgZm9yCisgICUgY29udHJvbCBjaGFyYWN0ZXJzLCBidXQgaXMgbmVlZGVkIHRvIHNlcGFyYXRlIHRoZSBjb250cm9sIHdvcmQKKyAgJSBmcm9tIHdoYXRldmVyIGZvbGxvd3MuCisgICUKKyAgJSBGb3IgY29udHJvbCBsZXR0ZXJzLCB3ZSBoYXZlIFxkZWZpbmVkdW1teWxldHRlciwgd2hpY2ggb21pdHMgdGhlCisgICUgc3BhY2UuCisgICUKKyAgJSBUaGVzZSBjYW4gYmUgdXNlZCBib3RoIGZvciBjb250cm9sIHdvcmRzIHRoYXQgdGFrZSBhbiBhcmd1bWVudCBhbmQKKyAgJSB0aG9zZSB0aGF0IGRvIG5vdC4gIElmIGl0IGlzIGZvbGxvd2VkIGJ5IHthcmd9IGluIHRoZSBpbnB1dCwgdGhlbgorICAlIHRoYXQgd2lsbCBkdXRpZnVsbHkgZ2V0IHdyaXR0ZW4gdG8gdGhlIGluZGV4IChvciB3aGVyZXZlcikuCisgICUKKyAgXGRlZlxkZWZpbmVkdW1teXdvcmQgICMjMXtcZGVmIyMxe1xzdHJpbmcjIzFcc3BhY2V9fSUKKyAgXGRlZlxkZWZpbmVkdW1teWxldHRlciMjMXtcZGVmIyMxe1xzdHJpbmcjIzF9fSUKKyAgXGxldFxkZWZpbmVkdW1teWFjY2VudFxkZWZpbmVkdW1teWxldHRlcgorICAlCisgIFxjb21tb25kdW1taWVzbm9mb250cworICAlCisgIFxkZWZpbmVkdW1teWxldHRlclxfJQorICAlCisgICUgTm9uLUVuZ2xpc2ggbGV0dGVycy4KKyAgXGRlZmluZWR1bW15d29yZFxBQQorICBcZGVmaW5lZHVtbXl3b3JkXEFFCisgIFxkZWZpbmVkdW1teXdvcmRcREgKKyAgXGRlZmluZWR1bW15d29yZFxMCisgIFxkZWZpbmVkdW1teXdvcmRcTworICBcZGVmaW5lZHVtbXl3b3JkXE9FCisgIFxkZWZpbmVkdW1teXdvcmRcVEgKKyAgXGRlZmluZWR1bW15d29yZFxhYQorICBcZGVmaW5lZHVtbXl3b3JkXGFlCisgIFxkZWZpbmVkdW1teXdvcmRcZGgKKyAgXGRlZmluZWR1bW15d29yZFxleGNsYW1kb3duCisgIFxkZWZpbmVkdW1teXdvcmRcbAorICBcZGVmaW5lZHVtbXl3b3JkXG8KKyAgXGRlZmluZWR1bW15d29yZFxvZQorICBcZGVmaW5lZHVtbXl3b3JkXG9yZGYKKyAgXGRlZmluZWR1bW15d29yZFxvcmRtCisgIFxkZWZpbmVkdW1teXdvcmRccXVlc3Rpb25kb3duCisgIFxkZWZpbmVkdW1teXdvcmRcc3MKKyAgXGRlZmluZWR1bW15d29yZFx0aAorICAlCisgICUgQWx0aG91Z2ggdGhlc2UgaW50ZXJuYWwgY29tbWFuZHMgc2hvdWxkbid0IHNob3cgdXAsIHNvbWV0aW1lcyB0aGV5IGRvLgorICBcZGVmaW5lZHVtbXl3b3JkXGJmCisgIFxkZWZpbmVkdW1teXdvcmRcZ3RyCisgIFxkZWZpbmVkdW1teXdvcmRcaGF0CisgIFxkZWZpbmVkdW1teXdvcmRcbGVzcworICBcZGVmaW5lZHVtbXl3b3JkXHNmCisgIFxkZWZpbmVkdW1teXdvcmRcc2wKKyAgXGRlZmluZWR1bW15d29yZFx0Y2xvc2UKKyAgXGRlZmluZWR1bW15d29yZFx0dAorICAlCisgIFxkZWZpbmVkdW1teXdvcmRcTGFUZVgKKyAgXGRlZmluZWR1bW15d29yZFxUZVgKKyAgJQorICAlIEFzc29ydGVkIHNwZWNpYWwgY2hhcmFjdGVycy4KKyAgXGRlZmluZWR1bW15d29yZFxidWxsZXQKKyAgXGRlZmluZWR1bW15d29yZFxjb21tYQorICBcZGVmaW5lZHVtbXl3b3JkXGNvcHlyaWdodAorICBcZGVmaW5lZHVtbXl3b3JkXHJlZ2lzdGVyZWRzeW1ib2wKKyAgXGRlZmluZWR1bW15d29yZFxkb3RzCisgIFxkZWZpbmVkdW1teXdvcmRcZW5kZG90cworICBcZGVmaW5lZHVtbXl3b3JkXGVxdWl2CisgIFxkZWZpbmVkdW1teXdvcmRcZXJyb3IKKyAgXGRlZmluZWR1bW15d29yZFxldXJvCisgIFxkZWZpbmVkdW1teXdvcmRcZ3VpbGxlbWV0bGVmdAorICBcZGVmaW5lZHVtbXl3b3JkXGd1aWxsZW1ldHJpZ2h0CisgIFxkZWZpbmVkdW1teXdvcmRcZ3VpbHNpbmdsbGVmdAorICBcZGVmaW5lZHVtbXl3b3JkXGd1aWxzaW5nbHJpZ2h0CisgIFxkZWZpbmVkdW1teXdvcmRcZXhwYW5zaW9uCisgIFxkZWZpbmVkdW1teXdvcmRcbWludXMKKyAgXGRlZmluZWR1bW15d29yZFxvZ29uZWsKKyAgXGRlZmluZWR1bW15d29yZFxwb3VuZHMKKyAgXGRlZmluZWR1bW15d29yZFxwb2ludAorICBcZGVmaW5lZHVtbXl3b3JkXHByaW50CisgIFxkZWZpbmVkdW1teXdvcmRccXVvdGVkYmxiYXNlCisgIFxkZWZpbmVkdW1teXdvcmRccXVvdGVkYmxsZWZ0CisgIFxkZWZpbmVkdW1teXdvcmRccXVvdGVkYmxyaWdodAorICBcZGVmaW5lZHVtbXl3b3JkXHF1b3RlbGVmdAorICBcZGVmaW5lZHVtbXl3b3JkXHF1b3RlcmlnaHQKKyAgXGRlZmluZWR1bW15d29yZFxxdW90ZXNpbmdsYmFzZQorICBcZGVmaW5lZHVtbXl3b3JkXHJlc3VsdAorICBcZGVmaW5lZHVtbXl3b3JkXHRleHRkZWdyZWUKKyAgJQorICAlIFdlIHdhbnQgdG8gZGlzYWJsZSBhbGwgbWFjcm9zIHNvIHRoYXQgdGhleSBhcmUgbm90IGV4cGFuZGVkIGJ5IFx3cml0ZS4KKyAgXG1hY3JvbGlzdAorICAlCisgIFxub3JtYWx0dXJub2ZmYWN0aXZlCisgICUKKyAgJSBIYW5kbGUgc29tZSBjYXNlcyBvZiBAdmFsdWUgLS0gd2hlcmUgaXQgZG9lcyBub3QgY29udGFpbiBhbnkKKyAgJSAobm9uLWZ1bGx5LWV4cGFuZGFibGUpIGNvbW1hbmRzLgorICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorfQorCislIFxjb21tb25kdW1taWVzbm9mb250czogY29tbW9uIHRvIFxjb21tb25kdW1taWVzIGFuZCBcaW5kZXhub2ZvbnRzLgorJQorXGRlZlxjb21tb25kdW1taWVzbm9mb250c3slCisgICUgQ29udHJvbCBsZXR0ZXJzIGFuZCBhY2NlbnRzLgorICBcZGVmaW5lZHVtbXlsZXR0ZXJcISUKKyAgXGRlZmluZWR1bW15YWNjZW50XCIlCisgIFxkZWZpbmVkdW1teWFjY2VudFwnJQorICBcZGVmaW5lZHVtbXlsZXR0ZXJcKiUKKyAgXGRlZmluZWR1bW15YWNjZW50XCwlCisgIFxkZWZpbmVkdW1teWxldHRlclwuJQorICBcZGVmaW5lZHVtbXlsZXR0ZXJcLyUKKyAgXGRlZmluZWR1bW15bGV0dGVyXDolCisgIFxkZWZpbmVkdW1teWFjY2VudFw9JQorICBcZGVmaW5lZHVtbXlsZXR0ZXJcPyUKKyAgXGRlZmluZWR1bW15YWNjZW50XF4lCisgIFxkZWZpbmVkdW1teWFjY2VudFxgJQorICBcZGVmaW5lZHVtbXlhY2NlbnRcfiUKKyAgXGRlZmluZWR1bW15d29yZFx1CisgIFxkZWZpbmVkdW1teXdvcmRcdgorICBcZGVmaW5lZHVtbXl3b3JkXEgKKyAgXGRlZmluZWR1bW15d29yZFxkb3RhY2NlbnQKKyAgXGRlZmluZWR1bW15d29yZFxvZ29uZWsKKyAgXGRlZmluZWR1bW15d29yZFxyaW5nYWNjZW50CisgIFxkZWZpbmVkdW1teXdvcmRcdGllYWNjZW50CisgIFxkZWZpbmVkdW1teXdvcmRcdWJhcmFjY2VudAorICBcZGVmaW5lZHVtbXl3b3JkXHVkb3RhY2NlbnQKKyAgXGRlZmluZWR1bW15d29yZFxkb3RsZXNzCisgICUKKyAgJSBUZXhpbmZvIGZvbnQgY29tbWFuZHMuCisgIFxkZWZpbmVkdW1teXdvcmRcYgorICBcZGVmaW5lZHVtbXl3b3JkXGkKKyAgXGRlZmluZWR1bW15d29yZFxyCisgIFxkZWZpbmVkdW1teXdvcmRcc2MKKyAgXGRlZmluZWR1bW15d29yZFx0CisgICUKKyAgJSBDb21tYW5kcyB0aGF0IHRha2UgYXJndW1lbnRzLgorICBcZGVmaW5lZHVtbXl3b3JkXGFjcm9ueW0KKyAgXGRlZmluZWR1bW15d29yZFxjaXRlCisgIFxkZWZpbmVkdW1teXdvcmRcY29kZQorICBcZGVmaW5lZHVtbXl3b3JkXGNvbW1hbmQKKyAgXGRlZmluZWR1bW15d29yZFxkZm4KKyAgXGRlZmluZWR1bW15d29yZFxlbWFpbAorICBcZGVmaW5lZHVtbXl3b3JkXGVtcGgKKyAgXGRlZmluZWR1bW15d29yZFxlbnYKKyAgXGRlZmluZWR1bW15d29yZFxmaWxlCisgIFxkZWZpbmVkdW1teXdvcmRca2JkCisgIFxkZWZpbmVkdW1teXdvcmRca2V5CisgIFxkZWZpbmVkdW1teXdvcmRcbWF0aAorICBcZGVmaW5lZHVtbXl3b3JkXG9wdGlvbgorICBcZGVmaW5lZHVtbXl3b3JkXHB4cmVmCisgIFxkZWZpbmVkdW1teXdvcmRccmVmCisgIFxkZWZpbmVkdW1teXdvcmRcc2FtcAorICBcZGVmaW5lZHVtbXl3b3JkXHN0cm9uZworICBcZGVmaW5lZHVtbXl3b3JkXHRpZQorICBcZGVmaW5lZHVtbXl3b3JkXHVyZWYKKyAgXGRlZmluZWR1bW15d29yZFx1cmwKKyAgXGRlZmluZWR1bW15d29yZFx2YXIKKyAgXGRlZmluZWR1bW15d29yZFx2ZXJiCisgIFxkZWZpbmVkdW1teXdvcmRcdworICBcZGVmaW5lZHVtbXl3b3JkXHhyZWYKK30KKworJSBcaW5kZXhub2ZvbnRzIGlzIHVzZWQgd2hlbiBvdXRwdXR0aW5nIHRoZSBzdHJpbmdzIHRvIHNvcnQgdGhlIGluZGV4CislIGJ5LCBhbmQgd2hlbiBjb25zdHJ1Y3RpbmcgY29udHJvbCBzZXF1ZW5jZSBuYW1lcy4gIEl0IGVsaW1pbmF0ZXMgYWxsCislIGNvbnRyb2wgc2VxdWVuY2VzIGFuZCBqdXN0IHdyaXRlcyB3aGF0ZXZlciB0aGUgYmVzdCBBU0NJSSBzb3J0IHN0cmluZworJSB3b3VsZCBiZSBmb3IgYSBnaXZlbiBjb21tYW5kICh1c3VhbGx5IGl0cyBhcmd1bWVudCkuCislCitcZGVmXGluZGV4bm9mb250c3slCisgICUgQWNjZW50IGNvbW1hbmRzIHNob3VsZCBiZWNvbWUgQGFzaXMuCisgIFxkZWZcZGVmaW5lZHVtbXlhY2NlbnQjIzF7XGxldCMjMVxhc2lzfSUKKyAgJSBXZSBjYW4ganVzdCBpZ25vcmUgb3RoZXIgY29udHJvbCBsZXR0ZXJzLgorICBcZGVmXGRlZmluZWR1bW15bGV0dGVyIyMxe1xsZXQjIzFcZW1wdHl9JQorICAlIEhvcGVmdWxseSwgYWxsIGNvbnRyb2wgd29yZHMgY2FuIGJlY29tZSBAYXNpcy4KKyAgXGxldFxkZWZpbmVkdW1teXdvcmRcZGVmaW5lZHVtbXlhY2NlbnQKKyAgJQorICBcY29tbW9uZHVtbWllc25vZm9udHMKKyAgJQorICAlIERvbid0IG5vLW9wIFx0dCwgc2luY2UgaXQgaXNuJ3QgYSB1c2VyLWxldmVsIGNvbW1hbmQKKyAgJSBhbmQgaXMgdXNlZCBpbiB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIGFjdGl2ZSBjaGFycyBsaWtlIDwsID4sIHwsIGV0Yy4KKyAgJSBMaWtld2lzZSB3aXRoIHRoZSBvdGhlciBwbGFpbiB0ZXggZm9udCBjb21tYW5kcy4KKyAgJVxsZXRcdHQ9XGFzaXMKKyAgJQorICBcZGVmXCB7IH0lCisgIFxkZWZcQHtAfSUKKyAgJSBob3cgdG8gaGFuZGxlIGJyYWNlcz8KKyAgXGRlZlxfe1xub3JtYWx1bmRlcnNjb3JlfSUKKyAgJQorICAlIE5vbi1FbmdsaXNoIGxldHRlcnMuCisgIFxkZWZcQUF7QUF9JQorICBcZGVmXEFFe0FFfSUKKyAgXGRlZlxESHtEWlp9JQorICBcZGVmXEx7TH0lCisgIFxkZWZcT0V7T0V9JQorICBcZGVmXE97T30lCisgIFxkZWZcVEh7WlpafSUKKyAgXGRlZlxhYXthYX0lCisgIFxkZWZcYWV7YWV9JQorICBcZGVmXGRoe2R6en0lCisgIFxkZWZcZXhjbGFtZG93bnshfSUKKyAgXGRlZlxse2x9JQorICBcZGVmXG9le29lfSUKKyAgXGRlZlxvcmRme2F9JQorICBcZGVmXG9yZG17b30lCisgIFxkZWZcb3tvfSUKKyAgXGRlZlxxdWVzdGlvbmRvd257P30lCisgIFxkZWZcc3N7c3N9JQorICBcZGVmXHRoe3p6en0lCisgICUKKyAgXGRlZlxMYVRlWHtMYVRlWH0lCisgIFxkZWZcVGVYe1RlWH0lCisgICUKKyAgJSBBc3NvcnRlZCBzcGVjaWFsIGNoYXJhY3RlcnMuCisgICUgKFRoZSBmb2xsb3dpbmcge30gd2lsbCBlbmQgdXAgaW4gdGhlIHNvcnQgc3RyaW5nLCBidXQgdGhhdCdzIG9rLikKKyAgXGRlZlxidWxsZXR7YnVsbGV0fSUKKyAgXGRlZlxjb21tYXssfSUKKyAgXGRlZlxjb3B5cmlnaHR7Y29weXJpZ2h0fSUKKyAgXGRlZlxkb3Rzey4uLn0lCisgIFxkZWZcZW5kZG90c3suLi59JQorICBcZGVmXGVxdWl2ez09fSUKKyAgXGRlZlxlcnJvcntlcnJvcn0lCisgIFxkZWZcZXVyb3tldXJvfSUKKyAgXGRlZlxleHBhbnNpb257PT0+fSUKKyAgXGRlZlxndWlsbGVtZXRsZWZ0ezw8fSUKKyAgXGRlZlxndWlsbGVtZXRyaWdodHs+Pn0lCisgIFxkZWZcZ3VpbHNpbmdsbGVmdHs8fSUKKyAgXGRlZlxndWlsc2luZ2xyaWdodHs+fSUKKyAgXGRlZlxtaW51c3stfSUKKyAgXGRlZlxwb2ludHsufSUKKyAgXGRlZlxwb3VuZHN7cG91bmRzfSUKKyAgXGRlZlxwcmludHstfH0lCisgIFxkZWZccXVvdGVkYmxiYXNleyJ9JQorICBcZGVmXHF1b3RlZGJsbGVmdHsifSUKKyAgXGRlZlxxdW90ZWRibHJpZ2h0eyJ9JQorICBcZGVmXHF1b3RlbGVmdHtgfSUKKyAgXGRlZlxxdW90ZXJpZ2h0eyd9JQorICBcZGVmXHF1b3Rlc2luZ2xiYXNleyx9JQorICBcZGVmXHJlZ2lzdGVyZWRzeW1ib2x7Un0lCisgIFxkZWZccmVzdWx0ez0+fSUKKyAgXGRlZlx0ZXh0ZGVncmVle299JQorICAlCisgICUgV2UgbmVlZCB0byBnZXQgcmlkIG9mIGFsbCBtYWNyb3MsIGxlYXZpbmcgb25seSB0aGUgYXJndW1lbnRzIChpZiBwcmVzZW50KS4KKyAgJSBPZiBjb3Vyc2UgdGhpcyBpcyBub3QgbmVhcmx5IGNvcnJlY3QsIGJ1dCBpdCBpcyB0aGUgYmVzdCB3ZSBjYW4gZG8gZm9yIG5vdy4KKyAgJSBtYWtlaW5mbyBkb2VzIG5vdCBleHBhbmQgbWFjcm9zIGluIHRoZSBhcmd1bWVudCB0byBAZGVmZm4sIHdoaWNoIGVuZHMgdXAKKyAgJSB3cml0aW5nIGFuIGluZGV4IGVudHJ5LCBhbmQgdGV4aW5kZXggaXNuJ3QgcHJlcGFyZWQgZm9yIGFuIGluZGV4IHNvcnQgZW50cnkKKyAgJSB0aGF0IHN0YXJ0cyB3aXRoIFwuCisgICUKKyAgJSBTaW5jZSBtYWNybyBpbnZvY2F0aW9ucyBhcmUgZm9sbG93ZWQgYnkgYnJhY2VzLCB3ZSBjYW4ganVzdCByZWRlZmluZSB0aGVtCisgICUgdG8gdGFrZSBhIHNpbmdsZSBUZVggYXJndW1lbnQuICBUaGUgY2FzZSBvZiBhIG1hY3JvIGludm9jYXRpb24gdGhhdAorICAlIGdvZXMgdG8gZW5kLW9mLWxpbmUgaXMgbm90IGhhbmRsZWQuCisgICUKKyAgXG1hY3JvbGlzdAorfQorCitcbGV0XGluZGV4YmFja3NsYXNoPTAgICVvdmVycmlkZGVuIGR1cmluZyBccHJpbnRpbmRleC4KK1xsZXRcU0VUbWFyZ2luaW5kZXg9XHJlbGF4ICUgcHV0IGluZGV4IGVudHJpZXMgaW4gbWFyZ2luICh1bmRvY3VtZW50ZWQpPworCislIE1vc3QgaW5kZXggZW50cmllcyBnbyB0aHJvdWdoIGhlcmUsIGJ1dCBcZG9zdWJpbmQgaXMgdGhlIGdlbmVyYWwgY2FzZS4KKyUgIzEgaXMgdGhlIGluZGV4IG5hbWUsICMyIGlzIHRoZSBlbnRyeSB0ZXh0LgorXGRlZlxkb2luZCMxIzJ7XGRvc3ViaW5keyMxfXsjMn17fX0KKworJSBXb3JraG9yc2UgZm9yIGFsbCBcZm9vaW5kZXhlcy4KKyUgIzEgaXMgbmFtZSBvZiBpbmRleCwgIzIgaXMgc3R1ZmYgdG8gcHV0IHRoZXJlLCAjMyBpcyBzdWJlbnRyeSAtLQorJSBlbXB0eSBpZiBjYWxsZWQgZnJvbSBcZG9pbmQsIGFzIHdlIHVzdWFsbHkgYXJlICh0aGUgbWFpbiBleGNlcHRpb24KKyUgaXMgd2l0aCBtb3N0IGRlZnVucywgd2hpY2ggY2FsbCB1cyBkaXJlY3RseSkuCislCitcZGVmXGRvc3ViaW5kIzEjMiMzeyUKKyAgXGlmbGlua3MKKyAgeyUKKyAgICAlIFN0b3JlIHRoZSBtYWluIGluZGV4IGVudHJ5IHRleHQgKGluY2x1ZGluZyB0aGUgdGhpcmQgYXJnKS4KKyAgICBcdG9rczAgPSB7IzJ9JQorICAgICUgSWYgdGhpcmQgYXJnIGlzIHByZXNlbnQsIHByZWNlZGUgaXQgd2l0aCBhIHNwYWNlLgorICAgIFxkZWZcdGhpcmRhcmd7IzN9JQorICAgIFxpZnhcdGhpcmRhcmdcZW1wdHkgXGVsc2UKKyAgICAgIFx0b2tzMCA9IFxleHBhbmRhZnRlcntcdGhlXHRva3MwIFxzcGFjZSAjM30lCisgICAgXGZpCisgICAgJQorICAgIFxlZGVmXHdyaXRldG97XGNzbmFtZSMxaW5kZmlsZVxlbmRjc25hbWV9JQorICAgICUKKyAgICBcc2FmZXdoYXRzaXRcZG9zdWJpbmR3cml0ZQorICB9JQorICBcZmkKK30KKworJSBXcml0ZSB0aGUgZW50cnkgaW4gXHRva3MwIHRvIHRoZSBpbmRleCBmaWxlOgorJQorXGRlZlxkb3N1YmluZHdyaXRleyUKKyAgJSBQdXQgdGhlIGluZGV4IGVudHJ5IGluIHRoZSBtYXJnaW4gaWYgZGVzaXJlZC4KKyAgXGlmeFxTRVRtYXJnaW5pbmRleFxyZWxheFxlbHNlCisgICAgXGluc2VydFxtYXJnaW57XGhib3h7XHZydWxlIGhlaWdodDhwdCBkZXB0aDNwdCB3aWR0aDBwdCBcdGhlXHRva3MwfX0lCisgIFxmaQorICAlCisgICUgUmVtZW1iZXIsIHdlIGFyZSB3aXRoaW4gYSBncm91cC4KKyAgXGluZGV4ZHVtbWllcyAlIE11c3QgZG8gdGhpcyBoZXJlLCBzaW5jZSBcYmYsIGV0YyBleHBhbmQgYXQgdGhpcyBzdGFnZQorICBcZGVmXGJhY2tzbGFzaGN1cmZvbnR7XGluZGV4YmFja3NsYXNofSUgXGluZGV4YmFja3NsYXNoIGlzbid0IGRlZmluZWQgbm93CisgICAgICAlIHNvIGl0IHdpbGwgYmUgb3V0cHV0IGFzIGlzOyBhbmQgaXQgd2lsbCBwcmludCBhcyBiYWNrc2xhc2guCisgICUKKyAgJSBQcm9jZXNzIHRoZSBpbmRleCBlbnRyeSB3aXRoIGFsbCBmb250IGNvbW1hbmRzIHR1cm5lZCBvZmYsIHRvCisgICUgZ2V0IHRoZSBzdHJpbmcgdG8gc29ydCBieS4KKyAge1xpbmRleG5vZm9udHMKKyAgIFxlZGVmXHRlbXB7XHRoZVx0b2tzMH0lIG5lZWQgZnVsbCBleHBhbnNpb24KKyAgIFx4ZGVmXGluZGV4c29ydHRtcHtcdGVtcH0lCisgIH0lCisgICUKKyAgJSBTZXQgdXAgdGhlIGNvbXBsZXRlIGluZGV4IGVudHJ5LCB3aXRoIGJvdGggdGhlIHNvcnQga2V5IGFuZAorICAlIHRoZSBvcmlnaW5hbCB0ZXh0LCBpbmNsdWRpbmcgYW55IGZvbnQgY29tbWFuZHMuICBXZSB3cml0ZQorICAlIHRocmVlIGFyZ3VtZW50cyB0byBcZW50cnkgdG8gdGhlIC4/PyBmaWxlIChmb3VyIGluIHRoZQorICAlIHN1YmVudHJ5IGNhc2UpLCB0ZXhpbmRleCByZWR1Y2VzIHRvIHR3byB3aGVuIHdyaXRpbmcgdGhlIC4/P3MKKyAgJSBzb3J0ZWQgcmVzdWx0LgorICBcZWRlZlx0ZW1weyUKKyAgICBcd3JpdGVcd3JpdGV0b3slCisgICAgICBcc3RyaW5nXGVudHJ5e1xpbmRleHNvcnR0bXB9e1xub2V4cGFuZFxmb2xpb317XHRoZVx0b2tzMH19JQorICB9JQorICBcdGVtcAorfQorCislIFRha2UgY2FyZSBvZiB1bndhbnRlZCBwYWdlIGJyZWFrcy9za2lwcyBhcm91bmQgYSB3aGF0c2l0OgorJQorJSBJZiBhIHNraXAgaXMgdGhlIGxhc3QgdGhpbmcgb24gdGhlIGxpc3Qgbm93LCBwcmVzZXJ2ZSBpdAorJSBieSBiYWNraW5nIHVwIGJ5IFxsYXN0c2tpcCwgZG9pbmcgdGhlIFx3cml0ZSwgdGhlbiBpbnNlcnRpbmcKKyUgdGhlIHNraXAgYWdhaW4uICBPdGhlcndpc2UsIHRoZSB3aGF0c2l0IGdlbmVyYXRlZCBieSB0aGUKKyUgXHdyaXRlIG9yIFxwZGZkZXN0IHdpbGwgbWFrZSBcbGFzdHNraXAgemVyby4gIFRoZSByZXN1bHQgaXMgdGhhdAorJSBzZXF1ZW5jZXMgbGlrZSB0aGlzOgorJSBAZW5kIGRlZnVuCislIEB0aW5kZXggd2hhdGV2ZXIKKyUgQGRlZnVuIC4uLgorJSB3aWxsIGhhdmUgZXh0cmEgc3BhY2UgaW5zZXJ0ZWQsIGJlY2F1c2UgdGhlIFxtZWRicmVhayBpbiB0aGUKKyUgc3RhcnQgb2YgdGhlIEBkZWZ1biB3b24ndCBzZWUgdGhlIHNraXAgaW5zZXJ0ZWQgYnkgdGhlIEBlbmQgb2YKKyUgdGhlIHByZXZpb3VzIGRlZnVuLgorJQorJSBCdXQgZG9uJ3QgZG8gYW55IG9mIHRoaXMgaWYgd2UncmUgbm90IGluIHZlcnRpY2FsIG1vZGUuICBXZQorJSBkb24ndCB3YW50IHRvIGRvIGEgXHZza2lwIGFuZCBwcmVtYXR1cmVseSBlbmQgYSBwYXJhZ3JhcGguCislCislIEF2b2lkIHBhZ2UgYnJlYWtzIGR1ZSB0byB0aGVzZSBleHRyYSBza2lwcywgdG9vLgorJQorJSBCdXQgd2FpdCwgdGhlcmUgaXMgYSBjYXRjaCB0aGVyZToKKyUgV2UnbGwgaGF2ZSB0byBjaGVjayB3aGV0aGVyIFxsYXN0c2tpcCBpcyB6ZXJvIHNraXAuICBcaWZkaW0gaXMgbm90CislIHN1ZmZpY2llbnQgZm9yIHRoaXMgcHVycG9zZSwgYXMgaXQgaWdub3JlcyBzdHJldGNoIGFuZCBzaHJpbmsgcGFydHMKKyUgb2YgdGhlIHNraXAuICBUaGUgb25seSB3YXkgc2VlbXMgdG8gYmUgdG8gY2hlY2sgdGhlIHRleHR1YWwKKyUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNraXAuCislCislIFRoZSBmb2xsb3dpbmcgaXMgYWxtb3N0IGxpa2UgXGRlZlx6ZXJvc2tpcG1hY3JvezAuMHB0fSBleGNlcHQgdGhhdAorJSB0aGUgYGBwJycgYW5kIGBgdCcnIGNoYXJhY3RlcnMgaGF2ZSBjYXRjb2RlIFxvdGhlciwgbm90IDExIChsZXR0ZXIpLgorJQorXGVkZWZcemVyb3NraXBtYWNyb3tcZXhwYW5kYWZ0ZXJcdGhlXGNzbmFtZSB6QHNraXBcZW5kY3NuYW1lfQorJQorXG5ld3NraXBcd2hhdHNpdHNraXAKK1xuZXdjb3VudFx3aGF0c2l0cGVuYWx0eQorJQorJSAuLi4sIHJlYWR5LCBHTzoKKyUKK1xkZWZcc2FmZXdoYXRzaXQjMXslCitcaWZobW9kZQorICAjMSUKK1xlbHNlCisgICUgXGxhc3Rza2lwIGFuZCBcbGFzdHBlbmFsdHkgY2Fubm90IGJvdGggYmUgbm9uemVybyBzaW11bHRhbmVvdXNseS4KKyAgXHdoYXRzaXRza2lwID0gXGxhc3Rza2lwCisgIFxlZGVmXGxhc3Rza2lwbWFjcm97XHRoZVxsYXN0c2tpcH0lCisgIFx3aGF0c2l0cGVuYWx0eSA9IFxsYXN0cGVuYWx0eQorICAlCisgICUgSWYgXGxhc3Rza2lwIGlzIG5vbnplcm8sIHRoYXQgbWVhbnMgdGhlIGxhc3QgaXRlbSB3YXMgYQorICAlIHNraXAuICBBbmQgc2luY2UgYSBza2lwIGlzIGRpc2NhcmRhYmxlLCB0aGF0IG1lYW5zIHRoaXMKKyAgJSAtXHdoYXRzaXRza2lwIGdsdWUgd2UncmUgaW5zZXJ0aW5nIGlzIHByZWNlZGVkIGJ5IGEKKyAgJSBub24tZGlzY2FyZGFibGUgaXRlbSwgdGhlcmVmb3JlIGl0IGlzIG5vdCBhIHBvdGVudGlhbAorICAlIGJyZWFrcG9pbnQsIHRoZXJlZm9yZSBubyBcbm9icmVhayBuZWVkZWQuCisgIFxpZnhcbGFzdHNraXBtYWNyb1x6ZXJvc2tpcG1hY3JvCisgIFxlbHNlCisgICAgXHZza2lwLVx3aGF0c2l0c2tpcAorICBcZmkKKyAgJQorICAjMSUKKyAgJQorICBcaWZ4XGxhc3Rza2lwbWFjcm9cemVyb3NraXBtYWNybworICAgICUgSWYgXGxhc3Rza2lwIHdhcyB6ZXJvLCBwZXJoYXBzIHRoZSBsYXN0IGl0ZW0gd2FzIGEgcGVuYWx0eSwgYW5kCisgICAgJSBwZXJoYXBzIGl0IHdhcyA+PTEwMDAwLCBlLmcuLCBhIFxub2JyZWFrLiAgSW4gdGhhdCBjYXNlLCB3ZSB3YW50CisgICAgJSB0byByZS1pbnNlcnQgdGhlIHNhbWUgcGVuYWx0eSAodmFsdWVzID4xMDAwMCBhcmUgdXNlZCBmb3IgdmFyaW91cworICAgICUgc2lnbmFscyk7IHNpbmNlIHdlIGp1c3QgaW5zZXJ0ZWQgYSBub24tZGlzY2FyZGFibGUgaXRlbSwgYW55CisgICAgJSBmb2xsb3dpbmcgZ2x1ZSAoc3VjaCBhcyBhIFxwYXJza2lwKSB3b3VsZCBiZSBhIGJyZWFrcG9pbnQuICBGb3IgZXhhbXBsZToKKyAgICAlCisgICAgJSAgIEBkZWZmbiBkZWZmbi13aGF0ZXZlcgorICAgICUgICBAdmluZGV4IGluZGV4LXdoYXRldmVyCisgICAgJSAgIERlc2NyaXB0aW9uLgorICAgICUgd291bGQgYWxsb3cgYSBicmVhayBiZXR3ZWVuIHRoZSBpbmRleC13aGF0ZXZlciB3aGF0c2l0CisgICAgJSBhbmQgdGhlICJEZXNjcmlwdGlvbi4iIHBhcmFncmFwaC4KKyAgICBcaWZudW1cd2hhdHNpdHBlbmFsdHk+OTk5OSBccGVuYWx0eVx3aGF0c2l0cGVuYWx0eSBcZmkKKyAgXGVsc2UKKyAgICAlIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB3ZSBoYWQgYSBub256ZXJvIFxsYXN0c2tpcCwKKyAgICAlIHRoaXMgbWFrZS11cCBnbHVlIHdvdWxkIGJlIHByZWNlZGVkIGJ5IGEgbm9uLWRpc2NhcmRhYmxlIGl0ZW0KKyAgICAlICh0aGUgd2hhdHNpdCBmcm9tIHRoZSBcd3JpdGUpLCBzbyB3ZSBtdXN0IGluc2VydCBhIFxub2JyZWFrLgorICAgIFxub2JyZWFrXHZza2lwXHdoYXRzaXRza2lwCisgIFxmaQorXGZpCit9CisKKyUgVGhlIGluZGV4IGVudHJ5IHdyaXR0ZW4gaW4gdGhlIGZpbGUgYWN0dWFsbHkgbG9va3MgbGlrZQorJSAgXGVudHJ5IHtzb3J0c3RyaW5nfXtwYWdlfXt0b3BpY30KKyUgb3IKKyUgIFxlbnRyeSB7c29ydHN0cmluZ317cGFnZX17dG9waWN9e3N1YnRvcGljfQorJSBUaGUgdGV4aW5kZXggcHJvZ3JhbSByZWFkcyBpbiB0aGVzZSBmaWxlcyBhbmQgd3JpdGVzIGZpbGVzCislIGNvbnRhaW5pbmcgdGhlc2Uga2luZHMgb2YgbGluZXM6CislICBcaW5pdGlhbCB7Y30KKyUgICAgIGJlZm9yZSB0aGUgZmlyc3QgdG9waWMgd2hvc2UgaW5pdGlhbCBpcyBjCislICBcZW50cnkge3RvcGljfXtwYWdlbGlzdH0KKyUgICAgIGZvciBhIHRvcGljIHRoYXQgaXMgdXNlZCB3aXRob3V0IHN1YnRvcGljcworJSAgXHByaW1hcnkge3RvcGljfQorJSAgICAgZm9yIHRoZSBiZWdpbm5pbmcgb2YgYSB0b3BpYyB0aGF0IGlzIHVzZWQgd2l0aCBzdWJ0b3BpY3MKKyUgIFxzZWNvbmRhcnkge3N1YnRvcGljfXtwYWdlbGlzdH0KKyUgICAgIGZvciBlYWNoIHN1YnRvcGljLgorCislIERlZmluZSB0aGUgdXNlci1hY2Nlc3NpYmxlIGluZGV4aW5nIGNvbW1hbmRzCislIEBmaW5kZXgsIEB2aW5kZXgsIEBraW5kZXgsIEBjaW5kZXguCisKK1xkZWZcZmluZGV4IHtcZm5pbmRleH0KK1xkZWZca2luZGV4IHtca3lpbmRleH0KK1xkZWZcY2luZGV4IHtcY3BpbmRleH0KK1xkZWZcdmluZGV4IHtcdnJpbmRleH0KK1xkZWZcdGluZGV4IHtcdHBpbmRleH0KK1xkZWZccGluZGV4IHtccGdpbmRleH0KKworXGRlZlxjaW5kZXhzdWIge1xiZWdpbmdyb3VwXG9iZXlsaW5lc1xjaW5kZXhzdWJ9Cit7XG9iZXlsaW5lcyAlCitcZ2RlZlxjaW5kZXhzdWIgIiMxIiAjMl5eTXtcZW5kZ3JvdXAgJQorXGRvc3ViaW5ke2NwfXsjMn17IzF9fX0KKworJSBEZWZpbmUgdGhlIG1hY3JvcyB1c2VkIGluIGZvcm1hdHRpbmcgb3V0cHV0IG9mIHRoZSBzb3J0ZWQgaW5kZXggbWF0ZXJpYWwuCisKKyUgQHByaW50aW5kZXggY2F1c2VzIGEgcGFydGljdWxhciBpbmRleCAodGhlID8/cyBmaWxlKSB0byBnZXQgcHJpbnRlZC4KKyUgSXQgZG9lcyBub3QgcHJpbnQgYW55IGNoYXB0ZXIgaGVhZGluZyAodXN1YWxseSBhbiBAdW5udW1iZXJlZCkuCislCitccGFyc2VhcmdkZWZccHJpbnRpbmRleHtcYmVnaW5ncm91cAorICBcZG9icmVhayBcY2hhcGhlYWRpbmdza2lwezEwMDAwfSUKKyAgJQorICBcc21hbGxmb250cyBccm0KKyAgXHRvbGVyYW5jZSA9IDk1MDAKKyAgXHBsYWluZnJlbmNoc3BhY2luZworICBcZXZlcnlwYXIgPSB7fSUgZG9uJ3Qgd2FudCB0aGUgXGtlcm5cLXBhcmluZGVudCBmcm9tIGluZGVudGF0aW9uIHN1cHByZXNzaW9uLgorICAlCisgICUgU2VlIGlmIHRoZSBpbmRleCBmaWxlIGV4aXN0cyBhbmQgaXMgbm9uZW1wdHkuCisgICUgQ2hhbmdlIGNhdGNvZGUgb2YgQCBoZXJlIHNvIHRoYXQgaWYgdGhlIGluZGV4IGZpbGUgY29udGFpbnMKKyAgJSBcaW5pdGlhbCB7QH0KKyAgJSBhcyBpdHMgZmlyc3QgbGluZSwgVGVYIGRvZXNuJ3QgY29tcGxhaW4gYWJvdXQgbWlzbWF0Y2hlZCBicmFjZXMKKyAgJSAoYmVjYXVzZSBpdCB0aGlua3MgQH0gaXMgYSBjb250cm9sIHNlcXVlbmNlKS4KKyAgXGNhdGNvZGVgXEAgPSAxMQorICBcb3BlbmluIDEgXGpvYm5hbWUuIzFzCisgIFxpZmVvZiAxCisgICAgJSBcZW5kZG91YmxlY29sdW1ucyBnZXRzIGNvbmZ1c2VkIGlmIHRoZXJlIGlzIG5vIHRleHQgaW4gdGhlIGluZGV4LAorICAgICUgYW5kIGl0IGxvc2VzIHRoZSBjaGFwdGVyIHRpdGxlIGFuZCB0aGUgYXV4IGZpbGUgZW50cmllcyBmb3IgdGhlCisgICAgJSBpbmRleC4gIFRoZSBlYXNpZXN0IHdheSB0byBwcmV2ZW50IHRoaXMgcHJvYmxlbSBpcyB0byBtYWtlIHN1cmUKKyAgICAlIHRoZXJlIGlzIHNvbWUgdGV4dC4KKyAgICBccHV0d29yZEluZGV4Tm9uZXhpc3RlbnQKKyAgXGVsc2UKKyAgICAlCisgICAgJSBJZiB0aGUgaW5kZXggZmlsZSBleGlzdHMgYnV0IGlzIGVtcHR5LCB0aGVuIFxvcGVuaW4gbGVhdmVzIFxpZmVvZgorICAgICUgZmFsc2UuICBXZSBoYXZlIHRvIG1ha2UgVGVYIHRyeSB0byByZWFkIHNvbWV0aGluZyBmcm9tIHRoZSBmaWxlLCBzbworICAgICUgaXQgY2FuIGRpc2NvdmVyIGlmIHRoZXJlIGlzIGFueXRoaW5nIGluIGl0LgorICAgIFxyZWFkIDEgdG8gXHRlbXAKKyAgICBcaWZlb2YgMQorICAgICAgXHB1dHdvcmRJbmRleElzRW1wdHkKKyAgICBcZWxzZQorICAgICAgJSBJbmRleCBmaWxlcyBhcmUgYWxtb3N0IFRleGluZm8gc291cmNlLCBidXQgd2UgdXNlIFwgYXMgdGhlIGVzY2FwZQorICAgICAgJSBjaGFyYWN0ZXIuICBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gdXNlIEAsIGJ1dCB0aGF0J3MgdG9vIGJpZyBhIGNoYW5nZQorICAgICAgJSB0byBtYWtlIHJpZ2h0IG5vdy4KKyAgICAgIFxkZWZcaW5kZXhiYWNrc2xhc2h7XGJhY2tzbGFzaGN1cmZvbnR9JQorICAgICAgXGNhdGNvZGVgXFwgPSAwCisgICAgICBcZXNjYXBlY2hhciA9IGBcXAorICAgICAgXGJlZ2luZG91YmxlY29sdW1ucworICAgICAgXGlucHV0IFxqb2JuYW1lLiMxcworICAgICAgXGVuZGRvdWJsZWNvbHVtbnMKKyAgICBcZmkKKyAgXGZpCisgIFxjbG9zZWluIDEKK1xlbmRncm91cH0KKworJSBUaGVzZSBtYWNyb3MgYXJlIHVzZWQgYnkgdGhlIHNvcnRlZCBpbmRleCBmaWxlIGl0c2VsZi4KKyUgQ2hhbmdlIHRoZW0gdG8gY29udHJvbCB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgaW5kZXguCisKK1xkZWZcaW5pdGlhbCMxe3slCisgICUgU29tZSBtaW5vciBmb250IGNoYW5nZXMgZm9yIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMuCisgIFxsZXRcdGVudHQ9XHNlY3R0IFxsZXRcdHQ9XHNlY3R0IFxsZXRcc2Y9XHNlY3R0CisgICUKKyAgJSBSZW1vdmUgYW55IGdsdWUgd2UgbWF5IGhhdmUsIHdlJ2xsIGJlIGluc2VydGluZyBvdXIgb3duLgorICBccmVtb3ZlbGFzdHNraXAKKyAgJQorICAlIFdlIGxpa2UgYnJlYWtzIGJlZm9yZSB0aGUgaW5kZXggaW5pdGlhbHMsIHNvIGluc2VydCBhIGJvbnVzLgorICBcbm9icmVhaworICBcdnNraXAgMHB0IHBsdXMgM1xiYXNlbGluZXNraXAKKyAgXHBlbmFsdHkgMAorICBcdnNraXAgMHB0IHBsdXMgLTNcYmFzZWxpbmVza2lwCisgICUKKyAgJSBUeXBlc2V0IHRoZSBpbml0aWFsLiAgTWFraW5nIHRoaXMgYWRkIHVwIHRvIGEgd2hvbGUgbnVtYmVyIG9mCisgICUgYmFzZWxpbmVza2lwcyBpbmNyZWFzZXMgdGhlIGNoYW5jZSBvZiB0aGUgZG90cyBsaW5pbmcgdXAgZnJvbSBjb2x1bW4KKyAgJSB0byBjb2x1bW4uICBJdCBzdGlsbCB3b24ndCBvZnRlbiBiZSBwZXJmZWN0LCBiZWNhdXNlIG9mIHRoZSBzdHJldGNoCisgICUgd2UgbmVlZCBiZWZvcmUgZWFjaCBlbnRyeSwgYnV0IGl0J3MgYmV0dGVyLgorICAlCisgICUgTm8gc2hyaW5rIGJlY2F1c2UgaXQgY29uZnVzZXMgXGJhbGFuY2Vjb2x1bW5zLgorICBcdnNraXAgMS42N1xiYXNlbGluZXNraXAgcGx1cyAuNVxiYXNlbGluZXNraXAKKyAgXGxlZnRsaW5le1xzZWNiZiAjMX0lCisgICUgRG8gb3VyIGJlc3Qgbm90IHRvIGJyZWFrIGFmdGVyIHRoZSBpbml0aWFsLgorICBcbm9icmVhaworICBcdnNraXAgLjMzXGJhc2VsaW5lc2tpcCBwbHVzIC4xXGJhc2VsaW5lc2tpcAorfX0KKworJSBcZW50cnkgdHlwZXNldHMgYSBwYXJhZ3JhcGggY29uc2lzdGluZyBvZiB0aGUgdGV4dCAoIzEpLCBkb3QgbGVhZGVycywgYW5kCislIHRoZW4gcGFnZSBudW1iZXIgKCMyKSBmbHVzaGVkIHRvIHRoZSByaWdodCBtYXJnaW4uICBJdCBpcyB1c2VkIGZvciBpbmRleAorJSBhbmQgdGFibGUgb2YgY29udGVudHMgZW50cmllcy4gIFRoZSBwYXJhZ3JhcGggaXMgaW5kZW50ZWQgYnkgXGxlZnRza2lwLgorJQorJSBBIHN0cmFpZ2h0Zm9yd2FyZCBpbXBsZW1lbnRhdGlvbiB3b3VsZCBzdGFydCBsaWtlIHRoaXM6CislCVxkZWZcZW50cnkjMSMyey4uLgorJSBCdXQgdGhpcyBmcmVlemVzIHRoZSBjYXRjb2RlcyBpbiB0aGUgYXJndW1lbnQsIGFuZCBjYW4gY2F1c2UgcHJvYmxlbXMgdG8KKyUgQGNvZGUsIHdoaWNoIHNldHMgLSBhY3RpdmUuICBUaGlzIHByb2JsZW0gd2FzIGZpeGVkIGJ5IGEga2x1ZGdlLS0tCislIGBgLScnIHdhcyBhY3RpdmUgdGhyb3VnaG91dCB3aG9sZSBpbmRleCwgYnV0IHRoaXMgaXNuJ3QgcmVhbGx5IHJpZ2h0LgorJQorJSBUaGUgcmlnaHQgc29sdXRpb24gaXMgdG8gcHJldmVudCBcZW50cnkgZnJvbSBzd2FsbG93aW5nIHRoZSB3aG9sZSB0ZXh0LgorJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0ta2FzYWwsIDIxbm92MDMKK1xkZWZcZW50cnl7JQorICBcYmVnaW5ncm91cAorICAgICUKKyAgICAlIFN0YXJ0IGEgbmV3IHBhcmFncmFwaCBpZiBuZWNlc3NhcnksIHNvIG91ciBhc3NpZ25tZW50cyBiZWxvdyBjYW4ndAorICAgICUgYWZmZWN0IHByZXZpb3VzIHRleHQuCisgICAgXHBhcgorICAgICUKKyAgICAlIERvIG5vdCBmaWxsIG91dCB0aGUgbGFzdCBsaW5lIHdpdGggd2hpdGUgc3BhY2UuCisgICAgXHBhcmZpbGxza2lwID0gMGluCisgICAgJQorICAgICUgTm8gZXh0cmEgc3BhY2UgYWJvdmUgdGhpcyBwYXJhZ3JhcGguCisgICAgXHBhcnNraXAgPSAwaW4KKyAgICAlCisgICAgJSBEbyBub3QgcHJlZmVyIGEgc2VwYXJhdGUgbGluZSBlbmRpbmcgd2l0aCBhIGh5cGhlbiB0byBmZXdlciBsaW5lcy4KKyAgICBcZmluYWxoeXBoZW5kZW1lcml0cyA9IDAKKyAgICAlCisgICAgJSBcaGFuZ2luZGVudCBpcyBvbmx5IHJlbGV2YW50IHdoZW4gdGhlIGVudHJ5IHRleHQgYW5kIHBhZ2UgbnVtYmVyCisgICAgJSBkb24ndCBib3RoIGZpdCBvbiBvbmUgbGluZS4gIEluIHRoYXQgY2FzZSwgYm9iIHN1Z2dlc3RzIHN0YXJ0aW5nIHRoZQorICAgICUgZG90cyBwcmV0dHkgZmFyIG92ZXIgb24gdGhlIGxpbmUuICBVbmZvcnR1bmF0ZWx5LCBhIGxhcmdlCisgICAgJSBpbmRlbnRhdGlvbiBsb29rcyB3cm9uZyB3aGVuIHRoZSBlbnRyeSB0ZXh0IGl0c2VsZiBpcyBicm9rZW4gYWNyb3NzCisgICAgJSBsaW5lcy4gIFNvIHdlIHVzZSBhIHNtYWxsIGluZGVudGF0aW9uIGFuZCBwdXQgdXAgd2l0aCBsb25nIGxlYWRlcnMuCisgICAgJQorICAgICUgXGhhbmdhZnRlciBpcyByZXNldCB0byAxICh3aGljaCBpcyB0aGUgdmFsdWUgd2Ugd2FudCkgYXQgdGhlIHN0YXJ0CisgICAgJSBvZiBlYWNoIHBhcmFncmFwaCwgc28gd2UgbmVlZCBub3QgZG8gYW55dGhpbmcgd2l0aCB0aGF0LgorICAgIFxoYW5naW5kZW50ID0gMmVtCisgICAgJQorICAgICUgV2hlbiB0aGUgZW50cnkgdGV4dCBuZWVkcyB0byBiZSBicm9rZW4sIGp1c3QgZmlsbCBvdXQgdGhlIGZpcnN0IGxpbmUKKyAgICAlIHdpdGggYmxhbmsgc3BhY2UuCisgICAgXHJpZ2h0c2tpcCA9IDBwdCBwbHVzMWZpbAorICAgICUKKyAgICAlIEEgYml0IG9mIHN0cmV0Y2ggYmVmb3JlIGVhY2ggZW50cnkgZm9yIHRoZSBiZW5lZml0IG9mIGJhbGFuY2luZworICAgICUgY29sdW1ucy4KKyAgICBcdnNraXAgMHB0IHBsdXMxcHQKKyAgICAlCisgICAgJSBTd2FsbG93IHRoZSBsZWZ0IGJyYWNlIG9mIHRoZSB0ZXh0IChmaXJzdCBwYXJhbWV0ZXIpOgorICAgIFxhZnRlcmFzc2lnbm1lbnRcZG9lbnRyeQorICAgIFxsZXRcdGVtcCA9Cit9CitcZGVmXGRvZW50cnl7JQorICAgIFxiZ3JvdXAgJSBJbnN0ZWFkIG9mIHRoZSBzd2FsbG93ZWQgYnJhY2UuCisgICAgICBcbm9pbmRlbnQKKyAgICAgIFxhZnRlcmdyb3VwXGZpbmlzaGVudHJ5CisgICAgICAlIEFuZCBub3cgY29tZXMgdGhlIHRleHQgb2YgdGhlIGVudHJ5LgorfQorXGRlZlxmaW5pc2hlbnRyeSMxeyUKKyAgICAlICMxIGlzIHRoZSBwYWdlIG51bWJlci4KKyAgICAlCisgICAgJSBUaGUgZm9sbG93aW5nIGlzIGtsdWRnZWQgdG8gbm90IG91dHB1dCBhIGxpbmUgb2YgZG90cyBpbiB0aGUgaW5kZXggaWYKKyAgICAlIHRoZXJlIGFyZSBubyBwYWdlIG51bWJlcnMuICBUaGUgbmV4dCBwZXJzb24gd2hvIGJyZWFrcyB0aGlzIHdpbGwgYmUKKyAgICAlIGN1cnNlZCBieSBhIFVuaXggZGFlbW9uLgorICAgIFxzZXRib3hcYm94QSA9IFxoYm94eyMxfSUKKyAgICBcaWZkaW1cd2RcYm94QSA9IDBwdAorICAgICAgXCAlCisgICAgXGVsc2UKKyAgICAgICUKKyAgICAgICUgSWYgd2UgbXVzdCwgcHV0IHRoZSBwYWdlIG51bWJlciBvbiBhIGxpbmUgb2YgaXRzIG93biwgYW5kIGZpbGwgb3V0CisgICAgICAlIHRoaXMgbGluZSB3aXRoIGJsYW5rIHNwYWNlLiAgKFRoZSBcaGZpbCBpcyBvdmVyd2hlbG1lZCB3aXRoIHRoZQorICAgICAgJSBmaWxsIGxlYWRlcnMgZ2x1ZSBpbiBcaW5kZXhkb3RmaWxsIGlmIHRoZSBwYWdlIG51bWJlciBkb2VzIGZpdC4pCisgICAgICBcaGZpbFxwZW5hbHR5NTAKKyAgICAgIFxudWxsXG5vYnJlYWtcaW5kZXhkb3RmaWxsICUgSGF2ZSBsZWFkZXJzIGJlZm9yZSB0aGUgcGFnZSBudW1iZXIuCisgICAgICAlCisgICAgICAlIFRoZSBgXCAnIGhlcmUgaXMgcmVtb3ZlZCBieSB0aGUgaW1wbGljaXQgXHVuc2tpcCB0aGF0IFRlWCBkb2VzIGFzCisgICAgICAlIHBhcnQgb2YgKHRoZSBwcmltaXRpdmUpIFxwYXIuICBXaXRob3V0IGl0LCBhIHNwdXJpb3VzIHVuZGVyZnVsbAorICAgICAgJSBcaGJveCBlbnN1ZXMuCisgICAgICBcaWZwZGYKKwlccGRmZ2V0dG9rcyMxLiUKKwlcIFx0aGVcdG9rc0EKKyAgICAgIFxlbHNlCisJXCAjMSUKKyAgICAgIFxmaQorICAgIFxmaQorICAgIFxwYXIKKyAgXGVuZGdyb3VwCit9CisKKyUgTGlrZSBwbGFpbi50ZXgncyBcZG90ZmlsbCwgZXhjZXB0IHVzZXMgdXAgYXQgbGVhc3QgMSBlbS4KK1xkZWZcaW5kZXhkb3RmaWxse1xjbGVhZGVycworICBcaGJveHskXG1hdGhzdXJyb3VuZD0wcHQgXG1rZXJuMS41bXUuXG1rZXJuMS41bXUkfVxoc2tpcCAxZW0gcGx1cyAxZmlsbH0KKworXGRlZlxwcmltYXJ5ICMxe1xsaW5leyMxXGhmaWx9fQorCitcbmV3c2tpcFxzZWNvbmRhcnlpbmRlbnQgXHNlY29uZGFyeWluZGVudD0wLjVjbQorXGRlZlxzZWNvbmRhcnkjMSMye3slCisgIFxwYXJmaWxsc2tpcD0waW4KKyAgXHBhcnNraXA9MGluCisgIFxoYW5naW5kZW50PTFpbgorICBcaGFuZ2FmdGVyPTEKKyAgXG5vaW5kZW50XGhza2lwXHNlY29uZGFyeWluZGVudFxoYm94eyMxfVxpbmRleGRvdGZpbGwKKyAgXGlmcGRmCisgICAgXHBkZmdldHRva3MjMi5cIFx0aGVcdG9rc0EgJSBUaGUgcGFnZSBudW1iZXIgZW5kcyB0aGUgcGFyYWdyYXBoLgorICBcZWxzZQorICAgICMyCisgIFxmaQorICBccGFyCit9fQorCislIERlZmluZSB0d28tY29sdW1uIG1vZGUsIHdoaWNoIHdlIHVzZSB0byB0eXBlc2V0IGluZGV4ZXMuCislIEFkYXB0ZWQgZnJvbSB0aGUgVGVYYm9vaywgcGFnZSA0MTYsIHdoaWNoIGlzIHRvIHNheSwKKyUgdGhlIG1hbm1hYy50ZXggZm9ybWF0IHVzZWQgdG8gcHJpbnQgdGhlIFRlWGJvb2sgaXRzZWxmLgorXGNhdGNvZGVgXEA9MTEKKworXG5ld2JveFxwYXJ0aWFscGFnZQorXG5ld2RpbWVuXGRvdWJsZWNvbHVtbmhzaXplCisKK1xkZWZcYmVnaW5kb3VibGVjb2x1bW5ze1xiZWdpbmdyb3VwICUgZW5kZWQgYnkgXGVuZGRvdWJsZWNvbHVtbnMKKyAgJSBHcmFiIGFueSBzaW5nbGUtY29sdW1uIG1hdGVyaWFsIGFib3ZlIHVzLgorICBcb3V0cHV0ID0geyUKKyAgICAlCisgICAgJSBIZXJlIGlzIGEgcG9zc2liaWxpdHkgbm90IGZvcmVzZWVuIGluIG1hbm1hYzogaWYgd2UgYWNjdW11bGF0ZSBhCisgICAgJSB3aG9sZSBsb3Qgb2YgbWF0ZXJpYWwsIHdlIG1pZ2h0IGVuZCB1cCBjYWxsaW5nIHRoaXMgXG91dHB1dAorICAgICUgcm91dGluZSB0d2ljZSBpbiBhIHJvdyAoc2VlIHRoZSBkb3VibGVjb2wtbG9zZSB0ZXN0LCB3aGljaCBpcworICAgICUgZXNzZW50aWFsbHkgYSBjb3VwbGUgb2YgaW5kZXhlcyB3aXRoIEBzZXRjaGFwdGVybmV3cGFnZSBvZmYpLiAgSW4KKyAgICAlIHRoYXQgY2FzZSB3ZSBqdXN0IHNoaXAgb3V0IHdoYXQgaXMgaW4gXHBhcnRpYWxwYWdlIHdpdGggdGhlIG5vcm1hbAorICAgICUgb3V0cHV0IHJvdXRpbmUuICBHZW5lcmFsbHksIFxwYXJ0aWFscGFnZSB3aWxsIGJlIGVtcHR5IHdoZW4gdGhpcworICAgICUgcnVucyBhbmQgdGhpcyB3aWxsIGJlIGEgbm8tb3AuICBTZWUgdGhlIGluZGV4c3ByZWFkLnRleCB0ZXN0IGNhc2UuCisgICAgXGlmdm9pZFxwYXJ0aWFscGFnZSBcZWxzZQorICAgICAgXG9uZXBhZ2VvdXR7XHBhZ2Vjb250ZW50c1xwYXJ0aWFscGFnZX0lCisgICAgXGZpCisgICAgJQorICAgIFxnbG9iYWxcc2V0Ym94XHBhcnRpYWxwYWdlID0gXHZib3h7JQorICAgICAgJSBVbnZib3ggdGhlIG1haW4gb3V0cHV0IHBhZ2UuCisgICAgICBcdW52Ym94XFBBR0UKKyAgICAgIFxrZXJuLVx0b3Bza2lwIFxrZXJuXGJhc2VsaW5lc2tpcAorICAgIH0lCisgIH0lCisgIFxlamVjdCAlIHJ1biB0aGF0IG91dHB1dCByb3V0aW5lIHRvIHNldCBccGFydGlhbHBhZ2UKKyAgJQorICAlIFVzZSB0aGUgZG91YmxlLWNvbHVtbiBvdXRwdXQgcm91dGluZSBmb3Igc3Vic2VxdWVudCBwYWdlcy4KKyAgXG91dHB1dCA9IHtcZG91YmxlY29sdW1ub3V0fSUKKyAgJQorICAlIENoYW5nZSB0aGUgcGFnZSBzaXplIHBhcmFtZXRlcnMuICBXZSBjb3VsZCBkbyB0aGlzIG9uY2Ugb3V0c2lkZSB0aGlzCisgICUgcm91dGluZSwgaW4gZWFjaCBvZiBAc21hbGxib29rLCBAYWZvdXJwYXBlciwgYW5kIHRoZSBkZWZhdWx0IDguNXgxMQorICAlIGZvcm1hdCwgYnV0IHRoZW4gd2UgcmVwZWF0IHRoZSBzYW1lIGNvbXB1dGF0aW9uLiAgUmVwZWF0aW5nIGEgY291cGxlCisgICUgb2YgYXNzaWdubWVudHMgb25jZSBwZXIgaW5kZXggaXMgY2xlYXJseSBtZWFuaW5nbGVzcyBmb3IgdGhlCisgICUgZXhlY3V0aW9uIHRpbWUsIHNvIHdlIG1heSBhcyB3ZWxsIGRvIGl0IGluIG9uZSBwbGFjZS4KKyAgJQorICAlIEZpcnN0IHdlIGhhbHZlIHRoZSBsaW5lIGxlbmd0aCwgbGVzcyBhIGxpdHRsZSBmb3IgdGhlIGd1dHRlciBiZXR3ZWVuCisgICUgdGhlIGNvbHVtbnMuICBXZSBjb21wdXRlIHRoZSBndXR0ZXIgYmFzZWQgb24gdGhlIGxpbmUgbGVuZ3RoLCBzbyBpdAorICAlIGNoYW5nZXMgYXV0b21hdGljYWxseSB3aXRoIHRoZSBwYXBlciBmb3JtYXQuICBUaGUgbWFnaWMgY29uc3RhbnQKKyAgJSBiZWxvdyBpcyBjaG9zZW4gc28gdGhhdCB0aGUgZ3V0dGVyIGhhcyB0aGUgc2FtZSB2YWx1ZSAod2VsbCwgKy08MXB0KQorICAlIGFzIGl0IGRpZCB3aGVuIHdlIGhhcmQtY29kZWQgaXQuCisgICUKKyAgJSBXZSBwdXQgdGhlIHJlc3VsdCBpbiBhIHNlcGFyYXRlIHJlZ2lzdGVyLCBcZG91YmxlY29sdW1oc2l6ZSwgc28gd2UKKyAgJSBjYW4gcmVzdG9yZSBpdCBpbiBccGFnZXNvZmFyLCBhZnRlciBcaHNpemUgaXRzZWxmIGhhcyAocG90ZW50aWFsbHkpCisgICUgYmVlbiBjbG9iYmVyZWQuCisgICUKKyAgXGRvdWJsZWNvbHVtbmhzaXplID0gXGhzaXplCisgICAgXGFkdmFuY2VcZG91YmxlY29sdW1uaHNpemUgYnkgLS4wNDE1NFxoc2l6ZQorICAgIFxkaXZpZGVcZG91YmxlY29sdW1uaHNpemUgYnkgMgorICBcaHNpemUgPSBcZG91YmxlY29sdW1uaHNpemUKKyAgJQorICAlIERvdWJsZSB0aGUgXHZzaXplIGFzIHdlbGwuICAoV2UgZG9uJ3QgbmVlZCBhIHNlcGFyYXRlIHJlZ2lzdGVyIGhlcmUsCisgICUgc2luY2Ugbm9ib2R5IGNsb2JiZXJzIFx2c2l6ZS4pCisgIFx2c2l6ZSA9IDJcdnNpemUKK30KKworJSBUaGUgZG91YmxlLWNvbHVtbiBvdXRwdXQgcm91dGluZSBmb3IgYWxsIGRvdWJsZS1jb2x1bW4gcGFnZXMgZXhjZXB0CislIHRoZSBsYXN0LgorJQorXGRlZlxkb3VibGVjb2x1bW5vdXR7JQorICBcc3BsaXR0b3Bza2lwPVx0b3Bza2lwIFxzcGxpdG1heGRlcHRoPVxtYXhkZXB0aAorICAlIEdldCB0aGUgYXZhaWxhYmxlIHNwYWNlIGZvciB0aGUgZG91YmxlIGNvbHVtbnMgLS0gdGhlIG5vcm1hbAorICAlICh1bmRvdWJsZWQpIHBhZ2UgaGVpZ2h0IG1pbnVzIGFueSBtYXRlcmlhbCBsZWZ0IG92ZXIgZnJvbSB0aGUKKyAgJSBwcmV2aW91cyBwYWdlLgorICBcZGltZW5AID0gXHZzaXplCisgIFxkaXZpZGVcZGltZW5AIGJ5IDIKKyAgXGFkdmFuY2VcZGltZW5AIGJ5IC1caHRccGFydGlhbHBhZ2UKKyAgJQorICAlIGJveDAgd2lsbCBiZSB0aGUgbGVmdC1oYW5kIGNvbHVtbiwgYm94MiB0aGUgcmlnaHQuCisgIFxzZXRib3gwPVx2c3BsaXQyNTUgdG9cZGltZW5AIFxzZXRib3gyPVx2c3BsaXQyNTUgdG9cZGltZW5ACisgIFxvbmVwYWdlb3V0XHBhZ2Vzb2ZhcgorICBcdW52Ym94MjU1CisgIFxwZW5hbHR5XG91dHB1dHBlbmFsdHkKK30KKyUKKyUgUmUtb3V0cHV0IHRoZSBjb250ZW50cyBvZiB0aGUgb3V0cHV0IHBhZ2UgLS0gYW55IHByZXZpb3VzIG1hdGVyaWFsLAorJSBmb2xsb3dlZCBieSB0aGUgdHdvIGJveGVzIHdlIGp1c3Qgc3BsaXQsIGluIGJveDAgYW5kIGJveDIuCitcZGVmXHBhZ2Vzb2ZhcnslCisgIFx1bnZib3hccGFydGlhbHBhZ2UKKyAgJQorICBcaHNpemUgPSBcZG91YmxlY29sdW1uaHNpemUKKyAgXHdkMD1caHNpemUgXHdkMj1caHNpemUKKyAgXGhib3ggdG9ccGFnZXdpZHRoe1xib3gwXGhmaWxcYm94Mn0lCit9CislCislIEFsbCBkb25lIHdpdGggZG91YmxlIGNvbHVtbnMuCitcZGVmXGVuZGRvdWJsZWNvbHVtbnN7JQorICAlIFRoZSBmb2xsb3dpbmcgcGVuYWx0eSBlbnN1cmVzIHRoYXQgdGhlIHBhZ2UgYnVpbGRlciBpcyBleGVyY2lzZWQKKyAgJSBfYmVmb3JlXyB3ZSBjaGFuZ2UgdGhlIG91dHB1dCByb3V0aW5lLiAgVGhpcyBpcyBuZWNlc3NhcnkgaW4gdGhlCisgICUgZm9sbG93aW5nIHNpdHVhdGlvbjoKKyAgJQorICAlIFRoZSBsYXN0IHNlY3Rpb24gb2YgdGhlIGluZGV4IGNvbnNpc3RzIG9ubHkgb2YgYSBzaW5nbGUgZW50cnkuCisgICUgQmVmb3JlIHRoaXMgc2VjdGlvbiwgXHBhZ2V0b3RhbCBpcyBsZXNzIHRoYW4gXHBhZ2Vnb2FsLCBzbyBubworICAlIGJyZWFrIG9jY3VycyBiZWZvcmUgdGhlIGxhc3Qgc2VjdGlvbiBzdGFydHMuICBIb3dldmVyLCB0aGUgbGFzdAorICAlIHNlY3Rpb24sIGNvbnNpc3Rpbmcgb2YgXGluaXRpYWwgYW5kIHRoZSBzaW5nbGUgXGVudHJ5LCBkb2VzIG5vdAorICAlIGZpdCBvbiB0aGUgcGFnZSBhbmQgaGFzIHRvIGJlIGJyb2tlbiBvZmYuICBXaXRob3V0IHRoZSBmb2xsb3dpbmcKKyAgJSBwZW5hbHR5IHRoZSBwYWdlIGJ1aWxkZXIgd2lsbCBub3QgYmUgZXhlcmNpc2VkIHVudGlsIFxlamVjdAorICAlIGJlbG93LCBhbmQgYnkgdGhhdCB0aW1lIHdlJ2xsIGFscmVhZHkgaGF2ZSBjaGFuZ2VkIHRoZSBvdXRwdXQKKyAgJSByb3V0aW5lIHRvIHRoZSBcYmFsYW5jZWNvbHVtbnMgdmVyc2lvbiwgc28gdGhlIG5leHQtdG8tbGFzdAorICAlIGRvdWJsZS1jb2x1bW4gcGFnZSB3aWxsIGJlIHByb2Nlc3NlZCB3aXRoIFxiYWxhbmNlY29sdW1ucywgd2hpY2gKKyAgJSBpcyB3cm9uZzogIFRoZSB0d28gY29sdW1ucyB3aWxsIGdvIHRvIHRoZSBtYWluIHZlcnRpY2FsIGxpc3QsIHdpdGgKKyAgJSB0aGUgYnJva2VuLW9mZiBzZWN0aW9uIGluIHRoZSByZWNlbnQgY29udHJpYnV0aW9ucy4gIEFzIHNvb24gYXMKKyAgJSB0aGUgb3V0cHV0IHJvdXRpbmUgZmluaXNoZXMsIFRlWCBzdGFydHMgcmVjb25zaWRlcmluZyB0aGUgcGFnZQorICAlIGJyZWFrLiAgVGhlIHR3byBjb2x1bW5zIGFuZCB0aGUgYnJva2VuLW9mZiBzZWN0aW9uIGJvdGggZml0IG9uIHRoZQorICAlIHBhZ2UsIGJlY2F1c2UgdGhlIHR3byBjb2x1bW5zIG5vdyB0YWtlIHVwIG9ubHkgaGFsZiBvZiB0aGUgcGFnZQorICAlIGdvYWwuICBXaGVuIFRlWCBzZWVzIFxlamVjdCBmcm9tIGJlbG93IHdoaWNoIGZvbGxvd3MgdGhlIGZpbmFsCisgICUgc2VjdGlvbiwgaXQgaW52b2tlcyB0aGUgbmV3IG91dHB1dCByb3V0aW5lIHRoYXQgd2UndmUgc2V0IGFmdGVyCisgICUgXGJhbGFuY2Vjb2x1bW5zIGJlbG93OyBcb25lcGFnZW91dCB3aWxsIHRyeSB0byBmaXQgdGhlIHR3byBjb2x1bW5zCisgICUgYW5kIHRoZSBmaW5hbCBzZWN0aW9uIGludG8gdGhlIHZib3ggb2YgXHBhZ2VoZWlnaHQgKHNlZQorICAlIFxwYWdlYm9keSksIGNhdXNpbmcgYW4gb3ZlcmZ1bGwgYm94LgorICAlCisgICUgTm90ZSB0aGF0IGdsdWUgd29uJ3Qgd29yayBoZXJlLCBiZWNhdXNlIGdsdWUgZG9lcyBub3QgZXhlcmNpc2UgdGhlCisgICUgcGFnZSBidWlsZGVyLCB1bmxpa2UgcGVuYWx0aWVzIChzZWUgVGhlIFRlWGJvb2ssIHBwLiAyODAtMjgxKS4KKyAgXHBlbmFsdHkwCisgICUKKyAgXG91dHB1dCA9IHslCisgICAgJSBTcGxpdCB0aGUgbGFzdCBvZiB0aGUgZG91YmxlLWNvbHVtbiBtYXRlcmlhbC4gIExlYXZlIGl0IG9uIHRoZQorICAgICUgY3VycmVudCBwYWdlLCBubyBhdXRvbWF0aWMgcGFnZSBicmVhay4KKyAgICBcYmFsYW5jZWNvbHVtbnMKKyAgICAlCisgICAgJSBJZiB3ZSBlbmQgdXAgc3BsaXR0aW5nIHRvbyBtdWNoIG1hdGVyaWFsIGZvciB0aGUgY3VycmVudCBwYWdlLAorICAgICUgdGhvdWdoLCB0aGVyZSB3aWxsIGJlIGFub3RoZXIgcGFnZSBicmVhayByaWdodCBhZnRlciB0aGlzIFxvdXRwdXQKKyAgICAlIGludm9jYXRpb24gZW5kcy4gIEhhdmluZyBjYWxsZWQgXGJhbGFuY2Vjb2x1bW5zIG9uY2UsIHdlIGRvIG5vdAorICAgICUgd2FudCB0byBjYWxsIGl0IGFnYWluLiAgVGhlcmVmb3JlLCByZXNldCBcb3V0cHV0IHRvIGl0cyBub3JtYWwKKyAgICAlIGRlZmluaXRpb24gcmlnaHQgYXdheS4gIChXZSBob3BlIFxiYWxhbmNlY29sdW1ucyB3aWxsIG5ldmVyIGJlCisgICAgJSBjYWxsZWQgb24gdG8gYmFsYW5jZSB0b28gbXVjaCBtYXRlcmlhbCwgYnV0IGlmIGl0IGlzLCB0aGlzIG1ha2VzCisgICAgJSB0aGUgb3V0cHV0IHNvbWV3aGF0IG1vcmUgcGFsYXRhYmxlLikKKyAgICBcZ2xvYmFsXG91dHB1dCA9IHtcb25lcGFnZW91dHtccGFnZWNvbnRlbnRzXFBBR0V9fSUKKyAgfSUKKyAgXGVqZWN0CisgIFxlbmRncm91cCAlIHN0YXJ0ZWQgaW4gXGJlZ2luZG91YmxlY29sdW1ucworICAlCisgICUgXHBhZ2Vnb2FsIHdhcyBzZXQgdG8gdGhlIGRvdWJsZWQgXHZzaXplIGFib3ZlLCBzaW5jZSB3ZSByZXN0YXJ0ZWQKKyAgJSB0aGUgY3VycmVudCBwYWdlLiAgV2UncmUgbm93IGJhY2sgdG8gbm9ybWFsIHNpbmdsZS1jb2x1bW4KKyAgJSB0eXBlc2V0dGluZywgc28gcmVzZXQgXHBhZ2Vnb2FsIHRvIHRoZSBub3JtYWwgXHZzaXplIChhZnRlciB0aGUKKyAgJSBcZW5kZ3JvdXAgd2hlcmUgXHZzaXplIGdvdCByZXN0b3JlZCkuCisgIFxwYWdlZ29hbCA9IFx2c2l6ZQorfQorJQorJSBDYWxsZWQgYXQgdGhlIGVuZCBvZiB0aGUgZG91YmxlIGNvbHVtbiBtYXRlcmlhbC4KK1xkZWZcYmFsYW5jZWNvbHVtbnN7JQorICBcc2V0Ym94MCA9IFx2Ym94e1x1bnZib3gyNTV9JSBsaWtlIFxib3gyNTUgYnV0IG1vcmUgZWZmaWNpZW50LCBzZWUgcC4xMjAuCisgIFxkaW1lbkAgPSBcaHQwCisgIFxhZHZhbmNlXGRpbWVuQCBieSBcdG9wc2tpcAorICBcYWR2YW5jZVxkaW1lbkAgYnktXGJhc2VsaW5lc2tpcAorICBcZGl2aWRlXGRpbWVuQCBieSAyICUgdGFyZ2V0IHRvIHNwbGl0IHRvCisgICVkZWJ1Z1xtZXNzYWdle2ZpbmFsIDItY29sdW1uIG1hdGVyaWFsIGhlaWdodD1cdGhlXGh0MCwgdGFyZ2V0PVx0aGVcZGltZW5ALn0lCisgIFxzcGxpdHRvcHNraXAgPSBcdG9wc2tpcAorICAlIExvb3AgdW50aWwgd2UgZ2V0IGEgZGVjZW50IGJyZWFrcG9pbnQuCisgIHslCisgICAgXHZiYWRuZXNzID0gMTAwMDAKKyAgICBcbG9vcAorICAgICAgXGdsb2JhbFxzZXRib3gzID0gXGNvcHkwCisgICAgICBcZ2xvYmFsXHNldGJveDEgPSBcdnNwbGl0MyB0byBcZGltZW5ACisgICAgXGlmZGltXGh0Mz5cZGltZW5ACisgICAgICBcZ2xvYmFsXGFkdmFuY2VcZGltZW5AIGJ5IDFwdAorICAgIFxyZXBlYXQKKyAgfSUKKyAgJWRlYnVnXG1lc3NhZ2V7c3BsaXQgdG8gXHRoZVxkaW1lbkAsIGNvbHVtbiBoZWlnaHRzOiBcdGhlXGh0MSwgXHRoZVxodDMufSUKKyAgXHNldGJveDA9XHZib3ggdG9cZGltZW5Ae1x1bnZib3gxfSUKKyAgXHNldGJveDI9XHZib3ggdG9cZGltZW5Ae1x1bnZib3gzfSUKKyAgJQorICBccGFnZXNvZmFyCit9CitcY2F0Y29kZWBcQCA9IFxvdGhlcgorCisKK1xtZXNzYWdle3NlY3Rpb25pbmcsfQorJSBDaGFwdGVycywgc2VjdGlvbnMsIGV0Yy4KKworJSBcdW5udW1iZXJlZG5vIGlzIGFuIG94eW1vcm9uLCBvZiBjb3Vyc2UuICBCdXQgd2UgY291bnQgdGhlIHVubnVtYmVyZWQKKyUgc2VjdGlvbnMgc28gdGhhdCB3ZSBjYW4gcmVmZXIgdG8gdGhlbSB1bmFtYmlndW91c2x5IGluIHRoZSBwZGYKKyUgb3V0bGluZXMgYnkgdGhlaXIgInNlY3Rpb24gbnVtYmVyIi4gIFdlIGF2b2lkIGNvbGxpc2lvbnMgd2l0aCBjaGFwdGVyCislIG51bWJlcnMgYnkgc3RhcnRpbmcgdGhlbSBhdCAxMDAwMC4gIChJZiBhIGRvY3VtZW50IGV2ZXIgaGFzIDEwMDAwCislIGNoYXB0ZXJzLCB3ZSdyZSBpbiB0cm91YmxlIGFueXdheSwgSSdtIHN1cmUuKQorXG5ld2NvdW50XHVubnVtYmVyZWRubyBcdW5udW1iZXJlZG5vID0gMTAwMDAKK1xuZXdjb3VudFxjaGFwbm8KK1xuZXdjb3VudFxzZWNubyAgICAgICAgXHNlY25vPTAKK1xuZXdjb3VudFxzdWJzZWNubyAgICAgXHN1YnNlY25vPTAKK1xuZXdjb3VudFxzdWJzdWJzZWNubyAgXHN1YnN1YnNlY25vPTAKKworJSBUaGlzIGNvdW50ZXIgaXMgZnVubnkgc2luY2UgaXQgY291bnRzIHRocm91Z2ggY2hhcmNvZGVzIG9mIGxldHRlcnMgQSwgQiwgLi4uCitcbmV3Y291bnRcYXBwZW5kaXhubyAgXGFwcGVuZGl4bm8gPSBgXEAKKyUKKyUgXGRlZlxhcHBlbmRpeGxldHRlcntcY2hhclx0aGVcYXBwZW5kaXhub30KKyUgV2UgZG8gdGhlIGZvbGxvd2luZyB1Z2x5IGNvbmRpdGlvbmFsIGluc3RlYWQgb2YgdGhlIGFib3ZlIHNpbXBsZQorJSBjb25zdHJ1Y3QgZm9yIHRoZSBzYWtlIG9mIHBkZnRleCwgd2hpY2ggbmVlZHMgdGhlIGFjdHVhbAorJSBsZXR0ZXIgaW4gdGhlIGV4cGFuc2lvbiwgbm90IGp1c3QgdHlwZXNldC4KKyUKK1xkZWZcYXBwZW5kaXhsZXR0ZXJ7JQorICBcaWZudW1cYXBwZW5kaXhubz1gQSBBJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBCIEIlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEMgQyUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gRCBEJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBFIEUlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEYgRiUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gRyBHJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBIIEglCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEkgSSUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gSiBKJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBLIEslCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEwgTCUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gTSBNJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBOIE4lCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YE8gTyUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gUCBQJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBRIFElCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFIgUiUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gUyBTJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBUIFQlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFUgVSUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gViBWJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBXIFclCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFggWCUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gWSBZJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBaIFolCisgICUgVGhlIFx0aGUgaXMgbmVjZXNzYXJ5LCBkZXNwaXRlIGFwcGVhcmFuY2VzLCBiZWNhdXNlIFxhcHBlbmRpeGxldHRlciBpcworICAlIGV4cGFuZGVkIHdoaWxlIHdyaXRpbmcgdGhlIC50b2MgZmlsZS4gIFxjaGFyXGFwcGVuZGl4bm8gaXMgbm90CisgICUgZXhwYW5kYWJsZSwgdGh1cyBpdCBpcyB3cml0dGVuIGxpdGVyYWxseSwgdGh1cyBhbGwgYXBwZW5kaXhlcyBjb21lIG91dAorICAlIHdpdGggdGhlIHNhbWUgbGV0dGVyIChvciBAKSBpbiB0aGUgdG9jIHdpdGhvdXQgaXQuCisgIFxlbHNlXGNoYXJcdGhlXGFwcGVuZGl4bm8KKyAgXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpCisgIFxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaX0KKworJSBFYWNoIEBjaGFwdGVyIGRlZmluZXMgdGhlc2UgKHVzaW5nIG1hcmtzKSBhcyB0aGUgbnVtYmVyK25hbWUsIG51bWJlcgorJSBhbmQgbmFtZSBvZiB0aGUgY2hhcHRlci4gIFBhZ2UgaGVhZGluZ3MgYW5kIGZvb3RpbmdzIGNhbiB1c2UKKyUgdGhlc2UuICBAc2VjdGlvbiBkb2VzIGxpa2V3aXNlLgorXGRlZlx0aGlzY2hhcHRlcnt9CitcZGVmXHRoaXNjaGFwdGVybnVte30KK1xkZWZcdGhpc2NoYXB0ZXJuYW1le30KK1xkZWZcdGhpc3NlY3Rpb257fQorXGRlZlx0aGlzc2VjdGlvbm51bXt9CitcZGVmXHRoaXNzZWN0aW9ubmFtZXt9CisKK1xuZXdjb3VudFxhYnNzZWNsZXZlbCAlIHVzZWQgdG8gY2FsY3VsYXRlIHByb3BlciBoZWFkaW5nIGxldmVsCitcbmV3Y291bnRcc2VjYmFzZVxzZWNiYXNlPTAgJSBAcmFpc2VzZWN0aW9ucy9AbG93ZXJzZWN0aW9ucyBtb2RpZnkgdGhpcyBjb3VudAorCislIEByYWlzZXNlY3Rpb25zOiB0cmVhdCBAc2VjdGlvbiBhcyBjaGFwdGVyLCBAc3Vic2VjdGlvbiBhcyBzZWN0aW9uLCBldGMuCitcZGVmXHJhaXNlc2VjdGlvbnN7XGdsb2JhbFxhZHZhbmNlXHNlY2Jhc2UgYnkgLTF9CitcbGV0XHVwPVxyYWlzZXNlY3Rpb25zICUgb3JpZ2luYWwgQkZveCBuYW1lCisKKyUgQGxvd2Vyc2VjdGlvbnM6IHRyZWF0IEBjaGFwdGVyIGFzIHNlY3Rpb24sIEBzZWN0aW9uIGFzIHN1YnNlY3Rpb24sIGV0Yy4KK1xkZWZcbG93ZXJzZWN0aW9uc3tcZ2xvYmFsXGFkdmFuY2Vcc2VjYmFzZSBieSAxfQorXGxldFxkb3duPVxsb3dlcnNlY3Rpb25zICUgb3JpZ2luYWwgQkZveCBuYW1lCisKKyUgd2Ugb25seSBoYXZlIHN1YnN1Yi4KK1xjaGFyZGVmXG1heHNlY2xldmVsID0gMworJQorJSBBIG51bWJlcmVkIHNlY3Rpb24gd2l0aGluIGFuIHVubnVtYmVyZWQgY2hhbmdlcyB0byB1bm51bWJlcmVkIHRvby4KKyUgVG8gYWNoaXZlIHRoaXMsIHJlbWVtYmVyIHRoZSAiYmlnZ2VzdCIgdW5udW0uIHNlYy4gd2UgYXJlIGN1cnJlbnRseSBpbjoKK1xjaGFyZGVmXHVubWxldmVsID0gXG1heHNlY2xldmVsCislCislIFRyYWNlIHdoZXRoZXIgdGhlIGN1cnJlbnQgY2hhcHRlciBpcyBhbiBhcHBlbmRpeCBvciBub3Q6CislIFxjaGFwaGVhZHR5cGUgaXMgIk4iIG9yICJBIiwgdW5udW1iZXJlZCBjaGFwdGVycyBhcmUgaWdub3JlZC4KK1xkZWZcY2hhcGhlYWR0eXBle059CisKKyUgQ2hvb3NlIGEgaGVhZGluZyBtYWNybworJSAjMSBpcyBoZWFkaW5nIHR5cGUKKyUgIzIgaXMgaGVhZGluZyBsZXZlbAorJSAjMyBpcyB0ZXh0IGZvciBoZWFkaW5nCitcZGVmXGdlbmhlYWQjMSMyIzN7JQorICAlIENvbXB1dGUgdGhlIGFicy4gc2VjLiBsZXZlbDoKKyAgXGFic3NlY2xldmVsPSMyCisgIFxhZHZhbmNlXGFic3NlY2xldmVsIGJ5IFxzZWNiYXNlCisgICUgTWFrZSBzdXJlIFxhYnNzZWNsZXZlbCBkb2Vzbid0IGZhbGwgb3V0c2lkZSB0aGUgcmFuZ2U6CisgIFxpZm51bSBcYWJzc2VjbGV2ZWwgPCAwCisgICAgXGFic3NlY2xldmVsID0gMAorICBcZWxzZQorICAgIFxpZm51bSBcYWJzc2VjbGV2ZWwgPiAzCisgICAgICBcYWJzc2VjbGV2ZWwgPSAzCisgICAgXGZpCisgIFxmaQorICAlIFRoZSBoZWFkaW5nIHR5cGU6CisgIFxkZWZcaGVhZHR5cGV7IzF9JQorICBcaWYgXGhlYWR0eXBlIFUlCisgICAgXGlmbnVtIFxhYnNzZWNsZXZlbCA8IFx1bm1sZXZlbAorICAgICAgXGNoYXJkZWZcdW5tbGV2ZWwgPSBcYWJzc2VjbGV2ZWwKKyAgICBcZmkKKyAgXGVsc2UKKyAgICAlIENoZWNrIGZvciBhcHBlbmRpeCBzZWN0aW9uczoKKyAgICBcaWZudW0gXGFic3NlY2xldmVsID0gMAorICAgICAgXGVkZWZcY2hhcGhlYWR0eXBle1xoZWFkdHlwZX0lCisgICAgXGVsc2UKKyAgICAgIFxpZiBcaGVhZHR5cGUgQVxpZiBcY2hhcGhlYWR0eXBlIE4lCisJXGVycm1lc3NhZ2V7QGFwcGVuZGl4Li4uIHdpdGhpbiBhIG5vbi1hcHBlbmRpeCBjaGFwdGVyfSUKKyAgICAgIFxmaVxmaQorICAgIFxmaQorICAgICUgQ2hlY2sgZm9yIG51bWJlcmVkIHdpdGhpbiB1bm51bWJlcmVkOgorICAgIFxpZm51bSBcYWJzc2VjbGV2ZWwgPiBcdW5tbGV2ZWwKKyAgICAgIFxkZWZcaGVhZHR5cGV7VX0lCisgICAgXGVsc2UKKyAgICAgIFxjaGFyZGVmXHVubWxldmVsID0gMworICAgIFxmaQorICBcZmkKKyAgJSBOb3cgcHJpbnQgdGhlIGhlYWRpbmc6CisgIFxpZiBcaGVhZHR5cGUgVSUKKyAgICBcaWZjYXNlXGFic3NlY2xldmVsCisJXHVubnVtYmVyZWR6enp7IzN9JQorICAgIFxvciBcdW5udW1iZXJlZHNlY3p6ensjM30lCisgICAgXG9yIFx1bm51bWJlcmVkc3Vic2Vjenp6eyMzfSUKKyAgICBcb3IgXHVubnVtYmVyZWRzdWJzdWJzZWN6enp7IzN9JQorICAgIFxmaQorICBcZWxzZQorICAgIFxpZiBcaGVhZHR5cGUgQSUKKyAgICAgIFxpZmNhc2VcYWJzc2VjbGV2ZWwKKwkgIFxhcHBlbmRpeHp6ensjM30lCisgICAgICBcb3IgXGFwcGVuZGl4c2VjdGlvbnp6ensjM30lCisgICAgICBcb3IgXGFwcGVuZGl4c3Vic2Vjenp6eyMzfSUKKyAgICAgIFxvciBcYXBwZW5kaXhzdWJzdWJzZWN6enp7IzN9JQorICAgICAgXGZpCisgICAgXGVsc2UKKyAgICAgIFxpZmNhc2VcYWJzc2VjbGV2ZWwKKwkgIFxjaGFwdGVyenp6eyMzfSUKKyAgICAgIFxvciBcc2Vjenp6eyMzfSUKKyAgICAgIFxvciBcbnVtYmVyZWRzdWJzZWN6enp7IzN9JQorICAgICAgXG9yIFxudW1iZXJlZHN1YnN1YnNlY3p6ensjM30lCisgICAgICBcZmkKKyAgICBcZmkKKyAgXGZpCisgIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50Cit9CisKKyUgYW4gaW50ZXJmYWNlOgorXGRlZlxudW1oZWFke1xnZW5oZWFkIE59CitcZGVmXGFwcGhlYWR7XGdlbmhlYWQgQX0KK1xkZWZcdW5ubWhlYWR7XGdlbmhlYWQgVX0KKworJSBAY2hhcHRlciwgQGFwcGVuZGl4LCBAdW5udW1iZXJlZC4gIEluY3JlbWVudCB0b3AtbGV2ZWwgY291bnRlciwgcmVzZXQKKyUgYWxsIGxvd2VyLWxldmVsIHNlY3Rpb25pbmcgY291bnRlcnMgdG8gemVyby4KKyUKKyUgQWxzbyBzZXQgXGNoYXBsZXZlbHByZWZpeCwgd2hpY2ggd2UgcHJlcGVuZCB0byBAZmxvYXQgc2VxdWVuY2UgbnVtYmVycworJSAoZS5nLiwgZmlndXJlcyksIHEudi4gIEJ5IGRlZmF1bHQgKGJlZm9yZSBhbnkgY2hhcHRlciksIHRoYXQgaXMgZW1wdHkuCitcbGV0XGNoYXBsZXZlbHByZWZpeCA9IFxlbXB0eQorJQorXG91dGVyXHBhcnNlYXJnZGVmXGNoYXB0ZXJ7XG51bWhlYWQweyMxfX0gJSBub3JtYWxseSBudW1oZWFkMCBjYWxscyBjaGFwdGVyenp6CitcZGVmXGNoYXB0ZXJ6enojMXslCisgICUgc2VjdGlvbiByZXNldHRpbmcgaXMgXGdsb2JhbCBpbiBjYXNlIHRoZSBjaGFwdGVyIGlzIGluIGEgZ3JvdXAsIHN1Y2gKKyAgJSBhcyBhbiBAaW5jbHVkZSBmaWxlLgorICBcZ2xvYmFsXHNlY25vPTAgXGdsb2JhbFxzdWJzZWNubz0wIFxnbG9iYWxcc3Vic3Vic2Vjbm89MAorICAgIFxnbG9iYWxcYWR2YW5jZVxjaGFwbm8gYnkgMQorICAlCisgICUgVXNlZCBmb3IgXGZsb2F0LgorICBcZ2RlZlxjaGFwbGV2ZWxwcmVmaXh7XHRoZVxjaGFwbm8ufSUKKyAgXHJlc2V0YWxsZmxvYXRub3MKKyAgJQorICAlIFxwdXR3b3JkQ2hhcHRlciBjYW4gY29udGFpbiBjb21wbGV4IHRoaW5ncyBpbiB0cmFuc2xhdGlvbnMuCisgIFx0b2tzMD1cZXhwYW5kYWZ0ZXJ7XHB1dHdvcmRDaGFwdGVyfSUKKyAgXG1lc3NhZ2V7XHRoZVx0b2tzMCBcc3BhY2UgXHRoZVxjaGFwbm99JQorICAlCisgICUgV3JpdGUgdGhlIGFjdHVhbCBoZWFkaW5nLgorICBcY2hhcG1hY3JveyMxfXtZbnVtYmVyZWR9e1x0aGVcY2hhcG5vfSUKKyAgJQorICAlIFNvIEBzZWN0aW9uIGFuZCB0aGUgbGlrZSBhcmUgbnVtYmVyZWQgdW5kZXJuZWF0aCB0aGlzIGNoYXB0ZXIuCisgIFxnbG9iYWxcbGV0XHNlY3Rpb24gPSBcbnVtYmVyZWRzZWMKKyAgXGdsb2JhbFxsZXRcc3Vic2VjdGlvbiA9IFxudW1iZXJlZHN1YnNlYworICBcZ2xvYmFsXGxldFxzdWJzdWJzZWN0aW9uID0gXG51bWJlcmVkc3Vic3Vic2VjCit9CisKK1xvdXRlclxwYXJzZWFyZ2RlZlxhcHBlbmRpeHtcYXBwaGVhZDB7IzF9fSAlIG5vcm1hbGx5IGNhbGxzIGFwcGVuZGl4enp6CislCitcZGVmXGFwcGVuZGl4enp6IzF7JQorICBcZ2xvYmFsXHNlY25vPTAgXGdsb2JhbFxzdWJzZWNubz0wIFxnbG9iYWxcc3Vic3Vic2Vjbm89MAorICAgIFxnbG9iYWxcYWR2YW5jZVxhcHBlbmRpeG5vIGJ5IDEKKyAgXGdkZWZcY2hhcGxldmVscHJlZml4e1xhcHBlbmRpeGxldHRlci59JQorICBccmVzZXRhbGxmbG9hdG5vcworICAlCisgICUgXHB1dHdvcmRBcHBlbmRpeCBjYW4gY29udGFpbiBjb21wbGV4IHRoaW5ncyBpbiB0cmFuc2xhdGlvbnMuCisgIFx0b2tzMD1cZXhwYW5kYWZ0ZXJ7XHB1dHdvcmRBcHBlbmRpeH0lCisgIFxtZXNzYWdle1x0aGVcdG9rczAgXHNwYWNlIFxhcHBlbmRpeGxldHRlcn0lCisgICUKKyAgXGNoYXBtYWNyb3sjMX17WWFwcGVuZGl4fXtcYXBwZW5kaXhsZXR0ZXJ9JQorICAlCisgIFxnbG9iYWxcbGV0XHNlY3Rpb24gPSBcYXBwZW5kaXhzZWMKKyAgXGdsb2JhbFxsZXRcc3Vic2VjdGlvbiA9IFxhcHBlbmRpeHN1YnNlYworICBcZ2xvYmFsXGxldFxzdWJzdWJzZWN0aW9uID0gXGFwcGVuZGl4c3Vic3Vic2VjCit9CisKK1xvdXRlclxwYXJzZWFyZ2RlZlx1bm51bWJlcmVke1x1bm5taGVhZDB7IzF9fSAlIG5vcm1hbGx5IHVubm1oZWFkMCBjYWxscyB1bm51bWJlcmVkenp6CitcZGVmXHVubnVtYmVyZWR6enojMXslCisgIFxnbG9iYWxcc2Vjbm89MCBcZ2xvYmFsXHN1YnNlY25vPTAgXGdsb2JhbFxzdWJzdWJzZWNubz0wCisgICAgXGdsb2JhbFxhZHZhbmNlXHVubnVtYmVyZWRubyBieSAxCisgICUKKyAgJSBTaW5jZSBhbiB1bm51bWJlcmVkIGhhcyBubyBudW1iZXIsIG5vIHByZWZpeCBmb3IgZmlndXJlcy4KKyAgXGdsb2JhbFxsZXRcY2hhcGxldmVscHJlZml4ID0gXGVtcHR5CisgIFxyZXNldGFsbGZsb2F0bm9zCisgICUKKyAgJSBUaGlzIHVzZWQgdG8gYmUgc2ltcGx5IFxtZXNzYWdleyMxfSwgYnV0IFRlWCBmdWxseSBleHBhbmRzIHRoZQorICAlIGFyZ3VtZW50IHRvIFxtZXNzYWdlLiAgVGhlcmVmb3JlLCBpZiAjMSBjb250YWluZWQgQC1jb21tYW5kcywgVGVYCisgICUgZXhwYW5kZWQgdGhlbS4gIEZvciBleGFtcGxlLCBpbiBgQHVubnVtYmVyZWQgVGhlIEBjaXRle0Jvb2t9JywgVGVYCisgICUgZXhwYW5kZWQgQGNpdGUgKHdoaWNoIHR1cm5zIG91dCB0byBjYXVzZSBlcnJvcnMgYmVjYXVzZSBcY2l0ZSBpcyBtZWFudAorICAlIHRvIGJlIGV4ZWN1dGVkLCBub3QgZXhwYW5kZWQpLgorICAlCisgICUgQW55d2F5LCB3ZSBkb24ndCB3YW50IHRoZSBmdWxseS1leHBhbmRlZCBkZWZpbml0aW9uIG9mIEBjaXRlIHRvIGFwcGVhcgorICAlIGFzIGEgcmVzdWx0IG9mIHRoZSBcbWVzc2FnZSwgd2UganVzdCB3YW50IGBAY2l0ZScgaXRzZWxmLiAgV2UgdXNlCisgICUgXHRoZTx0b2tzIHJlZ2lzdGVyPiB0byBhY2hpZXZlIHRoaXM6IFRlWCBleHBhbmRzIFx0aGU8dG9rcz4gb25seSBvbmNlLAorICAlIHNpbXBseSB5aWVsZGluZyB0aGUgY29udGVudHMgb2YgPHRva3MgcmVnaXN0ZXI+LiAgKFdlIGFsc28gZG8gdGhpcyBmb3IKKyAgJSB0aGUgdG9jIGVudHJpZXMuKQorICBcdG9rczAgPSB7IzF9JQorICBcbWVzc2FnZXsoXHRoZVx0b2tzMCl9JQorICAlCisgIFxjaGFwbWFjcm97IzF9e1lub3RoaW5nfXtcdGhlXHVubnVtYmVyZWRub30lCisgICUKKyAgXGdsb2JhbFxsZXRcc2VjdGlvbiA9IFx1bm51bWJlcmVkc2VjCisgIFxnbG9iYWxcbGV0XHN1YnNlY3Rpb24gPSBcdW5udW1iZXJlZHN1YnNlYworICBcZ2xvYmFsXGxldFxzdWJzdWJzZWN0aW9uID0gXHVubnVtYmVyZWRzdWJzdWJzZWMKK30KKworJSBAY2VudGVyY2hhcCBpcyBsaWtlIEB1bm51bWJlcmVkLCBidXQgdGhlIGhlYWRpbmcgaXMgY2VudGVyZWQuCitcb3V0ZXJccGFyc2VhcmdkZWZcY2VudGVyY2hhcHslCisgICUgV2VsbCwgd2UgY291bGQgZG8gdGhlIGZvbGxvd2luZyBpbiBhIGdyb3VwLCBidXQgdGhhdCB3b3VsZCBicmVhaworICAlIGFuIGFzc3VtcHRpb24gdGhhdCBcY2hhcG1hY3JvIGlzIGNhbGxlZCBhdCB0aGUgb3V0ZXJtb3N0IGxldmVsLgorICAlIFRodXMgd2UgYXJlIHNhZmVyIHRoaXMgd2F5OgkJLS1rYXNhbCwgMjRmZWIwNAorICBcbGV0XGNlbnRlcnBhcmFtZXRlcnNtYXliZSA9IFxjZW50ZXJwYXJhbWV0ZXJzCisgIFx1bm5taGVhZDB7IzF9JQorICBcbGV0XGNlbnRlcnBhcmFtZXRlcnNtYXliZSA9IFxyZWxheAorfQorCislIEB0b3AgaXMgbGlrZSBAdW5udW1iZXJlZC4KK1xsZXRcdG9wXHVubnVtYmVyZWQKKworJSBTZWN0aW9ucy4KK1xvdXRlclxwYXJzZWFyZ2RlZlxudW1iZXJlZHNlY3tcbnVtaGVhZDF7IzF9fSAlIG5vcm1hbGx5IGNhbGxzIHNlY3p6egorXGRlZlxzZWN6enojMXslCisgIFxnbG9iYWxcc3Vic2Vjbm89MCBcZ2xvYmFsXHN1YnN1YnNlY25vPTAgIFxnbG9iYWxcYWR2YW5jZVxzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c2VjfXtZbnVtYmVyZWR9e1x0aGVcY2hhcG5vLlx0aGVcc2Vjbm99JQorfQorCitcb3V0ZXJccGFyc2VhcmdkZWZcYXBwZW5kaXhzZWN0aW9ue1xhcHBoZWFkMXsjMX19ICUgbm9ybWFsbHkgY2FsbHMgYXBwZW5kaXhzZWN0aW9uenp6CitcZGVmXGFwcGVuZGl4c2VjdGlvbnp6eiMxeyUKKyAgXGdsb2JhbFxzdWJzZWNubz0wIFxnbG9iYWxcc3Vic3Vic2Vjbm89MCAgXGdsb2JhbFxhZHZhbmNlXHNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzZWN9e1lhcHBlbmRpeH17XGFwcGVuZGl4bGV0dGVyLlx0aGVcc2Vjbm99JQorfQorXGxldFxhcHBlbmRpeHNlY1xhcHBlbmRpeHNlY3Rpb24KKworXG91dGVyXHBhcnNlYXJnZGVmXHVubnVtYmVyZWRzZWN7XHVubm1oZWFkMXsjMX19ICUgbm9ybWFsbHkgY2FsbHMgdW5udW1iZXJlZHNlY3p6egorXGRlZlx1bm51bWJlcmVkc2Vjenp6IzF7JQorICBcZ2xvYmFsXHN1YnNlY25vPTAgXGdsb2JhbFxzdWJzdWJzZWNubz0wICBcZ2xvYmFsXGFkdmFuY2Vcc2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3NlY317WW5vdGhpbmd9e1x0aGVcdW5udW1iZXJlZG5vLlx0aGVcc2Vjbm99JQorfQorCislIFN1YnNlY3Rpb25zLgorXG91dGVyXHBhcnNlYXJnZGVmXG51bWJlcmVkc3Vic2Vje1xudW1oZWFkMnsjMX19ICUgbm9ybWFsbHkgY2FsbHMgbnVtYmVyZWRzdWJzZWN6enoKK1xkZWZcbnVtYmVyZWRzdWJzZWN6enojMXslCisgIFxnbG9iYWxcc3Vic3Vic2Vjbm89MCAgXGdsb2JhbFxhZHZhbmNlXHN1YnNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzZWN9e1ludW1iZXJlZH17XHRoZVxjaGFwbm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vfSUKK30KKworXG91dGVyXHBhcnNlYXJnZGVmXGFwcGVuZGl4c3Vic2Vje1xhcHBoZWFkMnsjMX19ICUgbm9ybWFsbHkgY2FsbHMgYXBwZW5kaXhzdWJzZWN6enoKK1xkZWZcYXBwZW5kaXhzdWJzZWN6enojMXslCisgIFxnbG9iYWxcc3Vic3Vic2Vjbm89MCAgXGdsb2JhbFxhZHZhbmNlXHN1YnNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzZWN9e1lhcHBlbmRpeH0lCisgICAgICAgICAgICAgICAgIHtcYXBwZW5kaXhsZXR0ZXIuXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vfSUKK30KKworXG91dGVyXHBhcnNlYXJnZGVmXHVubnVtYmVyZWRzdWJzZWN7XHVubm1oZWFkMnsjMX19ICVub3JtYWxseSBjYWxscyB1bm51bWJlcmVkc3Vic2Vjenp6CitcZGVmXHVubnVtYmVyZWRzdWJzZWN6enojMXslCisgIFxnbG9iYWxcc3Vic3Vic2Vjbm89MCAgXGdsb2JhbFxhZHZhbmNlXHN1YnNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzZWN9e1lub3RoaW5nfSUKKyAgICAgICAgICAgICAgICAge1x0aGVcdW5udW1iZXJlZG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNub30lCit9CisKKyUgU3Vic3Vic2VjdGlvbnMuCitcb3V0ZXJccGFyc2VhcmdkZWZcbnVtYmVyZWRzdWJzdWJzZWN7XG51bWhlYWQzeyMxfX0gJSBub3JtYWxseSBudW1iZXJlZHN1YnN1YnNlY3p6egorXGRlZlxudW1iZXJlZHN1YnN1YnNlY3p6eiMxeyUKKyAgXGdsb2JhbFxhZHZhbmNlXHN1YnN1YnNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzdWJzZWN9e1ludW1iZXJlZH0lCisgICAgICAgICAgICAgICAgIHtcdGhlXGNoYXBuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm8uXHRoZVxzdWJzdWJzZWNub30lCit9CisKK1xvdXRlclxwYXJzZWFyZ2RlZlxhcHBlbmRpeHN1YnN1YnNlY3tcYXBwaGVhZDN7IzF9fSAlIG5vcm1hbGx5IGFwcGVuZGl4c3Vic3Vic2Vjenp6CitcZGVmXGFwcGVuZGl4c3Vic3Vic2Vjenp6IzF7JQorICBcZ2xvYmFsXGFkdmFuY2Vcc3Vic3Vic2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnN1YnNlY317WWFwcGVuZGl4fSUKKyAgICAgICAgICAgICAgICAge1xhcHBlbmRpeGxldHRlci5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm8uXHRoZVxzdWJzdWJzZWNub30lCit9CisKK1xvdXRlclxwYXJzZWFyZ2RlZlx1bm51bWJlcmVkc3Vic3Vic2Vje1x1bm5taGVhZDN7IzF9fSAlbm9ybWFsbHkgdW5udW1iZXJlZHN1YnN1YnNlY3p6egorXGRlZlx1bm51bWJlcmVkc3Vic3Vic2Vjenp6IzF7JQorICBcZ2xvYmFsXGFkdmFuY2Vcc3Vic3Vic2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnN1YnNlY317WW5vdGhpbmd9JQorICAgICAgICAgICAgICAgICB7XHRoZVx1bm51bWJlcmVkbm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vLlx0aGVcc3Vic3Vic2Vjbm99JQorfQorCislIFRoZXNlIG1hY3JvcyBjb250cm9sIHdoYXQgdGhlIHNlY3Rpb24gY29tbWFuZHMgZG8sIGFjY29yZGluZworJSB0byB3aGF0IGtpbmQgb2YgY2hhcHRlciB3ZSBhcmUgaW4gKG9yZGluYXJ5LCBhcHBlbmRpeCwgb3IgdW5udW1iZXJlZCkuCislIERlZmluZSB0aGVtIGJ5IGRlZmF1bHQgZm9yIGEgbnVtYmVyZWQgY2hhcHRlci4KK1xsZXRcc2VjdGlvbiA9IFxudW1iZXJlZHNlYworXGxldFxzdWJzZWN0aW9uID0gXG51bWJlcmVkc3Vic2VjCitcbGV0XHN1YnN1YnNlY3Rpb24gPSBcbnVtYmVyZWRzdWJzdWJzZWMKKworJSBEZWZpbmUgQG1ham9yaGVhZGluZywgQGhlYWRpbmcgYW5kIEBzdWJoZWFkaW5nCisKKyUgTk9URSBvbiB1c2Ugb2YgXHZib3ggZm9yIGNoYXB0ZXIgaGVhZGluZ3MsIHNlY3Rpb24gaGVhZGluZ3MsIGFuZCBzdWNoOgorJSAgICAgICAxKSBXZSB1c2UgXHZib3ggcmF0aGVyIHRoYW4gdGhlIGVhcmxpZXIgXGxpbmUgdG8gcGVybWl0CislICAgICAgICAgIG92ZXJsb25nIGhlYWRpbmdzIHRvIGZvbGQuCislICAgICAgIDIpIFxoeXBoZW5wZW5hbHR5IGlzIHNldCB0byAxMDAwMCBiZWNhdXNlIGh5cGhlbmF0aW9uIGluIGEKKyUgICAgICAgICAgaGVhZGluZyBpcyBvYm5veGlvdXM7IHRoaXMgZm9yYmlkcyBpdC4KKyUgICAgICAgMykgTGlrZXdpc2UsIGhlYWRpbmdzIGxvb2sgYmVzdCBpZiBubyBccGFyaW5kZW50IGlzIHVzZWQsIGFuZAorJSAgICAgICAgICBpZiBqdXN0aWZpY2F0aW9uIGlzIG5vdCBhdHRlbXB0ZWQuICBIZW5jZSBccmFnZ2VkcmlnaHQuCisKK1xkZWZcbWFqb3JoZWFkaW5neyUKKyAge1xhZHZhbmNlXGNoYXBoZWFkaW5nc2tpcCBieSAxMHB0IFxjaGFwYnJlYWsgfSUKKyAgXHBhcnNlYXJnXGNoYXBoZWFkaW5nenp6Cit9CisKK1xkZWZcY2hhcGhlYWRpbmd7XGNoYXBicmVhayBccGFyc2VhcmdcY2hhcGhlYWRpbmd6enp9CitcZGVmXGNoYXBoZWFkaW5nenp6IzF7JQorICB7XGNoYXBmb250cyBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMFx0b2xlcmFuY2U9NTAwMAorICAgICAgICAgICAgICAgICAgICBccGFyaW5kZW50PTBwdFxwdGV4cmFnZ2VkcmlnaHQKKyAgICAgICAgICAgICAgICAgICAgXHJtaXNib2xkICMxXGhmaWxsfX0lCisgIFxiaWdza2lwIFxwYXJccGVuYWx0eSAyMDBccmVsYXgKKyAgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnQKK30KKworJSBAaGVhZGluZywgQHN1YmhlYWRpbmcsIEBzdWJzdWJoZWFkaW5nLgorXHBhcnNlYXJnZGVmXGhlYWRpbmd7XHNlY3Rpb25oZWFkaW5neyMxfXtzZWN9e1lvbWl0ZnJvbXRvY317fQorICBcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudH0KK1xwYXJzZWFyZ2RlZlxzdWJoZWFkaW5ne1xzZWN0aW9uaGVhZGluZ3sjMX17c3Vic2VjfXtZb21pdGZyb210b2N9e30KKyAgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnR9CitccGFyc2VhcmdkZWZcc3Vic3ViaGVhZGluZ3tcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnN1YnNlY317WW9taXRmcm9tdG9jfXt9CisgIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50fQorCislIFRoZXNlIG1hY3JvcyBnZW5lcmF0ZSBhIGNoYXB0ZXIsIHNlY3Rpb24sIGV0Yy4gaGVhZGluZyBvbmx5CislIChpbmNsdWRpbmcgd2hpdGVzcGFjZSwgbGluZWJyZWFraW5nLCBldGMuIGFyb3VuZCBpdCksCislIGdpdmVuIGFsbCB0aGUgaW5mb3JtYXRpb24gaW4gY29udmVuaWVudCwgcGFyc2VkIGZvcm0uCisKKyUlJSBBcmdzIGFyZSB0aGUgc2tpcCBhbmQgcGVuYWx0eSAodXN1YWxseSBuZWdhdGl2ZSkKK1xkZWZcZG9icmVhayMxIzJ7XHBhclxpZmRpbVxsYXN0c2tpcDwjMVxyZW1vdmVsYXN0c2tpcFxwZW5hbHR5IzJcdnNraXAjMVxmaX0KKworJSUlIERlZmluZSBwbGFpbiBjaGFwdGVyIHN0YXJ0cywgYW5kIHBhZ2Ugb24vb2ZmIHN3aXRjaGluZyBmb3IgaXQKKyUgUGFyYW1ldGVyIGNvbnRyb2xsaW5nIHNraXAgYmVmb3JlIGNoYXB0ZXIgaGVhZGluZ3MgKGlmIG5lZWRlZCkKKworXG5ld3NraXBcY2hhcGhlYWRpbmdza2lwCisKK1xkZWZcY2hhcGJyZWFre1xkb2JyZWFrIFxjaGFwaGVhZGluZ3NraXAgey00MDAwfX0KK1xkZWZcY2hhcHBhZ2Vye1xwYXJcdmZpbGxcc3VwZXJlamVjdH0KKyUgQmVjYXVzZSBcZG9tYXJrIGlzIGNhbGxlZCBiZWZvcmUgXGNoYXBvZGRwYWdlLCB0aGUgZmlsbGVyIHBhZ2Ugd2lsbAorJSBnZXQgdGhlIGhlYWRpbmdzIGZvciB0aGUgbmV4dCBjaGFwdGVyLCB3aGljaCBpcyB3cm9uZy4gIEJ1dCB3ZSBkb24ndAorJSBjYXJlIC0tIHdlIGp1c3QgZGlzYWJsZSBhbGwgaGVhZGluZ3Mgb24gdGhlIGZpbGxlciBwYWdlLgorXGRlZlxjaGFwb2RkcGFnZXslCisgIFxjaGFwcGFnZXIKKyAgXGlmb2RkXHBhZ2VubyBcZWxzZQorICAgIFxiZWdpbmdyb3VwCisgICAgICBcZXZlbmhlYWRsaW5lPXtcaGZpbH1cZXZlbmZvb3RsaW5lPXtcaGZpbH0lCisgICAgICBcb2RkaGVhZGxpbmU9e1xoZmlsfVxvZGRmb290bGluZT17XGhmaWx9JQorICAgICAgXGhib3ggdG8gMHB0e30lCisgICAgICBcY2hhcHBhZ2VyCisgICAgXGVuZGdyb3VwCisgIFxmaQorfQorCitcZGVmXHNldGNoYXB0ZXJuZXdwYWdlICMxIHtcY3NuYW1lIENIQVBQQUcjMVxlbmRjc25hbWV9CisKK1xkZWZcQ0hBUFBBR29mZnslCitcZ2xvYmFsXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcHBhZ2VyCitcZ2xvYmFsXGxldFxwY2hhcHNlcG1hY3JvPVxjaGFwYnJlYWsKK1xnbG9iYWxcbGV0XHBhZ2VhbGlnbm1hY3JvPVxjaGFwcGFnZXJ9CisKK1xkZWZcQ0hBUFBBR29ueyUKK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwcGFnZXIKK1xnbG9iYWxcbGV0XHBjaGFwc2VwbWFjcm89XGNoYXBwYWdlcgorXGdsb2JhbFxsZXRccGFnZWFsaWdubWFjcm89XGNoYXBwYWdlcgorXGdsb2JhbFxkZWZcSEVBRElOR1NvbntcSEVBRElOR1NzaW5nbGV9fQorCitcZGVmXENIQVBQQUdvZGR7JQorXGdsb2JhbFxsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBvZGRwYWdlCitcZ2xvYmFsXGxldFxwY2hhcHNlcG1hY3JvPVxjaGFwb2RkcGFnZQorXGdsb2JhbFxsZXRccGFnZWFsaWdubWFjcm89XGNoYXBvZGRwYWdlCitcZ2xvYmFsXGRlZlxIRUFESU5HU29ue1xIRUFESU5HU2RvdWJsZX19CisKK1xDSEFQUEFHb24KKworJSBDaGFwdGVyIG9wZW5pbmcuCislCislICMxIGlzIHRoZSB0ZXh0LCAjMiBpcyB0aGUgc2VjdGlvbiB0eXBlIChZbnVtYmVyZWQsIFlub3RoaW5nLAorJSBZYXBwZW5kaXgsIFlvbWl0ZnJvbXRvYyksICMzIHRoZSBjaGFwdGVyIG51bWJlci4KKyUKKyUgVG8gdGVzdCBhZ2FpbnN0IG91ciBhcmd1bWVudC4KK1xkZWZcWW5vdGhpbmdrZXl3b3Jke1lub3RoaW5nfQorXGRlZlxZb21pdGZyb210b2NrZXl3b3Jke1lvbWl0ZnJvbXRvY30KK1xkZWZcWWFwcGVuZGl4a2V5d29yZHtZYXBwZW5kaXh9CislCitcZGVmXGNoYXBtYWNybyMxIzIjM3slCisgICUgSW5zZXJ0IHRoZSBmaXJzdCBtYXJrIGJlZm9yZSB0aGUgaGVhZGluZyBicmVhayAoc2VlIG5vdGVzIGZvciBcZG9tYXJrKS4KKyAgXGxldFxwcmV2Y2hhcHRlcmRlZnM9XGxhc3RjaGFwdGVyZGVmcworICBcbGV0XHByZXZzZWN0aW9uZGVmcz1cbGFzdHNlY3Rpb25kZWZzCisgIFxnZGVmXGxhc3RzZWN0aW9uZGVmc3tcZ2RlZlx0aGlzc2VjdGlvbm5hbWV7fVxnZGVmXHRoaXNzZWN0aW9ubnVte30lCisgICAgICAgICAgICAgICAgICAgICAgICBcZ2RlZlx0aGlzc2VjdGlvbnt9fSUKKyAgJQorICBcZGVmXHRlbXB0eXBleyMyfSUKKyAgXGlmeFx0ZW1wdHlwZVxZbm90aGluZ2tleXdvcmQKKyAgICBcZ2RlZlxsYXN0Y2hhcHRlcmRlZnN7XGdkZWZcdGhpc2NoYXB0ZXJuYW1leyMxfVxnZGVmXHRoaXNjaGFwdGVybnVte30lCisgICAgICAgICAgICAgICAgICAgICAgICAgIFxnZGVmXHRoaXNjaGFwdGVye1x0aGlzY2hhcHRlcm5hbWV9fSUKKyAgXGVsc2VcaWZ4XHRlbXB0eXBlXFlvbWl0ZnJvbXRvY2tleXdvcmQKKyAgICBcZ2RlZlxsYXN0Y2hhcHRlcmRlZnN7XGdkZWZcdGhpc2NoYXB0ZXJuYW1leyMxfVxnZGVmXHRoaXNjaGFwdGVybnVte30lCisgICAgICAgICAgICAgICAgICAgICAgICAgIFxnZGVmXHRoaXNjaGFwdGVye319JQorICBcZWxzZVxpZnhcdGVtcHR5cGVcWWFwcGVuZGl4a2V5d29yZAorICAgIFx0b2tzMD17IzF9JQorICAgIFx4ZGVmXGxhc3RjaGFwdGVyZGVmc3slCisgICAgICBcZ2RlZlxub2V4cGFuZFx0aGlzY2hhcHRlcm5hbWV7XHRoZVx0b2tzMH0lCisgICAgICBcZ2RlZlxub2V4cGFuZFx0aGlzY2hhcHRlcm51bXtcYXBwZW5kaXhsZXR0ZXJ9JQorICAgICAgJSBcbm9leHBhbmRccHV0d29yZEFwcGVuZGl4IGF2b2lkcyBleHBhbmRpbmcgaW5kaWdlc3RpYmxlCisgICAgICAlIGNvbW1hbmRzIGluIHNvbWUgb2YgdGhlIHRyYW5zbGF0aW9ucy4KKyAgICAgIFxnZGVmXG5vZXhwYW5kXHRoaXNjaGFwdGVye1xub2V4cGFuZFxwdXR3b3JkQXBwZW5kaXh7fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5vZXhwYW5kXHRoaXNjaGFwdGVybnVtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5vZXhwYW5kXHRoaXNjaGFwdGVybmFtZX0lCisgICAgfSUKKyAgXGVsc2UKKyAgICBcdG9rczA9eyMxfSUKKyAgICBceGRlZlxsYXN0Y2hhcHRlcmRlZnN7JQorICAgICAgXGdkZWZcbm9leHBhbmRcdGhpc2NoYXB0ZXJuYW1le1x0aGVcdG9rczB9JQorICAgICAgXGdkZWZcbm9leHBhbmRcdGhpc2NoYXB0ZXJudW17XHRoZVxjaGFwbm99JQorICAgICAgJSBcbm9leHBhbmRccHV0d29yZENoYXB0ZXIgYXZvaWRzIGV4cGFuZGluZyBpbmRpZ2VzdGlibGUKKyAgICAgICUgY29tbWFuZHMgaW4gc29tZSBvZiB0aGUgdHJhbnNsYXRpb25zLgorICAgICAgXGdkZWZcbm9leHBhbmRcdGhpc2NoYXB0ZXJ7XG5vZXhwYW5kXHB1dHdvcmRDaGFwdGVye30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxub2V4cGFuZFx0aGlzY2hhcHRlcm51bToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxub2V4cGFuZFx0aGlzY2hhcHRlcm5hbWV9JQorICAgIH0lCisgIFxmaVxmaVxmaQorICAlCisgICUgT3V0cHV0IHRoZSBtYXJrLiAgUGFzcyBpdCB0aHJvdWdoIFxzYWZld2hhdHNpdCwgdG8gdGFrZSBjYXJlIG9mCisgICUgdGhlIHByZWNlZGluZyBzcGFjZS4KKyAgXHNhZmV3aGF0c2l0XGRvbWFyaworICAlCisgICUgSW5zZXJ0IHRoZSBjaGFwdGVyIGhlYWRpbmcgYnJlYWsuCisgIFxwY2hhcHNlcG1hY3JvCisgICUKKyAgJSBOb3cgdGhlIHNlY29uZCBtYXJrLCBhZnRlciB0aGUgaGVhZGluZyBicmVhay4gIE5vIGJyZWFrIHBvaW50cworICAlIGJldHdlZW4gaGVyZSBhbmQgdGhlIGhlYWRpbmcuCisgIFxsZXRccHJldmNoYXB0ZXJkZWZzPVxsYXN0Y2hhcHRlcmRlZnMKKyAgXGxldFxwcmV2c2VjdGlvbmRlZnM9XGxhc3RzZWN0aW9uZGVmcworICBcZG9tYXJrCisgICUKKyAgeyUKKyAgICBcY2hhcGZvbnRzIFxybWlzYm9sZAorICAgICUKKyAgICAlIEhhdmUgdG8gZGVmaW5lIFxsYXN0c2VjdGlvbiBiZWZvcmUgY2FsbGluZyBcZG9ub2RlcmVmLCBiZWNhdXNlIHRoZQorICAgICUgeHJlZiBjb2RlIGV2ZW50dWFsbHkgdXNlcyBpdC4gIE9uIHRoZSBvdGhlciBoYW5kLCBpdCBoYXMgdG8gYmUgY2FsbGVkCisgICAgJSBhZnRlciBccGNoYXBzZXBtYWNybywgb3IgdGhlIGhlYWRsaW5lIHdpbGwgY2hhbmdlIHRvbyBzb29uLgorICAgIFxnZGVmXGxhc3RzZWN0aW9ueyMxfSUKKyAgICAlCisgICAgJSBPbmx5IGluc2VydCB0aGUgc2VwYXJhdGluZyBzcGFjZSBpZiB3ZSBoYXZlIGEgY2hhcHRlci9hcHBlbmRpeAorICAgICUgbnVtYmVyLCBhbmQgZG9uJ3QgcHJpbnQgdGhlIHVubnVtYmVyZWQgYGBudW1iZXInJy4KKyAgICBcaWZ4XHRlbXB0eXBlXFlub3RoaW5na2V5d29yZAorICAgICAgXHNldGJveDAgPSBcaGJveHt9JQorICAgICAgXGRlZlx0b2N0eXBle3VubmNoYXB9JQorICAgIFxlbHNlXGlmeFx0ZW1wdHlwZVxZb21pdGZyb210b2NrZXl3b3JkCisgICAgICBcc2V0Ym94MCA9IFxoYm94e30lIGNvbnRlbnRzIGxpa2UgdW5udW1iZXJlZCwgYnV0IG5vIHRvYyBlbnRyeQorICAgICAgXGRlZlx0b2N0eXBle29taXR9JQorICAgIFxlbHNlXGlmeFx0ZW1wdHlwZVxZYXBwZW5kaXhrZXl3b3JkCisgICAgICBcc2V0Ym94MCA9IFxoYm94e1xwdXR3b3JkQXBwZW5kaXh7fSAjM1xlbnNwYWNlfSUKKyAgICAgIFxkZWZcdG9jdHlwZXthcHB9JQorICAgIFxlbHNlCisgICAgICBcc2V0Ym94MCA9IFxoYm94eyMzXGVuc3BhY2V9JQorICAgICAgXGRlZlx0b2N0eXBle251bWNoYXB9JQorICAgIFxmaVxmaVxmaQorICAgICUKKyAgICAlIFdyaXRlIHRoZSB0b2MgZW50cnkgZm9yIHRoaXMgY2hhcHRlci4gIE11c3QgY29tZSBiZWZvcmUgdGhlCisgICAgJSBcZG9ub2RlcmVmLCBiZWNhdXNlIHdlIGluY2x1ZGUgdGhlIGN1cnJlbnQgbm9kZSBuYW1lIGluIHRoZSB0b2MKKyAgICAlIGVudHJ5LCBhbmQgXGRvbm9kZXJlZiByZXNldHMgaXQgdG8gZW1wdHkuCisgICAgXHdyaXRldG9jZW50cnl7XHRvY3R5cGV9eyMxfXsjM30lCisgICAgJQorICAgICUgRm9yIHBkZnRleCwgd2UgaGF2ZSB0byB3cml0ZSBvdXQgdGhlIG5vZGUgZGVmaW5pdGlvbiAoYWthLCBtYWtlCisgICAgJSB0aGUgcGRmZGVzdCkgYWZ0ZXIgYW55IHBhZ2UgYnJlYWssIGJ1dCBiZWZvcmUgdGhlIGFjdHVhbCB0ZXh0IGhhcworICAgICUgYmVlbiB0eXBlc2V0LiAgSWYgdGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgcGRmIG91dGxpbmUgaXMgYWZ0ZXIgdGhlCisgICAgJSB0ZXh0LCB0aGVuIGp1bXBpbmcgZnJvbSB0aGUgb3V0bGluZSBtYXkgd2luZCB1cCB3aXRoIHRoZSB0ZXh0IG5vdAorICAgICUgYmVpbmcgdmlzaWJsZSwgZm9yIGluc3RhbmNlIHVuZGVyIGhpZ2ggbWFnbmlmaWNhdGlvbi4KKyAgICBcZG9ub2RlcmVmeyMyfSUKKyAgICAlCisgICAgJSBUeXBlc2V0IHRoZSBhY3R1YWwgaGVhZGluZy4KKyAgICBcbm9icmVhayAlIEF2b2lkIHBhZ2UgYnJlYWtzIGF0IHRoZSBpbnRlcmxpbmUgZ2x1ZS4KKyAgICBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMCBcdG9sZXJhbmNlPTUwMDAgXHBhcmluZGVudD0wcHQgXHB0ZXhyYWdnZWRyaWdodAorICAgICAgICAgIFxoYW5naW5kZW50PVx3ZDAgXGNlbnRlcnBhcmFtZXRlcnNtYXliZQorICAgICAgICAgIFx1bmhib3gwICMxXHBhcn0lCisgIH0lCisgIFxub2JyZWFrXGJpZ3NraXAgJSBubyBwYWdlIGJyZWFrIGFmdGVyIGEgY2hhcHRlciB0aXRsZQorICBcbm9icmVhaworfQorCislIEBjZW50ZXJjaGFwIC0tIGNlbnRlcmVkIGFuZCB1bm51bWJlcmVkLgorXGxldFxjZW50ZXJwYXJhbWV0ZXJzbWF5YmUgPSBccmVsYXgKK1xkZWZcY2VudGVycGFyYW1ldGVyc3slCisgIFxhZHZhbmNlXHJpZ2h0c2tpcCBieSAzXHJpZ2h0c2tpcAorICBcbGVmdHNraXAgPSBccmlnaHRza2lwCisgIFxwYXJmaWxsc2tpcCA9IDBwdAorfQorCisKKyUgSSBkb24ndCB0aGluayB0aGlzIGNoYXB0ZXIgc3R5bGUgaXMgc3VwcG9ydGVkIGFueSBtb3JlLCBzbyBJJ20gbm90CislIHVwZGF0aW5nIGl0IHdpdGggdGhlIG5ldyBub2RlcmVmIHN0dWZmLiAgV2UnbGwgc2VlLiAgLS1rYXJsLCAxMWF1ZzAzLgorJQorXGRlZlxzZXRjaGFwdGVyc3R5bGUgIzEge1xjc25hbWUgQ0hBUEYjMVxlbmRjc25hbWV9CislCitcZGVmXHVubmNoZm9wZW4gIzF7JQorXGNoYXBvZGRwYWdlIHtcY2hhcGZvbnRzIFx2Ym94e1xoeXBoZW5wZW5hbHR5PTEwMDAwXHRvbGVyYW5jZT01MDAwCisgICAgICAgICAgICAgICAgICAgICAgIFxwYXJpbmRlbnQ9MHB0XHB0ZXhyYWdnZWRyaWdodAorICAgICAgICAgICAgICAgICAgICAgICBccm1pc2JvbGQgIzFcaGZpbGx9fVxiaWdza2lwIFxwYXJcbm9icmVhaworfQorXGRlZlxjaGZvcGVuICMxIzJ7XGNoYXBvZGRwYWdlIHtcY2hhcGZvbnRzCitcdmJveCB0byAzaW57XHZmaWwgXGhib3ggdG9caHNpemV7XGhmaWwgIzJ9IFxoYm94IHRvXGhzaXple1xoZmlsICMxfSBcdmZpbH19JQorXHBhclxwZW5hbHR5IDUwMDAgJQorfQorXGRlZlxjZW50ZXJjaGZvcGVuICMxeyUKK1xjaGFwb2RkcGFnZSB7XGNoYXBmb250cyBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMFx0b2xlcmFuY2U9NTAwMAorICAgICAgICAgICAgICAgICAgICAgICBccGFyaW5kZW50PTBwdAorICAgICAgICAgICAgICAgICAgICAgICBcaGZpbGwge1xybWlzYm9sZCAjMX1caGZpbGx9fVxiaWdza2lwIFxwYXJcbm9icmVhaworfQorXGRlZlxDSEFQRm9wZW57JQorICBcZ2xvYmFsXGxldFxjaGFwbWFjcm89XGNoZm9wZW4KKyAgXGdsb2JhbFxsZXRcY2VudGVyY2hhcG1hY3JvPVxjZW50ZXJjaGZvcGVufQorCisKKyUgU2VjdGlvbiB0aXRsZXMuICBUaGVzZSBtYWNyb3MgY29tYmluZSB0aGUgc2VjdGlvbiBudW1iZXIgcGFydHMgYW5kCislIGNhbGwgdGhlIGdlbmVyaWMgXHNlY3Rpb25oZWFkaW5nIHRvIGRvIHRoZSBwcmludGluZy4KKyUKK1xuZXdza2lwXHNlY2hlYWRpbmdza2lwCitcZGVmXHNlY2hlYWRpbmdicmVha3tcZG9icmVhayBcc2VjaGVhZGluZ3NraXB7LTEwMDB9fQorCislIFN1YnNlY3Rpb24gdGl0bGVzLgorXG5ld3NraXBcc3Vic2VjaGVhZGluZ3NraXAKK1xkZWZcc3Vic2VjaGVhZGluZ2JyZWFre1xkb2JyZWFrIFxzdWJzZWNoZWFkaW5nc2tpcHstNTAwfX0KKworJSBTdWJzdWJzZWN0aW9uIHRpdGxlcy4KK1xkZWZcc3Vic3Vic2VjaGVhZGluZ3NraXB7XHN1YnNlY2hlYWRpbmdza2lwfQorXGRlZlxzdWJzdWJzZWNoZWFkaW5nYnJlYWt7XHN1YnNlY2hlYWRpbmdicmVha30KKworCislIFByaW50IGFueSBzaXplLCBhbnkgdHlwZSwgc2VjdGlvbiB0aXRsZS4KKyUKKyUgIzEgaXMgdGhlIHRleHQsICMyIGlzIHRoZSBzZWN0aW9uIGxldmVsIChzZWMvc3Vic2VjL3N1YnN1YnNlYyksICMzIGlzCislIHRoZSBzZWN0aW9uIHR5cGUgZm9yIHhyZWZzIChZbnVtYmVyZWQsIFlub3RoaW5nLCBZYXBwZW5kaXgpLCAjNCBpcyB0aGUKKyUgc2VjdGlvbiBudW1iZXIuCislCitcZGVmXHNlY2tleXdvcmR7c2VjfQorJQorXGRlZlxzZWN0aW9uaGVhZGluZyMxIzIjMyM0eyUKKyAgeyUKKyAgICAlIFN3aXRjaCB0byB0aGUgcmlnaHQgc2V0IG9mIGZvbnRzLgorICAgIFxjc25hbWUgIzJmb250c1xlbmRjc25hbWUgXHJtaXNib2xkCisgICAgJQorICAgIFxkZWZcc2VjdGlvbmxldmVseyMyfSUKKyAgICBcZGVmXHRlbXB0eXBleyMzfSUKKyAgICAlCisgICAgJSBJbnNlcnQgZmlyc3QgbWFyayBiZWZvcmUgdGhlIGhlYWRpbmcgYnJlYWsgKHNlZSBub3RlcyBmb3IgXGRvbWFyaykuCisgICAgXGxldFxwcmV2c2VjdGlvbmRlZnM9XGxhc3RzZWN0aW9uZGVmcworICAgIFxpZnhcdGVtcHR5cGVcWW5vdGhpbmdrZXl3b3JkCisgICAgICBcaWZ4XHNlY3Rpb25sZXZlbFxzZWNrZXl3b3JkCisgICAgICAgIFxnZGVmXGxhc3RzZWN0aW9uZGVmc3tcZ2RlZlx0aGlzc2VjdGlvbm5hbWV7IzF9XGdkZWZcdGhpc3NlY3Rpb25udW17fSUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxnZGVmXHRoaXNzZWN0aW9ue1x0aGlzc2VjdGlvbm5hbWV9fSUKKyAgICAgIFxmaQorICAgIFxlbHNlXGlmeFx0ZW1wdHlwZVxZb21pdGZyb210b2NrZXl3b3JkCisgICAgICAlIERvbid0IHJlZGVmaW5lIFx0aGlzc2VjdGlvbi4KKyAgICBcZWxzZVxpZnhcdGVtcHR5cGVcWWFwcGVuZGl4a2V5d29yZAorICAgICAgXGlmeFxzZWN0aW9ubGV2ZWxcc2Vja2V5d29yZAorICAgICAgICBcdG9rczA9eyMxfSUKKyAgICAgICAgXHhkZWZcbGFzdHNlY3Rpb25kZWZzeyUKKyAgICAgICAgICBcZ2RlZlxub2V4cGFuZFx0aGlzc2VjdGlvbm5hbWV7XHRoZVx0b2tzMH0lCisgICAgICAgICAgXGdkZWZcbm9leHBhbmRcdGhpc3NlY3Rpb25udW17IzR9JQorICAgICAgICAgICUgXG5vZXhwYW5kXHB1dHdvcmRTZWN0aW9uIGF2b2lkcyBleHBhbmRpbmcgaW5kaWdlc3RpYmxlCisgICAgICAgICAgJSBjb21tYW5kcyBpbiBzb21lIG9mIHRoZSB0cmFuc2xhdGlvbnMuCisgICAgICAgICAgXGdkZWZcbm9leHBhbmRcdGhpc3NlY3Rpb257XG5vZXhwYW5kXHB1dHdvcmRTZWN0aW9ue30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbm9leHBhbmRcdGhpc3NlY3Rpb25udW06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5vZXhwYW5kXHRoaXNzZWN0aW9ubmFtZX0lCisgICAgICAgIH0lCisgICAgICBcZmkKKyAgICBcZWxzZQorICAgICAgXGlmeFxzZWN0aW9ubGV2ZWxcc2Vja2V5d29yZAorICAgICAgICBcdG9rczA9eyMxfSUKKyAgICAgICAgXHhkZWZcbGFzdHNlY3Rpb25kZWZzeyUKKyAgICAgICAgICBcZ2RlZlxub2V4cGFuZFx0aGlzc2VjdGlvbm5hbWV7XHRoZVx0b2tzMH0lCisgICAgICAgICAgXGdkZWZcbm9leHBhbmRcdGhpc3NlY3Rpb25udW17IzR9JQorICAgICAgICAgICUgXG5vZXhwYW5kXHB1dHdvcmRTZWN0aW9uIGF2b2lkcyBleHBhbmRpbmcgaW5kaWdlc3RpYmxlCisgICAgICAgICAgJSBjb21tYW5kcyBpbiBzb21lIG9mIHRoZSB0cmFuc2xhdGlvbnMuCisgICAgICAgICAgXGdkZWZcbm9leHBhbmRcdGhpc3NlY3Rpb257XG5vZXhwYW5kXHB1dHdvcmRTZWN0aW9ue30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbm9leHBhbmRcdGhpc3NlY3Rpb25udW06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5vZXhwYW5kXHRoaXNzZWN0aW9ubmFtZX0lCisgICAgICAgIH0lCisgICAgICBcZmkKKyAgICBcZmlcZmlcZmkKKyAgICAlCisgICAgJSBHbyBpbnRvIHZlcnRpY2FsIG1vZGUuICBVc3VhbGx5IHdlJ2xsIGFscmVhZHkgYmUgdGhlcmUsIGJ1dCB3ZQorICAgICUgZG9uJ3Qgd2FudCB0aGUgZm9sbG93aW5nIHdoYXRzaXQgdG8gZW5kIHVwIGluIGEgcHJlY2VkaW5nIHBhcmFncmFwaAorICAgICUgaWYgdGhlIGRvY3VtZW50IGRpZG4ndCBoYXBwZW4gdG8gaGF2ZSBhIGJsYW5rIGxpbmUuCisgICAgXHBhcgorICAgICUKKyAgICAlIE91dHB1dCB0aGUgbWFyay4gIFBhc3MgaXQgdGhyb3VnaCBcc2FmZXdoYXRzaXQsIHRvIHRha2UgY2FyZSBvZgorICAgICUgdGhlIHByZWNlZGluZyBzcGFjZS4KKyAgICBcc2FmZXdoYXRzaXRcZG9tYXJrCisgICAgJQorICAgICUgSW5zZXJ0IHNwYWNlIGFib3ZlIHRoZSBoZWFkaW5nLgorICAgIFxjc25hbWUgIzJoZWFkaW5nYnJlYWtcZW5kY3NuYW1lCisgICAgJQorICAgICUgTm93IHRoZSBzZWNvbmQgbWFyaywgYWZ0ZXIgdGhlIGhlYWRpbmcgYnJlYWsuICBObyBicmVhayBwb2ludHMKKyAgICAlIGJldHdlZW4gaGVyZSBhbmQgdGhlIGhlYWRpbmcuCisgICAgXGxldFxwcmV2c2VjdGlvbmRlZnM9XGxhc3RzZWN0aW9uZGVmcworICAgIFxkb21hcmsKKyAgICAlCisgICAgJSBPbmx5IGluc2VydCB0aGUgc3BhY2UgYWZ0ZXIgdGhlIG51bWJlciBpZiB3ZSBoYXZlIGEgc2VjdGlvbiBudW1iZXIuCisgICAgXGlmeFx0ZW1wdHlwZVxZbm90aGluZ2tleXdvcmQKKyAgICAgIFxzZXRib3gwID0gXGhib3h7fSUKKyAgICAgIFxkZWZcdG9jdHlwZXt1bm59JQorICAgICAgXGdkZWZcbGFzdHNlY3Rpb257IzF9JQorICAgIFxlbHNlXGlmeFx0ZW1wdHlwZVxZb21pdGZyb210b2NrZXl3b3JkCisgICAgICAlIGZvciBAaGVhZGluZ3MgLS0gbm8gc2VjdGlvbiBudW1iZXIsIGRvbid0IGluY2x1ZGUgaW4gdG9jLAorICAgICAgJSBhbmQgZG9uJ3QgcmVkZWZpbmUgXGxhc3RzZWN0aW9uLgorICAgICAgXHNldGJveDAgPSBcaGJveHt9JQorICAgICAgXGRlZlx0b2N0eXBle29taXR9JQorICAgICAgXGxldFxzZWN0aW9ubGV2ZWw9XGVtcHR5CisgICAgXGVsc2VcaWZ4XHRlbXB0eXBlXFlhcHBlbmRpeGtleXdvcmQKKyAgICAgIFxzZXRib3gwID0gXGhib3h7IzRcZW5zcGFjZX0lCisgICAgICBcZGVmXHRvY3R5cGV7YXBwfSUKKyAgICAgIFxnZGVmXGxhc3RzZWN0aW9ueyMxfSUKKyAgICBcZWxzZQorICAgICAgXHNldGJveDAgPSBcaGJveHsjNFxlbnNwYWNlfSUKKyAgICAgIFxkZWZcdG9jdHlwZXtudW19JQorICAgICAgXGdkZWZcbGFzdHNlY3Rpb257IzF9JQorICAgIFxmaVxmaVxmaQorICAgICUKKyAgICAlIFdyaXRlIHRoZSB0b2MgZW50cnkgKGJlZm9yZSBcZG9ub2RlcmVmKS4gIFNlZSBjb21tZW50cyBpbiBcY2hhcG1hY3JvLgorICAgIFx3cml0ZXRvY2VudHJ5e1x0b2N0eXBlXHNlY3Rpb25sZXZlbH17IzF9eyM0fSUKKyAgICAlCisgICAgJSBXcml0ZSB0aGUgbm9kZSByZWZlcmVuY2UgKD0gcGRmIGRlc3RpbmF0aW9uIGZvciBwZGZ0ZXgpLgorICAgICUgQWdhaW4sIHNlZSBjb21tZW50cyBpbiBcY2hhcG1hY3JvLgorICAgIFxkb25vZGVyZWZ7IzN9JQorICAgICUKKyAgICAlIEludGVybGluZSBnbHVlIHdpbGwgYmUgaW5zZXJ0ZWQgd2hlbiB0aGUgdmJveCBpcyBjb21wbGV0ZWQuCisgICAgJSBUaGF0IGdsdWUgd2lsbCBiZSBhIHZhbGlkIGJyZWFrcG9pbnQgZm9yIHRoZSBwYWdlLCBzaW5jZSBpdCdsbCBiZQorICAgICUgcHJlY2VkZWQgYnkgYSB3aGF0c2l0ICh1c3VhbGx5IGZyb20gdGhlIFxkb25vZGVyZWYsIG9yIGZyb20gdGhlCisgICAgJSBcd3JpdGV0b2NlbnRyeSBpZiB0aGVyZSB3YXMgbm8gbm9kZSkuICBXZSBkb24ndCB3YW50IHRvIGFsbG93IHRoYXQKKyAgICAlIGJyZWFrLCBzaW5jZSB0aGVuIHRoZSB3aGF0c2l0cyBjb3VsZCBlbmQgdXAgb24gcGFnZSBuIHdoaWxlIHRoZQorICAgICUgc2VjdGlvbiBpcyBvbiBwYWdlIG4rMSwgdGh1cyB0b2MvZXRjLiBhcmUgd3JvbmcuICBEZWJpYW4gYnVnIDI3NjAwMC4KKyAgICBcbm9icmVhaworICAgICUKKyAgICAlIE91dHB1dCB0aGUgYWN0dWFsIHNlY3Rpb24gaGVhZGluZy4KKyAgICBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMCBcdG9sZXJhbmNlPTUwMDAgXHBhcmluZGVudD0wcHQgXHB0ZXhyYWdnZWRyaWdodAorICAgICAgICAgIFxoYW5naW5kZW50PVx3ZDAgICUgemVybyBpZiBubyBzZWN0aW9uIG51bWJlcgorICAgICAgICAgIFx1bmhib3gwICMxfSUKKyAgfSUKKyAgJSBBZGQgZXh0cmEgc3BhY2UgYWZ0ZXIgdGhlIGhlYWRpbmcgLS0gaGFsZiBvZiB3aGF0ZXZlciBjYW1lIGFib3ZlIGl0LgorICAlIERvbid0IGFsbG93IHN0cmV0Y2gsIHRob3VnaC4KKyAgXGtlcm4gLjUgXGNzbmFtZSAjMmhlYWRpbmdza2lwXGVuZGNzbmFtZQorICAlCisgICUgRG8gbm90IGxldCB0aGUga2VybiBiZSBhIHBvdGVudGlhbCBicmVha3BvaW50LCBhcyBpdCB3b3VsZCBiZSBpZiBpdAorICAlIHdhcyBmb2xsb3dlZCBieSBnbHVlLgorICBcbm9icmVhaworICAlCisgICUgV2UnbGwgYWxtb3N0IGNlcnRhaW5seSBzdGFydCBhIHBhcmFncmFwaCBuZXh0LCBzbyBkb24ndCBsZXQgdGhhdAorICAlIGdsdWUgYWNjdW11bGF0ZS4gIChOb3QgYSBicmVha3BvaW50IGJlY2F1c2UgaXQncyBwcmVjZWRlZCBieSBhCisgICUgZGlzY2FyZGFibGUgaXRlbS4pCisgIFx2c2tpcC1ccGFyc2tpcAorICAlCisgICUgVGhpcyBpcyBwdXJlbHkgc28gdGhlIGxhc3QgaXRlbSBvbiB0aGUgbGlzdCBpcyBhIGtub3duIFxwZW5hbHR5ID4KKyAgJSAxMDAwMC4gIFRoaXMgaXMgc28gXHN0YXJ0ZGVmdW4gY2FuIGF2b2lkIGFsbG93aW5nIGJyZWFrcG9pbnRzIGFmdGVyCisgICUgc2VjdGlvbiBoZWFkaW5ncy4gIE90aGVyd2lzZSwgaXQgd291bGQgaW5zZXJ0IGEgdmFsaWQgYnJlYWtwb2ludCBiZXR3ZWVuOgorICAlCisgICUgICBAc2VjdGlvbiBzZWMtd2hhdGV2ZXIKKyAgJSAgIEBkZWZmbiBkZWYtd2hhdGV2ZXIKKyAgXHBlbmFsdHkgMTAwMDEKK30KKworCitcbWVzc2FnZXt0b2MsfQorJSBUYWJsZSBvZiBjb250ZW50cy4KK1xuZXd3cml0ZVx0b2NmaWxlCisKKyUgV3JpdGUgYW4gZW50cnkgdG8gdGhlIHRvYyBmaWxlLCBvcGVuaW5nIGl0IGlmIG5lY2Vzc2FyeS4KKyUgQ2FsbGVkIGZyb20gQGNoYXB0ZXIsIGV0Yy4KKyUKKyUgRXhhbXBsZSB1c2FnZTogXHdyaXRldG9jZW50cnl7c2VjfXtTZWN0aW9uIE5hbWV9e1x0aGVcY2hhcG5vLlx0aGVcc2Vjbm99CislIFdlIGFwcGVuZCB0aGUgY3VycmVudCBub2RlIG5hbWUgKGlmIGFueSkgYW5kIHBhZ2UgbnVtYmVyIGFzIGFkZGl0aW9uYWwKKyUgYXJndW1lbnRzIGZvciB0aGUgXHtjaGFwLHNlYywuLi59ZW50cnkgbWFjcm9zIHdoaWNoIHdpbGwgZXZlbnR1YWxseQorJSByZWFkIHRoaXMuICBUaGUgbm9kZSBuYW1lIGlzIHVzZWQgaW4gdGhlIHBkZiBvdXRsaW5lcyBhcyB0aGUKKyUgZGVzdGluYXRpb24gdG8ganVtcCB0by4KKyUKKyUgV2Ugb3BlbiB0aGUgLnRvYyBmaWxlIGZvciB3cml0aW5nIGhlcmUgaW5zdGVhZCBvZiBhdCBAc2V0ZmlsZW5hbWUgKG9yCislIGFueSBvdGhlciBmaXhlZCB0aW1lKSBzbyB0aGF0IEBjb250ZW50cyBjYW4gYmUgYW55d2hlcmUgaW4gdGhlIGRvY3VtZW50LgorJSBCdXQgaWYgIzEgaXMgYG9taXQnLCB0aGVuIHdlIGRvbid0IGRvIGFueXRoaW5nLiAgVGhpcyBpcyB1c2VkIGZvciB0aGUKKyUgdGFibGUgb2YgY29udGVudHMgY2hhcHRlciBvcGVuaW5ncyB0aGVtc2VsdmVzLgorJQorXG5ld2lmXGlmdG9jZmlsZW9wZW5lZAorXGRlZlxvbWl0a2V5d29yZHtvbWl0fSUKKyUKK1xkZWZcd3JpdGV0b2NlbnRyeSMxIzIjM3slCisgIFxlZGVmXHdyaXRldG9jdHlwZXsjMX0lCisgIFxpZnhcd3JpdGV0b2N0eXBlXG9taXRrZXl3b3JkIFxlbHNlCisgICAgXGlmdG9jZmlsZW9wZW5lZFxlbHNlCisgICAgICBcaW1tZWRpYXRlXG9wZW5vdXRcdG9jZmlsZSA9IFxqb2JuYW1lLnRvYworICAgICAgXGdsb2JhbFx0b2NmaWxlb3BlbmVkdHJ1ZQorICAgIFxmaQorICAgICUKKyAgICBcaWZsaW5rcworICAgICAge1xhdGR1bW1pZXMKKyAgICAgICBcZWRlZlx0ZW1weyUKKyAgICAgICAgIFx3cml0ZVx0b2NmaWxle0AjMWVudHJ5eyMyfXsjM317XGxhc3Rub2RlfXtcbm9leHBhbmRcZm9saW99fX0lCisgICAgICAgXHRlbXAKKyAgICAgIH0lCisgICAgXGZpCisgIFxmaQorICAlCisgICUgVGVsbCBcc2hpcG91dCB0byBjcmVhdGUgYSBwZGYgZGVzdGluYXRpb24gb24gZWFjaCBwYWdlLCBpZiB3ZSdyZQorICAlIHdyaXRpbmcgcGRmLiAgVGhlc2UgYXJlIHVzZWQgaW4gdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgV2UgY2FuJ3QKKyAgJSBqdXN0IHdyaXRlIG9uZSBvbiBldmVyeSBwYWdlIGJlY2F1c2UgdGhlIHRpdGxlIHBhZ2VzIGFyZSBudW1iZXJlZAorICAlIDEgYW5kIDIgKHRoZSBwYWdlIG51bWJlcnMgYXJlbid0IHByaW50ZWQpLCBhbmQgc28gYXJlIHRoZSBmaXJzdAorICAlIHR3byBwYWdlcyBvZiB0aGUgZG9jdW1lbnQuICBUaHVzLCB3ZSdkIGhhdmUgdHdvIGRlc3RpbmF0aW9ucyBuYW1lZAorICAlIGAxJywgYW5kIHR3byBuYW1lZCBgMicuCisgIFxpZnBkZiBcZ2xvYmFsXHBkZm1ha2VwYWdlZGVzdHRydWUgXGZpCit9CisKKworJSBUaGVzZSBjaGFyYWN0ZXJzIGRvIG5vdCBwcmludCBwcm9wZXJseSBpbiB0aGUgQ29tcHV0ZXIgTW9kZXJuIHJvbWFuCislIGZvbnRzLCBzbyB3ZSBtdXN0IHRha2Ugc3BlY2lhbCBjYXJlLiAgVGhpcyBpcyBtb3JlIG9yIGxlc3MgcmVkdW5kYW50CislIHdpdGggdGhlIFRleGluZm8gaW5wdXQgZm9ybWF0IHNldHVwIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLgorJQorXGRlZlxhY3RpdmVjYXRjb2Rlc3slCisgIFxjYXRjb2RlYFwiPVxhY3RpdmUKKyAgXGNhdGNvZGVgXCQ9XGFjdGl2ZQorICBcY2F0Y29kZWBcPD1cYWN0aXZlCisgIFxjYXRjb2RlYFw+PVxhY3RpdmUKKyAgXGNhdGNvZGVgXFw9XGFjdGl2ZQorICBcY2F0Y29kZWBcXj1cYWN0aXZlCisgIFxjYXRjb2RlYFxfPVxhY3RpdmUKKyAgXGNhdGNvZGVgXHw9XGFjdGl2ZQorICBcY2F0Y29kZWBcfj1cYWN0aXZlCit9CisKKworJSBSZWFkIHRoZSB0b2MgZmlsZSwgd2hpY2ggaXMgZXNzZW50aWFsbHkgVGV4aW5mbyBpbnB1dC4KK1xkZWZccmVhZHRvY2ZpbGV7JQorICBcc2V0dXBkYXRhZmlsZQorICBcYWN0aXZlY2F0Y29kZXMKKyAgXGlucHV0IFx0b2NyZWFkZmlsZW5hbWUKK30KKworXG5ld3NraXBcY29udGVudHNyaWdodG1hcmdpbiBcY29udGVudHNyaWdodG1hcmdpbj0xaW4KK1xuZXdjb3VudFxzYXZlcGFnZW5vCitcbmV3Y291bnRcbGFzdG5lZ2F0aXZlcGFnZW5vIFxsYXN0bmVnYXRpdmVwYWdlbm8gPSAtMQorCislIFByZXBhcmUgdG8gcmVhZCB3aGF0IHdlJ3ZlIHdyaXR0ZW4gdG8gXHRvY2ZpbGUuCislCitcZGVmXHN0YXJ0Y29udGVudHMjMXslCisgICUgSWYgQHNldGNoYXB0ZXJuZXdwYWdlIG9uLCBhbmQgQGhlYWRpbmdzIGRvdWJsZSwgdGhlIGNvbnRlbnRzIHNob3VsZAorICAlIHN0YXJ0IG9uIGFuIG9kZCBwYWdlLCB1bmxpa2UgY2hhcHRlcnMuICBUaHVzLCB3ZSBtYWludGFpbgorICAlIFxjb250ZW50c2FsaWdubWFjcm8gaW4gcGFyYWxsZWwgd2l0aCBccGFnZWFsaWdubWFjcm8uCisgICUgRnJvbTogVG9yYmpvcm4gR3Jhbmx1bmQgPHRlZ2VAbWF0ZW1hdGlrLnN1LnNlPgorICBcY29udGVudHNhbGlnbm1hY3JvCisgIFxpbW1lZGlhdGVcY2xvc2VvdXRcdG9jZmlsZQorICAlCisgICUgRG9uJ3QgbmVlZCB0byBwdXQgYENvbnRlbnRzJyBvciBgU2hvcnQgQ29udGVudHMnIGluIHRoZSBoZWFkbGluZS4KKyAgJSBJdCBpcyBhYnVuZGFudGx5IGNsZWFyIHdoYXQgdGhleSBhcmUuCisgIFxjaGFwbWFjcm97IzF9e1lvbWl0ZnJvbXRvY317fSUKKyAgJQorICBcc2F2ZXBhZ2VubyA9IFxwYWdlbm8KKyAgXGJlZ2luZ3JvdXAgICAgICAgICAgICAgICAgICAlIFNldCB1cCB0byBoYW5kbGUgY29udGVudHMgZmlsZXMgcHJvcGVybHkuCisgICAgXHJhZ2dlZGJvdHRvbSAgICAgICAgICAgICAgJSBXb3JyeSBtb3JlIGFib3V0IGJyZWFrcG9pbnRzIHRoYW4gdGhlIGJvdHRvbS4KKyAgICBcYWR2YW5jZVxoc2l6ZSBieSAtXGNvbnRlbnRzcmlnaHRtYXJnaW4gJSBEb24ndCB1c2UgdGhlIGZ1bGwgbGluZSBsZW5ndGguCisgICAgJQorICAgICUgUm9tYW4gbnVtZXJhbHMgZm9yIHBhZ2UgbnVtYmVycy4KKyAgICBcaWZudW0gXHBhZ2Vubz4wIFxnbG9iYWxccGFnZW5vID0gXGxhc3RuZWdhdGl2ZXBhZ2VubyBcZmkKK30KKworJSByZWRlZmluZWQgZm9yIHRoZSB0d28tdm9sdW1lIGxpc3ByZWYuICBXZSBhbHdheXMgb3V0cHV0IG9uCislIFxqb2JuYW1lLnRvYyBldmVuIGlmIHRoaXMgaXMgcmVkZWZpbmVkLgorJQorXGRlZlx0b2NyZWFkZmlsZW5hbWV7XGpvYm5hbWUudG9jfQorCislIE5vcm1hbCAobG9uZykgdG9jLgorJQorXGRlZlxjb250ZW50c3slCisgIFxzdGFydGNvbnRlbnRze1xwdXR3b3JkVE9DfSUKKyAgICBcb3BlbmluIDEgXHRvY3JlYWRmaWxlbmFtZVxzcGFjZQorICAgIFxpZmVvZiAxIFxlbHNlCisgICAgICBccmVhZHRvY2ZpbGUKKyAgICBcZmkKKyAgICBcdmZpbGwgXGVqZWN0CisgICAgXGNvbnRlbnRzYWxpZ25tYWNybyAlIGluIGNhc2UgQHNldGNoYXB0ZXJuZXdwYWdlIG9kZCBpcyBpbiBlZmZlY3QKKyAgICBcaWZlb2YgMSBcZWxzZQorICAgICAgXHBkZm1ha2VvdXRsaW5lcworICAgIFxmaQorICAgIFxjbG9zZWluIDEKKyAgXGVuZGdyb3VwCisgIFxsYXN0bmVnYXRpdmVwYWdlbm8gPSBccGFnZW5vCisgIFxnbG9iYWxccGFnZW5vID0gXHNhdmVwYWdlbm8KK30KKworJSBBbmQganVzdCB0aGUgY2hhcHRlcnMuCitcZGVmXHN1bW1hcnljb250ZW50c3slCisgIFxzdGFydGNvbnRlbnRze1xwdXR3b3JkU2hvcnRUT0N9JQorICAgICUKKyAgICBcbGV0XG51bWNoYXBlbnRyeSA9IFxzaG9ydGNoYXBlbnRyeQorICAgIFxsZXRcYXBwZW50cnkgPSBcc2hvcnRjaGFwZW50cnkKKyAgICBcbGV0XHVubmNoYXBlbnRyeSA9IFxzaG9ydHVubmNoYXBlbnRyeQorICAgICUgV2Ugd2FudCBhIHRydWUgcm9tYW4gaGVyZSBmb3IgdGhlIHBhZ2UgbnVtYmVycy4KKyAgICBcc2VjZm9udHMKKyAgICBcbGV0XHJtPVxzaG9ydGNvbnRybSBcbGV0XGJmPVxzaG9ydGNvbnRiZgorICAgIFxsZXRcc2w9XHNob3J0Y29udHNsIFxsZXRcdHQ9XHNob3J0Y29udHR0CisgICAgXHJtCisgICAgXGh5cGhlbnBlbmFsdHkgPSAxMDAwMAorICAgIFxhZHZhbmNlXGJhc2VsaW5lc2tpcCBieSAxcHQgJSBPcGVuIGl0IHVwIGEgbGl0dGxlLgorICAgIFxkZWZcbnVtc2VjZW50cnkjIzEjIzIjIzMjIzR7fQorICAgIFxsZXRcYXBwc2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcbGV0XHVubnNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXGxldFxudW1zdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxsZXRcYXBwc3Vic2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcbGV0XHVubnN1YnNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXGxldFxudW1zdWJzdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxsZXRcYXBwc3Vic3Vic2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcbGV0XHVubnN1YnN1YnNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXG9wZW5pbiAxIFx0b2NyZWFkZmlsZW5hbWVcc3BhY2UKKyAgICBcaWZlb2YgMSBcZWxzZQorICAgICAgXHJlYWR0b2NmaWxlCisgICAgXGZpCisgICAgXGNsb3NlaW4gMQorICAgIFx2ZmlsbCBcZWplY3QKKyAgICBcY29udGVudHNhbGlnbm1hY3JvICUgaW4gY2FzZSBAc2V0Y2hhcHRlcm5ld3BhZ2Ugb2RkIGlzIGluIGVmZmVjdAorICBcZW5kZ3JvdXAKKyAgXGxhc3RuZWdhdGl2ZXBhZ2VubyA9IFxwYWdlbm8KKyAgXGdsb2JhbFxwYWdlbm8gPSBcc2F2ZXBhZ2VubworfQorXGxldFxzaG9ydGNvbnRlbnRzID0gXHN1bW1hcnljb250ZW50cworCislIFR5cGVzZXQgdGhlIGxhYmVsIGZvciBhIGNoYXB0ZXIgb3IgYXBwZW5kaXggZm9yIHRoZSBzaG9ydCBjb250ZW50cy4KKyUgVGhlIGFyZyBpcywgZS5nLiwgYEEnIGZvciBhbiBhcHBlbmRpeCwgb3IgYDMnIGZvciBhIGNoYXB0ZXIuCislCitcZGVmXHNob3J0Y2hhcGxhYmVsIzF7JQorICAlIFRoaXMgc3BhY2Ugc2hvdWxkIGJlIGVub3VnaCwgc2luY2UgYSBzaW5nbGUgbnVtYmVyIGlzIC41ZW0sIGFuZCB0aGUKKyAgJSB3aWRlc3QgbGV0dGVyIChNKSBpcyAxZW0sIGF0IGxlYXN0IGluIHRoZSBDb21wdXRlciBNb2Rlcm4gZm9udHMuCisgICUgQnV0IHVzZSBcaHNzIGp1c3QgaW4gY2FzZS4KKyAgJSAoVGhpcyBzcGFjZSBkb2Vzbid0IGluY2x1ZGUgdGhlIGV4dHJhIHNwYWNlIHRoYXQgZ2V0cyBhZGRlZCBhZnRlcgorICAlIHRoZSBsYWJlbDsgdGhhdCBnZXRzIHB1dCBpbiBieSBcc2hvcnRjaGFwZW50cnkgYWJvdmUuKQorICAlCisgICUgV2UnZCBsaWtlIHRvIHJpZ2h0LWp1c3RpZnkgY2hhcHRlciBudW1iZXJzLCBidXQgdGhhdCBsb29rcyBzdHJhbmdlCisgICUgd2l0aCBhcHBlbmRpeCBsZXR0ZXJzLiAgQW5kIHJpZ2h0LWp1c3RpZnlpbmcgbnVtYmVycyBhbmQKKyAgJSBsZWZ0LWp1c3RpZnlpbmcgbGV0dGVycyBsb29rcyBzdHJhbmdlIHdoZW4gdGhlcmUgaXMgbGVzcyB0aGFuIDEwCisgICUgY2hhcHRlcnMuICBIYXZlIHRvIHJlYWQgdGhlIHdob2xlIHRvYyBvbmNlIHRvIGtub3cgaG93IG1hbnkgY2hhcHRlcnMKKyAgJSB0aGVyZSBhcmUgYmVmb3JlIGRlY2lkaW5nIC4uLgorICBcaGJveCB0byAxZW17IzFcaHNzfSUKK30KKworJSBUaGVzZSBtYWNyb3MgZ2VuZXJhdGUgaW5kaXZpZHVhbCBlbnRyaWVzIGluIHRoZSB0YWJsZSBvZiBjb250ZW50cy4KKyUgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjaGFwdGVyIG9yIHNlY3Rpb24gbmFtZS4KKyUgVGhlIGxhc3QgYXJndW1lbnQgaXMgdGhlIHBhZ2UgbnVtYmVyLgorJSBUaGUgYXJndW1lbnRzIGluIGJldHdlZW4gYXJlIHRoZSBjaGFwdGVyIG51bWJlciwgc2VjdGlvbiBudW1iZXIsIC4uLgorCislIENoYXB0ZXJzLCBpbiB0aGUgbWFpbiBjb250ZW50cy4KK1xkZWZcbnVtY2hhcGVudHJ5IzEjMiMzIzR7XGRvY2hhcGVudHJ5eyMyXGxhYmVsc3BhY2UjMX17IzR9fQorJQorJSBDaGFwdGVycywgaW4gdGhlIHNob3J0IHRvYy4KKyUgU2VlIGNvbW1lbnRzIGluIFxkb2NoYXBlbnRyeSByZSB2Ym94IGFuZCByZWxhdGVkIHNldHRpbmdzLgorXGRlZlxzaG9ydGNoYXBlbnRyeSMxIzIjMyM0eyUKKyAgXHRvY2VudHJ5e1xzaG9ydGNoYXBsYWJlbHsjMn1cbGFiZWxzcGFjZSAjMX17XGRvc2hvcnRwYWdlbm9cYmdyb3VwIzRcZWdyb3VwfSUKK30KKworJSBBcHBlbmRpY2VzLCBpbiB0aGUgbWFpbiBjb250ZW50cy4KKyUgTmVlZCB0aGUgd29yZCBBcHBlbmRpeCwgYW5kIGEgZml4ZWQtc2l6ZSBib3guCislCitcZGVmXGFwcGVuZGl4Ym94IzF7JQorICAlIFdlIHVzZSBNIHNpbmNlIGl0J3MgcHJvYmFibHkgdGhlIHdpZGVzdCBsZXR0ZXIuCisgIFxzZXRib3gwID0gXGhib3h7XHB1dHdvcmRBcHBlbmRpeHt9IE19JQorICBcaGJveCB0byBcd2Qwe1xwdXR3b3JkQXBwZW5kaXh7fSAjMVxoc3N9fQorJQorXGRlZlxhcHBlbnRyeSMxIzIjMyM0e1xkb2NoYXBlbnRyeXtcYXBwZW5kaXhib3h7IzJ9XGxhYmVsc3BhY2UjMX17IzR9fQorCislIFVubnVtYmVyZWQgY2hhcHRlcnMuCitcZGVmXHVubmNoYXBlbnRyeSMxIzIjMyM0e1xkb2NoYXBlbnRyeXsjMX17IzR9fQorXGRlZlxzaG9ydHVubmNoYXBlbnRyeSMxIzIjMyM0e1x0b2NlbnRyeXsjMX17XGRvc2hvcnRwYWdlbm9cYmdyb3VwIzRcZWdyb3VwfX0KKworJSBTZWN0aW9ucy4KK1xkZWZcbnVtc2VjZW50cnkjMSMyIzMjNHtcZG9zZWNlbnRyeXsjMlxsYWJlbHNwYWNlIzF9eyM0fX0KK1xsZXRcYXBwc2VjZW50cnk9XG51bXNlY2VudHJ5CitcZGVmXHVubnNlY2VudHJ5IzEjMiMzIzR7XGRvc2VjZW50cnl7IzF9eyM0fX0KKworJSBTdWJzZWN0aW9ucy4KK1xkZWZcbnVtc3Vic2VjZW50cnkjMSMyIzMjNHtcZG9zdWJzZWNlbnRyeXsjMlxsYWJlbHNwYWNlIzF9eyM0fX0KK1xsZXRcYXBwc3Vic2VjZW50cnk9XG51bXN1YnNlY2VudHJ5CitcZGVmXHVubnN1YnNlY2VudHJ5IzEjMiMzIzR7XGRvc3Vic2VjZW50cnl7IzF9eyM0fX0KKworJSBBbmQgc3Vic3Vic2VjdGlvbnMuCitcZGVmXG51bXN1YnN1YnNlY2VudHJ5IzEjMiMzIzR7XGRvc3Vic3Vic2VjZW50cnl7IzJcbGFiZWxzcGFjZSMxfXsjNH19CitcbGV0XGFwcHN1YnN1YnNlY2VudHJ5PVxudW1zdWJzdWJzZWNlbnRyeQorXGRlZlx1bm5zdWJzdWJzZWNlbnRyeSMxIzIjMyM0e1xkb3N1YnN1YnNlY2VudHJ5eyMxfXsjNH19CisKKyUgVGhpcyBwYXJhbWV0ZXIgY29udHJvbHMgdGhlIGluZGVudGF0aW9uIG9mIHRoZSB2YXJpb3VzIGxldmVscy4KKyUgU2FtZSBhcyBcZGVmYXVsdHBhcmluZGVudC4KK1xuZXdkaW1lblx0b2NpbmRlbnQgXHRvY2luZGVudCA9IDE1cHQKKworJSBOb3cgZm9yIHRoZSBhY3R1YWwgdHlwZXNldHRpbmcuIEluIGFsbCB0aGVzZSwgIzEgaXMgdGhlIHRleHQgYW5kICMyIGlzIHRoZQorJSBwYWdlIG51bWJlci4KKyUKKyUgSWYgdGhlIHRvYyBoYXMgdG8gYmUgYnJva2VuIG92ZXIgcGFnZXMsIHdlIHdhbnQgaXQgdG8gYmUgYXQgY2hhcHRlcnMKKyUgaWYgYXQgYWxsIHBvc3NpYmxlOyBoZW5jZSB0aGUgXHBlbmFsdHkuCitcZGVmXGRvY2hhcGVudHJ5IzEjMnslCisgICBccGVuYWx0eS0zMDAgXHZza2lwMVxiYXNlbGluZXNraXAgcGx1cy4zM1xiYXNlbGluZXNraXAgbWludXMuMjVcYmFzZWxpbmVza2lwCisgICBcYmVnaW5ncm91cAorICAgICBcY2hhcGVudHJ5Zm9udHMKKyAgICAgXHRvY2VudHJ5eyMxfXtcZG9wYWdlbm9cYmdyb3VwIzJcZWdyb3VwfSUKKyAgIFxlbmRncm91cAorICAgXG5vYnJlYWtcdnNraXAgLjI1XGJhc2VsaW5lc2tpcCBwbHVzLjFcYmFzZWxpbmVza2lwCit9CisKK1xkZWZcZG9zZWNlbnRyeSMxIzJ7XGJlZ2luZ3JvdXAKKyAgXHNlY2VudHJ5Zm9udHMgXGxlZnRza2lwPVx0b2NpbmRlbnQKKyAgXHRvY2VudHJ5eyMxfXtcZG9wYWdlbm9cYmdyb3VwIzJcZWdyb3VwfSUKK1xlbmRncm91cH0KKworXGRlZlxkb3N1YnNlY2VudHJ5IzEjMntcYmVnaW5ncm91cAorICBcc3Vic2VjZW50cnlmb250cyBcbGVmdHNraXA9Mlx0b2NpbmRlbnQKKyAgXHRvY2VudHJ5eyMxfXtcZG9wYWdlbm9cYmdyb3VwIzJcZWdyb3VwfSUKK1xlbmRncm91cH0KKworXGRlZlxkb3N1YnN1YnNlY2VudHJ5IzEjMntcYmVnaW5ncm91cAorICBcc3Vic3Vic2VjZW50cnlmb250cyBcbGVmdHNraXA9M1x0b2NpbmRlbnQKKyAgXHRvY2VudHJ5eyMxfXtcZG9wYWdlbm9cYmdyb3VwIzJcZWdyb3VwfSUKK1xlbmRncm91cH0KKworJSBXZSB1c2UgdGhlIHNhbWUgXGVudHJ5IG1hY3JvIGFzIGZvciB0aGUgaW5kZXggZW50cmllcy4KK1xsZXRcdG9jZW50cnkgPSBcZW50cnkKKworJSBTcGFjZSBiZXR3ZWVuIGNoYXB0ZXIgKG9yIHdoYXRldmVyKSBudW1iZXIgYW5kIHRoZSB0aXRsZS4KK1xkZWZcbGFiZWxzcGFjZXtcaHNraXAxZW0gXHJlbGF4fQorCitcZGVmXGRvcGFnZW5vIzF7e1xybSAjMX19CitcZGVmXGRvc2hvcnRwYWdlbm8jMXt7XHJtICMxfX0KKworXGRlZlxjaGFwZW50cnlmb250c3tcc2VjZm9udHMgXHJtfQorXGRlZlxzZWNlbnRyeWZvbnRze1x0ZXh0Zm9udHN9CitcZGVmXHN1YnNlY2VudHJ5Zm9udHN7XHRleHRmb250c30KK1xkZWZcc3Vic3Vic2VjZW50cnlmb250c3tcdGV4dGZvbnRzfQorCisKK1xtZXNzYWdle2Vudmlyb25tZW50cyx9CislIEBmb28gLi4uIEBlbmQgZm9vLgorCislIEB0ZXggLi4uIEBlbmQgdGV4ICAgIGVzY2FwZXMgaW50byByYXcgVGV4IHRlbXBvcmFyaWx5LgorJSBPbmUgZXhjZXB0aW9uOiBAIGlzIHN0aWxsIGFuIGVzY2FwZSBjaGFyYWN0ZXIsIHNvIHRoYXQgQGVuZCB0ZXggd29ya3MuCislIEJ1dCBcQCBvciBAQCB3aWxsIGdldCBhIHBsYWluIHRleCBAIGNoYXJhY3Rlci4KKworXGVudmRlZlx0ZXh7JQorICBcc2V0dXBtYXJrdXBzdHlsZXt0ZXh9JQorICBcY2F0Y29kZSBgXFw9MCBcY2F0Y29kZSBgXHs9MSBcY2F0Y29kZSBgXH09MgorICBcY2F0Y29kZSBgXCQ9MyBcY2F0Y29kZSBgXCY9NCBcY2F0Y29kZSBgXCM9NgorICBcY2F0Y29kZSBgXF49NyBcY2F0Y29kZSBgXF89OCBcY2F0Y29kZSBgXH49XGFjdGl2ZSBcbGV0fj1cdGllCisgIFxjYXRjb2RlIGBcJT0xNAorICBcY2F0Y29kZSBgXCs9XG90aGVyCisgIFxjYXRjb2RlIGBcIj1cb3RoZXIKKyAgXGNhdGNvZGUgYFx8PVxvdGhlcgorICBcY2F0Y29kZSBgXDw9XG90aGVyCisgIFxjYXRjb2RlIGBcPj1cb3RoZXIKKyAgXGNhdGNvZGVgXGA9XG90aGVyCisgIFxjYXRjb2RlYFwnPVxvdGhlcgorICBcZXNjYXBlY2hhcj1gXFwKKyAgJQorICBcbGV0XGI9XHB0ZXhiCisgIFxsZXRcYnVsbGV0PVxwdGV4YnVsbGV0CisgIFxsZXRcYz1ccHRleGMKKyAgXGxldFwsPVxwdGV4Y29tbWEKKyAgXGxldFwuPVxwdGV4ZG90CisgIFxsZXRcZG90cz1ccHRleGRvdHMKKyAgXGxldFxlcXVpdj1ccHRleGVxdWl2CisgIFxsZXRcIT1ccHRleGV4Y2xhbQorICBcbGV0XGk9XHB0ZXhpCisgIFxsZXRcaW5kZW50PVxwdGV4aW5kZW50CisgIFxsZXRcbm9pbmRlbnQ9XHB0ZXhub2luZGVudAorICBcbGV0XHs9XHB0ZXhsYnJhY2UKKyAgXGxldFwrPVx0YWJhbGlnbgorICBcbGV0XH09XHB0ZXhyYnJhY2UKKyAgXGxldFwvPVxwdGV4c2xhc2gKKyAgXGxldFwqPVxwdGV4c3RhcgorICBcbGV0XHQ9XHB0ZXh0CisgIFxleHBhbmRhZnRlciBcbGV0XGNzbmFtZSB0b3BcZW5kY3NuYW1lPVxwdGV4dG9wICAlIG91dGVyCisgIFxsZXRcZnJlbmNoc3BhY2luZz1ccGxhaW5mcmVuY2hzcGFjaW5nCisgICUKKyAgXGRlZlxlbmRsZG90c3tcbWF0aGlubmVye1xsZG90c1xsZG90c1xsZG90c1xsZG90c319JQorICBcZGVmXGVuZGRvdHN7XHJlbGF4XGlmbW1vZGVcZW5kbGRvdHNcZWxzZSRcbWF0aHN1cnJvdW5kPTBwdCBcZW5kbGRvdHNcLCRcZml9JQorICBcZGVmXEB7QH0lCit9CislIFRoZXJlIGlzIG5vIG5lZWQgdG8gZGVmaW5lIFxFdGV4LgorCislIERlZmluZSBAbGlzcCAuLi4gQGVuZCBsaXNwLgorJSBAbGlzcCBlbnZpcm9ubWVudCBmb3JtcyBhIGdyb3VwIHNvIGl0IGNhbiByZWJpbmQgdGhpbmdzLAorJSBpbmNsdWRpbmcgdGhlIGRlZmluaXRpb24gb2YgQGVuZCBsaXNwICh3aGljaCBub3JtYWxseSBpcyBlcnJvbmVvdXMpLgorCislIEFtb3VudCB0byBuYXJyb3cgdGhlIG1hcmdpbnMgYnkgZm9yIEBsaXNwLgorXG5ld3NraXBcbGlzcG5hcnJvd2luZyBcbGlzcG5hcnJvd2luZz0wLjRpbgorCislIFRoaXMgaXMgdGhlIGRlZmluaXRpb24gdGhhdCBeXk0gZ2V0cyBpbnNpZGUgQGxpc3AsIEBleGFtcGxlLCBhbmQgb3RoZXIKKyUgc3VjaCBlbnZpcm9ubWVudHMuICBcbnVsbCBpcyBiZXR0ZXIgdGhhbiBhIHNwYWNlLCBzaW5jZSBpdCBkb2Vzbid0CislIGhhdmUgYW55IHdpZHRoLgorXGRlZlxsaXNwcGFye1xudWxsXGVuZGdyYWZ9CisKKyUgVGhpcyBzcGFjZSBpcyBhbHdheXMgcHJlc2VudCBhYm92ZSBhbmQgYmVsb3cgZW52aXJvbm1lbnRzLgorXG5ld3NraXBcZW52c2tpcGFtb3VudCBcZW52c2tpcGFtb3VudCA9IDBwdAorCislIE1ha2Ugc3BhY2luZyBhbmQgYmVsb3cgZW52aXJvbm1lbnQgc3ltbWV0cmljYWwuICBXZSB1c2UgXHBhcnNraXAgaGVyZQorJSB0byBoZWxwIGluIGRvaW5nIHRoYXQsIHNpbmNlIGluIEBleGFtcGxlLWxpa2UgZW52aXJvbm1lbnRzIFxwYXJza2lwCislIGlzIHJlc2V0IHRvIHplcm87IHRodXMgdGhlIFxhZnRlcmVudmJyZWFrIGluc2VydHMgbm8gc3BhY2UgLS0gYnV0IHRoZQorJSBzdGFydCBvZiB0aGUgbmV4dCBwYXJhZ3JhcGggd2lsbCBpbnNlcnQgXHBhcnNraXAuCislCitcZGVmXGFib3ZlZW52YnJlYWt7eyUKKyAgJSA9MTAwMDAgaW5zdGVhZCBvZiA8MTAwMDAgYmVjYXVzZSBvZiBhIHNwZWNpYWwgY2FzZSBpbiBcaXRlbXp6eiBhbmQKKyAgJSBcc2VjdGlvbmhlYWRpbmcsIHEudi4KKyAgXGlmbnVtIFxsYXN0cGVuYWx0eT0xMDAwMCBcZWxzZQorICAgIFxhZHZhbmNlXGVudnNraXBhbW91bnQgYnkgXHBhcnNraXAKKyAgICBcZW5kZ3JhZgorICAgIFxpZmRpbVxsYXN0c2tpcDxcZW52c2tpcGFtb3VudAorICAgICAgXHJlbW92ZWxhc3Rza2lwCisgICAgICAlIGl0J3Mgbm90IGEgZ29vZCBwbGFjZSB0byBicmVhayBpZiB0aGUgbGFzdCBwZW5hbHR5IHdhcyBcbm9icmVhaworICAgICAgJSBvciBiZXR0ZXIgLi4uCisgICAgICBcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDAgXHBlbmFsdHktNTAgXGZpCisgICAgICBcdnNraXBcZW52c2tpcGFtb3VudAorICAgIFxmaQorICBcZmkKK319CisKK1xsZXRcYWZ0ZXJlbnZicmVhayA9IFxhYm92ZWVudmJyZWFrCisKKyUgXG5vbmFycm93aW5nIGlzIGEgZmxhZy4gIElmICJzZXQiLCBAbGlzcCBldGMgZG9uJ3QgbmFycm93IG1hcmdpbnM7IGl0IHdpbGwKKyUgYWxzbyBjbGVhciBpdCwgc28gdGhhdCBpdHMgZW1iZWRkZWQgZW52aXJvbm1lbnRzIGRvIHRoZSBuYXJyb3dpbmcgYWdhaW4uCitcbGV0XG5vbmFycm93aW5nPVxyZWxheAorCislIEBjYXJ0b3VjaGUgLi4uIEBlbmQgY2FydG91Y2hlOiBkcmF3IHJlY3RhbmdsZSB3L3JvdW5kZWQgY29ybmVycyBhcm91bmQKKyUgZW52aXJvbm1lbnQgY29udGVudHMuCitcZm9udFxjaXJjbGU9bGNpcmNsZTEwCitcbmV3ZGltZW5cY2lyY3RoaWNrCitcbmV3ZGltZW5cY2FydG91dGVyXG5ld2RpbWVuXGNhcnRpbm5lcgorXG5ld3NraXBcbm9ybWJza2lwXG5ld3NraXBcbm9ybXBza2lwXG5ld3NraXBcbm9ybWxza2lwCitcY2lyY3RoaWNrPVxmb250ZGltZW44XGNpcmNsZQorJQorXGRlZlxjdGx7e1xjaXJjbGVcY2hhcicwMTNcaHNraXAgLTZwdH19JSA2cHQgZnJvbSBwbCBmaWxlOiAxLzJjaGFyd2lkdGgKK1xkZWZcY3Rye3tcaHNraXAgNnB0XGNpcmNsZVxjaGFyJzAxMH19CitcZGVmXGNibHt7XGNpcmNsZVxjaGFyJzAxMlxoc2tpcCAtNnB0fX0KK1xkZWZcY2Jye3tcaHNraXAgNnB0XGNpcmNsZVxjaGFyJzAxMX19CitcZGVmXGNhcnR0b3B7XGhib3ggdG8gXGNhcnRvdXRlcntcaHNraXBcbHNraXAKKyAgICAgICAgXGN0bFxsZWFkZXJzXGhydWxlIGhlaWdodFxjaXJjdGhpY2tcaGZpbFxjdHIKKyAgICAgICAgXGhza2lwXHJza2lwfX0KK1xkZWZcY2FydGJvdHtcaGJveCB0byBcY2FydG91dGVye1xoc2tpcFxsc2tpcAorICAgICAgICBcY2JsXGxlYWRlcnNcaHJ1bGUgaGVpZ2h0XGNpcmN0aGlja1xoZmlsXGNicgorICAgICAgICBcaHNraXBccnNraXB9fQorJQorXG5ld3NraXBcbHNraXBcbmV3c2tpcFxyc2tpcAorCitcZW52ZGVmXGNhcnRvdWNoZXslCisgIFxpZmhtb2RlXHBhclxmaSAgJSBjYW4ndCBiZSBpbiB0aGUgbWlkc3Qgb2YgYSBwYXJhZ3JhcGguCisgIFxzdGFydHNhdmluZ2luc2VydHMKKyAgXGxza2lwPVxsZWZ0c2tpcCBccnNraXA9XHJpZ2h0c2tpcAorICBcbGVmdHNraXA9MHB0XHJpZ2h0c2tpcD0wcHQgJSB3ZSB3YW50IHRoZXNlICpvdXRzaWRlKi4KKyAgXGNhcnRpbm5lcj1caHNpemUgXGFkdmFuY2VcY2FydGlubmVyIGJ5LVxsc2tpcAorICBcYWR2YW5jZVxjYXJ0aW5uZXIgYnktXHJza2lwCisgIFxjYXJ0b3V0ZXI9XGhzaXplCisgIFxhZHZhbmNlXGNhcnRvdXRlciBieSAxOC40cHQJJSBhbGxvdyBmb3IgM3B0IGtlcm5zIG9uIGVpdGhlcgorCQkJCSUgc2lkZSwgYW5kIGZvciA2cHQgd2FzdGUgZnJvbQorCQkJCSUgZWFjaCBjb3JuZXIgY2hhciwgYW5kIHJ1bGUgdGhpY2tuZXNzCisgIFxub3JtYnNraXA9XGJhc2VsaW5lc2tpcCBcbm9ybXBza2lwPVxwYXJza2lwIFxub3JtbHNraXA9XGxpbmVza2lwCisgICUgRmxhZyB0byB0ZWxsIEBsaXNwLCBldGMuLCBub3QgdG8gbmFycm93IG1hcmdpbi4KKyAgXGxldFxub25hcnJvd2luZyA9IHQlCisgIFx2Ym94XGJncm91cAorICAgICAgXGJhc2VsaW5lc2tpcD0wcHRccGFyc2tpcD0wcHRcbGluZXNraXA9MHB0CisgICAgICBcY2FydHRvcAorICAgICAgXGhib3hcYmdyb3VwCisJICBcaHNraXBcbHNraXAKKwkgIFx2cnVsZVxrZXJuM3B0CisJICBcdmJveFxiZ3JvdXAKKwkgICAgICBca2VybjNwdAorCSAgICAgIFxoc2l6ZT1cY2FydGlubmVyCisJICAgICAgXGJhc2VsaW5lc2tpcD1cbm9ybWJza2lwCisJICAgICAgXGxpbmVza2lwPVxub3JtbHNraXAKKwkgICAgICBccGFyc2tpcD1cbm9ybXBza2lwCisJICAgICAgXHZza2lwIC1ccGFyc2tpcAorCSAgICAgIFxjb21tZW50ICUgRm9yIGV4cGxhbmF0aW9uLCBzZWUgdGhlIGVuZCBvZiBcZGVmXGdyb3VwLgorfQorXGRlZlxFY2FydG91Y2hleyUKKyAgICAgICAgICAgICAgXGlmaG1vZGVccGFyXGZpCisJICAgICAgXGtlcm4zcHQKKwkgIFxlZ3JvdXAKKwkgIFxrZXJuM3B0XHZydWxlCisJICBcaHNraXBccnNraXAKKyAgICAgIFxlZ3JvdXAKKyAgICAgIFxjYXJ0Ym90CisgIFxlZ3JvdXAKKyAgXGNoZWNraW5zZXJ0cworfQorCisKKyUgVGhpcyBtYWNybyBpcyBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhbGwgdGhlIEBleGFtcGxlIHZhcmlhbnRzLAorJSBpbnNpZGUgYSBncm91cC4KK1xuZXdkaW1lblxub25maWxscGFyaW5kZW50CitcZGVmXG5vbmZpbGxzdGFydHslCisgIFxhYm92ZWVudmJyZWFrCisgIFxoZnV6eiA9IDEycHQgJSBEb24ndCBiZSBmdXNzeQorICBcc2Vwc3BhY2VzICUgTWFrZSBzcGFjZXMgYmUgd29yZC1zZXBhcmF0b3JzIHJhdGhlciB0aGFuIHNwYWNlIHRva2Vucy4KKyAgXGxldFxwYXIgPSBcbGlzcHBhciAlIGRvbid0IGlnbm9yZSBibGFuayBsaW5lcworICBcb2JleWxpbmVzICUgZWFjaCBsaW5lIG9mIGlucHV0IGlzIGEgbGluZSBvZiBvdXRwdXQKKyAgXHBhcnNraXAgPSAwcHQKKyAgJSBUdXJuIG9mZiBwYXJhZ3JhcGggaW5kZW50YXRpb24gYnV0IHJlZGVmaW5lIFxpbmRlbnQgdG8gZW11bGF0ZQorICAlIHRoZSBub3JtYWwgXGluZGVudC4KKyAgXG5vbmZpbGxwYXJpbmRlbnQ9XHBhcmluZGVudAorICBccGFyaW5kZW50ID0gMHB0CisgIFxsZXRcaW5kZW50XG5vbmZpbGxpbmRlbnQKKyAgJQorICBcZW1lcmdlbmN5c3RyZXRjaCA9IDBwdCAlIGRvbid0IHRyeSB0byBhdm9pZCBvdmVyZnVsbCBib3hlcworICBcaWZ4XG5vbmFycm93aW5nXHJlbGF4CisgICAgXGFkdmFuY2UgXGxlZnRza2lwIGJ5IFxsaXNwbmFycm93aW5nCisgICAgXGV4ZGVudGFtb3VudD1cbGlzcG5hcnJvd2luZworICBcZWxzZQorICAgIFxsZXRcbm9uYXJyb3dpbmcgPSBccmVsYXgKKyAgXGZpCisgIFxsZXRcZXhkZW50PVxub2ZpbGxleGRlbnQKK30KKworXGJlZ2luZ3JvdXAKK1xvYmV5c3BhY2VzCislIFdlIHdhbnQgdG8gc3dhbGxvdyBzcGFjZXMgKGJ1dCBub3Qgb3RoZXIgdG9rZW5zKSBhZnRlciB0aGUgZmFrZQorJSBAaW5kZW50IGluIG91ciBub25maWxsLWVudmlyb25tZW50cywgd2hlcmUgc3BhY2VzIGFyZSBub3JtYWxseQorJSBhY3RpdmUgYW5kIHNldCB0byBAdGllLCByZXN1bHRpbmcgaW4gdGhlbSBub3QgYmVpbmcgaWdub3JlZCBhZnRlcgorJSBAaW5kZW50LgorXGdkZWZcbm9uZmlsbGluZGVudHtcZnV0dXJlbGV0XHRlbXBcbm9uZmlsbGluZGVudGNoZWNrfSUKK1xnZGVmXG5vbmZpbGxpbmRlbnRjaGVja3slCitcaWZ4XHRlbXAgJQorXGV4cGFuZGFmdGVyXG5vbmZpbGxpbmRlbnRnb2JibGUlCitcZWxzZSUKK1xsZWF2ZXZtb2RlXG5vbmZpbGxpbmRlbnRib3glCitcZmklCit9JQorXGVuZGdyb3VwCitcZGVmXG5vbmZpbGxpbmRlbnRnb2JibGUjMXtcbm9uZmlsbGluZGVudH0KK1xkZWZcbm9uZmlsbGluZGVudGJveHtcaGJveCB0byBcbm9uZmlsbHBhcmluZGVudHtcaHNzfX0KKworJSBJZiB5b3Ugd2FudCBhbGwgZXhhbXBsZXMgZXRjLiBzbWFsbDogQHNldCBkaXNwZW52c2l6ZSBzbWFsbC4KKyUgSWYgeW91IHdhbnQgZXZlbiBzbWFsbCBleGFtcGxlcyB0aGUgZnVsbCBzaXplOiBAc2V0IGRpc3BlbnZzaXplIG5vc21hbGwuCislIFRoaXMgYWZmZWN0cyB0aGUgZm9sbG93aW5nIGRpc3BsYXllZCBlbnZpcm9ubWVudHM6CislICAgIEBleGFtcGxlLCBAZGlzcGxheSwgQGZvcm1hdCwgQGxpc3AKKyUKK1xkZWZcc21hbGx3b3Jke3NtYWxsfQorXGRlZlxub3NtYWxsd29yZHtub3NtYWxsfQorXGxldFxTRVRkaXNwZW52c2l6ZVxyZWxheAorXGRlZlxzZXRub3JtYWxkaXNwZW52eyUKKyAgXGlmeFxTRVRkaXNwZW52c2l6ZVxzbWFsbHdvcmQKKyAgICAlIGVuZCBwYXJhZ3JhcGggZm9yIHNha2Ugb2YgbGVhZGluZywgaW4gY2FzZSBkb2N1bWVudCBoYXMgbm8gYmxhbmsKKyAgICAlIGxpbmUuICBUaGlzIGlzIHJlZHVuZGFudCB3aXRoIHdoYXQgaGFwcGVucyBpbiBcYWJvdmVlbnZicmVhaywgYnV0CisgICAgJSB3ZSBuZWVkIHRvIGRvIGl0IGJlZm9yZSBjaGFuZ2luZyB0aGUgZm9udHMsIGFuZCBpdCdzIGluY29udmVuaWVudAorICAgICUgdG8gY2hhbmdlIHRoZSBmb250cyBhZnRlcndhcmQuCisgICAgXGlmbnVtIFxsYXN0cGVuYWx0eT0xMDAwMCBcZWxzZSBcZW5kZ3JhZiBcZmkKKyAgICBcc21hbGxleGFtcGxlZm9udHMgXHJtCisgIFxmaQorfQorXGRlZlxzZXRzbWFsbGRpc3BlbnZ7JQorICBcaWZ4XFNFVGRpc3BlbnZzaXplXG5vc21hbGx3b3JkCisgIFxlbHNlCisgICAgXGlmbnVtIFxsYXN0cGVuYWx0eT0xMDAwMCBcZWxzZSBcZW5kZ3JhZiBcZmkKKyAgICBcc21hbGxleGFtcGxlZm9udHMgXHJtCisgIFxmaQorfQorCislIFdlIG9mdGVuIGRlZmluZSB0d28gZW52aXJvbm1lbnRzLCBAZm9vIGFuZCBAc21hbGxmb28uCislIExldCdzIGRvIGl0IGJ5IG9uZSBjb21tYW5kOgorXGRlZlxtYWtlZGlzcGVudiAjMSMyeworICBcZXhwYW5kYWZ0ZXJcZW52ZGVmXGNzbmFtZSMxXGVuZGNzbmFtZSB7XHNldG5vcm1hbGRpc3BlbnYgIzJ9CisgIFxleHBhbmRhZnRlclxlbnZkZWZcY3NuYW1lIHNtYWxsIzFcZW5kY3NuYW1lIHtcc2V0c21hbGxkaXNwZW52ICMyfQorICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBFIzFcZW5kY3NuYW1lIFxhZnRlcmVudmJyZWFrCisgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIEVzbWFsbCMxXGVuZGNzbmFtZSBcYWZ0ZXJlbnZicmVhaworfQorCislIERlZmluZSB0d28gc3lub255bXM6CitcZGVmXG1ha2V0d29kaXNwZW52cyAjMSMyIzN7CisgIFxtYWtlZGlzcGVudnsjMX17IzN9CisgIFxtYWtlZGlzcGVudnsjMn17IzN9Cit9CisKKyUgQGxpc3A6IGluZGVudGVkLCBuYXJyb3dlZCwgdHlwZXdyaXRlciBmb250OyBAZXhhbXBsZTogc2FtZSBhcyBAbGlzcC4KKyUKKyUgQHNtYWxsZXhhbXBsZSBhbmQgQHNtYWxsbGlzcDogdXNlIHNtYWxsZXIgZm9udHMuCislIE9yaWdpbmFsbHkgY29udHJpYnV0ZWQgYnkgUGF2ZWxAeGVyb3guCislCitcbWFrZXR3b2Rpc3BlbnZzIHtsaXNwfXtleGFtcGxlfXslCisgIFxub25maWxsc3RhcnQKKyAgXHR0XHNldHVwbWFya3Vwc3R5bGV7ZXhhbXBsZX0lCisgIFxsZXRca2JkZm9udCA9IFxrYmRleGFtcGxlZm9udCAlIEFsbG93IEBrYmQgdG8gZG8gc29tZXRoaW5nIHNwZWNpYWwuCisgIFxnb2JibGUgICAgICAgJSBlYXQgcmV0dXJuCit9CislIEBkaXNwbGF5L0BzbWFsbGRpc3BsYXk6IHNhbWUgYXMgQGxpc3AgZXhjZXB0IGtlZXAgY3VycmVudCBmb250LgorJQorXG1ha2VkaXNwZW52IHtkaXNwbGF5fXslCisgIFxub25maWxsc3RhcnQKKyAgXGdvYmJsZQorfQorCislIEBmb3JtYXQvQHNtYWxsZm9ybWF0OiBzYW1lIGFzIEBkaXNwbGF5IGV4Y2VwdCBkb24ndCBuYXJyb3cgbWFyZ2lucy4KKyUKK1xtYWtlZGlzcGVudntmb3JtYXR9eyUKKyAgXGxldFxub25hcnJvd2luZyA9IHQlCisgIFxub25maWxsc3RhcnQKKyAgXGdvYmJsZQorfQorCislIEBmbHVzaGxlZnQ6IHNhbWUgYXMgQGZvcm1hdCwgYnV0IGRvZXNuJ3Qgb2JleSBcU0VUZGlzcGVudnNpemUuCitcZW52ZGVmXGZsdXNobGVmdHslCisgIFxsZXRcbm9uYXJyb3dpbmcgPSB0JQorICBcbm9uZmlsbHN0YXJ0CisgIFxnb2JibGUKK30KK1xsZXRcRWZsdXNobGVmdCA9IFxhZnRlcmVudmJyZWFrCisKKyUgQGZsdXNocmlnaHQuCislCitcZW52ZGVmXGZsdXNocmlnaHR7JQorICBcbGV0XG5vbmFycm93aW5nID0gdCUKKyAgXG5vbmZpbGxzdGFydAorICBcYWR2YW5jZVxsZWZ0c2tpcCBieSAwcHQgcGx1cyAxZmlsbAorICBcZ29iYmxlCit9CitcbGV0XEVmbHVzaHJpZ2h0ID0gXGFmdGVyZW52YnJlYWsKKworCislIEByYWdnZWRyaWdodCBkb2VzIG1vcmUtb3ItbGVzcyBub3JtYWwgbGluZSBicmVha2luZyBidXQgbm8gcmlnaHQKKyUganVzdGlmaWNhdGlvbi4gIEZyb20gcGxhaW4udGV4LgorXGVudmRlZlxyYWdnZWRyaWdodHslCisgIFxyaWdodHNraXAwcHQgcGx1czJlbSBcc3BhY2Vza2lwLjMzMzNlbSBceHNwYWNlc2tpcC41ZW1ccmVsYXgKK30KK1xsZXRcRXJhZ2dlZHJpZ2h0XHBhcgorCitcZW52ZGVmXHJhZ2dlZGxlZnR7JQorICBccGFyaW5kZW50PTBwdCBcbGVmdHNraXAwcHQgcGx1czJlbQorICBcc3BhY2Vza2lwLjMzMzNlbSBceHNwYWNlc2tpcC41ZW0gXHBhcmZpbGxza2lwPTBwdAorICBcaGJhZG5lc3M9MTAwMDAgJSBMYXN0IGxpbmUgd2lsbCB1c3VhbGx5IGJlIHVuZGVyZnVsbCwgc28gdHVybiBvZmYKKyAgICAgICAgICAgICAgICAgICUgYmFkbmVzcyByZXBvcnRpbmcuCit9CitcbGV0XEVyYWdnZWRsZWZ0XHBhcgorCitcZW52ZGVmXHJhZ2dlZGNlbnRlcnslCisgIFxwYXJpbmRlbnQ9MHB0IFxyaWdodHNraXAwcHQgcGx1czFlbSBcbGVmdHNraXAwcHQgcGx1czFlbQorICBcc3BhY2Vza2lwLjMzMzNlbSBceHNwYWNlc2tpcC41ZW0gXHBhcmZpbGxza2lwPTBwdAorICBcaGJhZG5lc3M9MTAwMDAgJSBMYXN0IGxpbmUgd2lsbCB1c3VhbGx5IGJlIHVuZGVyZnVsbCwgc28gdHVybiBvZmYKKyAgICAgICAgICAgICAgICAgICUgYmFkbmVzcyByZXBvcnRpbmcuCit9CitcbGV0XEVyYWdnZWRjZW50ZXJccGFyCisKKworJSBAcXVvdGF0aW9uIGRvZXMgbm9ybWFsIGxpbmVicmVha2luZyAoaGVuY2Ugd2UgY2FuJ3QgdXNlIFxub25maWxsc3RhcnQpCislIGFuZCBuYXJyb3dzIHRoZSBtYXJnaW5zLiAgV2Uga2VlcCBccGFyc2tpcCBub256ZXJvIGluIGdlbmVyYWwsIHNpbmNlCislIHdlJ3JlIGRvaW5nIG5vcm1hbCBmaWxsaW5nLiAgU28sIHdoZW4gdXNpbmcgXGFib3ZlZW52YnJlYWsgYW5kCislIFxhZnRlcmVudmJyZWFrLCB0ZW1wb3JhcmlseSBtYWtlIFxwYXJza2lwIDAuCislCitcZGVmXHF1b3RhdGlvbnN0YXJ0eyUKKyAge1xwYXJza2lwPTBwdCBcYWJvdmVlbnZicmVha30lIGJlY2F1c2UgXGFib3ZlZW52YnJlYWsgaW5zZXJ0cyBccGFyc2tpcAorICBccGFyaW5kZW50PTBwdAorICAlCisgICUgQGNhcnRvdWNoZSBkZWZpbmVzIFxub25hcnJvd2luZyB0byBpbmhpYml0IG5hcnJvd2luZyBhdCBuZXh0IGxldmVsIGRvd24uCisgIFxpZnhcbm9uYXJyb3dpbmdccmVsYXgKKyAgICBcYWR2YW5jZVxsZWZ0c2tpcCBieSBcbGlzcG5hcnJvd2luZworICAgIFxhZHZhbmNlXHJpZ2h0c2tpcCBieSBcbGlzcG5hcnJvd2luZworICAgIFxleGRlbnRhbW91bnQgPSBcbGlzcG5hcnJvd2luZworICBcZWxzZQorICAgIFxsZXRcbm9uYXJyb3dpbmcgPSBccmVsYXgKKyAgXGZpCisgIFxwYXJzZWFyZ1xxdW90YXRpb25sYWJlbAorfQorCitcZW52ZGVmXHF1b3RhdGlvbnslCisgIFxzZXRub3JtYWxkaXNwZW52CisgIFxxdW90YXRpb25zdGFydAorfQorCitcZW52ZGVmXHNtYWxscXVvdGF0aW9ueyUKKyAgXHNldHNtYWxsZGlzcGVudgorICBccXVvdGF0aW9uc3RhcnQKK30KK1xsZXRcRXNtYWxscXVvdGF0aW9uID0gXEVxdW90YXRpb24KKworJSBXZSBoYXZlIHJldGFpbmVkIGEgbm9uemVybyBwYXJza2lwIGZvciB0aGUgZW52aXJvbm1lbnQsIHNpbmNlIHdlJ3JlCislIGRvaW5nIG5vcm1hbCBmaWxsaW5nLgorJQorXGRlZlxFcXVvdGF0aW9ueyUKKyAgXHBhcgorICBcaWZ4XHF1b3RhdGlvbmF1dGhvclx1bmRlZmluZWRcZWxzZQorICAgICUgaW5kZW50IGEgYml0LgorICAgIFxsZWZ0bGluZXtca2VybiAyXGxlZnRza2lwIFxzbCAtLS1ccXVvdGF0aW9uYXV0aG9yfSUKKyAgXGZpCisgIHtccGFyc2tpcD0wcHQgXGFmdGVyZW52YnJlYWt9JQorfQorCislIElmIHdlJ3JlIGdpdmVuIGFuIGFyZ3VtZW50LCB0eXBlc2V0IGl0IGluIGJvbGQgd2l0aCBhIGNvbG9uIGFmdGVyLgorXGRlZlxxdW90YXRpb25sYWJlbCMxeyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXGVtcHR5IFxlbHNlCisgICAge1xiZiAjMTogfSUKKyAgXGZpCit9CisKKworJSBMYVRlWC1saWtlIEB2ZXJiYXRpbS4uLkBlbmQgdmVyYmF0aW0gYW5kIEB2ZXJiezxjaGFyPi4uLjxjaGFyPn0KKyUgSWYgd2Ugd2FudCB0byBhbGxvdyBhbnkgPGNoYXI+IGFzIGRlbGltaXRlciwKKyUgd2UgbmVlZCB0aGUgY3VybHkgYnJhY2VzIHNvIHRoYXQgbWFrZWluZm8gc2VlcyB0aGUgQHZlcmIgY29tbWFuZCwgZWc6CislIGBAdmVyYnguLi54JyB3b3VsZCBsb29rIGxpa2UgdGhlICdAdmVyYngnIGNvbW1hbmQuICAtLWphbm5la2VAZ251Lm9yZworJQorJSBbS251dGhdOiBEb25hbGQgRXJ2aW4gS251dGgsIDE5OTYuICBUaGUgVGVYYm9vay4KKyUKKyUgW0tudXRoXSBwLjM0NDsgb25seSB3ZSBuZWVkIHRvIGRvIHRoZSBvdGhlciBjaGFyYWN0ZXJzIFRleGluZm8gc2V0cworJSBhY3RpdmUgdG9vLiAgT3RoZXJ3aXNlLCB0aGV5IGdldCBsb3N0IGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb24gYQorJSB2ZXJiYXRpbSBsaW5lLgorXGRlZlxkb3NwZWNpYWxzeyUKKyAgXGRvXCBcZG9cXFxkb1x7XGRvXH1cZG9cJFxkb1wmJQorICBcZG9cI1xkb1xeXGRvXF5eS1xkb1xfXGRvXF5eQVxkb1wlXGRvXH4lCisgIFxkb1w8XGRvXD5cZG9cfFxkb1xAXGRvK1xkb1wiJQorICAlIERvbid0IGRvIHRoZSBxdW90ZXMgLS0gaWYgd2UgZG8sIEBzZXQgdHhpY29kZXF1b3RldW5kaXJlY3RlZCBhbmQKKyAgJSBAc2V0IHR4aWNvZGVxdW90ZWJhY2t0aWNrIHdpbGwgbm90IGhhdmUgZWZmZWN0IG9uIEB2ZXJiIGFuZAorICAlIEB2ZXJiYXRpbSwgYW5kID9gIGFuZCAhYCBsaWdhdHVyZXMgd29uJ3QgZ2V0IGRpc2FibGVkLgorICAlXGRvXGBcZG9cJyUKK30KKyUKKyUgW0tudXRoXSBwLiAzODAKK1xkZWZcdW5jYXRjb2Rlc3BlY2lhbHN7JQorICBcZGVmXGRvIyMxe1xjYXRjb2RlYCMjMT1cb3RoZXJ9XGRvc3BlY2lhbHN9CislCislIFNldHVwIGZvciB0aGUgQHZlcmIgY29tbWFuZC4KKyUKKyUgRWlnaHQgc3BhY2VzIGZvciBhIHRhYgorXGJlZ2luZ3JvdXAKKyAgXGNhdGNvZGVgXF5eST1cYWN0aXZlCisgIFxnZGVmXHRhYmVpZ2h0c3BhY2Vze1xjYXRjb2RlYFxeXkk9XGFjdGl2ZVxkZWZeXkl7XCBcIFwgXCBcIFwgXCBcIH19CitcZW5kZ3JvdXAKKyUKK1xkZWZcc2V0dXB2ZXJieyUKKyAgXHR0ICAlIGVhc2llc3QgKGFuZCBjb252ZW50aW9uYWxseSB1c2VkKSBmb250IGZvciB2ZXJiYXRpbQorICBcZGVmXHBhcntcbGVhdmV2bW9kZVxlbmRncmFmfSUKKyAgXHNldHVwbWFya3Vwc3R5bGV7dmVyYn0lCisgIFx0YWJlaWdodHNwYWNlcworICAlIFJlc3BlY3QgbGluZSBicmVha3MsCisgICUgcHJpbnQgc3BlY2lhbCBzeW1ib2xzIGFzIHRoZW1zZWx2ZXMsIGFuZAorICAlIG1ha2UgZWFjaCBzcGFjZSBjb3VudAorICAlIG11c3QgZG8gaW4gdGhpcyBvcmRlcjoKKyAgXG9iZXlsaW5lcyBcdW5jYXRjb2Rlc3BlY2lhbHMgXHNlcHNwYWNlcworfQorCislIFNldHVwIGZvciB0aGUgQHZlcmJhdGltIGVudmlyb25tZW50CislCislIFJlYWwgdGFiIGV4cGFuc2lvbgorXG5ld2RpbWVuXHRhYncgXHNldGJveDA9XGhib3h7XHR0XHNwYWNlfSBcdGFidz04XHdkMCAlIHRhYiBhbW91bnQKKyUKK1xkZWZcc3RhcnR0YWJib3h7XHNldGJveDA9XGhib3hcYmdyb3VwfQorJQorXGJlZ2luZ3JvdXAKKyAgXGNhdGNvZGVgXF5eST1cYWN0aXZlCisgIFxnZGVmXHRhYmV4cGFuZHslCisgICAgXGNhdGNvZGVgXF5eST1cYWN0aXZlCisgICAgXGRlZl5eSXtcbGVhdmV2bW9kZVxlZ3JvdXAKKyAgICAgIFxkaW1lbjA9XHdkMCAlIHRoZSB3aWR0aCBzbyBmYXIsIG9yIHNpbmNlIHRoZSBwcmV2aW91cyB0YWIKKyAgICAgIFxkaXZpZGVcZGltZW4wIGJ5XHRhYncKKyAgICAgIFxtdWx0aXBseVxkaW1lbjAgYnlcdGFidyAlIGNvbXB1dGUgcHJldmlvdXMgbXVsdGlwbGUgb2YgXHRhYncKKyAgICAgIFxhZHZhbmNlXGRpbWVuMCBieVx0YWJ3ICAlIGFkdmFuY2UgdG8gbmV4dCBtdWx0aXBsZSBvZiBcdGFidworICAgICAgXHdkMD1cZGltZW4wIFxib3gwIFxzdGFydHRhYmJveAorICAgIH0lCisgIH0KK1xlbmRncm91cAorCislIHN0YXJ0IHRoZSB2ZXJiYXRpbSBlbnZpcm9ubWVudC4KK1xkZWZcc2V0dXB2ZXJiYXRpbXslCisgIFxsZXRcbm9uYXJyb3dpbmcgPSB0JQorICBcbm9uZmlsbHN0YXJ0CisgICUgRWFzaWVzdCAoYW5kIGNvbnZlbnRpb25hbGx5IHVzZWQpIGZvbnQgZm9yIHZlcmJhdGltCisgIFx0dAorICBcZGVmXHBhcntcbGVhdmV2bW9kZVxlZ3JvdXBcYm94MFxlbmRncmFmfSUKKyAgXHRhYmV4cGFuZAorICBcc2V0dXBtYXJrdXBzdHlsZXt2ZXJiYXRpbX0lCisgICUgUmVzcGVjdCBsaW5lIGJyZWFrcywKKyAgJSBwcmludCBzcGVjaWFsIHN5bWJvbHMgYXMgdGhlbXNlbHZlcywgYW5kCisgICUgbWFrZSBlYWNoIHNwYWNlIGNvdW50CisgICUgbXVzdCBkbyBpbiB0aGlzIG9yZGVyOgorICBcb2JleWxpbmVzIFx1bmNhdGNvZGVzcGVjaWFscyBcc2Vwc3BhY2VzCisgIFxldmVyeXBhcntcc3RhcnR0YWJib3h9JQorfQorCislIERvIHRoZSBAdmVyYiBtYWdpYzogdmVyYmF0aW0gdGV4dCBpcyBxdW90ZWQgYnkgdW5pcXVlCislIGRlbGltaXRlciBjaGFyYWN0ZXJzLiAgQmVmb3JlIGZpcnN0IGRlbGltaXRlciBleHBlY3QgYQorJSByaWdodCBicmFjZSwgYWZ0ZXIgbGFzdCBkZWxpbWl0ZXIgZXhwZWN0IGNsb3NpbmcgYnJhY2U6CislCislICAgIFxkZWZcZG92ZXJiJ3snPGNoYXI+IzE8Y2hhcj4nfSd7IzF9CislCislIFtLbnV0aF0gcC4gMzgyOyBvbmx5IGVhdCBvdXRlciB7fQorXGJlZ2luZ3JvdXAKKyAgXGNhdGNvZGVgWz0xXGNhdGNvZGVgXT0yXGNhdGNvZGVgXHs9XG90aGVyXGNhdGNvZGVgXH09XG90aGVyCisgIFxnZGVmXGRvdmVyYnsjMVtcZGVmXG5leHQjIzEjMX1bIyMxXGVuZGdyb3VwXVxuZXh0XQorXGVuZGdyb3VwCislCitcZGVmXHZlcmJ7XGJlZ2luZ3JvdXBcc2V0dXB2ZXJiXGRvdmVyYn0KKyUKKyUKKyUgRG8gdGhlIEB2ZXJiYXRpbSBtYWdpYzogZGVmaW5lIHRoZSBtYWNybyBcZG92ZXJiYXRpbSBzbyB0aGF0CislIHRoZSAoZmlyc3QpIGFyZ3VtZW50IGVuZHMgd2hlbiAnQGVuZCB2ZXJiYXRpbScgaXMgcmVhY2hlZCwgaWU6CislCislICAgICBcZGVmXGRvdmVyYmF0aW0jMUBlbmQgdmVyYmF0aW17IzF9CislCislIEZvciBUZXhpbmZvIGl0J3MgYSBsb3QgZWFzaWVyIHRoYW4gZm9yIExhVGVYLAorJSBiZWNhdXNlIHRleGluZm8ncyBcdmVyYmF0aW0gZG9lc24ndCBzdG9wIGF0ICdcZW5ke3ZlcmJhdGltfSc6CislIHdlIG5lZWQgbm90IHJlZGVmaW5lICdcJywgJ3snIGFuZCAnfScuCislCislIEluc3BpcmVkIGJ5IExhVGVYJ3MgdmVyYmF0aW0gY29tbWFuZCBzZXQgW2xhdGV4Lmx0eF0KKyUKK1xiZWdpbmdyb3VwCisgIFxjYXRjb2RlYFwgPVxhY3RpdmUKKyAgXG9iZXlsaW5lcyAlCisgICUgaWdub3JlIGV2ZXJ5dGhpbmcgdXAgdG8gdGhlIGZpcnN0IF5eTSwgdGhhdCdzIHRoZSBuZXdsaW5lIGF0IHRoZSBlbmQKKyAgJSBvZiB0aGUgQHZlcmJhdGltIGlucHV0IGxpbmUgaXRzZWxmLiAgT3RoZXJ3aXNlIHdlIGdldCBhbiBleHRyYSBibGFuaworICAlIGxpbmUgaW4gdGhlIG91dHB1dC4KKyAgXHhkZWZcZG92ZXJiYXRpbSMxXl5NIzJAZW5kIHZlcmJhdGlteyMyXG5vZXhwYW5kXGVuZFxnb2JibGUgdmVyYmF0aW19JQorICAlIFdlIHJlYWxseSB3YW50IHsuLi5cZW5kIHZlcmJhdGltfSBpbiB0aGUgYm9keSBvZiB0aGUgbWFjcm8sIGJ1dAorICAlIHdpdGhvdXQgdGhlIGFjdGl2ZSBzcGFjZTsgdGh1cyB3ZSBoYXZlIHRvIHVzZSBceGRlZiBhbmQgXGdvYmJsZS4KK1xlbmRncm91cAorJQorXGVudmRlZlx2ZXJiYXRpbXslCisgICAgXHNldHVwdmVyYmF0aW1cZG92ZXJiYXRpbQorfQorXGxldFxFdmVyYmF0aW0gPSBcYWZ0ZXJlbnZicmVhaworCisKKyUgQHZlcmJhdGltaW5jbHVkZSBGSUxFIC0gaW5zZXJ0IHRleHQgb2YgZmlsZSBpbiB2ZXJiYXRpbSBlbnZpcm9ubWVudC4KKyUKK1xkZWZcdmVyYmF0aW1pbmNsdWRle1xwYXJzZWFyZ3VzaW5nXGZpbGVuYW1lY2F0Y29kZXNcZG92ZXJiYXRpbWluY2x1ZGV9CislCitcZGVmXGRvdmVyYmF0aW1pbmNsdWRlIzF7JQorICB7JQorICAgIFxtYWtldmFsdWVleHBhbmRhYmxlCisgICAgXHNldHVwdmVyYmF0aW0KKyAgICBcaW5kZXhub2ZvbnRzICAgICAgICUgQWxsb3cgYEBAJyBhbmQgb3RoZXIgd2VpcmQgdGhpbmdzIGluIGZpbGUgbmFtZXMuCisgICAgXGlucHV0ICMxCisgICAgXGFmdGVyZW52YnJlYWsKKyAgfSUKK30KKworJSBAY29weWluZyAuLi4gQGVuZCBjb3B5aW5nLgorJSBTYXZlIHRoZSB0ZXh0IGF3YXkgZm9yIEBpbnNlcnRjb3B5aW5nIGxhdGVyLgorJQorJSBXZSBzYXZlIHRoZSB1bmludGVycHJldGVkIHRva2VucywgcmF0aGVyIHRoYW4gY3JlYXRpbmcgYSBib3guCislIFNhdmluZyB0aGUgdGV4dCBpbiBhIGJveCB3b3VsZCBiZSBtdWNoIGVhc2llciwgYnV0IHRoZW4gYWxsIHRoZQorJSB0eXBlc2V0dGluZyBjb21tYW5kcyAoQHNtYWxsYm9vaywgZm9udCBjaGFuZ2VzLCBldGMuKSBoYXZlIHRvIGJlIGRvbmUKKyUgYmVmb3JlaGFuZCAtLSBhbmQgYSkgd2Ugd2FudCBAY29weWluZyB0byBiZSBkb25lIGZpcnN0IGluIHRoZSBzb3VyY2UKKyUgZmlsZTsgYikgbGV0dGluZyB1c2VycyBkZWZpbmUgdGhlIGZyb250bWF0dGVyIGluIGFzIGZsZXhpYmxlIG9yZGVyIGFzCislIHBvc3NpYmxlIGlzIHZlcnkgZGVzaXJhYmxlLgorJQorXGRlZlxjb3B5aW5ne1xjaGVja2Vudnt9XGJlZ2luZ3JvdXBcc2NhbmFyZ2N0eHRcZG9jb3B5aW5nfQorXGRlZlxkb2NvcHlpbmcjMUBlbmQgY29weWluZ3tcZW5kZ3JvdXBcZGVmXGNvcHlpbmd0ZXh0eyMxfX0KKyUKK1xkZWZcaW5zZXJ0Y29weWluZ3slCisgIFxiZWdpbmdyb3VwCisgICAgXHBhcmluZGVudCA9IDBwdCAgJSBwYXJhZ3JhcGggaW5kZW50YXRpb24gbG9va3Mgd3Jvbmcgb24gdGl0bGUgcGFnZQorICAgIFxzY2FuZXhwXGNvcHlpbmd0ZXh0CisgIFxlbmRncm91cAorfQorCisKK1xtZXNzYWdle2RlZnVucyx9CislIEBkZWZ1biBldGMuCisKK1xuZXdza2lwXGRlZmJvZHlpbmRlbnQgXGRlZmJvZHlpbmRlbnQ9LjRpbgorXG5ld3NraXBcZGVmYXJnc2luZGVudCBcZGVmYXJnc2luZGVudD01MHB0CitcbmV3c2tpcFxkZWZsYXN0YXJnbWFyZ2luIFxkZWZsYXN0YXJnbWFyZ2luPTE4cHQKK1xuZXdjb3VudFxkZWZ1bnBlbmFsdHkKKworJSBTdGFydCB0aGUgcHJvY2Vzc2luZyBvZiBAZGVmZm46CitcZGVmXHN0YXJ0ZGVmdW57JQorICBcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDAKKyAgICBcbWVkYnJlYWsKKyAgICBcZGVmdW5wZW5hbHR5PTEwMDAzICUgV2lsbCBrZWVwIHRoaXMgQGRlZmZuIHRvZ2V0aGVyIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAlIGZvbGxvd2luZyBAZGVmIGNvbW1hbmQsIHNlZSBiZWxvdy4KKyAgXGVsc2UKKyAgICAlIElmIHRoZXJlIGFyZSB0d28gQGRlZiBjb21tYW5kcyBpbiBhIHJvdywgd2UnbGwgaGF2ZSBhIFxub2JyZWFrLAorICAgICUgd2hpY2ggaXMgdGhlcmUgdG8ga2VlcCB0aGUgZnVuY3Rpb24gZGVzY3JpcHRpb24gdG9nZXRoZXIgd2l0aCBpdHMKKyAgICAlIGhlYWRlci4gIEJ1dCBpZiB0aGVyZSdzIG5vdGhpbmcgYnV0IGhlYWRlcnMsIHdlIG5lZWQgdG8gYWxsb3cgYQorICAgICUgYnJlYWsgc29tZXdoZXJlLiAgQ2hlY2sgc3BlY2lmaWNhbGx5IGZvciBwZW5hbHR5IDEwMDAyLCBpbnNlcnRlZAorICAgICUgYnkgXHByaW50ZGVmdW5saW5lLCBpbnN0ZWFkIG9mIDEwMDAwLCBzaW5jZSB0aGUgc2VjdGlvbmluZworICAgICUgY29tbWFuZHMgYWxzbyBpbnNlcnQgYSBub2JyZWFrIHBlbmFsdHksIGFuZCB3ZSBkb24ndCB3YW50IHRvIGFsbG93CisgICAgJSBhIGJyZWFrIGJldHdlZW4gYSBzZWN0aW9uIGhlYWRpbmcgYW5kIGEgZGVmdW4uCisgICAgJQorICAgICUgQXMgYSBtaW5vciByZWZpbmVtZW50LCB3ZSBhdm9pZCAiY2x1YiIgaGVhZGVycyBieSBzaWduYWxsaW5nCisgICAgJSB3aXRoIHBlbmFsdHkgb2YgMTAwMDMgYWZ0ZXIgdGhlIHZlcnkgZmlyc3QgQGRlZmZuIGluIHRoZQorICAgICUgc2VxdWVuY2UgKHNlZSBhYm92ZSksIGFuZCBwZW5hbHR5IG9mIDEwMDAyIGFmdGVyIGFueSBmb2xsb3dpbmcKKyAgICAlIEBkZWYgY29tbWFuZC4KKyAgICBcaWZudW1cbGFzdHBlbmFsdHk9MTAwMDIgXHBlbmFsdHkyMDAwIFxlbHNlIFxkZWZ1bnBlbmFsdHk9MTAwMDIgXGZpCisgICAgJQorICAgICUgU2ltaWxhcmx5LCBhZnRlciBhIHNlY3Rpb24gaGVhZGluZywgZG8gbm90IGFsbG93IGEgYnJlYWsuCisgICAgJSBCdXQgZG8gaW5zZXJ0IHRoZSBnbHVlLgorICAgIFxtZWRza2lwICAlIHByZWNlZGVkIGJ5IGRpc2NhcmRhYmxlIHBlbmFsdHksIHNvIG5vdCBhIGJyZWFrcG9pbnQKKyAgXGZpCisgICUKKyAgXHBhcmluZGVudD0waW4KKyAgXGFkdmFuY2VcbGVmdHNraXAgYnkgXGRlZmJvZHlpbmRlbnQKKyAgXGV4ZGVudGFtb3VudD1cZGVmYm9keWluZGVudAorfQorCitcZGVmXGRvZGVmdW54IzF7JQorICAlIEZpcnN0LCBjaGVjayB3aGV0aGVyIHdlIGFyZSBpbiB0aGUgcmlnaHQgZW52aXJvbm1lbnQ6CisgIFxjaGVja2VudiMxJQorICAlCisgICUgQXMgYWJvdmUsIGFsbG93IGxpbmUgYnJlYWsgaWYgd2UgaGF2ZSBtdWx0aXBsZSB4IGhlYWRlcnMgaW4gYSByb3cuCisgICUgSXQncyBub3QgYSBncmVhdCBwbGFjZSwgdGhvdWdoLgorICBcaWZudW1cbGFzdHBlbmFsdHk9MTAwMDIgXHBlbmFsdHkzMDAwIFxlbHNlIFxkZWZ1bnBlbmFsdHk9MTAwMDIgXGZpCisgICUKKyAgJSBBbmQgbm93LCBpdCdzIHRpbWUgdG8gcmV1c2UgdGhlIGJvZHkgb2YgdGhlIG9yaWdpbmFsIGRlZnVuOgorICBcZXhwYW5kYWZ0ZXJcZ29iYmxlZGVmdW4jMSUKK30KK1xkZWZcZ29iYmxlZGVmdW4jMVxzdGFydGRlZnVue30KKworJSBccHJpbnRkZWZ1bmxpbmUgXGRlZmZuaGVhZGVye3RleHR9CislCitcZGVmXHByaW50ZGVmdW5saW5lIzEjMnslCisgIFxiZWdpbmdyb3VwCisgICAgJSBjYWxsIFxkZWZmbmhlYWRlcjoKKyAgICAjMSMyIFxlbmRoZWFkZXIKKyAgICAlIGNvbW1vbiBlbmRpbmc6CisgICAgXGludGVybGluZXBlbmFsdHkgPSAxMDAwMAorICAgIFxhZHZhbmNlXHJpZ2h0c2tpcCBieSAwcHQgcGx1cyAxZmlsCisgICAgXGVuZGdyYWYKKyAgICBcbm9icmVha1x2c2tpcCAtXHBhcnNraXAKKyAgICBccGVuYWx0eVxkZWZ1bnBlbmFsdHkgICUgc2lnbmFsIHRvIFxzdGFydGRlZnVuIGFuZCBcZG9kZWZ1bngKKyAgICAlIFNvbWUgb2YgdGhlIEBkZWZ1bi10eXBlIHRhZ3MgZG8gbm90IGVuYWJsZSBtYWdpYyBwYXJlbnRoZXNlcywKKyAgICAlIHJlbmRlcmluZyB0aGUgZm9sbG93aW5nIGNoZWNrIHJlZHVuZGFudC4gIEJ1dCB3ZSBkb24ndCBvcHRpbWl6ZS4KKyAgICBcY2hlY2twYXJlbmNvdW50cworICBcZW5kZ3JvdXAKK30KKworXGRlZlxFZGVmdW57XGVuZGdyYWZcbWVkYnJlYWt9CisKKyUgXG1ha2VkZWZ1bntkZWZmbn0gY3JlYXRlcyBcZGVmZm4sIFxkZWZmbnggYW5kIFxFZGVmZm47CislIHRoZSBvbmx5IHRoaW5nIHJlbWFpbmluZyBpcyB0byBkZWZpbmUgXGRlZmZuaGVhZGVyLgorJQorXGRlZlxtYWtlZGVmdW4jMXslCisgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIEUjMVxlbmRjc25hbWUgPSBcRWRlZnVuCisgIFxlZGVmXHRlbXB7XG5vZXhwYW5kXGRvbWFrZWRlZnVuCisgICAgXG1ha2Vjc25hbWV7IzF9XG1ha2Vjc25hbWV7IzF4fVxtYWtlY3NuYW1leyMxaGVhZGVyfX0lCisgIFx0ZW1wCit9CisKKyUgXGRvbWFrZWRlZnVuIFxkZWZmbiBcZGVmZm54IFxkZWZmbmhlYWRlcgorJQorJSBEZWZpbmUgXGRlZmZuIGFuZCBcZGVmZm54LCB3aXRob3V0IHBhcmFtZXRlcnMuCislIFxkZWZmbmhlYWRlciBoYXMgdG8gYmUgZGVmaW5lZCBleHBsaWNpdGx5LgorJQorXGRlZlxkb21ha2VkZWZ1biMxIzIjM3slCisgIFxlbnZkZWYjMXslCisgICAgXHN0YXJ0ZGVmdW4KKyAgICBccGFyc2Vhcmd1c2luZ1xhY3RpdmVwYXJlbnN7XHByaW50ZGVmdW5saW5lIzN9JQorICB9JQorICBcZGVmIzJ7XGRvZGVmdW54IzF9JQorICBcZGVmIzMlCit9CisKKyUlJSBVbnR5cGVkIGZ1bmN0aW9uczoKKworJSBAZGVmZm4gY2F0ZWdvcnkgbmFtZSBhcmdzCitcbWFrZWRlZnVue2RlZmZufXtcZGVmZm5nZW5lcmFse319CisKKyUgQGRlZmZuIGNhdGVnb3J5IGNsYXNzIG5hbWUgYXJncworXG1ha2VkZWZ1bntkZWZvcH0jMSB7XGRlZm9wb257IzFcIFxwdXR3b3Jkb259fQorCislIFxkZWZvcG9uIHtjYXRlZ29yeSBvbn1jbGFzcyBuYW1lIGFyZ3MKK1xkZWZcZGVmb3BvbiMxIzIge1xkZWZmbmdlbmVyYWx7XHB1dHdvcmRvblwgXGNvZGV7IzJ9fXsjMVwgXGNvZGV7IzJ9fSB9CisKKyUgXGRlZmZuZ2VuZXJhbCB7c3ViaW5kfWNhdGVnb3J5IG5hbWUgYXJncworJQorXGRlZlxkZWZmbmdlbmVyYWwjMSMyICMzICM0XGVuZGhlYWRlcnslCisgICUgUmVtZW1iZXIgdGhhdCBcZG9zdWJpbmR7Zm59e2Zvb317fSBpcyBlcXVpdmFsZW50IHRvIFxkb2luZHtmbn17Zm9vfS4KKyAgXGRvc3ViaW5ke2ZufXtcY29kZXsjM319eyMxfSUKKyAgXGRlZm5hbWV7IzJ9e317IzN9XG1hZ2ljYW1wXGRlZnVuYXJnc3sjNFx1bnNraXB9JQorfQorCislJSUgVHlwZWQgZnVuY3Rpb25zOgorCislIEBkZWZ0eXBlZm4gY2F0ZWdvcnkgdHlwZSBuYW1lIGFyZ3MKK1xtYWtlZGVmdW57ZGVmdHlwZWZufXtcZGVmdHlwZWZuZ2VuZXJhbHt9fQorCislIEBkZWZ0eXBlb3AgY2F0ZWdvcnkgY2xhc3MgdHlwZSBuYW1lIGFyZ3MKK1xtYWtlZGVmdW57ZGVmdHlwZW9wfSMxIHtcZGVmdHlwZW9wb257IzFcIFxwdXR3b3Jkb259fQorCislIFxkZWZ0eXBlb3BvbiB7Y2F0ZWdvcnkgb259Y2xhc3MgdHlwZSBuYW1lIGFyZ3MKK1xkZWZcZGVmdHlwZW9wb24jMSMyIHtcZGVmdHlwZWZuZ2VuZXJhbHtccHV0d29yZG9uXCBcY29kZXsjMn19eyMxXCBcY29kZXsjMn19IH0KKworJSBcZGVmdHlwZWZuZ2VuZXJhbCB7c3ViaW5kfWNhdGVnb3J5IHR5cGUgbmFtZSBhcmdzCislCitcZGVmXGRlZnR5cGVmbmdlbmVyYWwjMSMyICMzICM0ICM1XGVuZGhlYWRlcnslCisgIFxkb3N1YmluZHtmbn17XGNvZGV7IzR9fXsjMX0lCisgIFxkZWZuYW1leyMyfXsjM317IzR9XGRlZnVuYXJnc3sjNVx1bnNraXB9JQorfQorCislJSUgVHlwZWQgdmFyaWFibGVzOgorCislIEBkZWZ0eXBldnIgY2F0ZWdvcnkgdHlwZSB2YXIgYXJncworXG1ha2VkZWZ1bntkZWZ0eXBldnJ9e1xkZWZ0eXBlY3ZnZW5lcmFse319CisKKyUgQGRlZnR5cGVjdiBjYXRlZ29yeSBjbGFzcyB0eXBlIHZhciBhcmdzCitcbWFrZWRlZnVue2RlZnR5cGVjdn0jMSB7XGRlZnR5cGVjdm9meyMxXCBccHV0d29yZG9mfX0KKworJSBcZGVmdHlwZWN2b2Yge2NhdGVnb3J5IG9mfWNsYXNzIHR5cGUgdmFyIGFyZ3MKK1xkZWZcZGVmdHlwZWN2b2YjMSMyIHtcZGVmdHlwZWN2Z2VuZXJhbHtccHV0d29yZG9mXCBcY29kZXsjMn19eyMxXCBcY29kZXsjMn19IH0KKworJSBcZGVmdHlwZWN2Z2VuZXJhbCB7c3ViaW5kfWNhdGVnb3J5IHR5cGUgdmFyIGFyZ3MKKyUKK1xkZWZcZGVmdHlwZWN2Z2VuZXJhbCMxIzIgIzMgIzQgIzVcZW5kaGVhZGVyeyUKKyAgXGRvc3ViaW5ke3ZyfXtcY29kZXsjNH19eyMxfSUKKyAgXGRlZm5hbWV7IzJ9eyMzfXsjNH1cZGVmdW5hcmdzeyM1XHVuc2tpcH0lCit9CisKKyUlJSBVbnR5cGVkIHZhcmlhYmxlczoKKworJSBAZGVmdnIgY2F0ZWdvcnkgdmFyIGFyZ3MKK1xtYWtlZGVmdW57ZGVmdnJ9IzEge1xkZWZ0eXBldnJoZWFkZXJ7IzF9IHt9IH0KKworJSBAZGVmY3YgY2F0ZWdvcnkgY2xhc3MgdmFyIGFyZ3MKK1xtYWtlZGVmdW57ZGVmY3Z9IzEge1xkZWZjdm9meyMxXCBccHV0d29yZG9mfX0KKworJSBcZGVmY3ZvZiB7Y2F0ZWdvcnkgb2Z9Y2xhc3MgdmFyIGFyZ3MKK1xkZWZcZGVmY3ZvZiMxIzIge1xkZWZ0eXBlY3ZvZnsjMX0jMiB7fSB9CisKKyUlJSBUeXBlOgorJSBAZGVmdHAgY2F0ZWdvcnkgbmFtZSBhcmdzCitcbWFrZWRlZnVue2RlZnRwfSMxICMyICMzXGVuZGhlYWRlcnslCisgIFxkb2luZHt0cH17XGNvZGV7IzJ9fSUKKyAgXGRlZm5hbWV7IzF9e317IzJ9XGRlZnVuYXJnc3sjM1x1bnNraXB9JQorfQorCislIFJlbWFpbmluZyBAZGVmdW4tbGlrZSBzaG9ydGN1dHM6CitcbWFrZWRlZnVue2RlZnVufXtcZGVmZm5oZWFkZXJ7XHB1dHdvcmREZWZmdW5jfSB9CitcbWFrZWRlZnVue2RlZm1hY317XGRlZmZuaGVhZGVye1xwdXR3b3JkRGVmbWFjfSB9CitcbWFrZWRlZnVue2RlZnNwZWN9e1xkZWZmbmhlYWRlcntccHV0d29yZERlZnNwZWN9IH0KK1xtYWtlZGVmdW57ZGVmdHlwZWZ1bn17XGRlZnR5cGVmbmhlYWRlcntccHV0d29yZERlZmZ1bmN9IH0KK1xtYWtlZGVmdW57ZGVmdmFyfXtcZGVmdnJoZWFkZXJ7XHB1dHdvcmREZWZ2YXJ9IH0KK1xtYWtlZGVmdW57ZGVmb3B0fXtcZGVmdnJoZWFkZXJ7XHB1dHdvcmREZWZvcHR9IH0KK1xtYWtlZGVmdW57ZGVmdHlwZXZhcn17XGRlZnR5cGV2cmhlYWRlcntccHV0d29yZERlZnZhcn0gfQorXG1ha2VkZWZ1bntkZWZtZXRob2R9e1xkZWZvcG9uXHB1dHdvcmRNZXRob2Rvbn0KK1xtYWtlZGVmdW57ZGVmdHlwZW1ldGhvZH17XGRlZnR5cGVvcG9uXHB1dHdvcmRNZXRob2Rvbn0KK1xtYWtlZGVmdW57ZGVmaXZhcn17XGRlZmN2b2ZccHV0d29yZEluc3RhbmNlVmFyaWFibGVvZn0KK1xtYWtlZGVmdW57ZGVmdHlwZWl2YXJ9e1xkZWZ0eXBlY3ZvZlxwdXR3b3JkSW5zdGFuY2VWYXJpYWJsZW9mfQorCislIFxkZWZuYW1lLCB3aGljaCBmb3JtYXRzIHRoZSBuYW1lIG9mIHRoZSBAZGVmIChub3QgdGhlIGFyZ3MpLgorJSAjMSBpcyB0aGUgY2F0ZWdvcnksIHN1Y2ggYXMgIkZ1bmN0aW9uIi4KKyUgIzIgaXMgdGhlIHJldHVybiB0eXBlLCBpZiBhbnkuCislICMzIGlzIHRoZSBmdW5jdGlvbiBuYW1lLgorJQorJSBXZSBhcmUgZm9sbG93ZWQgYnkgKGJ1dCBub3QgcGFzc2VkKSB0aGUgYXJndW1lbnRzLCBpZiBhbnkuCislCitcZGVmXGRlZm5hbWUjMSMyIzN7JQorICAlIEdldCB0aGUgdmFsdWVzIG9mIFxsZWZ0c2tpcCBhbmQgXHJpZ2h0c2tpcCBhcyB0aGV5IHdlcmUgb3V0c2lkZSB0aGUgQGRlZi4uLgorICBcYWR2YW5jZVxsZWZ0c2tpcCBieSAtXGRlZmJvZHlpbmRlbnQKKyAgJQorICAlIEhvdyB3ZSdsbCBmb3JtYXQgdGhlIHR5cGUgbmFtZS4gIFB1dHRpbmcgaXQgaW4gYnJhY2tldHMgaGVscHMKKyAgJSBkaXN0aW5ndWlzaCBpdCBmcm9tIHRoZSBib2R5IHRleHQgdGhhdCBtYXkgZW5kIHVwIG9uIHRoZSBuZXh0IGxpbmUKKyAgJSBqdXN0IGJlbG93IGl0LgorICBcZGVmXHRlbXB7IzF9JQorICBcc2V0Ym94MD1caGJveHtca2VyblxkZWZsYXN0YXJnbWFyZ2luIFxpZnhcdGVtcFxlbXB0eVxlbHNlIFtccm1cdGVtcF1cZml9CisgICUKKyAgJSBGaWd1cmUgb3V0IGxpbmUgc2l6ZXMgZm9yIHRoZSBwYXJhZ3JhcGggc2hhcGUuCisgICUgVGhlIGZpcnN0IGxpbmUgbmVlZHMgc3BhY2UgZm9yIFxib3gwOyBidXQgaWYgXHJpZ2h0c2tpcCBpcyBub256ZXJvLAorICAlIHdlIG5lZWQgb25seSBzcGFjZSBmb3IgdGhlIHBhcnQgb2YgXGJveDAgd2hpY2ggZXhjZWVkcyBpdDoKKyAgXGRpbWVuMD1caHNpemUgIFxhZHZhbmNlXGRpbWVuMCBieSAtXHdkMCAgXGFkdmFuY2VcZGltZW4wIGJ5IFxyaWdodHNraXAKKyAgJSBUaGUgY29udGludWF0aW9uczoKKyAgXGRpbWVuMj1caHNpemUgIFxhZHZhbmNlXGRpbWVuMiBieSAtXGRlZmFyZ3NpbmRlbnQKKyAgJSAocGxhaW4udGV4IHNheXMgdGhhdCBcZGltZW4xIHNob3VsZCBiZSB1c2VkIG9ubHkgYXMgZ2xvYmFsLikKKyAgXHBhcnNoYXBlIDIgMGluIFxkaW1lbjAgXGRlZmFyZ3NpbmRlbnQgXGRpbWVuMgorICAlCisgICUgUHV0IHRoZSB0eXBlIG5hbWUgdG8gdGhlIHJpZ2h0IG1hcmdpbi4KKyAgXG5vaW5kZW50CisgIFxoYm94IHRvIDBwdHslCisgICAgXGhmaWxcYm94MCBca2Vybi1caHNpemUKKyAgICAlIFxoc2l6ZSBoYXMgdG8gYmUgc2hvcnRlbmVkIHRoaXMgd2F5OgorICAgIFxrZXJuXGxlZnRza2lwCisgICAgJSBJbnRlbnRpb25hbGx5IGRvIG5vdCByZXNwZWN0IFxyaWdodHNraXAsIHNpbmNlIHdlIG5lZWQgdGhlIHNwYWNlLgorICB9JQorICAlCisgICUgQWxsb3cgYWxsIGxpbmVzIHRvIGJlIHVuZGVyZnVsbCB3aXRob3V0IGNvbXBsYWludDoKKyAgXHRvbGVyYW5jZT0xMDAwMCBcaGJhZG5lc3M9MTAwMDAKKyAgXGV4ZGVudGFtb3VudD1cZGVmYm9keWluZGVudAorICB7JQorICAgICUgZGVmdW4gZm9udHMuIFdlIHVzZSB0eXBld3JpdGVyIGJ5IGRlZmF1bHQgKHVzZWQgdG8gYmUgYm9sZCkgYmVjYXVzZToKKyAgICAlIC4gd2UncmUgcHJpbnRpbmcgaWRlbnRpZmllcnMsIHRoZXkgc2hvdWxkIGJlIGluIHR0IGluIHByaW5jaXBsZS4KKyAgICAlIC4gaW4gbGFuZ3VhZ2VzIHdpdGggbWFueSBhY2NlbnRzLCBzdWNoIGFzIEN6ZWNoIG9yIEZyZW5jaCwgaXQncworICAgICUgICBjb21tb24gdG8gbGVhdmUgYWNjZW50cyBvZmYgaWRlbnRpZmllcnMuICBUaGUgcmVzdWx0IGxvb2tzIG9rIGluCisgICAgJSAgIHR0LCBidXQgZXhjZWVkaW5nbHkgc3RyYW5nZSBpbiBybS4KKyAgICAlIC4gd2UgZG9uJ3Qgd2FudCAtLSBhbmQgLS0tIHRvIGJlIHRyZWF0ZWQgYXMgbGlnYXR1cmVzLgorICAgICUgLiB0aGlzIHN0aWxsIGRvZXMgbm90IGZpeCB0aGUgP2AgYW5kICFgIGxpZ2F0dXJlcywgYnV0IHNvIGZhciBubworICAgICUgICBvbmUgaGFzIG1hZGUgaWRlbnRpZmllcnMgdXNpbmcgdGhlbSA6KS4KKyAgICBcZGYgXHR0CisgICAgXGRlZlx0ZW1weyMyfSUgcmV0dXJuIHZhbHVlIHR5cGUKKyAgICBcaWZ4XHRlbXBcZW1wdHlcZWxzZSBcdGNsb3Nle1x0ZW1wfSBcZmkKKyAgICAjMyUgb3V0cHV0IGZ1bmN0aW9uIG5hbWUKKyAgfSUKKyAge1xybVxlbnNraXB9JSBoc2tpcCAwLjUgZW0gb2YgXHRlbnJtCisgICUKKyAgXGJvbGRicmF4CisgICUgYXJndW1lbnRzIHdpbGwgYmUgb3V0cHV0IG5leHQsIGlmIGFueS4KK30KKworJSBQcmludCBhcmd1bWVudHMgaW4gc2xhbnRlZCByb21hbiAobm90IHR0c2wpLCBpbmNvbnNpc3RlbnRseSB3aXRoIHVzaW5nCislIHR0IGZvciB0aGUgbmFtZS4gIFRoaXMgaXMgYmVjYXVzZSBsaXRlcmFsIHRleHQgaXMgc29tZXRpbWVzIG5lZWRlZCBpbgorJSB0aGUgYXJndW1lbnQgbGlzdCAoZ3JvZmYgbWFudWFsKSwgYW5kIHR0c2wgYW5kIHR0IGFyZSBub3QgdmVyeQorJSBkaXN0aW5ndWlzaGFibGUuICBQcmV2ZW50IGh5cGhlbmF0aW9uIGF0IGAtJyBjaGFycy4KKyUKK1xkZWZcZGVmdW5hcmdzIzF7JQorICAlIHVzZSBzbCBieSBkZWZhdWx0IChub3QgdHRzbCksCisgICUgdHQgZm9yIHRoZSBuYW1lcy4KKyAgXGRmIFxzbCBcaHlwaGVuY2hhclxmb250PTAKKyAgJQorICAlIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBhbiBhcmd1bWVudCBoYXMgdHdvIGRhc2hlcyAoZm9yIGluc3RhbmNlKSwgd2UKKyAgJSB3YW50IGEgd2F5IHRvIGdldCB0dHNsLiAgTGV0J3MgdHJ5IEB2YXIgZm9yIHRoYXQuCisgIFxkZWZcdmFyIyMxe3tcc2V0dXBtYXJrdXBzdHlsZXt2YXJ9XHR0c2xhbnRlZHsjIzF9fX0lCisgICMxJQorICBcc2xcaHlwaGVuY2hhclxmb250PTQ1Cit9CisKKyUgV2Ugd2FudCAoKSZbXSB0byBwcmludCBzcGVjaWFsbHkgb24gdGhlIGRlZnVuIGxpbmUuCislCitcZGVmXGFjdGl2ZXBhcmVuc3slCisgIFxjYXRjb2RlYFwoPVxhY3RpdmUgXGNhdGNvZGVgXCk9XGFjdGl2ZQorICBcY2F0Y29kZWBcWz1cYWN0aXZlIFxjYXRjb2RlYFxdPVxhY3RpdmUKKyAgXGNhdGNvZGVgXCY9XGFjdGl2ZQorfQorCislIE1ha2UgY29udHJvbCBzZXF1ZW5jZXMgd2hpY2ggYWN0IGxpa2Ugbm9ybWFsIHBhcmVudGhlc2lzIGNoYXJzLgorXGxldFxscGFyZW4gPSAoIFxsZXRccnBhcmVuID0gKQorCislIEJlIHN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIGRlZmluaXRpb24gZm9yIGAoJywgZXRjLiAgRm9yIGV4YW1wbGUsCislIGlmIHRoZSBmbiBuYW1lIGhhcyBwYXJlbnMgaW4gaXQsIFxib2xkYnJheCB3aWxsIG5vdCBiZSBpbiBlZmZlY3QgeWV0LAorJSBzbyBUZVggd291bGQgb3RoZXJ3aXNlIGNvbXBsYWluIGFib3V0IHVuZGVmaW5lZCBjb250cm9sIHNlcXVlbmNlLgoreworICBcYWN0aXZlcGFyZW5zCisgIFxnbG9iYWxcbGV0KD1cbHBhcmVuIFxnbG9iYWxcbGV0KT1ccnBhcmVuCisgIFxnbG9iYWxcbGV0Wz1cbGJyYWNrIFxnbG9iYWxcbGV0XT1ccmJyYWNrCisgIFxnbG9iYWxcbGV0JiA9IFwmCisKKyAgXGdkZWZcYm9sZGJyYXh7XGxldCg9XG9wbnJcbGV0KT1cY2xuclxsZXRbPVxsYnJiXGxldF09XHJicmJ9CisgIFxnZGVmXG1hZ2ljYW1we1xsZXQmPVxhbXBybX0KK30KKworXG5ld2NvdW50XHBhcmVuY291bnQKKworJSBJZiB3ZSBlbmNvdW50ZXIgJmZvbywgdGhlbiB0dXJuIG9uICgpLWhhY2tpbmcgYWZ0ZXJ3YXJkcworXG5ld2lmXGlmYW1wc2VlbgorXGRlZlxhbXBybSMxIHtcYW1wc2VlbnRydWV7XGJmXCYjMSB9fQorCitcZGVmXHBhcmVuZm9udHslCisgIFxpZmFtcHNlZW4KKyAgICAlIEF0IHRoZSBmaXJzdCBsZXZlbCwgcHJpbnQgcGFyZW5zIGluIHJvbWFuLAorICAgICUgb3RoZXJ3aXNlIHVzZSB0aGUgZGVmYXVsdCBmb250LgorICAgIFxpZm51bSBccGFyZW5jb3VudD0xIFxybSBcZmkKKyAgXGVsc2UKKyAgICAlIFRoZSBcc2YgcGFyZW5zIChpbiBcYm9sZGJyYXgpIGFjdHVhbGx5IGFyZSBhIGxpdHRsZSBib2xkZXIgdGhhbgorICAgICUgdGhlIGNvbnRhaW5lZCB0ZXh0LiAgVGhpcyBpcyBlc3BlY2lhbGx5IG5lZWRlZCBmb3IgWyBhbmQgXSAuCisgICAgXHNmCisgIFxmaQorfQorXGRlZlxpbmZpcnN0bGV2ZWwjMXslCisgIFxpZmFtcHNlZW4KKyAgICBcaWZudW1ccGFyZW5jb3VudD0xCisgICAgICAjMSUKKyAgICBcZmkKKyAgXGZpCit9CitcZGVmXGJmYWZ0ZXJ3b3JkIzEgeyMxIFxiZn0KKworXGRlZlxvcG5yeyUKKyAgXGdsb2JhbFxhZHZhbmNlXHBhcmVuY291bnQgYnkgMQorICB7XHBhcmVuZm9udCh9JQorICBcaW5maXJzdGxldmVsIFxiZmFmdGVyd29yZAorfQorXGRlZlxjbG5yeyUKKyAge1xwYXJlbmZvbnQpfSUKKyAgXGluZmlyc3RsZXZlbCBcc2wKKyAgXGdsb2JhbFxhZHZhbmNlXHBhcmVuY291bnQgYnkgLTEKK30KKworXG5ld2NvdW50XGJyYWNrY291bnQKK1xkZWZcbGJyYnslCisgIFxnbG9iYWxcYWR2YW5jZVxicmFja2NvdW50IGJ5IDEKKyAge1xiZlt9JQorfQorXGRlZlxyYnJieyUKKyAge1xiZl19JQorICBcZ2xvYmFsXGFkdmFuY2VcYnJhY2tjb3VudCBieSAtMQorfQorCitcZGVmXGNoZWNrcGFyZW5jb3VudHN7JQorICBcaWZudW1ccGFyZW5jb3VudD0wIFxlbHNlIFxiYWRwYXJlbmNvdW50IFxmaQorICBcaWZudW1cYnJhY2tjb3VudD0wIFxlbHNlIFxiYWRicmFja2NvdW50IFxmaQorfQorJSB0aGVzZSBzaG91bGQgbm90IHVzZSBcZXJybWVzc2FnZTsgdGhlIGdsaWJjIG1hbnVhbCwgYXQgbGVhc3QsIGFjdHVhbGx5CislIGhhcyBzdWNoIGNvbnN0cnVjdHMgKHdoZW4gZG9jdW1lbnRpbmcgZnVuY3Rpb24gcG9pbnRlcnMpLgorXGRlZlxiYWRwYXJlbmNvdW50eyUKKyAgXG1lc3NhZ2V7V2FybmluZzogdW5iYWxhbmNlZCBwYXJlbnRoZXNlcyBpbiBAZGVmLi4ufSUKKyAgXGdsb2JhbFxwYXJlbmNvdW50PTAKK30KK1xkZWZcYmFkYnJhY2tjb3VudHslCisgIFxtZXNzYWdle1dhcm5pbmc6IHVuYmFsYW5jZWQgc3F1YXJlIGJyYWNrZXRzIGluIEBkZWYuLi59JQorICBcZ2xvYmFsXGJyYWNrY291bnQ9MAorfQorCisKK1xtZXNzYWdle21hY3Jvcyx9CislIEBtYWNyby4KKworJSBUbyBkbyB0aGlzIHJpZ2h0IHdlIG5lZWQgYSBmZWF0dXJlIG9mIGUtVGVYLCBcc2NhbnRva2VucywKKyUgd2hpY2ggd2UgYXJyYW5nZSB0byBlbXVsYXRlIHdpdGggYSB0ZW1wb3JhcnkgZmlsZSBpbiBvcmRpbmFyeSBUZVguCitcaWZ4XGVUZVh2ZXJzaW9uXHVuZGVmaW5lZAorICBcbmV3d3JpdGVcbWFjc2NyaWJibGUKKyAgXGRlZlxzY2FudG9rZW5zIzF7JQorICAgIFx0b2tzMD17IzF9JQorICAgIFxpbW1lZGlhdGVcb3Blbm91dFxtYWNzY3JpYmJsZT1cam9ibmFtZS50bXAKKyAgICBcaW1tZWRpYXRlXHdyaXRlXG1hY3NjcmliYmxle1x0aGVcdG9rczB9JQorICAgIFxpbW1lZGlhdGVcY2xvc2VvdXRcbWFjc2NyaWJibGUKKyAgICBcaW5wdXQgXGpvYm5hbWUudG1wCisgIH0KK1xmaQorCitcZGVmXHNjYW5tYWNybyMxeyUKKyAgXGJlZ2luZ3JvdXAKKyAgICBcbmV3bGluZWNoYXJgXF5eTQorICAgIFxsZXRceGVhdHNwYWNlc1xlYXRzcGFjZXMKKyAgICAlIFVuZG8gY2F0Y29kZSBjaGFuZ2VzIG9mIFxzdGFydGNvbnRlbnRzIGFuZCBcZG9wcmludGluZGV4CisgICAgJSBXaGVuIGNhbGxlZCBmcm9tIEBpbnNlcnRjb3B5aW5nIG9yIChzaG9ydCljYXB0aW9uLCB3ZSBuZWVkIGFjdGl2ZQorICAgICUgYmFja3NsYXNoIHRvIGdldCBpdCBwcmludGVkIGNvcnJlY3RseS4gIFByZXZpb3VzbHksIHdlIGhhZAorICAgICUgXGNhdGNvZGVgXFw9XG90aGVyIGluc3RlYWQuICBXZSdsbCBzZWUgd2hldGhlciBhIHByb2JsZW0gYXBwZWFycworICAgICUgd2l0aCBtYWNybyBleHBhbnNpb24uCQkJCS0ta2FzYWwsIDE5YXVnMDQKKyAgICBcY2F0Y29kZWBcQD0wIFxjYXRjb2RlYFxcPVxhY3RpdmUgXGVzY2FwZWNoYXI9YFxACisgICAgJSAuLi4gYW5kIFxleGFtcGxlCisgICAgXHNwYWNlaXNzcGFjZQorICAgICUKKyAgICAlIEFwcGVuZCBcZW5kaW5wdXQgdG8gbWFrZSBzdXJlIHRoYXQgVGVYIGRvZXMgbm90IHNlZSB0aGUgZW5kaW5nIG5ld2xpbmUuCisgICAgJSBJJ3ZlIHZlcmlmaWVkIHRoYXQgaXQgaXMgbmVjZXNzYXJ5IGJvdGggZm9yIGUtVGVYIGFuZCBmb3Igb3JkaW5hcnkgVGVYCisgICAgJQkJCQkJCQktLWthc2FsLCAyOW5vdjAzCisgICAgXHNjYW50b2tlbnN7IzFcZW5kaW5wdXR9JQorICBcZW5kZ3JvdXAKK30KKworXGRlZlxzY2FuZXhwIzF7JQorICBcZWRlZlx0ZW1we1xub2V4cGFuZFxzY2FubWFjcm97IzF9fSUKKyAgXHRlbXAKK30KKworXG5ld2NvdW50XHBhcmFtbm8gICAlIENvdW50IG9mIHBhcmFtZXRlcnMKK1xuZXd0b2tzXG1hY25hbWUgICAgJSBNYWNybyBuYW1lCitcbmV3aWZcaWZyZWN1cnNpdmUgICUgSXMgaXQgcmVjdXJzaXZlPworCislIExpc3Qgb2YgYWxsIGRlZmluZWQgbWFjcm9zIGluIHRoZSBmb3JtCislICAgIFxkZWZpbmVkdW1teXdvcmRcbWFjcm8xXGRlZmluZWR1bW15d29yZFxtYWNybzIuLi4KKyUgQ3VycmVudGx5IGlzIGFsc28gY29udGFpbnMgYWxsIEBhbGlhc2VzOyB0aGUgbGlzdCBjYW4gYmUgc3BsaXQKKyUgaWYgdGhlcmUgaXMgYSBuZWVkLgorXGRlZlxtYWNyb2xpc3R7fQorCislIEFkZCB0aGUgbWFjcm8gdG8gXG1hY3JvbGlzdAorXGRlZlxhZGR0b21hY3JvbGlzdCMxe1xleHBhbmRhZnRlciBcYWRkdG9tYWNyb2xpc3R4eHggXGNzbmFtZSMxXGVuZGNzbmFtZX0KK1xkZWZcYWRkdG9tYWNyb2xpc3R4eHgjMXslCisgICAgIFx0b2tzMCA9IFxleHBhbmRhZnRlcntcbWFjcm9saXN0XGRlZmluZWR1bW15d29yZCMxfSUKKyAgICAgXHhkZWZcbWFjcm9saXN0e1x0aGVcdG9rczB9JQorfQorCislIFV0aWxpdHkgcm91dGluZXMuCislIFRoaXMgZG9lcyBcbGV0ICMxID0gIzIsIHdpdGggXGNzbmFtZXM7IHRoYXQgaXMsCislICAgXGxldCBcY3NuYW1lIzFcZW5kY3NuYW1lID0gXGNzbmFtZSMyXGVuZGNzbmFtZQorJSAoZXhjZXB0IG9mIGNvdXJzZSB3ZSBoYXZlIHRvIHBsYXkgZXhwYW5zaW9uIGdhbWVzKS4KKyUKK1xkZWZcY3NsZXQjMSMyeyUKKyAgXGV4cGFuZGFmdGVyXGxldAorICBcY3NuYW1lIzFcZXhwYW5kYWZ0ZXJcZW5kY3NuYW1lCisgIFxjc25hbWUjMlxlbmRjc25hbWUKK30KKworJSBUcmltIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBvZmYgYSBzdHJpbmcuCislIENvbmNlcHRzIGZyb20gYXJvLWJlbmQgcHJvYmxlbSAxNSAoc2VlIENUQU4pLgore1xjYXRjb2RlYFxAPTExCitcZ2RlZlxlYXRzcGFjZXMgIzF7XGV4cGFuZGFmdGVyXHRyaW1AXGV4cGFuZGFmdGVyeyMxIH19CitcZ2RlZlx0cmltQCAjMXtcdHJpbUBAIEAjMSBAICMxIEAgQEB9CitcZ2RlZlx0cmltQEAgIzFAICMyQCAjM0BAe1x0cmltQEBAXGVtcHR5ICMyIEB9CitcZGVmXHVuYnJhY2UjMXsjMX0KK1x1bmJyYWNle1xnZGVmXHRyaW1AQEAgIzEgfSAjMkB7IzF9Cit9CisKKyUgVHJpbSBhIHNpbmdsZSB0cmFpbGluZyBeXk0gb2ZmIGEgc3RyaW5nLgore1xjYXRjb2RlYFxeXk09XG90aGVyIFxjYXRjb2RlYFxRPTMlCitcZ2RlZlxlYXRjciAjMXtcZWF0Y3JhICMxUV5eTVF9JQorXGdkZWZcZWF0Y3JhIzFeXk1Re1xlYXRjcmIjMVF9JQorXGdkZWZcZWF0Y3JiIzFRIzJReyMxfSUKK30KKworJSBNYWNybyBib2RpZXMgYXJlIGFic29yYmVkIGFzIGFuIGFyZ3VtZW50IGluIGEgY29udGV4dCB3aGVyZQorJSBhbGwgY2hhcmFjdGVycyBhcmUgY2F0Y29kZSAxMCwgMTEgb3IgMTIsIGV4Y2VwdCBcIHdoaWNoIGlzIGFjdGl2ZQorJSAoYXMgaW4gbm9ybWFsIHRleGluZm8pLiBJdCBpcyBuZWNlc3NhcnkgdG8gY2hhbmdlIHRoZSBkZWZpbml0aW9uIG9mIFwuCisKKyUgTm9uLUFTQ0lJIGVuY29kaW5ncyBtYWtlIDgtYml0IGNoYXJhY3RlcnMgYWN0aXZlLCBzbyB1bi1hY3RpdmF0ZQorJSB0aGVtIHRvIGF2b2lkIHRoZWlyIGV4cGFuc2lvbi4gIE11c3QgZG8gdGhpcyBub24tZ2xvYmFsbHksIHRvCislIGNvbmZpbmUgdGhlIGNoYW5nZSB0byB0aGUgY3VycmVudCBncm91cC4KKworJSBJdCdzIG5lY2Vzc2FyeSB0byBoYXZlIGhhcmQgQ1JzIHdoZW4gdGhlIG1hY3JvIGlzIGV4ZWN1dGVkLiBUaGlzIGlzCislIGRvbmUgYnkgIG1ha2luZyBeXk0gKFxlbmRsaW5lY2hhcikgY2F0Y29kZSAxMiB3aGVuIHJlYWRpbmcgdGhlIG1hY3JvCislIGJvZHksIGFuZCB0aGVuIG1ha2luZyBpdCB0aGUgXG5ld2xpbmVjaGFyIGluIFxzY2FubWFjcm8uCisKK1xkZWZcc2NhbmN0eHR7JQorICBcY2F0Y29kZWBcIj1cb3RoZXIKKyAgXGNhdGNvZGVgXCs9XG90aGVyCisgIFxjYXRjb2RlYFw8PVxvdGhlcgorICBcY2F0Y29kZWBcPj1cb3RoZXIKKyAgXGNhdGNvZGVgXEA9XG90aGVyCisgIFxjYXRjb2RlYFxePVxvdGhlcgorICBcY2F0Y29kZWBcXz1cb3RoZXIKKyAgXGNhdGNvZGVgXHw9XG90aGVyCisgIFxjYXRjb2RlYFx+PVxvdGhlcgorICBcaWZ4XGRlY2xhcmVkZW5jb2RpbmdcYXNjaWkgXGVsc2UgXHNldG5vbmFzY2lpY2hhcnNjYXRjb2Rlbm9uZ2xvYmFsXG90aGVyIFxmaQorfQorCitcZGVmXHNjYW5hcmdjdHh0eyUKKyAgXHNjYW5jdHh0CisgIFxjYXRjb2RlYFxcPVxvdGhlcgorICBcY2F0Y29kZWBcXl5NPVxvdGhlcgorfQorCitcZGVmXG1hY3JvYm9keWN0eHR7JQorICBcc2NhbmN0eHQKKyAgXGNhdGNvZGVgXHs9XG90aGVyCisgIFxjYXRjb2RlYFx9PVxvdGhlcgorICBcY2F0Y29kZWBcXl5NPVxvdGhlcgorICBcdXNlbWJvZHliYWNrc2xhc2gKK30KKworXGRlZlxtYWNyb2FyZ2N0eHR7JQorICBcc2NhbmN0eHQKKyAgXGNhdGNvZGVgXFw9XG90aGVyCit9CisKKyUgXG1ib2R5YmFja3NsYXNoIGlzIHRoZSBkZWZpbml0aW9uIG9mIFwgaW4gQG1hY3JvIGJvZGllcy4KKyUgSXQgbWFwcyBcZm9vXCA9PiBcY3NuYW1lIG1hY2FyZy5mb29cZW5kY3NuYW1lID0+ICNOCislIHdoZXJlIE4gaXMgdGhlIG1hY3JvIHBhcmFtZXRlciBudW1iZXIuCislIFdlIGRlZmluZSBcY3NuYW1lIG1hY2FyZy5cZW5kY3NuYW1lIHRvIGJlIFxyZWFsYmFja3NsYXNoLCBzbworJSBcXCBpbiBtYWNybyByZXBsYWNlbWVudCB0ZXh0IGdldHMgeW91IGEgYmFja3NsYXNoLgorCit7XGNhdGNvZGVgQD0wIEBjYXRjb2RlYEBcPUBhY3RpdmUKKyBAZ2RlZkB1c2VtYm9keWJhY2tzbGFzaHtAbGV0XD1AbWJvZHliYWNrc2xhc2h9CisgQGdkZWZAbWJvZHliYWNrc2xhc2gjMVx7QGNzbmFtZSBtYWNhcmcuIzFAZW5kY3NuYW1lfQorfQorXGV4cGFuZGFmdGVyXGRlZlxjc25hbWUgbWFjYXJnLlxlbmRjc25hbWV7XHJlYWxiYWNrc2xhc2h9CisKK1xkZWZcbWFjcm97XHJlY3Vyc2l2ZWZhbHNlXHBhcnNlYXJnXG1hY3JveHh4fQorXGRlZlxybWFjcm97XHJlY3Vyc2l2ZXRydWVccGFyc2VhcmdcbWFjcm94eHh9CisKK1xkZWZcbWFjcm94eHgjMXslCisgIFxnZXRhcmdzeyMxfSUgICAgICAgICAgIG5vdyBcbWFjbmFtZSBpcyB0aGUgbWFjbmFtZSBhbmQgXGFyZ2wgdGhlIGFyZ2xpc3QKKyAgXGlmeFxhcmdsXGVtcHR5ICAgICAgICUgbm8gYXJndW1lbnRzCisgICAgIFxwYXJhbW5vPTAlCisgIFxlbHNlCisgICAgIFxleHBhbmRhZnRlclxwYXJzZW1hcmdkZWYgXGFyZ2w7JQorICBcZmkKKyAgXGlmMVxjc25hbWUgaXNtYWNyby5cdGhlXG1hY25hbWVcZW5kY3NuYW1lCisgICAgIFxtZXNzYWdle1dhcm5pbmc6IHJlZGVmaW5pbmcgXHRoZVxtYWNuYW1lfSUKKyAgXGVsc2UKKyAgICAgXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgXHRoZVxtYWNuYW1lXGVuZGNzbmFtZSBccmVsYXgKKyAgICAgXGVsc2UgXGVycm1lc3NhZ2V7TWFjcm8gbmFtZSBcdGhlXG1hY25hbWVcc3BhY2UgYWxyZWFkeSBkZWZpbmVkfVxmaQorICAgICBcZ2xvYmFsXGNzbGV0e21hY3NhdmUuXHRoZVxtYWNuYW1lfXtcdGhlXG1hY25hbWV9JQorICAgICBcZ2xvYmFsXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgaXNtYWNyby5cdGhlXG1hY25hbWVcZW5kY3NuYW1lPTElCisgICAgIFxhZGR0b21hY3JvbGlzdHtcdGhlXG1hY25hbWV9JQorICBcZmkKKyAgXGJlZ2luZ3JvdXAgXG1hY3JvYm9keWN0eHQKKyAgXGlmcmVjdXJzaXZlIFxleHBhbmRhZnRlclxwYXJzZXJtYWNib2R5CisgIFxlbHNlIFxleHBhbmRhZnRlclxwYXJzZW1hY2JvZHkKKyAgXGZpfQorCitccGFyc2VhcmdkZWZcdW5tYWNyb3slCisgIFxpZjFcY3NuYW1lIGlzbWFjcm8uIzFcZW5kY3NuYW1lCisgICAgXGdsb2JhbFxjc2xldHsjMX17bWFjc2F2ZS4jMX0lCisgICAgXGdsb2JhbFxleHBhbmRhZnRlclxsZXQgXGNzbmFtZSBpc21hY3JvLiMxXGVuZGNzbmFtZT0wJQorICAgICUgUmVtb3ZlIHRoZSBtYWNybyBuYW1lIGZyb20gXG1hY3JvbGlzdDoKKyAgICBcYmVnaW5ncm91cAorICAgICAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUjMVxlbmRjc25hbWUgXHJlbGF4CisgICAgICBcbGV0XGRlZmluZWR1bW15d29yZFx1bm1hY3JvZG8KKyAgICAgIFx4ZGVmXG1hY3JvbGlzdHtcbWFjcm9saXN0fSUKKyAgICBcZW5kZ3JvdXAKKyAgXGVsc2UKKyAgICBcZXJybWVzc2FnZXtNYWNybyAjMSBub3QgZGVmaW5lZH0lCisgIFxmaQorfQorCislIENhbGxlZCBieSBcZG8gZnJvbSBcZG91bm1hY3JvIG9uIGVhY2ggbWFjcm8uICBUaGUgaWRlYSBpcyB0byBvbWl0IGFueQorJSBtYWNybyBkZWZpbml0aW9ucyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHRvIFxyZWxheC4KKyUKK1xkZWZcdW5tYWNyb2RvIzF7JQorICBcaWZ4ICMxXHJlbGF4CisgICAgJSByZW1vdmUgdGhpcworICBcZWxzZQorICAgIFxub2V4cGFuZFxkZWZpbmVkdW1teXdvcmQgXG5vZXhwYW5kIzElCisgIFxmaQorfQorCislIFRoaXMgbWFrZXMgdXNlIG9mIHRoZSBvYnNjdXJlIGZlYXR1cmUgdGhhdCBpZiB0aGUgbGFzdCB0b2tlbiBvZiBhCislIDxwYXJhbWV0ZXIgbGlzdD4gaXMgIywgdGhlbiB0aGUgcHJlY2VkaW5nIGFyZ3VtZW50IGlzIGRlbGltaXRlZCBieQorJSBhbiBvcGVuaW5nIGJyYWNlLCBhbmQgdGhhdCBvcGVuaW5nIGJyYWNlIGlzIG5vdCBjb25zdW1lZC4KK1xkZWZcZ2V0YXJncyMxe1xnZXRhcmdzeHh4IzF7fX0KK1xkZWZcZ2V0YXJnc3h4eCMxI3tcZ2V0bWFjbmFtZSAjMSBccmVsYXhcZ2V0bWFjYXJnc30KK1xkZWZcZ2V0bWFjbmFtZSAjMSAjMlxyZWxheHtcbWFjbmFtZT17IzF9fQorXGRlZlxnZXRtYWNhcmdzIzF7XGRlZlxhcmdseyMxfX0KKworJSBQYXJzZSB0aGUgb3B0aW9uYWwge3BhcmFtc30gbGlzdC4gIFNldCB1cCBccGFyYW1ubyBhbmQgXHBhcmFtbGlzdAorJSBzbyBcZGVmbWFjcm8ga25vd3Mgd2hhdCB0byBkby4gIERlZmluZSBcbWFjYXJnLmJsYWggZm9yIGVhY2ggYmxhaAorJSBpbiB0aGUgcGFyYW1zIGxpc3QsIHRvIGJlICMjTiB3aGVyZSBOIGlzIHRoZSBwb3NpdGlvbiBpbiB0aGF0IGxpc3QuCislIFRoYXQgZ2V0cyB1c2VkIGJ5IFxtYm9keWJhY2tzbGFzaCAoYWJvdmUpLgorCislIFdlIG5lZWQgdG8gZ2V0IGBtYWNybyBwYXJhbWV0ZXIgY2hhciAjJyBpbnRvIHNldmVyYWwgZGVmaW5pdGlvbnMuCislIFRoZSB0ZWNobmlxdWUgdXNlZCBpcyBzdG9sZW4gZnJvbSBMYVRlWDogIGxldCBcaGFzaCBiZSBzb21ldGhpbmcKKyUgdW5leHBhbmRhYmxlLCBpbnNlcnQgdGhhdCB3aGVyZXZlciB5b3UgbmVlZCBhICMsIGFuZCB0aGVuIHJlZGVmaW5lCislIGl0IHRvICMganVzdCBiZWZvcmUgdXNpbmcgdGhlIHRva2VuIGxpc3QgcHJvZHVjZWQuCislCislIFRoZSBzYW1lIHRlY2huaXF1ZSBpcyB1c2VkIHRvIHByb3RlY3QgXGVhdHNwYWNlcyB0aWxsIGp1c3QgYmVmb3JlCislIHRoZSBtYWNybyBpcyB1c2VkLgorCitcZGVmXHBhcnNlbWFyZ2RlZiMxO3tccGFyYW1ubz0wXGRlZlxwYXJhbWxpc3R7fSUKKyAgICAgICAgXGxldFxoYXNoXHJlbGF4XGxldFx4ZWF0c3BhY2VzXHJlbGF4XHBhcnNlbWFyZ2RlZnh4eCMxLDssfQorXGRlZlxwYXJzZW1hcmdkZWZ4eHgjMSx7JQorICBcaWYjMTtcbGV0XG5leHQ9XHJlbGF4CisgIFxlbHNlIFxsZXRcbmV4dD1ccGFyc2VtYXJnZGVmeHh4CisgICAgXGFkdmFuY2VccGFyYW1ubyBieSAxJQorICAgIFxleHBhbmRhZnRlclxlZGVmXGNzbmFtZSBtYWNhcmcuXGVhdHNwYWNlc3sjMX1cZW5kY3NuYW1lCisgICAgICAgIHtceGVhdHNwYWNlc3tcaGFzaFx0aGVccGFyYW1ub319JQorICAgIFxlZGVmXHBhcmFtbGlzdHtccGFyYW1saXN0XGhhc2hcdGhlXHBhcmFtbm8sfSUKKyAgXGZpXG5leHR9CisKKyUgVGhlc2UgdHdvIGNvbW1hbmRzIHJlYWQgcmVjdXJzaXZlIGFuZCBub25yZWN1cnNpdmUgbWFjcm8gYm9kaWVzLgorJSAoVGhleSdyZSBkaWZmZXJlbnQgc2luY2UgcmVjIGFuZCBub25yZWMgbWFjcm9zIGVuZCBkaWZmZXJlbnRseS4pCisKK1xsb25nXGRlZlxwYXJzZW1hY2JvZHkjMUBlbmQgbWFjcm8lCit7XHhkZWZcdGVtcHtcZWF0Y3J7IzF9fVxlbmRncm91cFxkZWZtYWNyb30lCitcbG9uZ1xkZWZccGFyc2VybWFjYm9keSMxQGVuZCBybWFjcm8lCit7XHhkZWZcdGVtcHtcZWF0Y3J7IzF9fVxlbmRncm91cFxkZWZtYWNyb30lCisKKyUgVGhpcyBkZWZpbmVzIHRoZSBtYWNybyBpdHNlbGYuIFRoZXJlIGFyZSBzaXggY2FzZXM6IHJlY3Vyc2l2ZSBhbmQKKyUgbm9ucmVjdXJzaXZlIG1hY3JvcyBvZiB6ZXJvLCBvbmUsIGFuZCBtYW55IGFyZ3VtZW50cy4KKyUgTXVjaCBtYWdpYyB3aXRoIFxleHBhbmRhZnRlciBoZXJlLgorJSBceGRlZiBpcyB1c2VkIHNvIHRoYXQgbWFjcm8gZGVmaW5pdGlvbnMgd2lsbCBzdXJ2aXZlIHRoZSBmaWxlCislIHRoZXkncmUgZGVmaW5lZCBpbjsgQGluY2x1ZGUgcmVhZHMgdGhlIGZpbGUgaW5zaWRlIGEgZ3JvdXAuCitcZGVmXGRlZm1hY3JveyUKKyAgXGxldFxoYXNoPSMjJSBjb252ZXJ0IHBsYWNlaG9sZGVycyB0byBtYWNybyBwYXJhbWV0ZXIgY2hhcnMKKyAgXGlmcmVjdXJzaXZlCisgICAgXGlmY2FzZVxwYXJhbW5vCisgICAgJSAwCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWVcZW5kY3NuYW1leyUKKyAgICAgICAgXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH19JQorICAgIFxvciAlIDEKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV7JQorICAgICAgICAgXGJncm91cFxub2V4cGFuZFxtYWNyb2FyZ2N0eHQKKyAgICAgICAgIFxub2V4cGFuZFxicmFjZW9ybGluZQorICAgICAgICAgXGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lfSUKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lIyMxeyUKKyAgICAgICAgIFxlZ3JvdXBcbm9leHBhbmRcc2Nhbm1hY3Jve1x0ZW1wfX0lCisgICAgXGVsc2UgJSBtYW55CisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWVcZW5kY3NuYW1leyUKKyAgICAgICAgIFxiZ3JvdXBcbm9leHBhbmRcbWFjcm9hcmdjdHh0CisgICAgICAgICBcbm9leHBhbmRcY3NuYW1lXHRoZVxtYWNuYW1lIHh4XGVuZGNzbmFtZX0lCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWUgeHhcZW5kY3NuYW1lIyMxeyUKKyAgICAgICAgICBcZXhwYW5kYWZ0ZXJcbm9leHBhbmRcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWUgIyMxLH0lCisgICAgICBcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXIKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmCisgICAgICBcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXIKKyAgICAgICAgXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lCisgICAgICAgICAgXHBhcmFtbGlzdHtcZWdyb3VwXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH19JQorICAgIFxmaQorICBcZWxzZQorICAgIFxpZmNhc2VccGFyYW1ubworICAgICUgMAorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lXGVuZGNzbmFtZXslCisgICAgICAgIFxub2V4cGFuZFxub3JlY3Vyc2V7XHRoZVxtYWNuYW1lfSUKKyAgICAgICAgXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH1cZWdyb3VwfSUKKyAgICBcb3IgJSAxCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWVcZW5kY3NuYW1leyUKKyAgICAgICAgIFxiZ3JvdXBcbm9leHBhbmRcbWFjcm9hcmdjdHh0CisgICAgICAgICBcbm9leHBhbmRcYnJhY2VvcmxpbmUKKyAgICAgICAgIFxleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZX0lCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZSMjMXslCisgICAgICAgIFxlZ3JvdXAKKyAgICAgICAgXG5vZXhwYW5kXG5vcmVjdXJzZXtcdGhlXG1hY25hbWV9JQorICAgICAgICBcbm9leHBhbmRcc2Nhbm1hY3Jve1x0ZW1wfVxlZ3JvdXB9JQorICAgIFxlbHNlICUgbWFueQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lXGVuZGNzbmFtZXslCisgICAgICAgICBcYmdyb3VwXG5vZXhwYW5kXG1hY3JvYXJnY3R4dAorICAgICAgICAgXGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eFxlbmRjc25hbWV9JQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lIHh4XGVuZGNzbmFtZSMjMXslCisgICAgICAgICAgXGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lICMjMSx9JQorICAgICAgXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZgorICAgICAgXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyCisgICAgICBcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWUKKyAgICAgIFxwYXJhbWxpc3R7JQorICAgICAgICAgIFxlZ3JvdXAKKyAgICAgICAgICBcbm9leHBhbmRcbm9yZWN1cnNle1x0aGVcbWFjbmFtZX0lCisgICAgICAgICAgXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH1cZWdyb3VwfSUKKyAgICBcZmkKKyAgXGZpfQorCitcZGVmXG5vcmVjdXJzZSMxe1xiZ3JvdXBcY3NsZXR7IzF9e21hY3NhdmUuIzF9fQorCislIFxicmFjZW9ybGluZSBkZWNpZGVzIHdoZXRoZXIgdGhlIG5leHQgbm9ud2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgYQorJSB7LiAgSWYgc28gaXQgcmVhZHMgdXAgdG8gdGhlIGNsb3NpbmcgfSwgaWYgbm90LCBpdCByZWFkcyB0aGUgd2hvbGUKKyUgbGluZS4gIFdoYXRldmVyIHdhcyByZWFkIGlzIHRoZW4gZmVkIHRvIHRoZSBuZXh0IGNvbnRyb2wgc2VxdWVuY2UKKyUgYXMgYW4gYXJndW1lbnQgKGJ5IFxwYXJzZWJyYWNlIG9yIFxwYXJzZWFyZykKK1xkZWZcYnJhY2VvcmxpbmUjMXtcbGV0XG1hY25hbWV4eHg9IzFcZnV0dXJlbGV0XG5jaGFyXGJyYWNlb3JsaW5leHh4fQorXGRlZlxicmFjZW9ybGluZXh4eHslCisgIFxpZnhcbmNoYXJcYmdyb3VwXGVsc2UKKyAgICBcZXhwYW5kYWZ0ZXJccGFyc2VhcmcKKyAgXGZpIFxtYWNuYW1leHh4fQorCisKKyUgQGFsaWFzLgorJSBXZSBuZWVkIHNvbWUgdHJpY2tlcnkgdG8gcmVtb3ZlIHRoZSBvcHRpb25hbCBzcGFjZXMgYXJvdW5kIHRoZSBlcXVhbAorJSBzaWduLiAgSnVzdCBtYWtlIHRoZW0gYWN0aXZlIGFuZCB0aGVuIGV4cGFuZCB0aGVtIGFsbCB0byBub3RoaW5nLgorXGRlZlxhbGlhc3tccGFyc2Vhcmd1c2luZ1xvYmV5c3BhY2VzXGFsaWFzeHh4fQorXGRlZlxhbGlhc3h4eCAjMXtcYWxpYXN5eXkjMVxyZWxheH0KK1xkZWZcYWxpYXN5eXkgIzE9IzJccmVsYXh7JQorICB7JQorICAgIFxleHBhbmRhZnRlclxsZXRcb2JleWVkc3BhY2U9XGVtcHR5CisgICAgXGFkZHRvbWFjcm9saXN0eyMxfSUKKyAgICBceGRlZlxuZXh0e1xnbG9iYWxcbGV0XG1ha2Vjc25hbWV7IzF9PVxtYWtlY3NuYW1leyMyfX0lCisgIH0lCisgIFxuZXh0Cit9CisKKworXG1lc3NhZ2V7Y3Jvc3MgcmVmZXJlbmNlcyx9CisKK1xuZXd3cml0ZVxhdXhmaWxlCitcbmV3aWZcaWZoYXZleHJlZnMgICAgJSBUcnVlIGlmIHhyZWYgdmFsdWVzIGFyZSBrbm93bi4KK1xuZXdpZlxpZndhcm5lZHhyZWZzICAlIFRydWUgaWYgd2Ugd2FybmVkIG9uY2UgdGhhdCB0aGV5IGFyZW4ndCBrbm93bi4KKworJSBAaW5mb3JlZiBpcyByZWxhdGl2ZWx5IHNpbXBsZS4KK1xkZWZcaW5mb3JlZiAjMXtcaW5mb3JlZnp6eiAjMSwsLCwqKn0KK1xkZWZcaW5mb3JlZnp6eiAjMSwjMiwjMywjNCoqe1xwdXR3b3JkU2Vle30gXHB1dHdvcmRJbmZve30gXHB1dHdvcmRmaWxle30gXGZpbGV7XGlnbm9yZXNwYWNlcyAjM3t9fSwKKyAgbm9kZSBcc2FtcHtcaWdub3Jlc3BhY2VzIzF7fX19CisKKyUgQG5vZGUncyBvbmx5IGpvYiBpbiBUZVggaXMgdG8gZGVmaW5lIFxsYXN0bm9kZSwgd2hpY2ggaXMgdXNlZCBpbgorJSBjcm9zcy1yZWZlcmVuY2VzLiAgVGhlIEBub2RlIGxpbmUgbWlnaHQgb3IgbWlnaHQgbm90IGhhdmUgY29tbWFzLCBhbmQKKyUgbWlnaHQgb3IgbWlnaHQgbm90IGhhdmUgc3BhY2VzIGJlZm9yZSB0aGUgZmlyc3QgY29tbWEsIGxpa2U6CislIEBub2RlIGZvbyAsIGJhciAsIC4uLgorJSBXZSBkb24ndCB3YW50IHN1Y2ggdHJhaWxpbmcgc3BhY2VzIGluIHRoZSBub2RlIG5hbWUuCislCitccGFyc2VhcmdkZWZcbm9kZXtcY2hlY2tlbnZ7fVxkb25vZGUgIzEgLFxmaW5pc2hub2RlcGFyc2V9CislCislIGFsc28gcmVtb3ZlIGEgdHJhaWxpbmcgY29tbWEsIGluIGNhc2Ugb2Ygc29tZXRoaW5nIGxpa2UgdGhpczoKKyUgQG5vZGUgSGVscC1Dcm9zcywgICwgICwgQ3Jvc3MtcmVmcworXGRlZlxkb25vZGUjMSAsIzJcZmluaXNobm9kZXBhcnNle1xkb2Rvbm9kZSAjMSxcZmluaXNobm9kZXBhcnNlfQorXGRlZlxkb2Rvbm9kZSMxLCMyXGZpbmlzaG5vZGVwYXJzZXtcZ2RlZlxsYXN0bm9kZXsjMX19CisKK1xsZXRcbndub2RlPVxub2RlCitcbGV0XGxhc3Rub2RlPVxlbXB0eQorCislIFdyaXRlIGEgY3Jvc3MtcmVmZXJlbmNlIGRlZmluaXRpb24gZm9yIHRoZSBjdXJyZW50IG5vZGUuICAjMSBpcyB0aGUKKyUgdHlwZSAoWW51bWJlcmVkLCBZYXBwZW5kaXgsIFlub3RoaW5nKS4KKyUKK1xkZWZcZG9ub2RlcmVmIzF7JQorICBcaWZ4XGxhc3Rub2RlXGVtcHR5XGVsc2UKKyAgICBcc2V0cmVme1xsYXN0bm9kZX17IzF9JQorICAgIFxnbG9iYWxcbGV0XGxhc3Rub2RlPVxlbXB0eQorICBcZmkKK30KKworJSBAYW5jaG9ye05BTUV9IC0tIGRlZmluZSB4cmVmIHRhcmdldCBhdCBhcmJpdHJhcnkgcG9pbnQuCislCitcbmV3Y291bnRcc2F2ZXNmcmVnaXN0ZXIKKyUKK1xkZWZcc2F2ZXNme1xyZWxheCBcaWZobW9kZSBcc2F2ZXNmcmVnaXN0ZXI9XHNwYWNlZmFjdG9yIFxmaX0KK1xkZWZccmVzdG9yZXNme1xyZWxheCBcaWZobW9kZSBcc3BhY2VmYWN0b3I9XHNhdmVzZnJlZ2lzdGVyIFxmaX0KK1xkZWZcYW5jaG9yIzF7XHNhdmVzZiBcc2V0cmVmeyMxfXtZbm90aGluZ31ccmVzdG9yZXNmIFxpZ25vcmVzcGFjZXN9CisKKyUgXHNldHJlZntOQU1FfXtTTlR9IGRlZmluZXMgYSBjcm9zcy1yZWZlcmVuY2UgcG9pbnQgTkFNRSAoYSBub2RlIG9yIGFuCislIGFuY2hvciksIHdoaWNoIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzOgorJSAxKSBOQU1FLXRpdGxlIC0gdGhlIGN1cnJlbnQgc2VjdGlvbmluZyBuYW1lIHRha2VuIGZyb20gXGxhc3RzZWN0aW9uLAorJSAgICAgICAgICAgICAgICAgb3IgdGhlIGFuY2hvciBuYW1lLgorJSAyKSBOQU1FLXNudCAgIC0gc2VjdGlvbiBudW1iZXIgYW5kIHR5cGUsIHBhc3NlZCBhcyB0aGUgU05UIGFyZywgb3IKKyUgICAgICAgICAgICAgICAgIGVtcHR5IGZvciBhbmNob3JzLgorJSAzKSBOQU1FLXBnICAgIC0gdGhlIHBhZ2UgbnVtYmVyLgorJQorJSBUaGlzIGlzIGNhbGxlZCBmcm9tIFxkb25vZGVyZWYsIFxhbmNob3IsIGFuZCBcZG9mbG9hdC4gIEluIHRoZSBjYXNlIG9mCislIGZsb2F0cywgdGhlcmUgaXMgYW4gYWRkaXRpb25hbCBwYXJ0LCB3aGljaCBpcyBub3Qgd3JpdHRlbiBoZXJlOgorJSA0KSBOQU1FLWxvZiAgIC0gdGhlIHRleHQgYXMgaXQgc2hvdWxkIGFwcGVhciBpbiBhIEBsaXN0b2ZmbG9hdHMuCislCitcZGVmXHNldHJlZiMxIzJ7JQorICBccGRmbWtkZXN0eyMxfSUKKyAgXGlmbGlua3MKKyAgICB7JQorICAgICAgXGF0ZHVtbWllcyAgJSBwcmVzZXJ2ZSBjb21tYW5kcywgYnV0IGRvbid0IGV4cGFuZCB0aGVtCisgICAgICBcZWRlZlx3cml0ZXhyZGVmIyMxIyMyeyUKKwlcd3JpdGVcYXV4ZmlsZXtAeHJkZWZ7IzEtJSAjMSBvZiBcc2V0cmVmLCBleHBhbmRlZCBieSB0aGUgXGVkZWYKKwkgICMjMX17IyMyfX0lIHRoZXNlIGFyZSBwYXJhbWV0ZXJzIG9mIFx3cml0ZXhyZGVmCisgICAgICB9JQorICAgICAgXHRva3MwID0gXGV4cGFuZGFmdGVye1xsYXN0c2VjdGlvbn0lCisgICAgICBcaW1tZWRpYXRlIFx3cml0ZXhyZGVme3RpdGxlfXtcdGhlXHRva3MwIH0lCisgICAgICBcaW1tZWRpYXRlIFx3cml0ZXhyZGVme3NudH17XGNzbmFtZSAjMlxlbmRjc25hbWV9JSBcWW51bWJlcmVkIGV0Yy4KKyAgICAgIFxzYWZld2hhdHNpdHtcd3JpdGV4cmRlZntwZ317XGZvbGlvfX0lIHdpbGwgYmUgd3JpdHRlbiBsYXRlciwgZHVyaW5nIFxzaGlwb3V0CisgICAgfSUKKyAgXGZpCit9CisKKyUgQHhyZWYsIEBweHJlZiwgYW5kIEByZWYgZ2VuZXJhdGUgY3Jvc3MtcmVmZXJlbmNlcy4gIEZvciBceHJlZlgsICMxIGlzCislIHRoZSBub2RlIG5hbWUsICMyIHRoZSBuYW1lIG9mIHRoZSBJbmZvIGNyb3NzLXJlZmVyZW5jZSwgIzMgdGhlIHByaW50ZWQKKyUgbm9kZSBuYW1lLCAjNCB0aGUgbmFtZSBvZiB0aGUgSW5mbyBmaWxlLCAjNSB0aGUgbmFtZSBvZiB0aGUgcHJpbnRlZAorJSBtYW51YWwuICBBbGwgYnV0IHRoZSBub2RlIG5hbWUgY2FuIGJlIG9taXR0ZWQuCislCitcZGVmXHB4cmVmIzF7XHB1dHdvcmRzZWV7fSBceHJlZlhbIzEsLCwsLCwsXX0KK1xkZWZceHJlZiMxe1xwdXR3b3JkU2Vle30gXHhyZWZYWyMxLCwsLCwsLF19CitcZGVmXHJlZiMxe1x4cmVmWFsjMSwsLCwsLCxdfQorXGRlZlx4cmVmWFsjMSwjMiwjMywjNCwjNSwjNl17XGJlZ2luZ3JvdXAKKyAgXHVuc2Vwc3BhY2VzCisgIFxkZWZccHJpbnRlZG1hbnVhbHtcaWdub3Jlc3BhY2VzICM1fSUKKyAgXGRlZlxwcmludGVkcmVmbmFtZXtcaWdub3Jlc3BhY2VzICMzfSUKKyAgXHNldGJveDE9XGhib3h7XHByaW50ZWRtYW51YWxcdW5za2lwfSUKKyAgXHNldGJveDA9XGhib3h7XHByaW50ZWRyZWZuYW1lXHVuc2tpcH0lCisgIFxpZmRpbSBcd2QwID0gMHB0CisgICAgJSBObyBwcmludGVkIG5vZGUgbmFtZSB3YXMgZXhwbGljaXRseSBnaXZlbi4KKyAgICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBTRVR4cmVmLWF1dG9tYXRpYy1zZWN0aW9uLXRpdGxlXGVuZGNzbmFtZVxyZWxheAorICAgICAgJSBVc2UgdGhlIG5vZGUgbmFtZSBpbnNpZGUgdGhlIHNxdWFyZSBicmFja2V0cy4KKyAgICAgIFxkZWZccHJpbnRlZHJlZm5hbWV7XGlnbm9yZXNwYWNlcyAjMX0lCisgICAgXGVsc2UKKyAgICAgICUgVXNlIHRoZSBhY3R1YWwgY2hhcHRlci9zZWN0aW9uIHRpdGxlIGFwcGVhciBpbnNpZGUKKyAgICAgICUgdGhlIHNxdWFyZSBicmFja2V0cy4gIFVzZSB0aGUgcmVhbCBzZWN0aW9uIHRpdGxlIGlmIHdlIGhhdmUgaXQuCisgICAgICBcaWZkaW0gXHdkMSA+IDBwdAorICAgICAgICAlIEl0IGlzIGluIGFub3RoZXIgbWFudWFsLCBzbyB3ZSBkb24ndCBoYXZlIGl0LgorICAgICAgICBcZGVmXHByaW50ZWRyZWZuYW1le1xpZ25vcmVzcGFjZXMgIzF9JQorICAgICAgXGVsc2UKKyAgICAgICAgXGlmaGF2ZXhyZWZzCisgICAgICAgICAgJSBXZSBrbm93IHRoZSByZWFsIHRpdGxlIGlmIHdlIGhhdmUgdGhlIHhyZWYgdmFsdWVzLgorICAgICAgICAgIFxkZWZccHJpbnRlZHJlZm5hbWV7XHJlZnh7IzEtdGl0bGV9e319JQorICAgICAgICBcZWxzZQorICAgICAgICAgICUgT3RoZXJ3aXNlIGp1c3QgY29weSB0aGUgSW5mbyBub2RlIG5hbWUuCisgICAgICAgICAgXGRlZlxwcmludGVkcmVmbmFtZXtcaWdub3Jlc3BhY2VzICMxfSUKKyAgICAgICAgXGZpJQorICAgICAgXGZpCisgICAgXGZpCisgIFxmaQorICAlCisgICUgTWFrZSBsaW5rIGluIHBkZiBvdXRwdXQuCisgIFxpZnBkZgorICAgIHtcaW5kZXhub2ZvbnRzCisgICAgIFx0dXJub2ZmYWN0aXZlCisgICAgICUgVGhpcyBleHBhbmRzIHRva2Vucywgc28gZG8gaXQgYWZ0ZXIgbWFraW5nIGNhdGNvZGUgY2hhbmdlcywgc28gXworICAgICAlIGV0Yy4gZG9uJ3QgZ2V0IHRoZWlyIFRlWCBkZWZpbml0aW9ucy4KKyAgICAgXGdldGZpbGVuYW1leyM0fSUKKyAgICAgJQorICAgICAlIFNlZSBjb21tZW50cyBhdCBcYWN0aXZlYmFja3NsYXNoZG91YmxlLgorICAgICB7XGFjdGl2ZWJhY2tzbGFzaGRvdWJsZSBceGRlZlxwZGZ4cmVmZGVzdHsjMX0lCisgICAgICBcYmFja3NsYXNocGFyZW5zXHBkZnhyZWZkZXN0fSUKKyAgICAgJQorICAgICBcbGVhdmV2bW9kZQorICAgICBcc3RhcnRsaW5rIGF0dHJ7L0JvcmRlciBbMCAwIDBdfSUKKyAgICAgXGlmbnVtXGZpbGVuYW1lbGVuZ3RoPjAKKyAgICAgICBnb3RvIGZpbGV7XHRoZVxmaWxlbmFtZS5wZGZ9IG5hbWV7XHBkZnhyZWZkZXN0fSUKKyAgICAgXGVsc2UKKyAgICAgICBnb3RvIG5hbWV7XHBkZm1rcGdue1xwZGZ4cmVmZGVzdH19JQorICAgICBcZmkKKyAgICB9JQorICAgIFxzZXRjb2xvcntcbGlua2NvbG9yfSUKKyAgXGZpCisgICUKKyAgJSBGbG9hdCByZWZlcmVuY2VzIGFyZSBwcmludGVkIGNvbXBsZXRlbHkgZGlmZmVyZW50bHk6ICJGaWd1cmUgMS4yIgorICAlIGluc3RlYWQgb2YgIltzb21lbm9kZV0sIHAuMyIuICBXZSBkaXN0aW5ndWlzaCB0aGVtIGJ5IHRoZQorICAlIExBQkVMLXRpdGxlIGJlaW5nIHNldCB0byBhIG1hZ2ljIHN0cmluZy4KKyAgeyUKKyAgICAlIEhhdmUgdG8gb3RoZXJpZnkgZXZlcnl0aGluZyBzcGVjaWFsIHRvIGFsbG93IHRoZSBcY3NuYW1lIHRvCisgICAgJSBpbmNsdWRlIGFuIF8gaW4gdGhlIHhyZWYgbmFtZSwgZXRjLgorICAgIFxpbmRleG5vZm9udHMKKyAgICBcdHVybm9mZmFjdGl2ZQorICAgIFxleHBhbmRhZnRlclxnbG9iYWxcZXhwYW5kYWZ0ZXJcbGV0XGV4cGFuZGFmdGVyXFh0aGlzcmVmdGl0bGUKKyAgICAgIFxjc25hbWUgWFIjMS10aXRsZVxlbmRjc25hbWUKKyAgfSUKKyAgXGlmZmxvYXRcWHRoaXNyZWZ0aXRsZQorICAgICUgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIHRoZSBwcmludCBuYW1lICh0aGlyZCBhcmcpIHRvIHRoZSByZWYsCisgICAgJSBwcmludCBpdCBpbnN0ZWFkIG9mIG91ciB1c3VhbCAiRmlndXJlIDEuMiIuCisgICAgXGlmZGltXHdkMCA9IDBwdAorICAgICAgXHJlZnh7IzEtc250fXt9JQorICAgIFxlbHNlCisgICAgICBccHJpbnRlZHJlZm5hbWUKKyAgICBcZmkKKyAgICAlCisgICAgJSBpZiB0aGUgdXNlciBhbHNvIGdhdmUgdGhlIHByaW50ZWQgbWFudWFsIG5hbWUgKGZpZnRoIGFyZyksIGFwcGVuZAorICAgICUgImluIE1BTlVBTE5BTUUiLgorICAgIFxpZmRpbSBcd2QxID4gMHB0CisgICAgICBcc3BhY2UgXHB1dHdvcmRpbnt9IFxjaXRle1xwcmludGVkbWFudWFsfSUKKyAgICBcZmkKKyAgXGVsc2UKKyAgICAlIG5vZGUvYW5jaG9yIChub24tZmxvYXQpIHJlZmVyZW5jZXMuCisgICAgJQorICAgICUgSWYgd2UgdXNlIFx1bmhib3gwIGFuZCBcdW5oYm94MSB0byBwcmludCB0aGUgbm9kZSBuYW1lcywgVGVYIGRvZXMgbm90CisgICAgJSBpbnNlcnQgZW1wdHkgZGlzY3JldGlvbmFyaWVzIGFmdGVyIGh5cGhlbnMsIHdoaWNoIG1lYW5zIHRoYXQgaXQgd2lsbAorICAgICUgbm90IGZpbmQgYSBsaW5lIGJyZWFrIGF0IGEgaHlwaGVuIGluIGEgbm9kZSBuYW1lcy4gIFNpbmNlIHNvbWUgbWFudWFscworICAgICUgYXJlIGJlc3Qgd3JpdHRlbiB3aXRoIGZhaXJseSBsb25nIG5vZGUgbmFtZXMsIGNvbnRhaW5pbmcgaHlwaGVucywgdGhpcworICAgICUgaXMgYSBsb3NzLiAgVGhlcmVmb3JlLCB3ZSBnaXZlIHRoZSB0ZXh0IG9mIHRoZSBub2RlIG5hbWUgYWdhaW4sIHNvIGl0CisgICAgJSBpcyBhcyBpZiBUZVggaXMgc2VlaW5nIGl0IGZvciB0aGUgZmlyc3QgdGltZS4KKyAgICBcaWZkaW0gXHdkMSA+IDBwdAorICAgICAgXHB1dHdvcmRTZWN0aW9ue30gYGBccHJpbnRlZHJlZm5hbWUnJyBccHV0d29yZGlue30gXGNpdGV7XHByaW50ZWRtYW51YWx9JQorICAgIFxlbHNlCisgICAgICAlIF8gKGZvciBleGFtcGxlKSBoYXMgdG8gYmUgdGhlIGNoYXJhY3RlciBfIGZvciB0aGUgcHVycG9zZXMgb2YgdGhlCisgICAgICAlIGNvbnRyb2wgc2VxdWVuY2UgY29ycmVzcG9uZGluZyB0byB0aGUgbm9kZSwgYnV0IGl0IGhhcyB0byBleHBhbmQKKyAgICAgICUgaW50byB0aGUgdXN1YWwgXGxlYXZldm1vZGUuLi5cdnJ1bGUgc3R1ZmYgZm9yIHB1cnBvc2VzIG9mCisgICAgICAlIHByaW50aW5nLiBTbyB3ZSBcdHVybm9mZmFjdGl2ZSBmb3IgdGhlIFxyZWZ4LXNudCwgYmFjayBvbiBmb3IgdGhlCisgICAgICAlIHByaW50aW5nLCBiYWNrIG9mZiBmb3IgdGhlIFxyZWZ4LXBnLgorICAgICAge1x0dXJub2ZmYWN0aXZlCisgICAgICAgJSBPbmx5IG91dHB1dCBhIGZvbGxvd2luZyBzcGFjZSBpZiB0aGUgLXNudCByZWYgaXMgbm9uZW1wdHk7IGZvcgorICAgICAgICUgQHVubnVtYmVyZWQgYW5kIEBhbmNob3IsIGl0IHdvbid0IGJlLgorICAgICAgIFxzZXRib3gyID0gXGhib3h7XGlnbm9yZXNwYWNlcyBccmVmeHsjMS1zbnR9e319JQorICAgICAgIFxpZmRpbSBcd2QyID4gMHB0IFxyZWZ4eyMxLXNudH1cc3BhY2VcZmkKKyAgICAgIH0lCisgICAgICAlIG91dHB1dCB0aGUgYFtteW5vZGVdJyB2aWEgYSBtYWNybyBzbyBpdCBjYW4gYmUgb3ZlcnJpZGRlbi4KKyAgICAgIFx4cmVmcHJpbnRub2RlbmFtZVxwcmludGVkcmVmbmFtZQorICAgICAgJQorICAgICAgJSBCdXQgd2UgYWx3YXlzIHdhbnQgYSBjb21tYSBhbmQgYSBzcGFjZToKKyAgICAgICxcc3BhY2UKKyAgICAgICUKKyAgICAgICUgb3V0cHV0IHRoZSBgcGFnZSAzJy4KKyAgICAgIFx0dXJub2ZmYWN0aXZlIFxwdXR3b3JkcGFnZVx0aWVccmVmeHsjMS1wZ317fSUKKyAgICBcZmkKKyAgXGZpCisgIFxlbmRsaW5rCitcZW5kZ3JvdXB9CisKKyUgVGhpcyBtYWNybyBpcyBjYWxsZWQgZnJvbSBceHJlZlggZm9yIHRoZSBgW25vZGVuYW1lXScgcGFydCBvZiB4cmVmCislIG91dHB1dC4gIEl0J3MgYSBzZXBhcmF0ZSBtYWNybyBvbmx5IHNvIGl0IGNhbiBiZSBjaGFuZ2VkIG1vcmUgZWFzaWx5LAorJSBzaW5jZSBzcXVhcmUgYnJhY2tldHMgZG9uJ3Qgd29yayB3ZWxsIGluIHNvbWUgZG9jdW1lbnRzLiAgUGFydGljdWxhcmx5CislIG9uZSB0aGF0IEJvYiBpcyB3b3JraW5nIG9uIDopLgorJQorXGRlZlx4cmVmcHJpbnRub2RlbmFtZSMxe1sjMV19CisKKyUgVGhpbmdzIHJlZmVycmVkIHRvIGJ5IFxzZXRyZWYuCislCitcZGVmXFlub3RoaW5ne30KK1xkZWZcWW9taXRmcm9tdG9je30KK1xkZWZcWW51bWJlcmVkeyUKKyAgXGlmbnVtXHNlY25vPTAKKyAgICBccHV0d29yZENoYXB0ZXJAdGllIFx0aGVcY2hhcG5vCisgIFxlbHNlIFxpZm51bVxzdWJzZWNubz0wCisgICAgXHB1dHdvcmRTZWN0aW9uQHRpZSBcdGhlXGNoYXBuby5cdGhlXHNlY25vCisgIFxlbHNlIFxpZm51bVxzdWJzdWJzZWNubz0wCisgICAgXHB1dHdvcmRTZWN0aW9uQHRpZSBcdGhlXGNoYXBuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm8KKyAgXGVsc2UKKyAgICBccHV0d29yZFNlY3Rpb25AdGllIFx0aGVcY2hhcG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vCisgIFxmaVxmaVxmaQorfQorXGRlZlxZYXBwZW5kaXh7JQorICBcaWZudW1cc2Vjbm89MAorICAgICBccHV0d29yZEFwcGVuZGl4QHRpZSBAY2hhclx0aGVcYXBwZW5kaXhub3t9JQorICBcZWxzZSBcaWZudW1cc3Vic2Vjbm89MAorICAgICBccHV0d29yZFNlY3Rpb25AdGllIEBjaGFyXHRoZVxhcHBlbmRpeG5vLlx0aGVcc2Vjbm8KKyAgXGVsc2UgXGlmbnVtXHN1YnN1YnNlY25vPTAKKyAgICBccHV0d29yZFNlY3Rpb25AdGllIEBjaGFyXHRoZVxhcHBlbmRpeG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNubworICBcZWxzZQorICAgIFxwdXR3b3JkU2VjdGlvbkB0aWUKKyAgICAgIEBjaGFyXHRoZVxhcHBlbmRpeG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vCisgIFxmaVxmaVxmaQorfQorCislIERlZmluZSBccmVmeHtOQU1FfXtTVUZGSVh9IHRvIHJlZmVyZW5jZSBhIGNyb3NzLXJlZmVyZW5jZSBzdHJpbmcgbmFtZWQgTkFNRS4KKyUgSWYgaXRzIHZhbHVlIGlzIG5vbmVtcHR5LCBTVUZGSVggaXMgb3V0cHV0IGFmdGVyd2FyZC4KKyUKK1xkZWZccmVmeCMxIzJ7JQorICB7JQorICAgIFxpbmRleG5vZm9udHMKKyAgICBcb3RoZXJiYWNrc2xhc2gKKyAgICBcZXhwYW5kYWZ0ZXJcZ2xvYmFsXGV4cGFuZGFmdGVyXGxldFxleHBhbmRhZnRlclx0aGlzcmVmWAorICAgICAgXGNzbmFtZSBYUiMxXGVuZGNzbmFtZQorICB9JQorICBcaWZ4XHRoaXNyZWZYXHJlbGF4CisgICAgJSBJZiBub3QgZGVmaW5lZCwgc2F5IHNvbWV0aGluZyBhdCBsZWFzdC4KKyAgICBcYW5nbGVsZWZ0IHVuXC1kZVwtZmluZWRcYW5nbGVyaWdodAorICAgIFxpZmxpbmtzCisgICAgICBcaWZoYXZleHJlZnMKKyAgICAgICAgXG1lc3NhZ2V7XGxpbmVudW1iZXIgVW5kZWZpbmVkIGNyb3NzIHJlZmVyZW5jZSBgIzEnLn0lCisgICAgICBcZWxzZQorICAgICAgICBcaWZ3YXJuZWR4cmVmc1xlbHNlCisgICAgICAgICAgXGdsb2JhbFx3YXJuZWR4cmVmc3RydWUKKyAgICAgICAgICBcbWVzc2FnZXtDcm9zcyByZWZlcmVuY2UgdmFsdWVzIHVua25vd247IHlvdSBtdXN0IHJ1biBUZVggYWdhaW4ufSUKKyAgICAgICAgXGZpCisgICAgICBcZmkKKyAgICBcZmkKKyAgXGVsc2UKKyAgICAlIEl0J3MgZGVmaW5lZCwgc28ganVzdCB1c2UgaXQuCisgICAgXHRoaXNyZWZYCisgIFxmaQorICAjMiUgT3V0cHV0IHRoZSBzdWZmaXggaW4gYW55IGNhc2UuCit9CisKKyUgVGhpcyBpcyB0aGUgbWFjcm8gaW52b2tlZCBieSBlbnRyaWVzIGluIHRoZSBhdXggZmlsZS4gIFVzdWFsbHkgaXQncworJSBqdXN0IGEgXGRlZiAod2UgcHJlcGVuZCBYUiB0byB0aGUgY29udHJvbCBzZXF1ZW5jZSBuYW1lIHRvIGF2b2lkCislIGNvbGxpc2lvbnMpLiAgQnV0IGlmIHRoaXMgaXMgYSBmbG9hdCB0eXBlLCB3ZSBoYXZlIG1vcmUgd29yayB0byBkby4KKyUKK1xkZWZceHJkZWYjMSMyeyUKKyAgeyUgVGhlIG5vZGUgbmFtZSBtaWdodCBjb250YWluIDgtYml0IGNoYXJhY3RlcnMsIHdoaWNoIGluIG91ciBjdXJyZW50CisgICAlIGltcGxlbWVudGF0aW9uIGFyZSBjaGFuZ2VkIHRvIGNvbW1hbmRzIGxpa2UgQCdlLiAgRG9uJ3QgbGV0IHRoZXNlCisgICAlIG1lc3MgdXAgdGhlIGNvbnRyb2wgc2VxdWVuY2UgbmFtZS4KKyAgICBcaW5kZXhub2ZvbnRzCisgICAgXHR1cm5vZmZhY3RpdmUKKyAgICBceGRlZlxzYWZleHJlZm5hbWV7IzF9JQorICB9JQorICAlCisgIFxleHBhbmRhZnRlclxnZGVmXGNzbmFtZSBYUlxzYWZleHJlZm5hbWVcZW5kY3NuYW1leyMyfSUgcmVtZW1iZXIgdGhpcyB4cmVmCisgICUKKyAgJSBXYXMgdGhhdCB4cmVmIGNvbnRyb2wgc2VxdWVuY2UgdGhhdCB3ZSBqdXN0IGRlZmluZWQgZm9yIGEgZmxvYXQ/CisgIFxleHBhbmRhZnRlclxpZmZsb2F0XGNzbmFtZSBYUlxzYWZleHJlZm5hbWVcZW5kY3NuYW1lCisgICAgJSBpdCB3YXMgYSBmbG9hdCwgYW5kIHdlIGhhdmUgdGhlIChzYWZlKSBmbG9hdCB0eXBlIGluIFxpZmZsb2F0dHlwZS4KKyAgICBcZXhwYW5kYWZ0ZXJcbGV0XGV4cGFuZGFmdGVyXGZsb2F0bGlzdAorICAgICAgXGNzbmFtZSBmbG9hdGxpc3RcaWZmbG9hdHR5cGVcZW5kY3NuYW1lCisgICAgJQorICAgICUgSXMgdGhpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSBzZWVuIHRoaXMgZmxvYXQgdHlwZT8KKyAgICBcZXhwYW5kYWZ0ZXJcaWZ4XGZsb2F0bGlzdFxyZWxheAorICAgICAgXHRva3MwID0ge1xkb30lIHllcywgc28ganVzdCBcZG8KKyAgICBcZWxzZQorICAgICAgJSBoYWQgaXQgYmVmb3JlLCBzbyBwcmVzZXJ2ZSBwcmV2aW91cyBlbGVtZW50cyBpbiBsaXN0LgorICAgICAgXHRva3MwID0gXGV4cGFuZGFmdGVye1xmbG9hdGxpc3RcZG99JQorICAgIFxmaQorICAgICUKKyAgICAlIFJlbWVtYmVyIHRoaXMgeHJlZiBpbiB0aGUgY29udHJvbCBzZXF1ZW5jZSBcZmxvYXRsaXN0RkxPQVRUWVBFLAorICAgICUgZm9yIGxhdGVyIHVzZSBpbiBcbGlzdG9mZmxvYXRzLgorICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZSBmbG9hdGxpc3RcaWZmbG9hdHR5cGVcZW5kY3NuYW1le1x0aGVcdG9rczAKKyAgICAgIHtcc2FmZXhyZWZuYW1lfX0lCisgIFxmaQorfQorCislIFJlYWQgdGhlIGxhc3QgZXhpc3RpbmcgYXV4IGZpbGUsIGlmIGFueS4gIE5vIGVycm9yIGlmIG5vbmUgZXhpc3RzLgorJQorXGRlZlx0cnlhdXhmaWxleyUKKyAgXG9wZW5pbiAxIFxqb2JuYW1lLmF1eAorICBcaWZlb2YgMSBcZWxzZQorICAgIFxyZWFkZGF0YWZpbGV7YXV4fSUKKyAgICBcZ2xvYmFsXGhhdmV4cmVmc3RydWUKKyAgXGZpCisgIFxjbG9zZWluIDEKK30KKworXGRlZlxzZXR1cGRhdGFmaWxleyUKKyAgXGNhdGNvZGVgXF5eQD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eQT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eQj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eQz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eRD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eRT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eRj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eRz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eSD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eSz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eTD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eTj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eUD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eUT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eUj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eUz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eVD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eVT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eVj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eVz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eWD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eWj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eWz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eXD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eXT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eXj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eXz1cb3RoZXIKKyAgJSBJdCB3YXMgc3VnZ2VzdGVkIHRvIHNldCB0aGUgY2F0Y29kZSBvZiBeIHRvIDcsIHdoaWNoIHdvdWxkIGFsbG93IF5eZTQgZXRjLgorICAlIGluIHhyZWYgdGFncywgaS5lLiwgbm9kZSBuYW1lcy4gIEJ1dCBzaW5jZSBeXmU0IG5vdGF0aW9uIGlzbid0CisgICUgc3VwcG9ydGVkIGluIHRoZSBtYWluIHRleHQsIGl0IGRvZXNuJ3Qgc2VlbSBkZXNpcmFibGUuICBGdXJ0aGVybW9yZSwKKyAgJSB0aGF0IGlzIG5vdCBlbm91Z2g6IGZvciBub2RlIG5hbWVzIHRoYXQgYWN0dWFsbHkgY29udGFpbiBhIF4KKyAgJSBjaGFyYWN0ZXIsIHdlIHdvdWxkIGVuZCB1cCB3cml0aW5nIGEgbGluZSBsaWtlIHRoaXM6ICd4cmRlZiB7J2hhdAorICAlIGItdGl0bGV9eydoYXQgYn0gYW5kIFx4cmRlZiBkb2VzIGEgXGNzbmFtZS4uLlxlbmRjc25hbWUgb24gdGhlIGZpcnN0CisgICUgYXJndW1lbnQsIGFuZCBcaGF0IGlzIG5vdCBhbiBleHBhbmRhYmxlIGNvbnRyb2wgc2VxdWVuY2UuICBJdCBjb3VsZAorICAlIGFsbCBiZSB3b3JrZWQgb3V0LCBidXQgd2h5PyAgRWl0aGVyIHdlIHN1cHBvcnQgXl4gb3Igd2UgZG9uJ3QuCisgICUKKyAgJSBUaGUgb3RoZXIgY2hhbmdlIG5lY2Vzc2FyeSBmb3IgdGhpcyB3YXMgdG8gZGVmaW5lIFxhdXhoYXQ6CisgICUgXGRlZlxhdXhoYXR7XGRlZl57J2hhdCB9fSUgZXh0cmEgc3BhY2Ugc28gb2sgaWYgZm9sbG93ZWQgYnkgbGV0dGVyCisgICUgYW5kIHRoZW4gdG8gY2FsbCBcYXV4aGF0IGluIFxzZXRxLgorICAlCisgIFxjYXRjb2RlYFxePVxvdGhlcgorICAlCisgICUgU3BlY2lhbCBjaGFyYWN0ZXJzLiAgU2hvdWxkIGJlIHR1cm5lZCBvZmYgYW55d2F5LCBidXQuLi4KKyAgXGNhdGNvZGVgXH49XG90aGVyCisgIFxjYXRjb2RlYFxbPVxvdGhlcgorICBcY2F0Y29kZWBcXT1cb3RoZXIKKyAgXGNhdGNvZGVgXCI9XG90aGVyCisgIFxjYXRjb2RlYFxfPVxvdGhlcgorICBcY2F0Y29kZWBcfD1cb3RoZXIKKyAgXGNhdGNvZGVgXDw9XG90aGVyCisgIFxjYXRjb2RlYFw+PVxvdGhlcgorICBcY2F0Y29kZWBcJD1cb3RoZXIKKyAgXGNhdGNvZGVgXCM9XG90aGVyCisgIFxjYXRjb2RlYFwmPVxvdGhlcgorICBcY2F0Y29kZWBcJT1cb3RoZXIKKyAgXGNhdGNvZGVgKz1cb3RoZXIgJSBhdm9pZCBcKyBmb3IgcGFyYW5vaWEgZXZlbiB0aG91Z2ggd2UndmUgdHVybmVkIGl0IG9mZgorICAlCisgICUgVGhpcyBpcyB0byBzdXBwb3J0IFwgaW4gbm9kZSBuYW1lcyBhbmQgdGl0bGVzLCBzaW5jZSB0aGUgXAorICAlIGNoYXJhY3RlcnMgZW5kIHVwIGluIGEgXGNzbmFtZS4gIEl0J3MgZWFzaWVyIHRoYW4KKyAgJSBsZWF2aW5nIGl0IGFjdGl2ZSBhbmQgbWFraW5nIGl0cyBhY3RpdmUgZGVmaW5pdGlvbiBhbiBhY3R1YWwgXAorICAlIGNoYXJhY3Rlci4gIFdoYXQgSSBkb24ndCB1bmRlcnN0YW5kIGlzIHdoeSBpdCB3b3JrcyBpbiB0aGUgKnZhbHVlKgorICAlIG9mIHRoZSB4cmRlZi4gIFNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlIGEgY2F0Y29kZTEyIFwsIGFuZCB0aGF0CisgICUgc2hvdWxkIG5vdCB0eXBlc2V0IHByb3Blcmx5LiAgQnV0IGl0IHdvcmtzLCBzbyBJJ20gbW92aW5nIG9uIGZvcgorICAlIG5vdy4gIC0ta2FybCwgMTVqYW4wNC4KKyAgXGNhdGNvZGVgXFw9XG90aGVyCisgICUKKyAgJSBNYWtlIHRoZSBjaGFyYWN0ZXJzIDEyOC0yNTUgYmUgcHJpbnRpbmcgY2hhcmFjdGVycy4KKyAgeyUKKyAgICBcY291bnQxPTEyOAorICAgIFxkZWZcbG9vcHslCisgICAgICBcY2F0Y29kZVxjb3VudDE9XG90aGVyCisgICAgICBcYWR2YW5jZVxjb3VudDEgYnkgMQorICAgICAgXGlmbnVtIFxjb3VudDE8MjU2IFxsb29wIFxmaQorICAgIH0lCisgIH0lCisgICUKKyAgJSBAIGlzIG91ciBlc2NhcGUgY2hhcmFjdGVyIGluIC5hdXggZmlsZXMsIGFuZCB3ZSBuZWVkIGJyYWNlcy4KKyAgXGNhdGNvZGVgXHs9MQorICBcY2F0Y29kZWBcfT0yCisgIFxjYXRjb2RlYFxAPTAKK30KKworXGRlZlxyZWFkZGF0YWZpbGUjMXslCitcYmVnaW5ncm91cAorICBcc2V0dXBkYXRhZmlsZQorICBcaW5wdXRcam9ibmFtZS4jMQorXGVuZGdyb3VwfQorCisKK1xtZXNzYWdle2luc2VydGlvbnMsfQorJSBpbmNsdWRpbmcgZm9vdG5vdGVzLgorCitcbmV3Y291bnQgXGZvb3Rub3Rlbm8KKworJSBUaGUgdHJhaWxpbmcgc3BhY2UgaW4gdGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIGZvciBzdXBlcmVqZWN0IGlzCislIHZpdGFsIGZvciBwcm9wZXIgZmlsbGluZzsgcGFnZXMgY29tZSBvdXQgdW5hbGlnbmVkIHdoZW4geW91IGRvIGEKKyUgcGFnZWFsaWdubWFjcm8gY2FsbCBpZiB0aGF0IHNwYWNlIGJlZm9yZSB0aGUgY2xvc2luZyBicmFjZSBpcworJSByZW1vdmVkLiAoR2VuZXJhbGx5LCBudW1lcmljIGNvbnN0YW50cyBzaG91bGQgYWx3YXlzIGJlIGZvbGxvd2VkIGJ5IGEKKyUgc3BhY2UgdG8gcHJldmVudCBzdHJhbmdlIGV4cGFuc2lvbiBlcnJvcnMuKQorXGRlZlxzdXBlcmVqZWN0e1xwYXJccGVuYWx0eSAtMjAwMDBcZm9vdG5vdGVubyA9MCB9CisKKyUgQGZvb3Rub3Rlc3R5bGUgaXMgbWVhbmluZ2Z1bCBmb3IgaW5mbyBvdXRwdXQgb25seS4KK1xsZXRcZm9vdG5vdGVzdHlsZT1cY29tbWVudAorCit7XGNhdGNvZGUgYFxAPTExCislCislIEF1dG8tbnVtYmVyIGZvb3Rub3Rlcy4gIE90aGVyd2lzZSBsaWtlIHBsYWluLgorXGdkZWZcZm9vdG5vdGV7JQorICBcbGV0XGluZGVudD1ccHRleGluZGVudAorICBcbGV0XG5vaW5kZW50PVxwdGV4bm9pbmRlbnQKKyAgXGdsb2JhbFxhZHZhbmNlXGZvb3Rub3Rlbm8gYnkgXEBuZQorICBcZWRlZlx0aGlzZm9vdG5veyRee1x0aGVcZm9vdG5vdGVub30kfSUKKyAgJQorICAlIEluIGNhc2UgdGhlIGZvb3Rub3RlIGNvbWVzIGF0IHRoZSBlbmQgb2YgYSBzZW50ZW5jZSwgcHJlc2VydmUgdGhlCisgICUgZXh0cmEgc3BhY2luZyBhZnRlciB3ZSBkbyB0aGUgZm9vdG5vdGUgbnVtYmVyLgorICBcbGV0XEBzZlxlbXB0eQorICBcaWZobW9kZVxlZGVmXEBzZntcc3BhY2VmYWN0b3JcdGhlXHNwYWNlZmFjdG9yfVxwdGV4c2xhc2hcZmkKKyAgJQorICAlIFJlbW92ZSBpbmFkdmVydGVudCBibGFuayBzcGFjZSBiZWZvcmUgdHlwZXNldHRpbmcgdGhlIGZvb3Rub3RlIG51bWJlci4KKyAgXHVuc2tpcAorICBcdGhpc2Zvb3Rub1xAc2YKKyAgXGRvZm9vdG5vdGUKK30lCisKKyUgRG9uJ3QgYm90aGVyIHdpdGggdGhlIHRyaWNrZXJ5IGluIHBsYWluLnRleCB0byBub3QgcmVxdWlyZSB0aGUKKyUgZm9vdG5vdGUgdGV4dCBhcyBhIHBhcmFtZXRlci4gIE91ciBmb290bm90ZXMgZG9uJ3QgbmVlZCB0byBiZSBzbyBnZW5lcmFsLgorJQorJSBPaCB5ZXMsIHRoZXkgZG87IG90aGVyd2lzZSwgQGlmc2V0IChhbmQgYW55dGhpbmcgZWxzZSB0aGF0IHVzZXMKKyUgXHBhcnNlYXJnbGluZSkgZmFpbHMgaW5zaWRlIGZvb3Rub3RlcyBiZWNhdXNlIHRoZSB0b2tlbnMgYXJlIGZpeGVkIHdoZW4KKyUgdGhlIGZvb3Rub3RlIGlzIHJlYWQuICAtLWthcmwsIDE2bm92OTYuCislCitcZ2RlZlxkb2Zvb3Rub3RleyUKKyAgXGluc2VydFxmb290aW5zXGJncm91cAorICAlIFdlIHdhbnQgdG8gdHlwZXNldCB0aGlzIHRleHQgYXMgYSBub3JtYWwgcGFyYWdyYXBoLCBldmVuIGlmIHRoZQorICAlIGZvb3Rub3RlIHJlZmVyZW5jZSBvY2N1cnMgaW4gKGZvciBleGFtcGxlKSBhIGRpc3BsYXkgZW52aXJvbm1lbnQuCisgICUgU28gcmVzZXQgc29tZSBwYXJhbWV0ZXJzLgorICBcaHNpemU9XHBhZ2V3aWR0aAorICBcaW50ZXJsaW5lcGVuYWx0eVxpbnRlcmZvb3Rub3RlbGluZXBlbmFsdHkKKyAgXHNwbGl0dG9wc2tpcFxodFxzdHJ1dGJveCAlIHRvcCBiYXNlbGluZSBmb3IgYnJva2VuIGZvb3Rub3RlcworICBcc3BsaXRtYXhkZXB0aFxkcFxzdHJ1dGJveAorICBcZmxvYXRpbmdwZW5hbHR5XEBNTQorICBcbGVmdHNraXBcekBza2lwCisgIFxyaWdodHNraXBcekBza2lwCisgIFxzcGFjZXNraXBcekBza2lwCisgIFx4c3BhY2Vza2lwXHpAc2tpcAorICBccGFyaW5kZW50XGRlZmF1bHRwYXJpbmRlbnQKKyAgJQorICBcc21hbGxmb250cyBccm0KKyAgJQorICAlIEJlY2F1c2Ugd2UgdXNlIGhhbmdpbmcgaW5kZW50YXRpb24gaW4gZm9vdG5vdGVzLCBhIEBub2luZGVudCBhcHBlYXJzCisgICUgdG8gZXhkZW50IHRoaXMgdGV4dCwgc28gbWFrZSBpdCBiZSBhIG5vLW9wLiAgbWFrZWluZm8gZG9lcyBub3QgdXNlCisgICUgaGFuZ2luZyBpbmRlbnRhdGlvbiBzbyBAbm9pbmRlbnQgY2FuIHN0aWxsIGJlIG5lZWRlZCB3aXRoaW4gZm9vdG5vdGUKKyAgJSB0ZXh0IGFmdGVyIGFuIEBleGFtcGxlIG9yIHRoZSBsaWtlIChub3QgdGhhdCB0aGlzIGlzIGdvb2Qgc3R5bGUpLgorICBcbGV0XG5vaW5kZW50ID0gXHJlbGF4CisgICUKKyAgJSBIYW5nIHRoZSBmb290bm90ZSB0ZXh0IG9mZiB0aGUgbnVtYmVyLiAgVXNlIFxldmVyeXBhciBpbiBjYXNlIHRoZQorICAlIGZvb3Rub3RlIGV4dGVuZHMgZm9yIG1vcmUgdGhhbiBvbmUgcGFyYWdyYXBoLgorICBcZXZlcnlwYXIgPSB7XGhhbmd9JQorICBcdGV4dGluZGVudHtcdGhpc2Zvb3Rub30lCisgICUKKyAgJSBEb24ndCBjcmFzaCBpbnRvIHRoZSBsaW5lIGFib3ZlIHRoZSBmb290bm90ZSB0ZXh0LiAgU2luY2UgdGhpcworICAlIGV4cGFuZHMgaW50byBhIGJveCwgaXQgbXVzdCBjb21lIHdpdGhpbiB0aGUgcGFyYWdyYXBoLCBsZXN0IGl0CisgICUgcHJvdmlkZSBhIHBsYWNlIHdoZXJlIFRlWCBjYW4gc3BsaXQgdGhlIGZvb3Rub3RlLgorICBcZm9vdHN0cnV0CisgIFxmdXR1cmVsZXRcbmV4dFxmb0B0Cit9Cit9JWVuZCBcY2F0Y29kZSBgXEA9MTEKKworJSBJbiBjYXNlIGEgQGZvb3Rub3RlIGFwcGVhcnMgaW4gYSB2Ym94LCBzYXZlIHRoZSBmb290bm90ZSB0ZXh0IGFuZCBjcmVhdGUKKyUgdGhlIHJlYWwgXGluc2VydCBqdXN0IGFmdGVyIHRoZSB2Ym94IGZpbmlzaGVkLiAgT3RoZXJ3aXNlLCB0aGUgaW5zZXJ0aW9uCislIHdvdWxkIGJlIGxvc3QuCislIFNpbWlsYXJseSwgaWYgYSBAZm9vdG5vdGUgYXBwZWFycyBpbnNpZGUgYW4gYWxpZ25tZW50LCBzYXZlIHRoZSBmb290bm90ZQorJSB0ZXh0IHRvIGEgYm94IGFuZCBtYWtlIHRoZSBcaW5zZXJ0IHdoZW4gYSByb3cgb2YgdGhlIHRhYmxlIGlzIGZpbmlzaGVkLgorJSBBbmQgdGhlIHNhbWUgY2FuIGJlIGRvbmUgZm9yIG90aGVyIGluc2VydCBjbGFzc2VzLiAgLS1rYXNhbCwgMTZub3YwMy4KKworJSBSZXBsYWNlIHRoZSBcaW5zZXJ0IHByaW1pdGl2ZSBieSBhIGNoZWF0aW5nIG1hY3JvLgorJSBEZWVwZXIgaW5zaWRlLCBqdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBzYXZlZCBpbnNlcnRpb25zIGFyZSBub3Qgc3BpbGxlZAorJSBvdXQgcHJlbWF0dXJlbHkuCislCitcZGVmXHN0YXJ0c2F2aW5naW5zZXJ0c3slCisgIFxpZnggXGluc2VydFxwdGV4aW5zZXJ0CisgICAgXGxldFxpbnNlcnRcc2F2ZWluc2VydAorICBcZWxzZQorICAgIFxsZXRcY2hlY2tpbnNlcnRzXHJlbGF4CisgIFxmaQorfQorCislIFRoaXMgXGluc2VydCByZXBsYWNlbWVudCB3b3JrcyBmb3IgYm90aCBcaW5zZXJ0XGZvb3RpbnN7Zm9vfSBhbmQKKyUgXGluc2VydFxmb290aW5zXGJncm91cCBmb29cZWdyb3VwLCBidXQgaXQgZG9lc24ndCB3b3JrIGZvciBcaW5zZXJ0Mjd7Zm9vfS4KKyUKK1xkZWZcc2F2ZWluc2VydCMxeyUKKyAgXGVkZWZcbmV4dHtcbm9leHBhbmRcc2F2ZXRvYm94IFxtYWtlU0FWRW5hbWUjMX0lCisgIFxhZnRlcmFzc2lnbm1lbnRcbmV4dAorICAlIHN3YWxsb3cgdGhlIGxlZnQgYnJhY2UKKyAgXGxldFx0ZW1wID0KK30KK1xkZWZcbWFrZVNBVkVuYW1lIzF7XG1ha2Vjc25hbWV7U0FWRVxleHBhbmRhZnRlclxnb2JibGVcc3RyaW5nIzF9fQorXGRlZlxzYXZldG9ib3gjMXtcZ2xvYmFsXHNldGJveCMxID0gXHZib3hcYmdyb3VwIFx1bnZib3gjMX0KKworXGRlZlxjaGVja3NhdmVpbnMjMXtcaWZ2b2lkIzFcZWxzZSBccGxhY2VzYXZlaW5zIzFcZml9CisKK1xkZWZccGxhY2VzYXZlaW5zIzF7JQorICBccHRleGluc2VydCBcY3NuYW1lXGV4cGFuZGFmdGVyXGdvYmJsZXNhdmVcc3RyaW5nIzFcZW5kY3NuYW1lCisgICAge1xib3gjMX0lCit9CisKKyUgZWF0IEBTQVZFIC0tIGJld2FyZSwgYWxsIG9mIHRoZW0gaGF2ZSBjYXRjb2RlIFxvdGhlcjoKK3sKKyAgXGRlZlxkb3NwZWNpYWxze1xkbyBTXGRvIEFcZG8gVlxkbyBFfSBcdW5jYXRjb2Rlc3BlY2lhbHMgICUgIDstKQorICBcZ2RlZlxnb2JibGVzYXZlIEBTQVZFe30KK30KKworJSBpbml0aWFsaXphdGlvbjoKK1xkZWZcbmV3c2F2ZWlucyAjMXslCisgIFxlZGVmXG5leHR7XG5vZXhwYW5kXG5ld3NhdmVpbnNYIFxtYWtlU0FWRW5hbWUjMX0lCisgIFxuZXh0Cit9CitcZGVmXG5ld3NhdmVpbnNYICMxeyUKKyAgXGNzbmFtZSBuZXdib3hcZW5kY3NuYW1lICMxJQorICBcZXhwYW5kYWZ0ZXJcZGVmXGV4cGFuZGFmdGVyXGNoZWNraW5zZXJ0c1xleHBhbmRhZnRlcntcY2hlY2tpbnNlcnRzCisgICAgXGNoZWNrc2F2ZWlucyAjMX0lCit9CisKKyUgaW5pdGlhbGl6ZToKK1xsZXRcY2hlY2tpbnNlcnRzXGVtcHR5CitcbmV3c2F2ZWluc1xmb290aW5zCitcbmV3c2F2ZWluc1xtYXJnaW4KKworCislIEBpbWFnZS4gIFdlIHVzZSB0aGUgbWFjcm9zIGZyb20gZXBzZi50ZXggdG8gc3VwcG9ydCB0aGlzLgorJSBJZiBlcHNmLnRleCBpcyBub3QgaW5zdGFsbGVkIGFuZCBAaW1hZ2UgaXMgdXNlZCwgd2UgY29tcGxhaW4uCislCislIENoZWNrIGZvciBhbmQgcmVhZCBlcHNmLnRleCB1cCBmcm9udC4gIElmIHdlIHJlYWQgaXQgb25seSBhdCBAaW1hZ2UKKyUgdGltZSwgd2UgbWlnaHQgYmUgaW5zaWRlIGEgZ3JvdXAsIGFuZCB0aGVuIGl0cyBkZWZpbml0aW9ucyB3b3VsZCBnZXQKKyUgdW5kb25lIGFuZCB0aGUgbmV4dCBpbWFnZSB3b3VsZCBmYWlsLgorXG9wZW5pbiAxID0gZXBzZi50ZXgKK1xpZmVvZiAxIFxlbHNlCisgICUgRG8gbm90IGJvdGhlciBzaG93aW5nIGJhbm5lciB3aXRoIGVwc2YudGV4IHYyLjdrIChhdmFpbGFibGUgaW4KKyAgJSBkb2MvZXBzZi50ZXggYW5kIG9uIGN0YW4pLgorICBcZGVmXGVwc2Zhbm5vdW5jZXtcdG9rczAgPSB9JQorICBcaW5wdXQgZXBzZi50ZXgKK1xmaQorXGNsb3NlaW4gMQorJQorJSBXZSB3aWxsIG9ubHkgY29tcGxhaW4gb25jZSBhYm91dCBsYWNrIG9mIGVwc2YudGV4LgorXG5ld2lmXGlmd2FybmVkbm9lcHNmCitcbmV3aGVscFxub2Vwc2ZoZWxwe2Vwc2YudGV4IG11c3QgYmUgaW5zdGFsbGVkIGZvciBpbWFnZXMgdG8KKyAgd29yay4gIEl0IGlzIGFsc28gaW5jbHVkZWQgaW4gdGhlIFRleGluZm8gZGlzdHJpYnV0aW9uLCBvciB5b3UgY2FuIGdldAorICBpdCBmcm9tIGZ0cDovL3R1Zy5vcmcvdGV4L2Vwc2YudGV4Ln0KKyUKK1xkZWZcaW1hZ2UjMXslCisgIFxpZnhcZXBzZmJveFx1bmRlZmluZWQKKyAgICBcaWZ3YXJuZWRub2Vwc2YgXGVsc2UKKyAgICAgIFxlcnJoZWxwID0gXG5vZXBzZmhlbHAKKyAgICAgIFxlcnJtZXNzYWdle2Vwc2YudGV4IG5vdCBmb3VuZCwgaW1hZ2VzIHdpbGwgYmUgaWdub3JlZH0lCisgICAgICBcZ2xvYmFsXHdhcm5lZG5vZXBzZnRydWUKKyAgICBcZmkKKyAgXGVsc2UKKyAgICBcaW1hZ2V4eHggIzEsLCwsLFxmaW5pc2gKKyAgXGZpCit9CislCislIEFyZ3VtZW50cyB0byBAaW1hZ2U6CislICMxIGlzIChtYW5kYXRvcnkpIGltYWdlIGZpbGVuYW1lOyB3ZSB0YWNrIG9uIC5lcHMgZXh0ZW5zaW9uLgorJSAjMiBpcyAob3B0aW9uYWwpIHdpZHRoLCAjMyBpcyAob3B0aW9uYWwpIGhlaWdodC4KKyUgIzQgaXMgKGlnbm9yZWQgb3B0aW9uYWwpIGh0bWwgYWx0IHRleHQuCislICM1IGlzIChpZ25vcmVkIG9wdGlvbmFsKSBleHRlbnNpb24uCislICM2IGlzIGp1c3QgdGhlIHVzdWFsIGV4dHJhIGlnbm9yZWQgYXJnIGZvciBwYXJzaW5nIHRoaXMgc3R1ZmYuCitcbmV3aWZcaWZpbWFnZXZtb2RlCitcZGVmXGltYWdleHh4IzEsIzIsIzMsIzQsIzUsIzZcZmluaXNoe1xiZWdpbmdyb3VwCisgIFxjYXRjb2RlYFxeXk0gPSA1ICAgICAlIGluIGNhc2Ugd2UncmUgaW5zaWRlIGFuIGV4YW1wbGUKKyAgXG5vcm1hbHR1cm5vZmZhY3RpdmUgICUgYWxsb3cgXyBldCBhbC4gaW4gbmFtZXMKKyAgJSBJZiB0aGUgaW1hZ2UgaXMgYnkgaXRzZWxmLCBjZW50ZXIgaXQuCisgIFxpZnZtb2RlCisgICAgXGltYWdldm1vZGV0cnVlCisgICAgXG5vYnJlYWtcbWVkc2tpcAorICAgICUgVXN1YWxseSB3ZSdsbCBoYXZlIHRleHQgYWZ0ZXIgdGhlIGltYWdlIHdoaWNoIHdpbGwgaW5zZXJ0CisgICAgJSBccGFyc2tpcCBnbHVlLCBzbyBpbnNlcnQgaXQgaGVyZSB0b28gdG8gZXF1YWxpemUgdGhlIHNwYWNlCisgICAgJSBhYm92ZSBhbmQgYmVsb3cuCisgICAgXG5vYnJlYWtcdnNraXBccGFyc2tpcAorICAgIFxub2JyZWFrCisgIFxmaQorICAlCisgICUgTGVhdmUgdmVydGljYWwgbW9kZSBzbyB0aGF0IGluZGVudGF0aW9uIGZyb20gYW4gZW5jbG9zaW5nCisgICUgZW52aXJvbm1lbnQgc3VjaCBhcyBAcXVvdGF0aW9uIGlzIHJlc3BlY3RlZC4gIE9uIHRoZSBvdGhlciBoYW5kLCBpZgorICAlIGl0J3MgYXQgdGhlIHRvcCBsZXZlbCwgd2UgZG9uJ3Qgd2FudCB0aGUgbm9ybWFsIHBhcmFncmFwaCBpbmRlbnRhdGlvbi4KKyAgXG5vaW5kZW50CisgICUKKyAgJSBPdXRwdXQgdGhlIGltYWdlLgorICBcaWZwZGYKKyAgICBcZG9wZGZpbWFnZXsjMX17IzJ9eyMzfSUKKyAgXGVsc2UKKyAgICAlIFxlcHNmYm94IGl0c2VsZiByZXNldHMgXGVwc2Y/c2l6ZSBhdCBlYWNoIGZpZ3VyZS4KKyAgICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzJ9XGlmZGltXHdkMCA+IDBwdCBcZXBzZnhzaXplPSMyXHJlbGF4IFxmaQorICAgIFxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjM31caWZkaW1cd2QwID4gMHB0IFxlcHNmeXNpemU9IzNccmVsYXggXGZpCisgICAgXGVwc2Zib3h7IzEuZXBzfSUKKyAgXGZpCisgICUKKyAgXGlmaW1hZ2V2bW9kZSBcbWVkc2tpcCBcZmkgICUgc3BhY2UgYWZ0ZXIgdGhlIHN0YW5kYWxvbmUgaW1hZ2UKK1xlbmRncm91cH0KKworCislIEBmbG9hdCBGTE9BVFRZUEUsTEFCRUwsTE9DIC4uLiBAZW5kIGZsb2F0IGZvciBkaXNwbGF5ZWQgZmlndXJlcywgdGFibGVzLAorJSBldGMuICBXZSBkb24ndCBhY3R1YWxseSBpbXBsZW1lbnQgZmxvYXRpbmcgeWV0LCB3ZSBhbHdheXMgaW5jbHVkZSB0aGUKKyUgZmxvYXQgImhlcmUiLiAgQnV0IGl0IHNlZW1lZCB0aGUgYmVzdCBuYW1lIGZvciB0aGUgZnV0dXJlLgorJQorXGVudnBhcnNlYXJnZGVmXGZsb2F0e1xlYXRjb21tYXNwYWNlXGVhdGNvbW1hc3BhY2VcZG9mbG9hdCMxLCAsICxcZmluaXNofQorCislIFRoZXJlIG1heSBiZSBhIHNwYWNlIGJlZm9yZSBzZWNvbmQgYW5kL29yIHRoaXJkIHBhcmFtZXRlcjsgZGVsZXRlIGl0LgorXGRlZlxlYXRjb21tYXNwYWNlIzEsIHsjMSx9CisKKyUgIzEgaXMgdGhlIG9wdGlvbmFsIEZMT0FUVFlQRSwgdGhlIHRleHQgbGFiZWwgZm9yIHRoaXMgZmxvYXQsIHR5cGljYWxseQorJSAiRmlndXJlIiwgIlRhYmxlIiwgIkV4YW1wbGUiLCBldGMuICBDYW4ndCBjb250YWluIGNvbW1hcy4gIElmIG9taXR0ZWQsCislIHRoaXMgZmxvYXQgd2lsbCBub3QgYmUgbnVtYmVyZWQgYW5kIGNhbm5vdCBiZSByZWZlcnJlZCB0by4KKyUKKyUgIzIgaXMgdGhlIG9wdGlvbmFsIHhyZWYgbGFiZWwuICBBbHNvIG11c3QgYmUgcHJlc2VudCBmb3IgdGhlIGZsb2F0IHRvCislIGJlIHJlZmVyYWJsZS4KKyUKKyUgIzMgaXMgdGhlIG9wdGlvbmFsIHBvc2l0aW9uaW5nIGFyZ3VtZW50OyBmb3Igbm93LCBpdCBpcyBpZ25vcmVkLiAgSXQKKyUgd2lsbCBzb21laG93IHNwZWNpZnkgdGhlIHBvc2l0aW9ucyBhbGxvd2VkIHRvIGZsb2F0IHRvIChoZXJlLCB0b3AsIGJvdHRvbSkuCislCislIFdlIGtlZXAgYSBzZXBhcmF0ZSBjb3VudGVyIGZvciBlYWNoIEZMT0FUVFlQRSwgd2hpY2ggd2UgcmVzZXQgYXQgZWFjaAorJSBjaGFwdGVyLWxldmVsIGNvbW1hbmQuCitcbGV0XHJlc2V0YWxsZmxvYXRub3M9XGVtcHR5CislCitcZGVmXGRvZmxvYXQjMSwjMiwjMywjNFxmaW5pc2h7JQorICBcbGV0XHRoaXNjYXB0aW9uPVxlbXB0eQorICBcbGV0XHRoaXNzaG9ydGNhcHRpb249XGVtcHR5CisgICUKKyAgJSBkb24ndCBsb3NlIGZvb3Rub3RlcyBpbnNpZGUgQGZsb2F0LgorICAlCisgICUgQkVXQVJFOiB3aGVuIHRoZSBmbG9hdHMgc3RhcnQgZmxvYXQsIHdlIGhhdmUgdG8gaXNzdWUgd2FybmluZyB3aGVuZXZlciBhbgorICAlIGluc2VydCBhcHBlYXJzIGluc2lkZSBhIGZsb2F0IHdoaWNoIGNvdWxkIHBvc3NpYmx5IGZsb2F0LiAtLWthc2FsLCAyNm1heTA0CisgICUKKyAgXHN0YXJ0c2F2aW5naW5zZXJ0cworICAlCisgICUgV2UgY2FuJ3QgYmUgdXNlZCBpbnNpZGUgYSBwYXJhZ3JhcGguCisgIFxwYXIKKyAgJQorICBcdnRvcFxiZ3JvdXAKKyAgICBcZGVmXGZsb2F0dHlwZXsjMX0lCisgICAgXGRlZlxmbG9hdGxhYmVseyMyfSUKKyAgICBcZGVmXGZsb2F0bG9jeyMzfSUgd2UgZG8gbm90aGluZyB3aXRoIHRoaXMgeWV0LgorICAgICUKKyAgICBcaWZ4XGZsb2F0dHlwZVxlbXB0eQorICAgICAgXGxldFxzYWZlZmxvYXR0eXBlPVxlbXB0eQorICAgIFxlbHNlCisgICAgICB7JQorICAgICAgICAlIHRoZSBmbG9hdHR5cGUgbWlnaHQgaGF2ZSBhY2NlbnRzIG9yIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVycywKKyAgICAgICAgJSBidXQgd2UgbmVlZCB0byB1c2UgaXQgaW4gYSBjb250cm9sIHNlcXVlbmNlIG5hbWUuCisgICAgICAgIFxpbmRleG5vZm9udHMKKyAgICAgICAgXHR1cm5vZmZhY3RpdmUKKyAgICAgICAgXHhkZWZcc2FmZWZsb2F0dHlwZXtcZmxvYXR0eXBlfSUKKyAgICAgIH0lCisgICAgXGZpCisgICAgJQorICAgICUgSWYgbGFiZWwgaXMgZ2l2ZW4gYnV0IG5vIHR5cGUsIHdlIGhhbmRsZSB0aGF0IGFzIHRoZSBlbXB0eSB0eXBlLgorICAgIFxpZnhcZmxvYXRsYWJlbFxlbXB0eSBcZWxzZQorICAgICAgJSBXZSB3YW50IGVhY2ggRkxPQVRUWVBFIHRvIGJlIG51bWJlcmVkIHNlcGFyYXRlbHkgKEZpZ3VyZSAxLAorICAgICAgJSBUYWJsZSAxLCBGaWd1cmUgMiwgLi4uKS4gIChBbmQgaWYgbm8gbGFiZWwsIG5vIG51bWJlci4pCisgICAgICAlCisgICAgICBcZXhwYW5kYWZ0ZXJcZ2V0ZmxvYXRub1xjc25hbWVcc2FmZWZsb2F0dHlwZSBmbG9hdG5vXGVuZGNzbmFtZQorICAgICAgXGdsb2JhbFxhZHZhbmNlXGZsb2F0bm8gYnkgMQorICAgICAgJQorICAgICAgeyUKKyAgICAgICAgJSBUaGlzIG1hZ2ljIHZhbHVlIGZvciBcbGFzdHNlY3Rpb24gaXMgb3V0cHV0IGJ5IFxzZXRyZWYgYXMgdGhlCisgICAgICAgICUgWFJFRkxBQkVMLXRpdGxlIHZhbHVlLiAgXHhyZWZYIHVzZXMgaXQgdG8gZGlzdGluZ3Vpc2ggZmxvYXQKKyAgICAgICAgJSBsYWJlbHMgKHdoaWNoIGhhdmUgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBvdXRwdXQgZm9ybWF0KSBmcm9tCisgICAgICAgICUgbm9kZSBhbmQgYW5jaG9yIGxhYmVscy4gIEFuZCBceHJkZWYgdXNlcyBpdCB0byBjb25zdHJ1Y3QgdGhlCisgICAgICAgICUgbGlzdHMgb2YgZmxvYXRzLgorICAgICAgICAlCisgICAgICAgIFxlZGVmXGxhc3RzZWN0aW9ue1xmbG9hdG1hZ2ljPVxzYWZlZmxvYXR0eXBlfSUKKyAgICAgICAgXHNldHJlZntcZmxvYXRsYWJlbH17WWZsb2F0fSUKKyAgICAgIH0lCisgICAgXGZpCisgICAgJQorICAgICUgc3RhcnQgd2l0aCBccGFyc2tpcCBnbHVlLCBJIGd1ZXNzLgorICAgIFx2c2tpcFxwYXJza2lwCisgICAgJQorICAgICUgRG9uJ3Qgc3VwcHJlc3MgaW5kZW50YXRpb24gaWYgYSBmbG9hdCBoYXBwZW5zIHRvIHN0YXJ0IGEgc2VjdGlvbi4KKyAgICBccmVzdG9yZWZpcnN0cGFyYWdyYXBoaW5kZW50Cit9CisKKyUgd2UgaGF2ZSB0aGVzZSBwb3NzaWJpbGl0aWVzOgorJSBAZmxvYXQgRm9vLGxibCAmIEBjYXB0aW9ue0NhcH06IEZvbyAxLjE6IENhcAorJSBAZmxvYXQgRm9vLGxibCAmIG5vIGNhcHRpb246ICAgIEZvbyAxLjEKKyUgQGZsb2F0IEZvbyAmIEBjYXB0aW9ue0NhcH06ICAgICBGb286IENhcAorJSBAZmxvYXQgRm9vICYgbm8gY2FwdGlvbjogICAgICAgIEZvbworJSBAZmxvYXQgLGxibCAmIENhcHRpb257Q2FwfTogICAgIDEuMTogQ2FwCislIEBmbG9hdCAsbGJsICYgbm8gY2FwdGlvbjogICAgICAgMS4xCislIEBmbG9hdCAmIEBjYXB0aW9ue0NhcH06ICAgICAgICAgQ2FwCislIEBmbG9hdCAmIG5vIGNhcHRpb246CislCitcZGVmXEVmbG9hdHslCisgICAgXGxldFxmbG9hdGlkZW50ID0gXGVtcHR5CisgICAgJQorICAgICUgSW4gYWxsIGNhc2VzLCBpZiB3ZSBoYXZlIGEgZmxvYXQgdHlwZSwgaXQgY29tZXMgZmlyc3QuCisgICAgXGlmeFxmbG9hdHR5cGVcZW1wdHkgXGVsc2UgXGRlZlxmbG9hdGlkZW50e1xmbG9hdHR5cGV9XGZpCisgICAgJQorICAgICUgSWYgd2UgaGF2ZSBhbiB4cmVmIGxhYmVsLCB0aGUgbnVtYmVyIGNvbWVzIG5leHQuCisgICAgXGlmeFxmbG9hdGxhYmVsXGVtcHR5IFxlbHNlCisgICAgICBcaWZ4XGZsb2F0dHlwZVxlbXB0eSBcZWxzZSAlIGlmIGFsc28gaGFkIGZsb2F0IHR5cGUsIG5lZWQgdGllIGZpcnN0LgorICAgICAgICBcYXBwZW5kdG9tYWNyb1xmbG9hdGlkZW50e1x0aWV9JQorICAgICAgXGZpCisgICAgICAlIHRoZSBudW1iZXIuCisgICAgICBcYXBwZW5kdG9tYWNyb1xmbG9hdGlkZW50e1xjaGFwbGV2ZWxwcmVmaXhcdGhlXGZsb2F0bm99JQorICAgIFxmaQorICAgICUKKyAgICAlIFN0YXJ0IHRoZSBwcmludGVkIGNhcHRpb24gd2l0aCB3aGF0IHdlJ3ZlIGNvbnN0cnVjdGVkIGluCisgICAgJSBcZmxvYXRpZGVudCwgYnV0IGtlZXAgaXQgc2VwYXJhdGU7IHdlIG5lZWQgXGZsb2F0aWRlbnQgYWdhaW4uCisgICAgXGxldFxjYXB0aW9ubGluZSA9IFxmbG9hdGlkZW50CisgICAgJQorICAgIFxpZnhcdGhpc2NhcHRpb25cZW1wdHkgXGVsc2UKKyAgICAgIFxpZnhcZmxvYXRpZGVudFxlbXB0eSBcZWxzZQorCVxhcHBlbmR0b21hY3JvXGNhcHRpb25saW5lezogfSUgaGFkIGlkZW50LCBzbyBuZWVkIGEgY29sb24gYmV0d2VlbgorICAgICAgXGZpCisgICAgICAlCisgICAgICAlIGNhcHRpb24gdGV4dC4KKyAgICAgIFxhcHBlbmR0b21hY3JvXGNhcHRpb25saW5le1xzY2FuZXhwXHRoaXNjYXB0aW9ufSUKKyAgICBcZmkKKyAgICAlCisgICAgJSBJZiB3ZSBoYXZlIGFueXRoaW5nIHRvIHByaW50LCBwcmludCBpdCwgd2l0aCBzcGFjZSBiZWZvcmUuCisgICAgJSBFdmVudHVhbGx5IHRoaXMgbmVlZHMgdG8gYmVjb21lIGFuIFxpbnNlcnQuCisgICAgXGlmeFxjYXB0aW9ubGluZVxlbXB0eSBcZWxzZQorICAgICAgXHZza2lwLjVccGFyc2tpcAorICAgICAgXGNhcHRpb25saW5lCisgICAgICAlCisgICAgICAlIFNwYWNlIGJlbG93IGNhcHRpb24uCisgICAgICBcdnNraXBccGFyc2tpcAorICAgIFxmaQorICAgICUKKyAgICAlIElmIGhhdmUgYW4geHJlZiBsYWJlbCwgd3JpdGUgdGhlIGxpc3Qgb2YgZmxvYXRzIGluZm8uICBEbyB0aGlzCisgICAgJSBhZnRlciB0aGUgY2FwdGlvbiwgdG8gYXZvaWQgY2hhbmNlIG9mIGl0IGJlaW5nIGEgYnJlYWtwb2ludC4KKyAgICBcaWZ4XGZsb2F0bGFiZWxcZW1wdHkgXGVsc2UKKyAgICAgICUgV3JpdGUgdGhlIHRleHQgdGhhdCBnb2VzIGluIHRoZSBsb2YgdG8gdGhlIGF1eCBmaWxlIGFzCisgICAgICAlIFxmbG9hdGxhYmVsLWxvZi4gIEJlc2lkZXMgXGZsb2F0aWRlbnQsIHdlIGluY2x1ZGUgdGhlIHNob3J0CisgICAgICAlIGNhcHRpb24gaWYgc3BlY2lmaWVkLCBlbHNlIHRoZSBmdWxsIGNhcHRpb24gaWYgc3BlY2lmaWVkLCBlbHNlIG5vdGhpbmcuCisgICAgICB7JQorICAgICAgICBcYXRkdW1taWVzCisgICAgICAgICUKKyAgICAgICAgJSBzaW5jZSB3ZSByZWFkIHRoZSBjYXB0aW9uIHRleHQgaW4gdGhlIG1hY3JvIHdvcmxkLCB3aGVyZSBeXk0KKyAgICAgICAgJSBpcyB0dXJuZWQgaW50byBhIG5vcm1hbCBjaGFyYWN0ZXIsIHdlIGhhdmUgdG8gc2NhbiBpdCBiYWNrLCBzbworICAgICAgICAlIHdlIGRvbid0IHdyaXRlIHRoZSBsaXRlcmFsIHRocmVlIGNoYXJhY3RlcnMgIl5eTSIgaW50byB0aGUgYXV4IGZpbGUuCisJXHNjYW5leHB7JQorCSAgXHhkZWZcbm9leHBhbmRcZ3RlbXB7JQorCSAgICBcaWZ4XHRoaXNzaG9ydGNhcHRpb25cZW1wdHkKKwkgICAgICBcdGhpc2NhcHRpb24KKwkgICAgXGVsc2UKKwkgICAgICBcdGhpc3Nob3J0Y2FwdGlvbgorCSAgICBcZmkKKwkgIH0lCisJfSUKKyAgICAgICAgXGltbWVkaWF0ZVx3cml0ZVxhdXhmaWxle0B4cmRlZntcZmxvYXRsYWJlbC1sb2Z9e1xmbG9hdGlkZW50CisJICBcaWZ4XGd0ZW1wXGVtcHR5IFxlbHNlIDogXGd0ZW1wIFxmaX19JQorICAgICAgfSUKKyAgICBcZmkKKyAgXGVncm91cCAgJSBlbmQgb2YgXHZ0b3AKKyAgJQorICAlIHBsYWNlIHRoZSBjYXB0dXJlZCBpbnNlcnRzCisgICUKKyAgJSBCRVdBUkU6IHdoZW4gdGhlIGZsb2F0cyBzdGFydCBmbG9hdGluZywgd2UgaGF2ZSB0byBpc3N1ZSB3YXJuaW5nCisgICUgd2hlbmV2ZXIgYW4gaW5zZXJ0IGFwcGVhcnMgaW5zaWRlIGEgZmxvYXQgd2hpY2ggY291bGQgcG9zc2libHkKKyAgJSBmbG9hdC4gLS1rYXNhbCwgMjZtYXkwNAorICAlCisgIFxjaGVja2luc2VydHMKK30KKworJSBBcHBlbmQgdGhlIHRva2VucyAjMiB0byB0aGUgZGVmaW5pdGlvbiBvZiBtYWNybyAjMSwgbm90IGV4cGFuZGluZyBlaXRoZXIuCislCitcZGVmXGFwcGVuZHRvbWFjcm8jMSMyeyUKKyAgXGV4cGFuZGFmdGVyXGRlZlxleHBhbmRhZnRlciMxXGV4cGFuZGFmdGVyeyMxIzJ9JQorfQorCislIEBjYXB0aW9uLCBAc2hvcnRjYXB0aW9uCislCitcZGVmXGNhcHRpb257XGRvY2FwdGlvblx0aGlzY2FwdGlvbn0KK1xkZWZcc2hvcnRjYXB0aW9ue1xkb2NhcHRpb25cdGhpc3Nob3J0Y2FwdGlvbn0KK1xkZWZcZG9jYXB0aW9ue1xjaGVja2VudlxmbG9hdCBcYmdyb3VwXHNjYW5hcmdjdHh0XGRlZmNhcHRpb259CitcZGVmXGRlZmNhcHRpb24jMSMye1xlZ3JvdXAgXGRlZiMxeyMyfX0KKworJSBUaGUgcGFyYW1ldGVyIGlzIHRoZSBjb250cm9sIHNlcXVlbmNlIGlkZW50aWZ5aW5nIHRoZSBjb3VudGVyIHdlIGFyZQorJSBnb2luZyB0byB1c2UuICBDcmVhdGUgaXQgaWYgaXQgZG9lc24ndCBleGlzdCBhbmQgYXNzaWduIGl0IHRvIFxmbG9hdG5vLgorXGRlZlxnZXRmbG9hdG5vIzF7JQorICBcaWZ4IzFccmVsYXgKKyAgICAgICUgSGF2ZW4ndCBzZWVuIHRoaXMgZmlndXJlIHR5cGUgYmVmb3JlLgorICAgICAgXGNzbmFtZSBuZXdjb3VudFxlbmRjc25hbWUgIzElCisgICAgICAlCisgICAgICAlIFJlbWVtYmVyIHRvIHJlc2V0IHRoaXMgZmxvYXRubyBhdCB0aGUgbmV4dCBjaGFwLgorICAgICAgXGV4cGFuZGFmdGVyXGdkZWZcZXhwYW5kYWZ0ZXJccmVzZXRhbGxmbG9hdG5vcworICAgICAgICBcZXhwYW5kYWZ0ZXJ7XHJlc2V0YWxsZmxvYXRub3MgIzE9MCB9JQorICBcZmkKKyAgXGxldFxmbG9hdG5vIzElCit9CisKKyUgXHNldHJlZiBjYWxscyB0aGlzIHRvIGdldCB0aGUgWFJFRkxBQkVMLXNudCB2YWx1ZS4gIFdlIHdhbnQgYW4gQHhyZWYKKyUgdG8gdGhlIEZMT0FUTEFCRUwgdG8gZXhwYW5kIHRvICJGaWd1cmUgMy4xIi4gIFdlIGNhbGwgXHNldHJlZiB3aGVuIHdlCislIGZpcnN0IHJlYWQgdGhlIEBmbG9hdCBjb21tYW5kLgorJQorXGRlZlxZZmxvYXR7XGZsb2F0dHlwZUB0aWUgXGNoYXBsZXZlbHByZWZpeFx0aGVcZmxvYXRub30lCisKKyUgTWFnaWMgc3RyaW5nIHVzZWQgZm9yIHRoZSBYUkVGTEFCRUwtdGl0bGUgdmFsdWUsIHNvIFx4cmVmWCBjYW4KKyUgZGlzdGluZ3Vpc2ggZmxvYXRzIGZyb20gb3RoZXIgeHJlZiB0eXBlcy4KK1xkZWZcZmxvYXRtYWdpY3shIWZsb2F0ISF9CisKKyUgIzEgaXMgdGhlIGNvbnRyb2wgc2VxdWVuY2Ugd2UgYXJlIHBhc3NlZDsgd2UgZXhwYW5kIGludG8gYSBjb25kaXRpb25hbAorJSB3aGljaCBpcyB0cnVlIGlmICMxIHJlcHJlc2VudHMgYSBmbG9hdCByZWYuICBUaGF0IGlzLCB0aGUgbWFnaWMKKyUgXGxhc3RzZWN0aW9uIHZhbHVlIHdoaWNoIHdlIFxzZXRyZWYgYWJvdmUuCislCitcZGVmXGlmZmxvYXQjMXtcZXhwYW5kYWZ0ZXJcZG9pZmZsb2F0IzE9PVxmaW5pc2h9CislCislICMxIGlzIChtYXliZSkgdGhlIFxmbG9hdG1hZ2ljIHN0cmluZy4gIElmIHNvLCAjMiB3aWxsIGJlIHRoZQorJSAoc2FmZSkgZmxvYXQgdHlwZSBmb3IgdGhpcyBmbG9hdC4gIFdlIHNldCBcaWZmbG9hdHR5cGUgdG8gIzIuCislCitcZGVmXGRvaWZmbG9hdCMxPSMyPSMzXGZpbmlzaHslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxkZWZcaWZmbG9hdHR5cGV7IzJ9JQorICBcaWZ4XHRlbXBcZmxvYXRtYWdpYworfQorCislIEBsaXN0b2ZmbG9hdHMgRkxPQVRUWVBFIC0gcHJpbnQgYSBsaXN0IG9mIGZsb2F0cyBsaWtlIGEgdGFibGUgb2YgY29udGVudHMuCislCitccGFyc2VhcmdkZWZcbGlzdG9mZmxvYXRzeyUKKyAgXGRlZlxmbG9hdHR5cGV7IzF9JSBmbG9hdHR5cGUKKyAgeyUKKyAgICAlIHRoZSBmbG9hdHR5cGUgbWlnaHQgaGF2ZSBhY2NlbnRzIG9yIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVycywKKyAgICAlIGJ1dCB3ZSBuZWVkIHRvIHVzZSBpdCBpbiBhIGNvbnRyb2wgc2VxdWVuY2UgbmFtZS4KKyAgICBcaW5kZXhub2ZvbnRzCisgICAgXHR1cm5vZmZhY3RpdmUKKyAgICBceGRlZlxzYWZlZmxvYXR0eXBle1xmbG9hdHR5cGV9JQorICB9JQorICAlCisgICUgXHhyZGVmIHNhdmVzIHRoZSBmbG9hdHMgYXMgYSBcZG8tbGlzdCBpbiBcZmxvYXRsaXN0U0FGRUZMT0FUVFlQRS4KKyAgXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgZmxvYXRsaXN0XHNhZmVmbG9hdHR5cGVcZW5kY3NuYW1lIFxyZWxheAorICAgIFxpZmhhdmV4cmVmcworICAgICAgJSBpZiB0aGUgdXNlciBzYWlkIEBsaXN0b2ZmbG9hdHMgZm9vIGJ1dCBuZXZlciBAZmxvYXQgZm9vLgorICAgICAgXG1lc3NhZ2V7XGxpbmVudW1iZXIgTm8gYFxzYWZlZmxvYXR0eXBlJyBmbG9hdHMgdG8gbGlzdC59JQorICAgIFxmaQorICBcZWxzZQorICAgIFxiZWdpbmdyb3VwCisgICAgICBcbGVmdHNraXA9XHRvY2luZGVudCAgJSBpbmRlbnQgdGhlc2UgZW50cmllcyBsaWtlIGEgdG9jCisgICAgICBcbGV0XGRvPVxsaXN0b2ZmbG9hdHNkbworICAgICAgXGNzbmFtZSBmbG9hdGxpc3Rcc2FmZWZsb2F0dHlwZVxlbmRjc25hbWUKKyAgICBcZW5kZ3JvdXAKKyAgXGZpCit9CisKKyUgVGhpcyBpcyBjYWxsZWQgb24gZWFjaCBlbnRyeSBpbiBhIGxpc3Qgb2YgZmxvYXRzLiAgV2UncmUgcGFzc2VkIHRoZQorJSB4cmVmIGxhYmVsLCBpbiB0aGUgZm9ybSBMQUJFTC10aXRsZSwgd2hpY2ggaXMgaG93IHdlIHNhdmUgaXQgaW4gdGhlCislIGF1eCBmaWxlLiAgV2Ugc3RyaXAgb2ZmIHRoZSAtdGl0bGUgYW5kIGxvb2sgdXAgXFhSTEFCRUwtbG9mLCB3aGljaAorJSBoYXMgdGhlIHRleHQgd2UncmUgc3VwcG9zZWQgdG8gdHlwZXNldCBoZXJlLgorJQorJSBGaWd1cmVzIHdpdGhvdXQgeHJlZiBsYWJlbHMgd2lsbCBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIGxpc3QgKHNpbmNlCislIHRoZXkgd29uJ3QgYXBwZWFyIGluIHRoZSBhdXggZmlsZSkuCislCitcZGVmXGxpc3RvZmZsb2F0c2RvIzF7XGxpc3RvZmZsb2F0c2RvZW50cnkjMVxmaW5pc2h9CitcZGVmXGxpc3RvZmZsb2F0c2RvZW50cnkjMS10aXRsZVxmaW5pc2h7eyUKKyAgJSBDYW4ndCBmdWxseSBleHBhbmQgWFIjMS1sb2YgYmVjYXVzZSBpdCBjYW4gY29udGFpbiBhbnl0aGluZy4gIEp1c3QKKyAgJSBwYXNzIHRoZSBjb250cm9sIHNlcXVlbmNlLiAgT24gdGhlIG90aGVyIGhhbmQsIFhSIzEtcGcgaXMganVzdCB0aGUKKyAgJSBwYWdlIG51bWJlciwgYW5kIHdlIHdhbnQgdG8gZnVsbHkgZXhwYW5kIHRoYXQgc28gd2UgY2FuIGdldCBhIGxpbmsKKyAgJSBpbiBwZGYgb3V0cHV0LgorICBcdG9rc0EgPSBcZXhwYW5kYWZ0ZXJ7XGNzbmFtZSBYUiMxLWxvZlxlbmRjc25hbWV9JQorICAlCisgICUgdXNlIHRoZSBzYW1lIFxlbnRyeSBtYWNybyB3ZSB1c2UgdG8gZ2VuZXJhdGUgdGhlIFRPQyBhbmQgaW5kZXguCisgIFxlZGVmXHdyaXRlZW50cnl7XG5vZXhwYW5kXGVudHJ5e1x0aGVcdG9rc0F9e1xjc25hbWUgWFIjMS1wZ1xlbmRjc25hbWV9fSUKKyAgXHdyaXRlZW50cnkKK319CisKKworXG1lc3NhZ2V7bG9jYWxpemF0aW9uLH0KKworJSBGb3Igc2luZ2xlLWxhbmd1YWdlIGRvY3VtZW50cywgQGRvY3VtZW50bGFuZ3VhZ2UgaXMgdXN1YWxseSBnaXZlbiB2ZXJ5CislIGVhcmx5LCBqdXN0IGFmdGVyIEBkb2N1bWVudGVuY29kaW5nLiAgU2luZ2xlIGFyZ3VtZW50IGlzIHRoZSBsYW5ndWFnZQorJSAoZGUpIG9yIGxvY2FsZSAoZGVfREUpIGFiYnJldmlhdGlvbi4KKyUKK3sKKyAgXGNhdGNvZGVgXF8gPSBcYWN0aXZlCisgIFxnbG9iYWxkZWZzPTEKK1xwYXJzZWFyZ2RlZlxkb2N1bWVudGxhbmd1YWdle1xiZWdpbmdyb3VwCisgIFxsZXRfPVxub3JtYWx1bmRlcnNjb3JlICAlIG5vcm1hbCBfIGNoYXJhY3RlciBmb3IgZmlsZW5hbWVzCisgIFx0ZXggJSByZWFkIHR4aS0/Py50ZXggZmlsZSBpbiBwbGFpbiBUZVguCisgICAgJSBSZWFkIHRoZSBmaWxlIGJ5IHRoZSBuYW1lIHRoZXkgcGFzc2VkIGlmIGl0IGV4aXN0cy4KKyAgICBcb3BlbmluIDEgdHhpLSMxLnRleAorICAgIFxpZmVvZiAxCisgICAgICBcZG9jdW1lbnRsYW5ndWFnZXRyeXdpdGhvdXR1bmRlcnNjb3JleyMxX1xmaW5pc2h9JQorICAgIFxlbHNlCisgICAgICBcZ2xvYmFsZGVmcyA9IDEgICUgZXZlcnl0aGluZyBpbiB0aGUgdHhpLUxMIGZpbGVzIG5lZWRzIHRvIHBlcnNpc3QKKyAgICAgIFxpbnB1dCB0eGktIzEudGV4CisgICAgXGZpCisgICAgXGNsb3NlaW4gMQorICBcZW5kZ3JvdXAgJSBlbmQgcmF3IFRlWAorXGVuZGdyb3VwfQorJQorJSBJZiB0aGV5IHBhc3NlZCBkZV9ERSwgYW5kIHR4aS1kZV9ERS50ZXggZG9lc24ndCBleGlzdCwKKyUgdHJ5IHR4aS1kZS50ZXguCislCitcZ2RlZlxkb2N1bWVudGxhbmd1YWdldHJ5d2l0aG91dHVuZGVyc2NvcmUjMV8jMlxmaW5pc2h7JQorICBcb3BlbmluIDEgdHhpLSMxLnRleAorICBcaWZlb2YgMQorICAgIFxlcnJoZWxwID0gXG5vbGFuZ2hlbHAKKyAgICBcZXJybWVzc2FnZXtDYW5ub3QgcmVhZCBsYW5ndWFnZSBmaWxlIHR4aS0jMS50ZXh9JQorICBcZWxzZQorICAgIFxnbG9iYWxkZWZzID0gMSAgJSBldmVyeXRoaW5nIGluIHRoZSB0eGktTEwgZmlsZXMgbmVlZHMgdG8gcGVyc2lzdAorICAgIFxpbnB1dCB0eGktIzEudGV4CisgIFxmaQorICBcY2xvc2VpbiAxCit9Cit9JSBlbmQgb2Ygc3BlY2lhbCBfIGNhdGNvZGUKKyUKK1xuZXdoZWxwXG5vbGFuZ2hlbHB7VGhlIGdpdmVuIGxhbmd1YWdlIGRlZmluaXRpb24gZmlsZSBjYW5ub3QgYmUgZm91bmQgb3IKK2lzIGVtcHR5LiAgTWF5YmUgeW91IG5lZWQgdG8gaW5zdGFsbCBpdD8gIFB1dHRpbmcgaXQgaW4gdGhlIGN1cnJlbnQKK2RpcmVjdG9yeSBzaG91bGQgd29yayBpZiBub3doZXJlIGVsc2UgZG9lcy59CisKKyUgVGhpcyBtYWNybyBpcyBjYWxsZWQgZnJvbSB0eGktPz8udGV4IGZpbGVzOyB0aGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlCislIFxsYW5ndWFnZSBuYW1lIHRvIHNldCAod2l0aG91dCB0aGUgIlxsYW5nQCIgcHJlZml4KSwgdGhlIHNlY29uZCBhbmQKKyUgdGhpcmQgYXJncyBhcmUgXHtsZWZ0LHJpZ2h0fWh5cGhlbm1pbi4KKyUKKyUgVGhlIGxhbmd1YWdlIG5hbWVzIHRvIHBhc3MgYXJlIGRldGVybWluZWQgd2hlbiB0aGUgZm9ybWF0IGlzIGJ1aWx0LgorJSBTZWUgdGhlIGV0ZXgubG9nIGZpbGUgY3JlYXRlZCBhdCB0aGF0IHRpbWUsIGUuZy4sCislIC91c3IvbG9jYWwvdGV4bGl2ZS8yMDA4L3RleG1mLXZhci93ZWIyYy9wZGZ0ZXgvZXRleC5sb2cuCislCislIFdpdGggVGVYIExpdmUgMjAwOCwgZXRleCBub3cgaW5jbHVkZXMgaHlwaGVuYXRpb24gcGF0dGVybnMgZm9yIGFsbAorJSBhdmFpbGFibGUgbGFuZ3VhZ2VzLiAgVGhpcyBtZWFucyB3ZSBjYW4gc3VwcG9ydCBoeXBoZW5hdGlvbiBpbgorJSBUZXhpbmZvLCBhdCBsZWFzdCB0byBzb21lIGV4dGVudC4gIChUaGlzIHN0aWxsIGRvZXNuJ3Qgc29sdmUgdGhlCislIGFjY2VudGVkIGNoYXJhY3RlcnMgcHJvYmxlbS4pCislCitcY2F0Y29kZWBAPTExCitcZGVmXHR4aXNldGxhbmd1YWdlIzEjMiMzeyUKKyAgJSBkbyBub3Qgc2V0IHRoZSBsYW5ndWFnZSBpZiB0aGUgbmFtZSBpcyB1bmRlZmluZWQgaW4gdGhlIGN1cnJlbnQgVGVYLgorICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBsYW5nQCMxXGVuZGNzbmFtZSBccmVsYXgKKyAgICBcbWVzc2FnZXtubyBwYXR0ZXJucyBmb3IgIzF9JQorICBcZWxzZQorICAgIFxnbG9iYWxcbGFuZ3VhZ2UgPSBcY3NuYW1lIGxhbmdAIzFcZW5kY3NuYW1lCisgIFxmaQorICAlIGJ1dCB0aGVyZSBpcyBubyBoYXJtIGluIGFkanVzdGluZyB0aGUgaHlwaGVubWluIHZhbHVlcyByZWdhcmRsZXNzLgorICBcZ2xvYmFsXGxlZnRoeXBoZW5taW4gPSAjMlxyZWxheAorICBcZ2xvYmFsXHJpZ2h0aHlwaGVubWluID0gIzNccmVsYXgKK30KKworJSBIZWxwZXJzIGZvciBlbmNvZGluZ3MuCislIFNldCB0aGUgY2F0Y29kZSBvZiBjaGFyYWN0ZXJzIDEyOCB0aHJvdWdoIDI1NSB0byB0aGUgc3BlY2lmaWVkIG51bWJlci4KKyUKK1xkZWZcc2V0bm9uYXNjaWljaGFyc2NhdGNvZGUjMXslCisgICBcY291bnQyNTU9MTI4CisgICBcbG9vcFxpZm51bVxjb3VudDI1NTwyNTYKKyAgICAgIFxnbG9iYWxcY2F0Y29kZVxjb3VudDI1NT0jMVxyZWxheAorICAgICAgXGFkdmFuY2VcY291bnQyNTUgYnkgMQorICAgXHJlcGVhdAorfQorCitcZGVmXHNldG5vbmFzY2lpY2hhcnNjYXRjb2Rlbm9uZ2xvYmFsIzF7JQorICAgXGNvdW50MjU1PTEyOAorICAgXGxvb3BcaWZudW1cY291bnQyNTU8MjU2CisgICAgICBcY2F0Y29kZVxjb3VudDI1NT0jMVxyZWxheAorICAgICAgXGFkdmFuY2VcY291bnQyNTUgYnkgMQorICAgXHJlcGVhdAorfQorCislIEBkb2N1bWVudGVuY29kaW5nIHNldHMgdGhlIGRlZmluaXRpb24gb2Ygbm9uLUFTQ0lJIGNoYXJhY3RlcnMKKyUgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcuCislCitccGFyc2VhcmdkZWZcZG9jdW1lbnRlbmNvZGluZ3slCisgICUgRW5jb2RpbmcgYmVpbmcgZGVjbGFyZWQgZm9yIHRoZSBkb2N1bWVudC4KKyAgXGRlZlxkZWNsYXJlZGVuY29kaW5ne1xjc25hbWUgIzEuZW5jXGVuZGNzbmFtZX0lCisgICUKKyAgJSBTdXBwb3J0ZWQgZW5jb2RpbmdzOiBuYW1lcyBjb252ZXJ0ZWQgdG8gdG9rZW5zIGluIG9yZGVyIHRvIGJlIGFibGUKKyAgJSB0byBjb21wYXJlIHRoZW0gd2l0aCBcaWZ4LgorICBcZGVmXGFzY2lpe1xjc25hbWUgVVMtQVNDSUkuZW5jXGVuZGNzbmFtZX0lCisgIFxkZWZcbGF0bmluZXtcY3NuYW1lIElTTy04ODU5LTE1LmVuY1xlbmRjc25hbWV9JQorICBcZGVmXGxhdG9uZXtcY3NuYW1lIElTTy04ODU5LTEuZW5jXGVuZGNzbmFtZX0lCisgIFxkZWZcbGF0dHdve1xjc25hbWUgSVNPLTg4NTktMi5lbmNcZW5kY3NuYW1lfSUKKyAgXGRlZlx1dGZlaWdodHtcY3NuYW1lIFVURi04LmVuY1xlbmRjc25hbWV9JQorICAlCisgIFxpZnggXGRlY2xhcmVkZW5jb2RpbmcgXGFzY2lpCisgICAgIFxhc2NpaWNoYXJkZWZzCisgICUKKyAgXGVsc2UgXGlmeCBcZGVjbGFyZWRlbmNvZGluZyBcbGF0dHdvCisgICAgIFxzZXRub25hc2NpaWNoYXJzY2F0Y29kZVxhY3RpdmUKKyAgICAgXGxhdHR3b2NoYXJkZWZzCisgICUKKyAgXGVsc2UgXGlmeCBcZGVjbGFyZWRlbmNvZGluZyBcbGF0b25lCisgICAgIFxzZXRub25hc2NpaWNoYXJzY2F0Y29kZVxhY3RpdmUKKyAgICAgXGxhdG9uZWNoYXJkZWZzCisgICUKKyAgXGVsc2UgXGlmeCBcZGVjbGFyZWRlbmNvZGluZyBcbGF0bmluZQorICAgICBcc2V0bm9uYXNjaWljaGFyc2NhdGNvZGVcYWN0aXZlCisgICAgIFxsYXRuaW5lY2hhcmRlZnMKKyAgJQorICBcZWxzZSBcaWZ4IFxkZWNsYXJlZGVuY29kaW5nIFx1dGZlaWdodAorICAgICBcc2V0bm9uYXNjaWljaGFyc2NhdGNvZGVcYWN0aXZlCisgICAgIFx1dGZlaWdodGNoYXJkZWZzCisgICUKKyAgXGVsc2UKKyAgICBcbWVzc2FnZXtVbmtub3duIGRvY3VtZW50IGVuY29kaW5nICMxLCBpZ25vcmluZy59JQorICAlCisgIFxmaSAlIHV0ZmVpZ2h0CisgIFxmaSAlIGxhdG5pbmUKKyAgXGZpICUgbGF0b25lCisgIFxmaSAlIGxhdHR3bworICBcZmkgJSBhc2NpaQorfQorCislIEEgbWVzc2FnZSB0byBiZSBsb2dnZWQgd2hlbiB1c2luZyBhIGNoYXJhY3RlciB0aGF0IGlzbid0IGF2YWlsYWJsZQorJSB0aGUgZGVmYXVsdCBmb250IGVuY29kaW5nIChPVDEpLgorJQorXGRlZlxtaXNzaW5nY2hhcm1zZyMxe1xtZXNzYWdle0NoYXJhY3RlciBtaXNzaW5nIGluIE9UMSBlbmNvZGluZzogIzEufX0KKworJSBUYWtlIGFjY291bnQgb2YgXGMgKHBsYWluKSB2cy4gXCwgKFRleGluZm8pIGRpZmZlcmVuY2UuCitcZGVmXGNlZGlsbGEjMXtcaWZ4XGNccHRleGNcY3sjMX1cZWxzZVwseyMxfVxmaX0KKworJSBGaXJzdCwgbWFrZSBhY3RpdmUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgaW4gb3JkZXIgZm9yIHRoZW0gdG8gYmUKKyUgY29ycmVjdGx5IGNhdGVnb3JpemVkIHdoZW4gVGVYIHJlYWRzIHRoZSByZXBsYWNlbWVudCB0ZXh0IG9mCislIG1hY3JvcyBjb250YWluaW5nIHRoZSBjaGFyYWN0ZXIgZGVmaW5pdGlvbnMuCitcc2V0bm9uYXNjaWljaGFyc2NhdGNvZGVcYWN0aXZlCislCislIExhdGluMSAoSVNPLTg4NTktMSkgY2hhcmFjdGVyIGRlZmluaXRpb25zLgorXGRlZlxsYXRvbmVjaGFyZGVmc3slCisgIFxnZGVmXl5hMHt+fQorICBcZ2RlZl5eYTF7XGV4Y2xhbWRvd259CisgIFxnZGVmXl5hMntcbWlzc2luZ2NoYXJtc2d7Q0VOVCBTSUdOfX0KKyAgXGdkZWZeXmEze3tccG91bmRzfX0KKyAgXGdkZWZeXmE0e1xtaXNzaW5nY2hhcm1zZ3tDVVJSRU5DWSBTSUdOfX0KKyAgXGdkZWZeXmE1e1xtaXNzaW5nY2hhcm1zZ3tZRU4gU0lHTn19CisgIFxnZGVmXl5hNntcbWlzc2luZ2NoYXJtc2d7QlJPS0VOIEJBUn19CisgIFxnZGVmXl5hN3tcU30KKyAgXGdkZWZeXmE4e1wie319CisgIFxnZGVmXl5hOXtcY29weXJpZ2h0fQorICBcZ2RlZl5eYWF7XG9yZGZ9CisgIFxnZGVmXl5hYntcZ3VpbGxlbWV0bGVmdH0KKyAgXGdkZWZeXmFjeyRcbG5vdCR9CisgIFxnZGVmXl5hZHtcLX0KKyAgXGdkZWZeXmFle1xyZWdpc3RlcmVkc3ltYm9sfQorICBcZ2RlZl5eYWZ7XD17fX0KKyAgJQorICBcZ2RlZl5eYjB7XHRleHRkZWdyZWV9CisgIFxnZGVmXl5iMXskXHBtJH0KKyAgXGdkZWZeXmIyeyReMiR9CisgIFxnZGVmXl5iM3skXjMkfQorICBcZ2RlZl5eYjR7XCd7fX0KKyAgXGdkZWZeXmI1eyRcbXUkfQorICBcZ2RlZl5eYjZ7XFB9CisgICUKKyAgXGdkZWZeXmI3eyReLiR9CisgIFxnZGVmXl5iOHtcY2VkaWxsYVwgfQorICBcZ2RlZl5eYjl7JF4xJH0KKyAgXGdkZWZeXmJhe1xvcmRtfQorICAlCisgIFxnZGVmXl5iYntcZ3VpbGxldHJpZ2h0fQorICBcZ2RlZl5eYmN7JDFcb3ZlcjQkfQorICBcZ2RlZl5eYmR7JDFcb3ZlcjIkfQorICBcZ2RlZl5eYmV7JDNcb3ZlcjQkfQorICBcZ2RlZl5eYmZ7XHF1ZXN0aW9uZG93bn0KKyAgJQorICBcZ2RlZl5eYzB7XGBBfQorICBcZ2RlZl5eYzF7XCdBfQorICBcZ2RlZl5eYzJ7XF5BfQorICBcZ2RlZl5eYzN7XH5BfQorICBcZ2RlZl5eYzR7XCJBfQorICBcZ2RlZl5eYzV7XHJpbmdhY2NlbnQgQX0KKyAgXGdkZWZeXmM2e1xBRX0KKyAgXGdkZWZeXmM3e1xjZWRpbGxhIEN9CisgIFxnZGVmXl5jOHtcYEV9CisgIFxnZGVmXl5jOXtcJ0V9CisgIFxnZGVmXl5jYXtcXkV9CisgIFxnZGVmXl5jYntcIkV9CisgIFxnZGVmXl5jY3tcYEl9CisgIFxnZGVmXl5jZHtcJ0l9CisgIFxnZGVmXl5jZXtcXkl9CisgIFxnZGVmXl5jZntcIkl9CisgICUKKyAgXGdkZWZeXmQwe1xESH0KKyAgXGdkZWZeXmQxe1x+Tn0KKyAgXGdkZWZeXmQye1xgT30KKyAgXGdkZWZeXmQze1wnT30KKyAgXGdkZWZeXmQ0e1xeT30KKyAgXGdkZWZeXmQ1e1x+T30KKyAgXGdkZWZeXmQ2e1wiT30KKyAgXGdkZWZeXmQ3eyRcdGltZXMkfQorICBcZ2RlZl5eZDh7XE99CisgIFxnZGVmXl5kOXtcYFV9CisgIFxnZGVmXl5kYXtcJ1V9CisgIFxnZGVmXl5kYntcXlV9CisgIFxnZGVmXl5kY3tcIlV9CisgIFxnZGVmXl5kZHtcJ1l9CisgIFxnZGVmXl5kZXtcVEh9CisgIFxnZGVmXl5kZntcc3N9CisgICUKKyAgXGdkZWZeXmUwe1xgYX0KKyAgXGdkZWZeXmUxe1wnYX0KKyAgXGdkZWZeXmUye1xeYX0KKyAgXGdkZWZeXmUze1x+YX0KKyAgXGdkZWZeXmU0e1wiYX0KKyAgXGdkZWZeXmU1e1xyaW5nYWNjZW50IGF9CisgIFxnZGVmXl5lNntcYWV9CisgIFxnZGVmXl5lN3tcY2VkaWxsYSBjfQorICBcZ2RlZl5eZTh7XGBlfQorICBcZ2RlZl5eZTl7XCdlfQorICBcZ2RlZl5eZWF7XF5lfQorICBcZ2RlZl5eZWJ7XCJlfQorICBcZ2RlZl5eZWN7XGB7XGRvdGxlc3MgaX19CisgIFxnZGVmXl5lZHtcJ3tcZG90bGVzcyBpfX0KKyAgXGdkZWZeXmVle1xee1xkb3RsZXNzIGl9fQorICBcZ2RlZl5eZWZ7XCJ7XGRvdGxlc3MgaX19CisgICUKKyAgXGdkZWZeXmYwe1xkaH0KKyAgXGdkZWZeXmYxe1x+bn0KKyAgXGdkZWZeXmYye1xgb30KKyAgXGdkZWZeXmYze1wnb30KKyAgXGdkZWZeXmY0e1xeb30KKyAgXGdkZWZeXmY1e1x+b30KKyAgXGdkZWZeXmY2e1wib30KKyAgXGdkZWZeXmY3eyRcZGl2JH0KKyAgXGdkZWZeXmY4e1xvfQorICBcZ2RlZl5eZjl7XGB1fQorICBcZ2RlZl5eZmF7XCd1fQorICBcZ2RlZl5eZmJ7XF51fQorICBcZ2RlZl5eZmN7XCJ1fQorICBcZ2RlZl5eZmR7XCd5fQorICBcZ2RlZl5eZmV7XHRofQorICBcZ2RlZl5eZmZ7XCJ5fQorfQorCislIExhdGluOSAoSVNPLTg4NTktMTUpIGVuY29kaW5nIGNoYXJhY3RlciBkZWZpbml0aW9ucy4KK1xkZWZcbGF0bmluZWNoYXJkZWZzeyUKKyAgJSBFbmNvZGluZyBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIExhdGluMS4KKyAgXGxhdG9uZWNoYXJkZWZzCisgICUKKyAgXGdkZWZeXmE0e1xldXJvfQorICBcZ2RlZl5eYTZ7XHYgU30KKyAgXGdkZWZeXmE4e1x2IHN9CisgIFxnZGVmXl5iNHtcdiBafQorICBcZ2RlZl5eYjh7XHYgen0KKyAgXGdkZWZeXmJje1xPRX0KKyAgXGdkZWZeXmJke1xvZX0KKyAgXGdkZWZeXmJle1wiWX0KK30KKworJSBMYXRpbjIgKElTTy04ODU5LTIpIGNoYXJhY3RlciBkZWZpbml0aW9ucy4KK1xkZWZcbGF0dHdvY2hhcmRlZnN7JQorICBcZ2RlZl5eYTB7fn0KKyAgXGdkZWZeXmExe1xvZ29uZWt7QX19CisgIFxnZGVmXl5hMntcdXt9fQorICBcZ2RlZl5eYTN7XEx9CisgIFxnZGVmXl5hNHtcbWlzc2luZ2NoYXJtc2d7Q1VSUkVOQ1kgU0lHTn19CisgIFxnZGVmXl5hNXtcdiBMfQorICBcZ2RlZl5eYTZ7XCdTfQorICBcZ2RlZl5eYTd7XFN9CisgIFxnZGVmXl5hOHtcInt9fQorICBcZ2RlZl5eYTl7XHYgU30KKyAgXGdkZWZeXmFhe1xjZWRpbGxhIFN9CisgIFxnZGVmXl5hYntcdiBUfQorICBcZ2RlZl5eYWN7XCdafQorICBcZ2RlZl5eYWR7XC19CisgIFxnZGVmXl5hZXtcdiBafQorICBcZ2RlZl5eYWZ7XGRvdGFjY2VudCBafQorICAlCisgIFxnZGVmXl5iMHtcdGV4dGRlZ3JlZX0KKyAgXGdkZWZeXmIxe1xvZ29uZWt7YX19CisgIFxnZGVmXl5iMntcb2dvbmVreyB9fQorICBcZ2RlZl5eYjN7XGx9CisgIFxnZGVmXl5iNHtcJ3t9fQorICBcZ2RlZl5eYjV7XHYgbH0KKyAgXGdkZWZeXmI2e1wnc30KKyAgXGdkZWZeXmI3e1x2e319CisgIFxnZGVmXl5iOHtcY2VkaWxsYVwgfQorICBcZ2RlZl5eYjl7XHYgc30KKyAgXGdkZWZeXmJhe1xjZWRpbGxhIHN9CisgIFxnZGVmXl5iYntcdiB0fQorICBcZ2RlZl5eYmN7XCd6fQorICBcZ2RlZl5eYmR7XEh7fX0KKyAgXGdkZWZeXmJle1x2IHp9CisgIFxnZGVmXl5iZntcZG90YWNjZW50IHp9CisgICUKKyAgXGdkZWZeXmMwe1wnUn0KKyAgXGdkZWZeXmMxe1wnQX0KKyAgXGdkZWZeXmMye1xeQX0KKyAgXGdkZWZeXmMze1x1IEF9CisgIFxnZGVmXl5jNHtcIkF9CisgIFxnZGVmXl5jNXtcJ0x9CisgIFxnZGVmXl5jNntcJ0N9CisgIFxnZGVmXl5jN3tcY2VkaWxsYSBDfQorICBcZ2RlZl5eYzh7XHYgQ30KKyAgXGdkZWZeXmM5e1wnRX0KKyAgXGdkZWZeXmNhe1xvZ29uZWt7RX19CisgIFxnZGVmXl5jYntcIkV9CisgIFxnZGVmXl5jY3tcdiBFfQorICBcZ2RlZl5eY2R7XCdJfQorICBcZ2RlZl5eY2V7XF5JfQorICBcZ2RlZl5eY2Z7XHYgRH0KKyAgJQorICBcZ2RlZl5eZDB7XERIfQorICBcZ2RlZl5eZDF7XCdOfQorICBcZ2RlZl5eZDJ7XHYgTn0KKyAgXGdkZWZeXmQze1wnT30KKyAgXGdkZWZeXmQ0e1xeT30KKyAgXGdkZWZeXmQ1e1xIIE99CisgIFxnZGVmXl5kNntcIk99CisgIFxnZGVmXl5kN3skXHRpbWVzJH0KKyAgXGdkZWZeXmQ4e1x2IFJ9CisgIFxnZGVmXl5kOXtccmluZ2FjY2VudCBVfQorICBcZ2RlZl5eZGF7XCdVfQorICBcZ2RlZl5eZGJ7XEggVX0KKyAgXGdkZWZeXmRje1wiVX0KKyAgXGdkZWZeXmRke1wnWX0KKyAgXGdkZWZeXmRle1xjZWRpbGxhIFR9CisgIFxnZGVmXl5kZntcc3N9CisgICUKKyAgXGdkZWZeXmUwe1wncn0KKyAgXGdkZWZeXmUxe1wnYX0KKyAgXGdkZWZeXmUye1xeYX0KKyAgXGdkZWZeXmUze1x1IGF9CisgIFxnZGVmXl5lNHtcImF9CisgIFxnZGVmXl5lNXtcJ2x9CisgIFxnZGVmXl5lNntcJ2N9CisgIFxnZGVmXl5lN3tcY2VkaWxsYSBjfQorICBcZ2RlZl5eZTh7XHYgY30KKyAgXGdkZWZeXmU5e1wnZX0KKyAgXGdkZWZeXmVhe1xvZ29uZWt7ZX19CisgIFxnZGVmXl5lYntcImV9CisgIFxnZGVmXl5lY3tcdiBlfQorICBcZ2RlZl5eZWR7XCdcaX0KKyAgXGdkZWZeXmVle1xeXGl9CisgIFxnZGVmXl5lZntcdiBkfQorICAlCisgIFxnZGVmXl5mMHtcZGh9CisgIFxnZGVmXl5mMXtcJ259CisgIFxnZGVmXl5mMntcdiBufQorICBcZ2RlZl5eZjN7XCdvfQorICBcZ2RlZl5eZjR7XF5vfQorICBcZ2RlZl5eZjV7XEggb30KKyAgXGdkZWZeXmY2e1wib30KKyAgXGdkZWZeXmY3eyRcZGl2JH0KKyAgXGdkZWZeXmY4e1x2IHJ9CisgIFxnZGVmXl5mOXtccmluZ2FjY2VudCB1fQorICBcZ2RlZl5eZmF7XCd1fQorICBcZ2RlZl5eZmJ7XEggdX0KKyAgXGdkZWZeXmZje1widX0KKyAgXGdkZWZeXmZke1wneX0KKyAgXGdkZWZeXmZle1xjZWRpbGxhIHR9CisgIFxnZGVmXl5mZntcZG90YWNjZW50e319Cit9CisKKyUgVVRGLTggY2hhcmFjdGVyIGRlZmluaXRpb25zLgorJQorJSBUaGlzIGNvZGUgdG8gc3VwcG9ydCBVVEYtOCBpcyBiYXNlZCBvbiBMYVRlWCdzIHV0ZjguZGVmLCB3aXRoIHNvbWUKKyUgY2hhbmdlcyBmb3IgVGV4aW5mbyBjb252ZW50aW9ucy4gIEl0IGlzIGluY2x1ZGVkIGhlcmUgdW5kZXIgdGhlIEdQTCBieQorJSBwZXJtaXNzaW9uIGZyb20gRnJhbmsgTWl0dGVsYmFjaCBhbmQgdGhlIExhVGVYIHRlYW0uCislCitcbmV3Y291bnRcY291bnRVVEZ4CitcbmV3Y291bnRcY291bnRVVEZ5CitcbmV3Y291bnRcY291bnRVVEZ6CisKK1xnZGVmXFVURnZpaWlUd29PY3RldHMjMSMye1xleHBhbmRhZnRlcgorICAgXFVURnZpaWlEZWZpbmVkXGNzbmFtZSB1ODojMVxzdHJpbmcgIzJcZW5kY3NuYW1lfQorJQorXGdkZWZcVVRGdmlpaVRocmVlT2N0ZXRzIzEjMiMze1xleHBhbmRhZnRlcgorICAgXFVURnZpaWlEZWZpbmVkXGNzbmFtZSB1ODojMVxzdHJpbmcgIzJcc3RyaW5nICMzXGVuZGNzbmFtZX0KKyUKK1xnZGVmXFVURnZpaWlGb3VyT2N0ZXRzIzEjMiMzIzR7XGV4cGFuZGFmdGVyCisgICBcVVRGdmlpaURlZmluZWRcY3NuYW1lIHU4OiMxXHN0cmluZyAjMlxzdHJpbmcgIzNcc3RyaW5nICM0XGVuZGNzbmFtZX0KKworXGdkZWZcVVRGdmlpaURlZmluZWQjMXslCisgIFxpZnggIzFccmVsYXgKKyAgICBcbWVzc2FnZXtcbGluZW51bWJlciBVbmljb2RlIGNoYXIgXHN0cmluZyAjMSBub3QgZGVmaW5lZCBmb3IgVGV4aW5mb30lCisgIFxlbHNlCisgICAgXGV4cGFuZGFmdGVyICMxJQorICBcZmkKK30KKworXGJlZ2luZ3JvdXAKKyAgXGNhdGNvZGVgXH4xMworICBcY2F0Y29kZWBcIjEyCisKKyAgXGRlZlxVVEZ2aWlpTG9vcHslCisgICAgXGdsb2JhbFxjYXRjb2RlXGNvdW50VVRGeFxhY3RpdmUKKyAgICBcdWNjb2RlYFx+XGNvdW50VVRGeAorICAgIFx1cHBlcmNhc2VcZXhwYW5kYWZ0ZXJ7XFVURnZpaWlUbXB9JQorICAgIFxhZHZhbmNlXGNvdW50VVRGeCBieSAxCisgICAgXGlmbnVtXGNvdW50VVRGeCA8IFxjb3VudFVURnkKKyAgICAgIFxleHBhbmRhZnRlclxVVEZ2aWlpTG9vcAorICAgIFxmaX0KKworICBcY291bnRVVEZ4ID0gIkMyCisgIFxjb3VudFVURnkgPSAiRTAKKyAgXGRlZlxVVEZ2aWlpVG1weyUKKyAgICBceGRlZn57XG5vZXhwYW5kXFVURnZpaWlUd29PY3RldHNcc3RyaW5nfn19CisgIFxVVEZ2aWlpTG9vcAorCisgIFxjb3VudFVURnggPSAiRTAKKyAgXGNvdW50VVRGeSA9ICJGMAorICBcZGVmXFVURnZpaWlUbXB7JQorICAgIFx4ZGVmfntcbm9leHBhbmRcVVRGdmlpaVRocmVlT2N0ZXRzXHN0cmluZ359fQorICBcVVRGdmlpaUxvb3AKKworICBcY291bnRVVEZ4ID0gIkYwCisgIFxjb3VudFVURnkgPSAiRjQKKyAgXGRlZlxVVEZ2aWlpVG1weyUKKyAgICBceGRlZn57XG5vZXhwYW5kXFVURnZpaWlGb3VyT2N0ZXRzXHN0cmluZ359fQorICBcVVRGdmlpaUxvb3AKK1xlbmRncm91cAorCitcYmVnaW5ncm91cAorICBcY2F0Y29kZWBcIj0xMgorICBcY2F0Y29kZWBcPD0xMgorICBcY2F0Y29kZWBcLj0xMgorICBcY2F0Y29kZWBcLD0xMgorICBcY2F0Y29kZWBcOz0xMgorICBcY2F0Y29kZWBcIT0xMgorICBcY2F0Y29kZWBcfj0xMworCisgIFxnZGVmXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyIzEjMnslCisgICAgXGNvdW50VVRGeiA9ICIjMVxyZWxheAorICAgIFx3bG9ne1xzcGFjZVxzcGFjZSBkZWZpbmluZyBVbmljb2RlIGNoYXIgVSsjMSAoZGVjaW1hbCBcdGhlXGNvdW50VVRGeil9JQorICAgIFxiZWdpbmdyb3VwCisgICAgICBccGFyc2VYTUxDaGFycmVmCisgICAgICBcZGVmXFVURnZpaWlUd29PY3RldHMjIzEjIzJ7JQorICAgICAgICBcY3NuYW1lIHU4OiMjMVxzdHJpbmcgIyMyXGVuZGNzbmFtZX0lCisgICAgICBcZGVmXFVURnZpaWlUaHJlZU9jdGV0cyMjMSMjMiMjM3slCisgICAgICAgIFxjc25hbWUgdTg6IyMxXHN0cmluZyAjIzJcc3RyaW5nICMjM1xlbmRjc25hbWV9JQorICAgICAgXGRlZlxVVEZ2aWlpRm91ck9jdGV0cyMjMSMjMiMjMyMjNHslCisgICAgICAgIFxjc25hbWUgdTg6IyMxXHN0cmluZyAjIzJcc3RyaW5nICMjM1xzdHJpbmcgIyM0XGVuZGNzbmFtZX0lCisgICAgICBcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXIKKyAgICAgICBcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXIKKyAgICAgICBcZ2RlZlxVVEZ2aWlpVG1weyMyfSUKKyAgICBcZW5kZ3JvdXB9CisKKyAgXGdkZWZccGFyc2VYTUxDaGFycmVmeyUKKyAgICBcaWZudW1cY291bnRVVEZ6IDwgIkEwXHJlbGF4CisgICAgICBcZXJyaGVscCA9IFxFTXNpbXBsZQorICAgICAgXGVycm1lc3NhZ2V7Q2Fubm90IGRlZmluZSBVbmljb2RlIGNoYXIgdmFsdWUgPCAwMEEwfSUKKyAgICBcZWxzZVxpZm51bVxjb3VudFVURnogPCAiODAwXHJlbGF4CisgICAgICBccGFyc2VVVEZ2aWlpQSwlCisgICAgICBccGFyc2VVVEZ2aWlpQiBDXFVURnZpaWlUd29PY3RldHMuLCUKKyAgICBcZWxzZVxpZm51bVxjb3VudFVURnogPCAiMTAwMDBccmVsYXgKKyAgICAgIFxwYXJzZVVURnZpaWlBOyUKKyAgICAgIFxwYXJzZVVURnZpaWlBLCUKKyAgICAgIFxwYXJzZVVURnZpaWlCIEVcVVRGdmlpaVRocmVlT2N0ZXRzLnssO30lCisgICAgXGVsc2UKKyAgICAgIFxwYXJzZVVURnZpaWlBOyUKKyAgICAgIFxwYXJzZVVURnZpaWlBLCUKKyAgICAgIFxwYXJzZVVURnZpaWlBISUKKyAgICAgIFxwYXJzZVVURnZpaWlCIEZcVVRGdmlpaUZvdXJPY3RldHMueyEsO30lCisgICAgXGZpXGZpXGZpCisgIH0KKworICBcZ2RlZlxwYXJzZVVURnZpaWlBIzF7JQorICAgIFxjb3VudFVURnggPSBcY291bnRVVEZ6CisgICAgXGRpdmlkZVxjb3VudFVURnogYnkgNjQKKyAgICBcY291bnRVVEZ5ID0gXGNvdW50VVRGegorICAgIFxtdWx0aXBseVxjb3VudFVURnogYnkgNjQKKyAgICBcYWR2YW5jZVxjb3VudFVURnggYnkgLVxjb3VudFVURnoKKyAgICBcYWR2YW5jZVxjb3VudFVURnggYnkgMTI4CisgICAgXHVjY29kZSBgIzFcY291bnRVVEZ4CisgICAgXGNvdW50VVRGeiA9IFxjb3VudFVURnl9CisKKyAgXGdkZWZccGFyc2VVVEZ2aWlpQiMxIzIjMyM0eyUKKyAgICBcYWR2YW5jZVxjb3VudFVURnogYnkgIiMxMFxyZWxheAorICAgIFx1Y2NvZGUgYCMzXGNvdW50VVRGegorICAgIFx1cHBlcmNhc2V7XGdkZWZcVVRGdmlpaVRtcHsjMiMzIzR9fX0KK1xlbmRncm91cAorCitcZGVmXHV0ZmVpZ2h0Y2hhcmRlZnN7JQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBBMH17XHRpZX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwQTF9e1xleGNsYW1kb3dufQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBBM317XHBvdW5kc30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwQTh9e1wieyB9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBBOX17XGNvcHlyaWdodH0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwQUF9e1xvcmRmfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBBQn17XGd1aWxsZW1ldGxlZnR9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEFEfXtcLX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwQUV9e1xyZWdpc3RlcmVkc3ltYm9sfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBBRn17XD17IH19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwQjB9e1xyaW5nYWNjZW50eyB9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBCNH17XCd7IH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEI4fXtcY2VkaWxsYXsgfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwQkF9e1xvcmRtfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBCQn17XGd1aWxsZW1ldHJpZ2h0fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBCRn17XHF1ZXN0aW9uZG93bn0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBDMH17XGBBfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBDMX17XCdBfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBDMn17XF5BfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBDM317XH5BfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBDNH17XCJBfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBDNX17XEFBfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBDNn17XEFFfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBDN317XGNlZGlsbGF7Q319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEM4fXtcYEV9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEM5fXtcJ0V9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMENBfXtcXkV9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMENCfXtcIkV9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMENDfXtcYEl9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMENEfXtcJ0l9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMENFfXtcXkl9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMENGfXtcIkl9CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRDB9e1xESH0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRDF9e1x+Tn0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRDJ9e1xgT30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRDN9e1wnT30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRDR9e1xeT30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRDV9e1x+T30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRDZ9e1wiT30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRDh9e1xPfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBEOX17XGBVfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBEQX17XCdVfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBEQn17XF5VfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBEQ317XCJVfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBERH17XCdZfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBERX17XFRIfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBERn17XHNzfQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEUwfXtcYGF9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEUxfXtcJ2F9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEUyfXtcXmF9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEUzfXtcfmF9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEU0fXtcImF9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEU1fXtcYWF9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEU2fXtcYWV9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEU3fXtcY2VkaWxsYXtjfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRTh9e1xgZX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRTl9e1wnZX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRUF9e1xeZX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRUJ9e1wiZX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRUN9e1xge1xkb3RsZXNze2l9fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRUR9e1wne1xkb3RsZXNze2l9fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRUV9e1xee1xkb3RsZXNze2l9fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRUZ9e1wie1xkb3RsZXNze2l9fX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBGMH17XGRofQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBGMX17XH5ufQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBGMn17XGBvfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBGM317XCdvfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBGNH17XF5vfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBGNX17XH5vfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBGNn17XCJvfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBGOH17XG99CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEY5fXtcYHV9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEZBfXtcJ3V9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEZCfXtcXnV9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEZDfXtcInV9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEZEfXtcJ3l9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEZFfXtcdGh9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEZGfXtcInl9CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMDB9e1w9QX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMDF9e1w9YX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMDJ9e1x1e0F9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEwM317XHV7YX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTA0fXtcb2dvbmVre0F9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEwNX17XG9nb25la3thfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMDZ9e1wnQ30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMDd9e1wnY30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMDh9e1xeQ30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMDl9e1xeY30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMTh9e1xvZ29uZWt7RX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTE5fXtcb2dvbmVre2V9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEwQX17XGRvdGFjY2VudHtDfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMEJ9e1xkb3RhY2NlbnR7Y319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTBDfXtcdntDfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMER9e1x2e2N9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEwRX17XHZ7RH19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMTJ9e1w9RX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMTN9e1w9ZX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMTR9e1x1e0V9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDExNX17XHV7ZX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTE2fXtcZG90YWNjZW50e0V9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDExN317XGRvdGFjY2VudHtlfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMUF9e1x2e0V9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDExQn17XHZ7ZX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTFDfXtcXkd9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTFEfXtcXmd9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTFFfXtcdXtHfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMUZ9e1x1e2d9fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTIwfXtcZG90YWNjZW50e0d9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEyMX17XGRvdGFjY2VudHtnfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMjR9e1xeSH0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMjV9e1xeaH0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMjh9e1x+SX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMjl9e1x+e1xkb3RsZXNze2l9fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMkF9e1w9SX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMkJ9e1w9e1xkb3RsZXNze2l9fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMkN9e1x1e0l9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEyRH17XHV7XGRvdGxlc3N7aX19fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTMwfXtcZG90YWNjZW50e0l9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEzMX17XGRvdGxlc3N7aX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTMyfXtJSn0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMzN9e2lqfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEzNH17XF5KfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEzNX17XF57XGRvdGxlc3N7an19fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEzOX17XCdMfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEzQX17XCdsfQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTQxfXtcTH0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNDJ9e1xsfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE0M317XCdOfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE0NH17XCdufQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE0N317XHZ7Tn19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTQ4fXtcdntufX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNEN9e1w9T30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNER9e1w9b30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNEV9e1x1e099fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE0Rn17XHV7b319CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNTB9e1xIe099fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE1MX17XEh7b319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTUyfXtcT0V9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTUzfXtcb2V9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTU0fXtcJ1J9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTU1fXtcJ3J9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTU4fXtcdntSfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNTl9e1x2e3J9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE1QX17XCdTfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE1Qn17XCdzfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE1Q317XF5TfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE1RH17XF5zfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE1RX17XGNlZGlsbGF7U319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTVGfXtcY2VkaWxsYXtzfX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE2MH17XHZ7U319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTYxfXtcdntzfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNjJ9e1xjZWRpbGxhe3R9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE2M317XGNlZGlsbGF7VH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTY0fXtcdntUfX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE2OH17XH5VfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE2OX17XH51fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE2QX17XD1VfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE2Qn17XD11fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE2Q317XHV7VX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTZEfXtcdXt1fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNkV9e1xyaW5nYWNjZW50e1V9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE2Rn17XHJpbmdhY2NlbnR7dX19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNzB9e1xIe1V9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE3MX17XEh7dX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTc0fXtcXld9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTc1fXtcXnd9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTc2fXtcXll9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTc3fXtcXnl9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTc4fXtcIll9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTc5fXtcJ1p9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTdBfXtcJ3p9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTdCfXtcZG90YWNjZW50e1p9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE3Q317XGRvdGFjY2VudHt6fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxN0R9e1x2e1p9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE3RX17XHZ7en19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxQzR9e0RcdntafX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxQzV9e0Rcdnt6fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxQzZ9e2Rcdnt6fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxQzd9e0xKfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFDOH17TGp9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUM5fXtsan0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxQ0F9e05KfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFDQn17Tmp9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUNDfXtuan0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxQ0R9e1x2e0F9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFDRX17XHZ7YX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUNGfXtcdntJfX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFEMH17XHZ7XGRvdGxlc3N7aX19fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFEMX17XHZ7T319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUQyfXtcdntvfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRDN9e1x2e1V9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFENH17XHZ7dX19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRTJ9e1w9e1xBRX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUUzfXtcPXtcYWV9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFFNn17XHZ7R319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUU3fXtcdntnfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRTh9e1x2e0t9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFFOX17XHZ7a319CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRjB9e1x2e1xkb3RsZXNze2p9fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRjF9e0RafQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFGMn17RHp9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUYzfXtken0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRjR9e1wnR30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRjV9e1wnZ30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRjh9e1xgTn0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRjl9e1xgbn0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRkN9e1wne1xBRX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUZEfXtcJ3tcYWV9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFGRX17XCd7XE99fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFGRn17XCd7XG99fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMjFFfXtcdntIfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAyMUZ9e1x2e2h9fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMjI2fXtcZG90YWNjZW50e0F9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDIyN317XGRvdGFjY2VudHthfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAyMjh9e1xjZWRpbGxhe0V9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDIyOX17XGNlZGlsbGF7ZX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMjJFfXtcZG90YWNjZW50e099fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDIyRn17XGRvdGFjY2VudHtvfX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDIzMn17XD1ZfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDIzM317XD15fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDIzN317XGRvdGxlc3N7an19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAyREJ9e1xvZ29uZWt7IH19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMDJ9e1xkb3RhY2NlbnR7Qn19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTAzfXtcZG90YWNjZW50e2J9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUwNH17XHVkb3RhY2NlbnR7Qn19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTA1fXtcdWRvdGFjY2VudHtifX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMDZ9e1x1YmFyYWNjZW50e0J9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUwN317XHViYXJhY2NlbnR7Yn19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTBBfXtcZG90YWNjZW50e0R9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUwQn17XGRvdGFjY2VudHtkfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMEN9e1x1ZG90YWNjZW50e0R9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUwRH17XHVkb3RhY2NlbnR7ZH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTBFfXtcdWJhcmFjY2VudHtEfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMEZ9e1x1YmFyYWNjZW50e2R9fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTFFfXtcZG90YWNjZW50e0Z9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUxRn17XGRvdGFjY2VudHtmfX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUyMH17XD1HfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUyMX17XD1nfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUyMn17XGRvdGFjY2VudHtIfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMjN9e1xkb3RhY2NlbnR7aH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTI0fXtcdWRvdGFjY2VudHtIfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMjV9e1x1ZG90YWNjZW50e2h9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUyNn17XCJIfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUyN317XCJofQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTMwfXtcJ0t9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTMxfXtcJ2t9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTMyfXtcdWRvdGFjY2VudHtLfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMzN9e1x1ZG90YWNjZW50e2t9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUzNH17XHViYXJhY2NlbnR7S319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTM1fXtcdWJhcmFjY2VudHtrfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMzZ9e1x1ZG90YWNjZW50e0x9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUzN317XHVkb3RhY2NlbnR7bH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTNBfXtcdWJhcmFjY2VudHtMfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFM0J9e1x1YmFyYWNjZW50e2x9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUzRX17XCdNfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUzRn17XCdtfQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTQwfXtcZG90YWNjZW50e019fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU0MX17XGRvdGFjY2VudHttfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNDJ9e1x1ZG90YWNjZW50e019fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU0M317XHVkb3RhY2NlbnR7bX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTQ0fXtcZG90YWNjZW50e059fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU0NX17XGRvdGFjY2VudHtufX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNDZ9e1x1ZG90YWNjZW50e059fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU0N317XHVkb3RhY2NlbnR7bn19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTQ4fXtcdWJhcmFjY2VudHtOfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNDl9e1x1YmFyYWNjZW50e259fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTU0fXtcJ1B9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTU1fXtcJ3B9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTU2fXtcZG90YWNjZW50e1B9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU1N317XGRvdGFjY2VudHtwfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNTh9e1xkb3RhY2NlbnR7Un19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTU5fXtcZG90YWNjZW50e3J9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU1QX17XHVkb3RhY2NlbnR7Un19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTVCfXtcdWRvdGFjY2VudHtyfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNUV9e1x1YmFyYWNjZW50e1J9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU1Rn17XHViYXJhY2NlbnR7cn19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNjB9e1xkb3RhY2NlbnR7U319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTYxfXtcZG90YWNjZW50e3N9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU2Mn17XHVkb3RhY2NlbnR7U319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTYzfXtcdWRvdGFjY2VudHtzfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNkF9e1xkb3RhY2NlbnR7VH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTZCfXtcZG90YWNjZW50e3R9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU2Q317XHVkb3RhY2NlbnR7VH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTZEfXtcdWRvdGFjY2VudHt0fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNkV9e1x1YmFyYWNjZW50e1R9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU2Rn17XHViYXJhY2NlbnR7dH19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFN0N9e1x+Vn0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFN0R9e1x+dn0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFN0V9e1x1ZG90YWNjZW50e1Z9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU3Rn17XHVkb3RhY2NlbnR7dn19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFODB9e1xgV30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFODF9e1xgd30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFODJ9e1wnV30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFODN9e1wnd30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFODR9e1wiV30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFODV9e1wid30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFODZ9e1xkb3RhY2NlbnR7V319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTg3fXtcZG90YWNjZW50e3d9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU4OH17XHVkb3RhY2NlbnR7V319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTg5fXtcdWRvdGFjY2VudHt3fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFOEF9e1xkb3RhY2NlbnR7WH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRThCfXtcZG90YWNjZW50e3h9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU4Q317XCJYfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU4RH17XCJ4fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU4RX17XGRvdGFjY2VudHtZfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFOEZ9e1xkb3RhY2NlbnR7eX19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFOTB9e1xeWn0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFOTF9e1xeen0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFOTJ9e1x1ZG90YWNjZW50e1p9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU5M317XHVkb3RhY2NlbnR7en19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTk0fXtcdWJhcmFjY2VudHtafX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFOTV9e1x1YmFyYWNjZW50e3p9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU5Nn17XHViYXJhY2NlbnR7aH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTk3fXtcInR9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTk4fXtccmluZ2FjY2VudHt3fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFOTl9e1xyaW5nYWNjZW50e3l9fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRUEwfXtcdWRvdGFjY2VudHtBfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFQTF9e1x1ZG90YWNjZW50e2F9fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRUI4fXtcdWRvdGFjY2VudHtFfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFQjl9e1x1ZG90YWNjZW50e2V9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUVCQ317XH5FfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUVCRH17XH5lfQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRUNBfXtcdWRvdGFjY2VudHtJfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFQ0J9e1x1ZG90YWNjZW50e2l9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUVDQ317XHVkb3RhY2NlbnR7T319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRUNEfXtcdWRvdGFjY2VudHtvfX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUVFNH17XHVkb3RhY2NlbnR7VX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRUU1fXtcdWRvdGFjY2VudHt1fX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUVGMn17XGBZfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUVGM317XGB5fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUVGNH17XHVkb3RhY2NlbnR7WX19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFRjh9e1x+WX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFRjl9e1x+eX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MjAxM317LS19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsyMDE0fXstLS19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsyMDE4fXtccXVvdGVsZWZ0fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MjAxOX17XHF1b3RlcmlnaHR9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsyMDFBfXtccXVvdGVzaW5nbGJhc2V9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsyMDFDfXtccXVvdGVkYmxsZWZ0fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MjAxRH17XHF1b3RlZGJscmlnaHR9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsyMDFFfXtccXVvdGVkYmxiYXNlfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MjAyMn17XGJ1bGxldH0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezIwMjZ9e1xkb3RzfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MjAzOX17XGd1aWxzaW5nbGxlZnR9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsyMDNBfXtcZ3VpbHNpbmdscmlnaHR9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsyMEFDfXtcZXVyb30KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MjE5Mn17XGV4cGFuc2lvbn0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezIxRDJ9e1xyZXN1bHR9CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezIyMTJ9e1xtaW51c30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezIyMTd9e1xwb2ludH0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezIyNjF9e1xlcXVpdn0KK30lIGVuZCBvZiBcdXRmZWlnaHRjaGFyZGVmcworCisKKyUgVVMtQVNDSUkgY2hhcmFjdGVyIGRlZmluaXRpb25zLgorXGRlZlxhc2NpaWNoYXJkZWZzeyUgbm90aGluZyBuZWVkIGJlIGRvbmUKKyAgIFxyZWxheAorfQorCislIE1ha2Ugbm9uLUFTQ0lJIGNoYXJhY3RlcnMgcHJpbnRhYmxlIGFnYWluIGZvciBjb21wYXRpYmlsaXR5IHdpdGgKKyUgZXhpc3RpbmcgVGV4aW5mbyBkb2N1bWVudHMgdGhhdCBtYXkgdXNlIHRoZW0sIGV2ZW4gd2l0aG91dCBkZWNsYXJpbmcgYQorJSBkb2N1bWVudCBlbmNvZGluZy4KKyUKK1xzZXRub25hc2NpaWNoYXJzY2F0Y29kZSBcb3RoZXIKKworCitcbWVzc2FnZXtmb3JtYXR0aW5nLH0KKworXG5ld2RpbWVuXGRlZmF1bHRwYXJpbmRlbnQgXGRlZmF1bHRwYXJpbmRlbnQgPSAxNXB0CisKK1xjaGFwaGVhZGluZ3NraXAgPSAxNXB0IHBsdXMgNHB0IG1pbnVzIDJwdAorXHNlY2hlYWRpbmdza2lwID0gMTJwdCBwbHVzIDNwdCBtaW51cyAycHQKK1xzdWJzZWNoZWFkaW5nc2tpcCA9IDlwdCBwbHVzIDJwdCBtaW51cyAycHQKKworJSBQcmV2ZW50IHVuZGVyZnVsbCB2Ym94IGVycm9yIG1lc3NhZ2VzLgorXHZiYWRuZXNzID0gMTAwMDAKKworJSBEb24ndCBiZSBzbyBmaW5pY2t5IGFib3V0IHVuZGVyZnVsbCBoYm94ZXMsIGVpdGhlci4KK1xoYmFkbmVzcyA9IDIwMDAKKworJSBGb2xsb3dpbmcgR2VvcmdlIEJ1c2gsIGdldCByaWQgb2Ygd2lkb3dzIGFuZCBvcnBoYW5zLgorXHdpZG93cGVuYWx0eT0xMDAwMAorXGNsdWJwZW5hbHR5PTEwMDAwCisKKyUgVXNlIFRlWCAzLjAncyBcZW1lcmdlbmN5c3RyZXRjaCB0byBoZWxwIGxpbmUgYnJlYWtpbmcsIGJ1dCBpZiB3ZSdyZQorJSB1c2luZyBhbiBvbGQgdmVyc2lvbiBvZiBUZVgsIGRvbid0IGRvIGFueXRoaW5nLiAgV2Ugd2FudCB0aGUgYW1vdW50IG9mCislIHN0cmV0Y2ggYWRkZWQgdG8gZGVwZW5kIG9uIHRoZSBsaW5lIGxlbmd0aCwgaGVuY2UgdGhlIGRlcGVuZGVuY2Ugb24KKyUgXGhzaXplLiAgV2UgY2FsbCB0aGlzIHdoZW5ldmVyIHRoZSBwYXBlciBzaXplIGlzIHNldC4KKyUKK1xkZWZcc2V0ZW1lcmdlbmN5c3RyZXRjaHslCisgIFxpZnhcZW1lcmdlbmN5c3RyZXRjaFx0aGlzaXN1bmRlZmluZWQKKyAgICAlIEFsbG93IHVzIHRvIGFzc2lnbiB0byBcZW1lcmdlbmN5c3RyZXRjaCBhbnl3YXkuCisgICAgXGRlZlxlbWVyZ2VuY3lzdHJldGNoe1xkaW1lbjB9JQorICBcZWxzZQorICAgIFxlbWVyZ2VuY3lzdHJldGNoID0gLjE1XGhzaXplCisgIFxmaQorfQorCislIFBhcmFtZXRlcnMgaW4gb3JkZXI6IDEpIHRleHRoZWlnaHQ7IDIpIHRleHR3aWR0aDsKKyUgMykgdm9mZnNldDsgNCkgaG9mZnNldDsgNSkgYmluZGluZyBvZmZzZXQ7IDYpIHRvcHNraXA7CislIDcpIHBoeXNpY2FsIHBhZ2UgaGVpZ2h0OyA4KSBwaHlzaWNhbCBwYWdlIHdpZHRoLgorJQorJSBXZSBhbHNvIGNhbGwgXHNldGxlYWRpbmd7XHRleHRsZWFkaW5nfSwgc28gdGhlIGNhbGxlciBzaG91bGQgZGVmaW5lCislIFx0ZXh0bGVhZGluZy4gIFRoZSBjYWxsZXIgc2hvdWxkIGFsc28gc2V0IFxwYXJza2lwLgorJQorXGRlZlxpbnRlcm5hbHBhZ2VzaXplcyMxIzIjMyM0IzUjNiM3Izh7JQorICBcdm9mZnNldCA9ICMzXHJlbGF4CisgIFx0b3Bza2lwID0gIzZccmVsYXgKKyAgXHNwbGl0dG9wc2tpcCA9IFx0b3Bza2lwCisgICUKKyAgXHZzaXplID0gIzFccmVsYXgKKyAgXGFkdmFuY2VcdnNpemUgYnkgXHRvcHNraXAKKyAgXG91dGVydnNpemUgPSBcdnNpemUKKyAgXGFkdmFuY2Vcb3V0ZXJ2c2l6ZSBieSAyXHRvcGFuZGJvdHRvbW1hcmdpbgorICBccGFnZWhlaWdodCA9IFx2c2l6ZQorICAlCisgIFxoc2l6ZSA9ICMyXHJlbGF4CisgIFxvdXRlcmhzaXplID0gXGhzaXplCisgIFxhZHZhbmNlXG91dGVyaHNpemUgYnkgMC41aW4KKyAgXHBhZ2V3aWR0aCA9IFxoc2l6ZQorICAlCisgIFxub3JtYWxvZmZzZXQgPSAjNFxyZWxheAorICBcYmluZGluZ29mZnNldCA9ICM1XHJlbGF4CisgICUKKyAgXGlmcGRmCisgICAgXHBkZnBhZ2VoZWlnaHQgIzdccmVsYXgKKyAgICBccGRmcGFnZXdpZHRoICM4XHJlbGF4CisgICAgJSBpZiB3ZSBkb24ndCByZXNldCB0aGVzZSwgdGhleSB3aWxsIHJlbWFpbiBhdCAiMSB0cnVlIGluIiBvZgorICAgICUgd2hhdGV2ZXIgbGF5b3V0IHBkZnRleCB3YXMgZHVtcGVkIHdpdGguCisgICAgXHBkZmhvcmlnaW4gPSAxIHRydWUgaW4KKyAgICBccGRmdm9yaWdpbiA9IDEgdHJ1ZSBpbgorICBcZmkKKyAgJQorICBcc2V0bGVhZGluZ3tcdGV4dGxlYWRpbmd9CisgICUKKyAgXHBhcmluZGVudCA9IFxkZWZhdWx0cGFyaW5kZW50CisgIFxzZXRlbWVyZ2VuY3lzdHJldGNoCit9CisKKyUgQGxldHRlcnBhcGVyICh0aGUgZGVmYXVsdCkuCitcZGVmXGxldHRlcnBhcGVye3tcZ2xvYmFsZGVmcyA9IDEKKyAgXHBhcnNraXAgPSAzcHQgcGx1cyAycHQgbWludXMgMXB0CisgIFx0ZXh0bGVhZGluZyA9IDEzLjJwdAorICAlCisgICUgSWYgcGFnZSBpcyBub3RoaW5nIGJ1dCB0ZXh0LCBtYWtlIGl0IGNvbWUgb3V0IGV2ZW4uCisgIFxpbnRlcm5hbHBhZ2VzaXplc3s2MDcuMnB0fXs2aW59JSB0aGF0J3MgNDYgbGluZXMKKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXsuMjVpbn0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17MzZwdH0lCisgICAgICAgICAgICAgICAgICAgIHsxMWlufXs4LjVpbn0lCit9fQorCislIFVzZSBAc21hbGxib29rIHRvIHJlc2V0IHBhcmFtZXRlcnMgZm9yIDd4OS4yNSB0cmltIHNpemUuCitcZGVmXHNtYWxsYm9va3t7XGdsb2JhbGRlZnMgPSAxCisgIFxwYXJza2lwID0gMnB0IHBsdXMgMXB0CisgIFx0ZXh0bGVhZGluZyA9IDEycHQKKyAgJQorICBcaW50ZXJuYWxwYWdlc2l6ZXN7Ny41aW59ezVpbn0lCisgICAgICAgICAgICAgICAgICAgIHstLjJpbn17MGlufSUKKyAgICAgICAgICAgICAgICAgICAge1xiaW5kaW5nb2Zmc2V0fXsxNnB0fSUKKyAgICAgICAgICAgICAgICAgICAgezkuMjVpbn17N2lufSUKKyAgJQorICBcbGlzcG5hcnJvd2luZyA9IDAuM2luCisgIFx0b2xlcmFuY2UgPSA3MDAKKyAgXGhmdXp6ID0gMXB0CisgIFxjb250ZW50c3JpZ2h0bWFyZ2luID0gMHB0CisgIFxkZWZib2R5aW5kZW50ID0gLjVjbQorfX0KKworJSBVc2UgQHNtYWxsZXJib29rIHRvIHJlc2V0IHBhcmFtZXRlcnMgZm9yIDZ4OSB0cmltIHNpemUuCislIChKdXN0IHRlc3RpbmcsIHBhcmFtZXRlcnMgc3RpbGwgaW4gZmx1eC4pCitcZGVmXHNtYWxsZXJib29re3tcZ2xvYmFsZGVmcyA9IDEKKyAgXHBhcnNraXAgPSAxLjVwdCBwbHVzIDFwdAorICBcdGV4dGxlYWRpbmcgPSAxMnB0CisgICUKKyAgXGludGVybmFscGFnZXNpemVzezcuNGlufXs0Ljhpbn0lCisgICAgICAgICAgICAgICAgICAgIHstLjJpbn17LS40aW59JQorICAgICAgICAgICAgICAgICAgICB7MHB0fXsxNHB0fSUKKyAgICAgICAgICAgICAgICAgICAgezlpbn17NmlufSUKKyAgJQorICBcbGlzcG5hcnJvd2luZyA9IDAuMjVpbgorICBcdG9sZXJhbmNlID0gNzAwCisgIFxoZnV6eiA9IDFwdAorICBcY29udGVudHNyaWdodG1hcmdpbiA9IDBwdAorICBcZGVmYm9keWluZGVudCA9IC40Y20KK319CisKKyUgVXNlIEBhZm91cnBhcGVyIHRvIHByaW50IG9uIEV1cm9wZWFuIEE0IHBhcGVyLgorXGRlZlxhZm91cnBhcGVye3tcZ2xvYmFsZGVmcyA9IDEKKyAgXHBhcnNraXAgPSAzcHQgcGx1cyAycHQgbWludXMgMXB0CisgIFx0ZXh0bGVhZGluZyA9IDEzLjJwdAorICAlCisgICUgRG91YmxlLXNpZGUgcHJpbnRpbmcgdmlhIHBvc3RzY3JpcHQgb24gTGFzZXJqZXQgNDA1MAorICAlIHByaW50cyBkb3VibGUtc2lkZWQgbmljZWx5IHdoZW4gXGJpbmRpbmdvZmZzZXQ9MTBtbSBhbmQgXGhvZmZzZXQ9LTZtbS4KKyAgJSBUbyBjaGFuZ2UgdGhlIHNldHRpbmdzIGZvciBhIGRpZmZlcmVudCBwcmludGVyIG9yIHNpdHVhdGlvbiwgYWRqdXN0CisgICUgXG5vcm1hbG9mZnNldCB1bnRpbCB0aGUgZnJvbnQtc2lkZSBhbmQgYmFjay1zaWRlIHRleHRzIGFsaWduLiAgVGhlbgorICAlIGRvIHRoZSBzYW1lIGZvciBcYmluZGluZ29mZnNldC4gIFlvdSBjYW4gc2V0IHRoZXNlIGZvciB0ZXN0aW5nIGluCisgICUgeW91ciB0ZXhpbmZvIHNvdXJjZSBmaWxlIGxpa2UgdGhpczoKKyAgJSBAdGV4CisgICUgXGdsb2JhbFxub3JtYWxvZmZzZXQgPSAtNm1tCisgICUgXGdsb2JhbFxiaW5kaW5nb2Zmc2V0ID0gMTBtbQorICAlIEBlbmQgdGV4CisgIFxpbnRlcm5hbHBhZ2VzaXplc3s2NzMuMnB0fXsxNjBtbX0lIHRoYXQncyA1MSBsaW5lcworICAgICAgICAgICAgICAgICAgICB7XHZvZmZzZXR9e1xob2Zmc2V0fSUKKyAgICAgICAgICAgICAgICAgICAge1xiaW5kaW5nb2Zmc2V0fXs0NHB0fSUKKyAgICAgICAgICAgICAgICAgICAgezI5N21tfXsyMTBtbX0lCisgICUKKyAgXHRvbGVyYW5jZSA9IDcwMAorICBcaGZ1enogPSAxcHQKKyAgXGNvbnRlbnRzcmlnaHRtYXJnaW4gPSAwcHQKKyAgXGRlZmJvZHlpbmRlbnQgPSA1bW0KK319CisKKyUgVXNlIEBhZml2ZXBhcGVyIHRvIHByaW50IG9uIEV1cm9wZWFuIEE1IHBhcGVyLgorJSBGcm9tIHJvbWlsZG9AdXJhbm8uaWNlYi51Zm9wLmJyLCAyIEp1bHkgMjAwMC4KKyUgSGUgYWxzbyByZWNvbW1lbmRzIG1ha2luZyBAZXhhbXBsZSBhbmQgQGxpc3AgYmUgc21hbGwuCitcZGVmXGFmaXZlcGFwZXJ7e1xnbG9iYWxkZWZzID0gMQorICBccGFyc2tpcCA9IDJwdCBwbHVzIDFwdCBtaW51cyAwLjFwdAorICBcdGV4dGxlYWRpbmcgPSAxMi41cHQKKyAgJQorICBcaW50ZXJuYWxwYWdlc2l6ZXN7MTYwbW19ezEyMG1tfSUKKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXtcaG9mZnNldH0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17OHB0fSUKKyAgICAgICAgICAgICAgICAgICAgezIxMG1tfXsxNDhtbX0lCisgICUKKyAgXGxpc3BuYXJyb3dpbmcgPSAwLjJpbgorICBcdG9sZXJhbmNlID0gODAwCisgIFxoZnV6eiA9IDEuMnB0CisgIFxjb250ZW50c3JpZ2h0bWFyZ2luID0gMHB0CisgIFxkZWZib2R5aW5kZW50ID0gMm1tCisgIFx0YWJsZWluZGVudCA9IDEybW0KK319CisKKyUgQSBzcGVjaWZpYyB0ZXh0IGxheW91dCwgMjR4MTVjbSBvdmVyYWxsLCBpbnRlbmRlZCBmb3IgQTQgcGFwZXIuCitcZGVmXGFmb3VybGF0ZXh7e1xnbG9iYWxkZWZzID0gMQorICBcYWZvdXJwYXBlcgorICBcaW50ZXJuYWxwYWdlc2l6ZXN7MjM3bW19ezE1MG1tfSUKKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXs0LjZtbX0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17N21tfSUKKyAgICAgICAgICAgICAgICAgICAgezI5N21tfXsyMTBtbX0lCisgICUKKyAgJSBNdXN0IGV4cGxpY2l0bHkgcmVzZXQgdG8gMCBiZWNhdXNlIHdlIGNhbGwgXGFmb3VycGFwZXIuCisgIFxnbG9iYWxkZWZzID0gMAorfX0KKworJSBVc2UgQGFmb3Vyd2lkZSB0byBwcmludCBvbiBBNCBwYXBlciBpbiBsYW5kc2NhcGUgZm9ybWF0LgorXGRlZlxhZm91cndpZGV7e1xnbG9iYWxkZWZzID0gMQorICBcYWZvdXJwYXBlcgorICBcaW50ZXJuYWxwYWdlc2l6ZXN7MjQxbW19ezE2NW1tfSUKKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXstMi45NW1tfSUKKyAgICAgICAgICAgICAgICAgICAge1xiaW5kaW5nb2Zmc2V0fXs3bW19JQorICAgICAgICAgICAgICAgICAgICB7Mjk3bW19ezIxMG1tfSUKKyAgXGdsb2JhbGRlZnMgPSAwCit9fQorCislIEBwYWdlc2l6ZXMgVEVYVEhFSUdIVFssVEVYVFdJRFRIXQorJSBQZXJoYXBzIHdlIHNob3VsZCBhbGxvdyBzZXR0aW5nIHRoZSBtYXJnaW5zLCBcdG9wc2tpcCwgXHBhcnNraXAsCislIGFuZC9vciBsZWFkaW5nLCBhbHNvLiBPciBwZXJoYXBzIHdlIHNob3VsZCBjb21wdXRlIHRoZW0gc29tZWhvdy4KKyUKK1xwYXJzZWFyZ2RlZlxwYWdlc2l6ZXN7XHBhZ2VzaXplc3l5eSAjMSwsXGZpbmlzaH0KK1xkZWZccGFnZXNpemVzeXl5IzEsIzIsIzNcZmluaXNoe3slCisgIFxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjMn1caWZkaW1cd2QwID4gMHB0IFxoc2l6ZT0jMlxyZWxheCBcZmkKKyAgXGdsb2JhbGRlZnMgPSAxCisgICUKKyAgXHBhcnNraXAgPSAzcHQgcGx1cyAycHQgbWludXMgMXB0CisgIFxzZXRsZWFkaW5ne1x0ZXh0bGVhZGluZ30lCisgICUKKyAgXGRpbWVuMCA9ICMxXHJlbGF4CisgIFxhZHZhbmNlXGRpbWVuMCBieSBcdm9mZnNldAorICAlCisgIFxkaW1lbjIgPSBcaHNpemUKKyAgXGFkdmFuY2VcZGltZW4yIGJ5IFxub3JtYWxvZmZzZXQKKyAgJQorICBcaW50ZXJuYWxwYWdlc2l6ZXN7IzF9e1xoc2l6ZX0lCisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17XG5vcm1hbG9mZnNldH0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17NDRwdH0lCisgICAgICAgICAgICAgICAgICAgIHtcZGltZW4wfXtcZGltZW4yfSUKK319CisKKyUgU2V0IGRlZmF1bHQgdG8gbGV0dGVyLgorJQorXGxldHRlcnBhcGVyCisKKworXG1lc3NhZ2V7YW5kIHR1cm5pbmcgb24gdGV4aW5mbyBpbnB1dCBmb3JtYXQufQorCislIERFTCBpcyBhIGNvbW1lbnQgY2hhcmFjdGVyLCBpbiBjYXNlIEBjIGRvZXMgbm90IHN1ZmZpY2UuCitcY2F0Y29kZWBcXl4/ID0gMTQKKworJSBEZWZpbmUgbWFjcm9zIHRvIG91dHB1dCB2YXJpb3VzIGNoYXJhY3RlcnMgd2l0aCBjYXRjb2RlIGZvciBub3JtYWwgdGV4dC4KK1xjYXRjb2RlYFwiPVxvdGhlcgorXGNhdGNvZGVgXH49XG90aGVyCitcY2F0Y29kZWBcXj1cb3RoZXIKK1xjYXRjb2RlYFxfPVxvdGhlcgorXGNhdGNvZGVgXHw9XG90aGVyCitcY2F0Y29kZWBcPD1cb3RoZXIKK1xjYXRjb2RlYFw+PVxvdGhlcgorXGNhdGNvZGVgXCs9XG90aGVyCitcY2F0Y29kZWBcJD1cb3RoZXIKK1xkZWZcbm9ybWFsZG91YmxlcXVvdGV7In0KK1xkZWZcbm9ybWFsdGlsZGV7fn0KK1xkZWZcbm9ybWFsY2FyZXR7Xn0KK1xkZWZcbm9ybWFsdW5kZXJzY29yZXtffQorXGRlZlxub3JtYWx2ZXJ0aWNhbGJhcnt8fQorXGRlZlxub3JtYWxsZXNzezx9CitcZGVmXG5vcm1hbGdyZWF0ZXJ7Pn0KK1xkZWZcbm9ybWFscGx1c3srfQorXGRlZlxub3JtYWxkb2xsYXJ7JH0lJCBmb250LWxvY2sgZml4CisKKyUgVGhpcyBtYWNybyBpcyB1c2VkIHRvIG1ha2UgYSBjaGFyYWN0ZXIgcHJpbnQgb25lIHdheSBpbiBcdHQKKyUgKHdoZXJlIGl0IGNhbiBwcm9iYWJseSBiZSBvdXRwdXQgYXMtaXMpLCBhbmQgYW5vdGhlciB3YXkgaW4gb3RoZXIgZm9udHMsCislIHdoZXJlIHNvbWV0aGluZyBoYWlyaWVyIHByb2JhYmx5IG5lZWRzIHRvIGJlIGRvbmUuCislCislICMxIGlzIHdoYXQgdG8gcHJpbnQgaWYgd2UgYXJlIGluZGVlZCB1c2luZyBcdHQ7ICMyIGlzIHdoYXQgdG8gcHJpbnQKKyUgb3RoZXJ3aXNlLiAgU2luY2UgYWxsIHRoZSBDb21wdXRlciBNb2Rlcm4gdHlwZXdyaXRlciBmb250cyBoYXZlIHplcm8KKyUgaW50ZXJ3b3JkIHN0cmV0Y2ggKGFuZCBzaHJpbmspLCBhbmQgaXQgaXMgcmVhc29uYWJsZSB0byBleHBlY3QgYWxsCislIHR5cGV3cml0ZXIgZm9udHMgdG8gaGF2ZSB0aGlzLCB3ZSBjYW4gY2hlY2sgdGhhdCBmb250IHBhcmFtZXRlci4KKyUKK1xkZWZcaWZ1c2luZ3R0IzEjMntcaWZkaW0gXGZvbnRkaW1lbjNcZm9udD0wcHQgIzFcZWxzZSAjMlxmaX0KKworJSBTYW1lIGFzIGFib3ZlLCBidXQgY2hlY2sgZm9yIGl0YWxpYyBmb250LiAgQWN0dWFsbHkgdGhpcyBhbHNvIGNhdGNoZXMKKyUgbm9uLWl0YWxpYyBzbGFudGVkIGZvbnRzIHNpbmNlIGl0IGlzIGltcG9zc2libGUgdG8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9tCislIGl0YWxpYyBmb250cy4gIEJ1dCBzaW5jZSB0aGlzIGlzIG9ubHkgdXNlZCBieSAkIGFuZCBpdCB1c2VzIFxzbCBhbnl3YXkKKyUgdGhpcyBpcyBub3QgYSBwcm9ibGVtLgorXGRlZlxpZnVzaW5naXQjMSMye1xpZmRpbSBcZm9udGRpbWVuMVxmb250PjBwdCAjMVxlbHNlICMyXGZpfQorCislIFR1cm4gb2ZmIGFsbCBzcGVjaWFsIGNoYXJhY3RlcnMgZXhjZXB0IEAKKyUgKGFuZCB0aG9zZSB3aGljaCB0aGUgdXNlciBjYW4gdXNlIGFzIGlmIHRoZXkgd2VyZSBvcmRpbmFyeSkuCislIE1vc3Qgb2YgdGhlc2Ugd2Ugc2ltcGx5IHByaW50IGZyb20gdGhlIFx0dCBmb250LCBidXQgZm9yIHNvbWUsIHdlIGNhbgorJSB1c2UgbWF0aCBvciBvdGhlciB2YXJpYW50cyB0aGF0IGxvb2sgYmV0dGVyIGluIG5vcm1hbCB0ZXh0LgorCitcY2F0Y29kZWBcIj1cYWN0aXZlCitcZGVmXGFjdGl2ZWRvdWJsZXF1b3Rle3tcdHRcY2hhcjM0fX0KK1xsZXQiPVxhY3RpdmVkb3VibGVxdW90ZQorXGNhdGNvZGVgXH49XGFjdGl2ZQorXGRlZn57e1x0dFxjaGFyMTI2fX0KK1xjaGFyZGVmXGhhdD1gXF4KK1xjYXRjb2RlYFxePVxhY3RpdmUKK1xkZWZee3tcdHQgXGhhdH19CisKK1xjYXRjb2RlYFxfPVxhY3RpdmUKK1xkZWZfe1xpZnVzaW5ndHRcbm9ybWFsdW5kZXJzY29yZVxffQorXGxldFxyZWFsdW5kZXI9XworJSBTdWJyb3V0aW5lIGZvciB0aGUgcHJldmlvdXMgbWFjcm8uCitcZGVmXF97XGxlYXZldm1vZGUgXGtlcm4uMDdlbSBcdmJveHtcaHJ1bGUgd2lkdGguM2VtIGhlaWdodC4xZXh9XGtlcm4gLjA3ZW0gfQorCitcY2F0Y29kZWBcfD1cYWN0aXZlCitcZGVmfHt7XHR0XGNoYXIxMjR9fQorXGNoYXJkZWYgXGxlc3M9YFw8CitcY2F0Y29kZWBcPD1cYWN0aXZlCitcZGVmPHt7XHR0IFxsZXNzfX0KK1xjaGFyZGVmIFxndHI9YFw+CitcY2F0Y29kZWBcPj1cYWN0aXZlCitcZGVmPnt7XHR0IFxndHJ9fQorXGNhdGNvZGVgXCs9XGFjdGl2ZQorXGRlZit7e1x0dCBcY2hhciA0M319CitcY2F0Y29kZWBcJD1cYWN0aXZlCitcZGVmJHtcaWZ1c2luZ2l0e3tcc2xcJH19XG5vcm1hbGRvbGxhcn0lJCBmb250LWxvY2sgZml4CisKKyUgSWYgYSAuZm10IGZpbGUgaXMgYmVpbmcgdXNlZCwgY2hhcmFjdGVycyB0aGF0IG1pZ2h0IGFwcGVhciBpbiBhIGZpbGUKKyUgbmFtZSBjYW5ub3QgYmUgYWN0aXZlIHVudGlsIHdlIGhhdmUgcGFyc2VkIHRoZSBjb21tYW5kIGxpbmUuCislIFNvIHR1cm4gdGhlbSBvZmYgYWdhaW4sIGFuZCBoYXZlIFxldmVyeWpvYiAob3IgQHNldGZpbGVuYW1lKSB0dXJuIHRoZW0gb24uCislIFxvdGhlcmlmeWFjdGl2ZSBpcyBjYWxsZWQgbmVhciB0aGUgZW5kIG9mIHRoaXMgZmlsZS4KK1xkZWZcb3RoZXJpZnlhY3RpdmV7XGNhdGNvZGVgKz1cb3RoZXIgXGNhdGNvZGVgXF89XG90aGVyfQorCislIFVzZWQgc29tZXRpbWVzIHRvIHR1cm4gb2ZmIChlZmZlY3RpdmVseSkgdGhlIGFjdGl2ZSBjaGFyYWN0ZXJzIGV2ZW4gYWZ0ZXIKKyUgcGFyc2luZyB0aGVtLgorXGRlZlx0dXJub2ZmYWN0aXZleyUKKyAgXG5vcm1hbHR1cm5vZmZhY3RpdmUKKyAgXG90aGVyYmFja3NsYXNoCit9CisKK1xjYXRjb2RlYFxAPTAKKworJSBcYmFja3NsYXNoY3VyZm9udCBvdXRwdXRzIG9uZSBiYWNrc2xhc2ggY2hhcmFjdGVyIGluIGN1cnJlbnQgZm9udCwKKyUgYXMgaW4gXGNoYXJgXFwuCitcZ2xvYmFsXGNoYXJkZWZcYmFja3NsYXNoY3VyZm9udD1gXFwKK1xnbG9iYWxcbGV0XHJhd2JhY2tzbGFzaHh4PVxiYWNrc2xhc2hjdXJmb250ICAlIGxldCBleGlzdGluZyAuPz9zIGZpbGVzIHdvcmsKKworJSBccmVhbGJhY2tzbGFzaCBpcyBhbiBhY3R1YWwgY2hhcmFjdGVyIGBcJyB3aXRoIGNhdGNvZGUgb3RoZXIsIGFuZAorJSBcZG91YmxlYmFja3NsYXNoIGlzIHR3byBvZiB0aGVtIChmb3IgdGhlIHBkZiBvdXRsaW5lcykuCit7XGNhdGNvZGVgXFw9XG90aGVyIEBnZGVmQHJlYWxiYWNrc2xhc2h7XH0gQGdkZWZAZG91YmxlYmFja3NsYXNoe1xcfX0KKworJSBJbiB0ZXhpbmZvLCBiYWNrc2xhc2ggaXMgYW4gYWN0aXZlIGNoYXJhY3RlcjsgaXQgcHJpbnRzIHRoZSBiYWNrc2xhc2gKKyUgaW4gZml4ZWQgd2lkdGggZm9udC4KK1xjYXRjb2RlYFxcPVxhY3RpdmUKK0BkZWZAbm9ybWFsYmFja3NsYXNoe3tAdHRAYmFja3NsYXNoY3VyZm9udH19CislIE9uIHN0YXJ0dXAsIEBmaXhiYWNrc2xhc2ggYXNzaWduczoKKyUgIEBsZXQgXCA9IEBub3JtYWxiYWNrc2xhc2gKKworJSBccmF3YmFja3NsYXNoIGRlZmluZXMgYW4gYWN0aXZlIFwgdG8gZG8gXGJhY2tzbGFzaGN1cmZvbnQuCislIFxvdGhlcmJhY2tzbGFzaCBkZWZpbmVzIGFuIGFjdGl2ZSBcIHRvIGJlIGEgbGl0ZXJhbCBgXCcgY2hhcmFjdGVyIHdpdGgKKyUgY2F0Y29kZSBvdGhlci4KK0BnZGVmQHJhd2JhY2tzbGFzaHtAbGV0XD1AYmFja3NsYXNoY3VyZm9udH0KK0BnZGVmQG90aGVyYmFja3NsYXNoe0BsZXRcPUByZWFsYmFja3NsYXNofQorCislIFNhbWUgYXMgQHR1cm5vZmZhY3RpdmUgZXhjZXB0IG91dHB1dHMgXCBhcyB7XHR0XGNoYXJgXFx9IGluc3RlYWQgb2YKKyUgdGhlIGxpdGVyYWwgY2hhcmFjdGVyIGBcJy4KKyUKK0BkZWZAbm9ybWFsdHVybm9mZmFjdGl2ZXslCisgIEBsZXRcPUBub3JtYWxiYWNrc2xhc2gKKyAgQGxldCI9QG5vcm1hbGRvdWJsZXF1b3RlCisgIEBsZXR+PUBub3JtYWx0aWxkZQorICBAbGV0Xj1Abm9ybWFsY2FyZXQKKyAgQGxldF89QG5vcm1hbHVuZGVyc2NvcmUKKyAgQGxldHw9QG5vcm1hbHZlcnRpY2FsYmFyCisgIEBsZXQ8PUBub3JtYWxsZXNzCisgIEBsZXQ+PUBub3JtYWxncmVhdGVyCisgIEBsZXQrPUBub3JtYWxwbHVzCisgIEBsZXQkPUBub3JtYWxkb2xsYXIgJSQgZm9udC1sb2NrIGZpeAorICBAbWFya3Vwc2V0dXBscWRlZmF1bHQKKyAgQG1hcmt1cHNldHVwcnFkZWZhdWx0CisgIEB1bnNlcHNwYWNlcworfQorCislIE1ha2UgXyBhbmQgKyBcb3RoZXIgY2hhcmFjdGVycywgdGVtcG9yYXJpbHkuCislIFRoaXMgaXMgY2FuY2VsZWQgYnkgQGZpeGJhY2tzbGFzaC4KK0BvdGhlcmlmeWFjdGl2ZQorCislIElmIGEgLmZtdCBmaWxlIGlzIGJlaW5nIHVzZWQsIHdlIGRvbid0IHdhbnQgdGhlIGBcaW5wdXQgdGV4aW5mbycgdG8gc2hvdyB1cC4KKyUgVGhhdCBpcyB3aGF0IFxlYXRpbnB1dCBpcyBmb3I7IGFmdGVyIHRoYXQsIHRoZSBgXCcgc2hvdWxkIHJldmVydCB0byBwcmludGluZworJSBhIGJhY2tzbGFzaC4KKyUKK0BnZGVmQGVhdGlucHV0IGlucHV0IHRleGluZm97QGZpeGJhY2tzbGFzaH0KK0BnbG9iYWxAbGV0XCA9IEBlYXRpbnB1dAorCislIE9uIHRoZSBvdGhlciBoYW5kLCBwZXJoYXBzIHRoZSBmaWxlIGRpZCBub3QgaGF2ZSBhIGBcaW5wdXQgdGV4aW5mbycuIFRoZW4KKyUgdGhlIGZpcnN0IGBcJyBpbiB0aGUgZmlsZSB3b3VsZCBjYXVzZSBhbiBlcnJvci4gVGhpcyBtYWNybyB0cmllcyB0byBmaXgKKyUgdGhhdCwgYXNzdW1pbmcgaXQgaXMgY2FsbGVkIGJlZm9yZSB0aGUgZmlyc3QgYFwnIGNvdWxkIHBsYXVzaWJseSBvY2N1ci4KKyUgQWxzbyB0dXJuIGJhY2sgb24gYWN0aXZlIGNoYXJhY3RlcnMgdGhhdCBtaWdodCBhcHBlYXIgaW4gdGhlIGlucHV0CislIGZpbGUgbmFtZSwgaW4gY2FzZSBub3QgdXNpbmcgYSBwcmUtZHVtcGVkIGZvcm1hdC4KKyUKK0BnZGVmQGZpeGJhY2tzbGFzaHslCisgIEBpZnhcQGVhdGlucHV0IEBsZXRcID0gQG5vcm1hbGJhY2tzbGFzaCBAZmkKKyAgQGNhdGNvZGVgKz1AYWN0aXZlCisgIEBjYXRjb2RlYEBfPUBhY3RpdmUKK30KKworJSBTYXkgQGZvbywgbm90IFxmb28sIGluIGVycm9yIG1lc3NhZ2VzLgorQGVzY2FwZWNoYXIgPSBgQEAKKworJSBUaGVzZSBsb29rIG9rIGluIGFsbCBmb250cywgc28ganVzdCBtYWtlIHRoZW0gbm90IHNwZWNpYWwuCitAY2F0Y29kZWBAJiA9IEBvdGhlcgorQGNhdGNvZGVgQCMgPSBAb3RoZXIKK0BjYXRjb2RlYEAlID0gQG90aGVyCisKK0BjIEZpbmFsbHksIG1ha2UgYCBhbmQgJyBhY3RpdmUsIHNvIHRoYXQgdHhpY29kZXF1b3RldW5kaXJlY3RlZCBhbmQKK0BjIHR4aWNvZGVxdW90ZWJhY2t0aWNrIHdvcmsgcmlnaHQgaW4sIGUuZy4sIEB3e0Bjb2Rle2Bmb28nfX0uICBJZiB3ZQorQGMgZG9uJ3QgbWFrZSBgIGFuZCAnIGFjdGl2ZSwgQGNvZGUgd2lsbCBub3QgZ2V0IHRoZW0gYXMgYWN0aXZlIGNoYXJzLgorQGMgRG8gdGhpcyBsYXN0IG9mIGFsbCBzaW5jZSB3ZSB1c2UgYCBpbiB0aGUgcHJldmlvdXMgQGNhdGNvZGUgYXNzaWdubWVudHMuCitAY2F0Y29kZWBAJz1AYWN0aXZlCitAY2F0Y29kZWBAYD1AYWN0aXZlCitAbWFya3Vwc2V0dXBscWRlZmF1bHQKK0BtYXJrdXBzZXR1cHJxZGVmYXVsdAorCitAYyBMb2NhbCB2YXJpYWJsZXM6CitAYyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCitAYyBwYWdlLWRlbGltaXRlcjogIl5cXFxcbWVzc2FnZSIKK0BjIHRpbWUtc3RhbXAtc3RhcnQ6ICJkZWZcXFxcdGV4aW5mb3ZlcnNpb257IgorQGMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCitAYyB0aW1lLXN0YW1wLWVuZDogIn0iCitAYyBFbmQ6CisKK0BjIHZpbTpzdz0yOgorCitAaWdub3JlCisgICBhcmNoLXRhZzogZTFiMzZlMzItYzk2ZS00MTM1LWE0MWEtMGIyZWZhMmVhMTE1CitAZW5kIGlnbm9yZQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXV0b21ha2UtMS4xMS95bHdyYXAgYi9zaGFyZS9hdXRvbWFrZS0xLjExL3lsd3JhcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NGQ1NjM0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXV0b21ha2UtMS4xMS95bHdyYXAKQEAgLTAsMCArMSwyMjIgQEAKKyMhIC9iaW4vc2gKKyMgeWx3cmFwIC0gd3JhcHBlciBmb3IgbGV4L3lhY2MgaW52b2NhdGlvbnMuCisKK3NjcmlwdHZlcnNpb249MjAwOS0wNC0yOC4yMTsgIyBVVEMKKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsCisjIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFdyaXR0ZW4gYnkgVG9tIFRyb21leSA8dHJvbWV5QGN5Z251cy5jb20+LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgVGhpcyBmaWxlIGlzIG1haW50YWluZWQgaW4gQXV0b21ha2UsIHBsZWFzZSByZXBvcnQKKyMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bworIyA8YXV0b21ha2UtcGF0Y2hlc0BnbnUub3JnPi4KKworY2FzZSAiJDEiIGluCisgICcnKQorICAgIGVjaG8gIiQwOiBObyBmaWxlcyBnaXZlbi4gIFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCisgICAgZXhpdCAxCisgICAgOzsKKyAgLS1iYXNlZGlyKQorICAgIGJhc2VkaXI9JDIKKyAgICBzaGlmdCAyCisgICAgOzsKKyAgLWh8LS1oKikKKyAgICBjYXQgPDxcRU9GCitVc2FnZTogeWx3cmFwIFstLWhlbHB8LS12ZXJzaW9uXSBJTlBVVCBbT1VUUFVUIERFU0lSRURdLi4uIC0tIFBST0dSQU0gW0FSR1NdLi4uCisKK1dyYXBwZXIgZm9yIGxleC95YWNjIGludm9jYXRpb25zLCByZW5hbWluZyBmaWxlcyBhcyBkZXNpcmVkLgorCisgIElOUFVUIGlzIHRoZSBpbnB1dCBmaWxlCisgIE9VVFBVVCBpcyBvbmUgZmlsZSBQUk9HIGdlbmVyYXRlcworICBERVNJUkVEIGlzIHRoZSBmaWxlIHdlIGFjdHVhbGx5IHdhbnQgaW5zdGVhZCBvZiBPVVRQVVQKKyAgUFJPR1JBTSBpcyBwcm9ncmFtIHRvIHJ1bgorICBBUkdTIGFyZSBwYXNzZWQgdG8gUFJPRworCitBbnkgbnVtYmVyIG9mIE9VVFBVVCxERVNJUkVEIHBhaXJzIG1heSBiZSB1c2VkLgorCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LgorRU9GCisgICAgZXhpdCAkPworICAgIDs7CisgIC12fC0tdiopCisgICAgZWNobyAieWx3cmFwICRzY3JpcHR2ZXJzaW9uIgorICAgIGV4aXQgJD8KKyAgICA7OworZXNhYworCisKKyMgVGhlIGlucHV0LgoraW5wdXQ9IiQxIgorc2hpZnQKK2Nhc2UgIiRpbnB1dCIgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgICAgIyBBYnNvbHV0ZSBwYXRoOyBkbyBub3RoaW5nLgorICAgIDs7CisgICopCisgICAgIyBSZWxhdGl2ZSBwYXRoLiAgTWFrZSBpdCBhYnNvbHV0ZS4KKyAgICBpbnB1dD0iYHB3ZGAvJGlucHV0IgorICAgIDs7Citlc2FjCisKK3BhaXJsaXN0PQord2hpbGUgdGVzdCAiJCMiIC1uZSAwOyBkbworICBpZiB0ZXN0ICIkMSIgPSAiLS0iOyB0aGVuCisgICAgc2hpZnQKKyAgICBicmVhaworICBmaQorICBwYWlybGlzdD0iJHBhaXJsaXN0ICQxIgorICBzaGlmdAorZG9uZQorCisjIFRoZSBwcm9ncmFtIHRvIHJ1bi4KK3Byb2c9IiQxIgorc2hpZnQKKyMgTWFrZSBhbnkgcmVsYXRpdmUgcGF0aCBpbiAkcHJvZyBhYnNvbHV0ZS4KK2Nhc2UgIiRwcm9nIiBpbgorICBbXFwvXSogfCA/OltcXC9dKikgOzsKKyAgKltcXC9dKikgcHJvZz0iYHB3ZGAvJHByb2ciIDs7Citlc2FjCisKKyMgRklYTUU6IGFkZCBob3N0bmFtZSBoZXJlIGZvciBwYXJhbGxlbCBtYWtlcyB0aGF0IHJ1biBjb21tYW5kcyBvbgorIyBvdGhlciBtYWNoaW5lcy4gIEJ1dCB0aGF0IG1pZ2h0IHRha2UgdXMgb3ZlciB0aGUgMTQtY2hhciBsaW1pdC4KK2Rpcm5hbWU9eWx3cmFwJCQKK3RyYXAgImNkICdgcHdkYCc7IHJtIC1yZiAkZGlybmFtZSA+IC9kZXYvbnVsbCAyPiYxIiAxIDIgMyAxNQorbWtkaXIgJGRpcm5hbWUgfHwgZXhpdCAxCisKK2NkICRkaXJuYW1lCisKK2Nhc2UgJCMgaW4KKyAgMCkgIiRwcm9nIiAiJGlucHV0IiA7OworICAqKSAiJHByb2ciICIkQCIgIiRpbnB1dCIgOzsKK2VzYWMKK3JldD0kPworCitpZiB0ZXN0ICRyZXQgLWVxIDA7IHRoZW4KKyAgc2V0IFggJHBhaXJsaXN0CisgIHNoaWZ0CisgIGZpcnN0PXllcworICAjIFNpbmNlIERPUyBmaWxlbmFtZSBjb252ZW50aW9ucyBkb24ndCBhbGxvdyB0d28gZG90cywKKyAgIyB0aGUgRE9TIHZlcnNpb24gb2YgQmlzb24gd3JpdGVzIG91dCB5X3RhYi5jIGluc3RlYWQgb2YgeS50YWIuYworICAjIGFuZCB5X3RhYi5oIGluc3RlYWQgb2YgeS50YWIuaC4gVGVzdCB0byBzZWUgaWYgdGhpcyBpcyB0aGUgY2FzZS4KKyAgeV90YWJfbm9kb3Q9Im5vIgorICBpZiB0ZXN0IC1mIHlfdGFiLmMgfHwgdGVzdCAtZiB5X3RhYi5oOyB0aGVuCisgICAgeV90YWJfbm9kb3Q9InllcyIKKyAgZmkKKworICAjIFRoZSBkaXJlY3RvcnkgaG9sZGluZyB0aGUgaW5wdXQuCisgIGlucHV0X2Rpcj1gZWNobyAiJGlucHV0IiB8IHNlZCAtZSAncyxcKFtcXC9dXClbXlxcL10qJCxcMSwnYAorICAjIFF1b3RlICRJTlBVVF9ESVIgc28gd2UgY2FuIHVzZSBpdCBpbiBhIHJlZ2V4cC4KKyAgIyBGSVhNRTogcmVhbGx5IHdlIHNob3VsZCBjYXJlIGFib3V0IG1vcmUgdGhhbiBgLicgYW5kIGBcJy4KKyAgaW5wdXRfcng9YGVjaG8gIiRpbnB1dF9kaXIiIHwgc2VkICdzLFxcXFwsXFxcXFxcXFwsZztzLFxcLixcXFxcLixnJ2AKKworICB3aGlsZSB0ZXN0ICIkIyIgLW5lIDA7IGRvCisgICAgZnJvbT0iJDEiCisgICAgIyBIYW5kbGUgeV90YWIuYyBhbmQgeV90YWIuaCBvdXRwdXQgYnkgRE9TCisgICAgaWYgdGVzdCAkeV90YWJfbm9kb3QgPSAieWVzIjsgdGhlbgorICAgICAgaWYgdGVzdCAkZnJvbSA9ICJ5LnRhYi5jIjsgdGhlbgorICAgIAlmcm9tPSJ5X3RhYi5jIgorICAgICAgZWxzZQorICAgIAlpZiB0ZXN0ICRmcm9tID0gInkudGFiLmgiOyB0aGVuCisgICAgCSAgZnJvbT0ieV90YWIuaCIKKyAgICAJZmkKKyAgICAgIGZpCisgICAgZmkKKyAgICBpZiB0ZXN0IC1mICIkZnJvbSI7IHRoZW4KKyAgICAgICMgSWYgJDIgaXMgYW4gYWJzb2x1dGUgcGF0aCBuYW1lLCB0aGVuIGp1c3QgdXNlIHRoYXQsCisgICAgICAjIG90aGVyd2lzZSBwcmVwZW5kIGAuLi8nLgorICAgICAgY2FzZSAiJDIiIGluCisgICAgCVtcXC9dKiB8ID86W1xcL10qKSB0YXJnZXQ9IiQyIjs7CisgICAgCSopIHRhcmdldD0iLi4vJDIiOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBXZSBkbyBub3Qgd2FudCB0byBvdmVyd3JpdGUgYSBoZWFkZXIgZmlsZSBpZiBpdCBoYXNuJ3QKKyAgICAgICMgY2hhbmdlZC4gIFRoaXMgYXZvaWQgdXNlbGVzcyByZWNvbXBpbGF0aW9ucy4gIEhvd2V2ZXIgdGhlCisgICAgICAjIHBhcnNlciBpdHNlbGYgKHRoZSBmaXJzdCBmaWxlKSBzaG91bGQgYWx3YXlzIGJlIHVwZGF0ZWQsCisgICAgICAjIGJlY2F1c2UgaXQgaXMgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSAueS5jIHJ1bGUgaW4gdGhlCisgICAgICAjIE1ha2VmaWxlLiAgRGl2ZXJ0IHRoZSBvdXRwdXQgb2YgYWxsIG90aGVyIGZpbGVzIHRvIGEgdGVtcG9yYXJ5CisgICAgICAjIGZpbGUgc28gd2UgY2FuIGNvbXBhcmUgdGhlbSB0byBleGlzdGluZyB2ZXJzaW9ucy4KKyAgICAgIGlmIHRlc3QgJGZpcnN0ID0gbm87IHRoZW4KKwlyZWFsdGFyZ2V0PSIkdGFyZ2V0IgorCXRhcmdldD0idG1wLWBlY2hvICR0YXJnZXQgfCBzZWQgcy8uKltcXC9dLy9nYCIKKyAgICAgIGZpCisgICAgICAjIEVkaXQgb3V0IGAjbGluZScgb3IgYCMnIGRpcmVjdGl2ZXMuCisgICAgICAjCisgICAgICAjIFdlIGRvbid0IHdhbnQgdGhlIHJlc3VsdGluZyBkZWJ1ZyBpbmZvcm1hdGlvbiB0byBwb2ludCBhdAorICAgICAgIyBhbiBhYnNvbHV0ZSBzcmNkaXI7IGl0IGlzIGJldHRlciBmb3IgaXQgdG8ganVzdCBtZW50aW9uIHRoZQorICAgICAgIyAueSBmaWxlIHdpdGggbm8gcGF0aC4KKyAgICAgICMKKyAgICAgICMgV2Ugd2FudCB0byB1c2UgdGhlIHJlYWwgb3V0cHV0IGZpbGUgbmFtZSwgbm90IHl5LmxleC5jIGZvcgorICAgICAgIyBpbnN0YW5jZS4KKyAgICAgICMKKyAgICAgICMgV2Ugd2FudCB0aGUgaW5jbHVkZSBndWFyZHMgdG8gYmUgYWRqdXN0ZWQgdG9vLgorICAgICAgRlJPTT1gZWNobyAiJGZyb20iIHwgc2VkIFwKKyAgICAgICAgICAgIC1lICd5L2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLydcCisgICAgICAgICAgICAtZSAncy9bXkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXS9fL2cnYAorICAgICAgVEFSR0VUPWBlY2hvICIkMiIgfCBzZWQgXAorICAgICAgICAgICAgLWUgJ3kvYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovJ1wKKyAgICAgICAgICAgIC1lICdzL1teQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpdL18vZydgCisKKyAgICAgIHNlZCAtZSAiL14jLyFiIiAtZSAicywkaW5wdXRfcngsLCIgLWUgInMsJGZyb20sJDIsIiBcCisgICAgICAgICAgLWUgInMsJEZST00sJFRBUkdFVCwiICIkZnJvbSIgPiIkdGFyZ2V0IiB8fCByZXQ9JD8KKworICAgICAgIyBDaGVjayB3aGV0aGVyIGhlYWRlciBmaWxlcyBtdXN0IGJlIHVwZGF0ZWQuCisgICAgICBpZiB0ZXN0ICRmaXJzdCA9IG5vOyB0aGVuCisJaWYgdGVzdCAtZiAiJHJlYWx0YXJnZXQiICYmIGNtcCAtcyAiJHJlYWx0YXJnZXQiICIkdGFyZ2V0IjsgdGhlbgorCSAgZWNobyAiJDIiIGlzIHVuY2hhbmdlZAorCSAgcm0gLWYgIiR0YXJnZXQiCisJZWxzZQorICAgICAgICAgIGVjaG8gdXBkYXRpbmcgIiQyIgorICAgICAgICAgIG12IC1mICIkdGFyZ2V0IiAiJHJlYWx0YXJnZXQiCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgICMgQSBtaXNzaW5nIGZpbGUgaXMgb25seSBhbiBlcnJvciBmb3IgdGhlIGZpcnN0IGZpbGUuICBUaGlzCisgICAgICAjIGlzIGEgYmxhdGFudCBoYWNrIHRvIGxldCB1cyBzdXBwb3J0IHVzaW5nICJ5YWNjIC1kIi4gIElmIC1kCisgICAgICAjIGlzIG5vdCBzcGVjaWZpZWQsIHdlIGRvbid0IHdhbnQgYW4gZXJyb3Igd2hlbiB0aGUgaGVhZGVyCisgICAgICAjIGZpbGUgaXMgIm1pc3NpbmciLgorICAgICAgaWYgdGVzdCAkZmlyc3QgPSB5ZXM7IHRoZW4KKyAgICAgICAgcmV0PTEKKyAgICAgIGZpCisgICAgZmkKKyAgICBzaGlmdAorICAgIHNoaWZ0CisgICAgZmlyc3Q9bm8KKyAgZG9uZQorZWxzZQorICByZXQ9JD8KK2ZpCisKKyMgUmVtb3ZlIHRoZSBkaXJlY3RvcnkuCitjZCAuLgorcm0gLXJmICRkaXJuYW1lCisKK2V4aXQgJHJldAorCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTogc2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOiAyCisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvc2hhcmUvYXdrL2Fzc2VydC5hd2sgYi9zaGFyZS9hd2svYXNzZXJ0LmF3awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWZkODg1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXdrL2Fzc2VydC5hd2sKQEAgLTAsMCArMSwyMCBAQAorIyBhc3NlcnQgLS0tIGFzc2VydCB0aGF0IGEgY29uZGl0aW9uIGlzIHRydWUuIE90aGVyd2lzZSBleGl0LgorCisjCisjIEFybm9sZCBSb2JiaW5zLCBhcm5vbGRAc2tlZXZlLmNvbSwgUHVibGljIERvbWFpbgorIyBNYXksIDE5OTMKKworZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgc3RyaW5nKQoreworICAgIGlmICghIGNvbmRpdGlvbikgeworICAgICAgICBwcmludGYoIiVzOiVkOiBhc3NlcnRpb24gZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgIEZJTEVOQU1FLCBGTlIsIHN0cmluZykgPiAiL2Rldi9zdGRlcnIiCisgICAgICAgIF9hc3NlcnRfZXhpdCA9IDEKKyAgICAgICAgZXhpdCAxCisgICAgfQorfQorCitFTkQgeworICAgIGlmIChfYXNzZXJ0X2V4aXQpCisgICAgICAgIGV4aXQgMQorfQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXdrL2JpdHMyc3RyLmF3ayBiL3NoYXJlL2F3ay9iaXRzMnN0ci5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcyNWVlOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F3ay9iaXRzMnN0ci5hd2sKQEAgLTAsMCArMSwxNiBAQAorIyBiaXRzMnN0ciAtLS0gdHVybiBhIGJ5dGUgaW50byByZWFkYWJsZSAxJ3MgYW5kIDAncworCitmdW5jdGlvbiBiaXRzMnN0cihiaXRzLCAgICAgICAgZGF0YSwgbWFzaykKK3sKKyAgICBpZiAoYml0cyA9PSAwKQorICAgICAgICByZXR1cm4gIjAiCisKKyAgICBtYXNrID0gMQorICAgIGZvciAoOyBiaXRzICE9IDA7IGJpdHMgPSByc2hpZnQoYml0cywgMSkpCisgICAgICAgIGRhdGEgPSAoYW5kKGJpdHMsIG1hc2spID8gIjEiIDogIjAiKSBkYXRhCisKKyAgICB3aGlsZSAoKGxlbmd0aChkYXRhKSAlIDgpICE9IDApCisgICAgICAgIGRhdGEgPSAiMCIgZGF0YQorCisgICAgcmV0dXJuIGRhdGEKK30KZGlmZiAtLWdpdCBhL3NoYXJlL2F3ay9jbGlmZl9yYW5kLmF3ayBiL3NoYXJlL2F3ay9jbGlmZl9yYW5kLmF3awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmE3OTNhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXdrL2NsaWZmX3JhbmQuYXdrCkBAIC0wLDAgKzEsMTQgQEAKKyMgY2xpZmZfcmFuZC5hd2sgLS0tIGdlbmVyYXRlIENsaWZmIHJhbmRvbSBudW1iZXJzCisjCisjIEFybm9sZCBSb2JiaW5zLCBhcm5vbGRAc2tlZXZlLmNvbSwgUHVibGljIERvbWFpbgorIyBEZWNlbWJlciAyMDAwCisKK0JFR0lOIHsgX2NsaWZmX3NlZWQgPSAwLjEgfQorCitmdW5jdGlvbiBjbGlmZl9yYW5kKCkKK3sKKyAgICBfY2xpZmZfc2VlZCA9ICgxMDAgKiBsb2coX2NsaWZmX3NlZWQpKSAlIDEKKyAgICBpZiAoX2NsaWZmX3NlZWQgPCAwKQorICAgICAgICBfY2xpZmZfc2VlZCA9IC0gX2NsaWZmX3NlZWQKKyAgICByZXR1cm4gX2NsaWZmX3NlZWQKK30KZGlmZiAtLWdpdCBhL3NoYXJlL2F3ay9jdGltZS5hd2sgYi9zaGFyZS9hd2svY3RpbWUuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNzg1NmMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hd2svY3RpbWUuYXdrCkBAIC0wLDAgKzEsMTEgQEAKKyMgY3RpbWUuYXdrCisjCisjIGF3ayB2ZXJzaW9uIG9mIEMgY3RpbWUoMykgZnVuY3Rpb24KKworZnVuY3Rpb24gY3RpbWUodHMsICAgIGZvcm1hdCkKK3sKKyAgICBmb3JtYXQgPSAiJWEgJWIgJWUgJUg6JU06JVMgJVogJVkiCisgICAgaWYgKHRzID09IDApCisgICAgICAgIHRzID0gc3lzdGltZSgpICAgICAgICMgdXNlIGN1cnJlbnQgdGltZSBhcyBkZWZhdWx0CisgICAgcmV0dXJuIHN0cmZ0aW1lKGZvcm1hdCwgdHMpCit9CmRpZmYgLS1naXQgYS9zaGFyZS9hd2svZnRyYW5zLmF3ayBiL3NoYXJlL2F3ay9mdHJhbnMuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MDlhYzgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hd2svZnRyYW5zLmF3awpAQCAtMCwwICsxLDE1IEBACisjIGZ0cmFucy5hd2sgLS0tIGhhbmRsZSBkYXRhIGZpbGUgdHJhbnNpdGlvbnMKKyMKKyMgdXNlciBzdXBwbGllcyBiZWdpbmZpbGUoKSBhbmQgZW5kZmlsZSgpIGZ1bmN0aW9ucworIworIyBBcm5vbGQgUm9iYmlucywgYXJub2xkQHNrZWV2ZS5jb20sIFB1YmxpYyBEb21haW4KKyMgTm92ZW1iZXIgMTk5MgorCitGTlIgPT0gMSB7CisgICAgaWYgKF9maWxlbmFtZV8gIT0gIiIpCisgICAgICAgIGVuZGZpbGUoX2ZpbGVuYW1lXykKKyAgICBfZmlsZW5hbWVfID0gRklMRU5BTUUKKyAgICBiZWdpbmZpbGUoRklMRU5BTUUpCit9CisKK0VORCAgeyBlbmRmaWxlKF9maWxlbmFtZV8pIH0KZGlmZiAtLWdpdCBhL3NoYXJlL2F3ay9nZXRvcHQuYXdrIGIvc2hhcmUvYXdrL2dldG9wdC5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI4MWFhMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F3ay9nZXRvcHQuYXdrCkBAIC0wLDAgKzEsODAgQEAKKyMgZ2V0b3B0LmF3ayAtLS0gRG8gQyBsaWJyYXJ5IGdldG9wdCgzKSBmdW5jdGlvbiBpbiBhd2sKKyMKKyMgQXJub2xkIFJvYmJpbnMsIGFybm9sZEBza2VldmUuY29tLCBQdWJsaWMgRG9tYWluCisjCisjIEluaXRpYWwgdmVyc2lvbjogTWFyY2gsIDE5OTEKKyMgUmV2aXNlZDogTWF5LCAxOTkzCisKKyMgRXh0ZXJuYWwgdmFyaWFibGVzOgorIyAgICBPcHRpbmQgLS0gaW5kZXggaW4gQVJHViBvZiBmaXJzdCBub25vcHRpb24gYXJndW1lbnQKKyMgICAgT3B0YXJnIC0tIHN0cmluZyB2YWx1ZSBvZiBhcmd1bWVudCB0byBjdXJyZW50IG9wdGlvbgorIyAgICBPcHRlcnIgLS0gaWYgbm9uemVybywgcHJpbnQgb3VyIG93biBkaWFnbm9zdGljCisjICAgIE9wdG9wdCAtLSBjdXJyZW50IG9wdGlvbiBsZXR0ZXIKKworIyBSZXR1cm5zOgorIyAgICAtMSAgICAgYXQgZW5kIG9mIG9wdGlvbnMKKyMgICAgIj8iICAgIGZvciB1bnJlY29nbml6ZWQgb3B0aW9uCisjICAgIDxjPiAgICBhIGNoYXJhY3RlciByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgb3B0aW9uCisKKyMgUHJpdmF0ZSBEYXRhOgorIyAgICBfb3B0aSAgLS0gaW5kZXggaW4gbXVsdGktZmxhZyBvcHRpb24sIGUuZy4sIC1hYmMKK2Z1bmN0aW9uIGdldG9wdChhcmdjLCBhcmd2LCBvcHRpb25zLCAgICB0aGlzb3B0LCBpKQoreworICAgIGlmIChsZW5ndGgob3B0aW9ucykgPT0gMCkgICAgIyBubyBvcHRpb25zIGdpdmVuCisgICAgICAgIHJldHVybiAtMQorCisgICAgaWYgKGFyZ3ZbT3B0aW5kXSA9PSAiLS0iKSB7ICAjIGFsbCBkb25lCisgICAgICAgIE9wdGluZCsrCisgICAgICAgIF9vcHRpID0gMAorICAgICAgICByZXR1cm4gLTEKKyAgICB9IGVsc2UgaWYgKGFyZ3ZbT3B0aW5kXSAhfiAvXi1bXjpbOnNwYWNlOl1dLykgeworICAgICAgICBfb3B0aSA9IDAKKyAgICAgICAgcmV0dXJuIC0xCisgICAgfQorICAgIGlmIChfb3B0aSA9PSAwKQorICAgICAgICBfb3B0aSA9IDIKKyAgICB0aGlzb3B0ID0gc3Vic3RyKGFyZ3ZbT3B0aW5kXSwgX29wdGksIDEpCisgICAgT3B0b3B0ID0gdGhpc29wdAorICAgIGkgPSBpbmRleChvcHRpb25zLCB0aGlzb3B0KQorICAgIGlmIChpID09IDApIHsKKyAgICAgICAgaWYgKE9wdGVycikKKyAgICAgICAgICAgIHByaW50ZigiJWMgLS0gaW52YWxpZCBvcHRpb25cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc29wdCkgPiAiL2Rldi9zdGRlcnIiCisgICAgICAgIGlmIChfb3B0aSA+PSBsZW5ndGgoYXJndltPcHRpbmRdKSkgeworICAgICAgICAgICAgT3B0aW5kKysKKyAgICAgICAgICAgIF9vcHRpID0gMAorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIF9vcHRpKysKKyAgICAgICAgcmV0dXJuICI/IgorICAgIH0KKyAgICBpZiAoc3Vic3RyKG9wdGlvbnMsIGkgKyAxLCAxKSA9PSAiOiIpIHsKKyAgICAgICAgIyBnZXQgb3B0aW9uIGFyZ3VtZW50CisgICAgICAgIGlmIChsZW5ndGgoc3Vic3RyKGFyZ3ZbT3B0aW5kXSwgX29wdGkgKyAxKSkgPiAwKQorICAgICAgICAgICAgT3B0YXJnID0gc3Vic3RyKGFyZ3ZbT3B0aW5kXSwgX29wdGkgKyAxKQorICAgICAgICBlbHNlCisgICAgICAgICAgICBPcHRhcmcgPSBhcmd2WysrT3B0aW5kXQorICAgICAgICBfb3B0aSA9IDAKKyAgICB9IGVsc2UKKyAgICAgICAgT3B0YXJnID0gIiIKKyAgICBpZiAoX29wdGkgPT0gMCB8fCBfb3B0aSA+PSBsZW5ndGgoYXJndltPcHRpbmRdKSkgeworICAgICAgICBPcHRpbmQrKworICAgICAgICBfb3B0aSA9IDAKKyAgICB9IGVsc2UKKyAgICAgICAgX29wdGkrKworICAgIHJldHVybiB0aGlzb3B0Cit9CitCRUdJTiB7CisgICAgT3B0ZXJyID0gMSAgICAjIGRlZmF1bHQgaXMgdG8gZGlhZ25vc2UKKyAgICBPcHRpbmQgPSAxICAgICMgc2tpcCBBUkdWWzBdCisKKyAgICAjIHRlc3QgcHJvZ3JhbQorICAgIGlmIChfZ2V0b3B0X3Rlc3QpIHsKKyAgICAgICAgd2hpbGUgKChfZ29fYyA9IGdldG9wdChBUkdDLCBBUkdWLCAiYWI6Y2QiKSkgIT0gLTEpCisgICAgICAgICAgICBwcmludGYoImMgPSA8JWM+LCBvcHRhcmcgPSA8JXM+XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2dvX2MsIE9wdGFyZykKKyAgICAgICAgcHJpbnRmKCJub24tb3B0aW9uIGFyZ3VtZW50czpcbiIpCisgICAgICAgIGZvciAoOyBPcHRpbmQgPCBBUkdDOyBPcHRpbmQrKykKKyAgICAgICAgICAgIHByaW50ZigiXHRBUkdWWyVkXSA9IDwlcz5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpbmQsIEFSR1ZbT3B0aW5kXSkKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zaGFyZS9hd2svZ2V0dGltZS5hd2sgYi9zaGFyZS9hd2svZ2V0dGltZS5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVmOWMzMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F3ay9nZXR0aW1lLmF3awpAQCAtMCwwICsxLDYyIEBACisjIGdldHRpbWVvZmRheS5hd2sgLS0tIGdldCB0aGUgdGltZSBvZiBkYXkgaW4gYSB1c2FibGUgZm9ybWF0CisjCisjIEFybm9sZCBSb2JiaW5zLCBhcm5vbGRAc2tlZXZlLmNvbSwgUHVibGljIERvbWFpbiwgTWF5IDE5OTMKKyMKKworIyBSZXR1cm5zIGEgc3RyaW5nIGluIHRoZSBmb3JtYXQgb2Ygb3V0cHV0IG9mIGRhdGUoMSkKKyMgUG9wdWxhdGVzIHRoZSBhcnJheSBhcmd1bWVudCB0aW1lIHdpdGggaW5kaXZpZHVhbCB2YWx1ZXM6CisjICAgIHRpbWVbInNlY29uZCJdICAgICAgIC0tIHNlY29uZHMgKDAgLSA1OSkKKyMgICAgdGltZVsibWludXRlIl0gICAgICAgLS0gbWludXRlcyAoMCAtIDU5KQorIyAgICB0aW1lWyJob3VyIl0gICAgICAgICAtLSBob3VycyAoMCAtIDIzKQorIyAgICB0aW1lWyJhbHRob3VyIl0gICAgICAtLSBob3VycyAoMCAtIDEyKQorIyAgICB0aW1lWyJtb250aGRheSJdICAgICAtLSBkYXkgb2YgbW9udGggKDEgLSAzMSkKKyMgICAgdGltZVsibW9udGgiXSAgICAgICAgLS0gbW9udGggb2YgeWVhciAoMSAtIDEyKQorIyAgICB0aW1lWyJtb250aG5hbWUiXSAgICAtLSBuYW1lIG9mIHRoZSBtb250aAorIyAgICB0aW1lWyJzaG9ydG1vbnRoIl0gICAtLSBzaG9ydCBuYW1lIG9mIHRoZSBtb250aAorIyAgICB0aW1lWyJ5ZWFyIl0gICAgICAgICAtLSB5ZWFyIG1vZHVsbyAxMDAgKDAgLSA5OSkKKyMgICAgdGltZVsiZnVsbHllYXIiXSAgICAgLS0gZnVsbCB5ZWFyCisjICAgIHRpbWVbIndlZWtkYXkiXSAgICAgIC0tIGRheSBvZiB3ZWVrIChTdW5kYXkgPSAwKQorIyAgICB0aW1lWyJhbHR3ZWVrZGF5Il0gICAtLSBkYXkgb2Ygd2VlayAoTW9uZGF5ID0gMCkKKyMgICAgdGltZVsiZGF5bmFtZSJdICAgICAgLS0gbmFtZSBvZiB3ZWVrZGF5CisjICAgIHRpbWVbInNob3J0ZGF5bmFtZSJdIC0tIHNob3J0IG5hbWUgb2Ygd2Vla2RheQorIyAgICB0aW1lWyJ5ZWFyZGF5Il0gICAgICAtLSBkYXkgb2YgeWVhciAoMCAtIDM2NSkKKyMgICAgdGltZVsidGltZXpvbmUiXSAgICAgLS0gYWJicmV2aWF0aW9uIG9mIHRpbWV6b25lIG5hbWUKKyMgICAgdGltZVsiYW1wbSJdICAgICAgICAgLS0gQU0gb3IgUE0gZGVzaWduYXRpb24KKyMgICAgdGltZVsid2Vla251bSJdICAgICAgLS0gd2VlayBudW1iZXIsIFN1bmRheSBmaXJzdCBkYXkKKyMgICAgdGltZVsiYWx0d2Vla251bSJdICAgLS0gd2VlayBudW1iZXIsIE1vbmRheSBmaXJzdCBkYXkKKworZnVuY3Rpb24gZ2V0dGltZW9mZGF5KHRpbWUsICAgIHJldCwgbm93LCBpKQoreworICAgICMgZ2V0IHRpbWUgb25jZSwgYXZvaWRzIHVubmVjZXNzYXJ5IHN5c3RlbSBjYWxscworICAgIG5vdyA9IHN5c3RpbWUoKQorCisgICAgIyByZXR1cm4gZGF0ZSgxKS1zdHlsZSBvdXRwdXQKKyAgICByZXQgPSBzdHJmdGltZSgiJWEgJWIgJWUgJUg6JU06JVMgJVogJVkiLCBub3cpCisKKyAgICAjIGNsZWFyIG91dCB0YXJnZXQgYXJyYXkKKyAgICBkZWxldGUgdGltZQorCisgICAgIyBmaWxsIGluIHZhbHVlcywgZm9yY2UgbnVtZXJpYyB2YWx1ZXMgdG8gYmUKKyAgICAjIG51bWVyaWMgYnkgYWRkaW5nIDAKKyAgICB0aW1lWyJzZWNvbmQiXSAgICAgICA9IHN0cmZ0aW1lKCIlUyIsIG5vdykgKyAwCisgICAgdGltZVsibWludXRlIl0gICAgICAgPSBzdHJmdGltZSgiJU0iLCBub3cpICsgMAorICAgIHRpbWVbImhvdXIiXSAgICAgICAgID0gc3RyZnRpbWUoIiVIIiwgbm93KSArIDAKKyAgICB0aW1lWyJhbHRob3VyIl0gICAgICA9IHN0cmZ0aW1lKCIlSSIsIG5vdykgKyAwCisgICAgdGltZVsibW9udGhkYXkiXSAgICAgPSBzdHJmdGltZSgiJWQiLCBub3cpICsgMAorICAgIHRpbWVbIm1vbnRoIl0gICAgICAgID0gc3RyZnRpbWUoIiVtIiwgbm93KSArIDAKKyAgICB0aW1lWyJtb250aG5hbWUiXSAgICA9IHN0cmZ0aW1lKCIlQiIsIG5vdykKKyAgICB0aW1lWyJzaG9ydG1vbnRoIl0gICA9IHN0cmZ0aW1lKCIlYiIsIG5vdykKKyAgICB0aW1lWyJ5ZWFyIl0gICAgICAgICA9IHN0cmZ0aW1lKCIleSIsIG5vdykgKyAwCisgICAgdGltZVsiZnVsbHllYXIiXSAgICAgPSBzdHJmdGltZSgiJVkiLCBub3cpICsgMAorICAgIHRpbWVbIndlZWtkYXkiXSAgICAgID0gc3RyZnRpbWUoIiV3Iiwgbm93KSArIDAKKyAgICB0aW1lWyJhbHR3ZWVrZGF5Il0gICA9IHN0cmZ0aW1lKCIldSIsIG5vdykgKyAwCisgICAgdGltZVsiZGF5bmFtZSJdICAgICAgPSBzdHJmdGltZSgiJUEiLCBub3cpCisgICAgdGltZVsic2hvcnRkYXluYW1lIl0gPSBzdHJmdGltZSgiJWEiLCBub3cpCisgICAgdGltZVsieWVhcmRheSJdICAgICAgPSBzdHJmdGltZSgiJWoiLCBub3cpICsgMAorICAgIHRpbWVbInRpbWV6b25lIl0gICAgID0gc3RyZnRpbWUoIiVaIiwgbm93KQorICAgIHRpbWVbImFtcG0iXSAgICAgICAgID0gc3RyZnRpbWUoIiVwIiwgbm93KQorICAgIHRpbWVbIndlZWtudW0iXSAgICAgID0gc3RyZnRpbWUoIiVVIiwgbm93KSArIDAKKyAgICB0aW1lWyJhbHR3ZWVrbnVtIl0gICA9IHN0cmZ0aW1lKCIlVyIsIG5vdykgKyAwCisKKyAgICByZXR1cm4gcmV0Cit9CmRpZmYgLS1naXQgYS9zaGFyZS9hd2svZ3JvdXAuYXdrIGIvc2hhcmUvYXdrL2dyb3VwLmF3awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTc0MjM4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXdrL2dyb3VwLmF3awpAQCAtMCwwICsxLDg1IEBACisjIGdyb3VwLmF3ayAtLS0gZnVuY3Rpb25zIGZvciBkZWFsaW5nIHdpdGggdGhlIGdyb3VwIGZpbGUKKyMKKyMgQXJub2xkIFJvYmJpbnMsIGFybm9sZEBza2VldmUuY29tLCBQdWJsaWMgRG9tYWluCisjIE1heSAxOTkzCisjIFJldmlzZWQgT2N0b2JlciAyMDAwCisjIFJldmlzZWQgRGVjZW1iZXIgMjAxMAorCitCRUdJTiAgICBcCit7CisgICAgIyBDaGFuZ2UgdG8gc3VpdCB5b3VyIHN5c3RlbQorICAgIF9ncl9hd2tsaWIgPSAiL3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyL2xpYmV4ZWMvYXdrLyIKK30KKworZnVuY3Rpb24gX2dyX2luaXQoICAgIG9sZGZzLCBvbGRycywgb2xkZG9sMCwgZ3JjYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nX2Z3LCB1c2luZ19mcGF0LCBuLCBhLCBpKQoreworICAgIGlmIChfZ3JfaW5pdGVkKQorICAgICAgICByZXR1cm4KKworICAgIG9sZGZzID0gRlMKKyAgICBvbGRycyA9IFJTCisgICAgb2xkZG9sMCA9ICQwCisgICAgdXNpbmdfZncgPSAoUFJPQ0lORk9bIkZTIl0gPT0gIkZJRUxEV0lEVEhTIikKKyAgICB1c2luZ19mcGF0ID0gKFBST0NJTkZPWyJGUyJdID09ICJGUEFUIikKKyAgICBGUyA9ICI6IgorICAgIFJTID0gIlxuIgorCisgICAgZ3JjYXQgPSBfZ3JfYXdrbGliICJncmNhdCIKKyAgICB3aGlsZSAoKGdyY2F0IHwgZ2V0bGluZSkgPiAwKSB7CisgICAgICAgIGlmICgkMSBpbiBfZ3JfYnluYW1lKQorICAgICAgICAgICAgX2dyX2J5bmFtZVskMV0gPSBfZ3JfYnluYW1lWyQxXSAiLCIgJDQKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgX2dyX2J5bmFtZVskMV0gPSAkMAorICAgICAgICBpZiAoJDMgaW4gX2dyX2J5Z2lkKQorICAgICAgICAgICAgX2dyX2J5Z2lkWyQzXSA9IF9ncl9ieWdpZFskM10gIiwiICQ0CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIF9ncl9ieWdpZFskM10gPSAkMAorCisgICAgICAgIG4gPSBzcGxpdCgkNCwgYSwgIlsgXHRdKixbIFx0XSoiKQorICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykKKyAgICAgICAgICAgIGlmIChhW2ldIGluIF9ncl9ncm91cHNieXVzZXIpCisgICAgICAgICAgICAgICAgX2dyX2dyb3Vwc2J5dXNlclthW2ldXSA9IFwKKyAgICAgICAgICAgICAgICAgICAgX2dyX2dyb3Vwc2J5dXNlclthW2ldXSAiICIgJDEKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBfZ3JfZ3JvdXBzYnl1c2VyW2FbaV1dID0gJDEKKworICAgICAgICBfZ3JfYnljb3VudFsrK19ncl9jb3VudF0gPSAkMAorICAgIH0KKyAgICBjbG9zZShncmNhdCkKKyAgICBfZ3JfY291bnQgPSAwCisgICAgX2dyX2luaXRlZCsrCisgICAgRlMgPSBvbGRmcworICAgIGlmICh1c2luZ19mdykKKyAgICAgICAgRklFTERXSURUSFMgPSBGSUVMRFdJRFRIUworICAgIGVsc2UgaWYgKHVzaW5nX2ZwYXQpCisgICAgICAgIEZQQVQgPSBGUEFUCisgICAgUlMgPSBvbGRycworICAgICQwID0gb2xkZG9sMAorfQorZnVuY3Rpb24gZ2V0Z3JuYW0oZ3JvdXApCit7CisgICAgX2dyX2luaXQoKQorICAgIHJldHVybiBfZ3JfYnluYW1lW2dyb3VwXQorfQorZnVuY3Rpb24gZ2V0Z3JnaWQoZ2lkKQoreworICAgIF9ncl9pbml0KCkKKyAgICByZXR1cm4gX2dyX2J5Z2lkW2dpZF0KK30KK2Z1bmN0aW9uIGdldGdydXNlcih1c2VyKQoreworICAgIF9ncl9pbml0KCkKKyAgICByZXR1cm4gX2dyX2dyb3Vwc2J5dXNlclt1c2VyXQorfQorZnVuY3Rpb24gZ2V0Z3JlbnQoKQoreworICAgIF9ncl9pbml0KCkKKyAgICBpZiAoKytfZ3JfY291bnQgaW4gX2dyX2J5Y291bnQpCisgICAgICAgIHJldHVybiBfZ3JfYnljb3VudFtfZ3JfY291bnRdCisgICAgcmV0dXJuICIiCit9CitmdW5jdGlvbiBlbmRncmVudCgpCit7CisgICAgX2dyX2NvdW50ID0gMAorfQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXdrL2pvaW4uYXdrIGIvc2hhcmUvYXdrL2pvaW4uYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNGFjOTIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hd2svam9pbi5hd2sKQEAgLTAsMCArMSwxNiBAQAorIyBqb2luLmF3ayAtLS0gam9pbiBhbiBhcnJheSBpbnRvIGEgc3RyaW5nCisjCisjIEFybm9sZCBSb2JiaW5zLCBhcm5vbGRAc2tlZXZlLmNvbSwgUHVibGljIERvbWFpbgorIyBNYXkgMTk5MworCitmdW5jdGlvbiBqb2luKGFycmF5LCBzdGFydCwgZW5kLCBzZXAsICAgIHJlc3VsdCwgaSkKK3sKKyAgICBpZiAoc2VwID09ICIiKQorICAgICAgIHNlcCA9ICIgIgorICAgIGVsc2UgaWYgKHNlcCA9PSBTVUJTRVApICMgbWFnaWMgdmFsdWUKKyAgICAgICBzZXAgPSAiIgorICAgIHJlc3VsdCA9IGFycmF5W3N0YXJ0XQorICAgIGZvciAoaSA9IHN0YXJ0ICsgMTsgaSA8PSBlbmQ7IGkrKykKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0IHNlcCBhcnJheVtpXQorICAgIHJldHVybiByZXN1bHQKK30KZGlmZiAtLWdpdCBhL3NoYXJlL2F3ay9saWJpbnRsLmF3ayBiL3NoYXJlL2F3ay9saWJpbnRsLmF3awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWZkMmI0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXdrL2xpYmludGwuYXdrCkBAIC0wLDAgKzEsMTQgQEAKK2Z1bmN0aW9uIGJpbmR0ZXh0ZG9tYWluKGRpciwgZG9tYWluKQoreworICAgIHJldHVybiBkaXIKK30KKworZnVuY3Rpb24gZGNnZXR0ZXh0KHN0cmluZywgZG9tYWluLCBjYXRlZ29yeSkKK3sKKyAgICByZXR1cm4gc3RyaW5nCit9CisKK2Z1bmN0aW9uIGRjbmdldHRleHQoc3RyaW5nMSwgc3RyaW5nMiwgbnVtYmVyLCBkb21haW4sIGNhdGVnb3J5KQoreworICAgIHJldHVybiAobnVtYmVyID09IDEgPyBzdHJpbmcxIDogc3RyaW5nMikKK30KZGlmZiAtLWdpdCBhL3NoYXJlL2F3ay9ub2Fzc2lnbi5hd2sgYi9zaGFyZS9hd2svbm9hc3NpZ24uYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNzUwZWQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hd2svbm9hc3NpZ24uYXdrCkBAIC0wLDAgKzEsMTcgQEAKKyMgbm9hc3NpZ24uYXdrIC0tLSBsaWJyYXJ5IGZpbGUgdG8gYXZvaWQgdGhlIG5lZWQgZm9yIGEKKyMgc3BlY2lhbCBvcHRpb24gdGhhdCBkaXNhYmxlcyBjb21tYW5kLWxpbmUgYXNzaWdubWVudHMKKyMKKyMgQXJub2xkIFJvYmJpbnMsIGFybm9sZEBza2VldmUuY29tLCBQdWJsaWMgRG9tYWluCisjIE9jdG9iZXIgMTk5OQorCitmdW5jdGlvbiBkaXNhYmxlX2Fzc2lnbnMoYXJnYywgYXJndiwgICAgaSkKK3sKKyAgICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQorICAgICAgICBpZiAoYXJndltpXSB+IC9eW1s6YWxwaGE6XV9dW1s6YWxudW06XV9dKj0uKi8pCisgICAgICAgICAgICBhcmd2W2ldID0gKCIuLyIgYXJndltpXSkKK30KKworQkVHSU4geworICAgIGlmIChOb19jb21tYW5kX2Fzc2lnbikKKyAgICAgICAgZGlzYWJsZV9hc3NpZ25zKEFSR0MsIEFSR1YpCit9CmRpZmYgLS1naXQgYS9zaGFyZS9hd2svb3JkLmF3ayBiL3NoYXJlL2F3ay9vcmQuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNDdlMTUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hd2svb3JkLmF3awpAQCAtMCwwICsxLDQ0IEBACisjIG9yZC5hd2sgLS0tIGRvIG9yZCBhbmQgY2hyCisKKyMgR2xvYmFsIGlkZW50aWZpZXJzOgorIyAgICBfb3JkXzogICAgICAgIG51bWVyaWNhbCB2YWx1ZXMgaW5kZXhlZCBieSBjaGFyYWN0ZXJzCisjICAgIF9vcmRfaW5pdDogICAgZnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSBfb3JkXworIworIyBBcm5vbGQgUm9iYmlucywgYXJub2xkQHNrZWV2ZS5jb20sIFB1YmxpYyBEb21haW4KKyMgMTYgSmFudWFyeSwgMTk5MgorIyAyMCBKdWx5LCAxOTkyLCByZXZpc2VkCisKK0JFR0lOICAgIHsgX29yZF9pbml0KCkgfQorCitmdW5jdGlvbiBfb3JkX2luaXQoICAgIGxvdywgaGlnaCwgaSwgdCkKK3sKKyAgICBsb3cgPSBzcHJpbnRmKCIlYyIsIDcpICMgQkVMIGlzIGFzY2lpIDcKKyAgICBpZiAobG93ID09ICJcYSIpIHsgICAgIyByZWd1bGFyIGFzY2lpCisgICAgICAgIGxvdyA9IDAKKyAgICAgICAgaGlnaCA9IDEyNworICAgIH0gZWxzZSBpZiAoc3ByaW50ZigiJWMiLCAxMjggKyA3KSA9PSAiXGEiKSB7CisgICAgICAgICMgYXNjaWksIG1hcmsgcGFyaXR5CisgICAgICAgIGxvdyA9IDEyOAorICAgICAgICBoaWdoID0gMjU1CisgICAgfSBlbHNlIHsgICAgICAgICMgZWJjZGljKCEpCisgICAgICAgIGxvdyA9IDAKKyAgICAgICAgaGlnaCA9IDI1NQorICAgIH0KKworICAgIGZvciAoaSA9IGxvdzsgaSA8PSBoaWdoOyBpKyspIHsKKyAgICAgICAgdCA9IHNwcmludGYoIiVjIiwgaSkKKyAgICAgICAgX29yZF9bdF0gPSBpCisgICAgfQorfQorZnVuY3Rpb24gb3JkKHN0ciwgICAgYykKK3sKKyAgICAjIG9ubHkgZmlyc3QgY2hhcmFjdGVyIGlzIG9mIGludGVyZXN0CisgICAgYyA9IHN1YnN0cihzdHIsIDEsIDEpCisgICAgcmV0dXJuIF9vcmRfW2NdCit9CisKK2Z1bmN0aW9uIGNocihjKQoreworICAgICMgZm9yY2UgYyB0byBiZSBudW1lcmljIGJ5IGFkZGluZyAwCisgICAgcmV0dXJuIHNwcmludGYoIiVjIiwgYyArIDApCit9CmRpZmYgLS1naXQgYS9zaGFyZS9hd2svcGFzc3dkLmF3ayBiL3NoYXJlL2F3ay9wYXNzd2QuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2N2Q5ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hd2svcGFzc3dkLmF3awpAQCAtMCwwICsxLDYzIEBACisjIHBhc3N3ZC5hd2sgLS0tIGFjY2VzcyBwYXNzd29yZCBmaWxlIGluZm9ybWF0aW9uCisjCisjIEFybm9sZCBSb2JiaW5zLCBhcm5vbGRAc2tlZXZlLmNvbSwgUHVibGljIERvbWFpbgorIyBNYXkgMTk5MworIyBSZXZpc2VkIE9jdG9iZXIgMjAwMAorIyBSZXZpc2VkIERlY2VtYmVyIDIwMTAKKworQkVHSU4geworICAgICMgdGFpbG9yIHRoaXMgdG8gc3VpdCB5b3VyIHN5c3RlbQorICAgIF9wd19hd2tsaWIgPSAiL3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyL2xpYmV4ZWMvYXdrLyIKK30KKworZnVuY3Rpb24gX3B3X2luaXQoICAgIG9sZGZzLCBvbGRycywgb2xkZG9sMCwgcHdjYXQsIHVzaW5nX2Z3LCB1c2luZ19mcGF0KQoreworICAgIGlmIChfcHdfaW5pdGVkKQorICAgICAgICByZXR1cm4KKworICAgIG9sZGZzID0gRlMKKyAgICBvbGRycyA9IFJTCisgICAgb2xkZG9sMCA9ICQwCisgICAgdXNpbmdfZncgPSAoUFJPQ0lORk9bIkZTIl0gPT0gIkZJRUxEV0lEVEhTIikKKyAgICB1c2luZ19mcGF0ID0gKFBST0NJTkZPWyJGUyJdID09ICJGUEFUIikKKyAgICBGUyA9ICI6IgorICAgIFJTID0gIlxuIgorCisgICAgcHdjYXQgPSBfcHdfYXdrbGliICJwd2NhdCIKKyAgICB3aGlsZSAoKHB3Y2F0IHwgZ2V0bGluZSkgPiAwKSB7CisgICAgICAgIF9wd19ieW5hbWVbJDFdID0gJDAKKyAgICAgICAgX3B3X2J5dWlkWyQzXSA9ICQwCisgICAgICAgIF9wd19ieWNvdW50WysrX3B3X3RvdGFsXSA9ICQwCisgICAgfQorICAgIGNsb3NlKHB3Y2F0KQorICAgIF9wd19jb3VudCA9IDAKKyAgICBfcHdfaW5pdGVkID0gMQorICAgIEZTID0gb2xkZnMKKyAgICBpZiAodXNpbmdfZncpCisgICAgICAgIEZJRUxEV0lEVEhTID0gRklFTERXSURUSFMKKyAgICBlbHNlIGlmICh1c2luZ19mcGF0KQorICAgICAgICBGUEFUID0gRlBBVAorICAgIFJTID0gb2xkcnMKKyAgICAkMCA9IG9sZGRvbDAKK30KK2Z1bmN0aW9uIGdldHB3bmFtKG5hbWUpCit7CisgICAgX3B3X2luaXQoKQorICAgIHJldHVybiBfcHdfYnluYW1lW25hbWVdCit9CitmdW5jdGlvbiBnZXRwd3VpZCh1aWQpCit7CisgICAgX3B3X2luaXQoKQorICAgIHJldHVybiBfcHdfYnl1aWRbdWlkXQorfQorZnVuY3Rpb24gZ2V0cHdlbnQoKQoreworICAgIF9wd19pbml0KCkKKyAgICBpZiAoX3B3X2NvdW50IDwgX3B3X3RvdGFsKQorICAgICAgICByZXR1cm4gX3B3X2J5Y291bnRbKytfcHdfY291bnRdCisgICAgcmV0dXJuICIiCit9CitmdW5jdGlvbiBlbmRwd2VudCgpCit7CisgICAgX3B3X2NvdW50ID0gMAorfQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXdrL3F1aWNrc29ydC5hd2sgYi9zaGFyZS9hd2svcXVpY2tzb3J0LmF3awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTY3NzM2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYXdrL3F1aWNrc29ydC5hd2sKQEAgLTAsMCArMSwzNCBAQAorIyBxdWlja3NvcnQuYXdrIC0tLSBRdWlja3NvcnQgYWxnb3JpdGhtLCB3aXRoIHVzZXItc3VwcGxpZWQKKyMgICAgICAgICAgICAgICAgICAgY29tcGFyaXNvbiBmdW5jdGlvbgorIworIyBBcm5vbGQgUm9iYmlucywgYXJub2xkc2tlZXZlLmNvbSwgUHVibGljIERvbWFpbgorIyBKYW51YXJ5IDIwMDkKKyMgcXVpY2tzb3J0IC0tLSBDLkEuUi4gSG9hcmUncyBxdWljayBzb3J0IGFsZ29yaXRobS4gU2VlIFdpa2lwZWRpYQorIyAgICAgICAgICAgICAgIG9yIGFsbW9zdCBhbnkgYWxnb3JpdGhtcyBvciBjb21wdXRlciBzY2llbmNlIHRleHQKKyMKKyMgQWRhcHRlZCBmcm9tIEsmUi1JSSwgcGFnZSAxMTAKK2VuZCBpZ25vcmUKKworZnVuY3Rpb24gcXVpY2tzb3J0KGRhdGEsIGxlZnQsIHJpZ2h0LCBsZXNzX3RoYW4sICAgIGksIGxhc3QpCit7CisgICAgaWYgKGxlZnQgPj0gcmlnaHQpICAjIGRvIG5vdGhpbmcgaWYgYXJyYXkgY29udGFpbnMgZmV3ZXIKKyAgICAgICAgcmV0dXJuICAgICAgICAgICMgdGhhbiB0d28gZWxlbWVudHMKKworICAgIHF1aWNrc29ydF9zd2FwKGRhdGEsIGxlZnQsIGludCgobGVmdCArIHJpZ2h0KSAvIDIpKQorICAgIGxhc3QgPSBsZWZ0CisgICAgZm9yIChpID0gbGVmdCArIDE7IGkgPD0gcmlnaHQ7IGkrKykKKyAgICAgICAgaWYgKEBsZXNzX3RoYW4oZGF0YVtpXSwgZGF0YVtsZWZ0XSkpCisgICAgICAgICAgICBxdWlja3NvcnRfc3dhcChkYXRhLCArK2xhc3QsIGkpCisgICAgcXVpY2tzb3J0X3N3YXAoZGF0YSwgbGVmdCwgbGFzdCkKKyAgICBxdWlja3NvcnQoZGF0YSwgbGVmdCwgbGFzdCAtIDEsIGxlc3NfdGhhbikKKyAgICBxdWlja3NvcnQoZGF0YSwgbGFzdCArIDEsIHJpZ2h0LCBsZXNzX3RoYW4pCit9CisKKyMgcXVpY2tzb3J0X3N3YXAgLS0tIGhlbHBlciBmdW5jdGlvbiBmb3IgcXVpY2tzb3J0LCBzaG91bGQgcmVhbGx5IGJlIGlubGluZQorCitmdW5jdGlvbiBxdWlja3NvcnRfc3dhcChkYXRhLCBpLCBqLCB0ZW1wKQoreworICAgIHRlbXAgPSBkYXRhW2ldCisgICAgZGF0YVtpXSA9IGRhdGFbal0KKyAgICBkYXRhW2pdID0gdGVtcAorfQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXdrL3JlYWRhYmxlLmF3ayBiL3NoYXJlL2F3ay9yZWFkYWJsZS5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk0MmRjYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F3ay9yZWFkYWJsZS5hd2sKQEAgLTAsMCArMSwxNyBAQAorIyByZWFkYWJsZS5hd2sgLS0tIGxpYnJhcnkgZmlsZSB0byBza2lwIG92ZXIgdW5yZWFkYWJsZSBmaWxlcworIworIyBBcm5vbGQgUm9iYmlucywgYXJub2xkQHNrZWV2ZS5jb20sIFB1YmxpYyBEb21haW4KKyMgT2N0b2JlciAyMDAwCisjIERlY2VtYmVyIDIwMTAKKworQkVHSU4geworICAgIGZvciAoaSA9IDE7IGkgPCBBUkdDOyBpKyspIHsKKyAgICAgICAgaWYgKEFSR1ZbaV0gfiAvXltbOmFscGhhOl1fXVtbOmFsbnVtOl1fXSo9LiovIFwKKyAgICAgICAgICAgIHx8IEFSR1ZbaV0gPT0gIi0iIHx8IEFSR1ZbaV0gPT0gIi9kZXYvc3RkaW4iKQorICAgICAgICAgICAgY29udGludWUgICAgIyBhc3NpZ25tZW50IG9yIHN0YW5kYXJkIGlucHV0CisgICAgICAgIGVsc2UgaWYgKChnZXRsaW5lIGp1bmsgPCBBUkdWW2ldKSA8IDApICMgdW5yZWFkYWJsZQorICAgICAgICAgICAgZGVsZXRlIEFSR1ZbaV0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2xvc2UoQVJHVltpXSkKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zaGFyZS9hd2svcmV3aW5kLmF3ayBiL3NoYXJlL2F3ay9yZXdpbmQuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NDZlYWMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hd2svcmV3aW5kLmF3awpAQCAtMCwwICsxLDIwIEBACisjIHJld2luZC5hd2sgLS0tIHJld2luZCB0aGUgY3VycmVudCBmaWxlIGFuZCBzdGFydCBvdmVyCisjCisjIEFybm9sZCBSb2JiaW5zLCBhcm5vbGRAc2tlZXZlLmNvbSwgUHVibGljIERvbWFpbgorIyBTZXB0ZW1iZXIgMjAwMAorCitmdW5jdGlvbiByZXdpbmQoICAgIGkpCit7CisgICAgIyBzaGlmdCByZW1haW5pbmcgYXJndW1lbnRzIHVwCisgICAgZm9yIChpID0gQVJHQzsgaSA+IEFSR0lORDsgaS0tKQorICAgICAgICBBUkdWW2ldID0gQVJHVltpLTFdCisKKyAgICAjIG1ha2Ugc3VyZSBnYXdrIGtub3dzIHRvIGtlZXAgZ29pbmcKKyAgICBBUkdDKysKKworICAgICMgbWFrZSBjdXJyZW50IGZpbGUgbmV4dCB0byBnZXQgZG9uZQorICAgIEFSR1ZbQVJHSU5EKzFdID0gRklMRU5BTUUKKworICAgICMgZG8gaXQKKyAgICBuZXh0ZmlsZQorfQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXdrL3JvdW5kLmF3ayBiL3NoYXJlL2F3ay9yb3VuZC5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk5NjQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F3ay9yb3VuZC5hd2sKQEAgLTAsMCArMSwyOSBAQAorIyByb3VuZC5hd2sgLS0tIGRvIG5vcm1hbCByb3VuZGluZworIworIyBBcm5vbGQgUm9iYmlucywgYXJub2xkQHNrZWV2ZS5jb20sIFB1YmxpYyBEb21haW4KKyMgQXVndXN0LCAxOTk2CisKK2Z1bmN0aW9uIHJvdW5kKHgsICAgaXZhbCwgYXZhbCwgZnJhY3Rpb24pCit7CisgICBpdmFsID0gaW50KHgpICAgICMgaW50ZWdlciBwYXJ0LCBpbnQoKSB0cnVuY2F0ZXMKKworICAgIyBzZWUgaWYgZnJhY3Rpb25hbCBwYXJ0CisgICBpZiAoaXZhbCA9PSB4KSAgICMgbm8gZnJhY3Rpb24KKyAgICAgIHJldHVybiBpdmFsICAgIyBlbnN1cmUgbm8gZGVjaW1hbHMKKworICAgaWYgKHggPCAwKSB7CisgICAgICBhdmFsID0gLXggICAgICMgYWJzb2x1dGUgdmFsdWUKKyAgICAgIGl2YWwgPSBpbnQoYXZhbCkKKyAgICAgIGZyYWN0aW9uID0gYXZhbCAtIGl2YWwKKyAgICAgIGlmIChmcmFjdGlvbiA+PSAuNSkKKyAgICAgICAgIHJldHVybiBpbnQoeCkgLSAxICAgIyAtMi41IC0tPiAtMworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIGludCh4KSAgICAgICAjIC0yLjMgLS0+IC0yCisgICB9IGVsc2UgeworICAgICAgZnJhY3Rpb24gPSB4IC0gaXZhbAorICAgICAgaWYgKGZyYWN0aW9uID49IC41KQorICAgICAgICAgcmV0dXJuIGl2YWwgKyAxCisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gaXZhbAorICAgfQorfQpkaWZmIC0tZ2l0IGEvc2hhcmUvYXdrL3N0cnRvbnVtLmF3ayBiL3NoYXJlL2F3ay9zdHJ0b251bS5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU2YWI1MAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F3ay9zdHJ0b251bS5hd2sKQEAgLTAsMCArMSw1NyBAQAorIyBteXN0cnRvbnVtIC0tLSBjb252ZXJ0IHN0cmluZyB0byBudW1iZXIKKworIworIyBBcm5vbGQgUm9iYmlucywgYXJub2xkQHNrZWV2ZS5jb20sIFB1YmxpYyBEb21haW4KKyMgRmVicnVhcnksIDIwMDQKKworZnVuY3Rpb24gbXlzdHJ0b251bShzdHIsICAgICAgICByZXQsIGNoYXJzLCBuLCBpLCBrLCBjKQoreworICAgIGlmIChzdHIgfiAvXjBbMC03XSokLykgeworICAgICAgICAjIG9jdGFsCisgICAgICAgIG4gPSBsZW5ndGgoc3RyKQorICAgICAgICByZXQgPSAwCisgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gbjsgaSsrKSB7CisgICAgICAgICAgICBjID0gc3Vic3RyKHN0ciwgaSwgMSkKKyAgICAgICAgICAgIGlmICgoayA9IGluZGV4KCIwMTIzNDU2NyIsIGMpKSA+IDApCisgICAgICAgICAgICAgICAgay0tICMgYWRqdXN0IGZvciAxLWJhc2luZyBpbiBhd2sKKworICAgICAgICAgICAgcmV0ID0gcmV0ICogOCArIGsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc3RyIH4gL14wW3hYXVtbOnhkaWdpdDpdXSsvKSB7CisgICAgICAgICMgaGV4YWRlY2ltYWwKKyAgICAgICAgc3RyID0gc3Vic3RyKHN0ciwgMykgICAgIyBsb3Agb2ZmIGxlYWRpbmcgMHgKKyAgICAgICAgbiA9IGxlbmd0aChzdHIpCisgICAgICAgIHJldCA9IDAKKyAgICAgICAgZm9yIChpID0gMTsgaSA8PSBuOyBpKyspIHsKKyAgICAgICAgICAgIGMgPSBzdWJzdHIoc3RyLCBpLCAxKQorICAgICAgICAgICAgYyA9IHRvbG93ZXIoYykKKyAgICAgICAgICAgIGlmICgoayA9IGluZGV4KCIwMTIzNDU2Nzg5IiwgYykpID4gMCkKKyAgICAgICAgICAgICAgICBrLS0gIyBhZGp1c3QgZm9yIDEtYmFzaW5nIGluIGF3aworICAgICAgICAgICAgZWxzZSBpZiAoKGsgPSBpbmRleCgiYWJjZGVmIiwgYykpID4gMCkKKyAgICAgICAgICAgICAgICBrICs9IDkKKworICAgICAgICAgICAgcmV0ID0gcmV0ICogMTYgKyBrCisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHN0ciB+IFwKKyAgL15bLStdPyhbMC05XSsoWy5dWzAtOV0qKFtFZV1bMC05XSspPyk/fChbLl1bMC05XSsoW0VlXVstK10/WzAtOV0rKT8pKSQvKSB7CisgICAgICAgICMgZGVjaW1hbCBudW1iZXIsIHBvc3NpYmx5IGZsb2F0aW5nIHBvaW50CisgICAgICAgIHJldCA9IHN0ciArIDAKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0ID0gIk5PVC1BLU5VTUJFUiIKKworICAgIHJldHVybiByZXQKK30KKworIyBCRUdJTiB7ICAgICAjIGdhd2sgdGVzdCBoYXJuZXNzCisjICAgICBhWzFdID0gIjI1IgorIyAgICAgYVsyXSA9ICIuMzEiCisjICAgICBhWzNdID0gIjAxMjMiCisjICAgICBhWzRdID0gIjB4ZGVhZEJFRUYiCisjICAgICBhWzVdID0gIjEyMy40NSIKKyMgICAgIGFbNl0gPSAiMS5lMyIKKyMgICAgIGFbN10gPSAiMS4zMiIKKyMgICAgIGFbN10gPSAiMS4zMkUyIgorIyAKKyMgICAgIGZvciAoaSA9IDE7IGkgaW4gYTsgaSsrKQorIyAgICAgICAgIHByaW50IGFbaV0sIHN0cnRvbnVtKGFbaV0pLCBteXN0cnRvbnVtKGFbaV0pCisjIH0KZGlmZiAtLWdpdCBhL3NoYXJlL2F3ay93YWxrYXJyYXkuYXdrIGIvc2hhcmUvYXdrL3dhbGthcnJheS5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUzNmY0NgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2F3ay93YWxrYXJyYXkuYXdrCkBAIC0wLDAgKzEsOSBAQAorZnVuY3Rpb24gd2Fsa19hcnJheShhcnIsIG5hbWUsICAgICAgaSkKK3sKKyAgICBmb3IgKGkgaW4gYXJyKSB7CisgICAgICAgIGlmIChpc2FycmF5KGFycltpXSkpCisgICAgICAgICAgICB3YWxrX2FycmF5KGFycltpXSwgKG5hbWUgIlsiIGkgIl0iKSkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJpbnRmKCIlc1slc10gPSAlc1xuIiwgbmFtZSwgaSwgYXJyW2ldKQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3NoYXJlL2F3ay96ZXJvZmlsZS5hd2sgYi9zaGFyZS9hd2svemVyb2ZpbGUuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYTU0OWMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9hd2svemVyb2ZpbGUuYXdrCkBAIC0wLDAgKzEsMTkgQEAKKyMgemVyb2ZpbGUuYXdrIC0tLSBsaWJyYXJ5IGZpbGUgdG8gcHJvY2VzcyBlbXB0eSBpbnB1dCBmaWxlcworIworIyBBcm5vbGQgUm9iYmlucywgYXJub2xkQHNrZWV2ZS5jb20sIFB1YmxpYyBEb21haW4KKyMgSnVuZSAyMDAzCisKK0JFR0lOIHsgQXJnaW5kID0gMCB9CisKK0FSR0lORCA+IEFyZ2luZCArIDEgeworICAgIGZvciAoQXJnaW5kKys7IEFyZ2luZCA8IEFSR0lORDsgQXJnaW5kKyspCisgICAgICAgIHplcm9maWxlKEFSR1ZbQXJnaW5kXSwgQXJnaW5kKQorfQorCitBUkdJTkQgIT0gQXJnaW5kIHsgQXJnaW5kID0gQVJHSU5EIH0KKworRU5EIHsKKyAgICBpZiAoQVJHSU5EID4gQXJnaW5kKQorICAgICAgICBmb3IgKEFyZ2luZCsrOyBBcmdpbmQgPD0gQVJHSU5EOyBBcmdpbmQrKykKKyAgICAgICAgICAgIHplcm9maWxlKEFSR1ZbQXJnaW5kXSwgQXJnaW5kKQorfQpkaWZmIC0tZ2l0IGEvc2hhcmUvYnVpbGRyb290L3Rvb2xjaGFpbmZpbGUuY21ha2UgYi9zaGFyZS9idWlsZHJvb3QvdG9vbGNoYWluZmlsZS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTc5NTk2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvYnVpbGRyb290L3Rvb2xjaGFpbmZpbGUuY21ha2UKQEAgLTAsMCArMSwxMiBAQAorc2V0KENNQUtFX1NZU1RFTV9OQU1FIExpbnV4KQorc2V0KENNQUtFX0NfQ09NUElMRVIgL3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyL2Jpbi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLWdjYykKK3NldChDTUFLRV9DWFhfQ09NUElMRVIgL3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyL2Jpbi9hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpLWcrKykKK3NldChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9ICAtcGlwZSAtTzIgLWcyIC1EX0xBUkdFRklMRV9TT1VSQ0UgLURfTEFSR0VGSUxFNjRfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiIENBQ0hFIFNUUklORyAiQnVpbGRyb290IENGTEFHUyIgRk9SQ0UpCitzZXQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9GTEFHU30gIC1waXBlIC1PMiAtZzIgLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCIgQ0FDSEUgU1RSSU5HICJCdWlsZHJvb3QgQ1hYRkxBR1MiIEZPUkNFKQorc2V0KENNQUtFX0lOU1RBTExfU09fTk9fRVhFIDApCitzZXQoQ01BS0VfUFJPR1JBTV9QQVRIICIvdXNyL2xvY2FsL2dvb2dsZS9hcGVud2Fyci9hdGhlbmEvb3V0Lm1zdGMvaG9zdC91c3IvYmluIikKK3NldChDTUFLRV9GSU5EX1JPT1RfUEFUSCAiL3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdCIpCitzZXQoQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9QUk9HUkFNIE5FVkVSKQorc2V0KENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfTElCUkFSWSBPTkxZKQorc2V0KENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfSU5DTFVERSBPTkxZKQorc2V0KEVOVntQS0dfQ09ORklHX1NZU1JPT1RfRElSfSAiL3Vzci9sb2NhbC9nb29nbGUvYXBlbndhcnIvYXRoZW5hL291dC5tc3RjL2hvc3QvdXNyL2FybS11bmtub3duLWxpbnV4LWdudWVhYmkvc3lzcm9vdCIpCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvYXV0b21ha2UvYW1oZWxsby0xLjAudGFyLmd6IGIvc2hhcmUvZG9jL2F1dG9tYWtlL2FtaGVsbG8tMS4wLnRhci5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGRhNWUzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2F1dG9tYWtlL2FtaGVsbG8tMS4wLnRhci5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvY3QtbmctMS4xMy40LzAgLSBUYWJsZSBvZiBjb250ZW50LnR4dCBiL3NoYXJlL2RvYy9jdC1uZy0xLjEzLjQvMCAtIFRhYmxlIG9mIGNvbnRlbnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZWJiOGQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvY3QtbmctMS4xMy40LzAgLSBUYWJsZSBvZiBjb250ZW50LnR4dApAQCAtMCwwICsxLDcyIEBACitGaWxlLi4uLi4uLi4uOiAwIC0gVGFibGUgb2YgY29udGVudC50eHQKK0NvcHlyaWdodC4uLi46IChDKSAyMDEwIFlhbm4gRS4gTU9SSU4gPHlhbm4ubW9yaW4uMTk5OEBhbmNpZW5zLmVuaWIuZnI+CitMaWNlbnNlLi4uLi4uOiBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uIFNoYXJlIEFsaWtlIChDQy1ieS1zYSksIHYyLjUKKworCitUYWJsZSBPZiBDb250ZW50ICAvCitfX19fX19fX19fX19fX19fXy8KKworCisxLSBJbnRyb2R1Y3Rpb24KKyAgICAtIEhpc3RvcnkKKyAgICAtIFJlZmVycmluZyB0byBjcm9zc3Rvb2wtTkcKKworMi0gSW5zdGFsbGluZyBjcm9zc3Rvb2wtTkcKKyAgICAtIEluc3RhbGwgbWV0aG9kCisgICAgLSBUaGUgaGFja2VyJ3Mgd2F5CisgICAgLSBQcmVwYXJpbmcgZm9yIHBhY2thZ2luZworICAgIC0gU2hlbGwgY29tcGxldGlvbgorICAgIC0gQ29udHJpYnV0ZWQgY29kZQorCiszLSBDb25maWd1cmluZyBhIHRvb2xjaGFpbgorICAgIC0gSW50ZXJlc3RpbmcgY29uZmlnIG9wdGlvbnMKKyAgICAtIFJlLWJ1aWxkaW5nIGFuIGV4aXN0aW5nIHRvb2xjaGFpbgorICAgIC0gVXNpbmcgYXMgYSBiYWNrZW5kIGZvciBhIGJ1aWxkLXN5c3RlbQorCis0LSBCdWlsZGluZyB0aGUgdG9vbGNoYWluCisgICAgLSBTdG9wcGluZyBhbmQgcmVzdGFydGluZyBhIGJ1aWxkCisgICAgLSBUZXN0aW5nIGFsbCB0b29sY2hhaW5zIGF0IG9uY2UKKyAgICAtIE92ZXJyaWRpbmcgdGhlIG51bWJlciBvZiAvLyBqb2JzCisgICAgLSBOb3RlIG9uIC8vIGpvYnMKKyAgICAtIFRvb2xzIHdyYXBwZXIKKworNS0gVXNpbmcgdGhlIHRvb2xjaGFpbgorICAgIC0gVGhlICdwb3B1bGF0ZScgc2NyaXB0CisKKzYtIFRvb2xjaGFpbiB0eXBlcworICAgIC0gU2VlbWluZ2x5LW5hdGl2ZSB0b29sY2hhaW5zCisKKzctIENvbnRyaWJ1dGluZworICAgIC0gU2VuZGluZyBhIGJ1ZyByZXBvcnQKKyAgICAtIFNlbmRpbmcgcGF0Y2hlcworCis4LSBJbnRlcm5hbHMKKyAgICAtIE1ha2VmaWxlIGZyb250LWVuZAorICAgIC0gS2NvbmZpZyBwYXJzZXIKKyAgICAtIEFyY2hpdGVjdHVyZS1zcGVjaWZpYworICAgIC0gQWRkaW5nIGEgbmV3IHZlcnNpb24gb2YgYSBjb21wb25lbnQKKyAgICAtIEJ1aWxkIHNjcmlwdHMKKworOSAtIEhvdyBpcyBhIHRvb2xjaGFpbiBjb25zdHJ1Y3RlZD8KKyAgICAtIEkgd2FudCBhIGNyb3NzLWNvbXBpbGVyISBXaGF0IGlzIHRoaXMgdG9vbGNoYWluIHlvdSdyZSBzcGVha2luZyBhYm91dD8KKyAgICAtIFNvLCB3aGF0IGFyZSB0aG9zZSBjb21wb25lbnRzIGluIGEgdG9vbGNoYWluPworICAgIC0gQW5kIG5vdywgaG93IGRvIGFsbCB0aGVzZSBjb21wb25lbnRzIGNoYWluZWQgdG9nZXRoZXI/CisgICAgLSBTbyB0aGUgbGlzdCBpcyBjb21wbGV0ZS4gQnV0IHdoeSBkb2VzIGNyb3NzdG9vbC1ORyBoYXZlIG1vcmUgc3RlcHM/CisKK0EtIENyZWRpdHMKKworQi0gS25vd24gaXNzdWVzCisgICAgLSBnY2MgaXMgbm90IGZvdW5kLCBhbHRob3VnaCBJICpkbyogaGF2ZSBnY2MgaW5zdGFsbGVkCisgICAgLSBUaGUgZXh0cmFjdCBhbmQvb3IgcGF0aCBzdGVwcyBmYWlsIHVuZGVyIEN5Z3dpbgorICAgIC0gdUNsaWJjIGZhaWxzIHRvIGJ1aWxkIHVuZGVyIEN5Z3dpbgorICAgIC0gT24gNjQtYml0IGJ1aWxkIHN5c3RlbXMsIHRoZSBnbGliYyAocG9zc2libHkgZWdsaWJjIHRvbykgYnVpbGQKKyAgICAgIGZhaWxzIGZvciA2NC1iaXQgdGFyZ2V0cywgYmVjYXVzZSBpdCBjYW4gbm90IGZpbmQgbGliZ2NjCisgICAgLSBsaWJ0b29sLm00OiBlcnJvcjogcHJvYmxlbSBjb21waWxpbmcgRkMgdGVzdCBwcm9ncmFtCisgICAgLSB1bmFibGUgdG8gZGV0ZWN0IHRoZSBleGNlcHRpb24gbW9kZWwKKyAgICAtIGNvbmZpZ3VyZTogZXJyb3I6IGZvcmNlZCB1bndpbmQgc3VwcG9ydCBpcyByZXF1aXJlZAorICAgIC0gZ2xpYmMgc3RhcnQgZmlsZXMgYW5kIGhlYWRlcnMgZmFpbCB3aXRoOiBbL3Vzci9pbmNsdWRlL2xpbWl0cy5oXSBFcnJvciAxCisKK0MtIE1pc2MuIHR1dG9yaWFscworICAgIC0gVXNpbmcgY3Jvc3N0b29sLU5HIG9uIEZyZWVCU0QgKGFuZCBvdGhlciAqQlNEKQorICAgIC0gVXNpbmcgY3Jvc3N0b29sLU5HIG9uIE1hY09TLVgKKyAgICAtIFVzaW5nIE1lcmN1cmlhbCB0byBoYWNrIGNyb3NzdG9vbC1ORwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2N0LW5nLTEuMTMuNC8xIC0gSW50cm9kdWN0aW9uLnR4dCBiL3NoYXJlL2RvYy9jdC1uZy0xLjEzLjQvMSAtIEludHJvZHVjdGlvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU4NzBhYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9jdC1uZy0xLjEzLjQvMSAtIEludHJvZHVjdGlvbi50eHQKQEAgLTAsMCArMSwxMDggQEAKK0ZpbGUuLi4uLi4uLi46IDEgLSBJbnRyb2R1Y3Rpb24udHh0CitDb3B5cmlnaHQuLi4uOiAoQykgMjAxMCBZYW5uIEUuIE1PUklOIDx5YW5uLm1vcmluLjE5OThAYW5jaWVucy5lbmliLmZyPgorTGljZW5zZS4uLi4uLjogQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiBTaGFyZSBBbGlrZSAoQ0MtYnktc2EpLCB2Mi41CisKKworSW50cm9kdWN0aW9uICAvCitfX19fX19fX19fX19fLworCisKK2Nyb3NzdG9vbC1ORyBhaW1zIGF0IGJ1aWxkaW5nIHRvb2xjaGFpbnMuIFRvb2xjaGFpbnMgYXJlIGFuIGVzc2VudGlhbCBjb21wb25lbnQKK2luIGEgc29mdHdhcmUgZGV2ZWxvcG1lbnQgcHJvamVjdC4gSXQgd2lsbCBjb21waWxlLCBhc3NlbWJsZSBhbmQgbGluayB0aGUgY29kZQordGhhdCBpcyBiZWluZyBkZXZlbG9wZWQuIFNvbWUgcGllY2VzIG9mIHRoZSB0b29sY2hhaW4gd2lsbCBldmVudHVhbGx5IGVuZCB1cAoraW4gdGhlIHJlc3VsdGluZyBiaW5hcnkvaWVzOiBzdGF0aWMgbGlicmFyaWVzIGFyZSBidXQgYW4gZXhhbXBsZS4KKworU28sIGEgdG9vbGNoYWluIGlzIGEgdmVyeSBzZW5zaXRpdmUgcGllY2Ugb2Ygc29mdHdhcmUsIGFzIGFueSBidWcgaW4gb25lIG9mIHRoZQorY29tcG9uZW50cywgb3IgYSBwb29ybHkgY29uZmlndXJlZCBjb21wb25lbnQsIGNhbiBsZWFkIHRvIGV4ZWN1dGlvbiBwcm9ibGVtcywKK3JhbmdpbmcgZnJvbSBwb29yIHBlcmZvcm1hbmNlLCB0byBhcHBsaWNhdGlvbnMgZW5kaW5nIHVuZXhwZWN0ZWRseSwgdG8KK21pcy1iZWhhdmluZyBzb2Z0d2FyZSAod2hpY2ggbW9yZSB0aGFuIG9mdGVuIGlzIGhhcmQgdG8gZGV0ZWN0KSwgdG8gaGFyZHdhcmUKK2RhbWFnZSwgb3IgZXZlbiB0byBodW1hbiByaXNrcyAod2hpY2ggaXMgbW9yZSB0aGFuIHJlZ3JldHRhYmxlKS4KKworVG9vbGNoYWlucyBhcmUgbWFkZSBvZiBkaWZmZXJlbnQgcGllY2Ugb2Ygc29mdHdhcmUsIGVhY2ggYmVpbmcgcXVpdGUgY29tcGxleAorYW5kIHJlcXVpcmluZyBzcGVjaWFsbHkgY3JhZnRlZCBvcHRpb25zIHRvIGJ1aWxkIGFuZCB3b3JrIHNlYW1sZXNzbHkuIFRoaXMKK2lzIHVzdWFsbHkgbm90IHRoYXQgZWFzeSwgZXZlbiBpbiB0aGUgbm90LXNvLXRyaXZpYWwgY2FzZSBvZiBuYXRpdmUgdG9vbGNoYWlucy4KK1RoZSB3b3JrIHJlYWNoZXMgYSBoaWdoZXIgZGVncmVlIG9mIGNvbXBsZXhpdHkgd2hlbiBpdCBjb21lcyB0byBjcm9zcy0KK2NvbXBpbGF0aW9uLCB3aGVyZSBpdCBjYW4gYmVjb21lIHF1aXRlIGEgbmlnaHRtYXJlLi4uCisKK1NvbWUgY3Jvc3MtdG9vbGNoYWlucyBleGlzdCBvbiB0aGUgaW50ZXJuZXQsIGFuZCBjYW4gYmUgdXNlZCBmb3IgZ2VuZXJhbAorZGV2ZWxvcG1lbnQsIGJ1dCB0aGV5IGhhdmUgYSBudW1iZXIgb2YgbGltaXRhdGlvbnM6CisgIC0gdGhleSBjYW4gYmUgZ2VuZXJhbCBwdXJwb3NlLCBpbiB0aGF0IHRoZXkgYXJlIGNvbmZpZ3VyZWQgZm9yIHRoZSBtYWpvcml0eToKKyAgICBubyBvcHRpbWlzYXRpb24gZm9yIHlvdXIgc3BlY2lmaWMgdGFyZ2V0LAorICAtIHRoZXkgY2FuIGJlIHByZXBhcmVkIGZvciBhIHNwZWNpZmljIHRhcmdldCBhbmQgdGh1cyBhcmUgbm90IGVhc3kgdG8gdXNlLAorICAgIG5vciBvcHRpbWlzZWQgZm9yLCBvciBldmVuIHN1cHBvcnRpbmcgeW91ciB0YXJnZXQsCisgIC0gdGhleSBvZnRlbiBhcmUgdXNpbmcgYWdpbmcgY29tcG9uZW50cyAoY29tcGlsZXIsIEMgbGlicmFyeSwgZXRjLi4uKSBub3QKKyAgICBzdXBwb3J0aW5nIHNwZWNpYWwgZmVhdHVyZXMgb2YgeW91ciBzaGlueSBuZXcgcHJvY2Vzc29yOworT24gdGhlIG90aGVyIHNpZGUsIHRoZXNlIHRvb2xjaGFpbiBvZmZlciBzb21lIGFkdmFudGFnZXM6CisgIC0gdGhleSBhcmUgcmVhZHkgdG8gdXNlIGFuZCBxdWl0ZSBlYXN5IHRvIGluc3RhbGwgYW5kIHNldHVwLAorICAtIHRoZXkgYXJlIHByb3ZlbiBpZiB1c2VkIGJ5IGEgd2lkZSBjb21tdW5pdHkuCisKK0J1dCBvbmNlIHlvdSB3YW50IHRvIGdldCBhbGwgdGhlIGp1aWNlIG91dCBvZiB5b3VyIHNwZWNpZmljIGhhcmR3YXJlLCB5b3Ugd2lsbAord2FudCB0byBidWlsZCB5b3VyIG93biB0b29sY2hhaW4uIFRoaXMgaXMgd2hlcmUgY3Jvc3N0b29sLU5HIGNvbWVzIGludG8gcGxheS4KKworVGhlcmUgYXJlIGFsc28gYSBudW1iZXIgb2YgdG9vbHMgdGhhdCBidWlsZCB0b29sY2hhaW5zIGZvciBzcGVjaWZpYyBuZWVkcywKK3doaWNoIGFyZSBub3QgcmVhbGx5IHNjYWxhYmxlLiBFeGFtcGxlcyBhcmU6CisgIC0gYnVpbGRyb290IChidWlsZHJvb3QudWNsaWJjLm9yZykgd2hvc2UgbWFpbiBwdXJwb3NlIGlzIHRvIGJ1aWxkIHJvb3QgZmlsZQorICAgIHN5c3RlbXMsIGhlbmNlIHRoZSBuYW1lLiBCdXQgb25jZSB5b3UgaGF2ZSB5b3VyIHRvb2xjaGFpbiB3aXRoIGJ1aWxkcm9vdCwKKyAgICBwYXJ0IG9mIGl0IGlzIGluc3RhbGxlZCBpbiB0aGUgcm9vdC10by1iZSwgc28gaWYgeW91IHdhbnQgdG8gYnVpbGQgYSB3aG9sZQorICAgIG5ldyByb290LCB5b3UgZWl0aGVyIGhhdmUgdG8gc2F2ZSB0aGUgZXhpc3Rpbmcgb25lIGFzIGEgdGVtcGxhdGUgYW5kCisgICAgcmVzdG9yZSBpdCBsYXRlciwgb3IgcmVzdGFydCBhZ2FpbiBmcm9tIHNjcmF0Y2guIFRoaXMgaXMgbm90IGNvbnZlbmllbnQsCisgIC0gcHR4ZGlzdCAod3d3LnBlbmd1dHJvbml4LmRlL3NvZnR3YXJlL3B0eGRpc3QpLCB3aG9zZSBwdXJwb3NlIGlzIHZlcnkKKyAgICBzaW1pbGFyIHRvIGJ1aWxkcm9vdCwKKyAgLSBvdGhlciBwcm9qZWN0cyAob3BlbmVtYmVkZGVkLm9yZyBmb3IgZXhhbXBsZSksIHdoaWNoIGFyZSBhZ2FpbiB1c2VkIHRvCisgICAgYnVpbGQgcm9vdCBmaWxlIHN5c3RlbXMuCisKK2Nyb3NzdG9vbC1ORyBpcyByZWFsbHkgdGFyZ2V0ZWQgYXQgYnVpbGRpbmcgdG9vbGNoYWlucywgYW5kIG9ubHkgdG9vbGNoYWlucy4KK0l0IGlzIHRoZW4gdXAgdG8geW91IHRvIHVzZSBpdCB0aGUgd2F5IHlvdSB3YW50LgorCisKK0hpc3RvcnkgfAorLS0tLS0tLS0rCisKK2Nyb3NzdG9vbCB3YXMgZmlyc3QgJ2NvbmNlaXZlZCcgYnkgRGFuIEtlZ2VsLCB3aG8gb2ZmZXJlZCBpdCB0byB0aGUgY29tbXVuaXR5CithcyBhIHNldCBvZiBzY3JpcHRzLCBhIHJlcG9zaXRvcnkgb2YgcGF0Y2hlcywgYW5kIHNvbWUgcHJlLWNvbmZpZ3VyZWQsIGdlbmVyYWwKK3B1cnBvc2Ugc2V0dXAgZmlsZXMgdG8gYmUgdXNlZCB0byBjb25maWd1cmUgY3Jvc3N0b29sLiBUaGlzIGlzIGF2YWlsYWJsZSBhdAoraHR0cDovL3d3dy5rZWdlbC5jb20vY3Jvc3N0b29sLCBhbmQgdGhlIHN1YnZlcnNpb24gcmVwb3NpdG9yeSBpcyBob3N0ZWQgb24KK2dvb2dsZSBhdCBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY3Jvc3N0b29sLy4KKworSSBvbmNlIG1hbmFnZWQgdG8gYWRkIHN1cHBvcnQgZm9yIHVDbGliYy1iYXNlZCB0b29sY2hhaW5zLCBidXQgaXQgZGlkIG5vdCBtYWtlCitpbnRvIG1haW5saW5lLCBtb3N0bHkgYmVjYXVzZSBJIGRpZG4ndCBoYXZlIHRpbWUgdG8gcG9ydCB0aGUgcGF0Y2ggZm9yd2FyZCB0bwordGhlIG5ldyB2ZXJzaW9ucywgZHVlIGluIHBhcnQgdG8gdGhlIGJpZyBlZmZvcnQgaXQgd2FzIHRha2luZy4KKworU28gSSBkZWNpZGVkIHRvIGNsZWFuIHVwIGNyb3NzdG9vbCBpbiB0aGUgc3RhdGUgaXQgd2FzLCByZS1vcmRlciB0aGUgdGhpbmdzCitpbiBwbGFjZSwgYWRkIGFwcHJvcHJpYXRlIHN1cHBvcnQgZm9yIHdoYXQgSSBuZWVkZWQsIHRoYXQgaXMgdUNsaWJjIHN1cHBvcnQKK2FuZCBhIG1lbnUtZHJpdmVuIGNvbmZpZ3VyYXRpb24sIG5hbWVkIHRoZSBuZXcgaW1wbGVtZW50YXRpb24gY3Jvc3N0b29sLU5HLAorKHN0YW5kaW5nIGZvciBjcm9zc3Rvb2wgTmV4dCBHZW5lcmF0aW9uLCBhcyBtYW55IG90aGVyIGNvbW11bml0eSBwcm9qZWN0cyBkbywKK2FuZCBhcyBhIHdpbmsgYXQgdGhlIFRWIHNlcmllcyAiU3RhciBUcmVrOiBUaGUgTmV4dCBHZW5lcmF0aW9uIiA7LSkgKSBhbmQKK21hZGUgaXQgYXZhaWxhYmxlIHRvIHRoZSBjb21tdW5pdHksIGluIGNhc2UgaXQgd2FzIG9mIGludGVyZXN0IHRvIGFueSBvbmUuCisKKworUmVmZXJyaW5nIHRvIGNyb3NzdG9vbC1ORyB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworVGhlIGxvbmcgbmFtZSBvZiB0aGUgcHJvamVjdCBpcyBjcm9zc3Rvb2wtTkc6CisgICogbm8gbGVhZGluZyB1cHBlcmNhc2UgKGV4Y2VwdCBhcyBmaXJzdCB3b3JkIGluIGEgc2VudGVuY2UpCisgICogY3Jvc3N0b29sIGFuZCBORyBzZXBhcmF0ZWQgd2l0aCBhIGh5cGhlbiAoZGFzaCkKKyAgKiBORyBpbiB1cHBlcmNhc2UKKworQ3Jvc3N0b29sLU5HIGNhbiBhbHNvIGJlIHJlZmVycmVkIHRvIGJ5IGl0cyBzaG9ydCBuYW1lIENULU5HOgorICAqIGFsbCBpbiB1cHBlcmNhc2UKKyAgKiBDVCBhbmQgTkcgc2VwYXJhdGVkIHdpdGggYSBoeXBoZW4gKGRhc2gpCisKK1RoZSBsb25nIG5hbWUgaXMgcHJlZmVycmVkIG92ZXIgdGhlIHNob3J0IG5hbWUsIGV4Y2VwdCBpbiBtYWlsIHN1YmplY3RzLCB3aGVyZQordGhlIHNob3J0IG5hbWUgaXMgYSBiZXR0ZXIgZml0LgorCitXaGVuIHJlZmVycmluZyB0byBhIHNwZWNpZmljIHZlcnNpb24gb2YgY3Jvc3N0b29sLU5HLCBhcHBlbmQgdGhlIHZlcnNpb24gbnVtYmVyCitlaXRoZXIgYXM6CisgICogY3Jvc3N0b29sLU5HIFguWS5aCisgICAgLSB0aGUgbG9uZyBuYW1lLCBhIHNwYWNlLCBhbmQgdGhlIHZlcnNpb24gc3RyaW5nCisgICogY3Jvc3N0b29sLW5nLVguWS5aCisgICAgLSB0aGUgbG9uZyBuYW1lIGluIGxvd2VyY2FzZSwgYSBoeXBoZW4gKGRhc2gpLCBhbmQgdGhlIHZlcnNpb24gc3RyaW5nCisgICAgLSB0aGlzIGlzIHVzZWQgdG8gbmFtZSB0aGUgcmVsZWFzZSB0YXJiYWxscworICAqIGNyb3NzdG9vbC1uZy1YLlkuWitoZ19pZAorICAgIC0gdGhlIGxvbmcgbmFtZSBpbiBsb3dlcmNhc2UsIGEgaHlwaGVuLCB0aGUgdmVyc2lvbiBzdHJpbmcsIGFuZCB0aGUgSGcgaWQKKyAgICAgIChhcyByZXR1cm5lZCBieTogY3QtbmcgdmVyc2lvbikKKyAgICAtIHRoaXMgaXMgdXNlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gcmVsZWFzZXMgYW5kIHNuYXBzaG90cworCitUaGUgZnJvbnRlbmQgdG8gY3Jvc3N0b29sLU5HIGlzIHRoZSBjb21tYW5kIGN0LW5nOgorICAqIGFsbCBpbiBsb3dlcmNhc2UKKyAgKiBjdCBhbmQgbmcgc2VwYXJhdGVkIGJ5IGEgaHlwaGVuIChkYXNoKQpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2N0LW5nLTEuMTMuNC8yIC0gSW5zdGFsbGluZyBjcm9zc3Rvb2wtTkcudHh0IGIvc2hhcmUvZG9jL2N0LW5nLTEuMTMuNC8yIC0gSW5zdGFsbGluZyBjcm9zc3Rvb2wtTkcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5OTA5ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvY3QtbmctMS4xMy40LzIgLSBJbnN0YWxsaW5nIGNyb3NzdG9vbC1ORy50eHQKQEAgLTAsMCArMSw5MyBAQAorRmlsZS4uLi4uLi4uLjogMiAtIEluc3RhbGxpbmcgY3Jvc3N0b29sLU5HLnR4dAorQ29weXJpZ2h0Li4uLjogKEMpIDIwMTAgWWFubiBFLiBNT1JJTiA8eWFubi5tb3Jpbi4xOTk4QGFuY2llbnMuZW5pYi5mcj4KK0xpY2Vuc2UuLi4uLi46IENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gU2hhcmUgQWxpa2UgKENDLWJ5LXNhKSwgdjIuNQorCisKK0luc3RhbGxpbmcgY3Jvc3N0b29sLU5HICAvCitfX19fX19fX19fX19fX19fX19fX19fX18vCisKKworVGhlcmUgYXJlIHR3byB3YXlzIHlvdSBjYW4gdXNlIGNyb3NzdG9vbC1ORzoKKyAtIGJ1aWxkIGFuZCBpbnN0YWxsIGl0LCB0aGVuIGdldCByaWQgb2YgdGhlIHNvdXJjZXMgbGlrZSB5b3UnZCBkbyBmb3IgbW9zdAorICAgcHJvZ3JhbXMsCisgLSBvciBvbmx5IGJ1aWxkIGl0IGFuZCBydW4gZnJvbSB0aGUgc291cmNlIGRpcmVjdG9yeS4KKworVGhlIGZvcm1lciBzaG91bGQgYmUgdXNlZCBpZiB5b3UgZ290IGNyb3NzdG9vbC1ORyBmcm9tIGEgcGFja2FnZWQgdGFyYmFsbCwgc2VlCisiSW5zdGFsbCBtZXRob2QiLCBiZWxvdywgd2hpbGUgdGhlIGxhdHRlciBpcyBtb3N0IHVzZWZ1bCBmb3IgZGV2ZWxvcGVycyB0aGF0Cit1c2UgYSBjbG9uZSBvZiB0aGUgcmVwb3NpdG9yeSwgYW5kIHdhbnQgdG8gc3VibWl0IHBhdGNoZXMsIHNlZSAiVGhlIEhhY2tlcidzCit3YXkiLCBiZWxvdy4KKworCitJbnN0YWxsIG1ldGhvZCB8CistLS0tLS0tLS0tLS0tLS0rCisKK0lmIHlvdSBnbyBmb3IgdGhlIGluc3RhbGwsIHRoZW4geW91IGp1c3QgZm9sbG93IHRoZSBjbGFzc2ljYWwsIGJ1dCB5ZXQgZWFzeQorLi9jb25maWd1cmUgd2F5OgorICAuL2NvbmZpZ3VyZSAtLXByZWZpeD0vc29tZS9wbGFjZQorICBtYWtlCisgIG1ha2UgaW5zdGFsbAorICBleHBvcnQgUEFUSD0iJHtQQVRIfTovc29tZS9wbGFjZS9iaW4iCisKK1lvdSBjYW4gdGhlbiBnZXQgcmlkIG9mIGNyb3NzdG9vbC1ORyBzb3VyY2UuIE5leHQgY3JlYXRlIGEgZGlyZWN0b3J5IHRvIHNlcnZlCithcyBhIHdvcmtpbmcgcGxhY2UsIGNkIGluIHRoZXJlIGFuZCBydW46CisgIGN0LW5nIGhlbHAKKworU2VlIGJlbG93IGZvciBjb21wbGV0ZSB1c2FnZS4KKworCitUaGUgSGFja2VyJ3Mgd2F5IHwKKy0tLS0tLS0tLS0tLS0tLS0tKworCitJZiB5b3UgZ28gdGhlIGhhY2tlcidzIHdheSwgdGhlbiB0aGUgdXNhZ2UgaXMgYSBiaXQgZGlmZmVyZW50LCBhbHRob3VnaCB2ZXJ5CitzaW1wbGU6CisgIC4vY29uZmlndXJlIC0tbG9jYWwKKyAgbWFrZQorCitOb3csICpkbyBub3QqIHJlbW92ZSBjcm9zc3Rvb2wtTkcgc291cmNlcy4gVGhleSBhcmUgbmVlZGVkIHRvIHJ1biBjcm9zc3Rvb2wtTkchCitTdGF5IGluIHRoZSBkaXJlY3RvcnkgaG9sZGluZyB0aGUgc291cmNlcywgYW5kIHJ1bjoKKyAgLi9jdC1uZyBoZWxwCisKK1NlZSBiZWxvdyBmb3IgY29tcGxldGUgdXNhZ2UuCisKK05vdywgcHJvdmlkZWQgeW91IHVzZWQgYSBjbG9uZSBvZiB0aGUgcmVwb3NpdG9yeSwgeW91IGNhbiBzZW5kIG1lIHlvdXIgY2hhbmdlcy4KK1NlZSB0aGUgc2VjdGlvbiB0aXRsZWQgQ09OVFJJQlVUSU5HLCBiZWxvdywgZm9yIGhvdyB0byBzdWJtaXQgY2hhbmdlcy4KKworCitQcmVwYXJpbmcgZm9yIHBhY2thZ2luZyB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK0lmIHlvdSBwbGFuIG9uIHBhY2thZ2luZyBjcm9zc3Rvb2wtTkcsIHlvdSBzdXJlbHkgZG9uJ3Qgd2FudCB0byBpbnN0YWxsIGl0CitpbiB5b3VyIHJvb3QgZmlsZSBzeXN0ZW0uIFRoZSBpbnN0YWxsIHByb2NlZHVyZSBvZiBjcm9zc3Rvb2wtTkcgaG9ub3JzIHRoZQorREVTVERJUiB2YXJpYWJsZToKKworICAuL2NvbmZpZ3VyZSAtLXByZWZpeD0vdXNyCisgIG1ha2UKKyAgbWFrZSBERVNURElSPS9wYWNrYWdpbmcvcGxhY2UgaW5zdGFsbAorCisKK1NoZWxsIGNvbXBsZXRpb24gfAorLS0tLS0tLS0tLS0tLS0tLS0rCisKK2Nyb3NzdG9vbC1ORyBjb21lcyB3aXRoIGEgc2hlbGwgc2NyaXB0IGZyYWdtZW50IHRoYXQgZGVmaW5lcyBiYXNoLWNvbXBhdGlibGUKK2NvbXBsZXRpb24uIFRoYXQgc2hlbGwgZnJhZ21lbnQgaXMgY3VycmVudGx5IG5vdCBpbnN0YWxsZWQgYXV0b21hdGljYWxseSwgYnV0Cit0aGlzIGlzIHBsYW5uZWQuCisKK1RvIGluc3RhbGwgdGhlIHNoZWxsIHNjcmlwdCBmcmFnbWVudCwgeW91IGhhdmUgdHdvIG9wdGlvbnM6CisgLSBpbnN0YWxsIHN5c3RlbS13aWRlLCBtb3N0IHByb2JhYmx5IGJ5IGNvcHlpbmcgY3QtbmcuY29tcCBpbnRvCisgICAvZXRjL2Jhc2hfY29tcGxldGlvbi5kLworIC0gaW5zdGFsbCBmb3IgYSBzaW5nbGUgdXNlciwgYnkgY29weWluZyBjdC1uZy5jb21wIGludG8gJHtIT01FfS8gYW5kCisgICBzb3VyY2luZyB0aGlzIGZpbGUgZnJvbSB5b3VyICR7SE9NRX0vLmJhc2hyYworCisKK0NvbnRyaWJ1dGVkIGNvZGUgfAorLS0tLS0tLS0tLS0tLS0tLS0rCisKK1NvbWUgcGVvcGxlIGNvbnRyaWJ1dGVkIGNvZGUgdGhhdCBjb3VsZG4ndCBnZXQgbWVyZ2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuIFRoaXMKK2NvZGUgaXMgYXZhaWxhYmxlIGFzIGx6bWEtY29tcHJlc3NlZCBwYXRjaGVzLCBpbiB0aGUgY29udHJpYi8gc3ViLWRpcmVjdG9yeS4KK1RoZXNlIHBhdGNoZXMgYXJlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNvdXJjZSBvZiBjcm9zc3Rvb2wtTkcsIHByaW9yIHRvCitpbnN0YWxsaW5nLCB1c2luZyBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nOgorICBsemNhdCBjb250cmliL2Zvb2Jhci5wYXRjaC5sem1hIHxwYXRjaCAtcDEKKworVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYSBwYXJ0aWN1bGFyIGNvbnRyaWJ1dGlvbiBhcHBsaWVzIHRvIHRoZSBjdXJyZW50Cit2ZXJzaW9uIG9mIGNyb3NzdG9vbC1uZywgb3IgdGhhdCBpdCB3aWxsIHdvcmsgYXQgYWxsLiBVc2UgY29udHJpYnV0aW9ucyBhdAoreW91ciBvd24gcmlzay4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9jdC1uZy0xLjEzLjQvMyAtIENvbmZpZ3VyaW5nIGEgdG9vbGNoYWluLnR4dCBiL3NoYXJlL2RvYy9jdC1uZy0xLjEzLjQvMyAtIENvbmZpZ3VyaW5nIGEgdG9vbGNoYWluLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWI2MTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2N0LW5nLTEuMTMuNC8zIC0gQ29uZmlndXJpbmcgYSB0b29sY2hhaW4udHh0CkBAIC0wLDAgKzEsMTMzIEBACitGaWxlLi4uLi4uLi4uOiAzIC0gQ29uZmlndXJpbmcgYSB0b29sY2hhaW4udHh0CitDb3B5cmlnaHQuLi4uOiAoQykgMjAxMCBZYW5uIEUuIE1PUklOIDx5YW5uLm1vcmluLjE5OThAYW5jaWVucy5lbmliLmZyPgorTGljZW5zZS4uLi4uLjogQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiBTaGFyZSBBbGlrZSAoQ0MtYnktc2EpLCB2Mi41CisKKworCitDb25maWd1cmluZyBjcm9zc3Rvb2wtTkcgIC8KK19fX19fX19fX19fX19fX19fX19fX19fX18vCisKKworY3Jvc3N0b29sLU5HIGlzIGNvbmZpZ3VyZWQgd2l0aCBhIGNvbmZpZ3VyYXRvciBwcmVzZW50aW5nIGEgbWVudS1zdHJ1Y3R1cmVkIHNldAorb2Ygb3B0aW9ucy4gVGhlc2Ugb3B0aW9ucyBsZXQgeW91IHNwZWNpZnkgdGhlIHdheSB5b3Ugd2FudCB5b3VyIHRvb2xjaGFpbgorYnVpbHQsIHdoZXJlIHlvdSB3YW50IGl0IGluc3RhbGxlZCwgd2hhdCBhcmNoaXRlY3R1cmUgYW5kIHNwZWNpZmljIHByb2Nlc3NvciBpdAord2lsbCBzdXBwb3J0LCB0aGUgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50cyB5b3Ugd2FudCB0byB1c2UsIGV0Yy4uLiBUaGUKK3ZhbHVlIGZvciB0aG9zZSBvcHRpb25zIGFyZSB0aGVuIHN0b3JlZCBpbiBhIGNvbmZpZ3VyYXRpb24gZmlsZS4KKworVGhlIGNvbmZpZ3VyYXRvciB3b3JrcyB0aGUgc2FtZSB3YXkgeW91IGNvbmZpZ3VyZSB5b3VyIExpbnV4IGtlcm5lbC4gSXQgaXMKK2Fzc3VtZWQgeW91IG5vdyBob3cgdG8gaGFuZGxlIHRoaXMuCisKK1RvIGVudGVyIHRoZSBtZW51LCB0eXBlOgorICBjdC1uZyBtZW51Y29uZmlnCisKK0FsbW9zdCBldmVyeSBjb25maWcgaXRlbSBoYXMgYSBoZWxwIGVudHJ5LiBSZWFkIHRoZW0gY2FyZWZ1bGx5LgorCitTdHJpbmcgYW5kIG51bWJlciBvcHRpb25zIGNhbiByZWZlciB0byBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIEluIHN1Y2ggYSBjYXNlLAoreW91IG11c3QgdXNlIHRoZSBzaGVsbCBzeW50YXg6ICR7VkFSfS4gWW91IHNoYWxsIG5laXRoZXIgc2luZ2xlLSBub3IgZG91YmxlLQorcXVvdGUgdGhlIHN0cmluZy9udW1iZXIgb3B0aW9ucy4KKworVGhlcmUgYXJlIHRocmVlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGFyZSBjb21wdXRlZCBieSBjcm9zc3Rvb2wtTkcsIGFuZAordGhhdCB5b3UgY2FuIHVzZToKKworQ1RfVEFSR0VUOgorICBJdCByZXByZXNlbnRzIHRoZSB0YXJnZXQgdHVwbGUgeW91IGFyZSBidWlsZGluZyBmb3IuIFlvdSBjYW4gdXNlIGl0IGZvcgorICBleGFtcGxlIGluIHRoZSBpbnN0YWxsYXRpb24vcHJlZml4IGRpcmVjdG9yeSwgc3VjaCBhczoKKyAgICAvb3B0L3gtdG9vbHMvJHtDVF9UQVJHRVR9CisKK0NUX1RPUF9ESVI6CisgIFRoZSB0b3AgZGlyZWN0b3J5IHdoZXJlIGNyb3NzdG9vbC1ORyBpcyBydW5uaW5nLiBZb3Ugc2hvdWxkbid0IG5lZWQgaXQgaW4KKyAgbW9zdCBjYXNlcy4gVGhlcmUgaXMgb25lIGNhc2Ugd2hlcmUgeW91IG1heSBuZWVkIGl0OiBpZiB5b3UgaGF2ZSBsb2NhbAorICBwYXRjaGVzIGFuZCB5b3Ugc3RvcmUgdGhlbSBpbiB5b3VyIHJ1bm5pbmcgZGlyZWN0b3J5LCB5b3UgY2FuIHJlZmVyIHRvIHRoZW0KKyAgYnkgdXNpbmcgQ1RfVE9QX0RJUiwgc3VjaCBhczoKKyAgICAke0NUX1RPUF9ESVJ9L3BhdGNoZXMubXlwcm9qZWN0CisKK0NUX1ZFUlNJT046CisgIFRoZSB2ZXJzaW9uIG9mIGNyb3NzdG9vbC1ORyB5b3UgYXJlIHVzaW5nLiBOb3QgbXVjaCB1c2UgZm9yIHlvdSwgYnV0IGl0J3MKKyAgdGhlcmUgaWYgeW91IG5lZWQgaXQuCisKKworSW50ZXJlc3RpbmcgY29uZmlnIG9wdGlvbnMgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitDVF9MT0NBTF9UQVJCQUxMU19ESVI6CisgIElmIHlvdSBhbHJlYWR5IGhhdmUgc29tZSB0YXJiYWxscyBpbiBhIGRpcmVjdG9yeSwgZW50ZXIgaXQgaGVyZS4gVGhhdCB3aWxsCisgIHNwZWVkIHVwIHRoZSByZXRyaWV2aW5nIHBoYXNlLCB3aGVyZSBjcm9zc3Rvb2wtTkcgd291bGQgb3RoZXJ3aXNlIGRvd25sb2FkCisgIHRob3NlIHRhcmJhbGxzLgorCitDVF9QUkVGSVhfRElSOgorICBUaGlzIGlzIHdoZXJlIHRoZSB0b29sY2hhaW4gd2lsbCBiZSBpbnN0YWxsZWQgaW4gKGFuZCBmb3Igbm93LCB3aGVyZSBpdAorICB3aWxsIHJ1biBmcm9tKS4gQ29tbW9uIHVzZSBpcyB0byBhZGQgdGhlIHRhcmdldCB0dXBsZSBpbiB0aGUgZGlyZWN0b3J5CisgIHBhdGgsIHN1Y2ggYXMgKHNlZSBhYm92ZSk6CisgICAgL29wdC94LXRvb2xzLyR7Q1RfVEFSR0VUfQorCitDVF9UQVJHRVRfVkVORE9SOgorICBBbiBpZGVudGlmaWVyIGZvciB5b3VyIHRvb2xjaGFpbiwgd2lsbCB0YWtlIHBsYWNlIGluIHRoZSB2ZW5kb3IgcGFydCBvZiB0aGUKKyAgdGFyZ2V0IHR1cGxlLiBJdCBzaGFsbCAqbm90KiBjb250YWluIHNwYWNlcyBvciBkYXNoZXMuIFVzdWFsbHksIGtlZXAgaXQKKyAgdG8gYSBvbmUtd29yZCBzdHJpbmcsIG9yIHVzZSB1bmRlcnNjb3JlcyB0byBzZXBhcmF0ZSB3b3JkcyBpZiB5b3UgbmVlZC4KKyAgQXZvaWQgZG90cywgY29tbWFzLCBhbmQgc3BlY2lhbCBjaGFyYWN0ZXJzLgorCitDVF9UQVJHRVRfQUxJQVM6CisgIEFuIGFsaWFzIGZvciB0aGUgdG9vbGNoYWluLiBJdCB3aWxsIGJlIHVzZWQgYXMgYSBwcmVmaXggdG8gdGhlIHRvb2xjaGFpbgorICB0b29scy4gRm9yIGV4YW1wbGUsIHlvdSB3aWxsIGhhdmUgJHtDVF9UQVJHRVRfQUxJQVN9LWdjYworCitBbHNvLCBpZiB5b3UgdGhpbmsgeW91IGRvbid0IHNlZSBlbm91Z2ggdmVyc2lvbnMsIHlvdSBjYW4gdHJ5IHRvIGVuYWJsZSBvbmUgb2YKK3Rob3NlOgorCitDVF9PQlNPTEVURToKKyAgU2hvdyBvYnNvbGV0ZSB2ZXJzaW9ucyBvciB0b29scy4gTW9zdCBvZiB0aGUgdGltZSwgeW91IGRvbid0IHdhbnQgdG8gYmFzZQorICB5b3VyIHRvb2xjaGFpbiBvbiB0b28gb2xkIGEgdmVyc2lvbiAob2YgZ2NjLCBmb3IgZXhhbXBsZSkuIEJ1dCBhdCB0aW1lcywgaXQKKyAgY2FuIGNvbWUgaGFuZHkgdG8gdXNlIHN1Y2ggYW4gb2xkIHZlcnNpb24gZm9yIHJlZ3Jlc3Npb24gdGVzdHMuIFRob3NlIG9sZAorICB2ZXJzaW9ucyBhcmUgaGlkZGVuIGJlaGluZCBDVF9PQlNPTEVURS4gVGhvc2UgdmVyc2lvbnMgKG9yIGZlYXR1cmVzKSBhcmUgc28KKyAgbWFya2VkIGJlY2F1c2UgbWFpbnRhaW5pbmcgc3VwcG9ydCBmb3IgdGhvc2UgaW4gY3Jvc3N0b29sLU5HIHdvdWxkIGJlIHRvbworICBjb3N0bHksIHRpbWUtd2lzZSwgYW5kIHRpbWUgaXMgZGVhci4KKworQ1RfRVhQRVJJTUVOVEFMOgorICBTaG93IGV4cGVyaW1lbnRhbCB2ZXJzaW9ucyBvciB0b29scy4gQWdhaW4sIHlvdSBtaWdodCBub3Qgd2FudCB0byBiYXNlIHlvdXIKKyAgdG9vbGNoYWluIG9uIHRvbyByZWNlbnQgdG9vbHMgKGVnLiBnY2MpIGZvciBwcm9kdWN0aW9uLiBCdXQgaWYgeW91IG5lZWQgYQorICBmZWF0dXJlIHByZXNlbnQgb25seSBpbiBhIHJlY2VudCB2ZXJzaW9uLCBvciBhIG5ldyB0b29sLCB5b3UgY2FuIGZpbmQgdGhlbQorICBoaWRkZW4gYmVoaW5kIENUX0VYUEVSSU1FTlRBTC4gVGhvc2UgdmVyc2lvbnMgKG9yIGZlYXR1cmVzKSBkaWQgbm90ICh5ZXQpCisgIHJlY2VpdmUgdGhvcm91Z2ggdGVzdGluZyBpbiBjcm9zc3Rvb2wtTkcsIGFuZC9vciBhcmUgbm90IG1hdHVyZSBlbm91Z2ggdG8KKyAgYmUgYmxpbmRseSB0cnVzdGVkLgorCisKK1JlLWJ1aWxkaW5nIGFuIGV4aXN0aW5nIHRvb2xjaGFpbiB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitJZiB5b3UgaGF2ZSBhbiBleGlzdGluZyB0b29sY2hhaW4sIHlvdSBjYW4gcmUtdXNlIHRoZSBvcHRpb25zIHVzZWQgdG8gYnVpbGQgaXQKK3RvIGNyZWF0ZSBhIG5ldyB0b29sY2hhaW4uIFRoYXQgbmVlZHMgYSB2ZXJ5IGxpdHRsZSBiaXQgb2YgZWZmb3J0IG9uIHlvdXIgc2lkZQorYnV0IGlzIHF1aXRlIGVhc3kuIFRoZSBvcHRpb25zIHRvIGJ1aWxkIGEgdG9vbGNoYWluIGFyZSBzYXZlZCB3aXRoIHRoZQordG9vbGNoYWluLCBhbmQgeW91IGNhbiByZXRyaWV2ZSB0aGlzIGNvbmZpZ3VyYXRpb24gYnkgcnVubmluZzoKKyAgJHtDVF9UQVJHRVR9LWN0LW5nLmNvbmZpZworCitBbiBhbHRlcm5hdGUgbWV0aG9kIGlzIHRvIGV4dHJhY3QgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSBhIGJ1aWxkLmxvZyBmaWxlLgorVGhpcyB3aWxsIGJlIG5lY2Vzc2FyeSBpZiB5b3VyIHRvb2xjaGFpbiB3YXMgYnVpbGQgd2l0aCBjcm9zc3Rvb2wtTkcgcHJpb3IKK3RvIDEuNC4wLCBidXQgY2FuIGJlIHVzZWQgd2l0aCBidWlsZC5sb2cgZmlsZXMgZnJvbSBhbnkgdmVyc2lvbjoKKyAgY3QtbmcgZXh0cmFjdGNvbmZpZyA8YnVpbGQubG9nID4uY29uZmlnCisKK09yLCBpZiB5b3VyIGJ1aWxkLmxvZyBmaWxlIGlzIGNvbXByZXNzZWQgKG1vc3QgcHJvYmFibHkhKToKKyAgYnpjYXQgYnVpbGQubG9nLmJ6MiB8Y3QtbmcgZXh0cmFjdGNvbmZpZyA+LmNvbmZpZworCitUaGUgYWJvdmUgY29tbWFuZHMgd2lsbCBkdW1wIHRoZSBjb25maWd1cmF0aW9uIHRvIHN0ZG91dCwgc28gdG8gcmVidWlsZCBhCit0b29sY2hhaW4gd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24sIGp1c3QgcmVkaXJlY3QgdGhlIG91dHB1dCB0byB0aGUKKy5jb25maWcgZmlsZToKKyAgJHtDVF9UQVJHRVR9LWN0LW5nLmNvbmZpZyA+LmNvbmZpZworICBjdC1uZyBvbGRjb25maWcKKworVGhlbiwgeW91IGNhbiByZXZpZXcgYW5kIGNoYW5nZSB0aGUgY29uZmlndXJhdGlvbiBieSBydW5uaW5nOgorICBjdC1uZyBtZW51Y29uZmlnCisKKworVXNpbmcgYXMgYSBiYWNrZW5kIGZvciBhIGJ1aWxkLXN5c3RlbSB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworQ3Jvc3N0b29sLU5HIGNhbiBiZSB1c2VkIGFzIGEgYmFja2VuZCBmb3IgYW4gYXV0b21hdGVkIGJ1aWxkLXN5c3RlbS4gSW4gdGhpcworY2FzZSwgc29tZSBjb21wb25lbnRzIHRoYXQgYXJlIGV4cGVjdGVkIHRvIHJ1biBvbiB0aGUgdGFyZ2V0IChlZy4gdGhlIG5hdGl2ZQorZ2RiLCBsdHJhY2UsIERVTUEuLi4pIGFyZSBub3QgYXZhaWxhYmxlIGluIHRoZSBtZW51Y29uZmlnLCBhbmQgdGhleSBhcmUgbm90CitidWlsZCBlaXRoZXIsIGFzIGl0IGlzIGNvbnNpZGVyZWQgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBidWlsZC1zeXN0ZW0gdG8KK2J1aWxkIGl0cyBvd24gdmVyc2lvbnMgb2YgdGhvc2UgdG9vbHMuCisKK0lmIHlvdSB3YW50IHRvIHVzZSBjcm9zc3Rvb2wtTkcgYXMgYSBiYWNrZW5kIHRvIGdlbmVyYXRlIHlvdXIgdG9vbGNoYWlucyBmb3IKK3lvdXIgYnVpbGQtc3lzdGVtLCB5b3UgaGF2ZSB0byBzZXQgYW5kIGV4cG9ydCB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlOgorICBDVF9JU19BX0JBQ0tFTkQ9eQorCisoY2FzZSBpcyBub3Qgc2Vuc2l0aXZlLCB5b3UgY2FuIHNheSBZKS4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9jdC1uZy0xLjEzLjQvNCAtIEJ1aWxkaW5nIHRoZSB0b29sY2hhaW4udHh0IGIvc2hhcmUvZG9jL2N0LW5nLTEuMTMuNC80IC0gQnVpbGRpbmcgdGhlIHRvb2xjaGFpbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUyNGJjMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9jdC1uZy0xLjEzLjQvNCAtIEJ1aWxkaW5nIHRoZSB0b29sY2hhaW4udHh0CkBAIC0wLDAgKzEsMTQyIEBACitGaWxlLi4uLi4uLi4uOiA0IC0gQnVpbGRpbmcgdGhlIHRvb2xjaGFpbi50eHQKK0NvcHlyaWdodC4uLi46IChDKSAyMDEwIFlhbm4gRS4gTU9SSU4gPHlhbm4ubW9yaW4uMTk5OEBhbmNpZW5zLmVuaWIuZnI+CitMaWNlbnNlLi4uLi4uOiBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uIFNoYXJlIEFsaWtlIChDQy1ieS1zYSksIHYyLjUKKworCitCdWlsZGluZyB0aGUgdG9vbGNoYWluICAvCitfX19fX19fX19fX19fX19fX19fX19fXy8KKworCitUbyBidWlsZCB0aGUgdG9vbGNoYWluLCBzaW1wbHkgdHlwZToKKyAgY3QtbmcgYnVpbGQKKworVGhpcyB3aWxsIHVzZSB0aGUgYWJvdmUgY29uZmlndXJhdGlvbiB0byByZXRyaWV2ZSwgZXh0cmFjdCBhbmQgcGF0Y2ggdGhlCitjb21wb25lbnRzLCBidWlsZCwgaW5zdGFsbCBhbmQgZXZlbnR1YWxseSB0ZXN0IHlvdXIgbmV3bHkgYnVpbHQgdG9vbGNoYWluLgorCitZb3UgYXJlIHRoZW4gZnJlZSB0byBhZGQgdGhlIHRvb2xjaGFpbiAvYmluIGRpcmVjdG9yeSBpbiB5b3VyIFBBVEggdG8gdXNlCitpdCBhdCB3aWxsLgorCitJbiBhbnkgY2FzZSwgeW91IGNhbiBnZXQgc29tZSB0ZXJzZSBoZWxwLiBKdXN0IHR5cGU6CisgIGN0LW5nIGhlbHAKK29yOgorICBtYW4gMSBjdC1uZworCisKK1N0b3BwaW5nIGFuZCByZXN0YXJ0aW5nIGEgYnVpbGQgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK0lmIHlvdSB3YW50IHRvIHN0b3AgdGhlIGJ1aWxkIGFmdGVyIGEgc3RlcCB5b3UgYXJlIGRlYnVnZ2luZywgeW91IGNhbiBwYXNzIHRoZQordmFyaWFibGUgU1RPUCB0byBtYWtlOgorICBjdC1uZyBidWlsZCBTVE9QPXNvbWVfc3RlcAorCitDb252ZXJzZWx5LCBpZiB5b3Ugd2FudCB0byByZXN0YXJ0IGEgYnVpbGQgYXQgYSBzcGVjaWZpYyBzdGVwIHlvdSBhcmUKK2RlYnVnZ2luZywgeW91IGNhbiBwYXNzIHRoZSBSRVNUQVJUIHZhcmlhYmxlIHRvIG1ha2U6CisgIGN0LW5nIGJ1aWxkIFJFU1RBUlQ9c29tZV9zdGVwCisKK0FsdGVybmF0aXZlbHksIHlvdSBjYW4gY2FsbCBtYWtlIHdpdGggdGhlIG5hbWUgb2YgYSBzdGVwIHRvIGp1c3QgZG8gdGhhdCBzdGVwOgorICBjdC1uZyBsaWJjX2hlYWRlcnMKK2lzIGVxdWl2YWxlbnQgdG86CisgIGN0LW5nIGJ1aWxkIFJFU1RBUlQ9bGliY19oZWFkZXJzIFNUT1A9bGliY19oZWFkZXJzCisKK1RoZSBzaG9ydGN1dHMgK3N0ZXBfbmFtZSBhbmQgc3RlcF9uYW1lKyBhbGxvdyB0byByZXNwZWN0aXZlbHkgc3RvcCBvciByZXN0YXJ0CithdCB0aGF0IHN0ZXAuIFRodXM6CisgIGN0LW5nICtsaWJjX2hlYWRlcnMgICAgICAgICAgICAgIGFuZDogICAgY3QtbmcgbGliY19oZWFkZXJzKworYXJlIGVxdWl2YWxlbnQgdG86CisgIGN0LW5nIGJ1aWxkIFNUT1A9bGliY19oZWFkZXJzICAgIGFuZDogICAgY3QtbmcgYnVpbGQgUkVTVEFSVD1saWJjX2hlYWRlcnMKKworVG8gb2J0YWluIHRoZSBsaXN0IG9mIGFjY2VwdGFibGUgc3RlcHMsIHBsZWFzZSBjYWxsOgorICBjdC1uZyBsaXN0LXN0ZXBzCisKK05vdGUgdGhhdCBpbiBvcmRlciB0byByZXN0YXJ0IGEgYnVpbGQsIHlvdSdsbCBoYXZlIHRvIHNheSAnWScgdG8gdGhlIGNvbmZpZworb3B0aW9uIENUX0RFQlVHX0NUX1NBVkVfU1RFUFMsIGFuZCB0aGF0IHRoZSBwcmV2aW91cyBidWlsZCBlZmZlY3RpdmVseSB3ZW50Cit0aGF0IGZhci4KKworCitCdWlsZGluZyBhbGwgdG9vbGNoYWlucyBhdCBvbmNlIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitZb3UgY2FuIGJ1aWxkIGFsbCBzYW1wbGVzOyBzaW1wbHkgY2FsbDoKKyAgY3QtbmcgYnVpbGQtYWxsCisKKworT3ZlcnJpZGluZyB0aGUgbnVtYmVyIG9mIC8vIGpvYnMgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitJZiB5b3Ugd2FudCB0byBvdmVycmlkZSB0aGUgbnVtYmVyIG9mIGpvYnMgdG8gcnVuIGluIC8vICh0aGUgLWogb3B0aW9uIHRvCittYWtlKSwgeW91IGNhbiBlaXRoZXIgcmUtZW50ZXIgdGhlIG1lbnVjb25maWcsIG9yIHNpbXBseSBhZGQgaXQgb24gdGhlIGNvbW1hbmQKK2xpbmUsIGFzIHN1Y2g6CisgIGN0LW5nIGJ1aWxkLjQKKword2hpY2ggdGVsbHMgY3Jvc3N0b29sLU5HIHRvIG92ZXJyaWRlIHRoZSBudW1iZXIgb2YgLy8gam9icyB0byA0LgorCitZb3UgY2FuIHNlZSB0aGUgYWN0aW9ucyB0aGF0IHN1cHBvcnQgb3ZlcnJpZGluZyB0aGUgbnVtYmVyIG9mIC8vIGpvYnMgaW4KK3RoZSBoZWxwIG1lbnUuIFRob3NlIGFyZSB0aGUgb25lcyB3aXRoIFsuI10gYWZ0ZXIgdGhlbSAoZWcuIGJ1aWxkWy4jXSBvcgorYnVpbGQtYWxsWy4jXSwgYW5kIHNvIG9uLi4uKS4KKworCitOb3RlIG9uIC8vIGpvYnMgfAorLS0tLS0tLS0tLS0tLS0tLSsKKworVGhlIGNyb3NzdG9vbC1ORyBzY3JpcHQgJ2N0LW5nJyBpcyBhIE1ha2VmaWxlLXNjcmlwdC4gSXQgZG9lcyAqbm90KiBleGVjdXRlCitpbiBwYXJhbGxlbCAodGhlcmUgaXMgbm90IG11Y2ggdG8gZ2FpbikuIFdoZW4gc3BlYWtpbmcgb2YgLy8gam9icywgd2UgYXJlCityZWZlcmluZyB0byB0aGUgbnVtYmVyIG9mIC8vIGpvYnMgd2hlbiBtYWtpbmcgdGhlICpjb21wb25lbnRzKi4gVGhhdCBpcywgd2UKK3NwZWFrIG9mIHRoZSBudW1iZXIgb2YgLy8gam9icyB1c2VkIHRvIGJ1aWxkIGdjYywgZ2xpYmMsIGFuZCBzbyBvbi4uLgorCisKK1Rvb2xzIHdyYXBwZXIgfAorLS0tLS0tLS0tLS0tLS0rCisKK1N0YXJ0aW5nIHdpdGggZ2NjLTQuMyBjb21lIHR3byBuZXcgZGVwZW5kZW5jaWVzOiBHTVAgYW5kIE1QRlIuIFdpdGggZ2NjLTQuNCwKK2NvbWUgdGhyZWUgbmV3IG9uZXM6IFBQTCwgQ0xvb0cvcHBsIGFuZCBNUEMuIFdpdGggZ2NjLTQuNSBhZ2FpbiBjb21lcyBhIG5ldworZGVwZW5kZW5jeSBvbiBsaWJlbGYuIFRoZXNlIGFyZSBsaWJyYXJpZXMgdGhhdCBlbmFibGUgYWR2YW5jZWQgZmVhdHVyZXMgdG8KK2djYy4gQWRkaXRpb25hbGx5LCBzb21lIG9mIHRob3NlIGxpYnJhcmllcyBjYW4gYmUgdXNlZCBieSBiaW51dGlscyBhbmQgZ2RiLgorVW5mb3J0dW5hdGVseSwgbm90IGFsbCBzeXN0ZW1zIG9uIHdoaWNoIGNyb3NzdG9vbC1ORyBydW5zIGhhdmUgYWxsIG9mIHRob3NlCitsaWJyYXJpZXMuIEFuZCBmb3IgdGhvc2UgdGhhdCBkbywgdGhlIHZlcnNpb25zIG9mIHRob3NlIGxpYnJhcmllcyBtYXkgYmUKK29sZGVyIHRoYW4gdGhlIHZlcnNpb24gcmVxdWlyZWQgYnkgZ2NjIChhbmQgYmludXRpbHMgYW5kIGdkYikuIFRvIGRhdGUsCitEZWJpYW4gc3RhYmxlIChha2EgTGVubnkpIGlzIGxhZ2dpbmcgYmVoaW5kIG9uIHNvbWUsIGFuZCBpcyBtaXNzaW5nIHRoZQorb3RoZXJzLgorCitUaGlzIGlzIHdoeSBjcm9zc3Rvb2wtTkcgYnVpbGRzIGl0cyBvd24gc2V0IG9mIGxpYnJhcmllcyBhcyBwYXJ0IG9mIHRoZQordG9vbGNoYWluLgorCitUaGUgY29tcGFuaW9uIGxpYnJhcmllcyBjYW4gYmUgYnVpbHQgZWl0aGVyIGFzIHN0YXRpYyBsaWJyYXJpZXMsIG9yIGFzIHNoYXJlZAorbGlicmFyaWVzLiBUaGUgZGVmYXVsdCBpcyB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLCBhbmQgaXMgdGhlIHNhZmUgd2F5LgorSWYgeW91IGRlY2lkZSB0byB1c2Ugc3RhdGljIGNvbXBhbmlvbiBsaWJyYXJpZXMsIHRoZW4geW91IGNhbiBzdG9wIHJlYWRpbmcKK3RoaXMgc2VjdGlvbi4KKworQnV0IGlmIHlvdSBwcmVmZXIgdG8gaGF2ZSBzaGFyZWQgbGlicmFyaWVzLCB0aGVuIHJlYWQgb24uLi4KKworQnVpbGRpbmcgc2hhcmVkIGNvbXBhbmlvbiBsaWJyYXJpZXMgcG9zZXMgbm8gcHJvYmxlbSBhdCBidWlsZCB0aW1lLCBhcworY3Jvc3N0b29sLU5HIGNvcnJlY3RseSBwb2ludHMgZ2NjIChhbmQgYmludXRpbHMgYW5kIGdkYikgdG8gdGhlIGNvcnJlY3QKK3BsYWNlIHdoZXJlIG91ciBvd24gdmVyc2lvbiBvZiB0aGUgbGlicmFyaWVzIGFyZSBpbnN0YWxsZWQuIEJ1dCBpdCBwb3NlcworYSBwcm9ibGVtIHdoZW4gZ2NjIGV0IGFsLiBhcmUgcnVuOiB0aGUgcGxhY2Ugd2hlcmUgdGhlIGxpYnJhcmllcyBhcmUgaXMgbW9zdAorcHJvYmFibHkgbm90IGtub3duIHRvIHRoZSBob3N0IGR5bmFtaWMgbGlua2VyLiBTdGlsbCB3b3JzZSwgaWYgdGhlIGhvc3Qgc3lzdGVtCitoYXMgaXRzIG93biB2ZXJzaW9ucywgdGhlbiBsZC5zbyB3b3VsZCBsb2FkIHRoZSB3cm9uZyBsaWJyYXJpZXMhCisKK1NvIHdlIGhhdmUgdG8gZm9yY2UgdGhlIGR5bmFtaWMgbGlua2VyIHRvIGxvYWQgdGhlIGNvcnJlY3QgdmVyc2lvbi4gV2UgZG8gdGhpcworYnkgdXNpbmcgdGhlIExEX0xJQlJBUllfUEFUSCB2YXJpYWJsZSwgdGhhdCBpbmZvcm1zIHRoZSBkeW5hbWljIGxpbmtlciB3aGVyZQordG8gbG9vayBmb3Igc2hhcmVkIGxpYnJhcmllcyBwcmlvciB0byBzZWFyY2hpbmcgaXRzIHN0YW5kYXJkIHBsYWNlcy4gQnV0IHdlCitjYW4ndCBpbXBvc2UgdGhhdCBidXJkZW4gb24gYWxsIHRoZSBzeXN0ZW0gKGJlY2F1c2UgaXQnZCBiZSBhIG5pZ2h0bWFyZSB0bworY29uZmlndXJlLCBhbmQgYmVjYXVzZSB0d28gdG9vbGNoYWlucyBvbiB0aGUgc2FtZSBzeXN0ZW0gbWF5IHVzZSBkaWZmZXJlbnQKK3ZlcnNpb25zIG9mIHRoZSBsaWJyYXJpZXMpOyBzbyB3ZSBoYXZlIHRvIGRvIGl0IG9uIGEgcGVyLXRvb2xjaGFpbiBiYXNpcy4KKworU28gd2UgcmVuYW1lIGFsbCBiaW5hcmllcyBvZiB0aGUgdG9vbGNoYWluIChieSBhZGRpbmcgYSBkb3QgJy4nIGFzIHRoZWlyIGZpcnN0CitjaGFyYWN0ZXIpLCBhbmQgYWRkIGEgc21hbGwgcHJvZ3JhbSwgdGhlIHNvLWNhbGxlZCAidG9vbHMgd3JhcHBlciIsIHRoYXQKK2NvcnJlY3RseSBzZXRzIExEX0xJQlJBUllfUEFUSCBwcmlvciB0byBydW5uaW5nIHRoZSByZWFsIHRvb2wuCisKK0ZpcnN0LCB0aGUgd3JhcHBlciB3YXMgd3JpdHRlbiBhcyBhIFBPU0lYLWNvbXBsaWFudCBzaGVsbCBzY3JpcHQuIFRoYXQgc2hlbGwKK3NjcmlwdCBpcyB2ZXJ5IHNpbXBsZSwgaWYgbm90IHRyaXZpYWwsIGFuZCB3b3JrcyBncmVhdC4gVGhlIG9ubHkgZHJhd2JhY2sgaXMKK3RoYXQgaXQgZG9lcyBub3Qgd29yayBvbiBob3N0IHN5c3RlbXMgdGhhdCBsYWNrIGEgc2hlbGwsIGZvciBleGFtcGxlIHRoZQorTWluZ1czMiBlbnZpcm9ubWVudC4gVG8gc29sdmUgdGhlIGlzc3VlLCB0aGUgd3JhcHBlciBoYXMgYmVlbiByZS13cml0dGVuIGluIEMsCithbmQgY29tcGlsZWQgYXQgYnVpbGQgdGltZS4gVGhpcyBDIHdyYXBwZXIgaXMgbXVjaCBtb3JlIGNvbXBsZXggdGhhbiB0aGUgc2hlbGwKK3NjcmlwdCwgYW5kIGFsdGhvdWdoIGl0IHNlZW1zIHRvIGJlIHdvcmtpbmcsIGl0J3MgYmVlbiBvbmx5IGxpZ2h0bHkgdGVzdGVkLgorU29tZSBvZiB0aGUgZXhwZWN0ZWQgc2hvcnQtY29taW5ncyB3aXRoIHRoaXMgQyB3cmFwcGVyIGFyZTsKKyAtIG11bHRpLWJ5dGUgZmlsZSBuYW1lcyBtYXkgbm90IGJlIGhhbmRsZWQgY29ycmVjdGx5CisgLSBpdCdzIHJlYWxseSBiaWcgZm9yIHdoYXQgaXQgZG9lcworCitTbywgdGhlIGRlZmF1bHQgd3JhcHBlciBpbnN0YWxsZWQgd2l0aCB5b3VyIHRvb2xjaGFpbiBpcyB0aGUgc2hlbGwgc2NyaXB0LgorSWYgeW91IGtub3cgdGhhdCB5b3VyIHN5c3RlbSBpcyBtaXNzaW5nIGEgc2hlbGwsIHRoZW4geW91IHNoYWxsIHVzZSB0aGUgQword3JhcHBlciAoYW5kIHJlcG9ydCBiYWNrIHdoZXRoZXIgaXQgd29ya3MsIG9yIGRvZXMgbm90IHdvcmssIGZvciB5b3UpLgorCitBIGZpbmFsIHdvcmQgb24gdGhlIHN1YmplY3Q6IGRvIG5vdCBidWlsZCBzaGFyZWQgbGlicmFyaWVzLiBCdWlsZCB0aGVtCitzdGF0aWMsIGFuZCB5b3UnbGwgYmUgc2FmZS4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9jdC1uZy0xLjEzLjQvNSAtIFVzaW5nIHRoZSB0b29sY2hhaW4udHh0IGIvc2hhcmUvZG9jL2N0LW5nLTEuMTMuNC81IC0gVXNpbmcgdGhlIHRvb2xjaGFpbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI4ZTFhYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9jdC1uZy0xLjEzLjQvNSAtIFVzaW5nIHRoZSB0b29sY2hhaW4udHh0CkBAIC0wLDAgKzEsMTAzIEBACitGaWxlLi4uLi4uLi4uOiA1IC0gVXNpbmcgdGhlIHRvb2xjaGFpbi50eHQKK0NvcHlyaWdodC4uLi46IChDKSAyMDEwIFlhbm4gRS4gTU9SSU4gPHlhbm4ubW9yaW4uMTk5OEBhbmNpZW5zLmVuaWIuZnI+CitMaWNlbnNlLi4uLi4uOiBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uIFNoYXJlIEFsaWtlIChDQy1ieS1zYSksIHYyLjUKKworCitVc2luZyB0aGUgdG9vbGNoYWluICAvCitfX19fX19fX19fX19fX19fX19fXy8KKworCitVc2luZyB0aGUgdG9vbGNoYWluIGlzIGFzIHNpbXBsZSBhcyBhZGRpbmcgdGhlIHRvb2xjaGFpbidzIGJpbiBkaXJlY3RvcnkgaW4KK3lvdXIgUEFUSCwgc3VjaCBhczoKKyAgZXhwb3J0IFBBVEg9IiR7UEFUSH06L3lvdXIvdG9vbGNoYWluL3BhdGgvYmluIgorCithbmQgdGhlbiB1c2luZyB0aGUgdGFyZ2V0IHR1cGxlIHRvIHRlbGwgdGhlIGJ1aWxkIHN5c3RlbXMgdG8gdXNlIHlvdXIKK3Rvb2xjaGFpbjoKKyAgLi9jb25maWd1cmUgLS10YXJnZXQ9eW91ci10YXJnZXQtdHVwbGUKK29yCisgIG1ha2UgQ0M9eW91ci10YXJnZXQtdHVwbGUtZ2NjCitvcgorICBtYWtlIENST1NTX0NPTVBJTEU9eW91ci10YXJnZXQtdHVwbGUtCithbmQgc28gb24uLi4KKworSXQgaXMgc3Ryb25nbHkgYWR2aXNlZCBub3QgdG8gdXNlIHRoZSB0b29sY2hhaW4gc3lzcm9vdCBkaXJlY3RvcnkgYXMgYW4KK2luc3RhbGwgZGlyZWN0b3J5IGZvciB5b3VyIHByb2dyYW1zL3BhY2thZ2VzLiBJZiB5b3UgZG8gc28sIHlvdSB3aWxsIG5vdCBiZQorYWJsZSB0byB1c2UgeW91ciB0b29sY2hhaW4gZm9yIGFub3RoZXIgcHJvamVjdC4gSXQgaXMgZXZlbiBzdHJvbmdseSBhZHZpc2VkCit0aGF0IHlvdXIgdG9vbGNoYWluIGlzIGNobW9kLWVkIHRvIHJlYWQtb25seSBvbmNlIHN1Y2Nlc3NmdWxseSBidWlsZCwgc28gdGhhdAoreW91IGRvbid0IGdvIHBvbGx1dGluZyB5b3VyIHRvb2xjaGFpbiB3aXRoIHlvdXIgcHJvZ3JhbXMvcGFja2FnZXMnIGZpbGVzLgorCitUaHVzLCB3aGVuIHlvdSBidWlsZCBhIHByb2dyYW0vcGFja2FnZSwgaW5zdGFsbCBpdCBpbiBhIHNlcGFyYXRlIGRpcmVjdG9yeSwKK2VnLiAveW91ci9yb290LiBUaGlzIGRpcmVjdG9yeSBpcyB0aGUgL2ltYWdlLyBvZiB3aGF0IHdvdWxkIGJlIGluIHRoZSByb290IGZpbGUKK3N5c3RlbSBvZiB5b3VyIHRhcmdldCwgYW5kIHdpbGwgY29udGFpbiBhbGwgdGhhdCB5b3VyIHByb2dyYW1zL3BhY2thZ2VzIGhhdmUKK2luc3RhbGxlZC4KKworCitUaGUgJ3BvcHVsYXRlJyBzY3JpcHQgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworV2hlbiB5b3VyIHJvb3QgZGlyZWN0b3J5IGlzIHJlYWR5LCBpdCBpcyBzdGlsbCBtaXNzaW5nIHNvbWUgaW1wb3J0YW50IGJpdHM6IHRoZQordG9vbGNoYWluJ3MgbGlicmFyaWVzLiBUbyBwb3B1bGF0ZSB5b3VyIHJvb3QgZGlyZWN0b3J5IHdpdGggdGhvc2UgbGlicywganVzdAorcnVuOgorICB5b3VyLXRhcmdldC10dXBsZS1wb3B1bGF0ZSAtcyAveW91ci9yb290IC1kIC95b3VyL3Jvb3QtcG9wdWxhdGVkCisKK1RoaXMgd2lsbCBjb3B5IC95b3VyL3Jvb3QgaW50byAveW91ci9yb290LXBvcHVsYXRlZCwgYW5kIHB1dCB0aGUgbmVlZGVkIGFuZCBvbmx5Cit0aGUgbmVlZGVkIGxpYnJhcmllcyB0aGVyZS4gVGh1cyB5b3UgZG9uJ3QgcG9sbHV0ZSAveW91ci9yb290IHdpdGggYW55IGNydWZ0IHRoYXQKK3dvdWxkIG5vIGxvbmdlciBiZSBuZWVkZWQgc2hvdWxkIHlvdSBoYXZlIHRvIHJlbW92ZSBzdHVmZi4gL3lvdXIvcm9vdCBhbHdheXMKK2NvbnRhaW5zIG9ubHkgdGhvc2UgdGhpbmdzIHlvdSBpbnN0YWxsIGluIGl0LgorCitZb3UgY2FuIHRoZW4gdXNlIC95b3VyL3Jvb3QtcG9wdWxhdGVkIHRvIGJ1aWxkIHVwIHlvdXIgZmlsZSBzeXN0ZW0gaW1hZ2UsIGEKK3RhcmJhbGwsIG9yIHRvIE5GUy1tb3VudCBpdCBmcm9tIHlvdXIgdGFyZ2V0LCBvciB3aGF0ZXZlciB5b3UgbmVlZC4KKworVGhlIHBvcHVsYXRlIHNjcmlwdCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKworIC1zIHNyY19kaXIKKyAgICBVc2UgJ3NyY19kaXInIGFzIHRoZSB1bi1wb3B1bGF0ZWQgcm9vdCBkaXJlY3RvcnkuCisKKyAtZCBkc3RfZGlyCisgICAgUHV0IHRoZSBwb3B1bGF0ZWQgcm9vdCBkaXJlY3RvcnkgaW4gJ2RzdF9kaXInLgorCisgLWwgbGliMSBbLi4uXQorICAgIEFsd2F5cyBhZGQgc3BlY2lmaWVkIGxpYnJhcmllcy4KKworIC1MIGZpbGUKKyAgICBBbHdheXMgYWRkIGxpYnJhcmllcyBsaXN0ZWQgaW4gJ2ZpbGUnLgorCisgLWYKKyAgICBSZW1vdmUgJ2RzdF9kaXInIGlmIGl0IHByZXZpb3VzbHkgZXhpc3RlZDsgY29udGludWUgZXZlbiBpZiBhbnkgbGlicmFyeQorICAgIHNwZWNpZmllZCB3aXRoIC1sIG9yIC1MIGlzIG1pc3NpbmcuCisKKyAtdgorICAgIEJlIHZlcmJvc2UsIGFuZCB0ZWxsIHdoYXQncyBnb2luZyBvbiAoeW91IGNhbiBzZWUgZXhhY3RseSB3aGVyZSBsaWJzIGFyZQorICAgIGNvbWluZyBmcm9tKS4KKworIC1oCisgICAgUHJpbnQgdGhlIGhlbHAuCisKK1NlZSAneW91ci10YXJnZXQtdHVwbGUtcG9wdWxhdGUgLWgnIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBvcHRpb25zLgorCitIZXJlIGlzIGhvdyBwb3B1bGF0ZSB3b3JrczoKKworICAxKSBwZXJmb3JtcyBzb21lIHNhbml0eSBjaGVja3M6CisgICAgIC0gc3JjX2RpciBhbmQgZHN0X2RpciBhcmUgc3BlY2lmaWVkCisgICAgIC0gc3JjX2RpciBleGlzdHMKKyAgICAgLSB1bmxlc3MgZm9yY2VkLCBkc3RfZGlyIGRvZXMgbm90IGV4aXN0CisgICAgIC0gc3JjX2RpciAhPSBkc3RfZGlyCisKKyAgMikgY29weSBzcmNfZGlyIHRvIGRzdF9kaXIKKworICAzKSBhZGQgZm9yY2VkIGxpYnJhcmllcyB0byBkc3RfZGlyCisgICAgIC0gYnVpbGQgdGhlIGxpc3QgZnJvbSAtbCBhbmQgLUwgb3B0aW9ucworICAgICAtIGdldCBmb3JjZWQgbGlicmFyaWVzIGZyb20gdGhlIHN5c3Jvb3QgKHNlZSBiZWxvdyBmb3IgaGV1cmlzdGljcykKKyAgICAgICAtIGFib3J0IG9uIHRoZSBmaXJzdCBtaXNzaW5nIGxpYnJhcnksIHVubGVzcyAtZiBpcyBzcGVjaWZpZWQKKworICA0KSBhZGQgYWxsIG1pc3NpbmcgbGlicmFyaWVzIHRvIGRzdF9kaXIKKyAgICAgLSBzY2FuIGRzdF9kaXIgZm9yIGV2ZXJ5IEVMRiBmaWxlcyB0aGF0IGFyZSAnZXhlY3V0YWJsZScgb3IKKyAgICAgICAnc2hhcmVkIG9iamVjdCcKKyAgICAgLSBsaXN0IHRoZSAiTkVFREVEIFNoYXJlZCBsaWJyYXJ5IiBmaWVsZHMKKyAgICAgICAtIGNoZWNrIGlmIHRoZSBsaWJyYXJ5IGlzIGFscmVhZHkgaW4gZHN0X2Rpci9saWIgb3IgZHN0X2Rpci91c3IvbGliCisgICAgICAgLSBpZiBub3QsIGdldCB0aGUgbGlicmFyeSBmcm9tIHRoZSBzeXNyb290CisgICAgICAgICAtIGlmIGl0J3MgaW4gc3lzcm9vdC9saWIsIGNvcHkgaXQgdG8gZHN0X2Rpci9saWIKKyAgICAgICAgIC0gaWYgaXQncyBpbiBzeXNyb290L3Vzci9saWIsIGNvcHkgaXQgdG8gZHN0X2Rpci91c3IvbGliCisgICAgICAgICAtIGluIGJvdGggY2FzZXMsIHVzZSB0aGUgU09OQU1FIG9mIHRoZSBsaWJyYXJ5IHRvIGNyZWF0ZSB0aGUgZmlsZQorICAgICAgICAgICBpbiBkc3RfZGlyCisgICAgICAgICAtIGlmIGl0IHdhcyBub3QgZm91bmQgaW4gdGhlIHN5c3Jvb3QsIHRoaXMgaXMgYW4gZXJyb3IuCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvY3QtbmctMS4xMy40LzYgLSBUb29sY2hhaW4gdHlwZXMudHh0IGIvc2hhcmUvZG9jL2N0LW5nLTEuMTMuNC82IC0gVG9vbGNoYWluIHR5cGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODJjZWI2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2N0LW5nLTEuMTMuNC82IC0gVG9vbGNoYWluIHR5cGVzLnR4dApAQCAtMCwwICsxLDY0IEBACitGaWxlLi4uLi4uLi4uOiA2IC0gVG9vbGNoYWluIHR5cGVzLnR4dAorQ29weXJpZ2h0Li4uLjogKEMpIDIwMTAgWWFubiBFLiBNT1JJTiA8eWFubi5tb3Jpbi4xOTk4QGFuY2llbnMuZW5pYi5mcj4KK0xpY2Vuc2UuLi4uLi46IENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gU2hhcmUgQWxpa2UgKENDLWJ5LXNhKSwgdjIuNQorCisKK1Rvb2xjaGFpbiB0eXBlcyAgLworX19fX19fX19fX19fX19fXy8KKworCitUaGVyZSBhcmUgZm91ciBraW5kcyBvZiB0b29sY2hhaW5zIHlvdSBjb3VsZCBlbmNvdW50ZXIuCisKK0ZpcnN0IG9mZiwgeW91IG11c3QgdW5kZXJzdGFuZCB0aGUgZm9sbG93aW5nOiB3aGVuIGl0IGNvbWVzIHRvIGNvbXBpbGVycyB0aGVyZQorYXJlIHVwIHRvIGZvdXIgbWFjaGluZXMgaW52b2x2ZWQ6CisgIDEpIHRoZSBtYWNoaW5lIGNvbmZpZ3VyaW5nIHRoZSB0b29sY2hhaW4gY29tcG9uZW50czogdGhlIGNvbmZpZyBtYWNoaW5lCisgIDIpIHRoZSBtYWNoaW5lIGJ1aWxkaW5nIHRoZSB0b29sY2hhaW4gY29tcG9uZW50czogICAgdGhlIGJ1aWxkIG1hY2hpbmUKKyAgMykgdGhlIG1hY2hpbmUgcnVubmluZyB0aGUgdG9vbGNoYWluOiAgICAgICAgICAgICAgICB0aGUgaG9zdCBtYWNoaW5lCisgIDQpIHRoZSBtYWNoaW5lIHRoZSB0b29sY2hhaW4gaXMgZ2VuZXJhdGluZyBjb2RlIGZvcjogdGhlIHRhcmdldCBtYWNoaW5lCisKK1dlIGNhbiBtb3N0IG9mIHRoZSB0aW1lIGFzc3VtZSB0aGF0IHRoZSBjb25maWcgbWFjaGluZSBhbmQgdGhlIGJ1aWxkIG1hY2hpbmUKK2FyZSB0aGUgc2FtZS4gTW9zdCBvZiB0aGUgdGltZSwgdGhpcyB3aWxsIGJlIHRydWUuIFRoZSBvbmx5IHRpbWUgaXQgaXNuJ3QKK2lzIGlmIHlvdSdyZSB1c2luZyBkaXN0cmlidXRlZCBjb21waWxhdGlvbiAoc3VjaCBhcyBkaXN0Y2MpLiBMZXQncyBmb3JnZXQKK3RoaXMgZm9yIHRoZSBzYWtlIG9mIHNpbXBsaWNpdHkuCisKK1NvIHdlJ3JlIGxlZnQgd2l0aCB0aHJlZSBtYWNoaW5lczoKKyAtIGJ1aWxkCisgLSBob3N0CisgLSB0YXJnZXQKKworQW55IHRvb2xjaGFpbiB3aWxsIGludm9sdmUgdGhvc2UgdGhyZWUgbWFjaGluZXMuIFlvdSBjYW4gYmUgYXMgcHJldHR5IHN1cmUgb2YKK3RoaXMgYXMgIjIgYW5kIDIgYXJlIDQiLiBIZXJlIGlzIGhvdyB0aGV5IGNvbWUgaW50byBwbGF5OgorCisxKSBidWlsZCA9PSBob3N0ID09IHRhcmdldAorICAgIFRoaXMgaXMgYSBwbGFpbiBuYXRpdmUgdG9vbGNoYWluLCB0YXJnZXRpbmcgdGhlIGV4YWN0IHNhbWUgbWFjaGluZSBhcyB0aGUKKyAgICBvbmUgaXQgaXMgYnVpbHQgb24sIGFuZCBydW5uaW5nIGFnYWluIG9uIHRoaXMgZXhhY3Qgc2FtZSBtYWNoaW5lLiBZb3UgaGF2ZQorICAgIHRvIGJ1aWxkIHN1Y2ggYSB0b29sY2hhaW4gd2hlbiB5b3Ugd2FudCB0byB1c2UgYW4gdXBkYXRlZCBjb21wb25lbnQsIHN1Y2gKKyAgICBhcyBhIG5ld2VyIGdjYyBmb3IgZXhhbXBsZS4KKyAgICBjcm9zc3Rvb2wtTkcgY2FsbHMgaXQgIm5hdGl2ZSIuCisKKzIpIGJ1aWxkID09IGhvc3QgIT0gdGFyZ2V0CisgICAgVGhpcyBpcyBhIGNsYXNzaWMgY3Jvc3MtdG9vbGNoYWluLCB3aGljaCBpcyBleHBlY3RlZCB0byBiZSBydW4gb24gdGhlIHNhbWUKKyAgICBtYWNoaW5lIGl0IGlzIGNvbXBpbGVkIG9uLCBhbmQgZ2VuZXJhdGUgY29kZSB0byBydW4gb24gYSBzZWNvbmQgbWFjaGluZSwKKyAgICB0aGUgdGFyZ2V0LgorICAgIGNyb3NzdG9vbC1ORyBjYWxscyBpdCAiY3Jvc3MiLgorCiszKSBidWlsZCAhPSBob3N0ID09IHRhcmdldAorICAgIFN1Y2ggYSB0b29sY2hhaW4gaXMgYWxzbyBhIG5hdGl2ZSB0b29sY2hhaW4sIGFzIGl0IHRhcmdldHMgdGhlIHNhbWUgbWFjaGluZQorICAgIGFzIGl0IHJ1bnMgb24uIEJ1dCBpdCBpcyBidWlsZCBvbiBhbm90aGVyIG1hY2hpbmUuIFlvdSB3YW50IHN1Y2ggYQorICAgIHRvb2xjaGFpbiB3aGVuIHBvcnRpbmcgdG8gYSBuZXcgYXJjaGl0ZWN0dXJlLCBvciBpZiB0aGUgYnVpbGQgbWFjaGluZSBpcworICAgIG11Y2ggZmFzdGVyIHRoYW4gdGhlIGhvc3QgbWFjaGluZS4KKyAgICBjcm9zc3Rvb2wtTkcgY2FsbHMgaXQgImNyb3NzLW5hdGl2ZSIuCisKKzQpIGJ1aWxkICE9IGhvc3QgIT0gdGFyZ2V0CisgICAgVGhpcyBvbmUgaXMgY2FsbGVkIGEgY2FuYWRpYW4tdG9vbGNoYWluICgqKSwgYW5kIGlzIHRyaWNreS4gVGhlIHRocmVlCisgICAgbWFjaGluZXMgaW4gcGxheSBhcmUgZGlmZmVyZW50LiBZb3UgbWlnaHQgd2FudCBzdWNoIGEgdG9vbGNoYWluIGlmIHlvdQorICAgIGhhdmUgYSBmYXN0IGJ1aWxkIG1hY2hpbmUsIGJ1dCB0aGUgdXNlcnMgd2lsbCB1c2UgaXQgb24gYW5vdGhlciBtYWNoaW5lLAorICAgIGFuZCB3aWxsIHByb2R1Y2UgY29kZSB0byBydW4gb24gYSB0aGlyZCBtYWNoaW5lLgorICAgIGNyb3NzdG9vbC1ORyBjYWxscyBpdCAiY2FuYWRpYW4iLgorCitjcm9zc3Rvb2wtTkcgY2FuIGJ1aWxkIGFsbCB0aGVzZSBraW5kcyBvZiB0b29sY2hhaW5zIChvciBpcyBhaW1pbmcgYXQgaXQsCithbnl3YXkhKQorCisoKikgVGhlIHRlcm0gQ2FuYWRpYW4gQ3Jvc3MgY2FtZSBhYm91dCBiZWNhdXNlIGF0IHRoZSB0aW1lIHRoYXQgdGhlc2UgaXNzdWVzCisgICAgd2VyZSBhbGwgYmVpbmcgaGFzaGVkIG91dCwgQ2FuYWRhIGhhZCB0aHJlZSBuYXRpb25hbCBwb2xpdGljYWwgcGFydGllcy4KKyAgICBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Nyb3NzX2NvbXBpbGVyCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvY3QtbmctMS4xMy40LzcgLSBDb250cmlidXRpbmcgdG8gY3Jvc3N0b29sLU5HLnR4dCBiL3NoYXJlL2RvYy9jdC1uZy0xLjEzLjQvNyAtIENvbnRyaWJ1dGluZyB0byBjcm9zc3Rvb2wtTkcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NzE4YTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvY3QtbmctMS4xMy40LzcgLSBDb250cmlidXRpbmcgdG8gY3Jvc3N0b29sLU5HLnR4dApAQCAtMCwwICsxLDY5IEBACitGaWxlLi4uLi4uLi4uOiA3IC0gQ29udHJpYnV0aW5nIHRvIGNyb3NzdG9vbC1ORy50eHQKK0NvcHlyaWdodC4uLi46IChDKSAyMDEwIFlhbm4gRS4gTU9SSU4gPHlhbm4ubW9yaW4uMTk5OEBhbmNpZW5zLmVuaWIuZnI+CitMaWNlbnNlLi4uLi4uOiBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uIFNoYXJlIEFsaWtlIChDQy1ieS1zYSksIHYyLjUKKworCitDb250cmlidXRpbmcgdG8gY3Jvc3N0b29sLU5HICAvCitfX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8KKworCitTZW5kaW5nIGEgYnVnIHJlcG9ydCB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK0lmIHlvdSBuZWVkIHRvIHNlbmQgYSBidWcgcmVwb3J0LCBwbGVhc2Ugc2VuZCBhIG1haWwgd2l0aCBzdWJqZWN0CitwcmVmaXhlZCB3aXRoICJbQ1RfTkddIiB3aXRoIHRvIGZvbGxvd2luZyBkZXN0aW5hdGlvbnM6CisgICAgVE86IHlhbm4ubW9yaW4uMTk5OCAoYXQpIGFuY2llbnMuZW5pYi5mcgorICAgIENDOiBjcm9zc2djYyAoYXQpIHNvdXJjZXdhcmUub3JnCisKKworU2VuZGluZyBwYXRjaGVzIHwKKy0tLS0tLS0tLS0tLS0tLS0rCisKK0lmIHlvdSB3YW50IHRvIGVuaGFuY2UgY3Jvc3N0b29sLU5HLCB0aGVyZSdzIGEgdG8tZG8gbGlzdCBpbiB0aGUgVE9ETyBmaWxlLgorCitXaGVuIHVwZGF0aW5nIGEgcGFja2FnZSwgcGxlYXNlIGluY2x1ZGUgdGhlIGNhdGVnb3J5IGFuZCBjb21wb25lbnQgaW4gdGhlCitzdGFydCBvZiB0aGUgZGVzY3JpcHRpb24uIEZvciBleGFtcGxlOgorICAgIGNjL2djYzogdXBkYXRlIHRvIHRoZSBMaW5hcm8gMjAxMS4wOSByZWxlYXNlCisKK0hlcmUgaXMgdGhlIChtb3N0bHktY29tcGxldGUpIGxpc3Qgb2YgY2F0ZWdvcmllcyBhbmQgY29tcG9uZW50czoKKworICAgIENhdGVnb3JpZXMgIHwgQ29tcG9uZW50cworICAgIC0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgYXJjaCAgICAgICAgfCBhbHBoYSwgYXJtLCBtaXBzLCBwb3dlcnBjLi4uCisgICAgY2MgICAgICAgICAgfCBnY2MKKyAgICBiaW51dGlscyAgICB8IGJpbnV0aWxzLCBlbGYyZmx0LCBzc3RyaXAKKyAgICBsaWJjICAgICAgICB8IGVnbGliYywgdUNsaWJjLCBnbGliYywgbmV3bGliLCBtaW5ndywgbm9uZQorICAgIGtlcm5lbCAgICAgIHwgbGludXgsIG1pbmd3MzIsIGJhcmUtbWV0YWwKKyAgICBkZWJ1ZyAgICAgICB8IGRtYWxsb2MsIGR1bWEsIGdkYiwgbHRyYWNlLCBzdHJhY2UKKyAgICBjb21wbGlicyAgICB8IGdtcCwgbXBmciwgcHBsLCBjbG9vZywgbXBjLCBsaWJlbGYKKyAgICBjb21wdG9vbHMgICB8IG1ha2UsIG00LCBhdXRvY29uZiwgYXV0b21ha2UsIGxpYnRvb2wKKyAgICAtLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgIHwgVGhlIGZvbGxvd2luZyBjYXRlZ29yaWVzIGhhdmUgbm8gY29tcG9uZW50LXBhcnQ6CisgICAgc2FtcGxlcyAgICAgfCB3aGVuIGFkZGluZy91cGRhdGluZy9yZW1vdmluZyBhIHNhbXBsZQorICAgIGtjb25maWcgICAgIHwgZm9yIHN0dWZmIGluIHRoZSBrY29uZmlnLyBkaXIKKyAgICBkb2NzICAgICAgICB8IGZvciBjaGFuZ2VzIHRvIHRoZSBkb2N1bWVudGF0aW9uCisgICAgY29uZmlndXJlICAgfCBmb3IgY2hhbmdlcyB0byAuL2NvbmZpZ3VyZSBhbmQvb3IgTWFrZWZpbGUuaW4KKyAgICBjb25maWcgICAgICB8IGZvciBzdHVmZiBpbiBjb25maWcvIG5vdCBjb3ZlcmVkIGFib3ZlCisgICAgc2NyaXB0cyAgICAgfCBmb3Igc3R1ZmYgaW4gc2NyaXB0cy8gbm90IGNvdmVyZWQgYWJvdmUKKworCitQYXRjaGVzIHNob3VsZCBjb21lIHdpdGggdGhlIGFwcHJvcHJpYXRlIFNvQiBsaW5lLiBBIFNvQiBsaW5lIGlzIHR5cGljYWxseQorc29tZXRoaW5nIGxpa2U6CisgICBTaWduZWQtb2ZmLWJ5OiBKb2huIERPRSA8am9obi5kb2VAc29tZXdoZXJlLm5ldD4KKworVGhlIFNvQiBsaW5lIGlzIGNsZWFybHkgZGVzY3JpYmVkIGluIERvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMgLCBzZWN0aW9uCisxMiwgb2YgeW91ciBmYXZvdXJpdGUgTGludXgga2VybmVsIHNvdXJjZSB0cmVlLgorCitBZGQgdGhlIGZvbGxvd2luZyB0byB5b3VyIH4vLmhncmMgdG8gbWFrZSBNZXJjdXJpYWwgY2hlY2sgZm9yIHRoZSBTb0IKK2xpbmUgd2hlbiBjb21taXR0aW5nOgorICAgIFtob29rc10KKyAgICBwcmV0eG5jb21taXQuc2lnbm9mZiA9IGhnIGxvZyAtLXRlbXBsYXRlICd7ZGVzY31cbicgLXIgJEhHX05PREUgXAorICAgICAgICB8IGdyZXAgLXFpICdec2lnbmVkLW9mZi1ieTonCisKK1lvdSBjYW4gYWxzbyBhZGQgYW55IG9mIHRoZSBmb2xsb3dpbmcgbGluZXMgaWYgYXBwbGljYWJsZToKKyAgICBBY2tlZC1ieToKKyAgICBUZXN0ZWQtYnk6CisgICAgUmV2aWV3ZWQtYnk6CisKK0ZvciBsYXJnZXIgb3IgbW9yZSBmcmVxdWVudCBjb250cmlidXRpb25zLCBtZXJjdXJpYWwgc2hvdWxkIGJlIHVzZWQuCitUaGVyZSBpcyBhIG5pY2UsIGNvbXBsZXRlIGFuZCBzdGVwLWJ5LXN0ZXAgdHV0b3JpYWwgaW4gc2VjdGlvbiAnQycuCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvY3QtbmctMS4xMy40LzggLSBJbnRlcm5hbHMudHh0IGIvc2hhcmUvZG9jL2N0LW5nLTEuMTMuNC84IC0gSW50ZXJuYWxzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTZhY2M2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2N0LW5nLTEuMTMuNC84IC0gSW50ZXJuYWxzLnR4dApAQCAtMCwwICsxLDI5NCBAQAorRmlsZS4uLi4uLi4uLjogOCAtIEludGVybmFscy50eHQKK0NvcHlyaWdodC4uLi46IChDKSAyMDEwIFlhbm4gRS4gTU9SSU4gPHlhbm4ubW9yaW4uMTk5OEBhbmNpZW5zLmVuaWIuZnI+CitMaWNlbnNlLi4uLi4uOiBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uIFNoYXJlIEFsaWtlIChDQy1ieS1zYSksIHYyLjUKKworCitJbnRlcm5hbHMgIC8KK19fX19fX19fX18vCisKKworSW50ZXJuYWxseSwgY3Jvc3N0b29sLU5HIGlzIHNjcmlwdC1iYXNlZC4gVG8gZWFzZSB1c2FnZSwgdGhlIGZyb250ZW5kIGlzCitNYWtlZmlsZS1iYXNlZC4KKworCitNYWtlZmlsZSBmcm9udC1lbmQgfAorLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworVGhlIGVudHJ5IHBvaW50IHRvIGNyb3NzdG9vbC1ORyBpcyB0aGUgTWFrZWZpbGUgc2NyaXB0ICJjdC1uZyIuIENhbGxpbmcgdGhpcworc2NyaXB0IHdpdGggYW4gYWN0aW9uIHdpbGwgYWN0IGV4YWN0bHkgYXMgaWYgdGhlIE1ha2VmaWxlIHdhcyBpbiB0aGUgY3VycmVudAord29ya2luZyBkaXJlY3RvcnkgYW5kIG1ha2Ugd2FzIGNhbGxlZCB3aXRoIHRoZSBhY3Rpb24gYXMgcnVsZS4gVGh1czoKKyAgY3QtbmcgbWVudWNvbmZpZworCitpcyBlcXVpdmFsZW50IHRvIGhhdmluZyB0aGUgTWFrZWZpbGUgaW4gQ1dELCBhbmQgY2FsbGluZzoKKyAgbWFrZSBtZW51Y29uZmlnCisKK0hhdmluZyBjdC1uZyBhcyBpdCBpcyBhdm9pZHMgY29weWluZyB0aGUgTWFrZWZpbGUgZXZlcnl3aGVyZSwgYW5kIGFjdHMgYXMgYQordHJhZGl0aW9uYWwgY29tbWFuZC4KKworY3QtbmcgbG9hZHMgc3ViLSBNYWtlZmlsZXMgZnJvbSB0aGUgbGlicmFyeSBkaXJlY3RvcnkgJChDVF9MSUJfRElSKSwgYXMgc2V0IHVwCithdCBjb25maWd1cmF0aW9uIHRpbWUgd2l0aCAuL2NvbmZpZ3VyZS4KKworY3QtbmcgYWxzbyBzZWFyY2hlcyBmb3IgY29uZmlnIGZpbGVzLCBzdWItdG9vbHMsIHNhbXBsZXMsIHNjcmlwdHMgYW5kIHBhdGNoZXMgaW4KK3RoYXQgbGlicmFyeSBkaXJlY3RvcnkuCisKK0JlY2F1c2Ugb2YgYSBzdHVwaWQgbWFrZSBiZWhhdmlvci9idWcgSSB3YXMgdW5hYmxlIHRvIHRyYWNrIGRvd24sIGltcGxpY2l0IG1ha2UKK3J1bGVzIGFyZSBkaXNhYmxlZDogaW5zdGFsbGluZyB3aXRoIC0tbG9jYWwgd291bGQgdHJpZ2dlciB0aG9zZSBydWxlcywgYW5kIG1jb25mCit3YXMgdW5idWlsZGFibGUuCisKKworS2NvbmZpZyBwYXJzZXIgfAorLS0tLS0tLS0tLS0tLS0tKworCitUaGUga2NvbmZpZyBsYW5ndWFnZSBpcyBhIGhhY2tlZCB2ZXJzaW9uLCB2YW1waXJpc2VkIGZyb20gdGhlIExpbnV4IGtlcm5lbAorKGh0dHA6Ly93d3cua2VybmVsLm9yZy8pLCBhbmQgKGhlYXZpbHkpIGFkYXB0ZWQgdG8gbXkgbmVlZHMuCisKK1RoZSBsaXN0IG9mIHRoZSBtb3N0IG5vdGFibGUgY2hhbmdlcyAoYXQgbGVhc3QgdGhlIG9uZXMgSSByZW1lbWJlcikgZm9sbG93czoKKy0gdGhlIENPTkZJR18gcHJlZml4IGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggQ1RfCistIGEgbGVhZGluZyB8IGluIHByb21wdHMgaXMgc2tpcHBlZCwgYW5kIHN1YnNlcXVlbnQgbGVhZGluZyBzcGFjZXMgYXJlIG5vdAorICB0cmltbWVkOyBvdGhlcndpc2UgbGVhZGluZyBzcGFjZXMgYXJlIHNpbGVudGx5IHRyaW1tZWQKKy0gcmVtb3ZlZCB0aGUgd2FybmluZyBhYm91dCB1bmRlZmluZWQgZW52aXJvbm1lbnQgdmFyaWFibGUKKworVGhlIGtjb25maWcgcGFyc2VycyAoY29uZiBhbmQgbWNvbmYpIGFyZSBub3QgaW5zdGFsbGVkIHByZS1idWlsdCwgYnV0IGFzCitzb3VyY2UgZmlsZXMuIFRodXMgeW91IGNhbiBoYXZlIHRoZSBkaXJlY3Rvcnkgd2hlcmUgY3Jvc3N0b29sLU5HIGlzIGluc3RhbGxlZCwKK2V4cG9ydGVkICh2aWEgTkZTIG9yIHdoYXRldmVyKSBhbmQgaGF2ZSBjbGllbnRzIHdpdGggZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMKK3VzZSB0aGUgc2FtZSBjcm9zc3Rvb2wtTkcgaW5zdGFsbGF0aW9uLCBhbmQgbW9zdCBub3RhYmx5LCB0aGUgc2FtZSBzZXQgb2YKK3BhdGNoZXMuCisKKworQXJjaGl0ZWN0dXJlLXNwZWNpZmljIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK05vdGU6IHRoaXMgY2hhcHRlciBpcyBub3QgcmVhbGx5IHdlbGwgd3JpdHRlbiwgYW5kIG1pZ2h0IHRodXMgYmUgYSBsaXR0bGUgYml0Citjb21wbGV4IHRvIHVuZGVyc3RhbmQuIFRvIGdldCBhIGJldHRlciBncmFzcCBvZiB3aGF0IGFuIGFyY2hpdGVjdHVyZSBpcywgdGhlCityZWFkZXIgaXMga2luZGx5IGVuY291cmFnZWQgdG8gbG9vayBhdCB0aGUgImFyY2gvIiBzdWItZGlyZWN0b3J5LCBhbmQgdG8gdGhlCitleGlzdGluZyBhcmNoaXRlY3R1cmVzIHRvIHNlZSBob3cgdGhpbmdzIGFyZSBsYWlkIG91dC4KKworQW4gYXJjaGl0ZWN0dXJlIGlzIGRlZmluZWQgYnk6CisKKyAtIGEgaHVtYW4tcmVhZGFibGUgbmFtZSwgaW4gbG93ZXIgY2FzZSBsZXR0ZXJzLCB3aXRoIG51bWJlcnMgYXMgYXBwcm9wcmlhdGUuCisgICBUaGUgdW5kZXJzY29yZSBpcyBhbGxvd2VkOyBzcGFjZSBhbmQgc3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSBub3QuCisgICAgIEVnLjogYXJtLCB4ODZfNjQKKyAtIGEgZmlsZSBpbiAiY29uZmlnL2FyY2gvIiwgbmFtZWQgYWZ0ZXIgdGhlIGFyY2hpdGVjdHVyZSdzIG5hbWUsIGFuZCBzdWZmaXhlZAorICAgd2l0aCAiLmluIi4KKyAgICAgRWcuOiBjb25maWcvYXJjaC9hcm0uaW4KKyAtIGEgZmlsZSBpbiAic2NyaXB0cy9idWlsZC9hcmNoLyIsIG5hbWVkIGFmdGVyIHRoZSBhcmNoaXRlY3R1cmUncyBuYW1lLCBhbmQKKyAgIHN1ZmZpeGVkIHdpdGggIi5zaCIuCisgICAgIEVnLjogc2NyaXB0cy9idWlsZC9hcmNoL2FybS5zaAorCitUaGUgYXJjaGl0ZWN0dXJlJ3MgIi5pbiIgZmlsZSBBUEk6CisgPiB0aGUgY29uZmlnIG9wdGlvbiAiQVJDSF8lYXJjaCUiICh3aGVyZSAlYXJjaCUgaXMgdG8gYmUgcmVwbGFjZWQgd2l0aCB0aGUKKyAgIGFjdHVhbCBhcmNoaXRlY3R1cmUgbmFtZSkuCisgICBUaGF0IGNvbmZpZyBvcHRpb24gbXVzdCBoYXZlICpuZWl0aGVyKiBhIHR5cGUsICpub3IqIGEgcHJvbXB0ISBBbHNvLCBpdCBjYW4KKyAgICpub3QqIGRlcGVuZCBvbiBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbiAoRVhQRVJJTUVOVEFMIGlzIG1hbmFnZWQgYXMgYWJvdmUpLgorICAgICBFZy46CisgICAgICAgY29uZmlnIEFSQ0hfYXJtCisgICArIG1hbmRhdG9yeToKKyAgICAgICBkZWZpbmVzIGEgKHRlcnNlKSBoZWxwIGVudHJ5IGZvciB0aGlzIGFyY2hpdGVjdHVyZToKKyAgICAgICBFZy46CisgICAgICAgICBjb25maWcgQVJDSF9hcm0KKyAgICAgICAgICAgaGVscAorICAgICAgICAgICAgIFRoZSBBUk0gYXJjaGl0ZWN0dXJlLgorICAgKyBvcHRpb25hbDoKKyAgICAgICBzZWxlY3RzIGFkZXF1YXRlIGFzc29jaWF0ZWQgY29uZmlnIG9wdGlvbnMuCisgICAgICAgTm90ZTogNjQtYml0IGFyY2hpdGVjdHVyZXMgKnNoYWxsKiBzZWxlY3QgQVJDSF82NAorICAgICAgIEVnLjoKKyAgICAgICAgIGNvbmZpZyBBUkNIX2FybQorICAgICAgICAgICBzZWxlY3QgQVJDSF9TVVBQT1JUU19CT1RIX0VORElBTgorICAgICAgICAgICBzZWxlY3QgQVJDSF9ERUZBVUxUX0xFCisgICAgICAgICAgIGhlbHAKKyAgICAgICAgICAgICBUaGUgQVJNIGFyY2hpdGVjdHVyZS4KKyAgICAgICBFZy46CisgICAgICAgICBjb25maWcgQVJDSF94ODZfNjQKKyAgICAgICAgICAgIHNlbGVjdCBBUkNIXzY0CisgICAgICAgICAgICBoZWxwCisgICAgICAgICAgICAgIFRoZSB4ODZfNjQgYXJjaGl0ZWN0dXJlLgorCisgPiBvdGhlciB0YXJnZXQtc3BlY2lmaWMgb3B0aW9ucywgYXQgeW91ciBkaXNjcmV0aW9uLiBOb3RlIGhvd2V2ZXIgdGhhdCB0bworICAgYXZvaWQgbmFtZS1jbGFzaGluZywgc3VjaCBvcHRpb25zIHNoYWxsIGJlIHByZWZpeGVkIHdpdGggIkFSQ0hfJWFyY2glIiwKKyAgIHdoZXJlICVhcmNoJSBpcyBhZ2FpbiByZXBsYWNlZCBieSB0aGUgYWN0dWFsIGFyY2hpdGVjdHVyZSBuYW1lLgorICAgKE5vdGU6IGR1ZSB0byBoaXN0b3JpY2FsIHJlYXNvbnMsIGFuZCBsYWNrIG9mIHRpbWUgdG8gY2xlYW4gdXAgdGhlIGNvZGUsCisgICAgSSBtYXkgaGF2ZSBsZWZ0IHNvbWUgY29uZmlnIG9wdGlvbnMgdGhhdCBkbyBub3QgY29tcGxldGVseSBjb25mb3JtIHRvCisgICAgdGhpcywgYXMgdGhlIGFyY2hpdGVjdHVyZSBuYW1lIHdhcyB3cml0dGVuIGFsbCB1cHBlciBjYXNlLiBIb3dldmVyLCB0aGUKKyAgICBwcmVmaXggaXMgdW5pcXVlIGFtb25nIGFyY2hpdGVjdHVyZXMsIGFuZCBkb2VzIG5vdCBjYXVzZSBoYXJtKS4KKworVGhlIGFyY2hpdGVjdHVyZSdzICIuc2giIGZpbGUgQVBJOgorID4gdGhlIGZ1bmN0aW9uICJDVF9Eb0FyY2hUdXBsZVZhbHVlcyIKKyAgICsgcGFyYW1ldGVyczogbm9uZQorICAgKyBlbnZpcm9ubWVudDoKKyAgICAgLSBhbGwgdmFyaWFibGVzIGZyb20gdGhlICIuY29uZmlnIiBmaWxlLAorICAgICAtIHRoZSB0d28gdmFyaWFibGVzICJ0YXJnZXRfZW5kaWFuX2ViIiBhbmQgInRhcmdldF9lbmRpYW5fZWwiIHdoaWNoIGFyZQorICAgICAgIHRoZSBlbmRpYW5uZXNzIHN1ZmZpeGVzCisgICArIHJldHVybiB2YWx1ZTogMCB1cG9uIHN1Y2Nlc3MsICEwIHVwb24gZmFpbHVyZQorICAgKyBwcm92aWRlczoKKyAgICAgLSBtYW5kYXRvcnkKKyAgICAgLSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgQ1RfVEFSR0VUX0FSQ0gKKyAgICAgLSBjb250YWluczoKKyAgICAgICB0aGUgYXJjaGl0ZWN0dXJlIHBhcnQgb2YgdGhlIHRhcmdldCB0dXBsZS4KKyAgICAgICBFZy46ICJhcm1lYiIgZm9yIGJpZyBlbmRpYW4gQVJNCisgICAgICAgICAgICAiaTM4NiIgZm9yIGFuIGkzODYKKyAgICsgcHJvdmlkZXM6CisgICAgIC0gb3B0aW9uYWwKKyAgICAgLSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgQ1RfVEFSR0VUX1NZUworICAgICAtIGNvbnRhaW5zOgorICAgICAgIHRoZSBzeXN0ZW0gcGFydCBvZiB0aGUgdGFyZ2V0IHR1cGxlLgorICAgICAgIEVnLjogImdudSIgZm9yIGdsaWJjIG9uIG1vc3QgYXJjaGl0ZWN0dXJlcworICAgICAgICAgICAgImdudWVhYmkiIGZvciBnbGliYyBvbiBhbiBBUk0gRUFCSQorICAgICAtIGRlZmF1bHRzIHRvOgorICAgICAgIC0gZm9yIGdsaWJjLWJhc2VkIHRvb2xjaGFpbjogImdudSIKKyAgICAgICAtIGZvciB1Q2xpYmMtYmFzZWQgdG9vbGNoYWluOiAidWNsaWJjIgorICAgKyBwcm92aWRlczoKKyAgICAgLSBvcHRpb25hbAorICAgICAtIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gY29uZmlndXJlIHRoZSBjcm9zcy1nY2MgKGRlZmF1bHRzKQorICAgICAgIC0gQ1RfQVJDSF9XSVRIX0FSQ0ggICAgOiB0aGUgZ2NjIC4vY29uZmlndXJlIHN3aXRjaCB0byBzZWxlY3QgYXJjaGl0ZWN0dXJlIGxldmVsICAgICAgICAgKCAiLS13aXRoLWFyY2g9JHtDVF9BUkNIX0FSQ0h9IiAgICkKKyAgICAgICAtIENUX0FSQ0hfV0lUSF9BQkkgICAgIDogdGhlIGdjYyAuL2NvbmZpZ3VyZSBzd2l0Y2ggdG8gc2VsZWN0IEFCSSBsZXZlbCAgICAgICAgICAgICAgICAgICggIi0td2l0aC1hYmk9JHtDVF9BUkNIX0FCSX0iICAgICApCisgICAgICAgLSBDVF9BUkNIX1dJVEhfQ1BVICAgICA6IHRoZSBnY2MgLi9jb25maWd1cmUgc3dpdGNoIHRvIHNlbGVjdCBDUFUgaW5zdHJ1Y3Rpb24gc2V0ICAgICAgICAoICItLXdpdGgtY3B1PSR7Q1RfQVJDSF9DUFV9IiAgICAgKQorICAgICAgIC0gQ1RfQVJDSF9XSVRIX1RVTkUgICAgOiB0aGUgZ2NjIC4vY29uZmlndXJlIHN3aXRjaCB0byBzZWxlY3Qgc2NoZWR1bGluZyAgICAgICAgICAgICAgICAgKCAiLS13aXRoLXR1bmU9JHtDVF9BUkNIX1RVTkV9IiAgICkKKyAgICAgICAtIENUX0FSQ0hfV0lUSF9GUFUgICAgIDogdGhlIGdjYyAuL2NvbmZpZ3VyZSBzd2l0Y2ggdG8gc2VsZWN0IEZQVSB0eXBlICAgICAgICAgICAgICAgICAgICggIi0td2l0aC1mcHU9JHtDVF9BUkNIX0ZQVX0iICAgICApCisgICAgICAgLSBDVF9BUkNIX1dJVEhfRkxPQVQgICA6IHRoZSBnY2MgLi9jb25maWd1cmUgc3dpdGNoIHRvIHNlbGVjdCBmbG9hdGluZyBwb2ludCBhcml0aG1ldGljcyAoICItLXdpdGgtZmxvYXQ9c29mdCIgb3IgL2VtcHR5LyAgKQorICAgKyBwcm92aWRlczoKKyAgICAgLSBvcHRpb25hbAorICAgICAtIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gcGFzcyB0byB0aGUgY3Jvc3MtZ2NjIHRvIGJ1aWxkIHRhcmdldCBiaW5hcmllcyAoZGVmYXVsdHMpCisgICAgICAgLSBDVF9BUkNIX0FSQ0hfQ0ZMQUcgICA6IHRoZSBnY2Mgc3dpdGNoIHRvIHNlbGVjdCBhcmNoaXRlY3R1cmUgbGV2ZWwgICAgICAgICAgICAgICAgICAgICAoICItbWFyY2g9JHtDVF9BUkNIX0FSQ0h9IiAgICAgICAgICAgICkKKyAgICAgICAtIENUX0FSQ0hfQUJJX0NGTEFHICAgIDogdGhlIGdjYyBzd2l0Y2ggdG8gc2VsZWN0IEFCSSBsZXZlbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggIi1tYWJpPSR7Q1RfQVJDSF9BQkl9IiAgICAgICAgICAgICAgKQorICAgICAgIC0gQ1RfQVJDSF9DUFVfQ0ZMQUcgICAgOiB0aGUgZ2NjIHN3aXRjaCB0byBzZWxlY3QgQ1BVIGluc3RydWN0aW9uIHNldCAgICAgICAgICAgICAgICAgICAgKCAiLW1jcHU9JHtDVF9BUkNIX0NQVX0iICAgICAgICAgICAgICApCisgICAgICAgLSBDVF9BUkNIX1RVTkVfQ0ZMQUcgICA6IHRoZSBnY2Mgc3dpdGNoIHRvIHNlbGVjdCBzY2hlZHVsaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICItbXR1bmU9JHtDVF9BUkNIX1RVTkV9IiAgICAgICAgICAgICkKKyAgICAgICAtIENUX0FSQ0hfRlBVX0NGTEFHICAgIDogdGhlIGdjYyBzd2l0Y2ggdG8gc2VsZWN0IEZQVSB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggIi1tZnB1PSR7Q1RfQVJDSF9GUFV9IiAgICAgICAgICAgICAgKQorICAgICAgIC0gQ1RfQVJDSF9GTE9BVF9DRkxBRyAgOiB0aGUgZ2NjIHN3aXRjaCB0byBjaG9vc2UgZmxvYXRpbmcgcG9pbnQgYXJpdGhtZXRpY3MgICAgICAgICAgICAgKCAiLW1zb2Z0LWZsb2F0IiBvciAvZW1wdHkvICAgICAgICAgICApCisgICAgICAgLSBDVF9BUkNIX0VORElBTl9DRkxBRyA6IHRoZSBnY2Mgc3dpdGNoIHRvIGNob29zZSBiaWcgb3IgbGl0dGxlIGVuZGlhbiAgICAgICAgICAgICAgICAgICAoICItbWJpZy1lbmRpYW4iIG9yICItbWxpdHRsZS1lbmRpYW4iICkKKyAgICAgLSBkZWZhdWx0IHRvOgorICAgICAgIHNlZSBhYm92ZS4KKyAgICsgcHJvdmlkZXM6CisgICAgIC0gb3B0aW9uYWwKKyAgICAgLSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGNvbmZpZ3VyZSB0aGUgY29yZSBhbmQgZmluYWwgY29tcGlsZXIsIHNwZWNpZmljIHRvIHRoaXMgYXJjaGl0ZWN0dXJlOgorICAgICAgIC0gQ1RfQVJDSF9DQ19DT1JFX0VYVFJBX0NPTkZJRyAgIDogYWRkaXRpb25hbCwgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvcmUgZ2NjIC4vY29uZmlndXJlIGZsYWdzCisgICAgICAgLSBDVF9BUkNIX0NDX0VYVFJBX0NPTkZJRyAgICAgICAgOiBhZGRpdGlvbmFsLCBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgZmluYWwgZ2NjIC4vY29uZmlndXJlIGZsYWdzCisgICAgIC0gZGVmYXVsdCB0bzoKKyAgICAgICAtIGFsbCBlbXB0eQorICAgKyBwcm92aWRlczoKKyAgICAgLSBvcHRpb25hbAorICAgICAtIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgQ0ZMQUdTIGFuZCBMREZMQUdTOgorICAgICAgIC0gQ1RfQVJDSF9UQVJHRVRfQ0xGQUdTCisgICAgICAgLSBDVF9BUkNIX1RBUkdFVF9MREZMQUdTCisgICAgIC0gZGVmYXVsdCB0bzoKKyAgICAgICAtIGFsbCBlbXB0eQorCitZb3UgY2FuIGhhdmUgYSBsb29rIGF0ICJjb25maWcvYXJjaC9hcm0uaW4iIGFuZCAic2NyaXB0cy9idWlsZC9hcmNoL2FybS5zaCIgZm9yCithIHF1aXRlIGNvbXBsZXRlIGV4YW1wbGUgb2Ygd2hhdCBhbiBhY3R1YWwgYXJjaGl0ZWN0dXJlIGRlc2NyaXB0aW9uIGxvb2tzIGxpa2UuCisKKworS2VybmVsIHNwZWNpZmljIHwKKy0tLS0tLS0tLS0tLS0tLS0rCisKK0Ega2VybmVsIGlzIGRlZmluZWQgYnk6CisKKyAtIGEgaHVtYW4tcmVhZGFibGUgbmFtZSwgaW4gbG93ZXIgY2FzZSBsZXR0ZXJzLCB3aXRoIG51bWJlcnMgYXMgYXBwcm9wcmlhdGUuCisgICBUaGUgdW5kZXJzY29yZSBpcyBhbGxvd2VkOyBzcGFjZSBhbmQgc3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSBub3QgKGFsdGhvdWdoCisgICB0aGV5IGFyZSBpbnRlcm5hbGx5IHJlcGxhY2VkIHdpdGggdW5kZXJzY29yZXMuCisgICAgIEVnLjogbGludXgsIGJhcmUtbWV0YWwKKyAtIGEgZmlsZSBpbiAiY29uZmlnL2tlcm5lbC8iLCBuYW1lZCBhZnRlciB0aGUga2VybmVsIG5hbWUsIGFuZCBzdWZmaXhlZCB3aXRoCisgICAiLmluIi4KKyAgICAgRWcuOiBjb25maWcva2VybmVsL2xpbnV4LmluLCBjb25maWcva2VybmVsL2JhcmUtbWV0YWwuaW4KKyAtIGEgZmlsZSBpbiAic2NyaXB0cy9idWlsZC9rZXJuZWwvIiwgbmFtZWQgYWZ0ZXIgdGhlIGtlcm5lbCBuYW1lLCBhbmQgc3VmZml4ZWQKKyAgIHdpdGggIi5zaCIuCisgICAgIEVnLjogc2NyaXB0cy9idWlsZC9rZXJuZWwvbGludXguc2gsIHNjcmlwdHMvYnVpbGQva2VybmVsL2JhcmUtbWV0YWwuc2gKKworVGhlIGtlcm5lbCdzICIuaW4iIGZpbGUgbXVzdCBjb250YWluOgorID4gYW4gb3B0aW9uYWwgbGluZXMgY29udGFpbmluZyBleGFjdGx5ICIjIEVYUEVSSU1FTlRBTCIsIHN0YXJ0aW5nIG9uIHRoZQorICAgZmlyc3QgY29sdW1uLCBhbmQgd2l0aG91dCBhbnkgZm9sbG93aW5nIHNwYWNlIG9yIG90aGVyIGNoYXJhY3Rlci4KKyAgIElmIHRoaXMgbGluZSBpcyBwcmVzZW50LCB0aGVuIHRoaXMga2VybmVsIGlzIGNvbnNpZGVyZWQgRVhQRVJJTUVOVEFMLAorICAgYW5kIGNvcnJlY3QgZGVwZW5kZW5jeSBvbiBFWFBFUklNRU5UQUwgd2lsbCBiZSBzZXQuCisKKyA+IHRoZSBjb25maWcgb3B0aW9uICJLRVJORUxfJWtlcm5lbF9uYW1lJSIgKHdoZXJlICVrZXJuZWxfbmFtZSUgaXMgdG8gYmUKKyAgIHJlcGxhY2VkIHdpdGggdGhlIGFjdHVhbCBrZXJuZWwgbmFtZSwgd2l0aCBhbGwgc3BlY2lhbCBjaGFyYWN0ZXJzIGFuZAorICAgc3BhY2VzIHJlcGxhY2VkIGJ5IHVuZGVyc2NvcmVzKS4KKyAgIFRoYXQgY29uZmlnIG9wdGlvbiBtdXN0IGhhdmUgKm5laXRoZXIqIGEgdHlwZSwgKm5vciogYSBwcm9tcHQhIEFsc28sIGl0IGNhbgorICAgKm5vdCogZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwuCisgICAgIEVnLjogS0VSTkVMX2xpbnV4LCBLRVJORUxfYmFyZV9tZXRhbAorICAgKyBtYW5kYXRvcnk6CisgICAgICAgZGVmaW5lcyBhICh0ZXJzZSkgaGVscCBlbnRyeSBmb3IgdGhpcyBrZXJuZWwuCisgICAgICAgRWcuOgorICAgICAgICAgY29uZmlnIEtFUk5FTF9iYXJlX21ldGFsCisgICAgICAgICAgIGhlbHAKKyAgICAgICAgICAgICBCdWlsZCBhIGNvbXBpbGVyIGZvciB1c2Ugd2l0aG91dCBhbnkga2VybmVsLgorICAgKyBvcHRpb25hbDoKKyAgICAgICBzZWxlY3RzIGFkZXF1YXRlIGFzc29jaWF0ZWQgY29uZmlnIG9wdGlvbnMuCisgICAgICAgRWcuOgorICAgICAgICAgY29uZmlnIEtFUk5FTF9iYXJlX21ldGFsCisgICAgICAgICAgIHNlbGVjdCBCQVJFX01FVEFMCisgICAgICAgICAgIGhlbHAKKyAgICAgICAgICAgICBCdWlsZCBhIGNvbXBpbGVyIGZvciB1c2Ugd2l0aG91dCBhbnkga2VybmVsLgorCisgPiBvdGhlciBrZXJuZWwgc3BlY2lmaWMgb3B0aW9ucywgYXQgeW91ciBkaXNjcmV0aW9uLiBOb3RlIGhvd2V2ZXIgdGhhdCwgdG8KKyAgIGF2b2lkIG5hbWUtY2xhc2hpbmcsIHN1Y2ggb3B0aW9ucyBzaG91bGQgYmUgcHJlZml4ZWQgd2l0aAorICAgIktFUk5FTF8la2VybmVsX25hbWUlIiwgd2hlcmUgJWtlcm5lbF9uYW1lJSBpcyBhZ2FpbiB0cCBiZSByZXBsYWNlZCB3aXRoCisgICB0aGUgYWN0dWFsIGtlcm5lbCBuYW1lLgorICAgKE5vdGU6IGR1ZSB0byBoaXN0b3JpY2FsIHJlYXNvbnMsIGFuZCBsYWNrIG9mIHRpbWUgdG8gY2xlYW4gdXAgdGhlIGNvZGUsCisgICAgSSBtYXkgaGF2ZSBsZWZ0IHNvbWUgY29uZmlnIG9wdGlvbnMgdGhhdCBkbyBub3QgY29tcGxldGVseSBjb25mb3JtIHRvCisgICAgdGhpcywgYXMgdGhlIGtlcm5lbCBuYW1lIHdhcyB3cml0dGVuIGFsbCB1cHBlciBjYXNlLiBIb3dldmVyLCB0aGUgcHJlZml4CisgICAgaXMgdW5pcXVlIGFtb25nIGtlcm5lbHMsIGFuZCBkb2VzIG5vdCBjYXVzZSBoYXJtKS4KKworVGhlIGtlcm5lbCdzICIuc2giIGZpbGUgQVBJOgorID4gaXMgYSBiYXNoIHNjcmlwdCBmcmFnbWVudAorCisgPiBkZWZpbmVzIHRoZSBmdW5jdGlvbiBDVF9Eb0tlcm5lbFR1cGxlVmFsdWVzCisgICArIHNlZSB0aGUgYXJjaGl0ZWN0dXJlJ3MgQ1RfRG9BcmNoVHVwbGVWYWx1ZXMsIGV4Y2VwdCBmb3I6CisgICArIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgQ1RfVEFSR0VUX0tFUk5FTCwgdGhlIGtlcm5lbCBwYXJ0IG9mIHRoZQorICAgICB0YXJnZXQgdHVwbGUKKyAgICsgcmV0dXJuIHZhbHVlOiBpZ25vcmVkCisKKyA+IGRlZmluZXMgdGhlIGZ1bmN0aW9uICJkb19rZXJuZWxfZ2V0IjoKKyAgICsgcGFyYW1ldGVyczogbm9uZQorICAgKyBlbnZpcm9ubWVudDoKKyAgICAgIC0gYWxsIHZhcmlhYmxlcyBmcm9tIHRoZSAiLmNvbmZpZyIgZmlsZS4KKyAgICsgcmV0dXJuIHZhbHVlOiAwIGZvciBzdWNjZXNzLCAhMCBmb3IgZmFpbHVyZS4KKyAgICsgYmVoYXZpb3I6IGRvd25sb2FkIHRoZSBrZXJuZWwncyBzb3VyY2VzLCBhbmQgc3RvcmUgdGhlIHRhcmJhbGwgaW50bworICAgICAiJHtDVF9UQVJCQUxMU19ESVJ9Ii4gVG8gdGhpcyBlbmQsIGEgZnVuY3Rpb25zIGlzIGF2YWlsYWJsZSwgdGhhdAorICAgICBhYnN0cmFjdHMgZG93bmxvYWRpbmcgdGFyYmFsbHM6CisgICAgIC0gQ1RfRG9HZXQgPHRhcmJhbGxfYmFzZV9uYW1lPiA8VVJMMSBbVVJMLi4uXT4KKyAgICAgICBFZy46IENUX0RvR2V0IGxpbnV4LTIuNi4yNi41IGZ0cDovL2Z0cC5rZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvdjIuNgorICAgICBOb3RlOiByZXRyaWV2aW5nIHNvdXJjZXMgZnJvbSBzdm4sIGN2cywgZ2l0IGFuZCB0aGUgbGlrZXMgaXMgbm90IHN1cHBvcnRlZAorICAgICBieSBDVF9Eb0dldC4gWW91J2xsIGhhdmUgdG8gZG8gdGhpcyBieSBoYW5kLCBhcyBpdCBpcyBkb25lIGZvciBlZ2xpYmMgaW4KKyAgICAgInNjcmlwdHMvYnVpbGQvbGliYy9lZ2xpYmMuc2giCisKKyA+IGRlZmluZXMgdGhlIGZ1bmN0aW9uICJkb19rZXJuZWxfZXh0cmFjdCI6CisgICArIHBhcmFtZXRlcnM6IG5vbmUKKyAgICsgZW52aXJvbm1lbnQ6CisgICAgICAtIGFsbCB2YXJpYWJsZXMgZnJvbSB0aGUgIi5jb25maWciIGZpbGUsCisgICArIHJldHVybiB2YWx1ZTogMCBmb3Igc3VjY2VzcywgITAgZm9yIGZhaWx1cmUuCisgICArIGJlaGF2aW9yOiBleHRyYWN0IHRoZSBrZXJuZWwncyB0YXJiYWxsIGludG8gIiR7Q1RfU1JDX0RJUn0iLCBhbmQgYXBwbHkKKyAgICAgcmVxdWlyZWQgcGF0Y2hlcy4gVG8gdGhpcyBlbmQsIGEgZnVuY3Rpb24gaXMgYXZhaWxhYmxlLCB0aGF0IGFic3RyYWN0cworICAgICBleHRyYWN0aW5nIHRhcmJhbGxzOgorICAgICAtIENUX0V4dHJhY3RBbmRQYXRjaCA8dGFyYmFsbF9iYXNlX25hbWU+CisgICAgICAgRWcuOiBDVF9FeHRyYWN0QW5kUGF0Y2ggbGludXgtMi42LjI2LjUKKworID4gZGVmaW5lcyB0aGUgZnVuY3Rpb24gImRvX2tlcm5lbF9oZWFkZXJzIjoKKyAgICsgcGFyYW1ldGVyczogbm9uZQorICAgKyBlbnZpcm9ubWVudDoKKyAgICAgIC0gYWxsIHZhcmlhYmxlcyBmcm9tIHRoZSAiLmNvbmZpZyIgZmlsZSwKKyAgICsgcmV0dXJuIHZhbHVlOiAwIGZvciBzdWNjZXNzLCAhMCBmb3IgZmFpbHVyZS4KKyAgICsgYmVoYXZpb3I6IGluc3RhbGwgdGhlIGtlcm5lbCBoZWFkZXJzIChpZiBhbnkpIGluICIke0NUX1NZU1JPT1RfRElSfS91c3IvaW5jbHVkZSIKKworID4gZGVmaW5lcyBhbnkga2VybmVsLXNwZWNpZmljIGhlbHBlciBmdW5jdGlvbnMKKyAgIFRoZXNlIGZ1bmN0aW9ucywgaWYgYW55LCBtdXN0IGJlIHByZWZpeGVkIHdpdGggImRvX2tlcm5lbF8lQ1RfS0VSTkVMJV8iLAorICAgd2hlcmUgJyVDVF9LRVJORUwlJyBpcyB0byBiZSByZXBsYWNlZCB3aXRoIHRoZSBhY3R1YWwga2VybmVsIG5hbWUsIHRvIGF2b2lkCisgICBhbnkgbmFtZS1jbGFzaGluZy4KKworWW91IGNhbiBoYXZlIGEgbG9vayBhdCAiY29uZmlnL2tlcm5lbC9saW51eC5pbiIgYW5kICJzY3JpcHRzL2J1aWxkL2tlcm5lbC9saW51eC5zaCIKK2FzIGFuIGV4YW1wbGUgb2Ygd2hhdCBhIGNvbXBsZXgga2VybmVsIGRlc2NyaXB0aW9uIGxvb2tzIGxpa2UuCisKKworQWRkaW5nIGEgbmV3IHZlcnNpb24gb2YgYSBjb21wb25lbnQgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitXaGVuIGEgbmV3IGNvbXBvbmVudCwgc3VjaCBhcyB0aGUgTGludXgga2VybmVsLCBnY2Mgb3IgYW55IG90aGVyIGlzIHJlbGVhc2VkLAorYWRkaW5nIHRoZSBuZXcgdmVyc2lvbiB0byBjcm9zc3Rvb2wtTkcgaXMgcXVpdGUgZWFzeS4gVGhlcmUgaXMgYSBzY3JpcHQgdGhhdAord2lsbCBkbyBhbGwgdGhhdCBmb3IgeW91OgorICBzY3JpcHRzL2FkZFRvb2xWZXJzaW9uLnNoCisKK1J1biBpdCB3aXRoIG5vIG9wdGlvbiB0byBnZXQgc29tZSBoZWxwLgorCisKK0J1aWxkIHNjcmlwdHMgfAorLS0tLS0tLS0tLS0tLS0rCisKK1RvIEJlIFdyaXR0ZW4gbGF0ZXIuLi4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9jdC1uZy0xLjEzLjQvOSAtIEhvdyBpcyBhIHRvb2xjaGFpbiBjb25zdHJ1Y3RlZC50eHQgYi9zaGFyZS9kb2MvY3QtbmctMS4xMy40LzkgLSBIb3cgaXMgYSB0b29sY2hhaW4gY29uc3RydWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOGU2YTYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvY3QtbmctMS4xMy40LzkgLSBIb3cgaXMgYSB0b29sY2hhaW4gY29uc3RydWN0ZWQudHh0CkBAIC0wLDAgKzEsMjU3IEBACitGaWxlLi4uLi4uLi4uOiA5IC0gQnVpbGQgcHJvY2VkdXJlIG92ZXJ2aWV3LnR4dAorQ29weXJpZ2h0Li4uLjogKEMpIDIwMTEgWWFubiBFLiBNT1JJTiA8eWFubi5tb3Jpbi4xOTk4QGFuY2llbnMuZW5pYi5mcj4KK0xpY2Vuc2UuLi4uLi46IENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gU2hhcmUgQWxpa2UgKENDLWJ5LXNhKSwgdjIuNQorCisKK0hvdyBpcyBhIHRvb2xjaGFpbiBjb25zdHJ1Y3RlZD8gLworX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8KKworVGhpcyBpcyB0aGUgcmVzdWx0IG9mIGEgZGlzY3Vzc2lvbiB3aXRoIEZyYW5jZXNjbyBUdXJjbyA8bWFpbEBmdHVyY28ub3JnPjoKKyAgaHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2Nyb3NzZ2NjLzIwMTEtMDEvbXNnMDAwNjAuaHRtbAorCitGcmFuY2VzY28gaGFzIGEgbmljZSB0dXRvcmlhbCBmb3IgYmVnaW5uZXJzLCBhbG9uZyB3aXRoIGEgc2FtcGxlLCBzdGVwLWJ5LQorc3RlcCBwcm9jZWR1cmUgdG8gYnVpbGQgYSB0b29sY2hhaW4gZm9yIGFuIEFSTSB0YXJnZXQgZnJvbSBhbiB4ODZfNjQgRGViaWFuCitob3N0OgorICBodHRwOi8vZnR1cmNvLm9yZy93aWtpL2Rva3UucGhwP2lkPWRlYmlhbjpjcm9zcy1jb21waWxlcgorCitUaGFuayB5b3UgRnJhbmNlc2NvIGZvciBpbml0aWF0aW5nIHRoaXMhCisKKworSSB3YW50IGEgY3Jvc3MtY29tcGlsZXIhIFdoYXQgaXMgdGhpcyB0b29sY2hhaW4geW91J3JlIHNwZWFraW5nIGFib3V0PyB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworQSBjcm9zcy1jb21waWxlciBpcyBpbiBmYWN0IGEgY29sbGVjdGlvbiBvZiBkaWZmZXJlbnQgdG9vbHMgc2V0IHVwIHRvCit0aWdodGx5IHdvcmsgdG9nZXRoZXIuIFRoZSB0b29scyBhcmUgYXJyYW5nZWQgaW4gYSB3YXkgdGhhdCB0aGV5IGFyZQorY2hhaW5lZCwgaW4gYSBraW5kIG9mIGNhc2NhZGUsIHdoZXJlIHRoZSBvdXRwdXQgZnJvbSBvbmUgYmVjb21lcyB0aGUKK2lucHV0IHRvIGFub3RoZXIgb25lLCB0byB1bHRpbWF0ZWx5IHByb2R1Y2UgdGhlIGFjdHVhbCBiaW5hcnkgY29kZSB0aGF0CitydW5zIG9uIGEgbWFjaGluZS4gU28sIHdlIGNhbGwgdGhpcyBhcnJhbmdlbWVudCBhICJ0b29sY2hhaW4iLiBXaGVuCithIHRvb2xjaGFpbiBpcyBtZWFudCB0byBnZW5lcmF0ZSBjb2RlIGZvciBhIG1hY2hpbmUgZGlmZmVyZW50IGZyb20gdGhlCittYWNoaW5lIGl0IHJ1bnMgb24sIHRoaXMgaXMgY2FsbGVkIGEgY3Jvc3MtdG9vbGNoYWluLgorCisKK1NvLCB3aGF0IGFyZSB0aG9zZSBjb21wb25lbnRzIGluIGEgdG9vbGNoYWluPyB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitUaGUgY29tcG9uZW50cyB0aGF0IHBsYXkgYSByb2xlIGluIHRoZSB0b29sY2hhaW4gYXJlIGZpcnN0IGFuZCBmb3JlbW9zdAordGhlIGNvbXBpbGVyIGl0c2VsZi4gVGhlIGNvbXBpbGVyIHR1cm5zIHNvdXJjZSBjb2RlIChpbiBDLCBDKyssIHdoYXRldmVyKQoraW50byBhc3NlbWJseSBjb2RlLiBUaGUgY29tcGlsZXIgb2YgY2hvaWNlIGlzIHRoZSBHTlUgY29tcGlsZXIgY29sbGVjdGlvbiwKK3dlbGwga25vd24gYXMgJ2djYycuCisKK1RoZSBhc3NlbWJseSBjb2RlIGlzIGludGVycHJldGVkIGJ5IHRoZSBhc3NlbWJsZXIgdG8gZ2VuZXJhdGUgb2JqZWN0IGNvZGUuCitUaGlzIGlzIGRvbmUgYnkgdGhlIGJpbmFyeSB1dGlsaXRpZXMsIHN1Y2ggYXMgdGhlIEdOVSAnYmludXRpbHMnLgorCitPbmNlIHRoZSBkaWZmZXJlbnQgb2JqZWN0IGNvZGUgZmlsZXMgaGF2ZSBiZWVuIGdlbmVyYXRlZCwgdGhleSBnb3QgdG8gZ2V0CithZ2dyZWdhdGVkIHRvZ2V0aGVyIHRvIGZvcm0gdGhlIGZpbmFsIGV4ZWN1dGFibGUgYmluYXJ5LiBUaGlzIGlzIGNhbGxlZAorbGlua2luZywgYW5kIGlzIGFjaGlldmVkIHdpdGggdGhlIHVzZSBvZiBhIGxpbmtlci4gVGhlIEdOVSAnYmludXRpbHMnIGFsc28KK2NvbWUgd2l0aCBhIGxpbmtlci4KKworU28gZmFyLCB3ZSBnZXQgYSBjb21wbGV0ZSB0b29sY2hhaW4gdGhhdCBpcyBjYXBhYmxlIG9mIHR1cm5pbmcgc291cmNlIGNvZGUKK2ludG8gYWN0dWFsIGV4ZWN1dGFibGUgY29kZS4gRGVwZW5kaW5nIG9uIHRoZSBPcGVyYXRpbmcgU3lzdGVtLCBvciB0aGUgbGFjawordGhlcmVvZiwgcnVubmluZyBvbiB0aGUgdGFyZ2V0LCB3ZSBhbHNvIG5lZWQgdGhlIEMgbGlicmFyeS4gVGhlIEMgbGlicmFyeQorcHJvdmlkZXMgYSBzdGFuZGFyZCBhYnN0cmFjdGlvbiBsYXllciB0aGF0IHBlcmZvcm1zIGJhc2ljIHRhc2tzIChzdWNoIGFzCithbGxvY2F0aW5nIG1lbW9yeSwgcHJpbnRpbmcgb3V0cHV0IG9uIGEgdGVybWluYWwsIG1hbmFnaW5nIGZpbGUgYWNjZXNzLi4uKS4KK1RoZXJlIGFyZSBtYW55IEMgbGlicmFyaWVzLCBlYWNoIHRhcmdldGVkIHRvIGRpZmZlcmVudCBzeXN0ZW1zLiBGb3IgdGhlCitMaW51eCAvZGVza3RvcC8sIHRoZXJlIGlzIGdsaWJjIG9yIGVnbGliYyBvciBldmVuIHVDbGliYywgZm9yIGVtYmVkZGVkIExpbnV4LAoreW91IGhhdmUgYSBjaG9pY2Ugb2YgZWdsaWJjIG9yIHVDbGliYywgd2hpbGUgZm9yIHN5c3RlbSB3aXRob3V0IGFuIE9wZXJhdGluZworU3lzdGVtLCB5b3UgbWF5IHVzZSBuZXdsaWIsIGRpZXRsaWJjLCBvciBldmVuIG5vbmUgYXQgYWxsLiBUaGVyZSBhIGZldyBvdGhlcgorQyBsaWJyYXJpZXMsIGJ1dCB0aGV5IGFyZSBub3QgYXMgd2lkZWx5IHVzZWQsIGFuZC9vciBhcmUgdGFyZ2V0ZWQgdG8gdmVyeQorc3BlY2lmaWMgbmVlZHMgKGVnLiBrbGliYyBpcyBhIHZlcnkgc21hbGwgc3Vic2V0IG9mIHRoZSBDIGxpYnJhcnkgYWltZWQgYXQKK2J1aWxkaW5nIGNvbnN0cmFpbmVkIGluaXRpYWwgcmFtZGlza3MpLgorCitVbmRlciBMaW51eCwgdGhlIEMgbGlicmFyeSBuZWVkcyB0byBrbm93IHRoZSBBUEkgdG8gdGhlIGtlcm5lbCB0byBkZWNpZGUKK3doYXQgZmVhdHVyZXMgYXJlIHByZXNlbnQsIGFuZCBpZiBuZWVkZWQsIHdoYXQgZW11bGF0aW9uIHRvIGluY2x1ZGUgZm9yCittaXNzaW5nIGZlYXR1cmVzLiBUaGF0IEFQSSBpcyBwcm92aWRlZCBieSB0aGUga2VybmVsIGhlYWRlcnMuIE5vdGU6IHRoaXMKK2lzIExpbnV4LXNwZWNpZmljIChhbmQgcG90ZW50aWFsbHkgYSB2ZXJ5IGZldyBvdGhlcnMpLCB0aGUgQyBsaWJyYXJ5IG9uCitvdGhlciBPU2VzIGRvIG5vdCBuZWVkIHRoZSBrZXJuZWwgaGVhZGVycy4KKworCitBbmQgbm93LCBob3cgZG8gYWxsIHRoZXNlIGNvbXBvbmVudHMgY2hhaW5lZCB0b2dldGhlcj8gfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworU28gZmFyLCBhbGwgbWFqb3IgY29tcG9uZW50cyBoYXZlIGJlZW4gY292ZXJlZCwgYnV0IHlldCB0aGVyZSBpcyBhIHNwZWNpZmljCitvcmRlciB0aGV5IG5lZWQgdG8gYmUgYnVpbHQuIEhlcmUgd2Ugc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUsIHN0YXJ0aW5nCit3aXRoIHRoZSBjb21waWxlciB3ZSB3YW50IHRvIHVsdGltYXRlbHkgdXNlLiBXZSBjYWxsIHRoYXQgY29tcGlsZXIgdGhlCisnZmluYWwgY29tcGlsZXInLgorCisgIC0gdGhlIGZpbmFsIGNvbXBpbGVyIG5lZWRzIHRoZSBDIGxpYnJhcnksIHRvIGtub3cgaG93IHRvIHVzZSBpdCwKK2J1dDoKKyAgLSBidWlsZGluZyB0aGUgQyBsaWJyYXJ5IHJlcXVpcmVzIGEgY29tcGlsZXIKKworQSBuZWVkcyBCIHdoaWNoIG5lZWRzIEEuIFRoaXMgaXMgdGhlIGNsYXNzaWMgY2hpY2tlbiduJ2VnZyBwcm9ibGVtLi4uIFRoaXMKK2lzIHNvbHZlZCBieSBidWlsZGluZyBhIHN0cmlwcGVkLWRvd24gY29tcGlsZXIgdGhhdCBkb2VzIG5vdCBuZWVkIHRoZSBDCitsaWJyYXJ5LCBidXQgaXMgY2FwYWJsZSBvZiBidWlsZGluZyBpdC4gV2UgY2FsbCBpdCBhIGJvb3RzdHJhcCwgaW5pdGlhbCwgb3IKK2NvcmUgY29tcGlsZXIuIFNvIGhlcmUgaXMgdGhlIG5ldyBkZXBlbmRlbmN5IGxpc3Q6CisKKyAgLSB0aGUgZmluYWwgY29tcGlsZXIgbmVlZHMgdGhlIEMgbGlicmFyeSwgdG8ga25vdyBob3cgdG8gdXNlIGl0LAorICAtIGJ1aWxkaW5nIHRoZSBDIGxpYnJhcnkgcmVxdWlyZXMgYSBjb3JlIGNvbXBpbGVyCitidXQ6CisgIC0gdGhlIGNvcmUgY29tcGlsZXIgbmVlZHMgdGhlIEMgbGlicmFyeSBoZWFkZXJzIGFuZCBzdGFydCBmaWxlcywgdG8ga25vdworICAgIGhvdyB0byB1c2UgdGhlIEMgbGlicmFyeQorCitCIG5lZWRzIEMgd2hpY2ggbmVlZHMgQi4gQ2hpY2tlbiduJ2VnZywgYWdhaW4uIFRvIHNvbHZlIHRoaXMgb25lLCB3ZSB3aWxsCituZWVkIHRvIGJ1aWxkIGEgQyBsaWJyYXJ5IHRoYXQgd2lsbCBvbmx5IGluc3RhbGwgaXRzIGhlYWRlcnMgYW5kIHN0YXJ0CitmaWxlcy4gVGhlIHN0YXJ0IGZpbGVzIGFyZSBhIHZlcnkgZmV3IGZpbGVzIHRoYXQgZ2NjIG5lZWRzIHRvIGJlIGFibGUgdG8KK3R1cm4gb24gdGhyZWFkIGxvY2FsIHN0b3JhZ2UgKFRMUykgb24gYW4gTlBUTCBzeXN0ZW0uIFNvIG5vdyB3ZSBoYXZlOgorCisgIC0gdGhlIGZpbmFsIGNvbXBpbGVyIG5lZWRzIHRoZSBDIGxpYnJhcnksIHRvIGtub3cgaG93IHRvIHVzZSBpdCwKKyAgLSBidWlsZGluZyB0aGUgQyBsaWJyYXJ5IHJlcXVpcmVzIGEgY29yZSBjb21waWxlcgorICAtIHRoZSBjb3JlIGNvbXBpbGVyIG5lZWRzIHRoZSBDIGxpYnJhcnkgaGVhZGVycyBhbmQgc3RhcnQgZmlsZXMsIHRvIGtub3cKKyAgICBob3cgdG8gdXNlIHRoZSBDIGxpYnJhcnkKK2J1dDoKKyAgLSBidWlsZGluZyB0aGUgc3RhcnQgZmlsZXMgcmVxdWlyZSBhIGNvbXBpbGVyCisKK0dlZXouLi4gQyBuZWVkcyBEIHdoaWNoIG5lZWRzIEMsIHlldCBhZ2Fpbi4gU28gd2UgbmVlZCB0byBidWlsZCBhIHlldAorc2ltcGxlciBjb21waWxlciwgdGhhdCBkb2VzIG5vdCBuZWVkIHRoZSBoZWFkZXJzIGFuZCBkb2VzIG5lZWQgdGhlIHN0YXJ0CitmaWxlcy4gVGhpcyBjb21waWxlciBpcyBhbHNvIGEgYm9vdHN0cmFwLCBpbml0aWFsIG9yIGNvcmUgY29tcGlsZXIuIEluIG9yZGVyCit0byBkaWZmZXJlbnRpYXRlIHRoZSB0d28gY29yZSBjb21waWxlcnMsIGxldCdzIGNhbGwgdGhhdCBvbmUgImNvcmUgcGFzcyAxIiwKK2FuZCB0aGUgZm9ybWVyIG9uZSAiY29yZSBwYXNzIDIiLiBUaGUgZGVwZW5kZW5jeSBsaXN0IGJlY29tZXM6CisKKyAgLSB0aGUgZmluYWwgY29tcGlsZXIgbmVlZHMgdGhlIEMgbGlicmFyeSwgdG8ga25vdyBob3cgdG8gdXNlIGl0LAorICAtIGJ1aWxkaW5nIHRoZSBDIGxpYnJhcnkgcmVxdWlyZXMgYSBjb21waWxlcgorICAtIHRoZSBjb3JlIHBhc3MgMiBjb21waWxlciBuZWVkcyB0aGUgQyBsaWJyYXJ5IGhlYWRlcnMgYW5kIHN0YXJ0IGZpbGVzLAorICAgIHRvIGtub3cgaG93IHRvIHVzZSB0aGUgQyBsaWJyYXJ5CisgIC0gYnVpbGRpbmcgdGhlIHN0YXJ0IGZpbGVzIHJlcXVpcmVzIGEgY29tcGlsZXIKKyAgLSB3ZSBuZWVkIGEgY29yZSBwYXNzIDEgY29tcGlsZXIKKworQW5kIGFzIHdlIHNhaWQgZWFybGllciwgdGhlIEMgbGlicmFyeSBhbHNvIHJlcXVpcmVzIHRoZSBrZXJuZWwgaGVhZGVycy4KK1RoZXJlIGlzIG5vIHJlcXVpcmVtZW50IGZvciB0aGUga2VybmVsIGhlYWRlcnMsIHNvIGVuZCBvZiBzdG9yeSBpbiB0aGlzCitjYXNlOgorCisgIC0gdGhlIGZpbmFsIGNvbXBpbGVyIG5lZWRzIHRoZSBDIGxpYnJhcnksIHRvIGtub3cgaG93IHRvIHVzZSBpdCwKKyAgLSBidWlsZGluZyB0aGUgQyBsaWJyYXJ5IHJlcXVpcmVzIGEgY29yZSBjb21waWxlcgorICAtIHRoZSBjb3JlIHBhc3MgMiBjb21waWxlciBuZWVkcyB0aGUgQyBsaWJyYXJ5IGhlYWRlcnMgYW5kIHN0YXJ0IGZpbGVzLAorICAgIHRvIGtub3cgaG93IHRvIHVzZSB0aGUgQyBsaWJyYXJ5CisgIC0gYnVpbGRpbmcgdGhlIHN0YXJ0IGZpbGVzIHJlcXVpcmVzIGEgY29tcGlsZXIgYW5kIHRoZSBrZXJuZWwgaGVhZGVycworICAtIHdlIG5lZWQgYSBjb3JlIHBhc3MgMSBjb21waWxlcgorCitXZSBuZWVkIHRvIGFkZCBhIGZldyBuZXcgcmVxdWlyZW1lbnRzLiBUaGUgbW9tZW50IHdlIGNvbXBpbGUgY29kZSBmb3IgdGhlCit0YXJnZXQsIHdlIG5lZWQgdGhlIGFzc2VtYmxlciBhbmQgdGhlIGxpbmtlci4gU3VjaCBjb2RlIGlzLCBvZiBjb3Vyc2UsCitidWlsdCBmcm9tIHRoZSBDIGxpYnJhcnksIHNvIHdlIG5lZWQgdG8gYnVpbGQgdGhlIGJpbnV0aWxzIGJlZm9yZSB0aGUgQworbGlicmFyeSBzdGFydCBmaWxlcywgYW5kIHRoZSBjb21wbGV0ZSBDIGxpYnJhcnkgaXRzZWxmLiBBbHNvLCBzb21lIGNvZGUKK2luIGdjYyB3aWxsIHR1cm4gdG8gcnVuIG9uIHRoZSB0YXJnZXQgYXMgd2VsbC4gTHVja2lseSwgdGhlcmUgaXMgbm8KK3JlcXVpcmVtZW50IGZvciB0aGUgYmludXRpbHMuIFNvLCBvdXIgZGVwZW5kZW5jeSBjaGFpbiBpcyBhcyBmb2xsb3dzOgorCisgIC0gdGhlIGZpbmFsIGNvbXBpbGVyIG5lZWRzIHRoZSBDIGxpYnJhcnksIHRvIGtub3cgaG93IHRvIHVzZSBpdCwgYW5kIHRoZQorICAgIGJpbnV0aWxzCisgIC0gYnVpbGRpbmcgdGhlIEMgbGlicmFyeSByZXF1aXJlcyBhIGNvcmUgcGFzcyAyIGNvbXBpbGVyIGFuZCB0aGUgYmludXRpbHMKKyAgLSB0aGUgY29yZSBwYXNzIDIgY29tcGlsZXIgbmVlZHMgdGhlIEMgbGlicmFyeSBoZWFkZXJzIGFuZCBzdGFydCBmaWxlcywKKyAgICB0byBrbm93IGhvdyB0byB1c2UgdGhlIEMgbGlicmFyeSwgYW5kIHRoZSBiaW51dGlscworICAtIGJ1aWxkaW5nIHRoZSBzdGFydCBmaWxlcyByZXF1aXJlcyBhIGNvbXBpbGVyLCB0aGUga2VybmVsIGhlYWRlcnMgYW5kIHRoZQorICAgIGJpbnV0aWxzCisgIC0gdGhlIGNvcmUgcGFzcyAxIGNvbXBpbGVyIG5lZWRzIHRoZSBiaW51dGlscworCitXaGljaCB0dXJucyBpbiB0aGlzIG9yZGVyIHRvIGJ1aWxkIHRoZSBjb21wb25lbnRzOgorCisgIDEgYmludXRpbHMKKyAgMiBjb3JlIHBhc3MgMSBjb21waWxlcgorICAzIGtlcm5lbCBoZWFkZXJzCisgIDQgQyBsaWJyYXJ5IGhlYWRlcnMgYW5kIHN0YXJ0IGZpbGVzCisgIDUgY29yZSBwYXNzIDIgY29tcGlsZXIKKyAgNiBjb21wbGV0ZSBDIGxpYnJhcnkKKyAgNyBmaW5hbCBjb21waWxlcgorCitZZXMhIDotKSBCdXQgYXJlIHdlIGRvbmUgeWV0PworCitJbiBmYWN0LCBubywgdGhlcmUgYXJlIHN0aWxsIG1pc3NpbmcgZGVwZW5kZW5jaWVzLiBBcyBmYXIgYXMgdGhlIHRvb2xzCit0aGVtc2VsdmVzIGFyZSBpbnZvbHZlZCwgd2UgZG8gbm90IG5lZWQgYW55dGhpbmcgZWxzZS4KKworQnV0IGdjYyBoYXMgYSBmZXcgcHJlLXJlcXVpc2l0ZXMuIEl0IHJlbGllcyBvbiBhIGZldyBleHRlcm5hbCBsaWJyYXJpZXMgdG8KK3BlcmZvcm0gc29tZSBub24tdHJpdmlhbCB0YXNrcyAoc3VjaCBhcyBoYW5kbGluZyBjb21wbGV4IG51bWJlcnMgaW4KK2NvbnN0YW50cy4uLikuIFRoZXJlIGFyZSBhIGZldyBvcHRpb25zIHRvIGJ1aWxkIHRob3NlIGxpYnJhcmllcy4gRmlyc3QsIG9uZQorbWF5IHRoaW5rIHRvIHJlbHkgb24gYSBMaW51eCBkaXN0cmlidXRpb24gdG8gcHJvdmlkZSB0aG9zZSBsaWJyYXJpZXMuIEFsYXMsCit0aGV5IHdlcmUgbm90IHdpZGVseSBhdmFpbGFibGUgdW50aWwgdmVyeSwgdmVyeSByZWNlbnRseS4gU28sIGlmIHRoZSBkaXN0cm8KK2lzIG5vdCB0b28gcmVjZW50LCBjaGFuY2VzIGFyZSB0aGF0IHdlIHdpbGwgaGF2ZSB0byBidWlsZCB0aG9zZSBsaWJyYXJpZXMKKyh3aGljaCB3ZSBkbyBiZWxvdykuIFRoZSBhZmZlY3RlZCBsaWJyYXJpZXMgYXJlOgorCisgIC0gdGhlIEdOVSBNdWx0aXBsZSBQcmVjaXNpb24gQXJpdGhtZXRpYyBMaWJyYXJ5LCBHTVAKKyAgLSB0aGUgQyBsaWJyYXJ5IGZvciBtdWx0aXBsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgY29tcHV0YXRpb25zIHdpdGgKKyAgICBjb3JyZWN0IHJvdW5kaW5nLCBNUEZSCisgIC0gdGhlIEMgbGlicmFyeSBmb3IgdGhlIGFyaXRobWV0aWMgb2YgY29tcGxleCBudW1iZXJzLCBNUEMKKworVGhlIGRlcGVuZGVuY2llcyBmb3IgdGhvc2UgbGlicmFyaWVzIGFyZToKKworICAtIE1QQyByZXF1aXJlcyBHTVAgYW5kIE1QRlIKKyAgLSBNUEZSIHJlcXVpcmVzIEdNUAorICAtIEdNUCBoYXMgbm8gcHJlLXJlcXVpc2l0ZQorCitTbywgdGhlIGJ1aWxkIG9yZGVyIGJlY29tZXM6CisKKyAgMSBHTVAKKyAgMiBNUEZSCisgIDMgTVBDCisgIDQgYmludXRpbHMKKyAgNSBjb3JlIHBhc3MgMSBjb21waWxlcgorICA2IGtlcm5lbCBoZWFkZXJzCisgIDcgQyBsaWJyYXJ5IGhlYWRlcnMgYW5kIHN0YXJ0IGZpbGVzCisgIDggY29yZSBwYXNzIDIgY29tcGlsZXIKKyAgOSBjb21wbGV0ZSBDIGxpYnJhcnkKKyAxMCBmaW5hbCBjb21waWxlcgorCitZZXMhIE9yIHlldCBzb21lIG1vcmU/CisKK1RoaXMgaXMgbm93IHN1ZmZpY2llbnQgdG8gYnVpbGQgYSBmdW5jdGlvbmFsIHRvb2xjaGFpbi4gU28gaWYgeW91J3ZlIGhhZAorZW5vdWdoIGZvciBub3csIHlvdSBjYW4gc3RvcCBoZXJlLiBPciBpZiB5b3UgYXJlIGN1cmlvdXMsIHlvdSBjYW4gY29udGludWUKK3JlYWRpbmcuCisKK2djYyBjYW4gYWxzbyBtYWtlIHVzZSBvZiBhIGZldyBvdGhlciBleHRlcm5hbCBsaWJyYXJpZXMuIFRoZXNlIGFkZGl0aW9uYWwsCitvcHRpb25hbCBsaWJyYXJpZXMgYXJlIHVzZWQgdG8gZW5hYmxlIGFkdmFuY2VkIGZlYXR1cmVzIGluIGdjYywgc3VjaCBhcworbG9vcCBvcHRpbWlzYXRpb24gKEdSQVBISVRFKSBhbmQgTGluayBUaW1lIE9wdGltaXNhdGlvbiAoTFRPKS4gSWYgeW91IHdhbnQKK3RvIHVzZSB0aGVzZSwgeW91J2xsIG5lZWQgdGhyZWUgYWRkaXRpb25hbCBsaWJyYXJpZXM6CisKK1RvIGVuYWJsZSBHUkFQSElURToKKyAgLSB0aGUgUGFybWEgUG9seWhlZHJhIExpYnJhcnksIFBQTAorICAtIHRoZSBDaHVua3kgTG9vcCBHZW5lcmF0b3IsIHVzaW5nIHRoZSBQUEwgYmFja2VuZCwgQ0xvb0cvUFBMCisKK1RvIGVuYWJsZSBMVE86CisgIC0gdGhlIEVMRiBvYmplY3QgZmlsZSBhY2Nlc3MgbGlicmFyeSwgbGliZWxmCisKK1RoZSBkZXBlbmRlbmNpZXMgZm9yIHRob3NlIGxpYnJhcmllcyBhcmU6CisKKyAgLSBQUEwgcmVxdWlyZXMgR01QCisgIC0gQ0xvb0cvUFBMIHJlcXVpcmVzIEdNUCBhbmQgUFBMCisgIC0gbGliZWxmIGhhcyBubyBwcmUtcmVxdWlzaXRlcworCitUaGUgbGlzdCBub3cgbG9va3MgbGlrZSAob3B0aW9uYWwgbGlicyB3aXRoIGEgKik6CisKKyAgMSBHTVAKKyAgMiBNUEZSCisgIDMgTVBDCisgIDQgUFBMICoKKyAgNSBDTG9vRy9QUEwgKgorICA2IGxpYmVsZiAqCisgIDcgYmludXRpbHMKKyAgOCBjb3JlIHBhc3MgMSBjb21waWxlcgorICA5IGtlcm5lbCBoZWFkZXJzCisgMTAgQyBsaWJyYXJ5IGhlYWRlcnMgYW5kIHN0YXJ0IGZpbGVzCisgMTEgY29yZSBwYXNzIDIgY29tcGlsZXIKKyAxMiBjb21wbGV0ZSBDIGxpYnJhcnkKKyAxMyBmaW5hbCBjb21waWxlcgorCitUaGlzIGxpc3QgaXMgbm93IGNvbXBsZXRlISBXb3Vob3UhIDotKQorCisKK1NvIHRoZSBsaXN0IGlzIGNvbXBsZXRlLiBCdXQgd2h5IGRvZXMgY3Jvc3N0b29sLU5HIGhhdmUgbW9yZSBzdGVwcz8gfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK1RoZSBhbHJlYWR5IHRoaXJ0ZWVuIHN0ZXBzIGFyZSB0aGUgbmVjZXNzYXJ5IHN0ZXBzLCBmcm9tIGEgdGhlb3JldGljYWwgcG9pbnQKK29mIHZpZXcuIEluIHJlYWxpdHksIHRob3VnaCwgdGhlcmUgYXJlIHNtYWxsIGRpZmZlcmVuY2VzOyB0aGVyZSBhcmUgdGhyZWUKK2RpZmZlcmVudCByZWFzb25zIGZvciB0aGUgYWRkaXRpb25hbCBzdGVwcyBpbiBjcm9zc3Rvb2wtTkcuCisKK0ZpcnN0LCB0aGUgR05VIGJpbnV0aWxzIGRvIG5vdCBzdXBwb3J0IHNvbWUga2luZHMgb2Ygb3V0cHV0LiBJdCBpcyBub3QgcG9zc2libGUKK3RvIGdlbmVyYXRlICdmbGF0JyBiaW5hcmllcyB3aXRoIGJpbnV0aWxzLCBzbyB3ZSBoYXZlIHRvIHVzZSBhbm90aGVyIGNvbXBvbmVudAordGhhdCBhZGRzIHRoaXMgc3VwcG9ydDogZWxmMmZsdC4gQW5vdGhlciBiaW5hcnkgdXRpbGl0eSBjYWxsZWQgc3N0cmlwIGhhcyBiZWVuCithZGRlZC4gSXQgYWxsb3dzIGZvciBzdXBlci1zdHJpcHBpbmcgdGhlIHRhcmdldCBiaW5hcmllcywgYWx0aG91Z2ggaXQgaXMgbm90CitzdHJpY3RseSByZXF1aXJlZC4KKworU2Vjb25kLCBzb21lIEMgbGlicmFyaWVzIHJlcXVpcmUgYW5vdGhlciBzdGVwIGFmdGVyIHRoZSBjb21waWxlciBpcyBidWlsdCwgdG8KK2luc3RhbGwgYWRkaXRpb25hbCBzdHVmZi4gVGhpcyBpcyB0aGUgY2FzZSBmb3IgbWluZ3cgYW5kIG5ld2xpYi4gSGVuY2UgdGhlCitsaWJjX2ZpbmlzaCBzdGVwLgorCitUaGlyZCwgY3Jvc3N0b29sLU5HIGNhbiBhbHNvIGJ1aWxkIHNvbWUgYWRkaXRpb25hbCBkZWJ1ZyB1dGlsaXRpZXMgdG8gcnVuIG9uCit0aGUgdGFyZ2V0LiBUaGlzIGlzIHdoZXJlIHdlIGJ1aWxkLCBmb3IgZXhhbXBsZSwgdGhlIGNyb3NzLWdkYiwgdGhlIGdkYnNlcnZlcgorYW5kIHRoZSBuYXRpdmUgZ2RiICh0aGUgbGFzdCB0d28gcnVuIG9uIHRoZSB0YXJnZXQsIHRoZSBmaXJzdCBydW5zIG9uIHRoZQorc2FtZSBtYWNoaW5lIGFzIHRoZSB0b29sY2hhaW4pLiBUaGUgb3RoZXJzIChzdHJhY2UsIGx0cmFjZSwgRFVNQSBhbmQgZG1hbGxvYykKK2FyZSBhYnNvbHV0ZWx5IG5vdCByZWxhdGVkIHRvIHRoZSB0b29sY2hhaW4sIGJ1dCBhcmUgbmljZS10by1oYXZlIHN0dWZmIHRoYXQKK2NhbiBncmVhdGx5IGhlbHAgd2hlbiBkZXZlbG9waW5nLCBzbyBhcmUgaW5jbHVkZWQgYXMgZ29vZGllcyAoYW5kIHRoZXkgYXJlCitxdWl0ZSBlYXN5IHRvIGJ1aWxkLCBzbyBpdCdzIE9LOyBtb3JlIGNvbXBsZXggc3R1ZmYgaXMgbm90IHdvcnRoIHRoZSBlZmZvcnQKK3RvIGluY2x1ZGUgaW4gY3Jvc3N0b29sLU5HKS4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9jdC1uZy0xLjEzLjQvQSAtIENyZWRpdHMudHh0IGIvc2hhcmUvZG9jL2N0LW5nLTEuMTMuNC9BIC0gQ3JlZGl0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYyZjIwNAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9jdC1uZy0xLjEzLjQvQSAtIENyZWRpdHMudHh0CkBAIC0wLDAgKzEsODYgQEAKK0ZpbGUuLi4uLi4uLi46IEEgLSBDcmVkaXRzLnR4dAorQ29weXJpZ2h0Li4uLjogKEMpIDIwMTAgWWFubiBFLiBNT1JJTiA8eWFubi5tb3Jpbi4xOTk4QGFuY2llbnMuZW5pYi5mcj4KK0xpY2Vuc2UuLi4uLi46IENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gU2hhcmUgQWxpa2UgKENDLWJ5LXNhKSwgdjIuNQorCisKK0NyZWRpdHMgIC8KK19fX19fX19fLworCisKK0kgd291bGQgbGlrZSB0byB0aGFuayB0aGVzZSBmaW5lIHBlb3BsZSBmb3IgbWFraW5nIGNyb3NzdG9vbC1ORyBwb3NzaWJsZToKKworICBEYW4gS0VHRUwsIHRoZSBvcmlnaW5hbCBhdXRob3Igb2YgY3Jvc3N0b29sOiBodHRwOi8vd3d3LmtlZ2VsLmNvbS8KKyAgICBEYW4gd2FzIHZlcnkgaGVscGZ1bGwgYW5kIHdpbGxpbmcgdG8gaGVscCB3aGVuIEkgYnVpbGQgbXkgZmlyc3QgdG9vbGNoYWlucy4KKyAgICBJIG93ZSBoaW0gb25lLiBUaGFuayB5b3UgRGFuIQorICAgIFNvbWUgY3Jvc3N0b29sLU5HIHNjcmlwdHMgaGF2ZSBjb2RlIHNuaXBwZXRzIGNvbWluZyBhbG1vc3QgYXMtaXMgZnJvbSB0aGUKKyAgICBvcmlnaW5hbCB3b3JrIGJ5IERhbi4KKworQW5kIGluIG9yZGVyIG9mIGFwcGVhcmFuY2Ugb24gdGhlIGNyb3NzZ2NjIE1MOgorCisgIEFsbGFuIENMQVJLIGZvciBoaXMgaW52ZXN0aWdhdGlvbnMgb24gYnVpbGRpbmcgdG9vbGNoYWlucyBvbiBNYWNPUy1YLgorICAgIEFsbGFuIG1hZGUgZXh0ZW5zaXZlIHRlc3RzIG9mIHRoZSBmaXJzdCBhbHBoYSBvZiBjcm9zc3Rvb2wtTkcgb24gaGlzCisgICAgTWFjT1MtWCwgYW5kIHVudmVpbGVkIHNvbWUgYmFzaC0yLjA1IHdlaXJkbmVzcy4KKworICBFbnJpY28gV0VJR0VMVAorICAgIC0gc29tZSBpbXByb3ZlbWVudHMgdG8gdGhlIGJ1aWxkIHByb2NlZHVyZQorICAgIC0gY3hhX2F0ZXhpdCBkaXNhYmxpbmcgZm9yIEMgbGlicmFyaWVzIG5vdCBzdXBwb3J0aW5nIGl0IChvbGQgdUNsaWJjKQorICAgIC0gbWlzYyBzdWdnZXN0aW9ucyAocmVzdGFydGFibGUgYnVpbGQsIC4uLikKKyAgICAtIGdldCByaWQgb2Ygc29tZSBiYXNoaXNtcyBpbiAuL2NvbmZpZ3VyZQorICAgIC0gY29udHJpYnV0ZWQgT3BlblJJU0Mgb3IzMiBzdXBwb3J0CisKKyAgUm9iZXJ0IFAuIEouIERBWToKKyAgICAtIHNvbWUgc21hbGwgaW1wcm92ZW1lbnRzIHRvIHRoZSBjb25maWd1cmF0b3IsIG1pc2MgcHJvbXB0aW5nIGdsaXRjaGVzCisgICAgLSAnc2FuaXRpc2VkJyBwYXRjaGVzIGZvciBiaW51dGlscy0yLjE3CisgICAgLSBwYXRjaGVzIGZvciBnbGliYy0yLjUKKyAgICAtIG1pc2MgcGF0Y2hlcywgdHlwb3MgYW5kIGV5ZSBjYW5keQorICAgIC0gdG9vIG1hbnkgdG8gbGlzdCBhbnkgbW9yZSEKKworICBBbCBTdG9uZToKKyAgICAtIGluaXRpYWwgaWE2NCBzdXBwb3J0CisgICAgLSBzb21lIGNvc21ldGljcworCisgIFN6aWx2ZXN6dGVyIE9yZG9nOgorICAgIC0gYSB1Q2xpYmMgZmxvYXRpbmcgcG9pbnQgZml4CisgICAgLSBpbml0aWFsIHN1cHBvcnQgZm9yIEFSTSBFQUJJCisKKyAgTWFyayBKb25hczoKKyAgICAtIGluaXRpYXRlZCBTdXBlci1IIHBvcnQKKworICBNaWNoYWVsIEFiYm90dDoKKyAgICAtIG1ha2UgaXQgYnVpbGQgd2l0aCBhbmNpZW50IGZpbmR1dGlscworCisgIFdpbGx5IFRhcnJlYXU6CisgICAgLSBhIHBhdGNoIHRvIGdsaWJjIHRvIGJ1aWxkIG9uICdhbmNpZW50JyBzaGVsbHMKKyAgICAtIHJlcG9ydGVkIG1pcy11c2Ugb2YgJENUX0NDX05BVElWRQorCisgIE1hdHRoaWFzIEthZWhsY2tlOgorICAgIC0gZml4IGJ1aWxkaW5nIGdsaWJjLTIuNyAoYW5kIDIuNi4xKSB3aXRoIG5ld2VyIGtlcm5lbHMKKworICBEYW5pZWwgRGl0dG1hbm46CisgICAgLSBQb3dlclBDIHN1cHBvcnQKKworICBJb2FubmlzIEUuIFZlbmV0aXM6CisgICAgLSBwcmVsaW1pbmFyeSBBbHBoYSBzdXBwb3J0CisgICAgLSBpbnRlbnNlIGdjYy00LjMgYnJhaW5zdG9ybWluZworCisgIFRob21hcyBKb3VyZGFuOgorICAgIC0gaW50ZW5zZSBnY2MtNC4zIGJyYWluc3Rvcm1pbmcKKyAgICAtIGVnbGliYyBzdXBwb3J0CisKKyAgTWFueSBvdGhlcnMgaGF2ZSBjb250cmlidXRlZCwgZWl0aGVyIGluIGZvcm0gb2YgcGF0Y2hlcywgc3VnZ2VzdGlvbnMsCisgIGNvbW1lbnRzLCBvciB0ZXN0aW5nLi4uIFRoYW5rIHlvdSB0byBhbGwgb2YgeW91IQorCitTcGVjaWFsIGRlZGljYXRpb24gdG8gdGhlIGJ1aWxkcm9vdCBwZW9wbGUgZm9yIG1haW50YWluaW5nIGEgc2V0IG9mIHBhdGNoZXMgSQoraGFwcGlseSBhbmQgc2hhbWVsZXNzbHkgdmFtcGlyaXNlIGZyb20gdGltZSB0byB0aW1lLi4uIDotKQorCisKKzIwMTAwNTMwOiBTdGF0dXMgb2YgdGhpcyBmaWxlCisKK0l0J3MgYmVlbiBhYm91dCBhIHllYXIgbm93IHRoYXQgd2UndmUgbW92ZWQgdGhlIHJlcG9zaXRvcnkgdG8gTWVyY3VyaWFsLgorVGhlIHJlcG9zaXRvcnkgbm93IGhhcyBwcm9wZXIgYXV0aG9yc2hpcCBmb3IgZWFjaCBjaGFuZ2VzZXQsIGFuZCB0aGlzIGlzCit1c2VkIHRvIGJ1aWxkIHRoZSBjaGFuZ2Vsb2cgYXQgZWFjaCByZWxlYXNlLiBUaGlzIGZpbGUgd2lsbCBwcm9iYWJseSBubworbG9uZ2VyIGJlIHVwZGF0ZWQsIGFuZCBpcyBoZXJlIHRvIGNyZWRpdCBwZW9wbGUgcHJpb3IgdG8gdGhlIE1lcmN1cmlhbAorbWlncmF0aW9uLCBvciBmb3IgcGVvcGxlIGRpc2N1c3NpbmcgaWRlYXMgb3Igb3RoZXJ3aXNlIGhlbHBpbmcgd2l0aG91dAorY29kZS4KKworSWYgeW91IHRoaW5rIHlvdSBkZXNlcnZlIGJlaW5nIGNpdGVkIGluIHRoaXMgZmlsZSwgZG8geWVsbCBhdCBtZSEgOy0pCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvY3QtbmctMS4xMy40L0IgLSBLbm93biBpc3N1ZXMudHh0IGIvc2hhcmUvZG9jL2N0LW5nLTEuMTMuNC9CIC0gS25vd24gaXNzdWVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzUzYWM2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2N0LW5nLTEuMTMuNC9CIC0gS25vd24gaXNzdWVzLnR4dApAQCAtMCwwICsxLDIzNSBAQAorRmlsZS4uLi4uLi4uLjogQiAtIEtub3duIGlzc3Vlcy50eHQKK0NvcHlyaWdodC4uLi46IChDKSAyMDEwIFlhbm4gRS4gTU9SSU4gPHlhbm4ubW9yaW4uMTk5OEBhbmNpZW5zLmVuaWIuZnI+CitMaWNlbnNlLi4uLi4uOiBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uIFNoYXJlIEFsaWtlIChDQy1ieS1zYSksIHYyLjUKKworCitLbm93biBpc3N1ZXMgIC8KK19fX19fX19fX19fX18vCisKKworVGhpcyBmaWxlcyBsaXN0cyB0aGUga25vd24gaXNzdWVzIGVuY291bnRlcmVkIHdoaWxlIGRldmVsb3BpbmcgY3Jvc3N0b29sLU5HLAorYnV0IHRoYXQgY291bGQgbm90IGJlIGFkZHJlc3NlZCBiZWZvcmUgdGhlIHJlbGVhc2UuCisKK1RoZSBmaWxlIGhhcyBvbmUgc2VjdGlvbiBmb3IgZWFjaCBrbm93biBpc3N1ZSwgZWFjaCBzZWN0aW9uIGNvbnRhaW5pbmcgZm91cgorc3ViLXNlY3Rpb25zOiBTeW1wdG9tcywgRXhwbGFuYXRpb25zLCBGaXgsIGFuZCBXb3JrYXJvdW5kLgorCitFYWNoIHNlY3Rpb24gaXMgc2VwYXJhdGVkIGZyb20gdGhlIG90aGVycyB3aXRoIGEgbGluZXMgb2YgYXQgbGVhc3QgNCBkYXNoZXMuCisKK1RoZSBmb2xsb3dpbmcgZHVtbXkgc2VjdGlvbiBleHBsYWlucyBpdCBhbGwuCisKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFN5bXB0b21zOgorICAgICAgQSBvbmUtIG9yIHR3by1saW5lciBvZiB3aGF0IHlvdSB3b3VsZCBvYnNlcnZlLgorICAgICAgVXN1YWxseSwgdGhlIGVycm9yIG1lc3NhZ2UgeW91IHdvdWxkIHNlZSBpbiB0aGUgYnVpbGQgbG9ncy4KKworICAgIEV4cGxhbmF0aW9uczoKKyAgICAgIEFuIGFzIG11Y2ggYXMgcG9zc2libGUgaW4tZGVwdGggZXhwbGFuYXRpb25zIG9mIHRoZSBjb250ZXh0LCB3aHkgaXQKKyAgICAgIGhhcHBlbnMsIHdoYXQgaGFzIGJlZW4gaW52ZXN0aWdhdGVkIHNvIGZhciwgYW5kIHBvc3NpYmxlIG9yaWVudGF0aW9ucworICAgICAgYXMgaG93IHRvIHRyeSB0byBzb2x2ZSB0aGlzIChlZy4gVVJMcywgY29kZSBzbmlwcGV0cy4uLikuCisKKyAgICBTdGF0dXM6CisgICAgICBUZWxscyBhYm91dCB0aGUgc3RhdHVzIG9mIHRoZSBpc3N1ZToKKyAgICAgICAgVU5DT05GSVJNRUQgOiBtaXNzaW5nIGluZm9ybWF0aW9uLCBvciB1bmFibGUsIHRvIHJlcHJvZHVjZSwgYnV0IHRoZXJlCisgICAgICAgICAgICAgICAgICAgICAgaXMgY29uc2Vuc3VzIHRoYXQgdGhlcmUgaXMgYW4gaXNzdWUgc29tZXdoZXJlLi4uCisgICAgICAgIENVUlJFTlQgICAgIDogdGhlIGlzc3VlIGlzIGFwcGxpY2FibGUuCisgICAgICAgIERFUFJFQ0FURUQgIDogdGhlIGlzc3VlIHVzZWQgdG8gYXBwbHkgaW4gc29tZSBjYXNlcywgYnV0IGhhcyBub3QgYmVlbgorICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1lZCBvciByZXBvcnRlZCBhZ2FpbiBsYXRlbHkuCisgICAgICAgIENMT1NFRCAgICAgIDogdGhlIGlzc3VlIGlzIG5vIGxvbmdlciB2YWxpZCwgYW5kIGEgZml4IGhhcyBiZWVuIGFkZGVkCisgICAgICAgICAgICAgICAgICAgICAgZWl0aGVyIGFzIGEgcGF0Y2ggdG8gdGhpcyBjb21wb25lbnQsIGFuZC9vciBhcyBhCisgICAgICAgICAgICAgICAgICAgICAgd29ya2Fyb3VuZCBpbiB0aGUgc2NyaXB0cyBhbmQvb3IgdGhlIGNvbmZpZ3VyYXRpb24uCisKKyAgICBGaXg6CisgICAgICBXaGF0IHlvdSBoYXZlIHRvIGRvIHRvIGZpeCBpdCwgaWYgYXQgYWxsIHBvc3NpYmxlLgorICAgICAgVGhlIGZhY3QgdGhhdCB0aGVyZSBpcyBhIGZpeCwgYW5kIHlldCB0aGlzIGlzIGEga25vd24gaXNzdWUgbWVhbnMgdGhhdAorICAgICAgdGltZSB0byBpbmNvcnBvcmF0ZSB0aGUgZml4IGluIGNyb3NzdG9vbC1ORyB3YXMgbWlzc2luZywgb3IgcGxhbm5lZCBmb3IKKyAgICAgIGEgZnV0dXJlIHJlbGVhc2UuCisKKyAgICBXb3JrYXJvdW5kOgorICAgICAgV2hhdCB5b3UgY2FuIGRvIHRvIGZpeCBpdCAqdGVtcG9yYXJpbHkqLCBpZiBhdCBhbGwgcG9zc2libGUuCisgICAgICBBIHdvcmthcm91bmQgaXMgbm90IGEgcmVhbCBmaXgsIGFzIGl0IGNhbiBicmVhayBvdGhlciBwYXJ0cyBvZgorICAgICAgY3Jvc3N0b29sLU5HLCBidXQgYXQgbGVhc3QgbWFrZXMgeW91IGdvaW5nIGluIHlvdXIgcGFydGljdWxhciBjYXNlLgorCitTbyBub3csIG9uIGZvciB0aGUgcmVhbCBpc3N1ZXMuLi4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1N5bXB0b21zOgorICBnY2MgaXMgbm90IGZvdW5kLCBhbHRob3VnaCBJICpkbyogaGF2ZSBnY2MgaW5zdGFsbGVkLgorCitFeHBsYW5hdGlvbnM6CisgIFRoaXMgaXMgYW4gaXNzdWUgb24gYXQgbGVhc3QgUkhFTCBzeXN0ZW1zLCB3aGVyZSBnY2MgaXMgYSBzeW1saW5rIHRvIGNjYWNoZS4KKyAgQmVjYXVzZSBjcm9zc3Rvb2wtTkcgY3JlYXRlIGxpbmtzIHRvIGdjYyBmb3IgdGhlIGJ1aWxkIGFuZCBob3N0IGVudmlyb25tZW50LAorICB0aG9zZSBzeW1saW5rcyBhcmUgaW4gZmFjdCBwb2ludGluZyB0byBjY2FjaGUsIHdoaWNoIHRoZW4gZG9lc24ndCBrbm93IGhvdworICB0byBydW4gdGhlIGNvbXBpbGVyLgorCisgIEEgcG9zc2libGUgZml4IGNvdWxkIHByb2JhYmx5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgQ0NBQ0hFX0NDIHRvIHRoZQorICBhY3R1YWwgY29tcGlsZXIgdXNlZC4KKworU3RhdHVzOgorICBDVVJSRU5UCisKK0ZpeDoKKyAgTm9uZSBrbm93bi4KKworV29ya2Fyb3VuZDoKKyAgVW5pbnN0YWxsIGNjYWNoZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1N5bXB0b21zOgorICBUaGUgZXh0cmFjdCBhbmQvb3IgcGF0aCBzdGVwcyBmYWlsIHVuZGVyIEN5Z3dpbi4KKworRXhwbGFuYXRpb25zOgorICBUaGlzIGlzIG5vdCByZWxhdGVkIHRvIGNyb3NzdG9vbC1ORy4gTW91bnRzIHVuZGVyIEN5Z3dpbiBhcmUgYnkgZGVmYXVsdCBub3QKKyAgY2FzZS1zZW5zaXRpdmUuIFlvdSBoYXZlIHRvIHVzZSBzby1jYWxsZWQgIm1hbmFnZWQiIG1vdW50cy4gU2VlOgorICBodHRwOi8vY3lnd2luLmNvbS9mYXEuaHRtbCBzZWN0aW9uIDQsIHF1ZXN0aW9uIDMyLgorCitTdGF0dXM6CisgIERFUFJFQ0FURUQKKworRml4OgorICBVc2UgIm1hbmFnZWQiIG1vdW50cyBmb3IgdGhlIGRpcmVjdG9yaWVzIHdoZXJlIHlvdSBidWlsZCAqYW5kKiBpbnN0YWxsIHlvdXIKKyAgdG9vbGNoYWlucy4KKworV29ya2Fyb3VuZDoKKyAgTm9uZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1N5bXB0b21zOgorICB1Q2xpYmMgZmFpbHMgdG8gYnVpbGQgdW5kZXIgQ3lnd2luLgorCitFeHBsYW5hdGlvbnM6CisgIFdpdGggdUNsaWJjLCBpdCBpcyBwb3NzaWJsZSB0byBidWlsZCBhIGNyb3NzLWxkZC4gVW5mb3J0dW5hdGVseSwgaXQgaXMKKyAgbm90IChjdXJyZW50bHkpIHBvc3NpYmxlIHRvIGJ1aWxkIHRoaXMgY3Jvc3MtbGRkIHVuZGVyIEN5Z3dpbi4KKworU3RhdHVzOgorICBERVBSRUNBVEVECisKK0ZpeDoKKyAgTm9uZSBzbyBmYXIuCisKK1dvcmthcm91bmQ6CisgIERpc2FibGUgdGhlIGNyb3NzLWxkZCBidWlsZC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1N5bXB0b21zOgorICBPbiA2NC1iaXQgYnVpbGQgc3lzdGVtcywgdGhlIGdsaWJjIChwb3NzaWJseSBlZ2xpYmMgdG9vKSBidWlsZCBmYWlscyBmb3IKKyAgNjQtYml0IHRhcmdldHMsIGJlY2F1c2UgaXQgY2FuIG5vdCBmaW5kIGxpYmdjYy4KKworRXhwbGFuYXRpb25zOgorICBUaGlzIGlzc3VlIGhhcyBiZWVuIG9ic2VydmVkIHdoZW4gdGhlIGNvbXBhbmlvbiBsaWJyYXJpZXMgYXJlIGJ1aWx0CisgIHN0YXRpY2FsbHkuIEZvciBhbiB1bmtub3duIHJlYXNvbiwgaW4gdGhpcyBjYXNlLCB0aGUgbGliZ2NjIGJ1aWx0IGJ5IHRoZQorICBjb3JlIGdjYyBpcyBub3QgbG9jYXRlZCBpbiB0aGUgc2FtZSBwbGFjZSBpdCBpcyBsb2NhdGVkIHdoZW4gYnVpbGRpbmcKKyAgd2l0aCBzaGFyZWQgY29tcGFuaW9uIGxpYnJhcmllcy4KKworU3RhdHVzOgorICBERVBSRUNBVEVECisKK0ZpeDoKKyAgTm9uZSBzbyBmYXIuCisKK1dvcmthcm91bmQ6CisgIEJ1aWxkIHNoYXJlZCBjb21wYW5pb24gbGlicmFyaWVzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU3ltcHRvbXM6CisgIGxpYnRvb2wubTQ6IGVycm9yOiBwcm9ibGVtIGNvbXBpbGluZyBGQyB0ZXN0IHByb2dyYW0KKworRXhwbGFuYXRpb25zOgorICBUaGUgZ2NjIGJ1aWxkIHByb2NlZHVyZSB0cmllcyB0byBydW4gYSBGb3J0cmFuIHRlc3QgdG8gc2VlIGlmIGl0IGhhcyBhCisgIHdvcmtpbmcgbmF0aXZlIGZvcnRyYW4gY29tcGlsZXIgaW5zdGFsbGVkIG9uIHRoZSBidWlsZCBtYWNoaW5lLCBhbmQgaXQKKyAgY2FuJ3QgZmluZCBvbmUuIEEgbmF0aXZlIEZvcnRyYW4gY29tcGlsZXIgaXMgbmVlZGVkIChzZWVtcyB0byBiZSBuZWVkZWQpCisgIHRvIGJ1aWxkIHRoZSBGb3J0cmFuIGZyb250ZW5kIG9mIHRoZSBjcm9zcy1jb21waWxlci4KKyAgRXZlbiBpZiB5b3UgZG9uJ3Qgd2FudCB0byBidWlsZCB0aGUgRm9ydHJhbiBmcm9udGVuZCwgZ2NjIHRyaWVzIHRvIHNlZQorICBpZiBpdCBoYXMgb25lLCBidXQgZmFpbHMuIFRoaXMgaXMgbm8gcHJvYmxlbSwgYXMgdGhlIEZvcnRyYW4gZnJvbnRlbmQKKyAgd2lsbCBub3QgYmUgYnVpbHQuIFRoZXJlIGlzIG5vdGhpbmcgdG8gYmUgd29ycnkgYWJvdXQgKHVubGVzcyB5b3UgZG8KKyAgd2FudCB0byBidWlsZCB0aGUgRm9ydHJhbiBmcm9udGVuZCwgb2YgY291cnNlKS4KKworU3RhdHVzOgorICBDVVJSRU5UCisKK0ZpeDoKKyAgTm9uZSBzbyBmYXIuIEl0J3MgYSBzcHVyaW91cyBlcnJvciwgc28gdGhlcmUgd2lsbCBwcm9iYWJseSBuZXZlciBiZQorICBhIGZpeCBmb3IgdGhpcyBpc3N1ZS4KKworV29ya2Fyb3VuZDoKKyAgTm9uZSBuZWVkZWQsIGl0J3MgYSBzcHVyaW91cyBlcnJvci4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1N5bXB0b21zOgorICB1bmFibGUgdG8gZGV0ZWN0IHRoZSBleGNlcHRpb24gbW9kZWwKKworRXhwbGFuYXRpb25zOgorICBPbiBzb21lIGFyY2hpdGVjdHVyZXMsIHByb3BlciBzdGFjayB1bndpbmRpbmcgKEMrKykgcmVxdWlyZXMgdGhhdAorICBzZXRqbXAvbG9uZ2ptcCAoc2psaikgYmUgdXNlZCwgd2hpbGUgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcyBkbyBub3QKKyAgbmVlZCBzamxqLiBPbiBzb21lIGFyY2hpdGVjdHVyZXMsIGdjYyBpcyB1bmFibGUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIKKyAgc2psaiBhcmUgbmVlZGVkIG9yIG5vdC4KKworU3RhdHVzOgorICBDVVJSRU5UCisKK0ZpeDoKKyAgTm9uZSBzbyBmYXIuCisKK1dvcmthcm91bmQ6CisgIFRyeWluZyBzZXR0aW5nIHVzZSBvZiBzamxqIHRvIGVpdGhlciAnWScgb3IgJ04nIChpbnN0ZWFkIG9mIHRoZQorICBkZWZhdWx0ICdNJykgaW4gdGhlIG1lbnVjb25maWcsIG9wdGlvbiBDVF9DQ19HQ0NfU0pMSl9FWENFUFRJT05TCisgIGxhYmVsbGVkICJVc2Ugc2psaiBmb3IgZXhjZXB0aW9ucyIuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTeW1wdG9tczoKKyAgY29uZmlndXJlOiBlcnJvcjogZm9yY2VkIHVud2luZCBzdXBwb3J0IGlzIHJlcXVpcmVkCisKK0V4cGxhbmF0aW9uczoKKyAgVGhlIGlzc3VlIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gYnVpbGRpbmcgTlBUTCBvbiBvbGQgdmVyc2lvbnMKKyAgb2YgZ2xpYmMgKGFuZCBwb3NzaWJseSBlZ2xpYmMgYXMgd2VsbCkgb24gc29tZSBhcmNoaXRlY3R1cmVzCisgIChzZWVuIG9uIHBvd2VycGMsIHMzOTAsIHMzOTB4IGFuZCB4ODZfNjQpLgorCitTdGF0dXM6CisgIENVUlJFTlQKKworRml4OgorICBOb25lIHNvIGZhci4gSXQgd291bGQgcmVxdWlyZSBzb21lIGdsaWJjIGhhY2tpbmcuCisKK1dvcmthcm91bmQ6CisgIFRyeSBzZXR0aW5nICJGb3JjZSB1bndpbmQgc3VwcG9ydCIgaW4gdGhlICJDLWxpYnJhcnkiIG1lbnUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTeW1wdG9tczoKKyAgZ2xpYmMgc3RhcnQgZmlsZXMgYW5kIGhlYWRlcnMgZmFpbCB3aXRoOiBbL3Vzci9pbmNsdWRlL2xpbWl0cy5oXSBFcnJvciAxCisKK0V4cGxhbmF0aW9uczoKKyAgT2xkIGdsaWJjIChhbmQgZWdsaWJjKSBNYWtlZmlsZXMgYnJlYWsgd2l0aCBtYWtlLTMuODIuCisKK1N0YXR1czoKKyAgQ1VSUkVOVAorCitGaXg6CisgIE5vbmUgc28gZmFyLiBJdCB3b3VsZCByZXF1aXJlIHNvbWUgZ2xpYmMvZWdsaWJjIGhhY2tpbmcuCisKK1dvcmthcm91bmQ6CisgIFRoZXJlIHR3byBwb3NzaWJsZSB3b3JrYXJvdW5kczoKKyAgMS0gYXNrIGNyb3NzdG9vbC1ORyB0byBidWlsZCBtYWtlLTMuODEganVzdCBmb3IgdGhpcyBidWlsZCBzZXNzaW9uOgorICAgICBTZWxlY3QgdGhlIGZvbGxvd2luZyBvcHRpb25zOgorICAgICAgICBQYXRocyBhbmQgbWlzYyBvcHRpb25zICAtLS0+CisgICAgICAgICAgICBbKl0gVHJ5IGZlYXR1cmVzIG1hcmtlZCBhcyBFWFBFUklNRU5UQUwKKyAgICAgICAgQ29tcGFuaW9uIHRvb2xzICAtLS0+CisgICAgICAgICAgICBbKl0gQnVpbGQgc29tZSBjb21wYW5pb24gdG9vbHMKKyAgICAgICAgICAgIFsqXSAgIG1ha2UKKyAgMi0gbWFudWFsbHkgaW5zdGFsbCBtYWtlLTMuODEgdG8gdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhlIHN5c3RlbSBtYWtlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU3ltcHRvbXM6CisgIFRoZSBidWlsZCBmYWlscyB3aXRoICJtaXhlZCBpbXBsaWNpdCBhbmQgbm9ybWFsIHJ1bGVzLiBTdG9wLiIKKworRXhwbGFuYXRpb25zOgorICBPbGQgZ2xpYmMgKGFuZCBlZ2xpYmMpIE1ha2VmaWxlcyBicmVhayB3aXRoIG1ha2UtMy44Mi4KKworU3RhdHVzOgorICBDVVJSRU5UCisKK0ZpeDoKKyAgTm9uZSBzbyBmYXIuIFNlZSBhYm92ZSBpc3N1ZS4KKworV29ya2Fyb3VuZDoKKyAgU2VlIGFib3ZlIGlzc3VlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2N0LW5nLTEuMTMuNC9DIC0gTWlzYy4gdHV0b3JpYWxzLnR4dCBiL3NoYXJlL2RvYy9jdC1uZy0xLjEzLjQvQyAtIE1pc2MuIHR1dG9yaWFscy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkMDRhNAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9jdC1uZy0xLjEzLjQvQyAtIE1pc2MuIHR1dG9yaWFscy50eHQKQEAgLTAsMCArMSwzMDggQEAKK0ZpbGUuLi4uLi4uLi46IEMgLSBNaXNjLiB0dXRvcmlhbHMudHh0CitDb3B5cmlnaHQuLi4uOiAoQykgMjAxMCBZYW5uIEUuIE1PUklOIDx5YW5uLm1vcmluLjE5OThAYW5jaWVucy5lbmliLmZyPgorTGljZW5zZS4uLi4uLjogQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiBTaGFyZSBBbGlrZSAoQ0MtYnktc2EpLCB2Mi41CisKKworTWlzYy4gdHV0b3JpYWxzICAvCitfX19fX19fX19fX19fX19fLworCisKK1VzaW5nIGNyb3NzdG9vbC1ORyBvbiBGcmVlQlNEIChhbmQgb3RoZXIgKkJTRCkgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK0NvbnRyaWJ1dGVkIGJ5OiBUaXR1cyB2b24gQm94YmVyZworCitQcmVyZXF1aXNpdGVzIGFuZCBpbnN0cnVjdGlvbnMgZm9yIHVzaW5nIGN0LW5nIGZvciBidWlsZGluZyBhIGNyb3NzIHRvb2xjaGFpbiBvbiBGcmVlQlNEIGFzIGhvc3QuCisKKzApIFRlc3RlZCBvbiBGcmVlQlNEIDguMAorCisxKSBJbnN0YWxsIChhdCBsZWFzdCkgdGhlIGZvbGxvd2luZyBwb3J0cworICAgYXJjaGl2ZXJzL2x6bWEKKyAgIHRleHRwcm9jL2dzZWQKKyAgIGRldmVsL2dtYWtlCisgICBkZXZlbC9wYXRjaAorICAgc2hlbGxzL2Jhc2gKKyAgIGRldmVsL2Jpc29uCisgICBsYW5nL2dhd2sKKyAgIGRldmVsL2F1dG9tYWtlMTEwCisgICBmdHAvd2dldAorCisgICBPZiBjb3Vyc2UsIHlvdSBzaG91bGQgaGF2ZSAvdXNyL2xvY2FsL2JpbiBpbiB5b3VyIFBBVEguCisKKzIpIHJ1biBjdC1uZydzIGNvbmZpZ3VyZSB3aXRoIHRoZSBmb2xsb3dpbmcgdG9vbCBjb25maWd1cmF0aW9uOgorICAgLi9jb25maWd1cmUgLS13aXRoLXNlZD0vdXNyL2xvY2FsL2Jpbi9nc2VkIC0td2l0aC1tYWtlPS91c3IvbG9jYWwvYmluL2dtYWtlIFwKKyAgIC0td2l0aC1wYXRjaD0vdXNyL2xvY2FsL2Jpbi9ncGF0Y2gKKyAgIFsuLi5vdGhlciBjb25maWd1cmUgcGFyYW1ldGVycyBhcyB5b3UgbGlrZS4uLl0KKworMykgcHJvY2VlZCBhcyBkZXNjcmliZWQgaW4gZ2VuZXJhbCBkb2N1bWVudGF0aW9uCisgICBidXQgdXNlIGdtYWtlIGluc3RlYWQgb2YgbWFrZQorCisKK1VzaW5nIGNyb3NzdG9vbC1ORyBvbiBNYWNPUy1YIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworQ29udHJpYnV0ZWQgYnk6IFRpdHVzIHZvbiBCb3hiZXJnCisKK1ByZXJlcXVpc2l0ZXMgYW5kIGluc3RydWN0aW9ucyBmb3IgdXNpbmcgY3Jvc3N0b29sLU5HIGZvciBidWlsZGluZyBhIGNyb3NzCit0b29sY2hhaW4gb24gTWFjT1MgYXMgaG9zdC4KKworMCkgTWFjIE9TIFNub3cgTGVvcGFyZCwgd2l0aCBEZXZlbG9wZXIgVG9vbHMgMy4yIGluc3RhbGxlZCwgb3IKKyAgIE1hYyBPUyBMZW9wYXJkLCB3aXRoIERldmVsb3BlciBUb29scyAmIG5ld2VyIGdjYyAoPj0gNC4zKSBpbnN0YWxsZWQKKyAgIHZpYSBtYWNwb3J0cworCisxKSBZb3UgaGF2ZSB0byB1c2UgYSBjYXNlIHNlbnNpdGl2ZSBmaWxlIHN5c3RlbSBmb3IgY3QtbmcncyBidWlsZCBhbmQgdGFyZ2V0CisgICBkaXJlY3Rvcmllcy4gVXNlIGEgZGlzayBvciBkaXNrIGltYWdlIHdpdGggYSBjYXNlIHNlbnNpdGl2ZSBmcyB0aGF0IHlvdQorICAgbW91bnQgc29tZXdoZXJlLgorCisyKSBJbnN0YWxsIG1hY3BvcnRzIChvciBzaW1pbGFyIGVhc3kgbWVhbnMgb2YgaW5zdGFsbGluZyAzcmQgcGFydHkgc29mdHdhcmUpLAorICAgbWFrZSBzdXJlIHRoYXQgbWFjcG9ydCdzIGJpbiBkaXIgaXMgaW4gdGhlIGZyb250ICghKSBvZiB5b3VyIFBBVEguCisgICBGdXJ0aGVyb24gYXNzdW1pbmcgaXQgaXMgL29wdC9sb2NhbC9iaW4uCisKKzMpIEluc3RhbGwgKGF0IGxlYXN0KSB0aGUgZm9sbG93aW5nIG1hY3BvcnRzCisgICBsem1hdXRpbHMKKyAgIGxpYnRvb2wKKyAgIGJpbnV0aWxzCisgICBnc2VkCisgICBnYXdrCisgICBnY2M0MyAob25seSBuZWNlc3NhcnkgZm9yIExlb3BhcmQgT1NYIDEwLjUpCisgICBnY2Nfc2VsZWN0IChvbmx5IG5lY2Vzc2FyeSBmb3IgT1NYIDEwLjUsIG9yIFhjb2RlID4gNCkKKworNCkgUHJlcmVxdWlzaXRlcworICAgT24gTGVvcGFyZCwgbWFrZSBzdXJlIHRoYXQgdGhlIG1hY3BvcnQncyBnY2MgaXMgY2FsbGVkIHdpdGggdGhlIGRlZmF1bHQKKyAgIGNvbW1hbmRzIChnY2MsIGcrKywuLi4pLCB2aWEgbWFjcG9ydCdzIGdjY19zZWxlY3QKKworICAgT24gT1NYIDEwLjcgTGlvbiAvIHdoZW4gdXNpbmcgWGNvZGUgPj0gNCBtYWtlIHN1cmUgdGhhdCB0aGUgZGVmYXVsdCBjb21tYW5kcworICAgKGdjYywgZysrLCBldGMuKSBwb2ludCB0byBnY2MtNC4yLCBOT1QgbGx2bS1nY2MtNC4yCisgICBieSB1c2luZyBtYWNwb3J0J3MgZ2NjX3NlbGVjdCBmZWF0dXJlLiBXaXRoIE1hY1BvcnRzID49IDEuOS4yCisgICB0aGUgY29tbWFuZCBpczogInN1ZG8gcG9ydCBzZWxlY3QgLS1zZXQgZ2NjIGdjYzQyIgorICAgVGhpcyBhbHNvIHJlcXVpcmVzIChsaWtlIHdyaXR0ZW4gYWJvdmUpIHRoYXQgbWFjcG9ydCdzIGJpbiBkaXIKKyAgIGNvbWVzIGJlZm9yZSBzdGFuZGFyZCBkaXJlY3RvcmllcyBpbiB5b3VyIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgIGJlY2F1c2UgdGhlIGdjYyBzeW1saW5rIGlzIGluc3RhbGxlZCBpbiAvb3B0L2xvY2FsL2JpbiBhbmQgdGhlIGRlZmF1bHQgL3Vzci9iaW4vZ2NjCisgICBpcyBub3QgcmVtb3ZlZCBieSB0aGUgZ2NjIHNlbGVjdCBjb21tYW5kIQorICAgRXhwbGFuYXRpb246IGxsdm0tZ2NjLTQuMiAod2l0aCBYY29kZSA0LjEgaXQgaXMgb24gbXkgbWFjaGluZQorICAgImdjYyB2ZXJzaW9uIDQuMi4xIChCYXNlZCBvbiBBcHBsZSBJbmMuIGJ1aWxkIDU2NTgpIChMTFZNIGJ1aWxkIDIzMzUuMTUuMDApIikKKyAgIGNhbm5vdCBib29zdHJhcCBnY2MuIFNlZSBodHRwOi8vbGx2bS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9OTU3MQorCis1KSBydW4gY3QtbmcncyBjb25maWd1cmUgd2l0aCB0aGUgZm9sbG93aW5nIHRvb2wgY29uZmlndXJhdGlvbgorICAgKGFzc3VtaW5nIHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgdG9vbHMgdmlhIG1hY3BvcnRzIGluIC9vcHQvbG9jYWwpOgorICAgLi9jb25maWd1cmUgLS13aXRoLXNlZD0vb3B0L2xvY2FsL2Jpbi9nc2VkICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAtLXdpdGgtbGlidG9vbD0vb3B0L2xvY2FsL2Jpbi9nbGlidG9vbCAgICAgICAgIFwKKyAgICAgICAgICAgICAgIC0td2l0aC1saWJ0b29saXplPS9vcHQvbG9jYWwvYmluL2dsaWJ0b29saXplICAgXAorICAgICAgICAgICAgICAgLS13aXRoLW9iamNvcHk9L29wdC9sb2NhbC9iaW4vZ29iamNvcHkgICAgICAgICBcCisgICAgICAgICAgICAgICAtLXdpdGgtb2JqZHVtcD0vb3B0L2xvY2FsL2Jpbi9nb2JqZHVtcCAgICAgICAgIFwKKyAgICAgICAgICAgICAgIC0td2l0aC1yZWFkZWxmPS9vcHQvbG9jYWwvYmluL2dyZWFkZWxmICAgICAgICAgXAorICAgICAgICAgICAgICAgWy4uLm90aGVyIGNvbmZpZ3VyZSBwYXJhbWV0ZXJzIGFzIHlvdSBsaWtlLi4uXQorCis2KSBwcm9jZWVkIGFzIGRlc2NyaWJlZCBpbiBzdGFuZGFyZCBkb2N1bWVudGF0aW9uCisKKy0tLS0tCisKK0hJTlRTOgorLSBBcHBhcmVudGx5LCBHTlUgbWFrZSdzIGJ1aWx0aW4gdmFyaWFibGUgLkxJQlBBVFRFUk5TIGlzIG1pc2NvbmZpZ3VyZWQKKyAgdW5kZXIgTWFjT1M6IEl0IGRvZXMgbm90IGluY2x1ZGUgbGliJS5keWxpYi4KKyAgVGhpcyBhZmZlY3RzIGJ1aWxkIG9mIChhdCBsZWFzdCkgZ2RiLTcuMQorICBQdXQgJ2xpYiUuYSBsaWIlLnNvIGxpYiUuZHlsaWInIGFzIC5MSUJQQVRURVJOUyBpbnRvIHlvdXIgZW52aXJvbm1lbnQKKyAgYmVmb3JlIGV4ZWN1dGluZyBjdC1uZyBidWlsZC4KKyAgU2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9tYWtlL21hbnVhbC9odG1sX25vZGUvTGlicmFyaWVzXzAwMmZTZWFyY2guaHRtbAorICBhcyBhbiBleHBsYW5hdGlvbi4KKy0gY3QtbmcgbWVudWNvbmZpZyB3aWxsIG5vdCB3b3JrIG9uIFNub3cgTGVvcGFyZCAxMC42LjMgc2luY2UgbGlibmN1cnNlcworICBpcyBicm9rZW4gd2l0aCB0aGlzIHJlbGVhc2UuIE1hY09TIDw9IDEwLjYuMiBhbmQgPj0gMTAuNi40IGFyZSBvay4KKworCitVc2luZyBNZXJjdXJpYWwgdG8gaGFjayBjcm9zc3Rvb2wtTkcgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworQ29udHJpYnV0ZWQgYnk6IFRpdHVzIHZvbiBCb3hiZXJnCisKK1BSRVJFUVVJU0lURVM6CisKK0NvbmZpZ3VyaW5nIE1lcmN1cmlhbDoKKyAgWW91IG5lZWQgbWVyY3VyaWFsIHdpdGggdGhlIGZvbGxvd2luZyBleHRlbnNpb25zOgorICAgLSBtcSAgICAgICAgOiBodHRwOi8vbWVyY3VyaWFsLnNlbGVuaWMuY29tL3dpa2kvTXFFeHRlbnNpb24KKyAgIC0gcGF0Y2hib21iIDogaHR0cDovL21lcmN1cmlhbC5zZWxlbmljLmNvbS93aWtpL1BhdGNoYm9tYkV4dGVuc2lvbgorICBVc3VhbGx5LCB0aGVzZSB0d28gZXh0ZW5zaW9ucyBhcmUgYWxyZWFkeSBwYXJ0IG9mIHRoZSBpbnN0YWxsYXRpb24gcGFja2FnZS4KKyAgVGhlIG1xIGV4dGVuc2lvbiBtYWludGFpbnMgYSBzZXBhcmF0ZSBxdWV1ZSBvZiB5b3VyIGxvY2FsIGNoYW5nZXMKKyAgdGhhdCB5b3UgY2FuIGNoYW5nZSBhdCBhbnkgbGF0ZXIgdGltZS4KKyAgV2l0aCB0aGUgcGF0Y2hib21iIGV4dGVuc2lvbiB5b3UgY2FuIGVtYWlsIHRob3NlIHBhdGNoZXMgZGlyZWN0bHkKKyAgZnJvbSB5b3VyIGxvY2FsIHJlcG8uCisKKyAgWW91ciBjb25maWd1cmF0aW9uIGZpbGUgZm9yIG1lcmN1cmlhbCwgZS5nLiB+Ly5oZ3JjIHNob3VsZCBjb250YWluCisgIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgKGJ1dCBoYXZlIGEgbG9vayBhdCBgbWFuIGhncmNgKToKKyAgIyAtLS0KKyAgW2VtYWlsXQorICAjIGNvbmZpZ3VyZSBzZW5kaW5nIHBhdGNoZXMgZGlyZWN0bHkgdmlhIE1lcmN1cmlhbAorICBmcm9tID0gIllvdXIgTmFtZSIgPHlvdXJAZW1haWwuYWRkcmVzcz4KKyAgIyBIb3cgdG8gc2VuZCBlbWFpbDoKKyAgbWV0aG9kID0gc210cAorCisgIFtzbXRwXQorICAjIFNNVFAgY29uZmlndXJhdGlvbiAob25seSBmb3IgbWV0aG9kPXNtdHApCisgIGhvc3QgPSBsb2NhbGhvc3QKKyAgdGxzID0gdHJ1ZQorICB1c2VybmFtZSA9CisgIHBhc3N3b3JkID0KKworICBbZXh0ZW5zaW9uc10KKyAgIyBUaGUgZm9sbG93aW5nIGxpbmVzIGVuYWJsZSB0aGUgdHdvIGV4dGVuc2lvbnM6CisgIGhnZXh0Lm1xID0KKyAgaGdleHQucGF0Y2hib21iID0KKyAgIyAtLS0tCisKK0NyZWF0ZSB5b3VyIGxvY2FsIHJlcG9zaXRvcnkgYXMgYSBjbG9uZToKKyAgaGcgY2xvbmUgaHR0cDovL2Nyb3NzdG9vbC1uZy5vcmcvaGcvY3Jvc3N0b29sLW5nIGNyb3NzdG9vbC1uZworCitTZXR0aW5nIHVwIHRoZSBtcSBleHRlbnNpb24gaW4geW91ciBsb2NhbCBjb3B5OgorICBjZCBjcm9zc3Rvb2wtbmcKKyAgaGcgcWluaXQKKworCitDUkVBVElORyBQQVRDSEVTOgorCitSZWNvcmRpbmcgeW91ciBjaGFuZ2VzIGluIHRoZSBwYXRjaCBxdWV1ZSBtYWludGFpbmVkIGJ5IG1xOgorICAjIEZpcnN0LCBjcmVhdGUgYSBuZXcgcGF0Y2ggZW50cnkgaW4gdGhlIHBhdGNoIHF1ZXVlOgorICBoZyBxbmV3IC1EIC1VIC1lIHNob3J0X3BhdGNoX25hbWUxCisgIDxlZGl0IHBhdGNoIGRlc2NyaXB0aW9uIGFzIGNvbW1pdCBtZXNzYWdlIChzZWUgYmVsb3cgZm9yIGFuIGV4YW1wbGUpPgorCisgIDxub3cgZWRpdCB0aGUgY3Qtbmcgc291cmNlcyBhbmQgY2hlY2sgdGhlbT4KKworICAjIGlmIHlvdSBleGVjdXRlIGBoZyBzdGF0dXNgIGhlcmUsIHlvdXIgbW9kaWZpY2F0aW9ucyBvZiB0aGUgd29ya2luZworICAjIGNvcHkgc2hvdWxkIHNob3cgdXAuCisKKyAgIyBOb3cgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRha2VzIHlvdXIgbW9kaWZpY2F0aW9ucyBmcm9tIHRoZSB3b3JraW5nIGNvcHkKKyAgIyBpbnRvIHRoZSBwYXRjaCBlbnRyeQorICBoZyBxcmVmcmVzaCAtRCBbLWVdCisgIDxyZWVkaXQgcGF0Y2ggZGVzY3JpcHRpb24gWy1lXSBpZiBkZXNpcmVkPgorCisgICMgTm93IHlvdXIgY2hhbmdlcyBhcmUgcmVjb3JkZWQsIGFuZCBgaGcgc3RhdHVzYCBzaG91bGQgc2hvdyBhIGNsZWFuCisgICMgd29ya2luZyBjb3B5CisKK1JlcGVhdCB0aGUgYWJvdmUgc3RlcHMgZm9yIGFsbCB5b3VyIG1vZGlmaWNhdGlvbnMuCitUaGUgY29tbWFuZCBgaGcgcXNlcmllc2AgaW5mb3JtcyB5b3UgYWJvdXQgdGhlIGNvbnRlbnQgb2YgeW91ciBwYXRjaCBxdWV1ZS4KKworCitDT05UUklCVVRJTkcgWU9VUiBQQVRDSEVTOgorCitPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBwYXRjaCBzZXJpZXMsIHlvdSBjYW4gKHlvdSBzaG91bGQhKQorY29udHJpYnV0ZSB0aGVtIGJhY2sgdG8gdXBzdHJlYW0uCitUaGlzIGlzIGVhc2lseSBkb25lIHVzaW5nIHRoZSBgaGcgZW1haWxgIGNvbW1hbmQuCisKK2BoZyBlbWFpbGAgc2VuZHMgeW91ciBuZXcgY2hhbmdlc2V0cyB0byBhIHNwZWNpZmllZCBsaXN0IG9mIHJlY2lwaWVudHMsCitlYWNoIHBhdGNoIGluIGl0cyBvd24gZW1haWwsIGFsbCBvcmRlcmVkIGluIHRoZSB3YXkgeW91IGVudGVyZWQgdGhlbSAob2xkZXN0CitmaXJzdCkuIFRoZSBjb21tYW5kIGxpbmUgZmxhZyAtLW91dGdvaW5nIHNlbGVjdHMgYWxsIGNoYW5nZXNldHMgdGhhdCBhcmUgaW4KK3lvdXIgbG9jYWwgYnV0IG5vdCB5ZXQgaW4gdGhlIHVwc3RyZWFtIHJlcG9zaXRvcnkuIEhlcmUsIHRoZXNlIGFyZSBleGFjdGx5Cit0aGUgb25lcyB5b3UgZW50ZXJlZCBpbnRvIHlvdXIgbG9jYWwgcGF0Y2ggcXVldWUgaW4gdGhlIHNlY3Rpb24gYWJvdmUsIHNvCistLW91dGdvaW5nIGlzIHdoYXQgeW91IHdhbnQuCisKK0VhY2ggZW1haWwgZ2V0cyB0aGUgc3ViamVjdCBzZXQgdG86ICAiW1BBVENIIHggb2Ygbl0gPHNlcmllcyBzdW1tYXJ5PiIKK3doZXJlICd4JyBpcyB0aGUgc2VyaWFsIG51bWJlciBpbiB0aGUgZW1haWwgc2VyaWVzLCBhbmQgJ24nIGlzIHRoZSB0b3RhbCBudW1iZXIKK29mIHBhdGNoZXMgaW4gdGhlIHNlcmllcy4gVGhlIGJvZHkgb2YgdGhlIGVtYWlsIGlzIHRoZSBjb21wbGV0ZSBwYXRjaCwgcGx1cworYSBoYW5kZnVsIG9mIG1ldGFkYXRhLCB0aGF0IGhlbHBzIHByb3Blcmx5IGFwcGx5IHRoZSBwYXRjaCwga2VlcGluZyB0aGUgbG9nCittZXNzYWdlLCBhdHRyaWJ1dGlvbiBhbmQgZGF0ZSwgdHJhY2tpbmcgZmlsZSBjaGFuZ2VzIChtb3ZlLCBkZWxldGUsIG1vZGVzLi4uKQorCitgaGcgZW1haWxgIGFsc28gdGhyZWFkcyBhbGwgb3V0Z29pbmcgcGF0Y2ggZW1haWxzIGJlbG93IGFuIGludHJvZHVjdG9yeQorbWVzc2FnZS4gWW91IHNob3VsZCB1c2UgdGhlIGludHJvZHVjdG9yeSBtZXNzYWdlIChjb21tYW5kIGxpbmUgZmxhZyAtLWludHJvKQordG8gZGVzY3JpYmUgdGhlIHNjb3BlIGFuZCBtb3RpdmF0aW9uIGZvciB0aGUgd2hvbGUgcGF0Y2ggc2VyaWVzLiBUaGUgc3ViamVjdAorZm9yIHRoZSBpbnRyb2R1Y3RvcnkgbWVzc2FnZSBnZXRzIHNldCB0bzogICJbUEFUQ0ggMCBvZiBuXSA8c2VyaWVzIHN1bW1hcnk+IgorYW5kIHlvdSBnZXQgdGhlIGNoYW5jZSB0byBzZXQgdGhlIDxzZXJpZXMgc3VtbWFyeT4uCisKK0hlcmUgaXMgYSBzYW1wbGUgYGhnIGVtYWlsYCBjb21wbGV0ZSBjb21tYW5kIGxpbmU6CitOb3RlOiByZXBsYWNlICIgKGF0KSAiIHdpdGggIkAiCisKKyAgaGcgZW1haWwgLS1vdXRnb2luZyAtLWludHJvICAgXAorICAgICAgICAgICAtLXRvICciWWFubiBFLiBNT1JJTiIgPHlhbm4ubW9yaW4uMTk5OCAoYXQpIGFuY2llbnMuZW5pYi5mcj4nICAgIFwKKyAgICAgICAgICAgLS1jYyAnY3Jvc3NnY2MgKGF0KSBzb3VyY2V3YXJlLm9yZycKKworICAjIEl0IHRoZW4gb3BlbnMgYW4gZWRpdG9yIGFuZCBsZXRzIHlvdSBlbnRlciB0aGUgc3ViamVjdAorICAjIGFuZCB0aGUgYm9keSBmb3IgdGhlIGludHJvZHVjdG9yeSBtZXNzYWdlLgorCitVc2UgYGhnIGVtYWlsYCB3aXRoIHRoZSBhZGRpdGlvbmFsIGNvbW1hbmQgbGluZSBzd2l0Y2ggLW4gdG8KK2ZpcnN0IGhhdmUgYSBsb29rIGF0IHRoZSBlbWFpbChzKSB3aXRob3V0IGFjdHVhbGx5IHNlbmRpbmcgdGhlbS4KKworCitNQUlOVEFJTklORyBZT1VSIFBBVENIRVM6CisKK1doZW4gdGhlIHBhdGNoZXMgYXJlIHJlZmluZWQgYnkgZGlzY3Vzc2luZyB0aGVtIG9uIHRoZSBtYWlsaW5nIGxpc3QsCit5b3UgbWF5IHdhbnQgdG8gZmluYWxpemUgYW5kIHJlc2VuZCB0aGVtLgorCitUaGUgbXEgZXh0ZW5zaW9uIGhhcyB0aGUgaWRpb3N5bmNyYXN5IG9mIGltcG9zaW5nIGEgc3RhY2sgb250byB0aGUgcXVldWU6CitZb3UgY2FuIGFsd2F5cyByZWVkaXQvcmVmcmVzaCBvbmx5IHRoZSBwYXRjaCBvbiB0b3Agb2Ygc3RhY2suCitUaGUgcXVldWUgY29uc2lzdHMgb2YgYXBwbGllZCBhbmQgdW5hcHBsaWVkIHBhdGNoZXMKKyhpZiB5b3UgcmVhY2hlZCBoZXJlIHZpYSB0aGUgYWJvdmUgc3RlcHMsIGFsbCBvZiB5b3VyIHBhdGNoZXMgYXJlIGFwcGxpZWQpLAord2hlcmUgdGhlICdzdGFjaycgY29uc2lzdHMgb2YgdGhlIGFwcGxpZWQgcGF0Y2hlcywgYW5kICd0b3Agb2Ygc3RhY2snCitpcyB0aGUgbGF0ZXN0IGFwcGxpZWQgcGF0Y2guCisKK1RoZSBmb2xsb3dpbmcgb3V0cHV0IG9mIGBoZyBxc2VyaWVzYCBpcyBub3cgdXNlZCBhcyBhbiBleGFtcGxlOgorICAwIEEgc2hvcnRfcGF0Y2hfbmFtZTEKKyAgMSBBIHNob3J0X3BhdGNoX25hbWUyCisgIDIgQSBzaG9ydF9wYXRjaF9uYW1lMworICAzIEEgc2hvcnRfcGF0Y2hfbmFtZTQKKworWW91IGFyZSBub3cgYWJsZSB0byBlZGl0IHBhdGNoICdzaG9ydF9wYXRjaF9uYW1lNCcgKHdoaWNoIGlzIHRvcCBvZiBzdGFjayk6CisgIDxFZGl0IHRoZSBzb3VyY2VzPgorICAjIGFuZCBleGVjdXRlIGFnYWluCisgIGhnIHFyZWZyZXNoIC1EIFstZV0KKyAgPGFuZCBvcHRpb25hbGx5IFstZV0gcmVlZGl0IHRoZSBjb21taXQgbWVzc2FnZT4KKworSWYgeW91IHdhbnQgdG8gZWRpdCBlLmcuIHBhdGNoIHNob3J0X3BhdGNoX25hbWUyLCB5b3UgaGF2ZSB0byBtb2RpZnkKK21xJ3Mgc3RhY2sgc28gdGhpcyBwYXRjaCBnZXRzIHRvcCBvZiBzdGFjay4KK0ZvciB0aGlzIHB1cnBvc2Ugc2VlIGBoZyBoZWxwIHFnb3RvYCwgYGhnIGhlbHAgcXBvcGAsIGFuZCBgaGcgaGVscCBxcHVzaGAuCisKKyAgaGcgcWdvdG8gc2hvcnRfcGF0Y2hfbmFtZTIKKyAgIyBUaGUgcGF0Y2ggcXVldWUgc2hvdWxkIG5vdyBsb29rIGxpa2UKKyAgaGcgcXNlcmllcworICAgIDAgQSBzaG9ydF9wYXRjaF9uYW1lMQorICAgIDEgQSBzaG9ydF9wYXRjaF9uYW1lMgorICAgIDIgVSBzaG9ydF9wYXRjaF9uYW1lMworICAgIDMgVSBzaG9ydF9wYXRjaF9uYW1lNAorICAjIHNvIHBhdGNoICMgMSAoc2hvcnRfcGF0Y2hfbmFtZTIpIGlzIHRvcCBvZiBzdGFjay4KKyAgPG5vdyByZWVkaXQgdGhlIHNvdXJjZXMgZm9yIHNob3J0X3BhdGNoX25hbWUyPgorICAjIGFuZCBleGVjdXRlIGFnYWluCisgIGhnIHFyZWZyZXNoIC1EIFstZV0KKyAgPGFuZCBvcHRpb25hbGx5IFstZV0gcmVlZGl0IHRoZSBjb21taXQgbWVzc2FnZT4KKyAgIyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgcmVhcHBsaWVzIHRoZSBub3cgdW5hcHBsaWVkIHR3byBwYXRjaGVzOgorICBoZyBxcHVzaCAtYQorICAjIHlvdSBjYW4gYWxzbyB1c2UgYGhnIHFnb3RvIHNob3J0X3BhdGNoX25hbWU0YCB0byBnZXQgdGhlcmUgYWdhaW4uCisKKworUkVTRU5ESU5HIFlPVVIgUkVFRElURUQgUEFUQ0hFUzoKKworQnkgbWFpbGluZyBsaXN0IHBvbGljeSwgcGxlYXNlIHJlc2VuZCB5b3VyIGNvbXBsZXRlIHBhdGNoIHNlcmllcy4KKy0tPiBHbyBiYWNrIHRvIHNlY3Rpb24gIkNPTlRSSUJVVElORyBZT1VSIFBBVENIRVMiIGFuZCByZXN1Ym1pdCB0aGUgZnVsbCBzZXQuCisKKworU1lOQ0lORyBXSVRIIFVQU1RSRUFNIEFHQUlOOgorCitZb3UgY2FuIHN5bmMgeW91ciByZXBvIHdpdGggdXBzdHJlYW0gYXQgYW55IHRpbWUgYnkgZXhlY3V0aW5nCisgICMgZmlyc3QgdW5hcHBseSBhbGwgeW91ciBwYXRjaGVzOgorICBoZyBxcG9wIC1hCisgICMgbmV4dCBmZXRjaCBuZXcgY2hhbmdlc2V0cyBmcm9tIHVwc3RyZWFtCisgIGhnIHB1bGwKKyAgIyB0aGVuIHVwZGF0ZSB5b3VyIHdvcmtpbmcgY29weQorICBoZyB1cAorICAjIG9wdGlvbmFsbHkgcmVtb3ZlIGFscmVhZHkgdXBzdHJlYW0gaW50ZWdyYXRlZCBwYXRjaGVzIChzZWUgYmVsb3cpCisgIGhnIHFkZWxldGUgPHNob3J0X25hbWVfb2ZfYWxyZWFkeV9hcHBsaWVkX3BhdGNoPgorICAjIGFuZCByZWFwcGx5IHlvdXIgcGF0Y2hlcyBpZiBhbnkgbm9uIHVwc3RyZWFtLWludGVncmF0ZWQgbGVmdCAoYnV0IHNlZSBiZWxvdykKKyAgaGcgcXB1c2ggLWEKKworRXZlbnR1YWxseSwgeW91ciBwYXRjaGVzIGdldCBpbmNsdWRlZCBpbnRvIHRoZSB1cHN0cmVhbSByZXBvc2l0b3J5Cit3aGljaCB5b3UgaW5pdGlhbGx5IGNsb25lZC4KK0luIHRoaXMgY2FzZSwgYmVmb3JlIGV4ZWN1dGluZyB0aGUgaGcgcXB1c2ggLWEgZnJvbSBhYm92ZQoreW91IHNob3VsZCBtYW51YWxseSAiaGcgcWRlbGV0ZSIgdGhlIHBhdGNoZXMgdGhhdCBhcmUgYWxyZWFkeSBpbnRlZ3JhdGVkIHVwc3RyZWFtLgorCisKK0hPVyBUTyBGT1JNQVQgQ09NTUlUIE1FU1NBR0VTIChha2EgcGF0Y2ggZGVzY3JpcHRpb25zKToKKworQ29tbWl0IG1lc3NhZ2VzIHNob3VsZCBsb29rIGxpa2UgKHdpdGhvdXQgbGVhZGluZyBwaXBlcyk6CisgfGNvbXBvbmVudDogc2hvcnQsIG9uZS1saW5lIGRlc2NyaXB0aW9uCisgfAorIHxvcHRpb25hbCBsb25nZXIgZGVzY3JpcHRpb24KKyB8b24gbXVsdGlwbGUgbGluZXMgaWYgbmVlZGVkCisgfAorIHxTaWduZWQtb2ZmLWJ5OiBhcyBkb2N1bWVudGVkIGluIHNlY3Rpb24gNyBvZiBjdC1uZydzIGRvY3VtZW50YXRpb24KKworSGVyZSBpcyBhbiBleGFtcGxlIGNvbW1pdCBtZXNzYWdlIChzZWUgcmV2aXNpb24gOGJiNTE1MWM1YjAxKToKKyBrZXJuZWwvbGludXg6IGZpeCB0eXBlIGluIHZlcnNpb24gc3RyaW5ncworCisgSSBtaXNzZWQgcmVmcmVzaGluZyB0aGUgcGF0Y2ggYmVmb3JlIHB1c2hpbmcuIDotKAorCisgU2lnbmVkLW9mZi1ieTogIllhbm4gRS4gTU9SSU4iIDx5YW5uLm1vcmluLjE5OThAYW5jaWVucy5lbmliLmZyPgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL3BrZy1jb25maWcvcGtnLWNvbmZpZy1ndWlkZS5odG1sIGIvc2hhcmUvZG9jL3BrZy1jb25maWcvcGtnLWNvbmZpZy1ndWlkZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNmM3MmYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvcGtnLWNvbmZpZy9wa2ctY29uZmlnLWd1aWRlLmh0bWwKQEAgLTAsMCArMSw0MjAgQEAKKzwhLS0KK0NvcHlyaWdodCAoQykgMjAxMCAgRGFuIE5pY2hvbHNvbi4KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKK3dpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKy0tPgorCis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgorICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKworPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgorPGhlYWQ+CisgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPgorICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAgIHByZSB7IGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjA7IHBhZGRpbmc6IDAuNGNtOyB9CisgIDwvc3R5bGU+CisKKyAgPHRpdGxlPkd1aWRlIHRvIHBrZy1jb25maWc8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKyAgPGgxPjxhIG5hbWU9InRvcCI+R3VpZGUgdG8gcGtnLWNvbmZpZzwvYT48L2gxPgorCisgIDxoMz5EYW4gTmljaG9sc29uPC9oMz4KKworICA8dWw+CisgICAgPGxpPjxhIGhyZWY9IiNvdmVydmlldyI+T3ZlcnZpZXc8L2E+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iI3doeSI+V2h5PzwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSIjY29uY2VwdHMiPkNvbmNlcHRzPC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9IiN3cml0aW5nIj5Xcml0aW5nIHBrZy1jb25maWcgZmlsZXM8L2E+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iI3VzaW5nIj5Vc2luZyBwa2ctY29uZmlnIGZpbGVzPC9hPjwvbGk+CisgICAgPCEtLTxsaT48YSBocmVmPSIjZXhhbXBsZXMiPkV4YW1wbGVzPC9hPjwvbGk+LS0+CisgICAgPGxpPjxhIGhyZWY9IiNmYXEiPkZyZXF1ZW50bHkgYXNrZWQgcXVlc3Rpb25zPC9hPjwvbGk+CisgIDwvdWw+CisKKyAgPGgyPjxhIG5hbWU9Im92ZXJ2aWV3Ij5PdmVydmlldzwvYT48L2gyPgorCisgIDxwPlRoaXMgZG9jdW1lbnQgYWltcyB0byBnaXZlIGFuIG92ZXJ2aWV3IHRvIHVzaW5nIHRoZSA8dHQ+cGtnLWNvbmZpZzwvdHQ+CisgIHRvb2wgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgYm90aCBhIHVzZXIgYW5kIGEgZGV2ZWxvcGVyLiBJdCByZXZpZXdzIHRoZQorICBjb25jZXB0cyBiZWhpbmQgPHR0PnBrZy1jb25maWc8L3R0PiwgaG93IHRvIHdyaXRlIDx0dD5wa2ctY29uZmlnPC90dD4gZmlsZXMKKyAgdG8gc3VwcG9ydCB5b3VyIHByb2plY3QsIGFuZCBob3cgdG8gdXNlIDx0dD5wa2ctY29uZmlnPC90dD4gdG8gaW50ZWdyYXRlCisgIHdpdGggM3JkIHBhcnR5IHByb2plY3RzLjwvcD4KKworICA8cD5Nb3JlIGluZm9ybWF0aW9uIG9uIDx0dD5wa2ctY29uZmlnPC90dD4gY2FuIGJlIGZvdW5kIGF0IHRoZQorICA8YSBocmVmPSJodHRwOi8vcGtnLWNvbmZpZy5mcmVlZGVza3RvcC5vcmcvIj53ZWJzaXRlPC9hPiBhbmQgaW4gdGhlCisgIDx0dD5wa2ctY29uZmlnKDEpPC90dD4gbWFudWFsIHBhZ2UuPC9wPgorCisgIDxwPlRoaXMgZG9jdW1lbnQgYXNzdW1lcyB1c2FnZSBvZiA8dHQ+cGtnLWNvbmZpZzwvdHQ+IG9uIGEgVW5peC1saWtlCisgIG9wZXJhdGluZyBzeXN0ZW0gc3VjaCBhcyBMaW51eC4gU29tZSBvZiB0aGUgZGV0YWlscyBtYXkgYmUgZGlmZmVyZW50IG9uCisgIG90aGVyIHBsYXRmb3Jtcy48L3A+CisKKyAgPGgyPjxhIG5hbWU9IndoeSI+V2h5PzwvYT48L2gyPgorCisgIDxwPk1vZGVybiBjb21wdXRlciBzeXN0ZW1zIHVzZSBtYW55IGxheWVyZWQgY29tcG9uZW50cyB0byBwcm92aWRlCisgIGFwcGxpY2F0aW9ucyB0byB0aGUgdXNlci4gT25lIG9mIHRoZSBkaWZmaWN1bHRpZXMgaW4gYXNzZW1ibGluZyB0aGVzZSBwYXJ0cworICBpcyBwcm9wZXJseSBpbnRlZ3JhdGluZyB0aGVtLiA8dHQ+cGtnLWNvbmZpZzwvdHQ+IGNvbGxlY3RzIG1ldGFkYXRhIGFib3V0CisgIHRoZSBpbnN0YWxsZWQgbGlicmFyaWVzIG9uIHRoZSBzeXN0ZW0gYW5kIGVhc2lseSBwcm92aWRlcyBpdCB0byB0aGUgdXNlci4KKyAgPC9wPgorCisgIDxwPldpdGhvdXQgYSBtZXRhZGF0YSBzeXN0ZW0gc3VjaCBhcyA8dHQ+cGtnLWNvbmZpZzwvdHQ+LCBpdCBjYW4gYmUgdmVyeQorICBkaWZmaWN1bHQgdG8gbG9jYXRlIGFuZCBvYnRhaW4gZGV0YWlscyBhYm91dCB0aGUgc2VydmljZXMgcHJvdmlkZWQgb24gYQorICBnaXZlbiBjb21wdXRlci4gRm9yIGEgZGV2ZWxvcGVyLCBpbnN0YWxsaW5nIDx0dD5wa2ctY29uZmlnPC90dD4gZmlsZXMgd2l0aAorICB5b3VyIHBhY2thZ2UgZ3JlYXRseSBlYXNlcyBhZG9wdGlvbiBvZiB5b3VyIEFQSS48L3A+CisKKyAgPGgyPjxhIG5hbWU9ImNvbmNlcHRzIj5Db25jZXB0czwvYT48L2gyPgorCisgIDxwPlRoZSBwcmltYXJ5IHVzZSBvZiA8dHQ+cGtnLWNvbmZpZzwvdHQ+IGlzIHRvIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeQorICBkZXRhaWxzIGZvciBjb21waWxpbmcgYW5kIGxpbmtpbmcgYSBwcm9ncmFtIHRvIGEgbGlicmFyeS4gVGhpcyBtZXRhZGF0YSBpcworICBzdG9yZWQgaW4gPHR0PnBrZy1jb25maWc8L3R0PiBmaWxlcy4gVGhlc2UgZmlsZXMgaGF2ZSB0aGUgc3VmZml4CisgIDx0dD4ucGM8L3R0PiBhbmQgcmVzaWRlIGluIHNwZWNpZmljIGxvY2F0aW9ucyBrbm93biB0byB0aGUKKyAgPHR0PnBrZy1jb25maWc8L3R0PiB0b29sLiBUaGlzIHdpbGwgYmUgZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGxhdGVyLjwvcD4KKworICA8cD5UaGUgZmlsZSBmb3JtYXQgY29udGFpbnMgcHJlZGVmaW5lZCBtZXRhZGF0YSBrZXl3b3JkcyBhbmQgZnJlZWZvcm0KKyAgdmFyaWFibGVzLiBBbiBleGFtcGxlIG1heSBiZSBpbGx1c3RyYXRpdmU6PHA+CisKKzxwcmU+cHJlZml4PS91c3IvbG9jYWwKK2V4ZWNfcHJlZml4PSR7cHJlZml4fQoraW5jbHVkZWRpcj0ke3ByZWZpeH0vaW5jbHVkZQorbGliZGlyPSR7ZXhlY19wcmVmaXh9L2xpYgorCitOYW1lOiBmb28KK0Rlc2NyaXB0aW9uOiBUaGUgZm9vIGxpYnJhcnkKK1ZlcnNpb246IDEuMC4wCitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfS9mb28KK0xpYnM6IC1MJHtsaWJkaXJ9IC1sZm9vPC9wcmU+CisKKyAgPHA+VGhlIGtleXdvcmQgZGVmaW5pdGlvbnMgc3VjaCBhcyA8dHQ+TmFtZTo8L3R0PiBiZWdpbiB3aXRoIGEga2V5d29yZAorICBmb2xsb3dlZCBieSBhIGNvbG9uIGFuZCB0aGUgdmFsdWUuIFRoZSB2YXJpYWJsZXMgc3VjaCBhcyA8dHQ+cHJlZml4PTwvdHQ+CisgIGFyZSBhIHN0cmluZyBhbmQgdmFsdWUgc2VwYXJhdGVkIGJ5IGFuIGVxdWFscyBzaWduLiBUaGUga2V5d29yZHMgYXJlIGRlZmluZWQKKyAgYW5kIGV4cG9ydGVkIGJ5IDx0dD5wa2ctY29uZmlnPC90dD4uIFRoZSB2YXJpYWJsZXMgYXJlIG5vdCBuZWNlc3NhcnksIGJ1dAorICBjYW4gYmUgdXNlZCBieSB0aGUga2V5d29yZCBkZWZpbml0aW9ucyBmb3IgZmxleGliaWxpdHkgb3IgdG8gc3RvcmUgZGF0YSBub3QKKyAgY292ZXJlZCBieSA8dHQ+cGtnLWNvbmZpZzwvdHQ+LjwvcD4KKworICA8cD5IZXJlIGlzIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIGtleXdvcmQgZmllbGRzLiBBIG1vcmUgaW4gZGVwdGgKKyAgZGVzY3JpcHRpb24gb2YgdGhlc2UgZmllbGRzIGFuZCBob3cgdG8gdXNlIHRoZW0gZWZmZWN0aXZlbHkgd2lsbCBiZSBnaXZlbiBpbgorICB0aGUgPGEgaHJlZj0iI3dyaXRpbmciPldyaXRpbmcgcGtnLWNvbmZpZyBmaWxlczwvYT4gc2VjdGlvbi48L3A+CisKKyAgPHVsPgorICAgIDxsaT48Yj5OYW1lPC9iPjogQSBodW1hbi1yZWFkYWJsZSBuYW1lIGZvciB0aGUgbGlicmFyeSBvciBwYWNrYWdlLiBUaGlzCisgICAgZG9lcyBub3QgYWZmZWN0IHVzYWdlIG9mIHRoZSA8dHQ+cGtnLWNvbmZpZzwvdHQ+IHRvb2wsIHdoaWNoIHVzZXMgdGhlIG5hbWUKKyAgICBvZiB0aGUgPHR0Pi5wYzwvdHQ+IGZpbGUuPC9saT4KKworICAgIDxsaT48Yj5EZXNjcmlwdGlvbjwvYj46IEEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIHBhY2thZ2UuPC9saT4KKworICAgIDxsaT48Yj5VUkw8L2I+OiBBbiBVUkwgd2hlcmUgcGVvcGxlIGNhbiBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBhbmQKKyAgICBkb3dubG9hZCB0aGUgcGFja2FnZS48L2xpPgorCisgICAgPGxpPjxiPlZlcnNpb248L2I+OiBBIHN0cmluZyBzcGVjaWZpY2FsbHkgZGVmaW5pbmcgdGhlIHZlcnNpb24gb2YgdGhlCisgICAgcGFja2FnZS48L2xpPgorCisgICAgPGxpPjxiPlJlcXVpcmVzPC9iPjogQSBsaXN0IG9mIHBhY2thZ2VzIHJlcXVpcmVkIGJ5IHRoaXMgcGFja2FnZS4gVGhlCisgICAgdmVyc2lvbnMgb2YgdGhlc2UgcGFja2FnZXMgbWF5IGJlIHNwZWNpZmllZCB1c2luZyB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMKKyAgICA9LCAmbHQ7LCAmZ3Q7LCAmbHQ7PSBvciAmZ3Q7PS48L2xpPgorCisgICAgPGxpPjxiPlJlcXVpcmVzLnByaXZhdGU8L2I+OiBBIGxpc3Qgb2YgcHJpdmF0ZSBwYWNrYWdlcyByZXF1aXJlZCBieSB0aGlzCisgICAgcGFja2FnZSBidXQgbm90IGV4cG9zZWQgdG8gYXBwbGljYXRpb25zLiBUaGUgdmVyc2lvbiBzcGVjaWZpYyBydWxlcyBmcm9tCisgICAgdGhlIDx0dD5SZXF1aXJlczwvdHQ+IGZpZWxkIGFsc28gYXBwbHkgaGVyZS48L2xpPgorCisgICAgPGxpPjxiPkNvbmZsaWN0czwvYj46IEFuIG9wdGlvbmFsIGZpZWxkIGRlc2NyaWJpbmcgcGFja2FnZXMgdGhhdCB0aGlzIG9uZQorICAgIGNvbmZsaWN0cyB3aXRoLiBUaGUgdmVyc2lvbiBzcGVjaWZpYyBydWxlcyBmcm9tIHRoZSA8dHQ+UmVxdWlyZXM8L3R0PgorICAgIGZpZWxkIGFsc28gYXBwbHkgaGVyZS4gVGhpcyBmaWVsZCBhbHNvIHRha2VzIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUKKyAgICBzYW1lIHBhY2thZ2UuIEUuZy4sIDx0dD5Db25mbGljdHM6IGJhciA8IDEuMi4zLCBiYXIgPj0gMS4zLjA8L3R0Pi48L2xpPgorCisgICAgPGxpPjxiPkNmbGFnczwvYj46IFRoZSBjb21waWxlciBmbGFncyBzcGVjaWZpYyB0byB0aGlzIHBhY2thZ2UgYW5kIGFueQorICAgIHJlcXVpcmVkIGxpYnJhcmllcyB0aGF0IGRvbid0IHN1cHBvcnQgPHR0PnBrZy1jb25maWc8L3R0Pi4gSWYgdGhlIHJlcXVpcmVkCisgICAgbGlicmFyaWVzIHN1cHBvcnQgPHR0PnBrZy1jb25maWc8L3R0PiwgdGhleSBzaG91bGQgYmUgYWRkZWQgdG8KKyAgICA8dHQ+UmVxdWlyZXM8L3R0PiBvciA8dHQ+UmVxdWlyZXMucHJpdmF0ZTwvdHQ+LjwvbGk+CisKKyAgICA8bGk+PGI+TGliczwvYj46IFRoZSBsaW5rIGZsYWdzIHNwZWNpZmljIHRvIHRoaXMgcGFja2FnZSBhbmQgYW55IHJlcXVpcmVkCisgICAgbGlicmFyaWVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCA8dHQ+cGtnLWNvbmZpZzwvdHQ+LiBUaGUgc2FtZSBydWxlIGFzCisgICAgPHR0PkNmbGFnczwvdHQ+IGFwcGxpZXMgaGVyZS48L2xpPgorCisgICAgPGxpPjxiPkxpYnMucHJpdmF0ZTwvYj46IFRoZSBsaW5rIGZsYWdzIGZvciBwcml2YXRlIGxpYnJhcmllcyByZXF1aXJlZCBieQorICAgIHRoaXMgcGFja2FnZSBidXQgbm90IGV4cG9zZWQgdG8gYXBwbGljYXRpb25zLiBUaGUgc2FtZSBydWxlIGFzCisgICAgPHR0PkNmbGFnczwvdHQ+IGFwcGxpZXMgaGVyZS48L2xpPgorICA8L3VsPgorCisgIDxoMj48YSBuYW1lPSJ3cml0aW5nIj5Xcml0aW5nIHBrZy1jb25maWcgZmlsZXM8L2E+PC9oMj4KKworICA8cD5XaGVuIGNyZWF0aW5nIDx0dD5wa2ctY29uZmlnPC90dD4gZmlsZXMgZm9yIGEgcGFja2FnZSwgaXQgaXMgZmlyc3QKKyAgbmVjZXNzYXJ5IHRvIGRlY2lkZSBob3cgdGhleSB3aWxsIGJlIGRpc3RyaWJ1dGVkLiBFYWNoIGZpbGUgaXMgYmVzdCB1c2VkIHRvCisgIGRlc2NyaWJlIGEgc2luZ2xlIGxpYnJhcnksIHNvIGVhY2ggcGFja2FnZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCBhcyBtYW55CisgIDx0dD5wa2ctY29uZmlnPC90dD4gZmlsZXMgYXMgdGhleSBkbyBpbnN0YWxsZWQgbGlicmFyaWVzLjwvcD4KKworICA8cD5UaGUgcGFja2FnZSBuYW1lIGlzIGRldGVybWluZWQgdGhyb3VnaCB0aGUgZmlsZW5hbWUgb2YgdGhlCisgIDx0dD5wa2ctY29uZmlnPC90dD4gbWV0YWRhdGEgZmlsZS4gVGhpcyBpcyB0aGUgcG9ydGlvbiBvZiB0aGUgZmlsZW5hbWUgcHJpb3IKKyAgdG8gdGhlIDx0dD4ucGM8L3R0PiBzdWZmaXguIEEgY29tbW9uIGNob2ljZSBpcyB0byBtYXRjaCB0aGUgbGlicmFyeSBuYW1lIHRvCisgIHRoZSA8dHQ+LnBjPC90dD4gbmFtZS4gRm9yIGluc3RhbmNlLCBhIHBhY2thZ2UgaW5zdGFsbGluZyA8dHQ+bGliZm9vLnNvPC90dD4KKyAgd291bGQgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgPHR0PmxpYmZvby5wYzwvdHQ+IGZpbGUgY29udGFpbmluZyB0aGUKKyAgPHR0PnBrZy1jb25maWc8L3R0PiBtZXRhZGF0YS4gVGhpcyBjaG9pY2UgaXMgbm90IG5lY2Vzc2FyeTsgdGhlIDx0dD4ucGM8L3R0PgorICBmaWxlIHNob3VsZCBzaW1wbHkgYmUgYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgeW91ciBsaWJyYXJ5LiBGb2xsb3dpbmcgdGhlCisgIGFib3ZlIGV4YW1wbGUsIDx0dD5mb28ucGM8L3R0PiBvciA8dHQ+Zm9vbGliLnBjPC90dD4gd291bGQgcHJvYmFibHkgd29yaworICBqdXN0IGFzIHdlbGwuPC9wPgorCisgIDxwPlRoZSA8dHQ+TmFtZTwvdHQ+LCA8dHQ+RGVzY3JpcHRpb248L3R0PiBhbmQgPHR0PlVSTDwvdHQ+IGZpZWxkcyBhcmUKKyAgcHVyZWx5IGluZm9ybWF0aW9uYWwgYW5kIHNob3VsZCBiZSBlYXN5IHRvIGZpbGwgaW4uIFRoZSA8dHQ+VmVyc2lvbjwvdHQ+CisgIGZpZWxkIGlzIGEgYml0IHRyaWNraWVyIHRvIGVuc3VyZSB0aGF0IGl0IGlzIHVzYWJsZSBieSBjb25zdW1lcnMgb2YgdGhlCisgIGRhdGEuIDx0dD5wa2ctY29uZmlnPC90dD4gdXNlcyB0aGUgYWxnb3JpdGhtIGZyb20KKyAgPGEgaHJlZj0iaHR0cDovL3JwbS5vcmcvIj5SUE08L2E+IGZvciB2ZXJzaW9uIGNvbXBhcmlzb25zLiBUaGlzIHdvcmtzIGJlc3QKKyAgd2l0aCBhIGRvdHRlZCBkZWNpbWFsIG51bWJlciBzdWNoIGFzIDx0dD4xLjIuMzwvdHQ+IHNpbmNlIGxldHRlcnMgY2FuIGNhdXNlCisgIHVuZXhwZWN0ZWQgcmVzdWx0cy4gVGhlIG51bWJlciBzaG91bGQgYmUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGFuZCBiZQorICBhcyBzcGVjaWZpYyBhcyBwb3NzaWJsZSBpbiBkZXNjcmliaW5nIHRoZSBsaWJyYXJ5LiBVc3VhbGx5IGl0J3Mgc3VmZmljaWVudAorICB0byB1c2UgdGhlIHBhY2thZ2UncyB2ZXJzaW9uIG51bWJlciBoZXJlIHNpbmNlIGl0J3MgZWFzeSBmb3IgY29uc3VtZXJzIHRvCisgIHRyYWNrLjwvcD4KKworICA8cD5CZWZvcmUgZGVzY3JpYmluZyB0aGUgbW9yZSB1c2VmdWwgZmllbGRzLCBpdCB3aWxsIGJlIGhlbHBmdWwgdG8KKyAgZGVtb25zdHJhdGUgdmFyaWFibGUgZGVmaW5pdGlvbnMuIFRoZSBtb3N0IGNvbW1vbiB1c2FnZSBpcyB0byBkZWZpbmUgdGhlCisgIGluc3RhbGxhdGlvbiBwYXRocyBzbyB0aGF0IHRoZXkgZG9uJ3QgY2x1dHRlciB0aGUgbWV0YWRhdGEgZmllbGRzLiBTaW5jZQorICB0aGUgdmFyaWFibGVzIGFyZSBleHBhbmRlZCByZWN1cnNpdmVseSwgdGhpcyBpcyB2ZXJ5IGhlbHBmdWwgd2hlbiB1c2VkIGluCisgIGNvbmp1bmN0aW9uIHdpdGggYXV0b2NvbmYgZGVyaXZlZCBwYXRocy48L3A+CisKKzxwcmU+cHJlZml4PS91c3IvbG9jYWwKK2luY2x1ZGVkaXI9JHtwcmVmaXh9L2luY2x1ZGUKKworQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0vZm9vPC9wcmU+CisKKyAgPHA+VGhlIG1vc3QgaW1wb3J0YW50IDx0dD5wa2ctY29uZmlnPC90dD4gbWV0YWRhdGEgZmllbGRzIGFyZQorICA8dHQ+UmVxdWlyZXM8L3R0PiwgPHR0PlJlcXVpcmVzLnByaXZhdGU8L3R0PiwgPHR0PkNmbGFnczwvdHQ+LCA8dHQ+TGliczwvdHQ+CisgIGFuZCA8dHQ+TGlicy5wcml2YXRlPC90dD4uIFRoZXkgd2lsbCBkZWZpbmUgdGhlIG1ldGFkYXRhIHVzZWQgYnkgZXh0ZXJuYWwKKyAgcHJvamVjdHMgdG8gY29tcGlsZSBhbmQgbGluayB3aXRoIHRoZSBsaWJyYXJ5LjwvcD4KKworICA8cD48dHQ+UmVxdWlyZXM8L3R0PiBhbmQgPHR0PlJlcXVpcmVzLnByaXZhdGU8L3R0PiBkZWZpbmUgb3RoZXIgbW9kdWxlcworICBuZWVkZWQgYnkgdGhlIGxpYnJhcnkuIEl0IGlzIHVzdWFsbHkgcHJlZmVycmVkIHRvIHVzZSB0aGUgcHJpdmF0ZSB2YXJpYW50IG9mCisgIDx0dD5SZXF1aXJlczwvdHQ+IHRvIGF2b2lkIGV4cG9zaW5nIHVubmVjZXNzYXJ5IGxpYnJhcmllcyB0byB0aGUgcHJvZ3JhbQorICB0aGF0IGlzIGxpbmtpbmcgd2l0aCB5b3VyIGxpYnJhcnkuIElmIHRoZSBwcm9ncmFtIHdpbGwgbm90IGJlIHVzaW5nIHRoZQorICBzeW1ib2xzIG9mIHRoZSByZXF1aXJlZCBsaWJyYXJ5LCBpdCBzaG91bGQgbm90IGJlIGxpbmtpbmcgZGlyZWN0bHkgdG8gdGhhdAorICBsaWJyYXJ5LiBTZWUgdGhlIGRpc2N1c3Npb24gb2YKKyAgPGEgaHJlZj0iaHR0cDovL3dpa2kubWFuZHJpdmEuY29tL2VuL092ZXJsaW5raW5nIj5vdmVybGlua2luZzwvYT4gZm9yIGEgbW9yZQorICB0aG9yb3VnaCBleHBsYW5hdGlvbi48L3A+CisKKyAgPHA+U2luY2UgPHR0PnBrZy1jb25maWc8L3R0PiBhbHdheXMgZXhwb3NlcyB0aGUgbGluayBmbGFncyBvZiB0aGUKKyAgPHR0PlJlcXVpcmVzPC90dD4gbGlicmFyaWVzLCB0aGVzZSBtb2R1bGVzIHdpbGwgYmVjb21lIGRpcmVjdCBkZXBlbmRlbmNpZXMKKyAgb2YgdGhlIHByb2dyYW0uIE9uIHRoZSBvdGhlciBoYW5kLCBsaWJyYXJpZXMgZnJvbSA8dHQ+UmVxdWlyZXMucHJpdmF0ZTwvdHQ+CisgIHdpbGwgb25seSBiZSBpbmNsdWRlZCB3aGVuIHN0YXRpYyBsaW5raW5nLiBGb3IgdGhpcyByZWFzb24sIGl0IGlzIHVzdWFsbHkKKyAgb25seSBhcHByb3ByaWF0ZSB0byBhZGQgbW9kdWxlcyBmcm9tIHRoZSBzYW1lIHBhY2thZ2UgaW4gPHR0PlJlcXVpcmVzPC90dD4uCisgIDwvcD4KKworICA8cD5UaGUgPHR0PkxpYnM8L3R0PiBmaWVsZCBjb250YWlucyB0aGUgbGluayBmbGFncyBuZWNlc3NhcnkgdG8gdXNlIHRoYXQKKyAgbGlicmFyeS4gSW4gYWRkaXRpb24sIDx0dD5MaWJzPC90dD4gYW5kIDx0dD5MaWJzLnByaXZhdGU8L3R0PiBjb250YWluIGxpbmsKKyAgZmxhZ3MgZm9yIG90aGVyIGxpYnJhcmllcyBub3Qgc3VwcG9ydGVkIGJ5IDx0dD5wa2ctY29uZmlnPC90dD4uIFNpbWlsYXIgdG8KKyAgdGhlIDx0dD5SZXF1aXJlczwvdHQ+IGZpZWxkLCBpdCBpcyBwcmVmZXJyZWQgdG8gYWRkIGxpbmsgZmxhZ3MgZm9yIGV4dGVybmFsCisgIGxpYnJhcmllcyB0byB0aGUgPHR0PkxpYnMucHJpdmF0ZTwvdHQ+IGZpZWxkIHNvIHByb2dyYW1zIGRvIG5vdCBhY3F1aXJlIGFuCisgIGFkZGl0aW9uYWwgZGlyZWN0IGRlcGVuZGVuY3kuPC9wPgorCisgIDxwPkZpbmFsbHksIHRoZSA8dHQ+Q2ZsYWdzPC90dD4gY29udGFpbnMgdGhlIGNvbXBpbGVyIGZsYWdzIGZvciB1c2luZyB0aGUKKyAgbGlicmFyeS4gVW5saWtlIHRoZSA8dHQ+TGliczwvdHQ+IGZpZWxkLCB0aGVyZSBpcyBub3QgYSBwcml2YXRlIHZhcmlhbnQgb2YKKyAgPHR0PkNmbGFnczwvdHQ+LiBUaGlzIGlzIGJlY2F1c2UgdGhlIGRhdGEgdHlwZXMgYW5kIG1hY3JvIGRlZmluaXRpb25zIGFyZQorICBuZWVkZWQgcmVnYXJkbGVzcyBvZiB0aGUgbGlua2luZyBzY2VuYXJpby48L3A+CisKKyAgPGgyPjxhIG5hbWU9InVzaW5nIj5Vc2luZyBwa2ctY29uZmlnIGZpbGVzPC9hPjwvaDI+CisKKyAgPHA+QXNzdW1pbmcgdGhhdCB0aGVyZSBhcmUgPHR0Pi5wYzwvdHQ+IGZpbGVzIGluc3RhbGxlZCBvbiB0aGUgc3lzdGVtLCB0aGUKKyAgPHR0PnBrZy1jb25maWc8L3R0PiB0b29sIGlzIHVzZWQgdG8gZXh0cmFjdCB0aGUgbWV0YWRhdGEgZm9yIHVzYWdlLiBBIHNob3J0CisgIGRlc2NyaXB0aW9uIG9mIHRoZSBvcHRpb25zIGNhbiBiZSBzZWVuIGJ5IGV4ZWN1dGluZworICA8dHQ+cGtnLWNvbmZpZyAtLWhlbHA8L3R0Pi4gQSBtb3JlIGluIGRlcHRoIGRpc2N1c3Npb24gY2FuIGJlIGZvdW5kIGluIHRoZQorICA8dHQ+cGtnLWNvbmZpZygxKTwvdHQ+IG1hbnVhbCBwYWdlLiBUaGlzIHNlY3Rpb24gd2lsbCBwcm92aWRlIGEgYnJpZWYKKyAgZXhwbGFuYXRpb24gb2YgY29tbW9uIHVzYWdlcy48L3R0PgorCisgIDxwPkNvbnNpZGVyIGEgc3lzdGVtIHdpdGggdHdvIG1vZHVsZXMsIDx0dD5mb288L3R0PiBhbmQgPHR0PmJhcjwvdHQ+LgorICBUaGVpciA8dHQ+LnBjPC90dD4gZmlsZXMgbWlnaHQgbG9vayBsaWtlIHRoaXM6PC9wPgorCis8cHJlPmZvby5wYzoKK3ByZWZpeD0vdXNyCitleGVjX3ByZWZpeD0ke3ByZWZpeH0KK2luY2x1ZGVkaXI9JHtwcmVmaXh9L2luY2x1ZGUKK2xpYmRpcj0ke2V4ZWNfcHJlZml4fS9saWIKKworTmFtZTogZm9vCitEZXNjcmlwdGlvbjogVGhlIGZvbyBsaWJyYXJ5CitWZXJzaW9uOiAxLjAuMAorQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0vZm9vCitMaWJzOiAtTCR7bGliZGlyfSAtbGZvbworCitiYXIucGM6CitwcmVmaXg9L3VzcgorZXhlY19wcmVmaXg9JHtwcmVmaXh9CitpbmNsdWRlZGlyPSR7cHJlZml4fS9pbmNsdWRlCitsaWJkaXI9JHtleGVjX3ByZWZpeH0vbGliCisKK05hbWU6IGJhcgorRGVzY3JpcHRpb246IFRoZSBiYXIgbGlicmFyeQorVmVyc2lvbjogMi4xLjIKK1JlcXVpcmVzLnByaXZhdGU6IGZvbyA+PSAwLjcKK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CitMaWJzOiAtTCR7bGliZGlyfSAtbGJhcjwvcHJlPgorCisgIDxwPlRoZSB2ZXJzaW9uIG9mIHRoZSBtb2R1bGVzIGNhbiBiZSBvYnRhaW5lZCB3aXRoIHRoZSA8dHQ+LS1tb2R2ZXJzaW9uPC90dD4KKyAgb3B0aW9uLjwvcD4KKworPHByZT4kIHBrZy1jb25maWcgLS1tb2R2ZXJzaW9uIGZvbworMS4wLjAKKyQgcGtnLWNvbmZpZyAtLW1vZHZlcnNpb24gYmFyCisyLjEuMjwvcHJlPgorCisgIDxwPlRvIHByaW50IHRoZSBsaW5rIGZsYWdzIG5lZWRlZCBmb3IgZWFjaCBtb2R1bGUsIHVzZSB0aGUgPHR0Pi0tbGliczwvdHQ+CisgIG9wdGlvbi48L3A+CisKKzxwcmU+JCBwa2ctY29uZmlnIC0tbGlicyBmb28KKy1sZm9vCiskIHBrZy1jb25maWcgLS1saWJzIGJhcgorLWxiYXI8L3ByZT4KKworICA8cD5Ob3RpY2UgdGhhdCA8dHQ+cGtnLWNvbmZpZzwvdHQ+IGhhcyBzdXBwcmVzc2VkIHBhcnQgb2YgdGhlIDx0dD5MaWJzPC90dD4KKyAgZmllbGQgZm9yIGJvdGggbW9kdWxlcy4gVGhpcyBpcyBiZWNhdXNlIGl0IHRyZWF0cyB0aGUgPHR0Pi1MPC90dD4gZmxhZworICBzcGVjaWFsbHkgYW5kIGtub3dzIHRoYXQgdGhlIDx0dD4ke2xpYmRpcn08L3R0PiBkaXJlY3RvcnkgPHR0Pi91c3IvbGliPC90dD4KKyAgaXMgcGFydCBvZiB0aGUgc3lzdGVtIGxpbmtlciBzZWFyY2ggcGF0aC4gVGhpcyBrZWVwcyA8dHQ+cGtnLWNvbmZpZzwvdHQ+CisgIGZyb20gaW50ZXJmZXJpbmcgd2l0aCB0aGUgbGlua2VyIG9wZXJhdGlvbi48L3A+CisKKyAgPHA+QWxzbywgYWx0aG91Z2ggPHR0PmZvbzwvdHQ+IGlzIHJlcXVpcmVkIGJ5IDx0dD5iYXI8L3R0PiwgdGhlIGxpbmsgZmxhZ3MKKyAgZm9yIDx0dD5mb288L3R0PiBhcmUgbm90IG91dHB1dC4gVGhpcyBpcyBiZWNhdXNlIDx0dD5mb288L3R0PiBpcyBub3QKKyAgZGlyZWN0bHkgbmVlZGVkIGJ5IGFuIGFwcGxpY2F0aW9uIHRoYXQgb25seSB3YW50cyB0byB1c2UgdGhlIDx0dD5iYXI8L3R0PgorICBsaWJyYXJ5LiBGb3Igc3RhdGljYWxseSBsaW5raW5nIGEgPHR0PmJhcjwvdHQ+IGFwcGxpY2F0aW9uLCB3ZSBuZWVkIGJvdGgKKyAgc2V0cyBvZiBsaW5rZXIgZmxhZ3M6PC9wPgorCis8cHJlPiQgcGtnLWNvbmZpZyAtLWxpYnMgLS1zdGF0aWMgYmFyCistbGJhciAtbGZvbzwvcHJlPgorCisgIDxwPjx0dD5wa2ctY29uZmlnPC90dD4gbmVlZHMgdG8gb3V0cHV0IGJvdGggc2V0cyBvZiBsaW5rIGZsYWdzIGluIHRoaXMgY2FzZQorICB0byBlbnN1cmUgdGhhdCB0aGUgc3RhdGljYWxseSBsaW5rZWQgYXBwbGljYXRpb24gd2lsbCBmaW5kIGFsbCB0aGUgbmVjZXNzYXJ5CisgIHN5bWJvbHMuIE9uIHRoZSBvdGhlciBoYW5kLCBpdCB3aWxsIGFsd2F5cyBvdXRwdXQgYWxsIHRoZSA8dHQ+Q2ZsYWdzPC90dD4uCisgIDwvcD4KKworPHByZT4kIHBrZy1jb25maWcgLS1jZmxhZ3MgYmFyCistSS91c3IvaW5jbHVkZS9mb28KKyQgcGtnLWNvbmZpZyAtLWNmbGFncyAtLXN0YXRpYyBiYXIKKy1JL3Vzci9pbmNsdWRlL2ZvbzwvcHJlPgorCisgIDxwPkFub3RoZXIgdXNlZnVsIG9wdGlvbiwgPHR0Pi0tZXhpc3RzPC90dD4sIGNhbiBiZSB1c2VkIHRvIHRlc3QgZm9yIGEKKyAgbW9kdWxlJ3MgYXZhaWxhYmlsaXR5LjwvcD4KKworPHByZT4kIHBrZy1jb25maWcgLS1leGlzdHMgZm9vCiskIGVjaG8gJD8KKzA8L3ByZT4KKworICA8cD5PbmUgb2YgdGhlIG5pY2VzdCBmZWF0dXJlcyBvZiA8dHQ+cGtnLWNvbmZpZzwvdHQ+IGlzIHByb3ZpZGluZyB2ZXJzaW9uCisgIGNoZWNraW5nLiBJdCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgaWYgYSBzdWZmaWNpZW50IHZlcnNpb24gaXMgYXZhaWxhYmxlLgorICA8L3A+CisKKzxwcmU+JCBwa2ctY29uZmlnIC0tbGlicyAiYmFyID49IDIuNyIKK1JlcXVlc3RlZCAnYmFyID49IDIuNycgYnV0IHZlcnNpb24gb2YgYmFyIGlzIDIuMS4yPC9wcmU+CisKKyAgPHA+U29tZSBjb21tYW5kcyB3aWxsIHByb3ZpZGUgbW9yZSB2ZXJib3NlIG91dHB1dCB3aGVuIGNvbWJpbmVkIHdpdGggdGhlCisgIDx0dD4tLXByaW50LWVycm9yczwvdHQ+IG9wdGlvbi48L3A+CisKKzxwcmU+JCBwa2ctY29uZmlnIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIHhveG8KK1BhY2thZ2UgeG94byB3YXMgbm90IGZvdW5kIGluIHRoZSBwa2ctY29uZmlnIHNlYXJjaCBwYXRoLgorUGVyaGFwcyB5b3Ugc2hvdWxkIGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYHhveG8ucGMnCit0byB0aGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlCitObyBwYWNrYWdlICd4b3hvJyBmb3VuZDwvcHJlPgorCisgIDxwPlRoZSBtZXNzYWdlIGFib3ZlIHJlZmVyZW5jZXMgdGhlIDx0dD5QS0dfQ09ORklHX1BBVEg8L3R0PiBlbnZpcm9ubWVudAorICB2YXJpYWJsZS4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGF1Z21lbnQgPHR0PnBrZy1jb25maWc8L3R0PidzIHNlYXJjaAorICBwYXRoLiBPbiBhIHR5cGljYWwgVW5peCBzeXN0ZW0sIGl0IHdpbGwgc2VhcmNoIGluIHRoZSBkaXJlY3RvcmllcworICA8dHQ+L3Vzci9saWIvcGtnY29uZmlnPC90dD4gYW5kIDx0dD4vdXNyL3NoYXJlL3BrZ2NvbmZpZzwvdHQ+LiBUaGlzIHdpbGwKKyAgdXN1YWxseSBjb3ZlciBzeXN0ZW0gaW5zdGFsbGVkIG1vZHVsZXMuIEhvd2V2ZXIsIHNvbWUgbG9jYWwgbW9kdWxlcyBtYXkgYmUKKyAgaW5zdGFsbGVkIGluIGEgZGlmZmVyZW50IHByZWZpeCBzdWNoIGFzIDx0dD4vdXNyL2xvY2FsPC90dD4uIEluIHRoYXQgY2FzZSwKKyAgaXQncyBuZWNlc3NhcnkgdG8gcHJlcGVuZCB0aGUgc2VhcmNoIHBhdGggc28gdGhhdCA8dHQ+cGtnLWNvbmZpZzwvdHQ+IGNhbgorICBsb2NhdGUgdGhlIDx0dD4ucGM8L3R0PiBmaWxlcy48L3A+CisKKzxwcmU+JCBwa2ctY29uZmlnIC0tbW9kdmVyc2lvbiBoZWxsbworUGFja2FnZSBoZWxsbyB3YXMgbm90IGZvdW5kIGluIHRoZSBwa2ctY29uZmlnIHNlYXJjaCBwYXRoLgorUGVyaGFwcyB5b3Ugc2hvdWxkIGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYGhlbGxvLnBjJwordG8gdGhlIFBLR19DT05GSUdfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZQorTm8gcGFja2FnZSAnaGVsbG8nIGZvdW5kCiskIGV4cG9ydCBQS0dfQ09ORklHX1BBVEg9L3Vzci9sb2NhbC9saWIvcGtnY29uZmlnCiskIHBrZy1jb25maWcgLS1tb2R2ZXJzaW9uIGhlbGxvCisxLjAuMDwvcHJlPgorCisgIDxwPkEgZmV3IDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvY29uZi8iPmF1dG9jb25mPC9hPiBtYWNyb3MKKyAgYXJlIGFsc28gcHJvdmlkZWQgdG8gZWFzZSBpbnRlZ3JhdGlvbiBvZiA8dHQ+cGtnLWNvbmZpZzwvdHQ+IG1vZHVsZXMgaW50bworICBwcm9qZWN0cy48L3A+CisKKyAgPHVsPgorICAgIDxsaT48Yj5QS0dfUFJPR19QS0dfQ09ORklHKFtNSU4tVkVSU0lPTl0pPC9iPjogTG9jYXRlcyB0aGUKKyAgICA8dHQ+cGtnLWNvbmZpZzwvdHQ+IHRvb2wgb24gdGhlIHN5c3RlbSBhbmQgY2hlY2tzIHRoZSB2ZXJzaW9uIGZvcgorICAgIGNvbXBhdGliaWxpdHkuPC9saT4KKworICAgIDxsaT48Yj5QS0dfQ0hFQ0tfRVhJU1RTKE1PRFVMRVMsIFtBQ1RJT04tSUYtRk9VTkRdLCBbQUNUSU9OLUlGLU5PVC1GT1VORF0pPC9iPjoKKyAgICBDaGVja3MgdG8gc2VlIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIHNldCBvZiBtb2R1bGVzIGV4aXN0cy48L2xpPgorCisgICAgPGxpPjxiPlBLR19DSEVDS19NT0RVTEVTKFZBUklBQkxFLVBSRUZJWCwgTU9EVUxFUywgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSk8L2I+OgorICAgIENoZWNrcyB0byBzZWUgd2hldGhlciBhIHBhcnRpY3VsYXIgc2V0IG9mIG1vZHVsZXMgZXhpc3RzLiBJZiBzbywgaXQgc2V0cworICAgIDx0dD4mbHQ7VkFSSUFCTEUtUFJFRklYJmd0O19DRkxBR1M8L3R0PiBhbmQKKyAgICA8dHQ+Jmx0O1ZBUklBQkxFLVBSRUZJWCZndDtfTElCUzwvdHQ+IGFjY29yZGluZyB0byB0aGUgb3V0cHV0IGZyb20KKyAgICA8dHQ+cGtnLWNvbmZpZyAtLWNmbGFnczwvdHQ+IGFuZCA8dHQ+cGtnLWNvbmZpZyAtLWxpYnM8L3R0Pi48L2xpPgorICA8L3VsPgorCisgIDwhLS08aDI+PGEgbmFtZT0iZXhhbXBsZXMiPkV4YW1wbGVzPC9hPjwvaDI+LS0+CisgIDxoMj48YSBuYW1lPSJmYXEiPkZyZXF1ZW50bHkgYXNrZWQgcXVlc3Rpb25zPC9hPjwvaDI+CisKKyAgPG9sPgorICAgIDxsaT5NeSBwcm9ncmFtIHVzZXMgbGlicmFyeSA8dHQ+eDwvdHQ+LiBXaGF0IGRvIEkgZG8/PC9saT4KKworICAgIDxwPlRoZSA8dHQ+cGtnLWNvbmZpZzwvdHQ+IG91dHB1dCBjYW4gZWFzaWx5IGJlIHVzZWQgb24gdGhlIGNvbXBpbGVyCisgICAgY29tbWFuZCBsaW5lLiBBc3N1bWluZyB0aGUgPHR0Png8L3R0PiBsaWJyYXJ5IGhhcyBhIDx0dD54LnBjPC90dD4KKyAgICA8dHQ+cGtnLWNvbmZpZzwvdHQ+IGZpbGU6PC9wPgorCis8cHJlPmNjIGBwa2ctY29uZmlnIC0tY2ZsYWdzIC0tbGlicyB4YCAtbyBteWFwcCBteWFwcC5jPC9wcmU+CisKKyAgICA8cD5UaGUgaW50ZWdyYXRpb24gY2FuIGJlIG1vcmUgcm9idXN0IHdoZW4gdXNlZCB3aXRoCisgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9jb25mLyI+YXV0b2NvbmY8L2E+IGFuZAorICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvbWFrZS8iPmF1dG9tYWtlPC9hPi4gQnkgdXNpbmcgdGhlCisgICAgc3VwcGxpZWQgPHR0PlBLR19DSEVDS19NT0RVTEVTPC90dD4gbWFjcm8sIHRoZSBtZXRhZGF0YSBpcyBlYXNpbHkgYWNjZXNzZWQKKyAgICBpbiB0aGUgYnVpbGQgcHJvY2Vzcy48L3A+CisKKzxwcmU+Y29uZmlndXJlLmFjOgorUEtHX0NIRUNLX01PRFVMRVMoW1hdLCBbeF0pCisKK01ha2VmaWxlLmFtOgorbXlhcHBfQ0ZMQUdTID0gJChYX0NGTEFHUykKK215YXBwX0xEQUREID0gJChYX0xJQlMpPC9wcmU+CisKKyAgICA8cD5JZiB0aGUgPHR0Png8L3R0PiBtb2R1bGUgaXMgZm91bmQsIHRoZSBtYWNybyB3aWxsIGZpbGwgYW5kIHN1YnN0aXR1dGUKKyAgICB0aGUgPHR0PlhfQ0ZMQUdTPC90dD4gYW5kIDx0dD5YX0xJQlM8L3R0PiB2YXJpYWJsZXMuIElmIHRoZSBtb2R1bGUgaXMgbm90CisgICAgZm91bmQsIGFuIGVycm9yIHdpbGwgYmUgcHJvZHVjZWQuIE9wdGlvbmFsIDNyZCBhbmQgNHRoIGFyZ3VtZW50cyBjYW4gYmUKKyAgICBzdXBwbGllZCB0byA8dHQ+UEtHX0NIRUNLX01PRFVMRVM8L3R0PiB0byBjb250cm9sIGFjdGlvbnMgd2hlbiB0aGUgbW9kdWxlCisgICAgaXMgZm91bmQgb3Igbm90LjwvcD4KKworICAgIDxsaT5NeSBsaWJyYXJ5IDx0dD56PC90dD4gaW5zdGFsbHMgaGVhZGVyIGZpbGVzIHdoaWNoIGluY2x1ZGUgPHR0PmxpYng8L3R0PgorICAgIGhlYWRlcnMuIFdoYXQgZG8gSSBwdXQgaW4gbXkgPHR0PnoucGM8L3R0PiBmaWxlPzwvbGk+CisKKyAgICA8cD5JZiB0aGUgPHR0Png8L3R0PiBsaWJyYXJ5IGhhcyA8dHQ+cGtnLWNvbmZpZzwvdHQ+IHN1cHBvcnQsIGFkZCBpdCB0bworICAgIHRoZSA8dHQ+UmVxdWlyZXMucHJpdmF0ZTwvdHQ+IGZpZWxkLiBJZiBpdCBkb2VzIG5vdCwgYXVnbWVudCB0aGUKKyAgICA8dHQ+Q2ZsYWdzPC90dD4gZmllbGQgd2l0aCB0aGUgbmVjZXNzYXJ5IGNvbXBpbGVyIGZsYWdzIGZvciB1c2luZyB0aGUKKyAgICA8dHQ+bGlieDwvdHQ+IGhlYWRlcnMuIEluIGVpdGhlciBjYXNlLCA8dHQ+cGtnLWNvbmZpZzwvdHQ+IHdpbGwgb3V0cHV0CisgICAgdGhlIGNvbXBpbGVyIGZsYWdzIHdoZW4gPHR0Pi0tc3RhdGljPC90dD4gaXMgdXNlZCBvciBub3QuPC9wPgorCisgICAgPGxpPk15IGxpYnJhcnkgPHR0Pno8L3R0PiB1c2VzIDx0dD5saWJ4PC90dD4gaW50ZXJuYWxseSwgYnV0IGRvZXMgbm90CisgICAgZXhwb3NlIDx0dD5saWJ4PC90dD4gZGF0YSB0eXBlcyBpbiBpdHMgcHVibGljIEFQSS4gV2hhdCBkbyBJIHB1dCBpbiBteQorICAgIDx0dD56LnBjPC90dD4gZmlsZT88L2xpPgorCisgICAgPHA+QWdhaW4sIGFkZCB0aGUgbW9kdWxlIHRvIDx0dD5SZXF1aXJlcy5wcml2YXRlPC90dD4gaWYgaXQgc3VwcG9ydHMKKyAgICA8dHQ+cGtnLWNvbmZpZzwvdHQ+LiBJbiB0aGlzIGNhc2UsIHRoZSBjb21waWxlciBmbGFncyB3aWxsIGJlIGVtaXR0ZWQKKyAgICB1bm5lY2Vzc2FyaWx5LCBidXQgaXQgZW5zdXJlcyB0aGF0IHRoZSBsaW5rZXIgZmxhZ3Mgd2lsbCBiZSBwcmVzZW50IHdoZW4KKyAgICBsaW5raW5nIHN0YXRpY2FsbHkuIElmIDx0dD5saWJ4PC90dD4gZG9lcyBub3Qgc3VwcG9ydCA8dHQ+cGtnLWNvbmZpZzwvdHQ+LAorICAgIGFkZCB0aGUgbmVjZXNzYXJ5IGxpbmtlciBmbGFncyB0byA8dHQ+TGlicy5wcml2YXRlPC90dD4uPC9wPgorICA8L29sPgorCisgIDxoci8+CisKKyAgPGFkZHJlc3M+RGFuIE5pY2hvbHNvbiAmbHQ7ZGJuLmxpc3RzIChhdCkgZ21haWwgKGRvdCkgY29tJmd0OzwvYWRkcmVzcz4KKworICA8cD5Db3B5cmlnaHQgKEMpIDIwMTAgIERhbiBOaWNob2xzb24uPGJyLz4KKyAgVGhpcyBkb2N1bWVudCBpcyBsaWNlbnNlZCB1bmRlciB0aGUKKyAgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dCI+R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMjwvYT4KKyAgb3IgYW55IGxhdGVyIHZlcnNpb24uPC9wPgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zaGFyZS9lbWFjcy9zaXRlLWxpc3AvYXV0b2NvbmYtbW9kZS5lbCBiL3NoYXJlL2VtYWNzL3NpdGUtbGlzcC9hdXRvY29uZi1tb2RlLmVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMDJlOTQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9lbWFjcy9zaXRlLWxpc3AvYXV0b2NvbmYtbW9kZS5lbApAQCAtMCwwICsxLDEwMCBAQAorOzs7IGF1dG9jb25mLW1vZGUuZWwgLS0tIGF1dG9jb25mIGNvZGUgZWRpdGluZyBjb21tYW5kcyBmb3IgRW1hY3MKKworOzsgQXV0aG9yOiBNYXJ0aW4gQnVjaGhvbHogKG1hcnRpbkB4ZW1hY3Mub3JnKQorOzsgTWFpbnRhaW5lcjogTWFydGluIEJ1Y2hob2x6Cis7OyBLZXl3b3JkczogbGFuZ3VhZ2VzLCBmYWNlcywgbTQsIGNvbmZpZ3VyZQorCis7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZgorCis7OyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCis7OworOzsgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKzs7IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cis7OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorOzsgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzs7Cis7OyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKzs7IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCis7OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorOzsKKzs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7OyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworOzsgQSBtYWpvciBtb2RlIGZvciBlZGl0aW5nIGF1dG9jb25mIGlucHV0IChsaWtlIGNvbmZpZ3VyZS5pbikuCis7OyBEZXJpdmVkIGZyb20gbTQtbW9kZS5lbCBieSBBbmRyZXcgQ3NpbGxhZyAoZHJld0BzdGFmZi5wcm9kaWd5LmNvbSkKKworOzs7IFlvdXIgc2hvdWxkIGFkZCB0aGUgZm9sbG93aW5nIHRvIHlvdXIgRW1hY3MgY29uZmlndXJhdGlvbiBmaWxlOgorCis7OyAgKGF1dG9sb2FkICdhdXRvY29uZi1tb2RlICJhdXRvY29uZi1tb2RlIgorOzsgICAgICAgICAgICAiTWFqb3IgbW9kZSBmb3IgZWRpdGluZyBhdXRvY29uZiBmaWxlcy4iIHQpCis7OyAgKHNldHEgYXV0by1tb2RlLWFsaXN0Cis7OyAgICAgICAgKGNvbnMgJygiXFwuYWNcXCdcXHxjb25maWd1cmVcXC5pblxcJyIgLiBhdXRvY29uZi1tb2RlKQorOzsgICAgICAgICAgICAgIGF1dG8tbW9kZS1hbGlzdCkpCisKKzs7OyBDb2RlOgorCis7O3RoYW5rIGdvZCBmb3IgbWFrZS1yZWdleHAuZWwhCisoZGVmdmFyIGF1dG9jb25mLWZvbnQtbG9jay1rZXl3b3JkcworICBgKCgiXFxiZG5sIFxcKC4qXFwpIiAgMSBmb250LWxvY2stY29tbWVudC1mYWNlIHQpCisgICAgKCJcXCRbMC05KiNAXSIgLiBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKQorICAgICgiXFxiXFwobTRfXFwpP1xcKGJ1aWx0aW5cXHxjaGFuZ2VcXChjb21cXHxxdW90ZVxcfHdvcmRcXClcXHxkXFwoZVxcKGJ1Z1xcKGZpbGVcXHxtb2RlXFwpXFx8Y3JcXHxmXFwoaW5lXFx8blxcKVxcKVxcfGl2XFwoZXJ0XFx8bnVtXFwpXFx8bmxcXHx1bXBkZWZcXClcXHxlXFwocnJwcmludFxcfHN5c2NtZFxcfHZhbFxcKVxcfGZcXChpbGVcXHxvcm1hdFxcKVxcfGdudVxcfGlcXChmXFwoZGVmXFx8ZWxzZVxcKVxcfG5cXChjXFwobHVkZVxcfHJcXClcXHxkXFwoZXhcXHxpclxcKVxcKVxcKVxcfGxcXChlblxcfGluZVxcKVxcfG1cXCg0XFwoZXhpdFxcfHdyYXBcXClcXHxha2V0ZW1wXFx8a3N0ZW1wXFwpXFx8cFxcKGF0c3Vic3RcXHxvcGRlZlxcfHVzaGRlZlxcKVxcfHJlZ2V4cFxcfHNcXChoaWZ0XFx8aW5jbHVkZVxcfHVic3RyXFx8eXNcXChjbWRcXHx2YWxcXClcXClcXHx0cmFcXChjZW9cXChmZlxcfG5cXClcXHxuc2xpdFxcKVxcfHVuXFwoZFxcKGVmaW5lXFx8aXZlcnRcXClcXHxpeFxcKVxcKVxcYiIgLiBmb250LWxvY2sta2V5d29yZC1mYWNlKQorICAgICgiXlxcKFxcKG00X1xcKT9kZWZpbmVcXChfZGVmYXVsdFxcKT9cXHxBLl9ERUZVTlxcfG00X2RlZnVuXFwoX29uY2VcXHxfaW5pdFxcKT9cXCkoXFxbP1xcKFtBLVphLXowLTlfXStcXCkiIDUgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkKKyAgICAiZGVmYXVsdCBmb250LWxvY2sta2V5d29yZHMiKQorKQorCisoZGVmdmFyIGF1dG9jb25mLW1vZGUtc3ludGF4LXRhYmxlIG5pbAorICAic3ludGF4IHRhYmxlIHVzZWQgaW4gYXV0b2NvbmYgbW9kZSIpCisoc2V0cSBhdXRvY29uZi1tb2RlLXN5bnRheC10YWJsZSAobWFrZS1zeW50YXgtdGFibGUpKQorKG1vZGlmeS1zeW50YXgtZW50cnkgP1wiICJcIiIgIGF1dG9jb25mLW1vZGUtc3ludGF4LXRhYmxlKQorOzsobW9kaWZ5LXN5bnRheC1lbnRyeSA/XCcgIlwiIiAgYXV0b2NvbmYtbW9kZS1zeW50YXgtdGFibGUpCisobW9kaWZ5LXN5bnRheC1lbnRyeSA/IyAgIjxcbiIgYXV0b2NvbmYtbW9kZS1zeW50YXgtdGFibGUpCisobW9kaWZ5LXN5bnRheC1lbnRyeSA/XG4gIj4jIiAgYXV0b2NvbmYtbW9kZS1zeW50YXgtdGFibGUpCisobW9kaWZ5LXN5bnRheC1lbnRyeSA/XCggIigpIiAgIGF1dG9jb25mLW1vZGUtc3ludGF4LXRhYmxlKQorKG1vZGlmeS1zeW50YXgtZW50cnkgP1wpICIpKCIgICBhdXRvY29uZi1tb2RlLXN5bnRheC10YWJsZSkKKyhtb2RpZnktc3ludGF4LWVudHJ5ID9cWyAiKF0iICBhdXRvY29uZi1tb2RlLXN5bnRheC10YWJsZSkKKyhtb2RpZnktc3ludGF4LWVudHJ5ID9cXSAiKVsiICBhdXRvY29uZi1tb2RlLXN5bnRheC10YWJsZSkKKyhtb2RpZnktc3ludGF4LWVudHJ5ID8qICAiLiIgICBhdXRvY29uZi1tb2RlLXN5bnRheC10YWJsZSkKKyhtb2RpZnktc3ludGF4LWVudHJ5ID9fICAiXyIgICBhdXRvY29uZi1tb2RlLXN5bnRheC10YWJsZSkKKworKGRlZnZhciBhdXRvY29uZi1tb2RlLW1hcAorICAobGV0ICgobWFwIChtYWtlLXNwYXJzZS1rZXltYXApKSkKKyAgICAoZGVmaW5lLWtleSBtYXAgJ1soY29udHJvbCBjKSAoXDspXSAnY29tbWVudC1yZWdpb24pCisgICAgbWFwKSkKKworKGRlZnVuIGF1dG9jb25mLWN1cnJlbnQtZGVmdW4gKCkKKyAgIkF1dG9jb25mIHZhbHVlIGZvciBgYWRkLWxvZy1jdXJyZW50LWRlZnVuLWZ1bmN0aW9uJy4KK1RoaXMgdGVsbHMgYWRkLWxvZy5lbCBob3cgdG8gZmluZCB0aGUgY3VycmVudCBtYWNyby4iCisgIChzYXZlLWV4Y3Vyc2lvbgorICAgIChpZiAocmUtc2VhcmNoLWJhY2t3YXJkICJeXFwobTRfZGVmaW5lXFwoX2RlZmF1bHRcXCk/XFx8bTRfZGVmdW5cXChfb25jZVxcfF9pbml0XFwpP1xcfEEuX0RFRlVOXFwpKFxcWypcXChbQS1aYS16MC05X10rXFwpIiBuaWwgdCkKKwkoYnVmZmVyLXN1YnN0cmluZyAobWF0Y2gtYmVnaW5uaW5nIDQpCisJCQkgIChtYXRjaC1lbmQgNCkpCisgICAgICBuaWwpKSkKKworOzs7IyMjYXV0b2xvYWQKKyhkZWZ1biBhdXRvY29uZi1tb2RlICgpCisgICJBIG1ham9yLW1vZGUgdG8gZWRpdCBBdXRvY29uZiBmaWxlcyBsaWtlIGNvbmZpZ3VyZS5hYy4KK1xce2F1dG9jb25mLW1vZGUtbWFwfQorIgorICAoaW50ZXJhY3RpdmUpCisgIChraWxsLWFsbC1sb2NhbC12YXJpYWJsZXMpCisgICh1c2UtbG9jYWwtbWFwIGF1dG9jb25mLW1vZGUtbWFwKQorCisgIChtYWtlLWxvY2FsLXZhcmlhYmxlICdhZGQtbG9nLWN1cnJlbnQtZGVmdW4tZnVuY3Rpb24pCisgIChzZXRxIGFkZC1sb2ctY3VycmVudC1kZWZ1bi1mdW5jdGlvbiAnYXV0b2NvbmYtY3VycmVudC1kZWZ1bikKKworICAobWFrZS1sb2NhbC12YXJpYWJsZSAnY29tbWVudC1zdGFydCkKKyAgKHNldHEgY29tbWVudC1zdGFydCAiIyAiKQorICAobWFrZS1sb2NhbC12YXJpYWJsZSAncGFyc2Utc2V4cC1pZ25vcmUtY29tbWVudHMpCisgIChzZXRxIHBhcnNlLXNleHAtaWdub3JlLWNvbW1lbnRzIHQpCisKKyAgKG1ha2UtbG9jYWwtdmFyaWFibGUJJ2ZvbnQtbG9jay1kZWZhdWx0cykKKyAgKHNldHEgbWFqb3ItbW9kZSAnYXV0b2NvbmYtbW9kZSkKKyAgKHNldHEgbW9kZS1uYW1lICJBdXRvY29uZiIpCisgIChzZXRxIGZvbnQtbG9jay1kZWZhdWx0cyBgKGF1dG9jb25mLWZvbnQtbG9jay1rZXl3b3JkcyBuaWwpKQorICAoc2V0LXN5bnRheC10YWJsZSBhdXRvY29uZi1tb2RlLXN5bnRheC10YWJsZSkKKyAgKHJ1bi1ob29rcyAnYXV0b2NvbmYtbW9kZS1ob29rKSkKKworKHByb3ZpZGUgJ2F1dG9jb25mLW1vZGUpCisKKzs7OyBhdXRvY29uZi1tb2RlLmVsIGVuZHMgaGVyZQpkaWZmIC0tZ2l0IGEvc2hhcmUvZW1hY3Mvc2l0ZS1saXNwL2F1dG9jb25mLW1vZGUuZWxjIGIvc2hhcmUvZW1hY3Mvc2l0ZS1saXNwL2F1dG9jb25mLW1vZGUuZWxjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhODczMTgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9lbWFjcy9zaXRlLWxpc3AvYXV0b2NvbmYtbW9kZS5lbGMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc2hhcmUvZW1hY3Mvc2l0ZS1saXNwL2F1dG90ZXN0LW1vZGUuZWwgYi9zaGFyZS9lbWFjcy9zaXRlLWxpc3AvYXV0b3Rlc3QtbW9kZS5lbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzc2Zjc0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZW1hY3Mvc2l0ZS1saXNwL2F1dG90ZXN0LW1vZGUuZWwKQEAgLTAsMCArMSwxMDEgQEAKKzs7OyBhdXRvdGVzdC1tb2RlLmVsIC0tLSBhdXRvdGVzdCBjb2RlIGVkaXRpbmcgY29tbWFuZHMgZm9yIEVtYWNzCisKKzs7IEF1dGhvcjogQWtpbSBEZW1haWxsZSAoYWtpbUBmcmVlZnJpZW5kcy5vcmcpCis7OyBLZXl3b3JkczogbGFuZ3VhZ2VzLCBmYWNlcywgbTQsIEF1dG90ZXN0CisKKzs7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEF1dG9jb25mCisKKzs7IENvcHlyaWdodCAoQykgMjAwMSwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKzs7Cis7OyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorOzsgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKzs7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCis7OyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOzsKKzs7IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorOzsgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKzs7IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKzs7IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCis7OworOzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzs7IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCis7OzsgQ29tbWVudGFyeToKKworOzsgQSBtYWpvciBtb2RlIGZvciBlZGl0aW5nIGF1dG90ZXN0IGlucHV0IChsaWtlIHRlc3RzdWl0ZS5hdCkuCis7OyBEZXJpdmVkIGZyb20gYXV0b2NvbmYtbW9kZS5lbCwgYnkgTWFydGluIEJ1Y2hob2x6IChtYXJ0aW5AeGVtYWNzLm9yZykuCisKKzs7OyBZb3VyIHNob3VsZCBhZGQgdGhlIGZvbGxvd2luZyB0byB5b3VyIEVtYWNzIGNvbmZpZ3VyYXRpb24gZmlsZToKKworOzsgICAoYXV0b2xvYWQgJ2F1dG90ZXN0LW1vZGUgImF1dG90ZXN0LW1vZGUiCis7OyAgICAgICAgICAgICAiTWFqb3IgbW9kZSBmb3IgZWRpdGluZyBhdXRvdGVzdCBmaWxlcy4iIHQpCis7OyAgIChzZXRxIGF1dG8tbW9kZS1hbGlzdAorOzsgICAgICAgICAoY29ucyAnKCJcXC5hdFxcJyIgLiBhdXRvdGVzdC1tb2RlKSBhdXRvLW1vZGUtYWxpc3QpKQorCis7OzsgQ29kZToKKworKGRlZnZhciBhdXRvdGVzdC1mb250LWxvY2sta2V5d29yZHMKKyAgYCgoIlxcYmRubFxcYlxcKC4qXFwpIiAgMSBmb250LWxvY2stY29tbWVudC1mYWNlIHQpCisgICAgKCJcXCRbMC05KiNAXSIgLiBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKQorICAgICgiXlxcKG00X2RlZmluZVxcfG00X2RlZnVuXFwpKFxcWypcXChbQS1aYS16MC05X10rXFwpIiAyIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpCisgICAgKCJeQVRfU0VUVVAoXFxbK1xcKFteXV0rXFwpIiAxIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpCisgICAgKCJeQVRfREFUQShcXFsrXFwoW15dXStcXCkiIDEgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkKKyAgICAoIlxcYlxcKF8/bTRfW19hLXowLTldKlxcfF8/QVtTVF1fW19BLVowLTldK1xcKVxcYiIgLiBmb250LWxvY2sta2V5d29yZC1mYWNlKQorICAgICJkZWZhdWx0IGZvbnQtbG9jay1rZXl3b3JkcyIpCispCisKKyhkZWZ2YXIgYXV0b3Rlc3QtbW9kZS1zeW50YXgtdGFibGUgbmlsCisgICJzeW50YXggdGFibGUgdXNlZCBpbiBhdXRvdGVzdCBtb2RlIikKKyhzZXRxIGF1dG90ZXN0LW1vZGUtc3ludGF4LXRhYmxlIChtYWtlLXN5bnRheC10YWJsZSkpCisobW9kaWZ5LXN5bnRheC1lbnRyeSA/XCIgIlwiIiAgYXV0b3Rlc3QtbW9kZS1zeW50YXgtdGFibGUpCis7Oyhtb2RpZnktc3ludGF4LWVudHJ5ID9cJyAiXCIiICBhdXRvdGVzdC1tb2RlLXN5bnRheC10YWJsZSkKKyhtb2RpZnktc3ludGF4LWVudHJ5ID8jICAiPFxuIiBhdXRvdGVzdC1tb2RlLXN5bnRheC10YWJsZSkKKyhtb2RpZnktc3ludGF4LWVudHJ5ID9cbiAiPiMiICBhdXRvdGVzdC1tb2RlLXN5bnRheC10YWJsZSkKKyhtb2RpZnktc3ludGF4LWVudHJ5ID9cKCAiKCkiICAgYXV0b3Rlc3QtbW9kZS1zeW50YXgtdGFibGUpCisobW9kaWZ5LXN5bnRheC1lbnRyeSA/XCkgIikoIiAgIGF1dG90ZXN0LW1vZGUtc3ludGF4LXRhYmxlKQorKG1vZGlmeS1zeW50YXgtZW50cnkgP1xbICIoXSIgIGF1dG90ZXN0LW1vZGUtc3ludGF4LXRhYmxlKQorKG1vZGlmeS1zeW50YXgtZW50cnkgP1xdICIpWyIgIGF1dG90ZXN0LW1vZGUtc3ludGF4LXRhYmxlKQorKG1vZGlmeS1zeW50YXgtZW50cnkgPyogICIuIiAgIGF1dG90ZXN0LW1vZGUtc3ludGF4LXRhYmxlKQorKG1vZGlmeS1zeW50YXgtZW50cnkgP18gICJfIiAgIGF1dG90ZXN0LW1vZGUtc3ludGF4LXRhYmxlKQorCisoZGVmdmFyIGF1dG90ZXN0LW1vZGUtbWFwCisgIChsZXQgKChtYXAgKG1ha2Utc3BhcnNlLWtleW1hcCkpKQorICAgIChkZWZpbmUta2V5IG1hcCAnWyhjb250cm9sIGMpIChcOyldICdjb21tZW50LXJlZ2lvbikKKyAgICBtYXApKQorCisoZGVmdW4gYXV0b3Rlc3QtY3VycmVudC1kZWZ1biAoKQorICAiQXV0b3Rlc3QgdmFsdWUgZm9yIGBhZGQtbG9nLWN1cnJlbnQtZGVmdW4tZnVuY3Rpb24nLgorVGhpcyB0ZWxscyBhZGQtbG9nLmVsIGhvdyB0byBmaW5kIHRoZSBjdXJyZW50IHRlc3QgZ3JvdXAvbWFjcm8uIgorICAoc2F2ZS1leGN1cnNpb24KKyAgICAoaWYgKHJlLXNlYXJjaC1iYWNrd2FyZCAiXlxcKG00X2RlZmluZVxcfG00X2RlZnVuXFx8QVRfU0VUVVBcXCkoXFxbK1xcKFteXV0rXFwpIiBuaWwgdCkKKwkoYnVmZmVyLXN1YnN0cmluZyAobWF0Y2gtYmVnaW5uaW5nIDIpCisJCQkgIChtYXRjaC1lbmQgMikpCisgICAgICBuaWwpKSkKKworOzs7IyMjYXV0b2xvYWQKKyhkZWZ1biBhdXRvdGVzdC1tb2RlICgpCisgICJBIG1ham9yLW1vZGUgdG8gZWRpdCBBdXRvdGVzdCBmaWxlcyBsaWtlIHRlc3RzdWl0ZS5hdC4KK1xce2F1dG90ZXN0LW1vZGUtbWFwfQorIgorICAoaW50ZXJhY3RpdmUpCisgIChraWxsLWFsbC1sb2NhbC12YXJpYWJsZXMpCisgICh1c2UtbG9jYWwtbWFwIGF1dG90ZXN0LW1vZGUtbWFwKQorCisgIChtYWtlLWxvY2FsLXZhcmlhYmxlICdhZGQtbG9nLWN1cnJlbnQtZGVmdW4tZnVuY3Rpb24pCisgIChzZXRxIGFkZC1sb2ctY3VycmVudC1kZWZ1bi1mdW5jdGlvbiAnYXV0b3Rlc3QtY3VycmVudC1kZWZ1bikKKworICAobWFrZS1sb2NhbC12YXJpYWJsZSAnY29tbWVudC1zdGFydCkKKyAgKHNldHEgY29tbWVudC1zdGFydCAiIyAiKQorICAobWFrZS1sb2NhbC12YXJpYWJsZSAncGFyc2Utc2V4cC1pZ25vcmUtY29tbWVudHMpCisgIChzZXRxIHBhcnNlLXNleHAtaWdub3JlLWNvbW1lbnRzIHQpCisKKyAgKG1ha2UtbG9jYWwtdmFyaWFibGUJJ2ZvbnQtbG9jay1kZWZhdWx0cykKKyAgKHNldHEgbWFqb3ItbW9kZSAnYXV0b3Rlc3QtbW9kZSkKKyAgKHNldHEgbW9kZS1uYW1lICJBdXRvdGVzdCIpCisgIChzZXRxIGZvbnQtbG9jay1kZWZhdWx0cyBgKGF1dG90ZXN0LWZvbnQtbG9jay1rZXl3b3JkcyBuaWwpKQorICAoc2V0LXN5bnRheC10YWJsZSBhdXRvdGVzdC1tb2RlLXN5bnRheC10YWJsZSkKKyAgKHJ1bi1ob29rcyAnYXV0b3Rlc3QtbW9kZS1ob29rKSkKKworKHByb3ZpZGUgJ2F1dG90ZXN0LW1vZGUpCisKKzs7OyBhdXRvdGVzdC1tb2RlLmVsIGVuZHMgaGVyZQpkaWZmIC0tZ2l0IGEvc2hhcmUvZW1hY3Mvc2l0ZS1saXNwL2F1dG90ZXN0LW1vZGUuZWxjIGIvc2hhcmUvZW1hY3Mvc2l0ZS1saXNwL2F1dG90ZXN0LW1vZGUuZWxjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1Zjc5MDgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9lbWFjcy9zaXRlLWxpc3AvYXV0b3Rlc3QtbW9kZS5lbGMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc2hhcmUvZ2NjLTQuNS4zL3B5dGhvbi9saWJzdGRjeHgvX19pbml0X18ucHkgYi9zaGFyZS9nY2MtNC41LjMvcHl0aG9uL2xpYnN0ZGN4eC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjEzNzg5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZ2NjLTQuNS4zL3B5dGhvbi9saWJzdGRjeHgvX19pbml0X18ucHkKQEAgLTAsMCArMSBAQAorCmRpZmYgLS1naXQgYS9zaGFyZS9nY2MtNC41LjMvcHl0aG9uL2xpYnN0ZGN4eC92Ni9fX2luaXRfXy5weSBiL3NoYXJlL2djYy00LjUuMy9weXRob24vbGlic3RkY3h4L3Y2L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMTM3ODkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9nY2MtNC41LjMvcHl0aG9uL2xpYnN0ZGN4eC92Ni9fX2luaXRfXy5weQpAQCAtMCwwICsxIEBACisKZGlmZiAtLWdpdCBhL3NoYXJlL2djYy00LjUuMy9weXRob24vbGlic3RkY3h4L3Y2L3ByaW50ZXJzLnB5IGIvc2hhcmUvZ2NjLTQuNS4zL3B5dGhvbi9saWJzdGRjeHgvdjYvcHJpbnRlcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI5OTliZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2djYy00LjUuMy9weXRob24vbGlic3RkY3h4L3Y2L3ByaW50ZXJzLnB5CkBAIC0wLDAgKzEsODAyIEBACisjIFByZXR0eS1wcmludGVycyBmb3IgbGlic3RjKysuCisKKyMgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitpbXBvcnQgZ2RiCitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgcmUKKworY2xhc3MgU3RkUG9pbnRlclByaW50ZXI6CisgICAgIlByaW50IGEgc21hcnQgcG9pbnRlciBvZiBzb21lIGtpbmQiCisKKyAgICBkZWYgX19pbml0X18gKHNlbGYsIHR5cGVuYW1lLCB2YWwpOgorICAgICAgICBzZWxmLnR5cGVuYW1lID0gdHlwZW5hbWUKKyAgICAgICAgc2VsZi52YWwgPSB2YWwKKworICAgIGRlZiB0b19zdHJpbmcgKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnZhbFsnX01fcmVmY291bnQnXVsnX01fcGknXSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuICclcyAoZW1wdHkpICVzJyAlIChzZWxmLnR5cGVuYW1lLCBzZWxmLnZhbFsnX01fcHRyJ10pCisgICAgICAgIHJldHVybiAnJXMgKGNvdW50ICVkKSAlcycgJSAoc2VsZi50eXBlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnZhbFsnX01fcmVmY291bnQnXVsnX01fcGknXVsnX01fdXNlX2NvdW50J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi52YWxbJ19NX3B0ciddKQorCitjbGFzcyBVbmlxdWVQb2ludGVyUHJpbnRlcjoKKyAgICAiUHJpbnQgYSB1bmlxdWVfcHRyIgorCisgICAgZGVmIF9faW5pdF9fIChzZWxmLCB2YWwpOgorICAgICAgICBzZWxmLnZhbCA9IHZhbAorCisgICAgZGVmIHRvX3N0cmluZyAoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnZhbFsnX01fdCddCisKK2NsYXNzIFN0ZExpc3RQcmludGVyOgorICAgICJQcmludCBhIHN0ZDo6bGlzdCIKKworICAgIGNsYXNzIF9pdGVyYXRvcjoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5vZGV0eXBlLCBoZWFkKToKKyAgICAgICAgICAgIHNlbGYubm9kZXR5cGUgPSBub2RldHlwZQorICAgICAgICAgICAgc2VsZi5iYXNlID0gaGVhZFsnX01fbmV4dCddCisgICAgICAgICAgICBzZWxmLmhlYWQgPSBoZWFkLmFkZHJlc3MKKyAgICAgICAgICAgIHNlbGYuY291bnQgPSAwCisKKyAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYuYmFzZSA9PSBzZWxmLmhlYWQ6CisgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICAgICAgZWx0ID0gc2VsZi5iYXNlLmNhc3Qoc2VsZi5ub2RldHlwZSkuZGVyZWZlcmVuY2UoKQorICAgICAgICAgICAgc2VsZi5iYXNlID0gZWx0WydfTV9uZXh0J10KKyAgICAgICAgICAgIGNvdW50ID0gc2VsZi5jb3VudAorICAgICAgICAgICAgc2VsZi5jb3VudCA9IHNlbGYuY291bnQgKyAxCisgICAgICAgICAgICByZXR1cm4gKCdbJWRdJyAlIGNvdW50LCBlbHRbJ19NX2RhdGEnXSkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlbmFtZSwgdmFsKToKKyAgICAgICAgc2VsZi50eXBlbmFtZSA9IHR5cGVuYW1lCisgICAgICAgIHNlbGYudmFsID0gdmFsCisKKyAgICBkZWYgY2hpbGRyZW4oc2VsZik6CisgICAgICAgIGl0eXBlID0gc2VsZi52YWwudHlwZS50ZW1wbGF0ZV9hcmd1bWVudCgwKQorICAgICAgICAjIElmIHRoZSBpbmZlcmlvciBwcm9ncmFtIGlzIGNvbXBpbGVkIHdpdGggLURfR0xJQkNYWF9ERUJVRworICAgICAgICAjIHNvbWUgb2YgdGhlIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgY2hhbmdlLgorICAgICAgICBpZiBzZWxmLnR5cGVuYW1lID09ICJzdGQ6Omxpc3QiOgorICAgICAgICAgICAgbm9kZXR5cGUgPSBnZGIubG9va3VwX3R5cGUoJ3N0ZDo6X0xpc3Rfbm9kZTwlcz4nICUgaXR5cGUpLnBvaW50ZXIoKQorICAgICAgICBlbGlmIHNlbGYudHlwZW5hbWUgPT0gInN0ZDo6X19kZWJ1Zzo6bGlzdCI6CisgICAgICAgICAgICBub2RldHlwZSA9IGdkYi5sb29rdXBfdHlwZSgnc3RkOjpfX25vcm06Ol9MaXN0X25vZGU8JXM+JyAlIGl0eXBlKS5wb2ludGVyKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICJDYW5ub3QgY2FzdCBsaXN0IG5vZGUgZm9yIGxpc3QgcHJpbnRlci4iCisgICAgICAgIHJldHVybiBzZWxmLl9pdGVyYXRvcihub2RldHlwZSwgc2VsZi52YWxbJ19NX2ltcGwnXVsnX01fbm9kZSddKQorCisgICAgZGVmIHRvX3N0cmluZyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi52YWxbJ19NX2ltcGwnXVsnX01fbm9kZSddLmFkZHJlc3MgPT0gc2VsZi52YWxbJ19NX2ltcGwnXVsnX01fbm9kZSddWydfTV9uZXh0J106CisgICAgICAgICAgICByZXR1cm4gJ2VtcHR5ICVzJyAlIChzZWxmLnR5cGVuYW1lKQorICAgICAgICByZXR1cm4gJyVzJyAlIChzZWxmLnR5cGVuYW1lKQorCitjbGFzcyBTdGRMaXN0SXRlcmF0b3JQcmludGVyOgorICAgICJQcmludCBzdGQ6Omxpc3Q6Oml0ZXJhdG9yIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVuYW1lLCB2YWwpOgorICAgICAgICBzZWxmLnZhbCA9IHZhbAorICAgICAgICBzZWxmLnR5cGVuYW1lID0gdHlwZW5hbWUKKworICAgIGRlZiB0b19zdHJpbmcoc2VsZik6CisgICAgICAgIGl0eXBlID0gc2VsZi52YWwudHlwZS50ZW1wbGF0ZV9hcmd1bWVudCgwKQorICAgICAgICAjIElmIHRoZSBpbmZlcmlvciBwcm9ncmFtIGlzIGNvbXBpbGVkIHdpdGggLURfR0xJQkNYWF9ERUJVRworICAgICAgICAjIHNvbWUgb2YgdGhlIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgY2hhbmdlLgorICAgICAgICBpZiBzZWxmLnR5cGVuYW1lID09ICJzdGQ6Ol9MaXN0X2l0ZXJhdG9yIiBvciBzZWxmLnR5cGVuYW1lID09ICJzdGQ6Ol9MaXN0X2NvbnN0X2l0ZXJhdG9yIjoKKyAgICAgICAgICAgIG5vZGV0eXBlID0gZ2RiLmxvb2t1cF90eXBlKCdzdGQ6Ol9MaXN0X25vZGU8JXM+JyAlIGl0eXBlKS5wb2ludGVyKCkKKyAgICAgICAgZWxpZiBzZWxmLnR5cGVuYW1lID09ICJzdGQ6Ol9fbm9ybTo6X0xpc3RfaXRlcmF0b3IiIG9yIHNlbGYudHlwZW5hbWUgPT0gInN0ZDo6X19ub3JtOjpfTGlzdF9jb25zdF9pdGVyYXRvciI6CisgICAgICAgICAgICBub2RldHlwZSA9IGdkYi5sb29rdXBfdHlwZSgnc3RkOjpfX25vcm06Ol9MaXN0X25vZGU8JXM+JyAlIGl0eXBlKS5wb2ludGVyKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICJDYW5ub3QgY2FzdCBsaXN0IG5vZGUgZm9yIGxpc3QgaXRlcmF0b3IgcHJpbnRlci4iCisgICAgICAgIHJldHVybiBzZWxmLnZhbFsnX01fbm9kZSddLmNhc3Qobm9kZXR5cGUpLmRlcmVmZXJlbmNlKClbJ19NX2RhdGEnXQorCitjbGFzcyBTdGRTbGlzdFByaW50ZXI6CisgICAgIlByaW50IGEgX19nbnVfY3h4OjpzbGlzdCIKKworICAgIGNsYXNzIF9pdGVyYXRvcjoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5vZGV0eXBlLCBoZWFkKToKKyAgICAgICAgICAgIHNlbGYubm9kZXR5cGUgPSBub2RldHlwZQorICAgICAgICAgICAgc2VsZi5iYXNlID0gaGVhZFsnX01faGVhZCddWydfTV9uZXh0J10KKyAgICAgICAgICAgIHNlbGYuY291bnQgPSAwCisKKyAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYuYmFzZSA9PSAwOgorICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgICAgIGVsdCA9IHNlbGYuYmFzZS5jYXN0KHNlbGYubm9kZXR5cGUpLmRlcmVmZXJlbmNlKCkKKyAgICAgICAgICAgIHNlbGYuYmFzZSA9IGVsdFsnX01fbmV4dCddCisgICAgICAgICAgICBjb3VudCA9IHNlbGYuY291bnQKKyAgICAgICAgICAgIHNlbGYuY291bnQgPSBzZWxmLmNvdW50ICsgMQorICAgICAgICAgICAgcmV0dXJuICgnWyVkXScgJSBjb3VudCwgZWx0WydfTV9kYXRhJ10pCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsKToKKyAgICAgICAgc2VsZi52YWwgPSB2YWwKKworICAgIGRlZiBjaGlsZHJlbihzZWxmKToKKyAgICAgICAgaXR5cGUgPSBzZWxmLnZhbC50eXBlLnRlbXBsYXRlX2FyZ3VtZW50KDApCisgICAgICAgIG5vZGV0eXBlID0gZ2RiLmxvb2t1cF90eXBlKCdfX2dudV9jeHg6Ol9TbGlzdF9ub2RlPCVzPicgJSBpdHlwZSkucG9pbnRlcigpCisgICAgICAgIHJldHVybiBzZWxmLl9pdGVyYXRvcihub2RldHlwZSwgc2VsZi52YWwpCisKKyAgICBkZWYgdG9fc3RyaW5nKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnZhbFsnX01faGVhZCddWydfTV9uZXh0J10gPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAnZW1wdHkgX19nbnVfY3h4OjpzbGlzdCcKKyAgICAgICAgcmV0dXJuICdfX2dudV9jeHg6OnNsaXN0JworCitjbGFzcyBTdGRTbGlzdEl0ZXJhdG9yUHJpbnRlcjoKKyAgICAiUHJpbnQgX19nbnVfY3h4OjpzbGlzdDo6aXRlcmF0b3IiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsKToKKyAgICAgICAgc2VsZi52YWwgPSB2YWwKKworICAgIGRlZiB0b19zdHJpbmcoc2VsZik6CisgICAgICAgIGl0eXBlID0gc2VsZi52YWwudHlwZS50ZW1wbGF0ZV9hcmd1bWVudCgwKQorICAgICAgICBub2RldHlwZSA9IGdkYi5sb29rdXBfdHlwZSgnX19nbnVfY3h4OjpfU2xpc3Rfbm9kZTwlcz4nICUgaXR5cGUpLnBvaW50ZXIoKQorICAgICAgICByZXR1cm4gc2VsZi52YWxbJ19NX25vZGUnXS5jYXN0KG5vZGV0eXBlKS5kZXJlZmVyZW5jZSgpWydfTV9kYXRhJ10KKworY2xhc3MgU3RkVmVjdG9yUHJpbnRlcjoKKyAgICAiUHJpbnQgYSBzdGQ6OnZlY3RvciIKKworICAgIGNsYXNzIF9pdGVyYXRvcjoKKyAgICAgICAgZGVmIF9faW5pdF9fIChzZWxmLCBzdGFydCwgZmluaXNoLCBiaXR2ZWMpOgorICAgICAgICAgICAgc2VsZi5iaXR2ZWMgPSBiaXR2ZWMKKyAgICAgICAgICAgIGlmIGJpdHZlYzoKKyAgICAgICAgICAgICAgICBzZWxmLml0ZW0gICA9IHN0YXJ0WydfTV9wJ10KKyAgICAgICAgICAgICAgICBzZWxmLnNvICAgICA9IHN0YXJ0WydfTV9vZmZzZXQnXQorICAgICAgICAgICAgICAgIHNlbGYuZmluaXNoID0gZmluaXNoWydfTV9wJ10KKyAgICAgICAgICAgICAgICBzZWxmLmZvICAgICA9IGZpbmlzaFsnX01fb2Zmc2V0J10KKyAgICAgICAgICAgICAgICBpdHlwZSA9IHNlbGYuaXRlbS5kZXJlZmVyZW5jZSgpLnR5cGUKKyAgICAgICAgICAgICAgICBzZWxmLmlzaXplID0gOCAqIGl0eXBlLnNpemVvZgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLml0ZW0gPSBzdGFydAorICAgICAgICAgICAgICAgIHNlbGYuZmluaXNoID0gZmluaXNoCisgICAgICAgICAgICBzZWxmLmNvdW50ID0gMAorCisgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgICAgICBjb3VudCA9IHNlbGYuY291bnQKKyAgICAgICAgICAgIHNlbGYuY291bnQgPSBzZWxmLmNvdW50ICsgMQorICAgICAgICAgICAgaWYgc2VsZi5iaXR2ZWM6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5pdGVtID09IHNlbGYuZmluaXNoIGFuZCBzZWxmLnNvID49IHNlbGYuZm86CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgICAgICAgICBlbHQgPSBzZWxmLml0ZW0uZGVyZWZlcmVuY2UoKQorICAgICAgICAgICAgICAgIGlmIGVsdCAmICgxIDw8IHNlbGYuc28pOgorICAgICAgICAgICAgICAgICAgICBvYml0ID0gMQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG9iaXQgPSAwCisgICAgICAgICAgICAgICAgc2VsZi5zbyA9IHNlbGYuc28gKyAxCisgICAgICAgICAgICAgICAgaWYgc2VsZi5zbyA+PSBzZWxmLmlzaXplOgorICAgICAgICAgICAgICAgICAgICBzZWxmLml0ZW0gPSBzZWxmLml0ZW0gKyAxCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc28gPSAwCisgICAgICAgICAgICAgICAgcmV0dXJuICgnWyVkXScgJSBjb3VudCwgb2JpdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5pdGVtID09IHNlbGYuZmluaXNoOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgICAgICAgICAgZWx0ID0gc2VsZi5pdGVtLmRlcmVmZXJlbmNlKCkKKyAgICAgICAgICAgICAgICBzZWxmLml0ZW0gPSBzZWxmLml0ZW0gKyAxCisgICAgICAgICAgICAgICAgcmV0dXJuICgnWyVkXScgJSBjb3VudCwgZWx0KQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVuYW1lLCB2YWwpOgorICAgICAgICBzZWxmLnR5cGVuYW1lID0gdHlwZW5hbWUKKyAgICAgICAgc2VsZi52YWwgPSB2YWwKKyAgICAgICAgc2VsZi5pc19ib29sID0gdmFsLnR5cGUudGVtcGxhdGVfYXJndW1lbnQoMCkuY29kZSAgPT0gZ2RiLlRZUEVfQ09ERV9CT09MCisKKyAgICBkZWYgY2hpbGRyZW4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9pdGVyYXRvcihzZWxmLnZhbFsnX01faW1wbCddWydfTV9zdGFydCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi52YWxbJ19NX2ltcGwnXVsnX01fZmluaXNoJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlzX2Jvb2wpCisKKyAgICBkZWYgdG9fc3RyaW5nKHNlbGYpOgorICAgICAgICBzdGFydCA9IHNlbGYudmFsWydfTV9pbXBsJ11bJ19NX3N0YXJ0J10KKyAgICAgICAgZmluaXNoID0gc2VsZi52YWxbJ19NX2ltcGwnXVsnX01fZmluaXNoJ10KKyAgICAgICAgZW5kID0gc2VsZi52YWxbJ19NX2ltcGwnXVsnX01fZW5kX29mX3N0b3JhZ2UnXQorICAgICAgICBpZiBzZWxmLmlzX2Jvb2w6CisgICAgICAgICAgICBzdGFydCA9IHNlbGYudmFsWydfTV9pbXBsJ11bJ19NX3N0YXJ0J11bJ19NX3AnXQorICAgICAgICAgICAgc28gICAgPSBzZWxmLnZhbFsnX01faW1wbCddWydfTV9zdGFydCddWydfTV9vZmZzZXQnXQorICAgICAgICAgICAgZmluaXNoID0gc2VsZi52YWxbJ19NX2ltcGwnXVsnX01fZmluaXNoJ11bJ19NX3AnXQorICAgICAgICAgICAgZm8gICAgID0gc2VsZi52YWxbJ19NX2ltcGwnXVsnX01fZmluaXNoJ11bJ19NX29mZnNldCddCisgICAgICAgICAgICBpdHlwZSA9IHN0YXJ0LmRlcmVmZXJlbmNlKCkudHlwZQorICAgICAgICAgICAgYmwgPSA4ICogaXR5cGUuc2l6ZW9mCisgICAgICAgICAgICBsZW5ndGggICA9IChibCAtIHNvKSArIGJsICogKChmaW5pc2ggLSBzdGFydCkgLSAxKSArIGZvCisgICAgICAgICAgICBjYXBhY2l0eSA9IGJsICogKGVuZCAtIHN0YXJ0KQorICAgICAgICAgICAgcmV0dXJuICgnJXM8Ym9vbD4gb2YgbGVuZ3RoICVkLCBjYXBhY2l0eSAlZCcKKyAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi50eXBlbmFtZSwgaW50IChsZW5ndGgpLCBpbnQgKGNhcGFjaXR5KSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gKCclcyBvZiBsZW5ndGggJWQsIGNhcGFjaXR5ICVkJworICAgICAgICAgICAgICAgICAgICAlIChzZWxmLnR5cGVuYW1lLCBpbnQgKGZpbmlzaCAtIHN0YXJ0KSwgaW50IChlbmQgLSBzdGFydCkpKQorCisgICAgZGVmIGRpc3BsYXlfaGludChzZWxmKToKKyAgICAgICAgcmV0dXJuICdhcnJheScKKworY2xhc3MgU3RkVmVjdG9ySXRlcmF0b3JQcmludGVyOgorICAgICJQcmludCBzdGQ6OnZlY3Rvcjo6aXRlcmF0b3IiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsKToKKyAgICAgICAgc2VsZi52YWwgPSB2YWwKKworICAgIGRlZiB0b19zdHJpbmcoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnZhbFsnX01fY3VycmVudCddLmRlcmVmZXJlbmNlKCkKKworY2xhc3MgU3RkVHVwbGVQcmludGVyOgorICAgICJQcmludCBhIHN0ZDo6dHVwbGUiCisKKyAgICBjbGFzcyBfaXRlcmF0b3I6CisgICAgICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgaGVhZCk6CisgICAgICAgICAgICBzZWxmLmhlYWQgPSBoZWFkCisKKyAgICAgICAgICAgICMgU2V0IHRoZSBiYXNlIGNsYXNzIGFzIHRoZSBpbml0aWFsIGhlYWQgb2YgdGhlCisgICAgICAgICAgICAjIHR1cGxlLgorICAgICAgICAgICAgbm9kZXMgPSBzZWxmLmhlYWQudHlwZS5maWVsZHMgKCkKKyAgICAgICAgICAgIGlmIGxlbiAobm9kZXMpICE9IDE6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgIlRvcCBvZiB0dXBsZSB0cmVlIGRvZXMgbm90IGNvbnNpc3Qgb2YgYSBzaW5nbGUgbm9kZS4iCisKKyAgICAgICAgICAgICMgU2V0IHRoZSBhY3R1YWwgaGVhZCB0byB0aGUgZmlyc3QgcGFpci4KKyAgICAgICAgICAgIHNlbGYuaGVhZCAgPSBzZWxmLmhlYWQuY2FzdCAobm9kZXNbMF0udHlwZSkKKyAgICAgICAgICAgIHNlbGYuY291bnQgPSAwCisKKyAgICAgICAgZGVmIF9faXRlcl9fIChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgZGVmIG5leHQgKHNlbGYpOgorICAgICAgICAgICAgbm9kZXMgPSBzZWxmLmhlYWQudHlwZS5maWVsZHMgKCkKKyAgICAgICAgICAgICMgQ2hlY2sgZm9yIGZ1cnRoZXIgcmVjdXJzaW9ucyBpbiB0aGUgaW5oZXJpdGFuY2UgdHJlZS4KKyAgICAgICAgICAgIGlmIGxlbiAobm9kZXMpID09IDA6CisgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICAgICAgIyBDaGVjayB0aGF0IHRoaXMgaXRlcmF0aW9uIGhhcyBhbiBleHBlY3RlZCBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBpZiBsZW4gKG5vZGVzKSAhPSAyOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICJDYW5ub3QgcGFyc2UgbW9yZSB0aGFuIDIgbm9kZXMgaW4gYSB0dXBsZSB0cmVlLiIKKworICAgICAgICAgICAgIyAtIExlZnQgbm9kZSBpcyB0aGUgbmV4dCByZWN1cnNpb24gcGFyZW50LgorICAgICAgICAgICAgIyAtIFJpZ2h0IG5vZGUgaXMgdGhlIGFjdHVhbCBjbGFzcyBjb250YWluZWQgaW4gdGhlIHR1cGxlLgorCisgICAgICAgICAgICAjIFByb2Nlc3MgcmlnaHQgbm9kZS4KKyAgICAgICAgICAgIGltcGwgPSBzZWxmLmhlYWQuY2FzdCAobm9kZXNbMV0udHlwZSkKKworICAgICAgICAgICAgIyBQcm9jZXNzIGxlZnQgbm9kZSBhbmQgc2V0IGl0IGFzIGhlYWQuCisgICAgICAgICAgICBzZWxmLmhlYWQgID0gc2VsZi5oZWFkLmNhc3QgKG5vZGVzWzBdLnR5cGUpCisgICAgICAgICAgICBzZWxmLmNvdW50ID0gc2VsZi5jb3VudCArIDEKKworICAgICAgICAgICAgIyBGaW5hbGx5LCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24uICBJZiBpdCBpcworICAgICAgICAgICAgIyB3cmFwcGVkIGluIF9NX2hlYWRfaW1wbCByZXR1cm4gdGhhdCwgb3RoZXJ3aXNlIHJldHVybgorICAgICAgICAgICAgIyB0aGUgdmFsdWUgImFzIGlzIi4KKyAgICAgICAgICAgIGZpZWxkcyA9IGltcGwudHlwZS5maWVsZHMgKCkKKyAgICAgICAgICAgIGlmIGxlbiAoZmllbGRzKSA8IDEgb3IgZmllbGRzWzBdLm5hbWUgIT0gIl9NX2hlYWRfaW1wbCI6CisgICAgICAgICAgICAgICAgcmV0dXJuICgnWyVkXScgJSBzZWxmLmNvdW50LCBpbXBsKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gKCdbJWRdJyAlIHNlbGYuY291bnQsIGltcGxbJ19NX2hlYWRfaW1wbCddKQorCisgICAgZGVmIF9faW5pdF9fIChzZWxmLCB0eXBlbmFtZSwgdmFsKToKKyAgICAgICAgc2VsZi50eXBlbmFtZSA9IHR5cGVuYW1lCisgICAgICAgIHNlbGYudmFsID0gdmFsOworCisgICAgZGVmIGNoaWxkcmVuIChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2l0ZXJhdG9yIChzZWxmLnZhbCkKKworICAgIGRlZiB0b19zdHJpbmcgKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzIGNvbnRhaW5pbmcnICUgKHNlbGYudHlwZW5hbWUpCisKK2NsYXNzIFN0ZFN0YWNrT3JRdWV1ZVByaW50ZXI6CisgICAgIlByaW50IGEgc3RkOjpzdGFjayBvciBzdGQ6OnF1ZXVlIgorCisgICAgZGVmIF9faW5pdF9fIChzZWxmLCB0eXBlbmFtZSwgdmFsKToKKyAgICAgICAgc2VsZi50eXBlbmFtZSA9IHR5cGVuYW1lCisgICAgICAgIHNlbGYudmlzdWFsaXplciA9IGdkYi5kZWZhdWx0X3Zpc3VhbGl6ZXIodmFsWydjJ10pCisKKyAgICBkZWYgY2hpbGRyZW4gKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi52aXN1YWxpemVyLmNoaWxkcmVuKCkKKworICAgIGRlZiB0b19zdHJpbmcgKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzIHdyYXBwaW5nOiAlcycgJSAoc2VsZi50eXBlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmlzdWFsaXplci50b19zdHJpbmcoKSkKKworICAgIGRlZiBkaXNwbGF5X2hpbnQgKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyIChzZWxmLnZpc3VhbGl6ZXIsICdkaXNwbGF5X2hpbnQnKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnZpc3VhbGl6ZXIuZGlzcGxheV9oaW50ICgpCisgICAgICAgIHJldHVybiBOb25lCisKK2NsYXNzIFJidHJlZUl0ZXJhdG9yOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCByYnRyZWUpOgorICAgICAgICBzZWxmLnNpemUgPSByYnRyZWVbJ19NX3QnXVsnX01faW1wbCddWydfTV9ub2RlX2NvdW50J10KKyAgICAgICAgc2VsZi5ub2RlID0gcmJ0cmVlWydfTV90J11bJ19NX2ltcGwnXVsnX01faGVhZGVyJ11bJ19NX2xlZnQnXQorICAgICAgICBzZWxmLmNvdW50ID0gMAorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBpbnQgKHNlbGYuc2l6ZSkKKworICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmNvdW50ID09IHNlbGYuc2l6ZToKKyAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgcmVzdWx0ID0gc2VsZi5ub2RlCisgICAgICAgIHNlbGYuY291bnQgPSBzZWxmLmNvdW50ICsgMQorICAgICAgICBpZiBzZWxmLmNvdW50IDwgc2VsZi5zaXplOgorICAgICAgICAgICAgIyBDb21wdXRlIHRoZSBuZXh0IG5vZGUuCisgICAgICAgICAgICBub2RlID0gc2VsZi5ub2RlCisgICAgICAgICAgICBpZiBub2RlLmRlcmVmZXJlbmNlKClbJ19NX3JpZ2h0J106CisgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUuZGVyZWZlcmVuY2UoKVsnX01fcmlnaHQnXQorICAgICAgICAgICAgICAgIHdoaWxlIG5vZGUuZGVyZWZlcmVuY2UoKVsnX01fbGVmdCddOgorICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5kZXJlZmVyZW5jZSgpWydfTV9sZWZ0J10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFyZW50ID0gbm9kZS5kZXJlZmVyZW5jZSgpWydfTV9wYXJlbnQnXQorICAgICAgICAgICAgICAgIHdoaWxlIG5vZGUgPT0gcGFyZW50LmRlcmVmZXJlbmNlKClbJ19NX3JpZ2h0J106CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBwYXJlbnQKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LmRlcmVmZXJlbmNlKClbJ19NX3BhcmVudCddCisgICAgICAgICAgICAgICAgaWYgbm9kZS5kZXJlZmVyZW5jZSgpWydfTV9yaWdodCddICE9IHBhcmVudDoKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHBhcmVudAorICAgICAgICAgICAgc2VsZi5ub2RlID0gbm9kZQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyMgVGhpcyBpcyBhIHByZXR0eSBwcmludGVyIGZvciBzdGQ6Ol9SYl90cmVlX2l0ZXJhdG9yICh3aGljaCBpcworIyBzdGQ6Om1hcDo6aXRlcmF0b3IpLCBhbmQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgUmJ0cmVlSXRlcmF0b3IKKyMgY2xhc3MgYWJvdmUuCitjbGFzcyBTdGRSYnRyZWVJdGVyYXRvclByaW50ZXI6CisgICAgIlByaW50IHN0ZDo6bWFwOjppdGVyYXRvciIKKworICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgdmFsKToKKyAgICAgICAgc2VsZi52YWwgPSB2YWwKKworICAgIGRlZiB0b19zdHJpbmcgKHNlbGYpOgorICAgICAgICB2YWx1ZXR5cGUgPSBzZWxmLnZhbC50eXBlLnRlbXBsYXRlX2FyZ3VtZW50KDApCisgICAgICAgIG5vZGV0eXBlID0gZ2RiLmxvb2t1cF90eXBlKCdzdGQ6Ol9SYl90cmVlX25vZGUgPCAlcyA+JyAlIHZhbHVldHlwZSkKKyAgICAgICAgbm9kZXR5cGUgPSBub2RldHlwZS5wb2ludGVyKCkKKyAgICAgICAgcmV0dXJuIHNlbGYudmFsLmNhc3Qobm9kZXR5cGUpLmRlcmVmZXJlbmNlKClbJ19NX3ZhbHVlX2ZpZWxkJ10KKworY2xhc3MgU3RkRGVidWdJdGVyYXRvclByaW50ZXI6CisgICAgIlByaW50IGEgZGVidWcgZW5hYmxlZCB2ZXJzaW9uIG9mIGFuIGl0ZXJhdG9yIgorCisgICAgZGVmIF9faW5pdF9fIChzZWxmLCB2YWwpOgorICAgICAgICBzZWxmLnZhbCA9IHZhbAorCisgICAgIyBKdXN0IHN0cmlwIGF3YXkgdGhlIGVuY2Fwc3VsYXRpbmcgX19nbnVfZGVidWc6Ol9TYWZlX2l0ZXJhdG9yCisgICAgIyBhbmQgcmV0dXJuIHRoZSB3cmFwcGVkIGl0ZXJhdG9yIHZhbHVlLgorICAgIGRlZiB0b19zdHJpbmcgKHNlbGYpOgorICAgICAgICBpdHlwZSA9IHNlbGYudmFsLnR5cGUudGVtcGxhdGVfYXJndW1lbnQoMCkKKyAgICAgICAgcmV0dXJuIHNlbGYudmFsWydfTV9jdXJyZW50J10uY2FzdChpdHlwZSkKKworY2xhc3MgU3RkTWFwUHJpbnRlcjoKKyAgICAiUHJpbnQgYSBzdGQ6Om1hcCBvciBzdGQ6Om11bHRpbWFwIgorCisgICAgIyBUdXJuIGFuIFJidHJlZUl0ZXJhdG9yIGludG8gYSBwcmV0dHktcHJpbnQgaXRlcmF0b3IuCisgICAgY2xhc3MgX2l0ZXI6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCByYml0ZXIsIHR5cGUpOgorICAgICAgICAgICAgc2VsZi5yYml0ZXIgPSByYml0ZXIKKyAgICAgICAgICAgIHNlbGYuY291bnQgPSAwCisgICAgICAgICAgICBzZWxmLnR5cGUgPSB0eXBlCisKKyAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYuY291bnQgJSAyID09IDA6CisgICAgICAgICAgICAgICAgbiA9IHNlbGYucmJpdGVyLm5leHQoKQorICAgICAgICAgICAgICAgIG4gPSBuLmNhc3Qoc2VsZi50eXBlKS5kZXJlZmVyZW5jZSgpWydfTV92YWx1ZV9maWVsZCddCisgICAgICAgICAgICAgICAgc2VsZi5wYWlyID0gbgorICAgICAgICAgICAgICAgIGl0ZW0gPSBuWydmaXJzdCddCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGl0ZW0gPSBzZWxmLnBhaXJbJ3NlY29uZCddCisgICAgICAgICAgICByZXN1bHQgPSAoJ1slZF0nICUgc2VsZi5jb3VudCwgaXRlbSkKKyAgICAgICAgICAgIHNlbGYuY291bnQgPSBzZWxmLmNvdW50ICsgMQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9faW5pdF9fIChzZWxmLCB0eXBlbmFtZSwgdmFsKToKKyAgICAgICAgc2VsZi50eXBlbmFtZSA9IHR5cGVuYW1lCisgICAgICAgIHNlbGYudmFsID0gdmFsCisKKyAgICBkZWYgdG9fc3RyaW5nIChzZWxmKToKKyAgICAgICAgcmV0dXJuICclcyB3aXRoICVkIGVsZW1lbnRzJyAlIChzZWxmLnR5cGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAoUmJ0cmVlSXRlcmF0b3IgKHNlbGYudmFsKSkpCisKKyAgICBkZWYgY2hpbGRyZW4gKHNlbGYpOgorICAgICAgICBrZXl0eXBlID0gc2VsZi52YWwudHlwZS50ZW1wbGF0ZV9hcmd1bWVudCgwKS5jb25zdCgpCisgICAgICAgIHZhbHVldHlwZSA9IHNlbGYudmFsLnR5cGUudGVtcGxhdGVfYXJndW1lbnQoMSkKKyAgICAgICAgbm9kZXR5cGUgPSBnZGIubG9va3VwX3R5cGUoJ3N0ZDo6X1JiX3RyZWVfbm9kZTwgc3RkOjpwYWlyPCAlcywgJXMgPiA+JyAlIChrZXl0eXBlLCB2YWx1ZXR5cGUpKQorICAgICAgICBub2RldHlwZSA9IG5vZGV0eXBlLnBvaW50ZXIoKQorICAgICAgICByZXR1cm4gc2VsZi5faXRlciAoUmJ0cmVlSXRlcmF0b3IgKHNlbGYudmFsKSwgbm9kZXR5cGUpCisKKyAgICBkZWYgZGlzcGxheV9oaW50IChzZWxmKToKKyAgICAgICAgcmV0dXJuICdtYXAnCisKK2NsYXNzIFN0ZFNldFByaW50ZXI6CisgICAgIlByaW50IGEgc3RkOjpzZXQgb3Igc3RkOjptdWx0aXNldCIKKworICAgICMgVHVybiBhbiBSYnRyZWVJdGVyYXRvciBpbnRvIGEgcHJldHR5LXByaW50IGl0ZXJhdG9yLgorICAgIGNsYXNzIF9pdGVyOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcmJpdGVyLCB0eXBlKToKKyAgICAgICAgICAgIHNlbGYucmJpdGVyID0gcmJpdGVyCisgICAgICAgICAgICBzZWxmLmNvdW50ID0gMAorICAgICAgICAgICAgc2VsZi50eXBlID0gdHlwZQorCisgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgICAgICBpdGVtID0gc2VsZi5yYml0ZXIubmV4dCgpCisgICAgICAgICAgICBpdGVtID0gaXRlbS5jYXN0KHNlbGYudHlwZSkuZGVyZWZlcmVuY2UoKVsnX01fdmFsdWVfZmllbGQnXQorICAgICAgICAgICAgIyBGSVhNRTogdGhpcyBpcyB3ZWlyZCAuLi4gd2hhdCB0byBkbz8KKyAgICAgICAgICAgICMgTWF5YmUgYSAnc2V0JyBkaXNwbGF5IGhpbnQ/CisgICAgICAgICAgICByZXN1bHQgPSAoJ1slZF0nICUgc2VsZi5jb3VudCwgaXRlbSkKKyAgICAgICAgICAgIHNlbGYuY291bnQgPSBzZWxmLmNvdW50ICsgMQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9faW5pdF9fIChzZWxmLCB0eXBlbmFtZSwgdmFsKToKKyAgICAgICAgc2VsZi50eXBlbmFtZSA9IHR5cGVuYW1lCisgICAgICAgIHNlbGYudmFsID0gdmFsCisKKyAgICBkZWYgdG9fc3RyaW5nIChzZWxmKToKKyAgICAgICAgcmV0dXJuICclcyB3aXRoICVkIGVsZW1lbnRzJyAlIChzZWxmLnR5cGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAoUmJ0cmVlSXRlcmF0b3IgKHNlbGYudmFsKSkpCisKKyAgICBkZWYgY2hpbGRyZW4gKHNlbGYpOgorICAgICAgICBrZXl0eXBlID0gc2VsZi52YWwudHlwZS50ZW1wbGF0ZV9hcmd1bWVudCgwKQorICAgICAgICBub2RldHlwZSA9IGdkYi5sb29rdXBfdHlwZSgnc3RkOjpfUmJfdHJlZV9ub2RlPCAlcyA+JyAlIGtleXR5cGUpLnBvaW50ZXIoKQorICAgICAgICByZXR1cm4gc2VsZi5faXRlciAoUmJ0cmVlSXRlcmF0b3IgKHNlbGYudmFsKSwgbm9kZXR5cGUpCisKK2NsYXNzIFN0ZEJpdHNldFByaW50ZXI6CisgICAgIlByaW50IGEgc3RkOjpiaXRzZXQiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZW5hbWUsIHZhbCk6CisgICAgICAgIHNlbGYudHlwZW5hbWUgPSB0eXBlbmFtZQorICAgICAgICBzZWxmLnZhbCA9IHZhbAorCisgICAgZGVmIHRvX3N0cmluZyAoc2VsZik6CisgICAgICAgICMgSWYgdGVtcGxhdGVfYXJndW1lbnQgaGFuZGxlZCB2YWx1ZXMsIHdlIGNvdWxkIHByaW50IHRoZQorICAgICAgICAjIHNpemUuICBPciB3ZSBjb3VsZCB1c2UgYSByZWdleHAgb24gdGhlIHR5cGUuCisgICAgICAgIHJldHVybiAnJXMnICUgKHNlbGYudHlwZW5hbWUpCisKKyAgICBkZWYgY2hpbGRyZW4gKHNlbGYpOgorICAgICAgICB3b3JkcyA9IHNlbGYudmFsWydfTV93J10KKyAgICAgICAgd3R5cGUgPSB3b3Jkcy50eXBlCisKKyAgICAgICAgIyBUaGUgX01fdyBtZW1iZXIgY2FuIGJlIGVpdGhlciBhbiB1bnNpZ25lZCBsb25nLCBvciBhbgorICAgICAgICAjIGFycmF5LiAgVGhpcyBkZXBlbmRzIG9uIHRoZSB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbiB1c2VkLgorICAgICAgICAjIElmIGl0IGlzIGEgc2luZ2xlIGxvbmcsIGNvbnZlcnQgdG8gYSBzaW5nbGUgZWxlbWVudCBsaXN0LgorICAgICAgICBpZiB3dHlwZS5jb2RlID09IGdkYi5UWVBFX0NPREVfQVJSQVk6CisgICAgICAgICAgICB0c2l6ZSA9IHd0eXBlLnRhcmdldCAoKS5zaXplb2YKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHdvcmRzID0gW3dvcmRzXQorICAgICAgICAgICAgdHNpemUgPSB3dHlwZS5zaXplb2YgCisKKyAgICAgICAgbndvcmRzID0gd3R5cGUuc2l6ZW9mIC8gdHNpemUKKyAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgYnl0ZSA9IDAKKyAgICAgICAgd2hpbGUgYnl0ZSA8IG53b3JkczoKKyAgICAgICAgICAgIHcgPSB3b3Jkc1tieXRlXQorICAgICAgICAgICAgYml0ID0gMAorICAgICAgICAgICAgd2hpbGUgdyAhPSAwOgorICAgICAgICAgICAgICAgIGlmICh3ICYgMSkgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgIyBBbm90aGVyIHNwb3Qgd2hlcmUgd2UgY291bGQgdXNlICdzZXQnPworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCgnWyVkXScgJSAoYnl0ZSAqIHRzaXplICogOCArIGJpdCksIDEpKQorICAgICAgICAgICAgICAgIGJpdCA9IGJpdCArIDEKKyAgICAgICAgICAgICAgICB3ID0gdyA+PiAxCisgICAgICAgICAgICBieXRlID0gYnl0ZSArIDEKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCitjbGFzcyBTdGREZXF1ZVByaW50ZXI6CisgICAgIlByaW50IGEgc3RkOjpkZXF1ZSIKKworICAgIGNsYXNzIF9pdGVyOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbm9kZSwgc3RhcnQsIGVuZCwgbGFzdCwgYnVmZmVyX3NpemUpOgorICAgICAgICAgICAgc2VsZi5ub2RlID0gbm9kZQorICAgICAgICAgICAgc2VsZi5wID0gc3RhcnQKKyAgICAgICAgICAgIHNlbGYuZW5kID0gZW5kCisgICAgICAgICAgICBzZWxmLmxhc3QgPSBsYXN0CisgICAgICAgICAgICBzZWxmLmJ1ZmZlcl9zaXplID0gYnVmZmVyX3NpemUKKyAgICAgICAgICAgIHNlbGYuY291bnQgPSAwCisKKyAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYucCA9PSBzZWxmLmxhc3Q6CisgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorCisgICAgICAgICAgICByZXN1bHQgPSAoJ1slZF0nICUgc2VsZi5jb3VudCwgc2VsZi5wLmRlcmVmZXJlbmNlKCkpCisgICAgICAgICAgICBzZWxmLmNvdW50ID0gc2VsZi5jb3VudCArIDEKKworICAgICAgICAgICAgIyBBZHZhbmNlIHRoZSAnY3VyJyBwb2ludGVyLgorICAgICAgICAgICAgc2VsZi5wID0gc2VsZi5wICsgMQorICAgICAgICAgICAgaWYgc2VsZi5wID09IHNlbGYuZW5kOgorICAgICAgICAgICAgICAgICMgSWYgd2UgZ290IHRvIHRoZSBlbmQgb2YgdGhpcyBidWNrZXQsIG1vdmUgdG8gdGhlCisgICAgICAgICAgICAgICAgIyBuZXh0IGJ1Y2tldC4KKyAgICAgICAgICAgICAgICBzZWxmLm5vZGUgPSBzZWxmLm5vZGUgKyAxCisgICAgICAgICAgICAgICAgc2VsZi5wID0gc2VsZi5ub2RlWzBdCisgICAgICAgICAgICAgICAgc2VsZi5lbmQgPSBzZWxmLnAgKyBzZWxmLmJ1ZmZlcl9zaXplCisKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlbmFtZSwgdmFsKToKKyAgICAgICAgc2VsZi50eXBlbmFtZSA9IHR5cGVuYW1lCisgICAgICAgIHNlbGYudmFsID0gdmFsCisgICAgICAgIHNlbGYuZWx0dHlwZSA9IHZhbC50eXBlLnRlbXBsYXRlX2FyZ3VtZW50KDApCisgICAgICAgIHNpemUgPSBzZWxmLmVsdHR5cGUuc2l6ZW9mCisgICAgICAgIGlmIHNpemUgPCA1MTI6CisgICAgICAgICAgICBzZWxmLmJ1ZmZlcl9zaXplID0gaW50ICg1MTIgLyBzaXplKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5idWZmZXJfc2l6ZSA9IDEKKworICAgIGRlZiB0b19zdHJpbmcoc2VsZik6CisgICAgICAgIHN0YXJ0ID0gc2VsZi52YWxbJ19NX2ltcGwnXVsnX01fc3RhcnQnXQorICAgICAgICBlbmQgPSBzZWxmLnZhbFsnX01faW1wbCddWydfTV9maW5pc2gnXQorCisgICAgICAgIGRlbHRhX24gPSBlbmRbJ19NX25vZGUnXSAtIHN0YXJ0WydfTV9ub2RlJ10gLSAxCisgICAgICAgIGRlbHRhX3MgPSBzdGFydFsnX01fbGFzdCddIC0gc3RhcnRbJ19NX2N1ciddCisgICAgICAgIGRlbHRhX2UgPSBlbmRbJ19NX2N1ciddIC0gZW5kWydfTV9maXJzdCddCisKKyAgICAgICAgc2l6ZSA9IHNlbGYuYnVmZmVyX3NpemUgKiBkZWx0YV9uICsgZGVsdGFfcyArIGRlbHRhX2UKKworICAgICAgICByZXR1cm4gJyVzIHdpdGggJWQgZWxlbWVudHMnICUgKHNlbGYudHlwZW5hbWUsIGxvbmcgKHNpemUpKQorCisgICAgZGVmIGNoaWxkcmVuKHNlbGYpOgorICAgICAgICBzdGFydCA9IHNlbGYudmFsWydfTV9pbXBsJ11bJ19NX3N0YXJ0J10KKyAgICAgICAgZW5kID0gc2VsZi52YWxbJ19NX2ltcGwnXVsnX01fZmluaXNoJ10KKyAgICAgICAgcmV0dXJuIHNlbGYuX2l0ZXIoc3RhcnRbJ19NX25vZGUnXSwgc3RhcnRbJ19NX2N1ciddLCBzdGFydFsnX01fbGFzdCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRbJ19NX2N1ciddLCBzZWxmLmJ1ZmZlcl9zaXplKQorCisgICAgZGVmIGRpc3BsYXlfaGludCAoc2VsZik6CisgICAgICAgIHJldHVybiAnYXJyYXknCisKK2NsYXNzIFN0ZERlcXVlSXRlcmF0b3JQcmludGVyOgorICAgICJQcmludCBzdGQ6OmRlcXVlOjppdGVyYXRvciIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWwpOgorICAgICAgICBzZWxmLnZhbCA9IHZhbAorCisgICAgZGVmIHRvX3N0cmluZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudmFsWydfTV9jdXInXS5kZXJlZmVyZW5jZSgpCisKK2NsYXNzIFN0ZFN0cmluZ1ByaW50ZXI6CisgICAgIlByaW50IGEgc3RkOjpiYXNpY19zdHJpbmcgb2Ygc29tZSBraW5kIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbCk6CisgICAgICAgIHNlbGYudmFsID0gdmFsCisKKyAgICBkZWYgdG9fc3RyaW5nKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSAmc3RyaW5nIHdvcmtzLCB0b28uCisgICAgICAgIHR5cGUgPSBzZWxmLnZhbC50eXBlCisgICAgICAgIGlmIHR5cGUuY29kZSA9PSBnZGIuVFlQRV9DT0RFX1JFRjoKKyAgICAgICAgICAgIHR5cGUgPSB0eXBlLnRhcmdldCAoKQorCisgICAgICAgICMgQ2FsY3VsYXRlIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBzbyB0aGF0IHRvX3N0cmluZyByZXR1cm5zCisgICAgICAgICMgdGhlIHN0cmluZyBhY2NvcmRpbmcgdG8gbGVuZ3RoLCBub3QgYWNjb3JkaW5nIHRvIGZpcnN0IG51bGwKKyAgICAgICAgIyBlbmNvdW50ZXJlZC4KKyAgICAgICAgcHRyID0gc2VsZi52YWwgWydfTV9kYXRhcGx1cyddWydfTV9wJ10KKyAgICAgICAgcmVhbHR5cGUgPSB0eXBlLnVucXVhbGlmaWVkICgpLnN0cmlwX3R5cGVkZWZzICgpCisgICAgICAgIHJlcHR5cGUgPSBnZGIubG9va3VwX3R5cGUgKHN0ciAocmVhbHR5cGUpICsgJzo6X1JlcCcpLnBvaW50ZXIgKCkKKyAgICAgICAgaGVhZGVyID0gcHRyLmNhc3QocmVwdHlwZSkgLSAxCisgICAgICAgIGxlbiA9IGhlYWRlci5kZXJlZmVyZW5jZSAoKVsnX01fbGVuZ3RoJ10KKyAgICAgICAgaWYgaGFzYXR0cihwdHIsICJsYXp5X3N0cmluZyIpOgorICAgICAgICAgICAgcmV0dXJuIHB0ci5sYXp5X3N0cmluZyAobGVuZ3RoID0gbGVuKQorICAgICAgICByZXR1cm4gcHRyLnN0cmluZyAobGVuZ3RoID0gbGVuKQorCisgICAgZGVmIGRpc3BsYXlfaGludCAoc2VsZik6CisgICAgICAgIHJldHVybiAnc3RyaW5nJworCitjbGFzcyBUcjFIYXNodGFibGVJdGVyYXRvcjoKKyAgICBkZWYgX19pbml0X18gKHNlbGYsIGhhc2gpOgorICAgICAgICBzZWxmLmNvdW50ID0gMAorICAgICAgICBzZWxmLm5fYnVja2V0cyA9IGhhc2hbJ19NX2VsZW1lbnRfY291bnQnXQorICAgICAgICBpZiBzZWxmLm5fYnVja2V0cyA9PSAwOgorICAgICAgICAgICAgc2VsZi5ub2RlID0gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYnVja2V0ID0gaGFzaFsnX01fYnVja2V0cyddCisgICAgICAgICAgICBzZWxmLm5vZGUgPSBzZWxmLmJ1Y2tldFswXQorICAgICAgICAgICAgc2VsZi51cGRhdGUgKCkKKworICAgIGRlZiBfX2l0ZXJfXyAoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgdXBkYXRlIChzZWxmKToKKyAgICAgICAgIyBJZiB3ZSBhZHZhbmNlZCBvZmYgdGhlIGVuZCBvZiB0aGUgY2hhaW4sIG1vdmUgdG8gdGhlIG5leHQKKyAgICAgICAgIyBidWNrZXQuCisgICAgICAgIHdoaWxlIHNlbGYubm9kZSA9PSAwOgorICAgICAgICAgICAgc2VsZi5idWNrZXQgPSBzZWxmLmJ1Y2tldCArIDEKKyAgICAgICAgICAgIHNlbGYubm9kZSA9IHNlbGYuYnVja2V0WzBdCisKKyAgICAgICAjIElmIHdlIGFkdmFuY2VkIG9mZiB0aGUgZW5kIG9mIHRoZSBidWNrZXQgYXJyYXksIHRoZW4KKyAgICAgICAjIHdlJ3JlIGRvbmUuCisgICAgICAgIGlmIHNlbGYuY291bnQgPT0gc2VsZi5uX2J1Y2tldHM6CisgICAgICAgICAgICBzZWxmLm5vZGUgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5jb3VudCA9IHNlbGYuY291bnQgKyAxCisKKyAgICBkZWYgbmV4dCAoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLm5vZGU6CisgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgIHJlc3VsdCA9IHNlbGYubm9kZS5kZXJlZmVyZW5jZSgpWydfTV92J10KKyAgICAgICAgc2VsZi5ub2RlID0gc2VsZi5ub2RlLmRlcmVmZXJlbmNlKClbJ19NX25leHQnXQorICAgICAgICBzZWxmLnVwZGF0ZSAoKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKK2NsYXNzIFRyMVVub3JkZXJlZFNldFByaW50ZXI6CisgICAgIlByaW50IGEgdHIxOjp1bm9yZGVyZWRfc2V0IgorCisgICAgZGVmIF9faW5pdF9fIChzZWxmLCB0eXBlbmFtZSwgdmFsKToKKyAgICAgICAgc2VsZi50eXBlbmFtZSA9IHR5cGVuYW1lCisgICAgICAgIHNlbGYudmFsID0gdmFsCisKKyAgICBkZWYgdG9fc3RyaW5nIChzZWxmKToKKyAgICAgICAgcmV0dXJuICclcyB3aXRoICVkIGVsZW1lbnRzJyAlIChzZWxmLnR5cGVuYW1lLCBzZWxmLnZhbFsnX01fZWxlbWVudF9jb3VudCddKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBmb3JtYXRfY291bnQgKGkpOgorICAgICAgICByZXR1cm4gJ1slZF0nICUgaQorCisgICAgZGVmIGNoaWxkcmVuIChzZWxmKToKKyAgICAgICAgY291bnRlciA9IGl0ZXJ0b29scy5pbWFwIChzZWxmLmZvcm1hdF9jb3VudCwgaXRlcnRvb2xzLmNvdW50KCkpCisgICAgICAgIHJldHVybiBpdGVydG9vbHMuaXppcCAoY291bnRlciwgVHIxSGFzaHRhYmxlSXRlcmF0b3IgKHNlbGYudmFsKSkKKworY2xhc3MgVHIxVW5vcmRlcmVkTWFwUHJpbnRlcjoKKyAgICAiUHJpbnQgYSB0cjE6OnVub3JkZXJlZF9tYXAiCisKKyAgICBkZWYgX19pbml0X18gKHNlbGYsIHR5cGVuYW1lLCB2YWwpOgorICAgICAgICBzZWxmLnR5cGVuYW1lID0gdHlwZW5hbWUKKyAgICAgICAgc2VsZi52YWwgPSB2YWwKKworICAgIGRlZiB0b19zdHJpbmcgKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzIHdpdGggJWQgZWxlbWVudHMnICUgKHNlbGYudHlwZW5hbWUsIHNlbGYudmFsWydfTV9lbGVtZW50X2NvdW50J10pCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGZsYXR0ZW4gKGxpc3QpOgorICAgICAgICBmb3IgZWx0IGluIGxpc3Q6CisgICAgICAgICAgICBmb3IgaSBpbiBlbHQ6CisgICAgICAgICAgICAgICAgeWllbGQgaQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBmb3JtYXRfb25lIChlbHQpOgorICAgICAgICByZXR1cm4gKGVsdFsnZmlyc3QnXSwgZWx0WydzZWNvbmQnXSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZm9ybWF0X2NvdW50IChpKToKKyAgICAgICAgcmV0dXJuICdbJWRdJyAlIGkKKworICAgIGRlZiBjaGlsZHJlbiAoc2VsZik6CisgICAgICAgIGNvdW50ZXIgPSBpdGVydG9vbHMuaW1hcCAoc2VsZi5mb3JtYXRfY291bnQsIGl0ZXJ0b29scy5jb3VudCgpKQorICAgICAgICAjIE1hcCBvdmVyIHRoZSBoYXNoIHRhYmxlIGFuZCBmbGF0dGVuIHRoZSByZXN1bHQuCisgICAgICAgIGRhdGEgPSBzZWxmLmZsYXR0ZW4gKGl0ZXJ0b29scy5pbWFwIChzZWxmLmZvcm1hdF9vbmUsIFRyMUhhc2h0YWJsZUl0ZXJhdG9yIChzZWxmLnZhbCkpKQorICAgICAgICAjIFppcCB0aGUgdHdvIGl0ZXJhdG9ycyB0b2dldGhlci4KKyAgICAgICAgcmV0dXJuIGl0ZXJ0b29scy5pemlwIChjb3VudGVyLCBkYXRhKQorCisgICAgZGVmIGRpc3BsYXlfaGludCAoc2VsZik6CisgICAgICAgIHJldHVybiAnbWFwJworCitkZWYgcmVnaXN0ZXJfbGlic3RkY3h4X3ByaW50ZXJzIChvYmopOgorICAgICJSZWdpc3RlciBsaWJzdGRjKysgcHJldHR5LXByaW50ZXJzIHdpdGggb2JqZmlsZSBPYmouIgorCisgICAgaWYgb2JqID09IE5vbmU6CisgICAgICAgIG9iaiA9IGdkYgorCisgICAgb2JqLnByZXR0eV9wcmludGVycy5hcHBlbmQgKGxvb2t1cF9mdW5jdGlvbikKKworZGVmIGxvb2t1cF9mdW5jdGlvbiAodmFsKToKKyAgICAiTG9vay11cCBhbmQgcmV0dXJuIGEgcHJldHR5LXByaW50ZXIgdGhhdCBjYW4gcHJpbnQgdmFsLiIKKworICAgICMgR2V0IHRoZSB0eXBlLgorICAgIHR5cGUgPSB2YWwudHlwZQorCisgICAgIyBJZiBpdCBwb2ludHMgdG8gYSByZWZlcmVuY2UsIGdldCB0aGUgcmVmZXJlbmNlLgorICAgIGlmIHR5cGUuY29kZSA9PSBnZGIuVFlQRV9DT0RFX1JFRjoKKyAgICAgICAgdHlwZSA9IHR5cGUudGFyZ2V0ICgpCisKKyAgICAjIEdldCB0aGUgdW5xdWFsaWZpZWQgdHlwZSwgc3RyaXBwZWQgb2YgdHlwZWRlZnMuCisgICAgdHlwZSA9IHR5cGUudW5xdWFsaWZpZWQgKCkuc3RyaXBfdHlwZWRlZnMgKCkKKworICAgICMgR2V0IHRoZSB0eXBlIG5hbWUuICAgIAorICAgIHR5cGVuYW1lID0gdHlwZS50YWcKKyAgICBpZiB0eXBlbmFtZSA9PSBOb25lOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgIyBJdGVyYXRlIG92ZXIgbG9jYWwgZGljdGlvbmFyeSBvZiB0eXBlcyB0byBkZXRlcm1pbmUKKyAgICAjIGlmIGEgcHJpbnRlciBpcyByZWdpc3RlcmVkIGZvciB0aGF0IHR5cGUuICBSZXR1cm4gYW4KKyAgICAjIGluc3RhbnRpYXRpb24gb2YgdGhlIHByaW50ZXIgaWYgZm91bmQuCisgICAgZm9yIGZ1bmN0aW9uIGluIHByZXR0eV9wcmludGVyc19kaWN0OgorICAgICAgICBpZiBmdW5jdGlvbi5zZWFyY2ggKHR5cGVuYW1lKToKKyAgICAgICAgICAgIHJldHVybiBwcmV0dHlfcHJpbnRlcnNfZGljdFtmdW5jdGlvbl0gKHZhbCkKKyAgICAgICAgCisgICAgIyBDYW5ub3QgZmluZCBhIHByZXR0eSBwcmludGVyLiAgUmV0dXJuIE5vbmUuCisgICAgcmV0dXJuIE5vbmUKKworZGVmIGJ1aWxkX2xpYnN0ZGN4eF9kaWN0aW9uYXJ5ICgpOgorICAgICMgbGlic3RkYysrIG9iamVjdHMgcmVxdWlyaW5nIHByZXR0eS1wcmludGluZy4KKyAgICAjIEluIG9yZGVyIGZyb206CisgICAgIyBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9saWJzdGRjKysvbGF0ZXN0LWRveHlnZW4vYTAxODQ3Lmh0bWwKKyAgICBwcmV0dHlfcHJpbnRlcnNfZGljdFtyZS5jb21waWxlKCdec3RkOjpiYXNpY19zdHJpbmc8Lio+JCcpXSA9IGxhbWJkYSB2YWw6IFN0ZFN0cmluZ1ByaW50ZXIodmFsKQorICAgIHByZXR0eV9wcmludGVyc19kaWN0W3JlLmNvbXBpbGUoJ15zdGQ6OmJpdHNldDwuKj4kJyldID0gbGFtYmRhIHZhbDogU3RkQml0c2V0UHJpbnRlcigic3RkOjpiaXRzZXQiLCB2YWwpCisgICAgcHJldHR5X3ByaW50ZXJzX2RpY3RbcmUuY29tcGlsZSgnXnN0ZDo6ZGVxdWU8Lio+JCcpXSA9IGxhbWJkYSB2YWw6IFN0ZERlcXVlUHJpbnRlcigic3RkOjpkZXF1ZSIsIHZhbCkKKyAgICBwcmV0dHlfcHJpbnRlcnNfZGljdFtyZS5jb21waWxlKCdec3RkOjpsaXN0PC4qPiQnKV0gPSBsYW1iZGEgdmFsOiBTdGRMaXN0UHJpbnRlcigic3RkOjpsaXN0IiwgdmFsKQorICAgIHByZXR0eV9wcmludGVyc19kaWN0W3JlLmNvbXBpbGUoJ15zdGQ6Om1hcDwuKj4kJyldID0gbGFtYmRhIHZhbDogU3RkTWFwUHJpbnRlcigic3RkOjptYXAiLCB2YWwpCisgICAgcHJldHR5X3ByaW50ZXJzX2RpY3RbcmUuY29tcGlsZSgnXnN0ZDo6bXVsdGltYXA8Lio+JCcpXSA9IGxhbWJkYSB2YWw6IFN0ZE1hcFByaW50ZXIoInN0ZDo6bXVsdGltYXAiLCB2YWwpCisgICAgcHJldHR5X3ByaW50ZXJzX2RpY3RbcmUuY29tcGlsZSgnXnN0ZDo6bXVsdGlzZXQ8Lio+JCcpXSA9IGxhbWJkYSB2YWw6IFN0ZFNldFByaW50ZXIoInN0ZDo6bXVsdGlzZXQiLCB2YWwpCisgICAgcHJldHR5X3ByaW50ZXJzX2RpY3RbcmUuY29tcGlsZSgnXnN0ZDo6cHJpb3JpdHlfcXVldWU8Lio+JCcpXSA9IGxhbWJkYSB2YWw6IFN0ZFN0YWNrT3JRdWV1ZVByaW50ZXIoInN0ZDo6cHJpb3JpdHlfcXVldWUiLCB2YWwpCisgICAgcHJldHR5X3ByaW50ZXJzX2RpY3RbcmUuY29tcGlsZSgnXnN0ZDo6cXVldWU8Lio+JCcpXSA9IGxhbWJkYSB2YWw6IFN0ZFN0YWNrT3JRdWV1ZVByaW50ZXIoInN0ZDo6cXVldWUiLCB2YWwpCisgICAgcHJldHR5X3ByaW50ZXJzX2RpY3RbcmUuY29tcGlsZSgnXnN0ZDo6dHVwbGU8Lio+JCcpXSA9IGxhbWJkYSB2YWw6IFN0ZFR1cGxlUHJpbnRlcigic3RkOjp0dXBsZSIsIHZhbCkKKyAgICBwcmV0dHlfcHJpbnRlcnNfZGljdFtyZS5jb21waWxlKCdec3RkOjpzZXQ8Lio+JCcpXSA9IGxhbWJkYSB2YWw6IFN0ZFNldFByaW50ZXIoInN0ZDo6c2V0IiwgdmFsKQorICAgIHByZXR0eV9wcmludGVyc19kaWN0W3JlLmNvbXBpbGUoJ15zdGQ6OnN0YWNrPC4qPiQnKV0gPSBsYW1iZGEgdmFsOiBTdGRTdGFja09yUXVldWVQcmludGVyKCJzdGQ6OnN0YWNrIiwgdmFsKQorICAgIHByZXR0eV9wcmludGVyc19kaWN0W3JlLmNvbXBpbGUoJ15zdGQ6OnVuaXF1ZV9wdHI8Lio+JCcpXSA9IFVuaXF1ZVBvaW50ZXJQcmludGVyCisgICAgcHJldHR5X3ByaW50ZXJzX2RpY3RbcmUuY29tcGlsZSgnXnN0ZDo6dmVjdG9yPC4qPiQnKV0gPSBsYW1iZGEgdmFsOiBTdGRWZWN0b3JQcmludGVyKCJzdGQ6OnZlY3RvciIsIHZhbCkKKyAgICAjIHZlY3Rvcjxib29sPgorCisgICAgIyBQcmludGVyIHJlZ2lzdHJhdGlvbnMgZm9yIGNsYXNzZXMgY29tcGlsZWQgd2l0aCAtRF9HTElCQ1hYX0RFQlVHLgorICAgIHByZXR0eV9wcmludGVyc19kaWN0W3JlLmNvbXBpbGUoJ15zdGQ6Ol9fZGVidWc6OmJpdHNldDwuKj4kJyldID0gbGFtYmRhIHZhbDogU3RkQml0c2V0UHJpbnRlcigic3RkOjpfX2RlYnVnOjpiaXRzZXQiLCB2YWwpCisgICAgcHJldHR5X3ByaW50ZXJzX2RpY3RbcmUuY29tcGlsZSgnXnN0ZDo6X19kZWJ1Zzo6ZGVxdWU8Lio+JCcpXSA9IGxhbWJkYSB2YWw6IFN0ZERlcXVlUHJpbnRlcigic3RkOjpfX2RlYnVnOjpkZXF1ZSIsIHZhbCkKKyAgICBwcmV0dHlfcHJpbnRlcnNfZGljdFtyZS5jb21waWxlKCdec3RkOjpfX2RlYnVnOjpsaXN0PC4qPiQnKV0gPSBsYW1iZGEgdmFsOiBTdGRMaXN0UHJpbnRlcigic3RkOjpfX2RlYnVnOjpsaXN0IiwgdmFsKQorICAgIHByZXR0eV9wcmludGVyc19kaWN0W3JlLmNvbXBpbGUoJ15zdGQ6Ol9fZGVidWc6Om1hcDwuKj4kJyldID0gbGFtYmRhIHZhbDogU3RkTWFwUHJpbnRlcigic3RkOjpfX2RlYnVnOjptYXAiLCB2YWwpCisgICAgcHJldHR5X3ByaW50ZXJzX2RpY3RbcmUuY29tcGlsZSgnXnN0ZDo6X19kZWJ1Zzo6bXVsdGltYXA8Lio+JCcpXSA9IGxhbWJkYSB2YWw6IFN0ZE1hcFByaW50ZXIoInN0ZDo6X19kZWJ1Zzo6bXVsdGltYXAiLCB2YWwpCisgICAgcHJldHR5X3ByaW50ZXJzX2RpY3RbcmUuY29tcGlsZSgnXnN0ZDo6X19kZWJ1Zzo6bXVsdGlzZXQ8Lio+JCcpXSA9IGxhbWJkYSB2YWw6IFN0ZFNldFByaW50ZXIoInN0ZDo6X19kZWJ1Zzo6bXVsdGlzZXQiLCB2YWwpCisgICAgcHJldHR5X3ByaW50ZXJzX2RpY3RbcmUuY29tcGlsZSgnXnN0ZDo6X19kZWJ1Zzo6cHJpb3JpdHlfcXVldWU8Lio+JCcpXSA9IGxhbWJkYSB2YWw6IFN0ZFN0YWNrT3JRdWV1ZVByaW50ZXIoInN0ZDo6X19kZWJ1Zzo6cHJpb3JpdHlfcXVldWUiLCB2YWwpCisgICAgcHJldHR5X3ByaW50ZXJzX2RpY3RbcmUuY29tcGlsZSgnXnN0ZDo6X19kZWJ1Zzo6cXVldWU8Lio+JCcpXSA9IGxhbWJkYSB2YWw6IFN0ZFN0YWNrT3JRdWV1ZVByaW50ZXIoInN0ZDo6X19kZWJ1Zzo6cXVldWUiLCB2YWwpCisgICAgcHJldHR5X3ByaW50ZXJzX2RpY3RbcmUuY29tcGlsZSgnXnN0ZDo6X19kZWJ1Zzo6c2V0PC4qPiQnKV0gPSBsYW1iZGEgdmFsOiBTdGRTZXRQcmludGVyKCJzdGQ6Ol9fZGVidWc6OnNldCIsIHZhbCkKKyAgICBwcmV0dHlfcHJpbnRlcnNfZGljdFtyZS5jb21waWxlKCdec3RkOjpfX2RlYnVnOjpzdGFjazwuKj4kJyldID0gbGFtYmRhIHZhbDogU3RkU3RhY2tPclF1ZXVlUHJpbnRlcigic3RkOjpfX2RlYnVnOjpzdGFjayIsIHZhbCkKKyAgICBwcmV0dHlfcHJpbnRlcnNfZGljdFtyZS5jb21waWxlKCdec3RkOjpfX2RlYnVnOjp1bmlxdWVfcHRyPC4qPiQnKV0gPSBVbmlxdWVQb2ludGVyUHJpbnRlcgorICAgIHByZXR0eV9wcmludGVyc19kaWN0W3JlLmNvbXBpbGUoJ15zdGQ6Ol9fZGVidWc6OnZlY3RvcjwuKj4kJyldID0gbGFtYmRhIHZhbDogU3RkVmVjdG9yUHJpbnRlcigic3RkOjpfX2RlYnVnOjp2ZWN0b3IiLCB2YWwpCisKKyAgICAjIFRoZXNlIGFyZSB0aGUgVFIxIGFuZCBDKysweCBwcmludGVycy4KKyAgICAjIEZvciBhcnJheSAtIHRoZSBkZWZhdWx0IEdEQiBwcmV0dHktcHJpbnRlciBzZWVtcyByZWFzb25hYmxlLgorICAgIHByZXR0eV9wcmludGVyc19kaWN0W3JlLmNvbXBpbGUoJ15zdGQ6OnNoYXJlZF9wdHI8Lio+JCcpXSA9IGxhbWJkYSB2YWw6IFN0ZFBvaW50ZXJQcmludGVyICgnc3RkOjpzaGFyZWRfcHRyJywgdmFsKQorICAgIHByZXR0eV9wcmludGVyc19kaWN0W3JlLmNvbXBpbGUoJ15zdGQ6OndlYWtfcHRyPC4qPiQnKV0gPSBsYW1iZGEgdmFsOiBTdGRQb2ludGVyUHJpbnRlciAoJ3N0ZDo6d2Vha19wdHInLCB2YWwpCisgICAgcHJldHR5X3ByaW50ZXJzX2RpY3RbcmUuY29tcGlsZSgnXnN0ZDo6dW5vcmRlcmVkX21hcDwuKj4kJyldID0gbGFtYmRhIHZhbDogVHIxVW5vcmRlcmVkTWFwUHJpbnRlciAoJ3N0ZDo6dW5vcmRlcmVkX21hcCcsIHZhbCkKKyAgICBwcmV0dHlfcHJpbnRlcnNfZGljdFtyZS5jb21waWxlKCdec3RkOjp1bm9yZGVyZWRfc2V0PC4qPiQnKV0gPSBsYW1iZGEgdmFsOiBUcjFVbm9yZGVyZWRTZXRQcmludGVyICgnc3RkOjp1bm9yZGVyZWRfc2V0JywgdmFsKQorICAgIHByZXR0eV9wcmludGVyc19kaWN0W3JlLmNvbXBpbGUoJ15zdGQ6OnVub3JkZXJlZF9tdWx0aW1hcDwuKj4kJyldID0gbGFtYmRhIHZhbDogVHIxVW5vcmRlcmVkTWFwUHJpbnRlciAoJ3N0ZDo6dW5vcmRlcmVkX211bHRpbWFwJywgdmFsKQorICAgIHByZXR0eV9wcmludGVyc19kaWN0W3JlLmNvbXBpbGUoJ15zdGQ6OnVub3JkZXJlZF9tdWx0aXNldDwuKj4kJyldID0gbGFtYmRhIHZhbDogVHIxVW5vcmRlcmVkU2V0UHJpbnRlciAoJ3N0ZDo6dW5vcmRlcmVkX211bHRpc2V0JywgdmFsKQorCisgICAgcHJldHR5X3ByaW50ZXJzX2RpY3RbcmUuY29tcGlsZSgnXnN0ZDo6dHIxOjpzaGFyZWRfcHRyPC4qPiQnKV0gPSBsYW1iZGEgdmFsOiBTdGRQb2ludGVyUHJpbnRlciAoJ3N0ZDo6dHIxOjpzaGFyZWRfcHRyJywgdmFsKQorICAgIHByZXR0eV9wcmludGVyc19kaWN0W3JlLmNvbXBpbGUoJ15zdGQ6OnRyMTo6d2Vha19wdHI8Lio+JCcpXSA9IGxhbWJkYSB2YWw6IFN0ZFBvaW50ZXJQcmludGVyICgnc3RkOjp0cjE6OndlYWtfcHRyJywgdmFsKQorICAgIHByZXR0eV9wcmludGVyc19kaWN0W3JlLmNvbXBpbGUoJ15zdGQ6OnRyMTo6dW5vcmRlcmVkX21hcDwuKj4kJyldID0gbGFtYmRhIHZhbDogVHIxVW5vcmRlcmVkTWFwUHJpbnRlciAoJ3N0ZDo6dHIxOjp1bm9yZGVyZWRfbWFwJywgdmFsKQorICAgIHByZXR0eV9wcmludGVyc19kaWN0W3JlLmNvbXBpbGUoJ15zdGQ6OnRyMTo6dW5vcmRlcmVkX3NldDwuKj4kJyldID0gbGFtYmRhIHZhbDogVHIxVW5vcmRlcmVkU2V0UHJpbnRlciAoJ3N0ZDo6dHIxOjp1bm9yZGVyZWRfc2V0JywgdmFsKQorICAgIHByZXR0eV9wcmludGVyc19kaWN0W3JlLmNvbXBpbGUoJ15zdGQ6OnRyMTo6dW5vcmRlcmVkX211bHRpbWFwPC4qPiQnKV0gPSBsYW1iZGEgdmFsOiBUcjFVbm9yZGVyZWRNYXBQcmludGVyICgnc3RkOjp0cjE6OnVub3JkZXJlZF9tdWx0aW1hcCcsIHZhbCkKKyAgICBwcmV0dHlfcHJpbnRlcnNfZGljdFtyZS5jb21waWxlKCdec3RkOjp0cjE6OnVub3JkZXJlZF9tdWx0aXNldDwuKj4kJyldID0gbGFtYmRhIHZhbDogVHIxVW5vcmRlcmVkU2V0UHJpbnRlciAoJ3N0ZDo6dHIxOjp1bm9yZGVyZWRfbXVsdGlzZXQnLCB2YWwpCisKKyAgICAjIFRoZXNlIGFyZSB0aGUgQysrMHggcHJpbnRlciByZWdpc3RyYXRpb25zIGZvciAtRF9HTElCQ1hYX0RFQlVHIGNhc2VzLgorICAgICMgVGhlIHRyMSBuYW1lc3BhY2UgcHJpbnRlcnMgZG8gbm90IHNlZW0gdG8gaGF2ZSBhbnkgZGVidWcKKyAgICAjIGVxdWl2YWxlbnRzLCBzbyBkbyBubyByZWdpc3RlciB0aGVtLgorICAgIHByZXR0eV9wcmludGVyc19kaWN0W3JlLmNvbXBpbGUoJ15zdGQ6Ol9fZGVidWc6OnVub3JkZXJlZF9tYXA8Lio+JCcpXSA9IGxhbWJkYSB2YWw6IFRyMVVub3JkZXJlZE1hcFByaW50ZXIgKCdzdGQ6Ol9fZGVidWc6OnVub3JkZXJlZF9tYXAnLCB2YWwpCisgICAgcHJldHR5X3ByaW50ZXJzX2RpY3RbcmUuY29tcGlsZSgnXnN0ZDo6X19kZWJ1Zzo6dW5vcmRlcmVkX3NldDwuKj4kJyldID0gbGFtYmRhIHZhbDogVHIxVW5vcmRlcmVkU2V0UHJpbnRlciAoJ3N0ZDo6X19kZWJ1Zzo6dW5vcmRlcmVkX3NldCcsIHZhbCkKKyAgICBwcmV0dHlfcHJpbnRlcnNfZGljdFtyZS5jb21waWxlKCdec3RkOjpfX2RlYnVnOjp1bm9yZGVyZWRfbXVsdGltYXA8Lio+JCcpXSA9IGxhbWJkYSB2YWw6IFRyMVVub3JkZXJlZE1hcFByaW50ZXIgKCdzdGQ6Ol9fZGVidWc6OnVub3JkZXJlZF9tdWx0aW1hcCcsICB2YWwpCisgICAgcHJldHR5X3ByaW50ZXJzX2RpY3RbcmUuY29tcGlsZSgnXnN0ZDo6X19kZWJ1Zzo6dW5vcmRlcmVkX211bHRpc2V0PC4qPiQnKV0gPSBsYW1iZGEgdmFsOiBUcjFVbm9yZGVyZWRTZXRQcmludGVyICgnc3RkOjpfX2RlYnVnOnVub3JkZXJlZF9tdWx0aXNldCcsIHZhbCkKKworCisgICAgIyBFeHRlbnNpb25zLgorICAgIHByZXR0eV9wcmludGVyc19kaWN0W3JlLmNvbXBpbGUoJ15fX2dudV9jeHg6OnNsaXN0PC4qPiQnKV0gPSBTdGRTbGlzdFByaW50ZXIKKworICAgIGlmIFRydWU6CisgICAgICAgICMgVGhlc2Ugc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSwgaWYgR0RCICJwcmludCAqaSIgd29ya2VkLgorICAgICAgICAjIEJ1dCBpdCBvZnRlbiBkb2Vzbid0LCBzbyBoZXJlIHRoZXkgYXJlLgorICAgICAgICBwcmV0dHlfcHJpbnRlcnNfZGljdFtyZS5jb21waWxlKCdec3RkOjpfTGlzdF9pdGVyYXRvcjwuKj4kJyldID0gbGFtYmRhIHZhbDogU3RkTGlzdEl0ZXJhdG9yUHJpbnRlcigic3RkOjpfTGlzdF9pdGVyYXRvciIsdmFsKQorICAgICAgICBwcmV0dHlfcHJpbnRlcnNfZGljdFtyZS5jb21waWxlKCdec3RkOjpfTGlzdF9jb25zdF9pdGVyYXRvcjwuKj4kJyldID0gbGFtYmRhIHZhbDogU3RkTGlzdEl0ZXJhdG9yUHJpbnRlcigic3RkOjpfTGlzdF9jb25zdF9pdGVyYXRvciIsdmFsKQorICAgICAgICBwcmV0dHlfcHJpbnRlcnNfZGljdFtyZS5jb21waWxlKCdec3RkOjpfUmJfdHJlZV9pdGVyYXRvcjwuKj4kJyldID0gbGFtYmRhIHZhbDogU3RkUmJ0cmVlSXRlcmF0b3JQcmludGVyKHZhbCkKKyAgICAgICAgcHJldHR5X3ByaW50ZXJzX2RpY3RbcmUuY29tcGlsZSgnXnN0ZDo6X1JiX3RyZWVfY29uc3RfaXRlcmF0b3I8Lio+JCcpXSA9IGxhbWJkYSB2YWw6IFN0ZFJidHJlZUl0ZXJhdG9yUHJpbnRlcih2YWwpCisgICAgICAgIHByZXR0eV9wcmludGVyc19kaWN0W3JlLmNvbXBpbGUoJ15zdGQ6Ol9EZXF1ZV9pdGVyYXRvcjwuKj4kJyldID0gbGFtYmRhIHZhbDogU3RkRGVxdWVJdGVyYXRvclByaW50ZXIodmFsKQorICAgICAgICBwcmV0dHlfcHJpbnRlcnNfZGljdFtyZS5jb21waWxlKCdec3RkOjpfRGVxdWVfY29uc3RfaXRlcmF0b3I8Lio+JCcpXSA9IGxhbWJkYSB2YWw6IFN0ZERlcXVlSXRlcmF0b3JQcmludGVyKHZhbCkKKyAgICAgICAgcHJldHR5X3ByaW50ZXJzX2RpY3RbcmUuY29tcGlsZSgnXl9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8Lio+JCcpXSA9IGxhbWJkYSB2YWw6IFN0ZFZlY3Rvckl0ZXJhdG9yUHJpbnRlcih2YWwpCisgICAgICAgIHByZXR0eV9wcmludGVyc19kaWN0W3JlLmNvbXBpbGUoJ15fX2dudV9jeHg6Ol9TbGlzdF9pdGVyYXRvcjwuKj4kJyldID0gbGFtYmRhIHZhbDogU3RkU2xpc3RJdGVyYXRvclByaW50ZXIodmFsKQorCisgICAgICAgICMgRGVidWcgKGNvbXBpbGVkIHdpdGggLURfR0xJQkNYWF9ERUJVRykgcHJpbnRlciByZWdpc3RyYXRpb25zLgorICAgICAgICAjIFRoZSBSYl90cmVlIGRlYnVnIGl0ZXJhdG9yIHdoZW4gdW53cmFwcGVkIGZyb20gdGhlIGVuY2Fwc3VsYXRpbmcgX19nbnVfZGVidWc6Ol9TYWZlX2l0ZXJhdG9yCisgICAgICAgICMgZG9lcyBub3QgaGF2ZSB0aGUgX19ub3JtIG5hbWVzcGFjZS4gSnVzdCB1c2UgdGhlIGV4aXN0aW5nIHByaW50ZXIgcmVnaXN0cmF0aW9uIGZvciB0aGF0LgorICAgICAgICBwcmV0dHlfcHJpbnRlcnNfZGljdFtyZS5jb21waWxlKCdeX19nbnVfZGVidWc6Ol9TYWZlX2l0ZXJhdG9yPC4qPiQnKV0gPSBsYW1iZGEgdmFsOiBTdGREZWJ1Z0l0ZXJhdG9yUHJpbnRlcih2YWwpCisgICAgICAgIHByZXR0eV9wcmludGVyc19kaWN0W3JlLmNvbXBpbGUoJ15zdGQ6Ol9fbm9ybTo6X0xpc3RfaXRlcmF0b3I8Lio+JCcpXSA9IGxhbWJkYSB2YWw6IFN0ZExpc3RJdGVyYXRvclByaW50ZXIgKCJzdGQ6Ol9fbm9ybTo6X0xpc3RfaXRlcmF0b3IiLHZhbCkKKyAgICAgICAgcHJldHR5X3ByaW50ZXJzX2RpY3RbcmUuY29tcGlsZSgnXnN0ZDo6X19ub3JtOjpfTGlzdF9jb25zdF9pdGVyYXRvcjwuKj4kJyldID0gbGFtYmRhIHZhbDogU3RkTGlzdEl0ZXJhdG9yUHJpbnRlciAoInN0ZDo6X19ub3JtOjpfTGlzdF9jb25zdF9pdGVyYXRvciIsdmFsKQorICAgICAgICBwcmV0dHlfcHJpbnRlcnNfZGljdFtyZS5jb21waWxlKCdec3RkOjpfX25vcm06Ol9EZXF1ZV9jb25zdF9pdGVyYXRvcjwuKj4kJyldID0gbGFtYmRhIHZhbDogU3RkRGVxdWVJdGVyYXRvclByaW50ZXIodmFsKQorICAgICAgICBwcmV0dHlfcHJpbnRlcnNfZGljdFtyZS5jb21waWxlKCdec3RkOjpfX25vcm06Ol9EZXF1ZV9pdGVyYXRvcjwuKj4kJyldID0gbGFtYmRhIHZhbDogU3RkRGVxdWVJdGVyYXRvclByaW50ZXIodmFsKQorCitwcmV0dHlfcHJpbnRlcnNfZGljdCA9IHt9CisKK2J1aWxkX2xpYnN0ZGN4eF9kaWN0aW9uYXJ5ICgpCmRpZmYgLS1naXQgYS9zaGFyZS9saWJ0b29sL2NvbmZpZy9jb21waWxlIGIvc2hhcmUvbGlidG9vbC9jb25maWcvY29tcGlsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMDA5NmE3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbGlidG9vbC9jb25maWcvY29tcGlsZQpAQCAtMCwwICsxLDE0MyBAQAorIyEgL2Jpbi9zaAorIyBXcmFwcGVyIGZvciBjb21waWxlcnMgd2hpY2ggZG8gbm90IHVuZGVyc3RhbmQgYC1jIC1vJy4KKworc2NyaXB0dmVyc2lvbj0yMDA5LTEwLTA2LjIwOyAjIFVUQworCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMywgMjAwNCwgMjAwNSwgMjAwOSAgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjIFdyaXR0ZW4gYnkgVG9tIFRyb21leSA8dHJvbWV5QGN5Z251cy5jb20+LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgVGhpcyBmaWxlIGlzIG1haW50YWluZWQgaW4gQXV0b21ha2UsIHBsZWFzZSByZXBvcnQKKyMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bworIyA8YXV0b21ha2UtcGF0Y2hlc0BnbnUub3JnPi4KKworY2FzZSAkMSBpbgorICAnJykKKyAgICAgZWNobyAiJDA6IE5vIGNvbW1hbmQuICBUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgorICAgICBleGl0IDE7CisgICAgIDs7CisgIC1oIHwgLS1oKikKKyAgICBjYXQgPDxcRU9GCitVc2FnZTogY29tcGlsZSBbLS1oZWxwXSBbLS12ZXJzaW9uXSBQUk9HUkFNIFtBUkdTXQorCitXcmFwcGVyIGZvciBjb21waWxlcnMgd2hpY2ggZG8gbm90IHVuZGVyc3RhbmQgYC1jIC1vJy4KK1JlbW92ZSBgLW8gZGVzdC5vJyBmcm9tIEFSR1MsIHJ1biBQUk9HUkFNIHdpdGggdGhlIHJlbWFpbmluZworYXJndW1lbnRzLCBhbmQgcmVuYW1lIHRoZSBvdXRwdXQgYXMgZXhwZWN0ZWQuCisKK0lmIHlvdSBhcmUgdHJ5aW5nIHRvIGJ1aWxkIGEgd2hvbGUgcGFja2FnZSB0aGlzIGlzIG5vdCB0aGUKK3JpZ2h0IHNjcmlwdCB0byBydW46IHBsZWFzZSBzdGFydCBieSByZWFkaW5nIHRoZSBmaWxlIGBJTlNUQUxMJy4KKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4KK0VPRgorICAgIGV4aXQgJD8KKyAgICA7OworICAtdiB8IC0tdiopCisgICAgZWNobyAiY29tcGlsZSAkc2NyaXB0dmVyc2lvbiIKKyAgICBleGl0ICQ/CisgICAgOzsKK2VzYWMKKworb2ZpbGU9CitjZmlsZT0KK2VhdD0KKworZm9yIGFyZworZG8KKyAgaWYgdGVzdCAtbiAiJGVhdCI7IHRoZW4KKyAgICBlYXQ9CisgIGVsc2UKKyAgICBjYXNlICQxIGluCisgICAgICAtbykKKwkjIGNvbmZpZ3VyZSBtaWdodCBjaG9vc2UgdG8gcnVuIGNvbXBpbGUgYXMgYGNvbXBpbGUgY2MgLW8gZm9vIGZvby5jJy4KKwkjIFNvIHdlIHN0cmlwIGAtbyBhcmcnIG9ubHkgaWYgYXJnIGlzIGFuIG9iamVjdC4KKwllYXQ9MQorCWNhc2UgJDIgaW4KKwkgICoubyB8ICoub2JqKQorCSAgICBvZmlsZT0kMgorCSAgICA7OworCSAgKikKKwkgICAgc2V0IHggIiRAIiAtbyAiJDIiCisJICAgIHNoaWZ0CisJICAgIDs7CisJZXNhYworCTs7CisgICAgICAqLmMpCisJY2ZpbGU9JDEKKwlzZXQgeCAiJEAiICIkMSIKKwlzaGlmdAorCTs7CisgICAgICAqKQorCXNldCB4ICIkQCIgIiQxIgorCXNoaWZ0CisJOzsKKyAgICBlc2FjCisgIGZpCisgIHNoaWZ0Citkb25lCisKK2lmIHRlc3QgLXogIiRvZmlsZSIgfHwgdGVzdCAteiAiJGNmaWxlIjsgdGhlbgorICAjIElmIG5vIGAtbycgb3B0aW9uIHdhcyBzZWVuIHRoZW4gd2UgbWlnaHQgaGF2ZSBiZWVuIGludm9rZWQgZnJvbSBhCisgICMgcGF0dGVybiBydWxlIHdoZXJlIHdlIGRvbid0IG5lZWQgb25lLiAgVGhhdCBpcyBvayAtLSB0aGlzIGlzIGEKKyAgIyBub3JtYWwgY29tcGlsYXRpb24gdGhhdCB0aGUgbG9zaW5nIGNvbXBpbGVyIGNhbiBoYW5kbGUuICBJZiBubworICAjIGAuYycgZmlsZSB3YXMgc2VlbiB0aGVuIHdlIGFyZSBwcm9iYWJseSBsaW5raW5nLiAgVGhhdCBpcyBhbHNvCisgICMgb2suCisgIGV4ZWMgIiRAIgorZmkKKworIyBOYW1lIG9mIGZpbGUgd2UgZXhwZWN0IGNvbXBpbGVyIHRvIGNyZWF0ZS4KK2NvZmlsZT1gZWNobyAiJGNmaWxlIiB8IHNlZCAnc3xeLipbXFwvXXx8OyBzfF5bYS16QS1aXTp8fDsgcy9cLmMkLy5vLydgCisKKyMgQ3JlYXRlIHRoZSBsb2NrIGRpcmVjdG9yeS4KKyMgTm90ZTogdXNlIGBbL1xcOi4tXScgaGVyZSB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCB1c2UgdGhlIHNhbWUgbmFtZQorIyB0aGF0IHdlIGFyZSB1c2luZyBmb3IgdGhlIC5vIGZpbGUuICBBbHNvLCBiYXNlIHRoZSBuYW1lIG9uIHRoZSBleHBlY3RlZAorIyBvYmplY3QgZmlsZSBuYW1lLCBzaW5jZSB0aGF0IGlzIHdoYXQgbWF0dGVycyB3aXRoIGEgcGFyYWxsZWwgYnVpbGQuCitsb2NrZGlyPWBlY2hvICIkY29maWxlIiB8IHNlZCAtZSAnc3xbL1xcOi4tXXxffGcnYC5kCit3aGlsZSB0cnVlOyBkbworICBpZiBta2RpciAiJGxvY2tkaXIiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGJyZWFrCisgIGZpCisgIHNsZWVwIDEKK2RvbmUKKyMgRklYTUU6IHJhY2UgY29uZGl0aW9uIGhlcmUgaWYgdXNlciBraWxscyBiZXR3ZWVuIG1rZGlyIGFuZCB0cmFwLgordHJhcCAicm1kaXIgJyRsb2NrZGlyJzsgZXhpdCAxIiAxIDIgMTUKKworIyBSdW4gdGhlIGNvbXBpbGUuCisiJEAiCityZXQ9JD8KKworaWYgdGVzdCAtZiAiJGNvZmlsZSI7IHRoZW4KKyAgdGVzdCAiJGNvZmlsZSIgPSAiJG9maWxlIiB8fCBtdiAiJGNvZmlsZSIgIiRvZmlsZSIKK2VsaWYgdGVzdCAtZiAiJHtjb2ZpbGV9YmoiOyB0aGVuCisgIHRlc3QgIiR7Y29maWxlfWJqIiA9ICIkb2ZpbGUiIHx8IG12ICIke2NvZmlsZX1iaiIgIiRvZmlsZSIKK2ZpCisKK3JtZGlyICIkbG9ja2RpciIKK2V4aXQgJHJldAorCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTogc2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOiAyCisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvc2hhcmUvbGlidG9vbC9jb25maWcvY29uZmlnLmd1ZXNzIGIvc2hhcmUvbGlidG9vbC9jb25maWcvY29uZmlnLmd1ZXNzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQwY2YwYWYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9saWJ0b29sL2NvbmZpZy9jb25maWcuZ3Vlc3MKQEAgLTAsMCArMSwxNTI3IEBACisjISAvYmluL3NoCisjIEF0dGVtcHQgdG8gZ3Vlc3MgYSBjYW5vbmljYWwgc3lzdGVtIG5hbWUuCisjICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorIyAgIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsCisjICAgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwordGltZXN0YW1wPScyMDExLTAyLTAyJworCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisjIDAyMTEwLTEzMDEsIFVTQS4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisKKyMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyLiAgUGxlYXNlIHNlbmQgcGF0Y2hlcyAoY29udGV4dAorIyBkaWZmIGZvcm1hdCkgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+IGFuZCBpbmNsdWRlIGEgQ2hhbmdlTG9nCisjIGVudHJ5LgorIworIyBUaGlzIHNjcmlwdCBhdHRlbXB0cyB0byBndWVzcyBhIGNhbm9uaWNhbCBzeXN0ZW0gbmFtZSBzaW1pbGFyIHRvCisjIGNvbmZpZy5zdWIuICBJZiBpdCBzdWNjZWVkcywgaXQgcHJpbnRzIHRoZSBzeXN0ZW0gbmFtZSBvbiBzdGRvdXQsIGFuZAorIyBleGl0cyB3aXRoIDAuICBPdGhlcndpc2UsIGl0IGV4aXRzIHdpdGggMS4KKyMKKyMgWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGZyb206CisjIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuZ3Vlc3M7aGI9SEVBRAorCittZT1gZWNobyAiJDAiIHwgc2VkIC1lICdzLC4qLywsJ2AKKwordXNhZ2U9IlwKK1VzYWdlOiAkMCBbT1BUSU9OXQorCitPdXRwdXQgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZSBvZiB0aGUgc3lzdGVtIFxgJG1lJyBpcyBydW4gb24uCisKK09wZXJhdGlvbiBtb2RlczoKKyAgLWgsIC0taGVscCAgICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC10LCAtLXRpbWUtc3RhbXAgICBwcmludCBkYXRlIG9mIGxhc3QgbW9kaWZpY2F0aW9uLCB0aGVuIGV4aXQKKyAgLXYsIC0tdmVyc2lvbiAgICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKworUmVwb3J0IGJ1Z3MgYW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiIKKwordmVyc2lvbj0iXAorR05VIGNvbmZpZy5ndWVzcyAoJHRpbWVzdGFtcCkKKworT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyLgorQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCisKK2hlbHA9IgorVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorCisjIFBhcnNlIGNvbW1hbmQgbGluZQord2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQorICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OworICAgIC0tdmVyc2lvbiB8IC12ICkKKyAgICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7CisgICAgLS0gKSAgICAgIyBTdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICAgc2hpZnQ7IGJyZWFrIDs7CisgICAgLSApCSMgVXNlIHN0ZGluIGFzIGlucHV0LgorICAgICAgIGJyZWFrIDs7CisgICAgLSogKQorICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIgPiYyCisgICAgICAgZXhpdCAxIDs7CisgICAgKiApCisgICAgICAgYnJlYWsgOzsKKyAgZXNhYworZG9uZQorCitpZiB0ZXN0ICQjICE9IDA7IHRoZW4KKyAgZWNobyAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCisgIGV4aXQgMQorZmkKKwordHJhcCAnZXhpdCAxJyAxIDIgMTUKKworIyBDQ19GT1JfQlVJTEQgLS0gY29tcGlsZXIgdXNlZCBieSB0aGlzIHNjcmlwdC4gTm90ZSB0aGF0IHRoZSB1c2Ugb2YgYQorIyBjb21waWxlciB0byBhaWQgaW4gc3lzdGVtIGRldGVjdGlvbiBpcyBkaXNjb3VyYWdlZCBhcyBpdCByZXF1aXJlcworIyB0ZW1wb3JhcnkgZmlsZXMgdG8gYmUgY3JlYXRlZCBhbmQsIGFzIHlvdSBjYW4gc2VlIGJlbG93LCBpdCBpcyBhCisjIGhlYWRhY2hlIHRvIGRlYWwgd2l0aCBpbiBhIHBvcnRhYmxlIGZhc2hpb24uCisKKyMgSGlzdG9yaWNhbGx5LCBgQ0NfRk9SX0JVSUxEJyB1c2VkIHRvIGJlIG5hbWVkIGBIT1NUX0NDJy4gV2Ugc3RpbGwKKyMgdXNlIGBIT1NUX0NDJyBpZiBkZWZpbmVkLCBidXQgaXQgaXMgZGVwcmVjYXRlZC4KKworIyBQb3J0YWJsZSB0bXAgZGlyZWN0b3J5IGNyZWF0aW9uIGluc3BpcmVkIGJ5IHRoZSBBdXRvY29uZiB0ZWFtLgorCitzZXRfY2NfZm9yX2J1aWxkPScKK3RyYXAgImV4aXRjb2RlPVwkPzsgKHJtIC1mIFwkdG1wZmlsZXMgMj4vZGV2L251bGw7IHJtZGlyIFwkdG1wIDI+L2Rldi9udWxsKSAmJiBleGl0IFwkZXhpdGNvZGUiIDAgOwordHJhcCAicm0gLWYgXCR0bXBmaWxlcyAyPi9kZXYvbnVsbDsgcm1kaXIgXCR0bXAgMj4vZGV2L251bGw7IGV4aXQgMSIgMSAyIDEzIDE1IDsKKzogJHtUTVBESVI9L3RtcH0gOworIHsgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiJFRNUERJUi9jZ1hYWFhYWCIpIDI+L2Rldi9udWxsYCAmJiB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIiA7IH0gfHwKKyB7IHRlc3QgLW4gIiRSQU5ET00iICYmIHRtcD0kVE1QRElSL2NnJCQtJFJBTkRPTSAmJiAodW1hc2sgMDc3ICYmIG1rZGlyICR0bXApIDsgfSB8fAorIHsgdG1wPSRUTVBESVIvY2ctJCQgJiYgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKSAmJiBlY2hvICJXYXJuaW5nOiBjcmVhdGluZyBpbnNlY3VyZSB0ZW1wIGRpcmVjdG9yeSIgPiYyIDsgfSB8fAorIHsgZWNobyAiJG1lOiBjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAkVE1QRElSIiA+JjIgOyBleGl0IDEgOyB9IDsKK2R1bW15PSR0bXAvZHVtbXkgOwordG1wZmlsZXM9IiRkdW1teS5jICRkdW1teS5vICRkdW1teS5yZWwgJGR1bW15IiA7CitjYXNlICRDQ19GT1JfQlVJTEQsJEhPU1RfQ0MsJENDIGluCisgLCwpICAgIGVjaG8gImludCB4OyIgPiAkZHVtbXkuYyA7CisJZm9yIGMgaW4gY2MgZ2NjIGM4OSBjOTkgOyBkbworCSAgaWYgKCRjIC1jIC1vICRkdW1teS5vICRkdW1teS5jKSA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJICAgICBDQ19GT1JfQlVJTEQ9IiRjIjsgYnJlYWsgOworCSAgZmkgOworCWRvbmUgOworCWlmIHRlc3QgeCIkQ0NfRk9SX0JVSUxEIiA9IHggOyB0aGVuCisJICBDQ19GT1JfQlVJTEQ9bm9fY29tcGlsZXJfZm91bmQgOworCWZpCisJOzsKKyAsLCopICAgQ0NfRk9SX0JVSUxEPSRDQyA7OworICwqLCopICBDQ19GT1JfQlVJTEQ9JEhPU1RfQ0MgOzsKK2VzYWMgOyBzZXRfY2NfZm9yX2J1aWxkPSA7JworCisjIFRoaXMgaXMgbmVlZGVkIHRvIGZpbmQgdW5hbWUgb24gYSBQeXJhbWlkIE9TeCB3aGVuIHJ1biBpbiB0aGUgQlNEIHVuaXZlcnNlLgorIyAoZ2hhemlAbm9jLnJ1dGdlcnMuZWR1IDE5OTQtMDgtMjQpCitpZiAodGVzdCAtZiAvLmF0dGJpbi91bmFtZSkgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCVBBVEg9JFBBVEg6Ly5hdHRiaW4gOyBleHBvcnQgUEFUSAorZmkKKworVU5BTUVfTUFDSElORT1gKHVuYW1lIC1tKSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfTUFDSElORT11bmtub3duCitVTkFNRV9SRUxFQVNFPWAodW5hbWUgLXIpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9SRUxFQVNFPXVua25vd24KK1VOQU1FX1NZU1RFTT1gKHVuYW1lIC1zKSAyPi9kZXYvbnVsbGAgIHx8IFVOQU1FX1NZU1RFTT11bmtub3duCitVTkFNRV9WRVJTSU9OPWAodW5hbWUgLXYpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9WRVJTSU9OPXVua25vd24KKworaWYgWyAiJHtVTkFNRV9TWVNURU19IiA9ICJMaW51eCIgXSA7IHRoZW4KKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJY2F0IDw8IEVPRiA+ICRkdW1teS5jCisJI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisJI2lmZGVmIF9fVUNMSUJDX18KKwkjIGlmZGVmIF9fVUNMSUJDX0NPTkZJR19WRVJTSU9OX18KKwlMSUJDPXVjbGliYyBfX1VDTElCQ19DT05GSUdfVkVSU0lPTl9fCisJIyBlbHNlCisJTElCQz11Y2xpYmMKKwkjIGVuZGlmCisJI2Vsc2UKKwlMSUJDPWdudQorCSNlbmRpZgorRU9GCisJZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgTElCQz0gfCBzZWQgLWUgJ3M6IDo6ZydgCitmaQorCisjIE5vdGU6IG9yZGVyIGlzIHNpZ25pZmljYW50IC0gdGhlIGNhc2UgYnJhbmNoZXMgYXJlIG5vdCBleGNsdXNpdmUuCisKK2Nhc2UgIiR7VU5BTUVfTUFDSElORX06JHtVTkFNRV9TWVNURU19OiR7VU5BTUVfUkVMRUFTRX06JHtVTkFNRV9WRVJTSU9OfSIgaW4KKyAgICAqOk5ldEJTRDoqOiopCisJIyBOZXRCU0QgKG5ic2QpIHRhcmdldHMgc2hvdWxkICh3aGVyZSBhcHBsaWNhYmxlKSBtYXRjaCBvbmUgb3IKKwkjIG1vcmUgb2YgdGhlIHR1cHBsZXM6ICotKi1uZXRic2RlbGYqLCAqLSotbmV0YnNkYW91dCosCisJIyAqLSotbmV0YnNkZWNvZmYqIGFuZCAqLSotbmV0YnNkKi4gIEZvciB0YXJnZXRzIHRoYXQgcmVjZW50bHkKKwkjIHN3aXRjaGVkIHRvIEVMRiwgKi0qLW5ldGJzZCogd291bGQgc2VsZWN0IHRoZSBvbGQKKwkjIG9iamVjdCBmaWxlIGZvcm1hdC4gIFRoaXMgcHJvdmlkZXMgYm90aCBmb3J3YXJkCisJIyBjb21wYXRpYmlsaXR5IGFuZCBhIGNvbnNpc3RlbnQgbWVjaGFuaXNtIGZvciBzZWxlY3RpbmcgdGhlCisJIyBvYmplY3QgZmlsZSBmb3JtYXQuCisJIworCSMgTm90ZTogTmV0QlNEIGRvZXNuJ3QgcGFydGljdWxhcmx5IGNhcmUgYWJvdXQgdGhlIHZlbmRvcgorCSMgcG9ydGlvbiBvZiB0aGUgbmFtZS4gIFdlIGFsd2F5cyBzZXQgaXQgdG8gInVua25vd24iLgorCXN5c2N0bD0ic3lzY3RsIC1uIGh3Lm1hY2hpbmVfYXJjaCIKKwlVTkFNRV9NQUNISU5FX0FSQ0g9YCgvc2Jpbi8kc3lzY3RsIDI+L2Rldi9udWxsIHx8IFwKKwkgICAgL3Vzci9zYmluLyRzeXNjdGwgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duKWAKKwljYXNlICIke1VOQU1FX01BQ0hJTkVfQVJDSH0iIGluCisJICAgIGFybWViKSBtYWNoaW5lPWFybWViLXVua25vd24gOzsKKwkgICAgYXJtKikgbWFjaGluZT1hcm0tdW5rbm93biA7OworCSAgICBzaDNlbCkgbWFjaGluZT1zaGwtdW5rbm93biA7OworCSAgICBzaDNlYikgbWFjaGluZT1zaC11bmtub3duIDs7CisJICAgIHNoNWVsKSBtYWNoaW5lPXNoNWxlLXVua25vd24gOzsKKwkgICAgKikgbWFjaGluZT0ke1VOQU1FX01BQ0hJTkVfQVJDSH0tdW5rbm93biA7OworCWVzYWMKKwkjIFRoZSBPcGVyYXRpbmcgU3lzdGVtIGluY2x1ZGluZyBvYmplY3QgZm9ybWF0LCBpZiBpdCBoYXMgc3dpdGNoZWQKKwkjIHRvIEVMRiByZWNlbnRseSwgb3Igd2lsbCBpbiB0aGUgZnV0dXJlLgorCWNhc2UgIiR7VU5BTUVfTUFDSElORV9BUkNIfSIgaW4KKwkgICAgYXJtKnxpMzg2fG02OGt8bnMzMmt8c2gzKnxzcGFyY3x2YXgpCisJCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJaWYgZWNobyBfX0VMRl9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKKwkJCXwgZ3JlcCAtcSBfX0VMRl9fCisJCXRoZW4KKwkJICAgICMgT25jZSBhbGwgdXRpbGl0aWVzIGNhbiBiZSBFQ09GRiAobmV0YnNkZWNvZmYpIG9yIGEub3V0IChuZXRic2Rhb3V0KS4KKwkJICAgICMgUmV0dXJuIG5ldGJzZCBmb3IgZWl0aGVyLiAgRklYPworCQkgICAgb3M9bmV0YnNkCisJCWVsc2UKKwkJICAgIG9zPW5ldGJzZGVsZgorCQlmaQorCQk7OworCSAgICAqKQorCQlvcz1uZXRic2QKKwkJOzsKKwllc2FjCisJIyBUaGUgT1MgcmVsZWFzZQorCSMgRGViaWFuIEdOVS9OZXRCU0QgbWFjaGluZXMgaGF2ZSBhIGRpZmZlcmVudCB1c2VybGFuZCwgYW5kCisJIyB0aHVzLCBuZWVkIGEgZGlzdGluY3QgdHJpcGxldC4gSG93ZXZlciwgdGhleSBkbyBub3QgbmVlZAorCSMga2VybmVsIHZlcnNpb24gaW5mb3JtYXRpb24sIHNvIGl0IGNhbiBiZSByZXBsYWNlZCB3aXRoIGEKKwkjIHN1aXRhYmxlIHRhZywgaW4gdGhlIHN0eWxlIG9mIGxpbnV4LWdudS4KKwljYXNlICIke1VOQU1FX1ZFUlNJT059IiBpbgorCSAgICBEZWJpYW4qKQorCQlyZWxlYXNlPSctZ251JworCQk7OworCSAgICAqKQorCQlyZWxlYXNlPWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stX10uKi9cLi8nYAorCQk7OworCWVzYWMKKwkjIFNpbmNlIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTToKKwkjIGNvbnRhaW5zIHJlZHVuZGFudCBpbmZvcm1hdGlvbiwgdGhlIHNob3J0ZXIgZm9ybToKKwkjIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNIGlzIHVzZWQuCisJZWNobyAiJHttYWNoaW5lfS0ke29zfSR7cmVsZWFzZX0iCisJZXhpdCA7OworICAgICo6T3BlbkJTRDoqOiopCisJVU5BTUVfTUFDSElORV9BUkNIPWBhcmNoIHwgc2VkICdzL09wZW5CU0QuLy8nYAorCWVjaG8gJHtVTkFNRV9NQUNISU5FX0FSQ0h9LXVua25vd24tb3BlbmJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpla2tvQlNEOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1la2tvYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlNvbGlkQlNEOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zb2xpZGJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWFjcHBjOk1pckJTRDoqOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbWlyYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOk1pckJTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbWlyYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBhbHBoYTpPU0YxOio6KikKKwljYXNlICRVTkFNRV9SRUxFQVNFIGluCisJKjQuMCkKKwkJVU5BTUVfUkVMRUFTRT1gL3Vzci9zYmluL3NpemVyIC12IHwgYXdrICd7cHJpbnQgJDN9J2AKKwkJOzsKKwkqNS4qKQorCQlVTkFNRV9SRUxFQVNFPWAvdXNyL3NiaW4vc2l6ZXIgLXYgfCBhd2sgJ3twcmludCAkNH0nYAorCQk7OworCWVzYWMKKwkjIEFjY29yZGluZyB0byBDb21wYXEsIC91c3Ivc2Jpbi9wc3JpbmZvIGhhcyBiZWVuIGF2YWlsYWJsZSBvbgorCSMgT1NGLzEgYW5kIFRydTY0IHN5c3RlbXMgcHJvZHVjZWQgc2luY2UgMTk5NS4gIEkgaG9wZSB0aGF0CisJIyBjb3ZlcnMgbW9zdCBzeXN0ZW1zIHJ1bm5pbmcgdG9kYXkuICBUaGlzIGNvZGUgcGlwZXMgdGhlIENQVQorCSMgdHlwZXMgdGhyb3VnaCBoZWFkIC1uIDEsIHNvIHdlIG9ubHkgZGV0ZWN0IHRoZSB0eXBlIG9mIENQVSAwLgorCUFMUEhBX0NQVV9UWVBFPWAvdXNyL3NiaW4vcHNyaW5mbyAtdiB8IHNlZCAtbiAtZSAncy9eICBUaGUgYWxwaGEgXCguKlwpIHByb2Nlc3Nvci4qJC9cMS9wJyB8IGhlYWQgLW4gMWAKKwljYXNlICIkQUxQSEFfQ1BVX1RZUEUiIGluCisJICAgICJFVjQgKDIxMDY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiRVY0LjUgKDIxMDY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiTENBNCAoMjEwNjYvMjEwNjgpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGEiIDs7CisJICAgICJFVjUgKDIxMTY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY1IiA7OworCSAgICAiRVY1LjYgKDIxMTY0QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NTYiIDs7CisJICAgICJFVjUuNiAoMjExNjRQQykiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYXBjYTU2IiA7OworCSAgICAiRVY1LjcgKDIxMTY0UEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFwY2E1NyIgOzsKKwkgICAgIkVWNiAoMjEyNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjYiIDs7CisJICAgICJFVjYuNyAoMjEyNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2NyIgOzsKKwkgICAgIkVWNi44Q0IgKDIxMjY0QykiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiIDs7CisJICAgICJFVjYuOEFMICgyMTI2NEIpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY4IiA7OworCSAgICAiRVY2LjhDWCAoMjEyNjREKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OCIgOzsKKwkgICAgIkVWNi45QSAoMjEyNjQvRVY2OUEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY5IiA7OworCSAgICAiRVY3ICgyMTM2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NyIgOzsKKwkgICAgIkVWNy45ICgyMTM2NEEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjc5IiA7OworCWVzYWMKKwkjIEEgUG4ubiB2ZXJzaW9uIGlzIGEgcGF0Y2hlZCB2ZXJzaW9uLgorCSMgQSBWbi5uIHZlcnNpb24gaXMgYSByZWxlYXNlZCB2ZXJzaW9uLgorCSMgQSBUbi5uIHZlcnNpb24gaXMgYSByZWxlYXNlZCBmaWVsZCB0ZXN0IHZlcnNpb24uCisJIyBBIFhuLm4gdmVyc2lvbiBpcyBhbiB1bnJlbGVhc2VkIGV4cGVyaW1lbnRhbCBiYXNlbGV2ZWwuCisJIyAxLjIgdXNlcyAiMS4yIiBmb3IgdW5hbWUgLXIuCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWRlYy1vc2ZgZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL15bUFZUWF0vLycgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidgCisJIyBSZXNldCBFWElUIHRyYXAgYmVmb3JlIGV4aXRpbmcgdG8gYXZvaWQgc3B1cmlvdXMgbm9uLXplcm8gZXhpdCBjb2RlLgorCWV4aXRjb2RlPSQ/CisJdHJhcCAnJyAwCisJZXhpdCAkZXhpdGNvZGUgOzsKKyAgICBBbHBoYVwgKjpXaW5kb3dzX05UKjoqKQorCSMgSG93IGRvIHdlIGtub3cgaXQncyBJbnRlcml4IHJhdGhlciB0aGFuIHRoZSBnZW5lcmljIFBPU0lYIHN1YnN5c3RlbT8KKwkjIFNob3VsZCB3ZSBjaGFuZ2UgVU5BTUVfTUFDSElORSBiYXNlZCBvbiB0aGUgb3V0cHV0IG9mIHVuYW1lIGluc3RlYWQKKwkjIG9mIHRoZSBzcGVjaWZpYyBBbHBoYSBtb2RlbD8KKwllY2hvIGFscGhhLXBjLWludGVyaXgKKwlleGl0IDs7CisgICAgMjEwNjQ6V2luZG93c19OVDo1MDozKQorCWVjaG8gYWxwaGEtZGVjLXdpbm50My41CisJZXhpdCA7OworICAgIEFtaWdhKjpVTklYX1N5c3RlbV9WOjQuMDoqKQorCWVjaG8gbTY4ay11bmtub3duLXN5c3Y0CisJZXhpdCA7OworICAgICo6W0FhXW1pZ2FbT29dW1NzXToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYW1pZ2FvcworCWV4aXQgOzsKKyAgICAqOltNbV1vcnBoW09vXVtTc106KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW1vcnBob3MKKwlleGl0IDs7CisgICAgKjpPUy8zOTA6KjoqKQorCWVjaG8gaTM3MC1pYm0tb3BlbmVkaXRpb24KKwlleGl0IDs7CisgICAgKjp6L1ZNOio6KikKKwllY2hvIHMzOTAtaWJtLXp2bW9lCisJZXhpdCA7OworICAgICo6T1M0MDA6KjoqKQorCWVjaG8gcG93ZXJwYy1pYm0tb3M0MDAKKwlleGl0IDs7CisgICAgYXJtOlJJU0MqOjEuWzAxMl0qOip8YXJtOnJpc2NpeDoxLlswMTJdKjoqKQorCWVjaG8gYXJtLWFjb3JuLXJpc2NpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgYXJtOnJpc2NvczoqOip8YXJtOlJJU0NPUzoqOiopCisJZWNobyBhcm0tdW5rbm93bi1yaXNjb3MKKwlleGl0IDs7CisgICAgU1IyPzAxOkhJLVVYL01QUDoqOiogfCBTUjgwMDA6SEktVVgvTVBQOio6KikKKwllY2hvIGhwcGExLjEtaGl0YWNoaS1oaXV4bXBwCisJZXhpdCA7OworICAgIFB5cmFtaWQqOk9TeCo6KjoqIHwgTUlTKjpPU3gqOio6KiB8IE1JUyo6U01QX0RDLU9TeCo6KjoqKQorCSMgYWtlZUB3cGRpczAzLndwYWZiLmFmLm1pbCAoRWFybGUgRi4gQWtlKSBjb250cmlidXRlZCBNSVMgYW5kIE5JTEUuCisJaWYgdGVzdCAiYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbGAiID0gYXR0IDsgdGhlbgorCQllY2hvIHB5cmFtaWQtcHlyYW1pZC1zeXN2MworCWVsc2UKKwkJZWNobyBweXJhbWlkLXB5cmFtaWQtYnNkCisJZmkKKwlleGl0IDs7CisgICAgTklMRSo6KjoqOmRjb3N4KQorCWVjaG8gcHlyYW1pZC1weXJhbWlkLXN2cjQKKwlleGl0IDs7CisgICAgRFJTPzYwMDA6dW5peDo0LjA6NiopCisJZWNobyBzcGFyYy1pY2wtbng2CisJZXhpdCA7OworICAgIERSUz82MDAwOlVOSVhfU1Y6NC4yKjo3KiB8IERSUz82MDAwOmlzaXM6NC4yKjo3KikKKwljYXNlIGAvdXNyL2Jpbi91bmFtZSAtcGAgaW4KKwkgICAgc3BhcmMpIGVjaG8gc3BhcmMtaWNsLW54NzsgZXhpdCA7OworCWVzYWMgOzsKKyAgICBzMzkweDpTdW5PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40SDpTdW5PUzo1Lio6KikKKwllY2hvIHNwYXJjLWhhbC1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzo1Lio6KiB8IHRhZHBvbGUqOlN1bk9TOjUuKjoqKQorCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIGk4NnBjOkF1cm9yYVVYOjUuKjoqIHwgaTg2eGVuOkF1cm9yYVVYOjUuKjoqKQorCWVjaG8gaTM4Ni1wYy1hdXJvcmF1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgaTg2cGM6U3VuT1M6NS4qOiogfCBpODZ4ZW46U3VuT1M6NS4qOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCVNVTl9BUkNIPSJpMzg2IgorCSMgSWYgdGhlcmUgaXMgYSBjb21waWxlciwgc2VlIGlmIGl0IGlzIGNvbmZpZ3VyZWQgZm9yIDY0LWJpdCBvYmplY3RzLgorCSMgTm90ZSB0aGF0IHRoZSBTdW4gY2MgZG9lcyBub3QgdHVybiBfX0xQNjRfXyBpbnRvIDEgbGlrZSBnY2MgZG9lcy4KKwkjIFRoaXMgdGVzdCB3b3JrcyBmb3IgYm90aCBjb21waWxlcnMuCisJaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCisJICAgIGlmIChlY2hvICcjaWZkZWYgX19hbWQ2NCc7IGVjaG8gSVNfNjRCSVRfQVJDSDsgZWNobyAnI2VuZGlmJykgfCBcCisJCShDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCisJCWdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJICAgIHRoZW4KKwkJU1VOX0FSQ0g9Ing4Nl82NCIKKwkgICAgZmkKKwlmaQorCWVjaG8gJHtTVU5fQVJDSH0tcGMtc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgc3VuNCo6U3VuT1M6Nio6KikKKwkjIEFjY29yZGluZyB0byBjb25maWcuc3ViLCB0aGlzIGlzIHRoZSBwcm9wZXIgd2F5IHRvIGNhbm9uaWNhbGl6ZQorCSMgU3VuT1M2LiAgSGFyZCB0byBndWVzcyBleGFjdGx5IHdoYXQgU3VuT1M2IHdpbGwgYmUgbGlrZSwgYnV0CisJIyBpdCdzIGxpa2VseSB0byBiZSBtb3JlIGxpa2UgU29sYXJpcyB0aGFuIFN1bk9TNC4KKwllY2hvIHNwYXJjLXN1bi1zb2xhcmlzM2BlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzoqOiopCisJY2FzZSAiYC91c3IvYmluL2FyY2ggLWtgIiBpbgorCSAgICBTZXJpZXMqfFM0KikKKwkJVU5BTUVfUkVMRUFTRT1gdW5hbWUgLXZgCisJCTs7CisJZXNhYworCSMgSmFwYW5lc2UgTGFuZ3VhZ2UgdmVyc2lvbnMgaGF2ZSBhIHZlcnNpb24gbnVtYmVyIGxpa2UgYDQuMS4zLUpMJy4KKwllY2hvIHNwYXJjLXN1bi1zdW5vc2BlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLy0vXy8nYAorCWV4aXQgOzsKKyAgICBzdW4zKjpTdW5PUzoqOiopCisJZWNobyBtNjhrLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgc3VuKjoqOjQuMkJTRDoqKQorCVVOQU1FX1JFTEVBU0U9YChzZWQgMXEgL2V0Yy9tb3RkIHwgYXdrICd7cHJpbnQgc3Vic3RyKCQ1LDEsMyl9JykgMj4vZGV2L251bGxgCisJdGVzdCAieCR7VU5BTUVfUkVMRUFTRX0iID0gIngiICYmIFVOQU1FX1JFTEVBU0U9MworCWNhc2UgImAvYmluL2FyY2hgIiBpbgorCSAgICBzdW4zKQorCQllY2hvIG02OGstc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCQk7OworCSAgICBzdW40KQorCQllY2hvIHNwYXJjLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwkJOzsKKwllc2FjCisJZXhpdCA7OworICAgIGF1c2hwOlN1bk9TOio6KikKKwllY2hvIHNwYXJjLWF1c3BleC1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgIyBUaGUgc2l0dWF0aW9uIGZvciBNaU5UIGlzIGEgbGl0dGxlIGNvbmZ1c2luZy4gIFRoZSBtYWNoaW5lIG5hbWUKKyAgICAjIGNhbiBiZSB2aXJ0dWFsbHkgZXZlcnl0aGluZyAoZXZlcnl0aGluZyB3aGljaCBpcyBub3QKKyAgICAjICJhdGFyaXN0IiBvciAiYXRhcmlzdGUiIGF0IGxlYXN0IHNob3VsZCBoYXZlIGEgcHJvY2Vzc29yCisgICAgIyA+IG02ODAwMCkuICBUaGUgc3lzdGVtIG5hbWUgcmFuZ2VzIGZyb20gIk1pTlQiIG92ZXIgIkZyZWVNaU5UIgorICAgICMgdG8gdGhlIGxvd2VyY2FzZSB2ZXJzaW9uICJtaW50IiAob3IgImZyZWVtaW50IikuICBGaW5hbGx5CisgICAgIyB0aGUgc3lzdGVtIG5hbWUgIlRPUyIgZGVub3RlcyBhIHN5c3RlbSB3aGljaCBpcyBhY3R1YWxseSBub3QKKyAgICAjIE1pTlQuICBCdXQgTWlOVCBpcyBkb3dud2FyZCBjb21wYXRpYmxlIHRvIFRPUywgc28gdGhpcyBzaG91bGQKKyAgICAjIGJlIG5vIHByb2JsZW0uCisgICAgYXRhcmlzdFtlXToqTWlOVDoqOiogfCBhdGFyaXN0W2VdOiptaW50Oio6KiB8IGF0YXJpc3RbZV06KlRPUzoqOiopCisJZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGF0YXJpKjoqTWlOVDoqOiogfCBhdGFyaSo6Km1pbnQ6KjoqIHwgYXRhcmlzdFtlXToqVE9TOio6KikKKwllY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKmZhbGNvbio6Kk1pTlQ6KjoqIHwgKmZhbGNvbio6Km1pbnQ6KjoqIHwgKmZhbGNvbio6KlRPUzoqOiopCisJZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1pbGFuKjoqTWlOVDoqOiogfCBtaWxhbio6Km1pbnQ6KjoqIHwgKm1pbGFuKjoqVE9TOio6KikKKwllY2hvIG02OGstbWlsYW4tbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgaGFkZXMqOipNaU5UOio6KiB8IGhhZGVzKjoqbWludDoqOiogfCAqaGFkZXMqOipUT1M6KjoqKQorCWVjaG8gbTY4ay1oYWRlcy1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOipNaU5UOio6KiB8ICo6Km1pbnQ6KjoqIHwgKjoqVE9TOio6KikKKwllY2hvIG02OGstdW5rbm93bi1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtNjhrOm1hY2h0ZW46KjoqKQorCWVjaG8gbTY4ay1hcHBsZS1tYWNodGVuJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBwb3dlcnBjOm1hY2h0ZW46KjoqKQorCWVjaG8gcG93ZXJwYy1hcHBsZS1tYWNodGVuJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBSSVNDKjpNYWNoOio6KikKKwllY2hvIG1pcHMtZGVjLW1hY2hfYnNkNC4zCisJZXhpdCA7OworICAgIFJJU0MqOlVMVFJJWDoqOiopCisJZWNobyBtaXBzLWRlYy11bHRyaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFZBWCo6VUxUUklYKjoqOiopCisJZWNobyB2YXgtZGVjLXVsdHJpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgMjAyMDpDTElYOio6KiB8IDI0MzA6Q0xJWDoqOiopCisJZWNobyBjbGlwcGVyLWludGVyZ3JhcGgtY2xpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWlwczoqOio6VU1JUFMgfCBtaXBzOio6KjpSSVNDb3MpCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisjaWZkZWYgX19jcGx1c3BsdXMKKyNpbmNsdWRlIDxzdGRpby5oPiAgLyogZm9yIHByaW50ZigpIHByb3RvdHlwZSAqLworCWludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisjZWxzZQorCWludCBtYWluIChhcmdjLCBhcmd2KSBpbnQgYXJnYzsgY2hhciAqYXJndltdOyB7CisjZW5kaWYKKwkjaWYgZGVmaW5lZCAoaG9zdF9taXBzKSAmJiBkZWZpbmVkIChNSVBTRUIpCisJI2lmIGRlZmluZWQgKFNZU1RZUEVfU1lTVikKKwkgIHByaW50ZiAoIm1pcHMtbWlwcy1yaXNjb3Mlc3N5c3ZcbiIsIGFyZ3ZbMV0pOyBleGl0ICgwKTsKKwkjZW5kaWYKKwkjaWYgZGVmaW5lZCAoU1lTVFlQRV9TVlI0KQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzc3ZyNFxuIiwgYXJndlsxXSk7IGV4aXQgKDApOworCSNlbmRpZgorCSNpZiBkZWZpbmVkIChTWVNUWVBFX0JTRDQzKSB8fCBkZWZpbmVkKFNZU1RZUEVfQlNEKQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzYnNkXG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7CisJI2VuZGlmCisJI2VuZGlmCisJICBleGl0ICgtMSk7CisJfQorRU9GCisJJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYKKwkgIGR1bW15YXJnPWBlY2hvICIke1VOQU1FX1JFTEVBU0V9IiB8IHNlZCAtbiAncy9cKFswLTldKlwpLiovXDEvcCdgICYmCisJICBTWVNURU1fTkFNRT1gJGR1bW15ICRkdW1teWFyZ2AgJiYKKwkgICAgeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CisJZWNobyBtaXBzLW1pcHMtcmlzY29zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBNb3Rvcm9sYTpQb3dlck1BWF9PUzoqOiopCisJZWNobyBwb3dlcnBjLW1vdG9yb2xhLXBvd2VybWF4CisJZXhpdCA7OworICAgIE1vdG9yb2xhOio6NC4zOlBMOC0qKQorCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJtYXgKKwlleGl0IDs7CisgICAgTmlnaHRfSGF3azoqOio6UG93ZXJNQVhfT1MgfCBTeW5lcmd5OlBvd2VyTUFYX09TOio6KikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VybWF4CisJZXhpdCA7OworICAgIE5pZ2h0X0hhd2s6UG93ZXJfVU5JWDoqOiopCisJZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcnVuaXgKKwlleGl0IDs7CisgICAgbTg4azpDWC9VWDo3KjoqKQorCWVjaG8gbTg4ay1oYXJyaXMtY3h1eDcKKwlleGl0IDs7CisgICAgbTg4azoqOjQqOlI0KikKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjQKKwlleGl0IDs7CisgICAgbTg4azoqOjMqOlIzKikKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKKwlleGl0IDs7CisgICAgQVZpaU9OOmRndXg6KjoqKQorCSMgREcvVVggcmV0dXJucyBBVmlpT04gZm9yIGFsbCBhcmNoaXRlY3R1cmVzCisJVU5BTUVfUFJPQ0VTU09SPWAvdXNyL2Jpbi91bmFtZSAtcGAKKwlpZiBbICRVTkFNRV9QUk9DRVNTT1IgPSBtYzg4MTAwIF0gfHwgWyAkVU5BTUVfUFJPQ0VTU09SID0gbWM4ODExMCBdCisJdGhlbgorCSAgICBpZiBbICR7VEFSR0VUX0JJTkFSWV9JTlRFUkZBQ0V9eCA9IG04OGtkZ3V4ZWxmeCBdIHx8IFwKKwkgICAgICAgWyAke1RBUkdFVF9CSU5BUllfSU5URVJGQUNFfXggPSB4IF0KKwkgICAgdGhlbgorCQllY2hvIG04OGstZGctZGd1eCR7VU5BTUVfUkVMRUFTRX0KKwkgICAgZWxzZQorCQllY2hvIG04OGstZGctZGd1eGJjcyR7VU5BTUVfUkVMRUFTRX0KKwkgICAgZmkKKwllbHNlCisJICAgIGVjaG8gaTU4Ni1kZy1kZ3V4JHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZXhpdCA7OworICAgIE04OCo6RG9scGhpbk9TOio6KikJIyBEb2xwaGluT1MgKFNWUjMpCisJZWNobyBtODhrLWRvbHBoaW4tc3lzdjMKKwlleGl0IDs7CisgICAgTTg4KjoqOlIzKjoqKQorCSMgRGVsdGEgODhrIHN5c3RlbSBydW5uaW5nIFNWUjMKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKKwlleGl0IDs7CisgICAgWEQ4OCo6KjoqOiopICMgVGVrdHJvbml4IFhEODggc3lzdGVtIHJ1bm5pbmcgVVRla1YgKFNWUjMpCisJZWNobyBtODhrLXRla3Ryb25peC1zeXN2MworCWV4aXQgOzsKKyAgICBUZWs0M1swLTldWzAtOV06VVRlazoqOiopICMgVGVrdHJvbml4IDQzMDAgc3lzdGVtIHJ1bm5pbmcgVVRlayAoQlNEKQorCWVjaG8gbTY4ay10ZWt0cm9uaXgtYnNkCisJZXhpdCA7OworICAgICo6SVJJWCo6KjoqKQorCWVjaG8gbWlwcy1zZ2ktaXJpeGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLy0vXy9nJ2AKKwlleGl0IDs7CisgICAgPz8/Pz8/Pz86QUlYPzpbMTJdLjE6MikgICAjIEFJWCAyLjIuMSBvciBBSVggMi4xLjEgaXMgUlQvUEMgQUlYLgorCWVjaG8gcm9tcC1pYm0tYWl4ICAgICAjIHVuYW1lIC1tIGdpdmVzIGFuIDggaGV4LWNvZGUgQ1BVIGlkCisJZXhpdCA7OyAgICAgICAgICAgICAgICMgTm90ZSB0aGF0OiBlY2hvICInYHVuYW1lIC1zYCciIGdpdmVzICdBSVggJworICAgIGkqODY6QUlYOio6KikKKwllY2hvIGkzODYtaWJtLWFpeAorCWV4aXQgOzsKKyAgICBpYTY0OkFJWDoqOiopCisJaWYgWyAteCAvdXNyL2Jpbi9vc2xldmVsIF0gOyB0aGVuCisJCUlCTV9SRVY9YC91c3IvYmluL29zbGV2ZWxgCisJZWxzZQorCQlJQk1fUkVWPSR7VU5BTUVfVkVSU0lPTn0uJHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1haXgke0lCTV9SRVZ9CisJZXhpdCA7OworICAgICo6QUlYOjI6MykKKwlpZiBncmVwIGJvczMyNSAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQlzZWQgJ3MvXgkJLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkJI2luY2x1ZGUgPHN5cy9zeXN0ZW1jZmcuaD4KKworCQltYWluKCkKKwkJCXsKKwkJCWlmICghX19wb3dlcl9wYygpKQorCQkJCWV4aXQoMSk7CisJCQlwdXRzKCJwb3dlcnBjLWlibS1haXgzLjIuNSIpOworCQkJZXhpdCgwKTsKKwkJCX0KK0VPRgorCQlpZiAkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJiBTWVNURU1fTkFNRT1gJGR1bW15YAorCQl0aGVuCisJCQllY2hvICIkU1lTVEVNX05BTUUiCisJCWVsc2UKKwkJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIuNQorCQlmaQorCWVsaWYgZ3JlcCBib3MzMjQgL3Vzci9pbmNsdWRlL3N0ZGlvLmggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIuNAorCWVsc2UKKwkJZWNobyByczYwMDAtaWJtLWFpeDMuMgorCWZpCisJZXhpdCA7OworICAgICo6QUlYOio6WzQ1NjddKQorCUlCTV9DUFVfSUQ9YC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIHwgc2VkIDFxIHwgYXdrICd7IHByaW50ICQxIH0nYAorCWlmIC91c3Ivc2Jpbi9sc2F0dHIgLUVsICR7SUJNX0NQVV9JRH0gfCBncmVwICcgUE9XRVInID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlJQk1fQVJDSD1yczYwMDAKKwllbHNlCisJCUlCTV9BUkNIPXBvd2VycGMKKwlmaQorCWlmIFsgLXggL3Vzci9iaW4vb3NsZXZlbCBdIDsgdGhlbgorCQlJQk1fUkVWPWAvdXNyL2Jpbi9vc2xldmVsYAorCWVsc2UKKwkJSUJNX1JFVj0ke1VOQU1FX1ZFUlNJT059LiR7VU5BTUVfUkVMRUFTRX0KKwlmaQorCWVjaG8gJHtJQk1fQVJDSH0taWJtLWFpeCR7SUJNX1JFVn0KKwlleGl0IDs7CisgICAgKjpBSVg6KjoqKQorCWVjaG8gcnM2MDAwLWlibS1haXgKKwlleGl0IDs7CisgICAgaWJtcnQ6NC40QlNEOip8cm9tcC1pYm06QlNEOiopCisJZWNobyByb21wLWlibS1ic2Q0LjQKKwlleGl0IDs7CisgICAgaWJtcnQ6KkJTRDoqfHJvbXAtaWJtOkJTRDoqKSAgICAgICAgICAgICMgY292ZXJzIFJUL1BDIEJTRCBhbmQKKwllY2hvIHJvbXAtaWJtLWJzZCR7VU5BTUVfUkVMRUFTRX0gICAjIDQuMyB3aXRoIHVuYW1lIGFkZGVkIHRvCisJZXhpdCA7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXBvcnQ6IHJvbXAtaWJtIEJTRCA0LjMKKyAgICAqOkJPU1g6KjoqKQorCWVjaG8gcnM2MDAwLWJ1bGwtYm9zeAorCWV4aXQgOzsKKyAgICBEUFgvMj8wMDpCLk8uUy46KjoqKQorCWVjaG8gbTY4ay1idWxsLXN5c3YzCisJZXhpdCA7OworICAgIDkwMDAvWzM0XT8/OjQuM2JzZDoxLio6KikKKwllY2hvIG02OGstaHAtYnNkCisJZXhpdCA7OworICAgIGhwMzAwOjQuNEJTRDoqOiogfCA5MDAwL1szNF0/Pzo0LjNic2Q6Mi4qOiopCisJZWNobyBtNjhrLWhwLWJzZDQuNAorCWV4aXQgOzsKKyAgICA5MDAwL1szNDY3OF0/PzpIUC1VWDoqOiopCisJSFBVWF9SRVY9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSouWzBCXSovLydgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FfSIgaW4KKwkgICAgOTAwMC8zMT8gKSAgICAgICAgICAgIEhQX0FSQ0g9bTY4MDAwIDs7CisJICAgIDkwMDAvWzM0XT8/ICkgICAgICAgICBIUF9BUkNIPW02OGsgOzsKKwkgICAgOTAwMC9bNjc4XVswLTldWzAtOV0pCisJCWlmIFsgLXggL3Vzci9iaW4vZ2V0Y29uZiBdOyB0aGVuCisJCSAgICBzY19jcHVfdmVyc2lvbj1gL3Vzci9iaW4vZ2V0Y29uZiBTQ19DUFVfVkVSU0lPTiAyPi9kZXYvbnVsbGAKKwkJICAgIHNjX2tlcm5lbF9iaXRzPWAvdXNyL2Jpbi9nZXRjb25mIFNDX0tFUk5FTF9CSVRTIDI+L2Rldi9udWxsYAorCQkgICAgY2FzZSAiJHtzY19jcHVfdmVyc2lvbn0iIGluCisJCSAgICAgIDUyMykgSFBfQVJDSD0iaHBwYTEuMCIgOzsgIyBDUFVfUEFfUklTQzFfMAorCQkgICAgICA1MjgpIEhQX0FSQ0g9ImhwcGExLjEiIDs7ICMgQ1BVX1BBX1JJU0MxXzEKKwkJICAgICAgNTMyKSAgICAgICAgICAgICAgICAgICAgICAjIENQVV9QQV9SSVNDMl8wCisJCQljYXNlICIke3NjX2tlcm5lbF9iaXRzfSIgaW4KKwkJCSAgMzIpIEhQX0FSQ0g9ImhwcGEyLjBuIiA7OworCQkJICA2NCkgSFBfQVJDSD0iaHBwYTIuMHciIDs7CisJCQkgICcnKSBIUF9BUkNIPSJocHBhMi4wIiA7OyAgICMgSFAtVVggMTAuMjAKKwkJCWVzYWMgOzsKKwkJICAgIGVzYWMKKwkJZmkKKwkJaWYgWyAiJHtIUF9BUkNIfSIgPSAiIiBdOyB0aGVuCisJCSAgICBldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCSAgICBzZWQgJ3MvXgkJLy8nIDw8IEVPRiA+JGR1bW15LmMKKworCQkjZGVmaW5lIF9IUFVYX1NPVVJDRQorCQkjaW5jbHVkZSA8c3RkbGliLmg+CisJCSNpbmNsdWRlIDx1bmlzdGQuaD4KKworCQlpbnQgbWFpbiAoKQorCQl7CisJCSNpZiBkZWZpbmVkKF9TQ19LRVJORUxfQklUUykKKwkJICAgIGxvbmcgYml0cyA9IHN5c2NvbmYoX1NDX0tFUk5FTF9CSVRTKTsKKwkJI2VuZGlmCisJCSAgICBsb25nIGNwdSAgPSBzeXNjb25mIChfU0NfQ1BVX1ZFUlNJT04pOworCisJCSAgICBzd2l0Y2ggKGNwdSkKKwkJCXsKKwkJCWNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wIik7IGJyZWFrOworCQkJY2FzZSBDUFVfUEFfUklTQzFfMTogcHV0cyAoImhwcGExLjEiKTsgYnJlYWs7CisJCQljYXNlIENQVV9QQV9SSVNDMl8wOgorCQkjaWYgZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpCisJCQkgICAgc3dpdGNoIChiaXRzKQorCQkJCXsKKwkJCQljYXNlIDY0OiBwdXRzICgiaHBwYTIuMHciKTsgYnJlYWs7CisJCQkJY2FzZSAzMjogcHV0cyAoImhwcGEyLjBuIik7IGJyZWFrOworCQkJCWRlZmF1bHQ6IHB1dHMgKCJocHBhMi4wIik7IGJyZWFrOworCQkJCX0gYnJlYWs7CisJCSNlbHNlICAvKiAhZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpICovCisJCQkgICAgcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7CisJCSNlbmRpZgorCQkJZGVmYXVsdDogcHV0cyAoImhwcGExLjAiKTsgYnJlYWs7CisJCQl9CisJCSAgICBleGl0ICgwKTsKKwkJfQorRU9GCisJCSAgICAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAyPi9kZXYvbnVsbCkgJiYgSFBfQVJDSD1gJGR1bW15YAorCQkgICAgdGVzdCAteiAiJEhQX0FSQ0giICYmIEhQX0FSQ0g9aHBwYQorCQlmaSA7OworCWVzYWMKKwlpZiBbICR7SFBfQVJDSH0gPSAiaHBwYTIuMHciIF0KKwl0aGVuCisJICAgIGV2YWwgJHNldF9jY19mb3JfYnVpbGQKKworCSAgICAjIGhwcGEyLjB3LWhwLWhwdXgqIGhhcyBhIDY0LWJpdCBrZXJuZWwgYW5kIGEgY29tcGlsZXIgZ2VuZXJhdGluZworCSAgICAjIDMyLWJpdCBjb2RlLiAgaHBwYTY0LWhwLWhwdXgqIGhhcyB0aGUgc2FtZSBrZXJuZWwgYW5kIGEgY29tcGlsZXIKKwkgICAgIyBnZW5lcmF0aW5nIDY0LWJpdCBjb2RlLiAgR05VIGFuZCBIUCB1c2UgZGlmZmVyZW50IG5vbWVuY2xhdHVyZToKKwkgICAgIworCSAgICAjICQgQ0NfRk9SX0JVSUxEPWNjIC4vY29uZmlnLmd1ZXNzCisJICAgICMgPT4gaHBwYTIuMHctaHAtaHB1eDExLjIzCisJICAgICMgJCBDQ19GT1JfQlVJTEQ9ImNjICtEQTIuMHciIC4vY29uZmlnLmd1ZXNzCisJICAgICMgPT4gaHBwYTY0LWhwLWhwdXgxMS4yMworCisJICAgIGlmIGVjaG8gX19MUDY0X18gfCAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwKKwkJZ3JlcCAtcSBfX0xQNjRfXworCSAgICB0aGVuCisJCUhQX0FSQ0g9ImhwcGEyLjB3IgorCSAgICBlbHNlCisJCUhQX0FSQ0g9ImhwcGE2NCIKKwkgICAgZmkKKwlmaQorCWVjaG8gJHtIUF9BUkNIfS1ocC1ocHV4JHtIUFVYX1JFVn0KKwlleGl0IDs7CisgICAgaWE2NDpIUC1VWDoqOiopCisJSFBVWF9SRVY9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSouWzBCXSovLydgCisJZWNobyBpYTY0LWhwLWhwdXgke0hQVVhfUkVWfQorCWV4aXQgOzsKKyAgICAzMDUwKjpISS1VWDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI2luY2x1ZGUgPHVuaXN0ZC5oPgorCWludAorCW1haW4gKCkKKwl7CisJICBsb25nIGNwdSA9IHN5c2NvbmYgKF9TQ19DUFVfVkVSU0lPTik7CisJICAvKiBUaGUgb3JkZXIgbWF0dGVycywgYmVjYXVzZSBDUFVfSVNfSFBfTUM2OEsgZXJyb25lb3VzbHkgcmV0dXJucworCSAgICAgdHJ1ZSBmb3IgQ1BVX1BBX1JJU0MxXzAuICBDUFVfSVNfUEFfUklTQyByZXR1cm5zIGNvcnJlY3QKKwkgICAgIHJlc3VsdHMsIGhvd2V2ZXIuICAqLworCSAgaWYgKENQVV9JU19QQV9SSVNDIChjcHUpKQorCSAgICB7CisJICAgICAgc3dpdGNoIChjcHUpCisJCXsKKwkJICBjYXNlIENQVV9QQV9SSVNDMV8wOiBwdXRzICgiaHBwYTEuMC1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCSAgY2FzZSBDUFVfUEFfUklTQzFfMTogcHV0cyAoImhwcGExLjEtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQkgIGNhc2UgQ1BVX1BBX1JJU0MyXzA6IHB1dHMgKCJocHBhMi4wLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJICBkZWZhdWx0OiBwdXRzICgiaHBwYS1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgZWxzZSBpZiAoQ1BVX0lTX0hQX01DNjhLIChjcHUpKQorCSAgICBwdXRzICgibTY4ay1oaXRhY2hpLWhpdXh3ZTIiKTsKKwkgIGVsc2UgcHV0cyAoInVua25vd24taGl0YWNoaS1oaXV4d2UyIik7CisJICBleGl0ICgwKTsKKwl9CitFT0YKKwkkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJiBTWVNURU1fTkFNRT1gJGR1bW15YCAmJgorCQl7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KKwllY2hvIHVua25vd24taGl0YWNoaS1oaXV4d2UyCisJZXhpdCA7OworICAgIDkwMDAvNz8/OjQuM2JzZDoqOiogfCA5MDAwLzg/Wzc5XTo0LjNic2Q6KjoqICkKKwllY2hvIGhwcGExLjEtaHAtYnNkCisJZXhpdCA7OworICAgIDkwMDAvOD8/OjQuM2JzZDoqOiopCisJZWNobyBocHBhMS4wLWhwLWJzZAorCWV4aXQgOzsKKyAgICAqOT8/KjpNUEUvaVg6KjoqIHwgKjMwMDAqOk1QRS9pWDoqOiopCisJZWNobyBocHBhMS4wLWhwLW1wZWl4CisJZXhpdCA7OworICAgIGhwNz8/Ok9TRjE6KjoqIHwgaHA4P1s3OV06T1NGMToqOiogKQorCWVjaG8gaHBwYTEuMS1ocC1vc2YKKwlleGl0IDs7CisgICAgaHA4Pz86T1NGMToqOiopCisJZWNobyBocHBhMS4wLWhwLW9zZgorCWV4aXQgOzsKKyAgICBpKjg2Ok9TRjE6KjoqKQorCWlmIFsgLXggL3Vzci9zYmluL3N5c3ZlcnNpb24gXSA7IHRoZW4KKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tb3NmMW1rCisJZWxzZQorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1vc2YxCisJZmkKKwlleGl0IDs7CisgICAgcGFyaXNjKjpMaXRlcyo6KjoqKQorCWVjaG8gaHBwYTEuMS1ocC1saXRlcworCWV4aXQgOzsKKyAgICBDMSo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMxKjoqKQorCWVjaG8gYzEtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBDMio6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMyKjoqKQorCWlmIGdldHN5c2luZm8gLWYgc2NhbGFyX2FjYworCXRoZW4gZWNobyBjMzItY29udmV4LWJzZAorCWVsc2UgZWNobyBjMi1jb252ZXgtYnNkCisJZmkKKwlleGl0IDs7CisgICAgQzM0KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzM0KjoqKQorCWVjaG8gYzM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgQzM4KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzM4KjoqKQorCWVjaG8gYzM4LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgQzQqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDNCo6KikKKwllY2hvIGM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgQ1JBWSpZLU1QOio6KjoqKQorCWVjaG8geW1wLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqW0EtWl05MDoqOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IFwKKwl8IHNlZCAtZSAncy9DUkFZLipcKFtBLVpdOTBcKS9cMS8nIFwKKwkgICAgICAtZSB5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LyBcCisJICAgICAgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKlRTOio6KjoqKQorCWVjaG8gdDkwLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqVDNFOio6KjoqKQorCWVjaG8gYWxwaGFldjUtY3JheS11bmljb3NtayR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKlNWMToqOio6KikKKwllY2hvIHN2MS1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICAqOlVOSUNPUy9tcDoqOiopCisJZWNobyBjcmF5bnYtY3JheS11bmljb3NtcCR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBGMzBbMDFdOlVOSVhfU3lzdGVtX1Y6KjoqIHwgRjcwMDpVTklYX1N5c3RlbV9WOio6KikKKwlGVUpJVFNVX1BST0M9YHVuYW1lIC1tIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYAorCUZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy9cLy8vJ2AKKwlGVUpJVFNVX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzLyAvXy8nYAorCWVjaG8gIiR7RlVKSVRTVV9QUk9DfS1mdWppdHN1LSR7RlVKSVRTVV9TWVN9JHtGVUpJVFNVX1JFTH0iCisJZXhpdCA7OworICAgIDUwMDA6VU5JWF9TeXN0ZW1fVjo0Lio6KikKKwlGVUpJVFNVX1NZUz1gdW5hbWUgLXAgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvXC8vLydgCisJRlVKSVRTVV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy8gL18vJ2AKKwllY2hvICJzcGFyYy1mdWppdHN1LSR7RlVKSVRTVV9TWVN9JHtGVUpJVFNVX1JFTH0iCisJZXhpdCA7OworICAgIGkqODY6QlNELzM4NjoqOiogfCBpKjg2OkJTRC9PUzoqOiogfCAqOkFzY2VuZFwgRW1iZWRkZWQvT1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1ic2RpJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBzcGFyYyo6QlNEL09TOio6KikKKwllY2hvIHNwYXJjLXVua25vd24tYnNkaSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpCU0QvT1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWJzZGkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6RnJlZUJTRDoqOiopCisJY2FzZSAke1VOQU1FX01BQ0hJTkV9IGluCisJICAgIHBjOTgpCisJCWVjaG8gaTM4Ni11bmtub3duLWZyZWVic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgIDs7CisJICAgIGFtZDY0KQorCQllY2hvIHg4Nl82NC11bmtub3duLWZyZWVic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgIDs7CisJICAgICopCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWZyZWVic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgIDs7CisJZXNhYworCWV4aXQgOzsKKyAgICBpKjpDWUdXSU4qOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWN5Z3dpbgorCWV4aXQgOzsKKyAgICAqOk1JTkdXKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5ndzMyCisJZXhpdCA7OworICAgIGkqOndpbmRvd3MzMio6KikKKwkjIHVuYW1lIC1tIGluY2x1ZGVzICItcGMiIG9uIHRoaXMgc3lzdGVtLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1taW5ndzMyCisJZXhpdCA7OworICAgIGkqOlBXKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1wdzMyCisJZXhpdCA7OworICAgICo6SW50ZXJpeCo6KikKKwljYXNlICR7VU5BTUVfTUFDSElORX0gaW4KKwkgICAgeDg2KQorCQllY2hvIGk1ODYtcGMtaW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KKwkJZXhpdCA7OworCSAgICBhdXRoZW50aWNhbWQgfCBnZW51aW5laW50ZWwgfCBFTTY0VCkKKwkJZWNobyB4ODZfNjQtdW5rbm93bi1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorCQlleGl0IDs7CisJICAgIElBNjQpCisJCWVjaG8gaWE2NC11bmtub3duLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CisJCWV4aXQgOzsKKwllc2FjIDs7CisgICAgWzM0NV04NjpXaW5kb3dzXzk1OiogfCBbMzQ1XTg2OldpbmRvd3NfOTg6KiB8IFszNDVdODY6V2luZG93c19OVDoqKQorCWVjaG8gaSR7VU5BTUVfTUFDSElORX0tcGMtbWtzCisJZXhpdCA7OworICAgIDg2NjQ6V2luZG93c19OVDoqKQorCWVjaG8geDg2XzY0LXBjLW1rcworCWV4aXQgOzsKKyAgICBpKjpXaW5kb3dzX05UKjoqIHwgUGVudGl1bSo6V2luZG93c19OVCo6KikKKwkjIEhvdyBkbyB3ZSBrbm93IGl0J3MgSW50ZXJpeCByYXRoZXIgdGhhbiB0aGUgZ2VuZXJpYyBQT1NJWCBzdWJzeXN0ZW0/CisJIyBJdCBhbHNvIGNvbmZsaWN0cyB3aXRoIHByZS0yLjAgdmVyc2lvbnMgb2YgQVQmVCBVV0lOLiBTaG91bGQgd2UKKwkjIFVOQU1FX01BQ0hJTkUgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB1bmFtZSBpbnN0ZWFkIG9mIGkzODY/CisJZWNobyBpNTg2LXBjLWludGVyaXgKKwlleGl0IDs7CisgICAgaSo6VVdJTio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtdXdpbgorCWV4aXQgOzsKKyAgICBhbWQ2NDpDWUdXSU4qOio6KiB8IHg4Nl82NDpDWUdXSU4qOio6KikKKwllY2hvIHg4Nl82NC11bmtub3duLWN5Z3dpbgorCWV4aXQgOzsKKyAgICBwKjpDWUdXSU4qOiopCisJZWNobyBwb3dlcnBjbGUtdW5rbm93bi1jeWd3aW4KKwlleGl0IDs7CisgICAgcHJlcCo6U3VuT1M6NS4qOiopCisJZWNobyBwb3dlcnBjbGUtdW5rbm93bi1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICAqOkdOVToqOiopCisJIyB0aGUgR05VIHN5c3RlbQorCWVjaG8gYGVjaG8gJHtVTkFNRV9NQUNISU5FfXxzZWQgLWUgJ3MsWy0vXS4qJCwsJ2AtdW5rbm93bi1nbnVgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncywvLiokLCwnYAorCWV4aXQgOzsKKyAgICAqOkdOVS8qOio6KikKKwkjIG90aGVyIHN5c3RlbXMgd2l0aCBHTlUgbGliYyBhbmQgdXNlcmxhbmQKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1gZWNobyAke1VOQU1FX1NZU1RFTX0gfCBzZWQgJ3MsXlteL10qLywsJyB8IHRyICdbQS1aXScgJ1thLXpdJ2BgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgLWdudQorCWV4aXQgOzsKKyAgICBpKjg2Ok1pbml4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluaXgKKwlleGl0IDs7CisgICAgYWxwaGE6TGludXg6KjoqKQorCWNhc2UgYHNlZCAtbiAnL15jcHUgbW9kZWwvcy9eLio6IFwoLipcKS9cMS9wJyA8IC9wcm9jL2NwdWluZm9gIGluCisJICBFVjUpICAgVU5BTUVfTUFDSElORT1hbHBoYWV2NSA7OworCSAgRVY1NikgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjU2IDs7CisJICBQQ0E1NikgVU5BTUVfTUFDSElORT1hbHBoYXBjYTU2IDs7CisJICBQQ0E1NykgVU5BTUVfTUFDSElORT1hbHBoYXBjYTU2IDs7CisJICBFVjYpICAgVU5BTUVfTUFDSElORT1hbHBoYWV2NiA7OworCSAgRVY2NykgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY3IDs7CisJICBFVjY4KikgVU5BTUVfTUFDSElORT1hbHBoYWV2NjggOzsKKwllc2FjCisJb2JqZHVtcCAtLXByaXZhdGUtaGVhZGVycyAvYmluL3NoIHwgZ3JlcCAtcSBsZC5zby4xCisJaWYgdGVzdCAiJD8iID0gMCA7IHRoZW4gTElCQz0iZ251bGliYzEiIDsgZmkKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGFybSo6TGludXg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlpZiBlY2hvIF9fQVJNX0VBQklfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJICAgIHwgZ3JlcCAtcSBfX0FSTV9FQUJJX18KKwl0aGVuCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwllbHNlCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudWVhYmkKKwlmaQorCWV4aXQgOzsKKyAgICBhdnIzMio6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgY3JpczpMaW51eDoqOiopCisJZWNobyBjcmlzLWF4aXMtbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBjcmlzdjMyOkxpbnV4Oio6KikKKwllY2hvIGNyaXN2MzItYXhpcy1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGZydjpMaW51eDoqOiopCisJZWNobyBmcnYtdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGkqODY6TGludXg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSNpZmRlZiBfX2RpZXRsaWJjX18KKwlMSUJDPWRpZXRsaWJjCisJI2VuZGlmCitFT0YKKwlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkxJQkMnYAorCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtJHtMSUJDfSIKKwlleGl0IDs7CisgICAgaWE2NDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBtMzJyKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBtNjgqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIG1pcHM6TGludXg6KjoqIHwgbWlwczY0OkxpbnV4Oio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkjdW5kZWYgQ1BVCisJI3VuZGVmICR7VU5BTUVfTUFDSElORX0KKwkjdW5kZWYgJHtVTkFNRV9NQUNISU5FfWVsCisJI2lmIGRlZmluZWQoX19NSVBTRUxfXykgfHwgZGVmaW5lZChfX01JUFNFTCkgfHwgZGVmaW5lZChfTUlQU0VMKSB8fCBkZWZpbmVkKE1JUFNFTCkKKwlDUFU9JHtVTkFNRV9NQUNISU5FfWVsCisJI2Vsc2UKKwkjaWYgZGVmaW5lZChfX01JUFNFQl9fKSB8fCBkZWZpbmVkKF9fTUlQU0VCKSB8fCBkZWZpbmVkKF9NSVBTRUIpIHx8IGRlZmluZWQoTUlQU0VCKQorCUNQVT0ke1VOQU1FX01BQ0hJTkV9CisJI2Vsc2UKKwlDUFU9CisJI2VuZGlmCisJI2VuZGlmCitFT0YKKwlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkNQVSdgCisJdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LSR7TElCQ30iOyBleGl0OyB9CisJOzsKKyAgICBvcjMyOkxpbnV4Oio6KikKKwllY2hvIG9yMzItdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHBhZHJlOkxpbnV4Oio6KikKKwllY2hvIHNwYXJjLXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHBhcmlzYzY0OkxpbnV4Oio6KiB8IGhwcGE2NDpMaW51eDoqOiopCisJZWNobyBocHBhNjQtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgcGFyaXNjOkxpbnV4Oio6KiB8IGhwcGE6TGludXg6KjoqKQorCSMgTG9vayBmb3IgQ1BVIGxldmVsCisJY2FzZSBgZ3JlcCAnXmNwdVteYS16XSo6JyAvcHJvYy9jcHVpbmZvIDI+L2Rldi9udWxsIHwgY3V0IC1kJyAnIC1mMmAgaW4KKwkgIFBBNyopIGVjaG8gaHBwYTEuMS11bmtub3duLWxpbnV4LSR7TElCQ30gOzsKKwkgIFBBOCopIGVjaG8gaHBwYTIuMC11bmtub3duLWxpbnV4LSR7TElCQ30gOzsKKwkgICopICAgIGVjaG8gaHBwYS11bmtub3duLWxpbnV4LSR7TElCQ30gOzsKKwllc2FjCisJZXhpdCA7OworICAgIHBwYzY0OkxpbnV4Oio6KikKKwllY2hvIHBvd2VycGM2NC11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgcHBjOkxpbnV4Oio6KikKKwllY2hvIHBvd2VycGMtdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHMzOTA6TGludXg6KjoqIHwgczM5MHg6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tbGludXgKKwlleGl0IDs7CisgICAgc2g2NCo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgc2gqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHNwYXJjOkxpbnV4Oio6KiB8IHNwYXJjNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgdGlsZSo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS10aWxlcmEtbGludXgtZ251CisJZXhpdCA7OworICAgIHZheDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWRlYy1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHg4Nl82NDpMaW51eDoqOiopCisJZWNobyB4ODZfNjQtdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHh0ZW5zYSo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgaSo4NjpEWU5JWC9wdHg6NCo6KikKKwkjIHB0eCA0LjAgZG9lcyB1bmFtZSAtcyBjb3JyZWN0bHksIHdpdGggRFlOSVgvcHR4IGluIHRoZXJlLgorCSMgZWFybGllciB2ZXJzaW9ucyBhcmUgbWVzc2VkIHVwIGFuZCBwdXQgdGhlIG5vZGVuYW1lIGluIGJvdGgKKwkjIHN5c25hbWUgYW5kIG5vZGVuYW1lLgorCWVjaG8gaTM4Ni1zZXF1ZW50LXN5c3Y0CisJZXhpdCA7OworICAgIGkqODY6VU5JWF9TVjo0LjJNUDoyLiopCisJIyBVbml4d2FyZSBpcyBhbiBvZmZzaG9vdCBvZiBTVlI0LCBidXQgaXQgaGFzIGl0cyBvd24gdmVyc2lvbgorCSMgbnVtYmVyIHNlcmllcyBzdGFydGluZyB3aXRoIDIuLi4KKwkjIEkgYW0gbm90IHBvc2l0aXZlIHRoYXQgb3RoZXIgU1ZSNCBzeXN0ZW1zIHdvbid0IG1hdGNoIHRoaXMsCisJIyBJIGp1c3QgaGF2ZSB0byBob3BlLiAgLS0gcm1zLgorCSMgVXNlIHN5c3Y0LjJ1dy4uLiBzbyB0aGF0IHN5c3Y0KiBtYXRjaGVzIGl0LgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2NC4ydXcke1VOQU1FX1ZFUlNJT059CisJZXhpdCA7OworICAgIGkqODY6T1MvMjoqOiopCisJIyBJZiB3ZSB3ZXJlIGFibGUgdG8gZmluZCBgdW5hbWUnLCB0aGVuIEVNWCBVbml4IGNvbXBhdGliaWxpdHkKKwkjIGlzIHByb2JhYmx5IGluc3RhbGxlZC4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtb3MyLWVteAorCWV4aXQgOzsKKyAgICBpKjg2OlhUUy0zMDA6KjpTVE9QKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXN0b3AKKwlleGl0IDs7CisgICAgaSo4NjphdGhlb3M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWF0aGVvcworCWV4aXQgOzsKKyAgICBpKjg2OnN5bGxhYmxlOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lsbGFibGUKKwlleGl0IDs7CisgICAgaSo4NjpMeW54T1M6Mi4qOiogfCBpKjg2Okx5bnhPUzozLlswMV0qOiogfCBpKjg2Okx5bnhPUzo0LlswMl0qOiopCisJZWNobyBpMzg2LXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBpKjg2OipET1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1tc2Rvc2RqZ3BwCisJZXhpdCA7OworICAgIGkqODY6Kjo0Lio6KiB8IGkqODY6U1lTVEVNX1Y6NC4qOiopCisJVU5BTUVfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgJ3MvXC9NUCQvLydgCisJaWYgZ3JlcCBOb3ZlbGwgL3Vzci9pbmNsdWRlL2xpbmsuaCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bml2ZWwtc3lzdiR7VU5BTUVfUkVMfQorCWVsc2UKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3Yke1VOQU1FX1JFTH0KKwlmaQorCWV4aXQgOzsKKyAgICBpKjg2Oio6NTpbNjc4XSopCisJIyBVbml4V2FyZSA3LngsIE9wZW5VTklYIGFuZCBPcGVuU2VydmVyIDYuCisJY2FzZSBgL2Jpbi91bmFtZSAtWCB8IGdyZXAgIl5NYWNoaW5lImAgaW4KKwkgICAgKjQ4NiopCSAgICAgVU5BTUVfTUFDSElORT1pNDg2IDs7CisJICAgICpQZW50aXVtKQkgICAgIFVOQU1FX01BQ0hJTkU9aTU4NiA7OworCSAgICAqUGVudCp8KkNlbGVyb24pIFVOQU1FX01BQ0hJTkU9aTY4NiA7OworCWVzYWMKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfSR7VU5BTUVfU1lTVEVNfSR7VU5BTUVfVkVSU0lPTn0KKwlleGl0IDs7CisgICAgaSo4NjoqOjMuMjoqKQorCWlmIHRlc3QgLWYgL3Vzci9vcHRpb25zL2NiLm5hbWU7IHRoZW4KKwkJVU5BTUVfUkVMPWBzZWQgLW4gJ3MvLipWZXJzaW9uIC8vcCcgPC91c3Ivb3B0aW9ucy9jYi5uYW1lYAorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtaXNjJFVOQU1FX1JFTAorCWVsaWYgL2Jpbi91bmFtZSAtWCAyPi9kZXYvbnVsbCA+L2Rldi9udWxsIDsgdGhlbgorCQlVTkFNRV9SRUw9YCgvYmluL3VuYW1lIC1YfGdyZXAgUmVsZWFzZXxzZWQgLWUgJ3MvLio9IC8vJylgCisJCSgvYmluL3VuYW1lIC1YfGdyZXAgaTgwNDg2ID4vZGV2L251bGwpICYmIFVOQU1FX01BQ0hJTkU9aTQ4NgorCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVudGl1bScgPi9kZXYvbnVsbCkgXAorCQkJJiYgVU5BTUVfTUFDSElORT1pNTg2CisJCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50ICpJSScgPi9kZXYvbnVsbCkgXAorCQkJJiYgVU5BTUVfTUFDSElORT1pNjg2CisJCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50aXVtIFBybycgPi9kZXYvbnVsbCkgXAorCQkJJiYgVU5BTUVfTUFDSElORT1pNjg2CisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zY28kVU5BTUVfUkVMCisJZWxzZQorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdjMyCisJZmkKKwlleGl0IDs7CisgICAgcGM6KjoqOiopCisJIyBMZWZ0IGhlcmUgZm9yIGNvbXBhdGliaWxpdHk6CisJIyB1bmFtZSAtbSBwcmludHMgZm9yIERKR1BQIGFsd2F5cyAncGMnLCBidXQgaXQgcHJpbnRzIG5vdGhpbmcgYWJvdXQKKwkjIHRoZSBwcm9jZXNzb3IsIHNvIHdlIHBsYXkgc2FmZSBieSBhc3N1bWluZyBpNTg2LgorCSMgTm90ZTogd2hhdGV2ZXIgdGhpcyBpcywgaXQgTVVTVCBiZSB0aGUgc2FtZSBhcyB3aGF0IGNvbmZpZy5zdWIKKwkjIHByaW50cyBmb3IgdGhlICJkamdwcCIgaG9zdCwgb3IgZWxzZSBHREIgY29uZmlndXJ5IHdpbGwgZGVjaWRlIHRoYXQKKwkjIHRoaXMgaXMgYSBjcm9zcy1idWlsZC4KKwllY2hvIGk1ODYtcGMtbXNkb3NkamdwcAorCWV4aXQgOzsKKyAgICBJbnRlbDpNYWNoOjMqOiopCisJZWNobyBpMzg2LXBjLW1hY2gzCisJZXhpdCA7OworICAgIHBhcmFnb246KjoqOiopCisJZWNobyBpODYwLWludGVsLW9zZjEKKwlleGl0IDs7CisgICAgaTg2MDoqOjQuKjoqKSAjIGk4NjAtU1ZSNAorCWlmIGdyZXAgU3RhcmRlbnQgL3Vzci9pbmNsdWRlL3N5cy91YWRtaW4uaCA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJICBlY2hvIGk4NjAtc3RhcmRlbnQtc3lzdiR7VU5BTUVfUkVMRUFTRX0gIyBTdGFyZGVudCBWaXN0cmEgaTg2MC1TVlI0CisJZWxzZSAjIEFkZCBvdGhlciBpODYwLVNWUjQgdmVuZG9ycyBiZWxvdyBhcyB0aGV5IGFyZSBkaXNjb3ZlcmVkLgorCSAgZWNobyBpODYwLXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0gICMgVW5rbm93biBpODYwLVNWUjQKKwlmaQorCWV4aXQgOzsKKyAgICBtaW5pKjpDVElYOlNZUyo1OiopCisJIyAibWluaWZyYW1lIgorCWVjaG8gbTY4MDEwLWNvbnZlcmdlbnQtc3lzdgorCWV4aXQgOzsKKyAgICBtYzY4azpVTklYOlNZU1RFTTU6My41MW0pCisJZWNobyBtNjhrLWNvbnZlcmdlbnQtc3lzdgorCWV4aXQgOzsKKyAgICBNNjgwPzA6RC1OSVg6NS4zOiopCisJZWNobyBtNjhrLWRpYWItZG5peAorCWV4aXQgOzsKKyAgICBNNjgqOio6UjNWWzU2NzhdKjoqKQorCXRlc3QgLXIgL3N5c1Y2OCAmJiB7IGVjaG8gJ202OGstbW90b3JvbGEtc3lzdic7IGV4aXQ7IH0gOzsKKyAgICAzWzM0NV0/PzoqOjQuMDozLjAgfCAzWzM0XT8/QToqOjQuMDozLjAgfCAzWzM0XT8/LCo6Kjo0LjA6My4wIHwgM1szNF0/Py8qOio6NC4wOjMuMCB8IDQ0MDA6Kjo0LjA6My4wIHwgNDg1MDoqOjQuMDozLjAgfCBTS0E0MDoqOjQuMDozLjAgfCBTRFMyOio6NC4wOjMuMCB8IFNIRzI6Kjo0LjA6My4wIHwgUzc1MDEqOio6NC4wOjMuMCkKKwlPU19SRUw9JycKKwl0ZXN0IC1yIC9ldGMvLnJlbGlkIFwKKwkmJiBPU19SRUw9LmBzZWQgLW4gJ3MvW14gXSogW14gXSogXChbMC05XVswLTldXCkuKi9cMS9wJyA8IC9ldGMvLnJlbGlkYAorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAorCSAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0KKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIGVudGl1bSA+L2Rldi9udWxsIFwKKwkgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9IDs7CisgICAgM1szNF0/PzoqOjQuMDoqIHwgM1szNF0/PywqOio6NC4wOiopCisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCisJICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQ7IGV4aXQ7IH0gOzsKKyAgICBOQ1IqOio6NC4yOiogfCBNUFJBUyo6Kjo0LjI6KikKKwlPU19SRUw9Jy4zJworCXRlc3QgLXIgL2V0Yy8ucmVsaWQgXAorCSAgICAmJiBPU19SRUw9LmBzZWQgLW4gJ3MvW14gXSogW14gXSogXChbMC05XVswLTldXCkuKi9cMS9wJyA8IC9ldGMvLnJlbGlkYAorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAorCSAgICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgZW50aXVtID4vZGV2L251bGwgXAorCSAgICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgcHRlcm9uID4vZGV2L251bGwgXAorCSAgICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfSA7OworICAgIG02OCo6THlueE9TOjIuKjoqIHwgbTY4KjpMeW54T1M6My4wKjoqKQorCWVjaG8gbTY4ay11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWM2ODAzMDpVTklYX1N5c3RlbV9WOjQuKjoqKQorCWVjaG8gbTY4ay1hdGFyaS1zeXN2NAorCWV4aXQgOzsKKyAgICBUU1VOQU1JOkx5bnhPUzoyLio6KikKKwllY2hvIHNwYXJjLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICByczYwMDA6THlueE9TOjIuKjoqKQorCWVjaG8gcnM2MDAwLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBQb3dlclBDOkx5bnhPUzoyLio6KiB8IFBvd2VyUEM6THlueE9TOjMuWzAxXSo6KiB8IFBvd2VyUEM6THlueE9TOjQuWzAyXSo6KikKKwllY2hvIHBvd2VycGMtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNNW0JFXVM6VU5JWF9TVjoqOiopCisJZWNobyBtaXBzLWRkZS1zeXN2JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBSTSo6UmVsaWFudFVOSVgtKjoqOiopCisJZWNobyBtaXBzLXNuaS1zeXN2NAorCWV4aXQgOzsKKyAgICBSTSo6U0lOSVgtKjoqOiopCisJZWNobyBtaXBzLXNuaS1zeXN2NAorCWV4aXQgOzsKKyAgICAqOlNJTklYLSo6KjoqKQorCWlmIHVuYW1lIC1wIDI+L2Rldi9udWxsID4vZGV2L251bGwgOyB0aGVuCisJCVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1zbmktc3lzdjQKKwllbHNlCisJCWVjaG8gbnMzMmstc25pLXN5c3YKKwlmaQorCWV4aXQgOzsKKyAgICBQRU5USVVNOio6NC4wKjoqKQkjIFVuaXN5cyBgQ2xlYXJQYXRoIEhNUCBJWCA0MDAwJyBTVlI0L01QIGVmZm9ydAorCQkJIyBzYXlzIDxSaWNoYXJkLk0uQmFydGVsQGNjTWFpbC5DZW5zdXMuR09WPgorCWVjaG8gaTU4Ni11bmlzeXMtc3lzdjQKKwlleGl0IDs7CisgICAgKjpVTklYX1N5c3RlbV9WOjQqOkZUWCopCisJIyBGcm9tIEdlcmFsZCBIZXdlcyA8aGV3ZXNAb3Blbm1hcmtldC5jb20+LgorCSMgSG93IGFib3V0IGRpZmZlcmVudGlhdGluZyBiZXR3ZWVuIHN0cmF0dXMgYXJjaGl0ZWN0dXJlcz8gLWRqbQorCWVjaG8gaHBwYTEuMS1zdHJhdHVzLXN5c3Y0CisJZXhpdCA7OworICAgICo6KjoqOkZUWCopCisJIyBGcm9tIHNlYW5mQHN3ZGMuc3RyYXR1cy5jb20uCisJZWNobyBpODYwLXN0cmF0dXMtc3lzdjQKKwlleGl0IDs7CisgICAgaSo4NjpWT1M6KjoqKQorCSMgRnJvbSBQYXVsLkdyZWVuQHN0cmF0dXMuY29tLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1zdHJhdHVzLXZvcworCWV4aXQgOzsKKyAgICAqOlZPUzoqOiopCisJIyBGcm9tIFBhdWwuR3JlZW5Ac3RyYXR1cy5jb20uCisJZWNobyBocHBhMS4xLXN0cmF0dXMtdm9zCisJZXhpdCA7OworICAgIG1jNjgqOkEvVVg6KjoqKQorCWVjaG8gbTY4ay1hcHBsZS1hdXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG5ld3MqOk5FV1MtT1M6Nio6KikKKwllY2hvIG1pcHMtc29ueS1uZXdzb3M2CisJZXhpdCA7OworICAgIFJbMzRdMDAwOipTeXN0ZW1fVio6KjoqIHwgUjQwMDA6VU5JWF9TWVNWOio6KiB8IFIqMDAwOlVOSVhfU1Y6KjoqKQorCWlmIFsgLWQgL3Vzci9uZWMgXTsgdGhlbgorCQllY2hvIG1pcHMtbmVjLXN5c3Yke1VOQU1FX1JFTEVBU0V9CisJZWxzZQorCQllY2hvIG1pcHMtdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZXhpdCA7OworICAgIEJlQm94OkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBoYXJkd2FyZSBtYWRlIGJ5IEJlLCBQUEMgb25seS4KKwllY2hvIHBvd2VycGMtYmUtYmVvcworCWV4aXQgOzsKKyAgICBCZU1hYzpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gTWFjIG9yIE1hYyBjbG9uZSwgUFBDIG9ubHkuCisJZWNobyBwb3dlcnBjLWFwcGxlLWJlb3MKKwlleGl0IDs7CisgICAgQmVQQzpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gSW50ZWwgUEMgY29tcGF0aWJsZS4KKwllY2hvIGk1ODYtcGMtYmVvcworCWV4aXQgOzsKKyAgICBCZVBDOkhhaWt1Oio6KikJIyBIYWlrdSBydW5uaW5nIG9uIEludGVsIFBDIGNvbXBhdGlibGUuCisJZWNobyBpNTg2LXBjLWhhaWt1CisJZXhpdCA7OworICAgIFNYLTQ6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g0LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC01OlNVUEVSLVVYOio6KikKKwllY2hvIHN4NS1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtNjpTVVBFUi1VWDoqOiopCisJZWNobyBzeDYtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTc6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g3LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC04OlNVUEVSLVVYOio6KikKKwllY2hvIHN4OC1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtOFI6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g4ci1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUG93ZXIqOlJoYXBzb2R5Oio6KikKKwllY2hvIHBvd2VycGMtYXBwbGUtcmhhcHNvZHkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UmhhcHNvZHk6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1hcHBsZS1yaGFwc29keSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpEYXJ3aW46KjoqKQorCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgIHx8IFVOQU1FX1BST0NFU1NPUj11bmtub3duCisJY2FzZSAkVU5BTUVfUFJPQ0VTU09SIGluCisJICAgIGkzODYpCisJCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCisJCSAgaWYgKGVjaG8gJyNpZmRlZiBfX0xQNjRfXyc7IGVjaG8gSVNfNjRCSVRfQVJDSDsgZWNobyAnI2VuZGlmJykgfCBcCisJCSAgICAgIChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCisJCSAgICAgIGdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJCSAgdGhlbgorCQkgICAgICBVTkFNRV9QUk9DRVNTT1I9Ing4Nl82NCIKKwkJICBmaQorCQlmaSA7OworCSAgICB1bmtub3duKSBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYyA7OworCWVzYWMKKwllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS1hcHBsZS1kYXJ3aW4ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6cHJvY250byo6KjoqIHwgKjpRTlg6WzAxMjM0NTY3ODldKjoqKQorCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgCisJaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSAieDg2IjsgdGhlbgorCQlVTkFNRV9QUk9DRVNTT1I9aTM4NgorCQlVTkFNRV9NQUNISU5FPXBjCisJZmkKKwllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS0ke1VOQU1FX01BQ0hJTkV9LW50by1xbngke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UU5YOio6NCopCisJZWNobyBpMzg2LXBjLXFueAorCWV4aXQgOzsKKyAgICBORU8tPzpOT05TVE9QX0tFUk5FTDoqOiopCisJZWNobyBuZW8tdGFuZGVtLW5zayR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgTlNFLT86Tk9OU1RPUF9LRVJORUw6KjoqKQorCWVjaG8gbnNlLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIE5TUi0/Ok5PTlNUT1BfS0VSTkVMOio6KikKKwllY2hvIG5zci10YW5kZW0tbnNrJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOk5vblN0b3AtVVg6KjoqKQorCWVjaG8gbWlwcy1jb21wYXEtbm9uc3RvcHV4CisJZXhpdCA7OworICAgIEJTMjAwMDpQT1NJWCo6KjoqKQorCWVjaG8gYnMyMDAwLXNpZW1lbnMtc3lzdgorCWV4aXQgOzsKKyAgICBEUy8qOlVOSVhfU3lzdGVtX1Y6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS0ke1VOQU1FX1NZU1RFTX0tJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlBsYW45Oio6KikKKwkjICJ1bmFtZSAtbSIgaXMgbm90IGNvbnNpc3RlbnQsIHNvIHVzZSAkY3B1dHlwZSBpbnN0ZWFkLiAzODYKKwkjIGlzIGNvbnZlcnRlZCB0byBpMzg2IGZvciBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIHg4NgorCSMgb3BlcmF0aW5nIHN5c3RlbXMuCisJaWYgdGVzdCAiJGNwdXR5cGUiID0gIjM4NiI7IHRoZW4KKwkgICAgVU5BTUVfTUFDSElORT1pMzg2CisJZWxzZQorCSAgICBVTkFNRV9NQUNISU5FPSIkY3B1dHlwZSIKKwlmaQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXBsYW45CisJZXhpdCA7OworICAgICo6VE9QUy0xMDoqOiopCisJZWNobyBwZHAxMC11bmtub3duLXRvcHMxMAorCWV4aXQgOzsKKyAgICAqOlRFTkVYOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdGVuZXgKKwlleGl0IDs7CisgICAgS1MxMDpUT1BTLTIwOio6KiB8IEtMMTA6VE9QUy0yMDoqOiogfCBUWVBFNDpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLWRlYy10b3BzMjAKKwlleGl0IDs7CisgICAgWEtMLTE6VE9QUy0yMDoqOiogfCBUWVBFNTpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLXhrbC10b3BzMjAKKwlleGl0IDs7CisgICAgKjpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdG9wczIwCisJZXhpdCA7OworICAgICo6SVRTOio6KikKKwllY2hvIHBkcDEwLXVua25vd24taXRzCisJZXhpdCA7OworICAgIFNFSToqOio6U0VJVVgpCisJZWNobyBtaXBzLXNlaS1zZWl1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpEcmFnb25GbHk6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWRyYWdvbmZseWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AKKwlleGl0IDs7CisgICAgKjoqVk1TOio6KikKKwlVTkFNRV9NQUNISU5FPWAodW5hbWUgLXApIDI+L2Rldi9udWxsYAorCWNhc2UgIiR7VU5BTUVfTUFDSElORX0iIGluCisJICAgIEEqKSBlY2hvIGFscGhhLWRlYy12bXMgOyBleGl0IDs7CisJICAgIEkqKSBlY2hvIGlhNjQtZGVjLXZtcyA7IGV4aXQgOzsKKwkgICAgViopIGVjaG8gdmF4LWRlYy12bXMgOyBleGl0IDs7CisJZXNhYyA7OworICAgICo6WEVOSVg6KjpTeXNWKQorCWVjaG8gaTM4Ni1wYy14ZW5peAorCWV4aXQgOzsKKyAgICBpKjg2OnNreW9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc2t5b3NgZWNobyAke1VOQU1FX1JFTEVBU0V9YCB8IHNlZCAtZSAncy8gLiokLy8nCisJZXhpdCA7OworICAgIGkqODY6cmRvczoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXJkb3MKKwlleGl0IDs7CisgICAgaSo4NjpBUk9TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtYXJvcworCWV4aXQgOzsKK2VzYWMKKworI2VjaG8gJyhObyB1bmFtZSBjb21tYW5kIG9yIHVuYW1lIG91dHB1dCBub3QgcmVjb2duaXplZC4pJyAxPiYyCisjZWNobyAiJHtVTkFNRV9NQUNISU5FfToke1VOQU1FX1NZU1RFTX06JHtVTkFNRV9SRUxFQVNFfToke1VOQU1FX1ZFUlNJT059IiAxPiYyCisKK2V2YWwgJHNldF9jY19mb3JfYnVpbGQKK2NhdCA+JGR1bW15LmMgPDxFT0YKKyNpZmRlZiBfU0VRVUVOVF8KKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjIGluY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjZW5kaWYKK21haW4gKCkKK3sKKyNpZiBkZWZpbmVkIChzb255KQorI2lmIGRlZmluZWQgKE1JUFNFQikKKyAgLyogQkZEIHdhbnRzICJic2QiIGluc3RlYWQgb2YgIm5ld3NvcyIuICBQZXJoYXBzIEJGRCBzaG91bGQgYmUgY2hhbmdlZCwKKyAgICAgSSBkb24ndCBrbm93Li4uLiAgKi8KKyAgcHJpbnRmICgibWlwcy1zb255LWJzZFxuIik7IGV4aXQgKDApOworI2Vsc2UKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyAgcHJpbnRmICgibTY4ay1zb255LW5ld3NvcyVzXG4iLAorI2lmZGVmIE5FV1NPUzQKKwkiNCIKKyNlbHNlCisJIiIKKyNlbmRpZgorCSk7IGV4aXQgKDApOworI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fYXJtKSAmJiBkZWZpbmVkIChfX2Fjb3JuKSAmJiBkZWZpbmVkIChfX3VuaXgpCisgIHByaW50ZiAoImFybS1hY29ybi1yaXNjaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoaHAzMDApICYmICFkZWZpbmVkIChocHV4KQorICBwcmludGYgKCJtNjhrLWhwLWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChOZVhUKQorI2lmICFkZWZpbmVkIChfX0FSQ0hJVEVDVFVSRV9fKQorI2RlZmluZSBfX0FSQ0hJVEVDVFVSRV9fICJtNjhrIgorI2VuZGlmCisgIGludCB2ZXJzaW9uOworICB2ZXJzaW9uPWAoaG9zdGluZm8gfCBzZWQgLW4gJ3MvLipOZVhUIE1hY2ggXChbMC05XSpcKS4qL1wxL3AnKSAyPi9kZXYvbnVsbGA7CisgIGlmICh2ZXJzaW9uIDwgNCkKKyAgICBwcmludGYgKCIlcy1uZXh0LW5leHRzdGVwJWRcbiIsIF9fQVJDSElURUNUVVJFX18sIHZlcnNpb24pOworICBlbHNlCisgICAgcHJpbnRmICgiJXMtbmV4dC1vcGVuc3RlcCVkXG4iLCBfX0FSQ0hJVEVDVFVSRV9fLCB2ZXJzaW9uKTsKKyAgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKE1VTFRJTUFYKSB8fCBkZWZpbmVkIChuMTYpCisjaWYgZGVmaW5lZCAoVU1BWFYpCisgIHByaW50ZiAoIm5zMzJrLWVuY29yZS1zeXN2XG4iKTsgZXhpdCAoMCk7CisjZWxzZQorI2lmIGRlZmluZWQgKENNVSkKKyAgcHJpbnRmICgibnMzMmstZW5jb3JlLW1hY2hcbiIpOyBleGl0ICgwKTsKKyNlbHNlCisgIHByaW50ZiAoIm5zMzJrLWVuY29yZS1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fMzg2QlNEX18pCisgIHByaW50ZiAoImkzODYtcGMtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKHNlcXVlbnQpCisjaWYgZGVmaW5lZCAoaTM4NikKKyAgcHJpbnRmICgiaTM4Ni1zZXF1ZW50LWR5bml4XG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkIChuczMyMDAwKQorICBwcmludGYgKCJuczMyay1zZXF1ZW50LWR5bml4XG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX1NFUVVFTlRfKQorICAgIHN0cnVjdCB1dHNuYW1lIHVuOworCisgICAgdW5hbWUoJnVuKTsKKworICAgIGlmIChzdHJuY21wKHVuLnZlcnNpb24sICJWMiIsIDIpID09IDApIHsKKwlwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4MlxuIik7IGV4aXQgKDApOworICAgIH0KKyAgICBpZiAoc3RybmNtcCh1bi52ZXJzaW9uLCAiVjEiLCAyKSA9PSAwKSB7IC8qIFhYWCBpcyBWMSBjb3JyZWN0PyAqLworCXByaW50ZiAoImkzODYtc2VxdWVudC1wdHgxXG4iKTsgZXhpdCAoMCk7CisgICAgfQorICAgIHByaW50ZiAoImkzODYtc2VxdWVudC1wdHhcbiIpOyBleGl0ICgwKTsKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkICh2YXgpCisjIGlmICFkZWZpbmVkICh1bHRyaXgpCisjICBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyMgIGlmIGRlZmluZWQgKEJTRCkKKyMgICBpZiBCU0QgPT0gNDMKKyAgICAgIHByaW50ZiAoInZheC1kZWMtYnNkNC4zXG4iKTsgZXhpdCAoMCk7CisjICAgZWxzZQorIyAgICBpZiBCU0QgPT0gMTk5MDA2CisgICAgICBwcmludGYgKCJ2YXgtZGVjLWJzZDQuM3Jlbm9cbiIpOyBleGl0ICgwKTsKKyMgICAgZWxzZQorICAgICAgcHJpbnRmICgidmF4LWRlYy1ic2RcbiIpOyBleGl0ICgwKTsKKyMgICAgZW5kaWYKKyMgICBlbmRpZgorIyAgZWxzZQorICAgIHByaW50ZiAoInZheC1kZWMtYnNkXG4iKTsgZXhpdCAoMCk7CisjICBlbmRpZgorIyBlbHNlCisgICAgcHJpbnRmICgidmF4LWRlYy11bHRyaXhcbiIpOyBleGl0ICgwKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoYWxsaWFudCkgJiYgZGVmaW5lZCAoaTg2MCkKKyAgcHJpbnRmICgiaTg2MC1hbGxpYW50LWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyAgZXhpdCAoMSk7Cit9CitFT0YKKworJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgMj4vZGV2L251bGwgJiYgU1lTVEVNX05BTUU9YCRkdW1teWAgJiYKKwl7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KKworIyBBcG9sbG9zIHB1dCB0aGUgc3lzdGVtIHR5cGUgaW4gdGhlIGVudmlyb25tZW50LgorCit0ZXN0IC1kIC91c3IvYXBvbGxvICYmIHsgZWNobyAke0lTUH0tYXBvbGxvLSR7U1lTVFlQRX07IGV4aXQ7IH0KKworIyBDb252ZXggdmVyc2lvbnMgdGhhdCBwcmVkYXRlIHVuYW1lIGNhbiB1c2UgZ2V0c3lzaW5mbygxKQorCitpZiBbIC14IC91c3IvY29udmV4L2dldHN5c2luZm8gXQordGhlbgorICAgIGNhc2UgYGdldHN5c2luZm8gLWYgY3B1X3R5cGVgIGluCisgICAgYzEqKQorCWVjaG8gYzEtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBjMiopCisJaWYgZ2V0c3lzaW5mbyAtZiBzY2FsYXJfYWNjCisJdGhlbiBlY2hvIGMzMi1jb252ZXgtYnNkCisJZWxzZSBlY2hvIGMyLWNvbnZleC1ic2QKKwlmaQorCWV4aXQgOzsKKyAgICBjMzQqKQorCWVjaG8gYzM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgYzM4KikKKwllY2hvIGMzOC1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIGM0KikKKwllY2hvIGM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgZXNhYworZmkKKworY2F0ID4mMiA8PEVPRgorJDA6IHVuYWJsZSB0byBndWVzcyBzeXN0ZW0gdHlwZQorCitUaGlzIHNjcmlwdCwgbGFzdCBtb2RpZmllZCAkdGltZXN0YW1wLCBoYXMgZmFpbGVkIHRvIHJlY29nbml6ZQordGhlIG9wZXJhdGluZyBzeXN0ZW0geW91IGFyZSB1c2luZy4gSXQgaXMgYWR2aXNlZCB0aGF0IHlvdQorZG93bmxvYWQgdGhlIG1vc3QgdXAgdG8gZGF0ZSB2ZXJzaW9uIG9mIHRoZSBjb25maWcgc2NyaXB0cyBmcm9tCisKKyAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcztoYj1IRUFECithbmQKKyAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5zdWI7aGI9SEVBRAorCitJZiB0aGUgdmVyc2lvbiB5b3UgcnVuICgkMCkgaXMgYWxyZWFkeSB1cCB0byBkYXRlLCBwbGVhc2UKK3NlbmQgdGhlIGZvbGxvd2luZyBkYXRhIGFuZCBhbnkgaW5mb3JtYXRpb24geW91IHRoaW5rIG1pZ2h0IGJlCitwZXJ0aW5lbnQgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+IGluIG9yZGVyIHRvIHByb3ZpZGUgdGhlIG5lZWRlZAoraW5mb3JtYXRpb24gdG8gaGFuZGxlIHlvdXIgc3lzdGVtLgorCitjb25maWcuZ3Vlc3MgdGltZXN0YW1wID0gJHRpbWVzdGFtcAorCit1bmFtZSAtbSA9IGAodW5hbWUgLW0pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1yID0gYCh1bmFtZSAtcikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtdiA9IGAodW5hbWUgLXYpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKworL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKy9iaW4vdW5hbWUgLVggICAgID0gYCgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbGAKKworaG9zdGluZm8gICAgICAgICAgICAgICA9IGAoaG9zdGluZm8pIDI+L2Rldi9udWxsYAorL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGxgCisvdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbGAKKy9iaW4vYXJjaCAgICAgICAgICAgICAgPSBgKC9iaW4vYXJjaCkgMj4vZGV2L251bGxgCisvdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbGAKKy91c3IvY29udmV4L2dldHN5c2luZm8gPSBgKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsYAorCitVTkFNRV9NQUNISU5FID0gJHtVTkFNRV9NQUNISU5FfQorVU5BTUVfUkVMRUFTRSA9ICR7VU5BTUVfUkVMRUFTRX0KK1VOQU1FX1NZU1RFTSAgPSAke1VOQU1FX1NZU1RFTX0KK1VOQU1FX1ZFUlNJT04gPSAke1VOQU1FX1ZFUlNJT059CitFT0YKKworZXhpdCAxCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJ0aW1lc3RhbXA9JyIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkIgorIyB0aW1lLXN0YW1wLWVuZDogIiciCisjIEVuZDoKZGlmZiAtLWdpdCBhL3NoYXJlL2xpYnRvb2wvY29uZmlnL2NvbmZpZy5zdWIgYi9zaGFyZS9saWJ0b29sL2NvbmZpZy9jb25maWcuc3ViCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhhZDE2N2MKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9saWJ0b29sL2NvbmZpZy9jb25maWcuc3ViCkBAIC0wLDAgKzEsMTc1NyBAQAorIyEgL2Jpbi9zaAorIyBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gc3Vicm91dGluZSBzY3JpcHQuCisjICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorIyAgIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsCisjICAgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwordGltZXN0YW1wPScyMDExLTAyLTI0JworCisjIFRoaXMgZmlsZSBpcyAoaW4gcHJpbmNpcGxlKSBjb21tb24gdG8gQUxMIEdOVSBzb2Z0d2FyZS4KKyMgVGhlIHByZXNlbmNlIG9mIGEgbWFjaGluZSBpbiB0aGlzIGZpbGUgc3VnZ2VzdHMgdGhhdCBTT01FIEdOVSBzb2Z0d2FyZQorIyBjYW4gaGFuZGxlIHRoYXQgbWFjaGluZS4gIEl0IGRvZXMgbm90IGltcGx5IEFMTCBHTlUgc29mdHdhcmUgY2FuLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorIyAwMjExMC0xMzAxLCBVU0EuCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworCisjIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiAgU3VibWl0IGEgY29udGV4dAorIyBkaWZmIGFuZCBhIHByb3Blcmx5IGZvcm1hdHRlZCBHTlUgQ2hhbmdlTG9nIGVudHJ5LgorIworIyBDb25maWd1cmF0aW9uIHN1YnJvdXRpbmUgdG8gdmFsaWRhdGUgYW5kIGNhbm9uaWNhbGl6ZSBhIGNvbmZpZ3VyYXRpb24gdHlwZS4KKyMgU3VwcGx5IHRoZSBzcGVjaWZpZWQgY29uZmlndXJhdGlvbiB0eXBlIGFzIGFuIGFyZ3VtZW50LgorIyBJZiBpdCBpcyBpbnZhbGlkLCB3ZSBwcmludCBhbiBlcnJvciBtZXNzYWdlIG9uIHN0ZGVyciBhbmQgZXhpdCB3aXRoIGNvZGUgMS4KKyMgT3RoZXJ3aXNlLCB3ZSBwcmludCB0aGUgY2Fub25pY2FsIGNvbmZpZyB0eXBlIG9uIHN0ZG91dCBhbmQgc3VjY2VlZC4KKworIyBZb3UgY2FuIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBzY3JpcHQgZnJvbToKKyMgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5zdWI7aGI9SEVBRAorCisjIFRoaXMgZmlsZSBpcyBzdXBwb3NlZCB0byBiZSB0aGUgc2FtZSBmb3IgYWxsIEdOVSBwYWNrYWdlcworIyBhbmQgcmVjb2duaXplIGFsbCB0aGUgQ1BVIHR5cGVzLCBzeXN0ZW0gdHlwZXMgYW5kIGFsaWFzZXMKKyMgdGhhdCBhcmUgbWVhbmluZ2Z1bCB3aXRoICphbnkqIEdOVSBzb2Z0d2FyZS4KKyMgRWFjaCBwYWNrYWdlIGlzIHJlc3BvbnNpYmxlIGZvciByZXBvcnRpbmcgd2hpY2ggdmFsaWQgY29uZmlndXJhdGlvbnMKKyMgaXQgZG9lcyBub3Qgc3VwcG9ydC4gIFRoZSB1c2VyIHNob3VsZCBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoCisjIGEgZmFpbHVyZSB0byBzdXBwb3J0IGEgdmFsaWQgY29uZmlndXJhdGlvbiBmcm9tIGEgbWVhbmluZ2xlc3MKKyMgY29uZmlndXJhdGlvbi4KKworIyBUaGUgZ29hbCBvZiB0aGlzIGZpbGUgaXMgdG8gbWFwIGFsbCB0aGUgdmFyaW91cyB2YXJpYXRpb25zIG9mIGEgZ2l2ZW4KKyMgbWFjaGluZSBzcGVjaWZpY2F0aW9uIGludG8gYSBzaW5nbGUgc3BlY2lmaWNhdGlvbiBpbiB0aGUgZm9ybToKKyMJQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0KKyMgb3IgaW4gc29tZSBjYXNlcywgdGhlIG5ld2VyIGZvdXItcGFydCBmb3JtOgorIwlDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU0KKyMgSXQgaXMgd3JvbmcgdG8gZWNobyBhbnkgb3RoZXIgdHlwZSBvZiBzcGVjaWZpY2F0aW9uLgorCittZT1gZWNobyAiJDAiIHwgc2VkIC1lICdzLC4qLywsJ2AKKwordXNhZ2U9IlwKK1VzYWdlOiAkMCBbT1BUSU9OXSBDUFUtTUZSLU9QU1lTCisgICAgICAgJDAgW09QVElPTl0gQUxJQVMKKworQ2Fub25pY2FsaXplIGEgY29uZmlndXJhdGlvbiBuYW1lLgorCitPcGVyYXRpb24gbW9kZXM6CisgIC1oLCAtLWhlbHAgICAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtdCwgLS10aW1lLXN0YW1wICAgcHJpbnQgZGF0ZSBvZiBsYXN0IG1vZGlmaWNhdGlvbiwgdGhlbiBleGl0CisgIC12LCAtLXZlcnNpb24gICAgICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisKK1JlcG9ydCBidWdzIGFuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4iCisKK3ZlcnNpb249IlwKK0dOVSBjb25maWcuc3ViICgkdGltZXN0YW1wKQorCitDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KK3dhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKKworaGVscD0iCitUcnkgXGAkbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisKKyMgUGFyc2UgY29tbWFuZCBsaW5lCit3aGlsZSB0ZXN0ICQjIC1ndCAwIDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC0tdGltZS1zdGFtcCB8IC0tdGltZSogfCAtdCApCisgICAgICAgZWNobyAiJHRpbWVzdGFtcCIgOyBleGl0IDs7CisgICAgLS12ZXJzaW9uIHwgLXYgKQorICAgICAgIGVjaG8gIiR2ZXJzaW9uIiA7IGV4aXQgOzsKKyAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQorICAgICAgIGVjaG8gIiR1c2FnZSI7IGV4aXQgOzsKKyAgICAtLSApICAgICAjIFN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKKyAgICAgICBzaGlmdDsgYnJlYWsgOzsKKyAgICAtICkJIyBVc2Ugc3RkaW4gYXMgaW5wdXQuCisgICAgICAgYnJlYWsgOzsKKyAgICAtKiApCisgICAgICAgZWNobyAiJG1lOiBpbnZhbGlkIG9wdGlvbiAkMSRoZWxwIgorICAgICAgIGV4aXQgMSA7OworCisgICAgKmxvY2FsKikKKyAgICAgICAjIEZpcnN0IHBhc3MgdGhyb3VnaCBhbnkgbG9jYWwgbWFjaGluZSB0eXBlcy4KKyAgICAgICBlY2hvICQxCisgICAgICAgZXhpdCA7OworCisgICAgKiApCisgICAgICAgYnJlYWsgOzsKKyAgZXNhYworZG9uZQorCitjYXNlICQjIGluCisgMCkgZWNobyAiJG1lOiBtaXNzaW5nIGFyZ3VtZW50JGhlbHAiID4mMgorICAgIGV4aXQgMTs7CisgMSkgOzsKKyAqKSBlY2hvICIkbWU6IHRvbyBtYW55IGFyZ3VtZW50cyRoZWxwIiA+JjIKKyAgICBleGl0IDE7OworZXNhYworCisjIFNlcGFyYXRlIHdoYXQgdGhlIHVzZXIgZ2F2ZSBpbnRvIENQVS1DT01QQU5ZIGFuZCBPUyBvciBLRVJORUwtT1MgKGlmIGFueSkuCisjIEhlcmUgd2UgbXVzdCByZWNvZ25pemUgYWxsIHRoZSB2YWxpZCBLRVJORUwtT1MgY29tYmluYXRpb25zLgorbWF5YmVfb3M9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wyLydgCitjYXNlICRtYXliZV9vcyBpbgorICBudG8tcW54KiB8IGxpbnV4LWdudSogfCBsaW51eC1hbmRyb2lkKiB8IGxpbnV4LWRpZXRsaWJjIHwgbGludXgtbmV3bGliKiB8IFwKKyAgbGludXgtdWNsaWJjKiB8IHVjbGludXgtdWNsaWJjKiB8IHVjbGludXgtZ251KiB8IGtmcmVlYnNkKi1nbnUqIHwgXAorICBrbmV0YnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIHwgXAorICBrb3BlbnNvbGFyaXMqLWdudSogfCBcCisgIHN0b3JtLWNoYW9zKiB8IG9zMi1lbXgqIHwgcnRtay1ub3ZhKikKKyAgICBvcz0tJG1heWJlX29zCisgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDEvJ2AKKyAgICA7OworICAqKQorICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvLVteLV0qJC8vJ2AKKyAgICBpZiBbICRiYXNpY19tYWNoaW5lICE9ICQxIF0KKyAgICB0aGVuIG9zPWBlY2hvICQxIHwgc2VkICdzLy4qLS8tLydgCisgICAgZWxzZSBvcz07IGZpCisgICAgOzsKK2VzYWMKKworIyMjIExldCdzIHJlY29nbml6ZSBjb21tb24gbWFjaGluZXMgYXMgbm90IGJlaW5nIG9wZXJhdGluZyBzeXN0ZW1zIHNvCisjIyMgdGhhdCB0aGluZ3MgbGlrZSBjb25maWcuc3ViIGRlY3N0YXRpb24tMzEwMCB3b3JrLiAgV2UgYWxzbworIyMjIHJlY29nbml6ZSBzb21lIG1hbnVmYWN0dXJlcnMgYXMgbm90IGJlaW5nIG9wZXJhdGluZyBzeXN0ZW1zLCBzbyB3ZQorIyMjIGNhbiBwcm92aWRlIGRlZmF1bHQgb3BlcmF0aW5nIHN5c3RlbXMgYmVsb3cuCitjYXNlICRvcyBpbgorCS1zdW4qb3MqKQorCQkjIFByZXZlbnQgZm9sbG93aW5nIGNsYXVzZSBmcm9tIGhhbmRsaW5nIHRoaXMgaW52YWxpZCBpbnB1dC4KKwkJOzsKKwktZGVjKiB8IC1taXBzKiB8IC1zZXF1ZW50KiB8IC1lbmNvcmUqIHwgLXBjNTMyKiB8IC1zZ2kqIHwgLXNvbnkqIHwgXAorCS1hdHQqIHwgLTczMDAqIHwgLTMzMDAqIHwgLWRlbHRhKiB8IC1tb3Rvcm9sYSogfCAtc3VuWzIzNF0qIHwgXAorCS11bmljb20qIHwgLWlibSogfCAtbmV4dCB8IC1ocCB8IC1pc2kqIHwgLWFwb2xsbyB8IC1hbHRvcyogfCBcCisJLWNvbnZlcmdlbnQqIHwgLW5jciogfCAtbmV3cyB8IC0zMiogfCAtMzYwMCogfCAtMzEwMCogfCAtaGl0YWNoaSogfFwKKwktY1sxMjNdKiB8IC1jb252ZXgqIHwgLXN1biB8IC1jcmRzIHwgLW9tcm9uKiB8IC1kZyB8IC11bHRyYSB8IC10dGkqIHwgXAorCS1oYXJyaXMgfCAtZG9scGhpbiB8IC1oaWdobGV2ZWwgfCAtZ291bGQgfCAtY2JtIHwgLW5zIHwgLW1hc3Njb21wIHwgXAorCS1hcHBsZSB8IC1heGlzIHwgLWtudXRoIHwgLWNyYXkgfCAtbWljcm9ibGF6ZSkKKwkJb3M9CisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktYmx1ZWdlbmUqKQorCQlvcz0tY25rCisJCTs7CisJLXNpbSB8IC1jaXNjbyB8IC1va2kgfCAtd2VjIHwgLXdpbmJvbmQpCisJCW9zPQorCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLXNjb3V0KQorCQk7OworCS13cnMpCisJCW9zPS12eHdvcmtzCisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktY2hvcnVzb3MqKQorCQlvcz0tY2hvcnVzb3MKKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1jaG9ydXNyZGIpCisJCW9zPS1jaG9ydXNyZGIKKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1oaXV4KikKKwkJb3M9LWhpdXh3ZTIKKwkJOzsKKwktc2NvNikKKwkJb3M9LXNjbzV2NgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzUpCisJCW9zPS1zY28zLjJ2NQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzQpCisJCW9zPS1zY28zLjJ2NAorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzMuMi5bNC05XSopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAncy9zY28zLjIuL3NjbzMuMnYvJ2AKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY28zLjJ2WzQtOV0qKQorCQkjIERvbid0IGZvcmdldCB2ZXJzaW9uIGlmIGl0IGlzIDMuMnY0IG9yIG5ld2VyLgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzV2NiopCisJCSMgRG9uJ3QgZm9yZ2V0IHZlcnNpb24gaWYgaXQgaXMgMy4ydjQgb3IgbmV3ZXIuCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvKikKKwkJb3M9LXNjbzMuMnYyCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktdWRrKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1pc2MpCisJCW9zPS1pc2MyLjIKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1jbGl4KikKKwkJYmFzaWNfbWFjaGluZT1jbGlwcGVyLWludGVyZ3JhcGgKKwkJOzsKKwktaXNjKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1seW54KikKKwkJb3M9LWx5bnhvcworCQk7OworCS1wdHgqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXNlcXVlbnQvJ2AKKwkJOzsKKwktd2luZG93c250KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzL3dpbmRvd3NudC93aW5udC8nYAorCQk7OworCS1wc29zKikKKwkJb3M9LXBzb3MKKwkJOzsKKwktbWludCB8IC1taW50WzAtOV0qKQorCQliYXNpY19tYWNoaW5lPW02OGstYXRhcmkKKwkJb3M9LW1pbnQKKwkJOzsKK2VzYWMKKworIyBEZWNvZGUgYWxpYXNlcyBmb3IgY2VydGFpbiBDUFUtQ09NUEFOWSBjb21iaW5hdGlvbnMuCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisJIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRob3V0IGNvbXBhbnkgbmFtZS4KKwkjIFNvbWUgYXJlIG9taXR0ZWQgaGVyZSBiZWNhdXNlIHRoZXkgaGF2ZSBzcGVjaWFsIG1lYW5pbmdzIGJlbG93LgorCTE3NTBhIHwgNTgwIFwKKwl8IGEyOWsgXAorCXwgYWxwaGEgfCBhbHBoYWV2WzQtOF0gfCBhbHBoYWV2NTYgfCBhbHBoYWV2Nls3OF0gfCBhbHBoYXBjYTVbNjddIFwKKwl8IGFscGhhNjQgfCBhbHBoYTY0ZXZbNC04XSB8IGFscGhhNjRldjU2IHwgYWxwaGE2NGV2Nls3OF0gfCBhbHBoYTY0cGNhNVs2N10gXAorCXwgYW0zM18yLjAgXAorCXwgYXJjIHwgYXJtIHwgYXJtW2JsXWUgfCBhcm1lW2xiXSB8IGFybXZbMjM0NV0gfCBhcm12WzM0NV1bbGJdIHwgYXZyIHwgYXZyMzIgXAorCXwgYmZpbiBcCisJfCBjNHggfCBjbGlwcGVyIFwKKwl8IGQxMHYgfCBkMzB2IHwgZGx4IHwgZHNwMTZ4eCB8IGR2cCBcCisJfCBmaWRvIHwgZnIzMCB8IGZydiBcCisJfCBoODMwMCB8IGg4NTAwIHwgaHBwYSB8IGhwcGExLlswMV0gfCBocHBhMi4wIHwgaHBwYTIuMFtud10gfCBocHBhNjQgXAorCXwgaTM3MCB8IGk4NjAgfCBpOTYwIHwgaWE2NCBcCisJfCBpcDJrIHwgaXEyMDAwIFwKKwl8IGxtMzIgXAorCXwgbTMyYyB8IG0zMnIgfCBtMzJybGUgfCBtNjgwMDAgfCBtNjhrIHwgbTg4ayBcCisJfCBtYXhxIHwgbWIgfCBtaWNyb2JsYXplIHwgbWNvcmUgfCBtZXAgfCBtZXRhZyBcCisJfCBtaXBzIHwgbWlwc2JlIHwgbWlwc2ViIHwgbWlwc2VsIHwgbWlwc2xlIFwKKwl8IG1pcHMxNiBcCisJfCBtaXBzNjQgfCBtaXBzNjRlbCBcCisJfCBtaXBzNjRvY3Rlb24gfCBtaXBzNjRvY3Rlb25lbCBcCisJfCBtaXBzNjRvcmlvbiB8IG1pcHM2NG9yaW9uZWwgXAorCXwgbWlwczY0cjU5MDAgfCBtaXBzNjRyNTkwMGVsIFwKKwl8IG1pcHM2NHZyIHwgbWlwczY0dnJlbCBcCisJfCBtaXBzNjR2cjQxMDAgfCBtaXBzNjR2cjQxMDBlbCBcCisJfCBtaXBzNjR2cjQzMDAgfCBtaXBzNjR2cjQzMDBlbCBcCisJfCBtaXBzNjR2cjUwMDAgfCBtaXBzNjR2cjUwMDBlbCBcCisJfCBtaXBzNjR2cjU5MDAgfCBtaXBzNjR2cjU5MDBlbCBcCisJfCBtaXBzaXNhMzIgfCBtaXBzaXNhMzJlbCBcCisJfCBtaXBzaXNhMzJyMiB8IG1pcHNpc2EzMnIyZWwgXAorCXwgbWlwc2lzYTY0IHwgbWlwc2lzYTY0ZWwgXAorCXwgbWlwc2lzYTY0cjIgfCBtaXBzaXNhNjRyMmVsIFwKKwl8IG1pcHNpc2E2NHNiMSB8IG1pcHNpc2E2NHNiMWVsIFwKKwl8IG1pcHNpc2E2NHNyNzFrIHwgbWlwc2lzYTY0c3I3MWtlbCBcCisJfCBtaXBzdHgzOSB8IG1pcHN0eDM5ZWwgXAorCXwgbW4xMDIwMCB8IG1uMTAzMDAgXAorCXwgbW94aWUgXAorCXwgbXQgXAorCXwgbXNwNDMwIFwKKwl8IG5kczMyIHwgbmRzMzJsZSB8IG5kczMyYmUgXAorCXwgbmlvcyB8IG5pb3MyIFwKKwl8IG5zMTZrIHwgbnMzMmsgXAorCXwgb3IzMiBcCisJfCBwZHAxMCB8IHBkcDExIHwgcGogfCBwamwgXAorCXwgcG93ZXJwYyB8IHBvd2VycGM2NCB8IHBvd2VycGM2NGxlIHwgcG93ZXJwY2xlIHwgcHBjYmUgXAorCXwgcHlyYW1pZCBcCisJfCByeCBcCisJfCBzY29yZSBcCisJfCBzaCB8IHNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzI0XWFlYiB8IHNoWzIzXWUgfCBzaFszNF1lYiB8IHNoZWIgfCBzaGJlIHwgc2hsZSB8IHNoWzEyMzRdbGUgfCBzaDNlbGUgXAorCXwgc2g2NCB8IHNoNjRsZSBcCisJfCBzcGFyYyB8IHNwYXJjNjQgfCBzcGFyYzY0YiB8IHNwYXJjNjR2IHwgc3BhcmM4NnggfCBzcGFyY2xldCB8IHNwYXJjbGl0ZSBcCisJfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYgXAorCXwgc3B1IHwgc3Ryb25nYXJtIFwKKwl8IHRhaG9lIHwgdGh1bWIgfCB0aWM0eCB8IHRpYzU0eCB8IHRpYzU1eCB8IHRpYzZ4IHwgdGljODAgfCB0cm9uIFwKKwl8IHViaWNvbTMyIFwKKwl8IHY4NTAgfCB2ODUwZSBcCisJfCB3ZTMyayBcCisJfCB4ODYgfCB4YzE2eCB8IHhzY2FsZSB8IHhzY2FsZWVbYmxdIHwgeHN0b3JteTE2IHwgeHRlbnNhIFwKKwl8IHo4ayB8IHo4MCkKKwkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisJCTs7CisJYzU0eCkKKwkJYmFzaWNfbWFjaGluZT10aWM1NHgtdW5rbm93bgorCQk7OworCWM1NXgpCisJCWJhc2ljX21hY2hpbmU9dGljNTV4LXVua25vd24KKwkJOzsKKwljNngpCisJCWJhc2ljX21hY2hpbmU9dGljNngtdW5rbm93bgorCQk7OworCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMiB8IHBpY29jaGlwKQorCQkjIE1vdG9yb2xhIDY4SEMxMS8xMi4KKwkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisJCW9zPS1ub25lCisJCTs7CisJbTg4MTEwIHwgbTY4MFsxMjM0Nl0wIHwgbTY4Mz8yIHwgbTY4MzYwIHwgbTUyMDAgfCB2NzAgfCB3NjUgfCB6OGspCisJCTs7CisJbXMxKQorCQliYXNpY19tYWNoaW5lPW10LXVua25vd24KKwkJOzsKKworCSMgV2UgdXNlIGBwYycgcmF0aGVyIHRoYW4gYHVua25vd24nCisJIyBiZWNhdXNlICgxKSB0aGF0J3Mgd2hhdCB0aGV5IG5vcm1hbGx5IGFyZSwgYW5kCisJIyAoMikgdGhlIHdvcmQgInVua25vd24iIHRlbmRzIHRvIGNvbmZ1c2UgYmVnaW5uaW5nIHVzZXJzLgorCWkqODYgfCB4ODZfNjQpCisJICBiYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXBjCisJICA7OworCSMgT2JqZWN0IGlmIG1vcmUgdGhhbiBvbmUgY29tcGFueSBuYW1lIHdvcmQuCisJKi0qLSopCisJCWVjaG8gSW52YWxpZCBjb25maWd1cmF0aW9uIFxgJDFcJzogbWFjaGluZSBcYCRiYXNpY19tYWNoaW5lXCcgbm90IHJlY29nbml6ZWQgMT4mMgorCQlleGl0IDEKKwkJOzsKKwkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGggY29tcGFueSBuYW1lLgorCTU4MC0qIFwKKwl8IGEyOWstKiBcCisJfCBhbHBoYS0qIHwgYWxwaGFldls0LThdLSogfCBhbHBoYWV2NTYtKiB8IGFscGhhZXY2Wzc4XS0qIFwKKwl8IGFscGhhNjQtKiB8IGFscGhhNjRldls0LThdLSogfCBhbHBoYTY0ZXY1Ni0qIHwgYWxwaGE2NGV2Nls3OF0tKiBcCisJfCBhbHBoYXBjYTVbNjddLSogfCBhbHBoYTY0cGNhNVs2N10tKiB8IGFyYy0qIFwKKwl8IGFybS0qICB8IGFybWJlLSogfCBhcm1sZS0qIHwgYXJtZWItKiB8IGFybXYqLSogXAorCXwgYXZyLSogfCBhdnIzMi0qIFwKKwl8IGJmaW4tKiB8IGJzMjAwMC0qIFwKKwl8IGNbMTIzXSogfCBjMzAtKiB8IFtjanRdOTAtKiB8IGM0eC0qIFwKKwl8IGNsaXBwZXItKiB8IGNyYXludi0qIHwgY3lkcmEtKiBcCisJfCBkMTB2LSogfCBkMzB2LSogfCBkbHgtKiBcCisJfCBlbHhzaS0qIFwKKwl8IGYzMFswMV0tKiB8IGY3MDAtKiB8IGZpZG8tKiB8IGZyMzAtKiB8IGZydi0qIHwgZng4MC0qIFwKKwl8IGg4MzAwLSogfCBoODUwMC0qIFwKKwl8IGhwcGEtKiB8IGhwcGExLlswMV0tKiB8IGhwcGEyLjAtKiB8IGhwcGEyLjBbbnddLSogfCBocHBhNjQtKiBcCisJfCBpKjg2LSogfCBpODYwLSogfCBpOTYwLSogfCBpYTY0LSogXAorCXwgaXAyay0qIHwgaXEyMDAwLSogXAorCXwgbG0zMi0qIFwKKwl8IG0zMmMtKiB8IG0zMnItKiB8IG0zMnJsZS0qIFwKKwl8IG02ODAwMC0qIHwgbTY4MFswMTIzNDZdMC0qIHwgbTY4MzYwLSogfCBtNjgzPzItKiB8IG02OGstKiBcCisJfCBtODgxMTAtKiB8IG04OGstKiB8IG1heHEtKiB8IG1jb3JlLSogfCBtZXRhZy0qIHwgbWljcm9ibGF6ZS0qIFwKKwl8IG1pcHMtKiB8IG1pcHNiZS0qIHwgbWlwc2ViLSogfCBtaXBzZWwtKiB8IG1pcHNsZS0qIFwKKwl8IG1pcHMxNi0qIFwKKwl8IG1pcHM2NC0qIHwgbWlwczY0ZWwtKiBcCisJfCBtaXBzNjRvY3Rlb24tKiB8IG1pcHM2NG9jdGVvbmVsLSogXAorCXwgbWlwczY0b3Jpb24tKiB8IG1pcHM2NG9yaW9uZWwtKiBcCisJfCBtaXBzNjRyNTkwMC0qIHwgbWlwczY0cjU5MDBlbC0qIFwKKwl8IG1pcHM2NHZyLSogfCBtaXBzNjR2cmVsLSogXAorCXwgbWlwczY0dnI0MTAwLSogfCBtaXBzNjR2cjQxMDBlbC0qIFwKKwl8IG1pcHM2NHZyNDMwMC0qIHwgbWlwczY0dnI0MzAwZWwtKiBcCisJfCBtaXBzNjR2cjUwMDAtKiB8IG1pcHM2NHZyNTAwMGVsLSogXAorCXwgbWlwczY0dnI1OTAwLSogfCBtaXBzNjR2cjU5MDBlbC0qIFwKKwl8IG1pcHNpc2EzMi0qIHwgbWlwc2lzYTMyZWwtKiBcCisJfCBtaXBzaXNhMzJyMi0qIHwgbWlwc2lzYTMycjJlbC0qIFwKKwl8IG1pcHNpc2E2NC0qIHwgbWlwc2lzYTY0ZWwtKiBcCisJfCBtaXBzaXNhNjRyMi0qIHwgbWlwc2lzYTY0cjJlbC0qIFwKKwl8IG1pcHNpc2E2NHNiMS0qIHwgbWlwc2lzYTY0c2IxZWwtKiBcCisJfCBtaXBzaXNhNjRzcjcxay0qIHwgbWlwc2lzYTY0c3I3MWtlbC0qIFwKKwl8IG1pcHN0eDM5LSogfCBtaXBzdHgzOWVsLSogXAorCXwgbW1peC0qIFwKKwl8IG10LSogXAorCXwgbXNwNDMwLSogXAorCXwgbmRzMzItKiB8IG5kczMybGUtKiB8IG5kczMyYmUtKiBcCisJfCBuaW9zLSogfCBuaW9zMi0qIFwKKwl8IG5vbmUtKiB8IG5wMS0qIHwgbnMxNmstKiB8IG5zMzJrLSogXAorCXwgb3Jpb24tKiBcCisJfCBwZHAxMC0qIHwgcGRwMTEtKiB8IHBqLSogfCBwamwtKiB8IHBuLSogfCBwb3dlci0qIFwKKwl8IHBvd2VycGMtKiB8IHBvd2VycGM2NC0qIHwgcG93ZXJwYzY0bGUtKiB8IHBvd2VycGNsZS0qIHwgcHBjYmUtKiBcCisJfCBweXJhbWlkLSogXAorCXwgcm9tcC0qIHwgcnM2MDAwLSogfCByeC0qIFwKKwl8IHNoLSogfCBzaFsxMjM0XS0qIHwgc2hbMjRdYS0qIHwgc2hbMjRdYWViLSogfCBzaFsyM11lLSogfCBzaFszNF1lYi0qIHwgc2hlYi0qIHwgc2hiZS0qIFwKKwl8IHNobGUtKiB8IHNoWzEyMzRdbGUtKiB8IHNoM2VsZS0qIHwgc2g2NC0qIHwgc2g2NGxlLSogXAorCXwgc3BhcmMtKiB8IHNwYXJjNjQtKiB8IHNwYXJjNjRiLSogfCBzcGFyYzY0di0qIHwgc3BhcmM4NngtKiB8IHNwYXJjbGV0LSogXAorCXwgc3BhcmNsaXRlLSogXAorCXwgc3BhcmN2OC0qIHwgc3BhcmN2OS0qIHwgc3BhcmN2OWItKiB8IHNwYXJjdjl2LSogfCBzdHJvbmdhcm0tKiB8IHN2MS0qIHwgc3g/LSogXAorCXwgdGFob2UtKiB8IHRodW1iLSogXAorCXwgdGljMzAtKiB8IHRpYzR4LSogfCB0aWM1NHgtKiB8IHRpYzU1eC0qIHwgdGljNngtKiB8IHRpYzgwLSogXAorCXwgdGlsZS0qIHwgdGlsZWd4LSogXAorCXwgdHJvbi0qIFwKKwl8IHViaWNvbTMyLSogXAorCXwgdjg1MC0qIHwgdjg1MGUtKiB8IHZheC0qIFwKKwl8IHdlMzJrLSogXAorCXwgeDg2LSogfCB4ODZfNjQtKiB8IHhjMTZ4LSogfCB4cHMxMDAtKiB8IHhzY2FsZS0qIHwgeHNjYWxlZVtibF0tKiBcCisJfCB4c3Rvcm15MTYtKiB8IHh0ZW5zYSotKiBcCisJfCB5bXAtKiBcCisJfCB6OGstKiB8IHo4MC0qKQorCQk7OworCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aG91dCBjb21wYW55IG5hbWUsIHdpdGggZ2xvYiBtYXRjaC4KKwl4dGVuc2EqKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJOzsKKwkjIFJlY29nbml6ZSB0aGUgdmFyaW91cyBtYWNoaW5lIG5hbWVzIGFuZCBhbGlhc2VzIHdoaWNoIHN0YW5kCisJIyBmb3IgYSBDUFUgdHlwZSBhbmQgYSBjb21wYW55IGFuZCBzb21ldGltZXMgZXZlbiBhbiBPUy4KKwkzODZic2QpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCisJCW9zPS1ic2QKKwkJOzsKKwkzYjEgfCA3MzAwIHwgNzMwMC1hdHQgfCBhdHQtNzMwMCB8IHBjNzMwMCB8IHNhZmFyaSB8IHVuaXhwYykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtYXR0CisJCTs7CisJM2IqKQorCQliYXNpY19tYWNoaW5lPXdlMzJrLWF0dAorCQk7OworCWEyOWtoaWYpCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LXVkaQorCQk7OworCWFiYWN1cykKKwkJYmFzaWNfbWFjaGluZT1hYmFjdXMtdW5rbm93bgorCQk7OworCWFkb2JlNjhrKQorCQliYXNpY19tYWNoaW5lPW02ODAxMC1hZG9iZQorCQlvcz0tc2NvdXQKKwkJOzsKKwlhbGxpYW50IHwgZng4MCkKKwkJYmFzaWNfbWFjaGluZT1meDgwLWFsbGlhbnQKKwkJOzsKKwlhbHRvcyB8IGFsdG9zMzA2OCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFsdG9zCisJCTs7CisJYW0yOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay1ub25lCisJCW9zPS1ic2QKKwkJOzsKKwlhbWQ2NCkKKwkJYmFzaWNfbWFjaGluZT14ODZfNjQtcGMKKwkJOzsKKwlhbWQ2NC0qKQorCQliYXNpY19tYWNoaW5lPXg4Nl82NC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCWFtZGFobCkKKwkJYmFzaWNfbWFjaGluZT01ODAtYW1kYWhsCisJCW9zPS1zeXN2CisJCTs7CisJYW1pZ2EgfCBhbWlnYS0qKQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQk7OworCWFtaWdhb3MgfCBhbWlnYWRvcykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJb3M9LWFtaWdhb3MKKwkJOzsKKwlhbWlnYXVuaXggfCBhbWl4KQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQlvcz0tc3lzdjQKKwkJOzsKKwlhcG9sbG82OCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwb2xsbworCQlvcz0tc3lzdgorCQk7OworCWFwb2xsbzY4YnNkKQorCQliYXNpY19tYWNoaW5lPW02OGstYXBvbGxvCisJCW9zPS1ic2QKKwkJOzsKKwlhcm9zKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LWFyb3MKKwkJOzsKKwlhdXgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcHBsZQorCQlvcz0tYXV4CisJCTs7CisJYmFsYW5jZSkKKwkJYmFzaWNfbWFjaGluZT1uczMyay1zZXF1ZW50CisJCW9zPS1keW5peAorCQk7OworCWJsYWNrZmluKQorCQliYXNpY19tYWNoaW5lPWJmaW4tdW5rbm93bgorCQlvcz0tbGludXgKKwkJOzsKKwlibGFja2Zpbi0qKQorCQliYXNpY19tYWNoaW5lPWJmaW4tYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJb3M9LWxpbnV4CisJCTs7CisJYmx1ZWdlbmUqKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtaWJtCisJCW9zPS1jbmsKKwkJOzsKKwljNTR4LSopCisJCWJhc2ljX21hY2hpbmU9dGljNTR4LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJYzU1eC0qKQorCQliYXNpY19tYWNoaW5lPXRpYzU1eC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCWM2eC0qKQorCQliYXNpY19tYWNoaW5lPXRpYzZ4LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJYzkwKQorCQliYXNpY19tYWNoaW5lPWM5MC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwljZWdjYykKKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorCQlvcz0tY2VnY2MKKwkJOzsKKwljb252ZXgtYzEpCisJCWJhc2ljX21hY2hpbmU9YzEtY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzIpCisJCWJhc2ljX21hY2hpbmU9YzItY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzMyKQorCQliYXNpY19tYWNoaW5lPWMzMi1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMzQpCisJCWJhc2ljX21hY2hpbmU9YzM0LWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMzOCkKKwkJYmFzaWNfbWFjaGluZT1jMzgtY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljcmF5IHwgajkwKQorCQliYXNpY19tYWNoaW5lPWo5MC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwljcmF5bnYpCisJCWJhc2ljX21hY2hpbmU9Y3JheW52LWNyYXkKKwkJb3M9LXVuaWNvc21wCisJCTs7CisJY3IxNiB8IGNyMTYtKikKKwkJYmFzaWNfbWFjaGluZT1jcjE2LXVua25vd24KKwkJb3M9LWVsZgorCQk7OworCWNyZHMgfCB1bm9zKQorCQliYXNpY19tYWNoaW5lPW02OGstY3JkcworCQk7OworCWNyaXN2MzIgfCBjcmlzdjMyLSogfCBldHJheGZzKikKKwkJYmFzaWNfbWFjaGluZT1jcmlzdjMyLWF4aXMKKwkJOzsKKwljcmlzIHwgY3Jpcy0qIHwgZXRyYXgqKQorCQliYXNpY19tYWNoaW5lPWNyaXMtYXhpcworCQk7OworCWNyeCkKKwkJYmFzaWNfbWFjaGluZT1jcngtdW5rbm93bgorCQlvcz0tZWxmCisJCTs7CisJZGEzMCB8IGRhMzAtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWRhMzAKKwkJOzsKKwlkZWNzdGF0aW9uIHwgZGVjc3RhdGlvbi0zMTAwIHwgcG1heCB8IHBtYXgtKiB8IHBtaW4gfCBkZWMzMTAwIHwgZGVjc3RhdG4pCisJCWJhc2ljX21hY2hpbmU9bWlwcy1kZWMKKwkJOzsKKwlkZWNzeXN0ZW0xMCogfCBkZWMxMCopCisJCWJhc2ljX21hY2hpbmU9cGRwMTAtZGVjCisJCW9zPS10b3BzMTAKKwkJOzsKKwlkZWNzeXN0ZW0yMCogfCBkZWMyMCopCisJCWJhc2ljX21hY2hpbmU9cGRwMTAtZGVjCisJCW9zPS10b3BzMjAKKwkJOzsKKwlkZWx0YSB8IDMzMDAgfCBtb3Rvcm9sYS0zMzAwIHwgbW90b3JvbGEtZGVsdGEgXAorCSAgICAgIHwgMzMwMC1tb3Rvcm9sYSB8IGRlbHRhLW1vdG9yb2xhKQorCQliYXNpY19tYWNoaW5lPW02OGstbW90b3JvbGEKKwkJOzsKKwlkZWx0YTg4KQorCQliYXNpY19tYWNoaW5lPW04OGstbW90b3JvbGEKKwkJb3M9LXN5c3YzCisJCTs7CisJZGljb3MpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQlvcz0tZGljb3MKKwkJOzsKKwlkamdwcCkKKwkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCisJCW9zPS1tc2Rvc2RqZ3BwCisJCTs7CisJZHB4MjAgfCBkcHgyMC0qKQorCQliYXNpY19tYWNoaW5lPXJzNjAwMC1idWxsCisJCW9zPS1ib3N4CisJCTs7CisJZHB4MiogfCBkcHgyKi1idWxsKQorCQliYXNpY19tYWNoaW5lPW02OGstYnVsbAorCQlvcz0tc3lzdjMKKwkJOzsKKwllYm1vbjI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tZWJtb24KKwkJOzsKKwllbHhzaSkKKwkJYmFzaWNfbWFjaGluZT1lbHhzaS1lbHhzaQorCQlvcz0tYnNkCisJCTs7CisJZW5jb3JlIHwgdW1heCB8IG1tYXgpCisJCWJhc2ljX21hY2hpbmU9bnMzMmstZW5jb3JlCisJCTs7CisJZXMxODAwIHwgT1NFNjhrIHwgb3NlNjhrIHwgb3NlIHwgT1NFKQorCQliYXNpY19tYWNoaW5lPW02OGstZXJpY3Nzb24KKwkJb3M9LW9zZQorCQk7OworCWZ4MjgwMCkKKwkJYmFzaWNfbWFjaGluZT1pODYwLWFsbGlhbnQKKwkJOzsKKwlnZW5peCkKKwkJYmFzaWNfbWFjaGluZT1uczMyay1ucworCQk7OworCWdtaWNybykKKwkJYmFzaWNfbWFjaGluZT10cm9uLWdtaWNybworCQlvcz0tc3lzdgorCQk7OworCWdvMzIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tZ28zMgorCQk7OworCWgzMDUwciogfCBoaXV4KikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhpdGFjaGkKKwkJb3M9LWhpdXh3ZTIKKwkJOzsKKwloODMwMGhtcykKKwkJYmFzaWNfbWFjaGluZT1oODMwMC1oaXRhY2hpCisJCW9zPS1obXMKKwkJOzsKKwloODMwMHhyYXkpCisJCWJhc2ljX21hY2hpbmU9aDgzMDAtaGl0YWNoaQorCQlvcz0teHJheQorCQk7OworCWg4NTAwaG1zKQorCQliYXNpY19tYWNoaW5lPWg4NTAwLWhpdGFjaGkKKwkJb3M9LWhtcworCQk7OworCWhhcnJpcykKKwkJYmFzaWNfbWFjaGluZT1tODhrLWhhcnJpcworCQlvcz0tc3lzdjMKKwkJOzsKKwlocDMwMC0qKQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJOzsKKwlocDMwMGJzZCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCW9zPS1ic2QKKwkJOzsKKwlocDMwMGhwdXgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQlvcz0taHB1eAorCQk7OworCWhwM2s5WzAtOV1bMC05XSB8IGhwOVswLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAorCQk7OworCWhwOWsyWzAtOV1bMC05XSB8IGhwOWszMVswLTldKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1ocAorCQk7OworCWhwOWszWzItOV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCTs7CisJaHA5azZbMC05XVswLTldIHwgaHA2WzAtOV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4wLWhwCisJCTs7CisJaHA5azdbMC03OV1bMC05XSB8IGhwN1swLTc5XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrNzhbMC05XSB8IGhwNzhbMC05XSkKKwkJIyBGSVhNRTogcmVhbGx5IGhwcGEyLjAtaHAKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azhbNjddMSB8IGhwOFs2N10xIHwgaHA5azgwWzI0XSB8IGhwODBbMjRdIHwgaHA5azhbNzhdOSB8IGhwOFs3OF05IHwgaHA5azg5MyB8IGhwODkzKQorCQkjIEZJWE1FOiByZWFsbHkgaHBwYTIuMC1ocAorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrOFswLTldWzEzNjc5XSB8IGhwOFswLTldWzEzNjc5XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azhbMC05XVswLTldIHwgaHA4WzAtOV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4wLWhwCisJCTs7CisJaHBwYS1uZXh0KQorCQlvcz0tbmV4dHN0ZXAzCisJCTs7CisJaHBwYW9zZikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCW9zPS1vc2YKKwkJOzsKKwlocHBybykKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCW9zPS1wcm9lbGYKKwkJOzsKKwlpMzcwLWlibSogfCBpYm0qKQorCQliYXNpY19tYWNoaW5lPWkzNzAtaWJtCisJCTs7CisjIEknbSBub3Qgc3VyZSB3aGF0ICJTeXN2MzIiIG1lYW5zLiAgU2hvdWxkIHRoaXMgYmUgc3lzdjMuMj8KKwlpKjg2djMyKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXN5c3YzMgorCQk7OworCWkqODZ2NCopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc3lzdjQKKwkJOzsKKwlpKjg2dikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zeXN2CisJCTs7CisJaSo4NnNvbDIpCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc29sYXJpczIKKwkJOzsKKwlpMzg2bWFjaCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LW1hY2gKKwkJb3M9LW1hY2gKKwkJOzsKKwlpMzg2LXZzdGEgfCB2c3RhKQorCQliYXNpY19tYWNoaW5lPWkzODYtdW5rbm93bgorCQlvcz0tdnN0YQorCQk7OworCWlyaXMgfCBpcmlzNGQpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zZ2kKKwkJY2FzZSAkb3MgaW4KKwkJICAgIC1pcml4KikKKwkJCTs7CisJCSAgICAqKQorCQkJb3M9LWlyaXg0CisJCQk7OworCQllc2FjCisJCTs7CisJaXNpNjggfCBpc2kpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1pc2kKKwkJb3M9LXN5c3YKKwkJOzsKKwltNjhrbm9tbXUpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1saW51eAorCQk7OworCW02OGtub21tdS0qKQorCQliYXNpY19tYWNoaW5lPW02OGstYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJb3M9LWxpbnV4CisJCTs7CisJbTg4ay1vbXJvbiopCisJCWJhc2ljX21hY2hpbmU9bTg4ay1vbXJvbgorCQk7OworCW1hZ251bSB8IG0zMjMwKQorCQliYXNpY19tYWNoaW5lPW1pcHMtbWlwcworCQlvcz0tc3lzdgorCQk7OworCW1lcmxpbikKKwkJYmFzaWNfbWFjaGluZT1uczMyay11dGVrCisJCW9zPS1zeXN2CisJCTs7CisJbWljcm9ibGF6ZSkKKwkJYmFzaWNfbWFjaGluZT1taWNyb2JsYXplLXhpbGlueAorCQk7OworCW1pbmd3MzIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tbWluZ3czMgorCQk7OworCW1pbmd3MzJjZSkKKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorCQlvcz0tbWluZ3czMmNlCisJCTs7CisJbWluaWZyYW1lKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1jb252ZXJnZW50CisJCTs7CisJKm1pbnQgfCAtbWludFswLTldKiB8ICpNaU5UIHwgKk1pTlRbMC05XSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hdGFyaQorCQlvcz0tbWludAorCQk7OworCW1pcHNFRSogfCBlZSB8IHBzMikKKwkJYmFzaWNfbWFjaGluZT1taXBzNjRyNTkwMGVsLXNjZWkKKwkJY2FzZSAkb3MgaW4KKwkJICAgIC1saW51eCopCisJCQk7OworCQkgICAgKikKKwkJCW9zPS1lbGYKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwlpb3ApCisJCWJhc2ljX21hY2hpbmU9bWlwc2VsLXNjZWkKKwkJb3M9LWlyeAorCQk7OworCWR2cCkKKwkJYmFzaWNfbWFjaGluZT1kdnAtc2NlaQorCQlvcz0tZWxmCisJCTs7CisJbWlwczMqLSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgLWUgJ3MvbWlwczMvbWlwczY0LydgCisJCTs7CisJbWlwczMqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21pcHMzL21pcHM2NC8nYC11bmtub3duCisJCTs7CisJbW9uaXRvcikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXJvbTY4aworCQlvcz0tY29mZgorCQk7OworCW1vcnBob3MpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy11bmtub3duCisJCW9zPS1tb3JwaG9zCisJCTs7CisJbXNkb3MpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tbXNkb3MKKwkJOzsKKwltczEtKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9tczEtL210LS8nYAorCQk7OworCW12cykKKwkJYmFzaWNfbWFjaGluZT1pMzcwLWlibQorCQlvcz0tbXZzCisJCTs7CisJbmNyMzAwMCkKKwkJYmFzaWNfbWFjaGluZT1pNDg2LW5jcgorCQlvcz0tc3lzdjQKKwkJOzsKKwluZXRic2QzODYpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCisJCW9zPS1uZXRic2QKKwkJOzsKKwluZXR3aW5kZXIpCisJCWJhc2ljX21hY2hpbmU9YXJtdjRsLXJlYmVsCisJCW9zPS1saW51eAorCQk7OworCW5ld3MgfCBuZXdzNzAwIHwgbmV3czgwMCB8IG5ld3M5MDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZXdzMTAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMzAtc29ueQorCQlvcz0tbmV3c29zCisJCTs7CisJbmV3cy0zNjAwIHwgcmlzYy1uZXdzKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc29ueQorCQlvcz0tbmV3c29zCisJCTs7CisJbmVjdjcwKQorCQliYXNpY19tYWNoaW5lPXY3MC1uZWMKKwkJb3M9LXN5c3YKKwkJOzsKKwluZXh0IHwgbSotbmV4dCApCisJCWJhc2ljX21hY2hpbmU9bTY4ay1uZXh0CisJCWNhc2UgJG9zIGluCisJCSAgICAtbmV4dHN0ZXAqICkKKwkJCTs7CisJCSAgICAtbnMyKikKKwkJICAgICAgb3M9LW5leHRzdGVwMgorCQkJOzsKKwkJICAgICopCisJCSAgICAgIG9zPS1uZXh0c3RlcDMKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwluaDMwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay1oYXJyaXMKKwkJb3M9LWN4dXgKKwkJOzsKKwluaFs0NV0wMDApCisJCWJhc2ljX21hY2hpbmU9bTg4ay1oYXJyaXMKKwkJb3M9LWN4dXgKKwkJOzsKKwluaW5keTk2MCkKKwkJYmFzaWNfbWFjaGluZT1pOTYwLWludGVsCisJCW9zPS1uaW5keQorCQk7OworCW1vbjk2MCkKKwkJYmFzaWNfbWFjaGluZT1pOTYwLWludGVsCisJCW9zPS1tb245NjAKKwkJOzsKKwlub25zdG9wdXgpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1jb21wYXEKKwkJb3M9LW5vbnN0b3B1eAorCQk7OworCW5wMSkKKwkJYmFzaWNfbWFjaGluZT1ucDEtZ291bGQKKwkJOzsKKwluZW8tdGFuZGVtKQorCQliYXNpY19tYWNoaW5lPW5lby10YW5kZW0KKwkJOzsKKwluc2UtdGFuZGVtKQorCQliYXNpY19tYWNoaW5lPW5zZS10YW5kZW0KKwkJOzsKKwluc3ItdGFuZGVtKQorCQliYXNpY19tYWNoaW5lPW5zci10YW5kZW0KKwkJOzsKKwlvcDUwbi0qIHwgb3A2MGMtKikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLW9raQorCQlvcz0tcHJvZWxmCisJCTs7CisJb3BlbnJpc2MgfCBvcGVucmlzYy0qKQorCQliYXNpY19tYWNoaW5lPW9yMzItdW5rbm93bgorCQk7OworCW9zNDAwKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtaWJtCisJCW9zPS1vczQwMAorCQk7OworCU9TRTY4MDAwIHwgb3NlNjgwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWVyaWNzc29uCisJCW9zPS1vc2UKKwkJOzsKKwlvczY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5vbmUKKwkJb3M9LW9zNjhrCisJCTs7CisJcGEtaGl0YWNoaSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhpdGFjaGkKKwkJb3M9LWhpdXh3ZTIKKwkJOzsKKwlwYXJhZ29uKQorCQliYXNpY19tYWNoaW5lPWk4NjAtaW50ZWwKKwkJb3M9LW9zZgorCQk7OworCXBhcmlzYykKKwkJYmFzaWNfbWFjaGluZT1ocHBhLXVua25vd24KKwkJb3M9LWxpbnV4CisJCTs7CisJcGFyaXNjLSopCisJCWJhc2ljX21hY2hpbmU9aHBwYS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQlvcz0tbGludXgKKwkJOzsKKwlwYmQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtdHRpCisJCTs7CisJcGJiKQorCQliYXNpY19tYWNoaW5lPW02OGstdHRpCisJCTs7CisJcGM1MzIgfCBwYzUzMi0qKQorCQliYXNpY19tYWNoaW5lPW5zMzJrLXBjNTMyCisJCTs7CisJcGM5OCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCTs7CisJcGM5OC0qKQorCQliYXNpY19tYWNoaW5lPWkzODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtIHwgcDUgfCBrNSB8IGs2IHwgbmV4Z2VuIHwgdmlhYzMpCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1wYworCQk7OworCXBlbnRpdW1wcm8gfCBwNiB8IDZ4ODYgfCBhdGhsb24gfCBhdGhsb25fKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCTs7CisJcGVudGl1bWlpIHwgcGVudGl1bTIgfCBwZW50aXVtaWlpIHwgcGVudGl1bTMpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQk7OworCXBlbnRpdW00KQorCQliYXNpY19tYWNoaW5lPWk3ODYtcGMKKwkJOzsKKwlwZW50aXVtLSogfCBwNS0qIHwgazUtKiB8IGs2LSogfCBuZXhnZW4tKiB8IHZpYWMzLSopCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBlbnRpdW1wcm8tKiB8IHA2LSogfCA2eDg2LSogfCBhdGhsb24tKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bWlpLSogfCBwZW50aXVtMi0qIHwgcGVudGl1bWlpaS0qIHwgcGVudGl1bTMtKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bTQtKikKKwkJYmFzaWNfbWFjaGluZT1pNzg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcG4pCisJCWJhc2ljX21hY2hpbmU9cG4tZ291bGQKKwkJOzsKKwlwb3dlcikJYmFzaWNfbWFjaGluZT1wb3dlci1pYm0KKwkJOzsKKwlwcGMpCWJhc2ljX21hY2hpbmU9cG93ZXJwYy11bmtub3duCisJCTs7CisJcHBjLSopCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBwY2xlIHwgcG93ZXJwY2xpdHRsZSB8IHBwYy1sZSB8IHBvd2VycGMtbGl0dGxlKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS11bmtub3duCisJCTs7CisJcHBjbGUtKiB8IHBvd2VycGNsaXR0bGUtKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjbGUtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwcGM2NCkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtdW5rbm93bgorCQk7OworCXBwYzY0LSopIGJhc2ljX21hY2hpbmU9cG93ZXJwYzY0LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcHBjNjRsZSB8IHBvd2VycGM2NGxpdHRsZSB8IHBwYzY0LWxlIHwgcG93ZXJwYzY0LWxpdHRsZSkKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjRsZS11bmtub3duCisJCTs7CisJcHBjNjRsZS0qIHwgcG93ZXJwYzY0bGl0dGxlLSopCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYzY0bGUtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwczIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1pYm0KKwkJOzsKKwlwdzMyKQorCQliYXNpY19tYWNoaW5lPWk1ODYtdW5rbm93bgorCQlvcz0tcHczMgorCQk7OworCXJkb3MpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tcmRvcworCQk7OworCXJvbTY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXJvbTY4aworCQlvcz0tY29mZgorCQk7OworCXJtWzQ2XTAwKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2llbWVucworCQk7OworCXJ0cGMgfCBydHBjLSopCisJCWJhc2ljX21hY2hpbmU9cm9tcC1pYm0KKwkJOzsKKwlzMzkwIHwgczM5MC0qKQorCQliYXNpY19tYWNoaW5lPXMzOTAtaWJtCisJCTs7CisJczM5MHggfCBzMzkweC0qKQorCQliYXNpY19tYWNoaW5lPXMzOTB4LWlibQorCQk7OworCXNhMjkyMDApCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LXVkaQorCQk7OworCXNiMSkKKwkJYmFzaWNfbWFjaGluZT1taXBzaXNhNjRzYjEtdW5rbm93bgorCQk7OworCXNiMWVsKQorCQliYXNpY19tYWNoaW5lPW1pcHNpc2E2NHNiMWVsLXVua25vd24KKwkJOzsKKwlzZGUpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTMyLXNkZQorCQlvcz0tZWxmCisJCTs7CisJc2VpKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2VpCisJCW9zPS1zZWl1eAorCQk7OworCXNlcXVlbnQpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50CisJCTs7CisJc2gpCisJCWJhc2ljX21hY2hpbmU9c2gtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJc2g1ZWwpCisJCWJhc2ljX21hY2hpbmU9c2g1bGUtdW5rbm93bgorCQk7OworCXNoNjQpCisJCWJhc2ljX21hY2hpbmU9c2g2NC11bmtub3duCisJCTs7CisJc3BhcmNsaXRlLXdycyB8IHNpbXNvLXdycykKKwkJYmFzaWNfbWFjaGluZT1zcGFyY2xpdGUtd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJc3BzNykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKKwkJb3M9LXN5c3YyCisJCTs7CisJc3B1cikKKwkJYmFzaWNfbWFjaGluZT1zcHVyLXVua25vd24KKwkJOzsKKwlzdDIwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay10YW5kZW0KKwkJOzsKKwlzdHJhdHVzKQorCQliYXNpY19tYWNoaW5lPWk4NjAtc3RyYXR1cworCQlvcz0tc3lzdjQKKwkJOzsKKwlzdW4yKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KKwkJOzsKKwlzdW4yb3MzKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KKwkJb3M9LXN1bm9zMworCQk7OworCXN1bjJvczQpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgorCQlvcz0tc3Vub3M0CisJCTs7CisJc3VuM29zMykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQlvcz0tc3Vub3MzCisJCTs7CisJc3VuM29zNCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQlvcz0tc3Vub3M0CisJCTs7CisJc3VuNG9zMykKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJb3M9LXN1bm9zMworCQk7OworCXN1bjRvczQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCW9zPS1zdW5vczQKKwkJOzsKKwlzdW40c29sMikKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJb3M9LXNvbGFyaXMyCisJCTs7CisJc3VuMyB8IHN1bjMtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQk7OworCXN1bjQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCTs7CisJc3VuMzg2IHwgc3VuMzg2aSB8IHJvYWRydW5uZXIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zdW4KKwkJOzsKKwlzdjEpCisJCWJhc2ljX21hY2hpbmU9c3YxLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXN5bW1ldHJ5KQorCQliYXNpY19tYWNoaW5lPWkzODYtc2VxdWVudAorCQlvcz0tZHluaXgKKwkJOzsKKwl0M2UpCisJCWJhc2ljX21hY2hpbmU9YWxwaGFldjUtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJdDkwKQorCQliYXNpY19tYWNoaW5lPXQ5MC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwkjIFRoaXMgbXVzdCBiZSBtYXRjaGVkIGJlZm9yZSB0aWxlKi4KKwl0aWxlZ3gqKQorCQliYXNpY19tYWNoaW5lPXRpbGVneC11bmtub3duCisJCW9zPS1saW51eC1nbnUKKwkJOzsKKwl0aWxlKikKKwkJYmFzaWNfbWFjaGluZT10aWxlLXVua25vd24KKwkJb3M9LWxpbnV4LWdudQorCQk7OworCXR4MzkpCisJCWJhc2ljX21hY2hpbmU9bWlwc3R4MzktdW5rbm93bgorCQk7OworCXR4MzllbCkKKwkJYmFzaWNfbWFjaGluZT1taXBzdHgzOWVsLXVua25vd24KKwkJOzsKKwl0b2FkMSkKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC14a2wKKwkJb3M9LXRvcHMyMAorCQk7OworCXRvd2VyIHwgdG93ZXItMzIpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1uY3IKKwkJOzsKKwl0cGYpCisJCWJhc2ljX21hY2hpbmU9czM5MHgtaWJtCisJCW9zPS10cGYKKwkJOzsKKwl1ZGkyOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LXVkaQorCQk7OworCXVsdHJhMykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLW55dQorCQlvcz0tc3ltMQorCQk7OworCXY4MTAgfCBuZWN2ODEwKQorCQliYXNpY19tYWNoaW5lPXY4MTAtbmVjCisJCW9zPS1ub25lCisJCTs7CisJdmF4dikKKwkJYmFzaWNfbWFjaGluZT12YXgtZGVjCisJCW9zPS1zeXN2CisJCTs7CisJdm1zKQorCQliYXNpY19tYWNoaW5lPXZheC1kZWMKKwkJb3M9LXZtcworCQk7OworCXZwcCp8dnh8dngtKikKKwkJYmFzaWNfbWFjaGluZT1mMzAxLWZ1aml0c3UKKwkJOzsKKwl2eHdvcmtzOTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJdnh3b3JrczY4KQorCQliYXNpY19tYWNoaW5lPW02OGstd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJdnh3b3JrczI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLXdycworCQlvcz0tdnh3b3JrcworCQk7OworCXc2NSopCisJCWJhc2ljX21hY2hpbmU9dzY1LXdkYworCQlvcz0tbm9uZQorCQk7OworCXc4OWstKikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLXdpbmJvbmQKKwkJb3M9LXByb2VsZgorCQk7OworCXhib3gpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQlvcz0tbWluZ3czMgorCQk7OworCXhwcyB8IHhwczEwMCkKKwkJYmFzaWNfbWFjaGluZT14cHMxMDAtaG9uZXl3ZWxsCisJCTs7CisJeW1wKQorCQliYXNpY19tYWNoaW5lPXltcC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwl6OGstKi1jb2ZmKQorCQliYXNpY19tYWNoaW5lPXo4ay11bmtub3duCisJCW9zPS1zaW0KKwkJOzsKKwl6ODAtKi1jb2ZmKQorCQliYXNpY19tYWNoaW5lPXo4MC11bmtub3duCisJCW9zPS1zaW0KKwkJOzsKKwlub25lKQorCQliYXNpY19tYWNoaW5lPW5vbmUtbm9uZQorCQlvcz0tbm9uZQorCQk7OworCisjIEhlcmUgd2UgaGFuZGxlIHRoZSBkZWZhdWx0IG1hbnVmYWN0dXJlciBvZiBjZXJ0YWluIENQVSB0eXBlcy4gIEl0IGlzIGluCisjIHNvbWUgY2FzZXMgdGhlIG9ubHkgbWFudWZhY3R1cmVyLCBpbiBvdGhlcnMsIGl0IGlzIHRoZSBtb3N0IHBvcHVsYXIuCisJdzg5aykKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLXdpbmJvbmQKKwkJOzsKKwlvcDUwbikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLW9raQorCQk7OworCW9wNjBjKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCTs7CisJcm9tcCkKKwkJYmFzaWNfbWFjaGluZT1yb21wLWlibQorCQk7OworCW1taXgpCisJCWJhc2ljX21hY2hpbmU9bW1peC1rbnV0aAorCQk7OworCXJzNjAwMCkKKwkJYmFzaWNfbWFjaGluZT1yczYwMDAtaWJtCisJCTs7CisJdmF4KQorCQliYXNpY19tYWNoaW5lPXZheC1kZWMKKwkJOzsKKwlwZHAxMCkKKwkJIyB0aGVyZSBhcmUgbWFueSBjbG9uZXMsIHNvIERFQyBpcyBub3QgYSBzYWZlIGJldAorCQliYXNpY19tYWNoaW5lPXBkcDEwLXVua25vd24KKwkJOzsKKwlwZHAxMSkKKwkJYmFzaWNfbWFjaGluZT1wZHAxMS1kZWMKKwkJOzsKKwl3ZTMyaykKKwkJYmFzaWNfbWFjaGluZT13ZTMyay1hdHQKKwkJOzsKKwlzaFsxMjM0XSB8IHNoWzI0XWEgfCBzaFsyNF1hZWIgfCBzaFszNF1lYiB8IHNoWzEyMzRdbGUgfCBzaFsyM11lbGUpCisJCWJhc2ljX21hY2hpbmU9c2gtdW5rbm93bgorCQk7OworCXNwYXJjIHwgc3BhcmN2OCB8IHNwYXJjdjkgfCBzcGFyY3Y5YiB8IHNwYXJjdjl2KQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQk7OworCWN5ZHJhKQorCQliYXNpY19tYWNoaW5lPWN5ZHJhLWN5ZHJvbWUKKwkJOzsKKwlvcmlvbikKKwkJYmFzaWNfbWFjaGluZT1vcmlvbi1oaWdobGV2ZWwKKwkJOzsKKwlvcmlvbjEwNSkKKwkJYmFzaWNfbWFjaGluZT1jbGlwcGVyLWhpZ2hsZXZlbAorCQk7OworCW1hYyB8IG1wdyB8IG1hYy1tcHcpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcHBsZQorCQk7OworCXBtYWMgfCBwbWFjLW1wdykKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWFwcGxlCisJCTs7CisJKi11bmtub3duKQorCQkjIE1ha2Ugc3VyZSB0byBtYXRjaCBhbiBhbHJlYWR5LWNhbm9uaWNhbGl6ZWQgbWFjaGluZSBuYW1lLgorCQk7OworCSopCisJCWVjaG8gSW52YWxpZCBjb25maWd1cmF0aW9uIFxgJDFcJzogbWFjaGluZSBcYCRiYXNpY19tYWNoaW5lXCcgbm90IHJlY29nbml6ZWQgMT4mMgorCQlleGl0IDEKKwkJOzsKK2VzYWMKKworIyBIZXJlIHdlIGNhbm9uaWNhbGl6ZSBjZXJ0YWluIGFsaWFzZXMgZm9yIG1hbnVmYWN0dXJlcnMuCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisJKi1kaWdpdGFsKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9kaWdpdGFsLiovZGVjLydgCisJCTs7CisJKi1jb21tb2RvcmUqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL2NvbW1vZG9yZS4qL2NibS8nYAorCQk7OworCSopCisJCTs7Citlc2FjCisKKyMgRGVjb2RlIG1hbnVmYWN0dXJlci1zcGVjaWZpYyBhbGlhc2VzIGZvciBjZXJ0YWluIG9wZXJhdGluZyBzeXN0ZW1zLgorCitpZiBbIHgiJG9zIiAhPSB4IiIgXQordGhlbgorY2FzZSAkb3MgaW4KKwkjIEZpcnN0IG1hdGNoIHNvbWUgc3lzdGVtIHR5cGUgYWxpYXNlcworCSMgdGhhdCBtaWdodCBnZXQgY29uZnVzZWQgd2l0aCB2YWxpZCBzeXN0ZW0gdHlwZXMuCisJIyAtc29sYXJpcyogaXMgYSBiYXNpYyBzeXN0ZW0gdHlwZSwgd2l0aCB0aGlzIG9uZSBleGNlcHRpb24uCisJLWF1cm9yYXV4KQorCQlvcz0tYXVyb3JhdXgKKwkJOzsKKwktc29sYXJpczEgfCAtc29sYXJpczEuKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHNvbGFyaXMxfHN1bm9zNHwnYAorCQk7OworCS1zb2xhcmlzKQorCQlvcz0tc29sYXJpczIKKwkJOzsKKwktc3ZyNCopCisJCW9zPS1zeXN2NAorCQk7OworCS11bml4d2FyZSopCisJCW9zPS1zeXN2NC4ydXcKKwkJOzsKKwktZ251L2xpbnV4KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfGdudS9saW51eHxsaW51eC1nbnV8J2AKKwkJOzsKKwkjIEZpcnN0IGFjY2VwdCB0aGUgYmFzaWMgc3lzdGVtIHR5cGVzLgorCSMgVGhlIHBvcnRhYmxlIHN5c3RlbXMgY29tZXMgZmlyc3QuCisJIyBFYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOIEEgKiwgdG8gbWF0Y2ggYSB2ZXJzaW9uIG51bWJlci4KKwkjIC1zeXN2KiBpcyBub3QgaGVyZSBiZWNhdXNlIGl0IGNvbWVzIGxhdGVyLCBhZnRlciBzeXN2cjQuCisJLWdudSogfCAtYnNkKiB8IC1tYWNoKiB8IC1taW5peCogfCAtZ2VuaXgqIHwgLXVsdHJpeCogfCAtaXJpeCogXAorCSAgICAgIHwgLSp2bXMqIHwgLXNjbyogfCAtZXNpeCogfCAtaXNjKiB8IC1haXgqIHwgLWNuayogfCAtc3Vub3MgfCAtc3Vub3NbMzRdKlwKKwkgICAgICB8IC1ocHV4KiB8IC11bm9zKiB8IC1vc2YqIHwgLWx1bmEqIHwgLWRndXgqIHwgLWF1cm9yYXV4KiB8IC1zb2xhcmlzKiBcCisJICAgICAgfCAtc3ltKiB8IC1rb3BlbnNvbGFyaXMqIFwKKwkgICAgICB8IC1hbWlnYW9zKiB8IC1hbWlnYWRvcyogfCAtbXNkb3MqIHwgLW5ld3NvcyogfCAtdW5pY29zKiB8IC1hb2YqIFwKKwkgICAgICB8IC1hb3MqIHwgLWFyb3MqIFwKKwkgICAgICB8IC1uaW5keSogfCAtdnhzaW0qIHwgLXZ4d29ya3MqIHwgLWVibW9uKiB8IC1obXMqIHwgLW12cyogXAorCSAgICAgIHwgLWNsaXgqIHwgLXJpc2NvcyogfCAtdW5pcGx1cyogfCAtaXJpcyogfCAtcnR1KiB8IC14ZW5peCogXAorCSAgICAgIHwgLWhpdXgqIHwgLTM4NmJzZCogfCAta25ldGJzZCogfCAtbWlyYnNkKiB8IC1uZXRic2QqIFwKKwkgICAgICB8IC1vcGVuYnNkKiB8IC1zb2xpZGJzZCogXAorCSAgICAgIHwgLWVra29ic2QqIHwgLWtmcmVlYnNkKiB8IC1mcmVlYnNkKiB8IC1yaXNjaXgqIHwgLWx5bnhvcyogXAorCSAgICAgIHwgLWJvc3gqIHwgLW5leHRzdGVwKiB8IC1jeHV4KiB8IC1hb3V0KiB8IC1lbGYqIHwgLW9hYmkqIFwKKwkgICAgICB8IC1wdHgqIHwgLWNvZmYqIHwgLWVjb2ZmKiB8IC13aW5udCogfCAtZG9tYWluKiB8IC12c3RhKiBcCisJICAgICAgfCAtdWRpKiB8IC1lYWJpKiB8IC1saXRlcyogfCAtaWVlZSogfCAtZ28zMiogfCAtYXV4KiBcCisJICAgICAgfCAtY2hvcnVzb3MqIHwgLWNob3J1c3JkYiogfCAtY2VnY2MqIFwKKwkgICAgICB8IC1jeWd3aW4qIHwgLXBlKiB8IC1wc29zKiB8IC1tb3NzKiB8IC1wcm9lbGYqIHwgLXJ0ZW1zKiBcCisJICAgICAgfCAtbWluZ3czMiogfCAtbGludXgtZ251KiB8IC1saW51eC1hbmRyb2lkKiBcCisJICAgICAgfCAtbGludXgtbmV3bGliKiB8IC1saW51eC11Y2xpYmMqIFwKKwkgICAgICB8IC11eHB2KiB8IC1iZW9zKiB8IC1tcGVpeCogfCAtdWRrKiBcCisJICAgICAgfCAtaW50ZXJpeCogfCAtdXdpbiogfCAtbWtzKiB8IC1yaGFwc29keSogfCAtZGFyd2luKiB8IC1vcGVuZWQqIFwKKwkgICAgICB8IC1vcGVuc3RlcCogfCAtb3NraXQqIHwgLWNvbml4KiB8IC1wdzMyKiB8IC1ub25zdG9wdXgqIFwKKwkgICAgICB8IC1zdG9ybS1jaGFvcyogfCAtdG9wczEwKiB8IC10ZW5leCogfCAtdG9wczIwKiB8IC1pdHMqIFwKKwkgICAgICB8IC1vczIqIHwgLXZvcyogfCAtcGFsbW9zKiB8IC11Y2xpbnV4KiB8IC1udWNsZXVzKiBcCisJICAgICAgfCAtbW9ycGhvcyogfCAtc3VwZXJ1eCogfCAtcnRtayogfCAtcnRtay1ub3ZhKiB8IC13aW5kaXNzKiBcCisJICAgICAgfCAtcG93ZXJtYXgqIHwgLWRuaXgqIHwgLW54NiB8IC1ueDcgfCAtc2VpKiB8IC1kcmFnb25mbHkqIFwKKwkgICAgICB8IC1za3lvcyogfCAtaGFpa3UqIHwgLXJkb3MqIHwgLXRvcHBlcnMqIHwgLWRyb3BzKiB8IC1lcyogfCAtaXJ4KikKKwkjIFJlbWVtYmVyLCBlYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCisJCTs7CisJLXFueCopCisJCWNhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkJICAgIHg4Ni0qIHwgaSo4Ni0qKQorCQkJOzsKKwkJICAgICopCisJCQlvcz0tbnRvJG9zCisJCQk7OworCQllc2FjCisJCTs7CisJLW50by1xbngqKQorCQk7OworCS1udG8qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bnRvfG50by1xbnh8J2AKKwkJOzsKKwktc2ltIHwgLWVzMTgwMCogfCAtaG1zKiB8IC14cmF5IHwgLW9zNjhrKiB8IC1ub25lKiB8IC12ODhyKiBcCisJICAgICAgfCAtd2luZG93cyogfCAtb3N4IHwgLWFidWcgfCAtbmV0d2FyZSogfCAtb3M5KiB8IC1iZW9zKiB8IC1oYWlrdSogXAorCSAgICAgIHwgLW1hY29zKiB8IC1tcHcqIHwgLW1hZ2ljKiB8IC1tbWl4d2FyZSogfCAtbW9uOTYwKiB8IC1sbmV3cyopCisJCTs7CisJLW1hYyopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xtYWN8bWFjb3N8J2AKKwkJOzsKKwktbGludXgtZGlldGxpYmMpCisJCW9zPS1saW51eC1kaWV0bGliYworCQk7OworCS1saW51eCopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xsaW51eHxsaW51eC1nbnV8J2AKKwkJOzsKKwktc3Vub3M1KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHN1bm9zNXxzb2xhcmlzMnwnYAorCQk7OworCS1zdW5vczYqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c3Vub3M2fHNvbGFyaXMzfCdgCisJCTs7CisJLW9wZW5lZCopCisJCW9zPS1vcGVuZWRpdGlvbgorCQk7OworCS1vczQwMCopCisJCW9zPS1vczQwMAorCQk7OworCS13aW5jZSopCisJCW9zPS13aW5jZQorCQk7OworCS1vc2Zyb3NlKikKKwkJb3M9LW9zZnJvc2UKKwkJOzsKKwktb3NmKikKKwkJb3M9LW9zZgorCQk7OworCS11dGVrKikKKwkJb3M9LWJzZAorCQk7OworCS1keW5peCopCisJCW9zPS1ic2QKKwkJOzsKKwktYWNpcyopCisJCW9zPS1hb3MKKwkJOzsKKwktYXRoZW9zKikKKwkJb3M9LWF0aGVvcworCQk7OworCS1zeWxsYWJsZSopCisJCW9zPS1zeWxsYWJsZQorCQk7OworCS0zODZic2QpCisJCW9zPS1ic2QKKwkJOzsKKwktY3RpeCogfCAtdXRzKikKKwkJb3M9LXN5c3YKKwkJOzsKKwktbm92YSopCisJCW9zPS1ydG1rLW5vdmEKKwkJOzsKKwktbnMyICkKKwkJb3M9LW5leHRzdGVwMgorCQk7OworCS1uc2sqKQorCQlvcz0tbnNrCisJCTs7CisJIyBQcmVzZXJ2ZSB0aGUgdmVyc2lvbiBudW1iZXIgb2Ygc2luaXg1LgorCS1zaW5peDUuKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHNpbml4fHN5c3Z8J2AKKwkJOzsKKwktc2luaXgqKQorCQlvcz0tc3lzdjQKKwkJOzsKKwktdHBmKikKKwkJb3M9LXRwZgorCQk7OworCS10cml0b24qKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktb3NzKikKKwkJb3M9LXN5c3YzCisJCTs7CisJLXN2cjQpCisJCW9zPS1zeXN2NAorCQk7OworCS1zdnIzKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktc3lzdnI0KQorCQlvcz0tc3lzdjQKKwkJOzsKKwkjIFRoaXMgbXVzdCBjb21lIGFmdGVyIC1zeXN2cjQuCisJLXN5c3YqKQorCQk7OworCS1vc2UqKQorCQlvcz0tb3NlCisJCTs7CisJLWVzMTgwMCopCisJCW9zPS1vc2UKKwkJOzsKKwkteGVuaXgpCisJCW9zPS14ZW5peAorCQk7OworCS0qbWludCB8IC1taW50WzAtOV0qIHwgLSpNaU5UIHwgLU1pTlRbMC05XSopCisJCW9zPS1taW50CisJCTs7CisJLWFyb3MqKQorCQlvcz0tYXJvcworCQk7OworCS1rYW9zKikKKwkJb3M9LWthb3MKKwkJOzsKKwktenZtb2UpCisJCW9zPS16dm1vZQorCQk7OworCS1kaWNvcyopCisJCW9zPS1kaWNvcworCQk7OworCS1uYWNsKikKKwkJOzsKKwktbm9uZSkKKwkJOzsKKwkqKQorCQkjIEdldCByaWQgb2YgdGhlIGAtJyBhdCB0aGUgYmVnaW5uaW5nIG9mICRvcy4KKwkJb3M9YGVjaG8gJG9zIHwgc2VkICdzL1teLV0qLS8vJ2AKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBzeXN0ZW0gXGAkb3NcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworZXNhYworZWxzZQorCisjIEhlcmUgd2UgaGFuZGxlIHRoZSBkZWZhdWx0IG9wZXJhdGluZyBzeXN0ZW1zIHRoYXQgY29tZSB3aXRoIHZhcmlvdXMgbWFjaGluZXMuCisjIFRoZSB2YWx1ZSBzaG91bGQgYmUgd2hhdCB0aGUgdmVuZG9yIGN1cnJlbnRseSBzaGlwcyBvdXQgdGhlIGRvb3Igd2l0aCB0aGVpcgorIyBtYWNoaW5lIG9yIHB1dCBhbm90aGVyIHdheSwgdGhlIG1vc3QgcG9wdWxhciBvcyBwcm92aWRlZCB3aXRoIHRoZSBtYWNoaW5lLgorCisjIE5vdGUgdGhhdCBpZiB5b3UncmUgZ29pbmcgdG8gdHJ5IHRvIG1hdGNoICItTUFOVUZBQ1RVUkVSIiBoZXJlIChzYXksCisjICItc3VuIiksIHRoZW4geW91IGhhdmUgdG8gdGVsbCB0aGUgY2FzZSBzdGF0ZW1lbnQgdXAgdG93YXJkcyB0aGUgdG9wCisjIHRoYXQgTUFOVUZBQ1RVUkVSIGlzbid0IGFuIG9wZXJhdGluZyBzeXN0ZW0uICBPdGhlcndpc2UsIGNvZGUgYWJvdmUKKyMgd2lsbCBzaWduYWwgYW4gZXJyb3Igc2F5aW5nIHRoYXQgTUFOVUZBQ1RVUkVSIGlzbid0IGFuIG9wZXJhdGluZworIyBzeXN0ZW0sIGFuZCB3ZSdsbCBuZXZlciBnZXQgdG8gdGhpcyBwb2ludC4KKworY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCXNjb3JlLSopCisJCW9zPS1lbGYKKwkJOzsKKwlzcHUtKikKKwkJb3M9LWVsZgorCQk7OworCSotYWNvcm4pCisJCW9zPS1yaXNjaXgxLjIKKwkJOzsKKwlhcm0qLXJlYmVsKQorCQlvcz0tbGludXgKKwkJOzsKKwlhcm0qLXNlbWkpCisJCW9zPS1hb3V0CisJCTs7CisJYzR4LSogfCB0aWM0eC0qKQorCQlvcz0tY29mZgorCQk7OworCXRpYzU0eC0qKQorCQlvcz0tY29mZgorCQk7OworCXRpYzU1eC0qKQorCQlvcz0tY29mZgorCQk7OworCXRpYzZ4LSopCisJCW9zPS1jb2ZmCisJCTs7CisJIyBUaGlzIG11c3QgY29tZSBiZWZvcmUgdGhlICotZGVjIGVudHJ5LgorCXBkcDEwLSopCisJCW9zPS10b3BzMjAKKwkJOzsKKwlwZHAxMS0qKQorCQlvcz0tbm9uZQorCQk7OworCSotZGVjIHwgdmF4LSopCisJCW9zPS11bHRyaXg0LjIKKwkJOzsKKwltNjgqLWFwb2xsbykKKwkJb3M9LWRvbWFpbgorCQk7OworCWkzODYtc3VuKQorCQlvcz0tc3Vub3M0LjAuMgorCQk7OworCW02ODAwMC1zdW4pCisJCW9zPS1zdW5vczMKKwkJIyBUaGlzIGFsc28gZXhpc3RzIGluIHRoZSBjb25maWd1cmUgcHJvZ3JhbSwgYnV0IHdhcyBub3QgdGhlCisJCSMgZGVmYXVsdC4KKwkJIyBvcz0tc3Vub3M0CisJCTs7CisJbTY4Ki1jaXNjbykKKwkJb3M9LWFvdXQKKwkJOzsKKwltZXAtKikKKwkJb3M9LWVsZgorCQk7OworCW1pcHMqLWNpc2NvKQorCQlvcz0tZWxmCisJCTs7CisJbWlwcyotKikKKwkJb3M9LWVsZgorCQk7OworCW9yMzItKikKKwkJb3M9LWNvZmYKKwkJOzsKKwkqLXR0aSkJIyBtdXN0IGJlIGJlZm9yZSBzcGFyYyBlbnRyeSBvciB3ZSBnZXQgdGhlIHdyb25nIG9zLgorCQlvcz0tc3lzdjMKKwkJOzsKKwlzcGFyYy0qIHwgKi1zdW4pCisJCW9zPS1zdW5vczQuMS4xCisJCTs7CisJKi1iZSkKKwkJb3M9LWJlb3MKKwkJOzsKKwkqLWhhaWt1KQorCQlvcz0taGFpa3UKKwkJOzsKKwkqLWlibSkKKwkJb3M9LWFpeAorCQk7OworCSota251dGgpCisJCW9zPS1tbWl4d2FyZQorCQk7OworCSotd2VjKQorCQlvcz0tcHJvZWxmCisJCTs7CisJKi13aW5ib25kKQorCQlvcz0tcHJvZWxmCisJCTs7CisJKi1va2kpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLWhwKQorCQlvcz0taHB1eAorCQk7OworCSotaGl0YWNoaSkKKwkJb3M9LWhpdXgKKwkJOzsKKwlpODYwLSogfCAqLWF0dCB8ICotbmNyIHwgKi1hbHRvcyB8ICotbW90b3JvbGEgfCAqLWNvbnZlcmdlbnQpCisJCW9zPS1zeXN2CisJCTs7CisJKi1jYm0pCisJCW9zPS1hbWlnYW9zCisJCTs7CisJKi1kZykKKwkJb3M9LWRndXgKKwkJOzsKKwkqLWRvbHBoaW4pCisJCW9zPS1zeXN2MworCQk7OworCW02OGstY2N1cikKKwkJb3M9LXJ0dQorCQk7OworCW04OGstb21yb24qKQorCQlvcz0tbHVuYQorCQk7OworCSotbmV4dCApCisJCW9zPS1uZXh0c3RlcAorCQk7OworCSotc2VxdWVudCkKKwkJb3M9LXB0eAorCQk7OworCSotY3JkcykKKwkJb3M9LXVub3MKKwkJOzsKKwkqLW5zKQorCQlvcz0tZ2VuaXgKKwkJOzsKKwlpMzcwLSopCisJCW9zPS1tdnMKKwkJOzsKKwkqLW5leHQpCisJCW9zPS1uZXh0c3RlcDMKKwkJOzsKKwkqLWdvdWxkKQorCQlvcz0tc3lzdgorCQk7OworCSotaGlnaGxldmVsKQorCQlvcz0tYnNkCisJCTs7CisJKi1lbmNvcmUpCisJCW9zPS1ic2QKKwkJOzsKKwkqLXNnaSkKKwkJb3M9LWlyaXgKKwkJOzsKKwkqLXNpZW1lbnMpCisJCW9zPS1zeXN2NAorCQk7OworCSotbWFzc2NvbXApCisJCW9zPS1ydHUKKwkJOzsKKwlmMzBbMDFdLWZ1aml0c3UgfCBmNzAwLWZ1aml0c3UpCisJCW9zPS11eHB2CisJCTs7CisJKi1yb202OGspCisJCW9zPS1jb2ZmCisJCTs7CisJKi0qYnVnKQorCQlvcz0tY29mZgorCQk7OworCSotYXBwbGUpCisJCW9zPS1tYWNvcworCQk7OworCSotYXRhcmkqKQorCQlvcz0tbWludAorCQk7OworCSopCisJCW9zPS1ub25lCisJCTs7Citlc2FjCitmaQorCisjIEhlcmUgd2UgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGtub3cgdGhlIG9zLCBhbmQgdGhlIENQVSB0eXBlLCBidXQgbm90IHRoZQorIyBtYW51ZmFjdHVyZXIuICBXZSBwaWNrIHRoZSBsb2dpY2FsIG1hbnVmYWN0dXJlci4KK3ZlbmRvcj11bmtub3duCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisJKi11bmtub3duKQorCQljYXNlICRvcyBpbgorCQkJLXJpc2NpeCopCisJCQkJdmVuZG9yPWFjb3JuCisJCQkJOzsKKwkJCS1zdW5vcyopCisJCQkJdmVuZG9yPXN1bgorCQkJCTs7CisJCQktY25rKnwtYWl4KikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCS1iZW9zKikKKwkJCQl2ZW5kb3I9YmUKKwkJCQk7OworCQkJLWhwdXgqKQorCQkJCXZlbmRvcj1ocAorCQkJCTs7CisJCQktbXBlaXgqKQorCQkJCXZlbmRvcj1ocAorCQkJCTs7CisJCQktaGl1eCopCisJCQkJdmVuZG9yPWhpdGFjaGkKKwkJCQk7OworCQkJLXVub3MqKQorCQkJCXZlbmRvcj1jcmRzCisJCQkJOzsKKwkJCS1kZ3V4KikKKwkJCQl2ZW5kb3I9ZGcKKwkJCQk7OworCQkJLWx1bmEqKQorCQkJCXZlbmRvcj1vbXJvbgorCQkJCTs7CisJCQktZ2VuaXgqKQorCQkJCXZlbmRvcj1ucworCQkJCTs7CisJCQktbXZzKiB8IC1vcGVuZWQqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLW9zNDAwKikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCS1wdHgqKQorCQkJCXZlbmRvcj1zZXF1ZW50CisJCQkJOzsKKwkJCS10cGYqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC13aW5kaXNzKikKKwkJCQl2ZW5kb3I9d3JzCisJCQkJOzsKKwkJCS1hdXgqKQorCQkJCXZlbmRvcj1hcHBsZQorCQkJCTs7CisJCQktaG1zKikKKwkJCQl2ZW5kb3I9aGl0YWNoaQorCQkJCTs7CisJCQktbXB3KiB8IC1tYWNvcyopCisJCQkJdmVuZG9yPWFwcGxlCisJCQkJOzsKKwkJCS0qbWludCB8IC1taW50WzAtOV0qIHwgLSpNaU5UIHwgLU1pTlRbMC05XSopCisJCQkJdmVuZG9yPWF0YXJpCisJCQkJOzsKKwkJCS12b3MqKQorCQkJCXZlbmRvcj1zdHJhdHVzCisJCQkJOzsKKwkJZXNhYworCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICJzL3Vua25vd24vJHZlbmRvci8iYAorCQk7OworZXNhYworCitlY2hvICRiYXNpY19tYWNoaW5lJG9zCitleGl0CisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJ0aW1lc3RhbXA9JyIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkIgorIyB0aW1lLXN0YW1wLWVuZDogIiciCisjIEVuZDoKZGlmZiAtLWdpdCBhL3NoYXJlL2xpYnRvb2wvY29uZmlnL2RlcGNvbXAgYi9zaGFyZS9saWJ0b29sL2NvbmZpZy9kZXBjb21wCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRmOGVlYTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9saWJ0b29sL2NvbmZpZy9kZXBjb21wCkBAIC0wLDAgKzEsNjMwIEBACisjISAvYmluL3NoCisjIGRlcGNvbXAgLSBjb21waWxlIGEgcHJvZ3JhbSBnZW5lcmF0aW5nIGRlcGVuZGVuY2llcyBhcyBzaWRlLWVmZmVjdHMKKworc2NyaXB0dmVyc2lvbj0yMDA5LTA0LTI4LjIxOyAjIFVUQworCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSBGcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBBbGV4YW5kcmUgT2xpdmEgPG9saXZhQGRjYy51bmljYW1wLmJyPi4KKworY2FzZSAkMSBpbgorICAnJykKKyAgICAgZWNobyAiJDA6IE5vIGNvbW1hbmQuICBUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgorICAgICBleGl0IDE7CisgICAgIDs7CisgIC1oIHwgLS1oKikKKyAgICBjYXQgPDxcRU9GCitVc2FnZTogZGVwY29tcCBbLS1oZWxwXSBbLS12ZXJzaW9uXSBQUk9HUkFNIFtBUkdTXQorCitSdW4gUFJPR1JBTVMgQVJHUyB0byBjb21waWxlIGEgZmlsZSwgZ2VuZXJhdGluZyBkZXBlbmRlbmNpZXMKK2FzIHNpZGUtZWZmZWN0cy4KKworRW52aXJvbm1lbnQgdmFyaWFibGVzOgorICBkZXBtb2RlICAgICBEZXBlbmRlbmN5IHRyYWNraW5nIG1vZGUuCisgIHNvdXJjZSAgICAgIFNvdXJjZSBmaWxlIHJlYWQgYnkgYFBST0dSQU1TIEFSR1MnLgorICBvYmplY3QgICAgICBPYmplY3QgZmlsZSBvdXRwdXQgYnkgYFBST0dSQU1TIEFSR1MnLgorICBERVBESVIgICAgICBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgZGVwZW5kZW5jaWVzLgorICBkZXBmaWxlICAgICBEZXBlbmRlbmN5IGZpbGUgdG8gb3V0cHV0LgorICB0bXBkZXBmaWxlICBUZW1wb3JhcnkgZmlsZSB0byB1c2Ugd2hlbiBvdXRwdXRpbmcgZGVwZW5kZW5jaWVzLgorICBsaWJ0b29sICAgICBXaGV0aGVyIGxpYnRvb2wgaXMgdXNlZCAoeWVzL25vKS4KKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4KK0VPRgorICAgIGV4aXQgJD8KKyAgICA7OworICAtdiB8IC0tdiopCisgICAgZWNobyAiZGVwY29tcCAkc2NyaXB0dmVyc2lvbiIKKyAgICBleGl0ICQ/CisgICAgOzsKK2VzYWMKKworaWYgdGVzdCAteiAiJGRlcG1vZGUiIHx8IHRlc3QgLXogIiRzb3VyY2UiIHx8IHRlc3QgLXogIiRvYmplY3QiOyB0aGVuCisgIGVjaG8gImRlcGNvbXA6IFZhcmlhYmxlcyBzb3VyY2UsIG9iamVjdCBhbmQgZGVwbW9kZSBtdXN0IGJlIHNldCIgMT4mMgorICBleGl0IDEKK2ZpCisKKyMgRGVwZW5kZW5jaWVzIGZvciBzdWIvYmFyLm8gb3Igc3ViL2Jhci5vYmogZ28gaW50byBzdWIvLmRlcHMvYmFyLlBvLgorZGVwZmlsZT0ke2RlcGZpbGUtYGVjaG8gIiRvYmplY3QiIHwKKyAgc2VkICdzfFteXFwvXSokfCcke0RFUERJUi0uZGVwc30nLyZ8O3N8XC5cKFteLl0qXCkkfC5QXDF8O3N8UG9iaiR8UG98J2B9Cit0bXBkZXBmaWxlPSR7dG1wZGVwZmlsZS1gZWNobyAiJGRlcGZpbGUiIHwgc2VkICdzL1wuXChbXi5dKlwpJC8uVFwxLydgfQorCitybSAtZiAiJHRtcGRlcGZpbGUiCisKKyMgU29tZSBtb2RlcyB3b3JrIGp1c3QgbGlrZSBvdGhlciBtb2RlcywgYnV0IHVzZSBkaWZmZXJlbnQgZmxhZ3MuICBXZQorIyBwYXJhbWV0ZXJpemUgaGVyZSwgYnV0IHN0aWxsIGxpc3QgdGhlIG1vZGVzIGluIHRoZSBiaWcgY2FzZSBiZWxvdywKKyMgdG8gbWFrZSBkZXBlbmQubTQgZWFzaWVyIHRvIHdyaXRlLiAgTm90ZSB0aGF0IHdlICpjYW5ub3QqIHVzZSBhIGNhc2UKKyMgaGVyZSwgYmVjYXVzZSB0aGlzIGZpbGUgY2FuIG9ubHkgY29udGFpbiBvbmUgY2FzZSBzdGF0ZW1lbnQuCitpZiB0ZXN0ICIkZGVwbW9kZSIgPSBocDsgdGhlbgorICAjIEhQIGNvbXBpbGVyIHVzZXMgLU0gYW5kIG5vIGV4dHJhIGFyZy4KKyAgZ2NjZmxhZz0tTQorICBkZXBtb2RlPWdjYworZmkKKworaWYgdGVzdCAiJGRlcG1vZGUiID0gZGFzaFhtc3Rkb3V0OyB0aGVuCisgICAjIFRoaXMgaXMganVzdCBsaWtlIGRhc2htc3Rkb3V0IHdpdGggYSBkaWZmZXJlbnQgYXJndW1lbnQuCisgICBkYXNobWZsYWc9LXhNCisgICBkZXBtb2RlPWRhc2htc3Rkb3V0CitmaQorCitjeWdwYXRoX3U9ImN5Z3BhdGggLXUgLWYgLSIKK2lmIHRlc3QgIiRkZXBtb2RlIiA9IG1zdmNtc3lzOyB0aGVuCisgICAjIFRoaXMgaXMganVzdCBsaWtlIG1zdmlzdWFsY3BwIGJ1dCB3L28gY3lncGF0aCB0cmFuc2xhdGlvbi4KKyAgICMgSnVzdCBjb252ZXJ0IHRoZSBiYWNrc2xhc2gtZXNjYXBlZCBiYWNrc2xhc2hlcyB0byBzaW5nbGUgZm9yd2FyZAorICAgIyBzbGFzaGVzIHRvIHNhdGlzZnkgZGVwZW5kLm00CisgICBjeWdwYXRoX3U9InNlZCBzLFxcXFxcXFxcLC8sZyIKKyAgIGRlcG1vZGU9bXN2aXN1YWxjcHAKK2ZpCisKK2Nhc2UgIiRkZXBtb2RlIiBpbgorZ2NjMykKKyMjIGdjYyAzIGltcGxlbWVudHMgZGVwZW5kZW5jeSB0cmFja2luZyB0aGF0IGRvZXMgZXhhY3RseSB3aGF0CisjIyB3ZSB3YW50LiAgWWF5ISAgTm90ZTogZm9yIHNvbWUgcmVhc29uIGxpYnRvb2wgMS40IGRvZXNuJ3QgbGlrZQorIyMgaXQgaWYgLU1EIC1NUCBjb21lcyBhZnRlciB0aGUgLU1GIHN0dWZmLiAgSG1tLgorIyMgVW5mb3J0dW5hdGVseSwgRnJlZUJTRCBjODkgYWNjZXB0YW5jZSBvZiBmbGFncyBkZXBlbmRzIHVwb24KKyMjIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgb3JkZXI7IHNvIGFkZCB0aGUgZmxhZ3Mgd2hlcmUgdGhleQorIyMgYXBwZWFyIGluIGRlcGVuZDIuYW0uICBOb3RlIHRoYXQgdGhlIHNsb3dkb3duIGluY3VycmVkIGhlcmUKKyMjIGFmZmVjdHMgb25seSBjb25maWd1cmU6IGluIG1ha2VmaWxlcywgJUZBU1RERVAlIHNob3J0Y3V0cyB0aGlzLgorICBmb3IgYXJnCisgIGRvCisgICAgY2FzZSAkYXJnIGluCisgICAgLWMpIHNldCBmbm9yZCAiJEAiIC1NVCAiJG9iamVjdCIgLU1EIC1NUCAtTUYgIiR0bXBkZXBmaWxlIiAiJGFyZyIgOzsKKyAgICAqKSAgc2V0IGZub3JkICIkQCIgIiRhcmciIDs7CisgICAgZXNhYworICAgIHNoaWZ0ICMgZm5vcmQKKyAgICBzaGlmdCAjICRhcmcKKyAgZG9uZQorICAiJEAiCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgIGVsc2UKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBtdiAiJHRtcGRlcGZpbGUiICIkZGVwZmlsZSIKKyAgOzsKKworZ2NjKQorIyMgVGhlcmUgYXJlIHZhcmlvdXMgd2F5cyB0byBnZXQgZGVwZW5kZW5jeSBvdXRwdXQgZnJvbSBnY2MuICBIZXJlJ3MKKyMjIHdoeSB3ZSBwaWNrIHRoaXMgcmF0aGVyIG9ic2N1cmUgbWV0aG9kOgorIyMgLSBEb24ndCB3YW50IHRvIHVzZSAtTUQgYmVjYXVzZSB3ZSdkIGxpa2UgdGhlIGRlcGVuZGVuY2llcyB0byBlbmQKKyMjICAgdXAgaW4gYSBzdWJkaXIuICBIYXZpbmcgdG8gcmVuYW1lIGJ5IGhhbmQgaXMgdWdseS4KKyMjICAgKFdlIG1pZ2h0IGVuZCB1cCBkb2luZyB0aGlzIGFueXdheSB0byBzdXBwb3J0IG90aGVyIGNvbXBpbGVycy4pCisjIyAtIFRoZSBERVBFTkRFTkNJRVNfT1VUUFVUIGVudmlyb25tZW50IHZhcmlhYmxlIG1ha2VzIGdjYyBhY3QgbGlrZQorIyMgICAtTU0sIG5vdCAtTSAoZGVzcGl0ZSB3aGF0IHRoZSBkb2NzIHNheSkuCisjIyAtIFVzaW5nIC1NIGRpcmVjdGx5IG1lYW5zIHJ1bm5pbmcgdGhlIGNvbXBpbGVyIHR3aWNlIChldmVuIHdvcnNlCisjIyAgIHRoYW4gcmVuYW1pbmcpLgorICBpZiB0ZXN0IC16ICIkZ2NjZmxhZyI7IHRoZW4KKyAgICBnY2NmbGFnPS1NRCwKKyAgZmkKKyAgIiRAIiAtV3AsIiRnY2NmbGFnJHRtcGRlcGZpbGUiCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgIGVsc2UKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBybSAtZiAiJGRlcGZpbGUiCisgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisgIGFscGhhPUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKKyMjIFRoZSBzZWNvbmQgLWUgZXhwcmVzc2lvbiBoYW5kbGVzIERPUy1zdHlsZSBmaWxlIG5hbWVzIHdpdGggZHJpdmUgbGV0dGVycy4KKyAgc2VkIC1lICdzL15bXjpdKjogLyAvJyBcCisgICAgICAtZSAncy9eWyckYWxwaGEnXTpcL1teOl0qOiAvIC8nIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisjIyBUaGlzIG5leHQgcGllY2Ugb2YgbWFnaWMgYXZvaWRzIHRoZSBgZGVsZXRlZCBoZWFkZXIgZmlsZScgcHJvYmxlbS4KKyMjIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2hlbiBhIGhlYWRlciBmaWxlIHdoaWNoIGFwcGVhcnMgaW4gYSAuUCBmaWxlCisjIyBpcyBkZWxldGVkLCB0aGUgZGVwZW5kZW5jeSBjYXVzZXMgbWFrZSB0byBkaWUgKGJlY2F1c2UgdGhlcmUgaXMKKyMjIHR5cGljYWxseSBubyB3YXkgdG8gcmVidWlsZCB0aGUgaGVhZGVyKS4gIFdlIGF2b2lkIHRoaXMgYnkgYWRkaW5nCisjIyBkdW1teSBkZXBlbmRlbmNpZXMgZm9yIGVhY2ggaGVhZGVyIGZpbGUuICBUb28gYmFkIGdjYyBkb2Vzbid0IGRvCisjIyB0aGlzIGZvciB1cyBkaXJlY3RseS4KKyAgdHIgJyAnICcKKycgPCAiJHRtcGRlcGZpbGUiIHwKKyMjIFNvbWUgdmVyc2lvbnMgb2YgZ2NjIHB1dCBhIHNwYWNlIGJlZm9yZSB0aGUgYDonLiAgT24gdGhlIHRoZW9yeQorIyMgdGhhdCB0aGUgc3BhY2UgbWVhbnMgc29tZXRoaW5nLCB3ZSBhZGQgYSBzcGFjZSB0byB0aGUgb3V0cHV0IGFzCisjIyB3ZWxsLgorIyMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KKyMjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCisgICAgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworaHApCisgICMgVGhpcyBjYXNlIGV4aXN0cyBvbmx5IHRvIGxldCBkZXBlbmQubTQgZG8gaXRzIHdvcmsuICBJdCB3b3JrcyBieQorICAjIGxvb2tpbmcgYXQgdGhlIHRleHQgb2YgdGhpcyBzY3JpcHQuICBUaGlzIGNhc2Ugd2lsbCBuZXZlciBiZSBydW4sCisgICMgc2luY2UgaXQgaXMgY2hlY2tlZCBmb3IgYWJvdmUuCisgIGV4aXQgMQorICA7OworCitzZ2kpCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgICIkQCIgIi1XcCwtTUR1cGRhdGUsJHRtcGRlcGZpbGUiCisgIGVsc2UKKyAgICAiJEAiIC1NRHVwZGF0ZSAiJHRtcGRlcGZpbGUiCisgIGZpCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgIGVsc2UKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBybSAtZiAiJGRlcGZpbGUiCisKKyAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuICAjIHllcywgdGhlIHNvdXJjZWZpbGUgZGVwZW5kIG9uIG90aGVyIGZpbGVzCisgICAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKworICAgICMgQ2xpcCBvZmYgdGhlIGluaXRpYWwgZWxlbWVudCAodGhlIGRlcGVuZGVudCkuICBEb24ndCB0cnkgdG8gYmUKKyAgICAjIGNsZXZlciBhbmQgcmVwbGFjZSB0aGlzIHdpdGggc2VkIGNvZGUsIGFzIElSSVggc2VkIHdvbid0IGhhbmRsZQorICAgICMgbGluZXMgd2l0aCBtb3JlIHRoYW4gYSBmaXhlZCBudW1iZXIgb2YgY2hhcmFjdGVycyAoNDA5NiBpbgorICAgICMgSVJJWCA2LjIgc2VkLCA4MTkyIGluIElSSVggNi41KS4gIFdlIGFsc28gcmVtb3ZlIGNvbW1lbnQgbGluZXM7CisgICAgIyB0aGUgSVJJWCBjYyBhZGRzIGNvbW1lbnRzIGxpa2UgYCM6ZmVjJyB0byB0aGUgZW5kIG9mIHRoZQorICAgICMgZGVwZW5kZW5jeSBsaW5lLgorICAgIHRyICcgJyAnCisnIDwgIiR0bXBkZXBmaWxlIiBcCisgICAgfCBzZWQgLWUgJ3MvXi4qXC5vOi8vJyAtZSAncy8jLiokLy8nIC1lICcvXiQvIGQnIHwgXAorICAgIHRyICcKKycgJyAnID4+ICIkZGVwZmlsZSIKKyAgICBlY2hvID4+ICIkZGVwZmlsZSIKKworICAgICMgVGhlIHNlY29uZCBwYXNzIGdlbmVyYXRlcyBhIGR1bW15IGVudHJ5IGZvciBlYWNoIGhlYWRlciBmaWxlLgorICAgIHRyICcgJyAnCisnIDwgIiR0bXBkZXBmaWxlIiBcCisgICB8IHNlZCAtZSAncy9eLipcLm86Ly8nIC1lICdzLyMuKiQvLycgLWUgJy9eJC8gZCcgLWUgJ3MvJC86LycgXAorICAgPj4gIiRkZXBmaWxlIgorICBlbHNlCisgICAgIyBUaGUgc291cmNlZmlsZSBkb2VzIG5vdCBjb250YWluIGFueSBkZXBlbmRlbmNpZXMsIHNvIGp1c3QKKyAgICAjIHN0b3JlIGEgZHVtbXkgY29tbWVudCBsaW5lLCB0byBhdm9pZCBlcnJvcnMgd2l0aCB0aGUgTWFrZWZpbGUKKyAgICAjICJpbmNsdWRlIGJhc2VuYW1lLlBsbyIgc2NoZW1lLgorICAgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCisgIGZpCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworYWl4KQorICAjIFRoZSBDIGZvciBBSVggQ29tcGlsZXIgdXNlcyAtTSBhbmQgb3V0cHV0cyB0aGUgZGVwZW5kZW5jaWVzCisgICMgaW4gYSAudSBmaWxlLiAgSW4gb2xkZXIgdmVyc2lvbnMsIHRoaXMgZmlsZSBhbHdheXMgbGl2ZXMgaW4gdGhlCisgICMgY3VycmVudCBkaXJlY3RvcnkuICBBbHNvLCB0aGUgQUlYIGNvbXBpbGVyIHB1dHMgYCRvYmplY3Q6JyBhdCB0aGUKKyAgIyBzdGFydCBvZiBlYWNoIGxpbmU7ICRvYmplY3QgZG9lc24ndCBoYXZlIGRpcmVjdG9yeSBpbmZvcm1hdGlvbi4KKyAgIyBWZXJzaW9uIDYgdXNlcyB0aGUgZGlyZWN0b3J5IGluIGJvdGggY2FzZXMuCisgIGRpcj1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8L1teL10qJHwvfCdgCisgIHRlc3QgIngkZGlyIiA9ICJ4JG9iamVjdCIgJiYgZGlyPQorICBiYXNlPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wubyQvLycgLWUgJ3MvXC5sbyQvLydgCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS51CisgICAgdG1wZGVwZmlsZTI9JGJhc2UudQorICAgIHRtcGRlcGZpbGUzPSRkaXIubGlicy8kYmFzZS51CisgICAgIiRAIiAtV2MsLU0KKyAgZWxzZQorICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS51CisgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLnUKKyAgICB0bXBkZXBmaWxlMz0kZGlyJGJhc2UudQorICAgICIkQCIgLU0KKyAgZmkKKyAgc3RhdD0kPworCisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIKKyAgICBleGl0ICRzdGF0CisgIGZpCisKKyAgZm9yIHRtcGRlcGZpbGUgaW4gIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIKKyAgZG8KKyAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKKyAgZG9uZQorICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KKyAgICAjIEVhY2ggbGluZSBpcyBvZiB0aGUgZm9ybSBgZm9vLm86IGRlcGVuZGVudC5oJy4KKyAgICAjIERvIHR3byBwYXNzZXMsIG9uZSB0byBqdXN0IGNoYW5nZSB0aGVzZSB0bworICAgICMgYCRvYmplY3Q6IGRlcGVuZGVudC5oJyBhbmQgb25lIHRvIHNpbXBseSBgZGVwZW5kZW50Lmg6Jy4KKyAgICBzZWQgLWUgInMsXi4qXC5bYS16XSo6LCRvYmplY3Q6LCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAgICMgVGhhdCdzIGEgdGFiIGFuZCBhIHNwYWNlIGluIHRoZSBbXS4KKyAgICBzZWQgLWUgJ3MsXi4qXC5bYS16XSo6WwkgXSosLCcgLWUgJ3MsJCw6LCcgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyAgZWxzZQorICAgICMgVGhlIHNvdXJjZWZpbGUgZG9lcyBub3QgY29udGFpbiBhbnkgZGVwZW5kZW5jaWVzLCBzbyBqdXN0CisgICAgIyBzdG9yZSBhIGR1bW15IGNvbW1lbnQgbGluZSwgdG8gYXZvaWQgZXJyb3JzIHdpdGggdGhlIE1ha2VmaWxlCisgICAgIyAiaW5jbHVkZSBiYXNlbmFtZS5QbG8iIHNjaGVtZS4KKyAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgorICBmaQorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2ljYykKKyAgIyBJbnRlbCdzIEMgY29tcGlsZXIgdW5kZXJzdGFuZHMgYC1NRCAtTUYgZmlsZScuICBIb3dldmVyIG9uCisgICMgICAgaWNjIC1NRCAtTUYgZm9vLmQgLWMgLW8gc3ViL2Zvby5vIHN1Yi9mb28uYworICAjIElDQyA3LjAgd2lsbCBmaWxsIGZvby5kIHdpdGggc29tZXRoaW5nIGxpa2UKKyAgIyAgICBmb28ubzogc3ViL2Zvby5jCisgICMgICAgZm9vLm86IHN1Yi9mb28uaAorICAjIHdoaWNoIGlzIHdyb25nLiAgV2Ugd2FudDoKKyAgIyAgICBzdWIvZm9vLm86IHN1Yi9mb28uYworICAjICAgIHN1Yi9mb28ubzogc3ViL2Zvby5oCisgICMgICAgc3ViL2Zvby5jOgorICAjICAgIHN1Yi9mb28uaDoKKyAgIyBJQ0MgNy4xIHdpbGwgb3V0cHV0CisgICMgICAgZm9vLm86IHN1Yi9mb28uYyBzdWIvZm9vLmgKKyAgIyBhbmQgd2lsbCB3cmFwIGxvbmcgbGluZXMgdXNpbmcgXCA6CisgICMgICAgZm9vLm86IHN1Yi9mb28uYyAuLi4gXAorICAjICAgICBzdWIvZm9vLmggLi4uIFwKKyAgIyAgICAgLi4uCisKKyAgIiRAIiAtTUQgLU1GICIkdG1wZGVwZmlsZSIKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgIyBFYWNoIGxpbmUgaXMgb2YgdGhlIGZvcm0gYGZvby5vOiBkZXBlbmRlbnQuaCcsCisgICMgb3IgYGZvby5vOiBkZXAxLmggZGVwMi5oIFwnLCBvciBgIGRlcDMuaCBkZXA0LmggXCcuCisgICMgRG8gdHdvIHBhc3Nlcywgb25lIHRvIGp1c3QgY2hhbmdlIHRoZXNlIHRvCisgICMgYCRvYmplY3Q6IGRlcGVuZGVudC5oJyBhbmQgb25lIHRvIHNpbXBseSBgZGVwZW5kZW50Lmg6Jy4KKyAgc2VkICJzLF5bXjpdKjosJG9iamVjdCA6LCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCisgICMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKyAgc2VkICdzLF5bXjpdKjogXCguKlwpJCxcMSw7cy9eXFwkLy87L14kL2Q7LzokL2QnIDwgIiR0bXBkZXBmaWxlIiB8CisgICAgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworaHAyKQorICAjIFRoZSAiaHAiIHN0YW56YSBhYm92ZSBkb2VzIG5vdCB3b3JrIHdpdGggYUNDIChDKyspIGFuZCBIUCdzIGlhNjQKKyAgIyBjb21waWxlcnMsIHdoaWNoIGhhdmUgaW50ZWdyYXRlZCBwcmVwcm9jZXNzb3JzLiAgVGhlIGNvcnJlY3Qgb3B0aW9uCisgICMgdG8gdXNlIHdpdGggdGhlc2UgaXMgK01ha2VkOyBpdCB3cml0ZXMgZGVwZW5kZW5jaWVzIHRvIGEgZmlsZSBuYW1lZAorICAjICdmb28uZCcsIHdoaWNoIGxhbmRzIG5leHQgdG8gdGhlIG9iamVjdCBmaWxlLCB3aGVyZXZlciB0aGF0CisgICMgaGFwcGVucyB0byBiZS4KKyAgIyBNdWNoIG9mIHRoaXMgaXMgc2ltaWxhciB0byB0aGUgdHJ1NjQgY2FzZTsgc2VlIGNvbW1lbnRzIHRoZXJlLgorICBkaXI9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfC9bXi9dKiR8L3wnYAorICB0ZXN0ICJ4JGRpciIgPSAieCRvYmplY3QiICYmIGRpcj0KKyAgYmFzZT1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8Xi4qL3x8JyAtZSAncy9cLm8kLy8nIC1lICdzL1wubG8kLy8nYAorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2UuZAorICAgIHRtcGRlcGZpbGUyPSRkaXIubGlicy8kYmFzZS5kCisgICAgIiRAIiAtV2MsK01ha2VkCisgIGVsc2UKKyAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2UuZAorICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS5kCisgICAgIiRAIiArTWFrZWQKKyAgZmkKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIgorICAgICBleGl0ICRzdGF0CisgIGZpCisKKyAgZm9yIHRtcGRlcGZpbGUgaW4gIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIKKyAgZG8KKyAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKKyAgZG9uZQorICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KKyAgICBzZWQgLWUgInMsXi4qXC5bYS16XSo6LCRvYmplY3Q6LCIgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgICAjIEFkZCBgZGVwZW5kZW50Lmg6JyBsaW5lcy4KKyAgICBzZWQgLW5lICcyLCR7CisJICAgICAgIHMvXiAqLy8KKwkgICAgICAgcy8gXFwqJC8vCisJICAgICAgIHMvJC86LworCSAgICAgICBwCisJICAgICB9JyAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyAgZWxzZQorICAgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCisgIGZpCisgIHJtIC1mICIkdG1wZGVwZmlsZSIgIiR0bXBkZXBmaWxlMiIKKyAgOzsKKwordHJ1NjQpCisgICAjIFRoZSBUcnU2NCBjb21waWxlciB1c2VzIC1NRCB0byBnZW5lcmF0ZSBkZXBlbmRlbmNpZXMgYXMgYSBzaWRlCisgICAjIGVmZmVjdC4gIGBjYyAtTUQgLW8gZm9vLm8gLi4uJyBwdXRzIHRoZSBkZXBlbmRlbmNpZXMgaW50byBgZm9vLm8uZCcuCisgICAjIEF0IGxlYXN0IG9uIEFscGhhL1JlZGhhdCA2LjEsIENvbXBhcSBDQ0MgVjYuMi01MDQgc2VlbXMgdG8gcHV0CisgICAjIGRlcGVuZGVuY2llcyBpbiBgZm9vLmQnIGluc3RlYWQsIHNvIHdlIGNoZWNrIGZvciB0aGF0IHRvby4KKyAgICMgU3ViZGlyZWN0b3JpZXMgYXJlIHJlc3BlY3RlZC4KKyAgIGRpcj1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8L1teL10qJHwvfCdgCisgICB0ZXN0ICJ4JGRpciIgPSAieCRvYmplY3QiICYmIGRpcj0KKyAgIGJhc2U9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfF4uKi98fCcgLWUgJ3MvXC5vJC8vJyAtZSAncy9cLmxvJC8vJ2AKKworICAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgICAjIFdpdGggVHJ1NjQgY2MsIHNoYXJlZCBvYmplY3RzIGNhbiBhbHNvIGJlIHVzZWQgdG8gbWFrZSBhCisgICAgICAjIHN0YXRpYyBsaWJyYXJ5LiAgVGhpcyBtZWNoYW5pc20gaXMgdXNlZCBpbiBsaWJ0b29sIDEuNCBzZXJpZXMgdG8KKyAgICAgICMgaGFuZGxlIGJvdGggc2hhcmVkIGFuZCBzdGF0aWMgbGlicmFyaWVzIGluIGEgc2luZ2xlIGNvbXBpbGF0aW9uLgorICAgICAgIyBXaXRoIGxpYnRvb2wgMS40LCBkZXBlbmRlbmNpZXMgd2VyZSBvdXRwdXQgaW4gJGRpci5saWJzLyRiYXNlLmxvLmQuCisgICAgICAjCisgICAgICAjIFdpdGggbGlidG9vbCAxLjUgdGhpcyBleGNlcHRpb24gd2FzIHJlbW92ZWQsIGFuZCBsaWJ0b29sIG5vdworICAgICAgIyBnZW5lcmF0ZXMgMiBzZXBhcmF0ZSBvYmplY3RzIGZvciB0aGUgMiBsaWJyYXJpZXMuICBUaGVzZSB0d28KKyAgICAgICMgY29tcGlsYXRpb25zIG91dHB1dCBkZXBlbmRlbmNpZXMgaW4gJGRpci5saWJzLyRiYXNlLm8uZCBhbmQKKyAgICAgICMgaW4gJGRpciRiYXNlLm8uZC4gIFdlIGhhdmUgdG8gY2hlY2sgZm9yIGJvdGggZmlsZXMsIGJlY2F1c2UKKyAgICAgICMgb25lIG9mIHRoZSB0d28gY29tcGlsYXRpb25zIGNhbiBiZSBkaXNhYmxlZC4gIFdlIHNob3VsZCBwcmVmZXIKKyAgICAgICMgJGRpciRiYXNlLm8uZCBvdmVyICRkaXIubGlicy8kYmFzZS5vLmQgYmVjYXVzZSB0aGUgbGF0dGVyIGlzCisgICAgICAjIGF1dG9tYXRpY2FsbHkgY2xlYW5lZCB3aGVuIC5saWJzLyBpcyBkZWxldGVkLCB3aGlsZSBpZ25vcmluZworICAgICAgIyB0aGUgZm9ybWVyIHdvdWxkIGNhdXNlIGEgZGlzdGNsZWFuY2hlY2sgcGFuaWMuCisgICAgICB0bXBkZXBmaWxlMT0kZGlyLmxpYnMvJGJhc2UubG8uZCAgICMgbGlidG9vbCAxLjQKKyAgICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS5vLmQgICAgICAgICAgIyBsaWJ0b29sIDEuNQorICAgICAgdG1wZGVwZmlsZTM9JGRpci5saWJzLyRiYXNlLm8uZCAgICAjIGxpYnRvb2wgMS41CisgICAgICB0bXBkZXBmaWxlND0kZGlyLmxpYnMvJGJhc2UuZCAgICAgICMgQ29tcGFxIENDQyBWNi4yLTUwNAorICAgICAgIiRAIiAtV2MsLU1ECisgICBlbHNlCisgICAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2Uuby5kCisgICAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2UuZAorICAgICAgdG1wZGVwZmlsZTM9JGRpciRiYXNlLmQKKyAgICAgIHRtcGRlcGZpbGU0PSRkaXIkYmFzZS5kCisgICAgICAiJEAiIC1NRAorICAgZmkKKworICAgc3RhdD0kPworICAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgICBlbHNlCisgICAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIiAiJHRtcGRlcGZpbGU0IgorICAgICAgZXhpdCAkc3RhdAorICAgZmkKKworICAgZm9yIHRtcGRlcGZpbGUgaW4gIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIgIiR0bXBkZXBmaWxlNCIKKyAgIGRvCisgICAgIHRlc3QgLWYgIiR0bXBkZXBmaWxlIiAmJiBicmVhaworICAgZG9uZQorICAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuCisgICAgICBzZWQgLWUgInMsXi4qXC5bYS16XSo6LCRvYmplY3Q6LCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAgICAgIyBUaGF0J3MgYSB0YWIgYW5kIGEgc3BhY2UgaW4gdGhlIFtdLgorICAgICAgc2VkIC1lICdzLF4uKlwuW2Etel0qOlsJIF0qLCwnIC1lICdzLCQsOiwnIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisgICBlbHNlCisgICAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgorICAgZmkKKyAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgIDs7CisKKyNub3NpZGVlZmZlY3QpCisgICMgVGhpcyBjb21tZW50IGFib3ZlIGlzIHVzZWQgYnkgYXV0b21ha2UgdG8gdGVsbCBzaWRlLWVmZmVjdAorICAjIGRlcGVuZGVuY3kgdHJhY2tpbmcgbWVjaGFuaXNtcyBmcm9tIHNsb3dlciBvbmVzLgorCitkYXNobXN0ZG91dCkKKyAgIyBJbXBvcnRhbnQgbm90ZTogaW4gb3JkZXIgdG8gc3VwcG9ydCB0aGlzIG1vZGUsIGEgY29tcGlsZXIgKm11c3QqCisgICMgYWx3YXlzIHdyaXRlIHRoZSBwcmVwcm9jZXNzZWQgZmlsZSB0byBzdGRvdXQsIHJlZ2FyZGxlc3Mgb2YgLW8uCisgICIkQCIgfHwgZXhpdCAkPworCisgICMgUmVtb3ZlIHRoZSBjYWxsIHRvIExpYnRvb2wuCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHdoaWxlIHRlc3QgIlgkMSIgIT0gJ1gtLW1vZGU9Y29tcGlsZSc7IGRvCisgICAgICBzaGlmdAorICAgIGRvbmUKKyAgICBzaGlmdAorICBmaQorCisgICMgUmVtb3ZlIGAtbyAkb2JqZWN0Jy4KKyAgSUZTPSIgIgorICBmb3IgYXJnCisgIGRvCisgICAgY2FzZSAkYXJnIGluCisgICAgLW8pCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAkb2JqZWN0KQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIgorICAgICAgc2hpZnQgIyBmbm9yZAorICAgICAgc2hpZnQgIyAkYXJnCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgIHRlc3QgLXogIiRkYXNobWZsYWciICYmIGRhc2htZmxhZz0tTQorICAjIFJlcXVpcmUgYXQgbGVhc3QgdHdvIGNoYXJhY3RlcnMgYmVmb3JlIHNlYXJjaGluZyBmb3IgYDonCisgICMgaW4gdGhlIHRhcmdldCBuYW1lLiAgVGhpcyBpcyB0byBjb3BlIHdpdGggRE9TLXN0eWxlIGZpbGVuYW1lczoKKyAgIyBhIGRlcGVuZGVuY3kgc3VjaCBhcyBgYzovZm9vL2JhcicgY291bGQgYmUgc2VlbiBhcyB0YXJnZXQgYGMnIG90aGVyd2lzZS4KKyAgIiRAIiAkZGFzaG1mbGFnIHwKKyAgICBzZWQgJ3M6XlsgIF0qW146IF1bXjpdW146XSpcOlsgICAgXSo6JyIkb2JqZWN0IidcOiA6JyA+ICIkdG1wZGVwZmlsZSIKKyAgcm0gLWYgIiRkZXBmaWxlIgorICBjYXQgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICB0ciAnICcgJworJyA8ICIkdG1wZGVwZmlsZSIgfCBcCisjIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgorIyMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKyAgICBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICcvOiQvZCcgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCitkYXNoWG1zdGRvdXQpCisgICMgVGhpcyBjYXNlIG9ubHkgZXhpc3RzIHRvIHNhdGlzZnkgZGVwZW5kLm00LiAgSXQgaXMgbmV2ZXIgYWN0dWFsbHkKKyAgIyBydW4sIGFzIHRoaXMgbW9kZSBpcyBzcGVjaWFsbHkgcmVjb2duaXplZCBpbiB0aGUgcHJlYW1ibGUuCisgIGV4aXQgMQorICA7OworCittYWtlZGVwZW5kKQorICAiJEAiIHx8IGV4aXQgJD8KKyAgIyBSZW1vdmUgYW55IExpYnRvb2wgY2FsbAorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB3aGlsZSB0ZXN0ICJYJDEiICE9ICdYLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKyAgIyBYIG1ha2VkZXBlbmQKKyAgc2hpZnQKKyAgY2xlYXJlZD1ubyBlYXQ9bm8KKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgJGNsZWFyZWQgaW4KKyAgICBubykKKyAgICAgIHNldCAiIjsgc2hpZnQKKyAgICAgIGNsZWFyZWQ9eWVzIDs7CisgICAgZXNhYworICAgIGlmIHRlc3QgJGVhdCA9IHllczsgdGhlbgorICAgICAgZWF0PW5vCisgICAgICBjb250aW51ZQorICAgIGZpCisgICAgY2FzZSAiJGFyZyIgaW4KKyAgICAtRCp8LUkqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciOyBzaGlmdCA7OworICAgICMgU3RyaXAgYW55IG9wdGlvbiB0aGF0IG1ha2VkZXBlbmQgbWF5IG5vdCB1bmRlcnN0YW5kLiAgUmVtb3ZlCisgICAgIyB0aGUgb2JqZWN0IHRvbywgb3RoZXJ3aXNlIG1ha2VkZXBlbmQgd2lsbCBwYXJzZSBpdCBhcyBhIHNvdXJjZSBmaWxlLgorICAgIC1hcmNoKQorICAgICAgZWF0PXllcyA7OworICAgIC0qfCRvYmplY3QpCisgICAgICA7OworICAgICopCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyI7IHNoaWZ0IDs7CisgICAgZXNhYworICBkb25lCisgIG9ial9zdWZmaXg9YGVjaG8gIiRvYmplY3QiIHwgc2VkICdzL14uKlwuLy4vJ2AKKyAgdG91Y2ggIiR0bXBkZXBmaWxlIgorICAke01BS0VERVBFTkQtbWFrZWRlcGVuZH0gLW8iJG9ial9zdWZmaXgiIC1mIiR0bXBkZXBmaWxlIiAiJEAiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgc2VkICcxLDJkJyAiJHRtcGRlcGZpbGUiIHwgdHIgJyAnICcKKycgfCBcCisjIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgorIyMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKyAgICBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICcvOiQvZCcgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIiAiJHRtcGRlcGZpbGUiLmJhaworICA7OworCitjcHApCisgICMgSW1wb3J0YW50IG5vdGU6IGluIG9yZGVyIHRvIHN1cHBvcnQgdGhpcyBtb2RlLCBhIGNvbXBpbGVyICptdXN0KgorICAjIGFsd2F5cyB3cml0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgdG8gc3Rkb3V0LgorICAiJEAiIHx8IGV4aXQgJD8KKworICAjIFJlbW92ZSB0aGUgY2FsbCB0byBMaWJ0b29sLgorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB3aGlsZSB0ZXN0ICJYJDEiICE9ICdYLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKworICAjIFJlbW92ZSBgLW8gJG9iamVjdCcuCisgIElGUz0iICIKKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgJGFyZyBpbgorICAgIC1vKQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgJG9iamVjdCkKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICopCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIKKyAgICAgIHNoaWZ0ICMgZm5vcmQKKyAgICAgIHNoaWZ0ICMgJGFyZworICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAiJEAiIC1FIHwKKyAgICBzZWQgLW4gLWUgJy9eIyBbMC05XVswLTldKiAiXChbXiJdKlwpIi4qLyBzOjogXDEgXFw6cCcgXAorICAgICAgIC1lICcvXiNsaW5lIFswLTldWzAtOV0qICJcKFteIl0qXCkiLiovIHM6OiBcMSBcXDpwJyB8CisgICAgc2VkICckIHM6IFxcJDo6JyA+ICIkdG1wZGVwZmlsZSIKKyAgcm0gLWYgIiRkZXBmaWxlIgorICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgorICBjYXQgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyAgc2VkIDwgIiR0bXBkZXBmaWxlIiAnL14kL2Q7cy9eIC8vO3MvIFxcJC8vO3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCittc3Zpc3VhbGNwcCkKKyAgIyBJbXBvcnRhbnQgbm90ZTogaW4gb3JkZXIgdG8gc3VwcG9ydCB0aGlzIG1vZGUsIGEgY29tcGlsZXIgKm11c3QqCisgICMgYWx3YXlzIHdyaXRlIHRoZSBwcmVwcm9jZXNzZWQgZmlsZSB0byBzdGRvdXQuCisgICIkQCIgfHwgZXhpdCAkPworCisgICMgUmVtb3ZlIHRoZSBjYWxsIHRvIExpYnRvb2wuCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHdoaWxlIHRlc3QgIlgkMSIgIT0gJ1gtLW1vZGU9Y29tcGlsZSc7IGRvCisgICAgICBzaGlmdAorICAgIGRvbmUKKyAgICBzaGlmdAorICBmaQorCisgIElGUz0iICIKKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgIiRhcmciIGluCisgICAgLW8pCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAkb2JqZWN0KQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgIi1HbSJ8Ii9HbSJ8Ii1HaSJ8Ii9HaSJ8Ii1aSSJ8Ii9aSSIpCisJc2V0IGZub3JkICIkQCIKKwlzaGlmdAorCXNoaWZ0CisJOzsKKyAgICAqKQorCXNldCBmbm9yZCAiJEAiICIkYXJnIgorCXNoaWZ0CisJc2hpZnQKKwk7OworICAgIGVzYWMKKyAgZG9uZQorICAiJEAiIC1FIDI+L2Rldi9udWxsIHwKKyAgc2VkIC1uICcvXiNsaW5lIFswLTldWzAtOV0qICJcKFteIl0qXCkiLyBzOjpcMTpwJyB8ICRjeWdwYXRoX3UgfCBzb3J0IC11ID4gIiR0bXBkZXBmaWxlIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisgIHNlZCA8ICIkdG1wZGVwZmlsZSIgLW4gLWUgJ3MlICVcXCAlZycgLWUgJy9eXCguKlwpJC8gczo6CVwxIFxcOnAnID4+ICIkZGVwZmlsZSIKKyAgZWNobyAiCSIgPj4gIiRkZXBmaWxlIgorICBzZWQgPCAiJHRtcGRlcGZpbGUiIC1uIC1lICdzJSAlXFwgJWcnIC1lICcvXlwoLipcKSQvIHM6OlwxXDo6cCcgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK21zdmNtc3lzKQorICAjIFRoaXMgY2FzZSBleGlzdHMgb25seSB0byBsZXQgZGVwZW5kLm00IGRvIGl0cyB3b3JrLiAgSXQgd29ya3MgYnkKKyAgIyBsb29raW5nIGF0IHRoZSB0ZXh0IG9mIHRoaXMgc2NyaXB0LiAgVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgcnVuLAorICAjIHNpbmNlIGl0IGlzIGNoZWNrZWQgZm9yIGFib3ZlLgorICBleGl0IDEKKyAgOzsKKworbm9uZSkKKyAgZXhlYyAiJEAiCisgIDs7CisKKyopCisgIGVjaG8gIlVua25vd24gZGVwbW9kZSAkZGVwbW9kZSIgMT4mMgorICBleGl0IDEKKyAgOzsKK2VzYWMKKworZXhpdCAwCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9zaGFyZS9saWJ0b29sL2NvbmZpZy9pbnN0YWxsLXNoIGIvc2hhcmUvbGlidG9vbC9jb25maWcvaW5zdGFsbC1zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZjgzY2U5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbGlidG9vbC9jb25maWcvaW5zdGFsbC1zaApAQCAtMCwwICsxLDUyNCBAQAorIyEvYmluL3NoCisjIGluc3RhbGwgLSBpbnN0YWxsIGEgcHJvZ3JhbSwgc2NyaXB0LCBvciBkYXRhZmlsZQorCitzY3JpcHR2ZXJzaW9uPTIwMTAtMDItMDYuMTg7ICMgVVRDCisKKyMgVGhpcyBvcmlnaW5hdGVzIGZyb20gWDExUjUgKG1pdC91dGlsL3NjcmlwdHMvaW5zdGFsbC5zaCksIHdoaWNoIHdhcworIyBsYXRlciByZWxlYXNlZCBpbiBYMTFSNiAoeGMvY29uZmlnL3V0aWwvaW5zdGFsbC5zaCkgd2l0aCB0aGUKKyMgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQgbGljZW5zZS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk0IFggQ29uc29ydGl1bQorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bworIyBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZQorIyByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyMgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisjIFggQ09OU09SVElVTSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDLQorIyBUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiB0aGUgWCBDb25zb3J0aXVtIHNoYWxsIG5vdAorIyBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbC0KKyMgaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gdGhlIFggQ29uc29yLQorIyB0aXVtLgorIworIworIyBGU0YgY2hhbmdlcyB0byB0aGlzIGZpbGUgYXJlIGluIHRoZSBwdWJsaWMgZG9tYWluLgorIworIyBDYWxsaW5nIHRoaXMgc2NyaXB0IGluc3RhbGwtc2ggaXMgcHJlZmVycmVkIG92ZXIgaW5zdGFsbC5zaCwgdG8gcHJldmVudAorIyBgbWFrZScgaW1wbGljaXQgcnVsZXMgZnJvbSBjcmVhdGluZyBhIGZpbGUgY2FsbGVkIGluc3RhbGwgZnJvbSBpdAorIyB3aGVuIHRoZXJlIGlzIG5vIE1ha2VmaWxlLgorIworIyBUaGlzIHNjcmlwdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIEJTRCBpbnN0YWxsIHNjcmlwdCwgYnV0IHdhcyB3cml0dGVuCisjIGZyb20gc2NyYXRjaC4KKworbmw9JworJworSUZTPSIgIiIJJG5sIgorCisjIHNldCBET0lUUFJPRyB0byBlY2hvIHRvIHRlc3QgdGhpcyBzY3JpcHQKKworIyBEb24ndCB1c2UgOi0gc2luY2UgNC4zQlNEIGFuZCBlYXJsaWVyIHNoZWxscyBkb24ndCBsaWtlIGl0LgorZG9pdD0ke0RPSVRQUk9HLX0KK2lmIHRlc3QgLXogIiRkb2l0IjsgdGhlbgorICBkb2l0X2V4ZWM9ZXhlYworZWxzZQorICBkb2l0X2V4ZWM9JGRvaXQKK2ZpCisKKyMgUHV0IGluIGFic29sdXRlIGZpbGUgbmFtZXMgaWYgeW91IGRvbid0IGhhdmUgdGhlbSBpbiB5b3VyIHBhdGg7CisjIG9yIHVzZSBlbnZpcm9ubWVudCB2YXJzLgorCitjaGdycHByb2c9JHtDSEdSUFBST0ctY2hncnB9CitjaG1vZHByb2c9JHtDSE1PRFBST0ctY2htb2R9CitjaG93bnByb2c9JHtDSE9XTlBST0ctY2hvd259CitjbXBwcm9nPSR7Q01QUFJPRy1jbXB9CitjcHByb2c9JHtDUFBST0ctY3B9Citta2RpcnByb2c9JHtNS0RJUlBST0ctbWtkaXJ9CittdnByb2c9JHtNVlBST0ctbXZ9CitybXByb2c9JHtSTVBST0ctcm19CitzdHJpcHByb2c9JHtTVFJJUFBST0ctc3RyaXB9CisKK3Bvc2l4X2dsb2I9Jz8nCitpbml0aWFsaXplX3Bvc2l4X2dsb2I9JworICB0ZXN0ICIkcG9zaXhfZ2xvYiIgIT0gIj8iIHx8IHsKKyAgICBpZiAoc2V0IC1mKSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgcG9zaXhfZ2xvYj0KKyAgICBlbHNlCisgICAgICBwb3NpeF9nbG9iPToKKyAgICBmaQorICB9CisnCisKK3Bvc2l4X21rZGlyPQorCisjIERlc2lyZWQgbW9kZSBvZiBpbnN0YWxsZWQgZmlsZS4KK21vZGU9MDc1NQorCitjaGdycGNtZD0KK2NobW9kY21kPSRjaG1vZHByb2cKK2Nob3duY21kPQorbXZjbWQ9JG12cHJvZworcm1jbWQ9IiRybXByb2cgLWYiCitzdHJpcGNtZD0KKworc3JjPQorZHN0PQorZGlyX2FyZz0KK2RzdF9hcmc9CisKK2NvcHlfb25fY2hhbmdlPWZhbHNlCitub190YXJnZXRfZGlyZWN0b3J5PQorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFstVF0gU1JDRklMRSBEU1RGSUxFCisgICBvcjogJDAgW09QVElPTl0uLi4gU1JDRklMRVMuLi4gRElSRUNUT1JZCisgICBvcjogJDAgW09QVElPTl0uLi4gLXQgRElSRUNUT1JZIFNSQ0ZJTEVTLi4uCisgICBvcjogJDAgW09QVElPTl0uLi4gLWQgRElSRUNUT1JJRVMuLi4KKworSW4gdGhlIDFzdCBmb3JtLCBjb3B5IFNSQ0ZJTEUgdG8gRFNURklMRS4KK0luIHRoZSAybmQgYW5kIDNyZCwgY29weSBhbGwgU1JDRklMRVMgdG8gRElSRUNUT1JZLgorSW4gdGhlIDR0aCwgY3JlYXRlIERJUkVDVE9SSUVTLgorCitPcHRpb25zOgorICAgICAtLWhlbHAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0LgorICAgICAtLXZlcnNpb24gIGRpc3BsYXkgdmVyc2lvbiBpbmZvIGFuZCBleGl0LgorCisgIC1jICAgICAgICAgICAgKGlnbm9yZWQpCisgIC1DICAgICAgICAgICAgaW5zdGFsbCBvbmx5IGlmIGRpZmZlcmVudCAocHJlc2VydmUgdGhlIGxhc3QgZGF0YSBtb2RpZmljYXRpb24gdGltZSkKKyAgLWQgICAgICAgICAgICBjcmVhdGUgZGlyZWN0b3JpZXMgaW5zdGVhZCBvZiBpbnN0YWxsaW5nIGZpbGVzLgorICAtZyBHUk9VUCAgICAgICRjaGdycHByb2cgaW5zdGFsbGVkIGZpbGVzIHRvIEdST1VQLgorICAtbSBNT0RFICAgICAgICRjaG1vZHByb2cgaW5zdGFsbGVkIGZpbGVzIHRvIE1PREUuCisgIC1vIFVTRVIgICAgICAgJGNob3ducHJvZyBpbnN0YWxsZWQgZmlsZXMgdG8gVVNFUi4KKyAgLXMgICAgICAgICAgICAkc3RyaXBwcm9nIGluc3RhbGxlZCBmaWxlcy4KKyAgLXQgRElSRUNUT1JZICBpbnN0YWxsIGludG8gRElSRUNUT1JZLgorICAtVCAgICAgICAgICAgIHJlcG9ydCBhbiBlcnJvciBpZiBEU1RGSUxFIGlzIGEgZGlyZWN0b3J5LgorCitFbnZpcm9ubWVudCB2YXJpYWJsZXMgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgY29tbWFuZHM6CisgIENIR1JQUFJPRyBDSE1PRFBST0cgQ0hPV05QUk9HIENNUFBST0cgQ1BQUk9HIE1LRElSUFJPRyBNVlBST0cKKyAgUk1QUk9HIFNUUklQUFJPRworIgorCit3aGlsZSB0ZXN0ICQjIC1uZSAwOyBkbworICBjYXNlICQxIGluCisgICAgLWMpIDs7CisKKyAgICAtQykgY29weV9vbl9jaGFuZ2U9dHJ1ZTs7CisKKyAgICAtZCkgZGlyX2FyZz10cnVlOzsKKworICAgIC1nKSBjaGdycGNtZD0iJGNoZ3JwcHJvZyAkMiIKKwlzaGlmdDs7CisKKyAgICAtLWhlbHApIGVjaG8gIiR1c2FnZSI7IGV4aXQgJD87OworCisgICAgLW0pIG1vZGU9JDIKKwljYXNlICRtb2RlIGluCisJICAqJyAnKiB8IConCScqIHwgKicKKycqCSAgfCAqJyonKiB8IConPycqIHwgKidbJyopCisJICAgIGVjaG8gIiQwOiBpbnZhbGlkIG1vZGU6ICRtb2RlIiA+JjIKKwkgICAgZXhpdCAxOzsKKwllc2FjCisJc2hpZnQ7OworCisgICAgLW8pIGNob3duY21kPSIkY2hvd25wcm9nICQyIgorCXNoaWZ0OzsKKworICAgIC1zKSBzdHJpcGNtZD0kc3RyaXBwcm9nOzsKKworICAgIC10KSBkc3RfYXJnPSQyCisJc2hpZnQ7OworCisgICAgLVQpIG5vX3RhcmdldF9kaXJlY3Rvcnk9dHJ1ZTs7CisKKyAgICAtLXZlcnNpb24pIGVjaG8gIiQwICRzY3JpcHR2ZXJzaW9uIjsgZXhpdCAkPzs7CisKKyAgICAtLSkJc2hpZnQKKwlicmVhazs7CisKKyAgICAtKikJZWNobyAiJDA6IGludmFsaWQgb3B0aW9uOiAkMSIgPiYyCisJZXhpdCAxOzsKKworICAgICopICBicmVhazs7CisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworaWYgdGVzdCAkIyAtbmUgMCAmJiB0ZXN0IC16ICIkZGlyX2FyZyRkc3RfYXJnIjsgdGhlbgorICAjIFdoZW4gLWQgaXMgdXNlZCwgYWxsIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZS4KKyAgIyBXaGVuIC10IGlzIHVzZWQsIHRoZSBkZXN0aW5hdGlvbiBpcyBhbHJlYWR5IHNwZWNpZmllZC4KKyAgIyBPdGhlcndpc2UsIHRoZSBsYXN0IGFyZ3VtZW50IGlzIHRoZSBkZXN0aW5hdGlvbi4gIFJlbW92ZSBpdCBmcm9tICRALgorICBmb3IgYXJnCisgIGRvCisgICAgaWYgdGVzdCAtbiAiJGRzdF9hcmciOyB0aGVuCisgICAgICAjICRAIGlzIG5vdCBlbXB0eTogaXQgY29udGFpbnMgYXQgbGVhc3QgJGFyZy4KKyAgICAgIHNldCBmbm9yZCAiJEAiICIkZHN0X2FyZyIKKyAgICAgIHNoaWZ0ICMgZm5vcmQKKyAgICBmaQorICAgIHNoaWZ0ICMgYXJnCisgICAgZHN0X2FyZz0kYXJnCisgIGRvbmUKK2ZpCisKK2lmIHRlc3QgJCMgLWVxIDA7IHRoZW4KKyAgaWYgdGVzdCAteiAiJGRpcl9hcmciOyB0aGVuCisgICAgZWNobyAiJDA6IG5vIGlucHV0IGZpbGUgc3BlY2lmaWVkLiIgPiYyCisgICAgZXhpdCAxCisgIGZpCisgICMgSXQncyBPSyB0byBjYWxsIGBpbnN0YWxsLXNoIC1kJyB3aXRob3V0IGFyZ3VtZW50LgorICAjIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGNyZWF0aW5nIGNvbmRpdGlvbmFsIGRpcmVjdG9yaWVzLgorICBleGl0IDAKK2ZpCisKK2lmIHRlc3QgLXogIiRkaXJfYXJnIjsgdGhlbgorICBkb19leGl0PScoZXhpdCAkcmV0KTsgZXhpdCAkcmV0JworICB0cmFwICJyZXQ9MTI5OyAkZG9fZXhpdCIgMQorICB0cmFwICJyZXQ9MTMwOyAkZG9fZXhpdCIgMgorICB0cmFwICJyZXQ9MTQxOyAkZG9fZXhpdCIgMTMKKyAgdHJhcCAicmV0PTE0MzsgJGRvX2V4aXQiIDE1CisKKyAgIyBTZXQgdW1hc2sgc28gYXMgbm90IHRvIGNyZWF0ZSB0ZW1wcyB3aXRoIHRvby1nZW5lcm91cyBtb2Rlcy4KKyAgIyBIb3dldmVyLCAnc3RyaXAnIHJlcXVpcmVzIGJvdGggcmVhZCBhbmQgd3JpdGUgYWNjZXNzIHRvIHRlbXBzLgorICBjYXNlICRtb2RlIGluCisgICAgIyBPcHRpbWl6ZSBjb21tb24gY2FzZXMuCisgICAgKjY0NCkgY3BfdW1hc2s9MTMzOzsKKyAgICAqNzU1KSBjcF91bWFzaz0yMjs7CisKKyAgICAqWzAtN10pCisgICAgICBpZiB0ZXN0IC16ICIkc3RyaXBjbWQiOyB0aGVuCisJdV9wbHVzX3J3PQorICAgICAgZWxzZQorCXVfcGx1c19ydz0nJSAyMDAnCisgICAgICBmaQorICAgICAgY3BfdW1hc2s9YGV4cHIgJygnIDc3NyAtICRtb2RlICUgMTAwMCAnKScgJHVfcGx1c19yd2A7OworICAgICopCisgICAgICBpZiB0ZXN0IC16ICIkc3RyaXBjbWQiOyB0aGVuCisJdV9wbHVzX3J3PQorICAgICAgZWxzZQorCXVfcGx1c19ydz0sdStydworICAgICAgZmkKKyAgICAgIGNwX3VtYXNrPSRtb2RlJHVfcGx1c19ydzs7CisgIGVzYWMKK2ZpCisKK2ZvciBzcmMKK2RvCisgICMgUHJvdGVjdCBuYW1lcyBzdGFydGluZyB3aXRoIGAtJy4KKyAgY2FzZSAkc3JjIGluCisgICAgLSopIHNyYz0uLyRzcmM7OworICBlc2FjCisKKyAgaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCisgICAgZHN0PSRzcmMKKyAgICBkc3RkaXI9JGRzdAorICAgIHRlc3QgLWQgIiRkc3RkaXIiCisgICAgZHN0ZGlyX3N0YXR1cz0kPworICBlbHNlCisKKyAgICAjIFdhaXRpbmcgZm9yIHRoaXMgdG8gYmUgZGV0ZWN0ZWQgYnkgdGhlICIkY3Bwcm9nICRzcmMgJGRzdHRtcCIgY29tbWFuZAorICAgICMgbWlnaHQgY2F1c2UgZGlyZWN0b3JpZXMgdG8gYmUgY3JlYXRlZCwgd2hpY2ggd291bGQgYmUgZXNwZWNpYWxseSBiYWQKKyAgICAjIGlmICRzcmMgKGFuZCB0aHVzICRkc3R0bXApIGNvbnRhaW5zICcqJy4KKyAgICBpZiB0ZXN0ICEgLWYgIiRzcmMiICYmIHRlc3QgISAtZCAiJHNyYyI7IHRoZW4KKyAgICAgIGVjaG8gIiQwOiAkc3JjIGRvZXMgbm90IGV4aXN0LiIgPiYyCisgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgaWYgdGVzdCAteiAiJGRzdF9hcmciOyB0aGVuCisgICAgICBlY2hvICIkMDogbm8gZGVzdGluYXRpb24gc3BlY2lmaWVkLiIgPiYyCisgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgZHN0PSRkc3RfYXJnCisgICAgIyBQcm90ZWN0IG5hbWVzIHN0YXJ0aW5nIHdpdGggYC0nLgorICAgIGNhc2UgJGRzdCBpbgorICAgICAgLSopIGRzdD0uLyRkc3Q7OworICAgIGVzYWMKKworICAgICMgSWYgZGVzdGluYXRpb24gaXMgYSBkaXJlY3RvcnksIGFwcGVuZCB0aGUgaW5wdXQgZmlsZW5hbWU7IHdvbid0IHdvcmsKKyAgICAjIGlmIGRvdWJsZSBzbGFzaGVzIGFyZW4ndCBpZ25vcmVkLgorICAgIGlmIHRlc3QgLWQgIiRkc3QiOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkbm9fdGFyZ2V0X2RpcmVjdG9yeSI7IHRoZW4KKwllY2hvICIkMDogJGRzdF9hcmc6IElzIGEgZGlyZWN0b3J5IiA+JjIKKwlleGl0IDEKKyAgICAgIGZpCisgICAgICBkc3RkaXI9JGRzdAorICAgICAgZHN0PSRkc3RkaXIvYGJhc2VuYW1lICIkc3JjImAKKyAgICAgIGRzdGRpcl9zdGF0dXM9MAorICAgIGVsc2UKKyAgICAgICMgUHJlZmVyIGRpcm5hbWUsIGJ1dCBmYWxsIGJhY2sgb24gYSBzdWJzdGl0dXRlIGlmIGRpcm5hbWUgZmFpbHMuCisgICAgICBkc3RkaXI9YAorCShkaXJuYW1lICIkZHN0IikgMj4vZGV2L251bGwgfHwKKwlleHByIFgiJGRzdCIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgICAgIFgiJGRzdCIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgICAgIFgiJGRzdCIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgICAgIFgiJGRzdCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CisJZWNobyBYIiRkc3QiIHwKKwkgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkJICAgcy8vXDEvCisJCSAgIHEKKwkJIH0KKwkJIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkJICAgcy8vXDEvCisJCSAgIHEKKwkJIH0KKwkJIC9eWFwoXC9cL1wpJC97CisJCSAgIHMvL1wxLworCQkgICBxCisJCSB9CisJCSAvXlhcKFwvXCkuKi97CisJCSAgIHMvL1wxLworCQkgICBxCisJCSB9CisJCSBzLy4qLy4vOyBxJworICAgICAgYAorCisgICAgICB0ZXN0IC1kICIkZHN0ZGlyIgorICAgICAgZHN0ZGlyX3N0YXR1cz0kPworICAgIGZpCisgIGZpCisKKyAgb2Jzb2xldGVfbWtkaXJfdXNlZD1mYWxzZQorCisgIGlmIHRlc3QgJGRzdGRpcl9zdGF0dXMgIT0gMDsgdGhlbgorICAgIGNhc2UgJHBvc2l4X21rZGlyIGluCisgICAgICAnJykKKwkjIENyZWF0ZSBpbnRlcm1lZGlhdGUgZGlycyB1c2luZyBtb2RlIDc1NSBhcyBtb2RpZmllZCBieSB0aGUgdW1hc2suCisJIyBUaGlzIGlzIGxpa2UgRnJlZUJTRCAnaW5zdGFsbCcgYXMgb2YgMTk5Ny0xMC0yOC4KKwl1bWFzaz1gdW1hc2tgCisJY2FzZSAkc3RyaXBjbWQuJHVtYXNrIGluCisJICAjIE9wdGltaXplIGNvbW1vbiBjYXNlcy4KKwkgICpbMjM2N11bMjM2N10pIG1rZGlyX3VtYXNrPSR1bWFzazs7CisJICAuKjBbMDJdWzAyXSB8IC5bMDJdWzAyXSB8IC5bMDJdKSBta2Rpcl91bWFzaz0yMjs7CisKKwkgICpbMC03XSkKKwkgICAgbWtkaXJfdW1hc2s9YGV4cHIgJHVtYXNrICsgMjIgXAorCSAgICAgIC0gJHVtYXNrICUgMTAwICUgNDAgKyAkdW1hc2sgJSAyMCBcCisJICAgICAgLSAkdW1hc2sgJSAxMCAlIDQgKyAkdW1hc2sgJSAyCisJICAgIGA7OworCSAgKikgbWtkaXJfdW1hc2s9JHVtYXNrLGdvLXc7OworCWVzYWMKKworCSMgV2l0aCAtZCwgY3JlYXRlIHRoZSBuZXcgZGlyZWN0b3J5IHdpdGggdGhlIHVzZXItc3BlY2lmaWVkIG1vZGUuCisJIyBPdGhlcndpc2UsIHJlbHkgb24gJG1rZGlyX3VtYXNrLgorCWlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgorCSAgbWtkaXJfbW9kZT0tbSRtb2RlCisJZWxzZQorCSAgbWtkaXJfbW9kZT0KKwlmaQorCisJcG9zaXhfbWtkaXI9ZmFsc2UKKwljYXNlICR1bWFzayBpbgorCSAgKlsxMjM1NjddWzAtN11bMC03XSkKKwkgICAgIyBQT1NJWCBta2RpciAtcCBzZXRzIHUrd3ggYml0cyByZWdhcmRsZXNzIG9mIHVtYXNrLCB3aGljaAorCSAgICAjIGlzIGluY29tcGF0aWJsZSB3aXRoIEZyZWVCU0QgJ2luc3RhbGwnIHdoZW4gKHVtYXNrICYgMzAwKSAhPSAwLgorCSAgICA7OworCSAgKikKKwkgICAgdG1wZGlyPSR7VE1QRElSLS90bXB9L2lucyRSQU5ET00tJCQKKwkgICAgdHJhcCAncmV0PSQ/OyBybWRpciAiJHRtcGRpci9kIiAiJHRtcGRpciIgMj4vZGV2L251bGw7IGV4aXQgJHJldCcgMAorCisJICAgIGlmICh1bWFzayAkbWtkaXJfdW1hc2sgJiYKKwkJZXhlYyAkbWtkaXJwcm9nICRta2Rpcl9tb2RlIC1wIC0tICIkdG1wZGlyL2QiKSA+L2Rldi9udWxsIDI+JjEKKwkgICAgdGhlbgorCSAgICAgIGlmIHRlc3QgLXogIiRkaXJfYXJnIiB8fCB7CisJCSAgICMgQ2hlY2sgZm9yIFBPU0lYIGluY29tcGF0aWJpbGl0aWVzIHdpdGggLW0uCisJCSAgICMgSFAtVVggMTEuMjMgYW5kIElSSVggNi41IG1rZGlyIC1tIC1wIHNldHMgZ3JvdXAtIG9yCisJCSAgICMgb3RoZXItd3JpdGVhYmxlIGJpdCBvZiBwYXJlbnQgZGlyZWN0b3J5IHdoZW4gaXQgc2hvdWxkbid0LgorCQkgICAjIEZyZWVCU0QgNi4xIG1rZGlyIC1tIC1wIHNldHMgbW9kZSBvZiBleGlzdGluZyBkaXJlY3RvcnkuCisJCSAgIGxzX2xkX3RtcGRpcj1gbHMgLWxkICIkdG1wZGlyImAKKwkJICAgY2FzZSAkbHNfbGRfdG1wZGlyIGluCisJCSAgICAgZD8/Pz8tP3ItKikgZGlmZmVyZW50X21vZGU9NzAwOzsKKwkJICAgICBkPz8/Py0/LS0qKSBkaWZmZXJlbnRfbW9kZT03NTU7OworCQkgICAgICopIGZhbHNlOzsKKwkJICAgZXNhYyAmJgorCQkgICAkbWtkaXJwcm9nIC1tJGRpZmZlcmVudF9tb2RlIC1wIC0tICIkdG1wZGlyIiAmJiB7CisJCSAgICAgbHNfbGRfdG1wZGlyXzE9YGxzIC1sZCAiJHRtcGRpciJgCisJCSAgICAgdGVzdCAiJGxzX2xkX3RtcGRpciIgPSAiJGxzX2xkX3RtcGRpcl8xIgorCQkgICB9CisJCSB9CisJICAgICAgdGhlbiBwb3NpeF9ta2Rpcj06CisJICAgICAgZmkKKwkgICAgICBybWRpciAiJHRtcGRpci9kIiAiJHRtcGRpciIKKwkgICAgZWxzZQorCSAgICAgICMgUmVtb3ZlIGFueSBkaXJzIGxlZnQgYmVoaW5kIGJ5IGFuY2llbnQgbWtkaXIgaW1wbGVtZW50YXRpb25zLgorCSAgICAgIHJtZGlyIC4vJG1rZGlyX21vZGUgLi8tcCAuLy0tIDI+L2Rldi9udWxsCisJICAgIGZpCisJICAgIHRyYXAgJycgMDs7CisJZXNhYzs7CisgICAgZXNhYworCisgICAgaWYKKyAgICAgICRwb3NpeF9ta2RpciAmJiAoCisJdW1hc2sgJG1rZGlyX3VtYXNrICYmCisJJGRvaXRfZXhlYyAkbWtkaXJwcm9nICRta2Rpcl9tb2RlIC1wIC0tICIkZHN0ZGlyIgorICAgICAgKQorICAgIHRoZW4gOgorICAgIGVsc2UKKworICAgICAgIyBUaGUgdW1hc2sgaXMgcmlkaWN1bG91cywgb3IgbWtkaXIgZG9lcyBub3QgY29uZm9ybSB0byBQT1NJWCwKKyAgICAgICMgb3IgaXQgZmFpbGVkIHBvc3NpYmx5IGR1ZSB0byBhIHJhY2UgY29uZGl0aW9uLiAgQ3JlYXRlIHRoZQorICAgICAgIyBkaXJlY3RvcnkgdGhlIHNsb3cgd2F5LCBzdGVwIGJ5IHN0ZXAsIGNoZWNraW5nIGZvciByYWNlcyBhcyB3ZSBnby4KKworICAgICAgY2FzZSAkZHN0ZGlyIGluCisJLyopIHByZWZpeD0nLyc7OworCS0qKSBwcmVmaXg9Jy4vJzs7CisJKikgIHByZWZpeD0nJzs7CisgICAgICBlc2FjCisKKyAgICAgIGV2YWwgIiRpbml0aWFsaXplX3Bvc2l4X2dsb2IiCisKKyAgICAgIG9JRlM9JElGUworICAgICAgSUZTPS8KKyAgICAgICRwb3NpeF9nbG9iIHNldCAtZgorICAgICAgc2V0IGZub3JkICRkc3RkaXIKKyAgICAgIHNoaWZ0CisgICAgICAkcG9zaXhfZ2xvYiBzZXQgK2YKKyAgICAgIElGUz0kb0lGUworCisgICAgICBwcmVmaXhlcz0KKworICAgICAgZm9yIGQKKyAgICAgIGRvCisJdGVzdCAteiAiJGQiICYmIGNvbnRpbnVlCisKKwlwcmVmaXg9JHByZWZpeCRkCisJaWYgdGVzdCAtZCAiJHByZWZpeCI7IHRoZW4KKwkgIHByZWZpeGVzPQorCWVsc2UKKwkgIGlmICRwb3NpeF9ta2RpcjsgdGhlbgorCSAgICAodW1hc2s9JG1rZGlyX3VtYXNrICYmCisJICAgICAkZG9pdF9leGVjICRta2RpcnByb2cgJG1rZGlyX21vZGUgLXAgLS0gIiRkc3RkaXIiKSAmJiBicmVhaworCSAgICAjIERvbid0IGZhaWwgaWYgdHdvIGluc3RhbmNlcyBhcmUgcnVubmluZyBjb25jdXJyZW50bHkuCisJICAgIHRlc3QgLWQgIiRwcmVmaXgiIHx8IGV4aXQgMQorCSAgZWxzZQorCSAgICBjYXNlICRwcmVmaXggaW4KKwkgICAgICAqXCcqKSBxcHJlZml4PWBlY2hvICIkcHJlZml4IiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7CisJICAgICAgKikgcXByZWZpeD0kcHJlZml4OzsKKwkgICAgZXNhYworCSAgICBwcmVmaXhlcz0iJHByZWZpeGVzICckcXByZWZpeCciCisJICBmaQorCWZpCisJcHJlZml4PSRwcmVmaXgvCisgICAgICBkb25lCisKKyAgICAgIGlmIHRlc3QgLW4gIiRwcmVmaXhlcyI7IHRoZW4KKwkjIERvbid0IGZhaWwgaWYgdHdvIGluc3RhbmNlcyBhcmUgcnVubmluZyBjb25jdXJyZW50bHkuCisJKHVtYXNrICRta2Rpcl91bWFzayAmJgorCSBldmFsICJcJGRvaXRfZXhlYyBcJG1rZGlycHJvZyAkcHJlZml4ZXMiKSB8fAorCSAgdGVzdCAtZCAiJGRzdGRpciIgfHwgZXhpdCAxCisJb2Jzb2xldGVfbWtkaXJfdXNlZD10cnVlCisgICAgICBmaQorICAgIGZpCisgIGZpCisKKyAgaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCisgICAgeyB0ZXN0IC16ICIkY2hvd25jbWQiIHx8ICRkb2l0ICRjaG93bmNtZCAiJGRzdCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRjaGdycGNtZCIgfHwgJGRvaXQgJGNoZ3JwY21kICIkZHN0IjsgfSAmJgorICAgIHsgdGVzdCAiJG9ic29sZXRlX21rZGlyX3VzZWQkY2hvd25jbWQkY2hncnBjbWQiID0gZmFsc2UgfHwKKyAgICAgIHRlc3QgLXogIiRjaG1vZGNtZCIgfHwgJGRvaXQgJGNobW9kY21kICRtb2RlICIkZHN0IjsgfSB8fCBleGl0IDEKKyAgZWxzZQorCisgICAgIyBNYWtlIGEgY291cGxlIG9mIHRlbXAgZmlsZSBuYW1lcyBpbiB0aGUgcHJvcGVyIGRpcmVjdG9yeS4KKyAgICBkc3R0bXA9JGRzdGRpci9faW5zdC4kJF8KKyAgICBybXRtcD0kZHN0ZGlyL19ybS4kJF8KKworICAgICMgVHJhcCB0byBjbGVhbiB1cCB0aG9zZSB0ZW1wIGZpbGVzIGF0IGV4aXQuCisgICAgdHJhcCAncmV0PSQ/OyBybSAtZiAiJGRzdHRtcCIgIiRybXRtcCIgJiYgZXhpdCAkcmV0JyAwCisKKyAgICAjIENvcHkgdGhlIGZpbGUgbmFtZSB0byB0aGUgdGVtcCBuYW1lLgorICAgICh1bWFzayAkY3BfdW1hc2sgJiYgJGRvaXRfZXhlYyAkY3Bwcm9nICIkc3JjIiAiJGRzdHRtcCIpICYmCisKKyAgICAjIGFuZCBzZXQgYW55IG9wdGlvbnM7IGRvIGNobW9kIGxhc3QgdG8gcHJlc2VydmUgc2V0dWlkIGJpdHMuCisgICAgIworICAgICMgSWYgYW55IG9mIHRoZXNlIGZhaWwsIHdlIGFib3J0IHRoZSB3aG9sZSB0aGluZy4gIElmIHdlIHdhbnQgdG8KKyAgICAjIGlnbm9yZSBlcnJvcnMgZnJvbSBhbnkgb2YgdGhlc2UsIGp1c3QgbWFrZSBzdXJlIG5vdCB0byBpZ25vcmUKKyAgICAjIGVycm9ycyBmcm9tIHRoZSBhYm92ZSAiJGRvaXQgJGNwcHJvZyAkc3JjICRkc3R0bXAiIGNvbW1hbmQuCisgICAgIworICAgIHsgdGVzdCAteiAiJGNob3duY21kIiB8fCAkZG9pdCAkY2hvd25jbWQgIiRkc3R0bXAiOyB9ICYmCisgICAgeyB0ZXN0IC16ICIkY2hncnBjbWQiIHx8ICRkb2l0ICRjaGdycGNtZCAiJGRzdHRtcCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRzdHJpcGNtZCIgfHwgJGRvaXQgJHN0cmlwY21kICIkZHN0dG1wIjsgfSAmJgorICAgIHsgdGVzdCAteiAiJGNobW9kY21kIiB8fCAkZG9pdCAkY2htb2RjbWQgJG1vZGUgIiRkc3R0bXAiOyB9ICYmCisKKyAgICAjIElmIC1DLCBkb24ndCBib3RoZXIgdG8gY29weSBpZiBpdCB3b3VsZG4ndCBjaGFuZ2UgdGhlIGZpbGUuCisgICAgaWYgJGNvcHlfb25fY2hhbmdlICYmCisgICAgICAgb2xkPWBMQ19BTEw9QyBscyAtZGxMICIkZHN0IgkyPi9kZXYvbnVsbGAgJiYKKyAgICAgICBuZXc9YExDX0FMTD1DIGxzIC1kbEwgIiRkc3R0bXAiCTI+L2Rldi9udWxsYCAmJgorCisgICAgICAgZXZhbCAiJGluaXRpYWxpemVfcG9zaXhfZ2xvYiIgJiYKKyAgICAgICAkcG9zaXhfZ2xvYiBzZXQgLWYgJiYKKyAgICAgICBzZXQgWCAkb2xkICYmIG9sZD06JDI6JDQ6JDU6JDYgJiYKKyAgICAgICBzZXQgWCAkbmV3ICYmIG5ldz06JDI6JDQ6JDU6JDYgJiYKKyAgICAgICAkcG9zaXhfZ2xvYiBzZXQgK2YgJiYKKworICAgICAgIHRlc3QgIiRvbGQiID0gIiRuZXciICYmCisgICAgICAgJGNtcHByb2cgIiRkc3QiICIkZHN0dG1wIiA+L2Rldi9udWxsIDI+JjEKKyAgICB0aGVuCisgICAgICBybSAtZiAiJGRzdHRtcCIKKyAgICBlbHNlCisgICAgICAjIFJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KKyAgICAgICRkb2l0ICRtdmNtZCAtZiAiJGRzdHRtcCIgIiRkc3QiIDI+L2Rldi9udWxsIHx8CisKKyAgICAgICMgVGhlIHJlbmFtZSBmYWlsZWQsIHBlcmhhcHMgYmVjYXVzZSBtdiBjYW4ndCByZW5hbWUgc29tZXRoaW5nIGVsc2UKKyAgICAgICMgdG8gaXRzZWxmLCBvciBwZXJoYXBzIGJlY2F1c2UgbXYgaXMgc28gYW5jaWVudCB0aGF0IGl0IGRvZXMgbm90CisgICAgICAjIHN1cHBvcnQgLWYuCisgICAgICB7CisJIyBOb3cgcmVtb3ZlIG9yIG1vdmUgYXNpZGUgYW55IG9sZCBmaWxlIGF0IGRlc3RpbmF0aW9uIGxvY2F0aW9uLgorCSMgV2UgdHJ5IHRoaXMgdHdvIHdheXMgc2luY2Ugcm0gY2FuJ3QgdW5saW5rIGl0c2VsZiBvbiBzb21lCisJIyBzeXN0ZW1zIGFuZCB0aGUgZGVzdGluYXRpb24gZmlsZSBtaWdodCBiZSBidXN5IGZvciBvdGhlcgorCSMgcmVhc29ucy4gIEluIHRoaXMgY2FzZSwgdGhlIGZpbmFsIGNsZWFudXAgbWlnaHQgZmFpbCBidXQgdGhlIG5ldworCSMgZmlsZSBzaG91bGQgc3RpbGwgaW5zdGFsbCBzdWNjZXNzZnVsbHkuCisJeworCSAgdGVzdCAhIC1mICIkZHN0IiB8fAorCSAgJGRvaXQgJHJtY21kIC1mICIkZHN0IiAyPi9kZXYvbnVsbCB8fAorCSAgeyAkZG9pdCAkbXZjbWQgLWYgIiRkc3QiICIkcm10bXAiIDI+L2Rldi9udWxsICYmCisJICAgIHsgJGRvaXQgJHJtY21kIC1mICIkcm10bXAiIDI+L2Rldi9udWxsOyA6OyB9CisJICB9IHx8CisJICB7IGVjaG8gIiQwOiBjYW5ub3QgdW5saW5rIG9yIHJlbmFtZSAkZHN0IiA+JjIKKwkgICAgKGV4aXQgMSk7IGV4aXQgMQorCSAgfQorCX0gJiYKKworCSMgTm93IHJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KKwkkZG9pdCAkbXZjbWQgIiRkc3R0bXAiICIkZHN0IgorICAgICAgfQorICAgIGZpIHx8IGV4aXQgMQorCisgICAgdHJhcCAnJyAwCisgIGZpCitkb25lCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL3NoYXJlL2xpYnRvb2wvY29uZmlnL2x0bWFpbi5zaCBiL3NoYXJlL2xpYnRvb2wvY29uZmlnL2x0bWFpbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNGVhZWE0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbGlidG9vbC9jb25maWcvbHRtYWluLnNoCkBAIC0wLDAgKzEsODc0NSBAQAorIyBHZW5lcmF0ZWQgZnJvbSBsdG1haW4ubTRzaC4KKworIyBsaWJ0b29sIChHTlUgbGlidG9vbCkgMi4yLjEwCisjIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2CisKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LAorIyAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTworIyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworIyBHTlUgTGlidG9vbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyBpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CisjIGlzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorIyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIEdOVSBMaWJ0b29sOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgYSBjb3B5CisjIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sLAorIyBvciBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisjIFVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gW01PREUtQVJHXS4uLgorIworIyBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KKyMKKyMgICAgICAgLS1jb25maWcgICAgICAgICAgICAgc2hvdyBhbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyMgICAgICAgLS1kZWJ1ZyAgICAgICAgICAgICAgZW5hYmxlIHZlcmJvc2Ugc2hlbGwgdHJhY2luZworIyAgIC1uLCAtLWRyeS1ydW4gICAgICAgICAgICBkaXNwbGF5IGNvbW1hbmRzIHdpdGhvdXQgbW9kaWZ5aW5nIGFueSBmaWxlcworIyAgICAgICAtLWZlYXR1cmVzICAgICAgICAgICBkaXNwbGF5IGJhc2ljIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKyMgICAgICAgLS1tb2RlPU1PREUgICAgICAgICAgdXNlIG9wZXJhdGlvbiBtb2RlIE1PREUKKyMgICAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcyAgZG9uJ3QgcmVtb3ZlIGR1cGxpY2F0ZSBkZXBlbmRlbmN5IGxpYnJhcmllcworIyAgICAgICAtLXF1aWV0LCAtLXNpbGVudCAgICBkb24ndCBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCisjICAgICAgIC0tbm8tcXVpZXQsIC0tbm8tc2lsZW50CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgKGRlZmF1bHQpCisjICAgICAgIC0tdGFnPVRBRyAgICAgICAgICAgIHVzZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmcm9tIHRhZyBUQUcKKyMgICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgcHJpbnQgbW9yZSBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIHRoYW4gZGVmYXVsdAorIyAgICAgICAtLW5vLXZlcmJvc2UgICAgICAgICBkb24ndCBwcmludCB0aGUgZXh0cmEgaW5mb3JtYXRpb25hbCBtZXNzYWdlcworIyAgICAgICAtLXZlcnNpb24gICAgICAgICAgICBwcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uCisjICAgLWgsIC0taGVscCwgLS1oZWxwLWFsbCAgIHByaW50IHNob3J0LCBsb25nLCBvciBkZXRhaWxlZCBoZWxwIG1lc3NhZ2UKKyMKKyMgTU9ERSBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgIGNsZWFuICAgICAgICAgICAgICByZW1vdmUgZmlsZXMgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5CisjICAgICAgICAgY29tcGlsZSAgICAgICAgICAgIGNvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBvYmplY3QKKyMgICAgICAgICBleGVjdXRlICAgICAgICAgICAgYXV0b21hdGljYWxseSBzZXQgbGlicmFyeSBwYXRoLCB0aGVuIHJ1biBhIHByb2dyYW0KKyMgICAgICAgICBmaW5pc2ggICAgICAgICAgICAgY29tcGxldGUgdGhlIGluc3RhbGxhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcworIyAgICAgICAgIGluc3RhbGwgICAgICAgICAgICBpbnN0YWxsIGxpYnJhcmllcyBvciBleGVjdXRhYmxlcworIyAgICAgICAgIGxpbmsgICAgICAgICAgICAgICBjcmVhdGUgYSBsaWJyYXJ5IG9yIGFuIGV4ZWN1dGFibGUKKyMgICAgICAgICB1bmluc3RhbGwgICAgICAgICAgcmVtb3ZlIGxpYnJhcmllcyBmcm9tIGFuIGluc3RhbGxlZCBkaXJlY3RvcnkKKyMKKyMgTU9ERS1BUkdTIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBNT0RFLiAgV2hlbiBwYXNzZWQgYXMgZmlyc3Qgb3B0aW9uLAorIyBgLS1tb2RlPU1PREUnIG1heSBiZSBhYmJyZXZpYXRlZCBhcyBgTU9ERScgb3IgYSB1bmlxdWUgYWJicmV2aWF0aW9uIG9mIHRoYXQuCisjIFRyeSBgJHByb2duYW1lIC0taGVscCAtLW1vZGU9TU9ERScgZm9yIGEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBNT0RFLgorIworIyBXaGVuIHJlcG9ydGluZyBhIGJ1ZywgcGxlYXNlIGRlc2NyaWJlIGEgdGVzdCBjYXNlIHRvIHJlcHJvZHVjZSBpdCBhbmQKKyMgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorIworIyAgICAgICAgIGhvc3QtdHJpcGxldDoJJGhvc3QKKyMgICAgICAgICBzaGVsbDoJCSRTSEVMTAorIyAgICAgICAgIGNvbXBpbGVyOgkJJExUQ0MKKyMgICAgICAgICBjb21waWxlciBmbGFnczoJCSRMVENGTEFHUworIyAgICAgICAgIGxpbmtlcjoJCSRMRCAoZ251PyAkd2l0aF9nbnVfbGQpCisjICAgICAgICAgJHByb2duYW1lOgkoR05VIGxpYnRvb2wpIDIuMi4xMAorIyAgICAgICAgIGF1dG9tYWtlOgkkYXV0b21ha2VfdmVyc2lvbgorIyAgICAgICAgIGF1dG9jb25mOgkkYXV0b2NvbmZfdmVyc2lvbgorIworIyBSZXBvcnQgYnVncyB0byA8YnVnLWxpYnRvb2xAZ251Lm9yZz4uCisKK1BST0dSQU09bGlidG9vbAorUEFDS0FHRT1saWJ0b29sCitWRVJTSU9OPTIuMi4xMAorVElNRVNUQU1QPSIiCitwYWNrYWdlX3JldmlzaW9uPTEuMzE3NQorCisjIEJlIEJvdXJuZSBjb21wYXRpYmxlCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICpwb3NpeCopIHNldCAtbyBwb3NpeDs7IGVzYWMKK2ZpCitCSU5fU0g9eHBnNDsgZXhwb3J0IEJJTl9TSCAjIGZvciBUcnU2NAorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorCisjIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgbm8gcHJpbnQgYnVpbHRpbiBvciBwcmludGYuCitmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKK3sKKyAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKKyQxCitfTFRFQ0hPX0VPRicKK30KKworIyBOTFMgbnVpc2FuY2VzOiBXZSBzYXZlIHRoZSBvbGQgdmFsdWVzIHRvIHJlc3RvcmUgZHVyaW5nIGV4ZWN1dGUgbW9kZS4KK2x0X3VzZXJfbG9jYWxlPQorbHRfc2FmZV9sb2NhbGU9Citmb3IgbHRfdmFyIGluIExBTkcgTEFOR1VBR0UgTENfQUxMIExDX0NUWVBFIExDX0NPTExBVEUgTENfTUVTU0FHRVMKK2RvCisgIGV2YWwgImlmIHRlc3QgXCJcJHskbHRfdmFyK3NldH1cIiA9IHNldDsgdGhlbgorICAgICAgICAgIHNhdmVfJGx0X3Zhcj1cJCRsdF92YXIKKyAgICAgICAgICAkbHRfdmFyPUMKKwkgIGV4cG9ydCAkbHRfdmFyCisJICBsdF91c2VyX2xvY2FsZT1cIiRsdF92YXI9XFxcJHNhdmVfXCRsdF92YXI7IFwkbHRfdXNlcl9sb2NhbGVcIgorCSAgbHRfc2FmZV9sb2NhbGU9XCIkbHRfdmFyPUM7IFwkbHRfc2FmZV9sb2NhbGVcIgorCWZpIgorZG9uZQorTENfQUxMPUMKK0xBTkdVQUdFPUMKK2V4cG9ydCBMQU5HVUFHRSBMQ19BTEwKKworJGx0X3Vuc2V0IENEUEFUSAorCisKKyMgV29yayBhcm91bmQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpc3N1ZSBvbiBJUklYIDYuNS4gT24gSVJJWCA2LjQrLCBzaAorIyBpcyBrc2ggYnV0IHdoZW4gdGhlIHNoZWxsIGlzIGludm9rZWQgYXMgInNoIiBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgb2YKKyMgdGhlIF9YUEcgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IGVxdWFsIHRvIDEgKG9uZSksIHRoZSBzcGVjaWFsCisjIHBvc2l0aW9uYWwgcGFyYW1ldGVyICQwLCB3aXRoaW4gYSBmdW5jdGlvbiBjYWxsLCBpcyB0aGUgbmFtZSBvZiB0aGUKKyMgZnVuY3Rpb24uCitwcm9ncGF0aD0iJDAiCisKKworCis6ICR7Q1A9ImNwIC1mIn0KK3Rlc3QgIiR7RUNITytzZXR9IiA9IHNldCB8fCBFQ0hPPSR7YXNfZWNoby0ncHJpbnRmICVzXG4nfQorOiAke0VHUkVQPSJncmVwIC1FIn0KKzogJHtGR1JFUD0iZ3JlcCAtRiJ9Cis6ICR7R1JFUD0iZ3JlcCJ9Cis6ICR7TE5fUz0ibG4gLXMifQorOiAke01BS0U9Im1ha2UifQorOiAke01LRElSPSJta2RpciJ9Cis6ICR7TVY9Im12IC1mIn0KKzogJHtSTT0icm0gLWYifQorOiAke1NFRD0ic2VkIn0KKzogJHtTSEVMTD0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0ifQorOiAke1hzZWQ9IiRTRUQgLWUgMXMvXlgvLyJ9CisKKyMgR2xvYmFsIHZhcmlhYmxlczoKK0VYSVRfU1VDQ0VTUz0wCitFWElUX0ZBSUxVUkU9MQorRVhJVF9NSVNNQVRDSD02MyAgIyAkPyA9IDYzIGlzIHVzZWQgdG8gaW5kaWNhdGUgdmVyc2lvbiBtaXNtYXRjaCB0byBtaXNzaW5nLgorRVhJVF9TS0lQPTc3CSAgIyAkPyA9IDc3IGlzIHVzZWQgdG8gaW5kaWNhdGUgYSBza2lwcGVkIHRlc3QgdG8gYXV0b21ha2UuCisKK2V4aXRfc3RhdHVzPSRFWElUX1NVQ0NFU1MKKworIyBNYWtlIHN1cmUgSUZTIGhhcyBhIHNlbnNpYmxlIGRlZmF1bHQKK2x0X25sPScKKycKK0lGUz0iIAkkbHRfbmwiCisKK2Rpcm5hbWU9InMsL1teL10qJCwsIgorYmFzZW5hbWU9InMsXi4qLywsIgorCisjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CisjIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCisjIGNhbGw6CisjICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CisjICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQorIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCitmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCit7CisgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgLWUgIiRkaXJuYW1lImAKKyAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorICBlbHNlCisgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorICBmaQorICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAtZSAiJGJhc2VuYW1lImAKK30KKworIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUuCisKKyMgVGhlc2UgU0VEIHNjcmlwdHMgcHJlc3VwcG9zZSBhbiBhYnNvbHV0ZSBwYXRoIHdpdGggYSB0cmFpbGluZyBzbGFzaC4KK3BhdGhjYXI9J3MsXi9cKFteL10qXCkuKiQsXDEsJworcGF0aGNkcj0ncyxeL1teL10qLCwnCityZW1vdmVkb3RwYXJ0cz0nOmRvdHNsCisJCXNAL1wuL0AvQGcKKwkJdCBkb3RzbAorCQlzLC9cLiQsLywnCitjb2xsYXBzZXNsYXNoZXM9J3NAL1x7MSxcfUAvQGcnCitmaW5hbHNsYXNoPSdzLC8qJCwvLCcKKworIyBmdW5jX25vcm1hbF9hYnNwYXRoIFBBVEgKKyMgUmVtb3ZlIGRvdWJsZWQtdXAgYW5kIHRyYWlsaW5nIHNsYXNoZXMsICIuIiBwYXRoIGNvbXBvbmVudHMsCisjIGFuZCBjYW5jZWwgb3V0IGFueSAiLi4iIHBhdGggY29tcG9uZW50cyBpbiBQQVRIIGFmdGVyIG1ha2luZworIyBpdCBhbiBhYnNvbHV0ZSBwYXRoLgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0IgorZnVuY19ub3JtYWxfYWJzcGF0aCAoKQoreworICAjIFN0YXJ0IGZyb20gcm9vdCBkaXIgYW5kIHJlYXNzZW1ibGUgdGhlIHBhdGguCisgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PQorICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPSQxCisgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlPQorICBjYXNlICRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIGluCisgICAgIiIpCisgICAgICAjIEVtcHR5IHBhdGgsIHRoYXQganVzdCBtZWFucyAkY3dkLgorICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICJgcHdkYCIKKyAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICAgIHJldHVybgorICAgIDs7CisgICAgIyBUaGUgbmV4dCB0aHJlZSBlbnRyaWVzIGFyZSB1c2VkIHRvIHNwb3QgYSBydW4gb2YgcHJlY2lzZWx5CisgICAgIyB0d28gbGVhZGluZyBzbGFzaGVzIHdpdGhvdXQgdXNpbmcgbmVnYXRlZCBjaGFyYWN0ZXIgY2xhc3NlczsKKyAgICAjIHdlIHRha2UgYWR2YW50YWdlIG9mIGNhc2UncyBmaXJzdC1tYXRjaCBiZWhhdmlvdXIuCisgICAgLy8vKikKKyAgICAgICMgVW51c3VhbCBmb3JtIG9mIGFic29sdXRlIHBhdGgsIGRvIG5vdGhpbmcuCisgICAgOzsKKyAgICAvLyopCisgICAgICAjIE5vdCBuZWNlc3NhcmlseSBhbiBvcmRpbmFyeSBwYXRoOyBQT1NJWCByZXNlcnZlcyBsZWFkaW5nICcvLycKKyAgICAgICMgYW5kIGZvciBleGFtcGxlIEN5Z3dpbiB1c2VzIGl0IHRvIGFjY2VzcyByZW1vdGUgZmlsZSBzaGFyZXMKKyAgICAgICMgb3ZlciBDSUZTL1NNQiwgc28gd2UgY29uc2VydmUgYSBsZWFkaW5nIGRvdWJsZSBzbGFzaCBpZiBmb3VuZC4KKyAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlPS8KKyAgICA7OworICAgIC8qKQorICAgICAgIyBBYnNvbHV0ZSBwYXRoLCBkbyBub3RoaW5nLgorICAgIDs7CisgICAgKikKKyAgICAgICMgUmVsYXRpdmUgcGF0aCwgcHJlcGVuZCAkY3dkLgorICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gcHdkYC8kZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aAorICAgIDs7CisgIGVzYWMKKyAgIyBDYW5jZWwgb3V0IGFsbCB0aGUgc2ltcGxlIHN0dWZmIHRvIHNhdmUgaXRlcmF0aW9ucy4gIFdlIGFsc28gd2FudAorICAjIHRoZSBwYXRoIHRvIGVuZCB3aXRoIGEgc2xhc2ggZm9yIGVhc2Ugb2YgcGFyc2luZywgc28gbWFrZSBzdXJlCisgICMgdGhlcmUgaXMgb25lIChhbmQgb25seSBvbmUpIGhlcmUuCisgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKKyAgICAgICAgLWUgIiRyZW1vdmVkb3RwYXJ0cyIgLWUgIiRjb2xsYXBzZXNsYXNoZXMiIC1lICIkZmluYWxzbGFzaCJgCisgIHdoaWxlIDo7IGRvCisgICAgIyBQcm9jZXNzZWQgaXQgYWxsIHlldD8KKyAgICBpZiB0ZXN0ICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgPSAvIDsgdGhlbgorICAgICAgIyBJZiB3ZSBhc2NlbmRlZCB0byB0aGUgcm9vdCB1c2luZyAiLi4iIHRoZSByZXN1bHQgbWF5IGJlIGVtcHR5IG5vdy4KKyAgICAgIGlmIHRlc3QgLXogIiRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCIgOyB0aGVuCisgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PS8KKyAgICAgIGZpCisgICAgICBicmVhaworICAgIGZpCisgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50PWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCisgICAgICAgIC1lICIkcGF0aGNhciJgCisgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gJEVDSE8gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiB8ICRTRUQgXAorICAgICAgICAtZSAiJHBhdGhjZHIiYAorICAgICMgRmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggaXQKKyAgICBjYXNlICRmdW5jX25vcm1hbF9hYnNwYXRoX3Rjb21wb25lbnQgaW4KKyAgICAgICIiKQorICAgICAgICAjIFRyYWlsaW5nIGVtcHR5IHBhdGggY29tcG9uZW50LCBpZ25vcmUgaXQuCisgICAgICA7OworICAgICAgLi4pCisgICAgICAgICMgUGFyZW50IGRpcjsgc3RyaXAgbGFzdCBhc3NlbWJsZWQgY29tcG9uZW50IGZyb20gcmVzdWx0LgorICAgICAgICBmdW5jX2Rpcm5hbWUgIiRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCIKKyAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKyAgICAgIDs7CisgICAgICAqKQorICAgICAgICAjIEFjdHVhbCBwYXRoIGNvbXBvbmVudCwgYXBwZW5kIGl0LgorICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQvJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdGNvbXBvbmVudAorICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKyAgIyBSZXN0b3JlIGxlYWRpbmcgZG91YmxlLXNsYXNoIGlmIG9uZSB3YXMgZm91bmQgb24gZW50cnkuCisgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX25vcm1hbF9hYnNwYXRoX2FsdG5hbWVzcGFjZSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorfQorCisjIGZ1bmNfcmVsYXRpdmVfcGF0aCBTUkNESVIgRFNURElSCisjIGdlbmVyYXRlcyBhIHJlbGF0aXZlIHBhdGggZnJvbSBTUkNESVIgdG8gRFNURElSLCB3aXRoIGEgdHJhaWxpbmcKKyMgc2xhc2ggaWYgbm9uLWVtcHR5LCBzdWl0YWJsZSBmb3IgaW1tZWRpYXRlbHkgYXBwZW5kaW5nIGEgZmlsZW5hbWUKKyMgd2l0aG91dCBuZWVkaW5nIHRvIGFwcGVuZCBhIHNlcGFyYXRvci4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IgorZnVuY19yZWxhdGl2ZV9wYXRoICgpCit7CisgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9CisgIGZ1bmNfbm9ybWFsX2Fic3BhdGggIiQxIgorICBmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcj0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKKyAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJDIiCisgIGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorCisgICMgQXNjZW5kIHRoZSB0cmVlIHN0YXJ0aW5nIGZyb20gbGliZGlyCisgIHdoaWxlIDo7IGRvCisgICAgIyBjaGVjayBpZiB3ZSBoYXZlIGZvdW5kIGEgcHJlZml4IG9mIGJpbmRpcgorICAgIGNhc2UgJGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyIGluCisgICAgICAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIpCisgICAgICAgICMgZm91bmQgYW4gZXhhY3QgbWF0Y2gKKyAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQ9CisgICAgICAgIGJyZWFrCisgICAgICAgIDs7CisgICAgICAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIqKQorICAgICAgICAjIGZvdW5kIGEgbWF0Y2hpbmcgcHJlZml4CisgICAgICAgIGZ1bmNfc3RyaXBuYW1lICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIiICcnICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXIiCisgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiOyB0aGVuCisgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uCisgICAgICAgIGZpCisgICAgICAgIGJyZWFrCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBmdW5jX2Rpcm5hbWUgJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyCisgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyPSR7ZnVuY19kaXJuYW1lX3Jlc3VsdH0KKyAgICAgICAgaWYgdGVzdCAieCRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciIgPSB4IDsgdGhlbgorICAgICAgICAgICMgSGF2ZSB0byBkZXNjZW5kIGFsbCB0aGUgd2F5IHRvIHRoZSByb290IQorICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9Li4vJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQKKyAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZD0kZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXIKKyAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4uLyRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0CisgICAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgIyBOb3cgY2FsY3VsYXRlIHBhdGg7IHRha2UgY2FyZSB0byBhdm9pZCBkb3VibGluZy11cCBzbGFzaGVzLgorICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IgorICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgZnVuY19zdHJpcG5hbWUgJy8nICcvJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkIgorICBpZiB0ZXN0ICJ4JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIgIT0geCA7IHRoZW4KKyAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PSR7ZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdH0vJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9CisgIGZpCisKKyAgIyBOb3JtYWxpc2F0aW9uLiBJZiBiaW5kaXIgaXMgbGliZGlyLCByZXR1cm4gZW1wdHkgc3RyaW5nLAorICAjIGVsc2UgcmVsYXRpdmUgcGF0aCBlbmRpbmcgd2l0aCBhIHNsYXNoOyBlaXRoZXIgd2F5LCB0YXJnZXQKKyAgIyBmaWxlIG5hbWUgY2FuIGJlIGRpcmVjdGx5IGFwcGVuZGVkLgorICBpZiB0ZXN0ICEgLXogIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IjsgdGhlbgorICAgIGZ1bmNfc3RyaXBuYW1lICcuLycgJycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0LyIKKyAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgZmkKK30KKworIyBUaGUgbmFtZSBvZiB0aGlzIHByb2dyYW06CitmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkcHJvZ3BhdGgiCitwcm9nbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKworIyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBhYnNvbHV0ZSBwYXRoIGZvciByZWV4ZWN1dGlvbjoKK2Nhc2UgJHByb2dwYXRoIGluCisgIFtcXC9dKnxbQS1aYS16XTpcXCopIDs7CisgICpbXFwvXSopCisgICAgIHByb2dkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKyAgICAgcHJvZ2Rpcj1gY2QgIiRwcm9nZGlyIiAmJiBwd2RgCisgICAgIHByb2dwYXRoPSIkcHJvZ2Rpci8kcHJvZ25hbWUiCisgICAgIDs7CisgICopCisgICAgIHNhdmVfSUZTPSIkSUZTIgorICAgICBJRlM9OgorICAgICBmb3IgcHJvZ2RpciBpbiAkUEFUSDsgZG8KKyAgICAgICBJRlM9IiRzYXZlX0lGUyIKKyAgICAgICB0ZXN0IC14ICIkcHJvZ2Rpci8kcHJvZ25hbWUiICYmIGJyZWFrCisgICAgIGRvbmUKKyAgICAgSUZTPSIkc2F2ZV9JRlMiCisgICAgIHRlc3QgLW4gIiRwcm9nZGlyIiB8fCBwcm9nZGlyPWBwd2RgCisgICAgIHByb2dwYXRoPSIkcHJvZ2Rpci8kcHJvZ25hbWUiCisgICAgIDs7Citlc2FjCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKKyMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitYc2VkPSIke1NFRH0iJyAtZSAxcy9eWC8vJworc2VkX3F1b3RlX3N1YnN0PSdzL1woW2AiJFxcXVwpL1xcXDEvZycKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbImBcXF1cKS9cXFwxL2cnCisKKyMgUmUtYFwnIHBhcmFtZXRlciBleHBhbnNpb25zIGluIG91dHB1dCBvZiBkb3VibGVfcXVvdGVfc3Vic3QgdGhhdCB3ZXJlCisjIGBcJy1lZCBpbiBpbnB1dCB0byB0aGUgc2FtZS4gIElmIGFuIG9kZCBudW1iZXIgb2YgYFwnIHByZWNlZGVkIGEgJyQnCisjIGluIGlucHV0IHRvIGRvdWJsZV9xdW90ZV9zdWJzdCwgdGhhdCAnJCcgd2FzIHByb3RlY3RlZCBmcm9tIGV4cGFuc2lvbi4KKyMgU2luY2UgZWFjaCBpbnB1dCBgXCcgaXMgbm93IHR3byBgXCdzLCBsb29rIGZvciBhbnkgbnVtYmVyIG9mIHJ1bnMgb2YKKyMgZm91ciBgXCdzIGZvbGxvd2VkIGJ5IHR3byBgXCdzIGFuZCB0aGVuIGEgJyQnLiAgYFwnIHRoYXQgJyQnLgorYnM9J1xcJworYnMyPSdcXFxcJworYnM0PSdcXFxcXFxcXCcKK2RvbGxhcj0nXCQnCitzZWRfZG91YmxlX2JhY2tzbGFzaD0iXAorICBzLyRiczQvJlxcCisvZworICBzL14kYnMyJGRvbGxhci8kYnMmLworICBzL1xcKFteJGJzXVxcKSRiczIkZG9sbGFyL1xcMSRiczIkYnMkZG9sbGFyL2cKKyAgcy9cbi8vZyIKKworIyBTdGFuZGFyZCBvcHRpb25zOgorb3B0X2RyeV9ydW49ZmFsc2UKK29wdF9oZWxwPWZhbHNlCitvcHRfcXVpZXQ9ZmFsc2UKK29wdF92ZXJib3NlPWZhbHNlCitvcHRfd2FybmluZz06CisKKyMgZnVuY19lY2hvIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlLCBhbG9uZyB3aXRoIHRoZSBjdXJyZW50IG1vZGUKKyMgbmFtZSBpZiBpdCBoYXMgYmVlbiBzZXQgeWV0LgorZnVuY19lY2hvICgpCit7CisgICAgJEVDSE8gIiRwcm9nbmFtZSR7bW9kZSs6IH0kbW9kZTogJCoiCit9CisKKyMgZnVuY192ZXJib3NlIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIGluIHZlcmJvc2UgbW9kZSBvbmx5LgorZnVuY192ZXJib3NlICgpCit7CisgICAgJG9wdF92ZXJib3NlICYmIGZ1bmNfZWNobyAkezErIiRAIn0KKworICAgICMgQSBidWcgaW4gYmFzaCBoYWx0cyB0aGUgc2NyaXB0IGlmIHRoZSBsYXN0IGxpbmUgb2YgYSBmdW5jdGlvbgorICAgICMgZmFpbHMgd2hlbiBzZXQgLWUgaXMgaW4gZm9yY2UsIHNvIHdlIG5lZWQgYW5vdGhlciBjb21tYW5kIHRvCisgICAgIyB3b3JrIGFyb3VuZCB0aGF0OgorICAgIDoKK30KKworIyBmdW5jX2VjaG9fYWxsIGFyZy4uLgorIyBJbnZva2UgJEVDSE8gd2l0aCBhbGwgYXJncywgc3BhY2Utc2VwYXJhdGVkLgorZnVuY19lY2hvX2FsbCAoKQoreworICAgICRFQ0hPICIkKiIKK30KKworIyBmdW5jX2Vycm9yIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgorZnVuY19lcnJvciAoKQoreworICAgICRFQ0hPICIkcHJvZ25hbWUke21vZGUrOiB9JG1vZGU6ICIkezErIiRAIn0gMT4mMgorfQorCisjIGZ1bmNfd2FybmluZyBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgd2FybmluZyBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgorZnVuY193YXJuaW5nICgpCit7CisgICAgJG9wdF93YXJuaW5nICYmICRFQ0hPICIkcHJvZ25hbWUke21vZGUrOiB9JG1vZGU6IHdhcm5pbmc6ICIkezErIiRAIn0gMT4mMgorCisgICAgIyBiYXNoIGJ1ZyBhZ2FpbjoKKyAgICA6Cit9CisKKyMgZnVuY19mYXRhbF9lcnJvciBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgYW5kIGV4aXQuCitmdW5jX2ZhdGFsX2Vycm9yICgpCit7CisgICAgZnVuY19lcnJvciAkezErIiRAIn0KKyAgICBleGl0ICRFWElUX0ZBSUxVUkUKK30KKworIyBmdW5jX2ZhdGFsX2hlbHAgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGZvbGxvd2VkIGJ5CisjIGEgaGVscCBoaW50LCBhbmQgZXhpdC4KK2Z1bmNfZmF0YWxfaGVscCAoKQoreworICAgIGZ1bmNfZXJyb3IgJHsxKyIkQCJ9CisgICAgZnVuY19mYXRhbF9lcnJvciAiJGhlbHAiCit9CitoZWxwPSJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iICAjIyBkZWZhdWx0CisKKworIyBmdW5jX2dyZXAgZXhwcmVzc2lvbiBmaWxlbmFtZQorIyBDaGVjayB3aGV0aGVyIEVYUFJFU1NJT04gbWF0Y2hlcyBhbnkgbGluZSBvZiBGSUxFTkFNRSwgd2l0aG91dCBvdXRwdXQuCitmdW5jX2dyZXAgKCkKK3sKKyAgICAkR1JFUCAiJDEiICIkMiIgPi9kZXYvbnVsbCAyPiYxCit9CisKKworIyBmdW5jX21rZGlyX3AgZGlyZWN0b3J5LXBhdGgKKyMgTWFrZSBzdXJlIHRoZSBlbnRpcmUgcGF0aCB0byBESVJFQ1RPUlktUEFUSCBpcyBhdmFpbGFibGUuCitmdW5jX21rZGlyX3AgKCkKK3sKKyAgICBteV9kaXJlY3RvcnlfcGF0aD0iJDEiCisgICAgbXlfZGlyX2xpc3Q9CisKKyAgICBpZiB0ZXN0IC1uICIkbXlfZGlyZWN0b3J5X3BhdGgiICYmIHRlc3QgIiRvcHRfZHJ5X3J1biIgIT0gIjoiOyB0aGVuCisKKyAgICAgICMgUHJvdGVjdCBkaXJlY3RvcnkgbmFtZXMgc3RhcnRpbmcgd2l0aCBgLScKKyAgICAgIGNhc2UgJG15X2RpcmVjdG9yeV9wYXRoIGluCisgICAgICAgIC0qKSBteV9kaXJlY3RvcnlfcGF0aD0iLi8kbXlfZGlyZWN0b3J5X3BhdGgiIDs7CisgICAgICBlc2FjCisKKyAgICAgICMgV2hpbGUgc29tZSBwb3J0aW9uIG9mIERJUiBkb2VzIG5vdCB5ZXQgZXhpc3QuLi4KKyAgICAgIHdoaWxlIHRlc3QgISAtZCAiJG15X2RpcmVjdG9yeV9wYXRoIjsgZG8KKyAgICAgICAgIyAuLi5tYWtlIGEgbGlzdCBpbiB0b3Btb3N0IGZpcnN0IG9yZGVyLiAgVXNlIGEgY29sb24gZGVsaW1pdGVkCisJIyBsaXN0IGluY2FzZSBzb21lIHBvcnRpb24gb2YgcGF0aCBjb250YWlucyB3aGl0ZXNwYWNlLgorICAgICAgICBteV9kaXJfbGlzdD0iJG15X2RpcmVjdG9yeV9wYXRoOiRteV9kaXJfbGlzdCIKKworICAgICAgICAjIElmIHRoZSBsYXN0IHBvcnRpb24gYWRkZWQgaGFzIG5vIHNsYXNoIGluIGl0LCB0aGUgbGlzdCBpcyBkb25lCisgICAgICAgIGNhc2UgJG15X2RpcmVjdG9yeV9wYXRoIGluICovKikgOzsgKikgYnJlYWsgOzsgZXNhYworCisgICAgICAgICMgLi4ub3RoZXJ3aXNlIHRocm93IGF3YXkgdGhlIGNoaWxkIGRpcmVjdG9yeSBhbmQgbG9vcAorICAgICAgICBteV9kaXJlY3RvcnlfcGF0aD1gJEVDSE8gIiRteV9kaXJlY3RvcnlfcGF0aCIgfCAkU0VEIC1lICIkZGlybmFtZSJgCisgICAgICBkb25lCisgICAgICBteV9kaXJfbGlzdD1gJEVDSE8gIiRteV9kaXJfbGlzdCIgfCAkU0VEICdzLDoqJCwsJ2AKKworICAgICAgc2F2ZV9ta2Rpcl9wX0lGUz0iJElGUyI7IElGUz0nOicKKyAgICAgIGZvciBteV9kaXIgaW4gJG15X2Rpcl9saXN0OyBkbworCUlGUz0iJHNhdmVfbWtkaXJfcF9JRlMiCisgICAgICAgICMgbWtkaXIgY2FuIGZhaWwgd2l0aCBhIGBGaWxlIGV4aXN0JyBlcnJvciBpZiB0d28gcHJvY2Vzc2VzCisgICAgICAgICMgdHJ5IHRvIGNyZWF0ZSBvbmUgb2YgdGhlIGRpcmVjdG9yaWVzIGNvbmN1cnJlbnRseS4gIERvbid0CisgICAgICAgICMgc3RvcCBpbiB0aGF0IGNhc2UhCisgICAgICAgICRNS0RJUiAiJG15X2RpciIgMj4vZGV2L251bGwgfHwgOgorICAgICAgZG9uZQorICAgICAgSUZTPSIkc2F2ZV9ta2Rpcl9wX0lGUyIKKworICAgICAgIyBCYWlsIG91dCBpZiB3ZSAob3Igc29tZSBvdGhlciBwcm9jZXNzKSBmYWlsZWQgdG8gY3JlYXRlIGEgZGlyZWN0b3J5LgorICAgICAgdGVzdCAtZCAiJG15X2RpcmVjdG9yeV9wYXRoIiB8fCBcCisgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgIkZhaWxlZCB0byBjcmVhdGUgXGAkMSciCisgICAgZmkKK30KKworCisjIGZ1bmNfbWt0ZW1wZGlyIFtzdHJpbmddCisjIE1ha2UgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRoYXQgd29uJ3QgY2xhc2ggd2l0aCBvdGhlciBydW5uaW5nCisjIGxpYnRvb2wgcHJvY2Vzc2VzLCBhbmQgYXZvaWRzIHJhY2UgY29uZGl0aW9ucyBpZiBwb3NzaWJsZS4gIElmCisjIGdpdmVuLCBTVFJJTkcgaXMgdGhlIGJhc2VuYW1lIGZvciB0aGF0IGRpcmVjdG9yeS4KK2Z1bmNfbWt0ZW1wZGlyICgpCit7CisgICAgbXlfdGVtcGxhdGU9IiR7VE1QRElSLS90bXB9LyR7MS0kcHJvZ25hbWV9IgorCisgICAgaWYgdGVzdCAiJG9wdF9kcnlfcnVuIiA9ICI6IjsgdGhlbgorICAgICAgIyBSZXR1cm4gYSBkaXJlY3RvcnkgbmFtZSwgYnV0IGRvbid0IGNyZWF0ZSBpdCBpbiBkcnktcnVuIG1vZGUKKyAgICAgIG15X3RtcGRpcj0iJHtteV90ZW1wbGF0ZX0tJCQiCisgICAgZWxzZQorCisgICAgICAjIElmIG1rdGVtcCB3b3JrcywgdXNlIHRoYXQgZmlyc3QgYW5kIGZvcmVtb3N0CisgICAgICBteV90bXBkaXI9YG1rdGVtcCAtZCAiJHtteV90ZW1wbGF0ZX0tWFhYWFhYWFgiIDI+L2Rldi9udWxsYAorCisgICAgICBpZiB0ZXN0ICEgLWQgIiRteV90bXBkaXIiOyB0aGVuCisgICAgICAgICMgRmFpbGluZyB0aGF0LCBhdCBsZWFzdCB0cnkgYW5kIHVzZSAkUkFORE9NIHRvIGF2b2lkIGEgcmFjZQorICAgICAgICBteV90bXBkaXI9IiR7bXlfdGVtcGxhdGV9LSR7UkFORE9NLTB9JCQiCisKKyAgICAgICAgc2F2ZV9ta3RlbXBkaXJfdW1hc2s9YHVtYXNrYAorICAgICAgICB1bWFzayAwMDc3CisgICAgICAgICRNS0RJUiAiJG15X3RtcGRpciIKKyAgICAgICAgdW1hc2sgJHNhdmVfbWt0ZW1wZGlyX3VtYXNrCisgICAgICBmaQorCisgICAgICAjIElmIHdlJ3JlIG5vdCBpbiBkcnktcnVuIG1vZGUsIGJvbWIgb3V0IG9uIGZhaWx1cmUKKyAgICAgIHRlc3QgLWQgIiRteV90bXBkaXIiIHx8IFwKKyAgICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IFxgJG15X3RtcGRpciciCisgICAgZmkKKworICAgICRFQ0hPICIkbXlfdG1wZGlyIgorfQorCisKKyMgZnVuY19xdW90ZV9mb3JfZXZhbCBhcmcKKyMgQWVzdGhldGljYWxseSBxdW90ZSBBUkcgdG8gYmUgZXZhbGVkIGxhdGVyLgorIyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHdvIHZhbHVlczogRlVOQ19RVU9URV9GT1JfRVZBTF9SRVNVTFQKKyMgaXMgZG91YmxlLXF1b3RlZCwgc3VpdGFibGUgZm9yIGEgc3Vic2VxdWVudCBldmFsLCB3aGVyZWFzCisjIEZVTkNfUVVPVEVfRk9SX0VWQUxfVU5RVU9URURfUkVTVUxUIGhhcyBtZXJlbHkgYWxsIGNoYXJhY3RlcnMKKyMgd2hpY2ggYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlIHF1b3RlcyBiYWNrc2xhc2hpZmllZC4KK2Z1bmNfcXVvdGVfZm9yX2V2YWwgKCkKK3sKKyAgICBjYXNlICQxIGluCisgICAgICAqW1xcXGBcIlwkXSopCisJZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQ9YCRFQ0hPICIkMSIgfCAkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAgOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0PSIkMSIgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdCBpbgorICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIHRvIGRlbGF5CisgICAgICAjIHdvcmQgc3BsaXR0aW5nLCBjb21tYW5kIHN1YnN0aXR1dGlvbiBhbmQgYW5kIHZhcmlhYmxlCisgICAgICAjIGV4cGFuc2lvbiBmb3IgYSBzdWJzZXF1ZW50IGV2YWwuCisgICAgICAjIE1hbnkgQm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQorICAgICAgIyBpbiBzY2FuIHNldHMsIHNvIHdlIHNwZWNpZnkgaXQgc2VwYXJhdGVseS4KKyAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdD0iXCIkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHRcIiIKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0PSIkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQiCisgICAgZXNhYworfQorCisKKyMgZnVuY19xdW90ZV9mb3JfZXhwYW5kIGFyZworIyBBZXN0aGV0aWNhbGx5IHF1b3RlIEFSRyB0byBiZSBldmFsZWQgbGF0ZXI7IHNhbWUgYXMgYWJvdmUsCisjIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2Z1bmNfcXVvdGVfZm9yX2V4cGFuZCAoKQoreworICAgIGNhc2UgJDEgaW4KKyAgICAgICpbXFxcYFwiXSopCisJbXlfYXJnPWAkRUNITyAiJDEiIHwgJFNFRCBcCisJICAgIC1lICIkZG91YmxlX3F1b3RlX3N1YnN0IiAtZSAiJHNlZF9kb3VibGVfYmFja3NsYXNoImAgOzsKKyAgICAgICopCisgICAgICAgIG15X2FyZz0iJDEiIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkbXlfYXJnIGluCisgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMgdG8gZGVsYXkKKyAgICAgICMgd29yZCBzcGxpdHRpbmcgYW5kIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGZvciBhIHN1YnNlcXVlbnQgZXZhbC4KKyAgICAgICMgTWFueSBCb3VybmUgc2hlbGxzIGNhbm5vdCBoYW5kbGUgY2xvc2UgYnJhY2tldHMgY29ycmVjdGx5CisgICAgICAjIGluIHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBzZXBhcmF0ZWx5LgorICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisgICAgICAgIG15X2FyZz0iXCIkbXlfYXJnXCIiCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdD0iJG15X2FyZyIKK30KKworCisjIGZ1bmNfc2hvd19ldmFsIGNtZCBbZmFpbF9leHBdCisjIFVubGVzcyBvcHRfc2lsZW50IGlzIHRydWUsIHRoZW4gb3V0cHV0IENNRC4gIFRoZW4sIGlmIG9wdF9kcnlydW4gaXMKKyMgbm90IHRydWUsIGV2YWx1YXRlIENNRC4gIElmIHRoZSBldmFsdWF0aW9uIG9mIENNRCBmYWlscywgYW5kIEZBSUxfRVhQCisjIGlzIGdpdmVuLCB0aGVuIGV2YWx1YXRlIGl0LgorZnVuY19zaG93X2V2YWwgKCkKK3sKKyAgICBteV9jbWQ9IiQxIgorICAgIG15X2ZhaWxfZXhwPSIkezItOn0iCisKKyAgICAke29wdF9zaWxlbnQtZmFsc2V9IHx8IHsKKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJG15X2NtZCIKKyAgICAgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKyAgICB9CisKKyAgICBpZiAke29wdF9kcnlfcnVuLWZhbHNlfTsgdGhlbiA6OyBlbHNlCisgICAgICBldmFsICIkbXlfY21kIgorICAgICAgbXlfc3RhdHVzPSQ/CisgICAgICBpZiB0ZXN0ICIkbXlfc3RhdHVzIiAtZXEgMDsgdGhlbiA6OyBlbHNlCisJZXZhbCAiKGV4aXQgJG15X3N0YXR1cyk7ICRteV9mYWlsX2V4cCIKKyAgICAgIGZpCisgICAgZmkKK30KKworCisjIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSBjbWQgW2ZhaWxfZXhwXQorIyBVbmxlc3Mgb3B0X3NpbGVudCBpcyB0cnVlLCB0aGVuIG91dHB1dCBDTUQuICBUaGVuLCBpZiBvcHRfZHJ5cnVuIGlzCisjIG5vdCB0cnVlLCBldmFsdWF0ZSBDTUQuICBJZiB0aGUgZXZhbHVhdGlvbiBvZiBDTUQgZmFpbHMsIGFuZCBGQUlMX0VYUAorIyBpcyBnaXZlbiwgdGhlbiBldmFsdWF0ZSBpdC4gIFVzZSB0aGUgc2F2ZWQgbG9jYWxlIGZvciBldmFsdWF0aW9uLgorZnVuY19zaG93X2V2YWxfbG9jYWxlICgpCit7CisgICAgbXlfY21kPSIkMSIKKyAgICBteV9mYWlsX2V4cD0iJHsyLTp9IgorCisgICAgJHtvcHRfc2lsZW50LWZhbHNlfSB8fCB7CisgICAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRteV9jbWQiCisgICAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisgICAgfQorCisgICAgaWYgJHtvcHRfZHJ5X3J1bi1mYWxzZX07IHRoZW4gOjsgZWxzZQorICAgICAgZXZhbCAiJGx0X3VzZXJfbG9jYWxlCisJICAgICRteV9jbWQiCisgICAgICBteV9zdGF0dXM9JD8KKyAgICAgIGV2YWwgIiRsdF9zYWZlX2xvY2FsZSIKKyAgICAgIGlmIHRlc3QgIiRteV9zdGF0dXMiIC1lcSAwOyB0aGVuIDo7IGVsc2UKKwlldmFsICIoZXhpdCAkbXlfc3RhdHVzKTsgJG15X2ZhaWxfZXhwIgorICAgICAgZmkKKyAgICBmaQorfQorCisKKyMgZnVuY192ZXJzaW9uCisjIEVjaG8gdmVyc2lvbiBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KK2Z1bmNfdmVyc2lvbiAoKQoreworICAgICRTRUQgLW4gJy8oQykvIWIgZ28KKwk6bW9yZQorCS9cLi8heworCSAgTgorCSAgcy9cbiMgLyAvCisJICBiIG1vcmUKKwl9CisJOmdvCisJL14jICckUFJPR1JBTScgKEdOVSAvLC8jIHdhcnJhbnR5OyAvIHsKKyAgICAgICAgcy9eIyAvLworCXMvXiMgKiQvLworICAgICAgICBzL1woKEMpXClbIDAtOSwtXSpcKCBbMS05XVswLTldKlwpL1wxXDIvCisgICAgICAgIHAKKyAgICAgfScgPCAiJHByb2dwYXRoIgorICAgICBleGl0ICQ/Cit9CisKKyMgZnVuY191c2FnZQorIyBFY2hvIHNob3J0IGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCitmdW5jX3VzYWdlICgpCit7CisgICAgJFNFRCAtbiAnL14jIFVzYWdlOi8sL14jICAqLiotLWhlbHAvIHsKKyAgICAgICAgcy9eIyAvLworCXMvXiMgKiQvLworCXMvXCRwcm9nbmFtZS8nJHByb2duYW1lJy8KKwlwCisgICAgfScgPCAiJHByb2dwYXRoIgorICAgIGVjaG8KKyAgICAkRUNITyAicnVuIFxgJHByb2duYW1lIC0taGVscCB8IG1vcmUnIGZvciBmdWxsIHVzYWdlIgorICAgIGV4aXQgJD8KK30KKworIyBmdW5jX2hlbHAgW05PRVhJVF0KKyMgRWNobyBsb25nIGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQsCisjIHVubGVzcyAnbm9leGl0JyBpcyBwYXNzZWQgYXMgYXJndW1lbnQuCitmdW5jX2hlbHAgKCkKK3sKKyAgICAkU0VEIC1uICcvXiMgVXNhZ2U6LywvIyBSZXBvcnQgYnVncyB0by8geworICAgICAgICBzL14jIC8vCisJcy9eIyAqJC8vCisJcypcJHByb2duYW1lKickcHJvZ25hbWUnKgorCXMqXCRob3N0KiciJGhvc3QiJyoKKwlzKlwkU0hFTEwqJyIkU0hFTEwiJyoKKwlzKlwkTFRDQyonIiRMVENDIicqCisJcypcJExUQ0ZMQUdTKiciJExUQ0ZMQUdTIicqCisJcypcJExEKiciJExEIicqCisJcy9cJHdpdGhfZ251X2xkLyciJHdpdGhfZ251X2xkIicvCisJcy9cJGF1dG9tYWtlX3ZlcnNpb24vJyJgKGF1dG9tYWtlIC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCRTRUQgMXFgIicvCisJcy9cJGF1dG9jb25mX3ZlcnNpb24vJyJgKGF1dG9jb25mIC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCRTRUQgMXFgIicvCisJcAorICAgICB9JyA8ICIkcHJvZ3BhdGgiCisgICAgcmV0PSQ/CisgICAgaWYgdGVzdCAteiAiJDEiOyB0aGVuCisgICAgICBleGl0ICRyZXQKKyAgICBmaQorfQorCisjIGZ1bmNfbWlzc2luZ19hcmcgYXJnbmFtZQorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yIGFuZCBzZXQgZ2xvYmFsCisjIGV4aXRfY21kLgorZnVuY19taXNzaW5nX2FyZyAoKQoreworICAgIGZ1bmNfZXJyb3IgIm1pc3NpbmcgYXJndW1lbnQgZm9yICQxLiIKKyAgICBleGl0X2NtZD1leGl0Cit9CisKK2V4aXRfY21kPToKKworCisKKworCisKK21hZ2ljPSIlJSVNQUdJQyB2YXJpYWJsZSUlJSIKK21hZ2ljX2V4ZT0iJSUlTUFHSUMgRVhFIHZhcmlhYmxlJSUlIgorCisjIEdsb2JhbCB2YXJpYWJsZXMuCisjICRtb2RlIGlzIHVuc2V0Citub25vcHQ9CitleGVjdXRlX2RsZmlsZXM9CitwcmVzZXJ2ZV9hcmdzPQorbG8ybz0icy9cXC5sb1wkLy4ke29iamV4dH0vIgorbzJsbz0icy9cXC4ke29iamV4dH1cJC8ubG8vIgorZXh0cmFjdGVkX2FyY2hpdmVzPQorZXh0cmFjdGVkX3NlcmlhbD0wCisKK29wdF9kcnlfcnVuPWZhbHNlCitvcHRfZHVwbGljYXRlX2RlcHM9ZmFsc2UKK29wdF9zaWxlbnQ9ZmFsc2UKK29wdF9kZWJ1Zz06CisKKyMgSWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gYW55IG9mIHRoZSBhY3Rpb25zLCB0aGUgY29tbWFuZCBpbiBpdAorIyB3aWxsIGJlIGV4ZWNlZCBhdCB0aGUgZW5kLiAgVGhpcyBwcmV2ZW50cyBoZXJlLWRvY3VtZW50cyBmcm9tIGJlaW5nCisjIGxlZnQgb3ZlciBieSBzaGVsbHMuCitleGVjX2NtZD0KKworIyBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGZvbGxvd2VkIGJ5CisjIGEgY29uZmlndXJhdGlvbiBmYWlsdXJlIGhpbnQsIGFuZCBleGl0LgorZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICgpCit7CisgICAgZnVuY19lcnJvciAkezErIiRAIn0KKyAgICBmdW5jX2Vycm9yICJTZWUgdGhlICRQQUNLQUdFIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorICAgIGZ1bmNfZmF0YWxfZXJyb3IgIkZhdGFsIGNvbmZpZ3VyYXRpb24gZXJyb3IuIgorfQorCisKKyMgZnVuY19jb25maWcKKyMgRGlzcGxheSB0aGUgY29uZmlndXJhdGlvbiBmb3IgYWxsIHRoZSB0YWdzIGluIHRoaXMgc2NyaXB0LgorZnVuY19jb25maWcgKCkKK3sKKyAgICByZV9iZWdpbmNmPSdeIyAjIyMgQkVHSU4gTElCVE9PTCcKKyAgICByZV9lbmRjZj0nXiMgIyMjIEVORCBMSUJUT09MJworCisgICAgIyBEZWZhdWx0IGNvbmZpZ3VyYXRpb24uCisgICAgJFNFRCAiMSwvJHJlX2JlZ2luY2YgQ09ORklHL2Q7LyRyZV9lbmRjZiBDT05GSUcvLFwkZCIgPCAiJHByb2dwYXRoIgorCisgICAgIyBOb3cgcHJpbnQgdGhlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgdGFncy4KKyAgICBmb3IgdGFnbmFtZSBpbiAkdGFnbGlzdDsgZG8KKyAgICAgICRTRUQgLW4gIi8kcmVfYmVnaW5jZiBUQUcgQ09ORklHOiAkdGFnbmFtZVwkLywvJHJlX2VuZGNmIFRBRyBDT05GSUc6ICR0YWduYW1lXCQvcCIgPCAiJHByb2dwYXRoIgorICAgIGRvbmUKKworICAgIGV4aXQgJD8KK30KKworIyBmdW5jX2ZlYXR1cmVzCisjIERpc3BsYXkgdGhlIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KK2Z1bmNfZmVhdHVyZXMgKCkKK3sKKyAgICBlY2hvICJob3N0OiAkaG9zdCIKKyAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorICAgICAgZWNobyAiZW5hYmxlIHNoYXJlZCBsaWJyYXJpZXMiCisgICAgZWxzZQorICAgICAgZWNobyAiZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIgorICAgIGZpCisgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorICAgICAgZWNobyAiZW5hYmxlIHN0YXRpYyBsaWJyYXJpZXMiCisgICAgZWxzZQorICAgICAgZWNobyAiZGlzYWJsZSBzdGF0aWMgbGlicmFyaWVzIgorICAgIGZpCisKKyAgICBleGl0ICQ/Cit9CisKKyMgZnVuY19lbmFibGVfdGFnIHRhZ25hbWUKKyMgVmVyaWZ5IHRoYXQgVEFHTkFNRSBpcyB2YWxpZCwgYW5kIGVpdGhlciBmbGFnIGFuIGVycm9yIGFuZCBleGl0LCBvcgorIyBlbmFibGUgdGhlIFRBR05BTUUgdGFnLiAgV2UgYWxzbyBhZGQgVEFHTkFNRSB0byB0aGUgZ2xvYmFsICR0YWdsaXN0CisjIHZhcmlhYmxlIGhlcmUuCitmdW5jX2VuYWJsZV90YWcgKCkKK3sKKyAgIyBHbG9iYWwgdmFyaWFibGU6CisgIHRhZ25hbWU9IiQxIgorCisgIHJlX2JlZ2luY2Y9Il4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lXCQiCisgIHJlX2VuZGNmPSJeIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVcJCIKKyAgc2VkX2V4dHJhY3RjZj0iLyRyZV9iZWdpbmNmLywvJHJlX2VuZGNmL3AiCisKKyAgIyBWYWxpZGF0ZSB0YWduYW1lLgorICBjYXNlICR0YWduYW1lIGluCisgICAgKlshLV9BLVphLXowLTksL10qKQorICAgICAgZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWUiCisgICAgICA7OworICBlc2FjCisKKyAgIyBEb24ndCB0ZXN0IGZvciB0aGUgImRlZmF1bHQiIEMgdGFnLCBhcyB3ZSBrbm93IGl0J3MKKyAgIyB0aGVyZSBidXQgbm90IHNwZWNpYWxseSBtYXJrZWQuCisgIGNhc2UgJHRhZ25hbWUgaW4KKyAgICBDQykgOzsKKyAgICAqKQorICAgICAgaWYgJEdSRVAgIiRyZV9iZWdpbmNmIiAiJHByb2dwYXRoIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwl0YWdsaXN0PSIkdGFnbGlzdCAkdGFnbmFtZSIKKworCSMgRXZhbHVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uICBCZSBjYXJlZnVsIHRvIHF1b3RlIHRoZSBwYXRoCisJIyBhbmQgdGhlIHNlZCBzY3JpcHQsIHRvIGF2b2lkIHNwbGl0dGluZyBvbiB3aGl0ZXNwYWNlLCBidXQKKwkjIGFsc28gZG9uJ3QgdXNlIG5vbi1wb3J0YWJsZSBxdW90ZXMgd2l0aGluIGJhY2txdW90ZXMgd2l0aGluCisJIyBxdW90ZXMgd2UgaGF2ZSB0byBkbyBpdCBpbiAyIHN0ZXBzOgorCWV4dHJhY3RlZGNmPWAkU0VEIC1uIC1lICIkc2VkX2V4dHJhY3RjZiIgPCAiJHByb2dwYXRoImAKKwlldmFsICIkZXh0cmFjdGVkY2YiCisgICAgICBlbHNlCisJZnVuY19lcnJvciAiaWdub3JpbmcgdW5rbm93biB0YWcgJHRhZ25hbWUiCisgICAgICBmaQorICAgICAgOzsKKyAgZXNhYworfQorCisjIFBhcnNlIG9wdGlvbnMgb25jZSwgdGhvcm91Z2hseS4gIFRoaXMgY29tZXMgYXMgc29vbiBhcyBwb3NzaWJsZSBpbgorIyB0aGUgc2NyaXB0IHRvIG1ha2UgdGhpbmdzIGxpa2UgYGxpYnRvb2wgLS12ZXJzaW9uJyBoYXBwZW4gcXVpY2tseS4KK3sKKworICAjIFNob3J0aGFuZCBmb3IgLS1tb2RlPWZvbywgb25seSB2YWxpZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQKKyAgY2FzZSAkMSBpbgorICBjbGVhbnxjbGVhfGNsZXxjbCkKKyAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjbGVhbiAkezErIiRAIn07IHNoaWZ0CisgICAgOzsKKyAgY29tcGlsZXxjb21waWx8Y29tcGl8Y29tcHxjb218Y298YykKKyAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjb21waWxlICR7MSsiJEAifTsgc2hpZnQKKyAgICA7OworICBleGVjdXRlfGV4ZWN1dHxleGVjdXxleGVjfGV4ZXxleHxlKQorICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGV4ZWN1dGUgJHsxKyIkQCJ9OyBzaGlmdAorICAgIDs7CisgIGZpbmlzaHxmaW5pc3xmaW5pfGZpbnxmaXxmKQorICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGZpbmlzaCAkezErIiRAIn07IHNoaWZ0CisgICAgOzsKKyAgaW5zdGFsbHxpbnN0YWx8aW5zdGF8aW5zdHxpbnN8aW58aSkKKyAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBpbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKyAgICA7OworICBsaW5rfGxpbnxsaXxsKQorICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGxpbmsgJHsxKyIkQCJ9OyBzaGlmdAorICAgIDs7CisgIHVuaW5zdGFsbHx1bmluc3RhbHx1bmluc3RhfHVuaW5zdHx1bmluc3x1bmlufHVuaXx1bnx1KQorICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIHVuaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CisgICAgOzsKKyAgZXNhYworCisgICMgUGFyc2Ugbm9uLW1vZGUgc3BlY2lmaWMgYXJndW1lbnRzOgorICB3aGlsZSB0ZXN0ICIkIyIgLWd0IDA7IGRvCisgICAgb3B0PSIkMSIKKyAgICBzaGlmdAorCisgICAgY2FzZSAkb3B0IGluCisgICAgICAtLWNvbmZpZykJCWZ1bmNfY29uZmlnCQkJCQk7OworCisgICAgICAtLWRlYnVnKQkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCIKKwkJCWZ1bmNfZWNobyAiZW5hYmxpbmcgc2hlbGwgdHJhY2UgbW9kZSIKKwkJCW9wdF9kZWJ1Zz0nc2V0IC14JworCQkJJG9wdF9kZWJ1ZworCQkJOzsKKworICAgICAgLWRsb3BlbikJCXRlc3QgIiQjIiAtZXEgMCAmJiBmdW5jX21pc3NpbmdfYXJnICIkb3B0IiAmJiBicmVhaworCQkJZXhlY3V0ZV9kbGZpbGVzPSIkZXhlY3V0ZV9kbGZpbGVzICQxIgorCQkJc2hpZnQKKwkJCTs7CisKKyAgICAgIC0tZHJ5LXJ1biB8IC1uKQlvcHRfZHJ5X3J1bj06CQkJCQk7OworICAgICAgLS1mZWF0dXJlcykgICAgICAgZnVuY19mZWF0dXJlcwkJCQkJOzsKKyAgICAgIC0tZmluaXNoKQkJbW9kZT0iZmluaXNoIgkJCQkJOzsKKworICAgICAgLS1tb2RlKQkJdGVzdCAiJCMiIC1lcSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgIiRvcHQiICYmIGJyZWFrCisJCQljYXNlICQxIGluCisJCQkgICMgVmFsaWQgbW9kZSBhcmd1bWVudHM6CisJCQkgIGNsZWFuKQk7OworCQkJICBjb21waWxlKQk7OworCQkJICBleGVjdXRlKQk7OworCQkJICBmaW5pc2gpCTs7CisJCQkgIGluc3RhbGwpCTs7CisJCQkgIGxpbmspCQk7OworCQkJICByZWxpbmspCTs7CisJCQkgIHVuaW5zdGFsbCkJOzsKKworCQkJICAjIENhdGNoIGFueXRoaW5nIGVsc2UgYXMgYW4gZXJyb3IKKwkJCSAgKikgZnVuY19lcnJvciAiaW52YWxpZCBhcmd1bWVudCBmb3IgJG9wdCIKKwkJCSAgICAgZXhpdF9jbWQ9ZXhpdAorCQkJICAgICBicmVhaworCQkJICAgICA7OworCQkgICAgICAgIGVzYWMKKworCQkJbW9kZT0iJDEiCisJCQlzaGlmdAorCQkJOzsKKworICAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcykKKwkJCW9wdF9kdXBsaWNhdGVfZGVwcz06CQkJCTs7CisKKyAgICAgIC0tcXVpZXR8LS1zaWxlbnQpCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQiCisJCQlvcHRfc2lsZW50PToKKwkJCW9wdF92ZXJib3NlPWZhbHNlCisJCQk7OworCisgICAgICAtLW5vLXF1aWV0fC0tbm8tc2lsZW50KQorCQkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCIKKwkJCW9wdF9zaWxlbnQ9ZmFsc2UKKwkJCTs7CisKKyAgICAgIC0tdmVyYm9zZXwgLXYpCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQiCisJCQlvcHRfc2lsZW50PWZhbHNlCisJCQlvcHRfdmVyYm9zZT06CisJCQk7OworCisgICAgICAtLW5vLXZlcmJvc2UpCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQiCisJCQlvcHRfdmVyYm9zZT1mYWxzZQorCQkJOzsKKworICAgICAgLS10YWcpCQl0ZXN0ICIkIyIgLWVxIDAgJiYgZnVuY19taXNzaW5nX2FyZyAiJG9wdCIgJiYgYnJlYWsKKwkJCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQgJDEiCisJCQlmdW5jX2VuYWJsZV90YWcgIiQxIgkjIHRhZ25hbWUgaXMgc2V0IGhlcmUKKwkJCXNoaWZ0CisJCQk7OworCisgICAgICAjIFNlcGFyYXRlIG9wdGFyZ3MgdG8gbG9uZyBvcHRpb25zOgorICAgICAgLWRsb3Blbj0qfC0tbW9kZT0qfC0tdGFnPSopCisJCQlmdW5jX29wdF9zcGxpdCAiJG9wdCIKKwkJCXNldCBkdW1teSAiJGZ1bmNfb3B0X3NwbGl0X29wdCIgIiRmdW5jX29wdF9zcGxpdF9hcmciICR7MSsiJEAifQorCQkJc2hpZnQKKwkJCTs7CisKKyAgICAgIC1cP3wtaCkJCWZ1bmNfdXNhZ2UJCQkJCTs7CisgICAgICAtLWhlbHApCQlvcHRfaGVscD06CQkJCQk7OworICAgICAgLS1oZWxwLWFsbCkJb3B0X2hlbHA9JzogaGVscC1hbGwnCQkJCTs7CisgICAgICAtLXZlcnNpb24pCWZ1bmNfdmVyc2lvbgkJCQkJOzsKKworICAgICAgLSopCQlmdW5jX2ZhdGFsX2hlbHAgInVucmVjb2duaXplZCBvcHRpb24gXGAkb3B0JyIJOzsKKworICAgICAgKikJCW5vbm9wdD0iJG9wdCIKKwkJCWJyZWFrCisJCQk7OworICAgIGVzYWMKKyAgZG9uZQorCisKKyAgY2FzZSAkaG9zdCBpbgorICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpwdzMyKiB8ICpjZWdjYyopCisgICAgICAjIGRvbid0IGVsaW1pbmF0ZSBkdXBsaWNhdGlvbnMgaW4gJHBvc3RkZXBzIGFuZCAkcHJlZGVwcworICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz06CisgICAgICA7OworICAgICopCisgICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPSRvcHRfZHVwbGljYXRlX2RlcHMKKyAgICAgIDs7CisgIGVzYWMKKworICAjIEhhdmluZyB3YXJuZWQgYWJvdXQgYWxsIG1pcy1zcGVjaWZpZWQgb3B0aW9ucywgYmFpbCBvdXQgaWYKKyAgIyBhbnl0aGluZyB3YXMgd3JvbmcuCisgICRleGl0X2NtZCAkRVhJVF9GQUlMVVJFCit9CisKKyMgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCisjIEVuc3VyZSB0aGF0IHdlIGFyZSB1c2luZyBtNCBtYWNyb3MsIGFuZCBsaWJ0b29sIHNjcmlwdCBmcm9tIHRoZSBzYW1lCisjIHJlbGVhc2Ugb2YgbGlidG9vbC4KK2Z1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaCAoKQoreworICBpZiB0ZXN0ICIkcGFja2FnZV9yZXZpc2lvbiIgIT0gIiRtYWNyb19yZXZpc2lvbiI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkVkVSU0lPTiIgIT0gIiRtYWNyb192ZXJzaW9uIjsgdGhlbgorICAgICAgaWYgdGVzdCAteiAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCisgICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCiskcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gYW4gb2xkZXIgcmVsZWFzZS4KKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KKyRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KK19MVF9FT0YKKyAgICAgIGVsc2UKKyAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKKyRwcm9nbmFtZTogZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSAkUEFDS0FHRSAkbWFjcm9fdmVyc2lvbi4KKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KKyRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KK19MVF9FT0YKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIHJldmlzaW9uICRwYWNrYWdlX3JldmlzaW9uLAorJHByb2duYW1lOiBidXQgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gcmV2aXNpb24gJG1hY3JvX3JldmlzaW9uLgorJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbgorJHByb2duYW1lOiBvZiAkUEFDS0FHRSAkVkVSU0lPTiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorX0xUX0VPRgorICAgIGZpCisKKyAgICBleGl0ICRFWElUX01JU01BVENICisgIGZpCit9CisKKworIyMgLS0tLS0tLS0tLS0gIyMKKyMjICAgIE1haW4uICAgICMjCisjIyAtLS0tLS0tLS0tLSAjIworCiskb3B0X2hlbHAgfHwgeworICAjIFNhbml0eSBjaGVja3MgZmlyc3Q6CisgIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAorCisgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiICE9IHllczsgdGhlbgorICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAibm90IGNvbmZpZ3VyZWQgdG8gYnVpbGQgYW55IGtpbmQgb2YgbGlicmFyeSIKKyAgZmkKKworICB0ZXN0IC16ICIkbW9kZSIgJiYgZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IHlvdSBtdXN0IHNwZWNpZnkgYSBNT0RFLiIKKworCisgICMgRGFyd2luIHN1Y2tzCisgIGV2YWwgc3RkX3NocmV4dD1cIiRzaHJleHRfY21kc1wiCisKKworICAjIE9ubHkgZXhlY3V0ZSBtb2RlIGlzIGFsbG93ZWQgdG8gaGF2ZSAtZGxvcGVuIGZsYWdzLgorICBpZiB0ZXN0IC1uICIkZXhlY3V0ZV9kbGZpbGVzIiAmJiB0ZXN0ICIkbW9kZSIgIT0gZXhlY3V0ZTsgdGhlbgorICAgIGZ1bmNfZXJyb3IgInVucmVjb2duaXplZCBvcHRpb24gXGAtZGxvcGVuJyIKKyAgICAkRUNITyAiJGhlbHAiIDE+JjIKKyAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgZmkKKworICAjIENoYW5nZSB0aGUgaGVscCBtZXNzYWdlIHRvIGEgbW9kZS1zcGVjaWZpYyBvbmUuCisgIGdlbmVyaWNfaGVscD0iJGhlbHAiCisgIGhlbHA9IlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPSRtb2RlJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCit9CisKKworIyBmdW5jX2xhbGliX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCBgLmxhJyBsaWJyYXJ5IG9yIGAubG8nIG9iamVjdCBmaWxlLgorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbGFsaWJfcCAoKQoreworICAgIHRlc3QgLWYgIiQxIiAmJgorICAgICAgJFNFRCAtZSA0cSAiJDEiIDI+L2Rldi9udWxsIFwKKyAgICAgICAgfCAkR1JFUCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiID4gL2Rldi9udWxsIDI+JjEKK30KKworIyBmdW5jX2xhbGliX3Vuc2FmZV9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgYC5sYScgbGlicmFyeSBvciBgLmxvJyBvYmplY3QgZmlsZS4KKyMgVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBzYW1lIGNoZWNrIGFzIGZ1bmNfbGFsaWJfcCB3aXRob3V0CisjIHJlc29ydGluZyB0byBleHRlcm5hbCBwcm9ncmFtcy4gIFRvIHRoaXMgZW5kLCBpdCByZWRpcmVjdHMgc3RkaW4gYW5kCisjIGNsb3NlcyBpdCBhZnRlcndhcmRzLCB3aXRob3V0IHNhdmluZyB0aGUgb3JpZ2luYWwgZmlsZSBkZXNjcmlwdG9yLgorIyBBcyBhIHNhZmV0eSBtZWFzdXJlLCB1c2UgaXQgb25seSB3aGVyZSBhIG5lZ2F0aXZlIHJlc3VsdCB3b3VsZCBiZQorIyBmYXRhbCBhbnl3YXkuICBXb3JrcyBpZiBgZmlsZScgZG9lcyBub3QgZXhpc3QuCitmdW5jX2xhbGliX3Vuc2FmZV9wICgpCit7CisgICAgbGFsaWJfcD1ubworICAgIGlmIHRlc3QgLWYgIiQxIiAmJiB0ZXN0IC1yICIkMSIgJiYgZXhlYyA1PCYwIDwiJDEiOyB0aGVuCisJZm9yIGxhbGliX3BfbCBpbiAxIDIgMyA0CisJZG8KKwkgICAgcmVhZCBsYWxpYl9wX2xpbmUKKwkgICAgY2FzZSAiJGxhbGliX3BfbGluZSIgaW4KKwkJXCNcIEdlbmVyYXRlZFwgYnlcICokUEFDS0FHRSogKSBsYWxpYl9wPXllczsgYnJlYWs7OworCSAgICBlc2FjCisJZG9uZQorCWV4ZWMgMDwmNSA1PCYtCisgICAgZmkKKyAgICB0ZXN0ICIkbGFsaWJfcCIgPSB5ZXMKK30KKworIyBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0CisjIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CisjIGRldGVybWluZWQgaW1wb3N0ZXJzLgorZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgKCkKK3sKKyAgICBmdW5jX2xhbGliX3AgIiQxIgorfQorCisjIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIHdyYXBwZXIgZXhlY3V0YWJsZQorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAoKQoreworICAgIGZ1bmNfbHR3cmFwcGVyX2V4ZWNfc3VmZml4PQorICAgIGNhc2UgJDEgaW4KKyAgICAqLmV4ZSkgOzsKKyAgICAqKSBmdW5jX2x0d3JhcHBlcl9leGVjX3N1ZmZpeD0uZXhlIDs7CisgICAgZXNhYworICAgICRHUkVQICIkbWFnaWNfZXhlIiAiJDEkZnVuY19sdHdyYXBwZXJfZXhlY19zdWZmaXgiID4vZGV2L251bGwgMj4mMQorfQorCisjIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgZmlsZQorIyBBc3N1bWVzIGZpbGUgaXMgYW4gbHR3cmFwcGVyX2V4ZWN1dGFibGUKKyMgdXNlcyAkZmlsZSB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIGZpbGVuYW1lIGZvciBhCisjIHRlbXBvcmFyeSBsdHdyYXBwZXJfc2NyaXB0LgorZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAoKQoreworICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0PSIiCisgICAgaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkMSI7IHRoZW4KKwlmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkMSIgIiIgIi4iCisJZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0LyRvYmpkaXIvJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9X2x0c2h3cmFwcGVyIgorICAgIGZpCit9CisKKyMgZnVuY19sdHdyYXBwZXJfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IG9yIHdyYXBwZXIgZXhlY3V0YWJsZQorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbHR3cmFwcGVyX3AgKCkKK3sKKyAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAiJDEiIHx8IGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJDEiCit9CisKKworIyBmdW5jX2V4ZWN1dGVfY21kcyBjb21tYW5kcyBmYWlsX2NtZAorIyBFeGVjdXRlIHRpbGRlLWRlbGltaXRlZCBDT01NQU5EUy4KKyMgSWYgRkFJTF9DTUQgaXMgZ2l2ZW4sIGV2YWwgdGhhdCB1cG9uIGZhaWx1cmUuCisjIEZBSUxfQ01EIG1heSByZWFkLWFjY2VzcyB0aGUgY3VycmVudCBjb21tYW5kIGluIHZhcmlhYmxlIENNRCEKK2Z1bmNfZXhlY3V0ZV9jbWRzICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIHNhdmVfaWZzPSRJRlM7IElGUz0nficKKyAgICBmb3IgY21kIGluICQxOyBkbworICAgICAgSUZTPSRzYXZlX2lmcworICAgICAgZXZhbCBjbWQ9XCIkY21kXCIKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkY21kIiAiJHsyLTp9IgorICAgIGRvbmUKKyAgICBJRlM9JHNhdmVfaWZzCit9CisKKworIyBmdW5jX3NvdXJjZSBmaWxlCisjIFNvdXJjZSBGSUxFLCBhZGRpbmcgZGlyZWN0b3J5IGNvbXBvbmVudCBpZiBuZWNlc3NhcnkuCisjIE5vdGUgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJ5IG9uIGN5Z3dpbi9taW5ndyB0byBhcHBlbmQgYSBkb3QgdG8KKyMgRklMRSBldmVuIGlmIGJvdGggRklMRSBhbmQgRklMRS5leGUgZXhpc3Q6IGF1dG9tYXRpYy1hcHBlbmQtLmV4ZQorIyBiZWhhdmlvciBoYXBwZW5zIG9ubHkgZm9yIGV4ZWMoMyksIG5vdCBmb3Igb3BlbigyKSEgIEFsc28sIHNvdXJjaW5nCisjIGBGSUxFLicgZG9lcyBub3Qgd29yayBvbiBjeWd3aW4gbWFuYWdlZCBtb3VudHMuCitmdW5jX3NvdXJjZSAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBjYXNlICQxIGluCisgICAgKi8qIHwgKlxcKikJLiAiJDEiIDs7CisgICAgKikJCS4gIi4vJDEiIDs7CisgICAgZXNhYworfQorCisKKyMgZnVuY19pbmZlcl90YWcgYXJnCisjIEluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIHRvIHVzZSBpZiBhbnkgYXJlIGF2YWlsYWJsZSBhbmQKKyMgaWYgb25lIHdhc24ndCBjaG9zZW4gdmlhIHRoZSAiLS10YWciIGNvbW1hbmQgbGluZSBvcHRpb24uCisjIE9ubHkgYXR0ZW1wdCB0aGlzIGlmIHRoZSBjb21waWxlciBpbiB0aGUgYmFzZSBjb21waWxlCisjIGNvbW1hbmQgZG9lc24ndCBtYXRjaCB0aGUgZGVmYXVsdCBjb21waWxlci4KKyMgYXJnIGlzIHVzdWFsbHkgb2YgdGhlIGZvcm0gJ2djYyAuLi4nCitmdW5jX2luZmVyX3RhZyAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBpZiB0ZXN0IC1uICIkYXZhaWxhYmxlX3RhZ3MiICYmIHRlc3QgLXogIiR0YWduYW1lIjsgdGhlbgorICAgICAgQ0NfcXVvdGVkPQorICAgICAgZm9yIGFyZyBpbiAkQ0M7IGRvCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJQ0NfcXVvdGVkPSIkQ0NfcXVvdGVkICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICAgIGRvbmUKKyAgICAgIENDX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ2AKKyAgICAgIENDX3F1b3RlZF9leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NfcXVvdGVkYAorICAgICAgY2FzZSAkQCBpbgorICAgICAgIyBCbGFua3MgaW4gdGhlIGNvbW1hbmQgbWF5IGhhdmUgYmVlbiBzdHJpcHBlZCBieSB0aGUgY2FsbGluZyBzaGVsbCwKKyAgICAgICMgYnV0IG5vdCBmcm9tIHRoZSBDQyBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIGNvbmZpZ3VyZSB3YXMgcnVuLgorICAgICAgIiAkQ0MgIiogfCAiJENDICIqIHwgIiAkQ0NfZXhwYW5kZWQgIiogfCAiJENDX2V4cGFuZGVkICIqIHwgXAorICAgICAgIiAkQ0NfcXVvdGVkIiogfCAiJENDX3F1b3RlZCAiKiB8ICIgJENDX3F1b3RlZF9leHBhbmRlZCAiKiB8ICIkQ0NfcXVvdGVkX2V4cGFuZGVkICIqKSA7OworICAgICAgIyBCbGFua3MgYXQgdGhlIHN0YXJ0IG9mICRiYXNlX2NvbXBpbGUgd2lsbCBjYXVzZSB0aGlzIHRvIGZhaWwKKyAgICAgICMgaWYgd2UgZG9uJ3QgY2hlY2sgZm9yIHRoZW0gYXMgd2VsbC4KKyAgICAgICopCisJZm9yIHogaW4gJGF2YWlsYWJsZV90YWdzOyBkbworCSAgaWYgJEdSRVAgIl4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR6JCIgPCAiJHByb2dwYXRoIiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICAjIEV2YWx1YXRlIHRoZSBjb25maWd1cmF0aW9uLgorCSAgICBldmFsICJgJHtTRUR9IC1uIC1lICcvXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJyR6JyQvLC9eIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJyR6JyQvcCcgPCAkcHJvZ3BhdGhgIgorCSAgICBDQ19xdW90ZWQ9CisJICAgIGZvciBhcmcgaW4gJENDOyBkbworCSAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBvdGhlciBzaGVsbCBtZXRhY2hhcmFjdGVycy4KKwkgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCSAgICAgIENDX3F1b3RlZD0iJENDX3F1b3RlZCAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJICAgIGRvbmUKKwkgICAgQ0NfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDYAorCSAgICBDQ19xdW90ZWRfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDX3F1b3RlZGAKKwkgICAgY2FzZSAiJEAgIiBpbgorCSAgICAiICRDQyAiKiB8ICIkQ0MgIiogfCAiICRDQ19leHBhbmRlZCAiKiB8ICIkQ0NfZXhwYW5kZWQgIiogfCBcCisJICAgICIgJENDX3F1b3RlZCIqIHwgIiRDQ19xdW90ZWQgIiogfCAiICRDQ19xdW90ZWRfZXhwYW5kZWQgIiogfCAiJENDX3F1b3RlZF9leHBhbmRlZCAiKikKKwkgICAgICAjIFRoZSBjb21waWxlciBpbiB0aGUgYmFzZSBjb21waWxlIGNvbW1hbmQgbWF0Y2hlcworCSAgICAgICMgdGhlIG9uZSBpbiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24uCisJICAgICAgIyBBc3N1bWUgdGhpcyBpcyB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24gd2Ugd2FudC4KKwkgICAgICB0YWduYW1lPSR6CisJICAgICAgYnJlYWsKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaQorCWRvbmUKKwkjIElmICR0YWduYW1lIHN0aWxsIGlzbid0IHNldCwgdGhlbiBubyB0YWdnZWQgY29uZmlndXJhdGlvbgorCSMgd2FzIGZvdW5kIGFuZCBsZXQgdGhlIHVzZXIga25vdyB0aGF0IHRoZSAiLS10YWciIGNvbW1hbmQKKwkjIGxpbmUgb3B0aW9uIG11c3QgYmUgdXNlZC4KKwlpZiB0ZXN0IC16ICIkdGFnbmFtZSI7IHRoZW4KKwkgIGZ1bmNfZWNobyAidW5hYmxlIHRvIGluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIgorCSAgZnVuY19mYXRhbF9lcnJvciAic3BlY2lmeSBhIHRhZyB3aXRoIFxgLS10YWcnIgorIwllbHNlCisjCSAgZnVuY192ZXJib3NlICJ1c2luZyAkdGFnbmFtZSB0YWdnZWQgY29uZmlndXJhdGlvbiIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgZmkKK30KKworCisKKyMgZnVuY193cml0ZV9saWJ0b29sX29iamVjdCBvdXRwdXRfbmFtZSBwaWNfbmFtZSBub25waWNfbmFtZQorIyBDcmVhdGUgYSBsaWJ0b29sIG9iamVjdCBmaWxlIChhbmFsb2dvdXMgdG8gYSAiLmxhIiBmaWxlKSwKKyMgYnV0IGRvbid0IGNyZWF0ZSBpdCBpZiB3ZSdyZSBkb2luZyBhIGRyeSBydW4uCitmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0ICgpCit7CisgICAgd3JpdGVfbGlib2JqPSR7MX0KKyAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorICAgICAgd3JpdGVfbG9iaj1cJyR7Mn1cJworICAgIGVsc2UKKyAgICAgIHdyaXRlX2xvYmo9bm9uZQorICAgIGZpCisKKyAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisgICAgICB3cml0ZV9vbGRvYmo9XCckezN9XCcKKyAgICBlbHNlCisgICAgICB3cml0ZV9vbGRvYmo9bm9uZQorICAgIGZpCisKKyAgICAkb3B0X2RyeV9ydW4gfHwgeworICAgICAgY2F0ID4ke3dyaXRlX2xpYm9ian1UIDw8RU9GCisjICR3cml0ZV9saWJvYmogLSBhIGxpYnRvb2wgb2JqZWN0IGZpbGUKKyMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIworIyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZpbGUhCisjIEl0IGlzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyB0aGUgbGlicmFyeS4KKworIyBOYW1lIG9mIHRoZSBQSUMgb2JqZWN0LgorcGljX29iamVjdD0kd3JpdGVfbG9iagorCisjIE5hbWUgb2YgdGhlIG5vbi1QSUMgb2JqZWN0Citub25fcGljX29iamVjdD0kd3JpdGVfb2xkb2JqCisKK0VPRgorICAgICAgJE1WICIke3dyaXRlX2xpYm9ian1UIiAiJHt3cml0ZV9saWJvYmp9IgorICAgIH0KK30KKworIyBmdW5jX21vZGVfY29tcGlsZSBhcmcuLi4KK2Z1bmNfbW9kZV9jb21waWxlICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgICMgR2V0IHRoZSBjb21waWxhdGlvbiBjb21tYW5kIGFuZCB0aGUgc291cmNlIGZpbGUuCisgICAgYmFzZV9jb21waWxlPQorICAgIHNyY2ZpbGU9IiRub25vcHQiICAjICBhbHdheXMga2VlcCBhIG5vbi1lbXB0eSB2YWx1ZSBpbiAic3JjZmlsZSIKKyAgICBzdXBwcmVzc19vcHQ9eWVzCisgICAgc3VwcHJlc3Nfb3V0cHV0PQorICAgIGFyZ19tb2RlPW5vcm1hbAorICAgIGxpYm9iaj0KKyAgICBsYXRlcj0KKyAgICBwaWVfZmxhZz0KKworICAgIGZvciBhcmcKKyAgICBkbworICAgICAgY2FzZSAkYXJnX21vZGUgaW4KKyAgICAgIGFyZyAgKQorCSMgZG8gbm90ICJjb250aW51ZSIuICBJbnN0ZWFkLCBhZGQgdGhpcyB0byBiYXNlX2NvbXBpbGUKKwlsYXN0YXJnPSIkYXJnIgorCWFyZ19tb2RlPW5vcm1hbAorCTs7CisKKyAgICAgIHRhcmdldCApCisJbGlib2JqPSIkYXJnIgorCWFyZ19tb2RlPW5vcm1hbAorCWNvbnRpbnVlCisJOzsKKworICAgICAgbm9ybWFsICkKKwkjIEFjY2VwdCBhbnkgY29tbWFuZC1saW5lIG9wdGlvbnMuCisJY2FzZSAkYXJnIGluCisJLW8pCisJICB0ZXN0IC1uICIkbGlib2JqIiAmJiBcCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBjYW5ub3Qgc3BlY2lmeSBcYC1vJyBtb3JlIHRoYW4gb25jZSIKKwkgIGFyZ19tb2RlPXRhcmdldAorCSAgY29udGludWUKKwkgIDs7CisKKwktcGllIHwgLWZwaWUgfCAtZlBJRSkKKyAgICAgICAgICBwaWVfZmxhZz0iJHBpZV9mbGFnICRhcmciCisJICBjb250aW51ZQorCSAgOzsKKworCS1zaGFyZWQgfCAtc3RhdGljIHwgLXByZWZlci1waWMgfCAtcHJlZmVyLW5vbi1waWMpCisJICBsYXRlcj0iJGxhdGVyICRhcmciCisJICBjb250aW51ZQorCSAgOzsKKworCS1uby1zdXBwcmVzcykKKwkgIHN1cHByZXNzX29wdD1ubworCSAgY29udGludWUKKwkgIDs7CisKKwktWGNvbXBpbGVyKQorCSAgYXJnX21vZGU9YXJnICAjICB0aGUgbmV4dCBvbmUgZ29lcyBpbnRvIHRoZSAiYmFzZV9jb21waWxlIiBhcmcgbGlzdAorCSAgY29udGludWUgICAgICAjICBUaGUgY3VycmVudCAic3JjZmlsZSIgd2lsbCBlaXRoZXIgYmUgcmV0YWluZWQgb3IKKwkgIDs7ICAgICAgICAgICAgIyAgcmVwbGFjZWQgbGF0ZXIuICBJIHdvdWxkIGd1ZXNzIHRoYXQgd291bGQgYmUgYSBidWcuCisKKwktV2MsKikKKwkgIGZ1bmNfc3RyaXBuYW1lICctV2MsJyAnJyAiJGFyZyIKKwkgIGFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgbGFzdGFyZz0KKwkgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworCSAgZm9yIGFyZyBpbiAkYXJnczsgZG8KKwkgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJICAgIGxhc3Rhcmc9IiRsYXN0YXJnICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwkgIGRvbmUKKwkgIElGUz0iJHNhdmVfaWZzIgorCSAgZnVuY19zdHJpcG5hbWUgJyAnICcnICIkbGFzdGFyZyIKKwkgIGxhc3Rhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCisJICAjIEFkZCB0aGUgYXJndW1lbnRzIHRvIGJhc2VfY29tcGlsZS4KKwkgIGJhc2VfY29tcGlsZT0iJGJhc2VfY29tcGlsZSAkbGFzdGFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCisJKikKKwkgICMgQWNjZXB0IHRoZSBjdXJyZW50IGFyZ3VtZW50IGFzIHRoZSBzb3VyY2UgZmlsZS4KKwkgICMgVGhlIHByZXZpb3VzICJzcmNmaWxlIiBiZWNvbWVzIHRoZSBjdXJyZW50IGFyZ3VtZW50LgorCSAgIworCSAgbGFzdGFyZz0iJHNyY2ZpbGUiCisJICBzcmNmaWxlPSIkYXJnIgorCSAgOzsKKwllc2FjICAjICBjYXNlICRhcmcKKwk7OworICAgICAgZXNhYyAgICAjICBjYXNlICRhcmdfbW9kZQorCisgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgdGhlIHByZXZpb3VzIGFyZ3VtZW50LgorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGxhc3RhcmciCisgICAgICBiYXNlX2NvbXBpbGU9IiRiYXNlX2NvbXBpbGUgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgIGRvbmUgIyBmb3IgYXJnCisKKyAgICBjYXNlICRhcmdfbW9kZSBpbgorICAgIGFyZykKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBtdXN0IHNwZWNpZnkgYW4gYXJndW1lbnQgZm9yIC1YY29tcGlsZSIKKyAgICAgIDs7CisgICAgdGFyZ2V0KQorICAgICAgZnVuY19mYXRhbF9lcnJvciAieW91IG11c3Qgc3BlY2lmeSBhIHRhcmdldCB3aXRoIFxgLW8nIgorICAgICAgOzsKKyAgICAqKQorICAgICAgIyBHZXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgb2JqZWN0LgorICAgICAgdGVzdCAteiAiJGxpYm9iaiIgJiYgeworCWZ1bmNfYmFzZW5hbWUgIiRzcmNmaWxlIgorCWxpYm9iaj0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgICAgfQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIFJlY29nbml6ZSBzZXZlcmFsIGRpZmZlcmVudCBmaWxlIHN1ZmZpeGVzLgorICAgICMgSWYgdGhlIHVzZXIgc3BlY2lmaWVzIC1vIGZpbGUubywgaXQgaXMgcmVwbGFjZWQgd2l0aCBmaWxlLmxvCisgICAgY2FzZSAkbGlib2JqIGluCisgICAgKi5bY0NGU2lmbXNvXSB8IFwKKyAgICAqLmFkYSB8ICouYWRiIHwgKi5hZHMgfCAqLmFzbSB8IFwKKyAgICAqLmMrKyB8ICouY2MgfCAqLmlpIHwgKi5jbGFzcyB8ICouY3BwIHwgKi5jeHggfCBcCisgICAgKi5bZkZdWzA5XT8gfCAqLmZvciB8ICouamF2YSB8ICoub2JqIHwgKi5zeCB8ICouY3UgfCAqLmN1cCkKKyAgICAgIGZ1bmNfeGZvcm0gIiRsaWJvYmoiCisgICAgICBsaWJvYmo9JGZ1bmNfeGZvcm1fcmVzdWx0CisgICAgICA7OworICAgIGVzYWMKKworICAgIGNhc2UgJGxpYm9iaiBpbgorICAgICoubG8pIGZ1bmNfbG8ybyAiJGxpYm9iaiI7IG9iaj0kZnVuY19sbzJvX3Jlc3VsdCA7OworICAgICopCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZGV0ZXJtaW5lIG5hbWUgb2YgbGlicmFyeSBvYmplY3QgZnJvbSBcYCRsaWJvYmonIgorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBmdW5jX2luZmVyX3RhZyAkYmFzZV9jb21waWxlCisKKyAgICBmb3IgYXJnIGluICRsYXRlcjsgZG8KKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLXNoYXJlZCkKKwl0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgXAorCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJjYW4gbm90IGJ1aWxkIGEgc2hhcmVkIGxpYnJhcnkiCisJYnVpbGRfb2xkX2xpYnM9bm8KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1zdGF0aWMpCisJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJYnVpbGRfb2xkX2xpYnM9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtcHJlZmVyLXBpYykKKwlwaWNfbW9kZT15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1wcmVmZXItbm9uLXBpYykKKwlwaWNfbW9kZT1ubworCWNvbnRpbnVlCisJOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkbGlib2JqIgorICAgIHRlc3QgIlgkbGlib2JqIiAhPSAiWCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIgXAorICAgICAgJiYgJEVDSE8gIlgkbGlib2JqIiB8ICRHUkVQICdbXX4jXip7fTs8Pj8iJyInIicJICYoKXxgJFtdJyBcCisgICAgICAmJiBmdW5jX3dhcm5pbmcgImxpYm9iaiBuYW1lIFxgJGxpYm9iaicgbWF5IG5vdCBjb250YWluIHNoZWxsIHNwZWNpYWwgY2hhcmFjdGVycy4iCisgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJG9iaiIgIi8iICIiCisgICAgb2JqbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorICAgIGxvYmo9JHt4ZGlyfSRvYmpkaXIvJG9iam5hbWUKKworICAgIHRlc3QgLXogIiRiYXNlX2NvbXBpbGUiICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIGNvbXBpbGF0aW9uIGNvbW1hbmQiCisKKyAgICAjIERlbGV0ZSBhbnkgbGVmdG92ZXIgbGlicmFyeSBvYmplY3RzLgorICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIHJlbW92ZWxpc3Q9IiRvYmogJGxvYmogJGxpYm9iaiAke2xpYm9ian1UIgorICAgIGVsc2UKKyAgICAgIHJlbW92ZWxpc3Q9IiRsb2JqICRsaWJvYmogJHtsaWJvYmp9VCIKKyAgICBmaQorCisgICAgIyBPbiBDeWd3aW4gdGhlcmUncyBubyAicmVhbCIgUElDIGZsYWcgc28gd2UgbXVzdCBidWlsZCBib3RoIG9iamVjdCB0eXBlcworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgcGljX21vZGU9ZGVmYXVsdAorICAgICAgOzsKKyAgICBlc2FjCisgICAgaWYgdGVzdCAiJHBpY19tb2RlIiA9IG5vICYmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKyAgICAgICMgbm9uLVBJQyBjb2RlIGluIHNoYXJlZCBsaWJyYXJpZXMgaXMgbm90IHN1cHBvcnRlZAorICAgICAgcGljX21vZGU9ZGVmYXVsdAorICAgIGZpCisKKyAgICAjIENhbGN1bGF0ZSB0aGUgZmlsZW5hbWUgb2YgdGhlIG91dHB1dCBvYmplY3QgaWYgY29tcGlsZXIgZG9lcworICAgICMgbm90IHN1cHBvcnQgLW8gd2l0aCAtYworICAgIGlmIHRlc3QgIiRjb21waWxlcl9jX28iID0gbm87IHRoZW4KKyAgICAgIG91dHB1dF9vYmo9YCRFQ0hPICIkc3JjZmlsZSIgfCAkU0VEICdzJV4uKi8lJTsgcyVcLlteLl0qJCUlJ2AuJHtvYmpleHR9CisgICAgICBsb2NrZmlsZT0iJG91dHB1dF9vYmoubG9jayIKKyAgICBlbHNlCisgICAgICBvdXRwdXRfb2JqPQorICAgICAgbmVlZF9sb2Nrcz1ubworICAgICAgbG9ja2ZpbGU9CisgICAgZmkKKworICAgICMgTG9jayB0aGlzIGNyaXRpY2FsIHNlY3Rpb24gaWYgaXQgaXMgbmVlZGVkCisgICAgIyBXZSB1c2UgdGhpcyBzY3JpcHQgZmlsZSB0byBtYWtlIHRoZSBsaW5rLCBpdCBhdm9pZHMgY3JlYXRpbmcgYSBuZXcgZmlsZQorICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHllczsgdGhlbgorICAgICAgdW50aWwgJG9wdF9kcnlfcnVuIHx8IGxuICIkcHJvZ3BhdGgiICIkbG9ja2ZpbGUiIDI+L2Rldi9udWxsOyBkbworCWZ1bmNfZWNobyAiV2FpdGluZyBmb3IgJGxvY2tmaWxlIHRvIGJlIHJlbW92ZWQiCisJc2xlZXAgMgorICAgICAgZG9uZQorICAgIGVsaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0gd2FybjsgdGhlbgorICAgICAgaWYgdGVzdCAtZiAiJGxvY2tmaWxlIjsgdGhlbgorCSRFQ0hPICJcCisqKiogRVJST1IsICRsb2NrZmlsZSBleGlzdHMgYW5kIGNvbnRhaW5zOgorYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCisKK1RoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKK3RlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKK3lvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBcYC1jJyBhbmQgXGAtbycgdG9nZXRoZXIuICBJZiB5b3UKK3JlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKK2F2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCitjb21waWxlci4iCisKKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorICAgICAgcmVtb3ZlbGlzdD0iJHJlbW92ZWxpc3QgJG91dHB1dF9vYmoiCisgICAgICAkRUNITyAiJHNyY2ZpbGUiID4gIiRsb2NrZmlsZSIKKyAgICBmaQorCisgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorICAgIHJlbW92ZWxpc3Q9IiRyZW1vdmVsaXN0ICRsb2NrZmlsZSIKKyAgICB0cmFwICckb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnIDEgMiAxNQorCisgICAgaWYgdGVzdCAtbiAiJGZpeF9zcmNmaWxlX3BhdGgiOyB0aGVuCisgICAgICBldmFsIHNyY2ZpbGU9XCIkZml4X3NyY2ZpbGVfcGF0aFwiCisgICAgZmkKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkc3JjZmlsZSIKKyAgICBxc3JjZmlsZT0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKworICAgICMgT25seSBidWlsZCBhIFBJQyBvYmplY3QgaWYgd2UgYXJlIGJ1aWxkaW5nIGxpYnRvb2wgbGlicmFyaWVzLgorICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisgICAgICAjIFdpdGhvdXQgdGhpcyBhc3NpZ25tZW50LCBiYXNlX2NvbXBpbGUgZ2V0cyBlbXB0aWVkLgorICAgICAgZmJzZF9oaWRlb3VzX3NoX2J1Zz0kYmFzZV9jb21waWxlCisKKyAgICAgIGlmIHRlc3QgIiRwaWNfbW9kZSIgIT0gbm87IHRoZW4KKwljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSAkcGljX2ZsYWciCisgICAgICBlbHNlCisJIyBEb24ndCBidWlsZCBQSUMgY29kZQorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlIgorICAgICAgZmkKKworICAgICAgZnVuY19ta2Rpcl9wICIkeGRpciRvYmpkaXIiCisKKyAgICAgIGlmIHRlc3QgLXogIiRvdXRwdXRfb2JqIjsgdGhlbgorCSMgUGxhY2UgUElDIG9iamVjdHMgaW4gJG9iamRpcgorCWNvbW1hbmQ9IiRjb21tYW5kIC1vICRsb2JqIgorICAgICAgZmkKKworICAgICAgZnVuY19zaG93X2V2YWxfbG9jYWxlICIkY29tbWFuZCIJXAorICAgICAgICAgICd0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnCisKKyAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHdhcm4gJiYKKwkgdGVzdCAiWGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYCIgIT0gIlgkc3JjZmlsZSI7IHRoZW4KKwkkRUNITyAiXAorKioqIEVSUk9SLCAkbG9ja2ZpbGUgY29udGFpbnM6CitgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKKworYnV0IGl0IHNob3VsZCBjb250YWluOgorJHNyY2ZpbGUKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQordGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IFxgLWMnIGFuZCBcYC1vJyB0b2dldGhlci4gIElmIHlvdQorcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgorYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKK2NvbXBpbGVyLiIKKworCSRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKwlleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZpCisKKyAgICAgICMgSnVzdCBtb3ZlIHRoZSBvYmplY3QgaWYgbmVlZGVkLCB0aGVuIGdvIG9uIHRvIGNvbXBpbGUgdGhlIG5leHQgb25lCisgICAgICBpZiB0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgdGVzdCAiWCRvdXRwdXRfb2JqIiAhPSAiWCRsb2JqIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICckTVYgIiRvdXRwdXRfb2JqIiAiJGxvYmoiJyBcCisJICAnZXJyb3I9JD87ICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJGVycm9yJworICAgICAgZmkKKworICAgICAgIyBBbGxvdyBlcnJvciBtZXNzYWdlcyBvbmx5IGZyb20gdGhlIGZpcnN0IGNvbXBpbGF0aW9uLgorICAgICAgaWYgdGVzdCAiJHN1cHByZXNzX29wdCIgPSB5ZXM7IHRoZW4KKwlzdXBwcmVzc19vdXRwdXQ9JyA+L2Rldi9udWxsIDI+JjEnCisgICAgICBmaQorICAgIGZpCisKKyAgICAjIE9ubHkgYnVpbGQgYSBwb3NpdGlvbi1kZXBlbmRlbnQgb2JqZWN0IGlmIHdlIGJ1aWxkIG9sZCBsaWJyYXJpZXMuCisgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorICAgICAgaWYgdGVzdCAiJHBpY19tb2RlIiAhPSB5ZXM7IHRoZW4KKwkjIERvbid0IGJ1aWxkIFBJQyBjb2RlCisJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUkcGllX2ZsYWciCisgICAgICBlbHNlCisJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUgJHBpY19mbGFnIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9jX28iID0geWVzOyB0aGVuCisJY29tbWFuZD0iJGNvbW1hbmQgLW8gJG9iaiIKKyAgICAgIGZpCisKKyAgICAgICMgU3VwcHJlc3MgY29tcGlsZXIgb3V0cHV0IGlmIHdlIGFscmVhZHkgZGlkIGEgUElDIGNvbXBpbGF0aW9uLgorICAgICAgY29tbWFuZD0iJGNvbW1hbmQkc3VwcHJlc3Nfb3V0cHV0IgorICAgICAgZnVuY19zaG93X2V2YWxfbG9jYWxlICIkY29tbWFuZCIgXAorICAgICAgICAnJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJworCisgICAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB3YXJuICYmCisJIHRlc3QgIlhgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAiICE9ICJYJHNyY2ZpbGUiOyB0aGVuCisJJEVDSE8gIlwKKyoqKiBFUlJPUiwgJGxvY2tmaWxlIGNvbnRhaW5zOgorYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCisKK2J1dCBpdCBzaG91bGQgY29udGFpbjoKKyRzcmNmaWxlCisKK1RoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKK3RlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKK3lvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBcYC1jJyBhbmQgXGAtbycgdG9nZXRoZXIuICBJZiB5b3UKK3JlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKK2F2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCitjb21waWxlci4iCisKKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorCisgICAgICAjIEp1c3QgbW92ZSB0aGUgb2JqZWN0IGlmIG5lZWRlZAorICAgICAgaWYgdGVzdCAtbiAiJG91dHB1dF9vYmoiICYmIHRlc3QgIlgkb3V0cHV0X29iaiIgIT0gIlgkb2JqIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICckTVYgIiRvdXRwdXRfb2JqIiAiJG9iaiInIFwKKwkgICdlcnJvcj0kPzsgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkZXJyb3InCisgICAgICBmaQorICAgIGZpCisKKyAgICAkb3B0X2RyeV9ydW4gfHwgeworICAgICAgZnVuY193cml0ZV9saWJ0b29sX29iamVjdCAiJGxpYm9iaiIgIiRvYmpkaXIvJG9iam5hbWUiICIkb2JqbmFtZSIKKworICAgICAgIyBVbmxvY2sgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaWYgaXQgd2FzIGxvY2tlZAorICAgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisJcmVtb3ZlbGlzdD0kbG9ja2ZpbGUKKyAgICAgICAgJFJNICIkbG9ja2ZpbGUiCisgICAgICBmaQorICAgIH0KKworICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworfQorCiskb3B0X2hlbHAgfHwgeworICB0ZXN0ICIkbW9kZSIgPSBjb21waWxlICYmIGZ1bmNfbW9kZV9jb21waWxlICR7MSsiJEAifQorfQorCitmdW5jX21vZGVfaGVscCAoKQoreworICAgICMgV2UgbmVlZCB0byBkaXNwbGF5IGhlbHAgZm9yIGVhY2ggb2YgdGhlIG1vZGVzLgorICAgIGNhc2UgJG1vZGUgaW4KKyAgICAgICIiKQorICAgICAgICAjIEdlbmVyaWMgaGVscCBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgdXNhZ2UgY29tbWVudHMKKyAgICAgICAgIyBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmaWxlLgorICAgICAgICBmdW5jX2hlbHAKKyAgICAgICAgOzsKKworICAgICAgY2xlYW4pCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1jbGVhbiBSTSBbUk0tT1BUSU9OXS4uLiBGSUxFLi4uCisKK1JlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCisKK1JNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQorKHR5cGljYWxseSBcYC9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgXGAtZicpIHRvIGJlIHBhc3NlZAordG8gUk0uCisKK0lmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIG9iamVjdCBvciBwcm9ncmFtLCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQKK3dpdGggaXQgYXJlIGRlbGV0ZWQuIE90aGVyd2lzZSwgb25seSBGSUxFIGl0c2VsZiBpcyBkZWxldGVkIHVzaW5nIFJNLiIKKyAgICAgICAgOzsKKworICAgICAgY29tcGlsZSkKKyAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1jb21waWxlIENPTVBJTEUtQ09NTUFORC4uLiBTT1VSQ0VGSUxFCisKK0NvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBsaWJyYXJ5IG9iamVjdC4KKworVGhpcyBtb2RlIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnM6CisKKyAgLW8gT1VUUFVULUZJTEUgICAgc2V0IHRoZSBvdXRwdXQgZmlsZSBuYW1lIHRvIE9VVFBVVC1GSUxFCisgIC1uby1zdXBwcmVzcyAgICAgIGRvIG5vdCBzdXBwcmVzcyBjb21waWxlciBvdXRwdXQgZm9yIG11bHRpcGxlIHBhc3NlcworICAtcHJlZmVyLXBpYyAgICAgICB0cnkgdG8gYnVpbGQgUElDIG9iamVjdHMgb25seQorICAtcHJlZmVyLW5vbi1waWMgICB0cnkgdG8gYnVpbGQgbm9uLVBJQyBvYmplY3RzIG9ubHkKKyAgLXNoYXJlZCAgICAgICAgICAgZG8gbm90IGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKyAgLXN0YXRpYyAgICAgICAgICAgb25seSBidWlsZCBhIFxgLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCisgIC1XYyxGTEFHICAgICAgICAgIHBhc3MgRkxBRyBkaXJlY3RseSB0byB0aGUgY29tcGlsZXIKKworQ09NUElMRS1DT01NQU5EIGlzIGEgY29tbWFuZCB0byBiZSB1c2VkIGluIGNyZWF0aW5nIGEgXGBzdGFuZGFyZCcgb2JqZWN0IGZpbGUKK2Zyb20gdGhlIGdpdmVuIFNPVVJDRUZJTEUuCisKK1RoZSBvdXRwdXQgZmlsZSBuYW1lIGlzIGRldGVybWluZWQgYnkgcmVtb3ZpbmcgdGhlIGRpcmVjdG9yeSBjb21wb25lbnQgZnJvbQorU09VUkNFRklMRSwgdGhlbiBzdWJzdGl0dXRpbmcgdGhlIEMgc291cmNlIGNvZGUgc3VmZml4IFxgLmMnIHdpdGggdGhlCitsaWJyYXJ5IG9iamVjdCBzdWZmaXgsIFxgLmxvJy4iCisgICAgICAgIDs7CisKKyAgICAgIGV4ZWN1dGUpCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1leGVjdXRlIENPTU1BTkQgW0FSR1NdLi4uCisKK0F1dG9tYXRpY2FsbHkgc2V0IGxpYnJhcnkgcGF0aCwgdGhlbiBydW4gYSBwcm9ncmFtLgorCitUaGlzIG1vZGUgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgb3B0aW9uczoKKworICAtZGxvcGVuIEZJTEUgICAgICBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIEZJTEUgdG8gdGhlIGxpYnJhcnkgcGF0aAorCitUaGlzIG1vZGUgc2V0cyB0aGUgbGlicmFyeSBwYXRoIGVudmlyb25tZW50IHZhcmlhYmxlIGFjY29yZGluZyB0byBcYC1kbG9wZW4nCitmbGFncy4KKworSWYgYW55IG9mIHRoZSBBUkdTIGFyZSBsaWJ0b29sIGV4ZWN1dGFibGUgd3JhcHBlcnMsIHRoZW4gdGhleSBhcmUgdHJhbnNsYXRlZAoraW50byB0aGVpciBjb3JyZXNwb25kaW5nIHVuaW5zdGFsbGVkIGJpbmFyeSwgYW5kIGFueSBvZiB0aGVpciByZXF1aXJlZCBsaWJyYXJ5CitkaXJlY3RvcmllcyBhcmUgYWRkZWQgdG8gdGhlIGxpYnJhcnkgcGF0aC4KKworVGhlbiwgQ09NTUFORCBpcyBleGVjdXRlZCwgd2l0aCBBUkdTIGFzIGFyZ3VtZW50cy4iCisgICAgICAgIDs7CisKKyAgICAgIGZpbmlzaCkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWZpbmlzaCBbTElCRElSXS4uLgorCitDb21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzLgorCitFYWNoIExJQkRJUiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGxpYnRvb2wgbGlicmFyaWVzLgorCitUaGUgY29tbWFuZHMgdGhhdCB0aGlzIG1vZGUgZXhlY3V0ZXMgbWF5IHJlcXVpcmUgc3VwZXJ1c2VyIHByaXZpbGVnZXMuICBVc2UKK3RoZSBcYC0tZHJ5LXJ1bicgb3B0aW9uIGlmIHlvdSBqdXN0IHdhbnQgdG8gc2VlIHdoYXQgd291bGQgYmUgZXhlY3V0ZWQuIgorICAgICAgICA7OworCisgICAgICBpbnN0YWxsKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9aW5zdGFsbCBJTlNUQUxMLUNPTU1BTkQuLi4KKworSW5zdGFsbCBleGVjdXRhYmxlcyBvciBsaWJyYXJpZXMuCisKK0lOU1RBTEwtQ09NTUFORCBpcyB0aGUgaW5zdGFsbGF0aW9uIGNvbW1hbmQuICBUaGUgZmlyc3QgY29tcG9uZW50IHNob3VsZCBiZQorZWl0aGVyIHRoZSBcYGluc3RhbGwnIG9yIFxgY3AnIHByb2dyYW0uCisKK1RoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBvZiBJTlNUQUxMLUNPTU1BTkQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5OgorCisgIC1pbnN0LXByZWZpeC1kaXIgUFJFRklYLURJUiAgVXNlIFBSRUZJWC1ESVIgYXMgYSBzdGFnaW5nIGFyZWEgZm9yIGluc3RhbGxhdGlvbgorCitUaGUgcmVzdCBvZiB0aGUgY29tcG9uZW50cyBhcmUgaW50ZXJwcmV0ZWQgYXMgYXJndW1lbnRzIHRvIHRoYXQgY29tbWFuZCAob25seQorQlNELWNvbXBhdGlibGUgaW5zdGFsbCBvcHRpb25zIGFyZSByZWNvZ25pemVkKS4iCisgICAgICAgIDs7CisKKyAgICAgIGxpbmspCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1saW5rIExJTkstQ09NTUFORC4uLgorCitMaW5rIG9iamVjdCBmaWxlcyBvciBsaWJyYXJpZXMgdG9nZXRoZXIgdG8gZm9ybSBhbm90aGVyIGxpYnJhcnksIG9yIHRvCitjcmVhdGUgYW4gZXhlY3V0YWJsZSBwcm9ncmFtLgorCitMSU5LLUNPTU1BTkQgaXMgYSBjb21tYW5kIHVzaW5nIHRoZSBDIGNvbXBpbGVyIHRoYXQgeW91IHdvdWxkIHVzZSB0byBjcmVhdGUKK2EgcHJvZ3JhbSBmcm9tIHNldmVyYWwgb2JqZWN0IGZpbGVzLgorCitUaGUgZm9sbG93aW5nIGNvbXBvbmVudHMgb2YgTElOSy1DT01NQU5EIGFyZSB0cmVhdGVkIHNwZWNpYWxseToKKworICAtYWxsLXN0YXRpYyAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBhdCBhbGwKKyAgLWF2b2lkLXZlcnNpb24gICAgZG8gbm90IGFkZCBhIHZlcnNpb24gc3VmZml4IGlmIHBvc3NpYmxlCisgIC1iaW5kaXIgQklORElSICAgIHNwZWNpZnkgcGF0aCB0byBiaW5hcmllcyBkaXJlY3RvcnkgKGZvciBzeXN0ZW1zIHdoZXJlCisgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcyBtdXN0IGJlIGZvdW5kIGluIHRoZSBQQVRIIHNldHRpbmcgYXQgcnVudGltZSkKKyAgLWRsb3BlbiBGSUxFICAgICAgXGAtZGxwcmVvcGVuJyBGSUxFIGlmIGl0IGNhbm5vdCBiZSBkbG9wZW5lZCBhdCBydW50aW1lCisgIC1kbHByZW9wZW4gRklMRSAgIGxpbmsgaW4gRklMRSBhbmQgYWRkIGl0cyBzeW1ib2xzIHRvIGx0X3ByZWxvYWRlZF9zeW1ib2xzCisgIC1leHBvcnQtZHluYW1pYyAgIGFsbG93IHN5bWJvbHMgZnJvbSBPVVRQVVQtRklMRSB0byBiZSByZXNvbHZlZCB3aXRoIGRsc3ltKDMpCisgIC1leHBvcnQtc3ltYm9scyBTWU1GSUxFCisgICAgICAgICAgICAgICAgICAgIHRyeSB0byBleHBvcnQgb25seSB0aGUgc3ltYm9scyBsaXN0ZWQgaW4gU1lNRklMRQorICAtZXhwb3J0LXN5bWJvbHMtcmVnZXggUkVHRVgKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHRvIGV4cG9ydCBvbmx5IHRoZSBzeW1ib2xzIG1hdGNoaW5nIFJFR0VYCisgIC1MTElCRElSICAgICAgICAgIHNlYXJjaCBMSUJESVIgZm9yIHJlcXVpcmVkIGluc3RhbGxlZCBsaWJyYXJpZXMKKyAgLWxOQU1FICAgICAgICAgICAgT1VUUFVULUZJTEUgcmVxdWlyZXMgdGhlIGluc3RhbGxlZCBsaWJyYXJ5IGxpYk5BTUUKKyAgLW1vZHVsZSAgICAgICAgICAgYnVpbGQgYSBsaWJyYXJ5IHRoYXQgY2FuIGRsb3BlbmVkCisgIC1uby1mYXN0LWluc3RhbGwgIGRpc2FibGUgdGhlIGZhc3QtaW5zdGFsbCBtb2RlCisgIC1uby1pbnN0YWxsICAgICAgIGxpbmsgYSBub3QtaW5zdGFsbGFibGUgZXhlY3V0YWJsZQorICAtbm8tdW5kZWZpbmVkICAgICBkZWNsYXJlIHRoYXQgYSBsaWJyYXJ5IGRvZXMgbm90IHJlZmVyIHRvIGV4dGVybmFsIHN5bWJvbHMKKyAgLW8gT1VUUFVULUZJTEUgICAgY3JlYXRlIE9VVFBVVC1GSUxFIGZyb20gdGhlIHNwZWNpZmllZCBvYmplY3RzCisgIC1vYmplY3RsaXN0IEZJTEUgIFVzZSBhIGxpc3Qgb2Ygb2JqZWN0IGZpbGVzIGZvdW5kIGluIEZJTEUgdG8gc3BlY2lmeSBvYmplY3RzCisgIC1wcmVjaW91cy1maWxlcy1yZWdleCBSRUdFWAorICAgICAgICAgICAgICAgICAgICBkb24ndCByZW1vdmUgb3V0cHV0IGZpbGVzIG1hdGNoaW5nIFJFR0VYCisgIC1yZWxlYXNlIFJFTEVBU0UgIHNwZWNpZnkgcGFja2FnZSByZWxlYXNlIGluZm9ybWF0aW9uCisgIC1ycGF0aCBMSUJESVIgICAgIHRoZSBjcmVhdGVkIGxpYnJhcnkgd2lsbCBldmVudHVhbGx5IGJlIGluc3RhbGxlZCBpbiBMSUJESVIKKyAgLVJbIF1MSUJESVIgICAgICAgYWRkIExJQkRJUiB0byB0aGUgcnVudGltZSBwYXRoIG9mIHByb2dyYW1zIGFuZCBsaWJyYXJpZXMKKyAgLXNoYXJlZCAgICAgICAgICAgb25seSBkbyBkeW5hbWljIGxpbmtpbmcgb2YgbGlidG9vbCBsaWJyYXJpZXMKKyAgLXNocmV4dCBTVUZGSVggICAgb3ZlcnJpZGUgdGhlIHN0YW5kYXJkIHNoYXJlZCBsaWJyYXJ5IGZpbGUgZXh0ZW5zaW9uCisgIC1zdGF0aWMgICAgICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIG9mIHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisgIC1zdGF0aWMtbGlidG9vbC1saWJzCisgICAgICAgICAgICAgICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIG9mIGxpYnRvb2wgbGlicmFyaWVzCisgIC12ZXJzaW9uLWluZm8gQ1VSUkVOVFs6UkVWSVNJT05bOkFHRV1dCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgbGlicmFyeSB2ZXJzaW9uIGluZm8gW2VhY2ggdmFyaWFibGUgZGVmYXVsdHMgdG8gMF0KKyAgLXdlYWsgTElCTkFNRSAgICAgZGVjbGFyZSB0aGF0IHRoZSB0YXJnZXQgcHJvdmlkZXMgdGhlIExJQk5BTUUgaW50ZXJmYWNlCisgIC1XYyxGTEFHCisgIC1YY29tcGlsZXIgRkxBRyAgIHBhc3MgbGlua2VyLXNwZWNpZmljIEZMQUcgZGlyZWN0bHkgdG8gdGhlIGNvbXBpbGVyCisgIC1XbCxGTEFHCisgIC1YbGlua2VyIEZMQUcgICAgIHBhc3MgbGlua2VyLXNwZWNpZmljIEZMQUcgZGlyZWN0bHkgdG8gdGhlIGxpbmtlcgorICAtWENDbGlua2VyIEZMQUcgICBwYXNzIGxpbmstc3BlY2lmaWMgRkxBRyB0byB0aGUgY29tcGlsZXIgZHJpdmVyIChDQykKKworQWxsIG90aGVyIG9wdGlvbnMgKGFyZ3VtZW50cyBiZWdpbm5pbmcgd2l0aCBcYC0nKSBhcmUgaWdub3JlZC4KKworRXZlcnkgb3RoZXIgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZpbGVuYW1lLiAgRmlsZXMgZW5kaW5nIGluIFxgLmxhJyBhcmUKK3RyZWF0ZWQgYXMgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMsIG90aGVyIGZpbGVzIGFyZSBzdGFuZGFyZCBvciBsaWJyYXJ5CitvYmplY3QgZmlsZXMuCisKK0lmIHRoZSBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmxhJywgdGhlbiBhIGxpYnRvb2wgbGlicmFyeSBpcyBjcmVhdGVkLAorb25seSBsaWJyYXJ5IG9iamVjdHMgKFxgLmxvJyBmaWxlcykgbWF5IGJlIHNwZWNpZmllZCwgYW5kIFxgLXJwYXRoJyBpcworcmVxdWlyZWQsIGV4Y2VwdCB3aGVuIGNyZWF0aW5nIGEgY29udmVuaWVuY2UgbGlicmFyeS4KKworSWYgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5hJyBvciBcYC5saWInLCB0aGVuIGEgc3RhbmRhcmQgbGlicmFyeSBpcyBjcmVhdGVkCit1c2luZyBcYGFyJyBhbmQgXGByYW5saWInLCBvciBvbiBXaW5kb3dzIHVzaW5nIFxgbGliJy4KKworSWYgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5sbycgb3IgXGAuJHtvYmpleHR9JywgdGhlbiBhIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUKK2lzIGNyZWF0ZWQsIG90aGVyd2lzZSBhbiBleGVjdXRhYmxlIHByb2dyYW0gaXMgY3JlYXRlZC4iCisgICAgICAgIDs7CisKKyAgICAgIHVuaW5zdGFsbCkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPXVuaW5zdGFsbCBSTSBbUk0tT1BUSU9OXS4uLiBGSUxFLi4uCisKK1JlbW92ZSBsaWJyYXJpZXMgZnJvbSBhbiBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgorCitSTSBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSB0byB1c2UgdG8gZGVsZXRlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIEZJTEUKKyh0eXBpY2FsbHkgXGAvYmluL3JtJykuICBSTS1PUFRJT05TIGFyZSBvcHRpb25zIChzdWNoIGFzIFxgLWYnKSB0byBiZSBwYXNzZWQKK3RvIFJNLgorCitJZiBGSUxFIGlzIGEgbGlidG9vbCBsaWJyYXJ5LCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBpdCBhcmUgZGVsZXRlZC4KK090aGVyd2lzZSwgb25seSBGSUxFIGl0c2VsZiBpcyBkZWxldGVkIHVzaW5nIFJNLiIKKyAgICAgICAgOzsKKworICAgICAgKikKKyAgICAgICAgZnVuY19mYXRhbF9oZWxwICJpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG1vZGUnIgorICAgICAgICA7OworICAgIGVzYWMKKworICAgIGVjaG8KKyAgICAkRUNITyAiVHJ5IFxgJHByb2duYW1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgb3RoZXIgbW9kZXMuIgorfQorCisjIE5vdyB0aGF0IHdlJ3ZlIGNvbGxlY3RlZCBhIHBvc3NpYmxlIC0tbW9kZSBhcmcsIHNob3cgaGVscCBpZiBuZWNlc3NhcnkKK2lmICRvcHRfaGVscDsgdGhlbgorICBpZiB0ZXN0ICIkb3B0X2hlbHAiID0gOjsgdGhlbgorICAgIGZ1bmNfbW9kZV9oZWxwCisgIGVsc2UKKyAgICB7CisgICAgICBmdW5jX2hlbHAgbm9leGl0CisgICAgICBmb3IgbW9kZSBpbiBjb21waWxlIGxpbmsgZXhlY3V0ZSBpbnN0YWxsIGZpbmlzaCB1bmluc3RhbGwgY2xlYW47IGRvCisJZnVuY19tb2RlX2hlbHAKKyAgICAgIGRvbmUKKyAgICB9IHwgc2VkIC1uICcxcDsgMiwkcy9eVXNhZ2U6LyAgb3I6IC9wJworICAgIHsKKyAgICAgIGZ1bmNfaGVscCBub2V4aXQKKyAgICAgIGZvciBtb2RlIGluIGNvbXBpbGUgbGluayBleGVjdXRlIGluc3RhbGwgZmluaXNoIHVuaW5zdGFsbCBjbGVhbjsgZG8KKwllY2hvCisJZnVuY19tb2RlX2hlbHAKKyAgICAgIGRvbmUKKyAgICB9IHwKKyAgICBzZWQgJzFkCisgICAgICAvXldoZW4gcmVwb3J0aW5nLywvXlJlcG9ydC97CisJSAorCWQKKyAgICAgIH0KKyAgICAgICR4CisgICAgICAvaW5mb3JtYXRpb24gYWJvdXQgb3RoZXIgbW9kZXMvZAorICAgICAgL21vcmUgZGV0YWlsZWQgLipNT0RFL2QKKyAgICAgIHMvXlVzYWdlOi4qLS1tb2RlPVwoW14gXSpcKSAuKi9EZXNjcmlwdGlvbiBvZiBcMSBtb2RlOi8nCisgIGZpCisgIGV4aXQgJD8KK2ZpCisKKworIyBmdW5jX21vZGVfZXhlY3V0ZSBhcmcuLi4KK2Z1bmNfbW9kZV9leGVjdXRlICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgICMgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjb21tYW5kIG5hbWUuCisgICAgY21kPSIkbm9ub3B0IgorICAgIHRlc3QgLXogIiRjbWQiICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIENPTU1BTkQiCisKKyAgICAjIEhhbmRsZSAtZGxvcGVuIGZsYWdzIGltbWVkaWF0ZWx5LgorICAgIGZvciBmaWxlIGluICRleGVjdXRlX2RsZmlsZXM7IGRvCisgICAgICB0ZXN0IC1mICIkZmlsZSIgXAorCXx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkZmlsZScgaXMgbm90IGEgZmlsZSIKKworICAgICAgZGlyPQorICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgKi5sYSkKKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRmaWxlIiBcCisJICB8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCisJIyBSZWFkIHRoZSBsaWJ0b29sIGxpYnJhcnkuCisJZGxuYW1lPQorCWxpYnJhcnlfbmFtZXM9CisJZnVuY19zb3VyY2UgIiRmaWxlIgorCisJIyBTa2lwIHRoaXMgbGlicmFyeSBpZiBpdCBjYW5ub3QgYmUgZGxvcGVuZWQuCisJaWYgdGVzdCAteiAiJGRsbmFtZSI7IHRoZW4KKwkgICMgV2FybiBpZiBpdCB3YXMgYSBzaGFyZWQgbGlicmFyeS4KKwkgIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJiBcCisJICAgIGZ1bmNfd2FybmluZyAiXGAkZmlsZScgd2FzIG5vdCBsaW5rZWQgd2l0aCBcYC1leHBvcnQtZHluYW1pYyciCisJICBjb250aW51ZQorCWZpCisKKwlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKKwlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJaWYgdGVzdCAtZiAiJGRpci8kb2JqZGlyLyRkbG5hbWUiOyB0aGVuCisJICBkaXI9IiRkaXIvJG9iamRpciIKKwllbHNlCisJICBpZiB0ZXN0ICEgLWYgIiRkaXIvJGRsbmFtZSI7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgXGAkZGxuYW1lJyBpbiBcYCRkaXInIG9yIFxgJGRpci8kb2JqZGlyJyIKKwkgIGZpCisJZmkKKwk7OworCisgICAgICAqLmxvKQorCSMgSnVzdCBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSAubG8gZmlsZS4KKwlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKKwlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCTs7CisKKyAgICAgICopCisJZnVuY193YXJuaW5nICJcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG5vbi1saWJ0b29sIGxpYnJhcmllcyBhbmQgb2JqZWN0cyIKKwljb250aW51ZQorCTs7CisgICAgICBlc2FjCisKKyAgICAgICMgR2V0IHRoZSBhYnNvbHV0ZSBwYXRobmFtZS4KKyAgICAgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKKyAgICAgIHRlc3QgLW4gIiRhYnNkaXIiICYmIGRpcj0iJGFic2RpciIKKworICAgICAgIyBOb3cgYWRkIHRoZSBkaXJlY3RvcnkgdG8gc2hsaWJwYXRoX3Zhci4KKyAgICAgIGlmIGV2YWwgInRlc3QgLXogXCJcJCRzaGxpYnBhdGhfdmFyXCIiOyB0aGVuCisJZXZhbCAiJHNobGlicGF0aF92YXI9XCJcJGRpclwiIgorICAgICAgZWxzZQorCWV2YWwgIiRzaGxpYnBhdGhfdmFyPVwiXCRkaXI6XCQkc2hsaWJwYXRoX3ZhclwiIgorICAgICAgZmkKKyAgICBkb25lCisKKyAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHNobGlicGF0aF92YXIKKyAgICAjIHJhdGhlciB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9leGVjdXRlX21hZ2ljPSIkbWFnaWMiCisKKyAgICAjIENoZWNrIGlmIGFueSBvZiB0aGUgYXJndW1lbnRzIGlzIGEgd3JhcHBlciBzY3JpcHQuCisgICAgYXJncz0KKyAgICBmb3IgZmlsZQorICAgIGRvCisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAtKiB8ICoubGEgfCAqLmxvICkgOzsKKyAgICAgICopCisJIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgcmVhbGx5IGEgbGlidG9vbCBwcm9ncmFtLgorCWlmIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkZmlsZSI7IHRoZW4KKwkgIGZ1bmNfc291cmNlICIkZmlsZSIKKwkgICMgVHJhbnNmb3JtIGFyZyB0byB3cmFwcGVkIG5hbWUuCisJICBmaWxlPSIkcHJvZ2Rpci8kcHJvZ3JhbSIKKwllbGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJGZpbGUiOyB0aGVuCisJICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKKwkgIGZ1bmNfc291cmNlICIkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQiCisJICAjIFRyYW5zZm9ybSBhcmcgdG8gd3JhcHBlZCBuYW1lLgorCSAgZmlsZT0iJHByb2dkaXIvJHByb2dyYW0iCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgIyBRdW90ZSBhcmd1bWVudHMgKHRvIHByZXNlcnZlIHNoZWxsIG1ldGFjaGFyYWN0ZXJzKS4KKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmaWxlIgorICAgICAgYXJncz0iJGFyZ3MgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgIGRvbmUKKworICAgIGlmIHRlc3QgIlgkb3B0X2RyeV9ydW4iID0gWGZhbHNlOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwkjIEV4cG9ydCB0aGUgc2hsaWJwYXRoX3Zhci4KKwlldmFsICJleHBvcnQgJHNobGlicGF0aF92YXIiCisgICAgICBmaQorCisgICAgICAjIFJlc3RvcmUgc2F2ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICAgICBmb3IgbHRfdmFyIGluIExBTkcgTEFOR1VBR0UgTENfQUxMIExDX0NUWVBFIExDX0NPTExBVEUgTENfTUVTU0FHRVMKKyAgICAgIGRvCisJZXZhbCAiaWYgdGVzdCBcIlwke3NhdmVfJGx0X3ZhcitzZXR9XCIgPSBzZXQ7IHRoZW4KKyAgICAgICAgICAgICAgICAkbHRfdmFyPVwkc2F2ZV8kbHRfdmFyOyBleHBvcnQgJGx0X3ZhcgorCSAgICAgIGVsc2UKKwkJJGx0X3Vuc2V0ICRsdF92YXIKKwkgICAgICBmaSIKKyAgICAgIGRvbmUKKworICAgICAgIyBOb3cgcHJlcGFyZSB0byBhY3R1YWxseSBleGVjIHRoZSBjb21tYW5kLgorICAgICAgZXhlY19jbWQ9IlwkY21kJGFyZ3MiCisgICAgZWxzZQorICAgICAgIyBEaXNwbGF5IHdoYXQgd291bGQgYmUgZG9uZS4KKyAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorCWV2YWwgIlwkRUNITyBcIlwkc2hsaWJwYXRoX3Zhcj1cJCRzaGxpYnBhdGhfdmFyXCIiCisJZWNobyAiZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorICAgICAgZmkKKyAgICAgICRFQ0hPICIkY21kJGFyZ3MiCisgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICBmaQorfQorCit0ZXN0ICIkbW9kZSIgPSBleGVjdXRlICYmIGZ1bmNfbW9kZV9leGVjdXRlICR7MSsiJEAifQorCisKKyMgZnVuY19tb2RlX2ZpbmlzaCBhcmcuLi4KK2Z1bmNfbW9kZV9maW5pc2ggKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgbGliZGlycz0iJG5vbm9wdCIKKyAgICBhZG1pbmNtZHM9CisKKyAgICBpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMkZmluaXNoX2V2YWwiICYmIHRlc3QgLW4gIiRsaWJkaXJzIjsgdGhlbgorICAgICAgZm9yIGRpcgorICAgICAgZG8KKwlsaWJkaXJzPSIkbGliZGlycyAkZGlyIgorICAgICAgZG9uZQorCisgICAgICBmb3IgbGliZGlyIGluICRsaWJkaXJzOyBkbworCWlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyI7IHRoZW4KKwkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBmaW5pc2ggY29tbWFuZHMuCisJICBmdW5jX2V4ZWN1dGVfY21kcyAiJGZpbmlzaF9jbWRzIiAnYWRtaW5jbWRzPSIkYWRtaW5jbWRzCisnIiRjbWQiJyInCisJZmkKKwlpZiB0ZXN0IC1uICIkZmluaXNoX2V2YWwiOyB0aGVuCisJICAjIERvIHRoZSBzaW5nbGUgZmluaXNoX2V2YWwuCisJICBldmFsIGNtZHM9XCIkZmluaXNoX2V2YWxcIgorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiRjbWRzIiB8fCBhZG1pbmNtZHM9IiRhZG1pbmNtZHMKKyAgICAgICAkY21kcyIKKwlmaQorICAgICAgZG9uZQorICAgIGZpCisKKyAgICAjIEV4aXQgaGVyZSBpZiB0aGV5IHdhbnRlZCBzaWxlbnQgbW9kZS4KKyAgICAkb3B0X3NpbGVudCAmJiBleGl0ICRFWElUX1NVQ0NFU1MKKworICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgICAgZWNobyAiTGlicmFyaWVzIGhhdmUgYmVlbiBpbnN0YWxsZWQgaW46IgorICAgIGZvciBsaWJkaXIgaW4gJGxpYmRpcnM7IGRvCisgICAgICAkRUNITyAiICAgJGxpYmRpciIKKyAgICBkb25lCisgICAgZWNobworICAgIGVjaG8gIklmIHlvdSBldmVyIGhhcHBlbiB0byB3YW50IHRvIGxpbmsgYWdhaW5zdCBpbnN0YWxsZWQgbGlicmFyaWVzIgorICAgIGVjaG8gImluIGEgZ2l2ZW4gZGlyZWN0b3J5LCBMSUJESVIsIHlvdSBtdXN0IGVpdGhlciB1c2UgbGlidG9vbCwgYW5kIgorICAgIGVjaG8gInNwZWNpZnkgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGxpYnJhcnksIG9yIHVzZSB0aGUgXGAtTExJQkRJUiciCisgICAgZWNobyAiZmxhZyBkdXJpbmcgbGlua2luZyBhbmQgZG8gYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmc6IgorICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorICAgICAgZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRzaGxpYnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKyAgICAgIGVjaG8gIiAgICAgZHVyaW5nIGV4ZWN1dGlvbiIKKyAgICBmaQorICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKyAgICAgIGVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgXGAkcnVucGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorICAgICAgZWNobyAiICAgICBkdXJpbmcgbGlua2luZyIKKyAgICBmaQorICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorICAgICAgbGliZGlyPUxJQkRJUgorICAgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCisgICAgICAkRUNITyAiICAgLSB1c2UgdGhlIFxgJGZsYWcnIGxpbmtlciBmbGFnIgorICAgIGZpCisgICAgaWYgdGVzdCAtbiAiJGFkbWluY21kcyI7IHRoZW4KKyAgICAgICRFQ0hPICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBydW4gdGhlc2UgY29tbWFuZHM6JGFkbWluY21kcyIKKyAgICBmaQorICAgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisgICAgICBlY2hvICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBhZGQgTElCRElSIHRvIFxgL2V0Yy9sZC5zby5jb25mJyIKKyAgICBmaQorICAgIGVjaG8KKworICAgIGVjaG8gIlNlZSBhbnkgb3BlcmF0aW5nIHN5c3RlbSBkb2N1bWVudGF0aW9uIGFib3V0IHNoYXJlZCBsaWJyYXJpZXMgZm9yIgorICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgIHNvbGFyaXMyLls2Nzg5XXxzb2xhcmlzMi4xWzAtOV0pCisgICAgICAgIGVjaG8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpLCBjcmxlKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwiCisJZWNobyAicGFnZXMuIgorCTs7CisgICAgICAqKQorICAgICAgICBlY2hvICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSBhbmQgbGQuc28oOCkgbWFudWFsIHBhZ2VzLiIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKyAgICBleGl0ICRFWElUX1NVQ0NFU1MKK30KKwordGVzdCAiJG1vZGUiID0gZmluaXNoICYmIGZ1bmNfbW9kZV9maW5pc2ggJHsxKyIkQCJ9CisKKworIyBmdW5jX21vZGVfaW5zdGFsbCBhcmcuLi4KK2Z1bmNfbW9kZV9pbnN0YWxsICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgICMgVGhlcmUgbWF5IGJlIGFuIG9wdGlvbmFsIHNoKDEpIGFyZ3VtZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YKKyAgICAjIGluc3RhbGxfcHJvZyAoZXNwZWNpYWxseSBvbiBXaW5kb3dzIE5UKS4KKyAgICBpZiB0ZXN0ICIkbm9ub3B0IiA9ICIkU0hFTEwiIHx8IHRlc3QgIiRub25vcHQiID0gL2Jpbi9zaCB8fAorICAgICAgICMgQWxsb3cgdGhlIHVzZSBvZiBHTlUgc2h0b29sJ3MgaW5zdGFsbCBjb21tYW5kLgorICAgICAgIGNhc2UgJG5vbm9wdCBpbiAqc2h0b29sKikgOjs7ICopIGZhbHNlOzsgZXNhYzsgdGhlbgorICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJG5vbm9wdCIKKyAgICAgIGluc3RhbGxfcHJvZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0ICIKKyAgICAgIGFyZz0kMQorICAgICAgc2hpZnQKKyAgICBlbHNlCisgICAgICBpbnN0YWxsX3Byb2c9CisgICAgICBhcmc9JG5vbm9wdAorICAgIGZpCisKKyAgICAjIFRoZSByZWFsIGZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgaW5zdGFsbGF0aW9uIHByb2dyYW0uCisgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisgICAgaW5zdGFsbF9wcm9nPSIkaW5zdGFsbF9wcm9nJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgIGluc3RhbGxfc2hhcmVkX3Byb2c9JGluc3RhbGxfcHJvZworICAgIGNhc2UgIiAkaW5zdGFsbF9wcm9nICIgaW4KKyAgICAgICpbXFxcIC9dY3BcICopIGluc3RhbGxfY3A9OiA7OworICAgICAgKikgaW5zdGFsbF9jcD1mYWxzZSA7OworICAgIGVzYWMKKworICAgICMgV2UgbmVlZCB0byBhY2NlcHQgYXQgbGVhc3QgYWxsIHRoZSBCU0QgaW5zdGFsbCBmbGFncy4KKyAgICBkZXN0PQorICAgIGZpbGVzPQorICAgIG9wdHM9CisgICAgcHJldj0KKyAgICBpbnN0YWxsX3R5cGU9CisgICAgaXNkaXI9bm8KKyAgICBzdHJpcG1lPQorICAgIG5vX21vZGU9OgorICAgIGZvciBhcmcKKyAgICBkbworICAgICAgYXJnMj0KKyAgICAgIGlmIHRlc3QgLW4gIiRkZXN0IjsgdGhlbgorCWZpbGVzPSIkZmlsZXMgJGRlc3QiCisJZGVzdD0kYXJnCisJY29udGludWUKKyAgICAgIGZpCisKKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLWQpIGlzZGlyPXllcyA7OworICAgICAgLWYpCisJaWYgJGluc3RhbGxfY3A7IHRoZW4gOjsgZWxzZQorCSAgcHJldj0kYXJnCisJZmkKKwk7OworICAgICAgLWcgfCAtbSB8IC1vKQorCXByZXY9JGFyZworCTs7CisgICAgICAtcykKKwlzdHJpcG1lPSIgLXMiCisJY29udGludWUKKwk7OworICAgICAgLSopCisJOzsKKyAgICAgICopCisJIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRlZCBhbiBhcmd1bWVudCwgdGhlbiBza2lwIGl0LgorCWlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgorCSAgaWYgdGVzdCAieCRwcmV2IiA9IHgtbSAmJiB0ZXN0IC1uICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIjsgdGhlbgorCSAgICBhcmcyPSRpbnN0YWxsX292ZXJyaWRlX21vZGUKKwkgICAgbm9fbW9kZT1mYWxzZQorCSAgZmkKKwkgIHByZXY9CisJZWxzZQorCSAgZGVzdD0kYXJnCisJICBjb250aW51ZQorCWZpCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBhcmd1bWVudC4KKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisgICAgICBpbnN0YWxsX3Byb2c9IiRpbnN0YWxsX3Byb2cgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICAgaWYgdGVzdCAtbiAiJGFyZzIiOyB0aGVuCisJZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZzIiCisgICAgICBmaQorICAgICAgaW5zdGFsbF9zaGFyZWRfcHJvZz0iJGluc3RhbGxfc2hhcmVkX3Byb2cgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgIGRvbmUKKworICAgIHRlc3QgLXogIiRpbnN0YWxsX3Byb2ciICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBpbnN0YWxsIHByb2dyYW0iCisKKyAgICB0ZXN0IC1uICIkcHJldiIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgXGAkcHJldicgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgorCisgICAgaWYgdGVzdCAtbiAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSIgJiYgJG5vX21vZGU7IHRoZW4KKyAgICAgIGlmICRpbnN0YWxsX2NwOyB0aGVuIDo7IGVsc2UKKwlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIgorCWluc3RhbGxfc2hhcmVkX3Byb2c9IiRpbnN0YWxsX3NoYXJlZF9wcm9nIC1tICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICAgIGZpCisgICAgZmkKKworICAgIGlmIHRlc3QgLXogIiRmaWxlcyI7IHRoZW4KKyAgICAgIGlmIHRlc3QgLXogIiRkZXN0IjsgdGhlbgorCWZ1bmNfZmF0YWxfaGVscCAibm8gZmlsZSBvciBkZXN0aW5hdGlvbiBzcGVjaWZpZWQiCisgICAgICBlbHNlCisJZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgZGVzdGluYXRpb24iCisgICAgICBmaQorICAgIGZpCisKKyAgICAjIFN0cmlwIGFueSB0cmFpbGluZyBzbGFzaCBmcm9tIHRoZSBkZXN0aW5hdGlvbi4KKyAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRkZXN0IgorICAgIGRlc3Q9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCisgICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgZGVzdGluYXRpb24gaXMgYSBkaXJlY3RvcnkuCisgICAgdGVzdCAtZCAiJGRlc3QiICYmIGlzZGlyPXllcworICAgIGlmIHRlc3QgIiRpc2RpciIgPSB5ZXM7IHRoZW4KKyAgICAgIGRlc3RkaXI9IiRkZXN0IgorICAgICAgZGVzdG5hbWU9CisgICAgZWxzZQorICAgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJGRlc3QiICIiICIuIgorICAgICAgZGVzdGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisgICAgICBkZXN0bmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCisgICAgICAjIE5vdCBhIGRpcmVjdG9yeSwgc28gY2hlY2sgdG8gc2VlIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgZmlsZSBzcGVjaWZpZWQuCisgICAgICBzZXQgZHVtbXkgJGZpbGVzOyBzaGlmdAorICAgICAgdGVzdCAiJCMiIC1ndCAxICYmIFwKKwlmdW5jX2ZhdGFsX2hlbHAgIlxgJGRlc3QnIGlzIG5vdCBhIGRpcmVjdG9yeSIKKyAgICBmaQorICAgIGNhc2UgJGRlc3RkaXIgaW4KKyAgICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CisgICAgKikKKyAgICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KKwljYXNlICRmaWxlIGluCisJKi5sbykgOzsKKwkqKQorCSAgZnVuY19mYXRhbF9oZWxwICJcYCRkZXN0ZGlyJyBtdXN0IGJlIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIgorCSAgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgdmFyaWFibGVzIHJhdGhlcgorICAgICMgdGhhbiBydW5uaW5nIHRoZWlyIHByb2dyYW1zLgorICAgIGxpYnRvb2xfaW5zdGFsbF9tYWdpYz0iJG1hZ2ljIgorCisgICAgc3RhdGljbGlicz0KKyAgICBmdXR1cmVfbGliZGlycz0KKyAgICBjdXJyZW50X2xpYmRpcnM9CisgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbworCisgICAgICAjIERvIGVhY2ggaW5zdGFsbGF0aW9uLgorICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgKi4kbGliZXh0KQorCSMgRG8gdGhlIHN0YXRpYyBsaWJyYXJpZXMgbGF0ZXIuCisJc3RhdGljbGlicz0iJHN0YXRpY2xpYnMgJGZpbGUiCisJOzsKKworICAgICAgKi5sYSkKKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRmaWxlIiBcCisJICB8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGZpbGUnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKworCWxpYnJhcnlfbmFtZXM9CisJb2xkX2xpYnJhcnk9CisJcmVsaW5rX2NvbW1hbmQ9CisJZnVuY19zb3VyY2UgIiRmaWxlIgorCisJIyBBZGQgdGhlIGxpYmRpciB0byBjdXJyZW50X2xpYmRpcnMgaWYgaXQgaXMgdGhlIGRlc3RpbmF0aW9uLgorCWlmIHRlc3QgIlgkZGVzdGRpciIgPSAiWCRsaWJkaXIiOyB0aGVuCisJICBjYXNlICIkY3VycmVudF9saWJkaXJzICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBjdXJyZW50X2xpYmRpcnM9IiRjdXJyZW50X2xpYmRpcnMgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwllbHNlCisJICAjIE5vdGUgdGhlIGxpYmRpciBhcyBhIGZ1dHVyZSBsaWJkaXIuCisJICBjYXNlICIkZnV0dXJlX2xpYmRpcnMgIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZ1dHVyZV9saWJkaXJzPSIkZnV0dXJlX2xpYmRpcnMgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlmaQorCisJZnVuY19kaXJuYW1lICIkZmlsZSIgIi8iICIiCisJZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKwlkaXI9IiRkaXIkb2JqZGlyIgorCisJaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSAgIyBEZXRlcm1pbmUgdGhlIHByZWZpeCB0aGUgdXNlciBoYXMgYXBwbGllZCB0byBvdXIgZnV0dXJlIGRpci4KKwkgIGluc3RfcHJlZml4X2Rpcj1gJEVDSE8gIiRkZXN0ZGlyIiB8ICRTRUQgLWUgInMlJGxpYmRpclwkJSUiYAorCisJICAjIERvbid0IGFsbG93IHRoZSB1c2VyIHRvIHBsYWNlIHVzIG91dHNpZGUgb2Ygb3VyIGV4cGVjdGVkCisJICAjIGxvY2F0aW9uIGIvYyB0aGlzIHByZXZlbnRzIGZpbmRpbmcgZGVwZW5kZW50IGxpYnJhcmllcyB0aGF0CisJICAjIGFyZSBpbnN0YWxsZWQgdG8gdGhlIHNhbWUgcHJlZml4LgorCSAgIyBBdCBwcmVzZW50LCB0aGlzIGNoZWNrIGRvZXNuJ3QgYWZmZWN0IHdpbmRvd3MgLmRsbCdzIHRoYXQKKwkgICMgYXJlIGluc3RhbGxlZCBpbnRvICRsaWJkaXIvLi4vYmluIChjdXJyZW50bHksIHRoYXQgd29ya3MgZmluZSkKKwkgICMgYnV0IGl0J3Mgc29tZXRoaW5nIHRvIGtlZXAgYW4gZXllIG9uLgorCSAgdGVzdCAiJGluc3RfcHJlZml4X2RpciIgPSAiJGRlc3RkaXIiICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IGNhbm5vdCBpbnN0YWxsIFxgJGZpbGUnIHRvIGEgZGlyZWN0b3J5IG5vdCBlbmRpbmcgaW4gJGxpYmRpciIKKworCSAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKwkgICAgIyBTdGljayB0aGUgaW5zdF9wcmVmaXhfZGlyIGRhdGEgaW50byB0aGUgbGluayBjb21tYW5kLgorCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICJzJUBpbnN0X3ByZWZpeF9kaXJAJS1pbnN0LXByZWZpeC1kaXIgJGluc3RfcHJlZml4X2RpciUiYAorCSAgZWxzZQorCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICJzJUBpbnN0X3ByZWZpeF9kaXJAJSUiYAorCSAgZmkKKworCSAgZnVuY193YXJuaW5nICJyZWxpbmtpbmcgXGAkZmlsZSciCisJICBmdW5jX3Nob3dfZXZhbCAiJHJlbGlua19jb21tYW5kIiBcCisJICAgICdmdW5jX2ZhdGFsX2Vycm9yICJlcnJvcjogcmVsaW5rIFxgJGZpbGUnXCcnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQiJworCWZpCisKKwkjIFNlZSB0aGUgbmFtZXMgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5LgorCXNldCBkdW1teSAkbGlicmFyeV9uYW1lczsgc2hpZnQKKwlpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKwkgIHJlYWxuYW1lPSIkMSIKKwkgIHNoaWZ0CisKKwkgIHNyY25hbWU9IiRyZWFsbmFtZSIKKwkgIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCIgJiYgc3JjbmFtZT0iJHJlYWxuYW1lIlQKKworCSAgIyBJbnN0YWxsIHRoZSBzaGFyZWQgbGlicmFyeSBhbmQgYnVpbGQgdGhlIHN5bWxpbmtzLgorCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3NoYXJlZF9wcm9nICRkaXIvJHNyY25hbWUgJGRlc3RkaXIvJHJlYWxuYW1lIiBcCisJICAgICAgJ2V4aXQgJD8nCisJICB0c3RyaXBtZT0iJHN0cmlwbWUiCisJICBjYXNlICRob3N0X29zIGluCisJICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisJICAgIGNhc2UgJHJlYWxuYW1lIGluCisJICAgICouZGxsLmEpCisJICAgICAgdHN0cmlwbWU9IiIKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJICBlc2FjCisJICBpZiB0ZXN0IC1uICIkdHN0cmlwbWUiICYmIHRlc3QgLW4gIiRzdHJpcGxpYiI7IHRoZW4KKwkgICAgZnVuY19zaG93X2V2YWwgIiRzdHJpcGxpYiAkZGVzdGRpci8kcmVhbG5hbWUiICdleGl0ICQ/JworCSAgZmkKKworCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCisJICAgICMgRGVsZXRlIHRoZSBvbGQgc3ltbGlua3MsIGFuZCBjcmVhdGUgbmV3IG9uZXMuCisJICAgICMgVHJ5IGBsbiAtc2YnIGZpcnN0LCBiZWNhdXNlIHRoZSBgbG4nIGJpbmFyeSBtaWdodCBkZXBlbmQgb24KKwkgICAgIyB0aGUgc3ltbGluayB3ZSByZXBsYWNlISAgU29sYXJpcyAvYmluL2xuIGRvZXMgbm90IHVuZGVyc3RhbmQgLWYsCisJICAgICMgc28gd2UgYWxzbyBuZWVkIHRvIHRyeSBybSAmJiBsbiAtcy4KKwkgICAgZm9yIGxpbmtuYW1lCisJICAgIGRvCisJICAgICAgdGVzdCAiJGxpbmtuYW1lIiAhPSAiJHJlYWxuYW1lIiBcCisJCSYmIGZ1bmNfc2hvd19ldmFsICIoY2QgJGRlc3RkaXIgJiYgeyAkTE5fUyAtZiAkcmVhbG5hbWUgJGxpbmtuYW1lIHx8IHsgJFJNICRsaW5rbmFtZSAmJiAkTE5fUyAkcmVhbG5hbWUgJGxpbmtuYW1lOyB9OyB9KSIKKwkgICAgZG9uZQorCSAgZmkKKworCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgorCSAgbGliPSIkZGVzdGRpci8kcmVhbG5hbWUiCisJICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RpbnN0YWxsX2NtZHMiICdleGl0ICQ/JworCWZpCisKKwkjIEluc3RhbGwgdGhlIHBzZXVkby1saWJyYXJ5IGZvciBpbmZvcm1hdGlvbiBwdXJwb3Nlcy4KKwlmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKwluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJaW5zdG5hbWU9IiRkaXIvJG5hbWUiaQorCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRpbnN0bmFtZSAkZGVzdGRpci8kbmFtZSIgJ2V4aXQgJD8nCisKKwkjIE1heWJlIGluc3RhbGwgdGhlIHN0YXRpYyBsaWJyYXJ5LCB0b28uCisJdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBzdGF0aWNsaWJzPSIkc3RhdGljbGlicyAkZGlyLyRvbGRfbGlicmFyeSIKKwk7OworCisgICAgICAqLmxvKQorCSMgSW5zdGFsbCAoaS5lLiBjb3B5KSBhIGxpYnRvb2wgb2JqZWN0LgorCisJIyBGaWd1cmUgb3V0IGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgaWYgaXQgd2Fzbid0IGFscmVhZHkgc3BlY2lmaWVkLgorCWlmIHRlc3QgLW4gIiRkZXN0bmFtZSI7IHRoZW4KKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdG5hbWUiCisJZWxzZQorCSAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisJICBkZXN0ZmlsZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0ZmlsZSIKKwlmaQorCisJIyBEZWR1Y2UgdGhlIG5hbWUgb2YgdGhlIGRlc3RpbmF0aW9uIG9sZC1zdHlsZSBvYmplY3QgZmlsZS4KKwljYXNlICRkZXN0ZmlsZSBpbgorCSoubG8pCisJICBmdW5jX2xvMm8gIiRkZXN0ZmlsZSIKKwkgIHN0YXRpY2Rlc3Q9JGZ1bmNfbG8yb19yZXN1bHQKKwkgIDs7CisJKi4kb2JqZXh0KQorCSAgc3RhdGljZGVzdD0iJGRlc3RmaWxlIgorCSAgZGVzdGZpbGU9CisJICA7OworCSopCisJICBmdW5jX2ZhdGFsX2hlbHAgImNhbm5vdCBjb3B5IGEgbGlidG9vbCBvYmplY3QgdG8gXGAkZGVzdGZpbGUnIgorCSAgOzsKKwllc2FjCisKKwkjIEluc3RhbGwgdGhlIGxpYnRvb2wgb2JqZWN0IGlmIHJlcXVlc3RlZC4KKwl0ZXN0IC1uICIkZGVzdGZpbGUiICYmIFwKKwkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRmaWxlICRkZXN0ZmlsZSIgJ2V4aXQgJD8nCisKKwkjIEluc3RhbGwgdGhlIG9sZCBvYmplY3QgaWYgZW5hYmxlZC4KKwlpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisJICAjIERlZHVjZSB0aGUgbmFtZSBvZiB0aGUgb2xkLXN0eWxlIG9iamVjdCBmaWxlLgorCSAgZnVuY19sbzJvICIkZmlsZSIKKwkgIHN0YXRpY29iaj0kZnVuY19sbzJvX3Jlc3VsdAorCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgXCRzdGF0aWNvYmogXCRzdGF0aWNkZXN0IiAnZXhpdCAkPycKKwlmaQorCWV4aXQgJEVYSVRfU1VDQ0VTUworCTs7CisKKyAgICAgICopCisJIyBGaWd1cmUgb3V0IGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgaWYgaXQgd2Fzbid0IGFscmVhZHkgc3BlY2lmaWVkLgorCWlmIHRlc3QgLW4gIiRkZXN0bmFtZSI7IHRoZW4KKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdG5hbWUiCisJZWxzZQorCSAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisJICBkZXN0ZmlsZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0ZmlsZSIKKwlmaQorCisJIyBJZiB0aGUgZmlsZSBpcyBtaXNzaW5nLCBhbmQgdGhlcmUgaXMgYSAuZXhlIG9uIHRoZSBlbmQsIHN0cmlwIGl0CisJIyBiZWNhdXNlIGl0IGlzIG1vc3QgbGlrZWx5IGEgbGlidG9vbCBzY3JpcHQgd2UgYWN0dWFsbHkgd2FudCB0bworCSMgaW5zdGFsbAorCXN0cmlwcGVkX2V4dD0iIgorCWNhc2UgJGZpbGUgaW4KKwkgICouZXhlKQorCSAgICBpZiB0ZXN0ICEgLWYgIiRmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZpbGUiCisJICAgICAgZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICAgc3RyaXBwZWRfZXh0PSIuZXhlIgorCSAgICBmaQorCSAgICA7OworCWVzYWMKKworCSMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIHJlYWxseSBhIGxpYnRvb2wgcHJvZ3JhbS4KKwljYXNlICRob3N0IGluCisJKmN5Z3dpbiogfCAqbWluZ3cqKQorCSAgICBpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiRmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorCSAgICAgIHdyYXBwZXI9JGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgIGVsc2UKKwkgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgorCSAgICAgIHdyYXBwZXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICBmaQorCSAgICA7OworCSopCisJICAgIHdyYXBwZXI9JGZpbGUKKwkgICAgOzsKKwllc2FjCisJaWYgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgIiR3cmFwcGVyIjsgdGhlbgorCSAgbm90aW5zdF9kZXBsaWJzPQorCSAgcmVsaW5rX2NvbW1hbmQ9CisKKwkgIGZ1bmNfc291cmNlICIkd3JhcHBlciIKKworCSAgIyBDaGVjayB0aGUgdmFyaWFibGVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBzZXQuCisJICB0ZXN0IC16ICIkZ2VuZXJhdGVkX2J5X2xpYnRvb2xfdmVyc2lvbiIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgXGAkd3JhcHBlciciCisKKwkgIGZpbmFsaXplPXllcworCSAgZm9yIGxpYiBpbiAkbm90aW5zdF9kZXBsaWJzOyBkbworCSAgICAjIENoZWNrIHRvIHNlZSB0aGF0IGVhY2ggbGlicmFyeSBpcyBpbnN0YWxsZWQuCisJICAgIGxpYmRpcj0KKwkgICAgaWYgdGVzdCAtZiAiJGxpYiI7IHRoZW4KKwkgICAgICBmdW5jX3NvdXJjZSAiJGxpYiIKKwkgICAgZmkKKwkgICAgbGliZmlsZT0iJGxpYmRpci8iYCRFQ0hPICIkbGliIiB8ICRTRUQgJ3MlXi4qLyUlZydgICMjIyB0ZXN0c3VpdGU6IHNraXAgbmVzdGVkIHF1b3RpbmcgdGVzdAorCSAgICBpZiB0ZXN0IC1uICIkbGliZGlyIiAmJiB0ZXN0ICEgLWYgIiRsaWJmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfd2FybmluZyAiXGAkbGliJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluIFxgJGxpYmRpciciCisJICAgICAgZmluYWxpemU9bm8KKwkgICAgZmkKKwkgIGRvbmUKKworCSAgcmVsaW5rX2NvbW1hbmQ9CisJICBmdW5jX3NvdXJjZSAiJHdyYXBwZXIiCisKKwkgIG91dHB1dG5hbWU9CisJICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IG5vICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICBpZiB0ZXN0ICIkZmluYWxpemUiID0geWVzOyB0aGVuCisJICAgICAgICB0bXBkaXI9YGZ1bmNfbWt0ZW1wZGlyYAorCQlmdW5jX2Jhc2VuYW1lICIkZmlsZSRzdHJpcHBlZF9leHQiCisJCWZpbGU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgICAgIG91dHB1dG5hbWU9IiR0bXBkaXIvJGZpbGUiCisJICAgICAgICAjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJICAgICAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dG5hbWUiJyVnJ2AKKworCSAgICAgICAgJG9wdF9zaWxlbnQgfHwgeworCSAgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRyZWxpbmtfY29tbWFuZCIKKwkJICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisJICAgICAgICB9CisJICAgICAgICBpZiBldmFsICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuIDoKKwkgICAgICAgICAgZWxzZQorCQkgIGZ1bmNfZXJyb3IgImVycm9yOiByZWxpbmsgXGAkZmlsZScgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCIKKwkJICAkb3B0X2RyeV9ydW4gfHwgJHtSTX1yICIkdG1wZGlyIgorCQkgIGNvbnRpbnVlCisJICAgICAgICBmaQorCSAgICAgICAgZmlsZT0iJG91dHB1dG5hbWUiCisJICAgICAgZWxzZQorCSAgICAgICAgZnVuY193YXJuaW5nICJjYW5ub3QgcmVsaW5rIFxgJGZpbGUnIgorCSAgICAgIGZpCisJICAgIH0KKwkgIGVsc2UKKwkgICAgIyBJbnN0YWxsIHRoZSBiaW5hcnkgdGhhdCB3ZSBjb21waWxlZCBlYXJsaWVyLgorCSAgICBmaWxlPWAkRUNITyAiJGZpbGUkc3RyaXBwZWRfZXh0IiB8ICRTRUQgInMlXChbXi9dKlwpJCUkb2JqZGlyL1wxJSJgCisJICBmaQorCWZpCisKKwkjIHJlbW92ZSAuZXhlIHNpbmNlIGN5Z3dpbiAvdXNyL2Jpbi9pbnN0YWxsIHdpbGwgYXBwZW5kIGFub3RoZXIKKwkjIG9uZSBhbnl3YXkKKwljYXNlICRpbnN0YWxsX3Byb2csJGhvc3QgaW4KKwkqL3Vzci9iaW4vaW5zdGFsbCosKmN5Z3dpbiopCisJICBjYXNlICRmaWxlOiRkZXN0ZmlsZSBpbgorCSAgKi5leGU6Ki5leGUpCisJICAgICMgdGhpcyBpcyBvaworCSAgICA7OworCSAgKi5leGU6KikKKwkgICAgZGVzdGZpbGU9JGRlc3RmaWxlLmV4ZQorCSAgICA7OworCSAgKjoqLmV4ZSkKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZGVzdGZpbGUiCisJICAgIGRlc3RmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nXCRzdHJpcG1lIFwkZmlsZSBcJGRlc3RmaWxlIiAnZXhpdCAkPycKKwkkb3B0X2RyeV9ydW4gfHwgaWYgdGVzdCAtbiAiJG91dHB1dG5hbWUiOyB0aGVuCisJICAke1JNfXIgIiR0bXBkaXIiCisJZmkKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIGZvciBmaWxlIGluICRzdGF0aWNsaWJzOyBkbworICAgICAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisgICAgICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisKKyAgICAgICMgU2V0IHVwIHRoZSByYW5saWIgcGFyYW1ldGVycy4KKyAgICAgIG9sZGxpYj0iJGRlc3RkaXIvJG5hbWUiCisKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nIFwkZmlsZSBcJG9sZGxpYiIgJ2V4aXQgJD8nCisKKyAgICAgIGlmIHRlc3QgLW4gIiRzdHJpcG1lIiAmJiB0ZXN0IC1uICIkb2xkX3N0cmlwbGliIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICIkb2xkX3N0cmlwbGliICRvbGRsaWIiICdleGl0ICQ/JworICAgICAgZmkKKworICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgorICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgJ2V4aXQgJD8nCisgICAgZG9uZQorCisgICAgdGVzdCAtbiAiJGZ1dHVyZV9saWJkaXJzIiAmJiBcCisgICAgICBmdW5jX3dhcm5pbmcgInJlbWVtYmVyIHRvIHJ1biBcYCRwcm9nbmFtZSAtLWZpbmlzaCRmdXR1cmVfbGliZGlycyciCisKKyAgICBpZiB0ZXN0IC1uICIkY3VycmVudF9saWJkaXJzIjsgdGhlbgorICAgICAgIyBNYXliZSBqdXN0IGRvIGEgZHJ5IHJ1bi4KKyAgICAgICRvcHRfZHJ5X3J1biAmJiBjdXJyZW50X2xpYmRpcnM9IiAtbiRjdXJyZW50X2xpYmRpcnMiCisgICAgICBleGVjX2NtZD0nJFNIRUxMICRwcm9ncGF0aCAkcHJlc2VydmVfYXJncyAtLWZpbmlzaCRjdXJyZW50X2xpYmRpcnMnCisgICAgZWxzZQorICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgZmkKK30KKwordGVzdCAiJG1vZGUiID0gaW5zdGFsbCAmJiBmdW5jX21vZGVfaW5zdGFsbCAkezErIiRAIn0KKworCisjIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zIG91dHB1dG5hbWUgb3JpZ2luYXRvciBwaWNfcAorIyBFeHRyYWN0IHN5bWJvbHMgZnJvbSBkbHByZWZpbGVzIGFuZCBjcmVhdGUgJHtvdXRwdXRuYW1lfVMubyB3aXRoCisjIGEgZGxwcmVvcGVuIHN5bWJvbCB0YWJsZS4KK2Z1bmNfZ2VuZXJhdGVfZGxzeW1zICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIG15X291dHB1dG5hbWU9IiQxIgorICAgIG15X29yaWdpbmF0b3I9IiQyIgorICAgIG15X3BpY19wPSIkezMtbm99IgorICAgIG15X3ByZWZpeD1gJEVDSE8gIiRteV9vcmlnaW5hdG9yIiB8IHNlZCAncyVbXmEtekEtWjAtOV0lXyVnJ2AKKyAgICBteV9kbHN5bXM9CisKKyAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJE5NIiAmJiB0ZXN0IC1uICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorCW15X2Rsc3ltcz0iJHtteV9vdXRwdXRuYW1lfVMuYyIKKyAgICAgIGVsc2UKKwlmdW5jX2Vycm9yICJub3QgY29uZmlndXJlZCB0byBleHRyYWN0IGdsb2JhbCBzeW1ib2xzIGZyb20gZGxwcmVvcGVuZWQgZmlsZXMiCisgICAgICBmaQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC1uICIkbXlfZGxzeW1zIjsgdGhlbgorICAgICAgY2FzZSAkbXlfZGxzeW1zIGluCisgICAgICAiIikgOzsKKyAgICAgICouYykKKwkjIERpc2NvdmVyIHRoZSBubGlzdCBvZiBlYWNoIG9mIHRoZSBkbGZpbGVzLgorCW5saXN0PSIkb3V0cHV0X29iamRpci8ke215X291dHB1dG5hbWV9Lm5tIgorCisJZnVuY19zaG93X2V2YWwgIiRSTSAkbmxpc3QgJHtubGlzdH1TICR7bmxpc3R9VCIKKworCSMgUGFyc2UgdGhlIG5hbWUgbGlzdCBpbnRvIGEgc291cmNlIGZpbGUuCisJZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCisJJG9wdF9kcnlfcnVuIHx8ICRFQ0hPID4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisvKiAkbXlfZGxzeW1zIC0gc3ltYm9sIHJlc29sdXRpb24gdGFibGUgZm9yIFxgJG15X291dHB1dG5hbWUnIGRsc3ltIGVtdWxhdGlvbi4gKi8KKy8qIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gXCJDXCIgeworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPj0gNCkpIHx8IChfX0dOVUNfXyA+IDQpKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdzdHJpY3QtcHJvdG90eXBlc1wiCisjZW5kaWYKKworLyogRXh0ZXJuYWwgc3ltYm9sIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGNvbXBpbGVyLiAqL1wKKyIKKworCWlmIHRlc3QgIiRkbHNlbGYiID0geWVzOyB0aGVuCisJICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJG91dHB1dCciCisKKwkgICRvcHRfZHJ5X3J1biB8fCBlY2hvICc6IEBQUk9HUkFNQCAnID4gIiRubGlzdCIKKworCSAgIyBBZGQgb3VyIG93biBwcm9ncmFtIG9iamVjdHMgdG8gdGhlIHN5bWJvbCBsaXN0LgorCSAgcHJvZ2ZpbGVzPWAkRUNITyAiJG9ianMkb2xkX2RlcGxpYnMiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAorCSAgZm9yIHByb2dmaWxlIGluICRwcm9nZmlsZXM7IGRvCisJICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkcHJvZ2ZpbGUnIgorCSAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJE5NICRwcm9nZmlsZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisJICBkb25lCisKKwkgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgZXZhbCAnJEVHUkVQIC12ICIgKCRleGNsdWRlX2V4cHN5bXMpJCIgIiRubGlzdCIgPiAiJG5saXN0IlQnCisJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKwkgICAgfQorCSAgZmkKKworCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGV2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworCSAgICB9CisJICBmaQorCisJICAjIFByZXBhcmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scworCSAgaWYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICRSTSAkZXhwb3J0X3N5bWJvbHMKKwkgICAgICBldmFsICIke1NFRH0gLW4gLWUgJy9eOiBAUFJPR1JBTUAgJC9kJyAtZSAncy9eLiogXCguKlwpJC9cMS9wJyAiJzwgIiRubGlzdCIgPiAiJGV4cG9ydF9zeW1ib2xzIicKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisgICAgICAgICAgICAgICAgZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKyAgICAgICAgICAgICAgICBldmFsICdjYXQgIiRleHBvcnRfc3ltYm9scyIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisJICAgICAgICA7OworCSAgICAgIGVzYWMKKwkgICAgfQorCSAgZWxzZQorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGV2YWwgIiR7U0VEfSAtZSAncy9cKFtdLlsqXiRdXCkvXFxcXFwxL2cnIC1lICdzL14vIC8nIC1lICdzLyQvJC8nIicgPCAiJGV4cG9ydF9zeW1ib2xzIiA+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiJworCSAgICAgIGV2YWwgJyRHUkVQIC1mICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlQnCisJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKwkgICAgICAgICAgZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKwkgICAgICAgICAgZXZhbCAnY2F0ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworCSAgICAgICAgICA7OworCSAgICAgIGVzYWMKKwkgICAgfQorCSAgZmkKKwlmaQorCisJZm9yIGRscHJlZmlsZSBpbiAkZGxwcmVmaWxlczsgZG8KKwkgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkZGxwcmVmaWxlJyIKKwkgIGZ1bmNfYmFzZW5hbWUgIiRkbHByZWZpbGUiCisJICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJworCSAgICBldmFsICIkTk0gJGRscHJlZmlsZSAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisJICB9CisJZG9uZQorCisJJG9wdF9kcnlfcnVuIHx8IHsKKwkgICMgTWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgYW4gZW1wdHkgZmlsZS4KKwkgIHRlc3QgLWYgIiRubGlzdCIgfHwgOiA+ICIkbmxpc3QiCisKKwkgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAgICRFR1JFUCAtdiAiICgkZXhjbHVkZV9leHBzeW1zKSQiICIkbmxpc3QiID4gIiRubGlzdCJUCisJICAgICRNViAiJG5saXN0IlQgIiRubGlzdCIKKwkgIGZpCisKKwkgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCisJICBpZiAkR1JFUCAtdiAiXjogIiA8ICIkbmxpc3QiIHwKKwkgICAgICBpZiBzb3J0IC1rIDMgPC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJc29ydCAtayAzCisJICAgICAgZWxzZQorCQlzb3J0ICsyCisJICAgICAgZmkgfAorCSAgICAgIHVuaXEgPiAiJG5saXN0IlM7IHRoZW4KKwkgICAgOgorCSAgZWxzZQorCSAgICAkR1JFUCAtdiAiXjogIiA8ICIkbmxpc3QiID4gIiRubGlzdCJTCisJICBmaQorCisJICBpZiB0ZXN0IC1mICIkbmxpc3QiUzsgdGhlbgorCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCJTID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIicKKwkgIGVsc2UKKwkgICAgZWNobyAnLyogTk9ORSAqLycgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisJICBmaQorCisJICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorCisvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIHZvaWQgKmFkZHJlc3M7Cit9IGx0X2Rsc3ltbGlzdDsKKyIKKwkgIGNhc2UgJGhvc3QgaW4KKwkgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorCSAgICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZQorICAgcnVudGltZSByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24KKyAgIG9uIHBzZXVkby1yZWxvY3MuICAqLyIKKwkgICAgbHRfZGxzeW1fY29uc3Q9IDs7CisJICAqb3NmNSopCisJICAgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhICovIgorCSAgICBsdF9kbHN5bV9jb25zdD0gOzsKKwkgICopCisJICAgIGx0X2Rsc3ltX2NvbnN0PWNvbnN0IDs7CisJICBlc2FjCisKKwkgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCitleHRlcm4gJGx0X2Rsc3ltX2NvbnN0IGx0X2Rsc3ltbGlzdAorbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdOworJGx0X2Rsc3ltX2NvbnN0IGx0X2Rsc3ltbGlzdAorbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KK3tcCisgIHsgXCIkbXlfb3JpZ2luYXRvclwiLCAodm9pZCAqKSAwIH0sIgorCisJICBjYXNlICRuZWVkX2xpYl9wcmVmaXggaW4KKwkgIG5vKQorCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgPCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKKwkgICAgOzsKKwkgICopCisJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIDwgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisJICAgIDs7CisJICBlc2FjCisJICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorICB7MCwgKHZvaWQgKikgMH0KK307CisKKy8qIFRoaXMgd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBGcmVlQlNEIGxpbmtlciAqLworI2lmZGVmIEZSRUVCU0RfV09SS0FST1VORAorc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyAgcmV0dXJuIGx0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHM7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWZcCisiCisJfSAjICEkb3B0X2RyeV9ydW4KKworCXBpY19mbGFnX2Zvcl9zeW10YWJsZT0KKwljYXNlICIkY29tcGlsZV9jb21tYW5kICIgaW4KKwkqIiAtc3RhdGljICIqKSA7OworCSopCisJICBjYXNlICRob3N0IGluCisJICAjIGNvbXBpbGluZyB0aGUgc3ltYm9sIHRhYmxlIGZpbGUgd2l0aCBwaWNfZmxhZyB3b3JrcyBhcm91bmQKKwkgICMgYSBGcmVlQlNEIGJ1ZyB0aGF0IGNhdXNlcyBwcm9ncmFtcyB0byBjcmFzaCB3aGVuIC1sbSBpcworCSAgIyBsaW5rZWQgYmVmb3JlIGFueSBvdGhlciBQSUMgb2JqZWN0LiAgQnV0IHdlIG11c3Qgbm90IHVzZQorCSAgIyBwaWNfZmxhZyB3aGVuIGxpbmtpbmcgd2l0aCAtc3RhdGljLiAgVGhlIHByb2JsZW0gZXhpc3RzIGluCisJICAjIEZyZWVCU0QgMi4yLjYgYW5kIGlzIGZpeGVkIGluIEZyZWVCU0QgMy4xLgorCSAgKi0qLWZyZWVic2QyKnwqLSotZnJlZWJzZDMuMCp8Ki0qLWZyZWVic2RlbGYzLjAqKQorCSAgICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWcgLURGUkVFQlNEX1dPUktBUk9VTkQiIDs7CisJICAqLSotaHB1eCopCisJICAgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyIgIDs7CisJICAqKQorCSAgICBpZiB0ZXN0ICJYJG15X3BpY19wIiAhPSBYbm87IHRoZW4KKwkgICAgICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWciCisJICAgIGZpCisJICAgIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKwlzeW10YWJfY2ZsYWdzPQorCWZvciBhcmcgaW4gJExUQ0ZMQUdTOyBkbworCSAgY2FzZSAkYXJnIGluCisJICAtcGllIHwgLWZwaWUgfCAtZlBJRSkgOzsKKwkgICopIHN5bXRhYl9jZmxhZ3M9IiRzeW10YWJfY2ZsYWdzICRhcmciIDs7CisJICBlc2FjCisJZG9uZQorCisJIyBOb3cgY29tcGlsZSB0aGUgZHluYW1pYyBzeW1ib2wgZmlsZS4KKwlmdW5jX3Nob3dfZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRMVENDJHN5bXRhYl9jZmxhZ3MgLWMkbm9fYnVpbHRpbl9mbGFnJHBpY19mbGFnX2Zvcl9zeW10YWJsZSAiJG15X2Rsc3ltcyIpJyAnZXhpdCAkPycKKworCSMgQ2xlYW4gdXAgdGhlIGdlbmVyYXRlZCBmaWxlcy4KKwlmdW5jX3Nob3dfZXZhbCAnJFJNICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiJG5saXN0IiAiJHtubGlzdH1TIiAiJHtubGlzdH1UIicKKworCSMgVHJhbnNmb3JtIHRoZSBzeW1ib2wgZmlsZSBpbnRvIHRoZSBjb3JyZWN0IG5hbWUuCisJc3ltZmlsZW9iaj0iJG91dHB1dF9vYmpkaXIvJHtteV9vdXRwdXRuYW1lfVMuJG9iamV4dCIKKwljYXNlICRob3N0IGluCisJKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisJICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYiOyB0aGVuCisJICAgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUuZGVmICRzeW1maWxlb2JqJSJgCisJICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYgJHN5bWZpbGVvYmolImAKKwkgIGVsc2UKKwkgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAorCSAgICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgIGZpCisJICA7OworCSopCisJICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisJICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgIDs7CisJZXNhYworCTs7CisgICAgICAqKQorCWZ1bmNfZmF0YWxfZXJyb3IgInVua25vd24gc3VmZml4IGZvciBcYCRteV9kbHN5bXMnIgorCTs7CisgICAgICBlc2FjCisgICAgZWxzZQorICAgICAgIyBXZSBrZWVwIGdvaW5nIGp1c3QgaW4gY2FzZSB0aGUgdXNlciBkaWRuJ3QgcmVmZXIgdG8KKyAgICAgICMgbHRfcHJlbG9hZGVkX3N5bWJvbHMuICBUaGUgbGlua2VyIHdpbGwgZmFpbCBpZiBnbG9iYWxfc3ltYm9sX3BpcGUKKyAgICAgICMgcmVhbGx5IHdhcyByZXF1aXJlZC4KKworICAgICAgIyBOdWxsaWZ5IHRoZSBzeW1ib2wgZmlsZS4KKyAgICAgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAicyUgQFNZTUZJTEVAJSUiYAorICAgICAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTRUQgInMlIEBTWU1GSUxFQCUlImAKKyAgICBmaQorfQorCisjIGZ1bmNfd2luMzJfbGliaWQgYXJnCisjIHJldHVybiB0aGUgbGlicmFyeSB0eXBlIG9mIGZpbGUgJ2FyZycKKyMKKyMgTmVlZCBhIGxvdCBvZiBnb28gdG8gaGFuZGxlICpib3RoKiBETExzIGFuZCBpbXBvcnQgbGlicworIyBIYXMgdG8gYmUgYSBzaGVsbCBmdW5jdGlvbiBpbiBvcmRlciB0byAnZWF0JyB0aGUgYXJndW1lbnQKKyMgdGhhdCBpcyBzdXBwbGllZCB3aGVuICRmaWxlX21hZ2ljX2NvbW1hbmQgaXMgY2FsbGVkLgorIyBEZXNwaXRlIHRoZSBuYW1lLCBhbHNvIGRlYWwgd2l0aCA2NCBiaXQgYmluYXJpZXMuCitmdW5jX3dpbjMyX2xpYmlkICgpCit7CisgICRvcHRfZGVidWcKKyAgd2luMzJfbGliaWRfdHlwZT0idW5rbm93biIKKyAgd2luMzJfZmlsZXJlcz1gZmlsZSAtTCAkMSAyPi9kZXYvbnVsbGAKKyAgY2FzZSAkd2luMzJfZmlsZXJlcyBpbgorICAqYXJcIGFyY2hpdmVcIGltcG9ydFwgbGlicmFyeSopICMgZGVmaW5pdGVseSBpbXBvcnQKKyAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBpbXBvcnQiCisgICAgOzsKKyAgKmFyXCBhcmNoaXZlKikgIyBjb3VsZCBiZSBhbiBpbXBvcnQsIG9yIHN0YXRpYworICAgICMgS2VlcCB0aGUgZWdyZXAgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9ELgorICAgIGlmIGV2YWwgJE9CSkRVTVAgLWYgJDEgfCAkU0VEIC1lICcxMHEnIDI+L2Rldi9udWxsIHwKKyAgICAgICAkRUdSRVAgJ2ZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgd2luMzJfbm1yZXM9YGV2YWwgJE5NIC1mIHBvc2l4IC1BICQxIHwKKwkkU0VEIC1uIC1lICcKKwkgICAgMSwxMDB7CisJCS8gSSAveworCQkgICAgcywuKixpbXBvcnQsCisJCSAgICBwCisJCSAgICBxCisJCX0KKwkgICAgfSdgCisgICAgICBjYXNlICR3aW4zMl9ubXJlcyBpbgorICAgICAgaW1wb3J0KikgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIGltcG9ydCI7OworICAgICAgKikgICAgICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIHN0YXRpYyI7OworICAgICAgZXNhYworICAgIGZpCisgICAgOzsKKyAgKkRMTCopCisgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IERMTCIKKyAgICA7OworICAqZXhlY3V0YWJsZSopICMgYnV0IHNoZWxsIHNjcmlwdHMgYXJlICJleGVjdXRhYmxlIiB0b28uLi4KKyAgICBjYXNlICR3aW4zMl9maWxlcmVzIGluCisgICAgKk1TXCBXaW5kb3dzXCBQRVwgSW50ZWwqKQorICAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IERMTCIKKyAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgJEVDSE8gIiR3aW4zMl9saWJpZF90eXBlIgorfQorCisKKworIyBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSBkaXIgb2xkbGliCitmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBmX2V4X2FuX2FyX2Rpcj0iJDEiOyBzaGlmdAorICAgIGZfZXhfYW5fYXJfb2xkbGliPSIkMSIKKyAgICBpZiB0ZXN0ICIkbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uIiA9IHllczsgdGhlbgorICAgICAgbG9ja2ZpbGU9JGZfZXhfYW5fYXJfb2xkbGliLmxvY2sKKyAgICAgIHVudGlsICRvcHRfZHJ5X3J1biB8fCBsbiAiJHByb2dwYXRoIiAiJGxvY2tmaWxlIiAyPi9kZXYvbnVsbDsgZG8KKwlmdW5jX2VjaG8gIldhaXRpbmcgZm9yICRsb2NrZmlsZSB0byBiZSByZW1vdmVkIgorCXNsZWVwIDIKKyAgICAgIGRvbmUKKyAgICBmaQorICAgIGZ1bmNfc2hvd19ldmFsICIoY2QgXCRmX2V4X2FuX2FyX2RpciAmJiAkQVIgeCBcIlwkZl9leF9hbl9hcl9vbGRsaWJcIikiIFwKKwkJICAgJ3N0YXQ9JD87IHJtIC1mICIkbG9ja2ZpbGUiOyBleGl0ICRzdGF0JworICAgIGlmIHRlc3QgIiRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24iID0geWVzOyB0aGVuCisgICAgICAkb3B0X2RyeV9ydW4gfHwgcm0gLWYgIiRsb2NrZmlsZSIKKyAgICBmaQorICAgIGlmICgkQVIgdCAiJGZfZXhfYW5fYXJfb2xkbGliIiB8IHNvcnQgfCBzb3J0IC11YyA+L2Rldi9udWxsIDI+JjEpOyB0aGVuCisgICAgIDoKKyAgICBlbHNlCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJvYmplY3QgbmFtZSBjb25mbGljdHMgaW4gYXJjaGl2ZTogJGZfZXhfYW5fYXJfZGlyLyRmX2V4X2FuX2FyX29sZGxpYiIKKyAgICBmaQorfQorCisKKyMgZnVuY19leHRyYWN0X2FyY2hpdmVzIGdlbnRvcCBvbGRsaWIgLi4uCitmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgbXlfZ2VudG9wPSIkMSI7IHNoaWZ0CisgICAgbXlfb2xkbGlicz0kezErIiRAIn0KKyAgICBteV9vbGRvYmpzPSIiCisgICAgbXlfeGxpYj0iIgorICAgIG15X3hhYnM9IiIKKyAgICBteV94ZGlyPSIiCisKKyAgICBmb3IgbXlfeGxpYiBpbiAkbXlfb2xkbGliczsgZG8KKyAgICAgICMgRXh0cmFjdCB0aGUgb2JqZWN0cy4KKyAgICAgIGNhc2UgJG15X3hsaWIgaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIG15X3hhYnM9IiRteV94bGliIiA7OworCSopIG15X3hhYnM9YHB3ZGAiLyRteV94bGliIiA7OworICAgICAgZXNhYworICAgICAgZnVuY19iYXNlbmFtZSAiJG15X3hsaWIiCisgICAgICBteV94bGliPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgICBteV94bGliX3U9JG15X3hsaWIKKyAgICAgIHdoaWxlIDo7IGRvCisgICAgICAgIGNhc2UgIiAkZXh0cmFjdGVkX2FyY2hpdmVzICIgaW4KKwkqIiAkbXlfeGxpYl91ICIqKQorCSAgZnVuY19hcml0aCAkZXh0cmFjdGVkX3NlcmlhbCArIDEKKwkgIGV4dHJhY3RlZF9zZXJpYWw9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICBteV94bGliX3U9bHQkZXh0cmFjdGVkX3NlcmlhbC0kbXlfeGxpYiA7OworCSopIGJyZWFrIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgZXh0cmFjdGVkX2FyY2hpdmVzPSIkZXh0cmFjdGVkX2FyY2hpdmVzICRteV94bGliX3UiCisgICAgICBteV94ZGlyPSIkbXlfZ2VudG9wLyRteV94bGliX3UiCisKKyAgICAgIGZ1bmNfbWtkaXJfcCAiJG15X3hkaXIiCisKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICotZGFyd2luKikKKwlmdW5jX3ZlcmJvc2UgIkV4dHJhY3RpbmcgJG15X3hhYnMiCisJIyBEbyBub3QgYm90aGVyIGRvaW5nIGFueXRoaW5nIGlmIGp1c3QgYSBkcnkgcnVuCisJJG9wdF9kcnlfcnVuIHx8IHsKKwkgIGRhcndpbl9vcmlnX2Rpcj1gcHdkYAorCSAgY2QgJG15X3hkaXIgfHwgZXhpdCAkPworCSAgZGFyd2luX2FyY2hpdmU9JG15X3hhYnMKKwkgIGRhcndpbl9jdXJkaXI9YHB3ZGAKKwkgIGRhcndpbl9iYXNlX2FyY2hpdmU9YGJhc2VuYW1lICIkZGFyd2luX2FyY2hpdmUiYAorCSAgZGFyd2luX2FyY2hlcz1gJExJUE8gLWluZm8gIiRkYXJ3aW5fYXJjaGl2ZSIgMj4vZGV2L251bGwgfCAkR1JFUCBBcmNoaXRlY3R1cmVzIDI+L2Rldi9udWxsIHx8IHRydWVgCisJICBpZiB0ZXN0IC1uICIkZGFyd2luX2FyY2hlcyI7IHRoZW4KKwkgICAgZGFyd2luX2FyY2hlcz1gJEVDSE8gIiRkYXJ3aW5fYXJjaGVzIiB8ICRTRUQgLWUgJ3MvLiphcmU6Ly8nYAorCSAgICBkYXJ3aW5fYXJjaD0KKwkgICAgZnVuY192ZXJib3NlICIkZGFyd2luX2Jhc2VfYXJjaGl2ZSBoYXMgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAkZGFyd2luX2FyY2hlcyIKKwkgICAgZm9yIGRhcndpbl9hcmNoIGluICAkZGFyd2luX2FyY2hlcyA7IGRvCisJICAgICAgZnVuY19ta2Rpcl9wICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9IgorCSAgICAgICRMSVBPIC10aGluICRkYXJ3aW5fYXJjaCAtb3V0cHV0ICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9LyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iICIke2Rhcndpbl9hcmNoaXZlfSIKKwkgICAgICBjZCAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofSIKKwkgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiYHB3ZGAiICIke2Rhcndpbl9iYXNlX2FyY2hpdmV9IgorCSAgICAgIGNkICIkZGFyd2luX2N1cmRpciIKKwkgICAgICAkUk0gInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0vJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfSIKKwkgICAgZG9uZSAjICRkYXJ3aW5fYXJjaGVzCisgICAgICAgICAgICAjIyBPa2F5IG5vdyB3ZSd2ZSBhIGJ1bmNoIG9mIHRoaW4gb2JqZWN0cywgZ290dGEgZmF0dGVuIHRoZW0gdXAgOikKKwkgICAgZGFyd2luX2ZpbGVsaXN0PWBmaW5kIHVuZmF0LSQkIC10eXBlIGYgLW5hbWUgXCoubyAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50IHwgJFNFRCAtZSAiJGJhc2VuYW1lIiB8IHNvcnQgLXVgCisJICAgIGRhcndpbl9maWxlPQorCSAgICBkYXJ3aW5fZmlsZXM9CisJICAgIGZvciBkYXJ3aW5fZmlsZSBpbiAkZGFyd2luX2ZpbGVsaXN0OyBkbworCSAgICAgIGRhcndpbl9maWxlcz1gZmluZCB1bmZhdC0kJCAtbmFtZSAkZGFyd2luX2ZpbGUgLXByaW50IHwgc29ydCB8ICROTDJTUGAKKwkgICAgICAkTElQTyAtY3JlYXRlIC1vdXRwdXQgIiRkYXJ3aW5fZmlsZSIgJGRhcndpbl9maWxlcworCSAgICBkb25lICMgJGRhcndpbl9maWxlbGlzdAorCSAgICAkUk0gLXJmIHVuZmF0LSQkCisJICAgIGNkICIkZGFyd2luX29yaWdfZGlyIgorCSAgZWxzZQorCSAgICBjZCAkZGFyd2luX29yaWdfZGlyCisJICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICIkbXlfeGRpciIgIiRteV94YWJzIgorCSAgZmkgIyAkZGFyd2luX2FyY2hlcworCX0gIyAhJG9wdF9kcnlfcnVuCisJOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICIkbXlfeGRpciIgIiRteV94YWJzIgorCTs7CisgICAgICBlc2FjCisgICAgICBteV9vbGRvYmpzPSIkbXlfb2xkb2JqcyAiYGZpbmQgJG15X3hkaXIgLW5hbWUgXCouJG9iamV4dCAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50IHwgc29ydCB8ICROTDJTUGAKKyAgICBkb25lCisKKyAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0PSIkbXlfb2xkb2JqcyIKK30KKworCisjIGZ1bmNfZW1pdF93cmFwcGVyIFthcmc9bm9dCisjCisjIEVtaXQgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IG9uIHN0ZG91dC4KKyMgRG9uJ3QgZGlyZWN0bHkgb3BlbiBhIGZpbGUgYmVjYXVzZSB3ZSBtYXkgd2FudCB0bworIyBpbmNvcnBvcmF0ZSB0aGUgc2NyaXB0IGNvbnRlbnRzIHdpdGhpbiBhIGN5Z3dpbi9taW5ndworIyB3cmFwcGVyIGV4ZWN1dGFibGUuICBNdXN0IE9OTFkgYmUgY2FsbGVkIGZyb20gd2l0aGluCisjIGZ1bmNfbW9kZV9saW5rIGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBhIG51bWJlciBvZiB2YXJpYWJsZXMKKyMgc2V0IHRoZXJlaW4uCisjCisjIEFSRyBpcyB0aGUgdmFsdWUgdGhhdCB0aGUgV1JBUFBFUl9TQ1JJUFRfQkVMT05HU19JTl9PQkpESVIKKyMgdmFyaWFibGUgd2lsbCB0YWtlLiAgSWYgJ3llcycsIHRoZW4gdGhlIGVtaXR0ZWQgc2NyaXB0CisjIHdpbGwgYXNzdW1lIHRoYXQgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBpdCBpcyBzdG9yZWQgaXMKKyMgdGhlICRvYmpkaXIgZGlyZWN0b3J5LiAgVGhpcyBpcyBhIGN5Z3dpbi9taW5ndy1zcGVjaWZpYworIyBiZWhhdmlvci4KK2Z1bmNfZW1pdF93cmFwcGVyICgpCit7CisJZnVuY19lbWl0X3dyYXBwZXJfYXJnMT0kezEtbm99CisKKwkkRUNITyAiXAorIyEgJFNIRUxMCisKKyMgJG91dHB1dCAtIHRlbXBvcmFyeSB3cmFwcGVyIHNjcmlwdCBmb3IgJG9iamRpci8kb3V0cHV0bmFtZQorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjCisjIFRoZSAkb3V0cHV0IHByb2dyYW0gY2Fubm90IGJlIGRpcmVjdGx5IGV4ZWN1dGVkIHVudGlsIGFsbCB0aGUgbGlidG9vbAorIyBsaWJyYXJpZXMgdGhhdCBpdCBkZXBlbmRzIG9uIGFyZSBpbnN0YWxsZWQuCisjCisjIFRoaXMgd3JhcHBlciBzY3JpcHQgc2hvdWxkIG5ldmVyIGJlIG1vdmVkIG91dCBvZiB0aGUgYnVpbGQgZGlyZWN0b3J5LgorIyBJZiBpdCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKKyMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitzZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCisKKyMgQmUgQm91cm5lIGNvbXBhdGlibGUKK2lmIHRlc3QgLW4gXCJcJHtaU0hfVkVSU0lPTitzZXR9XCIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiBcJHsxK1wiXCRAXCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnXCR7MStcIlwkQFwifSc9J1wiXCRAXCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgXGAoc2V0IC1vKSAyPi9kZXYvbnVsbFxgIGluICpwb3NpeCopIHNldCAtbyBwb3NpeDs7IGVzYWMKK2ZpCitCSU5fU0g9eHBnNDsgZXhwb3J0IEJJTl9TSCAjIGZvciBUcnU2NAorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCityZWxpbmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwiCisKKyMgVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBkZXRlcm1pbmVzIG91ciBvcGVyYXRpb24gbW9kZS4KK2lmIHRlc3QgXCJcJGxpYnRvb2xfaW5zdGFsbF9tYWdpY1wiID0gXCIkbWFnaWNcIjsgdGhlbgorICAjIGluc3RhbGwgbW9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKKyAgZ2VuZXJhdGVkX2J5X2xpYnRvb2xfdmVyc2lvbj0nJG1hY3JvX3ZlcnNpb24nCisgIG5vdGluc3RfZGVwbGlicz0nJG5vdGluc3RfZGVwbGlicycKK2Vsc2UKKyAgIyBXaGVuIHdlIGFyZSBzb3VyY2VkIGluIGV4ZWN1dGUgbW9kZSwgXCRmaWxlIGFuZCBcJEVDSE8gYXJlIGFscmVhZHkgc2V0LgorICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCisgICAgZmlsZT1cIlwkMFwiIgorCisgICAgcUVDSE89YCRFQ0hPICIkRUNITyIgfCAkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAkRUNITyAiXAorCisjIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgbm8gcHJpbnQgYnVpbHRpbiBvciBwcmludGYuCitmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKK3sKKyAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKK1wkMQorX0xURUNIT19FT0YnCit9CisgICAgRUNITz1cIiRxRUNIT1wiCisgIGZpCisKKyMgVmVyeSBiYXNpYyBvcHRpb24gcGFyc2luZy4gVGhlc2Ugb3B0aW9ucyBhcmUgKGEpIHNwZWNpZmljIHRvCisjIHRoZSBsaWJ0b29sIHdyYXBwZXIsIChiKSBhcmUgaWRlbnRpY2FsIGJldHdlZW4gdGhlIHdyYXBwZXIKKyMgL3NjcmlwdC8gYW5kIHRoZSB3cmFwcGVyIC9leGVjdXRhYmxlLyB3aGljaCBpcyB1c2VkIG9ubHkgb24KKyMgd2luZG93cyBwbGF0Zm9ybXMsIGFuZCAoYykgYWxsIGJlZ2luIHdpdGggdGhlIHN0cmluZyAiLS1sdC0iCisjIChhcHBsaWNhdGlvbiBwcm9ncmFtcyBhcmUgdW5saWtlbHkgdG8gaGF2ZSBvcHRpb25zIHdoaWNoIG1hdGNoCisjIHRoaXMgcGF0dGVybikuCisjCisjIFRoZXJlIGFyZSBvbmx5IHR3byBzdXBwb3J0ZWQgb3B0aW9uczogLS1sdC1kZWJ1ZyBhbmQKKyMgLS1sdC1kdW1wLXNjcmlwdC4gVGhlcmUgaXMsIGRlbGliZXJhdGVseSwgbm8gLS1sdC1oZWxwLgorIworIyBUaGUgZmlyc3QgYXJndW1lbnQgdG8gdGhpcyBwYXJzaW5nIGZ1bmN0aW9uIHNob3VsZCBiZSB0aGUKKyMgc2NyaXB0J3MgJDAgdmFsdWUsIGZvbGxvd2VkIGJ5ICIkQCIuCitsdF9vcHRpb25fZGVidWc9CitmdW5jX3BhcnNlX2x0X29wdGlvbnMgKCkKK3sKKyAgbHRfc2NyaXB0X2FyZzA9XCQwCisgIHNoaWZ0CisgIGZvciBsdF9vcHQKKyAgZG8KKyAgICBjYXNlIFwiXCRsdF9vcHRcIiBpbgorICAgIC0tbHQtZGVidWcpIGx0X29wdGlvbl9kZWJ1Zz0xIDs7CisgICAgLS1sdC1kdW1wLXNjcmlwdCkKKyAgICAgICAgbHRfZHVtcF9EPVxgXCRFQ0hPIFwiWFwkbHRfc2NyaXB0X2FyZzBcIiB8ICRTRUQgLWUgJ3MvXlgvLycgLWUgJ3MlL1teL10qJCUlJ1xgCisgICAgICAgIHRlc3QgXCJYXCRsdF9kdW1wX0RcIiA9IFwiWFwkbHRfc2NyaXB0X2FyZzBcIiAmJiBsdF9kdW1wX0Q9LgorICAgICAgICBsdF9kdW1wX0Y9XGBcJEVDSE8gXCJYXCRsdF9zY3JpcHRfYXJnMFwiIHwgJFNFRCAtZSAncy9eWC8vJyAtZSAncyVeLiovJSUnXGAKKyAgICAgICAgY2F0IFwiXCRsdF9kdW1wX0QvXCRsdF9kdW1wX0ZcIgorICAgICAgICBleGl0IDAKKyAgICAgIDs7CisgICAgLS1sdC0qKQorICAgICAgICBcJEVDSE8gXCJVbnJlY29nbml6ZWQgLS1sdC0gb3B0aW9uOiAnXCRsdF9vcHQnXCIgMT4mMgorICAgICAgICBleGl0IDEKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgIyBQcmludCB0aGUgZGVidWcgYmFubmVyIGltbWVkaWF0ZWx5OgorICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgorICAgIGVjaG8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBsaWJ0b29sIHdyYXBwZXIgKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OXCIgMT4mMgorICBmaQorfQorCisjIFVzZWQgd2hlbiAtLWx0LWRlYnVnLiBQcmludHMgaXRzIGFyZ3VtZW50cyB0byBzdGRvdXQKKyMgKHJlZGlyZWN0aW9uIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyKQorZnVuY19sdF9kdW1wX2FyZ3MgKCkKK3sKKyAgbHRfZHVtcF9hcmdzX049MTsKKyAgZm9yIGx0X2FyZworICBkbworICAgIFwkRUNITyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IG5ld2FyZ3ZbXCRsdF9kdW1wX2FyZ3NfTl06IFwkbHRfYXJnXCIKKyAgICBsdF9kdW1wX2FyZ3NfTj1cYGV4cHIgXCRsdF9kdW1wX2FyZ3NfTiArIDFcYAorICBkb25lCit9CisKKyMgQ29yZSBmdW5jdGlvbiBmb3IgbGF1bmNoaW5nIHRoZSB0YXJnZXQgYXBwbGljYXRpb24KK2Z1bmNfZXhlY19wcm9ncmFtX2NvcmUgKCkKK3sKKyIKKyAgY2FzZSAkaG9zdCBpbgorICAjIEJhY2tzbGFzaGVzIHNlcGFyYXRlIGRpcmVjdG9yaWVzIG9uIHBsYWluIHdpbmRvd3MKKyAgKi0qLW1pbmd3IHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKyAgICAkRUNITyAiXAorICAgICAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KKyAgICAgICAgXCRFQ0hPIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbmV3YXJndlswXTogXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIDE+JjIKKyAgICAgICAgZnVuY19sdF9kdW1wX2FyZ3MgXCR7MStcIlwkQFwifSAxPiYyCisgICAgICBmaQorICAgICAgZXhlYyBcIlwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CisiCisgICAgOzsKKworICAqKQorICAgICRFQ0hPICJcCisgICAgICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgorICAgICAgICBcJEVDSE8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBuZXdhcmd2WzBdOiBcJHByb2dkaXIvXCRwcm9ncmFtXCIgMT4mMgorICAgICAgICBmdW5jX2x0X2R1bXBfYXJncyBcJHsxK1wiXCRAXCJ9IDE+JjIKKyAgICAgIGZpCisgICAgICBleGVjIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KKyIKKyAgICA7OworICBlc2FjCisgICRFQ0hPICJcCisgICAgICBcJEVDSE8gXCJcJDA6IGNhbm5vdCBleGVjIFwkcHJvZ3JhbSBcJCpcIiAxPiYyCisgICAgICBleGl0IDEKK30KKworIyBBIGZ1bmN0aW9uIHRvIGVuY2Fwc3VsYXRlIGxhdW5jaGluZyB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uCisjIFN0cmlwcyBvcHRpb25zIGluIHRoZSAtLWx0LSogbmFtZXNwYWNlIGZyb20gXCRAIGFuZAorIyBsYXVuY2hlcyB0YXJnZXQgYXBwbGljYXRpb24gd2l0aCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4KK2Z1bmNfZXhlY19wcm9ncmFtICgpCit7CisgIGZvciBsdF93cl9hcmcKKyAgZG8KKyAgICBjYXNlIFwkbHRfd3JfYXJnIGluCisgICAgLS1sdC0qKSA7OworICAgICopIHNldCB4IFwiXCRAXCIgXCJcJGx0X3dyX2FyZ1wiOyBzaGlmdDs7CisgICAgZXNhYworICAgIHNoaWZ0CisgIGRvbmUKKyAgZnVuY19leGVjX3Byb2dyYW1fY29yZSBcJHsxK1wiXCRAXCJ9Cit9CisKKyAgIyBQYXJzZSBvcHRpb25zCisgIGZ1bmNfcGFyc2VfbHRfb3B0aW9ucyBcIlwkMFwiIFwkezErXCJcJEBcIn0KKworICAjIEZpbmQgdGhlIGRpcmVjdG9yeSB0aGF0IHRoaXMgc2NyaXB0IGxpdmVzIGluLgorICB0aGlzZGlyPVxgXCRFQ0hPIFwiXCRmaWxlXCIgfCAkU0VEICdzJS9bXi9dKiQlJSdcYAorICB0ZXN0IFwieFwkdGhpc2RpclwiID0gXCJ4XCRmaWxlXCIgJiYgdGhpc2Rpcj0uCisKKyAgIyBGb2xsb3cgc3ltYm9saWMgbGlua3MgdW50aWwgd2UgZ2V0IHRvIHRoZSByZWFsIHRoaXNkaXIuCisgIGZpbGU9XGBscyAtbGQgXCJcJGZpbGVcIiB8ICRTRUQgLW4gJ3MvLiotPiAvL3AnXGAKKyAgd2hpbGUgdGVzdCAtbiBcIlwkZmlsZVwiOyBkbworICAgIGRlc3RkaXI9XGBcJEVDSE8gXCJcJGZpbGVcIiB8ICRTRUQgJ3MlL1teL10qXCQlJSdcYAorCisgICAgIyBJZiB0aGVyZSB3YXMgYSBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGNoYW5nZSB0aGlzZGlyLgorICAgIGlmIHRlc3QgXCJ4XCRkZXN0ZGlyXCIgIT0gXCJ4XCRmaWxlXCI7IHRoZW4KKyAgICAgIGNhc2UgXCJcJGRlc3RkaXJcIiBpbgorICAgICAgW1xcXFwvXSogfCBbQS1aYS16XTpbXFxcXC9dKikgdGhpc2Rpcj1cIlwkZGVzdGRpclwiIDs7CisgICAgICAqKSB0aGlzZGlyPVwiXCR0aGlzZGlyL1wkZGVzdGRpclwiIDs7CisgICAgICBlc2FjCisgICAgZmkKKworICAgIGZpbGU9XGBcJEVDSE8gXCJcJGZpbGVcIiB8ICRTRUQgJ3MlXi4qLyUlJ1xgCisgICAgZmlsZT1cYGxzIC1sZCBcIlwkdGhpc2Rpci9cJGZpbGVcIiB8ICRTRUQgLW4gJ3MvLiotPiAvL3AnXGAKKyAgZG9uZQorCisgICMgVXN1YWxseSAnbm8nLCBleGNlcHQgb24gY3lnd2luL21pbmd3IHdoZW4gZW1iZWRkZWQgaW50bworICAjIHRoZSBjd3JhcHBlci4KKyAgV1JBUFBFUl9TQ1JJUFRfQkVMT05HU19JTl9PQkpESVI9JGZ1bmNfZW1pdF93cmFwcGVyX2FyZzEKKyAgaWYgdGVzdCBcIlwkV1JBUFBFUl9TQ1JJUFRfQkVMT05HU19JTl9PQkpESVJcIiA9IFwieWVzXCI7IHRoZW4KKyAgICAjIHNwZWNpYWwgY2FzZSBmb3IgJy4nCisgICAgaWYgdGVzdCBcIlwkdGhpc2RpclwiID0gXCIuXCI7IHRoZW4KKyAgICAgIHRoaXNkaXI9XGBwd2RcYAorICAgIGZpCisgICAgIyByZW1vdmUgLmxpYnMgZnJvbSB0aGlzZGlyCisgICAgY2FzZSBcIlwkdGhpc2RpclwiIGluCisgICAgKltcXFxcL10kb2JqZGlyICkgdGhpc2Rpcj1cYFwkRUNITyBcIlwkdGhpc2RpclwiIHwgJFNFRCAncyVbXFxcXC9dW15cXFxcL10qJCUlJ1xgIDs7CisgICAgJG9iamRpciApICAgdGhpc2Rpcj0uIDs7CisgICAgZXNhYworICBmaQorCisgICMgVHJ5IHRvIGdldCB0aGUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUuCisgIGFic2Rpcj1cYGNkIFwiXCR0aGlzZGlyXCIgJiYgcHdkXGAKKyAgdGVzdCAtbiBcIlwkYWJzZGlyXCIgJiYgdGhpc2Rpcj1cIlwkYWJzZGlyXCIKKyIKKworCWlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzOyB0aGVuCisJICAkRUNITyAiXAorICBwcm9ncmFtPWx0LSckb3V0cHV0bmFtZSckZXhlZXh0CisgIHByb2dkaXI9XCJcJHRoaXNkaXIvJG9iamRpclwiCisKKyAgaWYgdGVzdCAhIC1mIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIHx8CisgICAgIHsgZmlsZT1cYGxzIC0xZHQgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCJcJHByb2dkaXIvLi4vXCRwcm9ncmFtXCIgMj4vZGV2L251bGwgfCAke1NFRH0gMXFcYDsgXFwKKyAgICAgICB0ZXN0IFwiWFwkZmlsZVwiICE9IFwiWFwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgfTsgdGhlbgorCisgICAgZmlsZT1cIlwkXCQtXCRwcm9ncmFtXCIKKworICAgIGlmIHRlc3QgISAtZCBcIlwkcHJvZ2RpclwiOyB0aGVuCisgICAgICAkTUtESVIgXCJcJHByb2dkaXJcIgorICAgIGVsc2UKKyAgICAgICRSTSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgorICAgIGZpIgorCisJICAkRUNITyAiXAorCisgICAgIyByZWxpbmsgZXhlY3V0YWJsZSBpZiBuZWNlc3NhcnkKKyAgICBpZiB0ZXN0IC1uIFwiXCRyZWxpbmtfY29tbWFuZFwiOyB0aGVuCisgICAgICBpZiByZWxpbmtfY29tbWFuZF9vdXRwdXQ9XGBldmFsIFwkcmVsaW5rX2NvbW1hbmQgMj4mMVxgOyB0aGVuIDoKKyAgICAgIGVsc2UKKwkkRUNITyBcIlwkcmVsaW5rX2NvbW1hbmRfb3V0cHV0XCIgPiYyCisJJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCisJZXhpdCAxCisgICAgICBmaQorICAgIGZpCisKKyAgICAkTVYgXCJcJHByb2dkaXIvXCRmaWxlXCIgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgMj4vZGV2L251bGwgfHwKKyAgICB7ICRSTSBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsKKyAgICAgICRNViBcIlwkcHJvZ2Rpci9cJGZpbGVcIiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgfQorICAgICRSTSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgorICBmaSIKKwllbHNlCisJICAkRUNITyAiXAorICBwcm9ncmFtPSckb3V0cHV0bmFtZScKKyAgcHJvZ2Rpcj1cIlwkdGhpc2Rpci8kb2JqZGlyXCIKKyIKKwlmaQorCisJJEVDSE8gIlwKKworICBpZiB0ZXN0IC1mIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB0aGVuIgorCisJIyBFeHBvcnQgb3VyIHNobGlicGF0aF92YXIgaWYgd2UgaGF2ZSBvbmUuCisJaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgorCSAgJEVDSE8gIlwKKyAgICAjIEFkZCBvdXIgb3duIGxpYnJhcnkgcGF0aCB0byAkc2hsaWJwYXRoX3ZhcgorICAgICRzaGxpYnBhdGhfdmFyPVwiJHRlbXBfcnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIKKworICAgICMgU29tZSBzeXN0ZW1zIGNhbm5vdCBjb3BlIHdpdGggY29sb24tdGVybWluYXRlZCAkc2hsaWJwYXRoX3ZhcgorICAgICMgVGhlIHNlY29uZCBjb2xvbiBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIEJlT1MgUjQgc2VkCisgICAgJHNobGlicGF0aF92YXI9XGBcJEVDSE8gXCJcJCRzaGxpYnBhdGhfdmFyXCIgfCAkU0VEICdzLzo6KlwkLy8nXGAKKworICAgIGV4cG9ydCAkc2hsaWJwYXRoX3ZhcgorIgorCWZpCisKKwkjIGZpeHVwIHRoZSBkbGwgc2VhcmNocGF0aCBpZiB3ZSBuZWVkIHRvLgorCWlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgorCSAgJEVDSE8gIlwKKyAgICAjIEFkZCB0aGUgZGxsIHNlYXJjaCBwYXRoIGNvbXBvbmVudHMgdG8gdGhlIGV4ZWN1dGFibGUgUEFUSAorICAgIFBBVEg9JGRsbHNlYXJjaHBhdGg6XCRQQVRICisiCisJZmkKKworCSRFQ0hPICJcCisgICAgaWYgdGVzdCBcIlwkbGlidG9vbF9leGVjdXRlX21hZ2ljXCIgIT0gXCIkbWFnaWNcIjsgdGhlbgorICAgICAgIyBSdW4gdGhlIGFjdHVhbCBwcm9ncmFtIHdpdGggb3VyIGFyZ3VtZW50cy4KKyAgICAgIGZ1bmNfZXhlY19wcm9ncmFtIFwkezErXCJcJEBcIn0KKyAgICBmaQorICBlbHNlCisgICAgIyBUaGUgcHJvZ3JhbSBkb2Vzbid0IGV4aXN0LgorICAgIFwkRUNITyBcIlwkMDogZXJyb3I6IFxcXGBcJHByb2dkaXIvXCRwcm9ncmFtJyBkb2VzIG5vdCBleGlzdFwiIDE+JjIKKyAgICBcJEVDSE8gXCJUaGlzIHNjcmlwdCBpcyBqdXN0IGEgd3JhcHBlciBmb3IgXCRwcm9ncmFtLlwiIDE+JjIKKyAgICBcJEVDSE8gXCJTZWUgdGhlICRQQUNLQUdFIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIgMT4mMgorICAgIGV4aXQgMQorICBmaQorZmlcCisiCit9CisKKworIyBmdW5jX3RvX2hvc3RfcGF0aCBhcmcKKyMKKyMgQ29udmVydCBwYXRocyB0byBob3N0IGZvcm1hdCB3aGVuIHVzZWQgd2l0aCBidWlsZCB0b29scy4KKyMgSW50ZW5kZWQgZm9yIHVzZSB3aXRoICJuYXRpdmUiIG1pbmd3ICh3aGVyZSBsaWJ0b29sIGl0c2VsZgorIyBpcyBydW5uaW5nIHVuZGVyIHRoZSBtc3lzIHNoZWxsKSwgb3IgaW4gdGhlIGZvbGxvd2luZyBjcm9zcy0KKyMgYnVpbGQgZW52aXJvbm1lbnRzOgorIyAgICAkYnVpbGQgICAgICAgICAgJGhvc3QKKyMgICAgbWluZ3cgKG1zeXMpICAgIG1pbmd3ICBbZS5nLiBuYXRpdmVdCisjICAgIGN5Z3dpbiAgICAgICAgICBtaW5ndworIyAgICAqbml4ICsgd2luZSAgICAgbWluZ3cKKyMgd2hlcmUgd2luZSBpcyBlcXVpcHBlZCB3aXRoIHRoZSBgd2luZXBhdGgnIGV4ZWN1dGFibGUuCisjIEluIHRoZSBuYXRpdmUgbWluZ3cgY2FzZSwgdGhlIChtc3lzKSBzaGVsbCBhdXRvbWF0aWNhbGx5CisjIGNvbnZlcnRzIHBhdGhzIGZvciBhbnkgbm9uLW1zeXMgYXBwbGljYXRpb25zIGl0IGxhdW5jaGVzLAorIyBidXQgdGhhdCBmYWNpbGl0eSBpc24ndCBhdmFpbGFibGUgZnJvbSBpbnNpZGUgdGhlIGN3cmFwcGVyLgorIyBTaW1pbGFyIGFjY29tbW9kYXRpb25zIGFyZSBuZWNlc3NhcnkgZm9yICRob3N0IG1pbmd3IGFuZAorIyAkYnVpbGQgY3lnd2luLiAgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIGRvZXMgbm8gaGFybSBmb3Igb3RoZXIKKyMgJGhvc3QvJGJ1aWxkIGNvbWJpbmF0aW9ucyBub3QgbGlzdGVkIGFib3ZlLgorIworIyBBUkcgaXMgdGhlIHBhdGggKG9uICRidWlsZCkgdGhhdCBzaG91bGQgYmUgY29udmVydGVkIHRvCisjIHRoZSBwcm9wZXIgcmVwcmVzZW50YXRpb24gZm9yICRob3N0LiBUaGUgcmVzdWx0IGlzIHN0b3JlZAorIyBpbiAkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorZnVuY190b19ob3N0X3BhdGggKCkKK3sKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKm1pbmd3KiApCisgICAgICAgIGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnk9J3N8XFxcXCp8XFx8ZztzfC98XFx8ZztzfFxcfFxcXFx8ZycKKyAgICAgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICAgICAqbWluZ3cqICkgIyBhY3R1YWxseSwgbXN5cworICAgICAgICAgICAgIyBhd2t3YXJkOiBjbWQgYXBwZW5kcyBzcGFjZXMgdG8gcmVzdWx0CisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YCggY21kIC8vYyBlY2hvICIkMSIgKSAyPi9kZXYvbnVsbCB8CisgICAgICAgICAgICAgICRTRUQgLWUgJ3MvWyBdKiQvLycgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKmN5Z3dpbiogKQorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBjeWdwYXRoIC13ICIkMSIgfAorCSAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKiApCisgICAgICAgICAgICAjIFVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXMgbm90IGV4aXQgd2l0aCBhIG5vbi16ZXJvCisgICAgICAgICAgICAjIGVycm9yIGNvZGUsIHNvIHdlIGFyZSBmb3JjZWQgdG8gY2hlY2sgdGhlIGNvbnRlbnRzIG9mCisgICAgICAgICAgICAjIHN0ZG91dC4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZSBjb21tYW5kIGlzIG5vdAorICAgICAgICAgICAgIyBmb3VuZCwgdGhlIHNoZWxsIHdpbGwgc2V0IGFuIGV4aXQgY29kZSBvZiAxMjcgYW5kIHByaW50CisgICAgICAgICAgICAjICphbiBlcnJvciBtZXNzYWdlKiB0byBzdGRvdXQuIFNvIHdlIG11c3QgY2hlY2sgZm9yIGJvdGgKKyAgICAgICAgICAgICMgZXJyb3IgY29kZSBvZiB6ZXJvIEFORCBub24tZW1wdHkgc3Rkb3V0LCB3aGljaCBleHBsYWlucworICAgICAgICAgICAgIyB0aGUgb2RkIGNvbnN0cnVjdGlvbjoKKyAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9YHdpbmVwYXRoIC13ICIkMSIgMj4vZGV2L251bGxgCisgICAgICAgICAgICBpZiB0ZXN0ICIkPyIgLWVxIDAgJiYgdGVzdCAtbiAiJHtmdW5jX3RvX2hvc3RfcGF0aF90bXAxfSI7IHRoZW4KKyAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWAkRUNITyAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiIHwKKyAgICAgICAgICAgICAgICAkU0VEIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICMgQWxsb3cgd2FybmluZyBiZWxvdy4KKyAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIgOyB0aGVuCisgICAgICAgICAgZnVuY19lcnJvciAiQ291bGQgbm90IGRldGVybWluZSBob3N0IHBhdGggY29ycmVzcG9uZGluZyB0byIKKyAgICAgICAgICBmdW5jX2Vycm9yICIgIFxgJDEnIgorICAgICAgICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgorICAgICAgICAgICMgRmFsbGJhY2s6CisgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGZpCit9CisjIGVuZDogZnVuY190b19ob3N0X3BhdGgKKworIyBmdW5jX3RvX2hvc3RfcGF0aGxpc3QgYXJnCisjCisjIENvbnZlcnQgcGF0aGxpc3RzIHRvIGhvc3QgZm9ybWF0IHdoZW4gdXNlZCB3aXRoIGJ1aWxkIHRvb2xzLgorIyBTZWUgZnVuY190b19ob3N0X3BhdGgoKSwgYWJvdmUuIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgdGhlCisjIGZvbGxvd2luZyAkYnVpbGQvJGhvc3QgY29tYmluYXRpb25zIChidXQgZG9lcyBubyBoYXJtIGZvcgorIyBjb21iaW5hdGlvbnMgbm90IGxpc3RlZCBoZXJlKToKKyMgICAgJGJ1aWxkICAgICAgICAgICRob3N0CisjICAgIG1pbmd3IChtc3lzKSAgICBtaW5ndyAgW2UuZy4gbmF0aXZlXQorIyAgICBjeWd3aW4gICAgICAgICAgbWluZ3cKKyMgICAgKm5peCArIHdpbmUgICAgIG1pbmd3CisjCisjIFBhdGggc2VwYXJhdG9ycyBhcmUgYWxzbyBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgZm9ybWF0IHRvCisjICRob3N0IGZvcm1hdC4gSWYgQVJHIGJlZ2lucyBvciBlbmRzIHdpdGggYSBwYXRoIHNlcGFyYXRvcgorIyBjaGFyYWN0ZXIsIGl0IGlzIHByZXNlcnZlZCAoYnV0IGNvbnZlcnRlZCB0byAkaG9zdCBmb3JtYXQpCisjIG9uIG91dHB1dC4KKyMKKyMgQVJHIGlzIGEgcGF0aGxpc3QgKG9uICRidWlsZCkgdGhhdCBzaG91bGQgYmUgY29udmVydGVkIHRvCisjIHRoZSBwcm9wZXIgcmVwcmVzZW50YXRpb24gb24gJGhvc3QuIFRoZSByZXN1bHQgaXMgc3RvcmVkCisjIGluICRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0LgorZnVuY190b19ob3N0X3BhdGhsaXN0ICgpCit7CisgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICBjYXNlICRob3N0IGluCisgICAgICAqbWluZ3cqICkKKyAgICAgICAgbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeT0nc3xcXFxcKnxcXHxnO3N8L3xcXHxnO3N8XFx8XFxcXHxnJworICAgICAgICAjIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGZyb20KKyAgICAgICAgIyBBUkcuIG1zeXMgYmVoYXZpb3IgaXMgaW5jb25zaXN0ZW50IGhlcmUsIGN5Z3BhdGggdHVybnMgdGhlbQorICAgICAgICAjIGludG8gJy47JyBhbmQgJzsuJywgYW5kIHdpbmVwYXRoIGlnbm9yZXMgdGhlbSBjb21wbGV0ZWx5LgorCWZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICAgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICAgICAqbWluZ3cqICkgIyBBY3R1YWxseSwgbXN5cy4KKyAgICAgICAgICAgICMgQXdrd2FyZDogY21kIGFwcGVuZHMgc3BhY2VzIHRvIHJlc3VsdC4KKyAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9YAorCSAgICAgICggY21kIC8vYyBlY2hvICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEiICkgMj4vZGV2L251bGwgfAorCSAgICAgICRTRUQgLWUgJ3MvWyBdKiQvLycgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKmN5Z3dpbiogKQorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD1gY3lncGF0aCAtdyAtcCAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAxIiB8CisgICAgICAgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKiApCisgICAgICAgICAgICAjIHVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXNuJ3QgY29udmVydCBwYXRobGlzdHMKKyAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9IiIKKyAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9vbGRJRlM9JElGUworICAgICAgICAgICAgSUZTPToKKyAgICAgICAgICAgIGZvciBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfZiBpbiAkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEgOyBkbworICAgICAgICAgICAgICBJRlM9JGZ1bmNfdG9faG9zdF9wYXRobGlzdF9vbGRJRlMKKyAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9mIiA7IHRoZW4KKyAgICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aCAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9mIgorICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiIDsgdGhlbgorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiIDsgdGhlbgorICAgICAgICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0ICI7JGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIElGUz0kZnVuY190b19ob3N0X3BhdGhsaXN0X29sZElGUworICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCI7IHRoZW4KKyAgICAgICAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBob3N0IHBhdGgocykgY29ycmVzcG9uZGluZyB0byIKKyAgICAgICAgICBmdW5jX2Vycm9yICIgIFxgJDEnIgorICAgICAgICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgorICAgICAgICAgICMgRmFsbGJhY2suIFRoaXMgbWF5IGJyZWFrIGlmICQxIGNvbnRhaW5zIERPUy1zdHlsZSBkcml2ZQorICAgICAgICAgICMgc3BlY2lmaWNhdGlvbnMuIFRoZSBmaXggaXMgbm90IHRvIGNvbXBsaWNhdGUgdGhlIGV4cHJlc3Npb24KKyAgICAgICAgICAjIGJlbG93LCBidXQgZm9yIHRoZSB1c2VyIHRvIHByb3ZpZGUgYSB3b3JraW5nIHdpbmUgaW5zdGFsbGF0aW9uCisgICAgICAgICAgIyB3aXRoIHdpbmVwYXRoIHNvIHRoYXQgcGF0aCB0cmFuc2xhdGlvbiBpbiB0aGUgY3Jvc3MtdG8tbWluZ3cKKyAgICAgICAgICAjIGNhc2Ugd29ya3MgcHJvcGVybHkuCisgICAgICAgICAgbHRfcmVwbGFjZV9wYXRoc2VwX25peF90b19kb3M9InN8Onw7fGciCisgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD1gZWNobyAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAxIiB8XAorICAgICAgICAgICAgJFNFRCAtZSAiJGx0X3JlcGxhY2VfcGF0aHNlcF9uaXhfdG9fZG9zImAKKyAgICAgICAgZmkKKyAgICAgICAgIyBOb3csIGFkZCB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3JzIGJhY2sKKyAgICAgICAgY2FzZSAiJDEiIGluCisgICAgICAgICAgOiogKSBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSI7JGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIGNhc2UgIiQxIiBpbgorICAgICAgICAgICo6ICkgZnVuY19hcHBlbmQgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCAiOyIKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGZpCit9CisjIGVuZDogZnVuY190b19ob3N0X3BhdGhsaXN0CisKKyMgZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYworIyBlbWl0IHRoZSBzb3VyY2UgY29kZSBmb3IgYSB3cmFwcGVyIGV4ZWN1dGFibGUgb24gc3Rkb3V0CisjIE11c3QgT05MWSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gZnVuY19tb2RlX2xpbmsgYmVjYXVzZQorIyBpdCBkZXBlbmRzIG9uIGEgbnVtYmVyIG9mIHZhcmlhYmxlIHNldCB0aGVyZWluLgorZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYyAoKQoreworCWNhdCA8PEVPRgorCisvKiAkY3dyYXBwZXJzb3VyY2UgLSB0ZW1wb3Jhcnkgd3JhcHBlciBleGVjdXRhYmxlIGZvciAkb2JqZGlyLyRvdXRwdXRuYW1lCisgICBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisKKyAgIFRoZSAkb3V0cHV0IHByb2dyYW0gY2Fubm90IGJlIGRpcmVjdGx5IGV4ZWN1dGVkIHVudGlsIGFsbCB0aGUgbGlidG9vbAorICAgbGlicmFyaWVzIHRoYXQgaXQgZGVwZW5kcyBvbiBhcmUgaW5zdGFsbGVkLgorCisgICBUaGlzIHdyYXBwZXIgZXhlY3V0YWJsZSBzaG91bGQgbmV2ZXIgYmUgbW92ZWQgb3V0IG9mIHRoZSBidWlsZCBkaXJlY3RvcnkuCisgICBJZiBpdCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCisqLworRU9GCisJICAgIGNhdCA8PCJFT0YiCisjaWZkZWYgX01TQ19WRVIKKyMgZGVmaW5lIF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSAxCisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lmZGVmIF9NU0NfVkVSCisjIGluY2x1ZGUgPGRpcmVjdC5oPgorIyBpbmNsdWRlIDxwcm9jZXNzLmg+CisjIGluY2x1ZGUgPGlvLmg+CisjZWxzZQorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisjIGlmZGVmIF9fQ1lHV0lOX18KKyMgIGluY2x1ZGUgPGlvLmg+CisjIGVuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisvKiBkZWNsYXJhdGlvbnMgb2Ygbm9uLUFOU0kgZnVuY3Rpb25zICovCisjaWYgZGVmaW5lZChfX01JTkdXMzJfXykKKyMgaWZkZWYgX19TVFJJQ1RfQU5TSV9fCitpbnQgX3B1dGVudiAoY29uc3QgY2hhciAqKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19DWUdXSU5fXykKKyMgaWZkZWYgX19TVFJJQ1RfQU5TSV9fCitjaGFyICpyZWFscGF0aCAoY29uc3QgY2hhciAqLCBjaGFyICopOworaW50IHB1dGVudiAoY2hhciAqKTsKK2ludCBzZXRlbnYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworIyBlbmRpZgorLyogI2VsaWYgZGVmaW5lZCAob3RoZXIgcGxhdGZvcm1zKSAuLi4gKi8KKyNlbmRpZgorCisvKiBwb3J0YWJpbGl0eSBkZWZpbmVzLCBleGNsdWRpbmcgcGF0aCBoYW5kbGluZyBtYWNyb3MgKi8KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorIyBkZWZpbmUgc2V0bW9kZSBfc2V0bW9kZQorIyBkZWZpbmUgc3RhdCAgICBfc3RhdAorIyBkZWZpbmUgY2htb2QgICBfY2htb2QKKyMgZGVmaW5lIGdldGN3ZCAgX2dldGN3ZAorIyBkZWZpbmUgcHV0ZW52ICBfcHV0ZW52CisjIGRlZmluZSBTX0lYVVNSIF9TX0lFWEVDCisjIGlmbmRlZiBfSU5UUFRSX1RfREVGSU5FRAorIyAgZGVmaW5lIF9JTlRQVFJfVF9ERUZJTkVECisjICBkZWZpbmUgaW50cHRyX3QgaW50CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkKF9fTUlOR1czMl9fKQorIyBkZWZpbmUgc2V0bW9kZSBfc2V0bW9kZQorIyBkZWZpbmUgc3RhdCAgICBfc3RhdAorIyBkZWZpbmUgY2htb2QgICBfY2htb2QKKyMgZGVmaW5lIGdldGN3ZCAgX2dldGN3ZAorIyBkZWZpbmUgcHV0ZW52ICBfcHV0ZW52CisjZWxpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisjIGRlZmluZSBIQVZFX1NFVEVOVgorIyBkZWZpbmUgRk9QRU5fV0IgIndiIgorLyogI2VsaWYgZGVmaW5lZCAob3RoZXIgcGxhdGZvcm1zKSAuLi4gKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChQQVRIX01BWCkKKyMgZGVmaW5lIExUX1BBVEhNQVggUEFUSF9NQVgKKyNlbGlmIGRlZmluZWQoTUFYUEFUSExFTikKKyMgZGVmaW5lIExUX1BBVEhNQVggTUFYUEFUSExFTgorI2Vsc2UKKyMgZGVmaW5lIExUX1BBVEhNQVggMTAyNAorI2VuZGlmCisKKyNpZm5kZWYgU19JWE9USAorIyBkZWZpbmUgU19JWE9USCAwCisjZW5kaWYKKyNpZm5kZWYgU19JWEdSUAorIyBkZWZpbmUgU19JWEdSUCAwCisjZW5kaWYKKworLyogcGF0aCBoYW5kbGluZyBwb3J0YWJpbGl0eSBtYWNyb3MgKi8KKyNpZm5kZWYgRElSX1NFUEFSQVRPUgorIyBkZWZpbmUgRElSX1NFUEFSQVRPUiAnLycKKyMgZGVmaW5lIFBBVEhfU0VQQVJBVE9SICc6JworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfV0lOMzIpIHx8IGRlZmluZWQgKF9fTVNET1NfXykgfHwgZGVmaW5lZCAoX19ESkdQUF9fKSB8fCBcCisgIGRlZmluZWQgKF9fT1MyX18pCisjIGRlZmluZSBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQorIyBkZWZpbmUgRk9QRU5fV0IgIndiIgorIyBpZm5kZWYgRElSX1NFUEFSQVRPUl8yCisjICBkZWZpbmUgRElSX1NFUEFSQVRPUl8yICdcXCcKKyMgZW5kaWYKKyMgaWZuZGVmIFBBVEhfU0VQQVJBVE9SXzIKKyMgIGRlZmluZSBQQVRIX1NFUEFSQVRPUl8yICc7JworIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgRElSX1NFUEFSQVRPUl8yCisjIGRlZmluZSBJU19ESVJfU0VQQVJBVE9SKGNoKSAoKGNoKSA9PSBESVJfU0VQQVJBVE9SKQorI2Vsc2UgLyogRElSX1NFUEFSQVRPUl8yICovCisjIGRlZmluZSBJU19ESVJfU0VQQVJBVE9SKGNoKSBcCisJKCgoY2gpID09IERJUl9TRVBBUkFUT1IpIHx8ICgoY2gpID09IERJUl9TRVBBUkFUT1JfMikpCisjZW5kaWYgLyogRElSX1NFUEFSQVRPUl8yICovCisKKyNpZm5kZWYgUEFUSF9TRVBBUkFUT1JfMgorIyBkZWZpbmUgSVNfUEFUSF9TRVBBUkFUT1IoY2gpICgoY2gpID09IFBBVEhfU0VQQVJBVE9SKQorI2Vsc2UgLyogUEFUSF9TRVBBUkFUT1JfMiAqLworIyBkZWZpbmUgSVNfUEFUSF9TRVBBUkFUT1IoY2gpICgoY2gpID09IFBBVEhfU0VQQVJBVE9SXzIpCisjZW5kaWYgLyogUEFUSF9TRVBBUkFUT1JfMiAqLworCisjaWZuZGVmIEZPUEVOX1dCCisjIGRlZmluZSBGT1BFTl9XQiAidyIKKyNlbmRpZgorI2lmbmRlZiBfT19CSU5BUlkKKyMgZGVmaW5lIF9PX0JJTkFSWSAwCisjZW5kaWYKKworI2RlZmluZSBYTUFMTE9DKHR5cGUsIG51bSkgICAgICAoKHR5cGUgKikgeG1hbGxvYyAoKG51bSkgKiBzaXplb2YodHlwZSkpKQorI2RlZmluZSBYRlJFRShzdGFsZSkgZG8geyBcCisgIGlmIChzdGFsZSkgeyBmcmVlICgodm9pZCAqKSBzdGFsZSk7IHN0YWxlID0gMDsgfSBcCit9IHdoaWxlICgwKQorCisjaWYgZGVmaW5lZChMVF9ERUJVR1dSQVBQRVIpCitzdGF0aWMgaW50IGx0X2RlYnVnID0gMTsKKyNlbHNlCitzdGF0aWMgaW50IGx0X2RlYnVnID0gMDsKKyNlbmRpZgorCitjb25zdCBjaGFyICpwcm9ncmFtX25hbWUgPSAibGlidG9vbC13cmFwcGVyIjsgLyogaW4gY2FzZSB4c3RyZHVwIGZhaWxzICovCisKK3ZvaWQgKnhtYWxsb2MgKHNpemVfdCBudW0pOworY2hhciAqeHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKTsKK2NvbnN0IGNoYXIgKmJhc2VfbmFtZSAoY29uc3QgY2hhciAqbmFtZSk7CitjaGFyICpmaW5kX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKndyYXBwZXIpOworY2hhciAqY2hhc2Vfc3ltbGlua3MgKGNvbnN0IGNoYXIgKnBhdGhzcGVjKTsKK2ludCBtYWtlX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpOworaW50IGNoZWNrX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpOworY2hhciAqc3RyZW5kemFwIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCk7Cit2b2lkIGx0X2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pOwordm9pZCBsdF9mYXRhbCAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLik7CitzdGF0aWMgY29uc3QgY2hhciAqbm9ubnVsbCAoY29uc3QgY2hhciAqcyk7CitzdGF0aWMgY29uc3QgY2hhciAqbm9uZW1wdHkgKGNvbnN0IGNoYXIgKnMpOwordm9pZCBsdF9zZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK2NoYXIgKmx0X2V4dGVuZF9zdHIgKGNvbnN0IGNoYXIgKm9yaWdfdmFsdWUsIGNvbnN0IGNoYXIgKmFkZCwgaW50IHRvX2VuZCk7Cit2b2lkIGx0X3VwZGF0ZV9leGVfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOwordm9pZCBsdF91cGRhdGVfbGliX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK2NoYXIgKipwcmVwYXJlX3NwYXduIChjaGFyICoqYXJndik7Cit2b2lkIGx0X2R1bXBfc2NyaXB0IChGSUxFICpmKTsKK0VPRgorCisJICAgIGNhdCA8PEVPRgorY29uc3QgY2hhciAqIE1BR0lDX0VYRSA9ICIkbWFnaWNfZXhlIjsKK2NvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQVJOQU1FID0gIiRzaGxpYnBhdGhfdmFyIjsKK0VPRgorCisJICAgIGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KKyAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0ICIkdGVtcF9ycGF0aCIKKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQUxVRSAgID0gIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0IjsKK0VPRgorCSAgICBlbHNlCisJICAgICAgY2F0IDw8IkVPRiIKK2NvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQUxVRSAgID0gIiI7CitFT0YKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KKyAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0ICIkZGxsc2VhcmNocGF0aDoiCisJICAgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogRVhFX1BBVEhfVkFSTkFNRSA9ICJQQVRIIjsKK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQUxVRSAgID0gIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0IjsKK0VPRgorCSAgICBlbHNlCisJICAgICAgY2F0IDw8IkVPRiIKK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQVJOQU1FID0gIiI7Citjb25zdCBjaGFyICogRVhFX1BBVEhfVkFMVUUgICA9ICIiOworRU9GCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBUQVJHRVRfUFJPR1JBTV9OQU1FID0gImx0LSRvdXRwdXRuYW1lIjsgLyogaG9wZWZ1bGx5LCBubyAuZXhlICovCitFT0YKKwkgICAgZWxzZQorCSAgICAgIGNhdCA8PEVPRgorY29uc3QgY2hhciAqIFRBUkdFVF9QUk9HUkFNX05BTUUgPSAiJG91dHB1dG5hbWUiOyAvKiBob3BlZnVsbHksIG5vIC5leGUgKi8KK0VPRgorCSAgICBmaQorCisKKwkgICAgY2F0IDw8IkVPRiIKKworI2RlZmluZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAgICAgICAgICItLWx0LSIKKworc3RhdGljIGNvbnN0IGNoYXIgKmx0d3JhcHBlcl9vcHRpb25fcHJlZml4ID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVg7CitzdGF0aWMgY29uc3QgY2hhciAqZHVtcHNjcmlwdF9vcHQgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAiZHVtcC1zY3JpcHQiOworc3RhdGljIGNvbnN0IGNoYXIgKmRlYnVnX29wdCAgICAgICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVggImRlYnVnIjsKKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICBjaGFyICoqbmV3YXJnejsKKyAgaW50ICBuZXdhcmdjOworICBjaGFyICp0bXBfcGF0aHNwZWM7CisgIGNoYXIgKmFjdHVhbF9jd3JhcHBlcl9wYXRoOworICBjaGFyICphY3R1YWxfY3dyYXBwZXJfbmFtZTsKKyAgY2hhciAqdGFyZ2V0X25hbWU7CisgIGNoYXIgKmx0X2FyZ3ZfemVybzsKKyAgaW50cHRyX3QgcnZhbCA9IDEyNzsKKworICBpbnQgaTsKKworICBwcm9ncmFtX25hbWUgPSAoY2hhciAqKSB4c3RyZHVwIChiYXNlX25hbWUgKGFyZ3ZbMF0pKTsKKyAgbmV3YXJneiA9IFhNQUxMT0MgKGNoYXIgKiwgYXJnYyArIDEpOworCisgIC8qIHZlcnkgc2ltcGxlIGFyZyBwYXJzaW5nOyBkb24ndCB3YW50IHRvIHJlbHkgb24gZ2V0b3B0CisgICAqIGFsc28sIGNvcHkgYWxsIG5vbiBjd3JhcHBlciBvcHRpb25zIHRvIG5ld2FyZ3osIGV4Y2VwdAorICAgKiBhcmd6WzBdLCB3aGljaCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5CisgICAqLworICBuZXdhcmdjPTA7CisgIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisgICAgeworICAgICAgaWYgKHN0cmNtcCAoYXJndltpXSwgZHVtcHNjcmlwdF9vcHQpID09IDApCisJeworRU9GCisJICAgIGNhc2UgIiRob3N0IiBpbgorCSAgICAgICptaW5ndyogfCAqY3lnd2luKiApCisJCSMgbWFrZSBzdGRvdXQgdXNlICJ1bml4IiBsaW5lIGVuZGluZ3MKKwkJZWNobyAiICAgICAgICAgIHNldG1vZGUoMSxfT19CSU5BUlkpOyIKKwkJOzsKKwkgICAgICBlc2FjCisKKwkgICAgY2F0IDw8IkVPRiIKKwkgIGx0X2R1bXBfc2NyaXB0IChzdGRvdXQpOworCSAgcmV0dXJuIDA7CisJfQorICAgICAgaWYgKHN0cmNtcCAoYXJndltpXSwgZGVidWdfb3B0KSA9PSAwKQorCXsKKyAgICAgICAgICBsdF9kZWJ1ZyA9IDE7CisgICAgICAgICAgY29udGludWU7CisJfQorICAgICAgaWYgKHN0cmNtcCAoYXJndltpXSwgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBob3dldmVyLCBpZiB0aGVyZSBpcyBhbiBvcHRpb24gaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCisgICAgICAgICAgICAgbmFtZXNwYWNlLCBidXQgaXQgaXMgbm90IG9uZSBvZiB0aGUgb25lcyB3ZSBrbm93IGFib3V0IGFuZAorICAgICAgICAgICAgIGhhdmUgYWxyZWFkeSBkZWFsdCB3aXRoLCBhYm92ZSAoaW5sdWRpbmcgZHVtcC1zY3JpcHQpLCB0aGVuCisgICAgICAgICAgICAgcmVwb3J0IGFuIGVycm9yLiBPdGhlcndpc2UsIHRhcmdldHMgbWlnaHQgYmVnaW4gdG8gYmVsaWV2ZQorICAgICAgICAgICAgIHRoZXkgYXJlIGFsbG93ZWQgdG8gdXNlIG9wdGlvbnMgaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCisgICAgICAgICAgICAgbmFtZXNwYWNlLiBUaGUgZmlyc3QgdGltZSBhbnkgdXNlciBjb21wbGFpbnMgYWJvdXQgdGhpcywgd2UnbGwKKyAgICAgICAgICAgICBuZWVkIHRvIG1ha2UgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggYSBjb25maWd1cmUtdGltZSBvcHRpb24KKyAgICAgICAgICAgICBvciBhIGNvbmZpZ3VyZS5hYy1zZXR0YWJsZSB2YWx1ZS4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICAgInVucmVjb2duaXplZCAlcyBvcHRpb246ICclcyciLAorICAgICAgICAgICAgICAgICAgICBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCwgYXJndltpXSk7CisgICAgICAgIH0KKyAgICAgIC8qIG90aGVyd2lzZSAuLi4gKi8KKyAgICAgIG5ld2FyZ3pbKytuZXdhcmdjXSA9IHhzdHJkdXAgKGFyZ3ZbaV0pOworICAgIH0KKyAgbmV3YXJnelsrK25ld2FyZ2NdID0gTlVMTDsKKworRU9GCisJICAgIGNhdCA8PEVPRgorICAvKiBUaGUgR05VIGJhbm5lciBtdXN0IGJlIHRoZSBmaXJzdCBub24tZXJyb3IgZGVidWcgbWVzc2FnZSAqLworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAibGlidG9vbCB3cmFwcGVyIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTlxuIik7CitFT0YKKwkgICAgY2F0IDw8IkVPRiIKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBhcmd2WzBdOiAlc1xuIiwgYXJndlswXSk7CisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgcHJvZ3JhbV9uYW1lOiAlc1xuIiwgcHJvZ3JhbV9uYW1lKTsKKworICB0bXBfcGF0aHNwZWMgPSBmaW5kX2V4ZWN1dGFibGUgKGFyZ3ZbMF0pOworICBpZiAodG1wX3BhdGhzcGVjID09IE5VTEwpCisgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgImNvdWxkbid0IGZpbmQgJXMiLCBhcmd2WzBdKTsKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKyAgICAgICAgICAgICAgICAgICIobWFpbikgZm91bmQgZXhlIChiZWZvcmUgc3ltbGluayBjaGFzZSkgYXQ6ICVzXG4iLAorCQkgIHRtcF9wYXRoc3BlYyk7CisKKyAgYWN0dWFsX2N3cmFwcGVyX3BhdGggPSBjaGFzZV9zeW1saW5rcyAodG1wX3BhdGhzcGVjKTsKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKyAgICAgICAgICAgICAgICAgICIobWFpbikgZm91bmQgZXhlIChhZnRlciBzeW1saW5rIGNoYXNlKSBhdDogJXNcbiIsCisJCSAgYWN0dWFsX2N3cmFwcGVyX3BhdGgpOworICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKKworICBhY3R1YWxfY3dyYXBwZXJfbmFtZSA9IHhzdHJkdXAgKGJhc2VfbmFtZSAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpKTsKKyAgc3RyZW5kemFwIChhY3R1YWxfY3dyYXBwZXJfcGF0aCwgYWN0dWFsX2N3cmFwcGVyX25hbWUpOworCisgIC8qIHdyYXBwZXIgbmFtZSB0cmFuc2Zvcm1zICovCisgIHN0cmVuZHphcCAoYWN0dWFsX2N3cmFwcGVyX25hbWUsICIuZXhlIik7CisgIHRtcF9wYXRoc3BlYyA9IGx0X2V4dGVuZF9zdHIgKGFjdHVhbF9jd3JhcHBlcl9uYW1lLCAiLmV4ZSIsIDEpOworICBYRlJFRSAoYWN0dWFsX2N3cmFwcGVyX25hbWUpOworICBhY3R1YWxfY3dyYXBwZXJfbmFtZSA9IHRtcF9wYXRoc3BlYzsKKyAgdG1wX3BhdGhzcGVjID0gMDsKKworICAvKiB0YXJnZXRfbmFtZSB0cmFuc2Zvcm1zIC0tIHVzZSBhY3R1YWwgdGFyZ2V0IHByb2dyYW0gbmFtZTsgbWlnaHQgaGF2ZSBsdC0gcHJlZml4ICovCisgIHRhcmdldF9uYW1lID0geHN0cmR1cCAoYmFzZV9uYW1lIChUQVJHRVRfUFJPR1JBTV9OQU1FKSk7CisgIHN0cmVuZHphcCAodGFyZ2V0X25hbWUsICIuZXhlIik7CisgIHRtcF9wYXRoc3BlYyA9IGx0X2V4dGVuZF9zdHIgKHRhcmdldF9uYW1lLCAiLmV4ZSIsIDEpOworICBYRlJFRSAodGFyZ2V0X25hbWUpOworICB0YXJnZXRfbmFtZSA9IHRtcF9wYXRoc3BlYzsKKyAgdG1wX3BhdGhzcGVjID0gMDsKKworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICIobWFpbikgbGlidG9vbCB0YXJnZXQgbmFtZTogJXNcbiIsCisJCSAgdGFyZ2V0X25hbWUpOworRU9GCisKKwkgICAgY2F0IDw8RU9GCisgIG5ld2FyZ3pbMF0gPQorICAgIFhNQUxMT0MgKGNoYXIsIChzdHJsZW4gKGFjdHVhbF9jd3JhcHBlcl9wYXRoKSArCisJCSAgICBzdHJsZW4gKCIkb2JqZGlyIikgKyAxICsgc3RybGVuIChhY3R1YWxfY3dyYXBwZXJfbmFtZSkgKyAxKSk7CisgIHN0cmNweSAobmV3YXJnelswXSwgYWN0dWFsX2N3cmFwcGVyX3BhdGgpOworICBzdHJjYXQgKG5ld2FyZ3pbMF0sICIkb2JqZGlyIik7CisgIHN0cmNhdCAobmV3YXJnelswXSwgIi8iKTsKK0VPRgorCisJICAgIGNhdCA8PCJFT0YiCisgIC8qIHN0b3AgaGVyZSwgYW5kIGNvcHkgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGlzIHR3aWNlICovCisgIHRtcF9wYXRoc3BlYyA9IHhzdHJkdXAgKG5ld2FyZ3pbMF0pOworCisgIC8qIGRvIE5PVCB3YW50IHRoZSBsdC0gcHJlZml4IGhlcmUsIHNvIHVzZSBhY3R1YWxfY3dyYXBwZXJfbmFtZSAqLworICBzdHJjYXQgKG5ld2FyZ3pbMF0sIGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKworICAvKiBETyB3YW50IHRoZSBsdC0gcHJlZml4IGhlcmUgaWYgaXQgZXhpc3RzLCBzbyB1c2UgdGFyZ2V0X25hbWUgKi8KKyAgbHRfYXJndl96ZXJvID0gbHRfZXh0ZW5kX3N0ciAodG1wX3BhdGhzcGVjLCB0YXJnZXRfbmFtZSwgMSk7CisgIFhGUkVFICh0bXBfcGF0aHNwZWMpOworICB0bXBfcGF0aHNwZWMgPSBOVUxMOworRU9GCisKKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIG1pbmd3KikKKwkgICAgY2F0IDw8IkVPRiIKKyAgeworICAgIGNoYXIqIHA7CisgICAgd2hpbGUgKChwID0gc3RyY2hyIChuZXdhcmd6WzBdLCAnXFwnKSkgIT0gTlVMTCkKKyAgICAgIHsKKwkqcCA9ICcvJzsKKyAgICAgIH0KKyAgICB3aGlsZSAoKHAgPSBzdHJjaHIgKGx0X2FyZ3ZfemVybywgJ1xcJykpICE9IE5VTEwpCisgICAgICB7CisJKnAgPSAnLyc7CisgICAgICB9CisgIH0KK0VPRgorCSAgICA7OworCSAgICBlc2FjCisKKwkgICAgY2F0IDw8IkVPRiIKKyAgWEZSRUUgKHRhcmdldF9uYW1lKTsKKyAgWEZSRUUgKGFjdHVhbF9jd3JhcHBlcl9wYXRoKTsKKyAgWEZSRUUgKGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKworICBsdF9zZXRlbnYgKCJCSU5fU0giLCAieHBnNCIpOyAvKiBmb3IgVHJ1NjQgKi8KKyAgbHRfc2V0ZW52ICgiRFVBTENBU0UiLCAiMSIpOyAgLyogZm9yIE1TSyBzaCAqLworICBsdF91cGRhdGVfbGliX3BhdGggKExJQl9QQVRIX1ZBUk5BTUUsIExJQl9QQVRIX1ZBTFVFKTsKKyAgbHRfdXBkYXRlX2V4ZV9wYXRoIChFWEVfUEFUSF9WQVJOQU1FLCBFWEVfUEFUSF9WQUxVRSk7CisKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBsdF9hcmd2X3plcm86ICVzXG4iLAorCQkgIG5vbm51bGwgKGx0X2FyZ3ZfemVybykpOworICBmb3IgKGkgPSAwOyBpIDwgbmV3YXJnYzsgaSsrKQorICAgIHsKKyAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgbmV3YXJnelslZF06ICVzXG4iLAorCQkgICAgICBpLCBub25udWxsIChuZXdhcmd6W2ldKSk7CisgICAgfQorCitFT0YKKworCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgbWluZ3cqKQorCQljYXQgPDwiRU9GIgorICAvKiBleGVjdiBkb2Vzbid0IGFjdHVhbGx5IHdvcmsgb24gbWluZ3cgYXMgZXhwZWN0ZWQgb24gdW5peCAqLworICBuZXdhcmd6ID0gcHJlcGFyZV9zcGF3biAobmV3YXJneik7CisgIHJ2YWwgPSBfc3Bhd252IChfUF9XQUlULCBsdF9hcmd2X3plcm8sIChjb25zdCBjaGFyICogY29uc3QgKikgbmV3YXJneik7CisgIGlmIChydmFsID09IC0xKQorICAgIHsKKyAgICAgIC8qIGZhaWxlZCB0byBzdGFydCBwcm9jZXNzICovCisgICAgICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICAgICAiKG1haW4pIGZhaWxlZCB0byBsYXVuY2ggdGFyZ2V0IFwiJXNcIjogJXNcbiIsCisJCSAgICAgIGx0X2FyZ3ZfemVybywgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworICAgICAgcmV0dXJuIDEyNzsKKyAgICB9CisgIHJldHVybiBydmFsOworRU9GCisJCTs7CisJICAgICAgKikKKwkJY2F0IDw8IkVPRiIKKyAgZXhlY3YgKGx0X2FyZ3ZfemVybywgbmV3YXJneik7CisgIHJldHVybiBydmFsOyAvKiA9MTI3LCBidXQgYXZvaWRzIHVudXNlZCB2YXJpYWJsZSB3YXJuaW5nICovCitFT0YKKwkJOzsKKwkgICAgZXNhYworCisJICAgIGNhdCA8PCJFT0YiCit9CisKK3ZvaWQgKgoreG1hbGxvYyAoc2l6ZV90IG51bSkKK3sKKyAgdm9pZCAqcCA9ICh2b2lkICopIG1hbGxvYyAobnVtKTsKKyAgaWYgKCFwKQorICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJtZW1vcnkgZXhoYXVzdGVkIik7CisKKyAgcmV0dXJuIHA7Cit9CisKK2NoYXIgKgoreHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKQoreworICByZXR1cm4gc3RyaW5nID8gc3RyY3B5ICgoY2hhciAqKSB4bWFsbG9jIChzdHJsZW4gKHN0cmluZykgKyAxKSwKKwkJCSAgc3RyaW5nKSA6IE5VTEw7Cit9CisKK2NvbnN0IGNoYXIgKgorYmFzZV9uYW1lIChjb25zdCBjaGFyICpuYW1lKQoreworICBjb25zdCBjaGFyICpiYXNlOworCisjaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCisgIC8qIFNraXAgb3ZlciB0aGUgZGlzayBuYW1lIGluIE1TRE9TIHBhdGhuYW1lcy4gKi8KKyAgaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKSBuYW1lWzBdKSAmJiBuYW1lWzFdID09ICc6JykKKyAgICBuYW1lICs9IDI7CisjZW5kaWYKKworICBmb3IgKGJhc2UgPSBuYW1lOyAqbmFtZTsgbmFtZSsrKQorICAgIGlmIChJU19ESVJfU0VQQVJBVE9SICgqbmFtZSkpCisgICAgICBiYXNlID0gbmFtZSArIDE7CisgIHJldHVybiBiYXNlOworfQorCitpbnQKK2NoZWNrX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpCit7CisgIHN0cnVjdCBzdGF0IHN0OworCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIoY2hlY2tfZXhlY3V0YWJsZSk6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgbm9uZW1wdHkgKHBhdGgpKTsKKyAgaWYgKCghcGF0aCkgfHwgKCEqcGF0aCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKChzdGF0IChwYXRoLCAmc3QpID49IDApCisgICAgICAmJiAoc3Quc3RfbW9kZSAmIChTX0lYVVNSIHwgU19JWEdSUCB8IFNfSVhPVEgpKSkKKyAgICByZXR1cm4gMTsKKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCitpbnQKK21ha2VfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCkKK3sKKyAgaW50IHJ2YWwgPSAwOworICBzdHJ1Y3Qgc3RhdCBzdDsKKworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1ha2VfZXhlY3V0YWJsZSk6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgbm9uZW1wdHkgKHBhdGgpKTsKKyAgaWYgKCghcGF0aCkgfHwgKCEqcGF0aCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHN0YXQgKHBhdGgsICZzdCkgPj0gMCkKKyAgICB7CisgICAgICBydmFsID0gY2htb2QgKHBhdGgsIHN0LnN0X21vZGUgfCBTX0lYT1RIIHwgU19JWEdSUCB8IFNfSVhVU1IpOworICAgIH0KKyAgcmV0dXJuIHJ2YWw7Cit9CisKKy8qIFNlYXJjaGVzIGZvciB0aGUgZnVsbCBwYXRoIG9mIHRoZSB3cmFwcGVyLiAgUmV0dXJucworICAgbmV3bHkgYWxsb2NhdGVkIGZ1bGwgcGF0aCBuYW1lIGlmIGZvdW5kLCBOVUxMIG90aGVyd2lzZQorICAgRG9lcyBub3QgY2hhc2Ugc3ltbGlua3MsIGV2ZW4gb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCB0aGVtLgorKi8KK2NoYXIgKgorZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyICp3cmFwcGVyKQoreworICBpbnQgaGFzX3NsYXNoID0gMDsKKyAgY29uc3QgY2hhciAqcDsKKyAgY29uc3QgY2hhciAqcF9uZXh0OworICAvKiBzdGF0aWMgYnVmZmVyIGZvciBnZXRjd2QgKi8KKyAgY2hhciB0bXBbTFRfUEFUSE1BWCArIDFdOworICBpbnQgdG1wX2xlbjsKKyAgY2hhciAqY29uY2F0X25hbWU7CisKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihmaW5kX2V4ZWN1dGFibGUpOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbmVtcHR5ICh3cmFwcGVyKSk7CisKKyAgaWYgKCh3cmFwcGVyID09IE5VTEwpIHx8ICgqd3JhcHBlciA9PSAnXDAnKSkKKyAgICByZXR1cm4gTlVMTDsKKworICAvKiBBYnNvbHV0ZSBwYXRoPyAqLworI2lmIGRlZmluZWQgKEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNKQorICBpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIHdyYXBwZXJbMF0pICYmIHdyYXBwZXJbMV0gPT0gJzonKQorICAgIHsKKyAgICAgIGNvbmNhdF9uYW1lID0geHN0cmR1cCAod3JhcHBlcik7CisgICAgICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQorCXJldHVybiBjb25jYXRfbmFtZTsKKyAgICAgIFhGUkVFIChjb25jYXRfbmFtZSk7CisgICAgfQorICBlbHNlCisgICAgeworI2VuZGlmCisgICAgICBpZiAoSVNfRElSX1NFUEFSQVRPUiAod3JhcHBlclswXSkpCisJeworCSAgY29uY2F0X25hbWUgPSB4c3RyZHVwICh3cmFwcGVyKTsKKwkgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCisJICAgIHJldHVybiBjb25jYXRfbmFtZTsKKwkgIFhGUkVFIChjb25jYXRfbmFtZSk7CisJfQorI2lmIGRlZmluZWQgKEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNKQorICAgIH0KKyNlbmRpZgorCisgIGZvciAocCA9IHdyYXBwZXI7ICpwOyBwKyspCisgICAgaWYgKCpwID09ICcvJykKKyAgICAgIHsKKwloYXNfc2xhc2ggPSAxOworCWJyZWFrOworICAgICAgfQorICBpZiAoIWhhc19zbGFzaCkKKyAgICB7CisgICAgICAvKiBubyBzbGFzaGVzOyBzZWFyY2ggUEFUSCAqLworICAgICAgY29uc3QgY2hhciAqcGF0aCA9IGdldGVudiAoIlBBVEgiKTsKKyAgICAgIGlmIChwYXRoICE9IE5VTEwpCisJeworCSAgZm9yIChwID0gcGF0aDsgKnA7IHAgPSBwX25leHQpCisJICAgIHsKKwkgICAgICBjb25zdCBjaGFyICpxOworCSAgICAgIHNpemVfdCBwX2xlbjsKKwkgICAgICBmb3IgKHEgPSBwOyAqcTsgcSsrKQorCQlpZiAoSVNfUEFUSF9TRVBBUkFUT1IgKCpxKSkKKwkJICBicmVhazsKKwkgICAgICBwX2xlbiA9IHEgLSBwOworCSAgICAgIHBfbmV4dCA9ICgqcSA9PSAnXDAnID8gcSA6IHEgKyAxKTsKKwkgICAgICBpZiAocF9sZW4gPT0gMCkKKwkJeworCQkgIC8qIGVtcHR5IHBhdGg6IGN1cnJlbnQgZGlyZWN0b3J5ICovCisJCSAgaWYgKGdldGN3ZCAodG1wLCBMVF9QQVRITUFYKSA9PSBOVUxMKQorCQkgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgImdldGN3ZCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKKwkJICB0bXBfbGVuID0gc3RybGVuICh0bXApOworCQkgIGNvbmNhdF9uYW1lID0KKwkJICAgIFhNQUxMT0MgKGNoYXIsIHRtcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOworCQkgIG1lbWNweSAoY29uY2F0X25hbWUsIHRtcCwgdG1wX2xlbik7CisJCSAgY29uY2F0X25hbWVbdG1wX2xlbl0gPSAnLyc7CisJCSAgc3RyY3B5IChjb25jYXRfbmFtZSArIHRtcF9sZW4gKyAxLCB3cmFwcGVyKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIGNvbmNhdF9uYW1lID0KKwkJICAgIFhNQUxMT0MgKGNoYXIsIHBfbGVuICsgMSArIHN0cmxlbiAod3JhcHBlcikgKyAxKTsKKwkJICBtZW1jcHkgKGNvbmNhdF9uYW1lLCBwLCBwX2xlbik7CisJCSAgY29uY2F0X25hbWVbcF9sZW5dID0gJy8nOworCQkgIHN0cmNweSAoY29uY2F0X25hbWUgKyBwX2xlbiArIDEsIHdyYXBwZXIpOworCQl9CisJICAgICAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKwkJcmV0dXJuIGNvbmNhdF9uYW1lOworCSAgICAgIFhGUkVFIChjb25jYXRfbmFtZSk7CisJICAgIH0KKwl9CisgICAgICAvKiBub3QgZm91bmQgaW4gUEFUSDsgYXNzdW1lIGN1cmRpciAqLworICAgIH0KKyAgLyogUmVsYXRpdmUgcGF0aCB8IG5vdCBmb3VuZCBpbiBwYXRoOiBwcmVwZW5kIGN3ZCAqLworICBpZiAoZ2V0Y3dkICh0bXAsIExUX1BBVEhNQVgpID09IE5VTEwpCisgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgImdldGN3ZCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworICB0bXBfbGVuID0gc3RybGVuICh0bXApOworICBjb25jYXRfbmFtZSA9IFhNQUxMT0MgKGNoYXIsIHRtcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOworICBtZW1jcHkgKGNvbmNhdF9uYW1lLCB0bXAsIHRtcF9sZW4pOworICBjb25jYXRfbmFtZVt0bXBfbGVuXSA9ICcvJzsKKyAgc3RyY3B5IChjb25jYXRfbmFtZSArIHRtcF9sZW4gKyAxLCB3cmFwcGVyKTsKKworICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQorICAgIHJldHVybiBjb25jYXRfbmFtZTsKKyAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2NoYXIgKgorY2hhc2Vfc3ltbGlua3MgKGNvbnN0IGNoYXIgKnBhdGhzcGVjKQoreworI2lmbmRlZiBTX0lTTE5LCisgIHJldHVybiB4c3RyZHVwIChwYXRoc3BlYyk7CisjZWxzZQorICBjaGFyIGJ1ZltMVF9QQVRITUFYXTsKKyAgc3RydWN0IHN0YXQgczsKKyAgY2hhciAqdG1wX3BhdGhzcGVjID0geHN0cmR1cCAocGF0aHNwZWMpOworICBjaGFyICpwOworICBpbnQgaGFzX3N5bWxpbmtzID0gMDsKKyAgd2hpbGUgKHN0cmxlbiAodG1wX3BhdGhzcGVjKSAmJiAhaGFzX3N5bWxpbmtzKQorICAgIHsKKyAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgICAgICJjaGVja2luZyBwYXRoIGNvbXBvbmVudCBmb3Igc3ltbGlua3M6ICVzXG4iLAorCQkgICAgICB0bXBfcGF0aHNwZWMpOworICAgICAgaWYgKGxzdGF0ICh0bXBfcGF0aHNwZWMsICZzKSA9PSAwKQorCXsKKwkgIGlmIChTX0lTTE5LIChzLnN0X21vZGUpICE9IDApCisJICAgIHsKKwkgICAgICBoYXNfc3ltbGlua3MgPSAxOworCSAgICAgIGJyZWFrOworCSAgICB9CisKKwkgIC8qIHNlYXJjaCBiYWNrd2FyZHMgZm9yIGxhc3QgRElSX1NFUEFSQVRPUiAqLworCSAgcCA9IHRtcF9wYXRoc3BlYyArIHN0cmxlbiAodG1wX3BhdGhzcGVjKSAtIDE7CisJICB3aGlsZSAoKHAgPiB0bXBfcGF0aHNwZWMpICYmICghSVNfRElSX1NFUEFSQVRPUiAoKnApKSkKKwkgICAgcC0tOworCSAgaWYgKChwID09IHRtcF9wYXRoc3BlYykgJiYgKCFJU19ESVJfU0VQQVJBVE9SICgqcCkpKQorCSAgICB7CisJICAgICAgLyogbm8gbW9yZSBESVJfU0VQQVJBVE9SUyBsZWZ0ICovCisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgICpwID0gJ1wwJzsKKwl9CisgICAgICBlbHNlCisJeworCSAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAgICJlcnJvciBhY2Nlc3NpbmcgZmlsZSBcIiVzXCI6ICVzIiwKKwkJICAgIHRtcF9wYXRoc3BlYywgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworCX0KKyAgICB9CisgIFhGUkVFICh0bXBfcGF0aHNwZWMpOworCisgIGlmICghaGFzX3N5bWxpbmtzKQorICAgIHsKKyAgICAgIHJldHVybiB4c3RyZHVwIChwYXRoc3BlYyk7CisgICAgfQorCisgIHRtcF9wYXRoc3BlYyA9IHJlYWxwYXRoIChwYXRoc3BlYywgYnVmKTsKKyAgaWYgKHRtcF9wYXRoc3BlYyA9PSAwKQorICAgIHsKKyAgICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSJjb3VsZCBub3QgZm9sbG93IHN5bWxpbmtzIGZvciAlcyIsIHBhdGhzcGVjKTsKKyAgICB9CisgIHJldHVybiB4c3RyZHVwICh0bXBfcGF0aHNwZWMpOworI2VuZGlmCit9CisKK2NoYXIgKgorc3RyZW5kemFwIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCkKK3sKKyAgc2l6ZV90IGxlbiwgcGF0bGVuOworCisgIGFzc2VydCAoc3RyICE9IE5VTEwpOworICBhc3NlcnQgKHBhdCAhPSBOVUxMKTsKKworICBsZW4gPSBzdHJsZW4gKHN0cik7CisgIHBhdGxlbiA9IHN0cmxlbiAocGF0KTsKKworICBpZiAocGF0bGVuIDw9IGxlbikKKyAgICB7CisgICAgICBzdHIgKz0gbGVuIC0gcGF0bGVuOworICAgICAgaWYgKHN0cmNtcCAoc3RyLCBwYXQpID09IDApCisJKnN0ciA9ICdcMCc7CisgICAgfQorICByZXR1cm4gc3RyOworfQorCit2b2lkCitsdF9kZWJ1Z3ByaW50ZiAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICB2YV9saXN0IGFyZ3M7CisgIGlmIChsdF9kZWJ1ZykKKyAgICB7CisgICAgICAodm9pZCkgZnByaW50ZiAoc3RkZXJyLCAiJXM6JXM6JWQ6ICIsIHByb2dyYW1fbmFtZSwgZmlsZSwgbGluZSk7CisgICAgICB2YV9zdGFydCAoYXJncywgZm10KTsKKyAgICAgICh2b2lkKSB2ZnByaW50ZiAoc3RkZXJyLCBmbXQsIGFyZ3MpOworICAgICAgdmFfZW5kIChhcmdzKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitsdF9lcnJvcl9jb3JlIChpbnQgZXhpdF9zdGF0dXMsIGNvbnN0IGNoYXIgKmZpbGUsCisJICAgICAgIGludCBsaW5lLCBjb25zdCBjaGFyICptb2RlLAorCSAgICAgICBjb25zdCBjaGFyICptZXNzYWdlLCB2YV9saXN0IGFwKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlczolczolZDogJXM6ICIsIHByb2dyYW1fbmFtZSwgZmlsZSwgbGluZSwgbW9kZSk7CisgIHZmcHJpbnRmIChzdGRlcnIsIG1lc3NhZ2UsIGFwKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiLlxuIik7CisKKyAgaWYgKGV4aXRfc3RhdHVzID49IDApCisgICAgZXhpdCAoZXhpdF9zdGF0dXMpOworfQorCit2b2lkCitsdF9mYXRhbCAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLikKK3sKKyAgdmFfbGlzdCBhcDsKKyAgdmFfc3RhcnQgKGFwLCBtZXNzYWdlKTsKKyAgbHRfZXJyb3JfY29yZSAoRVhJVF9GQUlMVVJFLCBmaWxlLCBsaW5lLCAiRkFUQUwiLCBtZXNzYWdlLCBhcCk7CisgIHZhX2VuZCAoYXApOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitub25udWxsIChjb25zdCBjaGFyICpzKQoreworICByZXR1cm4gcyA/IHMgOiAiKG51bGwpIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorbm9uZW1wdHkgKGNvbnN0IGNoYXIgKnMpCit7CisgIHJldHVybiAocyAmJiAhKnMpID8gIihlbXB0eSkiIDogbm9ubnVsbCAocyk7Cit9CisKK3ZvaWQKK2x0X3NldGVudiAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgIihsdF9zZXRlbnYpIHNldHRpbmcgJyVzJyB0byAnJXMnXG4iLAorICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7CisgIHsKKyNpZmRlZiBIQVZFX1NFVEVOVgorICAgIC8qIGFsd2F5cyBtYWtlIGEgY29weSwgZm9yIGNvbnNpc3RlbmN5IHdpdGggIUhBVkVfU0VURU5WICovCisgICAgY2hhciAqc3RyID0geHN0cmR1cCAodmFsdWUpOworICAgIHNldGVudiAobmFtZSwgc3RyLCAxKTsKKyNlbHNlCisgICAgaW50IGxlbiA9IHN0cmxlbiAobmFtZSkgKyAxICsgc3RybGVuICh2YWx1ZSkgKyAxOworICAgIGNoYXIgKnN0ciA9IFhNQUxMT0MgKGNoYXIsIGxlbik7CisgICAgc3ByaW50ZiAoc3RyLCAiJXM9JXMiLCBuYW1lLCB2YWx1ZSk7CisgICAgaWYgKHB1dGVudiAoc3RyKSAhPSBFWElUX1NVQ0NFU1MpCisgICAgICB7CisgICAgICAgIFhGUkVFIChzdHIpOworICAgICAgfQorI2VuZGlmCisgIH0KK30KKworY2hhciAqCitsdF9leHRlbmRfc3RyIChjb25zdCBjaGFyICpvcmlnX3ZhbHVlLCBjb25zdCBjaGFyICphZGQsIGludCB0b19lbmQpCit7CisgIGNoYXIgKm5ld192YWx1ZTsKKyAgaWYgKG9yaWdfdmFsdWUgJiYgKm9yaWdfdmFsdWUpCisgICAgeworICAgICAgaW50IG9yaWdfdmFsdWVfbGVuID0gc3RybGVuIChvcmlnX3ZhbHVlKTsKKyAgICAgIGludCBhZGRfbGVuID0gc3RybGVuIChhZGQpOworICAgICAgbmV3X3ZhbHVlID0gWE1BTExPQyAoY2hhciwgYWRkX2xlbiArIG9yaWdfdmFsdWVfbGVuICsgMSk7CisgICAgICBpZiAodG9fZW5kKQorICAgICAgICB7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUsIG9yaWdfdmFsdWUpOworICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlICsgb3JpZ192YWx1ZV9sZW4sIGFkZCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlLCBhZGQpOworICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlICsgYWRkX2xlbiwgb3JpZ192YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBuZXdfdmFsdWUgPSB4c3RyZHVwIChhZGQpOworICAgIH0KKyAgcmV0dXJuIG5ld192YWx1ZTsKK30KKwordm9pZAorbHRfdXBkYXRlX2V4ZV9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAiKGx0X3VwZGF0ZV9leGVfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAorICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7CisKKyAgaWYgKG5hbWUgJiYgKm5hbWUgJiYgdmFsdWUgJiYgKnZhbHVlKQorICAgIHsKKyAgICAgIGNoYXIgKm5ld192YWx1ZSA9IGx0X2V4dGVuZF9zdHIgKGdldGVudiAobmFtZSksIHZhbHVlLCAwKTsKKyAgICAgIC8qIHNvbWUgc3lzdGVtcyBjYW4ndCBjb3BlIHdpdGggYSAnOictdGVybWluYXRlZCBwYXRoICMnICovCisgICAgICBpbnQgbGVuID0gc3RybGVuIChuZXdfdmFsdWUpOworICAgICAgd2hpbGUgKCgobGVuID0gc3RybGVuIChuZXdfdmFsdWUpKSA+IDApICYmIElTX1BBVEhfU0VQQVJBVE9SIChuZXdfdmFsdWVbbGVuLTFdKSkKKyAgICAgICAgeworICAgICAgICAgIG5ld192YWx1ZVtsZW4tMV0gPSAnXDAnOworICAgICAgICB9CisgICAgICBsdF9zZXRlbnYgKG5hbWUsIG5ld192YWx1ZSk7CisgICAgICBYRlJFRSAobmV3X3ZhbHVlKTsKKyAgICB9Cit9CisKK3ZvaWQKK2x0X3VwZGF0ZV9saWJfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgIihsdF91cGRhdGVfbGliX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5IHByZXBlbmRpbmcgJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOworCisgIGlmIChuYW1lICYmICpuYW1lICYmIHZhbHVlICYmICp2YWx1ZSkKKyAgICB7CisgICAgICBjaGFyICpuZXdfdmFsdWUgPSBsdF9leHRlbmRfc3RyIChnZXRlbnYgKG5hbWUpLCB2YWx1ZSwgMCk7CisgICAgICBsdF9zZXRlbnYgKG5hbWUsIG5ld192YWx1ZSk7CisgICAgICBYRlJFRSAobmV3X3ZhbHVlKTsKKyAgICB9Cit9CisKK0VPRgorCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgbWluZ3cqKQorCQljYXQgPDwiRU9GIgorCisvKiBQcmVwYXJlcyBhbiBhcmd1bWVudCB2ZWN0b3IgYmVmb3JlIGNhbGxpbmcgc3Bhd24oKS4KKyAgIE5vdGUgdGhhdCBzcGF3bigpIGRvZXMgbm90IGJ5IGl0c2VsZiBjYWxsIHRoZSBjb21tYW5kIGludGVycHJldGVyCisgICAgIChnZXRlbnYgKCJDT01TUEVDIikgIT0gTlVMTCA/IGdldGVudiAoIkNPTVNQRUMiKSA6CisgICAgICAoeyBPU1ZFUlNJT05JTkZPIHY7IHYuZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVvZihPU1ZFUlNJT05JTkZPKTsKKyAgICAgICAgIEdldFZlcnNpb25FeCgmdik7CisgICAgICAgICB2LmR3UGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfTlQ7CisgICAgICB9KSA/ICJjbWQuZXhlIiA6ICJjb21tYW5kLmNvbSIpLgorICAgSW5zdGVhZCBpdCBzaW1wbHkgY29uY2F0ZW5hdGVzIHRoZSBhcmd1bWVudHMsIHNlcGFyYXRlZCBieSAnICcsIGFuZCBjYWxscworICAgQ3JlYXRlUHJvY2VzcygpLiAgV2UgbXVzdCBxdW90ZSB0aGUgYXJndW1lbnRzIHNpbmNlIFdpbjMyIENyZWF0ZVByb2Nlc3MoKQorICAgaW50ZXJwcmV0cyBjaGFyYWN0ZXJzIGxpa2UgJyAnLCAnXHQnLCAnXFwnLCAnIicgKGJ1dCBub3QgJzwnIGFuZCAnPicpIGluIGEKKyAgIHNwZWNpYWwgd2F5OgorICAgLSBTcGFjZSBhbmQgdGFiIGFyZSBpbnRlcnByZXRlZCBhcyBkZWxpbWl0ZXJzLiBUaGV5IGFyZSBub3QgdHJlYXRlZCBhcworICAgICBkZWxpbWl0ZXJzIGlmIHRoZXkgYXJlIHN1cnJvdW5kZWQgYnkgZG91YmxlIHF1b3RlczogIi4uLiIuCisgICAtIFVuZXNjYXBlZCBkb3VibGUgcXVvdGVzIGFyZSByZW1vdmVkIGZyb20gdGhlIGlucHV0LiBUaGVpciBvbmx5IGVmZmVjdCBpcworICAgICB0aGF0IHdpdGhpbiBkb3VibGUgcXVvdGVzLCBzcGFjZSBhbmQgdGFiIGFyZSB0cmVhdGVkIGxpa2Ugbm9ybWFsCisgICAgIGNoYXJhY3RlcnMuCisgICAtIEJhY2tzbGFzaGVzIG5vdCBmb2xsb3dlZCBieSBkb3VibGUgcXVvdGVzIGFyZSBub3Qgc3BlY2lhbC4KKyAgIC0gQnV0IDIqbisxIGJhY2tzbGFzaGVzIGZvbGxvd2VkIGJ5IGEgZG91YmxlIHF1b3RlIGJlY29tZQorICAgICBuIGJhY2tzbGFzaGVzIGZvbGxvd2VkIGJ5IGEgZG91YmxlIHF1b3RlIChuID49IDApOgorICAgICAgIFwiIC0+ICIKKyAgICAgICBcXFwiIC0+IFwiCisgICAgICAgXFxcXFwiIC0+IFxcIgorICovCisjZGVmaW5lIFNIRUxMX1NQRUNJQUxfQ0hBUlMgIlwiXFwgXDAwMVwwMDJcMDAzXDAwNFwwMDVcMDA2XDAwN1wwMTBcMDExXDAxMlwwMTNcMDE0XDAxNVwwMTZcMDE3XDAyMFwwMjFcMDIyXDAyM1wwMjRcMDI1XDAyNlwwMjdcMDMwXDAzMVwwMzJcMDMzXDAzNFwwMzVcMDM2XDAzNyIKKyNkZWZpbmUgU0hFTExfU1BBQ0VfQ0hBUlMgIiBcMDAxXDAwMlwwMDNcMDA0XDAwNVwwMDZcMDA3XDAxMFwwMTFcMDEyXDAxM1wwMTRcMDE1XDAxNlwwMTdcMDIwXDAyMVwwMjJcMDIzXDAyNFwwMjVcMDI2XDAyN1wwMzBcMDMxXDAzMlwwMzNcMDM0XDAzNVwwMzZcMDM3IgorY2hhciAqKgorcHJlcGFyZV9zcGF3biAoY2hhciAqKmFyZ3YpCit7CisgIHNpemVfdCBhcmdjOworICBjaGFyICoqbmV3X2FyZ3Y7CisgIHNpemVfdCBpOworCisgIC8qIENvdW50IG51bWJlciBvZiBhcmd1bWVudHMuICAqLworICBmb3IgKGFyZ2MgPSAwOyBhcmd2W2FyZ2NdICE9IE5VTEw7IGFyZ2MrKykKKyAgICA7CisKKyAgLyogQWxsb2NhdGUgbmV3IGFyZ3VtZW50IHZlY3Rvci4gICovCisgIG5ld19hcmd2ID0gWE1BTExPQyAoY2hhciAqLCBhcmdjICsgMSk7CisKKyAgLyogUHV0IHF1b3RlZCBhcmd1bWVudHMgaW50byB0aGUgbmV3IGFyZ3VtZW50IHZlY3Rvci4gICovCisgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisgICAgeworICAgICAgY29uc3QgY2hhciAqc3RyaW5nID0gYXJndltpXTsKKworICAgICAgaWYgKHN0cmluZ1swXSA9PSAnXDAnKQorCW5ld19hcmd2W2ldID0geHN0cmR1cCAoIlwiXCIiKTsKKyAgICAgIGVsc2UgaWYgKHN0cnBicmsgKHN0cmluZywgU0hFTExfU1BFQ0lBTF9DSEFSUykgIT0gTlVMTCkKKwl7CisJICBpbnQgcXVvdGVfYXJvdW5kID0gKHN0cnBicmsgKHN0cmluZywgU0hFTExfU1BBQ0VfQ0hBUlMpICE9IE5VTEwpOworCSAgc2l6ZV90IGxlbmd0aDsKKwkgIHVuc2lnbmVkIGludCBiYWNrc2xhc2hlczsKKwkgIGNvbnN0IGNoYXIgKnM7CisJICBjaGFyICpxdW90ZWRfc3RyaW5nOworCSAgY2hhciAqcDsKKworCSAgbGVuZ3RoID0gMDsKKwkgIGJhY2tzbGFzaGVzID0gMDsKKwkgIGlmIChxdW90ZV9hcm91bmQpCisJICAgIGxlbmd0aCsrOworCSAgZm9yIChzID0gc3RyaW5nOyAqcyAhPSAnXDAnOyBzKyspCisJICAgIHsKKwkgICAgICBjaGFyIGMgPSAqczsKKwkgICAgICBpZiAoYyA9PSAnIicpCisJCWxlbmd0aCArPSBiYWNrc2xhc2hlcyArIDE7CisJICAgICAgbGVuZ3RoKys7CisJICAgICAgaWYgKGMgPT0gJ1xcJykKKwkJYmFja3NsYXNoZXMrKzsKKwkgICAgICBlbHNlCisJCWJhY2tzbGFzaGVzID0gMDsKKwkgICAgfQorCSAgaWYgKHF1b3RlX2Fyb3VuZCkKKwkgICAgbGVuZ3RoICs9IGJhY2tzbGFzaGVzICsgMTsKKworCSAgcXVvdGVkX3N0cmluZyA9IFhNQUxMT0MgKGNoYXIsIGxlbmd0aCArIDEpOworCisJICBwID0gcXVvdGVkX3N0cmluZzsKKwkgIGJhY2tzbGFzaGVzID0gMDsKKwkgIGlmIChxdW90ZV9hcm91bmQpCisJICAgICpwKysgPSAnIic7CisJICBmb3IgKHMgPSBzdHJpbmc7ICpzICE9ICdcMCc7IHMrKykKKwkgICAgeworCSAgICAgIGNoYXIgYyA9ICpzOworCSAgICAgIGlmIChjID09ICciJykKKwkJeworCQkgIHVuc2lnbmVkIGludCBqOworCQkgIGZvciAoaiA9IGJhY2tzbGFzaGVzICsgMTsgaiA+IDA7IGotLSkKKwkJICAgICpwKysgPSAnXFwnOworCQl9CisJICAgICAgKnArKyA9IGM7CisJICAgICAgaWYgKGMgPT0gJ1xcJykKKwkJYmFja3NsYXNoZXMrKzsKKwkgICAgICBlbHNlCisJCWJhY2tzbGFzaGVzID0gMDsKKwkgICAgfQorCSAgaWYgKHF1b3RlX2Fyb3VuZCkKKwkgICAgeworCSAgICAgIHVuc2lnbmVkIGludCBqOworCSAgICAgIGZvciAoaiA9IGJhY2tzbGFzaGVzOyBqID4gMDsgai0tKQorCQkqcCsrID0gJ1xcJzsKKwkgICAgICAqcCsrID0gJyInOworCSAgICB9CisJICAqcCA9ICdcMCc7CisKKwkgIG5ld19hcmd2W2ldID0gcXVvdGVkX3N0cmluZzsKKwl9CisgICAgICBlbHNlCisJbmV3X2FyZ3ZbaV0gPSAoY2hhciAqKSBzdHJpbmc7CisgICAgfQorICBuZXdfYXJndlthcmdjXSA9IE5VTEw7CisKKyAgcmV0dXJuIG5ld19hcmd2OworfQorRU9GCisJCTs7CisJICAgIGVzYWMKKworICAgICAgICAgICAgY2F0IDw8IkVPRiIKK3ZvaWQgbHRfZHVtcF9zY3JpcHQgKEZJTEUqIGYpCit7CitFT0YKKwkgICAgZnVuY19lbWl0X3dyYXBwZXIgeWVzIHwKKyAgICAgICAgICAgICAgJFNFRCAtZSAncy9cKFtcXCJdXCkvXFxcMS9nJyBcCisJICAgICAgICAgICAtZSAncy9eLyAgZnB1dHMgKCIvJyAtZSAncy8kL1xcbiIsIGYpOy8nCisKKyAgICAgICAgICAgIGNhdCA8PCJFT0YiCit9CitFT0YKK30KKyMgZW5kOiBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCisKKyMgZnVuY193aW4zMl9pbXBvcnRfbGliX3AgQVJHCisjIFRydWUgaWYgQVJHIGlzIGFuIGltcG9ydCBsaWIsIGFzIGluZGljYXRlZCBieSAkZmlsZV9tYWdpY19jbWQKK2Z1bmNfd2luMzJfaW1wb3J0X2xpYl9wICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIGNhc2UgYGV2YWwgJGZpbGVfbWFnaWNfY21kIFwiXCQxXCIgMj4vZGV2L251bGwgfCAkU0VEIC1lIDEwcWAgaW4KKyAgICAqaW1wb3J0KikgOiA7OworICAgICopIGZhbHNlIDs7CisgICAgZXNhYworfQorCisjIGZ1bmNfbW9kZV9saW5rIGFyZy4uLgorZnVuY19tb2RlX2xpbmsgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgY2FzZSAkaG9zdCBpbgorICAgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCisgICAgICAjIEl0IGlzIGltcG9zc2libGUgdG8gbGluayBhIGRsbCB3aXRob3V0IHRoaXMgc2V0dGluZywgYW5kCisgICAgICAjIHdlIHNob3VsZG4ndCBmb3JjZSB0aGUgbWFrZWZpbGUgbWFpbnRhaW5lciB0byBmaWd1cmUgb3V0CisgICAgICAjIHdoaWNoIHN5c3RlbSB3ZSBhcmUgY29tcGlsaW5nIGZvciBpbiBvcmRlciB0byBwYXNzIGFuIGV4dHJhCisgICAgICAjIGZsYWcgZm9yIGV2ZXJ5IGxpYnRvb2wgaW52b2NhdGlvbi4KKyAgICAgICMgYWxsb3dfdW5kZWZpbmVkPW5vCisKKyAgICAgICMgRklYTUU6IFVuZm9ydHVuYXRlbHksIHRoZXJlIGFyZSBwcm9ibGVtcyB3aXRoIHRoZSBhYm92ZSB3aGVuIHRyeWluZworICAgICAgIyB0byBtYWtlIGEgZGxsIHdoaWNoIGhhcyB1bmRlZmluZWQgc3ltYm9scywgaW4gd2hpY2ggY2FzZSBub3QKKyAgICAgICMgZXZlbiBhIHN0YXRpYyBsaWJyYXJ5IGlzIGJ1aWx0LiAgRm9yIG5vdywgd2UgbmVlZCB0byBzcGVjaWZ5CisgICAgICAjIC1uby11bmRlZmluZWQgb24gdGhlIGxpYnRvb2wgbGluayBsaW5lIHdoZW4gd2UgY2FuIGJlIGNlcnRhaW4KKyAgICAgICMgdGhhdCBhbGwgc3ltYm9scyBhcmUgc2F0aXNmaWVkLCBvdGhlcndpc2Ugd2UgZ2V0IGEgc3RhdGljIGxpYnJhcnkuCisgICAgICBhbGxvd191bmRlZmluZWQ9eWVzCisgICAgICA7OworICAgICopCisgICAgICBhbGxvd191bmRlZmluZWQ9eWVzCisgICAgICA7OworICAgIGVzYWMKKyAgICBsaWJ0b29sX2FyZ3M9JG5vbm9wdAorICAgIGJhc2VfY29tcGlsZT0iJG5vbm9wdCAkQCIKKyAgICBjb21waWxlX2NvbW1hbmQ9JG5vbm9wdAorICAgIGZpbmFsaXplX2NvbW1hbmQ9JG5vbm9wdAorCisgICAgY29tcGlsZV9ycGF0aD0KKyAgICBmaW5hbGl6ZV9ycGF0aD0KKyAgICBjb21waWxlX3NobGlicGF0aD0KKyAgICBmaW5hbGl6ZV9zaGxpYnBhdGg9CisgICAgY29udmVuaWVuY2U9CisgICAgb2xkX2NvbnZlbmllbmNlPQorICAgIGRlcGxpYnM9CisgICAgb2xkX2RlcGxpYnM9CisgICAgY29tcGlsZXJfZmxhZ3M9CisgICAgbGlua2VyX2ZsYWdzPQorICAgIGRsbHNlYXJjaHBhdGg9CisgICAgbGliX3NlYXJjaF9wYXRoPWBwd2RgCisgICAgaW5zdF9wcmVmaXhfZGlyPQorICAgIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPQorCisgICAgYXZvaWRfdmVyc2lvbj1ubworICAgIGJpbmRpcj0KKyAgICBkbGZpbGVzPQorICAgIGRscHJlZmlsZXM9CisgICAgZGxzZWxmPW5vCisgICAgZXhwb3J0X2R5bmFtaWM9bm8KKyAgICBleHBvcnRfc3ltYm9scz0KKyAgICBleHBvcnRfc3ltYm9sc19yZWdleD0KKyAgICBnZW5lcmF0ZWQ9CisgICAgbGlib2Jqcz0KKyAgICBsdGxpYnM9CisgICAgbW9kdWxlPW5vCisgICAgbm9faW5zdGFsbD1ubworICAgIG9ianM9CisgICAgbm9uX3BpY19vYmplY3RzPQorICAgIHByZWNpb3VzX2ZpbGVzX3JlZ2V4PQorICAgIHByZWZlcl9zdGF0aWNfbGlicz1ubworICAgIHByZWxvYWQ9bm8KKyAgICBwcmV2PQorICAgIHByZXZhcmc9CisgICAgcmVsZWFzZT0KKyAgICBycGF0aD0KKyAgICB4cnBhdGg9CisgICAgcGVybV9ycGF0aD0KKyAgICB0ZW1wX3JwYXRoPQorICAgIHRocmVhZF9zYWZlPW5vCisgICAgdmluZm89CisgICAgdmluZm9fbnVtYmVyPW5vCisgICAgd2Vha19saWJzPQorICAgIHNpbmdsZV9tb2R1bGU9IiR7d2x9LXNpbmdsZV9tb2R1bGUiCisgICAgZnVuY19pbmZlcl90YWcgJGJhc2VfY29tcGlsZQorCisgICAgIyBXZSBuZWVkIHRvIGtub3cgLXN0YXRpYywgdG8gZ2V0IHRoZSByaWdodCBvdXRwdXQgZmlsZW5hbWVzLgorICAgIGZvciBhcmcKKyAgICBkbworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtc2hhcmVkKQorCXRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiBcCisJICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gImNhbiBub3QgYnVpbGQgYSBzaGFyZWQgbGlicmFyeSIKKwlidWlsZF9vbGRfbGlicz1ubworCWJyZWFrCisJOzsKKyAgICAgIC1hbGwtc3RhdGljIHwgLXN0YXRpYyB8IC1zdGF0aWMtbGlidG9vbC1saWJzKQorCWNhc2UgJGFyZyBpbgorCS1hbGwtc3RhdGljKQorCSAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAteiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAgIGZ1bmNfd2FybmluZyAiY29tcGxldGUgc3RhdGljIGxpbmtpbmcgaXMgaW1wb3NzaWJsZSBpbiB0aGlzIGNvbmZpZ3VyYXRpb24iCisJICBmaQorCSAgaWYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAgIGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0aWMKKwkgIGZpCisJICBwcmVmZXJfc3RhdGljX2xpYnM9eWVzCisJICA7OworCS1zdGF0aWMpCisJICBpZiB0ZXN0IC16ICIkcGljX2ZsYWciICYmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgICBkbG9wZW5fc2VsZj0kZGxvcGVuX3NlbGZfc3RhdGljCisJICBmaQorCSAgcHJlZmVyX3N0YXRpY19saWJzPWJ1aWx0CisJICA7OworCS1zdGF0aWMtbGlidG9vbC1saWJzKQorCSAgaWYgdGVzdCAteiAiJHBpY19mbGFnIiAmJiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYworCSAgZmkKKwkgIHByZWZlcl9zdGF0aWNfbGlicz15ZXMKKwkgIDs7CisJZXNhYworCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworCWJ1aWxkX29sZF9saWJzPXllcworCWJyZWFrCisJOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICAjIFNlZSBpZiBvdXIgc2hhcmVkIGFyY2hpdmVzIGRlcGVuZCBvbiBzdGF0aWMgYXJjaGl2ZXMuCisgICAgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiICYmIGJ1aWxkX29sZF9saWJzPXllcworCisgICAgIyBHbyB0aHJvdWdoIHRoZSBhcmd1bWVudHMsIHRyYW5zZm9ybWluZyB0aGVtIG9uIHRoZSB3YXkuCisgICAgd2hpbGUgdGVzdCAiJCMiIC1ndCAwOyBkbworICAgICAgYXJnPSIkMSIKKyAgICAgIHNoaWZ0CisgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorICAgICAgcWFyZz0kZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQKKyAgICAgIGZ1bmNfYXBwZW5kIGxpYnRvb2xfYXJncyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKworICAgICAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCisgICAgICBpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KKwljYXNlICRwcmV2IGluCisJb3V0cHV0KQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgQE9VVFBVVEAiCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgQE9VVFBVVEAiCisJICA7OworCWVzYWMKKworCWNhc2UgJHByZXYgaW4KKwliaW5kaXIpCisJICBiaW5kaXI9IiRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJZGxmaWxlc3xkbHByZWZpbGVzKQorCSAgaWYgdGVzdCAiJHByZWxvYWQiID0gbm87IHRoZW4KKwkgICAgIyBBZGQgdGhlIHN5bWJvbCBvYmplY3QgaW50byB0aGUgbGlua2luZyBjb21tYW5kcy4KKwkgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgQFNZTUZJTEVAIgorCSAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgQFNZTUZJTEVAIgorCSAgICBwcmVsb2FkPXllcworCSAgZmkKKwkgIGNhc2UgJGFyZyBpbgorCSAgKi5sYSB8ICoubG8pIDs7ICAjIFdlIGhhbmRsZSB0aGVzZSBjYXNlcyBiZWxvdy4KKwkgIGZvcmNlKQorCSAgICBpZiB0ZXN0ICIkZGxzZWxmIiA9IG5vOyB0aGVuCisJICAgICAgZGxzZWxmPW5lZWRsZXNzCisJICAgICAgZXhwb3J0X2R5bmFtaWM9eWVzCisJICAgIGZpCisJICAgIHByZXY9CisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBzZWxmKQorCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJICAgICAgZGxzZWxmPXllcworCSAgICBlbGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXMgJiYgdGVzdCAiJGRsb3Blbl9zZWxmIiAhPSB5ZXM7IHRoZW4KKwkgICAgICBkbHNlbGY9eWVzCisJICAgIGVsc2UKKwkgICAgICBkbHNlbGY9bmVlZGxlc3MKKwkgICAgICBleHBvcnRfZHluYW1pYz15ZXMKKwkgICAgZmkKKwkgICAgcHJldj0KKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkgICAgICBkbGZpbGVzPSIkZGxmaWxlcyAkYXJnIgorCSAgICBlbHNlCisJICAgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGFyZyIKKwkgICAgZmkKKwkgICAgcHJldj0KKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXhwc3ltcykKKwkgIGV4cG9ydF9zeW1ib2xzPSIkYXJnIgorCSAgdGVzdCAtZiAiJGFyZyIgXAorCSAgICB8fCBmdW5jX2ZhdGFsX2Vycm9yICJzeW1ib2wgZmlsZSBcYCRhcmcnIGRvZXMgbm90IGV4aXN0IgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCWV4cHN5bXNfcmVnZXgpCisJICBleHBvcnRfc3ltYm9sc19yZWdleD0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlmcmFtZXdvcmspCisJICBjYXNlICRob3N0IGluCisJICAgICotKi1kYXJ3aW4qKQorCSAgICAgIGNhc2UgIiRkZXBsaWJzICIgaW4KKwkJKiIgJHFhcmcubHRmcmFtZXdvcmsgIiopIDs7CisJCSopIGRlcGxpYnM9IiRkZXBsaWJzICRxYXJnLmx0ZnJhbWV3b3JrIiAjIHRoaXMgaXMgZml4ZWQgbGF0ZXIKKwkJICAgOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgIGVzYWMKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlpbnN0X3ByZWZpeCkKKwkgIGluc3RfcHJlZml4X2Rpcj0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlvYmplY3RsaXN0KQorCSAgaWYgdGVzdCAtZiAiJGFyZyI7IHRoZW4KKwkgICAgc2F2ZV9hcmc9JGFyZworCSAgICBtb3JlYXJncz0KKwkgICAgZm9yIGZpbCBpbiBgY2F0ICIkc2F2ZV9hcmciYAorCSAgICBkbworIwkgICAgICBtb3JlYXJncz0iJG1vcmVhcmdzICRmaWwiCisJICAgICAgYXJnPSRmaWwKKwkgICAgICAjIEEgbGlidG9vbC1jb250cm9sbGVkIG9iamVjdC4KKworCSAgICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIG9iamVjdC4KKwkgICAgICBpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkYXJnIjsgdGhlbgorCQlwaWNfb2JqZWN0PQorCQlub25fcGljX29iamVjdD0KKworCQkjIFJlYWQgdGhlIC5sbyBmaWxlCisJCWZ1bmNfc291cmNlICIkYXJnIgorCisJCWlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fAorCQkgICB0ZXN0IC16ICIkbm9uX3BpY19vYmplY3QiIHx8CisJCSAgIHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgJiYKKwkJICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiA9IG5vbmU7IHRoZW4KKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgXGAkYXJnJyIKKwkJZmkKKworCQkjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCQlmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCQl4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCQlpZiB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCQkgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJCSAgcGljX29iamVjdD0iJHhkaXIkcGljX29iamVjdCIKKworCQkgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkJICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB5ZXM7IHRoZW4KKwkJICAgICAgZGxmaWxlcz0iJGRsZmlsZXMgJHBpY19vYmplY3QiCisJCSAgICAgIHByZXY9CisJCSAgICAgIGNvbnRpbnVlCisJCSAgICBlbHNlCisJCSAgICAgICMgSWYgbGlidG9vbCBvYmplY3RzIGFyZSB1bnN1cHBvcnRlZCwgdGhlbiB3ZSBuZWVkIHRvIHByZWxvYWQuCisJCSAgICAgIHByZXY9ZGxwcmVmaWxlcworCQkgICAgZmkKKwkJICBmaQorCisJCSAgIyBDSEVDSyBNRTogIEkgdGhpbmsgSSBidXN0ZWQgdGhpcy4gIC1Pc3NhbWEKKwkJICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJCSAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCisJCSAgICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkcGljX29iamVjdCIKKwkJICAgIHByZXY9CisJCSAgZmkKKworCQkgICMgQSBQSUMgb2JqZWN0LgorCQkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKwkJICBhcmc9IiRwaWNfb2JqZWN0IgorCQlmaQorCisJCSMgTm9uLVBJQyBvYmplY3QuCisJCWlmIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCQkgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJCSAgbm9uX3BpY19vYmplY3Q9IiR4ZGlyJG5vbl9waWNfb2JqZWN0IgorCisJCSAgIyBBIHN0YW5kYXJkIG5vbi1QSUMgb2JqZWN0CisJCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCQkgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lIDsgdGhlbgorCQkgICAgYXJnPSIkbm9uX3BpY19vYmplY3QiCisJCSAgZmkKKwkJZWxzZQorCQkgICMgSWYgdGhlIFBJQyBvYmplY3QgZXhpc3RzLCB1c2UgaXQgaW5zdGVhZC4KKwkJICAjICR4ZGlyIHdhcyBwcmVwZW5kZWQgdG8gJHBpY19vYmplY3QgYWJvdmUuCisJCSAgbm9uX3BpY19vYmplY3Q9IiRwaWNfb2JqZWN0IgorCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkJZmkKKwkgICAgICBlbHNlCisJCSMgT25seSBhbiBlcnJvciBpZiBub3QgZG9pbmcgYSBkcnktcnVuLgorCQlpZiAkb3B0X2RyeV9ydW47IHRoZW4KKwkJICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCQkgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCisJCSAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwkJICBmdW5jX2xvMm8gIiRhcmciCisJCSAgcGljX29iamVjdD0keGRpciRvYmpkaXIvJGZ1bmNfbG8yb19yZXN1bHQKKwkJICBub25fcGljX29iamVjdD0keGRpciRmdW5jX2xvMm9fcmVzdWx0CisJCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkgICAgICAgIGVsc2UKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRhcmcnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0IgorCQlmaQorCSAgICAgIGZpCisJICAgIGRvbmUKKwkgIGVsc2UKKwkgICAgZnVuY19mYXRhbF9lcnJvciAibGluayBpbnB1dCBmaWxlIFxgJGFyZycgZG9lcyBub3QgZXhpc3QiCisJICBmaQorCSAgYXJnPSRzYXZlX2FyZworCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXByZWNpb3VzX3JlZ2V4KQorCSAgcHJlY2lvdXNfZmlsZXNfcmVnZXg9IiRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJcmVsZWFzZSkKKwkgIHJlbGVhc2U9Ii0kYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXJwYXRoIHwgeHJwYXRoKQorCSAgIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJICBjYXNlICRhcmcgaW4KKwkgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKwkgICopCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgYWJzb2x1dGUgcnVuLXBhdGhzIGFyZSBhbGxvd2VkIgorCSAgICA7OworCSAgZXNhYworCSAgaWYgdGVzdCAiJHByZXYiID0gcnBhdGg7IHRoZW4KKwkgICAgY2FzZSAiJHJwYXRoICIgaW4KKwkgICAgKiIgJGFyZyAiKikgOzsKKwkgICAgKikgcnBhdGg9IiRycGF0aCAkYXJnIiA7OworCSAgICBlc2FjCisJICBlbHNlCisJICAgIGNhc2UgIiR4cnBhdGggIiBpbgorCSAgICAqIiAkYXJnICIqKSA7OworCSAgICAqKSB4cnBhdGg9IiR4cnBhdGggJGFyZyIgOzsKKwkgICAgZXNhYworCSAgZmkKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlzaHJleHQpCisJICBzaHJleHRfY21kcz0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwl3ZWFrKQorCSAgd2Vha19saWJzPSIkd2Vha19saWJzICRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJeGNjbGlua2VyKQorCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRxYXJnIgorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkcWFyZyIKKwkgIHByZXY9CisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkcWFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCXhjb21waWxlcikKKwkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHFhcmciCisJICBwcmV2PQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHFhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHFhcmciCisJICBjb250aW51ZQorCSAgOzsKKwl4bGlua2VyKQorCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRxYXJnIgorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkd2wkcWFyZyIKKwkgIHByZXY9CisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkd2wkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkd2wkcWFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCSopCisJICBldmFsICIkcHJldj1cIlwkYXJnXCIiCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJZXNhYworICAgICAgZmkgIyB0ZXN0IC1uICIkcHJldiIKKworICAgICAgcHJldmFyZz0iJGFyZyIKKworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtYWxsLXN0YXRpYykKKwlpZiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICMgU2VlIGNvbW1lbnQgZm9yIC1zdGF0aWMgZmxhZyBiZWxvdywgZm9yIG1vcmUgZGV0YWlscy4KKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRsaW5rX3N0YXRpY19mbGFnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRsaW5rX3N0YXRpY19mbGFnIgorCWZpCisJY29udGludWUKKwk7OworCisgICAgICAtYWxsb3ctdW5kZWZpbmVkKQorCSMgRklYTUU6IHJlbW92ZSB0aGlzIGZsYWcgc29tZXRpbWUgaW4gdGhlIGZ1dHVyZS4KKwlmdW5jX2ZhdGFsX2Vycm9yICJcYC1hbGxvdy11bmRlZmluZWQnIG11c3Qgbm90IGJlIHVzZWQgYmVjYXVzZSBpdCBpcyB0aGUgZGVmYXVsdCIKKwk7OworCisgICAgICAtYXZvaWQtdmVyc2lvbikKKwlhdm9pZF92ZXJzaW9uPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWJpbmRpcikKKwlwcmV2PWJpbmRpcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLWRsb3BlbikKKwlwcmV2PWRsZmlsZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1kbHByZW9wZW4pCisJcHJldj1kbHByZWZpbGVzCisJY29udGludWUKKwk7OworCisgICAgICAtZXhwb3J0LWR5bmFtaWMpCisJZXhwb3J0X2R5bmFtaWM9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtZXhwb3J0LXN5bWJvbHMgfCAtZXhwb3J0LXN5bWJvbHMtcmVnZXgpCisJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiB8fCB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisJICBmdW5jX2ZhdGFsX2Vycm9yICJtb3JlIHRoYW4gb25lIC1leHBvcnRlZC1zeW1ib2xzIGFyZ3VtZW50IGlzIG5vdCBhbGxvd2VkIgorCWZpCisJaWYgdGVzdCAiWCRhcmciID0gIlgtZXhwb3J0LXN5bWJvbHMiOyB0aGVuCisJICBwcmV2PWV4cHN5bXMKKwllbHNlCisJICBwcmV2PWV4cHN5bXNfcmVnZXgKKwlmaQorCWNvbnRpbnVlCisJOzsKKworICAgICAgLWZyYW1ld29yaykKKwlwcmV2PWZyYW1ld29yaworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWluc3QtcHJlZml4LWRpcikKKwlwcmV2PWluc3RfcHJlZml4CisJY29udGludWUKKwk7OworCisgICAgICAjIFRoZSBuYXRpdmUgSVJJWCBsaW5rZXIgdW5kZXJzdGFuZHMgLUxBTkc6KiwgLUxJU1Q6KiBhbmQgLUxOTzoqCisgICAgICAjIHNvLCBpZiB3ZSBzZWUgdGhlc2UgZmxhZ3MgYmUgY2FyZWZ1bCBub3QgdG8gdHJlYXQgdGhlbSBsaWtlIC1MCisgICAgICAtTFtBLVpdW0EtWl0qOiopCisJY2FzZSAkd2l0aF9nY2MvJGhvc3QgaW4KKwluby8qLSotaXJpeCogfCAvKi0qLWlyaXgqKQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorCSAgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtTCopCisJZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGFyZyIKKwlkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCWlmIHRlc3QgLXogIiRkaXIiOyB0aGVuCisJICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAicmVxdWlyZSBubyBzcGFjZSBiZXR3ZWVuIFxgLUwnIGFuZCBcYCQxJyIKKwkgIGVsc2UKKwkgICAgZnVuY19mYXRhbF9lcnJvciAibmVlZCBwYXRoIGZvciBcYC1MJyBvcHRpb24iCisJICBmaQorCWZpCisJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJY2FzZSAkZGlyIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworCSopCisJICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCisJICB0ZXN0IC16ICIkYWJzZGlyIiAmJiBcCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkZGlyJyIKKwkgIGRpcj0iJGFic2RpciIKKwkgIDs7CisJZXNhYworCWNhc2UgIiRkZXBsaWJzICIgaW4KKwkqIiAtTCRkaXIgIiopIDs7CisJKikKKwkgIGRlcGxpYnM9IiRkZXBsaWJzIC1MJGRpciIKKwkgIGxpYl9zZWFyY2hfcGF0aD0iJGxpYl9zZWFyY2hfcGF0aCAkZGlyIgorCSAgOzsKKwllc2FjCisJY2FzZSAkaG9zdCBpbgorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCisJICB0ZXN0YmluZGlyPWAkRUNITyAiJGRpciIgfCAkU0VEICdzKi9saWIkKi9iaW4qJ2AKKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorCSAgKiI6JGRpcjoiKikgOzsKKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSRkaXI7OworCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JGRpciI7OworCSAgZXNhYworCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisJICAqIjokdGVzdGJpbmRpcjoiKikgOzsKKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSR0ZXN0YmluZGlyOzsKKwkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiR0ZXN0YmluZGlyIjs7CisJICBlc2FjCisJICA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1sKikKKwlpZiB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgfHwgdGVzdCAiWCRhcmciID0gIlgtbG0iOyB0aGVuCisJICBjYXNlICRob3N0IGluCisJICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotYmVvcyogfCAqLWNlZ2NjKiB8ICotKi1oYWlrdSopCisJICAgICMgVGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgQyBvciBtYXRoIGxpYnJhcnkgKGFzIHN1Y2gpCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotb3MyKikKKwkgICAgIyBUaGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBDIGxpYnJhcnkgKGFzIHN1Y2gpCisJICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorCSAgICA7OworCSAgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSopCisJICAgICMgRG8gbm90IGluY2x1ZGUgbGliYyBkdWUgdG8gdXMgaGF2aW5nIGxpYmMvbGliY19yLgorCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkgICAgIyBSaGFwc29keSBDIGFuZCBtYXRoIGxpYnJhcmllcyBhcmUgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsKKwkgICAgZGVwbGlicz0iJGRlcGxpYnMgU3lzdGVtLmx0ZnJhbWV3b3JrIgorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgKi0qLXNjbzMuMnY1KiB8ICotKi1zY281djYqKQorCSAgICAjIENhdXNlcyBwcm9ibGVtcyB3aXRoIF9fY3R5cGUKKwkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotc3lzdjQuMnV3MiogfCAqLSotc3lzdjUqIHwgKi0qLXVuaXh3YXJlKiB8ICotKi1PcGVuVU5JWCopCisJICAgICMgQ29tcGlsZXIgaW5zZXJ0cyBsaWJjIGluIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aHJlYWRzIHRvIHdvcmsKKwkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIDs7CisJICBlc2FjCisJZWxpZiB0ZXN0ICJYJGFyZyIgPSAiWC1sY19yIjsgdGhlbgorCSBjYXNlICRob3N0IGluCisJICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqKQorCSAgICMgRG8gbm90IGluY2x1ZGUgbGliY19yIGRpcmVjdGx5LCB1c2UgLXB0aHJlYWQgZmxhZy4KKwkgICBjb250aW51ZQorCSAgIDs7CisJIGVzYWMKKwlmaQorCWRlcGxpYnM9IiRkZXBsaWJzICRhcmciCisJY29udGludWUKKwk7OworCisgICAgICAtbW9kdWxlKQorCW1vZHVsZT15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgICMgVHJ1NjQgVU5JWCB1c2VzIC1tb2RlbCBbYXJnXSB0byBkZXRlcm1pbmUgdGhlIGxheW91dCBvZiBDKysKKyAgICAgICMgY2xhc3NlcywgbmFtZSBtYW5nbGluZywgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZy4KKyAgICAgICMgRGFyd2luIHVzZXMgdGhlIC1hcmNoIGZsYWcgdG8gZGV0ZXJtaW5lIG91dHB1dCBhcmNoaXRlY3R1cmUuCisgICAgICAtbW9kZWx8LWFyY2h8LWlzeXNyb290KQorCWNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGFyZyIKKwlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorCXByZXY9eGNvbXBpbGVyCisJY29udGludWUKKwk7OworCisgICAgICAtbXR8LW10aHJlYWRzfC1rdGhyZWFkfC1LdGhyZWFkfC1wdGhyZWFkfC1wdGhyZWFkc3wtLXRocmVhZC1zYWZlfC10aHJlYWRzKQorCWNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGFyZyIKKwlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisJICAgICoiICRhcmcgIiopIDs7CisJICAgICogKSBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRhcmciIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLW11bHRpX21vZHVsZSkKKwlzaW5nbGVfbW9kdWxlPSIke3dsfS1tdWx0aV9tb2R1bGUiCisJY29udGludWUKKwk7OworCisgICAgICAtbm8tZmFzdC1pbnN0YWxsKQorCWZhc3RfaW5zdGFsbD1ubworCWNvbnRpbnVlCisJOzsKKworICAgICAgLW5vLWluc3RhbGwpCisJY2FzZSAkaG9zdCBpbgorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi0qLWRhcndpbiogfCAqLWNlZ2NjKikKKwkgICMgVGhlIFBBVEggaGFja2VyeSBpbiB3cmFwcGVyIHNjcmlwdHMgaXMgcmVxdWlyZWQgb24gV2luZG93cworCSAgIyBhbmQgRGFyd2luIGluIG9yZGVyIGZvciB0aGUgbG9hZGVyIHRvIGZpbmQgYW55IGRsbHMgaXQgbmVlZHMuCisJICBmdW5jX3dhcm5pbmcgIlxgLW5vLWluc3RhbGwnIGlzIGlnbm9yZWQgZm9yICRob3N0IgorCSAgZnVuY193YXJuaW5nICJhc3N1bWluZyBcYC1uby1mYXN0LWluc3RhbGwnIGluc3RlYWQiCisJICBmYXN0X2luc3RhbGw9bm8KKwkgIDs7CisJKikgbm9faW5zdGFsbD15ZXMgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtbm8tdW5kZWZpbmVkKQorCWFsbG93X3VuZGVmaW5lZD1ubworCWNvbnRpbnVlCisJOzsKKworICAgICAgLW9iamVjdGxpc3QpCisJcHJldj1vYmplY3RsaXN0CisJY29udGludWUKKwk7OworCisgICAgICAtbykgcHJldj1vdXRwdXQgOzsKKworICAgICAgLXByZWNpb3VzLWZpbGVzLXJlZ2V4KQorCXByZXY9cHJlY2lvdXNfcmVnZXgKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1yZWxlYXNlKQorCXByZXY9cmVsZWFzZQorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXJwYXRoKQorCXByZXY9cnBhdGgKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1SKQorCXByZXY9eHJwYXRoCisJY29udGludWUKKwk7OworCisgICAgICAtUiopCisJZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGFyZyIKKwlkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCWNhc2UgJGRpciBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKwkqKQorCSAgZnVuY19mYXRhbF9lcnJvciAib25seSBhYnNvbHV0ZSBydW4tcGF0aHMgYXJlIGFsbG93ZWQiCisJICA7OworCWVzYWMKKwljYXNlICIkeHJwYXRoICIgaW4KKwkqIiAkZGlyICIqKSA7OworCSopIHhycGF0aD0iJHhycGF0aCAkZGlyIiA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1zaGFyZWQpCisJIyBUaGUgZWZmZWN0cyBvZiAtc2hhcmVkIGFyZSBkZWZpbmVkIGluIGEgcHJldmlvdXMgbG9vcC4KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1zaHJleHQpCisJcHJldj1zaHJleHQKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1zdGF0aWMgfCAtc3RhdGljLWxpYnRvb2wtbGlicykKKwkjIFRoZSBlZmZlY3RzIG9mIC1zdGF0aWMgYXJlIGRlZmluZWQgaW4gYSBwcmV2aW91cyBsb29wLgorCSMgV2UgdXNlZCB0byBkbyB0aGUgc2FtZSBhcyAtYWxsLXN0YXRpYyBvbiBwbGF0Zm9ybXMgdGhhdAorCSMgZGlkbid0IGhhdmUgYSBQSUMgZmxhZywgYnV0IHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGVmZmVjdHMKKwkjIHdvdWxkIGJlIGVxdWl2YWxlbnQgd2FzIHdyb25nLiAgSXQgd291bGQgYnJlYWsgb24gYXQgbGVhc3QKKwkjIERpZ2l0YWwgVW5peCBhbmQgQUlYLgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXRocmVhZC1zYWZlKQorCXRocmVhZF9zYWZlPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXZlcnNpb24taW5mbykKKwlwcmV2PXZpbmZvCisJY29udGludWUKKwk7OworCisgICAgICAtdmVyc2lvbi1udW1iZXIpCisJcHJldj12aW5mbworCXZpbmZvX251bWJlcj15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC13ZWFrKQorICAgICAgICBwcmV2PXdlYWsKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1XYywqKQorCWZ1bmNfc3RyaXBuYW1lICctV2MsJyAnJyAiJGFyZyIKKwlhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwlhcmc9CisJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisJZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCisJICBJRlM9IiRzYXZlX2lmcyIKKyAgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkZmxhZyIKKwkgIGFyZz0iJGFyZyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwlkb25lCisJSUZTPSIkc2F2ZV9pZnMiCisJZnVuY19zdHJpcG5hbWUgJyAnICcnICIkYXJnIgorCWFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJOzsKKworICAgICAgLVdsLCopCisJZnVuY19zdHJpcG5hbWUgJy1XbCwnICcnICIkYXJnIgorCWFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCWFyZz0KKwlzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKKwlmb3IgZmxhZyBpbiAkYXJnczsgZG8KKwkgIElGUz0iJHNhdmVfaWZzIgorICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgorCSAgYXJnPSIkYXJnICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHdsJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwlkb25lCisJSUZTPSIkc2F2ZV9pZnMiCisJZnVuY19zdHJpcG5hbWUgJyAnICcnICIkYXJnIgorCWFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJOzsKKworICAgICAgLVhjb21waWxlcikKKwlwcmV2PXhjb21waWxlcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLVhsaW5rZXIpCisJcHJldj14bGlua2VyCisJY29udGludWUKKwk7OworCisgICAgICAtWENDbGlua2VyKQorCXByZXY9eGNjbGlua2VyCisJY29udGludWUKKwk7OworCisgICAgICAjIC1tc2dfKiBmb3Igb3NmIGNjCisgICAgICAtbXNnXyopCisJZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwk7OworCisgICAgICAjIEZsYWdzIHRvIGJlIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZCwgd2l0aCByYXRpb25hbGU6CisgICAgICAjIC02NCwgLW1pcHNbMC05XSAgICAgIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIFNHSSBjb21waWxlcgorICAgICAgIyAtclswLTldWzAtOV0qICAgICAgICBzcGVjaWZ5IHByb2Nlc3NvciBmb3IgdGhlIFNHSSBjb21waWxlcgorICAgICAgIyAteGFyY2g9KiwgLXh0YXJnZXQ9KiBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBTdW4gY29tcGlsZXIKKyAgICAgICMgK0RBKiwgK0REKiAgICAgICAgICAgZW5hYmxlIDY0LWJpdCBtb2RlIGZvciB0aGUgSFAgY29tcGlsZXIKKyAgICAgICMgLXEqICAgICAgICAgICAgICAgICAgY29tcGlsZXIgYXJncyBmb3IgdGhlIElCTSBjb21waWxlcgorICAgICAgIyAtbSosIC10WzQ1XSosIC10eHNjYWxlKiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmxhZ3MgZm9yIEdDQworICAgICAgIyAtRi9wYXRoICAgICAgICAgICAgICBwYXRoIHRvIHVuaW5zdGFsbGVkIGZyYW1ld29ya3MsIGdjYyBvbiBkYXJ3aW4KKyAgICAgICMgLXAsIC1wZywgLS1jb3ZlcmFnZSwgLWZwcm9maWxlLSogIHByb2ZpbGluZyBmbGFncyBmb3IgR0NDCisgICAgICAjIEBmaWxlICAgICAgICAgICAgICAgIEdDQyByZXNwb25zZSBmaWxlcworICAgICAgIyAtdHA9KiAgICAgICAgICAgICAgICBQb3J0bGFuZCBwZ2NjIHRhcmdldCBwcm9jZXNzb3Igc2VsZWN0aW9uCisgICAgICAtNjR8LW1pcHNbMC05XXwtclswLTldWzAtOV0qfC14YXJjaD0qfC14dGFyZ2V0PSp8K0RBKnwrREQqfC1xKnwtbSp8IFwKKyAgICAgIC10WzQ1XSp8LXR4c2NhbGUqfC1wfC1wZ3wtLWNvdmVyYWdlfC1mcHJvZmlsZS0qfC1GKnxAKnwtdHA9KikKKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAgICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisgICAgICAgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGFyZyIKKyAgICAgICAgY29udGludWUKKyAgICAgICAgOzsKKworICAgICAgIyBTb21lIG90aGVyIGNvbXBpbGVyIGZsYWcuCisgICAgICAtKiB8ICsqKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCTs7CisKKyAgICAgICouJG9iamV4dCkKKwkjIEEgc3RhbmRhcmQgb2JqZWN0LgorCW9ianM9IiRvYmpzICRhcmciCisJOzsKKworICAgICAgKi5sbykKKwkjIEEgbGlidG9vbC1jb250cm9sbGVkIG9iamVjdC4KKworCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIG9iamVjdC4KKwlpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkYXJnIjsgdGhlbgorCSAgcGljX29iamVjdD0KKwkgIG5vbl9waWNfb2JqZWN0PQorCisJICAjIFJlYWQgdGhlIC5sbyBmaWxlCisJICBmdW5jX3NvdXJjZSAiJGFyZyIKKworCSAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8CisJICAgICB0ZXN0IC16ICIkbm9uX3BpY19vYmplY3QiIHx8CisJICAgICB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lICYmCisJICAgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiID0gbm9uZTsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgXGAkYXJnJyIKKwkgIGZpCisKKwkgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisJICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCSAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwkgIGlmIHRlc3QgIiRwaWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICAgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJICAgIHBpY19vYmplY3Q9IiR4ZGlyJHBpY19vYmplY3QiCisKKwkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorCSAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB5ZXM7IHRoZW4KKwkJZGxmaWxlcz0iJGRsZmlsZXMgJHBpY19vYmplY3QiCisJCXByZXY9CisJCWNvbnRpbnVlCisJICAgICAgZWxzZQorCQkjIElmIGxpYnRvb2wgb2JqZWN0cyBhcmUgdW5zdXBwb3J0ZWQsIHRoZW4gd2UgbmVlZCB0byBwcmVsb2FkLgorCQlwcmV2PWRscHJlZmlsZXMKKwkgICAgICBmaQorCSAgICBmaQorCisJICAgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCisJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKwkgICAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCisJICAgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJHBpY19vYmplY3QiCisJICAgICAgcHJldj0KKwkgICAgZmkKKworCSAgICAjIEEgUElDIG9iamVjdC4KKwkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorCSAgICBhcmc9IiRwaWNfb2JqZWN0IgorCSAgZmkKKworCSAgIyBOb24tUElDIG9iamVjdC4KKwkgIGlmIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCSAgICBub25fcGljX29iamVjdD0iJHhkaXIkbm9uX3BpY19vYmplY3QiCisKKwkgICAgIyBBIHN0YW5kYXJkIG5vbi1QSUMgb2JqZWN0CisJICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkgICAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgOyB0aGVuCisJICAgICAgYXJnPSIkbm9uX3BpY19vYmplY3QiCisJICAgIGZpCisJICBlbHNlCisJICAgICMgSWYgdGhlIFBJQyBvYmplY3QgZXhpc3RzLCB1c2UgaXQgaW5zdGVhZC4KKwkgICAgIyAkeGRpciB3YXMgcHJlcGVuZGVkIHRvICRwaWNfb2JqZWN0IGFib3ZlLgorCSAgICBub25fcGljX29iamVjdD0iJHBpY19vYmplY3QiCisJICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkgIGZpCisJZWxzZQorCSAgIyBPbmx5IGFuIGVycm9yIGlmIG5vdCBkb2luZyBhIGRyeS1ydW4uCisJICBpZiAkb3B0X2RyeV9ydW47IHRoZW4KKwkgICAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKwkgICAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKKwkgICAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwkgICAgZnVuY19sbzJvICIkYXJnIgorCSAgICBwaWNfb2JqZWN0PSR4ZGlyJG9iamRpci8kZnVuY19sbzJvX3Jlc3VsdAorCSAgICBub25fcGljX29iamVjdD0keGRpciRmdW5jX2xvMm9fcmVzdWx0CisJICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKwkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgZWxzZQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRhcmcnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0IgorCSAgZmkKKwlmaQorCTs7CisKKyAgICAgICouJGxpYmV4dCkKKwkjIEFuIGFyY2hpdmUuCisJZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKwlvbGRfZGVwbGlicz0iJG9sZF9kZXBsaWJzICRhcmciCisJY29udGludWUKKwk7OworCisgICAgICAqLmxhKQorCSMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgbGlicmFyeS4KKworCWlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkgICMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgorCSAgZGxmaWxlcz0iJGRsZmlsZXMgJGFyZyIKKwkgIHByZXY9CisJZWxpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJICAjIFRoZSBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxwcmVvcGVuLgorCSAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGFyZyIKKwkgIHByZXY9CisJZWxzZQorCSAgZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKwlmaQorCWNvbnRpbnVlCisJOzsKKworICAgICAgIyBTb21lIG90aGVyIGNvbXBpbGVyIGFyZ3VtZW50LgorICAgICAgKikKKwkjIFVua25vd24gYXJndW1lbnRzIGluIGJvdGggZmluYWxpemVfY29tbWFuZCBhbmQgY29tcGlsZV9jb21tYW5kIG5lZWQKKwkjIHRvIGJlIGFlc3RoZXRpY2FsbHkgcXVvdGVkIGJlY2F1c2UgdGhleSBhcmUgZXZhbGVkIGxhdGVyLgorCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJOzsKKyAgICAgIGVzYWMgIyBhcmcKKworICAgICAgIyBOb3cgYWN0dWFsbHkgc3Vic3RpdHV0ZSB0aGUgYXJndW1lbnQgaW50byB0aGUgY29tbWFuZHMuCisgICAgICBpZiB0ZXN0IC1uICIkYXJnIjsgdGhlbgorCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisgICAgICBmaQorICAgIGRvbmUgIyBhcmd1bWVudCBwYXJzaW5nIGxvb3AKKworICAgIHRlc3QgLW4gIiRwcmV2IiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInRoZSBcYCRwcmV2YXJnJyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCisKKyAgICBpZiB0ZXN0ICIkZXhwb3J0X2R5bmFtaWMiID0geWVzICYmIHRlc3QgLW4gIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMiOyB0aGVuCisgICAgICBldmFsIGFyZz1cIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorICAgIGZpCisKKyAgICBvbGRsaWJzPQorICAgICMgY2FsY3VsYXRlIHRoZSBuYW1lIG9mIHRoZSBmaWxlLCB3aXRob3V0IGl0cyBkaXJlY3RvcnkKKyAgICBmdW5jX2Jhc2VuYW1lICIkb3V0cHV0IgorICAgIG91dHB1dG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICBsaWJvYmpzX3NhdmU9IiRsaWJvYmpzIgorCisgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisgICAgICAjIGdldCB0aGUgZGlyZWN0b3JpZXMgbGlzdGVkIGluICRzaGxpYnBhdGhfdmFyCisgICAgICBldmFsIHNobGliX3NlYXJjaF9wYXRoPVxgXCRFQ0hPIFwiXCR7JHNobGlicGF0aF92YXJ9XCIgXHwgXCRTRUQgXCdzLzovIC9nXCdcYAorICAgIGVsc2UKKyAgICAgIHNobGliX3NlYXJjaF9wYXRoPQorICAgIGZpCisgICAgZXZhbCBzeXNfbGliX3NlYXJjaF9wYXRoPVwiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlY1wiCisgICAgZXZhbCBzeXNfbGliX2Rsc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWNcIgorCisgICAgZnVuY19kaXJuYW1lICIkb3V0cHV0IiAiLyIgIiIKKyAgICBvdXRwdXRfb2JqZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCRvYmpkaXIiCisgICAgIyBDcmVhdGUgdGhlIG9iamVjdCBkaXJlY3RvcnkuCisgICAgZnVuY19ta2Rpcl9wICIkb3V0cHV0X29iamRpciIKKworICAgICMgRGV0ZXJtaW5lIHRoZSB0eXBlIG9mIG91dHB1dAorICAgIGNhc2UgJG91dHB1dCBpbgorICAgICIiKQorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dCBmaWxlIgorICAgICAgOzsKKyAgICAqLiRsaWJleHQpIGxpbmttb2RlPW9sZGxpYiA7OworICAgICoubG8gfCAqLiRvYmpleHQpIGxpbmttb2RlPW9iaiA7OworICAgICoubGEpIGxpbmttb2RlPWxpYiA7OworICAgICopIGxpbmttb2RlPXByb2cgOzsgIyBBbnl0aGluZyBlbHNlIHNob3VsZCBiZSBhIHByb2dyYW0uCisgICAgZXNhYworCisgICAgc3BlY2lhbGRlcGxpYnM9CisKKyAgICBsaWJzPQorICAgICMgRmluZCBhbGwgaW50ZXJkZXBlbmRlbnQgZGVwbGlicyBieSBzZWFyY2hpbmcgZm9yIGxpYnJhcmllcworICAgICMgdGhhdCBhcmUgbGlua2VkIG1vcmUgdGhhbiBvbmNlIChlLmcuIC1sYSAtbGIgLWxhKQorICAgIGZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisgICAgICBpZiAkb3B0X2R1cGxpY2F0ZV9kZXBzIDsgdGhlbgorCWNhc2UgIiRsaWJzICIgaW4KKwkqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGxpYnM9IiRsaWJzICRkZXBsaWIiCisgICAgZG9uZQorCisgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorICAgICAgbGlicz0iJHByZWRlcHMgJGxpYnMgJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCAkcG9zdGRlcHMiCisKKyAgICAgICMgQ29tcHV0ZSBsaWJyYXJpZXMgdGhhdCBhcmUgbGlzdGVkIG1vcmUgdGhhbiBvbmNlIGluICRwcmVkZXBzCisgICAgICAjICRwb3N0ZGVwcyBhbmQgbWFyayB0aGVtIGFzIHNwZWNpYWwgKGkuZS4sIHdob3NlIGR1cGxpY2F0ZXMgYXJlCisgICAgICAjIG5vdCB0byBiZSBlbGltaW5hdGVkKS4KKyAgICAgIHByZV9wb3N0X2RlcHM9CisgICAgICBpZiAkb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwczsgdGhlbgorCWZvciBwcmVfcG9zdF9kZXAgaW4gJHByZWRlcHMgJHBvc3RkZXBzOyBkbworCSAgY2FzZSAiJHByZV9wb3N0X2RlcHMgIiBpbgorCSAgKiIgJHByZV9wb3N0X2RlcCAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkcHJlX3Bvc3RfZGVwcyIgOzsKKwkgIGVzYWMKKwkgIHByZV9wb3N0X2RlcHM9IiRwcmVfcG9zdF9kZXBzICRwcmVfcG9zdF9kZXAiCisJZG9uZQorICAgICAgZmkKKyAgICAgIHByZV9wb3N0X2RlcHM9CisgICAgZmkKKworICAgIGRlcGxpYnM9CisgICAgbmV3ZGVwZW5kZW5jeV9saWJzPQorICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0KKyAgICBuZWVkX3JlbGluaz1ubyAjIHdoZXRoZXIgd2UncmUgbGlua2luZyBhbnkgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKyAgICBub3RpbnN0X2RlcGxpYnM9ICMgbm90LWluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworICAgIG5vdGluc3RfcGF0aD0gIyBwYXRocyB0aGF0IGNvbnRhaW4gbm90LWluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworCisgICAgY2FzZSAkbGlua21vZGUgaW4KKyAgICBsaWIpCisJcGFzc2VzPSJjb252IGRscHJlb3BlbiBsaW5rIgorCWZvciBmaWxlIGluICRkbGZpbGVzICRkbHByZWZpbGVzOyBkbworCSAgY2FzZSAkZmlsZSBpbgorCSAgKi5sYSkgOzsKKwkgICopCisJICAgIGZ1bmNfZmF0YWxfaGVscCAibGlicmFyaWVzIGNhbiBcYC1kbG9wZW4nIG9ubHkgbGlidG9vbCBsaWJyYXJpZXM6ICRmaWxlIgorCSAgICA7OworCSAgZXNhYworCWRvbmUKKwk7OworICAgIHByb2cpCisJY29tcGlsZV9kZXBsaWJzPQorCWZpbmFsaXplX2RlcGxpYnM9CisJYWxsZGVwbGlicz1ubworCW5ld2RsZmlsZXM9CisJbmV3ZGxwcmVmaWxlcz0KKwlwYXNzZXM9ImNvbnYgc2NhbiBkbG9wZW4gZGxwcmVvcGVuIGxpbmsiCisJOzsKKyAgICAqKSAgcGFzc2VzPSJjb252IgorCTs7CisgICAgZXNhYworCisgICAgZm9yIHBhc3MgaW4gJHBhc3NlczsgZG8KKyAgICAgICMgVGhlIHByZW9wZW4gcGFzcyBpbiBsaWIgbW9kZSByZXZlcnNlcyAkZGVwbGliczsgcHV0IGl0IGJhY2sgaGVyZQorICAgICAgIyBzbyB0aGF0IC1MIGNvbWVzIGJlZm9yZSBsaWJzIHRoYXQgbmVlZCBpdCBmb3IgaW5zdGFuY2UuLi4KKyAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiOyB0aGVuCisJIyMgRklYTUU6IEZpbmQgdGhlIHBsYWNlIHdoZXJlIHRoZSBsaXN0IGlzIHJlYnVpbHQgaW4gdGhlIHdyb25nCisJIyMgICAgICAgIG9yZGVyLCBhbmQgZml4IGl0IHRoZXJlIHByb3Blcmx5CisgICAgICAgIHRtcF9kZXBsaWJzPQorCWZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJICB0bXBfZGVwbGlicz0iJGRlcGxpYiAkdG1wX2RlcGxpYnMiCisJZG9uZQorCWRlcGxpYnM9IiR0bXBfZGVwbGlicyIKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiIHx8CisJIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxzY2FuIjsgdGhlbgorCWxpYnM9IiRkZXBsaWJzIgorCWRlcGxpYnM9CisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwljYXNlICRwYXNzIGluCisJZGxvcGVuKSBsaWJzPSIkZGxmaWxlcyIgOzsKKwlkbHByZW9wZW4pIGxpYnM9IiRkbHByZWZpbGVzIiA7OworCWxpbmspIGxpYnM9IiRkZXBsaWJzICVERVBMSUJTJSAkZGVwZW5kZW5jeV9saWJzIiA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixkbHByZW9wZW4iOyB0aGVuCisJIyBDb2xsZWN0IGFuZCBmb3J3YXJkIGRlcGxpYnMgb2YgcHJlb3BlbmVkIGxpYnRvb2wgbGlicworCWZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisJICAjIElnbm9yZSBub24tbGlidG9vbC1saWJzCisJICBkZXBlbmRlbmN5X2xpYnM9CisJICBjYXNlICRsaWIgaW4KKwkgICoubGEpCWZ1bmNfc291cmNlICIkbGliIiA7OworCSAgZXNhYworCisJICAjIENvbGxlY3QgcHJlb3BlbmVkIGxpYnRvb2wgZGVwbGlicywgZXhjZXB0IGFueSB0aGlzIGxpYnJhcnkKKwkgICMgaGFzIGRlY2xhcmVkIGFzIHdlYWsgbGlicworCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICBmdW5jX2Jhc2VuYW1lICIkZGVwbGliIgorICAgICAgICAgICAgZGVwbGliX2Jhc2U9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJICAgIGNhc2UgIiAkd2Vha19saWJzICIgaW4KKwkgICAgKiIgJGRlcGxpYl9iYXNlICIqKSA7OworCSAgICAqKSBkZXBsaWJzPSIkZGVwbGlicyAkZGVwbGliIiA7OworCSAgICBlc2FjCisJICBkb25lCisJZG9uZQorCWxpYnM9IiRkbHByZWZpbGVzIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRwYXNzIiA9IGRsb3BlbjsgdGhlbgorCSMgQ29sbGVjdCBkbHByZW9wZW5lZCBsaWJyYXJpZXMKKwlzYXZlX2RlcGxpYnM9IiRkZXBsaWJzIgorCWRlcGxpYnM9CisgICAgICBmaQorCisgICAgICBmb3IgZGVwbGliIGluICRsaWJzOyBkbworCWxpYj0KKwlmb3VuZD1ubworCWNhc2UgJGRlcGxpYiBpbgorCS1tdHwtbXRocmVhZHN8LWt0aHJlYWR8LUt0aHJlYWR8LXB0aHJlYWR8LXB0aHJlYWRzfC0tdGhyZWFkLXNhZmV8LXRocmVhZHMpCisJICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBlbHNlCisJICAgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYiIKKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiA7IHRoZW4KKwkJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKwkJICAgICoiICRkZXBsaWIgIiopIDs7CisJCSAgICAqICkgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkZGVwbGliIiA7OworCQllc2FjCisJICAgIGZpCisJICBmaQorCSAgY29udGludWUKKwkgIDs7CisJLWwqKQorCSAgaWYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWIgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nOyB0aGVuCisJICAgIGZ1bmNfd2FybmluZyAiXGAtbCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIKKwkgICAgY29udGludWUKKwkgIGZpCisJICBmdW5jX3N0cmlwbmFtZSAnLWwnICcnICIkZGVwbGliIgorCSAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisJICAgIHNlYXJjaGRpcnM9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGxpYl9zZWFyY2hfcGF0aCAkY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aCIKKwkgIGVsc2UKKwkgICAgc2VhcmNoZGlycz0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aCIKKwkgIGZpCisJICBmb3Igc2VhcmNoZGlyIGluICRzZWFyY2hkaXJzOyBkbworCSAgICBmb3Igc2VhcmNoX2V4dCBpbiAubGEgJHN0ZF9zaHJleHQgLnNvIC5hOyBkbworCSAgICAgICMgU2VhcmNoIHRoZSBsaWJ0b29sIGxpYnJhcnkKKwkgICAgICBsaWI9IiRzZWFyY2hkaXIvbGliJHtuYW1lfSR7c2VhcmNoX2V4dH0iCisJICAgICAgaWYgdGVzdCAtZiAiJGxpYiI7IHRoZW4KKwkJaWYgdGVzdCAiJHNlYXJjaF9leHQiID0gIi5sYSI7IHRoZW4KKwkJICBmb3VuZD15ZXMKKwkJZWxzZQorCQkgIGZvdW5kPW5vCisJCWZpCisJCWJyZWFrIDIKKwkgICAgICBmaQorCSAgICBkb25lCisJICBkb25lCisJICBpZiB0ZXN0ICIkZm91bmQiICE9IHllczsgdGhlbgorCSAgICAjIGRlcGxpYiBkb2Vzbid0IHNlZW0gdG8gYmUgYSBsaWJ0b29sIGxpYnJhcnkKKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgICAgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgZmkKKwkgICAgY29udGludWUKKwkgIGVsc2UgIyBkZXBsaWIgaXMgYSBsaWJ0b29sIGxpYnJhcnkKKwkgICAgIyBJZiAkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzICYmICRkZXBsaWIgaXMgYSBzdGRsaWIsCisJICAgICMgV2UgbmVlZCB0byBkbyBzb21lIHNwZWNpYWwgdGhpbmdzIGhlcmUsIGFuZCBub3QgbGF0ZXIuCisJICAgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkgICAgICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKQorCQlpZiBmdW5jX2xhbGliX3AgIiRsaWIiOyB0aGVuCisJCSAgbGlicmFyeV9uYW1lcz0KKwkJICBvbGRfbGlicmFyeT0KKwkJICBmdW5jX3NvdXJjZSAiJGxpYiIKKwkJICBmb3IgbCBpbiAkb2xkX2xpYnJhcnkgJGxpYnJhcnlfbmFtZXM7IGRvCisJCSAgICBsbD0iJGwiCisJCSAgZG9uZQorCQkgIGlmIHRlc3QgIlgkbGwiID0gIlgkb2xkX2xpYnJhcnkiIDsgdGhlbiAjIG9ubHkgc3RhdGljIHZlcnNpb24gYXZhaWxhYmxlCisJCSAgICBmb3VuZD1ubworCQkgICAgZnVuY19kaXJuYW1lICIkbGliIiAiIiAiLiIKKwkJICAgIGxhZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKwkJICAgIGxpYj0kbGFkaXIvJG9sZF9saWJyYXJ5CisJCSAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJCSAgICBlbHNlCisJCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJCSAgICAgIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgJiYgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJCSAgICBmaQorCQkgICAgY29udGludWUKKwkJICBmaQorCQlmaQorCQk7OworCSAgICAgICopIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZmkKKwkgIDs7ICMgLWwKKwkqLmx0ZnJhbWV3b3JrKQorCSAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliIDsgdGhlbgorCQljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCQkgICAgKiIgJGRlcGxpYiAiKikgOzsKKwkJICAgICogKSBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRkZXBsaWIiIDs7CisJCWVzYWMKKwkgICAgZmkKKwkgIGZpCisJICBjb250aW51ZQorCSAgOzsKKwktTCopCisJICBjYXNlICRsaW5rbW9kZSBpbgorCSAgbGliKQorCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICB0ZXN0ICIkcGFzcyIgPSBjb252ICYmIGNvbnRpbnVlCisJICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorCSAgICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwkgICAgOzsKKwkgIHByb2cpCisJICAgIGlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICAgIGNvbnRpbnVlCisJICAgIGZpCisJICAgIGlmIHRlc3QgIiRwYXNzIiA9IHNjYW47IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgZmkKKwkgICAgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKwkgICAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJICAgIDs7CisJICAqKQorCSAgICBmdW5jX3dhcm5pbmcgIlxgLUwnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzL29iamVjdHMiCisJICAgIDs7CisJICBlc2FjICMgbGlua21vZGUKKwkgIGNvbnRpbnVlCisJICA7OyAjIC1MCisJLVIqKQorCSAgaWYgdGVzdCAiJHBhc3MiID0gbGluazsgdGhlbgorCSAgICBmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkZGVwbGliIgorCSAgICBkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICAjIE1ha2Ugc3VyZSB0aGUgeHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgICBjYXNlICIkeHJwYXRoICIgaW4KKwkgICAgKiIgJGRpciAiKikgOzsKKwkgICAgKikgeHJwYXRoPSIkeHJwYXRoICRkaXIiIDs7CisJICAgIGVzYWMKKwkgIGZpCisJICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgY29udGludWUKKwkgIDs7CisJKi5sYSkgbGliPSIkZGVwbGliIiA7OworCSouJGxpYmV4dCkKKwkgIGlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgY29udGludWUKKwkgIGZpCisJICBjYXNlICRsaW5rbW9kZSBpbgorCSAgbGliKQorCSAgICAjIExpbmtpbmcgY29udmVuaWVuY2UgbW9kdWxlcyBpbnRvIHNoYXJlZCBsaWJyYXJpZXMgaXMgYWxsb3dlZCwKKwkgICAgIyBidXQgbGlua2luZyBvdGhlciBzdGF0aWMgbGlicmFyaWVzIGlzIG5vbi1wb3J0YWJsZS4KKwkgICAgY2FzZSAiICRkbHByZWNvbnZlbmllbmNlbGlicyAiIGluCisJICAgICoiICRkZXBsaWIgIiopIDs7CisJICAgICopCisJICAgICAgdmFsaWRfYV9saWI9bm8KKwkgICAgICBjYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCQltYXRjaF9wYXR0ZXJuKikKKwkJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAorCQkgIG1hdGNoX3BhdHRlcm5fcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDEgXCguKlwpImAKKwkJICBpZiBldmFsICJcJEVDSE8gXCIkZGVwbGliXCIiIDI+L2Rldi9udWxsIHwgJFNFRCAxMHEgXAorCQkgICAgfCAkRUdSRVAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkgICAgdmFsaWRfYV9saWI9eWVzCisJCSAgZmkKKwkJOzsKKwkJcGFzc19hbGwpCisJCSAgdmFsaWRfYV9saWI9eWVzCisJCTs7CisJICAgICAgZXNhYworCSAgICAgIGlmIHRlc3QgIiR2YWxpZF9hX2xpYiIgIT0geWVzOyB0aGVuCisJCWVjaG8KKwkJJEVDSE8gIioqKiBXYXJuaW5nOiBUcnlpbmcgdG8gbGluayB3aXRoIHN0YXRpYyBsaWIgYXJjaGl2ZSAkZGVwbGliLiIKKwkJZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQllY2hvICIqKiogYmVjYXVzZSB0aGUgZmlsZSBleHRlbnNpb25zIC4kbGliZXh0IG9mIHRoaXMgYXJndW1lbnQgbWFrZXMgbWUgYmVsaWV2ZSIKKwkJZWNobyAiKioqIHRoYXQgaXQgaXMganVzdCBhIHN0YXRpYyBhcmNoaXZlIHRoYXQgSSBzaG91bGQgbm90IHVzZSBoZXJlLiIKKwkgICAgICBlbHNlCisJCWVjaG8KKwkJJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIgorCQkkRUNITyAiKioqIHN0YXRpYyBsaWJyYXJ5ICRkZXBsaWIgaXMgbm90IHBvcnRhYmxlISIKKwkJZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgIHByb2cpCisJICAgIGlmIHRlc3QgIiRwYXNzIiAhPSBsaW5rOyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGZpCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBlc2FjICMgbGlua21vZGUKKwkgIDs7ICMgKi4kbGliZXh0CisJKi5sbyB8ICouJG9iamV4dCkKKwkgIGlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgIGVsaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuIHx8IHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbm87IHRoZW4KKwkgICAgICAjIElmIHRoZXJlIGlzIG5vIGRsb3BlbiBzdXBwb3J0IG9yIHdlJ3JlIGxpbmtpbmcgc3RhdGljYWxseSwKKwkgICAgICAjIHdlIG5lZWQgdG8gcHJlbG9hZC4KKwkgICAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGVwbGliIgorCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkZGVwbGliIgorCSAgICBmaQorCSAgZmkKKwkgIGNvbnRpbnVlCisJICA7OworCSVERVBMSUJTJSkKKwkgIGFsbGRlcGxpYnM9eWVzCisJICBjb250aW51ZQorCSAgOzsKKwllc2FjICMgY2FzZSAkZGVwbGliCisKKwlpZiB0ZXN0ICIkZm91bmQiID0geWVzIHx8IHRlc3QgLWYgIiRsaWIiOyB0aGVuIDoKKwllbHNlCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCB0aGUgbGlicmFyeSBcYCRsaWInIG9yIHVuaGFuZGxlZCBhcmd1bWVudCBcYCRkZXBsaWInIgorCWZpCisKKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRsaWIiIFwKKwkgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCisJZnVuY19kaXJuYW1lICIkbGliIiAiIiAiLiIKKwlsYWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwlkbG5hbWU9CisJZGxvcGVuPQorCWRscHJlb3Blbj0KKwlsaWJkaXI9CisJbGlicmFyeV9uYW1lcz0KKwlvbGRfbGlicmFyeT0KKwlpbmhlcml0ZWRfbGlua2VyX2ZsYWdzPQorCSMgSWYgdGhlIGxpYnJhcnkgd2FzIGluc3RhbGxlZCB3aXRoIGFuIG9sZCByZWxlYXNlIG9mIGxpYnRvb2wsCisJIyBpdCB3aWxsIG5vdCByZWRlZmluZSB2YXJpYWJsZXMgaW5zdGFsbGVkLCBvciBzaG91bGRub3RsaW5rCisJaW5zdGFsbGVkPXllcworCXNob3VsZG5vdGxpbms9bm8KKwlhdm9pZHRlbXBycGF0aD0KKworCisJIyBSZWFkIHRoZSAubGEgZmlsZQorCWZ1bmNfc291cmNlICIkbGliIgorCisJIyBDb252ZXJ0ICItZnJhbWV3b3JrIGZvbyIgdG8gImZvby5sdGZyYW1ld29yayIKKwlpZiB0ZXN0IC1uICIkaW5oZXJpdGVkX2xpbmtlcl9mbGFncyI7IHRoZW4KKwkgIHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPWAkRUNITyAiJGluaGVyaXRlZF9saW5rZXJfZmxhZ3MiIHwgJFNFRCAncy8tZnJhbWV3b3JrIFwoW14gJF0qXCkvXDEubHRmcmFtZXdvcmsvZydgCisJICBmb3IgdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyBpbiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZ3M7IGRvCisJICAgIGNhc2UgIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCSAgICAgICoiICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnICIqKSA7OworCSAgICAgICopIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWciOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWZpCisJZGVwZW5kZW5jeV9saWJzPWAkRUNITyAiICRkZXBlbmRlbmN5X2xpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixsaW5rIiB8fAorCSAgIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxzY2FuIiB8fAorCSAgIHsgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliOyB9OyB0aGVuCisJICB0ZXN0IC1uICIkZGxvcGVuIiAmJiBkbGZpbGVzPSIkZGxmaWxlcyAkZGxvcGVuIgorCSAgdGVzdCAtbiAiJGRscHJlb3BlbiIgJiYgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGRscHJlb3BlbiIKKwlmaQorCisJaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorCSAgIyBPbmx5IGNoZWNrIGZvciBjb252ZW5pZW5jZSBsaWJyYXJpZXMKKwkgIGRlcGxpYnM9IiRsaWIgJGRlcGxpYnMiCisJICBpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB0aGVuCisJICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yIFxgJGxpYiciCisJICAgIGZpCisJICAgICMgSXQgaXMgYSBsaWJ0b29sIGNvbnZlbmllbmNlIGxpYnJhcnksIHNvIGFkZCBpbiBpdHMgb2JqZWN0cy4KKwkgICAgY29udmVuaWVuY2U9IiRjb252ZW5pZW5jZSAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCisJICAgIG9sZF9jb252ZW5pZW5jZT0iJG9sZF9jb252ZW5pZW5jZSAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCisJICBlbGlmIHRlc3QgIiRsaW5rbW9kZSIgIT0gcHJvZyAmJiB0ZXN0ICIkbGlua21vZGUiICE9IGxpYjsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIGNvbnZlbmllbmNlIGxpYnJhcnkiCisJICBmaQorCSAgdG1wX2xpYnM9CisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGlmICRvcHRfZHVwbGljYXRlX2RlcHMgOyB0aGVuCisJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiCisJICBkb25lCisJICBjb250aW51ZQorCWZpICMgJHBhc3MgPSBjb252CisKKworCSMgR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IHdlIGxpbmsgYWdhaW5zdC4KKwlsaW5rbGliPQorCWZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KKwkgIGxpbmtsaWI9IiRsIgorCWRvbmUKKwlpZiB0ZXN0IC16ICIkbGlua2xpYiI7IHRoZW4KKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciBcYCRsaWInIgorCWZpCisKKwkjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRsb3Blbi4KKwlpZiB0ZXN0ICIkcGFzcyIgPSBkbG9wZW47IHRoZW4KKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCAtZGxvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogXGAkbGliJyIKKwkgIGZpCisJICBpZiB0ZXN0IC16ICIkZGxuYW1lIiB8fAorCSAgICAgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiAhPSB5ZXMgfHwKKwkgICAgIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbm87IHRoZW4KKwkgICAgIyBJZiB0aGVyZSBpcyBubyBkbG5hbWUsIG5vIGRsb3BlbiBzdXBwb3J0IG9yIHdlJ3JlIGxpbmtpbmcKKwkgICAgIyBzdGF0aWNhbGx5LCB3ZSBuZWVkIHRvIHByZWxvYWQuICBXZSBhbHNvIG5lZWQgdG8gcHJlbG9hZCBhbnkKKwkgICAgIyBkZXBlbmRlbnQgbGlicmFyaWVzIHNvIGxpYmx0ZGwncyBkZXBsaWIgcHJlbG9hZGVyIGRvZXNuJ3QKKwkgICAgIyBib21iIG91dCBpbiB0aGUgbG9hZCBkZXBsaWJzIHBoYXNlLgorCSAgICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkbGliICRkZXBlbmRlbmN5X2xpYnMiCisJICBlbHNlCisJICAgIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRsaWIiCisJICBmaQorCSAgY29udGludWUKKwlmaSAjICRwYXNzID0gZGxvcGVuCisKKwkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwljYXNlICRsYWRpciBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzX2xhZGlyPSIkbGFkaXIiIDs7CisJKikKKwkgIGFic19sYWRpcj1gY2QgIiRsYWRpciIgJiYgcHdkYAorCSAgaWYgdGVzdCAteiAiJGFic19sYWRpciI7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mIFxgJGxhZGlyJyIKKwkgICAgZnVuY193YXJuaW5nICJwYXNzaW5nIGl0IGxpdGVyYWxseSB0byB0aGUgbGlua2VyLCBhbHRob3VnaCBpdCBtaWdodCBmYWlsIgorCSAgICBhYnNfbGFkaXI9IiRsYWRpciIKKwkgIGZpCisJICA7OworCWVzYWMKKwlmdW5jX2Jhc2VuYW1lICIkbGliIgorCWxhbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCisJIyBGaW5kIHRoZSByZWxldmFudCBvYmplY3QgZGlyZWN0b3J5IGFuZCBsaWJyYXJ5IG5hbWUuCisJaWYgdGVzdCAiWCRpbnN0YWxsZWQiID0gWHllczsgdGhlbgorCSAgaWYgdGVzdCAhIC1mICIkbGliZGlyLyRsaW5rbGliIiAmJiB0ZXN0IC1mICIkYWJzX2xhZGlyLyRsaW5rbGliIjsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgImxpYnJhcnkgXGAkbGliJyB3YXMgbW92ZWQuIgorCSAgICBkaXI9IiRsYWRpciIKKwkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgorCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisJICBlbHNlCisJICAgIGRpcj0iJGxpYmRpciIKKwkgICAgYWJzZGlyPSIkbGliZGlyIgorCSAgZmkKKwkgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljIiA9IFh5ZXMgJiYgYXZvaWR0ZW1wcnBhdGg9eWVzCisJZWxzZQorCSAgaWYgdGVzdCAhIC1mICIkbGFkaXIvJG9iamRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KKwkgICAgZGlyPSIkbGFkaXIiCisJICAgIGFic2Rpcj0iJGFic19sYWRpciIKKwkgICAgIyBSZW1vdmUgdGhpcyBzZWFyY2ggcGF0aCBsYXRlcgorCSAgICBub3RpbnN0X3BhdGg9IiRub3RpbnN0X3BhdGggJGFic19sYWRpciIKKwkgIGVsc2UKKwkgICAgZGlyPSIkbGFkaXIvJG9iamRpciIKKwkgICAgYWJzZGlyPSIkYWJzX2xhZGlyLyRvYmpkaXIiCisJICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKKwkgICAgbm90aW5zdF9wYXRoPSIkbm90aW5zdF9wYXRoICRhYnNfbGFkaXIiCisJICBmaQorCWZpICMgJGluc3RhbGxlZCA9IHllcworCWZ1bmNfc3RyaXBuYW1lICdsaWInICcubGEnICIkbGFuYW1lIgorCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCisJIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbHByZW9wZW4uCisJaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuOyB0aGVuCisJICBpZiB0ZXN0IC16ICIkbGliZGlyIiAmJiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGxpYnJhcmllcyBtYXkgLWRscHJlb3BlbiBhIGNvbnZlbmllbmNlIGxpYnJhcnk6IFxgJGxpYiciCisJICBmaQorCSAgIyBQcmVmZXIgdXNpbmcgYSBzdGF0aWMgbGlicmFyeSAoc28gdGhhdCBubyBzaWxseSBfRFlOQU1JQyBzeW1ib2xzCisJICAjIGFyZSByZXF1aXJlZCB0byBsaW5rKS4KKwkgIGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRpci8kb2xkX2xpYnJhcnkiCisJICAgICMgS2VlcCBhIGxpc3Qgb2YgcHJlb3BlbmVkIGNvbnZlbmllbmNlIGxpYnJhcmllcyB0byBjaGVjaworCSAgICAjIHRoYXQgdGhleSBhcmUgYmVpbmcgdXNlZCBjb3JyZWN0bHkgaW4gdGhlIGxpbmsgcGFzcy4KKwkgICAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCQlkbHByZWNvbnZlbmllbmNlbGlicz0iJGRscHJlY29udmVuaWVuY2VsaWJzICRkaXIvJG9sZF9saWJyYXJ5IgorCSAgIyBPdGhlcndpc2UsIHVzZSB0aGUgZGxuYW1lLCBzbyB0aGF0IGx0X2Rsb3BlbiBmaW5kcyBpdC4KKwkgIGVsaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKwkgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRpci8kZGxuYW1lIgorCSAgZWxzZQorCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRsaW5rbGliIgorCSAgZmkKKwlmaSAjICRwYXNzID0gZGxwcmVvcGVuCisKKwlpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgorCSAgIyBMaW5rIHRoZSBjb252ZW5pZW5jZSBsaWJyYXJ5CisJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisJICAgIGRlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRkZXBsaWJzIgorCSAgZWxpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkZmluYWxpemVfZGVwbGlicyIKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIgIyB1c2VkIGZvciBwcm9nLHNjYW4gcGFzcworCSAgZmkKKwkgIGNvbnRpbnVlCisJZmkKKworCisJaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgJiYgdGVzdCAiJHBhc3MiICE9IGxpbms7IHRoZW4KKwkgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGFkaXIiCisJICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIgorCisJICBsaW5rYWxsZGVwbGlicz1ubworCSAgaWYgdGVzdCAiJGxpbmtfYWxsX2RlcGxpYnMiICE9IG5vIHx8IHRlc3QgLXogIiRsaWJyYXJ5X25hbWVzIiB8fAorCSAgICAgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBubzsgdGhlbgorCSAgICBsaW5rYWxsZGVwbGlicz15ZXMKKwkgIGZpCisKKwkgIHRtcF9saWJzPQorCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKSBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorCSAgICAgICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCQkgOzsKKwkgICAgZXNhYworCSAgICAjIE5lZWQgdG8gbGluayBhZ2FpbnN0IGFsbCBkZXBlbmRlbmN5X2xpYnM/CisJICAgIGlmIHRlc3QgIiRsaW5rYWxsZGVwbGlicyIgPSB5ZXM7IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgIyBOZWVkIHRvIGhhcmRjb2RlIHNoYXJlZCBsaWJyYXJ5IHBhdGhzCisJICAgICAgIyBvci9hbmQgbGluayBhZ2FpbnN0IHN0YXRpYyBsaWJyYXJpZXMKKwkgICAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgZmkKKwkgICAgaWYgJG9wdF9kdXBsaWNhdGVfZGVwcyA7IHRoZW4KKwkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIKKwkgIGRvbmUgIyBmb3IgZGVwbGliCisJICBjb250aW51ZQorCWZpICMgJGxpbmttb2RlID0gcHJvZy4uLgorCisJaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYKKwkgICAgIHsgeyB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzIiA9IG5vIHx8CisJICAgICAgICAgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicywkaW5zdGFsbGVkIiA9ICJidWlsdCx5ZXMiOyB9IHx8CisJICAgICAgIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IH07IHRoZW4KKwkgICAgIyBXZSBuZWVkIHRvIGhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGgKKwkgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLXogIiRhdm9pZHRlbXBycGF0aCIgOyB0aGVuCisJICAgICAgIyBNYWtlIHN1cmUgdGhlIHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgICAgIGNhc2UgIiR0ZW1wX3JwYXRoOiIgaW4KKwkgICAgICAqIiRhYnNkaXI6IiopIDs7CisJICAgICAgKikgdGVtcF9ycGF0aD0iJHRlbXBfcnBhdGgkYWJzZGlyOiIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisKKwkgICAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoLgorCSAgICAjIFNraXAgZGlyZWN0b3JpZXMgdGhhdCBhcmUgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IHJ1bi10aW1lCisJICAgICMgc2VhcmNoIHBhdGguCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgICAqKSBjb21waWxlX3JwYXRoPSIkY29tcGlsZV9ycGF0aCAkYWJzZGlyIgorCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIgorCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaSAjICRsaW5rbW9kZSwkcGFzcyA9IHByb2csbGluay4uLgorCisJICBpZiB0ZXN0ICIkYWxsZGVwbGlicyIgPSB5ZXMgJiYKKwkgICAgIHsgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA9IHBhc3NfYWxsIHx8CisJICAgICAgIHsgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYKKwkJIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIjsgfTsgfTsgdGhlbgorCSAgICAjIFdlIG9ubHkgbmVlZCB0byBzZWFyY2ggZm9yIHN0YXRpYyBsaWJyYXJpZXMKKwkgICAgY29udGludWUKKwkgIGZpCisJZmkKKworCWxpbmtfc3RhdGljPW5vICMgV2hldGhlciB0aGUgZGVwbGliIHdpbGwgYmUgbGlua2VkIHN0YXRpY2FsbHkKKwl1c2Vfc3RhdGljX2xpYnM9JHByZWZlcl9zdGF0aWNfbGlicworCWlmIHRlc3QgIiR1c2Vfc3RhdGljX2xpYnMiID0gYnVpbHQgJiYgdGVzdCAiJGluc3RhbGxlZCIgPSB5ZXM7IHRoZW4KKwkgIHVzZV9zdGF0aWNfbGlicz1ubworCWZpCisJaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmCisJICAgeyB0ZXN0ICIkdXNlX3N0YXRpY19saWJzIiA9IG5vIHx8IHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IH07IHRoZW4KKwkgIGNhc2UgJGhvc3QgaW4KKwkgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyopCisJICAgICAgIyBObyBwb2ludCBpbiByZWxpbmtpbmcgRExMcyBiZWNhdXNlIHBhdGhzIGFyZSBub3QgZW5jb2RlZAorCSAgICAgIG5vdGluc3RfZGVwbGlicz0iJG5vdGluc3RfZGVwbGlicyAkbGliIgorCSAgICAgIG5lZWRfcmVsaW5rPW5vCisJICAgIDs7CisJICAqKQorCSAgICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IG5vOyB0aGVuCisJICAgICAgbm90aW5zdF9kZXBsaWJzPSIkbm90aW5zdF9kZXBsaWJzICRsaWIiCisJICAgICAgbmVlZF9yZWxpbms9eWVzCisJICAgIGZpCisJICAgIDs7CisJICBlc2FjCisJICAjIFRoaXMgaXMgYSBzaGFyZWQgbGlicmFyeQorCisJICAjIFdhcm4gYWJvdXQgcG9ydGFiaWxpdHksIGNhbid0IGxpbmsgYWdhaW5zdCAtbW9kdWxlJ3Mgb24gc29tZQorCSAgIyBzeXN0ZW1zIChkYXJ3aW4pLiAgRG9uJ3QgYmxlYXQgYWJvdXQgZGxvcGVuZWQgbW9kdWxlcyB0aG91Z2ghCisJICBkbG9wZW5tb2R1bGU9IiIKKwkgIGZvciBkbHByZW1vZHVsZXRlc3QgaW4gJGRscHJlZmlsZXM7IGRvCisJICAgIGlmIHRlc3QgIlgkZGxwcmVtb2R1bGV0ZXN0IiA9ICJYJGxpYiI7IHRoZW4KKwkgICAgICBkbG9wZW5tb2R1bGU9IiRkbHByZW1vZHVsZXRlc3QiCisJICAgICAgYnJlYWsKKwkgICAgZmkKKwkgIGRvbmUKKwkgIGlmIHRlc3QgLXogIiRkbG9wZW5tb2R1bGUiICYmIHRlc3QgIiRzaG91bGRub3RsaW5rIiA9IHllcyAmJiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCisJICAgIGVjaG8KKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIGV4ZWN1dGFibGUgJG91dHB1dCBhZ2FpbnN0IHRoZSBsb2FkYWJsZSBtb2R1bGUiCisJICAgIGVsc2UKKwkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgorCSAgICBmaQorCSAgICAkRUNITyAiKioqICRsaW5rbGliIGlzIG5vdCBwb3J0YWJsZSEiCisJICBmaQorCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiAmJgorCSAgICAgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgPSB5ZXM7IHRoZW4KKwkgICAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoLgorCSAgICAjIFNraXAgZGlyZWN0b3JpZXMgdGhhdCBhcmUgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IHJ1bi10aW1lCisJICAgICMgc2VhcmNoIHBhdGguCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgICAqKSBjb21waWxlX3JwYXRoPSIkY29tcGlsZV9ycGF0aCAkYWJzZGlyIgorCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIgorCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaQorCisJICBpZiB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiOyB0aGVuCisJICAgICMgZmlndXJlIG91dCB0aGUgc29uYW1lCisJICAgIHNldCBkdW1teSAkbGlicmFyeV9uYW1lcworCSAgICBzaGlmdAorCSAgICByZWFsbmFtZT0iJDEiCisJICAgIHNoaWZ0CisJICAgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCSAgICAjIHVzZSBkbG5hbWUgaWYgd2UgZ290IGl0LiBpdCdzIHBlcmZlY3RseSBnb29kLCBubz8KKwkgICAgaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKwkgICAgICBzb25hbWU9IiRkbG5hbWUiCisJICAgIGVsaWYgdGVzdCAtbiAiJHNvbmFtZV9zcGVjIjsgdGhlbgorCSAgICAgICMgYmxlaCB3aW5kb3dzCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICpjeWd3aW4qIHwgbWluZ3cqIHwgKmNlZ2NjKikKKwkgICAgICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJCW1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQl2ZXJzdWZmaXg9Ii0kbWFqb3IiCisJCTs7CisJICAgICAgZXNhYworCSAgICAgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKKwkgICAgZWxzZQorCSAgICAgIHNvbmFtZT0iJHJlYWxuYW1lIgorCSAgICBmaQorCisJICAgICMgTWFrZSBhIG5ldyBuYW1lIGZvciB0aGUgZXh0cmFjdF9leHBzeW1zX2NtZHMgdG8gdXNlCisJICAgIHNvcm9vdD0iJHNvbmFtZSIKKwkgICAgZnVuY19iYXNlbmFtZSAiJHNvcm9vdCIKKwkgICAgc29uYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgIGZ1bmNfc3RyaXBuYW1lICdsaWInICcuZGxsJyAiJHNvbmFtZSIKKwkgICAgbmV3bGliPWxpYmltcC0kZnVuY19zdHJpcG5hbWVfcmVzdWx0LmEKKworCSAgICAjIElmIHRoZSBsaWJyYXJ5IGhhcyBubyBleHBvcnQgbGlzdCwgdGhlbiBjcmVhdGUgb25lIG5vdworCSAgICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kc29uYW1lLWRlZiI7IHRoZW4gOgorCSAgICBlbHNlCisJICAgICAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gXGAkc29uYW1lJyIKKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJGV4dHJhY3RfZXhwc3ltc19jbWRzIiAnZXhpdCAkPycKKwkgICAgZmkKKworCSAgICAjIENyZWF0ZSAkbmV3bGliCisJICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRuZXdsaWIiOyB0aGVuIDo7IGVsc2UKKwkgICAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgaW1wb3J0IGxpYnJhcnkgZm9yIFxgJHNvbmFtZSciCisJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIgJ2V4aXQgJD8nCisJICAgIGZpCisJICAgICMgbWFrZSBzdXJlIHRoZSBsaWJyYXJ5IHZhcmlhYmxlcyBhcmUgcG9pbnRpbmcgdG8gdGhlIG5ldyBsaWJyYXJ5CisJICAgIGRpcj0kb3V0cHV0X29iamRpcgorCSAgICBsaW5rbGliPSRuZXdsaWIKKwkgIGZpICMgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIgorCisJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisJICAgIGFkZF9zaGxpYnBhdGg9CisJICAgIGFkZF9kaXI9CisJICAgIGFkZD0KKwkgICAgbGliX2xpbmtlZD15ZXMKKwkgICAgY2FzZSAkaGFyZGNvZGVfYWN0aW9uIGluCisJICAgIGltbWVkaWF0ZSB8IHVuc3VwcG9ydGVkKQorCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0gbm87IHRoZW4KKwkJYWRkPSIkZGlyLyRsaW5rbGliIgorCQljYXNlICRob3N0IGluCisJCSAgKi0qLXNjbzMuMnY1LjAuWzAyNF0qKSBhZGRfZGlyPSItTCRkaXIiIDs7CisJCSAgKi0qLXN5c3Y0KnV3MiopIGFkZF9kaXI9Ii1MJGRpciIgOzsKKwkJICAqLSotc3lzdjVPcGVuVU5JWCogfCAqLSotc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IFwKKwkJICAgICotKi11bml4d2FyZTcqKSBhZGRfZGlyPSItTCRkaXIiIDs7CisJCSAgKi0qLWRhcndpbiogKQorCQkgICAgIyBpZiB0aGUgbGliIGlzIGEgKG5vbi1kbG9wZW5lZCkgbW9kdWxlIHRoZW4gd2UgY2FuIG5vdAorCQkgICAgIyBsaW5rIGFnYWluc3QgaXQsIHNvbWVvbmUgaXMgaWdub3JpbmcgdGhlIGVhcmxpZXIgd2FybmluZ3MKKwkJICAgIGlmIC91c3IvYmluL2ZpbGUgLUwgJGFkZCAyPiAvZGV2L251bGwgfAorCQkJICRHUkVQICI6IFteOl0qIGJ1bmRsZSIgPi9kZXYvbnVsbCA7IHRoZW4KKwkJICAgICAgaWYgdGVzdCAiWCRkbG9wZW5tb2R1bGUiICE9ICJYJGxpYiI7IHRoZW4KKwkJCSRFQ0hPICIqKiogV2FybmluZzogbGliICRsaW5rbGliIGlzIGEgbW9kdWxlLCBub3QgYSBzaGFyZWQgbGlicmFyeSIKKwkJCWlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSIgOyB0aGVuCisJCQkgIGVjaG8KKwkJCSAgZWNobyAiKioqIEFuZCB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBzdGF0aWMgYXJjaGl2ZSBhdmFpbGFibGUiCisJCQkgIGVjaG8gIioqKiBUaGUgbGluayB3aWxsIHByb2JhYmx5IGZhaWwsIHNvcnJ5IgorCQkJZWxzZQorCQkJICBhZGQ9IiRkaXIvJG9sZF9saWJyYXJ5IgorCQkJZmkKKwkJICAgICAgZWxpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCisJCQlhZGQ9IiRkaXIvJG9sZF9saWJyYXJ5IgorCQkgICAgICBmaQorCQkgICAgZmkKKwkJZXNhYworCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKwkJY2FzZSAkaG9zdCBpbgorCQkqLSotc3Vub3MqKSBhZGRfc2hsaWJwYXRoPSIkZGlyIiA7OworCQllc2FjCisJCWFkZF9kaXI9Ii1MJGRpciIKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0gbm87IHRoZW4KKwkJYWRkX3NobGlicGF0aD0iJGRpciIKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsc2UKKwkJbGliX2xpbmtlZD1ubworCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgcmVsaW5rKQorCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzICYmCisJICAgICAgICAgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSIgPSBubzsgdGhlbgorCQlhZGQ9IiRkaXIvJGxpbmtsaWIiCisJICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSB5ZXM7IHRoZW4KKwkJYWRkX2Rpcj0iLUwkZGlyIgorCQkjIFRyeSBsb29raW5nIGZpcnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWluZyBpbnN0YWxsZWQgdG8uCisJCWlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisJCSAgY2FzZSAkbGliZGlyIGluCisJCSAgICBbXFwvXSopCisJCSAgICAgIGFkZF9kaXI9IiRhZGRfZGlyIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisJCSAgICAgIDs7CisJCSAgZXNhYworCQlmaQorCQlhZGQ9Ii1sJG5hbWUiCisJICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KKwkJYWRkX3NobGlicGF0aD0iJGRpciIKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsc2UKKwkJbGliX2xpbmtlZD1ubworCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgKikgbGliX2xpbmtlZD1ubyA7OworCSAgICBlc2FjCisKKwkgICAgaWYgdGVzdCAiJGxpYl9saW5rZWQiICE9IHllczsgdGhlbgorCSAgICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAidW5zdXBwb3J0ZWQgaGFyZGNvZGUgcHJvcGVydGllcyIKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkYWRkX3NobGlicGF0aCI7IHRoZW4KKwkgICAgICBjYXNlIDokY29tcGlsZV9zaGxpYnBhdGg6IGluCisJICAgICAgKiI6JGFkZF9zaGxpYnBhdGg6IiopIDs7CisJICAgICAgKikgY29tcGlsZV9zaGxpYnBhdGg9IiRjb21waWxlX3NobGlicGF0aCRhZGRfc2hsaWJwYXRoOiIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGNvbXBpbGVfZGVwbGlicz0iJGFkZF9kaXIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBjb21waWxlX2RlcGxpYnM9IiRhZGQgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBkZXBsaWJzPSIkYWRkX2RpciAkZGVwbGlicyIKKwkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBkZXBsaWJzPSIkYWRkICRkZXBsaWJzIgorCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiICE9IHllcyAmJgorCQkgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IHllcyAmJgorCQkgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisJCWNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCisJCSoiOiRsaWJkaXI6IiopIDs7CisJCSopIGZpbmFsaXplX3NobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCRsaWJkaXI6IiA7OworCQllc2FjCisJICAgICAgZmkKKwkgICAgZmkKKwkgIGZpCisKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorCSAgICBhZGRfc2hsaWJwYXRoPQorCSAgICBhZGRfZGlyPQorCSAgICBhZGQ9CisJICAgICMgRmluYWxpemUgY29tbWFuZCBmb3IgYm90aCBpcyBzaW1wbGU6IGp1c3QgaGFyZGNvZGUgaXQuCisJICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzICYmCisJICAgICAgIHRlc3QgIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiID0gbm87IHRoZW4KKwkgICAgICBhZGQ9IiRsaWJkaXIvJGxpbmtsaWIiCisJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0geWVzOyB0aGVuCisJICAgICAgYWRkX2Rpcj0iLUwkbGliZGlyIgorCSAgICAgIGFkZD0iLWwkbmFtZSIKKwkgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KKwkgICAgICBjYXNlIDokZmluYWxpemVfc2hsaWJwYXRoOiBpbgorCSAgICAgICoiOiRsaWJkaXI6IiopIDs7CisJICAgICAgKikgZmluYWxpemVfc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoJGxpYmRpcjoiIDs7CisJICAgICAgZXNhYworCSAgICAgIGFkZD0iLWwkbmFtZSIKKwkgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfYXV0b21hdGljIiA9IHllczsgdGhlbgorCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiICYmCisJCSB0ZXN0IC1mICIkaW5zdF9wcmVmaXhfZGlyJGxpYmRpci8kbGlua2xpYiIgOyB0aGVuCisJCWFkZD0iJGluc3RfcHJlZml4X2RpciRsaWJkaXIvJGxpbmtsaWIiCisJICAgICAgZWxzZQorCQlhZGQ9IiRsaWJkaXIvJGxpbmtsaWIiCisJICAgICAgZmkKKwkgICAgZWxzZQorCSAgICAgICMgV2UgY2Fubm90IHNlZW0gdG8gaGFyZGNvZGUgaXQsIGd1ZXNzIHdlJ2xsIGZha2UgaXQuCisJICAgICAgYWRkX2Rpcj0iLUwkbGliZGlyIgorCSAgICAgICMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KKwkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorCQljYXNlICRsaWJkaXIgaW4KKwkJICBbXFwvXSopCisJCSAgICBhZGRfZGlyPSIkYWRkX2RpciAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorCQkgICAgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgICAgYWRkPSItbCRuYW1lIgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGZpbmFsaXplX2RlcGxpYnM9IiRhZGRfZGlyICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGZpbmFsaXplX2RlcGxpYnM9IiRhZGQgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZGVwbGlicz0iJGFkZF9kaXIgJGRlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZGVwbGlicz0iJGFkZCAkZGVwbGlicyIKKwkgICAgZmkKKwkgIGZpCisJZWxpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgIyBIZXJlIHdlIGFzc3VtZSB0aGF0IG9uZSBvZiBoYXJkY29kZV9kaXJlY3Qgb3IgaGFyZGNvZGVfbWludXNfTAorCSAgIyBpcyBub3QgdW5zdXBwb3J0ZWQuICBUaGlzIGlzIHZhbGlkIG9uIGFsbCBrbm93biBzdGF0aWMgYW5kCisJICAjIHNoYXJlZCBwbGF0Zm9ybXMuCisJICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSB1bnN1cHBvcnRlZDsgdGhlbgorCSAgICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGxpbmtsaWI9IiRvbGRfbGlicmFyeSIKKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGlyLyRsaW5rbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkaXIvJGxpbmtsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBlbHNlCisJICAgIGNvbXBpbGVfZGVwbGlicz0iLWwkbmFtZSAtTCRkaXIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iLWwkbmFtZSAtTCRkaXIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBmaQorCWVsaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKwkgICMgTm90IGEgc2hhcmVkIGxpYnJhcnkKKwkgIGlmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKwkgICAgIyBXZSdyZSB0cnlpbmcgbGluayBhIHNoYXJlZCBsaWJyYXJ5IGFnYWluc3QgYSBzdGF0aWMgb25lCisJICAgICMgYnV0IHRoZSBzeXN0ZW0gZG9lc24ndCBzdXBwb3J0IGl0LgorCisJICAgICMgSnVzdCBwcmludCBhIHdhcm5pbmcgYW5kIGFkZCB0aGUgbGlicmFyeSB0byBkZXBlbmRlbmN5X2xpYnMgc28KKwkgICAgIyB0aGF0IHRoZSBwcm9ncmFtIGNhbiBiZSBsaW5rZWQgYWdhaW5zdCB0aGUgc3RhdGljIGxpYnJhcnkuCisJICAgIGVjaG8KKwkgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBUaGlzIHN5c3RlbSBjYW4gbm90IGxpbmsgdG8gc3RhdGljIGxpYiBhcmNoaXZlICRsaWIuIgorCSAgICBlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCSAgICBlY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCSAgICBlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUuIgorCSAgICBpZiB0ZXN0ICIkbW9kdWxlIiA9IHllczsgdGhlbgorCSAgICAgIGVjaG8gIioqKiBCdXQgYXMgeW91IHRyeSB0byBidWlsZCBhIG1vZHVsZSBsaWJyYXJ5LCBsaWJ0b29sIHdpbGwgc3RpbGwgY3JlYXRlICIKKwkgICAgICBlY2hvICIqKiogYSBzdGF0aWMgbW9kdWxlLCB0aGF0IHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlIGRsb3BlbmluZyBhcHBsaWNhdGlvbiIKKwkgICAgICBlY2hvICIqKiogaXMgbGlua2VkIHdpdGggdGhlIC1kbG9wZW4gZmxhZyB0byByZXNvbHZlIHN5bWJvbHMgYXQgcnVudGltZS4iCisJICAgICAgaWYgdGVzdCAteiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKwkJZWNobworCQllY2hvICIqKiogSG93ZXZlciwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKKwkJZWNobyAiKioqIGxpc3RzIGZyb20gYSBwcm9ncmFtLCB1c2luZyBcYG5tJyBvciBlcXVpdmFsZW50LCBidXQgbGlidG9vbCBjb3VsZCIKKwkJZWNobyAiKioqIG5vdCBmaW5kIHN1Y2ggYSBwcm9ncmFtLiAgU28sIHRoaXMgbW9kdWxlIGlzIHByb2JhYmx5IHVzZWxlc3MuIgorCQllY2hvICIqKiogXGBubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgorCQlidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCisJCWJ1aWxkX29sZF9saWJzPXllcworCSAgICAgIGVsc2UKKwkJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgICAgZmkKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGRlcGxpYnMiCisJICAgIGxpbmtfc3RhdGljPXllcworCSAgZmkKKwlmaSAjIGxpbmsgc2hhcmVkL3N0YXRpYyBsaWJyYXJ5PworCisJaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGRlcGVuZGVuY3lfbGlicyIgJiYKKwkgICAgIHsgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgIT0geWVzIHx8CisJICAgICAgIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgfHwKKwkgICAgICAgdGVzdCAiJGxpbmtfc3RhdGljIiA9IHllczsgfTsgdGhlbgorCSAgICAjIEV4dHJhY3QgLVIgZnJvbSBkZXBlbmRlbmN5X2xpYnMKKwkgICAgdGVtcF9kZXBsaWJzPQorCSAgICBmb3IgbGliZGlyIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgY2FzZSAkbGliZGlyIGluCisJICAgICAgLVIqKSBmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkbGliZGlyIgorCSAgICAgICAgICAgdGVtcF94cnBhdGg9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCQkgICBjYXNlICIgJHhycGF0aCAiIGluCisJCSAgICoiICR0ZW1wX3hycGF0aCAiKikgOzsKKwkJICAgKikgeHJwYXRoPSIkeHJwYXRoICR0ZW1wX3hycGF0aCI7OworCQkgICBlc2FjOzsKKwkgICAgICAqKSB0ZW1wX2RlcGxpYnM9IiR0ZW1wX2RlcGxpYnMgJGxpYmRpciI7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICBkZXBlbmRlbmN5X2xpYnM9IiR0ZW1wX2RlcGxpYnMiCisJICBmaQorCisJICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGFic2RpciIKKwkgICMgTGluayBhZ2FpbnN0IHRoaXMgbGlicmFyeQorCSAgdGVzdCAiJGxpbmtfc3RhdGljIiA9IG5vICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGFic19sYWRpci8kbGFuYW1lICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAjIC4uLiBhbmQgaXRzIGRlcGVuZGVuY3lfbGlicworCSAgdG1wX2xpYnM9CisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBpZiAkb3B0X2R1cGxpY2F0ZV9kZXBzIDsgdGhlbgorCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIgorCSAgZG9uZQorCisJICBpZiB0ZXN0ICIkbGlua19hbGxfZGVwbGlicyIgIT0gbm87IHRoZW4KKwkgICAgIyBBZGQgdGhlIHNlYXJjaCBwYXRocyBvZiBhbGwgZGVwZW5kZW5jeSBsaWJyYXJpZXMKKwkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICAgIHBhdGg9CisJICAgICAgY2FzZSAkZGVwbGliIGluCisJICAgICAgLUwqKSBwYXRoPSIkZGVwbGliIiA7OworCSAgICAgICoubGEpCisJICAgICAgICBmdW5jX2Rpcm5hbWUgIiRkZXBsaWIiICIiICIuIgorCQlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCQkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwkJY2FzZSAkZGlyIGluCisJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzZGlyPSIkZGlyIiA7OworCQkqKQorCQkgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKKwkJICBpZiB0ZXN0IC16ICIkYWJzZGlyIjsgdGhlbgorCQkgICAgZnVuY193YXJuaW5nICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mIFxgJGRpciciCisJCSAgICBhYnNkaXI9IiRkaXIiCisJCSAgZmkKKwkJICA7OworCQllc2FjCisJCWlmICRHUkVQICJeaW5zdGFsbGVkPW5vIiAkZGVwbGliID4gL2Rldi9udWxsOyB0aGVuCisJCWNhc2UgJGhvc3QgaW4KKwkJKi0qLWRhcndpbiopCisJCSAgZGVwZGVwbD0KKwkJICBldmFsIGRlcGxpYnJhcnlfbmFtZXM9YCR7U0VEfSAtbiAtZSAncy9ebGlicmFyeV9uYW1lcz1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisJCSAgaWYgdGVzdCAtbiAiJGRlcGxpYnJhcnlfbmFtZXMiIDsgdGhlbgorCQkgICAgZm9yIHRtcCBpbiAkZGVwbGlicmFyeV9uYW1lcyA7IGRvCisJCSAgICAgIGRlcGRlcGw9JHRtcAorCQkgICAgZG9uZQorCQkgICAgaWYgdGVzdCAtZiAiJGFic2Rpci8kb2JqZGlyLyRkZXBkZXBsIiA7IHRoZW4KKwkJICAgICAgZGVwZGVwbD0iJGFic2Rpci8kb2JqZGlyLyRkZXBkZXBsIgorCQkgICAgICBkYXJ3aW5faW5zdGFsbF9uYW1lPWAke09UT09MfSAtTCAkZGVwZGVwbCB8IGF3ayAne2lmIChOUiA9PSAyKSB7cHJpbnQgJDE7ZXhpdH19J2AKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkZGFyd2luX2luc3RhbGxfbmFtZSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJHtPVE9PTDY0fSAtTCAkZGVwZGVwbCAgfCBhd2sgJ3tpZiAoTlIgPT0gMikge3ByaW50ICQxO2V4aXR9fSdgCisgICAgICAgICAgICAgICAgICAgICAgZmkKKwkJICAgICAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAke3dsfS1keWxpYl9maWxlICR7d2x9JHtkYXJ3aW5faW5zdGFsbF9uYW1lfToke2RlcGRlcGx9IgorCQkgICAgICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgLWR5bGliX2ZpbGUgJHtkYXJ3aW5faW5zdGFsbF9uYW1lfToke2RlcGRlcGx9IgorCQkgICAgICBwYXRoPQorCQkgICAgZmkKKwkJICBmaQorCQkgIDs7CisJCSopCisJCSAgcGF0aD0iLUwkYWJzZGlyLyRvYmpkaXIiCisJCSAgOzsKKwkJZXNhYworCQllbHNlCisJCSAgZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKwkJICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJICB0ZXN0ICIkYWJzZGlyIiAhPSAiJGxpYmRpciIgJiYgXAorCQkgICAgZnVuY193YXJuaW5nICJcYCRkZXBsaWInIHNlZW1zIHRvIGJlIG1vdmVkIgorCisJCSAgcGF0aD0iLUwkYWJzZGlyIgorCQlmaQorCQk7OworCSAgICAgIGVzYWMKKwkgICAgICBjYXNlICIgJGRlcGxpYnMgIiBpbgorCSAgICAgICoiICRwYXRoICIqKSA7OworCSAgICAgICopIGRlcGxpYnM9IiRwYXRoICRkZXBsaWJzIiA7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgZmkgIyBsaW5rX2FsbF9kZXBsaWJzICE9IG5vCisJZmkgIyBsaW5rbW9kZSA9IGxpYgorICAgICAgZG9uZSAjIGZvciBkZXBsaWIgaW4gJGxpYnMKKyAgICAgIGlmIHRlc3QgIiRwYXNzIiA9IGxpbms7IHRoZW4KKwlpZiB0ZXN0ICIkbGlua21vZGUiID0gInByb2ciOyB0aGVuCisJICBjb21waWxlX2RlcGxpYnM9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkY29tcGlsZV9kZXBsaWJzIgorCSAgZmluYWxpemVfZGVwbGlicz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRmaW5hbGl6ZV9kZXBsaWJzIgorCWVsc2UKKwkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgImAkRUNITyAiICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCWZpCisgICAgICBmaQorICAgICAgZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzIgorICAgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuOyB0aGVuCisJIyBMaW5rIHRoZSBkbHByZW9wZW5lZCBsaWJyYXJpZXMgYmVmb3JlIG90aGVyIGxpYnJhcmllcworCWZvciBkZXBsaWIgaW4gJHNhdmVfZGVwbGliczsgZG8KKwkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJZG9uZQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRwYXNzIiAhPSBkbG9wZW47IHRoZW4KKwlpZiB0ZXN0ICIkcGFzcyIgIT0gY29udjsgdGhlbgorCSAgIyBNYWtlIHN1cmUgbGliX3NlYXJjaF9wYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgbGliX3NlYXJjaF9wYXRoPQorCSAgZm9yIGRpciBpbiAkbmV3bGliX3NlYXJjaF9wYXRoOyBkbworCSAgICBjYXNlICIkbGliX3NlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGRpciAiKikgOzsKKwkgICAgKikgbGliX3NlYXJjaF9wYXRoPSIkbGliX3NlYXJjaF9wYXRoICRkaXIiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwkgIG5ld2xpYl9zZWFyY2hfcGF0aD0KKwlmaQorCisJaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiAhPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgdmFycz0iZGVwbGlicyIKKwllbHNlCisJICB2YXJzPSJjb21waWxlX2RlcGxpYnMgZmluYWxpemVfZGVwbGlicyIKKwlmaQorCWZvciB2YXIgaW4gJHZhcnMgZGVwZW5kZW5jeV9saWJzOyBkbworCSAgIyBBZGQgbGlicmFyaWVzIHRvICR2YXIgaW4gcmV2ZXJzZSBvcmRlcgorCSAgZXZhbCB0bXBfbGlicz1cIlwkJHZhclwiCisJICBuZXdfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJHRtcF9saWJzOyBkbworCSAgICAjIEZJWE1FOiBQZWRhbnRpY2FsbHksIHRoaXMgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLCBzbworCSAgICAjICAgICAgICB0aGF0IHNvbWUgbmFzdHkgZGVwZW5kZW5jeSBsb29wIGlzbid0IGFjY2lkZW50YWxseQorCSAgICAjICAgICAgICBicm9rZW46CisJICAgICNuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiCisJICAgICMgUHJhZ21hdGljYWxseSwgdGhpcyBzZWVtcyB0byBjYXVzZSB2ZXJ5IGZldyBwcm9ibGVtcyBpbgorCSAgICAjIHByYWN0aWNlOgorCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJICAgIC1SKikgOzsKKwkgICAgKikKKwkgICAgICAjIEFuZCBoZXJlIGlzIHRoZSByZWFzb246IHdoZW4gYSBsaWJyYXJ5IGFwcGVhcnMgbW9yZQorCSAgICAgICMgdGhhbiBvbmNlIGFzIGFuIGV4cGxpY2l0IGRlcGVuZGVuY2Ugb2YgYSBsaWJyYXJ5LCBvcgorCSAgICAgICMgaXMgaW1wbGljaXRseSBsaW5rZWQgaW4gbW9yZSB0aGFuIG9uY2UgYnkgdGhlCisJICAgICAgIyBjb21waWxlciwgaXQgaXMgY29uc2lkZXJlZCBzcGVjaWFsLCBhbmQgbXVsdGlwbGUKKwkgICAgICAjIG9jY3VycmVuY2VzIHRoZXJlb2YgYXJlIG5vdCByZW1vdmVkLiAgQ29tcGFyZSB0aGlzCisJICAgICAgIyB3aXRoIGhhdmluZyB0aGUgc2FtZSBsaWJyYXJ5IGJlaW5nIGxpc3RlZCBhcyBhCisJICAgICAgIyBkZXBlbmRlbmN5IG9mIG11bHRpcGxlIG90aGVyIGxpYnJhcmllczogaW4gdGhpcyBjYXNlLAorCSAgICAgICMgd2Uga25vdyAocGVkYW50aWNhbGx5LCB3ZSBhc3N1bWUpIHRoZSBsaWJyYXJ5IGRvZXMgbm90CisJICAgICAgIyBuZWVkIHRvIGJlIGxpc3RlZCBtb3JlIHRoYW4gb25jZSwgc28gd2Uga2VlcCBvbmx5IHRoZQorCSAgICAgICMgbGFzdCBjb3B5LiAgVGhpcyBpcyBub3QgYWx3YXlzIHJpZ2h0LCBidXQgaXQgaXMgcmFyZQorCSAgICAgICMgZW5vdWdoIHRoYXQgd2UgcmVxdWlyZSB1c2VycyB0aGF0IHJlYWxseSBtZWFuIHRvIHBsYXkKKwkgICAgICAjIHN1Y2ggdW5wb3J0YWJsZSBsaW5raW5nIHRyaWNrcyB0byBsaW5rIHRoZSBsaWJyYXJ5CisJICAgICAgIyB1c2luZyAtV2wsLWxuYW1lLCBzbyB0aGF0IGxpYnRvb2wgZG9lcyBub3QgY29uc2lkZXIgaXQKKwkgICAgICAjIGZvciBkdXBsaWNhdGUgcmVtb3ZhbC4KKwkgICAgICBjYXNlICIgJHNwZWNpYWxkZXBsaWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJICAgICAgKikKKwkJY2FzZSAiICRuZXdfbGlicyAiIGluCisJCSoiICRkZXBsaWIgIiopIDs7CisJCSopIG5ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIgOzsKKwkJZXNhYworCQk7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBkb25lCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJG5ld19saWJzOyBkbworCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKQorCSAgICAgIGNhc2UgIiAkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIDs7CisJICAgICAgKikgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICAqKSB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwkgIGV2YWwgJHZhcj1cIiR0bXBfbGlic1wiCisJZG9uZSAjIGZvciB2YXIKKyAgICAgIGZpCisgICAgICAjIExhc3Qgc3RlcDogcmVtb3ZlIHJ1bnRpbWUgbGlicyBmcm9tIGRlcGVuZGVuY3lfbGlicworICAgICAgIyAodGhleSBzdGF5IGluIGRlcGxpYnMpCisgICAgICB0bXBfbGlicz0KKyAgICAgIGZvciBpIGluICRkZXBlbmRlbmN5X2xpYnMgOyBkbworCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCAiIGluCisJKiIgJGkgIiopCisJICBpPSIiCisJICA7OworCWVzYWMKKwlpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCisJICB0bXBfbGlicz0iJHRtcF9saWJzICRpIgorCWZpCisgICAgICBkb25lCisgICAgICBkZXBlbmRlbmN5X2xpYnM9JHRtcF9saWJzCisgICAgZG9uZSAjIGZvciBwYXNzCisgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKyAgICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorICAgIGZpCisgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorICAgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisgICAgZmkKKworICAgIGNhc2UgJGxpbmttb2RlIGluCisgICAgb2xkbGliKQorICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KKwlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisgICAgICBmaQorCisgICAgICBjYXNlICIgJGRlcGxpYnMiIGluCisgICAgICAqXCAtbCogfCAqXCAtTCopCisJZnVuY193YXJuaW5nICJcYC1sJyBhbmQgXGAtTCcgYXJlIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiA7OworICAgICAgZXNhYworCisgICAgICB0ZXN0IC1uICIkcnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJwYXRoJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKworICAgICAgdGVzdCAtbiAiJHhycGF0aCIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtUicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKworICAgICAgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1leHBvcnQtc3ltYm9scycgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisgICAgICBvbGRsaWJzPSIkb3V0cHV0IgorICAgICAgb2Jqcz0iJG9ianMkb2xkX2RlcGxpYnMiCisgICAgICA7OworCisgICAgbGliKQorICAgICAgIyBNYWtlIHN1cmUgd2Ugb25seSBnZW5lcmF0ZSBsaWJyYXJpZXMgb2YgdGhlIGZvcm0gYGxpYk5BTUUubGEnLgorICAgICAgY2FzZSAkb3V0cHV0bmFtZSBpbgorICAgICAgbGliKikKKwlmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKKwlldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKwk7OworICAgICAgKikKKwl0ZXN0ICIkbW9kdWxlIiA9IG5vICYmIFwKKwkgIGZ1bmNfZmF0YWxfaGVscCAibGlidG9vbCBsaWJyYXJ5IFxgJG91dHB1dCcgbXVzdCBiZWdpbiB3aXRoIFxgbGliJyIKKworCWlmIHRlc3QgIiRuZWVkX2xpYl9wcmVmaXgiICE9IG5vOyB0aGVuCisJICAjIEFkZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzIGlmIHJlcXVpcmVkCisJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIGV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisJICBldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKwllbHNlCisJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJICBsaWJuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwlmaQorCTs7CisgICAgICBlc2FjCisKKyAgICAgIGlmIHRlc3QgLW4gIiRvYmpzIjsgdGhlbgorCWlmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBidWlsZCBsaWJ0b29sIGxpYnJhcnkgXGAkb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMgb24gdGhpcyBob3N0OiRvYmpzIgorCWVsc2UKKwkgIGVjaG8KKwkgICRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSBub24tbGlidG9vbCIKKwkgICRFQ0hPICIqKiogb2JqZWN0cyAkb2JqcyBpcyBub3QgcG9ydGFibGUhIgorCSAgbGlib2Jqcz0iJGxpYm9ianMgJG9ianMiCisJZmkKKyAgICAgIGZpCisKKyAgICAgIHRlc3QgIiRkbHNlbGYiICE9IG5vICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbiBzZWxmJyBpcyBpZ25vcmVkIGZvciBsaWJ0b29sIGxpYnJhcmllcyIKKworICAgICAgc2V0IGR1bW15ICRycGF0aAorICAgICAgc2hpZnQKKyAgICAgIHRlc3QgIiQjIiAtZ3QgMSAmJiBcCisJZnVuY193YXJuaW5nICJpZ25vcmluZyBtdWx0aXBsZSBcYC1ycGF0aCdzIGZvciBhIGxpYnRvb2wgbGlicmFyeSIKKworICAgICAgaW5zdGFsbF9saWJkaXI9IiQxIgorCisgICAgICBvbGRsaWJzPQorICAgICAgaWYgdGVzdCAteiAiJHJwYXRoIjsgdGhlbgorCWlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJICAjIEJ1aWxkaW5nIGEgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJyYXJ5LgorCSAgIyBTb21lIGNvbXBpbGVycyBoYXZlIHByb2JsZW1zIHdpdGggYSBgLmFsJyBleHRlbnNpb24gc28KKwkgICMgY29udmVuaWVuY2UgbGlicmFyaWVzIHNob3VsZCBoYXZlIHRoZSBzYW1lIGV4dGVuc2lvbiBhbgorCSAgIyBhcmNoaXZlIG5vcm1hbGx5IHdvdWxkLgorCSAgb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCAkb2xkbGlicyIKKwkgIGJ1aWxkX2xpYnRvb2xfbGlicz1jb252ZW5pZW5jZQorCSAgYnVpbGRfb2xkX2xpYnM9eWVzCisJZmkKKworCXRlc3QgLW4gIiR2aW5mbyIgJiYgXAorCSAgZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8vLXZlcnNpb24tbnVtYmVyJyBpcyBpZ25vcmVkIGZvciBjb252ZW5pZW5jZSBsaWJyYXJpZXMiCisKKwl0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCSAgZnVuY193YXJuaW5nICJcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBjb252ZW5pZW5jZSBsaWJyYXJpZXMiCisgICAgICBlbHNlCisKKwkjIFBhcnNlIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFyZ3VtZW50LgorCXNhdmVfaWZzPSIkSUZTIjsgSUZTPSc6JworCXNldCBkdW1teSAkdmluZm8gMCAwIDAKKwlzaGlmdAorCUlGUz0iJHNhdmVfaWZzIgorCisJdGVzdCAtbiAiJDciICYmIFwKKwkgIGZ1bmNfZmF0YWxfaGVscCAidG9vIG1hbnkgcGFyYW1ldGVycyB0byBcYC12ZXJzaW9uLWluZm8nIgorCisJIyBjb252ZXJ0IGFic29sdXRlIHZlcnNpb24gbnVtYmVycyB0byBsaWJ0b29sIGFnZXMKKwkjIHRoaXMgcmV0YWlucyBjb21wYXRpYmlsaXR5IHdpdGggLmxhIGZpbGVzIGFuZCBhdHRlbXB0cworCSMgdG8gbWFrZSB0aGUgY29kZSBiZWxvdyBhIGJpdCBtb3JlIGNvbXByZWhlbnNpYmxlCisKKwljYXNlICR2aW5mb19udW1iZXIgaW4KKwl5ZXMpCisJICBudW1iZXJfbWFqb3I9IiQxIgorCSAgbnVtYmVyX21pbm9yPSIkMiIKKwkgIG51bWJlcl9yZXZpc2lvbj0iJDMiCisJICAjCisJICAjIFRoZXJlIGFyZSByZWFsbHkgb25seSB0d28ga2luZHMgLS0gdGhvc2UgdGhhdAorCSAgIyB1c2UgdGhlIGN1cnJlbnQgcmV2aXNpb24gYXMgdGhlIG1ham9yIHZlcnNpb24KKwkgICMgYW5kIHRob3NlIHRoYXQgc3VidHJhY3QgYWdlIGFuZCB1c2UgYWdlIGFzCisJICAjIGEgbWlub3IgdmVyc2lvbi4gIEJ1dCwgdGhlbiB0aGVyZSBpcyBpcml4CisJICAjIHdoaWNoIGhhcyBhbiBleHRyYSAxIGFkZGVkIGp1c3QgZm9yIGZ1bgorCSAgIworCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisJICBkYXJ3aW58bGludXh8b3NmfHdpbmRvd3N8bm9uZSkKKwkgICAgZnVuY19hcml0aCAkbnVtYmVyX21ham9yICsgJG51bWJlcl9taW5vcgorCSAgICBjdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICBhZ2U9IiRudW1iZXJfbWlub3IiCisJICAgIHJldmlzaW9uPSIkbnVtYmVyX3JldmlzaW9uIgorCSAgICA7OworCSAgZnJlZWJzZC1hb3V0fGZyZWVic2QtZWxmfHFueHxzdW5vcykKKwkgICAgY3VycmVudD0iJG51bWJlcl9tYWpvciIKKwkgICAgcmV2aXNpb249IiRudW1iZXJfbWlub3IiCisJICAgIGFnZT0iMCIKKwkgICAgOzsKKwkgIGlyaXh8bm9uc3RvcHV4KQorCSAgICBmdW5jX2FyaXRoICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yCisJICAgIGN1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGFnZT0iJG51bWJlcl9taW5vciIKKwkgICAgcmV2aXNpb249IiRudW1iZXJfbWlub3IiCisJICAgIGx0X2lyaXhfaW5jcmVtZW50PW5vCisJICAgIDs7CisJICBlc2FjCisJICA7OworCW5vKQorCSAgY3VycmVudD0iJDEiCisJICByZXZpc2lvbj0iJDIiCisJICBhZ2U9IiQzIgorCSAgOzsKKwllc2FjCisKKwkjIENoZWNrIHRoYXQgZWFjaCBvZiB0aGUgdGhpbmdzIGFyZSB2YWxpZCBudW1iZXJzLgorCWNhc2UgJGN1cnJlbnQgaW4KKwkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7CisJKikKKwkgIGZ1bmNfZXJyb3IgIkNVUlJFTlQgXGAkY3VycmVudCcgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICA7OworCWVzYWMKKworCWNhc2UgJHJldmlzaW9uIGluCisJMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OworCSopCisJICBmdW5jX2Vycm9yICJSRVZJU0lPTiBcYCRyZXZpc2lvbicgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICA7OworCWVzYWMKKworCWNhc2UgJGFnZSBpbgorCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKKwkqKQorCSAgZnVuY19lcnJvciAiQUdFIFxgJGFnZScgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICA7OworCWVzYWMKKworCWlmIHRlc3QgIiRhZ2UiIC1ndCAiJGN1cnJlbnQiOyB0aGVuCisJICBmdW5jX2Vycm9yICJBR0UgXGAkYWdlJyBpcyBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgaW50ZXJmYWNlIG51bWJlciBcYCRjdXJyZW50JyIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwlmaQorCisJIyBDYWxjdWxhdGUgdGhlIHZlcnNpb24gdmFyaWFibGVzLgorCW1ham9yPQorCXZlcnN1ZmZpeD0KKwl2ZXJzdHJpbmc9CisJY2FzZSAkdmVyc2lvbl90eXBlIGluCisJbm9uZSkgOzsKKworCWRhcndpbikKKwkgICMgTGlrZSBMaW51eCwgYnV0IHdpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiBhdmFpbGFibGUgaW4KKwkgICMgdmVyc3RyaW5nIGZvciBjb2RpbmcgaXQgaW50byB0aGUgbGlicmFyeSBoZWFkZXIKKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0CisJICB2ZXJzdWZmaXg9IiRtYWpvci4kYWdlLiRyZXZpc2lvbiIKKwkgICMgRGFyd2luIGxkIGRvZXNuJ3QgbGlrZSAwIGZvciB0aGVzZSBvcHRpb25zLi4uCisJICBmdW5jX2FyaXRoICRjdXJyZW50ICsgMQorCSAgbWlub3JfY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKKwkgIHhsY3ZlcnN0cmluZz0iJHt3bH0tY29tcGF0aWJpbGl0eV92ZXJzaW9uICR7d2x9JG1pbm9yX2N1cnJlbnQgJHt3bH0tY3VycmVudF92ZXJzaW9uICR7d2x9JG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgorCSAgdmVyc3RyaW5nPSItY29tcGF0aWJpbGl0eV92ZXJzaW9uICRtaW5vcl9jdXJyZW50IC1jdXJyZW50X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgorCSAgOzsKKworCWZyZWVic2QtYW91dCkKKwkgIG1ham9yPSIuJGN1cnJlbnQiCisJICB2ZXJzdWZmaXg9Ii4kY3VycmVudC4kcmV2aXNpb24iOworCSAgOzsKKworCWZyZWVic2QtZWxmKQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50IgorCSAgOzsKKworCWlyaXggfCBub25zdG9wdXgpCisJICBpZiB0ZXN0ICJYJGx0X2lyaXhfaW5jcmVtZW50IiA9ICJYbm8iOyB0aGVuCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBlbHNlCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlICsgMQorCSAgZmkKKwkgIG1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAorCisJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwkgICAgbm9uc3RvcHV4KSB2ZXJzdHJpbmdfcHJlZml4PW5vbnN0b3B1eCA7OworCSAgICAqKSAgICAgICAgIHZlcnN0cmluZ19wcmVmaXg9c2dpIDs7CisJICBlc2FjCisJICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmdfcHJlZml4JG1ham9yLiRyZXZpc2lvbiIKKworCSAgIyBBZGQgaW4gYWxsIHRoZSBpbnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGlibGUgd2l0aC4KKwkgIGxvb3A9JHJldmlzaW9uCisJICB3aGlsZSB0ZXN0ICIkbG9vcCIgLW5lIDA7IGRvCisJICAgIGZ1bmNfYXJpdGggJHJldmlzaW9uIC0gJGxvb3AKKwkgICAgaWZhY2U9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGZ1bmNfYXJpdGggJGxvb3AgLSAxCisJICAgIGxvb3A9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIHZlcnN0cmluZz0iJHZlcnN0cmluZ19wcmVmaXgkbWFqb3IuJGlmYWNlOiR2ZXJzdHJpbmciCisJICBkb25lCisKKwkgICMgQmVmb3JlIHRoaXMgcG9pbnQsICRtYWpvciBtdXN0IG5vdCBjb250YWluIGAuJy4KKwkgIG1ham9yPS4kbWFqb3IKKwkgIHZlcnN1ZmZpeD0iJG1ham9yLiRyZXZpc2lvbiIKKwkgIDs7CisKKwlsaW51eCkKKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0CisJICB2ZXJzdWZmaXg9IiRtYWpvci4kYWdlLiRyZXZpc2lvbiIKKwkgIDs7CisKKwlvc2YpCisJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQuJGFnZS4kcmV2aXNpb24iCisJICB2ZXJzdHJpbmc9IiRjdXJyZW50LiRhZ2UuJHJldmlzaW9uIgorCisJICAjIEFkZCBpbiBhbGwgdGhlIGludGVyZmFjZXMgdGhhdCB3ZSBhcmUgY29tcGF0aWJsZSB3aXRoLgorCSAgbG9vcD0kYWdlCisJICB3aGlsZSB0ZXN0ICIkbG9vcCIgLW5lIDA7IGRvCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkbG9vcAorCSAgICBpZmFjZT0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgZnVuY19hcml0aCAkbG9vcCAtIDEKKwkgICAgbG9vcD0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nOiR7aWZhY2V9LjAiCisJICBkb25lCisKKwkgICMgTWFrZSBleGVjdXRhYmxlcyBkZXBlbmQgb24gb3VyIGN1cnJlbnQgdmVyc2lvbi4KKwkgIHZlcnN0cmluZz0iJHZlcnN0cmluZzoke2N1cnJlbnR9LjAiCisJICA7OworCisJcW54KQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50IgorCSAgOzsKKworCXN1bm9zKQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRyZXZpc2lvbiIKKwkgIDs7CisKKwl3aW5kb3dzKQorCSAgIyBVc2UgJy0nIHJhdGhlciB0aGFuICcuJywgc2luY2Ugd2Ugb25seSB3YW50IG9uZQorCSAgIyBleHRlbnNpb24gb24gRE9TIDguMyBmaWxlc3lzdGVtcy4KKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0kZnVuY19hcml0aF9yZXN1bHQKKwkgIHZlcnN1ZmZpeD0iLSRtYWpvciIKKwkgIDs7CisKKwkqKQorCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJ1bmtub3duIGxpYnJhcnkgdmVyc2lvbiB0eXBlIFxgJHZlcnNpb25fdHlwZSciCisJICA7OworCWVzYWMKKworCSMgQ2xlYXIgdGhlIHZlcnNpb24gaW5mbyBpZiB3ZSBkZWZhdWx0ZWQsIGFuZCB0aGV5IHNwZWNpZmllZCBhIHJlbGVhc2UuCisJaWYgdGVzdCAteiAiJHZpbmZvIiAmJiB0ZXN0IC1uICIkcmVsZWFzZSI7IHRoZW4KKwkgIG1ham9yPQorCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisJICBkYXJ3aW4pCisJICAgICMgd2UgY2FuJ3QgY2hlY2sgZm9yICIwLjAiIGluIGFyY2hpdmVfY21kcyBkdWUgdG8gcXVvdGluZworCSAgICAjIHByb2JsZW1zLCBzbyB3ZSByZXNldCBpdCBjb21wbGV0ZWx5CisJICAgIHZlcnN0cmluZz0KKwkgICAgOzsKKwkgICopCisJICAgIHZlcnN0cmluZz0iMC4wIgorCSAgICA7OworCSAgZXNhYworCSAgaWYgdGVzdCAiJG5lZWRfdmVyc2lvbiIgPSBubzsgdGhlbgorCSAgICB2ZXJzdWZmaXg9CisJICBlbHNlCisJICAgIHZlcnN1ZmZpeD0iLjAuMCIKKwkgIGZpCisJZmkKKworCSMgUmVtb3ZlIHZlcnNpb24gaW5mbyBmcm9tIG5hbWUgaWYgdmVyc2lvbmluZyBzaG91bGQgYmUgYXZvaWRlZAorCWlmIHRlc3QgIiRhdm9pZF92ZXJzaW9uIiA9IHllcyAmJiB0ZXN0ICIkbmVlZF92ZXJzaW9uIiA9IG5vOyB0aGVuCisJICBtYWpvcj0KKwkgIHZlcnN1ZmZpeD0KKwkgIHZlcnN0cmluZz0iIgorCWZpCisKKwkjIENoZWNrIHRvIHNlZSBpZiB0aGUgYXJjaGl2ZSB3aWxsIGhhdmUgdW5kZWZpbmVkIHN5bWJvbHMuCisJaWYgdGVzdCAiJGFsbG93X3VuZGVmaW5lZCIgPSB5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgIiRhbGxvd191bmRlZmluZWRfZmxhZyIgPSB1bnN1cHBvcnRlZDsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgInVuZGVmaW5lZCBzeW1ib2xzIG5vdCBhbGxvd2VkIGluICRob3N0IHNoYXJlZCBsaWJyYXJpZXMiCisJICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICBidWlsZF9vbGRfbGlicz15ZXMKKwkgIGZpCisJZWxzZQorCSAgIyBEb24ndCBhbGxvdyB1bmRlZmluZWQgc3ltYm9scy4KKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSIkbm9fdW5kZWZpbmVkX2ZsYWciCisJZmkKKworICAgICAgZmkKKworICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRsaWJuYW1lIiAiJGxpYm5hbWUiICJ5ZXMiCisgICAgICBsaWJvYmpzPSIkbGlib2JqcyAkc3ltZmlsZW9iaiIKKyAgICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisKKyAgICAgIGlmIHRlc3QgIiRtb2RlIiAhPSByZWxpbms7IHRoZW4KKwkjIFJlbW92ZSBvdXIgb3V0cHV0cywgYnV0IGRvbid0IHJlbW92ZSBvYmplY3QgZmlsZXMgc2luY2UgdGhleQorCSMgbWF5IGhhdmUgYmVlbiBjcmVhdGVkIHdoZW4gY29tcGlsaW5nIFBJQyBvYmplY3RzLgorCXJlbW92ZWxpc3Q9CisJdGVtcHJlbW92ZWxpc3Q9YCRFQ0hPICIkb3V0cHV0X29iamRpci8qImAKKwlmb3IgcCBpbiAkdGVtcHJlbW92ZWxpc3Q7IGRvCisJICBjYXNlICRwIGluCisJICAgICouJG9iamV4dCB8ICouZ2NubykKKwkgICAgICAgOzsKKwkgICAgJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUgfCAkb3V0cHV0X29iamRpci8kbGlibmFtZS4qIHwgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfSR7cmVsZWFzZX0uKikKKwkgICAgICAgaWYgdGVzdCAiWCRwcmVjaW91c19maWxlc19yZWdleCIgIT0gIlgiOyB0aGVuCisJCSBpZiAkRUNITyAiJHAiIHwgJEVHUkVQIC1lICIkcHJlY2lvdXNfZmlsZXNfcmVnZXgiID4vZGV2L251bGwgMj4mMQorCQkgdGhlbgorCQkgICBjb250aW51ZQorCQkgZmkKKwkgICAgICAgZmkKKwkgICAgICAgcmVtb3ZlbGlzdD0iJHJlbW92ZWxpc3QgJHAiCisJICAgICAgIDs7CisJICAgICopIDs7CisJICBlc2FjCisJZG9uZQorCXRlc3QgLW4gIiRyZW1vdmVsaXN0IiAmJiBcCisJICBmdW5jX3Nob3dfZXZhbCAiJHtSTX1yIFwkcmVtb3ZlbGlzdCIKKyAgICAgIGZpCisKKyAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSBjb252ZW5pZW5jZSA7IHRoZW4KKwlvbGRsaWJzPSIkb2xkbGlicyAkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorCisJIyBUcmFuc2Zvcm0gLmxvIGZpbGVzIHRvIC5vIGZpbGVzLgorCW9sZG9ianM9IiRvYmpzICJgJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIi9cLiR7bGliZXh0fSQvZDsgJGxvMm8iIHwgJE5MMlNQYAorICAgICAgZmkKKworICAgICAgIyBFbGltaW5hdGUgYWxsIHRlbXBvcmFyeSBkaXJlY3Rvcmllcy4KKyAgICAgICNmb3IgcGF0aCBpbiAkbm90aW5zdF9wYXRoOyBkbworICAgICAgIwlsaWJfc2VhcmNoX3BhdGg9YCRFQ0hPICIkbGliX3NlYXJjaF9wYXRoICIgfCAkU0VEICJzJSAkcGF0aCAlICVnImAKKyAgICAgICMJZGVwbGlicz1gJEVDSE8gIiRkZXBsaWJzICIgfCAkU0VEICJzJSAtTCRwYXRoICUgJWciYAorICAgICAgIwlkZXBlbmRlbmN5X2xpYnM9YCRFQ0hPICIkZGVwZW5kZW5jeV9saWJzICIgfCAkU0VEICJzJSAtTCRwYXRoICUgJWciYAorICAgICAgI2RvbmUKKworICAgICAgaWYgdGVzdCAtbiAiJHhycGF0aCI7IHRoZW4KKwkjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhbnkgcnBhdGggZmxhZ3MsIHRoZW4gYWRkIHRoZW0uCisJdGVtcF94cnBhdGg9CisJZm9yIGxpYmRpciBpbiAkeHJwYXRoOyBkbworCSAgdGVtcF94cnBhdGg9IiR0ZW1wX3hycGF0aCAtUiRsaWJkaXIiCisJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlkb25lCisJaWYgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKwkgIGRlcGVuZGVuY3lfbGlicz0iJHRlbXBfeHJwYXRoICRkZXBlbmRlbmN5X2xpYnMiCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgTWFrZSBzdXJlIGRsZmlsZXMgY29udGFpbnMgb25seSB1bmlxdWUgZmlsZXMgdGhhdCB3b24ndCBiZSBkbHByZW9wZW5lZAorICAgICAgb2xkX2RsZmlsZXM9IiRkbGZpbGVzIgorICAgICAgZGxmaWxlcz0KKyAgICAgIGZvciBsaWIgaW4gJG9sZF9kbGZpbGVzOyBkbworCWNhc2UgIiAkZGxwcmVmaWxlcyAkZGxmaWxlcyAiIGluCisJKiIgJGxpYiAiKikgOzsKKwkqKSBkbGZpbGVzPSIkZGxmaWxlcyAkbGliIiA7OworCWVzYWMKKyAgICAgIGRvbmUKKworICAgICAgIyBNYWtlIHN1cmUgZGxwcmVmaWxlcyBjb250YWlucyBvbmx5IHVuaXF1ZSBmaWxlcworICAgICAgb2xkX2RscHJlZmlsZXM9IiRkbHByZWZpbGVzIgorICAgICAgZGxwcmVmaWxlcz0KKyAgICAgIGZvciBsaWIgaW4gJG9sZF9kbHByZWZpbGVzOyBkbworCWNhc2UgIiRkbHByZWZpbGVzICIgaW4KKwkqIiAkbGliICIqKSA7OworCSopIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRsaWIiIDs7CisJZXNhYworICAgICAgZG9uZQorCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCWlmIHRlc3QgLW4gIiRycGF0aCI7IHRoZW4KKwkgIGNhc2UgJGhvc3QgaW4KKwkgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi0qLWJlb3MqIHwgKi1jZWdjYyogfCAqLSotaGFpa3UqKQorCSAgICAjIHRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIGMgbGlicmFyeSAoYXMgc3VjaCkhCisJICAgIDs7CisJICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCisJICAgICMgUmhhcHNvZHkgQyBsaWJyYXJ5IGlzIGluIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJICAgIGRlcGxpYnM9IiRkZXBsaWJzIFN5c3RlbS5sdGZyYW1ld29yayIKKwkgICAgOzsKKwkgICotKi1uZXRic2QqKQorCSAgICAjIERvbid0IGxpbmsgd2l0aCBsaWJjIHVudGlsIHRoZSBhLm91dCBsZC5zbyBpcyBmaXhlZC4KKwkgICAgOzsKKwkgICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqKQorCSAgICAjIERvIG5vdCBpbmNsdWRlIGxpYmMgZHVlIHRvIHVzIGhhdmluZyBsaWJjL2xpYmNfci4KKwkgICAgOzsKKwkgICotKi1zY28zLjJ2NSogfCAqLSotc2NvNXY2KikKKwkgICAgIyBDYXVzZXMgcHJvYmxlbXMgd2l0aCBfX2N0eXBlCisJICAgIDs7CisJICAqLSotc3lzdjQuMnV3MiogfCAqLSotc3lzdjUqIHwgKi0qLXVuaXh3YXJlKiB8ICotKi1PcGVuVU5JWCopCisJICAgICMgQ29tcGlsZXIgaW5zZXJ0cyBsaWJjIGluIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aHJlYWRzIHRvIHdvcmsKKwkgICAgOzsKKwkgICopCisJICAgICMgQWRkIGxpYmMgdG8gZGVwbGlicyBvbiBhbGwgb3RoZXIgc3lzdGVtcyBpZiBuZWNlc3NhcnkuCisJICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX25lZWRfbGMiID0gInllcyI7IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGlicyAtbGMiCisJICAgIGZpCisJICAgIDs7CisJICBlc2FjCisJZmkKKworCSMgVHJhbnNmb3JtIGRlcGxpYnMgaW50byBvbmx5IGRlcGxpYnMgdGhhdCBjYW4gYmUgbGlua2VkIGluIHNoYXJlZC4KKwluYW1lX3NhdmU9JG5hbWUKKwlsaWJuYW1lX3NhdmU9JGxpYm5hbWUKKwlyZWxlYXNlX3NhdmU9JHJlbGVhc2UKKwl2ZXJzdWZmaXhfc2F2ZT0kdmVyc3VmZml4CisJbWFqb3Jfc2F2ZT0kbWFqb3IKKwkjIEknbSBub3Qgc3VyZSBpZiBJJ20gdHJlYXRpbmcgdGhlIHJlbGVhc2UgY29ycmVjdGx5LiAgSSB0aGluaworCSMgcmVsZWFzZSBzaG91bGQgc2hvdyB1cCBpbiB0aGUgLWwgKGllIC1sZ21wNSkgc28gd2UgZG9uJ3Qgd2FudCB0bworCSMgYWRkIGl0IGluIHR3aWNlLiAgSXMgdGhhdCBjb3JyZWN0PworCXJlbGVhc2U9IiIKKwl2ZXJzdWZmaXg9IiIKKwltYWpvcj0iIgorCW5ld2RlcGxpYnM9CisJZHJvcHBlZGRlcHM9bm8KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCXBhc3NfYWxsKQorCSAgIyBEb24ndCBjaGVjayBmb3Igc2hhcmVkL3N0YXRpYy4gIEV2ZXJ5dGhpbmcgd29ya3MuCisJICAjIFRoaXMgbWlnaHQgYmUgYSBsaXR0bGUgbmFpdmUuICBXZSBtaWdodCB3YW50IHRvIGNoZWNrCisJICAjIHdoZXRoZXIgdGhlIGxpYnJhcnkgZXhpc3RzIG9yIG5vdC4gIEJ1dCB0aGlzIGlzIG9uCisJICAjIG9zZjMgJiBvc2Y0IGFuZCBJJ20gbm90IHJlYWxseSBzdXJlLi4uIEp1c3QKKwkgICMgaW1wbGVtZW50aW5nIHdoYXQgd2FzIGFscmVhZHkgdGhlIGJlaGF2aW9yLgorCSAgbmV3ZGVwbGlicz0kZGVwbGlicworCSAgOzsKKwl0ZXN0X2NvbXBpbGUpCisJICAjIFRoaXMgY29kZSBzdHJlc3NlcyB0aGUgImxpYnJhcmllcyBhcmUgcHJvZ3JhbXMiIHBhcmFkaWdtIHRvIGl0cworCSAgIyBsaW1pdHMuIE1heWJlIGV2ZW4gYnJlYWtzIGl0LiAgV2UgY29tcGlsZSBhIHByb2dyYW0sIGxpbmtpbmcgaXQKKwkgICMgYWdhaW5zdCB0aGUgZGVwbGlicyBhcyBhIHByb3h5IGZvciB0aGUgbGlicmFyeS4gIFRoZW4gd2UgY2FuIGNoZWNrCisJICAjIHdoZXRoZXIgdGhleSBsaW5rZWQgaW4gc3RhdGljYWxseSBvciBkeW5hbWljYWxseSB3aXRoIGxkZC4KKwkgICRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QuYworCSAgY2F0ID4gY29uZnRlc3QuYyA8PEVPRgorCSAgaW50IG1haW4oKSB7IHJldHVybiAwOyB9CitFT0YKKwkgICRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QKKwkgIGlmICRMVENDICRMVENGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jICRkZXBsaWJzOyB0aGVuCisJICAgIGxkZF9vdXRwdXQ9YGxkZCBjb25mdGVzdGAKKwkgICAgZm9yIGkgaW4gJGRlcGxpYnM7IGRvCisJICAgICAgY2FzZSAkaSBpbgorCSAgICAgIC1sKikKKwkJZnVuY19zdHJpcG5hbWUgLWwgJycgIiRpIgorCQluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkJaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQkgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCQkgICoiICRpICIqKQorCQkgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCSAgICBpPSIiCisJCSAgICA7OworCQkgIGVzYWMKKwkJZmkKKwkJaWYgdGVzdCAtbiAiJGkiIDsgdGhlbgorCQkgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCQkgIGRlcGxpYl9tYXRjaGVzPWBldmFsICJcXCRFQ0hPIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiImAKKwkJICBzZXQgZHVtbXkgJGRlcGxpYl9tYXRjaGVzOyBzaGlmdAorCQkgIGRlcGxpYl9tYXRjaD0kMQorCQkgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMCA7IHRoZW4KKwkJICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorCQkgIGVsc2UKKwkJICAgIGRyb3BwZWRkZXBzPXllcworCQkgICAgZWNobworCQkgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBkeW5hbWljIGxpbmtlciBkb2VzIG5vdCBhY2NlcHQgbmVlZGVkIGxpYnJhcnkgJGkuIgorCQkgICAgZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJICAgIGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCSAgICBlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIEkgYmVsaWV2ZSB5b3UgZG8gbm90IGhhdmUiCisJCSAgICBlY2hvICIqKiogYmVjYXVzZSBhIHRlc3RfY29tcGlsZSBkaWQgcmV2ZWFsIHRoYXQgdGhlIGxpbmtlciBkaWQgbm90IHVzZSBpdCBmb3IiCisJCSAgICBlY2hvICIqKiogaXRzIGR5bmFtaWMgZGVwZW5kZW5jeSBsaXN0IHRoYXQgcHJvZ3JhbXMgZ2V0IHJlc29sdmVkIHdpdGggYXQgcnVudGltZS4iCisJCSAgZmkKKwkJZmkKKwkJOzsKKwkgICAgICAqKQorCQluZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKwkJOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgIGVsc2UKKwkgICAgIyBFcnJvciBvY2N1cnJlZCBpbiB0aGUgZmlyc3QgY29tcGlsZS4gIExldCdzIHRyeSB0byBzYWx2YWdlCisJICAgICMgdGhlIHNpdHVhdGlvbjogQ29tcGlsZSBhIHNlcGFyYXRlIHByb2dyYW0gZm9yIGVhY2ggbGlicmFyeS4KKwkgICAgZm9yIGkgaW4gJGRlcGxpYnM7IGRvCisJICAgICAgY2FzZSAkaSBpbgorCSAgICAgIC1sKikKKwkJZnVuY19zdHJpcG5hbWUgLWwgJycgIiRpIgorCQluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkJJG9wdF9kcnlfcnVuIHx8ICRSTSBjb25mdGVzdAorCQlpZiAkTFRDQyAkTFRDRkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAkaTsgdGhlbgorCQkgIGxkZF9vdXRwdXQ9YGxkZCBjb25mdGVzdGAKKwkJICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJCSAgICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkJICAgICoiICRpICIqKQorCQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKwkJICAgICAgaT0iIgorCQkgICAgICA7OworCQkgICAgZXNhYworCQkgIGZpCisJCSAgaWYgdGVzdCAtbiAiJGkiIDsgdGhlbgorCQkgICAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJCSAgICBkZXBsaWJfbWF0Y2hlcz1gZXZhbCAiXFwkRUNITyBcIiRsaWJyYXJ5X25hbWVzX3NwZWNcIiJgCisJCSAgICBzZXQgZHVtbXkgJGRlcGxpYl9tYXRjaGVzOyBzaGlmdAorCQkgICAgZGVwbGliX21hdGNoPSQxCisJCSAgICBpZiB0ZXN0IGBleHByICIkbGRkX291dHB1dCIgOiAiLiokZGVwbGliX21hdGNoImAgLW5lIDAgOyB0aGVuCisJCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorCQkgICAgZWxzZQorCQkgICAgICBkcm9wcGVkZGVwcz15ZXMKKwkJICAgICAgZWNobworCQkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IGR5bmFtaWMgbGlua2VyIGRvZXMgbm90IGFjY2VwdCBuZWVkZWQgbGlicmFyeSAkaS4iCisJCSAgICAgIGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCSAgICAgIGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCSAgICAgIGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJICAgICAgZWNobyAiKioqIGJlY2F1c2UgYSB0ZXN0X2NvbXBpbGUgZGlkIHJldmVhbCB0aGF0IHRoZSBsaW5rZXIgZGlkIG5vdCB1c2UgdGhpcyBvbmUiCisJCSAgICAgIGVjaG8gIioqKiBhcyBhIGR5bmFtaWMgZGVwZW5kZW5jeSB0aGF0IHByb2dyYW1zIGNhbiBnZXQgcmVzb2x2ZWQgd2l0aCBhdCBydW50aW1lLiIKKwkJICAgIGZpCisJCSAgZmkKKwkJZWxzZQorCQkgIGRyb3BwZWRkZXBzPXllcworCQkgIGVjaG8KKwkJICAkRUNITyAiKioqIFdhcm5pbmchICBMaWJyYXJ5ICRpIGlzIG5lZWRlZCBieSB0aGlzIGxpYnJhcnkgYnV0IEkgd2FzIG5vdCBhYmxlIHRvIgorCQkgIGVjaG8gIioqKiBtYWtlIGl0IGxpbmsgaW4hICBZb3Ugd2lsbCBwcm9iYWJseSBuZWVkIHRvIGluc3RhbGwgaXQgb3Igc29tZSIKKwkJICBlY2hvICIqKiogbGlicmFyeSB0aGF0IGl0IGRlcGVuZHMgb24gYmVmb3JlIHRoaXMgbGlicmFyeSB3aWxsIGJlIGZ1bGx5IgorCQkgIGVjaG8gIioqKiBmdW5jdGlvbmFsLiAgSW5zdGFsbGluZyBpdCBiZWZvcmUgY29udGludWluZyB3b3VsZCBiZSBldmVuIGJldHRlci4iCisJCWZpCisJCTs7CisJICAgICAgKikKKwkJbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCTs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICBmaQorCSAgOzsKKwlmaWxlX21hZ2ljKikKKwkgIHNldCBkdW1teSAkZGVwbGlic19jaGVja19tZXRob2Q7IHNoaWZ0CisJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCisJICBmb3IgYV9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJICAgIGNhc2UgJGFfZGVwbGliIGluCisJICAgIC1sKikKKwkgICAgICBmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGFfZGVwbGliIgorCSAgICAgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICAgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkJY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJCSoiICRhX2RlcGxpYiAiKikKKwkJICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJCSAgYV9kZXBsaWI9IiIKKwkJICA7OworCQllc2FjCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorCQlsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCisJCSAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lWy4tXSogMj4vZGV2L251bGxgCisJCSAgZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbworCQkgICAgICAjIEZvbGxvdyBzb2Z0IGxpbmtzLgorCQkgICAgICBpZiBscyAtbExkICIkcG90ZW50X2xpYiIgMj4vZGV2L251bGwgfAorCQkJICRHUkVQICIgLT4gIiA+L2Rldi9udWxsOyB0aGVuCisJCQljb250aW51ZQorCQkgICAgICBmaQorCQkgICAgICAjIFRoZSBzdGF0ZW1lbnQgYWJvdmUgdHJpZXMgdG8gYXZvaWQgZW50ZXJpbmcgYW4KKwkJICAgICAgIyBlbmRsZXNzIGxvb3AgYmVsb3csIGluIGNhc2Ugb2YgY3ljbGljIGxpbmtzLgorCQkgICAgICAjIFdlIG1pZ2h0IHN0aWxsIGVudGVyIGFuIGVuZGxlc3MgbG9vcCwgc2luY2UgYSBsaW5rCisJCSAgICAgICMgbG9vcCBjYW4gYmUgY2xvc2VkIHdoaWxlIHdlIGZvbGxvdyBsaW5rcywKKwkJICAgICAgIyBidXQgc28gd2hhdD8KKwkJICAgICAgcG90bGliPSIkcG90ZW50X2xpYiIKKwkJICAgICAgd2hpbGUgdGVzdCAtaCAiJHBvdGxpYiIgMj4vZGV2L251bGw7IGRvCisJCQlwb3RsaWJsaW5rPWBscyAtbGQgJHBvdGxpYiB8ICR7U0VEfSAncy8uKiAtPiAvLydgCisJCQljYXNlICRwb3RsaWJsaW5rIGluCisJCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIHBvdGxpYj0iJHBvdGxpYmxpbmsiOzsKKwkJCSopIHBvdGxpYj1gJEVDSE8gIiRwb3RsaWIiIHwgJFNFRCAncyxbXi9dKiQsLCdgIiRwb3RsaWJsaW5rIjs7CisJCQllc2FjCisJCSAgICAgIGRvbmUKKwkJICAgICAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCJcJHBvdGxpYlwiIDI+L2Rldi9udWxsIHwKKwkJCSAkU0VEIC1lIDEwcSB8CisJCQkgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkJCW5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKwkJCWFfZGVwbGliPSIiCisJCQlicmVhayAyCisJCSAgICAgIGZpCisJCSAgZG9uZQorCQlkb25lCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorCQlkcm9wcGVkZGVwcz15ZXMKKwkJZWNobworCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpbmtlciBwYXRoIGRvZXMgbm90IGhhdmUgcmVhbCBmaWxlIGZvciBsaWJyYXJ5ICRhX2RlcGxpYi4iCisJCWVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJZWNobyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKKwkJaWYgdGVzdCAteiAiJHBvdGxpYiIgOyB0aGVuCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgZmlsZSBtYWdpYyB0ZXN0KSIKKwkJZWxzZQorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgorCQkgICRFQ0hPICIqKiogdXNpbmcgYSBmaWxlIG1hZ2ljLiBMYXN0IGZpbGUgY2hlY2tlZDogJHBvdGxpYiIKKwkJZmkKKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgICopCisJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KKwkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KKwkgIDs7CisJbWF0Y2hfcGF0dGVybiopCisJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAorCSAgbWF0Y2hfcGF0dGVybl9yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4qXCkiYAorCSAgZm9yIGFfZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgICBjYXNlICRhX2RlcGxpYiBpbgorCSAgICAtbCopCisJICAgICAgZnVuY19zdHJpcG5hbWUgLWwgJycgIiRhX2RlcGxpYiIKKwkgICAgICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCQkqIiAkYV9kZXBsaWIgIiopCisJCSAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCQkgIGFfZGVwbGliPSIiCisJCSAgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKwkJbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJCWZvciBpIGluICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoOyBkbworCQkgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZVsuLV0qIDI+L2Rldi9udWxsYAorCQkgIGZvciBwb3RlbnRfbGliIGluICRwb3RlbnRpYWxfbGliczsgZG8KKwkJICAgIHBvdGxpYj0iJHBvdGVudF9saWIiICMgc2VlIHN5bWxpbmstY2hlY2sgYWJvdmUgaW4gZmlsZV9tYWdpYyB0ZXN0CisJCSAgICBpZiBldmFsICJcJEVDSE8gXCIkcG90ZW50X2xpYlwiIiAyPi9kZXYvbnVsbCB8ICRTRUQgMTBxIHwgXAorCQkgICAgICAgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCQkgICAgICBhX2RlcGxpYj0iIgorCQkgICAgICBicmVhayAyCisJCSAgICBmaQorCQkgIGRvbmUKKwkJZG9uZQorCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKwkJZHJvcHBlZGRlcHM9eWVzCisJCWVjaG8KKwkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaW5rZXIgcGF0aCBkb2VzIG5vdCBoYXZlIHJlYWwgZmlsZSBmb3IgbGlicmFyeSAkYV9kZXBsaWIuIgorCQllY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQllY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQllY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisJCWVjaG8gIioqKiBiZWNhdXNlIEkgZGlkIGNoZWNrIHRoZSBsaW5rZXIgcGF0aCBsb29raW5nIGZvciBhIGZpbGUgc3RhcnRpbmciCisJCWlmIHRlc3QgLXogIiRwb3RsaWIiIDsgdGhlbgorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBidXQgbm8gY2FuZGlkYXRlcyB3ZXJlIGZvdW5kLiAoLi4uZm9yIHJlZ2V4IHBhdHRlcm4gdGVzdCkiCisJCWVsc2UKKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYW5kIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgcGFzc2VkIGEgZmlsZSBmb3JtYXQgdGVzdCIKKwkJICAkRUNITyAiKioqIHVzaW5nIGEgcmVnZXggcGF0dGVybi4gTGFzdCBmaWxlIGNoZWNrZWQ6ICRwb3RsaWIiCisJCWZpCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICAqKQorCSAgICAgICMgQWRkIGEgLUwgYXJndW1lbnQuCisJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGRvbmUgIyBHb25lIHRocm91Z2ggYWxsIGRlcGxpYnMuCisJICA7OworCW5vbmUgfCB1bmtub3duIHwgKikKKwkgIG5ld2RlcGxpYnM9IiIKKwkgIHRtcF9kZXBsaWJzPWAkRUNITyAiICRkZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyQvLzsgcy8gLVtMUl1bXiBdKi8vZydgCisJICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJICAgIGZvciBpIGluICRwcmVkZXBzICRwb3N0ZGVwcyA7IGRvCisJICAgICAgIyBjYW4ndCB1c2UgWHNlZCBiZWxvdywgYmVjYXVzZSAkaSBtaWdodCBjb250YWluICcvJworCSAgICAgIHRtcF9kZXBsaWJzPWAkRUNITyAiICR0bXBfZGVwbGlicyIgfCAkU0VEICJzLCRpLCwiYAorCSAgICBkb25lCisJICBmaQorCSAgY2FzZSAkdG1wX2RlcGxpYnMgaW4KKwkgICpbIVwJXCBdKikKKwkgICAgZWNobworCSAgICBpZiB0ZXN0ICJYJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA9ICJYbm9uZSI7IHRoZW4KKwkgICAgICBlY2hvICIqKiogV2FybmluZzogaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBwbGF0Zm9ybS4iCisJICAgIGVsc2UKKwkgICAgICBlY2hvICIqKiogV2FybmluZzogaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBrbm93biB0byBiZSBzdXBwb3J0ZWQuIgorCSAgICBmaQorCSAgICBlY2hvICIqKiogQWxsIGRlY2xhcmVkIGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBiZWluZyBkcm9wcGVkLiIKKwkgICAgZHJvcHBlZGRlcHM9eWVzCisJICAgIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKwl2ZXJzdWZmaXg9JHZlcnN1ZmZpeF9zYXZlCisJbWFqb3I9JG1ham9yX3NhdmUKKwlyZWxlYXNlPSRyZWxlYXNlX3NhdmUKKwlsaWJuYW1lPSRsaWJuYW1lX3NhdmUKKwluYW1lPSRuYW1lX3NhdmUKKworCWNhc2UgJGhvc3QgaW4KKwkqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCisJICAjIE9uIFJoYXBzb2R5IHJlcGxhY2UgdGhlIEMgbGlicmFyeSB3aXRoIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJICBuZXdkZXBsaWJzPWAkRUNITyAiICRuZXdkZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKKwkgIDs7CisJZXNhYworCisJaWYgdGVzdCAiJGRyb3BwZWRkZXBzIiA9IHllczsgdGhlbgorCSAgaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXM7IHRoZW4KKwkgICAgZWNobworCSAgICBlY2hvICIqKiogV2FybmluZzogbGlidG9vbCBjb3VsZCBub3Qgc2F0aXNmeSBhbGwgZGVjbGFyZWQgaW50ZXItbGlicmFyeSIKKwkgICAgJEVDSE8gIioqKiBkZXBlbmRlbmNpZXMgb2YgbW9kdWxlICRsaWJuYW1lLiAgVGhlcmVmb3JlLCBsaWJ0b29sIHdpbGwgY3JlYXRlIgorCSAgICBlY2hvICIqKiogYSBzdGF0aWMgbW9kdWxlLCB0aGF0IHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlIGRsb3BlbmluZyIKKwkgICAgZWNobyAiKioqIGFwcGxpY2F0aW9uIGlzIGxpbmtlZCB3aXRoIHRoZSAtZGxvcGVuIGZsYWcuIgorCSAgICBpZiB0ZXN0IC16ICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorCSAgICAgIGVjaG8KKwkgICAgICBlY2hvICIqKiogSG93ZXZlciwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKKwkgICAgICBlY2hvICIqKiogbGlzdHMgZnJvbSBhIHByb2dyYW0sIHVzaW5nIFxgbm0nIG9yIGVxdWl2YWxlbnQsIGJ1dCBsaWJ0b29sIGNvdWxkIgorCSAgICAgIGVjaG8gIioqKiBub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKKwkgICAgICBlY2hvICIqKiogXGBubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKKwkgICAgZmkKKwkgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IG5vOyB0aGVuCisJICAgICAgb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKKwkgICAgICBidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCisJICAgICAgYnVpbGRfb2xkX2xpYnM9eWVzCisJICAgIGVsc2UKKwkgICAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZWNobyAiKioqIFRoZSBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyB0aGF0IGhhdmUgYmVlbiBkcm9wcGVkIGhlcmUgd2lsbCBiZSIKKwkgICAgZWNobyAiKioqIGF1dG9tYXRpY2FsbHkgYWRkZWQgd2hlbmV2ZXIgYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIHRoaXMgbGlicmFyeSIKKwkgICAgZWNobyAiKioqIG9yIGlzIGRlY2xhcmVkIHRvIC1kbG9wZW4gaXQuIgorCisJICAgIGlmIHRlc3QgIiRhbGxvd191bmRlZmluZWQiID0gbm87IHRoZW4KKwkgICAgICBlY2hvCisJICAgICAgZWNobyAiKioqIFNpbmNlIHRoaXMgbGlicmFyeSBtdXN0IG5vdCBjb250YWluIHVuZGVmaW5lZCBzeW1ib2xzLCIKKwkgICAgICBlY2hvICIqKiogYmVjYXVzZSBlaXRoZXIgdGhlIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgdGhlbSBvciIKKwkgICAgICBlY2hvICIqKiogaXQgd2FzIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHdpdGggLW5vLXVuZGVmaW5lZCwiCisJICAgICAgZWNobyAiKioqIGxpYnRvb2wgd2lsbCBvbmx5IGNyZWF0ZSBhIHN0YXRpYyB2ZXJzaW9uIG9mIGl0LiIKKwkgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KKwkJb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKKwkJYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorCQlidWlsZF9vbGRfbGlicz15ZXMKKwkgICAgICBlbHNlCisJCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICAgIGZpCisJICAgIGZpCisJICBmaQorCWZpCisJIyBEb25lIGNoZWNraW5nIGRlcGxpYnMhCisJZGVwbGlicz0kbmV3ZGVwbGlicworICAgICAgZmkKKyAgICAgICMgVGltZSB0byBjaGFuZ2UgYWxsIG91ciAiZm9vLmx0ZnJhbWV3b3JrIiBzdHVmZiBiYWNrIHRvICItZnJhbWV3b3JrIGZvbyIKKyAgICAgIGNhc2UgJGhvc3QgaW4KKwkqLSotZGFyd2luKikKKwkgIG5ld2RlcGxpYnM9YCRFQ0hPICIgJG5ld2RlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwkgIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPWAkRUNITyAiICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCSAgZGVwbGlicz1gJEVDSE8gIiAkZGVwbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCSAgOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBtb3ZlIGxpYnJhcnkgc2VhcmNoIHBhdGhzIHRoYXQgY29pbmNpZGUgd2l0aCBwYXRocyB0byBub3QgeWV0CisgICAgICAjIGluc3RhbGxlZCBsaWJyYXJpZXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlicmFyeSBzZWFyY2ggbGlzdAorICAgICAgbmV3X2xpYnM9CisgICAgICBmb3IgcGF0aCBpbiAkbm90aW5zdF9wYXRoOyBkbworCWNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCSoiIC1MJHBhdGgvJG9iamRpciAiKikgOzsKKwkqKQorCSAgY2FzZSAiICRkZXBsaWJzICIgaW4KKwkgICoiIC1MJHBhdGgvJG9iamRpciAiKikKKwkgICAgbmV3X2xpYnM9IiRuZXdfbGlicyAtTCRwYXRoLyRvYmpkaXIiIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJY2FzZSAkZGVwbGliIGluCisJLUwqKQorCSAgY2FzZSAiICRuZXdfbGlicyAiIGluCisJICAqIiAkZGVwbGliICIqKSA7OworCSAgKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworCSAgZXNhYworCSAgOzsKKwkqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgZGVwbGlicz0iJG5ld19saWJzIgorCisgICAgICAjIEFsbCB0aGUgbGlicmFyeS1zcGVjaWZpYyB2YXJpYWJsZXMgKGluc3RhbGxfbGliZGlyIGlzIHNldCBhYm92ZSkuCisgICAgICBsaWJyYXJ5X25hbWVzPQorICAgICAgb2xkX2xpYnJhcnk9CisgICAgICBkbG5hbWU9CisKKyAgICAgICMgVGVzdCBhZ2Fpbiwgd2UgbWF5IGhhdmUgZGVjaWRlZCBub3QgdG8gYnVpbGQgaXQgYW55IG1vcmUKKyAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJaWYgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgPSB5ZXM7IHRoZW4KKwkgICMgSGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aHMKKwkgIGhhcmRjb2RlX2xpYmRpcnM9CisJICBkZXBfcnBhdGg9CisJICBycGF0aD0iJGZpbmFsaXplX3JwYXRoIgorCSAgdGVzdCAiJG1vZGUiICE9IHJlbGluayAmJiBycGF0aD0iJGNvbXBpbGVfcnBhdGgkcnBhdGgiCisJICBmb3IgbGliZGlyIGluICRycGF0aDsgZG8KKwkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisJICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisJCWlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCQkgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisJCWVsc2UKKwkJICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJCSAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkJICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCSAgICA7OworCQkgICopCisJCSAgICBoYXJkY29kZV9saWJkaXJzPSIkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKwkJICAgIDs7CisJCSAgZXNhYworCQlmaQorCSAgICAgIGVsc2UKKwkJZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCQlkZXBfcnBhdGg9IiRkZXBfcnBhdGggJGZsYWciCisJICAgICAgZmkKKwkgICAgZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisJICAgICAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorCSAgICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICAgKikgcGVybV9ycGF0aD0iJHBlcm1fcnBhdGggJGxpYmRpciIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICBkb25lCisJICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBsaWJkaXJzIGludG8gdGhlIHJwYXRoLgorCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCisJICAgICB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwkgICAgbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKwkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQiOyB0aGVuCisJICAgICAgZXZhbCBkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZFwiCisJICAgIGVsc2UKKwkgICAgICBldmFsIGRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKwkgICAgZmkKKwkgIGZpCisJICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiICYmIHRlc3QgLW4gIiRwZXJtX3JwYXRoIjsgdGhlbgorCSAgICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorCSAgICBycGF0aD0KKwkgICAgZm9yIGRpciBpbiAkcGVybV9ycGF0aDsgZG8KKwkgICAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisJICAgIGRvbmUKKwkgICAgZXZhbCAiJHJ1bnBhdGhfdmFyPSckcnBhdGhcJCRydW5wYXRoX3Zhcic7IGV4cG9ydCAkcnVucGF0aF92YXIiCisJICBmaQorCSAgdGVzdCAtbiAiJGRlcF9ycGF0aCIgJiYgZGVwbGlicz0iJGRlcF9ycGF0aCAkZGVwbGlicyIKKwlmaQorCisJc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoIgorCXRlc3QgIiRtb2RlIiAhPSByZWxpbmsgJiYgc2hsaWJwYXRoPSIkY29tcGlsZV9zaGxpYnBhdGgkc2hsaWJwYXRoIgorCWlmIHRlc3QgLW4gIiRzaGxpYnBhdGgiOyB0aGVuCisJICBldmFsICIkc2hsaWJwYXRoX3Zhcj0nJHNobGlicGF0aFwkJHNobGlicGF0aF92YXInOyBleHBvcnQgJHNobGlicGF0aF92YXIiCisJZmkKKworCSMgR2V0IHRoZSByZWFsIGFuZCBsaW5rIG5hbWVzIG9mIHRoZSBsaWJyYXJ5LgorCWV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisJZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiCisJc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCisJc2hpZnQKKwlyZWFsbmFtZT0iJDEiCisJc2hpZnQKKworCWlmIHRlc3QgLW4gIiRzb25hbWVfc3BlYyI7IHRoZW4KKwkgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKKwllbHNlCisJICBzb25hbWU9IiRyZWFsbmFtZSIKKwlmaQorCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCisJICBkbG5hbWU9JHNvbmFtZQorCWZpCisKKwlsaWI9IiRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZSIKKwlsaW5rbmFtZXM9CisJZm9yIGxpbmsKKwlkbworCSAgbGlua25hbWVzPSIkbGlua25hbWVzICRsaW5rIgorCWRvbmUKKworCSMgVXNlIHN0YW5kYXJkIG9iamVjdHMgaWYgdGhleSBhcmUgcGljCisJdGVzdCAteiAiJHBpY19mbGFnIiAmJiBsaWJvYmpzPWAkRUNITyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAorCXRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisKKwlkZWxmaWxlcz0KKwlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAkb3B0X2RyeV9ydW4gfHwgY3AgIiRleHBvcnRfc3ltYm9scyIgIiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnVleHAiCisJICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cCIKKwkgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJGV4cG9ydF9zeW1ib2xzIgorCWZpCisKKwlvcmlnX2V4cG9ydF9zeW1ib2xzPQorCWNhc2UgJGhvc3Rfb3MgaW4KKwljeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisJICAgICMgZXhwb3J0aW5nIHVzaW5nIHVzZXIgc3VwcGxpZWQgc3ltZmlsZQorCSAgICBpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgIT0geEVYUE9SVFM7IHRoZW4KKwkgICAgICAjIGFuZCBpdCdzIE5PVCBhbHJlYWR5IGEgLmRlZiBmaWxlLiBNdXN0IGZpZ3VyZSBvdXQKKwkgICAgICAjIHdoaWNoIG9mIHRoZSBnaXZlbiBzeW1ib2xzIGFyZSBkYXRhIHN5bWJvbHMgYW5kIHRhZworCSAgICAgICMgdGhlbSBhcyBzdWNoLiBTbywgdHJpZ2dlciB1c2Ugb2YgZXhwb3J0X3N5bWJvbHNfY21kcy4KKwkgICAgICAjIGV4cG9ydF9zeW1ib2xzIGdldHMgcmVhc3NpZ25lZCBpbnNpZGUgdGhlICJwcmVwYXJlCisJICAgICAgIyB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzIiBpZiBzdGF0ZW1lbnQsIHNvIHRoZQorCSAgICAgICMgaW5jbHVkZV9leHBzeW1zIGxvZ2ljIHN0aWxsIHdvcmtzLgorCSAgICAgIG9yaWdfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKwkgICAgICBleHBvcnRfc3ltYm9scz0KKwkgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisJICAgIGZpCisJICBmaQorCSAgOzsKKwllc2FjCisKKwkjIFByZXBhcmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scworCWlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgIGlmIHRlc3QgIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiID0geWVzIHx8IHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyIKKwkgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmV4cCIKKwkgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkZXhwb3J0X3N5bWJvbHMKKwkgICAgY21kcz0kZXhwb3J0X3N5bWJvbHNfY21kcworCSAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwkgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KKwkgICAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgICBldmFsIGNtZD1cIiRjbWRcIgorCSAgICAgIGZ1bmNfbGVuICIgJGNtZCIKKwkgICAgICBsZW49JGZ1bmNfbGVuX3Jlc3VsdAorCSAgICAgIGlmIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgorCQlmdW5jX3Nob3dfZXZhbCAiJGNtZCIgJ2V4aXQgJD8nCisJCXNraXBwZWRfZXhwb3J0PWZhbHNlCisJICAgICAgZWxzZQorCQkjIFRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gZXhlY3V0ZSBpbiBvbmUgc3RlcC4KKwkJZnVuY192ZXJib3NlICJ1c2luZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlIGZvciBleHBvcnQgbGlzdC4uLiIKKwkJc2tpcHBlZF9leHBvcnQ9OgorCQkjIEJyZWFrIG91dCBlYXJseSwgb3RoZXJ3aXNlIHNraXBwZWRfZXhwb3J0IG1heSBiZQorCQkjIHNldCB0byBmYWxzZSBieSBhIGxhdGVyIGJ1dCBzaG9ydGVyIGNtZC4KKwkJYnJlYWsKKwkgICAgICBmaQorCSAgICBkb25lCisJICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiI7IHRoZW4KKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkZXhwb3J0X3N5bWJvbHMiID4gIiR7ZXhwb3J0X3N5bWJvbHN9VCInCisJICAgICAgZnVuY19zaG93X2V2YWwgJyRNViAiJHtleHBvcnRfc3ltYm9sc31UIiAiJGV4cG9ydF9zeW1ib2xzIicKKwkgICAgZmkKKwkgIGZpCisJZmkKKworCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgIHRtcF9leHBvcnRfc3ltYm9scz0iJGV4cG9ydF9zeW1ib2xzIgorCSAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0iJG9yaWdfZXhwb3J0X3N5bWJvbHMiCisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKKwlmaQorCisJaWYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgICMgVGhlIGdpdmVuIGV4cG9ydHNfc3ltYm9scyBmaWxlIGhhcyB0byBiZSBmaWx0ZXJlZCwgc28gZmlsdGVyIGl0LgorCSAgZnVuY192ZXJib3NlICJmaWx0ZXIgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIHRvIHRhZyBEQVRBIGV4cG9ydHMiCisJICAjIEZJWE1FOiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgcG90ZW50aWFsbHkgY29udGFpbnMgbG90cyBvZgorCSAgIyAncycgY29tbWFuZHMgd2hpY2ggbm90IGFsbCBzZWRzIGNhbiBoYW5kbGUuIEdOVSBzZWQgc2hvdWxkIGJlIGZpbmUKKwkgICMgdGhvdWdoLiBBbHNvLCB0aGUgZmlsdGVyIHNjYWxlcyBzdXBlcmxpbmVhcmx5IHdpdGggdGhlIG51bWJlciBvZgorCSAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKKwkgICMgaXNuJ3QgYSBibGVzc2VkIHRvb2wuCisJICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZSAnL1sgLF1EQVRBLyFkO3MsXCguKlwpXChbIFwsXS4qXCksc3xeXDEkfFwxXDJ8LCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIKKwkgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKKwkgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZgorCSAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWYgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIDwgJG9yaWdfZXhwb3J0X3N5bWJvbHMgPiAkZXhwb3J0X3N5bWJvbHMKKwlmaQorCisJdG1wX2RlcGxpYnM9CisJZm9yIHRlc3RfZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgY2FzZSAiICRjb252ZW5pZW5jZSAiIGluCisJICAqIiAkdGVzdF9kZXBsaWIgIiopIDs7CisJICAqKQorCSAgICB0bXBfZGVwbGlicz0iJHRtcF9kZXBsaWJzICR0ZXN0X2RlcGxpYiIKKwkgICAgOzsKKwkgIGVzYWMKKwlkb25lCisJZGVwbGlicz0iJHRtcF9kZXBsaWJzIgorCisJaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIiAmJgorCSAgICB0ZXN0ICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiA9IHllcyAmJgorCSAgICB0ZXN0IC16ICIkbGlib2JqcyI7IHRoZW4KKwkgICAgIyBleHRyYWN0IHRoZSBhcmNoaXZlcywgc28gd2UgaGF2ZSBvYmplY3RzIHRvIGxpc3QuCisJICAgICMgVE9ETzogY291bGQgb3B0aW1pemUgdGhpcyB0byBqdXN0IGV4dHJhY3Qgb25lIGFyY2hpdmUuCisJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorCSAgZmkKKwkgIGlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgc2F2ZV9saWJvYmpzPSRsaWJvYmpzCisJICAgIGV2YWwgbGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgorCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCSAgZWxzZQorCSAgICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSAgICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKworCSAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkY29udmVuaWVuY2UKKwkgICAgbGlib2Jqcz0iJGxpYm9ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisJICBmaQorCWZpCisKKwlpZiB0ZXN0ICIkdGhyZWFkX3NhZmUiID0geWVzICYmIHRlc3QgLW4gIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWMiOyB0aGVuCisJICBldmFsIGZsYWc9XCIkdGhyZWFkX3NhZmVfZmxhZ19zcGVjXCIKKwkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkZmxhZyIKKwlmaQorCisJIyBNYWtlIGEgYmFja3VwIG9mIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IHdoZW4gcmVsaW5raW5nCisJaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVUgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVUpJyB8fCBleGl0ICQ/CisJZmkKKworCSMgRG8gZWFjaCBvZiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KKwlpZiB0ZXN0ICIkbW9kdWxlIiA9IHllcyAmJiB0ZXN0IC1uICIkbW9kdWxlX2NtZHMiIDsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgICBldmFsIHRlc3RfY21kcz1cIiRtb2R1bGVfZXhwc3ltX2NtZHNcIgorCSAgICBjbWRzPSRtb2R1bGVfZXhwc3ltX2NtZHMKKwkgIGVsc2UKKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkbW9kdWxlX2NtZHNcIgorCSAgICBjbWRzPSRtb2R1bGVfY21kcworCSAgZmkKKwllbHNlCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgICBldmFsIHRlc3RfY21kcz1cIiRhcmNoaXZlX2V4cHN5bV9jbWRzXCIKKwkgICAgY21kcz0kYXJjaGl2ZV9leHBzeW1fY21kcworCSAgZWxzZQorCSAgICBldmFsIHRlc3RfY21kcz1cIiRhcmNoaXZlX2NtZHNcIgorCSAgICBjbWRzPSRhcmNoaXZlX2NtZHMKKwkgIGZpCisJZmkKKworCWlmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYKKwkgICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiICYmCisJICAgbGVuPSRmdW5jX2xlbl9yZXN1bHQgJiYKKwkgICB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KKwkgIDoKKwllbHNlCisJICAjIFRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gbGluayBpbiBvbmUgc3RlcCwgbGluayBwaWVjZXdpc2UKKwkgICMgb3IsIGlmIHVzaW5nIEdOVSBsZCBhbmQgc2tpcHBlZF9leHBvcnQgaXMgbm90IDosIHVzZSBhIGxpbmtlcgorCSAgIyBzY3JpcHQuCisKKwkgICMgU2F2ZSB0aGUgdmFsdWUgb2YgJG91dHB1dCBhbmQgJGxpYm9ianMgYmVjYXVzZSB3ZSB3YW50IHRvCisJICAjIHVzZSB0aGVtIGxhdGVyLiAgSWYgd2UgaGF2ZSB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgd2UKKwkgICMgd2FudCB0byB1c2Ugc2F2ZV9saWJvYmpzIGFzIGl0IHdhcyBiZWZvcmUKKwkgICMgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMgd2FzIGV4cGFuZGVkLCBiZWNhdXNlIHdlIGNhbid0CisJICAjIGFzc3VtZSB0aGUgbGlua2VyIHVuZGVyc3RhbmRzIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLgorCSAgIyBUaGlzIG1heSBoYXZlIHRvIGJlIHJldmlzaXRlZCwgaW4gY2FzZSB0b28gbWFueQorCSAgIyBjb252ZW5pZW5jZSBsaWJyYXJpZXMgZ2V0IGxpbmtlZCBpbiBhbmQgZW5kIHVwIGV4Y2VlZGluZworCSAgIyB0aGUgc3BlYy4KKwkgIGlmIHRlc3QgLXogIiRjb252ZW5pZW5jZSIgfHwgdGVzdCAteiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICBzYXZlX2xpYm9ianM9JGxpYm9ianMKKwkgIGZpCisJICBzYXZlX291dHB1dD0kb3V0cHV0CisJICBmdW5jX2Jhc2VuYW1lICIkb3V0cHV0IgorCSAgb3V0cHV0X2xhPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCisJICAjIENsZWFyIHRoZSByZWxvYWRhYmxlIG9iamVjdCBjcmVhdGlvbiBjb21tYW5kIHF1ZXVlIGFuZAorCSAgIyBpbml0aWFsaXplIGsgdG8gb25lLgorCSAgdGVzdF9jbWRzPQorCSAgY29uY2F0X2NtZHM9CisJICBvYmpsaXN0PQorCSAgbGFzdF9yb2JqPQorCSAgaz0xCisKKwkgIGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorCSAgICBvdXRwdXQ9JHtvdXRwdXRfb2JqZGlyfS8ke291dHB1dF9sYX0ubG5rc2NyaXB0CisJICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgR05VIGxkIHNjcmlwdDogJG91dHB1dCIKKwkgICAgZWNobyAnSU5QVVQgKCcgPiAkb3V0cHV0CisJICAgIGZvciBvYmogaW4gJHNhdmVfbGlib2JqcworCSAgICBkbworCSAgICAgICRFQ0hPICIkb2JqIiA+PiAkb3V0cHV0CisJICAgIGRvbmUKKwkgICAgZWNobyAnKScgPj4gJG91dHB1dAorCSAgICBkZWxmaWxlcz0iJGRlbGZpbGVzICRvdXRwdXQiCisJICBlbGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAiWCRmaWxlX2xpc3Rfc3BlYyIgIT0gWDsgdGhlbgorCSAgICBvdXRwdXQ9JHtvdXRwdXRfb2JqZGlyfS8ke291dHB1dF9sYX0ubG5rCisJICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgbGlua2VyIGlucHV0IGZpbGUgbGlzdDogJG91dHB1dCIKKwkgICAgOiA+ICRvdXRwdXQKKwkgICAgc2V0IHggJHNhdmVfbGlib2JqcworCSAgICBzaGlmdAorCSAgICBmaXJzdG9iaj0KKwkgICAgaWYgdGVzdCAiJGNvbXBpbGVyX25lZWRzX29iamVjdCIgPSB5ZXM7IHRoZW4KKwkgICAgICBmaXJzdG9iaj0iJDEgIgorCSAgICAgIHNoaWZ0CisJICAgIGZpCisJICAgIGZvciBvYmoKKwkgICAgZG8KKwkgICAgICAkRUNITyAiJG9iaiIgPj4gJG91dHB1dAorCSAgICBkb25lCisJICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJG91dHB1dCIKKwkgICAgb3V0cHV0PSRmaXJzdG9ialwiJGZpbGVfbGlzdF9zcGVjJG91dHB1dFwiCisJICBlbHNlCisJICAgIGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiOyB0aGVuCisJICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4uLiIKKwkgICAgICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKwkgICAgICBldmFsIHRlc3RfY21kcz1cIiRyZWxvYWRfY21kc1wiCisJICAgICAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIgorCSAgICAgIGxlbjA9JGZ1bmNfbGVuX3Jlc3VsdAorCSAgICAgIGxlbj0kbGVuMAorCisJICAgICAgIyBMb29wIG92ZXIgdGhlIGxpc3Qgb2Ygb2JqZWN0cyB0byBiZSBsaW5rZWQuCisJICAgICAgZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzCisJICAgICAgZG8KKwkJZnVuY19sZW4gIiAkb2JqIgorCQlmdW5jX2FyaXRoICRsZW4gKyAkZnVuY19sZW5fcmVzdWx0CisJCWxlbj0kZnVuY19hcml0aF9yZXN1bHQKKwkJaWYgdGVzdCAiWCRvYmpsaXN0IiA9IFggfHwKKwkJICAgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iOyB0aGVuCisJCSAgZnVuY19hcHBlbmQgb2JqbGlzdCAiICRvYmoiCisJCWVsc2UKKwkJICAjIFRoZSBjb21tYW5kICR0ZXN0X2NtZHMgaXMgYWxtb3N0IHRvbyBsb25nLCBhZGQgYQorCQkgICMgY29tbWFuZCB0byB0aGUgcXVldWUuCisJCSAgaWYgdGVzdCAiJGsiIC1lcSAxIDsgdGhlbgorCQkgICAgIyBUaGUgZmlyc3QgZmlsZSBkb2Vzbid0IGhhdmUgYSBwcmV2aW91cyBjb21tYW5kIHRvIGFkZC4KKwkJICAgIHJlbG9hZF9vYmpzPSRvYmpsaXN0CisJCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiJHJlbG9hZF9jbWRzXCIKKwkJICBlbHNlCisJCSAgICAjIEFsbCBzdWJzZXF1ZW50IHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzIHdpbGwgbGluayBpbgorCQkgICAgIyB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KKwkJICAgIHJlbG9hZF9vYmpzPSIkb2JqbGlzdCAkbGFzdF9yb2JqIgorCQkgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+JHJlbG9hZF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiCisJCSAgZmkKKwkJICBsYXN0X3JvYmo9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKwkJICBmdW5jX2FyaXRoICRrICsgMQorCQkgIGs9JGZ1bmNfYXJpdGhfcmVzdWx0CisJCSAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CisJCSAgb2JqbGlzdD0iICRvYmoiCisJCSAgZnVuY19sZW4gIiAkbGFzdF9yb2JqIgorCQkgIGZ1bmNfYXJpdGggJGxlbjAgKyAkZnVuY19sZW5fcmVzdWx0CisJCSAgbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQlmaQorCSAgICAgIGRvbmUKKwkgICAgICAjIEhhbmRsZSB0aGUgcmVtYWluaW5nIG9iamVjdHMgYnkgY3JlYXRpbmcgb25lIGxhc3QKKwkgICAgICAjIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUuICBBbGwgc3Vic2VxdWVudCByZWxvYWRhYmxlIG9iamVjdAorCSAgICAgICMgZmlsZXMgd2lsbCBsaW5rIGluIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgorCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorCSAgICAgIHJlbG9hZF9vYmpzPSIkb2JqbGlzdCAkbGFzdF9yb2JqIgorCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kcmVsb2FkX2NtZHNcIgorCSAgICAgIGlmIHRlc3QgLW4gIiRsYXN0X3JvYmoiOyB0aGVuCisJICAgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9flwkUk0gJGxhc3Rfcm9ialwiCisJICAgICAgZmkKKwkgICAgICBkZWxmaWxlcz0iJGRlbGZpbGVzICRvdXRwdXQiCisKKwkgICAgZWxzZQorCSAgICAgIG91dHB1dD0KKwkgICAgZmkKKworCSAgICBpZiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYSciCisJICAgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmV4cCIKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRleHBvcnRfc3ltYm9scworCSAgICAgIGxpYm9ianM9JG91dHB1dAorCSAgICAgICMgQXBwZW5kIHRoZSBjb21tYW5kIHRvIGNyZWF0ZSB0aGUgZXhwb3J0IGZpbGUuCisJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CisJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHMkZXhwb3J0X3N5bWJvbHNfY21kc1wiCisJICAgICAgaWYgdGVzdCAtbiAiJGxhc3Rfcm9iaiI7IHRoZW4KKwkJZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKKwkgICAgICBmaQorCSAgICBmaQorCisJICAgIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmCisJICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBhIHRlbXBvcmFyeSByZWxvYWRhYmxlIG9iamVjdCBmaWxlOiAkb3V0cHV0IgorCisJICAgICMgTG9vcCB0aHJvdWdoIHRoZSBjb21tYW5kcyBnZW5lcmF0ZWQgYWJvdmUgYW5kIGV4ZWN1dGUgdGhlbS4KKwkgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJICAgIGZvciBjbWQgaW4gJGNvbmNhdF9jbWRzOyBkbworCSAgICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICAgICRvcHRfc2lsZW50IHx8IHsKKwkJICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRjbWQiCisJCSAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorCSAgICAgIH0KKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZCIgfHwgeworCQlsdF9leGl0PSQ/CisKKwkJIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CisJCWlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorCQkgICggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiBcCisJCSAgICAkUk0gIiR7cmVhbG5hbWV9VCIgJiYgXAorCQkgICAgJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKKwkJZmkKKworCQlleGl0ICRsdF9leGl0CisJICAgICAgfQorCSAgICBkb25lCisJICAgIElGUz0iJHNhdmVfaWZzIgorCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX07IHRoZW4KKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkZXhwb3J0X3N5bWJvbHMiID4gIiR7ZXhwb3J0X3N5bWJvbHN9VCInCisJICAgICAgZnVuY19zaG93X2V2YWwgJyRNViAiJHtleHBvcnRfc3ltYm9sc31UIiAiJGV4cG9ydF9zeW1ib2xzIicKKwkgICAgZmkKKwkgIGZpCisKKyAgICAgICAgICBpZiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgorCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAgICAgdG1wX2V4cG9ydF9zeW1ib2xzPSIkZXhwb3J0X3N5bWJvbHMiCisJICAgICAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0iJG9yaWdfZXhwb3J0X3N5bWJvbHMiCisJICAgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTUDJOTCA+PiAiJHRtcF9leHBvcnRfc3ltYm9scyInCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiOyB0aGVuCisJICAgICAgIyBUaGUgZ2l2ZW4gZXhwb3J0c19zeW1ib2xzIGZpbGUgaGFzIHRvIGJlIGZpbHRlcmVkLCBzbyBmaWx0ZXIgaXQuCisJICAgICAgZnVuY192ZXJib3NlICJmaWx0ZXIgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIHRvIHRhZyBEQVRBIGV4cG9ydHMiCisJICAgICAgIyBGSVhNRTogJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIHBvdGVudGlhbGx5IGNvbnRhaW5zIGxvdHMgb2YKKwkgICAgICAjICdzJyBjb21tYW5kcyB3aGljaCBub3QgYWxsIHNlZHMgY2FuIGhhbmRsZS4gR05VIHNlZCBzaG91bGQgYmUgZmluZQorCSAgICAgICMgdGhvdWdoLiBBbHNvLCB0aGUgZmlsdGVyIHNjYWxlcyBzdXBlcmxpbmVhcmx5IHdpdGggdGhlIG51bWJlciBvZgorCSAgICAgICMgZ2xvYmFsIHZhcmlhYmxlcy4gam9pbigxKSB3b3VsZCBiZSBuaWNlIGhlcmUsIGJ1dCB1bmZvcnR1bmF0ZWx5CisJICAgICAgIyBpc24ndCBhIGJsZXNzZWQgdG9vbC4KKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZSAnL1sgLF1EQVRBLyFkO3MsXCguKlwpXChbIFwsXS4qXCksc3xeXDEkfFwxXDJ8LCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIKKwkgICAgICBkZWxmaWxlcz0iJGRlbGZpbGVzICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIiCisJICAgICAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmCisJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWYgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIDwgJG9yaWdfZXhwb3J0X3N5bWJvbHMgPiAkZXhwb3J0X3N5bWJvbHMKKwkgICAgZmkKKwkgIGZpCisKKwkgIGxpYm9ianM9JG91dHB1dAorCSAgIyBSZXN0b3JlIHRoZSB2YWx1ZSBvZiBvdXRwdXQuCisJICBvdXRwdXQ9JHNhdmVfb3V0cHV0CisKKwkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSIgJiYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICBldmFsIGxpYm9ianM9XCJcJGxpYm9ianMgJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKwkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKwkgIGZpCisJICAjIEV4cGFuZCB0aGUgbGlicmFyeSBsaW5raW5nIGNvbW1hbmRzIGFnYWluIHRvIHJlc2V0IHRoZQorCSAgIyB2YWx1ZSBvZiAkbGlib2JqcyBmb3IgcGllY2V3aXNlIGxpbmtpbmcuCisKKwkgICMgRG8gZWFjaCBvZiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KKwkgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzICYmIHRlc3QgLW4gIiRtb2R1bGVfY21kcyIgOyB0aGVuCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJG1vZHVsZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgICBjbWRzPSRtb2R1bGVfZXhwc3ltX2NtZHMKKwkgICAgZWxzZQorCSAgICAgIGNtZHM9JG1vZHVsZV9jbWRzCisJICAgIGZpCisJICBlbHNlCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiOyB0aGVuCisJICAgICAgY21kcz0kYXJjaGl2ZV9leHBzeW1fY21kcworCSAgICBlbHNlCisJICAgICAgY21kcz0kYXJjaGl2ZV9jbWRzCisJICAgIGZpCisJICBmaQorCWZpCisKKwlpZiB0ZXN0IC1uICIkZGVsZmlsZXMiOyB0aGVuCisJICAjIEFwcGVuZCB0aGUgY29tbWFuZCB0byByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzIHRvICRjbWRzLgorCSAgZXZhbCBjbWRzPVwiXCRjbWRzflwkUk0gJGRlbGZpbGVzXCIKKwlmaQorCisJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCisJaWYgdGVzdCAtbiAiJGRscHJlZmlsZXMiOyB0aGVuCisJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisKKwkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRkbHByZWZpbGVzCisJICBsaWJvYmpzPSIkbGlib2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwkgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisJZmkKKworCXNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworCWZvciBjbWQgaW4gJGNtZHM7IGRvCisJICBJRlM9IiRzYXZlX2lmcyIKKwkgIGV2YWwgY21kPVwiJGNtZFwiCisJICAkb3B0X3NpbGVudCB8fCB7CisJICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJGNtZCIKKwkgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorCSAgfQorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiRjbWQiIHx8IHsKKwkgICAgbHRfZXhpdD0kPworCisJICAgICMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAorCSAgICBpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICAgICAoIGNkICIkb3V0cHV0X29iamRpciIgJiYgXAorCSAgICAgICAgJFJNICIke3JlYWxuYW1lfVQiICYmIFwKKwkJJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKKwkgICAgZmkKKworCSAgICBleGl0ICRsdF9leGl0CisJICB9CisJZG9uZQorCUlGUz0iJHNhdmVfaWZzIgorCisJIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CisJaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVQgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVQgJiYgJE1WICR7cmVhbG5hbWV9VSAkcmVhbG5hbWUpJyB8fCBleGl0ICQ/CisKKwkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICAgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworCSAgICBmaQorCSAgZmkKKworCSAgZXhpdCAkRVhJVF9TVUNDRVNTCisJZmkKKworCSMgQ3JlYXRlIGxpbmtzIHRvIHRoZSByZWFsIGxpYnJhcnkuCisJZm9yIGxpbmtuYW1lIGluICRsaW5rbmFtZXM7IGRvCisJICBpZiB0ZXN0ICIkcmVhbG5hbWUiICE9ICIkbGlua25hbWUiOyB0aGVuCisJICAgIGZ1bmNfc2hvd19ldmFsICcoY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiAkUk0gIiRsaW5rbmFtZSIgJiYgJExOX1MgIiRyZWFsbmFtZSIgIiRsaW5rbmFtZSIpJyAnZXhpdCAkPycKKwkgIGZpCisJZG9uZQorCisJIyBJZiAtbW9kdWxlIG9yIC1leHBvcnQtZHluYW1pYyB3YXMgc3BlY2lmaWVkLCBzZXQgdGhlIGRsbmFtZS4KKwlpZiB0ZXN0ICIkbW9kdWxlIiA9IHllcyB8fCB0ZXN0ICIkZXhwb3J0X2R5bmFtaWMiID0geWVzOyB0aGVuCisJICAjIE9uIGFsbCBrbm93biBvcGVyYXRpbmcgc3lzdGVtcywgdGhlc2UgYXJlIGlkZW50aWNhbC4KKwkgIGRsbmFtZT0iJHNvbmFtZSIKKwlmaQorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBvYmopCisgICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgorCWZ1bmNfd2FybmluZyAiXGAtZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorICAgICAgZmkKKworICAgICAgY2FzZSAiICRkZXBsaWJzIiBpbgorICAgICAgKlwgLWwqIHwgKlwgLUwqKQorCWZ1bmNfd2FybmluZyAiXGAtbCcgYW5kIFxgLUwnIGFyZSBpZ25vcmVkIGZvciBvYmplY3RzIiA7OworICAgICAgZXNhYworCisgICAgICB0ZXN0IC1uICIkcnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJwYXRoJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCisgICAgICB0ZXN0IC1uICIkeHJwYXRoIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1SJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCisgICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mbycgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKworICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisKKyAgICAgIGNhc2UgJG91dHB1dCBpbgorICAgICAgKi5sbykKKwl0ZXN0IC1uICIkb2JqcyRvbGRfZGVwbGlicyIgJiYgXAorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGJ1aWxkIGxpYnJhcnkgb2JqZWN0IFxgJG91dHB1dCcgZnJvbSBub24tbGlidG9vbCBvYmplY3RzIgorCisJbGlib2JqPSRvdXRwdXQKKwlmdW5jX2xvMm8gIiRsaWJvYmoiCisJb2JqPSRmdW5jX2xvMm9fcmVzdWx0CisJOzsKKyAgICAgICopCisJbGlib2JqPQorCW9iaj0iJG91dHB1dCIKKwk7OworICAgICAgZXNhYworCisgICAgICAjIERlbGV0ZSB0aGUgb2xkIG9iamVjdHMuCisgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRvYmogJGxpYm9iagorCisgICAgICAjIE9iamVjdHMgZnJvbSBjb252ZW5pZW5jZSBsaWJyYXJpZXMuICBUaGlzIGFzc3VtZXMKKyAgICAgICMgc2luZ2xlLXZlcnNpb24gY29udmVuaWVuY2UgbGlicmFyaWVzLiAgV2hlbmV2ZXIgd2UgY3JlYXRlCisgICAgICAjIGRpZmZlcmVudCBvbmVzIGZvciBQSUMvbm9uLVBJQywgdGhpcyB3ZSdsbCBoYXZlIHRvIGR1cGxpY2F0ZQorICAgICAgIyB0aGUgZXh0cmFjdGlvbi4KKyAgICAgIHJlbG9hZF9jb252X29ianM9CisgICAgICBnZW50b3A9CisgICAgICAjIHJlbG9hZF9jbWRzIHJ1bnMgJExEIGRpcmVjdGx5LCBzbyBsZXQgdXMgZ2V0IHJpZCBvZgorICAgICAgIyAtV2wgZnJvbSB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyBhbmQgaG9wZSB3ZSBjYW4gZ2V0IGJ5IHdpdGgKKyAgICAgICMgdHVybmluZyBjb21tYSBpbnRvIHNwYWNlLi4KKyAgICAgIHdsPQorCisgICAgICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCisJaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgZXZhbCB0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncz1cIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisJICByZWxvYWRfY29udl9vYmpzPSRyZWxvYWRfb2Jqc1wgYCRFQ0hPICIkdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3MiIHwgJFNFRCAnc3wsfCB8ZydgCisJZWxzZQorCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke29ian14IgorCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisKKwkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRjb252ZW5pZW5jZQorCSAgcmVsb2FkX2NvbnZfb2Jqcz0iJHJlbG9hZF9vYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorCWZpCisgICAgICBmaQorCisgICAgICAjIENyZWF0ZSB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKyAgICAgIHJlbG9hZF9vYmpzPSIkb2JqcyRvbGRfZGVwbGlicyAiYCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIvXC4ke2xpYmV4dH0kL2Q7IC9cLmxpYiQvZDsgJGxvMm8iIHwgJE5MMlNQYCIgJHJlbG9hZF9jb252X29ianMiICMjIyB0ZXN0c3VpdGU6IHNraXAgbmVzdGVkIHF1b3RpbmcgdGVzdAorCisgICAgICBvdXRwdXQ9IiRvYmoiCisgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJHJlbG9hZF9jbWRzIiAnZXhpdCAkPycKKworICAgICAgIyBFeGl0IGlmIHdlIGFyZW4ndCBkb2luZyBhIGxpYnJhcnkgb2JqZWN0IGZpbGUuCisgICAgICBpZiB0ZXN0IC16ICIkbGlib2JqIjsgdGhlbgorCWlmIHRlc3QgLW4gIiRnZW50b3AiOyB0aGVuCisJICBmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKKwlmaQorCisJZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KKwlpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgorCSAgZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCisJZmkKKworCSMgQ3JlYXRlIGFuIGludmFsaWQgbGlidG9vbCBvYmplY3QgaWYgbm8gUElDLCBzbyB0aGF0IHdlIGRvbid0CisJIyBhY2NpZGVudGFsbHkgbGluayBpdCBpbnRvIGEgcHJvZ3JhbS4KKwkjICRzaG93ICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiCisJIyAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIiB8fCBleGl0ICQ/CisJZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkcGljX2ZsYWciIHx8IHRlc3QgIiRwaWNfbW9kZSIgIT0gZGVmYXVsdDsgdGhlbgorCSMgT25seSBkbyBjb21tYW5kcyBpZiB3ZSByZWFsbHkgaGF2ZSBkaWZmZXJlbnQgUElDIG9iamVjdHMuCisJcmVsb2FkX29ianM9IiRsaWJvYmpzICRyZWxvYWRfY29udl9vYmpzIgorCW91dHB1dD0iJGxpYm9iaiIKKwlmdW5jX2V4ZWN1dGVfY21kcyAiJHJlbG9hZF9jbWRzIiAnZXhpdCAkPycKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRnZW50b3AiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCisgICAgICBmaQorCisgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIDs7CisKKyAgICBwcm9nKQorICAgICAgY2FzZSAkaG9zdCBpbgorCSpjeWd3aW4qKSBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRvdXRwdXQiCisJICAgICAgICAgIG91dHB1dD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0LmV4ZTs7CisgICAgICBlc2FjCisgICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mbycgaXMgaWdub3JlZCBmb3IgcHJvZ3JhbXMiCisKKyAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBwcm9ncmFtcyIKKworICAgICAgdGVzdCAiJHByZWxvYWQiID0geWVzIFwKKyAgICAgICAgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHVua25vd24gXAorCSYmIHRlc3QgIiRkbG9wZW5fc2VsZiIgPSB1bmtub3duIFwKKwkmJiB0ZXN0ICIkZGxvcGVuX3NlbGZfc3RhdGljIiA9IHVua25vd24gJiYgXAorCSAgZnVuY193YXJuaW5nICJcYExUX0lOSVQoW2Rsb3Blbl0pJyBub3QgdXNlZC4gQXNzdW1pbmcgbm8gZGxvcGVuIHN1cHBvcnQuIgorCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCisJIyBPbiBSaGFwc29keSByZXBsYWNlIHRoZSBDIGxpYnJhcnkgaXMgdGhlIFN5c3RlbSBmcmFtZXdvcmsKKwljb21waWxlX2RlcGxpYnM9YCRFQ0hPICIgJGNvbXBpbGVfZGVwbGlicyIgfCAkU0VEICdzLyAtbGMgLyBTeXN0ZW0ubHRmcmFtZXdvcmsgLydgCisJZmluYWxpemVfZGVwbGlicz1gJEVDSE8gIiAkZmluYWxpemVfZGVwbGlicyIgfCAkU0VEICdzLyAtbGMgLyBTeXN0ZW0ubHRmcmFtZXdvcmsgLydgCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKi0qLWRhcndpbiopCisJIyBEb24ndCBhbGxvdyBsYXp5IGxpbmtpbmcsIGl0IGJyZWFrcyBDKysgZ2xvYmFsIGNvbnN0cnVjdG9ycworCSMgQnV0IGlzIHN1cHBvc2VkbHkgZml4ZWQgb24gMTAuNCBvciBsYXRlciAoeWF5ISkuCisJaWYgdGVzdCAiJHRhZ25hbWUiID0gQ1hYIDsgdGhlbgorCSAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSBpbgorCSAgICAxMC5bMDEyM10pCisJICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICR7d2x9LWJpbmRfYXRfbG9hZCIKKwkgICAgICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAke3dsfS1iaW5kX2F0X2xvYWQiCisJICAgIDs7CisJICBlc2FjCisJZmkKKwkjIFRpbWUgdG8gY2hhbmdlIGFsbCBvdXIgImZvby5sdGZyYW1ld29yayIgc3R1ZmYgYmFjayB0byAiLWZyYW1ld29yayBmb28iCisJY29tcGlsZV9kZXBsaWJzPWAkRUNITyAiICRjb21waWxlX2RlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwlmaW5hbGl6ZV9kZXBsaWJzPWAkRUNITyAiICRmaW5hbGl6ZV9kZXBsaWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJOzsKKyAgICAgIGVzYWMKKworCisgICAgICAjIG1vdmUgbGlicmFyeSBzZWFyY2ggcGF0aHMgdGhhdCBjb2luY2lkZSB3aXRoIHBhdGhzIHRvIG5vdCB5ZXQKKyAgICAgICMgaW5zdGFsbGVkIGxpYnJhcmllcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaWJyYXJ5IHNlYXJjaCBsaXN0CisgICAgICBuZXdfbGlicz0KKyAgICAgIGZvciBwYXRoIGluICRub3RpbnN0X3BhdGg7IGRvCisJY2FzZSAiICRuZXdfbGlicyAiIGluCisJKiIgLUwkcGF0aC8kb2JqZGlyICIqKSA7OworCSopCisJICBjYXNlICIgJGNvbXBpbGVfZGVwbGlicyAiIGluCisJICAqIiAtTCRwYXRoLyRvYmpkaXIgIiopCisJICAgIG5ld19saWJzPSIkbmV3X2xpYnMgLUwkcGF0aC8kb2JqZGlyIiA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBmb3IgZGVwbGliIGluICRjb21waWxlX2RlcGxpYnM7IGRvCisJY2FzZSAkZGVwbGliIGluCisJLUwqKQorCSAgY2FzZSAiICRuZXdfbGlicyAiIGluCisJICAqIiAkZGVwbGliICIqKSA7OworCSAgKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworCSAgZXNhYworCSAgOzsKKwkqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgY29tcGlsZV9kZXBsaWJzPSIkbmV3X2xpYnMiCisKKworICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRjb21waWxlX2RlcGxpYnMiCisgICAgICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkZmluYWxpemVfZGVwbGlicyIKKworICAgICAgaWYgdGVzdCAtbiAiJHJwYXRoJHhycGF0aCI7IHRoZW4KKwkjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhbnkgcnBhdGggZmxhZ3MsIHRoZW4gYWRkIHRoZW0uCisJZm9yIGxpYmRpciBpbiAkcnBhdGggJHhycGF0aDsgZG8KKwkgICMgVGhpcyBpcyB0aGUgbWFnaWMgdG8gdXNlIC1ycGF0aC4KKwkgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIiA7OworCSAgZXNhYworCWRvbmUKKyAgICAgIGZpCisKKyAgICAgICMgTm93IGhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGhzCisgICAgICBycGF0aD0KKyAgICAgIGhhcmRjb2RlX2xpYmRpcnM9CisgICAgICBmb3IgbGliZGlyIGluICRjb21waWxlX3JwYXRoICRmaW5hbGl6ZV9ycGF0aDsgZG8KKwlpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwkgICAgICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorCSAgICBlbHNlCisJICAgICAgIyBKdXN0IGFjY3VtdWxhdGUgdGhlIHVuaXF1ZSBsaWJkaXJzLgorCSAgICAgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCisJICAgICAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQorCQk7OworCSAgICAgICopCisJCWhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCSAgICBycGF0aD0iJHJwYXRoICRmbGFnIgorCSAgZmkKKwllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwkgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBwZXJtX3JwYXRoPSIkcGVybV9ycGF0aCAkbGliZGlyIiA7OworCSAgZXNhYworCWZpCisJY2FzZSAkaG9zdCBpbgorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCisJICB0ZXN0YmluZGlyPWAke0VDSE99ICIkbGliZGlyIiB8ICR7U0VEfSAtZSAncyovbGliJCovYmluKidgCisJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKwkgICoiOiRsaWJkaXI6IiopIDs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kbGliZGlyOzsKKwkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiRsaWJkaXIiOzsKKwkgIGVzYWMKKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorCSAgKiI6JHRlc3RiaW5kaXI6IiopIDs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kdGVzdGJpbmRpcjs7CisJICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokdGVzdGJpbmRpciI7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBsaWJkaXJzIGludG8gdGhlIHJwYXRoLgorICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCisJIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCWxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCisJZXZhbCBycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICBmaQorICAgICAgY29tcGlsZV9ycGF0aD0iJHJwYXRoIgorCisgICAgICBycGF0aD0KKyAgICAgIGhhcmRjb2RlX2xpYmRpcnM9CisgICAgICBmb3IgbGliZGlyIGluICRmaW5hbGl6ZV9ycGF0aDsgZG8KKwlpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwkgICAgICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorCSAgICBlbHNlCisJICAgICAgIyBKdXN0IGFjY3VtdWxhdGUgdGhlIHVuaXF1ZSBsaWJkaXJzLgorCSAgICAgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCisJICAgICAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQorCQk7OworCSAgICAgICopCisJCWhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCSAgICBycGF0aD0iJHJwYXRoICRmbGFnIgorCSAgZmkKKwllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwkgIGNhc2UgIiRmaW5hbGl6ZV9wZXJtX3JwYXRoICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmaW5hbGl6ZV9wZXJtX3JwYXRoPSIkZmluYWxpemVfcGVybV9ycGF0aCAkbGliZGlyIiA7OworCSAgZXNhYworCWZpCisgICAgICBkb25lCisgICAgICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBsaWJkaXJzIGludG8gdGhlIHJwYXRoLgorICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCisJIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCWxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCisJZXZhbCBycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICBmaQorICAgICAgZmluYWxpemVfcnBhdGg9IiRycGF0aCIKKworICAgICAgaWYgdGVzdCAtbiAiJGxpYm9ianMiICYmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKwkjIFRyYW5zZm9ybSBhbGwgdGhlIGxpYnJhcnkgb2JqZWN0cyBpbnRvIHN0YW5kYXJkIG9iamVjdHMuCisJY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCisJZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKKyAgICAgIGZpCisKKyAgICAgIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zICIkb3V0cHV0bmFtZSIgIkBQUk9HUkFNQCIgIm5vIgorCisgICAgICAjIHRlbXBsYXRlIHByZWxpbmtpbmcgc3RlcAorICAgICAgaWYgdGVzdCAtbiAiJHByZWxpbmtfY21kcyI7IHRoZW4KKwlmdW5jX2V4ZWN1dGVfY21kcyAiJHByZWxpbmtfY21kcyIgJ2V4aXQgJD8nCisgICAgICBmaQorCisgICAgICB3cmFwcGVyc19yZXF1aXJlZD15ZXMKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICpjZWdjYyogfCAqbWluZ3czMmNlKikKKyAgICAgICAgIyBEaXNhYmxlIHdyYXBwZXJzIGZvciBjZWdjYyBhbmQgbWluZ3czMmNlIGhvc3RzLCB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIGFueXdheS4KKyAgICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9bm8KKyAgICAgICAgOzsKKyAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiApCisgICAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllczsgdGhlbgorICAgICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPW5vCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBpZiB0ZXN0ICIkbmVlZF9yZWxpbmsiID0gbm8gfHwgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzOyB0aGVuCisgICAgICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9bm8KKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIGlmIHRlc3QgIiR3cmFwcGVyc19yZXF1aXJlZCIgPSBubzsgdGhlbgorCSMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKwljb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZydgCisJbGlua19jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCisKKwkjIFdlIGhhdmUgbm8gdW5pbnN0YWxsZWQgbGlicmFyeSBkZXBlbmRlbmNpZXMsIHNvIGZpbmFsaXplIHJpZ2h0IG5vdy4KKwlleGl0X3N0YXR1cz0wCisJZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0X3N0YXR1cz0kPycKKworCSMgRGVsZXRlIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCisJaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9IjsgdGhlbgorCSAgZnVuY19zaG93X2V2YWwgJyRSTSAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9IicKKwlmaQorCisJZXhpdCAkZXhpdF9zdGF0dXMKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRjb21waWxlX3NobGlicGF0aCRmaW5hbGl6ZV9zaGxpYnBhdGgiOyB0aGVuCisJY29tcGlsZV9jb21tYW5kPSIkc2hsaWJwYXRoX3Zhcj1cIiRjb21waWxlX3NobGlicGF0aCRmaW5hbGl6ZV9zaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIgJGNvbXBpbGVfY29tbWFuZCIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IC1uICIkZmluYWxpemVfc2hsaWJwYXRoIjsgdGhlbgorCWZpbmFsaXplX2NvbW1hbmQ9IiRzaGxpYnBhdGhfdmFyPVwiJGZpbmFsaXplX3NobGlicGF0aFwkJHNobGlicGF0aF92YXJcIiAkZmluYWxpemVfY29tbWFuZCIKKyAgICAgIGZpCisKKyAgICAgIGNvbXBpbGVfdmFyPQorICAgICAgZmluYWxpemVfdmFyPQorICAgICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCWlmIHRlc3QgLW4gIiRwZXJtX3JwYXRoIjsgdGhlbgorCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKwkgIHJwYXRoPQorCSAgZm9yIGRpciBpbiAkcGVybV9ycGF0aDsgZG8KKwkgICAgcnBhdGg9IiRycGF0aCRkaXI6IgorCSAgZG9uZQorCSAgY29tcGlsZV92YXI9IiRydW5wYXRoX3Zhcj1cIiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIgIgorCWZpCisJaWYgdGVzdCAtbiAiJGZpbmFsaXplX3Blcm1fcnBhdGgiOyB0aGVuCisJICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorCSAgcnBhdGg9CisJICBmb3IgZGlyIGluICRmaW5hbGl6ZV9wZXJtX3JwYXRoOyBkbworCSAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisJICBkb25lCisJICBmaW5hbGl6ZV92YXI9IiRydW5wYXRoX3Zhcj1cIiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIgIgorCWZpCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkbm9faW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkjIFdlIGRvbid0IG5lZWQgdG8gY3JlYXRlIGEgd3JhcHBlciBzY3JpcHQuCisJbGlua19jb21tYW5kPSIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCisJIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgorCWxpbmtfY29tbWFuZD1gJEVDSE8gIiRsaW5rX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJ2AKKwkjIERlbGV0ZSB0aGUgb2xkIG91dHB1dCBmaWxlLgorCSRvcHRfZHJ5X3J1biB8fCAkUk0gJG91dHB1dAorCSMgTGluayB0aGUgZXhlY3V0YWJsZSBhbmQgZXhpdAorCWZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdCAkPycKKwlleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb24iID0gcmVsaW5rOyB0aGVuCisJIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisJbGlua19jb21tYW5kPSIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCisJcmVsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkZmluYWxpemVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKKworCWZ1bmNfd2FybmluZyAidGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBsaWtlIHVuaW5zdGFsbGVkIHNoYXJlZCBsaWJyYXJpZXMiCisJZnVuY193YXJuaW5nICJcYCRvdXRwdXQnIHdpbGwgYmUgcmVsaW5rZWQgZHVyaW5nIGluc3RhbGxhdGlvbiIKKyAgICAgIGVsc2UKKwlpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiAhPSBubzsgdGhlbgorCSAgbGlua19jb21tYW5kPSIkZmluYWxpemVfdmFyJGNvbXBpbGVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKKwkgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzOyB0aGVuCisJICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIiB8ICRTRUQgJ3MlQE9VVFBVVEAlXCRwcm9nZGlyL1wkZmlsZSVnJ2AKKwkgIGVsc2UKKwkgICAgIyBmYXN0X2luc3RhbGwgaXMgc2V0IHRvIG5lZWRsZXNzCisJICAgIHJlbGlua19jb21tYW5kPQorCSAgZmkKKwllbHNlCisJICBsaW5rX2NvbW1hbmQ9IiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKKwkgIHJlbGlua19jb21tYW5kPSIkZmluYWxpemVfdmFyJGZpbmFsaXplX2NvbW1hbmQkZmluYWxpemVfcnBhdGgiCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKyAgICAgIGxpbmtfY29tbWFuZD1gJEVDSE8gIiRsaW5rX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIiclZydgCisKKyAgICAgICMgRGVsZXRlIHRoZSBvbGQgb3V0cHV0IGZpbGVzLgorICAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkb3V0cHV0ICRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lICRvdXRwdXRfb2JqZGlyL2x0LSRvdXRwdXRuYW1lCisKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdCAkPycKKworICAgICAgIyBOb3cgY3JlYXRlIHRoZSB3cmFwcGVyIHNjcmlwdC4KKyAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJG91dHB1dCIKKworICAgICAgIyBRdW90ZSB0aGUgcmVsaW5rIGNvbW1hbmQgZm9yIHNoaXBwaW5nLgorICAgICAgaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSMgUHJlc2VydmUgYW55IHZhcmlhYmxlcyB0aGF0IG1heSBhZmZlY3QgY29tcGlsZXIgYmVoYXZpb3IKKwlmb3IgdmFyIGluICR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluazsgZG8KKwkgIGlmIGV2YWwgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiOyB0aGVuCisJICAgIHJlbGlua19jb21tYW5kPSJ7IHRlc3QgLXogXCJcJHskdmFyK3NldH1cIiB8fCAkbHRfdW5zZXQgJHZhciB8fCB7ICR2YXI9OyBleHBvcnQgJHZhcjsgfTsgfTsgJHJlbGlua19jb21tYW5kIgorCSAgZWxpZiBldmFsIHZhcl92YWx1ZT1cJCR2YXI7IHRlc3QgLXogIiR2YXJfdmFsdWUiOyB0aGVuCisJICAgIHJlbGlua19jb21tYW5kPSIkdmFyPTsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwkgIGVsc2UKKwkgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHZhcl92YWx1ZSIKKwkgICAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCSAgZmkKKwlkb25lCisJcmVsaW5rX2NvbW1hbmQ9IihjZCBgcHdkYDsgJHJlbGlua19jb21tYW5kKSIKKwlyZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAgIGZpCisKKyAgICAgICMgT25seSBhY3R1YWxseSBkbyB0aGluZ3MgaWYgbm90IGluIGRyeSBydW4gbW9kZS4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisJIyB3aW4zMiB3aWxsIHRoaW5rIHRoZSBzY3JpcHQgaXMgYSBiaW5hcnkgaWYgaXQgaGFzCisJIyBhIC5leGUgc3VmZml4LCBzbyB3ZSBzdHJpcCBpdCBvZmYgaGVyZS4KKwljYXNlICRvdXRwdXQgaW4KKwkgICouZXhlKSBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRvdXRwdXQiCisJICAgICAgICAgb3V0cHV0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKwllc2FjCisJIyB0ZXN0IGZvciBjeWd3aW4gYmVjYXVzZSBtdiBmYWlscyB3L28gLmV4ZSBleHRlbnNpb25zCisJY2FzZSAkaG9zdCBpbgorCSAgKmN5Z3dpbiopCisJICAgIGV4ZWV4dD0uZXhlCisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG91dHB1dG5hbWUiCisJICAgIG91dHB1dG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworCSAgKikgZXhlZXh0PSA7OworCWVzYWMKKwljYXNlICRob3N0IGluCisJICAqY3lnd2luKiB8ICptaW5ndyogKQorCSAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkb3V0cHV0IiAiIiAiLiIKKwkgICAgb3V0cHV0X25hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJICAgIG91dHB1dF9wYXRoPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisJICAgIGN3cmFwcGVyc291cmNlPSIkb3V0cHV0X3BhdGgvJG9iamRpci9sdC0kb3V0cHV0X25hbWUuYyIKKwkgICAgY3dyYXBwZXI9IiRvdXRwdXRfcGF0aC8kb3V0cHV0X25hbWUuZXhlIgorCSAgICAkUk0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcgorCSAgICB0cmFwICIkUk0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcjsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKworCSAgICBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjID4gJGN3cmFwcGVyc291cmNlCisKKwkgICAgIyBUaGUgd3JhcHBlciBleGVjdXRhYmxlIGlzIGJ1aWx0IHVzaW5nIHRoZSAkaG9zdCBjb21waWxlciwKKwkgICAgIyBiZWNhdXNlIGl0IGNvbnRhaW5zICRob3N0IHBhdGhzIGFuZCBmaWxlcy4gSWYgY3Jvc3MtCisJICAgICMgY29tcGlsaW5nLCBpdCwgbGlrZSB0aGUgdGFyZ2V0IGV4ZWN1dGFibGUsIG11c3QgYmUKKwkgICAgIyBleGVjdXRlZCBvbiB0aGUgJGhvc3Qgb3IgdW5kZXIgYW4gZW11bGF0aW9uIGVudmlyb25tZW50LgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICRMVENDICRMVENGTEFHUyAtbyAkY3dyYXBwZXIgJGN3cmFwcGVyc291cmNlCisJICAgICAgJFNUUklQICRjd3JhcHBlcgorCSAgICB9CisKKwkgICAgIyBOb3csIGNyZWF0ZSB0aGUgd3JhcHBlciBzY3JpcHQgZm9yIGZ1bmNfc291cmNlIHVzZToKKwkgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAkY3dyYXBwZXIKKwkgICAgJFJNICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICB0cmFwICIkUk0gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0OyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICMgbm90ZTogdGhpcyBzY3JpcHQgd2lsbCBub3QgYmUgZXhlY3V0ZWQsIHNvIGRvIG5vdCBjaG1vZC4KKwkgICAgICBpZiB0ZXN0ICJ4JGJ1aWxkIiA9ICJ4JGhvc3QiIDsgdGhlbgorCQkkY3dyYXBwZXIgLS1sdC1kdW1wLXNjcmlwdCA+ICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICAgIGVsc2UKKwkJZnVuY19lbWl0X3dyYXBwZXIgbm8gPiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgICBmaQorCSAgICB9CisJICA7OworCSAgKiApCisJICAgICRSTSAkb3V0cHV0CisJICAgIHRyYXAgIiRSTSAkb3V0cHV0OyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQorCisJICAgIGZ1bmNfZW1pdF93cmFwcGVyIG5vID4gJG91dHB1dAorCSAgICBjaG1vZCAreCAkb3V0cHV0CisJICA7OworCWVzYWMKKyAgICAgIH0KKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIFNlZSBpZiB3ZSBuZWVkIHRvIGJ1aWxkIGFuIG9sZC1mYXNoaW9uZWQgYXJjaGl2ZS4KKyAgICBmb3Igb2xkbGliIGluICRvbGRsaWJzOyBkbworCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IGNvbnZlbmllbmNlOyB0aGVuCisJb2xkb2Jqcz0iJGxpYm9ianNfc2F2ZSAkc3ltZmlsZW9iaiIKKwlhZGRsaWJzPSIkY29udmVuaWVuY2UiCisJYnVpbGRfbGlidG9vbF9saWJzPW5vCisgICAgICBlbHNlCisJaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBtb2R1bGU7IHRoZW4KKwkgIG9sZG9ianM9IiRsaWJvYmpzX3NhdmUiCisJICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKwllbHNlCisJICBvbGRvYmpzPSIkb2xkX2RlcGxpYnMgJG5vbl9waWNfb2JqZWN0cyIKKwkgIGlmIHRlc3QgIiRwcmVsb2FkIiA9IHllcyAmJiB0ZXN0IC1mICIkc3ltZmlsZW9iaiI7IHRoZW4KKwkgICAgb2xkb2Jqcz0iJG9sZG9ianMgJHN5bWZpbGVvYmoiCisJICBmaQorCWZpCisJYWRkbGlicz0iJG9sZF9jb252ZW5pZW5jZSIKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRhZGRsaWJzIjsgdGhlbgorCWdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisKKwlmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkYWRkbGlicworCW9sZG9ianM9IiRvbGRvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorICAgICAgZmkKKworICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGFyY2hpdmUgY29tbWFuZHMuCisgICAgICBpZiB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgJiYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKwljbWRzPSRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzCisgICAgICBlbHNlCisKKwkjIEFkZCBhbnkgb2JqZWN0cyBmcm9tIHByZWxvYWRlZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMKKwlpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KKwkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKworCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKKwkgIG9sZG9ianM9IiRvbGRvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorCWZpCisKKwkjIFBPU0lYIGRlbWFuZHMgbm8gcGF0aHMgdG8gYmUgZW5jb2RlZCBpbiBhcmNoaXZlcy4gIFdlIGhhdmUKKwkjIHRvIGF2b2lkIGNyZWF0aW5nIGFyY2hpdmVzIHdpdGggZHVwbGljYXRlIGJhc2VuYW1lcyBpZiB3ZQorCSMgbWlnaHQgaGF2ZSB0byBleHRyYWN0IHRoZW0gYWZ0ZXJ3YXJkcywgZS5nLiwgd2hlbiBjcmVhdGluZyBhCisJIyBzdGF0aWMgYXJjaGl2ZSBvdXQgb2YgYSBjb252ZW5pZW5jZSBsaWJyYXJ5LCBvciB3aGVuIGxpbmtpbmcKKwkjIHRoZSBlbnRpcmV0eSBvZiBhIGxpYnRvb2wgYXJjaGl2ZSBpbnRvIGFub3RoZXIgKGN1cnJlbnRseQorCSMgbm90IHN1cHBvcnRlZCBieSBsaWJ0b29sKS4KKwlpZiAoZm9yIG9iaiBpbiAkb2xkb2JqcworCSAgICBkbworCSAgICAgIGZ1bmNfYmFzZW5hbWUgIiRvYmoiCisJICAgICAgJEVDSE8gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgZG9uZSB8IHNvcnQgfCBzb3J0IC11YyA+L2Rldi9udWxsIDI+JjEpOyB0aGVuCisJICA6CisJZWxzZQorCSAgZWNobyAiY29weWluZyBzZWxlY3RlZCBvYmplY3QgZmlsZXMgdG8gYXZvaWQgYmFzZW5hbWUgY29uZmxpY3RzLi4uIgorCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwkgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorCSAgZnVuY19ta2Rpcl9wICIkZ2VudG9wIgorCSAgc2F2ZV9vbGRvYmpzPSRvbGRvYmpzCisJICBvbGRvYmpzPQorCSAgY291bnRlcj0xCisJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKKwkgIGRvCisJICAgIGZ1bmNfYmFzZW5hbWUgIiRvYmoiCisJICAgIG9iamJhc2U9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgY2FzZSAiICRvbGRvYmpzICIgaW4KKwkgICAgIiAiKSBvbGRvYmpzPSRvYmogOzsKKwkgICAgKltcIC9dIiRvYmpiYXNlICIqKQorCSAgICAgIHdoaWxlIDo7IGRvCisJCSMgTWFrZSBzdXJlIHdlIGRvbid0IHBpY2sgYW4gYWx0ZXJuYXRlIG5hbWUgdGhhdCBhbHNvCisJCSMgb3ZlcmxhcHMuCisJCW5ld29iaj1sdCRjb3VudGVyLSRvYmpiYXNlCisJCWZ1bmNfYXJpdGggJGNvdW50ZXIgKyAxCisJCWNvdW50ZXI9JGZ1bmNfYXJpdGhfcmVzdWx0CisJCWNhc2UgIiAkb2xkb2JqcyAiIGluCisJCSpbXCAvXSIkbmV3b2JqICIqKSA7OworCQkqKSBpZiB0ZXN0ICEgLWYgIiRnZW50b3AvJG5ld29iaiI7IHRoZW4gYnJlYWs7IGZpIDs7CisJCWVzYWMKKwkgICAgICBkb25lCisJICAgICAgZnVuY19zaG93X2V2YWwgImxuICRvYmogJGdlbnRvcC8kbmV3b2JqIHx8IGNwICRvYmogJGdlbnRvcC8kbmV3b2JqIgorCSAgICAgIG9sZG9ianM9IiRvbGRvYmpzICRnZW50b3AvJG5ld29iaiIKKwkgICAgICA7OworCSAgICAqKSBvbGRvYmpzPSIkb2xkb2JqcyAkb2JqIiA7OworCSAgICBlc2FjCisJICBkb25lCisJZmkKKwlldmFsIGNtZHM9XCIkb2xkX2FyY2hpdmVfY21kc1wiCisKKwlmdW5jX2xlbiAiICRjbWRzIgorCWxlbj0kZnVuY19sZW5fcmVzdWx0CisJaWYgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisJICBjbWRzPSRvbGRfYXJjaGl2ZV9jbWRzCisJZWxzZQorCSAgIyB0aGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGxpbmsgaW4gb25lIHN0ZXAsIGxpbmsgaW4gcGFydHMKKwkgIGZ1bmNfdmVyYm9zZSAidXNpbmcgcGllY2V3aXNlIGFyY2hpdmUgbGlua2luZy4uLiIKKwkgIHNhdmVfUkFOTElCPSRSQU5MSUIKKwkgIFJBTkxJQj06CisJICBvYmpsaXN0PQorCSAgY29uY2F0X2NtZHM9CisJICBzYXZlX29sZG9ianM9JG9sZG9ianMKKwkgIG9sZG9ianM9CisJICAjIElzIHRoZXJlIGEgYmV0dGVyIHdheSBvZiBmaW5kaW5nIHRoZSBsYXN0IG9iamVjdCBpbiB0aGUgbGlzdD8KKwkgIGZvciBvYmogaW4gJHNhdmVfb2xkb2JqcworCSAgZG8KKwkgICAgbGFzdF9vbGRvYmo9JG9iagorCSAgZG9uZQorCSAgZXZhbCB0ZXN0X2NtZHM9XCIkb2xkX2FyY2hpdmVfY21kc1wiCisJICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiCisJICBsZW4wPSRmdW5jX2xlbl9yZXN1bHQKKwkgIGxlbj0kbGVuMAorCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCisJICBkbworCSAgICBmdW5jX2xlbiAiICRvYmoiCisJICAgIGZ1bmNfYXJpdGggJGxlbiArICRmdW5jX2xlbl9yZXN1bHQKKwkgICAgbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICBmdW5jX2FwcGVuZCBvYmpsaXN0ICIgJG9iaiIKKwkgICAgaWYgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iOyB0aGVuCisJICAgICAgOgorCSAgICBlbHNlCisJICAgICAgIyB0aGUgYWJvdmUgY29tbWFuZCBzaG91bGQgYmUgdXNlZCBiZWZvcmUgaXQgZ2V0cyB0b28gbG9uZworCSAgICAgIG9sZG9ianM9JG9iamxpc3QKKwkgICAgICBpZiB0ZXN0ICIkb2JqIiA9ICIkbGFzdF9vbGRvYmoiIDsgdGhlbgorCQlSQU5MSUI9JHNhdmVfUkFOTElCCisJICAgICAgZmkKKwkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9JG9sZF9hcmNoaXZlX2NtZHNcIgorCSAgICAgIG9iamxpc3Q9CisJICAgICAgbGVuPSRsZW4wCisJICAgIGZpCisJICBkb25lCisJICBSQU5MSUI9JHNhdmVfUkFOTElCCisJICBvbGRvYmpzPSRvYmpsaXN0CisJICBpZiB0ZXN0ICJYJG9sZG9ianMiID0gIlgiIDsgdGhlbgorCSAgICBldmFsIGNtZHM9XCJcJGNvbmNhdF9jbWRzXCIKKwkgIGVsc2UKKwkgICAgZXZhbCBjbWRzPVwiXCRjb25jYXRfY21kc35cJG9sZF9hcmNoaXZlX2NtZHNcIgorCSAgZmkKKwlmaQorICAgICAgZmkKKyAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkY21kcyIgJ2V4aXQgJD8nCisgICAgZG9uZQorCisgICAgdGVzdCAtbiAiJGdlbmVyYXRlZCIgJiYgXAorICAgICAgZnVuY19zaG93X2V2YWwgIiR7Uk19ciRnZW5lcmF0ZWQiCisKKyAgICAjIE5vdyBjcmVhdGUgdGhlIGxpYnRvb2wgYXJjaGl2ZS4KKyAgICBjYXNlICRvdXRwdXQgaW4KKyAgICAqLmxhKQorICAgICAgb2xkX2xpYnJhcnk9CisgICAgICB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzICYmIG9sZF9saWJyYXJ5PSIkbGlibmFtZS4kbGliZXh0IgorICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0IgorCisgICAgICAjIFByZXNlcnZlIGFueSB2YXJpYWJsZXMgdGhhdCBtYXkgYWZmZWN0IGNvbXBpbGVyIGJlaGF2aW9yCisgICAgICBmb3IgdmFyIGluICR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluazsgZG8KKwlpZiBldmFsIHRlc3QgLXogXCJcJHskdmFyK3NldH1cIjsgdGhlbgorCSAgcmVsaW5rX2NvbW1hbmQ9InsgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiIHx8ICRsdF91bnNldCAkdmFyIHx8IHsgJHZhcj07IGV4cG9ydCAkdmFyOyB9OyB9OyAkcmVsaW5rX2NvbW1hbmQiCisJZWxpZiBldmFsIHZhcl92YWx1ZT1cJCR2YXI7IHRlc3QgLXogIiR2YXJfdmFsdWUiOyB0aGVuCisJICByZWxpbmtfY29tbWFuZD0iJHZhcj07IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCisJZWxzZQorCSAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHZhcl92YWx1ZSIKKwkgIHJlbGlua19jb21tYW5kPSIkdmFyPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdDsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwlmaQorICAgICAgZG9uZQorICAgICAgIyBRdW90ZSB0aGUgbGluayBjb21tYW5kIGZvciBzaGlwcGluZy4KKyAgICAgIHJlbGlua19jb21tYW5kPSIoY2QgYHB3ZGA7ICRTSEVMTCAkcHJvZ3BhdGggJHByZXNlcnZlX2FyZ3MgLS1tb2RlPXJlbGluayAkbGlidG9vbF9hcmdzIEBpbnN0X3ByZWZpeF9kaXJAKSIKKyAgICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSB5ZXMgOyB0aGVuCisJcmVsaW5rX2NvbW1hbmQ9CisgICAgICBmaQorCisgICAgICAjIE9ubHkgY3JlYXRlIHRoZSBvdXRwdXQgaWYgbm90IGEgZHJ5IHJ1bi4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisJZm9yIGluc3RhbGxlZCBpbiBubyB5ZXM7IGRvCisJICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IHllczsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkaW5zdGFsbF9saWJkaXIiOyB0aGVuCisJICAgICAgYnJlYWsKKwkgICAgZmkKKwkgICAgb3V0cHV0PSIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSJpCisJICAgICMgUmVwbGFjZSBhbGwgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMgd2l0aCB0aGUgaW5zdGFsbGVkIG9uZXMKKwkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPQorCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgY2FzZSAkZGVwbGliIGluCisJICAgICAgKi5sYSkKKwkJZnVuY19iYXNlbmFtZSAiJGRlcGxpYiIKKwkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCW5ld2RlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyAkbGliZGlyLyRuYW1lIgorCQk7OworCSAgICAgICopIG5ld2RlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICBkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIG5ld2RsZmlsZXM9CisKKwkgICAgZm9yIGxpYiBpbiAkZGxmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkgICAgICAqLmxhKQorCSAgICAgICAgZnVuY19iYXNlbmFtZSAiJGxpYiIKKwkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCW5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRsaWJkaXIvJG5hbWUiCisJCTs7CisJICAgICAgKikgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCisJICAgIG5ld2RscHJlZmlsZXM9CisJICAgIGZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJICAgICAgKi5sYSkKKwkJIyBPbmx5IHBhc3MgcHJlb3BlbmVkIGZpbGVzIHRvIHRoZSBwc2V1ZG8tYXJjaGl2ZSAoZm9yCisJCSMgZXZlbnR1YWwgbGlua2luZyB3aXRoIHRoZSBhcHAuIHRoYXQgbGlua3MgaXQpIGlmIHdlCisJCSMgZGlkbid0IGFscmVhZHkgbGluayB0aGUgcHJlb3BlbmVkIG9iamVjdHMgZGlyZWN0bHkgaW50bworCQkjIHRoZSBsaWJyYXJ5OgorCQlmdW5jX2Jhc2VuYW1lICIkbGliIgorCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCisJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGxpYmRpci8kbmFtZSIKKwkJOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisJICBlbHNlCisJICAgIG5ld2RsZmlsZXM9CisJICAgIGZvciBsaWIgaW4gJGRsZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSIkbGliIiA7OworCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CisJICAgICAgZXNhYworCSAgICAgIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRhYnMiCisJICAgIGRvbmUKKwkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCisJICAgIG5ld2RscHJlZmlsZXM9CisJICAgIGZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSIkbGliIiA7OworCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CisJICAgICAgZXNhYworCSAgICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRhYnMiCisJICAgIGRvbmUKKwkgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisJICBmaQorCSAgJFJNICRvdXRwdXQKKwkgICMgcGxhY2UgZGxuYW1lIGluIGNvcnJlY3QgcG9zaXRpb24gZm9yIGN5Z3dpbgorCSAgIyBJbiBmYWN0LCBpdCB3b3VsZCBiZSBuaWNlIGlmIHdlIGNvdWxkIHVzZSB0aGlzIGNvZGUgZm9yIGFsbCB0YXJnZXQKKwkgICMgc3lzdGVtcyB0aGF0IGNhbid0IGhhcmQtY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gdGhlaXIgZXhlY3V0YWJsZXMKKwkgICMgYW5kIHRoYXQgaGF2ZSBubyBzaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlIGluZGVwZW5kZW50IG9mIFBBVEgsCisJICAjIGJ1dCBpdCB0dXJucyBvdXQgd2UgY2FuJ3QgZWFzaWx5IGRldGVybWluZSB0aGF0IGZyb20gaW5zcGVjdGluZworCSAgIyBsaWJ0b29sIHZhcmlhYmxlcywgc28gd2UgaGF2ZSB0byBoYXJkLWNvZGUgdGhlIE9TcyB0byB3aGljaCBpdAorCSAgIyBhcHBsaWVzIGhlcmU7IGF0IHRoZSBtb21lbnQsIHRoYXQgbWVhbnMgcGxhdGZvcm1zIHRoYXQgdXNlIHRoZSBQRQorCSAgIyBvYmplY3QgZm9ybWF0IHdpdGggRExMIGZpbGVzLiAgU2VlIHRoZSBsb25nIGNvbW1lbnQgYXQgdGhlIHRvcCBvZgorCSAgIyB0ZXN0cy9iaW5kaXIuYXQgZm9yIGZ1bGwgZGV0YWlscy4KKwkgIHRkbG5hbWU9JGRsbmFtZQorCSAgY2FzZSAkaG9zdCwkb3V0cHV0LCRpbnN0YWxsZWQsJG1vZHVsZSwkZGxuYW1lIGluCisJICAgICpjeWd3aW4qLCpsYWkseWVzLG5vLCouZGxsIHwgKm1pbmd3KiwqbGFpLHllcyxubywqLmRsbCB8ICpjZWdjYyosKmxhaSx5ZXMsbm8sKi5kbGwpCisJICAgICAgIyBJZiBhIC1iaW5kaXIgYXJndW1lbnQgd2FzIHN1cHBsaWVkLCBwbGFjZSB0aGUgZGxsIHRoZXJlLgorCSAgICAgIGlmIHRlc3QgIngkYmluZGlyIiAhPSB4IDsKKwkgICAgICB0aGVuCisJCWZ1bmNfcmVsYXRpdmVfcGF0aCAiJGluc3RhbGxfbGliZGlyIiAiJGJpbmRpciIKKwkJdGRsbmFtZT0kZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCRkbG5hbWUKKwkgICAgICBlbHNlCisJCSMgT3RoZXJ3aXNlIGZhbGwgYmFjayBvbiBoZXVyaXN0aWMuCisJCXRkbG5hbWU9Li4vYmluLyRkbG5hbWUKKwkgICAgICBmaQorCSAgICAgIDs7CisJICBlc2FjCisJICAkRUNITyA+ICRvdXRwdXQgIlwKKyMgJG91dHB1dG5hbWUgLSBhIGxpYnRvb2wgbGlicmFyeSBmaWxlCisjIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMKKyMgUGxlYXNlIERPIE5PVCBkZWxldGUgdGhpcyBmaWxlIQorIyBJdCBpcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgdGhlIGxpYnJhcnkuCisKKyMgVGhlIG5hbWUgdGhhdCB3ZSBjYW4gZGxvcGVuKDMpLgorZGxuYW1lPSckdGRsbmFtZScKKworIyBOYW1lcyBvZiB0aGlzIGxpYnJhcnkuCitsaWJyYXJ5X25hbWVzPSckbGlicmFyeV9uYW1lcycKKworIyBUaGUgbmFtZSBvZiB0aGUgc3RhdGljIGFyY2hpdmUuCitvbGRfbGlicmFyeT0nJG9sZF9saWJyYXJ5JworCisjIExpbmtlciBmbGFncyB0aGF0IGNhbiBub3QgZ28gaW4gZGVwZW5kZW5jeV9saWJzLgoraW5oZXJpdGVkX2xpbmtlcl9mbGFncz0nJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzJworCisjIExpYnJhcmllcyB0aGF0IHRoaXMgb25lIGRlcGVuZHMgdXBvbi4KK2RlcGVuZGVuY3lfbGlicz0nJGRlcGVuZGVuY3lfbGlicycKKworIyBOYW1lcyBvZiBhZGRpdGlvbmFsIHdlYWsgbGlicmFyaWVzIHByb3ZpZGVkIGJ5IHRoaXMgbGlicmFyeQord2Vha19saWJyYXJ5X25hbWVzPSckd2Vha19saWJzJworCisjIFZlcnNpb24gaW5mb3JtYXRpb24gZm9yICRsaWJuYW1lLgorY3VycmVudD0kY3VycmVudAorYWdlPSRhZ2UKK3JldmlzaW9uPSRyZXZpc2lvbgorCisjIElzIHRoaXMgYW4gYWxyZWFkeSBpbnN0YWxsZWQgbGlicmFyeT8KK2luc3RhbGxlZD0kaW5zdGFsbGVkCisKKyMgU2hvdWxkIHdlIHdhcm4gYWJvdXQgcG9ydGFiaWxpdHkgd2hlbiBsaW5raW5nIGFnYWluc3QgLW1vZHVsZXM/CitzaG91bGRub3RsaW5rPSRtb2R1bGUKKworIyBGaWxlcyB0byBkbG9wZW4vZGxwcmVvcGVuCitkbG9wZW49JyRkbGZpbGVzJworZGxwcmVvcGVuPSckZGxwcmVmaWxlcycKKworIyBEaXJlY3RvcnkgdGhhdCB0aGlzIGxpYnJhcnkgbmVlZHMgdG8gYmUgaW5zdGFsbGVkIGluOgorbGliZGlyPSckaW5zdGFsbF9saWJkaXInIgorCSAgaWYgdGVzdCAiJGluc3RhbGxlZCIgPSBubyAmJiB0ZXN0ICIkbmVlZF9yZWxpbmsiID0geWVzOyB0aGVuCisJICAgICRFQ0hPID4+ICRvdXRwdXQgIlwKK3JlbGlua19jb21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIiCisJICBmaQorCWRvbmUKKyAgICAgIH0KKworICAgICAgIyBEbyBhIHN5bWJvbGljIGxpbmsgc28gdGhhdCB0aGUgbGlidG9vbCBhcmNoaXZlIGNhbiBiZSBmb3VuZCBpbgorICAgICAgIyBMRF9MSUJSQVJZX1BBVEggYmVmb3JlIHRoZSBwcm9ncmFtIGlzIGluc3RhbGxlZC4KKyAgICAgIGZ1bmNfc2hvd19ldmFsICcoIGNkICIkb3V0cHV0X29iamRpciIgJiYgJFJNICIkb3V0cHV0bmFtZSIgJiYgJExOX1MgIi4uLyRvdXRwdXRuYW1lIiAiJG91dHB1dG5hbWUiICknICdleGl0ICQ/JworICAgICAgOzsKKyAgICBlc2FjCisgICAgZXhpdCAkRVhJVF9TVUNDRVNTCit9CisKK3sgdGVzdCAiJG1vZGUiID0gbGluayB8fCB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IH0gJiYKKyAgICBmdW5jX21vZGVfbGluayAkezErIiRAIn0KKworCisjIGZ1bmNfbW9kZV91bmluc3RhbGwgYXJnLi4uCitmdW5jX21vZGVfdW5pbnN0YWxsICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIFJNPSIkbm9ub3B0IgorICAgIGZpbGVzPQorICAgIHJtZm9yY2U9CisgICAgZXhpdF9zdGF0dXM9MAorCisgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCisgICAgIyB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9pbnN0YWxsX21hZ2ljPSIkbWFnaWMiCisKKyAgICBmb3IgYXJnCisgICAgZG8KKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLWYpIFJNPSIkUk0gJGFyZyI7IHJtZm9yY2U9eWVzIDs7CisgICAgICAtKikgUk09IiRSTSAkYXJnIiA7OworICAgICAgKikgZmlsZXM9IiRmaWxlcyAkYXJnIiA7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIHRlc3QgLXogIiRSTSIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIFJNIHByb2dyYW0iCisKKyAgICBybWRpcnM9CisKKyAgICBvcmlnb2JqZGlyPSIkb2JqZGlyIgorICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KKyAgICAgIGZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgorICAgICAgZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyAgICAgIGlmIHRlc3QgIlgkZGlyIiA9IFguOyB0aGVuCisJb2JqZGlyPSIkb3JpZ29iamRpciIKKyAgICAgIGVsc2UKKwlvYmpkaXI9IiRkaXIvJG9yaWdvYmpkaXIiCisgICAgICBmaQorICAgICAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisgICAgICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgICB0ZXN0ICIkbW9kZSIgPSB1bmluc3RhbGwgJiYgb2JqZGlyPSIkZGlyIgorCisgICAgICAjIFJlbWVtYmVyIG9iamRpciBmb3IgcmVtb3ZhbCBsYXRlciwgYmVpbmcgY2FyZWZ1bCB0byBhdm9pZCBkdXBsaWNhdGVzCisgICAgICBpZiB0ZXN0ICIkbW9kZSIgPSBjbGVhbjsgdGhlbgorCWNhc2UgIiAkcm1kaXJzICIgaW4KKwkgICoiICRvYmpkaXIgIiopIDs7CisJICAqKSBybWRpcnM9IiRybWRpcnMgJG9iamRpciIgOzsKKwllc2FjCisgICAgICBmaQorCisgICAgICAjIERvbid0IGVycm9yIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QgYW5kIHJtIC1mIHdhcyB1c2VkLgorICAgICAgaWYgeyB0ZXN0IC1MICIkZmlsZSI7IH0gPi9kZXYvbnVsbCAyPiYxIHx8CisJIHsgdGVzdCAtaCAiJGZpbGUiOyB9ID4vZGV2L251bGwgMj4mMSB8fAorCSB0ZXN0IC1mICIkZmlsZSI7IHRoZW4KKwk6CisgICAgICBlbGlmIHRlc3QgLWQgIiRmaWxlIjsgdGhlbgorCWV4aXRfc3RhdHVzPTEKKwljb250aW51ZQorICAgICAgZWxpZiB0ZXN0ICIkcm1mb3JjZSIgPSB5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZmkKKworICAgICAgcm1maWxlcz0iJGZpbGUiCisKKyAgICAgIGNhc2UgJG5hbWUgaW4KKyAgICAgICoubGEpCisJIyBQb3NzaWJseSBhIGxpYnRvb2wgYXJjaGl2ZSwgc28gdmVyaWZ5IGl0LgorCWlmIGZ1bmNfbGFsaWJfcCAiJGZpbGUiOyB0aGVuCisJICBmdW5jX3NvdXJjZSAkZGlyLyRuYW1lCisKKwkgICMgRGVsZXRlIHRoZSBsaWJ0b29sIGxpYnJhcmllcyBhbmQgc3ltbGlua3MuCisJICBmb3IgbiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKwkgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbiIKKwkgIGRvbmUKKwkgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kb2xkX2xpYnJhcnkiCisKKwkgIGNhc2UgIiRtb2RlIiBpbgorCSAgY2xlYW4pCisJICAgIGNhc2UgIiAgJGxpYnJhcnlfbmFtZXMgIiBpbgorCSAgICAjICIgICIgaW4gdGhlIGJlZ2lubmluZyBjYXRjaGVzIGVtcHR5ICRkbG5hbWUKKwkgICAgKiIgJGRsbmFtZSAiKikgOzsKKwkgICAgKikgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kZGxuYW1lIiA7OworCSAgICBlc2FjCisJICAgIHRlc3QgLW4gIiRsaWJkaXIiICYmIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG5hbWUgJG9iamRpci8ke25hbWV9aSIKKwkgICAgOzsKKwkgIHVuaW5zdGFsbCkKKwkgICAgaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiOyB0aGVuCisJICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3R1bmluc3RhbGwgY29tbWFuZHMuCisJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0dW5pbnN0YWxsX2NtZHMiICd0ZXN0ICIkcm1mb3JjZSIgPSB5ZXMgfHwgZXhpdF9zdGF0dXM9MScKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCisJICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIG9sZF9wb3N0dW5pbnN0YWxsIGNvbW1hbmRzLgorCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkb2xkX3Bvc3R1bmluc3RhbGxfY21kcyIgJ3Rlc3QgIiRybWZvcmNlIiA9IHllcyB8fCBleGl0X3N0YXR1cz0xJworCSAgICBmaQorCSAgICAjIEZJWE1FOiBzaG91bGQgcmVpbnN0YWxsIHRoZSBiZXN0IHJlbWFpbmluZyBzaGFyZWQgbGlicmFyeS4KKwkgICAgOzsKKwkgIGVzYWMKKwlmaQorCTs7CisKKyAgICAgICoubG8pCisJIyBQb3NzaWJseSBhIGxpYnRvb2wgb2JqZWN0LCBzbyB2ZXJpZnkgaXQuCisJaWYgZnVuY19sYWxpYl9wICIkZmlsZSI7IHRoZW4KKworCSAgIyBSZWFkIHRoZSAubG8gZmlsZQorCSAgZnVuY19zb3VyY2UgJGRpci8kbmFtZQorCisJICAjIEFkZCBQSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KKwkgIGlmIHRlc3QgLW4gIiRwaWNfb2JqZWN0IiAmJgorCSAgICAgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkgICAgcm1maWxlcz0iJHJtZmlsZXMgJGRpci8kcGljX29iamVjdCIKKwkgIGZpCisKKwkgICMgQWRkIG5vbi1QSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KKwkgIGlmIHRlc3QgLW4gIiRub25fcGljX29iamVjdCIgJiYKKwkgICAgIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgICBybWZpbGVzPSIkcm1maWxlcyAkZGlyLyRub25fcGljX29iamVjdCIKKwkgIGZpCisJZmkKKwk7OworCisgICAgICAqKQorCWlmIHRlc3QgIiRtb2RlIiA9IGNsZWFuIDsgdGhlbgorCSAgbm9leGVuYW1lPSRuYW1lCisJICBjYXNlICRmaWxlIGluCisJICAqLmV4ZSkKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZmlsZSIKKwkgICAgZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG5hbWUiCisJICAgIG5vZXhlbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICMgJGZpbGUgd2l0aCAuZXhlIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gcm1maWxlcywKKwkgICAgIyBhZGQgJGZpbGUgd2l0aG91dCAuZXhlCisJICAgIHJtZmlsZXM9IiRybWZpbGVzICRmaWxlIgorCSAgICA7OworCSAgZXNhYworCSAgIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgYSBsaWJ0b29sIHByb2dyYW0uCisJICBpZiBmdW5jX2x0d3JhcHBlcl9wICIkZmlsZSI7IHRoZW4KKwkgICAgaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KKwkgICAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKKwkgICAgICByZWxpbmtfY29tbWFuZD0KKwkgICAgICBmdW5jX3NvdXJjZSAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgICBybWZpbGVzPSIkcm1maWxlcyAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQiCisJICAgIGVsc2UKKwkgICAgICByZWxpbmtfY29tbWFuZD0KKwkgICAgICBmdW5jX3NvdXJjZSAkZGlyLyRub2V4ZW5hbWUKKwkgICAgZmkKKworCSAgICAjIG5vdGUgJG5hbWUgc3RpbGwgY29udGFpbnMgLmV4ZSBpZiBpdCB3YXMgaW4gJGZpbGUgb3JpZ2luYWxseQorCSAgICAjIGFzIGRvZXMgdGhlIHZlcnNpb24gb2YgJGZpbGUgdGhhdCB3YXMgYWRkZWQgaW50byAkcm1maWxlcworCSAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRuYW1lICRvYmpkaXIvJHtuYW1lfVMuJHtvYmpleHR9IgorCSAgICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllcyAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJICAgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci9sdC0kbmFtZSIKKwkgICAgZmkKKwkgICAgaWYgdGVzdCAiWCRub2V4ZW5hbWUiICE9ICJYJG5hbWUiIDsgdGhlbgorCSAgICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvbHQtJHtub2V4ZW5hbWV9LmMiCisJICAgIGZpCisJICBmaQorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkUk0gJHJtZmlsZXMiICdleGl0X3N0YXR1cz0xJworICAgIGRvbmUKKyAgICBvYmpkaXI9IiRvcmlnb2JqZGlyIgorCisgICAgIyBUcnkgdG8gcmVtb3ZlIHRoZSAke29iamRpcn1zIGluIHRoZSBkaXJlY3RvcmllcyB3aGVyZSB3ZSBkZWxldGVkIGZpbGVzCisgICAgZm9yIGRpciBpbiAkcm1kaXJzOyBkbworICAgICAgaWYgdGVzdCAtZCAiJGRpciI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAicm1kaXIgJGRpciA+L2Rldi9udWxsIDI+JjEiCisgICAgICBmaQorICAgIGRvbmUKKworICAgIGV4aXQgJGV4aXRfc3RhdHVzCit9CisKK3sgdGVzdCAiJG1vZGUiID0gdW5pbnN0YWxsIHx8IHRlc3QgIiRtb2RlIiA9IGNsZWFuOyB9ICYmCisgICAgZnVuY19tb2RlX3VuaW5zdGFsbCAkezErIiRAIn0KKwordGVzdCAteiAiJG1vZGUiICYmIHsKKyAgaGVscD0iJGdlbmVyaWNfaGVscCIKKyAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgTU9ERSIKK30KKwordGVzdCAteiAiJGV4ZWNfY21kIiAmJiBcCisgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRtb2RlJyIKKworaWYgdGVzdCAtbiAiJGV4ZWNfY21kIjsgdGhlbgorICBldmFsIGV4ZWMgIiRleGVjX2NtZCIKKyAgZXhpdCAkRVhJVF9GQUlMVVJFCitmaQorCitleGl0ICRleGl0X3N0YXR1cworCisKKyMgVGhlIFRBR3MgYmVsb3cgYXJlIGRlZmluZWQgc3VjaCB0aGF0IHdlIG5ldmVyIGdldCBpbnRvIGEgc2l0dWF0aW9uCisjIGluIHdoaWNoIHdlIGRpc2FibGUgYm90aCBraW5kcyBvZiBsaWJyYXJpZXMuICBHaXZlbiBjb25mbGljdGluZworIyBjaG9pY2VzLCB3ZSBnbyBmb3IgYSBzdGF0aWMgbGlicmFyeSwgdGhhdCBpcyB0aGUgbW9zdCBwb3J0YWJsZSwKKyMgc2luY2Ugd2UgY2FuJ3QgdGVsbCB3aGV0aGVyIHNoYXJlZCBsaWJyYXJpZXMgd2VyZSBkaXNhYmxlZCBiZWNhdXNlCisjIHRoZSB1c2VyIGFza2VkIGZvciB0aGF0IG9yIGJlY2F1c2UgdGhlIHBsYXRmb3JtIGRvZXNuJ3Qgc3VwcG9ydAorIyB0aGVtLiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IG9uIEFJWCwgYmVjYXVzZSB3ZSBkb24ndAorIyBzdXBwb3J0IGhhdmluZyBib3RoIHN0YXRpYyBhbmQgc2hhcmVkIGxpYnJhcmllcyBlbmFibGVkIGF0IHRoZSBzYW1lCisjIHRpbWUgb24gdGhhdCBwbGF0Zm9ybSwgc28gd2UgZGVmYXVsdCB0byBhIHNoYXJlZC1vbmx5IGNvbmZpZ3VyYXRpb24uCisjIElmIGEgZGlzYWJsZS1zaGFyZWQgdGFnIGlzIGdpdmVuLCB3ZSdsbCBmYWxsYmFjayB0byBhIHN0YXRpYy1vbmx5CisjIGNvbmZpZ3VyYXRpb24uICBCdXQgd2UnbGwgbmV2ZXIgZ28gZnJvbSBzdGF0aWMtb25seSB0byBzaGFyZWQtb25seS4KKworIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXNoYXJlZAorYnVpbGRfbGlidG9vbF9saWJzPW5vCitidWlsZF9vbGRfbGlicz15ZXMKKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc2hhcmVkCisKKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zdGF0aWMKK2J1aWxkX29sZF9saWJzPWBjYXNlICRidWlsZF9saWJ0b29sX2xpYnMgaW4geWVzKSBlY2hvIG5vOzsgKikgZWNobyB5ZXM7OyBlc2FjYAorIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zdGF0aWMKKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6c2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOjIKKyMgRW5kOgorIyB2aTpzdz0yCisKZGlmZiAtLWdpdCBhL3NoYXJlL2xpYnRvb2wvY29uZmlnL21pc3NpbmcgYi9zaGFyZS9saWJ0b29sL2NvbmZpZy9taXNzaW5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI4MDU1ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9saWJ0b29sL2NvbmZpZy9taXNzaW5nCkBAIC0wLDAgKzEsMzc2IEBACisjISAvYmluL3NoCisjIENvbW1vbiBzdHViIGZvciBhIGZldyBtaXNzaW5nIEdOVSBwcm9ncmFtcyB3aGlsZSBpbnN0YWxsaW5nLgorCitzY3JpcHR2ZXJzaW9uPTIwMDktMDQtMjguMjE7ICMgVVRDCisKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk5LCAyMDAwLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LAorIyAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBPcmlnaW5hbGx5IGJ5IEZyYW4sY29pcyBQaW5hcmQgPHBpbmFyZEBpcm8udW1vbnRyZWFsLmNhPiwgMTk5Ni4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCitpZiB0ZXN0ICQjIC1lcSAwOyB0aGVuCisgIGVjaG8gMT4mMiAiVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKKyAgZXhpdCAxCitmaQorCitydW49Ogorc2VkX291dHB1dD0ncy8uKiAtLW91dHB1dFsgPV1cKFteIF0qXCkuKi9cMS9wJworc2VkX21pbnVzbz0ncy8uKiAtbyBcKFteIF0qXCkuKi9cMS9wJworCisjIEluIHRoZSBjYXNlcyB3aGVyZSB0aGlzIG1hdHRlcnMsIGBtaXNzaW5nJyBpcyBiZWluZyBydW4gaW4gdGhlCisjIHNyY2RpciBhbHJlYWR5LgoraWYgdGVzdCAtZiBjb25maWd1cmUuYWM7IHRoZW4KKyAgY29uZmlndXJlX2FjPWNvbmZpZ3VyZS5hYworZWxzZQorICBjb25maWd1cmVfYWM9Y29uZmlndXJlLmluCitmaQorCittc2c9Im1pc3Npbmcgb24geW91ciBzeXN0ZW0iCisKK2Nhc2UgJDEgaW4KKy0tcnVuKQorICAjIFRyeSB0byBydW4gcmVxdWVzdGVkIHByb2dyYW0sIGFuZCBqdXN0IGV4aXQgaWYgaXQgc3VjY2VlZHMuCisgIHJ1bj0KKyAgc2hpZnQKKyAgIiRAIiAmJiBleGl0IDAKKyAgIyBFeGl0IGNvZGUgNjMgbWVhbnMgdmVyc2lvbiBtaXNtYXRjaC4gIFRoaXMgb2Z0ZW4gaGFwcGVucworICAjIHdoZW4gdGhlIHVzZXIgdHJ5IHRvIHVzZSBhbiBhbmNpZW50IHZlcnNpb24gb2YgYSB0b29sIG9uCisgICMgYSBmaWxlIHRoYXQgcmVxdWlyZXMgYSBtaW5pbXVtIHZlcnNpb24uICBJbiB0aGlzIGNhc2Ugd2UKKyAgIyB3ZSBzaG91bGQgcHJvY2VlZCBoYXMgaWYgdGhlIHByb2dyYW0gaGFkIGJlZW4gYWJzZW50LCBvcgorICAjIGlmIC0tcnVuIGhhZG4ndCBiZWVuIHBhc3NlZC4KKyAgaWYgdGVzdCAkPyA9IDYzOyB0aGVuCisgICAgcnVuPToKKyAgICBtc2c9InByb2JhYmx5IHRvbyBvbGQiCisgIGZpCisgIDs7CisKKyAgLWh8LS1ofC0taGV8LS1oZWx8LS1oZWxwKQorICAgIGVjaG8gIlwKKyQwIFtPUFRJT05dLi4uIFBST0dSQU0gW0FSR1VNRU5UXS4uLgorCitIYW5kbGUgXGBQUk9HUkFNIFtBUkdVTUVOVF0uLi4nIGZvciB3aGVuIFBST0dSQU0gaXMgbWlzc2luZywgb3IgcmV0dXJuIGFuCitlcnJvciBzdGF0dXMgaWYgdGhlcmUgaXMgbm8ga25vd24gaGFuZGxpbmcgZm9yIFBST0dSQU0uCisKK09wdGlvbnM6CisgIC1oLCAtLWhlbHAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAorICAtdiwgLS12ZXJzaW9uICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKyAgLS1ydW4gICAgICAgICAgIHRyeSB0byBydW4gdGhlIGdpdmVuIGNvbW1hbmQsIGFuZCBlbXVsYXRlIGl0IGlmIGl0IGZhaWxzCisKK1N1cHBvcnRlZCBQUk9HUkFNIHZhbHVlczoKKyAgYWNsb2NhbCAgICAgIHRvdWNoIGZpbGUgXGBhY2xvY2FsLm00JworICBhdXRvY29uZiAgICAgdG91Y2ggZmlsZSBcYGNvbmZpZ3VyZScKKyAgYXV0b2hlYWRlciAgIHRvdWNoIGZpbGUgXGBjb25maWcuaC5pbicKKyAgYXV0b200dGUgICAgIHRvdWNoIHRoZSBvdXRwdXQgZmlsZSwgb3IgY3JlYXRlIGEgc3R1YiBvbmUKKyAgYXV0b21ha2UgICAgIHRvdWNoIGFsbCBcYE1ha2VmaWxlLmluJyBmaWxlcworICBiaXNvbiAgICAgICAgY3JlYXRlIFxgeS50YWIuW2NoXScsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5bY2hdCisgIGZsZXggICAgICAgICBjcmVhdGUgXGBsZXgueXkuYycsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5jCisgIGhlbHAybWFuICAgICB0b3VjaCB0aGUgb3V0cHV0IGZpbGUKKyAgbGV4ICAgICAgICAgIGNyZWF0ZSBcYGxleC55eS5jJywgaWYgcG9zc2libGUsIGZyb20gZXhpc3RpbmcgLmMKKyAgbWFrZWluZm8gICAgIHRvdWNoIHRoZSBvdXRwdXQgZmlsZQorICB0YXIgICAgICAgICAgdHJ5IHRhciwgZ251dGFyLCBndGFyLCB0aGVuIHRhciB3aXRob3V0IG5vbi1wb3J0YWJsZSBmbGFncworICB5YWNjICAgICAgICAgY3JlYXRlIFxgeS50YWIuW2NoXScsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5bY2hdCisKK1ZlcnNpb24gc3VmZml4ZXMgdG8gUFJPR1JBTSBhcyB3ZWxsIGFzIHRoZSBwcmVmaXhlcyBcYGdudS0nLCBcYGdudScsIGFuZAorXGBnJyBhcmUgaWdub3JlZCB3aGVuIGNoZWNraW5nIHRoZSBuYW1lLgorCitTZW5kIGJ1ZyByZXBvcnRzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uIgorICAgIGV4aXQgJD8KKyAgICA7OworCisgIC12fC0tdnwtLXZlfC0tdmVyfC0tdmVyc3wtLXZlcnNpfC0tdmVyc2lvfC0tdmVyc2lvbikKKyAgICBlY2hvICJtaXNzaW5nICRzY3JpcHR2ZXJzaW9uIChHTlUgQXV0b21ha2UpIgorICAgIGV4aXQgJD8KKyAgICA7OworCisgIC0qKQorICAgIGVjaG8gMT4mMiAiJDA6IFVua25vd24gXGAkMScgb3B0aW9uIgorICAgIGVjaG8gMT4mMiAiVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKKyAgICBleGl0IDEKKyAgICA7OworCitlc2FjCisKKyMgbm9ybWFsaXplIHByb2dyYW0gbmFtZSB0byBjaGVjayBmb3IuCitwcm9ncmFtPWBlY2hvICIkMSIgfCBzZWQgJworICBzL15nbnUtLy87IHQKKyAgcy9eZ251Ly87IHQKKyAgcy9eZy8vOyB0J2AKKworIyBOb3cgZXhpdCBpZiB3ZSBoYXZlIGl0LCBidXQgaXQgZmFpbGVkLiAgQWxzbyBleGl0IG5vdyBpZiB3ZQorIyBkb24ndCBoYXZlIGl0IGFuZCAtLXZlcnNpb24gd2FzIHBhc3NlZCAobW9zdCBsaWtlbHkgdG8gZGV0ZWN0CisjIHRoZSBwcm9ncmFtKS4gIFRoaXMgaXMgYWJvdXQgbm9uLUdOVSBwcm9ncmFtcywgc28gdXNlICQxIG5vdAorIyAkcHJvZ3JhbS4KK2Nhc2UgJDEgaW4KKyAgbGV4Knx5YWNjKikKKyAgICAjIE5vdCBHTlUgcHJvZ3JhbXMsIHRoZXkgZG9uJ3QgaGF2ZSAtLXZlcnNpb24uCisgICAgOzsKKworICB0YXIqKQorICAgIGlmIHRlc3QgLW4gIiRydW4iOyB0aGVuCisgICAgICAgZWNobyAxPiYyICJFUlJPUjogXGB0YXInIHJlcXVpcmVzIC0tcnVuIgorICAgICAgIGV4aXQgMQorICAgIGVsaWYgdGVzdCAieCQyIiA9ICJ4LS12ZXJzaW9uIiB8fCB0ZXN0ICJ4JDIiID0gIngtLWhlbHAiOyB0aGVuCisgICAgICAgZXhpdCAxCisgICAgZmkKKyAgICA7OworCisgICopCisgICAgaWYgdGVzdCAteiAiJHJ1biIgJiYgKCQxIC0tdmVyc2lvbikgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICMgV2UgaGF2ZSBpdCwgYnV0IGl0IGZhaWxlZC4KKyAgICAgICBleGl0IDEKKyAgICBlbGlmIHRlc3QgIngkMiIgPSAieC0tdmVyc2lvbiIgfHwgdGVzdCAieCQyIiA9ICJ4LS1oZWxwIjsgdGhlbgorICAgICAgICMgQ291bGQgbm90IHJ1biAtLXZlcnNpb24gb3IgLS1oZWxwLiAgVGhpcyBpcyBwcm9iYWJseSBzb21lb25lCisgICAgICAgIyBydW5uaW5nIGAkVE9PTCAtLXZlcnNpb24nIG9yIGAkVE9PTCAtLWhlbHAnIHRvIGNoZWNrIHdoZXRoZXIKKyAgICAgICAjICRUT09MIGV4aXN0cyBhbmQgbm90IGtub3dpbmcgJFRPT0wgdXNlcyBtaXNzaW5nLgorICAgICAgIGV4aXQgMQorICAgIGZpCisgICAgOzsKK2VzYWMKKworIyBJZiBpdCBkb2VzIG5vdCBleGlzdCwgb3IgZmFpbHMgdG8gcnVuIChwb3NzaWJseSBhbiBvdXRkYXRlZCB2ZXJzaW9uKSwKKyMgdHJ5IHRvIGVtdWxhdGUgaXQuCitjYXNlICRwcm9ncmFtIGluCisgIGFjbG9jYWwqKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgXGBhY2luY2x1ZGUubTQnIG9yIFxgJHtjb25maWd1cmVfYWN9Jy4gIFlvdSBtaWdodCB3YW50CisgICAgICAgICB0byBpbnN0YWxsIHRoZSBcYEF1dG9tYWtlJyBhbmQgXGBQZXJsJyBwYWNrYWdlcy4gIEdyYWIgdGhlbSBmcm9tCisgICAgICAgICBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgdG91Y2ggYWNsb2NhbC5tNAorICAgIDs7CisKKyAgYXV0b2NvbmYqKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgXGAke2NvbmZpZ3VyZV9hY30nLiAgWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUKKyAgICAgICAgIFxgQXV0b2NvbmYnIGFuZCBcYEdOVSBtNCcgcGFja2FnZXMuICBHcmFiIHRoZW0gZnJvbSBhbnkgR05VCisgICAgICAgICBhcmNoaXZlIHNpdGUuIgorICAgIHRvdWNoIGNvbmZpZ3VyZQorICAgIDs7CisKKyAgYXV0b2hlYWRlciopCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKKyAgICAgICAgIHlvdSBtb2RpZmllZCBcYGFjY29uZmlnLmgnIG9yIFxgJHtjb25maWd1cmVfYWN9Jy4gIFlvdSBtaWdodCB3YW50CisgICAgICAgICB0byBpbnN0YWxsIHRoZSBcYEF1dG9jb25mJyBhbmQgXGBHTlUgbTQnIHBhY2thZ2VzLiAgR3JhYiB0aGVtCisgICAgICAgICBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKKyAgICBmaWxlcz1gc2VkIC1uICdzL15bIF0qQVtDTV1fQ09ORklHX0hFQURFUihcKFteKV0qXCkpLiovXDEvcCcgJHtjb25maWd1cmVfYWN9YAorICAgIHRlc3QgLXogIiRmaWxlcyIgJiYgZmlsZXM9ImNvbmZpZy5oIgorICAgIHRvdWNoX2ZpbGVzPQorICAgIGZvciBmIGluICRmaWxlczsgZG8KKyAgICAgIGNhc2UgJGYgaW4KKyAgICAgICo6KikgdG91Y2hfZmlsZXM9IiR0b3VjaF9maWxlcyAiYGVjaG8gIiRmIiB8CisJCQkJICAgICAgIHNlZCAtZSAncy9eW146XSo6Ly8nIC1lICdzLzouKi8vJ2A7OworICAgICAgKikgdG91Y2hfZmlsZXM9IiR0b3VjaF9maWxlcyAkZi5pbiI7OworICAgICAgZXNhYworICAgIGRvbmUKKyAgICB0b3VjaCAkdG91Y2hfZmlsZXMKKyAgICA7OworCisgIGF1dG9tYWtlKikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIFxgTWFrZWZpbGUuYW0nLCBcYGFjaW5jbHVkZS5tNCcgb3IgXGAke2NvbmZpZ3VyZV9hY30nLgorICAgICAgICAgWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUgXGBBdXRvbWFrZScgYW5kIFxgUGVybCcgcGFja2FnZXMuCisgICAgICAgICBHcmFiIHRoZW0gZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgZmluZCAuIC10eXBlIGYgLW5hbWUgTWFrZWZpbGUuYW0gLXByaW50IHwKKwkgICBzZWQgJ3MvXC5hbSQvLmluLycgfAorCSAgIHdoaWxlIHJlYWQgZjsgZG8gdG91Y2ggIiRmIjsgZG9uZQorICAgIDs7CisKKyAgYXV0b200dGUqKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgbmVlZGVkLCBidXQgaXMgJG1zZy4KKyAgICAgICAgIFlvdSBtaWdodCBoYXZlIG1vZGlmaWVkIHNvbWUgZmlsZXMgd2l0aG91dCBoYXZpbmcgdGhlCisgICAgICAgICBwcm9wZXIgdG9vbHMgZm9yIGZ1cnRoZXIgaGFuZGxpbmcgdGhlbS4KKyAgICAgICAgIFlvdSBjYW4gZ2V0IFxgJDEnIGFzIHBhcnQgb2YgXGBBdXRvY29uZicgZnJvbSBhbnkgR05VCisgICAgICAgICBhcmNoaXZlIHNpdGUuIgorCisgICAgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX291dHB1dCJgCisgICAgdGVzdCAteiAiJGZpbGUiICYmIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9taW51c28iYAorICAgIGlmIHRlc3QgLWYgIiRmaWxlIjsgdGhlbgorCXRvdWNoICRmaWxlCisgICAgZWxzZQorCXRlc3QgLXogIiRmaWxlIiB8fCBleGVjID4kZmlsZQorCWVjaG8gIiMhIC9iaW4vc2giCisJZWNobyAiIyBDcmVhdGVkIGJ5IEdOVSBBdXRvbWFrZSBtaXNzaW5nIGFzIGEgcmVwbGFjZW1lbnQgb2YiCisJZWNobyAiIyAgJCAkQCIKKwllY2hvICJleGl0IDAiCisJY2htb2QgK3ggJGZpbGUKKwlleGl0IDEKKyAgICBmaQorICAgIDs7CisKKyAgYmlzb24qfHlhY2MqKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgYSBcYC55JyBmaWxlLiAgWW91IG1heSBuZWVkIHRoZSBcYEJpc29uJyBwYWNrYWdlCisgICAgICAgICBpbiBvcmRlciBmb3IgdGhvc2UgbW9kaWZpY2F0aW9ucyB0byB0YWtlIGVmZmVjdC4gIFlvdSBjYW4gZ2V0CisgICAgICAgICBcYEJpc29uJyBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKKyAgICBybSAtZiB5LnRhYi5jIHkudGFiLmgKKyAgICBpZiB0ZXN0ICQjIC1uZSAxOyB0aGVuCisgICAgICAgIGV2YWwgTEFTVEFSRz0iXCR7JCN9IgorCWNhc2UgJExBU1RBUkcgaW4KKwkqLnkpCisJICAgIFNSQ0ZJTEU9YGVjaG8gIiRMQVNUQVJHIiB8IHNlZCAncy95JC9jLydgCisJICAgIGlmIHRlc3QgLWYgIiRTUkNGSUxFIjsgdGhlbgorCSAgICAgICAgIGNwICIkU1JDRklMRSIgeS50YWIuYworCSAgICBmaQorCSAgICBTUkNGSUxFPWBlY2hvICIkTEFTVEFSRyIgfCBzZWQgJ3MveSQvaC8nYAorCSAgICBpZiB0ZXN0IC1mICIkU1JDRklMRSI7IHRoZW4KKwkgICAgICAgICBjcCAiJFNSQ0ZJTEUiIHkudGFiLmgKKwkgICAgZmkKKwkgIDs7CisJZXNhYworICAgIGZpCisgICAgaWYgdGVzdCAhIC1mIHkudGFiLmg7IHRoZW4KKwllY2hvID55LnRhYi5oCisgICAgZmkKKyAgICBpZiB0ZXN0ICEgLWYgeS50YWIuYzsgdGhlbgorCWVjaG8gJ21haW4oKSB7IHJldHVybiAwOyB9JyA+eS50YWIuYworICAgIGZpCisgICAgOzsKKworICBsZXgqfGZsZXgqKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgYSBcYC5sJyBmaWxlLiAgWW91IG1heSBuZWVkIHRoZSBcYEZsZXgnIHBhY2thZ2UKKyAgICAgICAgIGluIG9yZGVyIGZvciB0aG9zZSBtb2RpZmljYXRpb25zIHRvIHRha2UgZWZmZWN0LiAgWW91IGNhbiBnZXQKKyAgICAgICAgIFxgRmxleCcgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgcm0gLWYgbGV4Lnl5LmMKKyAgICBpZiB0ZXN0ICQjIC1uZSAxOyB0aGVuCisgICAgICAgIGV2YWwgTEFTVEFSRz0iXCR7JCN9IgorCWNhc2UgJExBU1RBUkcgaW4KKwkqLmwpCisJICAgIFNSQ0ZJTEU9YGVjaG8gIiRMQVNUQVJHIiB8IHNlZCAncy9sJC9jLydgCisJICAgIGlmIHRlc3QgLWYgIiRTUkNGSUxFIjsgdGhlbgorCSAgICAgICAgIGNwICIkU1JDRklMRSIgbGV4Lnl5LmMKKwkgICAgZmkKKwkgIDs7CisJZXNhYworICAgIGZpCisgICAgaWYgdGVzdCAhIC1mIGxleC55eS5jOyB0aGVuCisJZWNobyAnbWFpbigpIHsgcmV0dXJuIDA7IH0nID5sZXgueXkuYworICAgIGZpCisgICAgOzsKKworICBoZWxwMm1hbiopCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKKwkgeW91IG1vZGlmaWVkIGEgZGVwZW5kZW5jeSBvZiBhIG1hbnVhbCBwYWdlLiAgWW91IG1heSBuZWVkIHRoZQorCSBcYEhlbHAybWFuJyBwYWNrYWdlIGluIG9yZGVyIGZvciB0aG9zZSBtb2RpZmljYXRpb25zIHRvIHRha2UKKwkgZWZmZWN0LiAgWW91IGNhbiBnZXQgXGBIZWxwMm1hbicgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisKKyAgICBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gIiRzZWRfb3V0cHV0ImAKKyAgICB0ZXN0IC16ICIkZmlsZSIgJiYgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX21pbnVzbyJgCisgICAgaWYgdGVzdCAtZiAiJGZpbGUiOyB0aGVuCisJdG91Y2ggJGZpbGUKKyAgICBlbHNlCisJdGVzdCAteiAiJGZpbGUiIHx8IGV4ZWMgPiRmaWxlCisJZWNobyAiLmFiIGhlbHAybWFuIGlzIHJlcXVpcmVkIHRvIGdlbmVyYXRlIHRoaXMgcGFnZSIKKwlleGl0ICQ/CisgICAgZmkKKyAgICA7OworCisgIG1ha2VpbmZvKikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIGEgXGAudGV4aScgb3IgXGAudGV4aW5mbycgZmlsZSwgb3IgYW55IG90aGVyIGZpbGUKKyAgICAgICAgIGluZGlyZWN0bHkgYWZmZWN0aW5nIHRoZSBhc3BlY3Qgb2YgdGhlIG1hbnVhbC4gIFRoZSBzcHVyaW91cworICAgICAgICAgY2FsbCBtaWdodCBhbHNvIGJlIHRoZSBjb25zZXF1ZW5jZSBvZiB1c2luZyBhIGJ1Z2d5IFxgbWFrZScgKEFJWCwKKyAgICAgICAgIERVLCBJUklYKS4gIFlvdSBtaWdodCB3YW50IHRvIGluc3RhbGwgdGhlIFxgVGV4aW5mbycgcGFja2FnZSBvcgorICAgICAgICAgdGhlIFxgR05VIG1ha2UnIHBhY2thZ2UuICBHcmFiIGVpdGhlciBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKKyAgICAjIFRoZSBmaWxlIHRvIHRvdWNoIGlzIHRoYXQgc3BlY2lmaWVkIHdpdGggLW8gLi4uCisgICAgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX291dHB1dCJgCisgICAgdGVzdCAteiAiJGZpbGUiICYmIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9taW51c28iYAorICAgIGlmIHRlc3QgLXogIiRmaWxlIjsgdGhlbgorICAgICAgIyAuLi4gb3IgaXQgaXMgdGhlIG9uZSBzcGVjaWZpZWQgd2l0aCBAc2V0ZmlsZW5hbWUgLi4uCisgICAgICBpbmZpbGU9YGVjaG8gIiQqIiB8IHNlZCAncy8uKiBcKFteIF0qXCkgKiQvXDEvJ2AKKyAgICAgIGZpbGU9YHNlZCAtbiAnCisJL15Ac2V0ZmlsZW5hbWUveworCSAgcy8uKiBcKFteIF0qXCkgKiQvXDEvCisJICBwCisJICBxCisJfScgJGluZmlsZWAKKyAgICAgICMgLi4uIG9yIGl0IGlzIGRlcml2ZWQgZnJvbSB0aGUgc291cmNlIG5hbWUgKGRpci9mLnRleGkgYmVjb21lcyBmLmluZm8pCisgICAgICB0ZXN0IC16ICIkZmlsZSIgJiYgZmlsZT1gZWNobyAiJGluZmlsZSIgfCBzZWQgJ3MsLiovLCw7cywuW14uXSokLCwnYC5pbmZvCisgICAgZmkKKyAgICAjIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCB0aGUgdXNlciByZWFsbHkgbmVlZHMgbWFrZWluZm87CisgICAgIyBsZXQncyBmYWlsIHdpdGhvdXQgdG91Y2hpbmcgYW55dGhpbmcuCisgICAgdGVzdCAtZiAkZmlsZSB8fCBleGl0IDEKKyAgICB0b3VjaCAkZmlsZQorICAgIDs7CisKKyAgdGFyKikKKyAgICBzaGlmdAorCisgICAgIyBXZSBoYXZlIGFscmVhZHkgdHJpZWQgdGFyIGluIHRoZSBnZW5lcmljIHBhcnQuCisgICAgIyBMb29rIGZvciBnbnV0YXIvZ3RhciBiZWZvcmUgaW52b2NhdGlvbiB0byBhdm9pZCB1Z2x5IGVycm9yCisgICAgIyBtZXNzYWdlcy4KKyAgICBpZiAoZ251dGFyIC0tdmVyc2lvbiA+IC9kZXYvbnVsbCAyPiYxKTsgdGhlbgorICAgICAgIGdudXRhciAiJEAiICYmIGV4aXQgMAorICAgIGZpCisgICAgaWYgKGd0YXIgLS12ZXJzaW9uID4gL2Rldi9udWxsIDI+JjEpOyB0aGVuCisgICAgICAgZ3RhciAiJEAiICYmIGV4aXQgMAorICAgIGZpCisgICAgZmlyc3Rhcmc9IiQxIgorICAgIGlmIHNoaWZ0OyB0aGVuCisJY2FzZSAkZmlyc3RhcmcgaW4KKwkqbyopCisJICAgIGZpcnN0YXJnPWBlY2hvICIkZmlyc3RhcmciIHwgc2VkIHMvby8vYAorCSAgICB0YXIgIiRmaXJzdGFyZyIgIiRAIiAmJiBleGl0IDAKKwkgICAgOzsKKwllc2FjCisJY2FzZSAkZmlyc3RhcmcgaW4KKwkqaCopCisJICAgIGZpcnN0YXJnPWBlY2hvICIkZmlyc3RhcmciIHwgc2VkIHMvaC8vYAorCSAgICB0YXIgIiRmaXJzdGFyZyIgIiRAIiAmJiBleGl0IDAKKwkgICAgOzsKKwllc2FjCisgICAgZmkKKworICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogSSBjYW4ndCBzZWVtIHRvIGJlIGFibGUgdG8gcnVuIFxgdGFyJyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuCisgICAgICAgICBZb3UgbWF5IHdhbnQgdG8gaW5zdGFsbCBHTlUgdGFyIG9yIEZyZWUgcGF4dXRpbHMsIG9yIGNoZWNrIHRoZQorICAgICAgICAgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4iCisgICAgZXhpdCAxCisgICAgOzsKKworICAqKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgbmVlZGVkLCBhbmQgaXMgJG1zZy4KKyAgICAgICAgIFlvdSBtaWdodCBoYXZlIG1vZGlmaWVkIHNvbWUgZmlsZXMgd2l0aG91dCBoYXZpbmcgdGhlCisgICAgICAgICBwcm9wZXIgdG9vbHMgZm9yIGZ1cnRoZXIgaGFuZGxpbmcgdGhlbS4gIENoZWNrIHRoZSBcYFJFQURNRScgZmlsZSwKKyAgICAgICAgIGl0IG9mdGVuIHRlbGxzIHlvdSBhYm91dCB0aGUgbmVlZGVkIHByZXJlcXVpc2l0ZXMgZm9yIGluc3RhbGxpbmcKKyAgICAgICAgIHRoaXMgcGFja2FnZS4gIFlvdSBtYXkgYWxzbyBwZWVrIGF0IGFueSBHTlUgYXJjaGl2ZSBzaXRlLCBpbiBjYXNlCisgICAgICAgICBzb21lIG90aGVyIHBhY2thZ2Ugd291bGQgY29udGFpbiB0aGlzIG1pc3NpbmcgXGAkMScgcHJvZ3JhbS4iCisgICAgZXhpdCAxCisgICAgOzsKK2VzYWMKKworZXhpdCAwCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9DT1BZSU5HLkxJQiBiL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9DT1BZSU5HLkxJQgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTJiZTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbGlidG9vbC9saWJsdGRsL0NPUFlJTkcuTElCCkBAIC0wLDAgKzEsNTE1IEBACisKKyAgICAgICAgICAgICAgICAgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMSwgRmVicnVhcnkgMTk5OQorCisgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworW1RoaXMgaXMgdGhlIGZpcnN0IHJlbGVhc2VkIHZlcnNpb24gb2YgdGhlIExlc3NlciBHUEwuICBJdCBhbHNvIGNvdW50cworIGFzIHRoZSBzdWNjZXNzb3Igb2YgdGhlIEdOVSBMaWJyYXJ5IFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIGhlbmNlCisgdGhlIHZlcnNpb24gbnVtYmVyIDIuMS5dCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlCitmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuCisKKyAgVGhpcyBsaWNlbnNlLCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZQorc3BlY2lhbGx5IGRlc2lnbmF0ZWQgc29mdHdhcmUgcGFja2FnZXMtLXR5cGljYWxseSBsaWJyYXJpZXMtLW9mIHRoZQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCBvdGhlciBhdXRob3JzIHdobyBkZWNpZGUgdG8gdXNlIGl0LiAgWW91CitjYW4gdXNlIGl0IHRvbywgYnV0IHdlIHN1Z2dlc3QgeW91IGZpcnN0IHRoaW5rIGNhcmVmdWxseSBhYm91dCB3aGV0aGVyCit0aGlzIGxpY2Vuc2Ugb3IgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgdGhlIGJldHRlcgorc3RyYXRlZ3kgdG8gdXNlIGluIGFueSBwYXJ0aWN1bGFyIGNhc2UsIGJhc2VkIG9uIHRoZSBleHBsYW5hdGlvbnMKK2JlbG93LgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tIG9mIHVzZSwKK25vdCBwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQKK3lvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UKK2ZvciB0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpOyB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQKK2l0IGlmIHlvdSB3YW50IGl0OyB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBhbmQgdXNlIHBpZWNlcyBvZgoraXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBhcmUgaW5mb3JtZWQgdGhhdCB5b3UgY2FuIGRvCit0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorZGlzdHJpYnV0b3JzIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGVzZQorcmlnaHRzLiAgVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yCit5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5IG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKK29yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHdlIGdhdmUKK3lvdS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UKK2NvZGUuICBJZiB5b3UgbGluayBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKK2NvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cywgc28gdGhhdCB0aGV5IGNhbiByZWxpbmsgdGhlbQord2l0aCB0aGUgbGlicmFyeSBhZnRlciBtYWtpbmcgY2hhbmdlcyB0byB0aGUgbGlicmFyeSBhbmQgcmVjb21waWxpbmcKK2l0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCBhIHR3by1zdGVwIG1ldGhvZDogKDEpIHdlIGNvcHlyaWdodCB0aGUKK2xpYnJhcnksIGFuZCAoMikgd2Ugb2ZmZXIgeW91IHRoaXMgbGljZW5zZSwgd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCitwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS4KKworICBUbyBwcm90ZWN0IGVhY2ggZGlzdHJpYnV0b3IsIHdlIHdhbnQgdG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHRoYXQKK3RoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgZnJlZSBsaWJyYXJ5LiAgQWxzbywgaWYgdGhlIGxpYnJhcnkgaXMKK21vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB0aGUgcmVjaXBpZW50cyBzaG91bGQga25vdwordGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsIHZlcnNpb24sIHNvIHRoYXQgdGhlIG9yaWdpbmFsCithdXRob3IncyByZXB1dGF0aW9uIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5IHByb2JsZW1zIHRoYXQgbWlnaHQgYmUKK2ludHJvZHVjZWQgYnkgb3RoZXJzLgorXkwKKyAgRmluYWxseSwgc29mdHdhcmUgcGF0ZW50cyBwb3NlIGEgY29uc3RhbnQgdGhyZWF0IHRvIHRoZSBleGlzdGVuY2Ugb2YKK2FueSBmcmVlIHByb2dyYW0uICBXZSB3aXNoIHRvIG1ha2Ugc3VyZSB0aGF0IGEgY29tcGFueSBjYW5ub3QKK2VmZmVjdGl2ZWx5IHJlc3RyaWN0IHRoZSB1c2VycyBvZiBhIGZyZWUgcHJvZ3JhbSBieSBvYnRhaW5pbmcgYQorcmVzdHJpY3RpdmUgbGljZW5zZSBmcm9tIGEgcGF0ZW50IGhvbGRlci4gIFRoZXJlZm9yZSwgd2UgaW5zaXN0IHRoYXQKK2FueSBwYXRlbnQgbGljZW5zZSBvYnRhaW5lZCBmb3IgYSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IG11c3QgYmUKK2NvbnNpc3RlbnQgd2l0aCB0aGUgZnVsbCBmcmVlZG9tIG9mIHVzZSBzcGVjaWZpZWQgaW4gdGhpcyBsaWNlbnNlLgorCisgIE1vc3QgR05VIHNvZnR3YXJlLCBpbmNsdWRpbmcgc29tZSBsaWJyYXJpZXMsIGlzIGNvdmVyZWQgYnkgdGhlCitvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgbGljZW5zZSwgdGhlIEdOVSBMZXNzZXIKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gY2VydGFpbiBkZXNpZ25hdGVkIGxpYnJhcmllcywgYW5kCitpcyBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFdlIHVzZQordGhpcyBsaWNlbnNlIGZvciBjZXJ0YWluIGxpYnJhcmllcyBpbiBvcmRlciB0byBwZXJtaXQgbGlua2luZyB0aG9zZQorbGlicmFyaWVzIGludG8gbm9uLWZyZWUgcHJvZ3JhbXMuCisKKyAgV2hlbiBhIHByb2dyYW0gaXMgbGlua2VkIHdpdGggYSBsaWJyYXJ5LCB3aGV0aGVyIHN0YXRpY2FsbHkgb3IgdXNpbmcKK2Egc2hhcmVkIGxpYnJhcnksIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgdHdvIGlzIGxlZ2FsbHkgc3BlYWtpbmcgYQorY29tYmluZWQgd29yaywgYSBkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LiAgVGhlIG9yZGluYXJ5CitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHRoZXJlZm9yZSBwZXJtaXRzIHN1Y2ggbGlua2luZyBvbmx5IGlmIHRoZQorZW50aXJlIGNvbWJpbmF0aW9uIGZpdHMgaXRzIGNyaXRlcmlhIG9mIGZyZWVkb20uICBUaGUgTGVzc2VyIEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIHBlcm1pdHMgbW9yZSBsYXggY3JpdGVyaWEgZm9yIGxpbmtpbmcgb3RoZXIgY29kZSB3aXRoCit0aGUgbGlicmFyeS4KKworICBXZSBjYWxsIHRoaXMgbGljZW5zZSB0aGUgIkxlc3NlciIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBiZWNhdXNlIGl0Citkb2VzIExlc3MgdG8gcHJvdGVjdCB0aGUgdXNlcidzIGZyZWVkb20gdGhhbiB0aGUgb3JkaW5hcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UuICBJdCBhbHNvIHByb3ZpZGVzIG90aGVyIGZyZWUgc29mdHdhcmUgZGV2ZWxvcGVycyBMZXNzCitvZiBhbiBhZHZhbnRhZ2Ugb3ZlciBjb21wZXRpbmcgbm9uLWZyZWUgcHJvZ3JhbXMuICBUaGVzZSBkaXNhZHZhbnRhZ2VzCithcmUgdGhlIHJlYXNvbiB3ZSB1c2UgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1hbnkKK2xpYnJhcmllcy4gIEhvd2V2ZXIsIHRoZSBMZXNzZXIgbGljZW5zZSBwcm92aWRlcyBhZHZhbnRhZ2VzIGluIGNlcnRhaW4KK3NwZWNpYWwgY2lyY3Vtc3RhbmNlcy4KKworICBGb3IgZXhhbXBsZSwgb24gcmFyZSBvY2Nhc2lvbnMsIHRoZXJlIG1heSBiZSBhIHNwZWNpYWwgbmVlZCB0bworZW5jb3VyYWdlIHRoZSB3aWRlc3QgcG9zc2libGUgdXNlIG9mIGEgY2VydGFpbiBsaWJyYXJ5LCBzbyB0aGF0IGl0CitiZWNvbWVzCithIGRlLWZhY3RvIHN0YW5kYXJkLiAgVG8gYWNoaWV2ZSB0aGlzLCBub24tZnJlZSBwcm9ncmFtcyBtdXN0IGJlCithbGxvd2VkIHRvIHVzZSB0aGUgbGlicmFyeS4gIEEgbW9yZSBmcmVxdWVudCBjYXNlIGlzIHRoYXQgYSBmcmVlCitsaWJyYXJ5IGRvZXMgdGhlIHNhbWUgam9iIGFzIHdpZGVseSB1c2VkIG5vbi1mcmVlIGxpYnJhcmllcy4gIEluIHRoaXMKK2Nhc2UsIHRoZXJlIGlzIGxpdHRsZSB0byBnYWluIGJ5IGxpbWl0aW5nIHRoZSBmcmVlIGxpYnJhcnkgdG8gZnJlZQorc29mdHdhcmUgb25seSwgc28gd2UgdXNlIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICBJbiBvdGhlciBjYXNlcywgcGVybWlzc2lvbiB0byB1c2UgYSBwYXJ0aWN1bGFyIGxpYnJhcnkgaW4gbm9uLWZyZWUKK3Byb2dyYW1zIGVuYWJsZXMgYSBncmVhdGVyIG51bWJlciBvZiBwZW9wbGUgdG8gdXNlIGEgbGFyZ2UgYm9keSBvZgorZnJlZSBzb2Z0d2FyZS4gIEZvciBleGFtcGxlLCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgR05VIEMgTGlicmFyeSBpbgorbm9uLWZyZWUgcHJvZ3JhbXMgZW5hYmxlcyBtYW55IG1vcmUgcGVvcGxlIHRvIHVzZSB0aGUgd2hvbGUgR05VCitvcGVyYXRpbmcgc3lzdGVtLCBhcyB3ZWxsIGFzIGl0cyB2YXJpYW50LCB0aGUgR05VL0xpbnV4IG9wZXJhdGluZworc3lzdGVtLgorCisgIEFsdGhvdWdoIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBMZXNzIHByb3RlY3RpdmUgb2YgdGhlCit1c2VycycgZnJlZWRvbSwgaXQgZG9lcyBlbnN1cmUgdGhhdCB0aGUgdXNlciBvZiBhIHByb2dyYW0gdGhhdCBpcworbGlua2VkIHdpdGggdGhlIExpYnJhcnkgaGFzIHRoZSBmcmVlZG9tIGFuZCB0aGUgd2hlcmV3aXRoYWwgdG8gcnVuCit0aGF0IHByb2dyYW0gdXNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5LgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKKyJ3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5IiBhbmQgYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiAgVGhlCitmb3JtZXIgY29udGFpbnMgY29kZSBkZXJpdmVkIGZyb20gdGhlIGxpYnJhcnksIHdoZXJlYXMgdGhlIGxhdHRlciBtdXN0CitiZSBjb21iaW5lZCB3aXRoIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIHJ1bi4KK15MCisgICAgICAgICAgICAgICAgICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSBvciBvdGhlcgorcHJvZ3JhbSB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgb3IKK290aGVyIGF1dGhvcml6ZWQgcGFydHkgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YKK3RoaXMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4KK0VhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCisgIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKK3ByZXBhcmVkIHNvIGFzIHRvIGJlIGNvbnZlbmllbnRseSBsaW5rZWQgd2l0aCBhcHBsaWNhdGlvbiBwcm9ncmFtcworKHdoaWNoIHVzZSBzb21lIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgZGF0YSkgdG8gZm9ybSBleGVjdXRhYmxlcy4KKworICBUaGUgIkxpYnJhcnkiLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHNvZnR3YXJlIGxpYnJhcnkgb3Igd29yaword2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuICBBICJ3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIKK2NvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgTGlicmFyeSBvciBhCitwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkCitzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCitpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKQorCisgICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhIGxpYnJhcnksIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zCithbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZAoraW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sCitjb21waWxhdGlvbgorYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgbGlicmFyeS4KKworICBBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbQorc3VjaCBhIHByb2dyYW0gaXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZAorb24gdGhlIExpYnJhcnkgKGluZGVwZW5kZW50IG9mIHRoZSB1c2Ugb2YgdGhlIExpYnJhcnkgaW4gYSB0b29sIGZvcgord3JpdGluZyBpdCkuICBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIExpYnJhcnkgZG9lcworYW5kIHdoYXQgdGhlIHByb2dyYW0gdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IGRvZXMuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzCitjb21wbGV0ZSBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdAoreW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4KK2FwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0CithbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueQord2FycmFudHk7IGFuZCBkaXN0cmlidXRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUKK0xpYnJhcnkuCisKKyAgWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwKK2FuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEKK2ZlZS4KKwwKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGlicmFyeSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgVGhlIG1vZGlmaWVkIHdvcmsgbXVzdCBpdHNlbGYgYmUgYSBzb2Z0d2FyZSBsaWJyYXJ5LgorCisgICAgYikgWW91IG11c3QgY2F1c2UgdGhlIGZpbGVzIG1vZGlmaWVkIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGMpIFlvdSBtdXN0IGNhdXNlIHRoZSB3aG9sZSBvZiB0aGUgd29yayB0byBiZSBsaWNlbnNlZCBhdCBubworICAgIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgZCkgSWYgYSBmYWNpbGl0eSBpbiB0aGUgbW9kaWZpZWQgTGlicmFyeSByZWZlcnMgdG8gYSBmdW5jdGlvbiBvciBhCisgICAgdGFibGUgb2YgZGF0YSB0byBiZSBzdXBwbGllZCBieSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHRoYXQgdXNlcworICAgIHRoZSBmYWNpbGl0eSwgb3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkKKyAgICBpcyBpbnZva2VkLCB0aGVuIHlvdSBtdXN0IG1ha2UgYSBnb29kIGZhaXRoIGVmZm9ydCB0byBlbnN1cmUgdGhhdCwKKyAgICBpbiB0aGUgZXZlbnQgYW4gYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IHN1Y2ggZnVuY3Rpb24gb3IKKyAgICB0YWJsZSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZgorICAgIGl0cyBwdXJwb3NlIHJlbWFpbnMgbWVhbmluZ2Z1bC4KKworICAgIChGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdG8gY29tcHV0ZSBzcXVhcmUgcm9vdHMgaGFzCisgICAgYSBwdXJwb3NlIHRoYXQgaXMgZW50aXJlbHkgd2VsbC1kZWZpbmVkIGluZGVwZW5kZW50IG9mIHRoZQorICAgIGFwcGxpY2F0aW9uLiAgVGhlcmVmb3JlLCBTdWJzZWN0aW9uIDJkIHJlcXVpcmVzIHRoYXQgYW55CisgICAgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QKKyAgICBiZSBvcHRpb25hbDogaWYgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBpdCwgdGhlIHNxdWFyZQorICAgIHJvb3QgZnVuY3Rpb24gbXVzdCBzdGlsbCBjb21wdXRlIHNxdWFyZSByb290cy4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIExpYnJhcnksCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgTGlicmFyeSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUKK2l0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBMaWJyYXJ5Cit3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgb3B0IHRvIGFwcGx5IHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlIHRvIGEgZ2l2ZW4gY29weSBvZiB0aGUgTGlicmFyeS4gIFRvIGRvCit0aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvCit0aGF0IHRoZXkgcmVmZXIgdG8gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsCitpbnN0ZWFkIG9mIHRvIHRoaXMgTGljZW5zZS4gIChJZiBhIG5ld2VyIHZlcnNpb24gdGhhbiB2ZXJzaW9uIDIgb2YgdGhlCitvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5Cit0aGF0IHZlcnNpb24gaW5zdGVhZCBpZiB5b3Ugd2lzaC4pICBEbyBub3QgbWFrZSBhbnkgb3RoZXIgY2hhbmdlIGluCit0aGVzZSBub3RpY2VzLgorXkwKKyAgT25jZSB0aGlzIGNoYW5nZSBpcyBtYWRlIGluIGEgZ2l2ZW4gY29weSwgaXQgaXMgaXJyZXZlcnNpYmxlIGZvcgordGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKK3N1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCisKKyAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCit0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCisKKyAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKK2Rlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtCit1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkKK2l0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKK211c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCisgIElmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5Citmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZQorc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCitkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlCitMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yCitsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQord29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZAordGhlcmVmb3JlIGZhbGxzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICBIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5CitjcmVhdGVzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnkgKGJlY2F1c2UgaXQKK2NvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCitsaWJyYXJ5Ii4gIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KK1NlY3Rpb24gNiBzdGF0ZXMgdGVybXMgZm9yIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGV4ZWN1dGFibGVzLgorCisgIFdoZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlCit0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnksIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgbWF5IGJlIGEKK2Rlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgorV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUKK2xpbmtlZCB3aXRob3V0IHRoZSBMaWJyYXJ5LCBvciBpZiB0aGUgd29yayBpcyBpdHNlbGYgYSBsaWJyYXJ5LiAgVGhlCit0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgorCisgIElmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhCitzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKK2Z1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QKK2ZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUKK3dvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCitMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQorCisgIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CitkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4KK0FueSBleGVjdXRhYmxlcyBjb250YWluaW5nIHRoYXQgd29yayBhbHNvIGZhbGwgdW5kZXIgU2VjdGlvbiA2LAord2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgorXkwKKyAgNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbWJpbmUgb3IKK2xpbmsgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkgdG8gcHJvZHVjZSBhCit3b3JrIGNvbnRhaW5pbmcgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnksIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawordW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdAorbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGZvciB0aGUgY3VzdG9tZXIncyBvd24gdXNlIGFuZCByZXZlcnNlCitlbmdpbmVlcmluZyBmb3IgZGVidWdnaW5nIHN1Y2ggbW9kaWZpY2F0aW9ucy4KKworICBZb3UgbXVzdCBnaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIHdvcmsgdGhhdCB0aGUKK0xpYnJhcnkgaXMgdXNlZCBpbiBpdCBhbmQgdGhhdCB0aGUgTGlicmFyeSBhbmQgaXRzIHVzZSBhcmUgY292ZXJlZCBieQordGhpcyBMaWNlbnNlLiAgWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZiB0aGUgd29yaworZHVyaW5nIGV4ZWN1dGlvbiBkaXNwbGF5cyBjb3B5cmlnaHQgbm90aWNlcywgeW91IG11c3QgaW5jbHVkZSB0aGUKK2NvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBMaWJyYXJ5IGFtb25nIHRoZW0sIGFzIHdlbGwgYXMgYSByZWZlcmVuY2UKK2RpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuICBBbHNvLCB5b3UgbXVzdCBkbyBvbmUKK29mIHRoZXNlIHRoaW5nczoKKworICAgIGEpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nCisgICAgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSBmb3IgdGhlIExpYnJhcnkgaW5jbHVkaW5nIHdoYXRldmVyCisgICAgY2hhbmdlcyB3ZXJlIHVzZWQgaW4gdGhlIHdvcmsgKHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIKKyAgICBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZAorICAgIHdpdGggdGhlIExpYnJhcnksIHdpdGggdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgIndvcmsgdGhhdAorICAgIHVzZXMgdGhlIExpYnJhcnkiLCBhcyBvYmplY3QgY29kZSBhbmQvb3Igc291cmNlIGNvZGUsIHNvIHRoYXQgdGhlCisgICAgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQKKyAgICBleGVjdXRhYmxlIGNvbnRhaW5pbmcgdGhlIG1vZGlmaWVkIExpYnJhcnkuICAoSXQgaXMgdW5kZXJzdG9vZAorICAgIHRoYXQgdGhlIHVzZXIgd2hvIGNoYW5nZXMgdGhlIGNvbnRlbnRzIG9mIGRlZmluaXRpb25zIGZpbGVzIGluIHRoZQorICAgIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uCisgICAgdG8gdXNlIHRoZSBtb2RpZmllZCBkZWZpbml0aW9ucy4pCisKKyAgICBiKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUKKyAgICBMaWJyYXJ5LiAgQSBzdWl0YWJsZSBtZWNoYW5pc20gaXMgb25lIHRoYXQgKDEpIHVzZXMgYXQgcnVuIHRpbWUgYQorICAgIGNvcHkgb2YgdGhlIGxpYnJhcnkgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSB1c2VyJ3MgY29tcHV0ZXIgc3lzdGVtLAorICAgIHJhdGhlciB0aGFuIGNvcHlpbmcgbGlicmFyeSBmdW5jdGlvbnMgaW50byB0aGUgZXhlY3V0YWJsZSwgYW5kICgyKQorICAgIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgaWYKKyAgICB0aGUgdXNlciBpbnN0YWxscyBvbmUsIGFzIGxvbmcgYXMgdGhlIG1vZGlmaWVkIHZlcnNpb24gaXMKKyAgICBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHdvcmsgd2FzIG1hZGUgd2l0aC4KKworICAgIGMpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0CisgICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCisgICAgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZQorICAgIHRoYW4gdGhlIGNvc3Qgb2YgcGVyZm9ybWluZyB0aGlzIGRpc3RyaWJ1dGlvbi4KKworICAgIGQpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CisgICAgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIGFib3ZlCisgICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgorCisgICAgZSkgVmVyaWZ5IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZXNlCisgICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCisKKyAgRm9yIGFuIGV4ZWN1dGFibGUsIHRoZSByZXF1aXJlZCBmb3JtIG9mIHRoZSAid29yayB0aGF0IHVzZXMgdGhlCitMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgorcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sCit0aGUgbWF0ZXJpYWxzIHRvIGJlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCBpcworbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yCitjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uCit3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQgaXRzZWxmIGFjY29tcGFuaWVzCit0aGUgZXhlY3V0YWJsZS4KKworICBJdCBtYXkgaGFwcGVuIHRoYXQgdGhpcyByZXF1aXJlbWVudCBjb250cmFkaWN0cyB0aGUgbGljZW5zZQorcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseQorYWNjb21wYW55IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiAgU3VjaCBhIGNvbnRyYWRpY3Rpb24gbWVhbnMgeW91IGNhbm5vdAordXNlIGJvdGggdGhlbSBhbmQgdGhlIExpYnJhcnkgdG9nZXRoZXIgaW4gYW4gZXhlY3V0YWJsZSB0aGF0IHlvdQorZGlzdHJpYnV0ZS4KK15MCisgIDcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkgc2lkZS1ieS1zaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5CitmYWNpbGl0aWVzIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgc3VjaCBhIGNvbWJpbmVkCitsaWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24KK3RoZSBMaWJyYXJ5IGFuZCBvZiB0aGUgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIGlzIG90aGVyd2lzZQorcGVybWl0dGVkLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gdGhlc2UgdHdvIHRoaW5nczoKKworICAgIGEpIEFjY29tcGFueSB0aGUgY29tYmluZWQgbGlicmFyeSB3aXRoIGEgY29weSBvZiB0aGUgc2FtZSB3b3JrCisgICAgYmFzZWQgb24gdGhlIExpYnJhcnksIHVuY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgbGlicmFyeQorICAgIGZhY2lsaXRpZXMuICBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICAgIFNlY3Rpb25zIGFib3ZlLgorCisgICAgYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QKKyAgICB0aGF0IHBhcnQgb2YgaXQgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZworICAgIHdoZXJlIHRvIGZpbmQgdGhlIGFjY29tcGFueWluZyB1bmNvbWJpbmVkIGZvcm0gb2YgdGhlIHNhbWUgd29yay4KKworICA4LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZQordGhlIExpYnJhcnkgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkKK2F0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvcgorZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyCityaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsCitvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzCit0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkpLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgTGlicmFyeSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICAxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUsIGxpbmsgd2l0aCBvciBtb2RpZnkgdGhlIExpYnJhcnkKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGgKK3RoaXMgTGljZW5zZS4KK15MCisgIDExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkgYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSwgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZQorY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb25zIG9mIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4KK1N1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwKK2J1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgTGlicmFyeQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kCisiYW55IGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhCitsaWNlbnNlIHZlcnNpb24gbnVtYmVyLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KK15MCisgIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwKK3dyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzCitjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91cgorZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cworb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKK2FuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTyBXQVJSQU5UWQorCisgIDE1LiBCRUNBVVNFIFRIRSBMSUJSQVJZIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTworV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KK0VYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SCitPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIExJQlJBUlkgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRQorTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKK1RIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgorV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkKK0FORC9PUiBSRURJU1RSSUJVVEUgVEhFIExJQlJBUlkgQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VCitGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRQorTElCUkFSWSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORworUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKK0ZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYKK1NVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRVMuCisKKyAgICAgICAgICAgICAgICAgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworXkwKKyAgICAgICAgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IExpYnJhcmllcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IGxpYnJhcnksIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB3ZSByZWNvbW1lbmQgbWFraW5nIGl0IGZyZWUgc29mdHdhcmUgdGhhdAorZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiAgWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nCityZWRpc3RyaWJ1dGlvbiB1bmRlciB0aGVzZSB0ZXJtcyAob3IsIGFsdGVybmF0aXZlbHksIHVuZGVyIHRoZSB0ZXJtcworb2YgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UpLgorCisgIFRvIGFwcGx5IHRoZXNlIHRlcm1zLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBsaWJyYXJ5LgorSXQgaXMgc2FmZXN0IHRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QKK2VmZmVjdGl2ZWx5IGNvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZAoraGF2ZSBhdCBsZWFzdCB0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsCitub3RpY2UgaXMgZm91bmQuCisKKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBsaWJyYXJ5J3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQKK2RvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgIFVTQQorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIKK21haWwuCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvcgoreW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgbGlicmFyeSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZQorICBsaWJyYXJ5IGBGcm9iJyAoYSBsaWJyYXJ5IGZvciB0d2Vha2luZyBrbm9icykgd3JpdHRlbiBieSBKYW1lcworUmFuZG9tIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5OTAKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhhdCdzIGFsbCB0aGVyZSBpcyB0byBpdCEKKworCmRpZmYgLS1naXQgYS9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvTWFrZWZpbGUuYW0gYi9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA5MmQ0OAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDE2NCBAQAorIyMgTWFrZWZpbGUuYW0gLS0gUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluCisjIworIyMgICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIyAgIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDAzCisjIworIyMgICBOT1RFOiBUaGUgY2Fub25pY2FsIHNvdXJjZSBvZiB0aGlzIGZpbGUgaXMgbWFpbnRhaW5lZCB3aXRoIHRoZQorIyMgICBHTlUgTGlidG9vbCBwYWNrYWdlLiAgUmVwb3J0IGJ1Z3MgdG8gYnVnLWxpYnRvb2xAZ251Lm9yZy4KKyMjCisjIyBHTlUgTGlibHRkbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMjIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyMgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIyMKKyMjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMjIGlmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKKyMjIGlzIGJ1aWx0IHVzaW5nIEdOVSBsaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorIyMgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjIworIyMgR05VIExpYmx0ZGwgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMjCisjIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyR2VuZXJhbCBQdWJsaWMKKyMjIExpY2Vuc2UgYWxvbmcgd2l0aCBHTlUgTGlibHRkbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCBhCisjIyBjb3B5IGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwuaHRtbCwKKyMjIG9yIG9idGFpbmVkIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorIyMjIyMKKworQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQKK0FVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduCitBTV9DUFBGTEFHUyA9CitBTV9MREZMQUdTID0KK0JVSUxUX1NPVVJDRVMgPQoraW5jbHVkZV9IRUFERVJTID0KK25vaW5zdF9MVExJQlJBUklFUyA9CitsaWJfTFRMSUJSQVJJRVMgPQorRVhUUkFfTFRMSUJSQVJJRVMgPQorRVhUUkFfRElTVCA9CitDTEVBTkZJTEVTID0KK01PU1RMWUNMRUFORklMRVMgPQorCisjIC1JJChzcmNkaXIpIGlzIG5lZWRlZCBmb3IgdXNlciB0aGF0IGJ1aWx0IGxpYmx0ZGwgd2l0aCBhIHN1Yi1BdXRvbWFrZQorIyAobm90IGFzIGEgc3ViLXBhY2thZ2UhKSB1c2luZyAnbm9zdGRpbmMnOgorQU1fQ1BQRkxBR1MJICAgICAgICs9IC1ETFRfQ09ORklHX0g9JzwkKExUX0NPTkZJR19IKT4nIFwKKwkJCSAgLURMVERMIC1JLiAtSSQoc3JjZGlyKSAtSWxpYmx0ZGwgXAorCQkJICAtSSQoc3JjZGlyKS9saWJsdGRsIC1JJChzcmNkaXIpL2xpYmx0ZGwKK0FNX0xERkxBR1MJICAgICAgICs9IC1uby11bmRlZmluZWQKK0xURExfVkVSU0lPTl9JTkZPCT0gLXZlcnNpb24taW5mbyA5OjI6MgorCitub2luc3RfTFRMSUJSQVJJRVMJKz0gJChMVF9ETExPQURFUlMpCisKK2lmIElOU1RBTExfTFRETAorbHRkbGluY2x1ZGVkaXIJCT0gJChpbmNsdWRlZGlyKS9saWJsdGRsCitsdGRsaW5jbHVkZV9IRUFERVJTCT0gbGlibHRkbC9sdF9zeXN0ZW0uaCBcCisJCQkgIGxpYmx0ZGwvbHRfZXJyb3IuaCBcCisJCQkgIGxpYmx0ZGwvbHRfZGxsb2FkZXIuaAoraW5jbHVkZV9IRUFERVJTCSAgICAgICArPSBsdGRsLmgKK2xpYl9MVExJQlJBUklFUwkgICAgICAgKz0gbGlibHRkbC5sYQorZW5kaWYKKworaWYgQ09OVkVOSUVOQ0VfTFRETAorbm9pbnN0X0xUTElCUkFSSUVTICAgICArPSBsaWJsdGRsYy5sYQorZW5kaWYKKworbGlibHRkbF9sYV9TT1VSQ0VTID0gbGlibHRkbC9sdF9fYWxsb2MuaCBcCisJCQkgIGxpYmx0ZGwvbHRfX2RpcmVudC5oIFwKKwkJCSAgbGlibHRkbC9sdF9fZ2xpYmMuaCBcCisJCQkgIGxpYmx0ZGwvbHRfX3ByaXZhdGUuaCBcCisJCQkgIGxpYmx0ZGwvbHRfX3N0cmwuaCBcCisJCQkgIGxpYmx0ZGwvbHRfZGxsb2FkZXIuaCBcCisJCQkgIGxpYmx0ZGwvbHRfZXJyb3IuaCBcCisJICAgICAgICAgICAgICAgICAgbGlibHRkbC9sdF9zeXN0ZW0uaCBcCisJCQkgIGxpYmx0ZGwvc2xpc3QuaCBcCisJCQkgIGxvYWRlcnMvcHJlb3Blbi5jIFwKKwkJCSAgbHRfX2FsbG9jLmMgXAorCQkJICBsdF9kbGxvYWRlci5jIFwKKwkJCSAgbHRfZXJyb3IuYyBcCisJCQkgIGx0ZGwuYyBcCisJCQkgIGx0ZGwuaCBcCisJCQkgIHNsaXN0LmMKKworRVhUUkFfRElTVAkgICAgICAgKz0gbHRfX2RpcmVudC5jIFwKKwkJCSAgbHRfX3N0cmwuYworCitsaWJsdGRsX2xhX0NQUEZMQUdTCT0gLURMVERMT1BFTj0kKExURExPUEVOKSAkKEFNX0NQUEZMQUdTKQorbGlibHRkbF9sYV9MREZMQUdTCT0gJChBTV9MREZMQUdTKSAkKExURExfVkVSU0lPTl9JTkZPKSAkKExUX0RMUFJFT1BFTikKK2xpYmx0ZGxfbGFfTElCQURECT0gJChMVExJQk9CSlMpCitsaWJsdGRsX2xhX0RFUEVOREVOQ0lFUwk9ICQoTFRfRExMT0FERVJTKSAkKExUTElCT0JKUykKKworbGlibHRkbGNfbGFfU09VUkNFUwk9ICQobGlibHRkbF9sYV9TT1VSQ0VTKQorbGlibHRkbGNfbGFfQ1BQRkxBR1MJPSAtRExURExPUEVOPSQoTFRETE9QRU4pYyAkKEFNX0NQUEZMQUdTKQorbGlibHRkbGNfbGFfTERGTEFHUwk9ICQoQU1fTERGTEFHUykgJChMVF9ETFBSRU9QRU4pCitsaWJsdGRsY19sYV9MSUJBREQJPSAkKGxpYmx0ZGxfbGFfTElCQUREKQorbGlibHRkbGNfbGFfREVQRU5ERU5DSUVTPSAkKGxpYmx0ZGxfbGFfREVQRU5ERU5DSUVTKQorCisjIyBUaGUgbG9hZGVycyBhcmUgcHJlb3BlbmVkIGJ5IGxpYmx0ZGwsIGl0c2VsZiBhbHdheXMgYnVpbHQgZnJvbQorIyMgcGljLW9iamVjdHMgKGVpdGhlciBhcyBhIHNoYXJlZCBsaWJyYXJ5LCBvciBhIGNvbnZlbmllbmNlIGxpYnJhcnkpLAorIyMgc28gdGhlIGxvYWRlcnMgdGhlbXNlbHZlcyBtdXN0IGJlIG1hZGUgZnJvbSBwaWMtb2JqZWN0cyB0b28uICBXZQorIyMgdXNlIGNvbnZlbmllbmNlIGxpYnJhcmllcyBmb3IgdGhhdCBwdXJwb3NlOgorRVhUUkFfTFRMSUJSQVJJRVMJICAgICAgICs9IGRsb3Blbi5sYSBcCisJCQkJICBkbGRfbGluay5sYSBcCisJCQkJICBkeWxkLmxhIFwKKwkJCQkgIGxvYWRfYWRkX29uLmxhIFwKKwkJCQkgIGxvYWRsaWJyYXJ5LmxhIFwKKwkJCQkgIHNobF9sb2FkLmxhCisKK2Rsb3Blbl9sYV9TT1VSQ0VTCT0gbG9hZGVycy9kbG9wZW4uYworZGxvcGVuX2xhX0xERkxBR1MJPSAtbW9kdWxlIC1hdm9pZC12ZXJzaW9uCitkbG9wZW5fbGFfTElCQUREIAk9ICQoTElCQUREX0RMT1BFTikKKworZGxkX2xpbmtfbGFfU09VUkNFUwk9IGxvYWRlcnMvZGxkX2xpbmsuYworZGxkX2xpbmtfbGFfTERGTEFHUwk9IC1tb2R1bGUgLWF2b2lkLXZlcnNpb24KK2RsZF9saW5rX2xhX0xJQkFERAk9IC1sZGxkCisKK2R5bGRfbGFfU09VUkNFUwkJPSBsb2FkZXJzL2R5bGQuYworZHlsZF9sYV9MREZMQUdTCQk9IC1tb2R1bGUgLWF2b2lkLXZlcnNpb24KKworbG9hZF9hZGRfb25fbGFfU09VUkNFUwk9IGxvYWRlcnMvbG9hZF9hZGRfb24uYworbG9hZF9hZGRfb25fbGFfTERGTEFHUwk9IC1tb2R1bGUgLWF2b2lkLXZlcnNpb24KKworbG9hZGxpYnJhcnlfbGFfU09VUkNFUwk9IGxvYWRlcnMvbG9hZGxpYnJhcnkuYworbG9hZGxpYnJhcnlfbGFfTERGTEFHUwk9IC1tb2R1bGUgLWF2b2lkLXZlcnNpb24KKworc2hsX2xvYWRfbGFfU09VUkNFUwk9IGxvYWRlcnMvc2hsX2xvYWQuYworc2hsX2xvYWRfbGFfTERGTEFHUwk9IC1tb2R1bGUgLWF2b2lkLXZlcnNpb24KK3NobF9sb2FkX2xhX0xJQkFERAk9ICQoTElCQUREX1NITF9MT0FEKQorCisjIyBNYWtlIHN1cmUgdGhlc2Ugd2lsbCBiZSBjbGVhbmVkIGV2ZW4gd2hlbiB0aGV5J3JlIG5vdCBidWlsdCBieSBkZWZhdWx0OgorQ0xFQU5GSUxFUwkJICAgICAgICs9IGxpYmx0ZGwubGEgXAorCQkJCSAgbGlibHRkbGMubGEgXAorCQkJCSAgbGliZGxsb2FkZXIubGEKKworIyMgQXV0b21ha2UtMS45LjYgZG9lc24ndCBjbGVhbiBzdWJkaXIgQUNfTElCT0JKIGNvbXBpbGVkIG9iamVjdHMKKyMjIGF1dG9tYXRpY2FsbHk6CitDTEVBTkZJTEVTCSAgICAgICArPSAkKExJQk9CSlMpICQoTFRMSUJPQkpTKQorCitFWFRSQV9ESVNUCSAgICAgICArPSBDT1BZSU5HLkxJQiBcCisJCQkgIGNvbmZpZ3VyZS5hYyBcCisJCQkgIE1ha2VmaWxlLmFtIFwKKwkJCSAgYWNsb2NhbC5tNCBcCisJCQkgIE1ha2VmaWxlLmluIFwKKwkJCSAgY29uZmlndXJlIFwKKwkJCSAgY29uZmlnLWguaW4gXAorCQkJICBSRUFETUUKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBHbnVsaWIgTWFrZWZpbGUuYW0gc25pcHBldHMgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitCVUlMVF9TT1VSQ0VTCSs9ICQoQVJHWl9IKQorRVhUUkFfRElTVAkrPSBhcmd6Xy5oIFwKKwkJICAgYXJnei5jCisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSBhbiA8YXJnei5oPiB3aGVuIHRoZSBzeXN0ZW0KKyMgZG9lc24ndCBoYXZlIG9uZSB0aGF0IHdvcmtzIHdpdGggdGhlIGdpdmVuIGNvbXBpbGVyLgorYWxsLWxvY2FsICQobGliX09CSkVDVFMpOiAkKEFSR1pfSCkKK2FyZ3ouaDogYXJnel8uaAorCSQobWtpbnN0YWxsZGlycykgLiAKKwljcCAkKHNyY2RpcikvYXJnel8uaCAkQC10CisJbXYgJEAtdCAkQAorTU9TVExZQ0xFQU5GSUxFUyArPSBhcmd6LmggXAorCQkgICAgYXJnei5oLXQKZGlmZiAtLWdpdCBhL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9NYWtlZmlsZS5pbiBiL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTFlNTRmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbGlidG9vbC9saWJsdGRsL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMTA1MCBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4xIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyMjIyMKKworCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitASU5TVEFMTF9MVERMX1RSVUVAYW1fX2FwcGVuZF8xID0gbHRkbC5oCitASU5TVEFMTF9MVERMX1RSVUVAYW1fX2FwcGVuZF8yID0gbGlibHRkbC5sYQorQENPTlZFTklFTkNFX0xURExfVFJVRUBhbV9fYXBwZW5kXzMgPSBsaWJsdGRsYy5sYQorc3ViZGlyID0gLgorRElTVF9DT01NT04gPSBSRUFETUUgJChhbV9fY29uZmlndXJlX2RlcHMpICQoYW1fX2luY2x1ZGVfSEVBREVSU19ESVNUKSBcCisJJChhbV9fbHRkbGluY2x1ZGVfSEVBREVSU19ESVNUKSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAorCSQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHNyY2RpcikvY29uZmlnLWguaW4gXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlIENPUFlJTkcuTElCIGFyZ3ouYyBjb25maWcvY29tcGlsZSBcCisJY29uZmlnL2NvbmZpZy5ndWVzcyBjb25maWcvY29uZmlnLnN1YiBjb25maWcvZGVwY29tcCBcCisJY29uZmlnL2luc3RhbGwtc2ggY29uZmlnL2x0bWFpbi5zaCAgXAorCWNvbmZpZy9taXNzaW5nICBsdF9fZGlyZW50LmMgbHRfX3N0cmwuYworQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYXJnei5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRkbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCithbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUyA9IGNvbmZpZy5zdGF0dXMgY29uZmlnLmNhY2hlIGNvbmZpZy5sb2cgXAorIGNvbmZpZ3VyZS5saW5lbm8gY29uZmlnLnN0YXR1cy5saW5lbm8KK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGxpYmRpcikiICIkKERFU1RESVIpJChpbmNsdWRlZGlyKSIgXAorCSIkKERFU1RESVIpJChsdGRsaW5jbHVkZWRpcikiCitMVExJQlJBUklFUyA9ICQobGliX0xUTElCUkFSSUVTKSAkKG5vaW5zdF9MVExJQlJBUklFUykKK2RsZF9saW5rX2xhX0RFUEVOREVOQ0lFUyA9CithbV9kbGRfbGlua19sYV9PQkpFQ1RTID0gZGxkX2xpbmsubG8KK2RsZF9saW5rX2xhX09CSkVDVFMgPSAkKGFtX2RsZF9saW5rX2xhX09CSkVDVFMpCitkbGRfbGlua19sYV9MSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoZGxkX2xpbmtfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorYW1fX0RFUEVOREVOQ0lFU18xID0KK2Rsb3Blbl9sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2FtX2Rsb3Blbl9sYV9PQkpFQ1RTID0gZGxvcGVuLmxvCitkbG9wZW5fbGFfT0JKRUNUUyA9ICQoYW1fZGxvcGVuX2xhX09CSkVDVFMpCitkbG9wZW5fbGFfTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKGRsb3Blbl9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitkeWxkX2xhX0xJQkFERCA9CithbV9keWxkX2xhX09CSkVDVFMgPSBkeWxkLmxvCitkeWxkX2xhX09CSkVDVFMgPSAkKGFtX2R5bGRfbGFfT0JKRUNUUykKK2R5bGRfbGFfTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoZHlsZF9sYV9MREZMQUdTKSBcCisJJChMREZMQUdTKSAtbyAkQAorYW1fbGlibHRkbF9sYV9PQkpFQ1RTID0gbGlibHRkbF9sYS1wcmVvcGVuLmxvIGxpYmx0ZGxfbGEtbHRfX2FsbG9jLmxvIFwKKwlsaWJsdGRsX2xhLWx0X2RsbG9hZGVyLmxvIGxpYmx0ZGxfbGEtbHRfZXJyb3IubG8gXAorCWxpYmx0ZGxfbGEtbHRkbC5sbyBsaWJsdGRsX2xhLXNsaXN0LmxvCitsaWJsdGRsX2xhX09CSkVDVFMgPSAkKGFtX2xpYmx0ZGxfbGFfT0JKRUNUUykKK2xpYmx0ZGxfbGFfTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKGxpYmx0ZGxfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQElOU1RBTExfTFRETF9UUlVFQGFtX2xpYmx0ZGxfbGFfcnBhdGggPSAtcnBhdGggJChsaWJkaXIpCithbV9fb2JqZWN0c18xID0gbGlibHRkbGNfbGEtcHJlb3Blbi5sbyBsaWJsdGRsY19sYS1sdF9fYWxsb2MubG8gXAorCWxpYmx0ZGxjX2xhLWx0X2RsbG9hZGVyLmxvIGxpYmx0ZGxjX2xhLWx0X2Vycm9yLmxvIFwKKwlsaWJsdGRsY19sYS1sdGRsLmxvIGxpYmx0ZGxjX2xhLXNsaXN0LmxvCithbV9saWJsdGRsY19sYV9PQkpFQ1RTID0gJChhbV9fb2JqZWN0c18xKQorbGlibHRkbGNfbGFfT0JKRUNUUyA9ICQoYW1fbGlibHRkbGNfbGFfT0JKRUNUUykKK2xpYmx0ZGxjX2xhX0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChsaWJsdGRsY19sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitAQ09OVkVOSUVOQ0VfTFRETF9UUlVFQGFtX2xpYmx0ZGxjX2xhX3JwYXRoID0KK2xvYWRfYWRkX29uX2xhX0xJQkFERCA9CithbV9sb2FkX2FkZF9vbl9sYV9PQkpFQ1RTID0gbG9hZF9hZGRfb24ubG8KK2xvYWRfYWRkX29uX2xhX09CSkVDVFMgPSAkKGFtX2xvYWRfYWRkX29uX2xhX09CSkVDVFMpCitsb2FkX2FkZF9vbl9sYV9MSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQobG9hZF9hZGRfb25fbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorbG9hZGxpYnJhcnlfbGFfTElCQUREID0KK2FtX2xvYWRsaWJyYXJ5X2xhX09CSkVDVFMgPSBsb2FkbGlicmFyeS5sbworbG9hZGxpYnJhcnlfbGFfT0JKRUNUUyA9ICQoYW1fbG9hZGxpYnJhcnlfbGFfT0JKRUNUUykKK2xvYWRsaWJyYXJ5X2xhX0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChsb2FkbGlicmFyeV9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitzaGxfbG9hZF9sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2FtX3NobF9sb2FkX2xhX09CSkVDVFMgPSBzaGxfbG9hZC5sbworc2hsX2xvYWRfbGFfT0JKRUNUUyA9ICQoYW1fc2hsX2xvYWRfbGFfT0JKRUNUUykKK3NobF9sb2FkX2xhX0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChzaGxfbG9hZF9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQAorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvY29uZmlnL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCithbV9fbXYgPSBtdiAtZgorQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK1NPVVJDRVMgPSAkKGRsZF9saW5rX2xhX1NPVVJDRVMpICQoZGxvcGVuX2xhX1NPVVJDRVMpIFwKKwkkKGR5bGRfbGFfU09VUkNFUykgJChsaWJsdGRsX2xhX1NPVVJDRVMpIFwKKwkkKGxpYmx0ZGxjX2xhX1NPVVJDRVMpICQobG9hZF9hZGRfb25fbGFfU09VUkNFUykgXAorCSQobG9hZGxpYnJhcnlfbGFfU09VUkNFUykgJChzaGxfbG9hZF9sYV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChkbGRfbGlua19sYV9TT1VSQ0VTKSAkKGRsb3Blbl9sYV9TT1VSQ0VTKSBcCisJJChkeWxkX2xhX1NPVVJDRVMpICQobGlibHRkbF9sYV9TT1VSQ0VTKSBcCisJJChsaWJsdGRsY19sYV9TT1VSQ0VTKSAkKGxvYWRfYWRkX29uX2xhX1NPVVJDRVMpIFwKKwkkKGxvYWRsaWJyYXJ5X2xhX1NPVVJDRVMpICQoc2hsX2xvYWRfbGFfU09VUkNFUykKK2FtX19pbmNsdWRlX0hFQURFUlNfRElTVCA9IGx0ZGwuaAorYW1fX2x0ZGxpbmNsdWRlX0hFQURFUlNfRElTVCA9IGxpYmx0ZGwvbHRfc3lzdGVtLmggbGlibHRkbC9sdF9lcnJvci5oIFwKKwlsaWJsdGRsL2x0X2RsbG9hZGVyLmgKK0hFQURFUlMgPSAkKGluY2x1ZGVfSEVBREVSUykgJChsdGRsaW5jbHVkZV9IRUFERVJTKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK2Rpc3RkaXIgPSAkKFBBQ0tBR0UpLSQoVkVSU0lPTikKK3RvcF9kaXN0ZGlyID0gJChkaXN0ZGlyKQorYW1fX3JlbW92ZV9kaXN0ZGlyID0gXAorICB7IHRlc3QgISAtZCAiJChkaXN0ZGlyKSIgXAorICAgIHx8IHsgZmluZCAiJChkaXN0ZGlyKSIgLXR5cGUgZCAhIC1wZXJtIC0yMDAgLWV4ZWMgY2htb2QgdSt3IHt9ICc7JyBcCisgICAgICAgICAmJiBybSAtZnIgIiQoZGlzdGRpcikiOyB9OyB9CitESVNUX0FSQ0hJVkVTID0gJChkaXN0ZGlyKS50YXIuZ3oKK0daSVBfRU5WID0gLS1iZXN0CitkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzID0gZmluZCAuIC10eXBlIGYgLXByaW50CitkaXN0Y2xlYW5jaGVja19saXN0ZmlsZXMgPSBmaW5kIC4gLXR5cGUgZiAtcHJpbnQKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBUkdaX0ggPSBAQVJHWl9IQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHUkVQID0gQEdSRVBACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCQUREX0RMID0gQExJQkFERF9ETEAKK0xJQkFERF9ETERfTElOSyA9IEBMSUJBRERfRExEX0xJTktACitMSUJBRERfRExPUEVOID0gQExJQkFERF9ETE9QRU5ACitMSUJBRERfU0hMX0xPQUQgPSBATElCQUREX1NITF9MT0FEQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRETE9QRU4gPSBATFRETE9QRU5ACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTFRfQ09ORklHX0ggPSBATFRfQ09ORklHX0hACitMVF9ETExPQURFUlMgPSBATFRfRExMT0FERVJTQAorTFRfRExQUkVPUEVOID0gQExUX0RMUFJFT1BFTkAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzX3N5bWJvbF91bmRlcnNjb3JlID0gQHN5c19zeW1ib2xfdW5kZXJzY29yZUAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQKK0FVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduCisKKyMgLUkkKHNyY2RpcikgaXMgbmVlZGVkIGZvciB1c2VyIHRoYXQgYnVpbHQgbGlibHRkbCB3aXRoIGEgc3ViLUF1dG9tYWtlCisjIChub3QgYXMgYSBzdWItcGFja2FnZSEpIHVzaW5nICdub3N0ZGluYyc6CitBTV9DUFBGTEFHUyA9IC1ETFRfQ09ORklHX0g9JzwkKExUX0NPTkZJR19IKT4nIC1ETFRETCAtSS4gLUkkKHNyY2RpcikgXAorCS1JbGlibHRkbCAtSSQoc3JjZGlyKS9saWJsdGRsIC1JJChzcmNkaXIpL2xpYmx0ZGwKK0FNX0xERkxBR1MgPSAtbm8tdW5kZWZpbmVkCitCVUlMVF9TT1VSQ0VTID0gJChBUkdaX0gpCitpbmNsdWRlX0hFQURFUlMgPSAkKGFtX19hcHBlbmRfMSkKK25vaW5zdF9MVExJQlJBUklFUyA9ICQoTFRfRExMT0FERVJTKSAkKGFtX19hcHBlbmRfMykKK2xpYl9MVExJQlJBUklFUyA9ICQoYW1fX2FwcGVuZF8yKQorRVhUUkFfTFRMSUJSQVJJRVMgPSBkbG9wZW4ubGEgZGxkX2xpbmsubGEgZHlsZC5sYSBsb2FkX2FkZF9vbi5sYSBcCisJbG9hZGxpYnJhcnkubGEgc2hsX2xvYWQubGEKK0VYVFJBX0RJU1QgPSBsdF9fZGlyZW50LmMgbHRfX3N0cmwuYyBDT1BZSU5HLkxJQiBjb25maWd1cmUuYWMgXAorCU1ha2VmaWxlLmFtIGFjbG9jYWwubTQgTWFrZWZpbGUuaW4gY29uZmlndXJlIGNvbmZpZy1oLmluIFwKKwlSRUFETUUgYXJnel8uaCBhcmd6LmMKK0NMRUFORklMRVMgPSBsaWJsdGRsLmxhIGxpYmx0ZGxjLmxhIGxpYmRsbG9hZGVyLmxhICQoTElCT0JKUykgXAorCSQoTFRMSUJPQkpTKQorTU9TVExZQ0xFQU5GSUxFUyA9IGFyZ3ouaCBhcmd6LmgtdAorTFRETF9WRVJTSU9OX0lORk8gPSAtdmVyc2lvbi1pbmZvIDk6MjoyCitASU5TVEFMTF9MVERMX1RSVUVAbHRkbGluY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL2xpYmx0ZGwKK0BJTlNUQUxMX0xURExfVFJVRUBsdGRsaW5jbHVkZV9IRUFERVJTID0gbGlibHRkbC9sdF9zeXN0ZW0uaCBcCitASU5TVEFMTF9MVERMX1RSVUVACQkJICBsaWJsdGRsL2x0X2Vycm9yLmggXAorQElOU1RBTExfTFRETF9UUlVFQAkJCSAgbGlibHRkbC9sdF9kbGxvYWRlci5oCisKK2xpYmx0ZGxfbGFfU09VUkNFUyA9IGxpYmx0ZGwvbHRfX2FsbG9jLmggXAorCQkJICBsaWJsdGRsL2x0X19kaXJlbnQuaCBcCisJCQkgIGxpYmx0ZGwvbHRfX2dsaWJjLmggXAorCQkJICBsaWJsdGRsL2x0X19wcml2YXRlLmggXAorCQkJICBsaWJsdGRsL2x0X19zdHJsLmggXAorCQkJICBsaWJsdGRsL2x0X2RsbG9hZGVyLmggXAorCQkJICBsaWJsdGRsL2x0X2Vycm9yLmggXAorCSAgICAgICAgICAgICAgICAgIGxpYmx0ZGwvbHRfc3lzdGVtLmggXAorCQkJICBsaWJsdGRsL3NsaXN0LmggXAorCQkJICBsb2FkZXJzL3ByZW9wZW4uYyBcCisJCQkgIGx0X19hbGxvYy5jIFwKKwkJCSAgbHRfZGxsb2FkZXIuYyBcCisJCQkgIGx0X2Vycm9yLmMgXAorCQkJICBsdGRsLmMgXAorCQkJICBsdGRsLmggXAorCQkJICBzbGlzdC5jCisKK2xpYmx0ZGxfbGFfQ1BQRkxBR1MgPSAtRExURExPUEVOPSQoTFRETE9QRU4pICQoQU1fQ1BQRkxBR1MpCitsaWJsdGRsX2xhX0xERkxBR1MgPSAkKEFNX0xERkxBR1MpICQoTFRETF9WRVJTSU9OX0lORk8pICQoTFRfRExQUkVPUEVOKQorbGlibHRkbF9sYV9MSUJBREQgPSAkKExUTElCT0JKUykKK2xpYmx0ZGxfbGFfREVQRU5ERU5DSUVTID0gJChMVF9ETExPQURFUlMpICQoTFRMSUJPQkpTKQorbGlibHRkbGNfbGFfU09VUkNFUyA9ICQobGlibHRkbF9sYV9TT1VSQ0VTKQorbGlibHRkbGNfbGFfQ1BQRkxBR1MgPSAtRExURExPUEVOPSQoTFRETE9QRU4pYyAkKEFNX0NQUEZMQUdTKQorbGlibHRkbGNfbGFfTERGTEFHUyA9ICQoQU1fTERGTEFHUykgJChMVF9ETFBSRU9QRU4pCitsaWJsdGRsY19sYV9MSUJBREQgPSAkKGxpYmx0ZGxfbGFfTElCQUREKQorbGlibHRkbGNfbGFfREVQRU5ERU5DSUVTID0gJChsaWJsdGRsX2xhX0RFUEVOREVOQ0lFUykKK2Rsb3Blbl9sYV9TT1VSQ0VTID0gbG9hZGVycy9kbG9wZW4uYworZGxvcGVuX2xhX0xERkxBR1MgPSAtbW9kdWxlIC1hdm9pZC12ZXJzaW9uCitkbG9wZW5fbGFfTElCQUREID0gJChMSUJBRERfRExPUEVOKQorZGxkX2xpbmtfbGFfU09VUkNFUyA9IGxvYWRlcnMvZGxkX2xpbmsuYworZGxkX2xpbmtfbGFfTERGTEFHUyA9IC1tb2R1bGUgLWF2b2lkLXZlcnNpb24KK2RsZF9saW5rX2xhX0xJQkFERCA9IC1sZGxkCitkeWxkX2xhX1NPVVJDRVMgPSBsb2FkZXJzL2R5bGQuYworZHlsZF9sYV9MREZMQUdTID0gLW1vZHVsZSAtYXZvaWQtdmVyc2lvbgorbG9hZF9hZGRfb25fbGFfU09VUkNFUyA9IGxvYWRlcnMvbG9hZF9hZGRfb24uYworbG9hZF9hZGRfb25fbGFfTERGTEFHUyA9IC1tb2R1bGUgLWF2b2lkLXZlcnNpb24KK2xvYWRsaWJyYXJ5X2xhX1NPVVJDRVMgPSBsb2FkZXJzL2xvYWRsaWJyYXJ5LmMKK2xvYWRsaWJyYXJ5X2xhX0xERkxBR1MgPSAtbW9kdWxlIC1hdm9pZC12ZXJzaW9uCitzaGxfbG9hZF9sYV9TT1VSQ0VTID0gbG9hZGVycy9zaGxfbG9hZC5jCitzaGxfbG9hZF9sYV9MREZMQUdTID0gLW1vZHVsZSAtYXZvaWQtdmVyc2lvbgorc2hsX2xvYWRfbGFfTElCQUREID0gJChMSUJBRERfU0hMX0xPQUQpCithbGw6ICQoQlVJTFRfU09VUkNFUykgY29uZmlnLmgKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorYW0tLXJlZnJlc2g6CisJQDoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgZWNobyAnIGNkICQoc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24nOyBcCisJICAgICAgJChhbV9fY2QpICQoc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gXAorCQkmJiBleGl0IDA7IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBNYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBlY2hvICcgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzJzsgXAorCSAgICAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXM7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJJChTSEVMTCkgLi9jb25maWcuc3RhdHVzIC0tcmVjaGVjaworCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCSQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBVVRPQ09ORikKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJJChhbV9fY2QpICQoc3JjZGlyKSAmJiAkKEFDTE9DQUwpICQoQUNMT0NBTF9BTUZMQUdTKQorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworY29uZmlnLmg6IHN0YW1wLWgxCisJQGlmIHRlc3QgISAtZiAkQDsgdGhlbiBcCisJICBybSAtZiBzdGFtcC1oMTsgXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgc3RhbXAtaDE7IFwKKwllbHNlIDo7IGZpCisKK3N0YW1wLWgxOiAkKHNyY2RpcikvY29uZmlnLWguaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAcm0gLWYgc3RhbXAtaDEKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzIGNvbmZpZy5oCiskKHNyY2RpcikvY29uZmlnLWguaW46ICAkKGFtX19jb25maWd1cmVfZGVwcykgCisJKCQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmICQoQVVUT0hFQURFUikpCisJcm0gLWYgc3RhbXAtaDEKKwl0b3VjaCAkQAorCitkaXN0Y2xlYW4taGRyOgorCS1ybSAtZiBjb25maWcuaCBzdGFtcC1oMQoraW5zdGFsbC1saWJMVExJQlJBUklFUzogJChsaWJfTFRMSUJSQVJJRVMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChsaWJkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChsaWJkaXIpIgorCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKGxpYmRpcikiIHx8IGxpc3Q9OyBcCisJbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKKwkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAorCSAgZWxzZSA6OyBmaTsgXAorCWRvbmU7IFwKKwl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKKwkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQobGliZGlyKSciOyBcCisJICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQobGliZGlyKSI7IFwKKwl9CisKK3VuaW5zdGFsbC1saWJMVExJQlJBUklFUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKGxpYmRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICAkKGFtX19zdHJpcF9kaXIpIFwKKwkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQobGliZGlyKS8kJGYnIjsgXAorCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKGxpYmRpcikvJCRmIjsgXAorCWRvbmUKKworY2xlYW4tbGliTFRMSUJSQVJJRVM6CisJLXRlc3QgLXogIiQobGliX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChsaWJfTFRMSUJSQVJJRVMpCisJQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgZGlyPSJgZWNobyAkJHAgfCBzZWQgLWUgJ3N8L1teL10qJCR8fCdgIjsgXAorCSAgdGVzdCAiJCRkaXIiICE9ICIkJHAiIHx8IGRpcj0uOyBcCisJICBlY2hvICJybSAtZiBcIiQke2Rpcn0vc29fbG9jYXRpb25zXCIiOyBcCisJICBybSAtZiAiJCR7ZGlyfS9zb19sb2NhdGlvbnMiOyBcCisJZG9uZQorCitjbGVhbi1ub2luc3RMVExJQlJBUklFUzoKKwktdGVzdCAteiAiJChub2luc3RfTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKG5vaW5zdF9MVExJQlJBUklFUykKKwlAbGlzdD0nJChub2luc3RfTFRMSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBkaXI9ImBlY2hvICQkcCB8IHNlZCAtZSAnc3wvW14vXSokJHx8J2AiOyBcCisJICB0ZXN0ICIkJGRpciIgIT0gIiQkcCIgfHwgZGlyPS47IFwKKwkgIGVjaG8gInJtIC1mIFwiJCR7ZGlyfS9zb19sb2NhdGlvbnNcIiI7IFwKKwkgIHJtIC1mICIkJHtkaXJ9L3NvX2xvY2F0aW9ucyI7IFwKKwlkb25lCitkbGRfbGluay5sYTogJChkbGRfbGlua19sYV9PQkpFQ1RTKSAkKGRsZF9saW5rX2xhX0RFUEVOREVOQ0lFUykgCisJJChkbGRfbGlua19sYV9MSU5LKSAgJChkbGRfbGlua19sYV9PQkpFQ1RTKSAkKGRsZF9saW5rX2xhX0xJQkFERCkgJChMSUJTKQorZGxvcGVuLmxhOiAkKGRsb3Blbl9sYV9PQkpFQ1RTKSAkKGRsb3Blbl9sYV9ERVBFTkRFTkNJRVMpIAorCSQoZGxvcGVuX2xhX0xJTkspICAkKGRsb3Blbl9sYV9PQkpFQ1RTKSAkKGRsb3Blbl9sYV9MSUJBREQpICQoTElCUykKK2R5bGQubGE6ICQoZHlsZF9sYV9PQkpFQ1RTKSAkKGR5bGRfbGFfREVQRU5ERU5DSUVTKSAKKwkkKGR5bGRfbGFfTElOSykgICQoZHlsZF9sYV9PQkpFQ1RTKSAkKGR5bGRfbGFfTElCQUREKSAkKExJQlMpCitsaWJsdGRsLmxhOiAkKGxpYmx0ZGxfbGFfT0JKRUNUUykgJChsaWJsdGRsX2xhX0RFUEVOREVOQ0lFUykgCisJJChsaWJsdGRsX2xhX0xJTkspICQoYW1fbGlibHRkbF9sYV9ycGF0aCkgJChsaWJsdGRsX2xhX09CSkVDVFMpICQobGlibHRkbF9sYV9MSUJBREQpICQoTElCUykKK2xpYmx0ZGxjLmxhOiAkKGxpYmx0ZGxjX2xhX09CSkVDVFMpICQobGlibHRkbGNfbGFfREVQRU5ERU5DSUVTKSAKKwkkKGxpYmx0ZGxjX2xhX0xJTkspICQoYW1fbGlibHRkbGNfbGFfcnBhdGgpICQobGlibHRkbGNfbGFfT0JKRUNUUykgJChsaWJsdGRsY19sYV9MSUJBREQpICQoTElCUykKK2xvYWRfYWRkX29uLmxhOiAkKGxvYWRfYWRkX29uX2xhX09CSkVDVFMpICQobG9hZF9hZGRfb25fbGFfREVQRU5ERU5DSUVTKSAKKwkkKGxvYWRfYWRkX29uX2xhX0xJTkspICAkKGxvYWRfYWRkX29uX2xhX09CSkVDVFMpICQobG9hZF9hZGRfb25fbGFfTElCQUREKSAkKExJQlMpCitsb2FkbGlicmFyeS5sYTogJChsb2FkbGlicmFyeV9sYV9PQkpFQ1RTKSAkKGxvYWRsaWJyYXJ5X2xhX0RFUEVOREVOQ0lFUykgCisJJChsb2FkbGlicmFyeV9sYV9MSU5LKSAgJChsb2FkbGlicmFyeV9sYV9PQkpFQ1RTKSAkKGxvYWRsaWJyYXJ5X2xhX0xJQkFERCkgJChMSUJTKQorc2hsX2xvYWQubGE6ICQoc2hsX2xvYWRfbGFfT0JKRUNUUykgJChzaGxfbG9hZF9sYV9ERVBFTkRFTkNJRVMpIAorCSQoc2hsX2xvYWRfbGFfTElOSykgICQoc2hsX2xvYWRfbGFfT0JKRUNUUykgJChzaGxfbG9hZF9sYV9MSUJBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQCQoREVQRElSKS9hcmd6LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAJChERVBESVIpL2x0X19kaXJlbnQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAkKERFUERJUikvbHRfX3N0cmwuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9kbGRfbGluay5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Rsb3Blbi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2R5bGQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJsdGRsX2xhLWx0X19hbGxvYy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmx0ZGxfbGEtbHRfZGxsb2FkZXIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJsdGRsX2xhLWx0X2Vycm9yLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGlibHRkbF9sYS1sdGRsLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGlibHRkbF9sYS1wcmVvcGVuLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGlibHRkbF9sYS1zbGlzdC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmx0ZGxjX2xhLWx0X19hbGxvYy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmx0ZGxjX2xhLWx0X2RsbG9hZGVyLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGlibHRkbGNfbGEtbHRfZXJyb3IuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJsdGRsY19sYS1sdGRsLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGlibHRkbGNfbGEtcHJlb3Blbi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmx0ZGxjX2xhLXNsaXN0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbG9hZF9hZGRfb24uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sb2FkbGlicmFyeS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NobF9sb2FkLlBsb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCitkbGRfbGluay5sbzogbG9hZGVycy9kbGRfbGluay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpICAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBkbGRfbGluay5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvZGxkX2xpbmsuVHBvIC1jIC1vIGRsZF9saW5rLmxvIGB0ZXN0IC1mICdsb2FkZXJzL2RsZF9saW5rLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGxvYWRlcnMvZGxkX2xpbmsuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS9kbGRfbGluay5UcG8gJChERVBESVIpL2RsZF9saW5rLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nbG9hZGVycy9kbGRfbGluay5jJyBvYmplY3Q9J2RsZF9saW5rLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBkbGRfbGluay5sbyBgdGVzdCAtZiAnbG9hZGVycy9kbGRfbGluay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bsb2FkZXJzL2RsZF9saW5rLmMKKworZGxvcGVuLmxvOiBsb2FkZXJzL2Rsb3Blbi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpICAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBkbG9wZW4ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2Rsb3Blbi5UcG8gLWMgLW8gZGxvcGVuLmxvIGB0ZXN0IC1mICdsb2FkZXJzL2Rsb3Blbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bsb2FkZXJzL2Rsb3Blbi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJChERVBESVIpL2Rsb3Blbi5UcG8gJChERVBESVIpL2Rsb3Blbi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2xvYWRlcnMvZGxvcGVuLmMnIG9iamVjdD0nZGxvcGVuLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBkbG9wZW4ubG8gYHRlc3QgLWYgJ2xvYWRlcnMvZGxvcGVuLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGxvYWRlcnMvZGxvcGVuLmMKKworZHlsZC5sbzogbG9hZGVycy9keWxkLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGR5bGQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2R5bGQuVHBvIC1jIC1vIGR5bGQubG8gYHRlc3QgLWYgJ2xvYWRlcnMvZHlsZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bsb2FkZXJzL2R5bGQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS9keWxkLlRwbyAkKERFUERJUikvZHlsZC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2xvYWRlcnMvZHlsZC5jJyBvYmplY3Q9J2R5bGQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGR5bGQubG8gYHRlc3QgLWYgJ2xvYWRlcnMvZHlsZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bsb2FkZXJzL2R5bGQuYworCitsaWJsdGRsX2xhLXByZW9wZW4ubG86IGxvYWRlcnMvcHJlb3Blbi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpICAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmx0ZGxfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmx0ZGxfbGEtcHJlb3Blbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGlibHRkbF9sYS1wcmVvcGVuLlRwbyAtYyAtbyBsaWJsdGRsX2xhLXByZW9wZW4ubG8gYHRlc3QgLWYgJ2xvYWRlcnMvcHJlb3Blbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bsb2FkZXJzL3ByZW9wZW4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS9saWJsdGRsX2xhLXByZW9wZW4uVHBvICQoREVQRElSKS9saWJsdGRsX2xhLXByZW9wZW4uUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsb2FkZXJzL3ByZW9wZW4uYycgb2JqZWN0PSdsaWJsdGRsX2xhLXByZW9wZW4ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmx0ZGxfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGlibHRkbF9sYS1wcmVvcGVuLmxvIGB0ZXN0IC1mICdsb2FkZXJzL3ByZW9wZW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgbG9hZGVycy9wcmVvcGVuLmMKKworbGlibHRkbF9sYS1sdF9fYWxsb2MubG86IGx0X19hbGxvYy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpICAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmx0ZGxfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmx0ZGxfbGEtbHRfX2FsbG9jLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJsdGRsX2xhLWx0X19hbGxvYy5UcG8gLWMgLW8gbGlibHRkbF9sYS1sdF9fYWxsb2MubG8gYHRlc3QgLWYgJ2x0X19hbGxvYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsdF9fYWxsb2MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS9saWJsdGRsX2xhLWx0X19hbGxvYy5UcG8gJChERVBESVIpL2xpYmx0ZGxfbGEtbHRfX2FsbG9jLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nbHRfX2FsbG9jLmMnIG9iamVjdD0nbGlibHRkbF9sYS1sdF9fYWxsb2MubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmx0ZGxfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGlibHRkbF9sYS1sdF9fYWxsb2MubG8gYHRlc3QgLWYgJ2x0X19hbGxvYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsdF9fYWxsb2MuYworCitsaWJsdGRsX2xhLWx0X2RsbG9hZGVyLmxvOiBsdF9kbGxvYWRlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpICAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmx0ZGxfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmx0ZGxfbGEtbHRfZGxsb2FkZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmx0ZGxfbGEtbHRfZGxsb2FkZXIuVHBvIC1jIC1vIGxpYmx0ZGxfbGEtbHRfZGxsb2FkZXIubG8gYHRlc3QgLWYgJ2x0X2RsbG9hZGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGx0X2RsbG9hZGVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvbGlibHRkbF9sYS1sdF9kbGxvYWRlci5UcG8gJChERVBESVIpL2xpYmx0ZGxfbGEtbHRfZGxsb2FkZXIuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsdF9kbGxvYWRlci5jJyBvYmplY3Q9J2xpYmx0ZGxfbGEtbHRfZGxsb2FkZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmx0ZGxfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGlibHRkbF9sYS1sdF9kbGxvYWRlci5sbyBgdGVzdCAtZiAnbHRfZGxsb2FkZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbHRfZGxsb2FkZXIuYworCitsaWJsdGRsX2xhLWx0X2Vycm9yLmxvOiBsdF9lcnJvci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpICAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmx0ZGxfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmx0ZGxfbGEtbHRfZXJyb3IubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmx0ZGxfbGEtbHRfZXJyb3IuVHBvIC1jIC1vIGxpYmx0ZGxfbGEtbHRfZXJyb3IubG8gYHRlc3QgLWYgJ2x0X2Vycm9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGx0X2Vycm9yLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvbGlibHRkbF9sYS1sdF9lcnJvci5UcG8gJChERVBESVIpL2xpYmx0ZGxfbGEtbHRfZXJyb3IuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsdF9lcnJvci5jJyBvYmplY3Q9J2xpYmx0ZGxfbGEtbHRfZXJyb3IubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmx0ZGxfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGlibHRkbF9sYS1sdF9lcnJvci5sbyBgdGVzdCAtZiAnbHRfZXJyb3IuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbHRfZXJyb3IuYworCitsaWJsdGRsX2xhLWx0ZGwubG86IGx0ZGwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJsdGRsX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJsdGRsX2xhLWx0ZGwubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmx0ZGxfbGEtbHRkbC5UcG8gLWMgLW8gbGlibHRkbF9sYS1sdGRsLmxvIGB0ZXN0IC1mICdsdGRsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGx0ZGwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS9saWJsdGRsX2xhLWx0ZGwuVHBvICQoREVQRElSKS9saWJsdGRsX2xhLWx0ZGwuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsdGRsLmMnIG9iamVjdD0nbGlibHRkbF9sYS1sdGRsLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJsdGRsX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmx0ZGxfbGEtbHRkbC5sbyBgdGVzdCAtZiAnbHRkbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsdGRsLmMKKworbGlibHRkbF9sYS1zbGlzdC5sbzogc2xpc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJsdGRsX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJsdGRsX2xhLXNsaXN0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJsdGRsX2xhLXNsaXN0LlRwbyAtYyAtbyBsaWJsdGRsX2xhLXNsaXN0LmxvIGB0ZXN0IC1mICdzbGlzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzbGlzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJChERVBESVIpL2xpYmx0ZGxfbGEtc2xpc3QuVHBvICQoREVQRElSKS9saWJsdGRsX2xhLXNsaXN0LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nc2xpc3QuYycgb2JqZWN0PSdsaWJsdGRsX2xhLXNsaXN0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJsdGRsX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmx0ZGxfbGEtc2xpc3QubG8gYHRlc3QgLWYgJ3NsaXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNsaXN0LmMKKworbGlibHRkbGNfbGEtcHJlb3Blbi5sbzogbG9hZGVycy9wcmVvcGVuLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGlibHRkbGNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmx0ZGxjX2xhLXByZW9wZW4ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmx0ZGxjX2xhLXByZW9wZW4uVHBvIC1jIC1vIGxpYmx0ZGxjX2xhLXByZW9wZW4ubG8gYHRlc3QgLWYgJ2xvYWRlcnMvcHJlb3Blbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bsb2FkZXJzL3ByZW9wZW4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS9saWJsdGRsY19sYS1wcmVvcGVuLlRwbyAkKERFUERJUikvbGlibHRkbGNfbGEtcHJlb3Blbi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2xvYWRlcnMvcHJlb3Blbi5jJyBvYmplY3Q9J2xpYmx0ZGxjX2xhLXByZW9wZW4ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmx0ZGxjX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmx0ZGxjX2xhLXByZW9wZW4ubG8gYHRlc3QgLWYgJ2xvYWRlcnMvcHJlb3Blbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bsb2FkZXJzL3ByZW9wZW4uYworCitsaWJsdGRsY19sYS1sdF9fYWxsb2MubG86IGx0X19hbGxvYy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpICAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmx0ZGxjX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJsdGRsY19sYS1sdF9fYWxsb2MubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmx0ZGxjX2xhLWx0X19hbGxvYy5UcG8gLWMgLW8gbGlibHRkbGNfbGEtbHRfX2FsbG9jLmxvIGB0ZXN0IC1mICdsdF9fYWxsb2MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbHRfX2FsbG9jLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvbGlibHRkbGNfbGEtbHRfX2FsbG9jLlRwbyAkKERFUERJUikvbGlibHRkbGNfbGEtbHRfX2FsbG9jLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nbHRfX2FsbG9jLmMnIG9iamVjdD0nbGlibHRkbGNfbGEtbHRfX2FsbG9jLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJsdGRsY19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJsdGRsY19sYS1sdF9fYWxsb2MubG8gYHRlc3QgLWYgJ2x0X19hbGxvYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsdF9fYWxsb2MuYworCitsaWJsdGRsY19sYS1sdF9kbGxvYWRlci5sbzogbHRfZGxsb2FkZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJsdGRsY19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGlibHRkbGNfbGEtbHRfZGxsb2FkZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmx0ZGxjX2xhLWx0X2RsbG9hZGVyLlRwbyAtYyAtbyBsaWJsdGRsY19sYS1sdF9kbGxvYWRlci5sbyBgdGVzdCAtZiAnbHRfZGxsb2FkZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbHRfZGxsb2FkZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS9saWJsdGRsY19sYS1sdF9kbGxvYWRlci5UcG8gJChERVBESVIpL2xpYmx0ZGxjX2xhLWx0X2RsbG9hZGVyLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nbHRfZGxsb2FkZXIuYycgb2JqZWN0PSdsaWJsdGRsY19sYS1sdF9kbGxvYWRlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGlibHRkbGNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGlibHRkbGNfbGEtbHRfZGxsb2FkZXIubG8gYHRlc3QgLWYgJ2x0X2RsbG9hZGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGx0X2RsbG9hZGVyLmMKKworbGlibHRkbGNfbGEtbHRfZXJyb3IubG86IGx0X2Vycm9yLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGlibHRkbGNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmx0ZGxjX2xhLWx0X2Vycm9yLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJsdGRsY19sYS1sdF9lcnJvci5UcG8gLWMgLW8gbGlibHRkbGNfbGEtbHRfZXJyb3IubG8gYHRlc3QgLWYgJ2x0X2Vycm9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGx0X2Vycm9yLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvbGlibHRkbGNfbGEtbHRfZXJyb3IuVHBvICQoREVQRElSKS9saWJsdGRsY19sYS1sdF9lcnJvci5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2x0X2Vycm9yLmMnIG9iamVjdD0nbGlibHRkbGNfbGEtbHRfZXJyb3IubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmx0ZGxjX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmx0ZGxjX2xhLWx0X2Vycm9yLmxvIGB0ZXN0IC1mICdsdF9lcnJvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsdF9lcnJvci5jCisKK2xpYmx0ZGxjX2xhLWx0ZGwubG86IGx0ZGwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJsdGRsY19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGlibHRkbGNfbGEtbHRkbC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGlibHRkbGNfbGEtbHRkbC5UcG8gLWMgLW8gbGlibHRkbGNfbGEtbHRkbC5sbyBgdGVzdCAtZiAnbHRkbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsdGRsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvbGlibHRkbGNfbGEtbHRkbC5UcG8gJChERVBESVIpL2xpYmx0ZGxjX2xhLWx0ZGwuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsdGRsLmMnIG9iamVjdD0nbGlibHRkbGNfbGEtbHRkbC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGlibHRkbGNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGlibHRkbGNfbGEtbHRkbC5sbyBgdGVzdCAtZiAnbHRkbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsdGRsLmMKKworbGlibHRkbGNfbGEtc2xpc3QubG86IHNsaXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGlibHRkbGNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmx0ZGxjX2xhLXNsaXN0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJsdGRsY19sYS1zbGlzdC5UcG8gLWMgLW8gbGlibHRkbGNfbGEtc2xpc3QubG8gYHRlc3QgLWYgJ3NsaXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNsaXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvbGlibHRkbGNfbGEtc2xpc3QuVHBvICQoREVQRElSKS9saWJsdGRsY19sYS1zbGlzdC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3NsaXN0LmMnIG9iamVjdD0nbGlibHRkbGNfbGEtc2xpc3QubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmx0ZGxjX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmx0ZGxjX2xhLXNsaXN0LmxvIGB0ZXN0IC1mICdzbGlzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzbGlzdC5jCisKK2xvYWRfYWRkX29uLmxvOiBsb2FkZXJzL2xvYWRfYWRkX29uLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxvYWRfYWRkX29uLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9sb2FkX2FkZF9vbi5UcG8gLWMgLW8gbG9hZF9hZGRfb24ubG8gYHRlc3QgLWYgJ2xvYWRlcnMvbG9hZF9hZGRfb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgbG9hZGVycy9sb2FkX2FkZF9vbi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJChERVBESVIpL2xvYWRfYWRkX29uLlRwbyAkKERFUERJUikvbG9hZF9hZGRfb24uUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsb2FkZXJzL2xvYWRfYWRkX29uLmMnIG9iamVjdD0nbG9hZF9hZGRfb24ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxvYWRfYWRkX29uLmxvIGB0ZXN0IC1mICdsb2FkZXJzL2xvYWRfYWRkX29uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGxvYWRlcnMvbG9hZF9hZGRfb24uYworCitsb2FkbGlicmFyeS5sbzogbG9hZGVycy9sb2FkbGlicmFyeS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpICAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsb2FkbGlicmFyeS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbG9hZGxpYnJhcnkuVHBvIC1jIC1vIGxvYWRsaWJyYXJ5LmxvIGB0ZXN0IC1mICdsb2FkZXJzL2xvYWRsaWJyYXJ5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGxvYWRlcnMvbG9hZGxpYnJhcnkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS9sb2FkbGlicmFyeS5UcG8gJChERVBESVIpL2xvYWRsaWJyYXJ5LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nbG9hZGVycy9sb2FkbGlicmFyeS5jJyBvYmplY3Q9J2xvYWRsaWJyYXJ5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsb2FkbGlicmFyeS5sbyBgdGVzdCAtZiAnbG9hZGVycy9sb2FkbGlicmFyeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bsb2FkZXJzL2xvYWRsaWJyYXJ5LmMKKworc2hsX2xvYWQubG86IGxvYWRlcnMvc2hsX2xvYWQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc2hsX2xvYWQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL3NobF9sb2FkLlRwbyAtYyAtbyBzaGxfbG9hZC5sbyBgdGVzdCAtZiAnbG9hZGVycy9zaGxfbG9hZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bsb2FkZXJzL3NobF9sb2FkLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvc2hsX2xvYWQuVHBvICQoREVQRElSKS9zaGxfbG9hZC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2xvYWRlcnMvc2hsX2xvYWQuYycgb2JqZWN0PSdzaGxfbG9hZC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc2hsX2xvYWQubG8gYHRlc3QgLWYgJ2xvYWRlcnMvc2hsX2xvYWQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbG9hZGVycy9zaGxfbG9hZC5jCisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKK2Rpc3RjbGVhbi1saWJ0b29sOgorCS1ybSAtZiBsaWJ0b29sIGNvbmZpZy5sdAoraW5zdGFsbC1pbmNsdWRlSEVBREVSUzogJChpbmNsdWRlX0hFQURFUlMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChpbmNsdWRlZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoaW5jbHVkZWRpcikiCisJQGxpc3Q9JyQoaW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQoaW5jbHVkZWRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICckKERFU1RESVIpJChpbmNsdWRlZGlyKSciOyBcCisJICAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICIkKERFU1RESVIpJChpbmNsdWRlZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1pbmNsdWRlSEVBREVSUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGluY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKGluY2x1ZGVkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJdGVzdCAtbiAiJCRmaWxlcyIgfHwgZXhpdCAwOyBcCisJZWNobyAiICggY2QgJyQoREVTVERJUikkKGluY2x1ZGVkaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQoaW5jbHVkZWRpcikiICYmIHJtIC1mICQkZmlsZXMKK2luc3RhbGwtbHRkbGluY2x1ZGVIRUFERVJTOiAkKGx0ZGxpbmNsdWRlX0hFQURFUlMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChsdGRsaW5jbHVkZWRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGx0ZGxpbmNsdWRlZGlyKSIKKwlAbGlzdD0nJChsdGRsaW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQobHRkbGluY2x1ZGVkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0hFQURFUikgJCRmaWxlcyAnJChERVNURElSKSQobHRkbGluY2x1ZGVkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgIiQoREVTVERJUikkKGx0ZGxpbmNsdWRlZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1sdGRsaW5jbHVkZUhFQURFUlM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChsdGRsaW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQobHRkbGluY2x1ZGVkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJdGVzdCAtbiAiJCRmaWxlcyIgfHwgZXhpdCAwOyBcCisJZWNobyAiICggY2QgJyQoREVTVERJUikkKGx0ZGxpbmNsdWRlZGlyKScgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisJY2QgIiQoREVTVERJUikkKGx0ZGxpbmNsdWRlZGlyKSIgJiYgcm0gLWYgJCRmaWxlcworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpIGNvbmZpZy1oLmluICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJc2V0IHg7IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpIGNvbmZpZy1oLmluICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgY29uZmlnLWguaW4gJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgY29uZmlnLWguaW4gJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCXRlc3QgLWQgIiQoZGlzdGRpcikiIHx8IG1rZGlyICIkKGRpc3RkaXIpIgorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCS10ZXN0IC1uICIkKGFtX19za2lwX21vZGVfZml4KSIgXAorCXx8IGZpbmQgIiQoZGlzdGRpcikiIC10eXBlIGQgISAtcGVybSAtNzU1IFwKKwkJLWV4ZWMgY2htb2QgdStyd3gsZ28rcngge30gXDsgLW8gXAorCSAgISAtdHlwZSBkICEgLXBlcm0gLTQ0NCAtbGlua3MgMSAtZXhlYyBjaG1vZCBhK3Ige30gXDsgLW8gXAorCSAgISAtdHlwZSBkICEgLXBlcm0gLTQwMCAtZXhlYyBjaG1vZCBhK3Ige30gXDsgLW8gXAorCSAgISAtdHlwZSBkICEgLXBlcm0gLTQ0NCAtZXhlYyAkKGluc3RhbGxfc2gpIC1jIC1tIGErciB7fSB7fSBcOyBcCisJfHwgY2htb2QgLVIgYStyICIkKGRpc3RkaXIpIgorZGlzdC1nemlwOiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IEdaSVA9JChHWklQX0VOVikgZ3ppcCAtYyA+JChkaXN0ZGlyKS50YXIuZ3oKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdC1iemlwMjogZGlzdGRpcgorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBiemlwMiAtOSAtYyA+JChkaXN0ZGlyKS50YXIuYnoyCisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3QtbHptYTogZGlzdGRpcgorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBsem1hIC05IC1jID4kKGRpc3RkaXIpLnRhci5sem1hCisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3QteHo6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgeHogLWMgPiQoZGlzdGRpcikudGFyLnh6CisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3QtdGFyWjogZGlzdGRpcgorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBjb21wcmVzcyAtYyA+JChkaXN0ZGlyKS50YXIuWgorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LXNoYXI6IGRpc3RkaXIKKwlzaGFyICQoZGlzdGRpcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiQoZGlzdGRpcikuc2hhci5negorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LXppcDogZGlzdGRpcgorCS1ybSAtZiAkKGRpc3RkaXIpLnppcAorCXppcCAtcnEgJChkaXN0ZGlyKS56aXAgJChkaXN0ZGlyKQorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0IGRpc3QtYWxsOiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IEdaSVA9JChHWklQX0VOVikgZ3ppcCAtYyA+JChkaXN0ZGlyKS50YXIuZ3oKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworIyBUaGlzIHRhcmdldCB1bnRhcnMgdGhlIGRpc3QgZmlsZSBhbmQgdHJpZXMgYSBWUEFUSCBjb25maWd1cmF0aW9uLiAgVGhlbgorIyBpdCBndWFyYW50ZWVzIHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBpcyBzZWxmLWNvbnRhaW5lZCBieSBtYWtpbmcgYW5vdGhlcgorIyB0YXJmaWxlLgorZGlzdGNoZWNrOiBkaXN0CisJY2FzZSAnJChESVNUX0FSQ0hJVkVTKScgaW4gXAorCSoudGFyLmd6KikgXAorCSAgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1kYyAkKGRpc3RkaXIpLnRhci5neiB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnRhci5iejIqKSBcCisJICBiemlwMiAtZGMgJChkaXN0ZGlyKS50YXIuYnoyIHwgJChhbV9fdW50YXIpIDs7XAorCSoudGFyLmx6bWEqKSBcCisJICBsem1hIC1kYyAkKGRpc3RkaXIpLnRhci5sem1hIHwgJChhbV9fdW50YXIpIDs7XAorCSoudGFyLnh6KikgXAorCSAgeHogLWRjICQoZGlzdGRpcikudGFyLnh6IHwgJChhbV9fdW50YXIpIDs7XAorCSoudGFyLloqKSBcCisJICB1bmNvbXByZXNzIC1jICQoZGlzdGRpcikudGFyLlogfCAkKGFtX191bnRhcikgOztcCisJKi5zaGFyLmd6KikgXAorCSAgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1kYyAkKGRpc3RkaXIpLnNoYXIuZ3ogfCB1bnNoYXIgOztcCisJKi56aXAqKSBcCisJICB1bnppcCAkKGRpc3RkaXIpLnppcCA7O1wKKwllc2FjCisJY2htb2QgLVIgYS13ICQoZGlzdGRpcik7IGNobW9kIGErdyAkKGRpc3RkaXIpCisJbWtkaXIgJChkaXN0ZGlyKS9fYnVpbGQKKwlta2RpciAkKGRpc3RkaXIpL19pbnN0CisJY2htb2QgYS13ICQoZGlzdGRpcikKKwl0ZXN0IC1kICQoZGlzdGRpcikvX2J1aWxkIHx8IGV4aXQgMDsgXAorCWRjX2luc3RhbGxfYmFzZT1gJChhbV9fY2QpICQoZGlzdGRpcikvX2luc3QgJiYgcHdkIHwgc2VkIC1lICdzLF5bXjpcXC9dOltcXC9dLC8sJ2AgXAorCSAgJiYgZGNfZGVzdGRpcj0iJCR7VE1QRElSLS90bXB9L2FtLWRjLSQkJCQvIiBcCisJICAmJiBhbV9fY3dkPWBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKGRpc3RkaXIpL19idWlsZCBcCisJICAmJiAuLi9jb25maWd1cmUgLS1zcmNkaXI9Li4gLS1wcmVmaXg9IiQkZGNfaW5zdGFsbF9iYXNlIiBcCisJICAgICQoRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUykgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZHZpIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbGNoZWNrIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHVuaW5zdGFsbCBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0dW5pbnN0YWxsY2hlY2tfZGlyPSIkJGRjX2luc3RhbGxfYmFzZSIgXAorCSAgICAgICAgZGlzdHVuaW5zdGFsbGNoZWNrIFwKKwkgICYmIGNobW9kIC1SIGEtdyAiJCRkY19pbnN0YWxsX2Jhc2UiIFwKKwkgICYmICh7IFwKKwkgICAgICAgKGNkIC4uLy4uICYmIHVtYXNrIDA3NyAmJiBta2RpciAiJCRkY19kZXN0ZGlyIikgXAorCSAgICAgICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBERVNURElSPSIkJGRjX2Rlc3RkaXIiIGluc3RhbGwgXAorCSAgICAgICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBERVNURElSPSIkJGRjX2Rlc3RkaXIiIHVuaW5zdGFsbCBcCisJICAgICAgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIERFU1RESVI9IiQkZGNfZGVzdGRpciIgXAorCSAgICAgICAgICAgIGRpc3R1bmluc3RhbGxjaGVja19kaXI9IiQkZGNfZGVzdGRpciIgZGlzdHVuaW5zdGFsbGNoZWNrOyBcCisJICAgICAgfSB8fCB7IHJtIC1yZiAiJCRkY19kZXN0ZGlyIjsgZXhpdCAxOyB9KSBcCisJICAmJiBybSAtcmYgIiQkZGNfZGVzdGRpciIgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZGlzdCBcCisJICAmJiBybSAtcmYgJChESVNUX0FSQ0hJVkVTKSBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0Y2xlYW5jaGVjayBcCisJICAmJiBjZCAiJCRhbV9fY3dkIiBcCisJICB8fCBleGl0IDEKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKwlAKGVjaG8gIiQoZGlzdGRpcikgYXJjaGl2ZXMgcmVhZHkgZm9yIGRpc3RyaWJ1dGlvbjogIjsgXAorCSAgbGlzdD0nJChESVNUX0FSQ0hJVkVTKSc7IGZvciBpIGluICQkbGlzdDsgZG8gZWNobyAkJGk7IGRvbmUpIHwgXAorCSAgc2VkIC1lIDFoIC1lIDFzLy4vPS9nIC1lIDFwIC1lIDF4IC1lICckJHAnIC1lICckJHgnCitkaXN0dW5pbnN0YWxsY2hlY2s6CisJQCQoYW1fX2NkKSAnJChkaXN0dW5pbnN0YWxsY2hlY2tfZGlyKScgXAorCSYmIHRlc3QgYCQoZGlzdHVuaW5zdGFsbGNoZWNrX2xpc3RmaWxlcykgfCB3YyAtbGAgLWxlIDEgXAorCSAgIHx8IHsgZWNobyAiRVJST1I6IGZpbGVzIGxlZnQgYWZ0ZXIgdW5pbnN0YWxsOiIgOyBcCisJICAgICAgICBpZiB0ZXN0IC1uICIkKERFU1RESVIpIjsgdGhlbiBcCisJICAgICAgICAgIGVjaG8gIiAgKGNoZWNrIERFU1RESVIgc3VwcG9ydCkiOyBcCisJICAgICAgICBmaSA7IFwKKwkgICAgICAgICQoZGlzdHVuaW5zdGFsbGNoZWNrX2xpc3RmaWxlcykgOyBcCisJICAgICAgICBleGl0IDE7IH0gPiYyCitkaXN0Y2xlYW5jaGVjazogZGlzdGNsZWFuCisJQGlmIHRlc3QgJyQoc3JjZGlyKScgPSAuIDsgdGhlbiBcCisJICBlY2hvICJFUlJPUjogZGlzdGNsZWFuY2hlY2sgY2FuIG9ubHkgcnVuIGZyb20gYSBWUEFUSCBidWlsZCIgOyBcCisJICBleGl0IDEgOyBcCisJZmkKKwlAdGVzdCBgJChkaXN0Y2xlYW5jaGVja19saXN0ZmlsZXMpIHwgd2MgLWxgIC1lcSAwIFwKKwkgIHx8IHsgZWNobyAiRVJST1I6IGZpbGVzIGxlZnQgaW4gYnVpbGQgZGlyZWN0b3J5IGFmdGVyIGRpc3RjbGVhbjoiIDsgXAorCSAgICAgICAkKGRpc3RjbGVhbmNoZWNrX2xpc3RmaWxlcykgOyBcCisJICAgICAgIGV4aXQgMTsgfSA+JjIKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiAkKEJVSUxUX1NPVVJDRVMpCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKSBjb25maWcuaAoraW5zdGFsbGRpcnM6CisJZm9yIGRpciBpbiAiJChERVNURElSKSQobGliZGlyKSIgIiQoREVTVERJUikkKGluY2x1ZGVkaXIpIiAiJChERVNURElSKSQobHRkbGluY2x1ZGVkaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6ICQoQlVJTFRfU09VUkNFUykKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChNT1NUTFlDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChNT1NUTFlDTEVBTkZJTEVTKQorCitjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKKwktdGVzdCAteiAiJChCVUlMVF9TT1VSQ0VTKSIgfHwgcm0gLWYgJChCVUlMVF9TT1VSQ0VTKQorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgXAorCWNsZWFuLW5vaW5zdExUTElCUkFSSUVTIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1mICQoYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMpCisJLXJtIC1yZiAkKERFUERJUikgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1oZHIgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWluY2x1ZGVIRUFERVJTIGluc3RhbGwtbHRkbGluY2x1ZGVIRUFERVJTCisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLWxpYkxUTElCUkFSSUVTCisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtZiAkKGFtX19DT05GSUdfRElTVENMRUFOX0ZJTEVTKQorCS1ybSAtcmYgJCh0b3Bfc3JjZGlyKS9hdXRvbTR0ZS5jYWNoZQorCS1ybSAtcmYgJChERVBESVIpIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbmNsdWRlSEVBREVSUyB1bmluc3RhbGwtbGliTFRMSUJSQVJJRVMgXAorCXVuaW5zdGFsbC1sdGRsaW5jbHVkZUhFQURFUlMKKworLk1BS0U6IGFsbCBjaGVjayBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gYW0tLXJlZnJlc2ggY2hlY2sgY2hlY2stYW0gY2xlYW4gXAorCWNsZWFuLWdlbmVyaWMgY2xlYW4tbGliTFRMSUJSQVJJRVMgY2xlYW4tbGlidG9vbCBcCisJY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgY3RhZ3MgZGlzdCBkaXN0LWFsbCBkaXN0LWJ6aXAyIFwKKwlkaXN0LWd6aXAgZGlzdC1sem1hIGRpc3Qtc2hhciBkaXN0LXRhclogZGlzdC14eiBkaXN0LXppcCBcCisJZGlzdGNoZWNrIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLWhkciBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0Y2xlYW5jaGVjayBcCisJZGlzdGRpciBkaXN0dW5pbnN0YWxsY2hlY2sgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBcCisJaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBcCisJaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBcCisJaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluY2x1ZGVIRUFERVJTIFwKKwlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbGliTFRMSUJSQVJJRVMgXAorCWluc3RhbGwtbHRkbGluY2x1ZGVIRUFERVJTIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIFwKKwlpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBcCisJaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtaW5jbHVkZUhFQURFUlMgXAorCXVuaW5zdGFsbC1saWJMVExJQlJBUklFUyB1bmluc3RhbGwtbHRkbGluY2x1ZGVIRUFERVJTCisKKworIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIgdG8gY3JlYXRlIGFuIDxhcmd6Lmg+IHdoZW4gdGhlIHN5c3RlbQorIyBkb2Vzbid0IGhhdmUgb25lIHRoYXQgd29ya3Mgd2l0aCB0aGUgZ2l2ZW4gY29tcGlsZXIuCithbGwtbG9jYWwgJChsaWJfT0JKRUNUUyk6ICQoQVJHWl9IKQorYXJnei5oOiBhcmd6Xy5oCisJJChta2luc3RhbGxkaXJzKSAuIAorCWNwICQoc3JjZGlyKS9hcmd6Xy5oICRALXQKKwltdiAkQC10ICRACisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9NYWtlZmlsZS5pbmMgYi9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvTWFrZWZpbGUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiOGRiNGUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvTWFrZWZpbGUuaW5jCkBAIC0wLDAgKzEsMTUzIEBACisjIyBNYWtlZmlsZS5pbmMgLS0gaW5jbHVkYWJsZSBNYWtlZmlsZS5hbSBzbmlwcGV0CisjIworIyMgICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIyAgIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDAzCisjIworIyMgICBOT1RFOiBUaGUgY2Fub25pY2FsIHNvdXJjZSBvZiB0aGlzIGZpbGUgaXMgbWFpbnRhaW5lZCB3aXRoIHRoZQorIyMgICBHTlUgTGlidG9vbCBwYWNrYWdlLiAgUmVwb3J0IGJ1Z3MgdG8gYnVnLWxpYnRvb2xAZ251Lm9yZy4KKyMjCisjIyBHTlUgTGlibHRkbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMjIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyMgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIyMKKyMjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMjIGlmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKKyMjIGlzIGJ1aWx0IHVzaW5nIEdOVSBsaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorIyMgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjIworIyMgR05VIExpYmx0ZGwgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMjCisjIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyR2VuZXJhbCBQdWJsaWMKKyMjIExpY2Vuc2UgYWxvbmcgd2l0aCBHTlUgTGlibHRkbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCBhCisjIyBjb3B5IGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwuaHRtbCwKKyMjIG9yIG9idGFpbmVkIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorIyMjIyMKKworIyMgRE8gTk9UIFJFTU9WRSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmRzIG9uIGl0CisKKyMgLUkkKHNyY2RpcikgaXMgbmVlZGVkIGZvciB1c2VyIHRoYXQgYnVpbHQgbGlibHRkbCB3aXRoIGEgc3ViLUF1dG9tYWtlCisjIChub3QgYXMgYSBzdWItcGFja2FnZSEpIHVzaW5nICdub3N0ZGluYyc6CitBTV9DUFBGTEFHUwkgICAgICAgKz0gLURMVF9DT05GSUdfSD0nPCQoTFRfQ09ORklHX0gpPicgXAorCQkJICAtRExUREwgLUkuIC1JJChzcmNkaXIpIC1JbGlibHRkbCBcCisJCQkgIC1JJChzcmNkaXIpL2xpYmx0ZGwgLUkkKHNyY2RpcikvbGlibHRkbC9saWJsdGRsCitBTV9MREZMQUdTCSAgICAgICArPSAtbm8tdW5kZWZpbmVkCitMVERMX1ZFUlNJT05fSU5GTwk9IC12ZXJzaW9uLWluZm8gOToyOjIKKworbm9pbnN0X0xUTElCUkFSSUVTCSs9ICQoTFRfRExMT0FERVJTKQorCitpZiBJTlNUQUxMX0xUREwKK2x0ZGxpbmNsdWRlZGlyCQk9ICQoaW5jbHVkZWRpcikvbGlibHRkbAorbHRkbGluY2x1ZGVfSEVBREVSUwk9IGxpYmx0ZGwvbGlibHRkbC9sdF9zeXN0ZW0uaCBcCisJCQkgIGxpYmx0ZGwvbGlibHRkbC9sdF9lcnJvci5oIFwKKwkJCSAgbGlibHRkbC9saWJsdGRsL2x0X2RsbG9hZGVyLmgKK2luY2x1ZGVfSEVBREVSUwkgICAgICAgKz0gbGlibHRkbC9sdGRsLmgKK2xpYl9MVExJQlJBUklFUwkgICAgICAgKz0gbGlibHRkbC9saWJsdGRsLmxhCitlbmRpZgorCitpZiBDT05WRU5JRU5DRV9MVERMCitub2luc3RfTFRMSUJSQVJJRVMgICAgICs9IGxpYmx0ZGwvbGlibHRkbGMubGEKK2VuZGlmCisKK2xpYmx0ZGxfbGlibHRkbF9sYV9TT1VSQ0VTID0gbGlibHRkbC9saWJsdGRsL2x0X19hbGxvYy5oIFwKKwkJCSAgbGlibHRkbC9saWJsdGRsL2x0X19kaXJlbnQuaCBcCisJCQkgIGxpYmx0ZGwvbGlibHRkbC9sdF9fZ2xpYmMuaCBcCisJCQkgIGxpYmx0ZGwvbGlibHRkbC9sdF9fcHJpdmF0ZS5oIFwKKwkJCSAgbGlibHRkbC9saWJsdGRsL2x0X19zdHJsLmggXAorCQkJICBsaWJsdGRsL2xpYmx0ZGwvbHRfZGxsb2FkZXIuaCBcCisJCQkgIGxpYmx0ZGwvbGlibHRkbC9sdF9lcnJvci5oIFwKKwkgICAgICAgICAgICAgICAgICBsaWJsdGRsL2xpYmx0ZGwvbHRfc3lzdGVtLmggXAorCQkJICBsaWJsdGRsL2xpYmx0ZGwvc2xpc3QuaCBcCisJCQkgIGxpYmx0ZGwvbG9hZGVycy9wcmVvcGVuLmMgXAorCQkJICBsaWJsdGRsL2x0X19hbGxvYy5jIFwKKwkJCSAgbGlibHRkbC9sdF9kbGxvYWRlci5jIFwKKwkJCSAgbGlibHRkbC9sdF9lcnJvci5jIFwKKwkJCSAgbGlibHRkbC9sdGRsLmMgXAorCQkJICBsaWJsdGRsL2x0ZGwuaCBcCisJCQkgIGxpYmx0ZGwvc2xpc3QuYworCitFWFRSQV9ESVNUCSAgICAgICArPSBsaWJsdGRsL2x0X19kaXJlbnQuYyBcCisJCQkgIGxpYmx0ZGwvbHRfX3N0cmwuYworCitsaWJsdGRsX2xpYmx0ZGxfbGFfQ1BQRkxBR1MJPSAtRExURExPUEVOPSQoTFRETE9QRU4pICQoQU1fQ1BQRkxBR1MpCitsaWJsdGRsX2xpYmx0ZGxfbGFfTERGTEFHUwk9ICQoQU1fTERGTEFHUykgJChMVERMX1ZFUlNJT05fSU5GTykgJChMVF9ETFBSRU9QRU4pCitsaWJsdGRsX2xpYmx0ZGxfbGFfTElCQURECT0gJChMVExJQk9CSlMpCitsaWJsdGRsX2xpYmx0ZGxfbGFfREVQRU5ERU5DSUVTCT0gJChMVF9ETExPQURFUlMpICQoTFRMSUJPQkpTKQorCitsaWJsdGRsX2xpYmx0ZGxjX2xhX1NPVVJDRVMJPSAkKGxpYmx0ZGxfbGlibHRkbF9sYV9TT1VSQ0VTKQorbGlibHRkbF9saWJsdGRsY19sYV9DUFBGTEFHUwk9IC1ETFRETE9QRU49JChMVERMT1BFTiljICQoQU1fQ1BQRkxBR1MpCitsaWJsdGRsX2xpYmx0ZGxjX2xhX0xERkxBR1MJPSAkKEFNX0xERkxBR1MpICQoTFRfRExQUkVPUEVOKQorbGlibHRkbF9saWJsdGRsY19sYV9MSUJBREQJPSAkKGxpYmx0ZGxfbGlibHRkbF9sYV9MSUJBREQpCitsaWJsdGRsX2xpYmx0ZGxjX2xhX0RFUEVOREVOQ0lFUz0gJChsaWJsdGRsX2xpYmx0ZGxfbGFfREVQRU5ERU5DSUVTKQorCisjIyBUaGUgbG9hZGVycyBhcmUgcHJlb3BlbmVkIGJ5IGxpYmx0ZGwsIGl0c2VsZiBhbHdheXMgYnVpbHQgZnJvbQorIyMgcGljLW9iamVjdHMgKGVpdGhlciBhcyBhIHNoYXJlZCBsaWJyYXJ5LCBvciBhIGNvbnZlbmllbmNlIGxpYnJhcnkpLAorIyMgc28gdGhlIGxvYWRlcnMgdGhlbXNlbHZlcyBtdXN0IGJlIG1hZGUgZnJvbSBwaWMtb2JqZWN0cyB0b28uICBXZQorIyMgdXNlIGNvbnZlbmllbmNlIGxpYnJhcmllcyBmb3IgdGhhdCBwdXJwb3NlOgorRVhUUkFfTFRMSUJSQVJJRVMJICAgICAgICs9IGxpYmx0ZGwvZGxvcGVuLmxhIFwKKwkJCQkgIGxpYmx0ZGwvZGxkX2xpbmsubGEgXAorCQkJCSAgbGlibHRkbC9keWxkLmxhIFwKKwkJCQkgIGxpYmx0ZGwvbG9hZF9hZGRfb24ubGEgXAorCQkJCSAgbGlibHRkbC9sb2FkbGlicmFyeS5sYSBcCisJCQkJICBsaWJsdGRsL3NobF9sb2FkLmxhCisKK2xpYmx0ZGxfZGxvcGVuX2xhX1NPVVJDRVMJPSBsaWJsdGRsL2xvYWRlcnMvZGxvcGVuLmMKK2xpYmx0ZGxfZGxvcGVuX2xhX0xERkxBR1MJPSAtbW9kdWxlIC1hdm9pZC12ZXJzaW9uCitsaWJsdGRsX2Rsb3Blbl9sYV9MSUJBREQgCT0gJChMSUJBRERfRExPUEVOKQorCitsaWJsdGRsX2RsZF9saW5rX2xhX1NPVVJDRVMJPSBsaWJsdGRsL2xvYWRlcnMvZGxkX2xpbmsuYworbGlibHRkbF9kbGRfbGlua19sYV9MREZMQUdTCT0gLW1vZHVsZSAtYXZvaWQtdmVyc2lvbgorbGlibHRkbF9kbGRfbGlua19sYV9MSUJBREQJPSAtbGRsZAorCitsaWJsdGRsX2R5bGRfbGFfU09VUkNFUwkJPSBsaWJsdGRsL2xvYWRlcnMvZHlsZC5jCitsaWJsdGRsX2R5bGRfbGFfTERGTEFHUwkJPSAtbW9kdWxlIC1hdm9pZC12ZXJzaW9uCisKK2xpYmx0ZGxfbG9hZF9hZGRfb25fbGFfU09VUkNFUwk9IGxpYmx0ZGwvbG9hZGVycy9sb2FkX2FkZF9vbi5jCitsaWJsdGRsX2xvYWRfYWRkX29uX2xhX0xERkxBR1MJPSAtbW9kdWxlIC1hdm9pZC12ZXJzaW9uCisKK2xpYmx0ZGxfbG9hZGxpYnJhcnlfbGFfU09VUkNFUwk9IGxpYmx0ZGwvbG9hZGVycy9sb2FkbGlicmFyeS5jCitsaWJsdGRsX2xvYWRsaWJyYXJ5X2xhX0xERkxBR1MJPSAtbW9kdWxlIC1hdm9pZC12ZXJzaW9uCisKK2xpYmx0ZGxfc2hsX2xvYWRfbGFfU09VUkNFUwk9IGxpYmx0ZGwvbG9hZGVycy9zaGxfbG9hZC5jCitsaWJsdGRsX3NobF9sb2FkX2xhX0xERkxBR1MJPSAtbW9kdWxlIC1hdm9pZC12ZXJzaW9uCitsaWJsdGRsX3NobF9sb2FkX2xhX0xJQkFERAk9ICQoTElCQUREX1NITF9MT0FEKQorCisjIyBNYWtlIHN1cmUgdGhlc2Ugd2lsbCBiZSBjbGVhbmVkIGV2ZW4gd2hlbiB0aGV5J3JlIG5vdCBidWlsdCBieSBkZWZhdWx0OgorQ0xFQU5GSUxFUwkJICAgICAgICs9IGxpYmx0ZGwvbGlibHRkbC5sYSBcCisJCQkJICBsaWJsdGRsL2xpYmx0ZGxjLmxhIFwKKwkJCQkgIGxpYmx0ZGwvbGliZGxsb2FkZXIubGEKKworIyMgQXV0b21ha2UtMS45LjYgZG9lc24ndCBjbGVhbiBzdWJkaXIgQUNfTElCT0JKIGNvbXBpbGVkIG9iamVjdHMKKyMjIGF1dG9tYXRpY2FsbHk6CitDTEVBTkZJTEVTCSAgICAgICArPSAkKExJQk9CSlMpICQoTFRMSUJPQkpTKQorCitFWFRSQV9ESVNUCSAgICAgICArPSBsaWJsdGRsL0NPUFlJTkcuTElCIFwKKwkJCSAgbGlibHRkbC9jb25maWd1cmUuYWMgXAorCQkJICBsaWJsdGRsL01ha2VmaWxlLmFtIFwKKwkJCSAgbGlibHRkbC9hY2xvY2FsLm00IFwKKwkJCSAgbGlibHRkbC9NYWtlZmlsZS5pbiBcCisJCQkgIGxpYmx0ZGwvY29uZmlndXJlIFwKKwkJCSAgbGlibHRkbC9jb25maWctaC5pbiBcCisJCQkgIGxpYmx0ZGwvUkVBRE1FCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgR251bGliIE1ha2VmaWxlLmFtIHNuaXBwZXRzICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworQlVJTFRfU09VUkNFUwkrPSBsaWJsdGRsLyQoQVJHWl9IKQorRVhUUkFfRElTVAkrPSBsaWJsdGRsL2FyZ3pfLmggXAorCQkgICBsaWJsdGRsL2FyZ3ouYworCisjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgYW4gPGFyZ3ouaD4gd2hlbiB0aGUgc3lzdGVtCisjIGRvZXNuJ3QgaGF2ZSBvbmUgdGhhdCB3b3JrcyB3aXRoIHRoZSBnaXZlbiBjb21waWxlci4KK2FsbC1sb2NhbCAkKGxpYl9PQkpFQ1RTKTogbGlibHRkbC8kKEFSR1pfSCkKK2xpYmx0ZGwvYXJnei5oOiBsaWJsdGRsL2FyZ3pfLmgKKwkkKG1raW5zdGFsbGRpcnMpIC4gbGlibHRkbC8KKwljcCAkKHNyY2RpcikvbGlibHRkbC9hcmd6Xy5oICRALXQKKwltdiAkQC10ICRACitNT1NUTFlDTEVBTkZJTEVTICs9IGxpYmx0ZGwvYXJnei5oIFwKKwkJICAgIGxpYmx0ZGwvYXJnei5oLXQKZGlmZiAtLWdpdCBhL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9SRUFETUUgYi9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YjFhZWEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvUkVBRE1FCkBAIC0wLDAgKzEsMjAgQEAKK1RoaXMgaXMgR05VIGxpYmx0ZGwsIGEgc3lzdGVtIGluZGVwZW5kZW50IGRsb3BlbiB3cmFwcGVyIGZvciBHTlUgbGlidG9vbC4KKworSXQgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBkbG9wZW4gaW50ZXJmYWNlczoKKyogZGxvcGVuIChTb2xhcmlzLCBMaW51eCBhbmQgdmFyaW91cyBCU0QgZmxhdm9ycykKKyogc2hsX2xvYWQgKEhQLVVYKQorKiBMb2FkTGlicmFyeSAoV2luMTYgYW5kIFdpbjMyKQorKiBsb2FkX2FkZF9vbiAoQmVPUykKKyogR05VIERMRCAoZW11bGF0ZXMgZHluYW1pYyBsaW5raW5nIGZvciBzdGF0aWMgbGlicmFyaWVzKQorKiBkeWxkIChkYXJ3aW4vTWFjIE9TIFgpCisqIGxpYnRvb2wncyBkbHByZW9wZW4KKy0tIAorICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBUaG9tYXMgVGFubmVyLCAxOTk5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorCitDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorYXJlIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0Citub3RpY2UgYW5kIHRoaXMgbm90aWNlIGFyZSBwcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgb2ZmZXJlZCBhcy1pcywKK3dpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQuCmRpZmYgLS1naXQgYS9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvYWNsb2NhbC5tNCBiL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9hY2xvY2FsLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZWVhYzkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvYWNsb2NhbC5tNApAQCAtMCwwICsxLDk1OCBAQAorIyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBhY2xvY2FsIDEuMTEuMSAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LAorIyAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworbTRfaWZuZGVmKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSwKKyAgW200X2NvcHkoW200X1BBQ0tBR0VfVkVSU0lPTl0sIFtBQ19BVVRPQ09ORl9WRVJTSU9OXSldKWRubAorbTRfaWYobTRfZGVmbihbQUNfQVVUT0NPTkZfVkVSU0lPTl0pLCBbMi42NV0sLAorW200X3dhcm5pbmcoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjY1LgorWW91IGhhdmUgYW5vdGhlciB2ZXJzaW9uIG9mIGF1dG9jb25mLiAgSXQgbWF5IHdvcmssIGJ1dCBpcyBub3QgZ3VhcmFudGVlZCB0by4KK0lmIHlvdSBoYXZlIHByb2JsZW1zLCB5b3UgbWF5IG5lZWQgdG8gcmVnZW5lcmF0ZSB0aGUgYnVpbGQgc3lzdGVtIGVudGlyZWx5LgorVG8gZG8gc28sIHVzZSB0aGUgcHJvY2VkdXJlIGRvY3VtZW50ZWQgYnkgdGhlIHBhY2thZ2UsIHR5cGljYWxseSBgYXV0b3JlY29uZicuXSldKQorCisjIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBBTV9BVVRPTUFLRV9WRVJTSU9OKFZFUlNJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXV0b21ha2UgWC5ZIHRyYWNlcyB0aGlzIG1hY3JvIHRvIGVuc3VyZSBhY2xvY2FsLm00IGhhcyBiZWVuCisjIGdlbmVyYXRlZCBmcm9tIHRoZSBtNCBmaWxlcyBhY2NvbXBhbnlpbmcgQXV0b21ha2UgWC5ZLgorIyAoVGhpcyBwcml2YXRlIG1hY3JvIHNob3VsZCBub3QgYmUgY2FsbGVkIG91dHNpZGUgdGhpcyBmaWxlLikKK0FDX0RFRlVOKFtBTV9BVVRPTUFLRV9WRVJTSU9OXSwKK1thbV9fYXBpX3ZlcnNpb249JzEuMTEnCitkbmwgU29tZSB1c2VycyBmaW5kIEFNX0FVVE9NQUtFX1ZFUlNJT04gYW5kIG1pc3Rha2UgaXQgZm9yIGEgd2F5IHRvCitkbmwgcmVxdWlyZSBzb21lIG1pbmltdW0gdmVyc2lvbi4gIFBvaW50IHRoZW0gdG8gdGhlIHJpZ2h0IG1hY3JvLgorbTRfaWYoWyQxXSwgWzEuMTEuMV0sIFtdLAorICAgICAgW0FDX0ZBVEFMKFtEbyBub3QgY2FsbCAkMCwgdXNlIEFNX0lOSVRfQVVUT01BS0UoWyQxXSkuXSldKWRubAorXSkKKworIyBfQU1fQVVUT0NPTkZfVkVSU0lPTihWRVJTSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBhY2xvY2FsIHRyYWNlcyB0aGlzIG1hY3JvIHRvIGZpbmQgdGhlIEF1dG9jb25mIHZlcnNpb24uCisjIFRoaXMgaXMgYSBwcml2YXRlIG1hY3JvIHRvby4gIFVzaW5nIG00X2RlZmluZSBzaW1wbGlmaWVzCisjIHRoZSBsb2dpYyBpbiBhY2xvY2FsLCB3aGljaCBjYW4gc2ltcGx5IGlnbm9yZSB0aGlzIGRlZmluaXRpb24uCittNF9kZWZpbmUoW19BTV9BVVRPQ09ORl9WRVJTSU9OXSwgW10pCisKKyMgQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENhbGwgQU1fQVVUT01BS0VfVkVSU0lPTiBhbmQgQU1fQVVUT01BS0VfVkVSU0lPTiBzbyB0aGV5IGNhbiBiZSB0cmFjZWQuCisjIFRoaXMgZnVuY3Rpb24gaXMgQUNfUkVRVUlSRWQgYnkgQU1fSU5JVF9BVVRPTUFLRS4KK0FDX0RFRlVOKFtBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OXSwKK1tBTV9BVVRPTUFLRV9WRVJTSU9OKFsxLjExLjFdKWRubAorbTRfaWZuZGVmKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSwKKyAgW200X2NvcHkoW200X1BBQ0tBR0VfVkVSU0lPTl0sIFtBQ19BVVRPQ09ORl9WRVJTSU9OXSldKWRubAorX0FNX0FVVE9DT05GX1ZFUlNJT04obTRfZGVmbihbQUNfQVVUT0NPTkZfVkVSU0lPTl0pKV0pCisKKyMgQU1fQVVYX0RJUl9FWFBBTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgRm9yIHByb2plY3RzIHVzaW5nIEFDX0NPTkZJR19BVVhfRElSKFtmb29dKSwgQXV0b2NvbmYgc2V0cworIyAkYWNfYXV4X2RpciB0byBgJHNyY2Rpci9mb28nLiAgSW4gb3RoZXIgcHJvamVjdHMsIGl0IGlzIHNldCB0bworIyBgJHNyY2RpcicsIGAkc3JjZGlyLy4uJywgb3IgYCRzcmNkaXIvLi4vLi4nLgorIworIyBPZiBjb3Vyc2UsIEF1dG9tYWtlIG11c3QgaG9ub3IgdGhpcyB2YXJpYWJsZSB3aGVuZXZlciBpdCBjYWxscyBhCisjIHRvb2wgZnJvbSB0aGUgYXV4aWxpYXJ5IGRpcmVjdG9yeS4gIFRoZSBwcm9ibGVtIGlzIHRoYXQgJHNyY2RpciAoYW5kCisjIHRoZXJlZm9yZSAkYWNfYXV4X2RpciBhcyB3ZWxsKSBjYW4gYmUgZWl0aGVyIGFic29sdXRlIG9yIHJlbGF0aXZlLAorIyBkZXBlbmRpbmcgb24gaG93IGNvbmZpZ3VyZSBpcyBydW4uICBUaGlzIGlzIHByZXR0eSBhbm5veWluZywgc2luY2UKKyMgaXQgbWFrZXMgJGFjX2F1eF9kaXIgcXVpdGUgdW51c2FibGUgaW4gc3ViZGlyZWN0b3JpZXM6IGluIHRoZSB0b3AKKyMgc291cmNlIGRpcmVjdG9yeSwgYW55IGZvcm0gd2lsbCB3b3JrIGZpbmUsIGJ1dCBpbiBzdWJkaXJlY3RvcmllcyBhCisjIHJlbGF0aXZlIHBhdGggbmVlZHMgdG8gYmUgYWRqdXN0ZWQgZmlyc3QuCisjCisjICRhY19hdXhfZGlyL21pc3NpbmcKKyMgICAgZmFpbHMgd2hlbiBjYWxsZWQgZnJvbSBhIHN1YmRpcmVjdG9yeSBpZiAkYWNfYXV4X2RpciBpcyByZWxhdGl2ZQorIyAkdG9wX3NyY2Rpci8kYWNfYXV4X2Rpci9taXNzaW5nCisjICAgIGZhaWxzIGlmICRhY19hdXhfZGlyIGlzIGFic29sdXRlLAorIyAgICBmYWlscyB3aGVuIGNhbGxlZCBmcm9tIGEgc3ViZGlyZWN0b3J5IGluIGEgVlBBVEggYnVpbGQgd2l0aAorIyAgICAgICAgICBhIHJlbGF0aXZlICRhY19hdXhfZGlyCisjCisjIFRoZSByZWFzb24gb2YgdGhlIGxhdHRlciBmYWlsdXJlIGlzIHRoYXQgJHRvcF9zcmNkaXIgYW5kICRhY19hdXhfZGlyCisjIGFyZSBib3RoIHByZWZpeGVkIGJ5ICRzcmNkaXIuICBJbiBhbiBpbi1zb3VyY2UgYnVpbGQgdGhpcyBpcyB1c3VhbGx5CisjIGhhcm1sZXNzIGJlY2F1c2UgJHNyY2RpciBpcyBgLicsIGJ1dCB0aGluZ3Mgd2lsbCBicm9rZSB3aGVuIHlvdQorIyBzdGFydCBhIFZQQVRIIGJ1aWxkIG9yIHVzZSBhbiBhYnNvbHV0ZSAkc3JjZGlyLgorIworIyBTbyB3ZSBjb3VsZCB1c2Ugc29tZXRoaW5nIHNpbWlsYXIgdG8gJHRvcF9zcmNkaXIvJGFjX2F1eF9kaXIvbWlzc2luZywKKyMgaWZmIHdlIHN0cmlwIHRoZSBsZWFkaW5nICRzcmNkaXIgZnJvbSAkYWNfYXV4X2Rpci4gIFRoYXQgd291bGQgYmU6CisjICAgYW1fYXV4X2Rpcj0nXCQodG9wX3NyY2RpcikvJ2BleHByICIkYWNfYXV4X2RpciIgOiAiJHNyY2Rpci8vKlwoLipcKSJgCisjIGFuZCB0aGVuIHdlIHdvdWxkIGRlZmluZSAkTUlTU0lORyBhcworIyAgIE1JU1NJTkc9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9taXNzaW5nIgorIyBUaGlzIHdpbGwgd29yayBhcyBsb25nIGFzIE1JU1NJTkcgaXMgbm90IGNhbGxlZCBmcm9tIGNvbmZpZ3VyZSwgYmVjYXVzZQorIyB1bmZvcnR1bmF0ZWx5ICQodG9wX3NyY2RpcikgaGFzIG5vIG1lYW5pbmcgaW4gY29uZmlndXJlLgorIyBIb3dldmVyIHRoZXJlIGFyZSBvdGhlciB2YXJpYWJsZXMsIGxpa2UgQ0MsIHdoaWNoIGFyZSBvZnRlbiB1c2VkIGluCisjIGNvbmZpZ3VyZSwgYW5kIGNvdWxkIHRoZXJlZm9yZSBub3QgdXNlIHRoaXMgImZpeGVkIiAkYWNfYXV4X2Rpci4KKyMKKyMgQW5vdGhlciBzb2x1dGlvbiwgdXNlZCBoZXJlLCBpcyB0byBhbHdheXMgZXhwYW5kICRhY19hdXhfZGlyIHRvIGFuCisjIGFic29sdXRlIFBBVEguICBUaGUgZHJhd2JhY2sgaXMgdGhhdCB1c2luZyBhYnNvbHV0ZSBwYXRocyBwcmV2ZW50IGEKKyMgY29uZmlndXJlZCB0cmVlIHRvIGJlIG1vdmVkIHdpdGhvdXQgcmVjb25maWd1cmF0aW9uLgorCitBQ19ERUZVTihbQU1fQVVYX0RJUl9FWFBBTkRdLAorW2RubCBSZWx5IG9uIGF1dG9jb25mIHRvIHNldCB1cCBDRFBBVEggcHJvcGVybHkuCitBQ19QUkVSRVEoWzIuNTBdKWRubAorIyBleHBhbmQgJGFjX2F1eF9kaXIgdG8gYW4gYWJzb2x1dGUgcGF0aAorYW1fYXV4X2Rpcj1gY2QgJGFjX2F1eF9kaXIgJiYgcHdkYAorXSkKKworIyBBTV9DT05ESVRJT05BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5NywgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOAorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA5CisKKyMgQU1fQ09ORElUSU9OQUwoTkFNRSwgU0hFTEwtQ09ORElUSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBhIGNvbmRpdGlvbmFsLgorQUNfREVGVU4oW0FNX0NPTkRJVElPTkFMXSwKK1tBQ19QUkVSRVEoMi41MilkbmwKKyBpZmVsc2UoWyQxXSwgW1RSVUVdLCAgW0FDX0ZBVEFMKFskMDogaW52YWxpZCBjb25kaXRpb246ICQxXSldLAorCVskMV0sIFtGQUxTRV0sIFtBQ19GQVRBTChbJDA6IGludmFsaWQgY29uZGl0aW9uOiAkMV0pXSlkbmwKK0FDX1NVQlNUKFskMV9UUlVFXSlkbmwKK0FDX1NVQlNUKFskMV9GQUxTRV0pZG5sCitfQU1fU1VCU1RfTk9UTUFLRShbJDFfVFJVRV0pZG5sCitfQU1fU1VCU1RfTk9UTUFLRShbJDFfRkFMU0VdKWRubAorbTRfZGVmaW5lKFtfQU1fQ09ORF9WQUxVRV8kMV0sIFskMl0pZG5sCitpZiAkMjsgdGhlbgorICAkMV9UUlVFPQorICAkMV9GQUxTRT0nIycKK2Vsc2UKKyAgJDFfVFJVRT0nIycKKyAgJDFfRkFMU0U9CitmaQorQUNfQ09ORklHX0NPTU1BTkRTX1BSRSgKK1tpZiB0ZXN0IC16ICIkeyQxX1RSVUV9IiAmJiB0ZXN0IC16ICIkeyQxX0ZBTFNFfSI7IHRoZW4KKyAgQUNfTVNHX0VSUk9SKFtbY29uZGl0aW9uYWwgIiQxIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5Ll1dKQorZmldKV0pCisKKyMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA5CisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDEwCisKKyMgVGhlcmUgYXJlIGEgZmV3IGRpcnR5IGhhY2tzIGJlbG93IHRvIGF2b2lkIGxldHRpbmcgYEFDX1BST0dfQ0MnIGJlCisjIHdyaXR0ZW4gaW4gY2xlYXIsIGluIHdoaWNoIGNhc2UgYXV0b21ha2UsIHdoZW4gcmVhZGluZyBhY2xvY2FsLm00LAorIyB3aWxsIHRoaW5rIGl0IHNlZXMgYSAqdXNlKiwgYW5kIHRoZXJlZm9yZSB3aWxsIHRyaWdnZXIgYWxsIGl0J3MKKyMgQyBzdXBwb3J0IG1hY2hpbmVyeS4gIEFsc28gbm90ZSB0aGF0IGl0IG1lYW5zIHRoYXQgYXV0b3NjYW4sIHNlZWluZworIyBDQyBldGMuIGluIHRoZSBNYWtlZmlsZSwgd2lsbCBhc2sgZm9yIGFuIEFDX1BST0dfQ0MgdXNlLi4uCisKKworIyBfQU1fREVQRU5ERU5DSUVTKE5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VlIGhvdyB0aGUgY29tcGlsZXIgaW1wbGVtZW50cyBkZXBlbmRlbmN5IGNoZWNraW5nLgorIyBOQU1FIGlzICJDQyIsICJDWFgiLCAiR0NKIiwgb3IgIk9CSkMiLgorIyBXZSB0cnkgYSBmZXcgdGVjaG5pcXVlcyBhbmQgdXNlIHRoYXQgdG8gc2V0IGEgc2luZ2xlIGNhY2hlIHZhcmlhYmxlLgorIworIyBXZSBkb24ndCBBQ19SRVFVSVJFIHRoZSBjb3JyZXNwb25kaW5nIEFDX1BST0dfQ0Mgc2luY2UgdGhlIGxhdHRlciB3YXMKKyMgbW9kaWZpZWQgdG8gaW52b2tlIF9BTV9ERVBFTkRFTkNJRVMoQ0MpOyB3ZSB3b3VsZCBoYXZlIGEgY2lyY3VsYXIKKyMgZGVwZW5kZW5jeSwgYW5kIGdpdmVuIHRoYXQgdGhlIHVzZXIgaXMgbm90IGV4cGVjdGVkIHRvIHJ1biB0aGlzIG1hY3JvLAorIyBqdXN0IHJlbHkgb24gQUNfUFJPR19DQy4KK0FDX0RFRlVOKFtfQU1fREVQRU5ERU5DSUVTXSwKK1tBQ19SRVFVSVJFKFtBTV9TRVRfREVQRElSXSlkbmwKK0FDX1JFUVVJUkUoW0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTXSlkbmwKK0FDX1JFUVVJUkUoW0FNX01BS0VfSU5DTFVERV0pZG5sCitBQ19SRVFVSVJFKFtBTV9ERVBfVFJBQ0tdKWRubAorCitpZmVsc2UoWyQxXSwgQ0MsICAgW2RlcGNjPSIkQ0MiICAgYW1fY29tcGlsZXJfbGlzdD1dLAorICAgICAgIFskMV0sIENYWCwgIFtkZXBjYz0iJENYWCIgIGFtX2NvbXBpbGVyX2xpc3Q9XSwKKyAgICAgICBbJDFdLCBPQkpDLCBbZGVwY2M9IiRPQkpDIiBhbV9jb21waWxlcl9saXN0PSdnY2MzIGdjYyddLAorICAgICAgIFskMV0sIFVQQywgIFtkZXBjYz0iJFVQQyIgIGFtX2NvbXBpbGVyX2xpc3Q9XSwKKyAgICAgICBbJDFdLCBHQ0osICBbZGVwY2M9IiRHQ0oiICBhbV9jb21waWxlcl9saXN0PSdnY2MzIGdjYyddLAorICAgICAgICAgICAgICAgICAgIFtkZXBjYz0iJCQxIiAgIGFtX2NvbXBpbGVyX2xpc3Q9XSkKKworQUNfQ0FDSEVfQ0hFQ0soW2RlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjXSwKKyAgICAgICAgICAgICAgIFthbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZV0sCitbaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgorICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCisgICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCisgICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCisgICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCBgRCcgLS0gYmVjYXVzZSBgLU1EJyBtZWFucyBgcHV0IHRoZSBvdXRwdXQKKyAgIyBpbiBEJy4KKyAgbWtkaXIgY29uZnRlc3QuZGlyCisgICMgQ29weSBkZXBjb21wIHRvIHN1YmRpciBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b24ndCBmaW5kIGl0IGlmIHdlJ3JlCisgICMgdXNpbmcgYSByZWxhdGl2ZSBkaXJlY3RvcnkuCisgIGNwICIkYW1fZGVwY29tcCIgY29uZnRlc3QuZGlyCisgIGNkIGNvbmZ0ZXN0LmRpcgorICAjIFdlIHdpbGwgYnVpbGQgb2JqZWN0cyBhbmQgZGVwZW5kZW5jaWVzIGluIGEgc3ViZGlyZWN0b3J5IGJlY2F1c2UKKyAgIyBpdCBoZWxwcyB0byBkZXRlY3QgaW5hcHBsaWNhYmxlIGRlcGVuZGVuY3kgbW9kZXMuICBGb3IgaW5zdGFuY2UKKyAgIyBib3RoIFRydTY0J3MgY2MgYW5kIElDQyBzdXBwb3J0IC1NRCB0byBvdXRwdXQgZGVwZW5kZW5jaWVzIGFzIGEKKyAgIyBzaWRlIGVmZmVjdCBvZiBjb21waWxhdGlvbiwgYnV0IElDQyB3aWxsIHB1dCB0aGUgZGVwZW5kZW5jaWVzIGluCisgICMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdoaWxlIFRydTY0IHdpbGwgcHV0IHRoZW0gaW4gdGhlIG9iamVjdAorICAjIGRpcmVjdG9yeS4KKyAgbWtkaXIgc3ViCisKKyAgYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgorICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gWydzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJ10gPCAuL2RlcGNvbXBgCisgIGZpCisgIGFtX191bml2ZXJzYWw9ZmFsc2UKKyAgbTRfY2FzZShbJDFdLCBbQ0NdLAorICAgIFtjYXNlICIgJGRlcGNjICIgaW4gIygKKyAgICAgKlwgLWFyY2hcICpcIC1hcmNoXCAqKSBhbV9fdW5pdmVyc2FsPXRydWUgOzsKKyAgICAgZXNhY10sCisgICAgW0NYWF0sCisgICAgW2Nhc2UgIiAkZGVwY2MgIiBpbiAjKAorICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworICAgICBlc2FjXSkKKworICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KKyAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKKyAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCisgICAgIyB3ZSBzaG91bGQgbm90IGNob29zZSBhIGRlcGNvbXAgbW9kZSB3aGljaCBpcyBjb25mdXNlZCBieSB0aGlzLgorICAgICMKKyAgICAjIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlc2UgZmlsZXMgZm9yIGVhY2ggdGVzdCwgYXMgdGhlIGNvbXBpbGVyIG1heQorICAgICMgb3ZlcndyaXRlIHNvbWUgb2YgdGhlbSB3aGVuIHRlc3Rpbmcgd2l0aCBvYnNjdXJlIGNvbW1hbmQgbGluZXMuCisgICAgIyBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCB0aGUgQUlYIEMgY29tcGlsZXIuCisgICAgOiA+IHN1Yi9jb25mdGVzdC5jCisgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCisgICAgICBlY2hvICcjaW5jbHVkZSAiY29uZnRzdCckaScuaCInID4+IHN1Yi9jb25mdGVzdC5jCisgICAgICAjIFVzaW5nIGA6ID4gc3ViL2NvbmZ0c3QkaS5oJyBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAorICAgICAgIyBTb2xhcmlzIDgncyB7L3Vzcix9L2Jpbi9zaC4KKyAgICAgIHRvdWNoIHN1Yi9jb25mdHN0JGkuaAorICAgIGRvbmUKKyAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCisKKyAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKKyAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQorICAgICMgaGFuZGxlIGAtTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLiAgQWxzbywgc29tZSBJbnRlbAorICAgICMgdmVyc2lvbnMgaGFkIHRyb3VibGUgd2l0aCBvdXRwdXQgaW4gc3ViZGlycworICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgYW1fX21pbnVzX29iaj0iLW8gJGFtX19vYmoiCisgICAgY2FzZSAkZGVwbW9kZSBpbgorICAgIGdjYykKKyAgICAgICMgVGhpcyBkZXBtb2RlIGNhdXNlcyBhIGNvbXBpbGVyIHJhY2UgaW4gdW5pdmVyc2FsIG1vZGUuCisgICAgICB0ZXN0ICIkYW1fX3VuaXZlcnNhbCIgPSBmYWxzZSB8fCBjb250aW51ZQorICAgICAgOzsKKyAgICBub3NpZGVlZmZlY3QpCisgICAgICAjIGFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKKyAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQKKyAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciID0geHllczsgdGhlbgorCWNvbnRpbnVlCisgICAgICBlbHNlCisJYnJlYWsKKyAgICAgIGZpCisgICAgICA7OworICAgIG1zdmlzdWFsY3BwIHwgbXN2Y21zeXMpCisgICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayBgLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcworICAgICAgIyBub3QgcnVuIHlldC4gIFRoZXNlIGRlcG1vZGVzIGFyZSBsYXRlIGVub3VnaCBpbiB0aGUgZ2FtZSwgYW5kCisgICAgICAjIHNvIHdlYWsgdGhhdCB0aGVpciBmdW5jdGlvbmluZyBzaG91bGQgbm90IGJlIGltcGFjdGVkLgorICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQorICAgICAgYW1fX21pbnVzX29iaj0KKyAgICAgIDs7CisgICAgbm9uZSkgYnJlYWsgOzsKKyAgICBlc2FjCisgICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCisgICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD0kYW1fX29iaiBcCisgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwICRhbV9fb2JqIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCisgICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQorICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCisgICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAorICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCisgICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKKyAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgICAgIGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPSRkZXBtb2RlCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKKworICBjZCAuLgorICBybSAtcmYgY29uZnRlc3QuZGlyCitlbHNlCisgIGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKK2ZpCitdKQorQUNfU1VCU1QoWyQxREVQTU9ERV0sIFtkZXBtb2RlPSRhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZV0pCitBTV9DT05ESVRJT05BTChbYW1fX2Zhc3RkZXAkMV0sIFsKKyAgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vIFwKKyAgJiYgdGVzdCAiJGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzNdKQorXSkKKworCisjIEFNX1NFVF9ERVBESVIKKyMgLS0tLS0tLS0tLS0tLQorIyBDaG9vc2UgYSBkaXJlY3RvcnkgbmFtZSBmb3IgZGVwZW5kZW5jeSBmaWxlcy4KKyMgVGhpcyBtYWNybyBpcyBBQ19SRVFVSVJFZCBpbiBfQU1fREVQRU5ERU5DSUVTCitBQ19ERUZVTihbQU1fU0VUX0RFUERJUl0sCitbQUNfUkVRVUlSRShbQU1fU0VUX0xFQURJTkdfRE9UXSlkbmwKK0FDX1NVQlNUKFtERVBESVJdLCBbIiR7YW1fX2xlYWRpbmdfZG90fWRlcHMiXSlkbmwKK10pCisKKworIyBBTV9ERVBfVFJBQ0sKKyMgLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQU1fREVQX1RSQUNLXSwKK1tBQ19BUkdfRU5BQkxFKGRlcGVuZGVuY3ktdHJhY2tpbmcsCitbICAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyAgc3BlZWRzIHVwIG9uZS10aW1lIGJ1aWxkCisgIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgICBkbyBub3QgcmVqZWN0IHNsb3cgZGVwZW5kZW5jeSBleHRyYWN0b3JzXSkKK2lmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgorICBhbV9kZXBjb21wPSIkYWNfYXV4X2Rpci9kZXBjb21wIgorICBBTURFUEJBQ0tTTEFTSD0nXCcKK2ZpCitBTV9DT05ESVRJT05BTChbQU1ERVBdLCBbdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vXSkKK0FDX1NVQlNUKFtBTURFUEJBQ0tTTEFTSF0pZG5sCitfQU1fU1VCU1RfTk9UTUFLRShbQU1ERVBCQUNLU0xBU0hdKWRubAorXSkKKworIyBHZW5lcmF0ZSBjb2RlIHRvIHNldCB1cCBkZXBlbmRlbmN5IHRyYWNraW5nLiAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwOAorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjc2VyaWFsIDUKKworIyBfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTXSwKK1t7CisgICMgQXV0b2NvbmYgMi42MiBxdW90ZXMgLS1maWxlIGFyZ3VtZW50cyBmb3IgZXZhbCwgYnV0IG5vdCB3aGVuIGZpbGVzCisgICMgYXJlIGxpc3RlZCB3aXRob3V0IC0tZmlsZS4gIExldCdzIHBsYXkgc2FmZSBhbmQgb25seSBlbmFibGUgdGhlIGV2YWwKKyAgIyBpZiB3ZSBkZXRlY3QgdGhlIHF1b3RpbmcuCisgIGNhc2UgJENPTkZJR19GSUxFUyBpbgorICAqXCcqKSBldmFsIHNldCB4ICIkQ09ORklHX0ZJTEVTIiA7OworICAqKSAgIHNldCB4ICRDT05GSUdfRklMRVMgOzsKKyAgZXNhYworICBzaGlmdAorICBmb3IgbWYKKyAgZG8KKyAgICAjIFN0cmlwIE1GIHNvIHdlIGVuZCB1cCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgorICAgIG1mPWBlY2hvICIkbWYiIHwgc2VkIC1lICdzLzouKiQvLydgCisgICAgIyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYW4gQXV0b21ha2UgZ2VuZXJhdGVkIE1ha2VmaWxlIG9yIG5vdC4KKyAgICAjIFdlIHVzZWQgdG8gbWF0Y2ggb25seSB0aGUgZmlsZXMgbmFtZWQgYE1ha2VmaWxlLmluJywgYnV0CisgICAgIyBzb21lIHBlb3BsZSByZW5hbWUgdGhlbTsgc28gaW5zdGVhZCB3ZSBsb29rIGF0IHRoZSBmaWxlIGNvbnRlbnQuCisgICAgIyBHcmVwJ2luZyB0aGUgZmlyc3QgbGluZSBpcyBub3QgZW5vdWdoOiBzb21lIHBlb3BsZSBwb3N0LXByb2Nlc3MKKyAgICAjIGVhY2ggTWFrZWZpbGUuaW4gYW5kIGFkZCBhIG5ldyBsaW5lIG9uIHRvcCBvZiBlYWNoIGZpbGUgdG8gc2F5IHNvLgorICAgICMgR3JlcCdpbmcgdGhlIHdob2xlIGZpbGUgaXMgbm90IGdvb2QgZWl0aGVyOiBBSVggZ3JlcCBoYXMgYSBsaW5lCisgICAgIyBsaW1pdCBvZiAyMDQ4LCBidXQgYWxsIHNlZCdzIHdlIGtub3cgaGF2ZSB1bmRlcnN0YW5kIGF0IGxlYXN0IDQwMDAuCisgICAgaWYgc2VkIC1uICdzLF4jLipnZW5lcmF0ZWQgYnkgYXV0b21ha2UuKixYLHAnICIkbWYiIHwgZ3JlcCBYID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgZGlycGFydD1gQVNfRElSTkFNRSgiJG1mIilgCisgICAgZWxzZQorICAgICAgY29udGludWUKKyAgICBmaQorICAgICMgRXh0cmFjdCB0aGUgZGVmaW5pdGlvbiBvZiBERVBESVIsIGFtX19pbmNsdWRlLCBhbmQgYW1fX3F1b3RlCisgICAgIyBmcm9tIHRoZSBNYWtlZmlsZSB3aXRob3V0IHJ1bm5pbmcgYG1ha2UnLgorICAgIERFUERJUj1gc2VkIC1uICdzL15ERVBESVIgPSAvL3AnIDwgIiRtZiJgCisgICAgdGVzdCAteiAiJERFUERJUiIgJiYgY29udGludWUKKyAgICBhbV9faW5jbHVkZT1gc2VkIC1uICdzL15hbV9faW5jbHVkZSA9IC8vcCcgPCAiJG1mImAKKyAgICB0ZXN0IC16ICJhbV9faW5jbHVkZSIgJiYgY29udGludWUKKyAgICBhbV9fcXVvdGU9YHNlZCAtbiAncy9eYW1fX3F1b3RlID0gLy9wJyA8ICIkbWYiYAorICAgICMgV2hlbiB1c2luZyBhbnNpMmtuciwgVSBtYXkgYmUgZW1wdHkgb3IgYW4gdW5kZXJzY29yZTsgZXhwYW5kIGl0CisgICAgVT1gc2VkIC1uICdzL15VID0gLy9wJyA8ICIkbWYiYAorICAgICMgRmluZCBhbGwgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZXMsIHRoZXkgYXJlIGluY2x1ZGVkIGZpbGVzIHdpdGgKKyAgICAjICQoREVQRElSKSBpbiB0aGVpciBuYW1lcy4gIFdlIGludm9rZSBzZWQgdHdpY2UgYmVjYXVzZSBpdCBpcyB0aGUKKyAgICAjIHNpbXBsZXN0IGFwcHJvYWNoIHRvIGNoYW5naW5nICQoREVQRElSKSB0byBpdHMgYWN0dWFsIHZhbHVlIGluIHRoZQorICAgICMgZXhwYW5zaW9uLgorICAgIGZvciBmaWxlIGluIGBzZWQgLW4gIgorICAgICAgcy9eJGFtX19pbmNsdWRlICRhbV9fcXVvdGVcKC4qKERFUERJUikuKlwpJGFtX19xdW90ZSInJC9cMS9wJyA8IiRtZiIgfCBcCisJIHNlZCAtZSAncy9cJChERVBESVIpLyciJERFUERJUiInL2cnIC1lICdzL1wkVS8nIiRVIicvZydgOyBkbworICAgICAgIyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlzdHMuCisgICAgICB0ZXN0IC1mICIkZGlycGFydC8kZmlsZSIgJiYgY29udGludWUKKyAgICAgIGZkaXI9YEFTX0RJUk5BTUUoWyIkZmlsZSJdKWAKKyAgICAgIEFTX01LRElSX1AoWyRkaXJwYXJ0LyRmZGlyXSkKKyAgICAgICMgZWNobyAiY3JlYXRpbmcgJGRpcnBhcnQvJGZpbGUiCisgICAgICBlY2hvICcjIGR1bW15JyA+ICIkZGlycGFydC8kZmlsZSIKKyAgICBkb25lCisgIGRvbmUKK30KK10pIyBfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFMKKworCisjIEFNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgbWFjcm8gc2hvdWxkIG9ubHkgYmUgaW52b2tlZCBvbmNlIC0tIHVzZSB2aWEgQUNfUkVRVUlSRS4KKyMKKyMgVGhpcyBjb2RlIGlzIG9ubHkgcmVxdWlyZWQgd2hlbiBhdXRvbWF0aWMgZGVwZW5kZW5jeSB0cmFja2luZworIyBpcyBlbmFibGVkLiAgRklYTUUuICBUaGlzIGNyZWF0ZXMgZWFjaCBgLlAnIGZpbGUgdGhhdCB3ZSB3aWxsCisjIG5lZWQgaW4gb3JkZXIgdG8gYm9vdHN0cmFwIHRoZSBkZXBlbmRlbmN5IGhhbmRsaW5nIGNvZGUuCitBQ19ERUZVTihbQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdLAorW0FDX0NPTkZJR19DT01NQU5EUyhbZGVwZmlsZXNdLAorICAgICBbdGVzdCB4IiRBTURFUF9UUlVFIiAhPSB4IiIgfHwgX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTXSwKKyAgICAgW0FNREVQX1RSVUU9IiRBTURFUF9UUlVFIiBhY19hdXhfZGlyPSIkYWNfYXV4X2RpciJdKQorXSkKKworIyBEbyBhbGwgdGhlIHdvcmsgZm9yIEF1dG9tYWtlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwKKyMgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCAxNgorCisjIFRoaXMgbWFjcm8gYWN0dWFsbHkgZG9lcyB0b28gbXVjaC4gIFNvbWUgY2hlY2tzIGFyZSBvbmx5IG5lZWRlZCBpZgorIyB5b3VyIHBhY2thZ2UgZG9lcyBjZXJ0YWluIHRoaW5ncy4gIEJ1dCB0aGlzIGlzbid0IHJlYWxseSBhIGJpZyBkZWFsLgorCisjIEFNX0lOSVRfQVVUT01BS0UoUEFDS0FHRSwgVkVSU0lPTiwgW05PLURFRklORV0pCisjIEFNX0lOSVRfQVVUT01BS0UoW09QVElPTlNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGUgY2FsbCB3aXRoIFBBQ0tBR0UgYW5kIFZFUlNJT04gYXJndW1lbnRzIGlzIHRoZSBvbGQgc3R5bGUKKyMgY2FsbCAocHJlIGF1dG9jb25mLTIuNTApLCB3aGljaCBpcyBiZWluZyBwaGFzZWQgb3V0LiAgUEFDS0FHRQorIyBhbmQgVkVSU0lPTiBzaG91bGQgbm93IGJlIHBhc3NlZCB0byBBQ19JTklUIGFuZCByZW1vdmVkIGZyb20KKyMgdGhlIGNhbGwgdG8gQU1fSU5JVF9BVVRPTUFLRS4KKyMgV2Ugc3VwcG9ydCBib3RoIGNhbGwgc3R5bGVzIGZvciB0aGUgdHJhbnNpdGlvbi4gIEFmdGVyCisjIHRoZSBuZXh0IEF1dG9tYWtlIHJlbGVhc2UsIEF1dG9jb25mIGNhbiBtYWtlIHRoZSBBQ19JTklUCisjIGFyZ3VtZW50cyBtYW5kYXRvcnksIGFuZCB0aGVuIHdlIGNhbiBkZXBlbmQgb24gYSBuZXcgQXV0b2NvbmYKKyMgcmVsZWFzZSBhbmQgZHJvcCB0aGUgb2xkIGNhbGwgc3VwcG9ydC4KK0FDX0RFRlVOKFtBTV9JTklUX0FVVE9NQUtFXSwKK1tBQ19QUkVSRVEoWzIuNjJdKWRubAorZG5sIEF1dG9jb25mIHdhbnRzIHRvIGRpc2FsbG93IEFNXyBuYW1lcy4gIFdlIGV4cGxpY2l0bHkgYWxsb3cKK2RubCB0aGUgb25lcyB3ZSBjYXJlIGFib3V0LgorbTRfcGF0dGVybl9hbGxvdyhbXkFNX1tBLVpdK0ZMQUdTJF0pZG5sCitBQ19SRVFVSVJFKFtBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfSU5TVEFMTF0pZG5sCitpZiB0ZXN0ICJgY2QgJHNyY2RpciAmJiBwd2RgIiAhPSAiYHB3ZGAiOyB0aGVuCisgICMgVXNlIC1JJChzcmNkaXIpIG9ubHkgd2hlbiAkKHNyY2RpcikgIT0gLiwgc28gdGhhdCBtYWtlJ3Mgb3V0cHV0CisgICMgaXMgbm90IHBvbGx1dGVkIHdpdGggcmVwZWF0ZWQgIi1JLiIKKyAgQUNfU1VCU1QoW2FtX19pc3JjXSwgWycgLUkkKHNyY2RpciknXSlfQU1fU1VCU1RfTk9UTUFLRShbYW1fX2lzcmNdKWRubAorICAjIHRlc3QgdG8gc2VlIGlmIHNyY2RpciBhbHJlYWR5IGNvbmZpZ3VyZWQKKyAgaWYgdGVzdCAtZiAkc3JjZGlyL2NvbmZpZy5zdGF0dXM7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoW3NvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkOyBydW4gIm1ha2UgZGlzdGNsZWFuIiB0aGVyZSBmaXJzdF0pCisgIGZpCitmaQorCisjIHRlc3Qgd2hldGhlciB3ZSBoYXZlIGN5Z3BhdGgKK2lmIHRlc3QgLXogIiRDWUdQQVRIX1ciOyB0aGVuCisgIGlmIChjeWdwYXRoIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIENZR1BBVEhfVz0nY3lncGF0aCAtdycKKyAgZWxzZQorICAgIENZR1BBVEhfVz1lY2hvCisgIGZpCitmaQorQUNfU1VCU1QoW0NZR1BBVEhfV10pCisKKyMgRGVmaW5lIHRoZSBpZGVudGl0eSBvZiB0aGUgcGFja2FnZS4KK2RubCBEaXN0aW5ndWlzaCBiZXR3ZWVuIG9sZC1zdHlsZSBhbmQgbmV3LXN0eWxlIGNhbGxzLgorbTRfaWZ2YWwoWyQyXSwKK1ttNF9pZnZhbChbJDNdLCBbX0FNX1NFVF9PUFRJT04oW25vLWRlZmluZV0pXSlkbmwKKyBBQ19TVUJTVChbUEFDS0FHRV0sIFskMV0pZG5sCisgQUNfU1VCU1QoW1ZFUlNJT05dLCBbJDJdKV0sCitbX0FNX1NFVF9PUFRJT05TKFskMV0pZG5sCitkbmwgRGlhZ25vc2Ugb2xkLXN0eWxlIEFDX0lOSVQgd2l0aCBuZXctc3R5bGUgQU1fQVVUT01BS0VfSU5JVC4KK200X2lmKG00X2lmZGVmKFtBQ19QQUNLQUdFX05BTUVdLCAxKW00X2lmZGVmKFtBQ19QQUNLQUdFX1ZFUlNJT05dLCAxKSwgMTEsLAorICBbbTRfZmF0YWwoW0FDX0lOSVQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHBhY2thZ2UgYW5kIHZlcnNpb24gYXJndW1lbnRzXSldKWRubAorIEFDX1NVQlNUKFtQQUNLQUdFXSwgWydBQ19QQUNLQUdFX1RBUk5BTUUnXSlkbmwKKyBBQ19TVUJTVChbVkVSU0lPTl0sIFsnQUNfUEFDS0FHRV9WRVJTSU9OJ10pXSlkbmwKKworX0FNX0lGX09QVElPTihbbm8tZGVmaW5lXSwsCitbQUNfREVGSU5FX1VOUVVPVEVEKFBBQ0tBR0UsICIkUEFDS0FHRSIsIFtOYW1lIG9mIHBhY2thZ2VdKQorIEFDX0RFRklORV9VTlFVT1RFRChWRVJTSU9OLCAiJFZFUlNJT04iLCBbVmVyc2lvbiBudW1iZXIgb2YgcGFja2FnZV0pXSlkbmwKKworIyBTb21lIHRvb2xzIEF1dG9tYWtlIG5lZWRzLgorQUNfUkVRVUlSRShbQU1fU0FOSVRZX0NIRUNLXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0FSR19QUk9HUkFNXSlkbmwKK0FNX01JU1NJTkdfUFJPRyhBQ0xPQ0FMLCBhY2xvY2FsLSR7YW1fX2FwaV92ZXJzaW9ufSkKK0FNX01JU1NJTkdfUFJPRyhBVVRPQ09ORiwgYXV0b2NvbmYpCitBTV9NSVNTSU5HX1BST0coQVVUT01BS0UsIGF1dG9tYWtlLSR7YW1fX2FwaV92ZXJzaW9ufSkKK0FNX01JU1NJTkdfUFJPRyhBVVRPSEVBREVSLCBhdXRvaGVhZGVyKQorQU1fTUlTU0lOR19QUk9HKE1BS0VJTkZPLCBtYWtlaW5mbykKK0FDX1JFUVVJUkUoW0FNX1BST0dfSU5TVEFMTF9TSF0pZG5sCitBQ19SRVFVSVJFKFtBTV9QUk9HX0lOU1RBTExfU1RSSVBdKWRubAorQUNfUkVRVUlSRShbQU1fUFJPR19NS0RJUl9QXSlkbmwKKyMgV2UgbmVlZCBhd2sgZm9yIHRoZSAiY2hlY2siIHRhcmdldC4gIFRoZSBzeXN0ZW0gImF3ayIgaXMgYmFkIG9uCisjIHNvbWUgcGxhdGZvcm1zLgorQUNfUkVRVUlSRShbQUNfUFJPR19BV0tdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19NQUtFX1NFVF0pZG5sCitBQ19SRVFVSVJFKFtBTV9TRVRfTEVBRElOR19ET1RdKWRubAorX0FNX0lGX09QVElPTihbdGFyLXVzdGFyXSwgW19BTV9QUk9HX1RBUihbdXN0YXJdKV0sCisJICAgICAgW19BTV9JRl9PUFRJT04oW3Rhci1wYXhdLCBbX0FNX1BST0dfVEFSKFtwYXhdKV0sCisJCQkgICAgIFtfQU1fUFJPR19UQVIoW3Y3XSldKV0pCitfQU1fSUZfT1BUSU9OKFtuby1kZXBlbmRlbmNpZXNdLCwKK1tBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19DQ10sCisJCSAgW19BTV9ERVBFTkRFTkNJRVMoQ0MpXSwKKwkJICBbZGVmaW5lKFtBQ19QUk9HX0NDXSwKKwkJCSAgZGVmbihbQUNfUFJPR19DQ10pW19BTV9ERVBFTkRFTkNJRVMoQ0MpXSldKWRubAorQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ1hYXSwKKwkJICBbX0FNX0RFUEVOREVOQ0lFUyhDWFgpXSwKKwkJICBbZGVmaW5lKFtBQ19QUk9HX0NYWF0sCisJCQkgIGRlZm4oW0FDX1BST0dfQ1hYXSlbX0FNX0RFUEVOREVOQ0lFUyhDWFgpXSldKWRubAorQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfT0JKQ10sCisJCSAgW19BTV9ERVBFTkRFTkNJRVMoT0JKQyldLAorCQkgIFtkZWZpbmUoW0FDX1BST0dfT0JKQ10sCisJCQkgIGRlZm4oW0FDX1BST0dfT0JKQ10pW19BTV9ERVBFTkRFTkNJRVMoT0JKQyldKV0pZG5sCitdKQorX0FNX0lGX09QVElPTihbc2lsZW50LXJ1bGVzXSwgW0FDX1JFUVVJUkUoW0FNX1NJTEVOVF9SVUxFU10pXSlkbmwKK2RubCBUaGUgYHBhcmFsbGVsLXRlc3RzJyBkcml2ZXIgbWF5IG5lZWQgdG8ga25vdyBhYm91dCBFWEVFWFQsIHNvIGFkZCB0aGUKK2RubCBgYW1fX0VYRUVYVCcgY29uZGl0aW9uYWwgaWYgX0FNX0NPTVBJTEVSX0VYRUVYVCB3YXMgc2Vlbi4gIFRoaXMgbWFjcm8KK2RubCBpcyBob29rZWQgb250byBfQUNfQ09NUElMRVJfRVhFRVhUIGVhcmx5LCBzZWUgYmVsb3cuCitBQ19DT05GSUdfQ09NTUFORFNfUFJFKGRubAorW200X3Byb3ZpZGVfaWYoW19BTV9DT01QSUxFUl9FWEVFWFRdLAorICBbQU1fQ09ORElUSU9OQUwoW2FtX19FWEVFWFRdLCBbdGVzdCAtbiAiJEVYRUVYVCJdKV0pXSlkbmwKK10pCisKK2RubCBIb29rIGludG8gYF9BQ19DT01QSUxFUl9FWEVFWFQnIGVhcmx5IHRvIGxlYXJuIGl0cyBleHBhbnNpb24uICBEbyBub3QKK2RubCBhZGQgdGhlIGNvbmRpdGlvbmFsIHJpZ2h0IGhlcmUsIGFzIF9BQ19DT01QSUxFUl9FWEVFWFQgbWF5IGJlIGZ1cnRoZXIKK2RubCBtYW5nbGVkIGJ5IEF1dG9jb25mIGFuZCBydW4gaW4gYSBzaGVsbCBjb25kaXRpb25hbCBzdGF0ZW1lbnQuCittNF9kZWZpbmUoW19BQ19DT01QSUxFUl9FWEVFWFRdLAorbTRfZGVmbihbX0FDX0NPTVBJTEVSX0VYRUVYVF0pW200X3Byb3ZpZGUoW19BTV9DT01QSUxFUl9FWEVFWFRdKV0pCisKKworIyBXaGVuIGNvbmZpZy5zdGF0dXMgZ2VuZXJhdGVzIGEgaGVhZGVyLCB3ZSBtdXN0IHVwZGF0ZSB0aGUgc3RhbXAtaCBmaWxlLgorIyBUaGlzIGZpbGUgcmVzaWRlcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGNvbmZpZyBoZWFkZXIKKyMgdGhhdCBpcyBnZW5lcmF0ZWQuICBUaGUgc3RhbXAgZmlsZXMgYXJlIG51bWJlcmVkIHRvIGhhdmUgZGlmZmVyZW50IG5hbWVzLgorCisjIEF1dG9jb25mIGNhbGxzIF9BQ19BTV9DT05GSUdfSEVBREVSX0hPT0sgKHdoZW4gZGVmaW5lZCkgaW4gdGhlCisjIGxvb3Agd2hlcmUgY29uZmlnLnN0YXR1cyBjcmVhdGVzIHRoZSBoZWFkZXJzLCBzbyB3ZSBjYW4gZ2VuZXJhdGUKKyMgb3VyIHN0YW1wIGZpbGVzIHRoZXJlLgorQUNfREVGVU4oW19BQ19BTV9DT05GSUdfSEVBREVSX0hPT0tdLAorWyMgQ29tcHV0ZSAkMSdzIGluZGV4IGluICRjb25maWdfaGVhZGVycy4KK19hbV9hcmc9JDEKK19hbV9zdGFtcF9jb3VudD0xCitmb3IgX2FtX2hlYWRlciBpbiAkY29uZmlnX2hlYWRlcnMgOjsgZG8KKyAgY2FzZSAkX2FtX2hlYWRlciBpbgorICAgICRfYW1fYXJnIHwgJF9hbV9hcmc6KiApCisgICAgICBicmVhayA7OworICAgICogKQorICAgICAgX2FtX3N0YW1wX2NvdW50PWBleHByICRfYW1fc3RhbXBfY291bnQgKyAxYCA7OworICBlc2FjCitkb25lCitlY2hvICJ0aW1lc3RhbXAgZm9yICRfYW1fYXJnIiA+YEFTX0RJUk5BTUUoWyIkX2FtX2FyZyJdKWAvc3RhbXAtaFtdJF9hbV9zdGFtcF9jb3VudF0pCisKKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzLCAyMDA1LCAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEFNX1BST0dfSU5TVEFMTF9TSAorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lICRpbnN0YWxsX3NoLgorQUNfREVGVU4oW0FNX1BST0dfSU5TVEFMTF9TSF0sCitbQUNfUkVRVUlSRShbQU1fQVVYX0RJUl9FWFBBTkRdKWRubAoraWYgdGVzdCB4IiR7aW5zdGFsbF9zaH0iICE9IHhzZXQ7IHRoZW4KKyAgY2FzZSAkYW1fYXV4X2RpciBpbgorICAqXCAqIHwgKlwJKikKKyAgICBpbnN0YWxsX3NoPSJcJHtTSEVMTH0gJyRhbV9hdXhfZGlyL2luc3RhbGwtc2gnIiA7OworICAqKQorICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9pbnN0YWxsLXNoIgorICBlc2FjCitmaQorQUNfU1VCU1QoaW5zdGFsbF9zaCldKQorCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMgorCisjIENoZWNrIHdoZXRoZXIgdGhlIHVuZGVybHlpbmcgZmlsZS1zeXN0ZW0gc3VwcG9ydHMgZmlsZW5hbWVzCisjIHdpdGggYSBsZWFkaW5nIGRvdC4gIEZvciBpbnN0YW5jZSBNUy1ET1MgZG9lc24ndC4KK0FDX0RFRlVOKFtBTV9TRVRfTEVBRElOR19ET1RdLAorW3JtIC1yZiAudHN0IDI+L2Rldi9udWxsCitta2RpciAudHN0IDI+L2Rldi9udWxsCitpZiB0ZXN0IC1kIC50c3Q7IHRoZW4KKyAgYW1fX2xlYWRpbmdfZG90PS4KK2Vsc2UKKyAgYW1fX2xlYWRpbmdfZG90PV8KK2ZpCitybWRpciAudHN0IDI+L2Rldi9udWxsCitBQ19TVUJTVChbYW1fX2xlYWRpbmdfZG90XSldKQorCisjIENoZWNrIHRvIHNlZSBob3cgJ21ha2UnIHRyZWF0cyBpbmNsdWRlcy4JICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNSwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNAorCisjIEFNX01BS0VfSU5DTFVERSgpCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHRvIHNlZSBob3cgbWFrZSB0cmVhdHMgaW5jbHVkZXMuCitBQ19ERUZVTihbQU1fTUFLRV9JTkNMVURFXSwKK1thbV9tYWtlPSR7TUFLRS1tYWtlfQorY2F0ID4gY29uZmluYyA8PCAnRU5EJworYW1fX2RvaXQ6CisJQGVjaG8gdGhpcyBpcyB0aGUgYW1fX2RvaXQgdGFyZ2V0CisuUEhPTlk6IGFtX19kb2l0CitFTkQKKyMgSWYgd2UgZG9uJ3QgZmluZCBhbiBpbmNsdWRlIGRpcmVjdGl2ZSwganVzdCBjb21tZW50IG91dCB0aGUgY29kZS4KK0FDX01TR19DSEVDS0lORyhbZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZV0pCithbV9faW5jbHVkZT0iIyIKK2FtX19xdW90ZT0KK19hbV9yZXN1bHQ9bm9uZQorIyBGaXJzdCB0cnkgR05VIG1ha2Ugc3R5bGUgaW5jbHVkZS4KK2VjaG8gImluY2x1ZGUgY29uZmluYyIgPiBjb25mbWYKKyMgSWdub3JlIGFsbCBraW5kcyBvZiBhZGRpdGlvbmFsIG91dHB1dCBmcm9tIGBtYWtlJy4KK2Nhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoCisqdGhlXCBhbV9fZG9pdFwgdGFyZ2V0KikKKyAgYW1fX2luY2x1ZGU9aW5jbHVkZQorICBhbV9fcXVvdGU9CisgIF9hbV9yZXN1bHQ9R05VCisgIDs7Citlc2FjCisjIE5vdyB0cnkgQlNEIG1ha2Ugc3R5bGUgaW5jbHVkZS4KK2lmIHRlc3QgIiRhbV9faW5jbHVkZSIgPSAiIyI7IHRoZW4KKyAgIGVjaG8gJy5pbmNsdWRlICJjb25maW5jIicgPiBjb25mbWYKKyAgIGNhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoCisgICAqdGhlXCBhbV9fZG9pdFwgdGFyZ2V0KikKKyAgICAgYW1fX2luY2x1ZGU9LmluY2x1ZGUKKyAgICAgYW1fX3F1b3RlPSJcIiIKKyAgICAgX2FtX3Jlc3VsdD1CU0QKKyAgICAgOzsKKyAgIGVzYWMKK2ZpCitBQ19TVUJTVChbYW1fX2luY2x1ZGVdKQorQUNfU1VCU1QoW2FtX19xdW90ZV0pCitBQ19NU0dfUkVTVUxUKFskX2FtX3Jlc3VsdF0pCitybSAtZiBjb25maW5jIGNvbmZtZgorXSkKKworIyBGYWtlIHRoZSBleGlzdGVuY2Ugb2YgcHJvZ3JhbXMgdGhhdCBHTlUgbWFpbnRhaW5lcnMgdXNlLiAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5NywgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwOAorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA2CisKKyMgQU1fTUlTU0lOR19QUk9HKE5BTUUsIFBST0dSQU0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FNX01JU1NJTkdfUFJPR10sCitbQUNfUkVRVUlSRShbQU1fTUlTU0lOR19IQVNfUlVOXSkKKyQxPSR7JDEtIiR7YW1fbWlzc2luZ19ydW59JDIifQorQUNfU1VCU1QoJDEpXSkKKworCisjIEFNX01JU1NJTkdfSEFTX1JVTgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIE1JU1NJTkcgaWYgbm90IGRlZmluZWQgc28gZmFyIGFuZCB0ZXN0IGlmIGl0IHN1cHBvcnRzIC0tcnVuLgorIyBJZiBpdCBkb2VzLCBzZXQgYW1fbWlzc2luZ19ydW4gdG8gdXNlIGl0LCBvdGhlcndpc2UsIHRvIG5vdGhpbmcuCitBQ19ERUZVTihbQU1fTUlTU0lOR19IQVNfUlVOXSwKK1tBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCitBQ19SRVFVSVJFX0FVWF9GSUxFKFttaXNzaW5nXSlkbmwKK2lmIHRlc3QgeCIke01JU1NJTkcrc2V0fSIgIT0geHNldDsgdGhlbgorICBjYXNlICRhbV9hdXhfZGlyIGluCisgICpcICogfCAqXAkqKQorICAgIE1JU1NJTkc9Ilwke1NIRUxMfSBcIiRhbV9hdXhfZGlyL21pc3NpbmdcIiIgOzsKKyAgKikKKyAgICBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIgOzsKKyAgZXNhYworZmkKKyMgVXNlIGV2YWwgdG8gZXhwYW5kICRTSEVMTAoraWYgZXZhbCAiJE1JU1NJTkcgLS1ydW4gdHJ1ZSI7IHRoZW4KKyAgYW1fbWlzc2luZ19ydW49IiRNSVNTSU5HIC0tcnVuICIKK2Vsc2UKKyAgYW1fbWlzc2luZ19ydW49CisgIEFDX01TR19XQVJOKFtgbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZ10pCitmaQorXSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fUFJPR19NS0RJUl9QCisjIC0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBmb3IgYG1rZGlyIC1wJy4KK0FDX0RFRlVOKFtBTV9QUk9HX01LRElSX1BdLAorW0FDX1BSRVJFUShbMi42MF0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX01LRElSX1BdKWRubAorZG5sIEF1dG9tYWtlIDEuOCB0byAxLjkuNiB1c2VkIHRvIGRlZmluZSBta2Rpcl9wLiAgV2Ugbm93IHVzZSBNS0RJUl9QLAorZG5sIHdoaWxlIGtlZXBpbmcgYSBkZWZpbml0aW9uIG9mIG1rZGlyX3AgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCitkbmwgQE1LRElSX1BAIGlzIG1hZ2ljOiBBQ19PVVRQVVQgYWRqdXN0cyBpdHMgdmFsdWUgZm9yIGVhY2ggTWFrZWZpbGUuCitkbmwgSG93ZXZlciB3ZSBjYW5ub3QgZGVmaW5lIG1rZGlyX3AgYXMgJChNS0RJUl9QKSBmb3IgdGhlIHNha2Ugb2YKK2RubCBNYWtlZmlsZS5pbnMgdGhhdCBkbyBub3QgZGVmaW5lIE1LRElSX1AsIHNvIHdlIGRvIG91ciBvd24KK2RubCBhZGp1c3RtZW50IHVzaW5nIHRvcF9idWlsZGRpciAod2hpY2ggaXMgZGVmaW5lZCBtb3JlIG9mdGVuIHRoYW4KK2RubCBNS0RJUl9QKS4KK0FDX1NVQlNUKFtta2Rpcl9wXSwgWyIkTUtESVJfUCJdKWRubAorY2FzZSAkbWtkaXJfcCBpbgorICBbW1xcLyRdXSogfCA/OltbXFwvXV0qKSA7OworICAqLyopIG1rZGlyX3A9IlwkKHRvcF9idWlsZGRpcikvJG1rZGlyX3AiIDs7Citlc2FjCitdKQorCisjIEhlbHBlciBmdW5jdGlvbnMgZm9yIG9wdGlvbiBoYW5kbGluZy4gICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1LCAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA0CisKKyMgX0FNX01BTkdMRV9PUFRJT04oTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfQU1fTUFOR0xFX09QVElPTl0sCitbW19BTV9PUFRJT05fXW00X2JwYXRzdWJzdCgkMSwgW1teYS16QS1aMC05X11dLCBbX10pXSkKKworIyBfQU1fU0VUX09QVElPTihOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IG9wdGlvbiBOQU1FLiAgUHJlc2VudGx5IHRoYXQgb25seSBtZWFucyBkZWZpbmluZyBhIGZsYWcgZm9yIHRoaXMgb3B0aW9uLgorQUNfREVGVU4oW19BTV9TRVRfT1BUSU9OXSwKK1ttNF9kZWZpbmUoX0FNX01BTkdMRV9PUFRJT04oWyQxXSksIDEpXSkKKworIyBfQU1fU0VUX09QVElPTlMoT1BUSU9OUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPUFRJT05TIGlzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgQXV0b21ha2Ugb3B0aW9ucy4KK0FDX0RFRlVOKFtfQU1fU0VUX09QVElPTlNdLAorW200X2ZvcmVhY2hfdyhbX0FNX09wdGlvbl0sIFskMV0sIFtfQU1fU0VUX09QVElPTihfQU1fT3B0aW9uKV0pXSkKKworIyBfQU1fSUZfT1BUSU9OKE9QVElPTiwgSUYtU0VULCBbSUYtTk9ULVNFVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhlY3V0ZSBJRi1TRVQgaWYgT1BUSU9OIGlzIHNldCwgSUYtTk9ULVNFVCBvdGhlcndpc2UuCitBQ19ERUZVTihbX0FNX0lGX09QVElPTl0sCitbbTRfaWZzZXQoX0FNX01BTkdMRV9PUFRJT04oWyQxXSksIFskMl0sIFskM10pXSkKKworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZS4gICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMjAwMCwgMjAwMSwgMjAwMywgMjAwNSwgMjAwOAorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA1CisKKyMgQU1fU0FOSVRZX0NIRUNLCisjIC0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FNX1NBTklUWV9DSEVDS10sCitbQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmVdKQorIyBKdXN0IGluIGNhc2UKK3NsZWVwIDEKK2VjaG8gdGltZXN0YW1wID4gY29uZnRlc3QuZmlsZQorIyBSZWplY3QgdW5zYWZlIGNoYXJhY3RlcnMgaW4gJHNyY2RpciBvciB0aGUgYWJzb2x1dGUgd29ya2luZyBkaXJlY3RvcnkKKyMgbmFtZS4gIEFjY2VwdCBzcGFjZSBhbmQgdGFiIG9ubHkgaW4gdGhlIGxhdHRlci4KK2FtX2xmPScKKycKK2Nhc2UgYHB3ZGAgaW4KKyAgKltbXFxcIlwjXCRcJlwnXGAkYW1fbGZdXSopCisgICAgQUNfTVNHX0VSUk9SKFt1bnNhZmUgYWJzb2x1dGUgd29ya2luZyBkaXJlY3RvcnkgbmFtZV0pOzsKK2VzYWMKK2Nhc2UgJHNyY2RpciBpbgorICAqW1tcXFwiXCNcJFwmXCdcYCRhbV9sZlwgXAldXSopCisgICAgQUNfTVNHX0VSUk9SKFt1bnNhZmUgc3JjZGlyIHZhbHVlOiBgJHNyY2RpciddKTs7Citlc2FjCisKKyMgRG8gYHNldCcgaW4gYSBzdWJzaGVsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBjdXJyZW50IHNoZWxsJ3MKKyMgYXJndW1lbnRzLiAgTXVzdCB0cnkgLUwgZmlyc3QgaW4gY2FzZSBjb25maWd1cmUgaXMgYWN0dWFsbHkgYQorIyBzeW1saW5rOyBzb21lIHN5c3RlbXMgcGxheSB3ZWlyZCBnYW1lcyB3aXRoIHRoZSBtb2QgdGltZSBvZiBzeW1saW5rcworIyAoZWcgRnJlZUJTRCByZXR1cm5zIHRoZSBtb2QgdGltZSBvZiB0aGUgc3ltbGluaydzIGNvbnRhaW5pbmcKKyMgZGlyZWN0b3J5KS4KK2lmICgKKyAgIHNldCBYIGBscyAtTHQgIiRzcmNkaXIvY29uZmlndXJlIiBjb25mdGVzdC5maWxlIDI+IC9kZXYvbnVsbGAKKyAgIGlmIHRlc3QgIiRbKl0iID0gIlgiOyB0aGVuCisgICAgICAjIC1MIGRpZG4ndCB3b3JrLgorICAgICAgc2V0IFggYGxzIC10ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZWAKKyAgIGZpCisgICBybSAtZiBjb25mdGVzdC5maWxlCisgICBpZiB0ZXN0ICIkWypdIiAhPSAiWCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIiBcCisgICAgICAmJiB0ZXN0ICIkWypdIiAhPSAiWCBjb25mdGVzdC5maWxlICRzcmNkaXIvY29uZmlndXJlIjsgdGhlbgorCisgICAgICAjIElmIG5laXRoZXIgbWF0Y2hlZCwgdGhlbiB3ZSBoYXZlIGEgYnJva2VuIGxzLiAgVGhpcyBjYW4gaGFwcGVuCisgICAgICAjIGlmLCBmb3IgaW5zdGFuY2UsIENPTkZJR19TSEVMTCBpcyBiYXNoIGFuZCBpdCBpbmhlcml0cyBhCisgICAgICAjIGJyb2tlbiBscyBhbGlhcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4gIFRoaXMgaGFzIGFjdHVhbGx5CisgICAgICAjIGhhcHBlbmVkLiAgU3VjaCBhIHN5c3RlbSBjb3VsZCBub3QgYmUgY29uc2lkZXJlZCAic2FuZSIuCisgICAgICBBQ19NU0dfRVJST1IoW2xzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KK2FsaWFzIGluIHlvdXIgZW52aXJvbm1lbnRdKQorICAgZmkKKworICAgdGVzdCAiJFsyXSIgPSBjb25mdGVzdC5maWxlCisgICApCit0aGVuCisgICAjIE9rLgorICAgOgorZWxzZQorICAgQUNfTVNHX0VSUk9SKFtuZXdseSBjcmVhdGVkIGZpbGUgaXMgb2xkZXIgdGhhbiBkaXN0cmlidXRlZCBmaWxlcyEKK0NoZWNrIHlvdXIgc3lzdGVtIGNsb2NrXSkKK2ZpCitBQ19NU0dfUkVTVUxUKHllcyldKQorCisjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMywgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBBTV9QUk9HX0lOU1RBTExfU1RSSVAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE9uZSBpc3N1ZSB3aXRoIHZlbmRvciBgaW5zdGFsbCcgKGV2ZW4gR05VKSBpcyB0aGF0IHlvdSBjYW4ndAorIyBzcGVjaWZ5IHRoZSBwcm9ncmFtIHVzZWQgdG8gc3RyaXAgYmluYXJpZXMuICBUaGlzIGlzIGVzcGVjaWFsbHkKKyMgYW5ub3lpbmcgaW4gY3Jvc3MtY29tcGlsaW5nIGVudmlyb25tZW50cywgd2hlcmUgdGhlIGJ1aWxkJ3Mgc3RyaXAKKyMgaXMgdW5saWtlbHkgdG8gaGFuZGxlIHRoZSBob3N0J3MgYmluYXJpZXMuCisjIEZvcnR1bmF0ZWx5IGluc3RhbGwtc2ggd2lsbCBob25vciBhIFNUUklQUFJPRyB2YXJpYWJsZSwgc28gd2UKKyMgYWx3YXlzIHVzZSBpbnN0YWxsLXNoIGluIGBtYWtlIGluc3RhbGwtc3RyaXAnLCBhbmQgaW5pdGlhbGl6ZQorIyBTVFJJUFBST0cgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIFNUUklQIHZhcmlhYmxlIChzZXQgYnkgdGhlIHVzZXIpLgorQUNfREVGVU4oW0FNX1BST0dfSU5TVEFMTF9TVFJJUF0sCitbQUNfUkVRVUlSRShbQU1fUFJPR19JTlNUQUxMX1NIXSlkbmwKKyMgSW5zdGFsbGVkIGJpbmFyaWVzIGFyZSB1c3VhbGx5IHN0cmlwcGVkIHVzaW5nIGBzdHJpcCcgd2hlbiB0aGUgdXNlcgorIyBydW4gYG1ha2UgaW5zdGFsbC1zdHJpcCcuICBIb3dldmVyIGBzdHJpcCcgbWlnaHQgbm90IGJlIHRoZSByaWdodAorIyB0b29sIHRvIHVzZSBpbiBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudHMsIHRoZXJlZm9yZSBBdXRvbWFrZQorIyB3aWxsIGhvbm9yIHRoZSBgU1RSSVAnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIG92ZXJydWxlIHRoaXMgcHJvZ3JhbS4KK2RubCBEb24ndCB0ZXN0IGZvciAkY3Jvc3NfY29tcGlsaW5nID0geWVzLCBiZWNhdXNlIGl0IG1pZ2h0IGJlIGBtYXliZScuCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSBubzsgdGhlbgorICBBQ19DSEVDS19UT09MKFtTVFJJUF0sIFtzdHJpcF0sIDopCitmaQorSU5TVEFMTF9TVFJJUF9QUk9HUkFNPSJcJChpbnN0YWxsX3NoKSAtYyAtcyIKK0FDX1NVQlNUKFtJTlNUQUxMX1NUUklQX1BST0dSQU1dKV0pCisKKyMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCAyCisKKyMgX0FNX1NVQlNUX05PVE1BS0UoVkFSSUFCTEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcmV2ZW50IEF1dG9tYWtlIGZyb20gb3V0cHV0dGluZyBWQVJJQUJMRSA9IEBWQVJJQUJMRUAgaW4gTWFrZWZpbGUuaW4uCisjIFRoaXMgbWFjcm8gaXMgdHJhY2VkIGJ5IEF1dG9tYWtlLgorQUNfREVGVU4oW19BTV9TVUJTVF9OT1RNQUtFXSkKKworIyBBTV9TVUJTVF9OT1RNQUtFKFZBUklBQkxFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHVibGljIHNpc3RlciBvZiBfQU1fU1VCU1RfTk9UTUFLRS4KK0FDX0RFRlVOKFtBTV9TVUJTVF9OT1RNQUtFXSwgW19BTV9TVUJTVF9OT1RNQUtFKCRAKV0pCisKKyMgQ2hlY2sgaG93IHRvIGNyZWF0ZSBhIHRhcmJhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDIKKworIyBfQU1fUFJPR19UQVIoRk9STUFUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBob3cgdG8gY3JlYXRlIGEgdGFyYmFsbCBpbiBmb3JtYXQgRk9STUFULgorIyBGT1JNQVQgc2hvdWxkIGJlIG9uZSBvZiBgdjcnLCBgdXN0YXInLCBvciBgcGF4Jy4KKyMKKyMgU3Vic3RpdHV0ZSBhIHZhcmlhYmxlICQoYW1fX3RhcikgdGhhdCBpcyBhIGNvbW1hbmQKKyMgd3JpdGluZyB0byBzdGRvdXQgYSBGT1JNQVQtdGFyYmFsbCBjb250YWluaW5nIHRoZSBkaXJlY3RvcnkKKyMgJHRhcmRpci4KKyMgICAgIHRhcmRpcj1kaXJlY3RvcnkgJiYgJChhbV9fdGFyKSA+IHJlc3VsdC50YXIKKyMKKyMgU3Vic3RpdHV0ZSBhIHZhcmlhYmxlICQoYW1fX3VudGFyKSB0aGF0IGV4dHJhY3Qgc3VjaAorIyBhIHRhcmJhbGwgcmVhZCBmcm9tIHN0ZGluLgorIyAgICAgJChhbV9fdW50YXIpIDwgcmVzdWx0LnRhcgorQUNfREVGVU4oW19BTV9QUk9HX1RBUl0sCitbIyBBbHdheXMgZGVmaW5lIEFNVEFSIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorQU1fTUlTU0lOR19QUk9HKFtBTVRBUl0sIFt0YXJdKQorbTRfaWYoWyQxXSwgW3Y3XSwKKyAgICAgW2FtX190YXI9JyR7QU1UQVJ9IGNob2YgLSAiJCR0YXJkaXIiJzsgYW1fX3VudGFyPScke0FNVEFSfSB4ZiAtJ10sCisgICAgIFttNF9jYXNlKFskMV0sIFt1c3Rhcl0sLCBbcGF4XSwsCisgICAgICAgICAgICAgIFttNF9mYXRhbChbVW5rbm93biB0YXIgZm9ybWF0XSldKQorQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY3JlYXRlIGEgJDEgdGFyIGFyY2hpdmVdKQorIyBMb29wIG92ZXIgYWxsIGtub3duIG1ldGhvZHMgdG8gY3JlYXRlIGEgdGFyIGFyY2hpdmUgdW50aWwgb25lIHdvcmtzLgorX2FtX3Rvb2xzPSdnbnV0YXIgbTRfaWYoWyQxXSwgW3VzdGFyXSwgW3BsYWludGFyXSkgcGF4IGNwaW8gbm9uZScKK19hbV90b29scz0ke2FtX2N2X3Byb2dfdGFyXyQxLSRfYW1fdG9vbHN9CisjIERvIG5vdCBmb2xkIHRoZSBhYm92ZSB0d28gbGluZSBpbnRvIG9uZSwgYmVjYXVzZSBUcnU2NCBzaCBhbmQKKyMgU29sYXJpcyBzaCB3aWxsIG5vdCBncm9rIHNwYWNlcyBpbiB0aGUgcmhzIG9mIGAtJy4KK2ZvciBfYW1fdG9vbCBpbiAkX2FtX3Rvb2xzCitkbworICBjYXNlICRfYW1fdG9vbCBpbgorICBnbnV0YXIpCisgICAgZm9yIF9hbV90YXIgaW4gdGFyIGdudXRhciBndGFyOworICAgIGRvCisgICAgICBBTV9SVU5fTE9HKFskX2FtX3RhciAtLXZlcnNpb25dKSAmJiBicmVhaworICAgIGRvbmUKKyAgICBhbV9fdGFyPSIkX2FtX3RhciAtLWZvcm1hdD1tNF9pZihbJDFdLCBbcGF4XSwgW3Bvc2l4XSwgWyQxXSkgLWNoZiAtICInIiQkdGFyZGlyIicKKyAgICBhbV9fdGFyXz0iJF9hbV90YXIgLS1mb3JtYXQ9bTRfaWYoWyQxXSwgW3BheF0sIFtwb3NpeF0sIFskMV0pIC1jaGYgLSAiJyIkdGFyZGlyIicKKyAgICBhbV9fdW50YXI9IiRfYW1fdGFyIC14ZiAtIgorICAgIDs7CisgIHBsYWludGFyKQorICAgICMgTXVzdCBza2lwIEdOVSB0YXI6IGlmIGl0IGRvZXMgbm90IHN1cHBvcnQgLS1mb3JtYXQ9IGl0IGRvZXNuJ3QgY3JlYXRlCisgICAgIyB1c3RhciB0YXJiYWxsIGVpdGhlci4KKyAgICAodGFyIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxICYmIGNvbnRpbnVlCisgICAgYW1fX3Rhcj0ndGFyIGNoZiAtICIkJHRhcmRpciInCisgICAgYW1fX3Rhcl89J3RhciBjaGYgLSAiJHRhcmRpciInCisgICAgYW1fX3VudGFyPSd0YXIgeGYgLScKKyAgICA7OworICBwYXgpCisgICAgYW1fX3Rhcj0ncGF4IC1MIC14ICQxIC13ICIkJHRhcmRpciInCisgICAgYW1fX3Rhcl89J3BheCAtTCAteCAkMSAtdyAiJHRhcmRpciInCisgICAgYW1fX3VudGFyPSdwYXggLXInCisgICAgOzsKKyAgY3BpbykKKyAgICBhbV9fdGFyPSdmaW5kICIkJHRhcmRpciIgLXByaW50IHwgY3BpbyAtbyAtSCAkMSAtTCcKKyAgICBhbV9fdGFyXz0nZmluZCAiJHRhcmRpciIgLXByaW50IHwgY3BpbyAtbyAtSCAkMSAtTCcKKyAgICBhbV9fdW50YXI9J2NwaW8gLWkgLUggJDEgLWQnCisgICAgOzsKKyAgbm9uZSkKKyAgICBhbV9fdGFyPWZhbHNlCisgICAgYW1fX3Rhcl89ZmFsc2UKKyAgICBhbV9fdW50YXI9ZmFsc2UKKyAgICA7OworICBlc2FjCisKKyAgIyBJZiB0aGUgdmFsdWUgd2FzIGNhY2hlZCwgc3RvcCBub3cuICBXZSBqdXN0IHdhbnRlZCB0byBoYXZlIGFtX190YXIKKyAgIyBhbmQgYW1fX3VudGFyIHNldC4KKyAgdGVzdCAtbiAiJHthbV9jdl9wcm9nX3Rhcl8kMX0iICYmIGJyZWFrCisKKyAgIyB0YXIvdW50YXIgYSBkdW1teSBkaXJlY3RvcnksIGFuZCBzdG9wIGlmIHRoZSBjb21tYW5kIHdvcmtzCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKKyAgbWtkaXIgY29uZnRlc3QuZGlyCisgIGVjaG8gR3JlcE1lID4gY29uZnRlc3QuZGlyL2ZpbGUKKyAgQU1fUlVOX0xPRyhbdGFyZGlyPWNvbmZ0ZXN0LmRpciAmJiBldmFsICRhbV9fdGFyXyA+Y29uZnRlc3QudGFyXSkKKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LnRhcjsgdGhlbgorICAgIEFNX1JVTl9MT0coWyRhbV9fdW50YXIgPGNvbmZ0ZXN0LnRhcl0pCisgICAgZ3JlcCBHcmVwTWUgY29uZnRlc3QuZGlyL2ZpbGUgPi9kZXYvbnVsbCAyPiYxICYmIGJyZWFrCisgIGZpCitkb25lCitybSAtcmYgY29uZnRlc3QuZGlyCisKK0FDX0NBQ0hFX1ZBTChbYW1fY3ZfcHJvZ190YXJfJDFdLCBbYW1fY3ZfcHJvZ190YXJfJDE9JF9hbV90b29sXSkKK0FDX01TR19SRVNVTFQoWyRhbV9jdl9wcm9nX3Rhcl8kMV0pXSkKK0FDX1NVQlNUKFthbV9fdGFyXSkKK0FDX1NVQlNUKFthbV9fdW50YXJdKQorXSkgIyBfQU1fUFJPR19UQVIKKworbTRfaW5jbHVkZShbbTQvYXJnei5tNF0pCittNF9pbmNsdWRlKFttNC9saWJ0b29sLm00XSkKK200X2luY2x1ZGUoW200L2x0ZGwubTRdKQorbTRfaW5jbHVkZShbbTQvbHRvcHRpb25zLm00XSkKK200X2luY2x1ZGUoW200L2x0c3VnYXIubTRdKQorbTRfaW5jbHVkZShbbTQvbHR2ZXJzaW9uLm00XSkKK200X2luY2x1ZGUoW200L2x0fm9ic29sZXRlLm00XSkKZGlmZiAtLWdpdCBhL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9hcmd6LmMgYi9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvYXJnei5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1Njc3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvYXJnei5jCkBAIC0wLDAgKzEsMjI2IEBACisvKiBhcmd6LmMgLS0gYXJneiBpbXBsZW1lbnRhdGlvbiBmb3Igbm9uLWdsaWJjIHN5c3RlbXMKKworICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKKworICAgTk9URTogVGhlIGNhbm9uaWNhbCBzb3VyY2Ugb2YgdGhpcyBmaWxlIGlzIG1haW50YWluZWQgd2l0aCB0aGUKKyAgIEdOVSBMaWJ0b29sIHBhY2thZ2UuICBSZXBvcnQgYnVncyB0byBidWctbGlidG9vbEBnbnUub3JnLgorCitHTlUgTGlibHRkbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgordmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCitpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CitpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKK3NhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCitHTlUgTGlibHRkbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFsb25nIHdpdGggR05VIExpYmx0ZGw7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgYQorY29weSBjYW4gYmUgZG93bmxvYWRlZCBmcm9tICBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGdwbC5odG1sLAorb3Igb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWYgZGVmaW5lZChMVERMKSAmJiBkZWZpbmVkIExUX0NPTkZJR19ICisjICBpbmNsdWRlIExUX0NPTkZJR19ICisjZWxzZQorIyAgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGFyZ3ouaD4KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgRU9TX0NIQVIgJ1wwJworCitlcnJvcl90Cithcmd6X2FwcGVuZCAoY2hhciAqKnBhcmd6LCBzaXplX3QgKnBhcmd6X2xlbiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbikKK3sKKyAgc2l6ZV90IGFyZ3pfbGVuOworICBjaGFyICAqYXJnejsKKworICBhc3NlcnQgKHBhcmd6KTsKKyAgYXNzZXJ0IChwYXJnel9sZW4pOworICBhc3NlcnQgKCgqcGFyZ3ogJiYgKnBhcmd6X2xlbikgfHwgKCEqcGFyZ3ogJiYgISpwYXJnel9sZW4pKTsKKworICAvKiBJZiBub3RoaW5nIG5lZWRzIHRvIGJlIGFwcGVuZGVkLCBubyBtb3JlIHdvcmsgaXMgcmVxdWlyZWQuICAqLworICBpZiAoYnVmX2xlbiA9PSAwKQorICAgIHJldHVybiAwOworCisgIC8qIEVuc3VyZSB0aGVyZSBpcyBlbm91Z2ggcm9vbSB0byBhcHBlbmQgQlVGX0xFTi4gICovCisgIGFyZ3pfbGVuID0gKnBhcmd6X2xlbiArIGJ1Zl9sZW47CisgIGFyZ3ogPSAoY2hhciAqKSByZWFsbG9jICgqcGFyZ3osIGFyZ3pfbGVuKTsKKyAgaWYgKCFhcmd6KQorICAgIHJldHVybiBFTk9NRU07CisKKyAgLyogQ29weSBjaGFyYWN0ZXJzIGZyb20gQlVGIGFmdGVyIHRlcm1pbmF0aW5nICdcMCcgaW4gQVJHWi4gICovCisgIG1lbWNweSAoYXJneiArICpwYXJnel9sZW4sIGJ1ZiwgYnVmX2xlbik7CisKKyAgLyogQXNzaWduIG5ldyB2YWx1ZXMuICAqLworICAqcGFyZ3ogPSBhcmd6OworICAqcGFyZ3pfbGVuID0gYXJnel9sZW47CisKKyAgcmV0dXJuIDA7Cit9CisKKworZXJyb3JfdAorYXJnel9jcmVhdGVfc2VwIChjb25zdCBjaGFyICpzdHIsIGludCBkZWxpbSwgY2hhciAqKnBhcmd6LCBzaXplX3QgKnBhcmd6X2xlbikKK3sKKyAgc2l6ZV90IGFyZ3pfbGVuOworICBjaGFyICphcmd6ID0gMDsKKworICBhc3NlcnQgKHN0cik7CisgIGFzc2VydCAocGFyZ3opOworICBhc3NlcnQgKHBhcmd6X2xlbik7CisKKyAgLyogTWFrZSBhIGNvcHkgb2YgU1RSLCBidXQgcmVwbGFjaW5nIGVhY2ggb2NjdXJyZW5jZSBvZgorICAgICBERUxJTSB3aXRoICdcMCcuICAqLworICBhcmd6X2xlbiA9IDErIHN0cmxlbiAoc3RyKTsKKyAgaWYgKGFyZ3pfbGVuKQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKnA7CisgICAgICBjaGFyICpxOworCisgICAgICBhcmd6ID0gKGNoYXIgKikgbWFsbG9jIChhcmd6X2xlbik7CisgICAgICBpZiAoIWFyZ3opCisJcmV0dXJuIEVOT01FTTsKKworICAgICAgZm9yIChwID0gc3RyLCBxID0gYXJnejsgKnAgIT0gRU9TX0NIQVI7ICsrcCkKKwl7CisJICBpZiAoKnAgPT0gZGVsaW0pCisJICAgIHsKKwkgICAgICAvKiBJZ25vcmUgbGVhZGluZyBkZWxpbWl0ZXJzLCBhbmQgZm9sZCBjb25zZWN1dGl2ZQorCQkgZGVsaW1pdGVycyBpbiBTVFIgaW50byBhIHNpbmdsZSAnXDAnIGluIEFSR1ouICAqLworCSAgICAgIGlmICgocSA+IGFyZ3opICYmIChxWy0xXSAhPSBFT1NfQ0hBUikpCisJCSpxKysgPSBFT1NfQ0hBUjsKKwkgICAgICBlbHNlCisJCS0tYXJnel9sZW47CisJICAgIH0KKwkgIGVsc2UKKwkgICAgKnErKyA9ICpwOworCX0KKyAgICAgIC8qIENvcHkgdGVybWluYXRpbmcgRU9TX0NIQVIuICAqLworICAgICAgKnEgPSAqcDsKKyAgICB9CisKKyAgLyogSWYgQVJHWl9MRU4gaGFzIHNocnVuayB0byBub3RoaW5nLCByZWxlYXNlIEFSR1oncyBtZW1vcnkuICAqLworICBpZiAoIWFyZ3pfbGVuKQorICAgIGFyZ3ogPSAoZnJlZSAoYXJneiksIChjaGFyICopIDApOworCisgIC8qIEFzc2lnbiBuZXcgdmFsdWVzLiAgKi8KKyAgKnBhcmd6ID0gYXJnejsKKyAgKnBhcmd6X2xlbiA9IGFyZ3pfbGVuOworCisgIHJldHVybiAwOworfQorCisKK2Vycm9yX3QKK2FyZ3pfaW5zZXJ0IChjaGFyICoqcGFyZ3osIHNpemVfdCAqcGFyZ3pfbGVuLCBjaGFyICpiZWZvcmUsIGNvbnN0IGNoYXIgKmVudHJ5KQoreworICBhc3NlcnQgKHBhcmd6KTsKKyAgYXNzZXJ0IChwYXJnel9sZW4pOworICBhc3NlcnQgKGVudHJ5ICYmICplbnRyeSk7CisKKyAgLyogTm8gQkVGT1JFIGFkZHJlc3MgaW5kaWNhdGVzIEVOVFJZIHNob3VsZCBiZSBpbnNlcnRlZCBhZnRlciB0aGUKKyAgICAgY3VycmVudCBsYXN0IGVsZW1lbnQuICAqLworICBpZiAoIWJlZm9yZSkKKyAgICByZXR1cm4gYXJnel9hcHBlbmQgKHBhcmd6LCBwYXJnel9sZW4sIGVudHJ5LCAxKyBzdHJsZW4gKGVudHJ5KSk7CisKKyAgLyogVGhpcyBwcm9iYWJseSBpbmRpY2F0ZXMgYSBwcm9ncmFtbWVyIGVycm9yLCBidXQgdG8gcHJlc2VydmUKKyAgICAgc2VtYW50aWNzLCBzY2FuIGJhY2sgdG8gdGhlIHN0YXJ0IG9mIGFuIGVudHJ5IGlmIEJFRk9SRSBwb2ludHMKKyAgICAgaW50byB0aGUgbWlkZGxlIG9mIGl0LiAgKi8KKyAgd2hpbGUgKChiZWZvcmUgPiAqcGFyZ3opICYmIChiZWZvcmVbLTFdICE9IEVPU19DSEFSKSkKKyAgICAtLWJlZm9yZTsKKworICB7CisgICAgc2l6ZV90IGVudHJ5X2xlbgk9IDErIHN0cmxlbiAoZW50cnkpOworICAgIHNpemVfdCBhcmd6X2xlbgk9ICpwYXJnel9sZW4gKyBlbnRyeV9sZW47CisgICAgc2l6ZV90IG9mZnNldAk9IGJlZm9yZSAtICpwYXJnejsKKyAgICBjaGFyICAgKmFyZ3oJPSAoY2hhciAqKSByZWFsbG9jICgqcGFyZ3osIGFyZ3pfbGVuKTsKKworICAgIGlmICghYXJneikKKyAgICAgIHJldHVybiBFTk9NRU07CisKKyAgICAvKiBNYWtlIEJFRk9SRSBwb2ludCB0byB0aGUgZXF1aXZhbGVudCBvZmZzZXQgaW4gQVJHWiB0aGF0IGl0CisgICAgICAgdXNlZCB0byBoYXZlIGluICpQQVJHWiBpbmNhc2UgcmVhbGxvYygpIG1vdmVkIHRoZSBibG9jay4gICovCisgICAgYmVmb3JlID0gYXJneiArIG9mZnNldDsKKworICAgIC8qIE1vdmUgdGhlIEFSR1ogZW50cmllcyBzdGFydGluZyBhdCBCRUZPUkUgdXAgaW50byB0aGUgbmV3CisgICAgICAgc3BhY2UgYXQgdGhlIGVuZCAtLSBtYWtpbmcgcm9vbSB0byBjb3B5IEVOVFJZIGludG8gdGhlCisgICAgICAgcmVzdWx0aW5nIGdhcC4gICovCisgICAgbWVtbW92ZSAoYmVmb3JlICsgZW50cnlfbGVuLCBiZWZvcmUsICpwYXJnel9sZW4gLSBvZmZzZXQpOworICAgIG1lbWNweSAgKGJlZm9yZSwgZW50cnksIGVudHJ5X2xlbik7CisKKyAgICAvKiBBc3NpZ24gbmV3IHZhbHVlcy4gICovCisgICAgKnBhcmd6ID0gYXJnejsKKyAgICAqcGFyZ3pfbGVuID0gYXJnel9sZW47CisgIH0KKworICByZXR1cm4gMDsKK30KKworCitjaGFyICoKK2FyZ3pfbmV4dCAoY2hhciAqYXJneiwgc2l6ZV90IGFyZ3pfbGVuLCBjb25zdCBjaGFyICplbnRyeSkKK3sKKyAgYXNzZXJ0ICgoYXJneiAmJiBhcmd6X2xlbikgfHwgKCFhcmd6ICYmICFhcmd6X2xlbikpOworCisgIGlmIChlbnRyeSkKKyAgICB7CisgICAgICAvKiBFaXRoZXIgQVJHWi9BUkdaX0xFTiBpcyBlbXB0eSwgb3IgRU5UUlkgcG9pbnRzIGludG8gYW4gYWRkcmVzcworCSB3aXRoaW4gdGhlIEFSR1ogdmVjdG9yLiAgKi8KKyAgICAgIGFzc2VydCAoKCFhcmd6ICYmICFhcmd6X2xlbikKKwkgICAgICB8fCAoKGFyZ3ogPD0gZW50cnkpICYmIChlbnRyeSA8IChhcmd6ICsgYXJnel9sZW4pKSkpOworCisgICAgICAvKiBNb3ZlIHRvIHRoZSBjaGFyIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSB0ZXJtaW5hdGluZworCSAnXDAnIG9mIEVOVFJZLiAgKi8KKyAgICAgIGVudHJ5ID0gMSsgc3RyY2hyIChlbnRyeSwgRU9TX0NIQVIpOworCisgICAgICAvKiBSZXR1cm4gZWl0aGVyIHRoZSBuZXcgRU5UUlksIG9yIGVsc2UgTlVMTCBpZiBBUkdaIGlzCisJIGV4aGF1c3RlZC4gICovCisgICAgICByZXR1cm4gKGVudHJ5ID49IGFyZ3ogKyBhcmd6X2xlbikgPyAwIDogKGNoYXIgKikgZW50cnk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgZmxhZ2dlZCBhcyBhIHByb2dyYW1tZXIgZXJyb3IsCisJIHNpbmNlIHN0YXJ0aW5nIGFuIGFyZ3pfbmV4dCBsb29wIHdpdGggdGhlIGl0ZXJhdG9yIHNldAorCSB0byBBUkdaIGlzIHNhZmVyLiAgVG8gcHJlc2VydmUgc2VtYW50aWNzLCBoYW5kbGUgdGhlIE5VTEwKKwkgY2FzZSBieSByZXR1cm5pbmcgdGhlIHN0YXJ0IG9mIEFSR1ogKGlmIGFueSkuICAqLworICAgICAgaWYgKGFyZ3pfbGVuID4gMCkKKwlyZXR1cm4gYXJnejsKKyAgICAgIGVsc2UKKwlyZXR1cm4gMDsKKyAgICB9Cit9CisKKwordm9pZAorYXJnel9zdHJpbmdpZnkgKGNoYXIgKmFyZ3osIHNpemVfdCBhcmd6X2xlbiwgaW50IHNlcCkKK3sKKyAgYXNzZXJ0ICgoYXJneiAmJiBhcmd6X2xlbikgfHwgKCFhcmd6ICYmICFhcmd6X2xlbikpOworCisgIGlmIChzZXApCisgICAgeworICAgICAgLS1hcmd6X2xlbjsJCS8qIGRvbid0IHN0cmluZ2lmeSB0aGUgdGVybWluYXRpbmcgRU9TICovCisgICAgICB3aGlsZSAoLS1hcmd6X2xlbiA+IDApCisJeworCSAgaWYgKGFyZ3pbYXJnel9sZW5dID09IEVPU19DSEFSKQorCSAgICBhcmd6W2FyZ3pfbGVuXSA9IHNlcDsKKwl9CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvYXJnel8uaCBiL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9hcmd6Xy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NTc1NzUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvYXJnel8uaApAQCAtMCwwICsxLDY4IEBACisvKiBsdF9fYXJnei5oIC0tIGludGVybmFsIGFyZ3ogaW50ZXJmYWNlIGZvciBub24tZ2xpYmMgc3lzdGVtcworCisgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAwNAorCisgICBOT1RFOiBUaGUgY2Fub25pY2FsIHNvdXJjZSBvZiB0aGlzIGZpbGUgaXMgbWFpbnRhaW5lZCB3aXRoIHRoZQorICAgR05VIExpYnRvb2wgcGFja2FnZS4gIFJlcG9ydCBidWdzIHRvIGJ1Zy1saWJ0b29sQGdudS5vcmcuCisKK0dOVSBMaWJsdGRsIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCit2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK0FzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK2lmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKK2lzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK0dOVSBMaWJsdGRsIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYWxvbmcgd2l0aCBHTlUgTGlibHRkbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCBhCitjb3B5IGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwuaHRtbCwKK29yIG9idGFpbmVkIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSAgVVNBCisqLworCisjaWYgIWRlZmluZWQoTFRfX0FSR1pfSCkKKyNkZWZpbmUgTFRfX0FSR1pfSCAxCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNkZWZpbmUgX19uZWVkX2Vycm9yX3QKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaWYgZGVmaW5lZChMVERMKQorIyAgaW5jbHVkZSAibHRfX2dsaWJjLmgiCisjICBpbmNsdWRlICJsdF9zeXN0ZW0uaCIKKyNlbHNlCisjICBkZWZpbmUgTFRfU0NPUEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK0xUX1NDT1BFIGVycm9yX3QgYXJnel9hcHBlbmQJKGNoYXIgKipwYXJneiwgc2l6ZV90ICpwYXJnel9sZW4sCisJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pOworTFRfU0NPUEUgZXJyb3JfdCBhcmd6X2NyZWF0ZV9zZXAoY29uc3QgY2hhciAqc3RyLCBpbnQgZGVsaW0sCisJCQkJIGNoYXIgKipwYXJneiwgc2l6ZV90ICpwYXJnel9sZW4pOworTFRfU0NPUEUgZXJyb3JfdCBhcmd6X2luc2VydAkoY2hhciAqKnBhcmd6LCBzaXplX3QgKnBhcmd6X2xlbiwKKwkJCQkgY2hhciAqYmVmb3JlLCBjb25zdCBjaGFyICplbnRyeSk7CitMVF9TQ09QRSBjaGFyICoJIGFyZ3pfbmV4dAkoY2hhciAqYXJneiwgc2l6ZV90IGFyZ3pfbGVuLAorCQkJCSBjb25zdCBjaGFyICplbnRyeSk7CitMVF9TQ09QRSB2b2lkCSBhcmd6X3N0cmluZ2lmeQkoY2hhciAqYXJneiwgc2l6ZV90IGFyZ3pfbGVuLCBpbnQgc2VwKTsKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworI2lmICFkZWZpbmVkKExUREwpCisjICB1bmRlZiBMVF9TQ09QRQorI2VuZGlmCisKKyNlbmRpZiAvKiFkZWZpbmVkKExUX19BUkdaX0gpKi8KZGlmZiAtLWdpdCBhL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9jb25maWctaC5pbiBiL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9jb25maWctaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDA2OTljCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbGlidG9vbC9saWJsdGRsL2NvbmZpZy1oLmluCkBAIC0wLDAgKzEsMTcyIEBACisvKiBjb25maWctaC5pbi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5hYyBieSBhdXRvaGVhZGVyLiAgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhcmd6X2FkZCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9BUkdaX0FERAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGFyZ3pfYXBwZW5kJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0FSR1pfQVBQRU5ECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYXJnel9jb3VudCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9BUkdaX0NPVU5UCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYXJnel9jcmVhdGVfc2VwJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0FSR1pfQ1JFQVRFX1NFUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFyZ3ouaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9BUkdaX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhcmd6X2luc2VydCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9BUkdaX0lOU0VSVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGFyZ3pfbmV4dCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9BUkdaX05FWFQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhcmd6X3N0cmluZ2lmeScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9BUkdaX1NUUklOR0lGWQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNsb3NlZGlyJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0NMT1NFRElSCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgY3lnd2luX2NvbnZfcGF0aCcsIGFuZCB0byAwIGlmCisgICB5b3UgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX0NZR1dJTl9DT05WX1BBVEgKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkaXJlbnQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ESVJFTlRfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIEdOVSBkbGQgbGlicmFyeS4gKi8KKyN1bmRlZiBIQVZFX0RMRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRsZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0RMRF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZGxlcnJvcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9ETEVSUk9SCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGxmY24uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ETEZDTl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGwuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ETF9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgX2R5bGRfZnVuY19sb29rdXAgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9EWUxECisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBlcnJvcl90Jy4gKi8KKyN1bmRlZiBIQVZFX0VSUk9SX1QKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0lOVFRZUEVTX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBsaWJkbCBsaWJyYXJ5IG9yIGVxdWl2YWxlbnQuICovCisjdW5kZWYgSEFWRV9MSUJETAorCisvKiBEZWZpbmUgaWYgbGliZGxsb2FkZXIgd2lsbCBiZSBidWlsdCBvbiB0aGlzIHBsYXRmb3JtICovCisjdW5kZWYgSEFWRV9MSUJETExPQURFUgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1hY2gtby9keWxkLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTUFDSF9PX0RZTERfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX01FTU9SWV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgb3BlbmRpcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9PUEVORElSCisKKy8qIERlZmluZSBpZiBsaWJ0b29sIGNhbiBleHRyYWN0IHN5bWJvbCBsaXN0cyBmcm9tIG9iamVjdCBmaWxlcy4gKi8KKyN1bmRlZiBIQVZFX1BSRUxPQURFRF9TWU1CT0xTCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVhZGRpcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9SRUFERElSCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2hsX2xvYWQgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TSExfTE9BRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NURElOVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RETElCX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RSSU5HU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RSSU5HX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJsY2F0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUkxDQVQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJsY3B5JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUkxDUFkKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvZGwuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfRExfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zdGF0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1NUQVRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19UWVBFU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfVU5JU1REX0gKKworLyogVGhpcyB2YWx1ZSBpcyBzZXQgdG8gMSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzeXN0ZW0gYXJneiBmYWNpbGl0eSB3b3JrcyAqLworI3VuZGVmIEhBVkVfV09SS0lOR19BUkdaCisKKy8qIERlZmluZSBpZiB0aGUgT1MgbmVlZHMgaGVscCB0byBsb2FkIGRlcGVuZGVudCBsaWJyYXJpZXMgZm9yIGRsb3BlbigpLiAqLworI3VuZGVmIExURExfRExPUEVOX0RFUExJQlMKKworLyogRGVmaW5lIHRvIHRoZSBzeXN0ZW0gZGVmYXVsdCBsaWJyYXJ5IHNlYXJjaCBwYXRoLiAqLworI3VuZGVmIExUX0RMU0VBUkNIX1BBVEgKKworLyogVGhlIGFyY2hpdmUgZXh0ZW5zaW9uICovCisjdW5kZWYgTFRfTElCRVhUCisKKy8qIERlZmluZSB0byB0aGUgZXh0ZW5zaW9uIHVzZWQgZm9yIHJ1bnRpbWUgbG9hZGFibGUgbW9kdWxlcywgc2F5LCAiLnNvIi4gKi8KKyN1bmRlZiBMVF9NT0RVTEVfRVhUCisKKy8qIERlZmluZSB0byB0aGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdGhhdCBkZXRlcm1pbmVzIHRoZSBydW4tdGltZQorICAgbW9kdWxlIHNlYXJjaCBwYXRoLiAqLworI3VuZGVmIExUX01PRFVMRV9QQVRIX1ZBUgorCisvKiBEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3RvcnkgaW4gd2hpY2ggbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLgorICAgKi8KKyN1bmRlZiBMVF9PQkpESVIKKworLyogRGVmaW5lIGlmIGRsc3ltKCkgcmVxdWlyZXMgYSBsZWFkaW5nIHVuZGVyc2NvcmUgaW4gc3ltYm9sIG5hbWVzLiAqLworI3VuZGVmIE5FRURfVVNDT1JFCisKKy8qIE5hbWUgb2YgcGFja2FnZSAqLworI3VuZGVmIFBBQ0tBR0UKKworLyogRGVmaW5lIHRvIHRoZSBhZGRyZXNzIHdoZXJlIGJ1ZyByZXBvcnRzIGZvciB0aGlzIHBhY2thZ2Ugc2hvdWxkIGJlIHNlbnQuICovCisjdW5kZWYgUEFDS0FHRV9CVUdSRVBPUlQKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfTkFNRQorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9TVFJJTkcKKworLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfVEFSTkFNRQorCisvKiBEZWZpbmUgdG8gdGhlIGhvbWUgcGFnZSBmb3IgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfVVJMCisKKy8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9WRVJTSU9OCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLworI3VuZGVmIFNURENfSEVBREVSUworCisvKiBWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlICovCisjdW5kZWYgVkVSU0lPTgorCisvKiBEZWZpbmUgc28gdGhhdCBnbGliYy9nbnVsaWIgYXJncC5oIGRvZXMgbm90IHR5cGVkZWYgZXJyb3JfdC4gKi8KKyN1bmRlZiBfX2Vycm9yX3RfZGVmaW5lZAorCisvKiBEZWZpbmUgdG8gYSB0eXBlIHRvIHVzZSBmb3IgYGVycm9yX3QnIGlmIGl0IGlzIG5vdCBvdGhlcndpc2UgYXZhaWxhYmxlLiAqLworI3VuZGVmIGVycm9yX3QKZGlmZiAtLWdpdCBhL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9jb25maWd1cmUgYi9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvY29uZmlndXJlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVhMWVkZDAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvY29uZmlndXJlCkBAIC0wLDAgKzEsMTQxMTIgQEAKKyMhIC9iaW4vc2gKKyMgR3Vlc3MgdmFsdWVzIGZvciBzeXN0ZW0tZGVwZW5kZW50IHZhcmlhYmxlcyBhbmQgY3JlYXRlIE1ha2VmaWxlcy4KKyMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY1IGZvciBsaWJsdGRsIDIuMi4xMC4KKyMKKyMgUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LgorIworIworIyBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisjIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjCisjCisjIFRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNNHNoIEluaXRpYWxpemF0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAjKAorICAqcG9zaXgqKSA6CisgICAgc2V0IC1vIHBvc2l4IDs7ICMoCisgICopIDoKKyAgICAgOzsKK2VzYWMKK2ZpCisKKworYXNfbmw9JworJworZXhwb3J0IGFzX25sCisjIFByaW50aW5nIGEgbG9uZyBzdHJpbmcgY3Jhc2hlcyBTb2xhcmlzIDcgL3Vzci9iaW4vcHJpbnRmLgorYXNfZWNobz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KKyMgUHJlZmVyIGEga3NoIHNoZWxsIGJ1aWx0aW4gb3ZlciBhbiBleHRlcm5hbCBwcmludGYgcHJvZ3JhbSBvbiBTb2xhcmlzLAorIyBidXQgd2l0aG91dCB3YXN0aW5nIGZvcmtzIGZvciBiYXNoIG9yIHpzaC4KK2lmIHRlc3QgLXogIiRCQVNIX1ZFUlNJT04kWlNIX1ZFUlNJT04iIFwKKyAgICAmJiAodGVzdCAiWGBwcmludCAtciAtLSAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50IC1yIC0tJworICBhc19lY2hvX249J3ByaW50IC1ybiAtLScKK2VsaWYgKHRlc3QgIlhgcHJpbnRmICVzICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnRmICVzXG4nCisgIGFzX2VjaG9fbj0ncHJpbnRmICVzJworZWxzZQorICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1uIC1uICRhc19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYXNfZWNobyI7IHRoZW4KKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgL3Vzci91Y2IvZWNobyAtbiAiJDEkYXNfbmwiJworICAgIGFzX2VjaG9fbj0nL3Vzci91Y2IvZWNobyAtbicKKyAgZWxzZQorICAgIGFzX2VjaG9fYm9keT0nZXZhbCBleHByICJYJDEiIDogIlhcXCguKlxcKSInCisgICAgYXNfZWNob19uX2JvZHk9J2V2YWwKKyAgICAgIGFyZz0kMTsKKyAgICAgIGNhc2UgJGFyZyBpbiAjKAorICAgICAgKiIkYXNfbmwiKikKKwlleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpJGFzX25sIjsKKwlhcmc9YGV4cHIgIlgkYXJnIiA6ICIuKiRhc19ubFxcKC4qXFwpImA7OworICAgICAgZXNhYzsKKyAgICAgIGV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkiIHwgdHIgLWQgIiRhc19ubCIKKyAgICAnCisgICAgZXhwb3J0IGFzX2VjaG9fbl9ib2R5CisgICAgYXNfZWNob19uPSdzaCAtYyAkYXNfZWNob19uX2JvZHkgYXNfZWNobycKKyAgZmkKKyAgZXhwb3J0IGFzX2VjaG9fYm9keQorICBhc19lY2hvPSdzaCAtYyAkYXNfZWNob19ib2R5IGFzX2VjaG8nCitmaQorCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIFBBVEhfU0VQQVJBVE9SPToKKyAgKFBBVEg9Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgJiYgeworICAgIChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIHx8CisgICAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgfQorZmkKKworCisjIElGUworIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4gIFF1b3RpbmcgaXMKKyMgdGhlcmUgdG8gcHJldmVudCBlZGl0b3JzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgc3BhY2UtdGFiLgorIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCisjIHNwbGl0dGluZyBieSBzZXR0aW5nIElGUyB0byBlbXB0eSB2YWx1ZS4pCitJRlM9IiAiIgkkYXNfbmwiCisKKyMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIGRpcmVjdG9yeSBzZXBhcmF0b3IuCitjYXNlICQwIGluICMoKAorICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7CisgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgICAgOzsKK2VzYWMKKyMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKyMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBwYXRoLgoraWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgorICBhc19teXNlbGY9JDAKK2ZpCitpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCisgICRhc19lY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCisgIGV4aXQgMQorZmkKKworIyBVbnNldCB2YXJpYWJsZXMgdGhhdCB3ZSBkbyBub3QgbmVlZCBhbmQgd2hpY2ggY2F1c2UgYnVncyAoZS5nLiBpbgorIyBwcmUtMy4wIFVXSU4ga3NoKS4gIEJ1dCBkbyBub3QgY2F1c2UgYnVncyBpbiBiYXNoIDIuMDE7IHRoZSAifHwgZXhpdCAxIgorIyBzdXBwcmVzc2VzIGFueSAiU2VnbWVudGF0aW9uIGZhdWx0IiBtZXNzYWdlIHRoZXJlLiAgJygoJyBjb3VsZAorIyB0cmlnZ2VyIGEgYnVnIGluIHBka3NoIDUuMi4xNC4KK2ZvciBhc192YXIgaW4gQkFTSF9FTlYgRU5WIE1BSUwgTUFJTFBBVEgKK2RvIGV2YWwgdGVzdCB4XCR7JGFzX3ZhcitzZXR9ID0geHNldCBcCisgICYmICggKHVuc2V0ICRhc192YXIpIHx8IGV4aXQgMSkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0ICRhc192YXIgfHwgOgorZG9uZQorUFMxPSckICcKK1BTMj0nPiAnCitQUzQ9JysgJworCisjIE5MUyBudWlzYW5jZXMuCitMQ19BTEw9QworZXhwb3J0IExDX0FMTAorTEFOR1VBR0U9QworZXhwb3J0IExBTkdVQUdFCisKKyMgQ0RQQVRILgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCitpZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgPSB4OyB0aGVuCisgIGFzX2JvdXJuZV9jb21wYXRpYmxlPSJpZiB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwiICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uIFwkezErXCJcJEBcIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICdcJHsxK1wiXCRAXCJ9Jz0nXCJcJEBcIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBcYChzZXQgLW8pIDI+L2Rldi9udWxsXGAgaW4gIygKKyAgKnBvc2l4KikgOgorICAgIHNldCAtbyBwb3NpeCA7OyAjKAorICAqKSA6CisgICAgIDs7Citlc2FjCitmaQorIgorICBhc19yZXF1aXJlZD0iYXNfZm5fcmV0dXJuICgpIHsgKGV4aXQgXCQxKTsgfQorYXNfZm5fc3VjY2VzcyAoKSB7IGFzX2ZuX3JldHVybiAwOyB9Cithc19mbl9mYWlsdXJlICgpIHsgYXNfZm5fcmV0dXJuIDE7IH0KK2FzX2ZuX3JldF9zdWNjZXNzICgpIHsgcmV0dXJuIDA7IH0KK2FzX2ZuX3JldF9mYWlsdXJlICgpIHsgcmV0dXJuIDE7IH0KKworZXhpdGNvZGU9MAorYXNfZm5fc3VjY2VzcyB8fCB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fc3VjY2VzcyBmYWlsZWQuOyB9Cithc19mbl9mYWlsdXJlICYmIHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9mYWlsdXJlIHN1Y2NlZWRlZC47IH0KK2FzX2ZuX3JldF9zdWNjZXNzIHx8IHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9yZXRfc3VjY2VzcyBmYWlsZWQuOyB9Cithc19mbl9yZXRfZmFpbHVyZSAmJiB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fcmV0X2ZhaWx1cmUgc3VjY2VlZGVkLjsgfQoraWYgKCBzZXQgeDsgYXNfZm5fcmV0X3N1Y2Nlc3MgeSAmJiB0ZXN0IHggPSBcIlwkMVwiICk7IHRoZW4gOgorCitlbHNlCisgIGV4aXRjb2RlPTE7IGVjaG8gcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgbm90IHNhdmVkLgorZmkKK3Rlc3QgeFwkZXhpdGNvZGUgPSB4MCB8fCBleGl0IDEiCisgIGFzX3N1Z2dlc3RlZD0iICBhc19saW5lbm9fMT0iO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkJExJTkVOTzthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCIgYXNfbGluZW5vXzFhPVwkTElORU5PCisgIGFzX2xpbmVub18yPSI7YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQkTElORU5PO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkIiBhc19saW5lbm9fMmE9XCRMSU5FTk8KKyAgZXZhbCAndGVzdCBcInhcJGFzX2xpbmVub18xJ1wkYXNfcnVuJ1wiICE9IFwieFwkYXNfbGluZW5vXzInXCRhc19ydW4nXCIgJiYKKyAgdGVzdCBcInhcYGV4cHIgXCRhc19saW5lbm9fMSdcJGFzX3J1bicgKyAxXGBcIiA9IFwieFwkYXNfbGluZW5vXzInXCRhc19ydW4nXCInIHx8IGV4aXQgMQorCisgIHRlc3QgLW4gXCJcJHtaU0hfVkVSU0lPTitzZXR9XCR7QkFTSF9WRVJTSU9OK3NldH1cIiB8fCAoCisgICAgRUNITz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCisgICAgRUNITz1cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE8KKyAgICBFQ0hPPVwkRUNIT1wkRUNIT1wkRUNIT1wkRUNIT1wkRUNIT1wkRUNITworICAgIFBBVEg9L2VtcHR5IEZQQVRIPS9lbXB0eTsgZXhwb3J0IFBBVEggRlBBVEgKKyAgICB0ZXN0IFwiWFxgcHJpbnRmICVzIFwkRUNIT1xgXCIgPSBcIlhcJEVDSE9cIiBcXAorICAgICAgfHwgdGVzdCBcIlhcYHByaW50IC1yIC0tIFwkRUNIT1xgXCIgPSBcIlhcJEVDSE9cIiApIHx8IGV4aXQgMQordGVzdCBcJCgoIDEgKyAxICkpID0gMiB8fCBleGl0IDEiCisgIGlmIChldmFsICIkYXNfcmVxdWlyZWQiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCitlbHNlCisgIGFzX2hhdmVfcmVxdWlyZWQ9bm8KK2ZpCisgIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geHllcyAmJiAoZXZhbCAiJGFzX3N1Z2dlc3RlZCIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKworZWxzZQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCithc19mb3VuZD1mYWxzZQorZm9yIGFzX2RpciBpbiAvYmluJFBBVEhfU0VQQVJBVE9SL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBhc19mb3VuZD06CisgIGNhc2UgJGFzX2RpciBpbiAjKAorCSAvKikKKwkgICBmb3IgYXNfYmFzZSBpbiBzaCBiYXNoIGtzaCBzaDU7IGRvCisJICAgICAjIFRyeSBvbmx5IHNoZWxscyB0aGF0IGV4aXN0LCB0byBzYXZlIHNldmVyYWwgZm9ya3MuCisJICAgICBhc19zaGVsbD0kYXNfZGlyLyRhc19iYXNlCisJICAgICBpZiB7IHRlc3QgLWYgIiRhc19zaGVsbCIgfHwgdGVzdCAtZiAiJGFzX3NoZWxsLmV4ZSI7IH0gJiYKKwkJICAgIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3JlcXVpcmVkIiB8IGFzX3J1bj1hICIkYXNfc2hlbGwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgQ09ORklHX1NIRUxMPSRhc19zaGVsbCBhc19oYXZlX3JlcXVpcmVkPXllcworCQkgICBpZiB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19zdWdnZXN0ZWQiIHwgYXNfcnVuPWEgIiRhc19zaGVsbCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOgorICBicmVhayAyCitmaQorZmkKKwkgICBkb25lOzsKKyAgICAgICBlc2FjCisgIGFzX2ZvdW5kPWZhbHNlCitkb25lCiskYXNfZm91bmQgfHwgeyBpZiB7IHRlc3QgLWYgIiRTSEVMTCIgfHwgdGVzdCAtZiAiJFNIRUxMLmV4ZSI7IH0gJiYKKwkgICAgICB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19yZXF1aXJlZCIgfCBhc19ydW49YSAiJFNIRUxMIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIENPTkZJR19TSEVMTD0kU0hFTEwgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKK2ZpOyB9CitJRlM9JGFzX3NhdmVfSUZTCisKKworICAgICAgaWYgdGVzdCAieCRDT05GSUdfU0hFTEwiICE9IHg7IHRoZW4gOgorICAjIFdlIGNhbm5vdCB5ZXQgYXNzdW1lIGEgZGVjZW50IHNoZWxsLCBzbyB3ZSBoYXZlIHRvIHByb3ZpZGUgYQorCSMgbmV1dHJhbGl6YXRpb24gdmFsdWUgZm9yIHNoZWxscyB3aXRob3V0IHVuc2V0OyBhbmQgdGhpcyBhbHNvCisJIyB3b3JrcyBhcm91bmQgc2hlbGxzIHRoYXQgY2Fubm90IHVuc2V0IG5vbmV4aXN0ZW50IHZhcmlhYmxlcy4KKwlCQVNIX0VOVj0vZGV2L251bGwKKwlFTlY9L2Rldi9udWxsCisJKHVuc2V0IEJBU0hfRU5WKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQkFTSF9FTlYgRU5WCisJZXhwb3J0IENPTkZJR19TSEVMTAorCWV4ZWMgIiRDT05GSUdfU0hFTEwiICIkYXNfbXlzZWxmIiAkezErIiRAIn0KK2ZpCisKKyAgICBpZiB0ZXN0IHgkYXNfaGF2ZV9yZXF1aXJlZCA9IHhubzsgdGhlbiA6CisgICRhc19lY2hvICIkMDogVGhpcyBzY3JpcHQgcmVxdWlyZXMgYSBzaGVsbCBtb3JlIG1vZGVybiB0aGFuIGFsbCIKKyAgJGFzX2VjaG8gIiQwOiB0aGUgc2hlbGxzIHRoYXQgSSBmb3VuZCBvbiB5b3VyIHN5c3RlbS4iCisgIGlmIHRlc3QgeCR7WlNIX1ZFUlNJT04rc2V0fSA9IHhzZXQgOyB0aGVuCisgICAgJGFzX2VjaG8gIiQwOiBJbiBwYXJ0aWN1bGFyLCB6c2ggJFpTSF9WRVJTSU9OIGhhcyBidWdzIGFuZCBzaG91bGQiCisgICAgJGFzX2VjaG8gIiQwOiBiZSB1cGdyYWRlZCB0byB6c2ggNC4zLjQgb3IgbGF0ZXIuIgorICBlbHNlCisgICAgJGFzX2VjaG8gIiQwOiBQbGVhc2UgdGVsbCBidWctYXV0b2NvbmZAZ251Lm9yZyBhbmQKKyQwOiBidWctbGlidG9vbEBnbnUub3JnIGFib3V0IHlvdXIgc3lzdGVtLCBpbmNsdWRpbmcgYW55CiskMDogZXJyb3IgcG9zc2libHkgb3V0cHV0IGJlZm9yZSB0aGlzIG1lc3NhZ2UuIFRoZW4gaW5zdGFsbAorJDA6IGEgbW9kZXJuIHNoZWxsLCBvciBtYW51YWxseSBydW4gdGhlIHNjcmlwdCB1bmRlciBzdWNoIGEKKyQwOiBzaGVsbCBpZiB5b3UgZG8gaGF2ZSBvbmUuIgorICBmaQorICBleGl0IDEKK2ZpCitmaQorZmkKK1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CitleHBvcnQgU0hFTEwKKyMgVW5zZXQgbW9yZSB2YXJpYWJsZXMga25vd24gdG8gaW50ZXJmZXJlIHdpdGggYmVoYXZpb3Igb2YgY29tbW9uIHRvb2xzLgorQ0xJQ09MT1JfRk9SQ0U9IEdSRVBfT1BUSU9OUz0KK3Vuc2V0IENMSUNPTE9SX0ZPUkNFIEdSRVBfT1BUSU9OUworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggU2hlbGwgRnVuY3Rpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIGFzX2ZuX3Vuc2V0IFZBUgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgUG9ydGFibHkgdW5zZXQgVkFSLgorYXNfZm5fdW5zZXQgKCkKK3sKKyAgeyBldmFsICQxPTsgdW5zZXQgJDE7fQorfQorYXNfdW5zZXQ9YXNfZm5fdW5zZXQKKworIyBhc19mbl9zZXRfc3RhdHVzIFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuCithc19mbl9zZXRfc3RhdHVzICgpCit7CisgIHJldHVybiAkMQorfSAjIGFzX2ZuX3NldF9zdGF0dXMKKworIyBhc19mbl9leGl0IFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBFeGl0IHRoZSBzaGVsbCB3aXRoIFNUQVRVUywgZXZlbiBpbiBhICJ0cmFwIDAiIG9yICJzZXQgLWUiIGNvbnRleHQuCithc19mbl9leGl0ICgpCit7CisgIHNldCArZQorICBhc19mbl9zZXRfc3RhdHVzICQxCisgIGV4aXQgJDEKK30gIyBhc19mbl9leGl0CisKKyMgYXNfZm5fbWtkaXJfcAorIyAtLS0tLS0tLS0tLS0tCisjIENyZWF0ZSAiJGFzX2RpciIgYXMgYSBkaXJlY3RvcnksIGluY2x1ZGluZyBwYXJlbnRzIGlmIG5lY2Vzc2FyeS4KK2FzX2ZuX21rZGlyX3AgKCkKK3sKKworICBjYXNlICRhc19kaXIgaW4gIygKKyAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OworICBlc2FjCisgIHRlc3QgLWQgIiRhc19kaXIiIHx8IGV2YWwgJGFzX21rZGlyX3AgfHwgeworICAgIGFzX2RpcnM9CisgICAgd2hpbGUgOjsgZG8KKyAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAorICAgICAgKlwnKikgYXNfcWRpcj1gJGFzX2VjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIycoCisgICAgICAqKSBhc19xZGlyPSRhc19kaXI7OworICAgICAgZXNhYworICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCisgICAgZG9uZQorICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKyAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCBhc19mbl9lcnJvciAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIKKworCit9ICMgYXNfZm5fbWtkaXJfcAorIyBhc19mbl9hcHBlbmQgVkFSIFZBTFVFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXBwZW5kIHRoZSB0ZXh0IGluIFZBTFVFIHRvIHRoZSBlbmQgb2YgdGhlIGRlZmluaXRpb24gY29udGFpbmVkIGluIFZBUi4gVGFrZQorIyBhZHZhbnRhZ2Ugb2YgYW55IHNoZWxsIG9wdGltaXphdGlvbnMgdGhhdCBhbGxvdyBhbW9ydGl6ZWQgbGluZWFyIGdyb3d0aCBvdmVyCisjIHJlcGVhdGVkIGFwcGVuZHMsIGluc3RlYWQgb2YgdGhlIHR5cGljYWwgcXVhZHJhdGljIGdyb3d0aCBwcmVzZW50IGluIG5haXZlCisjIGltcGxlbWVudGF0aW9ucy4KK2lmIChldmFsICJhc192YXI9MTsgYXNfdmFyKz0yOyB0ZXN0IHhcJGFzX3ZhciA9IHgxMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxKz1cJDIKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxPVwkJDFcJDIKKyAgfQorZmkgIyBhc19mbl9hcHBlbmQKKworIyBhc19mbl9hcml0aCBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gYXJpdGhtZXRpYyBldmFsdWF0aW9uIG9uIHRoZSBBUkdzLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUKKyMgZ2xvYmFsICRhc192YWwuIFRha2UgYWR2YW50YWdlIG9mIHNoZWxscyB0aGF0IGNhbiBhdm9pZCBmb3Jrcy4gVGhlIGFyZ3VtZW50cworIyBtdXN0IGJlIHBvcnRhYmxlIGFjcm9zcyAkKCgpKSBhbmQgZXhwci4KK2lmIChldmFsICJ0ZXN0IFwkKCggMSArIDEgKSkgPSAyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPSQoKCAkKiApKQorICB9JworZWxzZQorICBhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPWBleHByICIkQCIgfHwgdGVzdCAkPyAtZXEgMWAKKyAgfQorZmkgIyBhc19mbl9hcml0aAorCisKKyMgYXNfZm5fZXJyb3IgRVJST1IgW0xJTkVOTyBMT0dfRkRdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPdXRwdXQgImBiYXNlbmFtZSAkMGA6IGVycm9yOiBFUlJPUiIgdG8gc3RkZXJyLiBJZiBMSU5FTk8gYW5kIExPR19GRCBhcmUKKyMgcHJvdmlkZWQsIGFsc28gb3V0cHV0IHRoZSBlcnJvciB0byBMT0dfRkQsIHJlZmVyZW5jaW5nIExJTkVOTy4gVGhlbiBleGl0IHRoZQorIyBzY3JpcHQgd2l0aCBzdGF0dXMgJD8sIHVzaW5nIDEgaWYgdGhhdCB3YXMgMC4KK2FzX2ZuX2Vycm9yICgpCit7CisgIGFzX3N0YXR1cz0kPzsgdGVzdCAkYXNfc3RhdHVzIC1lcSAwICYmIGFzX3N0YXR1cz0xCisgIGlmIHRlc3QgIiQzIjsgdGhlbgorICAgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDIifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogJDEiID4mJDMKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6ICQxIiA+JjIKKyAgYXNfZm5fZXhpdCAkYXNfc3RhdHVzCit9ICMgYXNfZm5fZXJyb3IKKworaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKKyAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCisgIGFzX2V4cHI9ZXhwcgorZWxzZQorICBhc19leHByPWZhbHNlCitmaQorCitpZiAoYmFzZW5hbWUgLS0gLykgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLS0gLyAyPiYxYCIgPSAiWC8iOyB0aGVuCisgIGFzX2Jhc2VuYW1lPWJhc2VuYW1lCitlbHNlCisgIGFzX2Jhc2VuYW1lPWZhbHNlCitmaQorCitpZiAoYXNfZGlyPWBkaXJuYW1lIC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfZGlybmFtZT1kaXJuYW1lCitlbHNlCisgIGFzX2Rpcm5hbWU9ZmFsc2UKK2ZpCisKK2FzX21lPWAkYXNfYmFzZW5hbWUgLS0gIiQwIiB8fAorJGFzX2V4cHIgWC8iJDAiIDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYLyIkMCIgfAorICAgIHNlZCAnL14uKlwvXChbXi9dW14vXSpcKVwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXC9cKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXC9cKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKworIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLgorYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCithc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKK2FzX2NyX0xldHRlcnM9JGFzX2NyX2xldHRlcnMkYXNfY3JfTEVUVEVSUworYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JworYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCisKKworICBhc19saW5lbm9fMT0kTElORU5PIGFzX2xpbmVub18xYT0kTElORU5PCisgIGFzX2xpbmVub18yPSRMSU5FTk8gYXNfbGluZW5vXzJhPSRMSU5FTk8KKyAgZXZhbCAndGVzdCAieCRhc19saW5lbm9fMSckYXNfcnVuJyIgIT0gIngkYXNfbGluZW5vXzInJGFzX3J1biciICYmCisgIHRlc3QgInhgZXhwciAkYXNfbGluZW5vXzEnJGFzX3J1bicgKyAxYCIgPSAieCRhc19saW5lbm9fMickYXNfcnVuJyInIHx8IHsKKyAgIyBCbGFtZSBMZWUgRS4gTWNNYWhvbiAoMTkzMS0xOTg5KSBmb3Igc2VkJ3Mgc3ludGF4LiAgOi0pCisgIHNlZCAtbiAnCisgICAgcAorICAgIC9bJF1MSU5FTk8vPQorICAnIDwkYXNfbXlzZWxmIHwKKyAgICBzZWQgJworICAgICAgcy9bJF1MSU5FTk8uKi8mLS8KKyAgICAgIHQgbGluZW5vCisgICAgICBiCisgICAgICA6bGluZW5vCisgICAgICBOCisgICAgICA6bG9vcAorICAgICAgcy9bJF1MSU5FTk9cKFteJyRhc19jcl9hbG51bSdfXS4qXG5cKVwoLipcKS9cMlwxXDIvCisgICAgICB0IGxvb3AKKyAgICAgIHMvLVxuLiovLworICAgICcgPiRhc19tZS5saW5lbm8gJiYKKyAgY2htb2QgK3ggIiRhc19tZS5saW5lbm8iIHx8CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSAkYXNfbWUubGluZW5vOyByZXJ1biB3aXRoIGEgUE9TSVggc2hlbGwiID4mMjsgYXNfZm5fZXhpdCAxOyB9CisKKyAgIyBEb24ndCB0cnkgdG8gZXhlYyBhcyBpdCBjaGFuZ2VzICRbMF0sIGNhdXNpbmcgYWxsIHNvcnQgb2YgcHJvYmxlbXMKKyAgIyAodGhlIGRpcm5hbWUgb2YgJFswXSBpcyBub3QgdGhlIHBsYWNlIHdoZXJlIHdlIG1pZ2h0IGZpbmQgdGhlCisgICMgb3JpZ2luYWwgYW5kIHNvIG9uLiAgQXV0b2NvbmYgaXMgZXNwZWNpYWxseSBzZW5zaXRpdmUgdG8gdGhpcykuCisgIC4gIi4vJGFzX21lLmxpbmVubyIKKyAgIyBFeGl0IHN0YXR1cyBpcyB0aGF0IG9mIHRoZSBsYXN0IGNvbW1hbmQuCisgIGV4aXQKK30KKworRUNIT19DPSBFQ0hPX049IEVDSE9fVD0KK2Nhc2UgYGVjaG8gLW4geGAgaW4gIygoKCgoCistbiopCisgIGNhc2UgYGVjaG8gJ3h5XGMnYCBpbgorICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBzaW5nbGUgdGFiIGNoYXJhY3Rlci4KKyAgeHkpICBFQ0hPX0M9J1xjJzs7CisgICopICAgZWNobyBgZWNobyBrc2g4OCBidWcgb24gQUlYIDYuMWAgPiAvZGV2L251bGwKKyAgICAgICBFQ0hPX1Q9JwknOzsKKyAgZXNhYzs7CisqKQorICBFQ0hPX049Jy1uJzs7Citlc2FjCisKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCitpZiB0ZXN0IC1kIGNvbmYkJC5kaXI7IHRoZW4KKyAgcm0gLWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQorZWxzZQorICBybSAtZiBjb25mJCQuZGlyCisgIG1rZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKK2ZpCitpZiAoZWNobyA+Y29uZiQkLmZpbGUpIDI+L2Rldi9udWxsOyB0aGVuCisgIGlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFzX2xuX3M9J2xuIC1zJworICAgICMgLi4uIGJ1dCB0aGVyZSBhcmUgdHdvIGdvdGNoYXM6CisgICAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKyAgICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KKyAgICAjIEluIGJvdGggY2FzZXMsIHdlIGhhdmUgdG8gZGVmYXVsdCB0byBgY3AgLXAnLgorICAgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKyAgICAgIGFzX2xuX3M9J2NwIC1wJworICBlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFzX2xuX3M9bG4KKyAgZWxzZQorICAgIGFzX2xuX3M9J2NwIC1wJworICBmaQorZWxzZQorICBhc19sbl9zPSdjcCAtcCcKK2ZpCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZGlyL2NvbmYkJC5maWxlIGNvbmYkJC5maWxlCitybWRpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCisKK2lmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfbWtkaXJfcD0nbWtkaXIgLXAgIiRhc19kaXIiJworZWxzZQorICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAorICBhc19ta2Rpcl9wPWZhbHNlCitmaQorCitpZiB0ZXN0IC14IC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX3Rlc3RfeD0ndGVzdCAteCcKK2Vsc2UKKyAgaWYgbHMgLWRMIC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgYXNfbHNfTF9vcHRpb249TAorICBlbHNlCisgICAgYXNfbHNfTF9vcHRpb249CisgIGZpCisgIGFzX3Rlc3RfeD0nCisgICAgZXZhbCBzaCAtYyAnXCcnCisgICAgICBpZiB0ZXN0IC1kICIkMSI7IHRoZW4KKwl0ZXN0IC1kICIkMS8uIjsKKyAgICAgIGVsc2UKKwljYXNlICQxIGluICMoCisJLSopc2V0ICIuLyQxIjs7CisJZXNhYzsKKwljYXNlIGBscyAtbGQnJGFzX2xzX0xfb3B0aW9uJyAiJDEiIDI+L2Rldi9udWxsYCBpbiAjKCgKKwk/Pz9bc3hdKik6OzsqKWZhbHNlOztlc2FjO2ZpCisgICAgJ1wnJyBzaAorICAnCitmaQorYXNfZXhlY3V0YWJsZV9wPSRhc190ZXN0X3gKKworIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgorYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKworIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuCithc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorCitTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorCisKK3Rlc3QgLW4gIiRESkRJUiIgfHwgZXhlYyA3PCYwIDwvZGV2L251bGwKK2V4ZWMgNj4mMQorCisjIE5hbWUgb2YgdGhlIGhvc3QuCisjIGhvc3RuYW1lIG9uIHNvbWUgc3lzdGVtcyAoU1ZSMy4yLCBMaW51eCkgcmV0dXJucyBhIGJvZ3VzIGV4aXQgc3RhdHVzLAorIyBzbyB1bmFtZSBnZXRzIHJ1biB0b28uCithY19ob3N0bmFtZT1gKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKKworIworIyBJbml0aWFsaXphdGlvbnMuCisjCithY19kZWZhdWx0X3ByZWZpeD0vdXNyL2xvY2FsCithY19jbGVhbl9maWxlcz0KK2FjX2NvbmZpZ19saWJvYmpfZGlyPS4KK0xJQk9CSlM9Citjcm9zc19jb21waWxpbmc9bm8KK3N1YmRpcnM9CitNRkxBR1M9CitNQUtFRkxBR1M9CisKKyMgSWRlbnRpdHkgb2YgdGhpcyBwYWNrYWdlLgorUEFDS0FHRV9OQU1FPSdsaWJsdGRsJworUEFDS0FHRV9UQVJOQU1FPSdsaWJsdGRsJworUEFDS0FHRV9WRVJTSU9OPScyLjIuMTAnCitQQUNLQUdFX1NUUklORz0nbGlibHRkbCAyLjIuMTAnCitQQUNLQUdFX0JVR1JFUE9SVD0nYnVnLWxpYnRvb2xAZ251Lm9yZycKK1BBQ0tBR0VfVVJMPScnCisKK2FjX3VuaXF1ZV9maWxlPSJsdGRsLmMiCisjIEZhY3RvcmluZyBkZWZhdWx0IGhlYWRlcnMgZm9yIG1vc3QgdGVzdHMuCithY19pbmNsdWRlc19kZWZhdWx0PSJcCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICisjIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZmRlZiBTVERDX0hFQURFUlMKKyMgaW5jbHVkZSA8c3RkbGliLmg+CisjIGluY2x1ZGUgPHN0ZGRlZi5oPgorI2Vsc2UKKyMgaWZkZWYgSEFWRV9TVERMSUJfSAorIyAgaW5jbHVkZSA8c3RkbGliLmg+CisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NUUklOR19ICisjIGlmICFkZWZpbmVkIFNURENfSEVBREVSUyAmJiBkZWZpbmVkIEhBVkVfTUVNT1JZX0gKKyMgIGluY2x1ZGUgPG1lbW9yeS5oPgorIyBlbmRpZgorIyBpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RSSU5HU19ICisjIGluY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfSU5UVFlQRVNfSAorIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVERJTlRfSAorIyBpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYiCisKK2FjX3N1YnN0X3ZhcnM9J2FtX19FWEVFWFRfRkFMU0UKK2FtX19FWEVFWFRfVFJVRQorTFRMSUJPQkpTCitMVERMT1BFTgorTFRfQ09ORklHX0gKK0NPTlZFTklFTkNFX0xURExfRkFMU0UKK0NPTlZFTklFTkNFX0xURExfVFJVRQorSU5TVEFMTF9MVERMX0ZBTFNFCitJTlNUQUxMX0xURExfVFJVRQorQVJHWl9ICitMSUJPQkpTCitzeXNfc3ltYm9sX3VuZGVyc2NvcmUKK0xJQkFERF9ETAorTFRfRExQUkVPUEVOCitMSUJBRERfRExEX0xJTksKK0xJQkFERF9TSExfTE9BRAorTElCQUREX0RMT1BFTgorTFRfRExMT0FERVJTCitDUFAKK09UT09MNjQKK09UT09MCitMSVBPCitOTUVESVQKK0RTWU1VVElMCitSQU5MSUIKK0FSCitMTl9TCitOTQorYWNfY3RfRFVNUEJJTgorRFVNUEJJTgorTEQKK0ZHUkVQCitFR1JFUAorR1JFUAorU0VECithbV9fZmFzdGRlcENDX0ZBTFNFCithbV9fZmFzdGRlcENDX1RSVUUKK0NDREVQTU9ERQorQU1ERVBCQUNLU0xBU0gKK0FNREVQX0ZBTFNFCitBTURFUF9UUlVFCithbV9fcXVvdGUKK2FtX19pbmNsdWRlCitERVBESVIKK09CSkVYVAorRVhFRVhUCithY19jdF9DQworQ1BQRkxBR1MKK0xERkxBR1MKK0NGTEFHUworQ0MKK2hvc3Rfb3MKK2hvc3RfdmVuZG9yCitob3N0X2NwdQoraG9zdAorYnVpbGRfb3MKK2J1aWxkX3ZlbmRvcgorYnVpbGRfY3B1CitidWlsZAorTElCVE9PTAorT0JKRFVNUAorRExMVE9PTAorQVMKK2FtX191bnRhcgorYW1fX3RhcgorQU1UQVIKK2FtX19sZWFkaW5nX2RvdAorU0VUX01BS0UKK0FXSworbWtkaXJfcAorTUtESVJfUAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNCitTVFJJUAoraW5zdGFsbF9zaAorTUFLRUlORk8KK0FVVE9IRUFERVIKK0FVVE9NQUtFCitBVVRPQ09ORgorQUNMT0NBTAorVkVSU0lPTgorUEFDS0FHRQorQ1lHUEFUSF9XCithbV9faXNyYworSU5TVEFMTF9EQVRBCitJTlNUQUxMX1NDUklQVAorSU5TVEFMTF9QUk9HUkFNCit0YXJnZXRfYWxpYXMKK2hvc3RfYWxpYXMKK2J1aWxkX2FsaWFzCitMSUJTCitFQ0hPX1QKK0VDSE9fTgorRUNIT19DCitERUZTCittYW5kaXIKK2xvY2FsZWRpcgorbGliZGlyCitwc2RpcgorcGRmZGlyCitkdmlkaXIKK2h0bWxkaXIKK2luZm9kaXIKK2RvY2Rpcgorb2xkaW5jbHVkZWRpcgoraW5jbHVkZWRpcgorbG9jYWxzdGF0ZWRpcgorc2hhcmVkc3RhdGVkaXIKK3N5c2NvbmZkaXIKK2RhdGFkaXIKK2RhdGFyb290ZGlyCitsaWJleGVjZGlyCitzYmluZGlyCitiaW5kaXIKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUKK3ByZWZpeAorZXhlY19wcmVmaXgKK1BBQ0tBR0VfVVJMCitQQUNLQUdFX0JVR1JFUE9SVAorUEFDS0FHRV9TVFJJTkcKK1BBQ0tBR0VfVkVSU0lPTgorUEFDS0FHRV9UQVJOQU1FCitQQUNLQUdFX05BTUUKK1BBVEhfU0VQQVJBVE9SCitTSEVMTCcKK2FjX3N1YnN0X2ZpbGVzPScnCithY191c2VyX29wdHM9JworZW5hYmxlX29wdGlvbl9jaGVja2luZworZW5hYmxlX3NoYXJlZAorZW5hYmxlX3N0YXRpYword2l0aF9waWMKK2VuYWJsZV9mYXN0X2luc3RhbGwKK2VuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nCit3aXRoX2dudV9sZAorZW5hYmxlX2xpYnRvb2xfbG9jaworZW5hYmxlX2x0ZGxfaW5zdGFsbAorJworICAgICAgYWNfcHJlY2lvdXNfdmFycz0nYnVpbGRfYWxpYXMKK2hvc3RfYWxpYXMKK3RhcmdldF9hbGlhcworQ0MKK0NGTEFHUworTERGTEFHUworTElCUworQ1BQRkxBR1MKK0NQUCcKKworCisjIEluaXRpYWxpemUgc29tZSB2YXJpYWJsZXMgc2V0IGJ5IG9wdGlvbnMuCithY19pbml0X2hlbHA9CithY19pbml0X3ZlcnNpb249ZmFsc2UKK2FjX3VucmVjb2duaXplZF9vcHRzPQorYWNfdW5yZWNvZ25pemVkX3NlcD0KKyMgVGhlIHZhcmlhYmxlcyBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRoZSBvcHRpb25zLCB3aXRoCisjIGRhc2hlcyBjaGFuZ2VkIHRvIHVuZGVybGluZXMuCitjYWNoZV9maWxlPS9kZXYvbnVsbAorZXhlY19wcmVmaXg9Tk9ORQorbm9fY3JlYXRlPQorbm9fcmVjdXJzaW9uPQorcHJlZml4PU5PTkUKK3Byb2dyYW1fcHJlZml4PU5PTkUKK3Byb2dyYW1fc3VmZml4PU5PTkUKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWU9cyx4LHgsCitzaWxlbnQ9CitzaXRlPQorc3JjZGlyPQordmVyYm9zZT0KK3hfaW5jbHVkZXM9Tk9ORQoreF9saWJyYXJpZXM9Tk9ORQorCisjIEluc3RhbGxhdGlvbiBkaXJlY3Rvcnkgb3B0aW9ucy4KKyMgVGhlc2UgYXJlIGxlZnQgdW5leHBhbmRlZCBzbyB1c2VycyBjYW4gIm1ha2UgaW5zdGFsbCBleGVjX3ByZWZpeD0vZm9vIgorIyBhbmQgYWxsIHRoZSB2YXJpYWJsZXMgdGhhdCBhcmUgc3VwcG9zZWQgdG8gYmUgYmFzZWQgb24gZXhlY19wcmVmaXgKKyMgYnkgZGVmYXVsdCB3aWxsIGFjdHVhbGx5IGNoYW5nZS4KKyMgVXNlIGJyYWNlcyBpbnN0ZWFkIG9mIHBhcmVucyBiZWNhdXNlIHNoLCBwZXJsLCBldGMuIGFsc28gYWNjZXB0IHRoZW0uCisjIChUaGUgbGlzdCBmb2xsb3dzIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBHTlUgQ29kaW5nIFN0YW5kYXJkcy4pCitiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L2JpbicKK3NiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L3NiaW4nCitsaWJleGVjZGlyPScke2V4ZWNfcHJlZml4fS9saWJleGVjJworZGF0YXJvb3RkaXI9JyR7cHJlZml4fS9zaGFyZScKK2RhdGFkaXI9JyR7ZGF0YXJvb3RkaXJ9Jworc3lzY29uZmRpcj0nJHtwcmVmaXh9L2V0YycKK3NoYXJlZHN0YXRlZGlyPScke3ByZWZpeH0vY29tJworbG9jYWxzdGF0ZWRpcj0nJHtwcmVmaXh9L3ZhcicKK2luY2x1ZGVkaXI9JyR7cHJlZml4fS9pbmNsdWRlJworb2xkaW5jbHVkZWRpcj0nL3Vzci9pbmNsdWRlJworZG9jZGlyPScke2RhdGFyb290ZGlyfS9kb2MvJHtQQUNLQUdFX1RBUk5BTUV9JworaW5mb2Rpcj0nJHtkYXRhcm9vdGRpcn0vaW5mbycKK2h0bWxkaXI9JyR7ZG9jZGlyfScKK2R2aWRpcj0nJHtkb2NkaXJ9JworcGRmZGlyPScke2RvY2Rpcn0nCitwc2Rpcj0nJHtkb2NkaXJ9JworbGliZGlyPScke2V4ZWNfcHJlZml4fS9saWInCitsb2NhbGVkaXI9JyR7ZGF0YXJvb3RkaXJ9L2xvY2FsZScKK21hbmRpcj0nJHtkYXRhcm9vdGRpcn0vbWFuJworCithY19wcmV2PQorYWNfZGFzaGRhc2g9Citmb3IgYWNfb3B0aW9uCitkbworICAjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZHMgYW4gYXJndW1lbnQsIGFzc2lnbiBpdC4KKyAgaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCisgICAgZXZhbCAkYWNfcHJldj1cJGFjX29wdGlvbgorICAgIGFjX3ByZXY9CisgICAgY29udGludWUKKyAgZmkKKworICBjYXNlICRhY19vcHRpb24gaW4KKyAgKj0qKQlhY19vcHRhcmc9YGV4cHIgIlgkYWNfb3B0aW9uIiA6ICdbXj1dKj1cKC4qXCknYCA7OworICAqKQlhY19vcHRhcmc9eWVzIDs7CisgIGVzYWMKKworICAjIEFjY2VwdCB0aGUgaW1wb3J0YW50IEN5Z251cyBjb25maWd1cmUgb3B0aW9ucywgc28gd2UgY2FuIGRpYWdub3NlIHR5cG9zLgorCisgIGNhc2UgJGFjX2Rhc2hkYXNoJGFjX29wdGlvbiBpbgorICAtLSkKKyAgICBhY19kYXNoZGFzaD15ZXMgOzsKKworICAtYmluZGlyIHwgLS1iaW5kaXIgfCAtLWJpbmRpIHwgLS1iaW5kIHwgLS1iaW4gfCAtLWJpKQorICAgIGFjX3ByZXY9YmluZGlyIDs7CisgIC1iaW5kaXI9KiB8IC0tYmluZGlyPSogfCAtLWJpbmRpPSogfCAtLWJpbmQ9KiB8IC0tYmluPSogfCAtLWJpPSopCisgICAgYmluZGlyPSRhY19vcHRhcmcgOzsKKworICAtYnVpbGQgfCAtLWJ1aWxkIHwgLS1idWlsIHwgLS1idWkgfCAtLWJ1KQorICAgIGFjX3ByZXY9YnVpbGRfYWxpYXMgOzsKKyAgLWJ1aWxkPSogfCAtLWJ1aWxkPSogfCAtLWJ1aWw9KiB8IC0tYnVpPSogfCAtLWJ1PSopCisgICAgYnVpbGRfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWwgfCAtLWNhY2hlLWZpIFwKKyAgfCAtLWNhY2hlLWYgfCAtLWNhY2hlLSB8IC0tY2FjaGUgfCAtLWNhY2ggfCAtLWNhYyB8IC0tY2EgfCAtLWMpCisgICAgYWNfcHJldj1jYWNoZV9maWxlIDs7CisgIC1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbGU9KiB8IC0tY2FjaGUtZmlsPSogfCAtLWNhY2hlLWZpPSogXAorICB8IC0tY2FjaGUtZj0qIHwgLS1jYWNoZS09KiB8IC0tY2FjaGU9KiB8IC0tY2FjaD0qIHwgLS1jYWM9KiB8IC0tY2E9KiB8IC0tYz0qKQorICAgIGNhY2hlX2ZpbGU9JGFjX29wdGFyZyA7OworCisgIC0tY29uZmlnLWNhY2hlIHwgLUMpCisgICAgY2FjaGVfZmlsZT1jb25maWcuY2FjaGUgOzsKKworICAtZGF0YWRpciB8IC0tZGF0YWRpciB8IC0tZGF0YWRpIHwgLS1kYXRhZCkKKyAgICBhY19wcmV2PWRhdGFkaXIgOzsKKyAgLWRhdGFkaXI9KiB8IC0tZGF0YWRpcj0qIHwgLS1kYXRhZGk9KiB8IC0tZGF0YWQ9KikKKyAgICBkYXRhZGlyPSRhY19vcHRhcmcgOzsKKworICAtZGF0YXJvb3RkaXIgfCAtLWRhdGFyb290ZGlyIHwgLS1kYXRhcm9vdGRpIHwgLS1kYXRhcm9vdGQgfCAtLWRhdGFyb290IFwKKyAgfCAtLWRhdGFyb28gfCAtLWRhdGFybyB8IC0tZGF0YXIpCisgICAgYWNfcHJldj1kYXRhcm9vdGRpciA7OworICAtZGF0YXJvb3RkaXI9KiB8IC0tZGF0YXJvb3RkaXI9KiB8IC0tZGF0YXJvb3RkaT0qIHwgLS1kYXRhcm9vdGQ9KiBcCisgIHwgLS1kYXRhcm9vdD0qIHwgLS1kYXRhcm9vPSogfCAtLWRhdGFybz0qIHwgLS1kYXRhcj0qKQorICAgIGRhdGFyb290ZGlyPSRhY19vcHRhcmcgOzsKKworICAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSopCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmRpc2FibGUtXCguKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICJpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJlbmFibGVfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0tZGlzYWJsZS0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgIGVzYWMKKyAgICBldmFsIGVuYWJsZV8kYWNfdXNlcm9wdD1ubyA7OworCisgIC1kb2NkaXIgfCAtLWRvY2RpciB8IC0tZG9jZGkgfCAtLWRvYyB8IC0tZG8pCisgICAgYWNfcHJldj1kb2NkaXIgOzsKKyAgLWRvY2Rpcj0qIHwgLS1kb2NkaXI9KiB8IC0tZG9jZGk9KiB8IC0tZG9jPSogfCAtLWRvPSopCisgICAgZG9jZGlyPSRhY19vcHRhcmcgOzsKKworICAtZHZpZGlyIHwgLS1kdmlkaXIgfCAtLWR2aWRpIHwgLS1kdmlkIHwgLS1kdmkgfCAtLWR2KQorICAgIGFjX3ByZXY9ZHZpZGlyIDs7CisgIC1kdmlkaXI9KiB8IC0tZHZpZGlyPSogfCAtLWR2aWRpPSogfCAtLWR2aWQ9KiB8IC0tZHZpPSogfCAtLWR2PSopCisgICAgZHZpZGlyPSRhY19vcHRhcmcgOzsKKworICAtZW5hYmxlLSogfCAtLWVuYWJsZS0qKQorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSplbmFibGUtXChbXj1dKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICJpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJlbmFibGVfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0tZW5hYmxlLSRhY191c2Vyb3B0X29yaWciCisJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisgICAgZXNhYworICAgIGV2YWwgZW5hYmxlXyRhY191c2Vyb3B0PVwkYWNfb3B0YXJnIDs7CisKKyAgLWV4ZWMtcHJlZml4IHwgLS1leGVjX3ByZWZpeCB8IC0tZXhlYy1wcmVmaXggfCAtLWV4ZWMtcHJlZmkgXAorICB8IC0tZXhlYy1wcmVmIHwgLS1leGVjLXByZSB8IC0tZXhlYy1wciB8IC0tZXhlYy1wIHwgLS1leGVjLSBcCisgIHwgLS1leGVjIHwgLS1leGUgfCAtLWV4KQorICAgIGFjX3ByZXY9ZXhlY19wcmVmaXggOzsKKyAgLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWNfcHJlZml4PSogfCAtLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWMtcHJlZmk9KiBcCisgIHwgLS1leGVjLXByZWY9KiB8IC0tZXhlYy1wcmU9KiB8IC0tZXhlYy1wcj0qIHwgLS1leGVjLXA9KiB8IC0tZXhlYy09KiBcCisgIHwgLS1leGVjPSogfCAtLWV4ZT0qIHwgLS1leD0qKQorICAgIGV4ZWNfcHJlZml4PSRhY19vcHRhcmcgOzsKKworICAtZ2FzIHwgLS1nYXMgfCAtLWdhIHwgLS1nKQorICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgtZ2FzLgorICAgIHdpdGhfZ2FzPXllcyA7OworCisgIC1oZWxwIHwgLS1oZWxwIHwgLS1oZWwgfCAtLWhlIHwgLWgpCisgICAgYWNfaW5pdF9oZWxwPWxvbmcgOzsKKyAgLWhlbHA9ciogfCAtLWhlbHA9ciogfCAtLWhlbD1yKiB8IC0taGU9ciogfCAtaHIqKQorICAgIGFjX2luaXRfaGVscD1yZWN1cnNpdmUgOzsKKyAgLWhlbHA9cyogfCAtLWhlbHA9cyogfCAtLWhlbD1zKiB8IC0taGU9cyogfCAtaHMqKQorICAgIGFjX2luaXRfaGVscD1zaG9ydCA7OworCisgIC1ob3N0IHwgLS1ob3N0IHwgLS1ob3MgfCAtLWhvKQorICAgIGFjX3ByZXY9aG9zdF9hbGlhcyA7OworICAtaG9zdD0qIHwgLS1ob3N0PSogfCAtLWhvcz0qIHwgLS1obz0qKQorICAgIGhvc3RfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC1odG1sZGlyIHwgLS1odG1sZGlyIHwgLS1odG1sZGkgfCAtLWh0bWxkIHwgLS1odG1sIHwgLS1odG0gfCAtLWh0KQorICAgIGFjX3ByZXY9aHRtbGRpciA7OworICAtaHRtbGRpcj0qIHwgLS1odG1sZGlyPSogfCAtLWh0bWxkaT0qIHwgLS1odG1sZD0qIHwgLS1odG1sPSogfCAtLWh0bT0qIFwKKyAgfCAtLWh0PSopCisgICAgaHRtbGRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaSB8IC0taW5jbHVkZWQgfCAtLWluY2x1ZGUgXAorICB8IC0taW5jbHVkIHwgLS1pbmNsdSB8IC0taW5jbCB8IC0taW5jKQorICAgIGFjX3ByZXY9aW5jbHVkZWRpciA7OworICAtaW5jbHVkZWRpcj0qIHwgLS1pbmNsdWRlZGlyPSogfCAtLWluY2x1ZGVkaT0qIHwgLS1pbmNsdWRlZD0qIHwgLS1pbmNsdWRlPSogXAorICB8IC0taW5jbHVkPSogfCAtLWluY2x1PSogfCAtLWluY2w9KiB8IC0taW5jPSopCisgICAgaW5jbHVkZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWluZm9kaXIgfCAtLWluZm9kaXIgfCAtLWluZm9kaSB8IC0taW5mb2QgfCAtLWluZm8gfCAtLWluZikKKyAgICBhY19wcmV2PWluZm9kaXIgOzsKKyAgLWluZm9kaXI9KiB8IC0taW5mb2Rpcj0qIHwgLS1pbmZvZGk9KiB8IC0taW5mb2Q9KiB8IC0taW5mbz0qIHwgLS1pbmY9KikKKyAgICBpbmZvZGlyPSRhY19vcHRhcmcgOzsKKworICAtbGliZGlyIHwgLS1saWJkaXIgfCAtLWxpYmRpIHwgLS1saWJkKQorICAgIGFjX3ByZXY9bGliZGlyIDs7CisgIC1saWJkaXI9KiB8IC0tbGliZGlyPSogfCAtLWxpYmRpPSogfCAtLWxpYmQ9KikKKyAgICBsaWJkaXI9JGFjX29wdGFyZyA7OworCisgIC1saWJleGVjZGlyIHwgLS1saWJleGVjZGlyIHwgLS1saWJleGVjZGkgfCAtLWxpYmV4ZWNkIHwgLS1saWJleGVjIFwKKyAgfCAtLWxpYmV4ZSB8IC0tbGliZXggfCAtLWxpYmUpCisgICAgYWNfcHJldj1saWJleGVjZGlyIDs7CisgIC1saWJleGVjZGlyPSogfCAtLWxpYmV4ZWNkaXI9KiB8IC0tbGliZXhlY2RpPSogfCAtLWxpYmV4ZWNkPSogfCAtLWxpYmV4ZWM9KiBcCisgIHwgLS1saWJleGU9KiB8IC0tbGliZXg9KiB8IC0tbGliZT0qKQorICAgIGxpYmV4ZWNkaXI9JGFjX29wdGFyZyA7OworCisgIC1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpciB8IC0tbG9jYWxlZGkgfCAtLWxvY2FsZWQgfCAtLWxvY2FsZSkKKyAgICBhY19wcmV2PWxvY2FsZWRpciA7OworICAtbG9jYWxlZGlyPSogfCAtLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaT0qIHwgLS1sb2NhbGVkPSogfCAtLWxvY2FsZT0qKQorICAgIGxvY2FsZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaSB8IC0tbG9jYWxzdGF0ZWQgXAorICB8IC0tbG9jYWxzdGF0ZSB8IC0tbG9jYWxzdGF0IHwgLS1sb2NhbHN0YSB8IC0tbG9jYWxzdCB8IC0tbG9jYWxzKQorICAgIGFjX3ByZXY9bG9jYWxzdGF0ZWRpciA7OworICAtbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaT0qIHwgLS1sb2NhbHN0YXRlZD0qIFwKKyAgfCAtLWxvY2Fsc3RhdGU9KiB8IC0tbG9jYWxzdGF0PSogfCAtLWxvY2Fsc3RhPSogfCAtLWxvY2Fsc3Q9KiB8IC0tbG9jYWxzPSopCisgICAgbG9jYWxzdGF0ZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLW1hbmRpciB8IC0tbWFuZGlyIHwgLS1tYW5kaSB8IC0tbWFuZCB8IC0tbWFuIHwgLS1tYSB8IC0tbSkKKyAgICBhY19wcmV2PW1hbmRpciA7OworICAtbWFuZGlyPSogfCAtLW1hbmRpcj0qIHwgLS1tYW5kaT0qIHwgLS1tYW5kPSogfCAtLW1hbj0qIHwgLS1tYT0qIHwgLS1tPSopCisgICAgbWFuZGlyPSRhY19vcHRhcmcgOzsKKworICAtbmZwIHwgLS1uZnAgfCAtLW5mKQorICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGhvdXQtZnAuCisgICAgd2l0aF9mcD1ubyA7OworCisgIC1uby1jcmVhdGUgfCAtLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXQgfCAtLW5vLWNyZWEgfCAtLW5vLWNyZSBcCisgIHwgLS1uby1jciB8IC0tbm8tYyB8IC1uKQorICAgIG5vX2NyZWF0ZT15ZXMgOzsKKworICAtbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvIHwgLS1uby1yZWN1cnNpIFwKKyAgfCAtLW5vLXJlY3VycyB8IC0tbm8tcmVjdXIgfCAtLW5vLXJlY3UgfCAtLW5vLXJlYyB8IC0tbm8tcmUgfCAtLW5vLXIpCisgICAgbm9fcmVjdXJzaW9uPXllcyA7OworCisgIC1vbGRpbmNsdWRlZGlyIHwgLS1vbGRpbmNsdWRlZGlyIHwgLS1vbGRpbmNsdWRlZGkgfCAtLW9sZGluY2x1ZGVkIFwKKyAgfCAtLW9sZGluY2x1ZGUgfCAtLW9sZGluY2x1ZCB8IC0tb2xkaW5jbHUgfCAtLW9sZGluY2wgfCAtLW9sZGluYyBcCisgIHwgLS1vbGRpbiB8IC0tb2xkaSB8IC0tb2xkIHwgLS1vbCB8IC0tbykKKyAgICBhY19wcmV2PW9sZGluY2x1ZGVkaXIgOzsKKyAgLW9sZGluY2x1ZGVkaXI9KiB8IC0tb2xkaW5jbHVkZWRpcj0qIHwgLS1vbGRpbmNsdWRlZGk9KiB8IC0tb2xkaW5jbHVkZWQ9KiBcCisgIHwgLS1vbGRpbmNsdWRlPSogfCAtLW9sZGluY2x1ZD0qIHwgLS1vbGRpbmNsdT0qIHwgLS1vbGRpbmNsPSogfCAtLW9sZGluYz0qIFwKKyAgfCAtLW9sZGluPSogfCAtLW9sZGk9KiB8IC0tb2xkPSogfCAtLW9sPSogfCAtLW89KikKKyAgICBvbGRpbmNsdWRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtcHJlZml4IHwgLS1wcmVmaXggfCAtLXByZWZpIHwgLS1wcmVmIHwgLS1wcmUgfCAtLXByIHwgLS1wKQorICAgIGFjX3ByZXY9cHJlZml4IDs7CisgIC1wcmVmaXg9KiB8IC0tcHJlZml4PSogfCAtLXByZWZpPSogfCAtLXByZWY9KiB8IC0tcHJlPSogfCAtLXByPSogfCAtLXA9KikKKyAgICBwcmVmaXg9JGFjX29wdGFyZyA7OworCisgIC1wcm9ncmFtLXByZWZpeCB8IC0tcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dyYW0tcHJlZmkgfCAtLXByb2dyYW0tcHJlZiBcCisgIHwgLS1wcm9ncmFtLXByZSB8IC0tcHJvZ3JhbS1wciB8IC0tcHJvZ3JhbS1wKQorICAgIGFjX3ByZXY9cHJvZ3JhbV9wcmVmaXggOzsKKyAgLXByb2dyYW0tcHJlZml4PSogfCAtLXByb2dyYW0tcHJlZml4PSogfCAtLXByb2dyYW0tcHJlZmk9KiBcCisgIHwgLS1wcm9ncmFtLXByZWY9KiB8IC0tcHJvZ3JhbS1wcmU9KiB8IC0tcHJvZ3JhbS1wcj0qIHwgLS1wcm9ncmFtLXA9KikKKyAgICBwcm9ncmFtX3ByZWZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLXByb2dyYW0tc3VmZml4IHwgLS1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaSB8IC0tcHJvZ3JhbS1zdWZmIFwKKyAgfCAtLXByb2dyYW0tc3VmIHwgLS1wcm9ncmFtLXN1IHwgLS1wcm9ncmFtLXMpCisgICAgYWNfcHJldj1wcm9ncmFtX3N1ZmZpeCA7OworICAtcHJvZ3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaT0qIFwKKyAgfCAtLXByb2dyYW0tc3VmZj0qIHwgLS1wcm9ncmFtLXN1Zj0qIHwgLS1wcm9ncmFtLXN1PSogfCAtLXByb2dyYW0tcz0qKQorICAgIHByb2dyYW1fc3VmZml4PSRhY19vcHRhcmcgOzsKKworICAtcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZSB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW0gfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW4gfCAtLXByb2dyYW0tdHJhbnNmb3JtLSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybSB8IC0tcHJvZ3JhbS10cmFuc2ZvciBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm8gfCAtLXByb2dyYW0tdHJhbnNmIFwKKyAgfCAtLXByb2dyYW0tdHJhbnMgfCAtLXByb2dyYW0tdHJhbiBcCisgIHwgLS1wcm9nci10cmEgfCAtLXByb2dyYW0tdHIgfCAtLXByb2dyYW0tdCkKKyAgICBhY19wcmV2PXByb2dyYW1fdHJhbnNmb3JtX25hbWUgOzsKKyAgLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW49KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm09KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcj0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmbz0qIHwgLS1wcm9ncmFtLXRyYW5zZj0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnM9KiB8IC0tcHJvZ3JhbS10cmFuPSogXAorICB8IC0tcHJvZ3ItdHJhPSogfCAtLXByb2dyYW0tdHI9KiB8IC0tcHJvZ3JhbS10PSopCisgICAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0kYWNfb3B0YXJnIDs7CisKKyAgLXBkZmRpciB8IC0tcGRmZGlyIHwgLS1wZGZkaSB8IC0tcGRmZCB8IC0tcGRmIHwgLS1wZCkKKyAgICBhY19wcmV2PXBkZmRpciA7OworICAtcGRmZGlyPSogfCAtLXBkZmRpcj0qIHwgLS1wZGZkaT0qIHwgLS1wZGZkPSogfCAtLXBkZj0qIHwgLS1wZD0qKQorICAgIHBkZmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXBzZGlyIHwgLS1wc2RpciB8IC0tcHNkaSB8IC0tcHNkIHwgLS1wcykKKyAgICBhY19wcmV2PXBzZGlyIDs7CisgIC1wc2Rpcj0qIHwgLS1wc2Rpcj0qIHwgLS1wc2RpPSogfCAtLXBzZD0qIHwgLS1wcz0qKQorICAgIHBzZGlyPSRhY19vcHRhcmcgOzsKKworICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKKyAgICBzaWxlbnQ9eWVzIDs7CisKKyAgLXNiaW5kaXIgfCAtLXNiaW5kaXIgfCAtLXNiaW5kaSB8IC0tc2JpbmQgfCAtLXNiaW4gfCAtLXNiaSB8IC0tc2IpCisgICAgYWNfcHJldj1zYmluZGlyIDs7CisgIC1zYmluZGlyPSogfCAtLXNiaW5kaXI9KiB8IC0tc2JpbmRpPSogfCAtLXNiaW5kPSogfCAtLXNiaW49KiBcCisgIHwgLS1zYmk9KiB8IC0tc2I9KikKKyAgICBzYmluZGlyPSRhY19vcHRhcmcgOzsKKworICAtc2hhcmVkc3RhdGVkaXIgfCAtLXNoYXJlZHN0YXRlZGlyIHwgLS1zaGFyZWRzdGF0ZWRpIFwKKyAgfCAtLXNoYXJlZHN0YXRlZCB8IC0tc2hhcmVkc3RhdGUgfCAtLXNoYXJlZHN0YXQgfCAtLXNoYXJlZHN0YSBcCisgIHwgLS1zaGFyZWRzdCB8IC0tc2hhcmVkcyB8IC0tc2hhcmVkIHwgLS1zaGFyZSB8IC0tc2hhciBcCisgIHwgLS1zaGEgfCAtLXNoKQorICAgIGFjX3ByZXY9c2hhcmVkc3RhdGVkaXIgOzsKKyAgLXNoYXJlZHN0YXRlZGlyPSogfCAtLXNoYXJlZHN0YXRlZGlyPSogfCAtLXNoYXJlZHN0YXRlZGk9KiBcCisgIHwgLS1zaGFyZWRzdGF0ZWQ9KiB8IC0tc2hhcmVkc3RhdGU9KiB8IC0tc2hhcmVkc3RhdD0qIHwgLS1zaGFyZWRzdGE9KiBcCisgIHwgLS1zaGFyZWRzdD0qIHwgLS1zaGFyZWRzPSogfCAtLXNoYXJlZD0qIHwgLS1zaGFyZT0qIHwgLS1zaGFyPSogXAorICB8IC0tc2hhPSogfCAtLXNoPSopCisgICAgc2hhcmVkc3RhdGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1zaXRlIHwgLS1zaXRlIHwgLS1zaXQpCisgICAgYWNfcHJldj1zaXRlIDs7CisgIC1zaXRlPSogfCAtLXNpdGU9KiB8IC0tc2l0PSopCisgICAgc2l0ZT0kYWNfb3B0YXJnIDs7CisKKyAgLXNyY2RpciB8IC0tc3JjZGlyIHwgLS1zcmNkaSB8IC0tc3JjZCB8IC0tc3JjIHwgLS1zcikKKyAgICBhY19wcmV2PXNyY2RpciA7OworICAtc3JjZGlyPSogfCAtLXNyY2Rpcj0qIHwgLS1zcmNkaT0qIHwgLS1zcmNkPSogfCAtLXNyYz0qIHwgLS1zcj0qKQorICAgIHNyY2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXN5c2NvbmZkaXIgfCAtLXN5c2NvbmZkaXIgfCAtLXN5c2NvbmZkaSB8IC0tc3lzY29uZmQgfCAtLXN5c2NvbmYgXAorICB8IC0tc3lzY29uIHwgLS1zeXNjbyB8IC0tc3lzYyB8IC0tc3lzIHwgLS1zeSkKKyAgICBhY19wcmV2PXN5c2NvbmZkaXIgOzsKKyAgLXN5c2NvbmZkaXI9KiB8IC0tc3lzY29uZmRpcj0qIHwgLS1zeXNjb25mZGk9KiB8IC0tc3lzY29uZmQ9KiB8IC0tc3lzY29uZj0qIFwKKyAgfCAtLXN5c2Nvbj0qIHwgLS1zeXNjbz0qIHwgLS1zeXNjPSogfCAtLXN5cz0qIHwgLS1zeT0qKQorICAgIHN5c2NvbmZkaXI9JGFjX29wdGFyZyA7OworCisgIC10YXJnZXQgfCAtLXRhcmdldCB8IC0tdGFyZ2UgfCAtLXRhcmcgfCAtLXRhciB8IC0tdGEgfCAtLXQpCisgICAgYWNfcHJldj10YXJnZXRfYWxpYXMgOzsKKyAgLXRhcmdldD0qIHwgLS10YXJnZXQ9KiB8IC0tdGFyZ2U9KiB8IC0tdGFyZz0qIHwgLS10YXI9KiB8IC0tdGE9KiB8IC0tdD0qKQorICAgIHRhcmdldF9hbGlhcz0kYWNfb3B0YXJnIDs7CisKKyAgLXYgfCAtdmVyYm9zZSB8IC0tdmVyYm9zZSB8IC0tdmVyYm9zIHwgLS12ZXJibyB8IC0tdmVyYikKKyAgICB2ZXJib3NlPXllcyA7OworCisgIC12ZXJzaW9uIHwgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLVYpCisgICAgYWNfaW5pdF92ZXJzaW9uPTogOzsKKworICAtd2l0aC0qIHwgLS13aXRoLSopCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGgtXChbXj1dKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICJpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJ3aXRoXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLXdpdGgtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKyAgICBlc2FjCisgICAgZXZhbCB3aXRoXyRhY191c2Vyb3B0PVwkYWNfb3B0YXJnIDs7CisKKyAgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qKQorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRob3V0LVwoLipcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAiaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisid2l0aF8kYWNfdXNlcm9wdCIKKyIqKSA7OworICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS13aXRob3V0LSRhY191c2Vyb3B0X29yaWciCisJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisgICAgZXNhYworICAgIGV2YWwgd2l0aF8kYWNfdXNlcm9wdD1ubyA7OworCisgIC0teCkKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLXguCisgICAgd2l0aF94PXllcyA7OworCisgIC14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGUgfCAtLXgtaW5jbHVkIHwgLS14LWluY2x1IFwKKyAgfCAtLXgtaW5jbCB8IC0teC1pbmMgfCAtLXgtaW4gfCAtLXgtaSkKKyAgICBhY19wcmV2PXhfaW5jbHVkZXMgOzsKKyAgLXgtaW5jbHVkZXM9KiB8IC0teC1pbmNsdWRlcz0qIHwgLS14LWluY2x1ZGU9KiB8IC0teC1pbmNsdWQ9KiB8IC0teC1pbmNsdT0qIFwKKyAgfCAtLXgtaW5jbD0qIHwgLS14LWluYz0qIHwgLS14LWluPSogfCAtLXgtaT0qKQorICAgIHhfaW5jbHVkZXM9JGFjX29wdGFyZyA7OworCisgIC14LWxpYnJhcmllcyB8IC0teC1saWJyYXJpZXMgfCAtLXgtbGlicmFyaWUgfCAtLXgtbGlicmFyaSBcCisgIHwgLS14LWxpYnJhciB8IC0teC1saWJyYSB8IC0teC1saWJyIHwgLS14LWxpYiB8IC0teC1saSB8IC0teC1sKQorICAgIGFjX3ByZXY9eF9saWJyYXJpZXMgOzsKKyAgLXgtbGlicmFyaWVzPSogfCAtLXgtbGlicmFyaWVzPSogfCAtLXgtbGlicmFyaWU9KiB8IC0teC1saWJyYXJpPSogXAorICB8IC0teC1saWJyYXI9KiB8IC0teC1saWJyYT0qIHwgLS14LWxpYnI9KiB8IC0teC1saWI9KiB8IC0teC1saT0qIHwgLS14LWw9KikKKyAgICB4X2xpYnJhcmllcz0kYWNfb3B0YXJnIDs7CisKKyAgLSopIGFzX2ZuX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uOiBcYCRhY19vcHRpb24nCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyAgICA7OworCisgICo9KikKKyAgICBhY19lbnZ2YXI9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4XChbXj1dKlwpPSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGNhc2UgJGFjX2VudnZhciBpbiAjKAorICAgICAgJycgfCBbMC05XSogfCAqWyFfJGFzX2NyX2FsbnVtXSogKQorICAgICAgYXNfZm5fZXJyb3IgImludmFsaWQgdmFyaWFibGUgbmFtZTogXGAkYWNfZW52dmFyJyIgOzsKKyAgICBlc2FjCisgICAgZXZhbCAkYWNfZW52dmFyPVwkYWNfb3B0YXJnCisgICAgZXhwb3J0ICRhY19lbnZ2YXIgOzsKKworICAqKQorICAgICMgRklYTUU6IHNob3VsZCBiZSByZW1vdmVkIGluIGF1dG9jb25mIDMuMC4KKyAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB5b3Ugc2hvdWxkIHVzZSAtLWJ1aWxkLCAtLWhvc3QsIC0tdGFyZ2V0IiA+JjIKKyAgICBleHByICJ4JGFjX29wdGlvbiIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGludmFsaWQgaG9zdCB0eXBlOiAkYWNfb3B0aW9uIiA+JjIKKyAgICA6ICR7YnVpbGRfYWxpYXM9JGFjX29wdGlvbn0gJHtob3N0X2FsaWFzPSRhY19vcHRpb259ICR7dGFyZ2V0X2FsaWFzPSRhY19vcHRpb259CisgICAgOzsKKworICBlc2FjCitkb25lCisKK2lmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorICBhY19vcHRpb249LS1gZWNobyAkYWNfcHJldiB8IHNlZCAncy9fLy0vZydgCisgIGFzX2ZuX2Vycm9yICJtaXNzaW5nIGFyZ3VtZW50IHRvICRhY19vcHRpb24iCitmaQorCitpZiB0ZXN0IC1uICIkYWNfdW5yZWNvZ25pemVkX29wdHMiOyB0aGVuCisgIGNhc2UgJGVuYWJsZV9vcHRpb25fY2hlY2tpbmcgaW4KKyAgICBubykgOzsKKyAgICBmYXRhbCkgYXNfZm5fZXJyb3IgInVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiIDs7CisgICAgKikgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mMiA7OworICBlc2FjCitmaQorCisjIENoZWNrIGFsbCBkaXJlY3RvcnkgYXJndW1lbnRzIGZvciBjb25zaXN0ZW5jeS4KK2ZvciBhY192YXIgaW4JZXhlY19wcmVmaXggcHJlZml4IGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YXJvb3RkaXIgXAorCQlkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgbG9jYWxzdGF0ZWRpciBpbmNsdWRlZGlyIFwKKwkJb2xkaW5jbHVkZWRpciBkb2NkaXIgaW5mb2RpciBodG1sZGlyIGR2aWRpciBwZGZkaXIgcHNkaXIgXAorCQlsaWJkaXIgbG9jYWxlZGlyIG1hbmRpcgorZG8KKyAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICMgUmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXMuCisgIGNhc2UgJGFjX3ZhbCBpbgorICAgICovICkKKyAgICAgIGFjX3ZhbD1gZXhwciAiWCRhY192YWwiIDogJ1hcKC4qW14vXVwpJyBcfCAiWCRhY192YWwiIDogJ1hcKC4qXCknYAorICAgICAgZXZhbCAkYWNfdmFyPVwkYWNfdmFsOzsKKyAgZXNhYworICAjIEJlIHN1cmUgdG8gaGF2ZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZXMuCisgIGNhc2UgJGFjX3ZhbCBpbgorICAgIFtcXC8kXSogfCA/OltcXC9dKiApICBjb250aW51ZTs7CisgICAgTk9ORSB8ICcnICkgY2FzZSAkYWNfdmFyIGluICpwcmVmaXggKSBjb250aW51ZTs7IGVzYWM7OworICBlc2FjCisgIGFzX2ZuX2Vycm9yICJleHBlY3RlZCBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBmb3IgLS0kYWNfdmFyOiAkYWNfdmFsIgorZG9uZQorCisjIFRoZXJlIG1pZ2h0IGJlIHBlb3BsZSB3aG8gZGVwZW5kIG9uIHRoZSBvbGQgYnJva2VuIGJlaGF2aW9yOiBgJGhvc3QnCisjIHVzZWQgdG8gaG9sZCB0aGUgYXJndW1lbnQgb2YgLS1ob3N0IGV0Yy4KKyMgRklYTUU6IFRvIHJlbW92ZSBzb21lIGRheS4KK2J1aWxkPSRidWlsZF9hbGlhcworaG9zdD0kaG9zdF9hbGlhcwordGFyZ2V0PSR0YXJnZXRfYWxpYXMKKworIyBGSVhNRTogVG8gcmVtb3ZlIHNvbWUgZGF5LgoraWYgdGVzdCAieCRob3N0X2FsaWFzIiAhPSB4OyB0aGVuCisgIGlmIHRlc3QgIngkYnVpbGRfYWxpYXMiID0geDsgdGhlbgorICAgIGNyb3NzX2NvbXBpbGluZz1tYXliZQorICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IElmIHlvdSB3YW50ZWQgdG8gc2V0IHRoZSAtLWJ1aWxkIHR5cGUsIGRvbid0IHVzZSAtLWhvc3QuCisgICAgSWYgYSBjcm9zcyBjb21waWxlciBpcyBkZXRlY3RlZCB0aGVuIGNyb3NzIGNvbXBpbGUgbW9kZSB3aWxsIGJlIHVzZWQuIiA+JjIKKyAgZWxpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiAhPSAieCRob3N0X2FsaWFzIjsgdGhlbgorICAgIGNyb3NzX2NvbXBpbGluZz15ZXMKKyAgZmkKK2ZpCisKK2FjX3Rvb2xfcHJlZml4PQordGVzdCAtbiAiJGhvc3RfYWxpYXMiICYmIGFjX3Rvb2xfcHJlZml4PSRob3N0X2FsaWFzLQorCit0ZXN0ICIkc2lsZW50IiA9IHllcyAmJiBleGVjIDY+L2Rldi9udWxsCisKKworYWNfcHdkPWBwd2RgICYmIHRlc3QgLW4gIiRhY19wd2QiICYmCithY19sc19kaT1gbHMgLWRpIC5gICYmCithY19wd2RfbHNfZGk9YGNkICIkYWNfcHdkIiAmJiBscyAtZGkgLmAgfHwKKyAgYXNfZm5fZXJyb3IgIndvcmtpbmcgZGlyZWN0b3J5IGNhbm5vdCBiZSBkZXRlcm1pbmVkIgordGVzdCAiWCRhY19sc19kaSIgPSAiWCRhY19wd2RfbHNfZGkiIHx8CisgIGFzX2ZuX2Vycm9yICJwd2QgZG9lcyBub3QgcmVwb3J0IG5hbWUgb2Ygd29ya2luZyBkaXJlY3RvcnkiCisKKworIyBGaW5kIHRoZSBzb3VyY2UgZmlsZXMsIGlmIGxvY2F0aW9uIHdhcyBub3Qgc3BlY2lmaWVkLgoraWYgdGVzdCAteiAiJHNyY2RpciI7IHRoZW4KKyAgYWNfc3JjZGlyX2RlZmF1bHRlZD15ZXMKKyAgIyBUcnkgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgc2NyaXB0LCB0aGVuIHRoZSBwYXJlbnQgZGlyZWN0b3J5LgorICBhY19jb25mZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX215c2VsZiIgfHwKKyRhc19leHByIFgiJGFzX215c2VsZiIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19teXNlbGYiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX215c2VsZiIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhc19teXNlbGYiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICBzcmNkaXI9JGFjX2NvbmZkaXIKKyAgaWYgdGVzdCAhIC1yICIkc3JjZGlyLyRhY191bmlxdWVfZmlsZSI7IHRoZW4KKyAgICBzcmNkaXI9Li4KKyAgZmkKK2Vsc2UKKyAgYWNfc3JjZGlyX2RlZmF1bHRlZD1ubworZmkKK2lmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCisgIHRlc3QgIiRhY19zcmNkaXJfZGVmYXVsdGVkIiA9IHllcyAmJiBzcmNkaXI9IiRhY19jb25mZGlyIG9yIC4uIgorICBhc19mbl9lcnJvciAiY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkc3JjZGlyIgorZmkKK2FjX21zZz0ic291cmNlcyBhcmUgaW4gJHNyY2RpciwgYnV0IFxgY2QgJHNyY2RpcicgZG9lcyBub3Qgd29yayIKK2FjX2Fic19jb25mZGlyPWAoCisJY2QgIiRzcmNkaXIiICYmIHRlc3QgLXIgIi4vJGFjX3VuaXF1ZV9maWxlIiB8fCBhc19mbl9lcnJvciAiJGFjX21zZyIKKwlwd2QpYAorIyBXaGVuIGJ1aWxkaW5nIGluIHBsYWNlLCBzZXQgc3JjZGlyPS4KK2lmIHRlc3QgIiRhY19hYnNfY29uZmRpciIgPSAiJGFjX3B3ZCI7IHRoZW4KKyAgc3JjZGlyPS4KK2ZpCisjIFJlbW92ZSB1bm5lY2Vzc2FyeSB0cmFpbGluZyBzbGFzaGVzIGZyb20gc3JjZGlyLgorIyBEb3VibGUgc2xhc2hlcyBpbiBmaWxlIG5hbWVzIGluIG9iamVjdCBmaWxlIGRlYnVnZ2luZyBpbmZvCisjIG1lc3MgdXAgTS14IGdkYiBpbiBFbWFjcy4KK2Nhc2UgJHNyY2RpciBpbgorKi8pIHNyY2Rpcj1gZXhwciAiWCRzcmNkaXIiIDogJ1hcKC4qW14vXVwpJyBcfCAiWCRzcmNkaXIiIDogJ1hcKC4qXCknYDs7Citlc2FjCitmb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbworICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fc2V0PVwkeyR7YWNfdmFyfStzZXR9CisgIGV2YWwgYWNfZW52XyR7YWNfdmFyfV92YWx1ZT1cJCR7YWNfdmFyfQorICBldmFsIGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0PVwkeyR7YWNfdmFyfStzZXR9CisgIGV2YWwgYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZT1cJCR7YWNfdmFyfQorZG9uZQorCisjCisjIFJlcG9ydCB0aGUgLS1oZWxwIG1lc3NhZ2UuCisjCitpZiB0ZXN0ICIkYWNfaW5pdF9oZWxwIiA9ICJsb25nIjsgdGhlbgorICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KKyAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgorICBjYXQgPDxfQUNFT0YKK1xgY29uZmlndXJlJyBjb25maWd1cmVzIGxpYmx0ZGwgMi4yLjEwIHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KKworVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtWQVI9VkFMVUVdLi4uCisKK1RvIGFzc2lnbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKGUuZy4sIENDLCBDRkxBR1MuLi4pLCBzcGVjaWZ5IHRoZW0gYXMKK1ZBUj1WQUxVRS4gIFNlZSBiZWxvdyBmb3IgZGVzY3JpcHRpb25zIG9mIHNvbWUgb2YgdGhlIHVzZWZ1bCB2YXJpYWJsZXMuCisKK0RlZmF1bHRzIGZvciB0aGUgb3B0aW9ucyBhcmUgc3BlY2lmaWVkIGluIGJyYWNrZXRzLgorCitDb25maWd1cmF0aW9uOgorICAtaCwgLS1oZWxwICAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAorICAgICAgLS1oZWxwPXNob3J0ICAgICAgICBkaXNwbGF5IG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhpcyBwYWNrYWdlCisgICAgICAtLWhlbHA9cmVjdXJzaXZlICAgIGRpc3BsYXkgdGhlIHNob3J0IGhlbHAgb2YgYWxsIHRoZSBpbmNsdWRlZCBwYWNrYWdlcworICAtViwgLS12ZXJzaW9uICAgICAgICAgICBkaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKyAgLXEsIC0tcXVpZXQsIC0tc2lsZW50ICAgZG8gbm90IHByaW50IFxgY2hlY2tpbmcuLi4nIG1lc3NhZ2VzCisgICAgICAtLWNhY2hlLWZpbGU9RklMRSAgIGNhY2hlIHRlc3QgcmVzdWx0cyBpbiBGSUxFIFtkaXNhYmxlZF0KKyAgLUMsIC0tY29uZmlnLWNhY2hlICAgICAgYWxpYXMgZm9yIFxgLS1jYWNoZS1maWxlPWNvbmZpZy5jYWNoZScKKyAgLW4sIC0tbm8tY3JlYXRlICAgICAgICAgZG8gbm90IGNyZWF0ZSBvdXRwdXQgZmlsZXMKKyAgICAgIC0tc3JjZGlyPURJUiAgICAgICAgZmluZCB0aGUgc291cmNlcyBpbiBESVIgW2NvbmZpZ3VyZSBkaXIgb3IgXGAuLiddCisKK0luc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKyAgLS1wcmVmaXg9UFJFRklYICAgICAgICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMgaW4gUFJFRklYCisgICAgICAgICAgICAgICAgICAgICAgICAgIFskYWNfZGVmYXVsdF9wcmVmaXhdCisgIC0tZXhlYy1wcmVmaXg9RVBSRUZJWCAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBmaWxlcyBpbiBFUFJFRklYCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtQUkVGSVhdCisKK0J5IGRlZmF1bHQsIFxgbWFrZSBpbnN0YWxsJyB3aWxsIGluc3RhbGwgYWxsIHRoZSBmaWxlcyBpbgorXGAkYWNfZGVmYXVsdF9wcmVmaXgvYmluJywgXGAkYWNfZGVmYXVsdF9wcmVmaXgvbGliJyBldGMuICBZb3UgY2FuIHNwZWNpZnkKK2FuIGluc3RhbGxhdGlvbiBwcmVmaXggb3RoZXIgdGhhbiBcYCRhY19kZWZhdWx0X3ByZWZpeCcgdXNpbmcgXGAtLXByZWZpeCcsCitmb3IgaW5zdGFuY2UgXGAtLXByZWZpeD1cJEhPTUUnLgorCitGb3IgYmV0dGVyIGNvbnRyb2wsIHVzZSB0aGUgb3B0aW9ucyBiZWxvdy4KKworRmluZSB0dW5pbmcgb2YgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKyAgLS1iaW5kaXI9RElSICAgICAgICAgICAgdXNlciBleGVjdXRhYmxlcyBbRVBSRUZJWC9iaW5dCisgIC0tc2JpbmRpcj1ESVIgICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVjdXRhYmxlcyBbRVBSRUZJWC9zYmluXQorICAtLWxpYmV4ZWNkaXI9RElSICAgICAgICBwcm9ncmFtIGV4ZWN1dGFibGVzIFtFUFJFRklYL2xpYmV4ZWNdCisgIC0tc3lzY29uZmRpcj1ESVIgICAgICAgIHJlYWQtb25seSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvZXRjXQorICAtLXNoYXJlZHN0YXRlZGlyPURJUiAgICBtb2RpZmlhYmxlIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtQUkVGSVgvY29tXQorICAtLWxvY2Fsc3RhdGVkaXI9RElSICAgICBtb2RpZmlhYmxlIHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC92YXJdCisgIC0tbGliZGlyPURJUiAgICAgICAgICAgIG9iamVjdCBjb2RlIGxpYnJhcmllcyBbRVBSRUZJWC9saWJdCisgIC0taW5jbHVkZWRpcj1ESVIgICAgICAgIEMgaGVhZGVyIGZpbGVzIFtQUkVGSVgvaW5jbHVkZV0KKyAgLS1vbGRpbmNsdWRlZGlyPURJUiAgICAgQyBoZWFkZXIgZmlsZXMgZm9yIG5vbi1nY2MgWy91c3IvaW5jbHVkZV0KKyAgLS1kYXRhcm9vdGRpcj1ESVIgICAgICAgcmVhZC1vbmx5IGFyY2guLWluZGVwZW5kZW50IGRhdGEgcm9vdCBbUFJFRklYL3NoYXJlXQorICAtLWRhdGFkaXI9RElSICAgICAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSXQorICAtLWluZm9kaXI9RElSICAgICAgICAgICBpbmZvIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL2luZm9dCisgIC0tbG9jYWxlZGlyPURJUiAgICAgICAgIGxvY2FsZS1kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVIvbG9jYWxlXQorICAtLW1hbmRpcj1ESVIgICAgICAgICAgICBtYW4gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvbWFuXQorICAtLWRvY2Rpcj1ESVIgICAgICAgICAgICBkb2N1bWVudGF0aW9uIHJvb3QgW0RBVEFST09URElSL2RvYy9saWJsdGRsXQorICAtLWh0bWxkaXI9RElSICAgICAgICAgICBodG1sIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1kdmlkaXI9RElSICAgICAgICAgICAgZHZpIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1wZGZkaXI9RElSICAgICAgICAgICAgcGRmIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1wc2Rpcj1ESVIgICAgICAgICAgICAgcHMgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorX0FDRU9GCisKKyAgY2F0IDw8XF9BQ0VPRgorCitQcm9ncmFtIG5hbWVzOgorICAtLXByb2dyYW0tcHJlZml4PVBSRUZJWCAgICAgICAgICAgIHByZXBlbmQgUFJFRklYIHRvIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCisgIC0tcHJvZ3JhbS1zdWZmaXg9U1VGRklYICAgICAgICAgICAgYXBwZW5kIFNVRkZJWCB0byBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworICAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9UFJPR1JBTSAgIHJ1biBzZWQgUFJPR1JBTSBvbiBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworCitTeXN0ZW0gdHlwZXM6CisgIC0tYnVpbGQ9QlVJTEQgICAgIGNvbmZpZ3VyZSBmb3IgYnVpbGRpbmcgb24gQlVJTEQgW2d1ZXNzZWRdCisgIC0taG9zdD1IT1NUICAgICAgIGNyb3NzLWNvbXBpbGUgdG8gYnVpbGQgcHJvZ3JhbXMgdG8gcnVuIG9uIEhPU1QgW0JVSUxEXQorX0FDRU9GCitmaQorCitpZiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIjsgdGhlbgorICBjYXNlICRhY19pbml0X2hlbHAgaW4KKyAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIGxpYmx0ZGwgMi4yLjEwOiI7OworICAgZXNhYworICBjYXQgPDxcX0FDRU9GCisKK09wdGlvbmFsIEZlYXR1cmVzOgorICAtLWRpc2FibGUtb3B0aW9uLWNoZWNraW5nICBpZ25vcmUgdW5yZWNvZ25pemVkIC0tZW5hYmxlLy0td2l0aCBvcHRpb25zCisgIC0tZGlzYWJsZS1GRUFUVVJFICAgICAgIGRvIG5vdCBpbmNsdWRlIEZFQVRVUkUgKHNhbWUgYXMgLS1lbmFibGUtRkVBVFVSRT1ubykKKyAgLS1lbmFibGUtRkVBVFVSRVs9QVJHXSAgaW5jbHVkZSBGRUFUVVJFIFtBUkc9eWVzXQorICAtLWVuYWJsZS1zaGFyZWRbPVBLR1NdICBidWlsZCBzaGFyZWQgbGlicmFyaWVzIFtkZWZhdWx0PXllc10KKyAgLS1lbmFibGUtc3RhdGljWz1QS0dTXSAgYnVpbGQgc3RhdGljIGxpYnJhcmllcyBbZGVmYXVsdD15ZXNdCisgIC0tZW5hYmxlLWZhc3QtaW5zdGFsbFs9UEtHU10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uIFtkZWZhdWx0PXllc10KKyAgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgIHNwZWVkcyB1cCBvbmUtdGltZSBidWlsZAorICAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICAgZG8gbm90IHJlamVjdCBzbG93IGRlcGVuZGVuY3kgZXh0cmFjdG9ycworICAtLWRpc2FibGUtbGlidG9vbC1sb2NrICBhdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpCisgIC0tZW5hYmxlLWx0ZGwtaW5zdGFsbCAgIGluc3RhbGwgbGlibHRkbAorCitPcHRpb25hbCBQYWNrYWdlczoKKyAgLS13aXRoLVBBQ0tBR0VbPUFSR10gICAgdXNlIFBBQ0tBR0UgW0FSRz15ZXNdCisgIC0td2l0aG91dC1QQUNLQUdFICAgICAgIGRvIG5vdCB1c2UgUEFDS0FHRSAoc2FtZSBhcyAtLXdpdGgtUEFDS0FHRT1ubykKKyAgLS13aXRoLXBpYyAgICAgICAgICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCisgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKworU29tZSBpbmZsdWVudGlhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CisgIENDICAgICAgICAgIEMgY29tcGlsZXIgY29tbWFuZAorICBDRkxBR1MgICAgICBDIGNvbXBpbGVyIGZsYWdzCisgIExERkxBR1MgICAgIGxpbmtlciBmbGFncywgZS5nLiAtTDxsaWIgZGlyPiBpZiB5b3UgaGF2ZSBsaWJyYXJpZXMgaW4gYQorICAgICAgICAgICAgICBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGxpYiBkaXI+CisgIExJQlMgICAgICAgIGxpYnJhcmllcyB0byBwYXNzIHRvIHRoZSBsaW5rZXIsIGUuZy4gLWw8bGlicmFyeT4KKyAgQ1BQRkxBR1MgICAgKE9iamVjdGl2ZSkgQy9DKysgcHJlcHJvY2Vzc29yIGZsYWdzLCBlLmcuIC1JPGluY2x1ZGUgZGlyPiBpZgorICAgICAgICAgICAgICB5b3UgaGF2ZSBoZWFkZXJzIGluIGEgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxpbmNsdWRlIGRpcj4KKyAgQ1BQICAgICAgICAgQyBwcmVwcm9jZXNzb3IKKworVXNlIHRoZXNlIHZhcmlhYmxlcyB0byBvdmVycmlkZSB0aGUgY2hvaWNlcyBtYWRlIGJ5IGBjb25maWd1cmUnIG9yIHRvIGhlbHAKK2l0IHRvIGZpbmQgbGlicmFyaWVzIGFuZCBwcm9ncmFtcyB3aXRoIG5vbnN0YW5kYXJkIG5hbWVzL2xvY2F0aW9ucy4KKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LgorX0FDRU9GCithY19zdGF0dXM9JD8KK2ZpCisKK2lmIHRlc3QgIiRhY19pbml0X2hlbHAiID0gInJlY3Vyc2l2ZSI7IHRoZW4KKyAgIyBJZiB0aGVyZSBhcmUgc3ViZGlycywgcmVwb3J0IHRoZWlyIHNwZWNpZmljIC0taGVscC4KKyAgZm9yIGFjX2RpciBpbiA6ICRhY19zdWJkaXJzX2FsbDsgZG8gdGVzdCAieCRhY19kaXIiID0geDogJiYgY29udGludWUKKyAgICB0ZXN0IC1kICIkYWNfZGlyIiB8fAorICAgICAgeyBjZCAiJHNyY2RpciIgJiYgYWNfcHdkPWBwd2RgICYmIHNyY2Rpcj0uICYmIHRlc3QgLWQgIiRhY19kaXIiOyB9IHx8CisgICAgICBjb250aW51ZQorICAgIGFjX2J1aWxkZGlyPS4KKworY2FzZSAiJGFjX2RpciIgaW4KKy4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKikKKyAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNfZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKKyAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorICBhY190b3BfYnVpbGRkaXJfc3ViPWAkYXNfZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzfC9bXlxcL10qfC8uLnxnO3N8L3x8J2AKKyAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgorICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisgICopICBhY190b3BfYnVpbGRfcHJlZml4PSRhY190b3BfYnVpbGRkaXJfc3ViLyA7OworICBlc2FjIDs7Citlc2FjCithY19hYnNfdG9wX2J1aWxkZGlyPSRhY19wd2QKK2FjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKKyMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6CithY190b3BfYnVpbGRkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgKKworY2FzZSAkc3JjZGlyIGluCisgIC4pICAjIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KKyAgICBhY19zcmNkaXI9LgorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpcl9zdWIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkIDs7CisgIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgbmFtZS4KKyAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OworICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKyAgKikgIyBSZWxhdGl2ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZC8kc3JjZGlyIDs7Citlc2FjCithY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3NyY2RpciRhY19kaXJfc3VmZml4CisKKyAgICBjZCAiJGFjX2RpciIgfHwgeyBhY19zdGF0dXM9JD87IGNvbnRpbnVlOyB9CisgICAgIyBDaGVjayBmb3IgZ3Vlc3RlZCBjb25maWd1cmUuCisgICAgaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUuZ251IjsgdGhlbgorICAgICAgZWNobyAmJgorICAgICAgJFNIRUxMICIkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUiIC0taGVscD1yZWN1cnNpdmUKKyAgICBlbGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlIjsgdGhlbgorICAgICAgZWNobyAmJgorICAgICAgJFNIRUxMICIkYWNfc3JjZGlyL2NvbmZpZ3VyZSIgLS1oZWxwPXJlY3Vyc2l2ZQorICAgIGVsc2UKKyAgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG5vIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaXMgaW4gJGFjX2RpciIgPiYyCisgICAgZmkgfHwgYWNfc3RhdHVzPSQ/CisgICAgY2QgIiRhY19wd2QiIHx8IHsgYWNfc3RhdHVzPSQ/OyBicmVhazsgfQorICBkb25lCitmaQorCit0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIiAmJiBleGl0ICRhY19zdGF0dXMKK2lmICRhY19pbml0X3ZlcnNpb247IHRoZW4KKyAgY2F0IDw8XF9BQ0VPRgorbGlibHRkbCBjb25maWd1cmUgMi4yLjEwCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjUKKworQ29weXJpZ2h0IChDKSAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2dpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KK19BQ0VPRgorICBleGl0CitmaQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEF1dG9jb25mIGluaXRpYWxpemF0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgYWNfZm5fY190cnlfY29tcGlsZSBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGNvbXBpbGUgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfY29tcGlsZSAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9jb21waWxlCisKKyMgYWNfZm5fY190cnlfbGluayBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGxpbmsgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfbGluayAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKwkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKyAgICAgICB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgIyBEZWxldGUgdGhlIElQQS9JUE8gKEludGVyIFByb2NlZHVyYWwgQW5hbHlzaXMvT3B0aW1pemF0aW9uKSBpbmZvcm1hdGlvbgorICAjIGNyZWF0ZWQgYnkgdGhlIFBHSSBjb21waWxlciAoY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyksIGFzIGl0IHdvdWxkCisgICMgaW50ZXJmZXJlIHdpdGggdGhlIG5leHQgbGluayBjb21tYW5kOyBhbHNvIGRlbGV0ZSBhIGRpcmVjdG9yeSB0aGF0IGlzCisgICMgbGVmdCBiZWhpbmQgYnkgQXBwbGUncyBjb21waWxlci4gIFdlIGRvIHRoaXMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgYWN0aW9ucy4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbworICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X2xpbmsKKworIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlIExJTkVOTyBIRUFERVIgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBIRUFERVIgZXhpc3RzIGFuZCBjYW4gYmUgY29tcGlsZWQgdXNpbmcgdGhlIGluY2x1ZGUgZmlsZXMgaW4KKyMgSU5DTFVERVMsIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseS4KK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIHsgYXNfdmFyPSQzOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKKyNpbmNsdWRlIDwkMj4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkMz15ZXMiCitlbHNlCisgIGV2YWwgIiQzPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorCit9ICMgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZQorCisjIGFjX2ZuX2NfdHJ5X2NwcCBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gcHJlcHJvY2VzcyBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jX3RyeV9jcHAgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB7IHsgYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ID4vZGV2L251bGwgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICAgYWNfcmV0dmFsPTEKK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY190cnlfY3BwCisKKyMgYWNfZm5fY190cnlfcnVuIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBsaW5rIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4gQXNzdW1lcworIyB0aGF0IGV4ZWN1dGFibGVzICpjYW4qIGJlIHJ1bi4KK2FjX2ZuX2NfdHJ5X3J1biAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGlmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CisgICAgICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgICAgICBhY19yZXR2YWw9JGFjX3N0YXR1cworZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbworICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X3J1bgorCisjIGFjX2ZuX2NfY2hlY2tfZnVuYyBMSU5FTk8gRlVOQyBWQVIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIEZVTkMgZXhpc3RzLCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkKK2FjX2ZuX2NfY2hlY2tfZnVuYyAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgeyBhc192YXI9JDM7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisvKiBEZWZpbmUgJDIgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkMi4KKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworI2RlZmluZSAkMiBpbm5vY3VvdXNfJDIKKworLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJDIgKCk7IGJlbG93LgorICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCisjdW5kZWYgJDIKKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciAkMiAoKTsKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgX19zdHViXyQyIHx8IGRlZmluZWQgX19zdHViX19fJDIKK2Nob2tlIG1lCisjZW5kaWYKKworaW50CittYWluICgpCit7CityZXR1cm4gJDIgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJDM9eWVzIgorZWxzZQorICBldmFsICIkMz1ubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorCit9ICMgYWNfZm5fY19jaGVja19mdW5jCisKKyMgYWNfZm5fY19jaGVja19kZWNsIExJTkVOTyBTWU1CT0wgVkFSCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIFNZTUJPTCBpcyBkZWNsYXJlZCwgc2V0dGluZyBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX2RlY2wgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJDIgaXMgZGVjbGFyZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkMiBpcyBkZWNsYXJlZC4uLiAiID4mNjsgfQoraWYgeyBhc192YXI9JDM7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CisjaWZuZGVmICQyCisgICh2b2lkKSAkMjsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJDM9eWVzIgorZWxzZQorICBldmFsICIkMz1ubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKworfSAjIGFjX2ZuX2NfY2hlY2tfZGVjbAorCisjIGFjX2ZuX2NfY2hlY2tfdHlwZSBMSU5FTk8gVFlQRSBWQVIgSU5DTFVERVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIFRZUEUgZXhpc3RzIGFmdGVyIGhhdmluZyBpbmNsdWRlZCBJTkNMVURFUywgc2V0dGluZyBjYWNoZQorIyB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX3R5cGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIHsgYXNfdmFyPSQzOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK2lmIChzaXplb2YgKCQyKSkKKwkgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworaWYgKHNpemVvZiAoKCQyKSkpCisJICAgIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgZXZhbCAiJDM9eWVzIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorCit9ICMgYWNfZm5fY19jaGVja190eXBlCitjYXQgPmNvbmZpZy5sb2cgPDxfQUNFT0YKK1RoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCitydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgorCitJdCB3YXMgY3JlYXRlZCBieSBsaWJsdGRsICRhc19tZSAyLjIuMTAsIHdoaWNoIHdhcworZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY1LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisKKyAgJCAkMCAkQAorCitfQUNFT0YKK2V4ZWMgNT4+Y29uZmlnLmxvZworeworY2F0IDw8X0FTVU5BTUUKKyMjIC0tLS0tLS0tLSAjIworIyMgUGxhdGZvcm0uICMjCisjIyAtLS0tLS0tLS0gIyMKKworaG9zdG5hbWUgPSBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKK3VuYW1lIC1tID0gYCh1bmFtZSAtbSkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXIgPSBgKHVuYW1lIC1yKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtcyA9IGAodW5hbWUgLXMpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC12ID0gYCh1bmFtZSAtdikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorCisvdXNyL2Jpbi91bmFtZSAtcCA9IGAoL3Vzci9iaW4vdW5hbWUgLXApIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKy9iaW4vdW5hbWUgLVggICAgID0gYCgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbCAgICAgfHwgZWNobyB1bmtub3duYAorCisvYmluL2FyY2ggICAgICAgICAgICAgID0gYCgvYmluL2FyY2gpIDI+L2Rldi9udWxsICAgICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisvdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCisvdXNyL2NvbnZleC9nZXRzeXNpbmZvID0gYCgvdXNyL2NvbnZleC9nZXRzeXNpbmZvKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisvdXNyL2Jpbi9ob3N0aW5mbyAgICAgID0gYCgvdXNyL2Jpbi9ob3N0aW5mbykgMj4vZGV2L251bGwgICAgICB8fCBlY2hvIHVua25vd25gCisvYmluL21hY2hpbmUgICAgICAgICAgID0gYCgvYmluL21hY2hpbmUpIDI+L2Rldi9udWxsICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisvdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCisvYmluL3VuaXZlcnNlICAgICAgICAgID0gYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbCAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisKK19BU1VOQU1FCisKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAkYXNfZWNobyAiUEFUSDogJGFzX2RpciIKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCit9ID4mNQorCitjYXQgPiY1IDw8X0FDRU9GCisKKworIyMgLS0tLS0tLS0tLS0gIyMKKyMjIENvcmUgdGVzdHMuICMjCisjIyAtLS0tLS0tLS0tLSAjIworCitfQUNFT0YKKworCisjIEtlZXAgYSB0cmFjZSBvZiB0aGUgY29tbWFuZCBsaW5lLgorIyBTdHJpcCBvdXQgLS1uby1jcmVhdGUgYW5kIC0tbm8tcmVjdXJzaW9uIHNvIHRoZXkgZG8gbm90IHBpbGUgdXAuCisjIFN0cmlwIG91dCAtLXNpbGVudCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gcmVjb3JkIGl0IGZvciBmdXR1cmUgcnVucy4KKyMgQWxzbyBxdW90ZSBhbnkgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGEtY2hhcmFjdGVycy4KKyMgTWFrZSB0d28gcGFzc2VzIHRvIGFsbG93IGZvciBwcm9wZXIgZHVwbGljYXRlLWFyZ3VtZW50IHN1cHByZXNzaW9uLgorYWNfY29uZmlndXJlX2FyZ3M9CithY19jb25maWd1cmVfYXJnczA9CithY19jb25maWd1cmVfYXJnczE9CithY19tdXN0X2tlZXBfbmV4dD1mYWxzZQorZm9yIGFjX3Bhc3MgaW4gMSAyCitkbworICBmb3IgYWNfYXJnCisgIGRvCisgICAgY2FzZSAkYWNfYXJnIGluCisgICAgLW5vLWNyZWF0ZSB8IC0tbm8tYyogfCAtbiB8IC1uby1yZWN1cnNpb24gfCAtLW5vLXIqKSBjb250aW51ZSA7OworICAgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCisgICAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCisgICAgICBjb250aW51ZSA7OworICAgICpcJyopCisgICAgICBhY19hcmc9YCRhc19lY2hvICIkYWNfYXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgIGVzYWMKKyAgICBjYXNlICRhY19wYXNzIGluCisgICAgMSkgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzMCAiICckYWNfYXJnJyIgOzsKKyAgICAyKQorICAgICAgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzMSAiICckYWNfYXJnJyIKKyAgICAgIGlmIHRlc3QgJGFjX211c3Rfa2VlcF9uZXh0ID0gdHJ1ZTsgdGhlbgorCWFjX211c3Rfa2VlcF9uZXh0PWZhbHNlICMgR290IHZhbHVlLCBiYWNrIHRvIG5vcm1hbC4KKyAgICAgIGVsc2UKKwljYXNlICRhY19hcmcgaW4KKwkgICo9KiB8IC0tY29uZmlnLWNhY2hlIHwgLUMgfCAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSogXAorCSAgfCAtZW5hYmxlLSogfCAtLWVuYWJsZS0qIHwgLWdhcyB8IC0tZyogfCAtbmZwIHwgLS1uZiogXAorCSAgfCAtcSB8IC1xdWlldCB8IC0tcSogfCAtc2lsZW50IHwgLS1zaWwqIHwgLXYgfCAtdmVyYiogXAorCSAgfCAtd2l0aC0qIHwgLS13aXRoLSogfCAtd2l0aG91dC0qIHwgLS13aXRob3V0LSogfCAtLXgpCisJICAgIGNhc2UgIiRhY19jb25maWd1cmVfYXJnczAgIiBpbgorCSAgICAgICIkYWNfY29uZmlndXJlX2FyZ3MxIioiICckYWNfYXJnJyAiKiApIGNvbnRpbnVlIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgIC0qICkgYWNfbXVzdF9rZWVwX25leHQ9dHJ1ZSA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MgIiAnJGFjX2FyZyciCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorZG9uZQoreyBhY19jb25maWd1cmVfYXJnczA9OyB1bnNldCBhY19jb25maWd1cmVfYXJnczA7fQoreyBhY19jb25maWd1cmVfYXJnczE9OyB1bnNldCBhY19jb25maWd1cmVfYXJnczE7fQorCisjIFdoZW4gaW50ZXJydXB0ZWQgb3IgZXhpdCdkLCBjbGVhbnVwIHRlbXBvcmFyeSBmaWxlcywgYW5kIGNvbXBsZXRlCisjIGNvbmZpZy5sb2cuICBXZSByZW1vdmUgY29tbWVudHMgYmVjYXVzZSBhbnl3YXkgdGhlIHF1b3RlcyBpbiB0aGVyZQorIyB3b3VsZCBjYXVzZSBwcm9ibGVtcyBvciBsb29rIHVnbHkuCisjIFdBUk5JTkc6IFVzZSAnXCcnIHRvIHJlcHJlc2VudCBhbiBhcG9zdHJvcGhlIHdpdGhpbiB0aGUgdHJhcC4KKyMgV0FSTklORzogRG8gbm90IHN0YXJ0IHRoZSB0cmFwIGNvZGUgd2l0aCBhIG5ld2xpbmUsIGR1ZSB0byBhIEZyZWVCU0QgNC4wIGJ1Zy4KK3RyYXAgJ2V4aXRfc3RhdHVzPSQ/CisgICMgU2F2ZSBpbnRvIGNvbmZpZy5sb2cgc29tZSBpbmZvcm1hdGlvbiB0aGF0IG1pZ2h0IGhlbHAgaW4gZGVidWdnaW5nLgorICB7CisgICAgZWNobworCisgICAgY2F0IDw8XF9BU0JPWAorIyMgLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQ2FjaGUgdmFyaWFibGVzLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLSAjIworX0FTQk9YCisgICAgZWNobworICAgICMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisoCisgIGZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfCBzZWQgLW4gJ1wnJ3MvXlwoW2EtekEtWl9dW2EtekEtWjAtOV9dKlwpPS4qL1wxL3AnXCcnYDsgZG8KKyAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgICBjYXNlICRhY192YWwgaW4gIygKKyAgICAqJHthc19ubH0qKQorICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mMjt9IDs7CisgICAgICBlc2FjCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgIF8gfCBJRlMgfCBhc19ubCkgOzsgIygKKyAgICAgIEJBU0hfQVJHViB8IEJBU0hfU09VUkNFKSBldmFsICRhY192YXI9IDs7ICMoCisgICAgICAqKSB7IGV2YWwgJGFjX3Zhcj07IHVuc2V0ICRhY192YXI7fSA7OworICAgICAgZXNhYyA7OworICAgIGVzYWMKKyAgZG9uZQorICAoc2V0KSAyPiYxIHwKKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9J1wnJyAnXCcnOyBzZXQpIDI+JjFgIGluICMoCisgICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQorICAgICAgc2VkIC1uIFwKKwkicy8nXCcnLydcJydcXFxcJ1wnJydcJycvZzsKKwkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1wnJ1xcMidcJycvcCIKKyAgICAgIDs7ICMoCisgICAgKikKKyAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCisgICAgICA7OworICAgIGVzYWMgfAorICAgIHNvcnQKKykKKyAgICBlY2hvCisKKyAgICBjYXQgPDxcX0FTQk9YCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgT3V0cHV0IHZhcmlhYmxlcy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCitfQVNCT1gKKyAgICBlY2hvCisgICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfdmFycworICAgIGRvCisgICAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgICAgIGNhc2UgJGFjX3ZhbCBpbgorICAgICAgKlwnXCcnKikgYWNfdmFsPWAkYXNfZWNobyAiJGFjX3ZhbCIgfCBzZWQgInMvJ1wnJy8nXCcnXFxcXFxcXFwnXCcnJ1wnJy9nImA7OworICAgICAgZXNhYworICAgICAgJGFzX2VjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgorICAgIGRvbmUgfCBzb3J0CisgICAgZWNobworCisgICAgaWYgdGVzdCAtbiAiJGFjX3N1YnN0X2ZpbGVzIjsgdGhlbgorICAgICAgY2F0IDw8XF9BU0JPWAorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRmlsZSBzdWJzdGl0dXRpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworX0FTQk9YCisgICAgICBlY2hvCisgICAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF9maWxlcworICAgICAgZG8KKwlldmFsIGFjX3ZhbD1cJCRhY192YXIKKwljYXNlICRhY192YWwgaW4KKwkqXCdcJycqKSBhY192YWw9YCRhc19lY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CisJZXNhYworCSRhc19lY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKKyAgICAgIGRvbmUgfCBzb3J0CisgICAgICBlY2hvCisgICAgZmkKKworICAgIGlmIHRlc3QgLXMgY29uZmRlZnMuaDsgdGhlbgorICAgICAgY2F0IDw8XF9BU0JPWAorIyMgLS0tLS0tLS0tLS0gIyMKKyMjIGNvbmZkZWZzLmguICMjCisjIyAtLS0tLS0tLS0tLSAjIworX0FTQk9YCisgICAgICBlY2hvCisgICAgICBjYXQgY29uZmRlZnMuaAorICAgICAgZWNobworICAgIGZpCisgICAgdGVzdCAiJGFjX3NpZ25hbCIgIT0gMCAmJgorICAgICAgJGFzX2VjaG8gIiRhc19tZTogY2F1Z2h0IHNpZ25hbCAkYWNfc2lnbmFsIgorICAgICRhc19lY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIgorICB9ID4mNQorICBybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogJiYKKyAgICBybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMqIGNvbmYkJCogJGFjX2NsZWFuX2ZpbGVzICYmCisgICAgZXhpdCAkZXhpdF9zdGF0dXMKKycgMAorZm9yIGFjX3NpZ25hbCBpbiAxIDIgMTMgMTU7IGRvCisgIHRyYXAgJ2FjX3NpZ25hbD0nJGFjX3NpZ25hbCc7IGFzX2ZuX2V4aXQgMScgJGFjX3NpZ25hbAorZG9uZQorYWNfc2lnbmFsPTAKKworIyBjb25mZGVmcy5oIGF2b2lkcyBPUyBjb21tYW5kIGxpbmUgbGVuZ3RoIGxpbWl0cyB0aGF0IERFRlMgY2FuIGV4Y2VlZC4KK3JtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcy5oCisKKyRhc19lY2hvICIvKiBjb25mZGVmcy5oICovIiA+IGNvbmZkZWZzLmgKKworIyBQcmVkZWZpbmVkIHByZXByb2Nlc3NvciB2YXJpYWJsZXMuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9OQU1FICIkUEFDS0FHRV9OQU1FIgorX0FDRU9GCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICIkUEFDS0FHRV9UQVJOQU1FIgorX0FDRU9GCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIkUEFDS0FHRV9WRVJTSU9OIgorX0FDRU9GCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIiRQQUNLQUdFX1NUUklORyIKK19BQ0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICIkUEFDS0FHRV9CVUdSRVBPUlQiCitfQUNFT0YKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX1VSTCAiJFBBQ0tBR0VfVVJMIgorX0FDRU9GCisKKworIyBMZXQgdGhlIHNpdGUgZmlsZSBzZWxlY3QgYW4gYWx0ZXJuYXRlIGNhY2hlIGZpbGUgaWYgaXQgd2FudHMgdG8uCisjIFByZWZlciBhbiBleHBsaWNpdGx5IHNlbGVjdGVkIGZpbGUgdG8gYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbmVzLgorYWNfc2l0ZV9maWxlMT1OT05FCithY19zaXRlX2ZpbGUyPU5PTkUKK2lmIHRlc3QgLW4gIiRDT05GSUdfU0lURSI7IHRoZW4KKyAgYWNfc2l0ZV9maWxlMT0kQ09ORklHX1NJVEUKK2VsaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCisgIGFjX3NpdGVfZmlsZTE9JHByZWZpeC9zaGFyZS9jb25maWcuc2l0ZQorICBhY19zaXRlX2ZpbGUyPSRwcmVmaXgvZXRjL2NvbmZpZy5zaXRlCitlbHNlCisgIGFjX3NpdGVfZmlsZTE9JGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCisgIGFjX3NpdGVfZmlsZTI9JGFjX2RlZmF1bHRfcHJlZml4L2V0Yy9jb25maWcuc2l0ZQorZmkKK2ZvciBhY19zaXRlX2ZpbGUgaW4gIiRhY19zaXRlX2ZpbGUxIiAiJGFjX3NpdGVfZmlsZTIiCitkbworICB0ZXN0ICJ4JGFjX3NpdGVfZmlsZSIgPSB4Tk9ORSAmJiBjb250aW51ZQorICBpZiB0ZXN0IC9kZXYvbnVsbCAhPSAiJGFjX3NpdGVfZmlsZSIgJiYgdGVzdCAtciAiJGFjX3NpdGVfZmlsZSI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNjt9CisgICAgc2VkICdzL14vfCAvJyAiJGFjX3NpdGVfZmlsZSIgPiY1CisgICAgLiAiJGFjX3NpdGVfZmlsZSIKKyAgZmkKK2RvbmUKKworaWYgdGVzdCAtciAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICMgU29tZSB2ZXJzaW9ucyBvZiBiYXNoIHdpbGwgZmFpbCB0byBzb3VyY2UgL2Rldi9udWxsIChzcGVjaWFsIGZpbGVzCisgICMgYWN0dWFsbHkpLCBzbyB3ZSBhdm9pZCBkb2luZyB0aGF0LiAgREpHUFAgZW11bGF0ZXMgaXQgYXMgYSByZWd1bGFyIGZpbGUuCisgIGlmIHRlc3QgL2Rldi9udWxsICE9ICIkY2FjaGVfZmlsZSIgJiYgdGVzdCAtZiAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgICAgY2FzZSAkY2FjaGVfZmlsZSBpbgorICAgICAgW1xcL10qIHwgPzpbXFwvXSogKSAuICIkY2FjaGVfZmlsZSI7OworICAgICAgKikgICAgICAgICAgICAgICAgICAgICAgLiAiLi8kY2FjaGVfZmlsZSI7OworICAgIGVzYWMKKyAgZmkKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgPiRjYWNoZV9maWxlCitmaQorCisjIENoZWNrIHRoYXQgdGhlIHByZWNpb3VzIHZhcmlhYmxlcyBzYXZlZCBpbiB0aGUgY2FjaGUgaGF2ZSBrZXB0IHRoZSBzYW1lCisjIHZhbHVlLgorYWNfY2FjaGVfY29ycnVwdGVkPWZhbHNlCitmb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbworICBldmFsIGFjX29sZF9zZXQ9XCRhY19jdl9lbnZfJHthY192YXJ9X3NldAorICBldmFsIGFjX25ld19zZXQ9XCRhY19lbnZfJHthY192YXJ9X3NldAorICBldmFsIGFjX29sZF92YWw9XCRhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlCisgIGV2YWwgYWNfbmV3X3ZhbD1cJGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWUKKyAgY2FzZSAkYWNfb2xkX3NldCwkYWNfbmV3X3NldCBpbgorICAgIHNldCwpCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CisgICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OiA7OworICAgICxzZXQpCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KKyAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CisgICAgLCk7OworICAgICopCisgICAgICBpZiB0ZXN0ICJ4JGFjX29sZF92YWwiICE9ICJ4JGFjX25ld192YWwiOyB0aGVuCisJIyBkaWZmZXJlbmNlcyBpbiB3aGl0ZXNwYWNlIGRvIG5vdCBsZWFkIHRvIGZhaWx1cmUuCisJYWNfb2xkX3ZhbF93PWBlY2hvIHggJGFjX29sZF92YWxgCisJYWNfbmV3X3ZhbF93PWBlY2hvIHggJGFjX25ld192YWxgCisJaWYgdGVzdCAiJGFjX29sZF92YWxfdyIgIT0gIiRhY19uZXdfdmFsX3ciOyB0aGVuCisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQorCSAgYWNfY2FjaGVfY29ycnVwdGVkPToKKwllbHNlCisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHdhcm5pbmc6IGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcyBpbiBcYCRhY192YXInIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHdhcm5pbmc6IGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcyBpbiBcYCRhY192YXInIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQorCSAgZXZhbCAkYWNfdmFyPVwkYWNfb2xkX3ZhbAorCWZpCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAgIGZvcm1lciB2YWx1ZTogIFxgJGFjX29sZF92YWwnIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICAgZm9ybWVyIHZhbHVlOiAgXGAkYWNfb2xkX3ZhbCciID4mMjt9CisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAgIGN1cnJlbnQgdmFsdWU6IFxgJGFjX25ld192YWwnIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mMjt9CisgICAgICBmaTs7CisgIGVzYWMKKyAgIyBQYXNzIHByZWNpb3VzIHZhcmlhYmxlcyB0byBjb25maWcuc3RhdHVzLgorICBpZiB0ZXN0ICIkYWNfbmV3X3NldCIgPSBzZXQ7IHRoZW4KKyAgICBjYXNlICRhY19uZXdfdmFsIGluCisgICAgKlwnKikgYWNfYXJnPSRhY192YXI9YCRhc19lY2hvICIkYWNfbmV3X3ZhbCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICAqKSBhY19hcmc9JGFjX3Zhcj0kYWNfbmV3X3ZhbCA7OworICAgIGVzYWMKKyAgICBjYXNlICIgJGFjX2NvbmZpZ3VyZV9hcmdzICIgaW4KKyAgICAgICoiICckYWNfYXJnJyAiKikgOzsgIyBBdm9pZCBkdXBzLiAgVXNlIG9mIHF1b3RlcyBlbnN1cmVzIGFjY3VyYWN5LgorICAgICAgKikgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzICIgJyRhY19hcmcnIiA7OworICAgIGVzYWMKKyAgZmkKK2RvbmUKK2lmICRhY19jYWNoZV9jb3JydXB0ZWQ7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiYyO30KKyAgYXNfZm5fZXJyb3IgInJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiICIkTElORU5PIiA1CitmaQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1haW4gYm9keSBvZiBzY3JpcHQuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKworYWNfY29uZmlnX2hlYWRlcnM9IiRhY19jb25maWdfaGVhZGVycyBjb25maWcuaDpjb25maWctaC5pbiIKKworCithY19hdXhfZGlyPQorZm9yIGFjX2RpciBpbiBjb25maWcgIiRzcmNkaXIiL2NvbmZpZzsgZG8KKyAgZm9yIGFjX3QgaW4gaW5zdGFsbC1zaCBpbnN0YWxsLnNoIHNodG9vbDsgZG8KKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY190IjsgdGhlbgorICAgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci8kYWNfdCAtYyIKKyAgICAgIGJyZWFrIDIKKyAgICBmaQorICBkb25lCitkb25lCitpZiB0ZXN0IC16ICIkYWNfYXV4X2RpciI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNhbm5vdCBmaW5kIGluc3RhbGwtc2gsIGluc3RhbGwuc2gsIG9yIHNodG9vbCBpbiBjb25maWcgXCIkc3JjZGlyXCIvY29uZmlnIiAiJExJTkVOTyIgNQorZmkKKworIyBUaGVzZSB0aHJlZSB2YXJpYWJsZXMgYXJlIHVuZG9jdW1lbnRlZCBhbmQgdW5zdXBwb3J0ZWQsCisjIGFuZCBhcmUgaW50ZW5kZWQgdG8gYmUgd2l0aGRyYXduIGluIGEgZnV0dXJlIEF1dG9jb25mIHJlbGVhc2UuCisjIFRoZXkgY2FuIGNhdXNlIHNlcmlvdXMgcHJvYmxlbXMgaWYgYSBidWlsZGVyJ3Mgc291cmNlIHRyZWUgaXMgaW4gYSBkaXJlY3RvcnkKKyMgd2hvc2UgZnVsbCBuYW1lIGNvbnRhaW5zIHVudXN1YWwgY2hhcmFjdGVycy4KK2FjX2NvbmZpZ19ndWVzcz0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KK2FjX2NvbmZpZ19zdWI9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorYWNfY29uZmlndXJlPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlndXJlIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorCisKKworCisKKworCisKKyAjIEkgYW0gbWUhCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBBdXRvbWFrZSBJbml0aWFsaXNhdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCithbV9fYXBpX3ZlcnNpb249JzEuMTEnCisKKyMgRmluZCBhIGdvb2QgaW5zdGFsbCBwcm9ncmFtLiAgV2UgcHJlZmVyIGEgQyBwcm9ncmFtIChmYXN0ZXIpLAorIyBzbyBvbmUgc2NyaXB0IGlzIGFzIGdvb2QgYXMgYW5vdGhlci4gIEJ1dCBhdm9pZCB0aGUgYnJva2VuIG9yCisjIGluY29tcGF0aWJsZSB2ZXJzaW9uczoKKyMgU3lzViAvZXRjL2luc3RhbGwsIC91c3Ivc2Jpbi9pbnN0YWxsCisjIFN1bk9TIC91c3IvZXRjL2luc3RhbGwKKyMgSVJJWCAvc2Jpbi9pbnN0YWxsCisjIEFJWCAvYmluL2luc3RhbGwKKyMgQW1pZ2FPUyAvQy9pbnN0YWxsLCB3aGljaCBpbnN0YWxscyBib290YmxvY2tzIG9uIGZsb3BweSBkaXNjcworIyBBSVggNCAvdXNyL2Jpbi9pbnN0YWxsYnNkLCB3aGljaCBkb2Vzbid0IHdvcmsgd2l0aG91dCBhIC1nIGZsYWcKKyMgQUZTIC91c3IvYWZzd3MvYmluL2luc3RhbGwsIHdoaWNoIG1pc2hhbmRsZXMgbm9uZXhpc3RlbnQgYXJncworIyBTVlI0IC91c3IvdWNiL2luc3RhbGwsIHdoaWNoIHRyaWVzIHRvIHVzZSB0aGUgbm9uZXhpc3RlbnQgZ3JvdXAgInN0YWZmIgorIyBPUy8yJ3Mgc3lzdGVtIGluc3RhbGwsIHdoaWNoIGhhcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHNlbWFudGljCisjIC4vaW5zdGFsbCwgd2hpY2ggY2FuIGJlIGVycm9uZW91c2x5IGNyZWF0ZWQgYnkgbWFrZSBmcm9tIC4vaW5zdGFsbC5zaC4KKyMgUmVqZWN0IGluc3RhbGwgcHJvZ3JhbXMgdGhhdCBjYW5ub3QgaW5zdGFsbCBtdWx0aXBsZSBmaWxlcy4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsLi4uICIgPiY2OyB9CitpZiB0ZXN0IC16ICIkSU5TVEFMTCI7IHRoZW4KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICMgQWNjb3VudCBmb3IgcGVvcGxlIHdobyBwdXQgdHJhaWxpbmcgc2xhc2hlcyBpbiBQQVRIIGVsZW1lbnRzLgorY2FzZSAkYXNfZGlyLyBpbiAjKCgKKyAgLi8gfCAuLy8gfCAvW2NDXS8qIHwgXAorICAvZXRjLyogfCAvdXNyL3NiaW4vKiB8IC91c3IvZXRjLyogfCAvc2Jpbi8qIHwgL3Vzci9hZnN3cy9iaW4vKiB8IFwKKyAgPzpbXFwvXW9zMltcXC9daW5zdGFsbFtcXC9dKiB8ID86W1xcL11PUzJbXFwvXUlOU1RBTExbXFwvXSogfCBcCisgIC91c3IvdWNiLyogKSA7OworICAqKQorICAgICMgT1NGMSBhbmQgU0NPIE9EVCAzLjAgaGF2ZSB0aGVpciBvd24gbmFtZXMgZm9yIGluc3RhbGwuCisgICAgIyBEb24ndCB1c2UgaW5zdGFsbGJzZCBmcm9tIE9TRiBzaW5jZSBpdCBpbnN0YWxscyBzdHVmZiBhcyByb290CisgICAgIyBieSBkZWZhdWx0LgorICAgIGZvciBhY19wcm9nIGluIGdpbnN0YWxsIHNjb2luc3QgaW5zdGFsbDsgZG8KKyAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworCWlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCI7IH07IHRoZW4KKwkgIGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisJICAgIGdyZXAgZHNwbXNnICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgICAgIyBBSVggaW5zdGFsbC4gIEl0IGhhcyBhbiBpbmNvbXBhdGlibGUgY2FsbGluZyBjb252ZW50aW9uLgorCSAgICA6CisJICBlbGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisJICAgIGdyZXAgcHdwbHVzICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgICAgIyBwcm9ncmFtLXNwZWNpZmljIGluc3RhbGwgc2NyaXB0IHVzZWQgYnkgSFAgcHdwbHVzLS1kb24ndCB1c2UuCisJICAgIDoKKwkgIGVsc2UKKwkgICAgcm0gLXJmIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gY29uZnRlc3QuZGlyCisJICAgIGVjaG8gb25lID4gY29uZnRlc3Qub25lCisJICAgIGVjaG8gdHdvID4gY29uZnRlc3QudHdvCisJICAgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorCSAgICBpZiAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgLWMgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byAiYHB3ZGAvY29uZnRlc3QuZGlyIiAmJgorCSAgICAgIHRlc3QgLXMgY29uZnRlc3Qub25lICYmIHRlc3QgLXMgY29uZnRlc3QudHdvICYmCisJICAgICAgdGVzdCAtcyBjb25mdGVzdC5kaXIvY29uZnRlc3Qub25lICYmCisJICAgICAgdGVzdCAtcyBjb25mdGVzdC5kaXIvY29uZnRlc3QudHdvCisJICAgIHRoZW4KKwkgICAgICBhY19jdl9wYXRoX2luc3RhbGw9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQgLWMiCisJICAgICAgYnJlYWsgMworCSAgICBmaQorCSAgZmkKKwlmaQorICAgICAgZG9uZQorICAgIGRvbmUKKyAgICA7OworZXNhYworCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworcm0gLXJmIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gY29uZnRlc3QuZGlyCisKK2ZpCisgIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCisgICAgSU5TVEFMTD0kYWNfY3ZfcGF0aF9pbnN0YWxsCisgIGVsc2UKKyAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBEb24ndCBjYWNoZSBhCisgICAgIyB2YWx1ZSBmb3IgSU5TVEFMTCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAorICAgICMgYnJlYWsgb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhlIGNhY2hlIGlmIHRoYXQgZGlyZWN0b3J5IGlzCisgICAgIyByZW1vdmVkLCBvciBpZiB0aGUgdmFsdWUgaXMgYSByZWxhdGl2ZSBuYW1lLgorICAgIElOU1RBTEw9JGFjX2luc3RhbGxfc2gKKyAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJElOU1RBTEwiID4mNQorJGFzX2VjaG8gIiRJTlNUQUxMIiA+JjY7IH0KKworIyBVc2UgdGVzdCAteiBiZWNhdXNlIFN1bk9TNCBzaCBtaXNoYW5kbGVzIGJyYWNlcyBpbiAke3Zhci12YWx9LgorIyBJdCB0aGlua3MgdGhlIGZpcnN0IGNsb3NlIGJyYWNlIGVuZHMgdGhlIHZhcmlhYmxlIHN1YnN0aXR1dGlvbi4KK3Rlc3QgLXogIiRJTlNUQUxMX1BST0dSQU0iICYmIElOU1RBTExfUFJPR1JBTT0nJHtJTlNUQUxMfScKKwordGVzdCAteiAiJElOU1RBTExfU0NSSVBUIiAmJiBJTlNUQUxMX1NDUklQVD0nJHtJTlNUQUxMfScKKwordGVzdCAteiAiJElOU1RBTExfREFUQSIgJiYgSU5TVEFMTF9EQVRBPScke0lOU1RBTEx9IC1tIDY0NCcKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lLi4uICIgPiY2OyB9CisjIEp1c3QgaW4gY2FzZQorc2xlZXAgMQorZWNobyB0aW1lc3RhbXAgPiBjb25mdGVzdC5maWxlCisjIFJlamVjdCB1bnNhZmUgY2hhcmFjdGVycyBpbiAkc3JjZGlyIG9yIHRoZSBhYnNvbHV0ZSB3b3JraW5nIGRpcmVjdG9yeQorIyBuYW1lLiAgQWNjZXB0IHNwYWNlIGFuZCB0YWIgb25seSBpbiB0aGUgbGF0dGVyLgorYW1fbGY9JworJworY2FzZSBgcHdkYCBpbgorICAqW1xcXCJcI1wkXCZcJ1xgJGFtX2xmXSopCisgICAgYXNfZm5fZXJyb3IgInVuc2FmZSBhYnNvbHV0ZSB3b3JraW5nIGRpcmVjdG9yeSBuYW1lIiAiJExJTkVOTyIgNTs7Citlc2FjCitjYXNlICRzcmNkaXIgaW4KKyAgKltcXFwiXCNcJFwmXCdcYCRhbV9sZlwgXAldKikKKyAgICBhc19mbl9lcnJvciAidW5zYWZlIHNyY2RpciB2YWx1ZTogXGAkc3JjZGlyJyIgIiRMSU5FTk8iIDU7OworZXNhYworCisjIERvIGBzZXQnIGluIGEgc3Vic2hlbGwgc28gd2UgZG9uJ3QgY2xvYmJlciB0aGUgY3VycmVudCBzaGVsbCdzCisjIGFyZ3VtZW50cy4gIE11c3QgdHJ5IC1MIGZpcnN0IGluIGNhc2UgY29uZmlndXJlIGlzIGFjdHVhbGx5IGEKKyMgc3ltbGluazsgc29tZSBzeXN0ZW1zIHBsYXkgd2VpcmQgZ2FtZXMgd2l0aCB0aGUgbW9kIHRpbWUgb2Ygc3ltbGlua3MKKyMgKGVnIEZyZWVCU0QgcmV0dXJucyB0aGUgbW9kIHRpbWUgb2YgdGhlIHN5bWxpbmsncyBjb250YWluaW5nCisjIGRpcmVjdG9yeSkuCitpZiAoCisgICBzZXQgWCBgbHMgLUx0ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCisgICBpZiB0ZXN0ICIkKiIgPSAiWCI7IHRoZW4KKyAgICAgICMgLUwgZGlkbid0IHdvcmsuCisgICAgICBzZXQgWCBgbHMgLXQgIiRzcmNkaXIvY29uZmlndXJlIiBjb25mdGVzdC5maWxlYAorICAgZmkKKyAgIHJtIC1mIGNvbmZ0ZXN0LmZpbGUKKyAgIGlmIHRlc3QgIiQqIiAhPSAiWCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIiBcCisgICAgICAmJiB0ZXN0ICIkKiIgIT0gIlggY29uZnRlc3QuZmlsZSAkc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KKworICAgICAgIyBJZiBuZWl0aGVyIG1hdGNoZWQsIHRoZW4gd2UgaGF2ZSBhIGJyb2tlbiBscy4gIFRoaXMgY2FuIGhhcHBlbgorICAgICAgIyBpZiwgZm9yIGluc3RhbmNlLCBDT05GSUdfU0hFTEwgaXMgYmFzaCBhbmQgaXQgaW5oZXJpdHMgYQorICAgICAgIyBicm9rZW4gbHMgYWxpYXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuICBUaGlzIGhhcyBhY3R1YWxseQorICAgICAgIyBoYXBwZW5lZC4gIFN1Y2ggYSBzeXN0ZW0gY291bGQgbm90IGJlIGNvbnNpZGVyZWQgInNhbmUiLgorICAgICAgYXNfZm5fZXJyb3IgImxzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KK2FsaWFzIGluIHlvdXIgZW52aXJvbm1lbnQiICIkTElORU5PIiA1CisgICBmaQorCisgICB0ZXN0ICIkMiIgPSBjb25mdGVzdC5maWxlCisgICApCit0aGVuCisgICAjIE9rLgorICAgOgorZWxzZQorICAgYXNfZm5fZXJyb3IgIm5ld2x5IGNyZWF0ZWQgZmlsZSBpcyBvbGRlciB0aGFuIGRpc3RyaWJ1dGVkIGZpbGVzIQorQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2siICIkTElORU5PIiA1CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KK3Rlc3QgIiRwcm9ncmFtX3ByZWZpeCIgIT0gTk9ORSAmJgorICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzJl4mJHByb2dyYW1fcHJlZml4JjskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKKyMgVXNlIGEgZG91YmxlICQgc28gbWFrZSBpZ25vcmVzIGl0LgordGVzdCAiJHByb2dyYW1fc3VmZml4IiAhPSBOT05FICYmCisgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9InMmXCQmJHByb2dyYW1fc3VmZml4JjskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKKyMgRG91YmxlIGFueSBcIG9yICQuCisjIEJ5IGRlZmF1bHQgd2FzIGBzLHgseCcsIHJlbW92ZSBpdCBpZiB1c2VsZXNzLgorYWNfc2NyaXB0PSdzL1tcXCRdLyYmL2c7cy87cyx4LHgsJC8vJworcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT1gJGFzX2VjaG8gIiRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIiB8IHNlZCAiJGFjX3NjcmlwdCJgCisKKyMgZXhwYW5kICRhY19hdXhfZGlyIHRvIGFuIGFic29sdXRlIHBhdGgKK2FtX2F1eF9kaXI9YGNkICRhY19hdXhfZGlyICYmIHB3ZGAKKworaWYgdGVzdCB4IiR7TUlTU0lORytzZXR9IiAhPSB4c2V0OyB0aGVuCisgIGNhc2UgJGFtX2F1eF9kaXIgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgTUlTU0lORz0iXCR7U0hFTEx9IFwiJGFtX2F1eF9kaXIvbWlzc2luZ1wiIiA7OworICAqKQorICAgIE1JU1NJTkc9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9taXNzaW5nIiA7OworICBlc2FjCitmaQorIyBVc2UgZXZhbCB0byBleHBhbmQgJFNIRUxMCitpZiBldmFsICIkTUlTU0lORyAtLXJ1biB0cnVlIjsgdGhlbgorICBhbV9taXNzaW5nX3J1bj0iJE1JU1NJTkcgLS1ydW4gIgorZWxzZQorICBhbV9taXNzaW5nX3J1bj0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBcYG1pc3NpbmcnIHNjcmlwdCBpcyB0b28gb2xkIG9yIG1pc3NpbmciID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogXGBtaXNzaW5nJyBzY3JpcHQgaXMgdG9vIG9sZCBvciBtaXNzaW5nIiA+JjI7fQorZmkKKworaWYgdGVzdCB4IiR7aW5zdGFsbF9zaH0iICE9IHhzZXQ7IHRoZW4KKyAgY2FzZSAkYW1fYXV4X2RpciBpbgorICAqXCAqIHwgKlwJKikKKyAgICBpbnN0YWxsX3NoPSJcJHtTSEVMTH0gJyRhbV9hdXhfZGlyL2luc3RhbGwtc2gnIiA7OworICAqKQorICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9pbnN0YWxsLXNoIgorICBlc2FjCitmaQorCisjIEluc3RhbGxlZCBiaW5hcmllcyBhcmUgdXN1YWxseSBzdHJpcHBlZCB1c2luZyBgc3RyaXAnIHdoZW4gdGhlIHVzZXIKKyMgcnVuIGBtYWtlIGluc3RhbGwtc3RyaXAnLiAgSG93ZXZlciBgc3RyaXAnIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQKKyMgdG9vbCB0byB1c2UgaW4gY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnRzLCB0aGVyZWZvcmUgQXV0b21ha2UKKyMgd2lsbCBob25vciB0aGUgYFNUUklQJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBvdmVycnVsZSB0aGlzIHByb2dyYW0uCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSBubzsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfU1RSSVA9IiRTVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX1NUUklQPSIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1NUUklQPSRhY19jdl9wcm9nX1NUUklQCitpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkU1RSSVAiID4mNQorJGFzX2VjaG8gIiRTVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCisgIGFjX2N0X1NUUklQPSRTVFJJUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IiRhY19jdF9TVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSJzdHJpcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9TVFJJUD0kYWNfY3ZfcHJvZ19hY19jdF9TVFJJUAoraWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfU1RSSVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9TVFJJUCIgPSB4OyB0aGVuCisgICAgU1RSSVA9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgU1RSSVA9JGFjX2N0X1NUUklQCisgIGZpCitlbHNlCisgIFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKK2ZpCisKK2ZpCitJTlNUQUxMX1NUUklQX1BST0dSQU09IlwkKGluc3RhbGxfc2gpIC1jIC1zIgorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIHRocmVhZC1zYWZlIG1rZGlyIC1wIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIHRocmVhZC1zYWZlIG1rZGlyIC1wLi4uICIgPiY2OyB9CitpZiB0ZXN0IC16ICIkTUtESVJfUCI7IHRoZW4KKyAgaWYgdGVzdCAiJHthY19jdl9wYXRoX21rZGlyK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi9vcHQvc2Z3L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIG1rZGlyIGdta2RpcjsgZG8KKwkgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisJICAgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgfSB8fCBjb250aW51ZQorCSAgIGNhc2UgYCIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAtLXZlcnNpb24gMj4mMWAgaW4gIygKKwkgICAgICdta2RpciAoR05VIGNvcmV1dGlscykgJyogfCBcCisJICAgICAnbWtkaXIgKGNvcmV1dGlscykgJyogfCBcCisJICAgICAnbWtkaXIgKGZpbGV1dGlscykgJzQuMSopCisJICAgICAgIGFjX2N2X3BhdGhfbWtkaXI9JGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dAorCSAgICAgICBicmVhayAzOzsKKwkgICBlc2FjCisJIGRvbmUKKyAgICAgICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKKworICB0ZXN0IC1kIC4vLS12ZXJzaW9uICYmIHJtZGlyIC4vLS12ZXJzaW9uCisgIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9ta2RpcitzZXR9IiA9IHNldDsgdGhlbgorICAgIE1LRElSX1A9IiRhY19jdl9wYXRoX21rZGlyIC1wIgorICBlbHNlCisgICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgRG9uJ3QgY2FjaGUgYQorICAgICMgdmFsdWUgZm9yIE1LRElSX1Agd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKyAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBjYWNoZSBpZiB0aGF0IGRpcmVjdG9yeSBpcworICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVsYXRpdmUgbmFtZS4KKyAgICBNS0RJUl9QPSIkYWNfaW5zdGFsbF9zaCAtZCIKKyAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1LRElSX1AiID4mNQorJGFzX2VjaG8gIiRNS0RJUl9QIiA+JjY7IH0KKworbWtkaXJfcD0iJE1LRElSX1AiCitjYXNlICRta2Rpcl9wIGluCisgIFtcXC8kXSogfCA/OltcXC9dKikgOzsKKyAgKi8qKSBta2Rpcl9wPSJcJCh0b3BfYnVpbGRkaXIpLyRta2Rpcl9wIiA7OworZXNhYworCitmb3IgYWNfcHJvZyBpbiBnYXdrIG1hd2sgbmF3ayBhd2sKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BV0src2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQVdLIjsgdGhlbgorICBhY19jdl9wcm9nX0FXSz0iJEFXSyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0FXSz0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQVdLPSRhY19jdl9wcm9nX0FXSworaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBV0siID4mNQorJGFzX2VjaG8gIiRBV0siID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkQVdLIiAmJiBicmVhaworZG9uZQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKS4uLiAiID4mNjsgfQorc2V0IHggJHtNQUtFLW1ha2V9CithY19tYWtlPWAkYXNfZWNobyAiJDIiIHwgc2VkICdzLysvcC9nOyBzL1teYS16QS1aMC05X10vXy9nJ2AKK2lmIHsgYXNfdmFyPWFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldDsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QubWFrZSA8PFxfQUNFT0YKK1NIRUxMID0gL2Jpbi9zaAorYWxsOgorCUBlY2hvICdAQEAlJSU9JChNQUtFKT1AQEAlJSUnCitfQUNFT0YKKyMgR05VIG1ha2Ugc29tZXRpbWVzIHByaW50cyAibWFrZVsxXTogRW50ZXJpbmcuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgorY2FzZSBgJHtNQUtFLW1ha2V9IC1mIGNvbmZ0ZXN0Lm1ha2UgMj4vZGV2L251bGxgIGluCisgICpAQEAlJSU9Pyo9QEBAJSUlKikKKyAgICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD15ZXM7OworICAqKQorICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PW5vOzsKK2VzYWMKK3JtIC1mIGNvbmZ0ZXN0Lm1ha2UKK2ZpCitpZiBldmFsIHRlc3QgXCRhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQgPSB5ZXM7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgU0VUX01BS0U9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBTRVRfTUFLRT0iTUFLRT0ke01BS0UtbWFrZX0iCitmaQorCitybSAtcmYgLnRzdCAyPi9kZXYvbnVsbAorbWtkaXIgLnRzdCAyPi9kZXYvbnVsbAoraWYgdGVzdCAtZCAudHN0OyB0aGVuCisgIGFtX19sZWFkaW5nX2RvdD0uCitlbHNlCisgIGFtX19sZWFkaW5nX2RvdD1fCitmaQorcm1kaXIgLnRzdCAyPi9kZXYvbnVsbAorCitpZiB0ZXN0ICJgY2QgJHNyY2RpciAmJiBwd2RgIiAhPSAiYHB3ZGAiOyB0aGVuCisgICMgVXNlIC1JJChzcmNkaXIpIG9ubHkgd2hlbiAkKHNyY2RpcikgIT0gLiwgc28gdGhhdCBtYWtlJ3Mgb3V0cHV0CisgICMgaXMgbm90IHBvbGx1dGVkIHdpdGggcmVwZWF0ZWQgIi1JLiIKKyAgYW1fX2lzcmM9JyAtSSQoc3JjZGlyKScKKyAgIyB0ZXN0IHRvIHNlZSBpZiBzcmNkaXIgYWxyZWFkeSBjb25maWd1cmVkCisgIGlmIHRlc3QgLWYgJHNyY2Rpci9jb25maWcuc3RhdHVzOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgInNvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkOyBydW4gXCJtYWtlIGRpc3RjbGVhblwiIHRoZXJlIGZpcnN0IiAiJExJTkVOTyIgNQorICBmaQorZmkKKworIyB0ZXN0IHdoZXRoZXIgd2UgaGF2ZSBjeWdwYXRoCitpZiB0ZXN0IC16ICIkQ1lHUEFUSF9XIjsgdGhlbgorICBpZiAoY3lncGF0aCAtLXZlcnNpb24pID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKyAgICBDWUdQQVRIX1c9J2N5Z3BhdGggLXcnCisgIGVsc2UKKyAgICBDWUdQQVRIX1c9ZWNobworICBmaQorZmkKKworCisjIERlZmluZSB0aGUgaWRlbnRpdHkgb2YgdGhlIHBhY2thZ2UuCisgUEFDS0FHRT0nbGlibHRkbCcKKyBWRVJTSU9OPScyLjIuMTAnCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFICIkUEFDS0FHRSIKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgVkVSU0lPTiAiJFZFUlNJT04iCitfQUNFT0YKKworIyBTb21lIHRvb2xzIEF1dG9tYWtlIG5lZWRzLgorCitBQ0xPQ0FMPSR7QUNMT0NBTC0iJHthbV9taXNzaW5nX3J1bn1hY2xvY2FsLSR7YW1fX2FwaV92ZXJzaW9ufSJ9CisKKworQVVUT0NPTkY9JHtBVVRPQ09ORi0iJHthbV9taXNzaW5nX3J1bn1hdXRvY29uZiJ9CisKKworQVVUT01BS0U9JHtBVVRPTUFLRS0iJHthbV9taXNzaW5nX3J1bn1hdXRvbWFrZS0ke2FtX19hcGlfdmVyc2lvbn0ifQorCisKK0FVVE9IRUFERVI9JHtBVVRPSEVBREVSLSIke2FtX21pc3NpbmdfcnVufWF1dG9oZWFkZXIifQorCisKK01BS0VJTkZPPSR7TUFLRUlORk8tIiR7YW1fbWlzc2luZ19ydW59bWFrZWluZm8ifQorCisjIFdlIG5lZWQgYXdrIGZvciB0aGUgImNoZWNrIiB0YXJnZXQuICBUaGUgc3lzdGVtICJhd2siIGlzIGJhZCBvbgorIyBzb21lIHBsYXRmb3Jtcy4KKyMgQWx3YXlzIGRlZmluZSBBTVRBUiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKworQU1UQVI9JHtBTVRBUi0iJHthbV9taXNzaW5nX3J1bn10YXIifQorCithbV9fdGFyPScke0FNVEFSfSBjaG9mIC0gIiQkdGFyZGlyIic7IGFtX191bnRhcj0nJHtBTVRBUn0geGYgLScKKworCisKKworCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTGlidG9vbCBzcGVjaWZpYyBjb25maWd1cmF0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworcGtnZGF0YWRpcj0nJHtkYXRhZGlyfSciLyR7UEFDS0FHRX0iCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIExpYnRvb2wgaW5pdGlhbGlzYXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworY2FzZSBgcHdkYCBpbgorICAqXCAqIHwgKlwJKikKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IExpYnRvb2wgZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggd2hpdGVzcGFjZSBpbiBcYHB3ZFxgIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IExpYnRvb2wgZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggd2hpdGVzcGFjZSBpbiBcYHB3ZFxgIiA+JjI7fSA7OworZXNhYworCisKKworbWFjcm9fdmVyc2lvbj0nMi4yLjEwJworbWFjcm9fcmV2aXNpb249JzEuMzE3NScKKworCisKKworCisKKworCisKKworCisKKworbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisKKyMgTWFrZSBzdXJlIHdlIGNhbiBydW4gY29uZmlnLnN1Yi4KKyRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgc3VuNCA+L2Rldi9udWxsIDI+JjEgfHwKKyAgYXNfZm5fZXJyb3IgImNhbm5vdCBydW4gJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICIkTElORU5PIiA1CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfYnVpbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKK3Rlc3QgIngkYWNfYnVpbGRfYWxpYXMiID0geCAmJgorICBhY19idWlsZF9hbGlhcz1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiYAordGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCisgIGFzX2ZuX2Vycm9yICJjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiICIkTElORU5PIiA1CithY19jdl9idWlsZD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkYWNfYnVpbGRfYWxpYXNgIHx8CisgIGFzX2ZuX2Vycm9yICIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkYWNfYnVpbGRfYWxpYXMgZmFpbGVkIiAiJExJTkVOTyIgNQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9idWlsZCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2J1aWxkIiA+JjY7IH0KK2Nhc2UgJGFjX2N2X2J1aWxkIGluCisqLSotKikgOzsKKyopIGFzX2ZuX2Vycm9yICJpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBidWlsZCIgIiRMSU5FTk8iIDU7OworZXNhYworYnVpbGQ9JGFjX2N2X2J1aWxkCithY19zYXZlX0lGUz0kSUZTOyBJRlM9Jy0nCitzZXQgeCAkYWNfY3ZfYnVpbGQKK3NoaWZ0CitidWlsZF9jcHU9JDEKK2J1aWxkX3ZlbmRvcj0kMgorc2hpZnQ7IHNoaWZ0CisjIFJlbWVtYmVyLCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIElGUyBpcyB1c2VkIHRvIGNyZWF0ZSAkKiwKKyMgZXhjZXB0IHdpdGggb2xkIHNoZWxsczoKK2J1aWxkX29zPSQqCitJRlM9JGFjX3NhdmVfSUZTCitjYXNlICRidWlsZF9vcyBpbiAqXCAqKSBidWlsZF9vcz1gZWNobyAiJGJ1aWxkX29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hvc3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICJ4JGhvc3RfYWxpYXMiID0geDsgdGhlbgorICBhY19jdl9ob3N0PSRhY19jdl9idWlsZAorZWxzZQorICBhY19jdl9ob3N0PWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICRob3N0X2FsaWFzYCB8fAorICAgIGFzX2ZuX2Vycm9yICIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkaG9zdF9hbGlhcyBmYWlsZWQiICIkTElORU5PIiA1CitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9ob3N0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaG9zdCIgPiY2OyB9CitjYXNlICRhY19jdl9ob3N0IGluCisqLSotKikgOzsKKyopIGFzX2ZuX2Vycm9yICJpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBob3N0IiAiJExJTkVOTyIgNTs7Citlc2FjCitob3N0PSRhY19jdl9ob3N0CithY19zYXZlX0lGUz0kSUZTOyBJRlM9Jy0nCitzZXQgeCAkYWNfY3ZfaG9zdAorc2hpZnQKK2hvc3RfY3B1PSQxCitob3N0X3ZlbmRvcj0kMgorc2hpZnQ7IHNoaWZ0CisjIFJlbWVtYmVyLCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIElGUyBpcyB1c2VkIHRvIGNyZWF0ZSAkKiwKKyMgZXhjZXB0IHdpdGggb2xkIHNoZWxsczoKK2hvc3Rfb3M9JCoKK0lGUz0kYWNfc2F2ZV9JRlMKK2Nhc2UgJGhvc3Rfb3MgaW4gKlwgKikgaG9zdF9vcz1gZWNobyAiJGhvc3Rfb3MiIHwgc2VkICdzLyAvLS9nJ2A7OyBlc2FjCisKKworIyBCYWNrc2xhc2hpZnkgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbgorIyBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitzZWRfcXVvdGVfc3Vic3Q9J3MvXChbImAkXFxdXCkvXFxcMS9nJworCisjIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2RvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFsiYFxcXVwpL1xcXDEvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNoZWxsIHZhcmlhYmxlIGluIGEKKyMgZG91YmxlX3F1b3RlX3N1YnN0J2VkIHN0cmluZy4KK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSdzL1xcXFxcXFxcXFxcJC9cXFxcXFwkL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaW5nbGUgcXVvdGUuCitkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3Q9J3MvJ1wnJy8nXCdcXFxcXFxcJ1wnJy9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gYXZvaWQgYWNjaWRlbnRhbCBnbG9iYmluZyBpbiBldmFsZWQgZXhwcmVzc2lvbnMKK25vX2dsb2Jfc3Vic3Q9J3MvXCovXFxcKi9nJworCitFQ0hPPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCitFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9CisjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KK2lmIHRlc3QgIlhgcHJpbnQgLXIgLS0gLW4gMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICBFQ0hPPSdwcmludCAtciAtLScKK2VsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgIEVDSE89J3ByaW50ZiAlc1xuJworZWxzZQorICAjIFVzZSB0aGlzIGZ1bmN0aW9uIGFzIGEgZmFsbGJhY2sgdGhhdCBhbHdheXMgd29ya3MuCisgIGZ1bmNfZmFsbGJhY2tfZWNobyAoKQorICB7CisgICAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKKyQxCitfTFRFQ0hPX0VPRicKKyAgfQorICBFQ0hPPSdmdW5jX2ZhbGxiYWNrX2VjaG8nCitmaQorCisjIGZ1bmNfZWNob19hbGwgYXJnLi4uCisjIEludm9rZSAkRUNITyB3aXRoIGFsbCBhcmdzLCBzcGFjZS1zZXBhcmF0ZWQuCitmdW5jX2VjaG9fYWxsICgpCit7CisgICAgJEVDSE8gIiIKK30KKworY2FzZSAiJEVDSE8iIGluCisgIHByaW50ZiopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBwcmludGYiID4mNQorJGFzX2VjaG8gInByaW50ZiIgPiY2OyB9IDs7CisgIHByaW50KikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHByaW50IC1yIiA+JjUKKyRhc19lY2hvICJwcmludCAtciIgPiY2OyB9IDs7CisgICopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBjYXQiID4mNQorJGFzX2VjaG8gImNhdCIgPiY2OyB9IDs7Citlc2FjCisKKworCisKKworCisKKworCisKKworCisKKworREVQRElSPSIke2FtX19sZWFkaW5nX2RvdH1kZXBzIgorCithY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgZGVwZmlsZXMiCisKKworYW1fbWFrZT0ke01BS0UtbWFrZX0KK2NhdCA+IGNvbmZpbmMgPDwgJ0VORCcKK2FtX19kb2l0OgorCUBlY2hvIHRoaXMgaXMgdGhlIGFtX19kb2l0IHRhcmdldAorLlBIT05ZOiBhbV9fZG9pdAorRU5ECisjIElmIHdlIGRvbid0IGZpbmQgYW4gaW5jbHVkZSBkaXJlY3RpdmUsIGp1c3QgY29tbWVudCBvdXQgdGhlIGNvZGUuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdHlsZSBvZiBpbmNsdWRlIHVzZWQgYnkgJGFtX21ha2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZS4uLiAiID4mNjsgfQorYW1fX2luY2x1ZGU9IiMiCithbV9fcXVvdGU9CitfYW1fcmVzdWx0PW5vbmUKKyMgRmlyc3QgdHJ5IEdOVSBtYWtlIHN0eWxlIGluY2x1ZGUuCitlY2hvICJpbmNsdWRlIGNvbmZpbmMiID4gY29uZm1mCisjIElnbm9yZSBhbGwga2luZHMgb2YgYWRkaXRpb25hbCBvdXRwdXQgZnJvbSBgbWFrZScuCitjYXNlIGAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCBpbiAjKAorKnRoZVwgYW1fX2RvaXRcIHRhcmdldCopCisgIGFtX19pbmNsdWRlPWluY2x1ZGUKKyAgYW1fX3F1b3RlPQorICBfYW1fcmVzdWx0PUdOVQorICA7OworZXNhYworIyBOb3cgdHJ5IEJTRCBtYWtlIHN0eWxlIGluY2x1ZGUuCitpZiB0ZXN0ICIkYW1fX2luY2x1ZGUiID0gIiMiOyB0aGVuCisgICBlY2hvICcuaW5jbHVkZSAiY29uZmluYyInID4gY29uZm1mCisgICBjYXNlIGAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCBpbiAjKAorICAgKnRoZVwgYW1fX2RvaXRcIHRhcmdldCopCisgICAgIGFtX19pbmNsdWRlPS5pbmNsdWRlCisgICAgIGFtX19xdW90ZT0iXCIiCisgICAgIF9hbV9yZXN1bHQ9QlNECisgICAgIDs7CisgICBlc2FjCitmaQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkX2FtX3Jlc3VsdCIgPiY1CiskYXNfZWNobyAiJF9hbV9yZXN1bHQiID4mNjsgfQorcm0gLWYgY29uZmluYyBjb25mbWYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmc7CitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm87IHRoZW4KKyAgYW1fZGVwY29tcD0iJGFjX2F1eF9kaXIvZGVwY29tcCIKKyAgQU1ERVBCQUNLU0xBU0g9J1wnCitmaQorIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgorICBBTURFUF9UUlVFPQorICBBTURFUF9GQUxTRT0nIycKK2Vsc2UKKyAgQU1ERVBfVFJVRT0nIycKKyAgQU1ERVBfRkFMU0U9CitmaQorCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1nY2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1nY2MiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19DQyI7IHRoZW4KKyAgYWNfY3RfQ0M9JENDCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBnY2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iZ2NjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCitpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0NDIiA9IHg7IHRoZW4KKyAgICBDQz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIENDPSRhY19jdF9DQworICBmaQorZWxzZQorICBDQz0iJGFjX2N2X3Byb2dfQ0MiCitmaQorCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1jYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1jYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWNjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIGZpCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBjYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3Byb2dfcmVqZWN0ZWQ9bm8KK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGlmIHRlc3QgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID0gIi91c3IvdWNiL2NjIjsgdGhlbgorICAgICAgIGFjX3Byb2dfcmVqZWN0ZWQ9eWVzCisgICAgICAgY29udGludWUKKyAgICAgZmkKKyAgICBhY19jdl9wcm9nX0NDPSJjYyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworaWYgdGVzdCAkYWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbgorICAjIFdlIGZvdW5kIGEgYm9nb24gaW4gdGhlIHBhdGgsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciB1c2UgaXQuCisgIHNldCBkdW1teSAkYWNfY3ZfcHJvZ19DQworICBzaGlmdAorICBpZiB0ZXN0ICQjICE9IDA7IHRoZW4KKyAgICAjIFdlIGNob3NlIGEgZGlmZmVyZW50IGNvbXBpbGVyIGZyb20gdGhlIGJvZ3VzIG9uZS4KKyAgICAjIEhvd2V2ZXIsIGl0IGhhcyB0aGUgc2FtZSBiYXNlbmFtZSwgc28gdGhlIGJvZ29uIHdpbGwgYmUgY2hvc2VuCisgICAgIyBmaXJzdCBpZiB3ZSBzZXQgQ0MgdG8ganVzdCB0aGUgYmFzZW5hbWU7IHVzZSB0aGUgZnVsbCBmaWxlIG5hbWUuCisgICAgc2hpZnQKKyAgICBhY19jdl9wcm9nX0NDPSIkYXNfZGlyLyRhY193b3JkJHsxKycgJ30kQCIKKyAgZmkKK2ZpCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGNsLmV4ZQorICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ0M9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJENDIiAmJiBicmVhaworICBkb25lCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBhY19jdF9DQz0kQ0MKKyAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkYWNfY3RfQ0MiICYmIGJyZWFrCitkb25lCisKKyAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCisgICAgQ0M9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBDQz0kYWNfY3RfQ0MKKyAgZmkKK2ZpCisKK2ZpCisKKwordGVzdCAteiAiJENDIiAmJiB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICJubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH0KKworIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgorJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgdmVyc2lvbiIgPiY1CitzZXQgWCAkYWNfY29tcGlsZQorYWNfY29tcGlsZXI9JDIKK2ZvciBhY19vcHRpb24gaW4gLS12ZXJzaW9uIC12IC1WIC1xdmVyc2lvbjsgZG8KKyAgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBzZWQgJzEwYVwKKy4uLiByZXN0IG9mIHN0ZGVyciBvdXRwdXQgZGVsZXRlZCAuLi4KKyAgICAgICAgIDEwcScgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICBmaQorICBybSAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9Citkb25lCisKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorYWNfY2xlYW5fZmlsZXNfc2F2ZT0kYWNfY2xlYW5fZmlsZXMKK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgYS5vdXQgYS5vdXQuZFNZTSBhLmV4ZSBiLm91dCIKKyMgVHJ5IHRvIGNyZWF0ZSBhbiBleGVjdXRhYmxlIHdpdGhvdXQgLW8gZmlyc3QsIGRpc3JlZ2FyZCBhLm91dC4KKyMgSXQgd2lsbCBoZWxwIHVzIGRpYWdub3NlIGJyb2tlbiBjb21waWxlcnMsIGFuZCBmaW5kaW5nIG91dCBhbiBpbnR1aXRpb24KKyMgb2YgZXhlZXh0LgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MuLi4gIiA+JjY7IH0KK2FjX2xpbmtfZGVmYXVsdD1gJGFzX2VjaG8gIiRhY19saW5rIiB8IHNlZCAncy8gLW8gKmNvbmZ0ZXN0W14gXSovLydgCisKKyMgVGhlIHBvc3NpYmxlIG91dHB1dCBmaWxlczoKK2FjX2ZpbGVzPSJhLm91dCBjb25mdGVzdC5leGUgY29uZnRlc3QgYS5leGUgYV9vdXQuZXhlIGIub3V0IGNvbmZ0ZXN0LioiCisKK2FjX3JtZmlsZXM9Citmb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMKK2RvCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7CisgICAgKiApIGFjX3JtZmlsZXM9IiRhY19ybWZpbGVzICRhY19maWxlIjs7CisgIGVzYWMKK2RvbmUKK3JtIC1mICRhY19ybWZpbGVzCisKK2lmIHsgeyBhY190cnk9IiRhY19saW5rX2RlZmF1bHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rX2RlZmF1bHQiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CisgICMgQXV0b2NvbmYtMi4xMyBjb3VsZCBzZXQgdGhlIGFjX2N2X2V4ZWV4dCB2YXJpYWJsZSB0byBgbm8nLgorIyBTbyBpZ25vcmUgYSB2YWx1ZSBvZiBgbm8nLCBvdGhlcndpc2UgdGhpcyB3b3VsZCBsZWFkIHRvIGBFWEVFWFQgPSBubycKKyMgaW4gYSBNYWtlZmlsZS4gIFdlIHNob3VsZCBub3Qgb3ZlcnJpZGUgYWNfY3ZfZXhlZXh0IGlmIGl0IHdhcyBjYWNoZWQsCisjIHNvIHRoYXQgdGhlIHVzZXIgY2FuIHNob3J0LWNpcmN1aXQgdGhpcyB0ZXN0IGZvciBjb21waWxlcnMgdW5rbm93biB0bworIyBBdXRvY29uZi4KK2ZvciBhY19maWxlIGluICRhY19maWxlcyAnJworZG8KKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApCisJOzsKKyAgICBbYWJdLm91dCApCisJIyBXZSBmb3VuZCB0aGUgZGVmYXVsdCBleGVjdXRhYmxlLCBidXQgZXhlZXh0PScnIGlzIG1vc3QKKwkjIGNlcnRhaW5seSByaWdodC4KKwlicmVhazs7CisgICAgKi4qICkKKwlpZiB0ZXN0ICIke2FjX2N2X2V4ZWV4dCtzZXR9IiA9IHNldCAmJiB0ZXN0ICIkYWNfY3ZfZXhlZXh0IiAhPSBubzsKKwl0aGVuIDo7IGVsc2UKKwkgICBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKwlmaQorCSMgV2Ugc2V0IGFjX2N2X2V4ZWV4dCBoZXJlIGJlY2F1c2UgdGhlIGxhdGVyIHRlc3QgZm9yIGl0IGlzIG5vdAorCSMgc2FmZTogY3Jvc3MgY29tcGlsZXJzIG1heSBub3QgYWRkIHRoZSBzdWZmaXggaWYgZ2l2ZW4gYW4gYC1vJworCSMgYXJndW1lbnQsIHNvIHdlIG1heSBuZWVkIHRvIGtub3cgaXQgYXQgdGhhdCBwb2ludCBhbHJlYWR5LgorCSMgRXZlbiBpZiB0aGlzIHNlY3Rpb24gbG9va3MgY3J1ZnR5OiBpdCBoYXMgdGhlIGFkdmFudGFnZSBvZgorCSMgYWN0dWFsbHkgd29ya2luZy4KKwlicmVhazs7CisgICAgKiApCisJYnJlYWs7OworICBlc2FjCitkb25lCit0ZXN0ICIkYWNfY3ZfZXhlZXh0IiA9IG5vICYmIGFjX2N2X2V4ZWV4dD0KKworZWxzZQorICBhY19maWxlPScnCitmaQoraWYgdGVzdCAteiAiJGFjX2ZpbGUiOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiskYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cit7IGFzX2ZuX3NldF9zdGF0dXMgNzcKK2FzX2ZuX2Vycm9yICJDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfTsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZS4uLiAiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19maWxlIiA+JjUKKyRhc19lY2hvICIkYWNfZmlsZSIgPiY2OyB9CithY19leGVleHQ9JGFjX2N2X2V4ZWV4dAorCitybSAtZiAtciBhLm91dCBhLm91dC5kU1lNIGEuZXhlIGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCBiLm91dAorYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBleGVjdXRhYmxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzLi4uICIgPiY2OyB9CitpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CisgICMgSWYgYm90aCBgY29uZnRlc3QuZXhlJyBhbmQgYGNvbmZ0ZXN0JyBhcmUgYHByZXNlbnQnICh3ZWxsLCBvYnNlcnZhYmxlKQorIyBjYXRjaCBgY29uZnRlc3QuZXhlJy4gIEZvciBpbnN0YW5jZSB3aXRoIEN5Z3dpbiwgYGxzIGNvbmZ0ZXN0JyB3aWxsCisjIHdvcmsgcHJvcGVybHkgKGkuZS4sIHJlZmVyIHRvIGBjb25mdGVzdC5leGUnKSwgd2hpbGUgaXQgd29uJ3Qgd2l0aAorIyBgcm0nLgorZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGNvbmZ0ZXN0Lio7IGRvCisgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQorICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKSA7OworICAgICouKiApIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorCSAgYnJlYWs7OworICAgICogKSBicmVhazs7CisgIGVzYWMKK2RvbmUKK2Vsc2UKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAiY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluaworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9CitmaQorcm0gLWYgY29uZnRlc3QgY29uZnRlc3QkYWNfY3ZfZXhlZXh0Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2V4ZWV4dCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2V4ZWV4dCIgPiY2OyB9CisKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQKK0VYRUVYVD0kYWNfY3ZfZXhlZXh0CithY19leGVleHQ9JEVYRUVYVAorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQKK21haW4gKCkKK3sKK0ZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0Lm91dCIsICJ3Iik7CisgcmV0dXJuIGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgY29uZnRlc3Qub3V0IgorIyBDaGVjayB0aGF0IHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKKyMgdGhlIGNvbXBpbGVyIGlzIGJyb2tlbiwgb3Igd2UgY3Jvc3MgY29tcGlsZS4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0geWVzOyB0aGVuCisgIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisgIGlmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCcKKyAgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuCisgICAgY3Jvc3NfY29tcGlsaW5nPW5vCisgIGVsc2UKKyAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG1heWJlOyB0aGVuCisJY3Jvc3NfY29tcGlsaW5nPXllcworICAgIGVsc2UKKwl7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICJjYW5ub3QgcnVuIEMgY29tcGlsZWQgcHJvZ3JhbXMuCitJZiB5b3UgbWVhbnQgdG8gY3Jvc3MgY29tcGlsZSwgdXNlIFxgLS1ob3N0Jy4KK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfQorICAgIGZpCisgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjcm9zc19jb21waWxpbmciID4mNQorJGFzX2VjaG8gIiRjcm9zc19jb21waWxpbmciID4mNjsgfQorCitybSAtZiBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCBjb25mdGVzdC5vdXQKK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X29iamV4dCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QubyBjb25mdGVzdC5vYmoKK2lmIHsgeyBhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoKKyAgZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QubyBjb25mdGVzdC5vYmogY29uZnRlc3QuKjsgZG8KKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlOworICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNICkgOzsKKyAgICAqKSBhY19jdl9vYmpleHQ9YGV4cHIgIiRhY19maWxlIiA6ICcuKlwuXCguKlwpJ2AKKyAgICAgICBicmVhazs7CisgIGVzYWMKK2RvbmUKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK3sgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgImNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXM6IGNhbm5vdCBjb21waWxlCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH0KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfY3Zfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X29iamV4dCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X29iamV4dCIgPiY2OyB9CitPQkpFWFQ9JGFjX2N2X29iamV4dAorYWNfb2JqZXh0PSRPQkpFWFQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlci4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9jX2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisjaWZuZGVmIF9fR05VQ19fCisgICAgICAgY2hva2UgbWUKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY29tcGlsZXJfZ251PXllcworZWxzZQorICBhY19jb21waWxlcl9nbnU9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2FjX2N2X2NfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY2OyB9CitpZiB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KKyAgR0NDPXllcworZWxzZQorICBHQ0M9CitmaQorYWNfdGVzdF9DRkxBR1M9JHtDRkxBR1Mrc2V0fQorYWNfc2F2ZV9DRkxBR1M9JENGTEFHUworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWcuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19nK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9jX3dlcnJvcl9mbGFnPSRhY19jX3dlcnJvcl9mbGFnCisgICBhY19jX3dlcnJvcl9mbGFnPXllcworICAgYWNfY3ZfcHJvZ19jY19nPW5vCisgICBDRkxBR1M9Ii1nIgorICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY2NfZz15ZXMKK2Vsc2UKKyAgQ0ZMQUdTPSIiCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKKwkgQ0ZMQUdTPSItZyIKKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY2NfZz15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19nIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19nIiA+JjY7IH0KK2lmIHRlc3QgIiRhY190ZXN0X0NGTEFHUyIgPSBzZXQ7IHRoZW4KKyAgQ0ZMQUdTPSRhY19zYXZlX0NGTEFHUworZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2NjX2cgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBDRkxBR1M9Ii1nIC1PMiIKKyAgZWxzZQorICAgIENGTEFHUz0iLWciCisgIGZpCitlbHNlCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgQ0ZMQUdTPSItTzIiCisgIGVsc2UKKyAgICBDRkxBR1M9CisgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX2M4OStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2N2X3Byb2dfY2NfYzg5PW5vCithY19zYXZlX0NDPSRDQworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKy8qIE1vc3Qgb2YgdGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgc3RvbGVuIGZyb20gUkNTIDUuNydzIHNyYy9jb25mLnNoLiAgKi8KK3N0cnVjdCBidWYgeyBpbnQgeDsgfTsKK0ZJTEUgKiAoKnJjc29wZW4pIChzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCk7CitzdGF0aWMgY2hhciAqZSAocCwgaSkKKyAgICAgY2hhciAqKnA7CisgICAgIGludCBpOworeworICByZXR1cm4gcFtpXTsKK30KK3N0YXRpYyBjaGFyICpmIChjaGFyICogKCpnKSAoY2hhciAqKiwgaW50KSwgY2hhciAqKnAsIC4uLikKK3sKKyAgY2hhciAqczsKKyAgdmFfbGlzdCB2OworICB2YV9zdGFydCAodixwKTsKKyAgcyA9IGcgKHAsIHZhX2FyZyAodixpbnQpKTsKKyAgdmFfZW5kICh2KTsKKyAgcmV0dXJuIHM7Cit9CisKKy8qIE9TRiA0LjAgQ29tcGFxIGNjIGlzIHNvbWUgc29ydCBvZiBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LiAgSXQgaGFzCisgICBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBzdHVmZiwgYnV0IG5vdCAnXHhISCcgaGV4IGNoYXJhY3RlciBjb25zdGFudHMuCisgICBUaGVzZSBkb24ndCBwcm92b2tlIGFuIGVycm9yIHVuZm9ydHVuYXRlbHksIGluc3RlYWQgYXJlIHNpbGVudGx5IHRyZWF0ZWQKKyAgIGFzICd4Jy4gIFRoZSBmb2xsb3dpbmcgaW5kdWNlcyBhbiBlcnJvciwgdW50aWwgLXN0ZCBpcyBhZGRlZCB0byBnZXQKKyAgIHByb3BlciBBTlNJIG1vZGUuICBDdXJpb3VzbHkgJ1x4MDAnIT0neCcgYWx3YXlzIGNvbWVzIG91dCB0cnVlLCBmb3IgYW4KKyAgIGFycmF5IHNpemUgYXQgbGVhc3QuICBJdCdzIG5lY2Vzc2FyeSB0byB3cml0ZSAnXHgwMCc9PTAgdG8gZ2V0IHNvbWV0aGluZworICAgdGhhdCdzIHRydWUgb25seSB3aXRoIC1zdGQuICAqLworaW50IG9zZjRfY2NfYXJyYXkgWydceDAwJyA9PSAwID8gMSA6IC0xXTsKKworLyogSUJNIEMgNiBmb3IgQUlYIGlzIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQsIGJ1dCBpdCByZXBsYWNlcyBtYWNybyBwYXJhbWV0ZXJzCisgICBpbnNpZGUgc3RyaW5ncyBhbmQgY2hhcmFjdGVyIGNvbnN0YW50cy4gICovCisjZGVmaW5lIEZPTyh4KSAneCcKK2ludCB4bGM2X2NjX2FycmF5W0ZPTyhhKSA9PSAneCcgPyAxIDogLTFdOworCitpbnQgdGVzdCAoaW50IGksIGRvdWJsZSB4KTsKK3N0cnVjdCBzMSB7aW50ICgqZikgKGludCBhKTt9Oworc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307CitpbnQgcGFpcm5hbWVzIChpbnQsIGNoYXIgKiosIEZJTEUgKigqKShzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCksIGludCwgaW50KTsKK2ludCBhcmdjOworY2hhciAqKmFyZ3Y7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBmIChlLCBhcmd2LCAwKSAhPSBhcmd2WzBdICB8fCAgZiAoZSwgYXJndiwgMSkgIT0gYXJndlsxXTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorZm9yIGFjX2FyZyBpbiAnJyAtcWxhbmdsdmw9ZXh0Yzg5IC1xbGFuZ2x2bD1hbnNpIC1zdGQgXAorCS1BZSAiLUFhIC1EX0hQVVhfU09VUkNFIiAiLVhjIC1EX19FWFRFTlNJT05TX18iCitkbworICBDQz0iJGFjX3NhdmVfQ0MgJGFjX2FyZyIKKyAgaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2NjX2M4OT0kYWNfYXJnCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAorICB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSAieG5vIiAmJiBicmVhaworZG9uZQorcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorQ0M9JGFjX3NhdmVfQ0MKKworZmkKKyMgQUNfQ0FDSEVfVkFMCitjYXNlICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiBpbgorICB4KQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1CiskYXNfZWNobyAibm9uZSBuZWVkZWQiID4mNjsgfSA7OworICB4bm8pCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKKyRhc19lY2hvICJ1bnN1cHBvcnRlZCIgPiY2OyB9IDs7CisgICopCisgICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19jODkiCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2M4OSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjY7IH0gOzsKK2VzYWMKK2lmIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9IHhubzsgdGhlbiA6CisKK2ZpCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworZGVwY2M9IiRDQyIgICBhbV9jb21waWxlcl9saXN0PQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgorICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCisgICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCisgICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCisgICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCBgRCcgLS0gYmVjYXVzZSBgLU1EJyBtZWFucyBgcHV0IHRoZSBvdXRwdXQKKyAgIyBpbiBEJy4KKyAgbWtkaXIgY29uZnRlc3QuZGlyCisgICMgQ29weSBkZXBjb21wIHRvIHN1YmRpciBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b24ndCBmaW5kIGl0IGlmIHdlJ3JlCisgICMgdXNpbmcgYSByZWxhdGl2ZSBkaXJlY3RvcnkuCisgIGNwICIkYW1fZGVwY29tcCIgY29uZnRlc3QuZGlyCisgIGNkIGNvbmZ0ZXN0LmRpcgorICAjIFdlIHdpbGwgYnVpbGQgb2JqZWN0cyBhbmQgZGVwZW5kZW5jaWVzIGluIGEgc3ViZGlyZWN0b3J5IGJlY2F1c2UKKyAgIyBpdCBoZWxwcyB0byBkZXRlY3QgaW5hcHBsaWNhYmxlIGRlcGVuZGVuY3kgbW9kZXMuICBGb3IgaW5zdGFuY2UKKyAgIyBib3RoIFRydTY0J3MgY2MgYW5kIElDQyBzdXBwb3J0IC1NRCB0byBvdXRwdXQgZGVwZW5kZW5jaWVzIGFzIGEKKyAgIyBzaWRlIGVmZmVjdCBvZiBjb21waWxhdGlvbiwgYnV0IElDQyB3aWxsIHB1dCB0aGUgZGVwZW5kZW5jaWVzIGluCisgICMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdoaWxlIFRydTY0IHdpbGwgcHV0IHRoZW0gaW4gdGhlIG9iamVjdAorICAjIGRpcmVjdG9yeS4KKyAgbWtkaXIgc3ViCisKKyAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgorICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnIDwgLi9kZXBjb21wYAorICBmaQorICBhbV9fdW5pdmVyc2FsPWZhbHNlCisgIGNhc2UgIiAkZGVwY2MgIiBpbiAjKAorICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworICAgICBlc2FjCisKKyAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCisgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCisgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAorICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KKyAgICAjCisgICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKKyAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgorICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgorICAgIDogPiBzdWIvY29uZnRlc3QuYworICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbworICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYworICAgICAgIyBVc2luZyBgOiA+IHN1Yi9jb25mdHN0JGkuaCcgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKKyAgICAgICMgU29sYXJpcyA4J3Mgey91c3IsfS9iaW4vc2guCisgICAgICB0b3VjaCBzdWIvY29uZnRzdCRpLmgKKyAgICBkb25lCisgICAgZWNobyAiJHthbV9faW5jbHVkZX0gJHthbV9fcXVvdGV9c3ViL2NvbmZ0ZXN0LlBvJHthbV9fcXVvdGV9IiA+IGNvbmZtZgorCisgICAgIyBXZSBjaGVjayB3aXRoIGAtYycgYW5kIGAtbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCisgICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKKyAgICAjIGhhbmRsZSBgLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4gIEFsc28sIHNvbWUgSW50ZWwKKyAgICAjIHZlcnNpb25zIGhhZCB0cm91YmxlIHdpdGggb3V0cHV0IGluIHN1YmRpcnMKKyAgICBhbV9fb2JqPXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfQorICAgIGFtX19taW51c19vYmo9Ii1vICRhbV9fb2JqIgorICAgIGNhc2UgJGRlcG1vZGUgaW4KKyAgICBnY2MpCisgICAgICAjIFRoaXMgZGVwbW9kZSBjYXVzZXMgYSBjb21waWxlciByYWNlIGluIHVuaXZlcnNhbCBtb2RlLgorICAgICAgdGVzdCAiJGFtX191bml2ZXJzYWwiID0gZmFsc2UgfHwgY29udGludWUKKyAgICAgIDs7CisgICAgbm9zaWRlZWZmZWN0KQorICAgICAgIyBhZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCisgICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkCisgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZWxzZQorCWJyZWFrCisgICAgICBmaQorICAgICAgOzsKKyAgICBtc3Zpc3VhbGNwcCB8IG1zdmNtc3lzKQorICAgICAgIyBUaGlzIGNvbXBpbGVyIHdvbid0IGdyb2sgYC1jIC1vJywgYnV0IGFsc28sIHRoZSBtaW51c28gdGVzdCBoYXMKKyAgICAgICMgbm90IHJ1biB5ZXQuICBUaGVzZSBkZXBtb2RlcyBhcmUgbGF0ZSBlbm91Z2ggaW4gdGhlIGdhbWUsIGFuZAorICAgICAgIyBzbyB3ZWFrIHRoYXQgdGhlaXIgZnVuY3Rpb25pbmcgc2hvdWxkIG5vdCBiZSBpbXBhY3RlZC4KKyAgICAgIGFtX19vYmo9Y29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICAgIGFtX19taW51c19vYmo9CisgICAgICA7OworICAgIG5vbmUpIGJyZWFrIDs7CisgICAgZXNhYworICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAorICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9JGFtX19vYmogXAorICAgICAgIGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlBvIHRtcGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlRQbyBcCisgICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgJGFtX19taW51c19vYmogc3ViL2NvbmZ0ZXN0LmMgXAorICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3QxLmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgZ3JlcCAkYW1fX29iaiBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgICR7TUFLRS1tYWtlfSAtcyAtZiBjb25mbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgIyBpY2MgZG9lc24ndCBjaG9rZSBvbiB1bmtub3duIG9wdGlvbnMsIGl0IHdpbGwganVzdCBpc3N1ZSB3YXJuaW5ncworICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKKyAgICAgICMgdGhhdCBzYXlzIGFuIG9wdGlvbiB3YXMgaWdub3JlZCBvciBub3Qgc3VwcG9ydGVkLgorICAgICAgIyBXaGVuIGdpdmVuIC1NUCwgaWNjIDcuMCBhbmQgNy4xIGNvbXBsYWluIHRodXNseToKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSB3YXJuaW5nOiBpZ25vcmluZyBvcHRpb24gJy1NJzsgbm8gYXJndW1lbnQgcmVxdWlyZWQKKyAgICAgICMgVGhlIGRpYWdub3NpcyBjaGFuZ2VkIGluIGljYyA4LjA6CisgICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgcmVtYXJrOiBvcHRpb24gJy1NUCcgbm90IHN1cHBvcnRlZAorICAgICAgaWYgKGdyZXAgJ2lnbm9yaW5nIG9wdGlvbicgY29uZnRlc3QuZXJyIHx8CisgICAgICAgICAgZ3JlcCAnbm90IHN1cHBvcnRlZCcgY29uZnRlc3QuZXJyKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICAgICAgICBhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT0kZGVwbW9kZQorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBmaQorICBkb25lCisKKyAgY2QgLi4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorZWxzZQorICBhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY1CiskYXNfZWNobyAiJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjY7IH0KK0NDREVQTU9ERT1kZXBtb2RlPSRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZQorCisgaWYKKyAgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vIFwKKyAgJiYgdGVzdCAiJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzM7IHRoZW4KKyAgYW1fX2Zhc3RkZXBDQ19UUlVFPQorICBhbV9fZmFzdGRlcENDX0ZBTFNFPScjJworZWxzZQorICBhbV9fZmFzdGRlcENDX1RSVUU9JyMnCisgIGFtX19mYXN0ZGVwQ0NfRkFMU0U9CitmaQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX1NFRCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICAgICAgICAgICBhY19zY3JpcHQ9cy9hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS9iYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIvCisgICAgIGZvciBhY19pIGluIDEgMiAzIDQgNSA2IDc7IGRvCisgICAgICAgYWNfc2NyaXB0PSIkYWNfc2NyaXB0JGFzX25sJGFjX3NjcmlwdCIKKyAgICAgZG9uZQorICAgICBlY2hvICIkYWNfc2NyaXB0IiAyPi9kZXYvbnVsbCB8IHNlZCA5OXEgPmNvbmZ0ZXN0LnNlZAorICAgICB7IGFjX3NjcmlwdD07IHVuc2V0IGFjX3NjcmlwdDt9CisgICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgIGFjX3BhdGhfU0VEX2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBzZWQgZ3NlZDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfU0VEPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9TRUQiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX1NFRCI7IH0gfHwgY29udGludWUKKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX1NFRCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfU0VECitjYXNlIGAiJGFjX3BhdGhfU0VEIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX1NFRD0iJGFjX3BhdGhfU0VEIiBhY19wYXRoX1NFRF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX1NFRCIgLWYgY29uZnRlc3Quc2VkIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9TRURfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiCisgICAgICBhY19wYXRoX1NFRF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX1NFRF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfU0VEIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICJubyBhY2NlcHRhYmxlIHNlZCBjb3VsZCBiZSBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfU0VEPSRTRUQKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfU0VEIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9TRUQiID4mNjsgfQorIFNFRD0iJGFjX2N2X3BhdGhfU0VEIgorICBybSAtZiBjb25mdGVzdC5zZWQKKwordGVzdCAteiAiJFNFRCIgJiYgU0VEPXNlZAorWHNlZD0iJFNFRCAtZSAxcy9eWC8vIgorCisKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdyZXAgdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX0dSRVArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KKyAgYWNfcGF0aF9HUkVQX2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gZ3JlcCBnZ3JlcDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfR1JFUCI7IH0gfHwgY29udGludWUKKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0dSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0dSRVAKK2Nhc2UgYCIkYWNfcGF0aF9HUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX0dSRVA9IiRhY19wYXRoX0dSRVAiIGFjX3BhdGhfR1JFUF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICIkYWNfcGF0aF9HUkVQIiAtZSAnR1JFUCQnIC1lICctKGNhbm5vdCBtYXRjaCktJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfR1JFUF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIgorICAgICAgYWNfcGF0aF9HUkVQX21heD0kYWNfY291bnQKKyAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworICAgICAgJGFjX3BhdGhfR1JFUF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAibm8gYWNjZXB0YWJsZSBncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgIiRMSU5FTk8iIDUKKyAgZmkKK2Vsc2UKKyAgYWNfY3ZfcGF0aF9HUkVQPSRHUkVQCitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX0dSRVAiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX0dSRVAiID4mNjsgfQorIEdSRVA9IiRhY19jdl9wYXRoX0dSRVAiCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZWdyZXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGVncmVwLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfRUdSRVArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiBlY2hvIGEgfCAkR1JFUCAtRSAnKGF8YiknID4vZGV2L251bGwgMj4mMQorICAgdGhlbiBhY19jdl9wYXRoX0VHUkVQPSIkR1JFUCAtRSIKKyAgIGVsc2UKKyAgICAgaWYgdGVzdCAteiAiJEVHUkVQIjsgdGhlbgorICBhY19wYXRoX0VHUkVQX2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gZWdyZXA7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX0VHUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9FR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfRUdSRVAiOyB9IHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9FR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfRUdSRVAKK2Nhc2UgYCIkYWNfcGF0aF9FR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9FR1JFUD0iJGFjX3BhdGhfRUdSRVAiIGFjX3BhdGhfRUdSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0VHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX0VHUkVQIiAnRUdSRVAkJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfRUdSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIgorICAgICAgYWNfcGF0aF9FR1JFUF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX0VHUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9FR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAibm8gYWNjZXB0YWJsZSBlZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfRUdSRVA9JEVHUkVQCitmaQorCisgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9FR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfRUdSRVAiID4mNjsgfQorIEVHUkVQPSIkYWNfY3ZfcGF0aF9FR1JFUCIKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBmZ3JlcCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZmdyZXAuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9GR1JFUCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIGVjaG8gJ2FiKmMnIHwgJEdSRVAgLUYgJ2FiKmMnID4vZGV2L251bGwgMj4mMQorICAgdGhlbiBhY19jdl9wYXRoX0ZHUkVQPSIkR1JFUCAtRiIKKyAgIGVsc2UKKyAgICAgaWYgdGVzdCAteiAiJEZHUkVQIjsgdGhlbgorICBhY19wYXRoX0ZHUkVQX2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gZmdyZXA7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX0ZHUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9GR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfRkdSRVAiOyB9IHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9GR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfRkdSRVAKK2Nhc2UgYCIkYWNfcGF0aF9GR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9GR1JFUD0iJGFjX3BhdGhfRkdSRVAiIGFjX3BhdGhfRkdSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0ZHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX0ZHUkVQIiBGR1JFUCA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfRkdSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfRkdSRVA9IiRhY19wYXRoX0ZHUkVQIgorICAgICAgYWNfcGF0aF9GR1JFUF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX0ZHUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9GR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAibm8gYWNjZXB0YWJsZSBmZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfRkdSRVA9JEZHUkVQCitmaQorCisgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9GR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfRkdSRVAiID4mNjsgfQorIEZHUkVQPSIkYWNfY3ZfcGF0aF9GR1JFUCIKKworCit0ZXN0IC16ICIkR1JFUCIgJiYgR1JFUD1ncmVwCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ251LWxkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2dudV9sZDsgdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzCitlbHNlCisgIHdpdGhfZ251X2xkPW5vCitmaQorCithY19wcm9nPWxkCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDLi4uICIgPiY2OyB9CisgIGNhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KikKKyAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3CisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OworICAqKQorICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKKyAgZXNhYworICBjYXNlICRhY19wcm9nIGluCisgICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCisgICAgW1xcL10qIHwgPzpbXFwvXSopCisgICAgICByZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nCisgICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKKyAgICAgIGFjX3Byb2c9YCRFQ0hPICIkYWNfcHJvZyJ8ICRTRUQgJ3MlXFxcXCUvJWcnYAorICAgICAgd2hpbGUgJEVDSE8gIiRhY19wcm9nIiB8ICRHUkVQICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworCWFjX3Byb2c9YCRFQ0hPICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAorICAgICAgZG9uZQorICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCisgICAgICA7OworICAiIikKKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKyAgICBhY19wcm9nPWxkCisgICAgOzsKKyAgKikKKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorICAgIDs7CisgIGVzYWMKK2VsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdOVSBsZC4uLiAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBub24tR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBub24tR05VIGxkLi4uICIgPiY2OyB9CitmaQoraWYgdGVzdCAiJHtsdF9jdl9wYXRoX0xEK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJExEIjsgdGhlbgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCisgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKyAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhaworCTs7CisgICAgICAqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorZWxzZQorICBsdF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorZmkKK2ZpCisKK0xEPSIkbHRfY3ZfcGF0aF9MRCIKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMRCIgPiY1CiskYXNfZWNobyAiJExEIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQordGVzdCAteiAiJExEIiAmJiBhc19mbl9lcnJvciAibm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3Byb2dfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgorY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKKyAgOzsKKyopCisgIGx0X2N2X3Byb2dfZ251X2xkPW5vCisgIDs7Citlc2FjCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2dudV9sZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfZ251X2xkIiA+JjY7IH0KK3dpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAorCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3BhdGhfTk0rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTk0iOyB0aGVuCisgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBsdF9jdl9wYXRoX05NPSIkTk0iCitlbHNlCisgIGx0X25tX3RvX2NoZWNrPSIke2FjX3Rvb2xfcHJlZml4fW5tIgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiICYmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisgICAgbHRfbm1fdG9fY2hlY2s9IiRsdF9ubV90b19jaGVjayBubSIKKyAgZmkKKyAgZm9yIGx0X3RtcF9ubSBpbiAkbHRfbm1fdG9fY2hlY2s7IGRvCisgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICAgZm9yIGFjX2RpciBpbiAkUEFUSCAvdXNyL2Njcy9iaW4vZWxmIC91c3IvY2NzL2JpbiAvdXNyL3VjYiAvYmluOyBkbworICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgICAgdG1wX25tPSIkYWNfZGlyLyRsdF90bXBfbm0iCisgICAgICBpZiB0ZXN0IC1mICIkdG1wX25tIiB8fCB0ZXN0IC1mICIkdG1wX25tJGFjX2V4ZWV4dCIgOyB0aGVuCisJIyBDaGVjayB0byBzZWUgaWYgdGhlIG5tIGFjY2VwdHMgYSBCU0QtY29tcGF0IGZsYWcuCisJIyBBZGRpbmcgdGhlIGBzZWQgMXEnIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBIUC1VWCwgd2hpY2ggc2F5czoKKwkjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCisJIyBUcnU2NCdzIG5tIGNvbXBsYWlucyB0aGF0IC9kZXYvbnVsbCBpcyBhbiBpbnZhbGlkIG9iamVjdCBmaWxlCisJY2FzZSBgIiR0bXBfbm0iIC1CIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisJKi9kZXYvbnVsbCogfCAqJ0ludmFsaWQgZmlsZSBvciBvYmplY3QgdHlwZScqKQorCSAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtQiIKKwkgIGJyZWFrCisJICA7OworCSopCisJICBjYXNlIGAiJHRtcF9ubSIgLXAgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKwkgICovZGV2L251bGwqKQorCSAgICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1wIgorCSAgICBicmVhaworCSAgICA7OworCSAgKikKKwkgICAgbHRfY3ZfcGF0aF9OTT0ke2x0X2N2X3BhdGhfTk09IiR0bXBfbm0ifSAjIGtlZXAgdGhlIGZpcnN0IG1hdGNoLCBidXQKKwkgICAgY29udGludWUgIyBzbyB0aGF0IHdlIGNhbiB0cnkgdG8gZmluZCBvbmUgdGhhdCBzdXBwb3J0cyBCU0QgZmxhZ3MKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICBkb25lCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgIGRvbmUKKyAgOiAke2x0X2N2X3BhdGhfTk09bm99CitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9OTSIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3BhdGhfTk0iID4mNjsgfQoraWYgdGVzdCAiJGx0X2N2X3BhdGhfTk0iICE9ICJubyI7IHRoZW4KKyAgTk09IiRsdF9jdl9wYXRoX05NIgorZWxzZQorICAjIERpZG4ndCBmaW5kIGFueSBCU0QgY29tcGF0aWJsZSBuYW1lIGxpc3RlciwgbG9vayBmb3IgZHVtcGJpbi4KKyAgaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuIDoKKyAgICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgZWxzZQorICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gZHVtcGJpbiAibGluayAtZHVtcCIKKyAgZG8KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRFVNUEJJTitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbgorICBhY19jdl9wcm9nX0RVTVBCSU49IiREVU1QQklOIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfRFVNUEJJTj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorRFVNUEJJTj0kYWNfY3ZfcHJvZ19EVU1QQklOCitpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICREVU1QQklOIiA+JjUKKyRhc19lY2hvICIkRFVNUEJJTiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJERVTVBCSU4iICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkRFVNUEJJTiI7IHRoZW4KKyAgYWNfY3RfRFVNUEJJTj0kRFVNUEJJTgorICBmb3IgYWNfcHJvZyBpbiBkdW1wYmluICJsaW5rIC1kdW1wIgorZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RVTVBCSU4rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOPSIkYWNfY3RfRFVNUEJJTiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0RVTVBCSU49IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0RVTVBCSU49JGFjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTgoraWYgdGVzdCAtbiAiJGFjX2N0X0RVTVBCSU4iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRFVNUEJJTiIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0RVTVBCSU4iID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiIgJiYgYnJlYWsKK2RvbmUKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0RVTVBCSU4iID0geDsgdGhlbgorICAgIERVTVBCSU49IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgRFVNUEJJTj0kYWNfY3RfRFVNUEJJTgorICBmaQorZmkKKworICAgIGNhc2UgYCREVU1QQklOIC1zeW1ib2xzIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisgICAgKkNPRkYqKQorICAgICAgRFVNUEJJTj0iJERVTVBCSU4gLXN5bWJvbHMiCisgICAgICA7OworICAgICopCisgICAgICBEVU1QQklOPToKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorCisgIGlmIHRlc3QgIiREVU1QQklOIiAhPSAiOiI7IHRoZW4KKyAgICBOTT0iJERVTVBCSU4iCisgIGZpCitmaQordGVzdCAteiAiJE5NIiAmJiBOTT1ubQorCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0aGUgbmFtZSBsaXN0ZXIgKCROTSkgaW50ZXJmYWNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHRoZSBuYW1lIGxpc3RlciAoJE5NKSBpbnRlcmZhY2UuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3Zfbm1faW50ZXJmYWNlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3Zfbm1faW50ZXJmYWNlPSJCU0Qgbm0iCisgIGVjaG8gImludCBzb21lX3ZhcmlhYmxlID0gMDsiID4gY29uZnRlc3QuJGFjX2V4dAorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGFjX2NvbXBpbGVcIiIgPiY1KQorICAoZXZhbCAiJGFjX2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJE5NIFxcXCJjb25mdGVzdC4kYWNfb2JqZXh0XFxcIlwiIiA+JjUpCisgIChldmFsICIkTk0gXCJjb25mdGVzdC4kYWNfb2JqZXh0XCIiIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0KQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogb3V0cHV0XCIiID4mNSkKKyAgY2F0IGNvbmZ0ZXN0Lm91dCA+JjUKKyAgaWYgJEdSRVAgJ0V4dGVybmFsLipzb21lX3ZhcmlhYmxlJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9ubV9pbnRlcmZhY2U9Ik1TIGR1bXBiaW4iCisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0KgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfbm1faW50ZXJmYWNlIiA+JjUKKyRhc19lY2hvICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA+JjY7IH0KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MuLi4gIiA+JjY7IH0KK0xOX1M9JGFzX2xuX3MKK2lmIHRlc3QgIiRMTl9TIiA9ICJsbiAtcyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vLCB1c2luZyAkTE5fUyIgPiY1CiskYXNfZWNobyAibm8sIHVzaW5nICRMTl9TIiA+JjY7IH0KK2ZpCisKKyMgZmluZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9zeXNfbWF4X2NtZF9sZW4rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAgIGk9MAorICB0ZXN0c3RyaW5nPSJBQkNEIgorCisgIGNhc2UgJGJ1aWxkX29zIGluCisgIG1zZG9zZGpncHAqKQorICAgICMgT24gREpHUFAsIHRoaXMgdGVzdCBjYW4gYmxvdyB1cCBwcmV0dHkgYmFkbHkgZHVlIHRvIHByb2JsZW1zIGluIGxpYmMKKyAgICAjIChhbnkgc2luZ2xlIGFyZ3VtZW50IGV4Y2VlZGluZyAyMDAwIGJ5dGVzIGNhdXNlcyBhIGJ1ZmZlciBvdmVycnVuCisgICAgIyBkdXJpbmcgZ2xvYiBleHBhbnNpb24pLiAgRXZlbiBpZiBpdCB3ZXJlIGZpeGVkLCB0aGUgcmVzdWx0IG9mIHRoaXMKKyAgICAjIGNoZWNrIHdvdWxkIGJlIGxhcmdlciB0aGFuIGl0IHNob3VsZCBiZS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTIyODg7ICAgICMgMTJLIGlzIGFib3V0IHJpZ2h0CisgICAgOzsKKworICBnbnUqKQorICAgICMgVW5kZXIgR05VIEh1cmQsIHRoaXMgdGVzdCBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSB0aGVyZSBpcworICAgICMgbm8gbGltaXQgdG8gdGhlIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorICAgICMgTGlidG9vbCB3aWxsIGludGVycHJldCAtMSBhcyBubyBsaW1pdCB3aGF0c29ldmVyCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xOworICAgIDs7CisKKyAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKyAgICAjIE9uIFdpbjl4L01FLCB0aGlzIHRlc3QgYmxvd3MgdXAgLS0gaXQgc3VjY2VlZHMsIGJ1dCB0YWtlcworICAgICMgYWJvdXQgNSBtaW51dGVzIGFzIHRoZSB0ZXN0c3RyaW5nIGdyb3dzIGV4cG9uZW50aWFsbHkuCisgICAgIyBXb3JzZSwgc2luY2UgOXgvTUUgYXJlIG5vdCBwcmUtZW1wdGl2ZWx5IG11bHRpdGFza2luZywKKyAgICAjIHlvdSBlbmQgdXAgd2l0aCBhICJmcm96ZW4iIGNvbXB1dGVyLCBldmVuIHRob3VnaCB3aXRoIHBhdGllbmNlCisgICAgIyB0aGUgdGVzdCBldmVudHVhbGx5IHN1Y2NlZWRzICh3aXRoIGEgbWF4IGxpbmUgbGVuZ3RoIG9mIDI1NmspLgorICAgICMgSW5zdGVhZCwgbGV0J3MganVzdCBwdW50OiB1c2UgdGhlIG1pbmltdW0gbGluZWxlbmd0aCByZXBvcnRlZCBieQorICAgICMgYWxsIG9mIHRoZSBzdXBwb3J0ZWQgcGxhdGZvcm1zOiA4MTkyIChvbiBOVC8ySy9YUCkuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBtaW50KikKKyAgICAjIE9uIE1pTlQgdGhpcyBjYW4gdGFrZSBhIGxvbmcgdGltZSBhbmQgcnVuIG91dCBvZiBtZW1vcnkuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBhbWlnYW9zKikKKyAgICAjIE9uIEFtaWdhT1Mgd2l0aCBwZGtzaCwgdGhpcyB0ZXN0IHRha2VzIGhvdXJzLCBsaXRlcmFsbHkuCisgICAgIyBTbyB3ZSBqdXN0IHB1bnQgYW5kIHVzZSBhIG1pbmltdW0gbGluZSBsZW5ndGggb2YgODE5Mi4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIG5ldGJzZCogfCBmcmVlYnNkKiB8IG9wZW5ic2QqIHwgZGFyd2luKiB8IGRyYWdvbmZseSopCisgICAgIyBUaGlzIGhhcyBiZWVuIGFyb3VuZCBzaW5jZSAzODZCU0QsIGF0IGxlYXN0LiAgTGlrZWx5IGZ1cnRoZXIuCisgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjdGw7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAorICAgIGVsaWYgdGVzdCAteCAvdXNyL3NiaW4vc3lzY3RsOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC91c3Ivc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisgICAgZWxzZQorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTY1NTM2CSMgdXNhYmxlIGRlZmF1bHQgZm9yIGFsbCBCU0RzCisgICAgZmkKKyAgICAjIEFuZCBhZGQgYSBzYWZldHkgem9uZQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKyAgICA7OworCisgIGludGVyaXgqKQorICAgICMgV2Uga25vdyB0aGUgdmFsdWUgMjYyMTQ0IGFuZCBoYXJkY29kZSBpdCB3aXRoIGEgc2FmZXR5IHpvbmUgKGxpa2UgQlNEKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xOTY2MDgKKyAgICA7OworCisgIG9zZiopCisgICAgIyBEci4gSGFucyBFa2tlaGFyZCBQbGVzc2VyIHJlcG9ydHMgc2VlaW5nIGEga2VybmVsIHBhbmljIHJ1bm5pbmcgY29uZmlndXJlCisgICAgIyBkdWUgdG8gdGhpcyB0ZXN0IHdoZW4gZXhlY19kaXNhYmxlX2FyZ19saW1pdCBpcyAxIG9uIFRydTY0LiBJdCBpcyBub3QKKyAgICAjIG5pY2UgdG8gY2F1c2Uga2VybmVsIHBhbmljcyBzbyBsZXRzIGF2b2lkIHRoZSBsb29wIGJlbG93LgorICAgICMgRmlyc3Qgc2V0IGEgcmVhc29uYWJsZSBkZWZhdWx0LgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xNjM4NAorICAgICMKKyAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2NvbmZpZzsgdGhlbgorICAgICAgY2FzZSBgL3NiaW4vc3lzY29uZmlnIC1xIHByb2MgZXhlY19kaXNhYmxlX2FyZ19saW1pdGAgaW4KKyAgICAgICAgKjEqKSBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTEgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIDs7CisgIHNjbzMuMnY1KikKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTAyNDAwCisgICAgOzsKKyAgc3lzdjUqIHwgc2NvNXY2KiB8IHN5c3Y0LjJ1dzIqKQorICAgIGthcmdtYXg9YGdyZXAgQVJHX01BWCAvZXRjL2NvbmYvY2YuZC9zdHVuZSAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC1uICIka2FyZ21heCI7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZWNobyAka2FyZ21heCB8IHNlZCAncy8uKlsJIF0vLydgCisgICAgZWxzZQorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTMyNzY4CisgICAgZmkKKyAgICA7OworICAqKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gKGdldGNvbmYgQVJHX01BWCkgMj4gL2Rldi9udWxsYAorICAgIGlmIHRlc3QgLW4gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKyAgICBlbHNlCisgICAgICAjIE1ha2UgdGVzdHN0cmluZyBhIGxpdHRsZSBiaWdnZXIgYmVmb3JlIHdlIGRvIGFueXRoaW5nIHdpdGggaXQuCisgICAgICAjIGEgMUsgc3RyaW5nIHNob3VsZCBiZSBhIHJlYXNvbmFibGUgc3RhcnQuCisgICAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOyBkbworICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKKyAgICAgIGRvbmUKKyAgICAgIFNIRUxMPSR7U0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19CisgICAgICAjIElmIHRlc3QgaXMgbm90IGEgc2hlbGwgYnVpbHQtaW4sIHdlJ2xsIHByb2JhYmx5IGVuZCB1cCBjb21wdXRpbmcgYQorICAgICAgIyBtYXhpbXVtIGxlbmd0aCB0aGF0IGlzIG9ubHkgaGFsZiBvZiB0aGUgYWN0dWFsIG1heGltdW0gbGVuZ3RoLCBidXQKKyAgICAgICMgd2UgY2FuJ3QgdGVsbC4KKyAgICAgIHdoaWxlIHsgdGVzdCAiWCJgZnVuY19mYWxsYmFja19lY2hvICIkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAorCSAgICAgICAgID0gIlgkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIjsgfSA+L2Rldi9udWxsIDI+JjEgJiYKKwkgICAgICB0ZXN0ICRpICE9IDE3ICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKKyAgICAgIGRvCisgICAgICAgIGk9YGV4cHIgJGkgKyAxYAorICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKKyAgICAgIGRvbmUKKyAgICAgICMgT25seSBjaGVjayB0aGUgc3RyaW5nIGxlbmd0aCBvdXRzaWRlIHRoZSBsb29wLgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICJYJHRlc3RzdHJpbmciIDogIi4qIiAyPiYxYAorICAgICAgdGVzdHN0cmluZz0KKyAgICAgICMgQWRkIGEgc2lnbmlmaWNhbnQgc2FmZXR5IGZhY3RvciBiZWNhdXNlIEMrKyBjb21waWxlcnMgY2FuIHRhY2sgb24KKyAgICAgICMgbWFzc2l2ZSBhbW91bnRzIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlCisgICAgICAjIGxpbmtlci4gIEl0IGFwcGVhcnMgYXMgdGhvdWdoIDEvMiBpcyBhIHVzYWJsZSB2YWx1ZS4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDJgCisgICAgZmkKKyAgICA7OworICBlc2FjCisKK2ZpCisKK2lmIHRlc3QgLW4gJGx0X2N2X3N5c19tYXhfY21kX2xlbiA7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNQorJGFzX2VjaG8gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm9uZSIgPiY1CiskYXNfZWNobyAibm9uZSIgPiY2OyB9CitmaQorbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgorCisKKworCisKKworOiAke0NQPSJjcCAtZiJ9Cis6ICR7TVY9Im12IC1mIn0KKzogJHtSTT0icm0gLWYifQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsgfQorIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKK3hzaV9zaGVsbD1ubworKCBfbHRfZHVtbXk9ImEvYi9jIgorICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwiJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorICAgICAgPSBjLGEvYiwsIFwKKyAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgeHNpX3NoZWxsPXllcworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR4c2lfc2hlbGwiID4mNQorJGFzX2VjaG8gIiR4c2lfc2hlbGwiID4mNjsgfQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgXCIrPVwiIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIFwiKz1cIi4uLiAiID4mNjsgfQorbHRfc2hlbGxfYXBwZW5kPW5vCisoIGZvbz1iYXI7IHNldCBmb28gYmF6OyBldmFsICIkMSs9XCQyIiAmJiB0ZXN0ICIkZm9vIiA9IGJhcmJheiApIFwKKyAgICA+L2Rldi9udWxsIDI+JjEgXAorICAmJiBsdF9zaGVsbF9hcHBlbmQ9eWVzCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X3NoZWxsX2FwcGVuZCIgPiY1CiskYXNfZWNobyAiJGx0X3NoZWxsX2FwcGVuZCIgPiY2OyB9CisKKworaWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGx0X3Vuc2V0PXVuc2V0CitlbHNlCisgIGx0X3Vuc2V0PWZhbHNlCitmaQorCisKKworCisKKyMgdGVzdCBFQkNESUMgb3IgQVNDSUkKK2Nhc2UgYGVjaG8gWHx0ciBYICdcMTAxJ2AgaW4KKyBBKSAjIEFTQ0lJIGJhc2VkIHN5c3RlbQorICAgICMgXG4gaXMgbm90IGludGVycHJldGVkIGNvcnJlY3RseSBieSBTb2xhcmlzIDggL3Vzci91Y2IvdHIKKyAgbHRfU1AyTkw9J3RyIFwwNDAgXDAxMicKKyAgbHRfTkwyU1A9J3RyIFwwMTVcMDEyIFwwNDBcMDQwJworICA7OworICopICMgRUJDRElDIGJhc2VkIHN5c3RlbQorICBsdF9TUDJOTD0ndHIgXDEwMCBcbicKKyAgbHRfTkwyU1A9J3RyIFxyXG4gXDEwMFwxMDAnCisgIDs7Citlc2FjCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2xkX3JlbG9hZF9mbGFnPSctcicKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2xkX3JlbG9hZF9mbGFnIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfbGRfcmVsb2FkX2ZsYWciID4mNjsgfQorcmVsb2FkX2ZsYWc9JGx0X2N2X2xkX3JlbG9hZF9mbGFnCitjYXNlICRyZWxvYWRfZmxhZyBpbgorIiIgfCAiICIqKSA7OworKikgcmVsb2FkX2ZsYWc9IiAkcmVsb2FkX2ZsYWciIDs7Citlc2FjCityZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitjYXNlICRob3N0X29zIGluCisgIGRhcndpbiopCisgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyAgICBlbHNlCisgICAgICByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZmkKKyAgICA7OworZXNhYworCisKKworCisKKworCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vYmpkdW1wOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19PQkpEVU1QK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfT0JKRFVNUD0iJE9CSkRVTVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorT0JKRFVNUD0kYWNfY3ZfcHJvZ19PQkpEVU1QCitpZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPQkpEVU1QIiA+JjUKKyRhc19lY2hvICIkT0JKRFVNUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3RfT0JKRFVNUD0kT0JKRFVNUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG9iamR1bXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X09CSkRVTVArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSIkYWNfY3RfT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9Im9iamR1bXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfT0JKRFVNUD0kYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QCitpZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PQkpEVU1QIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfT0JKRFVNUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X09CSkRVTVAiID0geDsgdGhlbgorICAgIE9CSkRVTVA9ImZhbHNlIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE9CSkRVTVA9JGFjX2N0X09CSkRVTVAKKyAgZmkKK2Vsc2UKKyAgT0JKRFVNUD0iJGFjX2N2X3Byb2dfT0JKRFVNUCIKK2ZpCisKK3Rlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byByZWNvZ25pemUgZGVwZW5kZW50IGxpYnJhcmllcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckTUFHSUNfQ01EJworbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9CitsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0ndW5rbm93bicKKyMgTmVlZCB0byBzZXQgdGhlIHByZWNlZGluZyB2YXJpYWJsZSBvbiBhbGwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydAorIyBpbnRlcmxpYnJhcnkgZGVwZW5kZW5jaWVzLgorIyAnbm9uZScgLS0gZGVwZW5kZW5jaWVzIG5vdCBzdXBwb3J0ZWQuCisjIGB1bmtub3duJyAtLSBzYW1lIGFzIG5vbmUsIGJ1dCBkb2N1bWVudHMgdGhhdCB3ZSByZWFsbHkgZG9uJ3Qga25vdy4KKyMgJ3Bhc3NfYWxsJyAtLSBhbGwgZGVwZW5kZW5jaWVzIHBhc3NlZCB3aXRoIG5vIGNoZWNrcy4KKyMgJ3Rlc3RfY29tcGlsZScgLS0gY2hlY2sgYnkgbWFraW5nIHRlc3QgcHJvZ3JhbS4KKyMgJ2ZpbGVfbWFnaWMgW1tyZWdleF1dJyAtLSBjaGVjayBieSBsb29raW5nIGZvciBmaWxlcyBpbiBsaWJyYXJ5IHBhdGgKKyMgd2hpY2ggcmVzcG9uZHMgdG8gdGhlICRmaWxlX21hZ2ljX2NtZCB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgcmVnZXguCisjIElmIHlvdSBoYXZlIGBmaWxlJyBvciBlcXVpdmFsZW50IG9uIHlvdXIgc3lzdGVtIGFuZCB5b3UncmUgbm90IHN1cmUKKyMgd2hldGhlciBgcGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeFs0LTldKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworYmVvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2JzZGlbNDVdKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL3Vzci9iaW4vZmlsZSAtTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3NobGliL2xpYmMuc28KKyAgOzsKKworY3lnd2luKikKKyAgIyBmdW5jX3dpbjMyX2xpYmlkIGlzIGEgc2hlbGwgZnVuY3Rpb24gZGVmaW5lZCBpbiBsdG1haW4uc2gKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgIDs7CisKK21pbmd3KiB8IHB3MzIqKQorICAjIEJhc2UgTVNZUy9NaW5HVyBkbyBub3QgcHJvdmlkZSB0aGUgJ2ZpbGUnIGNvbW1hbmQgbmVlZGVkIGJ5CisgICMgZnVuY193aW4zMl9saWJpZCBzaGVsbCBmdW5jdGlvbiwgc28gdXNlIGEgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLAorICAjIHVubGVzcyB3ZSBmaW5kICdmaWxlJywgZm9yIGV4YW1wbGUgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLgorICAjIGZ1bmNfd2luMzJfbGliaWQgYXNzdW1lcyBCU0Qgbm0sIHNvIGRpc2FsbG93IGl0IGlmIHVzaW5nIE1TIGR1bXBiaW4uCisgIGlmICggdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiQlNEIG5tIiAmJiBmaWxlIC8gKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICBlbHNlCisgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIGZpCisgIDs7CisKK2NlZ2NjKikKKyAgIyB1c2UgdGhlIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJy4gU2VlIG1pbmd3Ki4KKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGUtYXJtLS4qbGl0dGxlKC4qYXJjaGl0ZWN0dXJlOiBhcm0pPycKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgaSo4NiApCisgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgdGhlIHByZXNlbmNlIG9mIE9wZW5CU0QgaGVyZSB3YXMgYSBtaXN0YWtlLgorICAgICAgIyBMZXQncyBhY2NlcHQgYm90aCBvZiB0aGVtIHVudGlsIHRoaXMgaXMgY2xlYXJlZCB1cC4KKyAgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChGcmVlQlNEfE9wZW5CU0R8RHJhZ29uRmx5KS9pWzMtOV04NiAoY29tcGFjdCApP2RlbWFuZCBwYWdlZCBzaGFyZWQgbGlicmFyeScKKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28uKmAKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgZmkKKyAgOzsKKworZ251KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworaGFpa3UqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitocHV4MTAuMjAqIHwgaHB1eDExKikKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxFTEYtWzAtOV1bMC05XSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gSUE2NCcKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9ocHV4MzIvbGliYy5zbworICAgIDs7CisgIGhwcGEqNjQqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRlsgLV1bMC05XVswLTldKSgtYml0KT8oIFtMTV1TQik/IHNoYXJlZCBvYmplY3QoIGZpbGUpP1ssIC1dKiBQQS1SSVNDIFswLTldXC5bMC05XScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9wYTIwXzY0L2xpYmMuc2wKKyAgICA7OworICAqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfFBBLVJJU0NbMC05XVwuWzAtOV0pIHNoYXJlZCBsaWJyYXJ5JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYmMuc2wKKyAgICA7OworICBlc2FjCisgIDs7CisKK2ludGVyaXhbMy05XSopCisgICMgUElDIGNvZGUgaXMgYnJva2VuIG9uIEludGVyaXggMy54LCB0aGF0J3Mgd2h5IHxcLmEgbm90IHxfcGljXC5hIGhlcmUKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc298XC5hKSQnCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJExEIGluCisgICotMzJ8KiItMzIgIikgbGlibWFnaWM9MzItYml0OzsKKyAgKi1uMzJ8KiItbjMyICIpIGxpYm1hZ2ljPU4zMjs7CisgICotNjR8KiItNjQgIikgbGlibWFnaWM9NjQtYml0OzsKKyAgKikgbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICBlc2FjCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworbmV0YnNkKikKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworbmV3b3M2KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKGV4ZWN1dGFibGV8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbworICA7OworCisqbnRvKiB8ICpxbngqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitvcGVuYnNkKikKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xcLnNvfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCisgIGZpCisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworcmRvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3NvbGFyaXMqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgbW90b3JvbGEpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpIE1bMC05XVswLTldKiBWZXJzaW9uIFswLTldJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28qYAorICAgIDs7CisgIG5jcikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHNlcXVlbnQpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtMTV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiApJworICAgIDs7CisgIHNuaSkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW0xNXVNCIGR5bmFtaWMgbGliIgorICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9saWIvbGliYy5zbworICAgIDs7CisgIHNpZW1lbnMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBwYykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIGVzYWMKKyAgOzsKKwordHBmKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKK2VzYWMKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CitmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAordGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisKKworCisKKworCisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hcjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQVIiOyB0aGVuCisgIGFjX2N2X3Byb2dfQVI9IiRBUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0FSPSIke2FjX3Rvb2xfcHJlZml4fWFyIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0FSPSRhY19jdl9wcm9nX0FSCitpZiB0ZXN0IC1uICIkQVIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQVIiID4mNQorJGFzX2VjaG8gIiRBUiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCisgIGFjX2N0X0FSPSRBUgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBhcjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19jdF9BUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9BUj0kYWNfY3ZfcHJvZ19hY19jdF9BUgoraWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0FSIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQVIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCisgICAgQVI9ImZhbHNlIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIEFSPSRhY19jdF9BUgorICBmaQorZWxzZQorICBBUj0iJGFjX2N2X3Byb2dfQVIiCitmaQorCit0ZXN0IC16ICIkQVIiICYmIEFSPWFyCit0ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorCisKKworCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19TVFJJUCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19TVFJJUD0iJFNUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfU1RSSVA9IiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorU1RSSVA9JGFjX2N2X3Byb2dfU1RSSVAKK2lmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRTVFJJUCIgPiY1CiskYXNfZWNobyAiJFNUUklQIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19TVFJJUCI7IHRoZW4KKyAgYWNfY3RfU1RSSVA9JFNUUklQCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHN0cmlwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9TVFJJUCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0iJGFjX2N0X1NUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9InN0cmlwIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X1NUUklQPSRhY19jdl9wcm9nX2FjX2N0X1NUUklQCitpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfU1RSSVAiID4mNQorJGFzX2VjaG8gIiRhY19jdF9TVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X1NUUklQIiA9IHg7IHRoZW4KKyAgICBTVFJJUD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBTVFJJUD0kYWNfY3RfU1RSSVAKKyAgZmkKK2Vsc2UKKyAgU1RSSVA9IiRhY19jdl9wcm9nX1NUUklQIgorZmkKKwordGVzdCAteiAiJFNUUklQIiAmJiBTVFJJUD06CisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1yYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9cmFubGliOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19SQU5MSUIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICBhY19jdl9wcm9nX1JBTkxJQj0iJFJBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX1JBTkxJQj0iJHthY190b29sX3ByZWZpeH1yYW5saWIiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorUkFOTElCPSRhY19jdl9wcm9nX1JBTkxJQgoraWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRSQU5MSUIiID4mNQorJGFzX2VjaG8gIiRSQU5MSUIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX1JBTkxJQiI7IHRoZW4KKyAgYWNfY3RfUkFOTElCPSRSQU5MSUIKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJyYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHJhbmxpYjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9IiRhY19jdF9SQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9InJhbmxpYiIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9SQU5MSUI9JGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCCitpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X1JBTkxJQiIgPiY1CiskYXNfZWNobyAiJGFjX2N0X1JBTkxJQiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X1JBTkxJQiIgPSB4OyB0aGVuCisgICAgUkFOTElCPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIFJBTkxJQj0kYWNfY3RfUkFOTElCCisgIGZpCitlbHNlCisgIFJBTkxJQj0iJGFjX2N2X3Byb2dfUkFOTElCIgorZmkKKwordGVzdCAteiAiJFJBTkxJQiIgJiYgUkFOTElCPToKKworCisKKworCisKKyMgRGV0ZXJtaW5lIGNvbW1hbmRzIHRvIGNyZWF0ZSBvbGQtc3R5bGUgc3RhdGljIGFyY2hpdmVzLgorb2xkX2FyY2hpdmVfY21kcz0nJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMnCitvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPQorCitpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgIG9wZW5ic2QqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgLXQgXCRvbGRsaWIiCisgICAgOzsKKyAgKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIFwkb2xkbGliIgorICAgIDs7CisgIGVzYWMKKyAgb2xkX2FyY2hpdmVfY21kcz0iJG9sZF9hcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCitmaQorCitjYXNlICRob3N0X29zIGluCisgIGRhcndpbiopCisgICAgbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPXllcyA7OworICAqKQorICAgIGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj1ubyA7OworZXNhYworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworCisKKyMgQ2hlY2sgZm9yIGNvbW1hbmQgdG8gZ3JhYiB0aGUgcmF3IHN5bWJvbCBuYW1lIGZvbGxvd2VkIGJ5IEMgc3ltYm9sIGZyb20gbm0uCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGNvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworIyBUaGVzZSBhcmUgc2FuZSBkZWZhdWx0cyB0aGF0IHdvcmsgb24gYXQgbGVhc3QgYSBmZXcgb2xkIHN5c3RlbXMuCisjIFtUaGV5IGNvbWUgZnJvbSBVbHRyaXguICBXaGF0IGNvdWxkIGJlIG9sZGVyIHRoYW4gVWx0cml4PyEhIDspXQorCisjIENoYXJhY3RlciBjbGFzcyBkZXNjcmliaW5nIE5NIGdsb2JhbCBzeW1ib2wgY29kZXMuCitzeW1jb2RlPSdbQkNERUdSU1RdJworCisjIFJlZ2V4cCB0byBtYXRjaCBzeW1ib2xzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gQy4KK3N5bXBhdD0nXChbX0EtWmEtel1bX0EtWmEtejAtOV0qXCknCisKKyMgRGVmaW5lIHN5c3RlbS1zcGVjaWZpYyB2YXJpYWJsZXMuCitjYXNlICRob3N0X29zIGluCithaXgqKQorICBzeW1jb2RlPSdbQkNEVF0nCisgIDs7CitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgIHN5bWNvZGU9J1tBQkNER0lTVFddJworICA7OworaHB1eCopCisgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgc3ltY29kZT0nW0FCQ0RFR1JTVF0nCisgIGZpCisgIDs7Citpcml4KiB8IG5vbnN0b3B1eCopCisgIHN5bWNvZGU9J1tCQ0RFR1JTVF0nCisgIDs7Citvc2YqKQorICBzeW1jb2RlPSdbQkNERUdRUlNUXScKKyAgOzsKK3NvbGFyaXMqKQorICBzeW1jb2RlPSdbQkRSVF0nCisgIDs7CitzY28zLjJ2NSopCisgIHN5bWNvZGU9J1tEVF0nCisgIDs7CitzeXN2NC4ydXcyKikKKyAgc3ltY29kZT0nW0RUXScKKyAgOzsKK3N5c3Y1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgIHN5bWNvZGU9J1tBQkRUXScKKyAgOzsKK3N5c3Y0KQorICBzeW1jb2RlPSdbREZOU1RVXScKKyAgOzsKK2VzYWMKKworIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gdXNlIGl0cyBzdGFuZGFyZCBzeW1ib2wgY29kZXMuCitjYXNlIGAkTk0gLVYgMj4mMWAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBzeW1jb2RlPSdbQUJDREdJUlNUV10nIDs7Citlc2FjCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24uCisjIFNvbWUgc3lzdGVtcyAoZXNwLiBvbiBpYTY0KSBsaW5rIGRhdGEgYW5kIGNvZGUgc3ltYm9scyBkaWZmZXJlbnRseSwKKyMgc28gdXNlIHRoaXMgZ2VuZXJhbCBhcHByb2FjaC4KK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorCisjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KK29wdF9jcj0KK2Nhc2UgJGJ1aWxkX29zIGluCittaW5ndyopCisgIG9wdF9jcj1gJEVDSE8gJ3hcezAsMVx9JyB8IHRyIHggJ1wwMTUnYCAjIG9wdGlvbiBjciBpbiByZWdleHAKKyAgOzsKK2VzYWMKKworIyBUcnkgd2l0aG91dCBhIHByZWZpeCB1bmRlcnNjb3JlLCB0aGVuIHdpdGggaXQuCitmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisKKyAgIyBUcmFuc2Zvcm0gc3ltY29kZSwgc3ltcGF0LCBhbmQgc3ltcHJmeCBpbnRvIGEgcmF3IHN5bWJvbCBhbmQgYSBDIHN5bWJvbC4KKyAgc3lteGZybT0iXFwxICRhY19zeW1wcmZ4XFwyIFxcMiIKKworICAjIFdyaXRlIHRoZSByYXcgYW5kIEMgaWRlbnRpZmllcnMuCisgIGlmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisgICAgIyBGYWtlIGl0IGZvciBkdW1wYmluIGFuZCBzYXkgVCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24KKyAgICAjIGFuZCBEIGZvciBhbnkgZ2xvYmFsIHZhcmlhYmxlLgorICAgICMgQWxzbyBmaW5kIEMrKyBhbmQgX19mYXN0Y2FsbCBzeW1ib2xzIGZyb20gTVNWQysrLAorICAgICMgd2hpY2ggc3RhcnQgd2l0aCBAIG9yID8uCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJEFXSyAnIlwKKyIgICAgIHtsYXN0X3NlY3Rpb249c2VjdGlvbjsgc2VjdGlvbj1cJCAzfTsiXAorIiAgICAgL1NlY3Rpb24gbGVuZ3RoIC4qI3JlbG9jcy4qKHBpY2sgYW55KS97aGlkZVtsYXN0X3NlY3Rpb25dPTF9OyJcCisiICAgICBcJCAwIX4vRXh0ZXJuYWwgKlx8L3tuZXh0fTsiXAorIiAgICAgLyAwKyBVTkRFRiAve25leHR9OyAvIFVOREVGIFwoW158XVwpKigpL3tuZXh0fTsiXAorIiAgICAge2lmKGhpZGVbc2VjdGlvbl0pIG5leHR9OyJcCisiICAgICB7Zj0wfTsgXCQgMH4vXChcKS4qXHwve2Y9MX07IHtwcmludGYgZiA/IFwiVCBcIiA6IFwiRCBcIn07IlwKKyIgICAgIHtzcGxpdChcJCAwLCBhLCAvXHx8XHIvKTsgc3BsaXQoYVsyXSwgcyl9OyJcCisiICAgICBzWzFdfi9eW0A/XS97cHJpbnQgc1sxXSwgc1sxXTsgbmV4dH07IlwKKyIgICAgIHNbMV1+cHJmeCB7c3BsaXQoc1sxXSx0LFwiQFwiKTsgcHJpbnQgdFsxXSwgc3Vic3RyKHRbMV0sbGVuZ3RoKHByZngpKX0iXAorIiAgICAgJyBwcmZ4PV4kYWNfc3ltcHJmeCIKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgIGZpCisKKyAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgIHBpcGVfd29ya3M9bm8KKworICBybSAtZiBjb25mdGVzdCoKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK2NoYXIgbm1fdGVzdF92YXI7Cit2b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKTsKK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpe30KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCitpbnQgbWFpbigpe25tX3Rlc3RfdmFyPSdhJztubV90ZXN0X2Z1bmMoKTtyZXR1cm4oMCk7fQorX0xUX0VPRgorCisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICAjIE5vdyB0cnkgdG8gZ3JhYiB0aGUgc3ltYm9scy4KKyAgICBubGlzdD1jb25mdGVzdC5ubQorICAgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiROTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgXD4gJG5saXN0XCIiOyB9ID4mNQorICAoZXZhbCAkTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIFw+ICRubGlzdCkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyAiJG5saXN0IjsgdGhlbgorICAgICAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KKyAgICAgIGlmIHNvcnQgIiRubGlzdCIgfCB1bmlxID4gIiRubGlzdCJUOyB0aGVuCisJbXYgLWYgIiRubGlzdCJUICIkbmxpc3QiCisgICAgICBlbHNlCisJcm0gLWYgIiRubGlzdCJUCisgICAgICBmaQorCisgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIHNuYWdnZWQgYWxsIHRoZSBzeW1ib2xzIHdlIG5lZWQuCisgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworX0xUX0VPRgorCSAgIyBOb3cgZ2VuZXJhdGUgdGhlIHN5bWJvbCBmaWxlLgorCSAgZXZhbCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIicgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dCcKKworCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisKKy8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KK2NvbnN0IHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIHZvaWQgICAgICAgKmFkZHJlc3M7Cit9CitsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW10gPQoreworICB7ICJAUFJPR1JBTUAiLCAodm9pZCAqKSAwIH0sCitfTFRfRU9GCisJICAkU0VEICJzL14kc3ltY29kZSRzeW1jb2RlKiBcKC4qXCkgXCguKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC8iIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQKKwkgIGNhdCA8PFxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAgezAsICh2b2lkICopIDB9Cit9OworCisvKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KKyNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKK3N0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgIHJldHVybiBsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzOworfQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCitfTFRfRU9GCisJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CisJICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgorCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisJICAgIHBpcGVfd29ya3M9eWVzCisJICBmaQorCSAgTElCUz0iJGx0X3NhdmVfTElCUyIKKwkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorCWVsc2UKKwkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQorCWZpCisgICAgICBlbHNlCisJZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF92YXIgaW4gJG5saXN0IiA+JjUKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgZWNobyAiY2Fubm90IHJ1biAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgPiY1CisgICAgZmkKKyAgZWxzZQorICAgIGVjaG8gIiRwcm9nbmFtZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCogY29uZnRzdCoKKworICAjIERvIG5vdCB1c2UgdGhlIGdsb2JhbF9zeW1ib2xfcGlwZSB1bmxlc3MgaXQgd29ya3MuCisgIGlmIHRlc3QgIiRwaXBlX3dvcmtzIiA9IHllczsgdGhlbgorICAgIGJyZWFrCisgIGVsc2UKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPQorICBmaQorZG9uZQorCitmaQorCitpZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9CitmaQoraWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBmYWlsZWQiID4mNQorJGFzX2VjaG8gImZhaWxlZCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBvayIgPiY1CiskYXNfZWNobyAib2siID4mNjsgfQorZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2xpYnRvb2xfbG9jazsKK2ZpCisKK3Rlc3QgIngkZW5hYmxlX2xpYnRvb2xfbG9jayIgIT0geG5vICYmIGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCisKKyMgU29tZSBmbGFncyBuZWVkIHRvIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIGNvbXBpbGVyIG9yIGxpbmtlciBmb3IgZ29vZAorIyBsaWJ0b29sIHN1cHBvcnQuCitjYXNlICRob3N0IGluCitpYTY0LSotaHB1eCopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICpFTEYtMzIqKQorCUhQVVhfSUE2NF9NT0RFPSIzMiIKKwk7OworICAgICAgKkVMRi02NCopCisJSFBVWF9JQTY0X01PREU9IjY0IgorCTs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisqLSotaXJpeDYqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJyNsaW5lICckTElORU5PJyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJzbWlwIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbWVsZjMyYm1pcG4zMiIKKwkgIDs7CisJKjY0LWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGY2NGJtaXAiCisJOzsKKyAgICAgIGVzYWMKKyAgICBlbHNlCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLTMyIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbjMyIgorCSAgOzsKKwkqNjQtYml0KikKKwkgIExEPSIke0xELWxkfSAtNjQiCisJICA7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworeDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfCBcCitzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqfHNwYXJjKi0qbGludXgqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgICAqMzItYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4Nl9mYnNkIgorCSAgICA7OworCSAgeDg2XzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKKwkgICAgOzsKKwkgIHBwYzY0LSpsaW51eCp8cG93ZXJwYzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMnBwY2xpbnV4IgorCSAgICA7OworCSAgczM5MHgtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9zMzkwIgorCSAgICA7OworCSAgc3BhcmM2NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJfc3BhcmMiCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICAqNjQtYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0X2Zic2QiCisJICAgIDs7CisJICB4ODZfNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCisJICAgIDs7CisJICBwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0cHBjIgorCSAgICA7OworCSAgczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3MzOTAiCisJICAgIDs7CisJICBzcGFyYyotKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgorCSAgICA7OworCWVzYWMKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCisqLSotc2NvMy4ydjUqKQorICAjIE9uIFNDTyBPcGVuU2VydmVyIDUsIHdlIG5lZWQgLWJlbGYgdG8gZ2V0IGZ1bGwtZmVhdHVyZWQgYmluYXJpZXMuCisgIFNBVkVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBDRkxBR1M9IiRDRkxBR1MgLWJlbGYiCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X2NjX25lZWRzX2JlbGYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGx0X2N2X2NjX25lZWRzX2JlbGY9eWVzCitlbHNlCisgIGx0X2N2X2NjX25lZWRzX2JlbGY9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9jY19uZWVkc19iZWxmIiA+JjY7IH0KKyAgaWYgdGVzdCB4IiRsdF9jdl9jY19uZWVkc19iZWxmIiAhPSB4InllcyI7IHRoZW4KKyAgICAjIHRoaXMgaXMgcHJvYmFibHkgZ2NjIDIuOC4wLCBlZ2NzIDEuMCBvciBuZXdlcjsgbm8gbmVlZCBmb3IgLWJlbGYKKyAgICBDRkxBR1M9IiRTQVZFX0NGTEFHUyIKKyAgZmkKKyAgOzsKK3NwYXJjKi0qc29sYXJpcyopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKyAgICAqNjQtYml0KikKKyAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCisgICAgICB5ZXMqKSBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiIDs7CisgICAgICAqKQorCWlmICR7TEQtbGR9IC02NCAtciAtbyBjb25mdGVzdDIubyBjb25mdGVzdC5vID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgTEQ9IiR7TEQtbGR9IC02NCIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworZXNhYworCituZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKKworCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSogfCBkYXJ3aW4qKQorICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19EU1lNVVRJTCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiREU1lNVVRJTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19EU1lNVVRJTD0iJERTWU1VVElMIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfRFNZTVVUSUw9IiR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWwiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorRFNZTVVUSUw9JGFjX2N2X3Byb2dfRFNZTVVUSUwKK2lmIHRlc3QgLW4gIiREU1lNVVRJTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICREU1lNVVRJTCIgPiY1CiskYXNfZWNobyAiJERTWU1VVElMIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19EU1lNVVRJTCI7IHRoZW4KKyAgYWNfY3RfRFNZTVVUSUw9JERTWU1VVElMCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZHN5bXV0aWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGRzeW11dGlsOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9EU1lNVVRJTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTD0iJGFjX2N0X0RTWU1VVElMIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUw9ImRzeW11dGlsIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0RTWU1VVElMPSRhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMCitpZiB0ZXN0IC1uICIkYWNfY3RfRFNZTVVUSUwiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRFNZTVVUSUwiID4mNQorJGFzX2VjaG8gIiRhY19jdF9EU1lNVVRJTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0RTWU1VVElMIiA9IHg7IHRoZW4KKyAgICBEU1lNVVRJTD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBEU1lNVVRJTD0kYWNfY3RfRFNZTVVUSUwKKyAgZmkKK2Vsc2UKKyAgRFNZTVVUSUw9IiRhY19jdl9wcm9nX0RTWU1VVElMIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW5tZWRpdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1ubWVkaXQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX05NRURJVCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiROTUVESVQiOyB0aGVuCisgIGFjX2N2X3Byb2dfTk1FRElUPSIkTk1FRElUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfTk1FRElUPSIke2FjX3Rvb2xfcHJlZml4fW5tZWRpdCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitOTUVESVQ9JGFjX2N2X3Byb2dfTk1FRElUCitpZiB0ZXN0IC1uICIkTk1FRElUIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE5NRURJVCIgPiY1CiskYXNfZWNobyAiJE5NRURJVCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTk1FRElUIjsgdGhlbgorICBhY19jdF9OTUVESVQ9JE5NRURJVAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm5tZWRpdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbm1lZGl0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9OTUVESVQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfTk1FRElUIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X05NRURJVD0iJGFjX2N0X05NRURJVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X05NRURJVD0ibm1lZGl0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X05NRURJVD0kYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQKK2lmIHRlc3QgLW4gIiRhY19jdF9OTUVESVQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTk1FRElUIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfTk1FRElUIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfTk1FRElUIiA9IHg7IHRoZW4KKyAgICBOTUVESVQ9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgTk1FRElUPSRhY19jdF9OTUVESVQKKyAgZmkKK2Vsc2UKKyAgTk1FRElUPSIkYWNfY3ZfcHJvZ19OTUVESVQiCitmaQorCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bGlwbyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1saXBvOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19MSVBPK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJExJUE8iOyB0aGVuCisgIGFjX2N2X3Byb2dfTElQTz0iJExJUE8iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19MSVBPPSIke2FjX3Rvb2xfcHJlZml4fWxpcG8iCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorTElQTz0kYWNfY3ZfcHJvZ19MSVBPCitpZiB0ZXN0IC1uICIkTElQTyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMSVBPIiA+JjUKKyRhc19lY2hvICIkTElQTyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTElQTyI7IHRoZW4KKyAgYWNfY3RfTElQTz0kTElQTworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImxpcG8iLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGxpcG87IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0xJUE8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfTElQTyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9MSVBPPSIkYWNfY3RfTElQTyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0xJUE89ImxpcG8iCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfTElQTz0kYWNfY3ZfcHJvZ19hY19jdF9MSVBPCitpZiB0ZXN0IC1uICIkYWNfY3RfTElQTyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9MSVBPIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfTElQTyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0xJUE8iID0geDsgdGhlbgorICAgIExJUE89IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgTElQTz0kYWNfY3RfTElQTworICBmaQorZWxzZQorICBMSVBPPSIkYWNfY3ZfcHJvZ19MSVBPIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW90b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW90b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19PVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRPVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PVE9PTD0iJE9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfT1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorT1RPT0w9JGFjX2N2X3Byb2dfT1RPT0wKK2lmIHRlc3QgLW4gIiRPVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPVE9PTCIgPiY1CiskYXNfZWNobyAiJE9UT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PVE9PTCI7IHRoZW4KKyAgYWNfY3RfT1RPT0w9JE9UT09MCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib3Rvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG90b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9PVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTD0iJGFjX2N0X09UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w9Im90b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X09UT09MPSRhY19jdl9wcm9nX2FjX2N0X09UT09MCitpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT1RPT0wiID4mNQorJGFzX2VjaG8gIiRhY19jdF9PVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X09UT09MIiA9IHg7IHRoZW4KKyAgICBPVE9PTD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBPVE9PTD0kYWNfY3RfT1RPT0wKKyAgZmkKK2Vsc2UKKyAgT1RPT0w9IiRhY19jdl9wcm9nX09UT09MIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW90b29sNjQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfT1RPT0w2NCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRPVE9PTDY0IjsgdGhlbgorICBhY19jdl9wcm9nX09UT09MNjQ9IiRPVE9PTDY0IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfT1RPT0w2ND0iJHthY190b29sX3ByZWZpeH1vdG9vbDY0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK09UT09MNjQ9JGFjX2N2X3Byb2dfT1RPT0w2NAoraWYgdGVzdCAtbiAiJE9UT09MNjQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT1RPT0w2NCIgPiY1CiskYXNfZWNobyAiJE9UT09MNjQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX09UT09MNjQiOyB0aGVuCisgIGFjX2N0X09UT09MNjQ9JE9UT09MNjQKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvdG9vbDY0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBvdG9vbDY0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X09UT09MNjQiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2ND0iJGFjX2N0X09UT09MNjQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0PSJvdG9vbDY0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X09UT09MNjQ9JGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2NAoraWYgdGVzdCAtbiAiJGFjX2N0X09UT09MNjQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT1RPT0w2NCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X09UT09MNjQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9PVE9PTDY0IiA9IHg7IHRoZW4KKyAgICBPVE9PTDY0PSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE9UT09MNjQ9JGFjX2N0X09UT09MNjQKKyAgZmkKK2Vsc2UKKyAgT1RPT0w2ND0iJGFjX2N2X3Byb2dfT1RPT0w2NCIKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPW5vCisgICAgICBpZiB0ZXN0IC16ICIke0xUX01VTFRJX01PRFVMRX0iOyB0aGVuCisJIyBCeSBkZWZhdWx0IHdlIHdpbGwgYWRkIHRoZSAtc2luZ2xlX21vZHVsZSBmbGFnLiBZb3UgY2FuIG92ZXJyaWRlCisJIyBieSBlaXRoZXIgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTFRfTVVMVElfTU9EVUxFCisJIyBub24tZW1wdHkgYXQgY29uZmlndXJlIHRpbWUsIG9yIGJ5IGFkZGluZyAtbXVsdGlfbW9kdWxlIHRvIHRoZQorCSMgbGluayBmbGFncy4KKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisJZWNobyAiaW50IGZvbyh2b2lkKXtyZXR1cm4gMTt9IiA+IGNvbmZ0ZXN0LmMKKwllY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAorLWR5bmFtaWNsaWIgLVdsLC1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMiID4mNQorCSRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCisJICAtZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyAyPmNvbmZ0ZXN0LmVycgorICAgICAgICBfbHRfcmVzdWx0PSQ/CisJaWYgdGVzdCAtZiBsaWJjb25mdGVzdC5keWxpYiAmJiB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyICYmIHRlc3QgJF9sdF9yZXN1bHQgPSAwOyB0aGVuCisJICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPXllcworCWVsc2UKKwkgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisJZmkKKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisJcm0gLWYgY29uZnRlc3QuKgorICAgICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA+JjY7IH0KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubworICAgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICAgICBlY2hvICJfbWFpbiIgPiBjb25mdGVzdC5zeW0KKyAgICAgIExERkxBR1M9IiRMREZMQUdTIC1XbCwtZXhwb3J0ZWRfc3ltYm9sc19saXN0LGNvbmZ0ZXN0LnN5bSIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9eWVzCitlbHNlCisgIGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisJTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA+JjY7IH0KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtZm9yY2VfbG9hZCBsaW5rZXIgZmxhZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgLWZvcmNlX2xvYWQgbGlua2VyIGZsYWcuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfbGRfZm9yY2VfbG9hZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2xkX2ZvcmNlX2xvYWQ9bm8KKyAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgoraW50IGZvcmNlZF9sb2FkZWQoKSB7IHJldHVybiAyO30KK19MVF9FT0YKKyAgICAgIGVjaG8gIiRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMiID4mNQorICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1CisgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1CisgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiY1CisgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mNQorICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JjUKKyAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgoraW50IG1haW4oKSB7IHJldHVybiAwO30KK19MVF9FT0YKKyAgICAgIGVjaG8gIiRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jIC1XbCwtZm9yY2VfbG9hZCwuL2xpYmNvbmZ0ZXN0LmEiID4mNQorICAgICAgJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgLVdsLC1mb3JjZV9sb2FkLC4vbGliY29uZnRlc3QuYSAyPmNvbmZ0ZXN0LmVycgorICAgICAgX2x0X3Jlc3VsdD0kPworICAgICAgaWYgdGVzdCAtZiBjb25mdGVzdCAmJiB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyICYmIHRlc3QgJF9sdF9yZXN1bHQgPSAwICYmICRHUkVQIGZvcmNlZF9sb2FkIGNvbmZ0ZXN0IDI+JjEgPi9kZXYvbnVsbDsgdGhlbgorCWx0X2N2X2xkX2ZvcmNlX2xvYWQ9eWVzCisgICAgICBlbHNlCisJY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgICAgIGZpCisgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmVyciBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMKKyAgICAgICAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID4mNjsgfQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSogfCBkYXJ3aW4xLlswMTJdKQorICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbjEuKikKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICBkYXJ3aW4qKSAjIGRhcndpbiA1Lnggb24KKyAgICAgICMgaWYgcnVubmluZyBvbiAxMC41IG9yIGxhdGVyLCB0aGUgZGVwbG95bWVudCB0YXJnZXQgZGVmYXVsdHMKKyAgICAgICMgdG8gdGhlIE9TIHZlcnNpb24sIGlmIG9uIHg4NiwgYW5kIDEwLjQsIHRoZSBkZXBsb3ltZW50CisgICAgICAjIHRhcmdldCBkZWZhdWx0cyB0byAxMC40LiBEb24ndCB5b3UgbG92ZSBpdD8KKyAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0sJGhvc3QgaW4KKwkxMC4wLCo4NiotZGFyd2luOCp8MTAuMCwqLWRhcndpbls5MV0qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworCTEwLlswMTJdKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKwkxMC4qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworICAgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSAieWVzIjsgdGhlbgorICAgICAgX2x0X2Rhcl9zaW5nbGVfbW9kPSckc2luZ2xlX21vZHVsZScKKyAgICBmaQorICAgIGlmIHRlc3QgIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID0gInllcyI7IHRoZW4KKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9JyAke3dsfS1leHBvcnRlZF9zeW1ib2xzX2xpc3QsJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bScKKyAgICBlbHNlCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPSd+JE5NRURJVCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICBmaQorICAgIGlmIHRlc3QgIiREU1lNVVRJTCIgIT0gIjoiICYmIHRlc3QgIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA9ICJubyI7IHRoZW4KKyAgICAgIF9sdF9kc3ltdXRpbD0nfiREU1lNVVRJTCAkbGliIHx8IDonCisgICAgZWxzZQorICAgICAgX2x0X2RzeW11dGlsPQorICAgIGZpCisgICAgOzsKKyAgZXNhYworCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLi4uICIgPiY2OyB9CisjIE9uIFN1bnMsIHNvbWV0aW1lcyAkQ1BQIG5hbWVzIGEgZGlyZWN0b3J5LgoraWYgdGVzdCAtbiAiJENQUCIgJiYgdGVzdCAtZCAiJENQUCI7IHRoZW4KKyAgQ1BQPQorZmkKK2lmIHRlc3QgLXogIiRDUFAiOyB0aGVuCisgIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DUFArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAgICAgIyBEb3VibGUgcXVvdGVzIGJlY2F1c2UgQ1BQIG5lZWRzIHRvIGJlIGV4cGFuZGVkCisgICAgZm9yIENQUCBpbiAiJENDIC1FIiAiJENDIC1FIC10cmFkaXRpb25hbC1jcHAiICIvbGliL2NwcCIKKyAgICBkbworICAgICAgYWNfcHJlcHJvY19vaz1mYWxzZQorZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCQkgICAgIFN5bnRheCBlcnJvcgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCitjb250aW51ZQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6CisgIGJyZWFrCitmaQorCisgICAgZG9uZQorICAgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKKworZmkKKyAgQ1BQPSRhY19jdl9wcm9nX0NQUAorZWxzZQorICBhY19jdl9wcm9nX0NQUD0kQ1BQCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDUFAiID4mNQorJGFzX2VjaG8gIiRDUFAiID4mNjsgfQorYWNfcHJlcHJvY19vaz1mYWxzZQorZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCQkgICAgIFN5bnRheCBlcnJvcgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCitjb250aW51ZQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6CisKK2Vsc2UKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAiQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH0KK2ZpCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zdGRjK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIDoKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWYgKCgnICcgJiAweDBGRikgPT0gMHgwMjApCisjIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCisjZWxzZQorIyBkZWZpbmUgSVNMT1dFUihjKSBcCisJCSAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCisJCSAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAorCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykgfCAweDQwKSA6IChjKSkKKyNlbmRpZgorCisjZGVmaW5lIFhPUihlLCBmKSAoKChlKSAmJiAhKGYpKSB8fCAoIShlKSAmJiAoZikpKQoraW50CittYWluICgpCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQorCXx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQorICAgICAgcmV0dXJuIDI7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2ZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFNURENfSEVBREVSUyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyBPbiBJUklYIDUuMywgc3lzL3R5cGVzIGFuZCBpbnR0eXBlcy5oIGFyZSBjb25mbGljdGluZy4KK2ZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3N0YXQuaCBzdGRsaWIuaCBzdHJpbmcuaCBtZW1vcnkuaCBzdHJpbmdzLmggXAorCQkgIGludHR5cGVzLmggc3RkaW50LmggdW5pc3RkLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyIKK2V2YWwgYXNfdmFsPVwkJGFzX2FjX0hlYWRlcgorICAgaWYgdGVzdCAieCRhc192YWwiID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKK2ZvciBhY19oZWFkZXIgaW4gZGxmY24uaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiZGxmY24uaCIgImFjX2N2X2hlYWRlcl9kbGZjbl9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2RsZmNuX2giID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RMRkNOX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisKKworCisjIFNldCBvcHRpb25zCitlbmFibGVfZGxvcGVuPXllcworZW5hYmxlX3dpbjMyX2RsbD15ZXMKKworY2FzZSAkaG9zdCBpbgorKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLWNlZ2NjKikKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXM7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0FTK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEFTIjsgdGhlbgorICBhY19jdl9wcm9nX0FTPSIkQVMiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19BUz0iJHthY190b29sX3ByZWZpeH1hcyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitBUz0kYWNfY3ZfcHJvZ19BUworaWYgdGVzdCAtbiAiJEFTIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEFTIiA+JjUKKyRhc19lY2hvICIkQVMiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FTIjsgdGhlbgorICBhY19jdF9BUz0kQVMKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhcyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgYXM7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FTK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0FTIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0FTPSIkYWNfY3RfQVMiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9BUz0iYXMiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQVM9JGFjX2N2X3Byb2dfYWNfY3RfQVMKK2lmIHRlc3QgLW4gIiRhY19jdF9BUyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9BUyIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0FTIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfQVMiID0geDsgdGhlbgorICAgIEFTPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBBUz0kYWNfY3RfQVMKKyAgZmkKK2Vsc2UKKyAgQVM9IiRhY19jdl9wcm9nX0FTIgorZmkKKworICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKK2lmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQorJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgorICBhY19jdF9ETExUT09MPSRETExUT09MCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKK2lmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQorJGFzX2VjaG8gIiRhY19jdF9ETExUT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfRExMVE9PTCIgPSB4OyB0aGVuCisgICAgRExMVE9PTD0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAorICBmaQorZWxzZQorICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgorZmkKKworICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW9iamR1bXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX09CSkRVTVArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIkT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX09CSkRVTVA9IiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitPQkpEVU1QPSRhY19jdl9wcm9nX09CSkRVTVAKK2lmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9CSkRVTVAiID4mNQorJGFzX2VjaG8gIiRPQkpEVU1QIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PQkpEVU1QIjsgdGhlbgorICBhY19jdF9PQkpEVU1QPSRPQkpEVU1QCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgb2JqZHVtcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9IiRhY19jdF9PQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0ib2JqZHVtcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9PQkpEVU1QPSRhY19jdl9wcm9nX2FjX2N0X09CSkRVTVAKK2lmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09CSkRVTVAiID4mNQorJGFzX2VjaG8gIiRhY19jdF9PQkpEVU1QIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfT0JKRFVNUCIgPSB4OyB0aGVuCisgICAgT0JKRFVNUD0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgT0JKRFVNUD0kYWNfY3RfT0JKRFVNUAorICBmaQorZWxzZQorICBPQkpEVU1QPSIkYWNfY3ZfcHJvZ19PQkpEVU1QIgorZmkKKworICA7OworZXNhYworCit0ZXN0IC16ICIkQVMiICYmIEFTPWFzCisKKworCisKKwordGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorCisKKworCisKK3Rlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKKworCisKKworCisKKworCisKKyAgICAgICAgICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaGFyZWQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc2hhcmVkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc2hhcmVkOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX3NoYXJlZD15ZXMgOzsKKyAgICBubykgZW5hYmxlX3NoYXJlZD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfc2hhcmVkPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3NoYXJlZD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWMKK2Vsc2UKKyAgZW5hYmxlX3NoYXJlZD15ZXMKK2ZpCisKKworCisKKworCisKKworCisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zdGF0aWMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc3RhdGljK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc3RhdGljOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX3N0YXRpYz15ZXMgOzsKKyAgICBubykgZW5hYmxlX3N0YXRpYz1ubyA7OworICAgICopCisgICAgIGVuYWJsZV9zdGF0aWM9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfc3RhdGljPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhYworZWxzZQorICBlbmFibGVfc3RhdGljPXllcworZmkKKworCisKKworCisKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1waWMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3BpYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcGljOyBwaWNfbW9kZT0iJHdpdGh2YWwiCitlbHNlCisgIHBpY19tb2RlPWRlZmF1bHQKK2ZpCisKKwordGVzdCAteiAiJHBpY19tb2RlIiAmJiBwaWNfbW9kZT1kZWZhdWx0CisKKworCisKKworCisKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWZhc3QtaW5zdGFsbCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9mYXN0X2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9mYXN0X2luc3RhbGw7IHA9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfZmFzdF9pbnN0YWxsPXllcyA7OworICAgIG5vKSBlbmFibGVfZmFzdF9pbnN0YWxsPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhYworZWxzZQorICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcworZmkKKworCisKKworCisKKworCisKKworCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVidWlsZCBsaWJ0b29sIHdoZW4gbmVlZGVkCitMSUJUT09MX0RFUFM9IiRsdG1haW4iCisKKyMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCitMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCit0ZXN0IC16ICIkTE5fUyIgJiYgTE5fUz0ibG4gLXMiCisKKworCisKKworCisKKworCisKKworCisKKworaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgIHNldG9wdCBOT19HTE9CX1NVQlNUCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBvYmpkaXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG9iamRpci4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9vYmpkaXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBybSAtZiAubGlicyAyPi9kZXYvbnVsbAorbWtkaXIgLmxpYnMgMj4vZGV2L251bGwKK2lmIHRlc3QgLWQgLmxpYnM7IHRoZW4KKyAgbHRfY3Zfb2JqZGlyPS5saWJzCitlbHNlCisgICMgTVMtRE9TIGRvZXMgbm90IGFsbG93IGZpbGVuYW1lcyB0aGF0IGJlZ2luIHdpdGggYSBkb3QuCisgIGx0X2N2X29iamRpcj1fbGlicworZmkKK3JtZGlyIC5saWJzIDI+L2Rldi9udWxsCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9vYmpkaXIiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9vYmpkaXIiID4mNjsgfQorb2JqZGlyPSRsdF9jdl9vYmpkaXIKKworCisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIExUX09CSkRJUiAiJGx0X2N2X29iamRpci8iCitfQUNFT0YKKworCisKKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgICMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorICAjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyAgIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgorICBpZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgICBDT0xMRUNUX05BTUVTPQorICAgIGV4cG9ydCBDT0xMRUNUX05BTUVTCisgIGZpCisgIDs7Citlc2FjCisKKyMgR2xvYmFsIHZhcmlhYmxlczoKK29maWxlPWxpYnRvb2wKK2Nhbl9idWlsZF9zaGFyZWQ9eWVzCisKKyMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorIyB3aGljaCBuZWVkcyAnLmxpYicpLgorbGliZXh0PWEKKword2l0aF9nbnVfbGQ9IiRsdF9jdl9wcm9nX2dudV9sZCIKKworb2xkX0NDPSIkQ0MiCitvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorCisjIFNldCBzYW5lIGRlZmF1bHRzIGZvciB2YXJpb3VzIHZhcmlhYmxlcwordGVzdCAteiAiJENDIiAmJiBDQz1jYwordGVzdCAteiAiJExUQ0MiICYmIExUQ0M9JENDCit0ZXN0IC16ICIkTFRDRkxBR1MiICYmIExUQ0ZMQUdTPSRDRkxBR1MKK3Rlc3QgLXogIiRMRCIgJiYgTEQ9bGQKK3Rlc3QgLXogIiRhY19vYmpleHQiICYmIGFjX29iamV4dD1vCisKK2ZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbworICBjYXNlICRjY190ZW1wIGluCisgICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OworICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7CisgICAgXC0qKSA7OworICAgICopIGJyZWFrOzsKKyAgZXNhYworZG9uZQorY2NfYmFzZW5hbWU9YCRFQ0hPICIkY2NfdGVtcCIgfCAkU0VEICJzJS4qLyUlOyBzJV4kaG9zdF9hbGlhcy0lJSJgCisKKworIyBPbmx5IHBlcmZvcm0gdGhlIGNoZWNrIGZvciBmaWxlLCBpZiB0aGUgY2hlY2sgbWV0aG9kIHJlcXVpcmVzIGl0Cit0ZXN0IC16ICIkTUFHSUNfQ01EIiAmJiBNQUdJQ19DTUQ9ZmlsZQorY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KK2ZpbGVfbWFnaWMqKQorICBpZiB0ZXN0ICIkZmlsZV9tYWdpY19jbWQiID0gJyRNQUdJQ19DTUQnOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJHthY190b29sX3ByZWZpeH1maWxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAke2FjX3Rvb2xfcHJlZml4fWZpbGUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9NQUdJQ19DTUQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRNQUdJQ19DTUQgaW4KK1tcXC8qXSB8ICA/OltcXC9dKikKKyAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworKikKKyAgbHRfc2F2ZV9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiCisgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBhY19kdW1teT0iL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvJHthY190b29sX3ByZWZpeH1maWxlOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJGFjX2Rpci8ke2FjX3Rvb2xfcHJlZml4fWZpbGUiCisgICAgICBpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY190ZXN0X2ZpbGUiOyB0aGVuCisJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwkiZmlsZV9tYWdpYyAiKikKKwkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiZmlsZV9tYWdpYyBcKC4qXCkiYAorCSAgTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCisJICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcJGZpbGVfbWFnaWNfdGVzdF9maWxlIDI+IC9kZXYvbnVsbCB8CisJICAgICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJICAgIDoKKwkgIGVsc2UKKwkgICAgY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiB0aGUgY29tbWFuZCBsaWJ0b29sIHVzZXMgdG8gZGV0ZWN0IHNoYXJlZCBsaWJyYXJpZXMsCisqKiogJGZpbGVfbWFnaWNfY21kLCBwcm9kdWNlcyBvdXRwdXQgdGhhdCBsaWJ0b29sIGNhbm5vdCByZWNvZ25pemUuCisqKiogVGhlIHJlc3VsdCBpcyB0aGF0IGxpYnRvb2wgbWF5IGZhaWwgdG8gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJpZXMKKyoqKiBhcyBzdWNoLiAgVGhpcyB3aWxsIGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMgdGhhdAorKioqIGRlcGVuZCBvbiBzaGFyZWQgbGlicmFyaWVzLCBidXQgcHJvZ3JhbXMgbGlua2VkIHdpdGggc3VjaCBsaWJ0b29sCisqKiogbGlicmFyaWVzIHdpbGwgd29yayByZWdhcmRsZXNzIG9mIHRoaXMgcHJvYmxlbS4gIE5ldmVydGhlbGVzcywgeW91CisqKiogbWF5IHdhbnQgdG8gcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHlvdXIgc3lzdGVtIG1hbmFnZXIgYW5kL29yIHRvCisqKiogYnVnLWxpYnRvb2xAZ251Lm9yZworCitfTFRfRU9GCisJICBmaSA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgIE1BR0lDX0NNRD0iJGx0X3NhdmVfTUFHSUNfQ01EIgorICA7OworZXNhYworZmkKKworTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCitpZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BR0lDX0NNRCIgPiY1CiskYXNfZWNobyAiJE1BR0lDX0NNRCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisKKworCitpZiB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBmaWxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBmaWxlLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3BhdGhfTUFHSUNfQ01EK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkTUFHSUNfQ01EIGluCitbXFwvKl0gfCAgPzpbXFwvXSopCisgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyopCisgIGx0X3NhdmVfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgYWNfZHVtbXk9Ii91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyL2ZpbGU7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkYWNfZGlyL2ZpbGUiCisgICAgICBpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY190ZXN0X2ZpbGUiOyB0aGVuCisJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwkiZmlsZV9tYWdpYyAiKikKKwkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiZmlsZV9tYWdpYyBcKC4qXCkiYAorCSAgTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCisJICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcJGZpbGVfbWFnaWNfdGVzdF9maWxlIDI+IC9kZXYvbnVsbCB8CisJICAgICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJICAgIDoKKwkgIGVsc2UKKwkgICAgY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiB0aGUgY29tbWFuZCBsaWJ0b29sIHVzZXMgdG8gZGV0ZWN0IHNoYXJlZCBsaWJyYXJpZXMsCisqKiogJGZpbGVfbWFnaWNfY21kLCBwcm9kdWNlcyBvdXRwdXQgdGhhdCBsaWJ0b29sIGNhbm5vdCByZWNvZ25pemUuCisqKiogVGhlIHJlc3VsdCBpcyB0aGF0IGxpYnRvb2wgbWF5IGZhaWwgdG8gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJpZXMKKyoqKiBhcyBzdWNoLiAgVGhpcyB3aWxsIGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMgdGhhdAorKioqIGRlcGVuZCBvbiBzaGFyZWQgbGlicmFyaWVzLCBidXQgcHJvZ3JhbXMgbGlua2VkIHdpdGggc3VjaCBsaWJ0b29sCisqKiogbGlicmFyaWVzIHdpbGwgd29yayByZWdhcmRsZXNzIG9mIHRoaXMgcHJvYmxlbS4gIE5ldmVydGhlbGVzcywgeW91CisqKiogbWF5IHdhbnQgdG8gcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHlvdXIgc3lzdGVtIG1hbmFnZXIgYW5kL29yIHRvCisqKiogYnVnLWxpYnRvb2xAZ251Lm9yZworCitfTFRfRU9GCisJICBmaSA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgIE1BR0lDX0NNRD0iJGx0X3NhdmVfTUFHSUNfQ01EIgorICA7OworZXNhYworZmkKKworTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCitpZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BR0lDX0NNRCIgPiY1CiskYXNfZWNobyAiJE1BR0lDX0NNRCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIGVsc2UKKyAgICBNQUdJQ19DTUQ9OgorICBmaQorZmkKKworICBmaQorICA7OworZXNhYworCisjIFVzZSBDIGZvciB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGluIHRoZSBsaWJ0b29sIHNjcmlwdAorCitsdF9zYXZlX0NDPSIkQ0MiCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEMgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWMKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK29iamV4dD0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKCl7cmV0dXJuKDApO30nCisKKworCisKKworCisKKyMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCitMVENDPSR7TFRDQy0iJENDIn0KKworIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgorTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9CisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitjb21waWxlcj0kQ0MKKworIyBTYXZlIHRoZSBkZWZhdWx0IGNvbXBpbGVyLCBzaW5jZSBpdCBnZXRzIG92ZXJ3cml0dGVuIHdoZW4gdGhlIG90aGVyCisjIHRhZ3MgYXJlIGJlaW5nIHRlc3RlZCwgYW5kIF9MVF9UQUdWQVIoY29tcGlsZXIsIFtdKSBpcyBhIE5PUC4KK2NvbXBpbGVyX0RFRkFVTFQ9JENDCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRSTSBjb25mdGVzdCoKKworYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIC1yIGNvbmZ0ZXN0KgorCisKKyMjIENBVkVBVCBFTVBUT1I6CisjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgoraWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorCitsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0KKworaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgbnZjYyopCisgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9JyAtWGNvbXBpbGVyIC1mbm8tYnVpbHRpbicgOzsKKyAgKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nIC1mbm8tYnVpbHRpbicgOzsKKyAgZXNhYworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucz1ubworICAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucz15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNjsgfQorCitpZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA9IHh5ZXM7IHRoZW4KKyAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiCitlbHNlCisgICAgOgorZmkKKworZmkKKworCisKKworCisKKyAgbHRfcHJvZ19jb21waWxlcl93bD0KK2x0X3Byb2dfY29tcGlsZXJfcGljPQorbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKworICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgqKQorICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisgICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgorICAgICAgOzsKKworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQorICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctRERMTF9FWFBPUlQnCisgICAgICA7OworCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZm5vLWNvbW1vbicKKyAgICAgIDs7CisKKyAgICBoYWlrdSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSGFpa3UuCisgICAgICAjIFRoZSAiLXN0YXRpYyIgZmxhZyBleGlzdHMsIGJ1dCBpcyBicm9rZW4uCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KKyAgICAgIDs7CisKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciA2NC1iaXQgUEEgSFAtVVgsIGJ1dCBub3QgZm9yIDMyLWJpdAorICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCisgICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqKQorCSMgK1ogdGhlIGRlZmF1bHQKKwk7OworICAgICAgKikKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBpbnRlcml4WzMtOV0qKQorICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KKyAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgorICAgICAgOzsKKworICAgIG1zZG9zZGpncHAqKQorICAgICAgIyBKdXN0IGJlY2F1c2Ugd2UgdXNlIEdDQyBkb2Vzbid0IG1lYW4gd2Ugc3VkZGVubHkgZ2V0IHNoYXJlZCBsaWJyYXJpZXMKKyAgICAgICMgb24gc3lzdGVtcyB0aGF0IGRvbid0IHN1cHBvcnQgdGhlbS4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgZW5hYmxlX3NoYXJlZD1ubworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCWx0X3Byb2dfY29tcGlsZXJfcGljPS1LY29uZm9ybV9waWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICBudmNjKikgIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1YbGlua2VyICcKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctWGNvbXBpbGVyIC1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIGVsc2UKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctRERMTF9FWFBPUlQnCisgICAgICA7OworCisgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0CisgICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCp8aWE2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfcGljPScrWicKKwk7OworICAgICAgZXNhYworICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/CisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCisgICAgICA7OworCisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICMgb2xkIEludGVsIGZvciB4ODZfNjQgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgorICAgICAgZWNjKikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgICMgaWNjIHVzZWQgdG8gYmUgaW5jb21wYXRpYmxlIHdpdGggR0NDLgorICAgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCisgICAgICBpY2MqIHwgaWZvcnQqKQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctc3RhdGljJworICAgICAgICA7OworICAgICAgIyBMYWhleSBGb3J0cmFuIDguMS4KKyAgICAgIGxmOTUqKQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy0tc2hhcmVkJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKKwk7OworICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZwaWMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgICA7OworICAgICAgY2NjKikKKyAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgICAgIyBBbGwgQWxwaGEgY29kZSBpcyBQSUMuCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIHhsKiB8IGJneGwqIHwgYmdmKiB8IG1waXhsKikKKwkjIElCTSBYTCBDIDguMC9Gb3J0cmFuIDEwLjEsIDExLjEgb24gUFBDIGFuZCBCbHVlR2VuZQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1xcGljJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctcXN0YXRpY2xpbmsnCisJOzsKKyAgICAgICopCisJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJKlN1blwgRiogfCAqU3VuKkZvcnRyYW4qKQorCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgorCSAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworCSAgbHRfcHJvZ19jb21waWxlcl93bD0nJworCSAgOzsKKwkqU3VuXCBDKikKKwkgICMgU3VuIEMgNS45CisJICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworCisgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIHJkb3MqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCc7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtjb25mb3JtX3BpYycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHVuaWNvcyopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLXBpYycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKworY2FzZSAkaG9zdF9vcyBpbgorICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKKyAgKmRqZ3BwKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyAgICA7OworICAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgOzsKK2VzYWMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNQorJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CisKKworCisKKworCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCitpZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljIHdvcmtzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3M9bm8KKyAgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrcz15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID4mNjsgfQorCitpZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA9IHh5ZXM7IHRoZW4KKyAgICBjYXNlICRsdF9wcm9nX2NvbXBpbGVyX3BpYyBpbgorICAgICAiIiB8ICIgIiopIDs7CisgICAgICopIGx0X3Byb2dfY29tcGlsZXJfcGljPSIgJGx0X3Byb2dfY29tcGlsZXJfcGljIiA7OworICAgICBlc2FjCitlbHNlCisgICAgbHRfcHJvZ19jb21waWxlcl9waWM9CisgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZD1ubworZmkKKworZmkKKworCisKKworCisKKyMKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyMKK3dsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz1ubworICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgIExERkxBR1M9IiRMREZMQUdTICRsdF90bXBfc3RhdGljX2ZsYWciCisgICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KKyAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKyAgICAgICAkRUNITyAiJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gY29uZnRlc3QuZXhwCisgICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzPXllcworICAgICAgIGZpCisgICAgIGVsc2UKKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gLXIgY29uZnRlc3QqCisgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjY7IH0KKworaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPSB4eWVzOyB0aGVuCisgICAgOgorZWxzZQorICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorZmkKKworCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPW5vCisgICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz15ZXMKKyAgICAgZmkKKyAgIGZpCisgICBjaG1vZCB1K3cgLiAyPiY1CisgICAkUk0gY29uZnRlc3QqCisgICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCisgICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KKyAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKKyAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKKyAgIGNkIC4uCisgICAkUk0gLXIgY29uZnRlc3QKKyAgICRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY2OyB9CisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289bm8KKyAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAorICAgbWtkaXIgY29uZnRlc3QKKyAgIGNkIGNvbmZ0ZXN0CisgICBta2RpciBvdXQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKyAgIHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPXllcworICAgICBmaQorICAgZmkKKyAgIGNobW9kIHUrdyAuIDI+JjUKKyAgICRSTSBjb25mdGVzdCoKKyAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKKyAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJFJNIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcworICAgJFJNIG91dC8qICYmIHJtZGlyIG91dAorICAgY2QgLi4KKyAgICRSTSAtciBjb25mdGVzdAorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjY7IH0KKworCisKKworaGFyZF9saW5rcz0ibm90dGVzdGVkIgoraWYgdGVzdCAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgorICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzLi4uICIgPiY2OyB9CisgIGhhcmRfbGlua3M9eWVzCisgICRSTSBjb25mdGVzdCoKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgdG91Y2ggY29uZnRlc3QuYQorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1CiskYXNfZWNobyAiJGhhcmRfbGlua3MiID4mNjsgfQorICBpZiB0ZXN0ICIkaGFyZF9saW5rcyIgPSBubzsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjI7fQorICAgIG5lZWRfbG9ja3M9d2FybgorICBmaQorZWxzZQorICBuZWVkX2xvY2tzPW5vCitmaQorCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKworICBydW5wYXRoX3Zhcj0KKyAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9CisgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubworICBhcmNoaXZlX2NtZHM9CisgIGFyY2hpdmVfZXhwc3ltX2NtZHM9CisgIGNvbXBpbGVyX25lZWRzX29iamVjdD1ubworICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPW5vCisgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0KKyAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICBoYXJkY29kZV9hdXRvbWF0aWM9bm8KKyAgaGFyZGNvZGVfZGlyZWN0PW5vCisgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT1ubworICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPQorICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQorICBoYXJkY29kZV9taW51c19MPW5vCisgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9dW5zdXBwb3J0ZWQKKyAgaW5oZXJpdF9ycGF0aD1ubworICBsaW5rX2FsbF9kZXBsaWJzPXVua25vd24KKyAgbW9kdWxlX2NtZHM9CisgIG1vZHVsZV9leHBzeW1fY21kcz0KKyAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0KKyAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9CisgIHRocmVhZF9zYWZlX2ZsYWdfc3BlYz0KKyAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CisgICMgaW5jbHVkZV9leHBzeW1zIHNob3VsZCBiZSBhIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIHN5bWJvbHMgdG8gYmUgKmFsd2F5cyoKKyAgIyBpbmNsdWRlZCBpbiB0aGUgc3ltYm9sIGxpc3QKKyAgaW5jbHVkZV9leHBzeW1zPQorICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQorICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCisgICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKKyAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCisgIGV4Y2x1ZGVfZXhwc3ltcz0nX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJworICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKKyAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCisgICMgdGhlIHN5bWJvbCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuICBTaW5jZSBwb3J0YWJsZSBjb2RlIGNhbm5vdAorICAjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KKyAgIyBwcmVsb2FkZWQgc3ltYm9sIHRhYmxlcy4KKyAgIyBFeGNsdWRlIHNoYXJlZCBsaWJyYXJ5IGluaXRpYWxpemF0aW9uL2ZpbmFsaXphdGlvbiBzeW1ib2xzLgorICBleHRyYWN0X2V4cHN5bXNfY21kcz0KKworICBjYXNlICRob3N0X29zIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCisgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICBmaQorICAgIDs7CisgIGludGVyaXgqKQorICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCisgICAgd2l0aF9nbnVfbGQ9eWVzCisgICAgOzsKKyAgb3BlbmJzZCopCisgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICA7OworICBlc2FjCisKKyAgbGRfc2hsaWJzPXllcworCisgICMgT24gc29tZSB0YXJnZXRzLCBHTlUgbGQgaXMgY29tcGF0aWJsZSBlbm91Z2ggd2l0aCB0aGUgbmF0aXZlIGxpbmtlcgorICAjIHRoYXQgd2UncmUgYmV0dGVyIG9mZiB1c2luZyB0aGUgbmF0aXZlIGludGVyZmFjZSBmb3IgYm90aC4KKyAgbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9bm8KKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeCopCisJIyBUaGUgQUlYIHBvcnQgb2YgR05VIGxkIGhhcyBhbHdheXMgYXNwaXJlZCB0byBjb21wYXRpYmlsaXR5CisJIyB3aXRoIHRoZSBuYXRpdmUgbGlua2VyLiAgSG93ZXZlciwgYXMgdGhlIHdhcm5pbmcgaW4gdGhlIEdOVSBsZAorCSMgYmxvY2sgc2F5cywgdmVyc2lvbnMgYmVmb3JlIDIuMTkuNSogY291bGRuJ3QgcmVhbGx5IGNyZWF0ZSB3b3JraW5nCisJIyBzaGFyZWQgbGlicmFyaWVzLCByZWdhcmRsZXNzIG9mIHRoZSBpbnRlcmZhY2UgdXNlZC4KKwljYXNlIGAkTEQgLXYgMj4mMWAgaW4KKwkgICpcIFwoR05VXCBCaW51dGlsc1wpXCAyLjE5LjUqKSA7OworCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIDIuWzItOV0qKSA7OworCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIFszLTldKikgOzsKKwkgICopCisJICAgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPXllcworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKikKKwlsdF91c2VfZ251X2xkX2ludGVyZmFjZT15ZXMKKwk7OworICAgIGVzYWMKKyAgZmkKKworICBpZiB0ZXN0ICIkbHRfdXNlX2dudV9sZF9pbnRlcmZhY2UiID0geWVzOyB0aGVuCisgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICB3bGFyYz0nJHt3bH0nCisKKyAgICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQorICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQorICAgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KKyAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKyAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCisgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICBlbHNlCisgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKyAgICBmaQorICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubworICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgorICAgICAgKkdOVVwgZ29sZCopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKKyAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKKyAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCisgICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCisgICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucworICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgIGVzYWMKKworICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXhbMy05XSopCisgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKwlsZF9zaGxpYnM9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuMTksIGlzIHJlcG9ydGVkCisqKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KKyoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQorKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gaW5zdGFsbCBiaW51dGlscworKioqIDIuMjAgb3IgYWJvdmUsIG9yIG1vZGlmeSB5b3VyIFBBVEggc28gdGhhdCBhIG5vbi1HTlUgbGlua2VyIGlzIGZvdW5kLgorKioqIFlvdSB3aWxsIHRoZW4gbmVlZCB0byByZXN0YXJ0IHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuCisKK19MVF9FT0YKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPScnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorCSMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKwkjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCisJYXJjaGl2ZV9jbWRzPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICBlbHNlCisJbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCApIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tLWV4cG9ydC1hbGwtc3ltYm9scycKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCisJIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCWVsc2UKKwkgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCSAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwlmaX4KKwkkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgaGFpa3UqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgICAgICA7OworCisgICAgaW50ZXJpeFszLTldKikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKKyAgICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKyAgICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKKyAgICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKKyAgICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKyAgICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKKyAgICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgorICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIDs7CisKKyAgICBnbnUqIHwgbGludXgqIHwgdHBmKiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgIHRtcF9kaWV0PW5vCisgICAgICBpZiB0ZXN0ICIkaG9zdF9vcyIgPSBsaW51eC1kaWV0bGliYzsgdGhlbgorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBkaWV0XCAqKSB0bXBfZGlldD15ZXM7OwkjIGxpbnV4LWRpZXRsaWJjIHdpdGggc3RhdGljIGxpbmtpbmcgKCFkaWV0LWR5bikKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKyAgICAgIHRoZW4KKwl0bXBfYWRkZmxhZz0KKwl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKKwljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJICA7OworCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisJCQkJCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKKwllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKKwllZmMqLGlhNjQqIHwgaWZvcnQqLGlhNjQqKQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIgb24gaWE2NAorCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljIC1ub2Zvcl9tYWluJyA7OworCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCisJICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OworCWxmOTUqKQkJCQkjIExhaGV5IEZvcnRyYW4gOC4xCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKwkgIHRtcF9zaGFyZWRmbGFnPSctLXNoYXJlZCcgOzsKKwl4bFtjQ10qIHwgYmd4bFtjQ10qIHwgbXBpeGxbY0NdKikgIyBJQk0gWEwgQyA4LjAgb24gUFBDIChkZWFsIHdpdGggeGxmIGJlbG93KQorCSAgdG1wX3NoYXJlZGZsYWc9Jy1xbWtzaHJvYmonCisJICB0bXBfYWRkZmxhZz0gOzsKKwludmNjKikJIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGNvbXBpbGVyX25lZWRzX29iamVjdD15ZXMKKwkgIDs7CisJZXNhYworCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45CisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGNvbXBpbGVyX25lZWRzX29iamVjdD15ZXMKKwkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKKwkqU3VuXCBGKikJCQkjIFN1biBGb3J0cmFuIDguMworCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OworCWVzYWMKKwlhcmNoaXZlX2NtZHM9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisKKyAgICAgICAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgICAgICAgIGZpCisKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCXhsZiogfCBiZ2YqIHwgYmd4bGYqIHwgbXBpeGxmKikKKwkgICMgSUJNIFhMIEZvcnRyYW4gMTAuMSBvbiBQUEMgY2Fubm90IGNyZWF0ZSBzaGFyZWQgbGlicyBpdHNlbGYKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJworCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICBmaQorCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBuZXRic2QqKQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisJd2xhcmM9CisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBpZiAkTEQgLXYgMj4mMSB8ICRHUkVQICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KKwlsZF9zaGxpYnM9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFRoZSByZWxlYXNlcyAyLjguKiBvZiB0aGUgR05VIGxpbmtlciBjYW5ub3QgcmVsaWFibHkKKyoqKiBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTb2xhcmlzIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKyoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuOS4xIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK19MVF9FT0YKKyAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBlbHNlCisJbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xWzAtNV0uKikKKwlsZF9zaGxpYnM9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFJlbGVhc2VzIG9mIHRoZSBHTlUgbGlua2VyIHByaW9yIHRvIDIuMTYuOTEuMC4zIGNhbiBub3QKKyoqKiByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTQ08gc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAorKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi4xNi45MS4wLjMgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKKyoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCisqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKworX0xUX0VPRgorCTs7CisJKikKKwkgICMgRm9yIHNlY3VyaXR5IHJlYXNvbnMsIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBhbHdheXMKKwkgICMgdXNlIGFic29sdXRlIHBhdGhzIGZvciBuYW1pbmcgc2hhcmVkIGxpYnJhcmllcywgYW5kIGV4Y2x1ZGUgdGhlCisJICAjIERUX1JVTlBBVEggdGFnIGZyb20gZXhlY3V0YWJsZXMgYW5kIGxpYnJhcmllcy4gIEJ1dCBkb2luZyBzbworCSAgIyByZXF1aXJlcyB0aGF0IHlvdSBjb21waWxlIGV2ZXJ5dGhpbmcgdHdpY2UsIHdoaWNoIGlzIGEgcGFpbi4KKwkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgIGVsc2UKKwkgICAgbGRfc2hsaWJzPW5vCisJICBmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIHdsYXJjPQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgICopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgIiRsZF9zaGxpYnMiID0gbm87IHRoZW4KKyAgICAgIHJ1bnBhdGhfdmFyPQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0KKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorICAgIGZpCisgIGVsc2UKKyAgICAjIFBPUlRNRSBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBsaW5rZXIgKG5vdCBHTlUgbGQpCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeDMqKQorICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKyAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRMRCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLWJFOiRleHBvcnRfc3ltYm9scyAtVDUxMiAtSDUxMiAtYk06U1JFfiRBUiAkQVJfRkxBR1MgJGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lJworICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKKyAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCisJIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCisJIyBicm9rZW4gY29sbGVjdDIuCisJaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFpeFs0LTldKikKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKwlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9IiIKKyAgICAgIGVsc2UKKwkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKwkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisJIyBBbHNvLCBBSVggbm0gdHJlYXRzIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsCisJIyBkZWZpbmVkIHN5bWJvbHMsIHdoZXJlYXMgR05VIG5tIG1hcmtzIHRoZW0gYXMgIlciLgorCWlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKwkgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpIHx8IChcJCAyID09ICJXIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwllbHNlCisJICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwlmaQorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4WzUtOV0qKQorCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisJICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICBicmVhaworCSAgZmkKKwkgIGRvbmUKKwkgIDs7CisJZXNhYworCisJZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKwlub19lbnRyeV9mbGFnPSctYm5vZW50cnknCisgICAgICBmaQorCisgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKyAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisKKyAgICAgIGFyY2hpdmVfY21kcz0nJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgICAgICBmaWxlX2xpc3Rfc3BlYz0nJHt3bH0tZiwnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKKwkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKKwkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKKwkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKwkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCisJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKwkgIHRoZW4KKwkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorCSAgOgorCSAgZWxzZQorCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorCSAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisJICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisJICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAorCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCisJICBoYXJkY29kZV9taW51c19MPXllcworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KKwkgIGZpCisJICA7OworCWVzYWMKKwlzaGFyZWRfZmxhZz0nLXNoYXJlZCcKKwlpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJworCWZpCisgICAgICBlbHNlCisJIyBub3QgdXNpbmcgZ2NjCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CisJICBzaGFyZWRfZmxhZz0nLUcnCisJZWxzZQorCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJworCSAgZWxzZQorCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJworCSAgZmkKKwlmaQorICAgICAgZmkKKworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1iZXhwYWxsJworICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCisgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgorICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisJIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCisgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCisgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCitsdF9haXhfbGlicGF0aF9zZWQ9JworICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKwkvXjAvIHsKKwkgICAgcy9eMCAgKlwoLipcKSQvXDEvCisJICAgIHAKKwl9CisgICAgfScKK2FpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgoraWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKK2ZpCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICBlbHNlCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Ii16IG5vZGVmcyIKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisJZWxzZQorCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKwkgIyBlbXB0eSBleGVjdXRhYmxlLgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJL14wLyB7CisJICAgIHMvXjAgICpcKC4qXCkkL1wxLworCSAgICBwCisJfQorICAgIH0nCithaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKyAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCitmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKworCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKwkgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwkgIG5vX3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tYmVybm90b2snCisJICBhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWJlcm9rJworCSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorCSAgICAjIFdlIG9ubHkgdXNlIHRoaXMgY29kZSBmb3IgR05VIGxkcyB0aGF0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlLgorCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICBlbHNlCisJICAgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcworCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJGNvbnZlbmllbmNlJworCSAgZmkKKwkgIGFyY2hpdmVfY21kc19uZWVkX2xjPXllcworCSAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKwlmaQorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICBhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJzZGlbNDVdKikKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0tcmR5bmFtaWMKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisgICAgICBsaWJleHQ9bGliCisgICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKyAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKyAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisgICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKyAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKyAgICAgIGZpeF9zcmNmaWxlX3BhdGg9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorCisKKyAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KKyAgaGFyZGNvZGVfZGlyZWN0PW5vCisgIGhhcmRjb2RlX2F1dG9tYXRpYz15ZXMKKyAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAorICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPSAieWVzIjsgdGhlbgorICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSdgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UgJHt3bH0tZm9yY2VfbG9hZCwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCcKKyAgZWxzZQorICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScnCisgIGZpCisgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSIkX2x0X2Rhcl9hbGxvd191bmRlZmluZWQiCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgIGlmb3J0KikgX2x0X2Rhcl9jYW5fc2hhcmVkPXllcyA7OworICAgICAqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9JEdDQyA7OworICBlc2FjCisgIGlmIHRlc3QgIiRfbHRfZGFyX2Nhbl9zaGFyZWQiID0gInllcyI7IHRoZW4KKyAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCisgICAgYXJjaGl2ZV9jbWRzPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJHtfbHRfZHN5bXV0aWx9IgorICAgIG1vZHVsZV9jbWRzPSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kc3ltdXRpbH0iCisgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAke19sdF9kYXJfc2luZ2xlX21vZH0ke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorICAgIG1vZHVsZV9leHBzeW1fY21kcz0ic2VkIC1lICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorCisgIGVsc2UKKyAgbGRfc2hsaWJzPW5vCisgIGZpCisKKyAgICAgIDs7CisKKyAgICBkZ3V4KikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgIGZyZWVic2QxKikKKyAgICAgIGxkX3NobGlicz1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAyLjIuWzAxMl0gYWxsb3dzIHVzIHRvIGluY2x1ZGUgYysrcnQwLm8gdG8gZ2V0IEMrKyBjb25zdHJ1Y3RvcgorICAgICMgc3VwcG9ydC4gIEZ1dHVyZSB2ZXJzaW9ucyBkbyB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCBhbiBleHBsaWNpdCBjKytydDAubworICAgICMgZG9lcyBub3QgYnJlYWsgYW55dGhpbmcsIGFuZCBoZWxwcyBzaWduaWZpY2FudGx5IChhdCB0aGUgY29zdCBvZiBhIGxpdHRsZQorICAgICMgZXh0cmEgc3BhY2UpLgorICAgIGZyZWVic2QyLjIqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC91c3IvbGliL2MrK3J0MC5vJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgICMgVW5mb3J0dW5hdGVseSwgb2xkZXIgdmVyc2lvbnMgb2YgRnJlZUJTRCAyIGRvIG5vdCBoYXZlIHRoaXMgZmVhdHVyZS4KKyAgICBmcmVlYnNkMiopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgIGhwdXg5KikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKworICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKyAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKKyAgICAgIDs7CisKKyAgICBocHV4MTAqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPScrYiAkbGliZGlyJworCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorCWhhcmRjb2RlX2RpcmVjdD15ZXMKKwloYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCisJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJworCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisJaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaHB1eDExKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWVzYWMKKyAgICAgIGVsc2UKKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWlhNjQqKQorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisKKwkgICMgT2xkZXIgdmVyc2lvbnMgb2YgdGhlIDExLjAwIGNvbXBpbGVyIGRvIG5vdCB1bmRlcnN0YW5kIC1iIHlldAorCSAgIyAoSFA5MjQ1My0wMSBBLjExLjAxLjIwIGRvZXNuJ3QsIEhQOTI0NTMtMDEgQi4xMS5YLjM1MTc1LTM1MTc2LkdQIGRvZXMpCisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRDQyB1bmRlcnN0YW5kcyAtYiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkQ0MgdW5kZXJzdGFuZHMgLWIuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9fYitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfX2I9bm8KKyAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICBMREZMQUdTPSIkTERGTEFHUyAtYiIKKyAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgorICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorICAgICAgICRFQ0hPICIkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9fYj15ZXMKKyAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9fYj15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gLXIgY29uZnRlc3QqCisgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX19iIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9fYiIgPiY2OyB9CisKK2lmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9fYiIgPSB4eWVzOyB0aGVuCisgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKK2Vsc2UKKyAgICBhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCitmaQorCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKwloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKworCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCp8aWE2NCopCisJICBoYXJkY29kZV9kaXJlY3Q9bm8KKwkgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKwkgIDs7CisJKikKKwkgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKwkgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKKwkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKKworCSAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCSAgaGFyZGNvZGVfbWludXNfTD15ZXMKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCisgICAgICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworaW50IGZvbyh2b2lkKSB7fQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIGluaGVyaXRfcnBhdGg9eWVzCisgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgICAgOzsKKworICAgIG5ldGJzZCopCisgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICMgYS5vdXQKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgorICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgOzsKKworICAgIG9wZW5ic2QqKQorICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKwloYXJkY29kZV9kaXJlY3Q9eWVzCisJaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworCWhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKKwlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCisJZWxzZQorCSAgY2FzZSAkaG9zdF9vcyBpbgorCSAgIG9wZW5ic2RbMDFdLiogfCBvcGVuYnNkMi5bMC03XSB8IG9wZW5ic2QyLlswLTddLiopCisJICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisJICAgICA7OworCSAgICopCisJICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgICA7OworCSAgZXNhYworCWZpCisgICAgICBlbHNlCisJbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIG9zMiopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgIGFyY2hpdmVfY21kcz0nJEVDSE8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZWNobyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lY2hvICIgU0lOR0xFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVjaG8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgOzsKKworICAgIG9zZjMqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZWxzZQorCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisKKyAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGVsc2UKKwlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBwcmludGYgIiVzXFxuIiAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKwkkQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgJGNvbXBpbGVyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRSTSAkbGliLmV4cCcKKworCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctcnBhdGggJGxpYmRpcicKKyAgICAgIGZpCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJd2xhcmM9JyR7d2x9JworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgIGVsc2UKKwljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKwkqIkNvbXBpbGVycyA1LjAiKikKKwkgIHdsYXJjPScnCisJICBhcmNoaXZlX2NtZHM9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCSAgOzsKKwkqKQorCSAgd2xhcmM9JyR7d2x9JworCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzb2xhcmlzMi5bMC01XSB8IHNvbGFyaXMyLlswLTVdLiopIDs7CisgICAgICAqKQorCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCisJIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAorCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgorCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCisJZWxzZQorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c2VxdWVudDsgdGhlbgorCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KKwkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtRyAke3dsfS1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzdGF0aWMgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgc3lzdjQpCisgICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgorCXNuaSkKKwkgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgaGFyZGNvZGVfZGlyZWN0PXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KKwk7OworCXNpZW1lbnMpCisJICAjIyBMRCBpcyBsZCBpdCBtYWtlcyBhIFBMQU1MSUIKKwkgICMjIENDIGp1c3QgbWFrZXMgYSBHcm9zc01vZHVsZS4KKwkgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIHJlbG9hZF9jbWRzPSckQ0MgLXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKwkgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgICA7OworCW1vdG9yb2xhKQorCSAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBoYXJkY29kZV9kaXJlY3Q9bm8gI01vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQorCTs7CisgICAgICBlc2FjCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgc3lzdjQuMyopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nLUJleHBvcnQnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCWFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCWhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKwlydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorCWhhcmRjb2RlX3J1bnBhdGhfdmFyPXllcworCWxkX3NobGlicz15ZXMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLlswMjRdKikKKyAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScke3dsfS16LHRleHQnCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisgICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisgICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKyAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKyAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorICAgICAgIyBhcyAteiBkZWZzLgorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXosdGV4dCcKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPScke3dsfS16LG5vZGVmcycKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1SLCRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JworICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmV4cG9ydCcKKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIGxkX3NobGlicz1ubworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0IHgkaG9zdF92ZW5kb3IgPSB4c25pOyB0aGVuCisgICAgICBjYXNlICRob3N0IGluCisgICAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyogfCBzeXN2NSopCisJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1CbGFyZ2VkeW5zeW0nCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxkX3NobGlicyIgPiY1CiskYXNfZWNobyAiJGxkX3NobGlicyIgPiY2OyB9Cit0ZXN0ICIkbGRfc2hsaWJzIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKword2l0aF9nbnVfbGQ9JHdpdGhfZ251X2xkCisKKworCisKKworCisKKworCisKKworCisKKworCisjCisjIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/CisjCitjYXNlICJ4JGFyY2hpdmVfY21kc19uZWVkX2xjIiBpbgoreHx4eWVzKQorICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCisgIGFyY2hpdmVfY21kc19uZWVkX2xjPXllcworCisgIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIGNhc2UgJGFyY2hpdmVfY21kcyBpbgorICAgIConficqKQorICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgorICAgICAgOzsKKyAgICAnJENDICcqKQorICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQorICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCisgICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICRSTSBjb25mdGVzdCoKKwllY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworCWlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gMj5jb25mdGVzdC5lcnI7IHRoZW4KKwkgIHNvbmFtZT1jb25mdGVzdAorCSAgbGliPWNvbmZ0ZXN0CisJICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKKwkgIGRlcGxpYnM9CisJICB3bD0kbHRfcHJvZ19jb21waWxlcl93bAorCSAgcGljX2ZsYWc9JGx0X3Byb2dfY29tcGlsZXJfcGljCisJICBjb21waWxlcl9mbGFncz0tdgorCSAgbGlua2VyX2ZsYWdzPS12CisJICB2ZXJzdHJpbmc9CisJICBvdXRwdXRfb2JqZGlyPS4KKwkgIGxpYm5hbWU9Y29uZnRlc3QKKwkgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnCisJICBhbGxvd191bmRlZmluZWRfZmxhZz0KKwkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjFcIiI7IH0gPiY1CisgIChldmFsICRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisJICB0aGVuCisJICAgIGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjPW5vCisJICBlbHNlCisJICAgIGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjPXllcworCSAgZmkKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisJZmkKKwkkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGMiID4mNjsgfQorICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9JGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgOzsKK2VzYWMKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MuLi4gIiA+JjY7IH0KKworaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGRhcndpbiopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8sL0xSLyIgOzsKKyAgICAqKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovIiA7OworICBlc2FjCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlZF9zdHJpcF9lcT0icyw9XChbQS1aYS16XTpcKSxcMSxnIiA7OworICAgICopIGx0X3NlZF9zdHJpcF9lcT0icyw9LywvLGciIDs7CisgIGVzYWMKKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGF3ayAkbHRfYXdrX2FyZyB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgJGx0X3NlZF9zdHJpcF9lcWAKKyAgY2FzZSAkbHRfc2VhcmNoX3BhdGhfc3BlYyBpbgorICAqXDsqKQorICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKKyAgICAjIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBwYXRoIHNlcGFyYXRvciAoaS5lLiAiOiIpIC0gaXQgaXMKKyAgICAjIGFzc3VtZWQgdGhhdCBubyBwYXJ0IG9mIGEgbm9ybWFsIHBhdGhuYW1lIGNvbnRhaW5zICI7IiBidXQgdGhhdCBzaG91bGQKKyAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAncy87LyAvZydgCisgICAgOzsKKyAgKikKKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICA7OworICBlc2FjCisgICMgT2ssIG5vdyB3ZSBoYXZlIHRoZSBwYXRoLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCB3ZSBjYW4gc3RlcCB0aHJvdWdoIGl0CisgICMgYW5kIGFkZCBtdWx0aWxpYiBkaXIgaWYgbmVjZXNzYXJ5LgorICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0KKyAgbHRfbXVsdGlfb3NfZGlyPWAkQ0MgJENQUEZMQUdTICRDRkxBR1MgJExERkxBR1MgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeSAyPi9kZXYvbnVsbGAKKyAgZm9yIGx0X3N5c19wYXRoIGluICRsdF9zZWFyY2hfcGF0aF9zcGVjOyBkbworICAgIGlmIHRlc3QgLWQgIiRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIjsgdGhlbgorICAgICAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgvJGx0X211bHRpX29zX2RpciIKKyAgICBlbHNlCisgICAgICB0ZXN0IC1kICIkbHRfc3lzX3BhdGgiICYmIFwKKwlsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aCIKKyAgICBmaQorICBkb25lCisgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMiIHwgYXdrICcKK0JFR0lOIHtSUz0iICI7IEZTPSIvfFxuIjt9IHsKKyAgbHRfZm9vPSIiOworICBsdF9jb3VudD0wOworICBmb3IgKGx0X2kgPSBORjsgbHRfaSA+IDA7IGx0X2ktLSkgeworICAgIGlmICgkbHRfaSAhPSAiIiAmJiAkbHRfaSAhPSAiLiIpIHsKKyAgICAgIGlmICgkbHRfaSA9PSAiLi4iKSB7CisgICAgICAgIGx0X2NvdW50Kys7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAobHRfY291bnQgPT0gMCkgeworICAgICAgICAgIGx0X2Zvbz0iLyIgJGx0X2kgbHRfZm9vOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGx0X2NvdW50LS07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgaWYgKGx0X2ZvbyAhPSAiIikgeyBsdF9mcmVxW2x0X2Zvb10rKzsgfQorICBpZiAobHRfZnJlcVtsdF9mb29dID09IDEpIHsgcHJpbnQgbHRfZm9vOyB9Cit9J2AKKyAgIyBBV0sgcHJvZ3JhbSBhYm92ZSBlcnJvbmVvdXNseSBwcmVwZW5kcyAnLycgdG8gQzovZG9zL3BhdGhzCisgICMgZm9yIHRoZXNlIGhvc3RzLgorICBjYXNlICRob3N0X29zIGluCisgICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHxcCisgICAgICAkU0VEICdzLC9cKFtBLVphLXpdOlwpLFwxLGcnYCA7OworICBlc2FjCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRsdF9OTDJTUGAKK2Vsc2UKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorZmkKK2xpYnJhcnlfbmFtZXNfc3BlYz0KK2xpYm5hbWVfc3BlYz0nbGliJG5hbWUnCitzb25hbWVfc3BlYz0KK3NocmV4dF9jbWRzPSIuc28iCitwb3N0aW5zdGFsbF9jbWRzPQorcG9zdHVuaW5zdGFsbF9jbWRzPQorZmluaXNoX2NtZHM9CitmaW5pc2hfZXZhbD0KK3NobGlicGF0aF92YXI9CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgordmVyc2lvbl90eXBlPW5vbmUKK2R5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgorbmVlZF9saWJfcHJlZml4PXVua25vd24KK2hhcmRjb2RlX2ludG9fbGlicz1ubworCisjIHdoZW4geW91IHNldCBuZWVkX3ZlcnNpb24gdG8gbm8sIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBjYXVzZSAtc2V0X3ZlcnNpb24KKyMgZmxhZ3MgdG8gYmUgbGVmdCB3aXRob3V0IGFyZ3VtZW50cworbmVlZF92ZXJzaW9uPXVua25vd24KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUuYScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisKKyAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgorICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICA7OworCithaXhbNC05XSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBlbHNlCisgICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQorICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKKyAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCisgICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKyAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDQgfCBhaXg0LlswMV0gfCBhaXg0LlswMV0uKikKKyAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCisJICAgZWNobyAnIHllcyAnCisJICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCAkR1JFUCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwk6CisgICAgICBlbHNlCisJY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKKyAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCisgICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KKyAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbworICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKKyAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIGVsc2UKKyAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCisgICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJworICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBmaQorICAgIHNobGlicGF0aF92YXI9TElCUEFUSAorICBmaQorICA7OworCithbWlnYW9zKikKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgcG93ZXJwYykKKyAgICAjIFNpbmNlIEp1bHkgMjAwNyBBbWlnYU9TNCBvZmZpY2lhbGx5IHN1cHBvcnRzIC5zbyBsaWJyYXJpZXMuCisgICAgIyBXaGVuIGNvbXBpbGluZyB0aGUgZXhlY3V0YWJsZSwgYWRkIC11c2UtZHlubGQgLUxzb2JqczogdG8gdGhlIGNvbXBpbGVsaW5lLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIDs7CisgIG02OGspCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKKyAgICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgorICAgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gZnVuY19lY2hvX2FsbCAiJGxpYiIgfCAkU0VEICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICAgIDs7CisgIGVzYWMKKyAgOzsKKworYmVvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgOzsKKworYnNkaVs0NV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAorICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKKyAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCisgIDs7CisKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgdmVyc2lvbl90eXBlPXdpbmRvd3MKKyAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIG5lZWRfdmVyc2lvbj1ubworICBuZWVkX2xpYl9wcmVmaXg9bm8KKworICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KKyAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBpZiB0ZXN0IC1uICdcJyckc3RyaXBtZSdcJycgJiYgdGVzdCAtbiAnXCcnJHN0cmlwbGliJ1wnJzsgdGhlbgorICAgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKKyAgICAgIGZpJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRSTSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgY3lnd2luKikKKyAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9saWIvdzMyYXBpIgorICAgICAgOzsKKyAgICBtaW5ndyogfCBjZWdjYyopCisgICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAorICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgOzsKKyAgICBwdzMyKikKKyAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKworICAqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworICAgIDs7CisgIGVzYWMKKyAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgIHNobGlicGF0aF92YXI9UEFUSAorICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKKyAgdmVyc2lvbl90eXBlPWRhcndpbgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICisgIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJworCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xvY2FsL2xpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCisgIDs7CisKK2RndXgqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKK2ZyZWVic2QxKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3CisgICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgorICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgorICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAorICBlbHNlCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGZyZWVic2RbMTIzXSopIG9iamZvcm1hdD1hb3V0IDs7CisgICAgKikgb2JqZm9ybWF0PWVsZiA7OworICAgIGVzYWMKKyAgZmkKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAorICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKyAgICBmcmVlYnNkLWVsZiopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIGZyZWVic2QtKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgICAgbmVlZF92ZXJzaW9uPXllcworICAgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X29zIGluCisgIGZyZWVic2QyKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuWzAxXSogfCBmcmVlYnNkZWxmMy5bMDFdKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGZyZWVic2QzLlsyLTldKiB8IGZyZWVic2RlbGYzLlsyLTldKiB8IFwKKyAgZnJlZWJzZDQuWzAtNV0gfCBmcmVlYnNkZWxmNC5bMC01XSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgKikgIyBmcm9tIDQuNiBvbiwgYW5kIERyYWdvbkZseQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZXNhYworICA7OworCitnbnUqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaGFpa3UqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgcnVudGltZV9sb2FkZXIiCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bworICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbycKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGlmIHRlc3QgIlgkSFBVWF9JQTY0X01PREUiID0gWDMyOyB0aGVuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCisgICAgZWxzZQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgorICAgIGZpCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgIGhwcGEqNjQqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICA7OworICAqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgOzsKKyAgZXNhYworICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NSwgLi4uCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJworICAjIG9yIGZhaWxzIG91dHJpZ2h0LCBzbyBvdmVycmlkZSBhdG9taWNhbGx5OgorICBpbnN0YWxsX292ZXJyaWRlX21vZGU9NTU1CisgIDs7CisKK2ludGVyaXhbMy05XSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGR5bmFtaWNfbGlua2VyPSdJbnRlcml4IDMueCBsZC5zby4xIChQRSwgbGlrZSBFTEYpJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICBjYXNlICRob3N0X29zIGluCisgICAgbm9uc3RvcHV4KikgdmVyc2lvbl90eXBlPW5vbnN0b3B1eCA7OworICAgICopCisJaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorCQl2ZXJzaW9uX3R5cGU9bGludXgKKwllbHNlCisJCXZlcnNpb25fdHlwZT1pcml4CisJZmkgOzsKKyAgZXNhYworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBpcml4NSogfCBub25zdG9wdXgqKQorICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KKyAgICA7OworICAqKQorICAgIGNhc2UgJExEIGluICMgbGlidG9vbC5tNCB3aWxsIGFkZCBvbmUgb2YgdGhlc2Ugc3dpdGNoZXMgdG8gTEQKKyAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKQorICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz0zMi1iaXQ7OworICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpCisgICAgICBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgbGlibWFnaWM9TjMyOzsKKyAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikKKyAgICAgIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IGxpYm1hZ2ljPTY0LWJpdDs7CisgICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZJHtzaGxpYnN1ZmZ9X1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCisjIE5vIHNoYXJlZCBsaWIgc3VwcG9ydCBmb3IgTGludXggb2xkbGQsIGFvdXQsIG9yIGNvZmYuCitsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCisjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCitsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKworICAjIFNvbWUgYmludXRpbHMgbGQgYXJlIHBhdGNoZWQgdG8gc2V0IERUX1JVTlBBVEgKKyAgaWYgdGVzdCAiJHtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgICBzYXZlX2xpYmRpcj0kbGliZGlyCisgICAgZXZhbCAibGliZGlyPS9mb287IHdsPVwiJGx0X3Byb2dfY29tcGlsZXJfd2xcIjsgXAorCSBMREZMQUdTPVwiXCRMREZMQUdTICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGlmICAoJE9CSkRVTVAgLXAgY29uZnRlc3QkYWNfZXhlZXh0KSAyPi9kZXYvbnVsbCB8IGdyZXAgIlJVTlBBVEguKiRsaWJkaXIiID4vZGV2L251bGw7IHRoZW4gOgorICBsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCitmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCisgICAgbGliZGlyPSRzYXZlX2xpYmRpcgorCitmaQorCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCisKKyAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCisgICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAorICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisKKyAgIyBBcHBlbmQgbGQuc28uY29uZiBjb250ZW50cyB0byB0aGUgc2VhcmNoIHBhdGgKKyAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKyAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcJDIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFwkMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsJIF0qaHdjYXBbCSBdL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7cy8iLy9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliICRsdF9sZF9leHRyYSIKKyAgZmkKKworICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KKyAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQorICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKKyAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKKyAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCisgICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgorICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJworICA7OworCituZXRic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCisgIGVsc2UKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIGZpCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCituZXdzb3M2KQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgOzsKKworKm50byogfCAqcW54KikKKyAgdmVyc2lvbl90eXBlPXFueAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBkeW5hbWljX2xpbmtlcj0nbGRxbnguc28nCisgIDs7CisKK29wZW5ic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5CU0QgKDMuMyBhdCBsZWFzdCkgKmRvKiBuZWVkIHZlcnNpb25lZCBsaWJzLgorICBjYXNlICRob3N0X29zIGluCisgICAgb3BlbmJzZDMuMyB8IG9wZW5ic2QzLjMuKikJbmVlZF92ZXJzaW9uPXllcyA7OworICAgICopCQkJCW5lZWRfdmVyc2lvbj1ubyAgOzsKKyAgZXNhYworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgb3BlbmJzZDIuWzg5XSB8IG9wZW5ic2QyLls4OV0uKikKKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKwk7OworICAgICAgKikKKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisJOzsKKyAgICAgIGVzYWMKKyAgZWxzZQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgZmkKKyAgOzsKKworb3MyKikKKyAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fSAkbGlibmFtZS5hJworICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorICA7OworCitvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgIHZlcnNpb25fdHlwZT1vc2YKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCisgIDs7CisKK3Jkb3MqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCitzb2xhcmlzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJworICA7OworCitzdW5vczQqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgbmVlZF9saWJfcHJlZml4PW5vCisgIGZpCisgIG5lZWRfdmVyc2lvbj15ZXMKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICAgIHNuaSkKKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgICAgOzsKKyAgICBzaWVtZW5zKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIG1vdG9yb2xhKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKKyAgICAgIDs7CisgIGVzYWMKKyAgOzsKKworc3lzdjQqTVAqKQorICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCisgICAgdmVyc2lvbl90eXBlPWxpbnV4CisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvcicKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBmaQorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtZWxmCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCisgIGVsc2UKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzY28zLjJ2NSopCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgorCTs7CisgICAgZXNhYworICBmaQorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCisgIDs7CisKK3RwZiopCisgICMgVFBGIGlzIGEgY3Jvc3MtdGFyZ2V0IG9ubHkuICBQcmVmZXJyZWQgY3Jvc3MtaG9zdCA9IEdOVS9MaW51eC4KKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK3V0czQqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKKyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7Citlc2FjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGR5bmFtaWNfbGlua2VyIiA+JjUKKyRhc19lY2hvICIkZHluYW1pY19saW5rZXIiID4mNjsgfQordGVzdCAiJGR5bmFtaWNfbGlua2VyIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKwordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCitmaQorCitpZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCitmaQoraWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIgorZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICIgPiY2OyB9CitoYXJkY29kZV9hY3Rpb249CitpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfHwKKyAgIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgfHwKKyAgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljIiA9ICJYeWVzIiA7IHRoZW4KKworICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RlbnQgZGlyZWN0b3JpZXMuCisgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiICE9IG5vICYmCisgICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKKyAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQorICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCisgICAgICMjIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICkiICE9IG5vICYmCisgICAgIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiAhPSBubzsgdGhlbgorICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCisgICAgaGFyZGNvZGVfYWN0aW9uPXJlbGluaworICBlbHNlCisgICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KKyAgICBoYXJkY29kZV9hY3Rpb249aW1tZWRpYXRlCisgIGZpCitlbHNlCisgICMgV2UgY2Fubm90IGhhcmRjb2RlIGFueXRoaW5nLCBvciBlbHNlIHdlIGNhbiBvbmx5IGhhcmRjb2RlIGV4aXN0aW5nCisgICMgZGlyZWN0b3JpZXMuCisgIGhhcmRjb2RlX2FjdGlvbj11bnN1cHBvcnRlZAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGFyZGNvZGVfYWN0aW9uIiA+JjUKKyRhc19lY2hvICIkaGFyZGNvZGVfYWN0aW9uIiA+JjY7IH0KKworaWYgdGVzdCAiJGhhcmRjb2RlX2FjdGlvbiIgPSByZWxpbmsgfHwKKyAgIHRlc3QgIiRpbmhlcml0X3JwYXRoIiA9IHllczsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAorICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSBubzsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcworZmkKKworCisKKworCisKKyAgaWYgdGVzdCAieCRlbmFibGVfZGxvcGVuIiAhPSB4eWVzOyB0aGVuCisgIGVuYWJsZV9kbG9wZW49dW5rbm93bgorICBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93bgorICBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24KK2Vsc2UKKyAgbHRfY3ZfZGxvcGVuPW5vCisgIGx0X2N2X2Rsb3Blbl9saWJzPQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYmVvcyopCisgICAgbHRfY3ZfZGxvcGVuPSJsb2FkX2FkZF9vbiIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKKyAgICA7OworCisgIG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgIGx0X2N2X2Rsb3Blbj0iTG9hZExpYnJhcnkiCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgOzsKKworICBjeWd3aW4qKQorICAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIDs7CisKKyAgZGFyd2luKikKKyAgIyBpZiBsaWJkbCBpcyBpbnN0YWxsZWQgd2UgbmVlZCB0byBsaW5rIGFnYWluc3QgaXQKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2RsX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sZGwgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRsb3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRsb3BlbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfZGxfZGxvcGVuPXllcworZWxzZQorICBhY19jdl9saWJfZGxfZGxvcGVuPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPSB4IiJ5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiCitlbHNlCisKKyAgICBsdF9jdl9kbG9wZW49ImR5bGQiCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCisKK2ZpCisKKyAgICA7OworCisgICopCisgICAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic2hsX2xvYWQiICJhY19jdl9mdW5jX3NobF9sb2FkIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3NobF9sb2FkIiA9IHgiInllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNobF9sb2FkIGluIC1sZGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfZGxkX3NobF9sb2FkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkbGQgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHNobF9sb2FkICgpOworaW50CittYWluICgpCit7CityZXR1cm4gc2hsX2xvYWQgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2RsZF9zaGxfbG9hZD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2RsZF9zaGxfbG9hZD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID0geCIieWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIgorZWxzZQorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJkbG9wZW4iICJhY19jdl9mdW5jX2Rsb3BlbiIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19kbG9wZW4iID0geCIieWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfZGxfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkbCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGxvcGVuICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZGxvcGVuICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCitlbHNlCisgIGFjX2N2X2xpYl9kbF9kbG9wZW49bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxvcGVuIiA9IHgiInllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCIKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sc3ZsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sc3ZsZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfc3ZsZF9kbG9wZW4rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHN2bGQgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRsb3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRsb3BlbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfc3ZsZF9kbG9wZW49eWVzCitlbHNlCisgIGFjX2N2X2xpYl9zdmxkX2Rsb3Blbj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID0geCIieWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbHN2bGQiCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbGRfbGluayBpbiAtbGRsZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfZGxkX2RsZF9saW5rK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkbGQgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRsZF9saW5rICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZGxkX2xpbmsgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2RsZF9kbGRfbGluaz15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2RsZF9kbGRfbGluaz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID0geCIieWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPSJkbGRfbGluayIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIgorZmkKKworCitmaQorCisKK2ZpCisKKworZmkKKworCitmaQorCisKK2ZpCisKKyAgICA7OworICBlc2FjCisKKyAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW4iICE9IHhubzsgdGhlbgorICAgIGVuYWJsZV9kbG9wZW49eWVzCisgIGVsc2UKKyAgICBlbmFibGVfZGxvcGVuPW5vCisgIGZpCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuIGluCisgIGRsb3BlbikKKyAgICBzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgdGVzdCAieCRhY19jdl9oZWFkZXJfZGxmY25faCIgPSB4eWVzICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURIQVZFX0RMRkNOX0giCisKKyAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKKworICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgTElCUz0iJGx0X2N2X2Rsb3Blbl9saWJzICRMSUJTIgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZi4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9kbG9wZW5fc2VsZitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIAkgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuX3NlbGY9Y3Jvc3MKK2Vsc2UKKyAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZiBIQVZFX0RMRkNOX0gKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZkZWYgUlRMRF9HTE9CQUwKKyMgIGRlZmluZSBMVF9ETEdMT0JBTAkJUlRMRF9HTE9CQUwKKyNlbHNlCisjICBpZmRlZiBETF9HTE9CQUwKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQlETF9HTE9CQUwKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQkwCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdlIG1heSBoYXZlIHRvIGRlZmluZSBMVF9ETExBWllfT1JfTk9XIGluIHRoZSBjb21tYW5kIGxpbmUgaWYgd2UKKyAgIGZpbmQgb3V0IGl0IGRvZXMgbm90IHdvcmsgaW4gc29tZSBwbGF0Zm9ybS4gKi8KKyNpZm5kZWYgTFRfRExMQVpZX09SX05PVworIyAgaWZkZWYgUlRMRF9MQVpZCisjICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlSVExEX0xBWlkKKyMgIGVsc2UKKyMgICAgaWZkZWYgRExfTEFaWQorIyAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlETF9MQVpZCisjICAgIGVsc2UKKyMgICAgICBpZmRlZiBSVExEX05PVworIyAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJUlRMRF9OT1cKKyMgICAgICBlbHNlCisjICAgICAgICBpZmRlZiBETF9OT1cKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJRExfTk9XCisjICAgICAgICBlbHNlCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCTAKKyMgICAgICAgIGVuZGlmCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCit2b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworI2VuZGlmCisKK3ZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQoraW50IG1haW4gKCkKK3sKKyAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CisgIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOworCisgIGlmIChzZWxmKQorICAgIHsKKyAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOworICAgICAgZWxzZQorICAgICAgICB7CisJICBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSAgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7CisgICAgICAgICAgZWxzZSBwdXRzIChkbGVycm9yICgpKTsKKwl9CisgICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KKyAgICB9CisgIGVsc2UKKyAgICBwdXRzIChkbGVycm9yICgpKTsKKworICByZXR1cm4gc3RhdHVzOworfQorX0xUX0VPRgorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KKyAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JjUgMj4vZGV2L251bGwKKyAgICBsdF9zdGF0dXM9JD8KKyAgICBjYXNlIHgkbHRfc3RhdHVzIGluCisgICAgICB4JGx0X2Rsbm9fdXNjb3JlKSBsdF9jdl9kbG9wZW5fc2VsZj15ZXMgOzsKKyAgICAgIHgkbHRfZGxuZWVkX3VzY29yZSkgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzIDs7CisgICAgICB4JGx0X2RsdW5rbm93bnx4KikgbHRfY3ZfZGxvcGVuX3NlbGY9bm8gOzsKKyAgICBlc2FjCisgIGVsc2UgOgorICAgICMgY29tcGlsYXRpb24gZmFpbGVkCisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8KKyAgZmkKK2ZpCitybSAtZnIgY29uZnRlc3QqCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGYiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9kbG9wZW5fc2VsZiIgPiY2OyB9CisKKyAgICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3Blbl9zZWxmIiA9IHh5ZXM7IHRoZW4KKyAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNcIgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZi4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAJICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1jcm9zcworZWxzZQorICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisjbGluZSAkTElORU5PICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2lmIEhBVkVfRExGQ05fSAorI2luY2x1ZGUgPGRsZmNuLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZmRlZiBSVExEX0dMT0JBTAorIyAgZGVmaW5lIExUX0RMR0xPQkFMCQlSVExEX0dMT0JBTAorI2Vsc2UKKyMgIGlmZGVmIERMX0dMT0JBTAorIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCURMX0dMT0JBTAorIyAgZWxzZQorIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCTAKKyMgIGVuZGlmCisjZW5kaWYKKworLyogV2UgbWF5IGhhdmUgdG8gZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cgaW4gdGhlIGNvbW1hbmQgbGluZSBpZiB3ZQorICAgZmluZCBvdXQgaXQgZG9lcyBub3Qgd29yayBpbiBzb21lIHBsYXRmb3JtLiAqLworI2lmbmRlZiBMVF9ETExBWllfT1JfTk9XCisjICBpZmRlZiBSVExEX0xBWlkKKyMgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCVJUTERfTEFaWQorIyAgZWxzZQorIyAgICBpZmRlZiBETF9MQVpZCisjICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCURMX0xBWlkKKyMgICAgZWxzZQorIyAgICAgIGlmZGVmIFJUTERfTk9XCisjICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlSVExEX05PVworIyAgICAgIGVsc2UKKyMgICAgICAgIGlmZGVmIERMX05PVworIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlETF9OT1cKKyMgICAgICAgIGVsc2UKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJMAorIyAgICAgICAgZW5kaWYKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKK3ZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisjZW5kaWYKKwordm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CitpbnQgbWFpbiAoKQoreworICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKKyAgaW50IHN0YXR1cyA9ICRsdF9kbHVua25vd247CisKKyAgaWYgKHNlbGYpCisgICAgeworICAgICAgaWYgKGRsc3ltIChzZWxmLCJmbm9yZCIpKSAgICAgICBzdGF0dXMgPSAkbHRfZGxub191c2NvcmU7CisgICAgICBlbHNlCisgICAgICAgIHsKKwkgIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpICBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKKyAgICAgICAgICBlbHNlIHB1dHMgKGRsZXJyb3IgKCkpOworCX0KKyAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLworICAgIH0KKyAgZWxzZQorICAgIHB1dHMgKGRsZXJyb3IgKCkpOworCisgIHJldHVybiBzdGF0dXM7Cit9CitfTFRfRU9GCisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mNSAyPi9kZXYvbnVsbAorICAgIGx0X3N0YXR1cz0kPworICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KKyAgICAgIHgkbHRfZGxub191c2NvcmUpIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMgOzsKKyAgICAgIHgkbHRfZGxuZWVkX3VzY29yZSkgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcyA7OworICAgICAgeCRsdF9kbHVua25vd258eCopIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1ubyA7OworICAgIGVzYWMKKyAgZWxzZSA6CisgICAgIyBjb21waWxhdGlvbiBmYWlsZWQKKyAgICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9bm8KKyAgZmkKK2ZpCitybSAtZnIgY29uZnRlc3QqCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjY7IH0KKyAgICBmaQorCisgICAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgorICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgICAgTElCUz0iJHNhdmVfTElCUyIKKyAgICA7OworICBlc2FjCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGYgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGY9JGx0X2N2X2Rsb3Blbl9zZWxmIDs7CisgICopIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duIDs7CisgIGVzYWMKKworICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgOzsKKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duIDs7CisgIGVzYWMKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworc3RyaXBsaWI9CitvbGRfc3RyaXBsaWI9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgLW4gIiRTVFJJUCIgJiYgJFNUUklQIC1WIDI+JjEgfCAkR1JFUCAiR05VIHN0cmlwIiA+L2Rldi9udWxsOyB0aGVuCisgIHRlc3QgLXogIiRvbGRfc3RyaXBsaWIiICYmIG9sZF9zdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtZGVidWciCisgIHRlc3QgLXogIiRzdHJpcGxpYiIgJiYgc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLXVubmVlZGVkIgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZWxzZQorIyBGSVhNRSAtIGluc2VydCBzb21lIHJlYWwgdGVzdHMsIGhvc3Rfb3MgaXNuJ3QgcmVhbGx5IGdvb2QgZW5vdWdoCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZGFyd2luKikKKyAgICBpZiB0ZXN0IC1uICIkU1RSSVAiIDsgdGhlbgorICAgICAgc3RyaXBsaWI9IiRTVFJJUCAteCIKKyAgICAgIG9sZF9zdHJpcGxpYj0iJFNUUklQIC1TIgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBmaQorICAgIDs7CisgICopCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgOzsKKyAgZXNhYworZmkKKworCisKKworCisKKworCisKKworCisKKyAgIyBSZXBvcnQgd2hpY2ggbGlicmFyeSB0eXBlcyB3aWxsIGFjdHVhbGx5IGJlIGJ1aWx0CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGNhbl9idWlsZF9zaGFyZWQiID4mNQorJGFzX2VjaG8gIiRjYW5fYnVpbGRfc2hhcmVkIiA+JjY7IH0KKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXgzKikKKyAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgICAgZmkKKyAgICA7OworCisgIGFpeFs0LTldKikKKyAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCisgICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgIGZpCisgICAgOzsKKyAgZXNhYworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGVuYWJsZV9zaGFyZWQiID4mNQorJGFzX2VjaG8gIiRlbmFibGVfc2hhcmVkIiA+JjY7IH0KKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCisgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGVuYWJsZV9zdGF0aWMiID4mNQorJGFzX2VjaG8gIiRlbmFibGVfc3RhdGljIiA+JjY7IH0KKworCisKKworZmkKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworQ0M9IiRsdF9zYXZlX0NDIgorCisKKworCisKKworCisKKworCisKKworCisgICAgICAgIGFjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBsaWJ0b29sIgorCisKKworCisjIE9ubHkgZXhwYW5kIG9uY2U6CisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGljaCBleHRlbnNpb24gaXMgdXNlZCBmb3IgcnVudGltZSBsb2FkYWJsZSBtb2R1bGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoaWNoIGV4dGVuc2lvbiBpcyB1c2VkIGZvciBydW50aW1lIGxvYWRhYmxlIG1vZHVsZXMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bGlibHRkbF9jdl9zaGxpYmV4dCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKK21vZHVsZT15ZXMKK2V2YWwgbGlibHRkbF9jdl9zaGxpYmV4dD0kc2hyZXh0X2NtZHMKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGlibHRkbF9jdl9zaGxpYmV4dCIgPiY1CiskYXNfZWNobyAiJGxpYmx0ZGxfY3Zfc2hsaWJleHQiID4mNjsgfQoraWYgdGVzdCAtbiAiJGxpYmx0ZGxfY3Zfc2hsaWJleHQiOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTFRfTU9EVUxFX0VYVCAiJGxpYmx0ZGxfY3Zfc2hsaWJleHQiCitfQUNFT0YKKworZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGljaCB2YXJpYWJsZSBzcGVjaWZpZXMgcnVuLXRpbWUgbW9kdWxlIHNlYXJjaCBwYXRoIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoaWNoIHZhcmlhYmxlIHNwZWNpZmllcyBydW4tdGltZSBtb2R1bGUgc2VhcmNoIHBhdGguLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfbW9kdWxlX3BhdGhfdmFyK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfbW9kdWxlX3BhdGhfdmFyPSIkc2hsaWJwYXRoX3ZhciIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X21vZHVsZV9wYXRoX3ZhciIgPiY1CiskYXNfZWNobyAiJGx0X2N2X21vZHVsZV9wYXRoX3ZhciIgPiY2OyB9CitpZiB0ZXN0IC1uICIkbHRfY3ZfbW9kdWxlX3BhdGhfdmFyIjsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIExUX01PRFVMRV9QQVRIX1ZBUiAiJGx0X2N2X21vZHVsZV9wYXRoX3ZhciIKK19BQ0VPRgorCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB0aGUgZGVmYXVsdCBsaWJyYXJ5IHNlYXJjaCBwYXRoIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB0aGUgZGVmYXVsdCBsaWJyYXJ5IHNlYXJjaCBwYXRoLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3N5c19kbHNlYXJjaF9wYXRoK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3Zfc3lzX2Rsc2VhcmNoX3BhdGg9IiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3N5c19kbHNlYXJjaF9wYXRoIiA+JjUKKyRhc19lY2hvICIkbHRfY3Zfc3lzX2Rsc2VhcmNoX3BhdGgiID4mNjsgfQoraWYgdGVzdCAtbiAiJGx0X2N2X3N5c19kbHNlYXJjaF9wYXRoIjsgdGhlbgorICBzeXNfZGxzZWFyY2hfcGF0aD0KKyAgZm9yIGRpciBpbiAkbHRfY3Zfc3lzX2Rsc2VhcmNoX3BhdGg7IGRvCisgICAgaWYgdGVzdCAteiAiJHN5c19kbHNlYXJjaF9wYXRoIjsgdGhlbgorICAgICAgc3lzX2Rsc2VhcmNoX3BhdGg9IiRkaXIiCisgICAgZWxzZQorICAgICAgc3lzX2Rsc2VhcmNoX3BhdGg9IiRzeXNfZGxzZWFyY2hfcGF0aCRQQVRIX1NFUEFSQVRPUiRkaXIiCisgICAgZmkKKyAgZG9uZQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIExUX0RMU0VBUkNIX1BBVEggIiRzeXNfZGxzZWFyY2hfcGF0aCIKK19BQ0VPRgorCitmaQorCisKK0xUX0RMTE9BREVSUz0KKworCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKworTElCQUREX0RMT1BFTj0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBkbG9wZW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBkbG9wZW4uLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3Zfc2VhcmNoX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRsb3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRsb3BlbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorZm9yIGFjX2xpYiBpbiAnJyBkbDsgZG8KKyAgaWYgdGVzdCAteiAiJGFjX2xpYiI7IHRoZW4KKyAgICBhY19yZXM9Im5vbmUgcmVxdWlyZWQiCisgIGVsc2UKKyAgICBhY19yZXM9LWwkYWNfbGliCisgICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorICBmaQorICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3NlYXJjaF9kbG9wZW49JGFjX3JlcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBpZiB0ZXN0ICIke2FjX2N2X3NlYXJjaF9kbG9wZW4rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBicmVhaworZmkKK2RvbmUKK2lmIHRlc3QgIiR7YWNfY3Zfc2VhcmNoX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3Zfc2VhcmNoX2Rsb3Blbj1ubworZmkKK3JtIGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX2Rsb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NlYXJjaF9kbG9wZW4iID4mNjsgfQorYWNfcmVzPSRhY19jdl9zZWFyY2hfZGxvcGVuCitpZiB0ZXN0ICIkYWNfcmVzIiAhPSBubzsgdGhlbiA6CisgIHRlc3QgIiRhY19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTElCREwgMSIgPj5jb25mZGVmcy5oCisKKwlpZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX2Rsb3BlbiIgIT0gIm5vbmUgcmVxdWlyZWQiIDsgdGhlbgorCSAgTElCQUREX0RMT1BFTj0iLWxkbCIKKwlmaQorCWxpYmx0ZGxfY3ZfbGliX2RsX2Rsb3Blbj0ieWVzIgorCUxUX0RMTE9BREVSUz0iJExUX0RMTE9BREVSUyAke2x0X2Rsb3Blbl9kaXIrJGx0X2Rsb3Blbl9kaXIvfWRsb3Blbi5sYSIKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmIEhBVkVfRExGQ05fSAorIyAgaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK2Rsb3BlbigwLCAwKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xJQkRMIDEiID4+Y29uZmRlZnMuaAorCisJICAgIGxpYmx0ZGxfY3ZfZnVuY19kbG9wZW49InllcyIKKwkgICAgTFRfRExMT0FERVJTPSIkTFRfRExMT0FERVJTICR7bHRfZGxvcGVuX2RpciskbHRfZGxvcGVuX2Rpci99ZGxvcGVuLmxhIgorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9zdmxkX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sc3ZsZCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGxvcGVuICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZGxvcGVuICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9zdmxkX2Rsb3Blbj15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3N2bGRfZGxvcGVuPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPSB4IiJ5ZXM7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xJQkRMIDEiID4+Y29uZmRlZnMuaAorCisJICAgICAgICBMSUJBRERfRExPUEVOPSItbHN2bGQiIGxpYmx0ZGxfY3ZfZnVuY19kbG9wZW49InllcyIKKwkJTFRfRExMT0FERVJTPSIkTFRfRExMT0FERVJTICR7bHRfZGxvcGVuX2RpciskbHRfZGxvcGVuX2Rpci99ZGxvcGVuLmxhIgorZmkKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCitpZiB0ZXN0IHgiJGxpYmx0ZGxfY3ZfZnVuY19kbG9wZW4iID0geHllcyB8fCB0ZXN0IHgiJGxpYmx0ZGxfY3ZfbGliX2RsX2Rsb3BlbiIgPSB4eWVzCit0aGVuCisgIGx0X3NhdmVfTElCUz0iJExJQlMiCisgIExJQlM9IiRMSUJTICRMSUJBRERfRExPUEVOIgorICBmb3IgYWNfZnVuYyBpbiBkbGVycm9yCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImRsZXJyb3IiICJhY19jdl9mdW5jX2RsZXJyb3IiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZGxlcnJvciIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfRExFUlJPUiAxCitfQUNFT0YKKworZmkKK2RvbmUKKworICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorZmkKKworCitMSUJBRERfU0hMX0xPQUQ9CithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzaGxfbG9hZCIgImFjX2N2X2Z1bmNfc2hsX2xvYWQiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc2hsX2xvYWQiID0geCIieWVzOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TSExfTE9BRCAxIiA+PmNvbmZkZWZzLmgKKworCUxUX0RMTE9BREVSUz0iJExUX0RMTE9BREVSUyAke2x0X2Rsb3Blbl9kaXIrJGx0X2Rsb3Blbl9kaXIvfXNobF9sb2FkLmxhIgorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2RsZF9zaGxfbG9hZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sZGxkICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBzaGxfbG9hZCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHNobF9sb2FkICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA9IHgiInllczsgdGhlbiA6CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU0hMX0xPQUQgMSIgPj5jb25mZGVmcy5oCisKKwkgICAgTFRfRExMT0FERVJTPSIkTFRfRExMT0FERVJTICR7bHRfZGxvcGVuX2RpciskbHRfZGxvcGVuX2Rpci99c2hsX2xvYWQubGEiCisJICAgIExJQkFERF9TSExfTE9BRD0iLWxkbGQiCitmaQorCitmaQorCisKKworY2FzZSAkaG9zdF9vcyBpbgorZGFyd2luWzE1NjddLiopCisjIFdlIG9ubHkgd2FudCB0aGlzIGZvciBwcmUtTWFjIE9TIFggMTAuNC4KKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiX2R5bGRfZnVuY19sb29rdXAiICJhY19jdl9mdW5jX19keWxkX2Z1bmNfbG9va3VwIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX19keWxkX2Z1bmNfbG9va3VwIiA9IHgiInllczsgdGhlbiA6CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfRFlMRCAxIiA+PmNvbmZkZWZzLmgKKworCUxUX0RMTE9BREVSUz0iJExUX0RMTE9BREVSUyAke2x0X2Rsb3Blbl9kaXIrJGx0X2Rsb3Blbl9kaXIvfWR5bGQubGEiCitmaQorCisgIDs7CitiZW9zKikKKyAgTFRfRExMT0FERVJTPSIkTFRfRExMT0FERVJTICR7bHRfZGxvcGVuX2RpciskbHRfZGxvcGVuX2Rpci99bG9hZF9hZGRfb24ubGEiCisgIDs7CitjeWd3aW4qIHwgbWluZ3cqIHwgb3MyKiB8IHB3MzIqKQorICBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJjeWd3aW5fY29udl9wYXRoIiAiYWNfY3ZfaGF2ZV9kZWNsX2N5Z3dpbl9jb252X3BhdGgiICIjaW5jbHVkZSA8c3lzL2N5Z3dpbi5oPgorIgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfY3lnd2luX2NvbnZfcGF0aCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBhY19oYXZlX2RlY2w9MQorZWxzZQorICBhY19oYXZlX2RlY2w9MAorZmkKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfQ1lHV0lOX0NPTlZfUEFUSCAkYWNfaGF2ZV9kZWNsCitfQUNFT0YKKworICBMVF9ETExPQURFUlM9IiRMVF9ETExPQURFUlMgJHtsdF9kbG9wZW5fZGlyKyRsdF9kbG9wZW5fZGlyL31sb2FkbGlicmFyeS5sYSIKKyAgOzsKK2VzYWMKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9kbGRfZGxkX2xpbmsrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRsZCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGxkX2xpbmsgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBkbGRfbGluayAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfZGxkX2RsZF9saW5rPXllcworZWxzZQorICBhY19jdl9saWJfZGxkX2RsZF9saW5rPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPSB4IiJ5ZXM7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0RMRCAxIiA+PmNvbmZkZWZzLmgKKworCQlMVF9ETExPQURFUlM9IiRMVF9ETExPQURFUlMgJHtsdF9kbG9wZW5fZGlyKyRsdF9kbG9wZW5fZGlyL31kbGRfbGluay5sYSIKK2ZpCisKKworCisKK0xUX0RMUFJFT1BFTj0KK2lmIHRlc3QgLW4gIiRMVF9ETExPQURFUlMiCit0aGVuCisgIGZvciBsdF9sb2FkZXIgaW4gJExUX0RMTE9BREVSUzsgZG8KKyAgICBMVF9ETFBSRU9QRU49IiRMVF9ETFBSRU9QRU4tZGxwcmVvcGVuICRsdF9sb2FkZXIgIgorICBkb25lCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTElCRExMT0FERVIgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworTElCQUREX0RMPSIkTElCQUREX0RMT1BFTiAkTElCQUREX1NITF9MT0FEIgorCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBfIHByZWZpeCBpbiBjb21waWxlZCBzeW1ib2xzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBfIHByZWZpeCBpbiBjb21waWxlZCBzeW1ib2xzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3N5c19zeW1ib2xfdW5kZXJzY29yZStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3N5c19zeW1ib2xfdW5kZXJzY29yZT1ubworICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgordm9pZCBubV90ZXN0X2Z1bmMoKXt9CitpbnQgbWFpbigpe25tX3Rlc3RfZnVuYztyZXR1cm4gMDt9CitfTFRfRU9GCisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICAjIE5vdyB0cnkgdG8gZ3JhYiB0aGUgc3ltYm9scy4KKyAgICBhY19ubGlzdD1jb25mdGVzdC5ubQorICAgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiROTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFw+ICRhY19ubGlzdFwiIjsgfSA+JjUKKyAgKGV2YWwgJE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXD4gJGFjX25saXN0KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zICIkYWNfbmxpc3QiOyB0aGVuCisgICAgICAjIFNlZSB3aGV0aGVyIHRoZSBzeW1ib2xzIGhhdmUgYSBsZWFkaW5nIHVuZGVyc2NvcmUuCisgICAgICBpZiBncmVwICdeLiBfbm1fdGVzdF9mdW5jJyAiJGFjX25saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgIGx0X2N2X3N5c19zeW1ib2xfdW5kZXJzY29yZT15ZXMKKyAgICAgIGVsc2UKKyAgICAgICAgaWYgZ3JlcCAnXi4gbm1fdGVzdF9mdW5jICcgIiRhY19ubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorCSAgOgorICAgICAgICBlbHNlCisJICBlY2hvICJjb25maWd1cmU6IGNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkYWNfbmxpc3QiID4mNQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBlY2hvICJjb25maWd1cmU6IGNhbm5vdCBydW4gJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiID4mNQorICAgIGZpCisgIGVsc2UKKyAgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICAgIGNhdCBjb25mdGVzdC5jID4mNQorICBmaQorICBybSAtcmYgY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3N5c19zeW1ib2xfdW5kZXJzY29yZSIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3N5c19zeW1ib2xfdW5kZXJzY29yZSIgPiY2OyB9CisgIHN5c19zeW1ib2xfdW5kZXJzY29yZT0kbHRfY3Zfc3lzX3N5bWJvbF91bmRlcnNjb3JlCisKKworaWYgdGVzdCB4IiRsdF9jdl9zeXNfc3ltYm9sX3VuZGVyc2NvcmUiID0geHllczsgdGhlbgorICBpZiB0ZXN0IHgiJGxpYmx0ZGxfY3ZfZnVuY19kbG9wZW4iID0geHllcyB8fAorICAgICB0ZXN0IHgiJGxpYmx0ZGxfY3ZfbGliX2RsX2Rsb3BlbiIgPSB4eWVzIDsgdGhlbgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBoYXZlIHRvIGFkZCBhbiB1bmRlcnNjb3JlIGZvciBkbHN5bSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGhhdmUgdG8gYWRkIGFuIHVuZGVyc2NvcmUgZm9yIGRsc3ltLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2xpYmx0ZGxfY3ZfbmVlZF91c2NvcmUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsaWJsdGRsX2N2X25lZWRfdXNjb3JlPXVua25vd24KKyAgICAgICAgICBzYXZlX0xJQlM9IiRMSUJTIgorICAgICAgICAgIExJQlM9IiRMSUJTICRMSUJBRERfRExPUEVOIgorCSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBsaWJsdGRsX2N2X25lZWRfdXNjb3JlPWNyb3NzCitlbHNlCisgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWYgSEFWRV9ETEZDTl9ICisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIFJUTERfR0xPQkFMCisjICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCisjZWxzZQorIyAgaWZkZWYgRExfR0xPQkFMCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCisjICBlbHNlCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJMAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCisgICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCisjaWZuZGVmIExUX0RMTEFaWV9PUl9OT1cKKyMgIGlmZGVmIFJUTERfTEFaWQorIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCisjICBlbHNlCisjICAgIGlmZGVmIERMX0xBWlkKKyMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgUlRMRF9OT1cKKyMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCisjICAgICAgZWxzZQorIyAgICAgICAgaWZkZWYgRExfTk9XCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVworIyAgICAgICAgZWxzZQorIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQordm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyNlbmRpZgorCit2b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KK2ludCBtYWluICgpCit7CisgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworICBpbnQgc3RhdHVzID0gJGx0X2RsdW5rbm93bjsKKworICBpZiAoc2VsZikKKyAgICB7CisgICAgICBpZiAoZGxzeW0gKHNlbGYsImZub3JkIikpICAgICAgIHN0YXR1cyA9ICRsdF9kbG5vX3VzY29yZTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworCSAgaWYgKGRsc3ltKCBzZWxmLCJfZm5vcmQiKSkgIHN0YXR1cyA9ICRsdF9kbG5lZWRfdXNjb3JlOworICAgICAgICAgIGVsc2UgcHV0cyAoZGxlcnJvciAoKSk7CisJfQorICAgICAgLyogZGxjbG9zZSAoc2VsZik7ICovCisgICAgfQorICBlbHNlCisgICAgcHV0cyAoZGxlcnJvciAoKSk7CisKKyAgcmV0dXJuIHN0YXR1czsKK30KK19MVF9FT0YKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9IDI+L2Rldi9udWxsOyB0aGVuCisgICAgKC4vY29uZnRlc3Q7IGV4aXQ7ICkgPiY1IDI+L2Rldi9udWxsCisgICAgbHRfc3RhdHVzPSQ/CisgICAgY2FzZSB4JGx0X3N0YXR1cyBpbgorICAgICAgeCRsdF9kbG5vX3VzY29yZSkgbGlibHRkbF9jdl9uZWVkX3VzY29yZT1ubyA7OworICAgICAgeCRsdF9kbG5lZWRfdXNjb3JlKSBsaWJsdGRsX2N2X25lZWRfdXNjb3JlPXllcyA7OworICAgICAgeCRsdF9kbHVua25vd258eCopICA7OworICAgIGVzYWMKKyAgZWxzZSA6CisgICAgIyBjb21waWxhdGlvbiBmYWlsZWQKKworICBmaQorZmkKK3JtIC1mciBjb25mdGVzdCoKKworCSAgTElCUz0iJHNhdmVfTElCUyIKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGlibHRkbF9jdl9uZWVkX3VzY29yZSIgPiY1CiskYXNfZWNobyAiJGxpYmx0ZGxfY3ZfbmVlZF91c2NvcmUiID4mNjsgfQorICBmaQorZmkKKworaWYgdGVzdCB4IiRsaWJsdGRsX2N2X25lZWRfdXNjb3JlIiA9IHh5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9VU0NPUkUgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBkZXBsaWJzIGFyZSBsb2FkZWQgYnkgZGxvcGVuIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgZGVwbGlicyBhcmUgbG9hZGVkIGJ5IGRsb3Blbi4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9zeXNfZGxvcGVuX2RlcGxpYnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAjIFBPUlRNRSBkb2VzIHlvdXIgc3lzdGVtIGF1dG9tYXRpY2FsbHkgbG9hZCBkZXBsaWJzIGZvciBkbG9wZW4/CisgICMgb3IgaXRzIGxvZ2ljYWwgZXF1aXZhbGVudCAoZS5nLiBzaGxfbG9hZCBmb3IgSFAtVVggPCAxMSkKKyAgIyBGb3Igbm93LCB3ZSBqdXN0IGNhdGNoIE9TZXMgd2Uga25vdyBzb21ldGhpbmcgYWJvdXQgLS0gaW4gdGhlCisgICMgZnV0dXJlLCB3ZSdsbCB0cnkgdGVzdCB0aGlzIHByb2dyYW1tYXRpY2FsbHkuCisgIGx0X2N2X3N5c19kbG9wZW5fZGVwbGlicz11bmtub3duCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4Myp8YWl4NC4xLip8YWl4NC4yLiopCisgICAgIyBVbmtub3duIHdoZXRoZXIgdGhpcyBpcyB0cnVlIGZvciB0aGVzZSB2ZXJzaW9ucyBvZiBBSVgsIGJ1dAorICAgICMgd2Ugd2FudCB0aGlzIGBjYXNlJyBoZXJlIHRvIGV4cGxpY2l0bHkgY2F0Y2ggdGhvc2UgdmVyc2lvbnMuCisgICAgbHRfY3Zfc3lzX2Rsb3Blbl9kZXBsaWJzPXVua25vd24KKyAgICA7OworICBhaXhbNC05XSopCisgICAgbHRfY3Zfc3lzX2Rsb3Blbl9kZXBsaWJzPXllcworICAgIDs7CisgIGFtaWdhb3MqKQorICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgcG93ZXJwYykKKyAgICAgIGx0X2N2X3N5c19kbG9wZW5fZGVwbGlicz1ubworICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZGFyd2luKikKKyAgICAjIEFzc3VtaW5nIHRoZSB1c2VyIGhhcyBpbnN0YWxsZWQgYSBsaWJkbCBmcm9tIHNvbWV3aGVyZSwgdGhpcyBpcyB0cnVlCisgICAgIyBJZiB5b3UgYXJlIGxvb2tpbmcgZm9yIG9uZSBodHRwOi8vd3d3Lm9wZW5kYXJ3aW4ub3JnL3Byb2plY3RzL2RsY29tcGF0CisgICAgbHRfY3Zfc3lzX2Rsb3Blbl9kZXBsaWJzPXllcworICAgIDs7CisgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICBsdF9jdl9zeXNfZGxvcGVuX2RlcGxpYnM9eWVzCisgICAgOzsKKyAgZ251KiB8IGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAjIEdOVSBhbmQgaXRzIHZhcmlhbnRzLCB1c2luZyBnbnUgbGQuc28gKEdsaWJjKQorICAgIGx0X2N2X3N5c19kbG9wZW5fZGVwbGlicz15ZXMKKyAgICA7OworICBocHV4MTAqfGhwdXgxMSopCisgICAgbHRfY3Zfc3lzX2Rsb3Blbl9kZXBsaWJzPXllcworICAgIDs7CisgIGludGVyaXgqKQorICAgIGx0X2N2X3N5c19kbG9wZW5fZGVwbGlicz15ZXMKKyAgICA7OworICBpcml4WzEyMzQ1XSp8aXJpeDYuWzAxXSopCisgICAgIyBDYXRjaCBhbGwgdmVyc2lvbnMgb2YgSVJJWCBiZWZvcmUgNi4yLCBhbmQgaW5kaWNhdGUgdGhhdCB3ZSBkb24ndAorICAgICMga25vdyBob3cgaXQgd29ya2VkIGZvciBhbnkgb2YgdGhvc2UgdmVyc2lvbnMuCisgICAgbHRfY3Zfc3lzX2Rsb3Blbl9kZXBsaWJzPXVua25vd24KKyAgICA7OworICBpcml4KikKKyAgICAjIFRoZSBjYXNlIGFib3ZlIGNhdGNoZXMgYW55dGhpbmcgYmVmb3JlIDYuMiwgYW5kIGl0J3Mga25vd24gdGhhdAorICAgICMgYXQgNi4yIGFuZCBsYXRlciBkbG9wZW4gZG9lcyBsb2FkIGRlcGxpYnMuCisgICAgbHRfY3Zfc3lzX2Rsb3Blbl9kZXBsaWJzPXllcworICAgIDs7CisgIG5ldGJzZCopCisgICAgbHRfY3Zfc3lzX2Rsb3Blbl9kZXBsaWJzPXllcworICAgIDs7CisgIG9wZW5ic2QqKQorICAgIGx0X2N2X3N5c19kbG9wZW5fZGVwbGlicz15ZXMKKyAgICA7OworICBvc2ZbMTIzNF0qKQorICAgICMgZGxvcGVuIGRpZCBsb2FkIGRlcGxpYnMgKGF0IGxlYXN0IGF0IDQueCksIGJ1dCB1bnRpbCB0aGUgNS54IHNlcmllcywKKyAgICAjIGl0IGRpZCAqbm90KiB1c2UgYW4gUlBBVEggaW4gYSBzaGFyZWQgbGlicmFyeSB0byBmaW5kIG9iamVjdHMgdGhlCisgICAgIyBsaWJyYXJ5IGRlcGVuZHMgb24sIHNvIHdlIGV4cGxpY2l0bHkgc2F5IGBubycuCisgICAgbHRfY3Zfc3lzX2Rsb3Blbl9kZXBsaWJzPW5vCisgICAgOzsKKyAgb3NmNS4wfG9zZjUuMGF8b3NmNS4xKQorICAgICMgZGxvcGVuICpkb2VzKiBsb2FkIGRlcGxpYnMgYW5kIHdpdGggdGhlIHJpZ2h0IGxvYWRlciBwYXRjaCBhcHBsaWVkCisgICAgIyBpdCBldmVuIHVzZXMgUlBBVEggaW4gYSBzaGFyZWQgbGlicmFyeSB0byBzZWFyY2ggZm9yIHNoYXJlZCBvYmplY3RzCisgICAgIyB0aGF0IHRoZSBsaWJyYXJ5IGRlcGVuZHMgb24sIGJ1dCB0aGVyZSdzIG5vIGVhc3kgd2F5IHRvIGtub3cgaWYgdGhhdAorICAgICMgcGF0Y2ggaXMgaW5zdGFsbGVkLiAgU2luY2UgdGhpcyBpcyB0aGUgY2FzZSwgYWxsIHdlIGNhbiByZWFsbHkKKyAgICAjIHNheSBpcyB1bmtub3duIC0tIGl0IGRlcGVuZHMgb24gdGhlIHBhdGNoIGJlaW5nIGluc3RhbGxlZC4gIElmCisgICAgIyBpdCBpcywgdGhpcyBjaGFuZ2VzIHRvIGB5ZXMnLiAgV2l0aG91dCBpdCwgaXQgd291bGQgYmUgYG5vJy4KKyAgICBsdF9jdl9zeXNfZGxvcGVuX2RlcGxpYnM9dW5rbm93bgorICAgIDs7CisgIG9zZiopCisgICAgIyB0aGUgdHdvIGNhc2VzIGFib3ZlIHNob3VsZCBjYXRjaCBhbGwgdmVyc2lvbnMgb2Ygb3NmIDw9IDUuMS4gIFJlYWQKKyAgICAjIHRoZSBjb21tZW50cyBhYm92ZSBmb3Igd2hhdCB3ZSBrbm93IGFib3V0IHRoZW0uCisgICAgIyBBdCA+IDUuMSwgZGVwbGlicyBhcmUgbG9hZGVkICphbmQqIGFueSBSUEFUSCBpbiBhIHNoYXJlZCBsaWJyYXJ5CisgICAgIyBpcyB1c2VkIHRvIGZpbmQgdGhlbSBzbyB3ZSBjYW4gZmluYWxseSBzYXkgYHllcycuCisgICAgbHRfY3Zfc3lzX2Rsb3Blbl9kZXBsaWJzPXllcworICAgIDs7CisgIHFueCopCisgICAgbHRfY3Zfc3lzX2Rsb3Blbl9kZXBsaWJzPXllcworICAgIDs7CisgIHNvbGFyaXMqKQorICAgIGx0X2N2X3N5c19kbG9wZW5fZGVwbGlicz15ZXMKKyAgICA7OworICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgICBsaWJsdGRsX2N2X3N5c19kbG9wZW5fZGVwbGlicz15ZXMKKyAgICA7OworICBlc2FjCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3N5c19kbG9wZW5fZGVwbGlicyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3N5c19kbG9wZW5fZGVwbGlicyIgPiY2OyB9CitpZiB0ZXN0ICIkbHRfY3Zfc3lzX2Rsb3Blbl9kZXBsaWJzIiAhPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgTFRETF9ETE9QRU5fREVQTElCUyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworOgorCitmb3IgYWNfaGVhZGVyIGluIGFyZ3ouaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiYXJnei5oIiAiYWNfY3ZfaGVhZGVyX2FyZ3pfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0CisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9hcmd6X2giID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0FSR1pfSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgImVycm9yX3QiICJhY19jdl90eXBlX2Vycm9yX3QiICIjaWYgZGVmaW5lZChIQVZFX0FSR1pfSCkKKyMgIGluY2x1ZGUgPGFyZ3ouaD4KKyNlbmRpZgorIgoraWYgdGVzdCAieCRhY19jdl90eXBlX2Vycm9yX3QiID0geCIieWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0VSUk9SX1QgMQorX0FDRU9GCisKKworZWxzZQorCiskYXNfZWNobyAiI2RlZmluZSBlcnJvcl90IGludCIgPj5jb25mZGVmcy5oCisKKworJGFzX2VjaG8gIiNkZWZpbmUgX19lcnJvcl90X2RlZmluZWQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworQVJHWl9IPQorZm9yIGFjX2Z1bmMgaW4gYXJnel9hZGQgYXJnel9hcHBlbmQgYXJnel9jb3VudCBhcmd6X2NyZWF0ZV9zZXAgYXJnel9pbnNlcnQgXAorCWFyZ3pfbmV4dCBhcmd6X3N0cmluZ2lmeQorZG8gOgorICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKK2V2YWwgYXNfdmFsPVwkJGFzX2FjX3ZhcgorICAgaWYgdGVzdCAieCRhc192YWwiID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2Vsc2UKKyAgQVJHWl9IPWFyZ3ouaDsgY2FzZSAiICRMSUJPQkpTICIgaW4KKyAgKiIgYXJnei4kYWNfb2JqZXh0ICIqICkgOzsKKyAgKikgTElCT0JKUz0iJExJQk9CSlMgYXJnei4kYWNfb2JqZXh0IgorIDs7Citlc2FjCisKK2ZpCitkb25lCisKKworaWYgdGVzdCAteiAiJEFSR1pfSCI7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGFyZ3ogYWN0dWFsbHkgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgYXJneiBhY3R1YWxseSB3b3Jrcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9zeXNfYXJnel93b3JrcytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJGhvc3Rfb3MgaW4gIygKKwkgKmN5Z3dpbiopCisJICAgbHRfY3Zfc3lzX2FyZ3pfd29ya3M9bm8KKwkgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSBubzsgdGhlbgorCSAgICAgbHRfY3Zfc3lzX2FyZ3pfd29ya3M9Imd1ZXNzaW5nIG5vIgorCSAgIGVsc2UKKwkgICAgIGx0X3NlZF9leHRyYWN0X2xlYWRpbmdfZGlnaXRzPSdzL15cKFswLTlcLl0qXCkuKi9cMS8nCisJICAgICBzYXZlX0lGUz0kSUZTCisJICAgICBJRlM9LS4KKwkgICAgIHNldCB4IGB1bmFtZSAtciB8IHNlZCAtZSAiJGx0X3NlZF9leHRyYWN0X2xlYWRpbmdfZGlnaXRzImAKKwkgICAgIElGUz0kc2F2ZV9JRlMKKwkgICAgIGx0X29zX21ham9yPSR7Mi0wfQorCSAgICAgbHRfb3NfbWlub3I9JHszLTB9CisJICAgICBsdF9vc19taWNybz0kezQtMH0KKwkgICAgIGlmIHRlc3QgIiRsdF9vc19tYWpvciIgLWd0IDEgXAorCQl8fCB7IHRlc3QgIiRsdF9vc19tYWpvciIgLWVxIDEgXAorCQkgICYmIHsgdGVzdCAiJGx0X29zX21pbm9yIiAtZ3QgNSBcCisJCSAgICB8fCB7IHRlc3QgIiRsdF9vc19taW5vciIgLWVxIDUgXAorCQkgICAgICAmJiB0ZXN0ICIkbHRfb3NfbWljcm8iIC1ndCAyNDsgfTsgfTsgfTsgdGhlbgorCSAgICAgICBsdF9jdl9zeXNfYXJnel93b3Jrcz15ZXMKKwkgICAgIGZpCisJICAgZmkKKwkgICA7OyAjKAorCSAqKSBsdF9jdl9zeXNfYXJnel93b3Jrcz15ZXMgOzsKKwkgZXNhYworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc3lzX2FyZ3pfd29ya3MiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9zeXNfYXJnel93b3JrcyIgPiY2OyB9CisgICAgIGlmIHRlc3QgJGx0X2N2X3N5c19hcmd6X3dvcmtzID0geWVzOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9XT1JLSU5HX0FSR1ogMSIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgQVJHWl9IPWFyZ3ouaAorICAgICAgICBjYXNlICIgJExJQk9CSlMgIiBpbgorICAqIiBhcmd6LiRhY19vYmpleHQgIiogKSA7OworICAqKSBMSUJPQkpTPSIkTElCT0JKUyBhcmd6LiRhY19vYmpleHQiCisgOzsKK2VzYWMKKworZmkKK2ZpCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbGlidG9vbCBzdXBwb3J0cyAtZGxvcGVuLy1kbHByZW9wZW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBsaWJ0b29sIHN1cHBvcnRzIC1kbG9wZW4vLWRscHJlb3Blbi4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsaWJsdGRsX2N2X3ByZWxvYWRlZF9zeW1ib2xzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisgICAgbGlibHRkbF9jdl9wcmVsb2FkZWRfc3ltYm9scz15ZXMKKyAgZWxzZQorICAgIGxpYmx0ZGxfY3ZfcHJlbG9hZGVkX3N5bWJvbHM9bm8KKyAgZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGlibHRkbF9jdl9wcmVsb2FkZWRfc3ltYm9scyIgPiY1CiskYXNfZWNobyAiJGxpYmx0ZGxfY3ZfcHJlbG9hZGVkX3N5bWJvbHMiID4mNjsgfQoraWYgdGVzdCB4IiRsaWJsdGRsX2N2X3ByZWxvYWRlZF9zeW1ib2xzIiA9IHh5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9QUkVMT0FERURfU1lNQk9MUyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1sdGRsLWluc3RhbGwgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbHRkbF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbHRkbF9pbnN0YWxsOworZmkKKworCitjYXNlICwke2VuYWJsZV9sdGRsX2luc3RhbGx9LCR7ZW5hYmxlX2x0ZGxfY29udmVuaWVuY2V9IGluCisgICp5ZXMqKSA7OworICAqKSBlbmFibGVfbHRkbF9jb252ZW5pZW5jZT15ZXMgOzsKK2VzYWMKKworIGlmIHRlc3QgeCIke2VuYWJsZV9sdGRsX2luc3RhbGwtbm99IiAhPSB4bm87IHRoZW4KKyAgSU5TVEFMTF9MVERMX1RSVUU9CisgIElOU1RBTExfTFRETF9GQUxTRT0nIycKK2Vsc2UKKyAgSU5TVEFMTF9MVERMX1RSVUU9JyMnCisgIElOU1RBTExfTFRETF9GQUxTRT0KK2ZpCisKKyAgaWYgdGVzdCB4IiR7ZW5hYmxlX2x0ZGxfY29udmVuaWVuY2Utbm99IiAhPSB4bm87IHRoZW4KKyAgQ09OVkVOSUVOQ0VfTFRETF9UUlVFPQorICBDT05WRU5JRU5DRV9MVERMX0ZBTFNFPScjJworZWxzZQorICBDT05WRU5JRU5DRV9MVERMX1RSVUU9JyMnCisgIENPTlZFTklFTkNFX0xURExfRkFMU0U9CitmaQorCisKKworCisKKworIyBJbiBvcmRlciB0aGF0IGx0ZGwuYyBjYW4gY29tcGlsZSwgZmluZCBvdXQgdGhlIGZpcnN0IEFDX0NPTkZJR19IRUFERVJTCisjIHRoZSB1c2VyIHVzZWQuICBUaGlzIGlzIHNvIHRoYXQgbHRkbC5oIGNhbiBwaWNrIHVwIHRoZSBwYXJlbnQgcHJvamVjdHMKKyMgY29uZmlnLmggZmlsZSwgVGhlIGZpcnN0IGZpbGUgaW4gQUNfQ09ORklHX0hFQURFUlMgbXVzdCBjb250YWluIHRoZQorIyBkZWZpbml0aW9ucyByZXF1aXJlZCBieSBsdGRsLmMuCisjIEZJWE1FOiBSZW1vdmUgdXNlIG9mIHVuZG9jdW1lbnRlZCBBQ19MSVNUX0hFQURFUlMgKDIuNTkgY29tcGF0aWJpbGl0eSkuCisKKworCitmb3IgYWNfaGVhZGVyIGluIHVuaXN0ZC5oIGRsLmggc3lzL2RsLmggZGxkLmggbWFjaC1vL2R5bGQuaCBkaXJlbnQuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdAorIgorZXZhbCBhc192YWw9XCQkYXNfYWNfSGVhZGVyCisgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworZm9yIGFjX2Z1bmMgaW4gY2xvc2VkaXIgb3BlbmRpciByZWFkZGlyCitkbyA6CisgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgorZXZhbCBhc192YWw9XCQkYXNfYWNfdmFyCisgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZWxzZQorICBjYXNlICIgJExJQk9CSlMgIiBpbgorICAqIiBsdF9fZGlyZW50LiRhY19vYmpleHQgIiogKSA7OworICAqKSBMSUJPQkpTPSIkTElCT0JKUyBsdF9fZGlyZW50LiRhY19vYmpleHQiCisgOzsKK2VzYWMKKworZmkKK2RvbmUKKworZm9yIGFjX2Z1bmMgaW4gc3RybGNhdCBzdHJsY3B5CitkbyA6CisgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgorZXZhbCBhc192YWw9XCQkYXNfYWNfdmFyCisgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZWxzZQorICBjYXNlICIgJExJQk9CSlMgIiBpbgorICAqIiBsdF9fc3RybC4kYWNfb2JqZXh0ICIqICkgOzsKKyAgKikgTElCT0JKUz0iJExJQk9CSlMgbHRfX3N0cmwuJGFjX29iamV4dCIKKyA7OworZXNhYworCitmaQorZG9uZQorCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBMVF9MSUJFWFQgIiRsaWJleHQiCitfQUNFT0YKKworCituYW1lPWx0ZGwKK0xURExPUEVOPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKworCisKKworIyMgLS0tLS0tLS0gIyMKKyMjIE91dHB1dHMuICMjCisjIyAtLS0tLS0tLSAjIworYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1ha2VmaWxlIgorCitjYXQgPmNvbmZjYWNoZSA8PFxfQUNFT0YKKyMgVGhpcyBmaWxlIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQorIyB0ZXN0cyBydW4gb24gdGhpcyBzeXN0ZW0gc28gdGhleSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gY29uZmlndXJlCisjIHNjcmlwdHMgYW5kIGNvbmZpZ3VyZSBydW5zLCBzZWUgY29uZmlndXJlJ3Mgb3B0aW9uIC0tY29uZmlnLWNhY2hlLgorIyBJdCBpcyBub3QgdXNlZnVsIG9uIG90aGVyIHN5c3RlbXMuICBJZiBpdCBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndAorIyB3YW50IHRvIGtlZXAsIHlvdSBtYXkgcmVtb3ZlIG9yIGVkaXQgaXQuCisjCisjIGNvbmZpZy5zdGF0dXMgb25seSBwYXlzIGF0dGVudGlvbiB0byB0aGUgY2FjaGUgZmlsZSBpZiB5b3UgZ2l2ZSBpdAorIyB0aGUgLS1yZWNoZWNrIG9wdGlvbiB0byByZXJ1biBjb25maWd1cmUuCisjCisjIGBhY19jdl9lbnZfZm9vJyB2YXJpYWJsZXMgKHNldCBvciB1bnNldCkgd2lsbCBiZSBvdmVycmlkZGVuIHdoZW4KKyMgbG9hZGluZyB0aGlzIGZpbGUsIG90aGVyICp1bnNldCogYGFjX2N2X2Zvbycgd2lsbCBiZSBhc3NpZ25lZCB0aGUKKyMgZm9sbG93aW5nIHZhbHVlcy4KKworX0FDRU9GCisKKyMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisjIGJ1dCB3ZSBrbm93IG9mIG5vIHdvcmthcm91bmQgdGhhdCBpcyBzaW1wbGUsIHBvcnRhYmxlLCBhbmQgZWZmaWNpZW50LgorIyBTbywgd2Uga2lsbCB2YXJpYWJsZXMgY29udGFpbmluZyBuZXdsaW5lcy4KKyMgVWx0cml4IHNoIHNldCB3cml0ZXMgdG8gc3RkZXJyIGFuZCBjYW4ndCBiZSByZWRpcmVjdGVkIGRpcmVjdGx5LAorIyBhbmQgc2V0cyB0aGUgaGlnaCBiaXQgaW4gdGhlIGNhY2hlIGZpbGUgdW5sZXNzIHdlIGFzc2lnbiB0byB0aGUgdmFycy4KKygKKyAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdgOyBkbworICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAorICAgICoke2FzX25sfSopCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgICpfY3ZfKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiYyO30gOzsKKyAgICAgIGVzYWMKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAorICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKKyAgICAgICopIHsgZXZhbCAkYWNfdmFyPTsgdW5zZXQgJGFjX3Zhcjt9IDs7CisgICAgICBlc2FjIDs7CisgICAgZXNhYworICBkb25lCisKKyAgKHNldCkgMj4mMSB8CisgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPScgJzsgc2V0KSAyPiYxYCBpbiAjKAorICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKKyAgICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzOiBkb3VibGUtcXVvdGUKKyAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwuCisgICAgICBzZWQgLW4gXAorCSJzLycvJ1xcXFwnJy9nOworCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgorICAgICAgOzsgIygKKyAgICAqKQorICAgICAgIyBgc2V0JyBxdW90ZXMgY29ycmVjdGx5IGFzIHJlcXVpcmVkIGJ5IFBPU0lYLCBzbyBkbyBub3QgYWRkIHF1b3Rlcy4KKyAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCisgICAgICA7OworICAgIGVzYWMgfAorICAgIHNvcnQKKykgfAorICBzZWQgJworICAgICAvXmFjX2N2X2Vudl8vYiBlbmQKKyAgICAgdCBjbGVhcgorICAgICA6Y2xlYXIKKyAgICAgcy9eXChbXj1dKlwpPVwoLipbe31dLipcKSQvdGVzdCAiJHtcMStzZXR9IiA9IHNldCB8fCAmLworICAgICB0IGVuZAorICAgICBzL15cKFtePV0qXCk9XCguKlwpJC9cMT0ke1wxPVwyfS8KKyAgICAgOmVuZCcgPj5jb25mY2FjaGUKK2lmIGRpZmYgIiRjYWNoZV9maWxlIiBjb25mY2FjaGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgaWYgdGVzdCAtdyAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgdGVzdCAieCRjYWNoZV9maWxlIiAhPSAieC9kZXYvbnVsbCIgJiYKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgICAgY2F0IGNvbmZjYWNoZSA+JGNhY2hlX2ZpbGUKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgIGZpCitmaQorcm0gLWYgY29uZmNhY2hlCisKK3Rlc3QgIngkcHJlZml4IiA9IHhOT05FICYmIHByZWZpeD0kYWNfZGVmYXVsdF9wcmVmaXgKKyMgTGV0IG1ha2UgZXhwYW5kIGV4ZWNfcHJlZml4LgordGVzdCAieCRleGVjX3ByZWZpeCIgPSB4Tk9ORSAmJiBleGVjX3ByZWZpeD0nJHtwcmVmaXh9JworCitERUZTPS1ESEFWRV9DT05GSUdfSAorCithY19saWJvYmpzPQorYWNfbHRsaWJvYmpzPQorZm9yIGFjX2kgaW4gOiAkTElCT0JKUzsgZG8gdGVzdCAieCRhY19pIiA9IHg6ICYmIGNvbnRpbnVlCisgICMgMS4gUmVtb3ZlIHRoZSBleHRlbnNpb24sIGFuZCAkVSBpZiBhbHJlYWR5IGluc3RhbGxlZC4KKyAgYWNfc2NyaXB0PSdzL1wkVVwuLy4vO3MvXC5vJC8vO3MvXC5vYmokLy8nCisgIGFjX2k9YCRhc19lY2hvICIkYWNfaSIgfCBzZWQgIiRhY19zY3JpcHQiYAorICAjIDIuIFByZXBlbmQgTElCT0JKRElSLiAgV2hlbiB1c2VkIHdpdGggYXV0b21ha2U+PTEuMTAgTElCT0JKRElSCisgICMgICAgd2lsbCBiZSBzZXQgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSBMSUJPQkpTIG9iamVjdHMgYXJlIGJ1aWx0LgorICBhc19mbl9hcHBlbmQgYWNfbGlib2JqcyAiIFwke0xJQk9CSkRJUn0kYWNfaVwkVS4kYWNfb2JqZXh0IgorICBhc19mbl9hcHBlbmQgYWNfbHRsaWJvYmpzICIgXCR7TElCT0JKRElSfSRhY19pIickVS5sbycKK2RvbmUKK0xJQk9CSlM9JGFjX2xpYm9ianMKKworTFRMSUJPQkpTPSRhY19sdGxpYm9ianMKKworCisgaWYgdGVzdCAtbiAiJEVYRUVYVCI7IHRoZW4KKyAgYW1fX0VYRUVYVF9UUlVFPQorICBhbV9fRVhFRVhUX0ZBTFNFPScjJworZWxzZQorICBhbV9fRVhFRVhUX1RSVUU9JyMnCisgIGFtX19FWEVFWFRfRkFMU0U9CitmaQorCitpZiB0ZXN0IC16ICIke0FNREVQX1RSVUV9IiAmJiB0ZXN0IC16ICIke0FNREVQX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiQU1ERVBcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NfVFJVRX0iICYmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0lOU1RBTExfTFRETF9UUlVFfSIgJiYgdGVzdCAteiAiJHtJTlNUQUxMX0xURExfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJJTlNUQUxMX0xURExcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0NPTlZFTklFTkNFX0xURExfVFJVRX0iICYmIHRlc3QgLXogIiR7Q09OVkVOSUVOQ0VfTFRETF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIkNPTlZFTklFTkNFX0xURExcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitMVF9DT05GSUdfSD1jb25maWcuaAorCis6ICR7Q09ORklHX1NUQVRVUz0uL2NvbmZpZy5zdGF0dXN9CithY193cml0ZV9mYWlsPTAKK2FjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCithY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzICRDT05GSUdfU1RBVFVTIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY2O30KK2FzX3dyaXRlX2ZhaWw9MAorY2F0ID4kQ09ORklHX1NUQVRVUyA8PF9BU0VPRiB8fCBhc193cml0ZV9mYWlsPTEKKyMhICRTSEVMTAorIyBHZW5lcmF0ZWQgYnkgJGFzX21lLgorIyBSdW4gdGhpcyBmaWxlIHRvIHJlY3JlYXRlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisjIENvbXBpbGVyIG91dHB1dCBwcm9kdWNlZCBieSBjb25maWd1cmUsIHVzZWZ1bCBmb3IgZGVidWdnaW5nCisjIGNvbmZpZ3VyZSwgaXMgaW4gY29uZmlnLmxvZyBpZiBpdCBleGlzdHMuCisKK2RlYnVnPWZhbHNlCithY19jc19yZWNoZWNrPWZhbHNlCithY19jc19zaWxlbnQ9ZmFsc2UKKworU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KK2V4cG9ydCBTSEVMTAorX0FTRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQVNFT0YgfHwgYXNfd3JpdGVfZmFpbD0xCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQmUgbW9yZSBCb3VybmUgY29tcGF0aWJsZQorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4gIygKKyAgKnBvc2l4KikgOgorICAgIHNldCAtbyBwb3NpeCA7OyAjKAorICAqKSA6CisgICAgIDs7Citlc2FjCitmaQorCisKK2FzX25sPScKKycKK2V4cG9ydCBhc19ubAorIyBQcmludGluZyBhIGxvbmcgc3RyaW5nIGNyYXNoZXMgU29sYXJpcyA3IC91c3IvYmluL3ByaW50Zi4KK2FzX2VjaG89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCisjIFByZWZlciBhIGtzaCBzaGVsbCBidWlsdGluIG92ZXIgYW4gZXh0ZXJuYWwgcHJpbnRmIHByb2dyYW0gb24gU29sYXJpcywKKyMgYnV0IHdpdGhvdXQgd2FzdGluZyBmb3JrcyBmb3IgYmFzaCBvciB6c2guCitpZiB0ZXN0IC16ICIkQkFTSF9WRVJTSU9OJFpTSF9WRVJTSU9OIiBcCisgICAgJiYgKHRlc3QgIlhgcHJpbnQgLXIgLS0gJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludCAtciAtLScKKyAgYXNfZWNob19uPSdwcmludCAtcm4gLS0nCitlbGlmICh0ZXN0ICJYYHByaW50ZiAlcyAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50ZiAlc1xuJworICBhc19lY2hvX249J3ByaW50ZiAlcycKK2Vsc2UKKyAgaWYgdGVzdCAiWGAoL3Vzci91Y2IvZWNobyAtbiAtbiAkYXNfZWNobykgMj4vZGV2L251bGxgIiA9ICJYLW4gJGFzX2VjaG8iOyB0aGVuCisgICAgYXNfZWNob19ib2R5PSdldmFsIC91c3IvdWNiL2VjaG8gLW4gIiQxJGFzX25sIicKKyAgICBhc19lY2hvX249Jy91c3IvdWNiL2VjaG8gLW4nCisgIGVsc2UKKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgZXhwciAiWCQxIiA6ICJYXFwoLipcXCkiJworICAgIGFzX2VjaG9fbl9ib2R5PSdldmFsCisgICAgICBhcmc9JDE7CisgICAgICBjYXNlICRhcmcgaW4gIygKKyAgICAgICoiJGFzX25sIiopCisJZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSRhc19ubCI7CisJYXJnPWBleHByICJYJGFyZyIgOiAiLiokYXNfbmxcXCguKlxcKSJgOzsKKyAgICAgIGVzYWM7CisgICAgICBleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpIiB8IHRyIC1kICIkYXNfbmwiCisgICAgJworICAgIGV4cG9ydCBhc19lY2hvX25fYm9keQorICAgIGFzX2VjaG9fbj0nc2ggLWMgJGFzX2VjaG9fbl9ib2R5IGFzX2VjaG8nCisgIGZpCisgIGV4cG9ydCBhc19lY2hvX2JvZHkKKyAgYXNfZWNobz0nc2ggLWMgJGFzX2VjaG9fYm9keSBhc19lY2hvJworZmkKKworIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCitpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorICBQQVRIX1NFUEFSQVRPUj06CisgIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxICYmIHsKKyAgICAoUEFUSD0nL2JpbjovYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSB8fAorICAgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisgIH0KK2ZpCisKKworIyBJRlMKKyMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuICBRdW90aW5nIGlzCisjIHRoZXJlIHRvIHByZXZlbnQgZWRpdG9ycyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHNwYWNlLXRhYi4KKyMgKElmIF9BU19QQVRIX1dBTEsgd2VyZSBjYWxsZWQgd2l0aCBJRlMgdW5zZXQsIGl0IHdvdWxkIGRpc2FibGUgd29yZAorIyBzcGxpdHRpbmcgYnkgc2V0dGluZyBJRlMgdG8gZW1wdHkgdmFsdWUuKQorSUZTPSIgIiIJJGFzX25sIgorCisjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgorY2FzZSAkMCBpbiAjKCgKKyAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OworICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgICAgIDs7Citlc2FjCisjIFdlIGRpZCBub3QgZmluZCBvdXJzZWx2ZXMsIG1vc3QgcHJvYmFibHkgd2Ugd2VyZSBydW4gYXMgYHNoIENPTU1BTkQnCisjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KK2lmIHRlc3QgIngkYXNfbXlzZWxmIiA9IHg7IHRoZW4KKyAgYXNfbXlzZWxmPSQwCitmaQoraWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgorICAkYXNfZWNobyAiJGFzX215c2VsZjogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUiID4mMgorICBleGl0IDEKK2ZpCisKKyMgVW5zZXQgdmFyaWFibGVzIHRoYXQgd2UgZG8gbm90IG5lZWQgYW5kIHdoaWNoIGNhdXNlIGJ1Z3MgKGUuZy4gaW4KKyMgcHJlLTMuMCBVV0lOIGtzaCkuICBCdXQgZG8gbm90IGNhdXNlIGJ1Z3MgaW4gYmFzaCAyLjAxOyB0aGUgInx8IGV4aXQgMSIKKyMgc3VwcHJlc3NlcyBhbnkgIlNlZ21lbnRhdGlvbiBmYXVsdCIgbWVzc2FnZSB0aGVyZS4gICcoKCcgY291bGQKKyMgdHJpZ2dlciBhIGJ1ZyBpbiBwZGtzaCA1LjIuMTQuCitmb3IgYXNfdmFyIGluIEJBU0hfRU5WIEVOViBNQUlMIE1BSUxQQVRICitkbyBldmFsIHRlc3QgeFwkeyRhc192YXIrc2V0fSA9IHhzZXQgXAorICAmJiAoICh1bnNldCAkYXNfdmFyKSB8fCBleGl0IDEpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCAkYXNfdmFyIHx8IDoKK2RvbmUKK1BTMT0nJCAnCitQUzI9Jz4gJworUFM0PScrICcKKworIyBOTFMgbnVpc2FuY2VzLgorTENfQUxMPUMKK2V4cG9ydCBMQ19BTEwKK0xBTkdVQUdFPUMKK2V4cG9ydCBMQU5HVUFHRQorCisjIENEUEFUSC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworCisjIGFzX2ZuX2Vycm9yIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0ICJgYmFzZW5hbWUgJDBgOiBlcnJvcjogRVJST1IiIHRvIHN0ZGVyci4gSWYgTElORU5PIGFuZCBMT0dfRkQgYXJlCisjIHByb3ZpZGVkLCBhbHNvIG91dHB1dCB0aGUgZXJyb3IgdG8gTE9HX0ZELCByZWZlcmVuY2luZyBMSU5FTk8uIFRoZW4gZXhpdCB0aGUKKyMgc2NyaXB0IHdpdGggc3RhdHVzICQ/LCB1c2luZyAxIGlmIHRoYXQgd2FzIDAuCithc19mbl9lcnJvciAoKQoreworICBhc19zdGF0dXM9JD87IHRlc3QgJGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQorICBpZiB0ZXN0ICIkMyI7IHRoZW4KKyAgICBhc19saW5lbm89JHthc19saW5lbm8tIiQyIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6ICQxIiA+JiQzCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiAkMSIgPiYyCisgIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cworfSAjIGFzX2ZuX2Vycm9yCisKKworIyBhc19mbl9zZXRfc3RhdHVzIFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuCithc19mbl9zZXRfc3RhdHVzICgpCit7CisgIHJldHVybiAkMQorfSAjIGFzX2ZuX3NldF9zdGF0dXMKKworIyBhc19mbl9leGl0IFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBFeGl0IHRoZSBzaGVsbCB3aXRoIFNUQVRVUywgZXZlbiBpbiBhICJ0cmFwIDAiIG9yICJzZXQgLWUiIGNvbnRleHQuCithc19mbl9leGl0ICgpCit7CisgIHNldCArZQorICBhc19mbl9zZXRfc3RhdHVzICQxCisgIGV4aXQgJDEKK30gIyBhc19mbl9leGl0CisKKyMgYXNfZm5fdW5zZXQgVkFSCisjIC0tLS0tLS0tLS0tLS0tLQorIyBQb3J0YWJseSB1bnNldCBWQVIuCithc19mbl91bnNldCAoKQoreworICB7IGV2YWwgJDE9OyB1bnNldCAkMTt9Cit9Cithc191bnNldD1hc19mbl91bnNldAorIyBhc19mbl9hcHBlbmQgVkFSIFZBTFVFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXBwZW5kIHRoZSB0ZXh0IGluIFZBTFVFIHRvIHRoZSBlbmQgb2YgdGhlIGRlZmluaXRpb24gY29udGFpbmVkIGluIFZBUi4gVGFrZQorIyBhZHZhbnRhZ2Ugb2YgYW55IHNoZWxsIG9wdGltaXphdGlvbnMgdGhhdCBhbGxvdyBhbW9ydGl6ZWQgbGluZWFyIGdyb3d0aCBvdmVyCisjIHJlcGVhdGVkIGFwcGVuZHMsIGluc3RlYWQgb2YgdGhlIHR5cGljYWwgcXVhZHJhdGljIGdyb3d0aCBwcmVzZW50IGluIG5haXZlCisjIGltcGxlbWVudGF0aW9ucy4KK2lmIChldmFsICJhc192YXI9MTsgYXNfdmFyKz0yOyB0ZXN0IHhcJGFzX3ZhciA9IHgxMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxKz1cJDIKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxPVwkJDFcJDIKKyAgfQorZmkgIyBhc19mbl9hcHBlbmQKKworIyBhc19mbl9hcml0aCBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gYXJpdGhtZXRpYyBldmFsdWF0aW9uIG9uIHRoZSBBUkdzLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUKKyMgZ2xvYmFsICRhc192YWwuIFRha2UgYWR2YW50YWdlIG9mIHNoZWxscyB0aGF0IGNhbiBhdm9pZCBmb3Jrcy4gVGhlIGFyZ3VtZW50cworIyBtdXN0IGJlIHBvcnRhYmxlIGFjcm9zcyAkKCgpKSBhbmQgZXhwci4KK2lmIChldmFsICJ0ZXN0IFwkKCggMSArIDEgKSkgPSAyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPSQoKCAkKiApKQorICB9JworZWxzZQorICBhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPWBleHByICIkQCIgfHwgdGVzdCAkPyAtZXEgMWAKKyAgfQorZmkgIyBhc19mbl9hcml0aAorCisKK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorICBhc19leHByPWV4cHIKK2Vsc2UKKyAgYXNfZXhwcj1mYWxzZQorZmkKKworaWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgorICBhc19iYXNlbmFtZT1iYXNlbmFtZQorZWxzZQorICBhc19iYXNlbmFtZT1mYWxzZQorZmkKKworaWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX2Rpcm5hbWU9ZGlybmFtZQorZWxzZQorICBhc19kaXJuYW1lPWZhbHNlCitmaQorCithc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwKKyRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCisJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWC8iJDAiIHwKKyAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisKKyMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KK2FzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCithc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKK2FzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKK2FzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworCitFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQorY2FzZSBgZWNobyAtbiB4YCBpbiAjKCgoKCgKKy1uKikKKyAgY2FzZSBgZWNobyAneHlcYydgIGluCisgICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgorICB4eSkgIEVDSE9fQz0nXGMnOzsKKyAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBvbiBBSVggNi4xYCA+IC9kZXYvbnVsbAorICAgICAgIEVDSE9fVD0nCSc7OworICBlc2FjOzsKKyopCisgIEVDSE9fTj0nLW4nOzsKK2VzYWMKKworcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKK2lmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorICBybSAtZiBjb25mJCQuZGlyL2NvbmYkJC5maWxlCitlbHNlCisgIHJtIC1mIGNvbmYkJC5kaXIKKyAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorZmkKK2lmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KKyAgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz0nbG4gLXMnCisgICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKyAgICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgorICAgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcCcuCisgICAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAorICAgICAgYXNfbG5fcz0nY3AgLXAnCisgIGVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz1sbgorICBlbHNlCisgICAgYXNfbG5fcz0nY3AgLXAnCisgIGZpCitlbHNlCisgIGFzX2xuX3M9J2NwIC1wJworZmkKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKK3JtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKworCisjIGFzX2ZuX21rZGlyX3AKKyMgLS0tLS0tLS0tLS0tLQorIyBDcmVhdGUgIiRhc19kaXIiIGFzIGEgZGlyZWN0b3J5LCBpbmNsdWRpbmcgcGFyZW50cyBpZiBuZWNlc3NhcnkuCithc19mbl9ta2Rpcl9wICgpCit7CisKKyAgY2FzZSAkYXNfZGlyIGluICMoCisgIC0qKSBhc19kaXI9Li8kYXNfZGlyOzsKKyAgZXNhYworICB0ZXN0IC1kICIkYXNfZGlyIiB8fCBldmFsICRhc19ta2Rpcl9wIHx8IHsKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIDo7IGRvCisgICAgICBjYXNlICRhc19kaXIgaW4gIygKKyAgICAgICpcJyopIGFzX3FkaXI9YCRhc19lY2hvICIkYXNfZGlyIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7ICMnKAorICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKKyAgICAgIGVzYWMKKyAgICAgIGFzX2RpcnM9IickYXNfcWRpcicgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgICAgICB0ZXN0IC1kICIkYXNfZGlyIiAmJiBicmVhaworICAgIGRvbmUKKyAgICB0ZXN0IC16ICIkYXNfZGlycyIgfHwgZXZhbCAibWtkaXIgJGFzX2RpcnMiCisgIH0gfHwgdGVzdCAtZCAiJGFzX2RpciIgfHwgYXNfZm5fZXJyb3IgImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiCisKKworfSAjIGFzX2ZuX21rZGlyX3AKK2lmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfbWtkaXJfcD0nbWtkaXIgLXAgIiRhc19kaXIiJworZWxzZQorICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAorICBhc19ta2Rpcl9wPWZhbHNlCitmaQorCitpZiB0ZXN0IC14IC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX3Rlc3RfeD0ndGVzdCAteCcKK2Vsc2UKKyAgaWYgbHMgLWRMIC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgYXNfbHNfTF9vcHRpb249TAorICBlbHNlCisgICAgYXNfbHNfTF9vcHRpb249CisgIGZpCisgIGFzX3Rlc3RfeD0nCisgICAgZXZhbCBzaCAtYyAnXCcnCisgICAgICBpZiB0ZXN0IC1kICIkMSI7IHRoZW4KKwl0ZXN0IC1kICIkMS8uIjsKKyAgICAgIGVsc2UKKwljYXNlICQxIGluICMoCisJLSopc2V0ICIuLyQxIjs7CisJZXNhYzsKKwljYXNlIGBscyAtbGQnJGFzX2xzX0xfb3B0aW9uJyAiJDEiIDI+L2Rldi9udWxsYCBpbiAjKCgKKwk/Pz9bc3hdKik6OzsqKWZhbHNlOztlc2FjO2ZpCisgICAgJ1wnJyBzaAorICAnCitmaQorYXNfZXhlY3V0YWJsZV9wPSRhc190ZXN0X3gKKworIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgorYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKworIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuCithc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorCisKK2V4ZWMgNj4mMQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1haW4gYm9keSBvZiAkQ09ORklHX1NUQVRVUyBzY3JpcHQuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworX0FTRU9GCit0ZXN0ICRhc193cml0ZV9mYWlsID0gMCAmJiBjaG1vZCAreCAkQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIyBTYXZlIHRoZSBsb2cgbWVzc2FnZSwgdG8ga2VlcCAkMCBhbmQgc28gb24gbWVhbmluZ2Z1bCwgYW5kIHRvCisjIHJlcG9ydCBhY3R1YWwgaW5wdXQgdmFsdWVzIG9mIENPTkZJR19GSUxFUyBldGMuIGluc3RlYWQgb2YgdGhlaXIKKyMgdmFsdWVzIGFmdGVyIG9wdGlvbnMgaGFuZGxpbmcuCithY19sb2c9IgorVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBsaWJsdGRsICRhc19tZSAyLjIuMTAsIHdoaWNoIHdhcworZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY1LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisKKyAgQ09ORklHX0ZJTEVTICAgID0gJENPTkZJR19GSUxFUworICBDT05GSUdfSEVBREVSUyAgPSAkQ09ORklHX0hFQURFUlMKKyAgQ09ORklHX0xJTktTICAgID0gJENPTkZJR19MSU5LUworICBDT05GSUdfQ09NTUFORFMgPSAkQ09ORklHX0NPTU1BTkRTCisgICQgJDAgJEAKKworb24gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCisiCisKK19BQ0VPRgorCitjYXNlICRhY19jb25maWdfZmlsZXMgaW4gKiIKKyIqKSBzZXQgeCAkYWNfY29uZmlnX2ZpbGVzOyBzaGlmdDsgYWNfY29uZmlnX2ZpbGVzPSQqOzsKK2VzYWMKKworY2FzZSAkYWNfY29uZmlnX2hlYWRlcnMgaW4gKiIKKyIqKSBzZXQgeCAkYWNfY29uZmlnX2hlYWRlcnM7IHNoaWZ0OyBhY19jb25maWdfaGVhZGVycz0kKjs7Citlc2FjCisKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIEZpbGVzIHRoYXQgY29uZmlnLnN0YXR1cyB3YXMgbWFkZSBmb3IuCitjb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMiCitjb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIgorY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIgorCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorYWNfY3NfdXNhZ2U9IlwKK1xgJGFzX21lJyBpbnN0YW50aWF0ZXMgZmlsZXMgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb24gYWN0aW9ucworZnJvbSB0ZW1wbGF0ZXMgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uICBVbmxlc3MgdGhlIGZpbGVzCithbmQgYWN0aW9ucyBhcmUgc3BlY2lmaWVkIGFzIFRBR3MsIGFsbCBhcmUgaW5zdGFudGlhdGVkIGJ5IGRlZmF1bHQuCisKK1VzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVEFHXS4uLgorCisgIC1oLCAtLWhlbHAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLVYsIC0tdmVyc2lvbiAgICBwcmludCB2ZXJzaW9uIG51bWJlciBhbmQgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgdGhlbiBleGl0CisgICAgICAtLWNvbmZpZyAgICAgcHJpbnQgY29uZmlndXJhdGlvbiwgdGhlbiBleGl0CisgIC1xLCAtLXF1aWV0LCAtLXNpbGVudAorICAgICAgICAgICAgICAgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcworICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKyAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucworICAgICAgLS1maWxlPUZJTEVbOlRFTVBMQVRFXQorICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQorICAgICAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCisgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKKworQ29uZmlndXJhdGlvbiBmaWxlczoKKyRjb25maWdfZmlsZXMKKworQ29uZmlndXJhdGlvbiBoZWFkZXJzOgorJGNvbmZpZ19oZWFkZXJzCisKK0NvbmZpZ3VyYXRpb24gY29tbWFuZHM6CiskY29uZmlnX2NvbW1hbmRzCisKK1JlcG9ydCBidWdzIHRvIDxidWctbGlidG9vbEBnbnUub3JnPi4iCisKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCithY19jc19jb25maWc9ImAkYXNfZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9eIC8vOyBzL1tcXCIiXGBcJF0vXFxcXCYvZydgIgorYWNfY3NfdmVyc2lvbj0iXFwKK2xpYmx0ZGwgY29uZmlnLnN0YXR1cyAyLjIuMTAKK2NvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42NSwKKyAgd2l0aCBvcHRpb25zIFxcIlwkYWNfY3NfY29uZmlnXFwiCisKK0NvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgY29uZmlnLnN0YXR1cyBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKKworYWNfcHdkPSckYWNfcHdkJworc3JjZGlyPSckc3JjZGlyJworSU5TVEFMTD0nJElOU1RBTEwnCitNS0RJUl9QPSckTUtESVJfUCcKK0FXSz0nJEFXSycKK3Rlc3QgLW4gIlwkQVdLIiB8fCBBV0s9YXdrCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIyBUaGUgZGVmYXVsdCBsaXN0cyBhcHBseSBpZiB0aGUgdXNlciBkb2VzIG5vdCBzcGVjaWZ5IGFueSBmaWxlLgorYWNfbmVlZF9kZWZhdWx0cz06Cit3aGlsZSB0ZXN0ICQjICE9IDAKK2RvCisgIGNhc2UgJDEgaW4KKyAgLS0qPSopCisgICAgYWNfb3B0aW9uPWBleHByICJYJDEiIDogJ1hcKFtePV0qXCk9J2AKKyAgICBhY19vcHRhcmc9YGV4cHIgIlgkMSIgOiAnWFtePV0qPVwoLipcKSdgCisgICAgYWNfc2hpZnQ9OgorICAgIDs7CisgICopCisgICAgYWNfb3B0aW9uPSQxCisgICAgYWNfb3B0YXJnPSQyCisgICAgYWNfc2hpZnQ9c2hpZnQKKyAgICA7OworICBlc2FjCisKKyAgY2FzZSAkYWNfb3B0aW9uIGluCisgICMgSGFuZGxpbmcgb2YgdGhlIG9wdGlvbnMuCisgIC1yZWNoZWNrIHwgLS1yZWNoZWNrIHwgLS1yZWNoZWMgfCAtLXJlY2hlIHwgLS1yZWNoIHwgLS1yZWMgfCAtLXJlIHwgLS1yKQorICAgIGFjX2NzX3JlY2hlY2s9OiA7OworICAtLXZlcnNpb24gfCAtLXZlcnNpbyB8IC0tdmVyc2kgfCAtLXZlcnMgfCAtLXZlciB8IC0tdmUgfCAtLXYgfCAtViApCisgICAgJGFzX2VjaG8gIiRhY19jc192ZXJzaW9uIjsgZXhpdCA7OworICAtLWNvbmZpZyB8IC0tY29uZmkgfCAtLWNvbmYgfCAtLWNvbiB8IC0tY28gfCAtLWMgKQorICAgICRhc19lY2hvICIkYWNfY3NfY29uZmlnIjsgZXhpdCA7OworICAtLWRlYnVnIHwgLS1kZWJ1IHwgLS1kZWIgfCAtLWRlIHwgLS1kIHwgLWQgKQorICAgIGRlYnVnPTogOzsKKyAgLS1maWxlIHwgLS1maWwgfCAtLWZpIHwgLS1mICkKKyAgICAkYWNfc2hpZnQKKyAgICBjYXNlICRhY19vcHRhcmcgaW4KKyAgICAqXCcqKSBhY19vcHRhcmc9YCRhc19lY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgIGVzYWMKKyAgICBhc19mbl9hcHBlbmQgQ09ORklHX0ZJTEVTICIgJyRhY19vcHRhcmcnIgorICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworICAtLWhlYWRlciB8IC0taGVhZGUgfCAtLWhlYWQgfCAtLWhlYSApCisgICAgJGFjX3NoaWZ0CisgICAgY2FzZSAkYWNfb3B0YXJnIGluCisgICAgKlwnKikgYWNfb3B0YXJnPWAkYXNfZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICBlc2FjCisgICAgYXNfZm5fYXBwZW5kIENPTkZJR19IRUFERVJTICIgJyRhY19vcHRhcmcnIgorICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworICAtLWhlIHwgLS1oKQorICAgICMgQ29uZmxpY3QgYmV0d2VlbiAtLWhlbHAgYW5kIC0taGVhZGVyCisgICAgYXNfZm5fZXJyb3IgImFtYmlndW91cyBvcHRpb246IFxgJDEnCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiI7OworICAtLWhlbHAgfCAtLWhlbCB8IC1oICkKKyAgICAkYXNfZWNobyAiJGFjX2NzX3VzYWdlIjsgZXhpdCA7OworICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCB8IC0tc2kgfCAtLXMpCisgICAgYWNfY3Nfc2lsZW50PTogOzsKKworICAjIFRoaXMgaXMgYW4gZXJyb3IuCisgIC0qKSBhc19mbl9lcnJvciAidW5yZWNvZ25pemVkIG9wdGlvbjogXGAkMScKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA7OworCisgICopIGFzX2ZuX2FwcGVuZCBhY19jb25maWdfdGFyZ2V0cyAiICQxIgorICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlIDs7CisKKyAgZXNhYworICBzaGlmdAorZG9uZQorCithY19jb25maWd1cmVfZXh0cmFfYXJncz0KKworaWYgJGFjX2NzX3NpbGVudDsgdGhlbgorICBleGVjIDY+L2Rldi9udWxsCisgIGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzPSIkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1zaWxlbnQiCitmaQorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQoraWYgXCRhY19jc19yZWNoZWNrOyB0aGVuCisgIHNldCBYICckU0hFTEwnICckMCcgJGFjX2NvbmZpZ3VyZV9hcmdzIFwkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24KKyAgc2hpZnQKKyAgXCRhc19lY2hvICJydW5uaW5nIENPTkZJR19TSEVMTD0kU0hFTEwgXCQqIiA+JjYKKyAgQ09ORklHX1NIRUxMPSckU0hFTEwnCisgIGV4cG9ydCBDT05GSUdfU0hFTEwKKyAgZXhlYyAiXCRAIgorZmkKKworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitleGVjIDU+PmNvbmZpZy5sb2cKK3sKKyAgZWNobworICBzZWQgJ2g7cy8uLy0vZztzL14uLi4vIyMgLztzLy4uLiQvICMjLztwO3g7cDt4JyA8PF9BU0JPWAorIyMgUnVubmluZyAkYXNfbWUuICMjCitfQVNCT1gKKyAgJGFzX2VjaG8gIiRhY19sb2ciCit9ID4mNQorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIworIyBJTklULUNPTU1BTkRTCisjCitBTURFUF9UUlVFPSIkQU1ERVBfVFJVRSIgYWNfYXV4X2Rpcj0iJGFjX2F1eF9kaXIiCisKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworc2VkX3F1b3RlX3N1YnN0PSckc2VkX3F1b3RlX3N1YnN0JworZG91YmxlX3F1b3RlX3N1YnN0PSckZG91YmxlX3F1b3RlX3N1YnN0JworZGVsYXlfdmFyaWFibGVfc3Vic3Q9JyRkZWxheV92YXJpYWJsZV9zdWJzdCcKK21hY3JvX3ZlcnNpb249J2AkRUNITyAiJG1hY3JvX3ZlcnNpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbWFjcm9fcmV2aXNpb249J2AkRUNITyAiJG1hY3JvX3JldmlzaW9uIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0FTPSdgJEVDSE8gIiRBUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitETExUT09MPSdgJEVDSE8gIiRETExUT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK09CSkRVTVA9J2AkRUNITyAiJE9CSkRVTVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX3NoYXJlZD0nYCRFQ0hPICIkZW5hYmxlX3NoYXJlZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfc3RhdGljPSdgJEVDSE8gIiRlbmFibGVfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3BpY19tb2RlPSdgJEVDSE8gIiRwaWNfbW9kZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfZmFzdF9pbnN0YWxsPSdgJEVDSE8gIiRlbmFibGVfZmFzdF9pbnN0YWxsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1NIRUxMPSdgJEVDSE8gIiRTSEVMTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitFQ0hPPSdgJEVDSE8gIiRFQ0hPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hvc3RfYWxpYXM9J2AkRUNITyAiJGhvc3RfYWxpYXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaG9zdD0nYCRFQ0hPICIkaG9zdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitob3N0X29zPSdgJEVDSE8gIiRob3N0X29zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2J1aWxkX2FsaWFzPSdgJEVDSE8gIiRidWlsZF9hbGlhcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitidWlsZD0nYCRFQ0hPICIkYnVpbGQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYnVpbGRfb3M9J2AkRUNITyAiJGJ1aWxkX29zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1NFRD0nYCRFQ0hPICIkU0VEIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1hzZWQ9J2AkRUNITyAiJFhzZWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworR1JFUD0nYCRFQ0hPICIkR1JFUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitFR1JFUD0nYCRFQ0hPICIkRUdSRVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworRkdSRVA9J2AkRUNITyAiJEZHUkVQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0xEPSdgJEVDSE8gIiRMRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitOTT0nYCRFQ0hPICIkTk0iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTE5fUz0nYCRFQ0hPICIkTE5fUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittYXhfY21kX2xlbj0nYCRFQ0hPICIkbWF4X2NtZF9sZW4iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYWNfb2JqZXh0PSdgJEVDSE8gIiRhY19vYmpleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhlZXh0PSdgJEVDSE8gIiRleGVleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfdW5zZXQ9J2AkRUNITyAiJGx0X3Vuc2V0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9OTDJTUD0nYCRFQ0hPICIkbHRfTkwyU1AiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcmVsb2FkX2ZsYWc9J2AkRUNITyAiJHJlbG9hZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3JlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitkZXBsaWJzX2NoZWNrX21ldGhvZD0nYCRFQ0hPICIkZGVwbGlic19jaGVja19tZXRob2QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmlsZV9tYWdpY19jbWQ9J2AkRUNITyAiJGZpbGVfbWFnaWNfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0FSPSdgJEVDSE8gIiRBUiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitBUl9GTEFHUz0nYCRFQ0hPICIkQVJfRkxBR1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworU1RSSVA9J2AkRUNITyAiJFNUUklQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1JBTkxJQj0nYCRFQ0hPICIkUkFOTElCIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2NtZHM9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPSdgJEVDSE8gIiRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQ0M9J2AkRUNITyAiJENDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0NGTEFHUz0nYCRFQ0hPICIkQ0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyPSdgJEVDSE8gIiRjb21waWxlciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitHQ0M9J2AkRUNITyAiJEdDQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvYmpkaXI9J2AkRUNITyAiJG9iamRpciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitNQUdJQ19DTUQ9J2AkRUNITyAiJE1BR0lDX0NNRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3BpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3Byb2dfY29tcGlsZXJfY19vPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCituZWVkX2xvY2tzPSdgJEVDSE8gIiRuZWVkX2xvY2tzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0RTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitOTUVESVQ9J2AkRUNITyAiJE5NRURJVCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitMSVBPPSdgJEVDSE8gIiRMSVBPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK09UT09MPSdgJEVDSE8gIiRPVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitPVE9PTDY0PSdgJEVDSE8gIiRPVE9PTDY0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpYmV4dD0nYCRFQ0hPICIkbGliZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NocmV4dF9jbWRzPSdgJEVDSE8gIiRzaHJleHRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleHRyYWN0X2V4cHN5bXNfY21kcz0nYCRFQ0hPICIkZXh0cmFjdF9leHBzeW1zX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9jbWRzX25lZWRfbGM9J2AkRUNITyAiJGFyY2hpdmVfY21kc19uZWVkX2xjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9J2AkRUNITyAiJGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSdgJEVDSE8gIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJword2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9J2AkRUNITyAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX25lZWRzX29iamVjdD0nYCRFQ0hPICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfY21kcz0nYCRFQ0hPICIkYXJjaGl2ZV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfZXhwc3ltX2NtZHM9J2AkRUNITyAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbW9kdWxlX2NtZHM9J2AkRUNITyAiJG1vZHVsZV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21vZHVsZV9leHBzeW1fY21kcz0nYCRFQ0hPICIkbW9kdWxlX2V4cHN5bV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3dpdGhfZ251X2xkPSdgJEVDSE8gIiR3aXRoX2dudV9sZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithbGxvd191bmRlZmluZWRfZmxhZz0nYCRFQ0hPICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbm9fdW5kZWZpbmVkX2ZsYWc9J2AkRUNITyAiJG5vX3VuZGVmaW5lZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2AkRUNITyAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nYCRFQ0hPICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSdgJEVDSE8gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2RpcmVjdD0nYCRFQ0hPICIkaGFyZGNvZGVfZGlyZWN0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT0nYCRFQ0hPICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX21pbnVzX0w9J2AkRUNITyAiJGhhcmRjb2RlX21pbnVzX0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZml4X3NyY2ZpbGVfcGF0aD0nYCRFQ0hPICIkZml4X3NyY2ZpbGVfcGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleHBvcnRfc3ltYm9sc19jbWRzPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4Y2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2luY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ByZWxpbmtfY21kcz0nYCRFQ0hPICIkcHJlbGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbmVlZF92ZXJzaW9uPSdgJEVDSE8gIiRuZWVkX3ZlcnNpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwordmVyc2lvbl90eXBlPSdgJEVDSE8gIiR2ZXJzaW9uX3R5cGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcnVucGF0aF92YXI9J2AkRUNITyAiJHJ1bnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NobGlicGF0aF92YXI9J2AkRUNITyAiJHNobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSdgJEVDSE8gIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGlibmFtZV9zcGVjPSdgJEVDSE8gIiRsaWJuYW1lX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGlicmFyeV9uYW1lc19zcGVjPSdgJEVDSE8gIiRsaWJyYXJ5X25hbWVzX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc29uYW1lX3NwZWM9J2AkRUNITyAiJHNvbmFtZV9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2luc3RhbGxfb3ZlcnJpZGVfbW9kZT0nYCRFQ0hPICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJHBvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdHVuaW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRwb3N0dW5pbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmluaXNoX2NtZHM9J2AkRUNITyAiJGZpbmlzaF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbmlzaF9ldmFsPSdgJEVDSE8gIiRmaW5pc2hfZXZhbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9pbnRvX2xpYnM9J2AkRUNITyAiJGhhcmRjb2RlX2ludG9fbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9J2AkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nYCRFQ0hPICIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfYWN0aW9uPSdgJEVDSE8gIiRoYXJkY29kZV9hY3Rpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX2Rsb3Blbj0nYCRFQ0hPICIkZW5hYmxlX2Rsb3BlbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfZGxvcGVuX3NlbGY9J2AkRUNITyAiJGVuYWJsZV9kbG9wZW5fc2VsZiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSdgJEVDSE8gIiRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9zdHJpcGxpYj0nYCRFQ0hPICIkb2xkX3N0cmlwbGliIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3N0cmlwbGliPSdgJEVDSE8gIiRzdHJpcGxpYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisKK0xUQ0M9JyRMVENDJworTFRDRkxBR1M9JyRMVENGTEFHUycKK2NvbXBpbGVyPSckY29tcGlsZXJfREVGQVVMVCcKKworIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgorZnVuY19mYWxsYmFja19lY2hvICgpCit7CisgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCitcJDEKK19MVEVDSE9fRU9GJworfQorCisjIFF1b3RlIGV2YWxlZCBzdHJpbmdzLgorZm9yIHZhciBpbiBBUyBcCitETExUT09MIFwKK09CSkRVTVAgXAorU0hFTEwgXAorRUNITyBcCitTRUQgXAorR1JFUCBcCitFR1JFUCBcCitGR1JFUCBcCitMRCBcCitOTSBcCitMTl9TIFwKK2x0X1NQMk5MIFwKK2x0X05MMlNQIFwKK3JlbG9hZF9mbGFnIFwKK2RlcGxpYnNfY2hlY2tfbWV0aG9kIFwKK2ZpbGVfbWFnaWNfY21kIFwKK0FSIFwKK0FSX0ZMQUdTIFwKK1NUUklQIFwKK1JBTkxJQiBcCitDQyBcCitDRkxBR1MgXAorY29tcGlsZXIgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKK2x0X3Byb2dfY29tcGlsZXJfd2wgXAorbHRfcHJvZ19jb21waWxlcl9waWMgXAorbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAorbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAorbmVlZF9sb2NrcyBcCitEU1lNVVRJTCBcCitOTUVESVQgXAorTElQTyBcCitPVE9PTCBcCitPVE9PTDY0IFwKK3NocmV4dF9jbWRzIFwKK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyBcCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyBcCitjb21waWxlcl9uZWVkc19vYmplY3QgXAord2l0aF9nbnVfbGQgXAorYWxsb3dfdW5kZWZpbmVkX2ZsYWcgXAorbm9fdW5kZWZpbmVkX2ZsYWcgXAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAorZml4X3NyY2ZpbGVfcGF0aCBcCitleGNsdWRlX2V4cHN5bXMgXAoraW5jbHVkZV9leHBzeW1zIFwKK2ZpbGVfbGlzdF9zcGVjIFwKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIFwKK2xpYm5hbWVfc3BlYyBcCitsaWJyYXJ5X25hbWVzX3NwZWMgXAorc29uYW1lX3NwZWMgXAoraW5zdGFsbF9vdmVycmlkZV9tb2RlIFwKK2ZpbmlzaF9ldmFsIFwKK29sZF9zdHJpcGxpYiBcCitzdHJpcGxpYjsgZG8KKyAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KKyAgICAqW1xcXFxcXFxgXFwiXFxcJF0qKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKKyMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KK2ZvciB2YXIgaW4gcmVsb2FkX2NtZHMgXAorb2xkX3Bvc3RpbnN0YWxsX2NtZHMgXAorb2xkX3Bvc3R1bmluc3RhbGxfY21kcyBcCitvbGRfYXJjaGl2ZV9jbWRzIFwKK2V4dHJhY3RfZXhwc3ltc19jbWRzIFwKK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMgXAorb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMgXAorYXJjaGl2ZV9jbWRzIFwKK2FyY2hpdmVfZXhwc3ltX2NtZHMgXAorbW9kdWxlX2NtZHMgXAorbW9kdWxlX2V4cHN5bV9jbWRzIFwKK2V4cG9ydF9zeW1ib2xzX2NtZHMgXAorcHJlbGlua19jbWRzIFwKK3Bvc3RpbnN0YWxsX2NtZHMgXAorcG9zdHVuaW5zdGFsbF9jbWRzIFwKK2ZpbmlzaF9jbWRzIFwKK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBcCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYzsgZG8KKyAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KKyAgICAqW1xcXFxcXFxgXFwiXFxcJF0qKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIC1lIFxcIlxcXCRkb3VibGVfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkZGVsYXlfdmFyaWFibGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKK2FjX2F1eF9kaXI9JyRhY19hdXhfZGlyJworeHNpX3NoZWxsPSckeHNpX3NoZWxsJworbHRfc2hlbGxfYXBwZW5kPSckbHRfc2hlbGxfYXBwZW5kJworCisjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyCisjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcyBJTklULgoraWYgdGVzdCAtbiAiXCR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZmkKKworCisgICAgUEFDS0FHRT0nJFBBQ0tBR0UnCisgICAgVkVSU0lPTj0nJFZFUlNJT04nCisgICAgVElNRVNUQU1QPSckVElNRVNUQU1QJworICAgIFJNPSckUk0nCisgICAgb2ZpbGU9JyRvZmlsZScKKworCisKKworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKworIyBIYW5kbGluZyBvZiBhcmd1bWVudHMuCitmb3IgYWNfY29uZmlnX3RhcmdldCBpbiAkYWNfY29uZmlnX3RhcmdldHMKK2RvCisgIGNhc2UgJGFjX2NvbmZpZ190YXJnZXQgaW4KKyAgICAiY29uZmlnLmgiKSBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTIGNvbmZpZy5oOmNvbmZpZy1oLmluIiA7OworICAgICJkZXBmaWxlcyIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBkZXBmaWxlcyIgOzsKKyAgICAibGlidG9vbCIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBsaWJ0b29sIiA7OworICAgICJNYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNYWtlZmlsZSIgOzsKKworICAqKSBhc19mbl9lcnJvciAiaW52YWxpZCBhcmd1bWVudDogXGAkYWNfY29uZmlnX3RhcmdldCciICIkTElORU5PIiA1OzsKKyAgZXNhYworZG9uZQorCisKKyMgSWYgdGhlIHVzZXIgZGlkIG5vdCB1c2UgdGhlIGFyZ3VtZW50cyB0byBzcGVjaWZ5IHRoZSBpdGVtcyB0byBpbnN0YW50aWF0ZSwKKyMgdGhlbiB0aGUgZW52dmFyIGludGVyZmFjZSBpcyB1c2VkLiAgU2V0IG9ubHkgdGhvc2UgdGhhdCBhcmUgbm90LgorIyBXZSB1c2UgdGhlIGxvbmcgZm9ybSBmb3IgdGhlIGRlZmF1bHQgYXNzaWdubWVudCBiZWNhdXNlIG9mIGFuIGV4dHJlbWVseQorIyBiaXphcnJlIGJ1ZyBvbiBTdW5PUyA0LjEuMy4KK2lmICRhY19uZWVkX2RlZmF1bHRzOyB0aGVuCisgIHRlc3QgIiR7Q09ORklHX0ZJTEVTK3NldH0iID0gc2V0IHx8IENPTkZJR19GSUxFUz0kY29uZmlnX2ZpbGVzCisgIHRlc3QgIiR7Q09ORklHX0hFQURFUlMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0hFQURFUlM9JGNvbmZpZ19oZWFkZXJzCisgIHRlc3QgIiR7Q09ORklHX0NPTU1BTkRTK3NldH0iID0gc2V0IHx8IENPTkZJR19DT01NQU5EUz0kY29uZmlnX2NvbW1hbmRzCitmaQorCisjIEhhdmUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBjb252ZW5pZW5jZS4gIE1ha2UgaXQgaW4gdGhlIGJ1aWxkIHRyZWUKKyMgc2ltcGx5IGJlY2F1c2UgdGhlcmUgaXMgbm8gcmVhc29uIGFnYWluc3QgaGF2aW5nIGl0IGhlcmUsIGFuZCBpbiBhZGRpdGlvbiwKKyMgY3JlYXRpbmcgYW5kIG1vdmluZyBmaWxlcyBmcm9tIC90bXAgY2FuIHNvbWV0aW1lcyBjYXVzZSBwcm9ibGVtcy4KKyMgSG9vayBmb3IgaXRzIHJlbW92YWwgdW5sZXNzIGRlYnVnZ2luZy4KKyMgTm90ZSB0aGF0IHRoZXJlIGlzIGEgc21hbGwgd2luZG93IGluIHdoaWNoIHRoZSBkaXJlY3Rvcnkgd2lsbCBub3QgYmUgY2xlYW5lZDoKKyMgYWZ0ZXIgaXRzIGNyZWF0aW9uIGJ1dCBiZWZvcmUgaXRzIG5hbWUgaGFzIGJlZW4gYXNzaWduZWQgdG8gYCR0bXAnLgorJGRlYnVnIHx8Cit7CisgIHRtcD0KKyAgdHJhcCAnZXhpdF9zdGF0dXM9JD8KKyAgeyB0ZXN0IC16ICIkdG1wIiB8fCB0ZXN0ICEgLWQgIiR0bXAiIHx8IHJtIC1mciAiJHRtcCI7IH0gJiYgZXhpdCAkZXhpdF9zdGF0dXMKKycgMAorICB0cmFwICdhc19mbl9leGl0IDEnIDEgMiAxMyAxNQorfQorIyBDcmVhdGUgYSAoc2VjdXJlKSB0bXAgZGlyZWN0b3J5IGZvciB0bXAgZmlsZXMuCisKK3sKKyAgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiLi9jb25mWFhYWFhYIikgMj4vZGV2L251bGxgICYmCisgIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiCit9ICB8fAoreworICB0bXA9Li9jb25mJCQtJFJBTkRPTQorICAodW1hc2sgMDc3ICYmIG1rZGlyICIkdG1wIikKK30gfHwgYXNfZm5fZXJyb3IgImNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluIC4iICIkTElORU5PIiA1CisKKyMgU2V0IHVwIHRoZSBzY3JpcHRzIGZvciBDT05GSUdfRklMRVMgc2VjdGlvbi4KKyMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGVtIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfRklMRVMuCisjIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2l0aCBgLi9jb25maWcuc3RhdHVzIGNvbmZpZy5oJy4KK2lmIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiOyB0aGVuCisKKworYWNfY3I9YGVjaG8gWCB8IHRyIFggJ1wwMTUnYAorIyBPbiBjeWd3aW4sIGJhc2ggY2FuIGVhdCBcciBpbnNpZGUgYGAgaWYgdGhlIHVzZXIgcmVxdWVzdGVkIGlnbmNyLgorIyBCdXQgd2Uga25vdyBvZiBubyBvdGhlciBzaGVsbCB3aGVyZSBhY19jciB3b3VsZCBiZSBlbXB0eSBhdCB0aGlzCisjIHBvaW50LCBzbyB3ZSBjYW4gdXNlIGEgYmFzaGlzbSBhcyBhIGZhbGxiYWNrLgoraWYgdGVzdCAieCRhY19jciIgPSB4OyB0aGVuCisgIGV2YWwgYWNfY3I9XCRcJ1xcclwnCitmaQorYWNfY3NfYXdrX2NyPWAkQVdLICdCRUdJTiB7IHByaW50ICJhXHJiIiB9JyA8L2Rldi9udWxsIDI+L2Rldi9udWxsYAoraWYgdGVzdCAiJGFjX2NzX2F3a19jciIgPSAiYSR7YWNfY3J9YiI7IHRoZW4KKyAgYWNfY3NfYXdrX2NyPSdccicKK2Vsc2UKKyAgYWNfY3NfYXdrX2NyPSRhY19jcgorZmkKKworZWNobyAnQkVHSU4geycgPiIkdG1wL3N1YnMxLmF3ayIgJiYKK19BQ0VPRgorCisKK3sKKyAgZWNobyAiY2F0ID5jb25mJCRzdWJzLmF3ayA8PF9BQ0VPRiIgJiYKKyAgZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgc2VkICdzLy4qLyYhJCYkYWNfZGVsaW0vJyAmJgorICBlY2hvICJfQUNFT0YiCit9ID5jb25mJCRzdWJzLnNoIHx8CisgIGFzX2ZuX2Vycm9yICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKK2FjX2RlbGltX251bT1gZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgZ3JlcCAtYyAnJCdgCithY19kZWxpbT0nJSFfISMgJworZm9yIGFjX2xhc3RfdHJ5IGluIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIDo7IGRvCisgIC4gLi9jb25mJCRzdWJzLnNoIHx8CisgICAgYXNfZm5fZXJyb3IgImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorCisgIGFjX2RlbGltX249YHNlZCAtbiAicy8uKiRhY19kZWxpbVwkL1gvcCIgY29uZiQkc3Vicy5hd2sgfCBncmVwIC1jIFhgCisgIGlmIHRlc3QgJGFjX2RlbGltX24gPSAkYWNfZGVsaW1fbnVtOyB0aGVuCisgICAgYnJlYWsKKyAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKyAgICBhc19mbl9lcnJvciAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CisgIGVsc2UKKyAgICBhY19kZWxpbT0iJGFjX2RlbGltISRhY19kZWxpbSBfJGFjX2RlbGltISEgIgorICBmaQorZG9uZQorcm0gLWYgY29uZiQkc3Vicy5zaAorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2NhdCA+PiJcJHRtcC9zdWJzMS5hd2siIDw8XFxfQUNBV0sgJiYKK19BQ0VPRgorc2VkIC1uICcKK2gKK3MvXi9TWyIvOyBzLyEuKi8iXT0vCitwCitnCitzL15bXiFdKiEvLworOnJlcGwKK3QgcmVwbAorcy8nIiRhY19kZWxpbSInJC8vCit0IGRlbGltCis6bmwKK2gKK3MvXCguXHsxNDhcfVwpLi4qL1wxLwordCBtb3JlMQorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxuIlxcLworcAorbgorYiByZXBsCis6bW9yZTEKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyJcXC8KK3AKK2cKK3MvLlx7MTQ4XH0vLwordCBubAorOmRlbGltCitoCitzL1woLlx7MTQ4XH1cKS4uKi9cMS8KK3QgbW9yZTIKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyIvCitwCitiCis6bW9yZTIKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyJcXC8KK3AKK2cKK3MvLlx7MTQ4XH0vLwordCBkZWxpbQorJyA8Y29uZiQkc3Vicy5hd2sgfCBzZWQgJworL15bXiIiXS97CisgIE4KKyAgcy9cbi8vCit9CisnID4+JENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCitybSAtZiBjb25mJCRzdWJzLmF3aworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitfQUNBV0sKK2NhdCA+PiJcJHRtcC9zdWJzMS5hd2siIDw8X0FDQVdLICYmCisgIGZvciAoa2V5IGluIFMpIFNfaXNfc2V0W2tleV0gPSAxCisgIEZTID0gIgciCisKK30KK3sKKyAgbGluZSA9ICQgMAorICBuZmllbGRzID0gc3BsaXQobGluZSwgZmllbGQsICJAIikKKyAgc3Vic3RlZCA9IDAKKyAgbGVuID0gbGVuZ3RoKGZpZWxkWzFdKQorICBmb3IgKGkgPSAyOyBpIDwgbmZpZWxkczsgaSsrKSB7CisgICAga2V5ID0gZmllbGRbaV0KKyAgICBrZXlsZW4gPSBsZW5ndGgoa2V5KQorICAgIGlmIChTX2lzX3NldFtrZXldKSB7CisgICAgICB2YWx1ZSA9IFNba2V5XQorICAgICAgbGluZSA9IHN1YnN0cihsaW5lLCAxLCBsZW4pICIiIHZhbHVlICIiIHN1YnN0cihsaW5lLCBsZW4gKyBrZXlsZW4gKyAzKQorICAgICAgbGVuICs9IGxlbmd0aCh2YWx1ZSkgKyBsZW5ndGgoZmllbGRbKytpXSkKKyAgICAgIHN1YnN0ZWQgPSAxCisgICAgfSBlbHNlCisgICAgICBsZW4gKz0gMSArIGtleWxlbgorICB9CisKKyAgcHJpbnQgbGluZQorfQorCitfQUNBV0sKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQoraWYgc2VkICJzLyRhY19jci8vIiA8IC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIHNlZCAicy8kYWNfY3JcJC8vOyBzLyRhY19jci8kYWNfY3NfYXdrX2NyL2ciCitlbHNlCisgIGNhdAorZmkgPCAiJHRtcC9zdWJzMS5hd2siID4gIiR0bXAvc3Vicy5hd2siIFwKKyAgfHwgYXNfZm5fZXJyb3IgImNvdWxkIG5vdCBzZXR1cCBjb25maWcgZmlsZXMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQorX0FDRU9GCisKKyMgVlBBVEggbWF5IGNhdXNlIHRyb3VibGUgd2l0aCBzb21lIG1ha2VzLCBzbyB3ZSByZW1vdmUgJChzcmNkaXIpLAorIyAke3NyY2Rpcn0gYW5kIEBzcmNkaXJAIGZyb20gVlBBVEggaWYgc3JjZGlyIGlzICIuIiwgc3RyaXAgbGVhZGluZyBhbmQKKyMgdHJhaWxpbmcgY29sb25zIGFuZCB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgbGluZSBpZiBWUEFUSCBiZWNvbWVzIGVtcHR5CisjIChhY3R1YWxseSB3ZSBsZWF2ZSBhbiBlbXB0eSBsaW5lIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycykuCitpZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgorICBhY192cHN1Yj0nL15bCSBdKlZQQVRIWwkgXSo9L3sKK3MvOipcJChzcmNkaXIpOiovOi8KK3MvOipcJHtzcmNkaXJ9OiovOi8KK3MvOipAc3JjZGlyQDoqLzovCitzL15cKFtePV0qPVsJIF0qXCk6Ki9cMS8KK3MvOiokLy8KK3MvXltePV0qPVsJIF0qJC8vCit9JworZmkKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorZmkgIyB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIgorCisjIFNldCB1cCB0aGUgc2NyaXB0cyBmb3IgQ09ORklHX0hFQURFUlMgc2VjdGlvbi4KKyMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGVtIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfSEVBREVSUy4KKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgTWFrZWZpbGUnLgoraWYgdGVzdCAtbiAiJENPTkZJR19IRUFERVJTIjsgdGhlbgorY2F0ID4iJHRtcC9kZWZpbmVzLmF3ayIgPDxcX0FDQVdLIHx8CitCRUdJTiB7CitfQUNFT0YKKworIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIGFuIGF3ayBzY3JpcHQgYGRlZmluZXMuYXdrJywgZW1iZWRkZWQgYXMKKyMgaGVyZS1kb2N1bWVudCBpbiBjb25maWcuc3RhdHVzLCB0aGF0IHN1YnN0aXR1dGVzIHRoZSBwcm9wZXIgdmFsdWVzIGludG8KKyMgY29uZmlnLmguaW4gdG8gcHJvZHVjZSBjb25maWcuaC4KKworIyBDcmVhdGUgYSBkZWxpbWl0ZXIgc3RyaW5nIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gY29uZmRlZnMuaCwgdG8gZWFzZQorIyBoYW5kbGluZyBvZiBsb25nIGxpbmVzLgorYWNfZGVsaW09JyUhXyEjICcKK2ZvciBhY19sYXN0X3RyeSBpbiBmYWxzZSBmYWxzZSA6OyBkbworICBhY190PWBzZWQgLW4gIi8kYWNfZGVsaW0vcCIgY29uZmRlZnMuaGAKKyAgaWYgdGVzdCAteiAiJGFjX3QiOyB0aGVuCisgICAgYnJlYWsKKyAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKyAgICBhc19mbl9lcnJvciAiY291bGQgbm90IG1ha2UgJENPTkZJR19IRUFERVJTIiAiJExJTkVOTyIgNQorICBlbHNlCisgICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKKyAgZmkKK2RvbmUKKworIyBGb3IgdGhlIGF3ayBzY3JpcHQsIEQgaXMgYW4gYXJyYXkgb2YgbWFjcm8gdmFsdWVzIGtleWVkIGJ5IG5hbWUsCisjIGxpa2V3aXNlIFAgY29udGFpbnMgbWFjcm8gcGFyYW1ldGVycyBpZiBhbnkuICBQcmVzZXJ2ZSBiYWNrc2xhc2gKKyMgbmV3bGluZSBzZXF1ZW5jZXMuCisKK2FjX3dvcmRfcmU9W18kYXNfY3JfTGV0dGVyc11bXyRhc19jcl9hbG51bV0qCitzZWQgLW4gJworcy8uXHsxNDhcfS8mJyIkYWNfZGVsaW0iJy9nCit0IHJzZXQKKzpyc2V0CitzL15bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKi8gLwordCBkZWYKK2QKKzpkZWYKK3MvXFwkLy8KK3QgYnNubAorcy9bIlxcXS9cXCYvZworcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCitEWyJcMSJdPSIgXDMiL3AKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpWwkgXSpcKC4qXCkvRFsiXDEiXT0iIFwyIi9wCitkCis6YnNubAorcy9bIlxcXS9cXCYvZworcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCitEWyJcMSJdPSIgXDNcXFxcXFxuIlxcL3AKK3QgY29udAorcy9eIFwoJyIkYWNfd29yZF9yZSInXClbCSBdKlwoLipcKS9EWyJcMSJdPSIgXDJcXFxcXFxuIlxcL3AKK3QgY29udAorZAorOmNvbnQKK24KK3MvLlx7MTQ4XH0vJiciJGFjX2RlbGltIicvZwordCBjbGVhcgorOmNsZWFyCitzL1xcJC8vCit0IGJzbmxjCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iL3AKK2QKKzpic25sYworcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxcXFxcbiJcXC9wCitiIGNvbnQKKycgPGNvbmZkZWZzLmggfCBzZWQgJworcy8nIiRhY19kZWxpbSInLyJcXFwKKyIvZycgPj4kQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGZvciAoa2V5IGluIEQpIERfaXNfc2V0W2tleV0gPSAxCisgIEZTID0gIgciCit9CisvXltcdCBdKiNbXHQgXSooZGVmaW5lfHVuZGVmKVtcdCBdKyRhY193b3JkX3JlKFtcdCAoXXxcJCkvIHsKKyAgbGluZSA9IFwkIDAKKyAgc3BsaXQobGluZSwgYXJnLCAiICIpCisgIGlmIChhcmdbMV0gPT0gIiMiKSB7CisgICAgZGVmdW5kZWYgPSBhcmdbMl0KKyAgICBtYWMxID0gYXJnWzNdCisgIH0gZWxzZSB7CisgICAgZGVmdW5kZWYgPSBzdWJzdHIoYXJnWzFdLCAyKQorICAgIG1hYzEgPSBhcmdbMl0KKyAgfQorICBzcGxpdChtYWMxLCBtYWMyLCAiKCIpICMpCisgIG1hY3JvID0gbWFjMlsxXQorICBwcmVmaXggPSBzdWJzdHIobGluZSwgMSwgaW5kZXgobGluZSwgZGVmdW5kZWYpIC0gMSkKKyAgaWYgKERfaXNfc2V0W21hY3JvXSkgeworICAgICMgUHJlc2VydmUgdGhlIHdoaXRlIHNwYWNlIHN1cnJvdW5kaW5nIHRoZSAiIyIuCisgICAgcHJpbnQgcHJlZml4ICJkZWZpbmUiLCBtYWNybyBQW21hY3JvXSBEW21hY3JvXQorICAgIG5leHQKKyAgfSBlbHNlIHsKKyAgICAjIFJlcGxhY2UgI3VuZGVmIHdpdGggY29tbWVudHMuICBUaGlzIGlzIG5lY2Vzc2FyeSwgZm9yIGV4YW1wbGUsCisgICAgIyBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAorICAgICMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgorICAgIGlmIChkZWZ1bmRlZiA9PSAidW5kZWYiKSB7CisgICAgICBwcmludCAiLyoiLCBwcmVmaXggZGVmdW5kZWYsIG1hY3JvLCAiKi8iCisgICAgICBuZXh0CisgICAgfQorICB9Cit9Cit7IHByaW50IH0KK19BQ0FXSworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGFzX2ZuX2Vycm9yICJjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGhlYWRlcnMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQorZmkgIyB0ZXN0IC1uICIkQ09ORklHX0hFQURFUlMiCisKKworZXZhbCBzZXQgWCAiICA6RiAkQ09ORklHX0ZJTEVTICA6SCAkQ09ORklHX0hFQURFUlMgICAgOkMgJENPTkZJR19DT01NQU5EUyIKK3NoaWZ0Citmb3IgYWNfdGFnCitkbworICBjYXNlICRhY190YWcgaW4KKyAgOltGSExDXSkgYWNfbW9kZT0kYWNfdGFnOyBjb250aW51ZTs7CisgIGVzYWMKKyAgY2FzZSAkYWNfbW9kZSRhY190YWcgaW4KKyAgOltGSExdKjoqKTs7CisgIDpMKiB8IDpDKjoqKSBhc19mbl9lcnJvciAiaW52YWxpZCB0YWcgXGAkYWNfdGFnJyIgIiRMSU5FTk8iIDU7OworICA6W0ZIXS0pIGFjX3RhZz0tOi07OworICA6W0ZIXSopIGFjX3RhZz0kYWNfdGFnOiRhY190YWcuaW47OworICBlc2FjCisgIGFjX3NhdmVfSUZTPSRJRlMKKyAgSUZTPToKKyAgc2V0IHggJGFjX3RhZworICBJRlM9JGFjX3NhdmVfSUZTCisgIHNoaWZ0CisgIGFjX2ZpbGU9JDEKKyAgc2hpZnQKKworICBjYXNlICRhY19tb2RlIGluCisgIDpMKSBhY19zb3VyY2U9JDE7OworICA6W0ZIXSkKKyAgICBhY19maWxlX2lucHV0cz0KKyAgICBmb3IgYWNfZgorICAgIGRvCisgICAgICBjYXNlICRhY19mIGluCisgICAgICAtKSBhY19mPSIkdG1wL3N0ZGluIjs7CisgICAgICAqKSAjIExvb2sgZm9yIHRoZSBmaWxlIGZpcnN0IGluIHRoZSBidWlsZCB0cmVlLCB0aGVuIGluIHRoZSBzb3VyY2UgdHJlZQorCSAjIChpZiB0aGUgcGF0aCBpcyBub3QgYWJzb2x1dGUpLiAgVGhlIGFic29sdXRlIHBhdGggY2Fubm90IGJlIERPUy1zdHlsZSwKKwkgIyBiZWNhdXNlICRhY19mIGNhbm5vdCBjb250YWluIGA6Jy4KKwkgdGVzdCAtZiAiJGFjX2YiIHx8CisJICAgY2FzZSAkYWNfZiBpbgorCSAgIFtcXC8kXSopIGZhbHNlOzsKKwkgICAqKSB0ZXN0IC1mICIkc3JjZGlyLyRhY19mIiAmJiBhY19mPSIkc3JjZGlyLyRhY19mIjs7CisJICAgZXNhYyB8fAorCSAgIGFzX2ZuX2Vycm9yICJjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiBcYCRhY19mJyIgIiRMSU5FTk8iIDU7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfZiBpbiAqXCcqKSBhY19mPWAkYXNfZWNobyAiJGFjX2YiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgZXNhYworICAgICAgYXNfZm5fYXBwZW5kIGFjX2ZpbGVfaW5wdXRzICIgJyRhY19mJyIKKyAgICBkb25lCisKKyAgICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAorICAgICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKKyAgICAjICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZy5zdGF0dXMuICAqLworICAgIGNvbmZpZ3VyZV9pbnB1dD0nR2VuZXJhdGVkIGZyb20gJ2AKKwkgICRhc19lY2hvICIkKiIgfCBzZWQgJ3N8XlteOl0qL3x8O3N8OlteOl0qL3wsIHxnJworCWAnIGJ5IGNvbmZpZ3VyZS4nCisgICAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorICAgICAgY29uZmlndXJlX2lucHV0PSIkYWNfZmlsZS4gICRjb25maWd1cmVfaW5wdXQiCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nICRhY19maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQorICAgIGZpCisgICAgIyBOZXV0cmFsaXplIHNwZWNpYWwgY2hhcmFjdGVycyBpbnRlcnByZXRlZCBieSBzZWQgaW4gcmVwbGFjZW1lbnQgc3RyaW5ncy4KKyAgICBjYXNlICRjb25maWd1cmVfaW5wdXQgaW4gIygKKyAgICAqXCYqIHwgKlx8KiB8ICpcXCogKQorICAgICAgIGFjX3NlZF9jb25mX2lucHV0PWAkYXNfZWNobyAiJGNvbmZpZ3VyZV9pbnB1dCIgfAorICAgICAgIHNlZCAncy9bXFxcXCZ8XS9cXFxcJi9nJ2A7OyAjKAorICAgICopIGFjX3NlZF9jb25mX2lucHV0PSRjb25maWd1cmVfaW5wdXQ7OworICAgIGVzYWMKKworICAgIGNhc2UgJGFjX3RhZyBpbgorICAgICo6LToqIHwgKjotKSBjYXQgPiIkdG1wL3N0ZGluIiBcCisgICAgICB8fCBhc19mbl9lcnJvciAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworCisgIGFjX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhY19maWxlIiB8fAorJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhY19maWxlIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgYXNfZGlyPSIkYWNfZGlyIjsgYXNfZm5fbWtkaXJfcAorICBhY19idWlsZGRpcj0uCisKK2Nhc2UgIiRhY19kaXIiIGluCisuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyopCisgIGFjX2Rpcl9zdWZmaXg9L2AkYXNfZWNobyAiJGFjX2RpciIgfCBzZWQgJ3N8XlwuW1xcL118fCdgCisgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKyAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gJGFzX2VjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAnc3wvW15cXC9dKnwvLi58ZztzfC98fCdgCisgIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9zdWIgaW4KKyAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1Yi8gOzsKKyAgZXNhYyA7OworZXNhYworYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkCithY19hYnNfYnVpbGRkaXI9JGFjX3B3ZCRhY19kaXJfc3VmZml4CisjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorYWNfdG9wX2J1aWxkZGlyPSRhY190b3BfYnVpbGRfcHJlZml4CisKK2Nhc2UgJHNyY2RpciBpbgorICAuKSAgIyBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisgICAgYWNfc3JjZGlyPS4KKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZCA7OworICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuCisgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKyAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7CisgICopICMgUmVsYXRpdmUgbmFtZS4KKyAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7OworZXNhYworYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAorCisKKyAgY2FzZSAkYWNfbW9kZSBpbgorICA6RikKKyAgIworICAjIENPTkZJR19GSUxFCisgICMKKworICBjYXNlICRJTlNUQUxMIGluCisgIFtcXC8kXSogfCA/OltcXC9dKiApIGFjX0lOU1RBTEw9JElOU1RBTEwgOzsKKyAgKikgYWNfSU5TVEFMTD0kYWNfdG9wX2J1aWxkX3ByZWZpeCRJTlNUQUxMIDs7CisgIGVzYWMKKyAgYWNfTUtESVJfUD0kTUtESVJfUAorICBjYXNlICRNS0RJUl9QIGluCisgIFtcXC8kXSogfCA/OltcXC9dKiApIDs7CisgICovKikgYWNfTUtESVJfUD0kYWNfdG9wX2J1aWxkX3ByZWZpeCRNS0RJUl9QIDs7CisgIGVzYWMKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIElmIHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBrbm93IGFib3V0IGRhdGFyb290ZGlyLCBleHBhbmQgaXQuCisjIEZJWE1FOiBUaGlzIGhhY2sgc2hvdWxkIGJlIHJlbW92ZWQgYSBmZXcgeWVhcnMgYWZ0ZXIgMi42MC4KK2FjX2RhdGFyb290ZGlyX2hhY2s9OyBhY19kYXRhcm9vdGRpcl9zZWVuPQorYWNfc2VkX2RhdGFyb290PScKKy9kYXRhcm9vdGRpci8geworICBwCisgIHEKK30KKy9AZGF0YWRpckAvcAorL0Bkb2NkaXJAL3AKKy9AaW5mb2RpckAvcAorL0Bsb2NhbGVkaXJAL3AKKy9AbWFuZGlyQC9wJworY2FzZSBgZXZhbCAic2VkIC1uIFwiXCRhY19zZWRfZGF0YXJvb3RcIiAkYWNfZmlsZV9pbnB1dHMiYCBpbgorKmRhdGFyb290ZGlyKikgYWNfZGF0YXJvb3RkaXJfc2Vlbj15ZXM7OworKkBkYXRhZGlyQCp8KkBkb2NkaXJAKnwqQGluZm9kaXJAKnwqQGxvY2FsZWRpckAqfCpAbWFuZGlyQCopCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlX2lucHV0cyBzZWVtcyB0byBpZ25vcmUgdGhlIC0tZGF0YXJvb3RkaXIgc2V0dGluZyIgPiYyO30KK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGFjX2RhdGFyb290ZGlyX2hhY2s9JworICBzJkBkYXRhZGlyQCYkZGF0YWRpciZnCisgIHMmQGRvY2RpckAmJGRvY2RpciZnCisgIHMmQGluZm9kaXJAJiRpbmZvZGlyJmcKKyAgcyZAbG9jYWxlZGlyQCYkbG9jYWxlZGlyJmcKKyAgcyZAbWFuZGlyQCYkbWFuZGlyJmcKKyAgcyZcXFwke2RhdGFyb290ZGlyfSYkZGF0YXJvb3RkaXImZycgOzsKK2VzYWMKK19BQ0VPRgorCisjIE5ldXRyYWxpemUgVlBBVEggd2hlbiBgJHNyY2RpcicgPSBgLicuCisjIFNoZWxsIGNvZGUgaW4gY29uZmlndXJlLmFjIG1pZ2h0IHNldCBleHRyYXN1Yi4KKyMgRklYTUU6IGRvIHdlIHJlYWxseSB3YW50IHRvIG1haW50YWluIHRoaXMgZmVhdHVyZT8KK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorYWNfc2VkX2V4dHJhPSIkYWNfdnBzdWIKKyRleHRyYXN1YgorX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCis6dAorL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYgorc3xAY29uZmlndXJlX2lucHV0QHwkYWNfc2VkX2NvbmZfaW5wdXR8O3QgdAorcyZAdG9wX2J1aWxkZGlyQCYkYWNfdG9wX2J1aWxkZGlyX3N1YiY7dCB0CitzJkB0b3BfYnVpbGRfcHJlZml4QCYkYWNfdG9wX2J1aWxkX3ByZWZpeCY7dCB0CitzJkBzcmNkaXJAJiRhY19zcmNkaXImO3QgdAorcyZAYWJzX3NyY2RpckAmJGFjX2Fic19zcmNkaXImO3QgdAorcyZAdG9wX3NyY2RpckAmJGFjX3RvcF9zcmNkaXImO3QgdAorcyZAYWJzX3RvcF9zcmNkaXJAJiRhY19hYnNfdG9wX3NyY2RpciY7dCB0CitzJkBidWlsZGRpckAmJGFjX2J1aWxkZGlyJjt0IHQKK3MmQGFic19idWlsZGRpckAmJGFjX2Fic19idWlsZGRpciY7dCB0CitzJkBhYnNfdG9wX2J1aWxkZGlyQCYkYWNfYWJzX3RvcF9idWlsZGRpciY7dCB0CitzJkBJTlNUQUxMQCYkYWNfSU5TVEFMTCY7dCB0CitzJkBNS0RJUl9QQCYkYWNfTUtESVJfUCY7dCB0CiskYWNfZGF0YXJvb3RkaXJfaGFjaworIgorZXZhbCBzZWQgXCJcJGFjX3NlZF9leHRyYVwiICIkYWNfZmlsZV9pbnB1dHMiIHwgJEFXSyAtZiAiJHRtcC9zdWJzLmF3ayIgPiR0bXAvb3V0IFwKKyAgfHwgYXNfZm5fZXJyb3IgImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisKK3Rlc3QgLXogIiRhY19kYXRhcm9vdGRpcl9oYWNrJGFjX2RhdGFyb290ZGlyX3NlZW4iICYmCisgIHsgYWNfb3V0PWBzZWQgLW4gJy9cJHtkYXRhcm9vdGRpcn0vcCcgIiR0bXAvb3V0ImA7IHRlc3QgLW4gIiRhY19vdXQiOyB9ICYmCisgIHsgYWNfb3V0PWBzZWQgLW4gJy9eWwkgXSpkYXRhcm9vdGRpclsJIF0qOio9L3AnICIkdG1wL291dCJgOyB0ZXN0IC16ICIkYWNfb3V0IjsgfSAmJgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJword2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkLiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgXGBkYXRhcm9vdGRpcicKK3doaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZC4iID4mMjt9CisKKyAgcm0gLWYgIiR0bXAvc3RkaW4iCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgLSkgY2F0ICIkdG1wL291dCIgJiYgcm0gLWYgIiR0bXAvb3V0Ijs7CisgICopIHJtIC1mICIkYWNfZmlsZSIgJiYgbXYgIiR0bXAvb3V0IiAiJGFjX2ZpbGUiOzsKKyAgZXNhYyBcCisgIHx8IGFzX2ZuX2Vycm9yICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQorIDs7CisgIDpIKQorICAjCisgICMgQ09ORklHX0hFQURFUgorICAjCisgIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KKyAgICB7CisgICAgICAkYXNfZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iIFwKKyAgICAgICYmIGV2YWwgJyRBV0sgLWYgIiR0bXAvZGVmaW5lcy5hd2siJyAiJGFjX2ZpbGVfaW5wdXRzIgorICAgIH0gPiIkdG1wL2NvbmZpZy5oIiBcCisgICAgICB8fCBhc19mbl9lcnJvciAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyAgICBpZiBkaWZmICIkYWNfZmlsZSIgIiR0bXAvY29uZmlnLmgiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjY7fQorICAgIGVsc2UKKyAgICAgIHJtIC1mICIkYWNfZmlsZSIKKyAgICAgIG12ICIkdG1wL2NvbmZpZy5oIiAiJGFjX2ZpbGUiIFwKKwl8fCBhc19mbl9lcnJvciAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyAgICBmaQorICBlbHNlCisgICAgJGFzX2VjaG8gIi8qICRjb25maWd1cmVfaW5wdXQgICovIiBcCisgICAgICAmJiBldmFsICckQVdLIC1mICIkdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIgXAorICAgICAgfHwgYXNfZm5fZXJyb3IgImNvdWxkIG5vdCBjcmVhdGUgLSIgIiRMSU5FTk8iIDUKKyAgZmkKKyMgQ29tcHV0ZSAiJGFjX2ZpbGUiJ3MgaW5kZXggaW4gJGNvbmZpZ19oZWFkZXJzLgorX2FtX2FyZz0iJGFjX2ZpbGUiCitfYW1fc3RhbXBfY291bnQ9MQorZm9yIF9hbV9oZWFkZXIgaW4gJGNvbmZpZ19oZWFkZXJzIDo7IGRvCisgIGNhc2UgJF9hbV9oZWFkZXIgaW4KKyAgICAkX2FtX2FyZyB8ICRfYW1fYXJnOiogKQorICAgICAgYnJlYWsgOzsKKyAgICAqICkKKyAgICAgIF9hbV9zdGFtcF9jb3VudD1gZXhwciAkX2FtX3N0YW1wX2NvdW50ICsgMWAgOzsKKyAgZXNhYworZG9uZQorZWNobyAidGltZXN0YW1wIGZvciAkX2FtX2FyZyIgPmAkYXNfZGlybmFtZSAtLSAiJF9hbV9hcmciIHx8CiskYXNfZXhwciBYIiRfYW1fYXJnIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRfYW1fYXJnIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRfYW1fYXJnIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRfYW1fYXJnIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJF9hbV9hcmciIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYC9zdGFtcC1oJF9hbV9zdGFtcF9jb3VudAorIDs7CisKKyAgOkMpICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGV4ZWN1dGluZyAkYWNfZmlsZSBjb21tYW5kcyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBleGVjdXRpbmcgJGFjX2ZpbGUgY29tbWFuZHMiID4mNjt9CisgOzsKKyAgZXNhYworCisKKyAgY2FzZSAkYWNfZmlsZSRhY19tb2RlIGluCisgICAgImRlcGZpbGVzIjpDKSB0ZXN0IHgiJEFNREVQX1RSVUUiICE9IHgiIiB8fCB7CisgICMgQXV0b2NvbmYgMi42MiBxdW90ZXMgLS1maWxlIGFyZ3VtZW50cyBmb3IgZXZhbCwgYnV0IG5vdCB3aGVuIGZpbGVzCisgICMgYXJlIGxpc3RlZCB3aXRob3V0IC0tZmlsZS4gIExldCdzIHBsYXkgc2FmZSBhbmQgb25seSBlbmFibGUgdGhlIGV2YWwKKyAgIyBpZiB3ZSBkZXRlY3QgdGhlIHF1b3RpbmcuCisgIGNhc2UgJENPTkZJR19GSUxFUyBpbgorICAqXCcqKSBldmFsIHNldCB4ICIkQ09ORklHX0ZJTEVTIiA7OworICAqKSAgIHNldCB4ICRDT05GSUdfRklMRVMgOzsKKyAgZXNhYworICBzaGlmdAorICBmb3IgbWYKKyAgZG8KKyAgICAjIFN0cmlwIE1GIHNvIHdlIGVuZCB1cCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgorICAgIG1mPWBlY2hvICIkbWYiIHwgc2VkIC1lICdzLzouKiQvLydgCisgICAgIyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYW4gQXV0b21ha2UgZ2VuZXJhdGVkIE1ha2VmaWxlIG9yIG5vdC4KKyAgICAjIFdlIHVzZWQgdG8gbWF0Y2ggb25seSB0aGUgZmlsZXMgbmFtZWQgYE1ha2VmaWxlLmluJywgYnV0CisgICAgIyBzb21lIHBlb3BsZSByZW5hbWUgdGhlbTsgc28gaW5zdGVhZCB3ZSBsb29rIGF0IHRoZSBmaWxlIGNvbnRlbnQuCisgICAgIyBHcmVwJ2luZyB0aGUgZmlyc3QgbGluZSBpcyBub3QgZW5vdWdoOiBzb21lIHBlb3BsZSBwb3N0LXByb2Nlc3MKKyAgICAjIGVhY2ggTWFrZWZpbGUuaW4gYW5kIGFkZCBhIG5ldyBsaW5lIG9uIHRvcCBvZiBlYWNoIGZpbGUgdG8gc2F5IHNvLgorICAgICMgR3JlcCdpbmcgdGhlIHdob2xlIGZpbGUgaXMgbm90IGdvb2QgZWl0aGVyOiBBSVggZ3JlcCBoYXMgYSBsaW5lCisgICAgIyBsaW1pdCBvZiAyMDQ4LCBidXQgYWxsIHNlZCdzIHdlIGtub3cgaGF2ZSB1bmRlcnN0YW5kIGF0IGxlYXN0IDQwMDAuCisgICAgaWYgc2VkIC1uICdzLF4jLipnZW5lcmF0ZWQgYnkgYXV0b21ha2UuKixYLHAnICIkbWYiIHwgZ3JlcCBYID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgZGlycGFydD1gJGFzX2Rpcm5hbWUgLS0gIiRtZiIgfHwKKyRhc19leHByIFgiJG1mIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRtZiIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkbWYiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJG1mIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJG1mIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgICBlbHNlCisgICAgICBjb250aW51ZQorICAgIGZpCisgICAgIyBFeHRyYWN0IHRoZSBkZWZpbml0aW9uIG9mIERFUERJUiwgYW1fX2luY2x1ZGUsIGFuZCBhbV9fcXVvdGUKKyAgICAjIGZyb20gdGhlIE1ha2VmaWxlIHdpdGhvdXQgcnVubmluZyBgbWFrZScuCisgICAgREVQRElSPWBzZWQgLW4gJ3MvXkRFUERJUiA9IC8vcCcgPCAiJG1mImAKKyAgICB0ZXN0IC16ICIkREVQRElSIiAmJiBjb250aW51ZQorICAgIGFtX19pbmNsdWRlPWBzZWQgLW4gJ3MvXmFtX19pbmNsdWRlID0gLy9wJyA8ICIkbWYiYAorICAgIHRlc3QgLXogImFtX19pbmNsdWRlIiAmJiBjb250aW51ZQorICAgIGFtX19xdW90ZT1gc2VkIC1uICdzL15hbV9fcXVvdGUgPSAvL3AnIDwgIiRtZiJgCisgICAgIyBXaGVuIHVzaW5nIGFuc2kya25yLCBVIG1heSBiZSBlbXB0eSBvciBhbiB1bmRlcnNjb3JlOyBleHBhbmQgaXQKKyAgICBVPWBzZWQgLW4gJ3MvXlUgPSAvL3AnIDwgIiRtZiJgCisgICAgIyBGaW5kIGFsbCBkZXBlbmRlbmN5IG91dHB1dCBmaWxlcywgdGhleSBhcmUgaW5jbHVkZWQgZmlsZXMgd2l0aAorICAgICMgJChERVBESVIpIGluIHRoZWlyIG5hbWVzLiAgV2UgaW52b2tlIHNlZCB0d2ljZSBiZWNhdXNlIGl0IGlzIHRoZQorICAgICMgc2ltcGxlc3QgYXBwcm9hY2ggdG8gY2hhbmdpbmcgJChERVBESVIpIHRvIGl0cyBhY3R1YWwgdmFsdWUgaW4gdGhlCisgICAgIyBleHBhbnNpb24uCisgICAgZm9yIGZpbGUgaW4gYHNlZCAtbiAiCisgICAgICBzL14kYW1fX2luY2x1ZGUgJGFtX19xdW90ZVwoLiooREVQRElSKS4qXCkkYW1fX3F1b3RlIickL1wxL3AnIDwiJG1mIiB8IFwKKwkgc2VkIC1lICdzL1wkKERFUERJUikvJyIkREVQRElSIicvZycgLWUgJ3MvXCRVLyciJFUiJy9nJ2A7IGRvCisgICAgICAjIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cy4KKyAgICAgIHRlc3QgLWYgIiRkaXJwYXJ0LyRmaWxlIiAmJiBjb250aW51ZQorICAgICAgZmRpcj1gJGFzX2Rpcm5hbWUgLS0gIiRmaWxlIiB8fAorJGFzX2V4cHIgWCIkZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRmaWxlIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgICAgIGFzX2Rpcj0kZGlycGFydC8kZmRpcjsgYXNfZm5fbWtkaXJfcAorICAgICAgIyBlY2hvICJjcmVhdGluZyAkZGlycGFydC8kZmlsZSIKKyAgICAgIGVjaG8gJyMgZHVtbXknID4gIiRkaXJwYXJ0LyRmaWxlIgorICAgIGRvbmUKKyAgZG9uZQorfQorIDs7CisgICAgImxpYnRvb2wiOkMpCisKKyAgICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyCisgICAgIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCisgICAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCisgICAgZmkKKworICAgIGNmZ2ZpbGU9IiR7b2ZpbGV9VCIKKyAgICB0cmFwICIkUk0gXCIkY2ZnZmlsZVwiOyBleGl0IDEiIDEgMiAxNQorICAgICRSTSAiJGNmZ2ZpbGUiCisKKyAgICBjYXQgPDxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMhICRTSEVMTAorCisjIGAkRUNITyAiJG9maWxlIiB8IHNlZCAncyVeLiovJSUnYCAtIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgorIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSAkYXNfbWUgKCRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYDoKKyMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgorIworIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyAgICAgICAgICAgICAgICAgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyMKKyMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KKyMKKyMgR05VIExpYnRvb2wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgaWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAorIyBpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKKyMgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjCisjIEdOVSBMaWJ0b29sIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCBHTlUgTGlidG9vbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIGEgY29weQorIyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbCwgb3IKKyMgb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworCisjIFRoZSBuYW1lcyBvZiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KK2F2YWlsYWJsZV90YWdzPSIiCisKKyMgIyMjIEJFR0lOIExJQlRPT0wgQ09ORklHCisKKyMgV2hpY2ggcmVsZWFzZSBvZiBsaWJ0b29sLm00IHdhcyB1c2VkPworbWFjcm9fdmVyc2lvbj0kbWFjcm9fdmVyc2lvbgorbWFjcm9fcmV2aXNpb249JG1hY3JvX3JldmlzaW9uCisKKyMgQXNzZW1ibGVyIHByb2dyYW0uCitBUz0kbHRfQVMKKworIyBETEwgY3JlYXRpb24gcHJvZ3JhbS4KK0RMTFRPT0w9JGx0X0RMTFRPT0wKKworIyBPYmplY3QgZHVtcGVyIHByb2dyYW0uCitPQkpEVU1QPSRsdF9PQkpEVU1QCisKKyMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4KK2J1aWxkX2xpYnRvb2xfbGlicz0kZW5hYmxlX3NoYXJlZAorCisjIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuCitidWlsZF9vbGRfbGlicz0kZW5hYmxlX3N0YXRpYworCisjIFdoYXQgdHlwZSBvZiBvYmplY3RzIHRvIGJ1aWxkLgorcGljX21vZGU9JHBpY19tb2RlCisKKyMgV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uLgorZmFzdF9pbnN0YWxsPSRlbmFibGVfZmFzdF9pbnN0YWxsCisKKyMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KK1NIRUxMPSRsdF9TSEVMTAorCisjIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IHByb3RlY3RzIGJhY2tzbGFzaGVzLgorRUNITz0kbHRfRUNITworCisjIFRoZSBob3N0IHN5c3RlbS4KK2hvc3RfYWxpYXM9JGhvc3RfYWxpYXMKK2hvc3Q9JGhvc3QKK2hvc3Rfb3M9JGhvc3Rfb3MKKworIyBUaGUgYnVpbGQgc3lzdGVtLgorYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCitidWlsZD0kYnVpbGQKK2J1aWxkX29zPSRidWlsZF9vcworCisjIEEgc2VkIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuCitTRUQ9JGx0X1NFRAorCisjIFNlZCB0aGF0IGhlbHBzIHVzIGF2b2lkIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uLgorWHNlZD0iXCRTRUQgLWUgMXMvXlgvLyIKKworIyBBIGdyZXAgcHJvZ3JhbSB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcy4KK0dSRVA9JGx0X0dSRVAKKworIyBBbiBFUkUgbWF0Y2hlci4KK0VHUkVQPSRsdF9FR1JFUAorCisjIEEgbGl0ZXJhbCBzdHJpbmcgbWF0Y2hlci4KK0ZHUkVQPSRsdF9GR1JFUAorCisjIEEgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyLgorTk09JGx0X05NCisKKyMgV2hldGhlciB3ZSBuZWVkIHNvZnQgb3IgaGFyZCBsaW5rcy4KK0xOX1M9JGx0X0xOX1MKKworIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/CittYXhfY21kX2xlbj0kbWF4X2NtZF9sZW4KKworIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCitvYmpleHQ9JGFjX29iamV4dAorCisjIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KK2V4ZWV4dD0kZXhlZXh0CisKKyMgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgInVuc2V0Ii4KK2x0X3Vuc2V0PSRsdF91bnNldAorCisjIHR1cm4gc3BhY2VzIGludG8gbmV3bGluZXMuCitTUDJOTD0kbHRfbHRfU1AyTkwKKworIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgorTkwyU1A9JGx0X2x0X05MMlNQCisKKyMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKworIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIi4KK2ZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAorCisjIFRoZSBhcmNoaXZlci4KK0FSPSRsdF9BUgorQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisKKyMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCitTVFJJUD0kbHRfU1RSSVAKKworIyBDb21tYW5kcyB1c2VkIHRvIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitSQU5MSUI9JGx0X1JBTkxJQgorb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgV2hldGhlciB0byB1c2UgYSBsb2NrIGZvciBvbGQgYXJjaGl2ZSBleHRyYWN0aW9uLgorbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPSRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24KKworIyBBIEMgY29tcGlsZXIuCitMVENDPSRsdF9DQworCisjIExUQ0MgY29tcGlsZXIgZmxhZ3MuCitMVENGTEFHUz0kbHRfQ0ZMQUdTCisKKyMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KK2dsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQorCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24uCitnbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbAorCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpci4KK2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCitnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKKworIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCitvYmpkaXI9JG9iamRpcgorCisjIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgd2l0aCAiZmlsZSIuCitNQUdJQ19DTUQ9JE1BR0lDX0NNRAorCisjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworCisjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCitEU1lNVVRJTD0kbHRfRFNZTVVUSUwKKworIyBUb29sIHRvIGNoYW5nZSBnbG9iYWwgdG8gbG9jYWwgc3ltYm9scyBvbiBNYWMgT1MgWC4KK05NRURJVD0kbHRfTk1FRElUCisKKyMgVG9vbCB0byBtYW5pcHVsYXRlIGZhdCBvYmplY3RzIGFuZCBhcmNoaXZlcyBvbiBNYWMgT1MgWC4KK0xJUE89JGx0X0xJUE8KKworIyBsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWC4KK09UT09MPSRsdF9PVE9PTAorCisjIGxkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgNjQgYml0IE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWCAxMC40LgorT1RPT0w2ND0kbHRfT1RPT0w2NAorCisjIE9sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KK2xpYmV4dD0kbGliZXh0CisKKyMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIikuCitzaHJleHRfY21kcz0kbHRfc2hyZXh0X2NtZHMKKworIyBUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgorZXh0cmFjdF9leHBzeW1zX2NtZHM9JGx0X2V4dHJhY3RfZXhwc3ltc19jbWRzCisKKyMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCisjIHJlc3RvcmVkIGF0IGxpbmsgdGltZS4KK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSRsdF92YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaworCisjIERvIHdlIG5lZWQgdGhlICJsaWIiIHByZWZpeCBmb3IgbW9kdWxlcz8KK25lZWRfbGliX3ByZWZpeD0kbmVlZF9saWJfcHJlZml4CisKKyMgRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz8KK25lZWRfdmVyc2lvbj0kbmVlZF92ZXJzaW9uCisKKyMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCit2ZXJzaW9uX3R5cGU9JHZlcnNpb25fdHlwZQorCisjIFNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KK3J1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgorCisjIFNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCitzaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCisKKyMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPworc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKKworIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KK2xpYm5hbWVfc3BlYz0kbHRfbGlibmFtZV9zcGVjCisKKyMgTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KKyMgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRQorbGlicmFyeV9uYW1lc19zcGVjPSRsdF9saWJyYXJ5X25hbWVzX3NwZWMKKworIyBUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZS4KK3NvbmFtZV9zcGVjPSRsdF9zb25hbWVfc3BlYworCisjIFBlcm1pc3Npb24gbW9kZSBvdmVycmlkZSBmb3IgaW5zdGFsbGF0aW9uIG9mIHNoYXJlZCBsaWJyYXJpZXMuCitpbnN0YWxsX292ZXJyaWRlX21vZGU9JGx0X2luc3RhbGxfb3ZlcnJpZGVfbW9kZQorCisjIENvbW1hbmQgdG8gdXNlIGFmdGVyIGluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlLgorcG9zdGluc3RhbGxfY21kcz0kbHRfcG9zdGluc3RhbGxfY21kcworCisjIENvbW1hbmQgdG8gdXNlIGFmdGVyIHVuaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitwb3N0dW5pbnN0YWxsX2NtZHM9JGx0X3Bvc3R1bmluc3RhbGxfY21kcworCisjIENvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeS4KK2ZpbmlzaF9jbWRzPSRsdF9maW5pc2hfY21kcworCisjIEFzICJmaW5pc2hfY21kcyIsIGV4Y2VwdCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dAorIyBub3Qgc2hvd24uCitmaW5pc2hfZXZhbD0kbHRfZmluaXNoX2V2YWwKKworIyBXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzLgoraGFyZGNvZGVfaW50b19saWJzPSRoYXJkY29kZV9pbnRvX2xpYnMKKworIyBDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMuCitzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYworCisjIFJ1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzLgorc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCisKKyMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgorZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KKworIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCisKKyMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgorZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCisKKyMgQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzLgorb2xkX3N0cmlwbGliPSRsdF9vbGRfc3RyaXBsaWIKK3N0cmlwbGliPSRsdF9zdHJpcGxpYgorCisKKyMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KK0xEPSRsdF9MRAorCisjIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCityZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWcKK3JlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzCisKKyMgQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlci4KK0NDPSRsdF9jb21waWxlcgorCisjIElzIHRoZSBjb21waWxlciB0aGUgR05VIGNvbXBpbGVyPword2l0aF9nY2M9JEdDQworCisjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCitub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCisKKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCisKKyMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCisKKyMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KK2xpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCisKKyMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPworY29tcGlsZXJfY19vPSRsdF9sdF9jdl9wcm9nX2NvbXBpbGVyX2NfbworCisjIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX25lZWRfbGM9JGFyY2hpdmVfY21kc19uZWVkX2xjCisKKyMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYy4KK2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcworCisjIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYworCisjIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYworCisjIFdoZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5LgorY29tcGlsZXJfbmVlZHNfb2JqZWN0PSRsdF9jb21waWxlcl9uZWVkc19vYmplY3QKKworIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcworCisjIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZS4KK2FyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzCithcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9hcmNoaXZlX2V4cHN5bV9jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSBpZiBkaWZmZXJlbnQgZnJvbSBidWlsZGluZworIyBhIHNoYXJlZCBhcmNoaXZlLgorbW9kdWxlX2NtZHM9JGx0X21vZHVsZV9jbWRzCittb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kcworCisjIFdoZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIHdpdGggR05VIGxkIG9yIG5vdC4KK3dpdGhfZ251X2xkPSRsdF93aXRoX2dudV9sZAorCisjIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgorYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X2FsbG93X3VuZGVmaW5lZF9mbGFnCisKKyMgRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgorbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnCisKKyMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0CitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjCisKKyMgSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeQorIyBkdXJpbmcgbGlua2luZy4gIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkCisKKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyMgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9kaXJlY3Q9JGhhcmRjb2RlX2RpcmVjdAorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRVwke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKKyMgImFic29sdXRlIixpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyBcJHtzaGxpYnBhdGhfdmFyfSBpZiB0aGUKKyMgbGlicmFyeSBpcyByZWxvY2F0ZWQuCitoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9JGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZQorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXIKKworIyBTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKKyMgYWdhaW5zdCBpdC4KK2hhcmRjb2RlX2F1dG9tYXRpYz0kaGFyZGNvZGVfYXV0b21hdGljCisKKyMgU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKKyMgdG8gcnVudGltZSBwYXRoIGxpc3QuCitpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCisKKyMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicworCisjIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCitmaXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKworIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgorZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kcworCisjIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCitleGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltcworCisjIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KK2luY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCisKKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCitwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcworCisjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KK2ZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYworCisjIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgoraGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb24KKworIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHCisKK19MVF9FT0YKKworICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIGNhdCA8PFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCisjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCitpZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgQ09MTEVDVF9OQU1FUz0KKyAgZXhwb3J0IENPTExFQ1RfTkFNRVMKK2ZpCitfTFRfRU9GCisgICAgOzsKKyAgZXNhYworCisKK2x0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorCisKKyAgIyBXZSB1c2Ugc2VkIGluc3RlYWQgb2YgY2F0IGJlY2F1c2UgYmFzaCBvbiBESkdQUCBnZXRzIGNvbmZ1c2VkIGlmCisgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKyAgc2VkICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlL3EnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorCisgIGNhc2UgJHhzaV9zaGVsbCBpbgorICB5ZXMpCisgICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKworIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CisjIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCisjIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KK2Z1bmNfZGlybmFtZSAoKQoreworICBjYXNlICR7MX0gaW4KKyAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKyAgZXNhYworfQorCisjIGZ1bmNfYmFzZW5hbWUgZmlsZQorZnVuY19iYXNlbmFtZSAoKQoreworICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCit9CisKKyMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKyMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKyMgY2FsbDoKKyMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCisjICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKKyMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisjICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCisjIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCisjIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKK3sKKyAgY2FzZSAkezF9IGluCisgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKyAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CisgIGVzYWMKKyAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorfQorCisjIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKyMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCisjIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKyMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KK2Z1bmNfc3RyaXBuYW1lICgpCit7CisgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKyAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifQorfQorCisjIGZ1bmNfb3B0X3NwbGl0CitmdW5jX29wdF9zcGxpdCAoKQoreworICBmdW5jX29wdF9zcGxpdF9vcHQ9JHsxJSU9Kn0KKyAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KK30KKworIyBmdW5jX2xvMm8gb2JqZWN0CitmdW5jX2xvMm8gKCkKK3sKKyAgY2FzZSAkezF9IGluCisgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKyAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKyAgZXNhYworfQorCisjIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorZnVuY194Zm9ybSAoKQoreworICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCit9CisKKyMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KK2Z1bmNfYXJpdGggKCkKK3sKKyAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpCit9CisKKyMgZnVuY19sZW4gc3RyaW5nCisjIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCitmdW5jX2xlbiAoKQoreworICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KK30KKworX0xUX0VPRgorICAgIDs7CisgICopICMgQm91cm5lIGNvbXBhdGlibGUgZnVuY3Rpb25zLgorICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisKKyMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCitmdW5jX2Rpcm5hbWUgKCkKK3sKKyAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKyAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAorICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCisgIGVsc2UKKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCisgIGZpCit9CisKKyMgZnVuY19iYXNlbmFtZSBmaWxlCitmdW5jX2Jhc2VuYW1lICgpCit7CisgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkYmFzZW5hbWUiYAorfQorCisKKyMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCisjIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorZnVuY19zdHJpcG5hbWUgKCkKK3sKKyAgY2FzZSAkezJ9IGluCisgICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKyAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CisgIGVzYWMKK30KKworIyBzZWQgc2NyaXB0czoKK215X3NlZF9sb25nX29wdD0nMXMvXlwoLVtePV0qXCk9LiovXDEvO3EnCitteV9zZWRfbG9uZ19hcmc9JzFzL14tW149XSo9Ly8nCisKKyMgZnVuY19vcHRfc3BsaXQKK2Z1bmNfb3B0X3NwbGl0ICgpCit7CisgIGZ1bmNfb3B0X3NwbGl0X29wdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCisgIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCit9CisKKyMgZnVuY19sbzJvIG9iamVjdAorZnVuY19sbzJvICgpCit7CisgIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKK30KKworIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKK2Z1bmNfeGZvcm0gKCkKK3sKKyAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bXi5dKiQvLmxvLydgCit9CisKKyMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KK2Z1bmNfYXJpdGggKCkKK3sKKyAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKK30KKworIyBmdW5jX2xlbiBzdHJpbmcKKyMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KK2Z1bmNfbGVuICgpCit7CisgIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKK30KKworX0xUX0VPRgorZXNhYworCitjYXNlICRsdF9zaGVsbF9hcHBlbmQgaW4KKyAgeWVzKQorICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisKKyMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCisjIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KK2Z1bmNfYXBwZW5kICgpCit7CisgIGV2YWwgIiQxKz1cJDIiCit9CitfTFRfRU9GCisgICAgOzsKKyAgKikKKyAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorCisjIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCitmdW5jX2FwcGVuZCAoKQoreworICBldmFsICIkMT1cJCQxXCQyIgorfQorCitfTFRfRU9GCisgICAgOzsKKyAgZXNhYworCisKKyAgc2VkIC1uICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLywkcCcgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisKKyAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgIGNobW9kICt4ICIkb2ZpbGUiCisKKyA7OworCisgIGVzYWMKK2RvbmUgIyBmb3IgYWNfdGFnCisKKworYXNfZm5fZXhpdCAwCitfQUNFT0YKK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCisKK3Rlc3QgJGFjX3dyaXRlX2ZhaWwgPSAwIHx8CisgIGFzX2ZuX2Vycm9yICJ3cml0ZSBmYWlsdXJlIGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorCisKKyMgY29uZmlndXJlIGlzIHdyaXRpbmcgdG8gY29uZmlnLmxvZywgYW5kIHRoZW4gY2FsbHMgY29uZmlnLnN0YXR1cy4KKyMgY29uZmlnLnN0YXR1cyBkb2VzIGl0cyBvd24gcmVkaXJlY3Rpb24sIGFwcGVuZGluZyB0byBjb25maWcubG9nLgorIyBVbmZvcnR1bmF0ZWx5LCBvbiBET1MgdGhpcyBmYWlscywgYXMgY29uZmlnLmxvZyBpcyBzdGlsbCBrZXB0IG9wZW4KKyMgYnkgY29uZmlndXJlLCBzbyBjb25maWcuc3RhdHVzIHdvbid0IGJlIGFibGUgdG8gd3JpdGUgdG8gaXQ7IGl0cworIyBvdXRwdXQgaXMgc2ltcGx5IGRpc2NhcmRlZC4gIFNvIHdlIGV4ZWMgdGhlIEZEIHRvIC9kZXYvbnVsbCwKKyMgZWZmZWN0aXZlbHkgY2xvc2luZyBjb25maWcubG9nLCBzbyBpdCBjYW4gYmUgcHJvcGVybHkgKHJlKW9wZW5lZCBhbmQKKyMgYXBwZW5kZWQgdG8gYnkgY29uZmlnLnN0YXR1cy4gIFdoZW4gY29taW5nIGJhY2sgdG8gY29uZmlndXJlLCB3ZQorIyBuZWVkIHRvIG1ha2UgdGhlIEZEIGF2YWlsYWJsZSBhZ2Fpbi4KK2lmIHRlc3QgIiRub19jcmVhdGUiICE9IHllczsgdGhlbgorICBhY19jc19zdWNjZXNzPToKKyAgYWNfY29uZmlnX3N0YXR1c19hcmdzPQorICB0ZXN0ICIkc2lsZW50IiA9IHllcyAmJgorICAgIGFjX2NvbmZpZ19zdGF0dXNfYXJncz0iJGFjX2NvbmZpZ19zdGF0dXNfYXJncyAtLXF1aWV0IgorICBleGVjIDU+L2Rldi9udWxsCisgICRTSEVMTCAkQ09ORklHX1NUQVRVUyAkYWNfY29uZmlnX3N0YXR1c19hcmdzIHx8IGFjX2NzX3N1Y2Nlc3M9ZmFsc2UKKyAgZXhlYyA1Pj5jb25maWcubG9nCisgICMgVXNlIHx8LCBub3QgJiYsIHRvIGF2b2lkIGV4aXRpbmcgZnJvbSB0aGUgaWYgd2l0aCAkPyA9IDEsIHdoaWNoCisgICMgd291bGQgbWFrZSBjb25maWd1cmUgZmFpbCBpZiB0aGlzIGlzIHRoZSBsYXN0IGluc3RydWN0aW9uLgorICAkYWNfY3Nfc3VjY2VzcyB8fCBhc19mbl9leGl0ICQ/CitmaQoraWYgdGVzdCAtbiAiJGFjX3VucmVjb2duaXplZF9vcHRzIiAmJiB0ZXN0ICIkZW5hYmxlX29wdGlvbl9jaGVja2luZyIgIT0gbm87IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mMjt9CitmaQorCmRpZmYgLS1naXQgYS9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvY29uZmlndXJlLmFjIGIvc2hhcmUvbGlidG9vbC9saWJsdGRsL2NvbmZpZ3VyZS5hYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWM3NzY4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbGlidG9vbC9saWJsdGRsL2NvbmZpZ3VyZS5hYwpAQCAtMCwwICsxLDc1IEBACisjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gY3JlYXRlIGNvbmZpZ3VyZS4gLSotIGF1dG9jb25mIC0qLQorIworIyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDA0CisjCisjICAgIE5PVEU6IFRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRoaXMgZmlsZSBpcyBtYWludGFpbmVkIHdpdGggdGhlCisjICAgIEdOVSBMaWJ0b29sIHBhY2thZ2UuICBSZXBvcnQgYnVncyB0byBidWctbGlidG9vbEBnbnUub3JnLgorIworIyBHTlUgTGlibHRkbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisjIGlmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKKyMgaXMgYnVpbHQgdXNpbmcgR05VIGxpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCisjIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIworIyBHTlUgTGlibHRkbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIEdOVSBMaWJsdGRsOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIGEKKyMgY29weSBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9sZ3BsLmh0bWwsCisjIG9yIG9idGFpbmVkIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisjIyMjCisKKyMgVGhpcyBjb25maWd1cmUuYWMgaXMgbm90IHVzZWQgYXQgYWxsIGJ5IHRoZSBsaWJ0b29sIGJvb3RzdHJhcCwgYnV0CisjIGlzIGNvcGllZCB0byB0aGUgbHRkbCBzdWJkaXJlY3RvcnkgaWYgeW91IGxpYnRvb2xpemUgLS1sdGRsIHlvdXIgb3duCisjIHByb2plY3QuICBBZGRpbmcgTFRfV0lUSF9MVERMIHRvIHlvdXIgcHJvamVjdCBjb25maWd1cmUuYWMgd2lsbCB0aGVuCisjIGNvbmZpZ3VyZSB0aGlzIGRpcmVjdG9yeSBpZiB5b3VyIHVzZXIgZG9lc24ndCB3YW50IHRvIHVzZSB0aGUgaW5zdGFsbGVkCisjIGxpYmx0ZGwuCisKK0FDX1BSRVJFUSgyLjU5KWRubCBXZSB1c2UgQVNfSEVMUF9TVFJJTkcKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEF1dG9jb25mIGluaXRpYWxpc2F0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCitBQ19JTklUKFtsaWJsdGRsXSwgWzIuMi4xMF0sIFtidWctbGlidG9vbEBnbnUub3JnXSkKK0FDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaDpjb25maWctaC5pbl0pCitBQ19DT05GSUdfU1JDRElSKFtsdGRsLmNdKQorQUNfQ09ORklHX0FVWF9ESVIoW2NvbmZpZ10pCitBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCitMVF9DT05GSUdfTFRETF9ESVIoWy5dKSAjIEkgYW0gbWUhCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBBdXRvbWFrZSBJbml0aWFsaXNhdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitBTV9JTklUX0FVVE9NQUtFKFtnbnVdKQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIExpYnRvb2wgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK3BrZ2RhdGFkaXI9JyR7ZGF0YWRpcn0nIi8ke1BBQ0tBR0V9IgorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBMaWJ0b29sIGluaXRpYWxpc2F0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK0xUX0lOSVQoW2Rsb3BlbiB3aW4zMi1kbGxdKQorX0xURExfU0VUVVAKKworCisjIyAtLS0tLS0tLSAjIworIyMgT3V0cHV0cy4gIyMKKyMjIC0tLS0tLS0tICMjCitBQ19DT05GSUdfRklMRVMoW01ha2VmaWxlXSkKK0FDX09VVFBVVApkaWZmIC0tZ2l0IGEvc2hhcmUvbGlidG9vbC9saWJsdGRsL2xpYmx0ZGwvbHRfX2FsbG9jLmggYi9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvbGlibHRkbC9sdF9fYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2VkZGYwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbGlidG9vbC9saWJsdGRsL2xpYmx0ZGwvbHRfX2FsbG9jLmgKQEAgLTAsMCArMSw1OCBAQAorLyogbHRfX2FsbG9jLmggLS0gaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgaW50ZXJmYWNlCisKKyAgIENvcHlyaWdodCAoQykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDA0CisKKyAgIE5PVEU6IFRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRoaXMgZmlsZSBpcyBtYWludGFpbmVkIHdpdGggdGhlCisgICBHTlUgTGlidG9vbCBwYWNrYWdlLiAgUmVwb3J0IGJ1Z3MgdG8gYnVnLWxpYnRvb2xAZ251Lm9yZy4KKworR05VIExpYmx0ZGwgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAoraWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAoraXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCitzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworR05VIExpYmx0ZGwgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIEdOVSBMaWJsdGRsOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIGEKK2NvcHkgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGdwbC5odG1sLAorb3Igb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxICBVU0EKKyovCisKKyNpZiAhZGVmaW5lZChMVF9fQUxMT0NfSCkKKyNkZWZpbmUgTFRfX0FMTE9DX0ggMQorCisjaW5jbHVkZSAibHRfc3lzdGVtLmgiCisKK0xUX0JFR0lOX0NfREVDTFMKKworI2RlZmluZSBNQUxMT0ModHAsIG4pCQkodHAqKSBsdF9fbWFsbG9jKChuKSAqIHNpemVvZih0cCkpCisjZGVmaW5lIFJFQUxMT0ModHAsIG1lbSwgbikJKHRwKikgbHRfX3JlYWxsb2MoKG1lbSksIChuKSAqIHNpemVvZih0cCkpCisjZGVmaW5lIEZSRUUobWVtKQkJCQkJTFRfU1RNVF9TVEFSVCB7CVwKKwlpZiAobWVtKSB7IGZyZWUgKCh2b2lkICopbWVtKTsgbWVtID0gTlVMTDsgfQl9IExUX1NUTVRfRU5ECisjZGVmaW5lIE1FTVJFQVNTSUdOKHAsIHEpCQkJCUxUX1NUTVRfU1RBUlQgewlcCisJaWYgKChwKSAhPSAocSkpIHsgaWYgKHApIGZyZWUgKHApOyAocCkgPSAocSk7IChxKSA9IDA7IH0JXAorCQkJCQkJCQl9IExUX1NUTVRfRU5ECisKKy8qIElmIHNldCwgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBoYXMgZmFpbGVkLiAgKi8KK0xUX1NDT1BFIHZvaWQgKCpsdF9fYWxsb2NfZGllKSAodm9pZCk7CisKK0xUX1NDT1BFIHZvaWQgKmx0X19tYWxsb2MgKHNpemVfdCBuKTsKK0xUX1NDT1BFIHZvaWQgKmx0X196YWxsb2MgKHNpemVfdCBuKTsKK0xUX1NDT1BFIHZvaWQgKmx0X19yZWFsbG9jICh2b2lkICptZW0sIHNpemVfdCBuKTsKK0xUX1NDT1BFIHZvaWQgKmx0X19tZW1kdXAgKHZvaWQgY29uc3QgKm1lbSwgc2l6ZV90IG4pOworCitMVF9TQ09QRSBjaGFyICpsdF9fc3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpOworCitMVF9FTkRfQ19ERUNMUworCisjZW5kaWYgLyohZGVmaW5lZChMVF9fQUxMT0NfSCkqLwpkaWZmIC0tZ2l0IGEvc2hhcmUvbGlidG9vbC9saWJsdGRsL2xpYmx0ZGwvbHRfX2RpcmVudC5oIGIvc2hhcmUvbGlidG9vbC9saWJsdGRsL2xpYmx0ZGwvbHRfX2RpcmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMjRmODIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvbGlibHRkbC9sdF9fZGlyZW50LmgKQEAgLTAsMCArMSw4NyBAQAorLyogbHRfX2RpcmVudC5oIC0tIGludGVybmFsIGRpcmVjdG9yeSBlbnRyeSBzY2FubmluZyBpbnRlcmZhY2UKKworICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDA0LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBCb2IgRnJpZXNlbmhhaG4sIDIwMDEKKworICAgTk9URTogVGhlIGNhbm9uaWNhbCBzb3VyY2Ugb2YgdGhpcyBmaWxlIGlzIG1haW50YWluZWQgd2l0aCB0aGUKKyAgIEdOVSBMaWJ0b29sIHBhY2thZ2UuICBSZXBvcnQgYnVncyB0byBidWctbGlidG9vbEBnbnUub3JnLgorCitHTlUgTGlibHRkbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgordmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCitpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CitpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKK3NhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCitHTlUgTGlibHRkbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFsb25nIHdpdGggR05VIExpYmx0ZGw7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgYQorY29weSBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9sZ3BsLmh0bWwsCitvciBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgIFVTQQorKi8KKworI2lmICFkZWZpbmVkKExUX19ESVJFTlRfSCkKKyNkZWZpbmUgTFRfX0RJUkVOVF9IIDEKKworI2lmIGRlZmluZWQoTFRfQ09ORklHX0gpCisjICBpbmNsdWRlIExUX0NPTkZJR19ICisjZWxzZQorIyAgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImx0X3N5c3RlbS5oIgorCisjaWZkZWYgSEFWRV9ESVJFTlRfSAorLyogV2UgaGF2ZSBhIGZ1bGx5IG9wZXJhdGlvbmFsIGRpcmVudCBzdWJzeXN0ZW0uICAqLworIyAgaW5jbHVkZSA8ZGlyZW50Lmg+CisjICBkZWZpbmUgRF9OQU1MRU4oZGlyZW50KSAoc3RybGVuKChkaXJlbnQpLT5kX25hbWUpKQorCisjZWxpZiBkZWZpbmVkIF9fV0lORE9XU19fCisvKiBVc2Ugc29tZSB3cmFwcGVyIGNvZGUgdG8gZW11bGF0ZSBkaXJlbnQgb24gd2luZG93cy4uICAqLworIyAgZGVmaW5lIFdJTkRPV1NfRElSRU5UX0VNVUxBVElPTiAxCisKKyMgIGluY2x1ZGUgPHdpbmRvd3MuaD4KKworIyAgZGVmaW5lIERfTkFNTEVOKGRpcmVudCkJKHN0cmxlbigoZGlyZW50KS0+ZF9uYW1lKSkKKyMgIGRlZmluZSBkaXJlbnQJCWx0X19kaXJlbnQKKyMgIGRlZmluZSBESVIJCQlsdF9fRElSCisjICBkZWZpbmUgb3BlbmRpcgkJbHRfX29wZW5kaXIKKyMgIGRlZmluZSByZWFkZGlyCQlsdF9fcmVhZGRpcgorIyAgZGVmaW5lIGNsb3NlZGlyCQlsdF9fY2xvc2VkaXIKKworTFRfQkVHSU5fQ19ERUNMUworCitzdHJ1Y3QgZGlyZW50Cit7CisgIGNoYXIgZF9uYW1lW0xUX0ZJTEVOQU1FX01BWF07CisgIGludCAgZF9uYW1sZW47Cit9OworCit0eXBlZGVmIHN0cnVjdAoreworICBIQU5ETEUgaFNlYXJjaDsKKyAgV0lOMzJfRklORF9EQVRBIFdpbjMyRmluZERhdGE7CisgIEJPT0wgZmlyc3R0aW1lOworICBzdHJ1Y3QgZGlyZW50IGZpbGVfaW5mbzsKK30gRElSOworCisKK0xUX1NDT1BFIERJUiAqCQlvcGVuZGlyCQkoY29uc3QgY2hhciAqcGF0aCk7CitMVF9TQ09QRSBzdHJ1Y3QgZGlyZW50ICpyZWFkZGlyCQkoRElSICplbnRyeSk7CitMVF9TQ09QRSB2b2lkCQljbG9zZWRpcgkoRElSICplbnRyeSk7CisKK0xUX0VORF9DX0RFQ0xTCisKKyNlbHNlIC8qICFkZWZpbmVkKF9fV0lORE9XU19fKSovCitFUlJPUiAtIGNhbm5vdCBmaW5kIGRpcmVudAorI2VuZGlmIC8qIWRlZmluZWQoX19XSU5ET1dTX18pKi8KKworI2VuZGlmIC8qIWRlZmluZWQoTFRfX0RJUkVOVF9IKSovCmRpZmYgLS1naXQgYS9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvbGlibHRkbC9sdF9fZ2xpYmMuaCBiL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9saWJsdGRsL2x0X19nbGliYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyODQ3NzMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvbGlibHRkbC9sdF9fZ2xpYmMuaApAQCAtMCwwICsxLDgzIEBACisvKiBsdF9fZ2xpYmMuaCAtLSBzdXBwb3J0IGZvciBub24gZ2xpYmMgZW52aXJvbm1lbnRzCisKKyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDA0CisKKyAgIE5PVEU6IFRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRoaXMgZmlsZSBpcyBtYWludGFpbmVkIHdpdGggdGhlCisgICBHTlUgTGlidG9vbCBwYWNrYWdlLiAgUmVwb3J0IGJ1Z3MgdG8gYnVnLWxpYnRvb2xAZ251Lm9yZy4KKworR05VIExpYmx0ZGwgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAoraWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAoraXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCitzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworR05VIExpYmx0ZGwgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIEdOVSBMaWJsdGRsOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIGEKK2NvcHkgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGdwbC5odG1sLAorb3Igb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxICBVU0EKKyovCisKKyNpZiAhZGVmaW5lZChMVF9fR0xJQkNfSCkKKyNkZWZpbmUgTFRfX0dMSUJDX0ggMQorCisjaWYgZGVmaW5lZChMVF9DT05GSUdfSCkKKyMgIGluY2x1ZGUgTFRfQ09ORklHX0gKKyNlbHNlCisjICBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoSEFWRV9BUkdaX0gpIHx8ICFkZWZpbmVkKEhBVkVfV09SS0lOR19BUkdaKQorLyogUmVkZWZpbmUgYW55IGdsaWJjIHN5bWJvbHMgd2UgcmVpbXBsZW1lbnQgdG8gaW1wb3J0IHRoZQorICAgaW1wbGVtZW50YXRpb25zIGludG8gb3VyIGx0X18gbmFtZXNwYWNlIHNvIHdlIGRvbid0IGV2ZXIKKyAgIGNsYXNoIHdpdGggdGhlIHN5c3RlbSBsaWJyYXJ5IGlmIG91ciBjbGllbnRzIHVzZSBhcmd6XyoKKyAgIGZyb20gdGhlcmUgaW4gYWRkaXRpb24gdG8gbGlibHRkbC4gICovCisjICB1bmRlZiAgYXJnel9hcHBlbmQKKyMgIGRlZmluZSBhcmd6X2FwcGVuZAkJbHRfX2FyZ3pfYXBwZW5kCisjICB1bmRlZiAgYXJnel9jcmVhdGVfc2VwCisjICBkZWZpbmUgYXJnel9jcmVhdGVfc2VwCWx0X19hcmd6X2NyZWF0ZV9zZXAKKyMgIHVuZGVmICBhcmd6X2luc2VydAorIyAgZGVmaW5lIGFyZ3pfaW5zZXJ0CQlsdF9fYXJnel9pbnNlcnQKKyMgIHVuZGVmICBhcmd6X25leHQKKyMgIGRlZmluZSBhcmd6X25leHQJCWx0X19hcmd6X25leHQKKyMgIHVuZGVmICBhcmd6X3N0cmluZ2lmeQorIyAgZGVmaW5lIGFyZ3pfc3RyaW5naWZ5CWx0X19hcmd6X3N0cmluZ2lmeQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgPGFyZ3ouaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworIyBkZWZpbmUgc2xpc3RfY29uY2F0CWx0X19zbGlzdF9jb25jYXQKKyMgZGVmaW5lIHNsaXN0X2NvbnMJbHRfX3NsaXN0X2NvbnMKKyMgZGVmaW5lIHNsaXN0X2RlbGV0ZQlsdF9fc2xpc3RfZGVsZXRlCisjIGRlZmluZSBzbGlzdF9yZW1vdmUJbHRfX3NsaXN0X3JlbW92ZQorIyBkZWZpbmUgc2xpc3RfcmV2ZXJzZQlsdF9fc2xpc3RfcmV2ZXJzZQorIyBkZWZpbmUgc2xpc3Rfc29ydAlsdF9fc2xpc3Rfc29ydAorIyBkZWZpbmUgc2xpc3RfdGFpbAlsdF9fc2xpc3RfdGFpbAorIyBkZWZpbmUgc2xpc3RfbnRoCWx0X19zbGlzdF9udGgKKyMgZGVmaW5lIHNsaXN0X2ZpbmQJbHRfX3NsaXN0X2ZpbmQKKyMgZGVmaW5lIHNsaXN0X2xlbmd0aAlsdF9fc2xpc3RfbGVuZ3RoCisjIGRlZmluZSBzbGlzdF9mb3JlYWNoCWx0X19zbGlzdF9mb3JlYWNoCisjIGRlZmluZSBzbGlzdF9ib3gJbHRfX3NsaXN0X2JveAorIyBkZWZpbmUgc2xpc3RfdW5ib3gJbHRfX3NsaXN0X3VuYm94CisKKyNpbmNsdWRlIDxzbGlzdC5oPgorCisjZW5kaWYgLyohZGVmaW5lZChMVF9fR0xJQkNfSCkqLwpkaWZmIC0tZ2l0IGEvc2hhcmUvbGlidG9vbC9saWJsdGRsL2xpYmx0ZGwvbHRfX3ByaXZhdGUuaCBiL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9saWJsdGRsL2x0X19wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRjNGEzZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9saWJsdGRsL2x0X19wcml2YXRlLmgKQEAgLTAsMCArMSwxNDkgQEAKKy8qIGx0X19wcml2YXRlLmggLS0gaW50ZXJuYWwgYXBpcyBmb3IgbGlibHRkbAorCisgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAwNAorCisgICBOT1RFOiBUaGUgY2Fub25pY2FsIHNvdXJjZSBvZiB0aGlzIGZpbGUgaXMgbWFpbnRhaW5lZCB3aXRoIHRoZQorICAgR05VIExpYnRvb2wgcGFja2FnZS4gIFJlcG9ydCBidWdzIHRvIGJ1Zy1saWJ0b29sQGdudS5vcmcuCisKK1RoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgordmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCitpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CitpcyBidWlsdCB1c2luZyBHTlUgbGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKK3NhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCitHTlUgTGlibHRkbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFsb25nIHdpdGggR05VIExpYmx0ZGw7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgYQorY29weSBjb24gYmUgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9sZ3BsLmh0bWwsCitvciBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgIFVTQQorKi8KKworI2lmICFkZWZpbmVkKExUX19QUklWQVRFX0gpCisjZGVmaW5lIExUX19QUklWQVRFX0ggMQorCisjaWYgZGVmaW5lZChMVF9DT05GSUdfSCkKKyMgIGluY2x1ZGUgTFRfQ09ORklHX0gKKyNlbHNlCisjICBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKEhBVkVfVU5JU1REX0gpCisjICBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisvKiBJbXBvcnQgaW50ZXJuYWwgaW50ZXJmYWNlcy4uLiAgKi8KKyNpbmNsdWRlICJsdF9fYWxsb2MuaCIKKyNpbmNsdWRlICJsdF9fZGlyZW50LmgiCisjaW5jbHVkZSAibHRfX3N0cmwuaCIKKyNpbmNsdWRlICJsdF9fZ2xpYmMuaCIKKworLyogLi4uYW5kIGFsbCBleHBvcnRlZCBpbnRlcmZhY2VzLiAgKi8KKyNpbmNsdWRlICJsdGRsLmgiCisKKyNpZiBkZWZpbmVkKFdJVEhfRE1BTExPQykKKyMgIGluY2x1ZGUgPGRtYWxsb2MuaD4KKyNlbmRpZgorCisvKiBETEwgYnVpbGRpbmcgc3VwcG9ydCBvbiB3aW4zMiBob3N0czsgIG1vc3RseSB0byB3b3JrYXJvdW5kIHRoZWlyCisgICByaWRpY3Vsb3VzIGltcGxlbWVudGF0aW9uIG9mIGRhdGEgc3ltYm9sIGV4cG9ydGluZy4gKi8KKyNpZm5kZWYgTFRfR0xPQkFMX0RBVEEKKyMgaWYgZGVmaW5lZChfX1dJTkRPV1NfXykgfHwgZGVmaW5lZChfX0NZR1dJTl9fKQorIyAgaWYgZGVmaW5lZChETExfRVhQT1JUKQkvKiBkZWZpbmVkIGJ5IGxpYnRvb2wgKGlmIHJlcXVpcmVkKSAqLworIyAgIGRlZmluZSBMVF9HTE9CQUxfREFUQQlfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmbmRlZiBMVF9HTE9CQUxfREFUQQorIyAgZGVmaW5lIExUX0dMT0JBTF9EQVRBCS8qIHN0YXRpYyBsaW5raW5nIG9yICFfX1dJTkRPV1NfXyAqLworIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgX19hdHRyaWJ1dGVfXworIyBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA4KSB8fCBfX1NUUklDVF9BTlNJX18KKyMgIGRlZmluZSBfX2F0dHJpYnV0ZV9fKHgpCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBMVF9fVU5VU0VECisjIGRlZmluZSBMVF9fVU5VU0VEIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKKyNlbmRpZgorCisKK0xUX0JFR0lOX0NfREVDTFMKKworI2lmICFkZWZpbmVkKGVycm5vKQorZXh0ZXJuIGludCBlcnJubzsKKyNlbmRpZgorCitMVF9TQ09QRSB2b2lkCWx0X19hbGxvY19kaWVfY2FsbGJhY2sgKHZvaWQpOworCisKKy8qIEZvciByZWFkYWJpbGl0eTogICovCisjZGVmaW5lIHN0cm5lcShzMSwgczIpCShzdHJjbXAoKHMxKSwgKHMyKSkgIT0gMCkKKyNkZWZpbmUgc3RyZXEoczEsIHMyKQkoIXN0cmNtcCgoczEpLCAoczIpKSkKKworCisKKy8qIC0tLSBPUEFRVUUgU1RSVUNUVVJFUyBERUNMQVJFRCBJTiBMVERMLkggLS0tICovCisKKy8qIFRoaXMgdHlwZSBpcyB1c2VkIGZvciB0aGUgYXJyYXkgb2YgaW50ZXJmYWNlIGRhdGEgc2V0cyBpbiBlYWNoIGhhbmRsZXIuICovCit0eXBlZGVmIHN0cnVjdCB7CisgIGx0X2RsaW50ZXJmYWNlX2lkCWtleTsKKyAgdm9pZCAqCQlkYXRhOworfSBsdF9pbnRlcmZhY2VfZGF0YTsKKworc3RydWN0IGx0X19oYW5kbGUgeworICBsdF9kbGhhbmRsZQkJbmV4dDsKKyAgY29uc3QgbHRfZGx2dGFibGUgKgl2dGFibGU7CQkvKiBkbG9wZW5pbmcgaW50ZXJmYWNlICovCisgIGx0X2RsaW5mbwkJaW5mbzsJCS8qIHVzZXIgdmlzaWJsZSBmaWVsZHMgKi8KKyAgaW50CQkJZGVwY291bnQ7CS8qIG51bWJlciBvZiBkZXBlbmRlbmNpZXMgKi8KKyAgbHRfZGxoYW5kbGUgKgkJZGVwbGliczsJLyogZGVwZW5kZW5jaWVzICovCisgIGx0X21vZHVsZQkJbW9kdWxlOwkJLyogc3lzdGVtIG1vZHVsZSBoYW5kbGUgKi8KKyAgdm9pZCAqCQlzeXN0ZW07CQkvKiBzeXN0ZW0gc3BlY2lmaWMgZGF0YSAqLworICBsdF9pbnRlcmZhY2VfZGF0YSAqCWludGVyZmFjZV9kYXRhOwkvKiBwZXIgY2FsbGVyIGFzc29jaWF0ZWQgZGF0YSAqLworICBpbnQJCQlmbGFnczsJCS8qIHZhcmlvdXMgYm9vbGVhbiBzdGF0cyAqLworfTsKKworc3RydWN0IGx0X19hZHZpc2UgeworICB1bnNpZ25lZCBpbnQJdHJ5X2V4dDoxOwkvKiB0cnkgc3lzdGVtIGxpYnJhcnkgZXh0ZW5zaW9ucy4gICovCisgIHVuc2lnbmVkIGludAlpc19yZXNpZGVudDoxOwkvKiBtb2R1bGUgY2FuJ3QgYmUgdW5sb2FkZWQuICovCisgIHVuc2lnbmVkIGludAlpc19zeW1nbG9iYWw6MTsJLyogbW9kdWxlIHN5bWJvbHMgY2FuIHNhdGlzZnkKKwkJCQkgICBzdWJzZXF1ZW50bHkgbG9hZGVkIG1vZHVsZXMuICAqLworICB1bnNpZ25lZCBpbnQJaXNfc3ltbG9jYWw6MTsJLyogbW9kdWxlIHN5bWJvbHMgYXJlIG9ubHkgYXZhaWxhYmxlCisJCQkJICAgbG9jYWxseS4gKi8KKyAgdW5zaWduZWQgaW50CXRyeV9wcmVsb2FkX29ubHk6MTsvKiBvbmx5IHByZWxvYWRlZCBtb2R1bGVzIHdpbGwgYmUgdHJpZWQuICovCit9OworCisvKiAtLS0gRVJST1IgSEFORExJTkcgLS0tICovCisKKy8qIEV4dHJhY3QgdGhlIGRpYWdub3N0aWMgc3RyaW5ncyBmcm9tIHRoZSBlcnJvciB0YWJsZSBtYWNybyBpbiB0aGUgc2FtZQorICAgb3JkZXIgYXMgdGhlIGVudW1lcmF0ZWQgaW5kaWNlcyBpbiBsdF9lcnJvci5oLiAqLworCisjZGVmaW5lIExUX19TVFJFUlJPUihuYW1lKQlsdF9fZXJyb3Jfc3RyaW5nKExUX0NPTkMoTFRfRVJST1JfLG5hbWUpKQorCisjZGVmaW5lIExUX19HRVRFUlJPUihsdmFsdWUpCSAgICAgIChsdmFsdWUpID0gbHRfX2dldF9sYXN0X2Vycm9yKCkKKyNkZWZpbmUgTFRfX1NFVEVSUk9SU1RSKGVycm9ybXNnKSAgICAgbHRfX3NldF9sYXN0X2Vycm9yKGVycm9ybXNnKQorI2RlZmluZSBMVF9fU0VURVJST1IoZXJyb3Jjb2RlKQkgICAgICBMVF9fU0VURVJST1JTVFIoTFRfX1NUUkVSUk9SKGVycm9yY29kZSkpCisKK0xUX1NDT1BFIGNvbnN0IGNoYXIgKmx0X19lcnJvcl9zdHJpbmcJKGludCBlcnJvcmNvZGUpOworTFRfU0NPUEUgY29uc3QgY2hhciAqbHRfX2dldF9sYXN0X2Vycm9yCSh2b2lkKTsKK0xUX1NDT1BFIGNvbnN0IGNoYXIgKmx0X19zZXRfbGFzdF9lcnJvcgkoY29uc3QgY2hhciAqZXJyb3Jtc2cpOworCitMVF9FTkRfQ19ERUNMUworCisjZW5kaWYgLyohZGVmaW5lZChMVF9fUFJJVkFURV9IKSovCmRpZmYgLS1naXQgYS9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvbGlibHRkbC9sdF9fc3RybC5oIGIvc2hhcmUvbGlidG9vbC9saWJsdGRsL2xpYmx0ZGwvbHRfX3N0cmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Nzk5ZGM4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbGlidG9vbC9saWJsdGRsL2xpYmx0ZGwvbHRfX3N0cmwuaApAQCAtMCwwICsxLDUzIEBACisvKiBsdF9fc3RybC5oIC0tIHNpemUtYm91bmRlZCBzdHJpbmcgY29weWluZyBhbmQgY29uY2F0ZW5hdGlvbgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IEJvYiBGcmllc2VuaGFobiwgMjAwNAorCisgICBOT1RFOiBUaGUgY2Fub25pY2FsIHNvdXJjZSBvZiB0aGlzIGZpbGUgaXMgbWFpbnRhaW5lZCB3aXRoIHRoZQorICAgR05VIExpYnRvb2wgcGFja2FnZS4gIFJlcG9ydCBidWdzIHRvIGJ1Zy1saWJ0b29sQGdudS5vcmcuCisKK0dOVSBMaWJsdGRsIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCit2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK0FzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK2lmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKK2lzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK0dOVSBMaWJsdGRsIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYWxvbmcgd2l0aCBHTlUgTGlibHRkbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCBhCitjb3B5IGNhbiBiZSBkb3dubG9hZGVkIGZyb20gIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9sZ3BsLmh0bWwsCitvciBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZiAhZGVmaW5lZChMVF9fU1RSTF9IKQorI2RlZmluZSBMVF9fU1RSTF9IIDEKKworI2lmIGRlZmluZWQoTFRfQ09ORklHX0gpCisjICBpbmNsdWRlIExUX0NPTkZJR19ICisjZWxzZQorIyAgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImx0X3N5c3RlbS5oIgorCisjaWYgIWRlZmluZWQoSEFWRV9TVFJMQ0FUKQorIyAgZGVmaW5lIHN0cmxjYXQoZHN0LHNyYyxkc3RzaXplKSBsdF9zdHJsY2F0KGRzdCxzcmMsZHN0c2l6ZSkKK0xUX1NDT1BFIHNpemVfdCBsdF9zdHJsY2F0KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBjb25zdCBzaXplX3QgZHN0c2l6ZSk7CisjZW5kaWYgLyogIWRlZmluZWQoSEFWRV9TVFJMQ0FUKSAqLworCisjaWYgIWRlZmluZWQoSEFWRV9TVFJMQ1BZKQorIyAgZGVmaW5lIHN0cmxjcHkoZHN0LHNyYyxkc3RzaXplKSBsdF9zdHJsY3B5KGRzdCxzcmMsZHN0c2l6ZSkKK0xUX1NDT1BFIHNpemVfdCBsdF9zdHJsY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBjb25zdCBzaXplX3QgZHN0c2l6ZSk7CisjZW5kaWYgLyogIWRlZmluZWQoSEFWRV9TVFJMQ1BZKSAqLworCisjZW5kaWYgLyohZGVmaW5lZChMVF9fU1RSTF9IKSovCmRpZmYgLS1naXQgYS9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvbGlibHRkbC9sdF9kbGxvYWRlci5oIGIvc2hhcmUvbGlidG9vbC9saWJsdGRsL2xpYmx0ZGwvbHRfZGxsb2FkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODlmZDBkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbGlidG9vbC9saWJsdGRsL2xpYmx0ZGwvbHRfZGxsb2FkZXIuaApAQCAtMCwwICsxLDkwIEBACisvKiBsdF9kbGxvYWRlci5oIC0tIGR5bmFtaWMgbGlicmFyeSBsb2FkZXIgaW50ZXJmYWNlCisKKyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDA0CisKKyAgIE5PVEU6IFRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRoaXMgZmlsZSBpcyBtYWludGFpbmVkIHdpdGggdGhlCisgICBHTlUgTGlidG9vbCBwYWNrYWdlLiAgUmVwb3J0IGJ1Z3MgdG8gYnVnLWxpYnRvb2xAZ251Lm9yZy4KKworR05VIExpYmx0ZGwgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAoraWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAoraXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCitzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworR05VIExpYmx0ZGwgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIEdOVSBMaWJsdGRsOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIGEKK2NvcHkgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSAgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwuaHRtbCwKK29yIG9idGFpbmVkIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmICFkZWZpbmVkKExUX0RMTE9BREVSX0gpCisjZGVmaW5lIExUX0RMTE9BREVSX0ggMQorCisjaW5jbHVkZSA8bGlibHRkbC9sdF9zeXN0ZW0uaD4KKworTFRfQkVHSU5fQ19ERUNMUworCit0eXBlZGVmCXZvaWQgKglsdF9kbGxvYWRlcjsKK3R5cGVkZWYgdm9pZCAqCWx0X21vZHVsZTsKK3R5cGVkZWYgdm9pZCAqCWx0X3VzZXJfZGF0YTsKK3R5cGVkZWYgc3RydWN0IGx0X19hZHZpc2UgKglsdF9kbGFkdmlzZTsKKworLyogRnVuY3Rpb24gcG9pbnRlciB0eXBlcyBmb3IgbW9kdWxlIGxvYWRlciB2dGFibGUgZW50cmllczogICovCit0eXBlZGVmIGx0X21vZHVsZSAgIGx0X21vZHVsZV9vcGVuCShsdF91c2VyX2RhdGEgZGF0YSwKKwkJCQkJIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCQkgbHRfZGxhZHZpc2UgYWR2aXNlKTsKK3R5cGVkZWYgaW50CSAgICBsdF9tb2R1bGVfY2xvc2UJKGx0X3VzZXJfZGF0YSBkYXRhLAorCQkJCQkgbHRfbW9kdWxlIG1vZHVsZSk7Cit0eXBlZGVmIHZvaWQgKgkgICAgbHRfZmluZF9zeW0JCShsdF91c2VyX2RhdGEgZGF0YSwgbHRfbW9kdWxlIG1vZHVsZSwKKwkJCQkJIGNvbnN0IGNoYXIgKnN5bWJvbG5hbWUpOwordHlwZWRlZiBpbnQJICAgIGx0X2RsbG9hZGVyX2luaXQJKGx0X3VzZXJfZGF0YSBkYXRhKTsKK3R5cGVkZWYgaW50CSAgICBsdF9kbGxvYWRlcl9leGl0CShsdF91c2VyX2RhdGEgZGF0YSk7CisKKy8qIERlZmF1bHQgcHJpb3JpdHkgaXMgTFRfRExMT0FERVJfUFJFUEVORCBpZiBub25lIGlzIGV4cGxpY2l0bHkgZ2l2ZW4uICAqLwordHlwZWRlZiBlbnVtIHsKKyAgTFRfRExMT0FERVJfUFJFUEVORCA9IDAsIExUX0RMTE9BREVSX0FQUEVORAorfSBsdF9kbGxvYWRlcl9wcmlvcml0eTsKKworLyogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyBhIG1vZHVsZSBsb2FkZXIsIGFzIHBvcHVsYXRlZCBieSB0aGUgZ2V0X3Z0YWJsZQorICAgZW50cnkgcG9pbnQgb2YgZWFjaCBsb2FkZXIuICAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICoJCW5hbWU7CisgIGNvbnN0IGNoYXIgKgkJc3ltX3ByZWZpeDsKKyAgbHRfbW9kdWxlX29wZW4gKgltb2R1bGVfb3BlbjsKKyAgbHRfbW9kdWxlX2Nsb3NlICoJbW9kdWxlX2Nsb3NlOworICBsdF9maW5kX3N5bSAqCQlmaW5kX3N5bTsKKyAgbHRfZGxsb2FkZXJfaW5pdCAqCWRsbG9hZGVyX2luaXQ7CisgIGx0X2RsbG9hZGVyX2V4aXQgKglkbGxvYWRlcl9leGl0OworICBsdF91c2VyX2RhdGEJCWRsbG9hZGVyX2RhdGE7CisgIGx0X2RsbG9hZGVyX3ByaW9yaXR5CXByaW9yaXR5OworfSBsdF9kbHZ0YWJsZTsKKworTFRfU0NPUEUgaW50CQlsdF9kbGxvYWRlcl9hZGQJICAgKGNvbnN0IGx0X2RsdnRhYmxlICp2dGFibGUpOworTFRfU0NPUEUgbHRfZGxsb2FkZXIJbHRfZGxsb2FkZXJfbmV4dCAgIChjb25zdCBsdF9kbGxvYWRlciBsb2FkZXIpOworCitMVF9TQ09QRSBsdF9kbHZ0YWJsZSAqCWx0X2RsbG9hZGVyX3JlbW92ZQkoY29uc3QgY2hhciAqbmFtZSk7CitMVF9TQ09QRSBjb25zdCBsdF9kbHZ0YWJsZSAqbHRfZGxsb2FkZXJfZmluZAkoY29uc3QgY2hhciAqbmFtZSk7CitMVF9TQ09QRSBjb25zdCBsdF9kbHZ0YWJsZSAqbHRfZGxsb2FkZXJfZ2V0CShsdF9kbGxvYWRlciBsb2FkZXIpOworCisKKy8qIFR5cGUgb2YgYSBmdW5jdGlvbiB0byBnZXQgYSBsb2FkZXIncyB2dGFibGU6ICAqLwordHlwZWRlZiAgY29uc3QgbHRfZGx2dGFibGUgKmx0X2dldF92dGFibGUJKGx0X3VzZXJfZGF0YSBkYXRhKTsKKworI2lmZGVmIExUX0RFQlVHX0xPQURFUlMKK0xUX1NDT1BFIHZvaWQJCWx0X2RsbG9hZGVyX2R1bXAJKHZvaWQpOworI2VuZGlmCisKK0xUX0VORF9DX0RFQ0xTCisKKyNlbmRpZiAvKiFkZWZpbmVkKExUX0RMTE9BREVSX0gpKi8KZGlmZiAtLWdpdCBhL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9saWJsdGRsL2x0X2Vycm9yLmggYi9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvbGlibHRkbC9sdF9lcnJvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ODliM2EKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvbGlibHRkbC9sdF9lcnJvci5oCkBAIC0wLDAgKzEsODUgQEAKKy8qIGx0X2Vycm9yLmggLS0gZXJyb3IgcHJvcG9nYXRpb24gaW50ZXJmYWNlCisKKyAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwNCwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgVGhvbWFzIFRhbm5lciwgMTk5OQorCisgICBOT1RFOiBUaGUgY2Fub25pY2FsIHNvdXJjZSBvZiB0aGlzIGZpbGUgaXMgbWFpbnRhaW5lZCB3aXRoIHRoZQorICAgR05VIExpYnRvb2wgcGFja2FnZS4gIFJlcG9ydCBidWdzIHRvIGJ1Zy1saWJ0b29sQGdudS5vcmcuCisKK0dOVSBMaWJsdGRsIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCit2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK0FzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK2lmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKK2lzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK0dOVSBMaWJsdGRsIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYWxvbmcgd2l0aCBHTlUgTGlibHRkbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCBhCitjb3B5IGNhbiBiZSBkb3dubG9hZGVkIGZyb20gIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9sZ3BsLmh0bWwsCitvciBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKy8qIE9ubHkgaW5jbHVkZSB0aGlzIGhlYWRlciBmaWxlIG9uY2UuICovCisjaWYgIWRlZmluZWQoTFRfRVJST1JfSCkKKyNkZWZpbmUgTFRfRVJST1JfSCAxCisKKyNpbmNsdWRlIDxsaWJsdGRsL2x0X3N5c3RlbS5oPgorCitMVF9CRUdJTl9DX0RFQ0xTCisKKy8qIERlZmluaW5nIGVycm9yIHN0cmluZ3MgYWxvbmdzaWRlIHRoZWlyIHN5bWJvbGljIG5hbWVzIGluIGEgbWFjcm8gaW4KKyAgIHRoaXMgd2F5IGFsbG93cyB1cyB0byBleHBhbmQgdGhlIG1hY3JvIGluIGRpZmZlcmVudCBjb250ZXh0cyB3aXRoCisgICBjb25maWRlbmNlIHRoYXQgdGhlIGVudW1lcmF0aW9uIG9mIHN5bWJvbGljIG5hbWVzIHdpbGwgbWFwIGNvcnJlY3RseQorICAgb250byB0aGUgdGFibGUgb2YgZXJyb3Igc3RyaW5ncy4gIFwwIGlzIGFwcGVuZGVkIHRvIHRoZSBzdHJpbmdzIHRvCisgICBleHBpbGljaXRlbHkgaW5pdGlhbGl6ZSB0aGUgc3RyaW5nIHRlcm1pbmF0b3IuICovCisjZGVmaW5lIGx0X2RsZXJyb3JfdGFibGUJCQkJCQlcCisgICAgTFRfRVJST1IoVU5LTk9XTiwJCSAgICAidW5rbm93biBlcnJvclwwIikJCQlcCisgICAgTFRfRVJST1IoRExPUEVOX05PVF9TVVBQT1JURUQsICAiZGxvcGVuIHN1cHBvcnQgbm90IGF2YWlsYWJsZVwwIikJXAorICAgIExUX0VSUk9SKElOVkFMSURfTE9BREVSLAkgICAgImludmFsaWQgbG9hZGVyXDAiKQkJCVwKKyAgICBMVF9FUlJPUihJTklUX0xPQURFUiwJICAgICJsb2FkZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkXDAiKQlcCisgICAgTFRfRVJST1IoUkVNT1ZFX0xPQURFUiwJICAgICJsb2FkZXIgcmVtb3ZhbCBmYWlsZWRcMCIpCQlcCisgICAgTFRfRVJST1IoRklMRV9OT1RfRk9VTkQsCSAgICAiZmlsZSBub3QgZm91bmRcMCIpCQkJXAorICAgIExUX0VSUk9SKERFUExJQl9OT1RfRk9VTkQsCSAgICAiZGVwZW5kZW5jeSBsaWJyYXJ5IG5vdCBmb3VuZFwwIikJXAorICAgIExUX0VSUk9SKE5PX1NZTUJPTFMsCSAgICAibm8gc3ltYm9scyBkZWZpbmVkXDAiKQkJXAorICAgIExUX0VSUk9SKENBTk5PVF9PUEVOLAkgICAgImNhbid0IG9wZW4gdGhlIG1vZHVsZVwwIikJCVwKKyAgICBMVF9FUlJPUihDQU5OT1RfQ0xPU0UsCSAgICAiY2FuJ3QgY2xvc2UgdGhlIG1vZHVsZVwwIikJCVwKKyAgICBMVF9FUlJPUihTWU1CT0xfTk9UX0ZPVU5ELAkgICAgInN5bWJvbCBub3QgZm91bmRcMCIpCQlcCisgICAgTFRfRVJST1IoTk9fTUVNT1JZLAkJICAgICJub3QgZW5vdWdoIG1lbW9yeVwwIikJCVwKKyAgICBMVF9FUlJPUihJTlZBTElEX0hBTkRMRSwJICAgICJpbnZhbGlkIG1vZHVsZSBoYW5kbGVcMCIpCQlcCisgICAgTFRfRVJST1IoQlVGRkVSX09WRVJGTE9XLAkgICAgImludGVybmFsIGJ1ZmZlciBvdmVyZmxvd1wwIikJXAorICAgIExUX0VSUk9SKElOVkFMSURfRVJST1JDT0RFLAkgICAgImludmFsaWQgZXJyb3Jjb2RlXDAiKQkJXAorICAgIExUX0VSUk9SKFNIVVRET1dOLAkJICAgICJsaWJyYXJ5IGFscmVhZHkgc2h1dGRvd25cMCIpCVwKKyAgICBMVF9FUlJPUihDTE9TRV9SRVNJREVOVF9NT0RVTEUsICJjYW4ndCBjbG9zZSByZXNpZGVudCBtb2R1bGVcMCIpCVwKKyAgICBMVF9FUlJPUihJTlZBTElEX01VVEVYX0FSR1MsICAgICJpbnRlcm5hbCBlcnJvciAoY29kZSB3aXRoZHJhd24pXDAiKVwKKyAgICBMVF9FUlJPUihJTlZBTElEX1BPU0lUSU9OLAkgICAgImludmFsaWQgc2VhcmNoIHBhdGggaW5zZXJ0IHBvc2l0aW9uXDAiKVwKKyAgICBMVF9FUlJPUihDT05GTElDVElOR19GTEFHUywJICAgICJzeW1ib2wgdmlzaWJpbGl0eSBjYW4gYmUgZ2xvYmFsIG9yIGxvY2FsXDAiKQorCisvKiBFbnVtZXJhdGUgdGhlIHN5bWJvbGljIGVycm9yIG5hbWVzLiAqLworZW51bSB7CisjZGVmaW5lIExUX0VSUk9SKG5hbWUsIGRpYWdub3N0aWMpCUxUX0NPTkMoTFRfRVJST1JfLCBuYW1lKSwKKwlsdF9kbGVycm9yX3RhYmxlCisjdW5kZWYgTFRfRVJST1IKKworCUxUX0VSUk9SX01BWAorfTsKKworLyogU2hvdWxkIGJlIG1heCBvZiB0aGUgZXJyb3Igc3RyaW5nIGxlbmd0aHMgYWJvdmUgKHBsdXMgb25lIGZvciBDKyspICovCisjZGVmaW5lIExUX0VSUk9SX0xFTl9NQVggKDQxKQorCisvKiBUaGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgdXNlZnVsIGZyb20gaW5zaWRlIGN1c3RvbSBtb2R1bGUgbG9hZGVycy4gKi8KK0xUX1NDT1BFIGludAlsdF9kbGFkZGVycm9yCShjb25zdCBjaGFyICpkaWFnbm9zdGljKTsKK0xUX1NDT1BFIGludAlsdF9kbHNldGVycm9yCShpbnQgZXJyb3Jjb2RlKTsKKworCitMVF9FTkRfQ19ERUNMUworCisjZW5kaWYgLyohZGVmaW5lZChMVF9FUlJPUl9IKSovCmRpZmYgLS1naXQgYS9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvbGlibHRkbC9sdF9zeXN0ZW0uaCBiL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9saWJsdGRsL2x0X3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYjJhYjYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvbGlibHRkbC9sdF9zeXN0ZW0uaApAQCAtMCwwICsxLDE1NCBAQAorLyogbHRfc3lzdGVtLmggLS0gc3lzdGVtIHBvcnRhYmlsaXR5IGFic3RyYWN0aW9uIGxheWVyCisKKyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDA0CisKKyAgIE5PVEU6IFRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRoaXMgZmlsZSBpcyBtYWludGFpbmVkIHdpdGggdGhlCisgICBHTlUgTGlidG9vbCBwYWNrYWdlLiAgUmVwb3J0IGJ1Z3MgdG8gYnVnLWxpYnRvb2xAZ251Lm9yZy4KKworR05VIExpYmx0ZGwgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAoraWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAoraXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCitzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworR05VIExpYmx0ZGwgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIEdOVSBMaWJsdGRsOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIGEKK2NvcHkgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSAgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwuaHRtbCwKK29yIG9idGFpbmVkIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmICFkZWZpbmVkKExUX1NZU1RFTV9IKQorI2RlZmluZSBMVF9TWVNURU1fSCAxCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworLyogU29tZSBzeXN0ZW1zIGRvIG5vdCBkZWZpbmUgRVhJVF8qLCBldmVuIHdpdGggU1REQ19IRUFERVJTLiAgKi8KKyNpZiAhZGVmaW5lZChFWElUX1NVQ0NFU1MpCisjIGRlZmluZSBFWElUX1NVQ0NFU1MgMAorI2VuZGlmCisjaWYgIWRlZmluZWQoRVhJVF9GQUlMVVJFKQorIyBkZWZpbmUgRVhJVF9GQUlMVVJFIDEKKyNlbmRpZgorCisvKiBKdXN0IHBpY2sgYSBiaWcgbnVtYmVyLi4uICovCisjZGVmaW5lIExUX0ZJTEVOQU1FX01BWCAyMDQ4CisKKworLyogU2F2ZXMgb24gdGhvc2UgaGFyZCB0byBkZWJ1ZyAnXDAnIHR5cG9zLi4uLiAgKi8KKyNkZWZpbmUgTFRfRU9TX0NIQVIJJ1wwJworCisvKiBMVERMX0JFR0lOX0NfREVDTFMgc2hvdWxkIGJlIHVzZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB5b3VyIGRlY2xhcmF0aW9ucywKKyAgIHNvIHRoYXQgQysrIGNvbXBpbGVycyBkb24ndCBtYW5nbGUgdGhlaXIgbmFtZXMuICBVc2UgTFRETF9FTkRfQ19ERUNMUyBhdAorICAgdGhlIGVuZCBvZiBDIGRlY2xhcmF0aW9ucy4gKi8KKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorIyBkZWZpbmUgTFRfQkVHSU5fQ19ERUNMUwlleHRlcm4gIkMiIHsKKyMgZGVmaW5lIExUX0VORF9DX0RFQ0xTCQl9CisjZWxzZQorIyBkZWZpbmUgTFRfQkVHSU5fQ19ERUNMUwkvKiBlbXB0eSAqLworIyBkZWZpbmUgTFRfRU5EX0NfREVDTFMJCS8qIGVtcHR5ICovCisjZW5kaWYKKworLyogTFRfU1RNVF9TVEFSVC9FTkQgYXJlIHVzZWQgdG8gY3JlYXRlIG1hY3JvcyB3aGljaCBleHBhbmQgdG8gYQorICAgYSBzaW5nbGUgY29tcG91bmQgc3RhdGVtZW50IGluIGEgcG9ydGFibGUgd2F5LiAgKi8KKyNpZiBkZWZpbmVkIChfX0dOVUNfXykgJiYgIWRlZmluZWQgKF9fU1RSSUNUX0FOU0lfXykgJiYgIWRlZmluZWQgKF9fY3BsdXNwbHVzKQorIyAgZGVmaW5lIExUX1NUTVRfU1RBUlQgICAgICAgICh2b2lkKSgKKyMgIGRlZmluZSBMVF9TVE1UX0VORCAgICAgICAgICApCisjZWxzZQorIyAgaWYgKGRlZmluZWQgKHN1bikgfHwgZGVmaW5lZCAoX19zdW5fXykpCisjICAgIGRlZmluZSBMVF9TVE1UX1NUQVJUICAgICAgaWYgKDEpCisjICAgIGRlZmluZSBMVF9TVE1UX0VORCAgICAgICAgZWxzZSAodm9pZCkwCisjICBlbHNlCisjICAgIGRlZmluZSBMVF9TVE1UX1NUQVJUICAgICAgZG8KKyMgICAgZGVmaW5lIExUX1NUTVRfRU5EICAgICAgICB3aGlsZSAoMCkKKyMgIGVuZGlmCisjZW5kaWYKKworLyogQ2Fub25pY2FsaXNlIFdpbmRvd3MgYW5kIEN5Z3dpbiByZWNvZ25pdGlvbiBtYWNyb3MuCisgICBUbyBtYXRjaCB0aGUgdmFsdWVzIHNldCBieSByZWNlbnQgQ3lnd2luIGNvbXBpbGVycywgbWFrZSBzdXJlIHRoYXQgaWYKKyAgIF9fQ1lHV0lOX18gaXMgZGVmaW5lZCAoYWZ0ZXIgY2Fub25pY2FsaXNhdGlvbiksIF9fV0lORE9XU19fIGlzIE5PVCEgICovCisjaWYgZGVmaW5lZChfX0NZR1dJTjMyX18pICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCisjIGRlZmluZSBfX0NZR1dJTl9fIF9fQ1lHV0lOMzJfXworI2VuZGlmCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKQorIyBpZiBkZWZpbmVkKF9fV0lORE9XU19fKQorIyAgIHVuZGVmIF9fV0lORE9XU19fCisjIGVuZGlmCisjZWxpZiBkZWZpbmVkKF9XSU4zMikKKyMgZGVmaW5lIF9fV0lORE9XU19fIF9XSU4zMgorI2VsaWYgZGVmaW5lZChXSU4zMikKKyMgZGVmaW5lIF9fV0lORE9XU19fIFdJTjMyCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pICYmIGRlZmluZWQoX19XSU5ET1dTX18pCisjIHVuZGVmIF9fV0lORE9XU19fCisjZW5kaWYKKworCisvKiBETEwgYnVpbGRpbmcgc3VwcG9ydCBvbiB3aW4zMiBob3N0czsgIG1vc3RseSB0byB3b3JrYXJvdW5kIHRoZWlyCisgICByaWRpY3Vsb3VzIGltcGxlbWVudGF0aW9uIG9mIGRhdGEgc3ltYm9sIGV4cG9ydGluZy4gKi8KKyNpZiAhZGVmaW5lZChMVF9TQ09QRSkKKyMgIGlmIGRlZmluZWQoX19XSU5ET1dTX18pIHx8IGRlZmluZWQoX19DWUdXSU5fXykKKyMgICAgaWYgZGVmaW5lZChETExfRVhQT1JUKQkJLyogZGVmaW5lZCBieSBsaWJ0b29sIChpZiByZXF1aXJlZCkgKi8KKyMgICAgICBkZWZpbmUgTFRfU0NPUEUJZXh0ZXJuIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorIyAgICBlbmRpZgorIyAgICBpZiBkZWZpbmVkKExJQkxURExfRExMX0lNUE9SVCkJLyogZGVmaW5lIGlmIGxpbmtpbmcgd2l0aCB0aGlzIGRsbCAqLworICAgICAgIC8qIG5vdGU6IGN5Z3dpbi9taW5ndyBjb21waWxlcnMgY2FuIHJlbHkgaW5zdGVhZCBvbiBhdXRvLWltcG9ydCAqLworIyAgICAgIGRlZmluZSBMVF9TQ09QRQlleHRlcm4gX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjICAgIGVuZGlmCisjICBlbmRpZgorIyAgaWYgIWRlZmluZWQoTFRfU0NPUEUpCQkvKiBzdGF0aWMgbGlua2luZyBvciAhX19XSU5ET1dTX18gKi8KKyMgICAgZGVmaW5lIExUX1NDT1BFCWV4dGVybgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX1dJTkRPV1NfXykKKy8qIExUX0RJUlNFUF9DSEFSIGlzIGFjY2VwdGVkICppbiBhZGRpdGlvbiogdG8gJy8nIGFzIGEgZGlyZWN0b3J5CisgICBzZXBhcmF0b3Igd2hlbiBpdCBpcyBzZXQuICovCisjIGRlZmluZSBMVF9ESVJTRVBfQ0hBUgkJJ1xcJworIyBkZWZpbmUgTFRfUEFUSFNFUF9DSEFSCSc7JworI2Vsc2UKKyMgZGVmaW5lIExUX1BBVEhTRVBfQ0hBUgknOicKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgLyogVmlzdWFsIFN0dWRpbyAqLworIyAgZGVmaW5lIFJfT0sgNAorI2VuZGlmCisKKy8qIGZvcGVuKCkgbW9kZSBmbGFncyBmb3IgcmVhZGluZyBhIHRleHQgZmlsZSAqLworI3VuZGVmCUxUX1JFQURURVhUX01PREUKKyNpZiBkZWZpbmVkKF9fV0lORE9XU19fKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCisjICBkZWZpbmUgTFRfUkVBRFRFWFRfTU9ERSAicnQiCisjZWxzZQorIyAgZGVmaW5lIExUX1JFQURURVhUX01PREUgInIiCisjZW5kaWYKKworLyogVGhlIGV4dHJhIGluZGlyZWN0aW9uIHRvIHRoZSBMVF9fU1RSIGFuZCBMVF9fQ09OQyBtYWNyb3MgaXMgcmVxdWlyZWQgc28KKyAgIHRoYXQgaWYgdGhlIGFyZ3VtZW50cyB0byBMVF9TVFIoKSAob3IgTFRfQ09OQygpKSBhcmUgdGhlbXNlbHZlcyBtYWNyb3MsCisgICB0aGV5IHdpbGwgYmUgZXhwYW5kZWQgYmVmb3JlIGJlaW5nIHF1b3RlZC4gICAqLworI2lmbmRlZiBMVF9TVFIKKyMgIGRlZmluZSBMVF9fU1RSKGFyZykJCSNhcmcKKyMgIGRlZmluZSBMVF9TVFIoYXJnKQkJTFRfX1NUUihhcmcpCisjZW5kaWYKKworI2lmbmRlZiBMVF9DT05DCisjICBkZWZpbmUgTFRfX0NPTkMoYSwgYikJYSMjYgorIyAgZGVmaW5lIExUX0NPTkMoYSwgYikJCUxUX19DT05DKGEsIGIpCisjZW5kaWYKKyNpZm5kZWYgTFRfQ09OQzMKKyMgIGRlZmluZSBMVF9fQ09OQzMoYSwgYiwgYykJYSMjYiMjYworIyAgZGVmaW5lIExUX0NPTkMzKGEsIGIsIGMpCUxUX19DT05DMyhhLCBiLCBjKQorI2VuZGlmCisKKyNlbmRpZiAvKiFkZWZpbmVkKExUX1NZU1RFTV9IKSovCmRpZmYgLS1naXQgYS9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvbGlibHRkbC9zbGlzdC5oIGIvc2hhcmUvbGlidG9vbC9saWJsdGRsL2xpYmx0ZGwvc2xpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDU2NTA5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbGlidG9vbC9saWJsdGRsL2xpYmx0ZGwvc2xpc3QuaApAQCAtMCwwICsxLDk2IEBACisvKiBzbGlzdC5oIC0tIGdlbmVyYWxpc2VkIHNpbmdseSBsaW5rZWQgbGlzdHMKKworICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDA0LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDAKKworICAgTk9URTogVGhlIGNhbm9uaWNhbCBzb3VyY2Ugb2YgdGhpcyBmaWxlIGlzIG1haW50YWluZWQgd2l0aCB0aGUKKyAgIEdOVSBMaWJ0b29sIHBhY2thZ2UuICBSZXBvcnQgYnVncyB0byBidWctbGlidG9vbEBnbnUub3JnLgorCitHTlUgTGlibHRkbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgordmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCitpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CitpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKK3NhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCitHTlUgTGlibHRkbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFsb25nIHdpdGggR05VIExpYmx0ZGw7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgYQorY29weSBjYW4gYmUgZG93bmxvYWRlZCBmcm9tICBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGdwbC5odG1sLAorb3Igb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisvKiBBIGdlbmVyYWxpc2VkIGxpc3QuICBUaGlzIGlzIGRlbGliZXJhdGVseSB0cmFuc3BhcmVudCBzbyB0aGF0IHlvdQorICAgY2FuIG1ha2UgdGhlIE5FWFQgZmllbGQgb2YgYWxsIHlvdXIgY2hhaW5lZCBkYXRhIHN0cnVjdHVyZXMgZmlyc3QsCisgICBhbmQgdGhlbiBjYXN0IHRoZW0gdG8gYChTTGlzdCAqKScgc28gdGhhdCB0aGV5IGNhbiBiZSBtYW5pcHVsYXRlZAorICAgYnkgdGhpcyBBUEkuCisKKyAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gZ2VuZXJhdGUgcmF3IFNMaXN0IGVsZW1lbnRzIHVzaW5nIHNsaXN0X25ldygpLAorICAgYW5kIHB1dCB0aGUgZWxlbWVudCBkYXRhIGluIHRoZSBVU0VSREFUQSBmaWVsZC4gIEVpdGhlciB3YXkgeW91CisgICBnZXQgdG8gbWFuYWdlIHRoZSBtZW1vcnkgaW52b2x2ZWQgYnkgeW91cnNlbGYuCisqLworCisjaWYgIWRlZmluZWQoU0xJU1RfSCkKKyNkZWZpbmUgU0xJU1RfSCAxCisKKyNpZiBkZWZpbmVkKExUREwpCisjICBpbmNsdWRlIDxsaWJsdGRsL2x0X19nbGliYy5oPgorIyAgaW5jbHVkZSA8bGlibHRkbC9sdF9zeXN0ZW0uaD4KKyNlbHNlCisjICBkZWZpbmUgTFRfU0NPUEUKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3Qgc2xpc3QgeworICBzdHJ1Y3Qgc2xpc3QgKm5leHQ7CQkvKiBjaGFpbiBmb3J3YXJkIHBvaW50ZXIqLworICBjb25zdCB2b2lkICp1c2VyZGF0YTsJCS8qIGZvciBib3hlZCBgU0xpc3QnIGl0ZW0gKi8KK30gU0xpc3Q7CisKK3R5cGVkZWYgdm9pZCAqCVNMaXN0Q2FsbGJhY2sJKFNMaXN0ICppdGVtLCB2b2lkICp1c2VyZGF0YSk7Cit0eXBlZGVmIGludAlTTGlzdENvbXBhcmUJKGNvbnN0IFNMaXN0ICppdGVtMSwgY29uc3QgU0xpc3QgKml0ZW0yLAorCQkJCSB2b2lkICp1c2VyZGF0YSk7CisKK0xUX1NDT1BFIFNMaXN0ICpzbGlzdF9jb25jYXQJKFNMaXN0ICpoZWFkLCBTTGlzdCAqdGFpbCk7CitMVF9TQ09QRSBTTGlzdCAqc2xpc3RfY29ucwkoU0xpc3QgKml0ZW0sIFNMaXN0ICpzbGlzdCk7CisKK0xUX1NDT1BFIFNMaXN0ICpzbGlzdF9kZWxldGUJKFNMaXN0ICpzbGlzdCwgdm9pZCAoKmRlbGV0ZV9mY3QpICh2b2lkICppdGVtKSk7CitMVF9TQ09QRSBTTGlzdCAqc2xpc3RfcmVtb3ZlCShTTGlzdCAqKnBoZWFkLCBTTGlzdENhbGxiYWNrICpmaW5kLAorCQkJCSB2b2lkICptYXRjaGRhdGEpOworTFRfU0NPUEUgU0xpc3QgKnNsaXN0X3JldmVyc2UJKFNMaXN0ICpzbGlzdCk7CitMVF9TQ09QRSBTTGlzdCAqc2xpc3Rfc29ydAkoU0xpc3QgKnNsaXN0LCBTTGlzdENvbXBhcmUgKmNvbXBhcmUsCisJCQkJIHZvaWQgKnVzZXJkYXRhKTsKKworTFRfU0NPUEUgU0xpc3QgKnNsaXN0X3RhaWwJKFNMaXN0ICpzbGlzdCk7CitMVF9TQ09QRSBTTGlzdCAqc2xpc3RfbnRoCShTTGlzdCAqc2xpc3QsIHNpemVfdCBuKTsKK0xUX1NDT1BFIHZvaWQgKglzbGlzdF9maW5kCShTTGlzdCAqc2xpc3QsIFNMaXN0Q2FsbGJhY2sgKmZpbmQsCisJCQkJIHZvaWQgKm1hdGNoZGF0YSk7CitMVF9TQ09QRSBzaXplX3Qgc2xpc3RfbGVuZ3RoCShTTGlzdCAqc2xpc3QpOworCitMVF9TQ09QRSB2b2lkICoJc2xpc3RfZm9yZWFjaCAgIChTTGlzdCAqc2xpc3QsIFNMaXN0Q2FsbGJhY2sgKmZvcmVhY2gsCisJCQkJIHZvaWQgKnVzZXJkYXRhKTsKKworTFRfU0NPUEUgU0xpc3QgKnNsaXN0X2JveAkoY29uc3Qgdm9pZCAqdXNlcmRhdGEpOworTFRfU0NPUEUgdm9pZCAqCXNsaXN0X3VuYm94CShTTGlzdCAqaXRlbSk7CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChMVERMKQorIyAgdW5kZWYgTFRfU0NPUEUKKyNlbmRpZgorCisjZW5kaWYgLyohZGVmaW5lZChTTElTVF9IKSovCmRpZmYgLS1naXQgYS9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvbG9hZGVycy9kbGRfbGluay5jIGIvc2hhcmUvbGlidG9vbC9saWJsdGRsL2xvYWRlcnMvZGxkX2xpbmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTg4MmM5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbGlidG9vbC9saWJsdGRsL2xvYWRlcnMvZGxkX2xpbmsuYwpAQCAtMCwwICsxLDE1OCBAQAorLyogbG9hZGVyLWRsZF9saW5rLmMgLS0gZHluYW1pYyBsaW5raW5nIHdpdGggZGxkCisKKyAgIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwNCwgMjAwNiwKKyAgICAgICAgICAgICAgICAgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgVGhvbWFzIFRhbm5lciwgMTk5OAorCisgICBOT1RFOiBUaGUgY2Fub25pY2FsIHNvdXJjZSBvZiB0aGlzIGZpbGUgaXMgbWFpbnRhaW5lZCB3aXRoIHRoZQorICAgR05VIExpYnRvb2wgcGFja2FnZS4gIFJlcG9ydCBidWdzIHRvIGJ1Zy1saWJ0b29sQGdudS5vcmcuCisKK0dOVSBMaWJsdGRsIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCit2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK0FzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK2lmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKK2lzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK0dOVSBMaWJsdGRsIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYWxvbmcgd2l0aCBHTlUgTGlibHRkbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCBhCitjb3B5IGNhbiBiZSBkb3dubG9hZGVkIGZyb20gIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9sZ3BsLmh0bWwsCitvciBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJsdF9fcHJpdmF0ZS5oIgorI2luY2x1ZGUgImx0X2RsbG9hZGVyLmgiCisKKy8qIFVzZSB0aGUgcHJlcHJvY2Vzc29yIHRvIHJlbmFtZSBub24tc3RhdGljIHN5bWJvbHMgdG8gYXZvaWQgbmFtZXNwYWNlCisgICBjb2xsaXNpb25zIHdoZW4gdGhlIGxvYWRlciBjb2RlIGlzIHN0YXRpY2FsbHkgbGlua2VkIGludG8gbGlibHRkbC4KKyAgIFVzZSB0aGUgIjxtb2R1bGVfbmFtZT5fTFRYXyIgcHJlZml4IHNvIHRoYXQgdGhlIHN5bWJvbCBhZGRyZXNzZXMgY2FuCisgICBiZSBmZXRjaGVkIGZyb20gdGhlIHByZWxvYWRlZCBzeW1ib2wgbGlzdCBieSBsdF9kbHN5bSgpOiAgKi8KKyNkZWZpbmUgZ2V0X3Z0YWJsZQlkbGRfbGlua19MVFhfZ2V0X3Z0YWJsZQorCitMVF9CRUdJTl9DX0RFQ0xTCitMVF9TQ09QRSBsdF9kbHZ0YWJsZSAqZ2V0X3Z0YWJsZSAobHRfdXNlcl9kYXRhIGxvYWRlcl9kYXRhKTsKK0xUX0VORF9DX0RFQ0xTCisKKworLyogQm9pbGVycGxhdGUgY29kZSB0byBzZXQgdXAgdGhlIHZ0YWJsZSBmb3IgaG9va2luZyB0aGlzIGxvYWRlciBpbnRvCisgICBsaWJsdGRsJ3MgbG9hZGVyIGxpc3Q6ICAqLworc3RhdGljIGludAkgdmxfZXhpdCAgKGx0X3VzZXJfZGF0YSBsb2FkZXJfZGF0YSk7CitzdGF0aWMgbHRfbW9kdWxlIHZtX29wZW4gIChsdF91c2VyX2RhdGEgbG9hZGVyX2RhdGEsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRfZGxhZHZpc2UgYWR2aXNlKTsKK3N0YXRpYyBpbnQJIHZtX2Nsb3NlIChsdF91c2VyX2RhdGEgbG9hZGVyX2RhdGEsIGx0X21vZHVsZSBtb2R1bGUpOworc3RhdGljIHZvaWQgKgkgdm1fc3ltICAgKGx0X3VzZXJfZGF0YSBsb2FkZXJfZGF0YSwgbHRfbW9kdWxlIG1vZHVsZSwKKwkJCSAgY29uc3QgY2hhciAqc3ltYm9sbmFtZSk7CisKK3N0YXRpYyBsdF9kbHZ0YWJsZSAqdnRhYmxlID0gMDsKKworLyogUmV0dXJuIHRoZSB2dGFibGUgZm9yIHRoaXMgbG9hZGVyLCBvbmx5IHRoZSBuYW1lIGFuZCBzeW1fcHJlZml4CisgICBhdHRyaWJ1dGVzIChwbHVzIHRoZSB2aXJ0dWFsIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucywgb2J2aW91c2x5KQorICAgY2hhbmdlIGJldHdlZW4gbG9hZGVycy4gICovCitsdF9kbHZ0YWJsZSAqCitnZXRfdnRhYmxlIChsdF91c2VyX2RhdGEgbG9hZGVyX2RhdGEpCit7CisgIGlmICghdnRhYmxlKQorICAgIHsKKyAgICAgIHZ0YWJsZSA9IGx0X196YWxsb2MgKHNpemVvZiAqdnRhYmxlKTsKKyAgICB9CisKKyAgaWYgKHZ0YWJsZSAmJiAhdnRhYmxlLT5uYW1lKQorICAgIHsKKyAgICAgIHZ0YWJsZS0+bmFtZQkJPSAibHRfZGxkX2xpbmsiOworICAgICAgdnRhYmxlLT5tb2R1bGVfb3Blbgk9IHZtX29wZW47CisgICAgICB2dGFibGUtPm1vZHVsZV9jbG9zZQk9IHZtX2Nsb3NlOworICAgICAgdnRhYmxlLT5maW5kX3N5bQkJPSB2bV9zeW07CisgICAgICB2dGFibGUtPmRsbG9hZGVyX2V4aXQJPSB2bF9leGl0OworICAgICAgdnRhYmxlLT5kbGxvYWRlcl9kYXRhCT0gbG9hZGVyX2RhdGE7CisgICAgICB2dGFibGUtPnByaW9yaXR5CQk9IExUX0RMTE9BREVSX0FQUEVORDsKKyAgICB9CisKKyAgaWYgKHZ0YWJsZSAmJiAodnRhYmxlLT5kbGxvYWRlcl9kYXRhICE9IGxvYWRlcl9kYXRhKSkKKyAgICB7CisgICAgICBMVF9fU0VURVJST1IgKElOSVRfTE9BREVSKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICByZXR1cm4gdnRhYmxlOworfQorCisKKworLyogLS0tIElNUExFTUVOVEFUSU9OIC0tLSAqLworCisKKyNpZiBkZWZpbmVkKEhBVkVfRExEX0gpCisjICBpbmNsdWRlIDxkbGQuaD4KKyNlbmRpZgorCisvKiBBIGZ1bmN0aW9uIGNhbGxlZCB0aHJvdWdoIHRoZSB2dGFibGUgd2hlbiB0aGlzIGxvYWRlciBpcyBubworICAgbG9uZ2VyIG5lZWRlZCBieSB0aGUgYXBwbGljYXRpb24uICAqLworc3RhdGljIGludAordmxfZXhpdCAobHRfdXNlcl9kYXRhIExUX19VTlVTRUQgbG9hZGVyX2RhdGEpCit7CisgIHZ0YWJsZSA9IE5VTEw7CisgIHJldHVybiAwOworfQorCisvKiBBIGZ1bmN0aW9uIGNhbGxlZCB0aHJvdWdoIHRoZSB2dGFibGUgdG8gb3BlbiBhIG1vZHVsZSB3aXRoIHRoaXMKKyAgIGxvYWRlci4gIFJldHVybnMgYW4gb3BhcXVlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBuZXdseSBvcGVuZWQKKyAgIG1vZHVsZSBmb3IgcHJvY2Vzc2luZyB3aXRoIHRoaXMgbG9hZGVyJ3Mgb3RoZXIgdnRhYmxlIGZ1bmN0aW9ucy4gICovCitzdGF0aWMgbHRfbW9kdWxlCit2bV9vcGVuIChsdF91c2VyX2RhdGEgTFRfX1VOVVNFRCBsb2FkZXJfZGF0YSwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisgICAgICAgICBsdF9kbGFkdmlzZSBMVF9fVU5VU0VEIGFkdmlzZSkKK3sKKyAgbHRfbW9kdWxlIG1vZHVsZSA9IGx0X19zdHJkdXAgKGZpbGVuYW1lKTsKKworICBpZiAoZGxkX2xpbmsgKGZpbGVuYW1lKSAhPSAwKQorICAgIHsKKyAgICAgIExUX19TRVRFUlJPUiAoQ0FOTk9UX09QRU4pOworICAgICAgRlJFRSAobW9kdWxlKTsKKyAgICB9CisKKyAgcmV0dXJuIG1vZHVsZTsKK30KKworLyogQSBmdW5jdGlvbiBjYWxsZWQgdGhyb3VnaCB0aGUgdnRhYmxlIHdoZW4gYSBwYXJ0aWN1bGFyIG1vZHVsZQorICAgc2hvdWxkIGJlIHVubG9hZGVkLiAgKi8KK3N0YXRpYyBpbnQKK3ZtX2Nsb3NlIChsdF91c2VyX2RhdGEgTFRfX1VOVVNFRCBsb2FkZXJfZGF0YSwgbHRfbW9kdWxlIG1vZHVsZSkKK3sKKyAgaW50IGVycm9ycyA9IDA7CisKKyAgaWYgKGRsZF91bmxpbmtfYnlfZmlsZSAoKGNoYXIqKShtb2R1bGUpLCAxKSAhPSAwKQorICAgIHsKKyAgICAgIExUX19TRVRFUlJPUiAoQ0FOTk9UX0NMT1NFKTsKKyAgICAgICsrZXJyb3JzOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIEZSRUUgKG1vZHVsZSk7CisgICAgfQorCisgIHJldHVybiBlcnJvcnM7Cit9CisKKy8qIEEgZnVuY3Rpb24gY2FsbGVkIHRocm91Z2ggdGhlIHZ0YWJsZSB0byBnZXQgdGhlIGFkZHJlc3Mgb2YKKyAgIGEgc3ltYm9sIGxvYWRlZCBmcm9tIGEgcGFydGljdWxhciBtb2R1bGUuICAqLworc3RhdGljIHZvaWQgKgordm1fc3ltIChsdF91c2VyX2RhdGEgTFRfX1VOVVNFRCBsb2FkZXJfZGF0YSwgbHRfbW9kdWxlIExUX19VTlVTRUQgbW9kdWxlLAorCWNvbnN0IGNoYXIgKm5hbWUpCit7CisgIHZvaWQgKmFkZHJlc3MgPSBkbGRfZ2V0X2Z1bmMgKG5hbWUpOworCisgIGlmICghYWRkcmVzcykKKyAgICB7CisgICAgICBMVF9fU0VURVJST1IgKFNZTUJPTF9OT1RfRk9VTkQpOworICAgIH0KKworICByZXR1cm4gYWRkcmVzczsKK30KZGlmZiAtLWdpdCBhL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9sb2FkZXJzL2Rsb3Blbi5jIGIvc2hhcmUvbGlidG9vbC9saWJsdGRsL2xvYWRlcnMvZGxvcGVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQwNTJiNAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9sb2FkZXJzL2Rsb3Blbi5jCkBAIC0wLDAgKzEsMjM1IEBACisvKiBsb2FkZXItZGxvcGVuLmMgLS0gIGR5bmFtaWMgbGlua2luZyB3aXRoIGRsb3Blbi9kbHN5bQorCisgICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDQsIDIwMDYsCisgICAgICAgICAgICAgICAgIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IFRob21hcyBUYW5uZXIsIDE5OTgKKworICAgTk9URTogVGhlIGNhbm9uaWNhbCBzb3VyY2Ugb2YgdGhpcyBmaWxlIGlzIG1haW50YWluZWQgd2l0aCB0aGUKKyAgIEdOVSBMaWJ0b29sIHBhY2thZ2UuICBSZXBvcnQgYnVncyB0byBidWctbGlidG9vbEBnbnUub3JnLgorCitHTlUgTGlibHRkbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgordmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCitpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CitpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKK3NhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCitHTlUgTGlibHRkbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFsb25nIHdpdGggR05VIExpYmx0ZGw7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgYQorY29weSBjYW4gYmUgZG93bmxvYWRlZCBmcm9tICBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGdwbC5odG1sLAorb3Igb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAibHRfX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJsdF9kbGxvYWRlci5oIgorCisvKiBVc2UgdGhlIHByZXByb2Nlc3NvciB0byByZW5hbWUgbm9uLXN0YXRpYyBzeW1ib2xzIHRvIGF2b2lkIG5hbWVzcGFjZQorICAgY29sbGlzaW9ucyB3aGVuIHRoZSBsb2FkZXIgY29kZSBpcyBzdGF0aWNhbGx5IGxpbmtlZCBpbnRvIGxpYmx0ZGwuCisgICBVc2UgdGhlICI8bW9kdWxlX25hbWU+X0xUWF8iIHByZWZpeCBzbyB0aGF0IHRoZSBzeW1ib2wgYWRkcmVzc2VzIGNhbgorICAgYmUgZmV0Y2hlZCBmcm9tIHRoZSBwcmVsb2FkZWQgc3ltYm9sIGxpc3QgYnkgbHRfZGxzeW0oKTogICovCisjZGVmaW5lIGdldF92dGFibGUJZGxvcGVuX0xUWF9nZXRfdnRhYmxlCisKK0xUX0JFR0lOX0NfREVDTFMKK0xUX1NDT1BFIGx0X2RsdnRhYmxlICpnZXRfdnRhYmxlIChsdF91c2VyX2RhdGEgbG9hZGVyX2RhdGEpOworTFRfRU5EX0NfREVDTFMKKworCisvKiBCb2lsZXJwbGF0ZSBjb2RlIHRvIHNldCB1cCB0aGUgdnRhYmxlIGZvciBob29raW5nIHRoaXMgbG9hZGVyIGludG8KKyAgIGxpYmx0ZGwncyBsb2FkZXIgbGlzdDogICovCitzdGF0aWMgaW50CSB2bF9leGl0ICAobHRfdXNlcl9kYXRhIGxvYWRlcl9kYXRhKTsKK3N0YXRpYyBsdF9tb2R1bGUgdm1fb3BlbiAgKGx0X3VzZXJfZGF0YSBsb2FkZXJfZGF0YSwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsdF9kbGFkdmlzZSBhZHZpc2UpOworc3RhdGljIGludAkgdm1fY2xvc2UgKGx0X3VzZXJfZGF0YSBsb2FkZXJfZGF0YSwgbHRfbW9kdWxlIG1vZHVsZSk7CitzdGF0aWMgdm9pZCAqCSB2bV9zeW0gICAobHRfdXNlcl9kYXRhIGxvYWRlcl9kYXRhLCBsdF9tb2R1bGUgbW9kdWxlLAorCQkJICBjb25zdCBjaGFyICpzeW1ib2xuYW1lKTsKKworc3RhdGljIGx0X2RsdnRhYmxlICp2dGFibGUgPSAwOworCisvKiBSZXR1cm4gdGhlIHZ0YWJsZSBmb3IgdGhpcyBsb2FkZXIsIG9ubHkgdGhlIG5hbWUgYW5kIHN5bV9wcmVmaXgKKyAgIGF0dHJpYnV0ZXMgKHBsdXMgdGhlIHZpcnR1YWwgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zLCBvYnZpb3VzbHkpCisgICBjaGFuZ2UgYmV0d2VlbiBsb2FkZXJzLiAgKi8KK2x0X2RsdnRhYmxlICoKK2dldF92dGFibGUgKGx0X3VzZXJfZGF0YSBsb2FkZXJfZGF0YSkKK3sKKyAgaWYgKCF2dGFibGUpCisgICAgeworICAgICAgdnRhYmxlID0gKGx0X2RsdnRhYmxlICopIGx0X196YWxsb2MgKHNpemVvZiAqdnRhYmxlKTsKKyAgICB9CisKKyAgaWYgKHZ0YWJsZSAmJiAhdnRhYmxlLT5uYW1lKQorICAgIHsKKyAgICAgIHZ0YWJsZS0+bmFtZQkJPSAibHRfZGxvcGVuIjsKKyNpZiBkZWZpbmVkKERMU1lNX1VTQ09SRSkKKyAgICAgIHZ0YWJsZS0+c3ltX3ByZWZpeAk9ICJfIjsKKyNlbmRpZgorICAgICAgdnRhYmxlLT5tb2R1bGVfb3Blbgk9IHZtX29wZW47CisgICAgICB2dGFibGUtPm1vZHVsZV9jbG9zZQk9IHZtX2Nsb3NlOworICAgICAgdnRhYmxlLT5maW5kX3N5bQkJPSB2bV9zeW07CisgICAgICB2dGFibGUtPmRsbG9hZGVyX2V4aXQJPSB2bF9leGl0OworICAgICAgdnRhYmxlLT5kbGxvYWRlcl9kYXRhCT0gbG9hZGVyX2RhdGE7CisgICAgICB2dGFibGUtPnByaW9yaXR5CQk9IExUX0RMTE9BREVSX1BSRVBFTkQ7CisgICAgfQorCisgIGlmICh2dGFibGUgJiYgKHZ0YWJsZS0+ZGxsb2FkZXJfZGF0YSAhPSBsb2FkZXJfZGF0YSkpCisgICAgeworICAgICAgTFRfX1NFVEVSUk9SIChJTklUX0xPQURFUik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgcmV0dXJuIHZ0YWJsZTsKK30KKworCisKKy8qIC0tLSBJTVBMRU1FTlRBVElPTiAtLS0gKi8KKworCisjaWYgZGVmaW5lZChIQVZFX0RMRkNOX0gpCisjICBpbmNsdWRlIDxkbGZjbi5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfU1lTX0RMX0gpCisjICBpbmNsdWRlIDxzeXMvZGwuaD4KKyNlbmRpZgorCisKKy8qIFdlIG1heSBoYXZlIHRvIGRlZmluZSBMVF9MQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCisgICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCisjaWYgIWRlZmluZWQoTFRfTEFaWV9PUl9OT1cpCisjICBpZiBkZWZpbmVkKFJUTERfTEFaWSkKKyMgICAgZGVmaW5lIExUX0xBWllfT1JfTk9XCVJUTERfTEFaWQorIyAgZWxzZQorIyAgICBpZiBkZWZpbmVkKERMX0xBWlkpCisjICAgICAgZGVmaW5lIExUX0xBWllfT1JfTk9XCURMX0xBWlkKKyMgICAgZW5kaWYKKyMgIGVuZGlmIC8qICFSVExEX0xBWlkgKi8KKyNlbmRpZgorI2lmICFkZWZpbmVkKExUX0xBWllfT1JfTk9XKQorIyAgaWYgZGVmaW5lZChSVExEX05PVykKKyMgICAgZGVmaW5lIExUX0xBWllfT1JfTk9XCVJUTERfTk9XCisjICBlbHNlCisjICAgIGlmIGRlZmluZWQoRExfTk9XKQorIyAgICAgIGRlZmluZSBMVF9MQVpZX09SX05PVwlETF9OT1cKKyMgICAgZW5kaWYKKyMgIGVuZGlmIC8qICFSVExEX05PVyAqLworI2VuZGlmCisjaWYgIWRlZmluZWQoTFRfTEFaWV9PUl9OT1cpCisjICBkZWZpbmUgTFRfTEFaWV9PUl9OT1cJMAorI2VuZGlmIC8qICFMVF9MQVpZX09SX05PVyAqLworCisvKiBXZSBvbmx5IHN1cHBvcnQgbG9jYWwgYW5kIGdsb2JhbCBzeW1ib2xzIGZyb20gbW9kdWxlcyBmb3IgbG9hZGVycworICAgdGhhdCBwcm92aWRlIHN1Y2ggYSB0aGluZywgb3RoZXJ3aXNlIHRoZSBzeXN0ZW0gZGVmYXVsdCBpcyB1c2VkLiAgKi8KKyNpZiAhZGVmaW5lZChSVExEX0dMT0JBTCkKKyMgIGlmIGRlZmluZWQoRExfR0xPQkFMKQorIyAgICBkZWZpbmUgUlRMRF9HTE9CQUwJCURMX0dMT0JBTAorIyAgZW5kaWYKKyNlbmRpZiAvKiAhUlRMRF9HTE9CQUwgKi8KKyNpZiAhZGVmaW5lZChSVExEX0xPQ0FMKQorIyAgaWYgZGVmaW5lZChETF9MT0NBTCkKKyMgICAgZGVmaW5lIFJUTERfTE9DQUwJCURMX0xPQ0FMCisjICBlbmRpZgorI2VuZGlmIC8qICFSVExEX0xPQ0FMICovCisKKyNpZiBkZWZpbmVkKEhBVkVfRExFUlJPUikKKyMgIGRlZmluZSBETEVSUk9SKGFyZykJZGxlcnJvciAoKQorI2Vsc2UKKyMgIGRlZmluZSBETEVSUk9SKGFyZykJTFRfX1NUUkVSUk9SIChhcmcpCisjZW5kaWYKKworI2RlZmluZSBETF9fU0VURVJST1IoZXJyb3Jjb2RlKSBcCisJTFRfX1NFVEVSUk9SU1RSIChETEVSUk9SIChlcnJvcmNvZGUpKQorCisKKy8qIEEgZnVuY3Rpb24gY2FsbGVkIHRocm91Z2ggdGhlIHZ0YWJsZSB3aGVuIHRoaXMgbG9hZGVyIGlzIG5vCisgICBsb25nZXIgbmVlZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gICovCitzdGF0aWMgaW50Cit2bF9leGl0IChsdF91c2VyX2RhdGEgTFRfX1VOVVNFRCBsb2FkZXJfZGF0YSkKK3sKKyAgdnRhYmxlID0gTlVMTDsKKyAgcmV0dXJuIDA7Cit9CisKKworLyogQSBmdW5jdGlvbiBjYWxsZWQgdGhyb3VnaCB0aGUgdnRhYmxlIHRvIG9wZW4gYSBtb2R1bGUgd2l0aCB0aGlzCisgICBsb2FkZXIuICBSZXR1cm5zIGFuIG9wYXF1ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbmV3bHkgb3BlbmVkCisgICBtb2R1bGUgZm9yIHByb2Nlc3Npbmcgd2l0aCB0aGlzIGxvYWRlcidzIG90aGVyIHZ0YWJsZSBmdW5jdGlvbnMuICAqLworc3RhdGljIGx0X21vZHVsZQordm1fb3BlbiAobHRfdXNlcl9kYXRhIExUX19VTlVTRUQgbG9hZGVyX2RhdGEsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorICAgICAgICAgbHRfZGxhZHZpc2UgYWR2aXNlKQoreworICBpbnQJCW1vZHVsZV9mbGFncyA9IExUX0xBWllfT1JfTk9XOworICBsdF9tb2R1bGUJbW9kdWxlOworCisgIGlmIChhZHZpc2UpCisgICAgeworI2lmZGVmIFJUTERfR0xPQkFMCisgICAgICAvKiBJZiB0aGVyZSBpcyBzb21lIG1lYW5zIG9mIGFza2luZyBmb3IgZ2xvYmFsIHN5bWJvbCByZXNvbHV0aW9uLAorICAgICAgICAgZG8gc28uICAqLworICAgICAgaWYgKGFkdmlzZS0+aXNfc3ltZ2xvYmFsKQorICAgICAgICBtb2R1bGVfZmxhZ3MgfD0gUlRMRF9HTE9CQUw7CisjZWxzZQorICAgICAgLyogT3RoZXJ3aXNlLCByZXNldCB0aGF0IGJpdCBzbyB0aGUgY2FsbGVyIGNhbiB0ZWxsIGl0IHdhc24ndAorICAgICAgICAgYWN0ZWQgb24uICAqLworICAgICAgYWR2aXNlLT5pc19zeW1nbG9iYWwgPSAwOworI2VuZGlmCisKKy8qIEFuZCBzaW1pbGFybHkgZm9yIGxvY2FsIG9ubHkgc3ltYm9sIHJlc29sdXRpb24uICAqLworI2lmZGVmIFJUTERfTE9DQUwKKyAgICAgIGlmIChhZHZpc2UtPmlzX3N5bWxvY2FsKQorICAgICAgICBtb2R1bGVfZmxhZ3MgfD0gUlRMRF9MT0NBTDsKKyNlbHNlCisgICAgICBhZHZpc2UtPmlzX3N5bWxvY2FsID0gMDsKKyNlbmRpZgorICAgIH0KKworICBtb2R1bGUgPSBkbG9wZW4gKGZpbGVuYW1lLCBtb2R1bGVfZmxhZ3MpOworCisgIGlmICghbW9kdWxlKQorICAgIHsKKyAgICAgIERMX19TRVRFUlJPUiAoQ0FOTk9UX09QRU4pOworICAgIH0KKworICByZXR1cm4gbW9kdWxlOworfQorCisKKy8qIEEgZnVuY3Rpb24gY2FsbGVkIHRocm91Z2ggdGhlIHZ0YWJsZSB3aGVuIGEgcGFydGljdWxhciBtb2R1bGUKKyAgIHNob3VsZCBiZSB1bmxvYWRlZC4gICovCitzdGF0aWMgaW50Cit2bV9jbG9zZSAobHRfdXNlcl9kYXRhIExUX19VTlVTRUQgbG9hZGVyX2RhdGEsIGx0X21vZHVsZSBtb2R1bGUpCit7CisgIGludCBlcnJvcnMgPSAwOworCisgIGlmIChkbGNsb3NlIChtb2R1bGUpICE9IDApCisgICAgeworICAgICAgRExfX1NFVEVSUk9SIChDQU5OT1RfQ0xPU0UpOworICAgICAgKytlcnJvcnM7CisgICAgfQorCisgIHJldHVybiBlcnJvcnM7Cit9CisKKworLyogQSBmdW5jdGlvbiBjYWxsZWQgdGhyb3VnaCB0aGUgdnRhYmxlIHRvIGdldCB0aGUgYWRkcmVzcyBvZgorICAgYSBzeW1ib2wgbG9hZGVkIGZyb20gYSBwYXJ0aWN1bGFyIG1vZHVsZS4gICovCitzdGF0aWMgdm9pZCAqCit2bV9zeW0gKGx0X3VzZXJfZGF0YSBMVF9fVU5VU0VEIGxvYWRlcl9kYXRhLCBsdF9tb2R1bGUgbW9kdWxlLCBjb25zdCBjaGFyICpuYW1lKQoreworICB2b2lkICphZGRyZXNzID0gZGxzeW0gKG1vZHVsZSwgbmFtZSk7CisKKyAgaWYgKCFhZGRyZXNzKQorICAgIHsKKyAgICAgIERMX19TRVRFUlJPUiAoU1lNQk9MX05PVF9GT1VORCk7CisgICAgfQorCisgIHJldHVybiBhZGRyZXNzOworfQpkaWZmIC0tZ2l0IGEvc2hhcmUvbGlidG9vbC9saWJsdGRsL2xvYWRlcnMvZHlsZC5jIGIvc2hhcmUvbGlidG9vbC9saWJsdGRsL2xvYWRlcnMvZHlsZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMzlkNmMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvbG9hZGVycy9keWxkLmMKQEAgLTAsMCArMSw1MTEgQEAKKy8qIGxvYWRlci1keWxkLmMgLS0gZHluYW1pYyBsaW5raW5nIG9uIGRhcndpbiBhbmQgT1MgWAorCisgICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDQsIDIwMDYsCisgICAgICAgICAgICAgICAgIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IFBldGVyIE8nR29ybWFuLCAxOTk4CisKKyAgIE5PVEU6IFRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRoaXMgZmlsZSBpcyBtYWludGFpbmVkIHdpdGggdGhlCisgICBHTlUgTGlidG9vbCBwYWNrYWdlLiAgUmVwb3J0IGJ1Z3MgdG8gYnVnLWxpYnRvb2xAZ251Lm9yZy4KKworR05VIExpYmx0ZGwgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAoraWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAoraXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCitzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworR05VIExpYmx0ZGwgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIEdOVSBMaWJsdGRsOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIGEKK2NvcHkgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSAgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwuaHRtbCwKK29yIG9idGFpbmVkIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImx0X19wcml2YXRlLmgiCisjaW5jbHVkZSAibHRfZGxsb2FkZXIuaCIKKworLyogVXNlIHRoZSBwcmVwcm9jZXNzb3IgdG8gcmVuYW1lIG5vbi1zdGF0aWMgc3ltYm9scyB0byBhdm9pZCBuYW1lc3BhY2UKKyAgIGNvbGxpc2lvbnMgd2hlbiB0aGUgbG9hZGVyIGNvZGUgaXMgc3RhdGljYWxseSBsaW5rZWQgaW50byBsaWJsdGRsLgorICAgVXNlIHRoZSAiPG1vZHVsZV9uYW1lPl9MVFhfIiBwcmVmaXggc28gdGhhdCB0aGUgc3ltYm9sIGFkZHJlc3NlcyBjYW4KKyAgIGJlIGZldGNoZWQgZnJvbSB0aGUgcHJlbG9hZGVkIHN5bWJvbCBsaXN0IGJ5IGx0X2Rsc3ltKCk6ICAqLworI2RlZmluZSBnZXRfdnRhYmxlCWR5bGRfTFRYX2dldF92dGFibGUKKworTFRfQkVHSU5fQ19ERUNMUworTFRfU0NPUEUgbHRfZGx2dGFibGUgKmdldF92dGFibGUgKGx0X3VzZXJfZGF0YSBsb2FkZXJfZGF0YSk7CitMVF9FTkRfQ19ERUNMUworCisKKy8qIEJvaWxlcnBsYXRlIGNvZGUgdG8gc2V0IHVwIHRoZSB2dGFibGUgZm9yIGhvb2tpbmcgdGhpcyBsb2FkZXIgaW50bworICAgbGlibHRkbCdzIGxvYWRlciBsaXN0OiAgKi8KK3N0YXRpYyBpbnQJIHZsX2luaXQgIChsdF91c2VyX2RhdGEgbG9hZGVyX2RhdGEpOworc3RhdGljIGludAkgdmxfZXhpdCAgKGx0X3VzZXJfZGF0YSBsb2FkZXJfZGF0YSk7CitzdGF0aWMgbHRfbW9kdWxlIHZtX29wZW4gIChsdF91c2VyX2RhdGEgbG9hZGVyX2RhdGEsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRfZGxhZHZpc2UgYWR2aXNlKTsKK3N0YXRpYyBpbnQJIHZtX2Nsb3NlIChsdF91c2VyX2RhdGEgbG9hZGVyX2RhdGEsIGx0X21vZHVsZSBtb2R1bGUpOworc3RhdGljIHZvaWQgKgkgdm1fc3ltICAgKGx0X3VzZXJfZGF0YSBsb2FkZXJfZGF0YSwgbHRfbW9kdWxlIG1vZHVsZSwKKwkJCSAgY29uc3QgY2hhciAqc3ltYm9sbmFtZSk7CisKK3N0YXRpYyBsdF9kbHZ0YWJsZSAqdnRhYmxlID0gMDsKKworLyogUmV0dXJuIHRoZSB2dGFibGUgZm9yIHRoaXMgbG9hZGVyLCBvbmx5IHRoZSBuYW1lIGFuZCBzeW1fcHJlZml4CisgICBhdHRyaWJ1dGVzIChwbHVzIHRoZSB2aXJ0dWFsIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucywgb2J2aW91c2x5KQorICAgY2hhbmdlIGJldHdlZW4gbG9hZGVycy4gICovCitsdF9kbHZ0YWJsZSAqCitnZXRfdnRhYmxlIChsdF91c2VyX2RhdGEgbG9hZGVyX2RhdGEpCit7CisgIGlmICghdnRhYmxlKQorICAgIHsKKyAgICAgIHZ0YWJsZSA9IGx0X196YWxsb2MgKHNpemVvZiAqdnRhYmxlKTsKKyAgICB9CisKKyAgaWYgKHZ0YWJsZSAmJiAhdnRhYmxlLT5uYW1lKQorICAgIHsKKyAgICAgIHZ0YWJsZS0+bmFtZQkJPSAibHRfZHlsZCI7CisgICAgICB2dGFibGUtPnN5bV9wcmVmaXgJPSAiXyI7CisgICAgICB2dGFibGUtPmRsbG9hZGVyX2luaXQJPSB2bF9pbml0OworICAgICAgdnRhYmxlLT5tb2R1bGVfb3Blbgk9IHZtX29wZW47CisgICAgICB2dGFibGUtPm1vZHVsZV9jbG9zZQk9IHZtX2Nsb3NlOworICAgICAgdnRhYmxlLT5maW5kX3N5bQkJPSB2bV9zeW07CisgICAgICB2dGFibGUtPmRsbG9hZGVyX2V4aXQJPSB2bF9leGl0OworICAgICAgdnRhYmxlLT5kbGxvYWRlcl9kYXRhCT0gbG9hZGVyX2RhdGE7CisgICAgICB2dGFibGUtPnByaW9yaXR5CQk9IExUX0RMTE9BREVSX0FQUEVORDsKKyAgICB9CisKKyAgaWYgKHZ0YWJsZSAmJiAodnRhYmxlLT5kbGxvYWRlcl9kYXRhICE9IGxvYWRlcl9kYXRhKSkKKyAgICB7CisgICAgICBMVF9fU0VURVJST1IgKElOSVRfTE9BREVSKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICByZXR1cm4gdnRhYmxlOworfQorCisKKworLyogLS0tIElNUExFTUVOVEFUSU9OIC0tLSAqLworCisKKyNpZiBkZWZpbmVkKEhBVkVfTUFDSF9PX0RZTERfSCkKKyMgIGlmICFkZWZpbmVkKF9fQVBQTEVfQ0NfXykgJiYgIWRlZmluZWQoX19NV0VSS1NfXykgJiYgIWRlZmluZWQoX19wcml2YXRlX2V4dGVybl9fKQorICAvKiBJcyB0aGlzIGNvcnJlY3Q/IERvZXMgaXQgc3RpbGwgZnVuY3Rpb24gcHJvcGVybHk/ICovCisjICAgIGRlZmluZSBfX3ByaXZhdGVfZXh0ZXJuX18gZXh0ZXJuCisjICBlbmRpZgorIyAgaW5jbHVkZSA8bWFjaC1vL2R5bGQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bWFjaC1vL2dldHNlY3QuaD4KKworLyogV2UgaGF2ZSB0byBwdXQgc29tZSBzdHVmZiBoZXJlIHRoYXQgaXNuJ3QgaW4gb2xkZXIgZHlsZC5oIGZpbGVzICovCisjaWYgIWRlZmluZWQoRU5VTV9EWUxEX0JPT0wpCisjIGRlZmluZSBFTlVNX0RZTERfQk9PTAorIyB1bmRlZiBGQUxTRQorIyB1bmRlZiBUUlVFCisgZW51bSBEWUxEX0JPT0wgeworICAgIEZBTFNFLAorICAgIFRSVUUKKyB9OworI2VuZGlmCisjaWYgIWRlZmluZWQoTENfUkVRX0RZTEQpCisjIGRlZmluZSBMQ19SRVFfRFlMRCAweDgwMDAwMDAwCisjZW5kaWYKKyNpZiAhZGVmaW5lZChMQ19MT0FEX1dFQUtfRFlMSUIpCisjIGRlZmluZSBMQ19MT0FEX1dFQUtfRFlMSUIgKDB4MTggfCBMQ19SRVFfRFlMRCkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTlNBRERJTUFHRV9PUFRJT05fTk9ORSkKKyMgIGRlZmluZSBOU0FERElNQUdFX09QVElPTl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAKKyNlbmRpZgorI2lmICFkZWZpbmVkKE5TQURESU1BR0VfT1BUSU9OX1JFVFVSTl9PTl9FUlJPUikKKyMgIGRlZmluZSBOU0FERElNQUdFX09QVElPTl9SRVRVUk5fT05fRVJST1IgICAgICAgICAgICAgICAweDEKKyNlbmRpZgorI2lmICFkZWZpbmVkKE5TQURESU1BR0VfT1BUSU9OX1dJVEhfU0VBUkNISU5HKQorIyAgZGVmaW5lIE5TQURESU1BR0VfT1BUSU9OX1dJVEhfU0VBUkNISU5HICAgICAgICAgICAgICAgIDB4MgorI2VuZGlmCisjaWYgIWRlZmluZWQoTlNBRERJTUFHRV9PUFRJT05fUkVUVVJOX09OTFlfSUZfTE9BREVEKQorIyAgZGVmaW5lIE5TQURESU1BR0VfT1BUSU9OX1JFVFVSTl9PTkxZX0lGX0xPQURFRCAgICAgICAgIDB4NAorI2VuZGlmCisjaWYgIWRlZmluZWQoTlNBRERJTUFHRV9PUFRJT05fTUFUQ0hfRklMRU5BTUVfQllfSU5TVEFMTE5BTUUpCisjICBkZWZpbmUgTlNBRERJTUFHRV9PUFRJT05fTUFUQ0hfRklMRU5BTUVfQllfSU5TVEFMTE5BTUUgMHg4CisjZW5kaWYKKworI2lmICFkZWZpbmVkKE5TTE9PS1VQU1lNQk9MSU5JTUFHRV9PUFRJT05fQklORCkKKyMgIGRlZmluZSBOU0xPT0tVUFNZTUJPTElOSU1BR0VfT1BUSU9OX0JJTkQgICAgICAgICAgICAgICAweDAKKyNlbmRpZgorI2lmICFkZWZpbmVkKE5TTE9PS1VQU1lNQk9MSU5JTUFHRV9PUFRJT05fQklORF9OT1cpCisjICBkZWZpbmUgTlNMT09LVVBTWU1CT0xJTklNQUdFX09QVElPTl9CSU5EX05PVyAgICAgICAgICAgMHgxCisjZW5kaWYKKyNpZiAhZGVmaW5lZChOU0xPT0tVUFNZTUJPTElOSU1BR0VfT1BUSU9OX0JJTkRfRlVMTFkpCisjICBkZWZpbmUgTlNMT09LVVBTWU1CT0xJTklNQUdFX09QVElPTl9CSU5EX0ZVTExZICAgICAgICAgMHgyCisjZW5kaWYKKyNpZiAhZGVmaW5lZChOU0xPT0tVUFNZTUJPTElOSU1BR0VfT1BUSU9OX1JFVFVSTl9PTl9FUlJPUikKKyMgIGRlZmluZSBOU0xPT0tVUFNZTUJPTElOSU1BR0VfT1BUSU9OX1JFVFVSTl9PTl9FUlJPUiAgICAweDQKKyNlbmRpZgorCisjZGVmaW5lIExUX19TWU1MT09LVVBfT1BUUwkoTlNMT09LVVBTWU1CT0xJTklNQUdFX09QVElPTl9CSU5EX05PVyBcCisJCQkJfCBOU0xPT0tVUFNZTUJPTElOSU1BR0VfT1BUSU9OX1JFVFVSTl9PTl9FUlJPUikKKworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOX18pCisjICBkZWZpbmUgTFRfX01BR0lDCU1IX01BR0lDCisjZWxzZQorIyAgZGVmaW5lIExUX19NQUdJQwlNSF9DSUdBTQorI2VuZGlmCisKKyNkZWZpbmUgRFlMRF9fU0VUTVlFUlJPUihlcnJtc2cpICAgIExUX19TRVRFUlJPUlNUUiAoZHlsZGVycm9yIChlcnJtc2cpKQorI2RlZmluZSBEWUxEX19TRVRFUlJPUihlcnJjb2RlKQkgICAgRFlMRF9fU0VUTVlFUlJPUiAoTFRfX1NUUkVSUk9SIChlcnJjb2RlKSkKKwordHlwZWRlZiBzdHJ1Y3QgbWFjaF9oZWFkZXIgbWFjaF9oZWFkZXI7Cit0eXBlZGVmIHN0cnVjdCBkeWxpYl9jb21tYW5kIGR5bGliX2NvbW1hbmQ7CisKK3N0YXRpYyBjb25zdCBjaGFyICpkeWxkZXJyb3IgKGNvbnN0IGNoYXIgKmVycm1zZyk7CitzdGF0aWMgY29uc3QgbWFjaF9oZWFkZXIgKmx0X19uc21vZHVsZV9nZXRfaGVhZGVyIChOU01vZHVsZSBtb2R1bGUpOworc3RhdGljIGNvbnN0IGNoYXIgKmx0X19oZWFkZXJfZ2V0X2luc3RuYW0gKGNvbnN0IG1hY2hfaGVhZGVyICptaCk7CitzdGF0aWMgY29uc3QgbWFjaF9oZWFkZXIgKmx0X19tYXRjaF9sb2FkZWRsaWIgKGNvbnN0IGNoYXIgKm5hbWUpOworc3RhdGljIE5TU3ltYm9sIGx0X19saW5rZWRsaWJfc3ltYm9sIChjb25zdCBjaGFyICpzeW1uYW1lLCBjb25zdCBtYWNoX2hlYWRlciAqbWgpOworCitzdGF0aWMgY29uc3QgbWFjaF9oZWFkZXIgKigqbHRfX2FkZGltYWdlKQkoY29uc3QgY2hhciAqaW1hZ2VfbmFtZSwKKwkJCQkJCSB1bnNpZ25lZCBsb25nIG9wdGlvbnMpID0gMDsKK3N0YXRpYyBOU1N5bWJvbAkoKmx0X19pbWFnZV9zeW1ib2wpCQkoY29uc3QgbWFjaF9oZWFkZXIgKmltYWdlLAorCQkJCQkJIGNvbnN0IGNoYXIgKnN5bWJvbE5hbWUsCisJCQkJCQkgdW5zaWduZWQgbG9uZyBvcHRpb25zKSA9IDA7CitzdGF0aWMgZW51bSBEWUxEX0JPT0wgKCpsdF9faW1hZ2Vfc3ltYm9sX3ApCShjb25zdCBtYWNoX2hlYWRlciAqaW1hZ2UsCisJCQkJCQkgY29uc3QgY2hhciAqc3ltYm9sTmFtZSkgPSAwOworc3RhdGljIGVudW0gRFlMRF9CT09MICgqbHRfX21vZHVsZV9leHBvcnQpCShOU01vZHVsZSBtb2R1bGUpID0gMDsKKworc3RhdGljIGludCBkeWxkX2Nhbm5vdF9jbG9zZQkJCQkgID0gMDsKKworCisvKiBBIGZ1bmN0aW9uIGNhbGxlZCB0aHJvdWdoIHRoZSB2dGFibGUgd2hlbiB0aGlzIGxvYWRlciBpcyBubworICAgbG9uZ2VyIG5lZWRlZCBieSB0aGUgYXBwbGljYXRpb24uICAqLworc3RhdGljIGludAordmxfZXhpdCAobHRfdXNlcl9kYXRhIExUX19VTlVTRUQgbG9hZGVyX2RhdGEpCit7CisgIHZ0YWJsZSA9IE5VTEw7CisgIHJldHVybiAwOworfQorCisvKiBBIGZ1bmN0aW9uIGNhbGxlZCB0aHJvdWdoIHRoZSB2dGFibGUgdG8gaW5pdGlhbGlzZSB0aGlzIGxvYWRlci4gICovCitzdGF0aWMgaW50Cit2bF9pbml0IChsdF91c2VyX2RhdGEgbG9hZGVyX2RhdGEpCit7CisgIGludCBlcnJvcnMgPSAwOworCisgIGlmICghIGR5bGRfY2Fubm90X2Nsb3NlKQorICAgIHsKKyAgICAgIGlmICghX2R5bGRfcHJlc2VudCAoKSkKKwl7CisJICArK2Vycm9yczsKKwl9CisgICAgICBlbHNlCisJeworCSAgKHZvaWQpIF9keWxkX2Z1bmNfbG9va3VwICgiX19keWxkX05TQWRkSW1hZ2UiLAorCQkJCSAgICAodW5zaWduZWQgbG9uZyopICZsdF9fYWRkaW1hZ2UpOworCSAgKHZvaWQpIF9keWxkX2Z1bmNfbG9va3VwICgiX19keWxkX05TTG9va3VwU3ltYm9sSW5JbWFnZSIsCisJCQkJICAgICh1bnNpZ25lZCBsb25nKikmbHRfX2ltYWdlX3N5bWJvbCk7CisJICAodm9pZCkgX2R5bGRfZnVuY19sb29rdXAgKCJfX2R5bGRfTlNJc1N5bWJvbE5hbWVEZWZpbmVkSW5JbWFnZSIsCisJCQkJICAgICh1bnNpZ25lZCBsb25nKikgJmx0X19pbWFnZV9zeW1ib2xfcCk7CisJICAodm9pZCkgX2R5bGRfZnVuY19sb29rdXAgKCJfX2R5bGRfTlNNYWtlUHJpdmF0ZU1vZHVsZVB1YmxpYyIsCisJCQkJICAgICh1bnNpZ25lZCBsb25nKikgJmx0X19tb2R1bGVfZXhwb3J0KTsKKwkgIGR5bGRfY2Fubm90X2Nsb3NlID0gbHRfZGxhZGRlcnJvciAoImNhbid0IGNsb3NlIGEgZHlsaWIiKTsKKwl9CisgICAgfQorCisgIHJldHVybiBlcnJvcnM7Cit9CisKKworLyogQSBmdW5jdGlvbiBjYWxsZWQgdGhyb3VnaCB0aGUgdnRhYmxlIHRvIG9wZW4gYSBtb2R1bGUgd2l0aCB0aGlzCisgICBsb2FkZXIuICBSZXR1cm5zIGFuIG9wYXF1ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbmV3bHkgb3BlbmVkCisgICBtb2R1bGUgZm9yIHByb2Nlc3Npbmcgd2l0aCB0aGlzIGxvYWRlcidzIG90aGVyIHZ0YWJsZSBmdW5jdGlvbnMuICAqLworc3RhdGljIGx0X21vZHVsZQordm1fb3BlbiAobHRfdXNlcl9kYXRhIGxvYWRlcl9kYXRhLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKyAgICAgICAgIGx0X2RsYWR2aXNlIExUX19VTlVTRUQgYWR2aXNlKQoreworICBsdF9tb2R1bGUgbW9kdWxlID0gMDsKKyAgTlNPYmplY3RGaWxlSW1hZ2Ugb2ZpID0gMDsKKworICBpZiAoIWZpbGVuYW1lKQorICAgIHsKKyAgICAgIHJldHVybiAobHRfbW9kdWxlKSAtMTsKKyAgICB9CisKKyAgc3dpdGNoIChOU0NyZWF0ZU9iamVjdEZpbGVJbWFnZUZyb21GaWxlIChmaWxlbmFtZSwgJm9maSkpCisgICAgeworICAgIGNhc2UgTlNPYmplY3RGaWxlSW1hZ2VTdWNjZXNzOgorICAgICAgbW9kdWxlID0gTlNMaW5rTW9kdWxlIChvZmksIGZpbGVuYW1lLCBOU0xJTktNT0RVTEVfT1BUSU9OX1JFVFVSTl9PTl9FUlJPUgorCQkJICAgICAJCSAgICB8IE5TTElOS01PRFVMRV9PUFRJT05fUFJJVkFURQorCQkJICAgICAJCSAgICB8IE5TTElOS01PRFVMRV9PUFRJT05fQklORE5PVyk7CisgICAgICBOU0Rlc3Ryb3lPYmplY3RGaWxlSW1hZ2UgKG9maSk7CisKKyAgICAgIGlmIChtb2R1bGUpCisJeworCSAgbHRfX21vZHVsZV9leHBvcnQgKG1vZHVsZSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE5TT2JqZWN0RmlsZUltYWdlSW5hcHByb3ByaWF0ZUZpbGU6CisgICAgICBpZiAobHRfX2ltYWdlX3N5bWJvbF9wICYmIGx0X19pbWFnZV9zeW1ib2wpCisJeworCSAgbW9kdWxlID0gKGx0X21vZHVsZSkgbHRfX2FkZGltYWdlKGZpbGVuYW1lLAorCQkJCQkgICAgTlNBRERJTUFHRV9PUFRJT05fUkVUVVJOX09OX0VSUk9SKTsKKwl9CisgICAgICBicmVhazsKKworICAgIGNhc2UgTlNPYmplY3RGaWxlSW1hZ2VGYWlsdXJlOgorICAgIGNhc2UgTlNPYmplY3RGaWxlSW1hZ2VBcmNoOgorICAgIGNhc2UgTlNPYmplY3RGaWxlSW1hZ2VGb3JtYXQ6CisgICAgY2FzZSBOU09iamVjdEZpbGVJbWFnZUFjY2VzczoKKyAgICAgIC8qTk9XT1JLKi8KKyAgICAgIGJyZWFrOworICAgIH0KKworICBpZiAoIW1vZHVsZSkKKyAgICB7CisgICAgICBEWUxEX19TRVRFUlJPUiAoQ0FOTk9UX09QRU4pOworICAgIH0KKworICByZXR1cm4gbW9kdWxlOworfQorCisKKy8qIEEgZnVuY3Rpb24gY2FsbGVkIHRocm91Z2ggdGhlIHZ0YWJsZSB3aGVuIGEgcGFydGljdWxhciBtb2R1bGUKKyAgIHNob3VsZCBiZSB1bmxvYWRlZC4gICovCitzdGF0aWMgaW50Cit2bV9jbG9zZSAobHRfdXNlcl9kYXRhIGxvYWRlcl9kYXRhLCBsdF9tb2R1bGUgbW9kdWxlKQoreworICBpbnQgZXJyb3JzID0gMDsKKworICBpZiAobW9kdWxlICE9IChsdF9tb2R1bGUpIC0xKQorICAgIHsKKyAgICAgIGNvbnN0IG1hY2hfaGVhZGVyICptaCA9IChjb25zdCBtYWNoX2hlYWRlciAqKSBtb2R1bGU7CisgICAgICBpbnQgZmxhZ3MgPSAwOworICAgICAgaWYgKG1oLT5tYWdpYyA9PSBMVF9fTUFHSUMpCisJeworCSAgbHRfZGxzZXRlcnJvciAoZHlsZF9jYW5ub3RfY2xvc2UpOworCSAgKytlcnJvcnM7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIEN1cnJlbnRseSwgaWYgYSBtb2R1bGUgY29udGFpbnMgYysrIHN0YXRpYyBkZXN0cnVjdG9ycyBhbmQgaXQKKwkgICAgIGlzIHVubG9hZGVkLCB3ZSBnZXQgYSBzZWdmYXVsdCBpbiBhdGV4aXQoKSwgZHVlIHRvIGNvbXBpbGVyIGFuZAorCSAgICAgZHluYW1pYyBsb2FkZXIgZGlmZmVyZW5jZXMgb2Ygb3BpbmlvbiwgdGhpcyB3b3JrcyBhcm91bmQgdGhhdC4gICovCisJICBpZiAoKGNvbnN0IHN0cnVjdCBzZWN0aW9uICopIE5VTEwgIT0KKwkgICAgICBnZXRzZWN0YnluYW1lZnJvbWhlYWRlciAobHRfX25zbW9kdWxlX2dldF9oZWFkZXIgKG1vZHVsZSksCisJCQkJICAgICAgICJfX0RBVEEiLCAiX19tb2RfdGVybV9mdW5jIikpCisJICAgIHsKKwkgICAgICBmbGFncyB8PSBOU1VOTElOS01PRFVMRV9PUFRJT05fS0VFUF9NRU1PUllfTUFQUEVEOworCSAgICB9CisjaWYgZGVmaW5lZChfX3BwY19fKQorCSAgZmxhZ3MgfD0gTlNVTkxJTktNT0RVTEVfT1BUSU9OX1JFU0VUX0xBWllfUkVGRVJFTkNFUzsKKyNlbmRpZgorCSAgaWYgKCFOU1VuTGlua01vZHVsZSAobW9kdWxlLCBmbGFncykpCisJICAgIHsKKwkgICAgICBEWUxEX19TRVRFUlJPUiAoQ0FOTk9UX0NMT1NFKTsKKwkgICAgICArK2Vycm9yczsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgcmV0dXJuIGVycm9yczsKK30KKworLyogQSBmdW5jdGlvbiBjYWxsZWQgdGhyb3VnaCB0aGUgdnRhYmxlIHRvIGdldCB0aGUgYWRkcmVzcyBvZgorICAgYSBzeW1ib2wgbG9hZGVkIGZyb20gYSBwYXJ0aWN1bGFyIG1vZHVsZS4gICovCitzdGF0aWMgdm9pZCAqCit2bV9zeW0gKGx0X3VzZXJfZGF0YSBsb2FkZXJfZGF0YSwgbHRfbW9kdWxlIG1vZHVsZSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgTlNTeW1ib2wgKm5zc3ltID0gMDsKKyAgY29uc3QgbWFjaF9oZWFkZXIgKm1oID0gKGNvbnN0IG1hY2hfaGVhZGVyICopIG1vZHVsZTsKKyAgY2hhciBzYXZlRXJyb3JbMjU2XSA9ICJTeW1ib2wgbm90IGZvdW5kIjsKKworICBpZiAobW9kdWxlID09IChsdF9tb2R1bGUpIC0xKQorICAgIHsKKyAgICAgIHZvaWQgKmFkZHJlc3MsICp1bnVzZWQ7CisgICAgICBfZHlsZF9sb29rdXBfYW5kX2JpbmQgKG5hbWUsICh1bnNpZ25lZCBsb25nKikgJmFkZHJlc3MsICZ1bnVzZWQpOworICAgICAgcmV0dXJuIGFkZHJlc3M7CisgICAgfQorCisgIGlmIChtaC0+bWFnaWMgPT0gTFRfX01BR0lDKQorICAgIHsKKyAgICAgIGlmIChsdF9faW1hZ2Vfc3ltYm9sX3AgJiYgbHRfX2ltYWdlX3N5bWJvbCkKKwl7CisJICBpZiAobHRfX2ltYWdlX3N5bWJvbF9wIChtaCwgbmFtZSkpCisJICAgIHsKKwkgICAgICBuc3N5bSA9IGx0X19pbWFnZV9zeW1ib2wgKG1oLCBuYW1lLCBMVF9fU1lNTE9PS1VQX09QVFMpOworCSAgICB9CisJfQorCisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbnNzeW0gPSBOU0xvb2t1cFN5bWJvbEluTW9kdWxlIChtb2R1bGUsIG5hbWUpOworICAgIH0KKworICBpZiAoIW5zc3ltKQorICAgIHsKKyAgICAgIHN0cm5jcHkgKHNhdmVFcnJvciwgZHlsZGVycm9yIChMVF9fU1RSRVJST1IgKFNZTUJPTF9OT1RfRk9VTkQpKSwgMjU1KTsKKyAgICAgIHNhdmVFcnJvclsyNTVdID0gMDsKKyAgICAgIGlmICghbWgpCisJeworCSAgbWggPSAobWFjaF9oZWFkZXIgKilsdF9fbnNtb2R1bGVfZ2V0X2hlYWRlciAobW9kdWxlKTsKKwl9CisgICAgICBuc3N5bSA9IGx0X19saW5rZWRsaWJfc3ltYm9sIChuYW1lLCBtaCk7CisgICAgfQorCisgIGlmICghbnNzeW0pCisgICAgeworICAgICAgTFRfX1NFVEVSUk9SU1RSIChzYXZlRXJyb3IpOworICAgIH0KKworICByZXR1cm4gbnNzeW0gPyBOU0FkZHJlc3NPZlN5bWJvbCAobnNzeW0pIDogMDsKK30KKworCisKKworLyogLS0tIEhFTFBFUiBGVU5DVElPTlMgLS0tICovCisKKworLyogUmV0dXJuIHRoZSBkeWxkIGVycm9yIHN0cmluZywgb3IgdGhlIHBhc3NlZCBpbiBlcnJvciBzdHJpbmcgaWYgbm9uZS4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK2R5bGRlcnJvciAoY29uc3QgY2hhciAqZXJybXNnKQoreworICBOU0xpbmtFZGl0RXJyb3JzIGxlcjsKKyAgaW50IGxlcm5vOworICBjb25zdCBjaGFyICpmaWxlOworICBjb25zdCBjaGFyICplcnJzdHI7CisKKyAgTlNMaW5rRWRpdEVycm9yICgmbGVyLCAmbGVybm8sICZmaWxlLCAmZXJyc3RyKTsKKworICBpZiAoISAoZXJyc3RyICYmICplcnJzdHIpKQorICAgIHsKKyAgICAgIGVycnN0ciA9IGVycm1zZzsKKyAgICB9CisKKyAgcmV0dXJuIGVycnN0cjsKK30KKworLyogVGhlcmUgc2hvdWxkIHByb2JhYmx5IGJlIGFuIGFwcGxlIGR5bGQgYXBpIGZvciB0aGlzLiAqLworc3RhdGljIGNvbnN0IG1hY2hfaGVhZGVyICoKK2x0X19uc21vZHVsZV9nZXRfaGVhZGVyIChOU01vZHVsZSBtb2R1bGUpCit7CisgIGludCBpID0gX2R5bGRfaW1hZ2VfY291bnQoKTsKKyAgY29uc3QgY2hhciAqbW9kbmFtZSA9IE5TTmFtZU9mTW9kdWxlIChtb2R1bGUpOworICBjb25zdCBtYWNoX2hlYWRlciAqbWggPSAwOworCisgIGlmICghbW9kbmFtZSkKKyAgICByZXR1cm4gTlVMTDsKKworICB3aGlsZSAoaSA+IDApCisgICAgeworICAgICAgLS1pOworICAgICAgaWYgKHN0cm5lcSAoX2R5bGRfZ2V0X2ltYWdlX25hbWUgKGkpLCBtb2RuYW1lKSkKKwl7CisJICBtaCA9IF9keWxkX2dldF9pbWFnZV9oZWFkZXIgKGkpOworCSAgYnJlYWs7CisJfQorICAgIH0KKworICByZXR1cm4gbWg7Cit9CisKKy8qIE5TQWRkSW1hZ2UgaXMgYWxzbyB1c2VkIHRvIGdldCB0aGUgbG9hZGVkIGltYWdlLCBidXQgaXQgb25seSB3b3JrcyBpZgorICAgdGhlIGxpYiBpcyBpbnN0YWxsZWQsIGZvciB1bmluc3RhbGxlZCBsaWJzIHdlIG5lZWQgdG8gY2hlY2sgdGhlCisgICBpbnN0YWxsX25hbWVzIGFnYWluc3QgZWFjaCBvdGhlci4gIE5vdGUgdGhhdCB0aGlzIGlzIHN0aWxsIGJyb2tlbiBpZgorICAgRFlMRF9JTUFHRV9TVUZGSVggaXMgc2V0IGFuZCBhIGRpZmZlcmVudCBsaWIgd2FzIGxvYWRlZCBhcyBhIHJlc3VsdC4gICovCitzdGF0aWMgY29uc3QgY2hhciAqCitsdF9faGVhZGVyX2dldF9pbnN0bmFtIChjb25zdCBtYWNoX2hlYWRlciAqbWgpCit7CisgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gc2l6ZW9mKG1hY2hfaGVhZGVyKTsKKyAgY29uc3QgY2hhciogcmVzdWx0ICAgPSAwOworICBpbnQgajsKKworICBmb3IgKGogPSAwOyBqIDwgbWgtPm5jbWRzOyBqKyspCisgICAgeworICAgICAgc3RydWN0IGxvYWRfY29tbWFuZCAqbGM7CisKKyAgICAgIGxjID0gKHN0cnVjdCBsb2FkX2NvbW1hbmQqKSAoKCh1bnNpZ25lZCBsb25nKSBtaCkgKyBvZmZzZXQpOworICAgICAgaWYgKExDX0lEX0RZTElCID09IGxjLT5jbWQpCisJeworCSAgcmVzdWx0PShjaGFyKikoKChkeWxpYl9jb21tYW5kKikgbGMpLT5keWxpYi5uYW1lLm9mZnNldCArCisJCQkgKHVuc2lnbmVkIGxvbmcpIGxjKTsKKwl9CisgICAgICBvZmZzZXQgKz0gbGMtPmNtZHNpemU7CisgICAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBjb25zdCBtYWNoX2hlYWRlciAqCitsdF9fbWF0Y2hfbG9hZGVkbGliIChjb25zdCBjaGFyICpuYW1lKQoreworICBjb25zdCBtYWNoX2hlYWRlciAqbWgJPSAwOworICBpbnQgaSA9IF9keWxkX2ltYWdlX2NvdW50KCk7CisKKyAgd2hpbGUgKGkgPiAwKQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKmlkOworCisgICAgICAtLWk7CisgICAgICBpZCA9IGx0X19oZWFkZXJfZ2V0X2luc3RuYW0gKF9keWxkX2dldF9pbWFnZV9oZWFkZXIgKGkpKTsKKyAgICAgIGlmIChpZCAmJiBzdHJuZXEgKGlkLCBuYW1lKSkKKwl7CisJICBtaCA9IF9keWxkX2dldF9pbWFnZV9oZWFkZXIgKGkpOworCSAgYnJlYWs7CisJfQorICAgIH0KKworICByZXR1cm4gbWg7Cit9CisKKy8qIFNhZmUgdG8gYXNzdW1lIG91ciBtaCBpcyBnb29kLiAqLworc3RhdGljIE5TU3ltYm9sCitsdF9fbGlua2VkbGliX3N5bWJvbCAoY29uc3QgY2hhciAqc3ltbmFtZSwgY29uc3QgbWFjaF9oZWFkZXIgKm1oKQoreworICBOU1N5bWJvbCBzeW1ib2wgPSAwOworCisgIGlmIChsdF9faW1hZ2Vfc3ltYm9sICYmIE5TSXNTeW1ib2xOYW1lRGVmaW5lZCAoc3ltbmFtZSkpCisgICAgeworICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBzaXplb2YobWFjaF9oZWFkZXIpOworICAgICAgc3RydWN0IGxvYWRfY29tbWFuZCAqbGM7CisgICAgICBpbnQgajsKKworICAgICAgZm9yIChqID0gMDsgaiA8IG1oLT5uY21kczsgaisrKQorCXsKKwkgIGxjID0gKHN0cnVjdCBsb2FkX2NvbW1hbmQqKSAoKCh1bnNpZ25lZCBsb25nKSBtaCkgKyBvZmZzZXQpOworCSAgaWYgKChMQ19MT0FEX0RZTElCID09IGxjLT5jbWQpIHx8IChMQ19MT0FEX1dFQUtfRFlMSUIgPT0gbGMtPmNtZCkpCisJICAgIHsKKwkgICAgICB1bnNpZ25lZCBsb25nIGJhc2UgPSAoKGR5bGliX2NvbW1hbmQgKikgbGMpLT5keWxpYi5uYW1lLm9mZnNldDsKKwkgICAgICBjaGFyICpuYW1lID0gKGNoYXIgKikgKGJhc2UgKyAodW5zaWduZWQgbG9uZykgbGMpOworCSAgICAgIGNvbnN0IG1hY2hfaGVhZGVyICptaDEgPSBsdF9fbWF0Y2hfbG9hZGVkbGliIChuYW1lKTsKKworCSAgICAgIGlmICghbWgxKQorCQl7CisJCSAgLyogTWF5YmUgTlNBZGRJbWFnZSBjYW4gZmluZCBpdCAqLworCQkgIG1oMSA9IGx0X19hZGRpbWFnZSAobmFtZSwKKwkJCQkgICAgICBOU0FERElNQUdFX09QVElPTl9SRVRVUk5fT05MWV9JRl9MT0FERUQKKwkJCQkgICAgICB8IE5TQURESU1BR0VfT1BUSU9OX1dJVEhfU0VBUkNISU5HCisJCQkJICAgICAgfCBOU0FERElNQUdFX09QVElPTl9SRVRVUk5fT05fRVJST1IpOworCQl9CisKKwkgICAgICBpZiAobWgxKQorCQl7CisJCSAgc3ltYm9sID0gbHRfX2ltYWdlX3N5bWJvbCAobWgxLCBzeW1uYW1lLCBMVF9fU1lNTE9PS1VQX09QVFMpOworCQkgIGlmIChzeW1ib2wpCisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisKKwkgIG9mZnNldCArPSBsYy0+Y21kc2l6ZTsKKwl9CisgICAgfQorCisgIHJldHVybiBzeW1ib2w7Cit9CmRpZmYgLS1naXQgYS9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvbG9hZGVycy9sb2FkX2FkZF9vbi5jIGIvc2hhcmUvbGlidG9vbC9saWJsdGRsL2xvYWRlcnMvbG9hZF9hZGRfb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzlmOWJhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbGlidG9vbC9saWJsdGRsL2xvYWRlcnMvbG9hZF9hZGRfb24uYwpAQCAtMCwwICsxLDE2NyBAQAorLyogbG9hZGVyLWxvYWRfYWRkX29uLmMgLS0gIGR5bmFtaWMgbGlua2luZyBmb3IgQmVPUworCisgICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDQsIDIwMDYsCisgICAgICAgICAgICAgICAgIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IFRob21hcyBUYW5uZXIsIDE5OTgKKworICAgTk9URTogVGhlIGNhbm9uaWNhbCBzb3VyY2Ugb2YgdGhpcyBmaWxlIGlzIG1haW50YWluZWQgd2l0aCB0aGUKKyAgIEdOVSBMaWJ0b29sIHBhY2thZ2UuICBSZXBvcnQgYnVncyB0byBidWctbGlidG9vbEBnbnUub3JnLgorCitHTlUgTGlibHRkbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgordmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCitpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CitpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKK3NhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCitHTlUgTGlibHRkbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFsb25nIHdpdGggR05VIExpYmx0ZGw7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgYQorY29weSBjYW4gYmUgZG93bmxvYWRlZCBmcm9tICBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGdwbC5odG1sLAorb3Igb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAibHRfX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJsdF9kbGxvYWRlci5oIgorCisvKiBVc2UgdGhlIHByZXByb2Nlc3NvciB0byByZW5hbWUgbm9uLXN0YXRpYyBzeW1ib2xzIHRvIGF2b2lkIG5hbWVzcGFjZQorICAgY29sbGlzaW9ucyB3aGVuIHRoZSBsb2FkZXIgY29kZSBpcyBzdGF0aWNhbGx5IGxpbmtlZCBpbnRvIGxpYmx0ZGwuCisgICBVc2UgdGhlICI8bW9kdWxlX25hbWU+X0xUWF8iIHByZWZpeCBzbyB0aGF0IHRoZSBzeW1ib2wgYWRkcmVzc2VzIGNhbgorICAgYmUgZmV0Y2hlZCBmcm9tIHRoZSBwcmVsb2FkZWQgc3ltYm9sIGxpc3QgYnkgbHRfZGxzeW0oKTogICovCisjZGVmaW5lIGdldF92dGFibGUJbG9hZF9hZGRfb25fTFRYX2dldF92dGFibGUKKworTFRfQkVHSU5fQ19ERUNMUworTFRfU0NPUEUgbHRfZGx2dGFibGUgKmdldF92dGFibGUgKGx0X3VzZXJfZGF0YSBsb2FkZXJfZGF0YSk7CitMVF9FTkRfQ19ERUNMUworCisKKy8qIEJvaWxlcnBsYXRlIGNvZGUgdG8gc2V0IHVwIHRoZSB2dGFibGUgZm9yIGhvb2tpbmcgdGhpcyBsb2FkZXIgaW50bworICAgbGlibHRkbCdzIGxvYWRlciBsaXN0OiAgKi8KK3N0YXRpYyBpbnQJIHZsX2V4aXQgIChsdF91c2VyX2RhdGEgbG9hZGVyX2RhdGEpOworc3RhdGljIGx0X21vZHVsZSB2bV9vcGVuICAobHRfdXNlcl9kYXRhIGxvYWRlcl9kYXRhLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0X2RsYWR2aXNlIGFkdmlzZSk7CitzdGF0aWMgaW50CSB2bV9jbG9zZSAobHRfdXNlcl9kYXRhIGxvYWRlcl9kYXRhLCBsdF9tb2R1bGUgbW9kdWxlKTsKK3N0YXRpYyB2b2lkICoJIHZtX3N5bSAgIChsdF91c2VyX2RhdGEgbG9hZGVyX2RhdGEsIGx0X21vZHVsZSBtb2R1bGUsCisJCQkgIGNvbnN0IGNoYXIgKnN5bWJvbG5hbWUpOworCitzdGF0aWMgbHRfZGx2dGFibGUgKnZ0YWJsZSA9IDA7CisKKy8qIFJldHVybiB0aGUgdnRhYmxlIGZvciB0aGlzIGxvYWRlciwgb25seSB0aGUgbmFtZSBhbmQgc3ltX3ByZWZpeAorICAgYXR0cmlidXRlcyAocGx1cyB0aGUgdmlydHVhbCBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMsIG9idmlvdXNseSkKKyAgIGNoYW5nZSBiZXR3ZWVuIGxvYWRlcnMuICAqLworbHRfZGx2dGFibGUgKgorZ2V0X3Z0YWJsZSAobHRfdXNlcl9kYXRhIGxvYWRlcl9kYXRhKQoreworICBpZiAoIXZ0YWJsZSkKKyAgICB7CisgICAgICB2dGFibGUgPSBsdF9femFsbG9jIChzaXplb2YgKnZ0YWJsZSk7CisgICAgfQorCisgIGlmICh2dGFibGUgJiYgIXZ0YWJsZS0+bmFtZSkKKyAgICB7CisgICAgICB2dGFibGUtPm5hbWUJCT0gImx0X2xvYWRfYWRkX29uIjsKKyAgICAgIHZ0YWJsZS0+bW9kdWxlX29wZW4JPSB2bV9vcGVuOworICAgICAgdnRhYmxlLT5tb2R1bGVfY2xvc2UJPSB2bV9jbG9zZTsKKyAgICAgIHZ0YWJsZS0+ZmluZF9zeW0JCT0gdm1fc3ltOworICAgICAgdnRhYmxlLT5kbGxvYWRlcl9leGl0CT0gdmxfZXhpdDsKKyAgICAgIHZ0YWJsZS0+ZGxsb2FkZXJfZGF0YQk9IGxvYWRlcl9kYXRhOworICAgICAgdnRhYmxlLT5wcmlvcml0eQkJPSBMVF9ETExPQURFUl9BUFBFTkQ7CisgICAgfQorCisgIGlmICh2dGFibGUgJiYgKHZ0YWJsZS0+ZGxsb2FkZXJfZGF0YSAhPSBsb2FkZXJfZGF0YSkpCisgICAgeworICAgICAgTFRfX1NFVEVSUk9SIChJTklUX0xPQURFUik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgcmV0dXJuIHZ0YWJsZTsKK30KKworCisKKy8qIC0tLSBJTVBMRU1FTlRBVElPTiAtLS0gKi8KKworCisjaW5jbHVkZSA8a2VybmVsL2ltYWdlLmg+CisKKy8qIEEgZnVuY3Rpb24gY2FsbGVkIHRocm91Z2ggdGhlIHZ0YWJsZSB3aGVuIHRoaXMgbG9hZGVyIGlzIG5vCisgICBsb25nZXIgbmVlZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gICovCitzdGF0aWMgaW50Cit2bF9leGl0IChsdF91c2VyX2RhdGEgTFRfX1VOVVNFRCBsb2FkZXJfZGF0YSkKK3sKKyAgdnRhYmxlID0gTlVMTDsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIEEgZnVuY3Rpb24gY2FsbGVkIHRocm91Z2ggdGhlIHZ0YWJsZSB0byBvcGVuIGEgbW9kdWxlIHdpdGggdGhpcworICAgbG9hZGVyLiAgUmV0dXJucyBhbiBvcGFxdWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5ld2x5IG9wZW5lZAorICAgbW9kdWxlIGZvciBwcm9jZXNzaW5nIHdpdGggdGhpcyBsb2FkZXIncyBvdGhlciB2dGFibGUgZnVuY3Rpb25zLiAgKi8KK3N0YXRpYyBsdF9tb2R1bGUKK3ZtX29wZW4gKGx0X3VzZXJfZGF0YSBMVF9fVU5VU0VEIGxvYWRlcl9kYXRhLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKyAgICAgICAgIGx0X2RsYWR2aXNlIExUX19VTlVTRUQgYWR2aXNlKQoreworICBpbWFnZV9pZCBpbWFnZSA9IDA7CisKKyAgaWYgKGZpbGVuYW1lKQorICAgIHsKKyAgICAgIGltYWdlID0gbG9hZF9hZGRfb24gKGZpbGVuYW1lKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpbWFnZV9pbmZvIGluZm87CisgICAgICBpbnQzMiBjb29raWUgPSAwOworICAgICAgaWYgKGdldF9uZXh0X2ltYWdlX2luZm8gKDAsICZjb29raWUsICZpbmZvKSA9PSBCX09LKQorCWltYWdlID0gbG9hZF9hZGRfb24gKGluZm8ubmFtZSk7CisgICAgfQorCisgIGlmIChpbWFnZSA8PSAwKQorICAgIHsKKyAgICAgIExUX19TRVRFUlJPUiAoQ0FOTk9UX09QRU4pOworICAgICAgaW1hZ2UgPSAwOworICAgIH0KKworICByZXR1cm4gKGx0X21vZHVsZSkgaW1hZ2U7Cit9CisKKworLyogQSBmdW5jdGlvbiBjYWxsZWQgdGhyb3VnaCB0aGUgdnRhYmxlIHdoZW4gYSBwYXJ0aWN1bGFyIG1vZHVsZQorICAgc2hvdWxkIGJlIHVubG9hZGVkLiAgKi8KK3N0YXRpYyBpbnQKK3ZtX2Nsb3NlIChsdF91c2VyX2RhdGEgTFRfX1VOVVNFRCBsb2FkZXJfZGF0YSwgbHRfbW9kdWxlIG1vZHVsZSkKK3sKKyAgaW50IGVycm9ycyA9IDA7CisKKyAgaWYgKHVubG9hZF9hZGRfb24gKChpbWFnZV9pZCkgbW9kdWxlKSAhPSBCX09LKQorICAgIHsKKyAgICAgIExUX19TRVRFUlJPUiAoQ0FOTk9UX0NMT1NFKTsKKyAgICAgICsrZXJyb3JzOworICAgIH0KKworICByZXR1cm4gZXJyb3JzOworfQorCisKKy8qIEEgZnVuY3Rpb24gY2FsbGVkIHRocm91Z2ggdGhlIHZ0YWJsZSB0byBnZXQgdGhlIGFkZHJlc3Mgb2YKKyAgIGEgc3ltYm9sIGxvYWRlZCBmcm9tIGEgcGFydGljdWxhciBtb2R1bGUuICAqLworc3RhdGljIHZvaWQgKgordm1fc3ltIChsdF91c2VyX2RhdGEgTFRfX1VOVVNFRCBsb2FkZXJfZGF0YSwgbHRfbW9kdWxlIG1vZHVsZSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgdm9pZCAqYWRkcmVzcyA9IDA7CisgIGltYWdlX2lkIGltYWdlID0gKGltYWdlX2lkKSBtb2R1bGU7CisKKyAgaWYgKGdldF9pbWFnZV9zeW1ib2wgKGltYWdlLCBuYW1lLCBCX1NZTUJPTF9UWVBFX0FOWSwgYWRkcmVzcykgIT0gQl9PSykKKyAgICB7CisgICAgICBMVF9fU0VURVJST1IgKFNZTUJPTF9OT1RfRk9VTkQpOworICAgICAgYWRkcmVzcyA9IDA7CisgICAgfQorCisgIHJldHVybiBhZGRyZXNzOworfQpkaWZmIC0tZ2l0IGEvc2hhcmUvbGlidG9vbC9saWJsdGRsL2xvYWRlcnMvbG9hZGxpYnJhcnkuYyBiL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9sb2FkZXJzL2xvYWRsaWJyYXJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc5YzAwOQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9sb2FkZXJzL2xvYWRsaWJyYXJ5LmMKQEAgLTAsMCArMSwzNjkgQEAKKy8qIGxvYWRlci1sb2FkbGlicmFyeS5jIC0tICBkeW5hbWljIGxpbmtpbmcgZm9yIFdpbjMyCisKKyAgIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwNCwgMjAwNSwgMjAwNiwKKyAgICAgICAgICAgICAgICAgMjAwNywgMjAwOCwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgVGhvbWFzIFRhbm5lciwgMTk5OAorCisgICBOT1RFOiBUaGUgY2Fub25pY2FsIHNvdXJjZSBvZiB0aGlzIGZpbGUgaXMgbWFpbnRhaW5lZCB3aXRoIHRoZQorICAgR05VIExpYnRvb2wgcGFja2FnZS4gIFJlcG9ydCBidWdzIHRvIGJ1Zy1saWJ0b29sQGdudS5vcmcuCisKK0dOVSBMaWJsdGRsIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCit2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK0FzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK2lmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKK2lzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK0dOVSBMaWJsdGRsIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYWxvbmcgd2l0aCBHTlUgTGlibHRkbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCBhCitjb3B5IGNhbiBiZSBkb3dubG9hZGVkIGZyb20gIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9sZ3BsLmh0bWwsCitvciBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJsdF9fcHJpdmF0ZS5oIgorI2luY2x1ZGUgImx0X2RsbG9hZGVyLmgiCisKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisjIGluY2x1ZGUgPHN5cy9jeWd3aW4uaD4KKyNlbmRpZgorCisvKiBVc2UgdGhlIHByZXByb2Nlc3NvciB0byByZW5hbWUgbm9uLXN0YXRpYyBzeW1ib2xzIHRvIGF2b2lkIG5hbWVzcGFjZQorICAgY29sbGlzaW9ucyB3aGVuIHRoZSBsb2FkZXIgY29kZSBpcyBzdGF0aWNhbGx5IGxpbmtlZCBpbnRvIGxpYmx0ZGwuCisgICBVc2UgdGhlICI8bW9kdWxlX25hbWU+X0xUWF8iIHByZWZpeCBzbyB0aGF0IHRoZSBzeW1ib2wgYWRkcmVzc2VzIGNhbgorICAgYmUgZmV0Y2hlZCBmcm9tIHRoZSBwcmVsb2FkZWQgc3ltYm9sIGxpc3QgYnkgbHRfZGxzeW0oKTogICovCisjZGVmaW5lIGdldF92dGFibGUJbG9hZGxpYnJhcnlfTFRYX2dldF92dGFibGUKKworTFRfQkVHSU5fQ19ERUNMUworTFRfU0NPUEUgbHRfZGx2dGFibGUgKmdldF92dGFibGUgKGx0X3VzZXJfZGF0YSBsb2FkZXJfZGF0YSk7CitMVF9FTkRfQ19ERUNMUworCisKKy8qIEJvaWxlcnBsYXRlIGNvZGUgdG8gc2V0IHVwIHRoZSB2dGFibGUgZm9yIGhvb2tpbmcgdGhpcyBsb2FkZXIgaW50bworICAgbGlibHRkbCdzIGxvYWRlciBsaXN0OiAgKi8KK3N0YXRpYyBpbnQJIHZsX2V4aXQgIChsdF91c2VyX2RhdGEgbG9hZGVyX2RhdGEpOworc3RhdGljIGx0X21vZHVsZSB2bV9vcGVuICAobHRfdXNlcl9kYXRhIGxvYWRlcl9kYXRhLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0X2RsYWR2aXNlIGFkdmlzZSk7CitzdGF0aWMgaW50CSB2bV9jbG9zZSAobHRfdXNlcl9kYXRhIGxvYWRlcl9kYXRhLCBsdF9tb2R1bGUgbW9kdWxlKTsKK3N0YXRpYyB2b2lkICoJIHZtX3N5bSAgIChsdF91c2VyX2RhdGEgbG9hZGVyX2RhdGEsIGx0X21vZHVsZSBtb2R1bGUsCisJCQkgIGNvbnN0IGNoYXIgKnN5bWJvbG5hbWUpOworCitzdGF0aWMgbHRfZGxpbnRlcmZhY2VfaWQgaWZhY2VfaWQgPSAwOworc3RhdGljIGx0X2RsdnRhYmxlICp2dGFibGUgPSAwOworCisvKiBSZXR1cm4gdGhlIHZ0YWJsZSBmb3IgdGhpcyBsb2FkZXIsIG9ubHkgdGhlIG5hbWUgYW5kIHN5bV9wcmVmaXgKKyAgIGF0dHJpYnV0ZXMgKHBsdXMgdGhlIHZpcnR1YWwgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zLCBvYnZpb3VzbHkpCisgICBjaGFuZ2UgYmV0d2VlbiBsb2FkZXJzLiAgKi8KK2x0X2RsdnRhYmxlICoKK2dldF92dGFibGUgKGx0X3VzZXJfZGF0YSBsb2FkZXJfZGF0YSkKK3sKKyAgaWYgKCF2dGFibGUpCisgICAgeworICAgICAgdnRhYmxlID0gKGx0X2RsdnRhYmxlICopIGx0X196YWxsb2MgKHNpemVvZiAqdnRhYmxlKTsKKyAgICAgIGlmYWNlX2lkID0gbHRfZGxpbnRlcmZhY2VfcmVnaXN0ZXIgKCJsdGRsIGxvYWRsaWJyYXJ5IiwgTlVMTCk7CisgICAgfQorCisgIGlmICh2dGFibGUgJiYgIXZ0YWJsZS0+bmFtZSkKKyAgICB7CisgICAgICB2dGFibGUtPm5hbWUJCT0gImx0X2xvYWRsaWJyYXJ5IjsKKyAgICAgIHZ0YWJsZS0+bW9kdWxlX29wZW4JPSB2bV9vcGVuOworICAgICAgdnRhYmxlLT5tb2R1bGVfY2xvc2UJPSB2bV9jbG9zZTsKKyAgICAgIHZ0YWJsZS0+ZmluZF9zeW0JCT0gdm1fc3ltOworICAgICAgdnRhYmxlLT5kbGxvYWRlcl9leGl0CT0gdmxfZXhpdDsKKyAgICAgIHZ0YWJsZS0+ZGxsb2FkZXJfZGF0YQk9IGxvYWRlcl9kYXRhOworICAgICAgdnRhYmxlLT5wcmlvcml0eQkJPSBMVF9ETExPQURFUl9BUFBFTkQ7CisgICAgfQorCisgIGlmICh2dGFibGUgJiYgKHZ0YWJsZS0+ZGxsb2FkZXJfZGF0YSAhPSBsb2FkZXJfZGF0YSkpCisgICAgeworICAgICAgTFRfX1NFVEVSUk9SIChJTklUX0xPQURFUik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgcmV0dXJuIHZ0YWJsZTsKK30KKworCisKKy8qIC0tLSBJTVBMRU1FTlRBVElPTiAtLS0gKi8KKworCisjaW5jbHVkZSA8d2luZG93cy5oPgorCisjZGVmaW5lIExPQ0FMRlJFRShtZW0pCQkJCQkgICAgIExUX1NUTVRfU1RBUlQgeyBcCisJaWYgKG1lbSkgeyBMb2NhbEZyZWUgKCh2b2lkICopbWVtKTsgbWVtID0gTlVMTDsgfSAgICB9IExUX1NUTVRfRU5ECisjZGVmaW5lIExPQURMSUJfX1NFVEVSUk9SKGVycm1zZykgTFRfX1NFVEVSUk9SU1RSIChsb2FkbGlicmFyeWVycm9yIChlcnJtc2cpKQorI2RlZmluZSBMT0FETElCX1NFVEVSUk9SKGVycmNvZGUpIExPQURMSUJfX1NFVEVSUk9SIChMVF9fU1RSRVJST1IgKGVycmNvZGUpKQorCitzdGF0aWMgY29uc3QgY2hhciAqbG9hZGxpYnJhcnllcnJvciAoY29uc3QgY2hhciAqZGVmYXVsdF9lcnJtc2cpOworc3RhdGljIERXT1JEIFdJTkFQSSB3cmFwX2dldHRocmVhZGVycm9ybW9kZSAodm9pZCk7CitzdGF0aWMgRFdPUkQgV0lOQVBJIGZhbGxiYWNrX2dldHRocmVhZGVycm9ybW9kZSAodm9pZCk7CitzdGF0aWMgQk9PTCBXSU5BUEkgd3JhcF9zZXR0aHJlYWRlcnJvcm1vZGUgKERXT1JEIG1vZGUsIERXT1JEICpvbGRtb2RlKTsKK3N0YXRpYyBCT09MIFdJTkFQSSBmYWxsYmFja19zZXR0aHJlYWRlcnJvcm1vZGUgKERXT1JEIG1vZGUsIERXT1JEICpvbGRtb2RlKTsKKwordHlwZWRlZiBEV09SRCAoV0lOQVBJIGdldHRocmVhZGVycm9ybW9kZV90eXBlKSAodm9pZCk7Cit0eXBlZGVmIEJPT0wgKFdJTkFQSSBzZXR0aHJlYWRlcnJvcm1vZGVfdHlwZSkgKERXT1JELCBEV09SRCAqKTsKKworc3RhdGljIGdldHRocmVhZGVycm9ybW9kZV90eXBlICpnZXR0aHJlYWRlcnJvcm1vZGUgPSB3cmFwX2dldHRocmVhZGVycm9ybW9kZTsKK3N0YXRpYyBzZXR0aHJlYWRlcnJvcm1vZGVfdHlwZSAqc2V0dGhyZWFkZXJyb3Jtb2RlID0gd3JhcF9zZXR0aHJlYWRlcnJvcm1vZGU7CitzdGF0aWMgY2hhciAqZXJyb3JfbWVzc2FnZSA9IDA7CisKKworLyogQSBmdW5jdGlvbiBjYWxsZWQgdGhyb3VnaCB0aGUgdnRhYmxlIHdoZW4gdGhpcyBsb2FkZXIgaXMgbm8KKyAgIGxvbmdlciBuZWVkZWQgYnkgdGhlIGFwcGxpY2F0aW9uLiAgKi8KK3N0YXRpYyBpbnQKK3ZsX2V4aXQgKGx0X3VzZXJfZGF0YSBMVF9fVU5VU0VEIGxvYWRlcl9kYXRhKQoreworICB2dGFibGUgPSBOVUxMOworICBMT0NBTEZSRUUgKGVycm9yX21lc3NhZ2UpOworICByZXR1cm4gMDsKK30KKworLyogQSBmdW5jdGlvbiBjYWxsZWQgdGhyb3VnaCB0aGUgdnRhYmxlIHRvIG9wZW4gYSBtb2R1bGUgd2l0aCB0aGlzCisgICBsb2FkZXIuICBSZXR1cm5zIGFuIG9wYXF1ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbmV3bHkgb3BlbmVkCisgICBtb2R1bGUgZm9yIHByb2Nlc3Npbmcgd2l0aCB0aGlzIGxvYWRlcidzIG90aGVyIHZ0YWJsZSBmdW5jdGlvbnMuICAqLworc3RhdGljIGx0X21vZHVsZQordm1fb3BlbiAobHRfdXNlcl9kYXRhIExUX19VTlVTRUQgbG9hZGVyX2RhdGEsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorICAgICAgICAgbHRfZGxhZHZpc2UgTFRfX1VOVVNFRCBhZHZpc2UpCit7CisgIGx0X21vZHVsZQltb2R1bGUJICAgPSAwOworICBjaGFyCQkqZXh0OworICBjaGFyCQl3cGF0aFtNQVhfUEFUSF07CisgIHNpemVfdAlsZW47CisKKyAgaWYgKCFmaWxlbmFtZSkKKyAgICB7CisgICAgICAvKiBHZXQgdGhlIG5hbWUgb2YgbWFpbiBtb2R1bGUgKi8KKyAgICAgICp3cGF0aCA9IDA7CisgICAgICBHZXRNb2R1bGVGaWxlTmFtZSAoTlVMTCwgd3BhdGgsIHNpemVvZiAod3BhdGgpKTsKKyAgICAgIGZpbGVuYW1lID0gd3BhdGg7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbGVuID0gTFRfU1RSTEVOIChmaWxlbmFtZSk7CisKKyAgICAgIGlmIChsZW4gPj0gTUFYX1BBVEgpCisgICAgICAgIHsKKwkgIExUX19TRVRFUlJPUiAoQ0FOTk9UX09QRU4pOworCSAgcmV0dXJuIDA7CisJfQorCisjaWYgSEFWRV9ERUNMX0NZR1dJTl9DT05WX1BBVEgKKyAgICAgIGlmIChjeWd3aW5fY29udl9wYXRoIChDQ1BfUE9TSVhfVE9fV0lOX0EsIGZpbGVuYW1lLCB3cGF0aCwgTUFYX1BBVEgpKQorCXsKKwkgIExUX19TRVRFUlJPUiAoQ0FOTk9UX09QRU4pOworCSAgcmV0dXJuIDA7CisJfQorICAgICAgbGVuID0gMDsKKyNlbGlmIGRlZmluZWQoX19DWUdXSU5fXykKKyAgICAgIGN5Z3dpbl9jb252X3RvX2Z1bGxfd2luMzJfcGF0aCAoZmlsZW5hbWUsIHdwYXRoKTsKKyAgICAgIGxlbiA9IDA7CisjZWxzZQorICAgICAgc3RyY3B5KHdwYXRoLCBmaWxlbmFtZSk7CisjZW5kaWYKKworICAgICAgZXh0ID0gc3RycmNociAod3BhdGgsICcuJyk7CisgICAgICBpZiAoIWV4dCkKKwl7CisJICAvKiBBcHBlbmQgYSBgLicgdG8gc3RvcCBXaW5kb3dzIGZyb20gYWRkaW5nIGFuCisJICAgICBpbXBsaWNpdCBgLmRsbCcgZXh0ZW5zaW9uLiAqLworCSAgaWYgKCFsZW4pCisJICAgIGxlbiA9IHN0cmxlbiAod3BhdGgpOworCisJICBpZiAobGVuICsgMSA+PSBNQVhfUEFUSCkKKwkgICAgeworCSAgICAgIExUX19TRVRFUlJPUiAoQ0FOTk9UX09QRU4pOworCSAgICAgIHJldHVybiAwOworCSAgICB9CisKKwkgIHdwYXRoW2xlbl0gPSAnLic7CisJICB3cGF0aFtsZW4rMV0gPSAnXDAnOworCX0KKyAgICB9CisKKyAgeworICAgIC8qIFNpbGVuY2UgZGlhbG9nIGZyb20gTG9hZExpYnJhcnkgb24gc29tZSBmYWlsdXJlcy4gKi8KKyAgICBEV09SRCBlcnJvcm1vZGUgPSBnZXR0aHJlYWRlcnJvcm1vZGUgKCk7CisgICAgRFdPUkQgbGFzdF9lcnJvcjsKKworICAgIHNldHRocmVhZGVycm9ybW9kZSAoZXJyb3Jtb2RlIHwgU0VNX0ZBSUxDUklUSUNBTEVSUk9SUywgTlVMTCk7CisKKyAgICBtb2R1bGUgPSBMb2FkTGlicmFyeSAod3BhdGgpOworCisgICAgLyogUmVzdG9yZSB0aGUgZXJyb3IgbW9kZS4gKi8KKyAgICBsYXN0X2Vycm9yID0gR2V0TGFzdEVycm9yICgpOworICAgIHNldHRocmVhZGVycm9ybW9kZSAoZXJyb3Jtb2RlLCBOVUxMKTsKKyAgICBTZXRMYXN0RXJyb3IgKGxhc3RfZXJyb3IpOworICB9CisKKyAgLyogbGlibHRkbCBleHBlY3RzIHRoaXMgZnVuY3Rpb24gdG8gZmFpbCBpZiBpdCBpcyB1bmFibGUKKyAgICAgdG8gcGh5c2ljYWxseSBsb2FkIHRoZSBsaWJyYXJ5LiAgU2FkbHksIExvYWRMaWJyYXJ5CisgICAgIHdpbGwgc2VhcmNoIHRoZSBsb2FkZWQgbGlicmFyaWVzIGZvciBhIG1hdGNoIGFuZCByZXR1cm4KKyAgICAgb25lIG9mIHRoZW0gaWYgdGhlIHBhdGggc2VhcmNoIGxvYWQgZmFpbHMuCisKKyAgICAgV2UgY2hlY2sgd2hldGhlciBMb2FkTGlicmFyeSBpcyByZXR1cm5pbmcgYSBoYW5kbGUgdG8KKyAgICAgYW4gYWxyZWFkeSBsb2FkZWQgbW9kdWxlLCBhbmQgc2ltdWxhdGUgZmFpbHVyZSBpZiB3ZQorICAgICBmaW5kIG9uZS4gKi8KKyAgeworICAgIGx0X2RsaGFuZGxlIGN1ciA9IDA7CisKKyAgICB3aGlsZSAoKGN1ciA9IGx0X2RsaGFuZGxlX2l0ZXJhdGUgKGlmYWNlX2lkLCBjdXIpKSkKKyAgICAgIHsKKyAgICAgICAgaWYgKCFjdXItPm1vZHVsZSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBjdXIgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgIGlmIChjdXItPm1vZHVsZSA9PSBtb2R1bGUpCisgICAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgfQorCisgICAgaWYgKCFtb2R1bGUpCisgICAgICBMT0FETElCX1NFVEVSUk9SIChDQU5OT1RfT1BFTik7CisgICAgZWxzZSBpZiAoY3VyKQorICAgICAgeworICAgICAgICBMVF9fU0VURVJST1IgKENBTk5PVF9PUEVOKTsKKyAgICAgICAgbW9kdWxlID0gMDsKKyAgICAgIH0KKyAgfQorCisgIHJldHVybiBtb2R1bGU7Cit9CisKKworLyogQSBmdW5jdGlvbiBjYWxsZWQgdGhyb3VnaCB0aGUgdnRhYmxlIHdoZW4gYSBwYXJ0aWN1bGFyIG1vZHVsZQorICAgc2hvdWxkIGJlIHVubG9hZGVkLiAgKi8KK3N0YXRpYyBpbnQKK3ZtX2Nsb3NlIChsdF91c2VyX2RhdGEgTFRfX1VOVVNFRCBsb2FkZXJfZGF0YSwgbHRfbW9kdWxlIG1vZHVsZSkKK3sKKyAgaW50IGVycm9ycyA9IDA7CisKKyAgaWYgKEZyZWVMaWJyYXJ5ICgoSE1PRFVMRSkgbW9kdWxlKSA9PSAwKQorICAgIHsKKyAgICAgIExPQURMSUJfU0VURVJST1IgKENBTk5PVF9DTE9TRSk7CisgICAgICArK2Vycm9yczsKKyAgICB9CisKKyAgcmV0dXJuIGVycm9yczsKK30KKworCisvKiBBIGZ1bmN0aW9uIGNhbGxlZCB0aHJvdWdoIHRoZSB2dGFibGUgdG8gZ2V0IHRoZSBhZGRyZXNzIG9mCisgICBhIHN5bWJvbCBsb2FkZWQgZnJvbSBhIHBhcnRpY3VsYXIgbW9kdWxlLiAgKi8KK3N0YXRpYyB2b2lkICoKK3ZtX3N5bSAobHRfdXNlcl9kYXRhIExUX19VTlVTRUQgbG9hZGVyX2RhdGEsIGx0X21vZHVsZSBtb2R1bGUsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIHZvaWQgKmFkZHJlc3MgPSAodm9pZCAqKSBHZXRQcm9jQWRkcmVzcyAoKEhNT0RVTEUpIG1vZHVsZSwgbmFtZSk7CisKKyAgaWYgKCFhZGRyZXNzKQorICAgIHsKKyAgICAgIExPQURMSUJfU0VURVJST1IgKFNZTUJPTF9OT1RfRk9VTkQpOworICAgIH0KKworICByZXR1cm4gYWRkcmVzczsKK30KKworCisKKy8qIC0tLSBIRUxQRVIgRlVOQ1RJT05TIC0tLSAqLworCisKKy8qIFJldHVybiB0aGUgd2luZG93cyBlcnJvciBtZXNzYWdlLCBvciB0aGUgcGFzc2VkIGluIGVycm9yIG1lc3NhZ2Ugb24KKyAgIGZhaWx1cmUuICovCitzdGF0aWMgY29uc3QgY2hhciAqCitsb2FkbGlicmFyeWVycm9yIChjb25zdCBjaGFyICpkZWZhdWx0X2Vycm1zZykKK3sKKyAgc2l6ZV90IGxlbjsKKyAgTE9DQUxGUkVFIChlcnJvcl9tZXNzYWdlKTsKKworICBGb3JtYXRNZXNzYWdlQSAoRk9STUFUX01FU1NBR0VfQUxMT0NBVEVfQlVGRkVSIHwKKyAgICAgICAgICAgICAgICAgIEZPUk1BVF9NRVNTQUdFX0ZST01fU1lTVEVNIHwKKyAgICAgICAgICAgICAgICAgIEZPUk1BVF9NRVNTQUdFX0lHTk9SRV9JTlNFUlRTLAorICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgIEdldExhc3RFcnJvciAoKSwKKyAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAoY2hhciAqKSAmZXJyb3JfbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgIDAsIE5VTEwpOworCisgIC8qIFJlbW92ZSB0cmFpbGluZyBDUk5MICovCisgIGxlbiA9IExUX1NUUkxFTiAoZXJyb3JfbWVzc2FnZSk7CisgIGlmIChsZW4gJiYgZXJyb3JfbWVzc2FnZVtsZW4gLSAxXSA9PSAnXG4nKQorICAgIGVycm9yX21lc3NhZ2VbLS1sZW5dID0gTFRfRU9TX0NIQVI7CisgIGlmIChsZW4gJiYgZXJyb3JfbWVzc2FnZVtsZW4gLSAxXSA9PSAnXHInKQorICAgIGVycm9yX21lc3NhZ2VbLS1sZW5dID0gTFRfRU9TX0NIQVI7CisKKyAgcmV0dXJuIGxlbiA/IGVycm9yX21lc3NhZ2UgOiBkZWZhdWx0X2Vycm1zZzsKK30KKworLyogQSBmdW5jdGlvbiBjYWxsZWQgdGhyb3VnaCB0aGUgZ2V0dGhyZWFkZXJyb3Jtb2RlIHZhcmlhYmxlIHdoaWNoIGNoZWNrcworICAgaWYgdGhlIHN5c3RlbSBzdXBwb3J0cyBHZXRUaHJlYWRFcnJvck1vZGUgKG9yIEdldEVycm9yTW9kZSkgYW5kIGFycmFuZ2VzCisgICBmb3IgaXQgb3IgYSBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiB0byBiZSBjYWxsZWQgZGlyZWN0bHkgaW4gdGhlIGZ1dHVyZS4KKyAgIFRoZSBzZWxlY3RlZCB2ZXJzaW9uIGlzIHRoZW4gY2FsbGVkLiAqLworc3RhdGljIERXT1JEIFdJTkFQSQord3JhcF9nZXR0aHJlYWRlcnJvcm1vZGUgKHZvaWQpCit7CisgIEhNT0RVTEUga2VybmVsMzIgPSBHZXRNb2R1bGVIYW5kbGVBICgia2VybmVsMzIuZGxsIik7CisgIGdldHRocmVhZGVycm9ybW9kZQorICAgID0gKGdldHRocmVhZGVycm9ybW9kZV90eXBlICopIEdldFByb2NBZGRyZXNzIChrZXJuZWwzMiwKKwkJCQkJCSAgIkdldFRocmVhZEVycm9yTW9kZSIpOworICBpZiAoIWdldHRocmVhZGVycm9ybW9kZSkKKyAgICBnZXR0aHJlYWRlcnJvcm1vZGUKKyAgICAgID0gKGdldHRocmVhZGVycm9ybW9kZV90eXBlICopIEdldFByb2NBZGRyZXNzIChrZXJuZWwzMiwKKwkJCQkJCSAgICAiR2V0RXJyb3JNb2RlIik7CisgIGlmICghZ2V0dGhyZWFkZXJyb3Jtb2RlKQorICAgIGdldHRocmVhZGVycm9ybW9kZSA9IGZhbGxiYWNrX2dldHRocmVhZGVycm9ybW9kZTsKKyAgcmV0dXJuIGdldHRocmVhZGVycm9ybW9kZSAoKTsKK30KKworLyogQSBmdW5jdGlvbiBjYWxsZWQgdGhyb3VnaCB0aGUgZ2V0dGhyZWFkZXJyb3Jtb2RlIHZhcmlhYmxlIGZvciBjYXNlcworICAgd2hlcmUgdGhlIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IEdldFRocmVhZEVycm9yTW9kZSBvciBHZXRFcnJvck1vZGUgKi8KK3N0YXRpYyBEV09SRCBXSU5BUEkKK2ZhbGxiYWNrX2dldHRocmVhZGVycm9ybW9kZSAodm9pZCkKK3sKKyAgLyogUHJpb3IgdG8gV2luZG93cyBWaXN0YSwgdGhlIG9ubHkgd2F5IHRvIGdldCB0aGUgY3VycmVudCBlcnJvcgorICAgICBtb2RlIHdhcyB0byBzZXQgYSBuZXcgb25lLiBJbiBvdXIgY2FzZSwgd2UgYXJlIHNldHRpbmcgYSBuZXcKKyAgICAgZXJyb3IgbW9kZSByaWdodCBhZnRlciAiZ2V0dGluZyIgaXQgd2hpbGUgaWdub3JpbmcgdGhlIGVycm9yCisgICAgIG1vZGUgaW4gZWZmZWN0IHdoZW4gc2V0dGluZyB0aGUgbmV3IGVycm9yIG1vZGUsIHNvIHRoYXQncworICAgICBmYWlybHkgb2suICovCisgIHJldHVybiAoRFdPUkQpIFNldEVycm9yTW9kZSAoU0VNX0ZBSUxDUklUSUNBTEVSUk9SUyk7Cit9CisKKy8qIEEgZnVuY3Rpb24gY2FsbGVkIHRocm91Z2ggdGhlIHNldHRocmVhZGVycm9ybW9kZSB2YXJpYWJsZSB3aGljaCBjaGVja3MKKyAgIGlmIHRoZSBzeXN0ZW0gc3VwcG9ydHMgU2V0VGhyZWFkRXJyb3JNb2RlIGFuZCBhcnJhbmdlcyBmb3IgaXQgb3IgYQorICAgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gdG8gYmUgY2FsbGVkIGRpcmVjdGx5IGluIHRoZSBmdXR1cmUuCisgICBUaGUgc2VsZWN0ZWQgdmVyc2lvbiBpcyB0aGVuIGNhbGxlZC4gKi8KK3N0YXRpYyBCT09MIFdJTkFQSQord3JhcF9zZXR0aHJlYWRlcnJvcm1vZGUgKERXT1JEIG1vZGUsIERXT1JEICpvbGRtb2RlKQoreworICBITU9EVUxFIGtlcm5lbDMyID0gR2V0TW9kdWxlSGFuZGxlQSAoImtlcm5lbDMyLmRsbCIpOworICBzZXR0aHJlYWRlcnJvcm1vZGUKKyAgICA9IChzZXR0aHJlYWRlcnJvcm1vZGVfdHlwZSAqKSBHZXRQcm9jQWRkcmVzcyAoa2VybmVsMzIsCisJCQkJCQkgICJTZXRUaHJlYWRFcnJvck1vZGUiKTsKKyAgaWYgKCFzZXR0aHJlYWRlcnJvcm1vZGUpCisgICAgc2V0dGhyZWFkZXJyb3Jtb2RlID0gZmFsbGJhY2tfc2V0dGhyZWFkZXJyb3Jtb2RlOworICByZXR1cm4gc2V0dGhyZWFkZXJyb3Jtb2RlIChtb2RlLCBvbGRtb2RlKTsKK30KKworLyogQSBmdW5jdGlvbiBjYWxsZWQgdGhyb3VnaCB0aGUgc2V0dGhyZWFkZXJyb3Jtb2RlIHZhcmlhYmxlIGZvciBjYXNlcworICAgd2hlcmUgdGhlIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IFNldFRocmVhZEVycm9yTW9kZS4gKi8KK3N0YXRpYyBCT09MIFdJTkFQSQorZmFsbGJhY2tfc2V0dGhyZWFkZXJyb3Jtb2RlIChEV09SRCBtb2RlLCBEV09SRCAqb2xkbW9kZSkKK3sKKyAgLyogUHJpb3IgdG8gV2luZG93cyA3LCB0aGVyZSB3YXMgbm8gd2F5IHRvIHNldCB0aGUgdGhyZWFkIGxvY2FsIGVycm9yCisgICAgIG1vZGUsIHNvIHNldCB0aGUgcHJvY2VzcyBnbG9iYWwgZXJyb3IgbW9kZSBpbnN0ZWFkLiAqLworICBEV09SRCBvbGQgPSAoRFdPUkQpIFNldEVycm9yTW9kZSAobW9kZSk7CisgIGlmIChvbGRtb2RlKQorICAgICpvbGRtb2RlID0gb2xkOworICByZXR1cm4gVFJVRTsKK30KZGlmZiAtLWdpdCBhL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9sb2FkZXJzL3ByZW9wZW4uYyBiL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9sb2FkZXJzL3ByZW9wZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTQ5Mjg3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbGlidG9vbC9saWJsdGRsL2xvYWRlcnMvcHJlb3Blbi5jCkBAIC0wLDAgKzEsMzc1IEBACisvKiBsb2FkZXItcHJlb3Blbi5jIC0tIGVtdWxhdGUgZHluYW1pYyBsaW5raW5nIHVzaW5nIHByZWxvYWRlZF9zeW1ib2xzCisKKyAgIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwNCwgMjAwNiwKKyAgICAgICAgICAgICAgICAgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgVGhvbWFzIFRhbm5lciwgMTk5OAorCisgICBOT1RFOiBUaGUgY2Fub25pY2FsIHNvdXJjZSBvZiB0aGlzIGZpbGUgaXMgbWFpbnRhaW5lZCB3aXRoIHRoZQorICAgR05VIExpYnRvb2wgcGFja2FnZS4gIFJlcG9ydCBidWdzIHRvIGJ1Zy1saWJ0b29sQGdudS5vcmcuCisKK0dOVSBMaWJsdGRsIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCit2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK0FzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK2lmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKK2lzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK0dOVSBMaWJsdGRsIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYWxvbmcgd2l0aCBHTlUgTGlibHRkbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCBhCitjb3B5IGNhbiBiZSBkb3dubG9hZGVkIGZyb20gIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9sZ3BsLmh0bWwsCitvciBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJsdF9fcHJpdmF0ZS5oIgorI2luY2x1ZGUgImx0X2RsbG9hZGVyLmgiCisKKy8qIFVzZSB0aGUgcHJlcHJvY2Vzc29yIHRvIHJlbmFtZSBub24tc3RhdGljIHN5bWJvbHMgdG8gYXZvaWQgbmFtZXNwYWNlCisgICBjb2xsaXNpb25zIHdoZW4gdGhlIGxvYWRlciBjb2RlIGlzIHN0YXRpY2FsbHkgbGlua2VkIGludG8gbGlibHRkbC4KKyAgIFVzZSB0aGUgIjxtb2R1bGVfbmFtZT5fTFRYXyIgcHJlZml4IHNvIHRoYXQgdGhlIHN5bWJvbCBhZGRyZXNzZXMgY2FuCisgICBiZSBmZXRjaGVkIGZyb20gdGhlIHByZWxvYWRlZCBzeW1ib2wgbGlzdCBieSBsdF9kbHN5bSgpOiAgKi8KKyNkZWZpbmUgZ2V0X3Z0YWJsZQlwcmVvcGVuX0xUWF9nZXRfdnRhYmxlCisKK0xUX0JFR0lOX0NfREVDTFMKK0xUX1NDT1BFIGx0X2RsdnRhYmxlICpnZXRfdnRhYmxlIChsdF91c2VyX2RhdGEgbG9hZGVyX2RhdGEpOworTFRfRU5EX0NfREVDTFMKKworCisvKiBCb2lsZXJwbGF0ZSBjb2RlIHRvIHNldCB1cCB0aGUgdnRhYmxlIGZvciBob29raW5nIHRoaXMgbG9hZGVyIGludG8KKyAgIGxpYmx0ZGwncyBsb2FkZXIgbGlzdDogICovCitzdGF0aWMgaW50CSB2bF9pbml0ICAobHRfdXNlcl9kYXRhIGxvYWRlcl9kYXRhKTsKK3N0YXRpYyBpbnQJIHZsX2V4aXQgIChsdF91c2VyX2RhdGEgbG9hZGVyX2RhdGEpOworc3RhdGljIGx0X21vZHVsZSB2bV9vcGVuICAobHRfdXNlcl9kYXRhIGxvYWRlcl9kYXRhLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0X2RsYWR2aXNlIGFkdmlzZSk7CitzdGF0aWMgaW50CSB2bV9jbG9zZSAobHRfdXNlcl9kYXRhIGxvYWRlcl9kYXRhLCBsdF9tb2R1bGUgbW9kdWxlKTsKK3N0YXRpYyB2b2lkICoJIHZtX3N5bSAgIChsdF91c2VyX2RhdGEgbG9hZGVyX2RhdGEsIGx0X21vZHVsZSBtb2R1bGUsCisJCQkgIGNvbnN0IGNoYXIgKnN5bWJvbG5hbWUpOworCitzdGF0aWMgbHRfZGx2dGFibGUgKnZ0YWJsZSA9IDA7CisKKy8qIFJldHVybiB0aGUgdnRhYmxlIGZvciB0aGlzIGxvYWRlciwgb25seSB0aGUgbmFtZSBhbmQgc3ltX3ByZWZpeAorICAgYXR0cmlidXRlcyAocGx1cyB0aGUgdmlydHVhbCBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMsIG9idmlvdXNseSkKKyAgIGNoYW5nZSBiZXR3ZWVuIGxvYWRlcnMuICAqLworbHRfZGx2dGFibGUgKgorZ2V0X3Z0YWJsZSAobHRfdXNlcl9kYXRhIGxvYWRlcl9kYXRhKQoreworICBpZiAoIXZ0YWJsZSkKKyAgICB7CisgICAgICB2dGFibGUgPSAobHRfZGx2dGFibGUgKikgbHRfX3phbGxvYyAoc2l6ZW9mICp2dGFibGUpOworICAgIH0KKworICBpZiAodnRhYmxlICYmICF2dGFibGUtPm5hbWUpCisgICAgeworICAgICAgdnRhYmxlLT5uYW1lCQk9ICJsdF9wcmVvcGVuIjsKKyAgICAgIHZ0YWJsZS0+c3ltX3ByZWZpeAk9IDA7CisgICAgICB2dGFibGUtPm1vZHVsZV9vcGVuCT0gdm1fb3BlbjsKKyAgICAgIHZ0YWJsZS0+bW9kdWxlX2Nsb3NlCT0gdm1fY2xvc2U7CisgICAgICB2dGFibGUtPmZpbmRfc3ltCQk9IHZtX3N5bTsKKyAgICAgIHZ0YWJsZS0+ZGxsb2FkZXJfaW5pdAk9IHZsX2luaXQ7CisgICAgICB2dGFibGUtPmRsbG9hZGVyX2V4aXQJPSB2bF9leGl0OworICAgICAgdnRhYmxlLT5kbGxvYWRlcl9kYXRhCT0gbG9hZGVyX2RhdGE7CisgICAgICB2dGFibGUtPnByaW9yaXR5CQk9IExUX0RMTE9BREVSX1BSRVBFTkQ7CisgICAgfQorCisgIGlmICh2dGFibGUgJiYgKHZ0YWJsZS0+ZGxsb2FkZXJfZGF0YSAhPSBsb2FkZXJfZGF0YSkpCisgICAgeworICAgICAgTFRfX1NFVEVSUk9SIChJTklUX0xPQURFUik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgcmV0dXJuIHZ0YWJsZTsKK30KKworCisKKy8qIC0tLSBJTVBMRU1FTlRBVElPTiAtLS0gKi8KKworCisvKiBXcmFwcGVyIHR5cGUgdG8gY2hhaW4gdG9nZXRoZXIgc3ltYm9sIGxpc3RzIG9mIHZhcmlvdXMgb3JpZ2lucy4gICovCit0eXBlZGVmIHN0cnVjdCBzeW1saXN0X2NoYWluCit7CisgIHN0cnVjdCBzeW1saXN0X2NoYWluICpuZXh0OworICBjb25zdCBsdF9kbHN5bWxpc3QgICAqc3ltbGlzdDsKK30gc3ltbGlzdF9jaGFpbjsKKworCitzdGF0aWMgaW50IGFkZF9zeW1saXN0ICAgKGNvbnN0IGx0X2Rsc3ltbGlzdCAqc3ltbGlzdCk7CitzdGF0aWMgaW50IGZyZWVfc3ltbGlzdHMgKHZvaWQpOworCisvKiBUaGUgc3RhcnQgb2YgdGhlIHN5bWJvbCBsaXN0cyBjaGFpbi4gICovCitzdGF0aWMgc3ltbGlzdF9jaGFpbgkgICAgICAgKnByZWxvYWRlZF9zeW1saXN0cwkJPSAwOworCisvKiBBIHN5bWJvbCBsaXN0IHByZWxvYWRlZCBiZWZvcmUgbHRfaW5pdCgpIHdhcyBjYWxsZWQuICAqLworc3RhdGljIGNvbnN0CWx0X2Rsc3ltbGlzdCAgICpkZWZhdWx0X3ByZWxvYWRlZF9zeW1ib2xzCT0gMDsKKworCisvKiBBIGZ1bmN0aW9uIGNhbGxlZCB0aHJvdWdoIHRoZSB2dGFibGUgdG8gaW5pdGlhbGlzZSB0aGlzIGxvYWRlci4gICovCitzdGF0aWMgaW50Cit2bF9pbml0IChsdF91c2VyX2RhdGEgTFRfX1VOVVNFRCBsb2FkZXJfZGF0YSkKK3sKKyAgaW50IGVycm9ycyA9IDA7CisKKyAgcHJlbG9hZGVkX3N5bWxpc3RzID0gMDsKKyAgaWYgKGRlZmF1bHRfcHJlbG9hZGVkX3N5bWJvbHMpCisgICAgeworICAgICAgZXJyb3JzID0gbHRfZGxwcmVsb2FkIChkZWZhdWx0X3ByZWxvYWRlZF9zeW1ib2xzKTsKKyAgICB9CisKKyAgcmV0dXJuIGVycm9yczsKK30KKworCisvKiBBIGZ1bmN0aW9uIGNhbGxlZCB0aHJvdWdoIHRoZSB2dGFibGUgd2hlbiB0aGlzIGxvYWRlciBpcyBubworICAgbG9uZ2VyIG5lZWRlZCBieSB0aGUgYXBwbGljYXRpb24uICAqLworc3RhdGljIGludAordmxfZXhpdCAobHRfdXNlcl9kYXRhIExUX19VTlVTRUQgbG9hZGVyX2RhdGEpCit7CisgIHZ0YWJsZSA9IE5VTEw7CisgIGZyZWVfc3ltbGlzdHMgKCk7CisgIHJldHVybiAwOworfQorCisKKy8qIEEgZnVuY3Rpb24gY2FsbGVkIHRocm91Z2ggdGhlIHZ0YWJsZSB0byBvcGVuIGEgbW9kdWxlIHdpdGggdGhpcworICAgbG9hZGVyLiAgUmV0dXJucyBhbiBvcGFxdWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5ld2x5IG9wZW5lZAorICAgbW9kdWxlIGZvciBwcm9jZXNzaW5nIHdpdGggdGhpcyBsb2FkZXIncyBvdGhlciB2dGFibGUgZnVuY3Rpb25zLiAgKi8KK3N0YXRpYyBsdF9tb2R1bGUKK3ZtX29wZW4gKGx0X3VzZXJfZGF0YSBMVF9fVU5VU0VEIGxvYWRlcl9kYXRhLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKyAgICAgICAgIGx0X2RsYWR2aXNlIExUX19VTlVTRUQgYWR2aXNlKQoreworICBzeW1saXN0X2NoYWluICpsaXN0czsKKyAgbHRfbW9kdWxlCSBtb2R1bGUgPSAwOworCisgIGlmICghcHJlbG9hZGVkX3N5bWxpc3RzKQorICAgIHsKKyAgICAgIExUX19TRVRFUlJPUiAoTk9fU1lNQk9MUyk7CisgICAgICBnb3RvIGRvbmU7CisgICAgfQorCisgIC8qIENhbid0IHVzZSBOVUxMIGFzIHRoZSByZWZsZWN0aXZlIHN5bWJvbCBoZWFkZXIsIGFzIE5VTEwgaXMKKyAgICAgdXNlZCB0byBtYXJrIHRoZSBlbmQgb2YgdGhlIGVudGlyZSBzeW1ib2wgbGlzdC4gIFNlbGYtZGxwcmVvcGVuZWQKKyAgICAgc3ltYm9scyBmb2xsb3cgdGhpcyBtYWdpYyBudW1iZXIsIGNob3NlbiB0byBiZSBhbiB1bmxpa2VseQorICAgICBjbGFzaCB3aXRoIGEgcmVhbCBtb2R1bGUgbmFtZS4gICovCisgIGlmICghZmlsZW5hbWUpCisgICAgeworICAgICAgZmlsZW5hbWUgPSAiQFBST0dSQU1AIjsKKyAgICB9CisKKyAgZm9yIChsaXN0cyA9IHByZWxvYWRlZF9zeW1saXN0czsgbGlzdHM7IGxpc3RzID0gbGlzdHMtPm5leHQpCisgICAgeworICAgICAgY29uc3QgbHRfZGxzeW1saXN0ICpzeW1ib2w7CisgICAgICBmb3IgKHN5bWJvbD0gbGlzdHMtPnN5bWxpc3Q7IHN5bWJvbC0+bmFtZTsgKytzeW1ib2wpCisJeworCSAgaWYgKCFzeW1ib2wtPmFkZHJlc3MgJiYgc3RyZXEgKHN5bWJvbC0+bmFtZSwgZmlsZW5hbWUpKQorCSAgICB7CisJICAgICAgLyogSWYgdGhlIG5leHQgc3ltYm9sJ3MgbmFtZSBhbmQgYWRkcmVzcyBpcyAwLCBpdCBtZWFucworCQkgdGhlIG1vZHVsZSBqdXN0IGNvbnRhaW5zIHRoZSBvcmlnaW5hdG9yIGFuZCBubyBzeW1ib2xzLgorCQkgSW4gdGhpcyBjYXNlIHdlIHByZXRlbmQgdGhhdCB3ZSBuZXZlciBzYXcgdGhlIG1vZHVsZSBhbmQKKwkgICAgICAgICBob3BlIHRoYXQgc29tZSBvdGhlciBsb2FkZXIgd2lsbCBiZSBhYmxlIHRvIGxvYWQgdGhlIG1vZHVsZQorCSAgICAgICAgIGFuZCBoYXZlIGFjY2VzcyB0byBpdHMgc3ltYm9scyAqLworCSAgICAgIGNvbnN0IGx0X2Rsc3ltbGlzdCAqbmV4dF9zeW1ib2wgPSBzeW1ib2wgKzE7CisJICAgICAgaWYgKG5leHRfc3ltYm9sLT5hZGRyZXNzICYmIG5leHRfc3ltYm9sLT5uYW1lKQorCQl7CisJICAgICAgICAgIG1vZHVsZSA9IChsdF9tb2R1bGUpIGxpc3RzLT5zeW1saXN0OworCSAgICAgICAgICBnb3RvIGRvbmU7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisKKyAgTFRfX1NFVEVSUk9SIChGSUxFX05PVF9GT1VORCk7CisKKyBkb25lOgorICByZXR1cm4gbW9kdWxlOworfQorCisKKy8qIEEgZnVuY3Rpb24gY2FsbGVkIHRocm91Z2ggdGhlIHZ0YWJsZSB3aGVuIGEgcGFydGljdWxhciBtb2R1bGUKKyAgIHNob3VsZCBiZSB1bmxvYWRlZC4gICovCitzdGF0aWMgaW50Cit2bV9jbG9zZSAobHRfdXNlcl9kYXRhIExUX19VTlVTRUQgbG9hZGVyX2RhdGEsIGx0X21vZHVsZSBMVF9fVU5VU0VEIG1vZHVsZSkKK3sKKyAgLyogSnVzdCB0byBzaWxlbmNlIGdjYyAtV2FsbCAqLworICBtb2R1bGUgPSAwOworICByZXR1cm4gMDsKK30KKworCisvKiBBIGZ1bmN0aW9uIGNhbGxlZCB0aHJvdWdoIHRoZSB2dGFibGUgdG8gZ2V0IHRoZSBhZGRyZXNzIG9mCisgICBhIHN5bWJvbCBsb2FkZWQgZnJvbSBhIHBhcnRpY3VsYXIgbW9kdWxlLiAgKi8KK3N0YXRpYyB2b2lkICoKK3ZtX3N5bSAobHRfdXNlcl9kYXRhIExUX19VTlVTRUQgbG9hZGVyX2RhdGEsIGx0X21vZHVsZSBtb2R1bGUsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIGx0X2Rsc3ltbGlzdAkgICAgICAgKnN5bWJvbCA9IChsdF9kbHN5bWxpc3QqKSBtb2R1bGU7CisKKyAgc3ltYm9sICs9MjsJCQkvKiBTa2lwIGhlYWRlciAob3JpZ2luYXRvciB0aGVuIGxpYm5hbWUpLiAqLworCisgIHdoaWxlIChzeW1ib2wtPm5hbWUpCisgICAgeworICAgICAgaWYgKHN0cmVxIChzeW1ib2wtPm5hbWUsIG5hbWUpKQorCXsKKwkgIHJldHVybiBzeW1ib2wtPmFkZHJlc3M7CisJfQorCisgICAgKytzeW1ib2w7CisgIH0KKworICBMVF9fU0VURVJST1IgKFNZTUJPTF9OT1RfRk9VTkQpOworCisgIHJldHVybiAwOworfQorCisKKworLyogLS0tIEhFTFBFUiBGVU5DVElPTlMgLS0tICovCisKKworLyogVGhlIHN5bWJvbCBsaXN0cyB0aGVtc2VsdmVzIGFyZSBub3QgYWxsb2NhdGVkIGZyb20gdGhlIGhlYXAsIGJ1dAorICAgd2UgY2FuIHVuaG9vayB0aGVtIGFuZCBmcmVlIHVwIHRoZSBjaGFpbiBvZiBsaW5rcyBiZXR3ZWVuIHRoZW0uICAqLworc3RhdGljIGludAorZnJlZV9zeW1saXN0cyAodm9pZCkKK3sKKyAgc3ltbGlzdF9jaGFpbiAqbGlzdHM7CisKKyAgbGlzdHMgPSBwcmVsb2FkZWRfc3ltbGlzdHM7CisgIHdoaWxlIChsaXN0cykKKyAgICB7CisgICAgICBzeW1saXN0X2NoYWluICpuZXh0ID0gbGlzdHMtPm5leHQ7CisgICAgICBGUkVFIChsaXN0cyk7CisgICAgICBsaXN0cyA9IG5leHQ7CisgICAgfQorICBwcmVsb2FkZWRfc3ltbGlzdHMgPSAwOworCisgIHJldHVybiAwOworfQorCisvKiBBZGQgYSBuZXcgc3ltYm9sIGxpc3QgdG8gdGhlIGdsb2JhbCBjaGFpbi4gICovCitzdGF0aWMgaW50CithZGRfc3ltbGlzdCAoY29uc3QgbHRfZGxzeW1saXN0ICpzeW1saXN0KQoreworICBzeW1saXN0X2NoYWluICpsaXN0czsKKyAgaW50CQkgZXJyb3JzICAgPSAwOworCisgIC8qIFNlYXJjaCBmb3IgZHVwbGljYXRlIGVudHJpZXM6ICAqLworICBmb3IgKGxpc3RzID0gcHJlbG9hZGVkX3N5bWxpc3RzOworICAgICAgIGxpc3RzICYmIGxpc3RzLT5zeW1saXN0ICE9IHN5bWxpc3Q7IGxpc3RzID0gbGlzdHMtPm5leHQpCisgICAgLypOT1dPUksqLzsKKworICAvKiBEb24ndCBhZGQgdGhlIHNhbWUgbGlzdCB0d2ljZTogICovCisgIGlmICghbGlzdHMpCisgICAgeworICAgICAgc3ltbGlzdF9jaGFpbiAqdG1wID0gKHN5bWxpc3RfY2hhaW4gKikgbHRfX3phbGxvYyAoc2l6ZW9mICp0bXApOworCisgICAgICBpZiAodG1wKQorCXsKKwkgIHRtcC0+c3ltbGlzdCA9IHN5bWxpc3Q7CisJICB0bXAtPm5leHQgPSBwcmVsb2FkZWRfc3ltbGlzdHM7CisJICBwcmVsb2FkZWRfc3ltbGlzdHMgPSB0bXA7CisJfQorICAgICAgZWxzZQorCXsKKwkgICsrZXJyb3JzOworCX0KKyAgICB9CisKKyAgcmV0dXJuIGVycm9yczsKK30KKworCisKKy8qIC0tLSBQUkVMT0FESU5HIEFQSSBDQUxMIElNUExFTUVOVEFUSU9OUyAtLS0gKi8KKworCisvKiBTYXZlIGEgZGVmYXVsdCBzeW1ib2wgbGlzdCBmb3IgbGF0ZXIuICAqLworaW50CitsdF9kbHByZWxvYWRfZGVmYXVsdCAoY29uc3QgbHRfZGxzeW1saXN0ICpwcmVsb2FkZWQpCit7CisgIGRlZmF1bHRfcHJlbG9hZGVkX3N5bWJvbHMgPSBwcmVsb2FkZWQ7CisgIHJldHVybiAwOworfQorCisKKy8qIEFkZCBhIHN5bWJvbCBsaXN0IHRvIHRoZSBnbG9iYWwgY2hhaW4sIG9yIHdpdGggYSBOVUxMIGFyZ3VtZW50LAorICAgcmV2ZXJ0IHRvIGp1c3QgdGhlIGRlZmF1bHQgbGlzdC4gICovCitpbnQKK2x0X2RscHJlbG9hZCAoY29uc3QgbHRfZGxzeW1saXN0ICpwcmVsb2FkZWQpCit7CisgIGludCBlcnJvcnMgPSAwOworCisgIGlmIChwcmVsb2FkZWQpCisgICAgeworICAgICAgZXJyb3JzID0gYWRkX3N5bWxpc3QgKHByZWxvYWRlZCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZnJlZV9zeW1saXN0cygpOworCisgICAgICBpZiAoZGVmYXVsdF9wcmVsb2FkZWRfc3ltYm9scykKKwl7CisJICBlcnJvcnMgPSBsdF9kbHByZWxvYWQgKGRlZmF1bHRfcHJlbG9hZGVkX3N5bWJvbHMpOworCX0KKyAgICB9CisKKyAgcmV0dXJuIGVycm9yczsKK30KKworCisvKiBPcGVuIGFsbCB0aGUgcHJlbG9hZGVkIG1vZHVsZXMgZnJvbSB0aGUgbmFtZWQgb3JpZ2luYXRvciwgZXhlY3V0aW5nCisgICBhIGNhbGxiYWNrIGZvciBlYWNoIG9uZS4gIElmIE9SSUdJTkFUT1IgaXMgTlVMTCwgdGhlbiBjYWxsIEZVTkMgZm9yCisgICBlYWNoIHByZWxvYWRlZCBtb2R1bGUgZnJvbSB0aGUgcHJvZ3JhbSBpdHNlbGYuICAqLworaW50CitsdF9kbHByZWxvYWRfb3BlbiAoY29uc3QgY2hhciAqb3JpZ2luYXRvciwgbHRfZGxwcmVsb2FkX2NhbGxiYWNrX2Z1bmMgKmZ1bmMpCit7CisgIHN5bWxpc3RfY2hhaW4gKmxpc3Q7CisgIGludAkJIGVycm9ycyA9IDA7CisgIGludAkJIGZvdW5kICA9IDA7CisKKyAgLyogRm9yIGVhY2ggc3ltbGlzdCBpbiB0aGUgY2hhaW4uLi4gICovCisgIGZvciAobGlzdCA9IHByZWxvYWRlZF9zeW1saXN0czsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpCisgICAgeworICAgICAgLyogLi4udGhhdCB3YXMgcHJlbG9hZGVkIGJ5IHRoZSByZXF1ZXN0aW5nIE9SSUdJTkFUT1IuLi4gKi8KKyAgICAgIGlmICgob3JpZ2luYXRvciAmJiBzdHJlcSAobGlzdC0+c3ltbGlzdC0+bmFtZSwgb3JpZ2luYXRvcikpCisgICAgICAgICAgfHwgKCFvcmlnaW5hdG9yICYmIHN0cmVxIChsaXN0LT5zeW1saXN0LT5uYW1lLCAiQFBST0dSQU1AIikpKQorCXsKKwkgIGNvbnN0IGx0X2Rsc3ltbGlzdCAqc3ltYm9sOworCSAgdW5zaWduZWQgaW50IGlkeCA9IDA7CisKKwkgICsrZm91bmQ7CisKKwkgIC8qIC4uLmxvYWQgdGhlIHN5bWJvbHMgcGVyIHNvdXJjZSBjb21waWxhdGlvbiB1bml0OgorCSAgICAgKHdlIHByZWluY3JlbWVudCB0aGUgaW5kZXggdG8gc2tpcCBvdmVyIHRoZSBvcmlnaW5hdG9yIGVudHJ5KSAgKi8KKwkgIHdoaWxlICgoc3ltYm9sID0gJmxpc3QtPnN5bWxpc3RbKytpZHhdKS0+bmFtZSAhPSAwKQorCSAgICB7CisJICAgICAgaWYgKChzeW1ib2wtPmFkZHJlc3MgPT0gMCkKKwkJICAmJiAoc3RybmVxIChzeW1ib2wtPm5hbWUsICJAUFJPR1JBTUAiKSkpCisJCXsKKwkJICBsdF9kbGhhbmRsZSBoYW5kbGUgPSBsdF9kbG9wZW4gKHN5bWJvbC0+bmFtZSk7CisJCSAgaWYgKGhhbmRsZSA9PSAwKQorCQkgICAgeworCQkgICAgICArK2Vycm9yczsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGVycm9ycyArPSAoKmZ1bmMpIChoYW5kbGUpOworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisgICAgfQorCisgIGlmICghZm91bmQpCisgICAgeworICAgICAgTFRfX1NFVEVSUk9SKENBTk5PVF9PUEVOKTsKKyAgICAgICsrZXJyb3JzOworICAgIH0KKworICByZXR1cm4gZXJyb3JzOworfQpkaWZmIC0tZ2l0IGEvc2hhcmUvbGlidG9vbC9saWJsdGRsL2xvYWRlcnMvc2hsX2xvYWQuYyBiL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9sb2FkZXJzL3NobF9sb2FkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEwOWQ4NwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9sb2FkZXJzL3NobF9sb2FkLmMKQEAgLTAsMCArMSwyMjIgQEAKKy8qIGxvYWRlci1zaGxfbG9hZC5jIC0tICBkeW5hbWljIGxpbmtpbmcgd2l0aCBzaGxfbG9hZCAoSFAtVVgpCisKKyAgIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwNCwgMjAwNiwKKyAgICAgICAgICAgICAgICAgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgVGhvbWFzIFRhbm5lciwgMTk5OAorCisgICBOT1RFOiBUaGUgY2Fub25pY2FsIHNvdXJjZSBvZiB0aGlzIGZpbGUgaXMgbWFpbnRhaW5lZCB3aXRoIHRoZQorICAgR05VIExpYnRvb2wgcGFja2FnZS4gIFJlcG9ydCBidWdzIHRvIGJ1Zy1saWJ0b29sQGdudS5vcmcuCisKK0dOVSBMaWJsdGRsIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCit2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK0FzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK2lmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKK2lzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK0dOVSBMaWJsdGRsIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYWxvbmcgd2l0aCBHTlUgTGlibHRkbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCBhCitjb3B5IGNhbiBiZSBkb3dubG9hZGVkIGZyb20gIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9sZ3BsLmh0bWwsCitvciBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJsdF9fcHJpdmF0ZS5oIgorI2luY2x1ZGUgImx0X2RsbG9hZGVyLmgiCisKKy8qIFVzZSB0aGUgcHJlcHJvY2Vzc29yIHRvIHJlbmFtZSBub24tc3RhdGljIHN5bWJvbHMgdG8gYXZvaWQgbmFtZXNwYWNlCisgICBjb2xsaXNpb25zIHdoZW4gdGhlIGxvYWRlciBjb2RlIGlzIHN0YXRpY2FsbHkgbGlua2VkIGludG8gbGlibHRkbC4KKyAgIFVzZSB0aGUgIjxtb2R1bGVfbmFtZT5fTFRYXyIgcHJlZml4IHNvIHRoYXQgdGhlIHN5bWJvbCBhZGRyZXNzZXMgY2FuCisgICBiZSBmZXRjaGVkIGZyb20gdGhlIHByZWxvYWRlZCBzeW1ib2wgbGlzdCBieSBsdF9kbHN5bSgpOiAgKi8KKyNkZWZpbmUgZ2V0X3Z0YWJsZQlzaGxfbG9hZF9MVFhfZ2V0X3Z0YWJsZQorCitMVF9CRUdJTl9DX0RFQ0xTCitMVF9TQ09QRSBsdF9kbHZ0YWJsZSAqZ2V0X3Z0YWJsZSAobHRfdXNlcl9kYXRhIGxvYWRlcl9kYXRhKTsKK0xUX0VORF9DX0RFQ0xTCisKKworLyogQm9pbGVycGxhdGUgY29kZSB0byBzZXQgdXAgdGhlIHZ0YWJsZSBmb3IgaG9va2luZyB0aGlzIGxvYWRlciBpbnRvCisgICBsaWJsdGRsJ3MgbG9hZGVyIGxpc3Q6ICAqLworc3RhdGljIGludAkgdmxfZXhpdCAgKGx0X3VzZXJfZGF0YSBsb2FkZXJfZGF0YSk7CitzdGF0aWMgbHRfbW9kdWxlIHZtX29wZW4gIChsdF91c2VyX2RhdGEgbG9hZGVyX2RhdGEsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRfZGxhZHZpc2UgYWR2aXNlKTsKK3N0YXRpYyBpbnQJIHZtX2Nsb3NlIChsdF91c2VyX2RhdGEgbG9hZGVyX2RhdGEsIGx0X21vZHVsZSBtb2R1bGUpOworc3RhdGljIHZvaWQgKgkgdm1fc3ltICAgKGx0X3VzZXJfZGF0YSBsb2FkZXJfZGF0YSwgbHRfbW9kdWxlIG1vZHVsZSwKKwkJCSAgY29uc3QgY2hhciAqc3ltYm9sbmFtZSk7CisKK3N0YXRpYyBsdF9kbHZ0YWJsZSAqdnRhYmxlID0gMDsKKworLyogUmV0dXJuIHRoZSB2dGFibGUgZm9yIHRoaXMgbG9hZGVyLCBvbmx5IHRoZSBuYW1lIGFuZCBzeW1fcHJlZml4CisgICBhdHRyaWJ1dGVzIChwbHVzIHRoZSB2aXJ0dWFsIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucywgb2J2aW91c2x5KQorICAgY2hhbmdlIGJldHdlZW4gbG9hZGVycy4gICovCitsdF9kbHZ0YWJsZSAqCitnZXRfdnRhYmxlIChsdF91c2VyX2RhdGEgbG9hZGVyX2RhdGEpCit7CisgIGlmICghdnRhYmxlKQorICAgIHsKKyAgICAgIHZ0YWJsZSA9IGx0X196YWxsb2MgKHNpemVvZiAqdnRhYmxlKTsKKyAgICB9CisKKyAgaWYgKHZ0YWJsZSAmJiAhdnRhYmxlLT5uYW1lKQorICAgIHsKKyAgICAgIHZ0YWJsZS0+bmFtZQkJPSAibHRfc2hsX2xvYWQiOworICAgICAgdnRhYmxlLT5tb2R1bGVfb3Blbgk9IHZtX29wZW47CisgICAgICB2dGFibGUtPm1vZHVsZV9jbG9zZQk9IHZtX2Nsb3NlOworICAgICAgdnRhYmxlLT5maW5kX3N5bQkJPSB2bV9zeW07CisgICAgICB2dGFibGUtPmRsbG9hZGVyX2V4aXQJPSB2bF9leGl0OworICAgICAgdnRhYmxlLT5kbGxvYWRlcl9kYXRhCT0gbG9hZGVyX2RhdGE7CisgICAgICB2dGFibGUtPnByaW9yaXR5CQk9IExUX0RMTE9BREVSX0FQUEVORDsKKyAgICB9CisKKyAgaWYgKHZ0YWJsZSAmJiAodnRhYmxlLT5kbGxvYWRlcl9kYXRhICE9IGxvYWRlcl9kYXRhKSkKKyAgICB7CisgICAgICBMVF9fU0VURVJST1IgKElOSVRfTE9BREVSKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICByZXR1cm4gdnRhYmxlOworfQorCisKKworLyogLS0tIElNUExFTUVOVEFUSU9OIC0tLSAqLworCisKKyNpZiBkZWZpbmVkKEhBVkVfRExfSCkKKyMgIGluY2x1ZGUgPGRsLmg+CisjZW5kaWYKKworLyogc29tZSBmbGFncyBhcmUgbWlzc2luZyBvbiBzb21lIHN5c3RlbXMsIHNvIHdlIHByb3ZpZGUKKyAqIGhhcm1sZXNzIGRlZmF1bHRzLgorICoKKyAqIE1hbmRhdG9yeToKKyAqIEJJTkRfSU1NRURJQVRFICAtIFJlc29sdmUgc3ltYm9sIHJlZmVyZW5jZXMgd2hlbiB0aGUgbGlicmFyeSBpcyBsb2FkZWQuCisgKiBCSU5EX0RFRkVSUkVEICAgLSBEZWxheSBjb2RlIHN5bWJvbCByZXNvbHV0aW9uIHVudGlsIGFjdHVhbCByZWZlcmVuY2UuCisgKgorICogT3B0aW9uYWxseToKKyAqIEJJTkRfRklSU1QJICAgLSBQbGFjZSB0aGUgbGlicmFyeSBhdCB0aGUgaGVhZCBvZiB0aGUgc3ltYm9sIHNlYXJjaAorICogCQkgICAgIG9yZGVyLgorICogQklORF9OT05GQVRBTCAgIC0gVGhlIGRlZmF1bHQgQklORF9JTU1FRElBVEUgYmVoYXZpb3IgaXMgdG8gdHJlYXQgYWxsCisgKiAJCSAgICAgdW5zYXRpc2ZpZWQgc3ltYm9scyBhcyBmYXRhbC4gIFRoaXMgZmxhZyBhbGxvd3MKKyAqIAkJICAgICBiaW5kaW5nIG9mIHVuc2F0aXNmaWVkIGNvZGUgc3ltYm9scyB0byBiZSBkZWZlcnJlZAorICogCQkgICAgIHVudGlsIHVzZS4KKyAqCQkgICAgIFtQZXJsOiBGb3IgY2VydGFpbiBsaWJyYXJpZXMsIGxpa2UgRENFLCBkZWZlcnJlZAorICoJCSAgICAgYmluZGluZyBvZnRlbiBjYXVzZXMgcnVuIHRpbWUgcHJvYmxlbXMuIEFkZGluZworICoJCSAgICAgQklORF9OT05GQVRBTCB0byBCSU5EX0lNTUVESUFURSBzdGlsbCBhbGxvd3MKKyAqCQkgICAgIHVucmVzb2x2ZWQgcmVmZXJlbmNlcyBpbiBzaXR1YXRpb25zIGxpa2UgdGhpcy5dCisgKiBCSU5EX05PU1RBUlQJICAgLSBEbyBub3QgY2FsbCB0aGUgaW5pdGlhbGl6ZXIgZm9yIHRoZSBzaGFyZWQgbGlicmFyeQorICoJCSAgICAgd2hlbiB0aGUgbGlicmFyeSBpcyBsb2FkZWQsIG5vciBvbiBhIGZ1dHVyZSBjYWxsIHRvCisgKgkJICAgICBzaGxfdW5sb2FkKCkuCisgKiBCSU5EX1ZFUkJPU0UJICAgLSBQcmludCB2ZXJib3NlIG1lc3NhZ2VzIGNvbmNlcm5pbmcgcG9zc2libGUKKyAqCQkgICAgIHVuc2F0aXNmaWVkIHN5bWJvbHMuCisgKgorICogaHA5MDAwczcwMC9ocDkwMDBzODAwOgorICogQklORF9SRVNUUklDVEVEIC0gUmVzdHJpY3Qgc3ltYm9scyB2aXNpYmxlIGJ5IHRoZSBsaWJyYXJ5IHRvIHRob3NlCisgKgkJICAgICBwcmVzZW50IGF0IGxpYnJhcnkgbG9hZCB0aW1lLgorICogRFlOQU1JQ19QQVRICSAgIC0gQWxsb3cgdGhlIGxvYWRlciB0byBkeW5hbWljYWxseSBzZWFyY2ggZm9yIHRoZQorICoJCSAgICAgbGlicmFyeSBzcGVjaWZpZWQgYnkgdGhlIHBhdGggYXJndW1lbnQuCisgKi8KKworI2lmICFkZWZpbmVkKERZTkFNSUNfUEFUSCkKKyMgIGRlZmluZSBEWU5BTUlDX1BBVEgJCTAKKyNlbmRpZgorI2lmICFkZWZpbmVkKEJJTkRfUkVTVFJJQ1RFRCkKKyMgIGRlZmluZSBCSU5EX1JFU1RSSUNURUQJMAorI2VuZGlmCisKKyNkZWZpbmUJTFRfQklORF9GTEFHUwkoQklORF9JTU1FRElBVEUgfCBCSU5EX05PTkZBVEFMIHwgRFlOQU1JQ19QQVRIKQorCisKKy8qIEEgZnVuY3Rpb24gY2FsbGVkIHRocm91Z2ggdGhlIHZ0YWJsZSB3aGVuIHRoaXMgbG9hZGVyIGlzIG5vCisgICBsb25nZXIgbmVlZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gICovCitzdGF0aWMgaW50Cit2bF9leGl0IChsdF91c2VyX2RhdGEgTFRfX1VOVVNFRCBsb2FkZXJfZGF0YSkKK3sKKyAgdnRhYmxlID0gTlVMTDsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIEEgZnVuY3Rpb24gY2FsbGVkIHRocm91Z2ggdGhlIHZ0YWJsZSB0byBvcGVuIGEgbW9kdWxlIHdpdGggdGhpcworICAgbG9hZGVyLiAgUmV0dXJucyBhbiBvcGFxdWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5ld2x5IG9wZW5lZAorICAgbW9kdWxlIGZvciBwcm9jZXNzaW5nIHdpdGggdGhpcyBsb2FkZXIncyBvdGhlciB2dGFibGUgZnVuY3Rpb25zLiAgKi8KK3N0YXRpYyBsdF9tb2R1bGUKK3ZtX29wZW4gKGx0X3VzZXJfZGF0YSBMVF9fVU5VU0VEIGxvYWRlcl9kYXRhLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKyAgICAgICAgIGx0X2RsYWR2aXNlIExUX19VTlVTRUQgYWR2aXNlKQoreworICBzdGF0aWMgc2hsX3Qgc2VsZiA9IChzaGxfdCkgMDsKKyAgbHRfbW9kdWxlIG1vZHVsZSA9IHNobF9sb2FkIChmaWxlbmFtZSwgTFRfQklORF9GTEFHUywgMEwpOworCisgIC8qIFNpbmNlIHNlYXJjaGluZyBmb3IgYSBzeW1ib2wgYWdhaW5zdCBhIE5VTEwgbW9kdWxlIGhhbmRsZSB3aWxsIGFsc28KKyAgICAgbG9vayBpbiBldmVyeXRoaW5nIGVsc2UgdGhhdCB3YXMgYWxyZWFkeSBsb2FkZWQgYW5kIGV4cG9ydGVkIHdpdGgKKyAgICAgdGhlIC1FIGNvbXBpbGVyIGZsYWcsIHdlIGFsd2F5cyBjYWNoZSBhIGhhbmRsZSBzYXZlZCBiZWZvcmUgYW55CisgICAgIG1vZHVsZXMgYXJlIGxvYWRlZC4gICovCisgIGlmICghc2VsZikKKyAgICB7CisgICAgICB2b2lkICphZGRyZXNzOworICAgICAgc2hsX2ZpbmRzeW0gKCZzZWxmLCAibWFpbiIsIFRZUEVfVU5ERUZJTkVELCAmYWRkcmVzcyk7CisgICAgfQorCisgIGlmICghZmlsZW5hbWUpCisgICAgeworICAgICAgbW9kdWxlID0gc2VsZjsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBtb2R1bGUgPSBzaGxfbG9hZCAoZmlsZW5hbWUsIExUX0JJTkRfRkxBR1MsIDBMKTsKKworICAgICAgaWYgKCFtb2R1bGUpCisJeworCSAgTFRfX1NFVEVSUk9SIChDQU5OT1RfT1BFTik7CisJfQorICAgIH0KKworICByZXR1cm4gbW9kdWxlOworfQorCisvKiBBIGZ1bmN0aW9uIGNhbGxlZCB0aHJvdWdoIHRoZSB2dGFibGUgd2hlbiBhIHBhcnRpY3VsYXIgbW9kdWxlCisgICBzaG91bGQgYmUgdW5sb2FkZWQuICAqLworc3RhdGljIGludAordm1fY2xvc2UgKGx0X3VzZXJfZGF0YSBMVF9fVU5VU0VEIGxvYWRlcl9kYXRhLCBsdF9tb2R1bGUgbW9kdWxlKQoreworICBpbnQgZXJyb3JzID0gMDsKKworICBpZiAobW9kdWxlICYmIChzaGxfdW5sb2FkICgoc2hsX3QpIChtb2R1bGUpKSAhPSAwKSkKKyAgICB7CisgICAgICBMVF9fU0VURVJST1IgKENBTk5PVF9DTE9TRSk7CisgICAgICArK2Vycm9yczsKKyAgICB9CisKKyAgcmV0dXJuIGVycm9yczsKK30KKworCisvKiBBIGZ1bmN0aW9uIGNhbGxlZCB0aHJvdWdoIHRoZSB2dGFibGUgdG8gZ2V0IHRoZSBhZGRyZXNzIG9mCisgICBhIHN5bWJvbCBsb2FkZWQgZnJvbSBhIHBhcnRpY3VsYXIgbW9kdWxlLiAgKi8KK3N0YXRpYyB2b2lkICoKK3ZtX3N5bSAobHRfdXNlcl9kYXRhIExUX19VTlVTRUQgbG9hZGVyX2RhdGEsIGx0X21vZHVsZSBtb2R1bGUsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIHZvaWQgKmFkZHJlc3MgPSAwOworCisgIC8qIHN5c19zaGxfb3BlbiBzaG91bGQgbmV2ZXIgcmV0dXJuIGEgTlVMTCBtb2R1bGUgaGFuZGxlICovCisgIGlmIChtb2R1bGUgPT0gKGx0X21vZHVsZSkgMCkKKyAgeworICAgIExUX19TRVRFUlJPUiAoSU5WQUxJRF9IQU5ETEUpOworICB9CisgIGVsc2UgaWYgKCFzaGxfZmluZHN5bSgoc2hsX3QqKSAmbW9kdWxlLCBuYW1lLCBUWVBFX1VOREVGSU5FRCwgJmFkZHJlc3MpKQorICAgIHsKKyAgICAgIGlmICghYWRkcmVzcykKKwl7CisJICBMVF9fU0VURVJST1IgKFNZTUJPTF9OT1RfRk9VTkQpOworCX0KKyAgICB9CisKKyAgcmV0dXJuIGFkZHJlc3M7Cit9CmRpZmYgLS1naXQgYS9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvbHRfX2FsbG9jLmMgYi9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvbHRfX2FsbG9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM5ZTE3ZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9sdF9fYWxsb2MuYwpAQCAtMCwwICsxLDk1IEBACisvKiBsdF9fYWxsb2MuYyAtLSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBpbnRlcmZhY2UKKworICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKKworICAgTk9URTogVGhlIGNhbm9uaWNhbCBzb3VyY2Ugb2YgdGhpcyBmaWxlIGlzIG1haW50YWluZWQgd2l0aCB0aGUKKyAgIEdOVSBMaWJ0b29sIHBhY2thZ2UuICBSZXBvcnQgYnVncyB0byBidWctbGlidG9vbEBnbnUub3JnLgorCitHTlUgTGlibHRkbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgordmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCitpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CitpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKK3NhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCitHTlUgTGlibHRkbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFsb25nIHdpdGggR05VIExpYmx0ZGw7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgYQorY29weSBjYW4gYmUgZG93bmxvYWRlZCBmcm9tICBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGdwbC5odG1sLAorb3Igb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAibHRfX3ByaXZhdGUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsdF9fYWxsb2MuaCIKKworc3RhdGljIHZvaWQgYWxsb2NfZGllX2RlZmF1bHQgKHZvaWQpOworCit2b2lkICgqbHRfX2FsbG9jX2RpZSkgKHZvaWQpID0gYWxsb2NfZGllX2RlZmF1bHQ7CisKKy8qIFVubGVzcyBvdmVycmlkZGVuLCBleGl0IG9uIG1lbW9yeSBmYWlsdXJlLiAgKi8KK3N0YXRpYyB2b2lkCithbGxvY19kaWVfZGVmYXVsdCAodm9pZCkKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeS5cbiIpOworICBleGl0IChFWElUX0ZBSUxVUkUpOworfQorCit2b2lkICoKK2x0X19tYWxsb2MgKHNpemVfdCBuKQoreworICB2b2lkICptZW07CisKKyAgaWYgKCEgKG1lbSA9IG1hbGxvYyAobikpKQorICAgICgqbHRfX2FsbG9jX2RpZSkgKCk7CisKKyAgcmV0dXJuIG1lbTsKK30KKwordm9pZCAqCitsdF9femFsbG9jIChzaXplX3QgbikKK3sKKyAgdm9pZCAqbWVtOworCisgIGlmICgobWVtID0gbHRfX21hbGxvYyAobikpKQorICAgIG1lbXNldCAobWVtLCAwLCBuKTsKKworICByZXR1cm4gbWVtOworfQorCit2b2lkICoKK2x0X19yZWFsbG9jICh2b2lkICptZW0sIHNpemVfdCBuKQoreworICBpZiAoISAobWVtID0gcmVhbGxvYyAobWVtLCBuKSkpCisgICAgKCpsdF9fYWxsb2NfZGllKSAoKTsKKworICByZXR1cm4gbWVtOworfQorCit2b2lkICoKK2x0X19tZW1kdXAgKHZvaWQgY29uc3QgKm1lbSwgc2l6ZV90IG4pCit7CisgIHZvaWQgKm5ld21lbTsKKworICBpZiAoKG5ld21lbSA9IGx0X19tYWxsb2MgKG4pKSkKKyAgICByZXR1cm4gbWVtY3B5IChuZXdtZW0sIG1lbSwgbik7CisKKyAgcmV0dXJuIDA7Cit9CisKK2NoYXIgKgorbHRfX3N0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKQoreworICByZXR1cm4gKGNoYXIgKikgbHRfX21lbWR1cCAoc3RyaW5nLCBzdHJsZW4gKHN0cmluZykgKzEpOworfQpkaWZmIC0tZ2l0IGEvc2hhcmUvbGlidG9vbC9saWJsdGRsL2x0X19kaXJlbnQuYyBiL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9sdF9fZGlyZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBkYzA3MgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9sdF9fZGlyZW50LmMKQEAgLTAsMCArMSwxMDcgQEAKKy8qIGx0X19kaXJlbnQuYyAtLSBpbnRlcm5hbCBkaXJlY3RvcnkgZW50cnkgc2Nhbm5pbmcgaW50ZXJmYWNlCisKKyAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgQm9iIEZyaWVzZW5oYWhuLCAyMDAxCisKKyAgIE5PVEU6IFRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRoaXMgZmlsZSBpcyBtYWludGFpbmVkIHdpdGggdGhlCisgICBHTlUgTGlidG9vbCBwYWNrYWdlLiAgUmVwb3J0IGJ1Z3MgdG8gYnVnLWxpYnRvb2xAZ251Lm9yZy4KKworR05VIExpYmx0ZGwgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAoraWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAoraXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCitzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworR05VIExpYmx0ZGwgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIEdOVSBMaWJsdGRsOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIGEKK2NvcHkgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSAgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwuaHRtbCwKK29yIG9idGFpbmVkIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImx0X19wcml2YXRlLmgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2luY2x1ZGUgImx0X19kaXJlbnQuaCIKKworI2lmIGRlZmluZWQoX19XSU5ET1dTX18pCisKK3ZvaWQKK2Nsb3NlZGlyIChESVIgKmVudHJ5KQoreworICBhc3NlcnQgKGVudHJ5ICE9IChESVIgKikgTlVMTCk7CisgIEZpbmRDbG9zZSAoZW50cnktPmhTZWFyY2gpOworICBmcmVlICgodm9pZCAqKSBlbnRyeSk7Cit9CisKKworRElSICoKK29wZW5kaXIgKGNvbnN0IGNoYXIgKnBhdGgpCit7CisgIGNoYXIgZmlsZV9zcGVjW0xUX0ZJTEVOQU1FX01BWF07CisgIERJUiAqZW50cnk7CisKKyAgYXNzZXJ0IChwYXRoICE9IChjaGFyICopIDApOworICBpZiAobHRfc3RybGNweSAoZmlsZV9zcGVjLCBwYXRoLCBzaXplb2YgZmlsZV9zcGVjKSA+PSBzaXplb2YgZmlsZV9zcGVjCisgICAgICB8fCBsdF9zdHJsY2F0IChmaWxlX3NwZWMsICJcXCIsIHNpemVvZiBmaWxlX3NwZWMpID49IHNpemVvZiBmaWxlX3NwZWMpCisgICAgcmV0dXJuIChESVIgKikgMDsKKyAgZW50cnkgPSAoRElSICopIG1hbGxvYyAoc2l6ZW9mKERJUikpOworICBpZiAoZW50cnkgIT0gKERJUiAqKSAwKQorICAgIHsKKyAgICAgIGVudHJ5LT5maXJzdHRpbWUgPSBUUlVFOworICAgICAgZW50cnktPmhTZWFyY2ggPSBGaW5kRmlyc3RGaWxlIChmaWxlX3NwZWMsICZlbnRyeS0+V2luMzJGaW5kRGF0YSk7CisKKyAgICAgIGlmIChlbnRyeS0+aFNlYXJjaCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKwl7CisJICBpZiAobHRfc3RybGNhdCAoZmlsZV9zcGVjLCAiXFwqLioiLCBzaXplb2YgZmlsZV9zcGVjKSA8IHNpemVvZiBmaWxlX3NwZWMpCisJICAgIHsKKwkgICAgICBlbnRyeS0+aFNlYXJjaCA9IEZpbmRGaXJzdEZpbGUgKGZpbGVfc3BlYywgJmVudHJ5LT5XaW4zMkZpbmREYXRhKTsKKwkgICAgfQorCisJICBpZiAoZW50cnktPmhTZWFyY2ggPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJICAgIHsKKwkgICAgICBlbnRyeSA9IChmcmVlIChlbnRyeSksIChESVIgKikgMCk7CisJICAgIH0KKwl9CisgICAgfQorCisgIHJldHVybiBlbnRyeTsKK30KKworCitzdHJ1Y3QgZGlyZW50ICoKK3JlYWRkaXIgKERJUiAqZW50cnkpCit7CisgIGludCBzdGF0dXM7CisKKyAgaWYgKGVudHJ5ID09IChESVIgKikgMCkKKyAgICByZXR1cm4gKHN0cnVjdCBkaXJlbnQgKikgMDsKKworICBpZiAoIWVudHJ5LT5maXJzdHRpbWUpCisgICAgeworICAgICAgc3RhdHVzID0gRmluZE5leHRGaWxlIChlbnRyeS0+aFNlYXJjaCwgJmVudHJ5LT5XaW4zMkZpbmREYXRhKTsKKyAgICAgIGlmIChzdGF0dXMgPT0gMCkKKyAgICAgICAgcmV0dXJuIChzdHJ1Y3QgZGlyZW50ICopIDA7CisgICAgfQorCisgIGVudHJ5LT5maXJzdHRpbWUgPSBGQUxTRTsKKyAgaWYgKGx0X3N0cmxjcHkgKGVudHJ5LT5maWxlX2luZm8uZF9uYW1lLCBlbnRyeS0+V2luMzJGaW5kRGF0YS5jRmlsZU5hbWUsCisJc2l6ZW9mIGVudHJ5LT5maWxlX2luZm8uZF9uYW1lKSA+PSBzaXplb2YgZW50cnktPmZpbGVfaW5mby5kX25hbWUpCisgICAgcmV0dXJuIChzdHJ1Y3QgZGlyZW50ICopIDA7CisgIGVudHJ5LT5maWxlX2luZm8uZF9uYW1sZW4gPSBzdHJsZW4gKGVudHJ5LT5maWxlX2luZm8uZF9uYW1lKTsKKworICByZXR1cm4gJmVudHJ5LT5maWxlX2luZm87Cit9CisKKyNlbmRpZiAvKmRlZmluZWQoX19XSU5ET1dTX18pKi8KZGlmZiAtLWdpdCBhL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9sdF9fc3RybC5jIGIvc2hhcmUvbGlidG9vbC9saWJsdGRsL2x0X19zdHJsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJjZWU1OAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9sdF9fc3RybC5jCkBAIC0wLDAgKzEsMTI3IEBACisvKiBsdF9fc3RybC5jIC0tIHNpemUtYm91bmRlZCBzdHJpbmcgY29weWluZyBhbmQgY29uY2F0ZW5hdGlvbgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IEJvYiBGcmllc2VuaGFobiwgMjAwNAorCisgICBOT1RFOiBUaGUgY2Fub25pY2FsIHNvdXJjZSBvZiB0aGlzIGZpbGUgaXMgbWFpbnRhaW5lZCB3aXRoIHRoZQorICAgR05VIExpYnRvb2wgcGFja2FnZS4gIFJlcG9ydCBidWdzIHRvIGJ1Zy1saWJ0b29sQGdudS5vcmcuCisKK0dOVSBMaWJsdGRsIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCit2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK0FzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK2lmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKK2lzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK0dOVSBMaWJsdGRsIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYWxvbmcgd2l0aCBHTlUgTGlibHRkbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCBhCitjb3B5IGNhbiBiZSBkb3dubG9hZGVkIGZyb20gIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9sZ3BsLmh0bWwsCitvciBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImx0X19zdHJsLmgiCisKKy8qCisgbHRfc3RybGNhdCBhcHBlbmRzIHRoZSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nIHNyYyB0byB0aGUgZW5kIG9mIGRzdC4KKyBJdCB3aWxsIGFwcGVuZCBhdCBtb3N0IGRzdHNpemUgLSBzdHJsZW4oZHN0KSAtIDEgYnl0ZXMsCisgTlVMTC10ZXJtaW5hdGluZyB0aGUgcmVzdWx0LiBUaGUgdG90YWwgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgd2hpY2gKKyB3b3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBnaXZlbiBzdWZmaWNpZW50IGJ1ZmZlciBzaXplIChtYXkgYmUgbG9uZ2VyCisgdGhhbiBkc3RzaXplKSBpcyByZXR1cm5lZC4gIFRoaXMgZnVuY3Rpb24gc3Vic3RpdHV0ZXMgZm9yIHN0cmxjYXQoKQorIHdoaWNoIGlzIGF2YWlsYWJsZSB1bmRlciBOZXRCU0QsIEZyZWVCU0QgYW5kIFNvbGFyaXMgOS4KKworIEJ1ZmZlciBvdmVyZmxvdyBjYW4gYmUgY2hlY2tlZCBhcyBmb2xsb3dzOgorCisgICBpZiAobHRfc3RybGNhdChkc3QsIHNyYywgZHN0c2l6ZSkgPj0gZHN0c2l6ZSkKKyAgICAgcmV0dXJuIC0xOworKi8KKyNpZiAhZGVmaW5lZChIQVZFX1NUUkxDQVQpCitzaXplX3QKK2x0X3N0cmxjYXQoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IHNpemVfdCBkc3RzaXplKQoreworICBzaXplX3QgbGVuZ3RoOworICBjaGFyICpwOworICBjb25zdCBjaGFyICpxOworCisgIGFzc2VydChkc3QgIT0gTlVMTCk7CisgIGFzc2VydChzcmMgIT0gKGNvbnN0IGNoYXIgKikgTlVMTCk7CisgIGFzc2VydChkc3RzaXplID49IDEpOworCisgIGxlbmd0aD1zdHJsZW4oZHN0KTsKKworICAvKgorICAgIENvcHkgcmVtYWluaW5nIGNoYXJhY3RlcnMgZnJvbSBzcmMgd2hpbGUgY29uc3RyYWluaW5nIGxlbmd0aCB0bworICAgIHNpemUgLSAxLgorICAqLworICBmb3IgKCBwID0gZHN0ICsgbGVuZ3RoLCBxID0gc3JjOworICAgICAgICAoKnEgIT0gMCkgJiYgKGxlbmd0aCA8IGRzdHNpemUgLSAxKSA7CisgICAgICAgIGxlbmd0aCsrLCBwKyssIHErKyApCisgICAgKnAgPSAqcTsKKworICBkc3RbbGVuZ3RoXT0nXDAnOworCisgIC8qCisgICAgQWRkIHJlbWFpbmluZyBsZW5ndGggb2Ygc3JjIHRvIGxlbmd0aC4KKyAgKi8KKyAgd2hpbGUgKCpxKyspCisgICAgbGVuZ3RoKys7CisKKyAgcmV0dXJuIGxlbmd0aDsKK30KKyNlbmRpZiAvKiAhZGVmaW5lZChIQVZFX1NUUkxDQVQpICovCisKKy8qCisgIGx0X3N0cmxjcHkgY29waWVzIHVwIHRvIGRzdHNpemUgLSAxIGNoYXJhY3RlcnMgZnJvbSB0aGUgTlVMTC10ZXJtaW5hdGVkCisgIHN0cmluZyBzcmMgdG8gZHN0LCBOVUxMLXRlcm1pbmF0aW5nIHRoZSByZXN1bHQuIFRoZSB0b3RhbCBsZW5ndGggb2YKKyAgdGhlIHN0cmluZyB3aGljaCB3b3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBnaXZlbiBzdWZmaWNpZW50IGJ1ZmZlcgorICBzaXplIChtYXkgYmUgbG9uZ2VyIHRoYW4gZHN0c2l6ZSkgaXMgcmV0dXJuZWQuIFRoaXMgZnVuY3Rpb24KKyAgc3Vic3RpdHV0ZXMgZm9yIHN0cmxjcHkoKSB3aGljaCBpcyBhdmFpbGFibGUgdW5kZXIgT3BlbkJTRCwgRnJlZUJTRAorICBhbmQgU29sYXJpcyA5LgorCisgIEJ1ZmZlciBvdmVyZmxvdyBjYW4gYmUgY2hlY2tlZCBhcyAgZm9sbG93czoKKworICAgIGlmIChsdF9zdHJsY3B5KGRzdCwgc3JjLCBkc3RzaXplKSA+PSBkc3RzaXplKQorICAgICAgcmV0dXJuIC0xOworKi8KKyNpZiAhZGVmaW5lZChIQVZFX1NUUkxDUFkpCitzaXplX3QKK2x0X3N0cmxjcHkoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IHNpemVfdCBkc3RzaXplKQoreworICBzaXplX3QgbGVuZ3RoPTA7CisgIGNoYXIgKnA7CisgIGNvbnN0IGNoYXIgKnE7CisKKyAgYXNzZXJ0KGRzdCAhPSBOVUxMKTsKKyAgYXNzZXJ0KHNyYyAhPSAoY29uc3QgY2hhciAqKSBOVUxMKTsKKyAgYXNzZXJ0KGRzdHNpemUgPj0gMSk7CisKKyAgLyoKKyAgICBDb3B5IHNyYyB0byBkc3Qgd2l0aGluIGJvdW5kcyBvZiBzaXplLTEuCisgICovCisgIGZvciAoIHA9ZHN0LCBxPXNyYywgbGVuZ3RoPTAgOworICAgICAgICAoKnEgIT0gMCkgJiYgKGxlbmd0aCA8IGRzdHNpemUtMSkgOworICAgICAgICBsZW5ndGgrKywgcCsrLCBxKysgKQorICAgICpwID0gKnE7CisKKyAgZHN0W2xlbmd0aF09J1wwJzsKKworICAvKgorICAgIEFkZCByZW1haW5pbmcgbGVuZ3RoIG9mIHNyYyB0byBsZW5ndGguCisgICovCisgIHdoaWxlICgqcSsrKQorICAgIGxlbmd0aCsrOworCisgIHJldHVybiBsZW5ndGg7Cit9CisjZW5kaWYgLyogIWRlZmluZWQoSEFWRV9TVFJMQ1BZKSAqLwpkaWZmIC0tZ2l0IGEvc2hhcmUvbGlidG9vbC9saWJsdGRsL2x0X2RsbG9hZGVyLmMgYi9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvbHRfZGxsb2FkZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzk5YTIyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbGlidG9vbC9saWJsdGRsL2x0X2RsbG9hZGVyLmMKQEAgLTAsMCArMSwyMTAgQEAKKy8qIGx0X2RsbG9hZGVyLmMgLS0gZHluYW1pYyBsaWJyYXJ5IGxvYWRlciBpbnRlcmZhY2UKKworICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKKworICAgTk9URTogVGhlIGNhbm9uaWNhbCBzb3VyY2Ugb2YgdGhpcyBmaWxlIGlzIG1haW50YWluZWQgd2l0aCB0aGUKKyAgIEdOVSBMaWJ0b29sIHBhY2thZ2UuICBSZXBvcnQgYnVncyB0byBidWctbGlidG9vbEBnbnUub3JnLgorCitHTlUgTGlibHRkbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgordmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCitpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CitpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKK3NhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCitHTlUgTGlibHRkbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFsb25nIHdpdGggR05VIExpYmx0ZGw7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgYQorY29weSBjYW4gYmUgZG93bmxvYWRlZCBmcm9tICBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGdwbC5odG1sLAorb3Igb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAibHRfX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJsdF9kbGxvYWRlci5oIgorCisjZGVmaW5lIFJFVFVSTl9TVUNDRVNTIDAKKyNkZWZpbmUgUkVUVVJOX0ZBSUxVUkUgMQorCitzdGF0aWMgdm9pZCAqCWxvYWRlcl9jYWxsYmFjayAoU0xpc3QgKml0ZW0sIHZvaWQgKnVzZXJkYXRhKTsKKworLyogQSBsaXN0IG9mIGFsbCB0aGUgZGxsb2FkZXJzIHdlIGtub3cgYWJvdXQsIGVhY2ggc3RvcmVkIGFzIGEgYm94ZWQKKyAgIFNMaXN0IGl0ZW06ICAqLworc3RhdGljCVNMaXN0ICAgICpsb2FkZXJzCQk9IDA7CisKKworLyogUmV0dXJuIE5VTEwsIHVubGVzcyB0aGUgbG9hZGVyIGluIHRoaXMgSVRFTSBoYXMgYSBtYXRjaGluZyBuYW1lLAorICAgaW4gd2hpY2ggY2FzZSB3ZSByZXR1cm4gdGhlIG1hdGNoaW5nIGl0ZW0gc28gdGhhdCBpdHMgYWRkcmVzcyBpcworICAgcGFzc2VkIGJhY2sgb3V0IChmb3IgcG9zc2libGUgZnJlZWluZykgYnkgc2xpc3RfcmVtb3ZlLiAgKi8KK3N0YXRpYyB2b2lkICoKK2xvYWRlcl9jYWxsYmFjayAoU0xpc3QgKml0ZW0sIHZvaWQgKnVzZXJkYXRhKQoreworICBjb25zdCBsdF9kbHZ0YWJsZSAqdnRhYmxlID0gKGNvbnN0IGx0X2RsdnRhYmxlICopIGl0ZW0tPnVzZXJkYXRhOworICBjb25zdCBjaGFyICoJICAgIG5hbWUgICAgPSAoY29uc3QgY2hhciAqKSB1c2VyZGF0YTsKKworICBhc3NlcnQgKHZ0YWJsZSk7CisKKyAgcmV0dXJuIHN0cmVxICh2dGFibGUtPm5hbWUsIG5hbWUpID8gKHZvaWQgKikgaXRlbSA6IE5VTEw7Cit9CisKKworLyogSG9vayBWVEFCTEUgaW50byBvdXIgZ2xvYmFsIExPQURFUlMgbGlzdCBhY2NvcmRpbmcgdG8gaXRzIG93bgorICAgUFJJT1JJVFkgZmllbGQgdmFsdWUuICAqLworaW50CitsdF9kbGxvYWRlcl9hZGQgKGNvbnN0IGx0X2RsdnRhYmxlICp2dGFibGUpCit7CisgIFNMaXN0ICppdGVtOworCisgIGlmICgodnRhYmxlID09IDApCS8qIGRpYWdub3NlIGludmFsaWQgdnRhYmxlIGZpZWxkcyAqLworICAgICAgfHwgKHZ0YWJsZS0+bW9kdWxlX29wZW4gPT0gMCkKKyAgICAgIHx8ICh2dGFibGUtPm1vZHVsZV9jbG9zZSA9PSAwKQorICAgICAgfHwgKHZ0YWJsZS0+ZmluZF9zeW0gPT0gMCkKKyAgICAgIHx8ICgodnRhYmxlLT5wcmlvcml0eSAhPSBMVF9ETExPQURFUl9QUkVQRU5EKSAmJgorCSAgKHZ0YWJsZS0+cHJpb3JpdHkgIT0gTFRfRExMT0FERVJfQVBQRU5EKSkpCisgICAgeworICAgICAgTFRfX1NFVEVSUk9SIChJTlZBTElEX0xPQURFUik7CisgICAgICByZXR1cm4gUkVUVVJOX0ZBSUxVUkU7CisgICAgfQorCisgIGl0ZW0gPSBzbGlzdF9ib3ggKHZ0YWJsZSk7CisgIGlmICghaXRlbSkKKyAgICB7CisgICAgICAoKmx0X19hbGxvY19kaWUpICgpOworCisgICAgICAvKiBMZXQgdGhlIGNhbGxlciBrbm93IHNvbWV0aGluZyB3ZW50IHdyb25nIGlmIGx0X19hbGxvY19kaWUKKwkgZG9lc24ndCBhYm9ydC4gICovCisgICAgICByZXR1cm4gUkVUVVJOX0ZBSUxVUkU7CisgICAgfQorCisgIGlmICh2dGFibGUtPnByaW9yaXR5ID09IExUX0RMTE9BREVSX1BSRVBFTkQpCisgICAgeworICAgICAgbG9hZGVycyA9IHNsaXN0X2NvbnMgKGl0ZW0sIGxvYWRlcnMpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGFzc2VydCAodnRhYmxlLT5wcmlvcml0eSA9PSBMVF9ETExPQURFUl9BUFBFTkQpOworICAgICAgbG9hZGVycyA9IHNsaXN0X2NvbmNhdCAobG9hZGVycywgaXRlbSk7CisgICAgfQorCisgIHJldHVybiBSRVRVUk5fU1VDQ0VTUzsKK30KKworI2lmZGVmIExUX0RFQlVHX0xPQURFUlMKK3N0YXRpYyB2b2lkICoKK2xvYWRlcl9kdW1wX2NhbGxiYWNrIChTTGlzdCAqaXRlbSwgdm9pZCAqdXNlcmRhdGEpCit7CisgIGNvbnN0IGx0X2RsdnRhYmxlICp2dGFibGUgPSAoY29uc3QgbHRfZGx2dGFibGUgKikgaXRlbS0+dXNlcmRhdGE7CisgIGZwcmludGYgKHN0ZGVyciwgIiwgJXMiLCAodnRhYmxlICYmIHZ0YWJsZS0+bmFtZSkgPyB2dGFibGUtPm5hbWUgOiAiKG51bGwpIik7CisgIHJldHVybiAwOworfQorCit2b2lkCitsdF9kbGxvYWRlcl9kdW1wICh2b2lkKQoreworICBmcHJpbnRmIChzdGRlcnIsICJsb2FkZXJzOiAiKTsKKyAgaWYgKCFsb2FkZXJzKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIihlbXB0eSkiKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBjb25zdCBsdF9kbHZ0YWJsZSAqaGVhZCA9IChjb25zdCBsdF9kbHZ0YWJsZSAqKSBsb2FkZXJzLT51c2VyZGF0YTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzIiwgKGhlYWQgJiYgaGVhZC0+bmFtZSkgPyBoZWFkLT5uYW1lIDogIihudWxsKSIpOworICAgICAgaWYgKHNsaXN0X3RhaWwgKGxvYWRlcnMpKQorCXNsaXN0X2ZvcmVhY2ggKHNsaXN0X3RhaWwgKGxvYWRlcnMpLCBsb2FkZXJfZHVtcF9jYWxsYmFjaywgTlVMTCk7CisgICAgfQorICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworfQorI2VuZGlmCisKKy8qIEFuIGl0ZXJhdG9yIGZvciB0aGUgZ2xvYmFsIGxvYWRlciBsaXN0OiBpZiBMT0FERVIgaXMgTlVMTCwgdGhlbgorICAgcmV0dXJuIHRoZSBmaXJzdCBlbGVtZW50LCBvdGhlcndpc2UgdGhlIGZvbGxvd2luZyBlbGVtZW50LiAgKi8KK2x0X2RsbG9hZGVyCitsdF9kbGxvYWRlcl9uZXh0IChsdF9kbGxvYWRlciBsb2FkZXIpCit7CisgIFNMaXN0ICppdGVtID0gKFNMaXN0ICopIGxvYWRlcjsKKyAgcmV0dXJuIChsdF9kbGxvYWRlcikgKGl0ZW0gPyBpdGVtLT5uZXh0IDogbG9hZGVycyk7Cit9CisKKworLyogTm9uLWRlc3RydWN0aXZlIHVuYm94aW5nIG9mIGEgbG9hZGVyLiAgKi8KK2NvbnN0IGx0X2RsdnRhYmxlICoKK2x0X2RsbG9hZGVyX2dldAkobHRfZGxsb2FkZXIgbG9hZGVyKQoreworICByZXR1cm4gKGNvbnN0IGx0X2RsdnRhYmxlICopIChsb2FkZXIgPyAoKFNMaXN0ICopIGxvYWRlciktPnVzZXJkYXRhIDogTlVMTCk7Cit9CisKKworLyogUmV0dXJuIHRoZSBjb250ZW50cyBvZiB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgZ2xvYmFsIGxvYWRlciBsaXN0CisgICB3aXRoIGEgbWF0Y2hpbmcgTkFNRSBhZnRlciByZW1vdmluZyBpdCBmcm9tIHRoYXQgbGlzdC4gIElmIHRoZXJlCisgICB3YXMgbm8gbWF0Y2gsIHJldHVybiBOVUxMOyBpZiB0aGVyZSBpcyBhbiBlcnJvciwgcmV0dXJuIE5VTEwgYW5kCisgICBzZXQgYW4gZXJyb3IgZm9yIGx0X2RsZXJyb3I7IGRvIG5vdCBzZXQgYW4gZXJyb3IgaWYgb25seSByZXNpZGVudAorICAgbW9kdWxlcyBuZWVkIHRoaXMgbG9hZGVyOyBpbiBlaXRoZXIgY2FzZSwgdGhlIGxvYWRlciBsaXN0IGlzIG5vdAorICAgY2hhbmdlZCBpZiBOVUxMIGlzIHJldHVybmVkLiAgKi8KK2x0X2RsdnRhYmxlICoKK2x0X2RsbG9hZGVyX3JlbW92ZSAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgY29uc3QgbHRfZGx2dGFibGUgKgl2dGFibGUJPSBsdF9kbGxvYWRlcl9maW5kIChuYW1lKTsKKyAgc3RhdGljIGNvbnN0IGNoYXIJaWRfc3RyaW5nW10gPSAibHRfZGxsb2FkZXJfcmVtb3ZlIjsKKyAgbHRfZGxpbnRlcmZhY2VfaWQJaWZhY2U7CisgIGx0X2RsaGFuZGxlCQloYW5kbGUgPSAwOworICBpbnQJCQlpbl91c2UgPSAwOworICBpbnQJCQlpbl91c2VfYnlfcmVzaWRlbnQgPSAwOworCisgIGlmICghdnRhYmxlKQorICAgIHsKKyAgICAgIExUX19TRVRFUlJPUiAoSU5WQUxJRF9MT0FERVIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIC8qIEZhaWwgaWYgdGhlcmUgYXJlIGFueSBvcGVuIG1vZHVsZXMgd2hpY2ggdXNlIHRoaXMgbG9hZGVyLiAgKi8KKyAgaWZhY2UgPSBsdF9kbGludGVyZmFjZV9yZWdpc3RlciAoaWRfc3RyaW5nLCBOVUxMKTsKKyAgd2hpbGUgKChoYW5kbGUgPSBsdF9kbGhhbmRsZV9pdGVyYXRlIChpZmFjZSwgaGFuZGxlKSkpCisgICAgeworICAgICAgbHRfZGxoYW5kbGUgY3VyID0gaGFuZGxlOworICAgICAgaWYgKGN1ci0+dnRhYmxlID09IHZ0YWJsZSkKKwl7CisJICBpbl91c2UgPSAxOworCSAgaWYgKGx0X2RsaXNyZXNpZGVudCAoaGFuZGxlKSkKKwkgICAgaW5fdXNlX2J5X3Jlc2lkZW50ID0gMTsKKwl9CisgICAgfQorICBsdF9kbGludGVyZmFjZV9mcmVlIChpZmFjZSk7CisgIGlmIChpbl91c2UpCisgICAgeworICAgICAgaWYgKCFpbl91c2VfYnlfcmVzaWRlbnQpCisJTFRfX1NFVEVSUk9SIChSRU1PVkVfTE9BREVSKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAvKiBDYWxsIHRoZSBsb2FkZXIgZmluYWxpc2F0aW9uIGZ1bmN0aW9uLiAgKi8KKyAgaWYgKHZ0YWJsZSAmJiB2dGFibGUtPmRsbG9hZGVyX2V4aXQpCisgICAgeworICAgICAgaWYgKCgqdnRhYmxlLT5kbGxvYWRlcl9leGl0KSAodnRhYmxlLT5kbGxvYWRlcl9kYXRhKSAhPSAwKQorCXsKKwkgIC8qIElmIHRoZXJlIGlzIGFuIGV4aXQgZnVuY3Rpb24sIGFuZCBpdCByZXR1cm5zIG5vbi16ZXJvCisJICAgICB0aGVuIGl0IG11c3Qgc2V0IGFuIGVycm9yLCBhbmQgd2Ugd2lsbCBub3QgcmVtb3ZlIGl0CisJICAgICBmcm9tIHRoZSBsaXN0LiAgKi8KKwkgIHJldHVybiAwOworCX0KKyAgICB9CisKKyAgLyogSWYgd2UgZ290IHRoaXMgZmFyLCByZW1vdmUgdGhlIGxvYWRlciBmcm9tIG91ciBnbG9iYWwgbGlzdC4gICovCisgIHJldHVybiAobHRfZGx2dGFibGUgKikKKyAgICAgIHNsaXN0X3VuYm94ICgoU0xpc3QgKikgc2xpc3RfcmVtb3ZlICgmbG9hZGVycywgbG9hZGVyX2NhbGxiYWNrLCAodm9pZCAqKSBuYW1lKSk7Cit9CisKKworY29uc3QgbHRfZGx2dGFibGUgKgorbHRfZGxsb2FkZXJfZmluZCAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgcmV0dXJuIGx0X2RsbG9hZGVyX2dldCAoc2xpc3RfZmluZCAobG9hZGVycywgbG9hZGVyX2NhbGxiYWNrLCAodm9pZCAqKSBuYW1lKSk7Cit9CmRpZmYgLS1naXQgYS9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvbHRfZXJyb3IuYyBiL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9sdF9lcnJvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YWYzNmQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvbHRfZXJyb3IuYwpAQCAtMCwwICsxLDExMCBAQAorLyogbHRfZXJyb3IuYyAtLSBlcnJvciBwcm9wb2dhdGlvbiBpbnRlcmZhY2UKKworICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDA0LCAyMDA1LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBUaG9tYXMgVGFubmVyLCAxOTk5CisKKyAgIE5PVEU6IFRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRoaXMgZmlsZSBpcyBtYWludGFpbmVkIHdpdGggdGhlCisgICBHTlUgTGlidG9vbCBwYWNrYWdlLiAgUmVwb3J0IGJ1Z3MgdG8gYnVnLWxpYnRvb2xAZ251Lm9yZy4KKworR05VIExpYmx0ZGwgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAoraWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAoraXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCitzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworR05VIExpYmx0ZGwgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIEdOVSBMaWJsdGRsOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIGEKK2NvcHkgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSAgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwuaHRtbCwKK29yIG9idGFpbmVkIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImx0X19wcml2YXRlLmgiCisjaW5jbHVkZSAibHRfZXJyb3IuaCIKKworc3RhdGljIGNvbnN0IGNoYXIJKmxhc3RfZXJyb3IJPSAwOworc3RhdGljIGNvbnN0IGNoYXIJZXJyb3Jfc3RyaW5nc1tMVF9FUlJPUl9NQVhdW0xUX0VSUk9SX0xFTl9NQVggKyAxXSA9CisgIHsKKyNkZWZpbmUgTFRfRVJST1IobmFtZSwgZGlhZ25vc3RpYykJZGlhZ25vc3RpYywKKyAgICBsdF9kbGVycm9yX3RhYmxlCisjdW5kZWYgTFRfRVJST1IKKyAgfTsKKworc3RhdGljCWNvbnN0IGNoYXIgICAgKip1c2VyX2Vycm9yX3N0cmluZ3MJPSAwOworc3RhdGljCWludAkJZXJyb3Jjb3VudAkJPSBMVF9FUlJPUl9NQVg7CisKK2ludAorbHRfZGxhZGRlcnJvciAoY29uc3QgY2hhciAqZGlhZ25vc3RpYykKK3sKKyAgaW50CQllcnJpbmRleCA9IDA7CisgIGludAkJcmVzdWx0CSA9IC0xOworICBjb25zdCBjaGFyICAqKnRlbXAgICAgID0gKGNvbnN0IGNoYXIgKiopIDA7CisKKyAgYXNzZXJ0IChkaWFnbm9zdGljKTsKKworICBlcnJpbmRleCA9IGVycm9yY291bnQgLSBMVF9FUlJPUl9NQVg7CisgIHRlbXAgPSBSRUFMTE9DIChjb25zdCBjaGFyICosIHVzZXJfZXJyb3Jfc3RyaW5ncywgMSArIGVycmluZGV4KTsKKyAgaWYgKHRlbXApCisgICAgeworICAgICAgdXNlcl9lcnJvcl9zdHJpbmdzCQk9IHRlbXA7CisgICAgICB1c2VyX2Vycm9yX3N0cmluZ3NbZXJyaW5kZXhdCT0gZGlhZ25vc3RpYzsKKyAgICAgIHJlc3VsdAkJCQk9IGVycm9yY291bnQrKzsKKyAgICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworaW50CitsdF9kbHNldGVycm9yIChpbnQgZXJyaW5kZXgpCit7CisgIGludAkJZXJyb3JzCSA9IDA7CisKKyAgaWYgKGVycmluZGV4ID49IGVycm9yY291bnQgfHwgZXJyaW5kZXggPCAwKQorICAgIHsKKyAgICAgIC8qIEFjayEgIEVycm9yIHNldHRpbmcgdGhlIGVycm9yIG1lc3NhZ2UhICovCisgICAgICBMVF9fU0VURVJST1IgKElOVkFMSURfRVJST1JDT0RFKTsKKyAgICAgICsrZXJyb3JzOworICAgIH0KKyAgZWxzZSBpZiAoZXJyaW5kZXggPCBMVF9FUlJPUl9NQVgpCisgICAgeworICAgICAgLyogTm8gZXJyb3Igc2V0dGluZyB0aGUgZXJyb3IgbWVzc2FnZSEgKi8KKyAgICAgIExUX19TRVRFUlJPUlNUUiAoZXJyb3Jfc3RyaW5nc1tlcnJpbmRleF0pOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIE5vIGVycm9yIHNldHRpbmcgdGhlIGVycm9yIG1lc3NhZ2UhICovCisgICAgICBMVF9fU0VURVJST1JTVFIgKHVzZXJfZXJyb3Jfc3RyaW5nc1tlcnJpbmRleCAtIExUX0VSUk9SX01BWF0pOworICAgIH0KKworICByZXR1cm4gZXJyb3JzOworfQorCitjb25zdCBjaGFyICoKK2x0X19lcnJvcl9zdHJpbmcgKGludCBlcnJvcmNvZGUpCit7CisgIGFzc2VydCAoZXJyb3Jjb2RlID49IDApOworICBhc3NlcnQgKGVycm9yY29kZSA8IExUX0VSUk9SX01BWCk7CisKKyAgcmV0dXJuIGVycm9yX3N0cmluZ3NbZXJyb3Jjb2RlXTsKK30KKworY29uc3QgY2hhciAqCitsdF9fZ2V0X2xhc3RfZXJyb3IgKHZvaWQpCit7CisgIHJldHVybiBsYXN0X2Vycm9yOworfQorCitjb25zdCBjaGFyICoKK2x0X19zZXRfbGFzdF9lcnJvciAoY29uc3QgY2hhciAqZXJyb3Jtc2cpCit7CisgIHJldHVybiBsYXN0X2Vycm9yID0gZXJyb3Jtc2c7Cit9CmRpZmYgLS1naXQgYS9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvbHRkbC5jIGIvc2hhcmUvbGlidG9vbC9saWJsdGRsL2x0ZGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWI0ZTJmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbGlidG9vbC9saWJsdGRsL2x0ZGwuYwpAQCAtMCwwICsxLDI0MzAgQEAKKy8qIGx0ZGwuYyAtLSBzeXN0ZW0gaW5kZXBlbmRlbnQgZGxvcGVuIHdyYXBwZXIKKworICAgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDA0LCAyMDA1LCAyMDA2LAorCQkgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgVGhvbWFzIFRhbm5lciwgMTk5OAorCisgICBOT1RFOiBUaGUgY2Fub25pY2FsIHNvdXJjZSBvZiB0aGlzIGZpbGUgaXMgbWFpbnRhaW5lZCB3aXRoIHRoZQorICAgR05VIExpYnRvb2wgcGFja2FnZS4gIFJlcG9ydCBidWdzIHRvIGJ1Zy1saWJ0b29sQGdudS5vcmcuCisKK0dOVSBMaWJsdGRsIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCit2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK0FzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK2lmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKK2lzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK0dOVSBMaWJsdGRsIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYWxvbmcgd2l0aCBHTlUgTGlibHRkbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCBhCitjb3B5IGNhbiBiZSBkb3dubG9hZGVkIGZyb20gIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9sZ3BsLmh0bWwsCitvciBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJsdF9fcHJpdmF0ZS5oIgorI2luY2x1ZGUgImx0X3N5c3RlbS5oIgorI2luY2x1ZGUgImx0X2RsbG9hZGVyLmgiCisKKworLyogLS0tIE1BTklGRVNUIENPTlNUQU5UUyAtLS0gKi8KKworCisvKiBTdGFuZGFyZCBsaWJsdGRsIHNlYXJjaCBwYXRoIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWUgICovCisjdW5kZWYgIExURExfU0VBUkNIUEFUSF9WQVIKKyNkZWZpbmUgTFRETF9TRUFSQ0hQQVRIX1ZBUgkiTFRETF9MSUJSQVJZX1BBVEgiCisKKy8qIFN0YW5kYXJkIGxpYnRvb2wgYXJjaGl2ZSBmaWxlIGV4dGVuc2lvbi4gICovCisjdW5kZWYgIExUX0FSQ0hJVkVfRVhUCisjZGVmaW5lIExUX0FSQ0hJVkVfRVhUCSIubGEiCisKKy8qIG1heC4gZmlsZW5hbWUgbGVuZ3RoICovCisjaWYgIWRlZmluZWQoTFRfRklMRU5BTUVfTUFYKQorIyAgZGVmaW5lIExUX0ZJTEVOQU1FX01BWAkxMDI0CisjZW5kaWYKKworI2lmICFkZWZpbmVkKExUX0xJQkVYVCkKKyMgIGRlZmluZSBMVF9MSUJFWFQgImEiCisjZW5kaWYKKworLyogVGhpcyBpcyB0aGUgbWF4aW11bSBzeW1ib2wgc2l6ZSB0aGF0IHdvbid0IHJlcXVpcmUgbWFsbG9jL2ZyZWUgKi8KKyN1bmRlZglMVF9TWU1CT0xfTEVOR1RICisjZGVmaW5lIExUX1NZTUJPTF9MRU5HVEgJMTI4CisKKy8qIFRoaXMgYWNjb3VudHMgZm9yIHRoZSBfTFRYXyBzZXBhcmF0b3IgKi8KKyN1bmRlZglMVF9TWU1CT0xfT1ZFUkhFQUQKKyNkZWZpbmUgTFRfU1lNQk9MX09WRVJIRUFECTUKKworLyogVmFyaW91cyBib29sZWFuIGZsYWdzIGNhbiBiZSBzdG9yZWQgaW4gdGhlIGZsYWdzIGZpZWxkIG9mIGFuCisgICBsdF9kbGhhbmRsZS4uLiAqLworI2RlZmluZSBMVF9ETElTX1JFU0lERU5UKGhhbmRsZSkgICgoaGFuZGxlKS0+aW5mby5pc19yZXNpZGVudCkKKyNkZWZpbmUgTFRfRExJU19TWU1HTE9CQUwoaGFuZGxlKSAoKGhhbmRsZSktPmluZm8uaXNfc3ltZ2xvYmFsKQorI2RlZmluZSBMVF9ETElTX1NZTUxPQ0FMKGhhbmRsZSkgICgoaGFuZGxlKS0+aW5mby5pc19zeW1sb2NhbCkKKworCitzdGF0aWMJY29uc3QgY2hhcglvYmpkaXJbXQkJPSBMVF9PQkpESVI7CitzdGF0aWMJY29uc3QgY2hhcglhcmNoaXZlX2V4dFtdCQk9IExUX0FSQ0hJVkVfRVhUOworc3RhdGljICBjb25zdCBjaGFyCWxpYmV4dFtdCQk9IExUX0xJQkVYVDsKKyNpZiBkZWZpbmVkKExUX01PRFVMRV9FWFQpCitzdGF0aWMJY29uc3QgY2hhcglzaGxpYl9leHRbXQkJPSBMVF9NT0RVTEVfRVhUOworI2VuZGlmCisjaWYgZGVmaW5lZChMVF9ETFNFQVJDSF9QQVRIKQorc3RhdGljCWNvbnN0IGNoYXIJc3lzX2Rsc2VhcmNoX3BhdGhbXQk9IExUX0RMU0VBUkNIX1BBVEg7CisjZW5kaWYKKworCisKKwwKKy8qIC0tLSBEWU5BTUlDIE1PRFVMRSBMT0FESU5HIC0tLSAqLworCisKKy8qIFRoZSB0eXBlIG9mIGEgZnVuY3Rpb24gdXNlZCBhdCBlYWNoIGl0ZXJhdGlvbiBvZiAgZm9yZWFjaF9kaXJpbnBhdGgoKS4gICovCit0eXBlZGVmIGludAlmb3JlYWNoX2NhbGxiYWNrX2Z1bmMgKGNoYXIgKmZpbGVuYW1lLCB2b2lkICpkYXRhMSwKKwkJCQkgICAgICAgdm9pZCAqZGF0YTIpOworLyogZm9yZWFjaGZpbGVfY2FsbGJhY2sgaXRzZWxmIGNhbGxzIGEgZnVuY3Rpb24gb2YgdGhpcyB0eXBlOiAqLwordHlwZWRlZiBpbnQJZmlsZV93b3JrZXJfZnVuYyAgICAgIChjb25zdCBjaGFyICpmaWxlbmFtZSwgdm9pZCAqZGF0YSk7CisKKworc3RhdGljCWludAlmb3JlYWNoX2RpcmlucGF0aCAgICAgKGNvbnN0IGNoYXIgKnNlYXJjaF9wYXRoLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpiYXNlX25hbWUsCisJCQkJICAgICAgIGZvcmVhY2hfY2FsbGJhY2tfZnVuYyAqZnVuYywKKwkJCQkgICAgICAgdm9pZCAqZGF0YTEsIHZvaWQgKmRhdGEyKTsKK3N0YXRpYwlpbnQJZmluZF9maWxlX2NhbGxiYWNrICAgIChjaGFyICpmaWxlbmFtZSwgdm9pZCAqZGF0YTEsCisJCQkJICAgICAgIHZvaWQgKmRhdGEyKTsKK3N0YXRpYwlpbnQJZmluZF9oYW5kbGVfY2FsbGJhY2sgIChjaGFyICpmaWxlbmFtZSwgdm9pZCAqZGF0YSwKKwkJCQkgICAgICAgdm9pZCAqaWdub3JlZCk7CitzdGF0aWMJaW50CWZvcmVhY2hmaWxlX2NhbGxiYWNrICAoY2hhciAqZmlsZW5hbWUsIHZvaWQgKmRhdGExLAorCQkJCSAgICAgICB2b2lkICpkYXRhMik7CisKKworc3RhdGljCWludCAgICAgY2Fub25pY2FsaXplX3BhdGggICAgIChjb25zdCBjaGFyICpwYXRoLCBjaGFyICoqcGNhbm9uaWNhbCk7CitzdGF0aWMJaW50CWFyZ3ppemVfcGF0aAkgICAgICAoY29uc3QgY2hhciAqcGF0aCwKKwkJCQkgICAgICAgY2hhciAqKnBhcmd6LCBzaXplX3QgKnBhcmd6X2xlbik7CitzdGF0aWMJRklMRSAgICpmaW5kX2ZpbGUJICAgICAgKGNvbnN0IGNoYXIgKnNlYXJjaF9wYXRoLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpiYXNlX25hbWUsIGNoYXIgKipwZGlyKTsKK3N0YXRpYwlsdF9kbGhhbmRsZSAqZmluZF9oYW5kbGUgICAgICAoY29uc3QgY2hhciAqc2VhcmNoX3BhdGgsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmJhc2VfbmFtZSwKKwkJCQkgICAgICAgbHRfZGxoYW5kbGUgKmhhbmRsZSwKKwkJCQkgICAgICAgbHRfZGxhZHZpc2UgYWR2aXNlKTsKK3N0YXRpYwlpbnQJZmluZF9tb2R1bGUJICAgICAgKGx0X2RsaGFuZGxlICpoYW5kbGUsIGNvbnN0IGNoYXIgKmRpciwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqbGliZGlyLCBjb25zdCBjaGFyICpkbG5hbWUsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lLCBpbnQgaW5zdGFsbGVkLAorCQkJCSAgICAgICBsdF9kbGFkdmlzZSBhZHZpc2UpOworc3RhdGljICBpbnQgICAgIGhhc19saWJyYXJ5X2V4dCAgICAgICAoY29uc3QgY2hhciAqZmlsZW5hbWUpOworc3RhdGljCWludAlsb2FkX2RlcGxpYnMJICAgICAgKGx0X2RsaGFuZGxlIGhhbmRsZSwgIGNoYXIgKmRlcGxpYnMpOworc3RhdGljCWludAl0cmltCQkgICAgICAoY2hhciAqKmRlc3QsIGNvbnN0IGNoYXIgKnN0cik7CitzdGF0aWMJaW50CXRyeV9kbG9wZW4JICAgICAgKGx0X2RsaGFuZGxlICpoYW5kbGUsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpleHQsCisJCQkJICAgICAgIGx0X2RsYWR2aXNlIGFkdmlzZSk7CitzdGF0aWMJaW50CXRyeWFsbF9kbG9wZW4JICAgICAgKGx0X2RsaGFuZGxlICpoYW5kbGUsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCSAgICAgICBsdF9kbGFkdmlzZSBwYWR2aXNlLAorCQkJCSAgICAgICBjb25zdCBsdF9kbHZ0YWJsZSAqdnRhYmxlKTsKK3N0YXRpYwlpbnQJdW5sb2FkX2RlcGxpYnMJICAgICAgKGx0X2RsaGFuZGxlIGhhbmRsZSk7CitzdGF0aWMJaW50CWx0X2FyZ3pfaW5zZXJ0CSAgICAgIChjaGFyICoqcGFyZ3osIHNpemVfdCAqcGFyZ3pfbGVuLAorCQkJCSAgICAgICBjaGFyICpiZWZvcmUsIGNvbnN0IGNoYXIgKmVudHJ5KTsKK3N0YXRpYwlpbnQJbHRfYXJnel9pbnNlcnRpbm9yZGVyIChjaGFyICoqcGFyZ3osIHNpemVfdCAqcGFyZ3pfbGVuLAorCQkJCSAgICAgICBjb25zdCBjaGFyICplbnRyeSk7CitzdGF0aWMJaW50CWx0X2FyZ3pfaW5zZXJ0ZGlyICAgICAoY2hhciAqKnBhcmd6LCBzaXplX3QgKnBhcmd6X2xlbiwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqZGlybmFtLCBzdHJ1Y3QgZGlyZW50ICpkcCk7CitzdGF0aWMJaW50CWx0X2RscGF0aF9pbnNlcnRkaXIgICAoY2hhciAqKnBwYXRoLCBjaGFyICpiZWZvcmUsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmRpcik7CitzdGF0aWMJaW50CWxpc3RfZmlsZXNfYnlfZGlyICAgICAoY29uc3QgY2hhciAqZGlybmFtLAorCQkJCSAgICAgICBjaGFyICoqcGFyZ3osIHNpemVfdCAqcGFyZ3pfbGVuKTsKK3N0YXRpYwlpbnQJZmlsZV9ub3RfZm91bmQJICAgICAgKHZvaWQpOworCisjaWZkZWYgSEFWRV9MSUJETExPQURFUgorc3RhdGljCWludAlsb2FkZXJfaW5pdF9jYWxsYmFjayAgKGx0X2RsaGFuZGxlIGhhbmRsZSk7CisjZW5kaWYgLyogSEFWRV9MSUJETExPQURFUiAqLworCitzdGF0aWMJaW50CWxvYWRlcl9pbml0CSAgICAgIChsdF9nZXRfdnRhYmxlICp2dGFibGVfZnVuYywKKwkJCQkgICAgICAgbHRfdXNlcl9kYXRhIGRhdGEpOworCitzdGF0aWMJY2hhcgkgICAgICAgKnVzZXJfc2VhcmNoX3BhdGg9IDA7CitzdGF0aWMJbHRfZGxoYW5kbGUJaGFuZGxlcwk9IDA7CitzdGF0aWMJaW50CQlpbml0aWFsaXplZAk9IDA7CisKKy8qIE91ciBtZW1vcnkgZmFpbHVyZSBjYWxsYmFjayBzZXRzIHRoZSBlcnJvciBtZXNzYWdlIHRvIGJlIHBhc3NlZCBiYWNrCisgICB1cCB0byB0aGUgY2xpZW50LCBzbyB3ZSBtdXN0IGJlIGNhcmVmdWwgdG8gcmV0dXJuIGZyb20gbWFsbG9jYXRpb24KKyAgIGNhbGxlcnMgaWYgYWxsb2NhdGlvbiBmYWlscyAoYXMgdGhpcyBjYWxsYmFjayByZXR1cm5zISEpLiAgKi8KK3ZvaWQKK2x0X19hbGxvY19kaWVfY2FsbGJhY2sgKHZvaWQpCit7CisgIExUX19TRVRFUlJPUiAoTk9fTUVNT1JZKTsKK30KKworI2lmZGVmIEhBVkVfTElCRExMT0FERVIKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGluaXRpYWxpc2UgZWFjaCBwcmVsb2FkZWQgbW9kdWxlIGxvYWRlciwKKyAgIGFuZCBob29rIGl0IGludG8gdGhlIGxpc3Qgb2YgbG9hZGVycyB0byBiZSB1c2VkIHdoZW4gYXR0ZW1wdGluZyB0bworICAgZGxvcGVuIGFuIGFwcGxpY2F0aW9uIG1vZHVsZS4gICovCitzdGF0aWMgaW50Citsb2FkZXJfaW5pdF9jYWxsYmFjayAobHRfZGxoYW5kbGUgaGFuZGxlKQoreworICBsdF9nZXRfdnRhYmxlICp2dGFibGVfZnVuYyA9IChsdF9nZXRfdnRhYmxlICopIGx0X2Rsc3ltIChoYW5kbGUsICJnZXRfdnRhYmxlIik7CisgIHJldHVybiBsb2FkZXJfaW5pdCAodnRhYmxlX2Z1bmMsIDApOworfQorI2VuZGlmIC8qIEhBVkVfTElCRExMT0FERVIgKi8KKworc3RhdGljIGludAorbG9hZGVyX2luaXQgKGx0X2dldF92dGFibGUgKnZ0YWJsZV9mdW5jLCBsdF91c2VyX2RhdGEgZGF0YSkKK3sKKyAgY29uc3QgbHRfZGx2dGFibGUgKnZ0YWJsZSA9IDA7CisgIGludCBlcnJvcnMgPSAwOworCisgIGlmICh2dGFibGVfZnVuYykKKyAgICB7CisgICAgICB2dGFibGUgPSAoKnZ0YWJsZV9mdW5jKSAoZGF0YSk7CisgICAgfQorCisgIC8qIGx0X2RsbG9hZGVyX2FkZCB3aWxsIExUX19TRVRFUlJPUiBpZiBpdCBmYWlscy4gICovCisgIGVycm9ycyArPSBsdF9kbGxvYWRlcl9hZGQgKHZ0YWJsZSk7CisKKyAgYXNzZXJ0IChlcnJvcnMgfHwgdnRhYmxlKTsKKworICBpZiAoKCFlcnJvcnMpICYmIHZ0YWJsZS0+ZGxsb2FkZXJfaW5pdCkKKyAgICB7CisgICAgICBpZiAoKCp2dGFibGUtPmRsbG9hZGVyX2luaXQpICh2dGFibGUtPmRsbG9hZGVyX2RhdGEpKQorCXsKKwkgIExUX19TRVRFUlJPUiAoSU5JVF9MT0FERVIpOworCSAgKytlcnJvcnM7CisJfQorICAgIH0KKworICByZXR1cm4gZXJyb3JzOworfQorCisvKiBCb290c3RyYXAgdGhlIGxvYWRlciBsb2FkaW5nIHdpdGggdGhlIHByZW9wZW5pbmcgbG9hZGVyLiAgKi8KKyNkZWZpbmUgZ2V0X3Z0YWJsZQkJcHJlb3Blbl9MVFhfZ2V0X3Z0YWJsZQorI2RlZmluZSBwcmVsb2FkZWRfc3ltYm9scwlMVF9DT05DMyhsdF8sIExURExPUEVOLCBfTFRYX3ByZWxvYWRlZF9zeW1ib2xzKQorCitMVF9CRUdJTl9DX0RFQ0xTCitMVF9TQ09QRSBjb25zdCBsdF9kbHZ0YWJsZSAqCWdldF92dGFibGUgKGx0X3VzZXJfZGF0YSBkYXRhKTsKK0xUX0VORF9DX0RFQ0xTCisjaWZkZWYgSEFWRV9MSUJETExPQURFUgorZXh0ZXJuIGx0X2Rsc3ltbGlzdAkJcHJlbG9hZGVkX3N5bWJvbHNbXTsKKyNlbmRpZgorCisvKiBJbml0aWFsaXplIGxpYmx0ZGwuICovCitpbnQKK2x0X2RsaW5pdCAodm9pZCkKK3sKKyAgaW50CWVycm9ycwk9IDA7CisKKyAgLyogSW5pdGlhbGl6ZSBvbmx5IGF0IGZpcnN0IGNhbGwuICovCisgIGlmICgrK2luaXRpYWxpemVkID09IDEpCisgICAgeworICAgICAgbHRfX2FsbG9jX2RpZQk9IGx0X19hbGxvY19kaWVfY2FsbGJhY2s7CisgICAgICBoYW5kbGVzCQk9IDA7CisgICAgICB1c2VyX3NlYXJjaF9wYXRoCT0gMDsgLyogZW1wdHkgc2VhcmNoIHBhdGggKi8KKworICAgICAgLyogRmlyc3Qgc2V0IHVwIHRoZSBzdGF0aWNhbGx5IGxvYWRlZCBwcmVsb2FkIG1vZHVsZSBsb2FkZXIsIHNvCisJIHdlIGNhbiB1c2UgaXQgdG8gcHJlb3BlbiB0aGUgb3RoZXIgbG9hZGVycyB3ZSBsaW5rZWQgaW4gYXQKKwkgY29tcGlsZSB0aW1lLiAgKi8KKyAgICAgIGVycm9ycyArPSBsb2FkZXJfaW5pdCAoZ2V0X3Z0YWJsZSwgMCk7CisKKyAgICAgIC8qIE5vdyBvcGVuIGFsbCB0aGUgcHJlbG9hZGVkIG1vZHVsZSBsb2FkZXJzLCBzbyB0aGUgYXBwbGljYXRpb24KKwkgY2FuIHVzZSBfdGhlbV8gdG8gbHRfZGxvcGVuIGl0cyBvd24gbW9kdWxlcy4gICovCisjaWZkZWYgSEFWRV9MSUJETExPQURFUgorICAgICAgaWYgKCFlcnJvcnMpCisJeworCSAgZXJyb3JzICs9IGx0X2RscHJlbG9hZCAocHJlbG9hZGVkX3N5bWJvbHMpOworCX0KKworICAgICAgaWYgKCFlcnJvcnMpCisJeworCSAgZXJyb3JzICs9IGx0X2RscHJlbG9hZF9vcGVuIChMVF9TVFIoTFRETE9QRU4pLCBsb2FkZXJfaW5pdF9jYWxsYmFjayk7CisJfQorI2VuZGlmIC8qIEhBVkVfTElCRExMT0FERVIgKi8KKyAgICB9CisKKyNpZmRlZiBMVF9ERUJVR19MT0FERVJTCisgIGx0X2RsbG9hZGVyX2R1bXAoKTsKKyNlbmRpZgorCisgIHJldHVybiBlcnJvcnM7Cit9CisKK2ludAorbHRfZGxleGl0ICh2b2lkKQoreworICAvKiBzaHV0IGRvd24gbGlibHRkbCAqLworICBsdF9kbGxvYWRlciAqbG9hZGVyICAgPSAwOworICBsdF9kbGhhbmRsZSAgaGFuZGxlICAgPSBoYW5kbGVzOworICBpbnQJICAgICAgIGVycm9ycyAgID0gMDsKKworICBpZiAoIWluaXRpYWxpemVkKQorICAgIHsKKyAgICAgIExUX19TRVRFUlJPUiAoU0hVVERPV04pOworICAgICAgKytlcnJvcnM7CisgICAgICBnb3RvIGRvbmU7CisgICAgfQorCisgIC8qIHNodXQgZG93biBvbmx5IGF0IGxhc3QgY2FsbC4gKi8KKyAgaWYgKC0taW5pdGlhbGl6ZWQgPT0gMCkKKyAgICB7CisgICAgICBpbnQJbGV2ZWw7CisKKyAgICAgIHdoaWxlIChoYW5kbGVzICYmIExUX0RMSVNfUkVTSURFTlQgKGhhbmRsZXMpKQorCXsKKwkgIGhhbmRsZXMgPSBoYW5kbGVzLT5uZXh0OworCX0KKworICAgICAgLyogY2xvc2UgYWxsIG1vZHVsZXMgKi8KKyAgICAgIGZvciAobGV2ZWwgPSAxOyBoYW5kbGU7ICsrbGV2ZWwpCisJeworCSAgbHRfZGxoYW5kbGUgY3VyID0gaGFuZGxlczsKKwkgIGludCBzYXdfbm9ucmVzaWRlbnQgPSAwOworCisJICB3aGlsZSAoY3VyKQorCSAgICB7CisJICAgICAgbHRfZGxoYW5kbGUgdG1wID0gY3VyOworCSAgICAgIGN1ciA9IGN1ci0+bmV4dDsKKwkgICAgICBpZiAoIUxUX0RMSVNfUkVTSURFTlQgKHRtcCkpCisJCXsKKwkJICBzYXdfbm9ucmVzaWRlbnQgPSAxOworCQkgIGlmICh0bXAtPmluZm8ucmVmX2NvdW50IDw9IGxldmVsKQorCQkgICAgeworCQkgICAgICBpZiAobHRfZGxjbG9zZSAodG1wKSkKKwkJCXsKKwkJCSAgKytlcnJvcnM7CisJCQl9CisJCSAgICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBoYW5kbGUgcG9pbnRlZCB0byBieSAnY3VyJyBzdGlsbCBleGlzdHMuCisJCQkgbHRfZGxjbG9zZSByZWN1cnNpdmVseSBjbG9zZXMgZGVwZW5kZW50IGxpYnJhcmllcyB3aGljaCByZW1vdmVzCisJCQkgdGhlbSBmcm9tIHRoZSBsaW5rZWQgbGlzdC4gIE9uZSBvZiB0aGVzZSBtaWdodCBiZSB0aGUgb25lCisJCQkgcG9pbnRlZCB0byBieSAnY3VyJy4gICovCisJCSAgICAgIGlmIChjdXIpCisJCQl7CisJCQkgIGZvciAodG1wID0gaGFuZGxlczsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCisJCQkgICAgaWYgKHRtcCA9PSBjdXIpCisJCQkgICAgICBicmVhazsKKwkJCSAgaWYgKCEgdG1wKQorCQkJICAgIGN1ciA9IGhhbmRsZXM7CisJCQl9CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgLyogZG9uZSBpZiBvbmx5IHJlc2lkZW50IG1vZHVsZXMgYXJlIGxlZnQgKi8KKwkgIGlmICghc2F3X25vbnJlc2lkZW50KQorCSAgICBicmVhazsKKwl9CisKKyAgICAgIC8qIFdoZW4gcmVtb3ZpbmcgbG9hZGVycywgd2UgY2FuIG9ubHkgZmluZCBvdXQgZmFpbHVyZSBieSB0ZXN0aW5nCisJIHRoZSBlcnJvciBzdHJpbmcsIHNvIGF2b2lkIGEgc3B1cmlvdXMgb25lIGZyb20gYW4gZWFybGllcgorCSBmYWlsZWQgY29tbWFuZC4gKi8KKyAgICAgIGlmICghZXJyb3JzKQorCUxUX19TRVRFUlJPUlNUUiAoMCk7CisKKyAgICAgIC8qIGNsb3NlIGFsbCBsb2FkZXJzICovCisgICAgICBmb3IgKGxvYWRlciA9IChsdF9kbGxvYWRlciAqKSBsdF9kbGxvYWRlcl9uZXh0IChOVUxMKTsgbG9hZGVyOykKKwl7CisJICBsdF9kbGxvYWRlciAqbmV4dCAgID0gKGx0X2RsbG9hZGVyICopIGx0X2RsbG9hZGVyX25leHQgKGxvYWRlcik7CisJICBsdF9kbHZ0YWJsZSAqdnRhYmxlID0gKGx0X2RsdnRhYmxlICopIGx0X2RsbG9hZGVyX2dldCAobG9hZGVyKTsKKworCSAgaWYgKCh2dGFibGUgPSBsdF9kbGxvYWRlcl9yZW1vdmUgKChjaGFyICopIHZ0YWJsZS0+bmFtZSkpKQorCSAgICB7CisJICAgICAgRlJFRSAodnRhYmxlKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgLyogaWdub3JlIGVycm9ycyBkdWUgdG8gcmVzaWRlbnQgbW9kdWxlcyAqLworCSAgICAgIGNvbnN0IGNoYXIgKmVycjsKKwkgICAgICBMVF9fR0VURVJST1IgKGVycik7CisJICAgICAgaWYgKGVycikKKwkJKytlcnJvcnM7CisJICAgIH0KKworCSAgbG9hZGVyID0gbmV4dDsKKwl9CisKKyAgICAgIEZSRUUodXNlcl9zZWFyY2hfcGF0aCk7CisgICAgfQorCisgZG9uZToKKyAgcmV0dXJuIGVycm9yczsKK30KKworCisvKiBUcnkgVlRBQkxFIG9yLCBpZiBWVEFCTEUgaXMgTlVMTCwgYWxsIGF2YWlsYWJsZSBsb2FkZXJzIGZvciBGSUxFTkFNRS4KKyAgIElmIHRoZSBsaWJyYXJ5IGlzIG5vdCBzdWNjZXNzZnVsbHkgbG9hZGVkLCByZXR1cm4gbm9uLXplcm8uICBPdGhlcndpc2UsCisgICB0aGUgZGxoYW5kbGUgaXMgc3RvcmVkIGF0IHRoZSBhZGRyZXNzIGdpdmVuIGluIFBIQU5ETEUuICAqLworc3RhdGljIGludAordHJ5YWxsX2Rsb3BlbiAobHRfZGxoYW5kbGUgKnBoYW5kbGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCSAgICAgICBsdF9kbGFkdmlzZSBhZHZpc2UsIGNvbnN0IGx0X2RsdnRhYmxlICp2dGFibGUpCit7CisgIGx0X2RsaGFuZGxlCWhhbmRsZQkJPSBoYW5kbGVzOworICBjb25zdCBjaGFyICoJc2F2ZWRfZXJyb3IJPSAwOworICBpbnQJCWVycm9ycwkJPSAwOworCisjaWZkZWYgTFRfREVCVUdfTE9BREVSUworICBmcHJpbnRmIChzdGRlcnIsICJ0cnlhbGxfZGxvcGVuICglcywgJXMpXG4iLAorCSAgIGZpbGVuYW1lID8gZmlsZW5hbWUgOiAiKG51bGwpIiwKKwkgICB2dGFibGUgPyB2dGFibGUtPm5hbWUgOiAiKEFMTCkiKTsKKyNlbmRpZgorCisgIExUX19HRVRFUlJPUiAoc2F2ZWRfZXJyb3IpOworCisgIC8qIGNoZWNrIHdoZXRoZXIgdGhlIG1vZHVsZSB3YXMgYWxyZWFkeSBvcGVuZWQgKi8KKyAgZm9yICg7aGFuZGxlOyBoYW5kbGUgPSBoYW5kbGUtPm5leHQpCisgICAgeworICAgICAgaWYgKChoYW5kbGUtPmluZm8uZmlsZW5hbWUgPT0gZmlsZW5hbWUpIC8qIGRsb3BlbiBzZWxmOiAwID09IDAgKi8KKwkgIHx8IChoYW5kbGUtPmluZm8uZmlsZW5hbWUgJiYgZmlsZW5hbWUKKwkgICAgICAmJiBzdHJlcSAoaGFuZGxlLT5pbmZvLmZpbGVuYW1lLCBmaWxlbmFtZSkpKQorCXsKKwkgIGJyZWFrOworCX0KKyAgICB9CisKKyAgaWYgKGhhbmRsZSkKKyAgICB7CisgICAgICArK2hhbmRsZS0+aW5mby5yZWZfY291bnQ7CisgICAgICAqcGhhbmRsZSA9IGhhbmRsZTsKKyAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisKKyAgaGFuZGxlID0gKnBoYW5kbGU7CisgIGlmIChmaWxlbmFtZSkKKyAgICB7CisgICAgICAvKiBDb21tZW50IG91dCB0aGUgY2hlY2sgb2YgZmlsZSBwZXJtaXNzaW9ucyB1c2luZyBhY2Nlc3MuCisJIFRoaXMgY2FsbCBzZWVtcyB0byBhbHdheXMgcmV0dXJuIC0xIHdpdGggZXJyb3IgRUFDQ0VTLgorICAgICAgKi8KKyAgICAgIC8qIFdlIG5lZWQgdG8gY2F0Y2ggbWlzc2luZyBmaWxlIGVycm9ycyBlYXJseSBzbyB0aGF0CisJIGZpbGVfbm90X2ZvdW5kKCkgY2FuIGRldGVjdCB3aGF0IGhhcHBlbmVkLgorICAgICAgaWYgKGFjY2VzcyAoZmlsZW5hbWUsIFJfT0spICE9IDApCisJeworCSAgTFRfX1NFVEVSUk9SIChGSUxFX05PVF9GT1VORCk7CisJICArK2Vycm9yczsKKwkgIGdvdG8gZG9uZTsKKwl9ICovCisKKyAgICAgIGhhbmRsZS0+aW5mby5maWxlbmFtZSA9IGx0X19zdHJkdXAgKGZpbGVuYW1lKTsKKyAgICAgIGlmICghaGFuZGxlLT5pbmZvLmZpbGVuYW1lKQorCXsKKwkgICsrZXJyb3JzOworCSAgZ290byBkb25lOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBoYW5kbGUtPmluZm8uZmlsZW5hbWUgPSAwOworICAgIH0KKworICB7CisgICAgbHRfZGxsb2FkZXIgbG9hZGVyID0gbHRfZGxsb2FkZXJfbmV4dCAoMCk7CisgICAgY29uc3QgbHRfZGx2dGFibGUgKmxvYWRlcl92dGFibGU7CisKKyAgICBkbworICAgICAgeworCWlmICh2dGFibGUpCisJICBsb2FkZXJfdnRhYmxlID0gdnRhYmxlOworCWVsc2UKKwkgIGxvYWRlcl92dGFibGUgPSBsdF9kbGxvYWRlcl9nZXQgKGxvYWRlcik7CisKKyNpZmRlZiBMVF9ERUJVR19MT0FERVJTCisJZnByaW50ZiAoc3RkZXJyLCAiQ2FsbGluZyAlcy0+bW9kdWxlX29wZW4gKCVzKVxuIiwKKwkJIChsb2FkZXJfdnRhYmxlICYmIGxvYWRlcl92dGFibGUtPm5hbWUpID8gbG9hZGVyX3Z0YWJsZS0+bmFtZSA6ICIobnVsbCkiLAorCQkgZmlsZW5hbWUgPyBmaWxlbmFtZSA6ICIobnVsbCkiKTsKKyNlbmRpZgorCWhhbmRsZS0+bW9kdWxlID0gKCpsb2FkZXJfdnRhYmxlLT5tb2R1bGVfb3BlbikgKGxvYWRlcl92dGFibGUtPmRsbG9hZGVyX2RhdGEsCisJCQkJCQkJZmlsZW5hbWUsIGFkdmlzZSk7CisjaWZkZWYgTFRfREVCVUdfTE9BREVSUworCWZwcmludGYgKHN0ZGVyciwgIiAgUmVzdWx0OiAlc1xuIiwKKwkJIGhhbmRsZS0+bW9kdWxlID8gIlN1Y2Nlc3MiIDogIkZhaWxlZCIpOworI2VuZGlmCisKKwlpZiAoaGFuZGxlLT5tb2R1bGUgIT0gMCkKKwkgIHsKKwkgICAgaWYgKGFkdmlzZSkKKwkgICAgICB7CisJCWhhbmRsZS0+aW5mby5pc19yZXNpZGVudCAgPSBhZHZpc2UtPmlzX3Jlc2lkZW50OworCQloYW5kbGUtPmluZm8uaXNfc3ltZ2xvYmFsID0gYWR2aXNlLT5pc19zeW1nbG9iYWw7CisJCWhhbmRsZS0+aW5mby5pc19zeW1sb2NhbCAgPSBhZHZpc2UtPmlzX3N5bWxvY2FsOworCSAgICAgIH0KKwkgICAgYnJlYWs7CisJICB9CisgICAgICB9CisgICAgd2hpbGUgKCF2dGFibGUgJiYgKGxvYWRlciA9IGx0X2RsbG9hZGVyX25leHQgKGxvYWRlcikpKTsKKworICAgIC8qIElmIFZUQUJMRSB3YXMgZ2l2ZW4gYnV0IGNvdWxkbid0IG9wZW4gdGhlIG1vZHVsZSwgb3IgVlRBQkxFIHdhc24ndAorICAgICAgIGdpdmVuIGJ1dCB3ZSBleGhhdXN0ZWQgYWxsIGxvYWRlcnMgd2l0aG91dCBvcGVuaW5nIHRoZSBtb2R1bGUsIGJhaWwKKyAgICAgICBvdXQhICAqLworICAgIGlmICgodnRhYmxlICYmICFoYW5kbGUtPm1vZHVsZSkKKwl8fCAoIXZ0YWJsZSAmJiAhbG9hZGVyKSkKKyAgICAgIHsKKwlGUkVFIChoYW5kbGUtPmluZm8uZmlsZW5hbWUpOworCSsrZXJyb3JzOworCWdvdG8gZG9uZTsKKyAgICAgIH0KKworICAgIGhhbmRsZS0+dnRhYmxlID0gbG9hZGVyX3Z0YWJsZTsKKyAgfQorCisgIExUX19TRVRFUlJPUlNUUiAoc2F2ZWRfZXJyb3IpOworCisgZG9uZToKKyAgcmV0dXJuIGVycm9yczsKK30KKworCitzdGF0aWMgaW50Cit0cnlhbGxfZGxvcGVuX21vZHVsZSAobHRfZGxoYW5kbGUgKmhhbmRsZSwgY29uc3QgY2hhciAqcHJlZml4LAorCQkgICAgICBjb25zdCBjaGFyICpkaXJuYW1lLCBjb25zdCBjaGFyICpkbG5hbWUsCisJCSAgICAgIGx0X2RsYWR2aXNlIGFkdmlzZSkKK3sKKyAgaW50ICAgICAgZXJyb3IJPSAwOworICBjaGFyICAgICAqZmlsZW5hbWUJPSAwOworICBzaXplX3QgICBmaWxlbmFtZV9sZW4JPSAwOworICBzaXplX3QgICBkaXJuYW1lX2xlbgk9IExUX1NUUkxFTiAoZGlybmFtZSk7CisKKyAgYXNzZXJ0IChoYW5kbGUpOworICBhc3NlcnQgKGRpcm5hbWUpOworICBhc3NlcnQgKGRsbmFtZSk7CisjaWYgZGVmaW5lZChMVF9ESVJTRVBfQ0hBUikKKyAgLyogT25seSBjYW5vbmljYWxpemVkIG5hbWVzIChpLmUuIHdpdGggRElSU0VQIGNoYXJzIGFscmVhZHkgY29udmVydGVkKQorICAgICBzaG91bGQgbWFrZSBpdCBpbnRvIHRoaXMgZnVuY3Rpb246ICAqLworICBhc3NlcnQgKHN0cmNociAoZGlybmFtZSwgTFRfRElSU0VQX0NIQVIpID09IDApOworI2VuZGlmCisKKyAgaWYgKGRpcm5hbWVfbGVuID4gMCkKKyAgICBpZiAoZGlybmFtZVtkaXJuYW1lX2xlbiAtMV0gPT0gJy8nKQorICAgICAgLS1kaXJuYW1lX2xlbjsKKyAgZmlsZW5hbWVfbGVuID0gZGlybmFtZV9sZW4gKyAxICsgTFRfU1RSTEVOIChkbG5hbWUpOworCisgIC8qIEFsbG9jYXRlIG1lbW9yeSwgYW5kIGNvbWJpbmUgRElSTkFNRSBhbmQgTU9EVUxFTkFNRSBpbnRvIGl0LgorICAgICBUaGUgUFJFRklYIChpZiBhbnkpIGlzIGhhbmRsZWQgYmVsb3cuICAqLworICBmaWxlbmFtZSAgPSBNQUxMT0MgKGNoYXIsIGZpbGVuYW1lX2xlbiArIDEpOworICBpZiAoIWZpbGVuYW1lKQorICAgIHJldHVybiAxOworCisgIHNwcmludGYgKGZpbGVuYW1lLCAiJS4qcy8lcyIsIChpbnQpIGRpcm5hbWVfbGVuLCBkaXJuYW1lLCBkbG5hbWUpOworCisgIC8qIE5vdyB0aGF0IHdlIGhhdmUgY29tYmluZWQgRElSTkFNRSBhbmQgTU9EVUxFTkFNRSwgaWYgdGhlcmUgaXMKKyAgICAgYWxzbyBhIFBSRUZJWCB0byBjb250ZW5kIHdpdGgsIHNpbXBseSByZWN1cnNlIHdpdGggdGhlIGFyZ3VtZW50cworICAgICBzaHVmZmxlZC4gIE90aGVyd2lzZSwgYXR0ZW1wdCB0byBvcGVuIEZJTEVOQU1FIGFzIGEgbW9kdWxlLiAgKi8KKyAgaWYgKHByZWZpeCkKKyAgICB7CisgICAgICBlcnJvciArPSB0cnlhbGxfZGxvcGVuX21vZHVsZSAoaGFuZGxlLCAoY29uc3QgY2hhciAqKSAwLAorCQkJCSAgICAgcHJlZml4LCBmaWxlbmFtZSwgYWR2aXNlKTsKKyAgICB9CisgIGVsc2UgaWYgKHRyeWFsbF9kbG9wZW4gKGhhbmRsZSwgZmlsZW5hbWUsIGFkdmlzZSwgMCkgIT0gMCkKKyAgICB7CisgICAgICArK2Vycm9yOworICAgIH0KKworICBGUkVFIChmaWxlbmFtZSk7CisgIHJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludAorZmluZF9tb2R1bGUgKGx0X2RsaGFuZGxlICpoYW5kbGUsIGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqbGliZGlyLAorCSAgICAgY29uc3QgY2hhciAqZGxuYW1lLCAgY29uc3QgY2hhciAqb2xkX25hbWUsIGludCBpbnN0YWxsZWQsCisJICAgICBsdF9kbGFkdmlzZSBhZHZpc2UpCit7CisgIC8qIFRyeSB0byBvcGVuIHRoZSBvbGQgbGlicmFyeSBmaXJzdDsgaWYgaXQgd2FzIGRscHJlb3BlbmVkLAorICAgICB3ZSB3YW50IHRoZSBwcmVvcGVuZWQgdmVyc2lvbiBvZiBpdCwgZXZlbiBpZiBhIGRsb3BlbmFibGUKKyAgICAgbW9kdWxlIGlzIGF2YWlsYWJsZS4gICovCisgIGlmIChvbGRfbmFtZSAmJiB0cnlhbGxfZGxvcGVuIChoYW5kbGUsIG9sZF9uYW1lLAorCQkJICBhZHZpc2UsIGx0X2RsbG9hZGVyX2ZpbmQgKCJsdF9wcmVvcGVuIikgKSA9PSAwKQorICAgIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAvKiBUcnkgdG8gb3BlbiB0aGUgZHluYW1pYyBsaWJyYXJ5LiAgKi8KKyAgaWYgKGRsbmFtZSkKKyAgICB7CisgICAgICAvKiB0cnkgdG8gb3BlbiB0aGUgaW5zdGFsbGVkIG1vZHVsZSAqLworICAgICAgaWYgKGluc3RhbGxlZCAmJiBsaWJkaXIpCisJeworCSAgaWYgKHRyeWFsbF9kbG9wZW5fbW9kdWxlIChoYW5kbGUsIChjb25zdCBjaGFyICopIDAsCisJCQkJICAgIGxpYmRpciwgZGxuYW1lLCBhZHZpc2UpID09IDApCisJICAgIHJldHVybiAwOworCX0KKworICAgICAgLyogdHJ5IHRvIG9wZW4gdGhlIG5vdC1pbnN0YWxsZWQgbW9kdWxlICovCisgICAgICBpZiAoIWluc3RhbGxlZCkKKwl7CisJICBpZiAodHJ5YWxsX2Rsb3Blbl9tb2R1bGUgKGhhbmRsZSwgZGlyLCBvYmpkaXIsCisJCQkJICAgIGRsbmFtZSwgYWR2aXNlKSA9PSAwKQorCSAgICByZXR1cm4gMDsKKwl9CisKKyAgICAgIC8qIG1heWJlIGl0IHdhcyBtb3ZlZCB0byBhbm90aGVyIGRpcmVjdG9yeSAqLworICAgICAgeworCSAgaWYgKGRpciAmJiAodHJ5YWxsX2Rsb3Blbl9tb2R1bGUgKGhhbmRsZSwgKGNvbnN0IGNoYXIgKikgMCwKKwkJCQkJICAgIGRpciwgZGxuYW1lLCBhZHZpc2UpID09IDApKQorCSAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisKKyAgcmV0dXJuIDE7Cit9CisKKworc3RhdGljIGludAorY2Fub25pY2FsaXplX3BhdGggKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKipwY2Fub25pY2FsKQoreworICBjaGFyICpjYW5vbmljYWwgPSAwOworCisgIGFzc2VydCAocGF0aCAmJiAqcGF0aCk7CisgIGFzc2VydCAocGNhbm9uaWNhbCk7CisKKyAgY2Fub25pY2FsID0gTUFMTE9DIChjaGFyLCAxKyBMVF9TVFJMRU4gKHBhdGgpKTsKKyAgaWYgKCFjYW5vbmljYWwpCisgICAgcmV0dXJuIDE7CisKKyAgeworICAgIHNpemVfdCBkZXN0ID0gMDsKKyAgICBzaXplX3Qgc3JjOworICAgIGZvciAoc3JjID0gMDsgcGF0aFtzcmNdICE9IExUX0VPU19DSEFSOyArK3NyYykKKyAgICAgIHsKKwkvKiBQYXRoIHNlcGFyYXRvcnMgYXJlIG5vdCBjb3BpZWQgdG8gdGhlIGJlZ2lubmluZyBvciBlbmQgb2YKKwkgICB0aGUgZGVzdGluYXRpb24sIG9yIGlmIGFub3RoZXIgc2VwYXJhdG9yIHdvdWxkIGZvbGxvdworCSAgIGltbWVkaWF0ZWx5LiAgKi8KKwlpZiAocGF0aFtzcmNdID09IExUX1BBVEhTRVBfQ0hBUikKKwkgIHsKKwkgICAgaWYgKChkZXN0ID09IDApCisJCXx8IChwYXRoWzErIHNyY10gPT0gTFRfUEFUSFNFUF9DSEFSKQorCQl8fCAocGF0aFsxKyBzcmNdID09IExUX0VPU19DSEFSKSkKKwkgICAgICBjb250aW51ZTsKKwkgIH0KKworCS8qIEFueXRoaW5nIG90aGVyIHRoYW4gYSBkaXJlY3Rvcnkgc2VwYXJhdG9yIGlzIGNvcGllZCB2ZXJiYXRpbS4gICovCisJaWYgKChwYXRoW3NyY10gIT0gJy8nKQorI2lmIGRlZmluZWQoTFRfRElSU0VQX0NIQVIpCisJICAgICYmIChwYXRoW3NyY10gIT0gTFRfRElSU0VQX0NIQVIpCisjZW5kaWYKKwkgICAgKQorCSAgeworCSAgICBjYW5vbmljYWxbZGVzdCsrXSA9IHBhdGhbc3JjXTsKKwkgIH0KKwkvKiBEaXJlY3Rvcnkgc2VwYXJhdG9ycyBhcmUgY29udmVydGVkIGFuZCBjb3BpZWQgb25seSBpZiB0aGV5IGFyZQorCSAgIG5vdCBhdCB0aGUgZW5kIG9mIGEgcGF0aCAtLSBpLmUuIGJlZm9yZSBhIHBhdGggc2VwYXJhdG9yIG9yCisJICAgTlVMTCB0ZXJtaW5hdG9yLiAgKi8KKwllbHNlIGlmICgocGF0aFsxKyBzcmNdICE9IExUX1BBVEhTRVBfQ0hBUikKKwkJICYmIChwYXRoWzErIHNyY10gIT0gTFRfRU9TX0NIQVIpCisjaWYgZGVmaW5lZChMVF9ESVJTRVBfQ0hBUikKKwkJICYmIChwYXRoWzErIHNyY10gIT0gTFRfRElSU0VQX0NIQVIpCisjZW5kaWYKKwkJICYmIChwYXRoWzErIHNyY10gIT0gJy8nKSkKKwkgIHsKKwkgICAgY2Fub25pY2FsW2Rlc3QrK10gPSAnLyc7CisJICB9CisgICAgICB9CisKKyAgICAvKiBBZGQgYW4gZW5kLW9mLXN0cmluZyBtYXJrZXIgYXQgdGhlIGVuZC4gICovCisgICAgY2Fub25pY2FsW2Rlc3RdID0gTFRfRU9TX0NIQVI7CisgIH0KKworICAvKiBBc3NpZ24gbmV3IHZhbHVlLiAgKi8KKyAgKnBjYW5vbmljYWwgPSBjYW5vbmljYWw7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2FyZ3ppemVfcGF0aCAoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqKnBhcmd6LCBzaXplX3QgKnBhcmd6X2xlbikKK3sKKyAgZXJyb3JfdCBlcnJvcjsKKworICBhc3NlcnQgKHBhdGgpOworICBhc3NlcnQgKHBhcmd6KTsKKyAgYXNzZXJ0IChwYXJnel9sZW4pOworCisgIGlmICgoZXJyb3IgPSBhcmd6X2NyZWF0ZV9zZXAgKHBhdGgsIExUX1BBVEhTRVBfQ0hBUiwgcGFyZ3osIHBhcmd6X2xlbikpKQorICAgIHsKKyAgICAgIHN3aXRjaCAoZXJyb3IpCisJeworCWNhc2UgRU5PTUVNOgorCSAgTFRfX1NFVEVSUk9SIChOT19NRU1PUlkpOworCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIExUX19TRVRFUlJPUiAoVU5LTk9XTik7CisJICBicmVhazsKKwl9CisKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICByZXR1cm4gMDsKK30KKworLyogUmVwZWF0ZWRseSBjYWxsIEZVTkMgd2l0aCBlYWNoIExUX1BBVEhTRVBfQ0hBUiBkZWxpbWl0ZWQgZWxlbWVudAorICAgb2YgU0VBUkNIX1BBVEggYW5kIHJlZmVyZW5jZXMgdG8gREFUQTEgYW5kIERBVEEyLCB1bnRpbCBGVU5DIHJldHVybnMKKyAgIG5vbi16ZXJvIG9yIGFsbCBlbGVtZW50cyBhcmUgZXhoYXVzdGVkLiAgSWYgQkFTRV9OQU1FIGlzIG5vbi1OVUxMLAorICAgaXQgaXMgYXBwZW5kZWQgdG8gZWFjaCBTRUFSQ0hfUEFUSCBlbGVtZW50IGJlZm9yZSBGVU5DIGlzIGNhbGxlZC4gICovCitzdGF0aWMgaW50Citmb3JlYWNoX2RpcmlucGF0aCAoY29uc3QgY2hhciAqc2VhcmNoX3BhdGgsIGNvbnN0IGNoYXIgKmJhc2VfbmFtZSwKKwkJICAgZm9yZWFjaF9jYWxsYmFja19mdW5jICpmdW5jLCB2b2lkICpkYXRhMSwgdm9pZCAqZGF0YTIpCit7CisgIGludAkgcmVzdWx0CQk9IDA7CisgIHNpemVfdCBmaWxlbmFtZXNpemUJPSAwOworICBzaXplX3QgbGVuYmFzZQk9IExUX1NUUkxFTiAoYmFzZV9uYW1lKTsKKyAgc2l6ZV90IGFyZ3pfbGVuCT0gMDsKKyAgY2hhciAqYXJnegkJPSAwOworICBjaGFyICpmaWxlbmFtZQk9IDA7CisgIGNoYXIgKmNhbm9uaWNhbAk9IDA7CisKKyAgaWYgKCFzZWFyY2hfcGF0aCB8fCAhKnNlYXJjaF9wYXRoKQorICAgIHsKKyAgICAgIExUX19TRVRFUlJPUiAoRklMRV9OT1RfRk9VTkQpOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICBpZiAoY2Fub25pY2FsaXplX3BhdGggKHNlYXJjaF9wYXRoLCAmY2Fub25pY2FsKSAhPSAwKQorICAgIGdvdG8gY2xlYW51cDsKKworICBpZiAoYXJneml6ZV9wYXRoIChjYW5vbmljYWwsICZhcmd6LCAmYXJnel9sZW4pICE9IDApCisgICAgZ290byBjbGVhbnVwOworCisgIHsKKyAgICBjaGFyICpkaXJfbmFtZSA9IDA7CisgICAgd2hpbGUgKChkaXJfbmFtZSA9IGFyZ3pfbmV4dCAoYXJneiwgYXJnel9sZW4sIGRpcl9uYW1lKSkpCisgICAgICB7CisJc2l6ZV90IGxlbmRpciA9IExUX1NUUkxFTiAoZGlyX25hbWUpOworCisJaWYgKDErIGxlbmRpciArIGxlbmJhc2UgPj0gZmlsZW5hbWVzaXplKQorCXsKKwkgIEZSRUUgKGZpbGVuYW1lKTsKKwkgIGZpbGVuYW1lc2l6ZQk9IDErIGxlbmRpciArIDErIGxlbmJhc2U7IC8qICIvZCIgKyAnLycgKyAiZiIgKyAnXDAnICovCisJICBmaWxlbmFtZQk9IE1BTExPQyAoY2hhciwgZmlsZW5hbWVzaXplKTsKKwkgIGlmICghZmlsZW5hbWUpCisJICAgIGdvdG8gY2xlYW51cDsKKwl9CisKKwlhc3NlcnQgKGZpbGVuYW1lc2l6ZSA+IGxlbmRpcik7CisJc3RyY3B5IChmaWxlbmFtZSwgZGlyX25hbWUpOworCisJaWYgKGJhc2VfbmFtZSAmJiAqYmFzZV9uYW1lKQorCSAgeworCSAgICBpZiAoZmlsZW5hbWVbbGVuZGlyIC0xXSAhPSAnLycpCisJICAgICAgZmlsZW5hbWVbbGVuZGlyKytdID0gJy8nOworCSAgICBzdHJjcHkgKGZpbGVuYW1lICtsZW5kaXIsIGJhc2VfbmFtZSk7CisJICB9CisKKwlpZiAoKHJlc3VsdCA9ICgqZnVuYykgKGZpbGVuYW1lLCBkYXRhMSwgZGF0YTIpKSkKKwkgIHsKKwkgICAgYnJlYWs7CisJICB9CisgICAgICB9CisgIH0KKworIGNsZWFudXA6CisgIEZSRUUgKGFyZ3opOworICBGUkVFIChjYW5vbmljYWwpOworICBGUkVFIChmaWxlbmFtZSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogSWYgRklMRVBBVEggY2FuIGJlIG9wZW5lZCwgc3RvcmUgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSBjb21wb25lbnQKKyAgIGluIERBVEExLCBhbmQgdGhlIG9wZW5lZCBGSUxFKiBzdHJ1Y3R1cmUgYWRkcmVzcyBpbiBEQVRBMi4gIE90aGVyd2lzZQorICAgREFUQTEgaXMgdW5jaGFuZ2VkLCBidXQgREFUQTIgaXMgc2V0IHRvIGEgcG9pbnRlciB0byBOVUxMLiAgKi8KK3N0YXRpYyBpbnQKK2ZpbmRfZmlsZV9jYWxsYmFjayAoY2hhciAqZmlsZW5hbWUsIHZvaWQgKmRhdGExLCB2b2lkICpkYXRhMikKK3sKKyAgY2hhcgkgICAgICoqcGRpcgk9IChjaGFyICoqKSBkYXRhMTsKKyAgRklMRQkgICAgICoqcGZpbGUJPSAoRklMRSAqKikgZGF0YTI7CisgIGludAkgICAgIGlzX2RvbmUJPSAwOworCisgIGFzc2VydCAoZmlsZW5hbWUgJiYgKmZpbGVuYW1lKTsKKyAgYXNzZXJ0IChwZGlyKTsKKyAgYXNzZXJ0IChwZmlsZSk7CisKKyAgaWYgKCgqcGZpbGUgPSBmb3BlbiAoZmlsZW5hbWUsIExUX1JFQURURVhUX01PREUpKSkKKyAgICB7CisgICAgICBjaGFyICpkaXJlbmQgPSBzdHJyY2hyIChmaWxlbmFtZSwgJy8nKTsKKworICAgICAgaWYgKGRpcmVuZCA+IGZpbGVuYW1lKQorCSpkaXJlbmQgICA9IExUX0VPU19DSEFSOworCisgICAgICBGUkVFICgqcGRpcik7CisgICAgICAqcGRpciAgID0gbHRfX3N0cmR1cCAoZmlsZW5hbWUpOworICAgICAgaXNfZG9uZSA9ICgqcGRpciA9PSAwKSA/IC0xIDogMTsKKyAgICB9CisKKyAgcmV0dXJuIGlzX2RvbmU7Cit9CisKK3N0YXRpYyBGSUxFICoKK2ZpbmRfZmlsZSAoY29uc3QgY2hhciAqc2VhcmNoX3BhdGgsIGNvbnN0IGNoYXIgKmJhc2VfbmFtZSwgY2hhciAqKnBkaXIpCit7CisgIEZJTEUgKmZpbGUgPSAwOworCisgIGZvcmVhY2hfZGlyaW5wYXRoIChzZWFyY2hfcGF0aCwgYmFzZV9uYW1lLCBmaW5kX2ZpbGVfY2FsbGJhY2ssIHBkaXIsICZmaWxlKTsKKworICByZXR1cm4gZmlsZTsKK30KKworc3RhdGljIGludAorZmluZF9oYW5kbGVfY2FsbGJhY2sgKGNoYXIgKmZpbGVuYW1lLCB2b2lkICpkYXRhLCB2b2lkICpkYXRhMikKK3sKKyAgbHRfZGxoYW5kbGUgICpwaGFuZGxlCQk9IChsdF9kbGhhbmRsZSAqKSBkYXRhOworICBpbnQJCW5vdGZvdW5kCT0gYWNjZXNzIChmaWxlbmFtZSwgUl9PSyk7CisgIGx0X2RsYWR2aXNlICAgYWR2aXNlCQk9IChsdF9kbGFkdmlzZSkgZGF0YTI7CisKKyAgLyogQmFpbCBvdXQgaWYgZmlsZSBjYW5ub3QgYmUgcmVhZC4uLiAgKi8KKyAgaWYgKG5vdGZvdW5kKQorICAgIHJldHVybiAwOworCisgIC8qIFRyeSB0byBkbG9wZW4gdGhlIGZpbGUsIGJ1dCBkbyBub3QgY29udGludWUgc2VhcmNoaW5nIGluIGFueQorICAgICBjYXNlLiAgKi8KKyAgaWYgKHRyeWFsbF9kbG9wZW4gKHBoYW5kbGUsIGZpbGVuYW1lLCBhZHZpc2UsIDApICE9IDApCisgICAgKnBoYW5kbGUgPSAwOworCisgIHJldHVybiAxOworfQorCisvKiBJZiBIQU5ETEUgd2FzIGZvdW5kIHJldHVybiBpdCwgb3RoZXJ3aXNlIHJldHVybiAwLiAgSWYgSEFORExFIHdhcworICAgZm91bmQgYnV0IGNvdWxkIG5vdCBiZSBvcGVuZWQsICpIQU5ETEUgd2lsbCBiZSBzZXQgdG8gMC4gICovCitzdGF0aWMgbHRfZGxoYW5kbGUgKgorZmluZF9oYW5kbGUgKGNvbnN0IGNoYXIgKnNlYXJjaF9wYXRoLCBjb25zdCBjaGFyICpiYXNlX25hbWUsCisJICAgICBsdF9kbGhhbmRsZSAqcGhhbmRsZSwgbHRfZGxhZHZpc2UgYWR2aXNlKQoreworICBpZiAoIXNlYXJjaF9wYXRoKQorICAgIHJldHVybiAwOworCisgIGlmICghZm9yZWFjaF9kaXJpbnBhdGggKHNlYXJjaF9wYXRoLCBiYXNlX25hbWUsIGZpbmRfaGFuZGxlX2NhbGxiYWNrLAorCQkJICBwaGFuZGxlLCBhZHZpc2UpKQorICAgIHJldHVybiAwOworCisgIHJldHVybiBwaGFuZGxlOworfQorCisjaWYgIWRlZmluZWQoTFRETF9ETE9QRU5fREVQTElCUykKK3N0YXRpYyBpbnQKK2xvYWRfZGVwbGlicyAobHRfZGxoYW5kbGUgaGFuZGxlLCBjaGFyICogTFRfX1VOVVNFRCBkZXBsaWJzKQoreworICBoYW5kbGUtPmRlcGNvdW50ID0gMDsKKyAgcmV0dXJuIDA7Cit9CisKKyNlbHNlIC8qIGRlZmluZWQoTFRETF9ETE9QRU5fREVQTElCUykgKi8KK3N0YXRpYyBpbnQKK2xvYWRfZGVwbGlicyAobHRfZGxoYW5kbGUgaGFuZGxlLCBjaGFyICpkZXBsaWJzKQoreworICBjaGFyCSpwLCAqc2F2ZV9zZWFyY2hfcGF0aCA9IDA7CisgIGludCAgIGRlcGNvdW50ID0gMDsKKyAgaW50CWk7CisgIGNoYXIJKipuYW1lcyA9IDA7CisgIGludAllcnJvcnMgPSAwOworCisgIGhhbmRsZS0+ZGVwY291bnQgPSAwOworCisgIGlmICghZGVwbGlicykKKyAgICB7CisgICAgICByZXR1cm4gZXJyb3JzOworICAgIH0KKyAgKytlcnJvcnM7CisKKyAgaWYgKHVzZXJfc2VhcmNoX3BhdGgpCisgICAgeworICAgICAgc2F2ZV9zZWFyY2hfcGF0aCA9IGx0X19zdHJkdXAgKHVzZXJfc2VhcmNoX3BhdGgpOworICAgICAgaWYgKCFzYXZlX3NlYXJjaF9wYXRoKQorCWdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgLyogZXh0cmFjdCBzZWFyY2ggcGF0aHMgYW5kIGNvdW50IGRlcGxpYnMgKi8KKyAgcCA9IGRlcGxpYnM7CisgIHdoaWxlICgqcCkKKyAgICB7CisgICAgICBpZiAoIWlzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSAqcCkpCisJeworCSAgY2hhciAqZW5kID0gcCsxOworCSAgd2hpbGUgKCplbmQgJiYgIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpICplbmQpKQorCSAgICB7CisJICAgICAgKytlbmQ7CisJICAgIH0KKworCSAgaWYgKHN0cm5jbXAocCwgIi1MIiwgMikgPT0gMCB8fCBzdHJuY21wKHAsICItUiIsIDIpID09IDApCisJICAgIHsKKwkgICAgICBjaGFyIHNhdmUgPSAqZW5kOworCSAgICAgICplbmQgPSAwOyAvKiBzZXQgYSB0ZW1wb3Jhcnkgc3RyaW5nIHRlcm1pbmF0b3IgKi8KKwkgICAgICBpZiAobHRfZGxhZGRzZWFyY2hkaXIocCsyKSkKKwkJeworCQkgIGdvdG8gY2xlYW51cDsKKwkJfQorCSAgICAgICplbmQgPSBzYXZlOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICArK2RlcGNvdW50OworCSAgICB9CisKKwkgIHAgPSBlbmQ7CisJfQorICAgICAgZWxzZQorCXsKKwkgICsrcDsKKwl9CisgICAgfQorCisKKyAgaWYgKCFkZXBjb3VudCkKKyAgICB7CisgICAgICBlcnJvcnMgPSAwOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICBuYW1lcyA9IE1BTExPQyAoY2hhciAqLCBkZXBjb3VudCk7CisgIGlmICghbmFtZXMpCisgICAgZ290byBjbGVhbnVwOworCisgIC8qIG5vdyBvbmx5IGV4dHJhY3QgdGhlIGFjdHVhbCBkZXBsaWJzICovCisgIGRlcGNvdW50ID0gMDsKKyAgcCA9IGRlcGxpYnM7CisgIHdoaWxlICgqcCkKKyAgICB7CisgICAgICBpZiAoaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIpICpwKSkKKwl7CisJICArK3A7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGNoYXIgKmVuZCA9IHArMTsKKwkgIHdoaWxlICgqZW5kICYmICFpc3NwYWNlICgodW5zaWduZWQgY2hhcikgKmVuZCkpCisJICAgIHsKKwkgICAgICArK2VuZDsKKwkgICAgfQorCisJICBpZiAoc3RybmNtcChwLCAiLUwiLCAyKSAhPSAwICYmIHN0cm5jbXAocCwgIi1SIiwgMikgIT0gMCkKKwkgICAgeworCSAgICAgIGNoYXIgKm5hbWU7CisJICAgICAgY2hhciBzYXZlID0gKmVuZDsKKwkgICAgICAqZW5kID0gMDsgLyogc2V0IGEgdGVtcG9yYXJ5IHN0cmluZyB0ZXJtaW5hdG9yICovCisJICAgICAgaWYgKHN0cm5jbXAocCwgIi1sIiwgMikgPT0gMCkKKwkJeworCQkgIHNpemVfdCBuYW1lX2xlbiA9IDMrIC8qICJsaWIiICovIExUX1NUUkxFTiAocCArIDIpOworCQkgIG5hbWUgPSBNQUxMT0MgKGNoYXIsIDErIG5hbWVfbGVuKTsKKwkJICBpZiAobmFtZSkKKwkJICAgIHNwcmludGYgKG5hbWUsICJsaWIlcyIsIHArMik7CisJCX0KKwkgICAgICBlbHNlCisJCW5hbWUgPSBsdF9fc3RyZHVwKHApOworCisJICAgICAgaWYgKCFuYW1lKQorCQlnb3RvIGNsZWFudXBfbmFtZXM7CisKKwkgICAgICBuYW1lc1tkZXBjb3VudCsrXSA9IG5hbWU7CisJICAgICAgKmVuZCA9IHNhdmU7CisJICAgIH0KKwkgIHAgPSBlbmQ7CisJfQorICAgIH0KKworICAvKiBsb2FkIHRoZSBkZXBsaWJzIChpbiByZXZlcnNlIG9yZGVyKQorICAgICBBdCB0aGlzIHN0YWdlLCBkb24ndCB3b3JyeSBpZiB0aGUgZGVwbGlicyBkbyBub3QgbG9hZCBjb3JyZWN0bHksCisgICAgIHRoZXkgbWF5IGFscmVhZHkgYmUgc3RhdGljYWxseSBsaW5rZWQgaW50byB0aGUgbG9hZGluZyBhcHBsaWNhdGlvbgorICAgICBmb3IgaW5zdGFuY2UuICBUaGVyZSB3aWxsIGJlIGEgbW9yZSBlbmxpZ2h0ZW5pbmcgZXJyb3IgbWVzc2FnZQorICAgICBsYXRlciBvbiBpZiB0aGUgbG9hZGVkIG1vZHVsZSBjYW5ub3QgcmVzb2x2ZSBhbGwgb2YgaXRzIHN5bWJvbHMuICAqLworICBpZiAoZGVwY291bnQpCisgICAgeworICAgICAgbHRfZGxoYW5kbGUgY3VyID0gaGFuZGxlOworICAgICAgaW50CWogPSAwOworCisgICAgICBjdXItPmRlcGxpYnMgPSBNQUxMT0MgKGx0X2RsaGFuZGxlLCBkZXBjb3VudCk7CisgICAgICBpZiAoIWN1ci0+ZGVwbGlicykKKwlnb3RvIGNsZWFudXBfbmFtZXM7CisKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBkZXBjb3VudDsgKytpKQorCXsKKwkgIGN1ci0+ZGVwbGlic1tqXSA9IGx0X2Rsb3BlbmV4dChuYW1lc1tkZXBjb3VudC0xLWldKTsKKwkgIGlmIChjdXItPmRlcGxpYnNbal0pCisJICAgIHsKKwkgICAgICArK2o7CisJICAgIH0KKwl9CisKKyAgICAgIGN1ci0+ZGVwY291bnQJPSBqOwkvKiBOdW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IGxvYWRlZCBkZXBsaWJzICovCisgICAgICBlcnJvcnMJCT0gMDsKKyAgICB9CisKKyBjbGVhbnVwX25hbWVzOgorICBmb3IgKGkgPSAwOyBpIDwgZGVwY291bnQ7ICsraSkKKyAgICB7CisgICAgICBGUkVFIChuYW1lc1tpXSk7CisgICAgfQorCisgY2xlYW51cDoKKyAgRlJFRSAobmFtZXMpOworICAvKiByZXN0b3JlIHRoZSBvbGQgc2VhcmNoIHBhdGggKi8KKyAgaWYgKHNhdmVfc2VhcmNoX3BhdGgpIHsKKyAgICBNRU1SRUFTU0lHTiAodXNlcl9zZWFyY2hfcGF0aCwgc2F2ZV9zZWFyY2hfcGF0aCk7CisgIH0KKworICByZXR1cm4gZXJyb3JzOworfQorI2VuZGlmIC8qIGRlZmluZWQoTFRETF9ETE9QRU5fREVQTElCUykgKi8KKworc3RhdGljIGludAordW5sb2FkX2RlcGxpYnMgKGx0X2RsaGFuZGxlIGhhbmRsZSkKK3sKKyAgaW50IGk7CisgIGludCBlcnJvcnMgPSAwOworICBsdF9kbGhhbmRsZSBjdXIgPSBoYW5kbGU7CisKKyAgaWYgKGN1ci0+ZGVwY291bnQpCisgICAgeworICAgICAgZm9yIChpID0gMDsgaSA8IGN1ci0+ZGVwY291bnQ7ICsraSkKKwl7CisJICBpZiAoIUxUX0RMSVNfUkVTSURFTlQgKGN1ci0+ZGVwbGlic1tpXSkpCisJICAgIHsKKwkgICAgICBlcnJvcnMgKz0gbHRfZGxjbG9zZSAoY3VyLT5kZXBsaWJzW2ldKTsKKwkgICAgfQorCX0KKyAgICAgIEZSRUUgKGN1ci0+ZGVwbGlicyk7CisgICAgfQorCisgIHJldHVybiBlcnJvcnM7Cit9CisKK3N0YXRpYyBpbnQKK3RyaW0gKGNoYXIgKipkZXN0LCBjb25zdCBjaGFyICpzdHIpCit7CisgIC8qIHJlbW92ZSB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgIiciIGZyb20gc3RyCisgICAgIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIGRlc3QgKi8KKyAgY29uc3QgY2hhciAqZW5kICAgPSBzdHJyY2hyIChzdHIsICdcJycpOworICBzaXplX3QgbGVuCSAgICA9IExUX1NUUkxFTiAoc3RyKTsKKyAgY2hhciAqdG1wOworCisgIEZSRUUgKCpkZXN0KTsKKworICBpZiAoIWVuZCB8fCBlbmQgPT0gc3RyKQorICAgIHJldHVybiAxOworCisgIGlmIChsZW4gPiAzICYmIHN0clswXSA9PSAnXCcnKQorICAgIHsKKyAgICAgIHRtcCA9IE1BTExPQyAoY2hhciwgZW5kIC0gc3RyKTsKKyAgICAgIGlmICghdG1wKQorCXJldHVybiAxOworCisgICAgICBtZW1jcHkodG1wLCAmc3RyWzFdLCAoZW5kIC0gc3RyKSAtIDEpOworICAgICAgdG1wWyhlbmQgLSBzdHIpIC0gMV0gPSBMVF9FT1NfQ0hBUjsKKyAgICAgICpkZXN0ID0gdG1wOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgICpkZXN0ID0gMDsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIFJlYWQgdGhlIC5sYSBmaWxlIEZJTEUuICovCitzdGF0aWMgaW50CitwYXJzZV9kb3RsYV9maWxlKEZJTEUgKmZpbGUsIGNoYXIgKipkbG5hbWUsIGNoYXIgKipsaWJkaXIsIGNoYXIgKipkZXBsaWJzLAorICAgIGNoYXIgKipvbGRfbmFtZSwgaW50ICppbnN0YWxsZWQpCit7CisgIGludAkJZXJyb3JzID0gMDsKKyAgc2l6ZV90CWxpbmVfbGVuID0gTFRfRklMRU5BTUVfTUFYOworICBjaGFyICoJbGluZSA9IE1BTExPQyAoY2hhciwgbGluZV9sZW4pOworCisgIGlmICghbGluZSkKKyAgICB7CisgICAgICBMVF9fU0VURVJST1IgKEZJTEVfTk9UX0ZPVU5EKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICB3aGlsZSAoIWZlb2YgKGZpbGUpKQorICAgIHsKKyAgICAgIGxpbmVbbGluZV9sZW4tMl0gPSAnXDAnOworICAgICAgaWYgKCFmZ2V0cyAobGluZSwgKGludCkgbGluZV9sZW4sIGZpbGUpKQorCXsKKwkgIGJyZWFrOworCX0KKworICAgICAgLyogSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIG9jY2FzaW9uYWxseSBuZWVkIHRvIHJlYWQgYSBsaW5lCisJIHRoYXQgaXMgbG9uZ2VyIHRoYW4gdGhlIGluaXRpYWwgYnVmZmVyIHNpemUuCisJIEJlaGF2ZSBldmVuIGlmIHRoZSBmaWxlIGNvbnRhaW5zIE5VTCBieXRlcyBkdWUgdG8gY29ycnVwdGlvbi4gKi8KKyAgICAgIHdoaWxlIChsaW5lW2xpbmVfbGVuLTJdICE9ICdcMCcgJiYgbGluZVtsaW5lX2xlbi0yXSAhPSAnXG4nICYmICFmZW9mIChmaWxlKSkKKwl7CisJICBsaW5lID0gUkVBTExPQyAoY2hhciwgbGluZSwgbGluZV9sZW4gKjIpOworCSAgaWYgKCFsaW5lKQorCSAgICB7CisJICAgICAgKytlcnJvcnM7CisJICAgICAgZ290byBjbGVhbnVwOworCSAgICB9CisJICBsaW5lW2xpbmVfbGVuICogMiAtIDJdID0gJ1wwJzsKKwkgIGlmICghZmdldHMgKCZsaW5lW2xpbmVfbGVuIC0xXSwgKGludCkgbGluZV9sZW4gKzEsIGZpbGUpKQorCSAgICB7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgIGxpbmVfbGVuICo9IDI7CisJfQorCisgICAgICBpZiAobGluZVswXSA9PSAnXG4nIHx8IGxpbmVbMF0gPT0gJyMnKQorCXsKKwkgIGNvbnRpbnVlOworCX0KKworI3VuZGVmICBTVFJfRExOQU1FCisjZGVmaW5lIFNUUl9ETE5BTUUJImRsbmFtZT0iCisgICAgICBpZiAoc3RybmNtcCAobGluZSwgU1RSX0RMTkFNRSwgc2l6ZW9mIChTVFJfRExOQU1FKSAtIDEpID09IDApCisJeworCSAgZXJyb3JzICs9IHRyaW0gKGRsbmFtZSwgJmxpbmVbc2l6ZW9mIChTVFJfRExOQU1FKSAtIDFdKTsKKwl9CisKKyN1bmRlZiAgU1RSX09MRF9MSUJSQVJZCisjZGVmaW5lIFNUUl9PTERfTElCUkFSWQkib2xkX2xpYnJhcnk9IgorICAgICAgZWxzZSBpZiAoc3RybmNtcCAobGluZSwgU1RSX09MRF9MSUJSQVJZLAorCSAgICBzaXplb2YgKFNUUl9PTERfTElCUkFSWSkgLSAxKSA9PSAwKQorCXsKKwkgIGVycm9ycyArPSB0cmltIChvbGRfbmFtZSwgJmxpbmVbc2l6ZW9mIChTVFJfT0xEX0xJQlJBUlkpIC0gMV0pOworCX0KKworICAgICAgLyogV2luZG93cyBuYXRpdmUgdG9vbHMgZG8gbm90IHVuZGVyc3RhbmQgdGhlIFBPU0lYIHBhdGhzIHdlIHN0b3JlCisJIGluIGxpYmRpci4gKi8KKyNpZm5kZWYgX19XSU5ET1dTX18KKyN1bmRlZiAgU1RSX0xJQkRJUgorI2RlZmluZSBTVFJfTElCRElSCSJsaWJkaXI9IgorICAgICAgZWxzZSBpZiAoc3RybmNtcCAobGluZSwgU1RSX0xJQkRJUiwgc2l6ZW9mIChTVFJfTElCRElSKSAtIDEpID09IDApCisJeworCSAgZXJyb3JzICs9IHRyaW0gKGxpYmRpciwgJmxpbmVbc2l6ZW9mKFNUUl9MSUJESVIpIC0gMV0pOworCX0KKyNlbmRpZgorCisjdW5kZWYgIFNUUl9ETF9ERVBMSUJTCisjZGVmaW5lIFNUUl9ETF9ERVBMSUJTCSJkZXBlbmRlbmN5X2xpYnM9IgorICAgICAgZWxzZSBpZiAoc3RybmNtcCAobGluZSwgU1RSX0RMX0RFUExJQlMsCisJICAgIHNpemVvZiAoU1RSX0RMX0RFUExJQlMpIC0gMSkgPT0gMCkKKwl7CisJICBlcnJvcnMgKz0gdHJpbSAoZGVwbGlicywgJmxpbmVbc2l6ZW9mIChTVFJfRExfREVQTElCUykgLSAxXSk7CisJfQorICAgICAgZWxzZSBpZiAoc3RyZXEgKGxpbmUsICJpbnN0YWxsZWQ9eWVzXG4iKSkKKwl7CisJICAqaW5zdGFsbGVkID0gMTsKKwl9CisgICAgICBlbHNlIGlmIChzdHJlcSAobGluZSwgImluc3RhbGxlZD1ub1xuIikpCisJeworCSAgKmluc3RhbGxlZCA9IDA7CisJfQorCisjdW5kZWYgIFNUUl9MSUJSQVJZX05BTUVTCisjZGVmaW5lIFNUUl9MSUJSQVJZX05BTUVTICJsaWJyYXJ5X25hbWVzPSIKKyAgICAgIGVsc2UgaWYgKCEqZGxuYW1lICYmIHN0cm5jbXAgKGxpbmUsIFNUUl9MSUJSQVJZX05BTUVTLAorCSAgICBzaXplb2YgKFNUUl9MSUJSQVJZX05BTUVTKSAtIDEpID09IDApCisJeworCSAgY2hhciAqbGFzdF9saWJuYW1lOworCSAgZXJyb3JzICs9IHRyaW0gKGRsbmFtZSwgJmxpbmVbc2l6ZW9mIChTVFJfTElCUkFSWV9OQU1FUykgLSAxXSk7CisJICBpZiAoIWVycm9ycworCSAgICAgICYmICpkbG5hbWUKKwkgICAgICAmJiAobGFzdF9saWJuYW1lID0gc3RycmNociAoKmRsbmFtZSwgJyAnKSkgIT0gMCkKKwkgICAgeworCSAgICAgIGxhc3RfbGlibmFtZSA9IGx0X19zdHJkdXAgKGxhc3RfbGlibmFtZSArIDEpOworCSAgICAgIGlmICghbGFzdF9saWJuYW1lKQorCQl7CisJCSAgKytlcnJvcnM7CisJCSAgZ290byBjbGVhbnVwOworCQl9CisJICAgICAgTUVNUkVBU1NJR04gKCpkbG5hbWUsIGxhc3RfbGlibmFtZSk7CisJICAgIH0KKwl9CisKKyAgICAgIGlmIChlcnJvcnMpCisJYnJlYWs7CisgICAgfQorY2xlYW51cDoKKyAgRlJFRSAobGluZSk7CisgIHJldHVybiBlcnJvcnM7Cit9CisKKworLyogVHJ5IHRvIG9wZW4gRklMRU5BTUUgYXMgYSBtb2R1bGUuICovCitzdGF0aWMgaW50Cit0cnlfZGxvcGVuIChsdF9kbGhhbmRsZSAqcGhhbmRsZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmV4dCwKKwkgICAgbHRfZGxhZHZpc2UgYWR2aXNlKQoreworICBjb25zdCBjaGFyICoJc2F2ZWRfZXJyb3IJPSAwOworICBjaGFyICoJYXJjaGl2ZV9uYW1lCT0gMDsKKyAgY2hhciAqCWNhbm9uaWNhbAk9IDA7CisgIGNoYXIgKgliYXNlX25hbWUJPSAwOworICBjaGFyICoJZGlyCQk9IDA7CisgIGNoYXIgKgluYW1lCQk9IDA7CisgIGNoYXIgKiAgICAgICAgYXR0ZW1wdAkJPSAwOworICBpbnQJCWVycm9ycwkJPSAwOworICBsdF9kbGhhbmRsZQluZXdoYW5kbGU7CisKKyAgYXNzZXJ0IChwaGFuZGxlKTsKKyAgYXNzZXJ0ICgqcGhhbmRsZSA9PSAwKTsKKworI2lmZGVmIExUX0RFQlVHX0xPQURFUlMKKyAgZnByaW50ZiAoc3RkZXJyLCAidHJ5X2Rsb3BlbiAoJXMsICVzKVxuIiwKKwkgICBmaWxlbmFtZSA/IGZpbGVuYW1lIDogIihudWxsKSIsCisJICAgZXh0ID8gZXh0IDogIihudWxsKSIpOworI2VuZGlmCisKKyAgTFRfX0dFVEVSUk9SIChzYXZlZF9lcnJvcik7CisKKyAgLyogZGxvcGVuIHNlbGY/ICovCisgIGlmICghZmlsZW5hbWUpCisgICAgeworICAgICAgKnBoYW5kbGUgPSAobHRfZGxoYW5kbGUpIGx0X196YWxsb2MgKHNpemVvZiAoc3RydWN0IGx0X19oYW5kbGUpKTsKKyAgICAgIGlmICgqcGhhbmRsZSA9PSAwKQorCXJldHVybiAxOworCisgICAgICBuZXdoYW5kbGUJPSAqcGhhbmRsZTsKKworICAgICAgLyogbHRfZGxjbG9zZSgpaW5nIHlvdXJzZWxmIGlzIHZlcnkgYmFkISAgRGlzYWxsb3cgaXQuICAqLworICAgICAgbmV3aGFuZGxlLT5pbmZvLmlzX3Jlc2lkZW50ID0gMTsKKworICAgICAgaWYgKHRyeWFsbF9kbG9wZW4gKCZuZXdoYW5kbGUsIDAsIGFkdmlzZSwgMCkgIT0gMCkKKwl7CisJICBGUkVFICgqcGhhbmRsZSk7CisJICByZXR1cm4gMTsKKwl9CisKKyAgICAgIGdvdG8gcmVnaXN0ZXJfaGFuZGxlOworICAgIH0KKworICBhc3NlcnQgKGZpbGVuYW1lICYmICpmaWxlbmFtZSk7CisKKyAgaWYgKGV4dCkKKyAgICB7CisgICAgICBhdHRlbXB0ID0gTUFMTE9DIChjaGFyLCBMVF9TVFJMRU4gKGZpbGVuYW1lKSArIExUX1NUUkxFTiAoZXh0KSArIDEpOworICAgICAgaWYgKCFhdHRlbXB0KQorCXJldHVybiAxOworCisgICAgICBzcHJpbnRmKGF0dGVtcHQsICIlcyVzIiwgZmlsZW5hbWUsIGV4dCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgYXR0ZW1wdCA9IGx0X19zdHJkdXAgKGZpbGVuYW1lKTsKKyAgICAgIGlmICghYXR0ZW1wdCkKKwlyZXR1cm4gMTsKKyAgICB9CisKKyAgLyogRG9pbmcgdGhpcyBpbW1lZGlhdGVseSBhbGxvd3MgaW50ZXJuYWwgZnVuY3Rpb25zIHRvIHNhZmVseQorICAgICBhc3N1bWUgb25seSBjYW5vbmljYWxpemVkIHBhdGhzIGFyZSBwYXNzZWQuICAqLworICBpZiAoY2Fub25pY2FsaXplX3BhdGggKGF0dGVtcHQsICZjYW5vbmljYWwpICE9IDApCisgICAgeworICAgICAgKytlcnJvcnM7CisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgIC8qIElmIHRoZSBjYW5vbmljYWwgbW9kdWxlIG5hbWUgaXMgYSBwYXRoIChyZWxhdGl2ZSBvciBhYnNvbHV0ZSkKKyAgICAgdGhlbiBzcGxpdCBpdCBpbnRvIGEgZGlyZWN0b3J5IHBhcnQgYW5kIGEgbmFtZSBwYXJ0LiAgKi8KKyAgYmFzZV9uYW1lID0gc3RycmNociAoY2Fub25pY2FsLCAnLycpOworICBpZiAoYmFzZV9uYW1lKQorICAgIHsKKyAgICAgIHNpemVfdCBkaXJsZW4gPSAoMSsgYmFzZV9uYW1lKSAtIGNhbm9uaWNhbDsKKworICAgICAgZGlyID0gTUFMTE9DIChjaGFyLCAxKyBkaXJsZW4pOworICAgICAgaWYgKCFkaXIpCisJeworCSAgKytlcnJvcnM7CisJICBnb3RvIGNsZWFudXA7CisJfQorCisgICAgICBzdHJuY3B5IChkaXIsIGNhbm9uaWNhbCwgZGlybGVuKTsKKyAgICAgIGRpcltkaXJsZW5dID0gTFRfRU9TX0NIQVI7CisKKyAgICAgICsrYmFzZV9uYW1lOworICAgIH0KKyAgZWxzZQorICAgIE1FTVJFQVNTSUdOIChiYXNlX25hbWUsIGNhbm9uaWNhbCk7CisKKyAgYXNzZXJ0IChiYXNlX25hbWUgJiYgKmJhc2VfbmFtZSk7CisKKyAgZXh0ID0gc3RycmNociAoYmFzZV9uYW1lLCAnLicpOworICBpZiAoIWV4dCkKKyAgICB7CisgICAgICBleHQgPSBiYXNlX25hbWUgKyBMVF9TVFJMRU4gKGJhc2VfbmFtZSk7CisgICAgfQorCisgIC8qIGV4dHJhY3QgdGhlIG1vZHVsZSBuYW1lIGZyb20gdGhlIGZpbGUgbmFtZSAqLworICBuYW1lID0gTUFMTE9DIChjaGFyLCBleHQgLSBiYXNlX25hbWUgKyAxKTsKKyAgaWYgKCFuYW1lKQorICAgIHsKKyAgICAgICsrZXJyb3JzOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAvKiBjYW5vbmljYWxpemUgdGhlIG1vZHVsZSBuYW1lICovCisgIHsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZXh0IC0gYmFzZV9uYW1lOyArK2kpCisgICAgICB7CisJaWYgKGlzYWxudW0gKCh1bnNpZ25lZCBjaGFyKShiYXNlX25hbWVbaV0pKSkKKwkgIHsKKwkgICAgbmFtZVtpXSA9IGJhc2VfbmFtZVtpXTsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIG5hbWVbaV0gPSAnXyc7CisJICB9CisgICAgICB9CisgICAgbmFtZVtleHQgLSBiYXNlX25hbWVdID0gTFRfRU9TX0NIQVI7CisgIH0KKworICAvKiBCZWZvcmUgdHJhd2xpbmcgdGhyb3VnaCB0aGUgZmlsZXN5c3RlbSBpbiBzZWFyY2ggb2YgYSBtb2R1bGUsCisgICAgIGNoZWNrIHdoZXRoZXIgd2UgYXJlIG9wZW5pbmcgYSBwcmVsb2FkZWQgbW9kdWxlLiAgKi8KKyAgaWYgKCFkaXIpCisgICAgeworICAgICAgY29uc3QgbHRfZGx2dGFibGUgKnZ0YWJsZQk9IGx0X2RsbG9hZGVyX2ZpbmQgKCJsdF9wcmVvcGVuIik7CisKKyAgICAgIGlmICh2dGFibGUpCisJeworCSAgLyogbmFtZSArICIuIiArIGxpYmV4dCArIE5VTEwgKi8KKwkgIGFyY2hpdmVfbmFtZSA9IE1BTExPQyAoY2hhciwgTFRfU1RSTEVOIChuYW1lKSArIHN0cmxlbiAobGliZXh0KSArIDIpOworCSAgKnBoYW5kbGUgPSAobHRfZGxoYW5kbGUpIGx0X196YWxsb2MgKHNpemVvZiAoc3RydWN0IGx0X19oYW5kbGUpKTsKKworCSAgaWYgKCgqcGhhbmRsZSA9PSBOVUxMKSB8fCAoYXJjaGl2ZV9uYW1lID09IE5VTEwpKQorCSAgICB7CisJICAgICAgKytlcnJvcnM7CisJICAgICAgZ290byBjbGVhbnVwOworCSAgICB9CisJICBuZXdoYW5kbGUgPSAqcGhhbmRsZTsKKworCSAgLyogUHJlbG9hZGVkIG1vZHVsZXMgYXJlIGFsd2F5cyBuYW1lZCBhY2NvcmRpbmcgdG8gdGhlaXIgb2xkCisJICAgICBhcmNoaXZlIG5hbWUuICAqLworCSAgc3ByaW50ZiAoYXJjaGl2ZV9uYW1lLCAiJXMuJXMiLCBuYW1lLCBsaWJleHQpOworCisJICBpZiAodHJ5YWxsX2Rsb3BlbiAoJm5ld2hhbmRsZSwgYXJjaGl2ZV9uYW1lLCBhZHZpc2UsIHZ0YWJsZSkgPT0gMCkKKwkgICAgeworCSAgICAgIGdvdG8gcmVnaXN0ZXJfaGFuZGxlOworCSAgICB9CisKKwkgIC8qIElmIHdlJ3JlIHN0aWxsIGhlcmUsIHRoZXJlIHdhcyBubyBtYXRjaGluZyBwcmVsb2FkZWQgbW9kdWxlLAorCSAgICAgc28gcHV0IHRoaW5ncyBiYWNrIGFzIHdlIGZvdW5kIHRoZW0sIGFuZCBjb250aW51ZSBzZWFyY2hpbmcuICAqLworCSAgRlJFRSAoKnBoYW5kbGUpOworCSAgbmV3aGFuZGxlID0gTlVMTDsKKwl9CisgICAgfQorCisgIC8qIElmIHdlIGFyZSBhbGxvd2luZyBvbmx5IHByZWxvYWRlZCBtb2R1bGVzLCBhbmQgd2UgZGlkbid0IGZpbmQKKyAgICAgYW55dGhpbmcgeWV0LCBnaXZlIHVwIG9uIHRoZSBzZWFyY2ggaGVyZS4gICovCisgIGlmIChhZHZpc2UgJiYgYWR2aXNlLT50cnlfcHJlbG9hZF9vbmx5KQorICAgIHsKKyAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgLyogQ2hlY2sgd2hldGhlciB3ZSBhcmUgb3BlbmluZyBhIGxpYnRvb2wgbW9kdWxlICgubGEgZXh0ZW5zaW9uKS4gICovCisgIGlmIChleHQgJiYgc3RyZXEgKGV4dCwgYXJjaGl2ZV9leHQpKQorICAgIHsKKyAgICAgIC8qIHRoaXMgc2VlbXMgdG8gYmUgYSBsaWJ0b29sIG1vZHVsZSAqLworICAgICAgRklMRSAqCWZpbGUJID0gMDsKKyAgICAgIGNoYXIgKglkbG5hbWUJID0gMDsKKyAgICAgIGNoYXIgKglvbGRfbmFtZSA9IDA7CisgICAgICBjaGFyICoJbGliZGlyCSA9IDA7CisgICAgICBjaGFyICoJZGVwbGlicwkgPSAwOworCisgICAgICAvKiBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBpbnN0YWxsZWQgZmxhZywgaXQgaXMgcHJvYmFibHkgYW4KKwkgaW5zdGFsbGVkIGxpYnRvb2wgYXJjaGl2ZSwgcHJvZHVjZWQgd2l0aCBhbiBvbGQgdmVyc2lvbgorCSBvZiBsaWJ0b29sICovCisgICAgICBpbnQJaW5zdGFsbGVkID0gMTsKKworICAgICAgLyogTm93IHRyeSB0byBvcGVuIHRoZSAubGEgZmlsZS4gIElmIHRoZXJlIGlzIG5vIGRpcmVjdG9yeSBuYW1lCisJIGNvbXBvbmVudCwgdHJ5IHRvIGZpbmQgaXQgZmlyc3QgaW4gdXNlcl9zZWFyY2hfcGF0aCBhbmQgdGhlbiBvdGhlcgorCSBwcmVzY3JpYmVkIHBhdGhzLiAgT3RoZXJ3aXNlIChvciBpbiBhbnkgY2FzZSBpZiB0aGUgbW9kdWxlIHdhcyBub3QKKwkgeWV0IGZvdW5kKSB0cnkgb3BlbmluZyBqdXN0IHRoZSBtb2R1bGUgbmFtZSBhcyBwYXNzZWQuICAqLworICAgICAgaWYgKCFkaXIpCisJeworCSAgY29uc3QgY2hhciAqc2VhcmNoX3BhdGggPSB1c2VyX3NlYXJjaF9wYXRoOworCisJICBpZiAoc2VhcmNoX3BhdGgpCisJICAgIGZpbGUgPSBmaW5kX2ZpbGUgKHVzZXJfc2VhcmNoX3BhdGgsIGJhc2VfbmFtZSwgJmRpcik7CisKKwkgIGlmICghZmlsZSkKKwkgICAgeworCSAgICAgIHNlYXJjaF9wYXRoID0gZ2V0ZW52IChMVERMX1NFQVJDSFBBVEhfVkFSKTsKKwkgICAgICBpZiAoc2VhcmNoX3BhdGgpCisJCWZpbGUgPSBmaW5kX2ZpbGUgKHNlYXJjaF9wYXRoLCBiYXNlX25hbWUsICZkaXIpOworCSAgICB9CisKKyNpZiBkZWZpbmVkKExUX01PRFVMRV9QQVRIX1ZBUikKKwkgIGlmICghZmlsZSkKKwkgICAgeworCSAgICAgIHNlYXJjaF9wYXRoID0gZ2V0ZW52IChMVF9NT0RVTEVfUEFUSF9WQVIpOworCSAgICAgIGlmIChzZWFyY2hfcGF0aCkKKwkJZmlsZSA9IGZpbmRfZmlsZSAoc2VhcmNoX3BhdGgsIGJhc2VfbmFtZSwgJmRpcik7CisJICAgIH0KKyNlbmRpZgorI2lmIGRlZmluZWQoTFRfRExTRUFSQ0hfUEFUSCkKKwkgIGlmICghZmlsZSAmJiAqc3lzX2Rsc2VhcmNoX3BhdGgpCisJICAgIHsKKwkgICAgICBmaWxlID0gZmluZF9maWxlIChzeXNfZGxzZWFyY2hfcGF0aCwgYmFzZV9uYW1lLCAmZGlyKTsKKwkgICAgfQorI2VuZGlmCisJfQorICAgICAgZWxzZQorCXsKKwkgIGZpbGUgPSBmb3BlbiAoYXR0ZW1wdCwgTFRfUkVBRFRFWFRfTU9ERSk7CisJfQorCisgICAgICAvKiBJZiB3ZSBkaWRuJ3QgZmluZCB0aGUgZmlsZSBieSBub3csIGl0IHJlYWxseSBpc24ndCB0aGVyZS4gIFNldAorCSB0aGUgc3RhdHVzIGZsYWcsIGFuZCBiYWlsIG91dC4gICovCisgICAgICBpZiAoIWZpbGUpCisJeworCSAgTFRfX1NFVEVSUk9SIChGSUxFX05PVF9GT1VORCk7CisJICArK2Vycm9yczsKKwkgIGdvdG8gY2xlYW51cDsKKwl9CisKKyAgICAgIC8qIHJlYWQgdGhlIC5sYSBmaWxlICovCisgICAgICBpZiAocGFyc2VfZG90bGFfZmlsZShmaWxlLCAmZGxuYW1lLCAmbGliZGlyLCAmZGVwbGlicywKKwkgICAgJm9sZF9uYW1lLCAmaW5zdGFsbGVkKSAhPSAwKQorCSsrZXJyb3JzOworCisgICAgICBmY2xvc2UgKGZpbGUpOworCisgICAgICAvKiBhbGxvY2F0ZSB0aGUgaGFuZGxlICovCisgICAgICAqcGhhbmRsZSA9IChsdF9kbGhhbmRsZSkgbHRfX3phbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgbHRfX2hhbmRsZSkpOworICAgICAgaWYgKCpwaGFuZGxlID09IDApCisJKytlcnJvcnM7CisKKyAgICAgIGlmIChlcnJvcnMpCisJeworCSAgRlJFRSAoZGxuYW1lKTsKKwkgIEZSRUUgKG9sZF9uYW1lKTsKKwkgIEZSRUUgKGxpYmRpcik7CisJICBGUkVFIChkZXBsaWJzKTsKKwkgIEZSRUUgKCpwaGFuZGxlKTsKKwkgIGdvdG8gY2xlYW51cDsKKwl9CisKKyAgICAgIGFzc2VydCAoKnBoYW5kbGUpOworCisgICAgICBpZiAobG9hZF9kZXBsaWJzICgqcGhhbmRsZSwgZGVwbGlicykgPT0gMCkKKwl7CisJICBuZXdoYW5kbGUgPSAqcGhhbmRsZTsKKwkgIC8qIGZpbmRfbW9kdWxlIG1heSByZXBsYWNlIG5ld2hhbmRsZSAqLworCSAgaWYgKGZpbmRfbW9kdWxlICgmbmV3aGFuZGxlLCBkaXIsIGxpYmRpciwgZGxuYW1lLCBvbGRfbmFtZSwKKwkJCSAgIGluc3RhbGxlZCwgYWR2aXNlKSkKKwkgICAgeworCSAgICAgIHVubG9hZF9kZXBsaWJzICgqcGhhbmRsZSk7CisJICAgICAgKytlcnJvcnM7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgKytlcnJvcnM7CisJfQorCisgICAgICBGUkVFIChkbG5hbWUpOworICAgICAgRlJFRSAob2xkX25hbWUpOworICAgICAgRlJFRSAobGliZGlyKTsKKyAgICAgIEZSRUUgKGRlcGxpYnMpOworCisgICAgICBpZiAoZXJyb3JzKQorCXsKKwkgIEZSRUUgKCpwaGFuZGxlKTsKKwkgIGdvdG8gY2xlYW51cDsKKwl9CisKKyAgICAgIGlmICgqcGhhbmRsZSAhPSBuZXdoYW5kbGUpCisJeworCSAgdW5sb2FkX2RlcGxpYnMgKCpwaGFuZGxlKTsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogbm90IGEgbGlidG9vbCBtb2R1bGUgKi8KKyAgICAgICpwaGFuZGxlID0gKGx0X2RsaGFuZGxlKSBsdF9femFsbG9jIChzaXplb2YgKHN0cnVjdCBsdF9faGFuZGxlKSk7CisgICAgICBpZiAoKnBoYW5kbGUgPT0gMCkKKwl7CisJICArK2Vycm9yczsKKwkgIGdvdG8gY2xlYW51cDsKKwl9CisKKyAgICAgIG5ld2hhbmRsZSA9ICpwaGFuZGxlOworCisgICAgICAvKiBJZiB0aGUgbW9kdWxlIGhhcyBubyBkaXJlY3RvcnkgbmFtZSBjb21wb25lbnQsIHRyeSB0byBmaW5kIGl0CisJIGZpcnN0IGluIHVzZXJfc2VhcmNoX3BhdGggYW5kIHRoZW4gb3RoZXIgcHJlc2NyaWJlZCBwYXRocy4KKwkgT3RoZXJ3aXNlIChvciBpbiBhbnkgY2FzZSBpZiB0aGUgbW9kdWxlIHdhcyBub3QgeWV0IGZvdW5kKSB0cnkKKwkgb3BlbmluZyBqdXN0IHRoZSBtb2R1bGUgbmFtZSBhcyBwYXNzZWQuICAqLworICAgICAgaWYgKChkaXIgfHwgKCFmaW5kX2hhbmRsZSAodXNlcl9zZWFyY2hfcGF0aCwgYmFzZV9uYW1lLAorCQkJCSAmbmV3aGFuZGxlLCBhZHZpc2UpCisJCSAgICYmICFmaW5kX2hhbmRsZSAoZ2V0ZW52IChMVERMX1NFQVJDSFBBVEhfVkFSKSwgYmFzZV9uYW1lLAorCQkJCSAgICAmbmV3aGFuZGxlLCBhZHZpc2UpCisjaWYgZGVmaW5lZChMVF9NT0RVTEVfUEFUSF9WQVIpCisJCSAgICYmICFmaW5kX2hhbmRsZSAoZ2V0ZW52IChMVF9NT0RVTEVfUEFUSF9WQVIpLCBiYXNlX25hbWUsCisJCQkJICAgICZuZXdoYW5kbGUsIGFkdmlzZSkKKyNlbmRpZgorI2lmIGRlZmluZWQoTFRfRExTRUFSQ0hfUEFUSCkKKwkJICAgJiYgIWZpbmRfaGFuZGxlIChzeXNfZGxzZWFyY2hfcGF0aCwgYmFzZV9uYW1lLAorCQkJCSAgICAmbmV3aGFuZGxlLCBhZHZpc2UpCisjZW5kaWYKKwkJICAgKSkpCisJeworCSAgaWYgKHRyeWFsbF9kbG9wZW4gKCZuZXdoYW5kbGUsIGF0dGVtcHQsIGFkdmlzZSwgMCkgIT0gMCkKKwkgICAgeworCSAgICAgIG5ld2hhbmRsZSA9IE5VTEw7CisJICAgIH0KKwl9CisKKyAgICAgIGlmICghbmV3aGFuZGxlKQorCXsKKwkgIEZSRUUgKCpwaGFuZGxlKTsKKwkgICsrZXJyb3JzOworCSAgZ290byBjbGVhbnVwOworCX0KKyAgICB9CisKKyByZWdpc3Rlcl9oYW5kbGU6CisgIE1FTVJFQVNTSUdOICgqcGhhbmRsZSwgbmV3aGFuZGxlKTsKKworICBpZiAoKCpwaGFuZGxlKS0+aW5mby5yZWZfY291bnQgPT0gMCkKKyAgICB7CisgICAgICAoKnBoYW5kbGUpLT5pbmZvLnJlZl9jb3VudAk9IDE7CisgICAgICBNRU1SRUFTU0lHTiAoKCpwaGFuZGxlKS0+aW5mby5uYW1lLCBuYW1lKTsKKworICAgICAgKCpwaGFuZGxlKS0+bmV4dAk9IGhhbmRsZXM7CisgICAgICBoYW5kbGVzCQk9ICpwaGFuZGxlOworICAgIH0KKworICBMVF9fU0VURVJST1JTVFIgKHNhdmVkX2Vycm9yKTsKKworIGNsZWFudXA6CisgIEZSRUUgKGRpcik7CisgIEZSRUUgKGF0dGVtcHQpOworICBGUkVFIChuYW1lKTsKKyAgaWYgKCFjYW5vbmljYWwpCQkvKiB3YXMgTUVNUkVBU1NJR05lZCAqLworICAgIEZSRUUgKGJhc2VfbmFtZSk7CisgIEZSRUUgKGNhbm9uaWNhbCk7CisgIEZSRUUgKGFyY2hpdmVfbmFtZSk7CisKKyAgcmV0dXJuIGVycm9yczsKK30KKworCisvKiBJZiB0aGUgbGFzdCBlcnJvciBtZXNzYWdlIHN0b3JlZCB3YXMgYEZJTEVfTk9UX0ZPVU5EJywgdGhlbiByZXR1cm4KKyAgIG5vbi16ZXJvLiAgKi8KK3N0YXRpYyBpbnQKK2ZpbGVfbm90X2ZvdW5kICh2b2lkKQoreworICBjb25zdCBjaGFyICplcnJvciA9IDA7CisKKyAgTFRfX0dFVEVSUk9SIChlcnJvcik7CisgIGlmIChlcnJvciA9PSBMVF9fU1RSRVJST1IgKEZJTEVfTk9UX0ZPVU5EKSkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworCisvKiBVbmxlc3MgRklMRU5BTUUgYWxyZWFkeSBiZWFycyBhIHN1aXRhYmxlIGxpYnJhcnkgZXh0ZW5zaW9uLCB0aGVuCisgICByZXR1cm4gMC4gICovCitzdGF0aWMgaW50CitoYXNfbGlicmFyeV9leHQgKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworICBjb25zdCBjaGFyICoJZXh0ICAgICA9IDA7CisKKyAgYXNzZXJ0IChmaWxlbmFtZSk7CisKKyAgZXh0ID0gc3RycmNociAoZmlsZW5hbWUsICcuJyk7CisKKyAgaWYgKGV4dCAmJiAoKHN0cmVxIChleHQsIGFyY2hpdmVfZXh0KSkKKyNpZiBkZWZpbmVkKExUX01PRFVMRV9FWFQpCisJICAgICB8fCAoc3RyZXEgKGV4dCwgc2hsaWJfZXh0KSkKKyNlbmRpZgorICAgICkpCisgICAgeworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgIHJldHVybiAwOworfQorCisKKy8qIEluaXRpYWxpc2UgYW5kIGNvbmZpZ3VyZSBhIHVzZXIgbHRfZGxhZHZpc2Ugb3BhcXVlIG9iamVjdC4gICovCisKK2ludAorbHRfZGxhZHZpc2VfaW5pdCAobHRfZGxhZHZpc2UgKnBhZHZpc2UpCit7CisgIGx0X2RsYWR2aXNlIGFkdmlzZSA9IChsdF9kbGFkdmlzZSkgbHRfX3phbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgbHRfX2FkdmlzZSkpOworICAqcGFkdmlzZSA9IGFkdmlzZTsKKyAgcmV0dXJuIChhZHZpc2UgPyAwIDogMSk7Cit9CisKK2ludAorbHRfZGxhZHZpc2VfZGVzdHJveSAobHRfZGxhZHZpc2UgKnBhZHZpc2UpCit7CisgIGlmIChwYWR2aXNlKQorICAgIEZSRUUoKnBhZHZpc2UpOworICByZXR1cm4gMDsKK30KKworaW50CitsdF9kbGFkdmlzZV9leHQgKGx0X2RsYWR2aXNlICpwYWR2aXNlKQoreworICBhc3NlcnQgKHBhZHZpc2UgJiYgKnBhZHZpc2UpOworICAoKnBhZHZpc2UpLT50cnlfZXh0ID0gMTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorbHRfZGxhZHZpc2VfcmVzaWRlbnQgKGx0X2RsYWR2aXNlICpwYWR2aXNlKQoreworICBhc3NlcnQgKHBhZHZpc2UgJiYgKnBhZHZpc2UpOworICAoKnBhZHZpc2UpLT5pc19yZXNpZGVudCA9IDE7CisgIHJldHVybiAwOworfQorCitpbnQKK2x0X2RsYWR2aXNlX2xvY2FsIChsdF9kbGFkdmlzZSAqcGFkdmlzZSkKK3sKKyAgYXNzZXJ0IChwYWR2aXNlICYmICpwYWR2aXNlKTsKKyAgKCpwYWR2aXNlKS0+aXNfc3ltbG9jYWwgPSAxOworICByZXR1cm4gMDsKK30KKworaW50CitsdF9kbGFkdmlzZV9nbG9iYWwgKGx0X2RsYWR2aXNlICpwYWR2aXNlKQoreworICBhc3NlcnQgKHBhZHZpc2UgJiYgKnBhZHZpc2UpOworICAoKnBhZHZpc2UpLT5pc19zeW1nbG9iYWwgPSAxOworICByZXR1cm4gMDsKK30KKworaW50CitsdF9kbGFkdmlzZV9wcmVsb2FkIChsdF9kbGFkdmlzZSAqcGFkdmlzZSkKK3sKKyAgYXNzZXJ0IChwYWR2aXNlICYmICpwYWR2aXNlKTsKKyAgKCpwYWR2aXNlKS0+dHJ5X3ByZWxvYWRfb25seSA9IDE7CisgIHJldHVybiAwOworfQorCisvKiBMaWJ0b29sLTEuNS54IGludGVyZmFjZSBmb3IgbG9hZGluZyBhIG5ldyBtb2R1bGUgbmFtZWQgRklMRU5BTUUuICAqLworbHRfZGxoYW5kbGUKK2x0X2Rsb3BlbiAoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisgIHJldHVybiBsdF9kbG9wZW5hZHZpc2UgKGZpbGVuYW1lLCBOVUxMKTsKK30KKworCisvKiBJZiBGSUxFTkFNRSBoYXMgYW4gQVJDSElWRV9FWFQgb3IgTU9EVUxFX0VYVCBleHRlbnNpb24sIHRyeSB0bworICAgb3BlbiB0aGUgRklMRU5BTUUgYXMgcGFzc2VkLiAgT3RoZXJ3aXNlIHRyeSBhcHBlbmRpbmcgQVJDSElWRV9FWFQsCisgICBhbmQgaWYgYSBmaWxlIGlzIHN0aWxsIG5vdCBmb3VuZCB0cnkgYWdhaW4gd2l0aCBNT0RVTEVfRVhUIGFwcGVuZGVkCisgICBpbnN0ZWFkLiAgKi8KK2x0X2RsaGFuZGxlCitsdF9kbG9wZW5leHQgKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworICBsdF9kbGhhbmRsZQloYW5kbGUJPSAwOworICBsdF9kbGFkdmlzZQlhZHZpc2U7CisKKyAgaWYgKCFsdF9kbGFkdmlzZV9pbml0ICgmYWR2aXNlKSAmJiAhbHRfZGxhZHZpc2VfZXh0ICgmYWR2aXNlKSkKKyAgICBoYW5kbGUgPSBsdF9kbG9wZW5hZHZpc2UgKGZpbGVuYW1lLCBhZHZpc2UpOworCisgIGx0X2RsYWR2aXNlX2Rlc3Ryb3kgKCZhZHZpc2UpOworICByZXR1cm4gaGFuZGxlOworfQorCisKK2x0X2RsaGFuZGxlCitsdF9kbG9wZW5hZHZpc2UgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBsdF9kbGFkdmlzZSBhZHZpc2UpCit7CisgIGx0X2RsaGFuZGxlCWhhbmRsZQk9IDA7CisgIGludAkJZXJyb3JzCT0gMDsKKyAgY29uc3QgY2hhciAqCXNhdmVkX2Vycm9yCT0gMDsKKworICBMVF9fR0VURVJST1IgKHNhdmVkX2Vycm9yKTsKKworICAvKiBDYW4ndCBoYXZlIHN5bWJvbHMgaGlkZGVuIGFuZCB2aXNpYmxlIGF0IHRoZSBzYW1lIHRpbWUhICAqLworICBpZiAoYWR2aXNlICYmIGFkdmlzZS0+aXNfc3ltbG9jYWwgJiYgYWR2aXNlLT5pc19zeW1nbG9iYWwpCisgICAgeworICAgICAgTFRfX1NFVEVSUk9SIChDT05GTElDVElOR19GTEFHUyk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgaWYgKCFmaWxlbmFtZQorICAgICAgfHwgIWFkdmlzZQorICAgICAgfHwgIWFkdmlzZS0+dHJ5X2V4dAorICAgICAgfHwgaGFzX2xpYnJhcnlfZXh0IChmaWxlbmFtZSkpCisgICAgeworICAgICAgLyogSnVzdCBpbmNhc2Ugd2UgbWlzc2VkIGEgY29kZSBwYXRoIGluIHRyeV9kbG9wZW4oKSB0aGF0IHJlcG9ydHMKKwkgYW4gZXJyb3IsIGJ1dCBmb3Jnb3QgdG8gcmVzZXQgaGFuZGxlLi4uICovCisgICAgICBpZiAodHJ5X2Rsb3BlbiAoJmhhbmRsZSwgZmlsZW5hbWUsIE5VTEwsIGFkdmlzZSkgIT0gMCkKKwlyZXR1cm4gMDsKKworICAgICAgcmV0dXJuIGhhbmRsZTsKKyAgICB9CisgIGVsc2UgaWYgKGZpbGVuYW1lICYmICpmaWxlbmFtZSkKKyAgICB7CisKKyAgICAgIC8qIEZpcnN0IHRyeSBhcHBlbmRpbmcgQVJDSElWRV9FWFQuICAqLworICAgICAgZXJyb3JzICs9IHRyeV9kbG9wZW4gKCZoYW5kbGUsIGZpbGVuYW1lLCBhcmNoaXZlX2V4dCwgYWR2aXNlKTsKKworICAgICAgLyogSWYgd2UgZm91bmQgRklMRU5BTUUsIHN0b3Agc2VhcmNoaW5nIC0tIHdoZXRoZXIgd2Ugd2VyZSBhYmxlIHRvCisJIGxvYWQgdGhlIGZpbGUgYXMgYSBtb2R1bGUgb3Igbm90LiAgSWYgdGhlIGZpbGUgZXhpc3RzIGJ1dCBsb2FkaW5nCisJIGZhaWxlZCwgaXQgaXMgYmV0dGVyIHRvIHJldHVybiBhbiBlcnJvciBtZXNzYWdlIGhlcmUgdGhhbiB0bworCSByZXBvcnQgRklMRV9OT1RfRk9VTkQgd2hlbiB0aGUgYWx0ZXJuYXRpdmVzIChmb28uc28gZXRjKSBhcmUgbm90CisJIGluIHRoZSBtb2R1bGUgc2VhcmNoIHBhdGguICAqLworICAgICAgaWYgKGhhbmRsZSB8fCAoKGVycm9ycyA+IDApICYmICFmaWxlX25vdF9mb3VuZCAoKSkpCisJcmV0dXJuIGhhbmRsZTsKKworI2lmIGRlZmluZWQoTFRfTU9EVUxFX0VYVCkKKyAgICAgIC8qIFRyeSBhcHBlbmRpbmcgU0hMSUJfRVhULiAgICovCisgICAgICBMVF9fU0VURVJST1JTVFIgKHNhdmVkX2Vycm9yKTsKKyAgICAgIGVycm9ycyA9IHRyeV9kbG9wZW4gKCZoYW5kbGUsIGZpbGVuYW1lLCBzaGxpYl9leHQsIGFkdmlzZSk7CisKKyAgICAgIC8qIEFzIGJlZm9yZSwgaWYgdGhlIGZpbGUgd2FzIGZvdW5kIGJ1dCBsb2FkaW5nIGZhaWxlZCwgcmV0dXJuIG5vdworCSB3aXRoIHRoZSBjdXJyZW50IGVycm9yIG1lc3NhZ2UuICAqLworICAgICAgaWYgKGhhbmRsZSB8fCAoKGVycm9ycyA+IDApICYmICFmaWxlX25vdF9mb3VuZCAoKSkpCisJcmV0dXJuIGhhbmRsZTsKKyNlbmRpZgorICAgIH0KKworICAvKiBTdGlsbCBoZXJlPyAgVGhlbiB3ZSByZWFsbHkgZGlkIGZhaWwgdG8gbG9jYXRlIGFueSBvZiB0aGUgZmlsZQorICAgICBuYW1lcyB3ZSB0cmllZC4gICovCisgIExUX19TRVRFUlJPUiAoRklMRV9OT1RfRk9VTkQpOworICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50CitsdF9hcmd6X2luc2VydCAoY2hhciAqKnBhcmd6LCBzaXplX3QgKnBhcmd6X2xlbiwgY2hhciAqYmVmb3JlLAorCQljb25zdCBjaGFyICplbnRyeSkKK3sKKyAgZXJyb3JfdCBlcnJvcjsKKworICAvKiBQcmlvciB0byBTZXAgOCwgMjAwNSwgbmV3bGliIGhhZCBhIGJ1ZyB3aGVyZSBhcmd6X2luc2VydChwYXJneiwKKyAgICAgcGFyZ3pfbGVuLCBOVUxMLCBlbnRyeSkgZmFpbGVkIHdpdGggRUlOVkFMLiAgKi8KKyAgaWYgKGJlZm9yZSkKKyAgICBlcnJvciA9IGFyZ3pfaW5zZXJ0IChwYXJneiwgcGFyZ3pfbGVuLCBiZWZvcmUsIGVudHJ5KTsKKyAgZWxzZQorICAgIGVycm9yID0gYXJnel9hcHBlbmQgKHBhcmd6LCBwYXJnel9sZW4sIGVudHJ5LCAxICsgc3RybGVuIChlbnRyeSkpOworCisgIGlmIChlcnJvcikKKyAgICB7CisgICAgICBzd2l0Y2ggKGVycm9yKQorCXsKKwljYXNlIEVOT01FTToKKwkgIExUX19TRVRFUlJPUiAoTk9fTUVNT1JZKTsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICBMVF9fU0VURVJST1IgKFVOS05PV04pOworCSAgYnJlYWs7CisJfQorICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitsdF9hcmd6X2luc2VydGlub3JkZXIgKGNoYXIgKipwYXJneiwgc2l6ZV90ICpwYXJnel9sZW4sIGNvbnN0IGNoYXIgKmVudHJ5KQoreworICBjaGFyICpiZWZvcmUgPSAwOworCisgIGFzc2VydCAocGFyZ3opOworICBhc3NlcnQgKHBhcmd6X2xlbik7CisgIGFzc2VydCAoZW50cnkgJiYgKmVudHJ5KTsKKworICBpZiAoKnBhcmd6KQorICAgIHdoaWxlICgoYmVmb3JlID0gYXJnel9uZXh0ICgqcGFyZ3osICpwYXJnel9sZW4sIGJlZm9yZSkpKQorICAgICAgeworCWludCBjbXAgPSBzdHJjbXAgKGVudHJ5LCBiZWZvcmUpOworCisJaWYgKGNtcCA8IDApICBicmVhazsKKwlpZiAoY21wID09IDApIHJldHVybiAwOwkvKiBObyBkdXBsaWNhdGVzISAqLworICAgICAgfQorCisgIHJldHVybiBsdF9hcmd6X2luc2VydCAocGFyZ3osIHBhcmd6X2xlbiwgYmVmb3JlLCBlbnRyeSk7Cit9CisKK3N0YXRpYyBpbnQKK2x0X2FyZ3pfaW5zZXJ0ZGlyIChjaGFyICoqcGFyZ3osIHNpemVfdCAqcGFyZ3pfbGVuLCBjb25zdCBjaGFyICpkaXJuYW0sCisJCSAgIHN0cnVjdCBkaXJlbnQgKmRwKQoreworICBjaGFyICAgKmJ1ZgkgICAgPSAwOworICBzaXplX3QgYnVmX2xlbiAgICA9IDA7CisgIGNoYXIgICAqZW5kCSAgICA9IDA7CisgIHNpemVfdCBlbmRfb2Zmc2V0ID0gMDsKKyAgc2l6ZV90IGRpcl9sZW4gICAgPSAwOworICBpbnQgICAgZXJyb3JzCSAgICA9IDA7CisKKyAgYXNzZXJ0IChwYXJneik7CisgIGFzc2VydCAocGFyZ3pfbGVuKTsKKyAgYXNzZXJ0IChkcCk7CisKKyAgZGlyX2xlbiA9IExUX1NUUkxFTiAoZGlybmFtKTsKKyAgZW5kICAgICA9IGRwLT5kX25hbWUgKyBEX05BTUxFTihkcCk7CisKKyAgLyogSWdub3JlIHZlcnNpb24gbnVtYmVycy4gICovCisgIHsKKyAgICBjaGFyICpwOworICAgIGZvciAocCA9IGVuZDsgcCAtMSA+IGRwLT5kX25hbWU7IC0tcCkKKyAgICAgIGlmIChzdHJjaHIgKCIuMDEyMzQ1Njc4OSIsIHBbLTFdKSA9PSAwKQorCWJyZWFrOworCisgICAgaWYgKCpwID09ICcuJykKKyAgICAgIGVuZCA9IHA7CisgIH0KKworICAvKiBJZ25vcmUgZmlsZW5hbWUgZXh0ZW5zaW9uLiAgKi8KKyAgeworICAgIGNoYXIgKnA7CisgICAgZm9yIChwID0gZW5kIC0xOyBwID4gZHAtPmRfbmFtZTsgLS1wKQorICAgICAgaWYgKCpwID09ICcuJykKKwl7CisJICBlbmQgPSBwOworCSAgYnJlYWs7CisJfQorICB9CisKKyAgLyogUHJlcGVuZCB0aGUgZGlyZWN0b3J5IG5hbWUuICAqLworICBlbmRfb2Zmc2V0CT0gZW5kIC0gZHAtPmRfbmFtZTsKKyAgYnVmX2xlbgk9IGRpcl9sZW4gKyAxKyBlbmRfb2Zmc2V0OworICBidWYJCT0gTUFMTE9DIChjaGFyLCAxKyBidWZfbGVuKTsKKyAgaWYgKCFidWYpCisgICAgcmV0dXJuICsrZXJyb3JzOworCisgIGFzc2VydCAoYnVmKTsKKworICBzdHJjcHkgIChidWYsIGRpcm5hbSk7CisgIHN0cmNhdCAgKGJ1ZiwgIi8iKTsKKyAgc3RybmNhdCAoYnVmLCBkcC0+ZF9uYW1lLCBlbmRfb2Zmc2V0KTsKKyAgYnVmW2J1Zl9sZW5dID0gTFRfRU9TX0NIQVI7CisKKyAgLyogVHJ5IHRvIGluc2VydCAoaW4gb3JkZXIpIGludG8gQVJHWi9BUkdaX0xFTi4gICovCisgIGlmIChsdF9hcmd6X2luc2VydGlub3JkZXIgKHBhcmd6LCBwYXJnel9sZW4sIGJ1ZikgIT0gMCkKKyAgICArK2Vycm9yczsKKworICBGUkVFIChidWYpOworCisgIHJldHVybiBlcnJvcnM7Cit9CisKK3N0YXRpYyBpbnQKK2xpc3RfZmlsZXNfYnlfZGlyIChjb25zdCBjaGFyICpkaXJuYW0sIGNoYXIgKipwYXJneiwgc2l6ZV90ICpwYXJnel9sZW4pCit7CisgIERJUgkqZGlycAkgID0gMDsKKyAgaW50ICAgIGVycm9ycwkgID0gMDsKKworICBhc3NlcnQgKGRpcm5hbSAmJiAqZGlybmFtKTsKKyAgYXNzZXJ0IChwYXJneik7CisgIGFzc2VydCAocGFyZ3pfbGVuKTsKKyAgYXNzZXJ0IChkaXJuYW1bTFRfU1RSTEVOKGRpcm5hbSkgLTFdICE9ICcvJyk7CisKKyAgZGlycCA9IG9wZW5kaXIgKGRpcm5hbSk7CisgIGlmIChkaXJwKQorICAgIHsKKyAgICAgIHN0cnVjdCBkaXJlbnQgKmRwCT0gMDsKKworICAgICAgd2hpbGUgKChkcCA9IHJlYWRkaXIgKGRpcnApKSkKKwlpZiAoZHAtPmRfbmFtZVswXSAhPSAnLicpCisJICBpZiAobHRfYXJnel9pbnNlcnRkaXIgKHBhcmd6LCBwYXJnel9sZW4sIGRpcm5hbSwgZHApKQorCSAgICB7CisJICAgICAgKytlcnJvcnM7CisJICAgICAgYnJlYWs7CisJICAgIH0KKworICAgICAgY2xvc2VkaXIgKGRpcnApOworICAgIH0KKyAgZWxzZQorICAgICsrZXJyb3JzOworCisgIHJldHVybiBlcnJvcnM7Cit9CisKKworLyogSWYgdGhlcmUgYXJlIGFueSBmaWxlcyBpbiBESVJOQU1FLCBjYWxsIHRoZSBmdW5jdGlvbiBwYXNzZWQgaW4KKyAgIERBVEExICh3aXRoIHRoZSBuYW1lIG9mIGVhY2ggZmlsZSBhbmQgREFUQTIgYXMgYXJndW1lbnRzKS4gICovCitzdGF0aWMgaW50Citmb3JlYWNoZmlsZV9jYWxsYmFjayAoY2hhciAqZGlybmFtZSwgdm9pZCAqZGF0YTEsIHZvaWQgKmRhdGEyKQoreworICBmaWxlX3dvcmtlcl9mdW5jICpmdW5jID0gKihmaWxlX3dvcmtlcl9mdW5jICoqKSBkYXRhMTsKKworICBpbnQJICBpc19kb25lICA9IDA7CisgIGNoYXIgICAqYXJneiAgICAgPSAwOworICBzaXplX3QgIGFyZ3pfbGVuID0gMDsKKworICBpZiAobGlzdF9maWxlc19ieV9kaXIgKGRpcm5hbWUsICZhcmd6LCAmYXJnel9sZW4pICE9IDApCisgICAgZ290byBjbGVhbnVwOworICBpZiAoIWFyZ3opCisgICAgZ290byBjbGVhbnVwOworCisgIHsKKyAgICBjaGFyICpmaWxlbmFtZSA9IDA7CisgICAgd2hpbGUgKChmaWxlbmFtZSA9IGFyZ3pfbmV4dCAoYXJneiwgYXJnel9sZW4sIGZpbGVuYW1lKSkpCisgICAgICBpZiAoKGlzX2RvbmUgPSAoKmZ1bmMpIChmaWxlbmFtZSwgZGF0YTIpKSkKKwlicmVhazsKKyAgfQorCisgY2xlYW51cDoKKyAgRlJFRSAoYXJneik7CisKKyAgcmV0dXJuIGlzX2RvbmU7Cit9CisKKworLyogQ2FsbCBGVU5DIGZvciBlYWNoIHVuaXF1ZSBleHRlbnNpb25sZXNzIGZpbGUgaW4gU0VBUkNIX1BBVEgsIGFsb25nCisgICB3aXRoIERBVEEuICBUaGUgZmlsZW5hbWVzIHBhc3NlZCB0byBGVU5DIHdvdWxkIGJlIHN1aXRhYmxlIGZvcgorICAgcGFzc2luZyB0byBsdF9kbG9wZW5leHQuICBUaGUgZXh0ZW5zaW9ucyBhcmUgc3RyaXBwZWQgc28gdGhhdAorICAgaW5kaXZpZHVhbCBtb2R1bGVzIGRvIG5vdCBnZW5lcmF0ZSBzZXZlcmFsIGVudHJpZXMgKGUuZy4gbGliZm9vLmxhLAorICAgbGliZm9vLnNvLCBsaWJmb28uc28uMSwgbGliZm9vLnNvLjEuMC4wKS4gIElmIFNFQVJDSF9QQVRIIGlzIE5VTEwsCisgICB0aGVuIHRoZSBzYW1lIGRpcmVjdG9yaWVzIHRoYXQgbHRfZGxvcGVuIHdvdWxkIHNlYXJjaCBhcmUgZXhhbWluZWQuICAqLworaW50CitsdF9kbGZvcmVhY2hmaWxlIChjb25zdCBjaGFyICpzZWFyY2hfcGF0aCwKKwkJICBpbnQgKCpmdW5jKSAoY29uc3QgY2hhciAqZmlsZW5hbWUsIHZvaWQgKmRhdGEpLAorCQkgIHZvaWQgKmRhdGEpCit7CisgIGludCBpc19kb25lID0gMDsKKyAgZmlsZV93b3JrZXJfZnVuYyAqKmZwcHRyID0gJmZ1bmM7CisKKyAgaWYgKHNlYXJjaF9wYXRoKQorICAgIHsKKyAgICAgIC8qIElmIGEgc3BlY2lmaWMgcGF0aCB3YXMgcGFzc2VkLCBzZWFyY2ggb25seSB0aGUgZGlyZWN0b3JpZXMKKwkgbGlzdGVkIGluIGl0LiAgKi8KKyAgICAgIGlzX2RvbmUgPSBmb3JlYWNoX2RpcmlucGF0aCAoc2VhcmNoX3BhdGgsIDAsCisJCQkJICAgZm9yZWFjaGZpbGVfY2FsbGJhY2ssIGZwcHRyLCBkYXRhKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBPdGhlcndpc2Ugc2VhcmNoIHRoZSBkZWZhdWx0IHBhdGhzLiAgKi8KKyAgICAgIGlzX2RvbmUgPSBmb3JlYWNoX2RpcmlucGF0aCAodXNlcl9zZWFyY2hfcGF0aCwgMCwKKwkJCQkgICBmb3JlYWNoZmlsZV9jYWxsYmFjaywgZnBwdHIsIGRhdGEpOworICAgICAgaWYgKCFpc19kb25lKQorCXsKKwkgIGlzX2RvbmUgPSBmb3JlYWNoX2RpcmlucGF0aCAoZ2V0ZW52KExURExfU0VBUkNIUEFUSF9WQVIpLCAwLAorCQkJCSAgICAgICBmb3JlYWNoZmlsZV9jYWxsYmFjaywgZnBwdHIsIGRhdGEpOworCX0KKworI2lmIGRlZmluZWQoTFRfTU9EVUxFX1BBVEhfVkFSKQorICAgICAgaWYgKCFpc19kb25lKQorCXsKKwkgIGlzX2RvbmUgPSBmb3JlYWNoX2RpcmlucGF0aCAoZ2V0ZW52KExUX01PRFVMRV9QQVRIX1ZBUiksIDAsCisJCQkJICAgICAgIGZvcmVhY2hmaWxlX2NhbGxiYWNrLCBmcHB0ciwgZGF0YSk7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChMVF9ETFNFQVJDSF9QQVRIKQorICAgICAgaWYgKCFpc19kb25lICYmICpzeXNfZGxzZWFyY2hfcGF0aCkKKwl7CisJICBpc19kb25lID0gZm9yZWFjaF9kaXJpbnBhdGggKHN5c19kbHNlYXJjaF9wYXRoLCAwLAorCQkJCSAgICAgICBmb3JlYWNoZmlsZV9jYWxsYmFjaywgZnBwdHIsIGRhdGEpOworCX0KKyNlbmRpZgorICAgIH0KKworICByZXR1cm4gaXNfZG9uZTsKK30KKworaW50CitsdF9kbGNsb3NlIChsdF9kbGhhbmRsZSBoYW5kbGUpCit7CisgIGx0X2RsaGFuZGxlIGN1ciwgbGFzdDsKKyAgaW50IGVycm9ycyA9IDA7CisKKyAgLyogY2hlY2sgd2hldGhlciB0aGUgaGFuZGxlIGlzIHZhbGlkICovCisgIGxhc3QgPSBjdXIgPSBoYW5kbGVzOworICB3aGlsZSAoY3VyICYmIGhhbmRsZSAhPSBjdXIpCisgICAgeworICAgICAgbGFzdCA9IGN1cjsKKyAgICAgIGN1ciA9IGN1ci0+bmV4dDsKKyAgICB9CisKKyAgaWYgKCFjdXIpCisgICAgeworICAgICAgTFRfX1NFVEVSUk9SIChJTlZBTElEX0hBTkRMRSk7CisgICAgICArK2Vycm9yczsKKyAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisKKyAgY3VyID0gaGFuZGxlOworICBjdXItPmluZm8ucmVmX2NvdW50LS07CisKKyAgLyogTm90ZSB0aGF0IGV2ZW4gd2l0aCByZXNpZGVudCBtb2R1bGVzLCB3ZSBtdXN0IHRyYWNrIHRoZSByZWZfY291bnQKKyAgICAgY29ycmVjdGx5IGluY2FzZSB0aGUgdXNlciBkZWNpZGVzIHRvIHJlc2V0IHRoZSByZXNpZGVuY3kgZmxhZworICAgICBsYXRlciAoZXZlbiB0aG91Z2ggdGhlIEFQSSBtYWtlcyBubyBwcm92aXNpb24gZm9yIHRoYXQgYXQgdGhlCisgICAgIG1vbWVudCkuICAqLworICBpZiAoY3VyLT5pbmZvLnJlZl9jb3VudCA8PSAwICYmICFMVF9ETElTX1JFU0lERU5UIChjdXIpKQorICAgIHsKKyAgICAgIGx0X3VzZXJfZGF0YSBkYXRhID0gY3VyLT52dGFibGUtPmRsbG9hZGVyX2RhdGE7CisKKyAgICAgIGlmIChjdXIgIT0gaGFuZGxlcykKKwl7CisJICBsYXN0LT5uZXh0ID0gY3VyLT5uZXh0OworCX0KKyAgICAgIGVsc2UKKwl7CisJICBoYW5kbGVzID0gY3VyLT5uZXh0OworCX0KKworICAgICAgZXJyb3JzICs9IGN1ci0+dnRhYmxlLT5tb2R1bGVfY2xvc2UgKGRhdGEsIGN1ci0+bW9kdWxlKTsKKyAgICAgIGVycm9ycyArPSB1bmxvYWRfZGVwbGlicyAoaGFuZGxlKTsKKworICAgICAgLyogSXQgaXMgdXAgdG8gdGhlIGNhbGxlcnMgdG8gZnJlZSB0aGUgZGF0YSBpdHNlbGYuICAqLworICAgICAgRlJFRSAoY3VyLT5pbnRlcmZhY2VfZGF0YSk7CisKKyAgICAgIEZSRUUgKGN1ci0+aW5mby5maWxlbmFtZSk7CisgICAgICBGUkVFIChjdXItPmluZm8ubmFtZSk7CisgICAgICBGUkVFIChjdXIpOworCisgICAgICBnb3RvIGRvbmU7CisgICAgfQorCisgIGlmIChMVF9ETElTX1JFU0lERU5UIChoYW5kbGUpKQorICAgIHsKKyAgICAgIExUX19TRVRFUlJPUiAoQ0xPU0VfUkVTSURFTlRfTU9EVUxFKTsKKyAgICAgICsrZXJyb3JzOworICAgIH0KKworIGRvbmU6CisgIHJldHVybiBlcnJvcnM7Cit9CisKK3ZvaWQgKgorbHRfZGxzeW0gKGx0X2RsaGFuZGxlIHBsYWNlLCBjb25zdCBjaGFyICpzeW1ib2wpCit7CisgIHNpemVfdCBsZW5zeW07CisgIGNoYXIJbHN5bVtMVF9TWU1CT0xfTEVOR1RIXTsKKyAgY2hhcgkqc3ltOworICB2b2lkICphZGRyZXNzOworICBsdF91c2VyX2RhdGEgZGF0YTsKKyAgbHRfZGxoYW5kbGUgaGFuZGxlOworCisgIGlmICghcGxhY2UpCisgICAgeworICAgICAgTFRfX1NFVEVSUk9SIChJTlZBTElEX0hBTkRMRSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgaGFuZGxlID0gcGxhY2U7CisKKyAgaWYgKCFzeW1ib2wpCisgICAgeworICAgICAgTFRfX1NFVEVSUk9SIChTWU1CT0xfTk9UX0ZPVU5EKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICBsZW5zeW0gPSBMVF9TVFJMRU4gKHN5bWJvbCkgKyBMVF9TVFJMRU4gKGhhbmRsZS0+dnRhYmxlLT5zeW1fcHJlZml4KQorCQkJCQkrIExUX1NUUkxFTiAoaGFuZGxlLT5pbmZvLm5hbWUpOworCisgIGlmIChsZW5zeW0gKyBMVF9TWU1CT0xfT1ZFUkhFQUQgPCBMVF9TWU1CT0xfTEVOR1RIKQorICAgIHsKKyAgICAgIHN5bSA9IGxzeW07CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgc3ltID0gTUFMTE9DIChjaGFyLCBsZW5zeW0gKyBMVF9TWU1CT0xfT1ZFUkhFQUQgKyAxKTsKKyAgICAgIGlmICghc3ltKQorCXsKKwkgIExUX19TRVRFUlJPUiAoQlVGRkVSX09WRVJGTE9XKTsKKwkgIHJldHVybiAwOworCX0KKyAgICB9CisKKyAgZGF0YSA9IGhhbmRsZS0+dnRhYmxlLT5kbGxvYWRlcl9kYXRhOworICBpZiAoaGFuZGxlLT5pbmZvLm5hbWUpCisgICAgeworICAgICAgY29uc3QgY2hhciAqc2F2ZWRfZXJyb3I7CisKKyAgICAgIExUX19HRVRFUlJPUiAoc2F2ZWRfZXJyb3IpOworCisgICAgICAvKiB0aGlzIGlzIGEgbGlidG9vbCBtb2R1bGUgKi8KKyAgICAgIGlmIChoYW5kbGUtPnZ0YWJsZS0+c3ltX3ByZWZpeCkKKwl7CisJICBzdHJjcHkoc3ltLCBoYW5kbGUtPnZ0YWJsZS0+c3ltX3ByZWZpeCk7CisJICBzdHJjYXQoc3ltLCBoYW5kbGUtPmluZm8ubmFtZSk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHN0cmNweShzeW0sIGhhbmRsZS0+aW5mby5uYW1lKTsKKwl9CisKKyAgICAgIHN0cmNhdChzeW0sICJfTFRYXyIpOworICAgICAgc3RyY2F0KHN5bSwgc3ltYm9sKTsKKworICAgICAgLyogdHJ5ICJtb2R1bGVuYW1lX0xUWF9zeW1ib2wiICovCisgICAgICBhZGRyZXNzID0gaGFuZGxlLT52dGFibGUtPmZpbmRfc3ltIChkYXRhLCBoYW5kbGUtPm1vZHVsZSwgc3ltKTsKKyAgICAgIGlmIChhZGRyZXNzKQorCXsKKwkgIGlmIChzeW0gIT0gbHN5bSkKKwkgICAgeworCSAgICAgIEZSRUUgKHN5bSk7CisJICAgIH0KKwkgIHJldHVybiBhZGRyZXNzOworCX0KKyAgICAgIExUX19TRVRFUlJPUlNUUiAoc2F2ZWRfZXJyb3IpOworICAgIH0KKworICAvKiBvdGhlcndpc2UgdHJ5ICJzeW1ib2wiICovCisgIGlmIChoYW5kbGUtPnZ0YWJsZS0+c3ltX3ByZWZpeCkKKyAgICB7CisgICAgICBzdHJjcHkoc3ltLCBoYW5kbGUtPnZ0YWJsZS0+c3ltX3ByZWZpeCk7CisgICAgICBzdHJjYXQoc3ltLCBzeW1ib2wpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHN0cmNweShzeW0sIHN5bWJvbCk7CisgICAgfQorCisgIGFkZHJlc3MgPSBoYW5kbGUtPnZ0YWJsZS0+ZmluZF9zeW0gKGRhdGEsIGhhbmRsZS0+bW9kdWxlLCBzeW0pOworICBpZiAoc3ltICE9IGxzeW0pCisgICAgeworICAgICAgRlJFRSAoc3ltKTsKKyAgICB9CisKKyAgcmV0dXJuIGFkZHJlc3M7Cit9CisKK2NvbnN0IGNoYXIgKgorbHRfZGxlcnJvciAodm9pZCkKK3sKKyAgY29uc3QgY2hhciAqZXJyb3I7CisKKyAgTFRfX0dFVEVSUk9SIChlcnJvcik7CisgIExUX19TRVRFUlJPUlNUUiAoMCk7CisKKyAgcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50CitsdF9kbHBhdGhfaW5zZXJ0ZGlyIChjaGFyICoqcHBhdGgsIGNoYXIgKmJlZm9yZSwgY29uc3QgY2hhciAqZGlyKQoreworICBpbnQgICAgZXJyb3JzCQk9IDA7CisgIGNoYXIgICpjYW5vbmljYWwJPSAwOworICBjaGFyICAqYXJnegkJPSAwOworICBzaXplX3QgYXJnel9sZW4JPSAwOworCisgIGFzc2VydCAocHBhdGgpOworICBhc3NlcnQgKGRpciAmJiAqZGlyKTsKKworICBpZiAoY2Fub25pY2FsaXplX3BhdGggKGRpciwgJmNhbm9uaWNhbCkgIT0gMCkKKyAgICB7CisgICAgICArK2Vycm9yczsKKyAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgYXNzZXJ0IChjYW5vbmljYWwgJiYgKmNhbm9uaWNhbCk7CisKKyAgLyogSWYgKlBQQVRIIGlzIGVtcHR5LCBzZXQgaXQgdG8gRElSLiAgKi8KKyAgaWYgKCpwcGF0aCA9PSAwKQorICAgIHsKKyAgICAgIGFzc2VydCAoIWJlZm9yZSk7CQkvKiBCRUZPUkUgY2Fubm90IGJlIHNldCB3aXRob3V0IFBQQVRILiAgKi8KKyAgICAgIGFzc2VydCAoZGlyKTsJCS8qIFdpdGhvdXQgRElSLCBkb24ndCBjYWxsIHRoaXMgZnVuY3Rpb24hICAqLworCisgICAgICAqcHBhdGggPSBsdF9fc3RyZHVwIChkaXIpOworICAgICAgaWYgKCpwcGF0aCA9PSAwKQorCSsrZXJyb3JzOworCisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgIGFzc2VydCAocHBhdGggJiYgKnBwYXRoKTsKKworICBpZiAoYXJneml6ZV9wYXRoICgqcHBhdGgsICZhcmd6LCAmYXJnel9sZW4pICE9IDApCisgICAgeworICAgICAgKytlcnJvcnM7CisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgIC8qIENvbnZlcnQgQkVGT1JFIGludG8gYW4gZXF1aXZhbGVudCBvZmZzZXQgaW50byBBUkdaLiAgVGhpcyBvbmx5IHdvcmtzCisgICAgIGlmICpQUEFUSCBpcyBhbHJlYWR5IGNhbm9uaWNhbGl6ZWQsIGFuZCBoZW5jZSBkb2VzIG5vdCBjaGFuZ2UgbGVuZ3RoCisgICAgIHdpdGggcmVzcGVjdCB0byBBUkdaLiAgV2UgY2Fub25pY2FsaXplIGVhY2ggZW50cnkgYXMgaXQgaXMgYWRkZWQgdG8KKyAgICAgdGhlIHNlYXJjaCBwYXRoLCBhbmQgZG9uJ3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggKHVuY2Fub25pY2FsaXplZCkKKyAgICAgdXNlciBwYXRocywgc28gdGhpcyBpcyBhIGZhaXIgYXNzdW1wdGlvbi4gICovCisgIGlmIChiZWZvcmUpCisgICAgeworICAgICAgYXNzZXJ0ICgqcHBhdGggPD0gYmVmb3JlKTsKKyAgICAgIGFzc2VydCAoKGludCkgKGJlZm9yZSAtICpwcGF0aCkgPD0gKGludCkgc3RybGVuICgqcHBhdGgpKTsKKworICAgICAgYmVmb3JlID0gYmVmb3JlIC0gKnBwYXRoICsgYXJnejsKKyAgICB9CisKKyAgaWYgKGx0X2FyZ3pfaW5zZXJ0ICgmYXJneiwgJmFyZ3pfbGVuLCBiZWZvcmUsIGRpcikgIT0gMCkKKyAgICB7CisgICAgICArK2Vycm9yczsKKyAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgYXJnel9zdHJpbmdpZnkgKGFyZ3osIGFyZ3pfbGVuLCBMVF9QQVRIU0VQX0NIQVIpOworICBNRU1SRUFTU0lHTigqcHBhdGgsIGFyZ3opOworCisgY2xlYW51cDoKKyAgRlJFRSAoYXJneik7CisgIEZSRUUgKGNhbm9uaWNhbCk7CisKKyAgcmV0dXJuIGVycm9yczsKK30KKworaW50CitsdF9kbGFkZHNlYXJjaGRpciAoY29uc3QgY2hhciAqc2VhcmNoX2RpcikKK3sKKyAgaW50IGVycm9ycyA9IDA7CisKKyAgaWYgKHNlYXJjaF9kaXIgJiYgKnNlYXJjaF9kaXIpCisgICAgeworICAgICAgaWYgKGx0X2RscGF0aF9pbnNlcnRkaXIgKCZ1c2VyX3NlYXJjaF9wYXRoLCAwLCBzZWFyY2hfZGlyKSAhPSAwKQorCSsrZXJyb3JzOworICAgIH0KKworICByZXR1cm4gZXJyb3JzOworfQorCitpbnQKK2x0X2RsaW5zZXJ0c2VhcmNoZGlyIChjb25zdCBjaGFyICpiZWZvcmUsIGNvbnN0IGNoYXIgKnNlYXJjaF9kaXIpCit7CisgIGludCBlcnJvcnMgPSAwOworCisgIGlmIChiZWZvcmUpCisgICAgeworICAgICAgaWYgKChiZWZvcmUgPCB1c2VyX3NlYXJjaF9wYXRoKQorCSAgfHwgKGJlZm9yZSA+PSB1c2VyX3NlYXJjaF9wYXRoICsgTFRfU1RSTEVOICh1c2VyX3NlYXJjaF9wYXRoKSkpCisJeworCSAgTFRfX1NFVEVSUk9SIChJTlZBTElEX1BPU0lUSU9OKTsKKwkgIHJldHVybiAxOworCX0KKyAgICB9CisKKyAgaWYgKHNlYXJjaF9kaXIgJiYgKnNlYXJjaF9kaXIpCisgICAgeworICAgICAgaWYgKGx0X2RscGF0aF9pbnNlcnRkaXIgKCZ1c2VyX3NlYXJjaF9wYXRoLAorCQkJICAgICAgIChjaGFyICopIGJlZm9yZSwgc2VhcmNoX2RpcikgIT0gMCkKKwl7CisJICArK2Vycm9yczsKKwl9CisgICAgfQorCisgIHJldHVybiBlcnJvcnM7Cit9CisKK2ludAorbHRfZGxzZXRzZWFyY2hwYXRoIChjb25zdCBjaGFyICpzZWFyY2hfcGF0aCkKK3sKKyAgaW50ICAgZXJyb3JzCSAgICA9IDA7CisKKyAgRlJFRSAodXNlcl9zZWFyY2hfcGF0aCk7CisKKyAgaWYgKCFzZWFyY2hfcGF0aCB8fCAhTFRfU1RSTEVOIChzZWFyY2hfcGF0aCkpCisgICAgeworICAgICAgcmV0dXJuIGVycm9yczsKKyAgICB9CisKKyAgaWYgKGNhbm9uaWNhbGl6ZV9wYXRoIChzZWFyY2hfcGF0aCwgJnVzZXJfc2VhcmNoX3BhdGgpICE9IDApCisgICAgKytlcnJvcnM7CisKKyAgcmV0dXJuIGVycm9yczsKK30KKworY29uc3QgY2hhciAqCitsdF9kbGdldHNlYXJjaHBhdGggKHZvaWQpCit7CisgIGNvbnN0IGNoYXIgKnNhdmVkX3BhdGg7CisKKyAgc2F2ZWRfcGF0aCA9IHVzZXJfc2VhcmNoX3BhdGg7CisKKyAgcmV0dXJuIHNhdmVkX3BhdGg7Cit9CisKK2ludAorbHRfZGxtYWtlcmVzaWRlbnQgKGx0X2RsaGFuZGxlIGhhbmRsZSkKK3sKKyAgaW50IGVycm9ycyA9IDA7CisKKyAgaWYgKCFoYW5kbGUpCisgICAgeworICAgICAgTFRfX1NFVEVSUk9SIChJTlZBTElEX0hBTkRMRSk7CisgICAgICArK2Vycm9yczsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBoYW5kbGUtPmluZm8uaXNfcmVzaWRlbnQgPSAxOworICAgIH0KKworICByZXR1cm4gZXJyb3JzOworfQorCitpbnQKK2x0X2RsaXNyZXNpZGVudAkobHRfZGxoYW5kbGUgaGFuZGxlKQoreworICBpZiAoIWhhbmRsZSkKKyAgICB7CisgICAgICBMVF9fU0VURVJST1IgKElOVkFMSURfSEFORExFKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgcmV0dXJuIExUX0RMSVNfUkVTSURFTlQgKGhhbmRsZSk7Cit9CisKKworCisvKiAtLS0gTU9EVUxFIElORk9STUFUSU9OIC0tLSAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKmlkX3N0cmluZzsKKyAgbHRfZGxoYW5kbGVfaW50ZXJmYWNlICppZmFjZTsKK30gbHRfX2ludGVyZmFjZV9pZDsKKworbHRfZGxpbnRlcmZhY2VfaWQKK2x0X2RsaW50ZXJmYWNlX3JlZ2lzdGVyIChjb25zdCBjaGFyICppZF9zdHJpbmcsIGx0X2RsaGFuZGxlX2ludGVyZmFjZSAqaWZhY2UpCit7CisgIGx0X19pbnRlcmZhY2VfaWQgKmludGVyZmFjZV9pZCA9IChsdF9faW50ZXJmYWNlX2lkICopIGx0X19tYWxsb2MgKHNpemVvZiAqaW50ZXJmYWNlX2lkKTsKKworICAvKiBJZiBsdF9fbWFsbG9jIGZhaWxzLCBpdCB3aWxsIExUX19TRVRFUlJPUiAoTk9fTUVNT1JZKSwgd2hpY2gKKyAgICAgY2FuIHRoZW4gYmUgZGV0ZWN0ZWQgd2l0aCBsdF9kbGVycm9yKCkgaWYgd2UgcmV0dXJuIDAuICAqLworICBpZiAoaW50ZXJmYWNlX2lkKQorICAgIHsKKyAgICAgIGludGVyZmFjZV9pZC0+aWRfc3RyaW5nID0gbHRfX3N0cmR1cCAoaWRfc3RyaW5nKTsKKyAgICAgIGlmICghaW50ZXJmYWNlX2lkLT5pZF9zdHJpbmcpCisJRlJFRSAoaW50ZXJmYWNlX2lkKTsKKyAgICAgIGVsc2UKKwlpbnRlcmZhY2VfaWQtPmlmYWNlID0gaWZhY2U7CisgICAgfQorCisgIHJldHVybiAobHRfZGxpbnRlcmZhY2VfaWQpIGludGVyZmFjZV9pZDsKK30KKwordm9pZCBsdF9kbGludGVyZmFjZV9mcmVlIChsdF9kbGludGVyZmFjZV9pZCBrZXkpCit7CisgIGx0X19pbnRlcmZhY2VfaWQgKmludGVyZmFjZV9pZCA9IChsdF9faW50ZXJmYWNlX2lkICopa2V5OworICBGUkVFIChpbnRlcmZhY2VfaWQtPmlkX3N0cmluZyk7CisgIEZSRUUgKGludGVyZmFjZV9pZCk7Cit9CisKK3ZvaWQgKgorbHRfZGxjYWxsZXJfc2V0X2RhdGEgKGx0X2RsaW50ZXJmYWNlX2lkIGtleSwgbHRfZGxoYW5kbGUgaGFuZGxlLCB2b2lkICpkYXRhKQoreworICBpbnQgbl9lbGVtZW50cyA9IDA7CisgIHZvaWQgKnN0YWxlID0gKHZvaWQgKikgMDsKKyAgbHRfZGxoYW5kbGUgY3VyID0gaGFuZGxlOworICBpbnQgaTsKKworICBpZiAoY3VyLT5pbnRlcmZhY2VfZGF0YSkKKyAgICB3aGlsZSAoY3VyLT5pbnRlcmZhY2VfZGF0YVtuX2VsZW1lbnRzXS5rZXkpCisgICAgICArK25fZWxlbWVudHM7CisKKyAgZm9yIChpID0gMDsgaSA8IG5fZWxlbWVudHM7ICsraSkKKyAgICB7CisgICAgICBpZiAoY3VyLT5pbnRlcmZhY2VfZGF0YVtpXS5rZXkgPT0ga2V5KQorCXsKKwkgIHN0YWxlID0gY3VyLT5pbnRlcmZhY2VfZGF0YVtpXS5kYXRhOworCSAgYnJlYWs7CisJfQorICAgIH0KKworICAvKiBFbnN1cmUgdGhhdCB0aGVyZSBpcyBlbm91Z2ggcm9vbSBpbiB0aGlzIGhhbmRsZSdzIGludGVyZmFjZV9kYXRhCisgICAgIGFycmF5IHRvIGFjY2VwdCBhIG5ldyBlbGVtZW50IChhbmQgYW4gZW1wdHkgZW5kIG1hcmtlcikuICAqLworICBpZiAoaSA9PSBuX2VsZW1lbnRzKQorICAgIHsKKyAgICAgIGx0X2ludGVyZmFjZV9kYXRhICp0ZW1wCisJPSBSRUFMTE9DIChsdF9pbnRlcmZhY2VfZGF0YSwgY3VyLT5pbnRlcmZhY2VfZGF0YSwgMisgbl9lbGVtZW50cyk7CisKKyAgICAgIGlmICghdGVtcCkKKwl7CisJICBzdGFsZSA9IDA7CisJICBnb3RvIGRvbmU7CisJfQorCisgICAgICBjdXItPmludGVyZmFjZV9kYXRhID0gdGVtcDsKKworICAgICAgLyogV2Ugb25seSBuZWVkIHRoaXMgaWYgd2UgbmVlZGVkIHRvIGFsbG9jYXRlIGEgbmV3IGludGVyZmFjZV9kYXRhLiAgKi8KKyAgICAgIGN1ci0+aW50ZXJmYWNlX2RhdGFbaV0ua2V5CT0ga2V5OworICAgICAgY3VyLT5pbnRlcmZhY2VfZGF0YVsxKyBpXS5rZXkJPSAwOworICAgIH0KKworICBjdXItPmludGVyZmFjZV9kYXRhW2ldLmRhdGEgPSBkYXRhOworCisgZG9uZToKKyAgcmV0dXJuIHN0YWxlOworfQorCit2b2lkICoKK2x0X2RsY2FsbGVyX2dldF9kYXRhIChsdF9kbGludGVyZmFjZV9pZCBrZXksIGx0X2RsaGFuZGxlIGhhbmRsZSkKK3sKKyAgdm9pZCAqcmVzdWx0ID0gKHZvaWQgKikgMDsKKyAgbHRfZGxoYW5kbGUgY3VyID0gaGFuZGxlOworCisgIC8qIExvY2F0ZSB0aGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgd2l0aCBhIG1hdGNoaW5nIEtFWS4gICovCisgIGlmIChjdXItPmludGVyZmFjZV9kYXRhKQorICAgIHsKKyAgICAgIGludCBpOworICAgICAgZm9yIChpID0gMDsgY3VyLT5pbnRlcmZhY2VfZGF0YVtpXS5rZXk7ICsraSkKKwl7CisJICBpZiAoY3VyLT5pbnRlcmZhY2VfZGF0YVtpXS5rZXkgPT0ga2V5KQorCSAgICB7CisJICAgICAgcmVzdWx0ID0gY3VyLT5pbnRlcmZhY2VfZGF0YVtpXS5kYXRhOworCSAgICAgIGJyZWFrOworCSAgICB9CisJfQorICAgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCitjb25zdCBsdF9kbGluZm8gKgorbHRfZGxnZXRpbmZvIChsdF9kbGhhbmRsZSBoYW5kbGUpCit7CisgIGlmICghaGFuZGxlKQorICAgIHsKKyAgICAgIExUX19TRVRFUlJPUiAoSU5WQUxJRF9IQU5ETEUpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIHJldHVybiAmKGhhbmRsZS0+aW5mbyk7Cit9CisKKworbHRfZGxoYW5kbGUKK2x0X2RsaGFuZGxlX2l0ZXJhdGUgKGx0X2RsaW50ZXJmYWNlX2lkIGlmYWNlLCBsdF9kbGhhbmRsZSBwbGFjZSkKK3sKKyAgbHRfZGxoYW5kbGUgaGFuZGxlID0gcGxhY2U7CisgIGx0X19pbnRlcmZhY2VfaWQgKml0ZXJhdG9yID0gKGx0X19pbnRlcmZhY2VfaWQgKikgaWZhY2U7CisKKyAgYXNzZXJ0IChpZmFjZSk7IC8qIGlmYWNlIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQgKi8KKworICBpZiAoIWhhbmRsZSkKKyAgICBoYW5kbGUgPSBoYW5kbGVzOworICBlbHNlCisgICAgaGFuZGxlID0gaGFuZGxlLT5uZXh0OworCisgIC8qIGFkdmFuY2Ugd2hpbGUgdGhlIGludGVyZmFjZSBjaGVjayBmYWlscyAqLworICB3aGlsZSAoaGFuZGxlICYmIGl0ZXJhdG9yLT5pZmFjZQorCSAmJiAoKCppdGVyYXRvci0+aWZhY2UpIChoYW5kbGUsIGl0ZXJhdG9yLT5pZF9zdHJpbmcpICE9IDApKQorICAgIHsKKyAgICAgIGhhbmRsZSA9IGhhbmRsZS0+bmV4dDsKKyAgICB9CisKKyAgcmV0dXJuIGhhbmRsZTsKK30KKworCitsdF9kbGhhbmRsZQorbHRfZGxoYW5kbGVfZmV0Y2ggKGx0X2RsaW50ZXJmYWNlX2lkIGlmYWNlLCBjb25zdCBjaGFyICptb2R1bGVfbmFtZSkKK3sKKyAgbHRfZGxoYW5kbGUgaGFuZGxlID0gMDsKKworICBhc3NlcnQgKGlmYWNlKTsgLyogaWZhY2UgaXMgYSByZXF1aXJlZCBhcmd1bWVudCAqLworCisgIHdoaWxlICgoaGFuZGxlID0gbHRfZGxoYW5kbGVfaXRlcmF0ZSAoaWZhY2UsIGhhbmRsZSkpKQorICAgIHsKKyAgICAgIGx0X2RsaGFuZGxlIGN1ciA9IGhhbmRsZTsKKyAgICAgIGlmIChjdXIgJiYgY3VyLT5pbmZvLm5hbWUgJiYgc3RyZXEgKGN1ci0+aW5mby5uYW1lLCBtb2R1bGVfbmFtZSkpCisJYnJlYWs7CisgICAgfQorCisgIHJldHVybiBoYW5kbGU7Cit9CisKKworaW50CitsdF9kbGhhbmRsZV9tYXAgKGx0X2RsaW50ZXJmYWNlX2lkIGlmYWNlLAorCQkgaW50ICgqZnVuYykgKGx0X2RsaGFuZGxlIGhhbmRsZSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpCit7CisgIGx0X19pbnRlcmZhY2VfaWQgKml0ZXJhdG9yID0gKGx0X19pbnRlcmZhY2VfaWQgKikgaWZhY2U7CisgIGx0X2RsaGFuZGxlIGN1ciA9IGhhbmRsZXM7CisKKyAgYXNzZXJ0IChpZmFjZSk7IC8qIGlmYWNlIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQgKi8KKworICB3aGlsZSAoY3VyKQorICAgIHsKKyAgICAgIGludCBlcnJvcmNvZGUgPSAwOworCisgICAgICAvKiBhZHZhbmNlIHdoaWxlIHRoZSBpbnRlcmZhY2UgY2hlY2sgZmFpbHMgKi8KKyAgICAgIHdoaWxlIChjdXIgJiYgaXRlcmF0b3ItPmlmYWNlCisJICAgICAmJiAoKCppdGVyYXRvci0+aWZhY2UpIChjdXIsIGl0ZXJhdG9yLT5pZF9zdHJpbmcpICE9IDApKQorCXsKKwkgIGN1ciA9IGN1ci0+bmV4dDsKKwl9CisKKyAgICAgIGlmICgoZXJyb3Jjb2RlID0gKCpmdW5jKSAoY3VyLCBkYXRhKSkgIT0gMCkKKwlyZXR1cm4gZXJyb3Jjb2RlOworICAgIH0KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9sdGRsLmggYi9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvbHRkbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNTE2YWQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvbHRkbC5oCkBAIC0wLDAgKzEsMTYyIEBACisvKiBsdGRsLmggLS0gZ2VuZXJpYyBkbG9wZW4gZnVuY3Rpb25zCisKKyAgIENvcHlyaWdodCAoQykgMTk5OC0yMDAwLCAyMDA0LCAyMDA1LAorICAgICAgICAgICAgICAgICAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBUaG9tYXMgVGFubmVyLCAxOTk4CisKKyAgIE5PVEU6IFRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRoaXMgZmlsZSBpcyBtYWludGFpbmVkIHdpdGggdGhlCisgICBHTlUgTGlidG9vbCBwYWNrYWdlLiAgUmVwb3J0IGJ1Z3MgdG8gYnVnLWxpYnRvb2xAZ251Lm9yZy4KKworR05VIExpYmx0ZGwgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAoraWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAoraXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCitzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworR05VIExpYmx0ZGwgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIEdOVSBMaWJsdGRsOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIGEKK2NvcHkgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSAgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwuaHRtbCwKK29yIG9idGFpbmVkIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworLyogT25seSBpbmNsdWRlIHRoaXMgaGVhZGVyIGZpbGUgb25jZS4gKi8KKyNpZiAhZGVmaW5lZChMVERMX0gpCisjZGVmaW5lIExURExfSCAxCisKKyNpbmNsdWRlIDxsaWJsdGRsL2x0X3N5c3RlbS5oPgorI2luY2x1ZGUgPGxpYmx0ZGwvbHRfZXJyb3IuaD4KKyNpbmNsdWRlIDxsaWJsdGRsL2x0X2RsbG9hZGVyLmg+CisKK0xUX0JFR0lOX0NfREVDTFMKKworCisvKiBMVF9TVFJMRU4gY2FuIGJlIHVzZWQgc2FmZWx5IG9uIE5VTEwgcG9pbnRlcnMuICAqLworI2RlZmluZSBMVF9TVFJMRU4ocykJKCgocykgJiYgKHMpWzBdKSA/IHN0cmxlbiAocykgOiAwKQorCisMCisvKiAtLS0gRFlOQU1JQyBNT0RVTEUgTE9BRElORyBBUEkgLS0tICovCisKKwordHlwZWRlZglzdHJ1Y3QgbHRfX2hhbmRsZSAqbHRfZGxoYW5kbGU7CS8qIEEgbG9hZGVkIG1vZHVsZS4gICovCisKKy8qIEluaXRpYWxpc2F0aW9uIGFuZCBmaW5hbGlzYXRpb24gZnVuY3Rpb25zIGZvciBsaWJsdGRsLiAqLworTFRfU0NPUEUgaW50CSAgICBsdF9kbGluaXQJCSh2b2lkKTsKK0xUX1NDT1BFIGludAkgICAgbHRfZGxleGl0CQkodm9pZCk7CisKKy8qIE1vZHVsZSBzZWFyY2ggcGF0aCBtYW5pcHVsYXRpb24uICAqLworTFRfU0NPUEUgaW50CSAgICBsdF9kbGFkZHNlYXJjaGRpcgkgKGNvbnN0IGNoYXIgKnNlYXJjaF9kaXIpOworTFRfU0NPUEUgaW50CSAgICBsdF9kbGluc2VydHNlYXJjaGRpciAoY29uc3QgY2hhciAqYmVmb3JlLAorCQkJCQkJICBjb25zdCBjaGFyICpzZWFyY2hfZGlyKTsKK0xUX1NDT1BFIGludCAJICAgIGx0X2Rsc2V0c2VhcmNocGF0aAkgKGNvbnN0IGNoYXIgKnNlYXJjaF9wYXRoKTsKK0xUX1NDT1BFIGNvbnN0IGNoYXIgKmx0X2RsZ2V0c2VhcmNocGF0aAkgKHZvaWQpOworTFRfU0NPUEUgaW50CSAgICBsdF9kbGZvcmVhY2hmaWxlCSAoCisJCQljb25zdCBjaGFyICpzZWFyY2hfcGF0aCwKKwkJCWludCAoKmZ1bmMpIChjb25zdCBjaGFyICpmaWxlbmFtZSwgdm9pZCAqZGF0YSksCisJCQl2b2lkICpkYXRhKTsKKworLyogVXNlciBtb2R1bGUgbG9hZGluZyBhZHZpc29ycy4gICovCitMVF9TQ09QRSBpbnQJICAgIGx0X2RsYWR2aXNlX2luaXQJIChsdF9kbGFkdmlzZSAqYWR2aXNlKTsKK0xUX1NDT1BFIGludAkgICAgbHRfZGxhZHZpc2VfZGVzdHJveSAgKGx0X2RsYWR2aXNlICphZHZpc2UpOworTFRfU0NPUEUgaW50CSAgICBsdF9kbGFkdmlzZV9leHQJIChsdF9kbGFkdmlzZSAqYWR2aXNlKTsKK0xUX1NDT1BFIGludAkgICAgbHRfZGxhZHZpc2VfcmVzaWRlbnQgKGx0X2RsYWR2aXNlICphZHZpc2UpOworTFRfU0NPUEUgaW50CSAgICBsdF9kbGFkdmlzZV9sb2NhbAkgKGx0X2RsYWR2aXNlICphZHZpc2UpOworTFRfU0NPUEUgaW50CSAgICBsdF9kbGFkdmlzZV9nbG9iYWwgICAobHRfZGxhZHZpc2UgKmFkdmlzZSk7CitMVF9TQ09QRSBpbnQJICAgIGx0X2RsYWR2aXNlX3ByZWxvYWQJIChsdF9kbGFkdmlzZSAqYWR2aXNlKTsKKworLyogUG9ydGFibGUgbGlibHRkbCB2ZXJzaW9ucyBvZiB0aGUgc3lzdGVtIGRsb3BlbigpIEFQSS4gKi8KK0xUX1NDT1BFIGx0X2RsaGFuZGxlIGx0X2Rsb3BlbgkJKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKK0xUX1NDT1BFIGx0X2RsaGFuZGxlIGx0X2Rsb3BlbmV4dAkoY29uc3QgY2hhciAqZmlsZW5hbWUpOworTFRfU0NPUEUgbHRfZGxoYW5kbGUgbHRfZGxvcGVuYWR2aXNlCShjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCQkJIGx0X2RsYWR2aXNlIGFkdmlzZSk7CitMVF9TQ09QRSB2b2lkICoJICAgIGx0X2Rsc3ltCQkobHRfZGxoYW5kbGUgaGFuZGxlLCBjb25zdCBjaGFyICpuYW1lKTsKK0xUX1NDT1BFIGNvbnN0IGNoYXIgKmx0X2RsZXJyb3IJCSh2b2lkKTsKK0xUX1NDT1BFIGludAkgICAgbHRfZGxjbG9zZQkJKGx0X2RsaGFuZGxlIGhhbmRsZSk7CisKKworCisvKiAtLS0gUFJFTE9BREVEIE1PRFVMRSBTVVBQT1JUIC0tLSAqLworCisKKy8qIEEgcHJlb3BlbmVkIHN5bWJvbC4gQXJyYXlzIG9mIHRoaXMgdHlwZSBjb21wcmlzZSB0aGUgZXhwb3J0ZWQKKyAgIHN5bWJvbHMgZm9yIGEgZGxwcmVvcGVuZWQgbW9kdWxlLiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICB2b2lkICAgICAgICphZGRyZXNzOworfSBsdF9kbHN5bWxpc3Q7CisKK3R5cGVkZWYgaW50IGx0X2RscHJlbG9hZF9jYWxsYmFja19mdW5jIChsdF9kbGhhbmRsZSBoYW5kbGUpOworCitMVF9TQ09QRSBpbnQJbHRfZGxwcmVsb2FkCSAgICAgKGNvbnN0IGx0X2Rsc3ltbGlzdCAqcHJlbG9hZGVkKTsKK0xUX1NDT1BFIGludAlsdF9kbHByZWxvYWRfZGVmYXVsdCAoY29uc3QgbHRfZGxzeW1saXN0ICpwcmVsb2FkZWQpOworTFRfU0NPUEUgaW50CWx0X2RscHJlbG9hZF9vcGVuICAgIChjb25zdCBjaGFyICpvcmlnaW5hdG9yLAorCQkJCSAgICAgIGx0X2RscHJlbG9hZF9jYWxsYmFja19mdW5jICpmdW5jKTsKKworI2RlZmluZSBsdF9wcmVsb2FkZWRfc3ltYm9scwlsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzCisjZGVmaW5lIExURExfU0VUX1BSRUxPQURFRF9TWU1CT0xTKCkgCQkJTFRfU1RNVF9TVEFSVHsJXAorCWV4dGVybiBjb25zdCBsdF9kbHN5bWxpc3QgbHRfcHJlbG9hZGVkX3N5bWJvbHNbXTsJCVwKKwlsdF9kbHByZWxvYWRfZGVmYXVsdChsdF9wcmVsb2FkZWRfc3ltYm9scyk7CQkJXAorCQkJCQkJCX1MVF9TVE1UX0VORAorCisKKworDAorLyogLS0tIE1PRFVMRSBJTkZPUk1BVElPTiAtLS0gKi8KKworCisvKiBBc3NvY2lhdGluZyB1c2VyIGRhdGEgd2l0aCBsb2FkZWQgbW9kdWxlcy4gKi8KK3R5cGVkZWYgdm9pZCAqIGx0X2RsaW50ZXJmYWNlX2lkOwordHlwZWRlZiBpbnQgbHRfZGxoYW5kbGVfaW50ZXJmYWNlIChsdF9kbGhhbmRsZSBoYW5kbGUsIGNvbnN0IGNoYXIgKmlkX3N0cmluZyk7CisKK0xUX1NDT1BFIGx0X2RsaW50ZXJmYWNlX2lkIGx0X2RsaW50ZXJmYWNlX3JlZ2lzdGVyIChjb25zdCBjaGFyICppZF9zdHJpbmcsCisJCQkJCSAgbHRfZGxoYW5kbGVfaW50ZXJmYWNlICppZmFjZSk7CitMVF9TQ09QRSB2b2lkCWx0X2RsaW50ZXJmYWNlX2ZyZWUgKGx0X2RsaW50ZXJmYWNlX2lkIGtleSk7CitMVF9TQ09QRSB2b2lkICoJbHRfZGxjYWxsZXJfc2V0X2RhdGEgIChsdF9kbGludGVyZmFjZV9pZCBrZXksCisJCQkJCSAgbHRfZGxoYW5kbGUgaGFuZGxlLCB2b2lkICpkYXRhKTsKK0xUX1NDT1BFIHZvaWQgKglsdF9kbGNhbGxlcl9nZXRfZGF0YSAgKGx0X2RsaW50ZXJmYWNlX2lkIGtleSwKKwkJCQkJICBsdF9kbGhhbmRsZSBoYW5kbGUpOworCisKKy8qIFJlYWQgb25seSBpbmZvcm1hdGlvbiBwZXJ0YWluaW5nIHRvIGEgbG9hZGVkIG1vZHVsZS4gKi8KK3R5cGVkZWYJc3RydWN0IHsKKyAgY2hhciAqCWZpbGVuYW1lOwkvKiBmaWxlIG5hbWUgKi8KKyAgY2hhciAqCW5hbWU7CQkvKiBtb2R1bGUgbmFtZSAqLworICBpbnQJCXJlZl9jb3VudDsJLyogbnVtYmVyIG9mIHRpbWVzIGx0X2Rsb3BlbmVkIG1pbnVzCisJCQkJICAgbnVtYmVyIG9mIHRpbWVzIGx0X2RsY2xvc2VkLiAqLworICB1bnNpZ25lZCBpbnQJaXNfcmVzaWRlbnQ6MTsJLyogbW9kdWxlIGNhbid0IGJlIHVubG9hZGVkLiAqLworICB1bnNpZ25lZCBpbnQJaXNfc3ltZ2xvYmFsOjE7CS8qIG1vZHVsZSBzeW1ib2xzIGNhbiBzYXRpc2Z5CisJCQkJICAgc3Vic2VxdWVudGx5IGxvYWRlZCBtb2R1bGVzLiAgKi8KKyAgdW5zaWduZWQgaW50CWlzX3N5bWxvY2FsOjE7CS8qIG1vZHVsZSBzeW1ib2xzIGFyZSBvbmx5IGF2YWlsYWJsZQorCQkJCSAgIGxvY2FsbHkuICovCit9IGx0X2RsaW5mbzsKKworTFRfU0NPUEUgY29uc3QgbHRfZGxpbmZvICpsdF9kbGdldGluZm8JICAgIChsdF9kbGhhbmRsZSBoYW5kbGUpOworCitMVF9TQ09QRSBsdF9kbGhhbmRsZQlsdF9kbGhhbmRsZV9pdGVyYXRlIChsdF9kbGludGVyZmFjZV9pZCBpZmFjZSwKKwkJCQkJICAgICBsdF9kbGhhbmRsZSBwbGFjZSk7CitMVF9TQ09QRSBsdF9kbGhhbmRsZQlsdF9kbGhhbmRsZV9mZXRjaCAgIChsdF9kbGludGVyZmFjZV9pZCBpZmFjZSwKKwkJCQkJICAgICBjb25zdCBjaGFyICptb2R1bGVfbmFtZSk7CitMVF9TQ09QRSBpbnQJCWx0X2RsaGFuZGxlX21hcAkgICAgKGx0X2RsaW50ZXJmYWNlX2lkIGlmYWNlLAorCQkJCWludCAoKmZ1bmMpIChsdF9kbGhhbmRsZSBoYW5kbGUsIHZvaWQgKmRhdGEpLAorCQkJCXZvaWQgKmRhdGEpOworCisKKworLyogRGVwcmVjYXRlZCBtb2R1bGUgcmVzaWRlbmN5IG1hbmFnZW1lbnQgQVBJLiAqLworTFRfU0NPUEUgaW50CSAgICBsdF9kbG1ha2VyZXNpZGVudAkobHRfZGxoYW5kbGUgaGFuZGxlKTsKK0xUX1NDT1BFIGludAkgICAgbHRfZGxpc3Jlc2lkZW50CShsdF9kbGhhbmRsZSBoYW5kbGUpOworCisjZGVmaW5lIGx0X3B0ciB2b2lkICoKKworTFRfRU5EX0NfREVDTFMKKworI2VuZGlmIC8qIWRlZmluZWQoTFRETF9IKSovCmRpZmYgLS1naXQgYS9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvc2xpc3QuYyBiL3NoYXJlL2xpYnRvb2wvbGlibHRkbC9zbGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1OTA2YTQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9saWJ0b29sL2xpYmx0ZGwvc2xpc3QuYwpAQCAtMCwwICsxLDM3OSBAQAorLyogc2xpc3QuYyAtLSBnZW5lcmFsaXNlZCBzaW5nbHkgbGlua2VkIGxpc3RzCisKKyAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwNCwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDAwCisKKyAgIE5PVEU6IFRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRoaXMgZmlsZSBpcyBtYWludGFpbmVkIHdpdGggdGhlCisgICBHTlUgTGlidG9vbCBwYWNrYWdlLiAgUmVwb3J0IGJ1Z3MgdG8gYnVnLWxpYnRvb2xAZ251Lm9yZy4KKworR05VIExpYmx0ZGwgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAoraWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAoraXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCitzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworR05VIExpYmx0ZGwgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIEdOVSBMaWJsdGRsOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIGEKK2NvcHkgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSAgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwuaHRtbCwKK29yIG9idGFpbmVkIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5jbHVkZSAic2xpc3QuaCIKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworc3RhdGljIFNMaXN0ICoJc2xpc3Rfc29ydF9tZXJnZSAgICAoU0xpc3QgKmxlZnQsIFNMaXN0ICpyaWdodCwKKwkJCQkgICAgIFNMaXN0Q29tcGFyZSAqY29tcGFyZSwgdm9pZCAqdXNlcmRhdGEpOworCisKKy8qIENhbGwgREVMRVRFIHJlcGVhdGVkbHkgb24gZWFjaCBlbGVtZW50IG9mIEhFQUQuCisKKyAgIENBVkVBVDogSWYgeW91IGNhbGwgdGhpcyB3aGVuIEhFQUQgaXMgdGhlIHN0YXJ0IG9mIGEgbGlzdCBvZiBib3hlZAorICAgICAgICAgICBpdGVtcywgeW91IG11c3QgcmVtZW1iZXIgdGhhdCBlYWNoIGl0ZW0gcGFzc2VkIGJhY2sgdG8geW91cgorCSAgIERFTEVURSBmdW5jdGlvbiB3aWxsIGJlIGEgYm94ZWQgaXRlbSB0aGF0IG11c3QgYmUgc2xpc3RfdW5ib3goKWVkCisJICAgYmVmb3JlIG9wZXJhdGluZyBvbiBpdHMgY29udGVudHMuCisKKyAgIGUuZy4gdm9pZCBib3hlZF9kZWxldGUgKHZvaWQgKml0ZW0pIHsgaXRlbV9mcmVlIChzbGlzdF91bmJveCAoaXRlbSkpOyB9CisgICAgICAgIC4uLgorCSAgc2xpc3QgPSBzbGlzdF9kZWxldGUgKHNsaXN0LCBib3hlZF9kZWxldGUpOworCS4uLgorKi8KK1NMaXN0ICoKK3NsaXN0X2RlbGV0ZSAoU0xpc3QgKmhlYWQsIHZvaWQgKCpkZWxldGVfZmN0KSAodm9pZCAqaXRlbSkpCit7CisgIGFzc2VydCAoZGVsZXRlX2ZjdCk7CisKKyAgd2hpbGUgKGhlYWQpCisgICAgeworICAgICAgU0xpc3QgKm5leHQgPSBoZWFkLT5uZXh0OworICAgICAgKCpkZWxldGVfZmN0KSAoaGVhZCk7CisgICAgICBoZWFkID0gbmV4dDsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIENhbGwgRklORCByZXBlYXRlZGx5IHdpdGggTUFUQ0hEQVRBIGFuZCBlYWNoIGl0ZW0gb2YgKlBIRUFELCB1bnRpbAorICAgRklORCByZXR1cm5zIG5vbi1OVUxMLCBvciB0aGUgbGlzdCBpcyBleGhhdXN0ZWQuICBJZiBhIG1hdGNoIGlzIGZvdW5kCisgICB0aGUgbWF0Y2hpbmcgaXRlbSBpcyBkZXN0cnVjdGl2ZWx5IHJlbW92ZWQgZnJvbSAqUEhFQUQsIGFuZCB0aGUgdmFsdWUKKyAgIHJldHVybmVkIGJ5IHRoZSBtYXRjaGluZyBjYWxsIHRvIEZJTkQgaXMgcmV0dXJuZWQuCisKKyAgIENBVkVBVDogVG8gYXZvaWQgbWVtb3J5IGxlYWtzLCB1bmxlc3MgeW91IGFscmVhZHkgaGF2ZSB0aGUgYWRkcmVzcyBvZgorICAgICAgICAgICB0aGUgc3RhbGUgaXRlbSwgeW91IHNob3VsZCBwcm9iYWJseSByZXR1cm4gdGhhdCBmcm9tIEZJTkQgaWYKKwkgICBpdCBtYWtlcyBhIHN1Y2Nlc3NmdWwgbWF0Y2guICBEb24ndCBmb3JnZXQgdG8gc2xpc3RfdW5ib3goKQorCSAgIGV2ZXJ5IGl0ZW0gaW4gYSBib3hlZCBsaXN0IGJlZm9yZSBvcGVyYXRpbmcgb24gaXRzIGNvbnRlbnRzLiAgICovCitTTGlzdCAqCitzbGlzdF9yZW1vdmUgKFNMaXN0ICoqcGhlYWQsIFNMaXN0Q2FsbGJhY2sgKmZpbmQsIHZvaWQgKm1hdGNoZGF0YSkKK3sKKyAgU0xpc3QgKnN0YWxlID0gMDsKKyAgdm9pZCAqcmVzdWx0ID0gMDsKKworICBhc3NlcnQgKGZpbmQpOworCisgIGlmICghcGhlYWQgfHwgISpwaGVhZCkKKyAgICByZXR1cm4gMDsKKworICAvKiBEb2VzIHRoZSBoZWFkIG9mIHRoZSBwYXNzZWQgbGlzdCBtYXRjaD8gKi8KKyAgcmVzdWx0ID0gKCpmaW5kKSAoKnBoZWFkLCBtYXRjaGRhdGEpOworICBpZiAocmVzdWx0KQorICAgIHsKKyAgICAgIHN0YWxlID0gKnBoZWFkOworICAgICAgKnBoZWFkID0gc3RhbGUtPm5leHQ7CisgICAgfQorICAvKiB3aGF0IGFib3V0IHRoZSByZXN0IG9mIHRoZSBlbGVtZW50cz8gKi8KKyAgZWxzZQorICAgIHsKKyAgICAgIFNMaXN0ICpoZWFkOworICAgICAgZm9yIChoZWFkID0gKnBoZWFkOyBoZWFkLT5uZXh0OyBoZWFkID0gaGVhZC0+bmV4dCkKKwl7CisJICByZXN1bHQgPSAoKmZpbmQpIChoZWFkLT5uZXh0LCBtYXRjaGRhdGEpOworCSAgaWYgKHJlc3VsdCkKKwkgICAgeworCSAgICAgIHN0YWxlCQk9IGhlYWQtPm5leHQ7CisJICAgICAgaGVhZC0+bmV4dAk9IHN0YWxlLT5uZXh0OworCSAgICAgIGJyZWFrOworCSAgICB9CisJfQorICAgIH0KKworICByZXR1cm4gKFNMaXN0ICopIHJlc3VsdDsKK30KKworLyogQ2FsbCBGSU5EIHJlcGVhdGVkbHkgd2l0aCBlYWNoIGVsZW1lbnQgb2YgU0xJU1QgYW5kIE1BVENIREFUQSwgdW50aWwKKyAgIEZJTkQgcmV0dXJucyBub24tTlVMTCwgb3IgdGhlIGxpc3QgaXMgZXhoYXVzdGVkLiAgSWYgYSBtYXRjaCBpcyBmb3VuZAorICAgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBtYXRjaGluZyBjYWxsIHRvIEZJTkQgaXMgcmV0dXJuZWQuICovCit2b2lkICoKK3NsaXN0X2ZpbmQgKFNMaXN0ICpzbGlzdCwgU0xpc3RDYWxsYmFjayAqZmluZCwgdm9pZCAqbWF0Y2hkYXRhKQoreworICB2b2lkICpyZXN1bHQgPSAwOworCisgIGFzc2VydCAoZmluZCk7CisKKyAgZm9yICg7IHNsaXN0OyBzbGlzdCA9IHNsaXN0LT5uZXh0KQorICAgIHsKKyAgICAgIHJlc3VsdCA9ICgqZmluZCkgKHNsaXN0LCBtYXRjaGRhdGEpOworICAgICAgaWYgKHJlc3VsdCkKKwlicmVhazsKKyAgICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogUmV0dXJuIGEgc2luZ2xlIGxpc3QsIGNvbXBvc2VkIGJ5IGRlc3RydWN0aXZlbHkgY29uY2F0ZW5hdGluZyB0aGUKKyAgIGl0ZW1zIGluIEhFQUQgYW5kIFRBSUwuICBUaGUgdmFsdWVzIG9mIEhFQUQgYW5kIFRBSUwgYXJlIHVuZGVmaW5lZAorICAgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorCisgICBDQVZFQVQ6IERvbid0IG1peCBib3hlZCBhbmQgdW5ib3hlZCBpdGVtcyBpbiBhIHNpbmdsZSBsaXN0LgorCisgICBlLmcuICBzbGlzdDEgPSBzbGlzdF9jb25jYXQgKHNsaXN0MSwgc2xpc3QyKTsgICovCitTTGlzdCAqCitzbGlzdF9jb25jYXQgKFNMaXN0ICpoZWFkLCBTTGlzdCAqdGFpbCkKK3sKKyAgU0xpc3QgKmxhc3Q7CisKKyAgaWYgKCFoZWFkKQorICAgIHsKKyAgICAgIHJldHVybiB0YWlsOworICAgIH0KKworICBsYXN0ID0gaGVhZDsKKyAgd2hpbGUgKGxhc3QtPm5leHQpCisgICAgbGFzdCA9IGxhc3QtPm5leHQ7CisKKyAgbGFzdC0+bmV4dCA9IHRhaWw7CisKKyAgcmV0dXJuIGhlYWQ7Cit9CisKKy8qIFJldHVybiBhIHNpbmdsZSBsaXN0LCBjb21wb3NlZCBieSBkZXN0cnVjdGl2ZWx5IGFwcGVuZGluZyBhbGwgb2YKKyAgIHRoZSBpdGVtcyBpbiBTTElTVCB0byBJVEVNLiAgVGhlIHZhbHVlcyBvZiBJVEVNIGFuZCBTTElTVCBhcmUgdW5kZWZpbmVkCisgICBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisKKyAgIENBVkVBVDogIERvbid0IG1peCBib3hlZCBhbmQgdW5ib3hlZCBpdGVtcyBpbiBhIHNpbmdsZSBsaXN0LgorCisgICBlLmcuICBzbGlzdDEgPSBzbGlzdF9jb25zIChzbGlzdF9ib3ggKGRhdGEpLCBzbGlzdDEpOyAgKi8KK1NMaXN0ICoKK3NsaXN0X2NvbnMgKFNMaXN0ICppdGVtLCBTTGlzdCAqc2xpc3QpCit7CisgIGlmICghaXRlbSkKKyAgICB7CisgICAgICByZXR1cm4gc2xpc3Q7CisgICAgfQorCisgIGFzc2VydCAoIWl0ZW0tPm5leHQpOworCisgIGl0ZW0tPm5leHQgPSBzbGlzdDsKKyAgcmV0dXJuIGl0ZW07Cit9CisKKy8qIFJldHVybiBhIGxpc3Qgc3RhcnRpbmcgYXQgdGhlIHNlY29uZCBpdGVtIG9mIFNMSVNULiAgKi8KK1NMaXN0ICoKK3NsaXN0X3RhaWwgKFNMaXN0ICpzbGlzdCkKK3sKKyAgcmV0dXJuIHNsaXN0ID8gc2xpc3QtPm5leHQgOiBOVUxMOworfQorCisvKiBSZXR1cm4gYSBsaXN0IHN0YXJ0aW5nIGF0IHRoZSBOdGggaXRlbSBvZiBTTElTVC4gIElmIFNMSVNUIGlzIGxlc3MKKyAgIHRoYW4gTiBpdGVtcyBsb25nLCBOVUxMIGlzIHJldHVybmVkLiAgSnVzdCB0byBiZSBjb25mdXNpbmcsIGxpc3QgaXRlbXMKKyAgIGFyZSBjb3VudGVkIGZyb20gMSwgdG8gZ2V0IHRoZSAybmQgZWxlbWVudCBvZiBzbGlzdDoKKworICAgZS5nLiBzaGFyZWRfbGlzdCA9IHNsaXN0X250aCAoc2xpc3QsIDIpOyAgKi8KK1NMaXN0ICoKK3NsaXN0X250aCAoU0xpc3QgKnNsaXN0LCBzaXplX3QgbikKK3sKKyAgZm9yICg7biA+IDEgJiYgc2xpc3Q7IG4tLSkKKyAgICBzbGlzdCA9IHNsaXN0LT5uZXh0OworCisgIHJldHVybiBzbGlzdDsKK30KKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gU0xJU1QuICBXZSBzdGFydCBjb3VudGluZyBmcm9tIDEsIHNvCisgICB0aGUgbGVuZ3RoIG9mIGEgbGlzdCB3aXRoIG5vIGl0ZW1zIGlzIDAsIGFuZCBzbyBvbi4gICovCitzaXplX3QKK3NsaXN0X2xlbmd0aCAoU0xpc3QgKnNsaXN0KQoreworICBzaXplX3QgbjsKKworICBmb3IgKG4gPSAwOyBzbGlzdDsgKytuKQorICAgIHNsaXN0ID0gc2xpc3QtPm5leHQ7CisKKyAgcmV0dXJuIG47Cit9CisKKy8qIERlc3RydWN0aXZlbHkgcmV2ZXJzZSB0aGUgb3JkZXIgb2YgaXRlbXMgaW4gU0xJU1QuICBUaGUgdmFsdWUgb2YgU0xJU1QKKyAgIGlzIHVuZGVmaW5lZCBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisKKyAgQ0FWRUFUOiBZb3UgbXVzdCBzdG9yZSB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24sIG9yIHlvdSBtaWdodCBub3QKKyAgICAgICAgICBiZSBhYmxlIHRvIGdldCBhbGwgdGhlIGl0ZW1zIGV4Y2VwdCB0aGUgZmlyc3Qgb25lIGJhY2sgYWdhaW4uCisKKyAgZS5nLiAgICBzbGlzdCA9IHNsaXN0X3JldmVyc2UgKHNsaXN0KTsgICovCitTTGlzdCAqCitzbGlzdF9yZXZlcnNlIChTTGlzdCAqc2xpc3QpCit7CisgIFNMaXN0ICpyZXN1bHQgPSAwOworICBTTGlzdCAqbmV4dDsKKworICB3aGlsZSAoc2xpc3QpCisgICAgeworICAgICAgbmV4dAkJPSBzbGlzdC0+bmV4dDsKKyAgICAgIHNsaXN0LT5uZXh0CT0gcmVzdWx0OworICAgICAgcmVzdWx0CQk9IHNsaXN0OworICAgICAgc2xpc3QgCQk9IG5leHQ7CisgICAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIENhbGwgRk9SRUFDSCBvbmNlIGZvciBlYWNoIGl0ZW0gaW4gU0xJU1QsIHBhc3NpbmcgYm90aCB0aGUgaXRlbSBhbmQKKyAgIFVTRVJEQVRBIG9uIGVhY2ggY2FsbC4gKi8KK3ZvaWQgKgorc2xpc3RfZm9yZWFjaCAoU0xpc3QgKnNsaXN0LCBTTGlzdENhbGxiYWNrICpmb3JlYWNoLCB2b2lkICp1c2VyZGF0YSkKK3sKKyAgdm9pZCAqcmVzdWx0ID0gMDsKKworICBhc3NlcnQgKGZvcmVhY2gpOworCisgIHdoaWxlIChzbGlzdCkKKyAgICB7CisgICAgICBTTGlzdCAqbmV4dCA9IHNsaXN0LT5uZXh0OworICAgICAgcmVzdWx0ID0gKCpmb3JlYWNoKSAoc2xpc3QsIHVzZXJkYXRhKTsKKworICAgICAgaWYgKHJlc3VsdCkKKwlicmVhazsKKworICAgICAgc2xpc3QgPSBuZXh0OworICAgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBEZXN0cnVjdGl2ZWx5IG1lcmdlIHRoZSBpdGVtcyBvZiB0d28gb3JkZXJlZCBsaXN0cyBMRUZUIGFuZCBSSUdIVCwKKyAgIHJldHVybmluZyBhIHNpbmdsZSBzb3J0ZWQgbGlzdCBjb250YWluaW5nIHRoZSBpdGVtcyBvZiBib3RoIC0tICBQYXJ0IG9mCisgICB0aGUgcXVpY2tzb3J0IGFsZ29yaXRobS4gIFRoZSB2YWx1ZXMgb2YgTEVGVCBhbmQgUklHSFQgYXJlIHVuZGVmaW5lZAorICAgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorCisgICBBdCBlYWNoIGl0ZXJhdGlvbiwgYWRkIGFub3RoZXIgaXRlbSB0byB0aGUgbWVyZ2VkIGxpc3QgYnkgdGFraW5nIHRoZQorICAgbG93ZXN0IHZhbHVlZCBpdGVtIGZyb20gdGhlIGhlYWQgb2YgZWl0aGVyIExFRlQgb3IgUklHSFQsIGRldGVybWluZWQKKyAgIGJ5IHBhc3NpbmcgdGhvc2UgaXRlbXMgYW5kIFVTRVJEQVRBIHRvIENPTVBBUkUuICBDT01QQVJFIHNob3VsZCByZXR1cm4KKyAgIGxlc3MgdGhhbiAwIGlmIHRoZSBoZWFkIG9mIExFRlQgaGFzIHRoZSBsb3dlciB2YWx1ZSwgZ3JlYXRlciB0aGFuIDAgaWYKKyAgIHRoZSBoZWFkIG9mIFJJR0hUIGhhcyB0aGUgbG93ZXIgdmFsdWUsIG90aGVyd2lzZSAwLiAgKi8KK3N0YXRpYyBTTGlzdCAqCitzbGlzdF9zb3J0X21lcmdlIChTTGlzdCAqbGVmdCwgU0xpc3QgKnJpZ2h0LCBTTGlzdENvbXBhcmUgKmNvbXBhcmUsCisJCSAgdm9pZCAqdXNlcmRhdGEpCit7CisgIFNMaXN0IG1lcmdlZCwgKmluc2VydDsKKworICBpbnNlcnQgPSAmbWVyZ2VkOworCisgIHdoaWxlIChsZWZ0ICYmIHJpZ2h0KQorICAgIHsKKyAgICAgIGlmICgoKmNvbXBhcmUpIChsZWZ0LCByaWdodCwgdXNlcmRhdGEpIDw9IDApCisJeworCSAgaW5zZXJ0ID0gaW5zZXJ0LT5uZXh0ID0gbGVmdDsKKwkgIGxlZnQgPSBsZWZ0LT5uZXh0OworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpbnNlcnQgPSBpbnNlcnQtPm5leHQgPSByaWdodDsKKwkgIHJpZ2h0ID0gcmlnaHQtPm5leHQ7CisJfQorICAgIH0KKworICBpbnNlcnQtPm5leHQgPSBsZWZ0ID8gbGVmdCA6IHJpZ2h0OworCisgIHJldHVybiBtZXJnZWQubmV4dDsKK30KKworLyogUGVyZm9ybSBhIGRlc3RydWN0aXZlIHF1aWNrc29ydCBvbiB0aGUgaXRlbXMgaW4gU0xJU1QsIGJ5IHJlcGVhdGVkbHkKKyAgIGNhbGxpbmcgQ09NUEFSRSB3aXRoIGEgcGFpciBvZiBpdGVtcyBmcm9tIFNMSVNUIGFsb25nIHdpdGggVVNFUkRBVEEKKyAgIGF0IGV2ZXJ5IGl0ZXJhdGlvbi4gIENPTVBBUkUgaXMgYSBmdW5jdGlvbiBhcyBkZWZpbmVkIGFib3ZlIGZvcgorICAgc2xpc3Rfc29ydF9tZXJnZSgpLiAgVGhlIHZhbHVlIG9mIFNMSVNUIGlzIHVuZGVmaW5lZCBhZnRlciBjYWxsaW5nCisgICB0aGlzIGZ1bmN0aW9uLgorCisgICBlLmcuICBzbGlzdCA9IHNsaXN0X3NvcnQgKHNsaXN0LCBjb21wYXJlLCAwKTsgICovCitTTGlzdCAqCitzbGlzdF9zb3J0IChTTGlzdCAqc2xpc3QsIFNMaXN0Q29tcGFyZSAqY29tcGFyZSwgdm9pZCAqdXNlcmRhdGEpCit7CisgIFNMaXN0ICpsZWZ0LCAqcmlnaHQ7CisKKyAgaWYgKCFzbGlzdCkKKyAgICByZXR1cm4gc2xpc3Q7CisKKyAgLyogQmUgc3VyZSB0aGF0IExFRlQgYW5kIFJJR0hUIG5ldmVyIGNvbnRhaW4gdGhlIHNhbWUgaXRlbS4gICovCisgIGxlZnQgPSBzbGlzdDsKKyAgcmlnaHQgPSBzbGlzdC0+bmV4dDsKKworICBpZiAoIXJpZ2h0KQorICAgIHJldHVybiBsZWZ0OworCisgIC8qIFNraXAgdHdvIGl0ZW1zIHdpdGggUklHSFQgYW5kIG9uZSB3aXRoIFNMSVNULCB1bnRpbCBSSUdIVCBmYWxscyBvZmYKKyAgICAgdGhlIGVuZC4gIFNMSVNUIG11c3QgYmUgYWJvdXQgaGFsZiB3YXkgYWxvbmcuICAqLworICB3aGlsZSAocmlnaHQgJiYgKHJpZ2h0ID0gcmlnaHQtPm5leHQpKQorICAgIHsKKyAgICAgIGlmICghcmlnaHQgfHwgIShyaWdodCA9IHJpZ2h0LT5uZXh0KSkKKwlicmVhazsKKyAgICAgIHNsaXN0ID0gc2xpc3QtPm5leHQ7CisgICAgfQorICByaWdodCA9IHNsaXN0LT5uZXh0OworICBzbGlzdC0+bmV4dCA9IDA7CisKKyAgLyogU29ydCBMRUZUIGFuZCBSSUdIVCwgdGhlbiBtZXJnZSB0aGUgdHdvLiAgKi8KKyAgcmV0dXJuIHNsaXN0X3NvcnRfbWVyZ2UgKHNsaXN0X3NvcnQgKGxlZnQsIGNvbXBhcmUsIHVzZXJkYXRhKSwKKwkJCSAgIHNsaXN0X3NvcnQgKHJpZ2h0LCBjb21wYXJlLCB1c2VyZGF0YSksCisJCQkgICBjb21wYXJlLCB1c2VyZGF0YSk7Cit9CisKKworLyogQXNpZGUgZnJvbSB1c2luZyB0aGUgZnVuY3Rpb25zIGFib3ZlIHRvIG1hbmFnZSBjaGFpbmVkIHN0cnVjdHVyZXMgb2YKKyAgIGFueSB0eXBlIHRoYXQgaGFzIGEgTkVYVCBwb2ludGVyIGFzIGl0cyBmaXJzdCBmaWVsZCwgU0xJU1RzIGNhbgorICAgYmUgY29tcHJpc2VkIG9mIGJveGVkIGl0ZW1zLiAgVGhlIGJveGVzIGFyZSBjaGFpbmVkIHRvZ2V0aGVyIGluCisgICB0aGF0IGNhc2UsIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgTkVYVCBmaWVsZCBpbiB0aGUgaXRlbSBwcm9wZXIuCisgICBTb21lIGNhcmUgbXVzdCBiZSB0YWtlbiB0byBzbGlzdF9ib3ggYW5kIHNsaXN0X3VuYm94IGVhY2ggaXRlbSBpbgorICAgYSBib3hlZCBsaXN0IGF0IHRoZSBhcHByb3ByaWF0ZSBwb2ludHMgdG8gYXZvaWQgbGVha2luZyB0aGUgbWVtb3J5CisgICB1c2VkIGZvciB0aGUgYm94ZXMuICBJdCB1cyB1c3VhbGx5IGEgdmVyeSBiYWQgaWRlYSB0byBtaXggYm94ZWQgYW5kCisgICBub24tYm94ZWQgaXRlbXMgaW4gYSBzaW5nbGUgbGlzdC4gICovCisKKy8qIFJldHVybiBhIGBib3hlZCcgZnJlc2hseSBtYWxsb2NhdGVkIDEgZWxlbWVudCBsaXN0IGNvbnRhaW5pbmcKKyAgIFVTRVJEQVRBLiAgKi8KK1NMaXN0ICoKK3NsaXN0X2JveCAoY29uc3Qgdm9pZCAqdXNlcmRhdGEpCit7CisgIFNMaXN0ICppdGVtID0gKFNMaXN0ICopIG1hbGxvYyAoc2l6ZW9mICppdGVtKTsKKworICBpZiAoaXRlbSkKKyAgICB7CisgICAgICBpdGVtLT5uZXh0ICAgICA9IDA7CisgICAgICBpdGVtLT51c2VyZGF0YSA9IHVzZXJkYXRhOworICAgIH0KKworICByZXR1cm4gaXRlbTsKK30KKworLyogUmV0dXJuIHRoZSBjb250ZW50cyBvZiBhIGBib3hlZCcgSVRFTSwgcmVjeWNsaW5nIHRoZSBib3ggaXRzZWxmLiAgKi8KK3ZvaWQgKgorc2xpc3RfdW5ib3ggKFNMaXN0ICppdGVtKQoreworICB2b2lkICp1c2VyZGF0YSA9IDA7CisKKyAgaWYgKGl0ZW0pCisgICAgeworICAgICAgLyogU3RyaXAgdGhlIGNvbnN0LCBiZWNhdXNlIHJlc3BvbnNpYmlsaXR5IGZvciB0aGlzIG1lbW9yeQorCSBwYXNzZXMgdG8gdGhlIGNhbGxlciBvbiByZXR1cm4uICAqLworICAgICAgdXNlcmRhdGEgPSAodm9pZCAqKSBpdGVtLT51c2VyZGF0YTsKKyAgICAgIGZyZWUgKGl0ZW0pOworICAgIH0KKworICByZXR1cm4gdXNlcmRhdGE7Cit9CmRpZmYgLS1naXQgYS9zaGFyZS9sb2NhbGUvZGEvTENfTUVTU0FHRVMvZ2F3ay5tbyBiL3NoYXJlL2xvY2FsZS9kYS9MQ19NRVNTQUdFUy9nYXdrLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiOTI5NzkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvZGEvTENfTUVTU0FHRVMvZ2F3ay5tbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zaGFyZS9sb2NhbGUvZGUvTENfTUVTU0FHRVMvZ2F3ay5tbyBiL3NoYXJlL2xvY2FsZS9kZS9MQ19NRVNTQUdFUy9nYXdrLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiY2I1ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvZGUvTENfTUVTU0FHRVMvZ2F3ay5tbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zaGFyZS9sb2NhbGUvZXMvTENfTUVTU0FHRVMvZ2F3ay5tbyBiL3NoYXJlL2xvY2FsZS9lcy9MQ19NRVNTQUdFUy9nYXdrLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMWNjMGMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvZXMvTENfTUVTU0FHRVMvZ2F3ay5tbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zaGFyZS9sb2NhbGUvZmkvTENfTUVTU0FHRVMvZ2F3ay5tbyBiL3NoYXJlL2xvY2FsZS9maS9MQ19NRVNTQUdFUy9nYXdrLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NWQwMDEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvZmkvTENfTUVTU0FHRVMvZ2F3ay5tbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zaGFyZS9sb2NhbGUvZnIvTENfTUVTU0FHRVMvZ2F3ay5tbyBiL3NoYXJlL2xvY2FsZS9mci9MQ19NRVNTQUdFUy9nYXdrLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YmU1ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvZnIvTENfTUVTU0FHRVMvZ2F3ay5tbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zaGFyZS9sb2NhbGUvaXQvTENfTUVTU0FHRVMvZ2F3ay5tbyBiL3NoYXJlL2xvY2FsZS9pdC9MQ19NRVNTQUdFUy9nYXdrLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMzA4MWUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvaXQvTENfTUVTU0FHRVMvZ2F3ay5tbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zaGFyZS9sb2NhbGUvamEvTENfTUVTU0FHRVMvZ2F3ay5tbyBiL3NoYXJlL2xvY2FsZS9qYS9MQ19NRVNTQUdFUy9nYXdrLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MzIwMDQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvamEvTENfTUVTU0FHRVMvZ2F3ay5tbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zaGFyZS9sb2NhbGUvbmwvTENfTUVTU0FHRVMvZ2F3ay5tbyBiL3NoYXJlL2xvY2FsZS9ubC9MQ19NRVNTQUdFUy9nYXdrLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2Zjc1MTUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvbmwvTENfTUVTU0FHRVMvZ2F3ay5tbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zaGFyZS9sb2NhbGUvcGwvTENfTUVTU0FHRVMvZ2F3ay5tbyBiL3NoYXJlL2xvY2FsZS9wbC9MQ19NRVNTQUdFUy9nYXdrLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2OGU2YmUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvcGwvTENfTUVTU0FHRVMvZ2F3ay5tbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zaGFyZS9sb2NhbGUvc3YvTENfTUVTU0FHRVMvZ2F3ay5tbyBiL3NoYXJlL2xvY2FsZS9zdi9MQ19NRVNTQUdFUy9nYXdrLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYjM4NzUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvc3YvTENfTUVTU0FHRVMvZ2F3ay5tbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zaGFyZS9tYW4vbWFuMS9wa2ctY29uZmlnLjEgYi9zaGFyZS9tYW4vbWFuMS9wa2ctY29uZmlnLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA5Y2Y1ZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL21hbi9tYW4xL3BrZy1jb25maWcuMQpAQCAtMCwwICsxLDQ2OCBAQAorLlwiIAorLlwiIHBrZy1jb25maWcgbWFudWFsIHBhZ2UuCisuXCIgKEMpIFJlZCBIYXQsIEluYy4gYmFzZWQgb24gZ25vbWUtY29uZmlnIG1hbiBwYWdlIChDKSBNaWd1ZWwgZGUgSWNhemEgKG1pZ3VlbEBnbnUub3JnKQorLlwiCisuCisuXCIgTWFjcm9zIHRvIGRpc2FibGUgZ3JvZmYgbGluZSBhZGp1c3RtZW50IHdhcm5pbmdzIHRoYXQgd2UgY2FuJ3QgZWFzaWx5CisuXCIgZml4IGluIHRoZSB0ZXh0LgorLmllIFxuKC5nIFx7XAorLiAgZGUgRFcKKy4gICAgbnIgLm9sZHdhcm4gXG5bLndhcm5dCisuICAgIHdhcm4gMAorLiAgLgorLiAgZGUgRVcKKy4gICAgd2FybiBcblsub2xkd2Fybl0KKy4gIC4KKy5cfQorLmVsIFwKKy5ceyBcCisuICBkZSBEVworLiAgLgorLiAgZGUgRVcKKy4gIC4KKy5cfQorLgorLlRIIHBrZy1jb25maWcgMQorLlNIIE5BTUUKK3BrZy1jb25maWcgXC0gUmV0dXJuIG1ldGFpbmZvcm1hdGlvbiBhYm91dCBpbnN0YWxsZWQgbGlicmFyaWVzCisuU0ggU1lOT1BTSVMKKy5QUAorLkIgcGtnLWNvbmZpZworW1wtXC1tb2R2ZXJzaW9uXSBbXC1cLWhlbHBdIFtcLVwtcHJpbnQtZXJyb3JzXSBbXC1cLXNpbGVuY2UtZXJyb3JzXSAKK1tcLVwtY2ZsYWdzXSBbXC1cLWxpYnNdIFtcLVwtbGlicy1vbmx5LUxdCitbXC1cLWxpYnMtb25seS1sXSBbXC1cLWNmbGFncy1vbmx5LUldCitbXC1cLXZhcmlhYmxlPVZBUklBQkxFTkFNRV0KK1tcLVwtZGVmaW5lLXZhcmlhYmxlPVZBUklBQkxFTkFNRT1WQVJJQUJMRVZBTFVFXQorW1wtXC1wcmludC12YXJpYWJsZXNdCitbXC1cLXVuaW5zdGFsbGVkXQorW1wtXC1leGlzdHNdIFtcLVwtYXRsZWFzdC12ZXJzaW9uPVZFUlNJT05dIFtcLVwtZXhhY3QtdmVyc2lvbj1WRVJTSU9OXQorW1wtXC1tYXgtdmVyc2lvbj1WRVJTSU9OXSBbXC1cLWxpc3RcLWFsbF0gW0xJQlJBUklFUy4uLl0KK1tcLVwtcHJpbnQtcHJvdmlkZXNdIFtcLVwtcHJpbnQtcmVxdWlyZXNdIFtcLVwtcHJpbnQtcmVxdWlyZXMtcHJpdmF0ZV0gW0xJQlJBUklFUy4uLl0KKy5TSCBERVNDUklQVElPTgorCitUaGUgXGZJcGtnLWNvbmZpZ1xmUCBwcm9ncmFtIGlzIHVzZWQgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQKK2luc3RhbGxlZCBsaWJyYXJpZXMgaW4gdGhlIHN5c3RlbS4gIEl0IGlzIHR5cGljYWxseSB1c2VkIHRvIGNvbXBpbGUKK2FuZCBsaW5rIGFnYWluc3Qgb25lIG9yIG1vcmUgbGlicmFyaWVzLiAgSGVyZSBpcyBhIHR5cGljYWwgdXNhZ2UKK3NjZW5hcmlvIGluIGEgTWFrZWZpbGU6CisuUFAKKy5uZgorcHJvZ3JhbTogcHJvZ3JhbS5jCisJY2MgcHJvZ3JhbS5jICQocGtnLWNvbmZpZyAtLWNmbGFncyAtLWxpYnMgZ25vbWV1aSkKKy5maQorLlBQCisuSSBwa2ctY29uZmlnCityZXRyaWV2ZXMgaW5mb3JtYXRpb24gYWJvdXQgcGFja2FnZXMgZnJvbSBzcGVjaWFsIG1ldGFkYXRhCitmaWxlcy4gVGhlc2UgZmlsZXMgYXJlIG5hbWVkIGFmdGVyIHRoZSBwYWNrYWdlLCBhbmQgaGFzIGEKKy5JIC5wYworZXh0ZW5zaW9uLiAgT24gbW9zdCBzeXN0ZW1zLCBcZklwa2ctY29uZmlnXGZQIGxvb2tzIGluCisuSS91c3IvbGliL3BrZ2NvbmZpZywgL3Vzci9zaGFyZS9wa2djb25maWcsIC91c3IvbG9jYWwvbGliL3BrZ2NvbmZpZworYW5kCisuSS91c3IvbG9jYWwvc2hhcmUvcGtnY29uZmlnCisgZm9yIHRoZXNlIGZpbGVzLiAgSXQgd2lsbCBhZGRpdGlvbmFsbHkgbG9vayBpbiB0aGUgY29sb24tc2VwYXJhdGVkCisob24gV2luZG93cywgc2VtaWNvbG9uLXNlcGFyYXRlZCkgbGlzdCBvZiBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgdGhlCitQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUuCisuUFAKK1RoZSBwYWNrYWdlIG5hbWUgc3BlY2lmaWVkIG9uIHRoZSBcZklwa2ctY29uZmlnXGZQIGNvbW1hbmQgbGluZSBpcworZGVmaW5lZCB0byBiZSB0aGUgbmFtZSBvZiB0aGUgbWV0YWRhdGEgZmlsZSwgbWludXMgdGhlIFxmSS5wY1xmUAorZXh0ZW5zaW9uLiBJZiBhIGxpYnJhcnkgY2FuIGluc3RhbGwgbXVsdGlwbGUgdmVyc2lvbnMgc2ltdWx0YW5lb3VzbHksCitpdCBtdXN0IGdpdmUgZWFjaCB2ZXJzaW9uIGl0cyBvd24gbmFtZSAoZm9yIGV4YW1wbGUsIEdUSyAxLjIgbWlnaHQKK2hhdmUgdGhlIHBhY2thZ2UgbmFtZSAiZ3RrKyIgd2hpbGUgR1RLIDIuMCBoYXMgImd0aystMi4wIikuCisuXCIKKy5TSCBPUFRJT05TCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZDoKKy5UUAorLkkgIi0tbW9kdmVyc2lvbiIKK1JlcXVlc3RzIHRoYXQgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gb2YgdGhlIGxpYnJhcmllcyBzcGVjaWZpZWQgb24KK3RoZSBjb21tYW5kIGxpbmUgYmUgZGlzcGxheWVkLiAgSWYgXGZJcGtnLWNvbmZpZ1xmUCBjYW4gZmluZCBhbGwgdGhlCitsaWJyYXJpZXMgb24gdGhlIGNvbW1hbmQgbGluZSwgZWFjaCBsaWJyYXJ5J3MgdmVyc2lvbiBzdHJpbmcgaXMKK3ByaW50ZWQgdG8gc3Rkb3V0LCBvbmUgdmVyc2lvbiBwZXIgbGluZS4gSW4gdGhpcyBjYXNlIFxmSXBrZy1jb25maWdcZlAKK2V4aXRzIHN1Y2Nlc3NmdWxseS4gSWYgb25lIG9yIG1vcmUgbGlicmFyaWVzIGlzIHVua25vd24sCisuSSBwa2ctY29uZmlnCitleGl0cyB3aXRoIGEgbm9uemVybyBjb2RlLCBhbmQgdGhlIGNvbnRlbnRzIG9mIHN0ZG91dCBhcmUgdW5kZWZpbmVkLgorLlRQCisuSSAiLS1oZWxwIgorRGlzcGxheXMgYSBoZWxwIG1lc3NhZ2UgYW5kIHRlcm1pbmF0ZXMuCisuVFAKKy5JICItLXByaW50LWVycm9ycyIKK0lmIG9uZSBvciBtb3JlIG9mIHRoZSBtb2R1bGVzIG9uIHRoZSBjb21tYW5kIGxpbmUsIG9yIHRoZWlyCitkZXBlbmRlbmNpZXMsIGFyZSBub3QgZm91bmQsIG9yIGlmIGFuIGVycm9yIG9jY3VycyBpbiBwYXJzaW5nCithIFxmSS5wY1xmUCBmaWxlLCB0aGVuIHRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgZXJyb3JzIGV4cGxhaW5pbmcgdGhlCitwcm9ibGVtIHRvIGJlIHByaW50ZWQuIFdpdGggInByZWRpY2F0ZSIgb3B0aW9ucyBzdWNoIGFzICItLWV4aXN0cyIKKy5JICJwa2ctY29uZmlnIgorcnVucyBzaWxlbnRseSBieSBkZWZhdWx0LCBiZWNhdXNlIGl0J3MgdXN1YWxseSB1c2VkCitpbiBzY3JpcHRzIHRoYXQgd2FudCB0byBjb250cm9sIHdoYXQncyBvdXRwdXQuIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkCithbG9uZSAodG8ganVzdCBwcmludCBlcnJvcnMgZW5jb3VudGVyZWQgbG9jYXRpbmcgbW9kdWxlcyBvbiB0aGUgCitjb21tYW5kIGxpbmUpIG9yIHdpdGggb3RoZXIgb3B0aW9ucy4gVGhlIFBLR19DT05GSUdfREVCVUdfU1BFVworZW52aXJvbm1lbnQgdmFyaWFibGUgb3ZlcnJpZGVzIHRoaXMgb3B0aW9uLgorLlRQCisuSSAiLS1zaWxlbmNlLWVycm9ycyIKK0lmIG9uZSBvciBtb3JlIG9mIHRoZSBtb2R1bGVzIG9uIHRoZSBjb21tYW5kIGxpbmUsIG9yIHRoZWlyCitkZXBlbmRlbmNpZXMsIGFyZSBub3QgZm91bmQsIG9yIGlmIGFuIGVycm9yIG9jY3VycyBpbiBwYXJzaW5nIGEKK2EgXGZJLnBjXGZQIGZpbGUsIHRoZW4gdGhpcyBvcHRpb24gd2lsbCBrZWVwIGVycm9ycyBleHBsYWluaW5nIHRoZQorcHJvYmxlbSBmcm9tIGJlaW5nIHByaW50ZWQuIFdpdGggInByZWRpY2F0ZSIgb3B0aW9ucyBzdWNoIGFzCisiLS1leGlzdHMiIFxmSXBrZy1jb25maWdcZlAgcnVucyBzaWxlbnRseSBieSBkZWZhdWx0LCBiZWNhdXNlIGl0J3MKK3VzdWFsbHkgdXNlZCBpbiBzY3JpcHRzIHRoYXQgd2FudCB0byBjb250cm9sIHdoYXQncyBvdXRwdXQuIFNvIHRoaXMKK29wdGlvbiBpcyBvbmx5IHVzZWZ1bCB3aXRoIG9wdGlvbnMgc3VjaCBhcyAiLS1jZmxhZ3MiIG9yCisiLS1tb2R2ZXJzaW9uIiB0aGF0IHByaW50IGVycm9ycyBieSBkZWZhdWx0LiBUaGUgUEtHX0NPTkZJR19ERUJVR19TUEVXCitlbnZpcm9ubWVudCB2YXJpYWJsZSBvdmVycmlkZXMgdGhpcyBvcHRpb24uCisuVFAKKy5JICItLWVycm9ycy10by1zdGRvdXQiCitJZiBwcmludGluZyBlcnJvcnMsIHByaW50IHRoZW0gdG8gc3Rkb3V0IHJhdGhlciB0aGFuIHRoZSBkZWZhdWx0IHN0ZGVycgorCisuUFAKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgdXNlZCB0byBjb21waWxlIGFuZCBsaW5rIHByb2dyYW1zOgorLlRQCisuSSAiLS1jZmxhZ3MiCitUaGlzIHByaW50cyBwcmUtcHJvY2Vzc29yIGFuZCBjb21waWxlIGZsYWdzIHJlcXVpcmVkIHRvIGNvbXBpbGUgdGhlCitwYWNrYWdlcyBvbiB0aGUgY29tbWFuZCBsaW5lLCBpbmNsdWRpbmcgZmxhZ3MgZm9yIGFsbCB0aGVpcgorZGVwZW5kZW5jaWVzLiBGbGFncyBhcmUgImNvbXByZXNzZWQiIHNvIHRoYXQgZWFjaCBpZGVudGljYWwgZmxhZworYXBwZWFycyBvbmx5IG9uY2UuIFxmSXBrZy1jb25maWdcZlAgZXhpdHMgd2l0aCBhIG5vbnplcm8gY29kZSBpZiBpdAorY2FuJ3QgZmluZCBtZXRhZGF0YSBmb3Igb25lIG9yIG1vcmUgb2YgdGhlIHBhY2thZ2VzIG9uIHRoZSBjb21tYW5kCitsaW5lLgorLlRQCisuSSAiLS1jZmxhZ3Mtb25seS1JIgorVGhpcyBwcmludHMgdGhlIC1JIHBhcnQgb2YgIi0tY2ZsYWdzIi4gVGhhdCBpcywgaXQgZGVmaW5lcyB0aGUgaGVhZGVyCitzZWFyY2ggcGF0aCBidXQgZG9lc24ndCBzcGVjaWZ5IGFueXRoaW5nIGVsc2UuCisuVFAgCisuSSAiLS1saWJzIgorVGhpcyBvcHRpb24gaXMgaWRlbnRpY2FsIHRvICItLWNmbGFncyIsIG9ubHkgaXQgcHJpbnRzIHRoZSBsaW5rCitmbGFncy4gQXMgd2l0aCAiLS1jZmxhZ3MiLCBkdXBsaWNhdGUgZmxhZ3MgYXJlIG1lcmdlZCAobWFpbnRhaW5pbmcKK3Byb3BlciBvcmRlcmluZyksIGFuZCBmbGFncyBmb3IgZGVwZW5kZW5jaWVzIGFyZSBpbmNsdWRlZCBpbiB0aGUKK291dHB1dC4KKy5UUAorLkkgIi0tbGlicy1vbmx5LUwiCitUaGlzIHByaW50cyB0aGUgLUwvLVIgcGFydCBvZiAiLS1saWJzIi4gVGhhdCBpcywgaXQgZGVmaW5lcyB0aGUgCitsaWJyYXJ5IHNlYXJjaCBwYXRoIGJ1dCBkb2Vzbid0IHNwZWNpZnkgd2hpY2ggbGlicmFyaWVzIHRvIGxpbmsgd2l0aC4KKy5UUAorLkkgIi0tbGlicy1vbmx5LWwiCitUaGlzIHByaW50cyB0aGUgLWwgcGFydCBvZiAiLS1saWJzIiBmb3IgdGhlIGxpYnJhcmllcyBzcGVjaWZpZWQgb24KK3RoZSBjb21tYW5kIGxpbmUuIE5vdGUgdGhhdCB0aGUgdW5pb24gb2YgIi0tbGlicy1vbmx5LWwiIGFuZAorIi0tbGlicy1vbmx5LUwiIG1heSBiZSBzbWFsbGVyIHRoYW4gIi0tbGlicyIsIGR1ZSB0byBmbGFncyBzdWNoIGFzCistcmR5bmFtaWMuCisuVFAKKy5JICItLXZhcmlhYmxlPVZBUklBQkxFTkFNRSIKK1RoaXMgcmV0dXJucyB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZSBkZWZpbmVkIGluIGEgcGFja2FnZSdzIFxmSS5wY1xmUAorZmlsZS4gTW9zdCBwYWNrYWdlcyBkZWZpbmUgdGhlIHZhcmlhYmxlICJwcmVmaXgiLCBmb3IgZXhhbXBsZSwgc28geW91IAorY2FuIHNheToKKy5uZgorICAkIHBrZy1jb25maWcgLS12YXJpYWJsZT1wcmVmaXggZ2xpYi0yLjAKKyAgL3Vzci8KKy5maQorLlRQCisuSSAiLS1kZWZpbmUtdmFyaWFibGU9VkFSSUFCTEVOQU1FPVZBUklBQkxFVkFMVUUiCitUaGlzIHNldHMgYSBnbG9iYWwgdmFsdWUgZm9yIGEgdmFyaWFibGUsIG92ZXJyaWRpbmcgdGhlIHZhbHVlIGluIGFueQorLkkucGMKK2ZpbGVzLiBNb3N0IHBhY2thZ2VzIGRlZmluZSB0aGUgdmFyaWFibGUgInByZWZpeCIsIGZvciBleGFtcGxlLCBzbyB5b3UKK2NhbiBzYXk6CisubmYKKyAgJCBwa2ctY29uZmlnIC0tcHJpbnQtZXJyb3JzIC0tZGVmaW5lLXZhcmlhYmxlPXByZWZpeD0vZm9vIFxlCisgICAgICAgICAgICAgICAtLXZhcmlhYmxlPXByZWZpeCBnbGliLTIuMAorICAvZm9vCisuZmkKKy5UUAorLkkgIi0tcHJpbnQtdmFyaWFibGVzIgorUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHZhcmlhYmxlcyBkZWZpbmVkIGluIHRoZSBwYWNrYWdlLgorCisuVFAKKy5JICItLXVuaW5zdGFsbGVkIgorTm9ybWFsbHkgaWYgeW91IHJlcXVlc3QgdGhlIHBhY2thZ2UgImZvbyIgYW5kIHRoZSBwYWNrYWdlCisiZm9vLXVuaW5zdGFsbGVkIiBleGlzdHMsIFxmSXBrZy1jb25maWdcZlAgd2lsbCBwcmVmZXIgdGhlIAorIi11bmluc3RhbGxlZCIgdmFyaWFudC4gVGhpcyBhbGxvd3MgY29tcGlsYXRpb24vbGlua2luZyBhZ2FpbnN0Cit1bmluc3RhbGxlZCBwYWNrYWdlcy4gSWYgeW91IHNwZWNpZnkgdGhlICItLXVuaW5zdGFsbGVkIiBvcHRpb24sCisuSSBwa2ctY29uZmlnCit3aWxsIHJldHVybiBzdWNjZXNzZnVsbHkgaWYgYW55ICItdW5pbnN0YWxsZWQiIHBhY2thZ2VzIGFyZSBiZWluZwordXNlZCwgYW5kIHJldHVybiBmYWlsdXJlIChmYWxzZSkgb3RoZXJ3aXNlLiAgKFRoZQorUEtHX0NPTkZJR19ESVNBQkxFX1VOSU5TVEFMTEVEIGVudmlyb25tZW50IHZhcmlhYmxlIGtlZXBzCisuSSBwa2ctY29uZmlnCitmcm9tIGltcGxpY2l0bHkgY2hvb3NpbmcgIi11bmluc3RhbGxlZCIgcGFja2FnZXMsIHNvIGlmIHRoYXQgdmFyaWFibGUKK2lzIHNldCwgdGhleSB3aWxsIG9ubHkgaGF2ZSBiZWVuIHVzZWQgaWYgeW91IHBhc3MgYSBuYW1lIGxpa2UKKyJmb28tdW5pbnN0YWxsZWQiIG9uIHRoZSBjb21tYW5kIGxpbmUgZXhwbGljaXRseS4pCisuVFAKKy5JICItLWV4aXN0cyIKKy5UUAorLkkgIi0tYXRsZWFzdC12ZXJzaW9uPVZFUlNJT04iCisuVFAKKy5JICItLWV4YWN0LXZlcnNpb249VkVSU0lPTiIKKy5UUAorLkkgIi0tbWF4LXZlcnNpb249VkVSU0lPTiIKK1RoZXNlIG9wdGlvbnMgdGVzdCB3aGV0aGVyIHRoZSBwYWNrYWdlIG9yIGxpc3Qgb2YgcGFja2FnZXMgb24gdGhlCitjb21tYW5kIGxpbmUgYXJlIGtub3duIHRvIFxmSXBrZy1jb25maWdcZlAsIGFuZCBvcHRpb25hbGx5IHdoZXRoZXIgdGhlCit2ZXJzaW9uIG51bWJlciBvZiBhIHBhY2thZ2UgbWVldHMgY2VydGFpbiBjb250cmFpbnRzLiAgSWYgYWxsIHBhY2thZ2VzCitleGlzdCBhbmQgbWVldCB0aGUgc3BlY2lmaWVkIHZlcnNpb24gY29uc3RyYWludHMsCisuSSBwa2ctY29uZmlnCitleGl0cyBzdWNjZXNzZnVsbHkuIE90aGVyd2lzZSBpdCBleGl0cyB1bnN1Y2Nlc3NmdWxseS4KKworUmF0aGVyIHRoYW4gdXNpbmcgdGhlIHZlcnNpb24tdGVzdCBvcHRpb25zLCB5b3UgY2FuIHNpbXBseSBnaXZlIGEgdmVyc2lvbgorY29uc3RyYWludCBhZnRlciBlYWNoIHBhY2thZ2UgbmFtZSwgZm9yIGV4YW1wbGU6CisubmYKKyAgJCBwa2ctY29uZmlnIC0tZXhpc3RzICdnbGliLTIuMCA+PSAxLjMuNCBsaWJ4bWwgPSAxLjguMycKKy5maQorUmVtZW1iZXIgdG8gdXNlIFwtXC1wcmludC1lcnJvcnMgaWYgeW91IHdhbnQgZXJyb3IgbWVzc2FnZXMuCisuVFAKKy5JICItLW1zdmMtc3ludGF4IgorVGhpcyBvcHRpb24gaXMgYXZhaWxhYmxlIG9ubHkgb24gV2luZG93cy4gSXQgY2F1c2VzIFxmSXBrZy1jb25maWdcZlAKK3RvIG91dHB1dCAtbCBhbmQgLUwgZmxhZ3MgaW4gdGhlIGZvcm0gcmVjb2duaXplZCBieSB0aGUgTWljcm9zb2Z0CitWaXN1YWwgQysrIGNvbW1hbmQtbGluZSBjb21waWxlciwgXGZJY2xcZlAuIFNwZWNpZmljYWxseSwgaW5zdGVhZCBvZgorLkktTHg6L3NvbWUvcGF0aAoraXQgcHJpbnRzIFxmSS9saWJwYXRoOngvc29tZS9wYXRoXGZQLCBhbmQgaW5zdGVhZCBvZiBcZkktbGZvb1xmUCBpdAorcHJpbnRzIFxmSWZvby5saWJcZlAuIE5vdGUgdGhhdCB0aGUgLS1saWJzIG91dHB1dCBjb25zaXN0cyBvZiBmbGFncworZm9yIHRoZSBsaW5rZXIsIGFuZCBzaG91bGQgYmUgcGxhY2VkIG9uIHRoZSBjbCBjb21tYW5kIGxpbmUgYWZ0ZXIgYQorL2xpbmsgc3dpdGNoLgorLlRQCisuSSAiLS1kb250LWRlZmluZS1wcmVmaXgiCitUaGlzIG9wdGlvbiBpcyBhdmFpbGFibGUgb25seSBvbiBXaW5kb3dzLiBJdCBwcmV2ZW50cyBcZklwa2ctY29uZmlnXGZQCitmcm9tIGF1dG9tYXRpY2FsbHkgdHJ5aW5nIHRvIG92ZXJyaWRlIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUKKyJwcmVmaXgiIGluIGVhY2ggLnBjIGZpbGUuCisuVFAKKy5JICItLXByZWZpeC12YXJpYWJsZT1QUkVGSVgiCitBbHNvIHRoaXMgb3B0aW9uIGlzIGF2YWlsYWJsZSBvbmx5IG9uIFdpbmRvd3MuIEl0IHNldHMgdGhlIG5hbWUgb2YgdGhlCit2YXJpYWJsZSB0aGF0IFxmSXBrZy1jb25maWdcZlAgYXV0b21hdGljYWxseSBzZXRzIGFzIGRlc2NyaWJlZCBhYm92ZS4KKy5UUAorLkkgIi0tc3RhdGljIgorT3V0cHV0IGxpYnJhcmllcyBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcuICBUaGF0IG1lYW5zIGluY2x1ZGluZworYW55IHByaXZhdGUgbGlicmFyaWVzIGluIHRoZSBvdXRwdXQuICBUaGlzIHJlbGllcyBvbiBwcm9wZXIgdGFnZ2luZyBpbgordGhlIC5wYyBmaWxlcywgZWxzZSBhIHRvbyBsYXJnZSBudW1iZXIgb2YgbGlicmFyaWVzIHdpbGwgb3JkaW5hcmlseSBiZQorb3V0cHV0LgorLlRQCisuSSAiLS1saXN0LWFsbCIKK0xpc3QgYWxsIG1vZHVsZXMgZm91bmQgaW4gdGhlIFxmSXBrZy1jb25maWdcZlAgcGF0aC4KKy5UUAorLUkgIi0tcHJpbnQtcHJvdmlkZXMiCitMaXN0IGFsbCBtb2R1bGVzIHRoZSBnaXZlbiBwYWNrYWdlcyBwcm92aWRlcy4KKy5UUAorLkkgIi0tcHJpbnQtcmVxdWlyZXMiCitMaXN0IGFsbCBtb2R1bGVzIHRoZSBnaXZlbiBwYWNrYWdlcyByZXF1aXJlcy4KKy5UUAorLkkgIi0tcHJpbnQtcmVxdWlyZXMtcHJpdmF0ZSIKK0xpc3QgYWxsIG1vZHVsZXMgdGhlIGdpdmVuIHBhY2thZ2VzIHJlcXVpcmVzIGZvciBzdGF0aWMgbGlua2luZyAoc2VlIC0tc3RhdGljKS4KKy5cIgorLlNIIEVOVklST05NRU5UIFZBUklBQkxFUworLlRQCisuSSAiUEtHX0NPTkZJR19QQVRIIgorQSBjb2xvbi1zZXBhcmF0ZWQgKG9uIFdpbmRvd3MsIHNlbWljb2xvbi1zZXBhcmF0ZWQpIGxpc3Qgb2YKK2RpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgLnBjIGZpbGVzLiAgVGhlIGRlZmF1bHQgZGlyZWN0b3J5IHdpbGwKK2Fsd2F5cyBiZSBzZWFyY2hlZCBhZnRlciBzZWFyY2hpbmcgdGhlIHBhdGg7IHRoZSBkZWZhdWx0IGlzCisuSSBcJWxpYmRpci9cZlBwa2djb25maWc6XGZJZGF0YWRpclxmUC9wa2djb25maWcgd2hlcmUgXGZJbGliZGlyXGZQIGlzCit0aGUgbGliZGlyIGZvciBcZklwa2ctY29uZmlnXGZQIGFuZCBcZklkYXRhZGlyXGZQIGlzIHRoZSBkYXRhZGlyCitmb3IgXGZJcGtnLWNvbmZpZ1xmUCB3aGVuIGl0IHdhcyBpbnN0YWxsZWQuCisuVFAKKy5JICJQS0dfQ09ORklHX0RFQlVHX1NQRVciCitJZiBzZXQsIGNhdXNlcyBcZklwa2ctY29uZmlnXGZQIHRvIHByaW50IGFsbCBraW5kcyBvZgorZGVidWdnaW5nIGluZm9ybWF0aW9uIGFuZCByZXBvcnQgYWxsIGVycm9ycy4KKy5UUAorLkkgIlBLR19DT05GSUdfVE9QX0JVSUxEX0RJUiIKK0EgdmFsdWUgdG8gc2V0IGZvciB0aGUgbWFnaWMgdmFyaWFibGUgXGZJcGNfdG9wX2J1aWxkZGlyXGZQCit3aGljaCBtYXkgYXBwZWFyIGluIFxmSS5wY1xmUCBmaWxlcy4gSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGlzCitub3Qgc2V0LCB0aGUgZGVmYXVsdCB2YWx1ZSAnJCh0b3BfYnVpbGRkaXIpJyB3aWxsIGJlIHVzZWQuIFRoaXMKK3ZhcmlhYmxlIHNob3VsZCByZWZlciB0byB0aGUgdG9wIGJ1aWxkZGlyIG9mIHRoZSBNYWtlZmlsZSB3aGVyZSB0aGUgCitjb21waWxlL2xpbmsgZmxhZ3MgcmVwb3J0ZWQgYnkgXGZJcGtnLWNvbmZpZ1xmUCB3aWxsIGJlIHVzZWQuCitUaGlzIG9ubHkgbWF0dGVycyB3aGVuIGNvbXBpbGluZy9saW5raW5nIGFnYWluc3QgYSBwYWNrYWdlIHRoYXQgaGFzbid0Cit5ZXQgYmVlbiBpbnN0YWxsZWQuCisuVFAKKy5JICJQS0dfQ09ORklHX0RJU0FCTEVfVU5JTlNUQUxMRUQiCitOb3JtYWxseSBpZiB5b3UgcmVxdWVzdCB0aGUgcGFja2FnZSAiZm9vIiBhbmQgdGhlIHBhY2thZ2UKKyJmb28tdW5pbnN0YWxsZWQiIGV4aXN0cywgXGZJcGtnLWNvbmZpZ1xmUCB3aWxsIHByZWZlciB0aGUgCisiLXVuaW5zdGFsbGVkIiB2YXJpYW50LiBUaGlzIGFsbG93cyBjb21waWxhdGlvbi9saW5raW5nIGFnYWluc3QKK3VuaW5zdGFsbGVkIHBhY2thZ2VzLiAgSWYgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIGl0CitkaXNhYmxlcyBzYWlkIGJlaGF2aW9yLgorLlRQCisuSSAiUEtHX0NPTkZJR19BTExPV19TWVNURU1fQ0ZMQUdTIgorRG9uJ3Qgc3RyaXAgLUkvdXNyL2luY2x1ZGUgb3V0IG9mIGNmbGFncy4KKy5UUAorLkkgIlBLR19DT05GSUdfQUxMT1dfU1lTVEVNX0xJQlMiCitEb24ndCBzdHJpcCAtTC91c3IvbGliIG91dCBvZiBsaWJzCisuVFAKKy5JICJQS0dfQ09ORklHX1NZU1JPT1RfRElSIgorTW9kaWZ5IC1JIGFuZCAtTCB0byB1c2UgdGhlIGRpcmVjdG9yaWVzIGxvY2F0ZWQgaW4gdGFyZ2V0IHN5c3Jvb3QuCit0aGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiBjcm9zc2NvbXBpbGluZyBwYWNrYWdlIHRoYXQgdXNlIHBrZy1jb25maWcKK3RvIGRldGVybWluZSBDRkxBR1MgYW5mIExERkxBR1MuIC1JIGFuZCAtTCBhcmUgbW9kaWZpZWQgdG8gcG9pbnQgdG8gCit0aGUgbmV3IHN5c3RlbSByb290LiB0aGlzIG1lYW5zIHRoYXQgYSAtSS91c3IvaW5jbHVkZS9saWJmb28gd2lsbAorYmVjb21lIC1JL3Zhci90YXJnZXQvdXNyL2luY2x1ZGUvbGliZm9vIHdpdGggYSBQS0dfQ09ORklHX1NZU1JPT1RfRElSCitlcXVhbCB0byAvdmFyL3RhcmdldCAoc2FtZSBydWxlIGFwcGx5IHRvIC1MKQorLlRQCisuSSAiUEtHX0NPTkZJR19MSUJESVIiCitSZXBsYWNlcyB0aGUgZGVmYXVsdCBcZklwa2ctY29uZmlnXGZQIHNlYXJjaCBkaXJlY3RvcnksIHVzdWFsbHkgXGZJL3Vzci9saWIvcGtnY29uZmlnXGZQCisuXCIKKy5TSCBRVUVSWUlORyBQS0ctQ09ORklHJ1MgREVGQVVMVFMKKy5JIHBrZy1jb25maWdcZlAgY2FuIGJlIHVzZWQgdG8gcXVlcnkgaXRzZWxmIGZvciB0aGUgZGVmYXVsdCBzZWFyY2ggcGF0aCwgdmVyc2lvbiBudW1iZXIgYW5kIG90aGVyIGluZm9ybWF0aW9uLCBmb3IgaW5zdGFuY2UgdXNpbmc6CisubmYKKyAgJCBwa2ctY29uZmlnIC0tdmFyaWFibGUgcGNfcGF0aCBwa2ctY29uZmlnCisuZmkKK29yCisubmYKKyAgJCBwa2ctY29uZmlnIC0tbW9kdmVyc2lvbiBwa2ctY29uZmlnCisuZmkKKy5TSCBXSU5ET1dTIFNQRUNJQUxJVElFUworSWYgYSAucGMgZmlsZSBpcyBmb3VuZCBpbiBhIGRpcmVjdG9yeSB0aGF0IG1hdGNoZXMgdGhlIHVzdWFsCitjb252ZW50aW9ucyAoaS5lLiwgZW5kcyB3aXRoIFxcbGliXFxwa2djb25maWcgb3IgXFxzaGFyZVxccGtnY29uZmlnKSwKK3RoZSBwcmVmaXggZm9yIHRoYXQgcGFja2FnZSBpcyBhc3N1bWVkIHRvIGJlIHRoZSBncmFuZHBhcmVudCBvZiB0aGUKK2RpcmVjdG9yeSB3aGVyZSB0aGUgZmlsZSB3YXMgZm91bmQsIGFuZCB0aGUgXGZJcHJlZml4XGZQIHZhcmlhYmxlIGlzCitvdmVycmlkZGVuIGZvciB0aGF0IGZpbGUgYWNjb3JkaW5nbHkuCisKK0lmIHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlIGluIGEgLnBjIGZpbGUgYmVnaW5zIHdpdGggdGhlIG9yaWdpbmFsLAorbm9uLW92ZXJyaWRkZW4sIHZhbHVlIG9mIHRoZSBcZklwcmVmaXhcZlAgdmFyaWFibGUsIHRoZW4gdGhlIG92ZXJyaWRkZW4KK3ZhbHVlIG9mIFxmSXByZWZpeFxmUCBpcyB1c2VkIGluc3RlYWQuCisuXCIKKy5TSCBBVVRPQ09ORiBNQUNST1MKKy5UUAorLkkgIlBLR19DSEVDS19NT0RVTEVTKFZBUklBQkxFLVBSRUZJWCwgTU9EVUxFUyBbLEFDVElPTi1JRi1GT1VORCBbLEFDVElPTi1JRi1OT1QtRk9VTkRdXSkiCisKK1RoZSBtYWNybyBQS0dfQ0hFQ0tfTU9EVUxFUyBjYW4gYmUgdXNlZCBpbiBcZkljb25maWd1cmUuYWNcZlAgdG8gCitjaGVjayB3aGV0aGVyIG1vZHVsZXMgZXhpc3QuIEEgdHlwaWNhbCB1c2FnZSB3b3VsZCBiZToKKy5uZgorIFBLR19DSEVDS19NT0RVTEVTKFtNWVNUVUZGXSwgW2d0aystMi4wID49IDEuMy41IGxpYnhtbCA9IDEuOC40XSkKKy5maQorCitUaGlzIHdvdWxkIHJlc3VsdCBpbiBNWVNUVUZGX0xJQlMgYW5kIE1ZU1RVRkZfQ0ZMQUdTIHN1YnN0aXR1dGlvbgordmFyaWFibGVzLCBzZXQgdG8gdGhlIGxpYnMgYW5kIGNmbGFncyBmb3IgdGhlIGdpdmVuIG1vZHVsZSBsaXN0LiAKK0lmIGEgbW9kdWxlIGlzIG1pc3Npbmcgb3IgaGFzIHRoZSB3cm9uZyB2ZXJzaW9uLCBieSBkZWZhdWx0IGNvbmZpZ3VyZQord2lsbCBhYm9ydCB3aXRoIGEgbWVzc2FnZS4gVG8gcmVwbGFjZSB0aGUgZGVmYXVsdCBhY3Rpb24sIAorc3BlY2lmeSBhbiBcJUFDVElPTi1JRi1OT1QtRk9VTkQuIFwlUEtHX0NIRUNLX01PRFVMRVMgd2lsbCBub3QgcHJpbnQgYW55CitlcnJvciBtZXNzYWdlcyBpZiB5b3Ugc3BlY2lmeSB5b3VyIG93biBBQ1RJT04tSUYtTk9ULUZPVU5ELgorSG93ZXZlciwgaXQgd2lsbCBzZXQgdGhlIHZhcmlhYmxlIE1ZU1RVRkZfUEtHX0VSUk9SUywgd2hpY2ggeW91IGNhbiAKK3VzZSB0byBkaXNwbGF5IHdoYXQgd2VudCB3cm9uZy4KKworTm90ZSB0aGF0IGlmIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhlIGZpcnN0IGNhbGwgdG8KK1BLR19DSEVDS19NT0RVTEVTIG1pZ2h0IG5vdCBoYXBwZW4sIHlvdSBzaG91bGQgYmUgc3VyZSB0byBpbmNsdWRlIGFuCitleHBsaWNpdCBjYWxsIHRvIFBLR19QUk9HX1BLR19DT05GSUcgaW4geW91ciBjb25maWd1cmUuYWMuCisuXCIKKy5UUAorLkkgIlBLR19QUk9HX1BLR19DT05GSUcoW01JTi1WRVJTSU9OXSkiCisKK0RlZmluZXMgdGhlIFBLR19DT05GSUcgdmFyaWFibGUgdG8gdGhlIGJlc3QgcGtnLWNvbmZpZyBhdmFpbGFibGUsCit1c2VmdWwgaWYgeW91IG5lZWQgcGtnLWNvbmZpZyBidXQgZG9uJ3Qgd2FudCB0byB1c2UgUEtHX0NIRUNLX01PRFVMRVMuCisuXCIKKy5UUAorLkkgIlBLR19DSEVDS19FWElTVFMoTU9EVUxFUywgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkiCisKK0NoZWNrIHRvIHNlZSB3aGV0aGVyIGEgcGFydGljdWxhciBzZXQgb2YgbW9kdWxlcyBleGlzdHMuICBTaW1pbGFyCit0byBQS0dfQ0hFQ0tfTU9EVUxFUygpLCBidXQgZG9lcyBub3Qgc2V0IHZhcmlhYmxlcyBvciBwcmludCBlcnJvcnMuCisKK1NpbWlsYXIgdG8gUEtHX0NIRUNLX01PRFVMRVMsIG1ha2Ugc3VyZSB0aGF0IHRoZSBmaXJzdCBpbnN0YW5jZSBvZgordGhpcyBvciBQS0dfQ0hFQ0tfTU9EVUxFUyBpcyBjYWxsZWQsIG9yIG1ha2Ugc3VyZSB0byBjYWxsCitQS0dfQ0hFQ0tfRVhJU1RTIG1hbnVhbGx5LgorCisuU0ggTUVUQURBVEEgRklMRSBTWU5UQVgKK1RvIGFkZCBhIGxpYnJhcnkgdG8gdGhlIHNldCBvZiBwYWNrYWdlcyBcZklwa2ctY29uZmlnXGZQIGtub3dzIGFib3V0LAorc2ltcGx5IGluc3RhbGwgYSBcZkkucGNcZlAgZmlsZS4gWW91IHNob3VsZCBpbnN0YWxsIHRoaXMgZmlsZSB0byAKKy5JIGxpYmRpclxmUC9wa2djb25maWcuCisuUFAKK0hlcmUgaXMgYW4gZXhhbXBsZSBmaWxlOgorLm5mCisjIFRoaXMgaXMgYSBjb21tZW50CitwcmVmaXg9L2hvbWUvaHAvdW5zdCAgICMgdGhpcyBkZWZpbmVzIGEgdmFyaWFibGUKK2V4ZWNfcHJlZml4PSR7cHJlZml4fSAgIyBkZWZpbmluZyBhbm90aGVyIHZhcmlhYmxlIGluIHRlcm1zIG9mIHRoZSBmaXJzdAorbGliZGlyPSR7ZXhlY19wcmVmaXh9L2xpYgoraW5jbHVkZWRpcj0ke3ByZWZpeH0vaW5jbHVkZQorCitOYW1lOiBHT2JqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaHVtYW4tcmVhZGFibGUgbmFtZQorRGVzY3JpcHRpb246IE9iamVjdC90eXBlIHN5c3RlbSBmb3IgR0xpYiAjIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uCitWZXJzaW9uOiAxLjMuMQorVVJMOiBodHRwOi8vd3d3Lmd0ay5vcmcKK1JlcXVpcmVzOiBnbGliLTIuMCA9IDEuMy4xCitDb25mbGljdHM6IGZvb2JhciA8PSA0LjUKK0xpYnM6IC1MJHtsaWJkaXJ9IC1sZ29iamVjdC0xLjMKK0xpYnMucHJpdmF0ZTogLWxtCitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfS9nbGliLTIuMCAtSSR7bGliZGlyfS9nbGliL2luY2x1ZGUgCisuZmkKKy5QUAorWW91IHdvdWxkIG5vcm1hbGx5IGdlbmVyYXRlIHRoZSBmaWxlIHVzaW5nIGNvbmZpZ3VyZSwgb2YgY291cnNlLCBzbwordGhhdCB0aGUgcHJlZml4LCBldGMuIGFyZSBzZXQgdG8gdGhlIHByb3BlciB2YWx1ZXMuCisuUFAKK0ZpbGVzIGhhdmUgdHdvIGtpbmRzIG9mIGxpbmU6IGtleXdvcmQgbGluZXMgc3RhcnQgd2l0aCBhIGtleXdvcmQgcGx1cworYSBjb2xvbiwgYW5kIHZhcmlhYmxlIGRlZmluaXRpb25zIHN0YXJ0IHdpdGggYW4gYWxwaGFudW1lcmljIHN0cmluZworcGx1cyBhbiBlcXVhbHMgc2lnbi4gS2V5d29yZHMgYXJlIGRlZmluZWQgaW4gYWR2YW5jZSBhbmQgaGF2ZSBzcGVjaWFsCittZWFuaW5nIHRvIFxmSXBrZy1jb25maWdcZlA7IHZhcmlhYmxlcyBkbyBub3QsIHlvdSBjYW4gaGF2ZSBhbnkKK3ZhcmlhYmxlcyB0aGF0IHlvdSB3aXNoIChob3dldmVyLCB1c2VycyBtYXkgZXhwZWN0IHRvIHJldHJpZXZlIHRoZQordXN1YWwgZGlyZWN0b3J5IG5hbWUgdmFyaWFibGVzKS4KKy5QUAorTm90ZSB0aGF0IHZhcmlhYmxlIHJlZmVyZW5jZXMgYXJlIHdyaXR0ZW4gIiR7Zm9vfSI7IHlvdSBjYW4gZXNjYXBlCitsaXRlcmFsICIkeyIgYXMgIiQkeyIuCisuVFAKKy5JICJOYW1lOiIKK1RoaXMgZmllbGQgc2hvdWxkIGJlIGEgaHVtYW4tcmVhZGFibGUgbmFtZSBmb3IgdGhlIHBhY2thZ2UuIE5vdGUgdGhhdAoraXQgaXMgbm90IHRoZSBuYW1lIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byBcZklwa2ctY29uZmlnXGZQLgorLlRQCisuSSAiRGVzY3JpcHRpb246IgorVGhpcyBzaG91bGQgYmUgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgcGFja2FnZQorLlRQCisuSSAiVVJMOiIKK0FuIFVSTCB3aGVyZSBwZW9wbGUgY2FuIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGFuZCBkb3dubG9hZCB0aGUgcGFja2FnZQorLlRQCisuSSAiVmVyc2lvbjoiCitUaGlzIHNob3VsZCBiZSB0aGUgbW9zdC1zcGVjaWZpYy1wb3NzaWJsZSBwYWNrYWdlIHZlcnNpb24gc3RyaW5nLgorLlRQCisuSSAiUmVxdWlyZXM6IgorVGhpcyBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBhY2thZ2VzIHRoYXQgYXJlIHJlcXVpcmVkIGJ5IHlvdXIKK3BhY2thZ2UuIEZsYWdzIGZyb20gZGVwZW5kZW50IHBhY2thZ2VzIHdpbGwgYmUgbWVyZ2VkIGluIHRvIHRoZSBmbGFncworcmVwb3J0ZWQgZm9yIHlvdXIgcGFja2FnZS4gT3B0aW9uYWxseSwgeW91IGNhbiBzcGVjaWZ5IHRoZSB2ZXJzaW9uIAorb2YgdGhlIHJlcXVpcmVkIHBhY2thZ2UgKHVzaW5nIHRoZSBvcGVyYXRvcnMgPSwgPCwgPiwgPj0sIDw9KTsKK3NwZWNpZnlpbmcgYSB2ZXJzaW9uIGFsbG93cyBcZklwa2ctY29uZmlnXGZQIHRvIHBlcmZvcm0gZXh0cmEgc2FuaXR5CitjaGVja3MuIFlvdSBtYXkgb25seSBtZW50aW9uIHRoZSBzYW1lIHBhY2thZ2Ugb25lIHRpbWUgb24gdGhlIAorLkkgIlJlcXVpcmVzOiIKK2xpbmUuIElmIHRoZSB2ZXJzaW9uIG9mIGEgcGFja2FnZSBpcyB1bnNwZWNpZmllZCwgYW55IHZlcnNpb24gd2lsbAorYmUgdXNlZCB3aXRoIG5vIGNoZWNraW5nLgorLlRQCisuSSBSZXF1aXJlcy5wcml2YXRlOgorQSBsaXN0IG9mIHBhY2thZ2VzIHJlcXVpcmVkIGJ5IHRoaXMgcGFja2FnZS4gVGhlIGRpZmZlcmVuY2UgZnJvbQorLkkgUmVxdWlyZXMKK2lzIHRoYXQgdGhlIHBhY2thZ2VzIGxpc3RlZCB1bmRlcgorLkkgUmVxdWlyZXMucHJpdmF0ZQorYXJlIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBhIGZsYWcgbGlzdCBpcyBjb21wdXRlZCBmb3IKK2R5bmFtaWNhbGx5IGxpbmtlZCBleGVjdXRhYmxlIChpLmUuLCB3aGVuIFwtXC1zdGF0aWMgd2FzIG5vdAorc3BlY2lmaWVkKS4gIEluIHRoZSBzaXR1YXRpb24gd2hlcmUgZWFjaCAucGMgZmlsZSBjb3JyZXNwb25kcyB0byBhCitsaWJyYXJ5LAorLkkgUmVxdWlyZXMucHJpdmF0ZQorc2hhbGwgYmUgdXNlZCBleGNsdXNpdmVseSB0byBzcGVjaWZ5IHRoZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGUKK2xpYnJhcmllcy4KKy5UUAorLkkgIkNvbmZsaWN0czoiCitUaGlzIG9wdGlvbmFsIGxpbmUgYWxsb3dzIFxmSXBrZy1jb25maWdcZlAgdG8gcGVyZm9ybSBhZGRpdGlvbmFsCitzYW5pdHkgY2hlY2tzLCBwcmltYXJpbHkgdG8gZGV0ZWN0IGJyb2tlbiB1c2VyIGluc3RhbGxhdGlvbnMuICBUaGUKK3N5bnRheCBpcyB0aGUgc2FtZSBhcworLkkgIlJlcXVpcmVzOiIKK2V4Y2VwdCB0aGF0Cit5b3UgY2FuIGxpc3QgdGhlIHNhbWUgcGFja2FnZSBtb3JlIHRoYW4gb25jZSBoZXJlLCBmb3IgZXhhbXBsZSAKKyJmb29iYXIgPSAxLjIuMywgZm9vYmFyID0gMS4yLjUsIGZvb2JhciA+PSAxLjMiLCBpZiB5b3UgaGF2ZSByZWFzb24gdG8KK2RvIHNvLiBJZiBhIHZlcnNpb24gaXNuJ3Qgc3BlY2lmaWVkLCB0aGVuIHlvdXIgcGFja2FnZSBjb25mbGljdHMgd2l0aAorYWxsIHZlcnNpb25zIG9mIHRoZSBtZW50aW9uZWQgcGFja2FnZS4gCitJZiBhIHVzZXIgdHJpZXMgdG8gdXNlIHlvdXIgcGFja2FnZSBhbmQgYSBjb25mbGljdGluZyBwYWNrYWdlIGF0IHRoZQorc2FtZSB0aW1lLCB0aGVuIFxmSXBrZy1jb25maWdcZlAgd2lsbCBjb21wbGFpbi4KKy5UUAorLkkgIkxpYnM6IgorVGhpcyBsaW5lIHNob3VsZCBnaXZlIHRoZSBsaW5rIGZsYWdzIHNwZWNpZmljIHRvIHlvdXIgcGFja2FnZS4gCitEb24ndCBhZGQgYW55IGZsYWdzIGZvciByZXF1aXJlZCBwYWNrYWdlczsgXGZJcGtnLWNvbmZpZ1xmUCB3aWxsIAorYWRkIHRob3NlIGF1dG9tYXRpY2FsbHkuCisuVFAKKy5JICJMaWJzLnByaXZhdGU6IgorVGhpcyBsaW5lIHNob3VsZCBsaXN0IGFueSBwcml2YXRlIGxpYnJhcmllcyBpbiB1c2UuICBQcml2YXRlIGxpYnJhcmllcworYXJlIGxpYnJhcmllcyB3aGljaCBhcmUgbm90IGV4cG9zZWQgdGhyb3VnaCB5b3VyIGxpYnJhcnksIGJ1dCBhcmUKK25lZWRlZCBpbiB0aGUgY2FzZSBvZiBzdGF0aWMgbGlua2luZy4gVGhpcyBkaWZmZXJzIGZyb20KKy5JIFJlcXVpcmVzLnByaXZhdGUKK2luIHRoYXQgaXQgcmVmZXJlbmNlcyBsaWJyYXJpZXMgdGhhdCBkbyBub3QgaGF2ZSBwYWNrYWdlIGZpbGVzCitpbnN0YWxsZWQuCisuVFAKKy5JICJDZmxhZ3M6IgorVGhpcyBsaW5lIHNob3VsZCBsaXN0IHRoZSBjb21waWxlIGZsYWdzIHNwZWNpZmljIHRvIHlvdXIgcGFja2FnZS4gCitEb24ndCBhZGQgYW55IGZsYWdzIGZvciByZXF1aXJlZCBwYWNrYWdlczsgXGZJcGtnLWNvbmZpZ1xmUCB3aWxsIAorYWRkIHRob3NlIGF1dG9tYXRpY2FsbHkuCisuXCIKKy5TSCBBVVRIT1IKKworLkkgcGtnLWNvbmZpZword2FzIHdyaXR0ZW4gYnkgSmFtZXMgSGVuc3RyaWRnZSwgcmV3cml0dGVuIGJ5IE1hcnRpam4gdmFuIEJlZXJzLCBhbmQKK3Jld3JpdHRlbiBhZ2FpbiBieSBIYXZvYyBQZW5uaW5ndG9uLiBUaW0gSmFuaWssIE93ZW4gVGF5bG9yLCBhbmQgUmFqYQorSGFyaW5hdGggc3VibWl0dGVkIHN1Z2dlc3Rpb25zIGFuZCBzb21lIGNvZGUuCisuSSBnbm9tZS1jb25maWcKK3dhcyB3cml0dGVuIGJ5IE1pZ3VlbCBkZSBJY2F6YSwgUmFqYSBIYXJpbmF0aCBhbmQgdmFyaW91cyBoYWNrZXJzIGluCit0aGUgR05PTUUgdGVhbS4gIEl0IHdhcyBpbnNwaXJlZCBieSBPd2VuIFRheWxvcidzIFxmSWd0ay1jb25maWdcZlAKK3Byb2dyYW0uCisuXCIKKy5TSCBCVUdTCisKK1xmSXBrZy1jb25maWdcZlAgZG9lcyBub3QgaGFuZGxlIG1peGluZyBvZiBwYXJhbWV0ZXJzIHdpdGggYW5kIHdpdGhvdXQKKz0gd2VsbC4gIFN0aWNrIHdpdGggb25lLgorCitCdWdzIGNhbiBiZSByZXBvcnRlZCBhdCBodHRwOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvIHVuZGVyIHRoZQorLkkgcGtnLWNvbmZpZworY29tcG9uZW50Lgo=